diff -Nru consul-1.7.4+dfsg1/acl/errors.go consul-1.8.7+dfsg1/acl/errors.go --- consul-1.7.4+dfsg1/acl/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/acl/errors.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ import ( "errors" + "fmt" "strings" ) @@ -70,3 +71,8 @@ } return errPermissionDenied } + +func PermissionDenied(msg string, args ...interface{}) PermissionDeniedError { + cause := fmt.Sprintf(msg, args...) + return PermissionDeniedError{Cause: cause} +} diff -Nru consul-1.7.4+dfsg1/acl/static_authorizer.go consul-1.8.7+dfsg1/acl/static_authorizer.go --- consul-1.7.4+dfsg1/acl/static_authorizer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/acl/static_authorizer.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,7 @@ // StaticAuthorizer is used to implement a base ACL policy. It either // allows or denies all requests. This can be used as a parent -// ACL to act in a blacklist or whitelist mode. +// ACL to act in a denylist or allowlist mode. type staticAuthorizer struct { allowManage bool defaultAllow bool diff -Nru consul-1.7.4+dfsg1/agent/acl_endpoint.go consul-1.8.7+dfsg1/agent/acl_endpoint.go --- consul-1.7.4+dfsg1/agent/acl_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/acl_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -1046,7 +1046,7 @@ } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.Auth)); err != nil { - return nil, BadRequestError{Reason: fmt.Sprintf("Failed to decode request body:: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Failed to decode request body: %v", err)} } var out structs.ACLToken diff -Nru consul-1.7.4+dfsg1/agent/acl_endpoint_legacy_test.go consul-1.8.7+dfsg1/agent/acl_endpoint_legacy_test.go --- consul-1.7.4+dfsg1/agent/acl_endpoint_legacy_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/acl_endpoint_legacy_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,7 @@ func TestACL_Legacy_Disabled_Response(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() tests := []func(resp http.ResponseWriter, req *http.Request) (interface{}, error){ @@ -71,7 +71,7 @@ func TestACL_Legacy_Update(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -101,7 +101,7 @@ func TestACL_Legacy_UpdateUpsert(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -130,7 +130,7 @@ func TestACL_Legacy_Destroy(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -162,7 +162,7 @@ func TestACL_Legacy_Clone(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -207,7 +207,7 @@ func TestACL_Legacy_Get(t *testing.T) { t.Parallel() t.Run("wrong id", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() req, _ := http.NewRequest("GET", "/v1/acl/info/nope", nil) @@ -227,7 +227,7 @@ }) t.Run("right id", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -251,13 +251,12 @@ func TestACL_Legacy_List(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") - var ids []string for i := 0; i < 10; i++ { - ids = append(ids, makeTestACL(t, a.srv)) + makeTestACL(t, a.srv) } req, _ := http.NewRequest("GET", "/v1/acl/list?token=root", nil) @@ -280,7 +279,7 @@ func TestACLReplicationStatus(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() req, _ := http.NewRequest("GET", "/v1/acl/replication", nil) diff -Nru consul-1.7.4+dfsg1/agent/acl_endpoint_test.go consul-1.8.7+dfsg1/agent/acl_endpoint_test.go --- consul-1.7.4+dfsg1/agent/acl_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/acl_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,12 +8,18 @@ "net/http" "net/http/httptest" "testing" + "time" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/authmethod/testauth" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/consul/sdk/freeport" + "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/go-uuid" "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2/jwt" ) // NOTE: The tests contained herein are designed to test the HTTP API @@ -22,7 +28,7 @@ func TestACL_Disabled_Response(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() type testCase struct { @@ -79,7 +85,7 @@ func TestACL_Bootstrap(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` acl_master_token = "" `) defer a.Shutdown() @@ -127,7 +133,7 @@ func TestACL_HTTP(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -402,6 +408,12 @@ Name: policyMap[idMap["policy-read-all-nodes"]].Name, }, }, + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "web-node", + Datacenter: "foo", + }, + }, } req, _ := http.NewRequest("PUT", "/v1/acl/role?token=root", jsonBody(roleInput)) @@ -417,6 +429,7 @@ require.Equal(t, roleInput.Name, role.Name) require.Equal(t, roleInput.Description, role.Description) require.Equal(t, roleInput.Policies, role.Policies) + require.Equal(t, roleInput.NodeIdentities, role.NodeIdentities) require.True(t, role.CreateIndex > 0) require.Equal(t, role.CreateIndex, role.ModifyIndex) require.NotNil(t, role.Hash) @@ -496,6 +509,12 @@ ServiceName: "web-indexer", }, }, + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "web-node", + Datacenter: "foo", + }, + }, } req, _ := http.NewRequest("PUT", "/v1/acl/role/"+idMap["role-test"]+"?token=root", jsonBody(roleInput)) @@ -512,6 +531,7 @@ require.Equal(t, roleInput.Description, role.Description) require.Equal(t, roleInput.Policies, role.Policies) require.Equal(t, roleInput.ServiceIdentities, role.ServiceIdentities) + require.Equal(t, roleInput.NodeIdentities, role.NodeIdentities) require.True(t, role.CreateIndex > 0) require.True(t, role.CreateIndex < role.ModifyIndex) require.NotNil(t, role.Hash) @@ -617,6 +637,12 @@ Name: policyMap[idMap["policy-read-all-nodes"]].Name, }, }, + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "foo", + Datacenter: "bar", + }, + }, } req, _ := http.NewRequest("PUT", "/v1/acl/token?token=root", jsonBody(tokenInput)) @@ -632,6 +658,7 @@ require.Len(t, token.SecretID, 36) require.Equal(t, tokenInput.Description, token.Description) require.Equal(t, tokenInput.Policies, token.Policies) + require.Equal(t, tokenInput.NodeIdentities, token.NodeIdentities) require.True(t, token.CreateIndex > 0) require.Equal(t, token.CreateIndex, token.ModifyIndex) require.NotNil(t, token.Hash) @@ -735,6 +762,12 @@ Name: policyMap[idMap["policy-read-all-nodes"]].Name, }, }, + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "foo", + Datacenter: "bar", + }, + }, } req, _ := http.NewRequest("PUT", "/v1/acl/token/"+originalToken.AccessorID+"?token=root", jsonBody(tokenInput)) @@ -748,6 +781,7 @@ require.Equal(t, originalToken.SecretID, token.SecretID) require.Equal(t, tokenInput.Description, token.Description) require.Equal(t, tokenInput.Policies, token.Policies) + require.Equal(t, tokenInput.NodeIdentities, token.NodeIdentities) require.True(t, token.CreateIndex > 0) require.True(t, token.CreateIndex < token.ModifyIndex) require.NotNil(t, token.Hash) @@ -1092,7 +1126,7 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { // This tests AuthMethods, BindingRules, Login, and Logout. t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1590,9 +1624,171 @@ }) } +func TestACLEndpoint_LoginLogout_jwt(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, TestACLConfigWithParams(nil)) + defer a.Shutdown() + + testrpc.WaitForLeader(t, a.RPC, "dc1") + + // spin up a fake oidc server + oidcServer := startSSOTestServer(t) + pubKey, privKey := oidcServer.SigningKeys() + + type mConfig = map[string]interface{} + cases := map[string]struct { + f func(config mConfig) + issuer string + expectErr string + }{ + "success - jwt static keys": {func(config mConfig) { + config["BoundIssuer"] = "https://legit.issuer.internal/" + config["JWTValidationPubKeys"] = []string{pubKey} + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt jwks": {func(config mConfig) { + config["JWKSURL"] = oidcServer.Addr() + "/certs" + config["JWKSCACert"] = oidcServer.CACert() + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt oidc discovery": {func(config mConfig) { + config["OIDCDiscoveryURL"] = oidcServer.Addr() + config["OIDCDiscoveryCACert"] = oidcServer.CACert() + }, + oidcServer.Addr(), + ""}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + method, err := upsertTestCustomizedAuthMethod(a.RPC, TestDefaultMasterToken, "dc1", func(method *structs.ACLAuthMethod) { + method.Type = "jwt" + method.Config = map[string]interface{}{ + "JWTSupportedAlgs": []string{"ES256"}, + "ClaimMappings": map[string]string{ + "first_name": "name", + "/org/primary": "primary_org", + }, + "ListClaimMappings": map[string]string{ + "https://consul.test/groups": "groups", + }, + "BoundAudiences": []string{"https://consul.test"}, + } + if tc.f != nil { + tc.f(method.Config) + } + }) + require.NoError(t, err) + + t.Run("invalid bearer token", func(t *testing.T) { + loginInput := &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: "invalid", + } + + req, _ := http.NewRequest("POST", "/v1/acl/login", jsonBody(loginInput)) + resp := httptest.NewRecorder() + _, err := a.srv.ACLLogin(resp, req) + require.Error(t, err) + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Audience: jwt.Audience{"https://consul.test"}, + Issuer: tc.issuer, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + type orgs struct { + Primary string `json:"primary"` + } + + privateCl := struct { + FirstName string `json:"first_name"` + Org orgs `json:"org"` + Groups []string `json:"https://consul.test/groups"` + }{ + FirstName: "jeff2", + Org: orgs{"engineering"}, + Groups: []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT(privKey, cl, privateCl) + require.NoError(t, err) + + t.Run("valid bearer token no bindings", func(t *testing.T) { + loginInput := &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: jwtData, + } + + req, _ := http.NewRequest("POST", "/v1/acl/login", jsonBody(loginInput)) + resp := httptest.NewRecorder() + _, err := a.srv.ACLLogin(resp, req) + + testutil.RequireErrorContains(t, err, "Permission denied") + }) + + _, err = upsertTestCustomizedBindingRule(a.RPC, TestDefaultMasterToken, "dc1", func(rule *structs.ACLBindingRule) { + rule.AuthMethod = method.Name + rule.BindType = structs.BindingRuleBindTypeService + rule.BindName = "test--${value.name}--${value.primary_org}" + rule.Selector = "value.name == jeff2 and value.primary_org == engineering and foo in list.groups" + }) + require.NoError(t, err) + + t.Run("valid bearer token 1 service binding", func(t *testing.T) { + loginInput := &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: jwtData, + } + + req, _ := http.NewRequest("POST", "/v1/acl/login", jsonBody(loginInput)) + resp := httptest.NewRecorder() + obj, err := a.srv.ACLLogin(resp, req) + require.NoError(t, err) + + token, ok := obj.(*structs.ACLToken) + require.True(t, ok) + + require.Equal(t, method.Name, token.AuthMethod) + require.Equal(t, `token created via login`, token.Description) + require.True(t, token.Local) + require.Len(t, token.Roles, 0) + require.Len(t, token.ServiceIdentities, 1) + svcid := token.ServiceIdentities[0] + require.Len(t, svcid.Datacenters, 0) + require.Equal(t, "test--jeff2--engineering", svcid.ServiceName) + + // and delete it + req, _ = http.NewRequest("GET", "/v1/acl/logout", nil) + req.Header.Add("X-Consul-Token", token.SecretID) + resp = httptest.NewRecorder() + _, err = a.srv.ACLLogout(resp, req) + require.NoError(t, err) + + // verify the token was deleted + req, _ = http.NewRequest("GET", "/v1/acl/token/"+token.AccessorID, nil) + req.Header.Add("X-Consul-Token", TestDefaultMasterToken) + resp = httptest.NewRecorder() + + // make the request + _, err = a.srv.ACLTokenCRUD(resp, req) + require.Error(t, err) + require.Equal(t, acl.ErrNotFound, err) + }) + }) + } +} + func TestACL_Authorize(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), TestACLConfigWithParams(nil)) + a1 := NewTestAgent(t, TestACLConfigWithParams(nil)) defer a1.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "dc1", testrpc.WithToken(TestDefaultMasterToken)) @@ -1628,7 +1824,7 @@ secondaryParams.ReplicationToken = secondaryParams.MasterToken secondaryParams.EnableTokenReplication = true - a2 := NewTestAgent(t, t.Name(), `datacenter = "dc2" `+TestACLConfigWithParams(secondaryParams)) + a2 := NewTestAgent(t, `datacenter = "dc2" `+TestACLConfigWithParams(secondaryParams)) defer a2.Shutdown() addr := fmt.Sprintf("127.0.0.1:%d", a1.Config.SerfPortWAN) @@ -2031,3 +2227,66 @@ require.Nil(t, raw) }) } + +type rpcFn func(string, interface{}, interface{}) error + +func upsertTestCustomizedAuthMethod( + rpc rpcFn, masterToken string, datacenter string, + modify func(method *structs.ACLAuthMethod), +) (*structs.ACLAuthMethod, error) { + name, err := uuid.GenerateUUID() + if err != nil { + return nil, err + } + + req := structs.ACLAuthMethodSetRequest{ + Datacenter: datacenter, + AuthMethod: structs.ACLAuthMethod{ + Name: "test-method-" + name, + Type: "testing", + }, + WriteRequest: structs.WriteRequest{Token: masterToken}, + } + + if modify != nil { + modify(&req.AuthMethod) + } + + var out structs.ACLAuthMethod + + err = rpc("ACL.AuthMethodSet", &req, &out) + if err != nil { + return nil, err + } + + return &out, nil +} + +func upsertTestCustomizedBindingRule(rpc rpcFn, masterToken string, datacenter string, modify func(rule *structs.ACLBindingRule)) (*structs.ACLBindingRule, error) { + req := structs.ACLBindingRuleSetRequest{ + Datacenter: datacenter, + BindingRule: structs.ACLBindingRule{}, + WriteRequest: structs.WriteRequest{Token: masterToken}, + } + + if modify != nil { + modify(&req.BindingRule) + } + + var out structs.ACLBindingRule + + err := rpc("ACL.BindingRuleSet", &req, &out) + if err != nil { + return nil, err + } + + return &out, nil +} + +func startSSOTestServer(t *testing.T) *oidcauthtest.Server { + ports := freeport.MustTake(1) + return oidcauthtest.Start(t, oidcauthtest.WithPort( + ports[0], + func() { freeport.Return(ports) }, + )) +} diff -Nru consul-1.7.4+dfsg1/agent/acl.go consul-1.8.7+dfsg1/agent/acl.go --- consul-1.7.4+dfsg1/agent/acl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/acl.go 2020-12-10 21:46:52.000000000 +0000 @@ -25,11 +25,6 @@ return nil, nil } - // Disable ACLs if version 8 enforcement isn't enabled. - if !a.config.ACLEnforceVersion8 { - return nil, nil - } - if acl.RootAuthorizer(id) != nil { return nil, acl.ErrRootDenied } @@ -42,25 +37,15 @@ } // resolveIdentityFromToken is used to resolve an ACLToken's secretID to a structs.ACLIdentity -func (a *Agent) resolveIdentityFromToken(secretID string) (bool, structs.ACLIdentity, error) { - // ACLs are disabled - if !a.delegate.ACLsEnabled() { - return false, nil, nil - } - - // Disable ACLs if version 8 enforcement isn't enabled. - if !a.config.ACLEnforceVersion8 { - return false, nil, nil - } - - return a.delegate.ResolveIdentityFromToken(secretID) +func (a *Agent) resolveIdentityFromToken(secretID string) (structs.ACLIdentity, error) { + return a.delegate.ResolveTokenToIdentity(secretID) } // aclAccessorID is used to convert an ACLToken's secretID to its accessorID for non- // critical purposes, such as logging. Therefore we interpret all errors as empty-string // so we can safely log it without handling non-critical errors at the usage site. func (a *Agent) aclAccessorID(secretID string) string { - _, ident, err := a.resolveIdentityFromToken(secretID) + ident, err := a.resolveIdentityFromToken(secretID) if acl.IsErrNotFound(err) { return "" } @@ -74,7 +59,7 @@ return ident.ID() } -func (a *Agent) initializeACLs() error { +func initializeACLs(nodeName string) (acl.Authorizer, error) { // Build a policy for the agent master token. // The builtin agent master policy allows reading any node information // and allows writes to the agent with the node name of the running agent @@ -83,25 +68,20 @@ policy := &acl.Policy{ PolicyRules: acl.PolicyRules{ Agents: []*acl.AgentRule{ - &acl.AgentRule{ - Node: a.config.NodeName, + { + Node: nodeName, Policy: acl.PolicyWrite, }, }, NodePrefixes: []*acl.NodeRule{ - &acl.NodeRule{ + { Name: "", Policy: acl.PolicyRead, }, }, }, } - master, err := acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) - if err != nil { - return err - } - a.aclMasterAuthorizer = master - return nil + return acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) } // vetServiceRegister makes sure the service registration action is allowed by @@ -125,14 +105,16 @@ service.FillAuthzContext(&authzContext) // Vet the service itself. if authz.ServiceWrite(service.Service, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + serviceName := service.CompoundServiceName() + return acl.PermissionDenied("Missing service:write on %s", serviceName.String()) } // Vet any service that might be getting overwritten. if existing := a.State.Service(service.CompoundServiceID()); existing != nil { existing.FillAuthzContext(&authzContext) if authz.ServiceWrite(existing.Service, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + serviceName := service.CompoundServiceName() + return acl.PermissionDenied("Missing service:write on %s", serviceName.String()) } } @@ -141,7 +123,7 @@ if service.Kind == structs.ServiceKindConnectProxy { service.FillAuthzContext(&authzContext) if authz.ServiceWrite(service.Proxy.DestinationServiceName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing service:write on %s", service.Proxy.DestinationServiceName) } } @@ -171,7 +153,8 @@ if existing := a.State.Service(serviceID); existing != nil { existing.FillAuthzContext(&authzContext) if authz.ServiceWrite(existing.Service, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + serviceName := existing.CompoundServiceName() + return acl.PermissionDenied("Missing service:write on %s", serviceName.String()) } } else { return fmt.Errorf("Unknown service %q", serviceID) @@ -202,11 +185,11 @@ // Vet the check itself. if len(check.ServiceName) > 0 { if authz.ServiceWrite(check.ServiceName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing service:write on %v", structs.ServiceIDString(check.ServiceName, &check.EnterpriseMeta)) } } else { if authz.NodeWrite(a.config.NodeName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing node:write on %s", a.config.NodeName) } } @@ -214,11 +197,11 @@ if existing := a.State.Check(check.CompoundCheckID()); existing != nil { if len(existing.ServiceName) > 0 { if authz.ServiceWrite(existing.ServiceName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing service:write on %s", structs.ServiceIDString(existing.ServiceName, &existing.EnterpriseMeta)) } } else { if authz.NodeWrite(a.config.NodeName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing node:write on %s", a.config.NodeName) } } } @@ -249,11 +232,11 @@ if existing := a.State.Check(checkID); existing != nil { if len(existing.ServiceName) > 0 { if authz.ServiceWrite(existing.ServiceName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing service:write on %s", existing.ServiceName) } } else { if authz.NodeWrite(a.config.NodeName, &authzContext) != acl.Allow { - return acl.ErrPermissionDenied + return acl.PermissionDenied("Missing node:write on %s", a.config.NodeName) } } } else { diff -Nru consul-1.7.4+dfsg1/agent/acl_test.go consul-1.8.7+dfsg1/agent/acl_test.go --- consul-1.7.4+dfsg1/agent/acl_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/acl_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,65 +21,56 @@ "github.com/stretchr/testify/require" ) -type TestACLAgent struct { - // Name is an optional name of the agent. - Name string - - HCL string +type authzResolver func(string) (structs.ACLIdentity, acl.Authorizer, error) +type identResolver func(string) (structs.ACLIdentity, error) - // Config is the agent configuration. If Config is nil then - // TestConfig() is used. If Config.DataDir is set then it is - // the callers responsibility to clean up the data directory. - // Otherwise, a temporary data directory is created and removed - // when Shutdown() is called. - Config *config.RuntimeConfig - - // LogOutput is the sink for the logs. If nil, logs are written - // to os.Stderr. - LogOutput io.Writer - - // DataDir is the data directory which is used when Config.DataDir - // is not set. It is created automatically and removed when - // Shutdown() is called. - DataDir string - - resolveTokenFn func(string) (structs.ACLIdentity, acl.Authorizer, error) +type TestACLAgent struct { + resolveAuthzFn authzResolver + resolveIdentFn identResolver *Agent } -// NewTestACLAGent does just enough so that all the code within agent/acl.go can work +// NewTestACLAgent does just enough so that all the code within agent/acl.go can work // Basically it needs a local state for some of the vet* functions, a logger and a delegate. // The key is that we are the delegate so we can control the ResolveToken responses -func NewTestACLAgent(t *testing.T, name string, hcl string, resolveFn func(string) (structs.ACLIdentity, acl.Authorizer, error)) *TestACLAgent { - a := &TestACLAgent{Name: name, HCL: hcl, resolveTokenFn: resolveFn} - hclDataDir := `data_dir = "acl-agent"` - - logOutput := testutil.TestWriter(t) - logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ - Name: a.Name, - Level: hclog.Debug, - Output: logOutput, - }) +func NewTestACLAgent(t *testing.T, name string, hcl string, resolveAuthz authzResolver, resolveIdent identResolver) *TestACLAgent { + t.Helper() - a.Config = TestConfig(logger, - config.Source{Name: a.Name, Format: "hcl", Data: a.HCL}, - config.Source{Name: a.Name + ".data_dir", Format: "hcl", Data: hclDataDir}, - ) + a := &TestACLAgent{resolveAuthzFn: resolveAuthz, resolveIdentFn: resolveIdent} - agent, err := New(a.Config, logger) - if err != nil { - panic(fmt.Sprintf("Error creating agent: %v", err)) + dataDir := testutil.TempDir(t, "acl-agent") + + logBuffer := testutil.NewLogBuffer(t) + loader := func(source config.Source) (*config.RuntimeConfig, []string, error) { + dataDir := fmt.Sprintf(`data_dir = "%s"`, dataDir) + opts := config.BuilderOpts{ + HCL: []string{TestConfigHCL(NodeID()), hcl, dataDir}, + } + cfg, warnings, err := config.Load(opts, source) + if cfg != nil { + cfg.Telemetry.Disable = true + } + return cfg, warnings, err } - a.Agent = agent + bd, err := NewBaseDeps(loader, logBuffer) + require.NoError(t, err) + + bd.Logger = hclog.NewInterceptLogger(&hclog.LoggerOptions{ + Name: name, + Level: hclog.Debug, + Output: logBuffer, + TimeFormat: "04:05.000", + }) + bd.MetricsHandler = metrics.NewInmemSink(1*time.Second, time.Minute) + + agent, err := New(bd) + require.NoError(t, err) - agent.LogOutput = logOutput - agent.logger = logger - agent.MemSink = metrics.NewInmemSink(1*time.Second, time.Minute) - - a.Agent.delegate = a - a.Agent.State = local.NewState(LocalConfig(a.Config), a.Agent.logger, a.Agent.tokens) - a.Agent.State.TriggerSyncChanges = func() {} + agent.delegate = a + agent.State = local.NewState(LocalConfig(bd.RuntimeConfig), bd.Logger, bd.Tokens) + agent.State.TriggerSyncChanges = func() {} + a.Agent = agent return a } @@ -93,20 +84,28 @@ } func (a *TestACLAgent) ResolveToken(secretID string) (acl.Authorizer, error) { - if a.resolveTokenFn == nil { - panic("This agent is useless without providing a token resolution function") + if a.resolveAuthzFn == nil { + return nil, fmt.Errorf("ResolveToken call is unexpected - no authz resolver callback set") } - _, authz, err := a.resolveTokenFn(secretID) + _, authz, err := a.resolveAuthzFn(secretID) return authz, err } func (a *TestACLAgent) ResolveTokenToIdentityAndAuthorizer(secretID string) (structs.ACLIdentity, acl.Authorizer, error) { - if a.resolveTokenFn == nil { - panic("This agent is useless without providing a token resolution function") + if a.resolveAuthzFn == nil { + return nil, nil, fmt.Errorf("ResolveTokenToIdentityAndAuthorizer call is unexpected - no authz resolver callback set") + } + + return a.resolveAuthzFn(secretID) +} + +func (a *TestACLAgent) ResolveTokenToIdentity(secretID string) (structs.ACLIdentity, error) { + if a.resolveIdentFn == nil { + return nil, fmt.Errorf("ResolveTokenToIdentity call is unexpected - no ident resolver callback set") } - return a.resolveTokenFn(secretID) + return a.resolveIdentFn(secretID) } func (a *TestACLAgent) ResolveTokenAndDefaultMeta(secretID string, entMeta *structs.EnterpriseMeta, authzContext *acl.AuthorizerContext) (acl.Authorizer, error) { @@ -129,23 +128,7 @@ return authz, err } -func (a *TestACLAgent) ResolveIdentityFromToken(secretID string) (bool, structs.ACLIdentity, error) { - if a.resolveTokenFn == nil { - panic("This agent is useless without providing a token resolution function") - } - - identity, _, err := a.resolveTokenFn(secretID) - if err != nil { - return true, nil, err - } - - return true, identity, nil -} - // All of these are stubs to satisfy the interface -func (a *TestACLAgent) Encrypted() bool { - return false -} func (a *TestACLAgent) GetLANCoordinate() (lib.CoordinateSet, error) { return nil, fmt.Errorf("Unimplemented") } @@ -187,49 +170,25 @@ return fmt.Errorf("Unimplemented") } -func TestACL_Version8(t *testing.T) { +func TestACL_Version8EnabledByDefault(t *testing.T) { t.Parallel() - t.Run("version 8 disabled", func(t *testing.T) { - resolveFn := func(string) (structs.ACLIdentity, acl.Authorizer, error) { - require.Fail(t, "should not have called delegate.ResolveToken") - return nil, nil, fmt.Errorf("should not have called delegate.ResolveToken") - } - - a := NewTestACLAgent(t, t.Name(), TestACLConfig()+` - acl_enforce_version_8 = false - `, resolveFn) - - token, err := a.resolveToken("nope") - require.Nil(t, token) - require.Nil(t, err) - }) + called := false + resolveFn := func(string) (structs.ACLIdentity, acl.Authorizer, error) { + called = true + return nil, nil, acl.ErrNotFound + } + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), resolveFn, nil) - t.Run("version 8 enabled", func(t *testing.T) { - called := false - resolveFn := func(string) (structs.ACLIdentity, acl.Authorizer, error) { - called = true - return nil, nil, acl.ErrNotFound - } - a := NewTestACLAgent(t, t.Name(), TestACLConfig()+` - acl_enforce_version_8 = true - `, resolveFn) - - _, err := a.resolveToken("nope") - require.Error(t, err) - require.True(t, called) - }) + _, err := a.resolveToken("nope") + require.Error(t, err) + require.True(t, called) } func TestACL_AgentMasterToken(t *testing.T) { t.Parallel() - resolveFn := func(string) (structs.ACLIdentity, acl.Authorizer, error) { - require.Fail(t, "should not have called delegate.ResolveToken") - return nil, nil, fmt.Errorf("should not have called delegate.ResolveToken") - } - - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), resolveFn) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), nil, nil) a.loadTokens(a.config) authz, err := a.resolveToken("towel") require.NotNil(t, authz) @@ -244,12 +203,7 @@ func TestACL_RootAuthorizersDenied(t *testing.T) { t.Parallel() - resolveFn := func(string) (structs.ACLIdentity, acl.Authorizer, error) { - require.Fail(t, "should not have called delegate.ResolveToken") - return nil, nil, fmt.Errorf("should not have called delegate.ResolveToken") - } - - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), resolveFn) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), nil, nil) authz, err := a.resolveToken("deny") require.Nil(t, authz) require.Error(t, err) @@ -283,35 +237,35 @@ otherRWSecret = "a38e8016-91b6-4876-b3e7-a307abbb2002" testTokens = map[string]testToken{ - nodeROSecret: testToken{ + nodeROSecret: { token: structs.ACLToken{ AccessorID: "9df2d1a4-2d07-414e-8ead-6053f56ed2eb", SecretID: nodeROSecret, }, rules: `node_prefix "Node" { policy = "read" }`, }, - nodeRWSecret: testToken{ + nodeRWSecret: { token: structs.ACLToken{ AccessorID: "efb6b7d5-d343-47c1-b4cb-aa6b94d2f490", - SecretID: nodeROSecret, + SecretID: nodeRWSecret, }, rules: `node_prefix "Node" { policy = "write" }`, }, - serviceROSecret: testToken{ + serviceROSecret: { token: structs.ACLToken{ AccessorID: "0da53edb-36e5-4603-9c31-79965bad45f5", SecretID: serviceROSecret, }, rules: `service_prefix "service" { policy = "read" }`, }, - serviceRWSecret: testToken{ + serviceRWSecret: { token: structs.ACLToken{ AccessorID: "52504258-137a-41e6-9326-01f40e80872e", SecretID: serviceRWSecret, }, rules: `service_prefix "service" { policy = "write" }`, }, - otherRWSecret: testToken{ + otherRWSecret: { token: structs.ACLToken{ AccessorID: "5e032c5b-c39e-4552-b5ad-8a9365b099c4", SecretID: otherRWSecret, @@ -336,9 +290,18 @@ return &tok.token, authz, err } +func catalogIdent(token string) (structs.ACLIdentity, error) { + tok, ok := testTokens[token] + if !ok { + return nil, acl.ErrNotFound + } + + return &tok.token, nil +} + func TestACL_vetServiceRegister(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) // Register a new service, with permission. err := a.vetServiceRegister(serviceRWSecret, &structs.NodeService{ @@ -369,7 +332,7 @@ func TestACL_vetServiceUpdate(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) // Update a service that doesn't exist. err := a.vetServiceUpdate(serviceRWSecret, structs.NewServiceID("my-service", nil)) @@ -392,7 +355,7 @@ func TestACL_vetCheckRegister(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) // Register a new service check with write privs. err := a.vetCheckRegister(serviceRWSecret, &structs.HealthCheck{ @@ -458,7 +421,7 @@ func TestACL_vetCheckUpdate(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) // Update a check that doesn't exist. err := a.vetCheckUpdate(nodeRWSecret, structs.NewCheckID("my-check", nil)) @@ -498,7 +461,7 @@ func TestACL_filterMembers(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) var members []serf.Member require.NoError(t, a.filterMembers(nodeROSecret, &members)) @@ -517,7 +480,7 @@ func TestACL_filterServices(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) services := make(map[structs.ServiceID]*structs.NodeService) require.NoError(t, a.filterServices(nodeROSecret, &services)) @@ -531,7 +494,7 @@ func TestACL_filterChecks(t *testing.T) { t.Parallel() - a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy) + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), catalogPolicy, catalogIdent) checks := make(map[structs.CheckID]*structs.HealthCheck) require.NoError(t, a.filterChecks(nodeROSecret, &checks)) @@ -558,3 +521,21 @@ _, ok = checks[structs.NewCheckID("my-other", nil)] require.False(t, ok) } + +func TestACL_ResolveIdentity(t *testing.T) { + t.Parallel() + a := NewTestACLAgent(t, t.Name(), TestACLConfig(), nil, catalogIdent) + + // this test is meant to ensure we are calling the correct function + // which is ResolveTokenToIdentity on the Agent delegate. Our + // nil authz resolver will cause it to emit an error if used + ident, err := a.resolveIdentityFromToken(nodeROSecret) + require.NoError(t, err) + require.NotNil(t, ident) + + // just double checkingto ensure if we had used the wrong function + // that an error would be produced + _, err = a.resolveToken(nodeROSecret) + require.Error(t, err) + +} diff -Nru consul-1.7.4+dfsg1/agent/ae/ae_test.go consul-1.8.7+dfsg1/agent/ae/ae_test.go --- consul-1.7.4+dfsg1/agent/ae/ae_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/ae/ae_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -394,7 +394,7 @@ func testSyncer(t *testing.T) *StateSyncer { logger := hclog.New(&hclog.LoggerOptions{ Level: 0, - Output: testutil.TestWriter(t), + Output: testutil.NewLogBuffer(t), }) l := NewStateSyncer(nil, time.Second, nil, logger) diff -Nru consul-1.7.4+dfsg1/agent/agent_endpoint.go consul-1.8.7+dfsg1/agent/agent_endpoint.go --- consul-1.7.4+dfsg1/agent/agent_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agent_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,7 @@ "github.com/hashicorp/consul/agent/debug" "github.com/hashicorp/consul/agent/structs" token_store "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/agent/xds/proxysupport" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/ipaddr" "github.com/hashicorp/consul/lib" @@ -38,6 +39,11 @@ Member serf.Member Stats map[string]map[string]string Meta map[string]string + XDS *xdsSelf `json:"xDS,omitempty"` +} + +type xdsSelf struct { + SupportedProxies map[string][]string } func (s *HTTPServer) AgentSelf(resp http.ResponseWriter, req *http.Request) (interface{}, error) { @@ -60,6 +66,15 @@ } } + var xds *xdsSelf + if s.agent.grpcServer != nil { + xds = &xdsSelf{ + SupportedProxies: map[string][]string{ + "envoy": proxysupport.EnvoyVersions, + }, + } + } + config := struct { Datacenter string NodeName string @@ -82,6 +97,7 @@ Member: s.agent.LocalMember(), Stats: s.agent.Stats(), Meta: s.agent.State.Metadata(), + XDS: xds, }, nil } @@ -154,21 +170,7 @@ return nil, acl.ErrPermissionDenied } - // Trigger the reload - errCh := make(chan error) - select { - case <-s.agent.shutdownCh: - return nil, fmt.Errorf("Agent was shutdown before reload could be completed") - case s.agent.reloadCh <- errCh: - } - - // Wait for the result of the reload, or for the agent to shutdown - select { - case <-s.agent.shutdownCh: - return nil, fmt.Errorf("Agent was shutdown before reload could be completed") - case err := <-errCh: - return nil, err - } + return nil, s.agent.ReloadConfig() } func buildAgentService(s *structs.NodeService) api.AgentService { @@ -210,9 +212,7 @@ as.Meta = map[string]string{} } // Attach Proxy config if exists - if s.Kind == structs.ServiceKindConnectProxy || - s.Kind == structs.ServiceKindMeshGateway { - + if s.Kind == structs.ServiceKindConnectProxy || s.IsGateway() { as.Proxy = s.Proxy.ToAPI() } @@ -461,7 +461,11 @@ // Get the address addr := strings.TrimPrefix(req.URL.Path, "/v1/agent/join/") + if wan { + if s.agent.config.ConnectMeshGatewayWANFederationEnabled { + return nil, fmt.Errorf("WAN join is disabled when wan federation via mesh gateways is enabled") + } _, err = s.agent.JoinWAN([]string{addr}) } else { _, err = s.agent.JoinLAN([]string{addr}) @@ -765,8 +769,7 @@ return nil, err } - var sid structs.ServiceID - sid.Init(serviceID, &entMeta) + sid := structs.NewServiceID(serviceID, &entMeta) if service := s.agent.State.Service(sid); service != nil { if authz != nil && authz.ServiceRead(service.Service, &authzContext) != acl.Allow { @@ -828,8 +831,7 @@ result := make([]api.AgentServiceChecksInfo, 0, 16) for _, service := range services { if service.Service == serviceName { - var sid structs.ServiceID - sid.Init(service.ID, &entMeta) + sid := structs.NewServiceID(service.ID, &entMeta) scode, sstatus, healthChecks := agentHealthService(sid, s) serviceInfo := buildAgentService(service) @@ -904,7 +906,7 @@ return nil, nil } } - if err := structs.ValidateMetadata(ns.Meta, false); err != nil { + if err := structs.ValidateServiceMetadata(ns.Kind, ns.Meta, false); err != nil { resp.WriteHeader(http.StatusBadRequest) fmt.Fprint(resp, fmt.Errorf("Invalid Service Meta: %v", err)) return nil, nil @@ -914,7 +916,7 @@ // the catalog endpoint so it helps ensure the sync will work properly. if err := ns.Validate(); err != nil { resp.WriteHeader(http.StatusBadRequest) - fmt.Fprintf(resp, err.Error()) + fmt.Fprint(resp, err.Error()) return nil, nil } @@ -1317,7 +1319,7 @@ return nil, nil } - raw, m, err := s.agent.cache.Get(cachetype.ConnectCARootName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.ConnectCARootName, &args) if err != nil { return nil, err } @@ -1359,7 +1361,7 @@ args.MaxQueryTime = qOpts.MaxQueryTime args.Token = qOpts.Token - raw, m, err := s.agent.cache.Get(cachetype.ConnectCALeafName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.ConnectCALeafName, &args) if err != nil { return nil, err } diff -Nru consul-1.7.4+dfsg1/agent/agent_endpoint_test.go consul-1.8.7+dfsg1/agent/agent_endpoint_test.go --- consul-1.7.4+dfsg1/agent/agent_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agent_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,10 +8,11 @@ "encoding/json" "fmt" "io" + "io/ioutil" "net/http" "net/http/httptest" "net/url" - "reflect" + "os" "strconv" "strings" "testing" @@ -25,6 +26,7 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" tokenStore "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/agent/xds/proxysupport" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/sdk/testutil" @@ -55,7 +57,7 @@ func TestAgent_Services(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -83,7 +85,7 @@ func TestAgent_ServicesFiltered(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -129,7 +131,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -161,7 +163,7 @@ require := require.New(t) assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -201,11 +203,11 @@ assert.NotContains(string(output), "locally_registered_as_sidecar") } -// Thie tests that a mesh gateway service is returned as expected. +// This tests that a mesh gateway service is returned as expected. func TestAgent_Services_MeshGateway(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -233,9 +235,41 @@ require.Equal(t, srv1.Proxy.ToAPI(), actual.Proxy) } +// This tests that a terminating gateway service is returned as expected. +func TestAgent_Services_TerminatingGateway(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, "") + defer a.Shutdown() + + testrpc.WaitForLeader(t, a.RPC, "dc1") + srv1 := &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + ID: "tg-dc1-01", + Service: "tg-dc1", + Port: 8443, + Proxy: structs.ConnectProxyConfig{ + Config: map[string]interface{}{ + "foo": "bar", + }, + }, + } + require.NoError(t, a.State.AddService(srv1, "")) + + req, _ := http.NewRequest("GET", "/v1/agent/services", nil) + obj, err := a.srv.AgentServices(nil, req) + require.NoError(t, err) + val := obj.(map[string]*api.AgentService) + require.Len(t, val, 1) + actual := val["tg-dc1-01"] + require.NotNil(t, actual) + require.Equal(t, api.ServiceKindTerminatingGateway, actual.Kind) + require.Equal(t, srv1.Proxy.ToAPI(), actual.Proxy) +} + func TestAgent_Services_ACLFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -275,7 +309,7 @@ func TestAgent_Service(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` services { name = "web" port = 8181 @@ -467,7 +501,7 @@ updateFunc: func() { time.Sleep(100 * time.Millisecond) // Reload - require.NoError(t, a.ReloadConfig(a.Config)) + require.NoError(t, a.reloadConfigInternal(a.Config)) }, // Should eventually timeout since there is no actual change wantWait: 200 * time.Millisecond, @@ -485,7 +519,7 @@ // Reload newConfig := *a.Config newConfig.Services = append(newConfig.Services, &updatedProxy) - require.NoError(t, a.ReloadConfig(&newConfig)) + require.NoError(t, a.reloadConfigInternal(&newConfig)) }, wantWait: 100 * time.Millisecond, wantCode: 200, @@ -586,7 +620,7 @@ func TestAgent_Checks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -614,7 +648,7 @@ func TestAgent_ChecksWithFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -645,7 +679,7 @@ func TestAgent_HealthServiceByID(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -840,7 +874,7 @@ func TestAgent_HealthServiceByName(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() service := &structs.NodeService{ @@ -1083,7 +1117,7 @@ func TestAgent_HealthServicesACLEnforcement(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfigWithParams(nil)) + a := NewTestAgent(t, TestACLConfigWithParams(nil)) defer a.Shutdown() service := &structs.NodeService{ @@ -1136,7 +1170,7 @@ func TestAgent_Checks_ACLFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1175,45 +1209,71 @@ func TestAgent_Self(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` - node_meta { - somekey = "somevalue" - } - `) - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - req, _ := http.NewRequest("GET", "/v1/agent/self", nil) - obj, err := a.srv.AgentSelf(nil, req) - if err != nil { - t.Fatalf("err: %v", err) + cases := map[string]struct { + hcl string + expectXDS bool + }{ + "normal": { + hcl: ` + node_meta { + somekey = "somevalue" + } + `, + expectXDS: true, + }, + "no grpc": { + hcl: ` + node_meta { + somekey = "somevalue" + } + ports = { + grpc = -1 + } + `, + expectXDS: false, + }, } - val := obj.(Self) - if int(val.Member.Port) != a.Config.SerfPortLAN { - t.Fatalf("incorrect port: %v", obj) - } + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + a := NewTestAgent(t, tc.hcl) + defer a.Shutdown() - if val.DebugConfig["SerfPortLAN"].(int) != a.Config.SerfPortLAN { - t.Fatalf("incorrect port: %v", obj) - } + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + req, _ := http.NewRequest("GET", "/v1/agent/self", nil) + obj, err := a.srv.AgentSelf(nil, req) + require.NoError(t, err) - cs, err := a.GetLANCoordinate() - if err != nil { - t.Fatalf("err: %v", err) - } - if c := cs[a.config.SegmentName]; !reflect.DeepEqual(c, val.Coord) { - t.Fatalf("coordinates are not equal: %v != %v", c, val.Coord) - } - delete(val.Meta, structs.MetaSegmentKey) // Added later, not in config. - if !reflect.DeepEqual(a.config.NodeMeta, val.Meta) { - t.Fatalf("meta fields are not equal: %v != %v", a.config.NodeMeta, val.Meta) + val := obj.(Self) + require.Equal(t, a.Config.SerfPortLAN, int(val.Member.Port)) + require.Equal(t, a.Config.SerfPortLAN, val.DebugConfig["SerfPortLAN"].(int)) + + cs, err := a.GetLANCoordinate() + require.NoError(t, err) + require.Equal(t, cs[a.config.SegmentName], val.Coord) + + delete(val.Meta, structs.MetaSegmentKey) // Added later, not in config. + require.Equal(t, a.config.NodeMeta, val.Meta) + + if tc.expectXDS { + require.NotNil(t, val.XDS, "xds component missing when gRPC is enabled") + require.Equal(t, + map[string][]string{"envoy": proxysupport.EnvoyVersions}, + val.XDS.SupportedProxies, + ) + + } else { + require.Nil(t, val.XDS, "xds component should be missing when gRPC is disabled") + } + }) } } func TestAgent_Self_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1242,7 +1302,7 @@ func TestAgent_Metrics_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1272,8 +1332,7 @@ func TestAgent_Reload(t *testing.T) { t.Parallel() dc1 := "dc1" - a := NewTestAgent(t, t.Name(), ` - acl_enforce_version_8 = false + a := NewTestAgent(t, ` services = [ { name = "redis" @@ -1299,7 +1358,7 @@ t.Fatal("missing redis service") } - cfg2 := TestConfig(testutil.Logger(t), config.Source{ + cfg2 := TestConfig(testutil.Logger(t), config.FileSource{ Name: "reload", Format: "hcl", Data: ` @@ -1307,7 +1366,6 @@ node_id = "` + string(a.Config.NodeID) + `" node_name = "` + a.Config.NodeName + `" - acl_enforce_version_8 = false services = [ { name = "redis-reloaded" @@ -1320,7 +1378,7 @@ `, }) - if err := a.ReloadConfig(cfg2); err != nil { + if err := a.reloadConfigInternal(cfg2); err != nil { t.Fatalf("got error %v want nil", err) } if a.State.Service(structs.NewServiceID("redis-reloaded", nil)) == nil { @@ -1342,9 +1400,154 @@ } } +// TestAgent_ReloadDoesNotTriggerWatch Ensure watches not triggered after reload +// see https://github.com/hashicorp/consul/issues/7446 +func TestAgent_ReloadDoesNotTriggerWatch(t *testing.T) { + dc1 := "dc1" + tmpFileRaw, err := ioutil.TempFile("", "rexec") + require.NoError(t, err) + tmpFile := tmpFileRaw.Name() + defer os.Remove(tmpFile) + handlerShell := fmt.Sprintf("(cat ; echo CONSUL_INDEX $CONSUL_INDEX) | tee '%s.atomic' ; mv '%s.atomic' '%s'", tmpFile, tmpFile, tmpFile) + + a := NewTestAgent(t, ` + services = [ + { + name = "redis" + checks = [ + { + id = "red-is-dead" + ttl = "30s" + notes = "initial check" + } + ] + } + ] + watches = [ + { + datacenter = "`+dc1+`" + type = "service" + service = "redis" + args = ["bash", "-c", "`+handlerShell+`"] + } + ] + `) + checkID := structs.NewCheckID("red-is-dead", nil) + defer a.Shutdown() + + testrpc.WaitForTestAgent(t, a.RPC, dc1) + require.NoError(t, a.updateTTLCheck(checkID, api.HealthPassing, "testing-agent-reload-001")) + + checkStr := func(r *retry.R, evaluator func(string) error) { + t.Helper() + contentsStr := "" + // Wait for watch to be populated + for i := 1; i < 7; i++ { + contents, err := ioutil.ReadFile(tmpFile) + if err != nil { + t.Fatalf("should be able to read file, but had: %#v", err) + } + contentsStr = string(contents) + if contentsStr != "" { + break + } + time.Sleep(time.Duration(i) * time.Second) + testutil.Logger(t).Info("Watch not yet populated, retrying") + } + if err := evaluator(contentsStr); err != nil { + r.Errorf("ERROR: Test failing: %s", err) + } + } + ensureNothingCritical := func(r *retry.R, mustContain string) { + t.Helper() + eval := func(contentsStr string) error { + if strings.Contains(contentsStr, "critical") { + return fmt.Errorf("MUST NOT contain critical:= %s", contentsStr) + } + if !strings.Contains(contentsStr, mustContain) { + return fmt.Errorf("MUST contain '%s' := %s", mustContain, contentsStr) + } + return nil + } + checkStr(r, eval) + } + + retriesWithDelay := func() *retry.Counter { + return &retry.Counter{Count: 10, Wait: 1 * time.Second} + } + + retry.RunWith(retriesWithDelay(), t, func(r *retry.R) { + testutil.Logger(t).Info("Consul is now ready") + // it should contain the output + checkStr(r, func(contentStr string) error { + if contentStr == "[]" { + return fmt.Errorf("Consul is still starting up") + } + return nil + }) + }) + + retry.RunWith(retriesWithDelay(), t, func(r *retry.R) { + ensureNothingCritical(r, "testing-agent-reload-001") + }) + + // Let's take almost the same config + cfg2 := TestConfig(testutil.Logger(t), config.FileSource{ + Name: "reload", + Format: "hcl", + Data: ` + data_dir = "` + a.Config.DataDir + `" + node_id = "` + string(a.Config.NodeID) + `" + node_name = "` + a.Config.NodeName + `" + + services = [ + { + name = "redis" + checks = [ + { + id = "red-is-dead" + ttl = "30s" + notes = "initial check" + } + ] + } + ] + watches = [ + { + datacenter = "` + dc1 + `" + type = "service" + service = "redis" + args = ["bash", "-c", "` + handlerShell + `"] + } + ] + `, + }) + + justOnce := func() *retry.Counter { + return &retry.Counter{Count: 1, Wait: 25 * time.Millisecond} + } + + retry.RunWith(justOnce(), t, func(r *retry.R) { + // We check that reload does not go to critical + ensureNothingCritical(r, "red-is-dead") + + if err := a.reloadConfigInternal(cfg2); err != nil { + t.Fatalf("got error %v want nil", err) + } + + // We check that reload does not go to critical + ensureNothingCritical(r, "red-is-dead") + ensureNothingCritical(r, "testing-agent-reload-001") + + require.NoError(t, a.updateTTLCheck(checkID, api.HealthPassing, "testing-agent-reload-002")) + + ensureNothingCritical(r, "red-is-dead") + }) +} + func TestAgent_Reload_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1371,7 +1574,7 @@ func TestAgent_Members(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1392,7 +1595,7 @@ func TestAgent_Members_WAN(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1413,7 +1616,7 @@ func TestAgent_Members_ACLFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1444,9 +1647,9 @@ func TestAgent_Join(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "") + a2 := NewTestAgent(t, "") defer a2.Shutdown() testrpc.WaitForLeader(t, a1.RPC, "dc1") testrpc.WaitForLeader(t, a2.RPC, "dc1") @@ -1474,9 +1677,9 @@ func TestAgent_Join_WAN(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "") + a2 := NewTestAgent(t, "") defer a2.Shutdown() testrpc.WaitForLeader(t, a1.RPC, "dc1") testrpc.WaitForLeader(t, a2.RPC, "dc1") @@ -1504,9 +1707,9 @@ func TestAgent_Join_ACLDeny(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), TestACLConfig()) + a1 := NewTestAgent(t, TestACLConfig()) defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "") + a2 := NewTestAgent(t, "") defer a2.Shutdown() testrpc.WaitForLeader(t, a1.RPC, "dc1") testrpc.WaitForLeader(t, a2.RPC, "dc1") @@ -1546,11 +1749,11 @@ func TestAgent_JoinLANNotify(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() testrpc.WaitForLeader(t, a1.RPC, "dc1") - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` server = false bootstrap = false `) @@ -1572,11 +1775,11 @@ func TestAgent_Leave(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() testrpc.WaitForLeader(t, a1.RPC, "dc1") - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` server = false bootstrap = false `) @@ -1608,7 +1811,7 @@ func TestAgent_Leave_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1639,9 +1842,9 @@ func TestAgent_ForceLeave(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "") + a2 := NewTestAgent(t, "") testrpc.WaitForLeader(t, a1.RPC, "dc1") testrpc.WaitForLeader(t, a2.RPC, "dc1") @@ -1697,7 +1900,7 @@ func TestAgent_ForceLeave_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1741,9 +1944,9 @@ func TestAgent_ForceLeavePrune(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name()+"-a1", "") + a1 := StartTestAgent(t, TestAgent{Name: "Agent1"}) defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name()+"-a2", "") + a2 := StartTestAgent(t, TestAgent{Name: "Agent2"}) testrpc.WaitForLeader(t, a1.RPC, "dc1") testrpc.WaitForLeader(t, a2.RPC, "dc1") @@ -1789,7 +1992,7 @@ func TestAgent_RegisterCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1832,7 +2035,7 @@ // support as a result of https://github.com/hashicorp/consul/issues/3587. func TestAgent_RegisterCheck_Scripts(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_script_checks = true `) defer a.Shutdown() @@ -1917,7 +2120,7 @@ func TestAgent_RegisterCheckScriptsExecDisable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1941,7 +2144,7 @@ func TestAgent_RegisterCheckScriptsExecRemoteDisable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_local_script_checks = true `) defer a.Shutdown() @@ -1967,7 +2170,7 @@ func TestAgent_RegisterCheck_Passing(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2003,7 +2206,7 @@ func TestAgent_RegisterCheck_BadStatus(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2024,7 +2227,7 @@ func TestAgent_RegisterCheck_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfigNew()) + a := NewTestAgent(t, TestACLConfigNew()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2161,7 +2364,7 @@ func TestAgent_DeregisterCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2185,7 +2388,7 @@ func TestAgent_DeregisterCheckACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) @@ -2211,7 +2414,7 @@ func TestAgent_PassCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2239,7 +2442,7 @@ func TestAgent_PassCheck_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2266,7 +2469,7 @@ func TestAgent_WarnCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2294,7 +2497,7 @@ func TestAgent_WarnCheck_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2321,7 +2524,7 @@ func TestAgent_FailCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2349,7 +2552,7 @@ func TestAgent_FailCheck_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2377,7 +2580,7 @@ func TestAgent_UpdateCheck(t *testing.T) { t.Parallel() maxChecksSize := 256 - a := NewTestAgent(t, t.Name(), fmt.Sprintf("check_output_max_size=%d", maxChecksSize)) + a := NewTestAgent(t, fmt.Sprintf("check_output_max_size=%d", maxChecksSize)) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2461,7 +2664,7 @@ func TestAgent_UpdateCheck_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2502,7 +2705,7 @@ func testAgent_RegisterService(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2588,7 +2791,7 @@ func testAgent_RegisterService_ReRegister(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2663,7 +2866,7 @@ func testAgent_RegisterService_ReRegister_ReplaceExistingChecks(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2748,7 +2951,7 @@ } for _, tt := range tests { t.Run(tt.ip, func(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` connect {} `+extraHCL) defer a.Shutdown() @@ -2955,7 +3158,7 @@ func testAgent_RegisterService_ACLDeny(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), TestACLConfig()+" "+extraHCL) + a := NewTestAgent(t, TestACLConfig()+" "+extraHCL) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3005,7 +3208,7 @@ func testAgent_RegisterService_InvalidAddress(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3049,7 +3252,7 @@ func testAgent_RegisterService_UnmanagedConnectProxy(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3567,7 +3770,7 @@ hcl = hcl + TestACLConfig() } - a := NewTestAgent(t, t.Name(), hcl+" "+extraHCL) + a := NewTestAgent(t, hcl+" "+extraHCL) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3651,7 +3854,7 @@ require.Nil(obj) svcs := a.State.Services(nil) - svc, ok = svcs[structs.NewServiceID(tt.wantNS.ID, nil)] + _, ok = svcs[structs.NewServiceID(tt.wantNS.ID, nil)] if tt.wantSidecarIDLeftAfterDereg { require.True(ok, "removed non-sidecar service at "+tt.wantNS.ID) } else { @@ -3680,7 +3883,7 @@ t.Helper() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3723,7 +3926,7 @@ t.Helper() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3767,7 +3970,7 @@ func testAgent_RegisterService_ScriptCheck_ExecDisable(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3813,7 +4016,7 @@ func testAgent_RegisterService_ScriptCheck_ExecRemoteDisable(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_local_script_checks = true `+extraHCL) defer a.Shutdown() @@ -3849,7 +4052,7 @@ func TestAgent_DeregisterService(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3877,7 +4080,7 @@ func TestAgent_DeregisterService_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3906,7 +4109,7 @@ func TestAgent_ServiceMaintenance_BadRequest(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3946,7 +4149,7 @@ func TestAgent_ServiceMaintenance_Enable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3989,7 +4192,7 @@ func TestAgent_ServiceMaintenance_Disable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4026,7 +4229,7 @@ func TestAgent_ServiceMaintenance_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -4056,7 +4259,7 @@ func TestAgent_NodeMaintenance_BadRequest(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4073,7 +4276,7 @@ func TestAgent_NodeMaintenance_Enable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4106,7 +4309,7 @@ func TestAgent_NodeMaintenance_Disable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4131,7 +4334,7 @@ func TestAgent_NodeMaintenance_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -4152,7 +4355,7 @@ func TestAgent_RegisterCheck_Service(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4203,7 +4406,7 @@ func TestAgent_Monitor(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4327,12 +4530,15 @@ req = req.WithContext(cancelCtx) resp := httptest.NewRecorder() - errCh := make(chan error) + chErr := make(chan error) + chStarted := make(chan struct{}) go func() { + close(chStarted) _, err := a.srv.AgentMonitor(resp, req) - errCh <- err + chErr <- err }() + <-chStarted require.NoError(t, a.Shutdown()) // Wait until we have received some type of logging output @@ -4341,7 +4547,7 @@ }, 3*time.Second, 100*time.Millisecond) cancelFunc() - err := <-errCh + err := <-chErr require.NoError(t, err) got := resp.Body.String() @@ -4354,7 +4560,7 @@ func TestAgent_Monitor_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -4444,7 +4650,7 @@ t.Run(tt.path, func(t *testing.T) { url := fmt.Sprintf("/v1/agent/token/%s?token=root", tt.path) - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` acl { tokens { default = "" @@ -4483,7 +4689,7 @@ // The behavior of this handler when ACLs are disabled is vetted over // in TestACL_Disabled_Response since there's already good infra set // up over there to test this, and it calls the common function. - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` acl { tokens { default = "" @@ -4739,7 +4945,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "connect { enabled = false }") + a := NewTestAgent(t, "connect { enabled = false }") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4755,7 +4961,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4832,7 +5038,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") testrpc.WaitForActiveCARoot(t, a.RPC, "dc1", nil) @@ -4868,7 +5074,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") testrpc.WaitForActiveCARoot(t, a.RPC, "dc1", nil) @@ -4925,7 +5131,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") testrpc.WaitForActiveCARoot(t, a.RPC, "dc1", nil) @@ -4980,7 +5186,11 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := StartTestAgent(t, TestAgent{Overrides: ` + connect { + test_ca_leaf_root_change_spread = "1ns" + } + `}) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") testrpc.WaitForActiveCARoot(t, a.RPC, "dc1", nil) @@ -5028,6 +5238,8 @@ assert.Equal(fmt.Sprintf("%d", issued.ModifyIndex), resp.Header().Get("X-Consul-Index")) + index := resp.Header().Get("X-Consul-Index") + // Test caching { // Fetch it again @@ -5040,39 +5252,25 @@ require.Equal("HIT", resp.Header().Get("X-Cache")) } - // Test that caching is updated in the background + // Issue a blocking query to ensure that the cert gets updated appropriately { // Set a new CA ca := connect.TestCAConfigSet(t, a, nil) - retry.Run(t, func(r *retry.R) { - resp := httptest.NewRecorder() - // Try and sign again (note no index/wait arg since cache should update in - // background even if we aren't actively blocking) - obj, err := a.srv.AgentConnectCALeafCert(resp, req) - r.Check(err) - - issued2 := obj.(*structs.IssuedCert) - if issued.CertPEM == issued2.CertPEM { - r.Fatalf("leaf has not updated") - } - - // Got a new leaf. Sanity check it's a whole new key as well as different - // cert. - if issued.PrivateKeyPEM == issued2.PrivateKeyPEM { - r.Fatalf("new leaf has same private key as before") - } + resp := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/v1/agent/connect/ca/leaf/test?index="+index, nil) + obj, err := a.srv.AgentConnectCALeafCert(resp, req) + require.NoError(err) + issued2 := obj.(*structs.IssuedCert) + require.NotEqual(issued.CertPEM, issued2.CertPEM) + require.NotEqual(issued.PrivateKeyPEM, issued2.PrivateKeyPEM) - // Verify that the cert is signed by the new CA - requireLeafValidUnderCA(t, issued2, ca) + // Verify that the cert is signed by the new CA + requireLeafValidUnderCA(t, issued2, ca) - // Should be a cache hit! The data should've updated in the cache - // in the background so this should've been fetched directly from - // the cache. - if resp.Header().Get("X-Cache") != "HIT" { - r.Fatalf("should be a cache hit") - } - }) + // Should not be a cache hit! The data was updated in response to the blocking + // query being made. + require.Equal("MISS", resp.Header().Get("X-Cache")) } } @@ -5083,7 +5281,11 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := StartTestAgent(t, TestAgent{Overrides: ` + connect { + test_ca_leaf_root_change_spread = "1ns" + } + `}) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") testrpc.WaitForActiveCARoot(t, a.RPC, "dc1", nil) @@ -5204,17 +5406,25 @@ assert := assert.New(t) require := require.New(t) - a1 := NewTestAgent(t, t.Name()+"-dc1", ` + a1 := StartTestAgent(t, TestAgent{Name: "dc1", HCL: ` datacenter = "dc1" primary_datacenter = "dc1" - `) + `, Overrides: ` + connect { + test_ca_leaf_root_change_spread = "1ns" + } + `}) defer a1.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "dc1") - a2 := NewTestAgent(t, t.Name()+"-dc2", ` + a2 := StartTestAgent(t, TestAgent{Name: "dc2", HCL: ` datacenter = "dc2" primary_datacenter = "dc1" - `) + `, Overrides: ` + connect { + test_ca_leaf_root_change_spread = "1ns" + } + `}) defer a2.Shutdown() testrpc.WaitForTestAgent(t, a2.RPC, "dc2") @@ -5421,7 +5631,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5441,7 +5651,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5462,7 +5672,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5486,7 +5696,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5509,7 +5719,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5606,7 +5816,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5656,7 +5866,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5701,7 +5911,7 @@ assert := assert.New(t) require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -5781,7 +5991,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5819,7 +6029,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5844,13 +6054,12 @@ assert := assert.New(t) dc1 := "dc1" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_datacenter = "`+dc1+`" acl_default_policy = "allow" acl_master_token = "root" acl_agent_token = "root" acl_agent_master_token = "towel" - acl_enforce_version_8 = true `) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, dc1) @@ -5876,13 +6085,12 @@ assert := assert.New(t) dc1 := "dc1" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_datacenter = "`+dc1+`" acl_default_policy = "allow" acl_master_token = "master" acl_agent_token = "agent" acl_agent_master_token = "towel" - acl_enforce_version_8 = true `) defer a.Shutdown() @@ -5904,13 +6112,12 @@ assert := assert.New(t) dc1 := "dc1" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_datacenter = "`+dc1+`" acl_default_policy = "deny" acl_master_token = "root" acl_agent_token = "agent" acl_agent_master_token = "towel" - acl_enforce_version_8 = true `) defer a.Shutdown() @@ -5927,7 +6134,7 @@ func TestAgent_Services_ExposeConfig(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/agent.go consul-1.8.7+dfsg1/agent/agent.go --- consul-1.7.4+dfsg1/agent/agent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agent.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,6 @@ import ( "context" - "crypto/sha512" "crypto/tls" "encoding/json" "fmt" @@ -18,6 +17,8 @@ "sync" "time" + "github.com/hashicorp/consul/agent/dns" + "github.com/hashicorp/consul/agent/router" "github.com/hashicorp/go-connlimit" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" @@ -27,12 +28,14 @@ "github.com/armon/go-metrics" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/ae" + autoconf "github.com/hashicorp/consul/agent/auto-config" "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/checks" "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/consul" "github.com/hashicorp/consul/agent/local" + "github.com/hashicorp/consul/agent/pool" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/systemd" @@ -47,11 +50,8 @@ "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/consul/types" "github.com/hashicorp/go-multierror" - "github.com/hashicorp/go-uuid" - "github.com/hashicorp/memberlist" "github.com/hashicorp/raft" "github.com/hashicorp/serf/serf" - "github.com/shirou/gopsutil/host" "golang.org/x/net/http2" ) @@ -127,7 +127,6 @@ // delegate defines the interface shared by both // consul.Client and consul.Server. type delegate interface { - Encrypted() bool GetLANCoordinate() (lib.CoordinateSet, error) Leave() error LANMembers() []serf.Member @@ -137,8 +136,8 @@ JoinLAN(addrs []string) (n int, err error) RemoveFailedNode(node string, prune bool) error ResolveToken(secretID string) (acl.Authorizer, error) + ResolveTokenToIdentity(secretID string) (structs.ACLIdentity, error) ResolveTokenAndDefaultMeta(secretID string, entMeta *structs.EnterpriseMeta, authzContext *acl.AuthorizerContext) (acl.Authorizer, error) - ResolveIdentityFromToken(secretID string) (bool, structs.ACLIdentity, error) RPC(method string, args interface{}, reply interface{}) error ACLsEnabled() bool UseLegacyACLs() bool @@ -161,17 +160,16 @@ // mode, it runs a full Consul server. In client-only mode, it only forwards // requests to other Consul servers. type Agent struct { + autoConf *autoconf.AutoConfig + // config is the agent configuration. config *config.RuntimeConfig // Used for writing our logs logger hclog.InterceptLogger - // Output sink for logs - LogOutput io.Writer - // In-memory sink used for collecting metrics - MemSink *metrics.InmemSink + MemSink MetricsHandler // delegate is either a *consul.Server or *consul.Client // depending on the configuration @@ -242,14 +240,10 @@ eventLock sync.RWMutex eventNotify NotifyGroup - reloadCh chan chan error - shutdown bool shutdownCh chan struct{} shutdownLock sync.Mutex - InterruptStartCh chan struct{} - // joinLANNotifier is called after a successful JoinLAN. joinLANNotifier notifier @@ -291,9 +285,6 @@ // the centrally configured proxy/service defaults. serviceManager *ServiceManager - // xdsServer is the Server instance that serves xDS gRPC API. - xdsServer *xds.Server - // grpcServer is the server instance used currently to serve xDS API for // Envoy. grpcServer *grpc.Server @@ -310,54 +301,94 @@ // httpConnLimiter is used to limit connections to the HTTP server by client // IP. httpConnLimiter connlimit.Limiter -} -// New verifies the configuration given has a Datacenter and DataDir -// configured, and maps the remaining config fields to fields on the Agent. -func New(c *config.RuntimeConfig, logger hclog.InterceptLogger) (*Agent, error) { - if c.Datacenter == "" { - return nil, fmt.Errorf("Must configure a Datacenter") - } - if c.DataDir == "" && !c.DevMode { - return nil, fmt.Errorf("Must configure a DataDir") - } + // Connection Pool + connPool *pool.ConnPool + + // Shared RPC Router + router *router.Router + + // enterpriseAgent embeds fields that we only access in consul-enterprise builds + enterpriseAgent +} +// New process the desired options and creates a new Agent. +// This process will +// * parse the config given the config Flags +// * setup logging +// * using predefined logger given in an option +// OR +// * initialize a new logger from the configuration +// including setting up gRPC logging +// * initialize telemetry +// * create a TLS Configurator +// * build a shared connection pool +// * create the ServiceManager +// * setup the NodeID if one isn't provided in the configuration +// * create the AutoConfig object for future use in fully +// resolving the configuration +func New(bd BaseDeps) (*Agent, error) { a := Agent{ - config: c, - checkReapAfter: make(map[structs.CheckID]time.Duration), - checkMonitors: make(map[structs.CheckID]*checks.CheckMonitor), - checkTTLs: make(map[structs.CheckID]*checks.CheckTTL), - checkHTTPs: make(map[structs.CheckID]*checks.CheckHTTP), - checkTCPs: make(map[structs.CheckID]*checks.CheckTCP), - checkGRPCs: make(map[structs.CheckID]*checks.CheckGRPC), - checkDockers: make(map[structs.CheckID]*checks.CheckDocker), - checkAliases: make(map[structs.CheckID]*checks.CheckAlias), - eventCh: make(chan serf.UserEvent, 1024), - eventBuf: make([]*UserEvent, 256), - joinLANNotifier: &systemd.Notifier{}, - reloadCh: make(chan chan error), - retryJoinCh: make(chan error), - shutdownCh: make(chan struct{}), - InterruptStartCh: make(chan struct{}), - endpoints: make(map[string]string), - tokens: new(token.Store), - logger: logger, + checkReapAfter: make(map[structs.CheckID]time.Duration), + checkMonitors: make(map[structs.CheckID]*checks.CheckMonitor), + checkTTLs: make(map[structs.CheckID]*checks.CheckTTL), + checkHTTPs: make(map[structs.CheckID]*checks.CheckHTTP), + checkTCPs: make(map[structs.CheckID]*checks.CheckTCP), + checkGRPCs: make(map[structs.CheckID]*checks.CheckGRPC), + checkDockers: make(map[structs.CheckID]*checks.CheckDocker), + checkAliases: make(map[structs.CheckID]*checks.CheckAlias), + eventCh: make(chan serf.UserEvent, 1024), + eventBuf: make([]*UserEvent, 256), + joinLANNotifier: &systemd.Notifier{}, + retryJoinCh: make(chan error), + shutdownCh: make(chan struct{}), + endpoints: make(map[string]string), + + // TODO: store the BaseDeps instead of copying them over to Agent + tokens: bd.Tokens, + logger: bd.Logger, + tlsConfigurator: bd.TLSConfigurator, + config: bd.RuntimeConfig, + cache: bd.Cache, + MemSink: bd.MetricsHandler, + connPool: bd.ConnPool, + autoConf: bd.AutoConfig, + router: bd.Router, } + a.serviceManager = NewServiceManager(&a) - if err := a.initializeACLs(); err != nil { + // TODO: do this somewhere else, maybe move to newBaseDeps + var err error + a.aclMasterAuthorizer, err = initializeACLs(bd.RuntimeConfig.NodeName) + if err != nil { return nil, err } - // Retrieve or generate the node ID before setting up the rest of the - // agent, which depends on it. - if err := a.setupNodeID(c); err != nil { - return nil, fmt.Errorf("Failed to setup node ID: %v", err) - } + // We used to do this in the Start method. However it doesn't need to go + // there any longer. Originally it did because we passed the agent + // delegate to some of the cache registrations. Now we just + // pass the agent itself so its safe to move here. + a.registerCache() + + // TODO: move to newBaseDeps + // TODO: handle error + a.loadTokens(a.config) + a.loadEnterpriseTokens(a.config) return &a, nil } +// GetConfig retrieves the agents config +// TODO make export the config field and get rid of this method +// This is here for now to simplify the work I am doing and make +// reviewing the final PR easier. +func (a *Agent) GetConfig() *config.RuntimeConfig { + a.stateLock.Lock() + defer a.stateLock.Unlock() + return a.config +} + // LocalConfig takes a config.RuntimeConfig and maps the fields to a local.Config func LocalConfig(cfg *config.RuntimeConfig) local.Config { lc := local.Config{ @@ -376,31 +407,27 @@ } // Start verifies its configuration and runs an agent's various subprocesses. -func (a *Agent) Start() error { +func (a *Agent) Start(ctx context.Context) error { a.stateLock.Lock() defer a.stateLock.Unlock() - c := a.config - - // Warn if the node name is incompatible with DNS - if InvalidDnsRe.MatchString(a.config.NodeName) { - a.logger.Warn("Node name will not be discoverable "+ - "via DNS due to invalid characters. Valid characters include "+ - "all alpha-numerics and dashes.", - "node_name", a.config.NodeName, - ) - } else if len(a.config.NodeName) > MaxDNSLabelLength { - a.logger.Warn("Node name will not be discoverable "+ - "via DNS due to it being too long. Valid lengths are between "+ - "1 and 63 bytes.", - "node_name", a.config.NodeName, - ) + // This needs to be done early on as it will potentially alter the configuration + // and then how other bits are brought up + c, err := a.autoConf.InitialConfiguration(ctx) + if err != nil { + return err } - // load the tokens - this requires the logger to be setup - // which is why we can't do this in New - a.loadTokens(a.config) - a.loadEnterpriseTokens(a.config) + // copy over the existing node id, this cannot be + // changed while running anyways but this prevents + // breaking some existing behavior. then overwrite + // the configuration + c.NodeID = a.config.NodeID + a.config = c + + if err := a.tlsConfigurator.Update(a.config.ToTLSUtilConfig()); err != nil { + return fmt.Errorf("Failed to load TLS configurations after applying auto-config settings: %w", err) + } // create the local state a.State = local.NewState(LocalConfig(c), a.logger, a.tokens) @@ -409,37 +436,47 @@ // regular and on-demand state synchronizations (anti-entropy). a.sync = ae.NewStateSyncer(a.State, c.AEInterval, a.shutdownCh, a.logger) - // create the cache - a.cache = cache.New(nil) - // create the config for the rpc server/client - consulCfg, err := a.consulConfig() + consulCfg, err := newConsulConfig(a.config, a.logger) if err != nil { return err } + // Setup the user event callback + consulCfg.UserEventHandler = func(e serf.UserEvent) { + select { + case a.eventCh <- e: + case <-a.shutdownCh: + } + } + // ServerUp is used to inform that a new consul server is now // up. This can be used to speed up the sync process if we are blocking // waiting to discover a consul server consulCfg.ServerUp = a.sync.SyncFull.Trigger - a.initEnterprise(consulCfg) - - tlsConfigurator, err := tlsutil.NewConfigurator(c.ToTLSUtilConfig(), a.logger) + err = a.initEnterprise(consulCfg) if err != nil { - return err + return fmt.Errorf("failed to start Consul enterprise component: %v", err) + } + + options := []consul.ConsulOption{ + consul.WithLogger(a.logger), + consul.WithTokenStore(a.tokens), + consul.WithTLSConfigurator(a.tlsConfigurator), + consul.WithConnectionPool(a.connPool), + consul.WithRouter(a.router), } - a.tlsConfigurator = tlsConfigurator // Setup either the client or the server. if c.ServerMode { - server, err := consul.NewServerLogger(consulCfg, a.logger, a.tokens, a.tlsConfigurator) + server, err := consul.NewServer(consulCfg, options...) if err != nil { return fmt.Errorf("Failed to start Consul server: %v", err) } a.delegate = server } else { - client, err := consul.NewClientLogger(consulCfg, a.logger, a.tlsConfigurator) + client, err := consul.NewClient(consulCfg, options...) if err != nil { return fmt.Errorf("Failed to start Consul client: %v", err) } @@ -456,25 +493,9 @@ a.State.Delegate = a.delegate a.State.TriggerSyncChanges = a.sync.SyncChanges.Trigger - // Register the cache. We do this much later so the delegate is - // populated from above. - a.registerCache() - - if a.config.AutoEncryptTLS && !a.config.ServerMode { - reply, err := a.setupClientAutoEncrypt() - if err != nil { - return fmt.Errorf("AutoEncrypt failed: %s", err) - } - rootsReq, leafReq, err := a.setupClientAutoEncryptCache(reply) - if err != nil { - return fmt.Errorf("AutoEncrypt failed: %s", err) - } - if err = a.setupClientAutoEncryptWatching(rootsReq, leafReq); err != nil { - return fmt.Errorf("AutoEncrypt failed: %s", err) - } - a.logger.Info("automatically upgraded to TLS") + if err := a.autoConf.Start(&lib.StopChannelContext{StopCh: a.shutdownCh}); err != nil { + return fmt.Errorf("AutoConf failed to start certificate monitor: %w", err) } - a.serviceManager.Start() // Load checks/services/metadata. @@ -498,6 +519,11 @@ Datacenter: a.config.Datacenter, Segment: a.config.SegmentName, }, + DNSConfig: proxycfg.DNSConfig{ + Domain: a.config.DNSDomain, + AltDomain: a.config.DNSAltDomain, + }, + TLSConfigurator: a.tlsConfigurator, }) if err != nil { return err @@ -562,169 +588,10 @@ // start retry join go a.retryJoinLAN() - go a.retryJoinWAN() - - return nil -} - -func (a *Agent) setupClientAutoEncrypt() (*structs.SignedResponse, error) { - client := a.delegate.(*consul.Client) - - addrs := a.config.StartJoinAddrsLAN - disco, err := newDiscover() - if err != nil && len(addrs) == 0 { - return nil, err - } - addrs = append(addrs, retryJoinAddrs(disco, "LAN", a.config.RetryJoinLAN, a.logger)...) - - reply, priv, err := client.RequestAutoEncryptCerts(addrs, a.config.ServerPort, a.tokens.AgentToken(), a.InterruptStartCh) - if err != nil { - return nil, err - } - - connectCAPems := []string{} - for _, ca := range reply.ConnectCARoots.Roots { - connectCAPems = append(connectCAPems, ca.RootCert) - } - if err := a.tlsConfigurator.UpdateAutoEncrypt(reply.ManualCARoots, connectCAPems, reply.IssuedCert.CertPEM, priv, reply.VerifyServerHostname); err != nil { - return nil, err - } - return reply, nil - -} - -func (a *Agent) setupClientAutoEncryptCache(reply *structs.SignedResponse) (*structs.DCSpecificRequest, *cachetype.ConnectCALeafRequest, error) { - rootsReq := &structs.DCSpecificRequest{ - Datacenter: a.config.Datacenter, - QueryOptions: structs.QueryOptions{Token: a.tokens.AgentToken()}, - } - - // prepolutate roots cache - rootRes := cache.FetchResult{Value: &reply.ConnectCARoots, Index: reply.ConnectCARoots.QueryMeta.Index} - if err := a.cache.Prepopulate(cachetype.ConnectCARootName, rootRes, a.config.Datacenter, a.tokens.AgentToken(), rootsReq.CacheInfo().Key); err != nil { - return nil, nil, err + if a.config.ServerMode { + go a.retryJoinWAN() } - leafReq := &cachetype.ConnectCALeafRequest{ - Datacenter: a.config.Datacenter, - Token: a.tokens.AgentToken(), - Agent: a.config.NodeName, - DNSSAN: a.config.AutoEncryptDNSSAN, - IPSAN: a.config.AutoEncryptIPSAN, - } - - // prepolutate leaf cache - certRes := cache.FetchResult{Value: &reply.IssuedCert, Index: reply.ConnectCARoots.QueryMeta.Index} - if err := a.cache.Prepopulate(cachetype.ConnectCALeafName, certRes, a.config.Datacenter, a.tokens.AgentToken(), leafReq.Key()); err != nil { - return nil, nil, err - } - return rootsReq, leafReq, nil -} - -func (a *Agent) setupClientAutoEncryptWatching(rootsReq *structs.DCSpecificRequest, leafReq *cachetype.ConnectCALeafRequest) error { - // setup watches - ch := make(chan cache.UpdateEvent, 10) - ctx, cancel := context.WithCancel(context.Background()) - - // Watch for root changes - err := a.cache.Notify(ctx, cachetype.ConnectCARootName, rootsReq, rootsWatchID, ch) - if err != nil { - cancel() - return err - } - - // Watch the leaf cert - err = a.cache.Notify(ctx, cachetype.ConnectCALeafName, leafReq, leafWatchID, ch) - if err != nil { - cancel() - return err - } - - // Setup actions in case the watches are firing. - go func() { - for { - select { - case <-a.shutdownCh: - cancel() - return - case <-ctx.Done(): - return - case u := <-ch: - switch u.CorrelationID { - case rootsWatchID: - roots, ok := u.Result.(*structs.IndexedCARoots) - if !ok { - err := fmt.Errorf("invalid type for roots response: %T", u.Result) - a.logger.Error("watch error for correlation id", - "correlation_id", u.CorrelationID, - "error", err, - ) - continue - } - pems := []string{} - for _, root := range roots.Roots { - pems = append(pems, root.RootCert) - } - a.tlsConfigurator.UpdateAutoEncryptCA(pems) - case leafWatchID: - leaf, ok := u.Result.(*structs.IssuedCert) - if !ok { - err := fmt.Errorf("invalid type for leaf response: %T", u.Result) - a.logger.Error("watch error for correlation id", - "correlation_id", u.CorrelationID, - "error", err, - ) - continue - } - a.tlsConfigurator.UpdateAutoEncryptCert(leaf.CertPEM, leaf.PrivateKeyPEM) - } - } - } - }() - - // Setup safety net in case the auto_encrypt cert doesn't get renewed - // in time. The agent would be stuck in that case because the watches - // never use the AutoEncrypt.Sign endpoint. - go func() { - for { - - // Check 10sec after cert expires. The agent cache - // should be handling the expiration and renew before - // it. - // If there is no cert, AutoEncryptCertNotAfter returns - // a value in the past which immediately triggers the - // renew, but this case shouldn't happen because at - // this point, auto_encrypt was just being setup - // successfully. - autoLogger := a.logger.Named(logging.AutoEncrypt) - interval := a.tlsConfigurator.AutoEncryptCertNotAfter().Sub(time.Now().Add(10 * time.Second)) - a.logger.Debug("setting up client certificate expiration check on interval", "interval", interval) - select { - case <-a.shutdownCh: - return - case <-time.After(interval): - // check auto encrypt client cert expiration - if a.tlsConfigurator.AutoEncryptCertExpired() { - autoLogger.Debug("client certificate expired.") - reply, err := a.setupClientAutoEncrypt() - if err != nil { - autoLogger.Error("client certificate expired, failed to renew", "error", err) - // in case of an error, try again in one minute - interval = time.Minute - continue - } - _, _, err = a.setupClientAutoEncryptCache(reply) - if err != nil { - autoLogger.Error("client certificate expired, failed to populate cache", "error", err) - // in case of an error, try again in one minute - interval = time.Minute - continue - } - } - } - } - }() - return nil } @@ -733,7 +600,7 @@ return nil } - a.xdsServer = &xds.Server{ + xdsServer := &xds.Server{ Logger: a.logger, CfgMgr: a.proxyConfig, Authz: a, @@ -741,15 +608,15 @@ CheckFetcher: a, CfgFetcher: a, } - a.xdsServer.Initialize() + xdsServer.Initialize() var err error if a.config.HTTPSPort > 0 { // gRPC uses the same TLS settings as the HTTPS API. If HTTPS is // enabled then gRPC will require HTTPS as well. - a.grpcServer, err = a.xdsServer.GRPCServer(a.tlsConfigurator) + a.grpcServer, err = xdsServer.GRPCServer(a.tlsConfigurator) } else { - a.grpcServer, err = a.xdsServer.GRPCServer(nil) + a.grpcServer, err = xdsServer.GRPCServer(nil) } if err != nil { return err @@ -812,7 +679,7 @@ merr = multierror.Append(merr, err) case <-timeout: merr = multierror.Append(merr, fmt.Errorf("agent: timeout starting DNS servers")) - break + return merr.ErrorOrNil() } } return merr.ErrorOrNil() @@ -883,10 +750,10 @@ Addr: l.Addr().String(), TLSConfig: tlscfg, }, - ln: l, - agent: a, - blacklist: NewBlacklist(a.config.HTTPBlockEndpoints), - proto: proto, + ln: l, + agent: a, + denylist: NewDenylist(a.config.HTTPBlockEndpoints), + proto: proto, } srv.Server.Handler = srv.handler(a.config.EnableDebug) @@ -1015,13 +882,18 @@ } } +// stopAllWatches stops all the currently running watches +func (a *Agent) stopAllWatches() { + for _, wp := range a.watchPlans { + wp.Stop() + } +} + // reloadWatches stops any existing watch plans and attempts to load the given // set of watches. func (a *Agent) reloadWatches(cfg *config.RuntimeConfig) error { // Stop the current watches. - for _, wp := range a.watchPlans { - wp.Stop() - } + a.stopAllWatches() a.watchPlans = nil // Return if there are no watches now. @@ -1053,44 +925,10 @@ } } - // Parse the watches, excluding 'handler' and 'args' - wp, err := watch.ParseExempt(params, []string{"handler", "args"}) + wp, err := makeWatchPlan(a.logger, params) if err != nil { - return fmt.Errorf("Failed to parse watch (%#v): %v", params, err) - } - - // Get the handler and subprocess arguments - handler, hasHandler := wp.Exempt["handler"] - args, hasArgs := wp.Exempt["args"] - if hasHandler { - a.logger.Warn("The 'handler' field in watches has been deprecated " + - "and replaced with the 'args' field. See https://www.consul.io/docs/agent/watches.html") - } - if _, ok := handler.(string); hasHandler && !ok { - return fmt.Errorf("Watch handler must be a string") - } - if raw, ok := args.([]interface{}); hasArgs && ok { - var parsed []string - for _, arg := range raw { - v, ok := arg.(string) - if !ok { - return fmt.Errorf("Watch args must be a list of strings") - } - - parsed = append(parsed, v) - } - wp.Exempt["args"] = parsed - } else if hasArgs && !ok { - return fmt.Errorf("Watch args must be a list of strings") - } - if hasHandler && hasArgs || hasHandler && wp.HandlerType == "http" || hasArgs && wp.HandlerType == "http" { - return fmt.Errorf("Only one watch handler allowed") - } - if !hasHandler && !hasArgs && wp.HandlerType != "http" { - return fmt.Errorf("Must define a watch handler") + return err } - - // Store the watch plan watchPlans = append(watchPlans, wp) } @@ -1112,7 +950,7 @@ httpConfig := wp.Exempt["http_handler_config"].(*watch.HttpHandlerConfig) wp.Handler = makeHTTPWatchHandler(a.logger, httpConfig) } - wp.LogOutput = a.LogOutput + wp.Logger = a.logger.Named("watch") addr := config.Address if config.Scheme == "https" { @@ -1127,282 +965,259 @@ return nil } -// consulConfig is used to return a consul configuration -func (a *Agent) consulConfig() (*consul.Config, error) { - // Start with the provided config or default config - base := consul.DefaultConfig() +// newConsulConfig translates a RuntimeConfig into a consul.Config. +// TODO: move this function to a different file, maybe config.go +func newConsulConfig(runtimeCfg *config.RuntimeConfig, logger hclog.Logger) (*consul.Config, error) { + cfg := consul.DefaultConfig() // This is set when the agent starts up - base.NodeID = a.config.NodeID + cfg.NodeID = runtimeCfg.NodeID // Apply dev mode - base.DevMode = a.config.DevMode + cfg.DevMode = runtimeCfg.DevMode - // Override with our config - // todo(fs): these are now always set in the runtime config so we can simplify this + // Override with our runtimeCfg + // todo(fs): these are now always set in the runtime runtimeCfg so we can simplify this // todo(fs): or is there a reason to keep it like that? - base.Datacenter = a.config.Datacenter - base.PrimaryDatacenter = a.config.PrimaryDatacenter - base.DataDir = a.config.DataDir - base.NodeName = a.config.NodeName - - base.CoordinateUpdateBatchSize = a.config.ConsulCoordinateUpdateBatchSize - base.CoordinateUpdateMaxBatches = a.config.ConsulCoordinateUpdateMaxBatches - base.CoordinateUpdatePeriod = a.config.ConsulCoordinateUpdatePeriod - base.CheckOutputMaxSize = a.config.CheckOutputMaxSize - - base.RaftConfig.HeartbeatTimeout = a.config.ConsulRaftHeartbeatTimeout - base.RaftConfig.LeaderLeaseTimeout = a.config.ConsulRaftLeaderLeaseTimeout - base.RaftConfig.ElectionTimeout = a.config.ConsulRaftElectionTimeout - - base.SerfLANConfig.MemberlistConfig.BindAddr = a.config.SerfBindAddrLAN.IP.String() - base.SerfLANConfig.MemberlistConfig.BindPort = a.config.SerfBindAddrLAN.Port - base.SerfLANConfig.MemberlistConfig.AdvertiseAddr = a.config.SerfAdvertiseAddrLAN.IP.String() - base.SerfLANConfig.MemberlistConfig.AdvertisePort = a.config.SerfAdvertiseAddrLAN.Port - base.SerfLANConfig.MemberlistConfig.GossipVerifyIncoming = a.config.EncryptVerifyIncoming - base.SerfLANConfig.MemberlistConfig.GossipVerifyOutgoing = a.config.EncryptVerifyOutgoing - base.SerfLANConfig.MemberlistConfig.GossipInterval = a.config.GossipLANGossipInterval - base.SerfLANConfig.MemberlistConfig.GossipNodes = a.config.GossipLANGossipNodes - base.SerfLANConfig.MemberlistConfig.ProbeInterval = a.config.GossipLANProbeInterval - base.SerfLANConfig.MemberlistConfig.ProbeTimeout = a.config.GossipLANProbeTimeout - base.SerfLANConfig.MemberlistConfig.SuspicionMult = a.config.GossipLANSuspicionMult - base.SerfLANConfig.MemberlistConfig.RetransmitMult = a.config.GossipLANRetransmitMult - if a.config.ReconnectTimeoutLAN != 0 { - base.SerfLANConfig.ReconnectTimeout = a.config.ReconnectTimeoutLAN - } - - if a.config.SerfBindAddrWAN != nil { - base.SerfWANConfig.MemberlistConfig.BindAddr = a.config.SerfBindAddrWAN.IP.String() - base.SerfWANConfig.MemberlistConfig.BindPort = a.config.SerfBindAddrWAN.Port - base.SerfWANConfig.MemberlistConfig.AdvertiseAddr = a.config.SerfAdvertiseAddrWAN.IP.String() - base.SerfWANConfig.MemberlistConfig.AdvertisePort = a.config.SerfAdvertiseAddrWAN.Port - base.SerfWANConfig.MemberlistConfig.GossipVerifyIncoming = a.config.EncryptVerifyIncoming - base.SerfWANConfig.MemberlistConfig.GossipVerifyOutgoing = a.config.EncryptVerifyOutgoing - base.SerfWANConfig.MemberlistConfig.GossipInterval = a.config.GossipWANGossipInterval - base.SerfWANConfig.MemberlistConfig.GossipNodes = a.config.GossipWANGossipNodes - base.SerfWANConfig.MemberlistConfig.ProbeInterval = a.config.GossipWANProbeInterval - base.SerfWANConfig.MemberlistConfig.ProbeTimeout = a.config.GossipWANProbeTimeout - base.SerfWANConfig.MemberlistConfig.SuspicionMult = a.config.GossipWANSuspicionMult - base.SerfWANConfig.MemberlistConfig.RetransmitMult = a.config.GossipWANRetransmitMult - if a.config.ReconnectTimeoutWAN != 0 { - base.SerfWANConfig.ReconnectTimeout = a.config.ReconnectTimeoutWAN + cfg.Datacenter = runtimeCfg.Datacenter + cfg.PrimaryDatacenter = runtimeCfg.PrimaryDatacenter + cfg.DataDir = runtimeCfg.DataDir + cfg.NodeName = runtimeCfg.NodeName + + cfg.CoordinateUpdateBatchSize = runtimeCfg.ConsulCoordinateUpdateBatchSize + cfg.CoordinateUpdateMaxBatches = runtimeCfg.ConsulCoordinateUpdateMaxBatches + cfg.CoordinateUpdatePeriod = runtimeCfg.ConsulCoordinateUpdatePeriod + cfg.CheckOutputMaxSize = runtimeCfg.CheckOutputMaxSize + + cfg.RaftConfig.HeartbeatTimeout = runtimeCfg.ConsulRaftHeartbeatTimeout + cfg.RaftConfig.LeaderLeaseTimeout = runtimeCfg.ConsulRaftLeaderLeaseTimeout + cfg.RaftConfig.ElectionTimeout = runtimeCfg.ConsulRaftElectionTimeout + + cfg.SerfLANConfig.MemberlistConfig.BindAddr = runtimeCfg.SerfBindAddrLAN.IP.String() + cfg.SerfLANConfig.MemberlistConfig.BindPort = runtimeCfg.SerfBindAddrLAN.Port + cfg.SerfLANConfig.MemberlistConfig.CIDRsAllowed = runtimeCfg.SerfAllowedCIDRsLAN + cfg.SerfWANConfig.MemberlistConfig.CIDRsAllowed = runtimeCfg.SerfAllowedCIDRsWAN + cfg.SerfLANConfig.MemberlistConfig.AdvertiseAddr = runtimeCfg.SerfAdvertiseAddrLAN.IP.String() + cfg.SerfLANConfig.MemberlistConfig.AdvertisePort = runtimeCfg.SerfAdvertiseAddrLAN.Port + cfg.SerfLANConfig.MemberlistConfig.GossipVerifyIncoming = runtimeCfg.EncryptVerifyIncoming + cfg.SerfLANConfig.MemberlistConfig.GossipVerifyOutgoing = runtimeCfg.EncryptVerifyOutgoing + cfg.SerfLANConfig.MemberlistConfig.GossipInterval = runtimeCfg.GossipLANGossipInterval + cfg.SerfLANConfig.MemberlistConfig.GossipNodes = runtimeCfg.GossipLANGossipNodes + cfg.SerfLANConfig.MemberlistConfig.ProbeInterval = runtimeCfg.GossipLANProbeInterval + cfg.SerfLANConfig.MemberlistConfig.ProbeTimeout = runtimeCfg.GossipLANProbeTimeout + cfg.SerfLANConfig.MemberlistConfig.SuspicionMult = runtimeCfg.GossipLANSuspicionMult + cfg.SerfLANConfig.MemberlistConfig.RetransmitMult = runtimeCfg.GossipLANRetransmitMult + if runtimeCfg.ReconnectTimeoutLAN != 0 { + cfg.SerfLANConfig.ReconnectTimeout = runtimeCfg.ReconnectTimeoutLAN + } + + if runtimeCfg.SerfBindAddrWAN != nil { + cfg.SerfWANConfig.MemberlistConfig.BindAddr = runtimeCfg.SerfBindAddrWAN.IP.String() + cfg.SerfWANConfig.MemberlistConfig.BindPort = runtimeCfg.SerfBindAddrWAN.Port + cfg.SerfWANConfig.MemberlistConfig.AdvertiseAddr = runtimeCfg.SerfAdvertiseAddrWAN.IP.String() + cfg.SerfWANConfig.MemberlistConfig.AdvertisePort = runtimeCfg.SerfAdvertiseAddrWAN.Port + cfg.SerfWANConfig.MemberlistConfig.GossipVerifyIncoming = runtimeCfg.EncryptVerifyIncoming + cfg.SerfWANConfig.MemberlistConfig.GossipVerifyOutgoing = runtimeCfg.EncryptVerifyOutgoing + cfg.SerfWANConfig.MemberlistConfig.GossipInterval = runtimeCfg.GossipWANGossipInterval + cfg.SerfWANConfig.MemberlistConfig.GossipNodes = runtimeCfg.GossipWANGossipNodes + cfg.SerfWANConfig.MemberlistConfig.ProbeInterval = runtimeCfg.GossipWANProbeInterval + cfg.SerfWANConfig.MemberlistConfig.ProbeTimeout = runtimeCfg.GossipWANProbeTimeout + cfg.SerfWANConfig.MemberlistConfig.SuspicionMult = runtimeCfg.GossipWANSuspicionMult + cfg.SerfWANConfig.MemberlistConfig.RetransmitMult = runtimeCfg.GossipWANRetransmitMult + if runtimeCfg.ReconnectTimeoutWAN != 0 { + cfg.SerfWANConfig.ReconnectTimeout = runtimeCfg.ReconnectTimeoutWAN } } else { // Disable serf WAN federation - base.SerfWANConfig = nil + cfg.SerfWANConfig = nil } - base.RPCAddr = a.config.RPCBindAddr - base.RPCAdvertise = a.config.RPCAdvertiseAddr + cfg.RPCAddr = runtimeCfg.RPCBindAddr + cfg.RPCAdvertise = runtimeCfg.RPCAdvertiseAddr - base.Segment = a.config.SegmentName - if len(a.config.Segments) > 0 { - segments, err := a.segmentConfig() + cfg.Segment = runtimeCfg.SegmentName + if len(runtimeCfg.Segments) > 0 { + segments, err := segmentConfig(runtimeCfg) if err != nil { return nil, err } - base.Segments = segments + cfg.Segments = segments } - if a.config.Bootstrap { - base.Bootstrap = true + if runtimeCfg.Bootstrap { + cfg.Bootstrap = true } - if a.config.CheckOutputMaxSize > 0 { - base.CheckOutputMaxSize = a.config.CheckOutputMaxSize + if runtimeCfg.CheckOutputMaxSize > 0 { + cfg.CheckOutputMaxSize = runtimeCfg.CheckOutputMaxSize } - if a.config.RejoinAfterLeave { - base.RejoinAfterLeave = true + if runtimeCfg.RejoinAfterLeave { + cfg.RejoinAfterLeave = true } - if a.config.BootstrapExpect != 0 { - base.BootstrapExpect = a.config.BootstrapExpect + if runtimeCfg.BootstrapExpect != 0 { + cfg.BootstrapExpect = runtimeCfg.BootstrapExpect } - if a.config.RPCProtocol > 0 { - base.ProtocolVersion = uint8(a.config.RPCProtocol) + if runtimeCfg.RPCProtocol > 0 { + cfg.ProtocolVersion = uint8(runtimeCfg.RPCProtocol) } - if a.config.RaftProtocol != 0 { - base.RaftConfig.ProtocolVersion = raft.ProtocolVersion(a.config.RaftProtocol) + if runtimeCfg.RaftProtocol != 0 { + cfg.RaftConfig.ProtocolVersion = raft.ProtocolVersion(runtimeCfg.RaftProtocol) } - if a.config.RaftSnapshotThreshold != 0 { - base.RaftConfig.SnapshotThreshold = uint64(a.config.RaftSnapshotThreshold) + if runtimeCfg.RaftSnapshotThreshold != 0 { + cfg.RaftConfig.SnapshotThreshold = uint64(runtimeCfg.RaftSnapshotThreshold) } - if a.config.RaftSnapshotInterval != 0 { - base.RaftConfig.SnapshotInterval = a.config.RaftSnapshotInterval + if runtimeCfg.RaftSnapshotInterval != 0 { + cfg.RaftConfig.SnapshotInterval = runtimeCfg.RaftSnapshotInterval } - if a.config.RaftTrailingLogs != 0 { - base.RaftConfig.TrailingLogs = uint64(a.config.RaftTrailingLogs) + if runtimeCfg.RaftTrailingLogs != 0 { + cfg.RaftConfig.TrailingLogs = uint64(runtimeCfg.RaftTrailingLogs) } - if a.config.ACLMasterToken != "" { - base.ACLMasterToken = a.config.ACLMasterToken + if runtimeCfg.ACLMasterToken != "" { + cfg.ACLMasterToken = runtimeCfg.ACLMasterToken } - if a.config.ACLDatacenter != "" { - base.ACLDatacenter = a.config.ACLDatacenter + if runtimeCfg.ACLDatacenter != "" { + cfg.ACLDatacenter = runtimeCfg.ACLDatacenter } - if a.config.ACLTokenTTL != 0 { - base.ACLTokenTTL = a.config.ACLTokenTTL + if runtimeCfg.ACLTokenTTL != 0 { + cfg.ACLTokenTTL = runtimeCfg.ACLTokenTTL } - if a.config.ACLPolicyTTL != 0 { - base.ACLPolicyTTL = a.config.ACLPolicyTTL + if runtimeCfg.ACLPolicyTTL != 0 { + cfg.ACLPolicyTTL = runtimeCfg.ACLPolicyTTL } - if a.config.ACLRoleTTL != 0 { - base.ACLRoleTTL = a.config.ACLRoleTTL + if runtimeCfg.ACLRoleTTL != 0 { + cfg.ACLRoleTTL = runtimeCfg.ACLRoleTTL } - if a.config.ACLDefaultPolicy != "" { - base.ACLDefaultPolicy = a.config.ACLDefaultPolicy + if runtimeCfg.ACLDefaultPolicy != "" { + cfg.ACLDefaultPolicy = runtimeCfg.ACLDefaultPolicy } - if a.config.ACLDownPolicy != "" { - base.ACLDownPolicy = a.config.ACLDownPolicy + if runtimeCfg.ACLDownPolicy != "" { + cfg.ACLDownPolicy = runtimeCfg.ACLDownPolicy } - base.ACLEnforceVersion8 = a.config.ACLEnforceVersion8 - base.ACLTokenReplication = a.config.ACLTokenReplication - base.ACLsEnabled = a.config.ACLsEnabled - if a.config.ACLEnableKeyListPolicy { - base.ACLEnableKeyListPolicy = a.config.ACLEnableKeyListPolicy + cfg.ACLTokenReplication = runtimeCfg.ACLTokenReplication + cfg.ACLsEnabled = runtimeCfg.ACLsEnabled + if runtimeCfg.ACLEnableKeyListPolicy { + cfg.ACLEnableKeyListPolicy = runtimeCfg.ACLEnableKeyListPolicy } - if a.config.SessionTTLMin != 0 { - base.SessionTTLMin = a.config.SessionTTLMin + if runtimeCfg.SessionTTLMin != 0 { + cfg.SessionTTLMin = runtimeCfg.SessionTTLMin } - if a.config.NonVotingServer { - base.NonVoter = a.config.NonVotingServer + if runtimeCfg.NonVotingServer { + cfg.NonVoter = runtimeCfg.NonVotingServer } // These are fully specified in the agent defaults, so we can simply // copy them over. - base.AutopilotConfig.CleanupDeadServers = a.config.AutopilotCleanupDeadServers - base.AutopilotConfig.LastContactThreshold = a.config.AutopilotLastContactThreshold - base.AutopilotConfig.MaxTrailingLogs = uint64(a.config.AutopilotMaxTrailingLogs) - base.AutopilotConfig.MinQuorum = a.config.AutopilotMinQuorum - base.AutopilotConfig.ServerStabilizationTime = a.config.AutopilotServerStabilizationTime - base.AutopilotConfig.RedundancyZoneTag = a.config.AutopilotRedundancyZoneTag - base.AutopilotConfig.DisableUpgradeMigration = a.config.AutopilotDisableUpgradeMigration - base.AutopilotConfig.UpgradeVersionTag = a.config.AutopilotUpgradeVersionTag + cfg.AutopilotConfig.CleanupDeadServers = runtimeCfg.AutopilotCleanupDeadServers + cfg.AutopilotConfig.LastContactThreshold = runtimeCfg.AutopilotLastContactThreshold + cfg.AutopilotConfig.MaxTrailingLogs = uint64(runtimeCfg.AutopilotMaxTrailingLogs) + cfg.AutopilotConfig.MinQuorum = runtimeCfg.AutopilotMinQuorum + cfg.AutopilotConfig.ServerStabilizationTime = runtimeCfg.AutopilotServerStabilizationTime + cfg.AutopilotConfig.RedundancyZoneTag = runtimeCfg.AutopilotRedundancyZoneTag + cfg.AutopilotConfig.DisableUpgradeMigration = runtimeCfg.AutopilotDisableUpgradeMigration + cfg.AutopilotConfig.UpgradeVersionTag = runtimeCfg.AutopilotUpgradeVersionTag // make sure the advertise address is always set - if base.RPCAdvertise == nil { - base.RPCAdvertise = base.RPCAddr + if cfg.RPCAdvertise == nil { + cfg.RPCAdvertise = cfg.RPCAddr } // Rate limiting for RPC calls. - if a.config.RPCRateLimit > 0 { - base.RPCRate = a.config.RPCRateLimit + if runtimeCfg.RPCRateLimit > 0 { + cfg.RPCRate = runtimeCfg.RPCRateLimit } - if a.config.RPCMaxBurst > 0 { - base.RPCMaxBurst = a.config.RPCMaxBurst + if runtimeCfg.RPCMaxBurst > 0 { + cfg.RPCMaxBurst = runtimeCfg.RPCMaxBurst } // RPC timeouts/limits. - if a.config.RPCHandshakeTimeout > 0 { - base.RPCHandshakeTimeout = a.config.RPCHandshakeTimeout + if runtimeCfg.RPCHandshakeTimeout > 0 { + cfg.RPCHandshakeTimeout = runtimeCfg.RPCHandshakeTimeout } - if a.config.RPCMaxConnsPerClient > 0 { - base.RPCMaxConnsPerClient = a.config.RPCMaxConnsPerClient + if runtimeCfg.RPCMaxConnsPerClient > 0 { + cfg.RPCMaxConnsPerClient = runtimeCfg.RPCMaxConnsPerClient } // RPC-related performance configs. We allow explicit zero value to disable so // copy it whatever the value. - base.RPCHoldTimeout = a.config.RPCHoldTimeout + cfg.RPCHoldTimeout = runtimeCfg.RPCHoldTimeout - if a.config.LeaveDrainTime > 0 { - base.LeaveDrainTime = a.config.LeaveDrainTime + if runtimeCfg.LeaveDrainTime > 0 { + cfg.LeaveDrainTime = runtimeCfg.LeaveDrainTime } // set the src address for outgoing rpc connections // Use port 0 so that outgoing connections use a random port. - if !ipaddr.IsAny(base.RPCAddr.IP) { - base.RPCSrcAddr = &net.TCPAddr{IP: base.RPCAddr.IP} + if !ipaddr.IsAny(cfg.RPCAddr.IP) { + cfg.RPCSrcAddr = &net.TCPAddr{IP: cfg.RPCAddr.IP} } // Format the build string - revision := a.config.Revision + revision := runtimeCfg.Revision if len(revision) > 8 { revision = revision[:8] } - base.Build = fmt.Sprintf("%s%s:%s", a.config.Version, a.config.VersionPrerelease, revision) + cfg.Build = fmt.Sprintf("%s%s:%s", runtimeCfg.Version, runtimeCfg.VersionPrerelease, revision) // Copy the TLS configuration - base.VerifyIncoming = a.config.VerifyIncoming || a.config.VerifyIncomingRPC - if a.config.CAPath != "" || a.config.CAFile != "" { - base.UseTLS = true - } - base.VerifyOutgoing = a.config.VerifyOutgoing - base.VerifyServerHostname = a.config.VerifyServerHostname - base.CAFile = a.config.CAFile - base.CAPath = a.config.CAPath - base.CertFile = a.config.CertFile - base.KeyFile = a.config.KeyFile - base.ServerName = a.config.ServerName - base.Domain = a.config.DNSDomain - base.TLSMinVersion = a.config.TLSMinVersion - base.TLSCipherSuites = a.config.TLSCipherSuites - base.TLSPreferServerCipherSuites = a.config.TLSPreferServerCipherSuites - base.DefaultQueryTime = a.config.DefaultQueryTime - base.MaxQueryTime = a.config.MaxQueryTime - - base.AutoEncryptAllowTLS = a.config.AutoEncryptAllowTLS - - // Copy the Connect CA bootstrap config - if a.config.ConnectEnabled { - base.ConnectEnabled = true - - // Allow config to specify cluster_id provided it's a valid UUID. This is - // meant only for tests where a deterministic ID makes fixtures much simpler - // to work with but since it's only read on initial cluster bootstrap it's not - // that much of a liability in production. The worst a user could do is - // configure logically separate clusters with same ID by mistake but we can - // avoid documenting this is even an option. - if clusterID, ok := a.config.ConnectCAConfig["cluster_id"]; ok { - if cIDStr, ok := clusterID.(string); ok { - if _, err := uuid.ParseUUID(cIDStr); err == nil { - // Valid UUID configured, use that - base.CAConfig.ClusterID = cIDStr - } - } - if base.CAConfig.ClusterID == "" { - // If the tried to specify an ID but typoed it don't ignore as they will - // then bootstrap with a new ID and have to throw away the whole cluster - // and start again. - a.logger.Error("connect CA config cluster_id specified but " + - "is not a valid UUID, aborting startup") - return nil, fmt.Errorf("cluster_id was supplied but was not a valid UUID") - } - } + cfg.VerifyIncoming = runtimeCfg.VerifyIncoming || runtimeCfg.VerifyIncomingRPC + if runtimeCfg.CAPath != "" || runtimeCfg.CAFile != "" { + cfg.UseTLS = true + } + cfg.VerifyOutgoing = runtimeCfg.VerifyOutgoing + cfg.VerifyServerHostname = runtimeCfg.VerifyServerHostname + cfg.CAFile = runtimeCfg.CAFile + cfg.CAPath = runtimeCfg.CAPath + cfg.CertFile = runtimeCfg.CertFile + cfg.KeyFile = runtimeCfg.KeyFile + cfg.ServerName = runtimeCfg.ServerName + cfg.Domain = runtimeCfg.DNSDomain + cfg.TLSMinVersion = runtimeCfg.TLSMinVersion + cfg.TLSCipherSuites = runtimeCfg.TLSCipherSuites + cfg.TLSPreferServerCipherSuites = runtimeCfg.TLSPreferServerCipherSuites + cfg.DefaultQueryTime = runtimeCfg.DefaultQueryTime + cfg.MaxQueryTime = runtimeCfg.MaxQueryTime + + cfg.AutoEncryptAllowTLS = runtimeCfg.AutoEncryptAllowTLS + + // Copy the Connect CA bootstrap runtimeCfg + if runtimeCfg.ConnectEnabled { + cfg.ConnectEnabled = true + cfg.ConnectMeshGatewayWANFederationEnabled = runtimeCfg.ConnectMeshGatewayWANFederationEnabled - if a.config.ConnectCAProvider != "" { - base.CAConfig.Provider = a.config.ConnectCAProvider - } - - // Merge connect CA Config regardless of provider (since there are some - // common config options valid to all like leaf TTL). - for k, v := range a.config.ConnectCAConfig { - base.CAConfig.Config[k] = v + ca, err := runtimeCfg.ConnectCAConfiguration() + if err != nil { + return nil, err } - } - // Setup the user event callback - base.UserEventHandler = func(e serf.UserEvent) { - select { - case a.eventCh <- e: - case <-a.shutdownCh: - } + cfg.CAConfig = ca } - // Setup the loggers - base.LogLevel = a.config.LogLevel - base.LogOutput = a.LogOutput + // copy over auto runtimeCfg settings + cfg.AutoConfigEnabled = runtimeCfg.AutoConfig.Enabled + cfg.AutoConfigIntroToken = runtimeCfg.AutoConfig.IntroToken + cfg.AutoConfigIntroTokenFile = runtimeCfg.AutoConfig.IntroTokenFile + cfg.AutoConfigServerAddresses = runtimeCfg.AutoConfig.ServerAddresses + cfg.AutoConfigDNSSANs = runtimeCfg.AutoConfig.DNSSANs + cfg.AutoConfigIPSANs = runtimeCfg.AutoConfig.IPSANs + cfg.AutoConfigAuthzEnabled = runtimeCfg.AutoConfig.Authorizer.Enabled + cfg.AutoConfigAuthzAuthMethod = runtimeCfg.AutoConfig.Authorizer.AuthMethod + cfg.AutoConfigAuthzClaimAssertions = runtimeCfg.AutoConfig.Authorizer.ClaimAssertions + cfg.AutoConfigAuthzAllowReuse = runtimeCfg.AutoConfig.Authorizer.AllowReuse // This will set up the LAN keyring, as well as the WAN and any segments // for servers. - if err := a.setupKeyrings(base); err != nil { + // TODO: move this closer to where the keyrings will be used. + if err := setupKeyrings(cfg, runtimeCfg, logger); err != nil { return nil, fmt.Errorf("Failed to configure keyring: %v", err) } - base.ConfigEntryBootstrap = a.config.ConfigEntryBootstrap + cfg.ConfigEntryBootstrap = runtimeCfg.ConfigEntryBootstrap - return a.enterpriseConsulConfig(base) + enterpriseConsulConfig(cfg, runtimeCfg) + return cfg, nil } // Setup the serf and memberlist config for any defined network segments. -func (a *Agent) segmentConfig() ([]consul.NetworkSegment, error) { +func segmentConfig(config *config.RuntimeConfig) ([]consul.NetworkSegment, error) { var segments []consul.NetworkSegment - config := a.config for _, s := range config.Segments { serfConf := consul.DefaultConfig().SerfLANConfig @@ -1426,7 +1241,7 @@ if s.RPCListener { rpcAddr = &net.TCPAddr{ IP: s.Bind.IP, - Port: a.config.ServerPort, + Port: config.ServerPort, } } @@ -1443,236 +1258,6 @@ return segments, nil } -// makeRandomID will generate a random UUID for a node. -func (a *Agent) makeRandomID() (string, error) { - id, err := uuid.GenerateUUID() - if err != nil { - return "", err - } - - a.logger.Debug("Using random ID as node ID", "id", id) - return id, nil -} - -// makeNodeID will try to find a host-specific ID, or else will generate a -// random ID. The returned ID will always be formatted as a GUID. We don't tell -// the caller whether this ID is random or stable since the consequences are -// high for us if this changes, so we will persist it either way. This will let -// gopsutil change implementations without affecting in-place upgrades of nodes. -func (a *Agent) makeNodeID() (string, error) { - // If they've disabled host-based IDs then just make a random one. - if a.config.DisableHostNodeID { - return a.makeRandomID() - } - - // Try to get a stable ID associated with the host itself. - info, err := host.Info() - if err != nil { - a.logger.Debug("Couldn't get a unique ID from the host", "error", err) - return a.makeRandomID() - } - - // Make sure the host ID parses as a UUID, since we don't have complete - // control over this process. - id := strings.ToLower(info.HostID) - if _, err := uuid.ParseUUID(id); err != nil { - a.logger.Debug("Unique ID from host isn't formatted as a UUID", - "id", id, - "error", err, - ) - return a.makeRandomID() - } - - // Hash the input to make it well distributed. The reported Host UUID may be - // similar across nodes if they are on a cloud provider or on motherboards - // created from the same batch. - buf := sha512.Sum512([]byte(id)) - id = fmt.Sprintf("%08x-%04x-%04x-%04x-%12x", - buf[0:4], - buf[4:6], - buf[6:8], - buf[8:10], - buf[10:16]) - - a.logger.Debug("Using unique ID from host as node ID", "id", id) - return id, nil -} - -// setupNodeID will pull the persisted node ID, if any, or create a random one -// and persist it. -func (a *Agent) setupNodeID(config *config.RuntimeConfig) error { - // If they've configured a node ID manually then just use that, as - // long as it's valid. - if config.NodeID != "" { - config.NodeID = types.NodeID(strings.ToLower(string(config.NodeID))) - if _, err := uuid.ParseUUID(string(config.NodeID)); err != nil { - return err - } - - return nil - } - - // For dev mode we have no filesystem access so just make one. - if a.config.DataDir == "" { - id, err := a.makeNodeID() - if err != nil { - return err - } - - config.NodeID = types.NodeID(id) - return nil - } - - // Load saved state, if any. Since a user could edit this, we also - // validate it. - fileID := filepath.Join(config.DataDir, "node-id") - if _, err := os.Stat(fileID); err == nil { - rawID, err := ioutil.ReadFile(fileID) - if err != nil { - return err - } - - nodeID := strings.TrimSpace(string(rawID)) - nodeID = strings.ToLower(nodeID) - if _, err := uuid.ParseUUID(nodeID); err != nil { - return err - } - - config.NodeID = types.NodeID(nodeID) - } - - // If we still don't have a valid node ID, make one. - if config.NodeID == "" { - id, err := a.makeNodeID() - if err != nil { - return err - } - if err := lib.EnsurePath(fileID, false); err != nil { - return err - } - if err := ioutil.WriteFile(fileID, []byte(id), 0600); err != nil { - return err - } - - config.NodeID = types.NodeID(id) - } - return nil -} - -// setupBaseKeyrings configures the LAN and WAN keyrings. -func (a *Agent) setupBaseKeyrings(config *consul.Config) error { - // If the keyring file is disabled then just poke the provided key - // into the in-memory keyring. - federationEnabled := config.SerfWANConfig != nil - if a.config.DisableKeyringFile { - if a.config.EncryptKey == "" { - return nil - } - - keys := []string{a.config.EncryptKey} - if err := loadKeyring(config.SerfLANConfig, keys); err != nil { - return err - } - if a.config.ServerMode && federationEnabled { - if err := loadKeyring(config.SerfWANConfig, keys); err != nil { - return err - } - } - return nil - } - - // Otherwise, we need to deal with the keyring files. - fileLAN := filepath.Join(a.config.DataDir, SerfLANKeyring) - fileWAN := filepath.Join(a.config.DataDir, SerfWANKeyring) - - var existingLANKeyring, existingWANKeyring bool - if a.config.EncryptKey == "" { - goto LOAD - } - if _, err := os.Stat(fileLAN); err != nil { - if err := initKeyring(fileLAN, a.config.EncryptKey); err != nil { - return err - } - } else { - existingLANKeyring = true - } - if a.config.ServerMode && federationEnabled { - if _, err := os.Stat(fileWAN); err != nil { - if err := initKeyring(fileWAN, a.config.EncryptKey); err != nil { - return err - } - } else { - existingWANKeyring = true - } - } - -LOAD: - if _, err := os.Stat(fileLAN); err == nil { - config.SerfLANConfig.KeyringFile = fileLAN - } - if err := loadKeyringFile(config.SerfLANConfig); err != nil { - return err - } - if a.config.ServerMode && federationEnabled { - if _, err := os.Stat(fileWAN); err == nil { - config.SerfWANConfig.KeyringFile = fileWAN - } - if err := loadKeyringFile(config.SerfWANConfig); err != nil { - return err - } - } - - // Only perform the following checks if there was an encrypt_key - // provided in the configuration. - if a.config.EncryptKey != "" { - msg := " keyring doesn't include key provided with -encrypt, using keyring" - if existingLANKeyring && - keyringIsMissingKey( - config.SerfLANConfig.MemberlistConfig.Keyring, - a.config.EncryptKey, - ) { - a.logger.Warn(msg, "keyring", "LAN") - } - if existingWANKeyring && - keyringIsMissingKey( - config.SerfWANConfig.MemberlistConfig.Keyring, - a.config.EncryptKey, - ) { - a.logger.Warn(msg, "keyring", "WAN") - } - } - - return nil -} - -// setupKeyrings is used to initialize and load keyrings during agent startup. -func (a *Agent) setupKeyrings(config *consul.Config) error { - // First set up the LAN and WAN keyrings. - if err := a.setupBaseKeyrings(config); err != nil { - return err - } - - // If there's no LAN keyring then there's nothing else to set up for - // any segments. - lanKeyring := config.SerfLANConfig.MemberlistConfig.Keyring - if lanKeyring == nil { - return nil - } - - // Copy the initial state of the LAN keyring into each segment config. - // Segments don't have their own keyring file, they rely on the LAN - // holding the state so things can't get out of sync. - k, pk := lanKeyring.GetKeys(), lanKeyring.GetPrimaryKey() - for _, segment := range config.Segments { - keyring, err := memberlist.NewKeyring(k, pk) - if err != nil { - return err - } - segment.SerfConfig.MemberlistConfig.Keyring = keyring - } - return nil -} - // registerEndpoint registers a handler for the consul RPC server // under a unique name while making it accessible under the provided // name. This allows overwriting handlers for the golang net/rpc @@ -1704,15 +1289,6 @@ return a.delegate.RPC(method, args, reply) } -// SnapshotRPC performs the requested snapshot RPC against the Consul server in -// a streaming manner. The contents of in will be read and passed along as the -// payload, and the response message will determine the error status, and any -// return payload will be written to out. -func (a *Agent) SnapshotRPC(args *structs.SnapshotRequest, in io.Reader, out io.Writer, - replyFn structs.SnapshotReplyFn) error { - return a.delegate.SnapshotRPC(args, in, out, replyFn) -} - // Leave is used to prepare the agent for a graceful shutdown func (a *Agent) Leave() error { return a.delegate.Leave() @@ -1729,6 +1305,12 @@ return nil } a.logger.Info("Requesting shutdown") + // Stop the watches to avoid any notification/state change during shutdown + a.stopAllWatches() + + // this would be cancelled anyways (by the closing of the shutdown ch) but + // this should help them to be stopped more quickly + a.autoConf.Stop() // Stop the service manager (must happen before we take the stateLock to avoid deadlock) if a.serviceManager != nil { @@ -1842,12 +1424,6 @@ a.logger.Info("Endpoints down") } -// ReloadCh is used to return a channel that can be -// used for triggering reloads and returning a response. -func (a *Agent) ReloadCh() chan chan error { - return a.reloadCh -} - // RetryJoinCh is a channel that transports errors // from the retry join process. func (a *Agent) RetryJoinCh() <-chan error { @@ -1899,6 +1475,34 @@ return } +// PrimaryMeshGatewayAddressesReadyCh returns a channel that will be closed +// when federation state replication ships back at least one primary mesh +// gateway (not via fallback config). +func (a *Agent) PrimaryMeshGatewayAddressesReadyCh() <-chan struct{} { + if srv, ok := a.delegate.(*consul.Server); ok { + return srv.PrimaryMeshGatewayAddressesReadyCh() + } + return nil +} + +// PickRandomMeshGatewaySuitableForDialing is a convenience function used for writing tests. +func (a *Agent) PickRandomMeshGatewaySuitableForDialing(dc string) string { + if srv, ok := a.delegate.(*consul.Server); ok { + return srv.PickRandomMeshGatewaySuitableForDialing(dc) + } + return "" +} + +// RefreshPrimaryGatewayFallbackAddresses is used to update the list of current +// fallback addresses for locating mesh gateways in the primary datacenter. +func (a *Agent) RefreshPrimaryGatewayFallbackAddresses(addrs []string) error { + if srv, ok := a.delegate.(*consul.Server); ok { + srv.RefreshPrimaryGatewayFallbackAddresses(addrs) + return nil + } + return fmt.Errorf("Must be a server to track mesh gateways in the primary datacenter") +} + // ForceLeave is used to remove a failed node from the cluster func (a *Agent) ForceLeave(node string, prune bool) (err error) { a.logger.Info("Force leaving node", "node", node) @@ -2127,6 +1731,11 @@ Token string Service *structs.NodeService Source string + // whether this service was registered as a sidecar, see structs.NodeService + // we store this field here because it is excluded from json serialization + // to exclude it from API output, but we need it to properly deregister + // persisted sidecars. + LocallyRegisteredAsSidecar bool `json:",omitempty"` } // persistService saves a service definition to a JSON file in the data dir @@ -2135,9 +1744,10 @@ svcPath := filepath.Join(a.config.DataDir, servicesDir, svcID.StringHash()) wrapped := persistedService{ - Token: a.State.ServiceToken(service.CompoundServiceID()), - Service: service, - Source: source.String(), + Token: a.State.ServiceToken(service.CompoundServiceID()), + Service: service, + Source: source.String(), + LocallyRegisteredAsSidecar: service.LocallyRegisteredAsSidecar, } encoded, err := json.Marshal(wrapped) if err != nil { @@ -2289,7 +1899,8 @@ token: token, replaceExistingChecks: true, source: source, - }, a.snapshotCheckState()) + snap: a.snapshotCheckState(), + }) } // AddService is used to add a service entry. @@ -2308,12 +1919,13 @@ token: token, replaceExistingChecks: false, source: source, - }, a.snapshotCheckState()) + snap: a.snapshotCheckState(), + }) } // addServiceLocked adds a service entry to the service manager if enabled, or directly // to the local state if it is not. This function assumes the state lock is already held. -func (a *Agent) addServiceLocked(req *addServiceRequest, snap map[structs.CheckID]*structs.HealthCheck) error { +func (a *Agent) addServiceLocked(req *addServiceRequest) error { req.fixupForAddServiceLocked() req.service.EnterpriseMeta.Normalize() @@ -2331,7 +1943,7 @@ req.persistDefaults = nil req.persistServiceConfig = false - return a.addServiceInternal(req, snap) + return a.addServiceInternal(req) } // addServiceRequest is the union of arguments for calling both @@ -2356,6 +1968,7 @@ token string replaceExistingChecks bool source configSource + snap map[structs.CheckID]*structs.HealthCheck } func (r *addServiceRequest) fixupForAddServiceLocked() { @@ -2369,7 +1982,7 @@ } // addServiceInternal adds the given service and checks to the local state. -func (a *Agent) addServiceInternal(req *addServiceRequest, snap map[structs.CheckID]*structs.HealthCheck) error { +func (a *Agent) addServiceInternal(req *addServiceRequest) error { req.fixupForAddServiceInternal() var ( service = req.service @@ -2381,6 +1994,7 @@ token = req.token replaceExistingChecks = req.replaceExistingChecks source = req.source + snap = req.snap ) // Pause the service syncs during modification @@ -2426,8 +2040,7 @@ } } - var cid structs.CheckID - cid.Init(types.CheckID(checkID), &service.EnterpriseMeta) + cid := structs.NewCheckID(types.CheckID(checkID), &service.EnterpriseMeta) existingChecks[cid] = true name := chkType.Name @@ -2501,11 +2114,10 @@ // If a proxy service wishes to expose checks, check targets need to be rerouted to the proxy listener // This needs to be called after chkTypes are added to the agent, to avoid being overwritten - var psid structs.ServiceID - psid.Init(service.Proxy.DestinationServiceID, &service.EnterpriseMeta) + psid := structs.NewServiceID(service.Proxy.DestinationServiceID, &service.EnterpriseMeta) if service.Proxy.Expose.Checks { - err := a.rerouteExposedChecks(psid, service.Proxy.LocalServiceAddress) + err := a.rerouteExposedChecks(psid, service.Address) if err != nil { a.logger.Warn("failed to reroute L7 checks to exposed proxy listener") } @@ -2574,13 +2186,13 @@ } // Warn if the service name is incompatible with DNS - if InvalidDnsRe.MatchString(service.Service) { + if dns.InvalidNameRe.MatchString(service.Service) { a.logger.Warn("Service name will not be discoverable "+ "via DNS due to invalid characters. Valid characters include "+ "all alpha-numerics and dashes.", "service", service.Service, ) - } else if len(service.Service) > MaxDNSLabelLength { + } else if len(service.Service) > dns.MaxLabelLength { a.logger.Warn("Service name will not be discoverable "+ "via DNS due to it being too long. Valid lengths are between "+ "1 and 63 bytes.", @@ -2590,13 +2202,13 @@ // Warn if any tags are incompatible with DNS for _, tag := range service.Tags { - if InvalidDnsRe.MatchString(tag) { + if dns.InvalidNameRe.MatchString(tag) { a.logger.Debug("Service tag will not be discoverable "+ "via DNS due to invalid characters. Valid characters include "+ "all alpha-numerics and dashes.", "tag", tag, ) - } else if len(tag) > MaxDNSLabelLength { + } else if len(tag) > dns.MaxLabelLength { a.logger.Debug("Service tag will not be discoverable "+ "via DNS due to it being too long. Valid lengths are between "+ "1 and 63 bytes.", @@ -2710,8 +2322,7 @@ svc := a.State.Service(serviceID) if svc != nil { - var psid structs.ServiceID - psid.Init(svc.Proxy.DestinationServiceID, &svc.EnterpriseMeta) + psid := structs.NewServiceID(svc.Proxy.DestinationServiceID, &svc.EnterpriseMeta) a.resetExposedChecks(psid) } @@ -2754,8 +2365,7 @@ } func (a *Agent) removeServiceSidecars(serviceID structs.ServiceID, persist bool) error { - var sidecarSID structs.ServiceID - sidecarSID.Init(a.sidecarServiceID(serviceID.ID), &serviceID.EnterpriseMeta) + sidecarSID := structs.NewServiceID(a.sidecarServiceID(serviceID.ID), &serviceID.EnterpriseMeta) if sidecar := a.State.Service(sidecarSID); sidecar != nil { // Double check that it's not just an ID collision and we actually added // this from a sidecar. @@ -2949,7 +2559,7 @@ ) return err } - http.ProxyHTTP = httpInjectAddr(http.HTTP, proxy.Proxy.LocalServiceAddress, port) + http.ProxyHTTP = httpInjectAddr(http.HTTP, proxy.Address, port) } http.Start() @@ -3018,7 +2628,7 @@ ) return err } - grpc.ProxyGRPC = grpcInjectAddr(grpc.GRPC, proxy.Proxy.LocalServiceAddress, port) + grpc.ProxyGRPC = grpcInjectAddr(grpc.GRPC, proxy.Address, port) } grpc.Start() @@ -3108,8 +2718,7 @@ rpcReq.Token = token } - var aliasServiceID structs.ServiceID - aliasServiceID.Init(chkType.AliasService, &check.EnterpriseMeta) + aliasServiceID := structs.NewServiceID(chkType.AliasService, &check.EnterpriseMeta) chkImpl := &checks.CheckAlias{ Notify: a.State, RPC: a.delegate, @@ -3206,6 +2815,8 @@ return nil } +// ServiceHTTPBasedChecks returns HTTP and GRPC based Checks +// for the given serviceID func (a *Agent) ServiceHTTPBasedChecks(serviceID structs.ServiceID) []structs.CheckType { a.stateLock.Lock() defer a.stateLock.Unlock() @@ -3224,6 +2835,7 @@ return chkTypes } +// AdvertiseAddrLAN returns the AdvertiseAddrLAN config value func (a *Agent) AdvertiseAddrLAN() string { return a.config.AdvertiseAddrLAN.String() } @@ -3407,10 +3019,6 @@ return err } -func (a *Agent) GossipEncrypted() bool { - return a.delegate.Encrypted() -} - // Stats is used to get various debugging state from the sub-systems func (a *Agent) Stats() map[string]map[string]string { stats := a.delegate.Stats() @@ -3521,7 +3129,8 @@ token: service.Token, replaceExistingChecks: false, // do default behavior source: ConfigSourceLocal, - }, snap) + snap: snap, + }) if err != nil { return fmt.Errorf("Failed to register service %q: %v", service.Name, err) } @@ -3539,7 +3148,8 @@ token: sidecarToken, replaceExistingChecks: false, // do default behavior source: ConfigSourceLocal, - }, snap) + snap: snap, + }) if err != nil { return fmt.Errorf("Failed to register sidecar for service %q: %v", service.Name, err) } @@ -3586,6 +3196,10 @@ continue } } + + // Restore LocallyRegisteredAsSidecar, see persistedService.LocallyRegisteredAsSidecar + p.Service.LocallyRegisteredAsSidecar = p.LocallyRegisteredAsSidecar + serviceID := p.Service.CompoundServiceID() source, ok := ConfigSourceFromName(p.Source) @@ -3631,14 +3245,15 @@ token: p.Token, replaceExistingChecks: false, // do default behavior source: source, - }, snap) + snap: snap, + }) if err != nil { return fmt.Errorf("failed adding service %q: %s", serviceID, err) } } } - for serviceID, _ := range persistedServiceConfigs { + for serviceID := range persistedServiceConfigs { if a.State.Service(serviceID) == nil { // This can be cleaned up now. if err := a.purgeServiceConfig(serviceID); err != nil { @@ -3883,9 +3498,8 @@ // serviceMaintCheckID returns the ID of a given service's maintenance check func serviceMaintCheckID(serviceID structs.ServiceID) structs.CheckID { - var cid structs.CheckID - cid.Init(types.CheckID(structs.ServiceMaintPrefix+serviceID.ID), &serviceID.EnterpriseMeta) - return cid + cid := types.CheckID(structs.ServiceMaintPrefix + serviceID.ID) + return structs.NewCheckID(cid, &serviceID.EnterpriseMeta) } // EnableServiceMaintenance will register a false health check against the given @@ -3985,7 +3599,35 @@ a.config.RPCMaxBurst = conf.RPCMaxBurst } -func (a *Agent) ReloadConfig(newCfg *config.RuntimeConfig) error { +// ReloadConfig will atomically reload all configuration, including +// all services, checks, tokens, metadata, dnsServer configs, etc. +// It will also reload all ongoing watches. +func (a *Agent) ReloadConfig() error { + newCfg, err := a.autoConf.ReadConfig() + if err != nil { + return err + } + + // copy over the existing node id, this cannot be + // changed while running anyways but this prevents + // breaking some existing behavior. + newCfg.NodeID = a.config.NodeID + + return a.reloadConfigInternal(newCfg) +} + +// reloadConfigInternal is mainly needed for some unit tests. Instead of parsing +// the configuration using CLI flags and on disk config, this just takes a +// runtime configuration and applies it. +func (a *Agent) reloadConfigInternal(newCfg *config.RuntimeConfig) error { + // Change the log level and update it + if logging.ValidateLogLevel(newCfg.Logging.LogLevel) { + a.logger.SetLevel(logging.LevelFromString(newCfg.Logging.LogLevel)) + } else { + a.logger.Warn("Invalid log level in new configuration", "level", newCfg.Logging.LogLevel) + newCfg.Logging.LogLevel = a.config.Logging.LogLevel + } + // Bulk update the services and checks a.PauseSync() defer a.ResumeSync() @@ -4050,8 +3692,13 @@ // concurrent due to both gaining a full lock on the stateLock a.config.ConfigEntryBootstrap = newCfg.ConfigEntryBootstrap + err := a.reloadEnterprise(newCfg) + if err != nil { + return err + } + // create the config for the rpc server/client - consulCfg, err := a.consulConfig() + consulCfg, err := newConsulConfig(a.config, a.logger) if err != nil { return err } @@ -4060,6 +3707,12 @@ return err } + if a.cache.ReloadOptions(newCfg.Cache) { + a.logger.Info("Cache options have been updated") + } else { + a.logger.Debug("Cache options have not been modified") + } + // Update filtered metrics metrics.UpdateFilter(newCfg.Telemetry.AllowedPrefixes, newCfg.Telemetry.BlockedPrefixes) @@ -4081,7 +3734,8 @@ // If we are not blocking we can skip tracking and allocating - nil WatchSet // is still valid to call Add on and will just be a no op. var ws memdb.WatchSet - var timeout *time.Timer + var ctx context.Context = &lib.StopChannelContext{StopCh: a.shutdownCh} + shouldBlock := false if alwaysBlock || hash != "" { if wait == 0 { @@ -4092,7 +3746,11 @@ } // Apply a small amount of jitter to the request. wait += lib.RandomStagger(wait / 16) - timeout = time.NewTimer(wait) + var cancel func() + ctx, cancel = context.WithDeadline(ctx, time.Now().Add(wait)) + defer cancel() + + shouldBlock = true } for { @@ -4110,7 +3768,7 @@ // WatchSet immediately returns false which would incorrectly cause this to // loop and repeat again, however we rely on the invariant that ws == nil // IFF timeout == nil in which case the Watch call is never invoked. - if timeout == nil || hash != curHash || ws.Watch(timeout.C) { + if !shouldBlock || hash != curHash || ws.WatchCtx(ctx) != nil { return curHash, curResp, err } // Watch returned false indicating a change was detected, loop and repeat @@ -4122,7 +3780,7 @@ if syncPauseCh := a.SyncPausedCh(); syncPauseCh != nil { select { case <-syncPauseCh: - case <-timeout.C: + case <-ctx.Done(): } } } @@ -4137,136 +3795,50 @@ // the a.delegate directly, otherwise tests that rely on overriding RPC // routing via a.registerEndpoint will not work. - a.cache.RegisterType(cachetype.ConnectCARootName, &cachetype.ConnectCARoot{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.ConnectCARootName, &cachetype.ConnectCARoot{RPC: a}) a.cache.RegisterType(cachetype.ConnectCALeafName, &cachetype.ConnectCALeaf{ RPC: a, Cache: a.cache, Datacenter: a.config.Datacenter, TestOverrideCAChangeInitialDelay: a.config.ConnectTestCALeafRootChangeSpread, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, }) - a.cache.RegisterType(cachetype.IntentionMatchName, &cachetype.IntentionMatch{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.IntentionMatchName, &cachetype.IntentionMatch{RPC: a}) - a.cache.RegisterType(cachetype.CatalogServicesName, &cachetype.CatalogServices{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.CatalogServicesName, &cachetype.CatalogServices{RPC: a}) - a.cache.RegisterType(cachetype.HealthServicesName, &cachetype.HealthServices{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.HealthServicesName, &cachetype.HealthServices{RPC: a}) - a.cache.RegisterType(cachetype.PreparedQueryName, &cachetype.PreparedQuery{ - RPC: a, - }, &cache.RegisterOptions{ - // Prepared queries don't support blocking - Refresh: false, - }) + a.cache.RegisterType(cachetype.PreparedQueryName, &cachetype.PreparedQuery{RPC: a}) - a.cache.RegisterType(cachetype.NodeServicesName, &cachetype.NodeServices{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.NodeServicesName, &cachetype.NodeServices{RPC: a}) - a.cache.RegisterType(cachetype.ResolvedServiceConfigName, &cachetype.ResolvedServiceConfig{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.ResolvedServiceConfigName, &cachetype.ResolvedServiceConfig{RPC: a}) - a.cache.RegisterType(cachetype.CatalogListServicesName, &cachetype.CatalogListServices{ - RPC: a, - }, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.CatalogListServicesName, &cachetype.CatalogListServices{RPC: a}) - a.cache.RegisterType(cachetype.CatalogServiceListName, &cachetype.CatalogServiceList{ - RPC: a, - }, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.CatalogServiceListName, &cachetype.CatalogServiceList{RPC: a}) - a.cache.RegisterType(cachetype.CatalogDatacentersName, &cachetype.CatalogDatacenters{ - RPC: a, - }, &cache.RegisterOptions{ - Refresh: false, - }) + a.cache.RegisterType(cachetype.CatalogDatacentersName, &cachetype.CatalogDatacenters{RPC: a}) - a.cache.RegisterType(cachetype.InternalServiceDumpName, &cachetype.InternalServiceDump{ - RPC: a, - }, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.InternalServiceDumpName, &cachetype.InternalServiceDump{RPC: a}) - a.cache.RegisterType(cachetype.CompiledDiscoveryChainName, &cachetype.CompiledDiscoveryChain{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.CompiledDiscoveryChainName, &cachetype.CompiledDiscoveryChain{RPC: a}) - a.cache.RegisterType(cachetype.ConfigEntriesName, &cachetype.ConfigEntries{ - RPC: a, - }, &cache.RegisterOptions{ - // Maintain a blocking query, retry dropped connections quickly - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.GatewayServicesName, &cachetype.GatewayServices{RPC: a}) - a.cache.RegisterType(cachetype.ServiceHTTPChecksName, &cachetype.ServiceHTTPChecks{ - Agent: a, - }, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0 * time.Second, - RefreshTimeout: 10 * time.Minute, - }) + a.cache.RegisterType(cachetype.ConfigEntriesName, &cachetype.ConfigEntries{RPC: a}) + + a.cache.RegisterType(cachetype.ConfigEntryName, &cachetype.ConfigEntry{RPC: a}) + + a.cache.RegisterType(cachetype.ServiceHTTPChecksName, &cachetype.ServiceHTTPChecks{Agent: a}) + + a.cache.RegisterType(cachetype.FederationStateListMeshGatewaysName, + &cachetype.FederationStateListMeshGateways{RPC: a}) } +// LocalState returns the agent's local state func (a *Agent) LocalState() *local.State { return a.State } diff -Nru consul-1.7.4+dfsg1/agent/agent_oss.go consul-1.8.7+dfsg1/agent/agent_oss.go --- consul-1.7.4+dfsg1/agent/agent_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agent_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,19 +9,33 @@ "github.com/hashicorp/consul/api" ) -// fillAgentServiceEnterpriseMeta stub +// enterpriseAgent embeds fields that we only access in consul-enterprise builds +type enterpriseAgent struct{} + +// fillAgentServiceEnterpriseMeta is a noop stub for the func defined agent_ent.go func fillAgentServiceEnterpriseMeta(_ *api.AgentService, _ *structs.EnterpriseMeta) {} -// fillHealthCheckEnterpriseMeta stub +// fillHealthCheckEnterpriseMeta is a noop stub for the func defined agent_ent.go func fillHealthCheckEnterpriseMeta(_ *api.HealthCheck, _ *structs.EnterpriseMeta) {} -func (a *Agent) initEnterprise(consulCfg *consul.Config) { +// initEnterprise is a noop stub for the func defined agent_ent.go +func (a *Agent) initEnterprise(consulCfg *consul.Config) error { + return nil } +// loadEnterpriseTokens is a noop stub for the func defined agent_ent.go func (a *Agent) loadEnterpriseTokens(conf *config.RuntimeConfig) { } +// reloadEnterprise is a noop stub for the func defined agent_ent.go +func (a *Agent) reloadEnterprise(conf *config.RuntimeConfig) error { + return nil +} + // enterpriseConsulConfig is a noop stub for the func defined in agent_ent.go -func (a *Agent) enterpriseConsulConfig(base *consul.Config) (*consul.Config, error) { - return base, nil +func enterpriseConsulConfig(_ *consul.Config, _ *config.RuntimeConfig) { +} + +// WriteEvent is a noop stub for the func defined agent_ent.go +func (a *Agent) WriteEvent(eventType string, payload interface{}) { } diff -Nru consul-1.7.4+dfsg1/agent/agentpb/acl.pb.binary.go consul-1.8.7+dfsg1/agent/agentpb/acl.pb.binary.go --- consul-1.7.4+dfsg1/agent/agentpb/acl.pb.binary.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/acl.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: acl.proto - -package agentpb - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ACLLink) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ACLLink) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff -Nru consul-1.7.4+dfsg1/agent/agentpb/acl.pb.go consul-1.8.7+dfsg1/agent/agentpb/acl.pb.go --- consul-1.7.4+dfsg1/agent/agentpb/acl.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/acl.pb.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,378 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: acl.proto - -package agentpb - -import ( - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/golang/protobuf/proto" - io "io" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type ACLLink struct { - ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty" hash:"ignore"` -} - -func (m *ACLLink) Reset() { *m = ACLLink{} } -func (m *ACLLink) String() string { return proto.CompactTextString(m) } -func (*ACLLink) ProtoMessage() {} -func (*ACLLink) Descriptor() ([]byte, []int) { - return fileDescriptor_a452f070aeef01eb, []int{0} -} -func (m *ACLLink) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ACLLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ACLLink.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ACLLink) XXX_Merge(src proto.Message) { - xxx_messageInfo_ACLLink.Merge(m, src) -} -func (m *ACLLink) XXX_Size() int { - return m.Size() -} -func (m *ACLLink) XXX_DiscardUnknown() { - xxx_messageInfo_ACLLink.DiscardUnknown(m) -} - -var xxx_messageInfo_ACLLink proto.InternalMessageInfo - -func init() { - proto.RegisterType((*ACLLink)(nil), "agentpb.ACLLink") -} - -func init() { proto.RegisterFile("acl.proto", fileDescriptor_a452f070aeef01eb) } - -var fileDescriptor_a452f070aeef01eb = []byte{ - // 159 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4c, 0x4c, 0xce, 0xd1, - 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4f, 0x4c, 0x4f, 0xcd, 0x2b, 0x29, 0x48, 0x92, 0x12, - 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x8b, 0xe9, 0x83, 0x58, 0x10, 0x69, 0x25, 0x07, 0x2e, 0x76, 0x47, - 0x67, 0x1f, 0x9f, 0xcc, 0xbc, 0x6c, 0x21, 0x3e, 0x2e, 0x26, 0x4f, 0x17, 0x09, 0x46, 0x05, 0x46, - 0x0d, 0xce, 0x20, 0x26, 0x4f, 0x17, 0x21, 0x55, 0x2e, 0x16, 0xbf, 0xc4, 0xdc, 0x54, 0x09, 0x26, - 0x90, 0x88, 0x93, 0xe0, 0xa7, 0x7b, 0xf2, 0xbc, 0x19, 0x89, 0xc5, 0x19, 0x56, 0x4a, 0x99, 0xe9, - 0x79, 0xf9, 0x45, 0xa9, 0x4a, 0x41, 0x60, 0x69, 0x27, 0x85, 0x13, 0x0f, 0xe5, 0x18, 0x4e, 0x3c, - 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x66, - 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x24, 0x36, 0xb0, 0x55, - 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0e, 0xc8, 0xbd, 0xdf, 0x96, 0x00, 0x00, 0x00, -} - -func (m *ACLLink) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ACLLink) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ID) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAcl(dAtA, i, uint64(len(m.ID))) - i += copy(dAtA[i:], m.ID) - } - if len(m.Name) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintAcl(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - return i, nil -} - -func encodeVarintAcl(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *ACLLink) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ID) - if l > 0 { - n += 1 + l + sovAcl(uint64(l)) - } - l = len(m.Name) - if l > 0 { - n += 1 + l + sovAcl(uint64(l)) - } - return n -} - -func sovAcl(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozAcl(x uint64) (n int) { - return sovAcl(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ACLLink) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAcl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ACLLink: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ACLLink: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAcl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAcl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAcl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAcl - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAcl - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAcl - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAcl(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAcl - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAcl - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipAcl(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAcl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAcl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAcl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthAcl - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthAcl - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAcl - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipAcl(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthAcl - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthAcl = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowAcl = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/agent/agentpb/acl.proto consul-1.8.7+dfsg1/agent/agentpb/acl.proto --- consul-1.7.4+dfsg1/agent/agentpb/acl.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/acl.proto 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -syntax = "proto3"; - -package agentpb; - -// Go Modules now includes the version in the filepath for packages within GOPATH/pkg/mode -// Therefore unless we want to hardcode a version here like -// github.com/gogo/protobuf@v1.3.0/gogoproto/gogo.proto then the only other choice is to -// have a more relative import and pass the right import path to protoc. I don't like it -// but its necessary. -import "gogoproto/gogo.proto"; - -option (gogoproto.goproto_unkeyed_all) = false; -option (gogoproto.goproto_unrecognized_all) = false; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.goproto_sizecache_all) = false; - -message ACLLink { - string ID = 1; - string Name = 2 - [(gogoproto.moretags) = "hash:\"ignore\""]; -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/agentpb/common.go consul-1.8.7+dfsg1/agent/agentpb/common.go --- consul-1.7.4+dfsg1/agent/agentpb/common.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/common.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -package agentpb - -import ( - "time" -) - -// IsRead is always true for QueryOption -func (q *QueryOptions) IsRead() bool { - return true -} - -// AllowStaleRead returns whether a stale read should be allowed -func (q *QueryOptions) AllowStaleRead() bool { - return q.AllowStale -} - -func (q *QueryOptions) TokenSecret() string { - return q.Token -} - -// SetToken is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetToken(token string) { - q.Token = token -} - -// SetMinQueryIndex is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetMinQueryIndex(minQueryIndex uint64) { - q.MinQueryIndex = minQueryIndex -} - -// SetMaxQueryTime is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetMaxQueryTime(maxQueryTime time.Duration) { - q.MaxQueryTime = maxQueryTime -} - -// SetAllowStale is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetAllowStale(allowStale bool) { - q.AllowStale = allowStale -} - -// SetRequireConsistent is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetRequireConsistent(requireConsistent bool) { - q.RequireConsistent = requireConsistent -} - -// SetUseCache is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetUseCache(useCache bool) { - q.UseCache = useCache -} - -// SetMaxStaleDuration is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetMaxStaleDuration(maxStaleDuration time.Duration) { - q.MaxStaleDuration = maxStaleDuration -} - -// SetMaxAge is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetMaxAge(maxAge time.Duration) { - q.MaxAge = maxAge -} - -// SetMustRevalidate is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetMustRevalidate(mustRevalidate bool) { - q.MustRevalidate = mustRevalidate -} - -// SetStaleIfError is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetStaleIfError(staleIfError time.Duration) { - q.StaleIfError = staleIfError -} - -// SetFilter is needed to implement the structs.QueryOptionsCompat interface -func (q *QueryOptions) SetFilter(filter string) { - q.Filter = filter -} - -// SetLastContact is needed to implement the structs.QueryMetaCompat interface -func (q *QueryMeta) SetLastContact(lastContact time.Duration) { - q.LastContact = lastContact -} - -// SetKnownLeader is needed to implement the structs.QueryMetaCompat interface -func (q *QueryMeta) SetKnownLeader(knownLeader bool) { - q.KnownLeader = knownLeader -} - -// SetIndex is needed to implement the structs.QueryMetaCompat interface -func (q *QueryMeta) SetIndex(index uint64) { - q.Index = index -} - -// SetConsistencyLevel is needed to implement the structs.QueryMetaCompat interface -func (q *QueryMeta) SetConsistencyLevel(consistencyLevel string) { - q.ConsistencyLevel = consistencyLevel -} - -// WriteRequest only applies to writes, always false -func (w WriteRequest) IsRead() bool { - return false -} - -func (w WriteRequest) TokenSecret() string { - return w.Token -} - -// AllowStaleRead returns whether a stale read should be allowed -func (w WriteRequest) AllowStaleRead() bool { - return false -} - -func (td TargetDatacenter) RequestDatacenter() string { - return td.Datacenter -} diff -Nru consul-1.7.4+dfsg1/agent/agentpb/common.pb.binary.go consul-1.8.7+dfsg1/agent/agentpb/common.pb.binary.go --- consul-1.7.4+dfsg1/agent/agentpb/common.pb.binary.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/common.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: common.proto - -package agentpb - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *RaftIndex) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *RaftIndex) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *TargetDatacenter) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *TargetDatacenter) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *WriteRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *WriteRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *QueryOptions) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *QueryOptions) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *QueryMeta) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *QueryMeta) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff -Nru consul-1.7.4+dfsg1/agent/agentpb/common.pb.go consul-1.8.7+dfsg1/agent/agentpb/common.pb.go --- consul-1.7.4+dfsg1/agent/agentpb/common.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/common.pb.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,1672 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: common.proto - -package agentpb - -import ( - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - proto "github.com/golang/protobuf/proto" - io "io" - math "math" - time "time" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf -var _ = time.Kitchen - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// RaftIndex is used to track the index used while creating -// or modifying a given struct type. -type RaftIndex struct { - CreateIndex uint64 `protobuf:"varint,1,opt,name=CreateIndex,proto3" json:"CreateIndex,omitempty" bexpr:"-"` - ModifyIndex uint64 `protobuf:"varint,2,opt,name=ModifyIndex,proto3" json:"ModifyIndex,omitempty" bexpr:"-"` -} - -func (m *RaftIndex) Reset() { *m = RaftIndex{} } -func (m *RaftIndex) String() string { return proto.CompactTextString(m) } -func (*RaftIndex) ProtoMessage() {} -func (*RaftIndex) Descriptor() ([]byte, []int) { - return fileDescriptor_555bd8c177793206, []int{0} -} -func (m *RaftIndex) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RaftIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RaftIndex.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *RaftIndex) XXX_Merge(src proto.Message) { - xxx_messageInfo_RaftIndex.Merge(m, src) -} -func (m *RaftIndex) XXX_Size() int { - return m.Size() -} -func (m *RaftIndex) XXX_DiscardUnknown() { - xxx_messageInfo_RaftIndex.DiscardUnknown(m) -} - -var xxx_messageInfo_RaftIndex proto.InternalMessageInfo - -// TargetDatacenter is intended to be used within other messages used for RPC routing -// amongst the various Consul datacenters -type TargetDatacenter struct { - Datacenter string `protobuf:"bytes,1,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (m *TargetDatacenter) Reset() { *m = TargetDatacenter{} } -func (m *TargetDatacenter) String() string { return proto.CompactTextString(m) } -func (*TargetDatacenter) ProtoMessage() {} -func (*TargetDatacenter) Descriptor() ([]byte, []int) { - return fileDescriptor_555bd8c177793206, []int{1} -} -func (m *TargetDatacenter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TargetDatacenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TargetDatacenter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *TargetDatacenter) XXX_Merge(src proto.Message) { - xxx_messageInfo_TargetDatacenter.Merge(m, src) -} -func (m *TargetDatacenter) XXX_Size() int { - return m.Size() -} -func (m *TargetDatacenter) XXX_DiscardUnknown() { - xxx_messageInfo_TargetDatacenter.DiscardUnknown(m) -} - -var xxx_messageInfo_TargetDatacenter proto.InternalMessageInfo - -type WriteRequest struct { - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - Token string `protobuf:"bytes,1,opt,name=Token,proto3" json:"Token,omitempty"` -} - -func (m *WriteRequest) Reset() { *m = WriteRequest{} } -func (m *WriteRequest) String() string { return proto.CompactTextString(m) } -func (*WriteRequest) ProtoMessage() {} -func (*WriteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_555bd8c177793206, []int{2} -} -func (m *WriteRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WriteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_WriteRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *WriteRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_WriteRequest.Merge(m, src) -} -func (m *WriteRequest) XXX_Size() int { - return m.Size() -} -func (m *WriteRequest) XXX_DiscardUnknown() { - xxx_messageInfo_WriteRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_WriteRequest proto.InternalMessageInfo - -func (m *WriteRequest) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -// QueryOptions is used to specify various flags for read queries -type QueryOptions struct { - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - Token string `protobuf:"bytes,1,opt,name=Token,proto3" json:"Token,omitempty"` - // If set, wait until query exceeds given index. Must be provided - // with MaxQueryTime. - MinQueryIndex uint64 `protobuf:"varint,2,opt,name=MinQueryIndex,proto3" json:"MinQueryIndex,omitempty"` - // Provided with MinQueryIndex to wait for change. - MaxQueryTime time.Duration `protobuf:"bytes,3,opt,name=MaxQueryTime,proto3,stdduration" json:"MaxQueryTime"` - // If set, any follower can service the request. Results - // may be arbitrarily stale. - AllowStale bool `protobuf:"varint,4,opt,name=AllowStale,proto3" json:"AllowStale,omitempty"` - // If set, the leader must verify leadership prior to - // servicing the request. Prevents a stale read. - RequireConsistent bool `protobuf:"varint,5,opt,name=RequireConsistent,proto3" json:"RequireConsistent,omitempty"` - // If set, the local agent may respond with an arbitrarily stale locally - // cached response. The semantics differ from AllowStale since the agent may - // be entirely partitioned from the servers and still considered "healthy" by - // operators. Stale responses from Servers are also arbitrarily stale, but can - // provide additional bounds on the last contact time from the leader. It's - // expected that servers that are partitioned are noticed and replaced in a - // timely way by operators while the same may not be true for client agents. - UseCache bool `protobuf:"varint,6,opt,name=UseCache,proto3" json:"UseCache,omitempty"` - // If set and AllowStale is true, will try first a stale - // read, and then will perform a consistent read if stale - // read is older than value. - MaxStaleDuration time.Duration `protobuf:"bytes,7,opt,name=MaxStaleDuration,proto3,stdduration" json:"MaxStaleDuration"` - // MaxAge limits how old a cached value will be returned if UseCache is true. - // If there is a cached response that is older than the MaxAge, it is treated - // as a cache miss and a new fetch invoked. If the fetch fails, the error is - // returned. Clients that wish to allow for stale results on error can set - // StaleIfError to a longer duration to change this behavior. It is ignored - // if the endpoint supports background refresh caching. See - // https://www.consul.io/api/index.html#agent-caching for more details. - MaxAge time.Duration `protobuf:"bytes,8,opt,name=MaxAge,proto3,stdduration" json:"MaxAge"` - // MustRevalidate forces the agent to fetch a fresh version of a cached - // resource or at least validate that the cached version is still fresh. It is - // implied by either max-age=0 or must-revalidate Cache-Control headers. It - // only makes sense when UseCache is true. We store it since MaxAge = 0 is the - // default unset value. - MustRevalidate bool `protobuf:"varint,9,opt,name=MustRevalidate,proto3" json:"MustRevalidate,omitempty"` - // StaleIfError specifies how stale the client will accept a cached response - // if the servers are unavailable to fetch a fresh one. Only makes sense when - // UseCache is true and MaxAge is set to a lower, non-zero value. It is - // ignored if the endpoint supports background refresh caching. See - // https://www.consul.io/api/index.html#agent-caching for more details. - StaleIfError time.Duration `protobuf:"bytes,10,opt,name=StaleIfError,proto3,stdduration" json:"StaleIfError"` - // Filter specifies the go-bexpr filter expression to be used for - // filtering the data prior to returning a response - Filter string `protobuf:"bytes,11,opt,name=Filter,proto3" json:"Filter,omitempty"` -} - -func (m *QueryOptions) Reset() { *m = QueryOptions{} } -func (m *QueryOptions) String() string { return proto.CompactTextString(m) } -func (*QueryOptions) ProtoMessage() {} -func (*QueryOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_555bd8c177793206, []int{3} -} -func (m *QueryOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryOptions.Merge(m, src) -} -func (m *QueryOptions) XXX_Size() int { - return m.Size() -} -func (m *QueryOptions) XXX_DiscardUnknown() { - xxx_messageInfo_QueryOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryOptions proto.InternalMessageInfo - -func (m *QueryOptions) GetToken() string { - if m != nil { - return m.Token - } - return "" -} - -func (m *QueryOptions) GetMinQueryIndex() uint64 { - if m != nil { - return m.MinQueryIndex - } - return 0 -} - -func (m *QueryOptions) GetMaxQueryTime() time.Duration { - if m != nil { - return m.MaxQueryTime - } - return 0 -} - -func (m *QueryOptions) GetAllowStale() bool { - if m != nil { - return m.AllowStale - } - return false -} - -func (m *QueryOptions) GetRequireConsistent() bool { - if m != nil { - return m.RequireConsistent - } - return false -} - -func (m *QueryOptions) GetUseCache() bool { - if m != nil { - return m.UseCache - } - return false -} - -func (m *QueryOptions) GetMaxStaleDuration() time.Duration { - if m != nil { - return m.MaxStaleDuration - } - return 0 -} - -func (m *QueryOptions) GetMaxAge() time.Duration { - if m != nil { - return m.MaxAge - } - return 0 -} - -func (m *QueryOptions) GetMustRevalidate() bool { - if m != nil { - return m.MustRevalidate - } - return false -} - -func (m *QueryOptions) GetStaleIfError() time.Duration { - if m != nil { - return m.StaleIfError - } - return 0 -} - -func (m *QueryOptions) GetFilter() string { - if m != nil { - return m.Filter - } - return "" -} - -// QueryMeta allows a query response to include potentially -// useful metadata about a query -type QueryMeta struct { - // This is the index associated with the read - Index uint64 `protobuf:"varint,1,opt,name=Index,proto3" json:"Index,omitempty"` - // If AllowStale is used, this is time elapsed since - // last contact between the follower and leader. This - // can be used to gauge staleness. - LastContact time.Duration `protobuf:"bytes,2,opt,name=LastContact,proto3,stdduration" json:"LastContact"` - // Used to indicate if there is a known leader node - KnownLeader bool `protobuf:"varint,3,opt,name=KnownLeader,proto3" json:"KnownLeader,omitempty"` - // Consistencylevel returns the consistency used to serve the query - // Having `discovery_max_stale` on the agent can affect whether - // the request was served by a leader. - ConsistencyLevel string `protobuf:"bytes,4,opt,name=ConsistencyLevel,proto3" json:"ConsistencyLevel,omitempty"` -} - -func (m *QueryMeta) Reset() { *m = QueryMeta{} } -func (m *QueryMeta) String() string { return proto.CompactTextString(m) } -func (*QueryMeta) ProtoMessage() {} -func (*QueryMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_555bd8c177793206, []int{4} -} -func (m *QueryMeta) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryMeta.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *QueryMeta) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryMeta.Merge(m, src) -} -func (m *QueryMeta) XXX_Size() int { - return m.Size() -} -func (m *QueryMeta) XXX_DiscardUnknown() { - xxx_messageInfo_QueryMeta.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryMeta proto.InternalMessageInfo - -func (m *QueryMeta) GetIndex() uint64 { - if m != nil { - return m.Index - } - return 0 -} - -func (m *QueryMeta) GetLastContact() time.Duration { - if m != nil { - return m.LastContact - } - return 0 -} - -func (m *QueryMeta) GetKnownLeader() bool { - if m != nil { - return m.KnownLeader - } - return false -} - -func (m *QueryMeta) GetConsistencyLevel() string { - if m != nil { - return m.ConsistencyLevel - } - return "" -} - -func init() { - proto.RegisterType((*RaftIndex)(nil), "agentpb.RaftIndex") - proto.RegisterType((*TargetDatacenter)(nil), "agentpb.TargetDatacenter") - proto.RegisterType((*WriteRequest)(nil), "agentpb.WriteRequest") - proto.RegisterType((*QueryOptions)(nil), "agentpb.QueryOptions") - proto.RegisterType((*QueryMeta)(nil), "agentpb.QueryMeta") -} - -func init() { proto.RegisterFile("common.proto", fileDescriptor_555bd8c177793206) } - -var fileDescriptor_555bd8c177793206 = []byte{ - // 538 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xc1, 0x6e, 0xd3, 0x40, - 0x14, 0xb4, 0x21, 0x4d, 0xe3, 0x97, 0x14, 0x85, 0x55, 0x85, 0x4c, 0x0e, 0x4e, 0x64, 0x21, 0x14, - 0x55, 0x90, 0x48, 0xe5, 0x56, 0x4e, 0x4d, 0x5a, 0x50, 0x45, 0xac, 0x8a, 0x25, 0x88, 0xf3, 0x26, - 0x79, 0x31, 0x16, 0xce, 0x6e, 0x58, 0x6f, 0xda, 0xe4, 0x0f, 0x38, 0x72, 0xac, 0x38, 0xf1, 0x21, - 0x7c, 0x40, 0x8e, 0x3d, 0x72, 0x2a, 0x90, 0xfc, 0x01, 0x5f, 0x80, 0xbc, 0x76, 0x8a, 0x4b, 0x7a, - 0x08, 0x37, 0xcf, 0x78, 0x66, 0x77, 0xf6, 0xbd, 0x81, 0x52, 0x5f, 0x8c, 0x46, 0x82, 0x37, 0xc6, - 0x52, 0x28, 0x41, 0xb6, 0x99, 0x8f, 0x5c, 0x8d, 0x7b, 0x15, 0xc7, 0x17, 0xc2, 0x0f, 0xb1, 0xa9, - 0xe9, 0xde, 0x64, 0xd8, 0x1c, 0x4c, 0x24, 0x53, 0xc1, 0x4a, 0x58, 0xd9, 0xf5, 0x85, 0x2f, 0xf4, - 0x67, 0x33, 0xfe, 0x4a, 0x58, 0x77, 0x04, 0x16, 0x65, 0x43, 0x75, 0xc2, 0x07, 0x38, 0x25, 0x4d, - 0x28, 0xb6, 0x25, 0x32, 0x85, 0x1a, 0xda, 0x66, 0xcd, 0xac, 0xe7, 0x5a, 0x3b, 0xbf, 0xaf, 0xaa, - 0x56, 0x0f, 0xa7, 0x63, 0x79, 0xe0, 0x3e, 0x75, 0x69, 0x56, 0x11, 0x1b, 0x3c, 0x31, 0x08, 0x86, - 0xb3, 0xc4, 0x70, 0xe7, 0x56, 0x43, 0x46, 0xe1, 0xee, 0x43, 0xb9, 0xcb, 0xa4, 0x8f, 0xea, 0x88, - 0x29, 0xd6, 0x47, 0xae, 0x50, 0x12, 0x07, 0xe0, 0x2f, 0xd2, 0x97, 0x5a, 0x34, 0xc3, 0xb8, 0x7b, - 0x50, 0x7a, 0x27, 0x03, 0x85, 0x14, 0x3f, 0x4e, 0x30, 0x52, 0x64, 0x17, 0xb6, 0xba, 0xe2, 0x03, - 0xf2, 0x54, 0x9a, 0x80, 0x83, 0xdc, 0xa7, 0xaf, 0x55, 0xd3, 0xfd, 0x92, 0x83, 0xd2, 0xeb, 0x09, - 0xca, 0xd9, 0xe9, 0x38, 0x7e, 0x7a, 0x74, 0xbb, 0x98, 0x3c, 0x82, 0x1d, 0x2f, 0xe0, 0x5a, 0x98, - 0x49, 0x4e, 0x6f, 0x92, 0xe4, 0x25, 0x94, 0x3c, 0x36, 0xd5, 0x44, 0x37, 0x18, 0xa1, 0x7d, 0xb7, - 0x66, 0xd6, 0x8b, 0xfb, 0x0f, 0x1b, 0xc9, 0xa0, 0x1b, 0xab, 0x41, 0x37, 0x8e, 0xd2, 0x41, 0xb7, - 0x0a, 0xf3, 0xab, 0xaa, 0x71, 0xf1, 0xa3, 0x6a, 0xd2, 0x1b, 0xc6, 0xf8, 0x85, 0x87, 0x61, 0x28, - 0xce, 0xdf, 0x28, 0x16, 0xa2, 0x9d, 0xab, 0x99, 0xf5, 0x02, 0xcd, 0x30, 0xe4, 0x09, 0xdc, 0x8f, - 0x1f, 0x17, 0x48, 0x6c, 0x0b, 0x1e, 0x05, 0x91, 0x42, 0xae, 0xec, 0x2d, 0x2d, 0x5b, 0xff, 0x41, - 0x2a, 0x50, 0x78, 0x1b, 0x61, 0x9b, 0xf5, 0xdf, 0xa3, 0x9d, 0xd7, 0xa2, 0x6b, 0x4c, 0x4e, 0xa1, - 0xec, 0xb1, 0xa9, 0x3e, 0x75, 0x95, 0xca, 0xde, 0xde, 0x3c, 0xf6, 0x9a, 0x99, 0x3c, 0x87, 0xbc, - 0xc7, 0xa6, 0x87, 0x3e, 0xda, 0x85, 0xcd, 0x8f, 0x49, 0x2d, 0xe4, 0x31, 0xdc, 0xf3, 0x26, 0x91, - 0xa2, 0x78, 0xc6, 0xc2, 0x60, 0xc0, 0x14, 0xda, 0x96, 0xce, 0xfb, 0x0f, 0x1b, 0x0f, 0x5a, 0xdf, - 0x7a, 0x32, 0x3c, 0x96, 0x52, 0x48, 0x1b, 0xfe, 0x63, 0xd0, 0x59, 0x23, 0x79, 0x00, 0xf9, 0x17, - 0x41, 0x18, 0xd7, 0xa8, 0xa8, 0xd7, 0x9d, 0xa2, 0xb4, 0x1c, 0xdf, 0x4c, 0xb0, 0xf4, 0x52, 0x3c, - 0x54, 0x2c, 0x6e, 0x46, 0xa6, 0xe6, 0x34, 0x01, 0xe4, 0x18, 0x8a, 0x1d, 0x16, 0xa9, 0xb6, 0xe0, - 0x8a, 0xf5, 0x95, 0xee, 0xc5, 0x86, 0x49, 0xb2, 0x3e, 0x52, 0x83, 0xe2, 0x2b, 0x2e, 0xce, 0x79, - 0x07, 0xd9, 0x00, 0xa5, 0x6e, 0x4e, 0x81, 0x66, 0x29, 0xb2, 0x07, 0xe5, 0xeb, 0x9d, 0xf6, 0x67, - 0x1d, 0x3c, 0xc3, 0x50, 0x37, 0xc3, 0xa2, 0x6b, 0x7c, 0x12, 0xbf, 0x55, 0x9b, 0xff, 0x72, 0x8c, - 0xf9, 0xc2, 0x31, 0x2f, 0x17, 0x8e, 0xf9, 0x73, 0xe1, 0x98, 0x9f, 0x97, 0x8e, 0x71, 0xb1, 0x74, - 0x8c, 0xcb, 0xa5, 0x63, 0x7c, 0x5f, 0x3a, 0x46, 0x2f, 0xaf, 0xf3, 0x3d, 0xfb, 0x13, 0x00, 0x00, - 0xff, 0xff, 0x1c, 0x85, 0xfc, 0x3b, 0x22, 0x04, 0x00, 0x00, -} - -func (m *RaftIndex) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RaftIndex) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CreateIndex != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintCommon(dAtA, i, uint64(m.CreateIndex)) - } - if m.ModifyIndex != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintCommon(dAtA, i, uint64(m.ModifyIndex)) - } - return i, nil -} - -func (m *TargetDatacenter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TargetDatacenter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Datacenter) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCommon(dAtA, i, uint64(len(m.Datacenter))) - i += copy(dAtA[i:], m.Datacenter) - } - return i, nil -} - -func (m *WriteRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WriteRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Token) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCommon(dAtA, i, uint64(len(m.Token))) - i += copy(dAtA[i:], m.Token) - } - return i, nil -} - -func (m *QueryOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Token) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCommon(dAtA, i, uint64(len(m.Token))) - i += copy(dAtA[i:], m.Token) - } - if m.MinQueryIndex != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintCommon(dAtA, i, uint64(m.MinQueryIndex)) - } - dAtA[i] = 0x1a - i++ - i = encodeVarintCommon(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxQueryTime))) - n1, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxQueryTime, dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if m.AllowStale { - dAtA[i] = 0x20 - i++ - if m.AllowStale { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.RequireConsistent { - dAtA[i] = 0x28 - i++ - if m.RequireConsistent { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.UseCache { - dAtA[i] = 0x30 - i++ - if m.UseCache { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - dAtA[i] = 0x3a - i++ - i = encodeVarintCommon(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxStaleDuration))) - n2, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxStaleDuration, dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - dAtA[i] = 0x42 - i++ - i = encodeVarintCommon(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxAge))) - n3, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxAge, dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - if m.MustRevalidate { - dAtA[i] = 0x48 - i++ - if m.MustRevalidate { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - dAtA[i] = 0x52 - i++ - i = encodeVarintCommon(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.StaleIfError))) - n4, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.StaleIfError, dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - if len(m.Filter) > 0 { - dAtA[i] = 0x5a - i++ - i = encodeVarintCommon(dAtA, i, uint64(len(m.Filter))) - i += copy(dAtA[i:], m.Filter) - } - return i, nil -} - -func (m *QueryMeta) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryMeta) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Index != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintCommon(dAtA, i, uint64(m.Index)) - } - dAtA[i] = 0x12 - i++ - i = encodeVarintCommon(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.LastContact))) - n5, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.LastContact, dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if m.KnownLeader { - dAtA[i] = 0x18 - i++ - if m.KnownLeader { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.ConsistencyLevel) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintCommon(dAtA, i, uint64(len(m.ConsistencyLevel))) - i += copy(dAtA[i:], m.ConsistencyLevel) - } - return i, nil -} - -func encodeVarintCommon(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *RaftIndex) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CreateIndex != 0 { - n += 1 + sovCommon(uint64(m.CreateIndex)) - } - if m.ModifyIndex != 0 { - n += 1 + sovCommon(uint64(m.ModifyIndex)) - } - return n -} - -func (m *TargetDatacenter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Datacenter) - if l > 0 { - n += 1 + l + sovCommon(uint64(l)) - } - return n -} - -func (m *WriteRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Token) - if l > 0 { - n += 1 + l + sovCommon(uint64(l)) - } - return n -} - -func (m *QueryOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Token) - if l > 0 { - n += 1 + l + sovCommon(uint64(l)) - } - if m.MinQueryIndex != 0 { - n += 1 + sovCommon(uint64(m.MinQueryIndex)) - } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxQueryTime) - n += 1 + l + sovCommon(uint64(l)) - if m.AllowStale { - n += 2 - } - if m.RequireConsistent { - n += 2 - } - if m.UseCache { - n += 2 - } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxStaleDuration) - n += 1 + l + sovCommon(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxAge) - n += 1 + l + sovCommon(uint64(l)) - if m.MustRevalidate { - n += 2 - } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.StaleIfError) - n += 1 + l + sovCommon(uint64(l)) - l = len(m.Filter) - if l > 0 { - n += 1 + l + sovCommon(uint64(l)) - } - return n -} - -func (m *QueryMeta) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Index != 0 { - n += 1 + sovCommon(uint64(m.Index)) - } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.LastContact) - n += 1 + l + sovCommon(uint64(l)) - if m.KnownLeader { - n += 2 - } - l = len(m.ConsistencyLevel) - if l > 0 { - n += 1 + l + sovCommon(uint64(l)) - } - return n -} - -func sovCommon(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozCommon(x uint64) (n int) { - return sovCommon(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *RaftIndex) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RaftIndex: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RaftIndex: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CreateIndex", wireType) - } - m.CreateIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CreateIndex |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ModifyIndex", wireType) - } - m.ModifyIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ModifyIndex |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipCommon(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TargetDatacenter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TargetDatacenter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TargetDatacenter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Datacenter", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Datacenter = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCommon(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WriteRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WriteRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WriteRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Token = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCommon(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Token = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinQueryIndex", wireType) - } - m.MinQueryIndex = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.MinQueryIndex |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxQueryTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxQueryTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowStale", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AllowStale = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RequireConsistent", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RequireConsistent = bool(v != 0) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UseCache", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.UseCache = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxStaleDuration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxStaleDuration, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxAge", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxAge, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MustRevalidate", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.MustRevalidate = bool(v != 0) - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StaleIfError", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.StaleIfError, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filter = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCommon(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryMeta) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryMeta: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryMeta: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - m.Index = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Index |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastContact", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.LastContact, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field KnownLeader", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.KnownLeader = bool(v != 0) - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsistencyLevel", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommon - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCommon - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCommon - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConsistencyLevel = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCommon(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommon - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipCommon(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCommon - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCommon - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCommon - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthCommon - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthCommon - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCommon - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipCommon(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthCommon - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthCommon = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowCommon = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/agent/agentpb/common.proto consul-1.8.7+dfsg1/agent/agentpb/common.proto --- consul-1.7.4+dfsg1/agent/agentpb/common.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agentpb/common.proto 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -syntax = "proto3"; - -package agentpb; - -import "google/protobuf/duration.proto"; -// Go Modules now includes the version in the filepath for packages within GOPATH/pkg/mode -// Therefore unless we want to hardcode a version here like -// github.com/gogo/protobuf@v1.3.0/gogoproto/gogo.proto then the only other choice is to -// have a more relative import and pass the right import path to protoc. I don't like it -// but its necessary. -import "gogoproto/gogo.proto"; - -option (gogoproto.goproto_unkeyed_all) = false; -option (gogoproto.goproto_unrecognized_all) = false; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.goproto_sizecache_all) = false; - -// RaftIndex is used to track the index used while creating -// or modifying a given struct type. -message RaftIndex { - uint64 CreateIndex = 1 [(gogoproto.moretags) = "bexpr:\"-\""]; - uint64 ModifyIndex = 2 [(gogoproto.moretags) = "bexpr:\"-\""]; -} - -// TargetDatacenter is intended to be used within other messages used for RPC routing -// amongst the various Consul datacenters -message TargetDatacenter { - string Datacenter = 1; -} - -message WriteRequest { - option (gogoproto.goproto_getters) = true; - - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - string Token = 1; -} - -// QueryOptions is used to specify various flags for read queries -message QueryOptions { - // The autogenerated getters will implement half of the - // structs.QueryOptionsCompat interface - option (gogoproto.goproto_getters) = true; - - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - string Token = 1; - - // If set, wait until query exceeds given index. Must be provided - // with MaxQueryTime. - uint64 MinQueryIndex = 2; - - // Provided with MinQueryIndex to wait for change. - google.protobuf.Duration MaxQueryTime = 3 - [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; - - // If set, any follower can service the request. Results - // may be arbitrarily stale. - bool AllowStale = 4; - - // If set, the leader must verify leadership prior to - // servicing the request. Prevents a stale read. - bool RequireConsistent = 5; - - // If set, the local agent may respond with an arbitrarily stale locally - // cached response. The semantics differ from AllowStale since the agent may - // be entirely partitioned from the servers and still considered "healthy" by - // operators. Stale responses from Servers are also arbitrarily stale, but can - // provide additional bounds on the last contact time from the leader. It's - // expected that servers that are partitioned are noticed and replaced in a - // timely way by operators while the same may not be true for client agents. - bool UseCache = 6; - - // If set and AllowStale is true, will try first a stale - // read, and then will perform a consistent read if stale - // read is older than value. - google.protobuf.Duration MaxStaleDuration = 7 - [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; - - // MaxAge limits how old a cached value will be returned if UseCache is true. - // If there is a cached response that is older than the MaxAge, it is treated - // as a cache miss and a new fetch invoked. If the fetch fails, the error is - // returned. Clients that wish to allow for stale results on error can set - // StaleIfError to a longer duration to change this behavior. It is ignored - // if the endpoint supports background refresh caching. See - // https://www.consul.io/api/index.html#agent-caching for more details. - google.protobuf.Duration MaxAge = 8 - [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; - - // MustRevalidate forces the agent to fetch a fresh version of a cached - // resource or at least validate that the cached version is still fresh. It is - // implied by either max-age=0 or must-revalidate Cache-Control headers. It - // only makes sense when UseCache is true. We store it since MaxAge = 0 is the - // default unset value. - bool MustRevalidate = 9; - - // StaleIfError specifies how stale the client will accept a cached response - // if the servers are unavailable to fetch a fresh one. Only makes sense when - // UseCache is true and MaxAge is set to a lower, non-zero value. It is - // ignored if the endpoint supports background refresh caching. See - // https://www.consul.io/api/index.html#agent-caching for more details. - google.protobuf.Duration StaleIfError = 10 - [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; - - // Filter specifies the go-bexpr filter expression to be used for - // filtering the data prior to returning a response - string Filter = 11; -} - -// QueryMeta allows a query response to include potentially -// useful metadata about a query -message QueryMeta { - // The auto-generated getters will implement half of the - // structs.QueryMetaCompat interface - option (gogoproto.goproto_getters) = true; - - // This is the index associated with the read - uint64 Index = 1; - - // If AllowStale is used, this is time elapsed since - // last contact between the follower and leader. This - // can be used to gauge staleness. - google.protobuf.Duration LastContact = 2 - [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; - - // Used to indicate if there is a known leader node - bool KnownLeader = 3; - - // Consistencylevel returns the consistency used to serve the query - // Having `discovery_max_stale` on the agent can affect whether - // the request was served by a leader. - string ConsistencyLevel = 4; -} diff -Nru consul-1.7.4+dfsg1/agent/agent_test.go consul-1.8.7+dfsg1/agent/agent_test.go --- consul-1.7.4+dfsg1/agent/agent_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/agent_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,9 +4,12 @@ "bytes" "context" "crypto/tls" + "crypto/x509" + "encoding/base64" "encoding/json" "fmt" "io/ioutil" + "math/rand" "net" "net/http" "net/http/httptest" @@ -14,11 +17,12 @@ "path/filepath" "strconv" "strings" + "sync" "testing" "time" - "github.com/hashicorp/consul/testrpc" - + "github.com/golang/protobuf/jsonpb" + "github.com/google/tcpproxy" "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/checks" @@ -26,14 +30,20 @@ "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/consul/ipaddr" + "github.com/hashicorp/consul/proto/pbautoconf" "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" - "github.com/hashicorp/go-uuid" + "github.com/hashicorp/serf/serf" "github.com/pascaldekloe/goe/verify" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "golang.org/x/time/rate" + "gopkg.in/square/go-jose.v2/jwt" ) func getService(a *TestAgent, id string) *structs.NodeService { @@ -78,26 +88,11 @@ require.NotContains(t, m, structs.NewCheckID(id, nil), "have check %q (expected missing)", id) } -func externalIP() (string, error) { - addrs, err := net.InterfaceAddrs() - if err != nil { - return "", fmt.Errorf("Unable to lookup network interfaces: %v", err) - } - for _, a := range addrs { - if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { - if ipnet.IP.To4() != nil { - return ipnet.IP.String(), nil - } - } - } - return "", fmt.Errorf("Unable to find a non-loopback interface") -} - func TestAgent_MultiStartStop(t *testing.T) { for i := 0; i < 10; i++ { t.Run("", func(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") time.Sleep(250 * time.Millisecond) a.Shutdown() }) @@ -136,12 +131,8 @@ for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - // This is a rare case where using a constructor for TestAgent - // (NewTestAgent and the likes) won't work, since we expect an error - // in one test case, and the constructors have built-in retry logic - // that runs automatically upon error. - a := &TestAgent{Name: tt.name, HCL: tt.hcl, LogOutput: testutil.TestWriter(t)} - err := a.Start() + a := TestAgent{HCL: tt.hcl} + err := a.Start(t) if tt.wantErr { if err == nil { t.Fatal("expected error, got nil") @@ -161,7 +152,7 @@ func TestAgent_StartStop(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() if err := a.Leave(); err != nil { @@ -180,7 +171,7 @@ func TestAgent_RPCPing(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -193,7 +184,7 @@ func TestAgent_TokenStore(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_token = "user" acl_agent_token = "agent" acl_agent_master_token = "master"`, @@ -214,7 +205,7 @@ func TestAgent_ReconnectConfigSettings(t *testing.T) { t.Parallel() func() { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() lan := a.consulConfig().SerfLANConfig.ReconnectTimeout @@ -229,7 +220,7 @@ }() func() { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` reconnect_timeout = "24h" reconnect_timeout_wan = "36h" `) @@ -250,7 +241,7 @@ func TestAgent_ReconnectConfigWanDisabled(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` ports { serf_wan = -1 } reconnect_timeout_wan = "36h" `) @@ -260,120 +251,6 @@ require.Nil(t, a.consulConfig().SerfWANConfig) } -func TestAgent_setupNodeID(t *testing.T) { - t.Parallel() - a := NewTestAgent(t, t.Name(), ` - node_id = "" - `) - defer a.Shutdown() - - cfg := a.config - - // The auto-assigned ID should be valid. - id := a.consulConfig().NodeID - if _, err := uuid.ParseUUID(string(id)); err != nil { - t.Fatalf("err: %v", err) - } - - // Running again should get the same ID (persisted in the file). - cfg.NodeID = "" - if err := a.setupNodeID(cfg); err != nil { - t.Fatalf("err: %v", err) - } - if newID := a.consulConfig().NodeID; id != newID { - t.Fatalf("bad: %q vs %q", id, newID) - } - - // Set an invalid ID via.Config. - cfg.NodeID = types.NodeID("nope") - err := a.setupNodeID(cfg) - if err == nil || !strings.Contains(err.Error(), "uuid string is wrong length") { - t.Fatalf("err: %v", err) - } - - // Set a valid ID via.Config. - newID, err := uuid.GenerateUUID() - if err != nil { - t.Fatalf("err: %v", err) - } - cfg.NodeID = types.NodeID(strings.ToUpper(newID)) - if err := a.setupNodeID(cfg); err != nil { - t.Fatalf("err: %v", err) - } - if id := a.consulConfig().NodeID; string(id) != newID { - t.Fatalf("bad: %q vs. %q", id, newID) - } - - // Set an invalid ID via the file. - fileID := filepath.Join(cfg.DataDir, "node-id") - if err := ioutil.WriteFile(fileID, []byte("adf4238a!882b!9ddc!4a9d!5b6758e4159e"), 0600); err != nil { - t.Fatalf("err: %v", err) - } - cfg.NodeID = "" - err = a.setupNodeID(cfg) - if err == nil || !strings.Contains(err.Error(), "uuid is improperly formatted") { - t.Fatalf("err: %v", err) - } - - // Set a valid ID via the file. - if err := ioutil.WriteFile(fileID, []byte("ADF4238a-882b-9ddc-4a9d-5b6758e4159e"), 0600); err != nil { - t.Fatalf("err: %v", err) - } - cfg.NodeID = "" - if err := a.setupNodeID(cfg); err != nil { - t.Fatalf("err: %v", err) - } - if id := a.consulConfig().NodeID; string(id) != "adf4238a-882b-9ddc-4a9d-5b6758e4159e" { - t.Fatalf("bad: %q vs. %q", id, newID) - } -} - -func TestAgent_makeNodeID(t *testing.T) { - t.Parallel() - a := NewTestAgent(t, t.Name(), ` - node_id = "" - `) - defer a.Shutdown() - - // We should get a valid host-based ID initially. - id, err := a.makeNodeID() - if err != nil { - t.Fatalf("err: %v", err) - } - if _, err := uuid.ParseUUID(string(id)); err != nil { - t.Fatalf("err: %v", err) - } - - // Calling again should yield a random ID by default. - another, err := a.makeNodeID() - if err != nil { - t.Fatalf("err: %v", err) - } - if id == another { - t.Fatalf("bad: %s vs %s", id, another) - } - - // Turn on host-based IDs and try again. We should get the same ID - // each time (and a different one from the random one above). - a.Config.DisableHostNodeID = false - id, err = a.makeNodeID() - if err != nil { - t.Fatalf("err: %v", err) - } - if id == another { - t.Fatalf("bad: %s vs %s", id, another) - } - - // Calling again should yield the host-based ID. - another, err = a.makeNodeID() - if err != nil { - t.Fatalf("err: %v", err) - } - if id != another { - t.Fatalf("bad: %s vs %s", id, another) - } -} - func TestAgent_AddService(t *testing.T) { t.Run("normal", func(t *testing.T) { t.Parallel() @@ -388,7 +265,7 @@ func testAgent_AddService(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "node1" `+extraHCL) defer a.Shutdown() @@ -584,7 +461,7 @@ func testAgent_AddServices_AliasUpdateCheckNotReverted(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "node1" `+extraHCL) defer a.Shutdown() @@ -601,7 +478,13 @@ services := make([]*structs.ServiceDefinition, numServices) checkIDs := make([]types.CheckID, numServices) - for i := 0; i < numServices; i++ { + services[0] = &structs.ServiceDefinition{ + ID: "fake", + Name: "fake", + Port: 8080, + Checks: []*structs.CheckType{}, + } + for i := 1; i < numServices; i++ { name := fmt.Sprintf("web-%d", i) services[i] = &structs.ServiceDefinition{ @@ -638,6 +521,150 @@ }) } +func test_createAlias(t *testing.T, agent *TestAgent, chk *structs.CheckType, expectedResult string) func(r *retry.R) { + t.Helper() + serviceNum := rand.Int() + srv := &structs.NodeService{ + Service: fmt.Sprintf("serviceAlias-%d", serviceNum), + Tags: []string{"tag1"}, + Port: 8900 + serviceNum, + } + if srv.ID == "" { + srv.ID = fmt.Sprintf("serviceAlias-%d", serviceNum) + } + chk.Status = api.HealthWarning + if chk.CheckID == "" { + chk.CheckID = types.CheckID(fmt.Sprintf("check-%d", serviceNum)) + } + err := agent.AddService(srv, []*structs.CheckType{chk}, false, "", ConfigSourceLocal) + assert.NoError(t, err) + return func(r *retry.R) { + t.Helper() + found := false + for _, c := range agent.State.CheckStates(structs.WildcardEnterpriseMeta()) { + if c.Check.CheckID == chk.CheckID { + found = true + assert.Equal(t, expectedResult, c.Check.Status, "Check state should be %s, was %s in %#v", expectedResult, c.Check.Status, c.Check) + srvID := structs.NewServiceID(srv.ID, structs.WildcardEnterpriseMeta()) + if err := agent.Agent.State.RemoveService(srvID); err != nil { + fmt.Println("[DEBUG] Fail to remove service", srvID, ", err:=", err) + } + fmt.Println("[DEBUG] Service Removed", srvID, ", err:=", err) + break + } + } + assert.True(t, found) + } +} + +// TestAgent_CheckAliasRPC test the Alias Check to be properly sync remotely +// and locally. +// It contains a few hacks such as unlockIndexOnNode because watch performed +// in CheckAlias.runQuery() waits for 1 min, so Shutdoww the agent might take time +// So, we ensure the agent will update regularilly the index +func TestAgent_CheckAliasRPC(t *testing.T) { + t.Helper() + + a := NewTestAgent(t, ` + node_name = "node1" + `) + + srv := &structs.NodeService{ + ID: "svcid1", + Service: "svcname1", + Tags: []string{"tag1"}, + Port: 8100, + } + unlockIndexOnNode := func() { + // We ensure to not block and update Agent's index + srv.Tags = []string{fmt.Sprintf("tag-%s", time.Now())} + assert.NoError(t, a.waitForUp()) + err := a.AddService(srv, []*structs.CheckType{}, false, "", ConfigSourceLocal) + assert.NoError(t, err) + } + shutdownAgent := func() { + // This is to be sure Alias Checks on remote won't be blocked during 1 min + unlockIndexOnNode() + fmt.Println("[DEBUG] STARTING shutdown for TestAgent_CheckAliasRPC", time.Now()) + go a.Shutdown() + unlockIndexOnNode() + fmt.Println("[DEBUG] DONE shutdown for TestAgent_CheckAliasRPC", time.Now()) + } + defer shutdownAgent() + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + + assert.NoError(t, a.waitForUp()) + err := a.AddService(srv, []*structs.CheckType{}, false, "", ConfigSourceLocal) + assert.NoError(t, err) + + retry.Run(t, func(r *retry.R) { + t.Helper() + var args structs.NodeSpecificRequest + args.Datacenter = "dc1" + args.Node = "node1" + args.AllowStale = true + var out structs.IndexedNodeServices + err := a.RPC("Catalog.NodeServices", &args, &out) + assert.NoError(r, err) + foundService := false + lookup := structs.NewServiceID("svcid1", structs.WildcardEnterpriseMeta()) + for _, srv := range out.NodeServices.Services { + sid := srv.CompoundServiceID() + if lookup.Matches(&sid) { + foundService = true + } + } + assert.True(r, foundService, "could not find svcid1 in %#v", out.NodeServices.Services) + }) + + checks := make([](func(*retry.R)), 0) + + checks = append(checks, test_createAlias(t, a, &structs.CheckType{ + Name: "Check_Local_Ok", + AliasService: "svcid1", + }, api.HealthPassing)) + + checks = append(checks, test_createAlias(t, a, &structs.CheckType{ + Name: "Check_Local_Fail", + AliasService: "svcidNoExistingID", + }, api.HealthCritical)) + + checks = append(checks, test_createAlias(t, a, &structs.CheckType{ + Name: "Check_Remote_Host_Ok", + AliasNode: "node1", + AliasService: "svcid1", + }, api.HealthPassing)) + + checks = append(checks, test_createAlias(t, a, &structs.CheckType{ + Name: "Check_Remote_Host_Non_Existing_Service", + AliasNode: "node1", + AliasService: "svcidNoExistingID", + }, api.HealthCritical)) + + // We wait for max 5s for all checks to be in sync + { + for i := 0; i < 50; i++ { + unlockIndexOnNode() + allNonWarning := true + for _, chk := range a.State.Checks(structs.WildcardEnterpriseMeta()) { + if chk.Status == api.HealthWarning { + allNonWarning = false + } + } + if allNonWarning { + break + } else { + time.Sleep(100 * time.Millisecond) + } + } + } + + for _, toRun := range checks { + unlockIndexOnNode() + retry.Run(t, toRun) + } +} + func TestAgent_AddServiceNoExec(t *testing.T) { t.Run("normal", func(t *testing.T) { t.Parallel() @@ -652,7 +679,7 @@ func testAgent_AddServiceNoExec(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "node1" `+extraHCL) defer a.Shutdown() @@ -694,7 +721,7 @@ func testAgent_AddServiceNoRemoteExec(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "node1" enable_local_script_checks = true `+extraHCL) @@ -718,10 +745,110 @@ } } +func TestCacheRateLimit(test *testing.T) { + test.Parallel() + tests := []struct { + // count := number of updates performed (1 every 10ms) + count int + // rateLimit rate limiting of cache + rateLimit float64 + // Minimum number of updates to see from a cache perspective + // We add a value with tolerance to work even on a loaded CI + minUpdates int + }{ + // 250 => we have a test running for at least 2.5s + {250, 0.5, 1}, + {250, 1, 1}, + {300, 2, 2}, + } + for _, currentTest := range tests { + test.Run(fmt.Sprintf("rate_limit_at_%v", currentTest.rateLimit), func(t *testing.T) { + tt := currentTest + t.Parallel() + a := NewTestAgent(t, "cache = { entry_fetch_rate = 1, entry_fetch_max_burst = 100 }") + defer a.Shutdown() + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + + cfg := a.config + require.Equal(t, rate.Limit(1), a.config.Cache.EntryFetchRate) + require.Equal(t, 100, a.config.Cache.EntryFetchMaxBurst) + cfg.Cache.EntryFetchRate = rate.Limit(tt.rateLimit) + cfg.Cache.EntryFetchMaxBurst = 1 + a.reloadConfigInternal(cfg) + require.Equal(t, rate.Limit(tt.rateLimit), a.config.Cache.EntryFetchRate) + require.Equal(t, 1, a.config.Cache.EntryFetchMaxBurst) + var wg sync.WaitGroup + stillProcessing := true + + injectService := func(i int) { + srv := &structs.NodeService{ + Service: "redis", + ID: "redis", + Port: 1024 + i, + Address: fmt.Sprintf("10.0.1.%d", i%255), + } + + err := a.AddService(srv, []*structs.CheckType{}, false, "", ConfigSourceRemote) + require.Nil(t, err) + } + + runUpdates := func() { + wg.Add(tt.count) + for i := 0; i < tt.count; i++ { + time.Sleep(10 * time.Millisecond) + injectService(i) + wg.Done() + } + stillProcessing = false + } + + getIndex := func(t *testing.T, oldIndex int) int { + req, err := http.NewRequest("GET", fmt.Sprintf("/v1/health/service/redis?cached&wait=5s&index=%d", oldIndex), nil) + require.NoError(t, err) + + resp := httptest.NewRecorder() + a.srv.handler(false).ServeHTTP(resp, req) + // Key doesn't actually exist so we should get 404 + if got, want := resp.Code, http.StatusOK; got != want { + t.Fatalf("bad response code got %d want %d", got, want) + } + index, err := strconv.Atoi(resp.Header().Get("X-Consul-Index")) + require.NoError(t, err) + return index + } + + { + start := time.Now() + injectService(0) + // Get the first index + index := getIndex(t, 0) + require.Greater(t, index, 2) + go runUpdates() + numberOfUpdates := 0 + for stillProcessing { + oldIndex := index + index = getIndex(t, oldIndex) + require.GreaterOrEqual(t, index, oldIndex, "index must be increasing only") + numberOfUpdates++ + } + elapsed := time.Since(start) + qps := float64(time.Second) * float64(numberOfUpdates) / float64(elapsed) + summary := fmt.Sprintf("received %v updates in %v aka %f qps, target max was: %f qps", numberOfUpdates, elapsed, qps, tt.rateLimit) + + // We must never go beyond the limit, we give 10% margin to avoid having values like 1.05 instead of 1 due to precision of clock + require.LessOrEqual(t, qps, 1.1*tt.rateLimit, fmt.Sprintf("it should never get more requests than ratelimit, had: %s", summary)) + // We must have at least being notified a few times + require.GreaterOrEqual(t, numberOfUpdates, tt.minUpdates, fmt.Sprintf("It should have received a minimum of %d updates, had: %s", tt.minUpdates, summary)) + } + wg.Wait() + }) + } +} + func TestAddServiceIPv4TaggedDefault(t *testing.T) { t.Helper() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -750,7 +877,7 @@ func TestAddServiceIPv6TaggedDefault(t *testing.T) { t.Helper() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -779,7 +906,7 @@ func TestAddServiceIPv4TaggedSet(t *testing.T) { t.Helper() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -814,7 +941,7 @@ func TestAddServiceIPv6TaggedSet(t *testing.T) { t.Helper() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -860,7 +987,7 @@ func testAgent_RemoveService(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() // Remove a service that doesn't exist @@ -971,7 +1098,7 @@ func testAgent_RemoveServiceRemovesAllChecks(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "node1" `+extraHCL) defer a.Shutdown() @@ -1045,7 +1172,7 @@ func verifyIndexChurn(t *testing.T, tags []string) { t.Helper() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() weights := &structs.Weights{ @@ -1137,7 +1264,7 @@ func TestAgent_AddCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_script_checks = true `) defer a.Shutdown() @@ -1171,7 +1298,7 @@ func TestAgent_AddCheck_StartPassing(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_script_checks = true `) defer a.Shutdown() @@ -1205,7 +1332,7 @@ func TestAgent_AddCheck_MinInterval(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_script_checks = true `) defer a.Shutdown() @@ -1238,7 +1365,7 @@ func TestAgent_AddCheck_MissingService(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_script_checks = true `) defer a.Shutdown() @@ -1261,7 +1388,7 @@ func TestAgent_AddCheck_RestoreState(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Create some state and persist it @@ -1301,7 +1428,7 @@ func TestAgent_AddCheck_ExecDisable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() health := &structs.HealthCheck{ @@ -1334,7 +1461,7 @@ func TestAgent_AddCheck_ExecRemoteDisable(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_local_script_checks = true `) defer a.Shutdown() @@ -1361,7 +1488,7 @@ func TestAgent_AddCheck_GRPC(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() health := &structs.HealthCheck{ @@ -1419,15 +1546,12 @@ a.logger.Info("testharness: " + fmt.Sprintf(format, args...)) } - dataDir := testutil.TempDir(t, "agent") // we manage the data dir cfg := ` server = false bootstrap = false enable_central_service_config = false - data_dir = "` + dataDir + `" ` - a := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) - defer os.RemoveAll(dataDir) + a := StartTestAgent(t, TestAgent{HCL: cfg}) defer a.Shutdown() testCtx, testCancel := context.WithCancel(context.Background()) @@ -1510,7 +1634,7 @@ t.Helper() // Reload and retain former NodeID and data directory. - a2 := NewTestAgentWithFields(t, true, TestAgent{HCL: futureHCL, DataDir: dataDir}) + a2 := StartTestAgent(t, TestAgent{HCL: futureHCL, DataDir: a.DataDir}) defer a2.Shutdown() a = nil @@ -1569,7 +1693,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() health := &structs.HealthCheck{ @@ -1601,7 +1725,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() health := &structs.HealthCheck{ @@ -1629,7 +1753,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_token = "hello" `) defer a.Shutdown() @@ -1659,7 +1783,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_token = "hello" `) defer a.Shutdown() @@ -1687,7 +1811,7 @@ func TestAgent_RemoveCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` enable_script_checks = true `) defer a.Shutdown() @@ -1738,7 +1862,7 @@ server := httptest.NewTLSServer(handler) defer server.Close() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() health := &structs.HealthCheck{ @@ -1774,8 +1898,7 @@ t.Parallel() run := func(t *testing.T, ca string) { - a := NewTestAgentWithFields(t, true, TestAgent{ - Name: t.Name(), + a := StartTestAgent(t, TestAgent{ UseTLS: true, HCL: ` enable_agent_tls_for_checks = true @@ -1836,7 +1959,7 @@ func TestAgent_updateTTLCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() checkBufSize := 100 health := &structs.HealthCheck{ @@ -1896,15 +2019,11 @@ func testAgent_PersistService(t *testing.T, extraHCL string) { t.Helper() - dataDir := testutil.TempDir(t, "agent") // we manage the data dir - defer os.RemoveAll(dataDir) - cfg := ` server = false bootstrap = false - data_dir = "` + dataDir + `" ` + extraHCL - a := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a := StartTestAgent(t, TestAgent{HCL: cfg}) defer a.Shutdown() svc := &structs.NodeService{ @@ -1970,7 +2089,7 @@ a.Shutdown() // Should load it back during later start - a2 := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a2 := StartTestAgent(t, TestAgent{HCL: cfg, DataDir: a.DataDir}) defer a2.Shutdown() restored := a2.State.ServiceState(structs.NewServiceID(svc.ID, nil)) @@ -2000,7 +2119,7 @@ t.Helper() // Tests backwards compatibility of persisted services from pre-0.5.1 - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() svc := &structs.NodeService{ @@ -2053,7 +2172,7 @@ func testAgent_PurgeService(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() svc := &structs.NodeService{ @@ -2108,15 +2227,11 @@ func testAgent_PurgeServiceOnDuplicate(t *testing.T, extraHCL string) { t.Helper() - dataDir := testutil.TempDir(t, "agent") // we manage the data dir - defer os.RemoveAll(dataDir) - cfg := ` - data_dir = "` + dataDir + `" server = false bootstrap = false ` + extraHCL - a := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a := StartTestAgent(t, TestAgent{HCL: cfg}) defer a.Shutdown() svc1 := &structs.NodeService{ @@ -2132,14 +2247,14 @@ // Try bringing the agent back up with the service already // existing in the config - a2 := NewTestAgentWithFields(t, true, TestAgent{Name: t.Name() + "-a2", HCL: cfg + ` + a2 := StartTestAgent(t, TestAgent{Name: "Agent2", HCL: cfg + ` service = { id = "redis" name = "redis" tags = ["bar"] port = 9000 } - `, DataDir: dataDir}) + `, DataDir: a.DataDir}) defer a2.Shutdown() sid := svc1.CompoundServiceID() @@ -2153,15 +2268,12 @@ func TestAgent_PersistCheck(t *testing.T) { t.Parallel() - dataDir := testutil.TempDir(t, "agent") // we manage the data dir cfg := ` - data_dir = "` + dataDir + `" server = false bootstrap = false enable_script_checks = true ` - a := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) - defer os.RemoveAll(dataDir) + a := StartTestAgent(t, TestAgent{HCL: cfg}) defer a.Shutdown() check := &structs.HealthCheck{ @@ -2217,7 +2329,7 @@ a.Shutdown() // Should load it back during later start - a2 := NewTestAgentWithFields(t, true, TestAgent{Name: t.Name() + "-a2", HCL: cfg, DataDir: dataDir}) + a2 := StartTestAgent(t, TestAgent{Name: "Agent2", HCL: cfg, DataDir: a.DataDir}) defer a2.Shutdown() result := requireCheckExists(t, a2, check.CheckID) @@ -2233,7 +2345,7 @@ func TestAgent_PurgeCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() check := &structs.HealthCheck{ @@ -2268,19 +2380,14 @@ func TestAgent_PurgeCheckOnDuplicate(t *testing.T) { t.Parallel() nodeID := NodeID() - dataDir := testutil.TempDir(t, "agent") - a := NewTestAgentWithFields(t, true, TestAgent{ - Name: t.Name(), - DataDir: dataDir, + a := StartTestAgent(t, TestAgent{ HCL: ` node_id = "` + nodeID + `" node_name = "Node ` + nodeID + `" - data_dir = "` + dataDir + `" server = false bootstrap = false enable_script_checks = true `}) - defer os.RemoveAll(dataDir) defer a.Shutdown() check1 := &structs.HealthCheck{ @@ -2298,13 +2405,12 @@ a.Shutdown() // Start again with the check registered in config - a2 := NewTestAgentWithFields(t, true, TestAgent{ - Name: t.Name() + "-a2", - DataDir: dataDir, + a2 := StartTestAgent(t, TestAgent{ + Name: "Agent2", + DataDir: a.DataDir, HCL: ` node_id = "` + nodeID + `" node_name = "Node ` + nodeID + `" - data_dir = "` + dataDir + `" server = false bootstrap = false enable_script_checks = true @@ -2319,7 +2425,7 @@ defer a2.Shutdown() cid := check1.CompoundCheckID() - file := filepath.Join(dataDir, checksDir, cid.StringHash()) + file := filepath.Join(a.DataDir, checksDir, cid.StringHash()) if _, err := os.Stat(file); err == nil { t.Fatalf("should have removed persisted check") } @@ -2335,9 +2441,78 @@ require.Equal(t, expected, result) } +func TestAgent_DeregisterPersistedSidecarAfterRestart(t *testing.T) { + t.Parallel() + nodeID := NodeID() + a := StartTestAgent(t, TestAgent{ + HCL: ` + node_id = "` + nodeID + `" + node_name = "Node ` + nodeID + `" + server = false + bootstrap = false + enable_central_service_config = false + `}) + defer a.Shutdown() + + srv := &structs.NodeService{ + ID: "svc", + Service: "svc", + Weights: &structs.Weights{ + Passing: 2, + Warning: 1, + }, + Tags: []string{"tag2"}, + Port: 8200, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + + Connect: structs.ServiceConnect{ + SidecarService: &structs.ServiceDefinition{}, + }, + } + + connectSrv, _, _, err := a.sidecarServiceFromNodeService(srv, "") + require.NoError(t, err) + + // First persist the check + err = a.AddService(srv, nil, true, "", ConfigSourceLocal) + require.NoError(t, err) + err = a.AddService(connectSrv, nil, true, "", ConfigSourceLocal) + require.NoError(t, err) + + // check both services were registered + require.NotNil(t, a.State.Service(srv.CompoundServiceID())) + require.NotNil(t, a.State.Service(connectSrv.CompoundServiceID())) + + a.Shutdown() + + // Start again with the check registered in config + a2 := StartTestAgent(t, TestAgent{ + Name: "Agent2", + DataDir: a.DataDir, + HCL: ` + node_id = "` + nodeID + `" + node_name = "Node ` + nodeID + `" + server = false + bootstrap = false + enable_central_service_config = false + `}) + defer a2.Shutdown() + + // check both services were restored + require.NotNil(t, a2.State.Service(srv.CompoundServiceID())) + require.NotNil(t, a2.State.Service(connectSrv.CompoundServiceID())) + + err = a2.RemoveService(srv.CompoundServiceID()) + require.NoError(t, err) + + // check both services were deregistered + require.Nil(t, a2.State.Service(srv.CompoundServiceID())) + require.Nil(t, a2.State.Service(connectSrv.CompoundServiceID())) +} + func TestAgent_loadChecks_token(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` check = { id = "rabbitmq" name = "rabbitmq" @@ -2353,7 +2528,7 @@ func TestAgent_unloadChecks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // First register a service @@ -2405,7 +2580,7 @@ func testAgent_loadServices_token(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` service = { id = "rabbitmq" name = "rabbitmq" @@ -2435,7 +2610,7 @@ func testAgent_loadServices_sidecar(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` service = { id = "rabbitmq" name = "rabbitmq" @@ -2476,7 +2651,7 @@ func testAgent_loadServices_sidecarSeparateToken(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` service = { id = "rabbitmq" name = "rabbitmq" @@ -2515,7 +2690,7 @@ func testAgent_loadServices_sidecarInheritMeta(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` service = { id = "rabbitmq" name = "rabbitmq" @@ -2559,7 +2734,7 @@ func testAgent_loadServices_sidecarOverrideMeta(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` service = { id = "rabbitmq" name = "rabbitmq" @@ -2607,7 +2782,7 @@ func testAgent_unloadServices(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() svc := &structs.NodeService{ @@ -2635,7 +2810,7 @@ func TestAgent_Service_MaintenanceMode(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() svc := &structs.NodeService{ @@ -2701,10 +2876,10 @@ func TestAgent_Service_Reap(t *testing.T) { // t.Parallel() // timing test. no parallel - a := NewTestAgent(t, t.Name(), ` + a := StartTestAgent(t, TestAgent{Overrides: ` check_reap_interval = "50ms" check_deregister_interval_min = "0s" - `) + `}) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -2756,10 +2931,10 @@ func TestAgent_Service_NoReap(t *testing.T) { // t.Parallel() // timing test. no parallel - a := NewTestAgent(t, t.Name(), ` + a := StartTestAgent(t, TestAgent{Overrides: ` check_reap_interval = "50ms" check_deregister_interval_min = "0s" - `) + `}) defer a.Shutdown() svc := &structs.NodeService{ @@ -2809,7 +2984,7 @@ func testAgent_AddService_restoresSnapshot(t *testing.T, extraHCL string) { t.Helper() - a := NewTestAgent(t, t.Name(), extraHCL) + a := NewTestAgent(t, extraHCL) defer a.Shutdown() // First register a service @@ -2841,7 +3016,7 @@ func TestAgent_AddCheck_restoresSnapshot(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // First register a service @@ -2881,7 +3056,7 @@ func TestAgent_NodeMaintenanceMode(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Enter maintenance mode for the node @@ -2918,7 +3093,7 @@ func TestAgent_checkStateSnapshot(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // First register a service @@ -2969,7 +3144,7 @@ func TestAgent_loadChecks_checkFails(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Persist a health check with an invalid service ID @@ -3004,7 +3179,7 @@ func TestAgent_persistCheckState(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() cid := structs.NewCheckID("check1", nil) @@ -3052,7 +3227,7 @@ func TestAgent_loadCheckState(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Create a check whose state will expire immediately @@ -3113,7 +3288,7 @@ func TestAgent_purgeCheckState(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() cid := structs.NewCheckID("check1", nil) @@ -3147,7 +3322,7 @@ func TestAgent_GetCoordinate(t *testing.T) { t.Parallel() check := func(server bool) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` server = true `) defer a.Shutdown() @@ -3167,7 +3342,7 @@ func TestAgent_reloadWatches(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Normal watch with http addr set, should succeed @@ -3225,8 +3400,8 @@ func TestAgent_reloadWatchesHTTPS(t *testing.T) { t.Parallel() - a := TestAgent{Name: t.Name(), UseTLS: true} - if err := a.Start(); err != nil { + a := TestAgent{UseTLS: true} + if err := a.Start(t); err != nil { t.Fatal(err) } defer a.Shutdown() @@ -3247,7 +3422,7 @@ func TestAgent_loadTokens(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl = { enabled = true tokens = { @@ -3402,6 +3577,21 @@ }) } +func TestAgent_SecurityChecks(t *testing.T) { + t.Parallel() + hcl := ` + enable_script_checks = true + ` + a := &TestAgent{Name: t.Name(), HCL: hcl} + defer a.Shutdown() + + data := make([]byte, 0, 8192) + bytesBuffer := bytes.NewBuffer(data) + a.LogOutput = bytesBuffer + assert.NoError(t, a.Start(t)) + assert.Contains(t, bytesBuffer.String(), "using enable-script-checks without ACLs and without allow_write_http_from is DANGEROUS") +} + func TestAgent_ReloadConfigOutgoingRPCConfig(t *testing.T) { t.Parallel() dataDir := testutil.TempDir(t, "agent") // we manage the data dir @@ -3414,7 +3604,7 @@ key_file = "../test/key/ourdomain.key" verify_server_hostname = false ` - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() tlsConf := a.tlsConfigurator.OutgoingRPCConfig() require.True(t, tlsConf.InsecureSkipVerify) @@ -3429,8 +3619,8 @@ key_file = "../test/key/ourdomain.key" verify_server_hostname = true ` - c := TestConfig(testutil.Logger(t), config.Source{Name: t.Name(), Format: "hcl", Data: hcl}) - require.NoError(t, a.ReloadConfig(c)) + c := TestConfig(testutil.Logger(t), config.FileSource{Name: t.Name(), Format: "hcl", Data: hcl}) + require.NoError(t, a.reloadConfigInternal(c)) tlsConf = a.tlsConfigurator.OutgoingRPCConfig() require.False(t, tlsConf.InsecureSkipVerify) require.Len(t, tlsConf.RootCAs.Subjects(), 2) @@ -3438,48 +3628,41 @@ } func TestAgent_ReloadConfigAndKeepChecksStatus(t *testing.T) { - t.Parallel() + t.Run("normal", func(t *testing.T) { + t.Parallel() + testAgent_ReloadConfigAndKeepChecksStatus(t, "") + }) + t.Run("service manager", func(t *testing.T) { + t.Parallel() + testAgent_ReloadConfigAndKeepChecksStatus(t, "enable_central_service_config = true") + }) +} + +func testAgent_ReloadConfigAndKeepChecksStatus(t *testing.T, extraHCL string) { dataDir := testutil.TempDir(t, "agent") // we manage the data dir defer os.RemoveAll(dataDir) - waitDurationSeconds := 1 hcl := `data_dir = "` + dataDir + `" enable_local_script_checks=true services=[{ name="webserver1", - check{name="check1", - args=["true"], - interval="` + strconv.Itoa(waitDurationSeconds) + `s"}} - ]` - a := NewTestAgent(t, t.Name(), hcl) + check{id="check1", ttl="30s"} + }] ` + extraHCL + a := NewTestAgent(t, hcl) defer a.Shutdown() - // Initially, state is critical during waitDurationSeconds seconds - retry.Run(t, func(r *retry.R) { - gotChecks := a.State.Checks(nil) - require.Equal(r, 1, len(gotChecks), "Should have a check registered, but had %#v", gotChecks) - for id, check := range gotChecks { - require.Equal(r, "critical", check.Status, "check %q is wrong", id) - } - }) - c := TestConfig(testutil.Logger(t), config.Source{Name: t.Name(), Format: "hcl", Data: hcl}) - a.ReloadConfig(c) - time.Sleep(time.Duration(waitDurationSeconds) * time.Second) - // It should now be passing - retry.Run(t, func(r *retry.R) { - gotChecks := a.State.Checks(nil) - for id, check := range gotChecks { - require.Equal(r, "passing", check.Status, "check %q is wrong", id) - } - }) + require.NoError(t, a.updateTTLCheck(structs.NewCheckID("check1", nil), api.HealthPassing, "testing agent reload")) - require.NoError(t, a.ReloadConfig(c)) - // After reload, should be passing directly (no critical state) - for id, check := range a.State.Checks(nil) { + // Make sure check is passing before we reload. + gotChecks := a.State.Checks(nil) + require.Equal(t, 1, len(gotChecks), "Should have a check registered, but had %#v", gotChecks) + for id, check := range gotChecks { require.Equal(t, "passing", check.Status, "check %q is wrong", id) } - // Ensure to take reload into account event with async stuff - time.Sleep(time.Duration(100) * time.Millisecond) - // Of course, after a sleep, should be Ok too + + c := TestConfig(testutil.Logger(t), config.FileSource{Name: t.Name(), Format: "hcl", Data: hcl}) + require.NoError(t, a.reloadConfigInternal(c)) + + // After reload, should be passing directly (no critical state) for id, check := range a.State.Checks(nil) { require.Equal(t, "passing", check.Status, "check %q is wrong", id) } @@ -3497,7 +3680,7 @@ key_file = "../test/key/ourdomain.key" verify_server_hostname = false ` - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() tlsConf := a.tlsConfigurator.IncomingRPCConfig() require.NotNil(t, tlsConf.GetConfigForClient) @@ -3516,8 +3699,8 @@ key_file = "../test/key/ourdomain.key" verify_server_hostname = true ` - c := TestConfig(testutil.Logger(t), config.Source{Name: t.Name(), Format: "hcl", Data: hcl}) - require.NoError(t, a.ReloadConfig(c)) + c := TestConfig(testutil.Logger(t), config.FileSource{Name: t.Name(), Format: "hcl", Data: hcl}) + require.NoError(t, a.reloadConfigInternal(c)) tlsConf, err = tlsConf.GetConfigForClient(nil) require.NoError(t, err) require.False(t, tlsConf.InsecureSkipVerify) @@ -3537,7 +3720,7 @@ key_file = "../test/key/ourdomain.key" verify_server_hostname = false ` - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() tlsConf := a.tlsConfigurator.IncomingRPCConfig() @@ -3545,8 +3728,8 @@ data_dir = "` + dataDir + `" verify_incoming = true ` - c := TestConfig(testutil.Logger(t), config.Source{Name: t.Name(), Format: "hcl", Data: hcl}) - require.Error(t, a.ReloadConfig(c)) + c := TestConfig(testutil.Logger(t), config.FileSource{Name: t.Name(), Format: "hcl", Data: hcl}) + require.Error(t, a.reloadConfigInternal(c)) tlsConf, err := tlsConf.GetConfigForClient(nil) require.NoError(t, err) require.Equal(t, tls.NoClientCert, tlsConf.ClientAuth) @@ -3566,7 +3749,7 @@ key_file = "../test/key/ourdomain.key" auto_encrypt { allow_tls = true } ` - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() require.True(t, a.consulConfig().AutoEncryptAllowTLS) } @@ -3576,7 +3759,7 @@ hcl := ` raft_trailing_logs = 812345 ` - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() require.Equal(t, uint64(812345), a.consulConfig().RaftConfig.TrailingLogs) } @@ -3820,7 +4003,7 @@ func TestAgent_RerouteExistingHTTPChecks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -3949,7 +4132,7 @@ func TestAgent_RerouteNewHTTPChecks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -4068,11 +4251,11 @@ // index for the next query from 0 to 1 for all queries, when it should // have not done so for queries that errored. - a1 := NewTestAgent(t, t.Name()+"-a1", "") + a1 := StartTestAgent(t, TestAgent{Name: "Agent1"}) defer a1.Shutdown() testrpc.WaitForLeader(t, a1.RPC, "dc1") - a2 := NewTestAgent(t, t.Name()+"-a2", ` + a2 := StartTestAgent(t, TestAgent{Name: "Agent2", HCL: ` server = false bootstrap = false services { @@ -4097,7 +4280,7 @@ sidecar_service {} } } - `) + `}) defer a2.Shutdown() // Starting a client agent disconnected from a server with services. @@ -4150,3 +4333,541 @@ } } } + +// This is a mirror of a similar test in agent/consul/server_test.go +func TestAgent_JoinWAN_viaMeshGateway(t *testing.T) { + t.Parallel() + + gwPort := freeport.MustTake(1) + defer freeport.Return(gwPort) + gwAddr := ipaddr.FormatAddressPort("127.0.0.1", gwPort[0]) + + // Due to some ordering, we'll have to manually configure these ports in + // advance. + secondaryRPCPorts := freeport.MustTake(2) + defer freeport.Return(secondaryRPCPorts) + + a1 := StartTestAgent(t, TestAgent{Name: "bob", HCL: ` + domain = "consul" + node_name = "bob" + datacenter = "dc1" + primary_datacenter = "dc1" + # tls + ca_file = "../test/hostname/CertAuth.crt" + cert_file = "../test/hostname/Bob.crt" + key_file = "../test/hostname/Bob.key" + verify_incoming = true + verify_outgoing = true + verify_server_hostname = true + # wanfed + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}) + defer a1.Shutdown() + testrpc.WaitForTestAgent(t, a1.RPC, "dc1") + + // We'll use the same gateway for all datacenters since it doesn't care. + var ( + rpcAddr1 = ipaddr.FormatAddressPort("127.0.0.1", a1.Config.ServerPort) + rpcAddr2 = ipaddr.FormatAddressPort("127.0.0.1", secondaryRPCPorts[0]) + rpcAddr3 = ipaddr.FormatAddressPort("127.0.0.1", secondaryRPCPorts[1]) + ) + var p tcpproxy.Proxy + p.AddSNIRoute(gwAddr, "bob.server.dc1.consul", tcpproxy.To(rpcAddr1)) + p.AddSNIRoute(gwAddr, "server.dc1.consul", tcpproxy.To(rpcAddr1)) + p.AddSNIRoute(gwAddr, "betty.server.dc2.consul", tcpproxy.To(rpcAddr2)) + p.AddSNIRoute(gwAddr, "server.dc2.consul", tcpproxy.To(rpcAddr2)) + p.AddSNIRoute(gwAddr, "bonnie.server.dc3.consul", tcpproxy.To(rpcAddr3)) + p.AddSNIRoute(gwAddr, "server.dc3.consul", tcpproxy.To(rpcAddr3)) + p.AddStopACMESearch(gwAddr) + require.NoError(t, p.Start()) + defer func() { + p.Close() + p.Wait() + }() + + t.Logf("routing %s => %s", "{bob.,}server.dc1.consul", rpcAddr1) + t.Logf("routing %s => %s", "{betty.,}server.dc2.consul", rpcAddr2) + t.Logf("routing %s => %s", "{bonnie.,}server.dc3.consul", rpcAddr3) + + // Register this into the agent in dc1. + { + args := &structs.ServiceDefinition{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Name: "mesh-gateway", + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + Port: gwPort[0], + } + req, err := http.NewRequest("PUT", "/v1/agent/service/register", jsonReader(args)) + require.NoError(t, err) + + obj, err := a1.srv.AgentRegisterService(nil, req) + require.NoError(t, err) + require.Nil(t, obj) + } + + waitForFederationState := func(t *testing.T, a *TestAgent, dc string) { + retry.Run(t, func(r *retry.R) { + req, err := http.NewRequest("GET", "/v1/internal/federation-state/"+dc, nil) + require.NoError(r, err) + + resp := httptest.NewRecorder() + obj, err := a.srv.FederationStateGet(resp, req) + require.NoError(r, err) + require.NotNil(r, obj) + + out, ok := obj.(structs.FederationStateResponse) + require.True(r, ok) + require.NotNil(r, out.State) + require.Len(r, out.State.MeshGateways, 1) + }) + } + + // Wait until at least catalog AE and federation state AE fire. + waitForFederationState(t, a1, "dc1") + retry.Run(t, func(r *retry.R) { + require.NotEmpty(r, a1.PickRandomMeshGatewaySuitableForDialing("dc1")) + }) + + a2 := StartTestAgent(t, TestAgent{Name: "betty", HCL: ` + domain = "consul" + node_name = "betty" + datacenter = "dc2" + primary_datacenter = "dc1" + # tls + ca_file = "../test/hostname/CertAuth.crt" + cert_file = "../test/hostname/Betty.crt" + key_file = "../test/hostname/Betty.key" + verify_incoming = true + verify_outgoing = true + verify_server_hostname = true + ports { + server = ` + strconv.Itoa(secondaryRPCPorts[0]) + ` + } + # wanfed + primary_gateways = ["` + gwAddr + `"] + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}) + defer a2.Shutdown() + testrpc.WaitForTestAgent(t, a2.RPC, "dc2") + + a3 := StartTestAgent(t, TestAgent{Name: "bonnie", HCL: ` + domain = "consul" + node_name = "bonnie" + datacenter = "dc3" + primary_datacenter = "dc1" + # tls + ca_file = "../test/hostname/CertAuth.crt" + cert_file = "../test/hostname/Bonnie.crt" + key_file = "../test/hostname/Bonnie.key" + verify_incoming = true + verify_outgoing = true + verify_server_hostname = true + ports { + server = ` + strconv.Itoa(secondaryRPCPorts[1]) + ` + } + # wanfed + primary_gateways = ["` + gwAddr + `"] + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}) + defer a3.Shutdown() + testrpc.WaitForTestAgent(t, a3.RPC, "dc3") + + // The primary_gateways config setting should cause automatic mesh join. + // Assert that the secondaries have joined the primary. + findPrimary := func(r *retry.R, a *TestAgent) *serf.Member { + var primary *serf.Member + for _, m := range a.WANMembers() { + if m.Tags["dc"] == "dc1" { + require.Nil(r, primary, "already found one node in dc1") + primary = &m + } + } + require.NotNil(r, primary) + return primary + } + retry.Run(t, func(r *retry.R) { + p2, p3 := findPrimary(r, a2), findPrimary(r, a3) + require.Equal(r, "bob.dc1", p2.Name) + require.Equal(r, "bob.dc1", p3.Name) + }) + + testrpc.WaitForLeader(t, a2.RPC, "dc2") + testrpc.WaitForLeader(t, a3.RPC, "dc3") + + // Now we can register this into the catalog in dc2 and dc3. + { + args := &structs.ServiceDefinition{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Name: "mesh-gateway", + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + Port: gwPort[0], + } + req, err := http.NewRequest("PUT", "/v1/agent/service/register", jsonReader(args)) + require.NoError(t, err) + + obj, err := a2.srv.AgentRegisterService(nil, req) + require.NoError(t, err) + require.Nil(t, obj) + } + { + args := &structs.ServiceDefinition{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Name: "mesh-gateway", + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + Port: gwPort[0], + } + req, err := http.NewRequest("PUT", "/v1/agent/service/register", jsonReader(args)) + require.NoError(t, err) + + obj, err := a3.srv.AgentRegisterService(nil, req) + require.NoError(t, err) + require.Nil(t, obj) + } + + // Wait until federation state replication functions + waitForFederationState(t, a1, "dc1") + waitForFederationState(t, a1, "dc2") + waitForFederationState(t, a1, "dc3") + + waitForFederationState(t, a2, "dc1") + waitForFederationState(t, a2, "dc2") + waitForFederationState(t, a2, "dc3") + + waitForFederationState(t, a3, "dc1") + waitForFederationState(t, a3, "dc2") + waitForFederationState(t, a3, "dc3") + + retry.Run(t, func(r *retry.R) { + require.NotEmpty(r, a1.PickRandomMeshGatewaySuitableForDialing("dc1")) + require.NotEmpty(r, a1.PickRandomMeshGatewaySuitableForDialing("dc2")) + require.NotEmpty(r, a1.PickRandomMeshGatewaySuitableForDialing("dc3")) + + require.NotEmpty(r, a2.PickRandomMeshGatewaySuitableForDialing("dc1")) + require.NotEmpty(r, a2.PickRandomMeshGatewaySuitableForDialing("dc2")) + require.NotEmpty(r, a2.PickRandomMeshGatewaySuitableForDialing("dc3")) + + require.NotEmpty(r, a3.PickRandomMeshGatewaySuitableForDialing("dc1")) + require.NotEmpty(r, a3.PickRandomMeshGatewaySuitableForDialing("dc2")) + require.NotEmpty(r, a3.PickRandomMeshGatewaySuitableForDialing("dc3")) + }) + + retry.Run(t, func(r *retry.R) { + if got, want := len(a1.WANMembers()), 3; got != want { + r.Fatalf("got %d WAN members want at least %d", got, want) + } + if got, want := len(a2.WANMembers()), 3; got != want { + r.Fatalf("got %d WAN members want at least %d", got, want) + } + if got, want := len(a3.WANMembers()), 3; got != want { + r.Fatalf("got %d WAN members want at least %d", got, want) + } + }) + + // Ensure we can do some trivial RPC in all directions. + agents := map[string]*TestAgent{"dc1": a1, "dc2": a2, "dc3": a3} + names := map[string]string{"dc1": "bob", "dc2": "betty", "dc3": "bonnie"} + for _, srcDC := range []string{"dc1", "dc2", "dc3"} { + a := agents[srcDC] + for _, dstDC := range []string{"dc1", "dc2", "dc3"} { + if srcDC == dstDC { + continue + } + t.Run(srcDC+" to "+dstDC, func(t *testing.T) { + req, err := http.NewRequest("GET", "/v1/catalog/nodes?dc="+dstDC, nil) + require.NoError(t, err) + + resp := httptest.NewRecorder() + obj, err := a.srv.CatalogNodes(resp, req) + require.NoError(t, err) + require.NotNil(t, obj) + + nodes, ok := obj.(structs.Nodes) + require.True(t, ok) + require.Len(t, nodes, 1) + node := nodes[0] + require.Equal(t, dstDC, node.Datacenter) + require.Equal(t, names[dstDC], node.Node) + }) + } + } +} + +func TestAutoConfig_Integration(t *testing.T) { + // eventually this test should really live with integration tests + // the goal here is to have one test server and another test client + // spin up both agents and allow the server to authorize the auto config + // request and then see the client joined. Finally we force a CA roots + // update and wait to see that the agents TLS certificate gets updated. + + cfgDir := testutil.TempDir(t, "auto-config") + + // write some test TLS certificates out to the cfg dir + cert, key, cacert, err := testTLSCertificates("server.dc1.consul") + require.NoError(t, err) + + certFile := filepath.Join(cfgDir, "cert.pem") + caFile := filepath.Join(cfgDir, "cacert.pem") + keyFile := filepath.Join(cfgDir, "key.pem") + + require.NoError(t, ioutil.WriteFile(certFile, []byte(cert), 0600)) + require.NoError(t, ioutil.WriteFile(caFile, []byte(cacert), 0600)) + require.NoError(t, ioutil.WriteFile(keyFile, []byte(key), 0600)) + + // generate a gossip key + gossipKey := make([]byte, 32) + n, err := rand.Read(gossipKey) + require.NoError(t, err) + require.Equal(t, 32, n) + gossipKeyEncoded := base64.StdEncoding.EncodeToString(gossipKey) + + // generate the JWT signing keys + pub, priv, err := oidcauthtest.GenerateKey() + require.NoError(t, err) + + hclConfig := TestACLConfigWithParams(nil) + ` + encrypt = "` + gossipKeyEncoded + `" + encrypt_verify_incoming = true + encrypt_verify_outgoing = true + verify_incoming = true + verify_outgoing = true + verify_server_hostname = true + ca_file = "` + caFile + `" + cert_file = "` + certFile + `" + key_file = "` + keyFile + `" + connect { enabled = true } + auto_config { + authorization { + enabled = true + static { + claim_mappings = { + consul_node_name = "node" + } + claim_assertions = [ + "value.node == \"${node}\"" + ] + bound_issuer = "consul" + bound_audiences = [ + "consul" + ] + jwt_validation_pub_keys = ["` + strings.ReplaceAll(pub, "\n", "\\n") + `"] + } + } + } + ` + + srv := StartTestAgent(t, TestAgent{Name: "TestAgent-Server", HCL: hclConfig}) + defer srv.Shutdown() + + testrpc.WaitForTestAgent(t, srv.RPC, "dc1", testrpc.WithToken(TestDefaultMasterToken)) + + // sign a JWT token + now := time.Now() + token, err := oidcauthtest.SignJWT(priv, jwt.Claims{ + Subject: "consul", + Issuer: "consul", + Audience: jwt.Audience{"consul"}, + NotBefore: jwt.NewNumericDate(now.Add(-1 * time.Second)), + Expiry: jwt.NewNumericDate(now.Add(5 * time.Minute)), + }, map[string]interface{}{ + "consul_node_name": "test-client", + }) + require.NoError(t, err) + + client := StartTestAgent(t, TestAgent{Name: "test-client", + Overrides: ` + connect { + test_ca_leaf_root_change_spread = "1ns" + } + `, + HCL: ` + bootstrap = false + server = false + ca_file = "` + caFile + `" + verify_outgoing = true + verify_server_hostname = true + node_name = "test-client" + ports { + server = ` + strconv.Itoa(srv.Config.RPCBindAddr.Port) + ` + } + auto_config { + enabled = true + intro_token = "` + token + `" + server_addresses = ["` + srv.Config.RPCBindAddr.String() + `"] + }`, + }) + + defer client.Shutdown() + + retry.Run(t, func(r *retry.R) { + require.NotNil(r, client.Agent.tlsConfigurator.Cert()) + }) + + // when this is successful we managed to get the gossip key and serf addresses to bind to + // and then connect. Additionally we would have to have certificates or else the + // verify_incoming config on the server would not let it work. + testrpc.WaitForTestAgent(t, client.RPC, "dc1", testrpc.WithToken(TestDefaultMasterToken)) + + // grab the existing cert + cert1 := client.Agent.tlsConfigurator.Cert() + require.NotNil(t, cert1) + + // force a roots rotation by updating the CA config + t.Logf("Forcing roots rotation on the server") + ca := connect.TestCA(t, nil) + req := &structs.CARequest{ + Datacenter: "dc1", + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + Config: &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "LeafCertTTL": "1h", + "PrivateKey": ca.SigningKey, + "RootCert": ca.RootCert, + "RotationPeriod": "6h", + "IntermediateCertTTL": "3h", + }, + }, + } + var reply interface{} + require.NoError(t, srv.RPC("ConnectCA.ConfigurationSet", &req, &reply)) + + // ensure that a new cert gets generated and pushed into the TLS configurator + retry.Run(t, func(r *retry.R) { + require.NotEqual(r, cert1, client.Agent.tlsConfigurator.Cert()) + + // check that the on disk certs match expectations + data, err := ioutil.ReadFile(filepath.Join(client.DataDir, "auto-config.json")) + require.NoError(r, err) + rdr := strings.NewReader(string(data)) + + var resp pbautoconf.AutoConfigResponse + pbUnmarshaler := &jsonpb.Unmarshaler{ + AllowUnknownFields: false, + } + require.NoError(r, pbUnmarshaler.Unmarshal(rdr, &resp), "data: %s", data) + + actual, err := tls.X509KeyPair([]byte(resp.Certificate.CertPEM), []byte(resp.Certificate.PrivateKeyPEM)) + require.NoError(r, err) + require.Equal(r, client.Agent.tlsConfigurator.Cert(), &actual) + }) + + // spot check that we now have an ACL token + require.NotEmpty(t, client.tokens.AgentToken()) +} + +func TestAgent_AutoEncrypt(t *testing.T) { + // eventually this test should really live with integration tests + // the goal here is to have one test server and another test client + // spin up both agents and allow the server to authorize the auto encrypt + // request and then see the client get a TLS certificate + cfgDir := testutil.TempDir(t, "auto-encrypt") + + // write some test TLS certificates out to the cfg dir + cert, key, cacert, err := testTLSCertificates("server.dc1.consul") + require.NoError(t, err) + + certFile := filepath.Join(cfgDir, "cert.pem") + caFile := filepath.Join(cfgDir, "cacert.pem") + keyFile := filepath.Join(cfgDir, "key.pem") + + require.NoError(t, ioutil.WriteFile(certFile, []byte(cert), 0600)) + require.NoError(t, ioutil.WriteFile(caFile, []byte(cacert), 0600)) + require.NoError(t, ioutil.WriteFile(keyFile, []byte(key), 0600)) + + hclConfig := TestACLConfigWithParams(nil) + ` + verify_incoming = true + verify_outgoing = true + verify_server_hostname = true + ca_file = "` + caFile + `" + cert_file = "` + certFile + `" + key_file = "` + keyFile + `" + connect { enabled = true } + auto_encrypt { allow_tls = true } + ` + + srv := StartTestAgent(t, TestAgent{Name: "test-server", HCL: hclConfig}) + defer srv.Shutdown() + + testrpc.WaitForTestAgent(t, srv.RPC, "dc1", testrpc.WithToken(TestDefaultMasterToken)) + + client := StartTestAgent(t, TestAgent{Name: "test-client", HCL: TestACLConfigWithParams(nil) + ` + bootstrap = false + server = false + ca_file = "` + caFile + `" + verify_outgoing = true + verify_server_hostname = true + node_name = "test-client" + auto_encrypt { + tls = true + } + ports { + server = ` + strconv.Itoa(srv.Config.RPCBindAddr.Port) + ` + } + retry_join = ["` + srv.Config.SerfBindAddrLAN.String() + `"]`, + UseTLS: true, + }) + + defer client.Shutdown() + + // when this is successful we managed to get a TLS certificate and are using it for + // encrypted RPC connections. + testrpc.WaitForTestAgent(t, client.RPC, "dc1", testrpc.WithToken(TestDefaultMasterToken)) + + // now we need to validate that our certificate has the correct CN + aeCert := client.tlsConfigurator.Cert() + require.NotNil(t, aeCert) + + id := connect.SpiffeIDAgent{ + Host: connect.TestClusterID + ".consul", + Datacenter: "dc1", + Agent: "test-client", + } + expectedCN := connect.AgentCN("test-client", connect.TestClusterID) + x509Cert, err := x509.ParseCertificate(aeCert.Certificate[0]) + require.NoError(t, err) + require.Equal(t, expectedCN, x509Cert.Subject.CommonName) + require.Len(t, x509Cert.URIs, 1) + require.Equal(t, id.URI(), x509Cert.URIs[0]) +} + +func TestSharedRPCRouter(t *testing.T) { + // this test runs both a server and client and ensures that the shared + // router is being used. It would be possible for the Client and Server + // types to create and use their own routers and for RPCs such as the + // ones used in WaitForTestAgent to succeed. However accessing the + // router stored on the agent ensures that Serf information from the + // Client/Server types are being set in the same shared rpc router. + + srv := NewTestAgent(t, "") + defer srv.Shutdown() + + testrpc.WaitForTestAgent(t, srv.RPC, "dc1") + + mgr, server := srv.Agent.router.FindLANRoute() + require.NotNil(t, mgr) + require.NotNil(t, server) + + client := NewTestAgent(t, ` + server = false + bootstrap = false + retry_join = ["`+srv.Config.SerfBindAddrLAN.String()+`"] + `) + + testrpc.WaitForTestAgent(t, client.RPC, "dc1") + + mgr, server = client.Agent.router.FindLANRoute() + require.NotNil(t, mgr) + require.NotNil(t, server) +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/auto_config.go consul-1.8.7+dfsg1/agent/auto-config/auto_config.go --- consul-1.7.4+dfsg1/agent/auto-config/auto_config.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/auto_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,404 @@ +package autoconf + +import ( + "context" + "fmt" + "io/ioutil" + "sync" + "time" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/logging" + "github.com/hashicorp/consul/proto/pbautoconf" + "github.com/hashicorp/go-hclog" +) + +// AutoConfig is all the state necessary for being able to parse a configuration +// as well as perform the necessary RPCs to perform Agent Auto Configuration. +type AutoConfig struct { + sync.Mutex + + acConfig Config + logger hclog.Logger + cache Cache + waiter *lib.RetryWaiter + config *config.RuntimeConfig + autoConfigResponse *pbautoconf.AutoConfigResponse + autoConfigSource config.Source + + running bool + done chan struct{} + // cancel is used to cancel the entire AutoConfig + // go routine. This is the main field protected + // by the mutex as it being non-nil indicates that + // the go routine has been started and is stoppable. + // note that it doesn't indcate that the go routine + // is currently running. + cancel context.CancelFunc + + // cancelWatches is used to cancel the existing + // cache watches regarding the agents certificate. This is + // mainly only necessary when the Agent token changes. + cancelWatches context.CancelFunc + + // cacheUpdates is the chan used to have the cache + // send us back events + cacheUpdates chan cache.UpdateEvent + + // tokenUpdates is the struct used to receive + // events from the token store when the Agent + // token is updated. + tokenUpdates token.Notifier +} + +// New creates a new AutoConfig object for providing automatic Consul configuration. +func New(config Config) (*AutoConfig, error) { + switch { + case config.Loader == nil: + return nil, fmt.Errorf("must provide a config loader") + case config.DirectRPC == nil: + return nil, fmt.Errorf("must provide a direct RPC delegate") + case config.Cache == nil: + return nil, fmt.Errorf("must provide a cache") + case config.TLSConfigurator == nil: + return nil, fmt.Errorf("must provide a TLS configurator") + case config.Tokens == nil: + return nil, fmt.Errorf("must provide a token store") + } + + if config.FallbackLeeway == 0 { + config.FallbackLeeway = 10 * time.Second + } + if config.FallbackRetry == 0 { + config.FallbackRetry = time.Minute + } + + logger := config.Logger + if logger == nil { + logger = hclog.NewNullLogger() + } else { + logger = logger.Named(logging.AutoConfig) + } + + if config.Waiter == nil { + config.Waiter = lib.NewRetryWaiter(1, 0, 10*time.Minute, lib.NewJitterRandomStagger(25)) + } + + return &AutoConfig{ + acConfig: config, + logger: logger, + }, nil +} + +// ReadConfig will parse the current configuration and inject any +// auto-config sources if present into the correct place in the parsing chain. +func (ac *AutoConfig) ReadConfig() (*config.RuntimeConfig, error) { + ac.Lock() + defer ac.Unlock() + cfg, warnings, err := ac.acConfig.Loader(ac.autoConfigSource) + if err != nil { + return cfg, err + } + + for _, w := range warnings { + ac.logger.Warn(w) + } + + ac.config = cfg + return cfg, nil +} + +// InitialConfiguration will perform a one-time RPC request to the configured servers +// to retrieve various cluster wide configurations. See the proto/pbautoconf/auto_config.proto +// file for a complete reference of what configurations can be applied in this manner. +// The returned configuration will be the new configuration with any auto-config settings +// already applied. If AutoConfig is not enabled this method will just parse any +// local configuration and return the built runtime configuration. +// +// The context passed in can be used to cancel the retrieval of the initial configuration +// like when receiving a signal during startup. +func (ac *AutoConfig) InitialConfiguration(ctx context.Context) (*config.RuntimeConfig, error) { + if ac.config == nil { + config, err := ac.ReadConfig() + if err != nil { + return nil, err + } + + ac.config = config + } + + switch { + case ac.config.AutoConfig.Enabled: + resp, err := ac.readPersistedAutoConfig() + if err != nil { + return nil, err + } + + if resp == nil { + ac.logger.Info("retrieving initial agent auto configuration remotely") + resp, err = ac.getInitialConfiguration(ctx) + if err != nil { + return nil, err + } + } + + ac.logger.Debug("updating auto-config settings") + if err = ac.recordInitialConfiguration(resp); err != nil { + return nil, err + } + + // re-read the configuration now that we have our initial auto-config + config, err := ac.ReadConfig() + if err != nil { + return nil, err + } + + ac.config = config + return ac.config, nil + case ac.config.AutoEncryptTLS: + certs, err := ac.autoEncryptInitialCerts(ctx) + if err != nil { + return nil, err + } + + if err := ac.setInitialTLSCertificates(certs); err != nil { + return nil, err + } + + ac.logger.Info("automatically upgraded to TLS") + return ac.config, nil + default: + return ac.config, nil + } +} + +// introToken is responsible for determining the correct intro token to use +// when making the initial AutoConfig.InitialConfiguration RPC request. +func (ac *AutoConfig) introToken() (string, error) { + conf := ac.config.AutoConfig + // without an intro token or intro token file we cannot do anything + if conf.IntroToken == "" && conf.IntroTokenFile == "" { + return "", fmt.Errorf("neither intro_token or intro_token_file settings are not configured") + } + + token := conf.IntroToken + if token == "" { + // load the intro token from the file + content, err := ioutil.ReadFile(conf.IntroTokenFile) + if err != nil { + return "", fmt.Errorf("Failed to read intro token from file: %w", err) + } + + token = string(content) + + if token == "" { + return "", fmt.Errorf("intro_token_file did not contain any token") + } + } + + return token, nil +} + +// recordInitialConfiguration is responsible for recording the AutoConfigResponse from +// the AutoConfig.InitialConfiguration RPC. It is an all-in-one function to do the following +// * update the Agent token in the token store +func (ac *AutoConfig) recordInitialConfiguration(resp *pbautoconf.AutoConfigResponse) error { + ac.autoConfigResponse = resp + + ac.autoConfigSource = config.LiteralSource{ + Name: autoConfigFileName, + Config: translateConfig(resp.Config), + } + + // we need to re-read the configuration to determine what the correct ACL + // token to push into the token store is. Any user provided token will override + // any AutoConfig generated token. + config, err := ac.ReadConfig() + if err != nil { + return fmt.Errorf("failed to fully resolve configuration: %w", err) + } + + // ignoring the return value which would indicate a change in the token + _ = ac.acConfig.Tokens.UpdateAgentToken(config.ACLAgentToken, token.TokenSourceConfig) + + // extra a structs.SignedResponse from the AutoConfigResponse for use in cache prepopulation + signed, err := extractSignedResponse(resp) + if err != nil { + return fmt.Errorf("failed to extract certificates from the auto-config response: %w", err) + } + + // prepopulate the cache + if err = ac.populateCertificateCache(signed); err != nil { + return fmt.Errorf("failed to populate the cache with certificate responses: %w", err) + } + + // update the TLS configurator with the latest certificates + if err := ac.updateTLSFromResponse(resp); err != nil { + return err + } + + return ac.persistAutoConfig(resp) +} + +// getInitialConfigurationOnce will perform full server to TCPAddr resolution and +// loop through each host trying to make the AutoConfig.InitialConfiguration RPC call. When +// successful the bool return will be true and the err value will indicate whether we +// successfully recorded the auto config settings (persisted to disk and stored internally +// on the AutoConfig object) +func (ac *AutoConfig) getInitialConfigurationOnce(ctx context.Context, csr string, key string) (*pbautoconf.AutoConfigResponse, error) { + token, err := ac.introToken() + if err != nil { + return nil, err + } + + request := pbautoconf.AutoConfigRequest{ + Datacenter: ac.config.Datacenter, + Node: ac.config.NodeName, + Segment: ac.config.SegmentName, + JWT: token, + CSR: csr, + } + + var resp pbautoconf.AutoConfigResponse + + servers, err := ac.autoConfigHosts() + if err != nil { + return nil, err + } + + for _, s := range servers { + // try each IP to see if we can successfully make the request + for _, addr := range ac.resolveHost(s) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + ac.logger.Debug("making AutoConfig.InitialConfiguration RPC", "addr", addr.String()) + if err = ac.acConfig.DirectRPC.RPC(ac.config.Datacenter, ac.config.NodeName, &addr, "AutoConfig.InitialConfiguration", &request, &resp); err != nil { + ac.logger.Error("AutoConfig.InitialConfiguration RPC failed", "addr", addr.String(), "error", err) + continue + } + ac.logger.Debug("AutoConfig.InitialConfiguration RPC was successful") + + // update the Certificate with the private key we generated locally + if resp.Certificate != nil { + resp.Certificate.PrivateKeyPEM = key + } + + return &resp, nil + } + } + + return nil, fmt.Errorf("No server successfully responded to the auto-config request") +} + +// getInitialConfiguration implements a loop to retry calls to getInitialConfigurationOnce. +// It uses the RetryWaiter on the AutoConfig object to control how often to attempt +// the initial configuration process. It is also canceallable by cancelling the provided context. +func (ac *AutoConfig) getInitialConfiguration(ctx context.Context) (*pbautoconf.AutoConfigResponse, error) { + // generate a CSR + csr, key, err := ac.generateCSR() + if err != nil { + return nil, err + } + + // this resets the failures so that we will perform immediate request + wait := ac.acConfig.Waiter.Success() + for { + select { + case <-wait: + if resp, err := ac.getInitialConfigurationOnce(ctx, csr, key); err == nil && resp != nil { + return resp, nil + } else if err != nil { + ac.logger.Error(err.Error()) + } else { + ac.logger.Error("No error returned when fetching configuration from the servers but no response was either") + } + + wait = ac.acConfig.Waiter.Failed() + case <-ctx.Done(): + ac.logger.Info("interrupted during initial auto configuration", "err", ctx.Err()) + return nil, ctx.Err() + } + } +} + +func (ac *AutoConfig) Start(ctx context.Context) error { + ac.Lock() + defer ac.Unlock() + + if !ac.config.AutoConfig.Enabled && !ac.config.AutoEncryptTLS { + return nil + } + + if ac.running || ac.cancel != nil { + return fmt.Errorf("AutoConfig is already running") + } + + // create the top level context to control the go + // routine executing the `run` method + ctx, cancel := context.WithCancel(ctx) + + // create the channel to get cache update events through + // really we should only ever get 10 updates + ac.cacheUpdates = make(chan cache.UpdateEvent, 10) + + // setup the cache watches + cancelCertWatches, err := ac.setupCertificateCacheWatches(ctx) + if err != nil { + cancel() + return fmt.Errorf("error setting up cache watches: %w", err) + } + + // start the token update notifier + ac.tokenUpdates = ac.acConfig.Tokens.Notify(token.TokenKindAgent) + + // store the cancel funcs + ac.cancel = cancel + ac.cancelWatches = cancelCertWatches + + ac.running = true + ac.done = make(chan struct{}) + go ac.run(ctx, ac.done) + + ac.logger.Info("auto-config started") + return nil +} + +func (ac *AutoConfig) Done() <-chan struct{} { + ac.Lock() + defer ac.Unlock() + + if ac.done != nil { + return ac.done + } + + // return a closed channel to indicate that we are already done + done := make(chan struct{}) + close(done) + return done +} + +func (ac *AutoConfig) IsRunning() bool { + ac.Lock() + defer ac.Unlock() + return ac.running +} + +func (ac *AutoConfig) Stop() bool { + ac.Lock() + defer ac.Unlock() + + if !ac.running { + return false + } + + if ac.cancel != nil { + ac.cancel() + } + + return true +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/auto_config_test.go consul-1.8.7+dfsg1/agent/auto-config/auto_config_test.go --- consul-1.7.4+dfsg1/agent/auto-config/auto_config_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/auto_config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1173 @@ +package autoconf + +import ( + "context" + "fmt" + "io/ioutil" + "net" + "os" + "path/filepath" + "sync" + "testing" + "time" + + "github.com/hashicorp/consul/agent/cache" + cachetype "github.com/hashicorp/consul/agent/cache-types" + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/metadata" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/proto/pbautoconf" + "github.com/hashicorp/consul/proto/pbconfig" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +type configLoader struct { + opts config.BuilderOpts +} + +func (c *configLoader) Load(source config.Source) (*config.RuntimeConfig, []string, error) { + return config.Load(c.opts, source) +} + +func (c *configLoader) addConfigHCL(cfg string) { + c.opts.HCL = append(c.opts.HCL, cfg) +} + +func requireChanNotReady(t *testing.T, ch <-chan struct{}) { + select { + case <-ch: + require.Fail(t, "chan is ready when it shouldn't be") + default: + return + } +} + +func requireChanReady(t *testing.T, ch <-chan struct{}) { + select { + case <-ch: + return + default: + require.Fail(t, "chan is not ready when it should be") + } +} + +func waitForChan(timer *time.Timer, ch <-chan struct{}) bool { + select { + case <-timer.C: + return false + case <-ch: + return true + } +} + +func waitForChans(timeout time.Duration, chans ...<-chan struct{}) bool { + timer := time.NewTimer(timeout) + defer timer.Stop() + + for _, ch := range chans { + if !waitForChan(timer, ch) { + return false + } + } + return true +} + +func TestNew(t *testing.T) { + type testCase struct { + modify func(*Config) + err string + validate func(t *testing.T, ac *AutoConfig) + } + + cases := map[string]testCase{ + "no-direct-rpc": { + modify: func(c *Config) { + c.DirectRPC = nil + }, + err: "must provide a direct RPC delegate", + }, + "no-config-loader": { + modify: func(c *Config) { + c.Loader = nil + }, + err: "must provide a config loader", + }, + "no-cache": { + modify: func(c *Config) { + c.Cache = nil + }, + err: "must provide a cache", + }, + "no-tls-configurator": { + modify: func(c *Config) { + c.TLSConfigurator = nil + }, + err: "must provide a TLS configurator", + }, + "no-tokens": { + modify: func(c *Config) { + c.Tokens = nil + }, + err: "must provide a token store", + }, + "ok": { + validate: func(t *testing.T, ac *AutoConfig) { + t.Helper() + require.NotNil(t, ac.logger) + require.NotNil(t, ac.acConfig.Waiter) + require.Equal(t, time.Minute, ac.acConfig.FallbackRetry) + require.Equal(t, 10*time.Second, ac.acConfig.FallbackLeeway) + }, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + cfg := Config{ + Loader: func(source config.Source) (cfg *config.RuntimeConfig, warnings []string, err error) { + return nil, nil, nil + }, + DirectRPC: newMockDirectRPC(t), + Tokens: newMockTokenStore(t), + Cache: newMockCache(t), + TLSConfigurator: newMockTLSConfigurator(t), + ServerProvider: newMockServerProvider(t), + } + + if tcase.modify != nil { + tcase.modify(&cfg) + } + + ac, err := New(cfg) + if tcase.err != "" { + testutil.RequireErrorContains(t, err, tcase.err) + } else { + require.NoError(t, err) + require.NotNil(t, ac) + if tcase.validate != nil { + tcase.validate(t, ac) + } + } + }) + } +} + +func TestReadConfig(t *testing.T) { + // just testing that some auto config source gets injected + ac := AutoConfig{ + autoConfigSource: config.LiteralSource{ + Name: autoConfigFileName, + Config: config.Config{NodeName: stringPointer("hobbiton")}, + }, + logger: testutil.Logger(t), + acConfig: Config{ + Loader: func(source config.Source) (*config.RuntimeConfig, []string, error) { + cfg, _, err := source.Parse() + if err != nil { + return nil, nil, err + } + return &config.RuntimeConfig{ + DevMode: true, + NodeName: *cfg.NodeName, + }, nil, nil + }, + }, + } + + cfg, err := ac.ReadConfig() + require.NoError(t, err) + require.NotNil(t, cfg) + require.Equal(t, "hobbiton", cfg.NodeName) + require.True(t, cfg.DevMode) + require.Same(t, ac.config, cfg) +} + +func setupRuntimeConfig(t *testing.T) *configLoader { + t.Helper() + + dataDir := testutil.TempDir(t, "auto-config") + + opts := config.BuilderOpts{ + Config: config.Config{ + DataDir: &dataDir, + Datacenter: stringPointer("dc1"), + NodeName: stringPointer("autoconf"), + BindAddr: stringPointer("127.0.0.1"), + }, + } + return &configLoader{opts: opts} +} + +func TestInitialConfiguration_disabled(t *testing.T) { + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + primary_datacenter = "primary" + auto_config = { + enabled = false + } + `) + + conf := newMockedConfig(t).Config + conf.Loader = loader.Load + + ac, err := New(conf) + require.NoError(t, err) + require.NotNil(t, ac) + + cfg, err := ac.InitialConfiguration(context.Background()) + require.NoError(t, err) + require.NotNil(t, cfg) + require.Equal(t, "primary", cfg.PrimaryDatacenter) + require.NoFileExists(t, filepath.Join(*loader.opts.Config.DataDir, autoConfigFileName)) +} + +func TestInitialConfiguration_cancelled(t *testing.T) { + mcfg := newMockedConfig(t) + + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + primary_datacenter = "primary" + auto_config = { + enabled = true + intro_token = "blarg" + server_addresses = ["127.0.0.1:8300"] + } + verify_outgoing = true + `) + mcfg.Config.Loader = loader.Load + + expectedRequest := pbautoconf.AutoConfigRequest{ + Datacenter: "dc1", + Node: "autoconf", + JWT: "blarg", + } + + mcfg.directRPC.On("RPC", "dc1", "autoconf", &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 8300}, "AutoConfig.InitialConfiguration", &expectedRequest, mock.Anything).Return(fmt.Errorf("injected error")).Times(0) + mcfg.serverProvider.On("FindLANServer").Return(nil).Times(0) + + ac, err := New(mcfg.Config) + require.NoError(t, err) + require.NotNil(t, ac) + + ctx, cancelFn := context.WithDeadline(context.Background(), time.Now().Add(100*time.Millisecond)) + defer cancelFn() + + cfg, err := ac.InitialConfiguration(ctx) + testutil.RequireErrorContains(t, err, context.DeadlineExceeded.Error()) + require.Nil(t, cfg) +} + +func TestInitialConfiguration_restored(t *testing.T) { + mcfg := newMockedConfig(t) + + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + auto_config = { + enabled = true + intro_token ="blarg" + server_addresses = ["127.0.0.1:8300"] + } + verify_outgoing = true + `) + + mcfg.Config.Loader = loader.Load + + indexedRoots, cert, extraCACerts := mcfg.setupInitialTLS(t, "autoconf", "dc1", "secret") + + // persist an auto config response to the data dir where it is expected + persistedFile := filepath.Join(*loader.opts.Config.DataDir, autoConfigFileName) + response := &pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + PrimaryDatacenter: "primary", + TLS: &pbconfig.TLS{ + VerifyServerHostname: true, + }, + ACL: &pbconfig.ACL{ + Tokens: &pbconfig.ACLTokens{ + Agent: "secret", + }, + }, + }, + CARoots: mustTranslateCARootsToProtobuf(t, indexedRoots), + Certificate: mustTranslateIssuedCertToProtobuf(t, cert), + ExtraCACertificates: extraCACerts, + } + data, err := pbMarshaler.MarshalToString(response) + require.NoError(t, err) + require.NoError(t, ioutil.WriteFile(persistedFile, []byte(data), 0600)) + + // recording the initial configuration even when restoring is going to update + // the agent token in the token store + mcfg.tokens.On("UpdateAgentToken", "secret", token.TokenSourceConfig).Return(true).Once() + + // prepopulation is going to grab the token to populate the correct cache key + mcfg.tokens.On("AgentToken").Return("secret").Times(0) + + ac, err := New(mcfg.Config) + require.NoError(t, err) + require.NotNil(t, ac) + + cfg, err := ac.InitialConfiguration(context.Background()) + require.NoError(t, err, data) + require.NotNil(t, cfg) + require.Equal(t, "primary", cfg.PrimaryDatacenter) +} + +func TestInitialConfiguration_success(t *testing.T) { + mcfg := newMockedConfig(t) + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + auto_config = { + enabled = true + intro_token ="blarg" + server_addresses = ["127.0.0.1:8300"] + } + verify_outgoing = true + `) + mcfg.Config.Loader = loader.Load + + indexedRoots, cert, extraCerts := mcfg.setupInitialTLS(t, "autoconf", "dc1", "secret") + + // this gets called when InitialConfiguration is invoked to record the token from the + // auto-config response + mcfg.tokens.On("UpdateAgentToken", "secret", token.TokenSourceConfig).Return(true).Once() + + // prepopulation is going to grab the token to populate the correct cache key + mcfg.tokens.On("AgentToken").Return("secret").Times(0) + + // no server provider + mcfg.serverProvider.On("FindLANServer").Return(nil).Times(0) + + populateResponse := func(args mock.Arguments) { + resp, ok := args.Get(5).(*pbautoconf.AutoConfigResponse) + require.True(t, ok) + resp.Config = &pbconfig.Config{ + PrimaryDatacenter: "primary", + TLS: &pbconfig.TLS{ + VerifyServerHostname: true, + }, + ACL: &pbconfig.ACL{ + Tokens: &pbconfig.ACLTokens{ + Agent: "secret", + }, + }, + } + + resp.CARoots = mustTranslateCARootsToProtobuf(t, indexedRoots) + resp.Certificate = mustTranslateIssuedCertToProtobuf(t, cert) + resp.ExtraCACertificates = extraCerts + } + + expectedRequest := pbautoconf.AutoConfigRequest{ + Datacenter: "dc1", + Node: "autoconf", + JWT: "blarg", + } + + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 8300}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(nil).Run(populateResponse) + + ac, err := New(mcfg.Config) + require.NoError(t, err) + require.NotNil(t, ac) + + cfg, err := ac.InitialConfiguration(context.Background()) + require.NoError(t, err) + require.NotNil(t, cfg) + require.Equal(t, "primary", cfg.PrimaryDatacenter) + + // the file was written to. + persistedFile := filepath.Join(*loader.opts.Config.DataDir, autoConfigFileName) + require.FileExists(t, persistedFile) +} + +func TestInitialConfiguration_retries(t *testing.T) { + mcfg := newMockedConfig(t) + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + auto_config = { + enabled = true + intro_token ="blarg" + server_addresses = [ + "198.18.0.1:8300", + "198.18.0.2:8398", + "198.18.0.3:8399", + "127.0.0.1:1234" + ] + } + verify_outgoing = true + `) + mcfg.Config.Loader = loader.Load + + // reduce the retry wait times to make this test run faster + mcfg.Config.Waiter = lib.NewRetryWaiter(2, 0, 1*time.Millisecond, nil) + + indexedRoots, cert, extraCerts := mcfg.setupInitialTLS(t, "autoconf", "dc1", "secret") + + // this gets called when InitialConfiguration is invoked to record the token from the + // auto-config response + mcfg.tokens.On("UpdateAgentToken", "secret", token.TokenSourceConfig).Return(true).Once() + + // prepopulation is going to grab the token to populate the correct cache key + mcfg.tokens.On("AgentToken").Return("secret").Times(0) + + // no server provider + mcfg.serverProvider.On("FindLANServer").Return(nil).Times(0) + + populateResponse := func(args mock.Arguments) { + resp, ok := args.Get(5).(*pbautoconf.AutoConfigResponse) + require.True(t, ok) + resp.Config = &pbconfig.Config{ + PrimaryDatacenter: "primary", + TLS: &pbconfig.TLS{ + VerifyServerHostname: true, + }, + ACL: &pbconfig.ACL{ + Tokens: &pbconfig.ACLTokens{ + Agent: "secret", + }, + }, + } + + resp.CARoots = mustTranslateCARootsToProtobuf(t, indexedRoots) + resp.Certificate = mustTranslateIssuedCertToProtobuf(t, cert) + resp.ExtraCACertificates = extraCerts + } + + expectedRequest := pbautoconf.AutoConfigRequest{ + Datacenter: "dc1", + Node: "autoconf", + JWT: "blarg", + } + + // basically the 198.18.0.* addresses should fail indefinitely. the first time through the + // outer loop we inject a failure for the DNS resolution of localhost to 127.0.0.1. Then + // the second time through the outer loop we allow the localhost one to work. + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 8300}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(fmt.Errorf("injected failure")).Times(0) + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 2), Port: 8398}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(fmt.Errorf("injected failure")).Times(0) + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 3), Port: 8399}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(fmt.Errorf("injected failure")).Times(0) + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 1234}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(fmt.Errorf("injected failure")).Once() + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 1234}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(nil).Run(populateResponse).Once() + + ac, err := New(mcfg.Config) + require.NoError(t, err) + require.NotNil(t, ac) + + cfg, err := ac.InitialConfiguration(context.Background()) + require.NoError(t, err) + require.NotNil(t, cfg) + require.Equal(t, "primary", cfg.PrimaryDatacenter) + + // the file was written to. + persistedFile := filepath.Join(*loader.opts.Config.DataDir, autoConfigFileName) + require.FileExists(t, persistedFile) +} + +func TestGoRoutineManagement(t *testing.T) { + mcfg := newMockedConfig(t) + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + auto_config = { + enabled = true + intro_token ="blarg" + server_addresses = ["127.0.0.1:8300"] + } + verify_outgoing = true + `) + mcfg.Config.Loader = loader.Load + + // prepopulation is going to grab the token to populate the correct cache key + mcfg.tokens.On("AgentToken").Return("secret").Times(0) + + ac, err := New(mcfg.Config) + require.NoError(t, err) + + // priming the config so some other requests will work properly that need to + // read from the configuration. We are going to avoid doing InitialConfiguration + // for this test as we only are really concerned with the go routine management + _, err = ac.ReadConfig() + require.NoError(t, err) + + var rootsCtx context.Context + var leafCtx context.Context + var ctxLock sync.Mutex + + rootsReq := ac.caRootsRequest() + mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCARootName, + &rootsReq, + rootsWatchID, + mock.Anything, + ).Return(nil).Times(2).Run(func(args mock.Arguments) { + ctxLock.Lock() + rootsCtx = args.Get(0).(context.Context) + ctxLock.Unlock() + }) + + leafReq := ac.leafCertRequest() + mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCALeafName, + &leafReq, + leafWatchID, + mock.Anything, + ).Return(nil).Times(2).Run(func(args mock.Arguments) { + ctxLock.Lock() + leafCtx = args.Get(0).(context.Context) + ctxLock.Unlock() + }) + + // we will start/stop things twice + mcfg.tokens.On("Notify", token.TokenKindAgent).Return(token.Notifier{}).Times(2) + mcfg.tokens.On("StopNotify", token.Notifier{}).Times(2) + + mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(time.Now().Add(10 * time.Minute)).Times(0) + + // ensure that auto-config isn't running + require.False(t, ac.IsRunning()) + + // ensure that nothing bad happens and that it reports as stopped + require.False(t, ac.Stop()) + + // ensure that the Done chan also reports that things are not running + // in other words the chan is immediately selectable + requireChanReady(t, ac.Done()) + + // start auto-config + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + require.NoError(t, ac.Start(ctx)) + + waitForContexts := func() bool { + ctxLock.Lock() + defer ctxLock.Unlock() + return !(rootsCtx == nil || leafCtx == nil) + } + + // wait for the cache notifications to get started + require.Eventually(t, waitForContexts, 100*time.Millisecond, 10*time.Millisecond) + + // hold onto the Done chan to test for the go routine exiting + done := ac.Done() + + // ensure we report as running + require.True(t, ac.IsRunning()) + + // ensure the done chan is not selectable yet + requireChanNotReady(t, done) + + // ensure we error if we attempt to start again + err = ac.Start(ctx) + testutil.RequireErrorContains(t, err, "AutoConfig is already running") + + // now stop things - it should return true indicating that it was running + // when we attempted to stop it. + require.True(t, ac.Stop()) + + // ensure that the go routine shuts down - it will close the done chan. Also it should cancel + // the cache watches by cancelling the context it passed into the Notify call. + require.True(t, waitForChans(100*time.Millisecond, done, leafCtx.Done(), rootsCtx.Done()), "AutoConfig didn't shut down") + require.False(t, ac.IsRunning()) + + // restart it + require.NoError(t, ac.Start(ctx)) + + // get the new Done chan + done = ac.Done() + + // ensure that context cancellation causes us to stop as well + cancel() + require.True(t, waitForChans(100*time.Millisecond, done)) +} + +type testAutoConfig struct { + mcfg *mockedConfig + ac *AutoConfig + tokenUpdates chan struct{} + originalToken string + + initialRoots *structs.IndexedCARoots + initialCert *structs.IssuedCert + extraCerts []string +} + +func startedAutoConfig(t *testing.T, autoEncrypt bool) testAutoConfig { + t.Helper() + mcfg := newMockedConfig(t) + loader := setupRuntimeConfig(t) + if !autoEncrypt { + loader.addConfigHCL(` + auto_config = { + enabled = true + intro_token ="blarg" + server_addresses = ["127.0.0.1:8300"] + } + verify_outgoing = true + `) + } else { + loader.addConfigHCL(` + auto_encrypt { + tls = true + } + verify_outgoing = true + `) + } + mcfg.Config.Loader = loader.Load + mcfg.Config.FallbackLeeway = time.Nanosecond + + originalToken := "a5deaa25-11ca-48bf-a979-4c3a7aa4b9a9" + + if !autoEncrypt { + // this gets called when InitialConfiguration is invoked to record the token from the + // auto-config response + mcfg.tokens.On("UpdateAgentToken", originalToken, token.TokenSourceConfig).Return(true).Once() + } + + // we expect this to be retrieved twice: first during cache prepopulation + // and then again when setting up the cache watch for the leaf cert. + // However one of those expectations is setup in the expectInitialTLS + // method so we only need one more here + mcfg.tokens.On("AgentToken").Return(originalToken).Once() + + if autoEncrypt { + // when using AutoEncrypt we also have to grab the token once more + // when setting up the initial RPC as the ACL token is what is used + // to authorize the request. + mcfg.tokens.On("AgentToken").Return(originalToken).Once() + } + + // this is called once during Start to initialze the token watches + tokenUpdateCh := make(chan struct{}) + tokenNotifier := token.Notifier{ + Ch: tokenUpdateCh, + } + mcfg.tokens.On("Notify", token.TokenKindAgent).Once().Return(tokenNotifier) + mcfg.tokens.On("StopNotify", tokenNotifier).Once() + + // expect the roots watch on the cache + mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCARootName, + &structs.DCSpecificRequest{Datacenter: "dc1"}, + rootsWatchID, + mock.Anything, + ).Return(nil).Once() + + mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCALeafName, + &cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: originalToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + }, + leafWatchID, + mock.Anything, + ).Return(nil).Once() + + // override the server provider - most of the other tests set it up so that this + // always returns no server (simulating a state where we haven't joined gossip). + // this seems like a good place to ensure this other way of finding server information + // works + mcfg.serverProvider.On("FindLANServer").Once().Return(&metadata.Server{ + Addr: &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 8300}, + }) + + indexedRoots, cert, extraCerts := mcfg.setupInitialTLS(t, "autoconf", "dc1", originalToken) + + mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(cert.ValidBefore).Once() + + populateResponse := func(args mock.Arguments) { + method := args.String(3) + + switch method { + case "AutoConfig.InitialConfiguration": + resp, ok := args.Get(5).(*pbautoconf.AutoConfigResponse) + require.True(t, ok) + resp.Config = &pbconfig.Config{ + PrimaryDatacenter: "primary", + TLS: &pbconfig.TLS{ + VerifyServerHostname: true, + }, + ACL: &pbconfig.ACL{ + Tokens: &pbconfig.ACLTokens{ + Agent: originalToken, + }, + }, + } + + resp.CARoots = mustTranslateCARootsToProtobuf(t, indexedRoots) + resp.Certificate = mustTranslateIssuedCertToProtobuf(t, cert) + resp.ExtraCACertificates = extraCerts + case "AutoEncrypt.Sign": + resp, ok := args.Get(5).(*structs.SignedResponse) + require.True(t, ok) + *resp = structs.SignedResponse{ + VerifyServerHostname: true, + ConnectCARoots: *indexedRoots, + IssuedCert: *cert, + ManualCARoots: extraCerts, + } + } + } + + if !autoEncrypt { + expectedRequest := pbautoconf.AutoConfigRequest{ + Datacenter: "dc1", + Node: "autoconf", + JWT: "blarg", + } + + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 8300}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(nil).Run(populateResponse).Once() + } else { + expectedRequest := structs.CASignRequest{ + WriteRequest: structs.WriteRequest{Token: originalToken}, + Datacenter: "dc1", + // TODO (autoconf) Maybe in the future we should populate a CSR + // and do some manual parsing/verification of the contents. The + // bits not having to do with the signing key such as the requested + // SANs and CN. For now though the mockDirectRPC type will empty + // the CSR so we have to pass in an empty string to the expectation. + CSR: "", + } + + mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", // reusing the same name to prevent needing more configurability + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 8300}, + "AutoEncrypt.Sign", + &expectedRequest, + &structs.SignedResponse{}).Return(nil).Run(populateResponse) + } + + ac, err := New(mcfg.Config) + require.NoError(t, err) + require.NotNil(t, ac) + + cfg, err := ac.InitialConfiguration(context.Background()) + require.NoError(t, err) + require.NotNil(t, cfg) + if !autoEncrypt { + // auto-encrypt doesn't modify the config but rather sets the value + // in the TLS configurator + require.True(t, cfg.VerifyServerHostname) + } + + ctx, cancel := context.WithCancel(context.Background()) + require.NoError(t, ac.Start(ctx)) + t.Cleanup(func() { + done := ac.Done() + cancel() + timer := time.NewTimer(1 * time.Second) + defer timer.Stop() + select { + case <-done: + // do nothing + case <-timer.C: + t.Fatalf("AutoConfig wasn't stopped within 1 second after test completion") + } + }) + + return testAutoConfig{ + mcfg: mcfg, + ac: ac, + tokenUpdates: tokenUpdateCh, + originalToken: originalToken, + initialRoots: indexedRoots, + initialCert: cert, + extraCerts: extraCerts, + } +} + +// this test ensures that the cache watches are restarted with +// the updated token after receiving a token update +func TestTokenUpdate(t *testing.T) { + testAC := startedAutoConfig(t, false) + + newToken := "1a4cc445-86ed-46b4-a355-bbf5a11dddb0" + + rootsCtx, rootsCancel := context.WithCancel(context.Background()) + testAC.mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCARootName, + &structs.DCSpecificRequest{Datacenter: testAC.ac.config.Datacenter}, + rootsWatchID, + mock.Anything, + ).Return(nil).Once().Run(func(args mock.Arguments) { + rootsCancel() + }) + + leafCtx, leafCancel := context.WithCancel(context.Background()) + testAC.mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCALeafName, + &cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: newToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + }, + leafWatchID, + mock.Anything, + ).Return(nil).Once().Run(func(args mock.Arguments) { + leafCancel() + }) + + // this will be retrieved once when resetting the leaf cert watch + testAC.mcfg.tokens.On("AgentToken").Return(newToken).Once() + + // send the notification about the token update + testAC.tokenUpdates <- struct{}{} + + // wait for the leaf cert watches + require.True(t, waitForChans(100*time.Millisecond, leafCtx.Done(), rootsCtx.Done()), "New cache watches were not started within 100ms") +} + +func TestRootsUpdate(t *testing.T) { + testAC := startedAutoConfig(t, false) + + secondCA := connect.TestCA(t, testAC.initialRoots.Roots[0]) + secondRoots := structs.IndexedCARoots{ + ActiveRootID: secondCA.ID, + TrustDomain: connect.TestClusterID, + Roots: []*structs.CARoot{ + secondCA, + testAC.initialRoots.Roots[0], + }, + QueryMeta: structs.QueryMeta{ + Index: 99, + }, + } + + updatedCtx, cancel := context.WithCancel(context.Background()) + testAC.mcfg.tlsCfg.On("UpdateAutoTLS", + testAC.extraCerts, + []string{secondCA.RootCert, testAC.initialRoots.Roots[0].RootCert}, + testAC.initialCert.CertPEM, + "redacted", + true, + ).Return(nil).Once().Run(func(args mock.Arguments) { + cancel() + }) + + // when a cache event comes in we end up recalculating the fallback timer which requires this call + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(time.Now().Add(10 * time.Minute)).Once() + + req := structs.DCSpecificRequest{Datacenter: "dc1"} + require.True(t, testAC.mcfg.cache.sendNotification(context.Background(), req.CacheInfo().Key, cache.UpdateEvent{ + CorrelationID: rootsWatchID, + Result: &secondRoots, + Meta: cache.ResultMeta{ + Index: secondRoots.Index, + }, + })) + + require.True(t, waitForChans(100*time.Millisecond, updatedCtx.Done()), "TLS certificates were not updated within the alotted time") + + // persisting these to disk happens right after the chan we are waiting for will have fired above + // however there is no deterministic way to know once its been written outside of maybe a filesystem + // event notifier. That seems a little heavy handed just for this and especially to do in any sort + // of cross platform way. + retry.Run(t, func(r *retry.R) { + resp, err := testAC.ac.readPersistedAutoConfig() + require.NoError(r, err) + require.Equal(r, secondRoots.ActiveRootID, resp.CARoots.GetActiveRootID()) + }) +} + +func TestCertUpdate(t *testing.T) { + testAC := startedAutoConfig(t, false) + secondCert := newLeaf(t, "autoconf", "dc1", testAC.initialRoots.Roots[0], 99, 10*time.Minute) + + updatedCtx, cancel := context.WithCancel(context.Background()) + testAC.mcfg.tlsCfg.On("UpdateAutoTLS", + testAC.extraCerts, + []string{testAC.initialRoots.Roots[0].RootCert}, + secondCert.CertPEM, + "redacted", + true, + ).Return(nil).Once().Run(func(args mock.Arguments) { + cancel() + }) + + // when a cache event comes in we end up recalculating the fallback timer which requires this call + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(secondCert.ValidBefore).Once() + + req := cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: testAC.originalToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + } + require.True(t, testAC.mcfg.cache.sendNotification(context.Background(), req.CacheInfo().Key, cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: secondCert, + Meta: cache.ResultMeta{ + Index: secondCert.ModifyIndex, + }, + })) + + require.True(t, waitForChans(100*time.Millisecond, updatedCtx.Done()), "TLS certificates were not updated within the alotted time") + + // persisting these to disk happens after all the things we would wait for in assertCertUpdated + // will have fired. There is no deterministic way to know once its been written so we wrap + // this in a retry. + retry.Run(t, func(r *retry.R) { + resp, err := testAC.ac.readPersistedAutoConfig() + require.NoError(r, err) + + // ensure the roots got persisted to disk + require.Equal(r, secondCert.CertPEM, resp.Certificate.GetCertPEM()) + }) +} + +func TestFallback(t *testing.T) { + testAC := startedAutoConfig(t, false) + + // at this point everything is operating normally and we are just + // waiting for events. We are going to send a new cert that is basically + // already expired and then allow the fallback routine to kick in. + secondCert := newLeaf(t, "autoconf", "dc1", testAC.initialRoots.Roots[0], 100, time.Nanosecond) + secondCA := connect.TestCA(t, testAC.initialRoots.Roots[0]) + secondRoots := structs.IndexedCARoots{ + ActiveRootID: secondCA.ID, + TrustDomain: connect.TestClusterID, + Roots: []*structs.CARoot{ + secondCA, + testAC.initialRoots.Roots[0], + }, + QueryMeta: structs.QueryMeta{ + Index: 101, + }, + } + thirdCert := newLeaf(t, "autoconf", "dc1", secondCA, 102, 10*time.Minute) + + // setup the expectation for when the certs got updated initially + updatedCtx, updateCancel := context.WithCancel(context.Background()) + testAC.mcfg.tlsCfg.On("UpdateAutoTLS", + testAC.extraCerts, + []string{testAC.initialRoots.Roots[0].RootCert}, + secondCert.CertPEM, + "redacted", + true, + ).Return(nil).Once().Run(func(args mock.Arguments) { + updateCancel() + }) + + // when a cache event comes in we end up recalculating the fallback timer which requires this call + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(secondCert.ValidBefore).Once() + testAC.mcfg.tlsCfg.On("AutoEncryptCertExpired").Return(true).Once() + + fallbackCtx, fallbackCancel := context.WithCancel(context.Background()) + + // also testing here that we can change server IPs for ongoing operations + testAC.mcfg.serverProvider.On("FindLANServer").Once().Return(&metadata.Server{ + Addr: &net.TCPAddr{IP: net.IPv4(198, 18, 23, 2), Port: 8300}, + }) + + // after sending the notification for the cert update another InitialConfiguration RPC + // will be made to pull down the latest configuration. So we need to set up the response + // for the second RPC + populateResponse := func(args mock.Arguments) { + resp, ok := args.Get(5).(*pbautoconf.AutoConfigResponse) + require.True(t, ok) + resp.Config = &pbconfig.Config{ + PrimaryDatacenter: "primary", + TLS: &pbconfig.TLS{ + VerifyServerHostname: true, + }, + ACL: &pbconfig.ACL{ + Tokens: &pbconfig.ACLTokens{ + Agent: testAC.originalToken, + }, + }, + } + + resp.CARoots = mustTranslateCARootsToProtobuf(t, &secondRoots) + resp.Certificate = mustTranslateIssuedCertToProtobuf(t, thirdCert) + resp.ExtraCACertificates = testAC.extraCerts + + fallbackCancel() + } + + expectedRequest := pbautoconf.AutoConfigRequest{ + Datacenter: "dc1", + Node: "autoconf", + JWT: "blarg", + } + + testAC.mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(198, 18, 23, 2), Port: 8300}, + "AutoConfig.InitialConfiguration", + &expectedRequest, + &pbautoconf.AutoConfigResponse{}).Return(nil).Run(populateResponse).Once() + + // this gets called when InitialConfiguration is invoked to record the token from the + // auto-config response which is how the Fallback for auto-config works + testAC.mcfg.tokens.On("UpdateAgentToken", testAC.originalToken, token.TokenSourceConfig).Return(true).Once() + + testAC.mcfg.expectInitialTLS(t, "autoconf", "dc1", testAC.originalToken, secondCA, &secondRoots, thirdCert, testAC.extraCerts) + + // after the second RPC we now will use the new certs validity period in the next run loop iteration + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(time.Now().Add(10 * time.Minute)).Once() + + // now that all the mocks are set up we can trigger the whole thing by sending the second expired cert + // as a cache update event. + req := cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: testAC.originalToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + } + require.True(t, testAC.mcfg.cache.sendNotification(context.Background(), req.CacheInfo().Key, cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: secondCert, + Meta: cache.ResultMeta{ + Index: secondCert.ModifyIndex, + }, + })) + + // wait for the TLS certificates to get updated + require.True(t, waitForChans(100*time.Millisecond, updatedCtx.Done()), "TLS certificates were not updated within the alotted time") + + // now wait for the fallback routine to be invoked + require.True(t, waitForChans(100*time.Millisecond, fallbackCtx.Done()), "fallback routines did not get invoked within the alotted time") + + // persisting these to disk happens after the RPC we waited on above will have fired + // There is no deterministic way to know once its been written so we wrap this in a retry. + retry.Run(t, func(r *retry.R) { + resp, err := testAC.ac.readPersistedAutoConfig() + require.NoError(r, err) + + // ensure the roots got persisted to disk + require.Equal(r, thirdCert.CertPEM, resp.Certificate.GetCertPEM()) + require.Equal(r, secondRoots.ActiveRootID, resp.CARoots.GetActiveRootID()) + }) +} + +func TestIntroToken(t *testing.T) { + tokenFile := testutil.TempFile(t, "intro-token") + t.Cleanup(func() { os.Remove(tokenFile.Name()) }) + + tokenFileEmpty := testutil.TempFile(t, "intro-token-empty") + t.Cleanup(func() { os.Remove(tokenFileEmpty.Name()) }) + + tokenFromFile := "8ae34d3a-8adf-446a-b236-69874597cb5b" + tokenFromConfig := "3ad9b572-ea42-4e47-9cd0-53a398a98abf" + require.NoError(t, ioutil.WriteFile(tokenFile.Name(), []byte(tokenFromFile), 0600)) + + type testCase struct { + config *config.RuntimeConfig + err string + token string + } + + cases := map[string]testCase{ + "config": { + config: &config.RuntimeConfig{ + AutoConfig: config.AutoConfig{ + IntroToken: tokenFromConfig, + IntroTokenFile: tokenFile.Name(), + }, + }, + token: tokenFromConfig, + }, + "file": { + config: &config.RuntimeConfig{ + AutoConfig: config.AutoConfig{ + IntroTokenFile: tokenFile.Name(), + }, + }, + token: tokenFromFile, + }, + "file-empty": { + config: &config.RuntimeConfig{ + AutoConfig: config.AutoConfig{ + IntroTokenFile: tokenFileEmpty.Name(), + }, + }, + err: "intro_token_file did not contain any token", + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + ac := AutoConfig{ + config: tcase.config, + } + + token, err := ac.introToken() + if tcase.err != "" { + testutil.RequireErrorContains(t, err, tcase.err) + } else { + require.NoError(t, err) + require.Equal(t, tcase.token, token) + } + }) + } + +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/auto_encrypt.go consul-1.8.7+dfsg1/agent/auto-config/auto_encrypt.go --- consul-1.7.4+dfsg1/agent/auto-config/auto_encrypt.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/auto_encrypt.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,111 @@ +package autoconf + +import ( + "context" + "fmt" + "net" + "strings" + + "github.com/hashicorp/consul/agent/structs" +) + +func (ac *AutoConfig) autoEncryptInitialCerts(ctx context.Context) (*structs.SignedResponse, error) { + // generate a CSR + csr, key, err := ac.generateCSR() + if err != nil { + return nil, err + } + + // this resets the failures so that we will perform immediate request + wait := ac.acConfig.Waiter.Success() + for { + select { + case <-wait: + if resp, err := ac.autoEncryptInitialCertsOnce(ctx, csr, key); err == nil && resp != nil { + return resp, nil + } else if err != nil { + ac.logger.Error(err.Error()) + } else { + ac.logger.Error("No error returned when fetching certificates from the servers but no response was either") + } + + wait = ac.acConfig.Waiter.Failed() + case <-ctx.Done(): + ac.logger.Info("interrupted during retrieval of auto-encrypt certificates", "err", ctx.Err()) + return nil, ctx.Err() + } + } +} + +func (ac *AutoConfig) autoEncryptInitialCertsOnce(ctx context.Context, csr, key string) (*structs.SignedResponse, error) { + request := structs.CASignRequest{ + WriteRequest: structs.WriteRequest{Token: ac.acConfig.Tokens.AgentToken()}, + Datacenter: ac.config.Datacenter, + CSR: csr, + } + var resp structs.SignedResponse + + servers, err := ac.autoEncryptHosts() + if err != nil { + return nil, err + } + + for _, s := range servers { + // try each IP to see if we can successfully make the request + for _, addr := range ac.resolveHost(s) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + ac.logger.Debug("making AutoEncrypt.Sign RPC", "addr", addr.String()) + err = ac.acConfig.DirectRPC.RPC(ac.config.Datacenter, ac.config.NodeName, &addr, "AutoEncrypt.Sign", &request, &resp) + if err != nil { + ac.logger.Error("AutoEncrypt.Sign RPC failed", "addr", addr.String(), "error", err) + continue + } + + resp.IssuedCert.PrivateKeyPEM = key + return &resp, nil + } + } + return nil, fmt.Errorf("No servers successfully responded to the auto-encrypt request") +} + +func (ac *AutoConfig) autoEncryptHosts() ([]string, error) { + // use servers known to gossip if there are any + if ac.acConfig.ServerProvider != nil { + if srv := ac.acConfig.ServerProvider.FindLANServer(); srv != nil { + return []string{srv.Addr.String()}, nil + } + } + + hosts, err := ac.discoverServers(ac.config.RetryJoinLAN) + if err != nil { + return nil, err + } + + var addrs []string + + // The addresses we use for auto-encrypt are the retry join and start join + // addresses. These are for joining serf and therefore we cannot rely on the + // ports for these. This loop strips any port that may have been specified and + // will let subsequent resolveAddr calls add on the default RPC port. + for _, addr := range append(ac.config.StartJoinAddrsLAN, hosts...) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + if strings.Contains(err.Error(), "missing port in address") { + host = addr + } else { + ac.logger.Warn("error splitting host address into IP and port", "address", addr, "error", err) + continue + } + } + addrs = append(addrs, host) + } + + if len(addrs) == 0 { + return nil, fmt.Errorf("no auto-encrypt server addresses available for use") + } + + return addrs, nil +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/auto_encrypt_test.go consul-1.8.7+dfsg1/agent/auto-config/auto_encrypt_test.go --- consul-1.7.4+dfsg1/agent/auto-config/auto_encrypt_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/auto_encrypt_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,562 @@ +package autoconf + +import ( + "context" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "fmt" + "net" + "net/url" + "testing" + "time" + + "github.com/hashicorp/consul/agent/cache" + cachetype "github.com/hashicorp/consul/agent/cache-types" + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/metadata" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestAutoEncrypt_generateCSR(t *testing.T) { + type testCase struct { + conf *config.RuntimeConfig + + // to validate the csr + expectedSubject pkix.Name + expectedSigAlg x509.SignatureAlgorithm + expectedPubAlg x509.PublicKeyAlgorithm + expectedDNSNames []string + expectedIPs []net.IP + expectedURIs []*url.URL + } + + cases := map[string]testCase{ + "ip-sans": { + conf: &config.RuntimeConfig{ + Datacenter: "dc1", + NodeName: "test-node", + AutoEncryptTLS: true, + AutoEncryptIPSAN: []net.IP{net.IPv4(198, 18, 0, 1), net.IPv4(198, 18, 0, 2)}, + }, + expectedSubject: pkix.Name{ + CommonName: connect.AgentCN("test-node", unknownTrustDomain), + Names: []pkix.AttributeTypeAndValue{ + { + // 2,5,4,3 is the CommonName type ASN1 identifier + Type: asn1.ObjectIdentifier{2, 5, 4, 3}, + Value: "testnode.agnt.unknown.consul", + }, + }, + }, + expectedSigAlg: x509.ECDSAWithSHA256, + expectedPubAlg: x509.ECDSA, + expectedDNSNames: defaultDNSSANs, + expectedIPs: append(defaultIPSANs, + net.IP{198, 18, 0, 1}, + net.IP{198, 18, 0, 2}, + ), + expectedURIs: []*url.URL{ + { + Scheme: "spiffe", + Host: unknownTrustDomain, + Path: "/agent/client/dc/dc1/id/test-node", + }, + }, + }, + "dns-sans": { + conf: &config.RuntimeConfig{ + Datacenter: "dc1", + NodeName: "test-node", + AutoEncryptTLS: true, + AutoEncryptDNSSAN: []string{"foo.local", "bar.local"}, + }, + expectedSubject: pkix.Name{ + CommonName: connect.AgentCN("test-node", unknownTrustDomain), + Names: []pkix.AttributeTypeAndValue{ + { + // 2,5,4,3 is the CommonName type ASN1 identifier + Type: asn1.ObjectIdentifier{2, 5, 4, 3}, + Value: "testnode.agnt.unknown.consul", + }, + }, + }, + expectedSigAlg: x509.ECDSAWithSHA256, + expectedPubAlg: x509.ECDSA, + expectedDNSNames: append(defaultDNSSANs, "foo.local", "bar.local"), + expectedIPs: defaultIPSANs, + expectedURIs: []*url.URL{ + { + Scheme: "spiffe", + Host: unknownTrustDomain, + Path: "/agent/client/dc/dc1/id/test-node", + }, + }, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + ac := AutoConfig{config: tcase.conf} + + csr, _, err := ac.generateCSR() + require.NoError(t, err) + + request, err := connect.ParseCSR(csr) + require.NoError(t, err) + require.NotNil(t, request) + + require.Equal(t, tcase.expectedSubject, request.Subject) + require.Equal(t, tcase.expectedSigAlg, request.SignatureAlgorithm) + require.Equal(t, tcase.expectedPubAlg, request.PublicKeyAlgorithm) + require.Equal(t, tcase.expectedDNSNames, request.DNSNames) + require.Equal(t, tcase.expectedIPs, request.IPAddresses) + require.Equal(t, tcase.expectedURIs, request.URIs) + }) + } +} + +func TestAutoEncrypt_hosts(t *testing.T) { + type testCase struct { + serverProvider ServerProvider + config *config.RuntimeConfig + + hosts []string + err string + } + + providerNone := newMockServerProvider(t) + providerNone.On("FindLANServer").Return(nil).Times(0) + + providerWithServer := newMockServerProvider(t) + providerWithServer.On("FindLANServer").Return(&metadata.Server{Addr: &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 1234}}).Times(0) + + cases := map[string]testCase{ + "router-override": { + serverProvider: providerWithServer, + config: &config.RuntimeConfig{ + RetryJoinLAN: []string{"127.0.0.1:9876"}, + StartJoinAddrsLAN: []string{"192.168.1.2:4321"}, + }, + hosts: []string{"198.18.0.1:1234"}, + }, + "various-addresses": { + serverProvider: providerNone, + config: &config.RuntimeConfig{ + RetryJoinLAN: []string{"198.18.0.1", "foo.com", "[2001:db8::1234]:1234", "abc.local:9876"}, + StartJoinAddrsLAN: []string{"192.168.1.1:5432", "start.local", "[::ffff:172.16.5.4]", "main.dev:6789"}, + }, + hosts: []string{ + "192.168.1.1", + "start.local", + "[::ffff:172.16.5.4]", + "main.dev", + "198.18.0.1", + "foo.com", + "2001:db8::1234", + "abc.local", + }, + }, + "split-host-port-error": { + serverProvider: providerNone, + config: &config.RuntimeConfig{ + StartJoinAddrsLAN: []string{"this-is-not:a:ip:and_port"}, + }, + err: "no auto-encrypt server addresses available for use", + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + ac := AutoConfig{ + config: tcase.config, + logger: testutil.Logger(t), + acConfig: Config{ + ServerProvider: tcase.serverProvider, + }, + } + + hosts, err := ac.autoEncryptHosts() + if tcase.err != "" { + testutil.RequireErrorContains(t, err, tcase.err) + } else { + require.NoError(t, err) + require.Equal(t, tcase.hosts, hosts) + } + }) + } +} + +func TestAutoEncrypt_InitialCerts(t *testing.T) { + token := "1a148388-3dd7-4db4-9eea-520424b4a86a" + datacenter := "foo" + nodeName := "bar" + + mcfg := newMockedConfig(t) + + _, indexedRoots, cert := testCerts(t, nodeName, datacenter) + + // The following are called once for each round through the auto-encrypt initial certs outer loop + // (not the per-host direct rpc attempts but the one involving the RetryWaiter) + mcfg.tokens.On("AgentToken").Return(token).Times(2) + mcfg.serverProvider.On("FindLANServer").Return(nil).Times(2) + + request := structs.CASignRequest{ + WriteRequest: structs.WriteRequest{Token: token}, + Datacenter: datacenter, + // this gets removed by the mock code as its non-deterministic what it will be + CSR: "", + } + + // first failure + mcfg.directRPC.On("RPC", + datacenter, + nodeName, + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 8300}, + "AutoEncrypt.Sign", + &request, + &structs.SignedResponse{}, + ).Once().Return(fmt.Errorf("injected error")) + // second failure + mcfg.directRPC.On("RPC", + datacenter, + nodeName, + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 2), Port: 8300}, + "AutoEncrypt.Sign", + &request, + &structs.SignedResponse{}, + ).Once().Return(fmt.Errorf("injected error")) + // third times is successfuly (second attempt to first server) + mcfg.directRPC.On("RPC", + datacenter, + nodeName, + &net.TCPAddr{IP: net.IPv4(198, 18, 0, 1), Port: 8300}, + "AutoEncrypt.Sign", + &request, + &structs.SignedResponse{}, + ).Once().Return(nil).Run(func(args mock.Arguments) { + resp, ok := args.Get(5).(*structs.SignedResponse) + require.True(t, ok) + resp.ConnectCARoots = *indexedRoots + resp.IssuedCert = *cert + resp.VerifyServerHostname = true + }) + + mcfg.Config.Waiter = lib.NewRetryWaiter(2, 0, 1*time.Millisecond, nil) + + ac := AutoConfig{ + config: &config.RuntimeConfig{ + Datacenter: datacenter, + NodeName: nodeName, + RetryJoinLAN: []string{"198.18.0.1:1234", "198.18.0.2:3456"}, + ServerPort: 8300, + }, + acConfig: mcfg.Config, + logger: testutil.Logger(t), + } + + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + resp, err := ac.autoEncryptInitialCerts(ctx) + require.NoError(t, err) + require.NotNil(t, resp) + require.True(t, resp.VerifyServerHostname) + require.NotEmpty(t, resp.IssuedCert.PrivateKeyPEM) + resp.IssuedCert.PrivateKeyPEM = "" + cert.PrivateKeyPEM = "" + require.Equal(t, cert, &resp.IssuedCert) + require.Equal(t, indexedRoots, &resp.ConnectCARoots) + require.Empty(t, resp.ManualCARoots) +} + +func TestAutoEncrypt_InitialConfiguration(t *testing.T) { + token := "010494ae-ee45-4433-903c-a58c91297714" + nodeName := "auto-encrypt" + datacenter := "dc1" + + mcfg := newMockedConfig(t) + loader := setupRuntimeConfig(t) + loader.addConfigHCL(` + auto_encrypt { + tls = true + } + `) + loader.opts.Config.NodeName = &nodeName + mcfg.Config.Loader = loader.Load + + indexedRoots, cert, extraCerts := mcfg.setupInitialTLS(t, nodeName, datacenter, token) + + // prepopulation is going to grab the token to populate the correct cache key + mcfg.tokens.On("AgentToken").Return(token).Times(0) + + // no server provider + mcfg.serverProvider.On("FindLANServer").Return(&metadata.Server{Addr: &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 8300}}).Times(1) + + populateResponse := func(args mock.Arguments) { + resp, ok := args.Get(5).(*structs.SignedResponse) + require.True(t, ok) + *resp = structs.SignedResponse{ + VerifyServerHostname: true, + ConnectCARoots: *indexedRoots, + IssuedCert: *cert, + ManualCARoots: extraCerts, + } + } + + expectedRequest := structs.CASignRequest{ + WriteRequest: structs.WriteRequest{Token: token}, + Datacenter: datacenter, + // TODO (autoconf) Maybe in the future we should populate a CSR + // and do some manual parsing/verification of the contents. The + // bits not having to do with the signing key such as the requested + // SANs and CN. For now though the mockDirectRPC type will empty + // the CSR so we have to pass in an empty string to the expectation. + CSR: "", + } + + mcfg.directRPC.On( + "RPC", + datacenter, + nodeName, + &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 8300}, + "AutoEncrypt.Sign", + &expectedRequest, + &structs.SignedResponse{}).Return(nil).Run(populateResponse) + + ac, err := New(mcfg.Config) + require.NoError(t, err) + require.NotNil(t, ac) + + cfg, err := ac.InitialConfiguration(context.Background()) + require.NoError(t, err) + require.NotNil(t, cfg) + +} + +func TestAutoEncrypt_TokenUpdate(t *testing.T) { + testAC := startedAutoConfig(t, true) + + newToken := "1a4cc445-86ed-46b4-a355-bbf5a11dddb0" + + rootsCtx, rootsCancel := context.WithCancel(context.Background()) + testAC.mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCARootName, + &structs.DCSpecificRequest{Datacenter: testAC.ac.config.Datacenter}, + rootsWatchID, + mock.Anything, + ).Return(nil).Once().Run(func(args mock.Arguments) { + rootsCancel() + }) + + leafCtx, leafCancel := context.WithCancel(context.Background()) + testAC.mcfg.cache.On("Notify", + mock.Anything, + cachetype.ConnectCALeafName, + &cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: newToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + }, + leafWatchID, + mock.Anything, + ).Return(nil).Once().Run(func(args mock.Arguments) { + leafCancel() + }) + + // this will be retrieved once when resetting the leaf cert watch + testAC.mcfg.tokens.On("AgentToken").Return(newToken).Once() + + // send the notification about the token update + testAC.tokenUpdates <- struct{}{} + + // wait for the leaf cert watches + require.True(t, waitForChans(100*time.Millisecond, leafCtx.Done(), rootsCtx.Done()), "New cache watches were not started within 100ms") +} + +func TestAutoEncrypt_RootsUpdate(t *testing.T) { + testAC := startedAutoConfig(t, true) + + secondCA := connect.TestCA(t, testAC.initialRoots.Roots[0]) + secondRoots := structs.IndexedCARoots{ + ActiveRootID: secondCA.ID, + TrustDomain: connect.TestClusterID, + Roots: []*structs.CARoot{ + secondCA, + testAC.initialRoots.Roots[0], + }, + QueryMeta: structs.QueryMeta{ + Index: 99, + }, + } + + updatedCtx, cancel := context.WithCancel(context.Background()) + testAC.mcfg.tlsCfg.On("UpdateAutoTLSCA", + []string{secondCA.RootCert, testAC.initialRoots.Roots[0].RootCert}, + ).Return(nil).Once().Run(func(args mock.Arguments) { + cancel() + }) + + // when a cache event comes in we end up recalculating the fallback timer which requires this call + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(time.Now().Add(10 * time.Minute)).Once() + + req := structs.DCSpecificRequest{Datacenter: "dc1"} + require.True(t, testAC.mcfg.cache.sendNotification(context.Background(), req.CacheInfo().Key, cache.UpdateEvent{ + CorrelationID: rootsWatchID, + Result: &secondRoots, + Meta: cache.ResultMeta{ + Index: secondRoots.Index, + }, + })) + + require.True(t, waitForChans(100*time.Millisecond, updatedCtx.Done()), "TLS certificates were not updated within the alotted time") +} + +func TestAutoEncrypt_CertUpdate(t *testing.T) { + testAC := startedAutoConfig(t, true) + secondCert := newLeaf(t, "autoconf", "dc1", testAC.initialRoots.Roots[0], 99, 10*time.Minute) + + updatedCtx, cancel := context.WithCancel(context.Background()) + testAC.mcfg.tlsCfg.On("UpdateAutoTLSCert", + secondCert.CertPEM, + "redacted", + ).Return(nil).Once().Run(func(args mock.Arguments) { + cancel() + }) + + // when a cache event comes in we end up recalculating the fallback timer which requires this call + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(secondCert.ValidBefore).Once() + + req := cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: testAC.originalToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + } + require.True(t, testAC.mcfg.cache.sendNotification(context.Background(), req.CacheInfo().Key, cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: secondCert, + Meta: cache.ResultMeta{ + Index: secondCert.ModifyIndex, + }, + })) + + require.True(t, waitForChans(100*time.Millisecond, updatedCtx.Done()), "TLS certificates were not updated within the alotted time") +} + +func TestAutoEncrypt_Fallback(t *testing.T) { + testAC := startedAutoConfig(t, true) + + // at this point everything is operating normally and we are just + // waiting for events. We are going to send a new cert that is basically + // already expired and then allow the fallback routine to kick in. + secondCert := newLeaf(t, "autoconf", "dc1", testAC.initialRoots.Roots[0], 100, time.Nanosecond) + secondCA := connect.TestCA(t, testAC.initialRoots.Roots[0]) + secondRoots := structs.IndexedCARoots{ + ActiveRootID: secondCA.ID, + TrustDomain: connect.TestClusterID, + Roots: []*structs.CARoot{ + secondCA, + testAC.initialRoots.Roots[0], + }, + QueryMeta: structs.QueryMeta{ + Index: 101, + }, + } + thirdCert := newLeaf(t, "autoconf", "dc1", secondCA, 102, 10*time.Minute) + + // setup the expectation for when the certs get updated initially + updatedCtx, updateCancel := context.WithCancel(context.Background()) + testAC.mcfg.tlsCfg.On("UpdateAutoTLSCert", + secondCert.CertPEM, + "redacted", + ).Return(nil).Once().Run(func(args mock.Arguments) { + updateCancel() + }) + + // when a cache event comes in we end up recalculating the fallback timer which requires this call + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(secondCert.ValidBefore).Once() + testAC.mcfg.tlsCfg.On("AutoEncryptCertExpired").Return(true).Once() + + fallbackCtx, fallbackCancel := context.WithCancel(context.Background()) + + // also testing here that we can change server IPs for ongoing operations + testAC.mcfg.serverProvider.On("FindLANServer").Once().Return(&metadata.Server{ + Addr: &net.TCPAddr{IP: net.IPv4(198, 18, 23, 2), Port: 8300}, + }) + + // after sending the notification for the cert update another InitialConfiguration RPC + // will be made to pull down the latest configuration. So we need to set up the response + // for the second RPC + populateResponse := func(args mock.Arguments) { + resp, ok := args.Get(5).(*structs.SignedResponse) + require.True(t, ok) + *resp = structs.SignedResponse{ + VerifyServerHostname: true, + ConnectCARoots: secondRoots, + IssuedCert: *thirdCert, + ManualCARoots: testAC.extraCerts, + } + + fallbackCancel() + } + + expectedRequest := structs.CASignRequest{ + WriteRequest: structs.WriteRequest{Token: testAC.originalToken}, + Datacenter: "dc1", + // TODO (autoconf) Maybe in the future we should populate a CSR + // and do some manual parsing/verification of the contents. The + // bits not having to do with the signing key such as the requested + // SANs and CN. For now though the mockDirectRPC type will empty + // the CSR so we have to pass in an empty string to the expectation. + CSR: "", + } + + // the fallback routine to perform auto-encrypt again will need to grab this + testAC.mcfg.tokens.On("AgentToken").Return(testAC.originalToken).Once() + + testAC.mcfg.directRPC.On( + "RPC", + "dc1", + "autoconf", + &net.TCPAddr{IP: net.IPv4(198, 18, 23, 2), Port: 8300}, + "AutoEncrypt.Sign", + &expectedRequest, + &structs.SignedResponse{}).Return(nil).Run(populateResponse).Once() + + testAC.mcfg.expectInitialTLS(t, "autoconf", "dc1", testAC.originalToken, secondCA, &secondRoots, thirdCert, testAC.extraCerts) + + // after the second RPC we now will use the new certs validity period in the next run loop iteration + testAC.mcfg.tlsCfg.On("AutoEncryptCertNotAfter").Return(time.Now().Add(10 * time.Minute)).Once() + + // now that all the mocks are set up we can trigger the whole thing by sending the second expired cert + // as a cache update event. + req := cachetype.ConnectCALeafRequest{ + Datacenter: "dc1", + Agent: "autoconf", + Token: testAC.originalToken, + DNSSAN: defaultDNSSANs, + IPSAN: defaultIPSANs, + } + require.True(t, testAC.mcfg.cache.sendNotification(context.Background(), req.CacheInfo().Key, cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: secondCert, + Meta: cache.ResultMeta{ + Index: secondCert.ModifyIndex, + }, + })) + + // wait for the TLS certificates to get updated + require.True(t, waitForChans(100*time.Millisecond, updatedCtx.Done()), "TLS certificates were not updated within the alotted time") + + // now wait for the fallback routine to be invoked + require.True(t, waitForChans(100*time.Millisecond, fallbackCtx.Done()), "fallback routines did not get invoked within the alotted time") +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/config.go consul-1.8.7+dfsg1/agent/auto-config/config.go --- consul-1.7.4+dfsg1/agent/auto-config/config.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,106 @@ +package autoconf + +import ( + "context" + "net" + "time" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/metadata" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/go-hclog" +) + +// DirectRPC is the interface that needs to be satisifed for AutoConfig to be able to perform +// direct RPCs against individual servers. This will not be used for any ongoing RPCs as once +// the agent gets configured, it can go through the normal RPC means of selecting a available +// server automatically. +type DirectRPC interface { + RPC(dc string, node string, addr net.Addr, method string, args interface{}, reply interface{}) error +} + +// Cache is an interface to represent the methods of the +// agent/cache.Cache struct that we care about +type Cache interface { + Notify(ctx context.Context, t string, r cache.Request, correlationID string, ch chan<- cache.UpdateEvent) error + Prepopulate(t string, result cache.FetchResult, dc string, token string, key string) error +} + +// ServerProvider is an interface that can be used to find one server in the local DC known to +// the agent via Gossip +type ServerProvider interface { + FindLANServer() *metadata.Server +} + +// TLSConfigurator is an interface of the methods on the tlsutil.Configurator that we will require at +// runtime. +type TLSConfigurator interface { + UpdateAutoTLS(manualCAPEMs, connectCAPEMs []string, pub, priv string, verifyServerHostname bool) error + UpdateAutoTLSCA([]string) error + UpdateAutoTLSCert(pub, priv string) error + AutoEncryptCertNotAfter() time.Time + AutoEncryptCertExpired() bool +} + +// TokenStore is an interface of the methods we will need to use from the token.Store. +type TokenStore interface { + AgentToken() string + UpdateAgentToken(secret string, source token.TokenSource) bool + Notify(kind token.TokenKind) token.Notifier + StopNotify(notifier token.Notifier) +} + +// Config contains all the tunables for AutoConfig +type Config struct { + // Logger is any logger that should be utilized. If not provided, + // then no logs will be emitted. + Logger hclog.Logger + + // DirectRPC is the interface to be used by AutoConfig to make the + // AutoConfig.InitialConfiguration RPCs for generating the bootstrap + // configuration. Setting this field is required. + DirectRPC DirectRPC + + // ServerProvider is the interfaced to be used by AutoConfig to find any + // known servers during fallback operations. + ServerProvider ServerProvider + + // Waiter is a RetryWaiter to be used during retrieval of the + // initial configuration. When a round of requests fails we will + // wait and eventually make another round of requests (1 round + // is trying the RPC once against each configured server addr). The + // waiting implements some backoff to prevent from retrying these RPCs + // to often. This field is not required and if left unset a waiter will + // be used that has a max wait duration of 10 minutes and a randomized + // jitter of 25% of the wait time. Setting this is mainly useful for + // testing purposes to allow testing out the retrying functionality without + // having the test take minutes/hours to complete. + Waiter *lib.RetryWaiter + + // Loader merges source with the existing FileSources and returns the complete + // RuntimeConfig. + Loader func(source config.Source) (cfg *config.RuntimeConfig, warnings []string, err error) + + // TLSConfigurator is the shared TLS Configurator. AutoConfig will update the + // auto encrypt/auto config certs as they are renewed. + TLSConfigurator TLSConfigurator + + // Cache is an object implementing our Cache interface. The Cache + // used at runtime must be able to handle Roots and Leaf Cert watches + Cache Cache + + // FallbackLeeway is the amount of time after certificate expiration before + // invoking the fallback routine. If not set this will default to 10s. + FallbackLeeway time.Duration + + // FallbackRetry is the duration between Fallback invocations when the configured + // fallback routine returns an error. If not set this will default to 1m. + FallbackRetry time.Duration + + // Tokens is the shared token store. It is used to retrieve the current + // agent token as well as getting notifications when that token is updated. + // This field is required. + Tokens TokenStore +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/config_translate.go consul-1.8.7+dfsg1/agent/auto-config/config_translate.go --- consul-1.7.4+dfsg1/agent/auto-config/config_translate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/config_translate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,193 @@ +package autoconf + +import ( + "fmt" + + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/proto" + "github.com/hashicorp/consul/proto/pbautoconf" + "github.com/hashicorp/consul/proto/pbconfig" + "github.com/hashicorp/consul/proto/pbconnect" + "github.com/mitchellh/mapstructure" +) + +// translateAgentConfig is meant to take in a proto/pbconfig.Config type +// and craft the corresponding agent/config.Config type. The need for this function +// should eventually be removed with the protobuf and normal version converging. +// In the meantime, its not desirable to have the flatter Config struct in protobufs +// as in the long term we want a configuration with more nested groupings. +// +// Why is this function not in the proto/pbconfig package? The answer, that +// package cannot import the agent/config package without running into import cycles. +func translateConfig(c *pbconfig.Config) config.Config { + result := config.Config{ + Datacenter: stringPtrOrNil(c.Datacenter), + PrimaryDatacenter: stringPtrOrNil(c.PrimaryDatacenter), + NodeName: stringPtrOrNil(c.NodeName), + // only output the SegmentName in the configuration if its non-empty + // this will avoid a warning later when parsing the persisted configuration + SegmentName: stringPtrOrNil(c.SegmentName), + } + + if a := c.AutoEncrypt; a != nil { + result.AutoEncrypt = config.AutoEncrypt{ + TLS: &a.TLS, + DNSSAN: a.DNSSAN, + IPSAN: a.IPSAN, + AllowTLS: &a.AllowTLS, + } + } + + if a := c.ACL; a != nil { + result.ACL = config.ACL{ + Enabled: &a.Enabled, + PolicyTTL: stringPtrOrNil(a.PolicyTTL), + RoleTTL: stringPtrOrNil(a.RoleTTL), + TokenTTL: stringPtrOrNil(a.TokenTTL), + DownPolicy: stringPtrOrNil(a.DownPolicy), + DefaultPolicy: stringPtrOrNil(a.DefaultPolicy), + EnableKeyListPolicy: &a.EnableKeyListPolicy, + DisabledTTL: stringPtrOrNil(a.DisabledTTL), + EnableTokenPersistence: &a.EnableTokenPersistence, + } + + if t := c.ACL.Tokens; t != nil { + tokens := make([]config.ServiceProviderToken, 0, len(t.ManagedServiceProvider)) + for _, mspToken := range t.ManagedServiceProvider { + tokens = append(tokens, config.ServiceProviderToken{ + AccessorID: &mspToken.AccessorID, + SecretID: &mspToken.SecretID, + }) + } + + result.ACL.Tokens = config.Tokens{ + Master: stringPtrOrNil(t.Master), + Replication: stringPtrOrNil(t.Replication), + AgentMaster: stringPtrOrNil(t.AgentMaster), + Default: stringPtrOrNil(t.Default), + Agent: stringPtrOrNil(t.Agent), + ManagedServiceProvider: tokens, + } + } + } + + if g := c.Gossip; g != nil { + result.RetryJoinLAN = g.RetryJoinLAN + + if e := c.Gossip.Encryption; e != nil { + result.EncryptKey = stringPtrOrNil(e.Key) + result.EncryptVerifyIncoming = &e.VerifyIncoming + result.EncryptVerifyOutgoing = &e.VerifyOutgoing + } + } + + if t := c.TLS; t != nil { + result.VerifyOutgoing = &t.VerifyOutgoing + result.VerifyServerHostname = &t.VerifyServerHostname + result.TLSMinVersion = stringPtrOrNil(t.MinVersion) + result.TLSCipherSuites = stringPtrOrNil(t.CipherSuites) + result.TLSPreferServerCipherSuites = &t.PreferServerCipherSuites + } + + return result +} + +func stringPtrOrNil(v string) *string { + if v == "" { + return nil + } + return &v +} + +func extractSignedResponse(resp *pbautoconf.AutoConfigResponse) (*structs.SignedResponse, error) { + roots, err := translateCARootsToStructs(resp.CARoots) + if err != nil { + return nil, err + } + + cert, err := translateIssuedCertToStructs(resp.Certificate) + if err != nil { + return nil, err + } + + out := &structs.SignedResponse{ + IssuedCert: *cert, + ConnectCARoots: *roots, + ManualCARoots: resp.ExtraCACertificates, + } + + if resp.Config != nil && resp.Config.TLS != nil { + out.VerifyServerHostname = resp.Config.TLS.VerifyServerHostname + } + + return out, err +} + +// translateCARootsToStructs will create a structs.IndexedCARoots object from the corresponding +// protobuf struct. Those structs are intended to be identical so the conversion just uses +// mapstructure to go from one to the other. +func translateCARootsToStructs(in *pbconnect.CARoots) (*structs.IndexedCARoots, error) { + var out structs.IndexedCARoots + if err := mapstructureTranslateToStructs(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + + return &out, nil +} + +// translateIssuedCertToStructs will create a structs.IssuedCert object from the corresponding +// protobuf struct. Those structs are intended to be identical so the conversion just uses +// mapstructure to go from one to the other. +func translateIssuedCertToStructs(in *pbconnect.IssuedCert) (*structs.IssuedCert, error) { + var out structs.IssuedCert + if err := mapstructureTranslateToStructs(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + + return &out, nil +} + +func mapstructureTranslateToStructs(in interface{}, out interface{}) error { + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: proto.HookPBTimestampToTime, + Result: out, + }) + + if err != nil { + return err + } + + return decoder.Decode(in) +} + +func translateCARootsToProtobuf(in *structs.IndexedCARoots) (*pbconnect.CARoots, error) { + var out pbconnect.CARoots + if err := mapstructureTranslateToProtobuf(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + + return &out, nil +} + +func translateIssuedCertToProtobuf(in *structs.IssuedCert) (*pbconnect.IssuedCert, error) { + var out pbconnect.IssuedCert + if err := mapstructureTranslateToProtobuf(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + + return &out, nil +} + +func mapstructureTranslateToProtobuf(in interface{}, out interface{}) error { + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: proto.HookTimeToPBTimestamp, + Result: out, + }) + + if err != nil { + return err + } + + return decoder.Decode(in) +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/config_translate_test.go consul-1.8.7+dfsg1/agent/auto-config/config_translate_test.go --- consul-1.7.4+dfsg1/agent/auto-config/config_translate_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/config_translate_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,162 @@ +package autoconf + +import ( + "fmt" + "testing" + + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/structs" + pbconfig "github.com/hashicorp/consul/proto/pbconfig" + "github.com/hashicorp/consul/proto/pbconnect" + "github.com/stretchr/testify/require" +) + +func stringPointer(s string) *string { + return &s +} + +func boolPointer(b bool) *bool { + return &b +} + +func translateCARootToProtobuf(in *structs.CARoot) (*pbconnect.CARoot, error) { + var out pbconnect.CARoot + if err := mapstructureTranslateToProtobuf(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + return &out, nil +} + +func mustTranslateCARootToProtobuf(t *testing.T, in *structs.CARoot) *pbconnect.CARoot { + out, err := translateCARootToProtobuf(in) + require.NoError(t, err) + return out +} + +func mustTranslateCARootsToStructs(t *testing.T, in *pbconnect.CARoots) *structs.IndexedCARoots { + out, err := translateCARootsToStructs(in) + require.NoError(t, err) + return out +} + +func mustTranslateCARootsToProtobuf(t *testing.T, in *structs.IndexedCARoots) *pbconnect.CARoots { + out, err := translateCARootsToProtobuf(in) + require.NoError(t, err) + return out +} + +func mustTranslateIssuedCertToProtobuf(t *testing.T, in *structs.IssuedCert) *pbconnect.IssuedCert { + out, err := translateIssuedCertToProtobuf(in) + require.NoError(t, err) + return out +} + +func TestTranslateConfig(t *testing.T) { + original := pbconfig.Config{ + Datacenter: "abc", + PrimaryDatacenter: "def", + NodeName: "ghi", + SegmentName: "jkl", + ACL: &pbconfig.ACL{ + Enabled: true, + PolicyTTL: "1s", + RoleTTL: "2s", + TokenTTL: "3s", + DownPolicy: "deny", + DefaultPolicy: "deny", + EnableKeyListPolicy: true, + DisabledTTL: "4s", + EnableTokenPersistence: true, + MSPDisableBootstrap: false, + Tokens: &pbconfig.ACLTokens{ + Master: "99e7e490-6baf-43fc-9010-78b6aa9a6813", + Replication: "51308d40-465c-4ac6-a636-7c0747edec89", + AgentMaster: "e012e1ea-78a2-41cc-bc8b-231a44196f39", + Default: "8781a3f5-de46-4b45-83e1-c92f4cfd0332", + Agent: "ddb8f1b0-8a99-4032-b601-87926bce244e", + ManagedServiceProvider: []*pbconfig.ACLServiceProviderToken{ + { + AccessorID: "23f37987-7b9e-4e5b-acae-dbc9bc137bae", + SecretID: "e28b820a-438e-4e2b-ad24-fe59e6a4914f", + }, + }, + }, + }, + AutoEncrypt: &pbconfig.AutoEncrypt{ + TLS: true, + DNSSAN: []string{"dns"}, + IPSAN: []string{"198.18.0.1"}, + AllowTLS: false, + }, + Gossip: &pbconfig.Gossip{ + RetryJoinLAN: []string{"10.0.0.1"}, + Encryption: &pbconfig.GossipEncryption{ + Key: "blarg", + VerifyOutgoing: true, + VerifyIncoming: true, + }, + }, + TLS: &pbconfig.TLS{ + VerifyOutgoing: true, + VerifyServerHostname: true, + CipherSuites: "stuff", + MinVersion: "tls13", + PreferServerCipherSuites: true, + }, + } + + expected := config.Config{ + Datacenter: stringPointer("abc"), + PrimaryDatacenter: stringPointer("def"), + NodeName: stringPointer("ghi"), + SegmentName: stringPointer("jkl"), + RetryJoinLAN: []string{"10.0.0.1"}, + EncryptKey: stringPointer("blarg"), + EncryptVerifyIncoming: boolPointer(true), + EncryptVerifyOutgoing: boolPointer(true), + VerifyOutgoing: boolPointer(true), + VerifyServerHostname: boolPointer(true), + TLSCipherSuites: stringPointer("stuff"), + TLSMinVersion: stringPointer("tls13"), + TLSPreferServerCipherSuites: boolPointer(true), + ACL: config.ACL{ + Enabled: boolPointer(true), + PolicyTTL: stringPointer("1s"), + RoleTTL: stringPointer("2s"), + TokenTTL: stringPointer("3s"), + DownPolicy: stringPointer("deny"), + DefaultPolicy: stringPointer("deny"), + EnableKeyListPolicy: boolPointer(true), + DisabledTTL: stringPointer("4s"), + EnableTokenPersistence: boolPointer(true), + Tokens: config.Tokens{ + Master: stringPointer("99e7e490-6baf-43fc-9010-78b6aa9a6813"), + Replication: stringPointer("51308d40-465c-4ac6-a636-7c0747edec89"), + AgentMaster: stringPointer("e012e1ea-78a2-41cc-bc8b-231a44196f39"), + Default: stringPointer("8781a3f5-de46-4b45-83e1-c92f4cfd0332"), + Agent: stringPointer("ddb8f1b0-8a99-4032-b601-87926bce244e"), + ManagedServiceProvider: []config.ServiceProviderToken{ + { + AccessorID: stringPointer("23f37987-7b9e-4e5b-acae-dbc9bc137bae"), + SecretID: stringPointer("e28b820a-438e-4e2b-ad24-fe59e6a4914f"), + }, + }, + }, + }, + AutoEncrypt: config.AutoEncrypt{ + TLS: boolPointer(true), + DNSSAN: []string{"dns"}, + IPSAN: []string{"198.18.0.1"}, + AllowTLS: boolPointer(false), + }, + } + + translated := translateConfig(&original) + require.Equal(t, expected, translated) +} + +func TestCArootsTranslation(t *testing.T) { + _, indexedRoots, _ := testCerts(t, "autoconf", "dc1") + protoRoots := mustTranslateCARootsToProtobuf(t, indexedRoots) + require.Equal(t, indexedRoots, mustTranslateCARootsToStructs(t, protoRoots)) +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/mock_test.go consul-1.8.7+dfsg1/agent/auto-config/mock_test.go --- consul-1.7.4+dfsg1/agent/auto-config/mock_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/mock_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,337 @@ +package autoconf + +import ( + "context" + "net" + "sync" + "testing" + "time" + + "github.com/hashicorp/consul/agent/cache" + cachetype "github.com/hashicorp/consul/agent/cache-types" + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/metadata" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/proto/pbautoconf" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/stretchr/testify/mock" +) + +type mockDirectRPC struct { + mock.Mock +} + +func newMockDirectRPC(t *testing.T) *mockDirectRPC { + m := mockDirectRPC{} + m.Test(t) + return &m +} + +func (m *mockDirectRPC) RPC(dc string, node string, addr net.Addr, method string, args interface{}, reply interface{}) error { + var retValues mock.Arguments + if method == "AutoConfig.InitialConfiguration" { + req := args.(*pbautoconf.AutoConfigRequest) + csr := req.CSR + req.CSR = "" + retValues = m.Called(dc, node, addr, method, args, reply) + req.CSR = csr + } else if method == "AutoEncrypt.Sign" { + req := args.(*structs.CASignRequest) + csr := req.CSR + req.CSR = "" + retValues = m.Called(dc, node, addr, method, args, reply) + req.CSR = csr + } else { + retValues = m.Called(dc, node, addr, method, args, reply) + } + + return retValues.Error(0) +} + +type mockTLSConfigurator struct { + mock.Mock +} + +func newMockTLSConfigurator(t *testing.T) *mockTLSConfigurator { + m := mockTLSConfigurator{} + m.Test(t) + return &m +} + +func (m *mockTLSConfigurator) UpdateAutoTLS(manualCAPEMs, connectCAPEMs []string, pub, priv string, verifyServerHostname bool) error { + if priv != "" { + priv = "redacted" + } + + ret := m.Called(manualCAPEMs, connectCAPEMs, pub, priv, verifyServerHostname) + return ret.Error(0) +} + +func (m *mockTLSConfigurator) UpdateAutoTLSCA(pems []string) error { + ret := m.Called(pems) + return ret.Error(0) +} +func (m *mockTLSConfigurator) UpdateAutoTLSCert(pub, priv string) error { + if priv != "" { + priv = "redacted" + } + ret := m.Called(pub, priv) + return ret.Error(0) +} +func (m *mockTLSConfigurator) AutoEncryptCertNotAfter() time.Time { + ret := m.Called() + ts, _ := ret.Get(0).(time.Time) + + return ts +} +func (m *mockTLSConfigurator) AutoEncryptCertExpired() bool { + ret := m.Called() + return ret.Bool(0) +} + +type mockServerProvider struct { + mock.Mock +} + +func newMockServerProvider(t *testing.T) *mockServerProvider { + m := mockServerProvider{} + m.Test(t) + return &m +} + +func (m *mockServerProvider) FindLANServer() *metadata.Server { + ret := m.Called() + srv, _ := ret.Get(0).(*metadata.Server) + return srv +} + +type mockWatcher struct { + ch chan<- cache.UpdateEvent + done <-chan struct{} +} + +type mockCache struct { + mock.Mock + + lock sync.Mutex + watchers map[string][]mockWatcher +} + +func newMockCache(t *testing.T) *mockCache { + m := mockCache{ + watchers: make(map[string][]mockWatcher), + } + m.Test(t) + return &m +} + +func (m *mockCache) Notify(ctx context.Context, t string, r cache.Request, correlationID string, ch chan<- cache.UpdateEvent) error { + ret := m.Called(ctx, t, r, correlationID, ch) + + err := ret.Error(0) + if err == nil { + m.lock.Lock() + key := r.CacheInfo().Key + m.watchers[key] = append(m.watchers[key], mockWatcher{ch: ch, done: ctx.Done()}) + m.lock.Unlock() + } + return err +} + +func (m *mockCache) Prepopulate(t string, result cache.FetchResult, dc string, token string, key string) error { + var restore string + cert, ok := result.Value.(*structs.IssuedCert) + if ok { + // we cannot know what the private key is prior to it being injected into the cache. + // therefore redact it here and all mock expectations should take that into account + restore = cert.PrivateKeyPEM + cert.PrivateKeyPEM = "redacted" + } + + ret := m.Called(t, result, dc, token, key) + + if ok && restore != "" { + cert.PrivateKeyPEM = restore + } + return ret.Error(0) +} + +func (m *mockCache) sendNotification(ctx context.Context, key string, u cache.UpdateEvent) bool { + m.lock.Lock() + defer m.lock.Unlock() + + watchers, ok := m.watchers[key] + if !ok || len(m.watchers) < 1 { + return false + } + + var newWatchers []mockWatcher + + for _, watcher := range watchers { + select { + case watcher.ch <- u: + newWatchers = append(newWatchers, watcher) + case <-watcher.done: + // do nothing, this watcher will be removed from the list + case <-ctx.Done(): + // return doesn't matter here really, the test is being cancelled + return true + } + } + + // this removes any already cancelled watches from being sent to + m.watchers[key] = newWatchers + + return true +} + +type mockTokenStore struct { + mock.Mock +} + +func newMockTokenStore(t *testing.T) *mockTokenStore { + m := mockTokenStore{} + m.Test(t) + return &m +} + +func (m *mockTokenStore) AgentToken() string { + ret := m.Called() + return ret.String(0) +} + +func (m *mockTokenStore) UpdateAgentToken(secret string, source token.TokenSource) bool { + return m.Called(secret, source).Bool(0) +} + +func (m *mockTokenStore) Notify(kind token.TokenKind) token.Notifier { + ret := m.Called(kind) + n, _ := ret.Get(0).(token.Notifier) + return n +} + +func (m *mockTokenStore) StopNotify(notifier token.Notifier) { + m.Called(notifier) +} + +type mockedConfig struct { + Config + + directRPC *mockDirectRPC + serverProvider *mockServerProvider + cache *mockCache + tokens *mockTokenStore + tlsCfg *mockTLSConfigurator +} + +func newMockedConfig(t *testing.T) *mockedConfig { + directRPC := newMockDirectRPC(t) + serverProvider := newMockServerProvider(t) + mcache := newMockCache(t) + tokens := newMockTokenStore(t) + tlsCfg := newMockTLSConfigurator(t) + + // I am not sure it is well defined behavior but in testing it + // out it does appear like Cleanup functions can fail tests + // Adding in the mock expectations assertions here saves us + // a bunch of code in the other test functions. + t.Cleanup(func() { + if !t.Failed() { + directRPC.AssertExpectations(t) + serverProvider.AssertExpectations(t) + mcache.AssertExpectations(t) + tokens.AssertExpectations(t) + tlsCfg.AssertExpectations(t) + } + }) + + return &mockedConfig{ + Config: Config{ + DirectRPC: directRPC, + ServerProvider: serverProvider, + Cache: mcache, + Tokens: tokens, + TLSConfigurator: tlsCfg, + Logger: testutil.Logger(t), + }, + directRPC: directRPC, + serverProvider: serverProvider, + cache: mcache, + tokens: tokens, + tlsCfg: tlsCfg, + } +} + +func (m *mockedConfig) expectInitialTLS(t *testing.T, agentName, datacenter, token string, ca *structs.CARoot, indexedRoots *structs.IndexedCARoots, cert *structs.IssuedCert, extraCerts []string) { + var pems []string + for _, root := range indexedRoots.Roots { + pems = append(pems, root.RootCert) + } + + // we should update the TLS configurator with the proper certs + m.tlsCfg.On("UpdateAutoTLS", + extraCerts, + pems, + cert.CertPEM, + // auto-config handles the CSR and Key so our tests don't have + // a way to know that the key is correct or not. We do replace + // a non empty PEM with "redacted" so we can ensure that some + // certificate is being sent + "redacted", + true, + ).Return(nil).Once() + + rootRes := cache.FetchResult{Value: indexedRoots, Index: indexedRoots.QueryMeta.Index} + rootsReq := structs.DCSpecificRequest{Datacenter: datacenter} + + // we should prepopulate the cache with the CA roots + m.cache.On("Prepopulate", + cachetype.ConnectCARootName, + rootRes, + datacenter, + "", + rootsReq.CacheInfo().Key, + ).Return(nil).Once() + + leafReq := cachetype.ConnectCALeafRequest{ + Token: token, + Agent: agentName, + Datacenter: datacenter, + } + + // copy the cert and redact the private key for the mock expectation + // the actual private key will not correspond to the cert but thats + // because AutoConfig is generated a key/csr internally and sending that + // on up with the request. + copy := *cert + copy.PrivateKeyPEM = "redacted" + leafRes := cache.FetchResult{ + Value: ©, + Index: copy.RaftIndex.ModifyIndex, + State: cachetype.ConnectCALeafSuccess(ca.SigningKeyID), + } + + // we should prepopulate the cache with the agents cert + m.cache.On("Prepopulate", + cachetype.ConnectCALeafName, + leafRes, + datacenter, + token, + leafReq.Key(), + ).Return(nil).Once() + + // when prepopulating the cert in the cache we grab the token so + // we should expec that here + m.tokens.On("AgentToken").Return(token).Once() +} + +func (m *mockedConfig) setupInitialTLS(t *testing.T, agentName, datacenter, token string) (*structs.IndexedCARoots, *structs.IssuedCert, []string) { + ca, indexedRoots, cert := testCerts(t, agentName, datacenter) + + ca2 := connect.TestCA(t, nil) + extraCerts := []string{ca2.RootCert} + + m.expectInitialTLS(t, agentName, datacenter, token, ca, indexedRoots, cert, extraCerts) + return indexedRoots, cert, extraCerts +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/persist.go consul-1.8.7+dfsg1/agent/auto-config/persist.go --- consul-1.7.4+dfsg1/agent/auto-config/persist.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/persist.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +package autoconf + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + + "github.com/golang/protobuf/jsonpb" + "github.com/hashicorp/consul/proto/pbautoconf" +) + +const ( + // autoConfigFileName is the name of the file that the agent auto-config settings are + // stored in within the data directory + autoConfigFileName = "auto-config.json" +) + +var ( + pbMarshaler = &jsonpb.Marshaler{ + OrigName: false, + EnumsAsInts: false, + Indent: " ", + EmitDefaults: true, + } + + pbUnmarshaler = &jsonpb.Unmarshaler{ + AllowUnknownFields: false, + } +) + +func (ac *AutoConfig) readPersistedAutoConfig() (*pbautoconf.AutoConfigResponse, error) { + if ac.config.DataDir == "" { + // no data directory means we don't have anything to potentially load + return nil, nil + } + + path := filepath.Join(ac.config.DataDir, autoConfigFileName) + ac.logger.Debug("attempting to restore any persisted configuration", "path", path) + + content, err := ioutil.ReadFile(path) + if err == nil { + rdr := strings.NewReader(string(content)) + + var resp pbautoconf.AutoConfigResponse + if err := pbUnmarshaler.Unmarshal(rdr, &resp); err != nil { + return nil, fmt.Errorf("failed to decode persisted auto-config data: %w", err) + } + + ac.logger.Info("read persisted configuration", "path", path) + return &resp, nil + } + + if !os.IsNotExist(err) { + return nil, fmt.Errorf("failed to load %s: %w", path, err) + } + + // ignore non-existence errors as that is an indicator that we haven't + // performed the auto configuration before + return nil, nil +} + +func (ac *AutoConfig) persistAutoConfig(resp *pbautoconf.AutoConfigResponse) error { + // now that we know the configuration is generally fine including TLS certs go ahead and persist it to disk. + if ac.config.DataDir == "" { + ac.logger.Debug("not persisting auto-config settings because there is no data directory") + return nil + } + + serialized, err := pbMarshaler.MarshalToString(resp) + if err != nil { + return fmt.Errorf("failed to encode auto-config response as JSON: %w", err) + } + + path := filepath.Join(ac.config.DataDir, autoConfigFileName) + + err = ioutil.WriteFile(path, []byte(serialized), 0660) + if err != nil { + return fmt.Errorf("failed to write auto-config configurations: %w", err) + } + + ac.logger.Debug("auto-config settings were persisted to disk") + + return nil +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/run.go consul-1.8.7+dfsg1/agent/auto-config/run.go --- consul-1.7.4+dfsg1/agent/auto-config/run.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/run.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,192 @@ +package autoconf + +import ( + "context" + "fmt" + "time" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/structs" +) + +// handleCacheEvent is used to handle event notifications from the cache for the roots +// or leaf cert watches. +func (ac *AutoConfig) handleCacheEvent(u cache.UpdateEvent) error { + switch u.CorrelationID { + case rootsWatchID: + ac.logger.Debug("roots watch fired - updating CA certificates") + if u.Err != nil { + return fmt.Errorf("root watch returned an error: %w", u.Err) + } + + roots, ok := u.Result.(*structs.IndexedCARoots) + if !ok { + return fmt.Errorf("invalid type for roots watch response: %T", u.Result) + } + + return ac.updateCARoots(roots) + case leafWatchID: + ac.logger.Debug("leaf certificate watch fired - updating TLS certificate") + if u.Err != nil { + return fmt.Errorf("leaf watch returned an error: %w", u.Err) + } + + leaf, ok := u.Result.(*structs.IssuedCert) + if !ok { + return fmt.Errorf("invalid type for agent leaf cert watch response: %T", u.Result) + } + + return ac.updateLeafCert(leaf) + } + + return nil +} + +// handleTokenUpdate is used when a notification about the agent token being updated +// is received and various watches need cancelling/restarting to use the new token. +func (ac *AutoConfig) handleTokenUpdate(ctx context.Context) error { + ac.logger.Debug("Agent token updated - resetting watches") + + // TODO (autoencrypt) Prepopulate the cache with the new token with + // the existing cache entry with the old token. The certificate doesn't + // need to change just because the token has. However there isn't a + // good way to make that happen and this behavior is benign enough + // that I am going to push off implementing it. + + // the agent token has been updated so we must update our leaf cert watch. + // this cancels the current watches before setting up new ones + ac.cancelWatches() + + // recreate the chan for cache updates. This is a precautionary measure to ensure + // that we don't accidentally get notified for the new watches being setup before + // a blocking query in the cache returns and sends data to the old chan. In theory + // the code in agent/cache/watch.go should prevent this where we specifically check + // for context cancellation prior to sending the event. However we could cancel + // it after that check and finish setting up the new watches before getting the old + // events. Both the go routine scheduler and the OS thread scheduler would have to + // be acting up for this to happen. Regardless the way to ensure we don't get events + // for the old watches is to simply replace the chan we are expecting them from. + close(ac.cacheUpdates) + ac.cacheUpdates = make(chan cache.UpdateEvent, 10) + + // restart watches - this will be done with the correct token + cancelWatches, err := ac.setupCertificateCacheWatches(ctx) + if err != nil { + return fmt.Errorf("failed to restart watches after agent token update: %w", err) + } + ac.cancelWatches = cancelWatches + return nil +} + +// handleFallback is used when the current TLS certificate has expired and the normal +// updating mechanisms have failed to renew it quickly enough. This function will +// use the configured fallback mechanism to retrieve a new cert and start monitoring +// that one. +func (ac *AutoConfig) handleFallback(ctx context.Context) error { + ac.logger.Warn("agent's client certificate has expired") + // Background because the context is mainly useful when the agent is first starting up. + switch { + case ac.config.AutoConfig.Enabled: + resp, err := ac.getInitialConfiguration(ctx) + if err != nil { + return fmt.Errorf("error while retrieving new agent certificates via auto-config: %w", err) + } + + return ac.recordInitialConfiguration(resp) + case ac.config.AutoEncryptTLS: + reply, err := ac.autoEncryptInitialCerts(ctx) + if err != nil { + return fmt.Errorf("error while retrieving new agent certificate via auto-encrypt: %w", err) + } + return ac.setInitialTLSCertificates(reply) + default: + return fmt.Errorf("logic error: either auto-encrypt or auto-config must be enabled") + } +} + +// run is the private method to be spawn by the Start method for +// executing the main monitoring loop. +func (ac *AutoConfig) run(ctx context.Context, exit chan struct{}) { + // The fallbackTimer is used to notify AFTER the agents + // leaf certificate has expired and where we need + // to fall back to the less secure RPC endpoint just like + // if the agent was starting up new. + // + // Check 10sec (fallback leeway duration) after cert + // expires. The agent cache should be handling the expiration + // and renew it before then. + // + // If there is no cert, AutoEncryptCertNotAfter returns + // a value in the past which immediately triggers the + // renew, but this case shouldn't happen because at + // this point, auto_encrypt was just being setup + // successfully. + calcFallbackInterval := func() time.Duration { + certExpiry := ac.acConfig.TLSConfigurator.AutoEncryptCertNotAfter() + return certExpiry.Add(ac.acConfig.FallbackLeeway).Sub(time.Now()) + } + fallbackTimer := time.NewTimer(calcFallbackInterval()) + + // cleanup for once we are stopped + defer func() { + // cancel the go routines performing the cache watches + ac.cancelWatches() + // ensure we don't leak the timers go routine + fallbackTimer.Stop() + // stop receiving notifications for token updates + ac.acConfig.Tokens.StopNotify(ac.tokenUpdates) + + ac.logger.Debug("auto-config has been stopped") + + ac.Lock() + ac.cancel = nil + ac.running = false + // this should be the final cleanup task as its what notifies + // the rest of the world that this go routine has exited. + close(exit) + ac.Unlock() + }() + + for { + select { + case <-ctx.Done(): + ac.logger.Debug("stopping auto-config") + return + case <-ac.tokenUpdates.Ch: + ac.logger.Debug("handling a token update event") + + if err := ac.handleTokenUpdate(ctx); err != nil { + ac.logger.Error("error in handling token update event", "error", err) + } + case u := <-ac.cacheUpdates: + ac.logger.Debug("handling a cache update event", "correlation_id", u.CorrelationID) + + if err := ac.handleCacheEvent(u); err != nil { + ac.logger.Error("error in handling cache update event", "error", err) + } + + // reset the fallback timer as the certificate may have been updated + fallbackTimer.Stop() + fallbackTimer = time.NewTimer(calcFallbackInterval()) + case <-fallbackTimer.C: + // This is a safety net in case the cert doesn't get renewed + // in time. The agent would be stuck in that case because the watches + // never use the AutoEncrypt.Sign endpoint. + + // check auto encrypt client cert expiration + if ac.acConfig.TLSConfigurator.AutoEncryptCertExpired() { + if err := ac.handleFallback(ctx); err != nil { + ac.logger.Error("error when handling a certificate expiry event", "error", err) + fallbackTimer = time.NewTimer(ac.acConfig.FallbackRetry) + } else { + fallbackTimer = time.NewTimer(calcFallbackInterval()) + } + } else { + // this shouldn't be possible. We calculate the timer duration to be the certificate + // expiration time + some leeway (10s default). So whenever we get here the certificate + // should be expired. Regardless its probably worth resetting the timer. + fallbackTimer = time.NewTimer(calcFallbackInterval()) + } + } + } +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/server_addr.go consul-1.8.7+dfsg1/agent/auto-config/server_addr.go --- consul-1.7.4+dfsg1/agent/auto-config/server_addr.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/server_addr.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,111 @@ +package autoconf + +import ( + "fmt" + "net" + "strconv" + "strings" + + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/go-discover" + discoverk8s "github.com/hashicorp/go-discover/provider/k8s" + + "github.com/hashicorp/go-hclog" +) + +func (ac *AutoConfig) discoverServers(servers []string) ([]string, error) { + providers := make(map[string]discover.Provider) + for k, v := range discover.Providers { + providers[k] = v + } + providers["k8s"] = &discoverk8s.Provider{} + + disco, err := discover.New( + discover.WithUserAgent(lib.UserAgent()), + discover.WithProviders(providers), + ) + + if err != nil { + return nil, fmt.Errorf("Failed to create go-discover resolver: %w", err) + } + + var addrs []string + for _, addr := range servers { + switch { + case strings.Contains(addr, "provider="): + resolved, err := disco.Addrs(addr, ac.logger.StandardLogger(&hclog.StandardLoggerOptions{InferLevels: true})) + if err != nil { + ac.logger.Error("failed to resolve go-discover auto-config servers", "configuration", addr, "err", err) + continue + } + + addrs = append(addrs, resolved...) + ac.logger.Debug("discovered auto-config servers", "servers", resolved) + default: + addrs = append(addrs, addr) + } + } + + return addrs, nil +} + +// autoConfigHosts is responsible for taking the list of server addresses +// and resolving any go-discover provider invocations. It will then return +// a list of hosts. These might be hostnames and is expected that DNS resolution +// may be performed after this function runs. Additionally these may contain +// ports so SplitHostPort could also be necessary. +func (ac *AutoConfig) autoConfigHosts() ([]string, error) { + // use servers known to gossip if there are any + if ac.acConfig.ServerProvider != nil { + if srv := ac.acConfig.ServerProvider.FindLANServer(); srv != nil { + return []string{srv.Addr.String()}, nil + } + } + + addrs, err := ac.discoverServers(ac.config.AutoConfig.ServerAddresses) + if err != nil { + return nil, err + } + + if len(addrs) == 0 { + return nil, fmt.Errorf("no auto-config server addresses available for use") + } + + return addrs, nil +} + +// resolveHost will take a single host string and convert it to a list of TCPAddrs +// This will process any port in the input as well as looking up the hostname using +// normal DNS resolution. +func (ac *AutoConfig) resolveHost(hostPort string) []net.TCPAddr { + port := ac.config.ServerPort + host, portStr, err := net.SplitHostPort(hostPort) + if err != nil { + if strings.Contains(err.Error(), "missing port in address") { + host = hostPort + } else { + ac.logger.Warn("error splitting host address into IP and port", "address", hostPort, "error", err) + return nil + } + } else { + port, err = strconv.Atoi(portStr) + if err != nil { + ac.logger.Warn("Parsed port is not an integer", "port", portStr, "error", err) + return nil + } + } + + // resolve the host to a list of IPs + ips, err := net.LookupIP(host) + if err != nil { + ac.logger.Warn("IP resolution failed", "host", host, "error", err) + return nil + } + + var addrs []net.TCPAddr + for _, ip := range ips { + addrs = append(addrs, net.TCPAddr{IP: ip, Port: port}) + } + + return addrs +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/tls.go consul-1.8.7+dfsg1/agent/auto-config/tls.go --- consul-1.7.4+dfsg1/agent/auto-config/tls.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/tls.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,280 @@ +package autoconf + +import ( + "context" + "fmt" + "net" + + "github.com/hashicorp/consul/agent/cache" + cachetype "github.com/hashicorp/consul/agent/cache-types" + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/proto/pbautoconf" +) + +const ( + // ID of the roots watch + rootsWatchID = "roots" + + // ID of the leaf watch + leafWatchID = "leaf" + + unknownTrustDomain = "unknown" +) + +var ( + defaultDNSSANs = []string{"localhost"} + + defaultIPSANs = []net.IP{{127, 0, 0, 1}, net.ParseIP("::1")} +) + +func extractPEMs(roots *structs.IndexedCARoots) []string { + var pems []string + for _, root := range roots.Roots { + pems = append(pems, root.RootCert) + } + return pems +} + +// updateTLSFromResponse will update the TLS certificate and roots in the shared +// TLS configurator. +func (ac *AutoConfig) updateTLSFromResponse(resp *pbautoconf.AutoConfigResponse) error { + var pems []string + for _, root := range resp.GetCARoots().GetRoots() { + pems = append(pems, root.RootCert) + } + + err := ac.acConfig.TLSConfigurator.UpdateAutoTLS( + resp.ExtraCACertificates, + pems, + resp.Certificate.GetCertPEM(), + resp.Certificate.GetPrivateKeyPEM(), + resp.Config.GetTLS().GetVerifyServerHostname(), + ) + + if err != nil { + return fmt.Errorf("Failed to update the TLS configurator with new certificates: %w", err) + } + + return nil +} + +func (ac *AutoConfig) setInitialTLSCertificates(certs *structs.SignedResponse) error { + if certs == nil { + return nil + } + + if err := ac.populateCertificateCache(certs); err != nil { + return fmt.Errorf("error populating cache with certificates: %w", err) + } + + connectCAPems := extractPEMs(&certs.ConnectCARoots) + + err := ac.acConfig.TLSConfigurator.UpdateAutoTLS( + certs.ManualCARoots, + connectCAPems, + certs.IssuedCert.CertPEM, + certs.IssuedCert.PrivateKeyPEM, + certs.VerifyServerHostname, + ) + + if err != nil { + return fmt.Errorf("error updating TLS configurator with certificates: %w", err) + } + + return nil +} + +func (ac *AutoConfig) populateCertificateCache(certs *structs.SignedResponse) error { + cert, err := connect.ParseCert(certs.IssuedCert.CertPEM) + if err != nil { + return fmt.Errorf("Failed to parse certificate: %w", err) + } + + // prepolutate roots cache + rootRes := cache.FetchResult{Value: &certs.ConnectCARoots, Index: certs.ConnectCARoots.QueryMeta.Index} + rootsReq := ac.caRootsRequest() + // getting the roots doesn't require a token so in order to potentially share the cache with another + if err := ac.acConfig.Cache.Prepopulate(cachetype.ConnectCARootName, rootRes, ac.config.Datacenter, "", rootsReq.CacheInfo().Key); err != nil { + return err + } + + leafReq := ac.leafCertRequest() + + // prepolutate leaf cache + certRes := cache.FetchResult{ + Value: &certs.IssuedCert, + Index: certs.IssuedCert.RaftIndex.ModifyIndex, + State: cachetype.ConnectCALeafSuccess(connect.EncodeSigningKeyID(cert.AuthorityKeyId)), + } + if err := ac.acConfig.Cache.Prepopulate(cachetype.ConnectCALeafName, certRes, leafReq.Datacenter, leafReq.Token, leafReq.Key()); err != nil { + return err + } + + return nil +} + +func (ac *AutoConfig) setupCertificateCacheWatches(ctx context.Context) (context.CancelFunc, error) { + notificationCtx, cancel := context.WithCancel(ctx) + + rootsReq := ac.caRootsRequest() + err := ac.acConfig.Cache.Notify(notificationCtx, cachetype.ConnectCARootName, &rootsReq, rootsWatchID, ac.cacheUpdates) + if err != nil { + cancel() + return nil, err + } + + leafReq := ac.leafCertRequest() + err = ac.acConfig.Cache.Notify(notificationCtx, cachetype.ConnectCALeafName, &leafReq, leafWatchID, ac.cacheUpdates) + if err != nil { + cancel() + return nil, err + } + + return cancel, nil +} + +func (ac *AutoConfig) updateCARoots(roots *structs.IndexedCARoots) error { + switch { + case ac.config.AutoConfig.Enabled: + ac.Lock() + defer ac.Unlock() + var err error + ac.autoConfigResponse.CARoots, err = translateCARootsToProtobuf(roots) + if err != nil { + return err + } + + if err := ac.updateTLSFromResponse(ac.autoConfigResponse); err != nil { + return err + } + return ac.persistAutoConfig(ac.autoConfigResponse) + case ac.config.AutoEncryptTLS: + pems := extractPEMs(roots) + + if err := ac.acConfig.TLSConfigurator.UpdateAutoTLSCA(pems); err != nil { + return fmt.Errorf("failed to update Connect CA certificates: %w", err) + } + return nil + default: + return nil + } +} + +func (ac *AutoConfig) updateLeafCert(cert *structs.IssuedCert) error { + switch { + case ac.config.AutoConfig.Enabled: + ac.Lock() + defer ac.Unlock() + var err error + ac.autoConfigResponse.Certificate, err = translateIssuedCertToProtobuf(cert) + if err != nil { + return err + } + + if err := ac.updateTLSFromResponse(ac.autoConfigResponse); err != nil { + return err + } + return ac.persistAutoConfig(ac.autoConfigResponse) + case ac.config.AutoEncryptTLS: + if err := ac.acConfig.TLSConfigurator.UpdateAutoTLSCert(cert.CertPEM, cert.PrivateKeyPEM); err != nil { + return fmt.Errorf("failed to update the agent leaf cert: %w", err) + } + return nil + default: + return nil + } +} + +func (ac *AutoConfig) caRootsRequest() structs.DCSpecificRequest { + return structs.DCSpecificRequest{Datacenter: ac.config.Datacenter} +} + +func (ac *AutoConfig) leafCertRequest() cachetype.ConnectCALeafRequest { + return cachetype.ConnectCALeafRequest{ + Datacenter: ac.config.Datacenter, + Agent: ac.config.NodeName, + DNSSAN: ac.getDNSSANs(), + IPSAN: ac.getIPSANs(), + Token: ac.acConfig.Tokens.AgentToken(), + } +} + +// generateCSR will generate a CSR for an Agent certificate. This should +// be sent along with the AutoConfig.InitialConfiguration RPC or the +// AutoEncrypt.Sign RPC. The generated CSR does NOT have a real trust domain +// as when generating this we do not yet have the CA roots. The server will +// update the trust domain for us though. +func (ac *AutoConfig) generateCSR() (csr string, key string, err error) { + // We don't provide the correct host here, because we don't know any + // better at this point. Apart from the domain, we would need the + // ClusterID, which we don't have. This is why we go with + // unknownTrustDomain the first time. Subsequent CSRs will have the + // correct TrustDomain. + id := &connect.SpiffeIDAgent{ + // will be replaced + Host: unknownTrustDomain, + Datacenter: ac.config.Datacenter, + Agent: ac.config.NodeName, + } + + caConfig, err := ac.config.ConnectCAConfiguration() + if err != nil { + return "", "", fmt.Errorf("Cannot generate CSR: %w", err) + } + + conf, err := caConfig.GetCommonConfig() + if err != nil { + return "", "", fmt.Errorf("Failed to load common CA configuration: %w", err) + } + + if conf.PrivateKeyType == "" { + conf.PrivateKeyType = connect.DefaultPrivateKeyType + } + if conf.PrivateKeyBits == 0 { + conf.PrivateKeyBits = connect.DefaultPrivateKeyBits + } + + // Create a new private key + pk, pkPEM, err := connect.GeneratePrivateKeyWithConfig(conf.PrivateKeyType, conf.PrivateKeyBits) + if err != nil { + return "", "", fmt.Errorf("Failed to generate private key: %w", err) + } + + dnsNames := ac.getDNSSANs() + ipAddresses := ac.getIPSANs() + + // Create a CSR. + // + // The Common Name includes the dummy trust domain for now but Server will + // override this when it is signed anyway so it's OK. + cn := connect.AgentCN(ac.config.NodeName, unknownTrustDomain) + csr, err = connect.CreateCSR(id, cn, pk, dnsNames, ipAddresses) + if err != nil { + return "", "", err + } + + return csr, pkPEM, nil +} + +func (ac *AutoConfig) getDNSSANs() []string { + sans := defaultDNSSANs + switch { + case ac.config.AutoConfig.Enabled: + sans = append(sans, ac.config.AutoConfig.DNSSANs...) + case ac.config.AutoEncryptTLS: + sans = append(sans, ac.config.AutoEncryptDNSSAN...) + } + return sans +} + +func (ac *AutoConfig) getIPSANs() []net.IP { + sans := defaultIPSANs + switch { + case ac.config.AutoConfig.Enabled: + sans = append(sans, ac.config.AutoConfig.IPSANs...) + case ac.config.AutoEncryptTLS: + sans = append(sans, ac.config.AutoEncryptIPSAN...) + } + return sans +} diff -Nru consul-1.7.4+dfsg1/agent/auto-config/tls_test.go consul-1.8.7+dfsg1/agent/auto-config/tls_test.go --- consul-1.7.4+dfsg1/agent/auto-config/tls_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/auto-config/tls_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +package autoconf + +import ( + "testing" + "time" + + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/structs" + "github.com/stretchr/testify/require" +) + +func newLeaf(t *testing.T, agentName, datacenter string, ca *structs.CARoot, idx uint64, expiration time.Duration) *structs.IssuedCert { + t.Helper() + + pub, priv, err := connect.TestAgentLeaf(t, agentName, datacenter, ca, expiration) + require.NoError(t, err) + cert, err := connect.ParseCert(pub) + require.NoError(t, err) + + spiffeID, err := connect.ParseCertURI(cert.URIs[0]) + require.NoError(t, err) + + agentID, ok := spiffeID.(*connect.SpiffeIDAgent) + require.True(t, ok, "certificate doesn't have an agent leaf cert URI") + + return &structs.IssuedCert{ + SerialNumber: cert.SerialNumber.String(), + CertPEM: pub, + PrivateKeyPEM: priv, + ValidAfter: cert.NotBefore, + ValidBefore: cert.NotAfter, + Agent: agentID.Agent, + AgentURI: agentID.URI().String(), + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + RaftIndex: structs.RaftIndex{ + CreateIndex: idx, + ModifyIndex: idx, + }, + } +} + +func testCerts(t *testing.T, agentName, datacenter string) (*structs.CARoot, *structs.IndexedCARoots, *structs.IssuedCert) { + ca := connect.TestCA(t, nil) + ca.IntermediateCerts = make([]string, 0) + cert := newLeaf(t, agentName, datacenter, ca, 1, 10*time.Minute) + indexedRoots := structs.IndexedCARoots{ + ActiveRootID: ca.ID, + TrustDomain: connect.TestClusterID, + Roots: []*structs.CARoot{ + ca, + }, + QueryMeta: structs.QueryMeta{Index: 1}, + } + + return ca, &indexedRoots, cert +} diff -Nru consul-1.7.4+dfsg1/agent/bindata_assetfs.go consul-1.8.7+dfsg1/agent/bindata_assetfs.go --- consul-1.7.4+dfsg1/agent/bindata_assetfs.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/bindata_assetfs.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,14 +11,13 @@ // pkg/web_ui/assets/apple-touch-icon-72x72-da5dd17cb4f094262b19223464fc9541.png // pkg/web_ui/assets/apple-touch-icon-76x76-c5fff53d5f3e96dbd2fe49c5cc472022.png // pkg/web_ui/assets/apple-touch-icon-d2b583b1104a1e6810fb3984f8f132ae.png -// pkg/web_ui/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js -// pkg/web_ui/assets/codemirror/mode/javascript/javascript-a4c0d68244e6e74f9225801e5f9d724e.js -// pkg/web_ui/assets/codemirror/mode/ruby/ruby-61421add5f64c0fc261fe6049c3bd5d7.js -// pkg/web_ui/assets/codemirror/mode/yaml/yaml-5095f3345bc2424e97de59ad00ae167a.js +// pkg/web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js +// pkg/web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js +// pkg/web_ui/assets/codemirror/mode/yaml/yaml-86bec82a0f62e7a53eef41d44a8e4727.js // pkg/web_ui/assets/consul-logo-707625c5eb04f602ade1f89a8868a329.png -// pkg/web_ui/assets/consul-ui-1b984a2dd785945b71a755b88134c6c4.js -// pkg/web_ui/assets/consul-ui-a5fc236bd86696b34dfca653ff20b752.css -// pkg/web_ui/assets/css.escape-432357d359e6980aaec701dfabef34ba.js +// pkg/web_ui/assets/consul-ui-21d63b0298afc21debc0d574ec59049b.js +// pkg/web_ui/assets/consul-ui-97ec8a4278cddf4266ff5aa45bf84f69.css +// pkg/web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js // pkg/web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js // pkg/web_ui/assets/favicon-128-08e1368e84f412f6ad30279d849b1df9.png // pkg/web_ui/assets/favicon-16x16-672c31374646b24b235b9511857cdade.png @@ -34,10 +33,12 @@ // pkg/web_ui/assets/mstile-310x310-49242d1935854126c10457d1cdb1762b.png // pkg/web_ui/assets/mstile-70x70-08e1368e84f412f6ad30279d849b1df9.png // pkg/web_ui/assets/safari-pinned-tab.svg -// pkg/web_ui/assets/vendor-5b94eb6a11bff93d1247a342ee40dbf8.js -// pkg/web_ui/assets/vendor-9ea7d400c0cec7682e8871df14073823.css +// pkg/web_ui/assets/vendor-992465b8b230f89d4adce5f016543c4d.css +// pkg/web_ui/assets/vendor-d38f8b642cf98384d0f0a8760e75b259.js // pkg/web_ui/index.html +// pkg/web_ui/oidc/callback // pkg/web_ui/robots.txt +// pkg/web_ui/torii/redirect.html // DO NOT EDIT! package agent @@ -121,7 +122,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/android-chrome-192x192-501b0811835ea92d42937aaf9edfbe08.png", size: 18250, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/android-chrome-192x192-501b0811835ea92d42937aaf9edfbe08.png", size: 18250, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -141,7 +142,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/android-chrome-512x512-707625c5eb04f602ade1f89a8868a329.png", size: 58433, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/android-chrome-512x512-707625c5eb04f602ade1f89a8868a329.png", size: 58433, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -161,7 +162,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-114x114-49e20f98710f64b0cae7545628a94496.png", size: 15576, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-114x114-49e20f98710f64b0cae7545628a94496.png", size: 15576, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -181,7 +182,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-120x120-c9cc4fc809a6cbff9b9c261c70309819.png", size: 16251, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-120x120-c9cc4fc809a6cbff9b9c261c70309819.png", size: 16251, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -201,7 +202,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-144x144-ac561ffa84c7e8ce1fe68d70f1c16d1d.png", size: 20027, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-144x144-ac561ffa84c7e8ce1fe68d70f1c16d1d.png", size: 20027, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -221,7 +222,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-152x152-08c9aa1c11a83650b824e3549b33a832.png", size: 23769, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-152x152-08c9aa1c11a83650b824e3549b33a832.png", size: 23769, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -241,7 +242,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-57x57-ae96d6d27e61e25514af459bc8b20960.png", size: 5158, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-57x57-ae96d6d27e61e25514af459bc8b20960.png", size: 5158, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -261,7 +262,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-60x60-522fca33a44f77c679561313def843b9.png", size: 5522, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-60x60-522fca33a44f77c679561313def843b9.png", size: 5522, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -281,7 +282,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-72x72-da5dd17cb4f094262b19223464fc9541.png", size: 7289, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-72x72-da5dd17cb4f094262b19223464fc9541.png", size: 7289, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -301,7 +302,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-76x76-c5fff53d5f3e96dbd2fe49c5cc472022.png", size: 8031, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-76x76-c5fff53d5f3e96dbd2fe49c5cc472022.png", size: 8031, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -321,87 +322,67 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-d2b583b1104a1e6810fb3984f8f132ae.png", size: 8285, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-d2b583b1104a1e6810fb3984f8f132ae.png", size: 8285, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") +var _web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x7c\x7b\x7f\xdb\x38\xae\xe8\xff\xf9\x14\x36\x6f\xae\x86\xac\xe1\x87\x9c\xbe\xc2\x0c\xeb\xd3\xdd\x4d\x77\x3b\xdb\x69\xe7\x4c\xd3\xee\xce\xda\x9a\xae\x22\xd3\x89\x52\x59\xf2\x48\x72\x12\xd7\xd2\xfd\xec\xf7\xc7\xa7\x28\xdb\xe9\x74\xce\xd9\x7f\x6a\x0a\x04\x41\x10\x04\x40\x00\x64\x7a\x1b\xe6\x9d\x9b\x22\x4b\x93\x38\x2d\xd9\x62\x9d\x46\x65\x9c\xa5\x98\x6c\x05\x9c\xb3\x6d\x99\x87\x11\xa7\x0e\xbc\x86\xcd\x86\x6e\x6b\x28\x36\xcb\xcb\x2c\x29\x3e\xd1\x2d\xcf\xf3\x2c\xa7\x63\xf8\xe1\xfd\xbb\xb7\xef\xcb\x3c\x4e\xaf\xe8\x09\xbc\xbf\xf8\xf9\xf5\xdb\xbf\xd2\xc7\x12\xfa\x76\xbd\xbc\xe4\x39\x7d\x02\x6f\x3f\xfc\xf8\xa7\xf3\x9f\xe9\x53\x0d\x4d\x92\x37\x71\xc9\xf3\x30\xa1\xcf\xe0\xed\x87\x37\x6f\xe8\x73\xd9\xf1\xa7\x2c\x4b\x78\x98\x9a\xbe\x53\xb8\xf8\xf9\xc3\x39\xf5\x47\xf0\xea\xe5\x9b\xf7\xe7\xd4\xf7\x25\xd6\x05\xbf\x2f\xa9\xaf\xa6\xfd\x18\x26\x6b\x4e\xfd\x13\x38\x7f\xf7\x8a\xfa\x6a\xd2\x77\x97\x37\x3c\x2a\xa9\xff\x44\x7e\xbd\xcc\xf3\x70\x43\xfd\xa7\x80\xb6\x88\xfa\xcf\x00\xd5\x88\xfa\x6a\xba\x1f\xb9\xe0\xee\x4d\x5c\x94\xd4\x3f\x75\x20\x74\x3c\x02\x44\x11\x1d\xfb\x80\x00\xd1\xf1\x18\xd0\x14\xd1\xf1\x09\xa0\x00\xd1\xb1\x9a\xe4\x3c\xe1\x4b\x9e\x96\x72\xf0\xf8\x09\x1c\x87\x51\xc4\x57\x25\x1d\xc1\x31\x4f\xe7\xd4\xaf\xa1\xe4\xf9\x32\x4e\x43\x29\xa8\x31\x45\x52\x56\x08\x1e\x53\xa4\x04\x84\xe0\x29\x45\x4a\x2a\x08\x9e\x8b\xe6\x9b\x37\x08\xfc\x11\x45\x62\xcd\x08\x7c\x9f\x22\xb9\x6a\x04\xfe\x63\x8a\xce\xdf\xbd\x42\xe0\x3f\xa3\x68\x8b\xc0\x7f\x4e\x51\x8d\x60\xec\x53\x44\x11\x8c\xc7\x14\x01\x82\xf1\x09\x45\x53\x04\xe3\xc7\x14\x05\xa8\x86\x55\x9e\xcd\xd7\x72\xe7\x8a\x4f\x74\x3a\x82\xe9\x09\xf8\x01\x4c\x9f\xc8\x7f\x9f\xc9\x7f\x4f\x9d\x7f\xfd\x31\x8c\xc5\x8f\xc2\xfa\x96\x9f\x27\x6a\xc0\x13\x38\x09\x60\x3a\x1e\xc9\x1f\x5f\x13\x3b\x55\x5f\x4f\x15\xca\x53\x85\xa2\xa6\x1e\x8b\x01\x01\xac\x78\xbe\xc8\xf2\xe5\x4b\xc9\x61\xa3\x64\x1c\x4a\xc8\x21\x85\x18\x42\xa5\x87\x05\x0b\x07\x09\x4f\xaf\xca\xeb\xbe\x7f\x54\xdc\xc5\x65\x74\x8d\x63\xb2\x8d\xc2\x82\x77\x7c\x5a\x5e\xc7\xc5\xe0\x98\xf1\x41\xce\x57\x49\x18\x71\x3c\x9c\xcd\xf0\x6c\x56\x21\x32\xbc\x02\x74\xec\x23\xe2\xf6\xa4\x02\x38\x4b\xdb\xc0\x5c\x02\xf3\x36\xb0\x94\xc0\xb2\x0d\xbc\x95\xc0\xdb\x36\x70\x21\x81\x8b\x36\xf0\x52\x02\x2f\x11\x39\xba\xcc\x79\xf8\xf9\x48\x72\x3b\x36\xdc\x2a\x93\xc0\xbc\xd5\x7b\x62\x7a\xd3\x75\x92\xb8\x1d\x8f\x4d\x47\x77\xe4\x82\x9f\x58\xb0\xef\x82\x9f\xd2\x9c\x97\xeb\x3c\xed\xe8\xde\x70\x5a\xf4\xfd\x40\xf5\xf9\x76\x8e\x6d\xed\x8e\xf1\xed\x14\x1a\xdb\xed\xb3\xf3\x4c\x45\xe7\x38\x80\x70\x5a\x04\x6d\x94\xa7\x0d\x59\x50\x2d\x81\x1b\x4c\x47\x41\xc0\x64\x63\x87\xe4\x33\x77\x3a\x45\xb1\x3f\x0e\xbe\x3e\xe6\xb9\x65\xa3\x0d\x3f\x7d\x98\xf5\xf1\xc8\x65\xbd\xcd\xf3\xd8\x3f\xc8\xc3\x60\xb5\x2e\xae\xb1\xc0\x26\x75\x0d\x65\x78\x99\x70\x3a\xdd\x9e\xd0\x27\xf0\x98\x4e\x7d\xf0\xc7\x01\x3c\xa1\x4f\xe1\xa9\xfc\x38\x09\xe0\x19\x3d\x81\xe7\xe2\xe3\x34\x80\x53\xfa\x58\x18\xaf\xe8\x19\x05\xc2\x78\x45\xcb\x0f\xc0\x1f\x53\x81\x4c\xc7\xe0\x3f\xa1\xcf\xc0\x7f\x4a\x9f\x0b\x33\x16\xbd\x8f\x03\x61\xb4\xa2\xf5\x24\xa8\x61\xeb\xd3\xe9\x89\xfc\x55\x93\x3d\x35\xed\x31\x3c\x0b\x84\xc9\xab\xc6\x78\x6c\x1a\xba\xcb\x62\x3d\x37\x58\xcf\x0d\xd6\x73\x83\xf5\xbc\xc1\x3a\x35\x58\xa7\x06\xeb\xd4\x60\x9d\x36\x58\x72\x0d\xcf\x4d\x4b\xe1\xc9\x96\xe9\x6d\x30\x7d\x8b\xe9\x5b\x4c\xdf\x62\xfa\x0e\xe6\xd8\x62\x8e\x2d\xe6\xd8\x62\x8e\x1b\xcc\x13\x83\x78\x62\xf0\x4e\x0c\xda\x49\x83\xf5\xd8\x60\x3d\x36\x58\x8f\x0d\xd6\xe3\x06\xeb\x89\xc1\x7a\x62\xb0\x9e\x18\xac\x27\x0e\x6f\x96\xb5\x40\xb8\x55\xdd\x18\x9b\x86\xc6\xb1\xe8\x76\x25\x76\x21\x76\x1d\x72\x19\x27\xe2\x00\xb1\x3a\xe3\x4b\x1d\xf1\xc5\x2e\x9e\x8a\x93\x67\x3c\xa2\xfe\xa9\xc4\xfa\x5f\x29\xd6\x89\x38\x90\xbe\xaa\x54\x92\x25\x1f\xc6\x62\x09\x4f\xe8\x78\xac\x94\x6c\x0c\x8e\x6a\xf9\x56\xd6\xbe\x15\xb6\x6f\xa5\xed\x2b\x71\x4b\x56\xc6\x5a\xcc\x3e\x8c\x9f\x18\xe8\x58\xa8\xa9\x19\x25\xa9\x8e\x25\x7f\x63\x77\x06\xab\x97\xbe\x55\x4c\xdf\x6a\xa6\x2f\x55\x53\xd3\x7d\x6e\x39\x7e\x66\xa0\x63\x18\x5b\xb5\x1b\xbb\x6a\x67\x77\xdf\xb7\xdb\xef\xdb\xfd\xf7\x1f\xef\xef\xc2\x78\x44\xc7\xff\x11\xa9\x9f\x8c\x7e\xdf\x94\x15\x17\xd6\xd6\x7c\x6b\x6c\xbe\xb5\x36\xff\x34\xf8\x8f\x70\xe3\xff\x3e\x37\x8a\x07\xeb\x3c\xfc\x67\x0e\xd4\x9a\x85\xc2\xd5\x32\xb7\x4a\x3f\xf6\x83\x3a\x80\x39\x5f\x84\xeb\xa4\x54\xa7\x75\x41\xb7\xfe\x53\xa3\x46\xab\x30\x2f\xf8\xb9\x0c\x03\x9b\x43\x9c\x6c\xcb\xeb\x3c\xbb\xeb\xa4\xfc\xae\x23\xfb\x30\x27\x1a\xb5\x85\x25\x0e\xf8\x92\x09\x4f\x0c\x39\x9b\x8e\x02\x48\xd9\x54\x9c\x7f\x01\xc4\x6c\x1a\x40\x28\xbb\x06\xd2\x0f\x43\xc1\x10\x82\x8c\x8d\x20\x61\x23\x88\xd8\xe8\x48\xf6\x25\xfc\x9e\xe7\x83\x82\x97\xaf\xd3\xd5\xba\xc4\x9c\x80\x03\xde\x6c\x14\x81\xcd\x06\xf4\xaf\xea\x60\x0d\x0e\xdc\x66\xf1\xbc\x33\x62\x8c\xb5\xc6\x25\x49\x16\x79\x1e\xde\x83\xb1\x6d\x4d\x8e\x04\xd7\xeb\x7d\xfc\x23\xb3\xb2\xce\xc2\xc4\xd0\x47\xea\x30\x46\xa9\x3c\xf1\x51\x97\x95\x9b\x15\xcf\x16\x98\xb3\x52\x0f\x4d\xf8\x3d\x26\x55\xe5\x13\xcf\x93\x50\x13\x5a\x4f\x79\x50\x55\x9c\x00\xaf\x63\x75\x28\xad\x09\x20\x33\x01\x62\x9a\x50\xc7\x2c\xab\xd9\x05\xc3\x75\x03\x61\xfb\x48\xe4\x68\x91\xe5\x58\xb0\x78\x0d\x2b\x98\xc3\x06\x96\x70\x0b\x57\x70\x09\xf7\xf0\x19\xee\xd8\xb6\x3e\x3b\x23\xdb\x78\x81\xe7\x2c\x9f\xe6\x36\xfe\x0a\x94\x18\xdb\xca\x30\x9d\x07\x13\x2d\xe7\xbd\x0e\x8a\xc5\x6e\x32\x76\xed\x79\xf8\x9a\x2d\x30\x21\xb0\x61\xe1\x74\x1e\x78\x9e\xf8\x77\x7a\x1d\x90\x66\x03\x36\x55\xd5\xdd\xe8\xb9\x44\x73\x3a\x0a\x24\x0f\xdd\x88\x6c\x25\xbb\x9d\x38\xed\xdc\x4b\xbd\x98\xce\x03\xa2\x54\xc3\x86\xd8\xd3\xdb\xc0\xf3\x6e\x5f\x8c\x3d\xef\x5e\x09\x0c\x7d\x87\x7a\xfb\x38\x3d\xf4\x1d\x52\x3b\xf8\x89\x21\x74\xf4\xc9\xdd\xc6\xe2\x3a\xbb\xfb\x29\x2b\x62\xc1\xfd\x04\xfd\x24\xa4\xd5\x91\x41\x7b\x27\x4b\x3b\x49\x9c\xf2\x0e\xea\xe1\xac\xe7\x93\x1e\xa2\xb3\x54\x53\xdf\x1f\x8a\x49\x0f\xcd\xd2\xf3\xfb\x15\x8f\xca\x38\xbd\xea\xa0\xde\xfd\xe0\x26\x8b\x53\x8c\xa0\x83\x48\x0f\x41\xe7\x2a\x2b\x3b\x07\xb8\xbb\x96\xdc\xd1\xdf\x99\xb9\xf3\x21\xe5\x92\x36\x9f\x0b\xa8\xcf\xd8\xf5\x04\xf1\x74\xde\xc9\x16\x9d\x58\x18\x01\xa2\x62\xe9\x78\x9f\x7a\x55\x5d\x13\xb9\x7e\xd8\xd1\x10\xfc\x09\xb6\xa5\x48\xa9\x9c\x15\x2d\xc3\x32\xba\x86\x32\xfb\xcc\x53\x7a\x90\x14\x08\xbe\x68\xdb\x0a\xe2\x94\xa7\x19\x24\x59\x44\xd7\x60\x98\xa4\xf7\x35\xa9\xe3\x05\x3e\x61\x2c\x92\xfb\x29\x38\x26\xbb\xfe\xe1\x53\x55\xc9\x75\x0b\x81\x5d\x87\x49\xc9\xe7\x03\x44\x8e\x92\x1d\x2b\xe3\xe9\x15\x14\x6d\x98\xe0\x1b\x32\x76\x88\x8f\x03\x36\x0a\x52\x0b\x6b\xa1\x4e\x67\x5d\x3c\x1e\x0c\xca\x4c\xa5\xad\x98\xc4\x69\x47\xea\x95\x52\xfc\x11\x63\xf3\x6f\x64\xf2\x33\xf3\xc1\xd8\x08\xb3\xc6\x32\x7e\xf4\x19\x52\x03\x35\x8d\xfe\x67\x88\x0d\x2c\x6e\x60\x3b\x56\x56\xaf\xd8\x35\x5c\xb3\xb1\xb2\x95\x76\x9f\xb1\x9c\x71\x00\x11\x3b\x11\x72\x15\x76\x12\xa7\x45\x19\xa6\x91\xf0\x08\x32\xd9\xf5\x3c\x63\x48\x2f\xfc\xbd\x55\x68\xfd\x52\x3e\xbb\xb3\x5c\x27\x65\xbc\x4a\x78\x27\x54\x56\xdb\x59\x65\x45\x11\x5f\x0a\x40\xd9\x29\xca\xb0\xe4\xb4\x83\x7a\x73\xa1\xb6\x4a\x19\x3a\xa8\x77\x4d\x4c\x26\xa6\x8c\x54\x27\x63\xb9\x32\xbc\x6b\x02\xa9\x6a\xed\x6d\x14\x81\xf8\x40\x8f\xd8\x18\x02\x7a\xf4\x66\xea\x07\x04\xae\x65\x1a\x04\xab\x09\xbe\x66\x2b\x58\xc9\x2f\x42\xf1\x7f\x5e\x1f\xa2\x17\x23\xcf\x8b\xfa\xfd\x9d\x4c\x2d\x5e\xe0\x2b\x85\xed\xa6\xd1\x53\xc1\x9c\x48\x4d\xe0\x4e\x24\x6a\x53\xbb\xad\x57\x02\xf2\xe9\x98\x6d\x17\x71\x5e\x94\x9f\xa4\x65\xc4\x53\xbb\xc3\xf8\x4a\x78\xf8\x60\xd0\xf4\x42\x12\x1e\xc0\xf3\x83\x81\x85\x83\x42\x8e\xb2\x64\xbd\x4c\x1f\x26\xa6\xfa\x15\xb9\x7d\x5c\x43\x50\xf5\xd4\xda\xd7\x76\x19\xc3\x4b\xbd\x3a\x37\x0b\x1f\x44\x61\x92\xe0\x3b\x28\x20\x81\xcc\x9c\x98\x20\xd6\x2c\x12\x72\x42\x88\x4e\x2d\x97\x47\x57\x9e\x87\x73\x96\x0f\x8a\x24\x8e\x38\x1e\x41\xdf\x7f\x74\xf5\x68\x4c\x20\x65\x69\x0b\x46\x20\x66\x71\x1b\x62\x37\xfa\x21\xe9\x8e\x02\xab\x3f\x77\x83\x63\xab\x31\x42\xbe\x04\x2e\x59\x38\x75\xec\x61\x1c\x04\xd3\xb6\x79\x18\xea\x97\x3b\xc9\xb5\x62\xbd\x3b\xaa\xeb\xa6\x05\x87\x8a\x5e\xb2\x8a\x74\x38\xaa\x81\x52\x9d\x47\x07\xce\xd3\xfd\x70\xe7\x68\x1f\x4b\x52\xa8\xc1\x04\x2b\xad\x48\xc8\xcd\xda\x3f\x49\x37\xce\xb8\xda\x82\x4f\xcb\x2c\xe7\x6a\xb7\x3e\x25\xbc\xd0\xea\x3e\xcf\x52\xce\xba\xbe\xd9\x25\xa5\xe1\xe6\xa4\x17\xe2\x60\x23\xd3\x27\x2c\x42\xf5\x48\x9f\xce\xe7\xce\x87\x88\xa9\xe4\x57\x94\xa5\x73\x79\x7a\xbd\x2f\xc3\xe8\x33\x9b\xa2\xd7\x6f\x5f\x5f\xbc\x7e\xf9\x06\x05\x76\x0a\x19\xfe\x38\x0a\xee\xb7\x55\x74\xe4\xe8\xb4\xdf\x52\xc8\x91\x2a\x0b\xd4\x10\xb7\x97\x6d\x64\xee\x2c\x7a\x3a\x0a\x8e\x5c\x51\x28\xee\x7b\x46\x16\x6a\x69\xbd\x1e\x34\x2b\xb0\x7d\x7a\x71\xe2\x9b\xab\x0f\x3c\x9c\xa5\x43\xe2\x79\x2d\x19\x99\xc1\x5a\xc8\x4e\x5b\xeb\xa9\x2f\x82\x2e\x58\x7f\xd3\x0e\xf5\x9c\x2f\xbd\x46\xb1\x5b\xee\x12\x5b\xc3\xe4\x56\x76\x47\x1a\x55\xec\xe6\x4e\xd0\xbc\xc3\x98\x5c\x86\xe6\x8b\x13\x77\x36\x11\x4d\x17\xbb\x7a\xd4\x12\xa8\x96\xc7\xa0\x58\x5f\x16\x65\x8e\x47\x2d\x29\x19\x8b\x71\x66\x51\x10\xa2\xc5\x8f\xb9\x39\x40\xc6\xa3\x09\x1a\x0c\x06\x88\x22\x44\x7a\xdc\x90\xeb\x8f\x47\x6e\xc5\x4b\x56\xd6\x10\xa9\x61\xbd\x8a\xb2\x65\x9c\x5e\xfd\x2e\x67\x66\x9b\xcd\x3c\xdf\x8f\x47\x22\x04\xee\xb5\x77\xc4\xf0\x3e\x1e\xf5\x0d\x22\x21\x80\xb9\xdb\x43\x7a\x87\x99\x3d\xc8\x9f\x1b\xa8\x3d\xc0\x9e\x15\x2c\x26\x50\x32\x61\xd3\xf2\x4c\xb5\x93\xf4\x7c\xa2\xe3\xb9\x3e\x22\x76\x19\x6a\x73\x5a\xcb\x57\x81\x20\xea\x95\x3d\xf4\x2b\xaa\x21\x15\x11\x96\x33\x65\xbc\xc0\xd6\x94\x89\xab\x26\xe7\xef\x5e\xc9\x08\xd5\xd6\x42\x8f\x1c\x99\x54\x15\x76\x1c\xc0\x88\x38\x4e\xc2\x74\x69\x93\x37\xa6\x6d\x0c\xbd\x09\xfa\x75\x5e\xf5\x29\x5a\xe7\x39\x4f\xcb\x9f\xd7\x09\x2f\x30\x81\x82\x8d\xce\x8a\xef\x4d\xb9\xd5\xf3\x70\x17\xe7\xad\xed\x50\x56\x25\x21\xb9\x18\xa3\xea\x6a\x84\x54\x55\xe9\x79\x5d\x9c\x4f\x47\x81\xd9\x88\xb2\x69\x13\xc1\x17\xcb\x21\x65\x85\x62\x28\x5b\x49\x87\x3f\x58\x24\xfc\x9e\x90\xb3\xa2\xd7\x23\x67\x66\xfd\x13\x8c\x63\x26\x07\x5b\x13\x1e\x3c\x1a\x5e\x11\x62\xf2\x1a\x6b\xc7\x36\x80\x22\x0f\x7a\x28\x07\xee\x1c\xac\x8d\x9b\x6a\x13\xdc\xf1\x67\x7b\x83\x0f\x1d\xb5\x93\x9d\xc3\x56\xb7\x1e\x1a\xdc\x73\xc4\x52\x43\xcb\xc3\x89\x9e\x96\x5b\x6b\x00\xda\xa1\x3b\xe8\x9a\x84\x7b\x40\x98\xb3\xe0\x41\xbf\xe6\xee\xc8\x8e\xc7\x94\x53\xf1\x07\x23\x02\x99\x9f\xbb\x89\x34\x84\xd3\x34\x38\x74\x6e\x4c\x0f\xc0\x1a\xf1\xe8\x69\x85\xe6\x6a\xa7\xac\x18\x34\x5b\xab\xcf\x34\x02\xbc\xaa\x54\xa4\x42\x28\x42\x26\x35\x57\xb8\x13\x63\x21\x54\x62\xec\x26\x32\xe8\x0d\xbf\x8f\xa3\x30\xd9\xcf\x9e\x76\xf6\x9a\xf4\xd0\xa0\xf3\x21\xcd\x79\x94\x5d\xa5\xf1\x17\x3e\xef\x48\xb9\xda\xb4\xae\x9d\xd0\xe9\xf4\x48\x58\x94\x8c\x81\x65\x70\xba\xaf\x42\x35\x11\x4e\xfd\xfe\x01\xbf\x22\xec\x1f\x5b\x87\x61\x43\x31\x3e\x69\xb2\x28\x4c\x6a\xb8\xe4\x57\x71\xba\x7f\x2c\xec\x08\x55\x06\x39\xb2\xa8\x92\xad\xde\xcb\x28\xfd\x81\x33\x67\x77\x5c\xb6\x12\x93\xb4\x4c\xff\x77\x87\x16\x87\xf6\xf5\xeb\x7b\x1d\x28\x0f\x51\x43\xf9\x87\xf8\xfb\x1a\xd1\x71\x50\x83\x58\xf6\x0e\x39\x23\x20\x29\x37\x29\x12\xed\x5f\xe8\xb6\xfe\xea\x2d\x13\xd9\xea\x24\x26\xd7\x19\xcc\x88\xba\x37\x0b\xe6\x22\xe5\xa9\xc9\x09\x0c\xd7\x36\xa4\x32\xc6\xa8\xcf\x22\x1f\x4a\x6d\xaa\xfd\x31\x81\xc7\xed\xc8\xb3\xe3\x3f\x33\xd7\x39\x06\xf0\xdc\x5c\xe4\x68\xc0\xf8\x64\xe7\x0a\x67\xac\x69\x3c\xb3\x80\xb1\x02\x3c\xb7\x00\x5f\x01\x4e\x2d\xd1\x91\xe6\x7e\x64\x21\x1a\xc5\xb7\x0b\xd2\xf3\xfa\x76\x45\xfe\x63\x7b\x3f\xa4\xeb\x55\xaf\xdf\x7e\x7c\xf9\xe6\xf5\x5f\x50\x5d\x83\xdc\x46\x3a\x1d\xfe\x8a\x27\x74\x56\xf4\xc8\x10\x64\x13\xf7\x27\x78\x3a\xea\x9f\x06\xd5\xd4\xef\x9f\x06\xb2\xd9\x23\x04\xcf\x06\xba\x39\xc1\x53\x7e\x1e\x4c\xfb\xbd\x60\x62\x20\xb3\x4b\x33\x1a\x09\x62\xb3\xe9\x6c\x86\x2e\x17\x69\x5e\x0e\x83\x6a\x36\x5b\x4f\xc3\xfe\xe2\x65\xff\x95\x40\xde\x3e\xae\xab\xe9\xaf\xb3\xd9\x6c\xd4\x9f\xdd\x8f\x4e\x67\xf7\xa3\xb0\x3f\xbb\xf7\x17\x28\x20\x8f\x90\x21\x32\xdb\xda\x56\x6d\x5b\x53\xdb\x0a\x4c\x0b\x4c\x83\x9a\x46\x99\xaf\x79\xc3\xcc\x22\x4c\x0a\xe7\x53\xd8\x76\xf3\x75\x6c\x1a\x03\x32\x0c\xa0\xb1\x08\xba\xd5\x01\x32\xdd\x6a\x09\x8d\xc0\x87\x31\x9c\xc0\x63\x78\x02\x4f\xe1\x19\x3c\x87\x53\xf0\x47\xe0\xfb\xe0\xab\x8a\x7a\x9c\x46\xc9\xba\x88\x6f\x39\x15\xc9\x47\x6d\x23\x87\xba\x71\x0a\xdc\xd4\x27\x41\x42\xd1\x3a\x9d\xf3\x45\x9c\xf2\xb9\x2d\x1d\x76\x72\xfe\xdb\x3a\xce\xb9\xe7\x1d\xea\xe4\xf7\xab\x2c\x2f\x0b\x11\x48\xa9\x96\xf2\x8d\x39\x33\xb7\xfc\xd0\x82\xb3\x7d\x9b\x34\x88\x0a\x61\x10\xae\x56\xc9\x06\xdb\xd1\x61\x7e\xb5\x5e\xf2\xb4\x2c\x48\x6d\x29\x2d\xc3\x38\x65\xae\x35\x8a\x14\x89\x8b\x2c\x7e\xaf\xf0\xf0\xa1\x08\xaf\x64\x39\x81\x4f\x47\x41\x0f\x75\x5e\xbd\x7e\x73\x8e\xc8\x51\xbc\xc0\x87\x16\xb3\xca\xb3\x88\x17\x05\x51\x45\x62\xbd\x6e\x8c\x16\x85\xbc\x6b\x0d\xe7\xaf\xe2\x84\xbf\xdf\xa4\x11\xb6\x5d\xab\xb0\xbc\x46\x3a\x38\xd3\xa3\x07\xd1\xdd\x1c\x13\x90\xfc\x00\x5a\x97\x8b\xe7\x88\x1c\xf1\xa4\xe0\x2d\x92\x71\xc2\x11\x19\x88\xe1\x78\x17\x28\xc7\x6b\x9a\x92\x8a\x9c\x1b\x6f\xa3\x6b\x21\xa0\x92\x0a\x9a\xfd\xe7\xa8\x6e\xf6\xb0\x25\x79\xf5\x83\x45\xde\x77\x68\x8d\xcb\x6c\xbe\x4e\xb8\xe7\xe9\x59\x95\x30\x19\x33\x60\x57\xc6\x5f\x93\xd1\xc4\xac\x36\xcc\xaf\x6e\x6d\x1e\x43\xed\x5a\x8a\x4d\x51\xf2\x25\x22\xa2\xbf\x20\x04\xdc\xed\x42\x99\x7c\x2c\xd1\xd4\x94\xad\x12\xed\xf5\x28\xb6\x26\xbc\x11\xd2\x60\x30\x1c\x0c\x86\x49\x7c\x39\x8c\xb2\x39\x5f\xc6\xf2\x89\x03\x21\xf4\x40\xa9\x5a\xf1\xee\x79\xea\x77\x10\x2e\xe7\x13\xd5\xc4\xd3\xc3\x64\x02\xe0\x84\x72\xfc\xe7\x6c\xce\x7f\x94\x10\x52\x63\xdc\xe2\x7c\x5d\xf0\x4e\x51\xe6\x71\x54\xa2\xa6\xf8\x5e\x1a\xef\xae\xf6\x43\x1a\x6f\xb6\xe2\x79\x58\x66\x79\x55\x64\x8b\xea\x33\xdf\xdc\x65\xf9\xbc\x13\x55\xc2\xeb\x55\x29\xbf\xab\xa6\xb3\xe9\xb6\x9e\x61\x38\xa3\x41\xc5\x5e\x90\xe3\xe1\xa0\xe4\x45\x89\x4b\x19\xbb\x5d\x6c\x56\x9c\x54\x15\xfa\x6d\x1d\x16\xb1\x58\x8f\x85\x7a\xde\x70\xb6\x9d\x15\x8f\x0c\x3e\x1f\x14\xb2\x98\x68\x2b\x1e\x7c\xb0\xca\x8a\x3e\xce\xab\x6a\x44\x08\xa9\xf9\x40\xad\xf8\xc7\x6c\xce\x31\xba\x09\x6f\xc3\x22\xca\xe3\x55\x89\xa0\x59\x57\x0e\xa9\x8a\x1a\x62\x08\xa1\x60\xf9\x20\x4e\xe7\x3c\x2d\x3f\xa4\x71\x09\x19\x4b\x07\xb2\x24\x27\x6c\xf0\xb5\x84\x43\xc2\xd2\x81\xb4\xcf\x39\x44\xba\x59\x55\x09\xac\x59\x3a\x10\x82\x57\x13\xc0\x82\xa5\x03\xb1\xe8\x3f\x5f\x87\x79\x18\x95\x3c\x2f\xaa\x6a\x38\x9d\xdd\x1d\xcf\xee\x43\xbf\x3f\x5b\x2f\x16\x8b\x45\x30\x84\x6b\xd7\x23\x58\x89\xf2\x26\xfd\xdd\x0a\x9a\x94\x43\x51\x6e\x12\x4e\x91\x16\x25\xaa\x6b\x65\xa4\x1c\x1b\x50\x27\x44\x04\x72\x17\x70\x89\x08\xa4\x2e\x20\x42\x04\x62\x01\x30\xbb\x83\x08\x84\x4c\xcd\x80\xc2\x32\x5b\x22\x33\x8d\xfc\xa8\xa1\x60\xdb\x78\x41\x39\x46\xf1\x02\x11\xb8\xbb\x8e\x13\x4e\x4b\xb8\x8b\xcb\x6b\x5a\x82\xb0\x69\x9a\xc3\x3c\xa3\x39\x94\xf9\x86\xe6\xb0\x88\xd3\x30\x49\x44\x4b\xf1\x4e\x53\x90\xe7\x3b\x4d\x85\x1f\x2f\xe3\x74\xcd\x69\x0a\x29\xbf\x13\x24\x53\x7e\x87\x08\xcc\x79\xc2\x4b\x01\x95\xae\x8b\xa6\x30\xe7\x97\xeb\xab\x2b\x9e\xd3\x14\x6e\xc3\x5c\x20\xde\x86\x82\xcf\x28\x4b\x8b\xb2\xf9\x4c\xb8\xf3\x61\xe4\x26\x20\xd6\x0c\x08\x44\x22\xda\x16\x30\xd9\x10\x78\x99\x24\xb8\x90\x0b\x57\xa1\x88\xf8\x56\x2d\x39\xa0\xe0\x0a\xbf\xe0\x92\x37\x79\xb9\x22\x20\xba\x29\xe4\x97\xd2\x18\x94\x81\xd1\x18\x9a\x32\xb0\x80\xe6\x6b\x4e\x43\x90\xa7\x1b\x0d\x41\x1c\x6b\x34\x04\xeb\x43\x68\x08\x6f\xc3\xb7\x34\x84\xd7\xe9\x22\x4e\xe3\x72\x43\x43\x19\x9e\x0b\xfa\xe2\x57\x30\x90\x84\x85\xfc\x96\x0d\xc1\xe4\x7a\xc5\x25\xcf\x72\x43\x08\x6c\x62\x9e\xcc\x69\xaa\x8f\x02\xd1\xa1\x5a\x82\xb1\xa5\x01\xa9\x16\x22\xc0\xef\x4b\x9e\xce\x0b\x9a\x42\x78\x17\xc6\xa5\xf8\x2d\x36\x69\x24\xe9\x89\x06\x22\xb5\x38\x0a\xd6\x4a\xfd\x33\xa3\x09\xb7\x61\x1e\x87\x97\x09\xb7\xda\x60\x00\xfd\x13\x54\x43\xc2\xb6\x71\x5a\xf2\x7c\x11\x46\xdc\x65\x35\x5e\xae\xd4\xf3\x2c\x31\x5f\x1a\x2e\x79\xb1\x12\x18\x29\x28\x1f\x26\x50\x55\x4b\x30\x96\xae\x97\x2d\xc0\x6a\x7d\x99\xc4\x91\x06\xc5\x8b\x98\x8b\x1d\x5a\xe5\xf1\xad\x08\x3c\x77\xa1\x59\xa9\xae\x39\xda\xf0\x50\x84\x84\x61\x54\xee\x82\x0b\x1a\x83\x72\x12\x34\x03\x75\x2d\x48\x33\xb8\x54\xaf\xde\x68\x06\x61\xba\xa1\x59\x6d\x33\xf5\xa8\x13\xa7\x9d\x84\x14\xd3\x28\x60\xc9\x34\x0a\x74\xf5\xb2\x53\xd4\x98\xc0\x8a\x0d\xa7\xbd\x59\xff\x91\xf7\x7f\xd9\xf7\x2f\xba\x93\xea\xff\xfd\x1a\x0c\x61\xce\x86\xbf\xfe\x17\x16\x0a\xce\xef\xcb\x2a\x9e\x57\xb7\x61\xb2\xe6\x55\x12\xa6\x57\xeb\xf0\x8a\x57\x42\xa8\x95\xe8\x0e\xe3\x94\xe7\x55\x12\x17\x65\x55\xf0\xb2\xca\xf9\x2d\xcf\x0b\x5e\x09\x77\x73\x5f\x5d\x0a\xcf\x78\x9b\x45\xe1\x65\x75\x95\x87\xab\x6b\x82\x86\x8d\x87\xdd\xb4\x3d\x6c\x27\x66\x1c\x42\x96\x43\x59\x5b\x94\x25\xe6\x02\x41\x2c\x21\x15\x46\x6e\x92\x9f\x78\x81\xbf\x43\xdf\x31\x16\x57\x15\xfa\x0e\x31\x16\x9b\xc2\x47\x3e\x90\x99\x55\xfc\x85\x33\x9c\xb2\x18\xda\x55\x57\x41\x27\x87\x98\x75\x7d\x41\x21\xf1\x3c\xf4\x5f\x88\x31\x3e\x58\x71\xfe\x19\x13\xcf\x33\x05\xbf\xb9\xad\x51\x97\x0d\xbd\x25\x6c\x30\x52\x2e\xb2\x6f\x1c\x16\xa0\x25\x2f\x43\x5d\x12\x39\x13\xb6\xd1\x65\x38\xb7\x7c\x12\xcf\xc3\x79\x97\xa5\x55\x15\x93\x33\x12\xb3\x6e\xec\x79\x68\x36\x43\x8c\xe5\xe6\x98\x8f\xab\x0a\xbb\x93\x10\x31\x8b\xda\x59\x04\xa6\x41\x6a\x02\xcd\xca\xa4\x4c\x64\xb4\x33\x10\x4b\x6f\xd8\x1e\xfe\x3a\x9b\xf7\xf0\x84\xca\x88\xb9\x37\xeb\x07\x93\xd9\xbc\x47\x26\x43\xbb\x9a\x0d\x36\x57\xc8\x60\x1a\x07\x09\xa1\xc1\x00\xb9\x83\x8a\x95\x08\x56\x9a\xd5\xc6\x0b\x3c\x9c\xce\xa6\xb3\x40\x9c\x76\x33\x02\x67\x33\x3a\x1b\x04\xfa\xf4\x8a\x9d\x91\xb1\x22\xcf\x0c\x79\x1e\x96\x18\xbd\x68\xd1\x66\x2f\x10\x38\xae\x5b\xe2\x8f\x5c\xfc\xe1\xfd\xb0\x21\x29\x41\xff\x10\x2e\x5b\x70\x30\x0f\xfb\x8b\x60\x18\x4b\x99\x1d\x5e\x58\x9b\x52\xf6\x10\xa5\x51\xff\xd9\x1f\xa1\x73\xf9\x20\x1d\xff\xab\x64\x86\xb3\xf9\x9e\x90\xdc\xcd\x7b\x24\x12\x8e\xc1\x6c\xfe\x88\x4c\x0e\x6d\xe3\xc3\xec\x0d\x5d\x1b\xd0\x62\x7e\x84\xc8\x04\x3b\xf6\x70\x0b\xb7\x52\x73\x08\xd5\x08\x43\x81\xc0\x07\xc5\xe7\x78\x75\x91\x9d\xa7\x22\xbe\xdd\x60\x14\x65\x4b\xe1\xef\x10\xd8\x16\x21\x54\x04\x43\x39\xf8\x64\xd2\x0a\x9c\x8c\x77\x29\x21\x67\x5d\x1f\x52\xd6\xf5\x8d\x0d\x94\x8d\x0d\xa8\x8b\xd0\x6e\x2e\x7f\x24\xa7\xa5\xe7\x75\x53\xcd\xed\x11\x9a\x0a\xc8\x24\x65\xdd\x11\x4d\x3d\x0f\x05\x0a\x01\x0b\x6a\xa4\xce\x59\x37\x37\x36\x53\xd6\x35\xe6\x04\x1c\x81\x5d\x62\x3c\xbd\x8a\x97\x9b\x75\x40\xf0\xa4\xab\x9b\x8f\x66\x63\x42\x7a\xb3\x4b\x25\xaf\x9c\x5f\xf1\xfb\x95\x35\xa5\xfe\x58\x2c\x07\x3b\x9b\xb6\x92\x68\x56\x01\x1d\x5d\x04\x3e\xd0\xe5\x0d\x4c\x88\x92\xf3\xbf\x1f\xf0\x35\x57\x70\xd5\x58\xe5\xff\x69\x6f\xc6\x8e\x7c\xf5\xf3\x5d\xfd\x2b\x47\xac\xf6\x75\xe2\x8f\xb2\x27\xc8\x2c\x2c\x99\xad\x43\x60\xa1\x9e\x29\x84\xcc\x41\x87\x82\x5d\x0f\x56\xb9\x20\x55\x6e\x5e\x17\xe7\xe9\x7a\xc9\x73\x71\x16\xe2\x90\x78\xde\xf5\x34\xb4\xb7\x27\x22\x7c\x1f\xa0\x2e\xcb\x6d\xb0\x3a\xd9\xe0\x42\x86\x84\x50\x0c\xe4\x49\x0a\x21\xa1\x1b\xec\x9c\xaf\x4e\x33\x24\x75\xe3\xcc\x6f\x95\x13\x36\x5a\x93\x2b\x85\x69\xbc\xe5\x59\xa3\x21\xb9\xe7\xa5\x64\xeb\xfa\x45\x75\x0d\x57\xa7\x0c\x3d\x12\xfd\x75\xe3\x40\x0e\x28\x6c\x33\xe7\xd5\xc1\x39\xf7\x1d\xb5\x56\xd2\xd4\xf3\xd4\x26\xe7\x55\x85\x8e\x15\x23\xda\x5a\xb6\x88\x90\x07\x58\x12\xc3\xb4\x5b\x77\xf8\x52\x71\xbe\xa3\x78\xad\x0d\x6b\x58\xbc\x54\x2c\x96\x83\x45\x58\xbe\xcc\xf3\xec\xee\xa5\xac\x64\x3a\x9f\xea\xda\x5a\x6e\xa3\x60\x59\x27\x07\xf2\x84\x7d\xb7\x50\x1e\x54\x40\xc3\xbc\x94\x7a\xd0\xc5\xf9\xf7\x23\xd2\x2c\x3a\x65\x23\x79\xe6\x89\xc3\xb5\xef\x9f\x85\x2f\xd8\xe8\xac\xdf\xb7\xef\xa2\x2d\x41\x91\x8a\xbe\x2c\x71\x48\x20\x63\x08\x4f\xb7\x75\x40\x90\x9d\xa5\x90\xa4\xb3\x17\x6c\xe4\x79\xd9\xf7\x27\x5a\x5c\x64\xdb\xeb\x85\x5a\x0e\xea\xb5\x43\xbf\x9f\x12\xf5\x2d\xb3\x63\x35\xe6\x44\x8c\x79\x4a\x7a\xbd\xf4\xc8\x40\xb5\xb2\x16\x44\x1c\x8b\x23\x09\xde\xca\x63\x05\x7d\x37\x1b\x9a\xa3\xa4\x30\x16\x21\xe6\x8e\xa5\xd7\x70\x26\xac\x6b\x09\xda\x15\x96\xd0\x39\xb1\xb2\x7b\xb6\x15\xf1\x25\xed\x8e\x4c\x80\xd4\x1d\x81\x51\x4d\xd1\xd6\xf1\x53\x77\x04\xca\x49\x50\x7d\xa3\x26\x7e\x77\x0f\x7a\xda\x1d\xd5\x4d\xe4\xf2\xb9\xfd\xbe\x5c\xd6\x0d\x55\x7e\xc5\xe7\xe6\x1e\x51\x55\xea\x99\xba\xcf\x93\x06\x23\x42\x1b\x75\x59\xcd\x6f\x59\x0c\x7a\xd4\x22\x63\x2a\xaa\xee\xb2\xd4\x54\xb0\xc3\x24\xbe\x4a\x59\xea\x28\xc9\xdd\x8e\x1e\x33\x3e\x48\xb2\x28\x4c\x3e\x86\x79\x71\x96\x9f\xe5\x2c\x97\x9a\x4c\xe2\x05\xce\x07\x22\x4e\x65\xac\x24\xe6\x8a\xfa\xa8\xd1\x04\x3e\xd0\x21\xdd\x59\x7a\x96\xb2\x54\xf2\x42\x44\x77\xce\xd2\xc1\xed\xb7\x10\xab\xd5\xa3\xa7\xad\x7a\xd3\x21\x2b\xd8\xfa\x16\x43\xb6\x97\x61\xfe\x99\xcf\x35\x3c\x92\xbf\x8e\xe0\xce\x71\xb3\x06\xce\x6c\x19\xc8\xd6\x7b\xcf\xb8\x50\x4e\xde\xef\x93\x4f\x83\x28\xd2\xcf\xa8\x0d\xd6\x94\x07\x8e\x44\x6e\x9a\x62\xd3\xb9\xae\x2f\xc9\x49\x9b\xda\x12\x74\x47\x0d\xfa\x7b\x79\x60\x35\xc9\x7d\x4b\x98\xe5\x03\xab\xe6\x8d\x08\x75\xc3\xaf\xd5\x88\x4f\x2a\x81\x16\x7a\xf9\x69\xa0\xd6\xcc\x44\x3e\x85\x20\x37\x12\x56\x37\x73\x38\x6f\x36\xca\x6a\xb3\x03\x63\x5b\x31\x15\xe5\xea\x5a\xcf\xe9\xa8\x6b\x63\x13\x82\xc6\x55\x92\x5d\xee\x10\x49\x1d\xa0\x88\x33\x9d\xcf\x5d\xa2\x4d\x4f\xad\x8d\xe3\xb5\x46\x51\x39\x9a\xc2\xd3\x10\x2b\x40\x54\x3b\x3b\x77\x8c\xc9\x56\x2f\xda\x2c\x90\x6d\x85\xf6\xd0\x1d\xa8\x30\xb1\xc2\x02\x9b\xe5\xc0\x1e\x88\xbd\x6e\xb6\xe7\xa5\x43\xbe\x41\xd8\x21\x2d\x15\x14\x76\xb9\xd8\x45\x12\x4c\x35\x84\x7f\x74\x22\xff\xdd\x67\x1a\x76\x1b\x21\xb5\x05\x12\x3e\x97\x67\xb8\x00\x0b\x7f\x3e\x48\xd4\x45\x90\x34\x60\x92\x3a\x00\x8b\x2e\x3d\x9a\xd1\xa5\xb8\xc1\x38\x13\xc1\x3e\x11\xb1\x80\x1c\xec\x79\xb1\xb2\xeb\xb3\x98\xc5\xca\xee\x52\x16\x37\x64\xec\x38\x79\x55\xfc\x19\xa7\x72\xa1\x39\x0f\x97\xda\x95\x60\x02\x5c\x3a\x0a\xb0\xa8\x50\x12\x5b\xff\x95\x40\x26\x9c\x59\xb3\xf8\xb7\xf6\xe6\xc8\xe8\x2b\xb7\xfc\x0b\x0e\xc4\x69\x47\x64\x06\xe4\x2e\xd3\xf3\x30\x77\xdc\xd9\xde\x8a\x45\x08\x66\x78\x6d\xd3\x73\xcc\xf3\x9d\xf3\xd6\xc1\x31\xbb\x26\xdb\xcb\x19\xe3\x93\x1b\x4c\x28\x3a\x13\x1c\x4c\xce\x31\xa1\x37\xb8\x74\x03\x86\x8f\x6a\xef\xf4\x65\xc2\x6d\x98\x23\x35\xe6\x47\x19\x6d\x48\x6b\x2b\xed\x55\x64\xc8\xe1\x1d\x46\x67\x88\xc0\x5b\x42\x9d\xf2\x91\x1d\xb2\xc8\xf2\x25\x22\x70\x01\x1f\x5b\x18\x97\x7b\x18\xaa\x7f\xdb\xc0\x6b\x91\xdc\x73\x09\x3d\x43\x96\xed\x78\x21\xdb\x18\x09\x05\x40\xcc\xea\x61\x23\xae\x45\xe6\x79\x56\x3b\xa3\x69\xd3\x6c\xee\xb7\x18\x7b\xeb\xe2\xa8\x7b\x35\x4c\x60\x8f\x63\x58\xf3\x9d\x7a\xa8\x60\x63\xc9\x05\x2c\xcb\xf7\xd6\xb0\xe0\x7a\x19\x36\x16\xb3\x18\x52\xb5\x09\xfc\x85\x50\x53\x23\xda\x17\x91\x5c\x34\x34\x35\xa4\x77\x32\xfe\x91\x42\x90\x54\x65\x2d\x49\x0d\xbb\x10\x9d\x54\x16\x6b\x4d\x3d\x49\x75\x58\xb0\x2a\x54\xed\x4e\x72\x2c\xc6\x61\x44\xe0\x56\x6e\x1c\x51\x82\x87\x97\x62\x80\x2c\xbe\xec\x0e\xb8\x52\x3b\xa0\x4b\x43\xbb\xcb\xb9\x53\xbd\xba\x4a\xb4\xdb\xfb\x49\xf5\xea\xca\xcc\x2e\xe5\x82\x83\xde\xe5\xdd\x75\xaa\x82\x92\xc2\xff\x48\xe8\xb9\x43\xf2\xa2\x51\xb7\x46\x63\x2f\x1c\xad\x7f\x83\x39\x88\x14\xc6\x76\x7e\xd9\xed\x1c\x39\x9d\x6f\xec\xbb\x30\xa3\x0d\x4e\x48\xc3\xac\x2b\x50\x51\x9e\xf6\x5e\xe5\xe4\x1f\xf4\xcf\xd2\x5d\x61\xd4\x1c\x56\x9d\x1b\x7c\x2c\xd6\x23\x24\xfa\x0b\x2e\x38\xc8\xd6\x5b\xc1\x2e\x7b\x81\x08\xe4\xf0\x52\xe5\x29\xae\x6a\x98\xb1\xe7\xf8\x58\x88\xc3\xc5\xad\x55\xe4\x50\x4e\x5e\xd1\x1f\x8c\xb3\xb9\x1f\x5c\x87\xc5\xbb\xbb\xf4\x27\x9d\x43\x60\x4e\x26\x37\x38\x3d\xa4\xa0\x90\x3a\xc6\x66\x64\x59\x4e\x7e\xa2\xbf\x11\xaa\xf8\x56\x7b\x21\x98\xfc\x0d\x5e\x5a\x65\x78\x2b\x07\xda\x6c\x87\x31\x5e\x55\xa6\x10\x61\x88\x7c\xa1\x17\x84\xca\x04\x52\x13\x09\x10\x81\xd7\x5c\x8f\x55\x16\xfc\x2f\xfc\x77\x10\xca\x2c\x3d\xa7\x00\x9b\xfa\xbb\x70\x39\x1f\x24\x24\xe5\x77\x9a\xc4\x81\x87\x5a\x16\xd4\x78\xa2\x81\xcc\x58\x6f\x30\x9f\xfc\x95\xfe\x49\x68\x05\x97\x9c\xd4\x35\x2e\x89\x70\x62\xce\xb6\xfe\xe6\x50\xb2\x89\xeb\xf4\x6c\x56\xcf\xc8\x2c\x80\x60\x48\xa4\xdf\x3b\xc7\x17\xce\x98\x9f\xbe\x71\xcc\x17\x67\xcc\x0f\x2d\x57\x09\xc6\x36\x09\x7d\x25\x43\xd5\x96\x1e\xbe\x32\x75\x37\x9d\x1c\x30\x96\x4f\x7e\xa0\xaf\x20\x56\xcd\x0b\xfa\xc5\xfc\xbd\x01\x7b\xa1\x09\x1d\x43\x2e\x74\x4d\x5a\xa7\xbb\x25\x93\xe1\xac\x37\xeb\x55\xfd\xbe\xb9\xe9\x30\x6a\x30\xd1\x22\x32\xde\x01\x62\x21\x98\xf8\xa0\xf8\xcf\x50\x97\xf1\x89\xd6\x85\x7f\xe1\x2f\x42\x61\x01\x45\x61\x92\x20\xd9\x3f\xd0\x4c\xfc\x4d\x7e\xed\xec\xf6\x6f\x62\x82\xc0\xe8\x8b\x7a\x0d\xa1\x7f\x9a\x15\x7f\x68\x49\x47\x71\xd0\xd5\x67\x0e\x3a\xde\xa2\x2e\xb3\xaf\x5b\xec\x2b\x01\xb1\x92\x0f\x82\xe9\x0b\xf8\xd9\x11\xde\xcf\xfa\x6a\x12\xd5\xae\xd9\x34\x31\x60\x93\xed\x19\x3b\x76\x8a\x04\x82\x62\x43\xea\xcf\xce\x3e\x5f\x62\x63\xe2\x66\x1c\x81\x73\xac\x55\xf8\x23\x75\xd5\xe3\x1f\xdf\x3e\xcc\xd5\x90\x3f\x59\x07\x83\xca\x30\xbf\xe2\xf2\x3e\x6e\x9f\x7f\x5b\xd9\xbc\xc1\x3f\x38\xa3\xff\xfa\x87\x47\xbf\x72\x46\xff\xa5\x61\x19\x51\xbd\x7f\x6f\x41\x3a\xd4\x1f\x0e\xb9\xd1\xbf\x19\x21\x1f\x72\x51\xcd\x6c\xa6\x82\x21\xa6\x73\x46\xff\x7d\x37\x6c\xb0\x24\xaa\xca\x72\xa8\x7c\xea\x26\xe1\x13\x7c\x98\x20\xd2\x8b\x14\x5e\x47\xb5\x26\xff\x4d\xff\x29\xce\x33\x5d\x79\xd3\x1e\x49\x55\x68\x65\x24\x60\x09\x25\x93\x86\x14\xd5\xf3\xf4\x50\xc7\x25\x2f\x29\xed\x24\x99\x4a\x30\xff\x54\x07\x95\x2a\xf5\x2b\xd0\xdf\x1d\xbd\xbf\x30\x0a\x2f\xf0\x5a\xfe\xf0\x82\xec\x29\xfe\x7f\x3b\x82\xb7\x82\x50\x9a\xff\x4f\x42\x1f\x58\xf9\x92\xbb\xe5\x89\x7f\x1e\xd8\xbb\x2f\xd6\x75\x9f\xcb\x10\x64\x77\xda\x5f\x74\xb6\x6a\xbe\x73\x9c\x42\xac\x76\x54\xb8\x26\x7d\x33\x19\xee\x86\x4c\xc6\xed\x48\xd3\x67\x2c\xd4\x21\x14\x0e\x07\xab\xac\x60\xea\xa7\xaa\x46\xa4\xe7\x8b\x00\x89\x43\x4e\x4c\xb9\x25\x95\x1b\x15\x2b\x9f\x23\x8c\xf6\x9d\x70\xc5\xf5\xae\x0b\x97\x5c\x1c\x1e\x72\xae\xe8\x35\x6b\xf8\x97\xf1\x92\x4d\xf2\x7c\x72\x96\x7e\xbf\x9b\xb3\x9e\xa5\xbd\xde\xc1\x64\x35\x0d\xec\x55\xbe\x70\x56\x82\x14\x28\xb9\xb4\x54\x9d\x3b\xb7\xa2\xca\xa7\x68\x76\x3e\x02\xe7\x0e\x5e\xc9\xb5\x4d\xac\x3d\x4f\xed\x43\x73\xdc\xa7\x2e\x62\xce\x1b\x53\x65\xae\x95\xde\xb4\x0e\x8c\x94\x7f\x9b\x8d\x39\xb7\x64\x70\x83\x63\x77\xa6\x98\xb7\x0c\xed\x7b\xed\xf2\x7f\xc1\x29\x07\x24\xa2\x87\x98\x3b\x7a\xab\xb5\x36\x3e\xa0\x2e\x21\x77\x72\x79\x11\xb1\x94\x1c\x12\x0e\x91\x3b\x59\xd1\x9e\x6c\xc7\x40\x0a\xbe\x1b\xea\xe2\xf7\xb8\x14\x5a\x42\x76\xad\xa4\x68\x98\xfa\x97\x8c\x8e\x02\xe4\xc4\x0a\x19\x17\xc1\xc2\x3e\x8b\x19\x3f\xec\x54\xba\xc2\x09\xd8\xe8\xcc\x16\xa6\x8b\x47\x74\x28\x0e\xdd\x49\x5b\xbc\x9e\x77\xc8\xe4\x08\x1c\xe0\xb0\x76\x92\x22\x7d\x84\x16\x42\x2a\x84\x50\xb3\xb4\xa4\x65\xa7\xc9\xb7\xed\x7b\x64\xf7\x1d\xda\x4a\x14\xba\xd2\x5e\x3b\xc4\x5a\x89\x92\xe7\x99\x74\xc7\xa1\x6f\x22\x69\x50\x7d\x2a\x83\x6a\x88\x2d\xec\x94\x3b\x61\xaa\x8e\xfa\xae\x9b\x98\xcf\x19\x75\xcd\xdb\xbe\x4b\x0b\xa7\x49\xf3\xe6\xdc\xc9\xc7\xe6\x7b\x0a\x70\x83\x57\x5c\x46\x56\x0e\x7e\x43\x7d\xd5\xde\xcf\x38\xd5\xae\x3e\x5b\x48\x2d\xc6\x07\x8f\xb4\x0b\x19\xdd\xfd\xd0\xa6\x34\x6f\x53\x32\x0c\x6d\x04\x43\xdf\x4e\xd6\xe1\x73\xe3\x52\xdf\x48\x29\x20\x22\x14\xcd\xf3\x6e\x5a\x71\xe2\xb2\x3d\xf3\xa3\xaf\x4c\xb1\x94\xc9\xe3\x41\x03\x51\x5d\xd8\x06\x7a\x36\x73\xb8\xb5\x99\x43\x29\x92\xc9\x97\xfb\x46\x71\xeb\x6e\x51\x4b\x85\x6f\xa5\xe8\x95\x25\xe7\xee\x7a\xae\x1c\xc5\x3a\xe4\x78\x34\x53\x97\xee\x98\xcb\xf6\x3a\xf5\xfd\xbf\x0d\x30\x2f\xf9\x7e\xb6\x7e\x2f\xf3\xbd\x5d\x7e\xef\x1f\x30\xe2\x87\x22\x03\x99\xea\xc5\xd1\x57\xe4\x7a\x2f\xed\xf1\xd0\x31\x7a\x20\x7c\xb8\xc1\x9f\x39\x2c\x39\xdc\x73\xa1\x46\xaa\x41\xe8\x57\xf7\x4d\x61\x18\x9d\xba\x6f\x1c\x83\x38\x23\x76\x97\xf7\x99\x3f\x7c\xda\x3f\x78\xd8\xbb\x2e\xe4\xee\xdb\x15\xea\xbd\x31\xc3\x76\xde\xff\xa0\x8a\x37\xd8\xe7\xf8\xa3\x33\xe5\xa7\x96\x0a\x35\xb1\x94\x3a\x03\xcf\x39\xbc\x77\x35\xe1\xbc\xcd\xa0\x71\xda\xe7\xda\x69\xef\x3a\x5b\xa9\x4c\x6a\x19\x2d\xcf\x6b\x18\x13\x9a\x76\xd3\x72\xa2\x37\x8e\x7a\x86\xc5\xef\xc6\xb8\xe7\x2e\x73\xef\x9d\xb1\x8b\x3c\x5b\xfe\xee\x68\xd7\x96\x5f\xbb\x72\x08\x1c\x11\x7c\x81\x63\x77\x92\x63\x17\xcf\x14\x7e\xce\xb1\x4a\x9b\x03\x59\x6e\x31\xc9\xdf\x2f\xf8\x27\x50\xa0\x73\xfc\x8b\xc8\xaa\x44\xdb\xa9\xb8\x1e\xa2\x74\x83\x17\x1c\x5e\xf2\xa6\xba\x25\xb6\xee\x65\x73\x64\xeb\xe5\xbc\x35\xb5\xc6\xad\xac\x47\xec\xbf\xa4\x56\xcf\xb8\xb6\x26\xf5\xa1\x4b\x30\xd7\x87\x14\x15\xd9\x02\x41\x14\xd1\x69\x00\x3a\xee\xa3\xaa\xe2\x89\xb9\x08\xee\xfa\x05\x8c\x00\x5d\x26\x59\xf4\x19\x89\x23\x14\x6c\x39\x98\xa6\x4d\x69\x18\x74\xb5\xd7\x85\x79\xde\xf6\x76\x07\xad\x06\x53\xb4\xa4\x82\xb8\x2d\x96\xb6\x6b\xe7\x7b\x0f\x14\x77\x4a\xeb\xa5\x5b\x5a\x77\xfb\x08\x94\xb5\x7e\xca\xbf\xf7\xe7\x7d\x7c\x50\x64\x09\x96\x7f\x6f\x62\x4b\x82\x3b\x45\x13\x24\xeb\xc1\x48\xfe\x61\x8b\xc5\x51\x77\x3f\x62\xe1\xa5\x5b\x84\x55\xcd\x50\xff\x1d\x81\xba\x33\x14\x28\x46\xc4\x5d\x76\xab\xaf\x2a\xdf\xaf\xc2\x88\x63\x7b\x97\x2c\xff\x1f\x20\x5d\x2f\x72\x9f\x90\x94\xc4\x86\xdb\xfa\xda\x94\xb1\x78\x92\x53\xe7\xb5\x22\x6b\x72\xfd\xae\x7c\x6a\xd3\xeb\xa1\x2e\x0b\x3d\x0f\xf5\xfb\xa2\x31\x89\xc5\x11\x17\xcd\x79\x84\x60\xff\x7f\x5e\x32\x41\x3e\x1f\x44\x91\xbc\x81\xd2\xd1\x3e\xe3\xb6\xb2\xcd\x62\xb0\x96\x21\xeb\x33\x22\x90\x66\x21\x68\x07\xcc\xca\xa6\xd2\xfc\x15\xd9\xf1\x5d\xd9\x8d\x88\xfe\x6f\x07\xb0\xf9\x23\xa4\x49\xa8\x2a\xab\x34\x9a\x5c\xd0\x8f\x44\xbe\x8e\x54\x91\xfd\x59\xf3\x77\x4a\xe1\x34\x6c\xfd\x0d\xce\xfd\x19\x09\x4d\x41\xf6\x68\xc7\x90\x27\xa6\xd1\x3a\x55\x73\xcf\xbb\xc3\x1c\x52\x32\x69\xe2\xe6\x31\xa2\x65\x5d\xd7\x22\x01\x80\x18\x42\x10\xfe\x46\x6b\x65\xa3\x34\x32\xd1\x88\x17\xee\x4b\x20\x76\xdb\xbc\x06\xf8\x29\x2c\x8a\xa3\x56\x77\x97\x2d\x4d\xf7\xe8\x48\x5f\x3c\x78\x5e\x6e\xee\x70\x47\x04\x42\x66\x75\x4a\x5e\x0a\xcb\xa8\x94\xcb\x27\xea\xba\x58\x93\x13\x62\x72\x9b\x84\x95\x6e\x59\xfa\x2c\x51\x77\xc4\x89\xda\xc3\x48\xf6\x4e\x93\x40\x10\x8a\x18\x7b\x4b\x42\x16\xca\x82\xbf\xbd\xce\x8d\xba\x6c\xcd\xf5\xc5\xaf\xb9\x3c\x09\xf5\x6d\x82\x3c\xb2\x62\x91\xc7\xe9\x51\x04\x32\x7d\x35\x62\x51\xec\x10\xd1\x6f\x6e\x21\x2c\xbe\xfe\xaf\x32\x14\x36\x2c\x58\xcc\xd8\xfa\xa8\x39\xe8\xe6\x5c\x38\xab\xf5\x24\xb4\x06\xd3\xc3\x6e\x99\xaa\xd1\xe8\xaa\x92\xee\xb1\x01\x4c\x54\x92\xd9\xf3\xe9\x48\x55\xd2\x85\xdb\x16\x29\xd6\x56\x9a\x43\x43\xb1\xe9\x74\xa7\x29\xa8\xe1\xbc\x3d\x7b\xdb\x1b\x68\x4e\xdd\xc2\xd9\x2e\x47\x2e\x60\x65\x5e\x0d\xdb\xcd\x24\x55\x35\x9c\x82\x7d\x61\xe5\xf6\x48\xc5\x22\x93\xac\xaa\x0a\xb9\x04\x5d\xb2\xef\xea\xec\xb9\xaa\x16\x55\x35\x62\x2c\x1d\xcc\xb3\xf5\x65\xc2\xd5\x6b\xdf\xf7\x12\x69\x12\x2a\x83\x99\x84\xfa\x86\xa9\x87\x17\x93\x11\xf5\x09\x6d\x2d\x65\x32\xa2\x45\x1b\x24\xdf\x42\xcb\x47\xcf\xfa\xe4\x27\x8e\x4e\x4d\x0a\x3a\x7e\x24\x1f\xf6\x27\x3c\x2a\xf3\x38\x52\x7f\xc2\x29\xd5\x4f\x0f\xeb\x0c\x1e\x4d\xa8\x19\x4b\xab\xd9\xb6\x9a\xd5\xe4\x78\x08\xd2\xe9\xff\x59\x79\xa3\xf7\xe2\x60\xa1\xd1\x44\xbe\x37\x45\xc3\x47\xa8\xd5\x7b\x9e\xce\x6d\xdf\xa3\x21\x92\x7f\x43\xa5\xbb\x9a\x31\x43\x04\x8b\x2c\x99\x53\x74\x99\x87\x11\x47\x10\x25\x59\xc1\xff\x94\x87\xd1\x67\x5e\x16\x14\x61\x32\x0d\xb6\xf5\x77\xdf\xcd\xd0\x0c\xfd\xfb\xdf\x08\xae\x79\xb2\xe2\xb9\x3c\xa3\xa2\x89\x2c\xcd\x20\xda\x7a\x5c\xad\xaa\x35\x3f\x66\x73\x4e\x13\xf9\x21\x9b\x11\xf0\xfb\x55\xce\x8b\x22\xce\xd2\x97\x49\x92\xdd\xf1\x39\x2d\xa1\xf8\x1c\xaf\xce\x2d\xfc\xc0\xd9\x28\x6f\x84\xda\x77\x41\x47\x65\x97\x5d\x78\x5e\xd9\x65\x5f\xaa\xaa\xb9\x0d\xaa\xeb\x9a\x10\xe0\x83\x9c\x5f\xc5\x45\xc9\xf3\xbf\x49\x3e\x31\x32\xef\xb0\x0b\x04\x2d\x36\xe5\x7b\xec\x60\x28\x86\xe8\x67\xe2\xaf\x7f\x3c\xc7\x48\x9c\x96\x43\x17\xcf\x1d\x74\x10\x99\x47\xcb\x6f\x42\x0e\x57\xab\x24\x8e\xe4\xd1\xf4\xcd\x13\xb8\x63\xee\xfb\xff\x93\x51\xff\x23\xee\xc4\xa6\x82\xbe\xe7\xde\xdd\x5a\xda\x1d\xd5\xbf\xc3\xe6\xff\x66\x78\x32\xef\x7d\x75\x7c\x32\x3f\x44\x41\x6e\x44\xf3\x00\xff\xe0\xe8\xa6\xfb\xf7\x78\xf8\x63\x84\x6a\x42\x8e\xfe\x7f\x00\x00\x00\xff\xff\x55\x91\x60\x5f\xdb\x53\x00\x00") -func web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJsBytes() ([]byte, error) { +func web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566JsBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, - "web_ui/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js", + _web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js, + "web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js", ) } -func web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs() (*asset, error) { - bytes, err := web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJsBytes() +func web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566JsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js", size: 0, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js", size: 21467, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x7c\x7b\x7f\xdb\x38\xae\xe8\xff\xf9\x14\x36\x6f\xaf\x86\xac\xe1\x87\x9c\x3e\x99\x61\x7d\x3a\xb3\xe9\x6e\xf7\xa4\xed\xec\xa4\x9d\x3d\x3b\xb6\xa6\xab\xc8\x74\xa2\x44\x96\xbc\x92\x9c\xc4\xb5\x74\x3f\xfb\xfd\xf1\x29\xca\x76\x3a\x9d\xb3\xfb\x4f\x4d\x81\x20\x08\x82\x00\x08\x80\x4c\x6f\xc3\xbc\x73\x5d\x64\x69\x12\xa7\x25\x5b\xac\xd3\xa8\x8c\xb3\x14\x93\xad\x80\x73\xb6\x2d\xf3\x30\xe2\xd4\x81\xd7\xb0\xd9\xd0\x6d\x0d\xc5\x66\x79\x91\x25\xc5\x67\xba\xe5\x79\x9e\xe5\x74\x0c\x7f\x3d\xff\xf0\xfe\xbc\xcc\xe3\xf4\x92\x1e\xc3\xf9\xc7\x9f\xdf\xbe\xff\x33\x7d\x22\xa1\xef\xd7\xcb\x0b\x9e\xd3\xa7\xf0\xfe\xd3\xbb\x1f\x4e\x7f\xa6\xcf\x34\x34\x49\xce\xe2\x92\xe7\x61\x42\x9f\xc3\xfb\x4f\x67\x67\xf4\x85\xec\xf8\x21\xcb\x12\x1e\xa6\xa6\xef\x25\x7c\xfc\xf9\xd3\x29\xf5\x47\xf0\xe6\xf5\xd9\xf9\x29\xf5\x7d\x89\xf5\x91\xdf\x97\xd4\x57\xd3\xfe\x12\x26\x6b\x4e\xfd\x63\x38\xfd\xf0\x86\xfa\x6a\xd2\x0f\x17\xd7\x3c\x2a\xa9\xff\x54\x7e\xbd\xce\xf3\x70\x43\xfd\x67\x80\xb6\x88\xfa\xcf\x01\xd5\x88\xfa\x6a\xba\x77\x5c\x70\x77\x16\x17\x25\xf5\x5f\x3a\x10\x3a\x1e\x01\xa2\x88\x8e\x7d\x40\x80\xe8\x78\x0c\x68\x8a\xe8\xf8\x18\x50\x80\xe8\x58\x4d\x72\x9a\xf0\x25\x4f\x4b\x39\x78\xfc\x14\x1e\x85\x51\xc4\x57\x25\x1d\xc1\x23\x9e\xce\xa9\x5f\x43\xc9\xf3\x65\x9c\x86\x52\x50\x63\x8a\xa4\xac\x10\x3c\xa1\x48\x09\x08\xc1\x33\x8a\x94\x54\x10\xbc\x10\xcd\xb3\x33\x04\xfe\x88\x22\xb1\x66\x04\xbe\x4f\x91\x5c\x35\x02\xff\x09\x45\xa7\x1f\xde\x20\xf0\x9f\x53\xb4\x45\xe0\xbf\xa0\xa8\x46\x30\xf6\x29\xa2\x08\xc6\x63\x8a\x00\xc1\xf8\x98\xa2\x29\x82\xf1\x13\x8a\x02\x54\xc3\x2a\xcf\xe6\x6b\xb9\x73\xc5\x67\x3a\x1d\xc1\xf4\x18\xfc\x00\xa6\x4f\xe5\xbf\xcf\xe5\xbf\x2f\x9d\x7f\xfd\x31\x8c\xc5\x8f\xc2\xfa\x96\x9f\xa7\x6a\xc0\x53\x38\x0e\x60\x3a\x1e\xc9\x1f\x5f\x13\x7b\xa9\xbe\x9e\x29\x94\x67\x0a\x45\x4d\x3d\x16\x03\x02\x58\xf1\x7c\x91\xe5\xcb\xd7\x92\xc3\x46\xc9\x38\x94\x90\x43\x0a\x31\x84\x4a\x0f\x0b\x16\x0e\x12\x9e\x5e\x96\x57\x7d\xff\xa8\xb8\x8b\xcb\xe8\x0a\xc7\x64\x1b\x85\x05\xef\xf8\xb4\xbc\x8a\x8b\xc1\x23\xc6\x07\x39\x5f\x25\x61\xc4\xf1\x70\x36\xc3\xb3\x59\x85\xc8\xf0\x12\xd0\x23\x1f\x11\xb7\x27\x15\xc0\x59\xda\x06\xe6\x12\x98\xb7\x81\xa5\x04\x96\x6d\xe0\xad\x04\xde\xb6\x81\x0b\x09\x5c\xb4\x81\x17\x12\x78\x81\xc8\xd1\x45\xce\xc3\x9b\x23\xc9\xed\xd8\x70\xab\x4c\x02\xf3\x56\xef\xb1\xe9\x4d\xd7\x49\xe2\x76\x3c\x31\x1d\xdd\x91\x0b\x7e\x6a\xc1\xbe\x0b\x7e\x46\x73\x5e\xae\xf3\xb4\xa3\x7b\xc3\x69\xd1\xf7\x03\xd5\xe7\xdb\x39\xb6\xb5\x3b\xc6\xb7\x53\x68\x6c\xb7\xcf\xce\x33\x15\x9d\xe3\x00\xc2\x69\x11\xb4\x51\x9e\x35\x64\x41\xb5\x04\x6e\x30\x1d\x05\x01\x93\x8d\x1d\x92\xcf\xdd\xe9\x14\xc5\xfe\x38\xf8\xfa\x98\x17\x96\x8d\x36\xfc\xe5\xc3\xac\x8f\x47\x2e\xeb\x6d\x9e\xc7\xfe\x41\x1e\x06\xab\x75\x71\x85\x05\x36\xa9\x6b\x28\xc3\x8b\x84\xd3\xe9\xf6\x98\x3e\x85\x27\x74\xea\x83\x3f\x0e\xe0\x29\x7d\x06\xcf\xe4\xc7\x71\x00\xcf\xe9\x31\xbc\x10\x1f\x2f\x03\x78\x49\x9f\x08\xe3\x15\x3d\xa3\x40\x18\xaf\x68\xf9\x01\xf8\x63\x2a\x90\xe9\x18\xfc\xa7\xf4\x39\xf8\xcf\xe8\x0b\x61\xc6\xa2\xf7\x49\x20\x8c\x56\xb4\x9e\x06\x35\x6c\x7d\x3a\x3d\x96\xbf\x6a\xb2\x67\xa6\x3d\x86\xe7\x81\x30\x79\xd5\x18\x8f\x4d\x43\x77\x59\xac\x17\x06\xeb\x85\xc1\x7a\x61\xb0\x5e\x34\x58\x2f\x0d\xd6\x4b\x83\xf5\xd2\x60\xbd\x6c\xb0\xe4\x1a\x5e\x98\x96\xc2\x93\x2d\xd3\xdb\x60\xfa\x16\xd3\xb7\x98\xbe\xc5\xf4\x1d\xcc\xb1\xc5\x1c\x5b\xcc\xb1\xc5\x1c\x37\x98\xc7\x06\xf1\xd8\xe0\x1d\x1b\xb4\xe3\x06\xeb\x89\xc1\x7a\x62\xb0\x9e\x18\xac\x27\x0d\xd6\x53\x83\xf5\xd4\x60\x3d\x35\x58\x4f\x1d\xde\x2c\x6b\x81\x70\xab\xba\x31\x36\x0d\x8d\x63\xd1\xed\x4a\xec\x42\xec\x3a\xe4\x32\x8e\xc5\x01\x62\x75\xc6\x97\x3a\xe2\x8b\x5d\x7c\x29\x4e\x9e\xf1\x88\xfa\x2f\x25\xd6\xbf\xa5\x58\xc7\xe2\x40\xfa\xaa\x52\x49\x96\x7c\x18\x8b\x25\x3c\xa5\xe3\xb1\x52\xb2\x31\x38\xaa\xe5\x5b\x59\xfb\x56\xd8\xbe\x95\xb6\xaf\xc4\x2d\x59\x19\x6b\x31\xfb\x30\x7e\x6a\xa0\x63\xa1\xa6\x66\x94\xa4\x3a\x96\xfc\x8d\xdd\x19\xac\x5e\xfa\x56\x31\x7d\xab\x99\xbe\x54\x4d\x4d\xf7\x85\xe5\xf8\xb9\x81\x8e\x61\x6c\xd5\x6e\xec\xaa\x9d\xdd\x7d\xdf\x6e\xbf\x6f\xf7\xdf\x7f\xb2\xbf\x0b\xe3\x11\x1d\xff\x47\xa4\x7e\x3c\xfa\x7d\x53\x56\x5c\x58\x5b\xf3\xad\xb1\xf9\xd6\xda\xfc\x97\xc1\x7f\x84\x1b\xff\xf7\xb9\x51\x3c\x58\xe7\xe1\x3f\x77\xa0\xd6\x2c\x14\xae\x96\xb9\x55\xfa\xb1\x1f\xd4\x01\xcc\xf9\x22\x5c\x27\xa5\x3a\xad\x0b\xba\xf5\x9f\x19\x35\x5a\x85\x79\xc1\x4f\x65\x18\xd8\x1c\xe2\x64\x5b\x5e\xe5\xd9\x5d\x27\xe5\x77\x1d\xd9\x87\x39\xd1\xa8\x2d\x2c\x71\xc0\x97\x4c\x78\x62\xc8\xd9\x74\x14\x40\xca\xa6\xe2\xfc\x0b\x20\x66\xd3\x00\x42\xd9\x35\x90\x7e\x18\x0a\x86\x10\x64\x6c\x04\x09\x1b\x41\xc4\x46\x47\xb2\x2f\xe1\xf7\x3c\x1f\x14\xbc\x7c\x9b\xae\xd6\x25\xe6\x04\x1c\xf0\x66\xa3\x08\x6c\x36\xa0\x7f\x55\x07\x6b\x70\xe0\x36\x8b\xe7\x9d\x11\x63\xac\x35\x2e\x49\xb2\xc8\xf3\xf0\x1e\x8c\x6d\x6b\x72\x24\xb8\x5e\xef\xe3\x1f\x99\x95\x75\x16\x26\x86\x3e\x52\x87\x31\x4a\xe5\x89\x8f\xba\xac\xdc\xac\x78\xb6\xc0\x9c\x95\x7a\x68\xc2\xef\x31\xa9\x2a\x9f\x78\x9e\x84\x9a\xd0\x7a\xca\x83\xaa\xe2\x04\x78\x1d\xab\x43\x69\x4d\x00\x99\x09\x10\xd3\x84\x3a\x66\x59\xcd\x2e\x18\xae\x1b\x08\xdb\x47\x22\x47\x8b\x2c\xc7\x82\xc5\x2b\x58\xc1\x1c\x36\xb0\x84\x5b\xb8\x84\x0b\xb8\x87\x1b\xb8\x63\xdb\xfa\xe4\x84\x6c\xe3\x05\x9e\xb3\x7c\x9a\xdb\xf8\x2b\x50\x62\x6c\x2b\xc3\x74\x1e\x4c\xb4\x9c\xf7\x3a\x28\x16\xbb\xc9\xd8\x95\xe7\xe1\x2b\xb6\xc0\x84\xc0\x86\x85\xd3\x79\xe0\x79\xe2\xdf\xe9\x55\x40\x9a\x0d\xd8\x54\x55\x77\xa3\xe7\x12\xcd\xe9\x28\x90\x3c\x74\x23\xb2\x95\xec\x76\xe2\xb4\x73\x2f\xf5\x62\x3a\x0f\x88\x52\x0d\x1b\x62\x4f\x6f\x03\xcf\xbb\x7d\x35\xf6\xbc\x7b\x25\x30\xf4\x1d\xea\xed\xe3\xf4\xd0\x77\x48\xed\xe0\x67\x86\xd0\xd1\x67\x77\x1b\x8b\xab\xec\xee\xa7\xac\x88\x05\xf7\x13\xf4\x93\x90\x56\x47\x06\xed\x9d\x2c\xed\x24\x71\xca\x3b\xa8\x87\xb3\x9e\x4f\x7a\x88\xce\x52\x4d\x7d\x7f\x28\x26\x3d\x34\x4b\x4f\xef\x57\x3c\x2a\xe3\xf4\xb2\x83\x7a\xf7\x83\xeb\x2c\x4e\x31\x82\x0e\x22\x3d\x04\x9d\xcb\xac\xec\x1c\xe0\xee\x4a\x72\x47\x7f\x67\xe6\xce\xa7\x94\x4b\xda\x7c\x2e\xa0\x3e\x63\x57\x13\xc4\xd3\x79\x27\x5b\x74\x62\x61\x04\x88\x8a\xa5\xe3\x7d\xea\x55\x75\x45\xe4\xfa\x61\x47\x43\xf0\x67\xd8\x96\x22\xa5\x72\x56\xb4\x0c\xcb\xe8\x0a\xca\xec\x86\xa7\xf4\x20\x29\x10\x7c\xd1\xb6\x15\xc4\x29\x4f\x33\x48\xb2\x88\xae\xc1\x30\x49\xef\x6b\x52\xc7\x0b\x7c\xcc\x58\x24\xf7\x53\x70\x4c\x76\xfd\xc3\xe7\xaa\x92\xeb\x16\x02\xbb\x0a\x93\x92\xcf\x07\x88\x1c\x25\x3b\x56\xc6\xd3\x4b\x28\xda\x30\xc1\x37\x64\xec\x10\x1f\x07\x6c\x14\xa4\x16\xd6\x42\x9d\x4e\xba\x78\x3c\x18\x94\x99\x4a\x5b\x31\x89\xd3\x8e\xd4\x2b\xa5\xf8\x23\xc6\xe6\xdf\xc8\xe4\x0d\xf3\xc1\xd8\x08\xb3\xc6\x32\x7e\x7c\x03\xa9\x81\x9a\x46\xff\x06\x62\x03\x8b\x1b\xd8\x8e\x95\xd5\x2b\x76\x05\x57\x6c\xac\x6c\xa5\xdd\x67\x2c\x67\x1c\x40\xc4\x8e\x85\x5c\x85\x9d\xc4\x69\x51\x86\x69\x24\x3c\x82\x4c\x76\x3d\xcf\x18\xd2\x2b\x7f\x6f\x15\x5a\xbf\x94\xcf\xee\x2c\xd7\x49\x19\xaf\x12\xde\x09\x95\xd5\x76\x56\x59\x51\xc4\x17\x02\x50\x76\x8a\x32\x2c\x39\xed\xa0\xde\x5c\xa8\xad\x52\x86\x0e\xea\x5d\x11\x93\x89\x29\x23\xd5\xc9\x58\xae\x0c\xef\x8a\x40\xaa\x5a\x7b\x1b\x45\x20\x3e\xd0\x23\x36\x86\x80\x1e\xbd\x99\xfa\x01\x81\x2b\x99\x06\xc1\x6a\x82\xaf\xd8\x0a\x56\xf2\x8b\x50\xfc\x9f\xd7\x87\xe8\xd5\xc8\xf3\xa2\x7e\x7f\x27\x53\x8b\x17\xf8\x52\x61\xbb\x69\xf4\x54\x30\x27\x52\x13\xb8\x13\x89\xda\xd4\x6e\xeb\xa5\x80\x7c\x7e\xc4\xb6\x8b\x38\x2f\xca\xcf\xd2\x32\xe2\xa9\xdd\x61\x7c\x29\x3c\x7c\x30\x68\x7a\x21\x09\x0f\xe0\xf9\xc1\xc0\xc2\x41\x21\x47\x59\xb2\x5e\xa6\x0f\x13\x53\xfd\x8a\xdc\x3e\xae\x21\xa8\x7a\x6a\xed\x6b\xbb\x8c\xe1\xa5\x5e\x9d\x9b\x85\x0f\xa2\x30\x49\xf0\x1d\x14\x90\x40\x66\x4e\x4c\x10\x6b\x16\x09\x39\x21\x44\xa7\x96\xcb\xa3\x4b\xcf\xc3\x39\xcb\x07\x45\x12\x47\x1c\x8f\xa0\xef\x3f\xbe\x7c\x3c\x26\x90\xb2\xb4\x05\x23\x10\xb3\xb8\x0d\xb1\x1b\xfd\x90\x74\x47\x81\xd5\x9f\xbb\xc1\x23\xab\x31\x42\xbe\x04\x2e\x58\x38\x75\xec\x61\x1c\x04\xd3\xb6\x79\x18\xea\x17\x3b\xc9\xb5\x62\xbd\x3b\xaa\xeb\xa6\x05\x87\x8a\x5e\xb2\x8a\x74\x38\xaa\x81\x52\x9d\x47\x07\xce\xd3\xfd\x70\xe7\x68\x1f\x4b\x52\xa8\xc1\x04\x2b\xad\x48\xc8\xcd\xda\x3f\x4b\x37\xce\xb8\xda\x82\xcf\xcb\x2c\xe7\x6a\xb7\x3e\x27\xbc\xd0\xea\x3e\xcf\x52\xce\xba\xbe\xd9\x25\xa5\xe1\xe6\xa4\x17\xe2\x60\x23\xd3\x27\x2c\x42\xf5\x48\x9f\xce\xe7\xce\x87\x88\xa9\xe4\x57\x94\xa5\x73\x79\x7a\x9d\x97\x61\x74\xc3\xa6\xe8\xed\xfb\xb7\x1f\xdf\xbe\x3e\x43\x81\x9d\x42\x86\x3f\x8e\x82\xfb\x6d\x15\x1d\x39\x3a\xed\xb7\x14\x72\xa4\xca\x02\x35\xc4\xed\x65\x1b\x99\x3b\x8b\x9e\x8e\x82\x23\x57\x14\x8a\xfb\x9e\x91\x85\x5a\x5a\xaf\x07\xcd\x0a\x6c\x9f\x5e\x9c\xf8\xe6\xea\x03\x0f\x67\xe9\x90\x78\x5e\x4b\x46\x66\xb0\x16\xb2\xd3\xd6\x7a\xea\x8b\xa0\x0b\xd6\xdf\xb4\x43\x3d\xe7\x4b\xaf\x51\xec\x96\xbb\xc4\xd6\x30\xb9\x95\xdd\x91\x46\x15\xbb\xb9\x13\x34\xef\x30\x26\x97\xa1\xf9\xe2\xc4\x9d\x4d\x44\xd3\xc5\xae\x1e\xb5\x04\xaa\xe5\x31\x28\xd6\x17\x45\x99\xe3\x51\x4b\x4a\xc6\x62\x9c\x59\x14\x84\x68\xf1\x63\x6e\x0e\x90\xf1\x68\x82\x06\x83\x01\xa2\x08\x91\x1e\x37\xe4\xfa\xe3\x91\x5b\xf1\x92\x95\x35\x44\x6a\x58\xaf\xa2\x6c\x19\xa7\x97\xbf\xcb\x99\xd9\x66\x33\xcf\xf7\xe3\x91\x08\x81\x7b\xed\x1d\x31\xbc\x8f\x47\x7d\x83\x48\x08\x60\xee\xf6\x90\xde\x61\x66\x0f\xf2\xe7\x06\x6a\x0f\xb0\x67\x05\x8b\x09\x94\x4c\xd8\xb4\x3c\x53\xed\x24\x3d\x9f\xe8\x78\xae\x8f\x88\x5d\x86\xda\x9c\xd6\xf2\x55\x20\x88\x7a\x65\x0f\xfd\x86\x6a\x48\x45\x84\xe5\x4c\x19\x2f\xb0\x35\x65\xe2\xaa\xc9\xe9\x87\x37\x32\x42\xb5\xb5\xd0\x23\x47\x26\x55\x85\x1d\x07\x30\x22\x8e\x93\x30\x5d\xda\xe4\x8d\x69\x1b\x43\x6f\x82\x7e\x9d\x57\x7d\x8e\xd6\x79\xce\xd3\xf2\xe7\x75\xc2\x0b\x4c\xa0\x60\xa3\x93\xe2\x7b\x53\x6e\xf5\x3c\xdc\xc5\x79\x6b\x3b\x94\x55\x49\x48\x2e\xc6\xa8\xba\x1a\x21\x55\x55\x7a\x5e\x17\xe7\xd3\x51\x60\x36\xa2\x6c\xda\x44\xf0\xc5\x72\x48\x59\xa1\x18\xca\x56\xd2\xe1\x0f\x16\x09\xbf\x27\xe4\xa4\xe8\xf5\xc8\x89\x59\xff\x04\xe3\x98\xc9\xc1\xd6\x84\x07\x8f\x87\x97\x84\x98\xbc\xc6\xda\xb1\x0d\xa0\xc8\x83\x1e\xca\x81\x3b\x07\x6b\xe3\xa6\xda\x04\x77\xfc\xd9\xde\xe0\x43\x47\xed\x64\xe7\xb0\xd5\xad\x87\x06\xf7\x1c\xb1\xd4\xd0\xf2\x70\xa2\xa7\xe5\xd6\x1a\x80\x76\xe8\x0e\xba\x26\xe1\x1e\x10\xe6\x2c\x78\xd0\xaf\xb9\x3b\xb2\xe3\x31\xe5\x54\xfc\xc1\x88\x40\xe6\xe7\x6e\x22\x0d\xe1\x34\x0d\x0e\x9d\x1b\xd3\x03\xb0\x46\x3c\x7a\x5a\xa1\xb9\xda\x29\x2b\x06\xcd\xd6\xea\x33\x8d\x00\xaf\x2a\x15\xa9\x10\x8a\x90\x49\xcd\x15\xee\xc4\x58\x08\x95\x18\xbb\x89\x0c\x3a\xe3\xf7\x71\x14\x26\xfb\xd9\xd3\xce\x5e\x93\x1e\x1a\x74\x3e\xa5\x39\x8f\xb2\xcb\x34\xfe\xc2\xe7\x1d\x29\x57\x9b\xd6\xb5\x13\x3a\x9d\x1e\x09\x8b\x92\x31\xb0\x0c\x4e\xf7\x55\xa8\x26\xc2\xa9\xdf\x3f\xe0\x57\x84\xfd\x63\xeb\x30\x6c\x28\xc6\x27\x4d\x16\x85\x49\x0d\x17\xfc\x32\x4e\xf7\x8f\x85\x1d\xa1\xca\x20\x47\x16\x55\xb2\xd5\xb9\x8c\xd2\x1f\x38\x73\x76\xc7\x65\x2b\x31\x49\xcb\xf4\x7f\x77\x68\x71\x68\x5f\xbf\xbe\xd7\x81\xf2\x10\x35\x94\x7f\x88\xbf\xaf\x11\x1d\x07\x35\x88\x65\xef\x90\x33\x02\x92\x72\x93\x22\xd1\xfe\x85\x6e\xeb\xaf\xde\x32\x91\xad\x4e\x62\x72\x9d\xc1\x8c\xa8\x7b\xb3\x60\x2e\x52\x9e\x99\x9c\xc0\x70\x6d\x43\x2a\x63\x8c\xfa\x2c\xf2\xa1\xd4\xa6\xda\x1f\x13\x78\xd2\x8e\x3c\x3b\xfe\x73\x73\x9d\x63\x00\x2f\xcc\x45\x8e\x06\x8c\x8f\x77\xae\x70\xc6\x9a\xc6\x73\x0b\x18\x2b\xc0\x0b\x0b\xf0\x15\xe0\xa5\x25\x3a\xd2\xdc\x8f\x2c\x44\xa3\xf8\x76\x41\x7a\x5e\xdf\xae\xc8\x7f\x62\xef\x87\x74\xbd\xea\xed\xfb\x5f\x5e\x9f\xbd\xfd\x13\xaa\x6b\x90\xdb\x48\xa7\xc3\xdf\xf0\x84\xce\x8a\x1e\x19\x82\x6c\xe2\xfe\x04\x4f\x47\xfd\x97\x41\x35\xf5\xfb\x2f\x03\xd9\xec\x11\x82\x67\x03\xdd\x9c\xe0\x29\x3f\x0d\xa6\xfd\x5e\x30\x31\x90\xd9\x85\x19\x8d\x04\xb1\xd9\x74\x36\x43\x17\x8b\x34\x2f\x87\x41\x35\x9b\xad\xa7\x61\x7f\xf1\xba\xff\x46\x20\x6f\x9f\xd4\xd5\xf4\xb7\xd9\x6c\x36\xea\xcf\xee\x47\x2f\x67\xf7\xa3\xb0\x3f\xbb\xf7\x17\x28\x20\x8f\x91\x21\x32\xdb\xda\x56\x6d\x5b\x53\xdb\x0a\x4c\x0b\x4c\x83\x9a\x46\x99\xaf\x79\xc3\xcc\x22\x4c\x0a\xe7\x53\xd8\x76\xf3\xf5\xc8\x34\x06\x64\x18\x40\x63\x11\x74\xab\x03\x64\xba\xd5\x12\x1a\x81\x0f\x63\x38\x86\x27\xf0\x14\x9e\xc1\x73\x78\x01\x2f\xc1\x1f\x81\xef\x83\xaf\x2a\xea\x71\x1a\x25\xeb\x22\xbe\xe5\x54\x24\x1f\xb5\x8d\x1c\xea\xc6\x29\x70\x53\x9f\x04\x09\x45\xeb\x74\xce\x17\x71\xca\xe7\xb6\x74\xd8\xc9\xf9\xbf\xd6\x71\xce\x3d\xef\x50\x27\xbf\x5f\x65\x79\x59\x88\x40\x4a\xb5\x94\x6f\xcc\x99\xb9\xe5\x87\x16\x9c\xed\xdb\xa4\x41\x54\x08\x83\x70\xb5\x4a\x36\xd8\x8e\x0e\xf3\xcb\xf5\x92\xa7\x65\x41\x6a\x4b\x69\x19\xc6\x29\x73\xad\x51\xa4\x48\x5c\x64\xf1\x7b\x85\x87\x4f\x45\x78\x29\xcb\x09\x7c\x3a\x0a\x7a\xa8\xf3\xe6\xed\xd9\x29\x22\x47\xf1\x02\x1f\x5a\xcc\x2a\xcf\x22\x5e\x14\x44\x15\x89\xf5\xba\x31\x5a\x14\xf2\xae\x35\x9c\xbf\x89\x13\x7e\xbe\x49\x23\x6c\xbb\x56\x61\x79\x85\x74\x70\xa6\x47\x0f\xa2\xbb\x39\x26\x20\xf9\x01\xb4\x2e\x17\x2f\x10\x39\xe2\x49\xc1\x5b\x24\xe3\x84\x23\x32\x10\xc3\xf1\x2e\x50\x8e\xd7\x34\x25\x15\x39\x37\xde\x46\x57\x42\x40\x25\x15\x34\xfb\x2f\x50\xdd\xec\x61\x4b\xf2\xea\x07\x8b\xbc\xef\xd0\x1a\x97\xd9\x7c\x9d\x70\xcf\xd3\xb3\x2a\x61\x32\x66\xc0\xae\x8c\xbf\x26\xa3\x89\x59\x6d\x98\x5f\xde\xda\x3c\x86\xda\xb5\x14\x9b\xa2\xe4\x4b\x44\x44\x7f\x41\x08\xb8\xdb\x85\x32\xf9\x58\xa2\xa9\x29\x5b\x25\xda\xeb\x51\x6c\x4d\x78\x23\xa4\xc1\x60\x38\x18\x0c\x93\xf8\x62\x18\x65\x73\xbe\x8c\xe5\x13\x07\x42\xe8\x81\x52\xb5\xe2\xdd\xf3\xd4\xef\x20\x5c\xce\x27\xaa\x89\xa7\x87\xc9\x04\xc0\x09\xe5\xf8\xc7\x6c\xce\xdf\x49\x08\xa9\x71\x8b\xf1\x75\xc1\x3b\x45\x99\xc7\x51\x89\x9a\xda\x7b\x69\x9c\xbb\xda\x0e\x69\xbb\xd9\x8a\xe7\x61\x99\xe5\x55\x91\x2d\xaa\x1b\xbe\xb9\xcb\xf2\x79\x27\xaa\x84\xd3\xab\x52\x7e\x57\x4d\x67\xd3\x6d\x3d\xc3\x70\x42\x83\x8a\xbd\x22\x8f\x86\x83\x92\x17\x25\x2e\x65\xe8\xf6\x71\xb3\xe2\xa4\xaa\xd0\xbf\xd6\x61\x11\x8b\xe5\x58\xa8\xe7\x0d\x67\xdb\x59\xf1\xd8\xe0\xf3\x41\x21\x6b\x89\xb6\xe0\xc1\x07\xab\xac\xe8\xe3\xbc\xaa\x46\x84\x90\x9a\x0f\xd4\x82\xdf\x65\x73\x8e\xd1\x75\x78\x1b\x16\x51\x1e\xaf\x4a\xd4\xec\x47\x0e\xa9\x8a\x19\x62\x08\xa1\x60\xf9\x20\x4e\xe7\x3c\x2d\x3f\xa5\x71\x09\x19\x4b\x07\xb2\x20\x27\x2c\xf0\xad\x84\x43\xc2\xd2\x81\xb4\xce\x39\x44\xba\x59\x55\x09\xac\x59\x3a\x10\x62\x57\xf4\x61\xc1\xd2\x81\x58\xf3\x8f\x57\x61\x1e\x46\x25\xcf\x8b\xaa\x1a\x4e\x67\x77\x8f\x66\xf7\xa1\xdf\x9f\xad\x17\x8b\xc5\x22\x18\xc2\x95\xeb\x0f\xac\x40\x79\x93\xfc\x6e\x05\x4d\xca\xa1\x28\x37\x09\xa7\x48\x4b\x12\xd5\xb5\x32\x51\x8e\x0d\xa8\x13\x22\x02\xb9\x0b\xb8\x40\x04\x52\x17\x10\x21\x02\xb1\x00\x98\xcd\x41\x04\x42\xa6\x66\x40\x61\x99\x2d\x91\x99\x46\x7e\xd4\x50\xb0\x6d\xbc\xa0\x1c\xa3\x78\x81\x08\xdc\x5d\xc5\x09\xa7\x25\xdc\xc5\xe5\x15\x2d\x41\x58\x34\xcd\x61\x9e\xd1\x1c\xca\x7c\x43\x73\x58\xc4\x69\x98\x24\xa2\xa5\x78\xa7\x29\xc8\xd3\x9d\xa6\xc2\x8b\x97\x71\xba\xe6\x34\x85\x94\xdf\x09\x92\x29\xbf\x43\x04\xe6\x3c\xe1\xa5\x80\x4a\xc7\x45\x53\x98\xf3\x8b\xf5\xe5\x25\xcf\x69\x0a\xb7\x61\x2e\x10\x6f\x43\xc1\x67\x94\xa5\x45\xd9\x7c\x26\xdc\xf9\x30\x72\x13\x10\x6b\x04\x04\x22\x11\x6b\x0b\x98\x6c\x08\xbc\x4c\x12\x5c\xc8\x85\xab\x40\x44\x7c\xab\x96\x1c\x50\x70\x85\x5f\x70\xc9\x9b\xbc\x5a\x11\x10\xdd\x14\xf2\x4b\x69\x0c\xca\xbc\x68\x0c\x4d\x11\x58\x40\xf3\x35\xa7\x21\xc8\xb3\x8d\x86\x20\x0e\x35\x1a\x82\xf5\x20\x34\x84\xf7\xe1\x7b\x1a\xc2\xdb\x74\x11\xa7\x71\xb9\xa1\xa1\x0c\xce\x05\x7d\xf1\x2b\x18\x48\xc2\x42\x7e\xcb\x86\x60\x72\xbd\xe2\x92\x67\xb9\x21\x04\x36\x31\x4f\xe6\x34\xd5\x07\x81\xe8\x50\x2d\xc1\xd8\xd2\x80\x54\x0b\x11\xe0\xf7\x25\x4f\xe7\x05\x4d\x21\xbc\x0b\xe3\x52\xfc\x16\x9b\x34\x92\xf4\x44\x03\x91\x5a\x1c\x04\x6b\xa5\xfe\x99\xd1\x84\xdb\x30\x8f\xc3\x8b\x84\x5b\x6d\x30\x80\xfe\x31\xaa\x21\x61\xdb\x38\x2d\x79\xbe\x08\x23\xee\xb2\x1a\x2f\x57\xea\x71\x96\x98\x2f\x0d\x97\xbc\x58\x09\x8c\x14\x94\x07\x13\xa8\xaa\x25\x18\x4b\xd7\xcb\x16\x60\xb5\xbe\x48\xe2\x48\x83\xe2\x45\xcc\xc5\x0e\xad\xf2\xf8\x56\x84\x9d\xbb\xd0\xac\x54\x97\x1c\x6d\x78\x28\x02\xc2\x30\x2a\x77\xc1\x05\x8d\x41\xf9\x08\x9a\x81\xba\x14\xa4\x19\x5c\xa8\x37\x6f\x34\x83\x30\xdd\xd0\xac\xb6\x79\x7a\xd4\x89\xd3\x4e\x42\x8a\x69\x14\xb0\x64\x1a\x05\xba\x76\xd9\x29\x6a\x4c\x60\xc5\x86\xd3\xde\xac\xff\xd8\xfb\xbf\xec\xfb\x57\xdd\x49\xf5\xff\x7e\x0b\x86\x30\x67\xc3\xdf\xfe\x0b\x0b\x05\xe7\xf7\x65\x15\xcf\xab\xdb\x30\x59\xf3\x2a\x09\xd3\xcb\x75\x78\xc9\x2b\x21\xd4\x4a\x74\x87\x71\xca\xf3\x2a\x89\x8b\xb2\x2a\x78\x59\xe5\xfc\x96\xe7\x05\xaf\x84\xbb\xb9\xaf\x2e\x84\x63\xbc\xcd\xa2\xf0\xa2\xba\xcc\xc3\xd5\x15\x41\xc3\xc6\xc1\x6e\xda\x0e\xb6\x13\x33\x0e\x21\xcb\xa1\xac\x2d\xca\x12\x73\x81\x20\x96\x90\x0a\x23\x37\xa9\x4f\xbc\xc0\xdf\xa1\xef\x18\x8b\xab\x0a\x7d\x87\x18\x8b\x4d\xd9\x23\x1f\xc8\xbc\x2a\xfe\xc2\x19\x4e\x59\x0c\xed\x9a\xab\xa0\x93\x43\xcc\xba\xbe\xa0\x90\x78\x1e\xfa\x2f\xc4\x18\x1f\xac\x38\xbf\xc1\xc4\xf3\x4c\xb9\x6f\x6e\x2b\xd4\x65\x43\x6f\x09\x1b\x8c\x94\x8b\xec\x1b\x87\x05\x68\xc9\xcb\x50\x17\x44\x4e\x84\x6d\x74\x19\xce\x2d\x9f\xc4\xf3\x70\xde\x65\x69\x55\xc5\xe4\x84\xc4\xac\x1b\x7b\x1e\x9a\xcd\x10\x63\xb9\x39\xe4\xe3\xaa\xc2\xee\x24\x44\xcc\xa2\x76\x16\x81\x69\x90\x9a\x40\xb3\x32\x29\x13\x19\xeb\x0c\xc4\xd2\x1b\xb6\x87\xbf\xcd\xe6\x3d\x3c\xa1\x32\x5e\xee\xcd\xfa\xc1\x64\x36\xef\x91\xc9\xd0\xae\x66\x83\xcd\x05\x32\x98\xc6\x41\x42\x68\x30\x40\xee\xa0\x62\x25\x42\x95\x66\xb5\xf1\x02\x0f\xa7\xb3\xe9\x2c\x10\x87\xdd\x8c\xc0\xc9\x8c\xce\x06\x81\x3e\xbc\x62\x67\x64\xac\xc8\x33\x43\x9e\x87\x25\x46\xaf\x5a\xb4\xd9\x2b\x04\x8e\xeb\x96\xf8\x23\x17\x7f\x78\x3f\x6c\x48\x4a\xd0\xdf\x85\xcb\x16\x1c\xcc\xc3\xfe\x22\x18\xc6\x52\x66\x87\x17\xd6\xa6\x94\x3d\x44\x69\xd4\x7f\xfe\x47\xe8\x5c\x3c\x48\xc7\xff\x2a\x99\xe1\x6c\xbe\x27\x24\x77\xf3\x1e\x8b\x74\x63\x30\x9b\x3f\x26\x93\x43\xdb\xf8\x30\x7b\x43\xd7\x06\xb4\x98\x1f\x23\x32\xc1\x8e\x3d\xdc\xc2\xad\xd4\x1c\x42\x35\xc2\x50\x20\xf0\x41\x71\x13\xaf\x3e\x66\xa7\xa9\x88\x6e\x37\x18\x45\xd9\x52\xf8\x3b\x04\xb6\x45\x08\x15\xb1\x50\x0e\x3e\x99\xb4\xe2\x26\xe3\x5d\x4a\xc8\x59\xd7\x87\x94\x75\x7d\x63\x03\x65\x63\x03\xea\x1a\xb4\x9b\xcb\x1f\xc9\x69\xe9\x79\xdd\x54\x73\x7b\x84\xa6\x02\x32\x49\x59\x77\x44\x53\xcf\x43\x81\x42\xc0\x82\x1a\xa9\x73\xd6\xcd\x8d\xcd\x94\x75\x8d\x39\x01\x47\x60\x17\x18\x4f\x2f\xe3\xe5\x66\x1d\x10\x3c\xe9\xea\xe6\xe3\xd9\x98\x90\xde\xec\x42\xc9\x2b\xe7\x97\xfc\x7e\x65\x4d\xa9\x3f\x16\xcb\xc1\xce\xa6\xad\x24\x9a\x55\x40\x47\x17\x81\x0f\x74\x71\x03\x13\xa2\xe4\xfc\xcf\x07\x7c\xcd\x25\x5c\x36\x56\xf9\x7f\xda\x9b\xb1\x23\x5f\xfd\x78\x57\xff\xca\x11\xab\x7d\x9d\xf8\xa3\xec\x09\x32\x0b\x4b\x66\xeb\x10\x58\xa8\x47\x0a\x21\x73\xd0\xa1\x60\x57\x83\x55\x2e\x48\x95\x9b\xb7\xc5\x69\xba\x5e\xf2\x5c\x9c\x85\x38\x24\x9e\x77\x35\x0d\xed\xdd\x89\x08\xde\x07\xa8\xcb\x72\x1b\xab\x4e\x36\xb8\x90\x21\x21\x14\x03\x79\x92\x42\x48\xe8\x06\x3b\xe7\xab\xd3\x0c\x49\xdd\x38\xf3\x5b\xe5\x84\x8d\xd6\xe4\x4a\x61\x1a\x6f\x79\xd2\x68\x48\xee\x79\x29\xd9\xba\x7e\x51\x5d\xc2\xd5\x29\x43\x8f\x45\x7f\xdd\x38\x90\x03\x0a\xdb\xcc\x79\x79\x70\xce\x7d\x47\xad\x95\x34\xf5\x3c\xb5\xc9\x79\x55\xa1\x47\x8a\x11\x6d\x2d\x5b\x44\xc8\x03\x2c\x89\x61\xda\xad\x3b\x7c\xa9\x30\xdf\x51\xbc\xd6\x86\xc9\x48\xf7\x82\x21\x3c\xdd\xd6\x01\x71\xd2\x8e\x7b\xc5\x71\x39\x58\x84\xe5\xeb\x3c\xcf\xee\x5e\xcb\xb2\xa6\xf3\xa9\xee\xb0\xe5\xae\x8a\x15\xe8\x54\x41\x1e\xb8\x1f\x16\xca\xa1\x0a\x68\x98\x97\x52\x2d\xba\x38\xff\x7e\x44\x1a\x19\xa4\x6c\x24\x8f\x40\x71\xd6\xf6\xfd\x93\xf0\x15\x1b\x9d\xf4\xfb\xf6\x91\xb4\x25\x28\xf2\xd2\xd7\x25\x0e\x09\x64\xec\xc2\x92\x2f\x24\xcd\xec\x15\x1b\x79\x5e\xf6\xfd\xb1\x16\x1b\xd9\xf6\x7a\xa1\x96\x87\x7a\xf3\xd0\xef\xa7\x44\x7d\xcb\x1c\x59\x8d\x39\x16\x63\x9e\x91\x5e\x2f\x3d\x32\x50\xad\xb4\x05\x11\xc7\xe3\x48\x82\xb7\xf2\x78\x41\xdf\xcd\x86\xe6\x48\x29\x8c\x65\x88\xb9\x63\xe9\x3d\x9c\x09\xeb\x5a\x82\x76\xa5\x24\x74\x4f\x2c\xe9\x86\x6d\x45\x9c\x49\xbb\x23\x13\x28\x75\x47\x60\x54\x54\xb4\x75\x1c\xd5\x1d\x81\x72\x16\x54\xdf\xab\x89\xdf\xdd\x03\x9f\x76\x47\x75\xb3\x57\x77\xed\x57\xe6\xb2\x7a\xa8\xf2\x2c\x3e\x37\xb7\x89\xaa\x5e\xcf\xd4\xad\x9e\x34\x1c\x11\xe2\xa8\x2b\x6b\x7e\xcb\x62\xd0\xa3\x16\x19\x53\xd1\x75\x97\xa5\xa6\x8e\x1d\x26\xf1\x65\xca\x52\x47\x9f\x3f\xef\xe8\x33\xe3\x83\x24\x8b\xc2\xe4\x97\x30\x2f\x4e\xf2\x93\x9c\xe5\x52\xa3\x49\xbc\xc0\xf9\x40\xc4\xab\x8c\x95\xc4\x5c\x54\x1f\x35\x2a\xc0\x07\x3a\xb4\x3b\x49\x4f\x52\x96\x4a\x5e\x88\xe8\xce\x59\x3a\xb8\xfd\x16\x62\x52\xb6\xa7\x6c\xab\x5e\x76\xc8\x3a\xb6\xbe\xcb\x90\xed\x65\x98\xdf\xf0\xb9\x86\x47\xf2\xd7\x11\xdc\x35\x6e\xd6\xc0\x99\x2d\x06\xd9\xaa\xef\x09\x17\x5a\xc9\xfb\x7d\x72\x3a\x88\x22\xfd\x98\xda\x60\x4d\x79\xe0\x48\xe4\xdc\x29\x39\xe9\x2a\x93\x9c\xb4\xa9\x30\x41\x77\xd4\xa0\xbf\x95\x07\x57\x93\xe3\xb7\x84\x59\x3e\xb0\x6a\xde\x88\x50\x37\xfc\x5a\x8d\x38\x55\x89\xb4\xd0\xcb\xd3\x81\x5a\x33\x13\x79\x15\x82\xdc\x48\x58\xdd\xcf\xe1\xbc\xd9\x28\xab\xcd\x0e\x8c\x6d\xc5\x54\x94\xab\xcb\x3d\xa7\xa3\xae\x8d\x4d\x08\x1a\x97\x49\x76\xb1\x43\x24\x75\x80\x22\xde\x74\x3e\x77\x89\x36\x3d\xb5\x36\x8e\x47\x1a\x45\xe5\x6a\x0a\x4f\x43\xac\x00\x51\xed\xec\xdc\x6b\x4c\xb6\x7a\xd1\x66\x81\x6c\x2b\xb4\x87\xee\x40\x85\x89\x15\x16\xd8\x2c\x07\xf6\x40\xec\x51\xb3\x3d\xef\x1c\xf2\x0d\xc2\x0e\x69\xa9\xa0\xb0\xcb\xc5\x2e\x92\x60\xaa\x21\xfc\xde\xc9\x00\x76\x1f\x6b\xd8\x6d\x84\xd4\x16\x4a\xf8\x5c\x9e\xe5\x02\x2c\xfc\xfa\x20\x51\xd7\x41\xd2\x80\x49\xea\x00\x2c\xba\xf4\x68\x46\x97\xe2\x06\xe3\x44\x04\xfd\x44\xc4\x04\x72\xb0\xe7\xc5\xca\xae\x4f\x62\x16\x2b\xbb\x4b\x59\xdc\x90\xb1\xe3\xe4\x85\xf1\x1d\x4e\xe5\x42\x73\x1e\x2e\xb5\x2b\xc1\x04\xb8\x74\x14\x60\x51\xa1\x24\xb6\x0a\x2c\x81\x4c\x38\xb3\x66\xf1\x1f\xec\xfd\x91\xd1\x57\x6e\xf9\x17\x1c\x88\x53\x8f\xc8\x4c\xc8\x5d\xa6\xe7\x61\xee\xb8\xb3\xbd\x15\x8b\x50\xcc\xf0\xda\xa6\xe7\x98\xe7\x2f\xce\x8b\x07\xc7\xec\x9a\xac\x2f\x67\x8c\x4f\xce\x31\xa1\xe8\x44\x70\x30\xb9\xc6\x84\x9e\xe3\xd2\x0d\x1c\x3e\xaa\xbd\xd3\x57\x0a\xb7\x61\x8e\xd4\x98\xf7\x32\xea\x90\xd6\x56\xda\x0b\xc9\x82\xc3\x2f\x18\x9d\x20\x02\x1f\x08\x75\xca\x48\x76\xc8\x22\xcb\x97\x88\xc0\x17\xf8\xd8\xc2\xb8\xd8\xc3\x50\xfd\xdb\x06\x5e\x23\x02\x25\x97\xd0\x13\x64\xd9\x8e\x17\xb2\x8d\x91\x50\x00\xc4\xac\x1e\x36\xe2\x5a\x64\x9e\x67\xb5\x33\x9a\x36\xcd\xe6\x96\x8b\xb1\x0f\x2e\x8e\xba\x5d\xc3\x04\xf6\x38\x86\x05\xdf\xa9\x8a\x0a\x36\x6e\xb9\x80\x65\xf9\xde\x1a\xae\xb8\x5e\x86\x8d\xc9\x2c\x86\x54\x6d\x02\x7f\x21\xd4\xd4\x8a\xf6\x45\x24\x17\x0d\x4d\x2d\xe9\x17\x19\x07\x49\x21\x48\xaa\xb2\xa6\xa4\x86\x7d\x11\x9d\x54\x96\x6c\x4d\x5d\x49\x75\x58\xb0\x2a\x58\xed\x4e\xf2\x5a\x8c\xc3\x88\xc0\xa5\xdc\x38\xa2\x04\x0f\xef\xc4\x00\x59\x84\xd9\x1d\x70\xa1\x76\x40\x97\x88\x76\x97\xf3\x59\xf5\xea\x6a\xd1\x6e\xef\xa9\xea\xd5\x15\x9a\x5d\xca\x19\x07\xbd\xcb\xbb\xeb\x54\x85\x25\x85\xff\x91\xd0\x6b\x87\xe4\x97\x46\xdd\x1a\x8d\xfd\xe2\x68\xfd\xbf\x30\x07\x91\xca\xd8\xce\xb3\xdd\xce\x91\xd3\xf9\x2f\xfb\x3a\xcc\x68\x83\x13\xd2\x30\xeb\x0a\x54\x78\xa7\xbd\x57\x39\xf9\x81\xfe\x5d\xba\x2b\x8c\x9a\xc3\xaa\x73\x8e\x5f\x8b\xf5\x08\x89\xfe\x8a\x33\x0e\xb2\xf5\x41\xb0\xcb\x5e\x21\x02\x39\xbc\x53\xf9\x8a\xab\x1a\x66\xec\x35\x7e\x2d\xc4\xe1\xe2\xd6\x2a\x72\x28\x27\x9f\xe8\x1b\xe3\x6c\x6e\x06\x57\x61\xf1\xe1\x2e\xfd\x49\xe7\x12\x98\x93\xc9\x39\x4e\x0f\x29\x28\xa4\x8e\xb1\x19\x59\x96\x93\xbf\xd2\x9f\x08\x55\x7c\xab\xbd\x10\x4c\xfe\x04\xef\xac\x32\x7c\x90\x03\x6d\xd6\xc3\x18\xaf\x2a\x53\x90\x30\x44\xce\xe8\x17\x42\x65\x22\xa9\x89\x04\x88\xc0\x23\xae\xc7\x2a\x0b\xe6\x1c\xff\x0d\x84\x36\x4b\xd7\x29\xe0\xa6\x0e\x2f\x7c\xce\xcf\x12\x92\xf2\x3b\x4d\xe3\xc0\x7b\x2d\x0b\x6a\x5c\xd1\x40\xa6\xae\xe7\x98\x4f\xfe\x44\xff\x2c\xd4\x82\x4b\x56\xea\x1a\x97\x44\x78\x31\x67\x5f\x7f\x72\x28\xd9\x0c\x76\x7a\x32\xab\x67\x64\x16\x40\x30\x24\xd2\xf1\x5d\xe3\x2f\xce\x98\xbf\x7e\xe3\x98\x33\x67\xcc\x9b\x96\xaf\x04\x63\x9c\x84\x7e\x92\xb1\x6a\x4b\x11\x3f\x99\x02\x9c\x4e\x0b\x18\xcb\x27\x6f\xe8\x27\x88\x55\xf3\x0b\x3d\x33\x7f\x76\xc0\x5e\x69\x42\xaf\x21\x17\xca\x26\xcd\xd3\xdd\x93\xc9\x70\xd6\x9b\xf5\xaa\x7e\xdf\xdc\x78\x18\x3d\x98\x68\x11\x19\xf7\x00\xb1\x10\x4c\x7c\x50\xfc\x27\xa8\xcb\xf8\x44\x2b\x03\xe7\xf8\x4c\xa8\x2c\xa0\x28\x4c\x12\x24\x11\x06\x9a\x8b\xff\x96\x5f\x3b\xfb\xfd\x93\x98\x21\x30\x1a\xa3\x5e\x45\xe8\x9f\x66\xc9\x3f\xb7\xc4\xa3\x58\xe8\xea\x53\x07\x3d\xda\xa2\x2e\xb3\xaf\x5c\xec\x6b\x01\xb1\x94\x9f\x05\xd7\x5f\xe0\x47\x47\x7a\x3f\xea\x2b\x4a\x54\xbb\x86\xd3\x44\x81\x4d\xde\x67\x2c\xd9\x29\x17\x08\x8a\x0d\xa9\xbf\x3b\x1b\x7d\x8f\x8d\x91\x9b\x71\x04\xae\xb1\x56\xe2\x8f\xd4\xd5\x8f\x1f\xbe\x7d\x98\xab\x22\x7f\xb6\x2e\x06\x95\x61\x7e\xc9\xe5\xbd\xdc\x3e\xff\xb6\xc6\x79\x8e\xdf\x38\xa3\xff\xf4\x87\x47\x7f\x72\x46\xff\xa5\x61\x19\x51\xbd\x7f\x1f\x40\xba\xd4\x37\x87\x1c\xe9\x7f\x1b\x21\x1f\x72\x52\xcd\x6c\xa6\x96\x21\xa6\x73\x46\xff\x6d\x37\x70\xb0\x24\xaa\xca\x72\xa8\xbc\xea\x26\xe1\x13\x7c\x98\x20\xd2\x8b\x14\x7e\x47\xb5\x26\xff\x43\xff\x21\x4e\x34\x5d\x83\xd3\x3e\x49\xd5\x6a\x65\x2c\x60\x09\x25\x93\x86\x14\xd5\xf3\xf4\x50\xc7\x25\x2f\x29\xed\xa4\x99\x4a\x30\xff\x50\x47\x95\x2a\xfa\x2b\xd0\xdf\x1c\xbd\xff\x62\x14\x5e\xe0\xb5\x3c\xe2\x17\xb2\xa7\xf8\xff\xe3\x08\xde\x0a\x42\x69\xfe\x3f\x08\x7d\x60\xe5\xb7\x9c\x38\xd2\xfc\xc7\x81\xbd\x3b\xb3\xce\xfb\x5a\x06\x21\xbb\xd3\xfe\xaa\xf3\x55\xf3\x9d\xe3\x14\x62\xb5\xa3\xc2\x37\xe9\x3b\xca\x70\x37\x68\x32\x7e\x47\x9a\x3e\x63\xa1\x0e\xa2\x70\x38\x58\x65\x05\x53\x3f\x55\x35\x22\x3d\x5f\x84\x48\x1c\x72\x62\x0a\x2f\xa9\xdc\xa8\x58\x39\x1d\x61\xb4\xbf\x08\x5f\x5c\xef\xfa\x70\xc9\xc5\xe1\x21\xd7\x8a\x5e\xb3\x06\xce\x8d\x9f\x6c\xf2\xe7\xe3\x93\xf4\xfb\xdd\xb4\xf5\x24\xed\xf5\x0e\xe6\xab\x69\x60\xef\xf4\x85\xb7\x12\xa4\x40\x09\xa6\xa5\xeb\xa5\x73\x41\xaa\x9c\x8a\xe6\xe7\x23\x94\xdc\xc1\xcb\xb9\x36\x8a\xb5\xe7\xa9\x8d\x68\x4e\xfc\xd8\x45\x4c\x79\x63\xab\xcc\x35\xd3\xf3\xd6\x91\x11\xf3\x6f\x33\x32\xe7\xc2\x0c\xce\x71\xe8\xce\x14\xf2\x96\xa5\x7d\xaf\x9d\xfe\xaf\x38\xe6\x80\x44\x00\x11\x72\x47\x71\xb5\xda\x86\x07\xf4\xa5\xe0\x4e\x3a\x2f\x82\x96\x9c\x43\xc4\x61\xed\x4e\x96\xb5\x27\xdb\xb1\x90\x8c\xef\x46\xbb\xf8\x2d\x2e\x85\x9a\x90\x5d\x33\xc9\x1a\xa6\x38\x97\x11\x52\x80\xdc\x78\x21\xe1\x22\x60\xd8\x67\x32\xe1\x87\xfd\x4a\x57\xf8\x01\x1b\xa2\xd9\x2a\x75\xf1\x98\x0e\xc5\xc1\x3b\x69\x0b\xd8\xf3\x0e\x59\x1d\x81\x03\x3c\xd6\x4e\x66\xa4\x8f\xd1\x4c\xc8\x85\x10\x6a\x16\x17\xb5\x4c\x35\xfa\xb6\x9d\x5f\xdb\x9d\x87\xb6\x1a\x15\xae\xbc\x17\x0e\xb1\x56\xb6\xe4\x79\x26\xe7\x71\xe8\x9b\x70\x1a\x54\x9f\x4a\xa3\x1a\x62\x57\x76\xca\x9d\x58\x55\x87\x7e\xab\x26\xf0\x73\x46\xad\x78\xdb\x7d\x69\xe1\x34\xb9\xde\x86\x3b\x49\xd9\x66\x4f\x05\xce\xf1\x9c\xcb\xe8\xca\xc1\x6f\xa8\xcf\xdb\xfb\x19\xa7\xda\xdb\x67\x0b\xa9\xc7\xf8\xe0\xa9\xf6\x45\x46\x78\x6f\xda\x94\x36\x6d\x4a\x86\xa1\xa5\x60\xe8\xdb\xc9\x3a\x7c\x2e\x5d\xea\x4b\x29\x05\x44\x84\xa2\x79\xde\x79\x2b\x56\xbc\x6d\xcf\xfc\xf8\x2b\x53\xdc\xca\x0c\xf2\xa0\x89\xa8\x2e\x6c\x83\x3d\x9b\x3e\x5c\xda\xf4\x21\x17\x19\xe5\xbb\x7d\xa3\xb8\x74\xb7\xa8\xa5\xc2\x97\x52\xf4\xca\x96\x53\x77\x3d\x17\x8e\x62\x1d\x72\x3d\x9a\xa9\x7b\x77\xcc\x7d\x7b\x9d\xfa\x31\x80\x0d\x32\xef\xf9\x7e\xca\x7e\x23\x93\xbe\x5d\x7e\x6f\x1e\x30\xe2\x87\x82\x03\x99\xef\xc5\xd1\x57\xe4\x7a\x23\xed\xf1\xd0\x49\x7a\x20\x82\x38\xc7\x77\x1c\x6e\x39\xdc\x70\xa1\x46\xaa\x41\xe8\x57\xf7\x4d\x61\x18\x9d\xba\x69\x1c\x83\x38\x25\x76\x97\x77\xc7\x1f\x3e\xf0\x1f\x3c\xef\x5d\x17\xf2\xf9\xdb\x15\xea\xad\x31\xc3\x76\xf2\xff\xa0\x8a\x37\xd8\xd7\xf8\xa3\x33\xe5\x69\x4b\x85\x9a\x70\x4a\x9d\x82\xd7\x1c\xde\xba\x9a\x70\xdd\x66\xd0\x7a\xed\x6b\xed\xb5\x77\xbd\xad\xd4\x26\xb5\x8e\x96\xeb\x35\x9c\x09\x55\x3b\x6f\x79\xd1\x73\x47\x3f\xc3\xe2\x77\xe3\xdc\x6b\x97\xbb\xb7\xce\xd8\x45\x9e\x2d\x7f\x77\xb4\x6b\xcc\x8f\x5c\x41\x04\x8e\x0c\xce\xe0\xb5\x3b\xc9\x6b\x17\xcf\x94\x7f\xae\xb1\x4a\x9e\x03\x59\x74\x31\x19\xe0\xaf\xf8\xaf\xa0\x40\xd7\xf8\x57\x91\x59\x89\xb6\x53\x77\x3d\x44\xe9\x1c\x5f\x71\x78\xc7\x9b\x1a\x97\xd8\xbb\x77\xcd\xa9\xad\x97\xf3\xc1\x54\x1c\xb7\xb2\x2a\xb1\xff\xaa\x5a\x3d\xea\xda\x9a\xf4\x87\x2e\xc1\x5c\x26\x52\x54\x64\x0b\x04\x51\x44\xa7\x01\xe8\xd8\x8f\xaa\xba\x27\xe6\x22\xc0\xeb\x17\x30\x02\x74\x91\x64\xd1\x0d\x12\x67\x28\xd8\xa2\x30\x4d\x9b\x02\x31\xe8\x9a\xaf\x0b\xf3\xbc\xed\xed\x0e\x5a\x0d\xa6\x74\x49\x05\x71\x5b\x32\x6d\x57\xd0\xf7\x1e\x2b\xee\x14\xd8\x4b\xb7\xc0\xee\xf6\x11\x28\x6b\xfd\xac\x7f\xef\x4f\xfd\xf8\xa0\xc8\x12\x2c\xff\xf6\xc4\x16\x06\x77\x4a\x27\x48\x56\x85\x91\xfc\x23\x17\x8b\xa3\x6e\x80\xc4\xc2\x4b\xb7\x14\xab\x9a\xa1\xfe\x9b\x02\x75\x65\x28\x50\x8c\x88\xbb\xec\x56\x5f\x5c\x9e\xaf\xc2\x88\x63\x7b\xb3\x2c\xff\x4f\x20\x5d\x35\x72\x1f\x94\x94\xc4\x86\xdc\xfa\x12\x95\xb1\x78\x92\x53\xe7\xe9\x22\x6b\x12\xfe\xae\x7c\x78\xd3\xeb\xa1\x2e\x0b\x3d\x0f\xf5\xfb\xa2\x31\x89\xc5\x19\x17\xcd\x79\x84\x60\xff\x7f\x61\x32\x81\x3e\x1f\x44\x91\xbc\x87\xd2\x11\x3f\xe3\xb6\xbe\xcd\x62\xb0\x96\x21\x8b\x34\x22\x96\x66\x21\x68\x0f\xcc\xca\xa6\xde\xfc\x15\xd9\xf1\x5d\xd9\x8d\xc8\xc9\x09\x89\x17\x18\x9b\xbf\x47\x9a\x84\xaa\xbc\x4a\xa3\xc9\x17\xfa\x91\xc8\xa7\x92\x2a\xb6\x3f\x69\xfe\x64\x29\x9c\x86\xad\x3f\xc7\xb9\x3f\x21\xa1\xa9\xca\x1e\xed\xd8\xf1\xc4\x34\x5a\xa7\x6a\xee\x79\x9f\x31\x87\x94\x4c\x9a\xc8\x79\x8c\x68\x59\xd7\x22\x03\x80\x18\x42\x10\xde\x46\xeb\x64\xa3\x32\x32\xd3\x88\x17\xee\xab\x20\x76\xdb\xbc\x0c\xf8\x29\x2c\x8a\xa3\x56\x77\x97\x2d\x4d\xf7\xe8\x48\x5f\x3e\x78\x5e\x6e\x2e\x70\x47\x04\x42\x66\x35\x4a\xde\x08\xcb\xa0\x94\xcb\xc7\xea\xba\x5e\x93\x13\x62\x92\x9b\x84\x95\x6e\x69\xfa\x24\x51\x17\xc4\x89\xda\xc1\x48\xf6\x4e\x93\x40\x10\x8a\x18\xfb\x40\x42\x16\xca\xa2\xbf\xbd\xd2\x8d\xba\x6c\xc1\xf5\xe5\xaf\xb9\x40\x09\xf5\x8d\x82\x3c\xb1\x62\x91\xc9\xe9\x51\x04\x32\x7d\x3d\x62\x51\xec\x10\xd1\x6f\x6e\x22\x2c\xbe\xfe\x4f\x33\x14\x36\x2c\x58\xcc\xd8\xfa\xa8\x39\xe7\xe6\x5c\xb8\xaa\xf5\x24\xb4\xe6\xd2\xc3\x6e\xa5\xaa\xd1\xe7\xaa\x92\xce\xb1\x01\x4c\x54\x9a\xd9\xf3\xe9\x48\x55\xd3\x85\xd3\x16\x39\xd6\x56\x1a\x43\x43\xb1\xe9\x74\xa7\x29\xa8\xe1\xbc\x3d\x7b\xdb\x17\x68\x4e\xdd\xda\xd9\x2e\x47\x2e\x60\x65\x1e\x10\xdb\xcd\x24\x55\x35\x9c\x82\x7d\x6d\xe5\xf6\x48\xc5\x22\x93\xac\xaa\x0a\xb9\x04\x5d\xb6\xef\xea\xfc\xb9\xaa\x16\x55\x35\x62\x2c\x1d\xcc\xb3\xf5\x45\xc2\xd5\xcb\xdf\x73\x89\x34\x09\x95\xb9\x4c\x42\x7d\xcb\xd4\xc3\x8b\xc9\x88\xfa\x84\xb6\x96\x32\x19\xd1\xa2\x0d\x92\xcf\xa2\xe5\xfb\x67\x7d\xf0\x13\x47\xa7\x26\x05\x1d\x3f\x96\x4f\xfc\x13\x1e\x95\x79\x1c\xa9\x3f\xe6\x94\xea\xa7\x87\x75\x06\x8f\x27\xd4\x8c\xa5\xd5\x6c\x5b\xcd\x6a\xf2\x68\x08\xd2\xe5\xff\xa8\x7c\xd1\xb9\x38\x56\x68\x34\x91\x6f\x4f\xd1\xf0\x31\x6a\xf5\x9e\xa6\x73\xdb\xf7\x78\x88\xe4\x5f\x53\xe9\xae\x66\xcc\x10\xc1\x22\x4b\xe6\x14\x5d\xe4\x61\xc4\x11\x44\x49\x56\xf0\x1f\xf2\x30\xba\xe1\x65\x41\x11\x26\xd3\x60\x5b\x7f\xf7\xdd\x0c\xcd\xd0\x3f\xff\x89\xe0\x8a\x27\x2b\x9e\xcb\x13\x2a\x9a\xc8\xe2\x0c\xa2\xad\x77\xd6\xaa\x5e\xf3\x2e\x9b\x73\x9a\xc8\x0f\xd9\x8c\x80\xdf\xaf\x72\x5e\x14\x71\x96\xbe\x4e\x92\xec\x8e\xcf\x69\x09\xc5\x4d\xbc\x3a\xb5\xf0\x03\x27\xa3\xbc\x15\x6a\xdf\x07\x1d\x95\x5d\xf6\xc5\xf3\xca\x2e\x3b\xab\xaa\xe6\x46\xa8\xae\x6b\x02\x7c\x90\xf3\xcb\xb8\x28\x79\xfe\x17\xc9\x26\x46\xe6\x49\x76\x81\xa0\xc5\xa5\x7c\x9a\x1d\x0c\xc5\x10\xfd\x60\xfc\xed\xbb\x53\x8c\xc4\x51\x39\x74\xf1\xdc\x41\x07\x91\x79\xb4\xfc\x26\xe4\x70\xb5\x4a\xe2\x48\x9e\x4b\xdf\x3c\x81\x3b\xe6\xbe\xff\xbf\x19\xf5\xbf\xe2\x4e\xec\x29\xe8\xab\xee\xdd\x9d\xa5\xdd\x51\xfd\x3b\x6c\xfe\x3b\xc3\x93\x79\xef\xab\xe3\x93\xf9\x21\x0a\x72\x23\x9a\xb7\xf8\x07\x47\x37\xdd\xbf\xc7\xc3\x1f\x23\x54\x93\xa3\xff\x1f\x00\x00\xff\xff\x81\x52\xe7\x8e\xe3\x53\x00\x00") +var _web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x58\xdd\x73\xdb\x36\x12\x7f\xf7\x5f\x11\x6d\x5d\x1a\x88\x21\x52\xca\x3d\xdc\x0c\x6d\x84\xc9\xa5\xee\x8d\x67\x92\xcc\xdc\xb4\x9d\xce\x94\xa4\x5d\x58\x84\x62\x9e\x29\x50\x01\x41\x7f\x54\xe4\xfd\xed\x37\x0b\xf0\x4b\xb2\x2f\xbd\xe9\x8b\x04\x62\x17\xfb\xf1\xdb\xc5\xee\x92\x64\x5d\xab\x95\xc9\x4b\x45\x24\xdd\x41\x79\xf3\x6f\xb9\x32\xc0\xb9\x79\xda\xca\x72\xfd\x4a\x3e\x6e\x4b\x6d\x2a\xcf\x7b\x46\xd9\x94\x59\x5d\xc8\x48\x12\x2d\xbf\xd6\xb9\x96\x04\x7c\x3f\xf0\xfd\xa0\xc8\x6f\x82\x55\x99\xc9\x4d\xae\x75\xa9\x81\xd2\x10\x7a\x0d\xe3\xe1\x4c\xae\x73\x25\x3d\xcf\xfd\xfb\x62\x93\x45\x6e\x49\xe2\x97\xc5\xa4\x4c\xd2\x50\x92\x0f\x65\x26\x3f\xd9\x1d\xda\x52\xb2\x6f\x7a\x5d\xc9\x57\x95\xd1\xf9\xca\xc0\x91\xf4\x9d\xb8\x4f\x65\x26\x09\xe8\xfa\xe6\x09\xd8\x1e\x77\xbf\x7e\x65\xec\x53\xa9\xc9\xbd\xd0\xaf\x0c\xdf\xb5\x4c\xf1\x05\xd3\x5c\xfa\x85\x54\x5f\xcc\xed\x99\x3a\xd7\x67\xa7\xa7\x8a\x9a\x58\xc6\x2a\x4d\xf9\x6c\x71\xa4\xa5\xa9\xb5\x7a\x65\x5a\x3c\xa3\x98\xe6\x86\xc4\x20\x8a\x5c\x54\xc0\x40\xa8\x0c\x18\xfc\xe3\xe2\x9f\x97\x9f\x81\xc1\x8d\xfc\x92\x2b\xfc\xd7\x52\xdc\x01\x83\x95\xa8\x24\xfe\x15\xa2\x42\xe6\x4c\xae\xdd\x6f\xae\x64\x16\xe1\xb2\x04\x06\xb2\xb0\x4c\xb2\xa8\x72\x24\x5f\x7c\xfe\x01\x9f\xac\x5c\xa9\xaa\x5a\x23\x71\x2d\x1c\xd3\xba\xd4\xc0\xc0\xf2\x59\x45\x2e\x2c\xc0\x40\xc9\x47\x83\x7f\x25\xfe\x5a\x26\x2d\xad\x74\x2d\xab\x55\x2d\xed\xc2\xe8\x27\xf7\x5f\x6b\x3c\x5b\xc9\x02\xe5\x54\xf5\x56\x22\xbf\xb9\x95\xb8\x6b\xb4\xe5\xae\x95\x33\xb6\x56\x85\xb4\xb6\xd7\xca\xe4\x05\x30\x78\x70\x6c\x0f\xb7\xb9\xd5\xfb\x94\xcb\x02\x2d\x55\x96\xa8\x45\x6e\xcd\x34\xb7\xba\x7c\xb0\xfe\x9b\xd5\xad\x35\xdf\x92\x8b\xb2\xdc\xda\xdd\xa2\x58\xad\xba\x85\xd5\x5d\x88\xcd\x4d\x26\x80\xc1\x56\x97\x48\xd8\xd6\x37\x45\xbe\x72\xcf\x46\xae\x8c\xcc\xec\x3a\xbf\x17\xc6\xb9\x62\x73\xd0\x4a\x14\xd9\xb8\x71\xad\x65\x21\x4c\x7e\x6f\xe1\x7c\x34\x0e\x43\x51\x9b\xb2\x63\xbb\xbe\xbe\xf8\xfc\xc3\xf5\xb5\x5d\xfd\x78\xf9\xf1\xa2\x5b\x7e\xbc\xfc\xdc\x2f\xb3\x5c\x5f\x5f\x43\x4a\x59\x6e\xa3\xec\x30\xe8\xc3\xd7\x45\xd3\xc5\xa0\x07\xa0\xc7\x65\x88\x44\x87\x63\xef\x7a\xe7\x73\xe7\x98\x4b\x90\x94\xb2\xd2\xca\x77\x16\x3a\x11\x29\x65\x82\xef\x20\x86\x10\x52\x60\xb0\x83\x10\x5a\x60\x40\x20\x04\x0a\xed\xd1\x90\xc2\x35\x91\xcc\x30\x45\x77\x5d\x5e\x2a\xdf\x94\x77\x52\xe5\x7f\x48\x7f\x5b\x57\xb7\x44\x52\x26\x09\x32\xb4\xc3\x91\x35\x1e\xa1\xbb\x7c\x4d\xa4\x5f\x95\x05\xa1\x9e\x27\xfd\x0d\x1a\x48\x80\x3b\x93\xec\x96\x44\x1a\xed\xf3\xfd\x40\x6e\x45\x19\xac\xca\xcd\x46\x2a\x03\x47\x56\x94\x14\xe6\xa7\xad\x58\xc9\xf1\x8c\xaa\x8b\xe2\x08\xaf\x89\x66\x39\x2b\xb9\xf4\x31\x2d\x09\x45\x76\xf8\x1d\x38\x2f\x9b\x06\x4e\xdc\xff\x09\x9c\x70\x5e\xf6\x07\x6b\xb2\x22\x25\x03\xbc\xd0\xea\x0b\x30\x47\x6c\x1a\x77\x88\x32\x34\xdf\x0a\x09\xec\xf3\x0e\x55\xac\xb9\xf4\x57\xb5\xd6\x52\x19\x42\xbb\xeb\xeb\xec\xaa\xee\xf2\xed\xcf\x25\x32\x53\xc7\x5a\xbc\xc4\x2a\xfd\x1b\xb1\xba\xfb\x65\x4b\x9e\xd3\xe6\x6b\x7a\xd4\x17\x89\x8c\x2f\xce\x9e\x73\x9c\x17\x67\x4e\xf4\x76\xdf\x49\x02\x9c\x6f\xa3\xec\x94\x2f\x31\x6a\x9c\x6f\x3d\x8f\x64\x73\xbe\xa4\x2c\x3b\x5f\x50\x5b\x16\x5a\x6b\xe3\xb7\x74\xb3\x05\xe7\xd9\x8b\xc8\xcc\xdf\x00\x9b\x2d\x1c\x1e\x6d\x77\x91\xcb\xad\xd4\xc2\x94\x1a\x50\x30\x7c\x3f\x02\x74\xc7\x07\x3c\x6f\xb1\x8e\xd9\x80\x11\xa8\x80\x46\x77\x1c\x84\x29\x37\x10\xba\xbd\x20\xfe\xf5\x5f\x69\x60\xb7\xbb\x13\x03\x41\xef\xed\xcf\xdf\x8c\x94\x87\xc7\xaf\x69\x40\x3d\x8f\xec\xeb\x59\x52\x9b\x00\x1b\xde\xf3\x5d\x25\x0f\x49\xc5\xd3\x80\xf6\x85\x74\x13\x11\xe1\x6f\x35\xda\x6d\x9e\x2e\xab\x0b\x55\x6f\xa4\x16\x37\x85\x24\x1b\x14\xb7\xe1\x22\xde\xa4\x94\xa1\xe3\x1b\x76\xc7\x6e\x07\x8f\x69\x78\xe0\xec\x77\x30\x49\xa1\x3e\xee\x17\x2a\x23\x07\xa9\x0a\xe7\xc8\xe8\x79\x04\x0b\xbd\xcb\xfb\xe0\xea\x7c\x1e\xc5\xc9\xef\x09\x24\x27\x69\x44\x62\x31\xff\xe3\xfd\xfc\xb7\xeb\x28\x4d\x1e\x5e\xd3\x71\x3f\x0a\xcf\x9a\x63\x1a\x50\x3a\x86\x83\xe4\x5c\xc7\xcb\x94\x8d\xfd\x05\xef\xd6\x60\x84\x13\x9f\xd3\x68\x7a\x7f\xca\x2d\xa1\xe1\x81\x81\x1d\x66\xed\x24\xbb\x17\xfb\xfe\xd8\x70\x3d\x02\x8d\xec\xf2\x57\x2c\x38\x24\x88\x93\x4c\xcc\xd7\xef\xe7\x3f\xa6\x01\xed\x62\x01\x37\x87\x3c\x8b\xe5\x40\x1d\xb6\xe6\x7f\x4f\x03\xca\x40\xd5\x9b\x1b\xa9\x2d\x2c\x41\x92\x05\xbe\x91\x95\x21\x25\xa5\x07\x0e\x04\x57\x71\x92\x5d\xa7\xaf\x49\x14\x26\xbe\x5d\x9e\x52\x84\x23\x96\x17\x69\x7c\x9a\xcc\xd3\xa8\xdf\x3c\x10\x0a\x91\xcb\x40\xbc\x3f\x67\xa3\xb4\x24\x89\x3f\x7c\x4a\xe7\x01\x3d\xa3\x67\xfb\x0e\x26\xc9\x81\xf5\xc9\x83\xb5\xdd\xdd\xaa\x11\x27\x94\x1d\xbe\x00\xd0\x09\xd0\x08\x73\x05\x4e\xb0\xd8\x63\x56\xb3\xd9\xd2\x81\xda\xe1\x73\x02\x27\x8e\xe5\x04\x4e\x06\x96\xc5\x1e\x4b\x10\x27\xe7\xc9\x5b\xcc\x75\x72\xb0\xd1\x1d\x98\x30\x9e\x26\xf3\xe4\x75\x12\x24\x5e\xd2\x24\x61\x32\xc3\x43\x07\xb7\xc9\x25\xd3\xf1\xbb\xeb\xe4\x51\x2c\xe7\x49\xbd\x5e\xaf\xd7\xa3\xec\x21\x90\x0f\xc7\xfb\x74\x36\xa8\x88\x92\x59\xc2\xa7\xca\xc7\xc4\xb7\x18\xbf\x73\xf9\x3c\xc2\xfb\x2e\xea\x33\x78\x5f\xe4\x01\x56\xef\xa0\x53\x32\xda\x70\x60\x02\xdc\x0b\x9d\xe3\x65\x9c\xbf\x71\xaa\x8e\x9f\x43\xde\x3b\x78\x8d\x3e\x1d\x88\x1b\xb3\x12\xb3\xab\x23\xbb\xf5\x24\xa6\x83\x92\xbf\xb9\x44\x7c\xd1\xf8\xe7\xa9\xf9\x2d\xc3\xa7\xd8\x8d\xcf\xd8\x3c\xfb\xe8\x40\x9e\x0d\x05\xa1\x81\x19\xf6\x97\x99\xf1\xef\x85\xfe\x98\x57\xc6\xf3\x60\x07\x33\x6e\xfc\x42\x54\xe6\xe7\xf2\xce\xf3\x70\x38\x9b\x6c\xd8\xf6\x19\xc4\x09\x49\x68\x12\x27\xe9\xae\x4d\x92\xb3\xe7\x36\x2a\x5e\x32\xdb\x04\x51\xc9\xbc\x8f\x92\xb5\xe4\x2d\xf4\x5c\x20\x34\x8e\x47\xce\x73\x8e\xe9\x14\xbc\x0e\x13\xff\xea\xfb\xf3\xb7\xff\x69\x26\x32\x6d\x15\x7f\xe4\x7b\x7e\x3f\x67\xef\xeb\x2a\xf8\xce\xa7\xc7\xa6\x21\x8a\x83\x0f\x94\x4d\xca\xe5\xa4\x41\x0f\x6b\x0e\x0d\x58\x6b\xc7\x49\xa1\xc0\xf9\xb8\xc7\xbb\x69\x88\xc4\xd6\x35\x54\x3a\x3b\x76\xa0\x67\x2d\xce\xf6\xfe\x56\xca\x3b\x42\xed\xce\x92\x73\x49\x5f\x18\x48\xb0\xf0\xb1\x71\x23\x9e\xd0\xba\x76\xb7\x4c\xad\xd8\xa3\x3f\x61\xe2\x05\x91\xf3\x25\x6d\xed\xb0\xbc\x9b\xa8\xf7\x3c\xf2\x7f\x1c\x3d\x5d\xd2\xa1\xff\xac\xdd\x74\x34\x3a\x9d\x11\x07\xb5\xe4\xb3\xe5\xc0\xb4\xe7\x73\x8f\x48\x44\xfe\x92\x73\x34\x24\x92\xcf\x16\xcc\x69\x9e\xaa\x5e\xb9\x61\x8e\xe9\x41\xc7\xa0\x38\x67\x5d\x1f\x17\xac\x46\xc3\xb0\xa0\x82\x96\x22\x9b\x7f\xad\x4b\x23\xb3\xf9\x56\xd4\x95\xcc\x80\x73\x5e\xfa\xab\x52\x19\xf9\x68\x7c\x7c\xe1\xf2\x3c\x32\x6c\x4c\x48\x5b\x2d\xef\x59\xee\x72\xb1\x05\x4a\xcf\x30\xf2\x33\x4e\x04\xcf\xbb\x7b\x49\xcf\x6c\x2c\x05\xe7\x28\x43\x37\xcd\xac\xa6\x74\x57\x1e\x78\x7c\x34\x4c\x31\xca\xf3\x6c\x0b\x16\x9e\x37\xab\xed\xd1\x4e\xfc\x0e\x07\x2f\x9b\x24\xfb\xc6\xec\xd0\x86\x70\x78\x66\x68\x6d\xf8\x92\x4f\x2d\x65\xe5\xc1\xf8\x89\x93\xe9\xa8\x3a\x88\xdf\x25\xc7\xfd\x55\xc9\xfb\x4c\xdc\x37\x16\x4f\x65\xe3\xa9\xb6\xe6\xb3\xda\xf3\xb0\xdf\x70\x2e\xda\xe1\xad\x6e\x0c\x46\x75\xd0\xca\x9f\x8d\xca\x38\xae\x8f\x83\xb2\xe7\x1d\xb6\x78\xf6\x3f\x66\x90\x4e\xd9\xae\x32\x42\x9b\x9f\x8c\x30\x32\x1c\xc2\xdc\xeb\xdb\xf5\xa2\xc2\x78\x9d\xb2\x5c\x61\xad\x92\x59\xb8\x60\x1d\x58\xe1\xce\xa1\x65\xf0\x75\x62\x20\xcf\xa5\xef\xd6\xbf\xa8\xdc\xb4\x96\x37\x57\xb5\xcc\x3e\xe6\x4a\x86\xb3\x25\xeb\x8a\x57\x88\xb1\x66\x5d\xa9\x0b\x67\xcb\xb6\x65\x56\x5d\xb8\x3f\xc4\x28\x6e\xf9\x06\xcf\x89\xf1\x7b\x4d\xbc\x57\x24\x9c\xd5\x6e\xca\xc3\xd4\x1c\x41\x88\xcd\x4b\x17\x00\x25\xb3\x35\x57\xb6\x24\xba\x12\xcc\x79\xfd\xc2\x60\x7e\x04\x77\xf2\xe9\xa1\xd4\x98\xd2\xa4\xc6\x0a\xc6\xc7\xf2\x1b\x41\x3f\x31\x42\xa8\x5f\x9e\x1e\x27\xa2\x68\x34\xc8\x0a\x83\xab\xf8\xfd\xfc\xb7\x3e\x57\x0a\x1a\x81\x11\x5f\x20\xb4\xef\x76\x13\x05\x4d\xd3\xbd\xe7\xed\xed\x0d\xfd\x21\xb2\xfc\xe1\xd0\xb9\x30\x0f\xc8\x9a\x17\x2c\x7f\xd9\x98\x82\x46\x82\x83\x83\x0c\xc2\xf2\x5b\x4c\x99\x74\x4c\xf8\x5a\x3f\xe3\x85\xe7\xf5\x2f\xdd\x33\x5e\x34\x8d\xf4\x57\x65\x51\x6f\x14\xa1\xb3\xc3\x18\x44\xd8\xa2\x38\x9e\x30\xc3\x2d\xef\xe3\x75\x3e\x2e\x3d\x8f\x8c\xa6\xd0\x70\xb2\xee\xf2\x92\xa8\xa6\xc1\x9b\xd1\xa7\xeb\x8c\xd7\x2e\xf8\x1d\x0c\x7c\x4d\x19\x34\xc0\xb9\xb2\xbb\x1d\x22\x7c\x6c\x9e\x94\xf5\x22\x39\x17\x4d\x63\xbb\x64\x9c\xec\x7a\xcc\x15\x0e\xc3\xfb\x35\xc0\xec\xd7\x00\x34\x60\x4c\xea\xd1\xf4\x36\x24\x3d\x3c\xbd\x64\x9a\xa4\x49\x3b\x4a\xa6\x53\xe7\x51\xb4\x35\xb1\x57\xb6\x4f\xb2\x43\xc1\x90\xd9\x7b\x77\x85\xbb\xb2\xa0\x9a\x66\xec\x99\x98\xa5\xac\x6e\x3b\xbb\xc2\x67\x5d\xf0\x4f\x12\x7f\xc6\xd7\x7d\x47\x5c\xb8\x77\x62\xc4\x4f\xf9\xab\x5b\xa1\xdf\x1b\xb2\xb0\xdf\x18\x06\x18\x4a\x9e\xdb\xe2\xcd\xb9\x88\x75\xda\x34\x93\xbb\x90\x77\x55\x3d\xb8\x22\x51\x28\x55\xd6\xd8\xef\x05\x0d\x76\xc2\xc6\x7e\x34\x6a\x1e\x6e\xa5\x6a\xdc\x87\x1e\x9a\xdc\x0c\xd8\xf4\xbd\x2c\x1f\xf0\x3c\x25\x65\xb4\x08\xa7\x35\x83\x9e\x1e\x42\x11\x4d\xc9\xe1\x82\xb6\x4c\x16\x72\x65\x74\xbe\xba\x54\xdb\xda\x84\xc1\x55\x52\xbd\xee\x2c\x71\x3a\x9b\xa4\xa5\xc7\x01\x2b\x72\x25\x3f\xb8\x14\x0a\xe1\x3b\x68\x5b\x8a\x80\x77\x5f\xe6\x2e\x3f\x5d\x10\x40\x4f\x83\xc7\xb9\xfb\x40\xe7\xbe\xd3\xd1\x96\xd2\xa3\xff\x06\x00\x00\xff\xff\x95\xbb\x19\x0f\x95\x14\x00\x00") -func web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJsBytes() ([]byte, error) { +func web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJsBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJs, - "web_ui/assets/codemirror/mode/javascript/javascript-a4c0d68244e6e74f9225801e5f9d724e.js", + _web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs, + "web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js", ) } -func web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJs() (*asset, error) { - bytes, err := web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJsBytes() +func web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/javascript/javascript-a4c0d68244e6e74f9225801e5f9d724e.js", size: 21475, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js", size: 5269, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x58\xdd\x73\xdb\x36\x12\x7f\xf7\x5f\x11\x6d\x5d\x1a\x88\x21\x52\xca\x3d\xdc\x0c\x6d\x84\xc9\xa5\xee\x8d\x67\x92\xcc\xdc\xb4\x9d\xce\x94\xa4\x5d\x58\x84\x62\x9e\x29\x50\x01\x41\x7f\x54\xe4\xfd\xed\x37\x0b\xf0\x4b\xb2\x2f\xbd\xe9\x8b\x04\x62\x17\xfb\xf9\xc3\xee\x92\x64\x5d\xab\x95\xc9\x4b\x45\x24\xdd\x41\x79\xf3\x6f\xb9\x32\xc0\xb9\x79\xda\xca\x72\xfd\x4a\x3e\x6e\x4b\x6d\x2a\xcf\x7b\x46\xd9\x94\x59\x5d\xc8\x48\x12\x2d\xbf\xd6\xb9\x96\x04\x7c\x3f\xf0\xfd\xa0\xc8\x6f\x82\x55\x99\xc9\x4d\xae\x75\xa9\x81\xd2\x10\x7a\x0d\xe3\xe1\x4c\xae\x73\x25\x3d\xcf\xfd\xfb\x62\x93\x45\x6e\x49\xe2\x97\xc5\xa4\x4c\xd2\x50\x92\x0f\x65\x26\x3f\xd9\x1d\xda\xd2\x7d\xcb\xeb\x4a\xbe\xaa\x8c\xce\x57\x06\x8e\xa4\xef\xa4\x7d\x2a\x33\x49\x40\xd7\x37\x4f\xc0\xa6\xcc\xfd\xfa\x95\xb1\x4f\xa5\x26\xf7\x42\xbf\x32\x7c\xd7\x32\xc5\x17\x4c\x73\xe9\x17\x52\x7d\x31\xb7\x67\xea\x5c\x9f\x9d\x9e\x2a\x6a\x62\x19\xab\x34\xe5\xb3\xc5\x91\x96\xa6\xd6\xea\x95\x69\xf1\x8c\x62\x9a\x1b\x12\x83\x28\x72\x51\x01\x03\xa1\x32\x60\xf0\x8f\x8b\x7f\x5e\x7e\x06\x06\x37\xf2\x4b\xae\xf0\x5f\x4b\x71\x07\x0c\x56\xa2\x92\xf8\x57\x88\x0a\x99\x33\xb9\x76\xbf\xb9\x92\x59\x84\xcb\x12\x18\xc8\xc2\x32\xc9\xa2\xca\x91\x7c\xf1\xf9\x07\x7c\xb2\x72\xa5\xaa\x6a\x8d\xc4\xb5\x70\x4c\xeb\x52\x03\x03\xcb\x67\x15\xb9\xa4\x00\x03\x25\x1f\x0d\xfe\x95\xf8\x6b\x99\xb4\xb4\xd2\xb5\xac\x56\xb5\xb4\x0b\xa3\x9f\xdc\x7f\xad\xf1\x6c\x25\x0b\x94\x53\xd5\x5b\x89\xfc\xe6\x56\xe2\xae\xd1\x96\xbb\x56\xce\xd8\x5a\x15\xd2\xda\x5e\x2b\x93\x17\xc0\xe0\xc1\xb1\x3d\xdc\xe6\x56\xef\x53\x2e\x0b\xb4\x54\x59\xa2\x16\xb9\x35\xd3\xdc\xea\xf2\xc1\xfa\x6f\x56\xb7\xd6\x7c\x4b\x2e\xca\x72\x6b\x77\x8b\x62\xb5\xea\x16\x56\x77\x21\x36\x37\x99\x00\x06\x5b\x5d\x22\x61\x5b\xdf\x14\xf9\xca\x3d\x1b\xb9\x32\x32\xb3\xeb\xfc\x5e\x18\xe7\x8a\x45\xa0\x95\x28\xb2\x71\xe3\x5a\xcb\x42\x98\xfc\xde\x86\xf3\xd1\xb8\x18\x8a\xda\x94\x1d\xdb\xf5\xf5\xc5\xe7\x1f\xae\xaf\xed\xea\xc7\xcb\x8f\x17\xdd\xf2\xe3\xe5\xe7\x7e\x99\xe5\xfa\xfa\x1a\x52\xca\x72\x9b\x65\x17\x83\x3e\x7d\x5d\x36\x5d\x0e\xfa\x00\xf4\x71\x19\x32\xd1\xc5\xb1\x77\xbd\xf3\xb9\x73\xcc\x01\x24\xa5\xac\xb4\xf2\x9d\x85\x4e\x44\x4a\x99\xe0\x3b\x88\x21\x84\x14\x18\xec\x20\x84\x16\x18\x10\x08\x81\x42\x7b\x34\x40\xb8\x26\x92\x19\xa6\xe8\xae\xc3\xa5\xf2\x4d\x79\x27\x55\xfe\x87\xf4\xb7\x75\x75\x4b\x24\x65\x92\x20\x43\x3b\x1c\x59\xe3\x11\xba\xcb\xd7\x44\xfa\x55\x59\x10\xea\x79\xd2\xdf\xa0\x81\x04\xb8\x33\xc9\x6e\x49\xa4\xd1\x1e\xef\x07\x72\x2b\xca\x60\x55\x6e\x36\x52\x19\x38\xb2\xa2\xa4\x30\x3f\x6d\xc5\x4a\x8e\x67\x54\x5d\x14\x47\x78\x4d\x34\xcb\x59\xc9\xa5\x8f\xb0\x24\x14\xd9\xe1\x77\xe0\xbc\x6c\x1a\x38\x71\xff\x27\x70\xc2\x79\xd9\x1f\xac\xc9\x8a\x94\x0c\xf0\x3e\xab\x2f\xc0\x1c\xb1\x69\xdc\x21\xca\xd0\x7c\x2b\x24\xb0\xcf\x3b\x54\xb1\xe6\xd2\x5f\xd5\x5a\x4b\x65\x08\xed\xae\xaf\xb3\xab\xba\xcb\xb7\x3f\x97\xc8\x4c\x1d\x6b\xf1\x12\xab\xf4\x6f\xc4\xea\xee\x97\x2d\x79\x4e\x9b\xaf\xe9\x51\x5f\x24\x32\xbe\x38\x7b\xce\x71\x5e\x9c\x39\xd1\xdb\x7d\x27\x09\x70\xbe\x8d\xb2\x53\xbe\xc4\xac\x71\xbe\xf5\x3c\x92\xcd\xf9\x92\xb2\xec\x7c\x41\x6d\x59\x68\xad\x8d\xdf\xd2\xcd\x16\x9c\x67\x2f\x46\x66\xfe\x06\xd8\x6c\xe1\xe2\xd1\x76\x17\xb9\xdc\x4a\x2d\x4c\xa9\x01\x05\xc3\xf7\x63\x80\xee\xf8\x10\xcf\x5b\xac\x63\x36\x61\x04\x2a\xa0\xd1\x1d\x07\x61\xca\x0d\x84\x6e\x2f\x88\x7f\xfd\x57\x1a\xd8\xed\xee\xc4\x40\xd0\x7b\xfb\xf3\x37\x23\xe5\xe1\xf1\x6b\x1a\x50\xcf\x23\xfb\x7a\x96\xd4\x02\x60\xc3\x7b\xbe\xab\xe4\x21\xa9\x78\x1a\xd0\xbe\x90\x6e\x22\x22\xfc\xad\x46\xbb\xcd\xd3\x65\x75\xa1\xea\x8d\xd4\xe2\xa6\x90\x64\x83\xe2\x36\x5c\xc4\x9b\x94\x32\x74\x7c\xc3\xee\xd8\xed\xe0\x31\x0d\x0f\x9c\xfd\x0e\x26\x10\xea\xf3\x7e\xa1\x32\x72\x00\x55\x38\x47\x46\xcf\x23\x58\xe8\x1d\xee\x83\xab\xf3\x79\x14\x27\xbf\x27\x90\x9c\xa4\x11\x89\xc5\xfc\x8f\xf7\xf3\xdf\xae\xa3\x34\x79\x78\x4d\xc7\xfd\x28\x3c\x6b\x8e\x69\x40\xe9\x98\x0e\x92\x73\x1d\x2f\xd3\x49\x7f\xc1\xbb\x35\x18\xe1\xc4\xe7\x34\x9a\xde\x9f\x72\x4b\x68\x78\x60\x60\x17\xb3\x76\x82\xee\xc5\xbe\x3f\x36\x5d\x8f\x40\x23\xbb\xfc\x15\x0b\x0e\x09\xe2\x24\x13\xf3\xf5\xfb\xf9\x8f\x69\x40\xbb\x5c\xc0\xcd\x21\xcf\x62\x39\x50\x87\xad\xf9\xdf\xd3\x80\x32\x50\xf5\xe6\x46\x6a\x1b\x96\x20\xc9\x02\xdf\xc8\xca\x90\x92\xd2\x03\x07\x82\xab\x38\xc9\xae\xd3\xd7\x24\x0a\x13\xdf\x2e\x4f\x29\x86\x23\x96\x17\x69\x7c\x9a\xcc\xd3\xa8\xdf\x3c\x10\x0a\x91\x43\x20\xde\x9f\xb3\x51\x5a\x92\xc4\x1f\x3e\xa5\xf3\x80\x9e\xd1\xb3\x7d\x07\x93\xe4\xc0\xfa\xe4\xc1\xda\xee\x6e\xd5\x18\x27\x94\x1d\xbe\x10\xa0\x13\xa0\x11\x62\x05\x4e\xb0\xd8\x23\xaa\xd9\x6c\xe9\x82\xda\xc5\xe7\x04\x4e\x1c\xcb\x09\x9c\x0c\x2c\x8b\x3d\x96\x20\x4e\xce\x93\xb7\x88\x75\x72\xb0\xd1\x1d\x98\x30\x9e\x26\xf3\xe4\x75\x12\x24\x5e\xd2\x24\x61\x32\xc3\x43\x07\xb7\xc9\x81\xe9\xf8\xdd\x75\xf2\x28\x96\xf3\xa4\x5e\xaf\xd7\xeb\x51\xf6\x90\xc8\x87\xe3\x7d\x3a\x1b\x54\x44\xc9\x2c\xe1\x53\xe5\x23\xf0\x6d\x8c\xdf\x39\x3c\x8f\xe1\x7d\x17\xf5\x08\xde\x17\x79\x10\xab\x77\xd0\x29\x19\x6d\x38\x30\x01\xee\x85\xce\xf1\x32\xce\xdf\x38\x55\xc7\xcf\x43\xde\x3b\x78\x8d\x3e\x1d\x88\x1b\x51\x89\xe8\xea\xc8\x6e\x3d\xc9\xe9\xa0\xe4\x6f\x0e\x88\x2f\x1a\xff\x1c\x9a\xdf\x32\x7c\x1a\xbb\xf1\x19\x9b\x67\x9f\x1d\xc8\xb3\xa1\x20\x34\x30\xc3\xfe\x32\x33\xfe\xbd\xd0\x1f\xf3\xca\x78\x1e\xec\x60\xc6\x8d\x5f\x88\xca\xfc\x5c\xde\x79\x1e\x0e\x67\x93\x0d\xdb\x3e\x83\x38\x21\x09\x4d\xe2\x24\xdd\xb5\x49\x72\xf6\xdc\x46\xc5\x4b\x66\x9b\x20\x2a\x99\xf7\x59\xb2\x96\xbc\x85\x9e\x0b\x84\xc6\xf1\xc8\x79\xce\x11\x4e\xc1\xeb\x30\xf1\xaf\xbe\x3f\x7f\xfb\x9f\x66\x22\xd3\x56\xf1\x47\xbe\xe7\xf7\x73\xf6\xbe\xae\x82\xef\x7c\x7a\x6c\x1a\xa2\x38\xf8\x40\xd9\xa4\x5c\x4e\x1a\xf4\xb0\xe6\xd0\x80\xb5\x76\x9c\x14\x0a\x9c\x8f\xfb\x78\x37\x0d\x91\xd8\xba\x86\x4a\x67\xc7\x0e\xf4\xac\xc5\xc9\xde\xdf\x4a\x79\x47\xa8\xdd\x59\x72\x2e\xe9\x0b\x03\x09\x16\x3e\x36\x6e\xc4\x13\x5a\xd7\xee\x96\xa9\x15\x7b\xf4\x27\x4c\xbc\x20\x72\xbe\xa4\xad\x1d\x96\x77\x13\xf5\x9e\x47\xfe\x8f\xa3\xa7\x4b\x3a\xf4\x9f\xb5\x9b\x8e\x46\xa7\x33\xe2\x42\x2d\xf9\x6c\x39\x30\xed\xf9\xdc\x47\x24\x22\x7f\xc9\x39\x1a\x12\xc9\x67\x0b\xe6\x34\x4f\x55\xaf\xdc\x30\xc7\xf4\xa0\x63\x50\x9c\xb3\xae\x8f\x0b\x56\xa3\x61\x58\x50\x41\x4b\x91\xcd\xbf\xd6\xa5\x91\xd9\x7c\x2b\xea\x4a\x66\xc0\x39\x2f\xfd\x55\xa9\x8c\x7c\x34\x3e\xbe\x6e\x79\x1e\x19\x36\x26\xa4\xad\x96\xf7\x2c\x77\x58\x6c\x81\xd2\x33\xcc\xfc\x8c\x13\xc1\xf3\xee\x5e\xd2\x33\x9b\x4b\xc1\x39\xca\xd0\x4d\x33\xab\x29\xdd\x95\x07\x1e\x1f\x0d\x53\x8c\xf2\x3c\xdb\x82\x85\xe7\xcd\x6a\x7b\xb4\x13\xbf\xc3\xc1\xcb\x82\x64\xdf\x98\x1d\xda\x10\x0e\xcf\x0c\xad\x0d\x5f\xf2\xa9\xa5\xac\x3c\x18\x3f\x71\x32\x1d\x55\x07\xf1\xbb\xe4\xb8\xbf\x2a\x79\x8f\xc4\x7d\x63\xf1\x54\x36\x9e\x6a\x6b\x3e\xab\x3d\x0f\xfb\x0d\xe7\xa2\x1d\xde\xea\xc6\x64\x54\x07\xad\xfc\xd9\xa8\x8c\xe3\xfa\x38\x28\x7b\xde\x61\x8b\x67\xff\x63\x06\xe9\x94\xed\x2a\x23\xb4\xf9\xc9\x08\x23\xc3\x21\xcd\xbd\xbe\x5d\x2f\x2a\x8c\xd7\x29\xcb\x15\xd6\x2a\x99\x85\x0b\xd6\x05\x2b\xdc\xb9\x68\x19\x7c\x9d\x18\xc8\x73\xe9\xbb\xf5\x2f\x2a\x37\xad\xe5\xcd\x55\x2d\xb3\x8f\xb9\x92\xe1\x6c\xc9\xba\xe2\x15\x62\xae\x59\x57\xea\xc2\xd9\xb2\x6d\x99\x55\x17\xee\x0f\x31\x8a\x5b\xbe\xc1\x73\x62\xfc\x5e\x13\xef\x15\x09\x67\xb5\x9b\xf2\x10\x9a\x63\x10\x62\xf3\xd2\x05\x40\xc9\x6c\xcd\x95\x2d\x89\xae\x04\x73\x5e\xbf\x30\x98\x1f\xc1\x9d\x7c\x7a\x28\x35\x42\x9a\xd4\x58\xc1\xf8\x58\x7e\x23\xe8\x27\x46\x08\xf5\xcb\xd3\xe3\x44\x14\x8d\x06\x59\x61\x70\x15\xbf\x9f\xff\xd6\x63\xa5\xa0\x11\x18\xf1\x05\x42\xfb\x6e\x37\x51\xd0\x34\xdd\x7b\xde\xde\xde\xd0\x1f\x22\xcb\x1f\x0e\x9d\x0b\x71\x40\xd6\xbc\x60\xf9\xcb\xc6\x14\x34\x12\x1c\x5c\xc8\x20\x2c\xbf\xc5\x94\x49\xc7\x84\xaf\xf5\x33\x5e\x78\x5e\xff\xd2\x3d\xe3\x45\xd3\x48\x7f\x55\x16\xf5\x46\x11\x3a\x3b\xcc\x41\x84\x2d\x8a\xe3\x09\x33\xdc\xf2\x3e\x5f\xe7\xe3\xd2\xf3\xc8\x68\x0a\x0d\x27\xeb\x0e\x97\x44\x35\x0d\xde\x8c\x1e\xae\x33\x5e\xbb\xe4\x77\x61\xe0\x6b\xca\xa0\x01\xce\x95\xdd\xed\x22\xc2\xc7\xe6\x49\x59\x2f\x92\x73\xd1\x34\xb6\x4b\xc6\xc9\xae\x8f\xb9\xc2\x61\x78\xbf\x06\x98\xfd\x1a\x80\x06\x8c\xa0\x1e\x4d\x6f\x43\xd2\x87\xa7\x97\x4c\x93\x34\x69\x47\xc9\x74\xea\x3c\x8a\xb6\x26\xf6\xca\xf6\x49\x76\x28\x18\x90\xbd\x77\x57\xb8\x2b\x0b\xaa\x69\xc6\x9e\x89\x28\x65\x75\xdb\xd9\x15\x3e\xeb\x82\x7f\x02\xfc\x19\x5f\xf7\x1d\x71\xe1\xde\x89\x31\x7e\xca\x5f\xdd\x0a\xfd\xde\x90\x85\xfd\xc6\x30\x84\xa1\xe4\xb9\x2d\xde\x9c\x8b\x58\xa7\x4d\x33\xb9\x0b\x79\x57\xd5\x83\x2b\x12\x85\x52\x65\x8d\xfd\x5e\xd0\x60\x27\x6c\xec\x47\xa3\xe6\xe1\x56\xaa\xc6\x7d\xe8\xa1\xc9\xcd\x10\x9b\xbe\x97\xe5\x43\x3c\x4f\x49\x19\x2d\xc2\x69\xcd\xa0\xa7\x87\xa1\x88\xa6\xe4\x70\x41\x5b\x26\x0b\xb9\x32\x3a\x5f\x5d\xaa\x6d\x6d\xc2\xe0\x2a\xa9\x5e\x77\x96\x38\x9d\x4d\xd2\xd2\xe3\x80\x15\xb9\x92\x1f\x1c\x84\x42\xf8\x0e\x5a\x7c\xb3\xe9\xbf\xcb\x5d\x7e\xba\x20\x80\x8e\x06\x8f\x73\xf7\x79\xce\x7d\xa5\xa3\x2d\x3d\xfa\x6f\x00\x00\x00\xff\xff\xcc\x6b\x1d\xa6\x91\x14\x00\x00") +var _web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xbd\xeb\x7a\xdb\x38\x96\x28\xfa\xf3\x7c\x9f\x5f\xe1\xfc\xa1\xd0\x55\x34\x11\x42\x32\x29\x5f\x62\xd3\x86\x35\xa9\x54\xd2\x93\x99\x54\x52\xa7\x93\x9a\x3e\x35\x12\x93\x0d\x53\x90\x8d\x32\x45\xaa\x48\x28\xb1\xdb\xd4\xfc\x9b\xf7\xd8\xcf\x32\x4f\xb6\x3f\xdc\x48\x50\xa2\x2d\xa5\xaa\x77\x5d\x2c\x12\xc4\x65\x61\x61\x61\x61\xdd\x00\x78\xb3\x65\x96\x70\x96\x67\x1e\x85\x0f\x6c\xe6\x81\xfc\xea\x37\x9a\x70\x80\x31\xbf\x5f\xd0\x7c\xe6\xd0\xbb\x45\x5e\xf0\xd2\x75\xc1\x32\x9b\xd2\x19\xcb\xe8\x14\xf4\xcc\xc7\x79\x3e\x5d\xa6\x14\xaa\x9f\x81\xce\x8a\xa9\x07\xf7\x68\x5a\x52\x47\xd4\x67\xea\x6f\x6a\x54\xb5\xb8\xae\xfa\x1d\x90\xf9\x14\xaa\x47\x6f\x1c\x23\xaa\x8a\x3e\x78\x5d\xcd\x7d\x65\xd9\x34\xff\x3a\x52\x3f\x51\x57\x8e\xeb\x34\xbf\x22\xe9\x48\xfd\x74\xe6\x28\x69\x3a\x1b\x89\x3f\x11\xbf\x61\x25\x1c\xfc\x56\xde\x93\x79\x2a\x60\x5e\xad\xa0\xd7\xa0\x03\x3e\x14\x94\x2f\x8b\xcc\x31\x29\x0e\xf5\x38\xca\x10\x83\x0f\x75\x4a\xe1\x11\x54\x4a\xb4\xf5\xb2\x31\x89\xd5\x13\x97\x4f\x5f\x48\xe1\x24\xb8\xa3\xf7\x05\xfd\x7d\xc9\x0a\xea\xba\xfa\x61\x4f\x94\x29\x5d\x37\x81\xba\xbd\xc4\x23\xa8\x17\x40\x91\x9e\x9b\xb4\x5c\xa7\x89\x5a\x97\x38\xa3\x5f\x9d\x57\x45\x91\x17\x1e\x78\x49\xb2\x2c\xe7\xce\x8c\x65\x53\x3d\x18\xce\x3e\xf0\x89\x0f\xf6\x01\xdc\xe3\x37\x45\xfe\xd5\x59\x0e\x92\x7c\x4a\x31\xf8\xe9\xfd\x8f\xbf\xbc\x7d\xf5\xf9\xdd\xfb\x8f\x9f\x5f\xbf\xff\xe5\xdd\x8f\x00\x2d\x57\xa2\xbe\x14\x0b\xd8\xf1\x83\x1e\xbd\xe8\x61\xb5\xda\x13\x7d\x18\x07\xf1\x20\x21\x69\xea\xa5\x66\x60\x51\x8b\x58\x34\x68\x85\x27\x33\x87\xf1\x98\xc6\x55\x45\xe1\x0a\xa2\x14\x35\x45\x28\x52\x48\x5b\xe9\xec\xa2\x2d\xf3\x71\x35\xcb\x0b\x4f\x80\x90\xef\x82\x28\x44\x70\x70\x4e\x2e\xd8\x20\xa5\xd9\x35\xbf\x39\x27\xbe\x0f\x0b\x8f\x09\x6c\xef\x19\x58\x56\xde\x43\x18\x8d\x1b\x28\x11\x87\x0f\x60\x59\x52\xa7\xe4\x05\x4b\x38\x90\x08\xcc\x30\xf5\xc0\xe0\xe0\xb7\xb2\x2f\x46\xfe\x20\xcd\xc9\x94\x16\x00\x22\xd6\x4e\x9f\x2e\xe7\x0b\x91\xbe\x67\x0d\x37\xdd\xa0\x0a\x0f\x3e\x28\x34\x5b\x83\xf2\xda\x14\x00\x3e\xf5\x81\xc3\x4a\x67\x4a\x17\x05\x4d\x08\xa7\x53\x87\x64\x53\x27\x51\xa3\x76\x45\x9d\x65\x49\xa7\x03\x00\x57\x2b\x6e\x90\x32\xf8\x78\xbf\xa0\x6d\x48\x04\x42\x00\x44\x4d\x96\x0f\xc9\x0d\x9d\x93\x76\xa6\x52\xa6\xb5\xb2\xbd\x7e\xf1\xe6\xed\x87\x17\xaf\x5f\x7d\xfe\xf0\xf2\x5f\x5f\xfd\xf4\xa2\x2b\xff\xc1\x8c\xb0\xb4\x24\xb3\x76\xfd\xff\xf6\xe1\xfd\xbb\xa7\x0a\xfd\x56\xe6\x59\xab\xc0\xcb\xf7\x7f\x7b\xb2\x95\x24\x2f\xda\x2d\xfc\xf8\xea\xf5\x8b\x5f\xde\x7e\xfc\xbc\x0d\xbc\x29\x9d\x91\x65\xca\x3f\x6f\x80\x68\x2a\x78\xfd\xcb\xdb\xb7\xbb\x54\x30\x5b\xa6\x69\xab\x02\x31\xec\x38\x93\x3f\x6b\xa9\x2f\xd2\x54\x7f\x78\x91\xa6\xd6\x37\x01\xc3\x5b\x55\xca\x3c\x76\x7c\x55\xa5\xad\x37\x2b\x8f\x20\x29\xcc\xe4\xcf\x5a\xc9\x1f\xd5\x17\xf3\x68\x7d\xfd\xf5\xc5\x4f\x6f\x5f\xdd\x25\x74\x21\x28\xaa\xdd\x45\x6a\x92\x5b\x1d\xfb\xe9\xcd\xbb\x37\x3f\xbd\x78\x12\x29\x9d\x83\xfe\xa7\x87\xe2\x8f\x8c\x42\x99\x90\x0c\x17\x1e\x10\xbf\xad\x0f\x0b\x52\x94\x54\x7c\x91\x0f\xad\x4f\x49\x3e\x5f\xe4\xea\xa3\x7e\x6c\x7d\x26\xd3\xe9\xcb\x3c\x2b\x79\xb1\x4c\x78\x5e\x88\x5c\xed\x14\x00\x57\xe8\x61\x73\x9e\x47\x87\xa8\x13\xb5\xd1\x11\xda\x64\x16\xd1\x31\xda\x9c\x7a\xd1\xf3\xcd\x44\x45\xf9\xd1\x69\xc7\x97\x16\x4e\xa2\xb3\x27\x72\x48\x8c\x47\x61\xd0\x91\xa5\x1e\xc9\x28\x0c\x3b\x3e\xcb\x89\x1a\x85\x43\xb4\xce\x4d\xa2\xf0\x70\x15\xa3\xe1\x93\xbc\xb2\xe6\x7b\x36\xbb\xcf\x96\x69\x8a\x31\xb5\xf8\x15\x2b\xdf\xe5\xfc\x86\x65\xd7\x38\x43\x76\xea\x7b\x29\x48\xe0\xcd\x25\x63\x53\xc4\x70\x5d\x51\x6d\x4f\xd4\x6b\x55\xc1\xf3\x17\x45\x41\xee\x3b\x6a\x70\xe4\x87\x01\x2b\xe5\xaf\x47\xe1\x88\x46\xe2\xf3\x68\x1c\x47\x63\x1a\xdb\x95\x14\x74\x41\x89\x0d\x85\xe8\xa6\x5c\x05\x10\xc3\x00\xec\x89\x25\x28\xc3\xc1\x79\x76\xc1\xcf\x33\x1f\x87\x90\xf9\x98\x9a\xf5\x84\xad\x5a\x3d\x7a\x47\xaf\x09\x67\x5f\xe8\x7f\xd2\x22\xef\x82\x2a\xc0\x18\x53\xd7\x7d\xb7\x9c\x5f\xd1\x62\xf0\xee\xd5\x5f\x5f\x7c\x7c\xf3\x1f\xaf\x3e\xbf\x79\xf7\xfa\xcd\xbb\x37\x1f\x7f\xc5\x18\x87\x07\xad\x1e\xd2\x3b\x4e\xb3\x69\x37\x70\xa8\x40\xb9\x90\x01\x38\xd4\x20\x22\x86\xbd\x1c\x2b\xac\x0e\x6e\xe9\x7d\xe9\x71\x08\xcd\x62\x98\x5d\x30\x05\x3e\x1d\x17\x38\x1f\x67\x71\x8c\xf9\xb8\x88\x4d\x47\xe8\x6a\x85\x1e\x56\x31\x3a\xdc\x75\x71\x4c\xf2\xf9\x5c\xf2\x15\xbd\x28\xda\xac\xa6\x50\x49\xdd\x53\x3b\xef\xfc\xa8\x79\x06\x31\xe0\x2f\x8a\x9c\xe7\x62\xf4\x07\x3c\xff\xc0\x0b\x96\x5d\xa3\x72\xf3\xdb\x0d\x29\xdf\x7f\xcd\x7e\x2e\xf2\x05\x2d\xf8\x3d\x4a\xf0\x43\x10\x81\xc9\x24\x00\xe8\xb9\xf8\x25\x00\x9d\x8a\xdf\x2b\x80\xce\xc4\x2f\x07\x28\x94\x19\x32\x80\xc2\x50\x3c\x7c\x01\x28\x1c\x8a\x87\x19\x40\xe1\xa1\x78\x28\x00\x1a\xca\xc2\x14\xa0\xc3\xa3\x68\x7f\x32\x01\xfb\xe8\x4c\xe6\x99\x4c\x44\x26\x99\xeb\x1d\x40\xe1\x89\xac\xea\x33\x40\xa7\xc3\x43\xf9\xfd\xad\x7c\x94\xdf\x7f\x06\x2b\xb4\xc4\x63\x70\x0f\x10\xf8\x15\x20\x70\x4f\x4b\xf1\xa4\xfe\xbe\xfa\x00\x10\xc8\x33\x80\xc0\x7b\xf9\xe7\x1d\x40\x40\x3c\xc8\xdf\x5c\x3c\xc8\x3f\xef\x45\xae\xd9\x4c\xe4\x50\x7f\x5f\xbf\x06\x71\x33\xe7\x52\x41\x57\x62\x40\x78\x4d\x08\xb8\xc1\x96\x17\x9e\xc0\x01\xcf\x7f\x59\x2c\x68\xf1\x92\x94\xd4\x83\x88\x5e\xe0\xe1\xf1\x31\x2c\x30\xb8\x03\x28\xc7\xc3\x5a\x02\xa7\x17\xf8\xe4\xf8\xf8\x50\x7e\x5a\x8a\x4f\x47\x4a\xc2\x16\x72\xa7\xf8\x78\x34\x3c\x3b\x3a\x3b\x79\x3e\x3c\x3b\x86\xb0\x11\x65\x98\x60\xae\x53\xea\x2c\x72\x96\x71\xe7\x2b\x13\x33\xdc\x21\x92\x54\xb2\x6b\x67\x4e\xee\x1d\x2d\xc1\x5c\x17\x94\x70\x5a\x38\xfc\x86\x64\x4e\x70\xf7\x5a\xff\x03\xe0\x5e\x81\xc1\x2f\xa2\xbd\x53\x2d\xfb\x81\xc9\x04\xf8\x85\x9f\xe9\x39\xe9\x81\x00\xa0\xbc\xcf\x35\x09\x43\x9f\xaf\xea\xde\x2f\x44\xef\x85\x7c\x3e\x28\xb5\xa8\xa3\x1f\xaa\xaa\x40\x32\x9d\x65\x53\x9a\x71\xfc\x13\xe1\x37\x83\x39\xb9\xf3\x42\x44\x75\x5a\x55\x0d\xa1\xca\x93\x29\x06\xf2\x46\x65\xa5\xed\xf7\xaa\xea\x85\x2a\x5b\x79\xcb\x16\x6f\xb2\x2f\x24\x65\x53\xd1\x4e\xf3\xd6\x64\x99\xa5\xf9\xd7\xb7\xf4\x0b\x15\x4b\x7b\xcd\xef\x3c\xda\xa4\xc3\x51\x3f\x8c\xac\x77\x5d\x33\xbf\x4f\xe9\x4f\x64\xf1\xf8\x0c\x47\x04\x25\x68\x29\x86\x57\x31\x56\xcc\xb5\xc8\xff\xb0\xd2\xac\xe9\x61\x85\x0a\x1c\xa0\x1c\x7b\xec\xb1\xc9\x5f\x5c\xe4\xe7\x85\x98\xfc\x04\xb3\x71\x11\xa3\x04\x6b\x2a\x91\xaa\x08\x02\xbd\x1e\xc0\x18\x93\x41\x99\xb2\x84\x7a\x01\x1a\x42\xd7\xf5\x08\x06\x9c\x5c\x47\x62\x49\x18\xe4\xc5\x35\x1a\x06\xc1\x30\x02\xbe\xc9\x35\x84\x10\x79\x4b\x4c\xe5\x6a\xcb\x52\x3a\x15\x62\xe9\x4f\x64\x31\x98\x91\x34\xbd\x22\xc9\xad\xa8\xda\x75\x4b\xa5\x22\x2c\x55\x57\x5f\xa4\x8c\x94\xb4\x44\x89\x68\x20\xc1\xed\xd4\x71\x12\x43\x24\x55\x8d\xc4\xb0\xa5\x6c\xe5\x59\x83\x8c\xa8\xca\x5f\x56\x95\x40\x86\x1e\xc4\x32\x2f\xf8\xbf\xd3\xfb\x52\x0c\x8d\x7e\x6c\xc6\x25\x65\x19\xfd\x3b\x9b\xf2\x1b\x4c\x9b\xe7\xaa\x3a\x0d\x0c\x01\xfc\x8d\xce\x4a\x39\xf2\xe2\xa1\x29\x97\xe5\x2f\xf3\xf9\x82\xf0\x9f\x84\x66\x44\x5b\xaf\x4d\xa6\x24\x17\x84\x52\xd2\xd7\x69\xfe\x55\x22\xa2\x79\x6d\x32\xb1\xf9\x22\x65\x09\xe3\x02\x3d\x25\xb6\x7a\x53\x23\xee\x8d\xce\xa1\xf2\xd3\xbb\x6d\xf9\x5f\xdd\xd9\xf9\x39\xb9\xc6\x02\x1b\xea\xad\xa0\xe5\x32\xe5\x18\x00\xf5\x3a\x5d\x8a\xac\x84\xd3\x12\x8f\x63\x95\x24\x14\x8a\x1f\x9b\x64\x51\xb4\x99\x56\x33\x45\x7f\x46\xed\x62\xa8\xc0\xcd\x6c\x74\x00\xe2\x82\x7f\x07\x88\xe0\x7e\x88\x4a\xd1\x4a\x22\xf0\xaa\x88\x2c\xbf\x48\xce\x61\x3f\xc4\x18\x7b\x62\x3a\x8a\xb9\x76\xf7\x7e\xe6\x01\xc1\x6d\x73\x08\x47\x1e\x13\x23\x24\x69\x27\x17\xd5\x24\x30\xb2\x93\x10\xf1\x43\x91\x2c\x7f\x8c\x0e\xe7\xba\xa2\x78\x0f\x63\xe6\xba\x5e\xe9\xe3\x02\xa2\xd2\xc7\xcc\x90\x47\xd9\x40\x3e\x55\x90\x1b\x46\x92\x01\xbf\x05\xb8\x99\xfb\xcf\x38\x6c\xca\xdc\x58\x4b\xf3\xe1\x50\xac\xcd\x55\x75\x26\x7e\x9a\x2c\xf3\x56\x96\x0b\xb1\x7a\xd3\x0b\x1c\x0e\x4f\xaa\x2a\x3c\x09\xcd\xfb\xf1\xf1\xf0\xec\xd8\x75\xc5\x42\xd0\x93\x2b\xbc\x58\x07\x7a\xb2\xbe\xe3\xe7\x87\x47\x47\x26\x9f\x60\xb3\x87\xae\x7b\x72\x3c\x7c\x7e\xa6\x3e\x8b\x94\x93\xba\xda\x30\x3c\x0a\xc3\xb0\x69\xfd\xde\xee\x94\x84\xc5\x2a\xec\xba\x47\x47\xea\xf7\x2c\xd4\xbf\x87\xea\x37\x1c\xd6\x0f\xc7\xea\xe1\xf8\x54\xfd\x7a\x87\xc7\xaa\x5d\xee\xba\x1d\xf2\x89\x6a\xa1\x77\xb3\xde\x50\x68\xea\x0b\xa4\x08\x26\x58\x4b\x03\xe4\x75\x53\xc1\xc1\xa7\x49\xf6\xcc\x39\x18\x70\x5a\x72\x8f\x5a\x79\xee\x3c\xad\xe6\xa3\x42\x71\x37\xc1\xd7\x4a\xc1\xd9\x70\x2f\x44\xa9\xf8\xb3\xc0\x7d\xd1\x0d\x86\x66\x82\xb8\xa6\x78\xee\x09\xda\x4a\x6e\x48\xf1\x32\x9f\xd2\x17\xdc\x0b\xa0\x05\x54\x22\xc1\x14\x6c\xe4\xe8\x58\xbd\x9e\x1c\xaa\x5f\xd9\xd5\x44\x23\x27\xd1\xc8\x49\x34\x72\x12\x83\x9c\xc4\x20\x27\x71\xdd\x43\xf3\x6b\x4a\x0e\xf5\x7b\x9d\x51\x57\x75\xa2\xab\x3a\x31\x19\x34\x24\x87\xfa\xfb\xe1\x73\xfd\xdd\x34\x7d\x52\x43\xda\xea\x89\x99\x32\xfd\x10\xc2\x46\x82\xcb\x71\x70\x9e\x5f\x34\xd3\xc9\xf7\x95\xb9\x68\x2e\xa7\x93\x55\x3c\x87\xd0\x98\x7d\x8e\xf7\x4a\x9c\x5f\x06\xa3\xf6\xf7\x7e\x08\x23\xc9\x12\xa6\x78\xea\xba\xf7\xd2\x06\xb5\x92\x4b\xfa\x13\xed\x84\x81\x99\xb9\x6b\x4d\x2d\x71\x2f\x40\x0b\xd7\xf5\x52\x9c\x56\x55\xde\x9f\xf5\xc3\x4b\xe6\xba\xc0\x11\xf3\x92\x8e\x67\x7e\x18\xa3\x19\xce\x1b\x8b\x9e\x80\xf8\x8f\x40\x28\xeb\x5f\xb8\x6e\x67\x13\xc6\x3c\xb4\xac\xaa\x74\x94\x5d\x9e\xb9\xae\xa0\xbb\xd1\x71\x94\x8e\x8e\xa2\xc3\x68\xea\xba\xbd\x42\x24\x84\xd1\xb0\x21\xbb\x2f\x9a\xec\x0a\xf8\x40\x95\x6e\x6d\x59\x65\xd8\xcc\x13\x5d\xae\xc5\x0b\xcd\x3a\xf6\xf7\x81\xb4\xb8\xb5\x99\xbe\xeb\x4a\xea\x5c\xd6\x6c\x8d\xc3\xba\x00\xf0\xb9\x0f\xf6\x95\x74\x9c\xe3\x9a\xd3\x58\x92\x47\x06\x25\xcb\x14\xac\xa5\x59\x85\x84\x40\x50\xe7\x51\x0f\x2c\xf3\xac\x0c\xe8\x28\x80\xc8\x7a\xef\xe7\x10\x95\xb8\xa8\x2a\x4b\x8c\xb8\xec\x87\xae\x9b\x5d\x62\x2b\x69\xaf\xfc\xca\x78\x72\xe3\xdd\x79\x1c\x95\x35\xe3\x43\xc4\x32\xce\xf1\x4d\x2b\x95\x2d\x77\xec\x35\x0a\x05\x6d\xaf\x5f\x1b\xda\x84\x10\x1f\xdb\x59\xc6\x59\x2c\x56\xa1\x3c\xfd\x42\x1b\x24\xf5\x02\xcd\xb2\x7b\xe1\x4a\x36\xb5\x82\x10\x3e\x24\xa4\xa4\x4e\x18\x69\x50\xf8\x9e\x7c\x1f\x46\x16\x5e\x05\x0b\x4f\x49\x42\xbd\x83\xfd\x83\x6b\x24\xc6\x06\x4a\x54\xcb\x9c\x87\x26\x67\x05\xfc\x2b\x8f\xd7\x5d\x85\xfe\x0b\x6f\xe6\x71\xb1\xe8\xa8\x8c\x47\x26\xe3\x65\x57\xc6\x47\x44\x2f\x7c\xe0\x4d\x32\x1f\x7a\xe3\x4f\x93\x2c\x7e\x06\x0f\xae\x85\x84\x55\xae\x2d\x6c\x62\x40\x24\x61\x94\xa3\x32\x32\x53\x0a\x15\x83\x94\x94\x5c\x48\x91\x77\xb8\x44\x5f\x3d\x5a\x0b\x56\x25\x44\x1c\x0a\x62\x10\x85\x05\x39\x8c\x83\xb8\xaa\x80\x63\x9e\x25\x0d\x95\x12\xff\xe7\x0c\x17\x03\x7a\x47\x13\x8f\xc2\x73\x63\x2e\x66\xe3\x30\x46\x4b\xcc\xc6\xc3\x78\x2f\xc3\xaa\xdc\x72\x1c\xc4\x28\xf7\x71\xe2\x7b\xa4\xaa\xb2\xaa\x02\x32\x75\x04\x40\x24\x41\xf4\xbf\x7a\x4b\xb1\x70\x13\x9c\x99\x49\x94\xaf\x3c\x8e\x08\x6c\x30\x74\xac\x31\xb4\x0f\xf6\x7d\x7b\x5d\x30\x82\x80\xe6\xdd\x62\xc5\xef\x60\x1f\x52\xf3\x68\x73\x8d\x4b\xb9\x26\x9e\xb8\x2e\xbf\xc0\xc7\x27\x87\xe1\x99\xeb\x7a\xd9\x5a\x2e\x3f\x94\xf9\x4e\x0e\x87\x81\xeb\x66\x17\x58\x2c\x95\x87\x23\xaf\xf0\x71\xea\x85\xc1\xf0\xe8\x99\xc7\xfb\xb2\x16\xe8\x67\x7d\x99\xcd\x97\xcb\x25\x44\xa2\x51\x21\x3c\x24\x63\x1e\xa3\xc2\xc7\x3d\xe6\xba\x73\x8f\xc3\x11\x1d\xe7\x71\xc4\xaa\x2a\x15\xa4\x67\x19\x7d\x39\xf4\xf7\xc1\xfe\x9e\xd6\x36\xa3\x96\x16\xc3\xe6\x8b\xbc\x2c\xd9\x55\x4a\x1d\x5a\x14\x79\x11\x39\x4c\x49\xf7\x4e\x99\x90\x54\x8c\x87\x90\x39\x01\x5c\xad\x3c\x6b\x45\xbb\xb2\xc8\x05\x4b\x56\x64\x44\x6a\x18\x01\x80\x58\x33\xc2\x0d\xb7\xaf\xb5\xed\xcc\xf7\x84\x40\xb3\x99\x65\x28\xa8\x41\xa7\xc2\x11\xf0\x41\xc4\xe4\x38\xf6\x05\xdd\x4f\x32\xd0\xb4\xff\xc2\x32\x97\x74\xb4\x34\x6a\x68\x4e\xf0\x5a\x4b\xa2\xf9\xaa\x00\x67\x33\x4f\xd2\x09\xb5\xc9\xcf\x30\x6d\xba\x67\x06\x5e\x4f\x05\x67\xfc\xc9\x89\xe5\x14\x10\xc2\x5f\x80\x4a\x1c\xa0\x04\x03\x70\x9e\xd9\x44\xea\x95\x42\xfb\x11\x64\x0f\xfb\xf9\x25\x77\x5d\x8f\x61\x72\x99\x8f\x48\x54\xa2\xc4\x97\x18\xf1\x1b\x79\x8f\x09\x69\x8f\x09\x69\x8f\xe0\xd2\x60\x46\x67\x43\x75\x57\x64\x3d\xa2\x92\xc4\xb7\x65\x45\x85\x8e\xba\x36\x21\x34\x46\x76\x0e\x88\x12\xfd\x18\x5a\x83\x76\xab\xd6\x03\x35\x6c\x42\xb9\x4a\xd0\x12\xa5\x68\x21\xbb\x9b\xe0\x00\x2d\xb1\x97\xe3\x6c\x44\xdb\x52\x78\xb4\xc6\xe2\x6a\xbd\x2a\xb9\x58\x9e\x27\x9a\x0d\x7a\x5e\x8a\x73\xa1\xc2\x0c\x58\x56\x72\x92\x25\xf4\xfd\xac\xaa\xd2\xc1\xa2\xa0\x53\x29\x6b\x0b\x95\xa7\x97\xb6\xbe\x6e\x18\xba\xb8\xeb\x72\xc7\xe4\xc8\x67\x8e\x9d\x5d\x97\xaf\xeb\x6b\x55\x2e\xe8\x5d\x0e\x2a\x55\x0a\xc1\x28\x15\xbf\x11\x18\x01\x94\x0a\x26\x5a\xd0\x52\x30\x3c\x91\x63\x81\x69\xad\x77\x8e\x65\xb6\x58\x54\xa5\xe7\xc6\x07\xf1\x05\x81\xb1\x82\xcc\x31\x9e\x8a\x58\x29\x88\xda\xdd\xd3\x54\x08\x0b\x6c\xbd\x7a\x1c\x2d\x60\x63\x3c\x28\x37\xf2\xa3\xc5\x9a\x09\xa1\x77\x01\x7c\x09\x83\xbf\x7f\xe9\x70\x72\xed\xe8\xa5\xa3\x70\x48\x92\xd0\x05\x2f\xa5\x15\x01\xec\xfb\x0b\x7f\x1f\xa8\x99\xb8\x0f\xf7\x5a\x8d\x8e\x17\xb1\x6c\x77\xa5\x97\xf8\x62\x65\xd6\x9c\x55\xbd\xe6\xd4\x14\xf0\xd2\x48\x04\x28\x47\xa5\x90\x0a\x6a\xf5\x49\x97\xce\x90\x20\x92\x0c\xf5\x42\x58\x55\xfa\x51\xfb\xd5\x12\x83\x00\x95\x15\xee\x15\xae\xeb\x15\xf6\xd2\x7b\x11\xb4\x17\x67\xae\x1d\x72\x82\xc6\x70\x8d\x53\xa5\xa4\x4b\x8c\x26\x55\x55\x27\x4b\xd3\x83\x4a\x15\x02\x88\x92\xb8\xe4\xe2\x22\xd5\xec\x46\x95\xab\x57\xa0\x0c\x0a\x1d\xdc\x58\x46\x45\x57\x5c\x17\x8c\x80\x79\xa9\xaa\xb4\xaa\xa4\x42\xa2\xd7\x3b\xd7\xe5\x97\x81\x20\xa3\x1c\xf7\x42\x88\x52\xd7\xa5\x6b\xea\xe0\x78\x19\x43\x8d\x08\xf0\xac\xa0\xb3\xcf\xc0\x5f\xd6\xe3\xb9\x70\xdd\xd4\x75\x7b\x1d\x65\x5c\xd7\xeb\x48\xc5\xbd\x00\xa2\xce\x5e\xc3\xc2\x75\x85\x2a\x61\x9b\x2b\x34\x52\xf5\xd4\x1a\xb5\x96\x65\x25\xc2\xb5\xf4\x06\x85\x52\x80\x66\xaa\xaf\xe8\xa6\x55\x59\x26\xe5\xea\x9e\xb4\xb7\xd6\x56\x01\x78\x23\x1f\x9f\xf6\x3d\x6f\x66\xb7\x52\x1a\x93\x59\x93\xd6\x22\x67\x93\xea\xcc\x97\xa5\x34\x7e\x11\xe7\x2a\xcf\x53\x4a\x32\x27\x2f\x1c\x52\x8b\x5b\x00\xee\x69\x51\x1c\x11\x7c\xd3\x68\xd0\xe4\x3c\x17\xec\x24\x15\x3d\x13\x38\xc2\x18\xe7\x55\xe5\xa5\x3e\x56\xfa\x2d\x44\x09\xce\xc6\x25\xbe\x19\xe7\x71\x8c\x24\x31\xfb\x21\x2a\x51\x2f\x50\xff\x89\xc1\xf5\x96\xf8\x09\x92\x50\x68\x16\x23\x2f\x7e\x75\xcb\x97\x62\xb9\x85\x72\x14\xd5\xd7\x50\x61\x4e\x66\x69\xa9\x60\xa3\xd4\xc7\x60\x04\x22\xf9\xe3\x00\x88\x52\x5f\xe7\x43\x4b\x41\xb0\x0d\xa0\x06\xb8\x44\x40\xb6\xdc\xbd\xf2\x48\x55\x1e\x39\x00\x2d\x7c\x5c\x57\x0f\xe1\x9e\x9a\xac\x33\x33\x53\x17\x55\x05\x1e\x56\x40\xca\x93\x3a\x0d\xe5\x92\xaa\x3d\x43\xc2\xae\x26\x61\xdf\xd4\x11\xad\x91\x95\x22\x2a\x63\x68\x2b\xe5\x9a\x86\x96\x9a\xa4\xd2\x75\x92\x12\x43\xc6\x70\x80\x04\xfb\xd1\x43\xc6\x2e\x8a\x73\x26\x86\x4c\x5a\x43\x82\xc6\x52\x01\x90\xc0\x4e\xdb\x28\xa4\xbe\xec\x83\x7d\x29\x8c\x8d\x73\x9c\x8e\x99\x19\x46\x94\xa3\x5e\x28\xb8\x4e\x0d\xbe\x3d\x36\xba\x4e\x89\xf1\xd2\xa0\xc4\xf7\xda\xd5\x8f\xf6\xc1\x7e\x04\x84\xa4\x10\x81\x8d\x6f\x42\x8a\x10\xa5\x55\x63\xa4\x69\x2c\xf1\x71\xb9\x81\xe4\xa5\x41\x32\x78\x00\x7e\xe2\x83\x36\x9a\x1f\x41\x32\x70\x80\xdf\xd4\x63\xa6\x58\x07\x7b\x53\x58\x9f\xad\x1b\x5c\x25\x7b\x1a\xf1\x7e\x18\xf1\x3d\xcd\x20\x5a\x98\xd8\xe0\x09\xac\x59\xc8\x89\x40\x7f\xa9\x06\x4e\x8e\x93\x32\x89\x66\x1b\x16\x50\x43\x96\xd9\xb8\x88\x9b\x39\xc3\xd4\x5c\x2b\xaa\xca\x23\x0d\x09\x6f\x27\x58\xe2\x63\xd0\x07\x91\xfc\x71\x00\x22\x35\x22\x35\x1e\x4b\x83\x47\x22\x18\x7d\x2c\xb1\x38\xfb\x27\x10\xab\xe8\x2d\xb1\x7a\xab\xa8\x32\xdb\xa0\x4a\xbd\xdc\x8d\x59\xdc\x0c\xb8\x21\xd2\x5c\x10\xe9\xa3\x84\x22\x84\xec\xb5\xce\x90\x9a\x28\xc6\xc0\xcf\x7d\xd0\xee\xce\x0e\x44\xb1\x32\x2b\x49\x4d\x14\x4a\x66\x8e\x05\x7f\x4a\xb4\xf8\x62\x99\xd7\x8d\xf2\x18\xee\xb5\x98\xec\x32\x53\xb2\x01\x11\x22\xfb\x2d\xcb\xa6\x4e\x3e\x73\x04\x87\x55\x75\xf2\xdc\x11\xcd\x39\xc0\x4f\xe0\xca\xe2\x7d\xae\xfb\xc5\xa3\x06\xf7\x1c\x95\x70\xf5\x28\x9b\xb4\x3a\x22\x04\x14\x99\xe6\x83\xcb\xa6\x2b\x8d\x88\x51\x4b\x16\xbf\xad\xeb\x8f\xe3\x18\xe5\x78\x1c\xcb\xf1\xd9\x0c\x11\xaa\x09\xd7\x98\xf6\x7b\x18\x73\xd7\xdd\x94\x08\x85\x6c\xa9\xa4\x80\xdc\x48\xd7\xca\xfc\xa0\x6c\xad\xac\x4e\xca\xa1\xeb\xb2\xc1\x62\x59\xde\x78\x96\x31\x26\x53\x29\x1c\xa2\xb6\x4b\x94\x43\xd8\xac\x40\x7c\x63\x05\xa2\x1e\x1f\xe7\xb1\x04\x55\x55\xa5\xe6\x54\xdb\xbf\xa0\xd5\x81\xa2\xb3\x74\x21\x97\x28\x19\xd9\xe3\x51\x41\xb3\x10\x29\x93\x42\xbe\x61\x44\xe0\xb6\x70\x23\xc1\x2d\xc6\xd2\x45\x09\xf7\xf8\x86\xbd\x9a\x7e\x55\xac\xc4\x63\x96\x60\xff\xc1\xd6\xc6\x44\x96\x85\xc7\x31\xaf\xaa\x87\x55\xad\x05\x66\xb5\x8d\x5f\x8c\x54\x26\x38\x61\x86\x02\x44\x35\x13\x18\x65\x8a\xa7\x0a\xb5\x22\x02\x60\xb5\x16\x93\xf1\xa1\x2b\x1c\xa3\x6d\x39\xd0\xed\x08\x50\x32\xed\xb8\xf5\x1e\x94\xe9\x3e\xca\x57\x82\xa1\xac\x54\x5c\x81\x76\x9d\x46\xd2\xe9\xbe\x1e\x47\xf0\xb8\xef\xff\x11\x9f\xff\x2a\x46\x47\x3b\x7b\xe9\xc5\x47\x19\x83\xa4\x04\x59\x19\xe0\xa6\x1d\x1e\x64\x4e\x31\x68\xc5\x92\x00\xe3\x52\x20\x65\x9e\x61\xaa\xde\xe6\xa4\xb8\xc5\xda\xf5\x30\xa7\x65\x49\xae\x29\xf6\xac\x7c\x55\x05\xbc\x65\x76\x9b\xe5\x5f\x33\x47\xa5\x40\x00\x7d\xaf\x2e\x3b\x12\x0c\xa1\x7e\x6b\xfc\x95\x42\x6b\x86\xc8\xc0\xb6\xe0\xcb\x82\x7e\xe0\x24\xb9\xfd\x58\x90\x84\x8e\x1e\x49\x97\xd5\xd6\xbe\x18\x13\xbf\x01\x23\xed\x5b\x23\xc9\x2d\xf6\xea\xb0\x2b\xa8\x52\xaa\x0a\x80\x55\xd6\x38\x91\x0d\x4d\x27\xd2\x4d\xe9\xa9\x96\xea\xaf\x10\x59\x59\xed\x46\x70\xd6\xfa\x62\xfa\xd1\xf2\xfa\x4b\xcb\x09\xae\xd1\xeb\x0b\xa1\xc6\x90\x23\xf7\xf1\x16\xac\xa1\x1e\x75\xdd\x1a\x53\xae\xeb\x71\x1f\x3f\x86\x3c\x88\xb8\x15\x36\x80\x33\xe5\xcc\x3f\xfe\x27\x3a\xf3\x45\x83\xdb\xbd\xf7\x4f\xf8\xfd\x77\x71\xdf\x1f\x8c\x27\x77\x41\xd0\x9f\xdc\x05\xa7\x93\xbb\xe0\x87\xc9\x5d\xf0\x72\x72\x17\xbc\xea\x4f\xee\xc2\xd7\x93\xbb\xe7\xaf\xfb\x93\xbb\xd3\xa3\xc9\xdd\xe9\x49\x7f\x72\x77\xf6\x7a\xb2\x7c\xfd\xfa\xf5\x2b\xf9\xf7\x75\x5c\x8d\x27\xcb\x1f\x4f\x45\xe1\xe5\x8f\x3f\xbc\x7e\x1d\x7b\xa3\x9e\x48\x79\xa9\x52\x44\x0e\x58\x79\xa3\x68\xfc\xa9\x9d\xad\xfa\x04\xd7\xb2\x1d\xa0\xa5\x84\xe3\xf4\x78\xb2\x1c\x06\xc3\x53\xf9\xf7\x2c\x3e\x40\x29\x3e\x18\xa3\xc9\x78\x12\x4f\x1e\x26\xab\xf8\x00\x2d\xf0\xc1\x27\x6f\x14\xf5\xaa\x5e\xaf\xea\x8d\x49\xff\x1f\x93\x7e\xec\xf7\xe0\x77\x07\x0c\xcd\xcc\xa7\xf1\xa7\xa6\x04\xf4\x46\xd1\xf7\xe3\xa0\x7f\x46\xfa\xb3\xf8\x61\xb8\xaa\xd4\xf3\x3f\x26\xfd\xbf\x9c\x4f\x0e\x26\xa3\xe8\x5f\x5c\x3c\xf1\x27\xdf\xa1\xcf\x93\x41\xef\xbf\x26\xcf\xf6\x27\xde\x04\x8a\xd2\x31\x7c\xf6\xdd\x01\xdb\xb3\x5d\x5d\x35\xb7\x79\x34\x5c\x42\x6b\xaa\x8f\x78\xbb\x94\x44\x53\x55\xe1\xe1\xe3\xee\xae\x33\x95\x45\x39\xc6\x5a\x3e\xa9\xee\x2c\x55\xf5\x58\xad\x96\x87\xc8\x39\x3a\xd2\x7e\xb6\x50\xff\x1e\xea\x32\xc3\xfa\xe1\xb8\x5d\xfa\xae\x9e\x4a\x66\xee\x1c\x9d\xd6\x8e\xb7\xe7\x23\xda\x3f\x3a\x8d\xce\x9e\x5f\x60\x8f\xe3\xc3\x61\x45\xa1\xb4\x39\x86\xc1\x70\xc4\xfb\x67\xcf\xfd\x30\x88\xfa\x61\xcb\x23\xd0\x80\x72\x2a\x1a\x1a\x81\x49\x00\xa2\xb3\xe7\xea\xf9\xff\x01\xd1\x99\x49\xbe\x02\x51\x18\x9e\x58\x6e\xc1\x11\x98\x70\x91\x16\xe8\x97\x4c\xbc\x98\xdc\x5f\x04\x33\x1e\xea\x97\x99\xf8\x72\xa4\x5f\x0a\xf1\x25\x54\x2f\xff\x2f\x88\x0e\x75\x26\x07\x44\x87\x2a\x8b\x90\xdb\x8f\x34\x00\x07\x20\x3a\x33\xb5\x4c\x40\xf4\x5c\x57\xff\x3f\xff\x0d\xa2\xb3\x63\xfd\xfc\xbf\x41\xf4\xfc\x44\xe7\x91\x34\x0a\xa2\xd3\xc0\x7a\x3f\x93\x2b\x98\x6d\xaa\xac\xfb\x6c\x62\x3d\xb4\xb5\x72\x30\x2b\xf2\xf9\x4b\x2d\xd2\x7a\x14\x46\x5d\xc9\xd2\x06\xeb\x7b\xb4\x2f\xad\xaf\x97\x97\x61\x00\x91\x32\xc7\x9a\x34\x37\x0c\x86\x87\x10\xd6\xe1\xba\x2f\xac\x65\x7a\x78\x7c\x02\xd1\xd7\xf5\x84\x5b\x1c\x9c\xdf\x5e\x0c\x8f\x4f\xce\x6f\x7d\x1f\xbe\x18\xdf\xc6\xf8\x8b\x77\x0b\x47\x61\x14\xa0\xaf\xe6\x6d\xaf\x6d\xb6\xd1\x01\x1f\x2c\x5b\x2c\xb9\x59\x8e\x66\x2c\xa5\x72\xe9\xe2\xf5\xa3\x0a\x0e\x40\x76\x70\x08\xaf\x83\x43\x88\x4a\xcf\xb3\xbf\x93\x22\x13\xfc\x9a\x37\xcf\x76\xc1\x94\x5e\x93\xe4\x5e\x0a\x46\xe2\xa1\x71\xe7\xff\x26\xd6\x42\x2e\x7f\xec\x28\x83\x92\xd3\x8c\x16\x22\xbf\x7e\xb4\x2b\xfb\xd6\x10\x00\xae\x22\x29\x3a\x73\xea\x28\x0b\x03\xa5\x10\xa4\x6a\x17\xbc\x4a\x5c\xe4\x25\x93\xa1\xa0\x41\x13\x02\x61\x3f\x7f\xe0\xa4\xe0\x76\x82\x0e\x7f\xd1\x29\xd3\x3c\x59\xce\x69\xc6\x4b\x3c\x8e\x37\xa4\x5b\x23\x4b\x49\x41\x9c\x23\xf1\x5b\x78\xb4\x46\xbd\xf4\xac\x2c\x96\x42\x4f\x34\x50\x68\x07\x96\x95\xd2\xa7\x0d\x18\x70\x53\x86\x53\xa2\xbe\x6a\xaf\xf9\xf8\x46\x7d\xa4\xcd\x68\xb9\xae\xf5\xa2\xb8\x9d\xc4\xb8\x2a\x09\x65\xe4\xfa\x7b\xfc\x20\x24\x9a\xe8\x51\x3d\x6a\xaf\x56\x01\xbe\xd0\xa2\x64\x79\xe6\xba\x02\x0c\x60\xe4\x51\xd1\x74\x3e\x73\xbe\x17\xb5\x38\x53\x56\xd0\x84\xb3\x2f\x62\xa9\x13\x02\x79\x56\x07\x29\xc8\x32\xed\x3c\xb5\xfd\x92\xde\x91\x84\xa7\xf7\x4e\x9e\x51\x87\x14\xd7\x12\xb7\x00\x22\x1d\xcd\xe3\x31\xb1\x54\x88\x95\x20\xf6\xe1\x64\x60\x9e\xbe\x3b\x50\x56\xf5\x6c\x1c\xc4\x10\xea\x06\x58\x9a\xf6\x67\x79\x31\xa7\xd3\xba\x22\x01\x1c\xbf\xa1\xce\x06\x7c\x05\x96\x61\xb1\x6f\x32\xee\x49\x9f\x91\x98\xb3\xb9\x9d\x36\x54\x69\xa2\x1f\x85\xae\xbf\xa5\x57\xc9\x1a\x35\x52\x4c\x2b\x86\x34\xa4\x61\x43\x7f\xc3\x02\x44\x44\x07\xc9\x0d\x4d\x6e\xdf\xb2\x8c\xfe\x50\x50\x72\x5b\xe2\xfc\x62\x28\x2b\xcf\x5d\x77\xa8\x7e\xde\xa8\x36\xca\xe5\x42\x08\x29\x74\xba\xa5\x89\x15\xfa\xf8\xe2\xaf\x8f\x8d\xdc\xde\x70\x13\xff\x1f\x5f\xfc\xf5\x09\xf4\xf3\xaf\x79\x8d\xb5\x52\x4a\x3a\x12\xf0\x02\x67\x02\x3d\x0b\x15\xb2\xc0\x60\x55\xad\xa3\x9a\x93\x6b\xe7\x86\x64\xd3\x94\x3a\xde\x8c\x15\x25\xaf\xab\x81\x06\xe8\x56\xcb\x42\xd4\x31\x66\x62\x4e\xae\xc5\x5c\x65\x7a\x04\xf7\xf9\x0d\x2d\xa8\xc3\x4a\x87\x38\x8b\x82\x7e\x61\xf9\xb2\x4c\xef\x9d\x29\x4d\x52\x52\xd0\xa9\x53\x2e\x67\x33\x76\x27\x54\x2d\x07\xec\xfb\xcc\xdf\x07\x56\xeb\xfb\x10\xcd\x14\x94\xc5\x23\x50\x2e\x0a\x2a\x8a\x7b\x25\x15\x0a\xfd\x76\x30\x0d\x7c\x63\x16\xe3\x62\xb5\x6a\xb8\xed\xab\x0e\xfb\x0a\x2a\x65\xa4\xc2\x45\x26\xd5\x74\xe5\x07\x5d\x2c\xb9\x76\xb2\x88\xb1\x41\x0c\x36\x86\x97\x72\xc3\xf0\x72\xa6\xc2\x0b\x4a\xdb\x82\x52\x40\x28\xa4\x87\x0b\x4c\x5c\x97\xd4\xf1\x2f\xba\x77\xf4\x6e\x41\x13\x41\x27\xca\x19\xf7\x6f\x1f\xde\xbf\x73\x44\x59\x92\x70\xb9\xeb\x42\xaa\xa5\x89\x42\x49\x69\xe6\x88\xe8\x67\xc9\x0b\x4a\xe6\x4e\x92\x67\x9c\xb0\xac\x74\xb2\x3c\xeb\x2f\x0a\x96\x29\xc2\xae\xab\x28\x45\x1d\x3a\x60\xca\xc7\xe5\xaa\x61\x36\xaf\x65\xff\x5b\xb1\x2a\x09\x5a\x2a\xaf\x78\x1d\xb7\xdc\x10\x8b\xde\xac\x31\xa7\xc5\x35\x75\xe6\x64\xb1\x60\xd9\x75\x79\x2e\x51\xbe\x28\xf2\x2f\x6c\x2a\x86\x36\x5f\x16\x09\x35\x26\x0a\x56\x3a\xf6\x64\x03\x10\xd5\xce\x27\x5b\xc3\x66\x70\xd3\xd3\x44\xa4\x93\xc9\x90\x18\x47\x04\x56\x95\x0c\xe3\xc3\x6c\x4c\x62\x54\x88\xa7\x5e\x60\x71\xce\xcf\x4d\xe8\x8d\x8a\x26\x54\x9d\x5a\xa2\x54\x0c\x68\xdb\x28\x50\x28\xa3\xc0\x12\x07\x28\xc5\x5e\x81\xd5\xd7\x46\xb8\x94\x83\xad\x5a\x2e\x1a\xd8\x96\x17\xe9\xf9\x52\xc0\xb6\x56\xd9\x78\x19\x9b\x61\xc9\x68\x29\xb7\xb6\x88\x0f\xa5\x43\x0a\x2a\xdd\x3a\x0d\x2b\x60\x59\xc9\xa6\xd4\x11\xbd\x06\x10\x6d\x18\x41\x0a\xd7\xed\xf2\x23\x4c\x4d\x1b\xf2\x77\xd3\xc1\x22\x9d\x00\xdf\x50\x99\xac\xa9\xa3\x1a\x54\x98\x78\xc9\xa2\x66\xdc\x5c\x28\x64\xf8\x61\x05\x51\x47\x94\xa4\x24\x05\x51\x29\x83\x1b\x38\xce\x6d\x1c\xe7\x1b\x38\x54\xb4\x97\x8f\x97\x31\xca\x34\x8d\xeb\xa4\xfa\x9d\x6a\xe9\x43\xd3\x40\x86\x04\x43\xe8\xd5\x14\x21\xde\x74\x18\x09\x26\x55\xb5\xb1\xfe\xe2\x44\x24\xd6\xeb\x73\x6b\xbd\xa3\x53\x43\xc0\x62\x2c\x80\xd0\x2b\xc7\x45\x8c\x73\x34\xa5\x29\xe5\xd4\xc9\xac\x90\x71\x2b\x1a\xf7\xa7\x46\x44\x57\x61\x44\xbc\xe6\x0f\xad\xb0\x27\xd3\x28\x84\xa3\xe6\xc5\xf7\x23\xa9\x30\xf0\x91\x67\x27\x22\x6d\x75\x7d\xaa\x1a\x21\x03\x34\x25\x60\x24\xfb\x42\x1c\xd1\x61\xe7\x4a\xac\x43\x62\xa6\x19\x3e\x02\x4c\x30\x8d\x8f\x43\x64\xc9\x20\xb8\xa9\xa3\xe9\xd1\x3b\xb3\xe0\xd4\xa1\x90\xd2\xc2\xfa\x34\x38\xe7\x81\x58\x4d\xcf\x55\xa1\xf3\xb9\x57\xc0\x73\xd8\x59\xc6\xf7\xad\x52\x92\xaf\xba\xee\xa1\x90\xee\x0b\x38\xcd\x1f\xb6\x17\x59\x7d\xbd\x61\x29\xf5\x64\x38\x5e\xa1\xc3\xf3\xb4\xc5\xbc\x50\x9e\xaf\x1b\x31\x41\x25\x0a\x24\xdb\x12\x03\xb4\x15\x7c\xc4\x7c\x5f\x23\xc6\x88\x84\xe7\x52\x59\x29\xce\xa1\x9d\xec\xfb\xdd\x55\xb5\x41\x54\x54\x22\x2d\x97\x99\x02\x8d\x89\xe1\x6a\xaa\xb9\xc8\xb4\x4c\x30\xa5\x33\x96\x30\x21\xcd\x28\x37\x25\xd1\x96\x07\xd6\x0c\xc7\xc7\x26\xd8\x3d\xb3\xc6\xcb\x04\x15\x79\x32\x08\xb0\x9b\xea\x32\x21\x3f\x1d\x9d\xf4\x30\xe6\x55\xc5\x7b\x9d\x24\x95\xf9\x21\x7c\xe2\xe3\x50\xcc\xa8\xcc\xc7\x87\xd2\xc1\xf3\x44\x33\x3d\x69\x57\xb5\x98\xef\x5b\x25\xb6\x86\x92\xbc\x9b\xc5\x46\xe8\x7e\xfc\x32\x94\x66\x66\x93\xd6\x84\xab\x4e\x32\x80\x78\x3f\xb4\xeb\xf9\x71\xdd\xb8\xac\x3c\x54\x39\xa6\x03\x92\x25\x37\x79\x81\x08\x1e\xc7\xa8\xc4\xbd\x50\x2d\x53\x46\xac\x55\x5f\x65\x43\xea\x51\xac\xf7\xe6\x39\xc6\x04\xaa\x18\xaf\x6d\x44\xcd\x5c\xf7\x48\xd0\x27\x73\xdd\x7b\xef\xc9\xfc\x7e\x08\xe1\x39\x94\x22\x42\x2f\x40\xad\x09\x2d\xe6\x54\x4f\xc6\xa3\xac\x11\x02\xe6\x90\x28\xbb\xaf\x0a\xeb\xde\x06\x52\x63\xdc\xd6\xf1\x74\xe8\x57\x39\x5d\x0f\xa5\x93\x23\x80\x48\xd7\x66\x90\x0b\xad\xa6\xb7\x56\x8e\x0c\xef\xc4\x38\x33\xdc\x53\xc1\x79\xc9\xa1\x26\x64\x28\x19\xcd\x15\x99\xda\x14\x2b\xbd\x10\x4e\x49\x7f\x5f\xd2\x2c\xa1\x0e\xcd\x78\x71\x0f\x6c\x97\xb1\xd5\x63\xae\xe7\xa6\xa6\xdf\x5e\x29\x47\x88\x93\x6b\x5c\x20\x33\x3a\x38\x47\x74\x70\xcb\xb2\x29\x06\xa6\x52\x80\x4c\x97\xb0\xdc\xee\xdb\x10\xc8\x2f\xd6\x04\x51\x4b\x3d\xee\x85\x88\x08\x7a\x60\x33\x4f\x46\xb2\x7a\xdb\xe6\x3f\x6c\xfc\x2d\x8d\x4f\x42\xfb\x43\xba\xb4\x22\xa2\xa5\x4e\x65\xbe\x03\x10\x9d\x48\xde\xbf\x9d\x37\xc0\x91\x97\x0b\xea\xd8\x21\x67\x74\x28\x96\x86\x62\xe4\x11\x51\x20\xc3\xa0\xd7\x03\x3b\x95\x13\x59\x01\xb2\x99\x3b\xca\xe1\xc3\xb7\x70\x57\xcd\x5c\x65\xb0\x6f\x21\x44\x45\x93\xa1\x0e\x7e\x53\x21\xed\x6d\x39\xd8\xa6\xa4\x5d\xe0\xd4\x9a\x57\x2d\xec\x52\xe5\xce\xb2\xe4\xd8\x7a\x6b\xcd\x17\x5a\x5c\x11\xce\xe6\x02\xed\xc0\x0a\xe8\x3d\xd7\x90\xf6\xee\xe5\x8a\xa3\x30\xe6\xba\x1e\x19\x29\x91\x98\x5c\x1b\xcd\x42\x4b\xaa\x5a\x32\x76\xe8\x5d\x92\x92\xb9\x1a\xcf\x39\x29\x6e\x4b\x00\x23\x39\xa7\x5a\x5d\xea\x87\xa8\x35\xbd\x8d\xb2\x94\x19\xf9\x57\x68\xfe\x2d\x3d\x69\xad\x99\x72\x99\xdc\xb4\xc4\x6e\x24\x07\xd3\x1e\x1b\xc1\x35\x76\x40\xd7\xde\xd3\xf8\x4e\x8d\x16\x67\x94\x81\x47\x7b\x3e\x4b\xf3\xaf\x62\xee\x0a\x6a\xce\x8b\x16\x70\x26\x46\x92\xb9\x6e\x6f\xd6\x51\xa1\xe8\xed\x96\x1e\x46\x0e\xf0\x19\x44\xf9\x48\x4d\x69\x16\xad\x2b\x84\x19\xd4\x9f\x6a\x15\x2c\x8b\x7d\x16\x01\xb9\x0d\x27\xd3\xdf\x40\x0f\xc8\xb4\x76\x62\xd7\x96\x1c\x26\xa9\x68\x7f\x99\xd5\x9a\xa4\x35\x18\x60\xdf\xcf\x7c\x19\x73\x60\x7b\x2b\x7f\xb7\xf8\x85\xe4\x10\xa7\x82\x43\x64\xbb\x73\x88\xce\x55\xa6\x93\x4b\x64\x8e\xfa\x6c\x73\x8a\xce\x86\x5a\x43\xdd\x22\x0f\x49\xe1\x99\xa4\x70\x21\xf4\xf5\xae\xbd\x0c\x9e\xc3\xed\x95\xd4\xbb\x1b\x1b\xe1\x57\x4a\xee\x35\xd9\xb6\x01\xcc\xf2\x29\x55\x91\x3b\x66\x60\x09\x77\x52\x4a\x4a\x2e\xad\x37\x96\xf2\xd9\x30\xe9\xa7\xe8\xd1\x46\xf8\xaf\x46\xa7\x14\x6c\x48\x20\x9e\x98\x28\x26\x34\x43\x53\xf4\x05\xdd\xe2\x10\xbd\x14\x4c\xfb\x37\xbc\xc6\x80\x8d\x49\x51\xad\x9a\xea\xd9\x03\xf9\x82\x66\x00\x51\xad\xc6\x9b\x18\x36\x0d\x95\x7e\x93\xab\x87\x7e\xd6\xeb\x86\x7c\x23\x38\xc1\x4b\x7c\x24\x16\xf4\xaa\x12\xec\x82\xa1\xc2\x75\xed\xf5\xd9\x7b\xa9\x96\x6f\x7b\xf5\x1b\xdd\xe2\x30\x6a\xc9\x87\x42\xaa\xb9\xc5\x41\xd4\x5e\xdb\x5c\xd7\xbb\xc5\x42\x7e\x41\x42\xee\xb9\x95\xea\xce\xb9\x58\xa0\xaa\xea\x77\x19\x27\xda\x34\x34\x52\xed\x2c\x65\x6c\xc1\x9f\x6a\x2b\x5a\x6a\xb4\x2d\x5d\xd7\x5b\xe2\x97\x55\x95\x2b\xeb\xd6\xad\xeb\x1e\xf5\x64\x47\xbd\x29\x0e\x55\x97\x85\x50\xcb\x46\x3c\xe2\x7e\x88\xbe\xe0\x6e\xd3\xa4\x02\x7e\x24\xaa\x13\xd2\xd7\x17\x58\x55\xdb\x62\x87\x94\x50\xb6\x6c\x84\xb2\x14\x3f\xac\xd0\x42\xfc\x99\x61\xbd\xdd\x41\xfe\xdc\xa8\x9f\x6b\x31\xdc\x77\xdf\x2a\xb3\xa5\x10\x95\xbb\xc8\x6c\xe5\xb9\x34\xd5\x6c\x91\x77\xd4\xa6\x2b\x2d\x46\x11\x7b\xb9\x94\x1b\x6a\x4a\xbd\xa1\xa6\xac\xaa\xde\xbd\xc7\x54\x8c\x69\xef\x57\x19\x17\x39\xd4\xe2\x96\x96\x65\x6a\x19\x07\x63\x9c\x2b\x1d\x68\x2b\x9c\x73\xaf\x84\xe7\xb0\x33\xdb\x86\x8e\x74\x7c\x8a\x31\x2e\xe1\x7d\x77\xad\xed\x65\x55\xaf\x4c\xc4\xf9\x7a\xc3\x38\x2d\x17\x24\xb1\xa6\xaf\xad\x14\x3a\x64\xa6\xf6\xa6\x4a\xe3\x43\xff\x0b\x49\x97\xd4\x29\xe9\x82\x14\x72\x61\xa8\xd7\xde\xab\x34\x4f\x6e\x8d\x6e\x0c\x20\xba\x76\x5d\xef\xb3\x47\xeb\xf9\xab\x04\xd7\x19\x9e\x62\x35\xb6\x50\x8c\x6b\xa0\x46\xb8\x10\x7f\x4c\x9c\xe2\x14\x9b\xa9\xd8\xc4\xc9\xde\xd5\x71\xd7\x72\x2a\x27\xcd\x3c\x5e\xa2\x5e\xb0\x67\x8c\x4c\xd2\x66\x52\x50\x32\x15\x2c\xcb\xf8\x14\x6a\x7d\x7d\x41\x58\x71\xee\x10\x27\xc9\xd3\x3c\x13\x5d\x9c\xb3\xb2\x14\x5a\xef\x6a\xf5\x27\x1a\x6a\x77\x5c\x09\xb5\xa2\x95\xf9\x32\xe5\x4c\xea\xd9\xb7\xf4\xde\xde\xed\x6b\x83\x26\x4d\x08\xaa\x79\xe7\x44\xb0\x99\x72\xe4\xed\x8e\x38\x21\x1f\xf6\x02\x18\x5d\x8f\x3c\x83\xc6\x40\xcb\x4b\x2c\x4b\xf2\xf9\x42\x5a\x24\x4c\xa0\xf6\x06\x1e\x04\x5c\x92\xa1\xd7\xa8\x38\x77\xf2\xc2\x99\xe5\x69\x9a\x7f\xa5\x53\xe7\xea\xde\x21\xd2\x34\xc8\xc9\xd5\x32\x95\xa6\x0f\x3a\x5f\xf0\x7b\x69\x3d\x90\x1c\xbe\x9e\x22\x38\x44\x25\x66\x82\x06\x2d\x0a\xef\xd0\x0d\x3c\xc5\xe4\x8f\x04\x73\x93\xc6\xa4\xeb\x51\x33\xdc\xd1\x0d\x6e\xf4\x91\xeb\xaa\x6a\x61\xe1\x46\xf0\x90\x36\x1a\x2c\x95\x65\xdb\x34\x82\x6b\xcc\x53\x69\x29\xe5\x13\x5a\x4a\x6b\x3c\xb7\x28\x29\x46\x20\xba\x76\xdd\xcd\x81\xbb\xab\x15\x97\x16\x31\x19\xc5\xc5\x4c\x98\x66\xfd\x11\x65\x56\x82\x9f\xa2\x29\x5c\x63\xa9\xeb\xfb\x9e\xcb\x66\x85\x14\xd4\x30\xad\x23\x7d\x6b\xfe\x3a\xc7\x0f\x2b\x31\x2c\xd2\x99\x2c\x03\xdb\xb7\x48\x2f\xf8\xec\x50\x2a\xc9\x88\xe1\x71\x5c\x4f\x40\xb5\x25\x70\xd1\x08\x37\x05\x0e\x87\xc7\x48\x6a\xb0\x0c\x3f\xac\x56\xdf\xc2\x9e\x19\x44\x9d\x80\xb4\x18\x94\x64\xd0\x0b\xc5\xa0\xf5\x40\x73\x88\xb6\xf7\x40\x9a\x88\x36\x84\x1a\x69\xb6\x11\x63\x30\x6d\xc6\xe0\xc6\x8c\x41\x39\xaa\x47\x21\xea\x52\x24\x99\x98\xf9\x33\xcd\x30\xd5\x44\x71\x92\x7c\x3e\x27\xce\x15\xe5\x5f\x29\xd5\xc2\x72\x92\xa7\x29\xd5\x31\x6c\x19\x2f\x18\x15\x72\x7c\xaa\xd6\xb1\x1c\x0b\x45\x13\xc9\x29\xbe\xd8\xc9\x42\x20\x63\xd0\xc9\x63\x16\x02\x0e\x95\x84\x68\xa9\xf6\xa1\x51\xed\x4d\x70\x6e\x52\xcf\xa6\xa6\x54\x37\xe2\x5b\x12\x19\x31\xa6\x87\x9e\x54\xef\xe5\xda\xb6\xa8\x2a\xa5\x8f\x6e\x1f\x37\xab\xad\x35\xb8\x52\x6b\x76\x97\x23\x31\x51\x18\x9a\xa3\x25\x4a\x50\x0a\xa3\x7c\xa4\x03\xf3\x44\xba\x44\x99\xf9\x04\x23\xfd\x25\xb1\xeb\x96\x41\x12\xdb\xa9\x61\xe4\xcd\x76\x03\x1b\x46\x33\xdc\x0b\x57\xdf\xa0\x6b\xae\x8d\x39\x90\x41\x7c\x53\x38\xfa\x0d\xf7\x82\xc8\x4b\xec\xdd\xc3\x66\xe2\xda\x92\x50\xd8\xda\xd8\xcb\xd1\x0c\x8b\xf9\xab\x04\xb4\x70\x78\xd4\xec\x11\x7f\x7a\xb6\xf6\xc2\x7a\x8e\x4a\x35\x9c\xd8\x53\x54\x48\xd7\x79\xe1\xd5\x36\x12\xb9\x59\xcb\x22\x6c\x00\xe4\x2c\x23\xd2\x1a\x75\x74\xf8\x68\x9b\xeb\x92\x83\x34\x74\x11\x28\x58\x4a\x32\x4a\xb0\x2c\x49\x46\x87\xd1\x50\xad\x3d\xca\x4a\xa7\xd8\x68\x72\x93\xcf\x25\x1f\x9d\xcb\x85\x46\x70\x4d\x36\x63\xb5\x77\x4a\x9d\xa0\xe1\xe5\xf8\xe8\xf4\x02\x7b\x25\x26\xd0\x75\x4b\x19\xb4\x52\xf6\x8f\x4e\xa3\x7e\x08\x2f\x71\x2d\x3e\xc9\x58\xff\x51\xcd\xb2\xeb\x75\xcd\xe6\xdd\x5f\xd9\x94\xdf\xa8\xa6\xd5\xba\xac\x3a\x7d\xee\x30\x6e\x1d\x19\x96\xd2\xb2\x54\xa7\x6d\xe4\x62\x25\x8b\xd2\xd1\x3a\xe0\x59\x47\xad\x36\xf4\x91\xb7\xc0\xdc\xcf\xfb\x72\x04\x03\xb8\x62\x33\x4f\xee\xe9\x7d\x98\xe6\x0f\xdb\x71\xa8\xed\x27\xb2\x84\xd4\x2d\x15\x42\xbf\xa5\x6c\xef\xc6\x23\xda\xd8\x46\x54\x58\x89\x19\xcb\x87\xda\x9c\xdd\xb6\x54\xa3\x6d\xf4\x74\xee\xf5\xd2\xf6\x9a\x7d\xb1\x80\xae\x2b\x0d\xdc\x64\xc3\xc0\xbd\x1d\x52\x69\x66\x4f\xdb\x96\xcc\xcb\x85\xeb\xca\x69\xdb\x24\x41\x24\xba\x02\x67\xbe\x5f\x93\xc4\x1a\x0c\x0f\x87\x92\xd2\x1e\xb3\x04\x2f\x47\xa1\x3f\x8b\x66\x30\x92\x04\xe9\xba\xcb\x96\xd5\x58\xee\xf0\xdc\x53\xeb\xb4\xf4\xbe\x8e\x04\xda\x47\xde\x54\xf1\xd6\xa7\xab\x84\xd1\x54\xe6\x0c\x1f\xcd\x39\x13\xcc\x3a\x12\xa4\x39\x1b\xad\x35\xec\x00\x18\x3d\x5a\xec\xf1\x4f\xa6\x6d\x24\xb7\x95\x0b\xf2\x92\xcc\x81\xd9\xda\xbe\x3d\xfa\xe7\x70\x87\xa1\x78\x25\xd9\xad\xa5\xbb\xf4\x42\xb8\x6a\x62\xb4\x25\xeb\x7a\x54\xd6\x90\x24\x7a\xf6\x07\xcc\x1f\x4f\x70\x9e\xf6\xb2\xc6\x70\xb1\x6e\xcc\xd8\xde\x96\x64\x5b\x87\x67\x18\x63\xe5\x72\xdf\xec\x63\x00\xd1\x13\x70\xb7\xd9\x5a\xb3\x0f\xdb\xc6\x74\x1b\x4c\x1b\x48\x25\xb4\xdf\x78\x19\x1c\xe9\x96\x0b\xd9\xe0\x5b\x8f\xaa\x75\x2a\x94\xab\x74\xbb\x67\x62\xd4\x2d\x43\x8b\xa5\x4c\xbb\xee\x47\xb9\x45\xf6\xf1\x05\xc8\x04\x7e\x58\x27\x09\xb1\xec\x3a\xa5\xce\xef\xcb\x5c\x64\xd5\x48\x86\x91\xf7\x28\xcc\x70\xef\x1b\x16\xb8\xee\xda\xb7\x90\x8a\x59\xdf\x24\xc9\x1c\x09\xd4\x6f\x15\xcd\xff\x20\xc9\x64\x98\x6d\x90\xcc\xd6\xb6\x94\x3c\x29\x83\x0a\x4b\x23\x25\xbe\x92\xaa\xfa\x1a\xd9\xb4\x9a\x12\x34\x31\xf3\x64\xd0\x61\x59\x53\xda\x46\x91\x9b\x5d\xd4\x6e\x58\x93\x46\xad\x51\x94\x17\xc3\xe3\x13\xd7\x7d\x31\x2e\x63\xd8\xf0\x84\xaf\xe3\x32\x6e\x41\x51\xe7\xf7\x08\x0e\x87\xd2\x8f\x90\xe0\x12\x8e\x86\x51\x18\x3e\x97\xfc\xf1\x28\x3a\x3d\x96\x0f\xa7\x51\x00\x2f\x03\xb5\x10\x14\x98\xc8\x0d\xe9\xc5\x65\x70\x5e\xf4\xfb\xd0\x23\xf8\x6e\x27\x40\x2f\x71\x30\xca\xb1\x97\x5f\x5c\x1c\x41\x9f\x44\xed\x80\x93\x1b\x7a\x47\xa6\x34\x61\x73\x92\xb6\x23\x4e\x6a\xf8\xaf\xbc\xbc\x8d\x45\x35\x5f\x34\xfd\xa9\x38\x6e\x5a\x26\x64\x41\x6b\x87\x10\x80\x7b\xed\x41\x35\x53\xac\xd4\x53\x4c\x50\x58\xc7\x14\x6b\x17\xfa\xe7\x4e\xb1\x69\xbe\xbc\xda\x3a\xc5\x5a\xcd\x7f\x8b\x0c\xd9\x5d\xbb\x2d\x48\xf6\x36\xa2\xe5\x05\x16\x04\x39\xca\x33\x58\xb6\xd9\xae\xd6\x67\x57\x67\xf6\x2d\x56\x65\x26\xad\xca\x4c\x59\x95\x99\xe0\xba\xff\x3c\xab\x72\xca\x48\xf9\x2d\x46\xe5\x0d\xd7\x4b\xcb\x9a\x6c\xa9\x9b\x6b\x91\xf3\xb5\x2b\x66\x7f\x99\xd5\x62\xdc\x54\xb7\xdf\xd8\xff\x6b\x66\x63\x2b\xae\x59\x6c\x5b\x1a\xe4\x62\x09\x47\x5b\x0c\x9d\x7a\xf7\xad\x62\x66\xd2\xb2\xa5\x2d\x5a\x6c\xe6\xdd\x7b\xe9\xb6\x41\xab\xaa\x6b\x2f\x85\x55\x25\xe5\xc2\xb4\xaa\x0e\x4f\xd5\xef\xd1\x50\xbf\x1f\xaa\x5f\xa5\x28\xa4\x55\x75\x62\x3e\x9c\xe9\x5f\x9d\x7e\xf8\x5c\x7f\xd7\xef\x67\x27\xe2\xb7\xe5\xc5\xf4\x4e\x74\x65\x52\xaa\x4f\x85\xe2\x79\xbf\x83\x49\x14\x56\x55\xe6\xba\x82\x20\xbe\x81\x81\x17\x38\xb7\xd7\x56\xa1\x13\x4b\x12\x4b\x15\x5f\x96\xf6\xcb\x54\x3e\x7e\x23\x08\x4a\xbc\x33\x1c\x52\xa1\x4d\xd7\xf3\x64\x2d\xfd\x10\xda\x85\x95\xec\xf9\x14\xf7\xd0\x4d\xa6\x96\x49\xf7\x46\xbc\x99\x90\x3f\xa9\x90\x27\x76\x39\xa9\x8f\x37\xe2\xac\x61\x5c\x82\x96\x5a\x82\x31\xe6\xf0\x81\x28\x89\x6f\x8b\x6f\x5f\xcc\x12\x96\x2d\xe9\xca\x02\x35\xd7\x95\xc9\xfd\x94\x4d\xe0\x4e\xd2\xd6\x01\x96\x5a\x0e\x5e\x11\xd7\x95\x1c\xb5\x90\x9b\x6a\x15\x47\x55\x39\xfb\x25\xec\x1a\x26\x88\xe6\x92\x22\xbd\xbc\xed\x93\xec\x86\xb6\x2b\xce\xc5\xb1\xdb\xeb\xf5\x0c\x59\xc8\x48\x2c\x49\x31\x8b\x86\x54\x66\x52\x3c\x15\x6c\x50\xfa\x18\x04\xef\xf1\x7e\x93\xee\x6d\x15\x5a\xd6\x6c\x41\x94\x1e\xbf\x11\x80\x30\xea\xca\x50\xbf\xa9\xd9\x6c\x6c\xde\x0d\xd7\x29\x6f\xf2\x65\x3a\x95\x96\xd9\x1b\xf2\x85\x3a\x24\xbb\x37\x4e\x38\x69\xbf\x51\xc1\x6c\xbb\x18\xb5\x6a\xdb\x86\x52\x06\x6e\x25\xc4\x4b\xd7\x55\x9e\x11\xbb\x22\xb5\x95\xb2\x57\x6f\xa5\x14\x52\x2c\x18\x01\x03\xb5\x5a\xb6\xeb\xdc\xaa\x56\xd7\x35\xf3\x49\x26\x0a\x7c\xe9\x80\xd9\x56\x48\xb2\xec\x93\xdc\xef\x39\xcb\x0b\xa7\x77\x31\x92\x27\x46\x48\xe5\x57\xf7\xf4\x8a\x3a\xf5\xcc\x34\x07\x47\xa8\xfa\x14\x07\x4c\xb1\xb6\x96\x74\x9d\x69\x94\x5e\x2c\xce\x53\x73\x98\xc7\x6c\x3d\xd7\x38\x8d\x61\x7d\xae\x51\x83\x8e\x87\x66\x54\x9b\xdd\x61\x56\xe0\x89\xde\xb3\x2e\x4d\x56\xdf\x8c\x6c\x43\xcf\x72\xe6\x37\x3e\x64\xb5\x03\x60\xac\x3a\x56\x55\xc0\x1c\xb8\x08\x62\xd5\x9c\xb4\x0b\x3d\x99\x6f\x2c\xf3\xc5\x68\x63\x1c\x66\x32\xef\xda\x28\x80\x27\x47\xc1\x6c\x8f\xdd\xef\x1c\x8d\x7d\x7f\x66\xf0\xdf\x39\x22\xb3\x4d\x9c\x8e\xbc\x2d\x38\xfd\x03\x44\x6b\xc7\xe9\xea\x06\xa5\xf5\x7f\x4a\xa5\xb8\xe2\xb4\x76\xf9\xd6\xa6\x17\x19\x67\x51\x87\x68\x28\xa9\x8e\x93\xeb\x56\x6e\xd0\x6c\x30\x7d\xda\x5f\x9b\xa4\x79\x49\xa5\xc3\xd6\x9e\x2b\x6a\x9b\x48\xcf\x9e\xc5\xbf\x35\x4e\xe3\x9f\x37\xa3\x7a\xd6\x38\x97\x5e\x94\xea\x60\x7c\xe5\xeb\x5d\x0f\xc6\xa7\x7a\x1b\x4b\x1d\xf2\x8d\x1f\x56\xb6\x3c\x81\x1f\x56\x4a\xc5\xd8\x1a\x22\xe4\xba\x9e\x25\x2e\x6c\x8d\x28\xec\xb5\x8c\x1d\x97\x81\x58\xb3\x65\x38\x0d\xd4\x96\x1c\xb2\x5b\x1c\xd0\xa6\xdc\xd6\xc4\xbb\xec\x10\x36\xa2\x84\xc3\x71\x8c\x36\xa3\x5b\x6c\x11\xcb\x44\x34\x5f\x84\x26\x94\xa1\xde\x4e\x20\xc5\x3a\x29\xc5\x75\x19\xd9\x6c\xdf\x62\xe6\xa8\x4a\xc0\x9f\x08\x07\xd5\xb1\xa0\x7f\x24\x5c\x49\x45\x7e\x6a\xce\x21\xd7\xef\x56\x20\xe8\x9f\xc3\x23\x33\x71\x75\x8f\xa3\x70\xa5\x2b\x95\x26\x3a\xcd\xb3\xde\xa3\x0c\x8e\xde\x8f\xb3\x58\x69\x39\x30\x7a\xa3\x78\xbb\x9a\x51\xb5\x5a\xd2\x60\xbb\x96\x59\x57\x16\xb1\x05\xb5\xc4\x62\x8e\x8b\x90\x32\xdd\xb6\x08\xe1\xed\x99\xfc\x70\xb7\x6c\x43\xd8\x8a\x50\xc6\x87\x96\xe4\x0c\x23\xb2\x4e\x33\xa5\xd4\x8d\xe6\xa4\x58\x8f\x42\xfe\xb5\x16\x47\x54\x47\xfa\x21\x3a\x32\x6e\x04\xab\xbf\x1b\xd3\xd8\x75\x97\xfa\x64\xcd\x16\xfe\x73\xd4\x9e\xa0\x32\xa6\x36\xcb\xb3\xfe\x8b\x0f\x2f\xdf\xbc\xb1\x82\xa1\x55\xe0\x3d\xcb\x38\x2d\x16\x05\x95\xce\xef\x52\x2a\x25\x66\x4b\x4f\xbd\xf5\x6b\x3d\x7c\x72\x8b\xce\x79\x74\xb2\xc3\x38\x3c\x81\xba\x8e\xd0\xba\xbe\x99\x82\x9b\xfa\xa5\x3c\x48\xa7\x26\x9a\xc6\x57\xdf\x42\x72\xc3\x43\xff\xa6\xb7\x95\xa9\xe3\x00\x54\x04\x2f\x35\xf1\xfc\xb4\x9e\xf3\xae\xab\xc2\xa9\x1f\x3b\xa8\xd3\x1c\x82\xfa\xe8\x67\x8f\x6a\x6b\x2c\x92\x67\x94\x62\xbc\x7e\x7a\xa9\xc8\x52\x1f\x50\x26\x24\xf3\xbd\xe6\xb8\x02\xb5\xbf\x51\xc7\xa6\x9a\xe3\x05\x03\x7d\x4a\x90\x3a\x17\xd5\x75\xbd\xac\x19\x06\x86\x3e\x78\x19\x02\x82\xdf\x3b\x57\xf7\x5c\x7a\xb9\x05\x67\x22\xda\xbb\xcd\x32\x47\x0e\x87\x14\xf2\xd4\xc8\x08\xf0\x02\xa0\x22\xba\xb3\x8e\x00\x66\xcb\x54\x0e\x33\xdb\x1a\x8e\x43\x94\xd9\xce\x70\x75\x3c\x61\x93\x74\x91\xd5\x78\x38\x87\x3f\x7b\x99\x75\xe4\x42\x4d\x51\xcd\x78\x7c\x67\x94\xca\xa7\x0e\xbd\x70\xdd\x2f\x39\x9b\xca\xf3\xf2\x33\x79\x72\x20\x47\x2a\x74\x49\x21\x8d\xe1\xbf\xc9\x33\x1c\xf6\x5a\x67\x38\xf5\x9a\x33\x33\x4c\x0c\x5f\x7d\x8e\x9d\xda\x95\xc4\x36\x76\x25\x71\x8f\x8d\x8b\xd8\x22\x97\x1f\xec\x93\x24\x14\xed\x88\x56\x02\x6b\xbf\x99\x3a\x2e\x15\x5b\x09\xf5\xd5\x35\x41\xdc\x3e\xaa\xa4\x09\x33\x31\x06\xc7\x9a\x70\x59\x66\x11\x35\x72\xae\x96\xdc\x99\xe5\x4b\x79\x4b\x4f\x41\xdb\x17\xbe\x98\x3b\x47\xbe\x5b\xbf\x9d\xe4\x87\x47\xae\x17\x69\xe9\xef\xec\xd1\x6b\x15\x78\x7d\xad\x82\x8d\x70\x26\xcf\xed\xab\x11\x8e\xf4\x80\x75\x1c\x69\xc1\x20\x5c\x75\x5d\x7f\xd2\x79\x2e\xc6\x0f\x7f\xee\x5c\x0c\x79\xfe\x40\x74\xf2\x47\x8f\xc8\x38\xf9\xd6\xa3\x10\x9a\xdd\x70\xcc\x3e\xbb\xb8\x39\x2b\x43\x6f\x40\xbe\x5a\xce\x66\xb4\x30\x27\x62\xd4\xf3\x33\xb3\xf6\xde\x32\x73\x42\x45\xba\x9c\x67\xb8\x58\x31\x6b\x47\xd5\x35\xe5\x1f\x32\xb6\x58\xd0\xae\x1b\x28\x6a\x93\x8b\xf4\x35\x59\xcd\x41\x4b\xe4\x54\x12\x20\xa6\x55\x75\x84\x24\x93\x7b\x7e\x2c\x2f\xae\x40\x05\x6e\x81\x74\x5e\x5c\x06\xae\x2b\xcf\x8c\x01\x93\x60\x52\x4c\xb2\xff\xf9\x6f\xfb\x84\x03\xd0\x9c\x2d\xd3\x34\x24\x19\xc4\x0b\xee\x15\x7d\x13\xd6\x5f\xf4\x71\xd8\xee\x6b\xbf\xb8\xe4\x07\xc3\x7e\x08\x1f\x18\x06\xce\x60\x30\x70\x00\x2a\x7c\x7c\x6c\x79\xa5\xf4\x79\x45\x6d\x78\xc8\x85\xdd\x90\xe1\xc2\x7f\x10\x40\xa2\xc1\xf3\x88\x98\xd5\xfd\x56\x4b\x06\xbc\xbc\x06\x8f\xf4\x6b\xf0\xcc\x49\xe2\xd8\xae\x54\xf1\xe8\x02\x11\xc1\x3c\xed\x53\xc4\xa1\xcf\xfc\xd2\xcf\xfd\x8e\x03\xc6\xfd\x35\xa4\xf8\xac\xbe\xb7\x00\x7c\x02\x2b\xc4\x76\x3a\x2d\x04\x65\x18\x34\x67\x84\x18\x62\x13\x2c\xd0\xc7\xfb\x2c\x13\x92\x51\x73\x9e\xc8\x3e\x70\xf6\x21\xca\x7c\x0c\x08\x57\xeb\x3c\xd0\x27\xad\xc8\x6d\x4e\x21\xf4\x01\x72\x14\xd9\xd5\x5f\xd4\xab\x2f\xe4\x8b\xaa\xf2\xf4\xe9\x24\x0d\x15\x7a\x52\xc4\x17\x55\x46\xa2\x8b\x42\xdb\xb2\x0f\x16\x61\x6b\x33\x75\x15\xa3\xe7\xff\xc4\x43\x46\xd4\x3d\x56\xcd\xd4\xcb\x5b\x06\x48\x3c\x6e\xae\x2b\x19\xb0\x2c\x49\x97\x53\x3a\x98\xe5\xc5\x2b\x92\xdc\x78\xad\x9b\xc7\x32\x6c\x4a\xae\x20\x44\x74\xcc\xe3\x47\xf2\x75\x24\xcb\xf6\xb8\x54\xdb\x6b\x7b\x06\x57\x36\x9c\x46\x2d\xd6\x82\xb0\xaa\x5f\x1f\xb1\x44\xf5\xcb\x8c\xa5\x9c\x16\x9e\xd7\xc5\x05\xd7\x8e\x6c\x92\xe7\x20\x37\x6b\x0f\xa9\x2f\xb5\xd0\xbd\xc3\x75\x3f\xab\xca\x9c\xdf\x6f\xac\x12\x96\x81\xa2\xf9\x68\x54\x57\xdc\x9c\x60\xba\x59\xb2\x1b\x17\xca\x31\x9d\x93\xe9\xbf\xcb\x1e\xb6\x2c\x32\x26\xb9\x7d\xd8\xe1\xc7\x66\x37\xb3\x10\x37\xf5\x69\xb9\x62\x0c\xcd\xe2\x56\x47\x02\x0a\x35\x58\xef\x8f\x51\xc7\x19\x38\xe6\xc4\x03\xad\x8e\xb3\xec\x5a\x7c\x97\x81\xf4\xa2\x86\xd2\x08\x34\xf5\x1e\xd1\x01\x90\xf8\xd5\x44\xdc\x3e\x36\x01\xe7\xea\x24\x20\x60\x1a\x04\x68\x1c\xaf\xe5\x35\xb7\x26\xd4\x79\x0d\x82\x3a\xf2\xea\x43\x16\xec\xd3\xc2\x05\x05\x4a\x92\xc2\x0f\xaa\xa3\xd1\xc3\x0a\x19\xdf\x8e\x78\xd6\x41\x56\xe2\xd1\x18\x5a\xe4\x4d\x79\xf6\x3a\x02\x1f\x32\x6d\x8e\x31\x26\x18\x9c\x35\xf7\x65\xe8\x14\xaa\xc2\x5a\x70\x80\x38\xae\x77\xac\x1b\xc1\x85\x5e\xf0\x73\x2a\xf7\x01\x9b\x2f\x63\xda\x10\x37\x83\xeb\x17\x67\x74\x1f\x30\xb1\x8e\x13\xb8\x22\xe6\x92\x2e\x1d\x20\xae\x8f\x43\xea\xc0\x80\x39\x5e\x7c\x1d\xb4\xfa\x38\x6f\x8a\xeb\xca\xec\x1e\x08\xd9\x48\xe9\xa1\xfa\x98\x6f\xda\xfa\xd6\xca\x1a\x9a\xac\x9d\x07\x36\xff\xbd\xc8\xb3\x6b\x27\x93\x97\x28\x49\xa2\x32\xe5\xa4\x45\xea\x83\x3e\x2f\x43\xc2\x6f\x1d\xb8\x29\x94\x61\x8a\x33\x73\x69\x94\x50\x4f\xb9\xf5\xca\x21\xea\xd1\x01\xfd\x42\x8b\x7b\xaf\xeb\x16\x43\x6a\x1f\xcb\x4b\x56\x70\xed\x1c\xdb\x0f\x0b\x9a\x28\xaf\x8b\x21\xf5\x72\xb9\xa0\x85\x26\xf7\xd2\xf1\xa4\xd6\xa2\x65\x40\x05\xa2\xde\x0c\x0e\x9b\x8d\xea\x6a\x1e\xb5\xbe\x0e\xd4\x26\xe6\x1e\xdf\x15\xb4\x62\x07\xd0\xe4\xc1\x0b\x6a\x96\xb5\xe0\x12\x64\xff\x18\x54\xd6\xb7\x81\x65\xf3\xa2\x5f\x1d\xe2\x3d\x68\x26\x15\x51\x64\x26\x55\xc4\x57\xb6\x6c\x88\xc9\x0e\x22\x9e\x75\xef\xd8\xe9\x8e\x8b\xca\xa0\xbe\xd5\x70\xcf\x3a\xfd\x8a\x7e\x75\xb2\x06\xa8\xb1\xbe\x6f\x4e\x10\x41\xbc\x52\x77\xbb\x0d\xd6\xaf\x64\x53\xb7\xa0\xad\x62\x74\xf6\xa7\x5a\x6e\x66\x51\x17\x0c\xed\xe3\xb2\xe2\x06\x59\x63\x55\xa3\x40\xc0\xc1\x6f\xe5\x41\x73\x29\x29\x44\xed\x2f\x05\xbd\xa6\x77\x8b\x8d\xe4\x86\xca\xbb\x3b\xd8\x91\x33\x0a\x4f\x51\x47\xcd\x51\x78\x86\xba\x41\x89\x86\xf2\x7a\xb9\x0e\xd9\x3a\x0c\xfe\xe9\xa3\xa5\xae\x83\x8c\x91\xe1\xe7\x2d\x0c\x71\x36\xa7\x25\x27\xf3\x35\x3c\xa8\x4d\xf7\x8f\xa1\xf5\x8a\x65\xa4\xb8\x6f\x97\xc8\xe7\x64\xad\x8e\x05\x61\x72\x83\x9a\x95\x54\x52\xbe\x05\xad\xba\xea\x28\x3c\x42\x6b\xc0\x44\xc3\x21\x6a\xb7\x16\x0d\xad\x4c\xaa\xb5\x68\x78\x8c\x5a\xad\x45\x43\xab\xf2\xa6\xb3\xd1\x50\xea\x38\xfa\xbe\x40\x81\xf7\x5d\x6f\x32\x7d\x0a\xef\x9d\xc8\x2a\x79\xb1\x8e\x84\xdf\xd7\x90\x2d\x30\xf7\x24\x56\x54\x6f\x43\xd4\xaa\x23\x1a\x9e\xa0\x56\x2b\xd1\x50\xf6\xe4\xe9\x7b\x06\xff\x08\x05\x35\x37\x58\x3e\x42\x45\x99\x3a\x96\xce\x26\x91\x3c\x5f\x4b\x61\xca\x30\xd6\x24\xcc\xd2\x9c\x6c\x25\x07\x51\x4d\x14\x5a\x83\xaa\x4a\x45\xa1\xd5\x77\x51\x73\x14\x5a\xa5\x24\x38\xd1\x50\xde\x31\x69\xdf\xd9\x28\xb0\xb3\xf3\xa5\x7c\xb6\x48\xcd\xf0\x18\x08\x49\x03\x20\xa0\x3d\x1e\x00\x81\xda\x9d\x02\x10\x68\x4e\x96\x07\x08\xd4\x07\xc9\xcb\xec\xfa\x64\x75\x20\xf7\xe6\xd7\xa7\xc2\x03\x04\xec\xeb\xba\x40\x8c\x0a\x3c\xae\xfd\x6d\x56\x6c\x79\x1d\x70\x1e\x5b\xa3\xb4\xa9\xde\xea\xc3\x4f\x8d\x65\xae\x7d\xb6\x68\x97\x64\x2e\x85\xd4\x0d\x11\xda\x5a\xed\x32\x6f\xff\x17\x6d\x55\xce\x25\x1e\xa4\xbe\x24\xf4\x24\x56\x3a\x73\x2a\x8d\x2e\x92\x9f\x31\xae\xb7\x42\x80\x7d\x5f\xea\x51\xf5\x92\x38\xd8\x6f\xc4\x4c\xb9\x43\x53\x3d\x4a\xf9\x9f\x6b\x4f\x5a\xeb\xba\x2d\x81\x59\xcc\xcd\x93\x15\x3a\x66\xd6\xe7\x5e\xb0\x5a\x3b\xa2\x12\xf3\xe6\xd9\x8e\x35\x6b\x56\xf4\x95\xb9\xc3\xce\x0c\x11\xe6\xad\x8b\x03\x1a\x08\xea\x81\xc3\xdc\xbe\x1a\xc0\x06\x51\x8f\xa6\x04\x52\x3f\xdb\x19\xec\x21\xc6\xbc\xf5\xda\x3a\x4a\xcd\x1a\x7a\xec\xe5\x98\xb7\x52\x74\x4e\x82\x1f\x56\xc6\xbf\x95\xbb\xae\x3d\xa4\x79\xd7\x90\x52\xf8\x90\xdb\x02\x6c\x6b\xb0\xc9\xb8\xbe\x52\x43\x48\xc5\x50\x0e\x0c\x81\x48\x52\x40\xd1\xb6\x06\x88\x81\x79\x84\x12\xa4\xaf\xd2\xe8\xcd\xda\xf3\x28\xe8\xa1\xac\xe5\x22\x7d\xe0\xd2\x26\x21\x28\xa1\xc5\x96\x53\xc4\x74\x7c\xfa\xb8\x55\x39\x1d\xf7\x78\x71\xff\x20\x27\xa5\xb2\x28\x00\x38\xf8\x41\x3e\xac\x12\x22\x84\xe7\x1c\x3e\xac\x94\x4e\xdb\x30\x17\xa9\x06\x83\x17\x3f\xbc\xfc\xf1\xd5\xeb\xbf\xfe\xeb\x9b\x7f\xfb\xf7\xb7\x3f\xbd\x7b\xff\xf3\xff\xf7\xb7\x0f\x1f\x7f\xf9\x8f\xbf\xff\xff\xbf\xfe\x27\xb9\x4a\xa6\x74\x76\x7d\xc3\x7e\xbb\x4d\xe7\x59\xbe\xf8\xbd\x28\xf9\xf2\xcb\xd7\xbb\xfb\x7f\x04\xe1\xf0\xf0\xe8\xf8\xe4\xf9\xe9\x99\x7f\x80\x27\xd9\xa4\x00\x6b\xdc\x91\x79\x1d\xfb\x86\xf5\xb2\x85\x1e\x04\x4e\xa2\x7a\x1e\x6b\x42\x8e\xd6\x74\x43\x13\x6c\xd0\x84\xc3\xd4\x7e\x49\x69\x5a\xad\xcf\xa0\x23\xb8\xb0\xee\x4c\xcd\xcf\x33\xdf\x87\x2a\x0e\x9e\x63\x52\x0f\x1a\x35\x86\x1b\x19\x8c\x77\x72\xa4\x62\x4c\xf8\x45\x60\x45\xef\xf8\xf8\xa4\xde\x8c\xfd\xfd\x29\xc6\xc1\x0a\xd5\xd3\x26\xda\xb4\x9c\x30\x09\x45\x7d\x61\xd0\x78\x52\x4c\x32\x1c\x1f\x5c\x23\x20\x77\x9c\x9b\xa3\x76\x50\x89\x0b\x7d\xdc\x92\x3e\x9c\x99\xe3\xe0\x9c\x5f\x90\x73\xee\xfb\x90\x7f\x7f\x84\x71\xe0\xba\xdc\x75\xbd\xa5\xde\x99\x71\x79\x19\x9e\xb8\xc3\xe3\x63\x88\x9a\x94\xd3\x56\xc2\xf0\xf8\xd8\x4d\xe4\xe1\xfc\xc9\xc5\xc5\x49\xd5\xdc\xd0\x90\x9b\x6e\x5a\xd7\xd1\x04\xea\xd8\x37\xf2\xfd\xd1\xb3\x13\x38\xfa\xf6\x56\x22\x79\xe4\x24\x6b\x95\x0c\xd6\x4b\x0e\x65\x02\x8c\xc2\xa1\xb2\xe8\x36\x5f\x8e\x54\xd6\x6c\x94\xc9\x53\x1e\xf5\x8f\xb7\x84\x91\x9a\x37\x4b\x18\x2d\x57\xa8\x66\x25\x51\x07\x7b\xca\x5c\x37\x1b\xb0\x52\x51\xb4\x47\xe1\x0a\xd5\x8c\xa5\x63\x5c\xd4\x3d\xba\xfa\xac\x68\x6a\x8d\x42\x07\xf2\x0f\x6b\xe4\x33\x1f\x97\xe3\xfc\xf2\x32\x3c\x75\x4f\x0e\x63\x54\xbf\x0e\x5b\xaf\x27\xcd\xdb\xc9\xa1\x9b\xc7\x10\xa9\xa0\xce\x53\xe8\xd3\x31\x8f\x5b\x28\xcf\x30\xf9\xfe\x10\x8e\xfe\x68\xcd\x91\xf4\x9b\x58\xc5\x83\x56\xfe\x23\xeb\xed\xe2\xc2\xaa\xeb\xe4\x28\x56\xb1\xfb\x99\xd5\xab\x61\x2b\xf7\x51\x2b\x77\x53\x0c\xb1\x55\x2d\x68\x58\xca\x51\xb8\xeb\xb9\xbe\xb5\x41\x6d\x5d\x56\xea\xe2\x06\x42\x6a\xf9\x73\xbc\xa0\x1e\xdc\xfa\x9c\x56\x7d\x4e\x16\xe0\xc5\x92\x9a\xcb\x86\x3e\xda\xcf\x7f\xfb\xe5\x95\xba\xeb\xa8\xaa\x8e\x4d\xe6\x19\x49\xcb\x3a\xc7\xeb\xd6\xcb\x8b\xb7\x1f\x74\xfe\xc7\x58\x81\xf6\x74\x6c\x6d\xf0\x69\x0a\xaf\x8f\x00\xfb\x41\x5d\xde\x21\x0f\x08\xdb\x7e\xd4\xae\x35\x0d\x1e\xd2\xfc\x2b\x2d\x12\x52\x76\x4e\x20\x3a\x52\x10\x46\xba\xb3\x2b\xb4\x5c\x2c\x9e\xcc\x2e\x01\x8f\x34\x06\x56\x28\x21\x73\x9a\x3e\x95\x5d\xd5\xae\xb0\xb7\x5a\x21\x7b\x51\x8f\x40\x0d\x1b\xe8\x24\xaf\x5d\x7d\x25\x1b\x26\x5d\x6b\x1d\x13\x74\xf6\x37\x7a\xfd\xea\x6e\xe1\x81\x4f\xde\x28\x1a\xf7\xfd\x78\xe4\x8d\xa2\xa0\x1a\x87\xfd\xb3\x78\x1c\xf4\xcf\x3e\xc7\xcf\xa0\x37\x8a\x26\x93\x81\x79\x13\x19\xc6\xf4\x55\x2c\x33\xeb\x93\x30\x47\x55\x9d\xc1\xef\xfc\xdc\xbc\xe9\x6a\xbc\x51\x14\x8d\x83\xfe\xb1\x4e\x85\x7e\xd3\x82\xca\x3c\x99\x0c\xbc\x51\xc4\xb2\x59\xf5\x46\xfc\xff\xee\x35\xac\x54\x52\x46\xb2\xea\x1d\x79\x57\xbd\x7b\xf1\x0e\xc2\xef\x00\xd4\x37\xfa\x1d\x7c\xb2\x5a\xa4\x07\xbb\xac\xad\x4a\xe2\xdf\x65\x3a\xad\x05\x0f\xb9\x6e\xcf\xeb\x15\xe6\x02\xcd\xaa\x02\x9f\x37\xae\xf6\x7a\x94\xf6\xad\x40\xa1\xda\x3e\x83\x41\x1f\x98\x03\xd9\xea\xa5\xf1\xb3\x5a\x14\x07\x3c\x7f\x2b\x28\x41\xdd\x0f\x0d\xc7\x41\x3c\xea\x87\x51\xa8\xae\x2e\x00\x7e\xdf\x72\xb8\x8c\x83\x18\x5e\x0a\xd6\x2c\xa4\xf5\xc6\x85\x8d\x44\x96\x19\x90\x67\x33\x48\x16\x37\xd2\x57\x9b\xff\xfc\xfe\xc3\x9b\xd6\xd5\xe6\xd1\x63\x77\x9e\x47\x60\x90\x91\x4c\x55\xf1\x8e\xbc\x8b\x78\xe3\x00\x8f\x80\x0c\xd3\xf7\xf8\xa0\x5c\xa4\x8c\xcb\x84\x6e\x19\xb2\x18\x2c\xb3\xf2\x86\xcd\xb8\x27\x4f\x38\x7d\x2d\xb0\xef\x51\x14\x06\x4a\x66\xe4\x72\x83\x51\x88\x8a\xee\xd2\xdc\xc7\xf4\x19\x43\xec\x19\x3e\x09\xa4\x09\xff\x19\x87\x51\xf6\xcc\xaa\x8a\x8b\xaa\x76\x64\x19\xaa\xa3\xbb\x71\x0c\xd7\xf5\xe8\xf7\x61\x0f\x07\x55\x95\xad\x5d\x1f\xef\x51\xf8\xc8\xba\x5a\x7b\x07\x85\xf2\xc4\xca\x77\xe4\x9d\xc8\xab\xad\xb2\x5c\x99\x61\xad\x29\x6e\xee\x3e\x94\x68\x96\xb6\x57\x50\x33\x9b\xe6\xe3\xbb\x17\xef\xf4\xc7\x9a\xb5\x58\x1f\xc9\x3b\x50\x87\x1f\x3f\x36\xc2\x92\x2d\x6f\x87\x42\xd0\xcb\xa3\x50\xbc\x79\xf7\xfa\x71\x28\xde\x64\xb3\x0d\x28\xba\xae\xd0\xdf\x01\x8a\xfe\x93\x60\xf4\x9f\x84\xa3\xdf\x06\xa4\x6b\xdc\x4c\xce\x60\x10\xd4\xbe\x3c\xd6\xba\x9c\x3d\x80\x28\x37\x67\x0b\x8d\x58\x3d\x33\x81\x50\x9e\x07\x14\xc0\x88\xed\xc0\xb3\x6d\x63\x6a\x9b\x83\xef\xea\x93\x7b\x94\x83\x37\x5e\x8b\xa2\x75\x60\x7a\x73\xe1\xf1\xca\x76\xd2\x75\xe5\x78\xbe\xda\x81\x4f\xb2\x6c\x37\x2e\xb9\x45\x01\xb1\x94\x8f\x40\x1d\x82\x27\x34\x0e\xd6\xda\x09\x00\xfa\x40\x1f\xde\xa7\x2e\x26\x07\x3e\x50\x67\x02\xca\x24\xdf\x97\x17\xa1\x07\x92\x11\xc9\xf6\x88\xaf\x82\xb3\x9b\x8d\x73\x33\x0f\x5c\x19\x66\xaa\x0a\xe8\x18\x46\xdf\x3f\x27\x17\xec\x9c\x28\x4d\x07\x7c\xb6\x1b\x52\x37\x2d\x06\x40\x47\xba\x84\xf2\xa1\x01\xac\xc4\xf5\x35\x75\x4e\xe9\xba\xaa\x2c\x5f\x89\x32\x77\x1a\x96\xdd\x9a\xe8\x79\x72\x93\xf1\xda\x1d\x9b\x04\x42\x7d\xb5\x66\x55\x9d\x1c\x5f\x08\x19\x34\xbb\xc0\xcf\x83\xaa\x3a\x7b\x6e\xde\xc2\x60\x08\xb7\x02\x24\x43\x7e\xb6\x40\x50\x78\xeb\x6d\xef\xd4\xcf\xcf\x00\xb7\x50\xb2\x43\x53\x20\x52\x65\xea\x5d\x0a\xbd\x7c\xb7\xb6\x7b\x5e\xaf\x34\x8b\xaa\x3c\xb1\x03\x44\x9a\x0a\x0e\x3e\x79\x6d\xa9\xe1\x3b\x73\x8d\xb5\xb9\x62\x12\xc2\xed\x2b\x2f\xa6\xa8\xc0\xa1\xba\xf7\xc7\x3a\x00\xb3\x31\x57\x81\xcf\x40\xde\x37\x85\xd9\xc6\x72\x0c\x51\x4d\xa2\x4c\xac\xb7\x36\x89\xaa\x55\x9c\xcb\xf3\x69\xfb\xa1\x58\xd1\x64\x15\xf5\x42\x2c\xf2\x6b\xea\x65\xa3\x20\xd2\x74\x3c\x52\xf4\xca\xc6\x61\x3c\x2a\x9e\x35\x87\x7f\xd7\x37\xf8\xa3\x21\x8c\x14\x9d\x6d\xe4\x41\xe1\x09\x8c\x5a\x09\xa7\x30\x5a\xef\x4c\x04\x84\x3e\xb5\x75\x79\xce\xdb\xcb\xb3\xa8\xae\x59\x9c\x19\x0e\x50\x26\x70\xf6\x88\x5b\x5a\x2c\xce\x19\xca\xcc\xe2\x5c\x3c\x63\x6b\x70\xfd\xdf\x5a\x9a\xe9\xf7\xa1\xd4\x46\x7b\x1d\x2c\xbe\x25\xea\x2b\x43\x4a\xa7\x24\x2e\xe4\x17\x10\x5c\xc9\x70\x71\xc3\xfc\x05\xce\xfb\x1b\x69\xcd\x6d\xa5\x28\x4f\x38\x49\x9f\xa8\xae\x55\xf2\x54\xd6\xb6\x96\x64\x55\xa6\xf7\x31\x76\x56\xd7\x5a\x90\x56\xc8\xda\xf6\xf8\x44\xeb\x77\xad\xb6\xc2\x13\x21\x46\xfe\x22\xd6\x50\x25\x46\x0a\x68\xb6\x64\x69\xa0\x5b\x5f\xe4\x74\xeb\x00\xd9\xa6\xc5\x1a\xc1\xe3\x21\x02\x57\x2c\x03\xb1\xc6\xd0\xf8\x14\x81\x3c\xe1\x20\xae\x3b\x39\x0e\x03\x24\x2a\x01\x71\xab\x33\xe3\xf0\x04\x81\x1b\x7a\x07\xe2\xd5\x0e\x8b\xe7\x0e\xbe\xc7\xc6\xbc\x47\xcb\x45\xc1\xe6\x04\x40\x6d\xd8\x2b\x44\xf6\xda\x67\x56\x47\x24\x7e\x65\xd9\x54\xde\xff\x97\x61\xf5\x38\xd0\x05\x61\xcb\x0c\xf8\x98\xc6\xde\xb9\x76\xda\xde\xbc\x3f\xbc\x86\x8a\x8e\x28\xe5\x1d\x78\xc0\xa7\x3e\x80\x00\x31\x9c\x0d\xe4\xfc\xf2\x38\x7a\x28\x48\x76\x4d\xa3\x5e\x50\x5f\xa4\x05\x7e\x2e\xf2\xeb\x82\xcc\x25\xd7\x90\x9b\x4c\x5c\x57\x99\xe4\xaf\xf2\xe9\x7d\x1d\xc7\x05\x5e\xdd\x89\x09\x52\xb2\x3c\xfb\xc0\x09\xa7\xf2\x50\xff\x3a\xdb\x38\x88\x75\x51\x0f\xbc\x28\x8a\xfc\xab\xb9\x67\xb6\x29\xd5\xce\x4c\xeb\x74\x59\xae\xaa\xc0\x37\x96\xb0\x06\xa8\xbe\x15\x76\x8b\x3d\xd1\x42\x49\x51\xa3\x84\xd9\x28\x51\x8c\x5e\x2c\x48\x06\x29\x3d\x8c\x0b\x0d\xa1\xbc\x5a\xc1\x46\x4a\x55\x75\x22\xa5\xce\x66\x90\x52\x55\x8f\xe2\xa4\x95\x77\xad\x87\xae\xdb\x85\x93\xa7\x4a\x58\xf6\x72\x79\xed\x95\x07\x5e\x13\x96\xd2\xa9\xc3\xf3\x7a\x97\x8c\x75\x63\xa9\xb9\x4e\xbb\xab\xba\x05\x29\xc8\xbc\x7c\x8c\xfd\xeb\x70\xf2\x8c\xcc\xa9\x56\xc8\x3a\x2b\x91\xb8\x92\xd8\x45\xe0\x87\x34\x4f\x6e\x5b\x94\xf3\x78\x11\xd1\x97\x91\xe8\x85\xe9\xbf\x97\x23\xb3\xc8\x09\xd5\xd5\x0f\x11\x1f\x87\xb1\x8c\x35\x5f\xcb\x06\x74\xa7\x80\x6f\x17\x90\xd9\xe1\xae\xcb\x4a\xeb\x8e\xe4\x6f\xb2\x12\x3d\xcd\x94\x61\xc3\xad\xd6\x58\xd4\xee\x41\x0a\xdf\x64\x03\x6c\xc2\x00\xfe\x30\x3f\x61\x33\x4f\xef\xd3\xb0\x23\xa3\x1b\x0b\x21\xca\xf0\xc1\xe4\xc0\x1b\x5f\xb3\x79\xfc\xac\xbe\xe6\x84\x42\x69\x23\x96\x33\xe9\x40\x8a\x2e\x42\xa0\x91\x2d\x48\x61\x29\x13\xc3\x81\x4c\x40\xe5\xe5\x61\x5b\xb0\x3f\x90\x52\xd2\xd8\x5c\x62\xd8\x67\x96\xad\xa4\x9e\xeb\x8d\x2f\xee\x89\x39\xbf\x0d\x3e\x3d\xf0\x35\x88\x82\xa1\x5b\x00\x5a\xb6\x11\xd4\x01\x0d\x84\xc8\x32\x8b\x71\xc4\x76\x25\x30\x55\xe2\xcf\x91\x97\x66\xf2\x07\xf2\xce\x74\x79\x19\x85\x0f\x0e\x40\x13\x4f\x79\x9d\xe6\x57\x24\xd5\xb7\xcc\x5d\xcb\xed\x20\xf5\x19\x7f\x3a\x75\x2e\x53\xd9\x75\x96\x17\x54\xac\xe4\x3a\x99\x01\x88\xf8\x63\xa4\x3a\xdc\x3d\x36\xe4\x5b\x49\xb5\x59\x66\xb7\x52\xab\xed\x8a\xed\x18\x7e\xf8\xb0\xc5\xe1\x51\xc7\xc6\xd3\x4e\xf4\xd6\x03\x06\x1e\x45\xc3\xee\xa1\x1a\xbb\xe3\x60\x4e\x9a\x89\x5a\x1f\xb4\xf7\x94\x59\xbc\xb6\x32\x8e\x68\xf4\xb0\xea\xf4\x2d\x0c\x77\x8f\xc4\xf8\x06\x40\x65\x30\xcc\xee\xd6\x50\x70\x71\xa1\x0d\xf6\x86\xc1\x74\xc3\xba\x6b\x5c\xc4\xb7\xc0\x2a\xe3\x30\xfe\x20\xfb\x0b\x1e\xf1\x83\x84\x4a\x77\x03\xff\xa5\x7b\x55\xfb\x45\x64\x63\xda\x35\xf1\xce\x7e\xfe\xe5\xed\xdb\x27\xfc\x1c\xad\xf1\xdc\xe6\xab\x33\x18\xb4\x35\x96\x84\x64\x79\xc6\x12\x5b\xce\xaf\x71\xff\x5f\x60\x85\x3a\x9c\x17\xf5\x77\x09\x73\xa7\xc3\xa2\xce\x22\xc1\xef\x74\x52\x34\x59\x64\x2d\xdf\xe6\x98\x18\xee\xe0\x78\x6f\xfb\x21\xd8\xd6\x3b\x27\x8b\xc7\x39\xea\x2e\xd4\x92\xdb\x73\xb0\x09\x80\xf9\x36\x7a\x41\x59\x7d\x6e\xde\x38\x46\x4b\x4c\x8d\x63\x14\x65\x78\x69\x02\x7f\xf9\x45\x76\xce\x7d\x1c\xca\x8a\x72\xbc\x1c\x73\x75\xdd\xc3\xe6\x05\xfb\x52\xe2\x93\xab\x41\xbe\x76\x78\x05\x71\x58\xe6\xe4\x90\xcd\x3c\xa6\x33\x20\xa2\x0f\x77\x58\xb3\x96\xb0\x99\xd7\x2b\x5b\xab\xac\x54\xfd\x93\x5a\xf5\x27\x56\xd5\x89\x92\xef\x08\xdc\xba\xc8\x6e\xb2\xa1\x71\xdc\x3d\xb5\xbf\xd5\xc5\xd9\x35\xd4\xdf\x32\x90\x2a\x14\xef\x9f\x30\x92\x7a\xc7\x8e\x1e\x44\x62\xdd\x7b\x58\x07\x4a\x23\x35\xb4\x65\xe7\xd0\x16\xb8\x14\x43\xdb\x35\xaa\xac\xbe\x79\xc9\x1e\x18\x7d\x35\xb4\x1d\x6a\xd3\xdc\xcd\xd4\xe4\x24\x63\x1e\xe3\x71\x2e\xef\x3c\x93\x3f\x71\xbc\x75\xb8\x36\x3b\x3a\x8e\xf7\x5a\xdb\xd1\x11\xd1\x1d\xcd\xad\x8e\x92\xb5\x8e\x92\x8d\x8e\x32\x2c\xc0\x41\xc5\xda\x6d\x57\x28\x97\x40\x16\x02\x48\x26\x7f\xe2\xda\x85\x9f\x77\xd3\xc9\xee\xbe\xca\xdd\x97\x80\x92\xfe\xde\x41\x09\x7f\x96\xa2\x77\xb7\xc9\xef\xca\xbc\x76\xeb\x0b\xdf\x94\x11\xbe\x95\xa8\x0d\x47\x12\xec\x23\xb3\xd8\x47\x86\x38\xac\xb7\x10\x66\x63\x1e\x5b\xc7\x73\x7e\x33\x27\x78\x4c\x20\xd9\x3d\x14\xfc\x1b\x46\x98\x17\x1b\x6b\xfc\xae\x70\xda\x42\x9e\x0d\xe7\xee\x3a\x59\x3d\xbe\x6d\x27\x79\xed\xc3\xb6\xfe\xc0\xbe\xf7\xd8\xcb\x77\x1d\x7e\xf6\xad\x55\x8c\xd6\xde\xbc\x51\x34\xfe\xc8\xe3\x6a\xec\x4c\x26\x3c\xf6\x61\xeb\x63\x64\x37\xd7\x7a\x51\x6e\x7b\x95\xf2\x0c\x2a\xbf\xbd\xac\xe1\x99\xf7\x9f\x95\x37\xee\xfb\x31\x5c\x6f\xa6\x55\x1e\x8e\x20\x1c\x7d\xb7\xdb\x58\x35\x01\xd0\x7f\xc8\x9d\x6e\xce\x9a\x61\x46\x93\xab\x4f\xdc\x28\x4c\xca\x56\xb3\x7e\xfb\xd8\xab\x40\x1f\xe6\xbf\xd7\x4c\x19\x8f\x37\xf5\x43\xe9\x24\x6f\x2a\xaf\x2f\x8c\xdb\xb4\xb6\xfc\x48\x38\xad\x0d\x2d\x54\xa4\xa9\xdd\x1e\x19\xf6\xf9\x38\x8c\x51\x2e\x7e\x87\x71\x3f\x44\x44\x3c\x1d\xc6\xa8\xc7\xc7\x47\x31\xb4\x36\x5f\x88\x2a\x3c\xf1\x67\xf0\xcb\xc7\x97\x9e\x04\x55\x1d\xba\x5a\x8a\x12\x47\x31\x4a\xc4\xef\xb1\x10\x2b\x7c\x3e\x3e\x89\x11\x1f\x3f\x8f\x95\x4f\x69\x81\xc5\xb3\x56\x58\x03\x74\x08\xcf\x17\xe6\xfc\x8b\xc3\x73\xb8\xf0\x31\x08\xc0\xde\x02\xfb\x0b\xe3\xb7\xe1\xe3\x33\xa1\xf1\xce\xf0\x09\x3d\x7a\xe6\x9d\x04\xcf\x04\x94\x41\xec\x3b\xbe\xc7\xc7\x61\x18\x57\x55\xa0\x9c\x18\x52\x3b\xd6\x79\xfb\x33\x28\xcf\x89\xee\x86\x55\xa3\x75\x01\x21\x9a\xb9\x6e\x3a\x28\x29\xff\xc8\xe6\xd4\x4b\x07\xd7\xfa\x09\xf6\x67\x10\xa5\x2b\xd4\x44\xbf\x46\xa2\x8a\xed\x46\x94\x37\x1f\xde\x6f\xda\x51\xac\x09\x0b\x0e\xc0\xae\x61\xd5\x29\xbb\x3a\xf8\xad\xec\x0b\xba\xec\x9f\x9e\x5c\xd1\xe4\x74\x48\x82\xd9\xc9\x90\x3e\x27\xc7\x87\x94\xce\x8e\xc2\xe9\xd1\x11\x39\xa5\x47\xcf\x87\xcf\x07\xbf\x95\x6d\xba\x56\x31\xa4\xdf\x5a\x45\x14\xae\xe2\x15\x7a\x58\xa1\x71\x0c\x3d\x70\xa0\xf6\xbe\xd9\x3d\xdd\xd8\xcc\xad\x1b\xec\xd8\x4d\x3f\xcf\xa7\xcb\x94\x8e\xa8\x57\xd0\xdf\x97\xac\xa8\xb5\x6d\x01\x53\x92\x4f\xe9\x9c\x29\xd2\x83\x51\xb3\x97\xbe\x2e\xac\x74\x6c\xd7\x55\xbf\x03\x32\x9f\x8e\xd4\xa3\x37\xee\xae\x26\x46\x14\x46\xd4\x7b\x99\x4f\xe9\x4f\x32\x05\xae\xda\xe6\xc0\x16\x96\xe9\x40\xd5\xf6\x53\x3e\xa5\x1e\x10\xe8\x01\xc8\x5b\xdf\x74\xd6\xe2\x72\x93\xc9\x95\xe7\x01\x7f\xac\x22\xa8\x90\x8e\xa0\x42\x20\xcf\xc4\x9f\xd9\x0c\x20\x70\x4f\x4b\x80\x40\x96\x83\x78\xf0\x5b\xce\x32\x0f\xc0\xca\x03\xd0\x07\x10\x7e\x07\x10\x60\xb5\x29\xf3\x81\xe7\xb7\x34\x8b\xda\x5b\x3f\x95\x3d\x9e\x0f\x16\x94\xde\x7a\x92\xc5\x0e\xd4\x49\x8e\x53\x39\x35\xcd\x8b\x14\xbd\xff\x02\xd4\x76\xf9\x00\x8b\x02\x79\x59\x55\x07\x93\x52\xfb\x0d\xf9\xa0\xd4\x86\x19\x1d\x01\x2a\x32\xc8\x13\xd9\xcc\xfc\xe5\x83\xf2\x96\x2d\x3e\xe6\xaf\xb2\xa9\x07\x11\x48\xf2\xb9\x34\x75\xca\x98\xf8\xc1\x5c\x5a\xab\x0f\x3e\x79\xfb\xde\xf8\xd3\x7e\x5c\x4d\x26\x03\xf8\x6c\x7f\x54\x01\x6f\xfc\x09\xe8\x57\x30\x82\x07\x75\xb4\x81\x6a\x0d\x28\x20\x53\xc6\x69\x41\x52\xd7\x55\xe1\x34\xfa\xa4\x67\x0f\x5e\x66\x42\xd6\x7a\x99\xa7\x8f\xc0\xd0\x5d\x49\xf3\x2c\xcf\x4a\xe3\x83\x32\x4f\x3d\xa5\x38\x98\xfa\x84\xa0\x37\x10\x42\xb4\xc0\x8b\x7a\x52\x67\xb4\xf5\x42\x54\x77\xa6\xdf\xef\x37\xf0\x4e\xe9\xac\xdd\xd5\xc9\x40\xfc\xfb\x54\x86\xf2\x59\x7f\x52\xfa\x4d\x8e\x39\xe5\x04\xac\xda\xe8\x9a\x3c\x54\x93\x55\x35\x19\x57\x93\xd8\x42\xce\x83\x18\xa8\x51\x36\x60\x59\xca\x32\xfa\xb3\x10\xf6\x7d\x3f\x02\xab\xcd\xe4\x7e\x3f\x02\xe3\x56\xf2\x5b\x56\x72\xdf\x8f\xec\xd7\x7e\x1f\xa9\xc6\x15\xa2\x9a\x0f\x97\x81\xeb\xf6\x0a\xd7\x05\x08\x34\xb1\x03\x0e\x1f\x64\xf4\x8e\x0b\xfc\x6e\x14\x92\x6d\x76\x97\xda\x0d\xb5\x1d\x35\xd7\x39\x54\x4c\x75\x8d\x9b\x49\xf9\xcc\x9b\x54\xd5\xe4\x12\x4e\xca\x67\x35\x6e\x1c\x6b\x70\x03\xab\x9e\xb5\x72\x6e\x35\x79\x06\xc7\xa4\xff\x8f\xa0\x7f\x36\x19\x7c\xee\xc7\xfe\xe4\xea\x80\xd5\x08\xfe\x42\x0a\x46\xae\x52\xda\x1f\x02\x6d\x03\x6e\xf5\x50\x10\xa2\x55\x5d\x5f\x3a\xd9\x27\x83\x09\x8a\xfd\x49\x39\xfa\xae\x19\x28\xb5\xab\xb3\x1b\x45\x4f\x55\xe1\x8d\xb0\x87\xaa\x15\x84\x9d\x55\x99\x92\x4d\x6c\xce\x2d\xbd\xff\x9a\x17\x53\x60\x74\x20\x85\xb5\xb5\x36\x84\x58\x83\x26\xe3\x49\xfc\xb0\x72\x9f\xf5\xaa\xcb\x7d\xf0\xfd\xbf\xfc\xaf\x78\xfc\x69\x52\xee\x83\x28\xae\xc6\x9f\xf4\xc7\xbf\x58\x5f\xe1\xf8\xd3\x5f\xe2\x67\x02\x9e\x49\xf9\x2c\xf2\xbe\xab\x26\xa5\x00\x6a\xe4\x99\x31\x14\xa3\xa9\x07\x76\x6d\x72\x22\x40\x78\x3e\x07\x30\xda\x04\x26\x92\x23\x36\xf2\x5a\xc3\x6f\x46\x0b\x46\xde\x1a\x59\x34\x5c\x0a\x4c\x26\x82\xa6\x1a\x42\x91\x67\x7a\xac\x50\x29\xb2\x4a\xf7\xca\xa6\x71\xe6\x41\xd4\x15\xf5\x42\x54\xd7\x29\x5e\x14\xcc\x51\x80\xac\x51\xa9\xdf\x04\xed\x47\x01\xd2\x84\x24\xb2\x6b\x00\xa2\x5e\xb8\x12\x82\xbd\x3c\x5e\x48\x71\xfa\x37\x3f\xbd\xf2\x00\xa7\x77\xfc\xe0\xae\xaf\x18\xbe\xe2\xfb\x62\x89\xdb\xfb\x3f\x01\x00\x00\xff\xff\xe0\x81\xcd\x1b\x6e\xae\x00\x00") -func web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7JsBytes() ([]byte, error) { +func web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727JsBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7Js, - "web_ui/assets/codemirror/mode/ruby/ruby-61421add5f64c0fc261fe6049c3bd5d7.js", + _web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727Js, + "web_ui/assets/codemirror/mode/yaml/yaml-86bec82a0f62e7a53eef41d44a8e4727.js", ) } -func web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7Js() (*asset, error) { - bytes, err := web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7JsBytes() +func web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727Js() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727JsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/ruby/ruby-61421add5f64c0fc261fe6049c3bd5d7.js", size: 5265, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xbd\xe9\x7a\xdb\x38\xd6\x30\xf8\x73\x9e\xc7\xb7\x30\x7f\x28\x74\x8a\x26\x42\x48\x26\xe5\x25\x36\x6d\x58\x5f\x2a\x15\x77\xa7\x3b\x4b\x7d\x95\xa4\xeb\xed\xa2\x98\x0c\x4c\x41\x36\x13\x8a\x54\x91\x50\x6c\xb7\xa9\xf7\xdf\x77\x1f\x73\x2d\xef\x95\xcd\x83\x8d\x04\x25\xda\x52\xaa\x7a\x6a\x31\x29\x10\xcb\xc1\xc1\xc1\xd9\x70\x00\x38\xd3\x45\x16\xb3\x24\xcf\x1c\x0a\xef\x93\xa9\x03\xf2\xcb\x2f\x34\x66\x00\x63\x76\x37\xa7\xf9\xd4\xa2\xb7\xf3\xbc\x60\xa5\x6d\x83\x45\x36\xa1\xd3\x24\xa3\x13\xd0\xd3\x1f\x67\xf9\x64\x91\x52\x28\x1f\x03\x95\x15\x53\x07\xee\xd0\xb4\xa4\x16\xaf\x4f\xd7\xdf\xd4\x28\x6b\xb1\x6d\xf9\x1c\x90\xd9\x04\xca\x57\x27\x8c\x10\x95\x45\xef\x9d\xae\xe6\x6e\x92\x6c\x92\xdf\x8c\xe4\x23\xe8\xca\x71\x95\xe6\x97\x24\x1d\xc9\x47\x67\x8e\x92\xa6\xd3\x11\xff\x13\xb0\xeb\xa4\x84\x83\x2f\xe5\x1d\x99\xa5\x1c\xe6\xe5\x12\x36\xd8\x80\xf7\x05\x65\x8b\x22\xb3\x1e\x4e\xb1\xa8\xc3\x50\x86\x12\x78\x5f\xa7\x14\x0e\x41\xa5\xc0\x63\x2f\x0b\x49\x24\xdf\x98\x78\xfb\x46\x0a\x2b\xc6\x1d\xe8\x28\xe8\xef\x8b\xa4\xa0\xb6\xad\x5e\x76\x78\x99\xd2\xb6\x63\xa8\xda\x8b\x1d\x82\x7a\x1e\xe4\xe9\xb9\x4e\xcb\x55\x1a\xaf\x75\x81\x33\x7a\x63\xbd\x2c\x8a\xbc\x70\xc0\x0b\x92\x65\x39\xb3\xa6\x49\x36\x51\xa3\x63\xed\x02\x97\xb8\x60\x17\xc0\x1d\x76\x5d\xe4\x37\xd6\x62\x10\xe7\x13\x8a\xc1\x9b\x77\x3f\x7d\x7c\xfd\xf2\xf3\xdb\x77\x1f\x3e\x5f\xbc\xfb\xf8\xf6\x27\x80\x16\x4b\x5e\x5f\x8a\x39\xec\xf8\x5e\x0d\x67\x70\xbf\x5c\xee\xf0\x3e\x84\x5e\x34\x88\x49\x9a\x3a\xa9\x1e\x69\x64\x12\x8f\x82\xac\x70\x44\x5e\x3f\x0a\x69\x54\x55\x14\x2e\x51\x8a\x9a\x02\x14\x49\x94\x2d\x55\x6e\xde\x92\xfe\xb8\x9c\xe6\x85\xc3\x01\xc8\xb7\x41\x13\x22\xd8\x3b\x25\x67\xc9\x20\xa5\xd9\x15\xbb\x3e\x25\xae\x0b\x0b\x27\xe1\xb8\xde\xd1\xa0\x2c\x97\x0e\x74\xee\xfd\x20\x6c\xe0\x44\x0c\xde\x83\x45\x49\xad\x92\x15\x49\xcc\x80\xc0\x60\x86\xa9\x03\x06\x7b\x5f\xca\x3e\xa7\x85\xbd\x34\x27\x13\x5a\x00\x88\x92\x76\xfa\x64\x31\x9b\xf3\xf4\x1d\x63\xbc\x69\x17\xa1\x48\x3c\x1b\xa3\x72\xa1\x0b\x00\x97\xba\xc0\x4a\x4a\x6b\x42\xe7\x05\x8d\x09\xa3\x13\x8b\x64\x13\x2b\x96\xc3\x76\x49\xad\x45\x49\x27\x03\x00\x97\x4b\xa6\xf1\x32\xf8\x70\x37\xa7\x6d\x48\x38\x4e\x00\x44\x4d\x96\xf7\xf1\x35\x9d\x91\x76\xa6\x52\xa4\xb5\xb2\x5d\x3c\x7f\xf5\xfa\xfd\xf3\x8b\x97\x9f\xdf\xbf\xf8\xdb\xcb\x37\xcf\xbb\xf2\xef\x4d\x49\x92\x96\x64\xda\xae\xff\xef\xef\xdf\xbd\x7d\xac\xd0\x97\x32\xcf\x5a\x05\x5e\xbc\xfb\xe5\xd1\x56\xe2\xbc\x68\xb7\xf0\xd3\xcb\x8b\xe7\x1f\x5f\x7f\xf8\xbc\x09\xbc\x09\x9d\x92\x45\xca\x3e\xaf\x81\xa8\x2b\xb8\xf8\xf8\xfa\xf5\x36\x15\x4c\x17\x69\xda\xaa\x80\x0f\x3b\xce\xc4\x63\x25\xf5\x79\x9a\xaa\x0f\xcf\xd3\xd4\xf8\xc6\x61\x78\x2d\x4b\xe9\xd7\x8e\xaf\xb2\xb4\xf1\xcb\xc8\xc3\x49\x0a\x27\xe2\xb1\x52\xf2\x27\xf9\x45\xbf\x1a\x5f\xff\xf5\xfc\xcd\xeb\x97\xb7\x31\x9d\x73\x8a\x6a\x77\x91\xea\xe4\x56\xc7\xde\xbc\x7a\xfb\xea\xcd\xf3\x47\x91\xd2\x39\xe8\x7f\x7a\x28\xfe\xc8\x28\x94\x31\xc9\x70\xe1\x00\xfe\x6c\x7d\x98\x93\xa2\xa4\xfc\x8b\x78\x69\x7d\x8a\xf3\xd9\x3c\x97\x1f\xd5\x6b\xeb\x33\x99\x4c\x5e\xe4\x59\xc9\x8a\x45\xcc\xf2\x82\xe7\x6a\xa7\x00\xb8\x44\xf7\xeb\xf3\x3c\xd8\x47\x9d\xa8\x0d\x0e\xd0\x3a\xb3\x08\x0e\xd1\xfa\xd4\x0b\x9e\xad\x27\x4a\xca\x0f\x8e\x3b\xbe\xb4\x70\x12\x9c\x3c\x92\x43\x60\x3c\xf0\xbd\x8e\x2c\xf5\x48\x06\xbe\xdf\xf1\x59\x4c\xd4\xc0\x1f\xa2\x55\x6e\x12\xf8\xfb\xcb\x08\x0d\x1f\xe5\x95\x35\xdf\x33\x19\x7e\xb6\x48\x53\x8c\xa9\xc1\xaf\x92\xf2\x6d\xce\xae\x93\xec\x0a\x67\xc8\x4c\x7d\x27\x54\x0b\xbc\x2e\x34\xd6\x95\x0e\xdb\xe6\xd5\xf6\x78\xbd\x46\x15\x2c\x7f\x5e\x14\xe4\xae\xa3\x06\x4b\x7c\x18\x24\xa5\x78\x3a\x14\x8e\x68\xc0\x3f\x8f\xc2\x28\x08\x69\x64\x56\x52\xd0\x39\x25\x26\x14\xbc\x9b\x42\x0a\xa0\x04\x03\xb0\xc3\xa5\x50\x86\xbd\xd3\xec\x8c\x9d\x66\x2e\xf6\x61\xe2\x62\xaa\x45\x4a\xb2\x6c\xf5\xe8\x2d\xbd\x22\x2c\xf9\x46\x7f\xa3\x45\xde\x05\x95\x87\x31\xa6\xb6\xfd\x76\x31\xbb\xa4\xc5\xe0\xed\xcb\xbf\x3e\xff\xf0\xea\x9f\x2f\x3f\xbf\x7a\x7b\xf1\xea\xed\xab\x0f\xff\xc2\x18\xfb\x7b\xad\x1e\xd2\x5b\x46\xb3\x49\x37\x70\xa8\x40\x39\x57\x02\x18\x54\x20\xa2\x04\x3b\x39\x96\x58\x1d\x7c\xa5\x77\xa5\xc3\x20\xd4\xf2\x30\x3b\x4b\x24\xf8\x34\x2c\x70\x1e\x66\x51\x84\x59\x58\x44\xba\x23\x74\xb9\x44\xf7\xcb\x08\xed\x6f\x2b\x1c\xe3\x7c\x36\x13\x7c\x45\x09\x45\x93\xd5\x14\x32\xa9\x7b\x6a\xe7\x9d\x1f\x15\xcf\x20\x1a\xfc\x79\x91\xb3\x9c\x8f\xfe\x80\xe5\xef\x59\x91\x64\x57\xa8\x5c\xff\x76\x4d\xca\x77\x37\xd9\xcf\x45\x3e\xa7\x05\xbb\x43\x31\x3e\x41\x0b\xec\x7b\x28\xc5\xfb\x43\x34\xc7\xfb\xfb\x68\x8a\xf7\x0f\xd0\x04\xef\x1f\xa2\x6b\xbc\xff\x0c\xcd\xf0\xfe\x31\xba\xc3\xfb\x27\xe8\x0a\x1f\x0c\xd1\x2d\x3e\x38\x40\xdf\xf0\xc1\x21\x7a\x8e\x0f\x8f\xd1\x25\x3e\x1a\xa2\x1b\x7c\xb4\x8f\xbe\xe2\xa3\x03\xf4\x02\x9f\xf8\xe8\x0b\x3e\xd9\x47\xef\xf1\xc9\x11\x7a\x85\xfd\xe1\x3e\x7a\x89\xfd\xe1\x01\x7a\x87\xfd\xe1\x21\xba\xc0\xf7\x5e\x00\xc6\x63\x0f\xa0\x67\xfc\x49\x00\x3a\xe6\xcf\x4b\x80\x4e\xf8\x93\x01\xe4\x8b\x0c\x19\x40\xbe\xcf\x5f\xbe\x01\xe4\x0f\xf9\xcb\x14\x20\x7f\x9f\xbf\x14\x00\x0d\x45\x61\x0a\xd0\xfe\x41\xb0\x3b\x1e\x83\x5d\x74\x22\xf2\x8c\xc7\x3c\x93\xc8\xf5\x16\x20\xff\x48\x54\xf5\x19\xa0\xe3\xe1\xbe\xf8\xfe\x5a\xbc\x8a\xef\x3f\x83\x25\xfa\x8c\x43\x70\x07\x10\xf8\x17\x40\xe0\x8e\x96\xfc\x4d\xfe\x7d\xf9\x1e\x20\x90\x67\x00\x81\x77\xe2\xcf\x5b\x80\x00\x7f\x11\xcf\x9c\xbf\x88\x3f\xef\x78\xae\xe9\x94\xe7\x90\x7f\x2f\x2e\x40\xd4\xcc\xf1\x37\x9c\x8e\x39\x01\xb0\x9a\xf0\x70\x33\x3a\x8e\x7f\x04\x07\x2c\xff\x38\x9f\xd3\xe2\x05\x29\xa9\x03\x11\x3d\xc3\xc3\xc3\x43\x58\x60\x70\x0b\x50\x8e\x87\xb5\x0d\x40\xcf\xf0\xd1\xe1\xe1\xbe\xf8\xb4\xe0\x9f\x0e\xa4\x8e\xcf\x15\x5d\xfe\xf1\x60\x78\x72\x70\x72\xf4\x6c\x78\x72\x08\x61\xa3\x3a\x25\x9c\x99\x4f\xa8\x35\xcf\x93\x8c\x59\x37\x09\xe7\x28\x16\x11\xa4\x99\x5d\x59\x33\x72\x67\x29\x8d\xe9\xaa\xa0\x84\xd1\xc2\x62\xd7\x24\xb3\xbc\xdb\x0b\xf5\x0f\x80\x3b\x05\x06\x1f\x79\x7b\xc7\x4a\xdd\x04\xe3\x31\x70\x0b\x37\x53\x3c\xc0\x01\x1e\x40\x79\x9f\xa9\x29\x03\x5d\xb6\xac\x7b\xff\x96\xf7\x9e\x5b\x08\x83\x52\xa9\x56\xea\xa5\xaa\x0a\x24\xd2\x93\x6c\x42\x33\x86\xdf\x10\x76\x3d\x98\x91\x5b\xc7\x47\x54\xa5\x55\xd5\x10\xca\x3c\x99\x64\x58\xaf\x64\x56\xda\xfe\x5d\x55\x3d\x5f\x66\x2b\xbf\x26\xf3\x57\xd9\x37\x92\x26\x13\xde\x4e\xf3\xab\xc9\x32\x4d\xf3\x9b\xd7\xf4\x1b\xe5\xaa\x44\xcd\x5f\x1d\xda\xa4\xc3\x51\xdf\x0f\x8c\xdf\xaa\x66\x76\x97\xd2\x37\x64\xfe\x30\x47\x41\x04\xc5\x68\xc1\x87\x57\x32\x72\xcc\x94\x8d\x71\xbf\x54\xac\xf0\x7e\x89\x0a\xec\xa1\x1c\x3b\xc9\x43\xcc\xa6\x38\xcb\x4f\x0b\xce\x6c\x08\x4e\xc2\x22\x42\x31\x56\x54\x22\x6c\x1f\x04\x7a\x3d\x80\x31\x26\x83\x32\x4d\x62\xea\x78\x68\x08\x6d\xdb\x21\x18\x30\x72\x15\x70\x11\x34\xc8\x8b\x2b\x34\xf4\xbc\x61\x00\x5c\x9d\x6b\x08\x21\x72\x16\x98\x0a\xe9\x9e\xa4\x74\xc2\xd5\xe0\x37\x64\x3e\x98\x92\x34\xbd\x24\xf1\x57\x5e\xb5\x6d\x97\xd2\x26\x59\xc8\xae\x3e\x4f\x13\x52\xd2\x12\xc5\xbc\x81\x18\xb7\x53\xc3\x38\x82\x48\xd8\x36\xb1\x66\x83\xd9\xd2\x31\x06\x19\x51\x99\xbf\xac\x2a\x8e\x0c\x35\x88\x65\x5e\xb0\x7f\xd0\xbb\x92\x0f\x8d\x7a\x6d\xc6\x25\x4d\x32\xfa\x6b\x32\x61\xd7\x98\x36\xef\x55\x75\xec\x69\x02\xf8\x85\x4e\x4b\x31\xf2\xfc\xa5\x29\x97\xe5\x2f\xf2\xd9\x9c\xb0\x37\xdc\x14\xa3\xad\x9f\x4d\xa6\x38\xe7\x84\x52\xd2\x8b\x34\xbf\x11\x88\x68\x7e\x36\x99\x92\xd9\x3c\x4d\xe2\x84\x71\xf4\x94\xd8\xe8\x4d\x8d\xb8\x57\x2a\x87\xcc\x4f\x6f\x37\xe5\x7f\x79\x6b\xe6\x67\xe4\x0a\x73\x6c\xc8\x5f\x05\x2d\x17\x29\xc3\x00\xc8\x9f\x93\x05\xcf\x4a\x18\x2d\x71\x18\xc9\x24\x6e\xc0\xfc\xd4\x24\xf3\xa2\xcd\xb4\xfa\x20\xe9\x4f\x5b\x7a\x09\x2a\x70\x33\x1b\x2d\x80\x18\x97\x17\x1e\x22\xb8\xef\xa3\x92\xb7\x12\x73\xbc\x4a\x22\xcb\xcf\xe2\x53\xd8\xf7\x31\xc6\x0e\x9f\x8e\x7c\xae\xdd\xbe\x9b\x3a\x80\x73\xdb\x1c\xc2\x91\x93\xf0\x11\x12\xb4\x93\xf3\x6a\x62\x18\x98\x49\x88\xb8\x3e\x4f\x16\x0f\x6d\x36\xda\x36\x2f\xde\xc3\x38\xb1\x6d\xa7\x74\x71\x01\x51\xe9\xe2\x44\x93\x47\xd9\x40\xfe\x5a\x42\xae\x19\x49\x06\xdc\x16\xe0\x7a\xee\x3f\x65\xb0\x29\xf3\x93\xa1\x0a\x50\x8c\x71\x5a\x55\xfc\x11\x37\x39\x3e\x1a\x39\xf6\x87\x67\x5c\x59\xa0\x67\xd8\x1f\x1e\x55\x95\x7f\xe4\xeb\xdf\x87\x87\xc3\x93\x43\xdb\xe6\x72\xa0\x27\x14\x0a\x2e\x06\xf8\x5b\x55\x1d\x3e\xdb\x3f\x38\xd0\xf9\x38\x97\xdd\xb7\xed\xa3\xc3\xe1\xb3\x13\xf9\x99\xa7\x1c\xd5\xd5\xfa\xfe\x81\xef\xfb\x4d\xeb\xbf\x1b\xad\x73\x48\x8c\xa2\xb6\x4d\x7b\x18\xdf\xca\xc7\x0b\xf9\xf8\x22\x1f\xaf\xe4\xe3\x9d\x7c\x3c\x97\x8f\x49\x53\xeb\xbf\x9a\x5a\xf7\x3e\x8d\xb3\xa7\xd6\xde\x80\xd1\x92\x39\x14\x0a\xf7\xc2\xcf\xd8\x47\xbf\xe0\x21\x7a\x82\xf7\xd1\x8f\xf8\x00\xfd\x8a\x0f\x1b\xa1\xf3\x0f\x47\x79\x08\x50\x21\xb9\x14\xe7\x4f\x25\x8a\x71\xcf\x47\x29\xff\x73\x81\xfb\x3e\x1f\x2e\xf4\x99\x93\xc8\x1b\xfc\xd1\xe1\xb3\x2b\xbe\x26\xc5\x8b\x7c\x42\x9f\x33\xc7\x83\x46\x37\x4a\xdb\xee\xfd\xe4\x94\x9c\x4d\xf4\x30\xfe\x26\x1f\x37\xf2\xf1\x5c\x3e\x6e\xe5\xe3\x85\x7c\x7c\x91\x8f\x57\xf2\xf1\x4e\x3e\x26\xf2\x31\x93\x8f\x2b\xf9\x98\xcb\xc7\x4b\xf9\xb8\x94\x8f\x3b\xf9\x98\xca\xc7\xb5\x7c\x7c\x95\x8f\xf7\x02\x96\x16\xac\x9a\xb4\xfb\x3e\x84\x8d\x66\x97\x63\xef\x34\x3f\x6b\xc8\xde\x75\xa5\x1f\xe9\xa3\x20\x7b\xa3\x78\x0e\xa1\xf6\x07\xfd\xba\xf3\x06\xbf\xb1\xed\xdf\x1d\x02\x97\x42\xb6\x3e\x52\x51\x47\x35\x18\xe3\x05\x8c\x71\xcf\x43\x17\xb6\xed\xa4\x9c\x50\xf3\xfe\xe7\xbe\x7f\x9e\xd8\x36\xb0\xf8\xfc\xa0\xe1\x67\xd7\x8f\xd0\x67\x9c\x37\xbe\x3d\x0e\x51\x27\x04\xa2\x82\x0b\xdb\xee\xac\x43\xbb\x7e\xe2\xaa\x4a\x47\xd9\xf9\x89\x6d\x73\x82\x19\xfd\x1a\xa4\xa3\x1f\x83\x27\xc1\x1b\xdb\xee\x15\x3c\xe1\xe7\xe0\x97\x86\xa6\xfe\xa6\xe8\xa2\x80\xf7\x54\x1a\xcd\x86\xbb\x25\x99\x3a\x5c\xd1\xae\xe5\xb8\x9a\xa3\xbb\xbb\x40\xf8\xd2\xda\xdc\xd5\xb6\x05\x01\x7d\xae\xf9\x07\x83\x75\x01\xe0\x32\x17\xec\x4a\xb5\x37\xc7\xf5\x94\x36\x44\x7c\x06\x05\x6f\xe2\x6a\x7d\xc3\xee\xb9\xe4\xad\xf3\xc8\x97\x24\x73\x8c\x0c\xe8\xc0\x83\xc8\xf8\xdd\xcf\x21\x2a\x71\x51\x55\x86\xbc\x3e\xef\xfb\xb6\x9d\x9d\x63\x23\x69\xa7\xbc\x49\x58\x7c\xed\xfc\xc3\x61\xa8\xac\x39\x0c\x22\x8d\xdb\x8d\xad\x7b\x9f\x4c\xf9\xbe\xd3\x18\x0a\xb4\x2d\x27\xd6\xac\x04\xae\xa6\xb5\xb3\x84\x59\xc4\xb9\x7d\x9e\x7e\xa3\x0d\x8e\x7a\x9e\x62\x8d\x3d\x7f\x29\x9a\x5a\x42\x78\x1f\x93\x92\x5a\x3f\x07\x0a\x12\xb6\x23\x7e\xff\x12\x18\x58\xe5\x9c\x32\x25\x31\x75\xf6\x76\xf7\xae\x10\x1f\x19\x28\x10\x2d\x72\x3e\xd1\x39\x2b\xe0\xfe\xd5\x61\x75\x47\xa1\xfb\x4f\xe7\x83\xc3\x38\x6f\x97\x19\x7f\xd4\x19\xcf\xbb\x32\x3e\xa0\xe1\xe0\x3d\x67\x9c\xb9\xd0\x09\x3f\x8d\xb3\xe8\x29\xdc\xbb\xe2\x8a\x4c\xb9\x22\x3f\xf8\x70\x08\xb2\x28\x47\x65\xa0\x27\x0c\x2a\x06\x29\x29\x19\x57\xd6\x6e\x71\x89\x7e\x73\x68\xad\xbf\x94\x10\x31\xc8\x49\x81\x17\xe6\xc4\x10\x7a\x51\x55\x01\x4b\xbf\x0b\x0a\x2a\x05\xfa\x4f\x13\x5c\x0c\xe8\x2d\x8d\x1d\x0a\x4f\xb5\x1b\x38\x09\xfd\x08\x2d\x70\x12\x0e\xa3\x9d\x0c\xcb\x72\x8b\xd0\x8b\x50\xee\xe2\xd8\x75\x48\x55\x65\x55\x05\x44\xea\x08\x80\x40\x80\xe8\xfe\xe6\x2c\xb8\x7c\x24\x38\xd3\x53\x28\x5f\x3a\x0c\x11\xd8\x60\xe8\x57\x85\xa1\x5d\xb0\xeb\x9a\xe6\xa8\x96\xb7\x8a\xb5\x72\xc1\xda\xc1\x1c\x84\x82\xdf\x66\x0c\xe7\x42\xf6\x1c\xd9\x36\x3b\xc3\x87\x47\xfb\xfe\x89\x6d\x3b\xd9\x4a\x2e\xd7\x17\xf9\x8e\xf6\x87\x9e\x6d\x67\x67\x98\x8b\xa4\xfd\x91\x53\xb8\xf8\x8d\xe3\x7b\xc3\x83\xa7\x0e\xeb\x8b\x5a\xa0\x9b\xf5\x45\x36\x57\x88\x25\x88\x78\xa3\x5c\x46\x5f\x84\x2c\x42\x85\x8b\x7b\x89\x6d\x7f\x74\x18\x1c\xd1\x30\x8f\x82\xa4\xaa\xde\x70\xca\x6b\xdc\xb9\x0e\x83\xee\x2e\xd8\xdd\x51\x46\x64\xd0\x32\x16\x92\xd9\x3c\x2f\xcb\xe4\x32\xa5\x16\x2d\x8a\xbc\x08\xac\x44\x2a\xd1\x56\x19\x93\x94\x8f\x07\x57\xed\x00\x5c\x2e\x1d\x43\x44\xff\xd5\x20\x17\x2c\x18\x91\xd6\x5c\x61\x00\x00\x4a\x9a\x11\x6e\x98\x75\x6d\x44\x67\xae\xc3\xf5\x86\xf5\x2c\x43\x4e\x0d\x2a\x15\x8e\x80\x0b\x82\x44\x8c\x63\x9f\xd3\xfd\x38\x03\x4d\xfb\xff\x34\xbc\x20\x1d\x2d\x8d\x1a\x9a\xeb\xfb\x30\xa0\x4d\xc1\xdf\x24\xe0\xc9\xd4\x11\x74\x42\x4d\xf2\xd3\x3c\x99\xee\xe8\x81\x57\x53\xc1\x0a\x3f\x59\x91\x98\x02\x5c\xc7\xf2\x50\x89\x3d\x14\x63\x00\x4e\x33\x93\x48\x9d\x92\x1b\x19\x9c\xec\x61\x3f\x3f\x67\xb6\xed\x24\x98\x9c\xe7\x23\x12\x94\x28\x76\x05\x46\xdc\x46\xad\x4a\xb8\x52\x95\x70\xa5\x8a\xe0\x52\x63\x46\x65\x43\x75\x57\x44\x3d\xbc\x92\xd8\x35\x55\x32\x89\x8e\xba\x36\xae\x9b\x05\x66\x0e\x88\x62\xf5\xea\x1b\x83\xf6\x6f\x29\x0d\xe4\xb0\x71\x1b\x26\x46\x0b\x94\xa2\xb9\xe8\x6e\x8c\x3d\xb4\xc0\x4e\x8e\xb3\x11\x6d\x2b\xbb\xc1\x0a\x87\xab\xcd\x97\xf8\x6c\x71\x1a\x2b\x2e\xe8\x38\x29\xce\xb9\xa5\x30\x48\xb2\x92\x91\x2c\xa6\xef\xa6\x55\x95\x0e\xe6\x05\x9d\x08\x95\x96\x5b\x16\xbd\xb4\xf5\x75\xcd\x7f\xc5\x6c\x9b\x59\x3a\x47\x3e\xb5\xcc\xec\xaa\x7c\x5d\x5f\xab\x72\x4e\xef\x62\x50\xa9\xd4\xbb\x47\x29\x7f\x06\x60\x04\x50\xca\x99\x68\x41\x4b\xce\xf0\x78\x8e\x39\xa6\xb5\x79\x17\x8a\x6c\x11\xaf\x4a\xcd\x8d\xf7\xfc\x0b\x02\xa1\x84\xcc\xd2\x0b\x10\x91\xb4\xc3\xd4\x32\x4e\x53\x21\x2c\xb0\xf1\xd3\x61\x68\x0e\x1b\x1b\xbd\x5c\xcb\x8f\xe6\x2b\x96\x7a\xef\x0c\xb8\x02\x06\x77\xf7\xdc\x62\xe4\xca\x52\x92\xa3\xb0\x48\x1c\xd3\x39\x2b\x85\xb1\x0e\x76\xdd\xb9\xbb\x0b\xe4\x4c\xdc\xe5\xf6\xb9\x51\x67\x38\x8f\x44\xbb\x4b\x25\xe0\x8b\xa5\x16\x39\xcb\x5a\xe4\xd4\x14\xf0\x77\xad\x0f\xa0\x1c\x95\x5c\x27\xa8\xad\x14\x55\x3a\x43\x9c\x48\x32\xd4\xf3\x61\x55\xa9\x57\xb5\x5e\x16\x6b\x04\xc8\xac\x70\xa7\xb0\x6d\xa7\x30\x05\xef\x99\xd7\x16\xcd\x4c\x16\x4c\xd1\x1c\x4d\x71\x8d\x53\x69\x0b\x0b\x8c\xc6\x55\x55\x27\x0b\x0b\x5f\xa6\x72\xf5\x63\x6a\xdb\xce\x5c\x0a\x17\x27\xc5\xd4\xb0\x98\x6a\x09\x94\x41\x6e\xea\x6a\x87\x27\xef\x8a\x6d\x83\x11\xd0\x3f\xaa\x6a\x5e\x55\x42\xf1\x57\xf2\xce\xb6\xd9\xb9\xc7\xc9\x28\xc7\x3d\x1f\xa2\xb9\x6d\xd3\x15\xab\x2b\x4c\x23\xa8\x10\x01\x9e\x16\x74\xfa\x19\xb8\x69\x3d\x9e\x53\xdb\x9e\xdb\x76\xaf\xa3\x8c\x6d\x3b\x1d\xa9\xb8\xe7\x41\xd4\xd9\x6b\x58\xd8\xb6\xc7\xf5\x64\xc3\x2b\xa0\x90\xaa\xa6\xd6\xa8\x25\x96\xa5\x02\x67\xa8\xf5\x48\xa1\x14\xa0\x89\xec\x2b\xba\x6e\x55\x96\x09\xb5\xb8\x27\xdc\xa8\xb5\xf1\x0d\xaf\xc5\xeb\xe3\x8b\xcc\xeb\xd9\x8d\x94\xc6\x33\xd5\xa4\xb5\xc8\x59\xa7\x5a\xb3\x45\x29\x7c\x4c\xc4\xba\xcc\xf3\x94\x92\xcc\xca\x0b\x8b\xd4\xda\x16\x80\x3b\x4a\xd1\x46\x04\x5f\x37\x86\x2a\x39\xcd\x39\x3b\x99\xf3\x9e\x71\x1c\x61\x8c\xf3\xaa\x72\xe6\x2e\x96\x66\x24\x44\x31\xce\xc2\x12\x5f\x87\x79\x14\x21\x41\xcc\xae\x8f\x4a\xd4\xf3\xe4\x7f\x7c\x70\x9d\x14\x3f\x42\x12\x12\xcd\x7c\xe4\xf9\x53\xb5\x7c\xce\xc5\x2d\x14\xa3\x28\xbf\x2e\x04\xe2\x44\x8e\x96\x89\x34\x9a\xbb\x18\x8c\x40\x20\x1e\x16\x80\x68\xee\xaa\x7c\x28\xe5\xf4\xda\xc0\xa9\x61\x8b\x39\x60\xe9\xd6\x75\x07\xb2\xee\xc0\x02\x68\xea\xe2\xba\x76\x08\x77\xe4\x54\x9d\xe8\x79\xca\xb9\xe7\xfd\x12\x08\x65\x52\xa5\xa1\x5c\xd0\xb4\xa3\x09\xd8\x56\x04\xec\xea\x3a\x82\x15\xa2\x92\x24\xa5\xbd\x59\xa5\x90\x68\x68\xa1\x08\x2a\x5d\x25\x28\x3e\x60\x09\xf6\x10\x67\x3e\x6a\xc0\x92\xb3\xe2\x34\xe1\x03\x56\xae\x78\x59\x46\xbb\x60\x97\xab\x01\x5e\xe3\x21\x00\xc8\x12\x7e\xeb\x2c\xcc\x71\x1a\x26\x7a\xf8\x50\x8e\x7a\x3e\xe7\x36\x35\xe0\xe6\x98\xa8\xa2\x02\xd5\xa5\x46\x86\xeb\x74\x36\x06\x5d\x10\x80\xb5\x6f\x5c\x7b\xe0\xa5\x65\x63\xa4\x69\x2c\x76\x71\xb9\x86\xde\x85\x46\x2f\xb8\x07\x6e\xec\x82\x36\x82\x1f\x40\x2f\xb0\x80\xdb\xd4\xa3\xa7\x56\x07\x5b\x93\xf8\x9e\xac\xfa\x33\x05\x5b\x1a\xb1\xbe\x1f\xb0\x1d\xc5\x18\x5a\x98\x58\xe3\x05\x49\x23\xc0\x09\x1f\xb2\x52\x0e\x99\x18\x21\xe9\x71\xcc\xd6\x1c\x8c\x9a\x1e\xb3\xb0\x88\x9a\xb9\x92\xc8\x39\x56\x54\x95\x43\x1a\xda\xdd\x48\xa9\xc4\xc5\xa0\x0f\x02\xf1\xb0\x00\x22\x35\x1e\x15\x1a\x4b\x8d\x46\xc2\xf9\x7b\x24\x90\x38\xf9\x0f\x50\x29\xef\x2c\x31\x3a\x2b\xc9\x31\x5b\x23\x47\x25\xe5\xc2\x24\x6a\xc6\x5b\x93\x62\xce\x49\xf1\x41\x3a\xe1\xba\xf5\x4a\x67\x48\x4d\x13\x21\x70\x73\x17\xb4\xbb\xb3\x05\x4d\x2c\xb5\x00\xa9\x69\x42\xaa\xca\x11\x67\x4b\xb1\xd2\x5a\x0c\xe7\xb5\x36\x19\xfd\x9d\x16\x6f\x5d\x64\x52\x25\x20\x5c\x53\xff\x9a\x64\x13\x2b\x9f\x5a\x9c\xb1\xca\x3a\x59\x6e\xf1\xe6\x2c\xe0\xc6\x70\x69\xb0\x3c\xdb\xfe\x9b\x43\x35\xee\x19\x2a\xe1\xf2\x41\xee\x68\x74\x84\xeb\x25\x22\xcd\x05\xe7\x4d\x57\x1a\xcd\xa2\x56\x28\xfe\xf7\xaa\xd9\x18\x46\x28\xc7\x61\x24\xc6\x67\x3d\xe2\xa7\xa6\x5b\xed\x38\xef\x61\xcc\x6c\x7b\x5d\x11\xe4\x2a\xa5\x14\xfe\xb9\x56\xaa\xa5\xcf\x41\x7a\x32\x93\x3a\x29\x87\xb6\x9d\x0c\xe6\x8b\xf2\xda\x31\x5c\x2c\x99\x4c\x61\x10\xb5\x17\x38\x19\x84\x8d\xe0\x61\x6b\x82\x87\x3a\x2c\xcc\x23\x01\xaa\xac\x4a\x4e\xa9\xb6\xf7\x5e\x59\x01\x45\x67\xe9\x42\x48\x26\x11\xaa\xe3\x50\x4e\xb3\x10\x49\x47\x42\xbe\xe6\x3a\x60\xa6\x4e\x23\xc0\x2d\x42\xb1\xe0\x08\x77\xd8\x9a\x37\x98\xde\x48\x4e\xe2\x24\x86\x3e\xff\x5f\xa6\x11\xc6\xb3\xbc\x75\x18\x66\x55\x75\xbf\xac\x8d\xbf\xac\xf6\xa0\xf3\x91\xca\x38\x23\xcc\x90\x87\xa8\xe2\x01\xa3\x4c\xb2\x54\x6e\x4d\x04\x00\x2c\x57\x22\x2c\xfe\xab\x2b\xb8\xa2\xed\x30\x50\xed\x70\x50\x32\xb5\x0c\xeb\xdc\x4b\xc7\x78\x90\x2f\x39\x3f\x59\xca\x28\x01\xb5\x10\x1a\x88\x25\xf4\xd5\xa8\x80\x87\x57\xf2\x1f\x58\xc1\x5f\x46\xe8\x60\xeb\x35\x77\xfe\x51\x44\x14\x49\xfd\x55\x04\xb0\xa9\xe5\x04\x32\xa3\x18\xb4\x22\x43\x80\x76\xd8\x93\x32\xcf\x30\x95\xbf\x66\xa4\xf8\x8a\x95\x63\x7f\x46\xcb\x92\x5c\x51\xec\x18\xf9\xaa\x0a\x38\x8b\xec\x6b\x96\xdf\x64\x96\x4c\x81\x00\xba\x4e\x5d\x76\xc4\x19\x42\xfd\xab\x59\x0d\xe4\xc6\x32\x44\x1a\xb6\x39\x5b\x14\xf4\x3d\x23\xf1\xd7\x0f\x05\x89\xe9\xe8\x81\x74\x51\x6d\xbd\xd2\xa1\xa3\x31\x60\xa0\x56\xae\x48\xfc\x15\x3b\x75\x10\x15\x94\x29\x55\x05\xc0\x32\x6b\x96\x84\x35\x4d\xc7\x62\x11\xd0\x91\x2d\xd5\x5f\x21\x32\xb2\x9a\x8d\xe0\xac\xf5\x45\xf7\xa3\xb5\x86\x2f\x1c\x26\xb8\x46\xaf\xcb\xb5\x19\x4d\x8e\xcc\xc5\x1b\xb0\x86\x7a\xd4\xb6\x6b\x4c\xd9\xb6\xc3\x5c\xfc\x10\xf2\x20\x62\x46\x10\x00\xce\xe4\xd2\xfc\xe1\x7f\x70\x69\x9e\x37\xb8\x79\x2d\xfe\x91\x55\xfc\x6d\x16\xe3\x7d\xb4\xc0\x43\x94\xe2\x7d\x34\xc7\x07\x68\x8a\x7d\x34\xc1\x43\x74\x8d\xf7\xd1\x0c\xef\x85\xe3\x5b\xcf\xeb\x8f\x6f\xbd\xe3\xf1\xad\xf7\xe3\xf8\xd6\x7b\x31\xbe\xf5\x5e\xf6\xc7\xb7\xfe\xc5\xf8\xf6\xd9\x45\x7f\x7c\x7b\x7c\x30\xbe\x3d\x3e\xea\x8f\x6f\x4f\x2e\xc6\x8b\x8b\x8b\x8b\x97\xe2\xef\x45\x54\x85\xe3\xc5\x4f\xc7\xbc\xf0\xe2\xa7\x1f\x2f\x2e\x22\x67\xd4\xe3\x29\x2f\x64\x0a\xcf\x01\x2b\x67\x14\x84\x9f\xda\xd9\xaa\x4f\x70\x25\xdb\x1e\xba\x13\x70\x1c\x1f\x8e\x17\x43\x6f\x78\x2c\xfe\x9e\x44\x7b\xe8\x0a\xef\x85\x68\x1c\x8e\xa3\xf1\xfd\x78\x19\xed\xa1\x5b\xbc\xf7\xc9\x19\x05\xbd\xaa\xd7\xab\x7a\x21\xe9\xff\x7b\xdc\x8f\xdc\x1e\x7c\xb2\x97\xa0\x6f\xfa\x53\xf8\xa9\x29\x01\x9d\x51\xf0\x43\xe8\xf5\x4f\x48\x7f\x1a\xdd\x0f\x97\x95\x7c\xff\xf7\xb8\xff\x97\xd3\xf1\xde\x78\x14\xfc\x2f\x1b\x8f\xdd\xf1\x13\xf4\x79\x3c\xe8\xfd\xf7\xf8\xe9\xee\xd8\x19\x43\x5e\x3a\x82\x4f\x9f\xec\x25\xcd\x1c\x7f\x6e\x2c\xc8\x3c\x18\x18\xa1\x8c\x57\x83\x7f\x5e\x1a\xc5\x7c\x4f\x7a\x83\xfc\x7d\xfe\x6c\xf2\xdc\x18\x79\x4e\x64\x96\xfd\x61\x3b\xcb\xd7\x87\xb2\x54\xd5\x43\xb5\xbe\x30\x8a\x1c\x1c\xc8\x3c\x27\xbe\x7a\xee\xab\x32\xc3\xfa\xe5\xb0\x5d\xfa\x4b\x3d\xcd\xf4\xbc\x3a\x38\xae\xd7\xbc\x9e\x8d\x68\xff\xe0\x38\x38\x79\x76\x86\x1d\x86\xf7\x87\x15\x85\xc2\x0d\xe9\x7b\xc3\x11\xeb\x9f\x3c\x73\x7d\x2f\xe8\x1b\x2e\x81\xf7\x26\x28\xc7\xbc\xa1\x11\x18\x7b\x20\x38\x79\x26\xdf\xff\x2f\x10\x9c\xe8\xe4\x4b\x10\xf8\xfe\x91\xfa\xc1\x40\x70\xd2\xbc\xfa\xb2\xab\x23\x21\x49\x7c\x5f\x97\xf8\xc6\x99\xf5\x50\xfd\x98\xf2\x2f\x07\xea\x47\xc1\xbf\xf8\xf2\xc7\xff\x0d\x82\x7d\x95\xc9\x02\xc1\xbe\xcc\xc2\xd5\xfa\x03\x05\xc4\x1e\x08\x4e\x74\x2d\x63\x10\x3c\x53\xd5\xff\xcf\xff\x01\xc1\xc9\xa1\x7a\xff\x7f\x41\xf0\x4c\xc3\x26\xe8\x14\x04\xc7\x9e\xf1\xfb\x44\x48\xb8\xba\xdf\xaf\xcc\x45\x46\x15\x69\xa1\x9c\x98\x83\x69\x91\xcf\x5e\x28\x95\xd7\xa1\x30\xe8\x4a\x16\xae\x59\xd7\xa1\x7d\xe1\x94\x3d\x3f\xf7\x3d\x88\xa4\x97\x56\xa7\xd9\xbe\x37\xdc\x87\xb0\x8e\xcf\x7d\x69\x88\xf1\xe1\xe1\x11\x44\xef\x56\x13\x2e\xb0\x77\x7a\x71\x36\x3c\x3c\x3a\xbd\x70\x5d\xf8\x32\xbc\x88\xf0\x7b\xe7\x02\x8e\xfc\xc0\x43\xef\xf4\xaf\x86\xec\x3f\x4b\xfe\xa6\xc2\x2a\xe6\x0b\xa6\xc5\xd5\x34\x49\xa9\x10\x6d\xac\x7e\x95\x4b\xf3\xc8\x0c\xcd\x60\x75\x68\x06\x91\xe9\x79\xf6\x2b\x29\x32\xce\xcf\x59\xf3\x6e\x16\x4c\xe9\x15\x89\xef\x84\xe2\xc4\x5f\x9a\xc5\xf4\x2f\x5c\x56\x32\xf1\x30\xd7\xf8\x4b\x46\x33\x5a\xf0\xfc\xea\xd5\xac\xec\x7b\x17\xe0\x99\x8c\x63\xe8\xcc\xa9\x62\x1c\x34\x94\x5c\xd1\xaa\x17\xc0\x65\xe2\x3c\x2f\x13\x11\xf8\xe9\x35\x01\x08\xe6\xfb\x7b\x46\x0a\x66\x26\xa8\xe0\x13\x95\x32\xc9\xe3\xc5\x8c\x66\xac\xc4\x61\xb4\x34\x63\x7d\x0c\x1d\x48\x2a\xea\x0c\xf1\x67\xe1\xd0\x1a\xf5\x62\xc1\x65\xbe\xe0\x66\xa4\x86\x42\xad\x6a\x19\x29\x7d\xda\x80\x01\x61\x2b\xa0\x46\x8e\x31\x37\x05\x64\x7b\x6b\x61\x01\xb4\x19\x2d\xdb\x36\x7e\x48\x8e\x27\x30\x2e\x4b\xca\x95\xe4\xd7\xf8\x9e\x6b\x3c\xc1\x83\x76\xd6\x4e\x6d\x22\x7c\xa3\x45\x99\xe4\x99\x6d\x73\x30\x80\xd6\x57\x79\xd3\xf9\xd4\xfa\x81\xd7\x62\x4d\x92\x82\xc6\x2c\xf9\xc6\x45\x21\x57\xd8\xb3\x3a\x44\x40\x94\x69\xe7\xa9\xdd\x9a\xf4\x96\xc4\x2c\xbd\xb3\xf2\x8c\x5a\xa4\xb8\x12\xb8\x05\x10\xa9\x58\x1a\x27\xe1\xe2\x82\x4b\x83\xc8\x85\xe3\x81\x7e\x7b\xb2\x27\x9d\xed\x59\xe8\x45\x10\xaa\x06\x92\x34\xed\x4f\xf3\x62\x46\x27\x75\x45\x1c\x38\x76\x4d\xad\x35\xf8\x0a\x2c\x82\x60\x5f\x65\xcc\x11\x4b\x49\x7c\xce\xe6\x66\xda\x50\xa6\xf1\x7e\x14\xaa\xfe\x96\xdd\x25\x6a\x54\x48\xd1\xad\x68\xd2\x00\xdc\x72\x56\xdf\x30\x07\x11\xd1\x41\x7c\x4d\xe3\xaf\xaf\x93\x8c\xfe\x58\x50\xf2\xb5\xc4\xf9\xd9\x50\x54\x9e\xdb\xf6\x50\x3e\x3e\xc8\x36\xca\xc5\x9c\x2b\x31\x74\xb2\xa1\x89\x25\xfa\xf0\xfc\xaf\x0f\x8d\xdc\xce\x70\x1d\xff\x1f\x9e\xff\xf5\x11\xf4\xb3\x9b\xbc\xc6\x5a\x29\x34\x21\x01\x78\x81\x33\x8e\x9e\x5b\x19\x80\x90\xc0\xaa\x5a\x45\x35\x23\x57\xd6\x35\xc9\x26\x29\xb5\x9c\x69\x52\x94\xac\xae\x06\x6a\xa0\x5b\x2d\x73\x55\x48\x7b\x8f\x19\xb9\xe2\x73\x35\x51\x23\xb8\xcb\xae\x69\x41\xad\xa4\xb4\x88\x35\x2f\xe8\xb7\x24\x5f\x94\xe9\x9d\x35\xa1\x71\x4a\x0a\x3a\xb1\xca\xc5\x74\x9a\xdc\x72\x53\xcc\x02\xbb\x6e\xe2\xee\x02\xa3\xf5\x5d\x88\xbe\x49\x28\x8b\x07\xa0\x9c\x17\x94\x17\x77\x4a\xca\x0d\xfe\xcd\x60\x6a\xf8\xc2\x24\xc2\xc5\x72\xb9\x63\x46\xa5\xac\xb9\x5f\x50\x29\xe2\x0f\xce\x32\x61\xc6\xcb\xe5\xd1\xf9\x82\xa9\xb5\x17\x3e\x36\x28\x81\x8d\x5f\xa6\x5c\xf3\xcb\x9c\xc8\xb0\x9c\xd2\xf4\xb0\x14\x10\x72\x0d\xe2\x0c\x13\xdb\x26\x75\xf8\x89\xea\x1d\xbd\x9d\xd3\x98\xd3\x89\x5c\xa3\xfb\xfb\xfb\x77\x6f\x2d\x5e\x96\xc4\x4c\xec\xb1\x10\x66\xeb\x4c\xa2\xa4\xd4\x73\x84\xf7\xb3\x64\x05\x25\x33\x2b\xce\x33\x46\x92\xac\xb4\xb2\x3c\xeb\xcf\x8b\x24\x93\x84\x5d\x57\x51\xf2\x3a\x54\xb8\x92\x8b\xcb\x65\x2b\xe6\x06\xb1\x76\x84\x49\x8c\x16\x72\xad\xbc\x8e\x52\x6e\x88\x45\x6d\xcd\x98\xd1\xe2\x8a\x5a\x33\x32\x9f\x27\xd9\x55\x79\x2a\x50\x3e\x2f\xf2\x6f\xc9\x84\x0f\x6d\xbe\x28\x62\xaa\x5d\x18\x49\x69\x99\x93\x0d\x40\x54\xaf\x49\x99\x16\x78\x02\xd7\x17\xa0\x88\x58\x7b\xd2\x24\xc6\x10\x81\x55\x25\x82\xe8\x70\x12\x92\x08\x15\xfc\xad\xe7\xc1\x56\x08\x8f\x0e\x98\x91\xb1\x7c\xb2\x53\x0b\x94\xf2\x01\x6d\x3b\x0d\x0a\xe9\x34\x58\x60\x0f\xa5\xd8\x29\xb0\xfc\xda\x28\x98\x62\xb0\x65\xcb\x45\x03\xdb\xe2\x2c\x3d\x5d\x70\xd8\x56\x2a\x0b\x17\x91\x1e\x96\x8c\x96\x62\x23\x0b\xff\x50\x5a\xa4\xa0\x62\xb5\xa7\x61\x05\x49\x56\x26\x13\x6a\xf1\x5e\x03\x88\xd6\x9c\x24\x85\x6d\x77\x2d\x2f\x3c\xd7\x6d\x88\xe7\xfa\xba\x8b\x58\x1b\xf8\x8e\xca\x44\x4d\x1d\xd5\xa0\x42\x47\x2b\x16\x35\xe3\x66\xdc\x60\xc3\xf7\x4b\x88\x3a\x62\x14\x05\x29\xf0\x4a\x13\xb8\x86\xe3\xdc\xc4\x71\xbe\x86\x43\x49\x7b\x79\xb8\x88\x50\xa6\x68\x5c\x25\xd5\xbf\xa9\xd2\x3e\x14\x0d\x64\x88\x33\x84\x5e\x4d\x11\xfc\x97\x8a\x2d\xc1\xa4\xaa\xd6\xe4\x2f\x8e\x79\x62\x2d\x9f\x5b\xf2\x8e\x4e\x34\x01\xf3\xb1\x00\xdc\xee\x0c\x8b\x08\xe7\x68\x42\x53\xca\xa8\x95\x19\x01\xe2\x6c\x25\xa0\x4b\xaa\xe9\x42\x39\x16\x71\x02\x92\x3f\xb4\x82\x99\x74\xa3\x10\x8e\x9a\x1f\xae\x1b\x08\xa3\x81\x8d\x1c\x33\x11\x49\x35\xfb\xd1\x6a\xb8\x0e\xd0\x94\x80\x81\xe8\x0b\xb1\x78\x87\xad\x4b\x2e\x87\xf8\x4c\xd3\x7c\x04\xe8\x08\x1b\x17\xfb\xc8\xd0\x41\x70\x53\x47\xd3\xa3\x9f\xb5\xc0\xa9\x03\x11\x85\x07\xf6\x71\x70\x4e\x3d\x2e\x4d\x4f\x65\xa1\xd3\x1b\xa7\x80\xa7\xb0\xb3\x8c\xeb\x1a\xa5\x04\x5f\xb5\xed\x7d\xae\xdd\x17\x70\x92\xdf\x6f\x2e\xb2\xbc\xb9\x4e\x52\xea\xf8\x9e\x94\xde\xfe\xbe\x7c\x8a\x9f\x72\x41\xec\x92\x4f\x50\x81\x02\xc1\xb6\xf8\x00\x6d\x04\x1f\x25\xae\xab\x10\xa3\x55\xc2\x53\x61\xac\x14\xa7\xd0\x4c\x76\xdd\xee\xaa\xda\x20\x4a\x2a\x11\x9e\xcd\x4c\x82\x96\xf0\xe1\x6a\xaa\x39\xcb\x94\x4e\x30\xa1\xd3\x24\x4e\xb8\x36\x23\x57\x2f\x89\xf2\x4c\x24\xcd\x70\xfc\xd2\x84\x9a\x67\xc6\x78\xe9\x50\x23\xe7\xe0\xb0\xf7\x10\xd5\x65\x5c\x7f\x3a\x38\xea\x61\xcc\xaa\x8a\xf5\x3a\x49\x2a\x73\x7d\xf8\xc8\xc7\x21\x9f\x51\x99\x8b\xf7\xc5\x32\xcf\x23\xcd\xf4\xbe\x0a\xc7\x6d\x03\xf7\x13\xa9\xb6\xfa\x82\xbc\x1b\x61\xc3\x6d\x3f\x76\xee\x0b\x37\xb4\x4e\x6b\x82\x45\xc7\x19\x40\xac\xef\x9b\xf5\xfc\xb8\xea\x7c\x96\x4b\x57\x39\xa6\x03\x92\xc5\xd7\x79\x81\x08\x0e\x23\x54\xe2\x9e\x2f\xc5\x94\x56\x6b\xe5\x57\xd1\x90\x7c\xe5\xf2\x5e\xbf\x47\x98\x40\x19\xf9\xb5\x89\xa8\x13\xdb\x3e\xe0\xf4\x99\xd8\xf6\x57\xe7\xd1\xfc\xae\x0f\xe1\x29\x14\x2a\x42\xcf\x43\xad\x09\xcd\xe7\x54\x4f\x84\xa9\xac\x10\x02\x66\x90\x48\xbf\xb0\x0c\xaa\xde\x04\x52\xe3\xfc\x56\x41\x76\x48\x46\xff\xa5\x62\x11\xc4\x83\x48\xd5\xa6\x91\x0b\x8d\xa6\x37\x56\x8e\x34\xef\xc4\x38\xd3\xdc\x53\xc2\x79\xce\xa0\x22\x64\x28\x18\xcd\x25\x99\x98\x14\x2b\x56\x29\xac\x92\xfe\xbe\xa0\x59\x4c\x2d\x9a\xb1\xe2\x0e\x98\x2b\xc9\x46\x8f\x99\x9a\x9b\x8a\x7e\x7b\xa5\x18\x21\x46\xae\x70\x81\xf4\xe8\xe0\x1c\xd1\xc1\xd7\x24\x9b\x60\xa0\x2b\x05\x48\x77\x09\x8b\xdd\xbd\x0d\x81\xfc\x6a\x4c\x10\x29\xea\x71\xcf\x47\x84\xd3\x43\x32\x75\x44\x2c\xb0\xb3\x69\xfe\xc3\x66\x3d\xa6\x59\xb3\x50\xeb\x25\x5d\x56\x11\x51\x5a\xa7\x74\xef\x01\x88\x8e\x04\xef\xdf\xcc\x1b\xe0\xc8\xc9\x39\x75\x6c\x91\x33\xd8\xe7\xa2\xa1\x18\x39\x84\x17\xc8\x30\xe8\xf5\xc0\x56\xe5\x78\x56\x80\x4c\xe6\x8e\x72\x78\xff\x3d\xdc\x55\x31\xd7\xa3\xa1\xe4\xaa\x4d\x86\x3a\x26\x4e\x06\x94\xb7\xf5\x60\x93\x92\xb6\x81\x53\x59\x5e\xb5\xb2\x4b\xe5\x72\x97\xa1\xc7\xd6\x1b\x5b\xbe\xd1\xe2\x92\xb0\x64\xc6\xd1\x0e\x8c\x28\xde\x53\x05\x69\xef\xab\x90\x38\x12\x63\xb6\xed\x90\x91\x54\x89\xc9\x95\xb6\x2c\x94\xa6\xaa\x34\x63\x8b\xde\xc6\x29\x99\xc9\xf1\x9c\x91\xe2\x6b\x09\x60\x20\xe6\x54\xab\x4b\x7d\x1f\xb5\xa6\xb7\x36\x96\x32\xad\xff\x72\xcb\xbf\x65\x27\xad\x34\x53\x2e\xe2\xeb\x96\xda\x8d\xc4\x60\x9a\x63\xc3\xb9\xc6\x16\xe8\xda\x79\x1c\xdf\x57\xda\x8a\xd3\xc6\xc0\x83\x3d\x9f\xa6\xf9\x0d\x9f\xbb\x9c\x9a\xf3\xa2\x05\x9c\x0e\x9d\x4c\x6c\xbb\xf7\xad\xa3\x42\xde\xdb\x0d\x3d\x0c\x2c\xe0\x26\x10\xe5\x23\x39\xa5\x93\x60\xd5\x20\xcc\xa0\xfa\x54\x9b\x60\x59\xe4\x26\x01\x10\x9b\x60\x32\xf5\x0d\xf4\x80\x48\x6b\x27\x76\x6d\x88\x49\x04\x15\xed\x2e\xb2\xda\x92\x34\x06\x03\xec\xba\x99\xbb\x0b\x76\x21\x32\x57\x33\xff\x61\xf0\x0b\xc1\x21\x8e\x39\x87\xc8\xb6\xe7\x10\x9d\x52\xa6\x93\x4b\x64\x96\xfc\x6c\x72\x8a\xce\x86\x5a\x43\xdd\x22\x0f\x41\xe1\x99\xa0\x70\xae\xf4\xf5\x5e\x38\x19\x3c\x85\x9b\x2b\xa9\xf7\x32\x36\xca\xaf\xd0\xdc\x6b\xb2\x6d\x03\x98\xe5\x13\x2a\x03\x7a\xf4\xc0\x12\x66\xa5\x94\x94\x4c\x78\x6f\x0c\xe3\xb3\x61\xd2\x8f\xd1\xa3\x89\xf0\xbf\x69\x9b\x92\xb3\x21\x8e\x78\x82\x66\xe8\x0e\x5d\xa1\x5b\xf4\x0d\x3d\x47\xef\xd1\x05\xf6\xd1\x67\xce\xb4\xdf\xe0\x15\x06\xac\x5d\x8a\x52\x6a\xca\x77\x07\xe4\x73\x9a\x01\x44\x95\x19\xaf\x43\xdb\x14\x54\xea\x97\x90\x1e\xea\x5d\xc9\x0d\xf1\x8b\xe0\x19\xbe\xc3\x73\x2e\xd0\xab\x8a\x5b\x33\x09\x2a\x6c\xdb\x94\xcf\xce\x67\x29\xbe\x4d\xe9\x37\xba\xc0\x7e\xd0\xd2\x0f\xb9\x56\x73\x81\xbd\xa0\x2d\xdb\x6c\xdb\xb9\xc0\x5c\x7f\x41\x5c\xef\xb9\x10\xe6\xce\x29\x17\x50\x55\xf5\x0f\x11\x3e\xda\x34\x34\x92\xed\xdc\x89\xd8\x83\x3f\xd5\x56\x70\xa7\xd0\x76\x67\xdb\xce\x1d\xfe\x5c\x55\xb9\xf4\x6e\x5d\xd8\xf6\xbc\x27\x3a\xea\x3c\xc7\xb1\xec\xf2\x82\x3f\x46\x2c\x60\xae\x8f\xde\xe3\x6e\xd7\xa4\x04\x7e\xc4\xab\xe3\xda\xd7\x7b\x58\x55\x9b\x82\x8a\x74\x3c\x51\xad\x94\x4d\xf1\xfd\x12\x4d\xf8\x9f\x6b\x89\xf8\x99\x7c\xdc\xc9\xc7\x15\x1f\xee\xdb\xef\xd5\xd9\xa6\x10\x95\xdb\xe8\x6c\xe5\xa9\x70\xd5\x6c\xd0\x77\xe4\x96\x27\xa5\x46\x11\x53\x5c\x1e\xed\xcb\xfd\x31\x87\x9c\x35\x94\x55\xd5\xfb\xea\x24\x32\xf4\xb4\xf7\x37\x11\x2e\xb9\x50\xea\x96\xd2\x65\x6a\x1d\x07\x63\x9c\x4b\x1b\x68\x23\x9c\x37\x4e\x09\x4f\x61\x67\xb6\x35\x1b\xe9\xf0\x18\x63\x5c\xc2\xaf\xdd\xb5\xb6\xc5\xaa\x92\x4c\xc4\xba\xb9\x4e\x18\x2d\xe7\x24\x36\xa6\xaf\x69\x14\x5a\x64\x2a\x77\x86\x0a\xe7\x43\xff\x1b\x49\x17\xd4\x2a\xe9\x9c\x14\x42\x30\xd4\xb2\xf7\x32\xcd\xe3\xaf\xda\x36\x06\x10\x5d\xd9\xb6\xf3\xbb\x43\xd1\x14\x4d\xd0\x35\x9a\x21\xa9\xb8\x5e\x8b\x79\x25\xdf\x6f\x39\x61\x8b\x11\x2e\xf8\x9f\x6b\x45\x1d\x33\xac\xa7\x62\x13\x3e\x7b\x5b\x87\x63\x8b\xa9\x1c\x37\xf3\x38\x45\x3d\x6f\x47\x3b\x99\x84\xcf\xa4\xa0\x64\xc2\x59\x96\x5e\x53\xa8\xed\xf5\x39\x49\x8a\x53\x8b\x58\x71\x9e\xe6\x19\xef\xe2\x2c\x29\x4b\x6e\xf5\x2e\x97\x7f\xa2\xa1\x76\xc7\xa5\x52\xcb\x5b\x99\x2d\x52\x96\x08\x3b\xfb\x2b\xbd\x33\xf7\xda\x9a\xa0\x09\x17\x82\x6c\xde\x3a\xe2\x5a\x49\x39\x72\xb6\x47\x1c\xd7\x0f\x7b\x1e\x0c\xae\x46\x8e\x46\xa3\xa7\xf4\xa5\x24\x8b\xf3\xd9\x5c\x78\x24\x74\xfc\xf6\x1a\x1e\x38\x5c\x82\xa1\xd7\xa8\x38\xb5\xf2\xc2\x9a\xe6\x69\x9a\xdf\xd0\x89\x75\x79\x67\x11\xe1\x1a\x64\xe4\x72\x91\x0a\xd7\x07\x9d\xcd\xd9\x9d\xf0\x1e\x08\x0e\x5f\x4f\x11\xec\xa3\x12\x27\x9c\x06\x0d\x0a\xef\xb0\x0d\x1c\xc9\xe4\xe7\x9c\xb9\x09\x67\xd2\xd5\xa8\x19\xee\xe0\x0e\x37\xf6\xc8\x55\x55\xb5\xb0\x70\xc7\x79\x48\x1b\x0d\x86\xc9\xb2\x69\x1a\xc1\x15\xe6\x29\xad\x94\xf2\x11\x2b\xa5\x35\x9e\x1b\x8c\x14\xad\x10\x5d\xd9\xf6\xfa\xc0\xdd\xd6\x86\x4b\x8b\x98\xb4\xe1\xa2\x27\x4c\x23\x7f\xa6\x10\xdd\x2e\x39\x3f\x45\xcf\xe1\x0a\x4b\x5d\xdd\x75\x5c\xca\x98\x7d\xde\x22\xa7\x06\x73\x06\x29\xfe\x7a\x87\xef\x97\x7c\x58\xc4\x82\xb2\x33\xdd\xac\xbd\xe0\x93\x7d\x61\x24\xa3\x04\x87\x51\x3d\x01\xfd\x21\x67\x75\xd3\x46\xb9\x29\xc4\x66\x7e\x61\xc1\x26\xf8\x7e\xb9\xfc\x1e\xf6\x9c\x40\xd4\x09\x48\x8b\x41\x09\x06\x3d\x95\x0c\x5a\x0d\x34\x83\x68\x73\x0f\x84\x8b\x68\x4d\xa9\x11\x6e\x1b\x3e\x06\xd7\xcd\x18\xcc\xf4\x18\x94\xa3\x7a\x14\x82\x2e\x43\x32\xe1\x33\x7f\xa2\x18\xa6\x9c\x28\x56\x9c\xcf\x66\xc4\xba\xa4\xec\x86\x52\xa5\x2c\xc7\x79\x9a\x52\x15\xe3\x96\xb1\x22\xa1\x5c\x8f\x9f\x4b\x39\x96\x63\x6e\x68\x22\x31\xc5\xa7\x5b\x79\x08\x44\x68\x3a\x79\xc8\x43\xc0\xa0\xd4\x10\x0d\xd3\x3e\xd6\xa6\x7d\xaa\xa8\x60\x51\xcf\xa6\xa6\x54\x37\xe2\x5b\x1a\x19\xd1\xae\x87\x9e\x30\xef\x85\x6c\x9b\x56\x95\xb4\x47\x37\x8f\x9b\xd1\xd6\x0a\x5c\x73\x63\x76\x97\x23\x3e\x51\x12\x74\x87\x52\xb4\x40\x73\x18\xe4\x23\x15\xb8\xc7\xd3\xa5\x06\xa0\x3e\xc1\x40\x7d\x59\x98\x75\x8b\x40\x89\xcd\xd4\x30\x72\x26\xdb\x81\x0d\x83\x09\xee\xf9\xcb\xef\xb0\x35\x57\xc6\x1c\x88\x20\xbf\xe7\x70\xf4\x06\xf7\xbc\xc0\x99\xd9\xf6\xfa\xc4\x35\x35\xa1\x29\x5a\xd4\x1b\x72\xe7\x98\xa1\x19\xe6\x4a\x9e\x54\xd0\xfc\xe1\x41\xb3\x43\xfb\xf1\xd9\xda\xf3\xeb\x39\x2a\xcc\x70\x62\x4e\x51\xae\x5d\xe7\x85\x53\xfb\x48\xc4\x1e\x2e\x83\xb0\x01\x10\xb3\x8c\x08\x6f\xd4\xc1\xfe\x83\x6d\xae\x6a\x0e\xc2\xd1\x45\xe0\x14\x63\x1c\x8f\x62\x2c\x4a\x92\xd1\x75\x30\x91\xb2\x47\x7a\xe9\x24\x1b\x8d\xaf\xf3\x99\xe0\xa3\x33\x21\x68\x38\xd7\x4c\xa6\x49\xbd\x3a\x25\xcf\xaf\x70\x72\x7c\x70\x7c\x86\x9d\x12\x13\x68\xdb\xa5\x08\x5c\x29\xfb\x07\xc7\x41\xdf\x87\xe7\xb8\x56\x9f\xc4\x16\x80\x51\xcd\xb2\x6b\xb9\x66\xf2\xee\x9b\x64\xc2\xae\x65\xd3\x52\x2e\xcb\x4e\x9f\x5a\x09\x33\x0e\x08\x4b\x69\x59\xca\xb3\x2e\x72\x2e\xc9\x82\x74\xb4\x0a\x78\xd6\x51\xab\x09\x7d\xe0\xcc\x31\x73\xf3\xbe\x18\x41\x0f\x2e\x93\xa9\x73\xe3\x10\x28\xfc\x27\x9b\x71\xa8\xfc\x27\xa2\x84\xb0\x2d\x25\x42\xbf\xa7\x6c\xef\xd2\x21\xca\xd9\x46\x64\x58\x89\x1e\xcb\xfb\xda\x9d\xdd\xf6\x54\xa3\x4d\xf4\x74\xea\xf4\xd2\xb6\xcc\x3e\x9b\x43\xdb\x16\x0e\x6e\xb2\xe6\xe0\xde\x0c\xa9\x70\xb3\xa7\x6d\x4f\xe6\xf9\x5c\xec\xe5\x31\x93\x20\xe2\x5d\x81\x33\xd7\xad\x49\x62\x05\x86\x7b\x6e\x94\x5c\x8f\x1e\xf2\x04\x2f\x46\xbe\x3b\x0b\x66\x30\x88\x25\x77\x5d\xb4\xbc\xc6\x62\xe3\xe7\x8e\x94\xd3\x62\xf5\x75\xc4\xd1\x3e\x72\xee\x24\x6f\x7d\xbc\x4a\x18\xdc\x89\x9c\xfe\x83\x39\x67\x9c\x59\x07\x9c\x34\x67\xa3\x95\x86\x2d\x00\x83\x07\x8b\x3d\xfc\x49\xb7\xcd\x19\x84\x27\xc8\x4b\x30\x87\xc4\xb4\xf6\xcd\xd1\x3f\x85\x5b\x0c\xc5\x4f\x82\xdd\x1a\xb6\x4b\xcf\x87\xcb\x26\x86\x5b\xb0\xae\x07\x75\x0d\x41\xa2\x27\x7f\xc0\xfd\xf1\x08\xe7\x69\x8b\xb5\x04\x17\xab\xce\x8c\xcd\x6d\x09\xb6\xb5\x7f\x82\x31\x96\x4b\xee\xeb\x7d\xf4\x20\x7a\x04\xee\x36\x5b\x6b\x76\x67\x9b\x98\x6e\x83\x69\x02\x29\x95\xf6\x4b\x27\x83\x23\xd5\x72\x21\x1a\x7c\xe2\x50\x29\xa7\x7c\x21\xa5\xdb\x3d\xe3\xa3\x6e\x38\x5a\x0c\x63\xda\xb6\x7f\x71\x28\x1c\x3d\x22\x80\x74\xe0\x87\x71\x8e\x4f\x92\x5d\xa5\xd4\xfa\x7d\x91\xf3\xac\x0a\xc9\x30\x70\x1e\x84\x19\xee\x7c\x87\x80\xeb\xae\x7d\x03\xa9\x68\xf9\x26\x48\xe6\x80\xa3\x7e\xa3\x6a\xfe\x07\x49\x26\xc3\xc9\x1a\xc9\x6c\x6c\x4b\xea\x93\x22\xa8\xb0\xd4\x5a\xe2\x4f\xc2\x54\x5f\x21\x9b\x56\x53\x9c\x26\xa6\x8e\x08\x3a\x2c\x6b\x4a\x5b\x2b\x72\xb9\x8d\xd9\x0d\x6b\xd2\xa8\x2d\x8a\xf2\x6c\x78\x78\x64\xdb\x2f\xc3\x32\x82\x0d\x4f\x78\x17\x96\x51\x0b\x8a\x3a\xbf\x43\xb0\x3f\x14\xeb\x08\x31\x2e\xe1\x68\x18\xf8\xfe\x33\x21\x89\x0f\x82\xe3\x43\xf1\x72\x1c\x78\xf0\xdc\x93\x82\xa0\xc0\x44\xec\x53\x2f\xce\xbd\xd3\xa2\xdf\x87\x0e\xc1\x5f\xb6\x02\xf4\x1c\x7b\xa3\x1c\x3b\xf9\xd9\xd9\x01\x74\x49\xd0\x0e\x38\xb9\xa6\xb7\x64\x42\xe3\x64\x46\xd2\x76\xc4\x49\x0d\xff\x2b\x27\x6f\x63\x51\xce\x17\x45\x7f\x32\xce\x9b\x96\x31\x99\xd3\x7a\x41\x08\xc0\x9d\xf6\xa0\xea\x29\x56\xaa\x29\xc6\x29\xac\x63\x8a\xb5\x0b\xfd\x67\xa7\xd8\x24\x5f\x5c\x6e\x9c\x62\xad\xe6\xbf\x47\x87\xec\xae\xdd\x54\x24\x7b\x6b\xd1\xf4\x1c\x0b\x9c\x1c\x0f\xb8\xba\xb7\xc9\x77\xb5\x3a\xbb\x3a\xb3\x6f\xf0\x2a\x27\xc2\xab\x9c\x48\xaf\x72\xc2\xb9\xee\x7f\xce\xab\x9c\x26\xa4\xfc\x1e\xa7\xf2\xda\xd2\x4b\xcb\x9b\x6c\x98\x9b\x2b\x91\xf5\xf5\x52\xcc\xee\x22\xab\xd5\xb8\x89\x6a\xbf\xf1\xff\xd7\xcc\xc6\x34\x5c\xb3\xc8\xf4\x34\x08\x61\x09\x47\x1b\x1c\x9d\xd2\x2e\xc7\x92\x99\x09\xf3\x43\x79\xb4\x92\xa9\xf3\x55\xec\x61\x7e\x74\xd0\xaa\xea\x85\x93\xc2\xaa\x12\x7a\x61\x5a\x55\xfb\xc7\xf2\x79\x30\x54\xbf\xf7\xe5\x53\x1a\x0a\x69\x55\x1d\xe9\x0f\x27\xea\xa9\xd2\xf7\x9f\xa9\xef\xea\xf7\xc9\x11\x7f\xb6\x56\x31\x9d\x23\x55\x99\xd0\xea\xc5\xf6\xd4\xaf\x5b\xb8\x44\x61\x55\x65\xb6\xcd\x09\xe2\x3b\x18\x78\x81\x73\x53\xb6\x72\x9b\x58\x90\x58\x2a\xf9\xb2\xf0\x5f\xa6\xe2\xf5\x3b\x41\x90\xea\x9d\xe6\x90\x12\x6d\xaa\x9e\x47\x6b\xe9\xfb\xd0\x2c\x2c\x75\xcf\xc7\xb8\x87\x6a\x32\x35\x5c\xba\x97\xfc\x97\x0e\xf9\x13\x06\x79\x6c\x96\x13\x76\x78\xa3\xce\x6a\xc6\xc5\x69\xa9\xa5\x18\x63\x06\xef\x89\xd4\xf8\x36\xac\xed\xf3\x59\x92\x64\x0b\xba\x34\x40\xcd\x55\x65\x62\xbf\x65\x13\xb8\x13\xb7\x6d\x80\x85\xd2\x83\x97\xc4\xb6\x05\x47\x2d\xc4\x9e\x5b\xc9\x51\x65\xce\x7e\x09\xbb\x86\x09\xa2\x1b\x41\x91\x4e\xde\x5e\x93\xec\x86\xb6\x2b\xce\xc5\x32\xdb\xeb\xf5\x34\x59\x88\x48\x2c\x41\x31\x73\xc3\x05\x26\xd4\x53\xce\x06\x91\x58\x8f\xe0\x44\xf9\x46\x2c\x6f\xcb\xd0\xb2\x66\x8b\xa2\x58\xf1\x1b\x01\x08\x83\xae\x0c\xf5\x2f\x39\x9b\xb5\xcf\xbb\xe1\x3a\xe5\x75\xbe\x48\x27\xc2\x33\x7b\x4d\xbe\x51\x8b\x64\x77\x7a\x11\x4e\xf8\x6f\x64\x30\xdb\x36\x4e\xad\xda\xb7\x21\x8d\x81\x0b\x01\xf1\x9d\x6d\xcb\x95\x11\xb3\x22\xb9\xd5\xb2\x57\x6f\xb5\xe4\x5a\x2c\x18\x01\x0d\xb5\x14\xdb\x57\xd8\x43\xb7\x0f\x9d\x38\x74\x75\x76\x7b\x7a\xa5\xcf\xda\xf8\xb6\x9a\x2b\xbc\x8a\x60\x7d\xea\x50\x03\xd6\x7d\x8d\xdd\x6f\xcd\x2e\x2e\x23\x00\x44\xe2\xf2\x9b\x70\x1d\x7d\x77\xa7\x35\x5d\x89\x19\xd8\xac\xe5\xca\x48\xfc\x50\x0e\x70\x55\x01\x7d\xec\x20\x88\x64\x73\x70\x24\xc0\x7f\x24\x5f\x28\xf2\x45\x0d\x44\xb2\x41\xdb\xfe\x26\xf2\x8a\x24\xfe\xd2\x15\xa0\x2d\x46\x58\xec\x8e\x9d\xe6\x85\xd5\x6c\x63\x95\xc7\x6b\x08\x97\x80\x1a\xff\x4b\xb1\x08\x2c\xab\x74\x77\x01\xd2\x27\x6d\x50\x9d\x22\x42\x8b\xd7\x70\x3a\x72\x36\xe0\xf4\x0f\x10\x8f\x19\x2f\xab\x1a\x14\x5e\xf8\x09\x15\x6a\x83\xd5\xda\x8d\x5b\xbb\x40\x44\xbc\x43\x1d\x2a\x21\xb5\x2b\x46\xae\x5a\xb9\x41\xb3\x11\xf4\xf1\x75\xd3\x38\xcd\x4b\x2a\x16\x4e\x4d\x9a\x95\xdb\x35\x7a\xe6\x6c\x7a\xd3\x3a\x03\x68\x35\xba\x66\x85\x83\x28\xe1\x50\x07\xc5\xcb\x35\xd7\xd5\xa0\x78\xaa\xb6\x93\xd4\xa1\xd7\xf8\x7e\x69\xca\x75\x7c\xbf\x94\xaa\xfe\xc6\x50\x1d\xdb\x76\x0c\xb1\xbd\x31\xb2\xaf\xd7\x72\x3a\x9c\x7b\x5c\x76\x8a\xb0\x16\xa8\x3c\x2a\x64\xbb\x78\x9c\x75\xfd\xa9\x89\x3b\xd9\x22\x7c\x43\x2a\x69\x61\x84\xd6\xa3\x4c\x4c\x55\x47\x47\x16\x9f\xf9\x3a\xa4\xa0\x0e\xeb\x17\xea\x95\xd0\xa6\xba\x9c\x5d\xe6\x1a\x5f\x66\xc9\x4a\xc0\x9f\x08\xcb\x54\x31\x99\x7f\x24\x6c\x48\x46\x60\x2a\xce\x21\xe4\x68\x2b\x20\xf3\xcf\xe1\x31\xd1\xf1\x6d\x0f\xa3\x70\xa9\x2a\x15\xae\x32\xc5\xb3\x5e\xa3\x0c\x8e\x5e\x87\x59\x24\xad\x0d\x18\x7c\x90\x3a\xa3\x9c\x51\xb5\x79\xd0\x60\xbb\xd6\x1d\x97\x06\xb1\x79\xb5\xe6\xa0\x4f\x75\x10\xba\xd5\xa6\x48\xdd\xcd\x99\x5c\x7f\xbb\x6c\x43\xd8\x8a\x14\xc6\xfb\x86\x06\x0b\x03\xb2\x4a\x33\xa5\xb0\x51\x66\xa4\x58\x8d\x06\xfe\x5b\xad\x16\xc8\x8e\xf4\x7d\x34\xd7\xee\x7c\xa3\xbf\x6b\xd3\xd8\xb6\xef\xd4\x79\x95\x2d\xfc\xe7\xa8\x3d\x41\x45\x6c\x6b\x96\x67\xfd\xe7\xef\x5f\xbc\x7a\x65\x04\x25\xcb\x00\xf8\x24\x63\xb4\x98\x17\x54\x2c\x42\x97\xc2\x38\xd0\x5b\x6b\xea\x2d\x58\xab\x61\x8c\x1b\x6c\xbf\x83\xa3\x2d\xc6\xe1\x11\xd4\x75\x84\xb8\xf5\xf5\x14\x5c\xb7\xf3\xc4\x39\x37\x35\xd1\x34\x6b\xe6\x2d\x24\xb7\xce\x31\x13\xdb\xbb\xe4\xb6\x7d\x19\x49\x4b\x75\x5c\x3d\xad\xe7\xbc\x6d\xcb\xb0\xe6\x87\x8e\xc1\x54\xd1\xce\x0f\x7f\x76\xa8\xf2\x8a\x22\x71\xc6\x27\xc6\xab\xa7\x7f\xf2\x2c\xf5\xf9\x61\x5c\x43\xde\x69\x8e\x15\x90\xfb\x0c\xf5\x4e\x0f\x8e\x47\x5e\x99\x07\x64\x1c\x74\xd6\x11\xf6\x6b\x38\x98\x61\x66\xfa\x90\xb1\x8f\x32\x73\x09\x59\x9e\xf5\xd7\x24\x9d\x65\x35\xd4\xa7\xf0\xaf\x4e\x66\x1c\x64\x50\x8f\xff\xca\x61\x6e\xed\x23\x42\xfe\x29\x8e\x39\xd8\x69\x9d\x6e\xd4\x6b\x8e\x95\xd0\x27\x00\x1a\xe7\x87\xe4\x6b\xe7\x87\x30\x27\x0f\x93\x68\xf5\xe0\x34\x7d\xd0\x82\x1c\x32\xde\x82\x67\x6c\xb7\x12\xd6\x80\x8f\x8d\x84\xfa\xaa\x16\x2f\x6a\x9f\xe4\xd1\x44\x59\x68\x7f\x5b\x4d\x2f\x49\x66\xd0\x12\xb2\x2e\x17\xcc\x9a\xe6\x0b\x71\x27\x4d\x41\xdb\xb7\x9b\xe8\x0b\x36\x7e\x5b\xbd\x8a\xe3\xdf\x0f\xdc\xa5\xd1\x32\x5f\x13\x79\x04\xde\x23\x28\xfa\xed\x81\x13\x1d\x12\x08\x77\x14\xde\xbb\xbf\x2e\xbb\x6e\xfa\xe8\x3c\x34\xe2\xdf\x7f\xee\xd0\x08\xb1\x39\x3f\x38\xfa\xa3\xe7\x47\x1c\x7d\xef\x39\x01\xcd\x56\xb0\xc4\x3c\x6e\xb7\x39\x48\x42\xed\xbe\xbd\x5c\x4c\xa7\xb4\xd0\xc7\x45\xd4\xbc\x29\x33\x36\x9e\x26\xfa\xf8\x86\x74\x31\xcb\x70\xb1\x4c\x8c\xed\x44\x57\x94\xbd\xcf\x92\xf9\x9c\x76\x5d\xb6\x50\xfb\x1b\xc4\x42\x8b\xd1\x1c\x34\xf4\x3c\xa9\x76\x61\x5a\x55\x07\x48\x70\x96\x67\x87\xe2\x8e\x06\x54\xe0\x16\x48\xa7\xc5\xb9\x67\xdb\xe2\x40\x15\x30\xf6\xc6\xc5\x38\xfb\x9f\xff\x63\x6e\xf1\x07\xcd\xc1\x2b\x4d\x43\x62\x9e\x3f\x67\x4e\xd1\xd7\x31\xed\x45\x1f\xfb\xed\xbe\xf6\x8b\x73\xb6\x37\xec\xfb\xf0\x3e\xc1\xc0\x1a\x0c\x06\x16\x40\x85\x8b\x0f\x8d\x25\x19\x75\x98\x4f\x1b\x1e\x72\x66\x36\xa4\x59\xdf\x1f\x04\x90\x28\xf0\x1c\xc2\xe7\x74\xbf\xd5\x92\x06\x2f\xaf\xc1\x23\xfd\x1a\x3c\x7d\x88\x35\x36\x2b\x95\x8c\xb1\x40\x04\xa2\xf6\x01\xd6\xd0\x4d\xdc\xd2\xcd\xdd\x8e\xb3\xad\xdd\x15\xa4\xb8\x49\x7d\x64\x3e\xf8\x04\x96\x28\xd9\xea\x28\x0d\x94\x61\xd0\x1c\xa0\xa1\x89\xcd\xb6\x9d\xcc\xc5\xbb\x49\xc6\xd5\x91\xe6\xb0\x8d\x5d\x60\xed\x42\x94\xb9\x18\x10\x26\x85\x2b\x50\xc7\x90\x88\x3d\x3e\x3e\x74\x01\xb2\x24\xd9\xd5\x5f\xe4\x4f\x6e\xd8\xd3\xaa\x72\xd4\xd1\x1d\x0d\x15\x3a\x42\xaf\xe6\x55\x06\xbc\x8b\xdc\xc4\x31\x4f\xdd\x48\x56\x66\xea\x32\x42\xcf\xfe\x83\x27\x70\xc8\x2b\x9b\x9a\xa9\x97\xb7\x58\x3e\x0e\x9b\x9b\x39\x06\x49\x16\xa7\x8b\x09\x1d\x4c\xf3\xe2\x25\x89\xaf\x5b\x57\xb4\x65\x58\x17\x5c\x42\x44\x43\x16\x75\xe7\x5a\x4f\x15\x6d\x31\x61\x27\xd7\x86\x3c\x93\xce\x8b\xc6\x0e\x55\x9a\xa7\xa8\x5c\x1d\x3d\x44\xe5\xfb\x34\x49\x19\x2d\x9c\x2e\xf6\xb7\x72\x90\x11\x83\x4b\x43\xe2\x90\xfa\x1e\x05\xd5\x2b\x5c\xf7\xaf\xaa\xf4\x91\xf1\xda\x05\x60\x78\x03\x9a\x8f\xda\x4e\xc4\xcd\x69\x9e\xeb\x25\x3b\xb1\x20\x17\x63\x73\x32\xf9\x87\xe8\x9c\xf6\xea\x49\xeb\x51\x25\xb7\xcf\xfd\xfb\xd0\xec\xe0\xe5\xaa\x9d\x3a\x38\x96\x0f\x9d\x96\x68\x75\xf4\x1b\x37\x39\xd5\x9e\x10\xb9\x85\xdf\xd2\xbb\xfc\x95\xe9\x9b\x64\x57\xfc\xbb\x08\x1e\xe7\x35\x94\xbc\xde\xd6\xbe\xc8\x01\xe0\xb8\x55\xa4\xdb\x3e\x29\x00\xe7\xf2\x70\x1c\xa0\xdb\x03\x28\x8c\x56\xf2\xea\x63\xfa\xeb\xbc\x1a\x3d\x1d\x79\xd5\xb9\x02\xe6\xa9\xd9\x9c\xee\x04\x25\xe1\x7b\xd9\xcf\xe0\x7e\x89\xf4\x72\x06\x7f\x57\x71\x45\xfc\x55\xfb\x34\xc4\x5d\x70\xa6\xf4\x80\xf7\x99\xf2\x7c\x68\x6f\x07\xce\x9a\x0b\x1a\x54\x0a\x95\x91\x1c\xd8\x43\x0c\xd7\x9b\xb4\xb5\xb2\x42\xcf\xd8\x29\x15\x5b\x5f\xf5\x97\x90\x36\x44\x9d\xc0\xd5\x9b\x1a\xba\xcf\x54\x58\xc5\x09\x5c\x12\x7d\x0b\x95\x8a\x89\x56\x27\x04\x75\x60\x40\x1f\xb3\xbd\x0a\x9a\x3a\xd8\xda\x0f\x28\xae\x2b\x33\x7b\xc0\xf5\x21\x69\xf2\x89\x7c\x43\x9e\xcf\xf8\xd6\xca\xea\xeb\xac\x9d\x47\x17\xff\x5a\xe4\xd9\x95\x95\x89\x5b\x82\x04\x4d\xe9\x72\xc2\xf9\xf3\x5e\x1d\x11\x21\xe0\x37\x8e\x9e\xe4\x76\x27\xc5\x99\xbe\x15\x89\x5b\x82\xcc\xf8\xc9\x20\xea\xd1\x01\xfd\x46\x8b\x3b\xa7\xe3\x6a\x22\x6a\x9e\x4f\x4b\x96\x2b\xe7\xb9\xbe\x9f\xd3\x58\x2e\x33\x68\x3a\x2f\x17\x73\x5a\x28\x5a\x2f\x2d\x47\x98\x07\x4a\xeb\x93\x00\xaa\xdd\xcf\xb0\xd9\x99\x2d\x27\x51\xeb\xeb\x40\xee\xda\xed\xb1\x2d\x01\x2b\x36\x03\x26\xce\x19\x90\x13\xac\x05\x15\x27\xf9\x87\x60\x32\xbe\x0d\x0c\xd7\x12\xbd\xb1\x88\x73\xaf\xd8\x53\x40\x91\x9e\x50\x01\x5b\x9a\xda\x20\x26\x5b\x28\x75\xc6\xa5\x5a\xc7\x5b\x8a\x91\x41\x7d\x65\xdf\x8e\x71\x18\x14\xbd\xb1\xb2\x06\xa8\x50\x5d\xa6\xc6\x09\x20\x5a\xca\x8b\xcb\x06\xab\xf7\x8d\xc9\x2b\xbe\x96\x11\x3a\xf9\x53\x2d\x37\x33\xa8\x0b\x86\xf6\xe9\x51\x51\x83\xac\x50\xd6\xc8\x11\xb0\xf7\xa5\xdc\x6b\xee\xe0\x84\xa8\xfd\xa5\xa0\x57\xf4\x76\xbe\x96\xdc\x50\x78\x77\x07\x3b\x72\x06\xfe\x31\xea\xa8\x39\xf0\x4f\x50\x37\x28\xc1\x50\xdc\x9d\xd6\xa1\x4d\xfb\xde\x7f\x7c\xb4\xe4\x5d\x87\x11\xd2\xbc\xbc\x85\x21\x96\xcc\x68\xc9\xc8\x6c\x05\x0f\x72\x8f\xf9\x43\x68\xbd\x4c\x32\x52\xdc\xb5\x4b\xe4\x33\xb2\x52\xc7\x9c\x24\x62\x3f\x96\x91\x54\x52\xb6\x01\xad\xaa\xea\xc0\x3f\x40\x2b\xc0\x04\xc3\x21\x6a\xb7\x16\x0c\x8d\x4c\xb2\xb5\x60\x78\x88\x5a\xad\x05\x43\xa3\xf2\xa6\xb3\xc1\x50\x58\x35\xea\x32\x3c\x8e\xf7\x6d\xaf\xe9\x7c\x0c\xef\x9d\xc8\x2a\x59\xb1\x8a\x84\xdf\x57\x90\xcd\x31\xf7\x28\x56\x64\x6f\x7d\xd4\xaa\x23\x18\x1e\xa1\x56\x2b\xc1\x50\xf4\xe4\xf1\x4b\xf4\xfe\x08\x05\x35\xd7\x33\x3e\x40\x45\x99\x3c\xa5\xcd\x24\x91\x3c\x5f\x49\x49\xa4\xff\xa9\x49\x98\xa6\x39\xd9\x48\x0e\xbc\x9a\xc0\x37\x06\x55\x96\x0a\x7c\xa3\xef\xbc\xe6\xc0\x37\x4a\x09\x70\x82\xa1\xb8\x40\xd1\xbc\x90\x90\x63\x67\xeb\x1b\xe7\x4c\x25\x3a\xc1\x21\xe0\x5a\x06\x40\x40\x2d\x2c\x00\x04\xea\x55\x0b\x80\x40\x73\xbe\x3a\x40\xa0\x3e\x4e\x5d\x64\x57\xe7\x8b\x03\xb1\x15\xbd\x3e\x1b\x1d\x20\x60\xde\x0d\x05\x22\x54\xe0\xb0\x5e\xf8\x35\x42\xa9\xeb\xf8\xea\xc8\x18\xa5\x75\x83\x56\x9d\x05\xaa\x1d\x60\xed\xa3\x36\x3b\xd4\x71\xa1\x9e\xae\xa9\xce\x86\xb0\xcb\x9c\xdd\x8f\xca\x77\x9b\x0b\x34\x08\x03\x89\x1b\x46\x49\x69\xcd\xa8\xf0\xb1\x08\x76\x96\x30\x15\xf8\x0f\x76\x5d\x61\x38\xd5\x12\x71\xb0\x5b\x2b\x98\x62\x3b\xa2\x7c\x15\x3a\x3f\x53\xcb\x55\xad\x9b\x9d\x38\x5e\x31\xd3\x6f\x46\x9c\x94\x16\xce\x3d\x6f\xb9\x72\x5e\x23\x66\xcd\xbb\x19\x58\xd5\x88\xf3\xa5\xbe\x2e\x4d\x0f\x10\x66\xad\xc3\xf3\x1b\x08\xea\x61\xc3\xcc\x3c\x1e\xdf\x04\x51\x8d\xa5\x00\x52\xbd\x9b\x19\xcc\x01\xc6\xac\xf5\xb3\x75\x6e\x98\x31\xf0\xd8\xc9\x31\x6b\xa5\xa8\x9c\x04\xdf\x2f\xf5\x22\x52\x6e\xdb\xe6\x80\xe6\x1d\x03\x4a\xe1\x7d\x6e\x6a\xae\xe6\x48\x93\xb0\xbe\x54\x82\x6b\xc3\x7c\x50\x08\x44\x62\xf0\x8b\xb6\xe5\xcf\x07\xe5\x01\x22\x10\x8b\x81\xda\x46\x56\x4b\x7b\x9c\x14\xca\x5a\x23\x52\x27\x0b\xad\xd3\x80\x54\x57\x4c\x0d\x85\x4f\xc4\xc7\xcf\x1d\x15\x13\x71\x87\x15\x77\xf7\x62\x3a\x4a\xef\x01\x80\x83\x1f\xc5\xcb\x32\x26\x5c\x65\xce\xe1\xfd\x52\xda\xaf\x0d\x5b\x11\x26\x2f\x78\xfe\xe3\x8b\x9f\x5e\x5e\xfc\xf5\x6f\xaf\xfe\xfe\x8f\xd7\x6f\xde\xbe\xfb\xf9\x7f\xff\xf2\xfe\xc3\xc7\x7f\xfe\xfa\x5f\xff\xfa\x8d\x5c\xc6\x13\x3a\xbd\xba\x4e\xbe\x7c\x4d\x67\x59\x3e\xff\xbd\x28\xd9\xe2\xdb\xcd\xed\xdd\xbf\x3d\x7f\xb8\x7f\x70\x78\xf4\xec\xf8\xc4\xdd\xc3\xe3\x6c\x5c\x80\x15\xbe\x98\x38\x1d\x1b\x64\x95\xc0\x42\xf7\x1c\x27\x41\x3d\x83\x15\x11\x07\x2b\x06\xa1\x5e\x55\x6f\xe2\x3e\xea\x85\x3f\x71\xb2\x51\x7d\xd8\x1a\xc1\x85\x71\x15\x68\x7e\x9a\xb9\x2e\x94\x01\xdf\x0c\x93\x7a\xd0\xa8\x76\xd2\x88\xa8\xb3\xa3\x03\x19\x4c\xc1\xce\x3c\x23\x4c\xc5\xc5\x47\xf5\xae\xe3\x1f\x8e\x31\xf6\x96\xa8\x9e\x32\xc1\xba\x97\x24\x11\x50\xd4\x17\xe6\x84\xe3\x62\x9c\xe1\x68\xef\x0a\x01\xb1\xb5\x5a\x7b\x79\x51\x89\x0b\x75\xae\x90\x3a\xa5\x98\x61\xef\x94\x9d\x91\x53\xe6\xba\x90\xfd\x70\x80\xb1\x67\xdb\xcc\xb6\x9d\x85\x34\xe4\xe3\xf3\x73\xff\xc8\x1e\x1e\x1e\x42\xd4\xa4\x1c\xb7\x12\x86\x87\x87\x76\x2c\x0e\xa7\x8f\xcf\xce\x8e\xaa\xe6\x86\x82\x5c\x77\xd3\xb8\x8e\xc5\x13\x11\x5c\xe4\x87\x83\xa7\x47\x70\xf4\xfd\x8d\x04\xe2\x68\xc5\xa4\x55\xd2\x5b\x2d\x39\x14\x09\x30\xf0\x87\xf2\x74\x8a\xe6\xcb\x81\xcc\x9a\x8d\x32\x71\x9a\xa1\x7a\x38\x0b\x18\xc8\x69\xb3\x80\xc1\x62\x89\x6a\x2e\x12\x74\x70\xa6\xcc\xb6\xb3\x41\x52\x4a\x82\x76\x28\x5c\xa2\x9a\xa7\x74\x0c\x8b\xbc\x1d\x56\x9d\x99\x4c\x8d\x41\xe8\xc0\xfd\x7e\x8d\xfb\xc4\xc5\x65\x98\x9f\x9f\xfb\xc7\xf6\xd1\x7e\x84\xea\x9f\xc3\xd6\xcf\xa3\xe6\xd7\xd1\xbe\x9d\x47\x10\xc9\xe0\xc5\x63\xe8\xd2\x90\x45\x26\xc6\x33\x4c\x7e\xd8\x87\xa3\x3f\x5a\x71\x20\x16\x3a\x8c\xe2\x5e\x2b\xff\x81\xf1\xeb\xec\xcc\xa8\xeb\xe8\x20\x82\x81\x58\x15\x30\x3a\x35\x6c\xe5\x3e\x68\xe5\x6e\x8a\xa1\x64\x59\x2b\x18\x86\x51\xe4\x6f\x7b\xbc\x6d\xed\x3a\x5b\xd5\x91\xba\x78\x01\xd7\x56\xfe\x1c\x27\xa8\xc7\xb6\x3e\x92\x54\x1d\x07\x05\x58\xb1\xa0\xfa\xaa\x9d\x0f\xe6\xfb\x2f\x1f\x5f\xca\x9b\x7e\xaa\xea\x50\x67\x9e\x92\xb4\xac\x73\x5c\xb4\x7e\x3c\x7f\xfd\x5e\xe5\x7f\x88\x11\xa8\xfb\x80\x36\x36\xf8\x38\x81\xd7\x27\x5d\xfd\x28\xaf\xae\x10\xe7\x60\x6d\x3e\x55\xd6\x98\x05\xf7\x69\x7e\x43\x8b\x98\x94\x9d\xf3\x87\x8e\x24\x84\x81\xea\xec\x12\x2d\xe6\xf3\x47\xb3\x0b\xc0\x03\x85\x81\x25\x8a\xc9\x8c\xa6\x8f\x65\x97\xb5\x4b\xec\x2d\x97\xc8\x14\xe7\x01\xa8\x61\x03\x9d\xe4\xb5\xed\xaa\xc8\x9a\xf3\xd6\x90\x62\x9c\xce\x7e\xa1\x57\x2f\x6f\xe7\x0e\xf8\xe4\x8c\x82\xb0\xef\x46\x23\x67\x14\x78\x55\xe8\xf7\x4f\xa2\xd0\xeb\x9f\x7c\x8e\x9e\x42\x67\x14\x8c\xc7\x03\xfd\x8b\x67\x08\xe9\xcb\x48\x64\x56\x07\x3e\x8e\xaa\x3a\x83\xdb\xf9\xb9\xf9\xa5\xaa\x71\x46\x41\x10\x7a\xfd\x43\x95\x0a\xdd\xa6\x05\x99\x79\x3c\x1e\x38\xa3\x20\xc9\xa6\xd5\x2b\xfe\xff\xdb\x0b\x58\xc9\xa4\x8c\x64\xd5\x5b\xf2\xb6\x7a\xfb\xfc\x2d\x84\x4f\x00\x54\xb7\xd9\xed\x7d\x32\x5a\xa4\x7b\xdb\x48\x56\xa9\xe9\x6f\x33\x9d\x56\x62\x73\x6c\xbb\xe7\xf4\x0a\x7d\xeb\x63\x55\x81\xcf\x6b\x17\x5b\x3d\x48\xfb\x46\x1c\x4e\xed\x97\xc1\xa0\x0f\xf4\xb9\x63\xb5\x60\xfc\x2c\x45\xe2\x80\xe5\xaf\x39\x25\xc8\x4b\x88\x61\xe8\x45\xa3\xbe\x1f\xf8\xf2\x04\x7f\xe0\xf6\x8d\xa5\x95\xd0\x8b\xe0\x39\xe7\xcc\x5c\x4b\x6f\x56\x88\x11\xcf\x32\x05\xe2\x08\x02\xc1\xe2\x46\xea\xbe\xee\x9f\xdf\xbd\x7f\xd5\xba\xaf\x3b\x78\xe8\x22\xef\x00\x0c\x32\x92\xc9\x2a\xde\x92\xb7\x01\x6b\x6e\x97\x0b\x80\x88\x46\x77\xd8\xa0\x9c\xa7\x09\x13\x09\x9d\xda\x63\x31\x58\x64\xe5\x75\x32\x65\x8e\x38\xc7\xf3\x82\x23\xdf\xa1\xc8\xf7\xa0\x50\xe2\xc5\x2e\x1a\x1f\x15\x9d\x65\x99\x8b\xe9\xd3\x04\x25\x4f\xf1\x91\xb7\x84\x28\x7b\xca\x60\x90\x3d\x35\xea\x61\xbc\x9e\x2d\xd9\x85\xec\xe4\x76\xdc\xc2\xb6\x1d\xfa\x83\xdf\xc3\x5e\x55\x65\x2b\xf7\xa1\x3b\x14\x3e\x20\x52\xeb\x35\x40\x6e\x30\x25\xe5\x5b\xf2\x96\xe7\x55\x5e\x58\x26\xdd\xae\xc6\xf4\xd6\xb7\xfe\x09\x14\x0b\x5f\x2b\xa8\x19\x4d\xf3\xf1\xed\xf3\xb7\xea\x63\xcd\x56\x8c\x8f\xe4\x2d\xa8\x23\x6c\x1f\x1a\x5d\xc1\x92\x37\x43\xc1\x69\xe5\x41\x28\x5e\xbd\xbd\x78\x18\x8a\x57\xd9\x74\x0d\x8a\xae\x3b\xe1\xb7\x80\xa2\xff\x28\x18\xfd\x47\xe1\xe8\xb7\x01\xe9\x1a\x37\x9d\xd3\x1b\x78\xf5\x8a\x5d\xd2\xba\xfd\xdb\x83\x28\xd7\xc7\xe7\x8c\x92\x7a\x56\x02\x6e\x30\x0f\x28\x80\x41\xb2\x05\xbf\x36\x1d\xa8\x6d\xee\xbd\xed\xca\xdb\x83\xdc\xbb\x59\xa5\x28\x5a\xe7\x82\x37\x57\xea\x2e\xcd\xa5\xb8\xae\x1c\xcf\x96\x5b\xf0\xc8\x24\xdb\x8e\x43\x6e\x30\x3d\x0c\xb3\xc3\x93\xe7\xbc\x71\x5b\x23\x69\x05\xbb\x83\x3e\x50\xe7\xd3\xc9\x9b\xaf\x81\x0b\xe4\xb1\x77\x22\xc9\x75\xc5\x4d\xdb\x9e\x60\x42\xa2\x3d\xe2\x0a\xef\x82\xb1\x37\x6c\xea\x80\x4b\xcd\x48\x65\x01\x15\x1e\xe8\xba\xa7\xe4\x2c\x39\x25\xd2\xc6\x01\x9f\xcd\x86\x64\x80\x85\x07\xd4\x0d\x27\xbe\x78\x69\x00\x2b\x71\x7d\x41\x9b\x55\xda\xb6\x2c\xcb\x96\xbc\xcc\xad\x82\x65\xbb\x26\x7a\x8e\xd8\x47\xbb\x72\xbb\x24\x81\x50\x5d\x2a\x59\x55\x47\x87\x67\x5c\xff\xcc\xce\xf0\x33\xaf\xaa\x4e\x9e\xe9\x5f\xbe\x37\x84\x1b\x01\x12\xf1\x39\x1b\x20\x28\x9c\xd5\xb6\xb7\xea\xe7\x67\x80\x5b\x28\xd9\xa2\x29\x10\xc8\x32\x75\x20\x7e\x2f\xdf\xae\xed\x9e\xd3\x2b\xb5\x40\x15\x87\x52\x80\x40\x51\xc1\xde\x27\xa7\xad\x31\x3c\xd1\xf7\x2e\xeb\xcb\x15\x21\xdc\x2c\x75\x31\x45\x05\xf6\xe5\xd5\x37\xc6\x19\x8f\x8d\x8f\x0a\x7c\x06\xe2\xc6\x25\x9c\xac\x89\x62\x88\x6a\x12\x4d\xb8\xac\x35\x49\x54\x4a\x70\x26\x8e\x60\xed\xfb\x5c\x9e\x89\x2a\x6a\x21\xcc\xf3\x2b\xea\x4d\x46\x5e\xa0\xe8\x78\x24\xe9\x35\x09\xfd\x68\x54\x3c\x6d\xce\xb7\xae\xaf\x88\x47\x43\x18\x48\x3a\x5b\xcb\x83\xfc\x23\x18\xb4\x12\x8e\x61\xb0\xda\x99\x00\x70\x5b\x6a\x93\x68\xce\xdb\xa2\x99\xd7\x56\x0b\xe6\x04\x7b\x28\xe3\x18\xeb\x5e\x82\xe6\x82\x39\x43\x99\x12\xcc\xc5\xd3\x64\x05\xa6\xff\xbf\xc4\x32\xfd\xc1\x17\x46\x68\xaf\x83\xbd\xb7\x54\x7c\xe9\x3e\xe9\xd4\xc0\xb9\xde\x02\xbc\x4b\x11\x85\xad\x19\x3f\xc7\x77\x7f\x2d\xad\xb9\xa3\x13\xe5\x31\x23\xe9\x23\xd5\xb5\x4a\x1e\x8b\xda\x56\x92\x8c\xca\xd4\x36\xbd\xce\xea\x5a\xc2\x68\x89\x8c\x5d\x7d\x8f\xb4\x7e\xdb\x6a\xcb\x3f\xe2\xea\xe3\x47\x2e\x3f\xa5\xfa\xc8\xa1\xd9\x90\xa5\x81\x6e\x55\xc0\xa9\xd6\x01\x32\x9d\x89\x35\x82\xc3\x21\x02\x97\x49\x06\x22\x85\xa1\xf0\x18\x81\x3c\x66\x20\xaa\x3b\x19\xfa\x1e\xe2\x95\x80\xa8\xd5\x99\xd0\x3f\x42\xe0\x9a\xde\x82\x68\xb9\x85\xe0\xdc\x62\xad\xb1\x71\xea\xd1\x72\x5e\x24\x33\x02\xa0\x72\xe7\x15\x3c\x7b\xbd\x46\x56\x87\xd2\xdd\x24\xd9\x24\xbf\x11\x37\xff\xca\xd7\x81\x2a\x08\x5b\xce\xbf\x87\x2c\xf5\x4e\xb9\x69\xae\xde\xfd\x61\xf9\xc9\x3b\x22\x8d\x76\xe0\x00\x97\xba\x00\x02\x94\xe0\x6c\x20\xe6\x97\xc3\xd0\x7d\x41\xb2\x2b\x1a\xf4\xbc\xfa\x1e\x29\xf0\x73\x91\x5f\x15\x64\x26\x38\x86\xd8\xbb\x61\xdb\xd2\x07\x7f\x99\x4f\xee\xea\x48\x2d\xf0\xf2\x96\x4f\x90\x32\xc9\xb3\xf7\x8c\x30\x2a\xce\xac\xaf\xb3\x85\x5e\xa4\x8a\x3a\xe0\x79\x51\xe4\x37\xfa\x76\xd5\xa6\x54\x3b\x33\xad\xd3\x45\xb9\xaa\x02\xdf\x59\xc2\x18\xa0\xfa\x2e\xd4\x0d\x5e\x44\x03\x25\x45\x8d\x92\xc4\x44\x89\x64\xf2\x5c\x18\x69\xa4\xf4\x30\x2e\x14\x84\xe2\xe6\x00\x13\x29\x55\xd5\x89\x94\x3a\x9b\x46\x4a\x55\x3d\x88\x93\x56\xde\x95\x1e\xda\x76\x17\x4e\x1e\x2b\x61\x78\xc9\xc5\xad\x4f\x0e\xb8\x20\x49\x4a\x27\x16\xcb\xeb\xcd\x27\xc6\x3d\x9d\xfa\x12\xe9\xae\xea\xe6\xa4\x20\xb3\xf2\x01\xd6\xaf\x82\xb4\x33\x32\xa3\xd2\x10\xeb\xac\x42\x60\x4a\xe0\x16\x81\x1f\xd3\x3c\xfe\xda\xa2\x9b\x87\x8b\xf0\x9e\x8c\x78\x1f\x74\xef\x9d\x1c\x69\xf1\xc6\x0d\x56\xd7\x47\x2c\xf4\x23\x11\xc0\xbd\x92\x0d\xa8\x2e\x01\xd7\x2c\x20\xb2\xc3\x6d\x85\x4a\xeb\x5e\xe0\xef\xf2\x0d\x3d\xce\x92\x61\xc3\xab\x56\x18\xd4\xf6\x21\x09\xdf\xe5\xf9\x6b\x16\xfd\xff\x30\x37\x49\xa6\x8e\xda\xfc\x60\xc6\x3d\x37\x7e\x41\x94\xe1\xbd\xf1\x9e\x13\x5e\x25\xb3\xe8\x69\x7d\x87\x07\x85\xc2\x31\x2c\xe6\xd1\x9e\x50\x5a\xb8\x2a\x23\x5a\x10\x6a\x52\xc6\x87\x03\xe9\x80\xc9\xf3\xfd\xb6\x4a\xbf\x27\xf4\xa3\x50\xdf\xe0\xd7\x4f\x0c\x0f\x49\x3d\xd3\x9b\xb5\xb7\x47\x66\xfc\x26\xf8\xd4\xc0\xd7\x20\x72\x76\x6e\x00\x68\x78\x44\x50\x07\x34\x10\x22\xc3\x19\xc6\x50\xb2\x2d\x81\xc9\x12\x7f\x8e\xbc\x14\x8b\xdf\x13\xf7\x84\x8b\x9b\x16\x5c\xb0\x07\x9a\x78\xc9\xab\x34\xbf\x24\xa9\xba\x62\xed\x4a\xec\xb1\xa8\x0f\xb0\x53\xa9\x33\x91\x9a\x5c\x65\x79\x41\xb9\x1c\x57\xc9\x09\x80\x88\x3d\x44\xaa\xc3\xed\x23\x41\xbe\x97\x54\x1b\x21\xbb\x91\x5a\xcd\xa5\xd7\x8e\xe1\x87\xf7\x1b\x56\x39\xbe\xe5\xc9\xc4\xf2\xa4\xb7\xb8\x03\xbd\xf5\x80\x81\x07\xd1\xb0\x7d\x60\xc6\xf6\x38\x98\x91\x66\xa2\xd6\xa7\xc8\x3d\xe6\x0c\xaf\x7d\x8b\x23\x1a\xdc\x2f\x3b\x57\x14\x86\xdb\xc7\x5d\x7c\x07\xa0\x22\xf4\x65\x7b\x1f\x28\x38\x3b\x53\x6e\x7a\xcd\x60\xba\x61\xdd\x36\x0a\xe2\x7b\x60\x15\x51\x17\x7f\x90\xfd\x79\x0f\xac\x7e\xf8\xd2\x6a\x03\xff\xad\x7a\x55\xaf\x86\x88\xc6\xd4\x82\xc4\x5b\xf3\xfd\xe3\xeb\xd7\x8f\xac\x6e\xb4\xc6\x73\xd3\x02\x9d\xc6\xa0\x69\xaf\xc4\x24\xcb\xb3\x24\x36\xb5\xfc\x1a\xf7\xff\x0d\x96\xa8\x63\xc9\xa2\xfe\x2e\x60\xee\x5c\xa6\xa8\xb3\x08\xf0\x3b\x97\x26\x9a\x2c\xa2\x96\xef\x5b\x8e\x18\x6e\xb1\xd8\xde\x5e\x7d\x48\x36\x5e\xb8\x58\x3c\xcc\x51\xb7\xa1\x96\xdc\x9c\x83\x4d\xb8\xcb\xf7\xd1\x0b\xca\xea\x43\xe1\xc2\x08\x2d\x30\xd5\xab\xa1\x28\xc3\x0b\x1d\xe2\xcb\xce\xb2\x53\xe6\x62\x5f\x54\x94\xe3\x45\xc8\xe4\x5d\x06\xeb\x97\xca\x0b\x7d\x4f\x48\x83\x7c\xe5\x64\x06\x62\x25\x99\x95\xc3\x64\xea\x24\x2a\x03\x22\xea\xe4\x82\x15\x3f\x49\x32\x75\x7a\x65\x4b\xca\x0a\xa3\x3f\xae\x8d\x7e\x62\x54\x1d\x4b\xf5\x8e\xc0\x8d\x42\x76\x9d\x0d\x85\x51\xf7\xd4\xfe\xde\x85\xcd\xae\xa1\xfe\x9e\x81\x94\x81\x77\xff\x81\x91\x54\x3b\x72\xd4\x20\x12\xe3\x52\xbf\x3a\x24\x1a\xc9\xa1\x2d\x3b\x87\xb6\xc0\x25\x1f\xda\xae\x51\x4d\xea\x6b\x85\xcc\x81\x51\xf7\x22\x9b\xa1\x35\xcd\xc5\x43\x4d\x4e\x12\xb2\x08\x87\xb9\xb8\xd0\x4b\x3c\xa2\x68\xe3\x70\xad\x77\x34\x8c\x76\x5a\x7b\xbc\x11\x51\x1d\xcd\x8d\x8e\x92\x95\x8e\x92\xb5\x8e\x26\x98\x83\x83\x8a\x95\xab\x9c\x50\x2e\x80\x2c\x38\x90\x89\x78\x44\xf5\xba\x7d\xde\x4d\x27\xdb\xaf\x50\x6e\x2f\x02\x4a\xfa\x7b\x07\x25\xfc\x59\x8a\xde\xde\x1b\xbf\x2d\xf3\xda\xae\x2f\x6c\x5d\x47\xf8\x5e\xa2\xd6\x1c\x89\xb3\x8f\xcc\x60\x1f\x19\x62\x50\x9e\xb1\xd1\xc3\x38\x0b\x59\x64\x9c\x3d\xf9\xdd\x9c\xe0\x21\x85\x64\xfb\xc0\xef\xef\x18\x61\x56\xac\xc9\xf8\x6d\xe1\x34\x95\x3c\x13\xce\xed\x6d\xb2\x7a\x7c\xdb\x4b\xe3\xf5\xca\xb5\xf1\x07\xf6\x9d\x87\x7e\x3c\xe9\x58\x5d\xdf\x58\xc5\x68\xe5\x97\x33\x0a\xc2\x0f\x2c\xaa\x42\x6b\x3c\x66\x91\x0b\x5b\x1f\x03\xb3\xb9\xd6\x0f\xb9\x58\x2f\x53\x9e\x42\xb9\x5a\x2f\x6a\x78\xea\xfc\x56\x39\x61\xdf\x8d\xe0\x6a\x33\xad\xf2\x70\x04\xe1\xe8\xc9\x76\x63\xd5\x84\x3b\xff\xa1\x45\x74\x7d\x28\x71\xa2\x2d\xb9\xfa\x18\x8b\x42\xa7\x6c\x74\xe8\xb7\xcf\x74\xf2\xd0\x54\x6c\x87\xd9\x69\xa6\x8c\xc3\x9a\xfa\xa1\x58\x1a\x6f\x2a\xaf\x6f\x43\x5b\xf7\xb5\xfc\x44\x18\xad\xdd\x2c\x94\xa7\xc9\x9d\x1d\x19\x76\x59\xe8\x47\x28\xe7\xcf\x61\xd4\xf7\x11\xe1\x6f\xfb\x11\xea\xb1\xf0\x20\x82\xc6\x56\x0b\x5e\x85\xc3\xff\x0c\x3e\x7e\x78\xe1\x08\x50\xe5\x89\xa2\x25\x2f\x71\x10\xa1\x98\x3f\x0f\xb9\x5a\xe1\xb2\xf0\x28\x42\x2c\x7c\x16\xc9\xd5\xa4\x39\xe6\xef\xca\x60\xf5\xd0\x3e\x3c\x9d\xeb\x43\x25\xf6\x4f\xe1\xdc\xc5\xc0\x03\x3b\x73\xec\xce\xf5\x8a\x0d\x0b\x4f\xb8\xc5\x3b\xc5\x47\xf4\xe0\xa9\x73\xe4\x3d\xe5\x50\x7a\x91\x6b\xb9\x0e\x0b\x7d\x3f\xaa\x2a\x4f\x2e\x5f\x08\xeb\x58\xe5\xed\x4f\x21\x44\x29\x7e\x00\x56\x85\xd6\x39\x84\x68\x6a\xdb\xe9\xa0\xa4\xec\x43\x32\xa3\x4e\x3a\xb8\x52\x6f\xb0\x3f\x85\x28\x5d\xa2\x26\xda\x35\xe0\x55\x6c\x76\xa2\xbc\x7a\xff\x6e\xdd\x8f\x62\x4c\x58\xb0\x07\xb6\x0d\xa2\x4e\x93\xcb\xbd\x2f\x65\x9f\xd3\x65\xff\xd0\x3b\x39\x9c\xee\xef\x1f\x1c\x5e\xc6\xc3\x83\xe1\x01\x3d\x79\x36\xa1\x87\x27\x64\xe2\x79\x84\xfa\x47\xcf\xc8\xe0\x4b\xd9\xa6\x6b\x19\x37\xfa\xbd\x55\x04\xfe\x32\x5a\xa2\xfb\x25\x0a\x23\xe8\x80\x3d\xb1\xc9\xcd\xec\xe8\xda\x95\x7d\xaa\x3d\xdb\x5e\xfb\x32\xcb\x27\x8b\x94\x8e\xa8\x53\xd0\xdf\x17\x49\x51\x1b\xdb\x1c\xa4\x38\x9f\xd0\x59\x22\x29\x0f\x06\xcd\x0e\xf0\xba\xb0\x34\xb1\x6d\x5b\x3e\x07\x64\x36\x19\xc9\x57\x27\xec\xae\x26\x42\x14\x06\xd4\x79\x91\x4f\xe8\x1b\x91\x02\x97\x2d\x5f\x60\x0b\xc7\x74\x20\x2b\x7b\x93\x4f\xa8\x03\x38\x72\x00\x5a\xdd\x5b\xd6\x62\x71\xe3\xf1\xa5\xe3\x00\x37\x94\x41\x53\x48\x05\x4d\x21\x90\x67\xfc\xcf\x74\x0a\x10\xb8\xa3\x25\x40\x20\xcb\x41\x34\xf8\x92\x27\x99\x03\x60\xe5\x00\xe8\x02\x08\x9f\x00\x04\x92\xda\x8b\x79\xcf\xf2\xaf\x34\x0b\xda\x7b\x3b\xa5\x2b\x9e\x0d\xe6\x94\x7e\x75\x04\x7f\x1d\xc8\x33\x0a\x27\x62\x5e\xea\x1f\x42\xef\xfe\x0b\x10\xe1\x94\x8e\x87\x79\x81\xbc\xac\xaa\xbd\x71\xa9\x96\x0b\xd9\xa0\x54\x5e\x19\x15\xf2\xc9\x33\x88\xb3\xc6\xf4\xe4\x65\x83\xf2\x6b\x32\xff\x90\xbf\xcc\x26\x0e\x44\x20\xce\x67\xc2\xcf\x29\xc2\xdf\x07\x33\xe1\xa8\xde\xfb\xe4\xec\x3a\xe1\xa7\xdd\xa8\x1a\x8f\x07\xf0\xe9\xee\xa8\x02\x4e\xf8\x09\xa8\x9f\x60\x04\xf7\xea\x20\x03\xd9\x1a\x90\x40\xa6\x09\xa3\x05\x49\x6d\x5b\x46\xd0\xa8\x33\x8c\x1d\x78\x9e\x71\x45\xeb\x45\x9e\x3e\x00\x43\x77\x25\xcd\xbb\x38\x05\x8c\x0d\xca\x3c\x75\xa4\xd5\xa0\xeb\xe3\x5a\xde\x80\x6b\xd0\x1c\x2f\xf2\x4d\x9e\x3e\xd6\xf3\x51\xdd\x99\x7e\xbf\xdf\xc0\x3b\xa1\xd3\x76\x57\xc7\x03\xfe\xef\x63\x19\xca\xa7\xfd\x71\xe9\x36\x39\x66\x94\x11\xb0\x6c\xa3\x6b\x7c\x5f\x8d\x97\xd5\x38\xac\xc6\x91\x81\x9c\x7b\x3e\x50\xa3\x6c\x90\x64\x69\x92\xd1\x9f\xb9\xa6\xef\xba\x01\x58\xae\x27\xf7\xfb\x01\x08\x5b\xc9\xaf\x93\x92\xb9\x6e\x60\xfe\xec\xf7\x91\x6c\x5c\x22\xaa\xf9\x70\xee\xd9\x76\xaf\xb0\x6d\x80\x40\x13\x32\x60\xb1\x41\x46\x6f\x19\xc7\xef\x5a\x21\xd1\x66\x77\xa9\xed\x50\xdb\x51\x73\x9d\x43\x06\x51\xd7\xb8\x19\x97\x4f\x9d\x71\x55\x8d\xcf\xe1\xb8\x7c\x5a\xe3\xc6\x32\x06\xd7\x33\xea\x59\x29\x67\x57\xe3\xa7\x30\x24\xfd\x7f\x7b\xfd\x93\xf1\xe0\x73\x3f\x72\xc7\x97\x7b\x49\x8d\xe0\x6f\xa4\x48\xc8\x65\x4a\xfb\x43\xa0\x1c\xc0\xad\x1e\x72\x42\x34\xaa\xeb\x8b\xb5\xf5\xf1\x60\x8c\x22\x77\x5c\x8e\x9e\x34\x03\x25\x37\x6f\x76\xa3\xe8\xb1\x2a\x9c\x11\x76\x50\xb5\x84\xb0\xb3\x2a\x5d\xb2\x09\xc9\xf9\x4a\xef\x6e\xf2\x62\x02\xb4\x01\x24\xb1\xb6\xd2\x06\xd7\x69\xd0\x38\x1c\x47\xf7\x4b\xfb\x69\xaf\x3a\xdf\x05\x3f\xfc\xaf\xff\x27\x0a\x3f\x8d\xcb\x5d\x10\x44\x55\xf8\x49\x7d\xfc\x8b\xf1\x15\x86\x9f\xfe\x12\x3d\xe5\xf0\x8c\xcb\xa7\x81\xf3\xa4\x1a\x97\x1c\xa8\x91\xa3\xc7\x90\x8f\xa6\x1a\xd8\x95\xc9\x89\x00\x61\xf9\x0c\xc0\x60\x1d\x98\x40\x8c\xd8\xc8\x69\x0d\xbf\x1e\x2d\x18\x38\x2b\x64\xd1\x70\x29\x30\x1e\x73\x9a\x6a\x08\x45\x5c\x48\xb1\x44\x25\xcf\x2a\xd6\x56\xd6\x3d\x33\xf7\xbc\xae\xa0\xe7\xa3\xba\x4e\xfe\x43\xc2\x1c\x78\xc8\x18\x95\xfa\x17\xa7\xfd\xc0\x43\x8a\x90\x78\x76\x05\x40\xd0\xf3\x97\x5c\xab\x47\x35\x9f\x7f\xf5\xe6\xa5\x03\x18\xbd\x65\x7b\xb7\x7d\xc9\xee\x25\xd7\x87\x4b\xb8\xf3\xff\x05\x00\x00\xff\xff\x88\xf1\x93\x1e\x46\xad\x00\x00") - -func web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJsBytes() ([]byte, error) { - return bindataRead( - _web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJs, - "web_ui/assets/codemirror/mode/yaml/yaml-5095f3345bc2424e97de59ad00ae167a.js", - ) -} - -func web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJs() (*asset, error) { - bytes, err := web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJsBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/yaml/yaml-5095f3345bc2424e97de59ad00ae167a.js", size: 44358, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/yaml/yaml-86bec82a0f62e7a53eef41d44a8e4727.js", size: 44654, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -421,67 +402,67 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/consul-logo-707625c5eb04f602ade1f89a8868a329.png", size: 58433, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/consul-logo-707625c5eb04f602ade1f89a8868a329.png", size: 58433, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xf9\x77\xdb\xb8\x92\x28\x8e\xff\xee\xbf\x42\xe1\xcc\xb8\xc9\x1b\x10\xe6\xa2\xbd\x2f\x3b\x2f\x9d\xa4\xe7\xe6\xbc\xde\x5e\xd2\xf7\xde\x37\x5f\x8f\xa6\x0f\x4d\xc1\x16\x5f\x28\x52\x03\x40\x76\x1c\x5b\xdf\xbf\xfd\x73\xaa\x00\xae\xa2\x36\xdb\xe9\xd8\x3d\xe9\xd3\x91\x25\x12\x4b\xa1\x50\x28\xd4\x86\x82\xb1\x14\xac\x23\x24\x8f\x23\x69\x1c\x4d\xd9\x79\x9c\x32\xd3\x88\xb2\x54\x2c\x13\x7b\x19\x9f\x84\xd3\x70\x21\x19\x17\x27\x61\x94\x18\xe4\xd4\x60\x1f\x17\x19\x97\xc2\x20\xad\x65\x16\x8b\x24\x8e\x42\x19\x67\x69\xad\xc0\x3c\x9b\xb2\x44\x37\xb1\xfe\x78\x1a\x19\x13\x72\xbe\x4c\x23\xa8\x67\x32\x22\x49\x4a\xb8\x75\x93\x3f\xe9\x08\xd3\xba\xb9\x0c\x79\x87\x05\x53\xf3\xd4\xf8\xcf\xb4\x83\xff\xfd\xfa\xf7\xdf\x3a\x27\x97\x2e\x34\x7a\x12\x25\x59\xca\x4e\x0c\x62\xbc\x30\x88\x2e\x60\x4c\xac\x23\xce\xe4\x92\xa7\x1d\x11\x14\x8d\x5b\x37\xfa\x19\x5b\x11\xb6\x2a\x7a\x08\x77\xf6\x30\x65\x42\xf2\xec\x7a\x63\x1f\xe1\xce\x3e\x92\x9d\x7d\x2c\x17\xd3\x50\x32\xd5\x7c\xfe\xbe\xad\xaf\x64\x67\x5f\x99\xc2\x62\xf1\x56\x76\xe2\xb4\xc3\x5e\xfc\x72\xf6\xff\x58\x24\xa9\x9a\xe4\x5f\x79\xb6\x60\x5c\x5e\x63\xd1\x9b\xcb\x30\x59\xb2\x71\x4a\x58\xba\x9c\x33\x1e\x9e\x25\x6c\xfc\xcc\x21\x51\x96\x9e\xc7\x17\xcb\xe2\xf7\x15\x8f\xa5\xfe\xbe\xb2\xc6\xec\x54\x4e\x82\xb4\xda\x6f\xbc\x7b\xa6\x38\xdb\x6b\x8c\xf1\xce\x31\x2e\x5b\xfb\xfa\xf7\x37\x65\x5f\x71\x7a\x9e\x95\x13\xb6\xad\xb7\xe5\xce\xde\xa2\x9d\xbd\x25\xb1\x90\xbb\x7b\x8a\x76\xf6\x34\x85\x09\x29\x67\xee\xf6\xd6\x94\x01\xa3\x22\x89\x23\x66\x3a\x96\x45\xf4\x24\x9e\x73\xc6\x3e\x31\xb3\x6d\x4a\x63\x26\x4c\x46\x6e\x78\x78\x35\xd6\xf3\x5a\xaf\x23\xad\xd5\xca\xb2\x56\x9b\xa8\xc1\xf8\xfd\x77\x26\x7e\xca\xa6\xcb\x84\x19\x39\x61\xc0\x7c\x13\x06\x65\xc3\x65\x22\x83\xcb\x2c\x9e\x76\x9c\x23\x40\xc8\x79\x20\xf3\xc7\x94\x7d\x94\x2c\x9d\x9a\x37\x9c\xfd\xf7\x92\x09\xf9\x43\xc6\xff\xcf\x92\xf1\xeb\x71\x75\x6d\x2b\x34\xa6\x50\x2b\x22\x3c\x90\x34\x4e\xa7\xec\x63\x8e\x1e\x66\x46\xa6\x45\x6e\xa6\xd1\x38\x5d\x91\x1b\x7c\x35\xe6\x2b\x6b\x45\x1a\x4d\xbe\x63\x51\xc6\xa7\x7b\x34\x4c\x04\x7c\x9b\x1e\xc5\xe7\xa6\x02\x3a\x08\x02\x61\xc9\x19\xcf\xae\x3a\x29\xbb\xea\xbc\xe1\x3c\xe3\xa6\xf1\x1f\xd9\xb2\x33\x5f\x0a\xd9\x11\x0b\x16\xc5\xe7\xd7\x9d\x30\xed\xc4\x53\xc3\x2a\xe1\x5a\x9a\x16\x11\xdb\x21\x7b\x85\xb4\xbd\x0e\x5a\x4a\x44\x39\xd7\x66\x6c\x5a\x24\x33\x6f\x56\x44\xd2\xd7\x2f\x7f\x7b\xf9\xea\xcd\xcf\xbf\xbd\x79\xf7\xfb\xff\xf9\xfb\x9b\x77\xff\xf1\xfb\xaf\x2f\xdf\xbd\xfc\x89\x88\x53\x4e\x7f\xf8\xe5\xdd\x9b\xb7\xff\xfe\xf3\xef\xff\xfb\xcd\x7f\x4c\x2c\x92\xd6\xfa\xf9\x3b\xf2\x89\x5d\xfd\x24\xf7\xee\xe7\x35\x4b\x58\x5b\x3f\x82\x24\x95\x7e\x42\xd3\x22\xc9\x69\x4a\xdf\xff\xf8\xf7\x7f\xc7\x66\x76\xf4\x9a\x34\x7b\xad\xe3\x10\x38\xf9\x7a\x97\x61\xad\x4b\xf1\x00\x5d\xe2\x96\x31\x5e\xdf\x75\xf2\x75\x37\x8b\x05\xd5\x60\x99\x1b\x4b\x31\xda\x0a\xb9\xa9\x4a\xad\x5a\x36\xb5\x4a\x45\xb1\xc8\xd2\x69\x83\x6c\x8a\x9a\x9c\x48\x8a\xdb\xe3\xcf\xe1\x9c\xc1\x7a\x3d\x2a\x57\xdf\xf9\xca\x22\xdb\x36\xea\xea\x26\xbc\x63\xc3\x9e\x49\xb9\xa8\xbd\x61\xe9\xe5\xda\x66\x5c\xd9\x8a\xf9\x1f\xbb\xb1\xdc\x83\x45\x31\xfa\xf3\xfb\x5f\x5f\xbe\x7a\x53\x25\x84\x80\x6d\xa0\x90\x9c\xa1\x6d\x7c\x6f\x4c\x23\xe3\xa8\xb5\x49\x23\x15\x06\x32\x42\xd1\xca\x08\x17\xd9\xf8\xcd\xfc\x8c\x71\x1a\xa7\x38\x14\xc1\xf8\x25\x70\x72\x43\x30\x29\xe3\xf4\x42\x18\x16\x89\x92\x98\xa5\x72\x43\x39\xf5\x52\x4d\x94\x45\xce\x33\x3e\x0f\xe5\xcf\x62\x11\x46\x55\xe2\xb5\x6e\xe2\x73\xd3\x74\x48\x4a\x59\x7a\x69\x99\xc6\xab\x5f\x7e\x7e\xff\xf7\x1f\x7f\x57\xe0\xbe\xff\xfd\xcd\xcf\x2f\xbf\xff\xf1\xcd\x6b\xc3\xb2\xd4\xb4\x19\xc6\xb3\x20\x60\x2f\x38\x2c\x1a\x80\x9f\x30\x6b\xac\x30\xb0\xd2\x3d\xbc\x0e\x65\x18\xb1\x54\x32\x5e\xeb\x45\xcf\xba\xaa\x38\x8d\xa0\x62\xb1\x78\x5b\xd6\x12\xa2\x05\xd6\x6e\x80\xcb\x49\x0d\x85\x64\xea\x97\x90\x19\x67\x24\xc6\x1f\x64\x19\x64\x30\xe4\x38\x4c\xe2\x4f\x8c\xff\x90\x71\x93\xe7\xbc\xd7\xc8\xdb\x35\x82\x40\x5e\x2f\x58\x76\xde\x49\x69\x28\x25\x8f\xcf\x96\x92\x89\x17\xa6\x08\xaa\xbf\x4d\x8b\x84\xc1\xb2\x6c\xcc\x4c\xc9\xcd\xca\xb2\xc6\x61\x20\x82\x94\x24\xeb\x6b\x5a\x56\x79\x33\x91\x24\x24\xc2\x5a\x59\x34\x0a\x65\x34\x33\x5b\x06\x1f\x53\x86\x7b\x06\x83\x52\x72\xc6\xd2\xb6\x42\xd2\x5c\x12\xa6\x9b\xaa\x2f\x5e\xb1\x7d\xf1\x46\x59\xc6\xa7\x71\x1a\x4a\x76\x90\xb0\x5d\x5f\xb2\x95\x05\x9b\x16\x72\x4b\xbd\xc0\x9a\x5c\x91\xef\x74\x0f\x26\x5e\xb4\x88\x49\xe5\xe0\x4e\xd2\x6c\xca\xc4\x6e\x71\x29\xdd\x24\x2e\x3d\x8c\xf0\xc2\xef\x24\xbc\x70\x25\x63\x88\x75\xe1\x25\xd5\xc2\x0b\x2f\x44\x04\xd1\x9c\x7f\xbe\x7d\xfe\x61\x51\xfd\xf9\xe6\x3d\x94\x61\x92\x5d\x9c\x4c\x0b\xae\x22\x1e\xd7\x4c\xff\x10\xa7\xd3\x97\x49\xd2\xc6\xeb\x70\x52\x0f\x9c\xc3\x58\x44\xd9\x25\xe3\xd7\x76\x34\x0b\xe3\xdd\x9b\xf0\x9e\x13\x5a\x91\x71\x35\x4e\x3e\xb0\x6b\x61\x32\x0b\x84\x5b\xfd\xe4\x82\xc9\x5f\xae\xd2\x1c\x4b\xef\xaf\xe7\x67\x59\x22\x72\xaa\xdd\x56\x06\x9a\x91\xc7\xc7\x26\x0f\x38\x3d\x8f\x13\xc9\x78\x1b\x87\x6c\x6d\xe1\x35\x13\x11\x8f\x17\x32\x43\xe1\xc0\xa2\xe5\x4e\xbf\xb2\x2c\x92\xd2\xc5\x52\xcc\x28\x8c\xf1\xda\x44\xd9\x26\x9f\xf0\xd5\x97\x92\x2a\x5a\x0c\x0b\x8f\x60\x91\x34\xa8\x66\x3f\xc5\x75\xa3\x69\xe3\x61\x56\x4d\xb8\x9b\x3f\x6e\xd4\xc4\x42\xc5\x25\x93\x40\xd2\x54\xc0\xa6\xaf\x15\xb2\x78\x5d\x21\x8b\xef\xa2\x90\xc1\x4e\x1f\x23\xb7\x0d\xab\x82\xb6\x75\x73\x9e\x71\x13\x00\x90\x81\xfb\xad\xfc\x6b\xc8\x2f\x96\x73\x96\x4a\x41\x13\x96\x5e\xc8\xd9\xb7\xf2\xf9\x73\x2d\x99\x04\xe9\x32\x49\x9e\x05\x45\x89\x53\x39\x79\x51\xfd\x31\xbe\x59\x1d\xc9\x7f\xf3\x5e\xa4\xa6\x20\xcf\x1c\x8b\x9e\x67\xfc\x4d\x58\x15\x0a\x60\x61\x20\x3d\x42\x69\x6b\x65\x8d\x77\xac\x0f\xd1\x4a\xd2\x8a\x64\x76\x55\x35\x85\x65\x8d\x53\x53\xb4\x83\xb1\x79\xa9\xec\x5a\xb2\x82\x48\x0b\x84\x94\x82\x78\x50\x93\x02\x01\xad\x2a\x6b\x9a\x89\x95\xef\x68\xd9\xaa\xc9\x0e\xc3\xed\xec\x50\xe9\x18\x55\x1e\xc8\x40\xd2\xb5\x61\x37\xc8\x4b\x19\xc4\xf8\x5f\xeb\x4f\x4f\x50\xd2\x6a\xad\x20\xd4\x3b\xd1\x6a\x39\x7c\x18\xe2\xaf\xac\x2d\x56\x5d\x5c\x61\xd0\xec\x91\x84\xc5\xfb\x74\xab\x80\x79\x6a\x94\xab\xc7\xa0\x51\x96\x46\xa1\x34\xb9\x35\x31\x25\x09\x5b\x84\xce\x4a\x4d\x2d\x74\xca\xad\x42\x27\x34\x9f\x6b\x95\xb5\xe6\x81\xbd\x63\x0f\x2b\x92\xb4\x42\x0f\xe3\x4d\x82\xb0\x2e\x47\xc3\x9a\x2d\xe5\xe8\x10\xe4\xe8\xa3\xfb\x0e\x33\x23\xc9\x67\x1f\xa8\xea\x63\x85\xf0\x37\xb9\x17\xb6\x5e\xdb\xe7\x91\x55\x10\x11\x9c\xde\x08\x19\xca\xa5\x18\x1b\x45\x8b\x8c\xaa\x47\xaf\xb2\x29\xb3\x88\x8c\x65\xc2\xc6\xc6\x6f\x33\xd6\x39\x0b\xa3\x0f\x2c\x9d\x76\x34\x14\x6c\xda\xb9\x8a\xe5\x0c\x78\x94\xa6\xd8\x29\x93\x61\x9c\x8c\x19\x9d\x33\x21\xc2\x0b\xb6\x9a\x1c\x49\x7e\x7d\x23\xae\x62\x18\x77\xad\xdd\x9b\x28\x14\xac\xe3\x8c\x65\x00\xec\x8f\xd3\x97\x67\x19\x97\xc8\x05\x89\x54\xc8\x10\xa7\xce\x44\xd7\x08\x0c\xc7\x38\x3a\xe3\x2c\xfc\x70\x84\xd5\xba\x8e\x5b\x54\xfc\x7b\x1a\x2e\xe5\x2c\xe3\xf1\x27\x36\x55\x5c\x54\x10\xc3\xb0\xea\xc5\xfd\xa2\xf8\x0f\x19\x3f\x8b\xa7\x53\x96\x6e\x2c\xdb\x2d\xca\xfe\x9c\xc9\x1f\xb2\x65\xba\xb9\xd9\x61\x51\xf4\xb7\x78\xce\xb2\xa5\x1a\x40\xbd\xcc\xa8\x28\xf3\x2a\x4b\xcf\x93\x38\x92\x9b\x9a\xf3\xbc\xa2\xe8\xdb\xf4\x32\x4c\xe2\xbc\xe3\xbc\x98\x9e\xd5\x31\x6e\xd2\x05\x2a\xbf\x0b\x7a\x8e\xf3\x42\xd5\x7b\xcf\xf8\x25\xe3\x95\x0e\xc6\xf0\x3c\xcd\xe9\x41\x3d\x5b\xad\x14\x1d\x86\xd6\x0d\x70\x31\xb5\x09\xc9\x15\xf9\xef\x35\xc1\xbf\x22\x9c\x84\x26\x6a\xac\xac\xa1\xaf\x56\xcd\x35\xa4\xaa\xee\x1a\xb8\x4d\x1a\x68\x5b\xfb\xef\x0d\x3b\xe6\xbd\x9b\x57\x6d\xaa\x4e\xce\xd7\x84\xd9\x8a\x3d\xf9\xe0\xe6\xb5\x68\x6c\x58\x2b\x12\x6d\xb0\x6f\x56\xc1\x4f\x0e\x6d\xbf\x6a\xfd\x52\xf0\x2f\x37\x98\x37\xef\xd5\x4d\xd5\x66\xaa\xba\x99\x6e\xb0\x6e\xde\xab\x9b\xaa\xc9\x14\xbb\xa9\x6d\x94\xd9\xf6\x8d\x32\x4e\x25\x4b\xf7\x32\xdb\xed\xf0\xb3\x81\x12\xb9\xfe\xb4\x6c\x7e\x4f\x6f\x5b\x54\x91\x52\x5f\xbf\xf9\xf1\xcd\x6f\x6f\xb4\x16\x9f\xa6\x2c\x92\x65\x7b\xe2\x41\x3c\x6f\x51\x8b\xc7\x68\x5b\x57\xdb\xc4\xe2\x7d\xbc\x71\x5f\x46\xe5\xc8\xda\xc7\xfb\xcb\xfb\x4d\x03\xde\x3d\xd8\x6c\xe7\x60\xe3\xd6\x4e\x4b\xab\xcc\xdd\x90\x7c\x88\x8b\x6e\xbf\x7e\x1f\xc6\x51\xf7\xa4\xdc\x67\xd3\x87\x71\x9f\xa1\x4a\x55\xf3\x55\x3d\x46\x1f\x5a\x7c\x77\x1f\x1a\xaf\xf9\xb6\x32\xd3\x22\xc9\x0e\xdf\x56\xda\xf0\x6d\xdd\xbc\xcf\x96\x3c\x62\x3f\xbf\x1f\x73\x9a\x7f\x25\xaf\x99\x90\x71\x8a\x8c\x14\x5f\xd4\x7e\x13\x5d\x2c\x9c\xb3\xb2\x4e\x38\x67\xb5\x5a\xea\x65\xe3\x89\xae\xf9\xdb\xf5\xa2\xac\x09\x3f\xc8\x4b\x1c\xcf\x98\x53\xf5\x85\xe4\x8a\x98\x7a\x58\xf9\xb5\xda\xcb\xe3\x27\x48\xd6\xf0\xc4\x65\xa7\xbc\xe2\x16\xdb\x8e\xa3\x6c\x0b\x8e\xc4\x26\x1c\x89\xcd\x38\x12\xdb\x70\x24\xb6\xe1\x48\xb4\xe0\x48\xb4\xe1\x48\x6c\xc6\xd1\x26\x6f\x65\x58\xc3\x91\xb8\x2f\x8e\x1a\x5b\xfa\x74\xfb\x96\xfe\xe1\xf2\xce\x7b\xf9\x52\xc6\xb0\x69\x8b\x1f\xb2\x64\x8a\x0a\x72\xf3\xd5\x07\x76\xfd\x5b\xf6\x92\xf3\xf0\xba\x6d\xb7\x87\x9e\xf7\x95\x0c\x52\xd4\xf1\x5b\xc4\x02\x22\x94\xe7\xb5\x65\xfb\x9a\xb5\x0b\x07\x1f\x2e\x37\x0a\x03\x87\xec\x53\xb3\x16\x61\xa0\xd9\x74\xa7\xf3\x2a\xc3\xad\xc3\x46\x1a\xea\x48\xf6\x51\x9e\x2c\x92\x30\x4e\xbf\xed\x44\xb3\x90\x0b\x26\x83\xa5\x3c\xb7\x87\x0f\xb7\x8d\xfd\x81\x60\x1d\x12\x92\x32\x6b\xd9\x5d\xab\x60\x3d\x48\x40\xca\x9f\xd2\xf2\x7c\x7e\x88\xc1\x30\xdd\xd7\x60\x38\x35\xd3\x8d\x06\xc3\xb9\x5a\x5b\x7f\x80\xc1\x30\xb5\xac\xf1\xd4\x4c\x1f\xda\x60\x98\x36\x0d\x86\x05\x32\xe7\x5f\x48\xa6\x5e\x3c\xc8\x42\x58\xec\x5c\x08\xb3\xa7\x25\x5a\x9e\xdd\x4d\xb4\x44\x69\x6f\x1a\x91\x50\x19\xee\x93\x42\x0a\x44\x13\xfe\x14\xed\xf7\x82\x2d\x42\x1e\xca\x8c\xd7\x64\xc2\xec\x2e\x32\xe1\xc2\xb4\x88\xe9\x10\x9e\x83\x6a\x99\x99\x45\xcc\xb9\x99\x06\x37\x2b\x62\x00\x9f\x31\x08\x2c\x3b\x8b\xcc\xcd\x54\x05\x1d\x08\xfd\xbd\x80\xc2\x20\xb1\x45\x52\x8b\x9c\xb7\xdb\xae\xc3\xc2\x76\x9d\xac\xac\xc3\xe5\x60\xa1\x10\x11\x16\x88\x48\xd6\xc5\xe1\xe4\x2e\x43\x8f\xd6\x86\x9e\x14\x72\xfb\x86\xa1\x88\x62\x28\x61\x63\x28\x9b\x04\x67\x5c\x90\x30\x9a\x2c\x68\xb6\x59\x06\x79\x98\xe9\x69\xd8\x14\x05\xdb\xba\x4f\x4f\x93\x3c\x06\x46\x09\x43\x75\x9d\xa3\x3e\x98\xf4\x54\x94\x62\x96\x45\x32\x22\xf7\x92\x69\xef\x0c\xf0\x79\x12\x5e\x88\x71\x4a\x7f\x80\xbf\x07\x42\x1f\x1f\x0a\xfd\x26\x69\x53\x92\x58\x41\xbf\xfc\x16\xe3\x71\x8a\xf6\xe2\x5a\x7b\xc7\xc7\xe6\x12\x77\x13\x0b\x97\x6a\xb4\x6d\xa8\xf1\x7e\x73\x13\x37\x46\x47\x6e\x38\x8b\x96\x5c\xb0\xf1\x72\x55\x19\x69\xb6\x36\xd2\x3a\x64\x24\x6a\x48\xb8\x67\xdb\x25\xdc\x34\x9b\x3e\x78\xa8\x4a\xd8\xc2\xc6\x95\x99\xf7\x24\x61\xe1\x94\xf1\x56\xf9\x72\x63\x04\x41\xc5\xcf\xbc\xad\x87\x18\xb0\x9d\x86\xc9\xc9\x32\xc6\x51\xed\xb7\x6d\xf0\x9d\xbd\x8a\x83\x7a\xdd\xc3\x08\xb2\x8f\x55\xed\x49\xed\x54\xc9\xe7\x30\x82\x88\x07\x31\x82\x14\x41\x3e\x8a\xff\xd7\xb9\x7e\x78\x17\xae\xcf\x4d\x8b\x84\x0d\xc8\x44\x0b\x64\x3f\x22\xa5\x6f\x0c\x3f\x6a\x0b\x3a\xca\x3d\x0c\x2d\x55\xef\x19\xdc\x5a\x81\xe8\xb0\xe0\xd6\xb6\x8a\xdb\x62\x5b\x93\x1d\xdc\x46\x69\xaa\xf7\xb4\x8f\x6f\xd0\x77\x6b\x71\xae\xf9\x9a\x5d\xb6\x99\x69\x8b\x45\x1b\x46\xc9\x49\xe1\x75\x7b\x58\x66\xb1\x6c\x57\xb0\xd3\x70\xce\x10\xfc\x93\xfb\x1a\xdc\x97\x2d\xca\x6c\xa3\xf5\xfb\xda\xd8\x1f\xa8\xab\x7d\x0e\xbc\xb4\x75\x95\xf3\xd8\x03\xba\x3a\xc4\x48\xb1\xb5\x2b\x71\x7f\xab\xc3\x93\xe2\xe1\xd1\x9d\x79\x78\x23\x86\x12\x44\x31\xcd\x16\xd3\x43\x19\xb6\xe2\xd4\x7c\x9d\x53\xf3\xfd\x38\x35\xcc\x9e\xd1\x10\x96\xf8\x06\x68\x36\x0b\xdc\xbc\x71\x0a\x83\xd7\x8e\x2a\xdc\xa0\x39\x54\xd2\xdc\x4a\x5a\xd8\x36\x65\xd5\xb6\x49\x5e\xbe\xfa\x51\x8c\x6f\x7e\xcd\x92\x38\xba\x7e\xad\xf0\x2a\xc6\x92\xc2\x63\x5a\x7f\x4a\xe7\xe1\xa2\x25\x4a\xe2\xe6\xed\xeb\x31\xa3\x6f\x5f\xaf\x56\x16\x79\x97\x25\xac\xd9\x48\xf5\xd9\xee\x26\x56\xfb\x19\xa4\xeb\x83\x0f\xd7\x07\xff\x54\x07\xbc\x59\xde\xe7\x0d\xeb\x72\x6d\xc0\xb5\x36\x5e\xe6\x1b\xc5\xfe\xba\x66\x5d\x6c\x40\xa1\x81\xa4\x62\x2c\x48\xae\x04\x92\xd3\x9b\x77\x4c\xa0\xf1\x7c\x6c\xc0\xd2\x55\xfa\xf0\xcb\x28\x62\x42\x8c\x8d\x2b\x1e\x4b\x66\xac\x00\x8e\xb0\xb5\xf7\x7b\xca\x05\xc5\x90\x5a\xa5\x82\x4a\x38\x7c\xfb\xe3\xd5\x0e\x69\x20\xda\x2e\x0d\x2c\x90\x2c\xee\x2b\x0d\xe4\xad\x1c\x68\x2d\x6f\x9e\x9a\x59\x37\xd0\xa7\x59\x6a\xb3\xf9\x42\x5e\xdb\x82\xc9\x07\xb1\xae\x83\xb8\xa1\xc0\xfd\x6c\x56\xf6\xb6\x2e\x3e\xa7\xf9\xbc\xec\xef\x61\x8f\x69\xb6\x99\x02\x0f\x1d\xdb\x57\xdb\xf8\x57\xdb\xf8\x9f\xda\x36\x5e\x2c\x88\x78\x1f\xbb\xc3\x23\xb2\x90\xa3\x7d\xfb\xe8\xde\x92\x2b\x39\x0b\x4c\x87\x84\x3b\x4e\xcd\xbd\x30\x1d\x92\x94\xf6\x32\xe3\xe7\x5c\xc6\x37\xac\xf1\x1a\x46\x6e\x56\x2b\x94\x87\x2f\xef\x6b\xd3\x48\x45\xe5\x84\x51\xdd\xb4\xb1\x30\x77\xd9\x89\xb9\x55\x31\x2d\xdc\x2d\xf4\xa3\xda\xff\x83\x19\x3f\xa2\xaa\xf1\xe3\x60\xd8\x77\xda\xb8\xc5\x76\x93\x71\xf3\x14\x70\xf3\x74\xf7\xb9\xb9\xa7\x70\xfe\x6e\x99\x30\x90\x2b\xf1\x2f\x29\xfb\x80\x67\x95\x5f\x2b\x72\x66\xaa\xb6\x70\x64\x96\xb5\xa7\x0c\x2d\xf2\x13\x14\x5b\x46\xb3\x76\x78\xbb\x19\x67\x53\x93\xbb\xc3\x3f\x78\x6c\x9b\xc5\xe5\x22\xd8\x7c\xcb\xd8\xc2\xb5\x83\xe9\xed\x7e\x9d\x53\xb1\xc9\x9e\x0f\x8a\x5b\x58\xc3\x40\xd2\x10\x2d\x2f\x77\x88\x96\x3c\xfb\x78\x98\x64\xf9\xf5\xe4\xd6\xff\xd4\x93\x5b\xf9\xf1\xc6\x3c\xa0\xf1\x89\x9c\xdc\xfa\x7a\x66\xeb\xeb\x99\xad\x4d\xec\x8f\x67\xc9\xbd\xad\xec\xaa\x8d\x27\xa2\x55\x03\xb0\x9f\x55\xa7\xae\x77\xf0\xb9\x35\x6a\xe8\xed\x8f\xd1\xa7\xf7\x1f\xd7\x57\x6d\xfa\xab\x36\xfd\xa7\xd7\xa6\x61\x39\x7c\x55\xa5\xbf\xaa\xd2\x5f\x55\xe9\x3d\xd5\xcd\x5f\xb5\xf9\x69\x2c\x69\xfe\x95\xbc\x57\xc9\x8f\xde\x4e\x59\x2a\x63\xa9\x5e\xae\x3d\x7b\x92\xca\xf5\x67\x1a\xed\x93\x57\xb7\x75\xba\xab\x87\x0e\x24\xcb\x5a\xb8\xf4\x8c\x85\x89\x9c\xe5\x3d\xee\x27\xba\xec\x13\x5a\xf6\xe7\x15\x5d\xc4\x67\x11\x5d\xf8\x16\xd1\x25\xfc\x43\x45\x17\xfe\x47\x8a\x2e\xe1\x17\x12\x5d\x92\xad\x8b\xa2\x1a\x85\xa8\x57\xc6\x1e\x52\xcc\x9e\x89\x68\x9f\x4e\x10\x4b\xfc\x00\x92\x46\x8b\xef\x3e\x29\x85\x0c\xb1\x6b\xa3\x6e\xc6\x75\x6f\x17\x32\xf8\xd6\x58\xfd\xfb\x47\xe7\xa7\xa6\x45\xb2\x3c\xa5\xd9\x06\xd8\x1b\xe1\xf5\x35\xb6\x1f\xef\x62\xfb\x42\x3c\xc0\x79\xf7\xa2\x99\x07\x38\xf0\x56\xd9\x47\xb6\x67\x85\xd6\x9d\x7e\xb6\xcc\xd0\x45\xe0\xb3\xee\x67\xff\x6c\xc6\x7b\x2f\xcb\x3f\xe5\x6e\x15\x7f\x96\xdd\x2a\xdb\xb2\x5b\x2d\xff\xd0\xdd\x2a\xfb\x23\x77\xab\xe5\x17\xda\xad\xb6\xa7\xdb\xce\x97\xc4\xfe\x51\xfa\x5f\xd3\x6e\xff\xf1\x3a\x69\xfc\xb4\xf4\xe9\xe4\x5e\xb0\x6f\xd6\xc0\x92\xfc\x34\x53\xb3\xcd\x8a\x06\xb6\x96\xa0\xba\x5d\x03\x4b\x36\x6b\x60\x2d\x59\xb8\x0f\xcb\x1a\x2d\xb3\x0f\xec\xde\x1b\xb1\x6e\xe4\x31\xd9\xfc\xaf\x37\x58\xc8\x11\x54\x60\x1e\xea\xf2\x88\x7b\xdb\xfd\xaf\x37\x18\x04\x55\x3f\x82\x25\xe7\xd5\x23\xe2\xff\xd7\x7e\xa5\x86\xf8\x1b\xbc\x1e\x77\x1e\xd4\x29\x70\xbd\xd9\xcd\x51\x8c\xba\x75\xbc\x87\xf8\x03\x76\xe2\xf5\x61\x98\x72\x5b\x77\xbb\x6f\xcd\xa8\xf4\x57\xeb\x71\xba\xb3\xc7\xf3\xfd\x06\xb8\x7b\x70\xe7\x3b\xbb\x9a\xef\x49\x3b\x7b\xe1\x72\xbe\xb3\xbb\xc5\x9f\x58\xe6\x9b\x7d\x16\x99\x6f\xb1\x45\xe6\x3b\xfb\x43\x65\xbe\xc5\x1f\x29\xf3\x9d\x7d\x21\x99\xef\x72\xbf\xf5\xb0\x87\x5d\xe2\x72\xe7\x62\xb8\xfe\x23\xbd\x2b\x17\x0f\xe0\x5d\xb9\xf8\x6c\xde\x95\x37\x2d\x92\x24\xe6\xe6\xdf\x74\x71\x01\xbc\x33\xac\xa6\xdc\x76\xa0\xc4\xc6\xb3\x84\xa1\xbd\x42\xc5\x63\x97\x82\xcc\xa5\x69\x91\x1b\x78\x3b\x0e\x89\x7a\x37\x4e\x88\x12\xca\x66\x4f\x4b\xa0\x9c\x57\x05\xca\x83\x61\xdf\xc3\x41\xd3\x6c\x73\x4f\x07\xcd\x39\x3a\x68\x66\xe6\x96\xb3\x38\x6d\x6e\x8a\x77\x99\x8e\x0b\x84\xbf\xfb\x39\x2d\xc8\x8f\x59\x14\x26\x63\x49\xf1\xef\x8a\x5c\xdc\xd5\x61\x53\xcc\xc5\xb3\x20\x10\x2a\x32\xd1\x2a\xc6\x33\x35\xad\x7d\xdd\x38\x44\x5a\x3a\x3a\x6a\x0b\xee\xb6\x39\x7f\xa2\x16\xe7\xcf\x63\xc3\xe4\x1e\xce\xa0\x2d\xa3\xbf\xbf\x33\x68\xd9\xe6\x0c\xaa\xc0\xf7\x9e\x25\xe7\xad\x14\xcd\x83\x54\x9d\x81\x4a\x8b\x95\x98\x52\xc1\x22\xce\x64\xe3\x78\xa0\xb2\x47\x86\x1b\x8e\x4f\x6f\xb8\x43\xa8\x32\xfe\x1a\x78\x77\x4e\xe4\xa1\x2c\xc6\x9f\x15\x97\x98\xe8\x8e\xc4\xd6\x8a\x88\x75\xac\xdd\xeb\xe4\x16\xcc\xc2\x1d\x8e\x72\x6f\xbf\xa6\xa8\xfd\x56\xa5\x02\xed\x00\xe5\xd1\x9d\x21\xde\xe3\x82\xa5\x30\xd7\xb5\x71\x52\x92\x3d\x67\x24\xd9\x77\x3a\x36\x22\x23\xb3\x80\x1a\x37\x9f\x63\x7b\xd3\xae\x7b\x2f\x16\x9b\x14\x6e\xce\x44\x96\x5c\xb2\x32\xf7\x79\x92\x85\x53\x3b\x4e\x63\xa9\xd3\xd0\xd6\x8b\x2b\x51\x0b\x94\xe7\x98\x67\x29\xc8\xb1\x9f\x35\x2f\xba\x12\x0c\x5e\x96\xb6\x80\x42\x70\x98\x63\x23\xbf\x72\x76\x1e\x7f\x1c\x17\x39\x46\x68\xf5\x31\x59\x64\xd3\x9f\xda\x8b\x35\xde\x90\x77\x1a\x0b\xe3\x42\x42\x59\x59\x8d\xb4\x2a\x82\xb4\xf7\x92\xf3\x79\xb1\x33\xe6\x31\xca\xe6\x8b\x2c\x05\xd1\xff\xc4\x9e\x5e\xa7\xe1\x3c\x8e\x6c\x96\x30\x40\xa2\x1d\x26\xb2\x3a\x43\x93\x5a\xcc\xea\xc3\x60\x53\x6a\x6c\xbe\xca\xc1\xa8\x00\x2c\x0f\x05\xf8\x51\x03\x1b\x46\x89\xad\x34\xc3\x3f\x1c\xcc\x82\x3e\x65\x78\x81\x81\x1a\x06\xac\x78\x83\x44\x49\x28\x04\xee\xa3\xe3\x53\x43\xc1\x66\x9f\x85\xdc\x98\x10\x63\x1a\xca\xd0\x96\x4c\x48\xbb\x02\x37\xa8\x31\x59\x1a\xcd\xc2\xf4\x82\x55\x25\xea\xfa\x6a\xdf\x03\x13\x50\xcf\xbe\xe0\xd9\x72\xf1\xe5\x70\x51\x1b\x7c\x0d\xa4\xc9\x83\x0c\x72\xb1\xb0\x2f\x63\x76\x55\x67\x71\x67\x49\x16\x7d\xb0\x45\x92\x35\x18\x9e\xb2\xf3\x49\x36\x5f\x24\xa1\x8c\x3f\xed\x48\xce\x51\x5e\x05\x50\x45\x58\x7c\x6e\x62\x3a\x4c\x1a\x0b\xfc\x6b\x32\xab\x6a\x15\x70\x48\x8a\x49\xe5\xf5\x3b\x6d\x17\xb0\xbe\x95\x7f\x65\x55\x1b\x01\xe8\xf4\x01\x68\xa7\x45\xf0\xc7\x6a\x65\x32\xeb\xf6\xb6\xd1\x95\xb2\x7b\xd0\x58\xaa\x33\xd7\xa0\x24\xab\x19\xc3\xc2\xc6\x69\x86\x3f\x3a\x2f\x73\xc3\xc2\xc4\x08\x82\xdc\x82\xb2\xe0\x99\xcc\xe4\xf5\x82\x51\x99\xbd\x97\x3c\x4e\x2f\x68\x14\x26\x09\x00\xac\x3b\x55\x03\x39\xe7\xd9\xdc\x64\x56\xa3\x7f\xeb\xa6\x94\x51\x7e\xbb\x5e\x30\x2d\xa7\xe8\x54\xf9\x9d\x50\x02\x1a\x65\x47\x66\x1d\xb1\xe0\x2c\x9c\x76\xd2\x2c\xb5\x11\xce\xb3\x84\x75\xe2\x54\xc8\x30\x05\x9d\x70\x65\x3e\x94\x37\x42\x6c\x22\xb2\x82\x71\x93\x1b\xd8\xc1\xe2\xf4\x62\xfc\xcc\x2d\x8f\xa2\x4f\x61\x41\xb1\x14\xe0\xc2\xaf\x75\x92\xcc\x09\x68\x52\x3e\xff\x3e\x4e\xa1\x11\x78\x9d\x57\x1b\x4f\x63\x81\xdf\x0c\x62\x54\x1a\x1e\x2f\x2b\xd7\x21\x18\x13\x32\xcd\xe6\x1b\x14\xda\x69\x36\x37\x2c\x32\x8d\xa7\xef\x58\xc4\xe2\x4b\xf6\x52\x4a\x2e\xc6\x35\x6c\xc7\x82\xfe\x2e\x96\x0b\xc6\xb5\x19\x0a\xb3\xc2\x17\x26\x23\xb5\xd7\x30\x22\xd5\xc5\x76\xd3\x6c\x4e\x79\x96\x49\x50\x15\xf2\x8b\xef\x42\x21\x6e\x6f\x0d\xe3\x08\x7f\x6a\x4c\xbc\x10\xcf\x03\xa3\xa3\x7f\x18\x63\x93\x05\x52\x95\xfc\x31\x16\xd2\xa2\x9c\xcd\xb3\x4b\xa6\x3b\x64\x84\x9b\xf5\x8d\xef\xd4\xc8\x6b\x4e\x2c\x0b\x2d\x78\x79\x60\x1b\x49\x90\xcc\xdf\x33\xd9\xa8\x22\xa8\x58\x24\xb1\x34\x8d\x8e\x61\x59\x16\xc9\x8a\x62\xdc\xac\xf5\xdc\x34\xdf\x15\xab\xed\x59\x42\x67\xa1\xc0\x9b\xef\xac\x23\x6e\x66\x2d\x36\x29\x66\xdd\xd8\xee\xb3\x20\x68\x02\xcb\xa6\xb1\x34\x88\x21\x66\xd9\x95\x41\x8c\x24\x16\xd2\x98\x58\x4a\xcc\xff\xe5\xdc\x64\xd6\xf1\x71\x05\x04\x3d\x76\xec\x88\x98\x61\x1d\x2f\xe1\x74\xaa\x91\x12\x12\x6e\x26\x96\xb5\x5a\xc1\xe4\xbd\x4d\x05\xe3\xf2\x8d\xda\x07\x0f\x9a\x3d\x25\x91\x37\xe6\xdf\xb4\xb0\xd5\xd7\xca\xb9\x7f\x97\x66\xeb\x44\x81\x03\x78\x5e\x4e\x37\xda\x4a\x59\x93\x60\x0e\x98\x7f\x59\x9b\xcc\xbd\x2e\x19\xac\x32\x67\x1e\x87\xf6\x9c\xa5\xcb\xcd\xdb\x0f\x32\xcd\xa3\xea\x29\xb6\xaf\x4c\xf7\x81\x98\xee\x97\x3a\x3e\xf7\x50\xcc\xde\xf5\x49\x18\xf8\x1e\x49\x02\x7f\x48\xb2\xa0\xeb\x90\x38\xb8\xb9\x64\x5c\xc6\x51\x98\x8c\x4d\x19\xdc\xac\x08\xc7\xcb\x7e\xd6\x79\x88\x69\x36\x2d\xf3\xdf\xb9\xc7\xc7\x85\x75\xa7\xb4\xc3\xbb\x55\xa3\xbc\x3b\x19\xdb\xae\xf5\xdc\xb5\xfe\x2d\x27\x9b\x95\x85\x5d\x24\xeb\x34\x1b\xdc\xb1\x03\x27\xa7\x3d\x27\x08\x02\xf9\x22\xef\xc8\x76\xc7\xd2\x76\x75\x77\x7e\x9f\xac\x9b\x96\x9d\xfc\x65\xaf\x65\xbc\x9d\xb2\x9d\x95\x45\xa4\x45\x70\x4b\xca\x52\x19\x26\xe3\x9b\xd5\x8a\x2c\x77\xcb\xaa\xc6\xce\xcd\x8b\x67\x4b\xc9\xf8\x86\x22\xea\xa5\x61\x91\x8b\x65\x3c\x85\xd6\xd8\xc7\x45\x98\x4e\x61\xc7\x75\x49\xc6\x63\x96\x4a\x54\xe2\xc6\x46\x3e\x85\x06\xf9\xc0\xae\xcf\xb2\x90\x4f\x75\x1e\x99\x67\x0e\x01\xdd\xf3\x30\xb6\xaa\xa0\x11\x4c\xaa\x37\x06\x74\x6f\x90\x82\xe3\xc1\x4f\x7c\x63\x69\x0e\xfc\x3b\xec\x0a\x2c\x65\x5c\x94\x6c\xb1\x78\x94\xdb\xf8\x7e\xc7\xd1\x6c\x2f\xb9\x7d\x3f\x50\x2e\x06\x34\x45\x60\xe5\x7f\x05\x36\x58\xb6\xa3\x35\x29\xd3\xf8\x97\xe2\x1a\x28\xa3\x60\x9c\x76\xc1\x37\x6d\x83\x18\xea\xaf\x95\x17\xc3\x26\x60\x54\x96\xa5\x25\xef\xb2\x7d\x7a\xc1\xe4\xcb\xfc\x6e\x2d\xd3\xc0\x66\x92\xf0\x8c\x25\x09\x9b\x9e\x5d\x1b\x96\x06\x45\xf2\xf8\xe2\x82\xf1\xad\xd0\x48\xab\x1d\x15\xb0\x31\x2a\x18\xd4\x84\x93\x1b\xfc\xfb\xcf\x38\x49\x5e\xad\xc9\xf2\x05\x6d\x2a\xb9\x1f\xf6\xa7\x4c\x94\x9b\xcd\xe9\xcd\x6a\xa2\x32\x20\x5d\xc5\x49\x72\x8f\x4d\xb0\x39\xb3\xf9\xce\xbe\x61\x08\xf9\xdb\x15\xd1\x70\x8d\x6f\x3e\xb0\xeb\x05\x67\x42\xbc\x4a\xe2\xe8\x43\xed\xe2\x2e\x46\x65\xc8\x2f\x98\xa4\xd3\x58\x2c\x42\x19\xcd\xde\x5c\x02\xaa\x80\x41\xff\x94\x2d\x05\x53\x3f\x8d\x08\x2a\x1a\x96\xb5\x22\x79\x53\xcd\x8b\x93\x4f\x31\x7a\x80\x64\x13\x1a\xa7\x51\xb2\x9c\x32\x61\x32\xfa\x81\x5d\xe3\xf5\x5c\xd0\x8f\x90\xd9\x02\xd8\x65\x78\x11\xaa\x81\xeb\xf9\x4d\xcd\xe6\x44\x09\xf3\x9b\x53\x9e\x25\xec\xbf\x02\xa4\x8e\x58\xb2\xb9\x31\xf9\x86\x94\x84\xa0\x44\x35\xfc\x9d\x2f\xc3\xdb\x5b\xb3\x36\xfb\x7b\x8e\x87\x14\x30\x3e\x0b\x02\x71\x7c\x5c\xfd\x19\x5a\x75\x9b\x79\x7c\x8a\x3d\x54\x16\xfb\xe4\xb4\x28\x3f\x81\x21\x2e\x38\x83\xe6\x75\x7e\x2c\x3d\x42\x4e\xda\x16\x46\x41\x89\xad\x43\x35\xc6\xe7\x59\xb4\x14\x86\x55\x1d\xf4\xd1\x12\x3d\xc3\x92\x9e\xc7\xe9\xf4\x2d\x08\x7d\x6d\xd7\xba\xb1\x20\x08\x96\x2b\x20\xef\xd3\xed\x00\x9b\x92\x70\x6b\x42\xb1\x23\xd3\x5a\xad\x58\x22\x58\x47\x9e\x3a\x95\x47\xa4\xa9\xbf\x56\x09\x26\x9a\xb1\xe8\x03\x9b\xbe\xc0\x3e\xf2\x15\x90\x2d\x58\x5a\x25\xe2\x53\x36\xb1\xc6\xb5\x12\xd5\x35\x52\x14\x41\x9b\xa7\x60\xdb\x38\x4c\x1b\xf9\x37\x99\x63\x4e\x0c\x06\x79\xe6\xe6\x6f\xf9\x32\xa5\x29\xfb\x58\x31\x8f\xc2\x18\x0a\x32\x51\x6d\x55\xb8\x8a\x0c\xcf\x50\xa0\x36\xd4\xed\x77\x0b\x96\x6e\x80\x6a\x4b\xe7\x4e\x3e\x6f\x79\x2f\xa2\xc6\xb8\x8a\x2e\x88\x61\xbb\xc6\xfa\xf2\x2e\x78\x10\x50\xcc\x34\x8b\x90\x0d\x98\x16\x81\x65\x3c\xcd\xae\x2a\x00\x49\xeb\xc6\x1b\xc0\x46\x9b\xcf\x2a\x50\x70\xd1\xab\x9e\x47\x32\x7a\x56\x2b\xe1\x0d\xaa\xbf\x5f\x20\x45\x54\xf6\x29\x68\x22\x9f\xac\x7c\xb1\x97\x3c\x4d\x4e\xac\x31\x3b\x74\x95\x61\x26\xb8\x9a\x6c\xbd\xdc\x25\x5b\x9f\x85\x22\x8e\xec\x29\xcf\x16\x30\x62\x3b\x52\xb7\x41\xb4\xdd\x80\x59\x2f\xb9\x47\x1b\xcd\x23\x2f\x07\x0b\x74\x1b\x2b\xe8\xd1\x19\xe4\xa6\x2e\x59\x5e\x30\xd9\xb2\x6f\x94\xf6\xd8\x95\x75\x20\x3a\x34\xfa\xef\x85\x8e\xbc\x8d\xa7\x8f\x8e\xfb\xa0\xe1\x4f\x30\xfc\x13\x4d\xd8\x6d\xf6\xeb\x43\xd1\xb1\xd6\xd6\x9f\x07\x3d\x0f\x81\x96\x3f\x03\x3a\x1e\x80\x77\x9c\x3c\x69\xde\x51\x18\xcf\x37\x1a\xd5\x37\x14\x7f\x9c\xa3\x3d\xda\x3a\x5a\x9d\x56\xe7\x49\xfa\x8c\x1a\xb0\x3f\x90\xdf\x48\x35\x00\x18\xc6\x38\xe8\xbd\x1c\x2b\xf3\xf8\x63\x9c\x8a\x93\xab\x58\xce\xec\x42\x4e\x6b\xf1\xae\x3c\x0c\x16\xf9\x26\x2c\x16\x96\x4b\x52\x71\x09\x54\x2d\x1c\x9b\xcd\xef\x6b\xe2\xf4\x4e\x7d\x53\x49\xc6\x3f\x96\x16\x81\xaa\x3e\x9e\xcb\x7d\x8c\xa3\x0d\x56\x59\xe4\xb1\xa8\x29\x89\xa1\x50\x6c\x90\xaa\x9c\x5a\x8a\xcb\x8c\x18\xa0\xe7\x08\x83\xc8\x42\xf9\x0c\x65\x08\x0b\xb7\x29\x53\xeb\x72\xea\xf1\x05\x3c\x56\xf4\x61\xac\x19\x6b\xf9\xee\x69\x8f\x93\xa9\x2d\x58\xc2\x22\x4c\xee\xfb\x84\xa6\xbd\x9c\xec\x92\x00\x6e\x5a\x57\x02\x69\xdc\xcc\x0d\x8f\xe4\xf5\x62\x2f\xf3\x17\x6c\x71\x61\x9c\x6e\xb4\x80\x09\x16\xf2\x68\x66\x58\x04\x56\xf0\xab\x1d\x85\x71\x95\x5b\x04\xe6\x4f\x97\x80\xa9\x58\x4a\x36\xa5\x61\x12\x87\x42\x95\xa0\x6a\x2e\x89\x9a\x15\x36\xfd\x65\xa1\xec\x15\xed\x35\x14\x31\x58\x77\x30\xa2\x61\x09\x05\x3f\xac\x7b\xed\x4c\xc8\x87\x50\x79\xa3\x08\x19\x30\x56\x89\x86\x0b\x8a\x6f\xc5\xa8\xf1\x57\x6b\x61\x1a\x25\x2c\xe4\xe6\x4d\x19\x2e\xa3\xd4\xdf\x69\x44\x8a\x50\x33\xf5\x44\x9d\xdb\x50\x4a\x66\xdb\xb0\x01\xe3\x35\xb4\xd0\xd3\x89\x41\x8c\x30\x49\xaa\xbf\x5b\x97\x38\x2d\x0b\xdd\xde\x9e\x4e\x72\xf7\x49\xa3\x3d\x78\x95\x5b\x6b\x6b\x2b\x4c\x99\x5a\x0d\xeb\x3b\x07\xdd\x2b\x6c\x8b\x2f\x4b\x19\x23\xbe\xbf\x36\x8d\xb7\xaf\xab\xeb\x94\x11\x78\x60\xc1\x9a\x6e\x20\x1f\xb5\x5b\x66\x59\x84\xad\xac\xd2\x40\xa5\xde\xaf\x5f\x29\x5f\x8b\x76\xc2\x70\x32\xec\xe2\xdd\xfb\x7f\xfc\x4a\x7f\xe5\xd9\x3c\x16\xac\x04\x2b\x2d\x8f\xf3\xe6\xbc\xa8\xd2\x71\x0b\x5b\x82\x71\x98\x16\x49\x4d\xd6\x60\x44\x47\xd5\x8a\xfa\x2b\x3a\xd2\x56\x84\x33\xc1\xd6\xc9\xef\xee\x53\x5f\xb7\x2f\x54\xe6\x01\x19\x60\x65\xb6\xd1\x42\x32\x35\xac\xdb\xdb\x26\x97\x2c\x0b\x19\x39\xeb\x5e\x64\x54\xdf\x60\xfe\xfd\x75\x25\x72\x2b\x87\xa7\x02\x85\x65\xad\x88\x08\x2f\x37\xa4\x53\x87\xf6\xf9\xba\x2f\xc0\x6b\xf5\x05\x78\x55\x5f\x80\x37\xa9\xb3\x21\x6d\x65\x06\xd0\x8e\x6a\x7b\x81\x8a\xd1\xfd\x2d\x9e\x33\x83\xa0\x05\xe1\x75\x28\x99\x05\x38\x80\x67\x26\x50\x4a\x20\xe8\x82\x71\x11\x0b\x69\xe6\x6b\x4d\x4f\x30\x23\xc6\x9c\x09\x11\x36\xa7\x35\x2d\xed\x4d\x38\xe9\xf4\x2c\x86\xfd\xd3\x02\x41\x04\x26\x7a\x7c\x93\xe2\x9e\x89\x3c\x05\xd6\x91\x62\xce\x72\xb5\x22\x12\xb8\x33\x90\x01\xe1\x66\x41\xbf\x65\x77\xc8\x61\x35\x9e\xf1\xbb\x6a\x5a\xd9\xe0\x81\x3c\x60\xd7\xdc\x88\x4c\x35\x35\x17\x4c\xbe\x4f\x96\x17\xff\x9b\x5d\x9b\x16\xc9\xd9\xbe\x5a\x36\x29\xfa\xbb\xb7\x9b\xf8\xea\xe5\x83\x00\x36\xbf\xa3\xf8\xdc\x44\x9f\x71\x11\xd3\x2b\x0b\xdb\x96\x29\x88\xab\x8d\xe3\xf9\xae\x51\xe0\x01\x9e\x02\x21\xae\x59\xfa\x2a\x11\xa5\x00\xd1\x91\xb8\x8a\x65\x34\x33\xcd\xd2\xae\x6e\xd1\x34\xe3\x73\x8c\xa4\x43\x7b\x8f\x66\xbe\xbc\xc2\x79\xf3\x65\x05\xc8\xb6\x6e\xa2\x50\xb0\x02\xe3\xe3\x92\x08\xd2\x7d\x88\x40\xe0\x09\x16\xed\xa7\x4c\xf5\xb4\x6c\x1a\xce\xea\x50\xe1\x20\x9b\x32\x9b\x4d\xe3\x86\x64\x50\x17\x91\x0b\x87\xa3\xac\x9d\x7b\xd8\xe5\xc7\x2d\xf3\x0b\xd6\x5d\xb1\x25\x61\x9c\x4e\x08\x0f\x9e\x39\x44\x04\xcf\x5c\x12\xe6\x22\x81\xe4\xd7\x85\x0b\x38\x21\x59\xc0\x4e\x1b\x7e\xdb\x89\x69\x7d\xfb\xcc\xe4\x81\x99\x04\x99\x32\x71\x5a\x16\x9d\x66\x29\xb3\x8e\x8f\x4d\x75\xe0\xc7\x4c\x28\x12\xb6\x45\x9e\xc9\xdb\xdb\x54\x2f\xdf\x67\x41\x20\xad\x6f\xa1\x4b\xeb\xdb\x55\x04\x62\x9c\x19\x5b\x37\x02\x40\x08\x83\x78\x75\x1e\xa7\x61\x92\x5c\xdf\x00\x00\xfc\xf6\x36\x5d\x26\x49\x10\x64\x54\x8d\xe3\xf6\x36\xff\x66\x5a\x45\x49\x8c\x9b\x50\x9e\xdd\x70\x55\x9e\x2c\xc2\x31\xde\xc9\xfb\x8b\xe9\x00\x96\x91\x5c\x72\xb6\x97\x0b\xf8\x6b\x76\xd8\x47\xe7\xde\xbe\x91\xe1\xd9\xfb\xf8\x13\x1b\x7b\x24\x89\x53\xf6\xf3\x12\x96\x3b\x3a\x41\xe5\x8c\x01\xeb\x9d\x85\x62\x16\x1b\x44\xcc\xb2\xab\x57\x4b\x2e\x32\xfe\xcf\x19\x4b\xdf\xa3\x88\x82\x11\x4e\x0e\xb9\x58\x4a\x4c\x99\x7c\x6a\xbc\xca\xa6\xec\xa7\x18\xc8\xc5\x4e\xe2\x54\xda\xf3\x90\x7f\x50\xa2\x38\xfc\x04\x38\x48\xb8\x51\xf5\x14\x4c\x4a\x0c\x77\xda\x24\xd7\xaa\xd7\x86\xb5\x53\x44\x9e\xb1\x64\xb1\x51\xe4\x45\x1e\x32\x47\x20\x4f\x12\x4c\x05\x03\x42\x75\x55\xcf\xad\x72\x99\x09\xe1\x2c\x9c\x66\x69\x72\x3d\x7e\xe6\x12\x71\x9d\xca\xf0\x23\x48\xe9\x59\xfa\x81\x5d\x2f\x17\xf5\xbd\x33\x4b\xe3\x74\xb1\x94\xf5\x87\xf7\xf7\x25\xcf\xb3\x29\xcb\x45\x06\x35\x34\x8c\xbd\x16\xa6\xa5\xbc\xbf\xf7\x0c\xe5\x52\x1b\x85\x1a\xef\x11\x7a\x26\x04\x93\x4a\x50\x31\x0d\x18\xfd\x2f\x69\x72\x5d\x48\x2c\x0a\x19\x18\xa3\x2f\x7f\xca\xa6\x75\xa7\x53\x13\xf2\x2c\x17\x77\x6a\xfc\xf9\x6b\xfa\xdb\xfb\xa6\xbf\x15\xe4\x06\x28\x60\xcc\xe8\x3c\x9e\x33\x92\x4f\xd2\xb8\x36\x47\xab\xba\x6b\x5e\x4f\xb0\xac\xce\xee\x1c\xef\xb3\x54\xad\x58\x35\x02\x83\x95\x61\x82\x88\x05\x45\xda\x49\xd2\x20\xec\xa1\x7c\xe6\xd9\x19\x2c\x4f\xc6\x8f\x8f\x6b\x3f\xe9\x34\x16\x3a\xcf\xf4\xa1\x81\x0e\x3b\xc9\x3e\x6d\x71\xf6\x4a\xf6\x51\x86\x9c\x85\x9d\xff\x7f\x67\xc1\x59\x27\xc2\x41\x2a\xe4\xa9\x22\xd6\x51\x4a\xcf\x63\x2e\xe4\xab\x59\x9c\x4c\x73\x83\x4a\x0e\x2e\xc6\x7e\xfd\xb4\x54\x2e\xdc\x5f\xf4\xc3\x36\xb5\xc7\x4c\x89\x6b\x9d\x3a\x93\x23\x46\x35\xcb\x30\x6b\xa2\x36\x72\x6d\x83\xf0\x5c\x2c\xbb\x9a\x65\x09\xfb\x8d\x7d\x94\xa5\xa2\x56\xa0\x48\x7f\x31\x53\x72\x13\xe6\xae\x4b\x81\xbc\x6a\x79\x26\x39\x53\x5b\x0a\x40\xfb\x63\x2c\x24\x3c\x8f\x66\x21\x0f\x23\xc9\x38\xe8\x1b\x6a\x6b\x68\xce\xae\xee\xbf\x3a\xd6\x2a\x0c\xeb\xfe\x5c\x2d\x91\x55\x09\xe8\x82\xc9\x37\xf8\xd8\xac\x21\xb0\xd0\x33\x15\x33\xd7\x6a\x29\x48\xd9\x66\x8d\xef\x5a\x54\xce\x58\x5a\x5b\x43\x6a\xd6\x14\x45\x82\xb6\xc3\xa8\x62\xc7\x47\x1c\x26\x22\x48\xb1\xad\x56\x57\x3b\xca\xb5\x54\x66\x3f\x66\x57\x8c\xbf\x0a\x05\x33\xad\x20\xe0\xf5\x07\xe8\x8a\x0f\x40\xfa\x3a\x75\x26\x04\x79\x20\xb0\x37\x53\xa2\x36\x39\x8d\xa7\x2f\x17\x0b\x16\xf2\x35\xe2\x56\xf0\x52\xce\xce\x39\x13\xb3\x5a\x34\x47\x8b\x57\xbe\x3e\xf8\x5c\x59\xba\xa9\x0d\x7d\xcc\x4a\x6d\x5c\xc1\xc0\x9a\x6e\xd9\x9d\x87\x3b\x50\x88\xe0\x73\xa4\x44\x7b\x1a\x87\x49\x76\xb1\xd9\x94\xb6\x2d\x99\xff\xd7\x30\xc8\x47\x15\x7b\xbe\x87\xed\xf1\xa6\x2d\x7e\x5c\xd3\x03\x46\x50\xd7\x85\x1d\x34\x9a\x56\xc9\xc5\x98\x10\xad\xaa\x8f\x8d\x97\x9c\x75\xae\xb3\x65\x47\x2c\x39\x7b\x61\x90\xb2\x15\x60\x24\x0b\xc6\xe7\x21\xc0\x00\x3f\xee\x68\xec\x8b\x00\x41\xb5\x14\x5e\x4d\xde\x52\x81\x9c\x3c\x73\xad\x55\x45\x8d\xd7\xac\xf9\x23\x8b\x96\x92\x05\xcd\xce\x05\x4b\xa7\x2f\xf1\x49\x2d\x8a\x45\x1f\xfe\x80\xe1\x1b\x93\x3c\xb8\x47\xc7\x36\x95\xd0\x59\x2d\x1d\x69\x48\x82\xb5\x5d\x47\x91\x50\x49\x6a\x78\xb2\x5e\xd1\x59\x75\xbc\x01\x03\xce\x92\x16\x47\xef\x5d\x6b\x2d\x36\xa5\x02\x1b\x91\xeb\x7c\xb6\x68\xcd\x20\xe9\xfa\xdb\x1a\xa6\x9c\xda\x00\x0e\x56\xb3\x17\xd7\xf6\xd9\x52\xca\x2c\xb5\xcf\x19\x9b\x9e\x85\xd1\x87\x2f\xe7\x92\x3a\xd0\x6d\x54\xc2\xbe\xe9\xbc\xe1\x3e\xee\x82\xaf\x5c\xf0\xc9\x73\xc1\x78\x81\xd1\x52\x9b\xd4\xc0\xfc\xfd\x49\x86\xf1\x7b\xb9\x77\x2e\x27\x9d\x86\x46\x08\x44\x25\x81\x37\xaa\xf7\xbf\xa1\xb3\x26\x2f\x9b\x1f\xca\x01\x46\xd8\xe2\xd9\x11\x4b\x15\x58\x5c\x7b\x58\x08\x6b\x55\x2e\x9d\xc3\x04\x72\xd6\x18\x1d\xac\xc5\x23\x1b\x84\x53\x20\xe3\xa2\x8c\xb2\xa4\x35\x4b\xe1\xd3\x6a\x39\xc5\x03\x9b\xe5\x14\xa7\x01\x41\xa0\x1c\x0f\x50\x88\x41\x8c\xea\x11\xa3\x22\x74\xd7\x20\x86\x8c\x65\xc2\x8c\x09\x99\xb2\x84\x5d\x84\x92\x61\x90\x2a\x5a\x14\x41\xc6\xdc\x4f\x38\x27\x95\x80\xf5\x3d\x05\x75\x9e\x9f\x29\xd1\xa0\xe7\x0c\x5f\x1b\xc9\xd7\x80\x79\x51\x0d\x1f\xae\x88\x9e\x6f\xa7\x3a\xc2\x31\x17\x45\xbf\x3d\x35\xf4\xcc\x18\xb9\xb9\x78\x52\xbf\x2a\x55\x54\xe3\xda\x95\x65\x99\x13\x41\x6a\x11\x8a\x39\xb6\x6e\x6f\xd9\xa9\x98\x14\x01\x78\x20\xb1\x82\xe4\x78\x28\xeb\x9d\x62\x3e\x83\xfa\x86\xfc\xe5\x83\x01\x0c\xa2\x91\x5e\xa7\x61\xb5\x7b\xdf\xc3\xc7\x8f\xfa\xdd\x25\xe3\xd7\x76\x34\x0b\xe3\x8d\x0c\x5b\x9d\x97\xdc\x5c\xef\x44\x85\x69\x7e\xe5\xe0\x4f\x9f\x83\xdf\xec\xb2\xed\xc9\x38\xfa\xb0\xd1\xb6\xa7\x5e\x1a\x16\x01\x6e\xf7\x1e\x4d\xd3\x9b\xcc\x89\xc8\x0f\x95\xf5\x5a\x34\x0d\x80\x4d\xb2\x6c\x3f\x93\x09\x2c\xf4\x12\x18\x62\x2c\x5e\xc7\x62\x91\x84\xd7\x6a\x07\xc8\xdd\xb7\x6f\xf1\xfc\xc9\xc7\xb1\x43\xae\xc7\x0e\x91\x59\x96\xc8\x78\x01\x8f\x54\xc5\xdf\xf4\x83\xbb\x0b\xcf\xfb\x9d\x21\xb9\x8c\xd9\x15\x2c\xa9\xfc\xcd\x03\x9c\x22\xd9\x03\xb4\x66\xaf\xf5\x60\xe9\x58\xbc\x4d\xff\xa1\x4b\xd4\x98\x74\x4b\x28\x8a\x76\x53\x57\x90\x6c\x58\xcf\x82\x40\x1e\x1f\xd7\x8d\x26\xd5\x02\x20\x3c\x33\x5a\x79\xf2\x02\xfd\xd9\xbf\x86\x72\x56\x09\x94\x19\x33\xaa\x08\x86\xea\xb4\xc6\xb0\x9c\x56\xf7\x35\xaa\xd6\x0c\x46\xda\xa0\xb5\xde\xf7\x67\x3f\x6c\xb2\x36\x01\xf5\xf7\x8d\x81\x2b\x2d\x81\xe0\x29\x4b\xb4\xe5\x37\x63\x1c\x70\x21\xd0\x9f\x95\x25\x7a\x2d\xd4\xcd\x74\x08\x9a\x30\xdf\xe7\xf5\x2d\xb3\xe9\x21\xaf\x36\x80\x66\x2c\x3c\x0d\xb3\x7f\x47\x8a\x06\xf3\x8e\xde\x61\xe5\x1d\xbd\xd4\x8f\x5f\xa1\x87\xe9\x19\xdb\x64\x25\x32\x4e\x80\xdd\xd6\x48\xee\x35\xf0\xb8\x18\x35\xc8\x9f\x42\x19\xcd\xe8\xdf\x7e\xfb\xed\x57\x0a\x13\xa9\xd2\x6e\x18\xd6\xca\x3a\x3e\xde\xdc\x64\xa7\x48\xb4\xc3\x68\xd9\xd6\xca\xd2\xa6\x2c\xc2\x03\x23\x4f\x7d\x32\xae\x8b\x2c\x6a\x18\x3a\x31\x12\xde\xb2\x61\xd0\xc6\xd9\x2b\x3d\xd2\x3c\x60\x61\x53\x81\x32\xa8\xc0\x22\x22\x30\xf2\x09\xbe\x77\x7f\xd6\x51\x11\x58\x50\x7d\x0d\x88\x3f\xe5\x93\x17\x69\xc0\xc7\x9b\x0b\x88\xc9\xf1\xb1\x99\x06\xc2\x22\x45\x99\xf4\xf8\x98\x29\x57\xe8\x8d\x3e\x96\x03\x42\xe5\xdb\xd7\x63\x75\xa2\x6f\x17\xbc\x16\x51\x57\x92\xb4\x0f\xa6\x44\xfe\xf8\x06\x67\x72\x7c\x03\x53\x39\xbe\x29\xe7\x72\x6c\x9c\x18\xab\xd5\x8a\xfc\xcc\x3e\x4a\x00\x72\x9c\x56\x6d\xee\x16\xc9\x27\x6a\x13\xc1\xde\xe0\xc8\x88\x12\xca\xc5\x6a\xcb\x1a\xc9\xf3\xbc\x08\xab\x7d\x9e\x48\xeb\xf4\xb6\x13\xba\xee\xce\xb0\x36\xbc\xaf\x2c\xb7\x0b\x1e\x2e\x66\xeb\xa1\x4b\xf9\x82\x35\x88\x42\x74\xdb\xa2\xc3\x16\x73\x7b\x79\xb9\xb1\x52\x6c\x12\x23\x23\xda\xf1\x5e\xcb\x7e\x54\xf4\xd4\x7a\x8c\x9e\x51\x64\x1d\x2d\x2f\x25\x06\x89\x4c\xa7\x3f\xc6\xe9\x07\x93\xd1\xb7\xaf\x89\xa4\xf9\x24\xa1\x80\xad\x1d\x53\x08\xfc\x7a\x75\x61\xdd\x08\xc5\x35\x22\x95\x63\x0e\xca\x61\x26\x1d\x10\x4c\x72\xd6\x40\xca\x2e\x04\x74\x21\xaa\x5d\x90\x74\x55\x86\xbe\x6d\x0c\xfe\x7a\x0b\xfa\x12\x62\x64\x03\x06\x81\xfd\x18\xc0\x63\x6a\x31\x5e\x6f\xa7\xb7\xb7\xcf\xd6\x3d\x11\x0d\x15\xa6\x2c\x6d\xe5\x02\xdf\xcd\xaa\xea\xdc\x29\x0b\xc0\x44\xe5\xa7\xe5\xc7\x86\x45\xc5\x2c\x3e\x97\x38\x49\xa7\x72\x42\x44\x50\xc6\x92\x61\x45\x84\x38\x47\x1b\x20\x80\x4d\x7f\x46\xb3\x77\x65\x27\x26\xa1\x75\xc3\xd5\xe2\x94\x14\xb0\xa5\x62\x3c\x2a\x87\xe3\x42\x14\x3c\xdf\x4e\x89\xf1\x5d\xc9\x36\x42\x2a\x33\x00\x98\xb0\xcd\xbd\xd0\x78\x4a\xd6\x43\x2d\xc2\x80\xd1\x78\xda\x32\x8a\xa3\xf4\x59\x10\x84\xc7\xc7\x05\xdd\x1a\x8a\x75\xd4\x7e\x87\xc7\xc7\xa6\x06\x97\xb5\x83\x2b\xdb\xc0\x95\x1a\x5c\x45\x54\x37\x29\x2c\x9d\x31\xaf\x2b\x84\xe5\x6e\x51\x4e\xd0\xab\xf7\xef\x29\x13\x51\xb8\x60\x4a\x7c\x20\x6c\x7a\xc1\xc4\x58\x1c\x5e\x73\xb5\xb2\xc8\x55\x3c\x95\xeb\xcb\xb4\x26\xdb\xec\xcd\x71\x3a\x55\x49\x84\x66\xe7\xe7\x82\xc9\x7f\x42\xfb\x2b\x8b\xcc\x58\x7c\x31\x93\x9f\xb1\xa3\xbf\x61\x07\x2b\x8b\x34\x65\x9f\xad\xc7\xf4\xda\x4f\x01\xb6\x49\x39\xac\x79\x12\x8f\xad\x1d\xc3\x8b\xea\xa7\x68\x25\xaa\xeb\xd9\x5c\x45\xe8\x09\x69\x7e\x73\x8a\x62\xfd\xbf\x06\x86\x1d\x85\x7c\x8a\x67\x57\xb5\xcb\xcd\xba\xbd\xad\x4b\x97\x5a\xd8\xaf\x1c\x58\xd4\x2f\x6a\xeb\x5f\x9d\xa1\xc3\x40\xc5\xda\x39\x59\x63\x11\xca\x99\xa2\x67\x83\xb0\xd2\x19\xd6\xca\xee\xd6\x46\x26\xc9\xcd\x3c\x5b\x0a\x06\x2a\xc9\xb8\x25\xa0\xa5\x3c\x07\x28\x66\xd9\x15\x32\xd2\xda\x41\xc0\x15\x51\xd5\xab\x91\x09\x6d\xb5\x67\xf1\x94\xb5\xd4\x5e\x29\x3b\x46\x25\x08\x34\xef\xa5\xd5\xb5\x55\xf1\x9a\xdf\x7c\x1c\x33\x4d\x0e\xff\x97\x5c\x17\xdf\xff\xc3\xee\x15\xea\x50\x2d\xa2\x53\x30\x49\x17\x8c\xc3\x3e\x18\x5e\xb0\xa6\x9e\xe4\x00\x10\x05\x8c\x55\x32\x5a\x8b\x7b\x74\x5a\xe3\x1e\x9d\xc9\xf1\x71\xf5\x57\xab\xf9\xbd\xe8\x50\xb9\x1b\x48\xb4\x76\x14\x5b\xb1\x5d\x46\xa3\x25\xe7\x2c\x95\x6a\x5d\x34\xce\xbc\x63\xca\x44\xb9\xce\xec\x5f\x98\xed\x7d\x36\x09\x4b\xbd\x6b\xd2\xd6\x78\x73\x6d\x67\x7b\x6d\x69\x35\x5d\x88\xbb\x2d\x51\xd9\xdc\x3e\x5b\x9e\x9f\x33\x6e\x9f\x27\x4b\x31\xfb\x72\x66\x28\x05\xc5\x66\xab\x80\x06\xf3\xee\x21\xe7\xe1\x62\xc1\xd2\x4a\xba\xf4\x9c\x9a\x73\x8e\xa6\xde\xa3\x1f\xdc\x64\x75\xc7\xca\x43\x64\xe3\x51\xe0\xd3\x2c\x35\x8d\x70\x9a\x67\x8d\x50\x7d\xde\x3b\x31\x4f\xbd\x87\xf3\xf3\xb6\x2e\x0e\xb4\xd9\x95\x08\x7f\x02\x14\x71\xc1\xe4\xf7\xf8\x1d\xf5\x83\xb5\x9d\xcb\x98\x67\xd3\x30\x31\x1e\x72\x1a\x0b\x43\x47\xad\x6b\xb3\x6e\x17\x78\xd8\x79\xd5\x9b\x62\x5b\xaf\x87\xce\xae\x3a\x60\x18\x65\x09\xc6\xf7\x35\x7d\x68\xcd\xb7\x5b\x6b\x3e\xce\x63\x78\xfb\x0c\x3f\x0d\x81\xab\xda\x22\xe2\x59\x92\x40\xe3\x87\x62\x61\xbd\x81\xa7\x88\x8c\xdc\xf5\x7b\x70\x00\xc9\xc3\x2c\xff\x74\x0f\x2f\xdf\x55\x18\xcb\x8d\xb6\xe0\x39\x88\x3c\x7b\x84\x8b\xae\xc7\x43\x14\x4e\xef\x09\x91\x3c\x4c\x85\xb2\x1d\x18\x46\xe5\xd7\xab\xbc\xd2\xd8\x68\xe0\xc9\x86\x5e\x89\x90\xa1\x64\x63\x8c\x9f\xbc\x36\xaa\xb1\x12\x77\xc9\x2e\xa4\xa4\x08\xe5\xac\x0a\xf2\xe2\xf8\x6b\x3d\x1c\x82\xf3\x4c\x2b\xe4\xbf\x37\xcf\x3d\xac\x08\x36\xff\x5b\x39\xa4\x4d\x4e\x3a\xac\x0f\xc8\xcd\xbd\x6d\xb9\xfe\xdf\x82\x80\x23\x69\x3a\xcd\x70\xad\xc6\x19\x08\x2d\x2b\x97\x95\x31\x80\x01\xea\xad\x36\xd6\xdc\x75\x8a\xa8\x10\xe7\x0b\xa5\x99\x16\x9a\x55\x6a\x55\xa4\x6c\xe0\xc8\xe8\x19\xcc\x55\x10\xb3\x02\x08\x4b\x51\x3a\x5a\xb5\x01\xb2\x11\x76\xc3\x68\x2a\x01\x30\xd9\x06\xd1\xb3\x8d\xd2\xf2\xef\x2d\x5e\xdf\x35\x09\x4d\x57\xcb\xdd\x90\xa5\x38\x52\x9d\x24\x13\x5a\x5b\x73\x2b\x6f\x6a\x4b\x39\x32\x37\xb6\x54\xdb\x0d\xd2\x9d\x1c\x20\x09\xc5\xcc\x2e\x4e\xee\xb4\x30\xc1\x24\xb6\xb1\xd0\xe6\x5a\x4f\x92\xf3\x65\x7c\x6e\x17\xbf\x1f\xf6\x10\x6a\xf5\xc0\xc0\x57\xaf\xe4\xa3\xf2\x4a\x8a\xe0\xc4\x3c\xfd\xaf\xd3\xff\x9c\x4c\xac\xe7\x27\x17\x9b\x8f\x2a\xb4\x9e\xef\xce\xd2\xb5\x23\x87\xab\xf6\x73\xf0\x24\x4b\x5b\xa2\x44\x80\x90\x5a\xe2\x44\x40\x2f\xde\xe3\x68\xee\x9e\x27\x78\xef\x7b\xb8\x58\x9f\x17\xde\x1c\xe2\x5a\x1c\xef\x21\x61\xe9\x68\xac\x9f\x3f\xc3\x42\x24\x09\xb8\x19\x56\xcf\x9d\xd1\x79\x28\xa3\xd9\xcb\x24\x31\x05\xe6\x6b\x4d\x4e\x93\x22\x99\xe0\x04\xb4\xf5\x34\xb0\xdd\x20\x08\xb2\x22\x91\xaa\x71\x6a\x58\x2f\x8c\xba\xa5\x14\xa8\x91\xc0\x8b\xfc\x69\x46\x8c\x89\x61\x8d\xb3\xfc\xca\xdb\xfc\x14\x28\x9e\xdb\x8a\xe9\x2c\x4c\xa7\x89\x86\x2b\x24\xbb\xce\xab\xa9\x43\x58\xcb\x9c\x72\x97\xcd\x03\x6c\x3b\xe3\x72\xcf\x39\x63\x92\x7d\x94\x8f\x28\xcf\x43\xcc\x92\x29\x26\x58\xa8\xe7\x7a\x68\x00\xda\x96\x25\xbb\x76\xf8\xb7\x72\x10\xf7\xa8\xce\xbe\xd0\x98\x26\x83\x53\x39\xb1\x88\x6c\xb5\x78\xc9\xe2\xe8\x6e\x4e\x10\xea\x34\x5c\x33\x7a\x66\xa7\xf6\x82\x67\x95\xa2\x8c\x2f\x6c\xf5\xfa\xcb\xe1\x77\x8f\x0c\xcc\xdb\xf5\xcd\xb6\x3c\xb9\xb9\xa2\x67\xe8\xd4\xe1\xcc\xc6\xdd\x26\xcf\x64\xa9\x72\xdc\x5a\x18\x97\xf3\x53\x98\x86\x17\x4c\x5d\xf2\xb0\xee\xb3\x02\x71\x34\xc6\x6b\x45\xdb\xbc\xb9\x9d\xc2\x76\xa6\xd6\x54\xa5\xf4\xed\xed\xe9\xc4\xda\xe8\x42\x05\x2c\xc2\x26\x62\xa0\xcb\xf3\x1d\x13\xd9\x92\x47\xec\xf8\xd8\xb8\xe2\xb1\x64\xea\x69\x99\xbc\xec\x65\x92\x64\x57\xb8\x17\x6f\x8b\x98\xaf\x26\xb3\xc8\xe6\x34\x77\x6b\x9b\x16\x49\xd7\x32\x50\xb7\xe5\x92\x3c\xcb\x40\x22\x3b\x5a\x4b\x87\x67\xa6\x15\xbc\x82\xce\xbe\x1d\xa9\x84\x53\x21\xaf\x13\x46\x95\xe1\x3c\x48\xeb\x3f\x25\x8d\xd3\x94\x71\x65\xf4\x7e\x6e\x2c\x3e\x1a\xd6\xb8\xd6\xc3\x5e\x33\xb7\xa3\x93\x74\x99\x24\x4d\x33\xde\xee\x25\xc1\xc2\x69\x7b\x5a\xb6\xb2\x78\x0e\x94\x2a\xfd\x47\xab\x73\xd5\x30\x33\xbc\x53\x64\xc3\xc2\xc1\x91\xe8\x7d\x2c\x09\xaf\xb3\xa5\xac\x5e\x95\x71\x88\x58\x8b\x2d\xa9\x26\x36\x09\xb5\x50\x64\x53\x95\xa7\x28\xd1\xce\x58\x98\xc8\x19\x12\xbf\x1d\xa7\xe7\xd9\x23\xd8\x79\x8c\x83\x09\xb9\x18\x01\xa6\x54\xff\x62\x23\x28\x1d\x21\x19\x97\xaf\x00\x20\xf1\xfd\xf5\xdb\x39\x80\x02\x12\x69\x6b\x52\x81\x5a\x60\xc9\x7b\x19\x4a\xcc\x1a\x5a\xcd\x29\x20\xcb\xe7\xf9\x21\xfe\x54\x9f\xc5\x5f\x84\x42\x60\xda\x7c\xcd\x67\xf3\xdf\x41\x10\xf0\x17\xce\xd8\x3d\xc2\x52\x11\x8f\x55\x42\xe3\xbc\x58\xf1\x40\x97\xb3\x75\xc1\xab\x90\xa7\xd8\x9c\xee\x86\xb7\x77\x63\x6f\x68\xb7\xe3\x1e\x69\x74\x8d\x8b\x9c\xd0\xab\xf2\xdb\xdd\x67\x35\x5b\xca\x45\x73\x45\x3e\x0e\x33\x53\x4d\x34\x6a\x01\x79\x72\x30\xff\x29\x5a\x10\x6a\xce\x1f\xc1\x72\x24\x51\xb6\x4c\xd7\x5d\xc2\xfa\x30\x60\xab\xa5\x48\xc9\x69\x47\x35\x65\xaf\xd4\x5a\x8b\xac\xe2\x63\x86\x09\xd0\xee\x46\x16\x6c\x6a\x73\x2d\x49\xb4\x9b\x61\x15\xa0\x36\x6e\x95\x7f\xf8\xde\xb5\x89\x32\xaa\x50\x4f\x5a\x83\xfd\x73\x78\xf1\xef\x18\x43\x54\xca\xcb\x2c\x2f\x78\x3c\x7d\x97\x5d\xbd\x49\xa7\x86\x45\x96\xa9\x6a\xf8\xba\xa9\xe0\xe9\x1c\x07\x06\xf6\x28\xe8\xff\x62\x61\x34\xa3\x9a\x89\xb4\xa4\x8a\x6f\xe5\x41\x47\x2d\xcc\x42\xde\xde\x16\x4c\x02\x7e\x62\xbc\xc0\xfd\x20\x58\xe7\x5c\xad\xd0\x60\xa0\x52\x3e\xf4\x35\x52\xfc\x7b\x8e\x08\xc5\x74\x5b\x88\xd2\x6f\x49\x94\xa4\x9d\xa1\x28\x45\x18\xd6\xf1\x31\x7b\xfe\x7c\x2d\x5c\x4a\xb7\x4b\xab\x29\x95\xa0\xdc\x8d\x86\x66\x6c\x84\x4b\x99\x75\x4e\x3a\x62\x11\xa6\x9d\x42\xe5\x64\xcf\xd7\x22\x10\x8b\xc9\x2a\xda\xba\xbd\x75\x54\x6a\xdd\x83\x78\x44\x8c\x12\x5b\x9c\xa5\x8f\x48\x55\xdc\x3f\x25\xe0\x1a\xf4\x0f\x94\x14\x30\xbe\xbc\xb6\xa3\x6c\xca\x54\xfe\x86\x3a\x3f\xa8\xbf\xdb\x52\xeb\x29\xca\x6f\x20\xf1\x3c\x8c\x5b\xae\xa5\xb8\x92\x6b\xc5\x49\x19\x7b\x01\x6f\x97\xf3\x74\x23\x9b\xdd\x64\xf8\xe4\x4c\xc4\x9f\xd4\x29\xd3\xba\xdd\x93\x70\x22\x1e\x8a\x54\xc3\xf5\x4b\x7c\x45\xb9\x57\xef\x3c\x40\x90\x93\xf3\x34\xbe\x34\xb6\x72\x66\x1d\x23\xd5\x73\x1c\x12\xb1\x24\x51\xca\xdd\xd8\x75\xfd\x92\x67\xf3\x2a\xcf\x66\xf2\x3d\xd6\x6c\x78\x94\x9a\x53\x37\xb9\xf3\x61\x59\x35\x27\xc1\xa9\xd7\x23\xf9\xff\x93\x87\x08\x56\xff\x1d\x86\xf7\x23\x12\x01\x6e\xeb\xa7\x06\x3c\x28\xd4\x1d\x34\x37\x17\x36\xcf\x35\x8e\x87\x99\xa2\x0a\x6e\xb7\x1e\x89\xaa\x29\xa9\xe5\x4d\x81\x54\xbc\xb1\x20\xc7\xdf\x1a\xdb\x57\xf3\xd0\x62\xa8\xb8\xa9\x45\xb1\x55\xb9\xb9\x6a\x74\xa5\x02\x77\xe3\x4f\x6d\x26\x85\x66\x25\xa4\x0e\xbc\xaf\xa0\x34\x1e\xcc\xc3\x38\xed\x7c\xd7\x01\x4a\xb1\x8a\xec\x0d\xd5\xc8\x90\x0b\x26\xbf\xcf\x96\x48\x39\xaf\x92\x98\xa5\xf2\x1d\xe6\xaa\xc0\xdc\x60\x79\x2b\xdf\x9c\x67\x99\x64\x1c\xef\x0f\x08\x0c\xad\x8a\xa3\x0e\x36\xf9\xc6\x22\x21\x26\x22\x58\x3c\xc7\x13\x6e\x2c\xd5\x71\x73\x24\x09\x80\xf4\x65\x18\x27\x5a\xfb\xb7\xc3\xa3\x3c\xc2\xaa\xc4\xc8\x4f\xa1\x9c\xd1\x79\xf8\xd1\x74\x48\x92\xa7\x56\x58\xe2\xdd\xc2\x6f\x61\x52\xcc\xda\xa3\xf7\xe8\x8d\xfe\x35\x2b\x7c\x41\xea\xf6\xd0\xa2\x1f\x0c\x3d\x24\xf1\x1a\x62\xf4\x04\x16\x33\x9c\x6b\x27\xcf\x1c\xa5\x37\x74\xb2\xef\x5c\xc7\xf5\xc7\xdd\x67\x41\x7c\x7c\xbc\x7e\x2a\x59\x33\x92\x1a\xd5\x5a\x47\x67\x9c\x85\x1f\x8e\x74\xfd\x41\xb7\x3b\xf6\x77\x54\xf7\x7d\x02\xff\x77\x9b\x75\xbb\xc3\xc1\xd8\xdb\x51\xb7\xe7\x90\x9e\xd3\xa8\xf8\xd7\xee\x70\x38\x76\x77\x54\x74\x1d\x67\x62\xad\xe2\x67\xc1\x4e\xac\xe4\xc9\x40\x1e\xc3\x5a\xb2\x0e\xb4\x4a\x63\x10\x4c\xab\x97\x7f\x67\x04\xd0\x5e\xee\xb0\x62\x57\x38\xe8\x12\x44\xb5\x65\x14\xee\xb2\xf0\xab\xbb\xec\x91\xb9\xcb\x92\xf5\x7d\xb8\xf4\x8c\xf1\xfd\x77\x64\xad\x30\x81\xa0\xa4\x19\x7a\xba\x4c\x12\xa2\xe8\x51\x7d\xcf\x2e\x19\x3f\x4f\xb2\x2b\xe4\xb3\xa1\x10\x63\xa3\xf2\xc4\x00\xc9\xb2\x79\x2f\xc9\x8a\x64\x69\x33\x6b\xe7\x8a\xfc\x5e\x7f\xa4\xe6\x74\x6d\xf9\x2b\x78\x54\x54\xa5\x4a\xab\xa7\xb8\xbe\x82\x4e\x9f\xe9\xca\xc3\x0b\x9a\x16\xea\x82\xed\x6b\x86\xaf\x97\xd5\x44\xed\x23\xea\xf3\x9b\x7a\x30\x18\xc6\xec\x6f\xd8\x4a\xd6\x82\x54\xf3\x65\xda\x92\x1f\x22\xdf\x16\x52\x0d\xa9\xb5\x52\x50\xe5\xc9\x6b\xcc\xc2\xbd\x05\x68\x00\x12\x6b\x4f\x6c\x83\xba\xd4\xb7\xe6\xbe\x62\x89\x42\x97\xb5\xeb\x8e\xbf\xf2\x2e\x43\x46\x42\xd3\x74\x88\xa0\x95\x3b\x13\x91\x51\xa8\x68\xbc\x09\xde\xf1\xfe\x7b\x63\x4a\x8b\x5b\xfa\x36\x4f\x97\x5b\x4f\xed\x84\x88\x82\x1d\x3d\xad\xed\xdd\x4d\x5a\x3a\xaa\xda\xe9\xb5\x03\x54\x98\xdc\x3a\x3e\x6e\x31\xe0\x73\x6b\x65\xae\x5d\x7d\xb9\xf1\x26\x43\xb9\x7b\xa0\x85\xc3\x11\x46\x9b\x4f\xc9\x3d\xe5\xb9\x34\x9c\xb3\x96\x5d\xad\x82\xa7\xb6\x43\x8a\xfa\xbd\xfe\x85\x2b\xa5\x4c\xc3\xba\x5a\x3d\x4c\xac\xeb\x5e\x9d\x6c\x8e\x8b\x44\xca\xdc\xe3\x10\xea\x41\xb7\x4d\xee\x41\x8c\x2d\x52\x64\x7e\xb3\x55\x4e\xfe\x55\x3e\xa0\x96\x1f\x92\x1e\xa6\xb0\x0b\xea\xc9\x65\x15\x65\x92\x4d\xf4\x08\x2d\x7f\xd7\x10\xff\xac\x8a\x6b\xce\xdc\x40\xb0\xb7\xb7\x4d\x9f\x16\xb7\xac\x43\xa9\x7b\xb5\x3d\x81\x55\xcd\x6a\x53\x77\xa9\x19\xd6\x8b\xca\xa4\x32\x9d\x6d\xe1\xf7\x92\xb0\xd7\x78\xf4\xba\xb7\xee\x5f\x10\xe9\xaa\x8e\x61\xe5\x2d\x07\xcf\x9c\x6a\xaa\xc2\x1a\x97\xc5\xf4\x69\xa7\x40\xf1\x81\x0e\xe6\x9d\x34\xb8\x2b\x66\x59\x6b\xf8\xf3\xd9\xda\x4d\x47\xc9\x7e\x42\x52\x12\x5e\x37\xef\xe4\xd8\x2f\x7a\xfe\x6b\x72\x82\x27\x23\xd7\xf0\x75\xb9\x66\xa7\x0c\xb3\x71\xcd\x58\x37\xed\x17\xe7\xd5\x29\xd6\xda\x72\x11\xb1\x51\x5d\x13\xcf\x82\x80\xb5\x9c\x35\x59\xb5\xdf\x4e\x6c\x48\xbe\xd4\x7e\xf7\x7a\x1d\x95\x0d\x26\x5f\xb7\xc7\xc7\x1b\x96\x48\xcb\xa1\x91\xed\xd7\x98\x2c\x66\x3c\x14\x87\xa5\x68\xfe\x4a\xfc\x8f\x8a\xf8\x37\xbb\x3a\x0e\x0a\xa3\xae\x13\xc2\x44\xc5\xa7\xa9\xab\x4f\xee\x2b\x42\x20\xc7\x6f\x89\xf4\xc0\xe7\x46\xf3\x98\x45\x7b\x04\xde\xd6\x7b\x0c\xf2\xc8\x92\x4a\x44\x53\x7a\x7c\xdc\x20\xc8\xd4\xba\xbd\x35\xd3\xe0\x34\x9d\x58\x24\xdd\x70\xa6\x59\x47\x35\x95\xe1\x4c\xcd\xf0\x32\x66\x6d\x48\x1a\x8c\xe9\x85\xeb\x77\x08\x62\xd2\xa8\x9c\xcb\xac\xbd\x65\xd6\x8d\x36\xcb\x94\xb7\x79\x2a\xeb\xcc\x70\x6c\x18\xc0\x00\xaa\x91\x55\x5a\xfc\xc2\xef\x95\x33\x73\x2a\x66\x58\x9f\x06\xd4\x42\x52\x19\x3d\x6e\xae\xd5\xb1\xdd\x9a\x49\xc5\x1b\x8c\x37\x64\x12\x3d\x9d\xd4\xee\x97\x68\x86\xd5\x69\xa4\xe8\x41\xad\xe5\xbc\x6f\xe0\xa7\x25\xcf\x30\xde\xc7\x49\x1a\xd1\x63\x39\xae\x55\x82\xd5\x66\xa3\x6b\x17\x00\x68\xfa\x53\xe3\x2b\x52\xf2\x33\xe2\x6e\x03\xbd\x42\x91\xc5\x75\x9c\x24\x9c\x4e\xdb\x03\xeb\x81\xc3\xcc\xa9\xe4\xf1\xdc\xb4\xd4\x71\x70\x60\xe7\x9b\x86\x63\x18\x35\x75\x06\x01\xc3\x6b\x42\x78\x71\x97\x7d\x6a\xe9\x6b\x3a\x8e\x38\x05\x01\xf5\xbb\x3c\x75\x7c\x2d\x39\x4a\x6d\x2a\x24\x08\x85\x5b\x46\xb4\x96\x94\x7f\xa7\xa7\x6a\x91\x25\x71\x74\x6d\x2b\xef\xd0\x4e\xc1\xa8\x11\x5a\xfd\xb9\xfc\xb5\xeb\x3b\x38\x67\x8b\x6c\xd3\xa5\xd1\x6c\x91\x09\x60\x54\xd7\x7a\x30\x25\xc0\x3a\x97\x90\x4a\xcd\xf0\x6e\xaf\x26\xa6\x51\xad\xba\xba\xd7\x47\xb5\x6b\x10\x75\x9d\x45\xfe\x2b\x4c\x92\xec\x4a\x67\x4c\x78\x3b\x65\xa9\x8c\xe5\x35\x26\xec\xad\xb1\xd2\x0a\x7e\x27\x24\x16\xef\xa3\x6c\xa1\x32\x0d\xdd\x3f\xb5\x78\xde\x9a\xb1\x66\x50\x44\x52\x2d\xb3\x52\x88\x8a\x6b\x74\xbd\x99\x12\x45\x79\x9e\xf2\x3a\xd2\xf2\x4b\x4e\xcc\x9c\xf4\x8a\x88\xb3\xe0\x54\xdf\xf0\xf1\xab\x46\x49\xfe\x66\x6c\x18\x2b\xa2\xdf\x69\x0c\x75\x72\x14\x55\x4b\xe9\x19\xb0\xe3\xfc\xdd\x6a\xb2\x23\x05\x2f\xbf\xde\x8d\x28\x1d\xe9\x9b\xd6\xb4\xba\x1c\x59\x45\x78\x4e\xcb\xb5\x19\x6a\xb2\x4e\xf3\xa2\x13\x63\x2c\xd7\xcf\xfc\x2e\x38\xbb\x8c\xb3\xa5\x78\x5d\x45\x5b\x7d\x02\x90\x55\x10\xa3\x5a\x62\x2d\xf1\x72\x4b\x19\x34\x57\xad\x1f\x14\x6e\x2b\xa9\x42\x3b\xd7\x21\x59\x9f\xdd\x56\x70\x55\x47\x5b\x08\xea\x99\xcc\x37\x87\x3c\x5a\x48\xf3\x63\x8c\x7d\x37\xd3\x82\xed\xb7\x84\x5a\x63\x84\xf6\xfa\xfd\x20\xfb\xb2\xa2\xf6\xdb\xc3\xf6\xba\x6e\x6c\xcd\x40\xad\x7c\x27\x76\x08\x9b\xbe\xad\x04\xc1\xaf\x87\x3a\x9e\x92\x40\x2b\x1e\xd1\x5e\x50\xe7\xfe\xf5\x9d\xe1\x90\xbd\xa0\xa0\xd7\x75\x5f\xf2\xc1\x89\xf0\xf3\xf0\x7d\x8c\x55\x42\xdb\x93\xde\x48\xca\x7b\x02\x45\x78\xd9\xb8\x25\xb0\x92\x72\x22\xcc\x85\x44\x66\xe9\x5e\x14\xf2\x09\x37\xf5\x3d\x5d\xa8\x47\x36\x2f\xe4\x62\xf7\xdb\xae\xda\xd2\x25\x1c\xb0\x0b\x01\x38\x98\xb0\x1d\x04\x65\x95\xa7\xbe\x11\xb6\x59\xe8\x17\xc5\xfc\x99\x06\xad\xdd\x3f\x24\xad\xaa\x65\x7d\xed\x4e\xbf\x7a\xec\x3a\x32\xe0\x34\x60\xea\x7c\xe6\x51\x71\x5f\x7d\x10\x04\xa9\x7a\x96\xdf\xcc\x93\x6a\x1b\x44\xfe\xf8\xd4\x99\x10\x11\x18\xef\x96\x09\x13\x06\xba\x8b\x95\x61\x70\xcd\x0d\x0b\x6d\x85\xe5\xe1\x98\x1f\xc2\x38\x61\x53\x58\x69\x8b\x90\x0b\xd6\x79\xf9\xea\xc7\x0e\xc7\x46\xac\x71\x5b\xf9\x7c\x89\x6a\x32\xee\x68\xba\xb4\xc6\xad\x9d\x57\xc4\xfe\x0d\xed\xa8\x0d\x7d\xdc\x79\xa9\xbf\x75\xae\x62\x39\xeb\x60\x6e\x6b\x6c\x53\x65\xb9\x0e\x83\x90\x8a\xe5\x99\x90\x7c\xaf\x9a\x65\x37\x63\xc3\x7a\xee\x5a\x2b\x71\x7c\x8c\xa6\x4e\xc5\x67\x04\x09\xab\x89\x4a\xd6\x9c\x3d\x38\x15\x6b\x33\x6f\xb2\x52\x75\x58\x84\x9c\xa5\xb9\x72\x6a\xad\x48\x92\x85\xd3\xb7\xa0\xbb\xd6\x38\x3e\xcf\x6f\x28\xc9\xeb\xc1\x84\x36\x4c\xc1\x61\x80\x4f\x37\x76\x29\x74\x5f\x98\x65\x8a\xac\xcb\x31\xb5\x10\x39\x49\x8a\x93\x03\x46\xce\x87\x73\x1f\xdc\xac\xf5\xba\xb2\xac\x52\x3b\x24\x89\xf5\xad\xe9\x94\xd7\x52\x5a\x26\x6f\xdc\x40\xa7\xef\x60\xc8\xf4\xba\xa9\x5f\x3d\x47\x12\x92\xad\x6d\xc6\x62\xf7\x66\xbc\xc8\x2e\x19\x57\x67\x1b\xbe\x5e\x3e\xf0\xf4\x77\xd2\x7d\xd2\x6e\x57\x6f\xb9\xdd\x61\x2f\x62\x1f\x17\x61\x3a\x55\x9a\xcc\x07\x76\xad\x93\x55\xe3\x09\xc8\x4d\xc1\x82\x77\x8d\x9c\xba\x58\xc6\xd3\xd2\x62\x04\xbf\x8a\x03\xf1\x5b\x34\x85\xe6\x99\xa1\xdb\xdb\x36\x53\xae\x71\x1a\x4f\xff\x2b\xa8\x12\xbb\x5d\x3f\x92\x08\xdd\xe1\x21\xc4\xb6\x7c\x4f\xd8\x4d\xe1\xe6\x70\x57\x6d\x16\x22\xc1\xd2\xe9\xda\xa0\xdb\xaf\x37\xa8\x68\x30\x07\xa6\xfb\x59\x64\x57\x8c\x6b\xc1\xc2\x9e\x2f\x13\x19\x2f\x12\x7d\x4a\x49\x65\xce\x6b\x0b\x39\xac\x55\xaa\x94\x3d\xac\xe1\xa7\x18\x8f\xd9\x3a\xaa\x5d\x28\xda\xdd\xc0\x9f\x06\x15\xdb\xae\xaf\x3f\x08\x25\x4f\xfa\x0e\xfb\x4d\xeb\xe3\x41\xd6\xd2\x9f\x6a\x09\x55\x07\x2c\x96\x17\x17\x4c\x48\x36\xb5\xd5\xfd\x71\x0f\x8d\xad\xf5\x0e\x9e\x3a\xfa\xee\xba\xca\x9e\xfc\xc0\x4f\xce\xd8\x79\xc6\x99\x5d\x5c\x34\x78\x37\x3c\x34\x9b\x79\xf2\x68\xb9\x2f\x3e\xfe\x34\x88\x58\x24\x61\xc4\x66\x59\x32\xbd\xfb\x56\x54\x6b\xe3\xe9\x23\xa4\xca\x14\x2f\x78\xb6\x5c\xdc\x1d\x2f\xeb\x4d\x3d\x79\xf4\x28\x9f\xd8\xb6\x94\x47\x7b\xa1\xa6\xd1\xcc\x93\x47\xcb\x3d\xa5\xb9\x27\x2d\xc4\xf1\x70\x1a\x67\xeb\x4b\xe5\x8b\x1d\xd3\x6d\xea\xca\xee\xf6\xb0\x00\xd7\xc7\xf8\x1f\x1d\x14\x70\x7c\x5c\x66\xdc\x8d\xc5\x22\x94\xd1\x4c\x25\xbf\xc1\xbb\x4b\xb3\xa5\xd0\xb9\x70\x0c\xcc\x7b\x6b\xac\xa5\x8d\xdd\x79\x42\x2f\x4f\x94\xaf\x52\x2a\x3f\x02\x7c\x1d\x08\x7e\x96\xb0\x47\xef\xca\x56\x8e\x03\x00\x35\x77\x28\xab\xef\x35\x57\x41\x39\x92\x03\x4f\xa7\x63\xc5\x87\x74\xa1\x4d\xb3\xf9\x09\x03\xaa\xb2\x8b\x03\xd1\x4d\xff\xd9\xe7\x0b\xdc\xdb\xcf\xd5\x03\x63\xae\x3b\x7a\x76\x18\xaf\xaa\x68\xaf\x4e\xc7\xfa\x14\x54\x7c\x35\x79\x4e\x48\x2c\xa9\xec\xeb\x1b\x72\x76\xa9\x97\x3f\x54\x13\x7c\xdd\xcd\xf2\x55\x36\x54\xa6\xbe\x7a\x95\x27\xf9\xc2\x5f\x79\x67\x79\xce\x40\x35\x47\xfa\x9c\xd2\xab\x50\xe5\x2f\x45\xa6\xf0\x1e\xdf\x54\x6c\x66\x77\x71\xe9\x34\xa0\xa2\x51\xc2\x42\x6e\xde\x94\xbe\xe5\xb1\xb6\x40\xab\x58\x70\xc5\xa2\xda\x7c\x33\x0a\xce\x06\x17\x53\x4b\x83\xa9\xac\x69\x12\x9a\x58\xb7\x22\xa2\x87\x8c\xc8\xa0\x12\x23\x6e\x35\x52\x94\x95\xa1\xe1\x05\xe0\xb9\xa1\x5f\x7b\x5d\x6a\x4e\x7f\x98\xd0\x53\x9c\xdc\x89\xb1\x16\x02\xa5\x13\x33\x16\x51\x49\x39\xba\x83\x20\xa8\x47\x63\x6d\x77\x36\x61\x5a\x7c\xed\x97\x78\x1f\x9f\x25\x71\x7a\x51\xf3\x3f\xb5\xf9\xda\xb7\x46\x38\x1c\x6a\x20\xc4\x1b\x36\x76\x70\xf5\x6a\x5c\x27\x91\x7b\x9b\xef\xcb\xbb\xcd\xeb\x16\xf8\x32\x7d\x0a\x46\x3d\x3d\x73\x88\x08\x60\xbb\xcb\xd7\xbc\xe4\xd7\x85\xe5\x3f\x21\x59\xc0\x4e\x1b\xe6\xfa\x89\x69\x7d\xfb\xcc\xe4\x81\x99\x04\x99\xba\x57\xc0\xb2\xe8\x34\x4b\x99\x75\x7c\x6c\xa6\xea\x5a\x88\x24\x9f\x98\x67\xf2\xf6\x36\x8f\x9f\xc2\x90\xfd\x6f\xa1\x4b\xeb\x5b\x1d\x0b\x12\x5b\x37\x02\x40\x08\x83\x78\x75\x1e\xa7\x61\x92\x5c\x63\x2c\x09\xbf\xbd\x55\x67\x84\x32\xaa\xc6\x71\x7b\x9b\x7f\x33\xad\xa2\x64\x7c\x6e\xe6\x0e\xbe\xb0\xc8\x96\x92\xae\x70\x8c\x77\x32\xfa\xe3\xcd\x4d\xcb\x48\x2e\x39\xfb\x92\x41\xa1\x15\xb9\x64\x11\xb6\xdd\x5c\x81\xa1\x6c\xeb\x02\x98\x86\x8b\xa5\x92\xc7\x4c\xb4\x9e\x83\xa4\xad\xf7\x2f\x19\xd6\xed\xed\xcd\xca\xa2\x9c\x4d\x97\x51\x25\x1d\x2c\x23\xb5\xfb\xd5\x3d\x8b\x88\x80\x9f\x3a\x13\x12\x06\xfc\xd4\x2d\xdc\x3c\xa2\x7e\xeb\x37\x15\x32\xe4\x52\xfc\x33\x96\x33\x75\x49\x83\x61\xbd\x50\x3c\x04\x7d\x63\xa0\xf8\x99\xc6\xaf\xf0\x1c\x93\xbe\x2a\x3c\x85\xab\x31\x5b\x11\xbd\x0b\xeb\xab\xa0\xf4\x2b\xe3\xc4\x50\xd7\x25\x1c\xb2\xe1\x0a\x16\x71\x26\x5b\x2e\xad\x7d\xcc\xf7\xec\xae\xf9\x2b\x9f\x9c\xa8\x27\x32\x2e\x31\x33\x1a\xcf\xbe\x60\xa2\xc0\x9a\xc0\x50\x03\x69\x42\xa6\x31\x57\x39\x03\xc6\x46\x28\x22\x63\x83\x4f\x6c\x9b\x0b\x4b\x1d\xfa\x3a\xcb\x3e\xaa\x43\x00\x5a\xf2\x07\xca\x5d\x3f\x1f\x56\xf4\x56\x89\xa4\xcd\xb3\xe5\x19\x53\x26\x22\x43\x81\xb1\x29\x47\xa6\x46\x42\x23\x21\x27\x3e\x24\x78\x89\x4f\xf5\x71\xd1\x19\x66\x46\x39\x50\xc7\xc8\x6f\xfb\xf9\xc2\x3a\xc6\x81\x40\xcb\x50\x8a\x35\x88\x1f\x4b\x86\xab\xc3\x38\x96\x0c\xcf\xec\x34\xbc\xfc\x72\xa8\x57\xe2\xb7\x0c\xcf\x0c\x52\xd9\x81\x1e\x93\x1e\x0c\x28\x12\xeb\xc9\x5a\xbe\x20\x73\xa9\x42\x54\x4b\xd6\x83\x06\x0e\xbd\xfb\xac\x6d\xe0\x80\x69\x12\x4f\x5b\xf6\xf0\xc6\x42\xc7\x82\xc6\xef\x8d\x75\x1e\x4f\xf1\x06\xb5\x72\xba\x1e\x20\x09\x90\x0c\xcf\x96\x49\xf8\x40\xb7\x54\xb4\x14\x57\x5a\x6b\xca\xd8\x54\xd8\x9c\xa1\xe4\xa5\x73\xab\x6f\x4a\x9c\x73\xc1\x01\x43\x9b\x52\xe5\x1c\x94\x22\xa1\x2d\x0b\x02\x09\x49\xf2\x50\xc4\x92\x05\xc5\xc9\xfc\x4a\x80\x0a\x28\x82\xa1\x7c\x2b\xd9\x1c\x53\xb0\x90\x78\x5d\x93\x0e\x0b\x66\x91\xb4\x84\x7b\x48\x75\x4d\x46\xfd\x1a\xdd\x6c\x6e\x73\x16\x5d\x47\x89\x1a\x58\xdb\x25\xba\xb3\x50\xa8\x28\x06\xb1\x23\x4d\xda\x2e\x85\xbc\x48\xc9\x23\xda\x53\xf2\xa8\x8b\xd5\x5c\xb7\xe7\x10\x9e\x5d\xfd\x2d\x4f\xed\x43\xe6\xe1\xc7\xbf\x55\xf2\xfc\xe8\x54\x04\x98\x74\x60\x16\x8a\x57\x21\x3a\x42\xee\x14\x6c\x7f\xd4\x08\xc5\x6c\xcb\x04\xc2\x37\x66\x02\x41\x78\x5b\x12\x7d\x14\xc0\x1b\x3a\x96\xbe\xd1\x6c\x73\x2a\x83\x6a\xd8\xa6\xda\x0d\xb2\x0d\xf0\x16\x17\x82\xe5\xf1\x28\xea\x96\xdd\x34\x28\x57\x7a\x4a\x8c\x6f\x3f\xd9\x18\x84\x37\xee\xb8\x00\x42\xba\xda\x92\xb9\xa7\x04\x96\x18\xbf\x63\x6e\x13\x83\x18\xf3\xf0\xe3\xbb\xec\x4a\x7f\xfb\xdb\x7a\x6e\x1f\x85\xb6\x96\x71\xe3\x05\x09\x6b\x2f\xca\x46\xf0\x4c\x0d\xcb\x47\x59\xe4\xc6\xf1\x9b\xa1\xf5\x0a\x12\x3c\x4a\x63\xe4\xa7\x1a\xac\xa3\xbc\x46\xac\x74\x89\x96\x9e\x2a\xa8\xff\x4b\xfa\xdc\x1b\xad\xea\x59\x88\xe4\xd6\x74\x43\xd5\x63\x69\xd5\xd4\xc5\xad\xb9\x86\x2a\x49\x0b\xc4\xe6\xd4\x10\xd5\x14\xeb\xfb\x25\x1b\x4a\x02\x81\xc9\x86\xc2\x5a\xb2\xa1\xe7\x2e\x89\xd7\xd2\x0d\x25\x95\x74\x43\x95\x79\xaa\x64\x1c\x8a\xdb\x09\xb0\x41\xd7\xa9\xee\x0a\x2f\x1e\xdc\x4a\xcd\xb8\x5e\x96\x1b\xd7\xcb\x66\xc2\x2e\x70\xbc\x83\xb0\x97\x15\xc2\x66\xc7\xc7\xa6\xac\x10\xb6\x5c\x23\x6c\xb9\x3a\x34\x9f\x92\xba\xd3\xf9\x1d\x4b\xa7\x8c\xdf\xef\x58\x4e\xc9\x79\x74\x20\xf3\xef\xb1\x78\xc7\x2e\x62\x21\x19\xc7\x3b\x67\xf5\xcb\x96\x03\x18\x15\x86\xda\x5a\x55\xcb\x48\x98\x71\xeb\x77\xdc\xe3\xde\x15\x5b\xdc\x1a\xd0\xb1\xd0\xa9\x18\xd8\xf4\xf6\xb6\xfe\x24\x4e\x2f\x6e\x6f\xf3\xf5\x24\xfe\x3d\x89\xe7\x73\xc6\x3d\x53\xe7\x00\xe0\x8c\x23\x1a\x4c\x6b\x5c\x8f\x3b\xc5\xb0\xbb\x5a\xdc\xdd\xda\xfd\x7a\xd5\x3b\x25\xd5\x75\x8d\x71\xf4\xe1\x87\x98\x0b\xf9\x32\x8d\x66\x19\x57\xb9\x04\x36\x65\x0a\x5f\xbb\x0b\xd0\x6d\xbd\x0b\xd0\x9d\xbc\xa8\xfe\x18\xdf\xac\xf0\x40\x9e\xc0\x30\x4d\x23\x08\x60\x57\xcc\xce\x3b\xcc\xca\x43\x78\xff\x55\xf2\x3c\xc5\xd3\xbf\xca\x3c\x4f\xf7\xa7\xb7\x40\x30\x2a\x31\x77\x71\x77\x64\x99\xe3\x82\x3d\x5b\x4f\x1b\x95\x9f\xb9\x5e\x3f\xf5\x57\xe4\xe7\xc0\x78\xed\xb7\xa9\x34\x99\x55\x9c\x00\xd4\x6d\x57\x53\x9c\xe7\xd7\x58\x1a\x92\xe3\x75\x3a\x95\x5b\xe0\x85\x32\x10\x02\xbb\x56\xfc\x44\x6c\xe2\x21\x2d\xb9\xc7\xbe\x3b\x8c\xa9\x6c\x6b\xf9\x85\x68\x26\x59\x0f\xcf\xb2\x4b\x0c\x00\x6f\xc9\x8d\xae\xdf\x91\x06\x76\x5d\x92\x63\x3d\xe0\x2b\x96\x08\xd6\xd9\x88\xb9\xb6\x0c\xe9\xf1\xbe\xe2\xa4\xe2\x7f\x62\xbf\xdb\x5e\x94\x8c\x98\xef\x74\x27\x8b\x25\x8f\xcf\xaf\x3f\xa3\x63\xc3\x21\x62\x0f\x2d\x6e\x97\x90\xf4\x50\x41\xb5\xcd\x09\x58\x82\xf8\xcb\x9f\x3f\xcf\x0f\xeb\xbe\x9d\xaa\x65\x2f\x96\x67\x22\xe2\xf1\x19\xb3\x94\x22\x61\xe8\xa2\x6b\xbb\xfd\xde\x37\x78\xbe\xa8\xfe\x18\xab\x46\xf3\x14\xb6\x8d\x89\x2c\xc3\x70\x19\x31\x6c\x99\x5d\x5c\x24\xcc\x2e\xd5\x13\x8e\xca\x4a\xed\xf6\x81\x35\x56\x74\x20\x0f\x52\x53\x5e\xb7\x8e\xa4\x04\x34\xf9\xf5\xd8\xf9\xed\x79\x14\x64\x78\xf1\x85\x93\x9c\x97\x69\x32\x93\x86\x58\x5f\xc0\x36\x39\x50\x6d\xd3\x07\x18\xa6\x76\x88\x38\xfc\xfc\x63\x7b\x28\x32\x03\x89\xe6\x9f\x2c\xfc\xf0\x53\xb8\xd0\xb4\x76\x53\x0b\x2b\x90\xa5\xed\x99\x29\x5e\x8f\x12\x1c\xcf\x1d\x1b\xfc\x34\x9d\xac\x88\x68\x54\xa9\x9e\x22\xd1\x95\x6a\xf7\x6f\x04\x41\x20\x8e\x8f\x4d\x11\xdc\xac\x08\x53\x8b\x8d\x08\xcb\x22\xe2\x34\x9d\x04\x1c\xff\xac\x56\x2b\xbc\x08\xe3\xe4\xe6\xc6\x3c\x7d\x69\xff\xff\x42\xfb\x13\x75\xec\xd1\xef\xf6\xe4\xb9\xb5\x5a\x9d\x5c\x90\x8d\x21\xfb\xe5\xfc\x86\xed\x49\x50\x67\x9c\x9d\xe3\x8d\x66\x89\x91\x27\xfa\x31\x26\x84\x17\xb7\x33\x14\x42\x7e\x1d\x15\x95\xfd\xbb\xdc\xf5\x54\x10\x7b\xb5\x14\x20\xac\x91\xe4\x1e\x00\xe3\x69\x98\x18\xe3\x86\xc2\xd1\x49\xb3\x6c\xc1\x52\xc6\x3b\x69\xc6\xd9\x39\xe3\x1c\x6f\xf6\x6c\xf2\x20\x0d\x23\x31\x7e\x3f\x4b\xc2\xf4\x83\x51\x5c\xdf\x2f\xcb\x42\xd0\x2f\x48\xe9\x97\xe1\xfa\x45\xfe\x77\x1e\x47\xa3\xfd\x75\x89\x0c\x31\x59\x69\xa6\x7a\x94\x07\xa0\x81\x02\x0f\x03\x0d\xaf\x41\x53\xf6\x43\xb8\x75\x54\x51\x26\x8a\x8c\x00\xbc\x4c\x00\x5e\x5e\xfa\x22\x2a\x6b\x82\xbf\x30\x79\xc0\x0b\x57\x48\xda\xb0\x4f\xa2\xff\x4b\x6b\x8d\x69\x94\x4d\xd9\xdf\xdf\xbd\x2d\x48\xad\xa2\xd2\x0a\xf4\x72\x19\x46\xe5\x5c\x75\x6e\x43\x02\x04\xd4\x30\xc8\x2d\x6b\x8c\x8f\x0f\x73\x4f\x6a\xfe\xfe\xa5\x9d\x28\x7b\x67\x1f\x36\x48\x96\x9e\x25\x4b\xae\x4c\x0d\x45\x0a\x44\xf7\x8f\x39\xf8\xa2\x55\x83\xe2\x9e\xba\xb2\x4c\xf1\xc8\xbc\x77\xc2\xb7\xb5\xd3\x9b\x95\x04\x2d\xf5\xac\x5f\xb5\xc9\x6b\x39\x3e\x63\xb5\x28\x3a\x49\x78\x06\xbc\x49\x96\x09\x38\x5a\x3c\xe4\x4a\x25\xbb\xf7\x3d\xbb\x2d\x17\xd0\x6f\x55\x61\x18\x1e\xac\x67\xa9\x7c\xad\xb5\xe0\x5a\xa2\x90\xe2\xb8\xcf\xfa\x33\xe2\x60\x82\x27\x25\xc1\x54\x6c\xd4\x40\x29\x79\x23\xf9\xc9\x5b\x45\x26\x55\xb0\x4f\xd9\x64\x73\xc4\x43\xe5\x4c\x70\xad\xcb\x22\x71\x6d\xcb\x25\xfb\xcd\x17\xc5\xdd\xc6\x8d\xab\xf6\xb5\x95\xbc\x71\x44\x18\x0a\xc5\xe2\x97\xa5\x14\xf1\x94\x99\x8c\xe2\x8c\x95\x57\xec\xc3\xf0\x5a\x8b\xb4\x4c\x64\xb5\x96\xc9\xd6\x06\xc0\x9a\x98\x75\x49\x5b\x46\x2b\x55\x6a\x65\xc1\xaa\x6e\x19\x6e\x4b\x82\x9e\x5a\x52\x02\x5d\xfb\x60\x4f\x40\xf6\x81\xa5\x6b\xd2\xdc\x63\x71\xfc\x6c\xf0\x9e\xee\x76\x01\x65\xf3\xec\x82\x87\x8b\xd9\xb5\x8d\x7f\xfe\x40\x69\xae\xdc\x0d\xdd\xbe\xf3\x17\xb6\x22\x69\x50\xc7\x5e\xbe\x57\x7e\xe7\xbc\x28\x74\x69\xf9\x17\x66\x9d\xb8\x8e\x33\x76\x56\x5b\xa4\x22\x34\xde\xf9\x7e\x9f\x94\xc3\x1b\xa3\x8d\x78\x6c\x8f\xf2\xff\xee\x9c\xbe\x3d\xe6\x51\xc2\x82\x53\x69\xba\x16\x91\x26\xf5\x7a\xf8\x47\x7d\x0e\xf0\x8f\x6b\x4d\x54\x59\x5c\x07\x02\xca\xda\xba\x9c\x4d\xf5\x1f\x55\xd2\x76\xad\xc9\x8a\xcc\xe3\x24\x89\x05\x8b\xb2\x74\xba\x7e\xc9\xdb\x34\x56\x81\x20\xda\xd2\xba\x87\x8d\x15\x4a\xe5\xf2\xc0\x69\x6a\x7a\x3d\xc2\x2c\x92\x9a\x3d\x47\xfd\x1d\xe8\xdf\xae\x03\x0f\x26\x40\x21\x79\x17\x6b\x9d\x97\xf8\xdb\x70\x75\x4c\x8b\x7d\xb5\x52\x07\x84\xda\xda\xe9\xe7\x72\x30\xd6\xed\xed\xe9\xe4\xa8\x25\xe5\x16\x5e\x24\x98\x97\xfb\xae\x96\xa8\x12\x07\x56\xf5\x78\xeb\x67\xa4\xac\x00\xe2\x46\xf5\x90\x2b\xd4\x4c\x4b\xfb\x30\xca\xf3\xdf\xf9\x7d\x27\x97\xd9\xfd\xbe\x73\xc2\x8f\xd2\x20\x5d\x4f\xdc\x57\x21\x41\x07\x2f\x53\x91\x41\xc0\x6d\xf7\xf6\x16\x8d\xa7\x3c\x4c\xa7\xd9\xdc\xb4\xfe\x2a\x56\xf5\x0b\xa0\x2a\xbd\x15\x01\x42\x74\x1e\x2e\xcc\xba\x9e\xa1\x15\x10\x9e\x61\x30\xa1\xdf\x77\xfe\x92\x9e\x70\x72\xed\x8d\xcb\xb1\x9c\xac\x0f\xfe\x2f\xb6\xdb\x77\x48\x9a\x4d\xd9\x58\x52\xf8\x53\xcc\x5d\xa5\x1e\x11\xec\x02\x77\x48\x10\x5b\xf0\xdb\x6a\x2d\x9a\x65\xa7\x20\x76\x1d\xb3\x64\x8a\x6c\x6d\x23\xbb\xdb\x50\xfc\x49\x05\x87\xa3\xd9\x07\xa5\xd9\xe6\x05\xf1\xf7\xe6\x7e\x79\xf3\x39\xfb\xab\x3c\xd9\xb0\x84\xcb\xf0\xd1\x6a\x02\x8e\x56\xd7\x0e\x40\xdc\xc6\x4a\x91\xed\xcc\x99\x0c\xcd\x1b\x2c\x83\xf9\x1f\x09\x5b\x6d\x40\x00\x86\xa8\x24\x8c\x8b\x93\x69\xf4\xc7\x49\xdb\x79\xaf\x87\x85\x60\x54\x61\x3d\x09\xa3\x44\x9c\xb4\x9d\xc2\xdc\x5e\x83\x4d\xe3\x3f\x30\xc2\x7b\x9f\x9d\x78\x03\x8c\x5f\x6e\x2e\xce\x96\x71\x32\xdd\x75\x73\xf0\x2e\xfd\xe8\x8e\x7b\xeb\x79\x11\xe0\xac\xa1\xd0\xa1\xcd\x61\x94\x18\x4a\x4d\xd6\x23\x8e\x99\xd8\xe0\x9c\xab\xa6\xcb\x31\x35\xb2\x3e\xb0\x6b\x61\xb2\x0d\xc1\x86\x0d\xfb\x05\x46\x3a\x8e\xd9\x69\x3a\x09\xf0\x96\xdb\x39\x6c\x34\xaf\x43\x19\x9a\xf0\x0c\xcd\xe4\xf8\xab\x60\xee\x6c\x45\x98\xb5\x35\x05\x01\x69\xa4\x8d\x6e\xbf\x4a\xf9\xa8\xc0\x40\xed\x36\xe3\x74\x5f\x41\x75\x9d\x90\xd0\x0d\xb6\x69\x75\x54\xa3\x16\xd4\xd6\xd7\xbc\xd9\xa1\x5a\x42\x1d\x84\x6a\xbf\xfb\x61\x19\x9d\xc7\x5c\xac\xa7\xd3\x22\xfc\xa1\xa8\x55\xb4\x0a\x86\x06\xc6\x5e\xbf\xa8\x6d\x92\xf9\xce\x3b\x66\x7a\x3f\xff\xfe\xda\x34\x7e\xbb\x5e\x30\xcc\xf3\xa3\xde\xae\x2a\x37\x82\x37\xa9\xbf\xf5\x4a\xf0\xff\x5e\x32\x7e\xfd\x6b\xc8\xc3\xb9\x18\xab\x70\xd1\x9b\x50\x8c\x0d\xf8\x66\xac\x88\x50\xbf\xf2\xeb\xbd\xb4\x8d\x05\x46\xb3\x41\xdd\x57\xb8\x54\xed\x05\x37\x61\x94\x8c\x0d\x61\x68\x2f\xe5\xd6\x50\x6f\x52\x66\x32\x5d\x13\xd4\x54\xf7\xac\x2d\xc0\xa7\xe5\x12\xb5\xbc\x19\xd0\x42\x13\x43\x65\x9f\x6c\x96\x2a\x5a\xb4\xac\x3c\xc5\x64\xa3\xc8\xda\x68\xa0\x35\x50\xbf\xf0\x28\xc5\x0f\x58\x7f\x5d\xa4\xd4\xf1\x03\x3b\xa5\x58\x55\xae\x90\x63\x0d\x14\x7f\xd3\xf0\x02\xf5\x49\x03\x75\x55\x3c\xae\xd3\x90\xad\x0a\xc9\x0a\x65\xef\x4a\x18\xa3\x26\x17\xe3\x65\x92\x18\x8d\x3b\x9f\xa4\x45\x8c\x8e\x59\xfa\x14\x04\x92\x19\x86\x18\x47\x61\xc2\x54\xd2\x17\xd0\x8f\xad\x22\x78\x58\x0b\x15\x0a\x49\xed\x6b\x5d\x5d\x62\xce\x83\x32\x43\xd4\x0b\xc3\x18\xa7\x47\x15\xea\xe5\xb7\xb7\x35\xf2\x45\x4a\xb5\xe0\x45\x85\x9f\x08\x96\x4e\x5f\x25\x59\xda\x92\xe5\x14\x5e\x99\x46\x04\x2f\x0d\xc2\x9a\x9c\x62\xd3\x85\x31\xeb\x9c\x02\xcf\x32\xc4\xec\x2e\x3b\x6a\x51\xf5\x29\x6c\xad\x75\x60\x1f\xf9\x1e\xfb\xc0\x7b\x68\x7e\x3c\xe8\x71\x6f\xa3\x77\xdc\xea\x8a\x89\xdd\x7b\xcf\x2b\x77\xb4\xcf\x6d\xb4\x69\xce\xfe\xa6\x9d\xe5\x9e\x1b\x89\x3e\x88\xf6\x00\x7b\xc9\x3a\x87\xde\x63\x23\xc9\xc9\xab\x34\x2e\x62\x33\xfb\xef\x1d\xaa\x01\xab\xe6\xca\xdd\x2f\x6f\xe8\x3a\x39\xf0\x2c\xb9\x13\x33\x53\xf5\x9e\x02\x27\xab\x40\xfa\x3f\x8b\x8d\xe1\xa9\xcb\x3f\x27\x13\x53\x73\xfa\x3f\x97\x83\xc1\xf8\xbf\x18\xff\x52\x74\x75\x67\xee\x05\xd5\x1f\x86\x77\xa1\x9f\xe1\x2e\xcc\x4b\x57\x7c\x0a\xdc\xab\x0a\xea\x97\x63\x5f\xbb\x8c\x18\xfb\xb1\xb7\x7b\x25\x72\xdf\xca\xea\x10\x4b\x8f\x9d\xd7\xdd\xdb\xee\x91\xc7\x42\x42\x9f\x78\x14\x98\x37\xed\x1f\x2a\xd8\x40\x14\x87\x6a\xab\xf9\xda\x89\x68\x9e\x80\xde\x9f\xdf\x6a\x2a\xfc\x9f\xcb\x70\x11\x01\x5f\x8c\xe3\x6a\xf2\x6e\x35\x3e\x68\xe5\x7f\x7f\xfe\x8b\x8d\xd5\x19\xf0\x9d\xf5\xe6\xbd\xf8\x58\x71\x35\xfa\x81\xac\xba\x52\xef\x91\x73\xea\x26\xa4\x7b\xa7\x0b\x50\x00\xd4\x79\xd0\x51\x7c\x9e\x73\xa5\x0b\x26\x7f\xb9\x4a\xf3\xa1\xa9\xa3\xfe\x22\x0f\xbc\xdb\x56\x06\x9a\x91\xc7\xc7\x18\xca\xd4\xf4\xd6\xc9\xe6\x91\xf4\x7a\x0b\xaf\x99\x88\x78\xbc\x50\x29\x9b\xa5\x45\x4b\xff\xd1\xca\xb2\x88\x4a\x21\xa0\xe9\x3e\x25\xbc\x74\xdc\xad\x8a\xb1\x15\x71\xa1\xb9\xa3\xa5\x13\xa7\x1d\xf6\x62\xd3\x74\xc9\x7c\x8e\x52\x52\xf7\x55\x45\x59\x7a\x1e\x5f\x2c\x8b\xdf\x57\x3c\x96\xfa\xfb\xca\x1a\xb3\x53\x39\x09\x52\xc2\x1e\x3c\xd5\xef\x67\xda\xfc\x1e\x76\xc3\x2b\x28\x6e\xf7\xa6\xc7\x03\x96\x43\x23\x74\xe6\x6b\x53\xe7\x22\x67\xea\x7e\x1e\x95\xe6\x04\x1e\x59\x47\xfc\xf6\xd6\xe4\xc1\x0d\x46\x48\xac\xbd\x56\x61\x99\xaa\xa9\xe0\x94\x4f\x8a\x70\xe3\xe2\xa9\x95\x87\xdd\xed\xea\xf3\x35\x13\x32\x4e\x43\x00\x54\x75\x2c\x6e\x6f\x4d\x51\xef\xb8\x51\xa6\xde\xbb\xd8\xdc\x7b\x18\x30\x9d\xc8\x7b\xfb\x80\xdf\x5b\x47\xe1\xed\xad\x19\xb6\x0e\xf7\x3d\x74\xa7\x5b\x09\x4e\xc3\x4a\x6f\xfa\xa1\xee\x2c\xd9\xd5\x59\x75\x14\xef\xad\xa3\xe4\xf6\xd6\x4c\x36\x8f\xb3\xde\x6d\xd2\xd6\x6d\x75\x07\xaa\xe5\x55\xce\x33\x83\xf0\xc0\xfd\x96\xff\xb5\x19\xfa\xfb\x2d\x7f\xfe\x3c\xf7\xe5\xab\x4b\x3a\xcb\x90\x5f\x5e\x8d\xff\xe5\x78\x38\x84\xff\x9b\xf7\x42\x9a\x82\x3c\x73\x5a\x92\x38\x4b\xeb\x46\xad\x72\x71\x2a\x27\xd6\xca\x1a\xef\x60\x25\xa2\x75\xf5\xc7\x4c\x98\x8c\xec\xaa\x6a\x0a\xcb\x1a\x4b\x53\xb4\x83\xb1\x99\xab\xec\xe2\x6e\x82\x48\xbc\xa8\xa1\xcc\xc5\x72\xb3\x22\x8c\xdc\xac\xc8\x0d\xde\xdd\x56\x3a\x99\x0a\xf1\x0e\xa7\xab\x22\xe0\x91\x72\x69\x8c\x39\x69\x90\xeb\x58\xe4\xaf\xdf\x8f\xc3\xda\xcb\xf7\xe3\x64\x55\x97\x07\x71\x5b\xfc\x99\x5d\xfd\x88\x96\xf8\xd6\xc0\x0a\x56\xc4\xa4\x9e\xdc\xdc\x48\xc6\xe7\x18\xee\x2c\xad\x15\x89\xc5\xdf\xd3\xf8\xbf\x97\xac\x25\x7a\xf6\x99\xde\xc3\xdb\x57\x62\x7b\x44\xbf\xde\x95\x08\xaf\x9e\xaf\x69\x93\x46\xc3\x52\x1a\x55\xe7\xec\x6a\xf9\x82\x92\x6a\xbe\xa0\x12\x4f\x06\x5e\xc5\x60\x34\x70\xa5\x9f\xe6\xf8\x6a\x29\xf4\xde\x18\x57\x8e\x2b\x3d\xd3\xc7\x95\xcc\x34\xe0\x41\x9e\xcf\x06\x4f\x6e\x96\xe2\x4f\x92\x67\x62\x50\x37\x30\x58\x44\x3f\x08\x52\xe2\xe4\xf7\x5b\x57\x30\x93\xbb\xc0\x14\x6e\xd2\xdc\x05\x66\xe9\xe1\xe4\x3c\x31\x5d\x91\x03\x47\xb6\x96\x1e\x49\xf7\x69\x90\x0a\x07\xad\x43\x23\x33\x95\x29\xc8\xb2\xaa\xd7\xcd\xed\x40\x4f\xb3\x1f\xcd\x2f\xd6\xbb\xc9\xb9\x55\xa5\x97\x55\xa3\xb2\x1a\x22\x6c\xef\x61\x4d\xc5\xd8\x3b\xcb\xfa\x26\xf1\xe8\xcf\xe3\x68\x25\x61\x60\x8a\xc0\x78\xa9\x0f\xd5\xdf\xc7\xed\x2a\x2a\x1e\x57\x8b\x24\xf7\x70\xb9\x2a\x8e\xa2\x54\x1d\xf5\xfd\xfe\x6e\xd7\x62\xf6\xbe\xa4\xf3\xb5\x22\xef\x3c\x98\x0b\xb6\x68\xb3\xa2\x0c\x7d\x06\x57\x2c\x5e\x73\x64\x10\x63\xca\xd2\xeb\xcf\xe2\x83\x0d\xef\xe7\x83\x95\x54\x14\x8a\x90\x42\xc2\x61\x9e\x58\xbd\x02\x94\x2f\x76\xaf\x1b\xa6\x6b\xcc\xe1\xc3\xe5\x61\x5a\xe1\x87\xcb\xc7\xae\x0d\xe6\x10\x3e\x71\x73\x9d\x3a\xdf\xb2\xa9\xd0\x99\xcc\x42\xc3\x22\xff\x4f\x64\x29\xe8\x66\x0f\xac\xde\x7c\xb8\xfc\x6a\xcc\xd3\xc6\xbc\x44\xcb\xec\x24\x0c\xd2\x86\x88\x15\x56\x05\x11\x75\xdb\xe9\xb8\xf5\x1a\xc4\x7f\xe8\x9b\x50\x31\x23\x83\x9a\x56\xca\x3e\xb2\x68\x29\x99\x19\x6a\xe9\xa9\x26\x69\x84\xd3\x29\x9e\xf1\x0f\x13\x63\x2c\xd6\x98\x9c\xba\xc6\x89\xfe\x6f\x76\xbd\x76\x2a\x4d\x77\x08\xaf\x48\x85\x99\x9d\x18\xcf\x82\x40\xbc\x10\x63\xa3\xc2\xb6\xda\x3a\x06\x7a\x5a\x17\x65\xf0\x29\x51\xc2\x2c\x7c\x5f\xcf\xfd\xc8\xb3\xab\x4e\xb2\xba\x93\x81\xf3\xc3\xe5\xc9\x79\x4b\xba\xf4\x6d\xe5\x95\x14\xf3\xa8\x39\xd0\xff\x5c\x53\xed\x87\xcb\x2f\x66\xa7\x05\xb6\x75\x67\xbf\xd8\x87\x4b\x6b\xdf\x44\x8a\xcd\xc9\xe6\x59\x26\x5b\x2f\x5a\xd9\x63\xd7\x7d\xbc\x54\x9c\x66\xd3\x43\x9c\xbc\xb5\x84\xcb\x9b\x0a\xcd\x58\x98\x1c\xa8\x5d\x7c\xce\x60\xcd\xdd\x4b\xa3\x90\xfb\xca\x9c\x22\xe4\x66\x8f\x55\xa0\x06\x7a\xfd\x73\x36\x45\x47\x31\x59\xa6\x8d\x27\x07\x2e\x90\xbf\xa9\xda\x6b\xeb\x44\xb7\x7a\xe8\x4a\xa9\x00\x53\x5d\x32\xfa\xf1\xfe\x8b\xa6\xd2\x0e\x4a\xf1\x65\x1f\x7f\xcf\x07\xbc\x06\x72\x81\x8a\x43\x81\xae\xe1\xb0\x0a\x76\xf1\x62\x7f\xc0\x6b\x6d\x21\xe8\xcb\x8d\x00\x6f\x53\x9a\x94\x0c\xa1\x0b\xac\x9f\xcc\x69\x19\x17\x23\x46\x2c\x0a\xec\x18\xc8\x73\xc8\x1f\xd8\xf5\xdf\x6a\x1d\xef\x54\x49\x84\x0c\xe5\x52\x6c\x54\x49\x3a\x8c\xce\x42\xf1\x1e\x0b\x99\xdc\xda\xef\xc6\xc6\x16\x36\x23\x66\xa0\xa4\x1d\xb2\x5d\xee\xc5\x87\x3e\x5f\x7e\x94\x83\x8c\x04\x3b\x93\xbb\x67\x32\x3e\xbf\xde\xa4\x0f\x24\xa1\x98\xfd\xa4\x2e\xf6\x10\x86\x45\x70\x5f\xdb\x90\xc6\x5d\x59\xd0\x73\x0b\x97\x45\x1e\x72\x63\xc7\x89\x52\x4d\xef\xcd\xc0\xd0\x92\x8b\x99\x59\xd4\xe9\x57\x4b\x27\x68\xb6\xd4\xb9\xa0\x1a\xb9\xba\xd5\x8c\xb1\x9c\x85\xd3\x6b\x20\x2b\x76\x7c\x6c\x74\x9d\x6e\xfd\x76\x52\x46\x0c\xbc\xab\x56\xdf\x58\x4b\xd1\xda\xa4\x67\x56\x11\xac\x61\xe5\xc7\x8c\x15\x6e\x91\x59\xdc\x4c\xd5\xb9\xec\x5f\xd2\x57\x78\x82\xfa\x99\x4b\x84\x8c\xa3\x0f\x78\xed\xb1\xca\xae\x7c\x15\xf2\x14\xa9\x4b\x9b\x72\x0c\x95\x7a\xcb\xc8\xef\x49\x2c\x8f\x0c\xaa\x74\x48\xf9\x99\x65\xc1\x84\x50\x87\xa4\xd5\xd3\x3a\x33\x7c\x18\xf1\xa6\x32\x01\xf7\x90\x73\x2a\xad\x68\x28\x5b\xb5\xbc\xbb\x9c\xb7\x57\x37\x0f\xb0\xe9\x6f\xe1\xd9\x86\xfb\xfd\x5f\xcd\x58\xf4\xa1\x7a\xb5\xff\x0b\xbd\x83\xd9\x78\x92\x5a\x18\xe3\xd2\x3e\xbb\xe3\xb2\xcc\xad\x9d\x17\x74\xa4\x53\xad\x17\x9a\x60\x79\x10\xd0\xfc\x86\x56\x12\x94\x76\xf0\xac\xf5\x29\x10\x41\x60\x60\x7e\x52\x63\x32\xd6\xa7\xbb\x3b\xcf\x3b\xd3\xf8\xb2\x83\xce\xcf\x6f\xda\xaf\xd4\x34\xf2\x1f\x95\x4c\x5e\x65\xb2\x7c\x3c\x78\x5e\xb9\xb9\x19\x76\xf6\x8c\x4b\x85\x8c\xef\xaf\xdf\xce\x81\xe7\xe1\xd1\xc8\x36\x2d\xb6\x46\xf6\xef\x35\x75\xd7\x0e\x72\xca\xf2\xf9\x51\x43\xbf\x5e\x84\x42\x00\x3d\x8f\xb5\x05\x29\xff\x1d\x04\x01\x7f\xe1\x8c\x5d\xa5\xf6\x45\x3c\x96\x71\x04\xda\xa6\x2e\x56\x3c\xd0\xe5\x6c\x5d\x30\x5f\x1e\xe3\xdc\x2c\xdf\xde\x8d\xbd\xa1\xdd\x8e\x5b\xe8\x8c\xf9\x79\xd5\x22\x37\xbd\xb3\x6e\xda\x6e\x4d\x59\x54\xdf\x3c\x94\x2d\xfd\x30\x13\x56\x5e\xe9\x91\xdb\xb1\x6a\x60\x3e\x71\x63\xd6\x03\xdb\xa7\x14\x6a\xbe\xda\xa8\x3e\x47\xc0\x59\x4e\x76\x0f\xab\xf8\x6d\xd6\xe7\x3e\xbf\x48\x26\xdb\x74\xb8\x2d\x92\xd1\x9e\xe2\x10\xe2\xe9\xc1\x6c\x1d\xf4\x74\x72\xb0\x3c\xa0\x57\xc1\x26\x51\x40\x09\x2c\x8c\xcf\xc5\xbe\x67\xea\x6b\x84\x90\x6f\xc4\x4f\x90\x12\x36\x7a\xf0\x5b\x16\xbb\x7e\x5b\xe4\x99\x65\xa4\x9a\x21\x41\xc2\x3a\x76\x60\xfe\x5a\xd2\xbf\x96\xf7\xac\x63\x52\x34\xa9\xe5\x9a\x5c\x35\xea\xfe\xa5\x91\xa3\x21\x0f\x10\xd1\x99\x7f\x23\x16\x27\xc5\x85\xf1\x27\xb8\xdc\xcb\x8b\xe4\x31\xbf\xa6\x43\xc2\xc0\xf9\x56\xfc\x35\xfd\xf6\xf9\x73\x41\xc2\xe7\x81\xb4\xf8\xa9\x98\x04\x0c\x13\x1d\x4a\x6e\x86\xa4\x4c\xe2\xc6\x57\xa6\x24\x7e\xee\xc9\xb4\x5d\xeb\xb9\xeb\xfc\x25\x5d\x91\xb0\xed\xf4\xbd\x1a\xa3\xbe\x24\x7e\x26\xe7\xc9\xfb\xf0\x9c\x99\x2a\x09\xf4\xb8\x53\x4d\x64\xb8\xf8\x88\xa9\x5b\x37\xbb\x45\x3f\xcf\xf2\x3a\x54\xd3\xf8\x0c\xeb\x6b\xa7\xac\x5d\x5b\x60\x64\x1e\x7e\xc4\x9c\xc3\x6b\xfd\xdf\xcc\xc3\x8f\xbf\x2a\x01\x09\x0b\x29\x19\x0a\xbe\xbe\xd2\xf2\xd1\x6a\x43\xce\x92\xc2\x8f\x59\xb6\xa0\x72\xab\xfc\x33\x57\x53\x8c\x4a\x2b\xc6\x64\x8d\xc2\x6b\x71\x80\xcf\xab\xd7\xde\x00\xed\x5b\x2b\xe2\x3a\x23\x3c\x06\x9b\xc9\x30\x69\x87\x3e\x1f\x56\x1b\xf6\x42\x85\x82\xbc\x88\x85\xf9\xa8\xe7\x61\x0c\xb0\x1d\xde\xda\x76\x9a\x8c\xc2\x24\x32\x7b\xce\xbf\x75\xec\x92\x3c\x55\x7e\x93\x6c\x99\x4e\xeb\x80\x9c\x78\x16\x10\xae\x65\x58\x7a\x62\x34\xf2\x0e\x22\x0d\x5e\x99\x72\x62\x28\x61\x3d\x9f\x84\x7c\xbe\xd5\x34\xdc\xbb\xd9\x7c\x3a\x75\xb3\xf9\x84\xde\xbb\xdd\x82\x32\xa0\x61\x2d\xa3\x6f\x9c\x97\x82\xc0\xda\xe6\x59\x14\x08\xd6\xc5\x10\xb3\x5a\x1d\xd8\x3c\xd5\x39\x99\x6e\x6f\x52\x17\xc3\x26\x73\x95\x61\x63\x9b\xc5\x98\x76\x34\x9a\x97\x5b\xb3\xea\xef\xe5\x16\xaf\x6c\x7e\xfa\x76\xab\x43\xf7\xbf\x2f\xe8\xce\x39\xc8\x9c\xf4\xb9\xf4\xff\x5c\x91\xcf\x35\xfb\x8a\x35\x48\xee\x61\x0d\x8a\xcf\xcd\x07\x36\x08\xe9\x11\x3d\x94\x3d\xe8\xa8\x92\x66\x7f\xc1\xb3\x8f\xd7\x47\xf2\xf8\x58\xe6\xf6\x9f\x55\x2d\xcf\xef\xfd\xac\x17\x77\x09\xfa\x2f\xe8\xf7\xab\x61\xf5\xe1\x0c\xab\x3f\x67\x53\x55\x70\x6f\xf1\xe5\xad\xe6\x1e\x07\x88\x31\x9f\x69\x35\xe6\x7c\xac\xb6\x10\xbf\x88\x59\xf6\x41\x57\xe1\x67\x30\xb3\x36\xa6\xee\x1e\xa6\xd6\x46\x4b\xf5\x43\x3f\x7f\x36\x93\xe6\xa1\x81\xa9\x82\x49\x19\xa7\x17\xe2\x0b\x9a\xb6\xb6\x5c\xd5\x5b\x40\xb7\x3b\x83\x94\x8c\xe7\x2c\x5b\xca\x0d\x65\xf4\x5b\xc3\x52\xe7\x69\xf8\x1c\xe4\xc5\x67\x2e\xc1\x35\xfc\x1b\x0f\x53\x75\x9b\x47\x7b\xf6\x54\xa2\xf7\x17\xdd\x08\x85\x65\x71\xd4\xa4\x92\xb2\x5d\x83\x3c\x73\x2c\x82\x57\x21\xcc\x58\x6a\x56\x9a\x2c\xeb\xb0\x46\x05\x17\xcd\xd1\xd5\x8b\xcc\x6a\x24\x99\xdf\x3e\x8b\x79\x60\xeb\x20\x9b\x16\x74\x87\x26\xb2\x4e\xfd\xae\xb3\xf1\x7a\x3a\xda\xd5\xb6\x58\xf7\xad\x46\xb0\xf2\x22\x8a\x56\x8f\x82\x4a\xae\x43\x31\xd9\x1f\x8a\xd0\x85\x05\xbc\x1a\x9d\xa5\x4a\x9d\xe6\xa5\x5a\x6e\xcd\x6d\x6d\x8c\x3c\xe3\x85\x7f\x27\x9d\x9a\x39\xdb\x21\x05\x33\xa8\x05\x4f\x2d\x79\x22\x4e\xf5\xc4\x4f\x8c\x71\xe1\x30\x6d\x85\x1b\x0a\xd7\x53\x44\x36\x5f\x92\x9b\x55\x4b\x4a\xe3\xfc\x75\xa1\x9d\x92\xb4\xc6\x11\x36\x01\xba\x9f\x2d\x90\xa5\x97\x5b\x8c\xe8\xe7\xf1\x05\x94\x88\x79\x96\xe6\xa9\x8d\x1a\x81\xdf\x17\x4c\xda\xd5\x12\x0f\x22\x26\xb0\xf4\xb2\x2e\x22\x34\x6e\x78\x29\xc4\x81\xab\x38\x9d\x66\x57\x24\xcf\x13\x0c\xc3\x85\xba\xed\xbc\x08\x77\xff\x93\x0c\xc1\x69\xbd\xce\x2d\x89\x6d\x55\xa6\x56\xf2\xc9\xe4\x8c\x3c\xcf\xf8\x5c\x9c\x84\x51\xb2\x69\x42\xf5\x25\x3c\x78\x2e\x00\x8b\xad\xcd\x26\x34\x71\xa2\x2d\xef\x0f\x2b\xf1\x35\x6d\x69\xe9\x5d\xaf\xd1\x31\x0c\x22\xd6\xeb\x7a\xad\x75\xbd\x6a\x5d\x6f\x32\x2e\x50\xa8\xcd\x2c\xe6\x5a\x3b\x7e\x6b\x3b\x7e\xb5\x1d\x7f\x32\xe6\x96\x99\xc2\x62\x85\x65\xfa\x0f\x85\x54\x75\x6e\x6a\xd5\x4a\xaf\xdb\xa6\xab\x8c\xb3\xdf\x63\xd2\x2a\x85\xbf\x4e\xdd\x17\x9f\xba\x0f\x1b\x39\x67\x75\xce\xa0\xd4\xd7\xc9\xfa\xe2\x93\xa5\x5d\x27\x7b\x4c\x58\x5e\xf2\xeb\xa4\x3d\xf0\xa4\xa1\x56\xc5\x1a\x29\xdf\xea\x4f\x55\xa6\x9b\x3b\x4c\xaf\x6e\x6e\x8f\xe9\xcd\x4b\x3e\xc9\xe9\xcd\x81\x7f\x24\x93\xfc\x3a\x94\x61\xc4\x52\x3c\xc0\xa5\x2f\xab\x0f\x39\x0f\xaf\x8d\xd5\x83\xac\x59\xa4\x86\x3d\xa6\x54\x95\x7b\x92\x13\xaa\x40\x7f\x24\xd3\xb9\xf7\x9a\x3d\x7c\x2a\x55\x42\x95\x3d\xe6\x52\x17\x7c\x92\x93\xf9\xf4\x26\xf2\xbe\xcc\x77\xc6\x92\x05\xe3\xe2\xc4\xd6\x17\xed\xb4\xa9\x55\xfa\x95\xad\xca\xae\x57\x79\x32\xfa\x55\x0e\x79\x78\x26\xda\xc6\x39\x0f\xf1\xb8\x83\x2a\x53\x2d\xfb\x18\x07\xb8\xb9\x4d\x1c\xdd\x9e\xed\x85\x67\x62\x27\xb2\xa2\xec\x00\x6c\x41\xe1\x27\x86\x2e\x1c\xdf\xbe\xf8\x8a\xb2\xbd\x10\x36\x3b\x08\x63\xb3\x27\x88\xb2\xd9\x41\x38\x9b\xed\x44\xda\x74\xba\x3f\xca\xa6\xd3\xa7\x86\x30\x18\xdd\xbe\xe8\x9a\x4e\x77\x22\x2b\x6d\x45\x96\xe4\xcb\x36\x6c\xa5\x4f\x0e\x5b\xe9\x01\xd8\x4a\x77\x63\x6b\xb1\xb0\x2f\x19\x17\x5b\x4c\x34\xad\x86\xd2\xd2\xa6\x58\x69\x41\x0b\x33\x9c\x5d\xb0\x8f\x8b\x16\x31\xa6\x48\xe9\xc5\xcb\x64\x52\x77\xbe\x6e\x9a\x88\x4a\x4c\xf2\xcb\x5f\x7f\xa5\x1a\x08\x12\x06\x3c\xff\xfe\x4b\x9a\x5c\xdf\xde\x72\x3a\x8b\xa7\xec\xfd\x2c\x24\x49\xc0\xa9\x98\x85\xd5\xc7\xff\xd0\xb5\x32\x4c\x62\x94\xc7\x9e\x85\xc7\xc7\x26\x14\xcd\xae\xde\xa0\x6f\x05\x2f\x49\xcb\x02\x41\xe7\xea\xfa\xc5\xbc\x83\xfc\xed\x3b\x76\xf1\xe6\xe3\xc2\xb2\x48\x76\x7b\xdb\x56\x2e\x7f\x6f\x91\xa4\xd1\x90\x98\x85\x65\xe5\x17\xd9\xa9\x33\x19\x8b\xbb\xe4\x20\x0b\x17\x0b\x3d\x94\x80\x6f\x3f\x1e\xf8\x37\x9c\x7a\xaa\x28\xc0\xe4\xbb\x0f\x38\x55\x68\x85\xb5\x2f\x2e\x74\xd9\x09\x20\xc7\xf5\x15\xa6\x2a\x3d\xb1\x45\xa6\x47\xba\xef\x3a\xc3\xe2\x3b\x97\x1a\xea\x8e\x07\x62\x0f\xeb\x3c\x31\xe4\xa9\x71\xee\x8b\x3b\x28\xbd\x13\x75\x22\x4e\xf7\xdf\x01\xa1\xf0\x13\x43\x19\x8e\x6f\x5f\x8c\x89\x38\xdd\x07\x61\x07\x88\x59\x58\xfa\xe9\xa1\xec\x00\x31\x0b\x4a\xef\x44\x9a\x0c\x0f\xa0\x32\x28\xfc\xc4\x50\x86\xe3\xdb\x17\x63\x32\xdc\x4d\x65\x32\x4c\xbd\x83\x30\xe6\x3d\x41\x94\x79\x07\xe1\xcc\xdb\x07\x69\x07\x2c\x4d\x2c\xfd\xf4\x90\x76\xc0\xd2\x84\xd2\xea\xb6\xea\x6d\x48\xcb\xce\x36\xc9\xa7\x4a\xe8\xc4\x12\x4d\x3c\x15\x02\x67\xfd\xe4\x44\x23\x2e\x13\x0f\x28\xd0\x58\xa8\x83\x0a\xcc\xb2\xca\x14\x8e\xcc\xba\xbd\x6d\x0b\xf0\x38\x9d\x10\x1e\x3c\x73\x88\x08\x9e\xb9\x24\xcc\xa5\x2c\xc9\xaf\x8b\x33\x11\x09\xc9\x02\x76\xaa\xf2\xe7\xd2\x58\x32\x1e\xca\x8c\x4f\x4c\xeb\xdb\x67\x26\x0f\xcc\x24\xc8\xf0\x92\x5e\xd3\xb2\xe8\x34\x4b\x55\xb2\x41\xcc\x85\x9b\xe7\x19\xb4\xc8\x33\x79\x7b\x9b\x6a\xa9\xf8\x59\x10\x48\xeb\x5b\xe8\xd2\xfa\x56\x1f\x92\x8a\xad\x1b\x01\x20\x84\x41\xbc\x3a\x8f\xd3\x30\x49\xae\xd5\x75\xe2\xb7\xb7\x20\xc9\x06\x41\x46\xd5\x38\x6e\x6f\xf3\x6f\xa6\x55\x94\x8c\xcf\x4d\x61\xa9\x43\x56\xe1\xaa\x4c\xba\x8b\x63\xac\x0c\xb9\x38\x88\xc5\xae\x3a\xbf\x5d\x2f\xd8\x1b\xce\x33\x6e\x1a\x6f\x53\x34\x6a\x76\x42\x29\xd9\x7c\x21\x3b\x32\xeb\x60\xd0\xdb\x32\x92\x4b\xce\x3a\x69\x96\xda\x38\xe4\xb3\x84\x75\x8a\x80\x63\x6b\x65\x5a\x0f\x9c\x5d\xb7\x2e\xca\x36\x4d\x9d\x3c\x80\x39\x73\xad\x53\x67\x42\x44\x79\xde\x9f\xbf\x30\x8c\x31\xcf\x2d\x91\x4e\x19\x7e\x69\x99\x62\x9f\x63\x45\x39\x4d\xaa\xfb\x38\x17\x18\x1a\xb7\xf9\xa6\xce\xd6\xd2\x8f\x71\x3d\x6f\x1d\x6b\x14\xce\x59\x12\x7f\x62\x9b\x02\x4b\x54\x1e\xcd\x35\xee\x55\x54\x7b\x8c\x03\xde\xdc\x66\x39\xda\x3d\x1b\xcd\x2b\xec\x46\x63\x1a\xb1\xc4\x0e\x93\xa4\x5d\x0f\x48\xa3\x25\xe7\x2c\x8d\xae\xdb\x6a\x3c\x46\x1c\xee\x18\xed\x22\x96\xe1\x9d\xc8\xa6\xa8\xf8\x18\x07\xbd\x8d\x70\xca\x11\xef\x4d\x3a\x79\x95\x9d\xe8\x3c\xe3\xad\x1e\x88\x56\xb9\x01\x0b\x3f\x31\xe4\xe1\xf8\xf6\x45\xdb\x19\xdf\x4d\x7f\x2c\x6e\x5d\x67\xed\x08\x83\xc2\x4f\x0c\x61\x38\xbe\x7d\x11\xc6\xe2\x64\x27\xc2\x30\xa2\x55\x30\x69\x5f\xb0\xf6\x18\xc2\xbc\xc0\x86\x2a\x8f\x11\x7f\x7b\x8e\x58\x1c\x3e\x62\xf1\x48\x47\xbc\x85\x62\x72\xd8\xdf\xb3\x03\x96\x5a\xa5\xd2\xde\xf8\xdc\x8a\x4b\xbb\xea\x12\x5f\xaf\xfa\x44\x71\x7a\x38\x42\x77\x63\x73\x99\x7e\x38\xd0\x62\xa8\xea\x3c\x35\x14\xe2\x38\xf7\x46\xdf\x32\xfd\xb0\x13\x75\x49\x28\x44\x7c\xde\x6e\x6f\xdd\x22\x79\xe4\xd5\x9e\x18\x02\x8b\xd1\xee\x8b\x43\x5d\x61\x37\x1a\x3f\xf9\xfb\x5b\x78\x54\xe9\xa7\x86\x3a\x1c\xe1\xde\x78\xfb\xe4\xef\xb4\xf0\xc0\xea\x0c\x37\x04\xe1\x6f\x59\xb8\xba\xd6\x63\x44\xdf\xce\xe1\x2e\x9b\xc9\x8a\xf6\x1a\xee\xf2\x21\xf2\x85\xfe\xb1\xd4\x92\x8f\x75\x5f\x7a\x51\xe5\x77\xa3\x30\x95\x61\x9c\xb6\x86\x92\x6c\xc5\xa1\xae\xf6\xd4\x90\x98\x8f\x76\x6f\x2c\xaa\x0a\xbb\xd1\xb8\x7f\x30\xce\xd3\x8b\xc5\x39\x24\x14\x67\x8f\x48\x9c\x83\x02\x71\x9e\x60\x1c\xce\x41\x61\x38\xfb\x44\xe1\x44\x42\xd8\x97\x21\x7f\xd0\xf3\x9d\x91\x10\xff\x08\x79\x90\x6e\x3a\xea\x79\x63\xd8\xf6\x94\x45\x19\xb7\xcf\x32\x3e\x65\xdc\x76\x1d\xc7\x18\x1b\xee\xe2\x63\x47\x64\x49\x3c\x35\x48\xb3\x80\x87\x05\xbc\x96\x02\x3c\x9c\xc6\x4b\x61\xfb\x58\xc0\x5f\x7c\xc4\x57\x57\xb3\x58\x32\x63\x6c\xfc\xcb\x0f\x3f\xfc\x80\x0f\x2e\x78\x78\x6d\xf7\xb0\xcc\xbf\xf4\xcf\x07\xfd\xa1\x87\x8f\x3f\x2c\xcf\x18\x4f\x99\x64\xc2\x8e\xb2\x24\xe3\xb6\xb8\xbc\x30\xc6\xdf\x2c\x79\x62\xfe\xe7\x37\xd3\x50\x86\xe3\x78\x1e\x5e\xb0\x13\x71\x79\xf1\xfc\xe3\x3c\xf9\x36\x9a\x85\x5c\x30\x19\xfc\xfd\xb7\x1f\xec\x21\xf9\xab\xb8\xbc\xe8\x5c\xc6\xec\xea\xfb\xec\x63\x60\x38\x1d\xa7\xe3\xb9\x1d\xcf\x31\x3a\x1f\xe7\x49\x2a\x02\x63\x26\xe5\x62\x7c\x72\x72\x75\x75\x45\xaf\x7c\x9a\xf1\x8b\x13\xcf\x71\x1c\x68\xcc\xf8\xee\xaf\x17\x9d\xf3\x38\x49\x6c\xbe\x4c\x58\x60\xa4\x59\xfa\x89\xf1\xcc\xe8\x08\xc9\xb3\x0f\x2c\x30\xfe\xcd\xf3\x01\x74\x2c\x83\xaf\x99\xf1\xdd\x5f\x17\xa1\x9c\x75\xa6\x81\xf1\x93\xeb\x50\xcf\xed\xb8\xd4\x71\xbc\xd0\xa5\x5e\x17\xbe\xc3\x27\x80\xe0\xd8\xb4\x3b\xf0\xa8\xeb\xfd\xe8\x53\x6f\xd4\xe9\x52\xcf\x71\xa1\x90\xd7\xeb\xa8\x4f\x5d\xa8\xdf\x1f\xd0\xa1\x9f\xd8\x2e\xed\x8d\xdc\x4e\x9f\x8e\x3c\x6c\xcb\xc5\x62\xae\x2e\xd6\xa1\x9e\x3f\x84\x8e\xfc\x5e\xd2\xa5\xdd\xbe\xdf\xe9\xd1\x5e\x2f\xa2\x9e\xdf\xa5\xde\x88\xf6\x46\xb4\xdb\xa7\xa3\x3e\xbc\x4a\x06\xd4\xed\x8d\x6c\x80\x29\xa2\xfe\x00\x1a\xa0\x03\xdf\xa6\x6e\x7f\x08\x25\x6c\xda\xed\x8d\xb0\x0d\xcf\x2e\xda\xb0\xa9\x37\xf2\xa8\xef\x79\x36\xed\x0f\x7c\xe8\xcb\x86\xbe\xfa\x0a\x2a\xdf\x06\xa8\x36\x01\x6f\x23\xf4\x7d\xda\xed\xd9\x3e\x75\x86\x88\x07\xaf\xa3\x3e\x75\xa9\xde\x68\x68\x53\xd7\xfb\x94\xa3\xf1\xdf\x3c\xdf\xf7\xfa\xaf\xde\xf4\x8c\x93\x06\x32\x07\xbd\x8e\x4f\xfd\xde\x20\xb2\xa9\xe7\xfa\x50\xd7\x1f\xf6\xa9\x3b\xf2\xd4\x97\xae\x37\xba\xa4\xae\x1b\x51\xc7\xe9\x51\xd7\xef\x03\x3e\xa8\xd7\xa5\x4e\xcf\xa3\x7e\x7f\x40\x1d\xdf\xa7\xde\x80\x3a\x7d\xda\x1d\x79\xd4\xe9\xfa\x74\x10\xd2\xae\xe7\xc2\x3f\x04\xc6\x05\x38\x7a\xd4\x4b\x6c\xea\xb8\xd4\xed\xfb\x61\x97\x8e\xfa\xbd\x8e\xfa\x54\xe0\xfa\xd4\x03\xf8\x7b\xdd\x61\xa7\x4f\xbb\x03\xf5\x91\x57\xf6\x87\x36\x75\x46\xa3\xc8\xa6\xce\x80\x3a\xf8\x64\x44\x1d\xdf\xa6\x9e\x6f\x53\x07\x10\xe8\x0e\xe0\xc3\x1d\xd8\xd4\x87\xc7\x83\x81\x4d\x7b\x1e\xd0\x82\x4d\x9d\x21\x7c\x8c\x60\x32\x7a\x36\x75\x87\xae\x4d\xbd\x1e\x20\x7f\xf0\x63\x8f\x76\x3b\x3d\x3a\xea\x76\x43\x98\xc9\x6e\x3f\x47\x9d\xd7\x1f\xd9\xd4\x75\x5c\xea\x0f\x3c\xf8\x97\x3f\xf7\x9d\x01\x20\x20\x02\x00\x7c\xea\xf6\xb1\x61\xda\xf5\x3c\xea\x8c\xba\xb4\x37\x48\xa8\xe3\xf4\xa9\xe3\xc0\x94\x50\xa7\xdf\x8b\xa8\xeb\xc2\x57\xcf\xa5\xae\x07\x53\x4d\xdd\xe1\x80\x7a\xbe\x4b\xdd\xae\x87\xf5\xbc\x3e\xed\x0d\xba\xb4\x0b\x55\xfa\xd4\xe9\xfb\x30\x42\x77\xd0\xa3\xce\x60\x48\x3d\xcf\x4f\xa8\xeb\xf9\xd4\x75\x01\x63\x23\xc4\xd8\xa8\x20\x83\xc1\x70\xd0\xf1\x69\x17\x08\x81\xba\x7d\xc0\x3c\xcc\xa0\xd3\xf5\xa8\xd3\x83\x91\x3a\x3e\x75\xbb\x80\xac\x7e\x5f\xc1\xea\x8e\x00\x2a\xdf\x56\x10\x0f\xfb\x36\xed\x8f\x3c\xea\xba\x5d\x98\x9f\x3e\x22\xd6\x83\xe9\x75\xba\x36\xf5\x07\x88\x60\x80\xcb\xe9\x69\xbc\xf7\x55\xa3\x8e\x07\x3d\xe2\x28\xa1\x8a\x1a\xb2\x07\xc4\xe3\x0d\x55\xd7\xfe\xa0\x4b\x3d\xa0\x7a\xdf\x1b\xd0\xee\x00\x20\xa3\x9e\xd3\x07\x2a\xf1\x7d\x97\x76\x47\x43\xea\x0d\xbd\x19\x54\x05\xaa\x82\x7e\x1c\x57\x77\x84\xcd\x0e\xf1\x4b\x42\x5d\x9c\xde\x88\xba\x3e\x7c\xf3\xfb\xd4\xf3\x70\x46\x87\xd4\xef\xf6\xd5\x2c\x78\xd0\xa1\x33\xf2\x68\x17\x87\xd8\x1f\xc2\x62\xd2\x63\x85\x21\x3a\x88\xd0\x01\x75\x7a\x40\x62\x1e\x20\x36\x81\x62\xd0\xf2\x28\xec\xc1\x68\x3a\xea\x53\xad\x79\x8f\x7a\x5e\xbf\xe3\xd1\xc1\x30\xc1\x61\xbb\xfd\x61\x44\x1d\xaf\x07\xf3\x89\x8d\xb8\xbd\x2e\x75\x80\x03\xb8\xd0\xc6\xa0\x47\xdd\x51\xcf\xa6\x9e\xe3\x53\x18\x70\x8f\xf6\xbd\xa1\xaa\xe8\x00\x84\x5d\x98\xf3\xa1\x8d\xc3\xf7\x9d\x11\xb4\xd9\xa3\xae\xd3\x8d\x90\xa2\xa9\xe7\x7a\x00\x08\x2c\x64\x98\xa4\x1e\x2c\x00\xea\x8e\x5c\x35\x22\x44\x4c\x8f\xf6\x7c\x0f\x56\xe6\x10\x10\xe6\x5e\x22\xb2\x22\xea\x00\x35\x03\xb2\xfc\xbe\x9a\x9e\x2e\x2e\x12\x3d\x03\x38\x9f\x03\x5c\x21\x40\x3e\x2e\x40\xd6\xa5\xae\x03\x0d\xf5\x34\xaf\xea\x79\x7d\xea\x03\x0d\xc0\x78\xa0\x72\xb7\x8f\x08\xef\x03\x69\x43\xa3\xc3\x44\x2d\x1e\xb7\x37\x02\xfa\x1b\x0e\x3a\xea\x53\x21\xca\xa7\x3d\x20\x3a\x17\x0a\x01\xa5\x01\x9a\xfa\x7d\xea\x00\xb1\xfb\x43\xea\x00\xb5\x8f\x06\xd4\xf5\xa8\x0b\x43\x1e\x8c\x70\x1a\xfc\x91\x4b\xbd\x7e\x8f\xf6\xbb\x50\x64\x48\x5d\xcf\xa5\x4e\x6f\x40\x3d\x6f\x44\x5d\xd7\x43\x30\x1d\xd7\x83\xc9\x41\xc6\xe2\xf4\x47\x30\x34\x44\x96\xeb\x78\xc0\xa0\xa8\xdf\x75\xa9\xef\xba\xb4\x07\xd3\xef\x8e\xa8\x3b\x52\x14\xa0\x48\xce\x87\x39\xeb\xda\xb4\xd7\x55\xd8\xb6\x73\x74\xf7\x91\xce\x81\x6a\xfa\x30\x1f\x80\x0a\x67\x80\x8b\x1a\xe6\xa9\xaf\xb8\x89\x07\x54\xd4\x85\x16\xfd\x2e\x30\x66\x17\x17\x01\xd4\x52\xf4\xe9\xc2\x12\xf5\x91\xd6\x6d\x3d\x07\xc0\x75\x1c\xe0\x34\x88\x67\xa7\x0f\xa5\x7a\xfd\x0d\xa4\xd5\xb3\x3d\x8a\x04\xd8\xa3\x8e\x1f\x51\xa7\x07\xcd\xf8\x38\x76\x45\xd8\x9e\x8b\xa8\x47\x82\x01\x9a\x72\x87\x40\x49\xb8\x43\x00\x4d\x03\x6a\xba\x3d\xd8\xa3\x70\xb2\xfd\xee\x00\x57\x81\x03\x4b\x0f\x99\xce\x10\xa0\x02\x68\x3d\x2f\x41\xe2\x77\x1c\x4f\xaf\x51\x37\x42\x34\x3b\x3d\xd8\x36\xa8\x33\x00\x86\x0d\xa4\x39\xf4\x14\xfc\x1e\x52\x2c\x0c\xbf\x87\x4b\x17\xf8\x27\xf0\x16\x45\xa3\x03\x64\x7b\x5d\xf8\x0a\xf4\x8e\xc4\x89\x78\x82\xe1\x23\xd3\xc5\x52\x36\xed\x8e\xba\x0a\xef\xfd\x11\x32\x65\x28\x38\xc4\xf5\xab\x38\x37\xcc\x02\x6c\x4d\x6a\xbd\x62\x0f\xbd\x3e\x92\x1f\x72\x39\xa4\xb2\xd1\x20\xe7\x72\x43\xa7\x6b\xfb\xb4\x3b\xe8\x26\xd4\x85\xae\x5c\x0f\xd0\x06\x90\x22\x69\xe0\x6e\x00\x2c\x0f\x89\x1d\x90\xd5\xc3\x27\x40\x25\x38\x9d\x2e\x30\x58\x9b\x76\x9d\x2e\x55\xd3\x03\x2b\xd7\x46\x9c\xe2\xb4\x0e\x07\x6a\x40\x8e\x0b\xd8\xc3\x99\xd4\x8c\xa3\x3f\xa4\xee\x10\x26\xb3\x3b\x54\x7c\x07\xb9\x34\x0c\xae\x37\x40\xde\x63\xab\x75\x82\x23\x1a\x7a\xf0\x18\x97\x24\xa2\x08\x5a\x85\x36\x3c\xbd\x30\x87\xc0\xdd\x87\x48\x8b\xd4\x19\x29\x46\xe5\x0e\x00\xfb\xbd\x1e\xa2\x0e\xe9\x18\xe8\xb7\x3b\xa4\x3e\x2c\xe1\x9e\x47\xbb\x03\x57\xb1\x18\xa7\x0b\xb4\x3b\x04\x62\x1a\x01\x9d\xc2\x97\x7e\x82\x64\x0b\x2d\xbe\x04\xce\x34\xea\xa8\x4f\x45\x6b\xae\x43\x07\x9d\x1e\xf5\xbd\x61\x38\xa2\xbe\xd7\xeb\xa8\x4f\xbd\xa3\x3a\x08\xc2\x00\x98\x36\x32\x5d\x00\x11\xb1\x83\x93\x03\x54\x30\xf2\x35\x65\x7b\x40\x55\xf0\xae\xeb\x2b\x30\x60\x27\x18\x6a\x0e\x83\x54\xe3\x03\x5b\xb4\x41\x14\xc0\x6d\x01\x90\xeb\x46\xb0\x8b\xe2\x74\x0d\x70\xbf\x19\xa1\x28\x81\xdf\x3e\xfd\x34\xa2\x83\x51\xa7\x4f\xfd\x9e\x8b\xd4\xd5\xed\x78\x7a\x0a\x1c\x98\xd0\x6e\x48\xfd\x2e\xf5\xbb\x39\xac\x3d\xd8\x4b\x8a\x0d\xc7\xb3\x5d\xda\xef\xdb\x2e\x30\x93\x97\x3e\x1d\x0d\xfa\x1d\xf5\x89\xa5\x3b\x65\xd3\x9f\xe6\x74\xd4\x1f\x76\x9c\x10\xf8\x49\x07\x3f\x54\x11\x8f\xfa\xae\xdf\x71\xa9\xeb\xf6\x40\xd2\xea\x83\x70\x85\x4b\x18\x67\xdf\xf1\xd7\xba\x07\x2a\x9a\xe1\xab\x1f\x01\xab\x7d\x6c\xff\xd3\xdc\xf6\xe9\x70\xd4\xef\xb8\x74\x38\x48\x5c\xda\x73\xe1\xab\xdf\xc3\x86\x60\xc1\x0d\x1b\xed\xb8\x7e\x97\xf6\x86\xbd\x24\xdf\xeb\x60\x0c\xa3\x6e\x97\xf6\xfa\x6e\x08\x23\xe8\x75\xd4\xa7\x02\x92\xf6\xfa\xc0\x29\x7a\x6e\xff\xd3\xbc\x4f\x87\x2e\xee\xb5\x30\x14\x0f\x84\x00\xc7\x2b\xcb\x0d\xbd\x0e\x94\x83\xa1\x8c\x00\xd6\x5e\xdf\xb7\xf3\x8d\xb9\x05\x06\x1b\x80\xc0\x3d\xa4\x0b\x50\x3b\x03\xdb\xcd\x47\x33\x70\x41\x02\xeb\xf6\x67\xb4\xef\x25\xd4\x1f\x0e\x40\xb6\x50\xb2\x56\x1f\x88\xb9\x07\x6c\x1a\x68\x18\x56\xab\x12\x91\x60\xdb\xe8\x3b\x1e\x14\xb6\x69\x77\xe8\x7d\x9a\xbb\x74\x34\xea\x00\x56\xbd\x90\xfa\xfe\x08\xfe\xe5\xa0\x02\x21\x39\xbd\x04\x27\x11\xfa\x87\x69\x77\xa9\xdf\x85\xe1\x0f\x3b\xf8\xa1\xe0\x74\x69\xdf\x19\x21\x51\x80\xc8\x38\x00\xb1\x78\x08\xb4\xaf\xea\xd5\x27\xa8\x43\xbd\x11\xd0\xd5\x40\x8d\xc1\x87\xc5\xd2\x18\x77\x87\xfa\xce\x50\x71\x10\xd8\x4d\x1d\xe0\xf7\x83\x01\x8c\x75\xd8\xef\x43\xe7\x23\x90\xa3\x72\x96\xa3\xba\xef\xda\x30\x87\x30\xb1\x23\x58\x09\x30\x12\x45\x7f\x3d\x68\xba\x07\xff\x8a\x61\xf5\x15\xf1\xc0\xd8\xfb\x43\x9f\x0e\xdd\x01\x0c\x7d\x08\xff\x0a\x00\x60\x17\x1c\x8c\x60\x03\x1f\x26\x74\x34\x84\xce\x07\x83\x1e\x76\xee\x76\xd4\xa7\xea\xdc\xa3\x9a\x84\x12\x3a\x1a\x8c\x6c\x28\x86\x82\x92\xdb\x1c\x35\x08\x15\xee\xf0\x53\xae\x34\xd9\x98\x81\x32\x30\xa8\xd7\xab\x08\xfc\xa0\x45\x9d\x7c\xf7\xd7\x93\x8b\xef\xfe\x0a\x8a\xd7\x77\xff\xf9\x8d\xf5\x0d\x68\x7e\x92\x71\x1e\x9e\x67\x7c\xfe\x30\x8a\x1f\xd0\xfe\xf0\x10\xc5\x4f\x2b\x75\x55\x25\x90\x5d\xb2\x34\x9b\x4e\x73\x45\xaf\x18\x42\xef\x55\xf7\xcd\x9b\x9e\x81\xca\x4a\x8f\xf6\x00\x5b\x2e\xa8\x63\xc3\x21\x48\x69\x43\xcf\xbd\x04\x61\xa2\xfb\x63\x8f\xf6\x9c\x51\x67\x48\x07\x23\xef\x53\xa1\xe1\x14\xad\x74\x9d\xae\xf3\xbd\x67\xe4\x2a\xcf\xc8\x77\x41\xf0\x1f\xe8\xca\xd8\xdc\x10\x76\x66\xcf\xff\x07\xb4\xdf\xd2\x42\x15\x0e\x60\xe7\x1d\x07\xeb\x7a\x58\x77\xd0\x51\x75\xe1\xf3\x93\x02\xd3\x45\x69\xb1\x02\xa8\x7f\x69\xab\xce\x6c\xac\x81\xbd\x7d\x6a\x9d\x9d\x34\x9b\x87\xd3\x2f\x34\x33\x4d\x95\x7c\x5d\x05\x2f\x30\xe2\xfe\x30\x1a\xf5\x07\x1a\xa7\x2e\xed\xf5\x81\xf3\x0e\x07\xee\xa5\x07\x7a\x5d\x02\x2b\xa8\xdf\x05\xe6\x3a\x02\xa6\xdd\x85\xed\x78\x38\xea\x5e\x0e\x28\xae\xc4\x2e\x10\x79\x67\x00\xcb\xbb\x4b\xbb\x83\x7f\x74\x69\x77\x38\x83\x1d\xad\x0d\xf9\x5e\xef\xfb\x97\x43\x57\x75\x35\x50\x4b\xf5\x47\xea\x75\x3b\x50\xc9\x4d\x7a\x20\xe5\x76\x40\x75\x82\xee\x80\x8d\xf7\xbb\x3d\xe0\x8a\x03\xe0\x67\x7e\xef\xd2\xf6\xe8\x68\x98\x80\x8a\xd0\x03\x48\x86\x08\xe2\x70\x90\x74\xa9\xef\xc2\x4a\xf7\x47\x28\x56\xbb\xee\xce\xae\x1d\xaf\x33\xa2\xbd\x2e\xd4\x1f\xf4\x61\x88\x7e\x17\x3b\x19\x0e\xff\x01\x92\x77\x42\x87\x20\x58\x77\x87\x3f\x52\x0f\xc5\x65\x10\x1d\x14\x98\x97\x43\x3a\xf2\xfa\xc9\x00\x48\x16\x1e\xf4\x07\x97\x36\xa0\xa2\x9d\x04\xb4\xa5\xea\x61\x68\x60\xf8\xe0\xab\x13\x90\x31\xa4\xfd\x91\x8f\x72\x86\x33\x08\x81\x97\x2a\x8e\xea\x21\x7f\x52\x7a\x21\x6c\x2a\x5e\xb7\x53\x7f\xa9\x98\xa6\x03\xfb\xf6\xc0\xeb\x56\x98\xd5\xa8\xef\xbe\xee\x8d\xea\xd6\x09\x8f\xfa\x7e\x1f\x76\xf5\x41\x3f\xa4\xc3\x9e\x0f\xff\x54\x07\x1d\x07\x98\xa3\x33\xa8\x3c\x85\xe7\x4e\x07\x9f\xfe\xe4\xf6\x68\xdf\x1f\x01\x78\xbd\xde\x5a\x55\x2d\xb3\xa3\xba\xec\x2a\x03\x02\xfc\x05\xe9\xc6\x71\x07\x14\xaa\x77\xe9\xb0\xef\x77\x40\x14\xc3\xda\x3d\xf8\x97\x6f\xa3\x23\x0f\xc8\xc8\x1b\x8c\xea\x2f\x3a\x2e\xed\xf5\x46\x20\xd0\x81\xc2\xd8\x45\xdd\xdf\x1b\x28\xa5\xd3\x81\x9d\xd0\x0f\x61\xf2\x91\x00\x74\x4b\xfd\xae\x47\xfb\x23\xf7\x27\x77\x40\x47\x83\x01\x40\xdb\xed\x0f\x42\x3a\xec\x8e\xe0\x9f\xc6\xa4\x4b\x61\x87\xf1\x46\xfd\xca\x73\x44\xe2\x08\x84\xce\xfe\xc8\x8b\x68\x17\x54\x80\x81\x4f\x07\x40\x58\x3d\x3a\x70\x46\x74\x04\x5b\x95\xe7\xb9\xf0\x2f\x97\xa5\x1d\x17\xb4\xc2\x3e\x74\xe7\x0d\xfb\x30\xba\xfe\xb0\x81\x1b\x90\xe3\x61\xdb\xe9\x0f\xbb\x0d\xcc\xc2\x8b\x0e\xbe\xf8\xc9\xed\xd3\x3e\xb0\x38\xd8\x6f\xdd\x66\x03\xa0\xdf\x7b\x36\x1d\x7a\xc3\x46\x03\xf8\x02\x9e\x43\x7d\x10\x46\x61\x8a\xd6\xaa\xd3\x61\x17\xd7\x68\xaf\xd9\xfd\xb0\x8b\x0b\xad\xba\xbd\xbd\xee\x7b\x83\xa1\x5f\xa3\x98\x21\x1d\x76\xbd\x8e\x3b\xa0\x3d\xbf\x1b\xd9\x5d\x3a\x00\xa9\xc2\x1e\xd2\xfe\x70\x00\x02\x5b\xaf\xa7\xbf\x0f\x69\xdf\xf5\x5e\x51\xb7\x07\xf2\x94\xdb\xef\x83\x54\x05\xfb\xba\xdb\xc1\x16\xa8\xef\x86\x43\x64\x23\xea\x53\xc1\xd0\xd3\x38\x18\x0c\x40\xdc\x72\x7a\x28\xf2\x0d\xbc\xb0\x8f\x6a\x71\xbf\x54\x8e\xed\x01\xf5\x46\x20\x66\x38\x8a\x27\x7a\xfa\xd3\xc9\xa5\x73\x50\x74\xfb\x9d\xb5\x7a\x9d\xb2\x5e\x52\x76\xd0\x05\x50\x60\xba\xfa\x5a\xcc\xb5\x4b\x40\x3e\xad\xa3\xa3\x8d\x8f\xb7\xf1\x98\xf0\xea\xee\x76\x5f\x2d\x6d\x74\x87\x46\x67\xc6\xe2\x8b\x99\x54\xdf\x6b\x7c\xa7\x3b\xec\x74\x3f\x03\xdf\x71\x7d\xd0\xe8\x3a\x1e\xb0\xed\x5e\xe4\x80\x08\x8c\x66\x2d\x64\xfd\x3d\xea\xe2\x26\xd0\x75\xbb\xd4\xf5\x06\xd4\xef\x01\xa5\xd3\x81\xef\xa2\x78\xe0\xc2\xfe\x02\x82\x28\xbc\x73\x5d\x97\x7a\xbd\x2e\xfe\xf5\xd1\x10\x49\x51\xf7\x1e\x01\x19\x0c\x6d\xea\x3b\xa0\x81\xa9\xa9\x76\x40\xeb\x18\x86\x74\xd0\xf7\xe0\x5f\xbe\x7e\xbb\xae\x0f\xba\x26\x68\xc6\x7d\x34\x10\xa2\x4d\x68\x08\xf2\x28\x2c\x59\x0f\x2d\x9d\x2e\x6a\xb4\x6e\x61\xce\xec\x0d\x3c\x9b\x0e\xd0\x58\x07\xfd\x81\xf2\x87\xf5\xf0\x79\x17\xc4\xcd\x11\x9a\x82\x91\x73\x76\xfb\xbe\xed\xd1\xc1\x08\x24\x0c\xd0\x0f\xbb\xb4\x3f\xf0\xf5\x77\x97\xfa\x7e\xaf\xe3\xd8\x1e\x5a\x9e\x86\x9e\xed\x83\x90\x69\xe3\x20\x41\xc4\x1d\xd9\x74\xd0\xf7\x51\x57\x02\x6d\x03\x05\x69\xf8\x0a\x0a\x9b\xe2\x9f\x7e\xcf\x45\x50\x3d\xda\xed\x0e\xa1\xb7\x2e\xbc\xf5\x06\x5d\x0a\x54\x38\xf4\xa0\x57\xaf\x37\x50\xc0\x80\xbe\x83\x8c\xaf\x4b\x7b\x5d\x64\xb4\xce\x08\x75\x40\xc5\x15\x10\xa7\x38\x17\x43\xb5\xe9\x53\xcf\x81\x57\xc0\x08\xfc\xde\x3f\x60\x49\x46\xd0\xa7\x07\x4a\xa6\xd7\x43\x09\x1b\x74\xf5\x41\x17\xfa\xef\x01\xf3\xed\xc1\xab\x2e\x8a\x0b\x3e\xf0\xbc\x01\x8c\xbd\x37\xc2\x2f\xa0\x7e\x20\xcc\xa0\x0b\xe1\xa8\x06\xee\x40\x99\x2c\xa0\x53\xb7\x8b\x03\xed\x23\x2a\xd5\xbb\x5e\x37\x04\xf5\xaa\x83\x1f\x39\xee\x7b\x7d\x00\x0b\x34\xad\x52\xdb\x42\x70\xb4\xf9\xd4\xf3\x94\x01\x1c\x34\x25\xb7\x37\xd4\xdf\xba\x23\xef\x12\x31\x8a\x7a\x2d\x1a\x00\x61\xae\xba\x3d\x65\xf3\x81\x56\x1d\x54\xa1\x3d\x68\x00\x5b\x81\xb7\x58\x1b\xde\xda\xc8\x6f\x81\x17\xc3\x28\x3d\x10\x4e\xd0\xec\x39\x70\x7b\xe1\x88\xf6\x71\x8b\x83\xcf\x5c\x43\xed\x2a\xf2\x8b\x5c\x3a\x1c\xa1\xa9\xcd\x1b\xf8\xa0\x3b\x23\xaf\x02\xb2\xf0\x86\x03\x3a\x1c\x00\x8b\x06\x64\xfb\x2e\xa8\x4b\x2e\x6e\xb2\xf0\xdd\xa7\x23\x90\x6c\xdd\xde\x0c\x00\xfd\xf4\xd3\x80\xba\x5e\xc7\xeb\xd2\xa1\x1b\xd1\x9e\xa7\xe7\xae\x0f\xbb\x1d\x2a\xb0\x7d\x50\xd4\x61\x99\x20\x05\xba\x23\x74\xae\x00\x41\x42\x4f\x3d\xe0\xe8\x8e\x3b\x54\x46\x73\x5c\x13\x30\xb0\xbe\xdf\x03\xd5\xd8\x55\x1b\xe6\x08\x86\x3a\x74\x95\x5d\x11\xd8\x27\x7c\x71\xa9\x3f\xf4\x2f\xd1\x5d\x11\xd9\xb4\xdb\x77\xb5\x29\x09\xd5\x54\x0f\x35\xcf\x6e\xdf\x83\x05\x10\xba\x2e\xea\xf0\xfa\x8f\x62\xa1\xae\x36\x24\x8d\xfa\x91\x8d\x4b\x1b\x9f\x0d\xbb\x5d\xac\xeb\x51\xbf\x8f\x38\x03\x7c\x76\xd1\x54\x3a\x18\x28\x67\x4d\xf1\x75\xe8\x0d\xd1\x0f\xd3\x1d\x50\x17\xd6\xbe\xef\xf8\x40\x2b\x48\xae\x3d\x84\xd7\x1f\x0d\xe8\xc8\x1f\xe4\x4f\xfb\x23\xf8\xf6\x69\xee\xaa\x45\x0e\x64\xd4\x8f\xd4\xdc\xa1\x63\xa9\xaf\x4d\x25\xa0\x1f\xaa\xb1\xba\x68\xf5\x42\x03\x30\xe8\xc2\x8a\x6f\x00\x04\x7d\xef\x47\xb7\x87\x7e\x2a\x1f\x46\x89\xe6\xde\xbe\x2e\x00\xb4\x0a\x50\xeb\x6f\x38\xf1\x8a\xac\xb0\x39\x00\xca\x1f\xba\xf8\x65\x06\x32\xc5\x30\x02\xbc\xc3\x50\x7a\xa0\x43\x77\x87\xb4\x0f\xb3\x8d\x0b\xce\x19\x75\x51\xc2\xf0\xdd\x01\xfe\xeb\xbb\xa3\xc4\xa3\x7d\x94\x25\x7a\x9e\xa7\x68\x49\x7d\x8f\x70\x52\x7d\x77\x48\xdd\x01\xda\x97\x7a\xd0\xac\x8d\x8d\xe9\x61\x50\x1f\x8d\x97\x1a\xb1\x6e\x6f\x34\x03\x39\xc7\xad\xf4\xaf\xac\xb1\x7d\xbf\x5f\x03\x00\xb4\x5d\x00\xc0\xf1\x34\x00\x3d\xd7\x05\x08\xfa\x5d\x20\xcc\x41\x0f\x20\xe8\x83\x58\x84\x84\x82\xeb\x76\xa0\x26\x0e\x11\xd2\x77\x47\x15\x10\xd4\xd2\x1b\x51\xa0\x0d\x05\x42\x77\x30\x8c\x00\x3f\x00\x82\x8f\x36\xe5\x81\xc2\x12\xea\xec\x38\x2c\x10\x6d\x90\x7b\xfb\xc0\xb1\x7a\xa1\x47\xbd\x3e\xac\x24\xf8\xcc\xad\x1f\x38\xdf\x09\x88\x01\xbe\x0b\x5b\xb0\x37\xec\xab\x79\x51\x50\x00\x5f\xe8\x79\x7a\xd1\x62\xe7\x5e\x4e\xda\x7e\x57\x4d\x77\xdf\xc1\x2f\x33\xc5\xa0\x22\x5b\xe1\x45\x33\x2e\x45\x1a\x1a\x71\xa2\x46\x11\x88\x66\x1f\x15\x06\x60\xe8\xae\x43\xbd\x9e\x9b\x73\x5d\x87\x7a\x7e\x2f\x42\xa3\xaf\x22\x8f\x41\x4f\xc3\x01\xe8\xc4\xf6\xd4\x6e\x85\xee\x05\x18\xa4\x42\xbf\x86\xe2\xd3\xdc\x73\x68\x17\xd7\x40\x04\x3c\xbb\x8f\xeb\xa4\xdf\xf3\x15\xc9\x41\x27\xb8\xbc\x81\x9f\xc2\x60\x5c\x58\x99\xca\xc4\x3b\x82\x35\x38\xf4\x72\xb0\xd1\x95\x82\x24\x09\xff\x10\x68\xdc\x8e\xba\xdd\x5e\x88\x1e\xac\x8e\xfa\xcc\x8d\x88\xd0\x5a\xb7\xdb\xbb\xb4\x81\xb1\x38\x1a\x4d\xca\x02\xec\xc3\x8e\x8a\x5f\x42\x3a\xa2\xa3\xd2\x6a\x01\x1b\xc6\x30\x52\x3b\x07\x4c\x95\x3f\x52\x93\x3e\x1a\xe2\x9c\xf7\xba\xda\xe7\xea\x7a\x43\x64\x78\x2e\x1d\x74\x87\xc8\x60\x71\xd0\x1e\xec\x28\x5e\xaf\xaf\x16\xf4\x70\xe4\xaa\x2f\x0e\x92\x27\x6e\x71\x28\x00\x78\xd4\xf7\x5c\x45\x60\x3d\xe5\x95\x19\x7a\x7d\x1b\xb8\x25\x7e\x01\xae\x86\x2b\xba\x9b\x0f\x18\x96\x5b\xd7\xc3\xbd\x13\x58\x94\x37\xec\x6b\x04\x60\xbd\xde\xc0\x47\xab\x50\x0f\xf7\x44\x54\xfb\xe0\xfb\xc0\xed\x45\xb8\xe9\xd8\xd4\xef\x03\xa6\xd1\x30\x3a\x72\xfa\xb8\x9f\x61\x15\x0d\x85\x4d\x11\xfb\x28\xd9\x02\x8c\xf0\x15\x1b\xc9\x7d\xd1\x6a\xfb\xf2\x7a\x3d\x0d\xc5\xa0\x0f\x9b\x97\x83\x3a\xa4\xa3\xa5\x43\x17\xc5\x17\xdc\xf6\x1d\x74\x2c\x74\x7b\xfa\x33\x7f\x8b\x93\x0e\xbb\x76\x9f\x8e\x8a\xcf\x7c\x4f\x71\x94\x91\x3e\xa2\xbe\xf2\x4e\xbb\x3d\x58\x34\x5a\x6a\x72\xfa\x38\x63\x6a\x71\x8f\xd0\x1d\xa1\x78\x29\x52\x23\xf0\x0c\x27\xe7\x3a\x23\xa7\xaf\x8c\xd6\x30\x97\xa3\x1e\xf2\x24\x77\x84\xa3\x80\x47\xb0\xf5\xe1\xfa\x1c\x7a\xc8\xd2\xba\x03\xb5\x56\xa1\x28\xd2\x71\xd7\x47\xc2\x86\xbf\x3d\xaf\x77\x89\x92\x10\xac\x6b\xb4\xa7\x83\x08\x81\x5c\xaa\xdf\x53\x5f\x5c\xe0\xe1\x7a\x17\x46\xdf\xa5\xe2\xbd\x23\x85\x67\x90\xf3\x6c\x97\x8e\x00\xc3\x7d\x0f\x05\x1b\x64\x68\xf8\x56\xad\x03\xcf\x45\xe4\xa2\x9f\x53\x4d\x38\x52\xa7\xa3\x64\x30\x14\x90\xe0\x8b\x92\x19\x01\x31\xb8\xab\xf7\x46\x80\x47\x00\x1e\x69\x71\x84\x28\x00\xb0\x61\xf4\x7d\xa7\xab\xe9\x72\x38\xe8\x26\x28\x21\x21\x2d\x28\xe9\xd2\xef\x03\x52\x47\x03\x17\xde\x02\xff\xc5\x0d\xbb\xe7\x29\xf7\x78\xbf\xe7\xd1\x01\xc8\xaa\xfe\x68\x44\x51\x92\x53\x8e\x7d\x90\xa0\xd0\x93\xa1\xf6\x29\x18\x19\xaa\xcc\x5d\xa0\x03\x6f\x00\x5a\x8a\x57\xc8\x2b\x40\x73\xd8\xc4\x30\xd2\xc3\x19\x61\xec\xc0\x10\x05\x31\x24\x9f\x1e\x1d\x8e\xc2\x01\x6c\x1e\x1d\xf5\x99\x9b\x17\x41\x92\xf0\xfd\x6e\x55\x6f\xf0\x7a\xde\x0f\xfe\x9b\x4d\x7a\x43\x21\x78\xc3\xc4\xb9\x6e\x07\x98\xe3\x30\x02\x15\xc4\x03\x49\x63\x08\xfc\xcc\x43\xbe\xd3\xa3\x23\xd7\xb7\xdd\x11\xf5\xd1\x19\x01\x3f\x46\xa8\x61\x39\xb6\x3b\xa0\x5d\x74\xe4\xf8\xc3\x9e\xed\xf9\xb4\xef\x77\xed\x11\x75\xdc\x0a\x8b\x51\x0c\x14\xd4\xf0\x11\x2e\xda\xfe\x08\x74\xa7\x41\x17\xa5\x19\x65\x4e\x03\x35\xca\x1b\x0c\x3b\xd0\x40\x4f\x7f\xef\xd1\xa1\x5a\xfc\x1e\x6e\x6b\x20\x5f\x0e\x3b\x40\xaf\xd0\x5b\x1f\xc5\x24\x64\x75\xb8\xc1\x7b\x1e\xc8\x38\x30\xe9\x1d\x2c\xf8\x69\xee\xa1\x17\x06\x04\xfd\x51\x04\x4b\x71\x88\x5c\xc2\xee\x2a\x1f\x60\xd7\xf5\xed\x3e\x3a\x0d\x95\xa0\xe9\x68\x07\x7a\x6f\x38\x54\x12\xb7\xe2\x77\x03\xb7\xdf\xf1\xe8\x08\x4d\x88\xce\x08\x30\x3e\x52\xe2\x4b\x67\x48\xbb\x28\xed\x63\x78\x80\x07\x54\x82\xbb\x03\xa8\xbe\x1e\xb0\x89\x51\xaf\x0f\xa5\x41\x54\xef\x6a\x9e\x39\xec\xc2\xa2\x03\x04\x00\x2d\xe7\x7b\x80\xab\x94\x1e\xea\xf4\x6c\x10\x3a\x51\xea\x1b\xfa\x76\x8f\x8e\xfa\xd5\xa9\xfc\x61\xe4\xac\xe9\x7a\xab\xa3\xea\x91\xd9\x22\x40\xaa\x48\xc8\x22\x4f\xd9\xa9\x33\x99\xbc\xd0\x7f\xc7\xec\xd4\x9d\xac\x36\x9f\xc8\x4c\xf7\x3f\x4d\x39\x0d\xc5\x8c\xf1\xc3\xcf\x8a\x95\xf5\x9e\x56\x78\x5a\x65\xbc\xfb\xb6\x9a\xd7\xd8\x15\xa8\x36\x65\xd1\x81\x81\xa4\x50\xe3\x89\xa1\x0f\xc6\xb8\x77\x7b\xd1\x6e\x94\x69\x10\x37\xc5\xf6\x15\xcb\x42\x96\xcb\xc2\x30\x82\x20\x80\x75\x70\x7b\x5b\x1c\x2e\x86\x9f\x2f\x60\x55\x8c\xe1\xdb\x5d\x8e\x3b\xff\x5e\x64\xb4\xdf\x7e\x63\x52\x7d\xa5\xc9\xdd\x37\xea\x14\x63\x8d\xcf\xcf\x19\x67\x8d\x3b\xa0\x76\x0f\xb7\x03\x23\x5a\xbb\x97\xbd\x38\x55\xff\x0c\x46\x4d\xcf\xe3\x74\xfa\xfd\xb5\x69\xbc\x7d\x5d\xbb\x31\x99\xc0\x03\xbc\xb9\xea\x2e\x07\xc0\x0b\x80\x3f\x23\x4e\x2e\xf7\x8e\x85\x85\xb2\x4f\x6c\xb1\xc0\xe8\xf6\x6d\x2f\xbe\xdc\xb9\x58\xb2\xb9\xbd\xc8\xd4\xa5\x19\xfb\x91\xd0\xd7\xdc\x0b\x7f\x9e\xdc\x0b\x8d\xb5\xb6\xef\xb5\xca\xfa\x24\xc4\xda\x95\xc6\x69\x00\xf4\xe1\xe1\x65\xa1\x2a\x51\x83\x99\x9e\xba\x93\xf2\x3a\x20\x9d\x48\xd5\xe4\x96\x45\xc2\xe0\x54\xd0\xec\xfc\x5c\x30\xf9\x6b\xc8\x59\x2a\x89\x98\x14\xd7\x85\x52\x21\x43\x2e\xc5\x3f\x63\x39\x33\x8d\x7f\xe1\x4c\x64\xc9\x25\xe3\x63\xc3\x3a\x3e\x0e\xe9\x32\x15\xb3\xf8\x5c\x9a\x21\xf0\xb0\x6a\x0b\x16\x09\x5b\xee\x51\xad\xde\xb2\xfa\xf1\x79\x20\x75\x95\x1f\xd9\x39\x70\xa0\xeb\xf2\xc9\x6f\xd9\x82\xb0\x15\xb9\xf9\x38\x76\xc8\xf5\xd8\x21\xca\xc2\x3d\xce\xa1\xfc\x1b\xfe\x24\xea\xca\xc7\xfc\x21\x5e\x05\xb8\xb2\xf6\xb9\x05\xad\x58\x72\x3c\x5b\x1c\xba\xa7\x43\x95\xc7\xc8\xa7\xb6\x0e\x54\x0d\x6b\x91\x5d\x31\x6e\xab\xeb\xa2\xec\x58\xd8\x17\x3c\x5b\xb6\x8e\xbf\x5a\x70\xaf\x36\x1e\x23\x42\xfe\x3f\xf6\xde\xb5\x3b\x6e\xdc\x4a\x14\xfd\xae\x5f\x21\xf1\x9e\x53\x43\x4c\x20\x4a\x72\x3b\x33\x49\x75\x18\x5d\xb5\xed\x4e\x7c\x63\xbb\x3d\xb6\x3b\x73\xb2\x2a\xb5\x7c\x20\x12\x55\x62\xcc\x02\xab\x01\x94\x1e\x29\x71\x7e\xfb\x5d\x78\x91\x20\x09\x3e\xaa\x54\x72\x4b\x8e\x32\x6b\xda\x2a\x12\x00\x81\x8d\x8d\xfd\xc6\xde\xed\x63\xca\x95\xbc\x17\x0b\xf9\x28\xd7\xf1\x9a\xfd\x49\x41\x62\xe0\x37\x5a\xfa\x6f\xb7\x09\xa6\x7a\xd7\x1d\xf7\xa1\x18\xe6\xb1\x6f\xc5\xc7\x02\x1e\x5b\xef\x86\x19\x62\x8b\x0d\xe1\x74\x85\x8d\x4e\x94\xcc\x0e\x97\x14\xb3\x96\x0c\xd5\x43\xf7\xa6\x65\xc4\xc7\xbd\x4d\x9f\xe8\x0a\xab\x0a\xbc\xaf\x67\xef\x0d\x8c\xb6\xdc\x2f\xc7\x58\xbd\x1b\xd7\x5e\x7f\x4a\xbc\x7a\xca\x57\xf5\xaf\x21\x33\x6d\x92\xaf\xea\x19\x80\x2c\xa4\x42\x14\x42\x21\x15\x92\x50\x5a\xa6\xae\x42\xa7\x9e\x37\x46\x30\x0b\x65\xda\x2a\x4c\x2e\x81\xcf\x8a\x7a\xe9\x02\x8a\x07\x61\x76\x9a\x8d\xd3\x7a\x16\xab\x8e\xcc\x6a\xf8\x97\xe1\xd9\x92\xf1\x2f\x2b\xf4\xd8\x92\xa4\xa8\x39\x0f\x3e\xf2\xa2\x75\xef\xa1\xbe\x76\xca\x22\x4e\x65\xb1\x99\x08\xf9\xc1\x03\xec\x7a\x03\xf9\xe2\xba\x5f\x96\xb8\x5e\x2e\x4e\x36\x01\xd7\xe2\xe4\xf1\x01\x4c\xac\x70\x38\xc8\x16\x27\x7d\x40\x53\x46\x96\xc3\xf3\x4d\xd3\x05\x97\xfd\x1e\x22\x08\x07\x2c\x79\xab\xf5\x3e\xc6\xc5\x92\x78\x9b\xdd\x55\xbd\x1e\xe1\x72\xaf\x71\x7c\x38\xa7\x49\x7c\x98\xa2\x9b\x6c\xd5\x92\x1a\x23\x4d\x55\xa1\xdf\x23\xd5\x88\x1d\x89\x1e\xf7\x5c\x77\xbe\x9d\x23\x1b\xae\x8a\xaf\xca\x85\xfa\x58\xf0\x65\x3c\x39\x99\x82\x0d\x94\xf7\x59\x2a\xe4\x0e\x67\x6a\xe1\xae\xdd\xd6\xbd\x1e\xe2\x6e\xb7\x8f\x59\xac\x75\xe0\x98\xba\x7d\x2f\x06\xa5\x59\xe6\x24\x0e\x4e\x2e\xa2\x5a\x3f\x36\xc0\xc9\x15\x0e\x06\x5b\x96\xd1\x5e\xa0\x65\x74\x81\xf8\x21\x59\x09\x48\x75\x67\xcf\x2d\x33\x2f\xa6\xa9\x50\xfe\xf8\xcd\xb2\xe9\x50\x6b\xd1\x4e\x70\xc0\xb3\x37\x59\x84\x52\xad\x1c\xf9\xea\x98\x41\xbe\x95\xf4\x5c\x1d\xab\x2d\x33\x82\x5b\xa0\xae\x26\x73\xf5\xf4\xc2\x81\x4f\xc0\x70\x3f\xe4\x8c\x66\x2b\x77\x91\x03\x37\xaa\xa9\xe6\x8f\x0c\xd7\xf4\x1a\x87\x22\x9b\x6c\xde\x87\x6d\xf3\x68\x38\xd4\x44\xdb\xc7\x05\x32\xb9\xba\x81\xe3\xcd\xa3\x7e\x60\xd1\x6c\xb5\xdc\x5c\x02\x28\xba\x3d\x44\xe0\x75\x2f\xd8\xc9\xf3\xdd\x6a\xe6\xfc\xb1\x19\x9d\xe6\xc3\x87\x9b\x0f\x80\x94\x33\x04\xa2\x0d\x54\x8f\x2d\xee\x61\xbe\x41\xf6\xac\x79\x7f\xe6\xac\x0b\xc4\x0e\x09\xbe\xde\x34\xd9\x5a\xd1\xed\x71\x01\xef\x02\xb1\x77\x72\xb1\x03\xc7\xd4\xed\x87\x00\x71\x49\xf1\x65\x92\xad\x36\x4d\x41\x56\xe9\xfa\xe8\x80\xf9\xbe\x58\xf4\x70\x80\x9a\x3e\xbd\x40\xa5\x78\x76\xb8\xa8\xeb\x3a\x2d\xed\x78\xe6\x10\xca\x68\xb6\xe2\x09\x99\x1f\x71\x8a\x88\xf2\xb6\x8b\xe9\xf5\xd4\xd5\x7a\x32\x1b\x7f\x3b\x66\x63\xe6\x76\xb5\x0b\xbc\xc0\xb4\xc5\xdb\xae\x5e\x3a\x1d\xee\x90\xa9\x7d\x45\x21\x35\x75\x11\xec\x2a\x08\x02\x11\x3f\x65\xc0\xe7\x17\x09\x53\xee\x77\x35\x16\xac\x96\x4a\xb5\xde\x04\x2a\x5d\x3d\xff\x20\x7e\x41\x54\x06\xfc\xfc\x74\x45\x30\x95\x2d\x01\x80\xac\xe6\xe9\xee\x2e\x32\x56\x1c\x87\x26\x19\xd2\xaf\x36\x38\x39\x57\x49\x1a\x47\x88\xc6\x95\x26\x1a\x42\xf5\x63\x04\xa9\x75\x90\x98\x65\x01\xe8\x3b\x46\xc5\x59\xe0\xe1\x31\x24\xa1\xc0\x21\xfd\x4e\x63\x35\xf8\x9e\xff\xc1\xfc\xfd\x3d\xff\xcd\x6f\x00\x99\xf0\x69\x88\x27\xbc\x88\x5d\x20\xb9\x3a\x83\x69\xf5\x24\x0e\x47\x4b\xb6\xa4\x18\xc5\x5d\x18\x59\x2c\x0d\x6d\xb0\xb4\x2a\x85\xd8\x7a\x76\x03\x0f\x4d\x31\xc5\x54\xcf\xa7\x46\x56\xf6\x13\xb2\xaf\x0e\x96\x9c\x88\x37\xc9\xe4\x8f\xfd\x33\x53\x18\x70\xea\x85\x61\xa8\x8f\xde\x92\x66\x3c\x13\x6a\x6c\xc0\x33\xa5\x4b\x06\x42\xb9\xb5\x56\xa5\x56\x3b\xa3\xd9\xc2\xc7\x77\x3a\xb1\x58\x1f\x1d\xfb\xe8\x66\xb5\x02\xc3\x54\x1d\x19\x06\x60\x62\x95\x64\x16\x58\x07\x53\x75\x2a\x93\x10\xf9\x14\xc0\x55\x98\x4c\x8e\xa7\x30\x0a\x93\x80\xa5\xe2\x44\x9f\x14\x0e\x9e\xcc\x5f\x09\x02\x1a\x85\x51\xb0\x40\x4b\x97\xb1\x0a\x07\x6c\x99\x26\xdc\xf7\x8e\x3c\x20\xdb\x60\x12\x65\x31\xfe\xf9\xc3\xeb\x17\x82\x85\x13\x4c\x38\x08\xfe\x91\x25\x44\xb6\xc8\x01\x80\x69\xa0\x4a\x92\x9c\x56\x48\x00\x2e\x9e\x83\xb1\x4f\x2a\xc7\xfc\x1d\x5a\xe0\x4a\xa4\x0d\x61\x4b\x14\xe1\xc0\x03\xa3\xd1\xaa\xf2\x22\x8e\xe4\x43\x7f\x15\x16\x6d\x82\x28\x23\x11\xe2\xfe\x0a\x00\x58\xfb\xe0\x64\x35\x35\x6f\x99\x1f\x01\x00\x40\xbe\x57\x00\x36\x91\x30\x5d\xed\x98\x1c\x96\x9c\x32\x69\x12\x3d\xf1\xba\x4a\xb7\x56\xdd\x74\x8b\x2f\xd2\x43\x86\x66\x9b\xc6\x2f\x97\xfd\x1e\x99\xf4\xc4\x17\xe9\x47\xb9\xdc\xa1\xa2\x93\xee\xd0\x2b\x37\xad\x16\x88\x6c\x1e\x07\x5e\x74\x7b\x64\x60\x2c\x56\x3b\x14\x8c\xba\x43\x2f\x18\x6f\x96\xd9\xf0\x72\x21\xaa\xf5\x23\x03\x9d\x5a\xe1\x50\xb8\x89\xd6\x7d\x40\x4b\x16\xab\xe1\x15\x43\x64\xe3\xc7\x05\x32\xb5\xbe\x81\x03\x8a\xc6\xbd\x00\x23\x9b\x5e\x35\x10\x3d\x1e\x19\xd0\xc8\xf0\xab\x06\x09\xe9\xbd\x6a\x90\x10\x8e\x29\xc3\x1b\xe7\x87\x2f\xfb\x3d\x44\xf0\xf5\x2c\xf9\x32\xfb\xb2\x69\x82\x78\xdd\xe9\x21\x2e\xb6\x0b\x57\xd4\x4a\x07\xa3\x8b\x68\xde\x0b\x3e\x76\xd8\x5a\x3b\xd8\x6d\x16\x2c\x7a\x3c\x32\xe8\x29\xcd\x63\x38\xf8\x54\xfb\x01\xf0\x13\x9a\xc8\x66\xf0\x53\x3d\x1e\x22\xfc\x7a\xd7\xaa\x22\x9e\x36\x59\xeb\x23\x8c\xeb\x4a\xd8\xab\x8d\x22\xbb\x74\xfb\x01\xf0\x13\x3a\xc7\x86\x37\xa3\xbe\xa2\x89\x80\x7e\x05\x13\x01\xd9\xda\x44\xb0\xf5\xec\x36\x35\x11\xd0\xc7\x65\x22\xb8\x3f\xa3\x9e\x0e\x1d\x85\x2c\x14\x3f\x20\x0a\xd9\xe4\x78\x0a\xd3\x90\x35\xcc\x07\x6d\x86\xbb\x2e\x8d\x1e\x39\x35\x7a\xd4\xd4\xe8\x91\xd0\xe8\x69\x68\x7d\x03\x08\x2c\x89\x78\x72\x89\x03\xb4\x5c\xa6\x37\x3e\x85\x13\x54\xe8\xf8\xdc\x4f\x85\x8a\x0f\x33\xf2\xf3\x87\x37\x2f\x64\x41\x2c\xbd\xf6\xec\x5c\x2c\x1b\x53\xb3\x6a\x33\xd7\x9f\x3f\xbc\xf1\x60\x05\xb3\xc4\xa7\xb0\x86\x88\x0f\x72\x50\xb7\x32\x76\x44\xbd\xfe\x23\x73\x17\x94\xef\x90\x47\x64\x97\x87\x48\x23\x3b\xe9\x59\x8a\xd8\xc0\x5b\xad\x4f\x8e\x83\x87\xe0\x38\xa8\xd2\xe0\xf2\x82\x9c\xaa\x62\x4c\xcb\x50\x70\x72\xea\x79\x63\xb2\xc7\xae\x12\xb1\xd8\x83\x63\xb0\x8e\x10\xc3\x9e\xb2\x8e\x78\x61\x28\xe8\x5a\x36\xdb\xa7\xe3\xf2\x7a\xdc\xea\x9c\x71\xea\x1f\x9e\x80\x7c\x1b\x52\x26\x30\x69\xb3\x70\x9c\x0d\x6e\xff\xa7\xd1\x62\xb0\xde\x2d\xda\x3e\xc4\x73\xd8\x3e\xa6\x5c\xdd\xc0\xf1\xd2\x68\xd1\x7b\xa6\xf1\x8c\x1f\x72\x9a\x2c\xba\x63\xba\xca\x66\x4f\xd7\x4c\x1e\xfa\xb1\xff\x75\xaf\x99\x14\x44\x85\x09\xa2\xc2\x60\xaa\x2e\x9e\x64\xe5\x8b\x54\xbc\x48\x9d\x35\xd3\x11\xcc\x36\xa9\x9a\x9e\x66\xf3\x43\xa7\x29\xc0\x7d\xd6\x65\xeb\x47\x76\xda\xb3\xf9\xab\xe1\xc7\x3d\x9b\xbf\xea\x3d\xef\xd9\xfc\xe4\x78\x13\x90\x9d\x1c\x3f\x3e\x90\x89\x15\x0e\x87\xd9\xc9\xf1\x10\xa0\x0d\xbf\xa6\xa3\x5a\x3f\x3e\xa0\x0d\xbf\xaa\x23\x5b\x0f\x00\xda\xf0\x6a\x9f\xb2\xf1\xa3\x03\xd9\xf0\x5a\x9f\xa2\x71\x3f\xc0\xae\x30\x95\x82\xd7\x66\xde\xaa\xb2\xdf\x63\x03\x60\xb1\xde\xc1\x50\xd4\x3d\x7a\x41\xb9\x41\x84\x68\xfa\x30\x8d\xe0\x1d\x70\x1b\x3e\xdc\x00\x9d\x6e\x93\x08\xd1\xf4\xd1\x45\x88\xa6\x1b\x44\x88\xa6\xfd\x11\xa2\x0b\xb4\x45\xa0\xb5\xee\xf4\x10\x01\xd7\xb7\xd8\xcd\x57\xfa\x18\x97\x79\x3d\x98\x4d\x89\xb6\x0f\x71\x81\xed\x63\xca\xd5\x0d\x1c\x6f\x81\xae\x7b\x81\xe5\x36\x75\xb9\x81\xf5\x40\x6d\x5c\x1d\xc0\x4a\x86\x5f\x36\x5b\x24\xbd\x17\xcd\x16\x5b\x5e\x55\x2c\xfb\x3d\xbc\x0b\x8b\x9b\xdc\x55\x5c\x64\xc3\x6f\xf1\x88\xb6\x8f\x0c\x59\xb2\xe1\xb7\x78\x16\x59\xef\x2d\x9e\xc5\xca\x2d\xb4\xb8\xa1\xb5\x7a\x74\x52\xcb\x62\x93\x01\x17\x03\xe8\xf6\x16\x37\x35\x1e\xe1\x2d\x0d\xb2\xc9\x15\x0d\x32\xe0\x7e\x06\xc9\xf8\xe1\x26\x79\x3a\x54\xfb\xc7\xe7\xd3\x25\x19\x7f\xf5\xcb\x70\xc8\x89\xd6\x03\x40\xb7\x11\xdc\x1e\x1f\xc4\x36\x81\x57\x1f\xb4\x94\xb7\xf4\x10\x6d\x7a\x48\xcb\x7e\x8f\x0b\x7c\x6a\xde\x67\xc3\x07\x35\x1d\x06\x02\x12\x13\x4e\x13\xcc\x9e\x1c\x70\x8f\xc7\x12\xbf\x81\x03\x6e\x9d\x8f\x89\x9d\x7c\x29\x0c\xe9\xe9\x64\x3a\xd6\xd8\xa6\xf7\xde\xa7\x5b\x59\xf7\x15\x02\xbd\x52\x63\xdc\x9b\xdb\x2d\x5b\x8a\xa5\xba\xa3\x85\xba\x8e\xbb\xe9\xf6\xc8\x4e\x7b\xb1\xda\xa1\xa7\x5d\x77\xe8\x3d\xed\xce\xd4\x14\x6e\x1e\xf3\xe8\x12\x53\x6c\x90\x95\xa2\x3f\x25\xc5\x12\xcd\xf1\x21\x4f\x78\xea\xb4\x60\x95\x6f\x5d\x1d\xee\x4b\xaf\x2a\xc0\x30\x58\x49\x5a\x62\x1a\x61\xc2\xc5\xd4\xa2\x2c\x5d\x2d\x08\xdb\x4c\x59\x6c\xf6\x7f\x78\x4a\xa3\xcc\x72\x03\xf1\xe4\xd9\x46\xea\xe3\x12\xd3\x59\x46\x9d\xbe\xfc\x28\x23\x2a\x92\x27\xba\x69\x34\x7f\x88\x27\xa2\x7b\x9d\xc9\x12\x1f\x22\xd9\x7b\x43\xda\x69\xf7\x7c\x94\xcb\xde\x62\xbd\x0f\x72\xa1\xed\x63\xaa\x55\x0e\x1c\x50\x34\x96\x60\xeb\x88\x36\x5b\xa6\x2b\x8a\xd2\x96\x3b\x4d\x09\x99\x09\xfa\x90\xd1\xa3\x34\x39\x77\x74\x79\x40\x64\x2f\x4b\x93\xe8\xe6\x28\x46\x1c\x09\xf2\x85\xe9\x40\xc1\x56\x89\x51\x3c\x44\x26\x08\x53\xcb\x8c\x7f\x3c\x19\x8d\x8a\xca\x22\xc5\xcb\xc9\xc9\xf4\xd4\xfe\x31\x5e\xe7\xd0\xd0\xb1\x39\xd6\xc4\xc9\x7b\x69\x4d\xa2\x88\x70\xac\xca\xc9\x04\x8c\x46\x62\x64\x23\xa2\x9e\x76\x8e\x31\x9e\xf0\x60\x9e\x66\xe7\x28\xbd\xbd\xf5\xce\xd2\xd4\xdb\xaa\x78\x83\x05\x9b\x7b\xab\x55\xa0\xb7\x41\x05\x78\xb5\xef\xc0\x16\xb3\x17\x43\xfe\x34\x6b\x93\x36\x79\xe8\x1d\xeb\xff\x1d\x3a\xfe\xa3\xff\x77\xe2\xed\xb9\x44\x68\x01\xf1\x7a\xb0\xda\x7e\xb9\x21\x44\x15\x88\x08\xc3\x90\xeb\x80\x35\x4f\x2d\xf3\x70\x81\x08\x9a\xcb\x0c\xf0\xde\x9e\xec\x54\x08\xe0\x95\xde\x42\xcc\x4f\x11\xc7\x1e\x30\xfd\x69\x96\x62\xd5\xc5\xf3\x0e\x7a\x5b\xeb\xaf\xe9\x88\xdb\xc3\x24\xc6\x84\x27\xfc\xc6\xdb\xd3\x80\xa8\xb6\xf3\xf2\xdd\x14\xbd\x59\x66\x57\x83\xed\x87\xa2\xed\x23\xa3\xa3\x62\x75\x43\xc9\x68\x76\xd5\xcb\x7c\xb6\xcb\x50\xf2\x48\xb3\x93\x2c\x37\x4d\x4d\xb2\x1c\x98\x97\xe4\x97\x15\x5e\x6d\xca\xc4\x55\x9f\xc7\x05\x40\xbd\xce\x81\x23\xca\xd6\x7d\xa0\xa3\x88\xc4\xd9\xf0\x40\x55\xdd\xfc\x71\x81\xcd\xac\x71\xe0\x90\xaa\xf9\x00\xc0\xcd\x37\xc5\x39\xd5\xe7\xd1\x01\x6f\x3e\x1c\xe7\x64\xeb\x5e\xd0\xc9\xda\x24\x9b\xc2\x4e\x75\x7a\x88\xc0\xeb\x59\xac\x34\x9b\x6e\x1c\xae\x51\xf6\x7b\x84\x4b\x5e\xe2\x8d\xed\xed\xba\xd3\x43\x5c\x6c\xc7\xe1\xd0\x2b\x1d\x7a\x3a\x64\xf3\x7e\xf0\x5d\x62\xda\x12\x7e\xd7\x05\x3f\xd5\xeb\x21\x02\xb0\x7b\xb9\xc9\xfc\x62\x48\xec\xbf\xd5\xee\x29\xf8\xff\xa1\xbb\x1c\xfe\x75\x82\xff\x37\xcb\xad\xfb\x18\x53\xeb\x6e\x96\x59\x77\x50\x62\x5d\x79\x0d\x52\x40\x28\xba\x78\x72\x24\xfe\xab\x9d\xea\x7e\x0b\x7e\xd3\x45\xa9\xbf\xfc\x05\xdf\x30\x9f\x80\x86\xd5\x85\x06\x09\x89\xd2\x55\x8c\x99\xef\x99\x92\x48\x85\x1d\xa4\xb8\xd0\x4b\x82\xd7\xe4\x12\x53\x7e\xea\xbd\xfb\xe9\xd3\xbe\x37\xf6\x3c\xa9\x93\xaa\xd6\x7b\x8d\x81\x5e\x5d\xa3\x68\xe0\x30\xff\x86\x45\xdb\xf4\x66\x5f\xa2\x74\x42\xe6\xfb\xde\xbf\x81\xb2\xbd\x1c\x09\xfe\x9b\xf7\x6f\x8e\xaf\xbc\xa7\x78\x96\x5c\x0f\xfc\xcc\x52\x36\xc6\xf1\xfe\xf9\x4d\xf5\x0b\x6a\x94\x96\x4f\x7c\x5c\xcd\x86\x7f\x82\xc9\xc6\x8e\x4f\xa8\x51\x5a\x3e\xf1\x01\xcf\xf1\xd0\x2f\x14\x30\xe2\x17\x78\x9f\x8a\x8e\xd5\x0f\xc9\xb1\xe4\x77\x72\x33\xdc\x06\xee\x1a\x6d\xee\x3a\xc2\xd7\x1c\x53\x82\xd2\x43\x96\xad\xe8\xd0\xba\xb0\x25\x8d\xa8\x1b\x56\x5f\xe9\xe1\x3e\xca\xd1\x58\x30\x4b\x28\xe3\x0a\x2b\x3d\xb0\x47\x6e\x6f\xfd\x66\x9f\xb7\x98\xa3\xa0\x3e\x0f\x00\x34\x6b\x2b\x78\x91\xb4\x73\xcc\x92\x6b\xc1\x92\xcc\xdf\x7b\xc9\xcc\x27\xa0\x0e\x4d\x5a\x42\x69\xab\xc3\xa8\x61\x53\x5d\xcb\xbd\x19\x75\xd9\xc5\x6a\x36\x73\x7b\x45\x3b\xe4\x58\xd3\xeb\x71\xf1\xc8\x62\xad\x03\xc7\xd4\xed\xfb\xf8\x24\x4b\xe6\xc3\x03\x9d\x65\xe3\x47\x06\x36\xb9\xbe\xa1\x30\x4b\xe6\xbd\xb1\xce\x6c\x83\xc0\x70\xf6\xe8\x02\xc3\xd9\x06\x81\xe1\xac\x3f\x30\x9c\x25\x64\xbe\x4a\x51\x5b\x85\x7a\xb7\x17\xcf\xee\xf4\x70\xfc\x78\x32\x31\xc8\xa6\x94\x46\xf6\x79\x88\x18\xd0\xb3\xd4\xd5\x3c\x99\xdd\x3c\xc9\xcd\x8f\x47\x6e\xee\x0c\xc0\x33\x4a\x68\x2d\x0d\x06\x08\x28\x5e\xa6\x28\xc2\xfe\xd1\xfe\xd1\x1c\x7a\x87\x1e\x90\x85\x64\xae\x30\x7d\x81\x18\xde\x4e\x1a\xd7\xb8\x73\x6f\xc1\x77\x2c\xa3\x5b\x98\x3a\x4d\xaf\xc7\x77\x14\x97\x69\xf2\x94\x8a\xe6\x1b\x38\x88\x76\xad\xf6\xe2\x1c\x52\x71\x0e\x29\x44\x21\x69\x96\x2c\x85\xde\x18\x99\x10\x0d\xa6\x33\x54\xa7\xdb\x1d\x49\xd1\xf7\xfe\x0e\xe4\x2f\x74\xf8\x75\x1e\xd9\xf8\x21\x1e\xc2\x0e\x89\x48\xae\x6f\xa8\x48\xf4\x0b\xed\x3f\xd2\x32\x37\xd8\xe1\x55\xc2\x9f\x2c\x53\xdf\xd8\xc1\x16\xc7\xb8\xc1\x6c\x95\x85\x18\xd8\x39\xe1\xb6\x8b\x6e\x2f\x07\xb8\xbf\xc3\xbc\x3a\x1f\x7e\x96\x57\xe7\x8f\xed\x28\x8b\xd5\x0d\x3d\xc9\xab\xf3\xde\x83\x7c\x39\x3f\x8c\x56\xf4\x72\x03\xcb\xcf\xd3\x31\xfe\xb5\x8f\xf1\xd7\x31\x30\x43\x52\x66\x98\x2c\x8d\xcc\x28\x24\x01\xa3\xd1\xed\xed\xfa\x7a\x7c\x0c\x6f\xc6\xc7\x39\x4c\x43\x22\x03\x08\x6f\x6f\xbd\x68\x75\x9e\x44\x1e\xcc\xc2\x09\x83\xeb\xeb\xb1\x8f\x82\xeb\xdf\xb0\xe0\x1a\x1c\x3d\x83\x37\x63\x14\xdc\xe4\x86\xb4\xe8\x96\x61\x18\xa6\xa3\x51\xa6\x36\x6d\x7d\x3d\xce\x26\x27\xd3\xe0\x1a\xde\x8c\x59\x70\x93\x03\x58\xda\xf4\x7c\x1a\x22\xe8\xfd\x9d\xec\xef\xef\xef\xbf\xdd\x2f\x4d\x7d\xc1\x35\xf4\xf6\x3d\x50\xfe\xbe\x51\xad\x3c\x00\x8a\x87\xd6\x46\x88\xf5\xe0\x50\xe1\x6a\x99\x04\x54\xaa\xb8\x2a\x03\x68\x11\x7f\x6a\x42\x4b\xcb\x29\x34\x82\x58\x9f\x9d\x7a\x2f\xbc\xb1\xf7\x5f\x5e\x65\x0a\xb8\xfc\x83\x5d\x24\x33\x89\x9d\x2d\x45\x3b\xf4\x3e\xca\x8d\x62\x3e\x36\x05\x3a\xf6\x3d\x90\x9b\xbf\xa1\x07\x40\xae\xd3\x68\xea\xea\x9a\x19\xd8\x24\x2e\x9f\xa3\x8d\xf3\x6f\xcb\x2e\x0f\x91\x2a\xf6\x2c\x74\xb8\x4d\x4b\xb4\x7d\x88\x0b\x6c\x1f\x53\xae\x6e\xe0\x78\x1c\x91\xbe\xb8\x74\x8e\xc8\xc5\x26\xd0\xba\x78\x7c\xe0\xba\xd8\x04\x5e\x17\xfd\xd8\xc5\xbe\x0c\xbd\xdb\x22\xdb\x3e\x44\x78\x75\xaf\x30\xe1\x29\xde\xbc\xfa\x4a\xd1\xed\x21\x2e\xb8\x03\x41\x8a\xd5\x0e\x45\x12\xdd\xa1\x17\x8c\xd9\x7c\x9e\x6e\x79\x43\xa8\xda\xf7\x21\x02\x74\xc0\xd2\xb7\x5a\xf3\x83\x5c\x6c\x07\xf6\xe8\x95\x0e\xc5\x1d\xd9\xbc\x1f\x7c\x5f\x30\x91\x05\x1c\x48\x46\x6e\x16\xb5\x78\xf7\x3b\x5f\xf1\x48\xd8\x99\x19\xf7\x6e\xf7\x3c\x9e\xd5\xef\x79\xe8\x75\xd6\xfd\xba\x67\x51\x84\x19\xcb\xa8\xb9\xde\xb1\x9b\x8b\x13\x05\x94\x52\x3c\x47\x51\x87\x7d\x7f\x2b\x10\xbd\x91\x83\xb6\xc3\xa7\x1e\x7e\xc1\x6d\x6f\x36\xf4\x3e\xac\x52\xcc\x3c\x20\xdd\xd2\xab\x34\x3d\x08\x79\xe1\x9c\x16\xca\x47\xc0\x69\xb2\xf0\xc1\x5e\xc3\x77\x0e\x3d\xf5\xe1\xf2\x42\x53\x71\x3b\x8a\x8c\x46\x24\x6f\xbf\x58\xd3\x68\x6e\xae\x3c\x91\x60\x96\x90\xd8\x25\x75\x72\x1f\x83\x1c\x8c\xa5\x77\x7c\x37\x5b\xd2\x08\x4a\xec\xe7\x1a\xae\xf8\xc4\x07\x7e\xe6\xe5\x2a\x87\x9e\x78\x9a\xf4\x86\xc6\x73\xba\x72\xd7\x50\x72\x0b\x61\xb2\xf5\x63\x03\xd9\x6a\x83\x0a\x4a\xb2\xf5\x20\xa0\x21\x77\x1a\xc4\x4e\x7c\xd3\xdd\x1e\x21\x00\xd1\x06\x59\x11\x4d\x87\x5e\x30\x5e\x61\x4c\x6a\xc5\x56\x9f\xac\x3e\xff\x82\x56\x1f\x53\x84\x84\x27\xd1\x97\xd6\x22\x24\xea\x65\x47\x11\x92\x4e\x2b\xb2\x2a\x3f\xa2\xc6\x08\x24\xe2\x7d\xca\x7c\xda\x28\x0e\xdc\x6d\xc6\x58\x91\x18\x53\x16\x65\x74\xd3\x93\x6f\x75\x7c\x5c\x67\xdf\x5e\xf1\xc0\x61\xcb\x2e\x7d\xe7\x7f\x45\x36\xd7\x4e\x54\x9f\x87\x08\xc4\xee\xa5\x2e\x97\x5b\x25\x6a\x2e\xfb\x3d\xc4\x25\x77\xe0\x4d\xb9\xde\xa1\x68\x63\x7a\xf4\x81\xd2\x79\x65\xb9\x03\x84\x8f\xed\xda\xf2\xf0\x4b\xcb\xbd\x57\x96\xaf\x12\x7e\xd1\x9a\x16\xa6\xf5\x88\x99\x5e\x8f\x0c\x6c\x66\xad\x43\x81\xa7\xda\xf7\x81\xf0\x7a\x93\xe4\x4a\xd7\x8f\x2e\xbb\xd2\xf5\x06\xe9\x95\xae\xdb\xf3\x2b\x25\x24\xe1\x09\x4a\x93\x7f\x0a\x28\xa0\xe5\xf2\xf0\x12\x53\xd6\x46\xdc\xd3\xe4\xd0\x6a\x62\xf7\x3d\x9c\xa1\x88\x67\xf4\xa6\x72\xa3\x2c\xca\xc8\x2c\x99\x1f\x61\x72\x99\xd0\x8c\xc8\x4c\x0c\xf5\xda\xf9\x85\x8b\x68\xef\xce\xe2\x49\x59\x34\x3d\x38\x7b\xff\x7e\x34\xf2\x69\x58\x79\x12\x10\xb4\xc0\x42\xb4\xa8\x3c\xd4\x6b\x51\x4a\x35\x0a\xd7\xa2\xd1\xd8\x3b\x5b\x2e\xf7\xff\x6a\x00\x51\x2e\x73\x5c\xbd\xc3\x24\x85\x10\x4b\x04\x41\xfd\x10\x8e\x32\xc2\x51\x42\x30\x3d\x8c\xf1\xf9\x6a\x7e\x88\x62\xb4\xe4\xd8\x89\xa8\x14\xb3\x2c\xbd\xc4\xf4\xc8\xfc\xc1\x8e\xa2\x14\x31\x96\x44\xad\xa3\xdc\x57\xa4\xa8\x86\x4a\xeb\xe4\x2d\x08\x35\x9c\x65\x76\x46\x96\xdb\xdb\xf2\xd7\xf1\x74\x0f\x07\x14\xcf\x13\xc6\x31\xf5\xdb\xc6\x1e\x2f\x50\x42\x3c\x0b\xe8\x10\x6b\xf1\xb2\xaf\x8b\x27\xe6\x2c\x6b\xcd\x79\xd0\x43\xcb\x65\x9a\x44\x48\x4c\x4c\xbd\x06\x79\xde\x2b\x3b\x36\x36\x8e\x66\x69\x8a\xe9\x61\x9a\xcc\x70\x74\x13\xa5\xc3\x7c\xde\x60\xbd\x8d\xe4\x5d\x7e\xdb\x71\x71\x00\x2a\x31\x5b\xd6\xe0\x0b\x28\xce\x96\x98\xf8\x6b\x8a\x19\xe6\x2f\x8a\x59\x8e\xeb\xe7\x4c\x4a\xd1\x9f\xd9\x4a\x48\xed\xca\x1f\x28\x2b\xd7\x97\x0e\x4b\xe8\x99\x2e\x65\x11\x30\x31\x3c\xc3\x7c\x34\xd2\x7f\xf8\xaa\xb4\xbd\xc6\x0a\x6b\xdb\xf9\x86\xe0\x6c\x78\x3f\xfa\x9c\x23\x3d\xbd\x1f\x22\xed\x1e\x0a\x85\x18\x71\xe4\x5a\xbe\x78\x7e\xc4\x30\x5f\x2d\x0f\x0b\x54\xaf\xbc\xbc\xef\xf3\x6e\x4f\xcf\xde\xeb\x62\x8d\x1b\xee\xb9\x5c\xdf\xa1\x75\x16\x0f\x55\xde\xa4\xb6\x1b\xc9\xbd\xfc\xa3\x72\x27\x79\x00\xc1\x49\x66\xfe\xc1\x89\xb4\xa4\x1a\x16\xa0\x3e\x7b\x56\x4e\xe9\x4f\x72\x46\x5a\x2d\x15\x1d\xa4\x22\x25\xd6\x15\x7b\x07\xe6\x58\x5c\x25\x24\xce\xae\x00\x09\xd5\x1f\x7b\x38\x65\x78\xbf\xa5\xad\x5a\x22\x20\xa1\xfa\x43\xb6\x5d\x57\xdb\x16\xc7\x8d\xe1\x74\xa6\x4d\x20\x7b\x24\x14\xbf\xf2\x22\x82\xa2\x6f\xca\x7b\x34\x6c\xd4\xf0\x63\xa7\x4c\xab\xe4\xa6\x4a\xa9\x64\x20\xb3\x1b\xbf\x1c\x6e\x21\xd1\x42\xdd\x6c\x03\x90\x4c\xe8\xf4\xf6\xd6\x17\xff\x84\x18\x96\xd4\xe5\x2a\x49\xd3\x97\x98\x71\x9a\xdd\x8c\x2b\x26\x8a\x3e\xa2\x12\xe3\x14\x73\xbc\x2f\x06\xcc\x73\xb0\x5d\x01\x41\x8b\x18\xb6\x06\x7d\x19\x94\x6d\xc7\x31\x0b\x83\x49\xde\x6b\x9c\xae\x60\xee\x2c\x45\xec\xe2\x70\x81\x19\x43\x73\xcc\x36\x40\x57\x5b\x72\x92\x83\xe8\x5b\xf6\x95\x01\x0f\x55\xb6\xd0\x7a\x9e\x21\x41\xb4\xef\x06\x2c\xd4\x1d\x21\x17\xe3\x25\xc5\x11\xe2\x42\x28\xf2\x26\xb5\x89\x4e\xf7\x7f\x5c\x49\x8b\x92\x16\x90\xd8\xbe\x60\x07\xd5\x36\xfb\x02\x2b\xf6\x49\xb6\x9f\x66\x64\x8e\xe9\xbe\x62\xcc\xf2\xc2\xa1\xb6\xfd\xec\xa3\x15\xcf\x16\x88\x27\x11\x4a\xd3\x9b\x60\xff\x35\x61\x1c\xa3\x18\xee\xdf\x64\xab\x7d\x76\x91\xad\xd2\x78\x1f\x5f\x8b\xbd\x4a\x78\x7a\x63\x06\x48\xf8\x7e\x42\x78\x26\x1a\xd1\x7d\xc9\xe5\xe0\x7e\xc9\xd9\xf6\x33\xba\xff\x42\xe8\x40\x04\x13\xbe\x2f\x94\x81\xfd\xff\xeb\xb2\x3b\xfd\xdf\xc0\x72\x34\xa1\x01\xe4\x01\xa2\xb0\x3c\x17\xb7\xb7\xeb\x1c\x04\x72\x99\x6f\xd5\x36\xbd\x54\x2f\x18\x4c\x43\x1f\xdd\xde\x4e\xa6\x40\x7f\x30\xc9\xc8\x8f\x52\xfa\x4d\x30\x83\x59\xe8\x5b\x92\x28\xf0\x11\x80\x49\x78\xe0\xa7\xa3\x51\x6a\x2a\x36\xef\x51\x9f\xc1\x04\xae\x93\x78\x5c\x47\x8f\x72\x4f\x0e\x8b\xb1\xb5\x68\x2d\xb3\x41\xaf\x08\x4f\xd2\xb1\xf7\x2c\x38\x0e\x8e\xbd\x1c\xc0\xcc\x31\x85\x60\x96\xd1\x57\x28\xba\x28\x7d\x37\x1c\xac\x0b\xa9\x89\x43\xcf\x5e\x94\xc0\x60\x0d\xaf\x71\x0d\xcb\x41\xae\xfc\x3b\xa9\x39\x5b\xf5\x53\x60\x1d\x28\x64\x1f\xa8\x74\xc0\x81\x6a\xa4\xfa\x2c\x1b\x8a\x77\xec\xe8\xcb\xa5\xe3\x21\x8a\x52\xc7\x53\xe9\xd2\x73\x3c\xd7\x19\xd7\x9a\x2f\x64\x82\xb7\xe6\xe3\x84\x70\x4c\x94\xdb\xbd\xf1\x4e\x55\x2d\x6e\x9c\x50\x48\x21\x83\x08\xa6\x30\xb3\x58\x51\x62\xcc\x9a\x49\x28\xc5\x26\x21\xbc\x7f\x90\x82\x2e\x95\x14\xc9\x2f\x21\x2e\xc0\x00\xe0\x2a\x5c\x7f\xb9\x2c\xd9\x2a\x44\x51\x3a\x2e\x50\x08\xca\xe5\x8d\x69\xf1\x5b\x2d\x6b\xcc\x8a\x07\x62\x39\x63\x54\xfc\x2c\x96\x31\x4e\x8b\x67\x6a\xfa\xe3\xac\xe4\xdc\x49\x41\xda\xc5\x24\x1a\x16\x59\xdb\x31\x29\x89\xbc\x04\x03\xc4\xd2\x37\x79\xc0\x47\x23\xdf\xb4\x60\xb5\x16\x70\x35\xc1\x53\xf9\x04\x00\xa8\x72\xe9\x85\x61\x88\x6f\x6f\x4d\x06\x3c\xf1\x0b\x34\x2f\x00\x4b\xc6\x81\xc1\x1e\x0f\xa2\x14\x23\x77\xae\xd9\x20\xa2\x18\x71\x2c\x1d\x90\x50\xc6\xa7\x2e\x12\xee\x6e\x29\xb4\xfa\x84\x29\x5f\xa5\x31\xb2\x4b\xa1\xec\x6e\x24\x35\x71\x93\xd4\x55\x45\x18\x4e\xec\xd3\xb0\xea\x3f\x0d\xc9\xe5\xcd\x61\x94\xc5\x78\x91\x50\x5a\x35\x5a\x74\xa5\xc6\x6c\xc1\xad\xc8\x90\xc6\x71\x6d\x58\x50\xec\x38\xe2\x9c\x26\xe7\x2b\x8e\x7f\x48\x48\x9c\x90\x39\x1b\x4f\xa4\xb6\xe4\x4d\xef\x0c\x9f\xd6\x5b\xce\x77\x51\x16\xf4\xe1\x6b\xa1\x17\x98\x54\x49\x85\x2e\x79\x2e\xe9\x5c\xd3\xe0\x00\xe9\xae\xc4\x64\x16\x5a\x82\x50\x2e\xce\x85\x43\x2d\x9b\x78\x8b\x2c\xc6\xe9\x8f\x62\x5b\x3d\x4e\x11\x61\x89\xe8\xf1\x29\xf3\x64\x5a\xa3\x14\x45\xf8\xbf\xe5\x25\x08\x6f\x89\x28\x5a\x30\xd1\x70\x1a\xa8\x2c\x5c\x7e\x55\xd4\x35\xae\xb1\x09\x9f\x56\xe2\x08\x8c\xdb\xab\x99\x26\x15\x92\x90\xe0\x2b\x95\xdc\xd4\xe7\x7f\x3c\x39\xe5\x87\x27\xe3\x63\x00\x69\x78\xf2\x3d\xfd\x03\xff\x9e\xfe\xe6\x37\x80\x4c\xe8\xe1\xc9\xd4\xe2\x8a\x74\xaa\x57\x57\x56\x64\x6f\xaf\xf3\x6e\x82\x5c\xf5\x0e\x89\xa3\x7d\xca\x6e\x6f\xad\xdf\xd5\x51\x4e\x7b\x05\xc6\xf1\x5a\xd3\x2a\xef\x7f\xbc\x7c\xcc\x84\xe6\x59\x2d\x24\xef\x81\xb6\x41\x26\x8d\xda\xf2\x18\x4c\xcb\xab\xfc\x60\xdc\xfb\xf1\x1c\xe2\x1c\xae\x73\x00\xa0\x34\xf4\x60\x72\x09\x7c\xef\xc5\x4f\xef\x3e\xfe\xfc\xe6\xf3\xbb\x8f\xef\xcf\x5e\xbc\xfa\xf8\xf9\xd5\xbb\xb3\x1f\xde\xbc\x7a\xe9\x69\x12\x86\xc2\xa3\xbf\x07\x47\xf3\x3d\x16\x3a\x82\x47\x64\x22\x0d\xff\x18\xd2\x52\x1e\x20\x0a\x18\x0c\x80\x60\x96\xa4\xdc\x9d\x54\xbb\xb9\xe6\xbc\x35\x08\x18\x17\x37\x18\xbd\xe0\xb3\x96\x24\x83\x25\x92\x38\xe5\x95\xd7\x1b\x11\xf4\x8e\xe4\x30\x2e\xe9\x40\x07\x84\xb8\x09\x8a\x9c\xef\xb8\x80\x29\x07\x2a\x11\x03\x0f\xcb\xd0\x66\x0e\xbd\xa3\x84\xc4\xf8\xda\x03\x70\x83\x71\x00\x24\x05\x4d\x32\x89\x55\x05\x96\x8c\x79\xb9\xa6\x23\x9a\x65\xfc\x50\xd1\x7d\x0f\x7a\x47\xfa\x2f\x60\xb5\x28\x5f\xe2\x38\xe1\x95\x57\xb3\x2c\x8d\x25\x2d\x30\xd3\x93\x87\xb9\xb4\x3a\xa9\x39\x29\xb4\x39\xb2\xa6\x06\x89\xc9\x1f\xd1\x4a\x65\x0b\x43\x4b\x05\x32\x54\x99\x4a\x6c\xab\x96\x6e\xe6\xf8\x08\x15\xbc\xc9\xc8\x58\x16\x7d\x64\x1b\x4a\x53\xcb\xec\x0a\xd3\x43\x86\x53\x1c\x0d\xbc\x27\x39\x80\x7b\x54\x06\x2d\x79\xc7\x6a\x19\x23\x8e\x3f\x72\x54\x73\xe3\x4a\xb1\x40\x9c\xaf\x84\x69\x3d\x11\xc7\xc0\x76\xe0\xaa\x73\x27\xf8\xf1\xc3\x64\x32\x2a\x59\xd2\x8a\xa6\x31\x16\x4c\xf3\x50\xd1\xe3\x36\xa6\x53\x30\x99\x46\xfe\xb4\x6c\xc5\x13\x32\x3f\xba\x4a\xd2\x38\x42\xb4\x9e\x85\xea\xee\x4a\x1d\x6b\x53\xea\xaa\x7a\x07\x37\x74\xa6\xd4\x81\x98\xe0\x53\x2e\xd3\x61\xc1\x7a\x9a\xd6\xdb\x5e\x92\x69\x9c\xf4\xd4\xaf\x52\x7a\x70\x6a\xd3\x40\x0c\x1a\x3c\x4d\x82\xa2\x1e\x7e\x86\x27\x64\x7a\xca\x27\x64\x1a\xaa\x5d\xf8\xf9\xc3\xeb\x42\xd5\xf3\xc5\x4b\x30\x96\x6f\xc5\x9f\x90\x4b\x5a\x3d\xc6\xc6\x22\x89\xda\x0f\xd1\x00\xcb\x3c\xc3\x88\x46\x17\x6d\xfb\xad\xde\x1e\x29\x92\xdd\xa6\x2a\xd4\x1a\x35\xf5\x92\x5a\x03\x87\x82\x52\x6b\xd1\xd0\x54\x6a\xef\x6b\x5a\x52\xed\x6d\x5d\x5d\xaa\xbd\x26\x59\xdc\x39\xb8\x78\x6f\x12\xfd\x74\xb5\x33\xb9\x80\xfa\xc6\x1b\x30\x94\x91\xf4\x1a\xc7\xaa\xd2\x0e\x9d\x37\x22\x7e\x6d\x55\x0c\x26\x70\x05\x23\x18\xc3\xd9\x5d\xcf\xda\xd2\x7d\xd6\x16\xe2\xac\xcd\xca\xb3\x66\x9d\xb1\xa5\x51\xa0\x66\x7d\xba\x9f\xc6\x37\x00\x97\x02\x6d\x8d\xca\x56\x75\x30\x2d\x80\xd6\xfe\xaa\x67\x7b\x01\xa4\x8a\xe8\x1f\xc3\xb4\xf2\x50\x6b\x86\x55\x81\x63\x01\x94\x82\xe8\x1f\x43\x56\x79\xfa\xe5\x52\x3c\x43\x95\x67\x17\x18\xa5\xfc\xe2\xe6\x5d\x16\xcb\x0e\x59\xe5\xe5\x8a\x74\xbe\xd6\x0b\x7b\xad\x83\x8e\x44\x83\x55\xa5\x81\xc0\x0f\xb3\x7a\xff\x18\x26\xae\xde\xe2\x45\x54\xed\xa5\xc4\x41\xff\x18\xc6\xf6\xf3\x7c\x6f\x56\xd0\x2f\x05\x4a\x69\x98\x77\x08\x48\xcb\x09\x9e\xe6\xda\x96\x71\x51\x21\x11\x4b\x9b\x44\x5c\x38\x2f\xbc\x98\x10\xaa\xc3\x4d\xed\xf6\x65\xfb\x43\xc6\x33\x8a\x4d\x82\xf8\xc7\x60\xb3\x6f\x5f\xf2\x05\xc5\xb3\x5a\xd8\x9f\x59\xb5\x7e\x75\x64\x9a\x7c\x95\x75\x16\xf3\x71\x79\x20\x95\x54\xe2\xb2\xb3\xff\x88\x18\xff\x21\xcb\x0a\xc9\xb7\xe8\x62\xfc\xd1\xa1\x77\x26\x94\x17\x12\x70\x44\xe7\x98\x07\x1c\xcd\xa5\xfa\x62\x1e\xd4\x3f\x82\x83\x28\xcd\x18\x66\xbc\x08\x60\x34\x0f\x7c\x0f\x79\x60\x4f\xe8\x68\x38\xc4\xc1\x12\x51\x4c\xf8\xab\x54\x96\x25\xf8\x1e\x8f\x46\xde\x99\x27\xd8\x9e\xf9\xc0\xf7\xa0\xd1\x6a\xaf\x0c\x89\x34\x5f\x97\x62\x66\xad\xf0\x8e\xd4\x6c\x83\x05\xba\x39\xc7\x7f\x46\x24\x4e\xb1\x0f\xf2\xbd\x38\x8b\x24\x9b\x0e\xce\xb3\xf8\x26\x40\x71\xfc\xea\x12\x13\xfe\x46\x08\xa7\x44\x8a\xa7\x69\x12\x7d\xf1\x20\x01\xfd\x96\x7e\x3d\x8b\xea\x88\x14\x2f\xb2\x4b\xdc\x3a\x68\xbf\xbe\x25\xe4\xdf\xad\x31\x52\x7c\xd6\x91\x77\xae\x6e\x1b\xe8\x4a\x63\x0b\xd6\x4d\x45\xef\xe7\xd7\x9f\x5f\xbe\xfe\x28\x94\xbc\xcf\x1f\x5e\x9d\xbd\xf9\xf4\xfa\xed\x2b\x0f\xdc\xde\x4e\xbc\x82\xbf\x65\x34\x4e\x88\x52\x39\x18\x66\x2a\x48\xc0\x2b\xb9\xdb\x92\x66\xd7\x82\xab\xc7\x09\x8b\xb2\x4b\x4c\x6f\x0e\xa3\x0b\xe5\x92\x2e\xc5\x86\x42\x2f\x1d\xa0\x68\x9e\x1a\xc5\xf6\x08\x13\x41\xe4\x62\x6f\x3a\x9e\x4c\xdb\x14\xc2\xb5\xa1\xa4\x1e\xc5\xcb\x8c\x25\x3c\xa3\x37\xa5\xd6\x81\x85\x96\x64\x03\x0e\x40\x15\xc2\x59\x69\x2e\x8e\x49\x0d\xbe\x7a\x54\x36\x5e\x0b\x9d\x46\x28\x08\xee\xf1\xc5\x86\x16\x77\x59\x27\x42\x77\x85\x5e\x21\xe7\x48\x71\x66\xba\xf5\xc4\x0b\xe5\xa4\x63\xd6\x65\x9b\xcd\xa6\x5c\xce\x79\xad\x15\xd5\x38\x92\x12\x0d\xd3\xaa\xa3\x35\x9c\x18\xa5\x32\x96\x94\x94\x2a\xf0\xca\x73\xd8\x18\x87\x5d\x64\x57\x1b\x0e\x03\x4b\x64\xfb\x50\x6f\x5d\xbe\x6a\x6c\x95\xc4\xc9\x46\x07\xfd\xbc\x6b\xa2\x66\x72\x03\xd6\x5c\x64\x80\x1c\x30\x5a\xef\xca\x9d\x83\x41\x79\x6c\x1a\xcb\xa8\x1d\xab\x81\xcb\xd1\x91\xd0\x9b\x4f\x42\x9e\xe6\xc6\x24\xe4\xd3\xae\x4f\x17\x47\x7d\x08\x2c\x8b\xc6\xcd\x11\x8b\x43\xa1\x5c\x26\xd6\x20\x42\xa8\xb3\x07\x11\x0f\x6c\xf4\xd7\xd2\x60\x65\xd6\xaa\x00\x50\xd9\x28\xcf\xa7\x60\x23\x4a\x64\x23\xb5\xa4\x49\x83\x8e\x47\x85\x7a\xd5\xd7\xa8\x88\x59\xc3\x2c\x25\x58\x71\x79\x2b\x49\x1d\xf7\xaa\x71\xa5\x00\x4d\x99\xd4\x54\x3f\x52\xfc\xac\x43\xf8\xb6\xba\xa8\x91\x01\x28\x42\xd9\x73\x50\x44\x83\xa8\x44\xb8\x66\x54\xe6\x98\x25\x55\x02\x03\x0b\xcb\x56\xd2\x82\x5a\xce\x5c\x02\xec\xd4\x2f\xc3\x96\x6a\x76\x30\xdd\x02\x40\x0a\x9b\xd3\x63\xc3\x4c\x91\xa3\x91\x1e\xa5\x66\x37\x3c\x12\xaf\xea\x5f\xae\x1b\xa2\xfa\x26\x00\xc6\xe5\x08\x5d\x20\x6f\xe9\x9e\x83\x3b\xdb\x7b\xda\x9d\xfe\x9b\xfa\xf4\x5d\x72\xc4\x05\x46\xf1\xe1\x39\xcd\xae\x18\xee\xf0\xbd\xdc\x5d\x7c\x2d\x1f\x68\x11\xb6\xfa\x61\x77\x0c\x9d\x60\x4d\x83\x57\xd2\xef\x27\xd9\x54\x16\x72\x60\x9a\x61\xea\x0c\x73\x9e\x90\xb9\xf8\x46\x1c\x05\x25\xb9\x0b\xa4\x11\xb6\xfe\x50\xdb\x68\xa7\xdd\xce\xe9\xa6\x8d\x18\x6a\xd1\x87\x09\x0a\x6c\xf9\xaa\x5b\xa9\x8b\x67\x47\x08\xda\x08\x1f\xdc\x6d\xd4\xbc\x39\xae\x15\x64\xe2\x6d\x37\xcf\x34\xcb\xbe\xac\x96\xe5\xb1\x8a\xb3\x85\x07\x02\x9a\x65\xdc\x07\x2a\x56\x47\x88\xd5\x42\x70\xf7\xbd\x0b\xc4\x0e\xf5\x37\x3c\x27\x55\x38\x7b\xf1\xa6\xb2\x51\x9b\x0f\x8f\xa2\x94\x79\x0f\xfb\xb0\x2a\x7b\x74\x23\x3e\xb9\x1b\xcb\x77\xac\x7a\x5a\x73\x68\x57\x3b\x0f\x3a\x15\x8b\xb3\x77\x2f\xfe\xfc\xd3\x87\xcf\x1f\x5f\xbd\x79\xf5\xe2\xd3\xeb\x9f\xde\x79\xa0\x74\xc2\x38\x77\x0d\xd2\xb0\x29\x31\x2b\x25\xb5\x50\x1e\x4f\xf1\x98\xd8\x6a\x27\xc4\x20\x87\xcc\x71\xe7\x98\xfa\xb8\xd0\x24\x93\x99\x38\x81\xc9\xcc\x2f\x6d\xb0\xc1\xf9\x8a\xf3\x8c\x8c\x46\xcf\xc2\xf2\x57\x71\x51\x4b\x56\x2a\x64\x98\x07\x42\xf7\xb6\xef\x0f\xfb\x64\x34\xe2\x01\xc3\xfc\xcc\xb8\x97\x7d\x4f\xb4\x11\xaa\xa0\xb2\xbe\xb0\x90\x07\xf3\xe6\x7b\xb0\xc7\x46\x23\xbf\x3a\x70\xc8\x20\xd7\xea\x65\xa3\x39\xc8\x73\x88\x06\x2d\xcb\x39\xe5\x83\x9a\x91\x9b\x87\xcd\xd4\x3c\xc7\xce\xfa\x92\xc7\x76\x7d\xc9\xe3\xe9\x58\x87\x01\x8a\x35\x7d\x34\x38\xe1\x03\x48\xc2\x83\x13\x79\x21\x91\x84\x5e\xc2\x5e\x64\x69\x8a\x96\x0c\xc7\x5e\x42\xf6\xf9\x68\x74\xc0\x03\xeb\xa1\x00\x19\xcf\x54\x74\x9e\x0f\x8a\xf2\x96\xfa\xa2\x21\x06\x6b\xeb\x82\xa0\x60\xf3\xed\x20\xce\xfb\xd5\xfd\x45\xb6\x62\x38\xce\xae\x88\x07\x19\x80\x83\x5a\xaf\x96\x1e\x44\x3b\x35\x0f\x74\x4d\xa2\xbd\x83\x9e\xc7\xae\x2c\x0a\x8b\xe4\x3a\x21\xd2\x40\x2e\xef\xcc\xe8\x94\x19\xad\xde\x1e\xdd\x5c\x36\x3d\x4f\xb3\xe8\x4b\x42\xe6\x45\x9f\x6e\x9e\x3a\xf0\xde\xab\xe5\xc5\x3f\xae\xb8\xed\xb1\x89\x1a\xfb\x9e\xff\xc1\xfc\xfd\x3d\x97\x8e\x7b\x3e\x0d\xf1\x84\x17\xd7\x24\x49\x5e\xbf\x34\x2b\x3f\x55\xbb\x07\xbb\x9f\x98\xbc\x51\xb2\xb1\x37\x51\xf5\xe2\xf7\xcf\x0c\x08\xa7\x82\xa6\x68\x8a\x59\xa6\xb8\x32\x38\xaa\xb2\x5c\x95\x17\x75\xd5\x42\x66\x34\x5b\x08\x3d\xba\xfa\xfd\xe1\x37\x58\xd9\x92\x62\x14\x7f\xbd\x4a\x37\x6f\xc5\x7e\x9a\x60\xa2\x32\xee\x6a\x6d\x64\x9a\x96\x7b\xac\x85\xc8\x03\xa0\xde\xfc\xf1\x7a\xc5\x9a\xd7\x59\xb9\x74\x9b\x55\xae\xaf\xce\x30\x8e\xcf\x51\xf4\x25\xc0\xd7\x38\x12\xe7\xd6\x15\x3a\x6e\xc6\x2f\x82\x97\xd6\xca\xfa\xbf\x7e\x67\xae\x32\x8c\xcb\x70\xf4\x32\x3d\xc6\x98\xac\xd2\x14\x7e\xc4\x11\xc5\xfc\xf5\xcb\x71\x25\x2f\xc4\xeb\x97\x9e\x38\x13\x01\xbf\xc0\xc4\xf9\x4d\x3b\x26\x45\xa8\x0c\x85\x1a\x23\xe3\xff\xa0\xb7\x62\x62\x07\x60\x9a\xcd\xb3\x15\x77\xfb\x07\x37\x5d\x28\x2e\x17\xaa\xa2\x83\x7d\x4f\xb9\xca\x5a\xa7\x89\x9b\xd3\x14\xb2\x4a\x20\xbb\x99\x99\xaa\x29\x8a\xc9\x46\x69\x46\xda\x76\x05\xd2\x92\xa0\x6f\xbe\x43\x42\x9c\x0b\xe4\xf0\x3e\xee\x00\x2a\x9a\x71\x4c\x5f\xca\xb5\x19\x32\x05\x85\xae\xa8\x26\x2a\xfb\x7b\xd2\xea\xd4\x2b\x05\x69\xca\x23\x51\x55\x10\x1d\x29\x79\xde\xa7\x96\x62\x07\xff\x55\x8e\xc9\xfa\x1c\xcf\x32\x8a\xdf\x66\x31\x4e\x37\x0b\x01\x57\x8e\x61\x01\xb9\x44\x1d\x7d\x31\x1c\xc8\x61\x8c\xc5\x29\xba\xac\x44\x12\x0c\x18\x6f\x4f\x61\x5e\x2d\x3e\xb1\x8c\xb4\x80\x5e\xc2\xf1\x42\xf2\x7c\x0f\xec\x55\x4e\x43\xc2\xde\xe1\x2b\x25\x1b\xc7\x8a\x87\x7d\xc0\x51\x46\x63\xbf\x76\x97\x9c\x77\xed\x45\x69\xac\xb9\x33\xeb\x68\xfa\x39\x2f\x38\x5f\x1e\x31\x8e\x78\xa3\xec\xec\x96\x91\x03\x5b\x50\x41\x2c\xe8\xf4\x0b\xf9\x78\x5c\x65\x6d\x42\xaa\x12\x12\x88\x6c\xc1\xca\xbf\x26\xc7\x53\xe3\x38\xb1\x1e\x09\x21\x6c\x89\x28\xc3\xaf\x09\xf7\x69\xa0\x56\x05\xa4\x5b\xe5\xf5\xbb\x4f\xaf\x3e\xbc\x3b\x7b\xf3\xf9\xe3\xab\x0f\x7f\x7d\xf5\xe1\xf3\xab\x0f\x1f\x7e\xfa\x30\x1a\xc9\x7c\xd0\x41\x8c\x39\x4a\xd2\x40\xda\x95\x7e\x9a\xf9\x5e\xbc\x52\x7a\x96\xe0\x09\x1a\xf4\xfb\xb3\x6c\x45\xe2\xb1\x67\xf8\x90\x87\xaf\x13\xc6\x99\x97\x17\xce\x92\xe1\x67\xeb\xcb\xe5\xee\x65\x80\xdd\xe6\x5a\x68\xdb\x28\x49\x66\x7e\x96\x01\x39\x63\x57\xaa\x0c\xeb\x88\x40\xef\x2f\xb8\x4c\x0f\xe4\x1d\x49\xef\x96\x0a\xa4\x6b\x90\xd6\x2f\x97\x81\x8e\x96\x1a\xb7\x36\x30\x81\x55\x04\xe4\xd0\xa2\x76\x63\x57\xc8\x62\xb5\x4b\x4b\x4c\x20\xc5\x33\x8a\xd9\x85\x3f\x28\x4a\xaf\xe0\xbe\x25\x41\xf9\xa8\x8c\xdb\x2d\x54\xdf\x26\x0f\x44\x3d\xb1\xac\xe4\x9b\xf2\x01\xa2\x05\x55\x17\x0f\x68\x10\x27\x45\x8e\x0a\x4a\xc4\x14\x25\xfa\x68\xfc\x46\x82\x77\x17\xb7\x64\x70\xa0\x9f\x43\x2b\xb6\xda\x72\x32\xc9\xc6\x92\x87\xa8\x0e\xe6\x45\x9d\x97\x74\x0a\xbd\xda\x0e\xf1\x48\x71\x7e\xf8\x3a\xb5\xb1\x1b\xb1\xc3\x05\x22\x37\xdd\x55\x2f\x17\x09\x49\x16\xc9\x3f\x15\x77\xeb\x2d\x7c\xa9\xe6\x59\x8d\x6f\x12\xc4\x4e\x3f\x99\x63\xfe\xd3\x15\x31\x10\x50\xf2\x37\x33\xf4\xb1\xab\x8d\x18\x86\xcb\x8b\xcb\xb4\x11\x1c\xca\xeb\x59\x5f\xab\x23\xbc\xc4\x2c\xa2\xc9\x92\x67\x54\x4e\x31\x28\xef\x2a\xe6\x32\xcc\x72\xb9\x62\x17\xfa\x34\x11\x48\x41\xa9\x55\x16\x6b\xa3\x86\xc9\x98\xc3\x20\x34\x05\x7c\xda\xb6\xab\xdc\x6c\x25\x81\xd5\x7b\x91\xea\x16\xd4\xaa\xf8\x7d\x45\x13\xae\xff\xce\xc1\x58\x46\x2f\x13\x88\x77\x24\xd0\x33\x87\x55\xc4\xc7\xea\x72\x4e\xdd\xcb\xa8\xa8\x41\x11\x68\x3a\xf6\x1a\x25\xfb\xa1\x0c\x3e\x15\x87\x50\xbe\x10\xbf\xf2\x46\x86\x34\x1c\xbc\x44\x1c\x45\x98\x70\x4c\x95\xdd\xc2\xfa\x5d\x7d\x0b\x20\x17\x87\x15\x6d\x30\x49\x87\xba\x58\x6a\x86\x27\xdf\xf3\x3f\xd4\x4d\x15\x52\x17\x34\x3e\x08\x99\x33\xae\x34\x51\x70\xdb\x5e\xc1\xa7\xe3\x75\xbe\xc7\xff\xf7\xb3\x53\xe2\x33\x78\x70\xec\x8e\x04\x56\x58\x20\x5a\x83\x1c\x8c\x7b\x50\x8d\x39\xb1\x23\xc1\xcc\xc7\xb0\xaf\xab\xcf\x00\x18\x13\xdf\xe5\x53\xe9\xa0\x25\xbc\x6f\x5c\x9f\x41\x0e\xac\x2b\x1f\x38\xf7\xad\x1d\xf7\x72\x28\xef\x83\xc0\xd4\x29\xe1\x52\xcc\x96\x19\x89\x7f\xcc\xe8\x7f\xad\x30\xd5\xb2\xa1\x93\xa5\x55\x42\x5a\x1d\x67\x14\xd7\xf2\x60\x17\x8c\xe3\xbd\x20\x4a\x09\x66\x21\xf2\xcb\x1f\x85\x0b\x8e\xf9\xc4\x20\xdf\x6b\x85\x94\xe2\x2d\x80\x32\xbe\x43\x4e\x9c\x83\x1c\xd6\xa6\xb9\xcb\x09\xca\x0f\xb5\x47\x9a\x5b\xb3\xc7\xae\xd9\x63\xe7\xec\x05\x09\x32\x73\x67\x98\x36\xec\xa5\x45\x16\x88\x0d\xa2\x4d\x9b\x1f\x0a\x69\x31\xa3\xf6\xc8\xfa\xe6\x99\x0f\xc3\x6a\x22\x45\x83\x2c\xce\x90\x7b\x4d\x42\x2c\xfa\x50\xd5\xb6\xc5\x13\x0f\x14\x34\xa3\xf2\xce\xa2\x0b\xd2\x8d\x52\xa5\x1b\xed\x4d\x25\x11\x81\xe5\xe2\xc2\x6a\x88\xa0\x73\x9f\xda\xd7\xdf\xb9\xde\xdc\x2f\x3f\x03\x00\xa4\x55\xa1\xc2\x1d\x88\x5e\x65\xb6\xdf\xbc\x50\x21\x9d\xec\x3b\x10\x29\xee\x71\x5d\x5f\x83\x8c\x7d\xc8\x52\x6c\xd5\xf0\xd1\x0f\x4c\xfa\x3b\xf3\xfb\x74\x32\x1d\xeb\x3f\x1f\x0c\x09\xab\xcd\x1c\xd7\x66\x8e\xcb\x99\xeb\x3f\xef\x87\x7c\xa9\x69\xd4\xd2\xc9\xa8\xa7\x8d\x83\xd7\x8f\x90\xdf\xfc\xb1\x63\x69\xc6\x6b\x2b\x93\x6b\x38\x94\x2f\xaa\xad\x1e\x4d\x2a\x10\x3d\x6b\x95\x91\xf8\xc9\x0d\xf1\xe4\x86\xb8\x17\x37\xc4\x0e\x0c\xde\xb3\x84\xc4\x3f\xdc\x7c\x4c\x57\x73\xbf\x22\x3b\xd8\x19\xba\xa1\xcc\x24\x22\x6f\xba\xaa\x1b\x8b\x41\x1c\x05\x42\x1e\xaa\xbc\xd0\x11\x2a\x20\xd0\x31\x19\x6c\x75\xce\x38\xf5\x4f\x40\xdd\x90\x82\x87\xb8\x45\x2c\x17\x48\xfb\xbc\xdc\x7e\x11\xf3\xd4\x03\xb0\x74\xae\x34\x64\x39\x3d\xdb\x4e\x07\x4a\x97\xad\xbf\xc3\x81\xb2\xc3\x3d\xda\xd4\x9b\xd2\xe7\x9f\xe8\x75\xa4\x40\xc5\xea\x20\xdb\x7e\xd6\xb4\xd3\x95\x62\xed\x7e\x88\x21\x75\xcc\x97\x42\xa2\x82\xcb\x5a\x17\xb9\xad\xab\xa5\xc5\x52\x3f\xec\x56\xe5\x13\x99\x7d\x40\x64\xd6\x2d\x1d\x7f\x36\xd8\xd9\x42\x5d\xcd\x6b\x0f\xc8\xe8\x9e\x6d\x5c\x53\xaa\x9d\x19\x08\x6a\x77\x70\x35\x5d\x06\x2c\x3f\x04\xd7\xfa\x9c\x94\xdf\x92\xb7\xd9\x2c\xa9\xd5\x1c\x24\x75\xcb\x8d\x5b\xe6\x6c\x19\xf1\xa0\x4c\xf0\x0d\x97\x4d\x55\x92\xb6\xbc\x05\xad\x76\x75\x97\x43\xa1\x72\x15\xd4\xca\x07\x20\xab\x71\x7a\x65\x12\x80\x7d\x1c\x2c\xb3\xa5\xaf\xfd\x7d\x15\xa7\x01\xd6\xd5\xa8\x02\x0f\xb4\xf9\x0b\xfa\xbf\xc2\xae\x12\x19\x13\xa3\xbe\x02\xd6\x32\x47\xad\x72\x54\x8c\xed\x75\x16\x9e\x84\x3d\x8d\x13\x95\xb7\xed\xf3\xca\xa1\xdb\xf1\x55\x6e\x83\x6e\xd1\xf0\xb8\x34\x5a\x34\x9c\x21\x76\x8b\x82\x67\x47\x02\xe1\x53\x97\xe4\x38\x70\xbb\xa2\xe6\x54\x75\xc4\xd3\x1d\x79\x0a\x51\xd4\xb9\xcc\xa1\xd2\x46\x65\x49\x60\x61\x5e\x61\x5f\xe6\xa5\xab\x5b\x5f\xcd\x77\xea\x77\x24\xb0\x00\x2e\xdf\x88\x3e\xab\x26\x74\x7f\x9d\x45\x55\x60\x6f\x2f\x4a\xcd\xb0\x7b\x51\xaa\x73\xb1\xa8\xb8\x89\x10\x3b\x5d\x54\xbb\x3f\xaa\xba\xa6\x0a\x0f\xb5\xd7\xa4\x26\xd8\xbd\x26\xd5\xd9\xac\x69\x03\x1d\x55\xb2\xd4\x21\xd7\xb5\x74\x7e\xf8\xf8\x48\x86\xbf\xc9\x6b\xbe\x4d\xc3\x4a\xd1\x68\xb9\xa2\xb2\x42\x7b\xcb\x07\x53\x1d\x41\xd6\x74\xa4\x6f\x99\x03\x46\x0d\x18\xb6\x38\x22\x1c\xbc\x86\x56\x44\xfa\xd2\x3c\xde\x26\x05\x92\x70\x5d\xd8\x0e\x6b\xb7\xe7\x5d\x17\x0f\x92\x99\x8f\x27\x74\x3a\x1a\xb9\x12\x77\x4e\xe8\xb4\x11\xd3\xa7\xfd\x04\x32\x36\x91\x85\x92\x8b\xa8\xca\x01\x19\x0d\x16\x98\xa3\x1f\x33\x5a\x40\x82\x02\x1d\x83\x88\xc0\x9a\x85\xeb\x3c\x77\x7c\x84\x05\xb2\xc9\xa9\x4f\x26\x65\x2e\x10\xef\xb3\x55\x4e\x11\x08\xa1\x85\x4e\x21\xd7\xc0\x13\x2d\x3f\x7b\xd6\x6b\xe8\x61\x95\xf3\x48\x8f\x15\x9c\x27\x24\x96\xb9\x41\xc6\x2a\x07\xe1\x84\x4e\x73\x99\x5e\xb1\xfc\x59\x09\x03\xf4\x89\x32\x27\xe1\x36\xd9\xba\xe0\x4e\xa3\x91\x0d\x53\x99\xa0\xaa\x09\x56\x0c\xd6\x7c\x82\xdd\x30\x15\x2f\x54\x7c\xed\x68\xe4\x97\x3f\x7c\x50\xf1\xd6\x62\xe5\xa5\x05\xf9\xb0\x68\x45\xeb\x0c\x31\x9d\xc5\xa0\x9e\xc8\xc1\x20\x3c\x74\x1a\xb4\xdc\x96\x2e\xf7\x7e\x48\xe7\x87\xf8\xa4\x46\x65\x77\x5a\x04\xfb\x10\x29\x4b\x72\x42\xe6\xc3\x2b\x7d\x7c\x93\xde\x51\xf2\x18\xbd\xa3\x4e\x3b\xc3\x5a\xe7\x5a\x18\xaf\x73\xa8\xfe\xc4\xb1\x16\x85\x0d\xa2\xf9\x32\x64\x81\x05\x93\xa9\x07\x3d\xdd\xdc\x62\x0d\xb6\xa8\x06\xeb\x89\xe2\xca\x0e\xa0\xe9\x06\x51\x0d\xe4\xe0\x5e\x33\xff\x11\x69\x7a\x30\x88\xe2\x35\x00\xb6\xd0\xcf\x4a\x18\x62\x7f\x24\x5a\x7d\x26\xbf\xac\x30\xbd\x79\xaf\x12\xbd\x74\x65\x46\xaa\x18\x06\xca\xf5\x55\xe8\x89\xbb\x7f\x49\x19\x08\xe4\xd0\x1e\x47\xba\x29\x61\x25\x28\xa4\x00\xb5\x32\x94\x17\x82\xa2\x7a\xde\xa0\x6f\x85\x16\xde\x24\x7c\x58\x25\x3b\xa7\xa1\xe7\x95\x72\xb3\x20\x63\x5a\x6c\xa6\x28\x4e\x32\x6f\x2c\xff\xd6\x89\x28\xd4\x0f\x8e\xaf\xb9\x37\xa6\x21\x56\xa5\x70\x8a\x93\xe0\xaf\x73\xc8\xc5\xd1\xb0\x62\xec\xed\xe5\xb7\xd0\xd2\x72\x79\x14\x62\xe8\x79\x07\x21\x9b\xe0\xe9\xa9\xf8\xcf\x58\x07\xb3\xc0\x86\x5e\xd4\x40\x38\xcb\x09\xae\x52\x97\x35\x9c\xe0\xb4\xdd\x09\x4e\x6d\x27\x38\x95\x4e\x70\xfa\xbf\x9f\x9d\xf2\x0e\x27\x38\xf9\xaa\x4e\x70\xfe\x55\x9c\xe0\xb9\xe2\x46\x1a\xb8\x70\x9d\x43\x06\x36\xb7\x8b\xa8\x04\x20\x6e\xae\xd0\x26\x87\x95\x8d\x7f\x1d\x2f\x83\x75\xc8\xc7\x6b\x15\x84\x38\x5e\x23\x36\xf6\x74\x98\x65\x0e\xf5\x6f\x35\x51\x6f\x63\xc9\xb6\x14\x34\x7f\x95\xb8\xdc\x38\x5b\xb4\x98\x32\xd4\xcd\xa1\xba\x15\x63\x23\x8a\xa9\x5a\x14\x2b\x54\xea\x79\x9c\x2d\x82\xe2\x91\xae\x47\xc8\xc3\x89\x67\xdd\x0d\xf1\xa6\x72\xf0\xc2\xae\x93\xcd\x34\x1b\x28\xd2\x39\x9d\xd6\x7a\xe8\x74\x17\xde\x74\xdc\xd6\xd1\x98\x3c\xdc\xc2\x99\x52\xfd\x65\xb2\x7a\xae\xca\x79\x79\xf2\xa7\x34\x4d\x77\x24\xbd\x9b\xf0\xe9\x5e\x35\xa7\x22\x58\x3b\xc6\x27\xa3\x11\xe9\x8e\x6f\x16\x1a\xd8\x9b\x12\x2a\xd2\x2e\xa3\xa0\xd4\xc8\xc5\x2f\x29\x99\x66\x8f\xbe\xf1\x1b\x16\x10\x05\x42\x70\x2f\xec\x9c\xb6\xc2\x5f\xfb\x48\x63\x57\xcd\x90\xb8\x39\xa4\xea\xaa\x47\xc5\xad\x32\x68\x67\xe4\xb3\xc4\x76\x8a\x59\xf2\xcf\x4e\x81\xf0\xd7\x44\x76\x39\xbb\xea\x0d\xda\x1d\x1c\x80\x0b\x99\x51\xc5\xba\x82\x67\xdd\x2d\x53\xdc\x50\xd6\xb2\x10\x9f\xf6\xd7\x2a\x7c\x79\xbc\xbe\x4a\x62\x7e\x31\x26\x41\x42\x08\xa6\xff\x2d\x7e\xc0\x0b\x9c\xcc\x2f\xb8\x79\xf6\x67\xf9\x4b\xde\x58\x82\x71\x12\xbf\x26\x0c\x53\x93\xf5\x65\x8b\x08\x7b\x71\x2a\x2f\x13\x7c\x25\xb6\xc4\x07\x8e\x0b\x5d\x6a\x82\x5e\x65\x49\xf0\xe0\xc4\x74\x4f\xe2\xb3\xe5\x12\x23\x2a\x43\xf3\xcd\x8f\xc6\x3c\x74\x3f\x7f\xad\x13\xe1\x38\x3e\x2d\x10\xbf\x79\xb0\x1b\x23\xd5\xe6\xeb\xbc\xfb\xd5\x3d\xe5\xe1\xaa\x55\x3f\x5a\x2b\x29\x68\x20\x4b\x6b\x33\x2d\x7c\x2d\x96\x76\xbe\x4a\xd2\xb8\xb5\xdc\x5e\x91\x59\xec\x2e\x88\xbf\x67\x05\x4f\xab\x01\x15\x0b\xbd\xbd\x5d\xe7\x7b\xd6\x53\xa1\xbc\xb0\x70\x9d\xc3\x3e\x61\xb8\x8c\x92\x98\x90\xe9\x1e\xb6\xbb\xcb\x8c\x7e\x81\x5e\x94\xf5\xc2\x27\xa5\xd9\xc5\xaf\xf7\x80\x5e\x74\x81\xc8\xdc\xb6\x59\x35\x4e\xa5\x12\x62\x2b\x91\xd7\x14\x7a\x2a\xf6\x5d\xc8\x89\x63\xa2\xbc\x74\x43\x18\x7e\x16\xe3\x54\xa7\xd4\x6b\x49\xf9\x25\x9b\x54\x1f\x21\xce\xeb\x55\x79\x4a\xfa\x5f\x28\x97\xec\xd1\x28\x97\x38\xf8\xf8\xe6\xe7\x3f\x7d\xfe\xcb\xab\xbf\x85\x38\x78\xff\xe1\xf5\xdb\xb3\x0f\x7f\x93\xbf\x8a\x1c\x07\xf6\x43\x6f\x95\xc4\xde\x9e\xd5\xc7\x7b\xfd\xd2\xd3\x46\x0e\xbb\x9e\x85\xcc\xbb\xe1\x33\x9f\x0a\x3c\x92\x9d\x60\xd5\x06\x62\x0a\x5b\x00\x00\x99\x4f\xe5\xad\xb6\x9e\x16\x32\x12\xaf\xa5\x0d\x5c\xeb\x47\x7f\x95\x4b\xf4\xbc\xdc\xf4\xfa\x74\xb3\x6c\xed\x65\xda\xa8\x1a\xcd\x3d\x8d\x94\x4d\xfb\xb5\xca\x8c\x52\x6b\x4a\x56\x02\x3f\x8a\xa6\x6f\xb3\x38\x99\xdd\x0c\x6a\x5a\xc6\x05\x76\x7c\x9f\x02\xd0\x9b\xf8\x52\x23\xb3\x9d\xc9\xea\x09\xa7\xb7\xc5\xe9\x77\x59\x8c\x77\x82\xd5\x72\xa0\x3e\xc4\x12\x5b\x56\x6f\x64\x5e\x7e\xc4\x73\x55\x75\xa4\x7b\x8c\x41\x68\xa4\x06\xbc\x21\xd1\xa7\xc4\x71\x92\x4a\xc4\xdc\x00\xdd\x62\x67\xb5\xea\x4e\x34\xab\x3c\xa1\x38\x95\xc9\x36\xd8\x45\xb2\x74\x1b\xf5\x95\x79\xbb\xc0\x41\xf4\x38\x71\xf0\xc7\x9f\x3e\xbc\x7a\xfd\xa7\x77\x9b\x62\xa4\xdd\xcd\xde\xe3\x2a\xb2\x0a\xba\xb8\xa7\x52\x4e\x37\x91\x15\xf9\x6c\x00\xb2\x22\x9f\x75\x13\x58\xd3\xe6\xa3\xb9\x4a\x0c\x65\x4a\xd2\x0b\xc4\xde\x22\x72\x03\x8a\xd4\x16\xe5\x60\x59\xec\x68\x25\xf3\xed\x09\x54\x04\x03\xc2\x90\x35\x8a\xd5\x53\xee\x3d\x91\xb5\x6d\xc9\x9a\x15\xe4\xbe\x13\xea\x66\x8f\xb7\x33\x02\xf5\x42\xed\xb2\x9b\x1c\x2e\x30\x47\x8e\x77\x1b\x50\x2c\x2b\xcd\xf3\x13\x22\x3d\x78\x99\xcf\x18\x40\xe5\x7e\xf5\x20\xa3\x74\x43\xbf\xfb\x38\xb0\xdd\x10\x9c\xc5\x8c\x0b\x51\x2a\xc9\xc8\xa6\xcd\x7b\x67\xf1\x9e\xe2\x08\xc7\x58\xe6\x2f\xec\x96\x10\xd5\x7c\xbb\xc4\xd8\xba\xf0\xab\x70\xbe\x14\x81\xcf\xa2\x2e\xf8\xd5\x7b\xc7\x98\xdc\x94\x7d\x75\x85\xac\xb3\x38\xee\x3d\xb8\xba\xe9\xfb\x8c\x36\xc5\x95\xba\x80\xec\x3e\xc6\x9b\x52\x0a\x29\x91\xc7\x67\xcd\xcf\xc9\x60\x0e\xd3\x4c\xc5\x6d\xf4\x36\xdb\xb9\x7c\xbf\x01\x51\xfa\x72\xb9\x85\x18\x55\x0f\xa2\x48\xd8\x8f\xea\x3a\xf6\xb7\x2b\x46\x6d\x41\xaa\xfe\x82\x6f\x76\x22\x1c\x89\x71\x7a\x9a\xbc\xc9\xa2\x2f\x7d\x48\x21\x1b\xfe\x98\xa2\x79\x53\xdf\xac\x35\x92\xc7\xb1\xef\x93\xc3\x90\x56\x36\x1d\x86\xb4\x5a\xc8\xd3\x97\xd3\xbb\x3f\x3e\xe8\xa4\x16\x92\xa5\x4e\x64\xd8\xdd\xb0\xc0\x61\x58\x77\x5f\x4b\xf8\x37\x82\xa0\xaa\x79\xf1\xeb\xbe\x60\x99\x1f\xe1\xf6\xd6\xf3\x40\xee\x92\x39\x1d\xb9\xe1\xf5\x79\x54\x69\xa1\xef\x7c\x22\xd9\x6a\xf1\xd3\xec\x67\x93\x62\xdf\x95\x1a\x04\xb1\x8f\xee\xc4\x20\x2a\x58\x54\xf2\xd8\xf2\xd4\xa6\xff\x32\xa7\xd6\x08\x18\x99\xe3\xd0\xa6\x3e\x1a\x70\x68\x53\x1f\xf5\x08\x18\xb2\x85\x60\x6c\x98\x75\x19\x7f\x64\xb3\x1e\x3d\x5e\xb6\x69\x61\x6a\xf2\x5d\x45\x6d\x72\xbc\x7f\x71\x81\xa3\x2f\xed\x6f\x07\x9d\x72\x35\x89\x41\xa7\x5c\x36\xfd\x84\xe6\x73\x1c\x6b\x00\xb4\x4f\x6d\xd0\x29\xd7\x8b\x74\xda\x2a\x8a\x55\xb4\xd8\x39\x54\xdf\x7e\xb3\x84\x6c\xd7\xa2\x00\xc8\x77\xe5\x69\x72\x84\x55\x55\x6b\x65\xd4\x29\x85\x86\x3f\x90\x77\xc9\xd5\x68\x09\xfb\xb3\x39\xb7\x75\x5a\x64\x76\xab\x19\x93\x79\x1c\x86\x61\x37\x4d\x32\x5f\x92\x24\x49\x7f\xc8\x22\x11\x83\x3f\x35\xf0\x2b\x7f\x3c\x16\xdf\x41\x15\xd2\x97\x75\x89\x22\xae\x84\xb3\xff\x6a\xca\x91\x4a\x91\xab\xa9\xd7\x46\x84\x4c\xa9\xd6\x4d\xeb\x4c\x65\x4c\x8b\x1d\xf6\x6a\x51\x43\x14\x8f\x81\xca\x49\x9f\x22\xd5\x6e\x43\x57\x51\xc2\x2e\x09\xba\xf6\x95\xb3\x17\x6f\x1a\x74\x44\xd7\xb7\x6f\x20\x70\xf5\x6b\x6b\x79\x49\xfd\xc6\x14\xe4\x1d\x4f\xa6\xf0\x43\x96\x62\xeb\xb7\xcc\xe8\x7f\x1f\x36\x4c\x53\xca\xe0\x5f\x19\xe3\x1f\x89\x39\x60\x3b\x17\xd0\x9d\x70\xbf\xd3\x37\xd4\xde\x4d\xb1\x6c\x27\x92\x56\xb4\xce\xe1\xda\xee\x10\x19\xba\x36\xa4\x8b\xa7\xdf\xa3\x2f\xab\xc8\x3b\xb1\x09\xb4\x36\x39\xa8\xaa\x08\xcb\xd3\x39\x7d\xf0\xe7\x74\x03\xc3\xb0\x49\xfa\xd2\x7f\xf6\x07\xb8\xd2\xf4\x60\xef\x15\xa2\xb4\x78\xd4\xfa\x99\xc7\x3d\x9c\xcc\x0d\xd0\x5c\x15\x08\x7c\xc2\xf2\x07\x8f\xe5\xbf\x02\x37\x32\xa9\x7c\xea\x3d\xab\x1d\x1a\xb2\x96\x90\x9e\xea\x07\xae\xc8\xb2\x74\x87\xb1\x1e\x36\x97\xfb\x33\x62\x17\x5f\x3d\xaa\x63\x83\x83\x5e\x94\x17\x7b\x3a\xeb\x5b\x07\x6a\xec\xca\x95\x39\x84\x55\x7d\x72\x58\x6d\x37\x38\x2c\x7f\x49\x48\xef\x34\x5e\x5d\x73\x4c\x09\x4a\x95\xd3\xa7\x15\xb3\xbb\xfc\x27\xfd\x16\x2d\xb3\x98\x1e\xeb\x8f\x26\x38\xfd\xde\x9c\x57\xb2\xfc\xc9\x27\x34\xff\xe9\x12\x53\x9a\x38\xd8\xf4\x79\x96\xa5\x18\x91\x7b\x8e\xa5\x52\x46\x8f\xf7\x88\x31\x49\x44\x5b\x44\x5f\xd9\xe8\x05\x4d\x78\x12\xa1\xb4\xbb\xd5\x7f\x23\x4a\x3a\x86\x2a\x43\x1c\xee\xe4\xc6\x1a\x4c\xf2\x5c\x12\x50\x8d\xaa\x77\xaf\xe7\xae\x22\x51\x8b\xf1\x4d\xbe\x5b\x1a\xb0\xbb\x2d\x58\xc5\xae\xb4\x5b\xb4\xd6\xea\xe2\xcf\xb8\x48\xcb\xe9\x36\x6a\x99\x91\xc0\x69\xcf\x7b\x2b\xf7\x4b\x9b\x79\x4c\xdf\x9d\xf9\xe1\xc6\xf7\x8c\xe5\xb0\x58\x08\x80\x9e\x9a\x90\x4c\x16\xa3\x57\xd9\x62\x62\xd4\x79\x3f\x8a\x7b\x59\xfa\x4a\x96\x19\x6a\xdc\xbc\x51\x57\x9b\xeb\xde\x39\xc5\xe8\xcb\x9e\xec\x15\x19\xdc\x6c\xed\x56\x60\x6f\xa5\xdf\x95\xc6\xd6\xd6\x6e\x06\x9d\x2b\xbd\x44\xf3\x13\x73\xab\x88\xff\x51\x90\xe7\x8d\x58\x98\xf6\x14\x3d\xb1\xb0\x47\x2d\xae\x6e\x14\xaf\x78\x2f\xc4\xfb\x4d\x16\x7d\x79\x89\x53\xd4\xf4\xb2\xd6\x1a\xfe\x80\x2f\xd0\x65\x92\xf5\x92\xd5\x4f\x9f\xde\xf4\x87\x1a\xb9\xa8\xe2\x06\x2c\xfd\x1e\x88\xfc\x6e\x6d\x9b\xba\x5e\xfd\xd3\xe9\xdc\xf6\x74\x5a\x79\xc7\x76\x71\x4a\xad\xe1\x7a\xcf\xf3\xfb\x61\xe6\x13\x9d\xf4\xac\xef\x34\x0c\x08\x83\xdf\x4e\x9f\x1d\x14\x3c\xff\x06\xcf\x51\xd4\x3c\xda\x75\xb9\xf0\x6e\x5e\x8a\xdd\x1f\xc6\x37\x99\x43\x46\x6c\xcc\x7a\x07\x4a\xb9\xcc\x12\xfa\xc8\x94\xfa\x87\xac\x5e\x27\xb3\x04\x53\x76\x14\x27\xf1\x61\x22\xef\xe0\x55\x69\xe0\xff\x2b\x29\xde\x11\xc5\x24\xc6\xf4\xb0\x6c\xef\xec\xf9\x78\x92\x8f\x56\x66\x6f\x52\x1a\x6d\xbe\x6e\xdd\xf3\x11\xae\xfb\x2a\x49\xd3\x43\x5d\x06\x68\xd3\x95\x57\xfa\x3e\x9a\xb5\xeb\x92\xc8\xd4\xc5\xe3\x8b\x77\xf7\x75\xa3\xb1\x98\x5d\xef\x55\x3b\x99\xfd\x8d\x76\x15\xf8\x6c\x06\x47\x89\x3e\x09\x99\x1f\x5d\xa1\xf4\xcb\x6e\x0b\x27\x61\x95\x8d\x8e\xb9\x12\xab\x7c\x90\x33\x2d\x2a\x47\xa7\x99\xaa\x06\x3b\xb6\x6a\x7f\x9a\x67\x92\xa7\x02\x48\xb3\x8c\xff\xfc\xe1\x8d\xdd\x42\x3f\x92\x25\x66\x59\xb8\x8e\xa3\xf1\xfa\x73\xb6\xd4\xa9\x3f\x96\x88\x5f\x8c\xbd\xa3\x71\x1c\x79\xb9\x55\x62\xbb\xd1\xa0\xa8\xda\x96\x43\x76\x91\x5d\xb9\x86\x20\x82\x63\xe7\x39\x34\x37\xeb\xdb\xda\x1c\x8d\x65\x1d\xfa\x71\x12\x7b\x79\x9e\x43\x59\xbb\xde\xd1\x56\x3e\xef\xff\x9c\xf8\x9e\xa9\x02\xec\x68\x56\xbe\xf4\x72\x88\xe3\x84\xbb\x86\x92\x33\x31\xd9\xee\x9a\xef\x75\x92\x39\xf1\xad\x2f\x97\x8e\xf7\x5f\x2e\xbd\x1c\xaa\xea\x43\x8e\xb7\xff\xfe\x05\xdf\x88\xe1\x5b\x3e\x2e\x5e\x1f\xc9\x92\xc6\x5d\x53\x90\xad\x8a\x79\x40\xb9\xa7\x87\xfa\x77\xf7\x8c\x51\x94\xba\xe0\x22\x4b\xf1\xde\x1d\x22\xaa\x08\x7c\xe2\xdc\x40\xf3\x6a\x27\x80\xa7\x42\x26\x71\x34\x91\xcf\x77\xf2\x05\x55\xeb\xcf\xd1\x46\x17\x01\xdc\xc1\x37\x24\xb2\xc6\xf8\xda\xd1\x48\x8c\x50\xa4\x65\x76\x1d\x3f\xf9\xca\x93\xe7\x85\xab\xe2\x64\x0e\x2c\x11\xff\x7a\xaa\x3e\xa9\x26\x2a\x0c\x0e\x2b\xba\xcd\x82\x38\xd2\x49\x93\x59\xe8\x38\x8c\x46\x48\xed\x82\x83\x21\x00\x43\xa0\xcd\xf4\xc7\x1c\xdf\xd2\xf5\xb4\xbd\x1c\xc6\xd1\x58\xcc\x2b\x07\x5a\xdb\xa1\x32\x19\x59\x55\x1c\x63\x03\x64\x30\x05\x8b\xa3\x4a\x3d\xed\x1d\x67\x40\xb7\xb2\x19\xf6\x25\xe7\x2d\x93\xe6\x54\xf3\xeb\x96\xb9\xcd\x26\x53\x48\xc3\x83\x63\xc8\xc2\x83\x13\x88\x0c\x63\xe0\xf4\xa6\x48\x53\x94\xc2\x2c\xc4\x93\x5a\x32\xde\xa9\x0f\xbe\x3f\xf0\x69\xe8\xa7\x61\x16\x10\x7c\xcd\x7d\x00\x82\x38\x23\x58\x6c\xb0\x4a\x42\xe6\xa7\xea\xca\x3a\x80\x07\xfc\xf6\x96\xe8\xf4\x46\x07\x61\xc8\xc1\xf7\xe2\x93\xe0\x7b\x9d\x95\x2f\x01\x6b\x26\xa6\x80\xc2\x24\x9f\x25\x04\xa5\xe9\xcd\x5a\x4c\x80\x9a\x4a\x06\x59\xa0\xd6\x71\x7b\x6b\xfe\xf2\x41\xd1\x32\x99\xf9\x0c\xa8\x74\xbd\x28\xb7\x2a\x0c\x8b\x35\x6e\x95\xd2\x57\x8a\x42\xab\x88\xaf\x28\xfe\x1a\xe9\xd3\x9d\x89\xf0\xca\x82\xe6\x3a\x1b\xa6\x96\x6c\xd2\x0c\xc5\x52\xcd\xc8\x21\xb3\xf9\xb6\x61\xdb\x56\x5e\x85\xbe\xec\x22\x56\x8d\xf7\x96\x76\xcd\x7a\xef\x71\xc2\x4c\xc1\x77\x3a\xa8\x5f\x1c\x79\x00\x6e\x91\x02\x5e\xaf\xd3\x59\x09\x50\x27\x0a\x2b\xf2\x6e\xa8\x1a\xf0\x10\xc9\x6c\x59\x7b\xc9\x4c\xa6\x6c\x17\x68\x56\xa6\xde\x55\x5d\x53\xd5\xa7\x9a\xda\xfd\xf6\x76\x1d\x47\x4c\x95\x9d\x15\xe2\x8a\x2c\x84\x23\x7e\xe5\xf9\x1e\x0a\xcb\x72\x9f\x73\xcc\xcf\x22\x9e\x5c\x62\x3f\x2d\xb2\xc1\x8b\xbf\x58\x91\x99\x4a\x6f\xc7\xc7\xbf\xbe\x0f\x2e\x10\xbb\xf0\x8b\x45\x1c\x30\x6b\x3f\xa3\x8c\x70\x94\x10\xd6\xd8\x51\xf1\x75\xa4\x77\x45\x65\x22\xb1\x76\xc8\xfa\x7c\x33\x4f\x78\x91\x9a\x8d\xae\x88\x3a\x8b\xb5\x3c\x19\x28\x24\x56\x96\x65\xb9\x74\x9b\x3e\x81\x3d\x14\x54\x72\xd2\xf9\x5c\x60\xeb\x92\x66\x8b\x84\xe1\x40\x1f\xb4\x4a\x22\x56\x9f\x01\x58\xef\x54\xae\xf7\x44\xac\x85\x4b\x6a\xaa\xfe\x0f\x1e\x1c\xeb\x6c\xc2\x6d\xe9\x42\x59\x68\xd2\x59\xe1\x20\xca\x62\x7c\x7b\xeb\x79\x70\x81\x19\x43\x73\x3c\xc6\x81\xfe\xeb\xf6\x16\xeb\x8a\x9a\xb7\xb7\x9e\x3c\xc1\x9e\xe0\x3f\xa6\x84\x27\x2e\xeb\x75\x0a\x36\x13\x5a\xbf\x21\x33\x63\x84\x2c\xe0\x09\x4f\xf1\xed\x2d\xab\x8f\x65\x68\xbf\x13\x4d\x6a\x0f\x75\xd2\x7f\xf1\x4e\xe2\xdc\xf3\xe3\xef\xbc\x30\x0c\x99\x29\x0d\x7a\xef\x99\xef\x2d\x74\x7b\xaf\x77\x8a\x62\x99\x1d\xdd\x51\x08\xd9\xae\x30\x0c\x91\x41\x60\x9d\x2f\x17\xad\xf8\x45\x46\x93\x7f\x62\x0f\xec\x79\xf6\x22\x24\xaf\x36\x60\xab\xc0\x28\xad\x1f\xbf\xbd\xb6\x43\xa0\x76\x9d\x0d\x41\x6c\x81\x35\xc7\x07\xe5\xe7\xed\x62\xf2\x45\x01\xd5\xdf\x7a\xe0\xd4\x75\x2a\xc1\x18\x8d\x46\x62\x65\xa7\xe2\x3f\xfa\x1c\x1b\x1c\x81\xe2\x88\xeb\xf7\x4c\x36\x90\x81\xb5\xed\xa9\xfa\x1d\xc0\x45\x69\xea\x4f\x30\x2c\xea\x26\x63\x44\xcd\xa7\xa7\xcd\x33\x89\x8b\x14\x7e\x3e\x86\x27\x60\x72\x3c\xdd\xa3\x7e\x0a\x0a\x59\x84\x85\x13\xf3\xe7\x14\xb6\x9f\x5e\x5e\x3f\xb7\x2a\xc3\x2c\xa8\x1d\x3d\x26\x4f\x99\xca\x3a\x5b\x3d\xa7\x29\xb8\xfb\xe8\x66\x0f\xcb\xb3\x5c\xcb\xf5\xda\x25\x08\x55\x13\x25\x74\x67\x5b\x7d\x12\x6a\x7e\x6d\xa1\xa6\x2e\x66\x7e\x93\xf9\x6f\xe9\x26\x95\x28\xe9\xf0\x4a\x94\xb4\x35\x09\xa7\x72\x1b\xd1\xaf\x90\x84\x93\xca\x4a\x94\x74\xd7\x49\x38\x69\x3d\x09\xe7\x23\xf4\x88\x59\x52\x37\x72\xc9\xce\xeb\x0d\x44\xda\x3b\x0a\xcf\x86\xd7\x77\xf4\xb7\xa4\xe2\x45\xb5\x4c\x7d\xb5\x18\xb4\xf8\x8e\x29\x03\x6d\xcd\xca\x08\xc8\xf6\x97\x5a\x79\xb4\x60\x87\x5c\x56\x46\x3a\x4b\x53\xbf\x58\xdd\x98\x34\x9e\x8d\x49\x85\x61\xab\xda\x45\xcc\x2e\xaa\x64\xc4\x96\x06\x47\x24\x2e\xe6\x2a\xbf\x4f\xfd\x75\x0e\x09\x5c\xe7\x70\x2d\xe5\x46\x6b\x34\x21\x60\x09\x0d\x3c\x62\xd6\x0c\xf4\xf4\xf4\x51\xfd\xe3\xc9\xa9\xcf\xc2\xe2\xa9\xd0\x03\xf4\xdf\x30\x0d\xd5\xd4\xdc\xd5\xf3\x84\x84\x10\x86\x21\x92\x7f\xe4\x00\x16\x75\xf4\xd2\xd1\xa8\xf8\xdb\xef\x18\xa3\x30\x69\xcb\x5a\x7b\x6a\x14\xc1\x29\x54\x17\xca\xb8\x42\x56\x00\x53\x60\xcd\xda\x7a\x93\x03\x25\x4d\x31\x88\x60\xea\x12\xeb\x9b\x49\xa7\xa1\x82\x6f\x50\xd6\x7c\x3a\x75\x82\x93\x4b\x70\x2e\x31\x5d\x24\x32\x50\x45\x6c\x66\x21\xe7\x29\xb0\x56\x46\xd5\xe2\xac\x2a\xfa\x09\x72\x00\xc6\xb2\xe8\x10\xc3\x7c\xb5\x2c\xb3\x95\xd6\xf4\x31\xdc\x50\x1b\xac\x44\xcf\x57\x49\x9a\x7e\x2a\xe4\xd0\x96\x72\x11\x03\x92\x56\x96\xc5\x8a\x47\x23\x1f\xcb\x82\x3d\x32\x21\x74\x80\x49\xcc\xfe\x3b\xe1\x17\x46\x16\x67\x3a\xb9\xa0\x10\xd6\xed\x76\x8c\x23\xca\x2b\x2d\x83\x9a\x44\x2c\x76\xad\x4d\xe2\x6b\x08\xac\xe5\x91\x68\xbc\x2a\x01\x5c\x8d\x43\xb2\x2b\xb6\x7b\x5a\xf6\xf6\xea\x19\xbc\x2b\x8d\xaa\xdb\x31\x6d\x91\x2e\x69\x28\x04\xa7\x67\x00\xb2\x90\x0a\x1d\x07\x85\x74\x72\x32\xdd\x2b\x20\x66\x6b\x7d\xa3\x91\xfd\xab\x2e\xe1\x99\x13\xcf\xa0\x8d\x32\x28\x6f\x16\xc7\xe8\xb4\x7a\xc5\x91\x32\xf6\x0e\x74\x77\x6c\x60\x01\xbb\xa3\xe3\xa3\xcd\xdf\x61\x68\x3f\x29\xed\x26\xca\x63\xd3\x46\xd5\x95\x3b\x67\x13\x9b\xc6\xf0\x12\x4d\xc3\xf8\x8f\xa6\xaf\xe5\x41\x2b\xb0\xae\xb5\x8e\xa7\x61\x06\xee\xa2\x76\x5b\x96\x3b\x63\x38\x9d\xf9\x18\xb2\x3a\x6e\x22\xab\x61\x6b\xb5\x3b\x57\x9d\x3a\x54\xa9\x53\x07\x9d\x05\xf1\x50\x5b\x41\x3c\xdc\xac\x6b\xa7\xb4\x07\x5d\x0b\xb5\x5a\x27\x58\x92\x50\x7b\x20\x50\x4c\xd9\xa9\x3a\xb7\x6a\xe1\x07\x27\xb9\x94\x87\x07\x19\xbe\x1d\x73\xb0\x16\x2c\xce\xab\x31\xd7\x50\x65\xba\xa2\x41\xb4\xa2\x14\x13\xfe\xc1\x18\xb2\xcc\x5e\x21\x07\x55\x13\x74\xcf\x47\xa1\xa1\x1d\x45\xd1\x0c\x04\x00\xac\xaf\xcb\x7a\x09\xbd\xff\x29\x7e\x75\xcf\x10\x40\x06\x72\x5a\xd6\xa4\xca\x1b\xe6\x83\x41\x39\xd8\xab\xb4\xc2\x18\xea\xbb\x8d\xe4\x28\x4a\xab\x55\x45\xef\x37\x57\x6d\x9b\x4d\xd5\x5c\xf4\x53\xc6\x05\xb3\x02\xe9\x51\x1b\x78\x7a\x51\x94\x7a\x00\x9e\xe3\x59\x46\x55\x35\xe5\x46\x2a\x61\x79\xb8\x12\xa5\xc1\x21\x8e\x7d\x90\xd7\x05\xc0\x6a\x6d\xad\x84\xe3\x85\x65\xa7\x34\xc9\xa5\xcb\xa0\xa0\x71\xc7\xd9\x2f\x4a\x16\x58\xd2\xa0\x76\xa9\x1c\x1c\xc3\x84\xbd\x29\x4d\x7a\xe2\x3b\xe3\xe2\x8b\x90\xdf\x2c\x31\x1b\x4f\xbc\x05\x22\x68\xae\xb2\x9d\x43\x2f\x4a\x13\x99\xf6\x7c\x3b\xd1\x21\xc6\x62\x77\x2f\x6b\x05\xdb\x6a\x5c\x52\x7e\xdc\x4b\xd8\x3b\x7c\x25\xce\x54\xf1\x2c\xd0\x11\x0c\xaa\x42\xb4\x3f\x28\x0f\x6e\x0d\x13\xd5\x3e\x3e\x06\x3c\xdc\x04\xd7\x86\x73\xaa\xa6\x9e\xd1\xa6\x30\xb4\x20\x46\xbd\xc0\x2a\x0e\x92\x18\x76\x60\x1f\xb8\x07\x2c\xda\x7c\xdb\x55\xd9\xbd\x7f\xe1\x7d\xaf\x16\x95\xa8\xd4\x8f\x10\x54\x2d\x15\x6c\xfa\xe0\x38\xcf\xdb\xc8\x96\x95\x8a\xdb\x26\x4c\x05\xf3\x77\x68\x87\x4d\x55\x87\x8f\x46\x0d\x56\xcd\xab\xdc\x5e\x88\xf5\x7a\x3e\x8a\xef\xd5\xc5\xf8\xbc\x83\x56\xf6\xe3\x30\xab\x21\xf1\x59\x9a\xfe\x70\x53\x92\x51\xbf\x1b\x91\xa5\x5c\xd3\xbb\xee\xaf\x84\xd2\x26\x1c\xa2\x87\xb9\xb6\xf5\x52\x84\xb0\x79\x0a\xe4\x68\x42\x46\x97\x1d\xef\x51\x42\x6f\x84\x1a\x93\x3e\x1e\x5c\x9d\xfb\xe6\x52\x48\x6d\xed\xed\xf0\x4a\xc8\xfc\x88\x25\x64\x5e\x2b\xe7\xa7\x21\xa4\x52\x6a\x74\x91\x0a\x01\x26\xdb\x12\xf9\xcd\x5a\x59\x1f\xa9\x61\xb0\x0b\xf5\x86\x91\x5f\x9d\x56\x45\xd3\x84\x61\x26\x42\xa3\xd4\x75\x9a\xfa\x5a\x6a\x92\x93\xfa\xdb\xd6\xc2\xe4\x50\xbb\x36\x8b\x89\x55\xe8\x75\x97\x15\x66\x88\xa3\x4c\x92\xd5\x8a\x7b\x67\xa0\x89\x9d\x0c\x35\xb1\x53\x9f\xf4\x98\xd8\xc9\x57\x30\xb1\x13\x00\xc6\xd4\x27\xbb\x36\xb1\x13\x57\x9d\x2b\x2c\xcd\x78\x8a\x3b\x21\xcd\x50\x54\xc2\x20\x5b\x57\xd3\x42\xb1\x2a\x5d\x0f\x49\xc3\x11\x88\xc1\x5a\x5f\xd0\xab\x28\x78\xca\x39\x6e\x1b\x24\xb5\xe3\xd5\x33\x15\x89\x9f\x1f\x7f\xa7\x6b\xa9\x3d\x3f\x3e\x31\x95\x89\x73\xe5\x73\xc2\x42\xfd\xdb\x01\x43\x1b\x62\x50\x2a\xc9\xf3\x10\x61\xad\x9f\x08\x37\xe3\xa9\xbe\x49\x12\x4c\x1f\x23\x09\xee\x8b\x6b\xda\x90\x08\x0f\x16\x6e\x87\x0a\x8e\xdb\x50\xb8\x66\x25\xbf\x56\x27\x62\x7b\x25\x3f\xfa\x55\x2b\xf9\x91\xaf\x59\xc9\x4f\x19\x14\x25\xed\xf1\xd7\x77\x94\xc5\xeb\x0a\x67\x2b\x37\x04\x39\x80\x15\x2d\x40\x90\xb3\x3b\x12\xb3\x9e\x50\x08\x45\xcc\x64\x1c\xf1\x66\xa2\xb9\xea\xf2\x08\xe5\x72\x6b\xe2\x9b\x0b\xe5\xf6\xaa\xb7\x95\xc8\xc5\x18\x4f\xf2\xf8\xbf\xb2\x3c\x2e\xd3\x4a\x3d\x49\xe3\x4f\xd2\xf8\xbd\x48\xe3\x1f\xb2\x14\xff\x6b\xc9\xe2\x8a\x2a\x0f\x11\xc4\xfb\x68\xef\x93\x18\xfe\x70\x29\xef\x6e\xc4\x70\x4d\x7b\x9f\x84\xf0\x27\x21\xfc\x81\x09\xe1\xca\x67\xb0\x99\x14\xae\xfb\x3c\x42\x31\xdc\x9e\xf9\xe6\x72\x78\x65\xdd\xdb\x0a\xe2\x72\x90\x27\x49\xfc\x5f\x59\x12\x37\x72\xf5\xf6\x2e\xe9\xea\x2d\xb0\x27\x81\xf9\x51\x08\xcc\xca\x37\x4a\x7a\x1c\xa3\x5f\x4b\x7c\xd5\xc4\x6c\x88\xfc\xda\x4b\xb2\x9e\x04\xd8\x87\x4b\xb0\x76\x23\xc0\x6e\x4e\xb2\x1e\x4b\x34\xc5\x68\xe4\x8e\xa6\xd8\x2c\x8c\xe2\x49\x10\xff\x96\x04\x71\xfb\x92\xe6\x10\x0b\x56\x25\x86\x66\x70\x08\xcc\xbd\x0b\xf8\x0d\xda\x5e\xbd\x76\xb8\x1b\xfa\xc2\x9d\x77\x88\xba\x22\x3b\x1b\xa1\xc5\x45\xa2\x9b\xda\xfa\x78\xef\xfa\x4c\xa2\x99\x61\xd1\xb3\x45\xfb\x27\x5e\xf6\x6d\xf2\xb2\x86\xd2\x67\x61\xc8\x26\xd1\xc9\x65\x8d\x60\x50\x24\x68\x1a\x66\x32\x2f\xaa\x60\xdf\xf5\x6a\xdc\x5d\x43\xa3\x4b\xf6\x39\xe4\xba\x43\x7f\xf0\xf4\x1d\x42\xa4\x8b\x14\x57\x9a\x26\x96\xf0\x74\x52\x71\x0c\xbd\x7f\x2f\xe1\xd7\xbc\x29\x5f\x5c\x3c\xea\xb8\xb7\xfe\xc4\x8e\x77\xca\x8e\x95\xfe\x52\xec\xe3\x44\x67\x15\xf8\x77\x2f\x9f\x9a\x2b\x13\xb8\xd8\xd8\x80\x67\xea\x8a\x3a\x68\x50\xb5\xf2\xca\x60\x94\x11\x82\x23\x7e\xa8\x4a\xfa\x1c\xd4\x2e\xa6\xc8\x4c\xf9\xb2\x40\x9e\xc1\x02\xf7\x27\xcd\x85\xb7\xe2\x8b\xfa\x2e\xc6\x83\x8a\xb9\x67\xce\x42\xa3\x4e\x2e\x36\x20\xf2\xfe\x89\x87\x7d\xe3\x3c\xec\xd1\x70\xa8\x2d\xbc\xc2\xad\x37\xaf\x37\xba\x48\xa1\xf8\xc3\x86\x5c\x85\x3f\x71\x95\x27\xae\xf2\x95\xb9\xca\x86\xca\x5a\xc1\x06\x86\xd8\xe4\x06\xf2\x81\x87\x74\x1f\xc7\xa6\x59\x3b\xf7\x84\x7e\x4d\x03\xc1\x7d\xdf\x5d\xf9\x72\x39\x4c\x9f\xfd\x72\xf9\x10\x36\xbf\xa1\x74\x7d\xb9\xdc\x48\xd9\xfa\x72\x79\x67\x75\xa7\xe0\x3d\x58\xc8\x36\xb7\xb7\xde\x91\xd7\x0c\x40\xaa\xec\x36\x1d\x1c\x9e\xb4\xa1\x9e\x44\x60\x79\xa7\x9b\x6e\xaf\x33\x2d\x11\xc5\x84\xbb\xb9\xa0\xac\x0e\xff\xf0\xe4\xdc\x01\x58\x3d\x40\xbe\xad\xe3\x74\x33\x2d\x34\x62\x11\x26\xf1\x93\xd3\xf4\x11\xc9\xbc\xce\x3c\x43\x1b\xf3\x0f\x49\x28\x74\xc1\xa1\xa1\xb2\xae\xaa\x4e\xd4\x2d\xac\x42\xa4\xe8\x06\x74\x26\xc6\x2c\x48\x46\xb6\x31\xc9\xe8\x16\x73\xbb\x8e\x78\x35\xdf\x2e\x82\x27\x40\x11\xb5\x14\x66\xa0\x43\x3e\x46\xaa\x81\x5e\xb6\x4a\xdf\xd9\x92\x33\x85\x84\xcd\x60\xbd\x8f\x06\x5c\x66\x01\xa4\x91\x54\xe7\xc9\x31\x7c\x0f\x8e\x61\xb3\x5f\x02\x89\x0b\xec\xd6\xfb\xfa\x17\x2c\x48\x81\xd8\xd6\x1c\x80\x31\xbe\x7f\xe7\xf0\x97\xcb\x23\x95\x57\xbd\x3f\x18\xe8\xcb\xa5\x16\x55\xef\xbd\xbe\x40\xe1\x57\x70\x09\x1b\x5a\x5c\x76\x8a\x10\x58\xcb\x10\x5d\x51\x11\x7b\x96\xde\xba\x94\x22\xa9\x3e\xfc\xc1\x97\xcb\x40\xc3\x42\x25\x37\x3d\xf2\xc2\x30\xe4\x4a\xc6\x50\x7e\x45\xf9\xa3\x92\xe4\xb4\xe1\xdd\xf8\x72\xa9\xb2\x76\xd6\xbd\x1b\x03\xf8\x65\xa7\x22\xa0\xb8\x61\xc2\x7e\xd4\xbb\xb5\xa9\x7c\xf8\xc4\x32\x1f\x1d\xcb\xb4\x22\x8d\x06\x2b\x50\x77\x17\xc2\x2d\x57\x42\x79\x3c\x14\xff\x29\x12\x4b\x17\x72\xb7\xc0\x96\x03\x99\x06\xa8\x60\x5f\x65\xaa\x52\xc3\xb4\x0a\x67\x7b\x75\x14\x88\x7f\xe3\x1d\x79\x1d\xe2\xbd\x3c\xb8\xc4\x96\xf2\x9d\x49\x8a\xcb\xc4\xd4\x5f\x91\x65\x13\x88\x60\xda\x65\x3d\x7a\x62\xa5\x5f\xed\x52\x02\xaf\x99\x00\xe4\x06\xd9\xf2\x8e\xda\x48\xe8\xfd\x05\xdf\x78\x40\x6e\xdc\x6e\xef\x27\x14\xd9\xac\x3b\x33\x50\x4b\xbf\x80\x38\x23\x1d\xed\x2b\xdc\x43\x47\x87\x15\x29\xcf\x9a\xa9\xc4\x93\x99\xdf\x92\x07\xdc\x7b\x7e\xfc\xdc\x0b\xed\x5c\xe0\xae\x14\xdd\x1d\xdf\xdf\x33\x77\x2c\xbe\x82\x04\x62\xd7\x5a\x19\x22\x86\xe8\xa6\x5f\x4d\x0e\xd9\x84\x8f\xcb\xa2\x3a\xbf\x66\x2c\xc6\x30\x0e\x20\xa6\x79\x27\xc3\xdc\x60\x8f\xf3\x56\xa6\xbb\x0d\x0c\x74\x30\xc5\x28\x36\xf9\xbe\x2c\x32\xfd\x46\x3e\xf6\xf1\x0e\x2c\x78\x7d\x91\x29\x6a\xcf\xd9\x45\x76\xb5\x93\xaa\x27\x0f\xc9\x8a\xab\xf1\x64\x4b\x3d\x3c\xca\x32\x1a\x27\x04\x71\x3c\xac\x67\xd9\xfe\x0e\xb8\xb9\xeb\x0b\x8b\x34\xc4\x32\xa5\x6a\x27\x42\xbb\xa5\x04\x2a\x25\x51\x03\xbd\xc2\x79\x55\xd7\xfa\xde\x65\x31\x36\x6d\x79\xb6\xc8\xe6\x14\x2d\x2f\x6e\xc6\x3a\x3f\xaa\x0d\xc2\xf2\xb0\x98\x3e\x5b\x5a\x06\x0b\xa6\x52\x5a\x5a\xb5\x3d\xa0\x5d\x10\xdb\x8d\x85\xd5\xa4\xe5\x2c\xd3\xb2\x6e\x9a\x8a\xb3\xaa\x38\xeb\x52\x31\xb8\xb5\x64\x84\x4b\xcf\x96\xd0\xc3\x81\xf8\x47\x9a\x57\x9b\x62\x1c\xab\x27\x8b\x2d\x36\x11\xe7\x26\x07\xa4\xaa\x59\xd1\x48\x00\xd9\xcb\x22\x94\xc7\x69\xf0\x2d\x1c\xd3\xfe\x71\xdd\xc0\xa9\xce\xba\x45\xd9\xd8\x2c\x73\x66\x75\xc8\x4e\x4a\xab\x1d\xd8\x0f\xc0\x61\x32\x90\xce\x9a\x04\xb0\x09\x53\x45\x54\x6b\x67\xd8\xb8\x3c\x15\xca\x48\xbb\x04\x47\x74\x8e\xf9\x3b\x99\xec\x79\x99\x26\xdc\xf7\x02\x0f\x04\xcb\x6c\xe9\x72\x99\x54\xaf\x90\xa8\xfc\xe9\xfa\xcc\x9a\x2f\xb6\x64\xa2\x1e\x94\x45\xb7\x5b\x91\xd2\x4e\x10\x2a\xcb\x8d\x29\x83\x26\x3d\x2d\xcb\xb7\xc8\xb2\x95\x3e\x29\xfc\x2b\x67\x2f\xde\xb0\xf1\x5a\x25\xfc\x79\xa9\xc0\xc8\xc6\x93\x29\xfc\x90\xa5\xd8\xfa\x9d\xe7\x00\xe8\x64\xed\x45\xc0\x80\xa0\xd3\x5f\xc1\x65\x67\x10\x71\x88\xeb\xf6\xd1\x62\xe2\x57\x73\xda\xfa\xd5\x90\xea\xfb\xdf\x3e\x13\x65\xf0\xf0\xc5\xf4\x32\x7c\x67\xe0\x6e\x40\x5d\x4f\x4a\xbe\xd7\xba\x6a\x87\x88\x84\x03\x26\x6b\x4e\x91\x10\x6b\xfd\xb0\x70\x06\x8c\x46\x3e\x09\xf5\x10\xe3\x22\x57\x32\x01\xf0\xf0\x44\x92\x1f\x53\x9b\x88\x80\xd1\xc8\xe7\x21\x37\x44\xe8\xef\xc4\x03\x65\xeb\xe0\x1f\x59\x42\xf4\x43\x4e\x93\x85\x0f\x80\xc3\x4b\xca\x31\x5d\xb0\xb1\x27\xeb\x97\x9d\x56\x46\x12\xe7\xfe\x11\xf9\xfa\xfb\x34\x05\x0b\xf3\x74\x01\x9a\xc1\x65\x82\xbe\x49\x63\x2d\x79\x8c\xc6\x5a\x67\x2e\xfd\x8d\x0f\xb4\x8c\x5a\x1a\xa6\x16\xa9\x00\xa7\x36\xb7\xe6\x90\x6c\xf7\x4d\xcb\xe9\x16\xb6\xd1\xa6\x9a\xf3\x5a\x63\xb1\x1d\xb0\x87\x03\xa1\x33\x42\xc5\x8b\x21\x83\xa8\x69\x25\x4d\x37\xb2\x92\xd2\xf0\xe4\x7b\xda\xb4\x92\xd2\xf6\x98\x3b\x6a\x5b\x49\xa9\xb4\x92\xd2\xff\xfd\xec\x94\x77\xc4\xdc\x91\xaf\x1a\x73\xc7\xbf\x4a\xcc\x9d\x44\x9b\xf1\xa4\x16\x27\x07\xbd\x05\x66\x17\x87\x73\xc4\xf1\x15\xba\xf1\xa6\x41\x42\xa2\x74\x15\x63\x66\x99\x3e\x53\xed\x22\x56\x31\x74\xe0\x54\x00\x78\x4c\x83\x02\x65\x37\xd9\x7c\x98\xee\x82\xb0\xf6\xa9\x06\x05\x61\xad\x5b\x61\x9e\x88\xea\xbf\x12\x51\x8d\x2e\x50\x32\xd0\x4a\x15\x27\x2c\xca\x2e\x31\xbd\x39\x94\x9d\xee\xe7\xb6\xeb\x83\xa3\xd8\x15\x4d\x49\x1e\x50\xb8\xa2\x29\xeb\xb8\xc0\x28\x5e\xab\x3a\xad\xec\x89\x90\xff\x3a\x84\x5c\x22\xe8\x76\x84\x1c\x7a\x32\x94\xef\xa3\x42\xe2\xa0\x46\xd0\x8b\xe3\xd2\x82\x1b\x3b\x73\x93\xfd\xf6\xf8\xd8\x1b\xd7\xdc\x5f\xaa\xdc\xf0\x57\x61\x10\x0f\x5e\xcf\x93\xe5\xf5\x36\xd2\xa3\xad\x73\x5d\xa9\x92\x9c\x43\x34\xe3\x98\x36\x03\x63\x8c\xc2\x27\x3a\xef\xf5\xdc\xcc\xad\x56\x49\x33\xe5\xd1\x86\x6b\x3a\xa6\x82\xfe\x83\xba\x8d\xac\x3c\x56\x04\x5f\x69\x80\xea\xb2\xa1\xef\xd1\x1c\xef\x93\x8c\xef\xab\x19\x17\x8e\x4f\x59\x90\x39\x7c\x7e\xfc\x1c\xe2\x4d\x56\xae\x88\xf4\xc0\x52\x60\x2a\xa8\xc7\x64\x11\x2a\xf7\x43\x70\xd9\x9e\xf8\x9d\xc1\x75\x63\xad\x68\x83\x63\x48\xe4\xfa\xf5\x3b\x4d\x80\xc1\xf7\xfc\x0f\xd8\x8e\x3d\x20\x82\xb3\x0b\xf6\x5e\xd8\x02\x72\x55\x74\x16\x55\x4b\xcf\x0e\xaf\xc3\xca\x96\x14\xa3\x78\x50\x09\x56\xb6\xc1\xd2\xaa\x25\x71\xb7\x9e\xdd\xa6\x55\x62\x91\x9e\x4f\xad\x8e\xae\x90\xb2\x14\x5a\xcb\x89\x78\x93\x4c\xfe\xd8\x3f\x33\x1c\x6c\xea\x85\xa1\x91\x1a\x97\x34\xe3\x19\xbf\x59\xe2\xa2\xdc\x73\x10\xa1\x34\xb5\x56\xa5\x56\x3b\xa3\xd9\xc2\xc7\xbb\xaa\xbb\x9f\xde\x95\x44\x0d\x2b\x13\xd7\x16\x9b\x97\xcc\xfc\x83\x7a\xdc\x5d\x43\xaa\xb1\x2a\x7c\xfd\x8f\xe0\x1f\x2a\x3c\xaa\xac\xdd\x65\x15\x1d\xa3\x59\xc6\x7f\xfe\xf0\xc6\x03\x85\xc1\xc9\xfb\x1f\x53\x9d\x12\x94\x37\x7c\xd4\x4d\x94\x60\x45\x53\x60\x62\x84\x74\xa1\x31\x8a\xa3\x6c\x4e\x92\x7f\x62\x1f\x01\x98\x85\xac\x16\x89\x9b\xc2\x75\x5e\x92\xc2\x9f\xae\x88\x36\x34\x01\x00\x60\x12\x66\x93\xe3\x29\x5c\x85\x59\xc0\x52\xb1\xfc\x13\xb0\x57\x0f\x78\xb2\x2d\xea\x93\xc4\xb6\xd2\x9b\x2e\xda\x3c\x16\x78\xa0\xb8\x91\x44\xfd\x55\xf1\x1a\x08\xaa\xbb\x49\x85\xa2\x56\xc6\x60\xea\x88\x9a\xfb\x4e\x1d\x8c\xc2\x06\x90\xae\xc4\xf6\xf3\x87\x37\x66\xf6\x47\x1e\xd0\xb4\xe2\x0f\xcf\x65\x69\x4a\xf7\xbe\x9d\x3a\x38\x4c\x59\x86\xb2\x64\x34\xa6\x3f\x54\x8c\x49\xd5\x95\x19\xf7\xb1\x27\xd3\xab\xce\x94\xd2\x2e\xd2\x5c\xc8\xef\x4f\xda\xe1\x37\xa2\x1d\xaa\x92\x59\x2d\xd4\x48\xbd\x3c\xba\xe0\x7c\xd9\x5d\x65\xd2\xd2\xeb\xe2\x68\xa0\xee\xb8\x83\x6a\xc8\x1d\x11\x35\x9b\x28\x74\xca\x7f\x22\x6b\x19\x8b\xe7\x6a\x05\x8e\xaa\xc6\xed\x57\x60\xa1\x9d\xff\xc6\x6e\x51\x91\x2b\x6b\x9a\x1f\x2d\xf0\xa7\x28\x1a\x5c\xca\x8c\x54\x9b\x8f\xd4\x16\x04\x26\xe0\xa5\xac\x06\xc9\x44\x23\xad\x9a\xe8\xba\x67\x70\x6d\x9a\x29\x34\x78\x52\x28\xef\xf5\x36\x2e\x35\x85\xa7\xb1\x41\x99\x72\xb7\x05\xd0\x20\x95\xe5\xa7\xb7\x4d\x50\x57\xc6\x97\xac\x96\x71\xd5\x9b\x6d\xdf\x3f\xc3\x0e\x1c\xb9\xbd\x55\xe1\x21\xea\x39\x3a\xcf\x28\x37\x55\x87\x25\xd2\x9b\xa2\xaa\x78\x78\xdd\x4d\x3b\x45\xe7\x13\xed\xff\x36\x68\xff\x7d\xc5\x49\x50\x43\x3a\xca\x38\x89\x5d\x45\x9d\x9b\x3b\x65\xdd\x01\x17\x6d\xc4\xff\x89\x00\xee\x90\x00\x56\xc2\x53\xe2\x68\x8c\x0c\x13\x4c\x4d\xb0\x4a\x96\x43\x56\x49\x47\x37\xce\xec\xeb\x71\xf5\xe8\x15\xe6\xba\x1d\x8c\xac\xdb\xc1\x69\x0e\xc0\x98\x35\xd2\x5b\xa8\x5b\x04\x75\x39\xd6\x4d\xca\x18\x46\x34\xba\x38\x52\x54\x43\x56\xe7\xbc\x17\xfb\x8a\x43\xd1\xb0\xa2\xf0\xec\x48\xa2\x80\x41\x1a\x16\xfc\x9f\x9c\x7a\xde\x98\x40\x16\xd2\x80\x67\x6f\xb2\x2b\x4c\x5f\x20\x86\x7d\x83\xd0\x87\x27\xf5\x0c\x0d\xca\xae\x54\x6d\x5c\x84\x15\x30\x70\x7b\xdb\xec\xf2\xfa\x65\x47\x87\x5c\x40\xb1\x1f\x6e\x65\x62\x82\x07\x09\xbd\xca\x7a\x3f\x66\x2b\x1a\x61\x17\xa0\x20\xaa\xb6\x7c\x89\x19\x4f\x08\x12\x5f\x71\x36\x4f\xeb\xdb\x02\xb3\xd0\x3b\x4b\xd3\x7d\x6d\x1a\x66\xfb\xfe\xbf\x03\xaf\x7d\xe7\x58\x01\xe8\xd4\xec\x0c\xaa\x3c\xf2\xfe\x5d\x90\x5b\x36\x1a\xc9\x77\x99\xe3\x1d\x72\xbc\x1b\xb8\x67\x5f\x2e\xbb\xef\xc5\xd1\x64\x7e\xc1\x0f\x39\x4d\x16\xbb\x8c\xad\xea\xdb\xcb\xa2\xdc\x3c\x09\x18\x64\xe5\x5e\x52\xb1\x97\x14\xa2\xb0\x7a\x33\xaa\x9a\x9e\x44\xde\x45\x91\xea\xb4\xa5\x59\x4b\xae\x64\x83\x1d\xb5\x61\x7b\xf5\xf9\x50\x38\xca\x70\xee\x07\x89\xf6\x83\x89\x86\x0c\x48\xdf\x88\x68\x9c\xc5\x31\xc5\x8c\xdd\x9d\x72\x08\xe8\x15\xce\xc6\x47\x0d\xc5\x8f\xc6\x63\xba\x3b\xea\x7b\x7b\x5b\x45\xf0\x4f\x48\xa8\xd4\xb7\xb7\x93\x29\x08\x58\xb6\xc0\x8e\x4b\x72\xf2\x0b\xb8\x63\x57\x5c\x93\x78\x9f\x51\x2e\xa7\xa1\xcc\xa6\xfe\xdd\x77\xb5\x61\xb2\x7f\x7c\xfb\xb9\x05\x2b\x35\x02\x92\xbc\xa9\x31\x78\x57\xcf\x5e\xbc\x61\x41\x35\x34\x77\xd8\x26\x4b\xf9\xbb\x6b\xa7\x1d\xdf\xb1\x03\x7e\x77\xf2\x95\x81\x18\xa1\xcb\x28\x3e\x61\xc4\x1d\x4e\x95\xac\x81\xf3\x04\xc1\x21\x67\xea\xbd\x2e\xf3\x7a\x2f\x07\x49\x53\xfa\xd7\xb1\x90\x79\xf9\xe0\xaf\xe8\x6e\xbb\x39\x4f\x0e\x96\xd9\x14\xe1\x56\x91\x8c\x1f\xf8\x9a\xf2\x9b\xd1\xf5\x21\x0a\x69\xc0\x60\x5a\x22\x0b\x12\xc8\x82\x60\x16\xa6\x35\x64\xd1\xe1\x0f\x07\xc7\x2a\xb0\x61\x3f\xab\x38\x3e\xf4\x42\xc7\x1e\x28\x82\x1c\x7c\x07\x4e\xc1\xcc\x18\x05\x7e\x07\xc0\x9e\x63\x1c\x8e\xe6\xed\x63\x94\x8c\xb5\x1c\xe7\xb9\x7b\x1c\x13\xbd\x0d\xc6\x7a\xde\x2c\x2c\xba\xfc\xa7\x35\x8d\xff\x34\x71\x1a\x57\x88\x92\x84\xcc\x75\xc9\xb5\x88\x26\x3c\x89\x50\xaa\x7f\x2e\x11\x63\xf2\x65\xc5\x42\xa1\x67\xf5\xe2\x02\x47\x5f\x58\xd5\x4b\x57\x48\xbe\x0c\x00\xf0\xc7\xe3\xda\xfd\xe7\x83\x93\xbc\x1e\x11\xe2\x06\x16\xb8\xbd\xed\x00\x81\xbc\x29\xad\xef\x3f\x14\x86\x2e\xec\xdb\x66\xae\xaa\xe3\x98\x83\x53\x5e\xc3\x7e\x6e\xe1\x87\xe8\x98\x83\xb1\x3c\x07\xbc\x05\xf7\xc9\x46\x78\xff\x8d\x48\xdd\xc1\x16\xa2\xb7\x89\x3b\xea\x91\x1c\x65\xc7\xd2\xc5\xeb\x1c\xa2\x90\xe2\xa1\x37\x2e\xbd\xbb\xce\xa6\x4a\x44\x6c\x30\x2d\x47\x5e\xde\xda\x86\xa9\x64\xfd\x8f\x7a\xa7\xec\x62\x17\x1b\x6d\xd5\x13\xbb\xeb\x65\x77\xf5\x8f\x09\xf9\xf4\xbe\x05\x53\x9a\xa0\x34\xf9\xa7\xc3\xde\x07\xdb\x9a\x2d\x97\x69\x12\x21\x65\xe0\xb2\xaf\xa3\x65\x31\x4e\xd5\x28\x5f\xf1\x86\xe8\x7a\x49\x93\x05\xa2\x37\x7f\xc1\x37\x63\x12\xbc\xff\xf0\xfa\xed\xd9\x87\xbf\x7d\xfe\xcb\xab\xbf\x41\x96\xae\xe6\xea\xe9\xc7\x37\x3f\xff\x49\x3e\xa2\x98\x2d\x33\x12\xff\x98\xd1\xff\x5a\x61\xaa\x13\x0f\x3a\x0d\xfc\x76\xf1\x2b\x37\x19\xaf\x9a\x69\x4c\x2f\xf1\x6b\x72\x3c\x95\x4e\xad\x61\x11\x84\xad\xa0\xed\xdf\x09\xe9\x7a\x6e\x0a\x3a\xe2\xf1\x91\x7a\xe8\xda\xa0\x38\x72\x3d\x35\x4a\x6a\x63\x34\x65\x76\x3e\x9c\x25\x64\x8e\xe9\x92\x26\x84\x63\xda\xd8\x60\x48\x65\x38\x67\xe9\xe4\x4a\x1f\xa3\x23\x28\x0b\x9b\x04\x93\x86\x75\xef\xc7\x1f\x9f\x8d\x46\xaa\xd3\x41\x68\x39\x3e\x9e\xd9\x8e\x8f\x67\xd3\xf1\x3a\x87\x2c\x5c\xe7\x7b\x55\x87\x9b\x76\xf4\xb9\x13\xe9\x4c\x6a\xe2\x80\x0a\x92\xcb\x01\x2c\x3e\x47\x83\x38\x1a\x8d\x7c\x36\x21\xc1\x9f\x5f\x9d\xbd\x7c\xf5\xe1\xe3\xe7\x97\x67\x9f\xce\x5e\xbc\x7a\xf7\xe9\xd5\x87\x7a\x67\xd1\x18\x40\xbb\xed\xbb\xb3\xb7\xaf\x3e\xbe\x3f\x7b\xf1\xaa\xde\xd4\xfa\x00\x61\xa7\xe2\x3f\x63\xcf\x04\x3a\x41\x6e\x8d\xf0\xf1\x6f\x6f\x7f\xf8\xe9\xcd\x34\x64\x90\xe7\x30\x71\x1c\x47\xc4\x39\x8a\x2e\xfe\x2c\x73\x63\xb0\x71\x06\x2d\xbc\x19\xfb\xc7\x10\x95\x32\x1b\x0d\x7e\xfc\xe9\xc3\xab\xd7\x7f\x7a\xa7\x4e\x6b\xf0\x4e\xce\x4c\xfc\x00\xf5\x83\xda\x5b\xaa\xae\x2e\x75\xeb\xc7\x99\x8f\xa1\xcf\x42\x0a\x51\x28\xef\xf1\x9a\x99\xf8\x24\x28\xc9\x06\x24\x81\x26\x15\x42\xa2\x8c\x00\xac\x4a\x73\x0c\x9c\xb2\x60\x81\x96\x3e\x02\xe3\x09\x9b\xea\x3f\xc5\x19\x87\x5c\xe5\x7a\x63\x10\x89\xe3\x3e\x84\xb8\x6c\x34\xf3\xe1\x53\xf6\x29\xd0\x89\x1a\xca\x49\x28\x17\xa0\x63\x16\xc6\xaa\xcc\x4c\xb6\x4a\x15\x9a\xaf\xc7\xd3\xde\xc6\xf2\x5b\xce\x89\x16\x84\xf0\x40\xc8\x10\x5c\x5e\xd0\x24\x00\xb2\xca\x8c\x53\x88\x20\x99\x54\xb6\x79\x0a\xfc\xfa\x3c\x7f\x96\xfe\xfb\x87\x3f\xcf\x97\x32\x17\x43\xc7\x3c\xd5\x04\x8d\x0f\xd6\xcc\x33\x19\x30\x4f\x1d\x9a\x63\xde\xa4\xfe\x3a\x87\x09\x44\x95\x49\x26\x30\x73\x4c\xd2\xc7\xe1\x3a\x87\x82\xd8\x8a\xb7\xd9\x14\xc8\xbf\xed\xb3\x04\xc9\xc4\xfe\x39\x05\x10\x03\x30\x49\x14\x87\x22\x19\x5d\x48\x66\xf2\x41\x2e\x93\x55\x9d\xdd\x86\xa8\x2b\xd2\x48\x9b\x54\xe0\xf6\x76\x9d\xef\xa9\x1c\x15\xfb\x8e\xd7\xf2\x70\xe8\xf5\x17\x5f\x7a\x8f\x6e\xd2\x0c\xc5\x3e\xd5\x77\x43\x6a\xaf\xdf\x62\x8e\xe4\xb7\x33\x98\xc8\x16\x1a\x28\xde\x2f\xe5\x99\xd2\xae\x1e\x3f\x09\x16\x98\xa3\x70\xa5\x83\x37\x34\xb3\x16\x9d\x53\x7f\x2d\x5e\x8d\x57\x39\xe4\xca\x71\x2e\x3d\xe9\x09\xd0\x37\xc6\x78\xb2\xc0\x8c\xa3\xc5\xb2\x19\x0c\xef\x13\x7c\xb5\xff\x12\x71\x0c\x84\x10\xf6\x29\x59\xc8\x04\xd1\x95\xf9\x39\x80\x04\x53\x03\xa6\x75\xb4\xa2\x2c\xa3\x63\x1b\x1e\xaf\xdf\xbd\x7c\xf5\x7f\xa6\x30\x8e\x2a\x4f\x5b\x09\xb7\x71\x15\xd3\x01\x94\x3b\xaf\xc0\x47\x40\x26\x1d\x8d\xfc\x2c\x10\x67\x4a\xd7\xc1\x37\x6b\xf5\x25\xde\xd7\xf9\x4e\x11\x2e\xc3\xb4\x7c\x7b\x43\x22\xb1\x6a\x0f\xaa\x41\x64\x82\xfb\xcc\x82\x80\xde\x40\x57\xb8\x68\x2d\x8e\x3d\xe9\x95\x77\xac\x74\x3c\x77\x17\x3c\xad\xc1\x1e\xa8\xfc\xb9\xa1\x34\x28\x04\xb5\xcd\xa0\xf2\xf5\x12\xa7\x5a\xab\x56\x8a\x5d\x17\x82\x94\x34\x52\x5d\x4c\x33\x46\x2e\xa2\x8d\x42\x3a\x52\xb0\xb0\xfb\x60\xc9\x64\x1d\x08\xc6\x05\xb5\x23\x21\xb5\x59\x21\x0b\x31\x24\x42\xba\xe4\x2d\xd2\xa5\x10\x4f\xf5\x1a\xd9\x46\xd2\x25\x9f\x10\x29\xe8\xa8\x9b\x20\x90\x40\x66\xc7\x78\x0c\x48\x08\x51\xd9\xcc\xda\x6d\xc0\xbb\xe3\x7b\x7d\xc4\xa7\x74\xac\x8f\x47\xd3\x70\x94\x7d\x7e\x08\x8a\x2c\xaa\x28\xb2\xae\x80\xb0\xa7\x8c\xa2\x5b\x67\x14\x45\x90\x89\x7f\xac\x5d\x44\xc1\x0b\x71\x72\x27\xe5\xa3\x29\x00\x4e\xd3\x81\x3b\xc7\x65\xd3\x16\x60\x13\x15\x2c\xd8\xfa\x61\x8c\x38\xaa\x34\xa4\x78\xb7\x3e\x90\x1e\x46\xd1\xae\xc9\xb5\xda\x29\x0d\x0a\x0e\x51\xaa\x36\x1c\xe4\x47\xc5\x69\xb6\x1f\xa0\x45\xab\xda\x70\x94\x16\x9d\x67\xc3\x51\x5a\x34\x92\x21\xa3\x6c\xc8\xbc\x9c\x11\x6d\x5b\xb2\xad\x72\xac\x6f\x43\x4a\x6b\x8f\x1c\xdb\x00\x28\x5f\x2e\x07\xda\xe4\x50\x8c\x96\xbc\x6b\x40\x1d\xae\x26\x73\x16\x1e\x0a\x5a\xfc\xcd\xda\xea\xee\xc6\x41\x63\x1c\x65\x71\xeb\x4d\x43\xc4\xb3\x73\x55\x14\x4e\xed\xa0\xf3\xa2\x33\xe2\x9c\xfa\xde\x5f\xc5\x44\x8b\x1a\x17\x1e\x93\x41\x43\x5e\x18\xf2\x9b\x25\xce\x66\xfb\x5c\x5d\x54\xd3\x9f\x2b\x92\x4e\x72\xa0\xca\x69\x7c\x1d\x93\x74\xd5\xf0\x26\x0d\xd4\x86\xcd\x6c\x6c\x6a\x73\xce\x02\xb9\x67\x91\x15\x8f\x85\x52\x9f\x35\xc4\x7a\x29\x0a\x95\x66\x0f\x24\xc5\xfb\xc2\x74\x82\x01\x4c\x7d\x04\xa9\x6d\xcd\xe0\xa5\x35\xe3\xbf\x7e\x7e\xf5\xe1\x6f\x9f\xdf\x9f\x7d\x38\x7b\x3b\x05\x10\xe5\x6e\xce\x99\xf5\x1e\xe0\xba\xf3\x74\xcb\x23\x2c\x87\xb9\x3f\x92\xd6\xa4\xef\x9e\xd0\xf6\xb1\x2d\x3c\x8c\x46\x7e\xe5\x77\xa8\x5c\xaa\x00\xe2\x1c\xb2\xdd\x4a\x9c\x3b\x77\x9a\x48\xdc\xa0\xad\x68\x79\x3f\xe7\x42\x88\x7e\x6d\x5f\x54\xe9\x9d\x87\xf0\xd5\xc2\xaf\xaa\xc2\x6c\xc7\x1e\x80\x34\x24\x95\x50\xdb\xb5\x76\x2e\x8f\x89\xbe\x90\x2b\x1a\xbd\xcf\x28\x1f\xd3\xbc\xce\x8e\xdd\x95\xfd\x2a\x18\xdb\x99\x03\x60\x13\x9c\x55\x03\x3d\x50\x46\xdc\x81\x73\x76\xe2\x60\xa7\xe1\xd7\xda\xe7\xa0\xe2\x92\x28\x70\xcd\xb1\xb1\xfd\x81\x88\xf2\x42\xb2\xe3\x4d\xe8\x7c\xda\xf6\x1d\x1c\x98\x64\xb6\xa1\xe7\x41\xa9\xe9\x4e\xbc\xda\xa7\x94\xf3\xb7\xf8\x39\x75\x6a\x28\x85\x17\x5f\x7d\xbe\x98\x5d\x38\x99\x1a\xa7\x51\xf1\x72\xc2\xa7\xc5\x7b\xc1\x8a\x27\x42\xb9\x92\x1f\xbf\x07\x39\x7b\x03\x31\xd9\x3c\x5b\xe7\x0f\x59\x46\xee\x97\x03\x9b\x31\x9d\x5b\x1e\x4a\x3d\xd0\x03\x3d\x94\x9b\x42\x45\x65\x12\xba\x3b\x50\xe4\x38\xdf\x06\x4c\xea\x91\xab\x5b\x82\x44\x0d\xd3\xcc\x07\xac\xf0\xe7\x08\xb1\xc3\x05\x22\x4d\x98\x41\xba\x2b\xa8\x39\x44\x0a\x5a\x26\x03\xde\x16\x7e\xfd\xec\xaf\x27\xda\x73\x03\x10\x9a\x91\x1e\x28\x5e\xdd\x59\x08\x22\xad\x61\xa9\x45\x40\x24\x86\xaa\x68\x31\x0f\x92\xd8\xba\x4d\x68\xdd\xb5\x87\x9e\x9d\x77\xcb\x84\xc0\x15\x4d\x3d\x00\x85\x90\xc9\xc6\x34\xdf\x32\xea\xc5\x94\x73\xd8\xc5\x7e\xaa\x91\xbe\xd5\xfd\xbc\xef\xf8\xa3\x46\x78\xe2\x96\xfb\xa0\xc7\xe9\xa5\x4d\x8e\x16\x82\xaa\x75\xd0\x2e\xc8\x76\xb5\x97\x0e\x13\x7c\x49\xbd\xd8\x56\x74\xcc\x69\x2f\xa8\x25\xc6\xef\xac\x1c\x68\x4e\xa5\x34\xa1\x87\x24\xf8\xb0\x4a\x31\x93\x79\xb2\xd7\xaf\x5f\x8a\x0f\xe1\x88\x62\xfe\xfa\xa5\x3c\xa8\x63\x12\x58\xf1\x91\xf0\xd3\xcd\x52\x3c\x12\xff\x40\xd9\x6f\xac\xfb\xe7\x00\x92\xd1\x48\xbb\xe9\xad\x31\xc8\x46\x51\x18\xb4\xdf\x08\xd0\x8e\x9d\xc9\xcc\x2f\x22\x8c\x48\x60\xe2\x33\x47\xa3\x62\xa1\xe6\xd1\xed\xad\x5f\xfe\xb0\xa4\x58\xd9\xe8\xf5\x4b\x13\x10\x42\x03\xc6\x33\x8a\x83\x25\xc6\x5f\xce\xd2\xd4\xf7\x14\xc2\x01\x7d\xfb\xd9\xf7\xcc\x22\x3d\x28\xbb\xed\x49\x20\x16\x4b\x97\x63\x41\x12\x94\xa1\xac\x56\xd8\x29\xab\x86\xb8\x16\x46\x7c\x79\xb4\xd4\xb9\x82\x64\xa8\x79\x5e\xa5\x8c\x95\xd6\xa4\xce\xbb\x09\xb2\xc5\xfd\x26\xed\x37\x84\xdb\xd0\x2d\x6d\x89\x72\xa4\x03\x2c\xcf\x85\xc2\x52\x35\x98\x85\xa7\x03\xcd\xc7\x6a\xf1\xe7\x3c\x43\xdd\x8b\x97\x2d\xbe\xcd\xc5\xdb\x39\x82\x36\x4a\xd9\x37\xc7\xfc\x50\xa5\x77\x3b\x5c\x66\x59\xda\x16\xe5\x49\xf1\x2f\x2b\xcc\x78\x6b\xd8\xe6\xcf\x1f\xde\xb4\x10\xd1\xc2\xfa\x8b\xbe\x61\xdf\x70\x7a\x2f\xae\x4b\xd4\xe1\xba\xcc\xbe\xaa\xeb\x12\x7d\x05\xd7\x65\x01\xcc\xec\xeb\xba\x09\x8a\xef\x26\xa5\xba\xee\x27\xa1\x67\x9e\x97\x26\x76\x85\x69\xa3\x91\xc7\xe4\x1f\xf5\x17\x45\xfe\xc4\x53\x57\x44\x89\x6a\x89\x73\xa7\x71\x60\x34\xea\xf8\x1c\x0e\xc4\x99\x93\x89\x1d\x33\x1a\x86\x61\xf1\xfc\xc0\xfc\x5d\x26\x61\x3c\x35\x73\x1b\x17\x1f\x04\x3e\xb6\x52\x3e\xae\x2a\xc1\x8a\xfc\xf6\xd6\x53\xa7\xdf\x3b\x08\xc3\xc4\xe7\xc0\x9e\xc9\x41\xe9\x5b\xb0\x27\x5d\x30\xd9\x30\x0c\x31\x28\x73\x53\x7e\xc0\x33\x4c\x31\x89\x4c\x82\x4a\xc1\xbb\xf7\x2f\x10\x23\xff\xc6\xf7\xcf\x31\x26\xfb\x09\x49\xb8\x10\x5b\x18\x8e\xf7\x0f\xf7\x15\x53\x07\x95\x16\x11\x4a\x65\x4e\xb1\xbd\xd2\xa1\x8d\xc1\x98\x97\xd3\x8f\x4a\x93\x9c\x03\x62\x6f\xd1\xf2\x54\xcc\xe4\x2d\x5a\x8e\x35\x71\xd6\xfb\x19\x85\xb5\x15\xa8\x32\xc8\x21\x16\x82\x40\x88\x55\x29\x90\x1f\x75\x93\x5a\x26\x4b\x52\xde\x70\xf0\x26\x04\xf1\xe4\x12\xef\x47\x59\x8c\xa7\x1e\x28\x33\x77\x2a\x2e\x20\xab\x2d\x37\xe1\x67\x43\xc9\xca\xe0\xf9\x51\x40\x60\x1f\x5f\x2f\xa9\x52\x27\xf6\x17\x2b\xc6\xf7\x71\xc2\x2f\x30\xdd\x3f\xc7\x52\x3c\xdb\xcf\xe8\x3e\x2a\xf2\x87\xaa\x7a\xce\x85\xa8\xc2\xe5\x52\x78\x70\x81\x98\x5d\xad\x56\x59\x16\xc1\x1e\xd7\xb1\x76\xd4\xda\x7f\x5a\x72\xa0\xd8\xc7\x25\xbb\x81\x0b\x95\x10\xd2\xc6\xb5\xe2\x70\xd2\x12\xc1\x0c\x0d\xd6\x49\x62\x70\xf9\x06\xae\xad\xae\x63\x7d\x26\x69\xe5\x4c\x9e\xd8\x67\xb0\x7e\x3e\xf3\x1c\xc0\x99\x4f\x21\x06\x35\x94\x8d\xab\xf4\xc0\x8f\x43\x8b\x9b\x0a\x80\xaf\x88\x22\x0a\x71\x89\x09\x1f\xf0\x2c\xc5\x11\xbf\xbd\x3d\xd0\x7f\x95\xeb\x02\xe6\xd2\x9e\x00\x65\xe3\x6d\xc0\x2e\xd0\xa2\xd2\xc4\x81\x67\xef\x69\x76\x6d\xaa\x67\x1f\x1c\xef\x71\x7a\x63\x60\xfa\x12\x71\xdc\x9a\x12\xb5\xf1\x31\x5f\x34\x87\x13\x8b\x71\x82\xb5\x60\x39\x07\xc7\xb9\xca\x57\x5d\x90\x88\x83\x93\x3c\xf7\xc1\x69\x63\x84\x16\x11\x7a\x22\x50\x67\xba\x47\x6d\xd6\x45\x8b\x30\xf2\x90\xe0\x2b\xbf\x40\xf6\xf3\x84\xc4\xba\x89\x40\x15\x60\xd5\xcd\x99\xf9\x4c\xb0\x3f\xb3\x1c\x00\x59\x0e\x0c\x23\x5c\xa5\xa9\x2d\xac\x14\xbb\x35\xb3\x09\x8c\x3f\x33\xf8\xa2\x12\xab\xa9\x71\x7e\x9a\x59\xd9\x6d\x6d\x5d\x14\x07\x9f\x3f\xcb\xaf\x7d\xfe\x1c\x72\x28\x49\x97\x50\x2e\x8b\xb1\x17\x16\x85\x5e\xb8\x47\x3e\x2d\xf9\x8e\xf5\xd4\x49\x74\xcb\x8f\xdd\xde\x3a\x7b\xf9\x06\x15\x77\x23\x23\x2e\x6d\xbc\x2d\xd6\xa4\x2f\x78\xca\x7d\x33\xa0\xaf\x02\x47\x56\xa6\x2e\x73\xf8\x0a\x7a\x0c\xdc\x04\xe5\x05\x22\x24\xe3\x92\x8a\xee\xa3\xfd\x28\x45\x8c\xed\x23\x56\xa1\x1f\xb9\xd2\x05\x31\x80\x3e\x0d\x57\xea\x87\x00\xab\xc2\x50\x55\x1f\x11\x00\xa0\x13\x46\xbd\xc8\x62\x1c\x72\x48\xf3\xb6\x89\xb9\x98\x45\xa1\x6e\xf1\x1d\x92\x3d\xdc\x4a\x82\xf8\x68\xc4\x7b\xa8\x10\xee\xa3\x3b\x5c\xe0\xba\xc4\x35\x1f\xc3\xc8\x97\x13\x05\x00\xe2\xdc\x07\xf0\xa2\xce\x3a\x3c\x8e\xaf\xf9\x11\xbe\xc4\x84\x1f\x32\x4e\x31\x5a\x48\x07\x69\x70\xa1\x1d\x3f\x40\xe6\xb7\xe7\xe2\xb5\x98\x91\x37\x2d\x3d\xf9\x3a\xef\xbd\x44\x81\x3d\x49\xba\x29\x46\xf1\xcd\x47\x8e\x38\x06\x3a\x58\xb5\xf2\x4c\xdd\xcd\x3e\x96\xd7\x96\xf7\x4f\xc6\x45\x1a\xc1\xbc\x94\x9b\xe0\x79\xe8\x1f\x97\x86\x04\xe0\x63\x22\xb8\xd3\xcf\x1f\x5e\xbf\xc8\x16\xcb\x8c\x60\xc2\x01\xbc\x6c\xd1\x4f\xe2\x6c\xd1\x12\x99\x10\x67\x8b\x8d\x2a\x49\x08\xe6\xde\x92\x04\xb4\xdf\x1e\xa1\xa8\x96\x95\x10\xf9\xc5\x4f\xef\x3e\xfe\xfc\xe6\xf3\x9f\x3f\x7d\x7a\xff\xf9\xed\xd9\xff\xf9\xfc\xe2\xa7\x77\xef\x5e\xbd\xf8\xf4\xfa\xa7\x77\x1f\x3d\xf0\xbd\x5f\x46\x92\xcb\x91\xbc\x12\xae\xcc\x83\xd5\xd4\xc7\x17\x82\xa6\x59\x17\x9b\xc0\x68\xd4\xe8\xbe\x40\xd7\x2f\xec\x11\xa8\x8e\xf4\x8f\xb3\x45\x10\x67\x91\x9c\xa5\x0f\x02\x14\xc7\xaf\xc4\xae\xbf\x49\x18\xc7\x04\x53\xdf\xbb\x4c\x58\x72\x9e\xa4\x09\xbf\x89\x2e\x10\x99\x63\x0f\xda\xc2\xb1\xc9\xd8\x17\x5c\x24\x71\x8c\x89\x96\xe4\xcc\x67\x82\xe5\x8a\xce\x65\x46\x52\x90\xc3\x15\x75\xe5\xcb\x3f\x6f\xd5\x0d\xa1\x56\xc8\x36\x70\x55\x96\x0a\x0a\x09\xd7\xb9\x2c\x06\x4b\x71\xbc\x8a\xaa\x9e\xa9\x92\xcf\xea\x7b\xe3\x85\xe8\xf3\x77\xf2\x77\xe2\x81\x53\x32\xc6\x39\x3c\x94\xd5\x4f\xeb\x2a\x0e\x44\x56\x52\x76\xf6\xc7\x93\x53\x76\x78\x32\x3e\x06\x30\x0b\x4f\xbe\xcf\xfe\xc0\xbe\xcf\x7e\xf3\x1b\x80\x26\xd9\xe1\xc9\xd4\xd2\x7d\xb2\xe9\xf7\xf2\x4b\x54\x9a\x9f\x90\x74\x6e\x47\xd8\xa7\xa0\x6d\x76\xf5\xc4\x05\xf5\x3b\xf1\x26\xb8\x5b\x5e\x3a\x1e\x8d\x7c\x2c\xcd\x3b\xd8\xdc\xb3\xe6\x2a\xbf\x80\x89\x9f\x29\xc9\xd6\xd8\xbe\x15\x23\xab\xb2\xf3\x66\xa1\xf3\x3c\x17\xe4\x51\x5f\x38\xa9\x6d\xcf\x04\x17\xa9\xaf\x11\x28\x92\x61\xed\x7b\x00\xae\xc2\x24\x60\x17\xc9\x8c\xfb\x00\x46\x61\xa2\x5d\xf3\xe2\x4d\x1c\xfa\x49\x18\xd9\x75\xe2\x80\x69\xa9\xab\xcc\xc1\x99\xf3\xca\xb5\x0b\x3a\xae\x08\x81\x82\x9b\x9b\x4b\x85\x27\x2a\x78\x63\x72\x3c\xd5\x1f\x98\x86\x64\x72\x62\x7e\xc8\x10\x8e\x75\x0e\x72\xb8\x08\x25\x20\xd6\xde\x0b\x4d\xcb\x04\x05\xf7\xc6\x9e\x65\x91\x3d\xfa\x07\xcb\xc8\xf7\xfb\xd1\x05\xa2\x0c\xf3\x70\xc5\x67\x87\xbf\xf3\xf2\x4a\xaa\x71\x9f\x43\x8b\x48\x48\xb3\x99\xf1\x8f\x03\xd1\x70\xe6\x27\x96\xc4\x51\x54\x34\xb0\x33\x13\xba\xf2\x5c\x84\x6b\x71\x60\x62\xb8\xc0\xfc\x22\x8b\xc7\x2b\xa8\x09\xae\xb4\x4d\x2e\x26\xd5\x39\x4f\x61\x94\x2d\x96\x29\xae\x9a\x61\x84\x10\xa5\x9e\xaa\x92\x7b\x49\x0c\x72\xc8\x56\xd2\x22\x57\xb6\xd3\x7e\x2c\xf5\xd1\x99\x2f\xd7\x74\x96\xa6\xe6\x1a\x53\xb1\x96\xca\x0e\xee\xb9\xae\x4f\xef\x63\x99\xbe\x51\x80\xb6\x5e\xfe\xde\xba\x82\x26\x98\x02\xb1\x59\xbd\x62\x45\x2c\x24\x7b\x38\x65\x58\xdf\xff\x2a\x4a\x1c\x7a\x92\x1d\x78\xfa\xca\x19\x0a\x8f\x01\xf4\x78\xb2\xc0\xd9\xca\x7a\xf8\xfc\xf8\x77\xe2\xb4\x0a\xe8\x2e\x7d\x04\x65\xaa\x47\x39\xfb\x4f\xf8\x9a\x83\x9c\xfa\x82\x9e\x44\x19\xb9\xc4\x94\x63\xca\xc6\x6b\xc9\xe0\xf6\xc5\xe6\x7a\xd5\x7c\xea\xa5\x9c\xfb\xbf\x82\xa5\xd8\xf4\xff\xef\xe3\x4f\xef\x84\x80\xa4\xa4\x55\x6e\x5f\xd0\xc9\x8b\x1b\xa9\xa5\x65\x75\x34\xf2\xbd\x3f\xbd\xfa\x24\x74\xcd\x95\x4e\xa1\xd7\xd8\xac\x92\xe0\xc8\x09\x80\x53\x16\xc4\x88\xa3\x50\x7c\x2a\x50\x87\x36\x99\xdd\xf8\x04\x8c\xf5\x0b\x79\xcd\xce\xda\xff\xb0\x17\x45\x61\xe3\xa3\x61\x65\x04\xc8\x02\x95\xf8\xff\x23\x26\x71\xe5\xf4\x2d\x46\x23\xdb\x72\xb5\x70\x1b\x45\x8a\x33\xca\x30\xff\xa0\xe8\xb4\x42\x14\x9f\xc3\x85\xb2\xd8\x40\x8d\x73\x21\x0f\x50\xf4\xcb\x2a\xa1\x02\x3b\x30\xc8\xe1\xff\x0a\xd0\x3f\xd0\xb5\xb9\x4a\x0f\xe5\xfe\xda\x68\xdb\xb8\x24\x7c\xec\xbc\x24\x7c\x3c\x1d\x8d\xec\x5f\x7b\xa6\x52\x75\x83\xfb\xc0\xab\x0b\x4c\xce\x2e\x51\x92\x4a\x79\xc8\xcd\x4f\x6a\x9c\xb0\xb1\xb3\x2a\x71\x6c\x85\x8b\x0a\xa9\x4c\xf1\xbd\xd3\xbe\x73\x4d\xc4\x69\xdc\x84\xb9\x4a\x2d\x96\xeb\x82\xd9\xbd\xbd\x28\x80\x44\x55\xcf\x07\xe3\x8e\xc4\xa7\x58\x26\x7b\x96\x7b\xe1\xf4\xaa\x88\x55\x14\x8e\x1b\x1f\x07\x8a\xf6\x40\x1c\xac\x68\x0a\xd7\xe7\x59\x7c\x33\xc6\x12\x23\x6f\x6f\xd7\xb9\x64\x1e\xb6\x0f\xc3\x06\xbd\xd9\x71\x02\x89\xa0\x27\xaf\x63\x1f\xc8\x13\xd8\x24\x52\xf6\x75\x4d\x1f\x87\xf5\x91\x04\x8f\x4c\x31\x62\xb8\xd0\xdf\xda\xcc\xc7\x97\xbd\xe6\xe3\xe5\x79\x86\x68\x7c\x94\x66\x11\x4a\x0f\x19\xcf\x28\x9a\xd7\x3d\xdf\xa6\x51\xc3\x86\x5e\xec\x8b\x45\xef\x7c\xf2\xad\x9a\xd0\xf4\x25\xa7\x52\x9a\x3a\xfe\x9e\xfc\x81\x1b\x33\x2f\x31\x66\x5e\x1a\xf2\x09\x11\x3a\x78\x69\x01\x09\xed\x1f\xb7\xb7\x07\x27\x90\x06\xb6\x36\x12\x1e\x1c\x43\x4f\xaa\x2c\x5e\x42\xf6\x85\x44\x44\x03\xa3\xb9\x84\x07\xc7\x00\xb6\x29\xa2\x54\xd0\x23\x48\x41\x5e\xbb\xae\xd4\x62\xe8\x23\x0f\xdf\xd0\x87\x2c\x4c\x42\x5f\x51\xd5\xaf\x06\xab\x17\x53\x48\x77\x61\xc7\xd8\x79\xf2\x88\x07\x62\x46\x60\x5a\x9f\xab\x9a\x11\x38\x00\x20\xf8\x1c\x9d\x87\x04\xd2\x5c\x1e\x14\x98\xc1\xa4\x75\x6e\xdf\x8e\x25\x21\x2d\x2c\x09\x65\xe2\x30\x48\x42\x0c\xfd\x2c\x9c\xac\xbf\xe0\x9b\xb1\x97\x91\x17\x69\x12\x7d\xf1\xa0\x1a\xb5\x22\x64\x49\x65\x39\x3a\x57\x52\xa9\x90\xc4\x7c\x81\x06\x29\x9e\x23\x8e\x3f\x49\x7d\xf2\xf6\x16\x9b\x7a\x36\xea\x01\xd0\xf2\x04\x5e\x08\x19\x54\x0b\xb1\x9e\x94\xe3\xf3\x29\x18\x8d\xa8\x6f\x59\xf1\x60\x06\x60\x22\x9f\xc1\x44\x9b\x38\x92\x16\xeb\x80\x66\x03\xe3\xab\x84\xc4\xd9\x55\x20\x79\xc3\x47\xf5\x0c\xca\x75\x94\x2c\x01\x36\x3c\x9d\x4e\x85\x54\x6c\x60\x56\xbb\xf2\xc7\x03\xfd\x1d\x71\xb8\x5e\x73\xbc\xf0\xa5\x78\x25\x0d\xc1\x03\x2f\x7a\xd7\xb9\x58\xc6\x86\xb2\xae\xaf\xec\xfe\x2d\x69\x92\x80\x04\x2f\xc5\x89\x0d\xdd\xbd\x59\x8c\x0f\x17\x89\x38\x05\xd5\x85\x26\x97\x37\x87\xe2\xa5\x7a\xe7\xee\x70\x67\x10\xb4\x76\x28\x32\xb9\xac\xab\x9e\xb8\x39\xe6\x5d\x1e\xf0\x5c\x88\x66\x03\x97\x7b\x94\xaa\xc4\x40\x9d\x8e\x7e\x1c\x27\x5c\x37\xbd\xb7\x0d\x9f\xac\x09\x5a\xe0\xb1\x27\xf4\x12\x0f\x2e\x12\xf1\x77\x5d\xf1\xf0\x64\x55\x86\xb1\xf7\x0f\x74\x89\x94\xe3\x53\x9c\x13\x3e\x9e\x28\xdd\x06\x7a\x0b\xb4\xf4\xa6\x10\xa5\x09\x62\xfa\xe1\x6f\xbd\x69\x0e\xf5\xd0\x7f\x7e\xf1\xc6\x8c\x2c\x4d\x8e\xd7\x87\x74\x75\x7e\x63\x06\x55\x7f\xab\xe1\xe8\xb9\x3d\x8c\x7a\xe3\x2d\x50\xa4\xff\xa2\xe8\x0b\x16\xff\x9c\xcb\xff\x5c\x5b\x9f\xf8\xdb\xd9\xdb\xfa\x37\x6e\xd0\x22\x35\xdf\x50\x7f\xab\x6f\xa8\xbf\xbd\x9b\x45\x6a\x7d\x4b\xfe\xca\xa7\x90\x6e\x69\x5f\x5c\xc8\x88\xbe\x26\x6e\x90\x1c\x8a\xdd\xdb\x2a\x6e\x42\xa0\xdb\x2b\x89\x01\xae\x73\x57\xa8\x33\x38\xc5\x52\x9b\x91\xeb\x46\x14\xa3\xfd\xdf\xec\xc7\xc9\xa5\x07\x31\x08\x5e\x64\x31\x7e\x2b\xf1\x6d\x60\x64\x9b\xc2\x53\x21\xfd\x1f\x2a\x96\x51\x23\x40\x64\x4e\xd1\xf2\x22\x90\xff\xfd\xca\x34\x48\x7e\xd3\x91\x7f\xa4\x92\xd7\x72\x33\xf2\x13\x67\x8b\xc3\xf3\xd5\x6c\x56\x3d\x87\xf7\x53\x17\x53\x26\x62\x70\xae\x4c\x17\xbf\x14\xea\x1f\x8e\xe1\x7a\x96\xae\xd8\x85\x73\xc7\x27\x78\x9a\x43\x14\x57\xe2\xcd\x48\x15\x21\x38\x4d\xe6\x73\xa1\x3e\xa2\x38\xf6\x20\xb1\x2e\x35\x88\xde\xa3\x91\x2f\xfe\x91\x86\x44\xf1\x87\x74\xab\xf9\x04\xa8\xd0\x36\xa1\x84\x56\xd9\x5e\xa1\x16\x97\x7d\x9d\x09\x51\xb0\x56\x61\x7d\x45\xff\x64\xe0\x9c\x68\xbc\xf1\x6e\x74\x93\xc3\x38\x5b\x1c\xfd\xc2\xd0\xe1\x0c\x09\x51\xe6\xa6\xa5\x05\x4b\xce\xd3\x84\xcc\x5b\xde\x46\x69\xc6\xdc\x01\x40\xe2\x6d\xc2\x0e\xb3\x15\x67\x49\xec\x4a\xec\x26\x1a\xcc\x31\x3f\x8c\x8c\x3b\xa2\x67\x22\x45\x82\x8f\x43\xe9\x63\x69\x9b\x90\x4a\x17\x97\x6a\xc5\xbf\x6d\xdd\x91\x90\xb3\x0e\x65\x60\xf1\x21\x22\xd1\x45\x83\xff\x99\x7b\xaa\x30\x15\xe2\xa9\x25\x51\xaf\x7e\x9d\xd2\xa4\xb5\x4f\x7d\xcd\xd2\x9c\xf7\x57\x14\x75\x37\xc4\x20\x82\x31\x9c\xd5\x4a\x51\x00\xb8\x10\x4f\x12\x3b\xdd\x5b\x21\x74\x2f\x5b\xb9\x52\x34\x36\xd6\x2c\x78\x95\x10\x2d\xe0\x36\x7c\x58\xbd\x8e\x2b\x18\xcb\xbd\xfe\x6f\x8c\xbe\xbc\x45\x4b\x18\x85\xd5\x0b\xb0\xce\x8a\x9b\x39\x34\x9f\x76\x71\x37\xc5\x9d\xa2\x1c\x5e\x26\xf8\x6a\x59\x33\xfe\xd9\x8d\xae\x12\x92\xc3\xf9\x2a\x71\xde\x36\xd2\x1f\x5e\x25\xf1\x8f\x19\x95\x96\x2d\x79\x0e\x7e\x14\xc7\xe0\x4c\x9e\x82\xf1\x02\xea\x23\x3d\xb6\xa2\x91\x15\x09\x18\x17\xee\x33\x98\xb0\x9f\xd4\xb9\x1e\x97\x91\xca\xc5\xf9\x94\xa4\x77\x9c\x16\x2f\x8a\xb3\x38\xce\x8a\x67\x34\xcb\xba\xd6\x59\x18\x15\x5f\x29\x6e\x9c\x43\xcd\x96\x7f\xb8\x79\xed\x5c\x59\xd1\x51\x30\xf9\xb2\xa9\x5c\xa3\xee\xca\x7e\xb8\xf9\x84\xe6\x32\x72\xd9\xa5\x9d\xfb\xbc\x4c\x4a\x6b\x2e\x4d\x67\xd1\x98\x03\x6b\xc8\x72\x88\xca\xc0\xee\x08\x7a\xed\x39\x36\xad\xdc\x75\xbc\xfe\x1f\xe5\x23\xd6\x69\xaa\x8f\xe1\x89\x2e\x2c\x8a\xed\x35\x94\x15\xb6\xc0\x78\xe5\xab\x71\xc1\xe4\x78\xaa\x8c\x83\x92\x76\xba\xa7\x10\xf9\x0d\x7f\x16\x3e\xd5\x85\x10\x8d\x9c\x23\x07\xb3\x46\x6a\x59\x8d\x8a\x09\x30\xbd\x94\x15\x09\xb4\x5d\x30\x8c\xa4\xdd\xa4\x11\x6f\x69\x69\x39\x52\x7f\x97\x45\x5a\x13\xf6\x9a\xfc\xb5\x81\xd4\x96\x81\x75\xcb\xfc\x97\xc7\x7b\xb1\x8e\x73\xe2\xc6\x91\x2c\xce\xe4\x6b\xa1\x26\x30\x65\x28\xfd\xe9\x5c\x30\xcb\xda\x0c\x9b\xc9\x9f\x14\x01\x8f\x55\xf8\x94\xf6\xdd\x82\x3d\x87\x59\x91\x8f\x46\xb2\x1c\x2f\x2b\x3f\x42\xe6\xd2\x5e\xbf\x16\xf8\xfe\x16\xd1\x79\x42\xc6\xde\xf1\xf2\xda\x83\xfc\x82\x62\x76\x91\xa5\xf1\x98\xe4\x85\xb9\x8b\x06\x99\x9a\x92\x8f\x01\x6c\x9e\x0e\x1a\xc8\x9c\x4b\xd2\xce\xeb\xd7\xab\x03\x2e\xbb\xa5\x81\x19\xc6\xf1\x39\x8a\xbe\x74\x8b\x04\x82\x0f\x08\x3a\xad\x23\x14\x3a\xec\xb9\xdf\x6c\xcc\x2e\xdd\x24\x66\x97\x0e\x8d\xd9\x25\x3e\xed\x49\x37\x44\xbf\x42\xcc\x2e\x05\x60\x4c\x7c\xba\xeb\x98\x5d\xda\x1a\xb3\xfb\x48\x93\x63\xb9\x6c\xc5\x39\x4c\x5b\xc4\x06\x92\xf1\x64\x76\xd3\xa2\xcf\xce\x52\xc4\x2e\xde\x62\xc6\xd0\x1c\x33\x0f\xc0\x34\x13\x0a\x45\x4b\x63\xf5\xd2\x03\x0e\xab\x59\x2d\x1b\x69\xba\x2d\x59\x44\x30\x6b\x76\xfd\xce\x6a\xf3\xdd\xd4\xc4\xc8\x96\xe1\x30\x19\xf4\x8a\x82\x82\x9e\xc0\x63\x1d\xe9\x50\x95\xb9\x08\x80\xab\xda\xa3\x14\xc0\xc8\x64\xd8\x14\x40\x2a\x03\x50\xea\xf5\x76\x31\x58\x1f\xc8\x4c\xe2\xa3\x91\x1f\x05\x51\x8a\x11\x35\x50\xf3\x01\x8c\x02\x14\xc7\x3e\x95\x91\x07\xda\x91\x3d\xfe\x0f\xfc\x1d\x54\x5b\x80\xe3\x4f\xfa\xd9\x77\xc7\xc7\xa2\xc5\xcd\x12\x8f\x57\xa5\xc5\x13\xe8\x6a\xad\xe3\xc4\x07\x50\x96\x3a\xc4\xb2\x24\x21\x08\x94\x83\xda\x9e\x44\xf3\xdb\x2c\x50\xdb\x52\xe4\x4e\xc1\x00\x7a\x9f\x8a\xda\xdd\x67\xe7\x19\xe5\x32\xc6\x34\xc4\x01\x41\x0b\x7c\xba\xbb\xc9\xe6\x00\x8c\xb7\x1b\x0d\x2b\x1b\x20\xae\x8d\x26\x99\x32\x41\x69\x7a\x63\x5f\x80\x6f\xdd\xe8\x93\x86\xa9\xd5\x5d\x80\xbc\xe4\x32\x02\xdb\x0f\x17\x06\xdd\x1d\xf9\xc0\xa2\x34\x39\x94\xad\x5a\x3b\x3d\x3e\x3b\xe4\x2c\xa3\x3d\xaa\xb6\x68\x71\x74\xbe\x4a\xd2\xb8\x91\xbc\x7c\x77\x76\x9e\xba\x06\xd4\x66\x7c\xa3\x59\x8a\xfb\x0b\x7a\xcb\xeb\xdd\x00\xaa\x1b\x93\xfd\xcd\x75\xd6\x80\x66\xc0\x5f\xbf\xb2\x24\x5b\x08\x08\xb1\x70\x32\xcd\xa1\x04\x93\x5b\x08\x25\xed\xc6\x3d\xd1\xdf\xfe\x6c\xc3\x40\xe7\x2c\x8e\xa1\x37\xf0\x02\xa3\x58\x66\xaa\x6b\xc3\x58\xd1\xc0\xd5\xfc\xf1\xe1\x6a\x8a\xfe\x79\x73\xd8\xc8\x8a\x70\x3f\x36\xba\x16\xef\xd1\x45\xb6\x4a\x63\x19\x2b\xdf\x5c\xc9\xc1\x49\x7e\xf7\x90\x51\x5e\x44\x44\x70\xa1\xc9\x97\x65\x73\x7c\x02\xd6\x2e\xb9\x7d\x42\x54\x6e\x12\x6b\x6a\xd2\x6f\x7a\x8a\x27\x64\x1a\x3a\xa7\x02\xad\xc4\xfc\x50\x17\x53\x2e\x92\x6b\x41\xd2\x8c\x85\x61\x92\xe1\x9d\xb2\x1a\xdf\xe3\x76\xa2\x98\x22\xda\x3e\x07\x63\xe6\x5e\x60\x3e\x76\x5d\x24\xd1\x0b\xa8\xcd\xb6\x30\x74\x92\xa9\x19\xcc\x1e\x09\x80\x7c\xaf\x28\xb4\x2c\x33\xd8\x02\x21\x1c\x56\x4f\x0e\xef\x41\x27\x25\xb1\xfc\x4a\xa8\xe4\xb8\x46\xb9\xd1\xec\x97\x68\x8e\x0f\x79\xc2\x53\x65\x30\x74\x9d\xfe\xb2\x49\x47\x37\x6b\x6c\x25\xa9\x1e\x61\x72\x99\xd0\x8c\x08\x48\xdf\x63\x36\x80\x75\xfe\xfd\xc4\x63\x78\x89\xa4\x11\xd0\x83\xde\x92\xe2\x25\x26\xb1\x07\x05\x69\x4e\x65\x6e\x25\xa7\x85\xb9\xb0\xe4\x04\x62\x2d\x9f\xc4\x52\x46\x23\xc7\x43\x65\xa8\xa6\x93\x82\x1c\x99\x48\x56\x67\x34\x45\x74\x81\xe8\x19\xf7\x8f\x41\xc0\xb3\x9f\x97\x4b\x93\x24\xfc\x37\x38\x60\x32\x78\xf7\x44\xda\x12\xc1\x34\x74\x7f\x09\xe4\xa0\x35\xaf\xc7\xa0\x0c\x1d\x6a\x77\x4a\xa6\xf4\x6b\xa1\xe5\x1c\xf3\xb7\x26\xe9\x7b\x05\x37\xa1\x8c\x2e\x29\xee\xf3\xd7\x5f\x7d\xd4\x37\xfa\x2b\xcf\xe5\x4d\xf3\xb6\x38\x7b\xf1\xce\x03\x50\x27\xb0\xfe\xe1\xc6\xaa\xcd\xbd\x43\x53\x8a\x0c\x0b\x5f\xc7\xd1\x18\x43\xc2\xc6\xdc\x11\xc1\x19\xa8\xac\xf3\x32\x32\x49\x06\x6a\x16\x8f\x34\x7b\x57\xf7\xe5\x65\x92\x78\x65\x48\xb2\x61\x24\x64\x15\xc1\xc2\x8b\xd2\xe1\x2d\xd7\x97\x9a\x7a\x8b\x73\xfa\xdf\x4d\xab\xea\x8c\xaa\x84\x12\x47\x63\x2e\xa6\x4f\x60\x12\x8f\x71\x73\x0d\xb4\x5c\x83\x2e\x05\x5d\x3c\x6a\xae\x41\x25\x2a\x70\xae\x44\x46\xcd\xd6\x2b\xf7\x57\xed\x94\x6a\xa0\xc8\xca\x51\xe5\x1c\x09\x83\x1c\x2e\x31\x65\x49\x2d\x9e\xbf\x8c\x23\x45\xd2\x47\xe4\xf4\x35\x15\x6c\x10\x92\x10\x57\x17\x2b\x35\x95\x18\x33\x4e\x33\xbd\x10\x19\x63\x8f\xa5\x81\xcb\x93\x72\x0d\x00\xd0\xc4\x85\x85\xa6\x26\x96\x8e\x88\x22\x40\xb6\xb6\x16\xb2\xc4\xf8\x4b\xc7\x32\xc8\xc4\x3c\x2d\x51\xdf\x07\x53\x69\x8e\xa9\xcc\xc2\xa5\x13\x16\xbc\x51\x7d\x6a\x45\xd2\x0c\xc5\xba\xb9\x0c\x04\x81\x89\x72\x3c\xa0\x5a\x18\x77\x39\x3d\xd5\xe7\x4c\xc7\x1f\xd5\x66\xb7\x19\xb7\xb3\xe4\xdd\xee\x62\x55\x4d\x4a\xf4\xeb\x17\xaa\x6a\xa3\x4a\xda\x12\x2d\xa6\xd3\x41\xa0\x0a\x09\xdc\x4a\x41\x92\xc3\x28\xcd\x48\x2f\x9e\x8b\x36\x4e\xcc\xb0\xf3\xdd\xb9\x70\xa4\xbe\x3b\x3d\x6e\x76\x6b\x77\x06\x15\x76\xe8\xdc\x24\xa5\xb7\xf1\x6c\x91\x49\x47\xb9\xd3\x29\x99\x68\x5f\xd6\x7d\xa6\xb8\xaa\xde\x5a\xb2\x9c\x58\xae\x14\xee\x3d\x5b\x6c\x41\x25\xef\xe1\x19\x86\x82\x34\x48\xee\x89\x93\xe4\x9e\xd8\x24\xf7\x44\x92\x5c\xa2\x38\x46\x93\xd0\xf2\x92\xd0\x12\x4d\x68\xf9\x66\xcc\x82\x00\x6b\xfa\xef\xb2\x18\x37\xf8\x85\x8d\x85\x8e\x85\x4a\x09\xbd\x29\x88\x9b\x4b\x50\x7b\x55\x77\x99\xba\xae\xa2\xd6\xef\x01\x79\x53\x86\x84\xd2\xb2\x39\x28\x91\xa3\x22\xa8\x39\x90\x04\x4f\x56\x8c\xa9\x8c\x2b\x9e\x78\x00\x92\xba\xa5\xa5\x27\xa7\x8b\x85\xec\x9d\x75\x3a\x1a\x48\xde\x67\xd4\x1f\xe8\xda\xb6\x03\x74\xeb\xe1\xae\x3a\x12\x6a\x0a\x69\x78\x70\x0c\x59\x78\x70\x02\x91\xc1\x6a\x4e\x6f\x0a\xeb\x7a\x0a\xb3\x10\x4f\x6a\xae\xec\xa9\x0f\xbe\x3f\xf0\x69\xe8\xa7\x61\x16\x10\x7c\xcd\x7d\x00\x82\x38\x23\x58\xf2\x1d\x15\x62\x91\x06\xf2\xe0\x00\x78\xc0\x6f\x6f\xcd\x15\x26\x19\x0f\xfa\xbd\xf8\x24\xf8\x5e\xdf\x3c\x49\xc0\x9a\x89\x29\xa0\x30\xc9\xb5\xdd\x4b\xdd\x56\xb9\xbd\x55\x17\xfd\xb3\x40\xad\xe3\xf6\xd6\xfc\xe5\x83\xa2\x65\x32\xf3\x99\x0e\x30\x45\x79\xe9\x29\x90\x6b\xdc\xca\x21\x2e\xb9\xdd\x2a\xe2\x2b\x8a\xef\xdf\x2b\xee\x62\x01\xc3\xaf\x6d\xf6\x50\x92\x38\x2a\x29\x48\x9b\x1b\x57\x9d\x62\xdd\xc8\xc9\x7b\x5b\xd9\x3d\x0e\x58\x46\xf9\x0f\x37\xbe\x2e\xda\x99\xb7\x4b\x87\x45\xd6\x86\x83\x10\x97\x17\xdd\x4c\x1e\x26\x55\x1a\x46\x79\xa5\x08\xa8\xcc\x4e\xaf\x35\xd0\x12\x96\x2f\xa8\x55\x79\x30\x09\x2c\x3e\x5d\x9b\x65\x91\x2f\x54\x82\xc6\xd5\x23\x07\x79\xe9\x6f\xd4\xd1\x48\x02\x27\x4a\x2f\x9f\xba\xa6\x15\x7a\xcf\x8f\x9f\x7b\x50\xd0\x74\x8e\x92\x34\xf4\xde\xa3\xb9\x40\x0c\xbe\x3f\xcb\x56\x42\x89\x73\xde\x4a\x91\x41\x1e\x6b\x69\xdf\x65\xe3\x09\x9d\xe6\x2a\xb2\xed\x2c\xe2\xc9\xa5\xeb\x86\x8a\x4a\x9c\x65\x4c\x14\x66\xd9\x55\x12\x57\xf9\x04\x4a\x53\x7f\x82\x6f\x6f\x59\x50\x82\xdc\x17\x3b\x0e\x20\xbf\xbd\xb5\x49\xaa\x90\xe2\x9a\x7b\xa8\x18\x87\x98\xc1\x33\xc9\xa5\x26\xc7\x53\x98\x86\x7c\x72\x32\x2d\x01\x60\x8d\x8c\x60\xda\xb0\xc3\x1b\x43\x4b\x09\xdd\xb4\x92\x05\xb0\xbc\x20\xd0\xb6\x7f\xb8\xdc\x3f\x88\xd5\x9d\x29\x69\xd7\xaf\x83\xa9\x86\xb2\x06\x29\x54\xd0\x95\x5a\xf5\xb6\x32\xc8\xf0\x8a\x3b\xbd\x34\xfa\xfe\xca\x63\xf4\x9d\xf3\xda\x1a\x36\x0a\x40\xb3\x60\x31\xa4\x80\xc3\x10\x99\xf9\xd7\x29\xde\xd0\x03\xa4\x72\x52\x9b\xca\xcf\x5b\x62\x56\x67\xc9\x87\x01\x52\x6d\xc2\x7e\xcc\xa4\x27\xc2\x5d\x09\xe2\xab\x66\x6c\xed\x03\xee\x97\xcb\x01\x50\xa5\x55\xad\xa4\xcd\x90\x50\xdc\xd8\xdd\xda\x90\x20\xf8\x48\x55\x22\xc7\xc0\x54\x5f\xac\xdd\x44\x9d\x50\xc8\x21\x9e\x02\x53\x29\x72\x90\xae\x5c\xd4\x1b\xdc\x4f\x6f\x6f\x7d\xdd\x53\x5f\x43\x59\x8b\xb5\x63\x68\x89\xeb\xdc\x4a\x98\x4a\x73\x00\xdc\x0c\x43\x5d\x63\x4c\x15\x53\xca\xc2\x75\x12\x8f\x31\x34\xd6\x10\xda\x94\xcf\x59\x29\x9f\x67\x5a\x3e\x67\xdb\x18\x42\x32\x5b\x4a\xef\xb0\xea\x68\xf6\xb4\xfd\x9e\x78\x47\xd2\xf9\x2a\xef\xf4\x7b\x1e\xd0\x3e\xfc\xea\x3a\x09\x2c\xcc\xa4\x63\xef\xc8\xeb\x5c\x35\xea\x5d\x75\xcb\xde\x75\x98\xf6\xdb\xc3\x58\x70\xa5\xe8\x38\x87\xde\x5f\xf0\x8d\x94\x78\x1a\x5c\x51\x25\xb2\x94\x42\x83\xdd\x85\x40\xe5\xed\x15\x6c\xb9\xcc\x93\xab\x44\x0c\x0f\x18\x94\xaf\x63\xa7\xc2\x4d\x54\x49\x65\xa9\x37\x93\x36\x4d\x5a\x7b\x68\x34\x42\x55\xeb\x0b\xc8\xb5\xd8\x3b\xb8\x7e\x40\x83\x8e\xf5\x54\xbe\xf8\x15\xd9\x62\xa9\x29\xb7\xc9\xca\x6e\x63\x43\xaf\xe0\x2c\x97\x6c\x28\x94\xa3\xc4\x83\x0e\x6e\xaf\x68\xce\x75\xec\x7b\xa3\x2f\x8d\x3b\x70\xb0\x9e\x72\x77\x38\x87\xee\xad\xe9\xf0\x70\x85\x14\x3d\x75\xa7\x42\xa2\xe4\xc8\xc1\xb7\xe3\x4f\xed\x1f\xe3\x75\x0e\xb9\x65\x0e\x28\x7a\xe0\x92\x56\xe8\x44\x28\xc5\xa3\x81\xb4\xe2\xae\xfb\x24\x84\x4b\xa1\x39\xc6\xdf\xdc\x86\x6d\x9b\xc8\xa0\x5d\x9f\x31\x1c\x70\x32\x75\x6b\x4a\x55\x85\xae\xf0\x74\xe5\x39\x44\x2b\x7e\x91\xd1\x4a\x3a\xe5\x9a\x89\xa7\xf5\x43\x77\xdb\x5d\x4c\x3a\x37\xb7\x9e\xb2\xb5\x7f\xb3\x77\x29\x1f\x93\xc6\x76\xd3\x6c\xc5\x5b\x63\xda\xd4\xcb\x8d\x72\x46\x7d\x93\xe7\xdd\x85\x4d\xd6\x7d\xa3\x66\x92\xab\xb3\x17\x6f\x3e\x7e\x7e\xf5\xee\xec\x87\x37\xaf\x5e\x7a\x3a\x2c\x5c\x7d\xa7\x18\xc9\xf9\xad\xc2\x51\x47\x9a\x22\x84\xf9\xda\x64\x9a\x83\x71\x03\x6f\xd7\x1f\x30\xcb\x56\x34\xc2\x63\x4f\x60\x87\xf2\x29\xab\x64\xd4\x63\xef\x8a\x26\x1c\x7b\xf0\x2c\x4d\xb3\x2b\x81\x1f\xad\xa7\xc9\x8a\x91\xa8\x5c\xd3\x9a\x17\x79\xb5\x14\x4a\x04\x9f\xf5\xbf\xfa\xce\xb2\xcc\x6c\x16\xe8\x67\x48\x0e\x5b\x46\xd9\xa9\xe7\xaf\xc9\x2c\x63\xb5\x64\x97\x04\x10\xa7\x8b\xbb\x12\x96\x1c\x08\xd9\x6f\xc1\x1c\x81\xaf\x04\xac\x65\x9d\x5d\xd3\x64\x42\xa6\x42\xf6\x2a\xd3\xea\xd0\xb6\xe9\xeb\x69\x7f\x10\xbf\xd4\x9c\x68\x99\x1f\x5c\xa0\xa6\xdb\xb2\x25\x3f\x23\xe5\xf6\x20\x21\x51\xba\x8a\x31\xf3\x0d\x4a\x4b\x0f\x78\x21\x91\x4a\x74\x53\x6f\x42\xa6\xa7\xa7\x7f\x97\x89\xde\xaa\x76\x0b\xdb\x62\x63\xc6\xec\x70\xaa\xa9\x26\xb7\xb7\xf8\xf6\xd6\xfb\x9f\x82\xf0\xb5\xcb\xb1\xd8\x61\x36\xd3\xc5\xc2\x79\xde\x34\x95\xe1\x2a\x69\xc5\xfa\x7b\xe5\x75\x86\x46\xed\xa9\xe1\x3a\x70\x6f\xb9\x9b\x01\x7a\x30\x8a\x52\x76\xa8\x05\xe5\x96\x04\xd7\x28\x4a\x8f\x12\x76\x28\x4d\xb9\x87\xea\xb6\xc0\xa1\x8e\xad\x1c\x5c\x39\x67\xb7\x55\x03\xfc\x63\x48\xed\x28\xbf\xb4\xe6\x22\x42\x0e\x2d\x10\x40\x57\xb9\xc2\x1e\x32\xab\x57\xd3\xaf\x7d\xb3\xaa\xf6\xed\x0e\x64\x28\xda\x16\x45\x57\xa0\x82\xbc\xcb\x7b\x98\xfa\x6d\xbe\x6f\x9d\xe5\xad\x62\xe8\x33\xc5\xac\x84\xb2\x23\x73\xb8\x59\x85\xbc\xb5\x8b\xbc\x9f\x69\x8b\x0f\x72\x41\x6e\xd2\x7e\xcf\x7d\xd1\xce\x37\x40\xaa\xb8\x32\x3d\x59\xf6\xc0\xab\x7b\x2f\x5b\x2b\x01\x36\x71\xbb\xa7\x68\xd1\x10\x4b\xd9\xd7\x2f\x58\xd4\x87\x4e\x72\x42\x1b\x7b\x98\x87\x58\x10\xee\x14\x17\x22\xcd\x04\xd2\x42\x10\x47\xae\xd8\x96\x8d\xe2\x42\x5a\x23\x42\xc4\x32\x5e\x6b\x2f\x8f\x73\x2d\xa6\x2a\xaa\xd3\x73\x29\x09\xba\x69\x52\x23\xb2\x65\xee\x3b\x69\x9d\xaa\x14\xce\x29\x7c\x96\xc7\xc6\x48\x65\x2e\xd4\xa8\x22\x15\x12\x93\x64\xb8\x63\xf0\x12\x33\x2e\x74\xd8\x24\x23\xfa\xf9\xeb\x97\xf2\xce\x7b\xe1\x4a\x91\xca\x3a\x07\x7b\xe8\x94\x85\x68\xec\xa3\x90\x5a\xe5\x2e\x3a\x47\xd2\x05\xfa\x01\x10\x30\x0c\x51\xed\x38\x32\x55\xf4\x42\xfa\x41\x61\x65\xfa\xca\x35\x2a\xd3\x0b\x6f\xcb\x26\x7a\x6a\x5d\xfd\x0a\x4c\x42\xce\xe8\x1b\x61\x11\x72\x2d\xbf\x1a\x83\xd8\x92\xba\xf6\x97\xef\x7a\xb8\x9a\xb3\x99\x7b\x87\x3b\xd4\x26\x20\x5d\x91\xd2\x6d\x8e\xbb\xaa\x0f\x2d\x8b\xb1\x16\xb8\xe5\xbd\x58\x73\x6d\xdd\xca\x7d\xa7\x5c\x9b\xda\x16\x18\x28\x4b\x64\x38\x59\xeb\xbd\x53\x2e\x4e\x19\x2b\x3b\xf6\xde\x15\xae\xcd\x7c\x0a\x49\xde\x90\xae\x6b\x3e\x3e\x59\x33\xd6\x99\xcf\xb4\x8c\x38\x55\xd1\xa8\x95\x31\x4c\x34\xe6\x27\x24\x94\xc9\xdb\x5b\xa9\xf7\x4f\xa6\x20\x58\x91\xe4\x97\x32\x49\x61\x49\x7c\x28\xf4\x64\x5b\xc8\x8c\x05\x5d\x3f\x55\xab\x87\xbc\xf6\xb8\x4e\xa9\x70\x49\xa9\xaa\xdd\x8b\x12\x65\xb0\xe1\x98\xd4\xb2\x39\x80\x34\xbf\x0b\x77\xe8\x66\x0d\x05\x83\x24\xb2\x0e\xaf\xea\xf2\x5a\xb0\x30\x57\x89\x36\x52\xc4\xb1\xbe\x7e\xa9\xec\xe9\xaa\x9b\xfc\x8f\xd8\xfc\x5c\xe2\x81\xca\xca\x6b\x98\x8e\x1e\x79\x42\xa7\xa6\x77\xe9\x99\x95\xfd\xac\x06\xe2\x0f\xc8\x4c\xbb\x17\x17\x38\xfa\x52\x19\x40\x3d\x69\xbf\x35\xec\x79\x07\x21\x0e\x0a\xee\x94\x03\xa8\xbe\xb1\xcd\x48\x61\x6d\xa4\x4e\x56\x44\x5c\x1b\xcc\x5a\x36\x98\xd4\x36\x98\xe5\x8a\x28\xd7\xcf\x0a\xea\x3e\x2b\x3f\x4b\x13\xd0\x3e\xcf\xf6\xc5\xa6\x95\x11\x22\xf9\x14\xa2\xc1\x05\xf4\x1d\xb4\xaf\xaf\xd4\xdd\xaf\x48\xfb\x86\x44\x3a\xf7\xd2\x47\xb5\x3e\x43\x1f\x9d\xc1\x61\xbb\x12\x1a\x0b\xdf\xd2\x7d\x0a\x8d\x3f\x54\x79\x6a\x4b\x7c\x9b\xa2\x03\x2d\x37\x46\xb6\xc4\x95\xbe\x62\x7c\x43\xb4\x90\x66\x21\xbe\x1d\x08\x55\xf7\x2e\x3c\xb1\x86\xf0\x44\xef\x41\x78\x52\xb0\xd9\x58\x21\xea\x94\x9e\xc8\x06\xea\x35\xc3\xe9\xac\x43\x76\x50\x08\x2a\x1a\xb9\xad\x8c\x4c\x16\xb3\xd3\xc7\xa0\x69\x69\x2c\x47\x43\x3e\x07\xa7\xeb\xb2\xa6\xdd\x58\xd6\x08\x31\xb5\xf0\xc6\x38\x77\x67\xdf\x95\x71\x4e\x5c\x47\xee\xec\x2a\xca\xb8\x02\x4b\x50\x1c\x31\x55\xfb\xba\xf3\x94\xf5\x9d\xd7\xb5\xbe\x28\x69\x93\x85\x62\xfc\x0f\x59\xda\x1d\xa3\xda\x3b\xba\xbc\xb3\x59\x1d\x7b\x4b\xf1\x97\xdf\x2c\xf1\x51\x91\xed\xa3\xf7\x7c\xdb\xf7\x05\x9d\x99\x94\x74\xc1\x0b\x69\x37\xfe\xaa\xf6\x06\xe7\x3d\x42\x1b\x8d\x95\xc4\x5a\xe4\x0d\x17\x5b\x21\xe4\x41\x4f\xdb\x95\x64\x26\xf4\xdc\x75\xd5\xde\x11\x05\x6b\x99\xe9\x65\xce\xcc\xeb\x1b\xa0\x02\x41\x66\x34\x5b\x18\x2a\xe0\xe3\x09\x9f\x3a\x72\x2e\x03\x55\x47\xca\x9a\xcb\x59\x9a\x7a\xe0\x74\x9d\x8f\xa5\xaf\x68\x4b\xdd\x56\xee\x64\x05\xfc\xf7\xbd\x99\x45\xac\x30\x7d\x4a\x82\xf5\xc0\x92\x60\xb1\x50\x95\x5e\xda\x52\xae\x1a\xee\x9c\xbb\x42\x09\x6f\x69\x65\x4a\x0c\x00\xa8\xea\x4e\xb6\x34\xb3\x8b\x52\x6e\x73\x5f\x5c\xd7\x68\x63\xd2\x9a\x24\x0f\x61\x84\xa2\x0b\x0c\xfc\xb5\xac\x99\x72\x95\xa4\xe9\x4b\x75\xaf\xc8\x1e\x57\x01\x28\x87\xdb\x91\x8d\x36\x3a\xa1\x2b\xf9\xd6\x4b\xd3\x3a\x1d\x32\x6a\xdd\x0d\x87\x4c\xea\x38\x49\x90\x2b\x7d\x4f\x46\xc9\x37\x45\xd5\xe7\x4e\x51\xf5\xb9\x2d\xaa\x3e\x9f\x8e\xab\x21\x3f\x42\x44\x91\xd1\x64\x72\x16\x30\xb1\xa2\xd2\xe0\x2a\x74\x5c\x83\x90\xa9\x24\x3c\x9d\x96\xc1\x83\x31\xe2\x68\xcc\x73\x68\x6b\xec\xa4\x48\x6c\x6f\x34\x24\xf1\x77\xc5\x3d\x47\x45\x13\x6c\xd4\x45\xa1\xc2\x85\x54\xfb\x81\xf6\x92\xa2\x80\x2e\x6e\x84\x86\xbb\x5c\x7a\x15\xf3\x26\x86\x5e\x19\x0a\xe7\x81\x50\x7e\x2a\x92\x8d\xd8\x68\xd4\xa6\x70\xab\xcf\x9b\xdf\xfa\xa8\xef\x39\x2c\x1f\x1f\x6f\x48\xf4\x29\x59\x60\xcf\xf2\xc8\xf1\xd1\x88\x1f\xe8\x15\x8d\x46\x49\xe3\x36\x5a\x6e\xe5\x13\x6a\x24\xb4\x56\x20\x48\x42\xaf\xb8\x43\x5b\x5f\x34\xf4\x02\x0f\x14\xf5\x68\x2a\xbf\x52\x4d\x56\x4b\xaa\x25\x6f\xd4\x2a\x92\x65\x31\x1a\x00\xa3\x12\x21\xf6\x0a\x01\xac\x6e\x11\xd0\x49\x64\x50\x48\xfd\xc8\x2a\x05\x53\x60\xad\x8e\x3f\x90\x65\x42\x90\x99\xc3\x84\x4c\x01\x80\x15\x16\x47\x65\x45\x9b\x36\xff\x62\x73\xc0\xdb\x5b\x81\x7f\x19\x93\xb7\x1b\x9d\xe9\x57\x92\x99\xef\x1d\x97\x77\x0e\xf5\x66\x74\xc5\xb7\xe9\x8f\x65\x41\xa5\x60\x85\x4c\x21\x25\x49\xb4\x4c\x32\x26\xd3\x6b\x27\x90\xab\x1a\xd5\x3f\xa4\x59\xf4\x25\x21\x73\x99\xa8\xee\xa3\x64\x76\x25\x01\x5c\xeb\xb9\x8e\x8b\xcb\x92\x2c\x38\xd7\x1d\xc4\xfc\xcd\xdf\xe6\x96\xa7\xca\x76\xb7\x12\x02\x99\xac\x99\xe7\x23\x99\xd6\x1d\xa6\x90\x35\xb2\xa7\xf4\xdc\xe9\x61\x18\xd1\xe8\xe2\x57\xcb\xcb\x20\xbf\x5e\xad\xf6\x51\x38\x70\xeb\x65\x38\xaa\x77\x94\x1d\x15\x37\xaa\x77\xf2\x37\xba\x65\x59\x30\x9b\xce\x94\x2a\x3a\x39\x78\xad\x32\xc5\xd7\xc9\xad\xa2\x27\xe3\xb5\xe7\x58\x31\x29\xd2\x09\xb4\x6a\x1b\xb9\xa3\x24\x8a\x34\xe7\x73\xcc\xff\x2a\x26\x52\x94\x13\xd7\x27\x73\xed\xfd\x9f\xc3\x17\x6a\xf5\x9f\xe4\x8b\xb1\x75\x8f\xd7\xe8\x51\xa7\x9e\x37\x2e\x7f\xe5\x5d\xb7\x73\x3a\xbc\xa0\x95\xf9\x08\xda\x02\xda\x6e\xde\x6c\x3c\x5a\xb1\x3a\x0c\x5a\x7c\xbb\x56\xea\x0e\xdd\x69\xaf\x9a\xea\x4d\xa7\x98\x73\x07\x71\x08\x62\xa3\x3e\x40\x20\x16\xb4\x2a\xef\x8c\x87\x16\x1a\xb0\xba\xe5\x51\x99\x43\x5d\x7a\xbd\xbd\xf5\x71\x38\xc1\xd3\x4a\x62\x11\x3d\x3b\x48\x9c\xb5\xd2\x2c\xd5\x4e\xe7\xf1\xd5\xd3\x32\x45\xb4\x06\xc4\xaa\xd5\x0b\xbc\xf7\x28\x05\x4a\x8a\x73\x64\xaf\x10\xec\x59\xbf\xfd\x8a\xc1\xb3\x35\x75\xbd\x6e\x59\x40\x31\x5a\x72\x4c\x55\x0a\x52\x4b\x71\x87\xeb\x45\x61\x2e\xc1\x39\xe4\xca\x50\xf6\x59\x26\x76\x27\x28\x95\x9c\xf2\xc7\x8c\xbe\x8e\x55\x6a\x3f\x45\x7e\x3f\x12\xb4\x64\x17\x19\xd7\xc2\x5f\x8f\x51\xa3\xfa\xe9\xc2\xb8\x51\xff\x72\xa0\x8c\x1b\x32\x6c\xcb\x0a\xb9\x1d\x3c\x70\x3d\x4c\xb7\x36\xbe\x94\xd4\xdb\x42\xc2\xee\x7c\xf3\x76\xaf\x7d\x5e\xd5\xc0\xb1\x96\x59\x6d\x62\x2e\xe4\xf8\x9a\x1f\x2e\x30\x62\x2b\x5a\x4f\xbe\xaf\x10\xb0\xd2\xa0\xad\xdf\xe3\xcb\xa2\xc4\x93\xe8\x4b\x5f\xb5\x01\xdd\xa6\xbe\x38\x55\x10\x7a\x57\x66\x11\x37\xf7\xd9\x32\x07\x17\xc5\x0c\x73\x1f\xe4\x90\x5f\x61\x4c\x3e\x65\x0d\xac\x74\x58\xcd\x87\x61\xa5\xe7\xb9\x6e\x78\x3c\xab\xa6\x19\x31\x59\xbd\x06\xe6\x27\x84\x69\x48\x4b\xd9\xf5\x02\x31\x3f\x05\xa7\xbe\x4f\x43\xa2\x6e\x0c\x02\x60\xd7\xb4\x09\x3e\x89\x35\xe9\xa4\xa2\x8c\x67\x4b\x5f\x26\xf6\x55\x85\x52\x7c\x79\x37\x9b\xc9\x7b\x86\xba\x65\xc0\x33\x9f\x42\x2c\xd5\x30\x00\x29\x18\xfb\xa6\x01\x56\x99\x39\xe2\xa6\x8a\x69\x1f\x3c\x0d\xcb\x62\x38\xdd\x5c\xa5\xeb\x60\x55\xf4\x53\x46\x91\xb7\x68\xb9\x11\xd1\x37\xda\x76\x27\x12\x2e\x15\x63\x31\x59\x02\xbf\x92\x7c\xe4\xb2\x90\xb7\xe1\x6a\xa7\xfd\x8d\xe8\x1c\xca\xe2\x2c\xb9\xcc\xdd\x7d\x95\x21\x4d\x6e\x43\xba\x22\xea\x2e\x79\xb3\x78\x8c\x1b\xca\x26\xa6\x8c\x1d\x1d\xea\x87\xa9\xc9\x8a\xf8\x75\xa4\xf3\x3f\x7f\x7a\xfb\xe6\x07\x44\x59\x60\x66\xe2\xaf\x93\x78\xec\xcd\xfe\xf2\xdd\x79\xfc\x0b\xfd\x8d\x07\xa5\x1e\x32\xfe\xb7\xb5\x2e\x4b\xc6\xbc\xf1\x64\x0a\x3d\xa1\x16\xa9\x0c\xcd\xde\x78\x32\xf9\x4f\xe8\xb1\xcb\xb9\x07\x39\x5d\xe1\x29\x9c\x9c\x1c\x43\xef\x7a\x91\x12\x81\x28\x17\x9c\x2f\xc7\x47\x47\x57\x57\x57\xc1\xd5\x77\x41\x46\xe7\x47\xcf\x8e\x8f\x8f\x8f\x64\xf3\xb6\x97\xb2\xef\x91\x67\x8f\x34\xbe\x4e\x13\xf2\xc5\xd9\xe5\xe4\xf7\xbf\xff\xfd\x51\xfb\x6b\xc7\x88\x57\x49\xcc\x2f\x3c\xe8\x3d\x7f\xbe\xbc\x36\xcf\x2e\x70\x32\xbf\xe0\xb5\x87\x97\x09\xbe\xfa\x21\xbb\xf6\xa0\x77\xbc\x7f\xbc\xff\xfc\xf9\xfe\xf3\xe7\xc5\x2b\x21\x58\xca\x22\x2a\x27\xc1\x89\x78\xf8\xbb\x29\x9c\x1c\x43\xef\xef\x7f\x27\xfb\xfb\xfb\xfb\xe2\xc9\x7f\x42\xaf\x84\x49\xf5\xb5\xd5\x24\x4a\x68\x24\x76\xcc\x82\x1d\x15\xa3\x9a\x0f\x45\xe2\xf3\xcf\xfe\xb3\xf8\x79\x23\x7e\x9a\x5f\x8c\xdf\x88\xbe\x9e\x8c\x14\x9c\x65\x74\x71\x98\xd1\x64\x9e\x90\xf1\xfe\xb3\xff\x5c\x5e\xef\x3f\x53\x4b\x11\xdf\xfe\xfd\x9d\xbe\x7f\xb2\xf1\xf7\x4f\x76\xfa\xfd\xda\xfa\x9f\x0f\x05\xc0\xf3\xfb\x82\xc0\x90\x19\x9c\xec\x76\x06\xcf\x2a\x13\x28\xe7\xd3\x01\x82\xe5\xb5\x9c\xc4\x7d\x7c\xff\xd9\xc0\xef\x3f\xdb\xd9\xf7\x9f\x6f\x0e\x80\xe7\xbb\x85\xc0\xf3\xcd\x41\xf0\x7c\xb7\x30\xf8\xee\xbb\x2a\x16\xf6\x4f\xe0\xbb\xef\x04\x12\xee\xec\x14\x9c\x6c\xfa\xfd\x93\x93\x5d\x7e\xbf\xbe\xfe\xe3\xa1\x00\x38\xbe\x2f\x08\x0c\x98\x81\x02\xc1\xce\x66\x50\x7e\x52\x9d\x83\x93\x01\x58\x78\x2c\xce\xc1\xc9\xce\x66\x50\x99\x40\xb9\x27\x1d\x13\x58\x5e\xcb\x8d\xb8\x17\x08\x0c\x9a\xc0\xf1\x6e\x67\xb0\xf9\x16\x74\xee\x80\xe7\x7c\x72\x27\x01\xe2\x59\x95\x78\x3f\xdb\xf4\xe0\x3e\x7b\x76\xb7\x83\xdb\xfd\xfd\x01\xc7\x46\x4d\xe0\x0e\xc7\xe6\x59\xc7\x96\x3d\x1b\xc0\xbf\xc5\x96\x3d\xbb\x03\xfb\x7e\xd6\x85\xb4\x83\x26\x70\xbc\xd3\x19\xfc\xbe\x32\x81\xdf\xf7\x7f\xff\xf7\xcb\x6b\xf1\xff\xbb\xf9\xfa\x77\xbf\xad\x1e\xda\xdf\x0e\x20\xdd\xbf\x15\x87\xf6\xb7\xf7\x34\x83\x01\x00\x90\x13\xd8\x19\x04\x7e\xbf\x31\x00\x7e\xdf\xb9\xfe\xfb\x27\x1a\xbf\xab\xcc\xf8\x77\x03\xce\xec\xef\x96\xd7\xfb\xbf\xdb\x15\xc0\x4e\xfe\x63\xd3\xef\x9f\xfc\xc7\x2e\xbf\x5f\x5b\xff\x77\xff\x31\x10\x00\xdf\xfd\xc7\x3d\x41\x60\xc8\x0c\x24\x08\x76\x37\x83\x2a\x08\x9e\x0d\xd8\x03\x01\x81\x67\x3b\xdb\x83\xea\xf7\x4f\x06\x00\x40\x7c\xff\x64\x67\xeb\xff\xee\x3f\x36\x06\x80\x00\xfe\x0e\x21\x50\x9b\xc1\x10\x10\xc8\x19\xb4\xc3\xe0\x1e\x08\xc7\x6f\xbb\xb8\xfd\xc9\x10\x75\x5d\xaa\x6a\x77\xe0\x75\x9d\x33\xf8\x6e\xe8\x0c\xbe\xdb\xd9\x0c\x4e\x9e\x6d\xcc\xef\x4f\x9e\xdd\x91\xdf\x57\x67\xf0\xdd\xe6\x33\xf8\x6e\xb7\x33\x38\xa9\x72\xdc\x93\x01\x2c\xef\x44\xb0\xdc\x93\x3b\xf0\xfc\x1a\x1e\x54\x99\xee\xb3\x01\x4c\xff\x99\xe0\xba\xcf\xee\xc0\xf5\x3b\x67\x30\x04\x06\x72\x06\xbb\x83\x41\x6d\x17\x86\xc0\x40\xee\x42\x3b\x0c\xee\x81\x80\xfc\xbe\xeb\xf8\x0e\x41\xdd\x67\xdd\xa8\x5b\x9d\x72\xf5\x97\x7c\x30\x85\xde\x05\x62\xaf\x2e\x51\xea\x8d\x67\x28\x65\x38\xff\x37\xb8\xc0\x1c\x8d\xd7\x0b\x69\x53\x57\x59\x5b\x06\x58\xee\x83\x8b\x73\xe6\x35\x02\x51\x1c\x65\x61\xca\x11\xac\xc2\xdd\xbf\xb2\xdd\xff\x43\x7c\xf4\x8f\xab\x8f\xff\x7c\x39\xcc\xee\x7f\x02\x27\xcf\x9e\x41\x4f\xd6\xa9\x49\xd1\x8d\x76\xfc\x08\xe0\x55\x20\x2d\x9a\xfd\x0e\x7a\x65\x39\x0b\xb1\x48\x15\x69\x22\x5e\xdb\xa5\x25\xa6\x70\xe2\xed\x1f\xee\x7b\xd3\xa9\x6b\xa0\xe7\xd0\x4b\x66\x1e\x9c\xc8\xe1\x48\xc6\xe5\x9f\xcf\xe1\xc4\x33\x4e\x13\xd1\x8d\xac\xd2\x54\xff\x03\xd7\xb5\x09\x1f\x43\x4f\xa1\x82\x9e\x79\xb6\xe2\x29\x76\x4d\x7a\x2a\xa6\x4b\xd1\x02\x73\x4c\xe5\xd2\xf3\xc6\x58\xcf\x25\xc2\x5c\x24\x51\x46\x97\x1a\x05\x3c\xf5\xd5\xc9\xc4\x4b\x62\x0f\x7a\x4b\x4c\x17\x89\xbc\x28\xc4\x3c\xe8\xc5\x91\xfa\xaf\x07\x75\xca\x0c\x56\xfc\x25\x97\x7d\x45\xd1\x72\x29\x9d\xbd\x72\x49\x76\xe7\xe9\x54\x3f\x14\x63\x58\x3f\xca\xbf\xcd\x88\xb5\x07\x02\x20\x53\xd7\xcc\xd1\x72\x79\x78\x99\xe0\xab\x72\xc6\x51\x8a\x18\x93\x13\xd1\xc0\xdc\x67\x17\xd9\x95\xe7\xee\x2e\x91\xe3\x90\xa5\x62\x0b\xcc\x00\x04\x2d\xd4\x42\x74\x3d\x1c\x57\x57\x09\xff\x92\x1c\x9c\xfc\xb6\xf0\x24\x96\x6e\xaf\x69\xf7\x36\xe8\xed\xbd\xeb\xf3\xca\x79\x17\xb4\x68\xf0\x71\xb7\x0e\xab\xfb\xa8\x77\xba\xf9\xca\xfa\xa7\x47\x28\x4a\x0f\xd5\xd5\xc1\x5f\xf9\xd0\xff\x69\xf5\x6e\x36\xff\xf3\xef\x3f\x0c\x3b\xf4\x7a\x0f\xad\x83\x3d\xa3\x18\xcb\x48\x0b\xb3\x1a\x83\x12\x65\xa8\x9f\x07\xff\x7f\xf6\xde\x7e\xbb\x6d\x9b\xcb\x1b\xfd\xff\xbd\x0a\x3c\x9c\xf5\xce\xd3\x4e\x29\x45\x92\xed\xd8\xee\xac\x73\x66\xb9\x76\xd2\xb8\x75\x12\x37\x76\xd2\xa7\x4d\xb3\xb2\x60\x12\x96\x58\x53\x84\x4a\x52\xb6\x95\x59\x73\xae\xe5\xfc\x7b\x6e\xe3\xbd\xb2\xb3\x88\x0f\x12\x20\x01\x10\xfc\x90\x64\xa7\xce\x9a\x79\x6a\x49\x24\x3e\x36\x36\x36\x36\xf6\xc7\x6f\x3b\x64\x90\xd9\xae\x08\xa1\x87\x66\x98\x95\x28\x63\x1b\x58\x78\x32\x67\x61\x16\xa6\x98\xad\xd4\x05\xf9\x13\x5c\xad\x40\xc6\x65\x2c\xdd\xab\x2a\x23\x4a\xe3\x8a\xa1\x1f\xe0\xc1\x34\xc6\xcb\x45\x31\xa6\x1b\xb4\xba\xc2\x30\xf6\x69\xa2\x50\xb6\x05\x09\x6a\x40\x3e\xbc\x20\x45\xf3\xec\x6b\x1c\x79\x33\x18\x91\x50\xbf\x8f\x19\x7f\xb8\x0e\xa9\x55\xca\xc6\x46\xeb\x96\xf2\x91\xd2\x79\xb3\xdd\x77\xe0\x3a\xb4\x16\x1e\x91\x4e\x3b\xee\x88\xb2\x34\x79\xb0\x68\x34\x17\x54\x0a\x41\xd7\xfe\x28\x52\x72\x57\x57\x2e\xcd\xe6\xc2\xa9\xb8\x55\x3e\x7d\x73\x1b\x5e\xbf\xfb\xf1\xf4\x77\x25\x9f\x3a\xff\xce\x83\x70\x2a\x1c\x5b\x1c\x1b\x7b\xee\xb8\xf6\x68\xd8\x77\x9d\x20\x5a\x2c\x53\x49\x45\x61\x4c\x42\x89\x41\xc4\xe4\x78\xec\x12\x29\xff\x71\x72\xe8\x7e\xe4\x3f\x7c\x76\xe8\xb9\x42\xa2\xfa\xa9\xf0\x25\x0f\x7a\x33\xe4\xdd\x10\xa0\xb5\x8c\x3d\x8a\x33\x0c\xfd\x95\x1f\x61\xfc\x91\x6c\xf5\xf3\xbf\x29\x8f\x54\xbe\x60\xad\xe6\xdc\xd4\x9c\xeb\x68\x03\x8c\xe7\xa5\x21\xd3\xf9\x52\x5e\xa7\x3b\x48\xa5\x50\x31\x42\x85\xf0\x0a\x85\x05\xa1\xc6\xae\x73\x8d\x63\x0b\x9a\x28\x9d\xe5\xc9\x02\x46\x65\xfd\xf1\xed\x02\x45\x65\x6d\x53\xf5\xb9\x3a\x96\x11\x1b\x4b\x3e\x0c\x12\x10\xee\x34\xe9\xfc\x98\xbf\x61\xd1\xbb\x1f\xdc\x6a\x74\x5f\xc2\x2c\xbb\xee\x58\xdb\x86\xf1\x98\xeb\x43\x10\x14\x1b\xb8\xa3\x28\xc8\x95\x86\xad\x8a\x81\xf1\x2a\x38\xfd\xf3\xb7\xe4\x52\x2d\x06\x48\x95\x4f\x12\xa1\x94\xa7\x1e\xe6\xdf\xe9\x45\xc4\x78\xd7\xdd\xed\x57\xd5\xdc\xa7\x7a\x71\x76\x1c\x56\xd8\x82\x75\x80\x20\x89\xc2\x67\x67\x88\x54\xc0\xd7\x75\xfe\x5a\xa2\x65\xb1\x63\x55\x4a\x98\x54\xcf\xb4\x38\xe0\xe8\x64\x3f\x51\x31\x30\xce\xc4\x80\x5a\x11\xab\x5e\xcd\x16\xd2\xee\xf1\x61\x0a\x07\xa4\x9c\x6e\x7e\x35\x71\xb8\xe0\xa3\xca\x22\xdd\xe7\x84\x42\x21\xbe\x43\x31\x01\xc5\xa2\xfd\x4e\xf8\x8c\x2e\xe9\x41\x99\x4b\x32\x20\xb6\x38\x60\x92\xab\xfc\xf6\x4e\x2e\x3d\xe4\x83\x52\x71\xab\x2c\x36\x70\x1a\xe3\xc8\x74\xff\x14\x95\x83\xea\x00\xc5\x43\xf8\x1f\x95\xf6\xab\x17\x70\xfa\xfd\xae\xeb\xac\x02\x14\xfa\x2a\x55\x98\xed\x69\xaa\x53\xcb\x74\x24\x93\xa6\x3a\x34\x7b\xa6\x21\x19\xad\xa9\xe6\xf2\x1f\x32\xb5\x46\x24\x66\x85\x23\xc8\x0e\xd0\x09\x22\xd5\x5d\xde\x24\xc0\x26\xee\x8e\x4e\xf5\x1e\x4b\x6d\x0a\x0b\xa8\x97\xa0\x9a\x87\x88\x79\x80\x32\xa2\x78\x30\x57\xb6\x19\xdb\xc7\xd9\x26\xcb\x03\x93\x7d\xfd\xce\x12\xee\x28\x36\xcb\xfc\xa9\x38\xe9\x54\x37\x1e\x2b\xb2\xea\x4f\x00\xb7\x7c\x65\x92\xac\x16\x06\xe2\xac\x81\x0a\xfb\x99\x1a\x24\x93\x1f\xc6\x01\x1c\xb0\x83\xd7\xf9\x21\x46\xd0\xf7\xe2\xe5\xfc\xaa\x7a\xca\x36\xa5\xe8\x55\xde\x56\x7b\xaa\x96\xfb\xb4\x39\x71\xdd\x36\xcb\xcf\xe4\x7c\xbf\x9b\x4a\x6d\xb4\x6a\xbe\x90\x75\x83\x4f\x31\x0e\xaf\xa0\x72\xf4\x39\x29\xb4\x6a\x31\x31\x73\xb0\x16\x06\x29\x9e\x4e\x09\xe6\x98\xa8\x41\x12\xcd\xf5\x0a\x6b\x4d\x99\x4c\x3b\xda\xed\x70\xe9\xb7\x5d\xd9\x06\x3b\xa4\x7c\xc8\xeb\x48\xd3\xd6\x88\xa1\x58\x24\xb5\xb6\xc1\x11\x9a\xad\x0c\x5b\xb6\xfc\x9a\x83\x7a\xf7\x2a\xaf\xac\xe7\xa4\xe0\xda\x5e\xa6\xc5\xdb\x85\xec\x08\x5c\xe3\xdc\x1a\x8d\xcb\x60\x0f\xb3\x96\x0f\xaa\x51\x59\x7e\x55\xd9\x1e\xed\xcc\x5e\x8a\x7b\x40\xc7\xdb\x44\x76\x76\xcc\x51\xb4\xdc\xf2\x75\xe2\xde\x3f\x7f\x9f\x86\xf3\xe7\x4d\xad\x0a\xd9\x9d\x8e\x71\xb7\xe2\xe6\xed\xe4\xd6\x23\x41\x63\x53\x3d\x77\x83\x56\x8b\x18\x11\xd3\xab\xf0\x24\xcd\x85\x76\x08\xf7\x30\x8a\x0d\x72\x82\x0d\xd2\x38\x98\x4e\x51\x3c\xe0\xd6\xa8\xe9\x32\xf0\xcb\xda\xa1\xb9\x05\xf2\x3f\xa6\xd7\x05\x61\x88\xee\x17\x30\xf2\x99\x69\x22\xe3\x99\xec\xbd\xfd\x4f\xd6\x33\x3b\x0e\x03\xef\xc6\x11\xd4\xf8\x3e\x2e\xb5\x7c\x26\xdd\x78\xd0\x83\x29\x0c\xf1\xf4\x61\x98\x61\x4f\x8e\x7e\xdf\xf3\xfe\x75\x7a\xff\xd0\xcd\xb0\x1b\x37\xbc\x72\x00\x2f\x36\x1e\xfa\x29\xb7\xb5\xc6\x31\x5c\xf1\x63\x66\x46\xee\xf9\xbc\x47\xae\x98\xd2\x1e\x32\x51\x7c\x14\x86\xe0\x9b\xa3\x68\x05\x2e\x48\x23\xdf\x92\x2b\x2d\x6f\xa9\xee\xe5\xe3\x38\x48\x03\x0f\x86\x80\xc2\xfe\x65\xca\x0d\xfb\xc6\xbe\x8d\x5f\x61\x1c\x05\xd1\xb4\x68\xe2\x8e\x7e\x61\xdf\xc2\x39\x4c\x12\xa9\x85\x05\xfd\x82\x5a\xd6\xcc\x5b\x72\xe3\x46\x68\x79\x7f\x75\xdc\xab\x64\xd0\x19\x6f\x0e\x12\x94\x6e\x79\xaf\xbe\x1a\xdd\x5d\x1f\x2d\x47\xe3\x36\x87\x86\xde\xce\x34\x2d\x94\x24\xbe\x1b\x18\xb4\xf2\xa7\x4f\xee\xc8\xd2\xb5\x69\x6d\x93\xa0\x54\x54\x9a\x22\x8a\x11\xd4\x98\x0c\xc6\x3d\xea\x53\x36\xba\x14\x9a\x2f\xd2\x95\x46\x93\x6a\x37\x96\x9e\x18\x5d\x62\xce\xae\x8c\x1e\x64\x04\x40\x21\xf2\x48\x65\x8c\xad\x32\xfa\x97\xbd\xe0\x87\xd3\xfb\xd7\x7b\x6a\x46\x27\x56\xa5\x1a\xbb\xea\xa4\x64\xf8\xae\x55\x97\x49\xbe\xbd\x66\x8d\x27\x16\xda\xb2\xd6\x1f\xc0\x8d\x45\xd9\xd5\x94\x64\x8c\xdb\x7b\x03\xea\x06\x4d\x3b\x6b\x3e\xe6\xca\xed\x7e\x81\xef\x50\xcc\x16\xbf\xe8\x07\x47\x78\x41\x00\x2e\x39\x74\x8b\x83\x17\x29\x8b\x2b\x60\x97\xce\xd7\xdc\x0e\xcc\x9e\x29\x7f\x3e\x17\xce\x7b\xf9\x90\xd5\x2a\x70\x98\x3a\x5f\x6a\xd4\x3c\xae\x1f\xe4\xcf\x91\x33\x66\x91\x5b\xc4\x9c\x33\x16\x17\x33\x1c\x3a\xae\xf3\x06\x83\x05\x4e\x92\xe0\x2a\x44\x20\x9f\x03\x8b\x78\x10\x35\x12\x43\x87\xdc\xe9\x45\x25\xd4\xc7\x4f\xfc\xfd\x7a\x81\x55\xb2\xa5\x59\x4b\x4a\x3a\x50\x9d\xb0\xe4\x56\x76\x93\x9c\xac\xe7\xdb\xaa\x6c\x2a\x5b\x4a\x4d\xd6\xa0\x4d\x1c\x1e\xfc\xcc\xe8\x6f\x86\xea\x93\x60\xcd\x82\x5a\x14\xae\x1d\x05\x35\xf6\xd1\x00\xf9\xc1\xf6\xa5\xf4\xec\xf2\xf7\x17\xcb\xef\x4e\x22\xb5\x94\x9e\x93\x92\x0a\x26\x29\xcd\xee\x7c\xb7\xab\x41\x36\xa7\x79\x40\x8b\x0a\xf0\xd5\xe7\x1a\x3a\xdb\x18\x5c\x8c\x16\x22\x88\x3c\xf0\x7e\xe1\xc3\x94\xf8\xa8\x19\x17\x32\x9d\x35\x8f\x48\x22\x3c\xc4\x3f\xb1\x70\x23\x85\xbc\xa8\x53\x5e\x6f\xd0\x6a\xb9\x30\xeb\xae\xd4\x9b\x15\x23\x49\x84\xef\x67\x77\x62\x5f\xfe\x8e\x1d\x4f\x87\xc5\xce\xaa\x6c\x2b\x18\xf9\x2a\x23\x56\x8c\xa0\x8f\xa3\x70\x55\xbe\x37\x8b\xcf\x24\xab\x28\x85\xf7\x65\x23\x97\xc1\x50\xab\x13\xfe\xb9\xc4\xa3\x3f\x21\x3f\x97\xea\x2f\x78\x05\xb7\x82\x82\x4d\x6c\x12\xd9\x28\x09\x77\x70\x22\x0a\xdf\x25\xea\xe0\xb1\xd2\xbd\x93\x08\xbf\x7c\x6d\x85\x85\x30\xc8\xb3\xb5\xba\xbb\x85\x4d\xd9\x75\x77\x47\xd7\x41\x3c\xa7\x8e\x4a\x3f\xc8\xee\x31\x5b\xde\xe5\x1f\xce\x2f\x5e\xc7\xf3\xdb\xf7\x7d\x5c\x3a\xec\x0e\xbe\x9c\x89\xb4\xb7\x04\x46\x25\x61\x63\xc3\xc8\x43\xa1\xf1\x18\x96\xf6\x17\x91\x9d\x45\xc8\x23\x8c\x98\xa9\xb4\xb2\x9b\x58\x4f\x0a\xdf\xbb\x8d\x91\x5e\x26\x41\x73\x17\x83\x35\xc9\x72\x4e\xd1\x92\x8c\x21\x91\x28\x48\xc6\x77\x1f\x53\xdd\xf2\x2f\xe8\x32\xbc\xa1\x9b\xcc\x86\xae\x1a\x7a\xad\x91\x42\x3d\xed\xdd\xca\x96\xeb\xba\x87\x17\xab\xc1\xd5\x32\x4d\x71\x34\xb8\x46\xc8\xbf\x82\xde\xcd\x96\x37\x31\xfc\xe1\xf6\xbb\xd5\xcd\x6b\x75\xb0\x25\x8d\x6b\x0f\x58\xb4\x85\xf4\x21\x59\x72\xbb\x19\x2f\xf9\x63\x0c\x78\xe3\xb3\xcd\x25\x17\xe7\x58\x1a\xb9\x98\x29\x89\x51\x18\x44\xca\x7b\x56\x5d\x80\x6f\x1e\x64\x60\xe2\xa7\xdd\xec\xb8\xcd\xa9\x2f\x18\x23\x2b\xf3\xf0\xc2\x60\x41\x2c\x83\x97\xd9\x95\xcc\x75\x68\x88\xb8\xe1\x1c\x63\x31\x0d\x36\xf6\xae\x1d\x77\x57\x7e\x90\xee\x8c\xc5\x2a\x17\x31\x85\x9d\xfc\x18\x2f\x56\xc0\x29\x69\x2b\x0e\x48\x31\x48\x67\x08\xe4\xa3\x74\x6c\x36\xe0\x9e\xbb\xa7\xdb\x73\xe3\x5d\xf2\x5b\xad\x26\xcc\x42\xd4\xb9\xe5\x8f\x1e\xad\x56\x2e\x9f\x3a\xb5\x7b\xc7\xdd\x95\x04\x9b\x71\xb1\xf9\x7a\x99\x57\x5b\x8e\x1e\x12\x23\x84\x48\x10\x8b\x32\x78\xe7\x18\x2f\x02\xe4\x8b\xe1\xf8\xac\x53\x45\x28\x4e\x6d\xc0\x89\xfd\x84\x58\x71\x87\xd6\xd3\x19\x6b\xa6\x73\x81\xe3\x78\xe5\x82\x04\xcf\x51\x3a\x0b\xa2\x29\xb8\x43\x51\x0a\xee\x62\x1c\x4d\x6d\x67\xb1\x29\x0d\xa9\x2a\x14\x7b\x13\xb3\x5b\x96\xae\x93\xc3\xc5\xed\x0e\x4e\x61\x2b\x15\xa9\x6f\xea\x76\x23\x2a\x45\x0d\x1d\x88\x67\xe2\xb6\x41\xc1\x76\x7e\xfa\xed\x17\x18\xff\x60\x0d\x0a\xb6\x50\x06\x74\x09\x1b\x3e\xd7\x74\x14\x57\xb8\xc3\xf2\x85\x8e\x33\x18\x7f\x74\x3c\x29\x99\xf4\x28\xc5\x1c\xf6\x13\x0b\x40\x61\x6f\x7d\x72\x3f\xee\x18\xae\x95\x85\x4e\x56\xde\xda\xc7\x94\xfe\xe0\x84\x34\xde\x7a\x6c\x5c\xc7\x6b\x31\xb6\x42\xa3\x16\x42\x93\xf3\xe6\x74\xce\xfd\xd6\x0c\xac\xe0\xbb\x8e\x8c\x1c\x24\x1e\xbe\x45\xf1\x6a\xe0\xcd\x60\xb0\x6d\x26\xde\x87\x7b\x27\xf8\x77\xf4\xa3\xd1\xa0\xed\xa3\x24\x65\x06\xc6\xe2\x3f\xf2\x97\xec\x53\xb2\x08\x83\x94\x78\x5b\x9d\x24\xf6\x84\x77\x48\xb4\x3b\x7d\xec\x1d\xb9\xce\x97\xde\xa7\x4f\x6b\x7f\x16\xff\x63\x48\x68\x20\xd6\xbe\xe4\x24\x48\x16\x21\x5c\xd5\xc6\xf3\xe5\xa1\xb2\xab\x10\x59\xc5\x41\x09\xf6\x86\x88\x9b\x04\x2c\x22\x75\xc6\xae\xf6\x75\x71\xa3\x83\xff\x16\xa2\xdf\xf0\x02\x7a\x41\xba\xfa\x1e\x8c\xc1\x3f\x82\x79\xc6\x1e\x30\x4a\xff\x53\x8e\x73\xcc\x4e\xaa\x69\x8c\x97\x91\x3f\xf0\x70\x88\xe3\xef\x45\xa7\xb3\x97\x24\x83\x5b\x48\x2c\x71\x83\xc1\xdd\x2c\x48\x0b\x43\x87\xd0\xe7\x7f\x8a\xcd\xe1\xd8\x47\x86\x46\x7c\xe4\xe1\x78\x40\x9f\x1a\x8c\x47\x23\xbb\xf6\x06\x31\xf4\x83\x65\x52\xd7\x2c\x7d\x6a\xb0\x63\xdd\x6c\xcd\x8c\xa7\x31\x5c\x0d\xf6\x6c\x5a\xbb\x1f\x24\x33\xe8\xe3\xbb\xef\xc1\x88\x82\x25\x8c\x16\xf7\x60\x04\xe2\xe9\x15\xfc\x66\xe4\x02\xf6\x7f\xc3\xf1\xb7\xc5\x6b\xff\x53\x13\x5a\xa7\xe5\x1a\xe4\x4f\xbb\x70\x0d\x7f\xdd\x82\x6b\xec\x07\xab\x30\xa6\xd7\xc6\x17\x93\x5a\xec\x89\xd6\x5f\xa4\x8d\xf4\x97\xe2\x27\x67\x93\x9a\x00\x67\x4e\x01\x26\x27\x1d\xb1\xae\x6d\x89\x08\xa4\x1c\x7c\x5c\x8d\x01\x56\xe5\xb1\xa8\xc2\xe5\x33\xe9\x22\xa6\x60\x63\x9a\x56\x8d\x71\x98\x06\x0b\x61\x9e\xef\x13\x04\x68\x21\xfa\x24\xbb\x09\x11\x90\x6c\x0f\x2d\x52\x90\xc6\xf0\xfa\x3a\xf0\xc0\x92\x44\x23\x9c\xed\x03\x2f\x0e\x52\x14\x07\x10\x24\x4b\x6f\x06\x60\x02\x16\x30\x9d\x81\x45\x8c\xae\x83\x7b\x94\x00\x1c\x83\x59\x9a\x2e\x00\x25\x55\x32\x54\x87\xd5\xab\xbe\xad\x8b\x8b\x05\xfa\xf0\x70\x36\x2d\x1a\x89\x52\x9b\x82\xc1\x17\xd9\x22\x26\x5a\x0c\x76\xc9\xde\x1a\x78\xd9\xcd\x30\xbf\x6c\x30\xe9\x8d\x23\x8f\xc5\x3e\xd1\x68\x7e\x7e\xaa\xeb\xcc\xb3\xe5\x40\xa9\xba\xac\xe4\xc9\x48\x19\x4c\xdf\x30\x5d\x49\xe4\x73\x7e\x9c\xad\x95\xd5\x2f\x78\x27\xeb\x67\xdf\xbc\x2b\x00\x63\x04\x88\x4e\x33\x5d\xc6\xc8\xa7\x25\x93\xc2\x20\x05\x41\xe4\xe1\x79\xc6\xc2\x31\xfa\x6b\x89\x92\x34\x01\xd0\x8b\x71\x92\x00\x3f\xb8\xbe\x46\x71\x76\x87\xe3\x50\xc8\x19\x0f\x27\xcb\xab\x04\xa5\x09\xc0\xd7\x00\x82\x8c\xf5\x43\xc4\x7f\x7f\x68\x2c\x7d\xe0\x3a\x09\x8e\xd3\xc1\x15\xa9\xf1\x4e\x8b\x63\x33\x09\x5b\xac\xb2\x6d\x00\xae\xc4\xf2\xfc\x7d\x2b\xae\x1f\x1f\xf6\xcc\xf5\xe3\xc3\xbe\xb9\x9e\x95\x43\x58\x2f\xd7\xbf\xe3\x9d\xac\x9f\xeb\xf3\xae\x08\xd7\x2f\x13\xca\xef\x54\xaf\x06\x77\xb3\xc0\x9b\xe5\xb5\xc1\x38\x27\x53\x16\x06\xb4\x6a\x15\x48\x60\x1a\x24\xd7\x2b\x90\xab\xee\xf9\xee\x78\x3c\x4c\x2e\x2c\x6a\x2b\x26\xe7\xef\xdb\x31\xf9\x41\xdf\x4c\x7e\xd0\x96\xc9\xcb\x48\xdc\x1c\xed\x7a\x3c\x1a\xfd\x6f\x87\x7d\x97\xa3\x5d\xe7\x5f\x8e\x05\xb4\xeb\x92\x5d\x74\x04\x46\xb9\x59\x94\x36\x46\xec\xa2\xfc\x2b\xd6\x96\x94\x5b\x3c\x22\xee\x57\x52\x4d\xf5\x28\x59\x20\x2f\x7d\x97\xdd\x23\xc9\x35\x20\x42\xdd\x0f\xe2\x5d\xd7\x09\x51\xca\xd7\xdf\xc7\xf3\x01\x29\x56\xc8\xa9\x2e\x8d\xfe\xdf\x98\xd5\x2e\x6b\xf7\xf4\xa4\x81\x33\xb6\x55\x0f\x6f\xd0\x7d\xfa\x86\x3a\x54\x5b\xf4\x43\xea\x21\x0c\x52\xac\x0e\x67\xcd\xae\x93\xab\x9c\xe1\x9e\xbb\xd9\x37\x39\xcf\xf9\xbe\x23\xfc\x50\x98\xb7\xc9\xce\x2a\x7e\xc8\x17\xcb\x9d\x94\xc6\x57\xb1\x87\xb7\xa0\x9a\x3a\x69\x2c\xd3\x03\x25\x63\x6a\xe0\x97\x79\x4c\xee\xcb\x75\xfe\xef\x1a\x92\x92\x66\x78\x2b\xc9\xed\x74\xe0\x2d\xe3\x5b\x64\x43\xb6\xfd\x82\x6c\xec\x13\x71\xe1\x93\xe9\x7f\x24\x97\xf2\x4f\x75\xad\xc8\xe4\xde\x93\x1a\xdc\x13\xf6\x88\xec\x9d\x90\xdf\x50\x2e\xd0\x5e\xcd\x02\x15\x16\x20\xa3\x11\x79\x5f\x9b\x7a\xf9\x5c\xfb\xcb\x9e\xf6\x17\xd9\x55\x20\x6d\xd3\xaa\x1a\xd1\xc7\x3e\x3a\x68\xba\x51\xf3\x31\xd1\x77\x89\xca\xd7\xb3\xf0\x18\x6d\x74\x6b\x4f\x74\x5b\x7b\xa2\xe3\x9c\x49\xf3\xad\x7d\x50\xec\xb6\x01\x9b\xa5\x14\xc6\x66\xb7\xd1\xed\xb7\x78\xce\x2d\xdf\x17\xcb\xcc\x2f\xb6\xf9\x7e\xd7\xd1\xb9\x7a\x47\xe1\x87\x16\xc9\x52\x5f\x64\x77\xd2\x28\x85\x14\x0a\x83\xb5\xf3\x6b\x71\x2e\xb5\x17\x17\x3b\xd2\xee\xde\xe9\x2c\x2e\x0e\xc5\xf6\x0e\xeb\x85\xc5\xa1\x66\xc5\x0f\xfb\x11\x15\xfa\x2c\xed\x89\xf6\x97\x91\x3b\xd6\xfa\xa9\x0e\x75\x3f\x94\xb5\x19\x4b\xdd\xa5\xac\xa0\x0f\x82\x28\x44\x69\x62\xa3\xb1\x8c\x47\x26\x0d\xa5\xb3\xfe\x51\x04\xb0\x24\x29\x8c\xd3\x64\x70\x17\xa4\xa4\xa4\x22\x1f\x2a\x63\xf3\xe7\x06\xc9\xd1\x87\x68\x32\xb5\x6f\x75\x4c\x3b\x66\x28\xd2\xa1\x8c\x25\xb8\xc7\x49\xef\xad\x9c\x32\xaf\xee\x6b\x78\x75\xdf\xc8\xab\xf5\x5c\xaa\x3d\xcf\x74\xdf\x3f\xef\x7a\x64\x09\x27\xca\xce\x7a\x4e\x94\x36\xba\xa2\x5a\xbb\xea\x61\xe1\x74\x0a\x89\x59\x1f\xa9\x5f\x38\xad\x52\xb1\xab\xfb\x61\xa7\x9b\x98\xc8\xed\x12\x0f\x5f\x4c\x94\x4e\xc3\xf1\x9a\xc5\x84\xa9\xfd\x0d\x8b\x09\x9d\x12\x63\xd6\x61\xea\xb9\x4d\x7b\x62\xd9\x22\x91\xd8\x18\x8d\xc4\x50\x10\x89\xce\xdc\x08\x53\xc9\x9e\x85\x5e\x1a\xdc\xa2\x4b\x6e\xa3\xc9\x6e\xce\xf4\x2b\x0a\xa7\x53\x9a\xe4\xf8\x20\x77\xcf\x95\x3a\xe0\x4b\xfc\x3d\x80\x57\x09\x0e\x97\x29\xfa\xcf\x14\x2f\xbe\xe7\xcc\xbb\xa2\x04\xb9\xff\xcf\x10\x5d\xa7\xf9\xb7\xf7\xfc\x5b\x47\xc5\xd3\x3a\x0b\x94\xde\xb6\x54\x98\xbc\x59\x54\xf4\xae\x30\x75\xa6\x14\xf9\xc8\x0b\xe6\x30\x24\xbb\x6f\x52\x32\x75\xfc\x6f\xb3\x0d\x63\xcd\x48\x58\x25\x47\x74\x47\xaf\x36\x9e\x0f\xae\x96\xd7\xd7\x28\x1e\x5c\x87\xcb\x64\x63\xe5\x94\x35\x6e\xed\x3f\x77\xa3\xbb\x9f\x5e\xff\x76\xbe\xbd\xc0\x97\x32\x41\xfa\x22\xef\x96\x09\xbb\xb8\x7f\xfe\xaf\x5f\xf7\x0f\x7e\x7d\x08\x84\xed\x46\xd2\x4a\x48\xe8\x76\x51\xdc\xbc\xf8\xcd\x8b\x77\xbf\xf4\x12\xcc\xae\x04\x54\x24\xaf\x11\x89\x92\x87\x30\xda\x1c\x77\x4e\xa3\x14\x5a\x1e\xcc\xaa\x8f\xf6\x16\x82\x78\x37\x93\x4b\x5b\x4f\x0f\x16\x01\xd9\x3b\x35\x58\x40\xef\x16\x69\xa1\x39\xff\xcb\x5c\x62\xcc\x39\x50\x92\x2c\x46\xd0\x5f\x55\x8e\xeb\xde\x28\x57\x9f\x67\x21\x84\xe1\xb2\x88\x35\x16\xc6\x5a\x43\x46\x6d\xa8\x5d\x27\xfa\x76\x17\x6a\x25\x61\xd4\x51\xb2\xe1\x78\x3e\x10\x00\x1f\xb7\x2a\xd8\xce\xe6\xab\xe7\xaf\x5f\xff\xf6\xaf\xed\x1d\x18\x32\x39\x3a\x92\xb6\x0c\x2a\xb2\x55\xda\x9e\x9e\x26\xbf\x26\x91\xd7\x1c\xa9\xba\x3e\x1f\x3c\x4f\x63\xd6\x83\x0f\xaa\xdc\xb4\x17\xf9\x6b\xda\x22\x0d\x25\xd8\x34\x02\xdc\xcb\xf3\xb8\x5b\x02\xf7\xe2\x88\x35\xda\xe6\xfd\x02\xce\xb8\xb8\x21\x73\x20\x60\x82\xe7\x59\x64\x1d\xe4\xc6\x53\x31\x37\x5b\x78\x4c\x4e\xd9\xe6\xad\xc3\x65\x8a\xaf\xb1\xb7\x24\xc0\x8c\xf9\xdf\x32\x2e\x9c\x4c\x6e\x33\xec\x5d\x3f\x9b\x42\x66\xe4\x6e\xbb\xa2\x0a\xfc\xbf\x5d\x08\xab\x77\x07\x5f\x5e\x1f\xbd\xfd\xd9\x18\xd3\x5a\x8b\xd5\x20\x6f\x97\x52\xc4\x83\x70\x27\xbc\x82\x51\x44\x41\x83\x34\x61\x10\x50\x62\xf6\x59\x8c\xae\x19\xa3\x66\x7f\x52\x1f\x08\x47\x83\x96\x6e\xa5\x06\xe7\x75\x51\x77\x29\x77\x5d\x17\xe5\x57\xfb\xa9\x35\xcd\x46\xc0\x0a\x54\x94\x90\xa0\xf3\x62\x15\x87\x2a\x87\xc7\x88\x78\x17\x9c\xd7\xe3\x9d\xe1\xe4\x60\x17\x8c\x9f\x0f\xc7\xfb\x07\x70\x32\x3c\xd8\x7f\x0e\xe8\xff\x8e\xc0\x18\x8c\x07\xc3\xd1\xe8\x60\xb0\x37\xdc\xdf\x1b\x03\xf9\xc7\xec\xe7\xec\x47\x90\xfd\xf8\x65\xbe\x37\xdc\x3b\x7c\x3e\x18\x0f\xf7\x76\xf7\xe1\x78\xb8\xb3\xb3\x03\xe8\xff\x92\x56\xc0\x68\x30\x19\x3e\x7f\xbe\x0f\xe4\x5f\xb2\xdf\x46\x80\xfc\xf2\x65\xbe\x3b\x3c\xd8\xcb\x7e\x9a\xec\x1e\xc2\xf1\x70\xb2\x3f\x06\xf4\x7f\x69\x03\xc3\xd1\x64\x7f\x30\x1c\x8f\xf6\xbd\x11\x18\x8e\x76\xb2\xaf\x87\xa3\xe7\xfb\x83\xec\xfb\xec\xeb\x2f\xf3\xc1\xf0\x70\x67\x7f\xb0\x33\xdc\xdd\x79\xae\x18\xc0\xf0\xf0\x80\x8c\xee\x70\xcf\x1b\x8e\x76\x76\x86\xe3\xfd\x09\xf9\xef\xce\xee\x41\xd6\xd4\xde\x64\x30\x1c\xed\x0f\xf7\x76\x06\xc3\xdd\xe7\x7b\xc3\xc3\xe7\x83\xec\x05\x30\x1e\x8e\xb2\xb9\xed\x0e\xf7\x27\x60\x67\x38\x39\xac\x36\x3c\xc8\x1e\x21\x2d\xef\x1c\x28\x66\x37\x1e\x8e\xc7\x59\x33\xbb\xe3\xfd\xe1\xce\xee\x24\xfb\x7f\xf2\xcb\x88\x0d\x7c\x32\x1b\x0c\x47\xe3\x9d\x2f\xf3\xac\x9d\x83\xc1\xce\x70\x67\x47\x31\xf8\xec\xb7\x83\xac\x8f\xc9\xae\x37\x1c\x8d\x77\x87\xe3\xf1\x2e\xf9\xef\x64\x72\x98\x8d\x7e\x67\x77\x02\x2b\x7d\x0f\xc6\xc3\xf1\x68\x92\x8d\xe0\x60\x32\xcb\x9e\x26\x24\x9a\xec\x81\xfd\xec\x7f\x55\x24\x1a\x3f\xdf\x1b\x64\xeb\xe7\x65\x63\x1a\x8e\x0f\x77\x06\x19\x89\x87\x3b\x07\x83\xec\xa7\xec\x97\xac\x89\xdd\x83\xc1\x78\x32\x1c\x1f\x8e\x55\x4d\xec\x8d\xf6\x07\xe3\xe1\xc1\x78\xd7\x1b\x66\xc3\xdb\xd9\x1f\x8e\x0f\x0f\x86\x7b\xd9\x90\x9f\xef\x0e\xf7\x0f\xb2\x05\xdb\x39\x18\xee\x66\x6d\x4e\x0e\x0e\x87\x07\x93\x83\xc1\x90\xf0\xc5\x68\x77\xef\x36\xeb\xf7\xe0\x4b\xc6\x92\x59\x93\x93\xe7\x19\x63\x1c\xef\x0d\x0f\xf7\xd9\xdf\x19\xb3\x8c\x86\xcf\x0f\xb3\x3f\xd8\x43\x23\x40\x7e\x27\xff\x53\x7c\xe9\x4d\x86\x87\x93\xc3\xac\xb9\x8c\x3b\xf7\x0f\x86\x87\x7b\x7b\xe0\x60\x38\x3a\x3c\x00\x93\xe1\xfe\xee\xe4\x6c\x7c\x38\x3c\x00\xbb\xc3\x83\x43\x38\x1e\x51\xc6\x1c\xb1\x0e\xb2\xb5\x19\xef\x0f\xc7\x3b\x3b\xe0\x60\xb8\xbb\xbb\x0b\x14\x0f\x00\xf2\xc0\x7e\xf6\xc0\xfe\x38\x1c\x0f\x9f\x4f\xf6\xc1\x64\x38\xde\x81\xd9\x66\x1a\x1f\x00\xf6\x1f\xba\x0c\x79\xb7\x3b\x3b\x5f\xf8\xee\xbf\x0e\xc2\xd0\x71\x9d\x7f\x7b\xf9\xf2\xa5\x78\x9c\x1c\x36\x38\x92\x8b\x13\x91\xe0\x11\x8a\xe0\xa6\x73\x18\x44\x83\x08\xde\x8a\xe8\xa6\x56\xd0\xfb\xa5\x64\xfb\x66\xa8\xa8\xb5\xa0\xf6\x8a\x61\xa9\xe2\xc6\x2e\xc9\xaf\xe0\x35\x8a\x96\x35\xc1\x5a\x96\x30\xcc\xfd\x0d\xad\x56\xb3\x52\xa2\xef\xcb\x6f\xea\x7f\xa9\xc3\x2a\x7e\x0d\x83\x48\x19\x87\x24\x58\x6e\x49\x7d\x1d\x3b\x5f\x8c\xd0\xed\x32\xac\xcd\xac\x90\x51\x25\x50\x74\x4b\xb2\x4f\xdf\xbe\xb9\x78\x7f\xf6\xf9\xcd\xc5\xf9\xd1\xf1\x8b\x8b\xcf\x2f\xde\x1c\xfd\x70\xf6\xe2\x44\x86\xdf\x11\x20\x5e\x8a\x12\x42\x3a\x90\x97\x06\x43\x17\x57\x35\x68\x3a\xfc\xbf\x8c\x63\x1a\x6b\xd1\x31\x3c\x18\xbd\x86\x11\x9c\xa2\x37\x79\xed\xa2\x2e\xe3\x37\x71\xd3\x58\x2e\x8a\xe4\x3a\xe5\x88\xfa\x1a\x13\xb4\x12\xaa\x63\x81\x6f\x51\xcc\x00\x4c\xc9\x40\x75\xbe\x1a\x63\x36\x2a\x83\xf2\xac\x29\x96\xa4\x9b\x6c\xed\xc4\xea\x51\x91\xa5\x75\x0d\x92\x01\x53\xd7\x1c\xdf\x1b\xe6\x45\xa5\xea\xbc\x51\xc6\x19\xea\xd1\xb1\x2d\x26\xa8\x49\x22\xfc\xe3\x8f\x54\xfc\x3f\xd5\xdb\x19\x25\xe8\xf8\x41\x3a\x43\xf3\x04\x85\xb7\x88\xc6\xc3\x46\x38\x25\x65\x84\xc8\xaf\xbe\x0b\x12\x0c\x92\xbb\x20\xf5\x68\xd2\x6e\x10\x86\xe4\x09\x2a\xbe\x69\xea\xf7\x32\x26\x71\xe0\x04\xf3\x56\x21\xc4\xca\x83\xb6\x74\x68\xe8\x17\xc4\x48\x4f\x7a\x44\xb5\xa5\xa6\xb0\xbf\x05\x95\x5e\x2a\xc0\xa6\x97\xd6\x3a\x0a\x37\xa4\x49\x25\x82\x37\x46\xd9\x25\x89\xc5\xf0\xd2\x44\x4b\xff\x28\x75\x2a\xb5\xcd\x5a\x0b\x06\x0b\x12\xf0\xc8\xd4\xb2\x8b\x4f\x69\x4b\xad\xec\x37\xee\xc0\x94\x31\x3a\xc8\x86\x62\xde\x3e\x9d\x03\xce\x62\xc0\x50\x1a\x6f\x0a\xaf\x78\x72\xe1\x20\x2f\x3c\xcf\x26\x91\xf1\x06\x4b\x19\x54\xde\xbd\xe6\xcb\x54\x1d\xf5\x54\xd4\xa1\x2b\xb9\x1d\xff\x1f\x47\x33\xb7\x4f\x65\x3f\xf9\xb8\xfc\xa0\x42\xba\xd6\x4f\xd7\x3e\xc9\x5f\x84\x3a\xd1\x1d\x25\x3d\xf3\x48\x65\x9b\x34\x99\x59\x2d\xe7\x6d\x91\x2f\xe8\x9d\x5c\x10\xf9\x45\x89\x41\xb7\xbc\xee\xf9\x40\x29\xc9\x0b\x51\x9a\xe8\x55\xb2\xe6\x6b\xdd\x63\xa5\x3f\xd7\xa4\xf2\xb4\x2a\x0a\xa1\x5f\x56\x83\xce\xc4\x9c\x0e\x25\x2d\x88\x56\x74\x94\x94\x24\x41\xce\xd0\x9a\x91\x55\x6d\x6a\x6d\x1a\x92\xb8\xe0\x5f\x8d\x76\xa4\x9c\x94\x95\x66\xf4\x38\x0e\xe2\x13\x98\x42\x0f\x45\xa5\x8c\x3a\x5d\xdf\xfa\x93\xb8\xcc\x8f\xdb\x3c\x61\xa5\x35\xcb\x23\x98\x1e\xe9\xe9\xea\x7b\x4e\x51\x8f\x2b\x9f\x85\xfa\x00\x1d\xaf\xf1\x00\xb5\xc1\x97\x69\x0e\xa0\x6c\x29\x5f\x2d\xf9\x45\xcb\x1c\xf2\xdd\x84\xe7\x64\x1a\x4e\xaa\xb6\xfc\xd1\xc0\x8a\x6d\x37\x10\xd1\x5b\xc4\x1e\xb6\xa2\xcc\xba\x68\x47\xb1\x18\xb6\x4d\xb8\xba\x51\x14\x5d\xbe\xa1\xd8\x11\xdb\x24\xd9\xcd\xed\xd6\xe9\x65\x1c\x42\xd1\xdf\xcf\x68\xf5\xec\x03\xaf\x16\xb0\x49\x82\x15\xfa\x8d\x4c\x3a\xe8\x85\x46\x66\xd3\xbc\x52\x14\x29\xd2\x3f\xb7\x8c\xc4\x5a\x42\x92\x6a\xb4\x99\x35\xc9\x06\x3a\x24\xd5\x88\xed\x38\xf9\xe8\xf8\x6c\xbb\x7c\x1c\x90\x52\x44\x22\xea\xf6\xd6\xf8\xd9\x6a\x28\x45\xbf\xa7\xc5\xe3\x1d\x29\xd8\x5a\xed\x6f\x64\x72\xae\xb5\x79\x2b\x0d\xc5\x76\xab\xdd\x71\x29\x0e\x95\x96\xe7\x93\xb7\xc7\x17\x9f\xdf\xbf\x3b\x13\xb3\x94\xa9\xf6\x43\x2c\xe6\x33\x14\x2e\x40\x84\xf1\x02\x45\x28\x06\x11\x8e\xd1\x35\x8a\x63\xea\x07\xa6\x8a\x53\x3c\x45\xa9\xe3\x3a\x9f\xaf\x42\x18\xdd\x08\xfa\xeb\x09\xf6\x96\x99\x0a\xc9\xea\x72\x6d\x8d\xfd\x13\x94\xa6\x41\x34\x2d\x2a\x2d\xad\x9f\xcd\xcb\x5d\x8a\x9a\x40\xfe\x4b\x8f\xcc\x5c\xff\x4b\xf5\x5b\xf5\x37\xfb\xd4\x91\xa3\xb9\xd8\x8e\x77\xdd\x1d\xbb\x46\xae\x31\x4e\xd5\x61\x04\xac\x2c\x5a\x10\x5d\x63\x63\xd4\x4d\x13\x1e\x3e\x7e\x7b\xfe\xdb\xbb\xd3\x1f\x5f\x5d\x8a\x8c\xec\x3a\xcf\x9c\x12\x33\xb7\xe2\xe3\xff\xf3\xff\x89\xf0\x00\xba\x8e\x7f\x7b\x71\xf4\x4e\x85\xc1\x04\x5e\xc1\x64\x16\x1c\xe3\x78\x61\x74\xbf\x55\xac\xdd\x34\xf4\x40\xdf\xf3\x87\x17\xef\x2e\x4e\xdf\xbe\xa9\x74\xa9\xed\xe1\xb1\xc8\x04\x61\xc6\x85\x39\xf2\x8f\xfb\x1d\xef\x1f\x83\x01\x70\x54\xa4\xf8\xf1\xf4\xf2\xf3\xc5\xab\xa3\x62\xdd\x07\x83\x3f\xee\x77\x0a\x18\x30\x36\xed\x3a\xae\xe5\x01\x93\xd8\x87\xe1\x20\x84\x2b\x32\x9f\x3c\x68\xb2\x7b\x24\x52\x39\x78\xa8\x63\x28\x12\x82\x61\x3a\x23\x0e\xe5\x01\xd9\x4b\x5b\xce\x43\x98\x44\x57\xbf\xbd\x7e\x3d\xb7\x8b\xd0\xd3\x39\x15\xc3\xc2\x40\x56\x94\xb7\x2a\xf9\x12\x85\x67\x8a\x22\x5a\xfa\x67\x84\x5a\x5d\x4d\xcc\x68\x2a\x83\x19\x61\x6d\x1a\x26\xe4\xbc\xc1\xe0\x55\xb1\x02\x79\x94\x1b\x0f\x2d\xfc\x82\x62\x51\xba\x8d\x2c\x74\x0f\xd3\x30\x7c\x75\x00\x63\x85\x07\x34\xb1\x59\x6c\x3b\x89\x8f\xf3\xda\x6a\xdc\x54\xc1\x03\xae\xa4\xe2\x6c\x9f\x4a\x8b\xf1\x6b\x8e\x02\xc2\x57\xc7\x2d\x2f\x96\xba\x46\x5c\x4f\xc3\x60\xeb\x5d\x0c\x83\x33\x80\x5b\xe6\x87\xb5\x0e\x83\xb3\x54\x31\x8e\x9c\xc9\xdc\x0a\xd3\xa9\x46\x52\xcf\x0d\x3d\x49\x9c\x12\x7f\xf4\x27\x71\xc2\x20\xd9\x76\xbc\xf5\x6a\x76\x8f\x97\x7b\xf8\xda\x18\xfc\x68\x8f\xab\xae\xc2\xb1\x35\xc5\x74\xa8\x91\x88\xb4\x51\x41\xd9\x23\xb4\x74\xdf\x0f\xab\x53\x06\x73\xe9\x95\x4b\x72\x94\x2b\x19\x69\x8d\xe7\xe2\x52\xe0\x65\x4a\x82\x9a\x38\xef\xe6\xd1\xcd\x70\xfa\x86\x99\xac\xb9\x7d\xf1\x22\x2f\xa1\x98\x29\xd1\x2d\x10\xe0\xad\x7c\xfa\x4c\x66\xcd\x76\x2a\x9e\x86\x3a\x2b\x67\x17\xab\xbc\xa1\xda\x6e\x19\xb5\xc2\x37\xdd\xc0\xf8\x33\x69\x35\xe2\x5b\x00\x65\x34\x05\x52\xf9\x95\x79\x17\x56\x12\xb6\x0e\x32\xbe\xa3\x33\xa8\xd5\xe2\x54\x3d\x76\x9a\x0d\xe1\xc5\xd3\x93\xae\x33\xc9\x9b\xd9\xce\x2c\x2e\x59\x51\x03\xdb\x29\xa8\xf0\xd5\x0a\xc6\xa4\xad\xa9\x30\xa9\x95\xfa\x0a\xab\x91\x8b\x13\x5a\x22\x97\x6b\xac\x29\x0c\x22\xa1\x40\x58\xde\x2a\x7d\x97\x55\x2d\x25\x61\xc9\x04\xe9\x6c\xe1\x29\xd3\x8b\x9a\x24\x67\x97\xe0\xe1\x08\x34\x4a\x9e\x97\xec\xbc\x20\x43\x1c\x52\x3d\x05\x04\x09\x48\x50\x4a\x8a\x1b\xc4\x4b\x44\x82\x60\x60\x18\x82\x18\x4d\x83\x24\x45\x31\xf2\xc1\xab\xcb\xcb\x73\x00\x23\x1f\x4c\xdf\x9d\x1f\x03\xf2\x1a\x81\xf4\xa4\x41\x34\x6c\xc2\x20\x9d\xc5\x78\x39\x9d\x81\x17\xd1\x2d\x5e\x81\x6b\x1c\x93\x88\x19\x76\x69\x81\x53\x14\xa5\x43\x41\x1b\x79\xc1\xc9\xd4\xc2\x02\xa3\x63\x9a\x5e\x19\xe9\x0d\x4e\x75\xa6\x66\xfb\xcd\xc0\x1a\x59\xcb\x56\xa8\x70\x61\x84\xd3\x01\xf3\x9b\xc9\x7c\xe6\xa4\x69\x68\x97\xe4\x67\xa4\xc8\x5b\x7a\xac\x74\xd8\x5c\xc5\xdd\xd6\xa6\x22\x57\xbe\x0b\x79\xc7\x32\xed\xe4\x32\x5d\x5b\xad\x72\xa2\xb8\xa6\xae\xaf\xde\xc9\xae\x6d\xbd\x93\x3d\xf9\xc1\x32\x2d\xc9\x20\x01\xd5\x15\xb2\xdd\x2f\x94\x35\xa9\xab\xdf\xb5\xeb\xee\xf5\x59\x36\x04\xa8\x8c\x1e\xa5\x5a\x1b\x3b\x9a\x5a\x1b\xa0\x28\x1f\x42\xa7\xf2\x0f\xad\x89\x4b\x51\xfe\xa4\xbf\x5a\x21\x36\x73\xd0\x95\x3f\x01\x76\x35\x43\x6c\x66\x54\x0b\x7d\x61\x10\xa4\x56\xd2\xd7\xf6\x95\x16\xd0\x1b\xbd\x27\x7a\x95\xaf\x27\xfd\x5d\x76\xb8\x86\xbd\xd5\xeb\xce\xee\xed\xcb\xf0\xfc\xd5\xfb\x5f\x3a\xe7\xcd\x1b\x62\xfd\x1d\x0b\xd0\x5b\xc7\xa2\x5a\xa8\xfe\x9a\x60\x95\xe2\xad\x86\x64\xa9\xad\x1f\xac\xbf\x00\x58\x26\x96\x67\x7d\xf6\xce\x8a\x94\x79\xfa\x63\xc6\xbc\x28\xfe\x36\x99\xf1\xf5\x0f\x3f\xac\x3e\x1c\xec\x4e\xac\x2b\xc2\xf8\x72\x22\x2c\xb3\xa2\x15\xe6\x67\x0f\x2e\x82\x14\x86\xc1\x17\x54\xc4\xda\x96\xc3\x4e\x4b\x12\x96\xe7\xa2\x72\x06\x90\xfd\x3f\xa2\x05\x10\x2f\x29\x5b\xe4\x36\x42\x07\x30\xfb\x5c\xd1\xf4\x81\xca\xea\x2c\x5a\xf8\xb8\xe9\xb9\x7e\xa4\x5a\xcd\xaf\xaa\x36\xf5\x45\x8b\x06\x53\x97\x66\x4e\x9b\xc9\x81\x87\x26\x6e\x01\xf4\x2b\x52\xe4\x1a\xc7\x73\x98\x0e\xa2\x65\xc6\x13\x95\xc6\xab\x13\xee\x7d\x13\x51\xa6\xef\x6d\x13\x21\x7f\x10\xa3\x04\x2f\x63\x0f\x6d\x79\x23\xfd\x88\xdf\xec\xff\x78\x3b\x7e\xdd\xb2\xcc\xfa\x2e\xfd\x22\x11\xb1\xaa\xcd\x36\xed\x3a\xcd\x27\xf0\xd4\xba\xaf\x65\xa5\x67\x8b\xe8\xc9\x20\x0a\xc8\x7a\x6a\x74\x73\x65\x54\x20\x33\xb2\x37\xad\x6c\x0d\x0c\x40\x57\x65\x4b\xbd\xe2\xe6\x7c\x39\x0b\x12\x10\x61\x1f\x81\x19\xcc\xfe\x10\x6f\xc9\xb3\x92\xf1\x5f\x0c\xa6\x55\x8c\xb6\x7d\x48\xad\x2d\x3d\x38\x96\x5d\x36\xac\x95\xf8\x4b\x4f\x74\x8a\x70\x34\xc8\x69\x35\x2e\xd3\xaa\x24\x38\x8f\xc2\x50\x80\xd7\xab\x0c\x89\xa1\x88\x1f\xb8\xce\x22\x5c\xc6\xb2\xa8\x53\x3e\x4e\xe6\x4b\xae\x4a\xce\x5d\x90\xce\xf0\x32\x1d\x30\xe9\xe3\x7e\x24\x63\x25\x6d\xe6\x5e\x88\x4a\x78\xa5\xae\x61\xf5\xed\xbc\x11\xc4\x4c\x7b\x8b\x65\xad\x31\xd5\xe8\xb8\x9d\xb0\x3f\x55\x57\x0c\xbe\x96\x69\x76\xa1\xa8\x5c\xb3\xab\x05\x17\x35\x86\x08\x65\xb4\xf8\x84\x60\xfa\xc5\x14\x57\x49\x47\xbf\xbe\x8c\xba\x57\xd8\x5f\xd5\xca\x09\xc1\x12\xb2\x96\xbd\x61\x8a\xdb\x29\x3b\x03\xb2\x7e\x96\x11\xef\xc9\xae\xfe\x51\x5d\x8c\x8f\x35\x1b\x54\x0b\x56\x16\x16\x7f\x73\x81\x89\x12\xa7\xe8\xf6\xb7\xac\x98\x54\x7a\x28\xef\x3a\xdb\x57\x8c\xf1\xce\x26\x5e\xb4\x8d\x9a\xae\x37\x21\x1a\x62\xa6\x4b\x76\x37\x21\x17\x57\x25\x51\x1a\x1e\x4b\x3d\x2d\xbc\x20\xa7\x0b\x21\xd8\xc3\x82\x17\xc0\xe1\x7a\x49\x8e\xd3\x19\x8a\xb9\xec\xed\x5f\xae\xeb\x80\x40\xed\x38\xa4\x4e\xf0\x8f\xaa\x13\x28\x98\xb7\xc7\xc3\xa9\x5f\xde\xac\x29\x11\xd2\x6b\x56\x55\xaf\x8a\xbc\xa0\x78\x77\x53\xe6\xf3\x20\xd2\x87\x81\x4f\xb5\x73\xf0\xe1\xc7\xf4\xbb\x5d\xd4\x18\x9f\x8a\x5f\xb0\xca\x68\x5b\xb9\x15\x99\xc0\x25\xc1\xab\xb0\x08\x43\x28\xa1\x2f\xe5\x40\x71\xc5\x93\xf9\x89\xc7\xc1\x96\x3e\x71\xbc\x2a\x70\xb5\x02\x17\x84\xfc\x00\xc7\xe0\x04\x25\x69\x10\xc1\x1c\x97\xaf\x1a\x30\x21\x0c\x31\x86\x7e\x80\x07\xb4\x32\x4f\x3e\xbc\x1b\xb4\x22\x46\xe4\x23\x6e\xeb\x96\x02\x26\x5c\xe6\xd0\x16\x60\x33\xd8\x96\x10\xac\xd8\x42\xa1\xfb\x62\xe0\x94\x0c\x89\x63\x28\xad\xa3\x45\xba\x52\xe7\x7a\x75\x67\xe3\x32\xcb\x75\x63\xe0\x30\x48\x32\x31\x11\x86\xc8\x7b\x00\x15\x7e\xf1\x8f\x7f\xbd\x3f\xbd\x5e\x68\x8a\xd3\x7b\x88\x20\xad\x18\xaf\xa1\x28\x6b\x7e\x90\x31\xd3\x2d\x1a\x24\x5e\x8c\xc3\x90\x72\x6d\xee\x99\x61\xe1\x08\x79\x00\xe8\x20\x21\x92\xd5\xa1\x0f\x0f\x42\x74\x9d\x16\x9f\x52\xbc\xc8\x3f\x1c\x33\xc4\x15\xc7\x0b\x03\x14\xa5\x17\xc1\x17\x74\x9c\x73\x13\x51\xcb\x28\x2f\x7c\x66\x0d\x67\x0f\x14\xac\xf4\x99\x36\x72\x96\x35\x5f\xfe\xf2\x12\x2f\x4c\x2c\x26\xf7\x5f\xe7\x84\x51\x0d\x2f\xd2\x40\x34\x96\x10\xea\x64\x25\xe0\x50\xa1\x53\x7e\xce\xd6\xc0\x90\xa1\x57\x0a\x8b\x16\xd1\xa4\xa9\x92\x44\x3f\x16\xa6\xae\x5d\x77\x52\x28\x64\x34\xb9\xad\x70\x1b\x31\x90\x2e\xf2\xf4\xe1\x96\xaa\x95\x97\x36\x48\xb7\xdd\x46\x63\x3a\x1f\x04\xfe\xed\xcf\x6f\x7e\x39\xff\xd7\x74\x77\xd6\x87\x1d\xbf\x8a\x30\x48\xeb\xaf\xe4\x37\xbc\x12\xc8\x51\x46\x05\xe9\xfe\xce\x0e\x65\xd1\x9c\xca\xbf\x12\xac\x8c\xc5\x43\xd2\xef\xbd\x20\x22\x91\x63\xc5\x51\xc0\xbc\x9b\xea\xc3\xb1\x85\x14\x01\x7e\xe8\xdc\x5c\x27\x7b\xb8\xac\xfb\x3a\x35\xc0\x45\xd9\xab\x9f\x3d\x0e\x3b\x54\x56\x33\x6b\x7c\x26\x16\x0f\xd8\x39\x56\x80\x05\xc4\x52\x75\xa4\x66\xc0\xa4\x8d\x38\x6b\x4c\x5a\x6c\x2d\xb0\x94\xcd\x08\x75\x56\x80\x7e\xc6\x57\xca\x54\x68\x3e\x44\x05\xa2\xaf\x16\x19\x5a\x7b\x74\xd0\x25\x94\x02\x80\x7a\x9e\xb0\xca\xa7\x76\xb8\x0e\xef\x97\x28\x6c\xfb\x10\xdb\x34\x14\x7f\xcb\xde\xd7\xab\x64\xbe\xfb\x53\x1c\x58\x3b\xbc\x2a\xb7\x51\x25\xfa\x1c\x85\x9a\x93\x77\xb5\x4e\x60\xf7\x2d\x68\x7b\x77\xc0\x0b\xab\xd5\x6d\xd9\x17\xb3\x18\x26\x68\x80\xfc\x20\xc5\xdb\x5e\xf8\xa3\xd1\xaf\xc9\xef\x3f\x3f\x9f\x9a\x21\x56\x19\xa8\xa9\x21\x82\xdf\xda\x7a\x98\x23\xf0\xda\x86\x6e\xd5\xe4\x07\xb2\xa7\x78\x78\x12\xbf\x1a\x8d\x27\x39\x67\xb0\x9f\x3e\xb9\x1f\x77\xd4\x6c\x15\xa3\x39\xbe\x45\x62\x54\x8b\x58\x72\x96\xfc\xc6\xf8\x29\x37\xca\x69\xc2\xef\x2d\xcc\x6e\xee\xc4\xae\x3c\x4b\x4b\x58\x67\x9d\xb1\xc8\x00\xe9\xac\x55\xb6\x2c\x76\x24\xf4\x7d\xa7\x0c\xe1\x5c\x87\x01\xad\x7c\xa9\x06\xf7\x99\x8d\xae\xfc\xd6\x0d\x5a\xf9\xf8\x2e\x32\xbc\xc7\x9f\x90\xdf\x2c\xc1\x3e\xeb\xc0\x3a\xf8\x35\xbf\x6a\xfe\xe4\x79\x21\x32\x4e\xb4\xd4\x47\x8e\x3d\x3d\x71\x8b\x0b\x48\x05\xa4\xba\x33\xac\x74\x8f\x07\x9b\x24\x97\xd4\x22\xee\x7f\xd9\x8a\x38\x1c\x06\xde\x6a\x70\x8d\xe3\xf9\x96\x05\x5c\x8a\xa3\xdf\xce\x96\xe7\xfb\x6a\x01\x47\x52\xb3\xc9\xff\xf0\xb7\x8c\x86\x80\xf1\xae\xbb\x5b\xd6\xe1\xaf\x33\xbd\x29\x41\x95\x00\xd3\x42\xfe\x19\x95\xbf\xbc\xdf\xaa\x3e\x64\x9b\x44\x65\xab\x7f\x9f\x93\x45\x11\x6c\x5e\x62\x39\xa7\x30\xc4\x77\x2c\x6e\xff\xd4\x47\x51\x1a\xa4\x2b\x66\xff\x8e\xf3\x2a\xda\x01\xfb\xe1\xbf\x84\x1a\x4f\x1a\xab\x5a\x05\x8d\xa7\xbe\x2f\x2b\x2f\x95\x0a\x35\x91\xce\xee\x08\xb0\x26\x01\x6f\x13\x04\x09\x60\x4b\x09\x28\x43\x82\xbb\x20\x9d\x01\x98\x17\xcc\x87\x57\x45\x99\x7b\x02\xf8\x35\x04\xc4\x29\x9e\xc0\x5b\x94\x80\x15\x5e\x92\x10\x46\x90\x06\x73\x44\x42\xc6\xd1\xf5\x35\x8e\xd3\xec\x87\x3f\xfe\x49\x2a\x90\x07\xd1\x94\x07\x85\x5f\xe3\x38\xfb\x33\x42\x5e\x0a\xae\x11\x4c\x97\x31\x4a\x86\x5a\x8a\xc8\xb3\xd2\xdc\x03\x89\x4e\x93\x17\x0b\xd7\x44\xc4\xf0\xc4\x1a\x21\x12\x37\x0f\x95\x06\x33\x98\x0c\x4a\x65\x51\x6a\xce\xe7\x7c\x3b\x5b\xc3\x25\x29\x0f\x2c\x5d\xba\xb9\xd9\xdd\xb5\x53\xc4\x02\xd5\x82\x04\x69\x8f\xad\x88\x15\x4b\xaf\x3a\x78\x78\xd3\xce\x47\x3e\xcb\x4f\x8e\x46\x68\xd3\xb1\x08\x9b\xb3\x6a\x2c\x90\xcf\x0a\x9e\x90\x25\x6c\x67\x65\x2b\xf2\x01\x56\x77\xc0\xd2\x59\x90\x87\x12\x94\x0e\x12\x94\xca\x1d\x92\x78\xf8\xbc\xf9\xbc\xf1\x8f\x45\x4a\x1f\x4b\x56\x1e\x4a\x95\x0f\x6a\xed\x13\x65\x42\x5b\xc6\x1d\xdb\xbb\x6b\xcc\xbb\xbc\xc7\x45\x1d\x15\xd6\xfa\xd2\x99\x3a\x0b\x7c\x1f\x45\x2a\xdb\x8c\x55\x18\x44\x65\x13\x97\x34\xb6\x52\x2c\x1f\x55\xdb\x52\x12\x1a\x5f\xd2\x38\xc4\x84\x9b\xd2\x4e\x2e\x90\xc2\x4a\xf8\x7a\x5c\x33\x4f\xce\xe3\x20\x49\x69\x2a\x40\x19\x29\x46\xb1\xfb\xd5\x7e\x72\x83\xd2\x58\x9b\x0e\x56\x5d\xaa\x7c\x0f\x09\xe3\xcc\xd1\x4f\xa4\xc5\x2c\x85\x38\x3a\x1f\xb3\xc7\x3e\x39\x16\x05\x37\xac\x74\x46\xd3\x75\x91\x2c\x44\x1d\x4a\xb9\x90\x78\xa4\x92\x67\xaf\xe1\x7d\x30\x5f\xce\xc1\x78\x72\x00\xbc\x19\x8c\xa1\x97\x31\xc7\x10\xbc\x86\x2b\x80\xa3\x70\x05\x82\xc8\x0b\x97\x3e\x02\x21\x22\xb5\x59\xc1\x37\xcb\xc5\x02\xc5\x1e\x4c\xc8\x69\xf2\x0c\xc7\x20\xc4\x77\xf4\x8b\x6f\xf9\x37\x34\x08\x31\x6b\x65\x99\xa4\xe0\x0a\x81\x65\x14\xfc\xb5\x44\x43\xc3\x1d\xc3\x90\xbf\xd5\x1f\x3b\x35\xc8\xd7\xd2\xc4\xe5\xe8\xc6\x43\x38\x26\xf0\xb9\x9f\xae\x61\xde\xa4\x52\xe4\xe8\x77\x65\xf9\x1e\x25\xf2\x81\xf5\xa6\x78\xb7\x0c\x51\xd2\x07\xee\x84\xeb\x3c\x9b\x2e\x03\x1f\x25\xcf\xa0\x17\x0e\x67\xe9\x3c\xfc\xb7\x78\x19\xa2\x41\xb2\x40\x5e\x70\x1d\x78\x85\xef\xb2\x17\x74\x8a\x6f\x5e\x1d\x9f\x81\x97\x24\xd8\xf5\x5b\x47\x61\x26\xd1\x17\x9d\x53\x9c\x6e\x4e\xb3\x24\xac\x3c\xf8\xd8\x2f\x2c\x1f\xb9\x17\x78\x15\xa5\xf0\xde\x11\x82\xf1\x64\x37\x2b\xb9\xe8\x51\x25\xc8\x99\x79\x61\xad\xfe\x43\xd6\xc7\xa9\x94\x84\xab\x39\x3e\xc8\x5b\x9f\x14\x29\xcb\x62\x8b\x75\xc2\xa6\x51\x1f\x06\x97\x6e\x59\x67\xd6\xcc\x70\x2d\xbb\x92\x36\xde\x65\x5b\xda\x85\x7e\x2a\x79\x21\x46\xd0\xcf\x84\x67\xc1\x05\x39\x77\x70\x89\xcf\x9d\xec\x8d\x96\x53\x60\x9c\xde\x97\xaf\x6a\xc8\xe6\xed\x08\xa5\xdb\xd8\x35\x63\x10\xe4\x37\x1e\xf1\x1e\xa8\x3c\x2d\x3f\xd5\x15\xb5\xab\xd3\x4a\x94\x12\xb1\x7c\xd9\x90\xe5\xa1\xb6\xb8\x85\x41\x1e\x7e\xc8\x18\x05\xf8\x05\x5c\xab\xc1\x1d\x51\x77\x4d\xa8\xd5\x00\x2b\x4a\x43\x90\x5c\x78\x78\x81\xfc\x4f\x3a\x2d\x5d\x0a\xa5\x2c\x76\x14\x7b\x4d\xc4\x87\xcb\x9d\x7f\x0d\xd5\xf4\x7e\x8a\xa2\xa8\x48\x7b\x14\x86\xf5\x11\x54\x36\x97\xee\xca\x74\x6b\x54\x70\x1d\x97\xf0\xd9\x0c\x8a\x7b\x69\x71\x61\xcd\xbf\x33\xdf\x31\x25\x4e\x69\x60\x09\x36\x1f\xe5\x65\x3a\x6b\x2c\xc5\x0d\x38\x4b\x00\x20\x16\x98\x4b\xb8\x23\x4a\xf0\xf1\x46\xce\x2b\x25\xce\x8b\x70\xf2\xd2\xd6\x3f\x51\x90\x66\x7b\x8c\x59\x77\x5f\xb7\x43\xc5\xaf\xbb\x0e\xca\xf8\xf7\x12\xa7\x18\xa8\x52\x1b\x34\xcd\xff\xbc\x0e\x22\x9f\xd5\x60\x78\xc3\x56\x9a\xdb\xf0\xf5\xec\x68\xaf\xf6\x3e\x58\xe6\x1c\xb3\x04\x5d\x32\x16\xce\x96\x02\x27\x3d\x0c\x16\x92\x9d\x29\xcd\x99\xc7\xb6\x0a\x7e\xc3\xb0\xfd\x5e\xb5\xe0\x2e\x57\x11\xc3\xd9\x70\x82\x12\x2f\x0e\x16\xd9\x8a\x81\x6f\xde\x92\xff\xc2\xf0\x5b\xed\xb9\x9f\xb5\x0f\x63\x04\x2d\xd9\xab\x68\x5c\xc5\x5e\xe2\xe6\x2c\x9e\x2c\x1e\x6c\x71\x3b\x17\xf8\xa7\xc9\x62\x15\x4f\xf5\xe7\xea\x15\xdc\x17\x1d\x5d\xbd\xb4\xa1\x04\x85\xc8\xdb\xbe\xb3\xf7\xfc\xd7\xcb\x68\x32\x09\x34\x39\xd6\x92\xb3\xd7\x75\xd0\x3d\xf2\x96\xc4\x1f\xe2\xc1\xc8\x23\x37\x4f\x5e\x6b\x99\x1c\x67\xd7\x41\x9c\x3d\x8e\x17\x0c\x70\x8a\x3a\xf8\x6b\xc2\x28\xbd\x59\x10\xfa\x02\x39\x0a\xad\x7f\x81\xb9\x27\x26\x2f\x42\xc3\x64\x8c\xe4\xac\xe3\x18\x52\x7c\x4b\x92\x17\x0b\x49\xee\x15\x7f\xf3\xd2\x2f\x19\xe7\x50\xc7\x47\x1e\x25\x7c\x8d\x63\xc0\xbf\x2b\x21\x53\x69\x62\x19\x1d\x1a\x53\x58\x51\xb0\x8c\xd9\x3d\x74\xbf\xeb\xc3\x23\x8f\x16\x8b\x70\x05\x60\x04\xd0\x3d\x31\xba\x4c\xd9\xa0\xba\x22\x45\xc5\x48\xed\x4f\xaa\xf7\x45\x59\x94\xa5\x50\x50\xc2\xde\xbc\x6b\x2b\x0a\xe5\x00\x38\x1a\x1c\x16\xa1\xbb\x01\xdb\x4e\xa6\x0a\x7c\x06\x79\x79\x4c\x08\x03\x22\x74\xc7\x57\xdf\x22\x37\x81\xd0\x5b\x8e\xaf\xe4\x74\xc3\x11\x5e\xa0\xc8\x71\x85\x4b\x9c\x46\xd6\x91\xe7\x72\x65\x4e\x31\x93\x35\x41\x95\x15\x9e\xc1\x49\xc5\xb0\x8b\xee\x04\x87\xe0\x7a\xd3\xd9\x74\xc0\x32\x92\x97\x98\xb7\x46\x3f\x51\x51\xa0\xf6\x14\xf2\xbd\x4f\x9e\x54\xee\x7d\x9d\x87\xb1\xd7\x3a\x29\x3c\x14\xce\x72\x09\x54\x11\x2a\x39\x18\xbc\x06\x74\x5e\x32\xcd\x5e\xc0\x5b\x06\x06\xaa\xb7\xd9\x96\x7f\x3a\x8d\x88\x11\x47\xbc\x4a\x94\x01\xe8\xe5\x60\x99\x64\x79\x35\x0f\x52\x43\xb0\x4c\x02\x6f\x65\x05\xe0\x53\x19\xdd\x8f\xce\xe5\xaf\x25\x5a\x22\x43\x4c\x60\xf6\xd7\x81\x0d\xf8\x8f\x13\xa3\x04\xa5\x55\x9b\x8b\x16\x3c\x4a\x4d\x34\x3b\x5f\x66\xed\xf5\x77\x11\xe3\x69\x8c\x92\x04\x64\xc7\x64\x8a\xe2\x79\x10\x51\xd7\x9b\x85\x13\xa9\xa4\x8f\xda\x4b\x2c\x18\xf9\x00\x66\x87\x85\xda\x13\xa3\x0e\xff\x6c\xc5\x7a\x1a\x86\xab\x61\x1a\xbe\x42\x1a\x9e\xd9\x2c\x3f\x1c\x53\x6d\xa5\x66\x35\x0e\x5a\x14\xdc\x6a\x2f\x2a\xf0\xa2\x06\x73\xcb\xc9\xef\x43\xfb\x8a\x2b\xb5\x6e\x12\xfb\x0d\x70\xab\x90\x0e\x90\x20\x85\x57\xcb\x10\xc6\x03\x1f\xa5\x30\x08\x13\xf1\x78\xe3\x57\x43\x51\xe9\xd2\x2c\x4a\x88\xa1\x7f\x4a\x6b\x08\x09\xcb\x57\x00\x87\x32\x56\xbe\x0c\xe6\xe8\x7b\x1f\x25\xbc\x22\xc2\xf7\x30\xfb\x53\x8d\x0e\xba\x5e\xf8\x4e\xa1\xce\xb9\xad\xab\xb3\xfa\xca\x89\xce\xe4\xd9\xe5\x5c\x89\xf1\x9d\xe5\x14\x7c\x6d\xa1\x00\x7a\xb2\x3e\xcb\xf6\x27\xbe\x2e\x52\x93\x15\xf5\x27\x2a\xe2\x93\xa6\xc8\x10\xcc\xcb\x06\xde\x85\x26\x85\x45\xc8\xe0\x02\x94\x0c\x91\x1f\xa4\x45\x0a\x8f\xd0\x65\x93\xd2\x51\xcd\xf4\x4f\xed\x90\x23\xd1\x34\x24\x18\xf5\xba\x0c\x43\x96\xf5\x66\xde\xb2\x03\xf2\x54\x5a\xb3\x59\x52\x53\xf9\xac\x63\x7b\xf0\x4f\x1c\x90\xf4\x3b\x17\xc8\xbc\x21\x5a\xbd\x54\x0c\xc2\xd4\x05\xda\xe8\x70\x38\x34\x04\x7c\x35\xb6\xae\x18\xf9\x9f\x0b\x22\x4b\xbd\xaa\xb5\x83\xb7\xe6\xec\xfd\x7b\x39\x79\x29\x0f\xb5\xf4\xef\x56\x78\xd4\xec\xe5\x15\x5c\x7c\x45\x98\x12\x71\xcf\x31\xb7\x1e\x1d\x4c\xee\xe3\xb4\xd3\xda\x6d\x1d\x8c\xd5\x61\x48\xdd\xf7\xe4\xcd\x2b\x97\xc4\xeb\xe0\xc8\xb3\x52\xf1\xd4\x59\x48\x6c\xb5\x99\xb5\x86\x30\x5a\xe5\x16\xcb\x8d\x3a\x19\x15\x8e\x62\x44\xa3\x1e\x97\xec\x8f\x3b\x18\x11\x38\x4d\x1a\x22\x0f\xd2\x59\x90\xf0\x50\xca\xeb\x18\xcf\xe9\x17\xa4\x50\xd4\x7f\xb5\xb9\xc4\x5a\x62\x91\xd6\x2a\xb3\xb2\xf1\x80\x14\x5a\x76\x9a\x25\x01\x64\x7f\x3d\xaf\xa6\x03\x88\x6e\x02\xc1\x46\xa4\xce\x0e\xd0\x31\xe7\xf3\x06\xb2\x8f\x19\x3e\x9a\x10\x44\x1f\x12\xab\xda\x9d\x0c\x49\x55\x23\xc5\xd5\xdc\xa6\x2f\xf6\xb4\xbe\xc5\xd8\x29\x25\x62\x1c\x53\x1e\x66\x9c\xa8\xdb\x0d\xcd\x06\xe7\xe5\x57\x85\x86\x83\xdb\x2d\x0f\xce\xea\xce\x91\xbd\xb7\xd7\x08\xd2\xb4\x83\xfb\xa3\x94\x67\xd2\x16\x36\xa3\x37\x5b\x3a\xb7\xf9\x76\xb5\xa7\x8b\x05\x78\xb7\x6a\x4c\xbf\x0e\x9e\xcd\xc7\x1f\x7e\xb9\xd1\x60\x0a\xf0\xab\xd3\x0d\x5a\x2d\x62\x0a\x1e\x01\xe3\x00\x9e\x65\xda\x4a\x88\xfc\x1f\x56\xec\x8b\x63\x1c\xa5\x71\xf6\x12\xfd\xf8\xe2\x7e\x01\x23\x9f\x78\xea\xf8\x9b\xc7\x61\xe0\xdd\x50\xd3\x0c\x05\x09\x20\x9f\x8c\x49\x0a\x87\x6e\xb9\xde\xb9\x48\xb8\x01\xbf\x71\x65\x6a\x89\x74\xe1\x92\x8f\x0d\x9a\x78\x5c\x94\x3a\xae\x02\x62\xe4\xa6\xb8\xf2\xf7\x9a\xdb\x1b\x35\x77\x56\xb0\xa4\x0b\xef\xa4\x08\xa4\x51\xc8\xaa\x92\x01\xa1\x10\xcb\x96\xae\x25\xdd\x7d\x52\x8e\x78\xe0\xa3\x12\x34\x49\x42\x81\x19\x4c\x16\x78\xb1\x5c\xb0\x4a\xb9\x8e\x2a\xfb\xa8\x80\x43\x66\x4e\x55\xba\x4a\x82\x51\x43\x48\x5f\x2f\xf0\x9f\xb3\xef\x48\x1f\x5e\xce\x05\x02\x28\xb6\xe8\x68\x2d\xa4\x52\xc3\xf4\x12\xab\x4a\xd3\x76\x46\xfd\x66\xee\xd4\x03\x45\x9e\x9b\x4d\x9e\xb9\x2e\xe9\xdf\x9a\x9d\x05\x78\x7a\x5b\x67\xb5\x2a\x48\x25\x59\x5e\x65\xad\xdb\x44\xa8\xf4\x39\x72\x6e\x04\x92\x72\x05\xec\xe6\x60\x36\x0f\xb5\x4c\x92\xaf\x14\x17\xa9\x4d\x77\x97\x18\xc9\xfa\x14\xab\xcd\x7d\xaa\xc4\xdb\x2f\x43\x55\xce\x8c\xb8\x45\xf9\x76\xdb\x2d\x6f\xb7\x90\x49\x61\x62\x9a\x52\xed\x47\x94\x8b\x61\x01\x7b\xbe\xc1\xd6\x93\x72\xe6\xd9\x61\xa5\x4b\x98\x6f\xcc\xd5\x39\xfa\x51\xe4\x3b\xa2\xea\x5a\x2b\xe8\xfa\xd9\xea\x56\x49\xae\x2e\x51\x76\xdc\xe7\x3d\xab\x12\x05\x7d\xba\xe9\x11\x12\xda\xd3\x56\xd5\x88\x83\x57\x6f\xfd\x17\x67\x57\x3f\x1a\x7c\xf2\xaa\xfc\x7b\x43\xd6\x61\xf3\xac\xb2\x80\x23\xa4\x08\xbf\x7d\x96\x81\x56\xea\x13\xc7\x64\xf3\x6d\x1d\x24\x50\x25\x57\xa6\x28\x50\x5f\xf6\x47\x54\x74\x0b\x5a\x6f\x2e\x32\x64\x02\x1b\xdf\xb6\xcf\x15\x16\xbb\xa8\xe6\xf2\x10\x5a\x01\xb2\xfc\x83\xc2\x72\x58\xe4\x59\x15\x14\x23\xb3\x56\xc4\xc2\xea\xa3\xbd\x24\x84\x9b\x4a\x58\x97\x90\x44\x6f\x0c\x3a\x64\xb6\x9d\x6a\x44\xb3\x9c\x84\xff\x49\xd1\x6e\xc7\xb8\x43\x2d\x7a\x99\x7d\xf2\x99\xce\x34\x57\x18\x63\xf3\xf8\x8a\x76\x30\xad\xe5\x08\xb1\xaa\xe7\xbf\x77\x08\x09\x41\xec\x74\x94\x5f\x28\xc1\x61\x26\x0a\x29\x30\xf6\x56\x25\xd8\x0f\x5f\xfe\xf4\xdf\xfe\x36\xd5\x60\x7c\x93\x88\x1f\x47\x30\x58\xe6\x7f\x68\x65\x9b\xce\xf7\x2a\x4f\xda\xaa\xb6\x43\x49\x1b\x9f\x14\x9f\x3e\xe9\x55\x34\xde\xcf\xf7\xa5\x40\x37\x85\x83\xa2\xa2\xbd\x42\x69\xe4\x4c\x17\x50\xd9\x9f\x1d\x6d\x15\xb9\x6a\x22\x80\x06\x6b\x5f\xe9\xf2\x7e\x09\x83\x30\x3b\x24\xed\xd5\x56\x4d\xf1\xcd\xeb\xbc\x21\xbb\x4a\x53\x76\x18\xab\xe5\x51\x8a\xc9\xca\x42\x8f\x65\x27\x50\xb7\x86\xea\x8b\x07\x5b\xd4\x51\xdb\x77\x1d\x6c\x0b\x72\xa2\x18\x1c\xe1\xfa\xe6\x49\xd5\xf5\xc5\xd1\xcd\x72\x72\xb7\x26\xbc\xd6\x46\x50\xee\x5a\xd9\xa6\x4c\xdf\xda\x3b\x87\x2c\x35\x4e\x3d\x68\x31\x23\xfd\x71\x26\x76\x62\x12\x9d\xd5\x14\xbc\xb8\x7a\xbd\xb0\x5a\xec\xbc\xc7\x36\xa8\xd8\xdd\xe5\x94\xd6\x87\xaa\xe4\x77\x0b\x31\xa5\xf2\x0a\xbf\x43\x7e\x10\x23\x2f\x6d\xe6\x1b\xd6\x08\x98\x38\x6f\xac\xc6\x3b\xe7\xa7\xa6\xfa\x7f\xef\xaa\xcd\x88\x5f\xe9\x59\xde\xa6\xc2\x9b\x68\x37\x57\xf9\x7f\xeb\x36\x93\x7e\x93\x55\x89\xdb\x40\x72\xdb\x90\xd7\x2c\xbf\xb5\x04\xae\x95\xe2\xa5\xc1\xb6\x12\xe0\x0d\xda\xb0\xc5\x81\xb0\x58\xca\x66\x72\xbc\x3a\xc6\x86\x22\x5c\xb7\xd7\x4d\x5e\x1a\x0b\x80\x0c\x0b\x68\x0c\x15\xbf\xd5\xa3\x36\xd8\x70\xb1\xf9\xb7\xb6\xce\x0a\x63\x65\x90\x56\x9b\xa3\xd9\xae\xed\xba\x91\x1e\xff\x36\x6a\x26\x0f\x37\xba\x85\x9a\x6d\x20\xf3\xf6\x99\x58\x6e\x9f\x3a\x46\x2e\x63\xb8\xb5\xd9\x1e\x8d\xb6\x4d\x2f\xcc\xde\x18\xd8\x44\x37\xe8\xa6\x37\xeb\x76\xe9\x3c\x7d\xdd\xb9\xc5\x5b\x63\xc7\x5b\x37\x0e\xd1\x43\xc0\x34\x3b\x99\xde\xcd\xcf\xd2\xb3\xa4\x0f\x8c\x65\xa3\x21\xd1\x60\xaf\xb3\xc1\xb6\x31\x20\x90\x3c\x50\x70\x9a\x42\x19\xce\xd6\x9a\xe3\xd1\x3c\x2a\x34\x9a\xc9\xde\xf3\x07\x83\x46\xa3\x67\x80\x47\x06\x27\xa3\xde\x06\xdb\xcf\xe0\x2c\xf1\xab\x9c\xb4\xb9\xe5\x94\x4d\x05\xde\x79\x45\xd8\xe4\x20\xc1\x3c\x26\xd8\x29\xe7\x5b\x08\xdf\xab\xcc\x7d\x95\xbc\xa6\x73\xe1\x85\x0a\x5b\xda\xf9\xeb\x8a\xd4\x40\x95\xc7\x4e\x48\x7c\xb1\x8a\x2c\x28\x09\xdd\x66\x58\x68\x72\xa2\x54\x35\x6f\x52\x4e\x98\x2c\xe5\x46\xaa\xb3\x21\x25\x46\x28\xa8\x65\x19\x66\xb9\x96\x13\x9a\x1f\xab\x3d\x9c\xce\x0f\x24\xd3\xf6\x5f\x97\xbf\x4e\x4e\x67\x2b\x68\x95\x69\xcb\xff\x9b\xc7\x0c\x09\xd9\xfa\x79\x9e\x2d\xf1\xf6\x56\x83\x82\x4a\xe9\xb7\xaa\x9c\x5b\x5d\xf2\x22\x4f\xd8\xad\xcb\x5e\x24\xdf\xcf\x97\x85\x89\x8d\xf4\x20\x7a\x89\x88\x63\x51\x4a\x6f\x24\x6b\xb1\x8e\xe4\x46\x5d\x6a\x3e\x1f\x93\x3c\x18\x2b\x43\x9f\x3a\x37\xf2\x1d\x6d\xa6\x1b\x8e\x61\xb7\xb4\xcb\xf5\x64\x62\x8a\xe2\x53\x17\xb1\x52\x46\x03\xf8\x4c\x5a\xf9\x4c\x49\x5b\x8b\xe2\x47\x1e\x16\x60\xfc\x38\x8c\x17\x5b\x19\x1b\x97\xa5\x7e\x49\xd7\x84\x85\x62\xa8\xd3\xb1\x4b\x07\x60\x48\x53\xe5\xc2\xb5\x3e\x31\x35\x17\xc3\x2d\x36\x05\xcf\x59\xd6\xad\x2a\x1b\xab\xf6\xac\xe0\x05\x81\xcd\x87\x06\x7b\xaa\x26\xa5\x5e\x7f\x88\x34\x9e\x96\x5d\x84\x9a\xf1\x2e\x42\x12\xc4\xb5\x5c\x9b\xd3\xcd\x9c\x69\xde\xd4\xbf\x62\x9b\x50\x6e\x7d\xc7\xaf\x0f\x0b\xee\xf4\xa6\xf1\x5a\x64\xdc\xf6\x12\x01\xdb\x6c\xfc\x82\x38\x8d\xb7\x7e\xfe\xea\x16\x36\xbf\x5a\x09\x93\xc5\x00\xd3\x1e\x0b\x69\x40\x33\xf8\x42\xf4\x91\x3e\xfe\x89\x6b\xde\xf4\xe3\xcb\xaa\x64\xa8\xea\x5d\x6b\xcd\x4b\xaf\x01\x7a\xec\x70\x8e\x3e\x25\xb8\x57\xf2\x04\xc6\xa3\x07\x95\xe1\xee\x6c\x30\xb7\xbd\x5e\x6c\x1a\xb2\xda\xb5\x37\xe0\xc7\x92\xc9\xde\xcf\xc2\xdb\xa5\x95\xd4\x6a\xa1\x6d\x37\x66\x0e\x9b\x53\xdd\x9a\xc2\x4f\xd5\xcd\x29\xfc\xd8\xff\xf6\xf4\x83\x64\x01\x53\x6f\xe6\x14\x3b\x35\x23\x6e\x1c\xc3\x55\x79\xe0\x06\x3d\xc5\x0c\xb8\x6e\x7d\xd9\xb1\xdc\xab\x2a\x42\x3e\xed\xd6\xf2\x6e\x55\xb2\x5b\x0f\xfb\xd5\x62\x35\x9b\x6f\x39\x93\xf7\x63\x64\xaf\xcc\xb9\xdb\x03\xc5\x62\xd1\xc0\x02\x24\x16\xfd\xa6\x16\x10\xab\x7f\xd8\xab\xac\xe3\xb5\x81\x5e\x19\x03\x8f\x6d\x81\xa7\x24\x7b\x46\x23\x6c\x5c\xe1\x8e\x10\x57\x4c\x0a\xd5\xdd\xd3\x91\x0c\x0d\x80\x46\x0e\x1b\x00\x8d\x1c\xf6\x09\x34\x22\x56\x05\xce\x59\x1d\xdf\x25\x22\x1f\xef\xfd\x4d\xf0\x43\x44\x3b\xfc\x36\xf1\x43\x0c\x41\x8f\x4d\x90\x3d\x32\x0e\xef\x09\xd6\x43\x7d\x71\x6e\x3e\x83\xa2\x2f\xd9\xe9\xb1\x76\x18\x0b\xc3\x35\x8c\x58\x69\xc4\x44\x56\xfe\x72\x91\x76\x24\xa2\xef\xa8\x92\x2e\x55\x37\xe7\x22\x5d\x32\xcf\x68\xa2\x63\x25\xb0\x0a\x6c\xbe\x66\x8d\xb4\x08\x19\xad\x34\xc2\x01\x0c\xd6\x67\xdf\x79\x8d\xe3\xae\xc7\x00\xcd\xfe\xb2\xc8\x9e\xaf\x46\x95\x08\x19\x32\x11\x8e\x34\xe8\x82\xfa\xbd\x21\x67\xa0\xb1\xd8\x76\x06\xd5\xc1\x33\x5b\x9c\xc1\xd8\xe9\x73\x1f\x8d\x5c\xe7\x85\x1f\x18\xc2\x1c\xeb\x03\xb9\x6a\x69\x20\x1e\x91\x7e\xc6\x90\x31\x5e\x56\xbc\x71\xea\x76\x75\x76\xba\x3c\x5d\xad\x31\xd5\x48\x9e\x0f\x4b\xa7\x16\x73\x6b\x0d\x70\x0c\x9a\xc1\x69\x72\xa3\x78\xf6\xa0\x45\x88\x91\x16\x20\x5d\x04\xdb\x80\x21\x8a\x53\x70\x07\xe3\x88\xe8\xb3\x96\xc1\x7f\xe6\x1c\x4b\xe5\x2b\xb5\xa5\x97\xcb\xff\x38\x9e\x02\xa5\x99\xb1\x79\x53\x98\x21\x68\x8a\x43\x41\xff\x59\x01\x8d\x64\x6b\xf2\x5f\x1d\x46\x66\xf7\x84\x2e\xd4\xdb\x38\xd7\xd2\x9e\x69\xb8\x41\x4a\x8d\x29\x12\xcf\xab\xdc\x5f\xd1\x54\x0b\x60\x0d\x39\x76\x5c\x2f\xd8\xf7\x2d\xf1\x4d\x54\x26\xd2\x4a\xfe\xb9\xcd\x5e\xb3\x5d\x86\xe6\x51\xb2\xa0\x91\x98\x31\xdc\xed\xda\x0e\xb9\xee\x89\x7a\x21\x64\x27\xb1\x15\x68\x32\xee\xbe\xdb\x18\xbd\xd0\x08\x3d\x22\x60\x85\x6c\x05\x21\x44\x72\xdc\x77\x8d\x01\x58\xa6\xe8\x21\x24\xc5\x9d\x1d\xce\xde\x26\xde\xbf\x42\x73\x00\x80\xf0\x1f\x55\x22\x1c\x54\xe7\x4d\x14\x73\x6c\x90\x39\x52\xcd\x63\xb3\x4c\x9f\x53\x94\x9c\x94\x5d\x06\x0b\x98\x5d\x6c\xf2\xdc\x51\xd7\x79\x56\xb8\x6b\x92\x19\x8e\x53\x53\xed\x49\x53\x0e\xcf\x49\xb6\x42\x01\x8b\x6f\x78\xcd\x8c\x7e\xaf\x2e\x2f\xcf\xb3\x8f\x28\x9d\x61\x3f\xe9\x25\xbd\x47\x24\xee\x3c\xeb\x66\x30\x67\xad\xdb\xe6\xfe\xd8\x8c\xb4\x49\xa1\x93\xa0\x41\xe8\xbf\x4d\x68\xbf\xfd\xad\xa6\x54\x04\x46\x7f\x30\x3a\x95\x98\x77\xd5\x13\x3c\x50\x8f\xf1\x48\xca\xe2\xd3\x55\x77\x2f\x95\x4c\x74\x2c\xc2\xd2\x15\xdd\xe4\xac\x68\xd7\x4f\xf9\x9b\x32\xb5\x3a\x31\xea\x2b\xb6\xa3\x1a\xf2\x29\xb7\x28\x71\x43\x89\x96\x55\xe9\x8e\x55\x28\x1c\x9a\x1d\x5d\x4d\xa0\x62\x23\x34\xe4\xa8\xee\x96\xc9\xff\xaa\xe8\xd4\xd2\x14\xac\xe4\xa4\x96\x3b\x8a\x0f\xd8\x3a\xc1\x55\xcf\xa3\xa2\x8d\x40\x55\xcc\xa6\x4f\x06\x3d\xe0\xa2\x7b\x4e\xa7\xf3\x51\x80\x0d\x8a\xb4\xc8\x9a\x75\x5b\xb7\x9a\x8a\x50\xc7\xce\x96\x75\x4f\x9a\xb1\xf9\x2f\x4b\x14\xaf\xce\xb3\x66\xd7\xc7\xea\x7f\x65\x7d\x14\x71\x9a\x2d\xd9\x9d\x8c\x14\x9c\x6b\x9a\x31\x30\x7d\xf9\xc5\x2d\x70\xbe\x40\xe5\xbe\xb9\xbf\x2e\x4f\x6a\x2d\xdc\x3f\xee\xca\xfd\x75\x99\x26\xdb\xcd\x3c\xc9\x15\xb5\x6e\x4a\x6d\x82\xbc\x18\xa5\x39\x6a\xda\x56\xf5\x5a\x74\xb4\x9c\xfd\xf5\x53\xfa\x53\xd3\xd4\x93\x7a\xd7\x4b\x8c\x6e\x11\x0c\xcb\x3b\xd2\x51\x46\x2c\xd9\x15\xa0\x32\x78\x65\xde\xe5\x9d\x29\x5e\x28\x25\x5a\xb0\x00\xee\x72\x68\x7b\x2f\x2c\x22\x2d\x6d\x57\x2e\x29\x21\xd2\x6e\x97\x51\xbe\xcc\xee\x7f\x78\xf9\xfe\xee\x44\xc9\x28\x15\xf6\x18\xb9\x1c\x51\x17\xfc\xf1\x87\xc3\x65\x46\x11\x5b\x26\xc9\x06\x07\xfc\x37\xf1\x94\xa5\x0c\x89\xf6\xff\xca\xde\xb9\x8b\x83\x14\xfd\xf1\x47\xb6\x3e\xff\xf3\xc7\x1f\x91\x6d\x6b\x83\x24\xf0\x91\x07\xe3\xc1\x22\xc6\xf7\xab\x46\x6d\x7f\x5e\xc4\xe8\x3a\xb8\x07\xe4\x07\xe5\x7b\x31\x82\x7e\xf1\x5a\x84\xfd\x66\xef\xf4\x24\x86\xca\x8c\xd1\x91\xcd\x70\x9c\x72\xb8\xc2\x2d\xb3\xd8\xe5\xf2\xf9\xbb\xf3\xfd\x24\x6a\x21\x8b\xac\xa0\xfa\xc4\xa9\x0e\x0a\x9c\xa7\xec\xac\x46\x21\x69\xee\xd4\xaf\xd8\xcb\x78\xcc\x23\xf7\x06\xea\x8a\xd7\xcb\xad\xf3\x76\x23\x31\x3b\x6a\x23\xa1\xcd\x42\x00\x46\x1e\x5b\xa9\x53\x2d\x5a\x11\x8e\x42\x31\x04\x38\xaa\x23\xde\x3a\xab\x11\x9a\xce\x7d\x93\x0d\xf1\x40\x43\xa0\xee\x33\xee\xca\x6c\x55\x8b\x8a\x32\xdd\xa8\xbf\x93\x4a\x18\x5f\x47\x09\xb2\x08\x83\x34\x7d\x18\xd8\x55\x81\xf7\x22\x98\xfe\x78\x35\xb2\x3b\xa5\xb4\x26\x39\x79\x4a\xeb\xb6\xca\xa9\x2f\x3e\x2d\x81\xa4\xea\xf2\xf6\xfa\x61\x1e\x91\x3e\x1d\xb9\x27\x85\x69\xf2\x10\x58\xe7\xe0\xec\x5f\xa7\xc7\x77\x6f\x56\x7d\x24\x61\xeb\x7c\x89\xc2\x64\x5b\x72\x46\x1d\xf0\xeb\x3c\x88\x82\x41\xd6\x8d\xca\x6b\x4e\x86\x6a\x9b\x57\xd0\x1e\x62\xb6\xd7\x6e\x02\x4f\x1d\xff\x64\xd9\x89\xea\x4a\x50\xd7\xa5\x2e\xd9\xca\xaa\xcb\xf5\xec\xb7\x9c\x6f\xba\x6d\xb6\x14\x5e\x0d\x22\x78\xbb\xe5\x9d\x16\x7f\xf9\x3d\x3e\xba\xdd\xbb\x6e\x08\x91\x4a\x06\x5e\x75\xf1\xa7\xf0\x2a\x0c\x92\xb4\xe2\x54\x65\x53\x55\xef\xb3\x46\x60\x60\xf6\x28\xa8\x81\x85\xa7\x85\x05\x64\x53\x0b\x0d\xf5\x92\x09\x2a\x88\x98\xba\x51\xfe\x4d\x02\xd0\xc9\xa3\x32\x69\x60\x5d\xb8\x9c\x06\xd7\x2b\xc5\xef\x72\xfd\xae\xf2\x63\xea\xf2\xd8\x45\x38\x6d\x31\x06\xa5\x82\x02\x4c\x81\x98\xc5\xfa\x48\xe1\x1e\x02\xac\xab\x15\x68\x6b\xd9\x7f\x3e\xe2\xad\x55\x80\xd6\x4d\x80\xb7\xae\xf3\xd9\xd9\x18\x15\x5d\xe7\xf3\x02\x46\xec\xc5\x52\x46\xdb\xc3\x18\xa1\x31\xc4\x9d\x36\x4c\x22\x9a\x1a\x38\xb9\xd4\x71\x85\xa5\xb6\xec\x11\x5f\x9b\xc2\xe6\x54\x46\x21\xf5\xd4\xaa\xc4\x57\x9d\x51\xb8\x1d\x04\x6d\x2f\x07\x02\x93\x6e\xdd\x4f\x83\xdc\x4a\xbf\x5d\x2b\xe4\xcd\xec\x16\x9e\xde\x6a\xbc\xeb\x0d\x6f\xfe\xdd\xd0\x8c\xe5\x7c\x48\x33\x80\xb6\x1d\xd6\x76\xb1\xb1\xc5\x6d\x49\x0e\x17\xa9\x5a\x47\x19\xdf\x63\xe2\xd2\x07\x0c\x59\x96\xe5\x63\x42\x95\x4e\x69\x65\x38\xd0\x47\xd0\xa5\xf0\x8a\xc9\xb2\x86\xf3\x65\xc3\x97\x65\xe1\xa6\x6e\xb7\x02\x6b\x77\xde\x23\x95\x20\xf7\xad\x6e\x95\x97\x6f\xcf\x7f\x7f\x1f\xff\x7c\xaf\x41\x67\x46\x61\x28\x20\x50\x18\x6f\x2d\x3b\x06\xd3\xd1\x0c\x26\xc7\xb0\xc0\x93\xa9\x75\xf6\x79\xec\x61\x51\xf8\xd6\xa9\xd9\x1e\xd4\x26\x37\x90\xd1\x59\x7b\x76\x4c\xa1\x0f\x0e\x0f\xd5\x47\x50\xe7\xd5\xe2\x8f\xe8\xa3\x2d\x3b\x5f\x87\x4c\x93\x31\x2c\xc1\x51\x1e\x72\x6e\xe9\x1b\x14\x32\x12\x44\x5d\x38\x0f\x5d\xcf\xa7\x76\x54\x7c\xd3\x3f\x8e\x2f\xca\xf8\x77\x10\xc1\x34\xb8\x45\x83\xc4\x8b\x71\x18\xc2\xab\x8c\xf7\x39\xd1\x52\x38\x65\xd0\x4e\x99\xfa\x86\xa2\x74\x90\x04\x5f\x48\xb6\x20\x79\x78\x10\xa2\xeb\xb4\xf8\x94\xe2\x45\xfe\xe1\x38\x87\x54\x09\x03\x14\xa5\x17\xc1\x17\x74\x9c\x17\x18\x72\x52\x72\x73\x63\xe2\xfd\x33\x6b\x3b\x7b\xa6\x48\x98\xfa\x4c\xdb\x39\xcb\x7a\x28\x7f\x79\x89\x17\xa6\x54\x42\x79\x08\xb5\xb9\xa0\x8a\x11\xea\xf2\x58\xe4\x5b\x44\x89\x11\x0f\x15\xb7\x92\xcf\xd9\x3e\x37\xf0\x85\xdc\xca\x38\x3b\x7a\xd2\x55\x28\x14\x1c\xa0\x1f\x55\x05\x8e\xf4\xb3\xf1\x6e\x6a\x6e\x01\x75\x5b\x44\x93\xc8\x92\xed\x8f\x42\xed\x2c\x52\xb4\x79\x30\xc5\xa6\xf6\x8e\x6f\xb9\x77\x9a\xc2\x4f\xf1\x16\x2c\x2a\xc6\xe4\x44\x20\xf2\xdb\x22\xe1\xd8\x2b\x33\xa3\xca\xee\x5f\x53\x41\x26\x3f\x89\xcd\xab\xd0\x40\x4a\xb4\x0c\x50\x3b\x6c\x19\xc9\xda\x8b\xba\x50\x3a\xe5\xfb\xd1\x1a\xf2\x1a\xdc\x5b\x55\x19\xee\xdf\xfe\xf0\xe7\xdd\xcb\x1f\xa6\x56\xe0\x55\x0d\x54\x86\x7d\x6a\x7c\x41\xca\x7d\x73\x17\xa4\x33\x3e\x7f\x82\x0d\xa9\xdc\x48\x8f\xe7\x80\xee\xf1\x9c\xad\x3f\x48\x8b\x8e\xe8\x89\xd6\xa3\xa9\x4a\x45\xce\x7e\x8e\x80\x3e\x8f\x81\x66\x07\x80\xdc\x7f\x43\x59\x0e\x40\xe5\x75\x93\xfb\xb0\x5c\xb6\x22\xbb\x7e\x9e\xfa\xb2\xac\x94\x48\xa4\x89\x58\xb9\x98\xe1\x3b\x90\x97\xc6\xa6\x8b\x5f\x0f\x26\x5c\x1b\xbb\x65\xd8\x24\x5a\xea\xe0\x90\x0e\xd0\xd9\xd1\x51\x46\x1d\xb5\x53\xb9\x95\xf2\x02\xe6\xd9\x05\x35\x19\xa0\xf9\x22\x15\x2d\x55\x04\x9f\x4e\xe9\xf3\x2c\x55\x44\x12\x4b\x2f\xea\x0a\x28\x55\xbd\xd4\x36\xeb\xd1\xcc\x27\xdd\x2c\xa3\xc6\x14\xb9\x54\xa2\x63\x7d\x3e\xd8\x06\x19\xf1\x55\xe0\x23\x1b\x46\xac\x19\xbd\xcd\xce\xb7\xad\x04\xaf\xd1\x4a\x3a\xe8\x23\xfa\x7d\xa3\xff\xbe\x7e\xe7\x29\x0c\x80\x6e\x39\x7e\x77\x03\xde\xd8\x92\xb6\xd1\x55\x75\x99\x0e\x88\x3f\x65\xbb\x3a\xcb\xdb\x6b\xf8\xe7\x6e\xfc\x7c\xd9\xc4\x47\x64\x0a\x77\xee\x90\x59\x52\x2a\x57\x52\x38\x98\xa6\xe2\x49\x72\xc9\x3e\xaa\x63\x86\xd5\xe7\x51\xa9\x89\x8e\xe7\xba\x3e\x40\xb2\xa9\x19\xbc\x3d\xde\x7b\x4f\xfc\x4c\x59\xb0\x23\x23\xb3\x2f\xfd\x01\x8c\xbc\xd9\xd6\x11\x64\xbf\xfb\x29\x8a\xd3\xe9\x07\x8d\x12\x5e\x13\x5e\xd0\x0f\x59\x4b\x04\xe9\x48\x5e\xb9\xf4\xf3\x56\x69\x7b\x31\x79\x7d\x12\xfa\x2f\x34\xe8\xbc\x0d\xdd\x07\x5a\x43\xbb\x10\x2d\x26\x3e\xb4\x5f\xd2\x2f\x14\xf1\x73\x12\xad\x74\xd5\xba\xd7\x1e\x31\x67\xaf\x51\xd8\x0e\x58\x65\xcd\xd7\xe3\xa8\x95\x2e\x10\x6b\x31\xfb\x8b\xe3\xee\xca\xdf\x37\x28\x7a\x08\x27\xe1\x59\xf8\xfc\xbb\xc5\x87\xf7\xdf\xf5\x7d\x7b\xef\xed\xb4\xac\x81\x02\x2a\xd2\x5c\x65\x48\x20\x47\xa4\x70\x15\x1f\x88\x82\xa3\xe0\xf8\xf4\xa4\x31\x26\x90\xb8\x67\xad\x9c\x18\xf9\xbd\xd5\x0c\x49\x65\xf0\x57\xd0\x1b\x4a\xfe\x44\x0e\xae\xd2\x16\xfc\xb5\x7e\x34\x56\xd8\x46\x2a\x83\x45\x6e\x99\xe0\xf4\x35\x69\xc5\xca\x57\x2f\x3c\xbc\xd0\x22\x05\x68\xdf\xda\x12\x36\x92\xea\xd6\x6b\xbc\x73\x35\xc1\x47\x22\x2c\x5c\x06\x76\x11\x29\x5b\x92\xee\xbc\x56\x6a\x19\x99\x91\x7d\x9f\x11\x42\x5d\x24\x2a\x8d\x97\x99\x6c\x46\xc2\x75\x5a\xea\xc6\x3d\x90\xf1\x80\x4c\x25\x91\xea\x56\xce\x86\x4e\x63\x45\xa4\xca\x19\xf6\x20\x09\xe6\x70\x42\xf2\x97\xeb\x4c\x43\x7c\x45\xb2\x72\xf4\x09\x61\x7d\x0d\xa8\x82\x57\x52\x8b\x13\xd5\xb2\x72\x53\x07\xc4\x85\x3e\xce\x37\x2e\x32\xbb\x1e\x6e\x73\x3c\x8d\xe1\x62\xb6\x1a\x90\xff\x6c\xf9\x88\x7b\x7f\x3f\x7b\x33\x0b\x9e\x05\x0d\x03\x02\x93\xdb\xa9\xb4\x57\xef\x02\x3f\x13\x3b\x05\x90\x75\x42\x5d\x7f\x7c\xf7\xcd\x50\x30\x9d\xa5\x9a\x07\x94\x26\xe7\xa9\xfa\xda\x96\x53\x8f\x07\x45\xa4\x31\x8c\x12\x56\x48\x8a\x16\x50\xca\xbe\x20\x13\x64\x9b\x9d\x18\x4d\x78\xc4\x06\xf3\x48\x4e\xf2\x70\x31\x17\x58\x3d\xf6\x6d\x35\x88\x42\xda\x01\x53\xbb\x8d\xe2\x05\xb1\xa7\xb1\xda\x5f\x41\xef\x66\x1a\xe3\x65\x94\x47\xbd\x17\x48\xec\xe4\x3c\x65\xaf\x3a\x23\xb1\x24\xba\xd1\x5c\x64\xe8\x0d\xde\x07\x49\x4d\x3f\xe3\x0d\xf5\x33\xd9\x50\x3f\x3b\x7d\xf4\x73\x85\x63\x96\xe1\x6f\xe8\x69\xd7\xdc\x93\xde\xe6\xa5\xe5\xfb\x30\x88\xca\x85\x7b\x54\xf6\x0a\x3f\x48\x52\x18\x79\xa8\x21\x44\x46\x84\xa4\xcd\x5c\xd9\x52\x31\x4e\xf9\x7e\xa2\x72\x9d\x7e\x41\x84\xf4\xb7\x85\x2b\x7b\x35\xc9\xc9\x41\x1f\x5b\xe5\x4b\x9b\x17\x71\x8c\xb0\x8f\x4a\x4f\xf9\x95\x87\xf8\x34\xca\x0f\xf2\xaf\xcb\xcf\x27\x68\x9a\xcd\xaf\xf4\x38\xff\x56\xb9\x16\x36\x96\x97\xb6\x6b\x95\xdd\xf3\xea\x3d\x1d\x06\x26\x5b\xe0\x20\xca\xa3\xaa\x63\xc7\x75\xf6\x4c\x96\xed\x3a\x91\x49\x6f\x7e\x75\xc2\x72\x44\x05\xe1\x2e\x0f\x0d\x4d\x98\xa4\x31\x88\x3e\x23\x1f\x8d\x5c\xe7\x7e\xe2\xb8\xce\xfe\xc8\x3c\x76\xa1\x01\x5a\xf5\x4e\x6c\x20\x7b\x7f\x8f\x13\x62\x95\x47\x20\x8f\x5c\xc7\xcf\x3e\x0d\x77\x26\x14\xe5\x4e\x50\xd7\xb2\xd9\xc1\x74\x40\xab\xad\xe5\x1b\x63\x1e\x84\x61\x90\x20\x0f\x47\x3e\x9f\xd8\xa7\x4c\x9b\x9d\xd3\x4a\x6f\x2f\x63\x7a\x69\x3e\x09\xa6\x01\x39\x87\x3f\x4e\x4a\xb5\x04\x54\x38\x05\x66\x1e\x59\xe7\xc2\x8c\xbf\xd6\x85\x19\x3f\xf2\x85\x99\x7c\xad\x0b\x33\x79\xe4\x0b\xb3\xf3\xb5\x2e\xcc\xce\x06\x16\x46\xed\x5c\x59\xb7\x6b\xad\x74\x51\x6a\x71\xed\xf2\xbd\x2d\xdf\xae\x76\x5e\xdf\x5f\xde\x3e\xbb\x51\xbb\xd2\x54\x4e\xb4\x19\x4c\x66\x81\x87\xe3\xc5\x80\xce\xa7\xb0\xbb\xd0\xd2\x8e\x28\x9e\x07\x49\x42\x63\xda\x1c\xdf\x4b\x64\x4c\xfb\x44\x2a\xa0\xe5\xdc\xc5\x70\xb1\x20\x9c\x43\x11\xbd\x84\x97\x05\x44\xfb\xc4\x04\x6f\x9f\x28\xf0\xee\x75\x46\x1f\xa7\x00\x87\xc0\xcb\x34\x24\xc5\x04\xea\xab\x20\x76\xbd\xa2\xfb\x5e\x2b\xc6\x78\x06\xbd\xad\x07\x87\x7d\x79\x7f\xfe\xc5\x3f\x5b\x3d\xb3\xe3\x0e\x0b\xd2\xb6\x26\x21\xa1\x46\x7b\x3a\x3e\x1b\xc0\x65\x3a\xc3\x71\xf0\x05\x3e\x80\x30\xfd\x83\xcb\xeb\xcb\xe5\xbb\xab\xd8\x3a\x11\x5d\x8d\xb6\x7b\x39\x43\x80\x1a\xfa\xc0\x31\xcd\x74\x03\x67\x41\x92\x82\x6f\x8e\x8e\xcf\xbe\x05\xc9\x2a\x49\xd1\xdc\x05\x77\xb3\xc0\x9b\x01\x9e\x0a\x07\x84\x3d\x46\xea\x40\x10\xf0\xdd\xf7\xa7\x2e\x08\x12\x80\x22\x52\x7d\xa3\xf8\xde\x0b\x97\x49\x8a\xe2\x21\xf8\x0d\x2f\x63\x40\x0c\x4c\xe0\xf4\x04\xdc\x05\x61\x08\xae\x10\x48\xe0\x2d\xf2\x01\x31\xe8\x91\x22\x0f\x7e\xd6\x7a\x92\x0d\x21\x9d\xc5\x78\x39\x9d\x81\xdb\x20\x09\xd2\x64\xa8\x2d\x11\x4b\x4e\x47\x53\x5c\x5f\x4d\xc5\x6a\x60\xca\x31\xb4\x28\xd7\x5b\x6a\x43\x19\x8b\x45\x50\x7b\x4e\x4f\x00\x8e\xc1\x65\x46\x01\xf3\xd9\xc4\x8d\x9f\xd4\x75\x98\x07\xb5\x53\x0f\x1c\xc7\x0b\xe1\x71\xc0\x42\x5d\x0f\x52\xf4\x0f\x26\xc9\x1d\x8e\x73\xb0\x00\x0a\x18\x44\x36\x0e\xfb\x53\x39\x1c\x4b\x7c\x7b\xf5\xa9\x58\x5f\x3d\xc8\xb6\x58\x0f\xdf\x61\xa8\x3a\xfc\xaa\x7c\xce\xa9\x0b\xcb\xb8\xc2\xfd\x1d\xd5\xea\xbd\xdf\x45\x88\x08\xf5\x6c\xb6\x29\x3f\x66\xab\xd8\x1f\xff\xbe\x3a\xea\x28\x3f\x8e\x8e\xcf\x12\x00\x63\x04\xf8\xb4\x40\x10\xd1\x7d\x7f\x4c\x88\x50\x6c\xff\xcb\xec\xcb\x4c\x42\xa4\x33\x04\xd8\x78\xc1\x15\x9a\xc1\xdb\x00\xc7\x2e\x80\x09\x81\xf5\x9e\xc1\x5b\x04\x52\x0c\xd0\xfd\x22\x0c\xbc\x20\x0d\x57\x4c\xa2\x64\xaf\xcd\xb5\x42\x40\x3d\xb8\x33\x04\xe3\x08\xcc\x71\x8c\xe8\xa8\x90\xd9\x05\x73\xc8\xa1\x6a\x23\x92\xc0\x7e\xfc\xf6\xcd\xc5\xfb\xb3\xcf\x27\x6f\x8f\x2f\x3e\xbf\x7f\x77\x56\x60\xd4\x3e\x9b\x2e\x03\x1f\x25\xd9\x7a\x0e\x67\xe9\x3c\x2c\xea\x17\xc6\x99\xf4\x70\x22\x8c\x17\x28\x42\x31\x88\x70\x8c\xae\x51\x1c\x33\x53\xda\xa8\xf0\xcf\x38\x9f\xaf\x42\x18\xdd\x08\xc2\xe4\xe8\xf8\x0c\xf8\xd8\x5b\x66\x24\x87\x2a\x1f\x56\xef\x1c\xcd\x57\xac\x0b\x33\xb3\xab\xc9\x36\x19\x79\x32\xba\xfe\x30\x3d\xff\x0d\xa9\x6d\xfb\xe8\x1e\x79\xcb\x94\x44\x2e\x50\x30\x6f\xd7\x99\xa3\x24\x81\x53\x24\x15\x4b\xa6\x38\xb3\x0a\xae\x5f\xe3\xe9\x22\x26\xf0\x93\xab\x5d\x7e\xc4\xe8\xea\xd2\x95\x4a\xe2\xbb\x0e\x89\x7b\xa7\xdf\xaa\xf3\xae\x2d\xcf\x27\x7d\x25\x1a\xf3\x91\x54\x3a\x8b\xe0\x32\xc5\xd7\xd8\x5b\x0a\x95\xa5\x4a\x70\x32\x8a\x27\x1b\x9c\x3c\x40\x1d\x23\x2a\x24\x93\x16\x29\xa3\x8e\x1e\x23\x41\x41\xd1\x4b\x86\x33\xac\xa2\x68\x9d\x39\x3a\x5b\x37\x3b\x53\xb4\x91\x1f\xac\x0a\x3d\x28\x23\xef\x0e\x48\x60\x40\x90\xc2\x90\x1e\x9c\x79\x61\x17\x1b\x67\x6d\xa5\x8b\x2a\x72\x22\x5b\x33\x4a\xa3\x52\x30\xf5\xa1\xd8\x9d\x31\x95\x58\xc6\x9e\x60\xf4\xe7\x74\xaf\x0c\x79\xe3\x75\x5b\xcb\x94\x30\x19\xd1\xf7\x9a\x1b\xd1\xd7\xa5\x59\xd2\xd2\xe0\xeb\x39\xd7\xfe\x2d\x5e\x86\x68\x90\x2c\x90\x17\x5c\x07\x1e\xcc\xe3\x5c\x84\xa3\x6e\x86\xc2\x05\x68\x75\xde\x7d\xf3\xea\xf8\x0c\xbc\x24\xb6\x9f\x6f\x9d\xda\xa8\x70\xce\xe6\xd8\x47\x03\xe4\x07\x52\xd5\x3b\x4e\x48\xc6\xa6\x5c\x26\x25\xab\x28\x85\xf7\x0e\x03\x05\xa1\x02\xa1\x46\x0a\xbc\x5b\x86\xd4\x16\xe0\x48\x12\x80\xff\x20\x23\x64\x15\x0f\xcf\xbc\xd0\x22\xd6\x9f\xbf\x50\xc8\x69\xbb\x82\x52\x15\xd0\x3d\x5e\xb8\xce\xde\xf5\xb5\x26\xde\xd3\x47\xf6\xd4\x9f\x19\xe5\x03\x82\xc6\xb2\x68\x89\x22\x8c\x04\x55\xce\xe3\x5f\xd1\x1f\xff\x0c\x43\x30\xcd\x78\x90\x54\x9e\x04\xef\xdf\x9f\x9e\x80\xe0\x9a\x2a\xa2\xe4\x80\xce\x14\xcf\x10\x5d\xa7\x80\x24\x8d\x0c\x6d\x2c\x80\x2d\xb2\x95\xed\x52\x18\x3a\x2d\x66\xe7\xa2\xc9\x56\xb5\x91\x2b\x58\x41\xe5\x73\xdc\x29\x03\xd2\x74\xac\xd2\xca\x08\x21\x97\x51\x56\xde\xf1\x2c\x50\x5b\xda\xd7\xfd\x15\x28\xd0\x75\x46\xcb\x85\x6f\x39\x23\x13\xc3\x55\x8f\x18\xf3\x0d\xbb\xa6\xbe\x69\xae\x05\xeb\x46\xa5\x2e\x67\x5a\x0a\xe6\x84\x91\xcf\xff\xe4\x19\x59\x0a\x66\xfe\x94\xe7\x6c\x0d\xaa\x8c\x44\x83\xca\x1c\x18\xe1\x68\x35\xa7\xf5\x8f\xaa\xf8\x50\xaa\xd8\x4b\xa9\x5a\x16\xab\xbe\x99\xcb\x16\xae\xda\x7f\x72\x3f\x3a\xda\x8a\x51\xb4\x10\x12\x95\x0d\xd9\xad\x8b\x98\xa4\xfe\x4b\x53\x76\xcf\xa2\x62\x5f\x83\x6c\x23\xcd\xda\xe9\xea\x34\x4d\x14\xd5\x94\x74\x75\x6b\x79\x19\x3e\x87\xbd\xaf\x2c\x48\xbe\x80\x31\x8f\x15\x10\xc2\x26\x79\x7f\x26\x4e\xdc\xb5\x0f\x99\xe4\x25\x51\x6b\xa9\x22\x9c\x11\x74\xd0\x03\x71\x71\xab\xab\xea\x56\x6f\x73\x9f\x28\x11\x76\x8a\x3a\xda\xd5\xd4\xce\x3a\xeb\xfc\xd8\x9d\xb8\x3b\x6d\xeb\x19\x69\x13\x58\xc4\x4f\x7d\xdd\xd8\xb3\xcb\x68\x97\xdb\xfa\xf6\x91\xf9\x7e\x7b\x7d\x7b\xf0\xcb\xd5\xee\xbf\xec\x9d\x01\x07\x05\xd2\x5e\xe1\x25\x2a\xaa\x17\x4b\xa5\xbc\x0f\xa8\x6b\xa9\x78\x90\x69\x3e\x4c\x13\x16\xc1\xe6\x3e\x3a\xc4\xf0\x99\xd4\x85\xde\xca\x30\x1c\x41\x32\x60\x4a\xb5\xe6\xb1\x4f\xfc\xe8\xb4\x1f\xc7\x3b\xcc\x74\x4b\x43\x65\xc7\xda\x51\x48\x4f\xb5\x18\x44\x5e\xe9\x5c\x3b\x8e\x45\x5e\x0b\xbd\x66\x28\xe5\x07\x3f\x49\x08\x54\xbd\xfb\x73\x9e\xb5\x84\x29\x2b\x5e\xc7\x69\x7e\xbd\xd9\xb6\xaf\xec\xc5\x9b\xeb\xf0\xf2\xe5\xf9\x8d\xb5\x27\x55\x79\xb7\xe6\x45\x93\xf2\x03\xb9\xee\x4c\x55\xb6\x92\x3d\xb5\xa4\x17\x9c\x64\xc9\x0b\xc9\x5a\x24\x35\x12\x37\x4f\x7e\xae\x82\x19\x4c\xc0\x15\x42\x11\x80\xbe\x8f\xfc\x61\x43\xe0\xbd\xcb\x19\x8a\x11\xb8\x83\x09\x29\xff\x9d\x5d\xca\xb2\x76\x82\x68\x9a\x9d\xe8\x42\x37\xba\x76\x6d\xba\xaa\x25\x23\xd3\xe4\x1e\x06\x19\x89\xbf\xac\x07\x32\x26\xa4\x62\xfe\x26\xc9\x98\x2b\x36\x5b\x24\x63\x46\x02\x3a\x8e\x3e\x68\x48\x5a\xda\x30\x15\x43\x3c\xc5\xcb\x74\xf3\x54\x24\x4e\x9e\x08\xdf\x81\x10\x4f\xa7\xc8\x07\x78\x99\xf6\x40\xc1\xac\xb1\x8c\x80\x86\xd6\xfa\xd9\xc2\xc9\xa6\x19\xef\x0d\xbe\x03\xcb\x24\x9b\x5b\x84\xee\xea\x79\xa3\x01\xcd\x68\xab\xe9\x0c\xa6\x1b\x62\x39\x2f\xa4\xa5\x9d\xb7\xbc\x6f\xc9\x30\xfa\xd8\xb6\x59\x43\xdd\x76\xad\xe6\x4a\xd0\xeb\x57\xfd\xea\x48\xa2\x92\xd3\x41\x5b\x62\x89\x68\xdb\xd4\x91\xf6\xfe\xfc\xf2\xcb\xfb\xf8\xbb\xa4\x9b\xbf\x2f\x86\x51\xc2\x6b\xa6\x49\x1f\x38\x97\x16\x56\x61\xc6\xc2\x3a\x27\xe1\xae\xeb\xc0\xc5\x62\x70\x1b\xa0\xbb\xaa\x4d\x3a\xc4\xd0\x67\x85\xbc\x1d\xe8\x85\x80\x27\xf2\x91\xab\x79\x72\xc6\x7f\xd5\xe4\x99\x1a\xaf\xd9\xe2\x92\x1a\x2f\xdb\xe4\x9a\xbd\xe7\x3a\x7c\x0d\xcb\x0a\xef\xa1\x3b\x1e\x99\xd0\x4e\xc8\xef\xd6\xb7\xff\xab\x18\x41\xdf\x8b\x97\xf3\xab\x3a\x18\x16\x66\x10\xc1\x75\x2e\x30\x47\x59\xe3\xb4\x59\x22\x65\xd5\x99\x77\x14\x86\xe0\x92\xdf\xdd\x34\xde\x07\x7b\x7b\x70\x2f\xc9\xb4\x6c\xa2\xb3\xb1\x95\xe9\x58\xb6\xc8\xda\x39\x1f\xb9\xc5\xc5\x50\xe8\xc3\x30\xd7\x9a\xc6\xdf\xa0\x3b\x2a\x49\xad\x4d\x99\xfd\xd0\x36\x07\xdd\x32\xe5\x6a\xd7\x98\x2a\xf5\xa7\xda\x35\x42\xfe\x15\xf4\x6e\x2a\xb6\x46\x26\x0d\x3e\x3a\x41\x14\x32\x73\x7a\x7f\xf6\x43\x62\xe8\x5c\xac\x72\xf4\x0b\xfe\x6a\x55\x3a\x79\x61\xb0\xb8\xc2\x30\xf6\x2f\x49\xe4\x80\x93\x06\x69\x88\x0a\xdb\x88\xa1\xb0\x7b\x1d\xf6\x63\xf6\xd7\x81\xfc\x60\xd5\x80\x9b\x8d\xb2\x08\xea\x4b\x31\xc8\xc7\x63\x69\x16\xcd\xfe\x1d\x8b\x8d\x34\xca\x8b\x15\x2a\x9b\xd7\x33\x4a\xae\x80\x34\xb1\xd7\x2e\xd4\x01\x1b\x95\x5a\xf1\x1a\xa7\xfa\x31\x5e\x04\xc8\xcf\x27\xf7\x8f\x16\xde\xe6\xe7\xf6\x33\x64\x6e\xcb\x5e\xe6\xb7\x67\x35\xbf\x0b\x1c\xc7\x2b\x17\x24\x78\x8e\xd2\x59\xa6\x54\xdd\xa1\x28\x05\x77\x31\x8e\xa6\x6d\xe6\xaa\x2d\x39\xaf\xf5\xb8\x9b\xdd\x21\x75\x76\x73\xa6\xdb\xea\xdd\x21\xd9\xcf\x74\xf5\x94\x3e\x91\xee\xde\x88\x65\xf2\xa0\x5c\x11\xcd\xfd\x0d\xd9\xd5\x4a\x4b\xbf\xf7\x89\x86\x7a\x9b\xf0\x2f\x28\xb9\xbc\x3e\xcc\x46\x55\x3d\xdd\x26\x4e\xa4\x01\x95\xfb\x71\xf8\x8c\x39\x4e\x1d\x67\x56\xca\x8c\xe0\x7d\x62\x08\xe6\x6a\x32\xb2\xc2\xc9\xd2\x70\x64\x93\xf2\xc8\x94\x5e\xc5\x5e\x1d\x31\xed\xf5\x07\x06\xe3\x6d\xa1\x9c\x89\x5a\x34\x8b\x7c\xb4\x81\x09\xb4\x49\x07\xc9\xb8\xb3\xf1\xb5\x2e\xbb\x4d\xa8\x2f\x73\xff\xcb\xe6\x32\xc7\x30\x7d\xb6\x7a\x9b\xf3\x5e\xff\xb0\x3c\x0b\xe3\x73\xf5\x6d\xee\x3a\x08\x53\x14\x23\x9f\xc1\xfa\x08\x38\x44\xfc\xbf\x79\x74\x4d\x1e\x73\x26\xdc\xf2\x12\x14\x65\x5f\xdc\xa0\xd5\x22\x46\x49\x72\x4c\xf1\x67\x7b\xbd\xd0\x31\xfc\xa6\x0d\x5e\xe8\xea\xae\x73\xe3\x91\x3b\x1e\x9b\xd8\x92\x3e\xd0\xdf\xd5\xc5\x74\x6d\xe1\xbb\x27\x3b\xdc\xe8\x6d\x4b\x13\xc6\x63\x4c\x06\xac\x20\x46\x29\x00\x5f\x40\x8a\xd3\x6a\x81\x66\x43\x88\x4e\x35\x2a\x8a\x00\x95\x39\x29\xc6\xe1\x15\x8c\x07\x14\xea\xab\x1a\x2c\xb8\xa6\xab\x8a\x4c\x4c\x73\x20\x9f\xc2\x3d\x57\x72\xf5\x7c\x52\x05\x7a\xe5\xcf\xe4\x62\x39\xff\xa2\x9f\xe9\x31\xd2\xd5\xde\xc4\x7a\x82\xce\x1c\xf3\xab\x4b\x38\xa0\x82\x42\xb8\x27\x21\x18\x7b\x33\x8a\x1d\xce\xa4\x08\x29\x8f\x48\xbe\x76\xf2\xb3\xac\xa8\xd0\x53\x14\xbb\xc9\x5f\xcc\xa3\x26\xb2\x87\x5f\xb2\x36\xf2\x2f\x85\x46\x55\x5f\xa6\x79\x60\xab\x26\x2c\x90\x8d\xd8\xec\x1a\xdd\xdc\x49\xb7\xcb\x45\x69\x36\xf5\x01\x09\x67\xe7\xaf\xfb\x41\xb2\x80\xa9\x37\xa3\x51\x9d\x0a\x32\xb5\x90\x75\x09\xd2\x8d\xc2\x84\xf4\x26\xfb\xfd\x05\x2c\x37\x72\x54\x32\x14\xb7\x52\x39\xb2\xe6\x63\xb3\x04\x3e\x33\x20\x91\xd5\x87\xd3\x2b\x5f\xe3\x01\xd6\x9b\x43\x2e\xb3\x87\xc0\x6a\x85\x5e\x56\xc0\x96\x4d\xdc\x8f\x4e\x09\xae\xac\xc0\xd0\x9a\xb0\x15\xac\x03\xcf\xb2\xc8\xa8\x57\xce\xa3\x12\xbf\xc6\xfc\x13\xb4\xe7\x3c\xf4\x7f\x0e\x23\x38\x45\x14\x4c\xc5\x46\x04\x29\xba\x4f\xd2\xec\xe2\xab\x80\x09\x13\x3b\xea\x5e\x8a\xae\xdc\xab\x1a\x8e\xb7\x79\x9f\xf2\xed\xba\x4a\xf0\xf5\x59\xe9\x16\x78\x81\x6f\x51\x3c\x98\xa3\x68\x59\xbc\x8c\xee\x17\x30\xf2\x89\x52\x57\x04\xfe\x67\xea\x1c\x31\x30\x1d\x71\x53\x58\xb2\xbc\xca\xde\x4b\xca\x11\xde\xe2\x4a\x3f\x97\xaf\xad\x5c\x81\xc8\x88\x26\x03\xdb\x99\xac\x61\x7b\xea\x46\xc8\xfb\xae\x14\x8b\xc4\xdd\xb4\xec\x7a\x5c\xf6\x7d\x37\x17\x4a\x69\x1c\x4c\xa7\x56\x52\x29\xfb\xf7\x1a\xc7\xa8\xe3\x7a\x91\x95\xb0\x35\xe1\x55\x4d\xf4\x42\x4e\x4e\x44\xbd\x87\x76\x09\x2e\x50\xd5\x42\x36\x16\x06\xd2\x56\x2e\xd6\x39\x18\x3b\xfd\x88\xa2\x91\xeb\xbc\xf0\x69\x40\xaf\x29\x4d\xa6\x26\x32\x56\x92\x2c\xd4\x44\xca\x74\x08\x62\x04\x29\x52\x6f\x6b\x4d\xcf\x6b\xa6\xb3\x25\xf0\x3f\x33\x15\x57\xc3\x0e\x1a\x2f\x0f\xc9\xc2\x20\xd7\x30\xba\x0c\x87\xb2\x79\xf1\x22\xc5\x0b\xea\xd9\xae\x5b\x81\xba\x14\x30\xca\xb8\x75\x64\xd0\xb6\xc2\x35\x66\xc9\xb2\x07\x43\x14\xa7\xe0\x0e\xc6\x11\x1b\x60\x5d\xe3\x35\x89\x00\xba\x97\x8a\xcb\x94\xa9\x4c\xb7\xee\x1f\xb7\xff\xd0\xb5\xaa\xed\xc6\x4c\x64\x69\x38\xb6\xe6\x33\xfe\x4f\x6b\xed\x4c\xf2\x65\x2e\x1b\x3d\x69\x7e\x30\x41\x05\x08\x31\xf1\xcd\xf3\xa0\x90\xae\xb3\xb0\x7f\x4a\x57\xb7\xb9\x96\x3e\xa5\x0d\xc9\x79\xc8\xcf\x4e\xac\x98\x46\xb7\x5b\x52\xae\x64\x9a\x13\x1a\xd5\xec\xaa\x9a\xa2\x3a\xb9\x13\x27\xdf\xc2\xca\xb2\x25\x23\x85\x79\x8f\x0d\xf8\x8c\xef\x7c\x6b\x86\x69\xc0\x58\x25\xa7\xae\x35\x7d\x3a\x8b\x2f\x83\x61\xb2\xeb\xe4\x6c\x9e\xb2\x13\x72\x4d\x0e\xa2\x76\x1a\xe4\x36\x8f\x14\x29\x26\xab\xef\xf3\xa4\xd6\x06\x0e\x9e\x0e\x12\xed\x3f\x7e\x90\x2c\x13\xf4\x20\x4f\x11\x85\xcf\xec\xe9\x9c\xe8\xed\x9c\x60\x0e\xbd\x46\x87\x84\xd5\x76\x6b\x42\xe6\x8d\x9f\x10\xb2\x34\xfa\x1b\x1c\x0f\xd5\xcb\xbe\x4c\xbf\x0e\x07\x82\xd1\xc3\xa8\x12\xf2\x13\x15\xdb\x36\xf0\xe2\x27\x28\xf2\x8f\xb9\x27\xbf\xea\x7e\x3c\x59\x2e\xc2\xc0\xab\x98\xba\xeb\xa9\xe6\x56\x22\x88\x06\x8a\x1b\x9e\x2e\x8b\xb1\xc7\x03\xb8\xa5\xb4\x68\xb9\x17\xca\x91\xfa\x7d\x1f\xce\xaa\x94\x43\xc3\xf0\x9f\xce\xe7\xd2\x3f\x7e\x3e\x53\x3a\x3e\xc8\x23\x5a\x4c\xb2\x7d\x3a\xa1\xeb\x4e\xe8\xb2\xa7\x4e\x08\x09\x69\x78\x78\x17\xd9\xbf\x8d\xce\x6f\xdb\x1d\xd9\x64\x1d\x36\x7e\x84\x57\xc4\xd6\xdf\xe0\x14\xd7\x86\x45\xba\x87\x4d\x23\x66\x76\xdd\x3d\xf7\xb9\xee\x47\x43\x64\x4e\x83\x58\x02\x5a\xb1\xd5\x2a\x0a\xda\x2c\x89\x68\x56\x07\x4d\x49\x22\x18\x74\xc3\x16\x61\xdb\x3d\x7e\xdf\x2d\x8e\x87\x48\x83\x0e\x59\x19\x3c\xe5\xf6\x41\xe0\xb1\xbd\xb8\xbe\x38\x87\xc1\x8b\xa8\x4d\x7e\x46\x88\x13\x31\x4f\xa3\x01\x20\x1b\xd3\xd5\x08\x25\x56\x8c\x0c\x9c\xfd\xe8\x27\x5e\xe6\x85\x79\xb0\xc9\x97\x32\x04\x8a\x1e\xf4\x57\x8a\x37\x30\xfb\x69\x18\x2d\x14\xb8\x66\x35\xde\x98\x4e\x81\xea\x12\x34\xf1\x81\x2b\x95\x3e\xcb\x43\x98\x58\xf1\x30\xb1\x44\xda\xd1\x62\x11\xd2\xf8\x64\x02\x8f\x78\x8d\xc3\x10\xdf\x11\xeb\x2c\x09\xd6\xf9\xbe\x52\x16\xad\xd1\xac\x4a\x65\x4e\x9f\x30\x71\xd6\x85\x89\xd3\xd6\x0c\xd8\x98\x7e\x4f\x60\x39\x8d\xc1\x72\xda\xa5\x9d\xf4\x0b\x73\x43\x51\xe2\xbe\x02\x8c\x9b\x3d\x03\xc6\x4d\x63\x4c\x9b\xbd\x3e\x62\xce\xfb\xac\x72\x39\xc7\x3e\x0c\x2b\xab\x9d\xa9\xff\x38\xa9\xcd\xe9\x99\x6c\x28\xea\xa9\xb2\xda\xb3\x89\x06\x94\x30\x88\xaa\xa1\xe8\x5d\x42\x12\xae\xb0\x5f\xa7\x3c\x2a\x86\x67\x7f\xa5\xbd\x2c\xb6\x0a\x08\x12\xe0\x2d\xe3\x18\x45\x69\x48\x26\xb2\x4c\xd0\x10\x9c\x5e\x93\x1d\xe6\xcd\x30\x26\x79\x0d\x8a\x3d\xe6\x82\x20\xcd\xb1\xcd\x63\x34\xc7\xb7\xc8\x07\xd7\x31\x9e\x97\xce\x57\xc7\x18\x30\xa4\x66\x20\x31\xda\x55\x4e\x5d\x1c\xb9\xce\xf7\x2d\xaf\x18\xb5\x6a\x03\x1f\x07\x2f\x21\xe9\x96\xaa\x86\x17\xd8\x8e\xb5\xf9\x12\xed\x57\x85\xf2\x3c\xf0\x60\x14\xe1\x34\x23\xed\x32\xf2\x71\x84\x86\x0d\x13\x36\xaa\x04\x59\x6f\x34\xaf\x66\xf2\x9b\x4b\x09\xf9\x0d\x25\x2e\x68\x68\x6e\x5b\x5f\x5a\xc8\x6e\xab\xb4\x90\xdd\x16\xf7\x32\xcb\xb3\xea\x01\xa0\x8f\x29\x92\xff\xd7\x0f\x48\xd6\x07\xa6\x80\x7c\xe9\xec\xe5\xf6\xfa\x90\xa0\x98\xf6\xd1\xeb\xc9\xfc\xdc\x16\x1f\xff\x01\x43\x31\xd1\x2b\xf1\x7a\x71\x98\x68\x1f\x5f\x29\x08\x53\x99\x80\xeb\x40\x60\xda\x00\x01\xb7\x07\xbf\xc4\x08\xb8\x4e\xec\xa5\xe6\xf4\xd3\x08\xd1\x75\x23\xb1\x68\x84\x5d\x2f\xe2\x93\x66\xac\x6d\x55\x6a\xfe\x74\xff\xeb\x8d\x87\x83\xf7\x2d\xaa\x8a\x88\x4e\x90\x8c\x36\x1e\x62\xab\x3a\x90\x02\xf3\x39\xf8\x87\x42\x73\x1e\xb9\xce\x6b\xe9\xd1\x43\xae\x2c\x67\x2a\x24\xad\x15\x2e\x34\xc6\x92\xf2\x83\x04\x5c\x2d\x83\x30\x05\x41\x94\x62\x56\xb5\xe4\x8f\x7f\x26\x9c\x6b\x69\x09\x24\x52\xbd\x28\x53\x3f\x01\x5c\x2c\xc2\x15\xd5\xf8\x09\x32\x3a\x0c\xf9\x93\x29\x66\x56\x33\x52\xfb\xe8\x7a\x19\x86\x00\x92\xad\xc2\x6a\x9f\x2c\xf2\x9b\x45\xa6\xc3\x22\x3f\x48\x49\x5d\x13\x1c\xb3\x7b\x42\xf6\xc9\x05\x57\xcb\x94\xf4\x73\x85\x40\x30\x8d\x70\x8c\x7c\x70\xb5\x22\x6f\x90\x9e\x33\x8e\x0f\xc8\xfd\x1e\x46\x0c\x33\x21\x19\x96\x0a\x9d\x64\x1b\xc2\x59\x0b\x20\x3c\x21\x54\x10\x0d\x0a\x8c\xc7\x4f\x7a\xa0\xf7\xda\x82\x28\x6c\xcd\x74\x55\x4f\x86\x55\x0d\xc6\xe0\x67\xe5\x3f\xeb\xbc\x7e\xfc\xf7\x4a\x9d\x0e\x75\xb2\x0e\x7f\xdc\xd7\xde\xcd\x14\xd8\x29\xea\x26\x2a\x3d\x7e\x80\x61\xe0\x83\x13\x98\x42\x0f\x45\x34\xab\xcc\xbe\xfb\x03\xd7\xf9\x13\x07\xa4\xfa\x58\x5e\xd4\x9b\x72\xd6\x33\x5f\x68\x51\x32\xd6\x95\xec\x4d\x8d\x07\x2c\x15\xb8\x6f\x45\x29\x8b\x12\xf9\x66\x7d\x75\x5b\x96\xed\xde\xc4\x7d\x26\x9c\xfb\x90\xf2\x0f\x00\x81\xeb\xf2\xfc\xf8\xf4\xb7\x7f\xbd\x51\x97\x9e\xb3\xc8\xae\x16\x6d\xc9\xc9\x11\xaf\xf8\xe5\xeb\x2d\xfe\x2d\xfd\x03\x02\xd7\x2c\xe0\x14\x0d\x28\x34\x8e\xfb\xd1\x79\x83\xee\x98\xb9\xc6\x51\x64\x12\x37\xb6\xa3\x6b\xfb\x79\xe1\x07\x69\xf3\x8e\xac\xfb\xd6\xf6\x2b\x17\xf4\x4b\x9a\xf4\xed\xda\xa5\xbf\x0b\x95\xda\xfc\xec\x66\x1c\x71\xe3\xff\x47\xd9\x3b\xcf\x44\x13\x30\x7a\x61\x64\x1e\xc8\x93\xe9\x5f\xf0\x46\x0b\x87\x0a\x65\x7e\x87\xec\xfe\x92\x48\xab\xa6\xe0\xbb\xd6\xcd\x6f\x10\x7c\x2d\xdf\xc7\x95\xb4\x7d\x77\x62\x4c\xda\x77\x27\x4d\xac\xd5\xdc\x19\xd3\x60\x64\x82\xc3\xc7\x06\xd4\xc2\xc2\x3c\x26\x55\xcb\x6c\x32\x94\x72\x9d\xcd\x7e\xc6\xf3\x30\x91\xe9\xaa\x78\xd9\x12\x44\xdd\x79\xf1\xeb\xa3\x04\xa9\x5b\xa7\x7c\x07\x0c\x74\x8e\x4a\x58\x5b\xb1\xad\xba\xe2\x16\x3a\x54\x76\x68\xe1\x6b\x8d\xfa\x94\xc7\x17\xb4\x4b\x15\xfe\x10\x34\x1e\xac\xf4\xbe\x70\x9c\xd8\x1f\x1d\x2d\xac\xa3\xa5\xe3\x63\xc3\x70\x7e\x66\x90\x82\x2d\x2c\x9d\x56\x84\xb3\xfb\x76\x8d\x74\x6a\xde\xae\x15\xb4\xd0\xe6\xa3\x94\x24\x15\xb4\x0f\x55\xf6\x21\xe0\x0f\xdd\xc3\xdf\x47\xd7\xcf\x5e\x7d\x78\x58\xf8\x43\x8d\x25\xa8\x59\x1f\x3c\x2f\xd7\x6e\x68\xab\xed\x3e\x66\x8d\x53\x8c\xc3\x50\x12\xf5\x11\xea\x97\xf6\xda\xe5\xc3\x03\x85\xaa\x9e\x32\x6a\xaf\x55\xeb\xed\xa0\x22\x10\xad\x80\xd3\x05\xb4\xad\x17\xed\xfb\xc1\xe8\xde\x9b\xd1\xbc\x6d\x1c\xe5\x56\x06\x4b\x83\xfa\xfc\x30\x10\xb0\x6c\x95\x97\x1e\x10\xb0\x72\x92\x49\x11\xb1\xe2\x94\xe9\xe9\x35\x20\x88\x5c\xba\xb2\xc4\x1c\x77\x2d\x46\x28\x45\xf7\xa9\x19\x48\x8b\x97\xd6\x2c\xd5\x9c\xd7\x23\x67\x51\x8f\xd1\x05\x45\xdd\xd2\xc5\x87\x34\xa2\xfe\x23\x06\xa9\xa2\xbc\x76\x9a\x29\x0e\xdf\xfb\x28\xf1\x98\x01\xf9\xf1\xe3\x56\x19\x2d\xd9\xf5\x6f\xeb\x8c\xcb\x8f\x1c\xfc\x2a\x17\x4c\x46\xe8\x19\x4d\x89\xea\x9a\xfb\x8d\x1c\xed\x67\xb8\xdb\x90\x0a\x5d\xaa\x2b\xcf\x06\xe1\xb7\xaa\x94\x6c\xe8\xc7\x28\x67\x32\xa9\x54\xcb\x75\x0c\xb3\x12\xa6\x56\xd0\xcb\xc2\x9f\xa1\x1b\xcf\x83\x04\xd1\xda\x26\x72\xd6\x63\x46\xc3\xb2\xb6\x48\x58\xef\xd8\xc6\x98\x73\x0f\x18\x74\xcb\x4e\x04\x72\xaf\x68\x76\xfd\xeb\x54\x96\x5d\x7d\x6b\xd5\xe3\x5f\x7f\x2d\x94\xab\xc7\x2d\xab\xff\x75\x3d\x19\xe8\x4e\x4d\x22\x67\x5e\x89\x62\x3b\x19\xe6\x8a\x90\x82\xc6\xf9\xe5\x9a\x36\xfa\xc9\x2e\xaf\x89\x79\x30\xbe\xd4\x22\xb3\xdc\x3a\xaf\xbc\x3e\x96\x18\xb4\xcd\x29\xb7\xca\x67\xa1\xd2\xd3\x94\x52\x6e\x33\x42\xdb\x67\x9a\x26\x93\xab\xf7\x53\xeb\x54\x72\xe7\x6b\x4d\x24\x6f\xc4\x45\x0d\x93\xc8\xed\x25\x4f\x8b\x24\xf1\x7e\x98\xcb\x46\x3a\x75\x39\x0c\xff\xe6\x59\xe1\xdc\xe8\xfd\xa8\x33\xc3\x65\x5f\x49\x07\xa7\x0b\x29\x10\xfd\x20\xf2\xc3\x7f\x0e\x97\xd7\x6f\xde\xef\xa7\x9b\xcd\x0f\x97\x2e\x9e\x19\x31\x0c\x39\xe2\xae\xe3\x7b\x99\xe6\x93\x2c\xa0\x27\x40\xc3\x2b\x33\xc6\xd9\x27\xdf\x2b\xfe\xe6\xef\x29\x43\xca\x4a\xc9\xa1\x30\xf2\x6d\xf2\x44\xdd\xa6\x46\xc3\x5a\x3f\x91\x32\x6f\xef\x57\xb2\x7f\x82\x84\x1e\xb2\x19\x95\xc0\x32\x41\xfe\x7f\x95\x25\x51\xcd\x66\xfc\x15\xfd\xf1\xcf\x18\x01\x1c\x85\x2b\x40\x42\x5c\x53\x0c\x92\x19\xbe\x03\x41\x44\xeb\x3b\x04\x38\x22\x31\xb2\xe9\x0c\x81\x45\x1c\xcc\x61\xbc\x02\xc5\xa5\x1f\xc0\xc8\x27\x3f\xb1\x04\x3c\xe1\x27\x16\x49\x1b\x06\x49\x0a\xe6\x90\x86\xc5\x92\x96\xd1\x2d\x8a\x57\xc0\x83\x09\x02\x77\x64\x12\xc5\x0c\x82\x84\x44\xce\x06\x34\xea\xbc\x2a\x56\x9d\xe6\xb1\x85\x45\xe9\xf8\xa7\xdc\xf8\xa7\xdc\xf8\xa7\xdc\xf8\x47\x9d\x1b\xff\x0e\x87\xe8\x29\x33\xfe\x29\x33\x7e\x23\x99\xf1\xef\xc8\x89\xf4\x18\xf3\xe2\xdf\xb1\xb3\xb4\x61\x56\x7c\xf6\xda\x53\x4e\xfc\x53\x4e\xfc\x53\x4e\xfc\x53\x4e\xfc\xd7\x9f\x13\x2f\xdc\xb2\xbb\xdf\xd5\x1f\x52\x36\xbc\x87\x5f\x9d\x1c\xfd\x72\xb8\xff\xe8\xb3\xe1\xc9\x95\x70\xad\xb9\xf0\x59\x0f\x5f\x69\x26\xbc\x4c\xbc\x75\xe4\xc1\xaf\x9d\x78\xdb\xcb\x82\x27\xc4\x5b\x67\x0e\x7c\x53\xda\x69\x44\xe6\xba\x33\xe0\x55\xd2\xad\xb3\xb0\x7c\x00\x59\x91\x6f\x96\x73\xfc\xfe\xaf\xdf\x67\x5b\xca\x8a\x14\xcb\xf2\x5b\x97\xce\x54\xa4\x2b\x66\x0a\x7b\x0f\x59\x91\xda\x4e\xde\xa0\xbb\xa6\x7d\x7c\x55\xe1\xe9\x44\x0c\x3c\xa5\x43\x4a\xbb\xf7\x29\x17\x52\x3f\x94\xbf\x55\x2e\x24\x61\x07\x75\x22\xe4\x3b\xf6\xd3\x53\x16\xa4\xf2\xf6\xc6\xc5\x6a\xcb\x5a\x50\xb9\xe8\xef\x2a\x82\x8b\x7f\x0f\x36\x8b\xb0\x46\x18\x3d\x84\xc2\xfe\x85\x52\xd3\x59\x33\x7a\x08\x49\x76\xfb\x7b\x3f\xbe\xde\xf3\xde\x69\x00\x23\xd6\x93\x64\xc7\x9a\xda\x78\xae\xdd\x3b\x51\x84\x7d\xd5\x89\x76\x6a\x4d\xe6\xef\x90\x66\xa7\xd1\x5a\xc6\xee\xd8\xac\xb7\x90\x07\x9e\x72\xec\x9e\x72\xec\xb6\x92\x63\xe7\xb4\xcc\xb0\x23\xdc\xfe\xb7\x4b\xaf\x73\x3a\x25\xd7\x39\x0f\x21\xb5\xae\x11\xdd\x9f\x12\xeb\xfa\x70\x00\x3b\xed\x52\xeb\xda\xa4\xc7\x59\xbe\x5f\x06\x90\xd9\x54\x6e\x5d\x93\x64\xab\x56\xf9\x75\x54\x2c\xd5\xe6\x47\x34\xcd\x71\x33\x7b\x87\x5b\xcc\xa9\x97\x14\xb2\xf6\xa3\x62\xc7\x3b\x82\xde\x4c\x28\x5c\x78\x2e\x02\x38\xda\x26\x1c\x01\x8d\x87\xbe\x9c\xc3\xa8\xca\x7e\x1a\x8f\xe4\x18\xf2\x82\x16\xd9\x2f\x86\xb5\x51\x41\x15\x54\xfc\x7a\x3a\x32\x3d\xe5\xda\x6d\x3a\xd7\x6e\xad\xd9\x76\xe6\x08\x82\x5e\x2a\x96\xae\x2b\xa1\xcb\x52\x5a\x59\x65\x73\xd5\x89\x83\x06\x54\x69\x9d\x98\xe2\x3c\xec\xcc\x2e\xd0\x53\x76\x97\xa1\x9d\xbe\xea\x87\xb6\xcc\xf2\x02\x9d\x32\xbd\x40\xb3\x2a\xa2\xb6\xb9\x3a\xa0\x6d\xd6\x17\xb0\xcd\xfc\xca\x56\xcf\x5c\x4a\xd4\x7e\xac\x4d\x9e\x6b\x5e\x50\xb4\xf7\x3c\x30\xf0\x35\xe7\x82\x35\x59\x8f\xb6\x39\x61\x60\xdd\x79\x61\x4d\x26\x61\xf7\x9c\xad\x9c\x6b\x72\x58\x54\x4f\xe6\xbf\x57\x62\x18\xb1\xd0\x3e\xea\xac\x30\xc1\xb2\xdf\xc1\x3f\x40\x81\xb0\x9f\x0d\xae\x03\x14\xfa\x09\x4a\x93\x41\x88\xa6\xd0\x5b\x6d\xd9\x59\xf0\xfa\x97\x1f\xbf\xac\x66\xef\x6f\xd5\xce\x02\xb5\x19\xbf\x64\xb3\x61\x13\x32\xb0\x84\x56\x0c\xe4\xf7\x98\x43\x16\x35\x34\x48\xd1\x7d\xaa\x4d\xf4\x20\x71\x38\x62\x9e\x0b\x98\xc1\x64\x40\xbf\x15\x4d\x65\x46\x9f\x69\xb2\x80\x51\x73\x28\x1e\x66\x5e\x0a\xa2\xc5\x52\xd8\x3b\xdc\x8e\x44\xf6\x10\x31\xe5\xe3\x6b\xec\x2d\x13\xe7\x53\x69\xe4\xa5\xeb\xa7\xe2\x05\x6d\xe4\xb0\xde\x7e\x2c\xdc\x51\x2c\xf6\xac\x46\x33\x8b\xa1\x1f\xe0\x69\x8c\x97\x0b\x47\x0f\x90\xa3\x58\x83\x4b\x1e\xe3\xa5\x58\x03\xd3\x8d\x38\x3b\xfe\xe2\x18\x12\xbe\x17\xf0\x38\xb2\x6e\x83\x4e\xc0\x1c\x12\x73\x59\xa1\x08\x54\x38\x81\x2d\xb2\x07\x17\x41\x0a\xc3\xe0\x0b\xe2\xd7\xe9\xea\xcd\xce\xf2\x3e\xc0\xf8\x45\x20\x3b\x5b\x79\x4a\x3e\x4a\x70\xc6\x45\xcc\x2c\x9c\x87\x50\xf3\xe5\xe0\x5e\x38\xf5\x35\x56\x58\x1a\xbe\x24\x95\x21\xe7\x6d\xc8\x48\x48\xc5\xa5\x59\xa7\x95\x70\x5f\xa0\x52\x03\x21\x9c\xc3\x15\x90\xf6\xa9\xd3\x63\xa5\x7d\xc1\xde\xb2\x50\xe5\xf4\x92\x9c\x29\x6b\x66\x44\xc4\xb4\x91\x12\xef\x96\x21\x4a\xec\x0c\xfb\x8d\x6b\x7d\xc4\xcb\x10\x0d\x48\x89\x13\xc1\x43\x26\x95\xf5\x98\xa1\x70\x01\x34\xb5\x3d\x34\x35\x41\xd8\xb8\xbf\x79\x75\x7c\x06\x5e\x92\x5c\xd0\x6f\xf5\x31\x1d\x25\x49\xe7\x61\x1f\x0d\xb2\x1b\x34\x8e\xab\xde\x4b\xc6\xc4\xc9\x2a\x4a\xe1\xbd\x60\x4f\x27\xb7\x49\x2a\x49\x6a\xc4\x07\xa1\x25\x59\x56\x49\x74\xf0\x1f\x5c\x67\xe6\xc9\xe9\x6e\xc2\x2b\x75\xdc\x9a\x3f\x5a\x1c\x09\x4d\x45\x6b\xdb\xfc\xcf\x75\xb1\xde\xe9\x49\xfb\xe3\xa9\x7c\x16\x51\x43\x88\x31\x53\x85\x8d\x04\x55\x72\xbb\x7f\x45\x7f\xfc\x33\x0c\xc1\x34\xe3\x41\x98\x22\x00\xc1\xfb\xf7\xa7\x27\x20\xb8\xa6\xf7\x45\xa2\x0b\x80\x20\x01\x21\xba\x4e\x01\x51\x28\x87\xea\x81\x37\xde\xdf\xf2\x0b\x3d\x45\xc7\xea\x94\xb2\x3e\xf5\xbc\x2d\x2b\x78\xf1\xaf\xfe\x72\xf6\xe6\xa5\x1a\x00\x40\x99\xd2\xaf\xd7\xe7\x5a\xee\x90\x1a\x93\x0e\xdd\x19\x78\x3a\x0d\x11\x20\x7f\x47\x68\x0a\xd3\xe0\x56\x61\x48\x34\x09\x67\x94\xa4\x71\xe0\xa5\x94\x11\x69\xb1\xa9\x14\x03\x08\x42\xec\xc1\x50\xc8\x6a\xaf\xe4\xd7\x1b\xd8\xfd\x8c\xbc\xcb\xea\x4c\x4d\x51\x0a\x12\x94\x82\x20\x22\x99\x74\xef\xe0\x75\x0a\x92\x14\xc7\x08\xe0\x6b\xf2\x0d\xed\xe9\xe4\x98\xa4\xd4\xfb\x98\x16\x9e\xba\x45\x31\x79\x33\x8d\x61\x94\xcc\x83\x34\x2d\xaa\xe4\xf0\x64\xfc\x93\x63\x5a\x96\x6a\x11\x66\xa2\x9f\xfe\x0e\xa3\x15\xc0\xe9\x0c\xc5\xe0\xe4\x58\xb1\x85\xac\x94\x9e\x3a\x1d\x84\xcc\xce\xa9\x51\x33\xc4\x08\x13\xf6\xc2\x9a\xf5\x0a\xd2\xe8\x15\xbe\xd7\xa9\x16\x26\x3d\x1e\xab\x49\x65\xaa\x7c\x54\x23\x79\xec\x05\x3b\x20\x39\xe8\x30\x45\x03\x4c\x14\x7d\x4a\x5b\x6b\x06\x16\xae\x08\xe0\x9b\xb7\xac\x85\x6f\xb5\x4b\x9f\xf5\x08\x63\x04\x55\x0b\x5b\xf2\x62\xd2\x35\x61\x6c\x60\xbf\x24\x8d\x0b\x4b\xd5\x65\x7c\xa9\xaf\x8b\xd9\xb8\x03\xdf\xa1\x17\x92\x8a\x79\xce\x31\xe5\xf6\x56\x00\x50\x9d\x12\xea\x48\x82\x42\xe4\x49\x1a\x8c\x88\x35\xe2\x8a\x4e\x6e\x2d\xae\x48\x49\x09\xa1\xdd\x6a\xd0\x46\x1a\xcc\x56\x28\x44\x62\x37\x61\xb5\x6b\x59\x0e\x5e\xa3\x30\x87\xfd\xcf\x5a\x74\x60\xd6\x4e\x7c\x0d\xc7\x72\x1f\xe7\xf1\xf6\xb1\x78\x8e\x46\x77\xcf\x7f\xfe\xe5\x2f\x8d\xad\xc5\x8c\xc5\xd3\x1c\x83\xc7\xd1\xc1\x3f\xf0\x2c\xeb\x67\x81\x60\x83\x32\xd4\xaf\xab\x0d\xcc\x14\xa2\xad\x18\xb5\x45\xe5\xa7\x4d\xc1\x8e\xba\x66\x8b\x71\xd7\x94\xed\x70\x3f\x3e\x64\xe4\x17\x19\x92\xc8\x6e\x51\xca\xa8\x30\x02\x60\x8c\xe6\x89\x02\x1c\xe5\x09\x0e\xe6\x09\x0e\xa6\x25\x1a\x96\x4a\x78\xc0\x08\x47\xab\x39\x5e\xd6\xd5\xbf\xe4\x0d\x0c\xaa\x26\x2b\x1a\xa4\x81\x63\x72\x27\x65\xd3\x21\xed\x97\x7f\xb3\x12\x49\xbd\xa3\xd5\x10\x8c\x8b\xaf\x00\xae\x66\xb7\x4f\xb8\x9a\xdd\x3e\xe0\x6a\x94\xa1\x44\x0f\x00\x0c\x61\xd3\xc8\x07\xad\x3c\x52\xa2\x4e\xd3\x83\x6a\xf4\x90\xa0\x0f\xde\xce\x17\x3f\xfe\x72\x32\xbe\x79\xcc\xd0\x07\x97\x33\xc4\x0c\x10\xeb\x82\x3e\x48\x79\x0f\x5f\x1f\xf4\x81\x82\x78\x3d\x43\x1f\x6c\x86\x78\x5b\x81\x3e\x28\x88\xb7\x26\xe8\x83\xcd\xd0\x2e\xc4\x53\xbc\xac\x73\x05\xae\x01\x36\x82\xc5\x2c\xdc\x81\x10\x4f\xa7\xc8\x07\x78\x99\xf6\x40\xbc\xac\xb1\x8c\x76\x86\xd6\x7a\xa1\x9a\x17\xd2\x30\xc3\x2d\xef\x56\x32\x0c\x1f\xc0\x44\x82\xf5\x8a\x97\x91\x47\x15\x69\xd6\xe1\x92\x9c\x26\x15\x15\xf0\x40\x8e\xbc\x6d\x0f\x89\xa0\x58\x88\x6c\x64\x9b\x63\xe2\x3c\xaf\x6f\xfb\x7c\x1c\x68\x67\x6a\x4f\x3d\x17\x2c\x42\x04\x13\x04\x88\x79\x96\x62\xa0\x5c\x20\x2f\x46\xe9\xe9\xc9\x33\xa2\x27\xaf\xf5\x28\x4a\xb6\x49\xc6\x65\xc2\xd9\x26\x42\x77\xe0\xe8\xf8\x8c\xb2\x4f\x77\x8e\xe4\x0d\xc3\xb4\x68\x75\x4d\xa0\x32\x7d\x7e\xb5\x0e\x5b\x5f\x5f\x08\x35\xac\xbd\x07\x00\x51\xb3\xff\x2a\x0c\xbe\xcc\x6f\x51\x07\x73\xdf\x5a\x32\xaa\x5b\x59\xba\x1c\x13\xc2\x0c\xd9\xfe\xeb\x84\xb1\x21\x80\x09\x4d\x7b\xf9\xaa\xd2\xbf\xe9\x21\xfb\x84\x64\x23\xef\xf2\xf2\xcd\x75\xcf\x7d\x6e\x32\x08\x0b\x21\xb4\x4f\x50\x36\x5f\x15\x94\x4d\xca\xc1\x68\xa3\x2a\x96\x8d\x0c\x54\xfb\x04\x66\x53\xb6\xbd\xe5\x12\xbc\x0b\x9a\x4d\x57\x0d\xf0\x41\xc1\xd9\x98\x93\x11\xbb\x02\xaa\x4b\xef\xf7\x66\x13\x5f\x8f\x31\x7c\x99\x30\x4b\x78\xae\x9e\xae\xd7\x1a\x5e\xef\x1a\x69\x60\xee\xce\x2e\x0d\x5a\x5b\xb7\x05\x26\x78\xff\x86\x6e\xc7\x36\x5b\xcb\xb1\x04\x95\xd6\x45\x05\xae\xdd\xa3\x50\x86\x79\xe6\xe9\x6d\x15\xb2\x36\x1f\x53\x6b\x70\xe7\x49\x2b\x70\xe7\x8e\x16\xff\xb5\xbb\xd8\xfb\xd9\x16\xcc\x3a\xa4\x77\xfd\x2c\x59\xf4\x99\xad\x14\xed\x1f\x65\xc6\x16\x6e\xa4\x09\x65\x2d\xe5\xcd\x42\x19\xd9\x95\x69\x97\x1e\x22\x75\x74\x9c\x42\x2d\x51\x00\xe6\x67\xe2\x84\xd8\xca\xc5\x48\x3d\xf0\x2b\x02\x33\x78\x8b\xc0\x72\x31\x8d\xa1\x4f\xcc\x89\x31\x91\xa3\xc9\x2a\x49\xd1\x1c\x5c\xad\x00\xe4\x60\xfc\x99\xcc\x4d\x31\xa0\x87\x08\x88\xd1\x92\xa8\x91\x80\x07\x09\x81\xbb\x59\xe0\xcd\x28\xf0\x3f\x24\xe1\x87\x11\x29\xb3\xb3\x22\xa1\x84\x44\xbf\x19\x82\x13\x1c\xfd\xf1\xcf\x14\xdc\xe1\x38\x5e\xb9\x00\xdd\xa2\xec\x41\xbc\x9c\xce\xc4\x90\xc8\x3b\x98\x80\xbb\x38\x48\x53\x14\xf1\x40\x46\x1c\xfa\x20\x49\x57\xac\x72\x40\x90\x80\x24\x0d\xc2\x90\x46\xb3\x0d\xc1\x2b\x7c\x87\x6e\x51\xec\x82\x3b\x04\x7c\x0c\x62\xe4\xe1\xf9\x1c\x45\x3e\x9b\x56\x8e\x87\x9b\xb5\xc2\x02\x25\x59\x78\x63\x84\xee\x68\xbb\x43\x70\x86\x60\x1c\x01\x5a\x94\x88\x90\xa1\xef\x20\xfa\xc1\x3c\x98\xc6\x30\x45\x03\x46\x8c\x59\x3a\x0f\x8b\x00\x7a\x45\x68\x7c\x11\x57\xaf\x09\xa9\x67\xeb\xea\x63\x6f\x99\x31\x0f\x2c\x41\x82\x0c\x1b\x69\x1b\x9d\x54\x86\xb2\x14\xa8\xcb\x5c\xe6\x8f\x59\x2a\xde\x7e\x25\xd2\x57\x54\x32\x6a\x6a\x3b\xfb\x8d\x4a\x50\x7b\x78\xb1\x1a\x50\x49\x35\xb8\x46\xc8\xbf\x82\xde\x4d\x21\x08\xd8\xb5\x9b\x3c\xc5\x73\x0c\x32\xb9\x70\x8c\x17\x2b\x50\x8c\x89\xb3\x97\x17\x06\x0b\x02\xf4\x50\x4a\x13\x90\xd5\xa7\xb2\xc6\x24\x56\xb0\x70\xaa\x01\x8e\xf2\xcb\x1d\x8a\x5e\x57\xa9\xca\xcd\x17\x0f\x84\xa0\xdc\x76\x5b\x47\x4e\xfe\x1c\x21\x26\x9b\x83\x82\x8e\xbb\xae\x93\x90\x27\x07\xfc\x90\x22\xa3\x50\x32\xf4\x58\xdf\x03\x87\xcd\x30\xf8\xd7\x6b\xca\x7d\xd7\x07\xb9\x34\x3d\x9c\x5d\xcb\x8d\xdb\xec\xc8\xa9\x32\xc8\x85\x87\x17\x35\x59\x88\x8d\x19\xa4\x1a\x1d\xc5\x63\xb8\x5d\x87\x84\xab\x3b\xae\x33\x0d\xf1\x15\x89\x55\x56\x19\xb7\x4c\xa4\xb6\xca\xc9\x52\xef\x95\x56\x4d\xe9\xa2\x02\x1f\x00\x84\xa8\x60\x75\xee\x6e\xbb\x7e\x10\x20\xa2\x2f\x92\xd1\xe9\xec\xd5\xcb\xad\x83\x88\xba\xb9\xab\x70\x03\x70\xa2\x97\x92\x19\xe9\xab\xc6\x13\xd5\x18\x94\xb9\xbc\x2c\x1b\x77\xab\x42\x50\x0d\x37\xfa\x68\x6d\xcc\x96\x16\x66\x82\x2a\xea\x8e\x77\x6a\x91\x47\xb3\x67\xbe\x32\xf0\xd1\x32\x89\x9e\xa0\x47\x1f\x26\xf4\x68\x0d\xc0\x9f\x01\x7c\x94\xdd\x9e\x9e\xd0\x47\xbf\x6e\xf4\x51\x3b\x5b\x4a\x62\x7b\x33\xdd\x8a\x11\xe5\x82\x1a\x51\x52\x4c\x8d\x28\xf4\x0e\x93\xb1\x60\x80\x23\x80\xaf\x15\x36\x14\x12\x66\xe1\xc1\x08\x5c\x21\x5e\xa3\x58\x34\x9f\xbc\x43\xd0\x07\x73\x1c\x23\x00\xaf\xf0\x32\xa5\x0d\x12\x2d\x26\x21\x09\x9d\xb3\xac\x13\xcc\x07\x02\x28\xc1\xb8\xc9\xe3\xef\x69\xd6\x78\xf4\x28\xb6\x97\xc1\x1c\x31\x10\xdb\x07\x82\x5c\xcb\x0d\x10\xc0\x64\x7c\x31\xbc\x5f\x73\x89\x34\xbc\xd9\x15\xfa\x96\x64\x46\x82\x7f\x07\xba\x3c\x45\xab\x46\xfe\xcf\xff\xdb\xdf\x01\xd2\x1e\x39\x57\x83\x82\x23\x62\x87\x4e\x72\x6d\xde\xde\x51\xe7\x3a\xf3\x72\x7e\xad\x0e\x40\xc6\x28\x48\x8c\x67\xb7\x0c\x7a\xa9\xf6\x17\x8a\x60\x37\x52\x64\xa6\x6a\x5e\x9a\x88\xcc\x4d\xe0\xf9\xca\x46\x0c\x3a\xb8\x0e\xf6\x8b\x7e\x07\xa7\x04\x1b\x26\xd9\x2b\xe4\xae\x2d\x0c\xb9\x94\x35\x5d\x42\x48\x5e\x0f\x61\x09\x0b\xe3\x90\x26\x9a\x57\x53\xfa\x07\x1d\x19\x79\x62\xc2\x7a\x32\xab\x17\x65\x50\x43\x1b\x9b\x99\x81\xea\x23\xd7\x39\x93\x8e\x62\xa2\x2e\xa0\xf9\x15\xf2\x33\x75\x21\x5e\x86\x28\xb1\x39\xd5\x14\xc2\x5e\xc2\xac\x5a\x2c\x10\xbb\x1a\x57\x30\x9d\xf3\x15\xcd\x93\xc3\x9b\xcf\xad\x80\x06\x78\x20\x68\xcf\x75\xd1\x16\x2a\xa6\xac\xac\x7f\x27\x2e\xb3\x25\x9f\x76\xe3\x92\x42\x90\x69\xd5\xec\xbe\x8e\x7b\xea\xda\xf0\xab\x69\x8e\x2a\x8a\x96\xdb\x85\xb2\x76\x65\xe4\x36\x96\xa1\xc1\x62\x2c\xca\xc9\x2e\xeb\x86\xbd\xde\x34\xe8\xb5\xd3\x1d\xf2\xba\x7a\xa0\xf7\x0a\x78\xdd\xf4\xf0\xb7\x44\xbe\xae\xd9\xde\x35\x1e\x15\x95\xa4\x6f\x23\xf0\x7b\x81\x1a\x57\xc5\x4e\xa8\xe8\x3f\x51\xd1\xbf\x41\x9c\x45\x82\x22\xff\x98\xc7\x5a\x54\x63\x52\x34\x71\x16\xf5\xa4\xb7\xbc\xd0\x6f\x44\xe2\xf6\xbb\x27\xb4\xe8\xc0\xa2\xbd\x3a\xc7\x0a\xae\x66\x87\xf5\x8d\x79\x7e\x91\xe2\x05\xcd\xcc\xa8\x5b\xa3\x3a\x6c\x4d\x5b\xd4\x73\x4d\x2b\x7d\x61\x9e\x5b\xc6\x0d\x68\x5e\x6b\x85\x77\xce\xc3\xc1\xe8\x5a\xf5\x89\x0b\xde\x14\xe9\x5c\x1b\xda\x98\xe4\xcb\x5c\x8e\x70\x04\x97\xd9\xe7\xbb\x20\x0c\xb3\xf1\x93\x97\x58\xee\x5e\xd7\x59\xd8\x3f\xd5\x1c\x01\x5d\xbd\x21\x3b\xe0\x9f\x3b\x0d\xd0\xcf\x1b\x42\x9c\x73\xf5\xa1\x21\xc4\xf9\x19\xdf\xf9\xeb\x00\x9c\x6f\x0c\x6f\xde\x97\xf8\x6a\x05\x7d\xde\x1f\xbf\xd9\x09\xb9\x8e\x47\xd5\x03\x3f\x52\xa4\xf4\xc2\xbe\xcf\x13\x43\x48\x6c\x65\xe0\x4f\x07\x49\xe9\x1f\x3f\x48\x96\x89\xb9\x66\xc6\xb6\x4e\x11\x45\x80\xfc\xd3\x39\xd1\xdb\x39\xc1\x22\xf8\x1b\x1d\x12\x56\xdb\xad\x09\x99\x37\x7e\x42\xc8\xd2\xe8\x6f\x70\x3c\xd0\x4b\xcc\x32\x0a\xa9\x08\x2d\x41\xa4\x69\xf0\xa6\x64\xa6\x70\xfb\xba\xfd\xf4\x7f\x09\x6a\xb9\xbd\x5a\x32\x4f\x19\x77\x64\x5b\x15\xa1\x9e\x0e\x34\xf5\xbf\x06\x75\xa0\xb6\x75\xa6\x89\x08\x68\x4f\x47\xda\x57\x56\xf8\xe9\x81\x9e\x79\x15\xb1\xf5\x37\x38\xf6\xd4\x3e\x87\xbf\x57\x79\x28\x1a\x71\xfb\xa8\xeb\x43\x89\x51\xdb\xed\x82\xbf\x03\x12\xe9\x16\xe0\x07\x82\x53\xfc\xfa\xc5\xe1\xb3\x53\xfc\x2e\xe8\x04\x5c\x42\xe7\x24\xc2\x4e\x27\x28\xbe\x0d\xc8\x5f\x95\xaf\x1a\xc0\x1a\x17\xd1\x7a\xe6\xba\x53\x66\xfd\x23\x2f\x78\xa4\xc1\xcc\xb7\x2f\x6a\x55\x05\xea\xbe\xc0\xcb\xd8\xd3\xc8\x63\xad\x74\x6c\x59\x09\x8b\xf6\xd5\xa6\x1e\x96\xa3\x47\xa2\xa7\x8d\x82\x8b\x7c\x71\xaa\x3e\xa0\x05\xbe\x43\x31\x03\x1a\x1f\xdc\x05\xe9\x8c\xc7\x83\xe6\x72\x83\x62\xe0\x13\xff\x25\x89\xfc\x7a\x99\x51\x94\x7c\xca\xde\x41\x7e\xfe\xc3\xb9\x10\x05\x99\x9d\x6e\x41\xe8\x5f\x2c\xa7\x53\x94\xd0\xa3\xd2\x49\x66\xf8\x8e\x46\x6b\xfd\x3a\x23\xba\x3b\x8e\x78\x5f\x85\xdb\x54\x08\x33\x23\x83\xa6\x11\x93\x84\x2e\x4c\xf3\x2f\x51\xea\x72\xb5\x40\x80\x3d\x0c\x22\xf6\x9c\x0e\x19\x9f\x74\xf7\x06\xdd\x9d\xd1\x65\xcb\xae\x98\x00\x82\xeb\x65\x9a\x69\x4e\xc7\x64\x4f\x73\x6a\x01\x0f\x86\x21\xf2\xc1\x1f\xff\xfc\xef\xff\x4e\x51\x3c\xff\x9f\xff\xf9\xe3\x9f\x4e\x9d\xf3\xd5\x09\x92\xf7\x51\xf0\xd7\x12\xd5\x3f\x99\xbb\x89\xc5\xf9\x74\x78\xa9\x2e\xba\x36\xbf\x51\x1d\x0a\x91\x04\xce\x7f\x34\x2d\xd3\xf5\x1f\xe0\x9b\xa3\x30\x27\x52\xf2\x6d\x6b\x3b\xa1\x93\xc7\x36\x1c\x2a\x42\x1b\x0c\x57\xcc\xf2\x57\x87\x86\x6c\x25\x65\x2d\x10\x1a\x7e\x0b\xae\x71\x4c\xf0\xbb\xee\x09\xec\xf6\x94\xf3\x90\x4b\xb2\x6a\x11\x08\xa2\x82\x33\x70\x84\x5c\x80\x63\xe1\x97\x68\x95\xf3\xc9\xfb\x77\xa7\x96\xa5\x71\xca\x1e\x3e\x29\x7c\xf4\xcd\xc5\xf9\xd1\xf1\x8b\x8b\xcf\x2f\xde\x1c\xfd\x70\xf6\xe2\xc4\x7e\x5d\xd6\x24\x89\x2e\xfa\x97\x43\xd9\x22\xb3\xb2\x04\x8f\x49\x12\xd1\x43\x4e\x2b\x88\x2e\x0a\x31\x14\xf1\x09\xf6\x22\x88\x72\x72\x6d\x5a\x14\x5d\x74\x78\xc5\x5a\x0c\x1d\xf4\x21\x86\x72\x12\xf5\x22\x88\x0e\xba\x09\xa2\x83\x9e\x04\x51\xce\x45\x1a\x51\xd4\x57\x21\x2e\x7d\x42\x67\x47\xbd\xe9\x24\xdb\x68\x51\x39\x22\x7d\x8d\xca\x93\xd0\x61\xcf\x1a\x94\xd0\xf2\x57\xa6\x46\xa9\x68\xf6\xe8\x75\xa9\xca\xa4\xba\xbe\x69\x2d\xce\xf6\x1f\x9a\x56\xb5\xdf\x4d\x98\xed\xf7\xab\x55\xc9\xda\x53\x73\x61\xf6\x38\x54\x27\x91\x89\xfa\xd4\x9f\x44\x29\xf4\x95\x29\x51\x55\x92\x7d\x15\x9a\x54\x69\x5a\xdd\xde\xb3\x16\x42\xcf\x1f\x9e\x4e\xf5\xbc\x9b\x18\x7a\xde\x54\x0c\xbd\xc4\x31\x49\xf8\xf3\x0b\x42\xba\xc4\x27\x32\x87\x2b\xe0\xcd\x30\xce\xd8\x23\x5a\x09\x0c\x96\x49\xac\x02\x95\x89\x24\x1d\x40\xe2\x54\x5c\xa7\x9e\xa5\xfe\xa6\xff\xe2\xde\x47\x39\x5e\x5f\x97\xf2\xde\x24\x31\x93\x44\x87\x47\xab\x8e\xd2\xb5\x89\xe4\xd3\x55\xf1\xde\xb3\xad\xe2\xed\xd4\xd4\xcd\xe4\xd4\x51\x57\xef\xde\x6b\x59\xbd\xbb\xa0\x79\x65\xb0\x5b\xa9\xdf\x5d\xc7\xb0\x7b\x35\x55\x6f\xd6\x74\x52\x4a\x65\xf4\x2d\xcf\x49\xf3\x19\x69\x55\x75\xb3\x9e\x2b\x14\x45\x37\x65\xd6\xd0\xd6\xd1\xcc\x13\x7a\x17\xd2\xd9\xa9\x1f\x5a\x0f\x8b\x2f\x56\xa2\x6e\x52\x2f\xb5\xc6\x67\xee\xb4\xad\xa4\xe7\xb4\xaf\xa2\xa7\x2b\x87\xf7\xd8\xeb\xe0\x35\x26\xc9\x63\xa9\x81\x67\x98\xd8\x36\xea\xdf\x95\x4b\xa3\x9b\xea\xd5\x31\x1c\xb4\x22\x12\xc9\x2a\x76\xa8\xf7\xba\x74\xa7\xdc\x61\xb8\x3e\x34\x5e\xc3\x22\xad\xbf\x26\x1d\xfb\xb4\x80\x31\x45\x00\xd9\x7a\x8d\x3a\xe7\xeb\xa9\x4e\x57\xdd\x15\xc5\xa7\xee\x35\x3d\xca\xae\xec\xee\x0e\xf1\x87\x54\x9d\x6e\x71\x3b\x0a\x7f\x1d\xed\x1f\x3e\xe6\xea\x74\x24\x2b\x36\x27\x70\xdb\x12\x75\x16\xa3\x22\xc6\x1c\xcb\x41\x1d\x45\xc2\x90\x60\x18\x23\xe8\xaf\xa8\x35\x28\x21\x37\x2d\x22\xf5\xa8\xd3\x60\x20\x9a\x35\x16\x30\x88\x87\xe0\x9c\x56\x26\x22\xe5\xfd\x01\x04\x7e\x70\x7d\x8d\x32\xc9\x01\x3c\x3c\xbf\xe2\x8f\xe2\xeb\xdc\x50\x46\xbc\x72\xd4\x5c\x41\x6e\x7d\x05\xbb\x65\x82\x16\xf9\x41\x2a\x19\xa3\xf2\x9f\xfb\x2b\xe0\xb7\x92\x16\x61\xc8\x14\xab\xb6\x05\x79\x1e\x49\x69\x3f\x1d\xe7\xf5\x5c\xdf\xaf\x4a\xdb\xb6\x45\x09\x1e\x66\x91\xbf\x12\x19\xd7\x54\xe9\xaf\x3d\x15\x75\xf0\x01\xeb\x2b\x24\xa5\x3d\x2e\x3a\x9f\x3e\x0f\xa0\x8c\xd4\xc1\xe2\x3c\xf9\xe9\xf2\xd9\x9e\x3a\x1a\x2b\x8d\x61\x94\x04\xcc\xb6\x2a\x7d\xe0\x3c\x55\xdc\x9e\x9b\xd5\x92\x12\x14\x5e\x0b\x58\x40\x6d\xd5\xa6\x5c\x55\x5d\x67\x7d\xa8\x37\xe8\xae\x55\x47\xe5\xcb\x41\x3d\xbe\x66\xa6\x31\x16\x7b\x8f\xe7\xdb\x97\xf1\x2c\x37\x54\x0a\x49\x60\xd4\x75\x56\x42\x7a\x78\x35\x7f\x8a\x89\xab\x4b\xfe\x9c\x8a\xbf\x3f\xca\xb2\x3f\xd6\xbb\x8f\xff\x93\x37\x5b\x4b\x13\xbc\xb4\x8f\xbe\xaa\xa2\x3b\x1c\x1d\xbd\x72\xf7\x66\xb2\x30\xdb\xd5\x21\xb3\x1b\xf5\x77\x9f\xde\x95\x20\xda\x05\x38\xc8\x8a\x6c\xce\xe1\xd7\x2f\x89\x1d\x94\x61\xb7\x73\xc4\x17\xcd\x15\x7a\xa7\x92\x00\x65\xba\x6b\x97\xe0\x77\x25\x83\x46\x36\x4a\xf0\xfe\x3d\x85\x83\x2f\xa0\xe0\x6d\x01\x52\x00\x38\xe6\x0d\x34\x8a\xd9\xde\x71\x1b\x5c\xd4\x73\x25\xa9\x49\x4d\xfd\x85\xda\xec\x9c\x27\x58\xd4\x64\x35\x1c\xe3\x45\x80\x7c\x32\xb1\x7f\x68\x70\xc0\x4c\xdc\x3f\x69\x10\x5e\x4f\xad\xd8\xbd\xcc\x6d\x6c\x35\xb7\x0b\x5a\x28\x24\xc1\x73\x94\xce\x32\x95\xef\x2e\xbb\x32\xdd\xc5\x38\x9a\xb6\x99\xeb\xb8\xef\xc0\xfc\x4e\x10\xb1\x6a\xd8\x78\xe1\xc0\xdc\x32\x6a\x7c\x49\xc7\xec\xac\xa8\x3e\x04\xcc\xf8\xef\x5e\x87\xa7\x93\xcb\xd5\x68\x93\x98\xf1\x35\x3a\xad\x52\x5b\x3c\xad\x68\x0f\x15\x55\xd1\xa8\x0d\xca\x3a\x20\x45\x38\xdf\xba\xc2\x37\x1e\xb9\xe3\xb1\x11\x95\x9c\x3c\xb0\x39\xa5\x46\x94\x1d\x05\xc5\x35\x2e\x78\x8e\x9f\x8c\xe3\x39\x4c\x07\xd1\x32\x63\x33\x3d\xac\xb3\x62\xd5\x40\x8a\x53\xa8\xc9\x13\x6b\x12\x4d\x38\x62\x89\x6a\x4e\x8a\x71\x78\x05\xe3\x41\x8a\xa7\xd3\x10\x55\x5d\x65\xeb\x86\xf0\xce\x07\xd8\x04\xc4\xbb\xe0\x8f\x87\x81\xe1\xcd\x88\xb8\x09\x0c\x6f\x20\xdf\x0f\x73\x4a\x98\xa1\xb8\xe9\x8f\x45\x58\x53\x51\x75\x42\x15\x13\x59\x45\xe6\xa6\x2b\xf9\x92\xb5\x92\x7f\x2d\x34\xab\xfa\x12\x0a\xae\x7e\x8d\xef\x96\x8d\x5a\x58\x3e\x8b\x6b\xf3\xfa\x8e\xd3\x47\x01\xf6\x1c\x63\xea\x70\xb9\x41\x2b\x76\xc8\x50\x59\x2d\x6f\x0c\x56\x98\x42\x48\x85\x91\x0a\x1a\xae\x11\xf4\x59\xda\xd6\x0a\xe8\x66\x43\xde\x98\x55\x03\x65\xf0\xe4\x46\x2f\xd7\x46\x5f\x5b\xb5\x72\x1e\x23\x0f\xf9\x28\xaa\xc6\x19\xae\x1f\xc7\x59\x1e\x9a\xaf\xcc\x05\x4f\x72\x1a\x5b\x22\x0f\x34\x36\x48\x94\x30\x18\xd5\xd8\x8b\xb5\x58\xa9\xa5\x6c\xb5\xc6\x41\x79\xe2\x3f\x31\x44\x18\x7c\xf3\x1f\xed\xc3\xf3\xca\xe4\x19\xbb\xea\xe1\xda\xda\xdd\x4c\x6d\xcb\x2a\x42\x39\x72\xad\x28\x63\x43\x03\x44\x07\xec\x7b\x16\x11\x22\x0d\xea\x82\x59\xea\x29\x2a\x73\xd9\x5f\x2f\x6a\x1f\xd6\x6f\xd7\x62\x35\x8b\x33\xe9\x96\x45\xae\x64\xe8\x72\x00\x15\xe5\xbe\x81\x88\xfc\x29\x86\x16\x59\xe3\x60\x28\xaa\x32\x8c\xab\x6d\x5a\xce\xbe\xd5\xcc\x44\xd8\x06\x59\x20\x59\xee\x57\x55\x8c\x57\xed\x6e\x53\x25\x35\x3c\xf4\x2d\xa7\x18\xf3\x03\xd9\x77\xd5\xd8\xec\xc6\x9b\xaf\xb6\x89\x6d\xef\x40\x81\x4f\x17\xd2\x91\x67\xb7\xd7\x8a\x65\x14\x0f\x4c\x33\x76\xbd\x6a\xb4\xeb\xb3\xb7\x76\x40\xac\xde\x26\x4c\xf5\xda\xa1\xa7\xe9\xbf\x4d\x03\x50\x4b\x7c\xd8\x0d\x0e\x19\x28\x75\x9b\xbe\xc0\xa8\x1b\xea\x41\x36\x18\xd4\x2a\xbe\xef\x44\xa1\x4e\xd8\x40\xda\x88\x66\x06\x6f\xc3\x00\x6d\xb6\x87\xbb\x25\x0d\xb3\x23\xfa\x96\xb1\xad\xbe\x30\xb8\xb4\x9d\xd8\xbe\xda\x0d\x8f\x8b\xfe\x6b\x80\xca\x55\x74\x69\xb3\x10\xd2\x00\x9b\x22\x74\xd1\x7f\x56\x11\xa1\xf9\xc6\x33\x63\x75\x35\x1f\x7c\xd3\x67\x9b\xa3\x77\x49\xef\xf6\x87\xe1\x25\x35\xfb\x35\x22\x79\x35\x5f\x9f\xf6\xa8\x5e\xf2\xdb\xf5\xc2\xaf\x15\x7a\x57\xf3\x09\xd9\x3f\xdb\x44\x70\x36\x3d\x8d\xaa\x6a\xc0\x63\xc6\xf0\x02\x4d\xe4\x95\x84\xe5\x25\x1c\xfe\x8a\x78\x8f\xc7\x82\xe9\x55\x76\xaa\xb5\x73\xcd\xdd\xdc\x3e\x08\x28\xaf\xd3\xd7\xef\xde\xbf\xbb\x3f\x4c\x3b\x40\x79\x35\xc2\xe6\xb2\x01\x82\xa8\x46\xbb\x58\xe6\x08\x81\x35\x64\x94\xfd\x8c\x56\x4d\x33\xae\x8d\xb6\x86\x9f\xd1\x0a\xe0\x18\x5c\xe7\x55\x3d\xd5\xc2\xc4\xd1\x25\x93\xc1\x65\x8a\xaf\xb1\x47\x5c\x9a\xc5\xdf\xe5\x7c\xb2\x03\xd7\x09\xd1\x75\x3a\x48\xe3\x60\x5e\x9e\x19\x9b\x91\x94\x41\xc1\xbf\x95\x8f\x21\x96\xb8\x06\x7d\x3f\xa0\xc9\x65\xc5\x51\xc7\x06\xd6\x2c\xb5\x4c\x4e\x5f\xab\x50\xc2\x2a\xfb\xac\x44\xa0\x6a\xa6\xee\x25\xa6\x65\x3e\x49\xba\x36\x69\xdb\x05\x28\xf2\x01\x04\x37\x68\x05\xee\x82\x74\xc6\xdf\xf5\xb0\x8f\xca\x6f\x3f\x73\xfa\x89\x07\xab\x24\xa1\x15\xb7\xdc\x8e\x6b\xe3\x3a\x72\xde\xb7\x90\x87\x94\xb5\x0c\x93\x54\xdd\x68\xfe\xfa\x33\xbb\x9c\xa4\xea\x9e\xaa\xd7\xbd\x6b\x6e\x02\x74\xd7\x49\xfe\x52\xd5\x99\xa1\xdc\xc2\x16\xc5\x10\xb5\x99\x97\x7f\x26\x45\xca\xa5\x32\xdf\x36\x23\x16\x7d\x68\x5d\xb9\xb4\xa4\xd1\x2b\x7c\x6f\x66\xea\x5a\xe9\x71\x9c\xb1\x6c\xab\x1a\x80\xb5\xa2\xa6\x37\x89\xf9\x81\x08\xa1\xc6\x32\xb3\x66\xe6\xac\x55\x7d\xc2\x9e\xb0\x86\xf6\x16\x59\xc1\x21\x9c\x49\x83\x01\xf2\x83\x14\x0b\xbe\x60\x5e\x89\x99\xdc\xbd\x69\x92\x3c\x5d\xfe\x14\x5f\x95\xe7\xcf\xe7\x6d\x8f\xca\x70\xcb\xe6\xd4\xc4\x85\x6b\x1f\xfd\x95\x2d\x16\x8c\x91\xec\xa0\x12\x8e\x0f\x8b\x60\x49\x71\x13\xf1\xc1\xb6\x3d\x00\x04\x53\xae\x0d\xf5\x4a\xf6\x5b\x3b\x63\xb5\x3e\x90\xa3\x11\xb2\x42\x1d\x9b\x3d\xc4\x94\x65\x77\x2d\x47\xcc\x5a\x13\xa1\x0d\x49\x9c\x5f\x73\x62\x74\xa3\x69\xd7\x4c\xa7\x4b\x3a\xb4\x61\x1c\xf4\x5a\xce\xab\x9b\x2b\xb7\x43\xbf\xf9\xca\x37\x68\xb5\xbe\x4c\xe5\x1a\x1a\xfe\x0d\xb3\x95\x1f\x7b\xbe\x72\xcf\x39\xc9\xfc\x2e\xde\xfe\x26\xff\x90\x72\x90\xbd\xdd\xe0\x5f\x77\x77\x07\xea\x2b\xfd\x63\xca\x41\xce\xee\x6b\x2d\xb3\x8f\xed\xf2\x6b\x6f\xd0\x6a\xad\xd9\x9f\xdb\x4b\xa2\x95\x48\xb7\x8e\xf4\xd9\x75\x93\x6e\x7b\x89\xb3\xc4\x4a\xb0\xc6\x94\xd9\xcd\x50\x2e\x41\x49\x22\xa4\x3a\x6e\x92\x80\xac\x6b\x42\x83\x80\xea\x52\xb0\x1f\x42\xe6\xad\xe5\xc4\x64\x7d\xad\x29\xfb\x78\x7d\x09\xc9\x95\x33\xa3\xf5\xd1\xf3\x00\x12\x90\x7f\x7d\xef\xff\xf5\xf6\xe0\xbb\x17\x9d\xca\x41\x14\x39\xa4\x42\xc2\x47\xa3\x84\x64\xab\x5b\x99\x63\xca\x10\xfe\x19\xad\x9e\x7d\x10\xef\xe4\xad\x2f\xe4\xda\x6e\x48\x16\x66\x9b\x7e\x9a\xe4\x1f\xdf\xdc\x6e\x21\xf1\xd8\x29\xb2\x50\x6e\x6e\x2b\xd9\x27\xfb\xee\x81\x29\xf7\x24\xfb\xb9\xe7\x74\x63\xc7\x22\xd5\x58\xed\xed\xb4\x8f\xea\xbd\xb9\x1d\x52\x56\xad\x04\xae\xfc\x8c\x56\xe0\x19\x20\x8b\xac\x48\x31\xae\x44\x1b\x96\xc0\xa4\x4a\xd7\xf2\x8a\xcd\x56\xb5\x86\x22\xc2\x62\x12\x92\x3a\x2a\x1f\x47\xee\x80\x71\x61\xb2\x08\x83\xd4\xba\xfd\x06\x7e\x96\x0e\xa4\x63\x96\x7f\xfa\xeb\x9f\x38\xc8\x2e\x55\xce\x33\x6e\x53\x5a\x2c\x10\xc3\xdf\x92\x26\x44\x7f\xf4\x7d\x29\x60\x6c\x2c\xd9\xdc\x1a\xce\xb5\x62\xed\xa8\xda\xac\x78\x4c\x99\x68\x94\x32\x42\x1f\xea\xfd\xb4\xb5\xc6\xa6\xb5\xa6\x99\x3b\x6d\x92\xcc\x45\xdb\x90\x65\x76\x4d\x27\xeb\x53\x37\x2b\x28\x13\xe4\x7c\xf7\x59\x04\xba\xf6\xb7\x02\xe6\x04\x19\x81\xb2\xb9\x7a\x56\x4b\xd6\x8a\xa7\x5d\x74\xa8\x64\x52\xd6\x43\xe6\x70\x2a\x47\x1b\xba\x3d\x72\x9d\x5f\xe9\x9b\x22\x24\x2d\x2d\x6e\xfe\xf3\x07\x72\x7f\x80\x20\x9b\x6e\xae\x66\x65\x0a\x1e\xf0\x20\xc5\xb5\x00\x3f\x7f\xf8\xe3\x9f\x09\xf5\xa8\x89\x4f\x25\x2e\xb8\x5a\xa6\xe0\x0e\x81\x18\x79\x78\x3e\x47\x91\x0f\x7c\x4c\x40\xbb\x31\x7d\xda\x83\x31\x2d\x7c\x12\xe1\xb4\xf8\x09\xa6\x00\x86\xe1\x10\x9c\xa6\x04\x54\x37\x42\x53\x98\x06\xb7\x28\x5c\x81\x60\xbe\x80\x5e\x4a\x90\x98\xa0\x97\x7d\x07\x22\xec\x23\x10\xa4\x59\xff\x30\x49\xb0\x17\x64\x1a\x26\x69\x7c\x08\x2e\x10\x02\x57\x28\xc4\x77\x04\x18\x6a\x8e\x63\x04\x7c\x94\xc2\x20\x4c\x00\x8e\x48\x23\x67\xd9\x68\x2f\x98\x9a\x0a\x23\x1f\x24\x08\xd9\x65\xd3\xc9\x00\xe1\x27\x6f\x8f\x2f\x3e\xbf\x7f\x77\xe6\x14\xbe\xb5\x20\x4a\x51\x1c\xc1\x30\x79\xc6\xa9\x31\x9c\xa5\xf3\xd0\xc9\x23\xfe\x52\x18\x4f\x51\xc6\xf3\x9f\xaf\x42\x18\xdd\x70\xbf\x67\x4c\x14\xa3\x08\xe3\x05\x8a\x50\x46\x98\x18\x5d\xa3\x38\xa6\x8e\x51\xb6\x58\x99\xc2\xeb\x63\x6f\x99\x31\x49\x39\x0f\xa7\x98\x6b\x10\xd1\x24\xc9\x1c\x36\xaa\xb5\x09\xbc\x38\xcd\x15\xb9\xd0\x65\x59\xd1\x98\xa3\xcd\xde\x44\x47\x57\x04\x42\x05\xc4\xbb\x9e\x35\xfb\x37\xf6\x69\xe0\xa3\x24\x98\x46\xc5\x12\xd2\xb5\x9a\xa1\x70\x01\x34\x0b\xa6\x59\xe8\xbc\x4a\x7d\xc1\x7e\x36\x1e\x8b\xd2\x6c\x7d\x2b\xd4\x63\xbf\x12\x59\xc1\xea\x0f\x98\x10\x8d\x7d\xbf\x92\xdb\x21\xae\xad\x5b\x81\xdc\x36\xb5\x55\x19\xc0\xd1\x94\xc8\xc6\x26\x23\x30\xb8\x87\x2d\xf5\x8c\x4c\x52\x24\xc3\x64\x86\xef\x9c\xea\x6c\x88\x37\x55\x71\xde\x2b\x1f\xab\x9d\x74\x23\x62\x9c\x9e\x74\x5d\x0b\x8a\xcc\xd1\x6a\x25\x7e\x40\x33\x78\x1b\x60\x6d\xfc\x89\xed\x10\x8a\x76\x54\x03\xd1\x0b\x09\x62\xf7\x86\x76\x5a\x85\x61\x1a\xac\x91\x6e\x73\xc8\x76\x23\x1f\x8d\x72\x12\x36\x71\x1e\x72\x93\x97\x97\x67\x5d\xa7\x46\x9a\xe8\x36\x31\x3a\x8a\xd6\x53\x92\xb3\xae\x8b\x66\x8f\x67\xc8\xbb\x69\x9b\x80\x6d\x98\xf1\x2b\x04\xc3\x74\x06\x58\xf3\xbd\x48\x89\xb1\x7c\xb5\x70\x41\x55\x04\xf0\xee\x34\xca\xa7\x6e\x83\x5b\x9c\xa0\xaa\x97\x7a\xf2\x9c\x15\x56\x35\xea\x3d\x63\xd3\xf9\x3a\x3c\x68\xc5\xe4\xf8\x11\xe9\x56\x34\x0c\x41\x8c\x16\xa4\x50\x9e\xa8\x9b\xf0\xa5\x35\x08\x87\x75\xf2\x0b\xe5\x8e\x74\xa1\x6c\x11\xaf\xb3\xbe\x85\xe0\x99\xee\x45\xd0\x11\xcd\x7d\xc8\x69\x6d\x4c\x01\xb7\x1d\x5e\xe1\x45\x6c\x38\xbc\x49\x79\x78\x4a\x2c\xef\x56\x9e\xc6\x16\x97\xc2\x4d\x46\x1e\x33\x73\x6f\x6b\x5b\xf1\x43\xc0\x00\x3a\x0f\x7f\xf8\xf0\xd3\xf5\x4f\xb3\x4d\x62\x00\xb5\xb1\x2d\x2b\xad\xb7\xf5\x86\xdb\x66\x56\x5a\x02\x0d\xf4\x80\xac\xb4\xe3\x89\x3b\xde\x31\x62\x04\x91\x07\x36\x68\xa9\xed\xdd\x52\x5a\xbe\x86\x76\x30\x60\x36\xb7\xfa\x1a\xf5\x2e\x8d\x01\x77\xb2\x16\x03\xee\x03\x31\xdf\x8e\xc7\x1b\xb2\xdf\x8e\x47\x8d\x0c\xb8\x25\x2c\xac\x87\x6d\xaa\x95\x7d\xb7\xed\x77\x44\xf6\xaf\xde\x72\x6a\x1d\x57\x94\xc2\x9b\x6c\xcd\x79\x94\x51\x8c\x17\xc5\xa7\x18\xdd\xa2\x38\x41\x39\x7f\xb4\x61\xee\x06\xf6\x62\xfd\xc1\x2e\xef\x86\x2d\x40\x7d\x6d\x10\x01\x8b\xcd\x52\xca\xcd\x11\xad\xc9\xf4\xf0\x1d\x90\xd1\xa8\x6b\x24\x71\x14\xb6\x18\xa1\x14\xdd\xa7\x66\xe8\x2c\x1e\x3b\x2d\x66\x7d\x18\xb1\xb2\x68\xc0\x01\x2b\xf8\x78\x45\x6b\xa9\x39\xd5\x28\xb2\x3e\xb4\xb3\x5e\xd1\x66\x7b\x3d\x8f\x9a\xa0\xb9\xdd\xdc\x0e\xe5\xc0\x5a\x4d\x36\x4f\xcf\xd8\x6e\x3d\x4f\x21\xc6\x38\x1d\xac\x15\x8d\xee\x6f\x0c\x79\x96\x83\x9c\x51\x39\x8b\xe3\x74\x70\x45\x6a\xef\x05\xc9\x4b\xb2\x25\xbf\xf7\x51\xe2\x51\x8e\xf9\x1e\x66\x7f\x09\xf8\xb0\x6c\x2d\xd6\x07\x79\xe6\xe8\x60\xc2\xaa\xb6\xea\xf5\x03\x84\x39\x66\x1c\xa5\x22\x5a\x9c\x02\x56\x70\x02\x92\x81\x71\x5d\x28\x93\xa1\xe5\xa4\x07\x63\xaa\x8b\x85\xba\x55\xd3\xb5\xac\x8c\xb1\x8f\x88\xe2\x66\x70\xa5\x8a\xbe\x56\x4e\xf1\x13\x32\x32\xe2\x60\x3a\x13\x1c\xb6\x15\x0f\xae\xd8\x40\x4d\xea\xc0\x33\x4b\x08\x9e\xfe\x96\xf7\x09\xa8\xa6\x0d\x50\xcd\xa6\x21\x6a\xaa\x37\x8e\xc6\xe0\x34\xd5\x3d\xd3\x07\x2c\xcd\x26\xf6\x97\xbe\xf9\x0f\xc4\x4e\xc0\x81\x6e\x6c\x36\x8e\x5e\x8d\x6d\x4c\xee\x96\x08\x1a\x6a\x75\xf9\x01\x61\xdc\x28\x5c\xcc\x2d\xd0\x6d\x34\xad\xf4\x85\x6b\x63\xe5\x07\xd7\xbe\xd6\x0a\xcb\xa6\x01\x8a\x4d\x3d\x91\xa5\xe1\x34\x45\xae\xb1\xce\x0a\xea\x1d\x8c\xa3\x66\x22\x0d\xb1\x69\xd4\xdb\xac\x03\x2a\x8d\xf3\xf5\xe2\xd1\x34\x64\xa9\xc6\x18\x34\xf6\x62\xa9\x15\xfa\x4c\x7f\xcc\x66\x27\xc0\xec\xa5\xff\xd7\x85\x2f\x63\x25\x51\x24\x5c\x19\xc1\x68\x45\x0a\xfe\x49\xf0\x32\x6b\x74\xe4\xac\xc3\xc1\xd3\x01\x52\x86\x84\xba\x3c\x1b\xcc\x88\x23\xdd\x63\x6e\xfa\xad\x3a\x7b\xf6\x76\x6e\x5e\x7e\xf7\x53\xfc\xa1\x45\x2a\xda\xb4\x02\x63\xd1\x32\xf0\x40\xb0\x5b\x09\x94\x19\x50\xd7\x8b\xe2\x9a\x5c\xed\xd1\x2e\x95\xd1\x94\x0a\x60\x60\x67\x12\x6d\x49\xc2\x19\x67\x30\xfb\x03\xd0\x41\x02\xba\x7e\xc3\xbc\xa2\x76\xbd\x85\xa3\x7d\x36\x8a\x82\x71\x3a\x71\xe0\x43\xca\x86\xdc\xb9\x7b\x31\xbb\xba\x7b\x1f\xf6\x94\x0d\xb9\x95\xbc\xb4\xcb\x19\xda\x54\x56\x55\x5a\x74\xf5\x28\x52\x23\x0b\x8d\xdb\x8a\x8e\x7c\xaf\x45\x18\x84\x38\xd3\xcd\x78\x0d\xd9\x80\x46\x06\x7b\x30\x85\x21\x9e\xda\x52\xb5\x73\xc6\x59\xe7\x3d\xdb\x43\x12\x19\x6b\x29\x4e\xb7\x9d\x47\x76\x9a\xcc\xdf\x5d\xed\xee\xfc\x6c\xb7\x55\x4d\x91\xb0\xda\x20\x33\x41\x2f\x78\x1d\x44\xc1\x7c\x39\x57\x3a\x14\x80\x65\xa8\x99\x53\x57\x99\x26\xc5\x73\x3c\x8d\xe1\x62\xb6\xca\xee\x9d\x01\x0b\x22\xfe\xe8\xcc\xe1\x7d\xd6\xf9\xcb\x98\xaa\xe5\x27\xc1\x34\x20\x34\xff\x38\x29\x1d\x35\xf3\xa4\x76\x80\xc6\x49\x22\x3f\x80\xd1\x26\xe7\x48\x3a\xdc\xf8\x34\x69\x3f\x9b\x9c\x27\xbc\xef\x6b\x92\xd5\x4f\xdc\x81\x9a\x77\x38\x20\xff\x11\x6a\x12\x16\x43\xf9\xa4\x18\x9e\x4a\x61\xe9\x9e\xb3\x5a\xc8\x89\x4e\x72\x26\x61\xb0\xf7\x5b\x16\x36\xf0\xe7\x23\xff\x68\xf7\x97\x8b\x66\x71\x48\x8d\x74\xd6\x76\xba\xaa\x12\xc8\x2c\xf0\x95\x6e\x68\x4b\x80\xb1\x2e\x8e\xdf\xed\xb8\x7d\x9f\x65\x7c\xa1\xf4\xfd\x36\x72\x1b\x3c\x2a\xff\xdc\x46\x4a\x0c\x69\x3d\x6e\xac\x1a\x85\xc9\xf0\xa0\x7d\xf7\x9c\x2c\x56\x8b\x17\x2f\xe1\xb4\x82\x2e\xb4\xfe\x3a\x40\x55\x47\x5f\x1f\x6e\x3a\xc7\xf7\x86\x5c\xb6\xe5\xf9\x26\xac\x54\x0c\xa7\xad\xb2\xd0\x4f\xb9\x4b\x35\x0c\xde\xf8\x20\x13\x3d\xab\x10\x55\x2a\x6d\x5c\x41\xef\x66\x1a\xe3\x65\xe4\x0f\x82\x39\x9c\xa2\xef\x01\x7f\x24\x49\x06\xb7\x30\x87\x9f\x2c\xde\x18\xf0\xb2\x1c\x6c\xbc\xcf\xd0\x3d\xcd\x80\x1a\xb0\xf2\x47\xb9\xaf\x42\xf0\xeb\x65\xec\x8b\xe3\x41\x72\x3b\x2d\x52\xa7\x98\x1f\x41\x11\x75\x55\x67\xbc\x1a\x2b\x88\x93\xef\x75\x5d\x80\x85\x50\x29\xc0\x44\x5b\x9d\x7c\xa5\xe5\xaf\x94\xa0\xa1\xdf\xc8\x63\x92\x53\x6b\x46\xae\xf3\x2d\xe5\x52\x63\xdc\xb0\x86\x7b\x9a\x43\x35\x2a\x5d\xd1\x62\x41\x11\xb6\xdd\xea\x58\x48\x28\x22\x42\xa5\xa9\xb1\x7c\x48\xb3\xf1\x98\x77\x4c\x1e\x01\x36\xd5\xdb\x59\xe8\xc8\xa8\x04\x50\xe8\x2b\xa6\xc1\xd9\x1b\xf1\x36\x65\xb5\xb4\xb0\x59\x4a\x16\xcb\x5c\x50\x34\xce\xd0\xb4\x31\x3b\xb6\x55\xed\xf2\x51\x75\xd3\xef\x68\x0e\xe5\xb6\xed\x3e\xcf\xbe\x9b\xdc\xce\xf7\x4e\xd5\xfa\x5d\x29\xb8\xbc\x1d\xce\x75\x4d\xae\x54\x23\xf5\xaf\x46\x4d\xe0\x5b\xbf\xa8\x59\x28\x90\x59\xee\x74\xbd\x1a\x44\x83\x88\x1d\xab\xd7\xf4\x69\x90\x86\x97\x8c\x79\x7f\x26\x75\x43\x9f\x54\x67\x78\xab\x2e\x59\xd2\xf0\xaa\x39\x99\xcd\xf0\x62\xb9\x52\xe3\x26\xd4\xa2\x66\x62\x1e\x48\x87\xcc\xd8\xfd\x58\xc9\x0d\x6e\x7e\x24\x76\x1d\x41\xe5\xd8\xde\x70\xff\xca\x54\xd2\xcd\x0f\xa3\x94\xf8\xb9\xf9\x01\xa8\xd2\x82\xfb\x1e\x85\xa3\x49\x56\xa5\x23\xe8\x98\xa4\x5a\x9d\x58\x25\x8d\x54\xea\xa7\x11\x76\x49\x39\xd3\xac\x47\x6a\x3c\xd2\xd4\x52\xcd\x4c\xd7\x97\xe1\xf8\xdc\x90\x6a\x5a\xcd\x7f\x2c\x72\x4c\xeb\x84\xf2\xf3\x35\xe4\x96\x6a\x88\xd3\xa6\x54\x94\xa3\x81\x33\xb2\x0b\xad\xb0\xaf\xa3\xb3\xd6\xb5\xdb\xa9\xcb\x4e\x6d\x50\x1f\xc9\x76\xb0\xad\x73\x55\x77\x5b\xe5\xaa\x66\xef\xed\x35\xc8\x55\xd5\xad\x93\xfd\x2d\x62\xec\x4e\x0c\xfd\x99\xf3\x49\xac\x2f\x3d\x22\xee\x49\x42\x00\x6b\x88\x88\x79\x83\x7d\x34\x04\x2f\x15\xf8\x35\x2e\xb8\x0d\xd0\x9d\x5d\x5a\x41\x77\x64\x9e\xae\xb0\x2e\x26\x78\x1e\xeb\xb4\x15\xf9\xc7\x1e\x6e\x74\x7c\xaa\xed\x6f\x74\x0f\x21\x6b\xf8\x24\xc1\x63\xf4\xdd\xb3\x95\xfa\x36\x47\x03\x17\x56\xd5\xa4\xe1\x65\x54\xfa\xc9\x2e\xcd\x37\xe3\xc8\xa4\x5d\x8a\x2f\x4d\xc5\xf5\x11\x4d\xed\x5d\xc7\x4d\xcc\x31\xe4\x05\xd2\x4d\x47\x86\x0f\xd4\xb6\x2e\xa3\x87\xab\xe2\xb4\x50\x90\x00\xa4\x38\x85\x8a\x98\x39\xad\xd3\xed\x6f\x90\x54\xc7\x2b\x88\xd0\xe0\x01\xb3\x7b\x84\x7e\x10\xf3\xcf\xf3\xfc\x83\xbc\xb8\x48\x1c\xc3\x95\x53\xf5\x4b\xbc\x62\xbc\x5c\x78\x4e\xf2\x9f\xde\xe7\x8c\x2e\xd6\x1f\xc9\xbd\x2b\xf4\x4f\x3a\xae\xa4\xe8\xfb\x93\xa1\x48\x09\x9b\x44\xb3\xe2\x24\x1d\x73\xee\xac\xe0\xf3\xe4\x65\x13\x77\x78\x73\x5d\xdf\x31\x47\x78\x17\x8d\x37\xc3\x28\xcb\x57\x03\x70\x49\x62\x40\xf3\x52\x86\x7f\x3b\xe5\xe3\xdd\x31\x44\x27\x3b\x5d\x9c\x5d\x12\xe7\xf4\xe9\xf5\xca\xd3\xd9\xa5\xec\x16\xd5\x93\x42\xdc\x19\xf2\x07\x31\xe2\x4e\x88\xdc\xdb\x0d\xa7\x6f\x68\x0d\x1a\x7a\xe8\x0b\x75\xc9\x68\xa6\x80\xe3\xe5\x76\x16\x12\x35\x5c\x0b\x03\x46\x14\xe0\x12\xfc\x57\xf9\xeb\xfc\xf3\x11\xeb\x46\xf8\x4a\x08\x0c\x6c\x4c\xb1\xc0\x53\xdf\x89\xd4\xd5\xe7\x2b\x03\xc8\x56\x2f\x64\xb1\xff\xc2\x2f\xad\x2e\xb7\x40\xe7\x6b\x1a\xb9\x8e\x0f\x53\x38\xc8\xe4\x68\x1a\x2c\x1c\xd7\x39\x63\xc7\x52\x01\x62\x97\x7f\xb1\x89\xe0\x5a\xad\x36\xdc\x00\xcd\xc7\xb6\xb6\xa5\xa5\x6a\x5b\xfc\x93\x94\xdc\x5c\x66\x90\x40\x33\xae\xe6\xc2\x14\xd0\x2d\x57\x2e\x7c\xd9\x45\x69\xd7\xdc\x04\xf4\xe2\x46\x95\xf6\xde\x0d\x16\x6c\x8d\xc2\xb7\x9d\xe8\x7d\xa5\x17\xbc\x9d\xc4\xe4\xab\xf5\x08\xc9\x4c\x4b\x54\x1b\xfc\x51\x18\xbe\x42\xc1\x74\x96\x8a\x56\xff\xc3\x89\x5b\x13\x27\x50\x27\x4b\xeb\x25\xa8\x85\xf0\x9c\xa8\x85\xe7\xa4\x24\x3c\x27\x55\xe1\x39\xd9\xa8\xf0\xac\x0c\xa0\x4f\xe1\xf9\x38\x04\xe7\x63\x28\x0b\xdc\x48\x60\xf6\x28\x2c\x5b\x8a\x3f\x58\xe0\xda\x08\x31\xc9\x26\x49\xe8\x96\x1f\xb6\xd1\x5a\x9b\x23\x43\xd7\xe6\xc9\xd0\x7d\xdc\xa7\xcb\x79\x5d\xae\x68\x43\x16\xcc\xff\xb2\x32\x5a\x64\xfd\x65\x3b\x71\xcb\x76\x8b\x5f\xd2\xdf\x9e\xbd\x85\xef\x9f\xab\xed\x16\xd9\x20\x1b\x44\x18\x0a\x99\x29\xaf\xb3\x37\x4d\x3a\xf5\x5d\x90\xe6\x60\x52\x98\xcc\x74\x80\xa2\x34\x0e\x48\xdc\xa5\xbe\xa9\x96\xee\xe9\xcd\x46\xb1\x69\xbd\xa6\x24\x01\xbb\xb1\xaf\x55\x59\x59\x74\xf3\x60\x13\x35\x70\xc7\xaa\x9a\xa8\xe6\xe8\x1b\xb6\xec\x24\xe4\x6b\x54\xc9\xec\x6c\x19\x0b\x54\x4f\xdf\xf6\x33\x52\x8c\x7b\xac\x1f\x77\x37\x54\x89\x36\xe7\xe4\xba\x32\xbe\x32\x31\x00\x32\x61\xb5\xc9\x6c\x2f\x2e\x20\xbb\x58\x86\x99\x46\xb8\x4d\x01\xfb\x32\xfc\xe1\xc3\xde\xb3\x60\xa2\x16\xb0\x0b\x18\x11\xa3\x7e\x1a\xc3\x28\x09\xa8\xcc\x92\x3f\xf0\x3c\xac\xa2\x7c\x71\x0b\x5c\x48\x49\x9e\x96\x14\xe3\x76\xd6\x63\x42\xd9\xf5\xa1\x40\x32\x39\x41\x71\x20\xe9\x5a\x96\x73\xf6\x9e\xbb\xfb\x26\x20\xc8\xec\xe7\x9e\x61\x20\x05\xd1\x60\x2c\xda\x03\xb4\x29\xe2\x0d\x51\xe1\xab\x38\x3d\x47\x61\x28\xdf\x1c\xeb\xee\xd1\x6b\xc6\x00\xb4\xb1\xf6\x8b\x52\xbf\xca\x86\x1a\x31\x6f\x34\x49\xb6\xb5\xd8\x2b\xce\xa0\x14\x5e\x0d\x22\x78\x5b\xd6\x14\x5c\x27\x41\x99\x12\x41\x0a\xeb\xf2\xe8\x64\x52\xe4\xc3\x29\xd9\xc0\x4b\xb0\xe0\x79\x9c\x7a\x52\x2d\xe0\x2b\xe5\xe7\xf8\x41\x92\xc2\x28\x7b\x2e\x5b\xa1\x77\x78\x19\xf9\xe0\x32\x0e\x16\xe0\x32\x20\x37\xdf\xc2\x31\x28\x79\x25\x99\x3e\x04\x4e\x32\xd5\xb1\x04\x33\xc8\x4d\x02\x74\xe0\x97\xf0\xca\x3e\x31\xd8\x92\x23\xcc\x40\x46\xd7\x08\xf9\x57\xd0\xbb\xa9\x04\x76\x30\x41\xf5\xd1\x09\xa2\x90\x95\x89\xee\x2f\x54\x83\x44\x95\x2c\x56\x03\xee\x23\xcf\x9d\x1a\x15\xc1\xe9\x85\xc1\x82\xa0\x27\x5d\x92\x2a\xf1\x0e\x95\x8e\xb9\x53\xc3\xe4\x20\x17\xaf\x49\x26\xac\x24\x79\x29\x18\xa7\x0b\x37\x7c\x32\x54\x70\x7a\x0e\x98\x61\x03\xa4\x18\xe4\xc3\x6a\x84\x54\x34\xd6\xf6\xd1\xd6\x0d\x22\xb8\xf4\xeb\x39\x21\x4f\x0f\xb6\x4f\x67\x58\xa8\x61\xcb\x78\xc0\x84\xd9\x84\x79\x8c\x17\x01\xf2\x33\xca\xb1\x99\xfe\xa3\x71\x08\x76\x03\x58\x60\xca\x31\x7d\xcc\x6d\x62\x31\xb7\x0b\x1c\xc7\x2b\x17\x24\x78\x8e\xd2\x59\x10\x4d\xc1\x1d\x8a\x52\x70\x17\xe3\x68\xda\x7c\x96\xa6\x30\x89\xb5\x7a\xbf\x44\x74\x60\x8d\xac\xa4\xe7\x1c\x4c\x84\x44\x41\x92\x37\xb6\x80\x71\x1a\xc0\x30\xdf\x8a\x49\xb8\x9c\x06\xd7\x0a\xe9\x9a\xcb\xc4\x5c\x2b\x90\xb0\x24\x3e\x71\x7f\x61\xb3\x3e\x72\x89\x5d\x6d\x3e\xcf\x05\xcc\x9b\xb6\x92\xe7\x2d\x06\x51\x3e\x01\xaa\x63\x89\x53\x9a\x70\xe6\x38\x92\x38\x6a\xd6\x8d\x7c\x98\xa8\x26\x5c\x44\x69\xb7\x69\xbf\x72\x38\x09\x6d\xe7\x26\x8f\x4f\x9f\xaa\x48\xc8\x1f\x9d\x1b\x7a\x39\x76\x02\xa5\x20\xa4\x17\xfc\x41\x52\xb9\xd9\xfb\xe2\x61\x5d\x76\x56\xd3\x20\x48\xda\xa2\x68\xe3\x3a\x28\x15\x46\x11\x8f\x4c\xe5\x39\x2a\x51\x5d\x68\xb5\xee\x64\x70\xf2\xd1\x44\x1a\xac\x4a\x8d\x73\x67\xbc\x97\x77\x94\x93\x3b\xfb\xda\xa4\xf3\xb6\xb9\x20\x5a\x1b\xca\x9a\x42\xc5\x14\x37\xb0\x96\x37\xb8\x64\x01\x3d\x94\xd0\xc2\xe7\xdb\x4e\xfc\x4f\xc3\xab\xbf\x46\x3f\x69\x72\x35\xda\x25\x67\x94\xf3\x5d\xc5\x13\x82\x9d\x2a\xd7\x01\x0a\x7d\xe2\x03\xb2\xa8\x85\x68\x55\x5d\x56\xaf\x44\x8b\xc7\xd6\x21\x03\xc2\x18\xa4\x44\x51\x2a\x6f\x17\xa6\x72\x70\xb5\x8a\x87\xd5\x3b\x60\x06\x93\x01\x3b\x3a\x8b\xa8\x0c\x53\x0d\x30\x95\xcd\xc8\xa2\x0a\x58\x35\xfd\x18\x2e\x53\x7c\x8d\x3d\x72\x2d\x2e\xfe\x66\xf3\x62\x09\xbf\xf2\xed\x83\x43\x37\x93\xd7\x99\xb7\x89\x77\x4d\xc1\xc9\x58\x2f\xb6\x3b\x9b\xb6\x24\x26\x15\x0b\x0d\x16\x69\xd0\x84\xa4\x86\x1c\x44\x75\x54\x54\x55\x75\x78\xbd\x4c\x52\x70\x85\x00\x04\x24\xaa\x14\x9c\xbc\xb9\x00\x33\x9c\xa4\xd9\x54\x86\xf4\xd7\xec\xbc\x86\x41\x04\xc6\x83\xe7\xbb\xc0\x9b\xc1\x18\x7a\xd9\xfe\x06\xdf\xd0\xa8\xaa\xc4\x05\x21\x4a\x53\xf2\x07\x8c\x7c\x30\x5b\x2d\x66\x28\x4a\xbe\xa5\x9f\xe6\xb4\xfd\x69\x10\xd1\x92\x88\x90\x3d\x3c\x04\x6f\x23\x0f\x01\xca\x6d\xbe\x4b\x23\x24\x3d\x18\x45\x98\x0c\x87\x12\xc5\x1f\x56\xe6\x64\xaa\xba\xa5\x66\x28\x3b\x6f\x97\xa3\xad\x1e\x59\xd2\x90\xa5\xd6\x09\x53\xe4\x95\x62\x9a\xd6\xa0\x6a\xe1\xa0\x91\x63\xe3\xaa\x17\x58\x29\x9a\x37\xe3\x11\xc0\x83\x85\x07\x78\x91\x8d\x92\x1e\xb7\x2a\xcc\x73\xcd\x3e\x3a\x41\x89\x17\x07\xe4\x5d\xf0\xcd\x5b\xd6\xc6\xb7\x3a\x2f\xfb\x3e\xe5\x4c\x18\x23\x19\xbc\x94\xed\x0c\xa1\xb1\x0e\x1b\x44\xb1\x2a\x52\xc3\x95\x75\xa8\xd2\xd8\xcc\x4c\x95\x30\xdb\xa3\xe3\xb3\x8b\xcf\x2f\xde\x1c\xfd\x70\xf6\xe2\xc4\x06\x82\x47\x27\x78\x73\x88\x83\x18\x87\x48\x01\x96\xa8\x75\xf7\xbf\xe3\xcf\x2b\x43\x0f\xf5\xae\xb1\x1f\x56\xd9\x15\x31\xbb\x0c\x90\x1e\xb3\x7b\x22\xd9\x69\xd9\x7a\xd0\x83\xd1\xa5\x69\x11\x41\x18\x02\xb8\x58\x84\x2b\x90\xce\xd0\x3c\x7b\x0e\x86\x21\x48\xf1\x0d\x8a\x12\xbe\x4b\xc9\x0e\x26\x00\x42\x62\x0b\x43\x63\x60\x24\xc7\x5d\xc6\x24\x0c\x21\x53\x85\xb0\x10\x31\xe8\x7b\x8e\xeb\xd0\x13\x5a\x74\xff\xd3\xa5\xf5\x3d\x86\x44\x45\x8e\xd9\x92\xe0\x3d\x3a\x3e\xcb\xf8\x3c\xa3\xcb\x09\x7d\x40\x97\x5e\xab\x5a\x78\xe3\xda\x2c\x70\x18\x78\x41\xa3\xe5\x39\x17\x5e\x69\xbd\x42\xbc\xdf\xad\x2d\x12\x19\xc0\xaa\x76\x99\x60\x18\xe2\x3b\x76\xd9\x39\xf5\x51\x94\x06\xe9\xaa\x7e\xf5\xc8\xb2\x28\xd7\x90\x10\x6f\xd5\x68\x15\x6b\x45\xa4\x22\xe6\xa6\x4f\xa5\x47\x95\x48\xe1\x07\x09\xbc\x0a\xb3\xcb\x43\x09\x4b\x1b\xc7\xe5\x13\x2a\x48\xce\xe3\x20\x49\x99\x0d\xab\xf4\x13\xcb\xef\x10\xa1\xc6\xf3\xa6\x05\x25\xa1\xc8\xcf\x48\x96\x57\x73\x02\xaa\xac\xc9\xcf\x70\xe4\xda\x09\x34\x3e\x5c\x54\xa9\x2e\xe0\x6d\x1f\xe5\x10\xec\x89\xa2\x99\x6f\xe7\x89\x32\xb0\xb5\x8e\x13\x2d\x9f\xcc\x9a\xa9\xb1\x41\xc5\x88\x44\x3d\xe9\x89\xcf\x74\x79\xdd\x98\xd4\x99\x32\xfa\x50\x8c\x08\xa7\x3a\xb6\x65\xd7\xc7\x52\xa5\x0e\x59\x53\x2d\x76\xa4\x55\x10\x46\x2f\xb9\x76\x22\xd4\xf1\x1b\x2e\x91\xd6\x9d\x69\x67\x58\xb9\x5e\xcb\x38\x16\x88\xc2\xc2\xfa\xca\xa5\x03\x3e\xd5\x41\x7b\x57\xb9\x70\x5d\xc5\x1b\x79\x91\x22\x32\x88\x81\xb8\xb4\xd5\x35\x55\xc0\x05\x30\x63\xc8\x8e\x5c\x42\x51\xac\x56\x58\x6f\x37\xb6\x2a\x50\x68\x21\xde\x75\xc0\x62\x3d\xe4\x14\x89\x26\x83\x8e\x56\x87\x87\x04\x11\x3a\x3d\x4c\x66\x23\x18\x8d\x7a\x82\x08\x2d\x95\xb2\xd1\x0a\x90\x5e\x21\x42\x7f\xc3\xcb\xb8\x50\x6b\x48\x64\xc1\x15\x42\x51\xa6\x43\xf5\x02\x12\xca\x74\xb1\x95\xd4\xcd\xa3\x40\x08\xed\x85\x8c\x09\xbc\xed\x85\x8c\x09\xbc\xdd\x30\x19\xb7\x02\x58\xab\x23\xe3\x1c\xc6\x37\xc8\x27\x21\x9e\x64\x5c\x06\x94\xd9\x06\x44\xa5\x4d\x75\x22\xab\x46\xb8\xae\x33\x41\x53\x29\x09\xbb\x49\x55\x52\x95\x64\xbb\xb2\xf4\xcf\xcb\xf1\xe9\xb3\x5f\xfe\xda\x55\x9b\x72\x6b\x62\x6b\x5a\x5c\x3e\xc4\x6b\x9a\x9c\xc3\x89\xee\x0a\xa5\x4a\x9b\xcb\xd9\x24\xa4\x4b\xd9\xcd\x0b\x3f\x48\x5b\xf5\xd3\xa4\x52\x2c\x5d\x5f\xc0\x96\x77\x3b\xd5\x62\x39\x8f\x55\x4a\xc6\xba\x13\x63\xc1\xd8\x22\xb1\x7c\x13\xe5\x62\x4b\x5a\x6e\xfb\xf8\x20\x3a\x5b\x4d\x84\x50\x6e\x7f\x50\x87\x09\x6d\x30\x44\xc8\x14\x1e\xd4\xe1\x3a\x2f\x6d\x9e\xc6\xf7\x5e\xb2\x27\x54\x21\x49\x4a\x80\x20\xf3\x55\xb3\x3f\x5a\xea\x83\x6b\xd6\xe2\xb2\xd7\xef\x20\xe6\x70\x6b\xe3\x69\xec\xc5\x71\x28\x1c\x16\xdd\x8e\x9b\x87\x00\x0c\xb0\xfa\x2e\xf5\x56\xb7\xdf\xf9\x9b\x2c\x27\xce\x9a\x92\x0f\x33\x62\x86\xc9\x26\x6c\x8b\x31\x20\x0a\x91\x16\xa1\xa2\xca\x13\x62\xab\xf5\xc4\xb5\x27\xc4\xd8\xad\xaf\x2b\xce\x9f\xd9\x8c\x68\x64\x52\x2e\x5f\x82\xde\x05\xb7\x21\x92\xaf\x4b\xb5\x54\x46\xe2\xe1\x5a\xab\xa5\xf6\x13\xaf\xf4\xb7\xad\x5c\xdc\xb1\x62\xf1\x13\x6e\x75\x33\xdc\x6a\x33\xee\xa4\xe1\xc5\x92\xcf\x75\x6d\x3e\x4f\xab\xc1\x10\x3f\x26\xf8\x77\xa0\x76\x98\xad\x03\x6b\x43\x93\xa6\xb4\x5b\xaa\x55\x49\xcd\xb2\xfe\x51\x6a\x1d\x31\xa0\xca\x04\x12\xf7\x6a\x84\x07\xb9\x74\x64\xbf\xe0\x90\x7a\xd8\x9d\x1d\xd5\xf6\xad\x34\x6c\x97\x95\x7f\xc2\xad\x02\x8e\x04\x85\xac\x50\x42\x87\xc3\xfa\xac\x7c\xd3\x6f\xcd\xb4\x63\x3d\x95\xfa\x42\x21\xe7\xa7\x04\xbf\x2f\x4a\x13\xaf\x86\x0b\xa8\xe9\xd2\x0f\x6c\x75\xc3\xb5\x2c\x86\x63\x0e\x5c\xa8\x5d\x90\xb5\xef\x60\x03\x08\xa3\x29\x52\x77\xb1\x40\xcc\x65\xc5\xb2\xd3\x35\xae\x5e\xb7\xf4\x40\xd9\x9f\x6f\xe3\xa3\x32\x55\xe1\x2d\xc5\xf3\x94\x0b\x5d\x53\x8f\xf7\xb3\x4c\x8f\xc0\x5c\x1a\x8c\x47\x72\x5d\xc8\x62\xbd\xb2\x5f\x0c\xfc\xa3\xd0\xf6\x46\x06\x10\xbb\xf6\xa2\x6f\x6d\x99\x17\x4f\x25\xa4\x9f\x4a\x48\x3b\x3d\x4a\xdd\x51\x5e\xef\xb9\x51\x91\xcf\xba\xc2\x08\x66\x57\x76\x8f\x24\x7e\x2a\x1b\xad\x6f\xa3\x16\xd7\xe6\xa9\x6c\x34\x68\x8f\x62\xfb\x54\x36\xda\xdc\xe0\x53\xd9\xe8\xa7\xb2\xd1\x0d\x4e\x14\x5b\xdd\xea\xef\x55\x4e\xba\xb0\x0b\x3e\xd6\x3a\xd2\x92\x85\xbe\x9d\x91\x9f\xa7\xe6\x3d\x1b\xb0\x5c\xda\xad\x57\xec\xfb\x30\x8d\xfc\x0f\xf7\xcb\x97\x6a\x53\x7f\x0a\xa7\x53\xe4\x1f\xe5\x80\x66\x5c\xe6\x71\x88\x33\x3b\x5c\x9d\x4b\xb1\x15\x94\x18\x21\x76\x2c\xcd\x63\xb5\x00\x3c\xba\x3e\xd7\x64\x51\xd3\xda\xa0\x2e\xe1\x54\x25\x3f\xb4\xcf\xe7\x39\xd1\x6b\x46\xce\x51\xa3\x19\x09\xf0\x30\x63\xe9\xe4\xb1\x0a\x54\x36\x9a\x28\x1c\x13\x86\xce\x58\x85\x45\x53\x83\x0f\x46\x22\x03\xab\x48\x74\x95\xdc\x72\x15\x5c\x18\x7d\x97\x17\xf0\x92\x5e\x3c\xe7\x35\x12\xed\x8c\x01\xa6\xf2\x67\x6c\x37\x36\x2a\x73\x66\x62\x16\x1b\xf2\x56\xa8\x22\x98\xe4\xbe\x97\x1f\x32\xd5\x2f\xab\xe3\xbf\xc6\x31\x95\x2d\xb0\xf0\x6b\xce\x18\xe9\x74\x81\xbe\x1f\xd0\x6c\x21\x90\x4b\xd6\xcd\x00\xff\x28\x44\x7a\xd7\xb3\x21\x3b\x0e\x12\xe4\x2f\x60\x3a\xdb\xf6\xf1\x00\x57\xc9\xee\xcb\x67\x3f\x1f\xea\x90\x80\x32\x09\xa2\xc3\x58\xd3\xac\xdd\x1f\x7f\xa4\xbf\xe1\x25\xf0\x60\x04\xe8\x44\x41\x10\xf9\xc1\x6d\xe0\x2f\x61\x08\x5e\x5d\x5e\x9e\x03\x32\x71\x10\x06\x37\x08\x3c\x9b\xa3\x34\x0e\xbc\x04\xa4\xb3\x18\x2f\xa7\x33\xf0\x22\xba\xc5\x2b\x12\xeb\xc6\xcb\x2b\xe6\x65\xdf\xe8\x1b\xe7\x31\x81\x24\x40\xcb\x64\xa8\x2c\x03\xdc\xb8\x26\x58\x69\x35\x24\x59\x11\xe3\xfb\x95\xe3\x3a\x2f\xc8\x23\xd9\x17\xe4\xa1\x75\xb9\x6d\xb4\x87\x46\xd6\x6d\xa3\x53\xe6\x3c\xc6\x29\xf6\xb0\x52\xdd\xd6\xbe\x74\x16\x24\x29\xa9\xdf\xb0\xd0\x54\x26\xd5\xbf\x89\x3d\x18\x92\x65\x6d\xfe\xee\x31\x9e\x5f\x05\x11\xf2\x41\xa1\x73\x28\xb3\x07\x65\x11\x2c\x58\x18\x38\x6a\x68\xa5\x2a\x2b\x6f\xd1\x25\x1e\xfe\x7c\x66\x34\x95\x94\x0c\x16\x86\x21\xf0\x78\xff\x41\x94\x62\x80\x23\x04\xde\xbf\x3b\x1b\x3a\x42\x8c\xd2\x66\x10\xee\x6c\x0f\x01\x1d\x06\x1c\x4d\xcb\xa7\x9c\xa2\x37\xfd\x77\x3f\x7e\x48\x2f\x39\x7b\xd9\x9c\x2e\x6d\x7b\xe1\xfc\x68\x7f\x8e\xb5\xee\x29\xe3\xdf\x8c\x74\xeb\xea\x4a\xb7\x68\xb5\x60\x39\xdf\xdb\x91\xa4\x2d\x03\x34\x80\x6b\x90\xce\xf7\x3e\x8e\x53\x51\xee\x76\x3d\x51\x83\x88\x03\x9d\x6c\xf7\x38\xbd\xf9\xeb\xf7\xb3\xf1\xf9\xc1\xef\x4d\x03\xab\x3c\x0e\xd4\x95\x23\x4a\xaf\x35\x36\xc4\xd1\x41\x16\xfc\x5d\x2a\xa6\x3f\x15\x49\xdf\x18\xbc\x6c\xab\x5a\xa5\x14\x87\xaf\xf1\x6b\xca\xcb\xb5\x75\x87\xa0\x75\xe1\x51\xae\x70\xa8\x1a\x58\xa7\xce\x60\x7f\x08\x49\x4f\x36\xad\xcb\xce\xa5\x6b\xb5\x36\xbb\x2b\x16\x22\x97\xd0\xec\x5d\x01\xd4\xbe\x48\x5b\x2e\xbf\xad\xae\x4a\xee\xea\xea\x93\x9b\x41\xcb\x54\x07\xed\x76\x0a\xc0\x57\xc7\xdf\x5f\x25\x78\xd1\xce\xd2\x91\xa8\xdb\x47\x33\x6e\x02\x3c\xaa\x2a\xa5\x50\x06\x8e\xad\x06\xe8\xc8\xbc\xd8\x04\x06\xb9\xdd\xc4\x40\x29\x72\xaa\x20\x7f\xad\x82\x27\x3f\x5e\x5f\x7d\xbe\xdd\x70\xd9\x1d\x59\x34\x0e\xc6\x88\xd8\xeb\xae\x44\xe0\xb9\xd3\x13\xc7\x75\x1c\x45\xf9\x89\xa6\xde\x71\x81\x5f\x05\x5c\xbc\x41\x10\x5d\xe3\x42\xe2\x2d\x60\x92\x04\xd1\xd4\x71\x1d\xee\xd5\x75\x1d\x2f\x0e\xd2\xc0\x13\x10\xdd\xb8\xfa\x40\x87\xc9\xe3\xc8\xf3\x57\x15\x78\x97\xda\x97\xf2\x5e\x9a\xbc\x94\x0f\xa8\xf2\x96\x4d\xa6\xf2\x9e\x36\x7a\xa7\xb7\x75\x94\x87\xfd\x98\xd7\xb1\x0a\x70\x6a\xb1\x8e\xb6\x2f\xc9\xeb\xb8\xdb\x70\x1d\x77\x2d\xd7\xd1\xfe\x6a\xb5\x29\xaf\x9e\x85\x4f\x4f\xb2\xb9\xe6\xe7\x7f\xe7\xcb\x63\xcf\x37\xc7\xfc\xb6\xd7\xf5\xda\x98\x9d\x2b\xfc\xea\xb5\xd5\x7b\xe3\x7e\x7a\xf6\x65\xfc\xcb\xef\xcf\x5a\x24\xd3\x97\x2e\x83\xec\xb0\x6b\x59\xca\x5b\xb3\xc9\x69\x86\x8c\xe2\x62\xa1\xee\xd5\x1a\xe1\xb9\x75\x21\x00\xce\x01\xbc\x18\x00\x2d\x0c\x40\x61\x59\xe9\x82\x5a\x3b\x07\xa4\x1f\xfb\xe0\xce\x82\xa9\xba\xb3\xe7\x03\x82\x7b\x78\x7d\xff\x7e\xfa\xe3\x8b\xdb\x9e\xe0\x1e\xfa\xc2\x29\x28\x82\xc0\x2c\x8e\xb3\x4b\x5a\x9b\x9d\xde\xd5\xf2\xf4\x7a\x1f\xc5\x68\x1a\x24\xc4\x32\x43\x4c\xc3\x11\x06\x21\x8e\xa6\x28\x06\xe8\x3e\x48\xd2\x8c\xdb\x40\x3a\x43\x80\x55\x2a\xb5\xcd\xbd\x6f\x14\x6a\xdb\x3b\x0f\x76\x4e\x8f\x2f\x1a\x8b\xf1\x32\xa5\x87\xec\x36\x19\xf0\xfd\x9d\x7f\xf8\xcb\xf2\x97\x0f\x76\x0c\xc8\xa1\x69\x82\xc4\xc3\xb7\x28\x5e\x0d\xbc\x19\x0c\x44\x37\x10\xf9\x98\xcb\x30\xf6\xab\x73\x4c\xbf\xd6\xc9\xaf\x3e\x96\x86\x51\xb3\xeb\xa2\xb0\xbf\x1e\xc4\xe9\x15\xdf\xc7\xbf\x1f\x1d\x1c\xdf\xf4\x72\x7a\x31\xbd\x75\xfd\x07\x98\xcb\x3d\x7f\x95\xa3\x4c\x1e\x42\x01\xc0\xc4\xbc\x81\xec\xe7\x8a\x73\x70\x6b\xa7\x5f\x2e\xd2\x1e\xc6\x01\x28\xb1\x66\x57\x3e\x4f\xe1\x74\xdb\xec\xfd\x2c\xfa\xfd\xa7\x9f\x49\x4b\x3d\xb0\xf7\x25\x99\x8f\x3d\x57\xe7\x25\x41\xa6\x56\x5a\x18\x69\x7e\xcd\x1c\x28\x5c\x11\xb2\xd5\xd9\x74\x18\x06\xe9\xb3\x23\x57\x2d\x17\x49\x1a\x23\x38\xdf\x36\x6b\xbd\x39\xfa\xc1\xbf\x48\xef\xf7\xd5\xfe\x22\xdb\x12\x77\x4a\x46\xe3\xe2\xe9\x7d\x31\x55\x7b\xae\xb3\x77\x2d\x18\x7b\xdc\x78\xa0\x04\xef\xba\x51\x04\xc2\x09\x4c\xa1\x87\xa2\xb4\x5c\x5f\xb4\xe6\xb5\x4b\x56\x40\xa6\x61\x94\xc4\x0f\x41\xe4\x83\x4d\x45\x01\xb6\x89\x2e\x80\x56\x45\x93\xa8\xb7\xf9\x04\x25\x69\x10\x11\x35\x53\x87\x53\x62\x4c\x2a\x7c\x73\x71\x7e\x74\xfc\xc2\x36\xaf\x50\x9f\xc8\x53\x1a\xcb\x25\xbf\x66\x2c\x62\xb4\x80\x31\xf2\x3f\xff\xb5\x44\xf1\xaa\x59\x6a\x4f\x35\xee\xaf\x9c\xf0\x57\xb8\x06\x68\xe8\x30\xf7\x0f\xe4\x76\x79\x05\x89\x18\xe2\x91\x01\x3a\x53\xaa\xea\xd7\xa6\xa5\x46\xc0\xe1\x56\xe5\xb1\x75\x6c\xde\x3d\xf2\x42\xdc\x7b\xfd\x86\x5d\x18\x58\x95\xb3\xc7\x9a\x03\x4a\xb2\x9d\x6e\x17\xd5\xc1\x9f\xee\x12\xb1\xb9\xa5\xc0\xcc\xfc\x24\xdd\xb4\x1a\x50\x74\xdc\x4d\x17\x78\x08\x78\x3c\xfb\x5f\x0e\x52\xfc\xe2\xfc\xae\x69\xd8\x48\x8b\xaa\x8b\xd5\xc2\x42\x8d\x6b\x2d\xf2\xeb\x06\xd1\x47\x37\x54\x6e\x31\x5f\xae\xb2\x4d\x6c\xd7\xdd\x33\x41\xe4\x34\xaa\x1f\xd6\x63\x6d\x41\x00\x38\x9d\x15\xe7\x88\x20\xe0\xaf\x71\x3c\x87\xe9\x80\x16\xbf\xd0\x47\xf5\x28\xd6\x0a\xa4\x38\x85\x9a\x7c\x2a\xfd\xb7\x1d\x0a\x15\x76\x51\x4f\x58\xdb\x9b\x40\xbd\x91\x6c\x00\x8b\x59\x0c\x13\x34\x40\x7e\x20\x41\xd0\xcb\x05\x51\x78\x24\x91\x90\x8f\x2e\x46\xec\x14\x1c\xff\x7d\x36\x9f\xec\xce\x43\xff\xa0\xbb\xef\x7b\xee\x4e\x62\xa5\xd7\x07\x29\x22\x48\x65\xb4\x06\x15\xf1\xe5\x92\x24\x08\x62\xfe\x44\x71\x69\x4e\xe2\xf7\x36\x25\xfd\x0e\x5c\x67\xbe\x2c\x88\x54\x7a\x91\x94\xac\xba\xe5\x95\x99\x9d\x14\xc6\x53\x94\x0e\xd9\x17\x42\x11\x29\x29\x1c\xa9\x7d\x71\xbe\xbe\x50\x8f\x1e\x7e\x2c\x55\x8c\x29\x72\xf5\x0d\x92\x8a\x13\x48\x51\x32\x34\x3c\x81\x95\x72\xd9\x10\xc0\x8f\xee\xc6\x91\x69\xaa\x79\xd8\xcb\xc4\x75\x62\x34\x87\x41\x14\x44\xd3\x5f\x03\x9f\x31\x9e\x1c\xba\xa4\xf7\x41\xdb\x77\x42\x04\x52\xa5\x83\x72\xb1\xbc\xae\xc1\xdd\x97\x33\x04\xa8\xb8\x04\xf8\x5a\x36\x79\x91\xb4\x81\x74\x86\x72\x83\x18\x8e\x48\x88\x77\x54\x2e\x4e\xdb\x75\xa6\x7a\x72\x52\xfb\xcb\x66\xe3\xbf\xca\xe3\xf6\x5b\x8c\xbb\x2e\x2f\xbf\x69\xc8\x58\x29\x56\x47\x83\xe7\x50\x9f\x21\xfe\x00\x82\xb9\xd6\x10\xc3\x25\x4e\xd2\x08\xb2\xb4\xc6\xac\x66\x1b\x7e\x51\xef\x68\xe3\xa0\xba\x85\x88\xe4\x61\x20\xb4\xd3\xfc\x19\xfe\x91\x3f\xc8\xc6\x54\x44\xbf\x51\xf1\x72\xce\xda\x16\xc2\xdf\xe8\x0f\xbf\x72\x37\x61\xf9\x87\xe3\x3c\x38\xa5\x28\xb3\x20\x0c\x20\xff\x56\x1a\x47\xfe\x6d\x69\x38\xca\x5a\x33\xeb\x59\x99\x96\x3b\xd9\xc6\x9a\x4c\xc9\xa3\x35\x24\xd7\xcf\xe8\xe1\x45\xbe\x48\x54\xad\x47\xcf\xa8\x89\x82\xe9\x36\xe7\x4e\xc5\x2a\x2a\x6e\x9a\xa6\x39\xee\xf2\xb5\xb7\xf3\xd5\x39\x8f\x0b\xde\xe6\xed\xf9\xaf\xd7\xcf\x7d\xff\xc5\xee\x95\x2e\x87\x31\x22\xd5\x2f\xb9\x7c\xbf\x60\xe2\xdd\xb9\x9a\xb6\xbb\x41\x4b\x36\x6f\x12\x6b\xdb\xfa\x26\x9d\x3b\xf2\xc8\x71\xf9\x35\x5d\xa5\xed\x40\xc9\x85\x5d\x69\x04\x26\x07\x5a\xa0\x92\xe6\xaa\x89\x1a\x9d\x5c\xb0\x8a\x18\x34\xc4\xbe\xc6\x40\xd5\xa3\xca\x40\x78\x1a\xc1\x37\x4e\x35\x3d\x4c\x88\xb3\x17\xd8\xec\xdb\x96\xe3\x55\x54\xa6\x1c\xb9\xce\x29\xdf\xcf\xda\x46\xfb\x53\x6d\xed\xbd\x3c\x46\x4b\x8b\x82\x52\x34\xfc\x5d\xb9\x17\xc5\x60\x59\x93\xde\x27\x16\xd7\xaa\xf3\x48\x88\x6d\xd6\x68\x9b\x4c\x9d\xb4\xd5\x23\x1b\xf8\x3f\x68\x0d\x25\x9b\x36\xaa\x3b\xaf\xad\x8a\x2d\xd5\xc9\xe7\x9c\x9c\xb1\xbf\x0f\x53\x38\xe0\x17\x37\x56\xb9\xf7\x5d\x11\x62\x75\x1b\x40\xe0\xc8\x55\x9e\x72\x40\xd7\xd2\x53\xa2\x7a\xdc\xb0\x20\xaa\x35\xa0\x81\x5c\x69\x41\x19\x6f\xc6\x18\xeb\xe7\x20\xa2\x85\xe5\x3c\x1c\x45\xc8\x4b\x07\x34\x20\xa4\x1b\xbd\x85\xf4\xb8\x9b\x20\xf2\xf3\x36\x85\x4c\x6e\xfa\xb9\x21\x72\xaa\xed\x5c\xe6\x28\x99\x0d\xa6\x30\x45\x77\x70\xdd\x53\x79\x8d\x92\x19\xf8\x31\xef\xaa\x2d\x5e\xa5\xfb\x51\x53\xea\x56\x1a\x9a\x6f\x51\xe8\xc2\xaf\x14\xb1\xe6\x12\x58\x8f\x8f\xcc\x5f\xf5\xed\x8e\x00\x35\x22\x79\xe5\x9a\xac\x14\xf4\xe5\x7a\xd5\xf5\x27\x82\x4a\x68\xf7\x4e\x23\x92\x2a\xb7\x66\x02\xc9\x09\x3f\xa5\x28\xe3\x6a\xd6\x8f\x86\x42\x86\xe4\x9f\xba\xb4\xe8\x72\x11\x90\x52\xec\x97\x65\x35\x68\x13\x9d\x6b\xfb\xe0\xe1\x14\x82\xe3\xb2\xc8\xe9\xb0\xc1\x95\xd6\x73\x79\xe0\x23\x0f\xc6\x40\x21\x5b\xd6\xc3\xe6\x62\x02\xa1\x9e\x9a\xa5\x1f\x8b\xfc\x41\xc5\x2b\xa2\xde\x5d\x59\x7e\xd5\xb3\x9a\xd5\xb7\x0f\x8b\xaa\xa1\xe9\xc6\x68\x29\x6e\x0a\x13\x57\xd6\x92\x45\x85\x3d\xdc\xac\x96\xa9\xb5\x26\xd8\xfb\xa9\xaa\x84\x21\xeb\xb8\x61\x3a\x09\xc5\xac\xcf\x21\xbf\x45\x80\xb2\x22\xbd\xc9\xbd\x55\x4b\x0c\x79\xb7\xa9\x45\x65\x73\xba\x6a\x85\x70\xcd\xdb\x9b\x3d\xbb\x68\x08\x16\x5f\x26\x63\xba\xb8\x7a\x95\x34\x93\x23\xed\xb2\x66\x6b\x42\x3e\x6a\xde\x2e\x87\x80\xb4\xc0\xef\xd8\x00\x87\x6f\x49\x37\xaa\x65\xea\xd6\xbc\x68\x16\x86\xb6\xa4\xdf\xac\xe7\xb4\x74\x2c\xe5\xb6\xdd\xab\xff\x9f\xbd\x37\xed\x6e\x1b\x47\x17\x06\xbf\xeb\x57\xd0\x3c\xf3\xaa\x88\x0a\x44\x4b\x49\x57\x2f\x4a\xb1\x7c\x9c\xd8\xdd\xe5\xdb\xd9\x26\x76\xfa\xed\x7b\x75\x35\x3e\xb0\x08\xd9\xec\x50\xa0\x0a\x80\xec\xb8\x24\xfe\xf7\x39\x58\x09\x92\xd0\xe2\x25\x4b\x57\x57\x3e\xc4\x14\x89\x7d\x79\xf6\xa5\x47\xd0\x75\xdb\xda\x5d\x65\x62\x37\xe6\xee\x9e\x30\xfb\x94\x22\xd7\x73\x34\xb0\x26\xf8\x6e\x70\x84\x66\x3e\xf2\xbb\x02\xf4\xba\x41\x6a\x58\xd3\x78\x6f\x8a\x06\xb8\x7b\x07\x5b\xec\x61\x1b\xb1\xbc\xd6\x1b\x18\x8c\x4d\xd9\x34\x30\x45\xd7\x0d\xf7\x8e\xfc\x95\xf5\x05\xc7\xb5\x46\x8d\x6d\xf8\x6b\xcc\x51\x70\x84\x38\x6a\xa8\x95\xac\xfa\x5e\xed\xe3\x19\xba\xf0\x0a\xe8\x77\xcb\xa9\xa0\x37\x5b\x5d\x40\xc4\xae\x9c\xf3\x92\x4a\x35\x0c\xe5\x99\xe3\xb3\xcb\xf2\xc5\x65\x36\xf5\x1d\x0f\x3b\x7a\x57\xb4\x58\xf7\x4e\x19\x1b\xd3\x85\xbb\x75\x54\x8f\xc9\xe1\xe9\xc5\x71\xdf\xb4\x5d\x3c\xe0\x64\xde\x63\x88\x8e\xa9\xb3\x6f\x80\x0b\xd7\x12\xfa\x5b\x3f\xed\xf7\x98\x7e\xfd\x7e\x78\x97\xa0\x16\x5d\x6f\xe3\x2a\xdc\xf5\x12\xdd\x63\xbc\x4e\xb8\x58\xdf\x58\x51\x2d\x9a\x6c\xf8\x90\x9e\xb4\x1d\x80\xa7\x13\xae\x15\x6b\xf7\x69\xb5\x05\x19\xea\x4d\xcf\x30\x47\xa9\xfc\xea\x89\x9b\x32\x92\xc6\x2b\x52\xeb\x90\xae\xb7\x80\xe9\xb1\x96\xad\x7f\xea\xe2\x0e\xc7\x4a\xaa\x8a\x2c\xa4\x5b\x74\x77\xf1\xcf\x35\x02\xbd\x0e\xb2\xbc\x70\xac\xb6\xdc\x4e\xab\xdb\x4c\xa2\x42\x3b\x1a\x8d\xf9\x77\x8e\x65\xf0\x83\xed\xc8\xae\xb8\x78\x7d\x9f\x0c\x93\x83\xaf\x11\xae\xba\xa5\x86\x7b\xa0\x36\xcf\x9e\x9e\xaf\xab\xcd\x3b\x7d\xff\x6e\xfe\x6b\x9a\xf9\x5d\xe1\x43\x31\xc8\xa6\x1d\xec\x6e\x41\xaa\xc5\xdd\xd9\x18\x99\xda\x13\x2e\x79\x4d\xec\xe9\x5a\x53\x0f\x77\xa1\xf9\x9a\xd1\xb9\xfe\x8e\xd7\x08\x2d\x36\xd6\xfa\x87\x31\x31\xfc\xa6\xc3\x5c\xb5\xac\xcc\xb6\x07\x54\x6a\x05\xae\x7e\xea\x0b\x5c\xfd\xd5\xc2\x25\x79\x63\x48\x7a\xa3\x7b\x7b\xc7\xbd\xcb\xf8\x1e\xd7\x78\xe3\x73\x7a\xbd\x0a\x50\x10\x08\x80\xf5\x85\x3d\x0f\x0c\x9c\x7c\x20\xb8\xd5\xec\xed\xd7\x04\xb5\xff\x7c\x33\xed\x67\x7f\xfe\xf5\xd3\xd7\x30\x9c\xd8\x3d\x2c\xd9\x0e\x76\x14\xc6\xde\xf3\x33\x9b\x51\x7c\x9b\x46\x14\xbb\x18\x50\x7c\x4d\xe3\x89\x2f\x68\x33\xb0\xdd\x62\x60\x83\x65\xc5\x3a\x1b\x8b\x07\x98\x0f\xac\x0d\x64\xf8\x5b\x32\x24\xf8\xdd\x8c\xe0\x6e\x66\x04\xd5\x79\x7b\x98\x41\xc1\xb7\x64\x4e\xe0\x99\xd3\x7d\x0c\x0b\xbe\x09\xb3\x82\x36\xbd\x16\x3e\xcc\x71\x2a\x78\x6c\x01\xed\x89\x13\xed\xba\x2e\x43\x71\xee\x72\x15\xd6\xc6\xe2\x55\x0d\x20\xde\x9b\x78\x3e\x4d\xd1\xe3\xbd\xc4\x8d\x0f\x01\xe8\x9b\x13\x88\x3a\x3c\xdc\x82\xe6\x6a\x85\xea\xd0\x74\xf3\x49\x12\x1c\x98\xa6\x77\xd2\x1e\x22\x93\x2b\xd7\x05\x4c\xa1\xba\xf0\x1a\x51\xd1\x30\xc5\x5a\xde\xe2\xed\xcc\x27\xaa\x71\x1c\x97\x6b\x4e\x34\xaa\x89\x74\xb2\xa6\x9a\xb1\x9b\xd8\x4e\x0b\xa9\xb5\xb6\xd4\xd7\x1a\xac\xf7\x76\x8e\x49\x70\x84\xd8\x95\x4c\x9f\xba\x69\x2f\xbe\x96\x73\xd7\xe7\x11\x42\x57\x57\xc0\x2b\x09\xab\xe2\xc1\x7b\x04\xc3\xbb\x5c\x92\x7b\x0c\xc9\x5c\x2b\xef\x80\x4c\x0c\xad\x2f\x20\x58\xfc\x5d\xf2\xe7\x15\x20\xfc\xb6\x64\x7e\x82\xd3\xb9\x07\x03\x8a\x29\x95\x21\x25\xbe\x26\xd7\x49\x7e\xe9\xa3\xa3\x4f\x9f\x76\x8f\x24\x28\x2e\x48\x36\x29\xe8\xbc\xa7\xa6\xd4\xbc\x2c\x98\xce\x32\xc6\x14\xff\x15\xa6\x13\xf5\x7f\x08\x75\x50\x0e\x66\x9f\xe4\x15\xb8\xa1\x68\x3e\x97\xae\xd6\xca\x26\xc6\xa9\x6c\xcf\xa7\x68\xc3\xf9\x51\x3d\x9b\x16\x1b\x2f\xd6\x7a\xa2\x6e\xe2\x59\xe5\x56\xdc\x9b\x63\xbd\xab\xe4\xcf\xcb\x12\xb5\x4d\xd0\xf4\xf9\xa8\x22\x2c\xde\x3d\x3e\xb0\xb7\x99\x9a\xe3\x7a\xe4\x2b\x3a\xc3\x8c\xa1\xcb\x96\x7d\xfb\x3d\x4c\xb4\x36\x0d\xc8\xdf\xcb\x0e\xe6\x4e\x77\x13\x95\x3d\x96\x5a\x3f\xb8\x8b\xd7\x92\xcc\x38\xcc\x16\x79\x40\x31\x5f\x50\x99\x51\x89\x04\x72\xe2\x4d\xd7\x25\xf1\xef\xbf\x8b\x45\x30\x43\xb7\xc1\x15\xba\xc6\xc1\x75\xc6\x32\x2e\x2a\x04\x1f\xde\xbf\x0a\xf8\x15\xe2\x41\xc6\x82\xbc\x40\x69\x46\x2e\x45\x33\x0b\xf2\x91\x14\x37\x24\xa0\x58\xb1\xb9\x30\x60\x85\xcc\x24\x3c\x41\x24\xe0\xf4\x36\xb8\x2c\x44\x49\xc1\xdc\x05\xbc\x90\x3e\xb8\xb4\x28\x78\x50\x50\xf9\x95\xe2\x1e\x5b\x5c\xcc\x32\x2e\x70\xa0\xa8\x47\x83\xc3\x97\xaf\x82\xb3\xe2\x23\x26\xfb\xa7\x78\x42\x31\x3f\x39\x0a\x2e\x9a\xcd\x1c\xbe\x7c\xc5\x62\x3d\xff\x8b\x7a\xfa\xe5\xf5\xfe\x73\x67\xf4\x36\xc8\x8b\xe2\xa3\x68\x28\x23\x81\xe8\x2b\xdc\xc5\x0a\xa5\x1e\x98\xe8\xe8\xed\xcb\xd3\xf3\x0f\xef\x5f\x85\xae\x45\x89\x4a\x0c\x4c\x2f\x31\x0f\x61\x78\x7e\x91\x23\xf2\xd1\xe1\x43\xd2\x62\xb2\x10\x9b\xa8\xa5\x48\xf7\x16\x07\x37\xb2\xac\x4b\x19\xdc\x55\x31\xb3\xa9\x86\xfd\x42\x1a\xa3\x0a\x69\x88\x67\xfe\x56\xd8\xd5\x14\x1b\x72\x7f\xfe\x68\x77\x9c\x76\x37\xc9\xaa\x3a\xa0\x77\xc7\x64\x02\x00\x7e\x65\x44\x76\x53\xfc\xf9\xc5\x2f\xff\xc8\x7e\xdd\x0d\x91\xfd\x09\x86\x5a\x10\xea\x31\x27\x9b\x15\xa9\xdc\x67\x55\x62\xbd\x8c\xe2\x9e\x8b\x2c\x16\xeb\x1e\x6b\xac\x01\xc0\xd7\x8e\x3c\xfc\xf1\x97\xfe\x5f\x8e\x6e\x76\x0b\xbf\x78\xff\x35\xd2\x93\xbd\xc7\x32\x91\x82\x4f\x8b\x05\xf9\xda\xc7\x71\xff\xe5\x7f\xf5\x3f\x5d\x4e\xd2\xcf\xbc\x4e\x66\xb6\xf7\x59\x28\x45\x2d\x7d\xdd\x65\x7a\xf9\xea\xc5\xed\xc9\xeb\x1f\xfc\xb1\x96\xbc\x7a\x8c\xa7\x30\x2c\x16\x3c\xc7\x02\x7a\xaa\x7b\xf9\x80\xd5\x93\x4b\x70\x8f\xb5\x63\x58\x22\xcf\xaf\x1d\xb0\xf2\xe5\x5f\x17\x3f\xe0\x77\x17\x3b\x86\xfa\x5d\x13\x80\x4a\xcf\x64\xa3\xba\xe7\xb7\x49\xf4\x9b\x5d\xfc\x9c\x74\xff\x76\x25\x48\x10\x98\x3d\xb8\x73\x74\xb9\xc7\xa1\x6c\x8d\xa1\x70\x76\xed\x15\xf3\x92\x82\x67\x13\x1c\xc8\xb8\x11\x9b\xd4\x59\x57\xcf\xd6\xd8\x77\xf3\x82\xa2\xcb\xcd\x46\xca\x5b\x33\xdb\x33\x1c\xd8\xdd\x42\x14\x07\xd9\x6c\x86\xd3\x0c\x71\x9c\xdf\x06\x0c\x5d\xe3\x54\xd0\x54\xb9\xec\x8f\xa9\xfe\x54\x5e\x51\x4c\x59\xc6\x04\x31\x6d\x32\xda\x5e\xd0\xe2\x86\x61\x1a\x2c\x04\xe7\xb1\x3e\x37\xfe\xe6\x77\xcd\xb4\x7a\x6b\xd7\x64\x9a\xe1\x3c\x95\x51\x94\xb6\x44\x46\x14\xeb\xf7\xb4\x1d\x0a\x55\x4b\x12\x83\x57\x19\x59\x9f\x0a\x6d\x47\x9e\xe4\x30\x15\x2c\x45\x9e\x11\xcb\x14\x18\x45\x6d\x8a\x39\xca\xf2\x40\x00\x06\x13\x5d\xff\xc3\x89\x28\x74\x89\x79\xf0\xcb\x22\x9b\x7c\x0c\xd0\x64\x82\x19\x13\xef\x90\xa9\xd6\xbb\xc9\x52\x1c\x98\x8c\xc1\xa9\x19\x6b\x1c\x1c\x13\x8e\x55\xe4\x1f\xfb\x52\x72\x32\x32\xa5\xab\x78\x2d\x57\x25\xb8\xc0\x79\x71\x13\x07\x26\x3b\xf1\x82\x61\xf9\xd1\x89\x06\x66\xa3\xb5\x4d\xa4\x3f\x44\x8d\x52\x0b\x97\xcb\x4a\xe8\x5b\x96\x61\x93\x46\x93\xdb\xbf\xb1\xba\x96\xee\xc6\x02\x3d\xf8\x1a\xb8\xb9\xca\x26\x57\xc1\x4d\x96\xe7\xc1\x05\x0e\x28\x96\x03\x4b\x83\x9b\x8c\x5f\xc9\x81\xca\xa8\x63\xc5\x54\x4f\xd4\x0c\xc5\x08\x85\x82\xc9\x82\x52\x4c\x78\x7e\x1b\x5c\x60\xc1\xfd\x08\x20\x84\xd3\xb8\xb5\x73\x1b\x76\xb4\xa1\xe2\x58\x17\xef\xb4\x29\xe5\x9b\x14\x64\x9a\xd1\x99\x8e\xb0\x52\xfb\x69\x24\x95\x01\xbf\x9d\xe3\x1e\xc7\x9f\x9c\x80\xa7\x55\xca\xc9\x05\xcd\xd9\x39\xab\xa4\xe8\x1b\x43\x00\xf8\xec\x7a\x5e\xc9\x43\xa6\x51\x95\x8c\x03\xc5\x1a\x4a\xe9\xb5\xcd\xb5\xb3\x60\x4a\x58\xa6\x06\x35\xd2\xcd\x8c\x0d\xf7\xa5\x83\xc5\xd5\xe4\xf7\x1e\xed\x84\x2c\x5b\x05\x94\xdb\x55\x86\x69\xea\x7d\xc4\xb7\x73\xe9\x44\xb2\xbe\xa6\x92\xe9\xb6\xaa\xa5\xc5\x0d\xd9\xbd\x56\x95\xd7\x53\xef\xcc\x06\xe6\x3a\xf4\xc6\x31\xec\xc3\x10\xc7\x97\x71\x70\xc5\xf9\x9c\x0d\xf7\xf7\x2f\x29\x9a\x22\x82\x62\xfc\x09\xcd\xe6\x39\x8e\x27\xc5\x6c\x3f\xdd\x1f\xec\x6b\x9a\xc6\xdc\xe4\x19\x66\x57\xdd\x82\x5e\x66\x69\x32\xe8\x56\x67\x39\x09\x37\x5f\xb5\x3e\x0c\xbb\xa6\x09\xb1\x4b\x55\xf9\x2d\x77\x6b\x87\x4b\xd0\x44\x81\xb0\xa5\x26\xf7\xc7\x30\xfe\x70\x72\x7e\x74\x72\x7a\xf8\xe2\xd5\xf1\xf9\xfb\xe3\xc3\x57\x67\x27\xaf\x8f\x5b\xf1\xa0\xb6\x09\xd1\x1e\x05\x78\xbf\x10\x68\x59\x5c\xfc\xff\x77\x81\xa5\xd9\xe2\x1d\xa1\xf7\xdf\x31\x9e\x9b\x24\x27\x12\xf9\x06\x8b\x79\x8f\x17\xbd\x54\x5c\x29\x01\x84\x8a\x05\x0f\x28\x9e\x52\xcc\xae\x44\x37\x12\x76\x0a\x9c\x16\x1c\x92\xdb\x40\x9d\x64\x16\xcc\x50\x8a\x05\xd4\x36\xf7\x0f\xaa\xf0\x6b\x12\x3a\x66\x92\x34\x10\x74\x57\x70\x53\x2c\x24\x44\x16\x0d\x2a\x6d\x80\x40\x04\x14\xa3\x3c\xe0\xd9\x0c\xc7\x5b\x06\xbf\x8e\x74\x50\x50\xa6\xa6\x88\x5d\x1f\x16\xa3\x06\xec\xb6\x98\xde\xad\x85\x12\x93\x3c\xc3\x84\x8f\x2e\xf4\xe2\x5b\x40\x21\x1d\x13\x70\x5a\x57\xd1\x3a\x40\x43\xd5\x0b\x35\x35\x65\x41\xa7\xae\xd5\xbc\xd9\xf7\x00\x24\xbb\xe5\xec\xdd\x05\xbe\x0e\xee\x36\x87\xb7\x24\x84\xe1\xdb\xe9\x74\x43\x3c\xea\x66\xaf\xf7\xbf\xa5\x3b\xc4\xaf\xfe\xf6\x84\x5e\x86\xb0\xdc\x99\x0f\x5c\xf0\x2c\x67\xfb\x68\x92\xb3\x9e\x31\xbc\xfb\x0c\x6c\xa0\xdb\x8c\xe2\x05\x11\xbd\x94\x32\x4d\x16\x2b\xbf\x91\x9f\x06\xdd\xae\x62\x16\xf7\x92\xea\xe3\x68\x30\x3e\x70\x7f\x0c\xdf\xd1\x62\x96\x31\xdc\x51\x92\xe8\xc0\xb6\x4b\x54\xbb\x14\x32\x88\x12\x3d\xd0\x8f\xf8\x96\x45\x04\x8c\xfa\x63\x98\x27\x64\x84\xc6\xad\x5a\x18\x72\x48\xc0\x92\x0b\x00\x81\x0f\xd6\xcd\x8f\x9b\x49\x11\x88\xc9\x62\x86\x29\xba\xc8\xc5\x0c\xa1\xa4\x46\x2e\x17\xf6\xf7\x0d\xcd\xb8\x7e\x2e\xc1\x10\x8f\xf8\x38\x21\xa6\x4f\x5c\x46\xcb\x8c\x1d\x2e\xf8\x55\x41\xb3\x5f\x71\x3a\x24\xf8\x26\xe0\x91\xbb\x30\xb4\x5a\x26\x0e\x96\x38\xe2\xa0\x2c\x01\xcc\xd8\x31\x11\x8d\xfa\x6a\x30\x5f\x8d\x12\x22\x98\xc7\x13\xc4\x27\x57\x91\xbb\x3e\xd9\x34\x22\xb1\x14\x8a\xb2\x6e\xd7\x3c\x8d\xfa\x63\xb0\x64\x37\x99\x28\xec\xbc\x8b\xd5\x59\x00\xcb\x09\x62\x38\xfc\xa1\xdf\x0f\x87\xd9\x34\xda\xc3\x11\x01\x40\x4f\x88\x45\x7b\x03\x00\xa9\xfc\x9f\xc7\x2a\xd1\x67\x44\x40\x87\x45\x7b\x7d\xfd\xbe\x73\x41\x31\xfa\xd8\x91\x6d\xfc\xa1\xff\x2c\x1c\xae\xfd\x36\x90\xdf\x06\xf5\x6f\xfa\xf0\x0c\x05\xbb\x73\x53\xeb\x8f\x94\x6a\x10\xa3\x71\xe9\xfb\x08\x62\x7e\x85\x49\x7d\x6d\xed\xa0\xd5\x00\xfa\x00\xe2\x12\x80\xb2\xdc\x74\x29\xd8\x04\x7f\x26\xd9\x9b\x7b\x02\xd5\xc9\x25\x09\x8e\xd9\x3c\xcf\x78\x14\xee\x87\xc0\x9c\x1a\x62\x6e\x07\x3f\x20\xb1\x8c\xf9\x1b\xf5\x61\x8f\x83\x58\x11\xcc\x51\x18\x82\xf8\x5f\x45\x46\x64\xa5\x61\x18\x6e\x9c\x0e\x2f\x2e\xdc\xc9\xc0\xf0\x02\x31\xfc\xc7\x3f\xf4\xfe\x55\x9f\x98\x18\xd1\x23\x5e\x75\x72\xdf\xab\x1e\x2e\xf8\xb4\xf7\xe7\x10\xd2\x84\x9b\xc6\x63\x5e\xbc\xb8\xe5\xf8\x90\x52\x74\x1b\xe1\x6a\x95\xf0\x4d\x70\x86\x3f\xf1\x23\x2c\xb8\x23\x1a\x11\x10\xa7\xf2\x31\xa2\x60\xd3\x8a\x5c\xf0\x02\xfd\x7b\xae\x88\x99\xf1\x31\xb1\x33\xc6\xf2\xd1\x59\x95\x6a\xd5\xa6\xb4\x98\x55\xeb\xb6\x79\x4d\x26\x28\x9f\x2c\x04\x2e\xe9\xcd\x0b\x96\x69\x6a\xc0\x59\x21\x3c\xbb\x90\x89\xf6\x59\x36\xe9\xa5\xb4\x98\x0b\xae\x60\x7d\xd5\x07\xaf\xe2\xda\x0a\x26\x33\x05\x5c\xd6\x61\xf2\x25\xe6\x43\xdb\xa7\xbd\xf7\x76\x2d\x04\x7c\x04\x9d\x0d\x93\xcf\x65\xb0\x68\x45\xde\x7c\x66\x44\xa8\xc6\x16\x9a\x57\xe1\x5e\x22\xba\x2d\xa6\x01\x3e\x68\xcf\x00\x97\x43\xbc\x71\xdf\x8a\xd9\xbc\x20\xe2\xa4\xec\x37\x52\xd3\x6d\xcb\x43\x60\x9e\x03\xee\x42\x23\x17\x87\x62\xd0\xc9\xa6\x91\x7e\x73\x89\xf9\xdb\x1b\x62\x66\x7d\xaa\x44\xb4\x1a\xfb\x26\x9b\xca\x88\x66\x78\xb7\x1b\xd1\x84\xc6\x2a\xf1\x40\xe4\x62\x2f\x3d\x4f\x6f\x0b\x47\x98\x4d\x68\x36\xe7\x05\x95\x43\x8c\xab\x2d\x2f\x01\x80\x24\x9e\x2f\xd8\x55\x8c\xe6\xf3\xfc\x36\x22\x90\x82\xd2\xc0\x85\xd2\xce\x4d\xcd\xb4\xa0\x91\x9a\xdd\xe0\x39\xf9\xb1\x79\x09\x9f\x93\x27\x4f\xd4\x3c\x58\x22\xa8\xb0\x3d\xe7\x26\x12\xf7\x26\x92\xf1\x70\x59\x76\xc8\xff\x79\x7a\xc0\x23\x06\xf7\xfa\x20\x9e\x16\xf4\x18\xb9\xe8\x56\xcc\x47\x52\x0e\x6c\xc4\xc7\xa0\x04\xc3\x2d\xd3\x62\x5e\xe2\x23\xc3\x2c\xc2\x70\x5b\xd5\x88\x01\x30\xe4\x11\xf3\x0f\x63\x3d\x51\xb3\x6d\xa5\x19\xe4\x00\x94\x76\x31\x71\xb5\x98\xd4\x10\x4e\xe6\x76\x7d\x46\xfa\x09\x3a\xfd\x32\x75\x40\x5b\x54\x9c\xa4\x6d\x24\x70\x8b\x33\x66\x90\x03\xa8\x08\x2f\x0c\x56\x2b\x1f\xc6\x1d\x8d\x21\x4d\xf6\xfa\x90\x25\x7b\x03\x88\x8c\xae\x82\xd3\x5b\x7b\x52\x72\x58\x24\x78\xa4\x0e\x70\x9c\x71\x4c\x11\x2f\xe8\x38\x02\xcf\xf7\x22\x9a\x44\x79\x52\xc4\x04\x7f\xe2\x11\x00\x71\x5a\x10\x0c\xba\xdd\x48\x1d\xc6\x28\x57\xb1\xf1\x01\xdc\xe3\xab\x95\xc1\xe2\x7b\x49\xc2\xc1\x73\xd1\x25\x78\x5e\x2a\x02\x2d\x13\x44\xdc\x5e\x1f\xa2\x24\x2b\xa7\x19\x41\x79\x7e\xbb\x14\x03\xa0\xab\x95\x38\x83\x49\x52\xc4\x6a\x1e\xab\x95\x79\x8a\x80\x2d\x99\x4d\x23\x06\x14\x05\x84\xca\xea\xd4\xcb\x39\x3a\x53\x06\x4b\x55\x46\x62\x8d\xdb\x39\x3e\x16\x64\x5e\x14\x9e\x90\x6b\x94\x67\x69\x80\xb8\xe0\x1f\xb8\x60\xad\x53\xcc\x38\x5d\x4c\xf8\x42\x46\xa8\x25\x3d\x39\xe5\x8b\x1c\x5b\x17\xa9\x10\x94\x11\x28\xef\x01\x00\x27\x14\x23\x8e\xdf\x17\x0b\x8e\x13\x2c\x0e\xdd\x7b\xcc\x8a\xfc\x1a\x53\xa6\x7f\x8a\x2f\xfa\xf9\x54\xd0\x41\xdc\x7e\x3a\xcc\xa5\xa1\x2a\xc7\xc6\x1b\xc4\xd5\x2a\xa1\xc4\x99\xa6\x78\x81\xdb\xd8\xb5\xef\xc5\xae\x7d\xf7\x4e\xf7\xc5\x9d\x86\x3e\xb6\xa4\x8e\x82\x75\xcf\x75\x60\x25\x27\x2a\xe0\x5b\x0b\xae\x55\x94\x27\x8e\xc5\xca\x27\x89\x60\xc3\x4a\x98\x7b\x29\xc0\x56\xe7\x4f\xbd\x03\x7f\xea\x0e\xfc\xe9\x78\x58\xe1\x42\xda\x6e\xe2\x99\x53\xf6\x59\x73\xfc\xea\x57\x92\x24\xe2\xae\x75\xbb\x91\xbc\x72\xcb\x93\xa3\x61\x18\x1a\x0a\x93\xc3\x30\x0e\x2d\xbd\x49\x6a\xbf\x28\x80\x92\x13\xe5\xf0\xe5\x55\x96\xa7\x14\x13\xc1\xc2\x02\x28\x9a\x29\x61\xe1\x9b\x23\xa4\x09\x8e\x67\x68\x1e\x35\x89\x22\x9a\xb0\x68\xc4\x21\x1e\xb7\xbe\xda\x05\xd4\xe4\xb1\x18\x00\xc5\xe2\xe4\xe0\x08\x94\x00\x3e\x05\x10\x25\x54\x71\x79\x74\x34\x18\xc3\x22\x69\x18\x51\x57\x39\xad\x6a\x16\xd1\x8b\x0b\x99\xb2\xc1\x2c\x46\x1e\x4f\x33\x92\x46\xed\x41\xd3\x04\x8b\xf5\x1f\x71\x5b\x94\x8a\x8b\x9e\x14\x02\xb6\x43\x2a\x29\x0a\xf5\x61\x29\xf6\x78\x48\xe0\x99\x34\xe5\x61\x43\x5a\x96\x9d\x35\x47\xb8\xe8\x34\x8e\xba\x67\xca\x48\x5c\x29\xa6\x4b\x84\xc0\xbb\x6e\x3c\x51\x92\x49\x67\x75\x2a\x02\xd0\x2e\x13\xe4\x31\xbb\xca\xa6\x3c\x52\xbc\x9a\x79\x4b\xa2\x65\x09\x31\x94\x3b\x6e\xfa\x19\xda\xad\x57\x0d\x9b\x3d\xd6\x7c\x46\x1c\x0a\x9c\x00\xf4\xbc\xf4\xad\xad\xaf\x99\x3b\x7a\x99\xde\x82\xca\x1d\x4b\x17\x13\xec\xae\x2e\x71\xb6\xd6\x1c\xaf\x58\x35\xb8\xee\x0c\x64\xa2\x9a\x1c\x15\xe4\x40\xb0\x6f\x70\x34\xb6\x43\xb1\xf0\xe4\xd1\x84\x0d\xd5\xc5\xba\xf7\xdd\x5c\x96\xde\x4b\xe9\xad\xfb\x6c\x5c\xbf\xab\xcb\x12\xb2\x64\x59\xfa\x81\x0d\xdd\x00\x6c\x42\xaa\xd7\x22\x14\x57\x5b\x02\x9e\xd2\x43\x1d\x58\x99\x09\x4a\x48\xeb\x0c\x21\x67\xac\x11\x4d\x90\x39\x3f\x00\x22\xe7\x00\xd9\xd7\xb5\x27\xfb\x5d\x42\xe8\x0c\x2e\x12\x54\x9d\x1e\x38\x49\xf2\x88\xc1\x05\xe4\x50\xd1\x95\x76\x25\x48\x6c\xf6\x30\xfe\x2b\xca\x72\x41\xc2\x76\xbb\x51\x96\x14\x91\xe7\x4b\xac\xef\x98\x3e\x0f\x00\x40\xaa\xa6\x93\x26\x4b\x75\xb3\x05\x45\x71\x72\x34\xd4\xe7\x45\x1e\x62\x5a\x76\x6c\x6f\x59\xb7\x1b\xa5\xb6\xb9\x24\x03\x70\x12\x1b\x30\xa6\x70\x78\x0a\x4a\x9c\x33\x1c\xd4\xaa\x4c\xdc\x2a\x15\x83\xa2\x77\x85\xf8\x97\xd9\x9d\x25\x1d\xd9\xed\xa9\xae\x1a\x89\x4f\x8e\xc0\x58\x4d\x00\x25\x45\x34\x12\x2f\xc6\x56\xf1\x13\xaf\x01\xc7\x18\xc8\x15\xb4\x40\x4d\x1c\x27\xb9\xdd\xaa\xa5\x4c\xae\x34\x89\xf5\x67\xb9\xe2\x70\x91\x2c\xdf\xe3\x34\xa3\x78\x52\xad\xd0\xc9\x91\x5a\x1f\x32\x52\xd5\xc7\xce\x3a\x6d\x18\xaf\x77\xbf\x16\xd5\x02\x15\xd1\x9d\x2a\x3b\x5b\x7a\x72\x04\x00\xcc\x1a\xfb\xb1\x50\xe2\x9a\xfa\x8a\x33\x50\xaa\x53\x56\x03\x42\xe2\x30\x18\x72\x48\xc3\xb8\x23\x2d\x4d\xaa\x70\x5e\x7c\x24\xe8\x17\xc9\xa8\xc6\xaf\x05\x35\x26\x16\x43\x41\xac\xa1\xbb\xe0\x3d\x07\xe3\x45\x6e\x2d\xa0\x01\xa1\x4b\xdb\x64\x5b\x78\xb4\x05\xc7\xe9\xfe\x7c\x41\xb5\xd3\xc5\x76\x96\x6c\x67\x7a\xd7\x12\xad\x3c\xe9\x43\x22\x45\x04\xfa\x9b\xbe\xca\xe0\x39\xff\xd1\x3c\x3f\xe7\x4f\x9e\x00\x22\xd0\x3d\x76\xf0\x1a\x29\x9b\xc4\xb2\xec\xaa\x41\xff\x0a\x6a\x5f\x6d\x82\x2c\x1c\x8e\x54\x90\x80\xe0\xd0\x00\xaf\xb1\x80\x3b\x7a\x9b\xe6\xb4\xe0\x85\xe0\x6b\x63\x5e\x9c\x72\x9a\x91\xcb\x58\x70\xd9\x0e\x81\xae\x26\x32\xa5\xc5\x2c\xc2\xa0\xd1\xff\xee\x94\x2b\x9b\x53\x8c\xd2\x47\x26\x5a\x0d\xd7\x8e\x63\xb6\xb8\x10\x8c\xd1\x05\x76\x69\x4f\xe2\x43\xda\x58\x40\xfc\x36\x75\x73\x4f\x14\xe4\xed\xa0\x25\xc7\x36\x6c\xab\x5a\xca\x6a\xc9\xa5\xc4\x50\xad\xb7\x6d\x55\x50\x4b\xa4\x53\x49\x1d\x12\x23\x75\x60\x23\x33\xb6\xde\x40\x10\x83\x28\x61\xf1\xbc\x98\x0b\x90\xcf\x12\x1a\x31\x4b\x57\x60\xcd\x6a\xab\xe1\x43\x1e\x31\x73\x3d\x46\x2d\x5a\x9c\x5f\x65\xcc\xd4\x43\xba\x9e\x78\x07\x1b\x38\xbe\x22\x1b\x94\x91\xd8\x25\x96\xd2\x08\x07\x23\x8d\xfa\x63\x89\xf2\xc7\x00\x80\xb2\x94\x43\x52\x45\xcd\xad\x02\x1d\x77\x9b\x98\xe6\x0e\xa8\xa3\x01\x41\x9b\xee\xa6\xbc\xc3\xbd\x69\x46\x2e\x31\x9d\xd3\x4c\x91\x8e\xff\xe9\x32\x93\x2f\xc9\xe6\x3f\x8e\x38\x9d\x9a\xbb\x70\x4f\x82\xed\xbf\x4e\xdf\xbe\x89\x99\x04\x54\xd9\xf4\xb6\x75\xd3\x10\xcc\x61\xa1\x74\x29\x8a\x3d\x17\x7c\xb9\xea\xe0\xc7\x01\xa8\x80\x95\x06\x54\x1f\xa4\xea\x46\xc0\x27\x75\xbe\x02\xe7\x7c\xc1\x40\x9a\x0a\x92\xcb\x60\x5a\x50\x9c\x5d\x92\xbf\xe3\xdb\x40\x19\x81\x80\x56\xbf\x99\x9a\xd6\xa2\x63\x7b\xce\x46\xf9\x78\xb5\x12\xff\x3f\xb8\x7f\x96\x2f\x2e\x43\x45\xac\x4d\x92\x6c\x44\xc7\xab\x95\x25\x7d\xdb\x3a\xb3\x0a\xd1\xd0\x64\xf0\x9c\xb6\xe5\x68\x74\xbd\x1c\x8d\xba\xab\x4d\xa5\x1c\x8d\x6e\x91\xa3\x91\xdf\x9c\x1c\x4d\x10\x24\x19\x5c\x96\x30\x22\xd1\x22\x11\x1c\x02\x9c\x08\x5e\x6c\x01\x31\x2c\xd4\x03\x82\x2c\x1a\x4d\x60\x01\xc5\xfe\x8e\x01\x80\x0b\xa9\xab\xda\x0a\xbf\x3e\xbc\x7f\x75\x37\xaa\x22\xe2\x89\x07\x15\x28\xe8\xd3\xed\x6a\x0b\xdc\xe6\x07\x4b\x09\x1c\x78\xd0\x93\x91\x61\x97\x5e\xdc\xd5\xed\x6e\xe8\x4e\xf2\x81\x4a\x00\x55\xd0\x24\x49\xec\xfb\x3d\xf3\x5c\xe1\xb6\x03\x33\xb6\xa1\xed\x10\x08\xfa\xe1\x51\x65\xf3\x35\xfd\x72\x75\xea\x9b\x27\x1e\x32\x87\xda\xa2\x3f\x0d\x0e\x68\x6f\x30\xec\x0b\x44\x3b\x78\x8e\x7e\xa4\xcf\xd1\x93\x27\x80\x8d\x50\x6f\x30\x76\xae\x42\xa5\x8e\x26\x75\x54\x48\x0c\x0c\x33\x12\xc9\x24\x49\xe4\xcd\x09\xc3\xa1\xf8\xdb\xd1\xea\xda\xbd\xbe\x56\xcf\x2a\x68\x55\x2d\x27\x1a\xa2\x04\x47\xc8\x55\xb1\x06\x75\x6a\x11\x81\x21\x4a\xd0\x1a\x0c\x5c\xc9\x7e\x70\x24\x4e\x2e\xac\x29\x19\x5d\xbd\xad\xa2\xfb\x04\xb1\xc7\x55\x93\x2e\x02\x44\x6d\x9e\xdf\x45\x26\x0a\x88\x25\x68\x44\xc6\x07\xbc\x52\x67\x56\x5d\x13\x00\xc0\xb0\x02\xd8\x1b\xca\xc1\x30\x71\x58\xa2\x48\x14\x15\x75\xb9\x94\x0e\xe8\x91\x77\x43\x73\x01\xab\xba\xc4\x56\x42\xa0\x34\x05\x43\x10\x73\x9a\xcd\xa2\xcd\xaa\xe1\x34\xfb\x8c\xf9\xa9\xea\xd2\x14\x9c\xe0\xf8\x65\x51\xd0\x14\xf2\x84\xab\xa7\x4e\xa5\xc8\xe8\x43\x9a\xf4\x9f\xd3\x1f\x71\xfc\x0f\x3c\xf1\x00\x60\xf9\x7e\x44\xc7\x3d\xae\x1f\x3a\xe4\x49\xc2\xbe\x67\xa5\x3a\x60\xaf\x11\xbf\x8a\xd9\x2f\x54\x2c\xc6\x13\x1c\xff\x8c\xb3\xcb\x2b\xfe\x84\xeb\x07\x98\x27\xe8\x09\x8e\x0f\xd3\x7f\x2d\x18\x17\xa7\xf6\x09\x77\x7e\x74\xf2\x9f\xfa\x92\x4c\xcc\x2d\xba\x92\xcd\xc9\x10\x2c\xd1\x00\xff\xf0\x3d\x02\xfb\x83\x7e\x7f\xe3\x3a\x16\xb3\xfd\x49\x9e\x4d\x3e\xf6\xa6\x19\x65\xdc\xc6\x52\xf8\x02\x26\x28\xf7\xd6\xc2\xf2\x16\x4a\xb4\x72\x42\x1e\xeb\xc4\xb8\xa4\x48\xa5\x91\x4e\xcc\x8b\x57\xc5\x0d\xa6\x2f\x91\x14\x87\xe8\x9b\x4b\xf5\xc5\x55\x96\x5f\x43\xf9\xac\x4c\xc6\xd4\x33\xd2\x7f\x2f\x16\x9c\x17\x24\x1c\xaa\xfe\x4a\xbd\xa3\x51\xc8\x69\x08\x4d\x57\x20\xfe\x65\x81\xe9\xed\xa9\x74\x7c\x17\x28\x1f\x85\xa0\xc3\xba\x5d\x22\x38\xe3\x52\x3b\x5e\xb8\x73\x1f\x85\xb3\x62\xc1\xb0\xb2\xe6\x54\xcf\x8b\xb9\xb2\xb8\x9a\x7c\x0c\xd7\x8a\x5f\x05\x80\x7b\x2d\x0a\x1f\x5f\x63\x22\xa8\xde\xe5\xc5\xe2\xe2\x22\xc7\x4c\x52\x78\xe2\x2e\xe4\x86\xbe\xbb\xce\xf0\xcd\xf0\x26\x23\x69\x71\x53\x02\x9f\xe0\x49\x9c\xea\xd8\xa4\xe0\x55\xed\x71\x81\x21\xb7\x1e\x94\x82\x61\xc6\xbf\xc0\x9d\x93\x1a\x18\x23\x44\xd5\xdd\x0a\xe4\xa2\x74\x36\x16\x88\x6d\x06\x11\x62\xc4\x8a\xa9\xc8\x33\xc6\x31\xc1\x74\x83\x6d\x55\x93\xa1\x70\x6e\xf8\x73\xf2\x23\x6f\xa9\x28\x69\xc2\x47\x64\xdc\xa1\x0e\x59\x9f\xb8\x3f\x56\xab\xbd\x01\x14\xbc\x51\x45\x7a\x27\x7b\x7d\x63\x64\x9c\x29\x11\x36\x8d\x0d\x29\x9e\xec\xf5\xd7\xeb\xda\xa9\x00\xe8\x82\x45\x78\x14\xe4\xfa\x40\x2d\xcd\x68\xec\x5a\x7d\x88\xb5\x2b\x9b\xbc\xb8\xb3\x9a\x38\x5a\x2b\x02\xde\xb5\xbb\xe7\x0d\x8d\x40\x36\x8d\xf6\xa2\x4a\xb6\x50\x4c\x03\x0e\x80\x57\x4a\xf1\x12\x11\x52\xf0\x40\xb0\xdf\x01\x0a\xa4\x1d\x69\x80\x58\x80\x2c\xe0\x08\x41\x09\x14\x37\x8c\x01\x14\x7f\x63\x7b\x52\x12\x5e\x6a\x7d\x09\xb4\xfc\x33\x49\x30\x8c\x68\x32\x5a\x7e\xc4\xb7\xc3\x10\xa5\x69\x08\xd5\x52\xbb\x08\xd6\x32\x40\x10\x29\xe6\x3b\x9b\x46\x1e\x92\x8b\x03\x96\xf0\x8e\x14\x6f\x66\xd3\x88\xbb\xd3\xc1\xe2\x53\x4c\xf1\xac\xb8\xc6\xf1\x45\x46\xd2\x88\x03\x59\x52\xb6\x9b\x27\xa2\x67\x79\x69\x5f\xe9\xc1\x86\xb0\x48\x42\x55\xbe\xfe\xbe\x63\xe9\x17\x3e\xca\xc7\xdd\x6e\x94\x27\x61\x41\x64\xf1\x62\x3a\xd5\x1c\x47\x96\x90\x4e\x8b\x84\xc9\xa4\xe0\xb7\x69\xa7\xf7\x65\xf8\x50\x41\x9e\x8b\x65\x54\xc3\x5b\xd4\x88\x9a\xac\xad\x84\x71\x36\x87\x26\xd9\x08\x8f\xa1\x98\xac\xa4\xe2\xa0\xc7\x10\x65\x54\xe8\x6f\x54\x9f\x5b\x48\x4b\xd0\x61\x49\xbb\xe8\x62\xad\x26\x2c\x92\xc0\xd2\xb4\x58\x3b\x37\x4a\x52\xca\x6a\x5d\xeb\xfb\xe6\x14\x9a\x66\x24\x3d\x21\x29\xfe\xe4\x6d\x5e\xd0\x9b\x56\xa5\x15\xb8\xf5\xd8\x5c\x9a\xa0\x61\x38\x00\xa3\xfe\x58\xd2\x48\x50\x9d\x46\xb5\xfd\xad\x03\xe9\x8a\x81\x9c\x76\x36\x4d\xac\xe3\x9f\x97\xee\xba\xdf\xb8\x27\x46\xb4\x09\x71\x59\x8e\x41\xb7\xcb\x23\x52\xf1\x08\x62\x99\x99\x7c\x07\x99\x28\x21\xd5\x85\x9b\xe0\x35\x16\xc7\x57\xc7\xdb\xdb\xb7\x96\xc7\x3b\x03\x6d\xcb\x9b\x63\x2d\xdb\x5c\xda\x3d\x86\x4d\x25\xd9\xe6\xb2\xcb\xb2\x61\xc6\x8a\x81\x24\xfa\x14\xb1\x87\x5c\x42\x8f\x24\x68\x44\xc7\x90\xc7\xd2\xcc\xe7\xed\x34\x22\xe0\xa7\xa4\xbf\x5a\x45\x6c\x44\xc6\x09\x16\xc4\xb0\x59\x52\xa6\x2c\x03\x76\x13\x4c\xa1\xad\x82\xa9\x3b\x0e\xa8\x25\x10\x9e\xeb\x26\x4f\xd8\xb1\xbd\xa7\x5a\x38\x0c\x09\xe8\x76\x9d\x19\x94\x76\x06\x8f\x48\x01\xe6\xf7\xa5\x00\x49\x04\x5c\xed\xb6\xd6\xa3\x15\xf2\x94\xc3\xec\xbe\xad\x2e\x4b\xb8\x48\xb2\x58\xfb\x5a\x49\x48\x0a\x27\x09\x8f\x32\x38\x0a\xdd\x97\xe1\x18\x74\xb0\x2b\x4a\x1d\x35\x27\x96\x25\x46\x27\xa1\x5a\x59\x24\xe2\x80\x8e\x42\xe7\x5d\x38\x76\x6c\x4c\x55\x5b\x05\x1c\x2d\x60\x31\x06\xda\x74\x38\x6f\x5a\xd1\xaa\x43\x5b\x43\x15\x12\xd1\x19\x39\x3e\xd7\x78\xd8\x83\x6d\xb2\x83\x6c\x88\x60\x9e\x08\x0c\x85\x41\x27\x8f\xc5\xfb\xd5\x2a\xca\x93\xa5\x78\x1a\xda\xe8\x29\x30\x45\x1c\x0d\xf3\xd2\xc0\xde\x4a\x18\x9c\xc7\xe2\xd3\x6a\xb5\x2c\xa1\x0a\xd5\x0d\x3a\x8b\x6e\x37\xc2\x62\xbd\x58\x41\x13\x1a\x2d\xf4\x23\x34\xef\x00\x80\x45\x6d\x39\x93\x1c\x16\x0d\xba\xb3\x5e\xc0\xc8\xc0\x58\x84\x1b\x55\x61\x11\xcf\x29\xbe\xce\x8a\x05\xd3\x25\xf5\xac\x1b\xef\x93\x46\xb5\x89\xa2\x6c\xe1\x64\x0c\xa0\x3d\x03\x62\xe0\x12\x8c\xd5\x06\xb7\xd0\x34\x40\x13\xbd\x46\x61\x31\xc7\x24\x84\x3e\xcd\xbf\x66\x37\x2e\x31\x7f\xe9\x34\x15\x81\x4a\x7d\xc7\xbb\xdd\xe6\x9c\xe5\x88\xdc\xf1\xeb\x0b\x69\x2e\x3c\x62\x2c\xbb\x24\x06\x44\xa8\x43\x13\x61\x07\xac\x2e\x1d\x31\xcd\x50\xdf\x35\xbc\x11\xbd\x96\x00\x2e\x1b\x83\xf4\x59\x69\x36\xd7\xa4\x84\x97\x98\xbf\x73\xd7\x77\x5d\xad\xda\x26\x88\xee\x8a\x12\xe2\x58\x6a\x89\x10\xc7\x2f\xd5\x19\x31\xb7\xe2\x87\x4f\x9f\x5e\xa0\xc9\xc7\x62\x3a\x5d\xa3\xcd\x79\x20\x8d\xfa\x0c\x3f\xf3\x9a\x12\xed\x04\x06\xd4\x91\x7f\x7f\xfa\x8f\x77\xb1\x76\x76\xb8\xbf\xf5\x01\xc3\xfc\x2c\x9b\xe1\x62\xd1\xe6\x59\xad\x9c\xbc\xba\x62\x14\xaa\x68\x46\x82\x3e\xa0\x8c\xeb\xfd\xd7\x5e\x21\x75\x55\x3d\x03\x0d\x21\x94\x92\x52\x59\x90\x1f\xfe\x10\x82\x6e\xf7\x99\x7c\xa7\x46\xdc\xed\x4a\x37\x02\x51\x77\xe8\x10\xf0\xbc\x21\xeb\x75\x35\x7f\x11\x05\x25\xc4\xe2\xb0\x2a\xf2\x5a\x59\xd3\xb4\xb6\x90\x74\x14\x43\xf4\x68\x66\x1f\xd2\xa5\x8e\x24\x73\x44\x19\x3e\x11\xbc\xae\x9c\xfb\x5e\xc6\xde\xa0\x37\x8e\x03\x84\x92\x6d\x8b\x0b\x46\x7e\xe4\xd2\x20\xa8\x0f\xa0\x94\x80\xcc\xd0\xa7\x88\xc0\x81\xd4\x0d\x37\x8e\x20\xed\xa8\x55\x6f\x1f\xe3\x35\x3c\x77\xfb\x38\xd4\x56\xac\xda\xe1\xfa\xd2\x61\x50\xc2\xa7\xf8\x99\x24\x14\x21\xf2\x88\x36\xbd\x80\x17\x6f\xe5\x68\x6b\x14\xd2\x04\x4d\xae\xbe\x84\x08\xec\x41\xd6\x71\xeb\x3c\x86\x68\x7b\xe5\x19\x44\x96\x32\x10\x64\x57\xa7\x6e\xb7\x21\x58\x18\x14\x5b\x0f\x2b\xac\xdc\x72\x40\xd3\x96\x4e\x14\xac\x18\x6f\xd1\xb0\x60\xb5\x5b\x2f\x93\x65\x09\x60\xfb\xb5\x6d\x3f\xa9\xba\x82\x58\xd6\x57\xd8\xa9\x48\x90\x46\x9f\x1c\x66\xb2\x33\x29\x7c\x2e\xe4\xe8\xad\x8a\x56\x70\x2a\x0d\x17\xa0\xea\x5c\xa5\x38\xc7\x1c\x07\xa2\x2e\x24\xc6\x75\x47\x5c\xb4\xb5\x7e\x33\x8e\xd1\x44\x7d\xb4\x0a\xd3\x2a\x44\x9c\x17\xd2\x26\xc8\x69\x5d\x3a\xd9\x6c\xd6\x5b\x78\x0e\x95\xb2\xc1\xff\x22\x42\x40\x8f\x9a\xf0\x4e\x7e\x68\x10\xdd\xf7\x58\x4a\xe1\xea\xfd\xec\xc2\x88\x4b\x7c\xda\xeb\x21\x49\xc1\xe2\xfe\xc4\x67\x47\xd3\xde\xa2\x1d\x4d\x89\x50\x8c\xd2\xdb\x53\x8e\x38\x4e\x9e\xaa\x37\x6a\x8f\x12\x8f\xcf\x02\xf7\xf8\x2c\x28\x7c\xae\x8f\x85\x68\x4e\x1a\xfc\x44\xa0\x1c\xf2\x56\x07\x7d\xb7\x40\xe3\x1c\x6a\xa1\x0b\x71\xca\xff\x34\xa8\xe0\xb0\xdb\xcc\x00\x92\x06\xb5\xa3\x01\x9d\xa4\xa1\x4a\x00\x51\x44\x60\x01\xa9\x38\xec\xed\xfb\xd1\xac\x2b\xcd\x54\x60\xad\x83\xa7\xad\x5b\x22\xaa\xd5\x0b\x3c\x3a\x71\x55\x6c\x25\xae\xe4\x2a\xbb\xc4\x91\xc6\xcf\x8d\x65\x36\xc8\x5a\xca\x97\x83\xa7\xc3\xd6\x36\xb7\x5c\xef\xea\xdf\x9f\xb9\x52\x07\x4b\x66\xe9\xd2\xef\x17\x84\x60\x5a\x0f\xf9\xe3\x48\xe2\xb4\x70\x4a\x6c\x25\x8d\xb8\xdd\x3e\xae\x0f\x95\x11\x35\x45\x04\xf2\xf6\x12\x5b\xb8\xa6\x5a\x29\x41\x87\xfb\xf7\x59\x2e\x44\xa8\xec\xb2\xea\xe3\xe2\xeb\x6d\x76\xac\xc6\x5c\x35\x65\x82\x3a\x2e\xe5\xdf\x21\x86\x1a\x4b\x0e\x71\xac\x9f\x04\x49\x5f\xa7\x38\xf4\x7a\xe3\xf6\x62\x3f\x55\x8b\xfd\x4c\x93\x3d\x7b\x7d\xbd\x86\x7b\x83\x3b\xc1\xc5\x96\x17\x0f\xdc\x51\xe4\xbc\xa1\x69\xc5\x3e\xec\x53\x76\x3d\xdf\x58\xae\x8e\xef\xb7\x17\x34\xf9\x80\xb7\x16\xb4\x86\xaa\x3b\xf5\x6e\x10\xc3\xf6\xb2\xe2\xb6\xef\x5a\xb6\x92\xf3\x6c\x2f\xab\xe3\xf1\x58\x3f\xb8\x49\x41\x14\xbf\x32\xa9\x4f\x17\x93\xeb\x86\xef\x1b\x94\x82\x1d\x28\xed\x47\x60\x06\x17\x70\x02\x53\x47\x82\x34\xad\x97\x51\x2a\x08\x85\xee\xf1\x08\x8d\xa3\x1c\xc0\x2c\x29\x94\xd1\xa3\x56\x43\x2c\xea\xd8\x99\x44\x0b\x50\x16\xd2\x0f\xe5\x80\x47\x19\x30\x28\xca\x42\xd5\x4c\xdf\x2a\x0a\x19\xa8\x8c\x7c\x66\x3e\x6d\xb7\x21\xa0\x25\x4e\x71\x28\x2f\x57\xf4\xde\xa2\x46\x45\xbb\x5a\x72\x64\xc5\x13\x90\x80\x8e\xed\x2a\x97\x32\xb3\x08\xc9\x49\x8a\x65\x08\x09\xfe\xc4\x43\x41\xe2\xdb\x32\x45\xab\x8c\xa4\xfd\x65\xa1\x5c\x13\x63\x92\xa8\x15\x1d\xcd\x8d\x42\xed\x1e\x14\x01\x2f\xf4\x04\x12\x2c\x6d\x0f\xab\x5f\xf2\x94\x27\xd8\xe0\x3a\xbb\x80\x89\x84\xd2\x9f\x6e\x13\x1c\xeb\x30\x50\x12\x5a\x9c\x9a\x62\x26\x48\x46\xfd\xed\x5b\x7d\x12\xeb\x6f\x5f\xea\xb3\xec\xbe\xd5\xe6\x74\x51\x1f\xa6\x31\x26\xd7\x20\x72\xc2\x80\x98\xf0\x1f\xe7\xef\x3f\xbc\x79\x73\xfc\x3e\x04\x5a\x83\x88\x27\xe1\x70\xbe\x4e\x4e\xae\x58\x07\xbd\x36\xf8\x13\xc7\x24\x8d\x96\x1c\xb1\x8f\xc3\xa8\x0f\x27\xb1\x78\x02\x11\xc5\x97\x02\x4e\x20\x5e\xd0\xf7\x0b\x22\x03\x64\xcc\x10\xfd\x68\xb7\x35\xa0\x15\xf4\xf5\x94\xbd\xa1\xae\x28\x97\x2a\xc5\xd5\xf3\xe7\x86\x3d\xa4\x92\x31\x4f\xa8\x74\x93\xb2\xc8\x27\x9b\x46\x44\x5a\xac\xaa\xf7\xc9\x0f\x0a\xeb\x18\xdc\xa2\xdf\x3e\x83\xb8\x86\x1a\x30\x88\x38\xe8\x18\x58\xaa\xca\xf4\x5d\x1b\x87\x1f\x94\xd6\x14\x93\xd4\xa8\x4c\x03\x1a\x33\x5e\xcc\x23\xc1\x04\x51\x69\x3d\x08\x0c\xca\x05\x92\xe5\x0d\xc5\x22\x84\x20\x9e\x63\x3a\x2d\xe8\x2c\x02\xa5\x6b\xdf\x60\x67\x5b\x5b\x64\x23\x1c\x98\x6d\x5f\x3b\xdc\xd0\xc8\xc0\xbc\xb3\xeb\x52\xe2\xe6\x52\x62\xb5\x94\xb8\xbe\x94\x28\x89\x58\xb2\xc3\x38\x76\xdf\xc3\x1d\x3b\xce\xa6\x91\xc4\xe2\x4b\xec\xdd\x43\x6c\xf6\xb0\x8d\xde\xed\x1e\xe2\xdd\xf6\x10\x57\x7b\x28\x78\x14\x10\x01\xed\x74\xd7\xd1\xe8\x35\x9b\x46\x48\xf9\xdf\x99\xc1\xfc\xc5\x3b\x98\x1f\x20\x52\x00\xd4\x74\x95\x8b\x5b\x8e\x09\x87\x28\x61\xb6\x55\xa8\x4b\x3f\x75\x87\xf5\x97\x6a\x30\xe8\x82\x2e\xe6\x3c\x0a\xb5\x35\x09\xcc\xf5\x38\x06\xfd\xed\x43\x6f\x5b\x0e\xa8\xe3\xd1\x30\xac\x95\x60\xb7\x32\xd8\x2d\xcb\xa8\x66\x76\x83\xd8\x2d\x99\x3c\xd6\x91\x7c\xec\x03\xe9\x13\x6d\x78\xce\x40\xa9\x17\xad\x75\x8e\xfe\xe4\xdd\xba\x3f\x40\x66\xf6\xfb\x0f\x43\x64\xb6\x4d\x7f\x1c\xb8\x3b\xf5\xa7\xf5\x3b\x85\x74\x0b\x7f\xfe\x9c\x1b\x25\x11\xd3\x55\x12\xf5\x61\x6e\xe8\x4f\x10\x11\xf3\x08\x3d\xd2\xbd\x39\xe8\xf8\x11\xc2\x95\x24\x58\x2f\x44\x5b\x45\xd5\xd6\x95\x28\xee\xc3\x2a\x17\xb2\xf8\xb5\x28\x9e\x55\xc5\x2f\x44\x71\x1f\x6a\xba\x96\xc5\x6f\x45\xf1\xc5\x6e\x23\x15\x2d\x79\x30\xdf\xad\x6c\xe8\x52\x34\xc4\xaa\x86\x5c\xe4\x23\x53\x03\xe9\x06\xa5\x01\x9a\x7a\x61\x9d\xf2\x45\xc3\x0a\xb5\x5e\xca\xb6\x8e\x45\x5b\xa8\xd9\x56\x73\x28\x06\x2d\x1f\xcb\x3a\xe7\x3e\xba\xfe\x38\xc2\x02\x9f\x56\x1d\x45\xc0\xa3\xd5\xd0\x85\x2f\x23\xe5\x55\x26\x38\x07\x8d\xfb\xcf\x65\xd3\x9f\xc4\x70\x68\xd5\xc6\x39\xbc\x5e\xb3\x3a\x8a\x74\xf8\xd4\xa9\x93\x14\x6b\x18\x8e\xab\x68\x1d\xbd\x25\xb9\xae\x1a\x77\xa3\x6f\x8e\x64\xcd\xa9\x7b\xc3\xb8\xe1\xaf\xcb\xca\x3a\xbf\x2d\xc4\x51\xae\x7e\x7e\x89\x9f\x9f\x13\x56\x55\x1e\x89\x55\x12\xb8\xde\x38\x0d\x56\x74\xd7\x23\xca\xf8\xaa\x49\xdd\xdb\xd9\x4e\x4f\xa4\xb3\xa3\xe8\xd5\x11\x15\xd6\xb8\xc0\x08\x4b\x3d\x15\xa8\xbb\xbf\x82\x25\x8a\xb0\x8a\xae\x23\x17\xa1\xa5\xe2\x21\x30\x17\x88\xa7\xf5\x9e\xc2\x02\xc0\x9a\x68\xd7\xa3\x5d\xd3\xa2\x37\x69\x3f\xab\x85\x2d\x38\xf6\xd8\x63\x98\x5e\x7c\x9f\x44\x47\xe5\x0e\x36\x58\x6b\xb8\xac\xcf\x29\xaa\x7b\xa0\x32\xc6\x01\x55\xb0\xd5\xea\xbd\x75\x04\x52\x5e\xe6\x45\x02\x4a\xb2\x55\x17\xf5\xf2\xb2\xf2\xc9\x7d\x1c\x89\x10\xdf\x2a\x11\x12\x9b\xb3\xb3\x40\xe8\x59\x4b\xd2\x53\x43\xaa\x4f\x87\x75\x85\xb3\x23\x0b\xf4\x4c\xb7\x52\xd7\x1b\x29\x11\xbf\xd3\xb1\xd2\xd2\x83\xcf\xab\x56\x70\xd1\x79\x75\xab\x0d\x03\x7b\xcf\x53\x31\x1a\xc3\x3c\xc1\xd6\x9c\xc9\x0a\x47\x91\x53\xbb\xd2\xb7\x21\x9b\x33\x1f\x48\x3b\x5a\xb4\xde\xa3\x77\xcf\xf5\x8a\x0a\x33\x76\x84\x19\xa7\xc5\x2d\x4e\x45\xd5\xf6\xc7\x1c\x73\xf5\xa9\xf1\xe5\x55\x81\x52\xf1\xa1\x04\x46\x97\x60\x6c\xb8\xf5\xf9\xbc\xd7\xc8\xf3\x84\xc0\x22\xd1\x39\xb7\x8c\x9a\x5b\x1a\x7d\x15\xe3\x6e\x37\x12\x7f\x92\xdc\x32\xa0\x12\x44\xa5\xc3\xbd\x01\x54\x28\x43\x6a\xdb\x32\x92\x71\xbf\xd5\x50\xa7\x61\x17\x27\x10\x53\xc3\x04\x08\xa5\x0a\x35\xc6\xe7\xfa\x48\x56\xe8\xc0\x83\xe6\xd5\x2c\x98\x5a\x12\x13\x52\x5a\x90\x08\x12\x6c\xef\xd0\x78\x43\x1b\xbf\xa6\x61\x39\xcb\x10\xee\x0d\x76\x6a\x53\x49\x2d\x77\x6e\xb4\xbf\x53\xa3\x1a\x35\x6f\x5b\x03\x5d\x8c\x1b\xfc\xa4\x5b\x3e\x67\x8b\x39\xa6\x6b\x08\x5d\xd8\xc4\x54\xc3\x86\x01\xed\x96\xb1\x49\x4a\x0b\x6e\xb0\x08\x90\x07\x40\x1f\xca\x48\xdb\x8f\xe9\xca\xa0\x69\xee\xa0\xc7\x88\x6b\x03\xf4\x20\xb9\x9d\xdb\xf7\xd4\xf5\xf6\x51\x23\xd1\x76\x6e\xbd\x4e\xd8\xf9\xda\x6d\x09\xf3\x37\xb6\x27\x4b\x7b\xdb\x69\xa2\x80\x8d\xcd\x88\xc2\xde\x56\x6e\xb2\x3c\xd7\xf0\xc6\x6d\xac\xb1\xc5\x6a\xcd\x04\x07\x05\x00\x14\x57\xde\x60\xb2\xa5\xbe\x63\x43\x04\x75\x5f\x43\x06\x6b\xf8\x62\xd8\xc0\x1f\x65\x65\xb8\xbe\xbc\x13\xe2\xa8\xa4\xc9\xdf\x30\x3d\xb2\x4e\x1f\x2d\x25\x77\xd2\x92\xc1\xc0\x62\x8f\xd5\x6e\xf3\xe8\x4b\xd7\x50\x8f\xfd\x0f\x80\xca\x3a\x81\x1e\x54\xf2\x5f\xaa\x40\xdc\x5a\x1d\x2f\x97\x47\x20\x92\x3a\x5b\x19\x6b\xb2\x16\xad\x83\x82\x25\x51\xf7\xb8\x0d\x58\xb0\x52\x81\xa9\x03\x00\xad\x55\x92\x21\x46\x69\x45\xfb\x02\x68\x1b\xf1\xc2\x68\xb7\x99\xc8\xc2\xe4\x72\x8b\x33\xce\x5a\x29\xfd\x7f\xb4\x27\x9c\x9d\x24\xf9\x96\x5d\x0a\x1c\x39\x33\x76\x02\x65\x24\x49\x82\x1d\xab\xfa\xf7\x78\x8a\x29\x26\x13\x63\x5a\x2f\x80\x4f\x70\x85\x18\xf9\x8e\x07\x17\x18\x93\x40\x46\x64\x40\x79\xc6\x70\x1a\xf4\x02\x89\xba\x22\x50\x2b\x31\x41\x79\x2e\x68\x9f\x2a\x20\xab\xed\x9a\xd5\x05\xe7\x11\x4b\xc2\x05\x51\x63\x4e\x2b\x52\xe8\xbd\x0a\x27\xdd\xed\xea\x07\x71\xeb\x0e\x9c\xe7\x61\x53\x0c\xdf\x34\x4b\x32\x9b\xf0\x7c\xaf\x65\x0a\x7b\x85\x98\x63\x63\x6b\x8c\x60\x39\xe8\x76\xb5\x95\x51\x84\x13\x24\xd8\xe8\xe7\xe0\x79\xe5\x47\x6a\x8c\x79\xad\x2d\xd7\x36\x57\x54\x0a\x2b\xc3\x45\x26\xc7\x2f\xff\x57\xfd\x11\x30\x64\x5a\xc1\x24\x0e\x90\x98\xc3\x6a\xe5\x9e\x23\xe4\x5c\x16\x6b\x1d\xcc\x30\x7f\x67\xa6\xf1\x76\x7a\x50\x8d\xc0\x79\xeb\x3d\xff\xf1\xf9\xb9\x9c\xff\xf9\xb9\x35\x0d\xae\xd7\x92\x16\x29\xb5\x83\x9c\xbb\xf1\x85\xa2\xdc\x3f\x84\x66\xa8\xb7\x76\x7f\x09\x87\x58\xcd\xf0\xd1\xdc\x45\xb5\x61\xce\xc3\x6c\x49\x32\x8f\x09\x9b\x24\x81\xb1\xb8\x2d\x82\xa0\x6e\xb1\x5a\xe2\x43\xb7\x5b\x58\x18\x2f\x4b\xb4\xb1\x41\x1b\xe6\x73\xaf\x1d\xcf\x93\x27\xb0\xa9\x56\xc7\xae\xb1\xa8\x17\x86\x16\x2a\x96\x93\x3c\x81\xbe\x08\xcb\x8f\xed\x32\xa3\x88\xd1\x02\xc0\xa8\x66\x53\xaf\x23\x1c\x77\xbb\x51\xcd\x2f\x95\x80\xd5\xca\x03\x68\x1d\x33\x3e\x2b\x01\x97\xe1\x47\x14\xa5\x1b\x15\xc0\x4f\xf9\x02\x60\xf5\x82\x90\xc5\x57\x88\xa4\x39\xa6\x49\xa6\xe4\x73\x34\x62\x00\xc0\x26\xf3\x4f\x9a\x6f\x8c\xc9\xf2\x00\x56\x52\x3e\x4c\x13\xe2\xfc\x80\xcc\x20\x63\x56\xae\x5b\x52\x9f\x11\x8e\x85\x17\xdc\xbf\xbe\xa7\x02\x30\x06\xf8\x93\x4c\x01\x21\xd5\xbf\x0b\xc6\x03\x9c\xf1\x2b\x4c\x83\x0b\x2c\x6d\x1a\x83\x82\xd6\x16\xbc\x83\xdb\x32\x0b\x4d\xdb\xf1\x6e\x97\x6f\xb5\x0b\x76\x04\x13\x4d\xa1\x85\x94\x0d\x74\xbb\xea\x5e\x97\x51\x01\x31\xa8\x2b\xcd\x29\x58\x8a\x39\xd5\xc4\x21\x02\x84\xc9\x77\x02\x7f\x44\x05\xd4\xfe\x50\xb5\x63\xeb\x71\x44\xc9\xa6\xd1\xc0\xdc\x21\x47\xfe\x61\xa0\x61\x84\x22\xc7\x5a\x07\xc0\x66\x7b\x52\xf6\xba\x4e\xec\xaf\x9d\x60\x34\x17\xd7\xea\xba\x26\xcf\xc5\xd4\x2b\x80\x0b\x2d\xd1\x22\x4b\xeb\x93\xe5\x31\xc4\x72\x5c\x6e\x14\x27\xba\xb5\xbb\xb6\x41\xf9\x8e\x7d\x0d\x6c\x5f\x0d\x90\xe2\xe9\x74\x83\x55\xa9\x23\x2d\x8a\xda\x20\x4c\xd0\x76\x63\x00\x8b\x52\x5c\xbf\x9d\xa8\x3c\x6d\xb5\xe2\xfe\xe8\xb1\xab\x4c\x7f\x7e\x54\xe2\xff\x86\xa2\xb9\xb2\xce\xf7\x22\x15\x82\x6f\x6a\x9a\x35\xc7\xad\x87\xaf\x56\xdc\x13\x05\xc9\x9c\x37\xa4\x8d\x96\x89\x94\xa7\x70\xd0\x51\xb5\x24\x09\xe5\x95\x8c\xbb\xce\x40\x0a\xeb\x0b\x1a\xc9\x44\x16\xb5\xc1\x4e\x3b\x0e\x3d\x25\x89\x10\xc7\xaa\x4f\x52\x25\x25\x5d\x7b\x9b\xb7\xc9\x1c\xe9\x16\x99\xa3\x75\x4b\x67\x49\xff\x39\xfb\xd1\x8c\xed\xf9\x93\x27\x56\xae\x46\x46\x6c\x2c\x8d\xa9\x23\x24\x9d\xf8\x9c\x85\x31\xae\x2b\xdb\x68\x18\x0e\x11\x80\x0b\xaf\x97\x89\xd6\xee\xfa\xf7\xd9\x99\x37\x44\x70\x71\x50\x44\x08\x0c\xf3\x08\x81\xca\x95\x8e\x96\x11\x8e\xfc\xb4\x08\x17\x5c\xad\xe0\x5e\x98\xd8\x2e\xe9\x1d\x58\x55\x5a\x5b\x45\x13\x19\x10\xc7\x19\x3b\xe5\xc5\x7c\x8e\x53\x9f\x36\x48\x60\x9e\xd8\x66\x01\xd3\x05\x45\x2d\x86\xd5\x7d\x7b\x77\x85\x5a\x0a\x13\x59\x09\x57\x5f\xb9\xae\xa0\xef\xa9\x8a\xa5\xe6\xab\x33\xa9\x15\x30\xd5\xde\x21\xc6\xb2\x6b\x6c\x60\x84\xaf\xe2\xbc\x51\x84\x1b\x2e\x5d\x20\x99\xff\x8b\xd1\xc7\xd7\x68\xae\x03\x8f\xe9\x5f\x9d\x3a\x75\xaf\x0d\x55\x95\x3c\xd2\x2e\xa0\x38\x69\x45\x8e\x63\xc4\x18\xa6\x3c\x52\x08\x8c\xc0\xf0\x3b\x71\x66\xbf\x0b\x32\x26\xf0\x95\xca\xe3\x82\x48\x20\xd7\x23\x50\x18\x1e\x06\x17\x0b\x1e\x5c\x16\xd2\x86\x08\x92\x1a\x41\x0f\x96\xda\xbd\xae\x39\xec\x03\xac\x56\x2d\xae\x9c\xd6\x95\xf9\xb2\xfc\x89\x53\xc9\xd3\xf8\x94\x2c\xaa\xd6\x9c\xca\xbf\x3a\x9a\x9c\xe0\xd4\x7c\xef\x23\x00\x86\x3e\x1e\x42\xcf\xd5\xcb\xfb\x99\x75\x90\xac\x72\xb7\x5b\xfb\xe9\x46\xf2\xa9\xf7\x24\xa8\xaa\x2c\xc5\x81\x9e\x65\x20\xbf\x05\x46\x2e\x13\x64\xe4\xba\x98\x28\xaa\x23\x84\xad\xb5\xa8\x13\xf7\x32\x15\x86\x3a\xe0\x02\x5a\x2c\x65\x53\xea\x98\x0c\x31\x94\xbf\x86\x04\x56\x47\x6e\xf8\x14\xd6\xce\xd2\x10\x43\xb3\x88\xc3\xbd\x01\x64\xea\x1c\x8b\xc7\xe6\xd9\x16\xef\x1a\x43\x51\x72\x60\x9e\xcd\xf0\x29\x47\xb3\xf9\x90\xc4\xf6\x79\xb5\x3a\x42\x1c\xc7\xa4\xb8\x89\xc0\xda\x90\xf0\x72\xc8\x61\xc6\xce\xe8\x82\x71\x9c\x56\x80\x7c\x50\xf7\x02\x76\xc0\x14\x6d\x24\x0a\x81\x0a\x6e\x51\x0f\xdc\xa2\x02\x6e\x21\x95\x50\x2e\x63\x96\x61\xf1\x8d\x01\x41\x0d\x54\xea\x76\x6f\x1a\x3f\xfa\xc3\xd3\x53\xa5\xda\x55\x47\x69\x84\xc7\x25\x64\x6e\x39\x79\x01\xeb\x25\xc4\xbd\x6d\x42\xe3\xfa\x3c\x1b\x36\x75\xba\x7f\xaf\x7f\x2e\x4f\x6a\xcd\x5b\x5d\xd5\x08\x8f\xad\x21\x5f\x4d\x3e\xb9\xb9\x63\xe4\x60\x18\x31\x61\x29\x08\x59\x33\x59\xe9\xca\x20\x25\xc1\x81\xc2\xe4\x6b\xca\xa9\x13\xa6\x0a\xd6\x0e\x5d\xbb\x7c\xed\xb3\x18\xec\x6c\x5e\x30\x9c\xbe\x43\xfc\xaa\xad\x62\xf0\x56\xea\x38\x1e\x3e\x49\x82\x0f\x46\xe3\xa1\xdc\x14\xd1\xf9\x9b\xb7\x6f\x8e\xab\x3e\xfb\xea\xe5\xcb\xc3\x77\x67\x1f\xde\x9f\xbc\xf9\xdb\xf9\xbb\x9f\x0f\x4f\x9d\xef\x03\xf5\xfd\xf0\xec\xfc\xec\xf0\xfd\xdf\x8e\xcf\xaa\x2f\x4f\xd5\x97\x17\x1f\x5e\xbc\x78\xe5\xa9\xf8\x4c\x7d\xae\x2e\xdb\x9a\x75\x91\xdf\x4a\x79\xd7\xc4\x31\x44\x97\x4a\xa2\xba\x6e\x9e\x1d\x65\xe8\x32\xdf\x0a\xe6\x1a\x0d\x56\x70\xae\xf1\x21\x02\xaa\xf3\x13\x73\xc3\xef\x3e\x0a\xdc\x42\x7d\x3b\x8c\xcd\xd7\x5f\x7d\x90\xbe\x12\x91\x52\x3a\x04\x3a\x74\x49\xb5\xa6\x2f\x8a\x22\xc7\x88\x44\xf5\xb3\xa9\x8b\xe9\x4a\x15\xbe\xd8\x56\xaf\x2a\x09\x4a\x58\x07\xd7\x35\x8d\xac\xa9\xa6\x3b\xd0\x82\x85\x77\xaa\x02\x4e\x3d\x47\x5b\x83\x57\x3d\x20\x7d\xb2\xb7\x0e\x47\x97\xd3\xdd\x58\xb8\xda\x6e\xdf\x7e\x52\x25\x19\x9d\x1c\xe7\x32\xab\xdc\x2e\xb7\x52\x8e\xed\x85\x5c\xb2\x76\x71\x66\x88\x1a\xd6\x2c\xaa\xa4\x7e\xb8\x01\x89\x3a\xbc\x76\x50\x2f\xd4\xc4\x5c\x49\xb8\xbb\xd4\xaa\xa9\x6e\x37\xf2\xbd\x4e\xf6\xfa\x82\x45\x13\x63\x54\x83\xfa\x87\x80\x81\x76\x88\x7b\xed\xc5\x65\x8d\xa2\x18\x2c\xf1\x6a\xe5\x6e\x57\x46\xb2\xb6\xce\xaa\x2c\xd7\xe0\x26\x07\x20\x2a\x23\x71\x4d\x58\x5b\x24\x85\x36\xc7\xa6\x80\x3e\x52\x42\x05\xd8\x71\x04\x4c\xea\x45\x6c\xf4\x02\x5e\xe1\x58\x6d\x28\x6e\x05\x97\xf5\x55\x44\xae\xff\x2b\x14\xa8\xed\x0e\x4c\x9a\x72\x2d\xd8\xe6\xb4\xb0\x13\x5f\xf7\x88\x19\x79\xd6\x79\xfd\x96\x1d\xb2\xa3\x7d\x46\x93\xaf\xf3\x32\x4c\x64\xab\x91\xc6\x1a\x0d\xa2\xa5\x95\xa5\xf1\x9a\x65\x42\x6d\xb0\x98\xe7\xf2\x7d\x93\xd8\x07\x11\x91\x6a\x1f\xa0\x79\x4b\x2c\x91\x2b\x64\x09\x69\x78\x80\x1a\xef\xf1\xf3\xb9\x92\x3c\xbe\x44\x79\x7e\x81\x26\x1f\xad\xf8\x8e\xaf\x56\x91\xb7\x80\x74\x5a\xe4\x4a\x4a\x06\x46\x54\xf2\x72\x08\xd8\x6c\x19\x49\xff\x79\x5e\x05\x83\xc8\x9f\x3c\x01\x68\x94\x8f\x1d\xe3\xb5\x68\x57\xdd\xb1\xfe\xb1\x45\x8f\x6b\x83\x35\xa9\x3a\xd3\xa9\xaa\x64\xc3\x34\x49\xb5\x91\x63\xc6\x75\x5c\x01\xad\x78\x96\x7d\xca\x88\x1b\x2d\xc4\x2c\x1b\x71\x22\xc6\xd2\x2d\x67\x5d\x1c\x51\x9b\x79\xa7\x37\x45\x62\xf7\x3f\xb7\xe9\xca\x43\x83\xda\xcb\x14\xe2\x3d\x8a\x2f\x33\xc6\xe9\xed\x70\x86\x32\x12\x42\x92\xe0\x38\x2f\x8a\x8f\x8b\x79\xc4\xdb\xd6\xaf\xce\x99\xb9\xc4\xfc\x90\x73\x9a\x5d\x2c\x38\x8e\xc2\x2c\x55\x8e\xe1\xdc\x4a\x53\x47\x7c\xbc\x55\x59\x97\xb1\x5e\xb1\xe0\x82\x6d\xf9\xd6\x9d\x87\xd3\x62\x22\x7f\x74\x2a\x14\x45\x93\x3d\xbe\x5a\xed\x91\x78\x52\x10\x8e\x32\xc2\x22\x2e\x38\x07\x99\xda\x63\xb5\xc2\xee\xeb\x8e\xc1\x30\xdd\xee\x1e\xdb\xd9\xeb\x8b\x14\x74\x86\xf2\xec\x57\xdc\xdb\x22\xcf\x72\xb5\x98\xbf\xe5\x20\xc4\xbf\x27\x6e\xfa\x37\x4d\xdc\xf4\xa8\x77\xd8\x63\xd9\xbb\x6b\x0a\x8e\x9a\x1f\xbf\x31\x4f\xa8\x44\xa6\x46\x74\xad\x84\x18\x32\x5f\x00\x85\xcb\x12\x2e\x09\x9a\xe1\x21\xd6\xb2\x6e\xbe\x83\x15\xc2\x2f\x0c\x7d\x19\x24\xf0\x40\x1b\x14\x0b\xd6\x5a\x46\x28\x0f\x8c\x8d\x89\xab\xa0\x42\xb5\xb0\x94\x87\x79\x2e\x93\x93\x6e\x59\x3f\x96\x5d\xe4\x1b\x23\x6e\x3d\x76\xca\x4d\x29\x0b\x7a\x4e\x12\x22\x3d\x49\x4e\x55\xf7\xcf\x81\xd6\x15\x11\x19\xc7\xf3\xec\x76\x8e\xbb\x5d\xb2\x26\xa6\xa7\x00\xfb\x16\xf9\x6d\x9a\x1f\x4e\x33\x5e\xd0\xfd\x3c\xdb\x15\xa4\xff\x9e\xf8\xe1\xeb\x27\x7e\x68\x49\xc1\x21\x77\x8d\x34\x25\x39\xa4\xd9\x49\x1d\x36\xd8\x86\xbb\xc1\xc6\xa9\xf0\x55\x26\xf8\xe7\x52\xaa\x01\x14\xf7\x20\xcd\x70\xe9\xe7\x89\x3d\x64\xae\xb6\x18\x99\x66\xde\xd9\x8b\xdb\x33\x74\x29\x8f\xae\xa4\xc4\x4d\x11\xe0\x0b\x2c\xb4\xdb\x3d\x7f\x59\xa4\xf8\x75\x26\xf6\xa4\xe3\x44\x61\x10\x14\x25\xa6\x3f\xe3\x7c\x8e\x69\x14\xaa\x93\x1e\xd2\xc5\xc5\xad\xc7\xb2\x55\x26\x0a\xb3\x6f\xa5\xdb\xb3\x71\xa8\xe0\x11\x8e\x42\x85\xcd\x42\x00\x60\x91\xb4\x32\x73\x99\x46\x7a\x03\x09\xd0\x19\x9d\x54\x91\x87\xf6\x27\x45\x8a\x67\x72\x6c\xfb\xb3\x22\xc5\xfb\x36\xde\x33\x83\xe1\x7e\x15\x28\x9a\xc1\x30\xfe\x17\x0b\x05\xa6\xec\x90\x18\x2d\xc4\xad\x46\xe9\x6b\x99\x35\x16\x32\x00\x8b\x03\x14\x81\x61\xd4\x1a\x0e\x11\xbc\x49\x3e\xea\x8f\x61\x98\x17\x28\xad\x4d\x0d\x45\xd2\xc9\xb4\x0a\x53\xa4\x77\xda\x84\x28\x22\x1b\x23\x10\x8a\xc3\xb2\x7f\xb1\xc8\xf2\xb4\x6e\xc2\x68\x9d\xcd\x55\x1e\x7c\xcc\xdb\x6f\x7a\x3a\xcc\x50\x56\x10\x1f\x8f\x2d\xd8\x14\xd1\x7a\x4f\x60\xb4\x9e\x89\xbb\xe7\xf1\x50\xff\x26\xb0\x13\xbb\x7f\xf0\x2c\xeb\xa5\xb5\x26\x45\x8a\xe7\xc0\xef\x36\xa6\xd0\xeb\x5a\xb4\x73\x60\x3f\x1d\xd1\x51\xea\x38\xf2\x64\x29\xd5\xe2\x2a\xcc\x94\x4c\xbb\x04\x2f\x31\x97\x09\x98\xda\xaa\x01\xc9\xd9\x8a\x52\x52\x2c\x75\x24\x2a\x7a\x88\x6f\xd4\xed\xee\xd5\xf1\x02\x07\xdd\xae\xe0\xe1\xa5\xbe\xd4\x30\xc1\x56\xb7\x13\x8a\x11\x84\x90\x2b\x9d\xbf\x14\x8e\xd5\x9b\xae\xf7\x2f\x4a\x4b\xbe\xdd\x67\xc9\xc5\x46\x12\x0c\x8a\xf1\x47\x60\x9c\x60\xdd\xa4\xb2\x2a\x68\x0a\x36\xac\xa5\x90\xa5\xc3\x20\x4a\x78\x44\x56\x2b\x35\x4b\x00\xf3\x04\x89\xcb\x55\x24\x68\x34\x18\xc3\x2c\xa1\x82\x7a\x93\x26\x2d\xda\xb6\x49\x75\xa4\x82\x11\x2a\xf3\x05\x16\xe5\x55\x38\x11\xf1\x4a\xfa\x72\xe7\x20\x76\xc6\x20\x79\x21\x99\x34\xa3\x54\xa1\x05\x4d\x73\x62\xde\x11\x80\x13\x9f\x46\x79\x11\xf3\xe2\xbf\x4e\xdf\xbe\x39\x30\x0f\x11\x18\x56\x5e\x10\x0b\xbd\x8c\xc0\x7e\x94\xaa\x6d\x97\x01\x9b\x80\x38\x23\x93\x7c\x91\x62\x16\x15\xc0\x24\x28\x73\x12\x74\x58\xe0\x54\xc0\x30\x30\x17\x33\x48\x0b\x2c\x0d\x17\xf1\xa7\x8c\x09\xa0\xd3\x51\xc8\x30\xd5\x4b\x96\x30\x98\xca\x59\x4c\x13\x77\x34\x85\xec\xbf\x7e\x0c\xa6\x60\xb5\xaa\xf2\x97\x49\x87\x8c\x76\xb0\xdd\x51\x31\x96\xa2\xa2\x6e\x57\x3b\x71\x24\xaa\x6c\xac\xd1\xb7\x43\xee\x18\xb5\xea\xb4\xdb\x8d\xa6\xc9\x48\xc7\xa4\x9a\x25\x2c\x9e\x5c\xe1\xc9\x47\x9c\x1e\x84\x82\xa7\x53\x6b\x10\x9a\xb8\xb0\xfa\x67\x67\x3a\x9a\x8d\x23\x66\x52\xa3\x56\x67\x72\x01\x0b\x38\xad\x65\x5b\x93\x91\xe3\x74\x93\xab\x55\x28\x8d\x9c\x12\x5d\xb3\x3e\xa2\x6e\x57\x06\x13\x5e\xf7\xf9\xa0\xde\x8b\xe9\x7c\xd8\x7c\xad\xfb\xaa\x87\x9f\x35\xc1\xdb\x22\x29\x88\x62\x78\x8d\x8f\x4a\x75\x8c\xd6\x9b\x6e\xe3\x98\x16\x4a\x88\x66\xc5\x27\xac\xdb\xad\xd7\xf6\x14\x89\xcc\x0d\x9d\xe4\x18\xb5\x3d\x18\xee\x9f\xeb\x74\xc3\x48\x0f\x74\xdc\x26\x8c\x28\xa6\x09\xd6\xf6\x3b\x7a\x90\xee\x37\x41\xcb\x55\xa3\x2f\x21\x5b\x5c\xcc\x7c\x7e\x3c\xf7\x1f\xa4\x3f\x78\x35\xae\x5d\x76\xd5\x2b\x17\x43\xed\xd4\x5f\x44\xf5\xe5\x05\x12\x84\xfe\x43\xed\x69\x41\x99\x0f\x98\x21\x0b\xbf\xcc\xde\x3f\x64\xcb\x4d\x1b\x82\x1a\xac\xce\x92\xee\x00\xa5\xa9\x04\x02\x5b\x3b\xf0\x36\x6d\x6a\x8b\xa6\xcd\xb3\xd7\x7d\x43\xc0\x42\xdf\x4c\x8d\x72\x53\x74\x36\x64\x52\xbf\x79\x85\xbc\x6b\x52\x45\x7d\x14\xa5\xca\x2a\x5f\xaa\x5a\xe8\xc4\x3c\x28\xea\x32\x07\x30\x8f\xe5\x65\x49\xf4\xdf\xea\x7d\x59\x56\xbe\xd8\x0e\x83\x90\xb1\x53\x74\x9d\x91\xcb\xa4\x9e\xd0\x2b\x92\xe0\xd5\x7e\xf5\xb9\x47\x59\xec\x64\x4b\xe9\xd0\xb1\xac\x91\x13\xca\x71\xeb\xb5\x23\x50\xce\xe1\xa4\x72\xec\xa6\x00\x6e\x4e\x8e\x2f\xe8\x28\x4c\xae\x33\x5a\x90\xd9\x63\x9b\x9a\xad\xa3\xa2\x7c\xc4\xd0\xce\x09\x8d\xef\x4d\xe0\x2b\xed\x8f\x8f\xe6\xb9\x9b\xe0\x14\xfa\xd2\xb1\x92\x38\x2f\x26\x28\xd7\xb1\x04\xc4\x49\x3f\xe1\x78\xe6\x98\x04\xe9\xe4\x30\xfc\x40\xf5\x34\xe4\x82\x78\xa2\x5e\x96\xa6\x22\xcd\x25\xe5\x80\xaa\x14\x76\x82\x2d\xa8\x45\xca\xb3\x51\x2f\x4c\xd8\x20\x1d\xb5\xc2\xc4\xd9\xf9\xf9\xec\xec\xdd\xf9\xbb\xf7\x6f\xcf\xde\xbe\x7c\xfb\xca\x86\x86\xa8\xfc\x11\xba\xdd\xa8\xee\xcc\xef\xa4\x89\x20\x86\xdb\x13\x6c\xa7\x1c\x28\xe1\x34\xc3\x62\x9c\xb7\x73\x1c\xc9\x2c\x98\x0b\x2a\x38\xd2\x06\x2f\x53\xa5\xdd\xd1\xf3\x10\xf3\x8e\x95\x3b\x03\x2f\xa8\x12\x3e\x48\xe1\xb2\xa2\x02\xc1\x6a\xb5\x2c\xb5\x86\xc3\xd6\x5d\x96\x65\x29\x68\x20\x1d\x11\xe3\x67\xa9\xa2\xe7\xc5\xa4\xc8\x57\xab\xf0\x8a\xf3\xf9\xfe\x20\x1e\x84\x9d\xd6\x64\x5f\x1f\xfe\xf3\xfc\xe5\xdb\x37\x6f\x8e\x5f\x9e\x9d\xbc\x7d\x73\x1a\x0e\xf5\xc2\xb0\x84\x46\xfe\x55\x01\x70\x5d\xc4\xd7\xab\xa7\x21\x18\x7a\x3f\xfc\xb2\xe6\x03\x9b\xa7\xb7\x21\xd0\xeb\x6c\x43\xce\xe9\x05\xfd\xa1\x2c\x4b\x8f\x45\x3c\xb1\x7b\x17\x3b\x17\x51\xef\x63\x8a\xaf\x71\x5e\xcc\xe5\xd5\x1c\xea\xd4\x48\xe8\x52\x80\x0e\xf5\x6b\x52\x5c\x63\x69\xf7\xaa\x7e\x72\xcc\x78\x38\x74\x65\x83\x11\x49\x04\xf8\x29\x3e\x66\x36\x17\xee\xf3\x70\x53\xa2\x5d\x41\x76\xe0\x72\x6d\x52\x00\x6c\x84\x02\xba\xb1\x24\x04\xa5\x2f\x15\x72\x95\x1d\x1b\xb2\x24\xa2\xc9\x53\xb8\x4d\xe6\x53\x39\x81\x90\x84\xff\xa7\xa5\xb7\x17\x8c\xea\x67\x4c\x6f\x0f\x20\x4a\x98\xca\x27\x2e\x60\xa1\x39\x71\xa8\x0e\x2d\x0e\x5f\xbe\x3a\x3d\x3f\x7e\x73\xf8\xe2\xd5\x71\x38\xc4\x71\xfb\xed\x51\xb2\xb7\x27\xb3\x09\xca\x40\xc2\x91\x92\x81\xc9\xb0\xea\x35\x82\xda\x8d\xec\xa3\x1b\x79\x73\xfa\xee\xf0\xe5\xb1\xa7\xf5\xfa\x87\xbb\x75\x60\xee\x17\x1e\xa1\x71\x92\x57\xca\x01\xb8\x2c\x01\x18\xe1\x71\xa5\xc1\xc3\xe3\xd2\xb1\x00\x6b\x39\x7f\x28\x43\x67\x3f\x08\xfd\x70\x72\x7e\x74\x72\x2a\x06\x67\x43\x96\xe9\xcb\xd6\x2e\x70\xf8\xe6\xe5\xcf\x6f\xdf\x9f\x9f\x1e\xbf\x52\xe0\xc7\x40\x5c\xdf\xa4\x58\x24\x0e\x79\xbf\x39\xb5\xd5\x2a\x33\x31\xc1\x36\x04\x4b\x1b\x5a\x1b\x7f\xee\xab\xd1\x00\xfb\xdb\x81\xa4\x6e\x2e\x93\xcd\x15\x2a\xa4\x7d\x03\x7a\x65\x4a\xda\xbd\x85\x94\xf0\x88\x64\x3e\xb7\xea\x38\x9b\x46\x5a\x68\x66\xc1\xf0\x28\xac\xc0\x49\x3c\x93\xd7\x76\x3f\x8a\xbf\x07\xff\x3b\x92\xff\x8f\xf7\x81\xca\x23\x1b\x0d\x0c\x7e\x1e\x85\x21\x14\x94\xe0\xe6\xd9\x29\xe1\x70\x6f\x5e\x14\xf9\x37\xad\x0c\x71\xed\x3f\xbc\x92\xa7\x3a\x65\xa4\xc3\xf4\xdd\x5b\xa5\x6c\x13\x18\x2d\xd1\xe4\x97\x45\x46\x1d\x06\x43\x46\x50\xac\x08\x0a\x01\x68\xa9\x93\x36\x80\x77\xbb\x06\xd4\xfe\xc4\x0f\x70\x44\x6c\x4e\xf6\x21\x13\xfc\x69\x8e\x91\xeb\x36\x6e\xc8\x2d\x48\x93\xde\x40\x2a\xe9\x93\x16\xeb\x8f\x0f\xf0\x10\xc7\x59\x0a\x49\x5b\x07\x29\x65\x35\x5e\xf6\x4b\x52\x6c\xe9\x81\xfe\x1b\x01\xd9\x84\xd4\x84\x48\x2d\x31\x01\x25\x80\xf2\x94\xd1\x2a\x46\xaf\xce\xdf\x42\x55\xea\x98\x12\xce\x17\xf4\xb2\xc6\x5b\x59\x25\x06\xa4\xc9\x68\xfc\x5c\x50\x89\x7a\x7a\xcf\x01\x55\x8b\x21\xf3\x11\x56\x76\xf7\xd2\xff\xbe\xe6\x29\xcf\xdd\x40\xb1\xca\x99\x45\x2e\x8a\xcc\x63\xb8\xf1\x3a\x5e\x21\x76\xaa\x02\xdd\x7f\x29\xdd\x53\xbf\x49\x85\x4a\x83\xe8\x8a\x56\xa1\x19\xcf\x26\xc8\xa4\x84\xbb\x41\x94\xc8\x8f\xc4\x11\xf9\x60\x4d\x99\xbc\xb8\x8d\x42\x33\x7a\x0e\xaa\xd8\x1c\x2e\x6a\x11\x35\x07\x16\x87\xfe\x24\xfd\x35\xd6\x2e\x86\x94\xe0\x33\x19\x71\xb5\x97\x4d\x7b\x62\xdf\xff\xc3\x9d\xa9\x3f\x5f\x5a\xd1\xe6\xab\xf5\x09\x8c\x77\x8e\x4c\x64\x96\x2c\xa2\xa3\xfe\x18\x08\x68\x7f\x20\x9e\x86\x44\xbe\x80\x6c\xdb\x5d\x10\x0c\x03\x9a\xe4\xfb\x19\x53\x7a\x85\x1e\xc3\xf4\x1a\xd3\x9e\xf6\xfb\xff\x86\x61\xb9\x57\xa3\x6d\xc8\x0a\xe5\xae\xa8\x52\x5c\x54\x4f\xa3\xfe\xb8\xf6\x23\x4e\x31\x47\x59\x0e\xba\x5d\x09\xc2\xda\x5f\x2c\xe6\xc4\x55\x9c\x8a\x90\xce\x27\x81\x2c\x18\xcc\xd0\xc7\x8c\x5c\x4a\x17\xd6\x61\x40\xe7\x93\x61\x30\x41\xe4\x3b\x1e\x08\xb6\x2f\x98\x61\x7e\x55\xa4\xc1\xe1\xcb\x57\xe1\xb6\x0d\x50\x2f\x1f\x75\xb5\x7f\x3e\x3e\x3c\x3a\x7e\x7f\x7a\x7e\xfa\xdf\xaf\x5f\xbc\x7d\x95\x54\x2f\x8e\x4e\xfe\x76\x7c\x7a\xe6\xbc\x38\x79\x73\x74\xfc\x4f\xb7\xc0\xe1\xd9\xe1\xcb\xe3\x37\x67\xc7\xef\x9d\x97\x6f\x0e\x5f\x1f\x4b\x82\xd4\xb0\x16\xbe\x4f\xe1\x3f\x7b\x2f\xd5\xf4\x04\xb7\xce\xe6\x68\x82\xc3\x8e\xb7\xe1\xf0\x53\x4f\x2f\x44\x8a\x38\x9a\x60\x99\x81\xbd\xd3\x1c\x53\x55\x4a\x05\xc4\xee\xb4\x66\x51\x95\xd0\x91\x47\xae\x10\xbb\x72\xcb\xe9\xe9\x87\xe7\xe7\xaa\xdc\xf9\x22\x3b\x17\x4b\x7e\x7e\x85\x51\x8a\x29\x3b\x3f\xdf\xba\x39\x6a\x1f\x1f\x75\x73\xde\xbd\x95\x3b\x70\x74\xfc\xea\xf8\xec\x38\xc1\xf1\xbb\x0f\x67\xd5\xba\x8a\x1f\xe1\xbb\x0f\x67\x62\x1a\xba\x44\xa8\xfe\x8a\x37\xb2\x6a\x28\xfe\xdf\x3a\x70\x8a\x7f\x59\x6c\xcc\xa1\xf9\x9f\x62\x54\xf6\x25\xed\xa0\xea\xf6\x57\xdf\x6a\x24\x8e\xc7\xb1\xa7\x66\x6b\xf2\x70\xda\xc0\xe6\x5f\x32\x9d\xe6\xf9\xa7\x2b\x9a\xe4\xfa\x79\x41\xf3\x84\xe9\x67\x75\x7f\x13\xaa\x7f\xea\x8b\x9f\xa0\xc6\xef\xda\xc5\xf8\x3d\xe9\xfd\x43\x93\xde\x23\xb8\x34\x11\xd7\x14\x4d\x39\x0c\xc5\x35\xcd\x94\x83\xe2\xfe\xbf\x58\x41\x42\x18\x7e\xea\x69\x20\xd5\xcb\xd2\x70\x58\x69\x48\xdd\x9d\x83\x61\x50\x59\x72\xd8\xed\x85\xe1\x41\xf5\x56\x0a\x11\x14\xbf\x93\x4d\x6f\x23\x14\x5f\x14\xe9\xad\x74\x5e\xa8\x18\x2a\x77\xb3\xe5\x77\x85\xdb\x4d\x7a\x36\xf3\x69\x54\x1f\xf5\x38\x09\x39\xfe\x64\x1c\x15\x18\xa7\x18\xcd\x42\x15\xf8\xb7\x16\xe3\x9b\x25\x18\x46\xc8\xe4\x6b\xd5\x6d\xad\x75\x9d\x0f\x6a\x5d\xba\x9e\xf7\x27\xed\x44\xaf\xfe\x4a\xa3\xfa\xda\x8d\x6d\x23\xe8\xa2\xa0\x3e\xa7\x7d\x7b\x49\x62\x59\x22\x72\x42\x19\x14\x84\x60\x75\xab\xb6\xf4\xfd\xe9\x8a\xaa\xd4\x9b\x34\x62\x35\x3f\x11\x98\xcb\x77\x32\xe6\x68\x19\x01\xc7\xaa\x9e\x6d\xc3\x52\xec\xf1\x59\xb1\x13\x41\x63\xbc\x39\x7c\x75\x7e\x7a\xfc\xfe\x1f\xc7\xef\xcf\x8f\xdf\xbf\x7f\x2b\x88\x99\xbf\xbe\x7d\xff\xe2\xe4\xe8\xe8\xf8\x4d\x82\xe3\x0f\x6f\x0e\x3f\x9c\xfd\xfc\xf6\xfd\xc9\xff\x1c\x1f\x25\x38\x7e\xfb\xf7\x0a\x01\xbf\xfd\x7b\xf2\xb4\x2f\x1e\x6a\x65\xfe\xd0\x1f\x74\xdc\x26\xfe\xd0\x7f\xd6\x59\xd7\xd5\x0f\xfd\xfe\x86\x69\x67\xec\xaf\x45\xd3\xee\xe7\x73\x50\xd7\x5a\x6e\xbd\x1f\x26\x49\x12\xdd\xdb\x16\xc6\x48\x84\x7a\x83\x8d\xea\xb2\x8f\xf8\xf6\xac\x90\x22\xeb\x6f\xdc\x25\x62\x3f\xac\xa2\xe2\x25\x09\x3f\x08\xc3\x21\x36\x42\x7b\xbe\x71\x8a\x39\x9e\xf2\x1e\xa7\xd9\xec\x9b\x66\x8b\xc2\xf0\xfe\x26\x55\xa1\x8d\x89\xac\xf2\x7f\x19\xee\x87\x83\x03\x1c\xb3\xc5\x05\xe3\x34\x32\x24\x0c\x18\xe2\x4d\x8b\x35\xcb\x48\x36\xcb\x7e\xc5\xaf\x8b\x14\x7f\x66\x99\xe0\x16\xb5\xc9\xee\x91\x56\xdf\xe0\x1b\xa9\xb4\xf1\x6b\x78\x96\x27\x47\xc3\x5a\x85\x93\xa3\x10\x40\x69\xca\x55\x7b\x2d\xde\x84\xe2\x20\x6d\x5c\x1e\xb1\x2c\xfb\x86\x6a\xfb\x9d\x44\xff\xf7\x73\x55\x58\x2f\xbb\xd9\xd9\x55\xc1\x9e\x50\x8c\x26\x57\x95\xa7\x95\xbb\xff\x6c\x84\xc7\xbf\x93\xa6\x8f\x4b\x9a\x8a\x35\x95\x3e\x1f\x0c\xd3\x4c\x7a\x5f\x0d\x95\x04\xdb\x95\xf6\x08\xe2\x91\x6d\xba\xc1\xa4\x20\x3d\x3c\x9b\xf3\xdb\x9e\xb4\xd2\xfd\xcc\x00\x6e\xad\xa8\x2b\xb0\x21\x88\x42\x69\x4e\x70\xb0\x2c\x5b\xc1\x09\x3f\xe7\x7d\xea\xd4\x96\x56\xba\x64\x6e\x5a\x35\xed\x64\x9a\xea\x44\xa6\xdf\x34\x26\x35\xb1\xfa\xee\x8d\x4e\x37\xa4\xe4\x25\x6b\x1d\x9d\x76\x6b\xda\x55\x64\xb9\x79\x0c\x70\x23\xb3\x43\x2d\x9f\x00\x8e\x08\x28\x21\x01\xdb\x82\xac\x2a\x43\xce\x9e\x38\x59\x5f\xea\x60\xd7\x31\x5a\xcb\x6c\xc2\xc5\x0e\x3a\xea\x1d\x1e\x11\x15\x71\xdc\xe4\x8d\x87\x5c\xea\xb7\x37\x4e\x2c\xbb\xbc\xfa\xcd\x93\x70\xca\xbf\x57\x59\x46\x19\x62\xad\x42\x35\x39\x62\xfc\xc4\x92\x75\x49\x92\x90\x8a\xb4\xeb\x43\xb2\x85\xaa\xa3\xc5\x82\x67\xe4\x72\x9f\x53\x44\x58\x26\xe6\xba\x3b\xf9\xf2\xbb\x8f\xd3\xb7\xe4\xe3\xf4\xe0\x9c\x18\xd0\x47\xf9\xd4\x49\x1c\xcd\x51\x6b\x0b\x3f\x65\x53\xc7\x8c\xeb\x79\x28\xce\x12\x1e\x3a\x42\xa1\x50\x67\x2a\x40\x30\x4f\x14\x2d\x09\x0b\xe3\xb6\x87\x92\x22\x9e\x23\x8a\x09\x7f\x0e\xf2\x24\x37\x82\x1f\x1a\x21\x81\xe1\x61\x91\xa0\xca\x54\x95\xe2\x6b\x4c\x65\x34\x6a\x12\x61\x69\x49\xb7\x5a\xb9\xc2\xa7\x10\xe6\x02\x4d\xb5\x52\x84\xd6\xf2\x44\x54\xb9\xa0\x63\x22\x35\x19\xdd\x2e\x8e\x19\x47\x94\xb3\xff\x9b\xf1\xab\x28\x4c\x27\xb1\xcc\x88\x80\x93\x50\x15\x88\xad\xf4\x0a\x03\x48\x92\x91\xa9\x38\x36\xaf\x09\x00\x70\x54\xfd\x94\x2f\x9a\xa9\x45\x1f\x9a\xa8\xc4\xb0\xb6\x62\xb1\xd0\x4c\xaa\x61\x56\xab\xd1\xb8\xc1\xd3\x90\xf6\x34\x05\x1c\x3d\x10\xff\x0d\x75\x5d\x36\x22\x63\x69\xc0\xa6\x17\x73\x17\xb0\x70\x83\xf2\x8f\x5f\x9c\x14\x02\x4b\x5e\x4b\x58\x82\xc7\x32\xb5\x57\x2c\x06\xb3\x3e\x41\xad\x9b\x4a\xb9\x53\x0f\xb8\xd8\xa6\x41\x55\x2a\xdb\xf0\xbc\x98\x73\xe9\x75\x25\xcd\x1d\x4c\x56\xb5\x84\x8f\xe8\x38\x36\xdf\xea\x6d\x8d\xe8\x18\x38\x7b\x18\xd5\x24\xe6\x8d\x3c\x2b\x23\x3a\x1e\xab\xa8\xe9\xf2\x66\x44\x14\x22\xa9\xbe\x75\xb3\x6c\x54\x32\x4b\xf5\x94\x2c\x4d\xbf\xc3\xe5\x1c\xf1\xab\x61\x18\x96\x2a\xf7\x92\x9c\x3d\xdf\x65\xcf\xb2\x3c\x9d\x20\xfa\xb8\x0a\xae\x1d\x49\x58\xb5\x05\x7b\x03\x69\xa8\x48\x12\x49\x85\xbb\xbc\x34\x07\x76\x5d\x63\x31\xbd\xca\x90\xe9\xfb\xd0\x84\xfe\xa0\x60\x59\xb1\x94\x9b\x0e\x29\xc3\x88\x4e\xae\xf6\x15\x77\xfb\xed\xa7\x32\xf2\x46\x32\xb9\x3f\x5d\xd0\x4e\x70\xe5\xa3\x49\x2b\xdb\x30\x19\x31\x45\x4f\x31\x0c\xd7\xf9\x83\x59\x9b\x7c\xeb\x4a\x31\xcd\x48\xfa\x68\x5e\x21\xd6\x7e\xca\xba\xe8\x2c\x64\x0e\xd7\xb5\x36\xba\x2d\x9b\xa7\x6e\x77\x57\xbb\xdd\x12\x40\x5e\x8f\xad\xad\x3c\x8c\xbc\x16\xbc\xdb\x65\x4b\x52\xa8\xb1\x64\x32\x94\x00\x28\xa1\x5d\x28\xe5\x99\x22\x4e\xa2\xdf\x17\xe4\xfe\x2e\x00\x8d\xc5\x92\xa6\xe7\x4d\x3f\xc1\x03\x3e\x14\xcc\xfc\xda\xbc\x78\x72\x31\x2e\x2f\x31\x8d\x42\xe5\x6f\x1a\x42\x13\x2b\xc1\xc4\x78\xd6\xcb\xf2\xaf\x22\x23\x51\xf8\xbf\x24\x04\x3a\xf0\xaf\xca\xfd\xa4\x1d\x5e\xb6\x30\x18\x3a\x26\xf1\xbe\x74\x0d\xe8\x6d\x4d\xe1\xf0\x0d\x5c\xc7\x87\x90\xe4\x3a\xba\x96\xeb\x07\x71\x7f\x93\xc2\xba\xaa\xeb\xfe\x39\xf0\x2a\xbb\x5b\xc8\x92\x4a\xf1\x86\x61\x38\xb4\x79\x13\x96\xc6\xe3\xdd\x13\xad\x8a\x5b\x57\x8e\xaa\x32\x03\x15\x05\x04\xda\x99\xb1\x48\xb7\x1b\x91\xe4\xbb\x30\xfc\x0e\x68\x80\x4f\x05\x43\xaa\xc0\x38\x02\x4b\x92\x84\x61\x05\xca\xb5\xff\x56\xad\x73\x9d\x53\x5e\x13\x94\xb4\xe6\x1a\xa6\x98\x56\x13\xc4\x4d\x76\x40\x13\x81\xba\xab\x0e\xa8\xec\xdc\x1a\x3c\xc7\x6c\xe3\x0c\x20\xb5\x21\xa9\xda\x8b\x60\xdb\x50\x05\x36\x2d\x44\x09\x51\x9e\xaf\x49\x78\xe5\xe1\x7e\xf9\x1a\xee\xd7\x46\x81\xb6\x38\xd0\xe9\x0e\x18\x71\x02\x31\xbc\x9c\x39\x0e\xa0\x23\x08\x8b\xc4\x89\x5e\x50\x89\x60\x0d\xc3\xbc\xf1\xaa\x2e\x66\x6f\xa7\x1f\xc8\x15\x46\x39\xbf\xfa\xfc\xba\x1d\x0b\x87\xd6\x3b\x4e\x38\x14\x02\x87\xc6\x16\xd2\xba\xe6\x59\x5b\x4a\xb1\x56\xab\x95\x35\xa6\x54\x9c\xee\x93\xc1\x10\x97\xb0\xbf\x91\x98\x15\x9c\x58\x8e\x78\xf6\xeb\x67\x87\x48\x9a\x58\xbf\x37\xbc\x5f\x87\xd3\x42\x3d\x05\xdc\x73\x58\x92\xcd\x92\x11\x9e\x4d\x3e\x62\xba\xaf\xec\xac\xee\x16\xc3\x4f\x86\xfd\x6b\x06\xec\x73\x65\xfb\x76\xa2\xe4\x37\x66\x28\x5a\xb7\xf5\x71\x92\xca\xd0\x6f\x32\xa9\x4c\xf6\xb5\x93\xca\xb0\xcf\x61\x06\x64\x5b\x47\xdf\xb2\xc1\x95\x1d\x65\xde\xd4\x75\x75\xbb\xa8\x91\xf2\x02\x12\xf9\x0e\x12\xe0\xda\x93\x15\x2e\xe5\xb9\xc7\x57\x2b\x93\xfa\x64\x2f\x49\x88\x0c\x01\xe1\x4b\x12\x72\xd0\x90\x80\x7d\xb9\x8c\x4b\x11\x06\x43\x5e\x0d\x3f\x73\xe0\x40\xf6\x35\x12\x0a\x2d\x7e\x83\xc9\x54\x26\x2a\x06\xa6\x9d\xe3\xa4\x96\x34\x69\xf2\x95\x92\x26\x9d\xdd\x60\x4c\x12\x1c\x9f\x49\x9c\xe2\x8a\x60\xd2\x35\x06\x83\xc6\x7b\xe5\xde\x21\x5b\x06\xf8\xd9\xfe\x1f\xfb\x9d\xca\xf9\x4b\x5b\x06\x46\x3c\x29\xd4\x8f\x4c\xa6\x43\x30\xe9\x31\x64\x6e\x1f\xcc\xdf\x8b\xbd\x20\x82\x6f\xd1\x35\xe5\x21\xb1\x4e\xe2\x50\x5c\x56\x6d\xd2\x25\x10\xe4\xb6\xfc\x2b\x2a\xf8\x88\xce\x8b\xa2\x2a\x68\xe6\x49\x32\x45\x95\xc5\x95\xee\xba\xd5\x5e\x3d\x15\x94\x8c\xbc\x70\x42\x38\xa6\xd7\x28\xd7\x56\x6a\x99\xfe\x69\x8c\x1e\xcd\xef\x44\xd0\xb2\xa6\xa8\xc7\x7c\x2b\x16\xc3\x89\x80\x4c\x79\x6f\x46\x91\xaa\x44\x8f\x9e\x59\x6d\xec\x59\xa6\x70\xc1\x65\x04\xe0\x74\xcd\x76\x1a\x4a\xcd\xb3\x1f\x64\xe3\x7e\x88\x13\x23\x83\x6e\x0b\x20\xb8\x61\x4f\x64\x38\x9d\xd1\xb6\x59\x38\x61\x00\x75\x6d\x75\x22\xff\x46\x8b\xc5\x5c\xe6\x81\x68\xbf\x8e\x75\x73\x91\x20\x95\x72\xcc\x71\xe0\x2b\xa5\xd6\x60\xc7\xd3\x71\xce\xf5\xac\xcc\x1e\x38\xa7\xc0\x4c\x78\xcb\x49\xa8\xb7\x93\x60\x47\x22\x58\xef\xe1\x12\xeb\x61\x5a\xb3\xc6\xf6\xa7\x36\x05\x1a\x18\xbe\x5d\x8e\xb0\xd9\xa6\x78\xa8\xc2\xfa\x56\x1f\x80\x6b\xb7\xb8\x76\x22\x0d\x0b\x42\x53\xd9\xd6\xcd\xd8\x61\x9e\x5d\x6f\xad\xa7\x8b\x55\x6b\xc7\xd1\x06\x2b\x47\x5d\x5a\xe0\x6d\x13\x5f\xc3\xd9\xbd\x08\x78\xd2\x24\xe9\xeb\x6a\x16\x41\xaf\x87\xf7\x66\xeb\xbe\xd7\x5c\x6d\x5e\xcc\xb7\x8f\x6b\xb0\x66\x5c\xde\x6c\x51\x77\x1a\x9a\xe8\xdd\x3f\x32\x34\xe1\xd9\x35\x7e\x59\x2c\x36\xe4\x74\x0a\xd6\x2c\x57\x55\xb5\x7d\x7e\x75\x31\xdf\x11\x56\xb3\xbe\x14\x9f\x13\xdc\x3c\x2e\xeb\xea\x35\x74\x13\xf6\x90\x5f\xea\x6b\x5b\x91\x30\xbb\x5f\x6b\xa9\x44\xbc\x32\x40\x53\x0f\xc8\x77\xb1\xdd\x12\x16\xd0\x75\x2c\x2e\x9b\xea\x10\x48\xeb\xd0\x18\x6b\xd8\xa4\xeb\x54\x13\x53\x8a\x66\x38\xd1\x9b\x2e\x21\xf5\x84\xaa\x58\xfb\x03\xcb\x8c\x3b\xd0\x24\x63\x87\xfc\x74\xcd\x01\xaf\xdd\x0a\xb7\xf9\x1f\x9d\x14\x5e\xa2\x81\x63\xb2\xd5\x94\xd8\xad\xfe\x93\xb9\xf6\x05\x47\xb9\x7c\x53\xd9\x25\x37\x6f\x8b\x0f\xd6\x7a\xd2\x0d\xdb\x7d\x8e\x40\xfb\xc6\xf9\xe2\xd7\x54\xd9\xce\x5a\xb7\xe0\x3e\x5d\xee\x98\xda\x79\xcb\xcd\xad\x5d\x8c\x82\x17\x87\x24\x3d\xe5\xc5\x3c\x6a\x2f\x61\xd5\xd4\x3c\x47\x3e\x84\xe4\x69\xea\x5d\x8e\x6e\x37\x36\xb5\x0e\xd0\xdd\xa7\x2d\x67\xf8\xeb\x6f\x6b\xed\xc8\xe2\x4e\x85\x85\xdc\xc5\xb5\x92\xe6\x58\x83\xb4\x08\x08\x8a\x56\x2c\xa1\x89\x79\xd4\xe8\xf4\x9d\x6f\x49\x1e\xdc\xe9\x6a\xc5\x95\x52\xb6\xd5\xab\xa9\xb6\x33\x78\xe1\x6d\xbc\x89\xa9\x84\x1b\x53\x4d\xa2\x40\xf7\x8b\x0b\x05\xff\x2a\xaf\x8b\x6f\x76\x75\xdc\x57\x5d\x2d\xa3\x2e\x71\x1a\xb1\x30\x61\x6b\x3b\x99\x29\x69\x5b\x31\x04\xd9\x3c\x59\x62\xc4\xf0\xdb\x45\x53\x96\xe0\x28\xb6\xf1\x7e\x42\x21\xf9\x3e\xea\xf5\xf0\xf7\xf8\x7b\xfc\x64\x00\x9e\xf0\xb2\x84\x57\x49\x0a\x2f\xd6\xd1\x73\x56\x18\x01\xd1\x7d\xe5\xd6\x83\xa7\x30\xbf\xaf\xac\x7a\x1e\xeb\x59\x79\x08\x4a\xba\x91\xa0\x7c\x2d\x3d\x48\xa2\x1c\x40\xaa\xb9\xa0\xb9\xcc\xfe\x24\x7f\xe9\xa4\x42\x5c\xff\x54\xbb\x18\x21\xf1\x53\xd2\x41\x34\x9e\x16\xf4\x06\xd1\x94\x41\xea\x12\xa3\xb3\xbb\x10\xa1\xd3\x8a\xa2\xb4\xbb\xcd\x8b\x56\x41\xb9\x47\x4e\x48\x80\x7a\xb6\x2a\x8f\xc3\x3e\x58\x92\x11\x1e\xf7\x12\x19\xb6\x03\x40\x65\xfb\x65\x5a\x89\x05\x00\x8a\x5a\x54\xaa\xe0\xef\x26\x98\xf9\xfc\x52\x1c\x99\x74\x4d\x18\x2d\x0f\xdc\x5c\x2c\x9b\xdf\x34\x53\xc7\x56\x36\xbe\x3a\x11\xae\xdf\x65\x88\xc5\x71\x95\xc2\x03\xc6\x11\xc7\x23\x3e\x86\x58\x37\xa8\x9f\x9d\x5b\x01\x3a\x55\xa4\x3e\xf1\x45\xab\x3c\x21\x01\x0e\x19\x63\xf6\x64\x2d\x91\x55\x47\x8a\xad\xab\x77\x50\x4d\x4a\xac\x45\xe4\x43\xd5\x4f\x92\xc6\x4d\x03\x43\x0f\x60\x6d\xb7\x0d\x9b\x20\x4b\x43\xc4\x6a\xf4\x17\x68\xf2\x71\xf7\xe1\xf7\x9a\xe3\xf0\x8c\xf5\xa7\xa4\x7f\xd0\x98\x91\x1e\x2c\x5d\x28\xf3\x86\xea\x18\xaf\x27\x4a\x36\x8d\x79\x13\x04\xaf\xb1\x29\x7e\xc0\xea\xee\xbf\x05\xaf\xee\xcb\x64\x69\x93\xe9\xec\x70\xe8\x64\x42\xe3\xfa\xa1\xc2\xe3\x84\x9b\xe3\x22\xaf\x03\x80\x34\xca\x5c\xa9\x1a\x80\xf5\x59\xf0\x1d\x32\xbc\x5a\x08\xb1\x1e\x6d\xe9\x10\x9d\x75\xd2\xd6\x5f\xa7\x89\x0b\x54\x36\x25\xa7\x2f\x09\x9b\xb6\xc2\x7e\xb9\x2a\x1e\xec\xf1\x5a\x3b\x29\xaf\x1b\xa9\x76\x82\xc4\x35\x9a\x56\xca\x69\x2e\x36\x6a\x05\x78\x8e\x1b\x8a\x10\x1b\x8f\x38\xcf\x7a\x4a\xc3\xd7\x33\x31\x24\x1a\x95\x1e\x9c\xc4\x67\x6d\x05\x4d\xb8\x87\x70\x59\x37\x58\xf6\x67\xdc\xb3\xc2\x83\xb2\xdc\x14\x92\x99\x17\xb3\xe2\x92\xa2\xf9\x97\xd3\x72\xd5\x15\x7c\x4a\x38\xfd\x17\xf3\x0f\xb2\xa4\x57\xfd\x40\xc9\x68\xdc\xf1\x04\x6e\xc9\x55\x6c\xdc\x24\xc9\xe3\x37\x45\x6a\xb3\x93\xe7\xf1\x29\xbe\x14\xe7\xd9\x57\x47\x49\x41\x55\x85\xbd\x84\xcb\xbf\x82\x7a\xd3\x55\x92\xa4\xb0\x70\x3d\xca\x21\x07\x1d\xa4\x42\xb2\x2c\x49\x91\xe2\xa1\x2a\x0f\xd3\x4c\x49\xef\x87\x04\x32\x55\x6f\x58\x08\x3c\xf4\x23\xd5\x71\x61\x20\xf9\x89\x49\x8b\x27\x22\x15\x4f\x28\x66\x05\xe5\xeb\xcc\x28\x4c\x6b\x3d\x6e\x1f\xa5\xbe\xaa\x63\x22\x97\x99\x58\x7f\x30\x4b\x5e\x23\x7e\x15\x4f\xf3\xa2\xa0\x51\xb1\xff\xd4\x52\x85\xc5\x4f\xfd\x83\x3c\x29\xfe\xcf\xd3\x03\x34\xca\xc6\xb6\x99\x61\x84\x46\x59\x6f\x50\xbd\x78\x52\xfb\x0c\xf6\x9f\x0e\xa3\x3c\xe9\x43\x9a\xf4\x21\x4b\xfa\x2a\x4f\x93\xfc\xc4\x86\x08\xce\x32\x32\x94\x4a\xf2\x13\xc1\xab\xf5\xfb\xdf\x53\xb0\x3f\xe8\xf7\xa1\x4c\x37\xd7\xf8\x94\xeb\x4f\xe8\x53\xfd\x3d\x93\xef\x37\x6b\x59\x17\x93\x69\x46\x37\xb9\xea\x3f\xea\xc1\x73\xd4\xfd\x95\xe9\xef\x00\xc4\xbc\xf8\x30\x9f\xdb\x80\x5b\xad\x32\x03\xb0\x51\x85\xb8\x98\xa7\x88\xe3\x9e\x8c\x2a\xac\x03\x42\x7d\xf6\x00\x3b\x9a\xb2\x4d\x2c\xca\xa1\x07\xae\x76\x98\x80\x21\xed\x98\x10\xd4\xd3\x8c\xa4\xd2\xf2\xd9\x67\xad\xe3\x5a\x9d\x11\x20\x1a\x2a\xc1\x73\x69\x8f\x26\x0e\x31\x77\x95\x55\xaa\xa8\x9a\xc0\x3b\x5a\x7c\xba\xed\x76\x9d\x88\xdb\xd0\xf8\x0f\x87\x10\xc7\x6a\x15\x0e\xa5\x86\x1e\xe2\x98\xe2\x79\x8e\x26\x38\x62\x70\x00\x47\x7c\x5c\xc5\x37\xe2\xfe\x75\x75\x02\xbd\xef\xa3\x49\xbe\x31\x4e\xbc\x1b\x15\xde\x54\x2c\x28\xfb\x6c\x99\xd4\x96\xd2\xf1\x6d\x24\x93\x93\x99\x70\xb7\xef\x28\x66\x58\x5c\xaa\x68\xaf\x0f\x60\xed\xd3\x2b\x65\x8c\x10\x2d\xc5\x8d\x1a\x94\x60\x0c\xcf\x6e\xe7\x78\xb8\xbe\x7a\xe9\xf8\x10\x93\xad\xab\x93\xc9\x25\x97\xb6\xbd\xf7\x58\x23\x57\xc9\xad\x14\x2d\xfb\x6e\xe4\xd7\x66\xe8\xfc\xc7\x5a\x44\xda\xc8\x3a\xb7\x3c\x95\x61\x43\x1f\xba\xb0\x47\x98\xf1\x8c\xc8\x59\x3e\xb4\xa9\x43\x39\xeb\x4d\xbb\x54\x85\xd4\xb5\x71\x0b\x4d\x38\x18\x1b\xba\xf0\xc0\x4c\xec\xf4\xb1\xa6\xf5\x90\x86\xca\xe1\xb2\x04\x5b\xd3\xbe\xb9\x27\xe5\xe3\xf5\xb7\x75\xf3\xfe\x8e\x6f\x1f\x32\xff\xfa\xc5\xf2\x04\x06\x73\xe7\xa3\x4c\xd8\xbf\xad\xf9\xcb\x53\x5d\x9b\xe4\x5f\x0b\x3a\x43\x1c\x44\x4b\x8a\x2f\xf1\xa7\xe1\xfe\xff\x37\x42\xbd\x5f\x0f\x7b\xff\xd3\xef\xfd\x65\x1c\x55\xcf\xbd\xf1\xb2\x0f\xff\xf8\xb4\x74\xbe\x82\x83\xff\x67\xbf\xbc\x23\xb0\x99\x17\x79\x36\xb9\xfd\xf7\x5b\x93\xc3\xde\xff\xa0\xde\xaf\xfd\xde\x5f\xfe\xb7\x77\x3e\x5e\x0e\xe0\xe0\xe9\x9f\xcb\xbb\xcf\x9e\x16\xf9\xbf\xe1\x79\x68\xce\xfd\xe9\x0f\x7f\xbc\xc7\xdc\x79\xf1\x11\x93\xcf\x42\xd4\xd8\xe0\x13\xe6\xc5\xd2\x4f\x12\x78\xd0\x13\x1c\x8d\xdd\x68\xe9\x9c\xde\x6a\x69\xce\x96\x6a\x3c\xb1\xf9\x83\x6a\xf9\xbb\xa2\xef\x66\x98\xa3\x11\x41\x33\x9c\x84\xdf\x3d\xc1\x4f\xbe\x0b\xc7\xdf\x81\x46\x32\x48\x43\xe4\x00\x48\x92\xa5\x09\x88\xea\xc4\x72\x4d\xf1\xa4\x48\xf1\x87\xf7\x27\x2f\x4d\xc6\x4c\x19\x97\xb1\x61\xf0\xd8\x58\x29\xb2\x7e\xa5\x48\x65\xed\x5f\xd9\x67\x28\xdb\x8c\xef\x5e\x16\x8b\x3c\x0d\x48\xc1\x03\xe9\x39\xa5\xe6\x1a\x4c\x69\x31\x0b\xc4\x4c\x02\x8e\x2e\x83\x9b\x8c\x5f\x05\x62\x4a\x81\x9e\x52\xfc\x9d\x24\x66\xe9\x82\x90\x8c\x5c\x9e\x61\xc6\xd9\x6a\x45\xb1\x8c\xd2\xe9\x2e\x38\x9a\xcf\x43\x60\x71\x9c\x36\xdf\x50\xd9\xe2\xaa\x52\x21\xbc\xc6\x94\x09\x54\x19\x3e\x8d\x9f\xc6\xfd\x27\xb8\xff\x34\xfd\x13\xfe\xd3\x5f\xc2\x12\x74\xfe\xff\x00\x00\x00\xff\xff\x1e\x75\x90\x1f\xdb\xd5\x09\x00") +var _web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfb\x76\xdb\x38\x96\x28\x0e\xff\xef\xa7\xa0\x79\xe6\xa4\xc9\x29\x48\xb6\xec\x5c\x55\xa3\x4e\xb9\x9c\x54\x77\xa6\x93\x54\x26\x4e\xaa\xbb\xc7\xed\xc9\x82\x49\x48\xe2\x84\x02\x54\x20\x64\xc7\x25\xeb\x3c\xcb\xf7\x2c\xdf\x93\xfd\x16\x6e\x24\x48\x82\x37\x49\xbe\xa4\x2a\xb5\x56\x77\x2c\x12\x04\x36\x36\x80\x8d\x7d\xdf\xee\x22\x41\x4e\xc2\x68\x14\x30\x77\x27\x44\xe3\x08\x23\xcf\x0d\x08\x4e\x16\x71\x6f\x11\xed\xc1\x10\xce\x19\xa2\xc9\x5e\xef\x7f\x13\x82\x7b\x70\x1e\xb9\xe0\xd4\x45\x5f\xe6\x84\xb2\xc4\x05\xee\x0f\x68\x76\x8e\x68\x2f\x84\x0c\xea\xb6\x7b\x69\xcb\x33\xe0\x8d\x17\x38\x60\x11\xc1\x1e\x02\xcc\x5f\xfe\x7c\xfe\xbf\x28\x60\x7d\x39\xcc\x3b\x4a\xe6\x88\xb2\x2b\x0f\x01\xf7\xd3\x27\x94\xbc\x21\xe1\x22\x46\x2e\x58\x5e\xc0\x78\x81\x86\xbb\xfb\x2b\x1f\x54\x7e\x10\xa2\x31\x5c\xc4\xcc\x05\x4b\x84\x17\x33\x44\xe1\x79\xcc\x3f\x01\x13\xc4\x86\xe9\x98\xfe\x92\x22\xb6\xa0\xd8\x11\x3d\xf0\xf6\xab\x95\xbf\xf2\x7d\x50\x33\x4f\x18\xc4\xf9\x19\xda\xda\xcc\xe7\x71\x14\x40\x3e\x46\xae\xc1\x8c\x84\x28\x56\x5d\x94\x1f\x87\x41\x11\x21\x00\x03\xea\x2f\xf5\x13\x07\x7a\xfe\xf2\x02\x52\x07\x8d\x42\xef\xd4\xfd\x17\x76\xc4\x7f\xef\x3e\x7e\x70\xf6\x2e\x06\xbc\xd7\xbd\x20\x26\x18\xed\xb9\xc0\x7d\xee\x02\xd5\xc0\x3d\xf3\x77\xd4\x2c\xe1\xa8\x3c\x73\xb4\x02\x68\x95\x8e\x40\x1a\x47\x08\x51\xc2\x28\xb9\xaa\x1c\x83\x34\x8e\x91\x34\x8e\xb1\x98\x87\x90\x21\xd9\xbd\x7e\x6f\x1b\x2b\x69\x1c\x2b\x92\x58\xcc\xd6\xd9\x89\xb0\x83\x9e\x57\xed\x1a\xa6\xf7\x16\x06\xf9\x5d\x13\x10\x3c\x8e\x26\x8b\xf4\xf7\x25\x8d\x98\xfa\x7b\xe5\x0f\xd1\x29\x3b\x1b\x61\x73\xdc\xb8\x79\xa5\x28\x6a\x35\xc7\xb8\x71\x8e\x0b\xeb\x58\x7f\x79\x99\x8d\x15\xe1\x31\xc9\x16\xac\x6e\xb4\x45\xe3\x68\x41\xe3\x68\x71\x94\xb0\xe6\x91\x82\xc6\x91\x42\x49\x12\xf4\xca\x5d\x5f\x7b\x6c\x84\xfa\x49\x1c\x05\xc8\xdb\xf7\xd3\xa3\x3f\xa6\x08\xfd\x86\x3c\xdb\x92\x46\x28\xf1\x10\x58\x52\x78\x39\x54\xeb\x9a\xff\x86\xf9\xab\x95\xef\xaf\x3a\x13\x1d\xa4\xa9\xc5\xe8\x82\x44\xa1\xb3\xbf\xc3\x11\x32\x1e\xa5\x44\xa4\x8f\xbe\x30\x84\x43\x6f\x49\xd1\xaf\x0b\x94\xb0\x9f\x08\xfd\xaf\x05\xa2\x57\xc3\x3c\xb1\xe3\x5f\x61\xfe\x55\x00\xe8\x88\xf5\x23\x1c\xa2\x2f\x1a\x3d\xc8\x0b\x3c\x1f\x2c\xc3\x60\x88\x57\x60\x29\x5e\x0d\xe9\xca\x5f\x81\x42\x97\xef\x51\x40\x68\xd8\xa2\x63\x00\xf9\x5f\xe1\x4e\x34\xf6\x24\xd0\xa3\xd1\x08\xfa\x6c\x4a\xc9\xa5\x83\xd1\xa5\xf3\x92\x52\x42\x3d\xf7\x9f\x64\xe1\xcc\x16\x09\x73\x92\x39\x0a\xa2\xf1\x95\x03\xb1\x13\x85\xae\x9f\xc1\xb5\xf0\x7c\x00\xeb\x21\x3b\x16\x7b\xbb\x0c\x1a\x06\x30\x5b\x6b\x2f\xf6\x7c\x10\x79\xcb\x15\x60\xfd\x17\x47\x1f\x8e\x8e\x5f\xbe\xfd\xf0\xf2\xfd\xa7\xff\xfa\xf8\xf2\xfd\x3f\x3f\xbd\x3b\x7a\x7f\xf4\x06\xc0\x53\xda\xff\xe9\xe7\xf7\x2f\x5f\xfd\xe5\xed\xa7\xbf\xbd\xfc\xe7\x99\x0f\x70\x6e\x9c\x8f\x82\x4e\x34\x8d\x93\x6c\x3c\xce\x0b\x14\x23\xdb\x38\x10\x24\xc6\x38\xc4\xf3\x41\x72\x8a\xfb\x27\xaf\x3f\xfe\x45\x74\xd3\x30\x6a\x52\x1c\x35\x8f\x43\x4e\xc9\xcb\x43\x92\xdc\x90\x70\x0b\x43\x8a\x2b\x63\x58\xbe\x75\xf4\xb9\x9b\x46\x49\x5f\x81\xe5\x59\x2e\x27\x0d\x4b\xdf\x0a\xba\x27\x5b\xad\x7c\xdb\xbd\x66\x7c\x9a\xcc\x09\x0e\x0b\x3b\x27\xfb\x96\x02\xd6\x17\x77\xe4\x5b\x38\x43\xfc\xcc\xee\x64\x27\x70\xdc\x74\x5d\x9b\x57\x71\xc3\xb5\x3d\x65\x6c\x5e\xe6\x49\x52\x82\x84\x6f\xf7\x32\xd9\x80\x2c\xa1\xfe\xdb\x93\x77\x47\xc7\x2f\xcd\xc5\x1f\xa1\x8a\x5d\xa1\x89\x58\xe5\x7b\x37\x0c\xdc\x1d\x6b\x97\x2e\x4e\x5c\x41\xfc\xa8\x85\xf8\x05\x71\x84\x30\x1b\xbe\xe4\xfc\x5f\x3f\xc2\x62\x32\x09\xa2\x17\x9c\x7e\xbb\xf2\xa5\xc4\xb8\x0f\x10\xbe\xa8\x68\x87\xf0\x85\xeb\x83\x31\xa1\x33\xc8\xde\x26\x73\x18\x98\x5b\xd5\x5f\x46\x63\x4f\x6c\x50\x84\x2f\xf8\xff\x3c\xf7\xf8\xe7\xb7\x27\x1f\x5f\x7f\x92\xb0\x9e\x7c\x7a\xf9\xf6\xe8\xc7\xd7\x2f\x5f\xb8\xbe\x2f\xd7\xcc\x75\x77\x47\x23\xf4\x1c\xf3\x53\xc2\x81\x07\xc8\x1f\xca\xe9\xaf\xd4\x20\x2f\x20\x83\x01\xc2\x0c\xd1\xdc\x40\x6a\xc9\xe5\x87\x61\xc0\x3f\x4c\x4f\x6b\xd3\xe1\x99\x07\x7d\xbe\x0b\xaf\x04\xa8\x00\xd2\xc9\x62\x86\x30\x4b\x0a\x1b\x99\x36\x6c\xe4\x80\x10\x1a\x46\x18\x32\xd4\x89\xfd\xac\xdb\xce\xfa\x26\xcf\x37\x28\xdd\xb4\x9a\xf6\x6f\xed\xc2\xb5\x30\x0e\xd9\xec\xf6\x30\x09\x51\x92\xf1\x96\x8e\xf3\x8f\xde\x7b\x89\xe8\xde\xab\x17\x43\xa7\x91\xb3\xc0\x55\x9c\xc5\x76\xee\x79\xdb\x56\x6f\xbe\xe7\xa9\xbc\x8e\x61\x7a\x1d\x93\x11\xeb\x2f\x68\x94\xdd\xab\x58\xdd\xf7\x74\x05\x88\xbe\x57\xe1\xaa\xe3\x26\xe1\x3b\xf3\x77\xb8\x39\x20\x83\x31\x99\xec\x85\xe9\xd9\x4c\xee\xf7\xaa\x1b\x57\x34\xf6\xfc\xae\x6b\x18\x25\x01\xb9\x40\xf4\xaa\x17\x4c\x61\xd4\x7c\x6b\xb5\x5d\x50\x83\x35\x54\x38\xf9\x8c\xae\x12\x0f\xf9\x9c\x27\x54\x4f\x26\x88\xfd\x7c\x89\x35\x96\x4e\xae\x66\xe7\x24\x4e\xf4\x0e\xae\x6b\xc3\xbb\x61\x0f\x1e\x78\x74\x44\xfb\xe3\x28\x66\x88\x1a\xcc\x42\xc6\xc5\x5b\xbb\x78\x81\x92\x80\x46\x73\x46\xa8\x80\xb1\x9f\xdd\x96\x2b\xdf\xf7\x01\xee\xcf\x17\xc9\x54\x91\x50\xc1\x11\xe8\x25\xcf\x64\x05\xca\x71\x3e\x26\xd4\xe3\x90\xb2\xd1\xe0\x7b\xf6\x1f\x29\x9d\xed\xc7\x08\x4f\xd8\xf4\x7b\xf6\xdd\x77\x7a\x26\x78\x11\xc7\xbb\xa3\xb4\xc5\x29\x3b\x7b\x6e\xfe\x18\x2e\x57\x3b\xec\xff\x1e\x3c\xc7\x0a\x2d\x1e\xf5\xc1\xee\xbe\xdf\x1f\x13\xfa\x12\x06\xd3\xfc\xcc\xa0\xa0\xfa\xf4\x94\x9d\xf9\x2b\xdf\x1f\x36\xcc\x30\xb1\xb2\x0b\xf2\x68\x34\x7d\xea\x51\xdf\x1f\x1a\x30\x55\x00\x54\xcd\x8f\x34\x61\x9f\x02\xe6\xf3\x49\xac\xd2\xf3\x63\xa8\x1e\xee\x46\x90\x26\xf7\x89\x0e\x15\x4e\x66\x5e\x07\xd2\xf9\x9e\xaa\xd4\x94\x6c\x87\x62\x25\xcd\x14\xab\x49\x78\xe4\xb7\x15\x4e\x40\x92\x5e\x5a\x91\x90\x21\x41\xac\xee\x2e\x53\x96\x8c\xd6\x91\x25\xb9\xc8\x14\x69\x59\x32\x06\xd4\xa3\x42\x7c\xe1\x5c\x93\xc9\xf2\x79\xd0\xf7\xc1\x32\x95\x36\x93\x55\x91\xa4\x26\x0d\x24\x55\xb0\x99\x39\x3a\x5a\xd6\x4a\x56\xe8\x2a\x11\x9f\x8b\xf5\x83\x44\xbe\x4b\xec\x4a\xbb\xed\x2c\x22\x1c\xe5\x7b\xd6\x04\xac\x48\xdc\xfe\x7c\xf8\xe0\x81\xfc\x6c\x77\x64\xd0\xb5\x43\x93\xae\x1d\x0a\xba\x96\x09\x5d\xf3\xa0\x20\xcf\x19\x22\xd9\xa9\x9b\x6d\x15\xb7\x1f\x10\x1c\x40\xe6\x61\xff\xcc\x63\x36\x69\xae\xf0\xa1\x16\xe6\x6c\x1f\x72\x12\xb3\x02\x64\x54\x27\x0d\x96\x01\x33\xe5\xf9\x3a\xd0\x00\xb4\x00\x57\xfc\xb8\x0a\x3c\xf9\xb1\x04\xd0\x76\x78\x3a\xc8\x33\x74\x1e\x58\x84\x02\xb1\xa0\x5c\x82\x1f\x89\x1d\x2e\x3f\xe1\x67\x8a\xff\x4a\x18\xa1\x88\x9f\x2c\x2e\x23\x2c\x46\x11\xef\x3a\x82\x71\xf4\x1b\xa2\x3f\x71\xd2\xac\x4f\x8d\xab\xfb\x75\x47\x23\x76\x35\x47\x64\xec\xe0\x3e\x64\x8c\x46\xe7\x0b\x86\x92\xe7\x1e\x1c\x99\xbf\x3d\x1f\x90\xd1\x22\xeb\xcc\xc3\x60\xc9\xaf\x29\x32\x82\x23\x0c\x6c\x92\x3d\x33\x55\x34\x80\x01\x22\xf0\xe2\xf7\x03\xc8\x72\x37\x4d\xc6\xe4\xc4\x7d\x71\x10\x3c\x24\xda\xb1\x29\xc2\xd6\x66\xcc\x5b\x00\xa4\xbb\x5b\x01\xf1\x4d\x51\x98\x43\x4e\x84\x13\x06\x71\xc0\xe7\xf5\xe1\x6a\x8e\x04\x29\x51\xa4\x05\x89\x23\xc1\x00\x1c\x9d\x2e\x13\x06\xd9\x22\x19\xba\xe9\x22\xa2\xbe\x7c\x74\x4c\x42\xe4\x03\x16\xb1\x18\x0d\xdd\x0f\x53\xe4\x9c\xc3\xe0\x33\xc2\xa1\xa3\x16\x1e\x85\xce\x65\xc4\xa6\x9c\x16\xa9\xa3\x1d\x22\x06\xa3\x78\x88\xfa\x33\x94\x24\x70\x82\x56\x67\x3b\x8c\x5e\x2d\x93\xcb\x88\x4f\x38\xd7\xef\x32\x80\x09\x72\xf6\x87\x6c\xc4\xc9\x1c\xed\x1f\x9d\x13\xca\x04\x88\x80\x49\x24\x24\xa7\xfb\x67\xea\x8b\x91\xbb\xef\xee\x9c\x53\x04\x3f\xef\x88\xcf\x1e\xee\x0f\xd2\x0f\x3f\x62\xb8\x60\x53\x42\xa3\xdf\x50\x28\xa9\x25\x04\xae\xeb\xe7\x9b\x1f\xa6\xcd\x7f\x22\xf4\x3c\x0a\x43\x84\x2b\xdb\x3e\x4c\xdb\xbe\x25\xec\x27\xb2\xc0\xd5\xdd\x3e\x4d\x9b\x7e\x88\x66\x88\x2c\xe4\x04\xf2\x6d\x9e\xa5\x6d\x8e\x09\x1e\xc7\x51\xc0\xaa\xba\x3b\x38\x48\x9b\xbe\xc2\x17\x30\x8e\xf4\xc0\xba\x99\x3a\x46\x43\x71\x5b\xa7\xa8\xfc\xf3\xe8\xd1\xfe\xfe\x73\xf9\xdd\x09\xa2\x17\x88\x1a\x03\x0c\xf9\x73\xac\x0f\xa0\x7c\xb6\x5a\xc9\x0d\x48\xfc\x25\x1b\x91\x95\xdc\x11\x6c\x05\x7e\x2d\x09\x5c\x06\x97\x02\xa5\xc8\x6d\x68\x8f\x80\x2b\x6e\x3e\x57\x68\xf8\x7e\xad\xb8\x04\xdb\xf4\x20\x3f\x93\xfd\x8c\x23\x1c\x1e\xc5\x71\xe1\x22\xad\xe9\xe1\x27\xf9\x81\xeb\xaf\x40\x50\xa1\x2b\x35\x81\x20\x96\x2e\x4c\x4d\x99\x84\x62\x51\xa1\x0d\x6d\xea\xc9\xd4\xa2\xca\x9e\xc2\x0a\x7d\x67\x53\x4f\xa6\x9e\x54\xf4\xd4\xe9\x92\x8e\x30\x43\xb8\x95\x9e\xae\xc1\xbc\xc6\x85\xe0\xf2\xd3\xac\xfb\xb6\x46\xb6\xc0\x60\x01\x5f\xbc\x7c\xfd\xf2\xc3\x4b\xa5\xaa\xc0\x18\x05\x2c\xeb\x30\xd9\x8a\xc1\x2d\xb0\x18\x8a\xea\x86\x5a\x8b\xb5\x34\x8c\x70\x77\xc3\xcf\x47\xf6\xf9\xfe\x7c\x52\x35\xe1\xe6\xc9\x46\x8d\x93\x8d\xad\x83\x66\xaa\xa7\xfa\xf5\x74\x9c\x63\x18\x4c\x51\xef\x98\x60\x46\x49\x3c\x74\x30\xe9\x89\xdb\x7a\x7b\x86\xbb\x76\x60\xd5\xca\x1a\x5b\x31\xed\x7d\x55\x06\xb7\x70\x53\x83\x9b\xd4\x53\xd4\xe9\xe4\x16\x99\x0d\x8e\x80\x94\xbf\xa6\xcf\xcd\x65\x80\x78\x82\x86\x4e\xca\x87\x50\x7f\xe8\xba\xa9\xfe\x0e\xc8\x31\xee\x89\xe9\x2e\x5e\xdf\x74\x97\xe3\xa2\xbd\xc8\xf3\x41\xd2\x60\x52\xc3\x05\x93\xda\xf2\x84\x2c\x68\x80\xde\x9e\x0c\x69\x5f\xff\x09\x5e\xa0\x84\x45\x58\x50\x72\xf1\x22\xf7\x1b\xa8\x66\x70\x86\xb2\x6f\xf8\x45\x63\xb6\x92\x2f\x0b\x4f\xd4\x97\x9c\x81\x4c\xbf\xe4\x3f\xc0\x91\x98\xcf\x90\xf6\xe5\x1f\x40\x2b\x3f\xe4\x43\xe3\xd7\xaa\x95\xa1\x11\x82\xa8\x60\x00\x8c\x4e\xa9\x61\x8d\xab\xc7\x51\x54\x83\x23\x58\x85\x23\x58\x8d\x23\x58\x87\x23\x58\x87\x23\x68\xc1\x11\xb4\xe1\x08\x56\xe3\xa8\xca\x48\x4a\x72\x38\x82\x9b\xe2\xa8\xc0\x54\x84\x0d\x4c\xc5\xe7\x8b\xb5\xb9\x89\x05\x8b\x38\xdb\x90\xfc\x44\xe2\x50\xa8\x07\x8a\xaf\x3e\xa3\xab\x0f\xe4\x88\x52\x78\x65\xe3\x37\xf8\xc8\x6d\x79\x13\x2c\xd4\x1c\x36\xc6\x04\x40\x69\xf2\xb5\x5c\xa0\x53\x3b\x7b\xf2\xf9\xa2\x92\x1d\xe9\x72\x53\x4e\x2d\xec\x48\xb1\x6b\xc7\xe1\x77\x22\xc2\xac\x27\x76\x91\xc3\xd0\x17\xb6\x37\x8f\x61\x84\xbf\x77\x82\x29\xa4\x09\x62\xa3\x05\x1b\xf7\x9e\x6e\xef\xa6\xbc\x45\xb0\xba\xf8\xc2\x4c\x2d\x17\xb8\x09\xd6\x56\x3c\x61\x7e\xa7\xba\xfb\x71\x17\xdd\x3d\x6e\xab\xbb\x0f\xb5\x9e\x1c\xd7\xe8\xee\x67\xf2\x98\xdd\x86\xee\x1e\xfb\xfe\xd0\x80\x69\xeb\xba\x7b\x5c\xad\xbb\x9f\xdd\x11\xaf\x3f\xdf\xca\xf1\x98\x37\x1e\x8f\xe9\xd7\xc5\xb7\x9e\xaf\xc7\xb7\x0a\x2e\x30\x0c\x04\x93\x5a\xa5\x94\x4f\xd0\x1c\x52\xc8\x08\xdd\x5c\x35\x3f\xf7\x7c\xe0\xed\x03\xaa\x41\xf5\xbd\xc8\x07\xde\xcc\xc3\xa3\xe5\x0a\xb8\x9c\xfa\xb8\x80\x1f\x45\x1f\xcc\x3c\x2c\x5d\x22\xa0\xfa\x3b\x85\xc2\x05\xb1\x0f\xb0\x0f\xc6\xde\xd8\xae\xd7\x27\x65\xbd\x7e\x57\x2e\x59\xd9\x28\x48\x8a\x8e\xa4\xcc\x2c\x27\xeb\x20\x20\x28\x21\x20\x49\x85\x81\xca\x09\xe5\x0d\x15\xa4\x30\xa1\x2a\xe6\x3a\x55\xec\x47\xa3\x72\xcf\x99\x43\x8a\x87\x4f\x49\x81\x19\xb2\x80\x80\x4f\x13\xed\xaa\x23\xdb\xe4\xc5\x99\xfc\x94\xf0\x29\xcc\x58\x31\x1f\x44\x42\xf9\xdd\xcc\xf7\x6e\x00\x30\xc7\xce\x38\x86\x93\x64\x88\xfb\x3f\xf1\x7f\x6d\x68\xac\x99\x43\xdc\x75\x0e\x55\x7c\x29\x03\xb1\x9c\xc3\xe2\x7b\x6f\x1f\xe0\xac\xbf\x38\xd7\xdf\x83\x07\xde\x42\xdc\x39\xbe\x38\xbc\x81\x98\x70\xcd\x94\xe3\x36\x6b\x14\x17\xe7\x27\xd0\x42\x51\xb0\xa0\x09\x1a\x2e\x56\xc6\x7c\xa3\xd2\x7c\xf3\xf0\x81\xa0\xc0\x11\x9f\x37\x70\xc4\x98\x84\xdb\xf7\x20\x22\x16\x02\x2f\x95\xbd\x7b\x31\x82\x21\xa2\x56\x7e\xb4\xd2\x67\xc3\xb0\xeb\xd7\x8d\x10\x71\x8c\x63\x18\xef\x2d\x22\x31\xad\x0d\x0d\xb2\xb4\x11\x1c\xd8\x09\x9c\x4d\x9c\x98\xda\x68\x0e\xbf\xaa\x5b\xaf\x85\x39\xba\x8d\x2a\x84\x8c\x3c\x71\xdb\x09\x45\x8d\x71\x4c\xa0\xa9\xa9\xd9\xc0\x5f\x3a\xaf\x0c\x8a\x42\x71\x9d\x14\x6d\xdd\x64\x9d\xfb\x84\x7a\x3e\x07\x4d\xc2\x98\x98\x1e\x5e\x45\x18\x5f\x8b\x13\x53\xe9\x44\x66\x73\x19\xd3\xc6\x0c\xcb\xa7\x9b\x7a\xf3\x1a\x20\x75\xf5\xe6\xb5\x7e\x5a\xe7\xcc\xdb\x64\x22\x50\x72\xf2\x86\xf6\x81\x2a\x69\xdb\xa0\x6c\x19\xdd\x59\xd8\xd4\xd4\xe9\x49\x87\x41\xbc\x97\x5a\xf2\x9a\x79\xd9\x2e\x14\x66\x61\x17\xef\x31\x9c\x21\x01\xff\xde\xa6\x06\x87\x85\x45\x94\x2e\xf4\xbe\xa9\x8d\x61\x4b\x43\xb5\x89\xf3\xb1\x0d\xa5\x09\x73\x87\xa1\xba\xa8\x48\x6a\x87\x4a\xd6\x24\xfc\x6d\x94\x21\x5f\x15\xe1\x0f\xd6\x26\xfc\x92\x0e\xd3\xa2\x52\x9e\x73\x80\x54\xd3\x4f\xdc\x95\xc6\x67\x9d\x16\x84\x04\xda\x8e\xa8\xf3\x05\x76\x0b\xfc\x59\x15\x34\xd5\xfc\x3e\x2d\xc4\xa7\xd0\x5c\x10\xc7\x52\x68\x6c\x59\x5f\x2b\x72\x53\xf5\x2b\x33\xd5\xaf\xe0\xe8\xf8\x75\x32\x5c\xbe\x23\x71\x14\x5c\xbd\x90\x18\x4e\x86\xac\xcf\x1f\xf7\xf3\x4f\xfb\x33\x38\xb7\xf9\x64\x2c\x5f\xbd\x18\xa2\xfe\xab\x17\x7c\xb9\xc1\x7b\x12\xa3\x62\x37\xe6\xb3\x36\x9d\xac\xda\xe9\xcd\xf3\x08\x20\x65\x04\x7c\xcd\x93\xae\x16\x38\x68\x41\x11\x9e\x9b\x74\xae\x8f\x23\x7d\xa7\xb4\x17\x7c\xf3\x9c\x86\xe0\x33\x00\x4e\x86\x10\x68\x59\x14\x9c\x2e\xdf\xa3\x44\xe8\xf9\x87\x2e\x3f\xcc\x52\x44\x3f\x0a\x02\x94\x24\x43\xf7\x92\x46\x0c\xb9\x2b\x0e\x07\xb4\x8e\xbe\x29\x23\x91\xce\xa9\x82\x8d\x30\x1c\x85\x2a\x9e\x73\x5c\xd7\x33\x10\x41\x03\x03\x41\xa2\x30\xe8\xcd\x29\xb9\x88\x84\x4a\x7f\x4d\x3e\x02\xe1\x0b\x8b\x39\x00\x13\xdc\x43\xb3\x39\xbb\xea\x25\x88\xad\x17\xc9\xab\xf9\x0b\x11\x46\x49\x26\x64\xc1\x1a\x4d\xd0\xfa\x92\x39\x96\xd0\x7c\x20\x9f\x11\x1e\xae\x2d\x52\x34\x42\xc5\x11\xb8\x17\xc0\x38\x3e\x87\xc1\xe7\x8d\x6d\xe4\x6b\x07\x0b\x97\x40\xe2\x5b\xb6\xb7\xa0\xf1\xc6\x20\xb5\x8c\x29\xfe\xdd\x6a\xe3\xe3\x1b\xd1\xc6\x47\x6d\xb4\xf1\x8b\xdb\xd5\xc6\x47\x77\xa3\x8d\x5f\xdc\x91\x36\xbe\x3e\x70\xdb\xd4\x5d\x08\x22\x29\x0e\xd4\x0c\xb1\x29\x09\x37\xd1\x63\xdc\xa3\x30\x6f\x11\xa4\xbd\xb3\x31\x53\x0b\xc6\x23\xa1\x2f\x44\xf8\xc2\xaf\x8e\x37\x7c\x9e\xd7\xd9\xb9\x6f\xb5\x5c\xe0\xfa\xe5\xf4\x13\xcb\xd5\x4a\xb0\xca\x33\x0b\xab\xdc\x14\x1a\xd9\x49\x87\x82\x93\x3a\x6f\x97\xc0\xd4\xa1\xc4\x5e\xaa\xa1\xb0\x28\x30\xa9\xbf\x86\xaa\xde\x84\x60\x0b\xde\x2c\x49\x06\x6e\xec\xc5\xde\x72\x05\xc6\x1c\x2e\xa1\x4a\xe5\xbc\xc6\x1b\xb1\x79\x87\x10\xbc\x47\x61\x44\x51\xc0\x3e\xbe\x7f\x65\x38\x0c\xa7\x71\xa3\x17\x90\xa6\xeb\xf8\xe3\xd1\xc9\xcb\x4f\x1f\x5f\x7d\xfa\xf8\xfe\xb5\xeb\x03\x37\x7f\xdd\xb9\x7e\x41\x9f\xdf\x82\x4b\xcb\xcd\x59\x28\x93\x02\x12\x22\x61\xb3\x49\x18\x64\x68\x6d\x34\xac\x61\xdf\xe0\x23\x17\xbe\x6c\x69\x1a\x12\xa0\x16\x03\x37\x5a\xe1\xfe\x98\x84\x68\x98\x80\x13\xde\xc1\x30\x2a\xe0\xef\xb5\x60\x71\xaa\x04\xb5\xfc\x16\xc1\xeb\x6c\x11\xce\x64\xe3\x3b\x63\x68\x2b\xf5\x62\x96\x0f\x0b\x4c\x2d\x88\xcb\xa8\xd9\x14\x5c\x89\x6d\x1b\xac\x06\x1d\xaa\x67\xaf\x67\x0d\xec\xf5\x5c\x08\x60\x9b\xea\xe7\x74\x2f\x1d\xbd\x67\xb6\xc0\xa1\x77\xf7\xb6\xe1\x0c\xa8\x84\xf7\xc6\xbc\x6e\x6c\x43\xdc\xa4\x3b\x4d\x36\xde\x76\xf3\xc5\xd8\x9c\x00\xba\xce\xed\x9b\xaf\xcc\x37\x5f\x99\x3f\xa0\xaf\x4c\x7a\x4c\x22\xd4\xc2\x21\xfe\x1e\x79\xcc\x08\x7f\x97\x2d\xf0\xdc\xe7\x9c\xe7\x26\x2d\x78\xee\xa4\x2b\xcf\x7d\xb1\xa9\x5d\xd2\xe4\xa9\x77\x04\xdb\x92\xf3\xa1\x69\xf2\x18\xa1\x39\x8f\x11\xb8\x8e\x0b\x8c\x95\xb3\x2f\xb0\x4f\x6b\x99\x2c\x03\xd3\x64\xb9\xe6\x0c\x1a\x7d\x5e\xe0\xa8\xd6\x81\xa4\x98\xb0\xa8\x98\x88\x6a\xec\xb5\xd4\x96\xbf\x5f\xc4\x28\x19\xb2\xbe\xf8\x17\x64\x63\xf0\x67\xc6\xaf\x15\x38\xf7\x64\x5f\x62\x76\x05\x39\xa7\x5a\xa1\x0d\xe5\x6c\x48\xdd\x6c\x4a\x79\xa6\x8a\xbe\xf9\x39\x25\x38\xb9\xe5\xb9\x55\xeb\xad\x89\x9c\x5b\x52\xef\xec\x43\x4a\xb3\xb3\x79\x7c\x9d\xc2\x2a\xcf\x9e\x88\xef\xb6\x1c\x06\x8a\x29\x72\x2e\x9a\xd8\x4f\x4a\xbe\x74\xe3\x3e\xbf\xe5\xcb\xf8\x96\x2f\xe3\x5b\xbe\x8c\x9b\xce\xdb\xa3\x43\xd9\xbe\xf6\x7c\x19\x7f\x80\x4c\x19\x94\xc4\x1b\xfb\xd7\xc8\x3e\xbe\x16\xe9\x9d\x43\x7b\xa3\xb2\x7b\x7e\x80\x9b\x96\xdc\xf9\x68\xb7\x23\xb7\xb7\x9f\xd7\x37\xa9\xfd\x9b\xd4\xfe\x07\x95\xda\xf9\x21\xf9\x26\xb2\x7f\x13\xd9\xbf\x89\xec\x6b\x88\xec\xef\x94\xca\x6b\xc8\xfa\xfa\x4f\x70\x22\xcd\x9f\xaf\x42\x84\x59\xc4\xe4\xcb\xd2\x33\xf0\x96\x84\xf9\x26\xf9\x07\x5f\xa5\x90\x7f\x47\xd8\xf8\xfa\xd5\x02\xca\x62\xbe\xf5\xa0\x97\xd8\x42\xf3\xa7\x08\xc6\x6c\xaa\x87\xdc\x50\xe2\xe9\x12\x1f\x63\x02\x63\x77\xeb\x50\x30\xe5\xbc\x39\x6a\x41\x5a\xdf\x87\xfd\xf7\xcc\xcc\x91\x1b\x61\xe6\x60\x1b\x66\x2e\xb9\x5d\x66\x0e\xde\x0d\x33\x77\xf7\xa9\x89\x9a\xcf\xd2\x04\x32\x74\x09\xb9\x24\x2a\xcf\x54\x4f\xc4\x7b\x15\x8f\xbb\x99\x1f\xa6\xfb\x99\xeb\x2c\x88\x7e\x55\x61\x01\x8b\xad\xaa\x5b\xe2\x11\xeb\xab\x35\x01\x8b\xbc\x5f\x53\x9a\xb6\x27\x7e\x2e\x2f\x93\x38\x53\xa3\x2c\x00\xf1\x48\x5b\x45\xca\xd0\xf0\xac\x5e\x75\xfb\xb4\x3d\x7f\x48\x6f\x49\x9f\x84\x53\x7d\x12\xe5\x88\xe8\x32\x97\xdc\xdd\xbb\x68\xbc\x7b\x93\x64\x0b\x29\xdd\xd2\x6e\xb6\x91\x51\xc5\xb8\xcc\xeb\xeb\x1d\xa9\x51\x6f\xac\xe6\x51\x1a\x29\xab\xc6\x69\x5f\xa7\xe7\x9b\x97\xf2\x37\x2f\xe5\x3f\xa0\x97\xb2\x3e\x28\x5b\x08\xf6\xbe\x47\x8e\xc9\xdb\xb9\x50\x37\xae\x3f\x65\xd1\x47\x6c\x2f\xfa\x39\xc8\x47\x3f\x2b\xa7\xd1\xaf\x4b\xb7\x92\x98\x73\x58\x73\x06\xd5\xd2\x74\xa2\x33\x6a\x94\x7b\x36\xa4\xe9\x72\x05\x27\x0b\x08\x49\xb5\x34\x6d\x29\x52\xd5\xb1\xa0\x12\x23\x9f\xd1\xc6\xf7\xb9\xea\xe4\x5e\xd9\x88\xae\x2a\x2c\x2a\x02\x56\x4e\x6d\x64\x75\xc5\x8d\xed\x44\x57\x15\xaa\x62\x39\x4e\x82\xe2\x71\x9e\xac\x55\x44\x76\xdd\x42\x5a\xd2\xab\x6a\xab\x59\x8a\x14\x2b\x3a\xba\x98\x97\x1a\xd1\xbe\x1d\xfb\x92\x6d\xb8\xe6\xaa\x93\x55\xe2\x58\xd8\x38\xe2\xb8\xdd\x04\x9b\x27\x37\x6e\x1c\x6a\xd6\x72\x6b\xb5\xc2\xe5\xac\x71\xb8\xf9\xef\x9a\xb3\x9c\xde\x08\x67\x39\x6f\xc3\x59\x9e\xdf\x2e\x67\x39\xbf\x1b\xce\xf2\xfc\x8e\x38\xcb\x8b\x76\xa7\xa4\x85\xb1\xee\xa2\xf1\x88\x5c\xdd\xa6\xb1\x6e\xb2\x05\x63\xdd\xe4\xc6\x8c\x75\x9f\x2c\x6c\xa9\xb8\xa6\x2a\xa2\xda\xc4\xbb\x8d\xe3\xda\x28\x89\x91\x60\x5e\x65\x70\x41\xc6\xff\x5c\x78\x3e\x58\xf2\xb7\x43\x02\xe4\xbb\x61\x02\x24\x47\x37\xf5\xa6\x5f\x1f\x4f\x3a\x33\x79\xd2\x35\x67\xd0\xc2\xde\x57\xec\xb7\xa5\xbd\x6f\x2c\xec\x7d\x53\xaf\x26\x9f\x83\xcd\xaa\xf5\x9e\x28\x77\x56\xfe\xef\x76\x6c\x5c\xe0\x35\x09\x60\x3c\x64\x7d\xf1\xef\x0a\x4c\xd6\xb5\xff\xa5\x2b\xb6\x3b\x1a\x41\xe9\x70\xeb\xa7\xf3\x0d\x3d\xbf\xad\x55\x10\x30\x99\x50\x8e\xd4\xe1\xb6\xce\x96\x18\x58\x6c\x89\x5f\x1b\xa6\x5b\xd8\x16\xcb\x7b\x7a\x8b\xb6\xc5\x85\xcd\xb6\x68\xc0\x77\x82\xe2\xb1\xf5\x44\xd0\x11\x96\x6a\x5a\x9c\x9e\x67\xdc\x4f\x50\x40\x11\xcb\x5b\x7b\x6d\x15\x1d\x9b\xab\xfc\x1a\xf3\xcf\x81\xb7\x76\x56\x4b\xde\x57\x7c\xb3\xb8\x14\x39\xe1\x41\xec\xaf\x40\x52\xc6\xda\x66\x91\x8b\x7c\x19\xba\xc6\x58\xe6\xbf\x29\x86\x57\x5a\x8b\x1e\xa7\x38\xe7\x20\xee\xac\x0f\x6e\xab\xfa\xc7\x44\x8b\xfb\x6a\x51\xda\xad\x48\xeb\xe5\x28\x66\x61\x4b\xc1\x89\x38\x30\xa4\x26\xc6\xf3\x53\x85\xfc\x3f\xb7\x56\x50\xa3\x28\x21\xf1\x05\xca\x2a\xa4\xc5\x04\x86\xbd\x08\x47\x4c\x15\xaf\xca\xeb\x07\x24\xd3\xc6\x85\xf7\x88\x12\xcc\xb9\xe4\xc6\x44\x29\x69\xca\x1d\x0f\x8e\x2c\xc5\xaf\xa4\xd4\xf0\xe0\x81\x9b\x88\x3f\x8a\x2f\xfa\x11\x93\x89\x6e\x9e\x67\x83\x64\x5b\x51\xb6\x44\x2b\x6b\xe9\xce\x07\x0f\x6a\x86\x43\x7d\x3e\x29\x46\x17\x01\x23\x74\x34\x1a\xa5\xcf\x77\xf5\xdf\xfd\x39\x25\x8c\xf0\xcf\x9e\x6b\xd8\x86\xe9\x80\xbe\x87\xfc\x52\x2a\xc7\x68\xec\xed\xe6\x2b\x60\x31\xdf\x38\xe3\x69\x39\x2c\xcf\x3d\x86\x18\x13\xe6\x04\x30\x8e\x1d\xe8\x04\x31\x4c\x12\x07\x26\x0e\x74\x52\x80\xfd\x82\x3d\x35\x45\x62\xa2\x85\xaf\x04\xb1\x77\x1a\xc2\x9f\xc7\xd7\xd7\x79\xde\x25\xdd\x47\x9f\x3e\x89\x79\x7c\xfa\x34\x62\x40\xc0\x0d\x98\x9f\xb3\x32\xc8\x7d\xcc\x4c\x9e\x38\x1a\x7b\xee\x02\xcb\x3d\x14\x66\xb8\x7b\x8f\xc6\x31\x0a\xd8\xf5\xf5\xae\xfa\x2b\xc3\xa1\xba\x42\x77\x07\x9c\xc2\x95\xde\xf6\x93\x29\x9c\xe5\x9a\x58\x56\xe6\x1d\x25\x5f\xae\x74\xa3\x7d\x51\xc2\x4b\x4d\xe2\x05\x64\x28\x5b\x8d\x3e\x23\x27\x8c\x46\x78\xd2\xe7\xe8\x2b\x0f\xe6\xf1\xe6\xe0\xf4\x2c\x17\x1f\x2d\xc4\xc7\xdd\x7d\x55\x83\x2a\xdd\x24\xbb\x83\xd5\xca\xcb\x24\xf5\xac\xbd\xcc\xd8\x4c\x47\x81\x12\x8a\x99\x66\xa4\x02\x91\x77\xc0\x37\x77\xcf\x0e\x1e\x95\x81\xa0\x59\x9d\x68\x00\xfd\x15\x8a\x13\xe4\xe0\x11\xb5\x17\x92\x4e\x75\x3b\xf2\x05\xf6\x57\x15\x66\xe1\x5d\x76\x7d\xed\x12\xb1\xfe\x2e\xe7\x5f\x3c\xe6\x9b\xbb\x7c\x57\xe3\x92\x3d\x5f\x78\xc8\x1f\xb2\x9c\x3d\xc0\xe0\x7d\x46\xa3\x11\x32\x76\xe6\x7b\x34\x46\x14\xe1\x40\x6f\x4f\x0e\x85\x33\x85\x09\xfe\x13\x73\xce\x11\xc2\x8e\xa6\x07\x09\x0a\x9d\x9e\x93\x2c\xe6\x88\x7a\x7e\xae\x05\x5f\x0b\x64\x72\xb6\xb9\xb2\x34\xe9\xee\x0d\xec\xbb\xf7\x79\x26\x8f\x1a\x4f\xad\xa7\x3a\xdb\xd0\xd7\xd7\xd6\xaf\x44\x19\xbb\xdc\xf1\x0c\x6f\x57\x62\xdd\x96\x39\xc0\xd8\x8e\x05\x5f\xa6\xdc\x01\xca\x16\xfd\xc1\x03\xa9\xcd\x18\x31\x3b\xd5\x39\xe1\xeb\xe6\xa0\x2f\x73\x2a\xcd\x30\x92\xd5\x40\x11\x9b\x22\xea\x9c\x23\x87\x7f\xed\x10\x9a\x23\x43\x3b\xc6\xc9\xd3\x6b\x27\x4b\x9e\x79\xec\xc1\x03\x96\xbd\x04\x4b\xe3\x48\x68\x99\x17\x99\x38\x2a\xe2\x6f\xb5\xf2\x01\x7b\xf0\x40\x92\xb7\x95\xef\x61\x20\x25\xca\xa3\x4c\xf5\x2c\x19\x1f\x34\x8a\x3c\xec\xef\x94\x3c\xb8\xe0\x0e\xd1\x07\x66\x47\x6b\x7c\x92\x52\x69\x4d\x10\x89\xf2\x76\xa2\xce\x87\x97\xf8\x20\x1e\xed\x7f\x1f\xff\x47\xf2\x7d\xfc\xdd\x77\x7e\x74\x1a\x9f\x19\xca\x9f\xf8\x2c\xd5\x0f\x7a\x0b\x0f\x8e\x90\x20\x31\xea\xcc\x22\x70\xca\x07\x3b\xd3\xf9\x47\x22\x4e\x52\xdc\x99\x58\xcf\x77\x14\x8d\xa3\x2f\x6e\x96\x31\xa6\x6f\x3e\xf7\x81\xe8\xce\x07\xee\x9c\x84\x6f\x2a\x3e\x28\xbc\xca\xbe\x79\x9f\xde\xd0\xa9\x20\xee\x03\x98\x69\xbe\xbc\x9c\xf2\x1f\xe4\x73\x61\x8f\xab\x40\xb2\x33\x09\x01\x99\xcd\x09\x46\x98\xf5\x66\x10\xc3\x09\xa2\xc9\xde\x24\x8e\x66\xb3\x62\xae\xb5\x1f\xd4\xd3\xec\x83\xbd\xde\x9c\x46\x17\x90\xa1\x3d\xc9\x46\x94\x7a\x2a\x7b\xe4\x75\x3e\x27\x95\x1f\xa8\x19\xba\x60\x99\x3f\xb0\x13\xc4\xca\x8a\x0d\x27\x45\xe3\x6a\xd5\x84\x86\x64\xaf\x17\x5e\x61\x38\x8b\x82\x1e\x8a\x11\xdf\x24\x3d\xc8\xc7\xc9\x70\x91\x9b\xd5\xb6\xaa\xc6\xb2\x91\x3c\x09\xc7\x1a\x0e\xad\x79\x31\x97\x9a\x75\x86\xfd\x6b\x81\x1b\xce\xe7\x3d\x51\x8c\x73\x4f\xc8\x5c\xb7\x06\xf6\x5f\x3f\xbc\x79\xfd\x23\xa4\x49\x9f\xa1\xd9\x3c\xe6\x24\x6e\x19\x85\x43\x37\xfa\x5b\xf2\xd3\x4f\xe1\x97\xc7\x2e\x38\x8f\x49\xf0\x79\xf8\xa7\xa5\xe2\x07\x13\x77\x78\x7a\x06\x5c\x91\x5c\x47\x10\x10\x77\x78\x7a\xfa\x08\xb8\x1c\xfe\x8b\x08\x5d\xba\x9c\x0b\x39\x3d\x75\x7f\x10\x0c\x9e\x7b\xc6\xe7\xc1\xa7\xe5\x24\x53\x72\xe9\x9e\x9d\x81\x65\xe1\xdb\x7d\xe0\xfe\x4b\x6b\x2b\x01\xef\x49\x0c\xd8\x4b\x62\xc2\xd2\xbe\x44\xfe\x52\xde\xd5\x54\xe4\x65\xae\xef\x46\x76\xf4\x04\xb8\xd3\x81\x0b\x18\x5d\xa0\x33\x70\xfa\xf4\x0c\xe4\x5a\x38\x52\xf8\x14\x2d\x07\xe0\xf4\xe0\xa1\x06\xd3\x95\x53\x5b\x24\x7c\x8c\x31\x8c\x13\x54\xf8\x92\x7f\xf1\x2c\xf7\x8c\xb7\x74\xe7\x90\xc2\x19\x62\x5c\x74\x18\x9e\x9e\xad\x0a\x0d\x1a\xe7\x15\xc8\xda\x3f\x6d\x26\xf6\x08\x48\x48\x7b\x32\xbf\x91\xee\x4a\x42\xcf\xff\x3e\x38\x50\x2d\xdc\xb3\xb3\xb3\xf6\x90\x36\xbf\x9c\xc2\xe4\xe5\x05\x8c\xdd\xa1\xc0\xcb\xea\x4f\x60\x86\x18\x1c\x2e\x25\x89\x15\xee\xe0\xad\xb6\x76\x7f\x7a\x9e\xb8\xfc\x1e\xc4\x6a\x0b\x7e\x4a\x10\x4b\x4f\xcf\x07\xbd\x0d\x19\xa8\x38\x57\x4b\x06\x27\x72\x34\x77\xe5\x9b\x87\x0c\xb7\x3a\x64\x7c\x93\x96\xcf\x98\xb9\x3c\x89\xc5\x46\xab\x4e\x47\xf4\x5b\x53\x0a\xee\x8c\x6b\x33\xcf\x6c\x34\xf6\xc4\x5d\xdc\x8f\x12\x79\x27\x23\x5f\x2b\xe0\xb8\xb0\xb8\xf2\x90\x6f\x0a\x33\x45\x69\x64\xb7\x28\xc9\x15\xe4\x44\xce\xdb\x29\xbb\x48\xd6\xb1\x1c\x70\x4c\xc9\xcc\x32\x82\x16\xdd\x90\x6a\x2d\xe4\x93\x44\x88\x18\x99\x74\x82\x0c\x18\xb5\xea\x2f\xb5\x9e\x55\xc9\x26\xc8\x57\x36\x83\xa7\xa0\x37\xf0\x77\x5c\xd9\xdc\x1d\x8d\x46\xb8\x20\x81\x3e\x78\xe0\xe1\x51\xee\x49\x9f\x1f\x08\x21\x7b\xb8\x6f\xe0\x5c\x7c\x73\x7d\xed\x9e\x20\xf9\xb9\x75\x62\xa2\xf1\x91\xe6\x66\xd4\x27\x7b\xff\xe3\x3d\x1f\x7e\x8c\xae\x5f\xf9\x98\x79\xcf\x87\x4f\xaf\x07\x8f\xaf\x0f\x0f\x7c\xef\xf9\xf0\x38\x86\xb3\x39\x0a\xfd\xe7\xa2\x93\x7f\xdb\xeb\x33\x94\x08\x63\x52\x6e\xa6\x05\x6c\xf9\x4b\x2b\x6b\xa9\x4a\x07\x3b\x90\xf1\xdd\xc1\x1c\x46\x9c\x64\x4e\x11\x0c\x1d\x4c\x70\x4f\xac\xcd\x79\x9c\x89\xc6\xfd\x7f\xe1\x57\xd8\x21\x34\x44\x94\x37\x3d\x47\x8e\x6e\x02\xc4\x07\x90\x43\xe4\x48\x41\x27\x91\x6c\xea\x14\x5e\x20\x07\x3a\xa7\x85\xe5\x3e\xf3\x7c\x47\x66\x39\xec\xbb\xfe\xca\xf3\x4b\x5e\xec\x1e\xe7\x6a\x47\x23\x76\x7d\xcd\xfe\x8c\x14\x4b\xe8\x3f\x78\x20\x0c\x3a\xea\x57\xca\x3c\xe2\xd1\x3e\xa0\x06\xb7\xc8\xfc\xef\xf1\x7f\xb0\xef\xf1\x77\xdf\xf9\xf4\x14\x9f\x8d\xd0\x29\x4e\x39\x44\xba\x25\x3e\x9f\xd4\x5f\x3e\xdf\x4d\x83\x87\xd3\xf3\x5f\xe6\xd6\xcb\xc7\x1d\xc7\x30\x99\x8a\x23\xaa\xce\xb5\x0b\xd2\x67\x8a\x76\x03\x97\x6f\x4c\x17\xb8\x0f\x34\x97\x54\xba\xb2\x06\x0f\xc1\x63\x83\xbc\xc9\x0b\x43\xde\x2e\xe5\x4b\x83\xbf\x7f\x08\x5c\x04\x83\xa9\xcb\x29\x2c\xbf\x2e\xc4\x90\x6f\x64\xf5\x6d\x3e\xe2\xaf\x0b\xb4\x40\x9c\xe4\x8a\x0a\x43\x36\x32\x6e\x50\x70\xf1\x71\x4f\xd5\xee\x4e\x69\xb8\x9c\x85\xa0\xe1\x87\x60\x00\x4e\x05\xfd\xb6\xdf\x07\x0a\xa2\x68\xec\xca\xd6\x87\xe0\xd4\x0d\xc9\xac\x71\x7c\x0d\x03\xbf\xf4\xcc\xaf\xf4\x9c\xab\xef\x82\x52\x8f\x0f\x81\x1b\x23\x26\xc6\x7f\x0a\xdc\x98\x5c\x22\x1a\xc0\x04\x29\x80\x0e\x34\x8a\xf8\x81\x49\xc1\x3a\x03\xd6\xc6\x1c\x0e\x28\x85\xaf\xb4\x65\xf5\x3c\x8c\x5b\x3c\xbd\xeb\xe7\xe9\xaa\x0d\xf6\x81\x1b\x42\x06\x7b\x98\xb0\x68\x9c\xb9\xf3\xb8\xea\x9d\x0a\xf4\x86\x31\xa2\x4c\x3c\x1b\x00\x57\xf2\x2a\x12\x36\x29\xe9\x28\xc0\x1e\xf2\x45\x00\xae\x63\xf6\xd5\x73\x05\xee\x1e\x89\xf5\xd1\xb0\x5a\x38\x0c\x03\xba\x84\x51\x82\x27\x35\xdc\x48\x7e\x61\x38\x14\x70\x1e\x31\xa1\x8c\x34\x21\xd1\x48\x34\x18\x93\x5d\xcb\x88\xcf\x8a\x1b\xf7\x2a\x42\x71\xa8\x58\x0f\x81\xd5\xd3\x53\x57\xf0\x1e\x6a\x95\x25\x9f\x96\x47\x98\x00\x43\x5e\x8a\xaa\x8d\x89\x92\x14\x03\xe9\x3e\x8a\x18\x12\x1b\x49\xff\x4e\x59\x10\x85\x22\xeb\x4e\xb6\xcc\xbf\x78\x2e\xb3\x5d\xfe\x14\xb8\xe8\x57\x05\x85\x1c\xdb\x95\x19\x07\xdd\xfa\x2d\x63\xef\x41\x2d\x6d\xb2\x10\xa9\xc4\x1b\xba\x28\x81\xca\xff\xfb\x27\x59\x38\x90\x22\x07\x93\x4b\x27\x26\x93\x09\x0a\x1d\xb2\x60\xfd\xb6\xe7\xc7\xda\xe7\x87\x29\xa2\xc8\xb9\x84\x49\x5a\xeb\x5f\x74\x1d\xe1\x49\x5d\xdf\x2d\x8f\x6b\x35\x1e\xd3\x5c\x93\xf7\x07\x95\x11\xde\x36\x26\x81\x33\x8f\x11\x4c\x90\x13\x4c\x51\xf0\xd9\xb9\x22\x0b\xea\x9c\x08\xf3\xd7\xab\x17\x7b\xc2\x53\xad\x96\x0d\x2e\xee\x55\x0b\x60\x6a\xde\x5b\x5f\x9e\x6f\xdb\xfc\xdb\x36\xff\x2a\xb7\x79\xb1\xcb\xe2\xed\x54\xfc\xe2\x21\x78\x54\xd3\x3f\xc8\xb8\xa8\xe2\xdb\x03\x70\x58\x2b\xcb\x0e\x74\xb7\xc0\xe4\xc4\x9e\x00\x37\x8c\x2e\x6a\xee\xe5\xda\x46\xf9\xdb\x89\xf3\x84\xe9\xfe\x0a\x5b\x31\x62\xc6\x08\x18\x5e\xe4\x38\x18\x48\x23\xd8\x8b\xe1\x39\x8a\x5d\xe0\xfe\xc8\x85\x8a\x80\x2e\x66\xe7\x6e\x0d\xf7\x90\x32\x97\xe6\x6d\x5f\x54\x34\x9c\xa7\x5d\x25\x36\x65\x83\xb8\x7d\x1b\xd4\x19\x6d\xd7\xb2\x84\xf1\x1a\xa4\xf2\x29\x2b\x26\xcc\x65\x11\x8b\x51\xdd\x44\x5b\x4c\xb3\x9d\x9e\xa8\xd8\x69\x8e\xf7\x68\x3e\x07\x35\xe0\xd5\x4c\x4f\xf2\xb9\x89\xbb\xfd\xad\xd4\x1a\x3b\x29\x08\xed\xd1\x93\xf6\x3b\x27\x94\xc1\xb8\xc7\x20\x9d\x20\x5b\xd7\x4a\xc3\xd2\xcb\xc6\xa8\xdc\xae\x2d\xd0\xde\x88\xfa\x0e\xdb\xce\xa6\xbb\x6b\xf7\xa6\x01\x9d\xfc\xec\xb6\x44\x65\xed\x74\x5b\xed\x31\x9b\xfe\xd1\xc2\xf1\xaf\xb7\x93\x5a\x4c\x96\x11\x12\x9f\xc3\xb6\x2a\xd8\x08\xcf\x17\x2c\x77\x0c\xa2\x90\x1f\x71\xd9\x49\x8f\x91\xc9\x44\x9e\x75\xfe\x4a\xc9\xec\xe2\xda\x3a\x27\x5f\xf4\x09\x29\xae\x8b\x15\x87\x6b\x6f\x92\x67\x45\x25\x40\x1b\x5a\xff\x14\x70\x61\x29\xc5\x30\xc2\xf0\x3c\x36\xd0\xdb\x78\x5e\x5b\xe0\x39\x8c\x12\xdd\x69\x67\x2a\xdd\x56\x7c\xb7\xcf\xc6\xb2\x5f\xb6\x31\x21\xdd\xad\x4a\x55\x71\x43\xb3\xea\x02\x51\x8d\xd2\xbd\xcd\x3d\xd8\x92\x43\x2d\xdf\x92\x9b\xe8\xd1\x33\xed\x75\xaa\x46\x4f\x6a\xd5\xe8\xa4\x4a\x8d\x9e\x5a\x04\xc1\x32\x5b\xf1\xe1\xee\x3e\x50\xbb\x59\x18\xaf\xf9\x9d\x25\xfc\x20\x87\x19\x69\x77\xcf\xb2\xe7\x3f\x46\x38\x8c\xf0\x84\xbf\xd6\x9f\x0d\xd3\x9d\x6b\xf0\xdb\xe1\x70\xb8\xc0\xe6\xc6\x02\x21\x99\x55\x38\x53\x87\x64\xe6\xfa\x20\x8c\xc2\xf7\x28\x40\xd1\x05\x3a\x62\x8c\x26\xc3\x9c\x32\x36\x4a\xfa\x9f\x84\x43\x46\x85\x6b\x89\x34\xa0\x8b\x76\x21\x99\xf5\x29\x21\xcc\xf3\x77\xc4\xef\x98\x40\x0e\xf1\x73\xd4\x17\x93\x78\x1d\x25\xac\x0f\xc3\xd0\x73\xd5\x0b\xd7\x1f\x9a\xaf\x28\x9a\x91\x0b\x64\xbc\x55\xc6\x33\xd1\x97\x68\x76\x7d\xed\xba\xa6\xb7\x0c\x20\x42\x99\x7a\x82\x98\x97\x37\x4b\xb3\x7e\x32\x8f\x23\xe6\xb9\x8e\xeb\xfb\x7c\xd9\x74\x33\xea\x19\x23\xfa\xe5\xf8\x91\xcc\x73\x87\xf4\xa7\x30\x11\xbe\x1e\xbe\xbf\x43\xbd\xa4\x22\x04\xa2\x37\xd8\x1d\x8d\xf2\x83\x9f\xba\x28\x8c\x98\x0b\x5c\x61\x86\x03\x6e\x1c\x25\xcc\x3d\xf3\xa5\x23\xe8\xcf\x63\xe1\x53\x63\x99\x37\x13\xc6\x62\xe9\x15\x90\x41\x08\xc3\x50\x21\x1e\x02\xea\x11\xdf\x5f\xad\xf8\x7a\xbd\xc2\x09\xa2\xec\xa5\xb4\xbb\x76\x5a\x30\xe9\xb4\x59\x58\x72\xcf\x17\xbd\xbe\x90\x71\xec\xeb\x74\x6b\xee\x03\x01\xfe\x77\xae\xa3\x17\x92\x2f\x99\x76\x03\x03\xb0\xb8\x57\xbe\xf7\xd8\x08\x9a\x53\x96\xf8\xd0\xc3\x00\x5a\x58\x5b\x94\x5b\x5b\x7f\xb5\xca\x5b\xa6\x2a\x12\x58\x9a\x67\x9b\xf3\xfb\x33\x84\x17\x8d\xe6\x5f\x01\xb1\xe9\x17\xd2\xd9\xe2\x44\xbf\x02\x8b\x13\xfd\xc3\x58\x9c\xe8\xd7\x6d\x71\xa2\x37\x6d\x71\xca\xdb\xb6\xbe\x36\x8f\xb6\x06\x4b\xd7\x8f\x4f\xe0\x6f\xaf\xfe\xf1\xdb\x47\xbb\xa5\xab\xd6\x7a\x35\x50\xac\x9b\xb2\x9b\x48\x15\xd5\xbe\x54\x51\x05\x53\x88\x27\xa9\x92\x0b\x54\xb6\xfb\x8c\xae\x84\x5f\x5c\xbe\x65\x6a\x01\xc9\x4c\x6c\xbd\x94\x3e\xf5\x18\x8d\x26\x13\x44\x85\x15\x84\xb3\x8b\x93\x45\x14\x16\xed\x3b\xf5\x3d\x88\xff\xab\xfb\xdc\x10\x5e\xd0\x97\x39\xc4\xa1\x64\x83\x5d\xce\x95\xf3\xef\x9e\x9c\xb5\x9e\xd9\x71\x1c\x05\x9f\x53\x55\xdd\x46\xdc\x57\x9e\x42\x1b\xec\xd7\xe0\x10\x44\xa3\xc3\x03\x10\x8f\x0e\x9f\x82\xc5\xe8\xe1\x3e\x08\x46\xcb\x0b\x44\x59\x14\xc0\x78\xe8\xb1\xd1\x72\x05\xa0\xc7\xc0\xc2\x42\xc8\x4b\x9e\x7b\x7f\x1e\x3c\x78\x90\xc5\xea\xa4\x5e\x7a\x03\x33\x44\x73\x70\x36\xec\x0d\xd4\x09\xf1\xd8\x77\x03\xff\xff\xea\x43\xc6\xef\x19\x3e\x54\xbc\xc5\xa1\xf6\xf5\x59\xdc\x1f\x8d\x46\xec\xb9\x1e\xaa\x37\x18\xb2\xde\x40\x0f\x78\xf8\xd8\x52\x9a\xc9\xd9\x4f\x5f\x3f\x02\x16\x7e\xc6\xc9\xfa\xe2\x0d\x99\x0f\x04\x7f\x48\x30\x83\xf1\x70\xc9\x99\x8a\xf5\x58\x5b\xc3\x43\xa4\x91\xcf\xa4\x64\xc1\x10\xad\x68\x22\x5f\xba\x3e\xe0\xbb\x94\xf7\xa6\xb7\xe3\x70\x77\x00\x08\x8d\x10\x66\x42\x9c\x19\xba\x7a\xb9\x5d\xf0\x19\x5d\x9d\x13\x48\x43\x55\xa2\x76\x77\x1f\x44\x38\xea\xc8\x0e\x49\x68\x12\x24\x0b\xbe\x01\x79\x48\x40\xca\xa3\xf0\x9f\xd2\x25\x5b\x71\x4e\x9f\x38\x3b\x87\x30\xa2\x49\xc6\xc8\xa4\x8f\x74\x78\xd7\x27\x31\x9b\xfa\x96\xf5\x7c\x5c\xc6\x4e\x49\x5e\xfa\xdf\xf8\x71\xc8\xfa\x51\x1e\x77\x9e\xfb\x7f\xd2\x7a\x75\xd6\xf3\xef\x02\x57\xfe\xeb\xe7\xca\xda\xf1\x59\xf9\x39\xfe\x5a\xf4\xdf\x9f\x20\xc6\xf9\xc1\xe8\x7c\xc1\x90\x67\x28\x46\x63\x14\x9e\x5f\xb9\x8a\xad\xff\x37\x45\x96\x6a\xa1\x61\xbe\x1d\x15\x42\x00\x90\x31\x33\x62\xc1\xc1\x52\xfc\xfb\xf7\x28\x8e\x8f\x05\x25\xb5\x38\x54\xa2\xbe\xd2\x70\xf5\x83\x98\x24\x28\xf3\x97\x5d\xae\xce\x64\x71\xe5\xcb\x28\x8e\x37\x60\x5e\x8b\x2b\xab\x59\xf2\x8a\x29\xe8\xb7\x2b\xa0\xe0\x1a\x2e\x73\x34\x30\xe7\x57\x8e\xfa\x52\x7f\xd7\x0f\xa3\x64\x0e\x59\x30\x7d\x79\xc1\x51\xc5\xaf\xe4\x37\x64\x91\x20\xf9\xd3\x0d\x04\xf1\xf4\xfd\x15\xd0\x5d\x0d\x0b\x1c\xe3\x69\x02\x22\x10\x83\xc5\x59\x3f\xc2\x41\xbc\x08\x51\xe2\xa1\xfe\x67\x74\x75\x4c\x42\xe4\xf3\x71\x12\x46\xe6\xfc\xf2\x84\x13\x28\x27\xae\xd6\x17\x7b\xc5\x85\x4a\xbc\x3f\x9d\x52\x12\xa3\xff\x19\x89\xdd\x21\xcd\xc9\x7f\x02\xd9\x46\xf0\x65\x50\x82\xa8\x80\xa8\x8e\xe1\xf5\x75\x3a\xda\xee\x68\x94\x70\x6e\x2f\xfb\x19\xe5\xe3\x1e\x03\xe1\xc9\xdc\x37\x4e\xed\xd9\x69\xda\xfc\x8c\xc3\x3a\xa7\x88\xcf\x5b\x55\xd1\x56\xa0\x52\x53\x38\x48\xf7\x54\xba\xa5\xac\x30\xbb\xc3\x31\x09\x16\x89\xeb\x9b\xd0\xef\x40\x91\x1f\x80\xf5\xc7\x11\x0e\x5f\xf1\x2b\xc4\x26\xe2\x39\x68\x34\x1a\x41\x11\xb9\xc1\x4e\xeb\x41\xe6\x62\x88\x7f\xd6\x17\x43\x79\xfe\x4a\x86\x5b\x48\xca\x41\x17\xb8\x8f\xd1\x17\x33\xf6\xcb\x5f\xb2\xd3\xfd\xac\xb5\x90\xd9\x82\xc2\xe6\x36\x77\x86\xd0\xc2\xa1\xf0\xb9\x80\x40\x6f\x75\x32\x47\xd8\xdc\xad\xa7\xe8\xcc\x1f\xe6\x5a\x98\x87\x21\x6d\x22\x42\xd7\x12\x54\x47\x4a\x6c\xfb\xbc\x48\x05\x53\x5e\x00\xec\x0e\xf4\x5b\xeb\x4c\x51\x4a\x0e\x54\x67\x06\xfd\x60\xf0\x5c\x4a\x58\xb2\x2e\x26\x9f\x51\x05\x5c\x35\xc3\xef\xeb\x95\xd5\xc3\x24\x39\x1a\x95\x8e\x01\xdc\xde\xc0\x2d\x9f\xe4\x94\xdc\xf0\x3d\x15\x92\x40\x9c\x78\xcf\x07\xfc\xc4\x86\xe4\xd2\x00\x88\xf9\xcb\x83\x27\xfc\xda\xd5\xab\xce\xb7\x78\x3a\xaa\x5a\x4c\xf0\x6c\x37\xd7\xe2\xe0\x89\xf9\xfb\xb9\xd8\x31\xc6\x95\xc4\xbb\xd0\xcb\xa5\xcf\xb5\xe1\xee\x7f\xe6\x0f\x8d\x21\x5a\x12\x88\x55\x49\xe4\x0d\x9b\x45\xde\x05\x9b\xf6\xc2\x48\x16\xdb\x98\x42\xca\xfa\x5f\xb4\x4b\xeb\xcd\xb9\x3e\x67\x0f\x04\xff\x6d\xc0\xe0\x02\x15\xf0\x33\x74\xa3\x90\xf7\x43\xf0\x70\x79\xfc\xd7\xa3\xb7\x7f\x79\x39\x3c\x5d\xca\x53\x31\x34\x95\xa3\x5c\x90\x08\x87\x9c\x9f\xfc\x20\x13\x03\x69\xc2\x7b\xea\xc6\x64\x12\x61\xf7\x6c\x05\xd2\xef\x72\xda\xaf\x7c\x4b\x61\xd9\x5f\x9d\xad\x80\x98\x7d\x32\x5c\xf2\xe1\x87\xcb\xae\xc3\x57\x0d\xb6\x3a\x5b\xad\x80\xf9\x64\xb8\x34\x6a\x8b\xf2\x5f\x62\xe9\xda\xaf\x55\x07\xdf\xd9\x36\xab\x6d\x71\xa7\xdd\x8e\xe8\x45\xeb\x45\xaf\x67\xe3\xf7\xff\xcd\x9e\xfd\xe7\xbe\x5d\xf4\x3a\x91\x3b\xd1\xfd\xcb\x02\xd2\xd0\x05\xee\x91\x92\x31\x5c\x7d\x20\x94\xb3\x21\x6f\x93\x44\xf8\xb3\x0b\x5c\x38\x8f\x4c\xaf\xc4\xa4\xd6\xfd\xf0\x91\x7a\xd0\x13\xb8\x48\x75\xd3\x09\x0d\x52\x1f\x6e\xf9\xa6\xda\x05\x50\xa8\xa1\x79\xeb\xc7\x40\x39\xdc\x9d\x9d\xe5\x74\xdc\xc0\xfd\x81\xef\x11\x69\x10\x4d\x77\x69\xa5\xc8\x94\x36\x31\xa4\xa5\x54\xdd\x9d\x8d\x73\x68\x1b\x07\x7d\x41\x02\x70\xb5\xf3\xab\x07\x51\x27\x63\xb3\x11\xf8\x89\xa9\x1d\xc2\x74\x96\x39\xcb\xd9\x70\x84\x7d\x40\xd9\x06\x84\x97\x60\x42\x16\x34\x40\xb9\x05\x00\xee\x0f\x04\xa7\x22\xf4\xa9\x9b\x20\xc6\x84\x92\x7b\x6f\x4f\x6e\xed\x21\x33\x50\x29\xfd\x3e\xab\x85\x71\xf1\x7c\xb6\xc8\xec\x2b\xf2\x63\xd3\x77\xf0\xd4\x15\x7b\x59\xda\x7d\x20\x83\xd2\x68\x5a\xd9\x5f\xea\x89\x22\xc9\x43\xa3\x98\x5f\x82\x80\x33\x3a\x11\x59\xe8\xe5\x6e\x80\xa4\x2d\x22\xc5\x29\xd0\x68\xe4\x3f\xea\x70\xd7\x18\x08\x32\x78\x08\x4a\x46\x4d\xc3\xdd\x74\x2a\xfc\x7d\xb5\x2f\xa3\xda\x75\xe9\xde\xd0\x38\xae\x5b\x95\x43\xf0\x18\x9c\xba\xfc\xfe\x2f\xaa\x1f\x9a\x9b\xab\xd6\xfa\x9b\xdc\xaa\x6a\x84\xe7\x21\x3c\x5a\xb0\xe9\x3b\x4a\xc6\x91\x70\x3e\xe5\xbf\x7e\x22\x74\x96\x42\x68\xf8\x32\x4b\x4b\x59\x6f\xae\x1a\x0b\x7c\x4a\xc6\xb2\xb4\x81\xce\x52\x75\x4b\xf1\xeb\xb1\xee\xdc\x15\xb9\xe9\xd2\x54\x74\x7c\x09\xce\x67\x11\xcb\x3a\x0b\x03\xe9\xb4\xc9\xff\xd6\xf9\x67\x5b\xe3\xa1\x6a\xc7\xc8\xff\x5a\xd8\x0c\xe5\x81\x1f\x98\x07\x7e\xc6\xa9\x2b\x4a\x72\x36\x43\xbb\x19\xb4\x9d\x8b\x6b\xab\x7e\x4a\x16\xfa\x67\x72\xd6\x4f\xd2\x59\x3f\x55\xee\xd8\x5d\xfc\x0e\x6a\x8d\xd2\x39\x7b\x76\x03\x1e\xf2\xb6\xb3\x4d\x30\xd1\xa2\xa7\x3b\xc0\x45\xf9\xe5\x13\xf0\xb4\xd0\x49\xb9\xcd\xe3\x7a\x8f\x2f\x70\x00\x38\xa5\x7c\xb4\xb5\x30\xa6\x22\x0f\x94\xaa\x00\x61\xad\x9a\x8a\xb6\xb0\xc0\x1a\x0a\x2b\x8a\xe6\xa4\x4a\x1d\x85\xe6\x24\x89\x18\xa1\x57\xa2\xc6\x3f\xa7\x11\x17\x51\x28\x14\x54\xdd\x75\x4c\xd2\x2a\xc6\x79\x8c\x51\x6a\xc8\x32\x94\x07\x9a\x1b\xb0\xa8\x3e\x52\x91\x5a\x74\x21\xa8\x51\x5f\x8a\x16\x84\xbe\x7a\x21\xca\xc0\x47\x16\xa1\x4a\xce\x69\x92\xca\x53\xb9\x5b\xc8\xe8\x80\x0b\x4c\xa5\xc6\xc5\x51\x5c\x7f\x47\x5a\x1c\x46\xe8\xc1\x03\xaf\xa9\x73\xed\xfe\xe8\xfa\x3e\x50\x9f\x31\x61\x9c\xb0\x0f\x63\x34\x57\x16\x28\xc3\x73\x74\x27\x9d\x3e\x92\x99\x33\x98\xb0\x2a\xb9\x8b\x04\x69\x51\x4f\x73\x0f\xde\x92\x53\xc4\xa1\x75\x10\xde\xf6\x6a\x8e\x86\x78\x65\x29\x9c\xef\x2f\xd3\x41\x1a\xb0\xb6\x60\xd3\x37\xc2\x2e\xe3\xfa\x0f\x1e\xa8\xb4\x2f\x73\xd2\x97\x1d\x7a\xed\xb1\x22\x3e\xcd\xbd\x16\x59\x02\xad\xf3\x91\x2f\x38\xf0\xfa\xc2\x2d\x8b\x7f\xb0\x9d\x48\xc1\xef\xa9\xbb\x15\xfe\xc4\x4d\x69\x13\xfd\xde\xbf\x3c\x79\xf9\xc1\x10\xbd\xc4\x9b\xb2\x98\x86\x30\xa3\x57\xc3\x53\x37\x88\x11\xa4\x2f\x55\x10\x26\xff\xfe\xe4\xe3\x8f\x6f\x5e\x99\x1d\x68\xcb\x73\x26\xb8\xfd\x22\x6e\x4e\x43\x70\x93\x31\x13\x42\x62\x53\xad\xa5\x1c\xf8\xf2\xfd\xfb\x9f\xdf\x1b\x5d\x19\xed\xc4\x9f\xc3\x25\xfa\x12\x31\x1b\x14\x1f\xfe\xf9\xee\xd5\xdb\xbf\x94\xa7\x01\x36\x03\xaf\xad\xc8\x28\xd6\xd7\x22\x30\x76\xd9\x11\x9b\xc7\xd0\x5b\xc5\x43\x5c\x2f\x1e\x3e\xde\x7b\xf2\x8f\xe0\x73\xfc\x7a\x73\xf1\x30\x15\x02\x81\xfb\x00\x32\x46\x93\x1b\x91\x06\x33\xbf\x38\x2b\x87\x4c\x51\x82\x44\xa0\x9c\x50\x4c\x36\x30\xc6\x4a\xbc\x10\x27\xa0\xd9\x88\xa8\xbb\xd4\x52\x82\x5d\xa8\x6b\x14\x4f\xe5\x6e\xab\x15\x4f\x7f\x51\x9c\x66\xad\x3c\xd2\x46\x86\x34\x8e\xc9\x9a\x42\x5c\x21\xba\xa9\x95\x51\xb2\xd4\x89\xcc\xbd\x66\xef\xa5\x4a\x44\xd6\x1e\x8a\x3a\x04\x6c\x70\x60\xb8\x16\x9b\xac\xff\xe0\x10\x3c\x29\x39\x51\xb7\xe0\x35\xf5\xcc\x5a\x05\x1e\x5a\xe3\xe6\xdb\x45\x20\x96\x82\xf6\x4a\x81\x79\x86\xd3\x34\x26\x2c\x0a\x90\x93\x06\xb9\xd7\x79\x4e\x4b\x79\x04\x88\x4c\x9f\xd5\xd0\xd8\x42\x3c\xec\x59\x00\xdc\x87\xfb\x87\x5d\x83\x3d\x6a\xe3\xfe\x64\x6e\x6c\x47\xb0\x49\xce\x18\x46\xc2\xcb\x53\x7a\x09\x3e\x01\xee\x79\x3e\x00\xd5\xee\x95\xec\x38\x7f\x47\x0e\x95\xce\x52\xa1\x03\x1d\xc1\x52\x38\x63\x4a\x66\x32\xde\xe3\xe7\x57\x2f\x8e\x1d\xcd\x1e\x3a\xe7\x0b\xe6\x04\x64\x11\x87\x0e\x26\x8c\x8f\xeb\x44\xd8\x61\xc4\x51\x80\x5c\x46\x6c\xea\x44\xed\x23\x7a\x3a\xa1\x6e\xb0\x65\xd4\x95\x67\x91\x72\xc1\x9d\x71\xf8\x61\x8a\x0a\x98\x9a\xc2\xc4\xa1\x88\x5f\x2f\x28\x14\x59\xf4\x1c\x28\x58\x4e\x89\xe0\xbe\xf3\x4e\x46\xd6\x48\x2f\x19\xec\xc0\x70\x16\xe1\x28\x61\xd2\x25\xca\x88\xb7\xe1\x27\x51\x39\xcc\x38\xa9\xbf\x09\x27\x08\x37\x82\xe4\x67\xcf\xb6\x8a\xe4\x93\x93\x9f\x35\x7a\x2f\x23\x1c\x92\x4b\x47\x98\x6f\xd6\xd8\xa4\x65\x04\xab\x0e\x2f\x61\xa2\x3a\x4d\x71\xca\xe8\x95\x03\x27\x70\x93\x78\xa8\xda\x59\x69\xae\xa8\xe3\x14\x6c\x19\x42\x42\xc4\x60\x14\x57\x65\x08\xa9\x91\x77\xd7\x7d\x74\x9f\xa8\x97\xf6\x41\x4b\x55\x6c\xdd\xb7\x84\xa4\x56\x22\x5f\x24\x0a\x9d\x90\xa0\x44\x1c\x69\xf4\x25\x4a\x58\xba\x1f\xc4\x6b\x07\x3a\xc6\x68\xfc\xb4\xcb\x8d\xf9\xf5\xee\x91\xf6\x5e\xe3\x85\xfb\xb2\x53\xa8\x55\xab\x9c\x34\x4f\x38\xef\xc6\xa5\x1f\x7d\x09\x0f\x0c\x05\x61\x1b\xfd\xb3\x94\x21\xdc\xea\x20\x78\x3d\x4a\x84\xe2\x50\xf0\x9f\x4d\x81\x76\x2a\xe2\xcd\x00\xc8\x1a\x9a\x2f\x42\x45\x7a\x73\x98\x24\x97\x84\xf3\xdf\xa6\xd7\x18\x87\x1a\x87\xfa\x4f\xc9\x56\x6b\xfe\x26\x17\x0c\xaa\x99\x09\x83\x69\xcb\x05\x75\xd8\xd9\x9a\x94\x57\x73\xf9\x65\xd1\xd3\xad\xdc\x02\xdb\x66\x8f\x5e\xd3\x9b\x6f\x0e\x71\x11\x17\xaf\x35\xc1\x65\x53\x7d\x9f\x57\x05\x25\xe5\x63\x6b\x4c\x46\x30\x73\xbd\x6f\x9a\xbc\x96\xf6\x32\x78\xf9\xf7\x8a\x51\xe6\xb7\xd7\xa9\xd6\x0e\x9c\xb9\xea\xe5\x3c\x86\x01\x9a\x92\x58\xa4\xc8\x70\x53\xe5\x81\x7a\x7b\xa1\xd9\xf7\x03\x90\xf1\xb5\xf2\x15\xc1\x0a\xd4\xf5\x58\xed\x22\x97\x5c\x50\x3a\x2b\x7f\x05\xf5\xa0\x56\x77\x5d\xe8\x38\xfb\x64\xc3\x7e\xd3\x03\x21\xa5\xed\xf2\x5e\xe0\x58\x90\xd1\x4d\x02\x3f\x02\x1d\x2a\x2f\x06\x38\x3d\x04\x2e\x45\xe3\xbc\xb0\x23\x11\x76\x56\x43\x77\xb6\xcd\xc9\x77\xda\xfd\xeb\x92\x59\x1b\x9b\x5f\x1d\xce\x9a\xbb\x08\x04\x5b\x25\xb7\x82\x95\xfe\xae\x11\x89\xba\x66\xbc\x5d\xf5\x33\x7e\x63\x2c\x18\x23\x38\x47\xc1\x36\x3a\x94\x59\x58\x5c\x66\xb8\x29\x63\x4c\x12\x8f\x36\xf0\xa1\x99\x45\x1a\x61\x30\x60\x8a\x6f\xcd\x31\xb4\x63\x19\x96\x1f\x61\x27\xa0\x48\xe4\x4a\x87\x71\xd2\xef\x16\x81\xc8\xf9\x13\x7c\xc1\x69\xb6\xaa\xd0\x70\x72\xf2\x73\x5a\x9d\xa1\xd5\xa6\xea\x60\xad\x15\x7f\xeb\xad\xfb\x43\x86\xce\xd3\xc2\xf5\xb1\xa7\xd6\x42\xc8\xff\x45\xdb\x97\x9b\x19\xed\x15\xa5\xdf\xd3\xce\xca\xd2\x58\xe6\x0a\xed\xfb\x9e\xe6\x69\x0b\xde\xd3\x9d\xe9\x9b\xd1\x4f\x3b\x4b\xec\x76\x54\x16\x85\x31\xc4\xdb\xbe\xf8\xff\xa4\x3f\x8e\x68\xc2\x54\x18\x85\x31\xae\x1b\xc3\xdf\xae\xdc\x82\xe2\x25\xb7\xd4\x13\xdb\xb4\x80\x2b\xbd\x7c\x39\xee\xf6\x5b\x2f\x79\x4e\x3f\x50\xc1\x58\xd8\x2e\xd2\x8c\x81\xab\xde\xa0\x0d\x04\x42\xed\x38\x61\x63\x49\x50\xcc\xb1\xa0\x77\x5c\xc4\xd0\x4c\x24\x03\x35\xa2\xdc\xac\xfb\x4f\xeb\xed\xcc\x5d\xd2\xf1\xfc\xaf\xb9\xce\xa5\x6b\xad\xd9\xb4\x5d\xc1\xcf\xdd\xcd\x6e\x6b\x03\xa9\x50\x88\x17\xef\xd9\x0e\x16\xc9\xe2\x16\x69\x71\x9b\xa6\x8b\xd3\x22\x85\xa5\x60\xdf\x8a\xc4\x4a\x58\xe2\x7f\x48\x4d\xf1\x3f\x28\xba\xfe\x83\xd6\x57\xd5\x6e\xa3\x30\xd0\xfb\xc7\xa0\x59\xa6\xa6\xcb\x30\xdd\xe7\xc8\x59\x55\x60\x45\x41\x4b\x26\x77\xbb\x9b\xf1\x6e\x2d\x3f\x6b\x7e\xda\x99\x6c\x75\xd4\x3f\xcb\xb1\x32\xc7\x06\xeb\xbe\xff\xba\xb6\x6f\x67\x6b\xb9\x69\xeb\xde\xd4\xc2\x9d\x99\x6c\x52\xfb\x36\xad\xb5\x6f\xe3\x36\x61\x18\x7a\x7d\x4c\x1b\xe7\x0a\xe8\x1d\x9f\x7f\x9a\xb2\xc7\xca\x72\xca\x21\x5c\x30\x14\x7a\x96\x08\x13\xd9\x82\xa1\x84\x45\x78\xf2\xdc\x65\xe8\x0b\x73\x87\x6e\x2a\x19\xae\xfc\x0d\x4d\xe3\xcc\x6e\x1a\x17\x96\x88\xb2\x69\xdc\x75\xb5\x55\x5c\xec\x15\x23\xbc\x26\x7b\xb8\x02\xc2\x60\x52\x82\x48\xcc\x3a\xf3\xe6\xce\x9b\x53\x69\x3b\x73\x9b\x72\x1a\xba\x1f\x29\x84\xff\xfe\x18\xfe\x32\xdb\x7f\xfb\xb2\x5d\x0a\xe1\x27\xc0\x0d\xe3\x8a\xfb\x5e\xdb\x3d\xaa\x15\x08\x35\xfc\xc0\x9b\x2b\xe7\xe8\xf8\xb5\xf3\xa1\x9b\xba\x2a\xf3\x34\xb0\xb2\x10\x26\x54\x61\x2d\x54\x2a\x9f\x5f\xb2\x38\x4f\x58\x46\xb9\x85\x43\x17\x70\x0d\x7f\x86\xb3\x33\xd0\x7b\x6a\xc9\xef\x57\xc9\x62\x3f\xdb\xf8\xa4\xe7\x76\xcb\x8d\x66\xe5\xdd\xa9\xdd\xba\xe7\x30\x89\x82\x5e\x48\xc9\x3c\x24\x97\xb8\xa7\xd3\x32\x58\x0a\xb7\xe4\x5b\xb6\xe8\xe3\xeb\xcc\xbf\x5e\x98\x8c\xf2\xc5\xdf\x08\x21\xba\x8f\xdf\x03\x42\x36\x41\xc4\xd7\x8a\x00\x33\x77\xb8\xdd\xf1\xbe\xa2\xf9\xd7\x39\x5f\xc9\x16\xf0\x0e\x7b\x09\x62\x4d\x21\x07\x77\xe3\x21\xf2\xd7\xbf\xbc\xfc\x30\xfd\xf5\xd9\xfb\x75\x62\xb7\x0b\xa2\x47\x4d\xa2\x1a\xe0\xfe\x60\xa4\x68\xcd\x68\xa3\x35\x3b\xab\xbe\x5a\x92\xda\xbc\xab\x02\x80\x5a\xfe\xb2\x5a\xaa\xd7\xf2\x6f\x37\x89\xbe\xd3\x1c\x85\xa1\xe0\x66\xe7\xd7\xd6\x70\xd4\x22\x89\x90\x28\xdc\x5d\x91\x42\xa8\x33\x14\x9b\x5c\xe9\xb6\x23\xb3\x29\x07\x6f\xf7\x50\x6d\x0a\xa9\x5e\x93\xe1\x6e\x08\x62\x6e\x17\x50\x5b\x19\x2e\x5b\x33\xfc\xaa\x2e\xd9\x50\x29\x50\xb1\x71\x1e\x62\x83\x6a\x96\x5f\xfb\x83\x21\xda\x0f\x21\x83\x0f\x1e\x78\x0d\x70\xda\xa2\x04\xd3\x3e\xc0\xb2\x28\x2f\xb1\x82\x24\x94\x20\xc6\xe9\x9c\x3a\xa6\x2c\x8d\xf3\x85\x0c\xfa\x7c\x23\x14\x83\x1a\x55\xc3\xbc\xa3\xa8\x39\xa2\x54\x3e\xfa\x7e\x9a\xa3\x27\x9d\x4f\x82\x20\x0d\xa6\xf2\x03\x86\xe8\x2c\xf1\x3b\x0b\x2d\xc1\x34\xe2\x07\x4b\xa8\xd8\x6c\x95\x4f\xee\x03\x99\xff\xcf\x87\xef\x7f\x3c\xfa\xeb\xe4\xd8\x4e\xe6\x15\x23\xdf\xc2\xc7\xaf\xe4\xb8\x75\x08\x0e\x4b\x9e\x4c\x83\x87\xe0\xa0\xfd\xdd\x20\x6e\x04\x51\x97\xaa\x82\x00\x1d\xd4\x5b\x38\xec\x46\x57\x33\x15\xe7\xd5\x1c\xf5\x84\x4c\x5d\x25\x93\x95\x24\xae\x06\x70\xe5\x58\x9d\xa0\xad\xcb\x6d\x18\x25\x3f\x9b\x01\x3c\x8d\xe9\xe0\x5a\x86\x7c\x6d\xd9\x5c\xa0\x3e\x9f\xc7\x0b\x9a\xa5\x74\x7f\xa8\xcc\xd8\x5d\x34\xb5\x05\x25\x15\x8c\xe3\x9f\xe7\x59\x9a\xcd\x5a\xd3\x41\xe7\x70\x0d\x95\xed\xf3\x12\xd1\xa2\x0e\x5c\x1e\x7c\x81\x33\x35\x7a\x66\x6c\x79\xa3\x4b\x1a\xe8\x66\xa5\x07\xef\x72\x66\xe4\x1f\x08\x16\x2b\x28\xfe\x3a\x8e\x49\xa2\xb4\x9f\xc7\xf9\xb5\xb0\x39\x84\x2a\x30\x32\xac\x1d\x00\x57\x03\x74\x06\xdc\xd7\x12\xa0\x7e\xbf\xef\x02\xf7\x2d\x71\xe6\x24\x49\xa2\xf3\x18\x39\x29\xd0\x52\x3f\x6f\x80\xd3\x01\xf5\x85\x8d\xa7\xeb\x27\x74\x5c\xc0\x52\x2f\x8a\x38\x34\x78\xdc\xa6\x6a\x62\x41\xbd\x4f\xcf\xf4\x7e\x6b\x66\x8d\xca\xb6\xcd\xd6\x6c\x99\x44\x5b\x75\x5d\x80\x81\x59\x0f\x61\x1d\x6a\x64\x37\xc9\x0e\x4a\x14\xab\xc6\xd2\x78\xd3\x8c\xaa\x66\x4f\xd7\x98\x5f\x5b\xa6\xb3\x3a\x37\xf7\x46\x0a\x1f\xdb\x4d\xbb\x45\xee\xd0\xae\xc8\x35\x78\x46\x19\xa6\x90\x7f\x2b\x22\x48\x9a\xd9\x49\x2e\xf3\xc0\x08\x57\x26\xe9\x51\x74\xc0\x07\x63\x42\x67\xc7\x0d\x8d\x85\xc3\x93\x0f\xf8\xee\x28\x68\x97\xfb\x30\x8e\x60\x22\x5b\xf4\x25\xd3\x03\x24\xbe\x50\xa8\xa8\x6c\xc5\x17\x72\xab\xdd\x14\xdf\x2b\x1b\xc9\x49\x72\xee\x5e\xa5\x33\xd4\xf3\x34\xde\x28\x56\xec\x6a\x8e\x8c\x2a\xd8\xa3\xf4\xaf\x14\x35\xe2\x97\xb5\x71\x5f\x38\xc6\x7b\xcb\xac\x9e\xb3\xcc\xee\x11\x06\x20\xb5\x31\xc9\x27\xf2\xfe\xbb\xc9\x34\x37\x2b\x40\xac\x58\xe7\x0b\x9e\x5b\x95\x3e\x27\x80\xc6\x5d\x28\x7e\x7b\x56\x16\xbe\x9f\xb5\xba\xbe\x3e\x3d\x03\x2a\xcf\x50\xa1\x43\xfe\x6a\x27\xc7\x55\x0b\xc6\x38\xa5\x25\xfe\x9f\xf7\x45\xcc\x19\xaa\x4b\xd5\x29\xf3\xbc\xfc\x78\xe5\xb9\xaf\x5e\x98\xfc\x35\x02\xae\x88\xb8\x5a\xf9\xa5\x95\x15\x1c\x3f\xf2\x7d\x80\x44\xda\x2c\x6d\x6e\x90\x0d\x86\xe5\x7c\x5e\x66\xc5\x6f\x8c\x2e\x9d\x77\x94\xcc\xa2\x04\x19\xe0\xa4\x85\xdf\x59\x49\xb0\x30\xc6\x2d\x4b\x15\x7c\x1a\x9e\x0f\xb0\x87\x8a\x02\xc4\x8e\xf9\xa1\x16\x01\x90\xcc\xa5\x22\x62\x4c\x4a\x8b\xbf\xee\xbe\x4a\xe0\x45\xbe\xd8\xb9\x2a\x50\x2c\xa6\x0d\x68\x39\x9b\xd9\x81\x35\x9b\xd9\x81\x99\xcd\xec\xe0\x2c\x4f\x82\x54\x6a\x1f\x8a\xe6\x64\x27\x27\x3f\x1d\x0b\xae\xfa\x43\xc4\x6f\x41\x91\xf5\xe4\x05\x64\xc8\xe7\x0b\xc8\x9f\x79\x7c\x8d\x46\xb0\x3f\x47\x34\x89\x12\xe6\x21\xbb\xf0\x86\xc0\x52\x55\x78\xca\x46\x85\xfe\x12\x67\xc9\x72\x04\xda\xd5\xb9\xc0\x20\x8d\xc5\x5a\x62\x41\x35\xd3\xdb\x5d\x4a\x30\x6c\xb5\x02\x0c\x40\xb1\x14\x67\x5c\x96\x31\x4e\x9e\xe7\x03\xca\x8f\x4c\x81\xcc\x32\x7f\x59\x6c\x86\xa5\xd9\xd2\x63\x32\x49\x95\x3c\x6d\x95\x78\x96\xd1\x84\x13\xc4\x4e\xe2\xc5\xe4\x6f\x48\x8c\x33\x32\x37\x33\xf6\x39\x12\x1b\x72\x1a\xe5\x3f\x18\x8d\x84\x64\xb8\x13\x8d\x3d\x91\xa8\x16\xfa\xa9\x86\x50\x67\xeb\xf1\x20\x18\xa8\xc4\x5e\x59\xec\xa1\x42\x0e\x7f\xca\x21\x2f\xed\x59\x99\x3b\x44\xe7\x6c\xf2\xb2\x54\x60\x7e\x1f\x13\x3a\x13\x9c\xb7\xc8\x5b\xa3\x10\x4e\x4d\x2a\x44\x46\x6c\x27\xb9\x8c\x58\x30\xf5\xa0\xde\xf3\x22\x35\xe8\x52\x94\xa9\xd2\x4b\x31\xcc\x76\x09\x6e\xb3\x4b\x48\x7f\xbe\x48\xa6\x2a\x51\x2a\x2e\x85\x87\xe6\xa7\xd4\xdd\xe8\x17\x90\x10\xf5\x50\x18\x59\x85\xe7\x82\xcd\x2f\xcd\xa3\xc9\x72\xc5\xd2\x5b\xe6\x8c\x45\x15\xe9\x5c\x6d\x25\xd3\x65\xee\xd0\xeb\xeb\x5d\xaf\x36\x69\xac\xce\x03\x2b\x77\xdb\xe9\x19\xa0\xa3\xdd\x7d\x00\x47\xbb\x03\x40\xb4\x7c\xce\xe8\xd5\x32\xad\x72\x0c\xa2\x11\xb2\x24\x26\xfd\x7e\xd7\xa3\x23\x2f\x19\x45\x32\x11\x94\xef\xf7\x43\x82\x91\xff\xe0\x81\x87\x05\xf6\x3d\x65\x78\xf5\xc1\x2e\xbb\xbe\xc6\x8a\x5c\x88\x8a\xd1\xdf\xf3\x21\xfd\xef\x55\x85\xf4\xd8\x5f\x42\x0e\x02\x19\xc5\xab\x71\x84\x61\x1c\x5f\x2d\x45\x45\xf6\xeb\x6b\x19\x34\x1c\xf5\x25\xc8\xd7\xd7\xfa\x2f\xcf\x4f\x5b\x46\x63\x0f\xaa\x12\xd4\x64\x65\x54\x2a\xe6\x98\x5a\x3f\x0f\x2e\xce\xf2\xe0\xd2\xf5\xf3\xe0\xd2\x72\x1e\x5c\xda\x94\x07\x97\x66\x79\x70\x69\xcb\x3c\xb8\xb4\x7b\x1e\x5c\xea\xe7\x67\x5a\xc2\x57\xfb\x4c\xb8\x21\x92\x93\x59\x88\x02\x3b\x77\x94\x0e\x17\xdf\x5a\x3a\x5c\x6a\xd2\x6a\xb5\x33\x3e\xa3\xab\x44\xad\x4c\x56\x26\xfe\xe7\x4b\xac\x75\x63\x72\x1a\x89\xe6\x0a\xea\xda\xf0\x6e\x98\xd8\x27\xb4\xcc\xe6\x64\xe4\xc3\xda\xc5\x0b\x94\x04\x34\x9a\x33\x22\x61\xec\x67\xe6\x21\x91\xd8\x4e\x1e\xcb\xf4\xda\xa3\x7e\x76\x5a\xcc\x64\xbf\x7e\x7a\xf2\xd9\x68\xf0\x3d\xfb\x8f\xe2\x85\xff\x3d\xfb\xee\x3b\x3d\x7f\x2c\x6a\xc0\x67\x17\x3d\x33\x6f\x7d\x76\x36\x5c\xae\x76\xd8\xff\x3d\x78\x4e\xbd\x8c\x14\xef\xee\x57\x64\x4f\x27\xf2\x2a\x39\x65\x67\x9c\xad\x19\x36\xcc\x30\xb1\x26\x20\x8e\x50\xe2\x21\xd0\xf4\xa9\x87\x7d\x7f\x68\xc0\x54\x01\x50\x75\x86\xe3\x26\xec\x63\xc0\x04\xa7\xb9\x4a\xa9\x78\x8a\x60\xf2\x35\x66\x53\x4e\xea\x55\xb5\xfb\x7f\x09\xc7\xbf\x86\x4f\x4f\xec\xaa\xda\x19\x09\xeb\x4b\x82\x3e\x02\x6e\x74\x71\xd5\xe3\x97\xea\x2c\x52\xc1\xc1\x52\xf8\x4f\x5d\xf4\xd2\xc0\x65\xa5\x20\x35\x35\x60\xa2\xd1\xc7\x79\x08\x99\x0c\x95\x13\xea\xa5\x54\x13\x77\xa0\xc3\x2b\xd4\xdf\x69\x79\xec\xbc\xda\xaa\xc9\xcb\xed\x33\xba\x5a\xcc\xdd\xaa\xa4\x4c\x4f\x44\x8a\x87\x9c\x3e\xf6\x09\x70\x03\x31\x71\xe3\x99\xd2\x32\x3f\xab\x57\xa6\x18\x51\x34\x66\x64\x00\x45\x30\x24\x38\xbe\x2a\x3a\xf6\x99\x6d\x92\x2b\xcc\xe0\x97\x92\x66\xb3\x85\xe6\xc5\xaa\x70\x4c\xd5\x81\x42\x89\x28\x65\xb5\x4c\xa1\xf8\x12\x67\x8e\xb8\x19\x1e\xdb\xe7\xc6\x3e\x00\x72\x6b\x28\xed\x5b\xf6\x24\xa9\x0d\xb7\x37\xeb\xa8\x0e\x80\x4e\xb1\x53\xf6\xdd\xa9\x57\x69\xd5\xd6\x57\x5b\x5b\xd9\x53\x64\x0b\x53\x4d\x4f\x34\x5a\x32\x78\x7e\x12\xfd\x86\x86\x07\x20\x8e\x30\x7a\xbb\xe0\x07\x4a\xa4\x29\x66\x53\xc4\x7b\x9c\xc2\x64\x1a\xb9\x20\x99\x92\xcb\xe3\x05\x4d\x08\xfd\xfb\x14\xe1\x13\x81\xf5\x08\x4f\x84\x7d\x7f\xc1\x38\xac\xc3\x53\xf7\x98\x84\xe8\x8d\x38\x2a\xbd\x38\xc2\xac\x37\x83\xf4\xb3\x74\x75\xe6\x3f\xf9\x41\x06\x71\xad\x6e\x29\xa9\x74\x27\x4a\x13\x87\x55\x29\x7d\xe4\x6b\xd7\x6f\xd4\x1f\x4d\x51\x3c\xaf\xd4\x07\x09\x54\xc9\xd3\xbe\xc7\x61\x16\xc9\x74\x72\x65\x4f\x0c\x64\xba\x67\x40\xef\xfe\xe1\xee\x00\xc8\x5d\x2e\xbd\x1b\xc5\xb9\x2c\x3a\x37\x0a\x97\xbe\xa2\x6f\xe3\xa6\xb9\xa0\xe5\xce\x94\x92\x84\x9c\x5a\x5f\x3c\xf2\xfc\x7a\x43\x66\xa7\x6a\x19\x72\xbe\x3b\x22\xdd\x68\x82\x98\x54\x8c\x78\xe2\xec\xff\xcc\xcf\x3e\x50\xc2\xa1\x44\x06\x97\xd6\x11\x7b\x43\xc2\xbc\x0a\xa1\x08\x79\x4a\x2b\xa1\x07\x3d\x8e\x0b\x1f\x2c\x57\x80\x6f\x67\x34\x44\xfd\x59\x34\x43\x40\x0f\x30\xcc\xf5\xbf\xca\xa7\x85\x56\xc0\x31\x13\x32\x49\xdc\x65\x2f\x7e\x0e\x39\x7c\x55\x3d\xc6\x5f\x91\x10\xd9\xd1\xe9\x02\xb4\x2d\x45\x16\x39\xe7\x5b\x0b\x51\x95\x8c\x47\xff\xec\x87\x51\x12\x10\x8c\xf9\x3d\xdf\x31\xc9\x76\xe3\x92\x61\x4b\x7e\x62\x86\xbe\x30\x48\x11\x74\xfe\x9f\x33\xa7\xc8\x51\x37\x80\x40\x9e\x6c\xe2\xef\x60\xe9\xb8\x7c\x3c\x8d\xe2\x50\x9b\xa5\x35\xb8\x82\x1b\x7d\xb3\x90\x39\x87\x7f\x56\x0f\xad\x7a\x25\x0f\x83\x81\x7f\xba\x7f\xb6\x83\xfa\x6a\xbf\x7b\x39\x45\x8a\xba\x39\xa9\x96\xa9\x2f\xa7\x24\x46\x1f\xd0\x17\x66\x68\xc0\x52\x24\xa9\x3f\x3c\x0c\x96\x50\x67\xd3\x4d\xc4\x49\x5b\x9c\x33\x8a\x24\xbf\xc1\xe1\x7d\x1d\x25\x8c\x3f\x0f\xa6\x90\xc2\x80\x21\xfa\x02\x32\x28\xf9\x86\xe2\xfa\x2a\x00\xcc\xd9\x9a\x40\x94\x93\x0c\xcb\x93\x9e\xdb\x42\x13\xc4\x5e\x8a\xc7\x5e\x0e\x85\xa9\x02\x4f\x92\x22\xa5\xf0\x3b\x89\x17\x13\x2f\x47\x35\xfc\x3e\x9b\x22\x9c\xe7\xe9\xe4\xc2\xc9\x4d\x99\x00\x2e\x8c\x49\x6a\xb2\x43\x85\x94\x80\x45\x67\xf6\x04\xd1\x42\x54\xeb\x33\xf2\x9a\x5f\x95\xc7\x30\x41\x9e\x3f\x1a\xd1\xfc\x03\x99\x40\x9a\xcb\x1f\xf8\x74\xff\x0c\x88\x43\xcc\xcf\xa7\x2c\xe8\x23\x36\xe0\xd1\x7c\x8e\x20\x2d\x6d\x71\x09\x73\x9f\xa2\x31\x45\xc9\x34\x97\x4f\xdc\xa2\x25\xcc\x23\x40\xeb\xc3\x96\xb9\xe9\x0f\xd1\x2a\xc3\x94\x00\x02\x95\xfc\x9b\xe3\x16\xaa\x0e\x3c\x8e\xe8\x4c\x56\xe0\x16\xc1\x83\x7b\x12\xb0\xfb\xe1\xec\xfc\xb7\x8b\xbf\x87\xe3\xb7\xfb\xdf\x75\x75\x06\x7b\x02\xdc\x38\xb2\xda\xde\x43\x8e\x6c\x4a\x16\x49\xd1\xf6\x5e\x11\x69\xb8\x0f\x0a\x79\xa7\xd3\x88\x6e\x99\xa5\xb9\x91\xb5\x94\xcd\x4c\x43\xb2\x11\x7d\xa8\x46\xcb\x18\xc8\x81\xc5\x21\x79\x2b\x69\xf6\x1a\x16\xfa\x46\xfd\x94\x3b\x6f\xc1\x7b\xb1\xf7\xe8\xfb\xf3\x83\xbf\x4e\x9f\xbd\x68\xd8\x7b\xd5\xae\x29\x39\x8f\xc4\xa6\x24\x43\x65\x2c\xa8\x6c\x43\x07\xf6\x7d\x5a\x5d\x60\x57\x35\x50\xb5\x5a\xeb\x9c\xe8\xd7\xae\xf6\xda\xe4\x84\x57\xed\xd9\xdf\x54\x47\x97\x84\x6b\x79\xfd\xd9\x43\xcf\x9e\x00\x77\x51\x17\xfc\xd0\xc5\x3f\x94\x2f\x4e\x95\x95\xbe\x98\x2b\xb6\xf2\xac\x09\x09\x2a\xa3\x09\x75\x81\x53\x76\xe2\xd1\xd6\x09\xc1\xcd\xa8\x49\xcb\x62\x9e\xc6\xce\x31\x28\x67\x45\x40\x48\x39\x9f\xc4\x58\xe6\xfc\x4a\xa5\x71\x23\x10\x1a\xe2\x00\xc5\x4d\xc1\xa3\x5b\x0f\xc5\xa8\xa2\x2a\xf7\x85\xd0\xb5\xcb\xfa\x5e\xf2\xcd\xfb\x56\xa0\xee\x5b\x81\xba\x3f\x46\x81\xba\xed\xdc\xf1\xb0\xfe\x8e\x0f\xc8\x97\xcb\x87\x93\xbf\x0f\xd6\xbe\xe3\x6b\xae\xf4\x82\xb7\xe3\x65\xc4\xa6\x3d\x93\x04\xb8\xa5\x28\x60\xf5\x56\x85\x43\xbb\x8e\xf1\xdb\x96\x0a\xa7\xc4\x1c\x94\xa8\x7e\xa7\x4b\x2e\xbd\x86\xaa\xee\x38\xab\xda\x4f\xdd\x8c\xcd\xce\x75\xfa\x1a\xc8\x07\xe7\xb6\x4d\xa2\x62\xf8\x88\xce\x11\x9d\x41\xac\x2a\x0c\x97\x74\xa4\x39\x1c\xb6\xd7\x93\x5a\xae\xcc\x5a\x1d\x62\x5d\x90\x47\x6b\x8c\xeb\x0a\x29\x9d\x30\x8e\xbe\xa0\x60\xc1\x5a\x54\x21\xcc\x63\x5c\xb1\x14\xca\x73\x22\x8b\x26\x97\x5f\xe6\x92\x3a\xb6\x5d\x96\x0a\x74\xdf\x3c\x82\xb7\xc7\x18\x58\xf3\x8e\x93\x5a\xce\x00\x76\x8b\xea\xd0\xae\x2a\xee\x11\x45\xce\x15\x59\x38\xc9\x82\xa2\xe7\x2e\xc8\x10\x37\xdc\x1d\x80\x74\x4f\xf3\x1f\x99\x66\x40\xac\xa0\xa9\x4b\x28\xaa\x55\x4c\x0a\xb1\x3b\xf0\x57\x40\xed\x8e\x0e\xdf\x68\x1d\x02\x0e\x65\xb6\xdd\x5c\x95\xa9\xdc\xf6\xd0\xc5\xb9\x54\x91\xb1\x4c\x5f\xe6\xfb\x2b\x3d\x9f\xb2\xca\x4d\xde\xa1\xd9\x1d\x2e\xae\x6c\x79\x81\x9b\x5a\xbe\x11\x3a\xdd\x3f\x03\xfc\x96\x96\x77\xfa\xc0\x2f\x55\x8a\x32\x60\x01\xac\xac\x62\x4a\x7b\x73\x01\x2e\xbf\xcd\xcd\x7a\xbf\xa4\x29\x21\x6d\xb8\x37\xfe\x90\xf3\x69\x09\x0a\x7b\x73\xc8\xa6\xbd\x38\x4a\xee\x89\xb0\x7a\xf2\xf6\xe5\x82\xfc\xfc\xe4\xbf\xec\x17\x19\x07\x56\x16\xd1\x39\xe7\x5c\xde\x51\x18\xaa\xf2\xa4\xe5\xdb\xcc\x2a\x30\xa9\x73\x8f\x60\x30\xad\x08\x18\xab\xb6\x3e\xd5\x09\x14\xb5\xb2\xac\x5b\xaa\x4e\x92\x5e\xa6\x8a\x74\xe9\x69\x9c\x01\x77\xe8\xa6\x16\xa3\x77\x50\x38\x26\x77\x28\xb1\x5f\xca\x99\x9b\x09\xe5\x12\x61\xbd\x74\xa8\x9a\x24\x7b\xb6\x28\xf9\x52\x6e\xb1\x81\x91\xb5\xd9\x9e\xe5\xd2\x96\x65\x2a\x15\x57\x03\x32\xbf\xea\x69\x15\x95\xd5\x8a\x7a\x26\xef\x00\x39\x82\x9b\xae\xf4\x59\x6d\xae\xad\x32\x25\x3e\xb0\xe4\x3e\xac\x8a\xd4\xaf\x5b\xbd\x68\x9c\xf9\xb1\xbb\xef\x38\x11\x08\x48\xdc\x32\xb0\x24\x9f\xbb\xc0\x5c\x97\x79\xda\x51\xcd\x7a\xd4\xe4\x35\xc8\xe5\x94\x21\x31\x8b\xe6\x0a\x9b\x67\x02\x6d\xf5\xee\xfd\xf2\x3f\x3d\x97\x42\x9f\x6b\xa6\x3e\x6b\x93\xf6\xa0\x6c\x1b\x35\xf0\xd9\x61\x33\xb5\xcf\xda\x54\x5c\xbf\xd7\xca\x0f\xf3\x1d\xa1\x6c\xf3\x35\x24\x55\x89\xea\x6e\x67\xfd\x08\x65\xb7\xbb\x76\xd2\x8b\x35\xc2\x13\x87\x60\x67\x98\x5f\xc9\x02\x66\x6f\x67\x35\x49\x00\x63\x4e\x2c\xbf\x2d\xe7\x5a\xcb\xc9\xd1\xe7\xf0\x69\x97\x16\xb3\x80\xd8\x5b\x59\xcd\xdc\xad\xb7\xf6\x22\x8a\x4e\xee\x6e\x11\x21\x9b\xde\x29\x3d\x95\x38\xbc\x91\xf5\xaa\xb8\x45\x9b\x3a\x18\x64\x3d\x6c\xcf\x10\x54\xc3\xc7\xde\xad\x7a\x54\x02\xc6\x10\xc5\x30\x56\xf1\xa4\xf7\x83\xbd\xfe\xf0\x9f\xcf\x0e\xf1\x6f\xbf\x61\x3b\x7b\xad\x41\x3e\x51\x11\xb0\x35\x86\xc9\x42\x9c\xad\x28\x40\x57\x53\x4b\xc1\x60\x7e\x8d\xcf\x3e\x15\x06\x4c\x85\x79\xeb\x8b\xa7\xc0\x55\x7e\x39\x7b\x05\xdc\xda\xe1\x68\xe0\x9c\x0b\x84\xa7\x45\x25\x88\x47\x22\x84\xaf\x4d\xf1\x8a\xc1\x43\xce\xb8\x5a\x0d\x2a\x96\xad\xe1\x66\x45\xfc\x40\x79\xea\x85\xb9\x65\x59\x08\x9b\xa3\x76\x9b\x4b\x6c\xe4\x78\xfd\x5c\x3e\xed\x67\x95\xe0\x3a\x6e\x0e\x86\x6a\x66\x39\xcb\x3d\xaf\xf3\x26\xba\xf0\x32\xe9\x96\x6d\xbe\x46\x26\x79\x8f\x26\x9c\xdb\xa0\x28\x74\x2e\x22\x68\x66\xd3\x5a\xcc\xe7\x88\x8a\xc0\x8c\x72\xec\x69\x4a\x14\x1b\xc8\xdd\x4d\xc0\x15\xc0\x79\xc4\xb2\x10\xef\xb5\x00\xcb\x67\x29\x6e\xa6\xdb\xad\x75\x53\x83\x6a\xa5\xd5\x16\x3c\x0e\xab\x49\xe2\xdd\x53\x6a\x6d\x6e\xe8\x89\x0a\x1d\xc9\xfd\xa0\xd4\x4f\xd8\xab\xfd\xbf\xfe\xf5\xc0\x5e\x60\xaa\x86\x1c\x6f\x18\xe6\x5c\x55\x39\x62\x8a\x60\xcc\xa6\xc7\x1c\x41\x2e\x70\x05\xa2\xc4\x6e\x53\xf9\x6d\x3a\x64\xed\x0d\x2b\x12\xf8\x57\x8f\x52\x6d\xbf\xad\x65\xe3\x36\x60\xe2\xaa\xcf\x6c\x39\x2d\x83\xc9\x65\x39\x02\xf4\x24\x07\x44\x8b\xa0\xf6\xca\x74\xdc\x65\xae\xef\x2d\x49\x81\xd3\x49\xe3\xf3\x10\xc8\x3d\xdc\x64\xa6\xde\xa8\xc6\x4c\x61\x95\xc8\x42\x9b\x30\xac\x3b\xee\xdb\xde\xb8\xad\xbd\x71\x14\xc7\xad\x36\x47\xae\x20\x49\x1e\xad\x59\x61\x98\xf2\x6d\xb4\xe6\x2e\xfa\xb6\xc2\x5b\x5a\x61\xfb\x8a\xa5\xc7\xcf\x00\x64\xcf\x5c\xe0\xf2\x15\x60\x82\x7c\xe7\xfb\xa5\x23\xcb\xb2\x21\x07\x62\xbd\xea\xb7\xc8\x81\x00\x03\x3d\xa5\xc4\x04\x62\x25\x2a\xd2\x0f\xec\x03\x36\xda\x07\x78\xb4\xaf\xc3\x8c\xb3\x5c\x61\x96\xa8\x2f\xea\x2f\x55\x33\xda\x3f\x11\x4b\xa0\x02\x91\x03\x1a\xb1\x28\xe0\xf8\x41\xdf\x8d\x06\x3b\xe7\x14\xc1\xcf\x3b\xe2\xcd\x25\xa4\x38\xc2\x13\x77\xc8\x0a\x2f\xe6\x30\x49\xc4\x0b\xfc\xdd\x68\x20\xea\x76\xee\xee\xcb\xde\x64\x15\xdb\xa1\xf4\x64\x58\x0a\x8c\x0d\xb3\x11\x80\x5c\xfb\xa1\x3b\x86\x51\xac\x2a\x83\x2e\x30\x1b\xa2\xd5\x4e\xfa\x31\x2b\x7c\xac\x81\x48\xbf\x15\xf5\x6c\xd2\xa7\xb2\x03\x66\x74\x80\x0b\x1d\x68\x60\xd3\x0e\xd2\x07\xf2\x5b\xbc\xda\x51\xac\x56\xe1\x43\xc9\xa7\x08\x6b\xd9\xda\x5c\x22\x43\x58\x18\x5b\xed\x55\x4b\xef\x82\x49\xfc\xcf\xa7\xd3\xc9\x23\xf4\xb6\xc2\xed\x03\xce\x23\x37\xb3\xb3\xa7\x86\x74\x90\x1a\xcf\x33\xb7\x07\xe0\x46\x2a\x73\x64\x56\x0c\x5e\x09\xdb\xf6\x47\x6f\x09\x8b\xc6\x51\x00\x95\x37\x60\x39\x54\x4e\xa4\xd2\x92\xf5\xa3\x1a\x12\xdc\xc3\x05\x23\xe3\x28\xe6\x80\xfd\xa0\x84\x60\x7b\xe5\x0e\xb3\x36\x7d\x96\xf3\xfe\x20\x85\xef\x4c\xcf\x42\xb9\x7f\x1c\x88\x52\x45\xb2\x6f\xd5\x52\x57\xca\x17\x65\x88\x68\x9a\x34\xbf\x55\x20\x58\xc7\xfc\xf2\x2d\xea\x00\xe4\xd2\xb6\x16\x13\x47\xd6\x57\xe7\xc9\x2e\x0a\x55\x97\xc0\x28\x4c\xd0\xe6\x96\xb3\x9a\x0b\xc5\x9a\x61\x73\x65\x85\xbb\x4e\x63\xf9\x4d\x01\xab\x63\x7e\xd8\x5b\x88\x40\x47\xb7\x5e\x3b\x90\x30\x48\x59\xd2\xe3\x44\x80\x9f\xa4\x70\x31\x8f\xf9\xf7\xc8\x49\x97\xd1\x19\x93\x05\x0e\x0d\xa3\x68\xa9\x7e\x5a\x07\x6d\x82\x5b\x5f\xb7\x4e\x0f\x29\xea\xcc\x59\x38\x68\xf9\xdf\x11\x36\xa0\x83\x31\x45\x30\xbc\x52\x9f\x88\x82\x38\xa2\x2a\xa4\xd4\xdd\xf4\x5e\x88\xbc\xf3\x02\x21\xce\x1c\x46\xb4\x54\xbc\x2e\x8c\xc6\x63\x44\x11\x66\x8e\xb4\xd0\xca\xa6\x64\xec\x9c\xc8\x83\x96\x00\x87\x50\x47\xc6\x31\x3a\x6c\x6a\x20\x26\x71\x18\x71\x50\x18\x31\x07\x2a\x88\x23\x3c\xc9\x5e\xaf\x57\x00\xaf\x16\x41\xc2\x85\x6f\xb7\x0a\x2d\x1f\xa6\x88\x22\x51\xb7\x91\xc3\x23\xf6\x43\x02\x2f\x38\x4c\xa2\x70\x50\x01\xb0\x8a\x50\xd2\xfc\x12\x67\xbc\xc5\x16\x17\xdf\x92\xd7\x7d\x50\xea\xbf\xcc\xd5\xec\x03\x77\x58\x50\xb2\xaf\x53\xc9\xaf\xde\x2b\xc8\x04\xb5\xcc\x12\x36\xfa\x3c\x97\x14\x3a\x66\x20\x69\x7b\xc2\x23\x0b\x04\x57\xd1\x8f\xa2\xdf\xfd\x06\x19\x13\x0b\x79\x12\x4b\x69\x11\xd5\x65\x93\xb4\xf0\x10\x13\x89\x56\xf4\x99\xc9\x88\x85\xce\x6e\x58\x0a\x86\x6e\x2e\x43\xf5\xf6\xe4\xdd\xd1\xf1\xcb\x93\x6e\xa5\xa8\xba\xe3\xc5\xdd\xfb\xf7\xbd\x7f\xdf\xc3\x3a\xc9\x51\x52\x53\xe0\x5a\x4e\xf2\x6d\xd6\xae\x61\x8e\x0d\x46\x9c\x52\x11\xc6\xf5\x4a\x3d\x72\x10\xca\xa5\x55\x0c\xa2\x5f\xbe\x73\x4a\xe5\x1e\x8b\x55\xd0\xd4\xc4\xf4\x13\xab\x08\xe8\xd8\xfd\x36\x8c\x9b\x6a\x42\xc9\x62\x6e\x37\x02\xd6\x01\x53\x55\x6f\x4e\xb5\x9f\x1e\x94\xca\xe1\xa6\x7a\xfa\xba\xfa\x9f\xf5\xc5\x2b\x9f\xe9\x9a\x95\x69\x64\xbb\x61\x29\x31\xd6\x19\xa4\x54\x47\x8e\x9a\x56\xe7\x31\x8a\x4d\x9a\x3b\xa1\xba\x78\x5e\x8d\xfe\x5a\x76\xad\xaf\xa0\xba\x89\x59\xc3\xf2\x7b\xd2\x41\x58\xe6\x9d\x4d\x43\xf4\xb3\x3c\x08\xf2\x36\xfb\x89\xe3\xdd\x1e\xb0\x5f\xc8\x00\x7a\xbe\x88\xe2\xf0\x64\x31\x99\xf0\xcb\x54\xb0\x24\x3f\x88\xe0\x73\x31\xc0\xdf\xa7\x69\x72\x50\x35\x60\x31\x3b\xe8\x41\xca\xb5\x0a\x3f\x31\xe9\x75\x27\x1e\x9b\x28\x04\xee\x87\xab\x39\x72\x54\x4b\x07\xab\x56\xf5\x47\x11\x5d\xbe\x96\x4b\xea\x7e\x4c\x90\x03\x75\xbd\x6c\x85\x38\x27\x80\x71\x8c\x42\xe7\x5f\x7f\x5a\x2e\x19\xa2\xb3\xd5\xea\x5f\x7f\x6a\x26\x65\x51\xf2\x11\x47\xbf\xca\x52\x99\xb2\xba\xa5\x86\xbd\x55\xa5\x2e\xbe\x53\x34\x75\x39\x2b\x4c\x71\x0b\x5f\xb7\xf7\x73\xce\x0c\x3f\xfb\xe0\x34\xab\x22\xf5\xef\x5d\x6b\x0d\x9b\xff\xfd\xbb\xe3\x1d\xc5\x29\x7e\x13\x7f\xed\x22\xbf\xc5\x1d\xac\x2e\x75\x13\xd2\x16\x55\x79\x81\xad\x63\xcb\x35\xbc\x6f\xb1\xf5\x17\x8e\x61\xb9\xec\xe2\x89\xe4\xf9\x38\x47\x69\x32\x78\x6a\x3b\x08\xb6\x50\x31\x91\xf8\x2a\xdd\x71\x22\xf2\xb7\x89\x12\xb5\xae\xc4\xb8\xf6\x15\x78\xe3\x54\xef\xe4\xa6\x68\x9e\x51\x29\xed\xab\xa7\x7a\x58\x71\x0a\x56\xa2\x77\x92\x92\xbc\x94\xf7\xd8\x8c\xe8\xa5\x98\xdb\x0e\xd9\x4b\x81\xdf\x80\xea\x9d\x6c\x40\xf3\x4e\x36\xa0\x78\xcf\xb6\x44\xf0\x14\xb9\x4b\x31\xbb\x15\x82\x97\x91\xbb\x67\x37\x42\xed\x9e\x6d\x91\xd8\xa5\x5b\xb3\x40\xee\xde\xe6\xb6\x6c\x27\x82\xd7\xb2\xf4\x6f\x95\x33\x96\xb3\x4d\xc6\xd1\xd0\x0e\xdc\x36\xf7\x68\x0c\x7d\x23\x2c\xa4\xa9\xf8\xf8\xdd\xf3\x91\x25\x64\xfe\x4e\x99\xc9\xf2\x3c\xb7\xd5\xc5\x1a\x44\xf6\xe9\xd7\xc2\x55\x3e\xbd\x11\x32\xfb\xf4\x1b\x4f\x79\x13\xb4\x70\xfb\x8c\xa5\x49\x09\x7f\xff\xdc\x65\x01\x97\x5b\x62\x31\xc7\x0b\x91\xb4\xf5\x1e\x72\x9a\xc5\xf9\x6e\xa7\x83\x35\xc8\xe1\x93\x6d\x93\xc3\xed\x72\x9d\x26\x41\x7c\x72\x23\x04\xf1\xc9\x3a\x04\xf1\x27\x61\xaf\x41\x22\x35\xb0\x5a\x05\x20\x62\x5b\x67\xf0\xca\x09\xa6\x84\xf0\xed\x87\xaf\x8c\x0d\xcc\x69\xe7\xe5\x34\x0a\xa6\xa2\x99\x4c\x36\x20\x8a\xb4\xde\x2e\x17\x5a\xf7\xbc\x5a\x23\x4a\x61\x18\x91\x54\x2d\x9a\x23\x9b\x0d\x34\xf2\x48\x65\x7d\xb1\x13\xc7\xba\x08\x4b\x7e\x12\x28\x85\x57\xae\xac\x47\x44\x2e\x85\xc5\x04\xb7\x74\x19\x2c\xcd\x2c\x4f\xf9\xbb\x53\xe4\x2a\x47\xdc\xc7\xf5\x8e\xb8\x15\xdd\x8b\x84\x76\x39\x4c\xab\xe0\xf8\xa3\x34\x4b\x0e\xc7\xb2\x0a\x6c\x34\xc6\x91\xc8\x9f\xa2\xe0\xb3\xd4\x78\x3f\xad\xf2\x99\xd6\x0b\x91\x2d\x40\x09\xda\xb4\x1f\x23\xa1\x82\xcc\xeb\xa5\x4c\xe7\xad\xc9\x91\x35\xb3\x97\xd8\x34\x6e\x45\x19\xe4\xb6\x1b\xfc\x71\xc5\x0e\x6f\xd8\xc7\x6d\xee\x79\x51\x7e\xac\xd5\x2d\x2f\xb2\x1e\xd7\x6c\xe3\xea\x3b\xbe\xfe\x7e\xd7\xfd\x3a\x9e\xcc\x36\x09\x63\xbf\x51\x7a\xac\xdc\x39\x39\x38\x4b\xdb\xc7\x98\x58\x7e\x42\xaa\x93\x79\xee\x9a\xaf\x86\x6d\x9b\x1b\xc4\xac\xff\xd6\x9e\x56\xe5\x9f\x5a\xe2\x9d\x2a\xd3\x82\xe5\x9a\x15\xb3\xdc\x15\x2c\x49\x59\xc2\x8d\x1c\xee\xa2\x44\x25\xa2\x31\x8d\xcb\x39\x7b\x93\x65\x9e\x99\xf7\x89\x66\xa7\xe1\x45\x25\x27\x57\x0d\x5e\xfb\x7c\x7b\x2a\xed\xc5\x59\x95\xa9\xaf\x9d\xe1\xcc\x3c\xca\x48\x14\xa7\xaa\xcd\x68\x55\x62\x31\x74\x4e\x12\xd9\x77\x94\x1c\xeb\x82\x82\x1d\xfc\xc8\x31\x61\x3d\xc3\x7f\x58\x9a\x1a\x75\xc0\x8b\x2c\x6e\xee\x42\x4c\xf0\xd5\x4c\xe6\x33\xec\x64\xd4\x7f\x54\xc8\x39\x97\x26\x23\x91\x5c\x72\x9a\x28\x04\x9c\xe6\x52\x57\x88\x3f\x2e\x21\x56\xb5\x01\x62\xc4\x90\xf4\xdd\x48\x1d\x41\x9e\x37\x79\xdf\xe4\x60\xa8\x33\xa9\xc3\x94\x7a\xb7\x89\x1e\x2c\xec\x1d\x5b\x92\x3d\x41\xf9\x24\xd0\xae\x7a\xd5\xb8\x0f\x0e\x2c\xc9\x1a\x0f\x2b\xcf\xfd\xa3\x1c\x05\xd0\x43\x99\x34\xf2\x45\x3a\x7c\x15\xa5\x2b\xde\x02\x8f\x2a\x78\xb4\x16\x18\x54\x8b\xda\x01\x83\x8f\x80\x82\xba\x98\xab\x28\xbf\x2d\x80\xfb\x43\xe6\x20\xf7\x43\x9a\x6a\x46\x60\xe3\x61\x8a\x83\x83\xf4\xaf\xc3\x34\xea\xa9\xcd\x8c\x0f\xc0\x21\x78\x68\x9d\x75\xad\x3f\x47\x17\xd7\x11\xcb\xbd\x6a\xa5\xad\x96\x87\x1d\x61\x28\xe5\x25\xdf\xd8\x17\xb7\xec\x50\xb9\x4d\x57\x5c\x82\xe5\x06\x28\xe5\xb0\xd5\x9e\x0d\x55\xe5\x7e\x35\xed\x5d\xe3\x43\xf9\xbe\x50\x45\x2a\x4d\x83\x93\x73\x53\xb1\x17\x55\x12\xe5\x9b\xfa\x0b\x1c\xfd\xfa\xe3\x95\x27\xe5\x24\xbf\xcf\x88\x4c\x34\xe6\xd7\x55\x14\x13\xe1\x7a\x18\x05\xac\x37\xa7\xe4\xcb\x95\x74\xf3\x9c\xf6\x26\x90\xa1\x4b\xce\x7f\xbb\x5c\x46\x16\x52\x0e\x9e\xa4\x4f\xcf\xfa\x11\x0e\xe2\x45\x88\x12\x0f\xf5\xff\x16\xe1\xd0\x5f\xf9\x7e\x3f\x21\x94\x79\x85\x84\x7d\x69\x7a\x61\x0e\x53\x5f\x04\x8d\x23\x8e\x7e\x48\x91\xc7\xc4\x43\x91\xb1\x99\x8e\x3c\x3c\x3a\x5d\xca\x35\xf8\x77\x77\x95\x25\xdb\xf1\xfd\xb4\xe4\x99\xd4\x18\xa0\x7e\x66\x60\xf6\x77\xe8\xf5\x35\xff\x92\x8e\xe4\xb7\xe6\xcb\x5c\x27\x2a\x1b\x1a\x2e\x75\x56\xd0\x2d\xfa\x3b\x50\xf6\x08\xd3\x1e\x0b\x2d\x72\xdd\x66\x79\x76\x8c\x12\x1d\x62\x81\x97\x5a\x6b\x3a\xc4\x20\x83\x69\x48\x41\xa1\xbb\x21\x14\x65\xa7\x4c\x2f\x9d\xba\x25\xce\xd6\xf4\x96\xb1\x7d\x52\x8d\xeb\x93\xee\x98\x3e\x69\xc0\xf3\x49\x5b\x2c\x2b\x3d\x4c\x86\xe4\x93\x02\x8a\x4f\x72\x08\x56\x3a\xa2\x61\x05\xda\x28\x12\xac\xb0\xb7\xa7\x55\x43\x7b\x13\xc0\xfc\x15\xd0\xda\x1f\xeb\x77\xbb\xa8\x30\x55\x66\xaf\x23\xa6\x56\x12\x50\x00\x47\xba\x02\x5e\x56\x1d\xcc\x28\x0b\x66\x38\x50\x0c\xc5\x83\xa2\xfe\x7b\x68\x36\x3b\xb1\x34\x3a\x71\x87\x46\x9a\x49\x9d\xd4\xd2\xc3\x23\x3a\x82\xaa\x6c\x95\xc8\x09\x99\x95\x50\x53\x8f\x95\x5a\xce\xf7\x81\x7a\x30\xc2\x60\x7f\x34\xd2\x05\x0d\xe5\x8e\x56\xe4\x24\x9b\x30\xf6\x75\xb2\x43\x1d\x5e\xa0\x16\x15\xaf\x40\xc7\x99\x15\xf3\x56\x25\x99\x77\x1e\x4d\xb7\x44\x1e\x9a\xf4\x48\xf8\xbe\x19\xa0\x50\x8f\x9e\xe2\x38\x38\x75\x90\x2b\x0c\xa3\x5e\x98\xa3\xac\x0a\x1f\xcb\x29\x02\xea\xaf\x58\x7f\x0a\x71\x18\xcb\x82\x70\x96\x84\xe4\x6b\x44\x0d\xdc\x9f\x1c\x5b\xe7\xb3\x97\xc9\x4f\x4f\xe1\x47\x7b\xd4\xc0\x25\x8d\x98\x10\x1f\x15\x7f\xae\x53\x86\xeb\x7f\x53\x8f\xfc\x54\x7f\x61\x44\x11\x24\x08\xf3\x07\x9f\xd1\xd5\x9c\xa2\x24\x39\x96\xa2\x4e\xf6\x4d\x75\x42\x01\xb3\xca\x8b\x70\x9e\xd4\x70\x68\xe7\xc9\x08\x7f\x36\xa3\x06\xf4\xed\x5e\xe7\x5d\x6a\x16\xd8\x2e\x7a\x9b\xa6\x0b\xb3\x97\x55\xe6\xce\x45\x0f\xd4\x4b\x67\x19\x47\xbc\x1d\x77\xff\x80\xc8\xf8\x8b\xf6\xba\xdf\x0d\x8b\x19\x17\x1d\x79\x19\x3c\x5f\xc4\x90\xf6\x02\x12\x8b\x5a\x2e\x72\xde\x85\xcc\xde\xe5\x1d\xed\xca\x8a\xe2\x3f\xa8\x2c\x6a\xca\x3a\x90\xe5\x54\x6b\x13\x6b\xd7\x80\x9a\xea\xf4\xdd\x35\xd2\x13\x9b\xae\xed\xa7\x59\xfe\xf4\xff\xff\xff\x5b\xeb\xb3\x6e\x06\xfe\xf2\xf7\xef\x28\x0a\x50\x88\x70\x35\xd4\xad\xf2\xca\xb4\x42\x32\x25\x97\x5d\x31\x1c\x5a\x53\xef\x64\x29\x2d\x1a\xb5\xb3\x30\xa7\x18\x99\x52\x34\x56\xe7\x8e\xff\xd9\x63\xc4\x92\x33\x95\x92\x05\xcb\xbc\x5e\xc3\xa0\x9f\x05\x44\x88\xd2\x14\x86\x0d\x46\x48\x6d\x52\xbb\x50\xa3\xa8\xb6\xa8\x5d\xf9\x67\x05\xf7\xda\x35\x2d\x2a\xa6\x5d\xd9\xf1\xfe\x7d\x53\x4b\x8a\x6b\xe6\xdd\x2b\x80\xb8\xae\x25\xc5\x66\x1d\x29\x5a\x06\x32\xca\x2a\x09\x68\xaf\xa8\x5a\x33\xc0\x91\x16\xd4\x8c\xca\x17\x52\xfd\x1a\x3a\xf8\xd6\x5f\xb7\xd4\xc7\xb7\xd3\x4d\x37\x6e\xe5\xa2\x92\x59\x6e\xb0\x9e\x9b\xe2\x3d\x55\xc5\x37\x18\x85\xeb\xc2\x69\x06\xe5\xde\x1a\x67\xd9\x71\x1e\x66\xa9\x90\x3c\x1d\x5a\xcb\x8e\xdd\x78\x62\x6c\x2e\x45\xf7\xf1\xd8\x58\xe0\xbc\xf3\xb3\x53\x76\x41\xe8\x7c\x80\x1a\xbb\xb8\xdd\x53\x94\xcb\x71\x69\xde\x62\x4d\xe7\x25\x5b\x28\xf3\xf6\xab\x4a\x65\x56\x0f\xdb\xf6\x6e\x47\xa5\xc2\xe9\xa4\x10\x9e\x93\x39\xb9\x40\xb4\x37\x43\x78\x91\xf6\x88\xbe\xcc\x21\x0e\x55\x35\x42\x23\xb8\xf5\x33\xba\x3a\x27\x90\x86\x47\xc2\x98\x9c\xf2\xb4\x96\xb3\xf6\x38\x55\x45\x3e\x34\xad\x80\x1c\xf1\x1a\x49\xcd\x5e\x08\x8f\xec\x9d\xc8\xef\x3b\xe9\x58\xeb\xb0\xc6\x68\x34\x99\xb4\xe7\xdc\x1c\xe7\x0d\xa1\xc8\x32\x50\xab\x55\x6c\x09\x93\x58\x8d\xd6\x00\x65\x96\xc8\xc8\x66\x50\xc7\x04\x37\x6e\x6a\x1b\xb7\x93\xf5\xc0\xc1\xd1\x31\xc9\x95\x25\x9a\x6e\x93\x33\x7a\x29\x9b\xd6\x50\x89\x7a\x5a\xd0\x1a\x67\xad\x6a\x59\x55\xf7\x5d\x55\xb8\x45\xf8\x97\xa4\x86\xaf\x2e\x58\x16\x45\x1a\x85\xd4\xea\x6a\xff\xe8\x2e\xe6\x8e\x02\x80\x15\x2e\x18\x72\xfb\x35\x4d\xb2\xb2\x97\xea\x22\x4b\x69\x12\x85\x16\x9d\xb7\x36\xb2\x56\x7c\xd6\x50\x91\xc9\xfe\xdf\xb1\x04\xd9\x91\x78\x6c\x1c\xa6\x1e\xc9\x39\x70\xe6\x1d\x21\x69\x65\x05\x4c\x4f\xcf\xf3\x2d\x80\xda\xbe\x55\x5d\xa5\xa7\xda\xaf\xba\x56\x89\x6b\xec\xb0\x55\xfd\xb8\xfd\x6a\x93\x64\xc9\xd4\xfd\xeb\x02\x2d\x50\x4d\x41\x08\x1d\x82\xd5\xde\x11\x2f\xd5\xc1\x64\x36\xba\x72\x6d\x91\xaa\x1a\x75\x1d\x8e\x74\x97\x45\xb4\x2d\x48\x27\xbc\xb7\xa0\x6c\x0d\x05\xa9\x36\x01\xbf\x4d\xab\x76\x34\x70\xdd\x0b\xc4\xe2\xda\x07\x9e\x82\x67\xa0\x32\x8c\xae\x35\x97\x57\x6c\xf6\x10\x3c\x02\x8f\x2d\xf9\x98\x2c\x46\xdc\x7c\x20\x7d\x7b\x61\xc4\x55\xa5\x42\xea\x6b\x85\x64\xd2\x45\xc3\x5c\x6e\xd3\x26\x7b\x23\xa9\x74\xad\x36\xd9\x75\x55\xeb\x9f\x23\x1c\xde\x0f\x85\x3a\xfc\xed\xe9\xb3\xbf\x3e\xe6\x5c\xbd\x4d\xa1\x2e\x4d\x2b\x6e\x2c\x15\xd8\xea\x9f\x4e\x99\x75\x81\xfb\xb7\x08\x87\x6d\x13\xec\xb2\x88\xc5\x48\xbb\x36\x72\x9e\x71\x31\x83\xd8\xcc\x60\x66\xeb\xb3\xb5\x3b\xcf\x23\xf0\xb0\x55\x72\xee\xc1\x43\x2e\x5b\x54\xa6\xc0\xfd\x2c\x06\x37\xf2\xde\x5e\x46\x6c\xfa\x0a\x8f\x89\x6b\x49\x78\xfb\x50\x95\x9d\x92\xef\xd7\x48\x7c\x9b\xc7\xa9\xd9\x55\xab\x7c\x0e\xd5\x89\xc6\x55\x7a\xb9\xde\x1c\x62\x54\x51\xc5\x21\xeb\xa2\x29\x56\xcc\xa6\x7e\x29\x70\x7d\x1a\x75\x4e\x6a\xc0\x5f\xd7\x0b\x56\xa7\xe4\xad\x57\x0b\xd4\xf9\xb7\xd5\x39\x20\xd7\x67\x2b\x4f\x25\x35\xce\x0e\x2b\xdc\x69\x49\x6d\x4e\x92\x48\x6b\xaa\xdc\x18\x8d\x6b\x4c\x22\xe5\xc9\x6e\x68\x49\xa8\xd2\x70\x95\x0f\x0d\x70\x23\x3c\xe1\xb2\x42\xe6\x49\xd1\x5d\xd3\xf5\x4a\x76\xa1\xd7\x32\x71\x10\x56\xe5\xef\xe4\x73\x46\xe1\x78\x1c\x05\xce\x98\x92\x99\x8e\xd2\x49\x1c\xb2\x60\x49\x14\x22\xe1\xb8\xae\x42\x22\x74\xa4\xd9\x0c\x25\x53\x51\x53\x4f\xb7\x8d\x70\x5d\xd3\xd6\x49\x82\xda\xe2\xc4\xea\x61\xd2\x1d\x2f\x1f\xb2\x6e\x32\xdc\x08\xe7\x71\x47\xbb\xb8\x48\x4c\x85\xe6\x4c\xab\x90\x11\x90\xd9\x6c\x81\x65\x5e\x29\x91\x6e\xce\x8a\xc9\xb5\xf0\x62\x85\xfe\x0d\x1f\xb7\xb8\xa4\x5c\x3a\x17\x15\x33\xc6\x1c\x4c\x3e\x85\x74\x75\xcf\x11\xbb\x44\x08\x1b\xb9\xa0\xd4\x44\x42\xc8\x60\x20\x02\xb2\x92\xbe\xf5\x70\xb7\x4b\xa6\x68\x51\x5d\xde\xa5\x4a\xa5\x56\x39\x90\x20\x0e\x15\x13\x4e\xd9\x2d\x34\xcf\x37\x74\x2e\xf9\x7f\x47\xe7\x64\xc1\x4a\x27\xf4\x9e\x1e\x98\x0c\x60\xdb\xd1\xd9\x38\x7e\x47\x76\x9d\xdb\xd7\x15\x6c\xfd\xda\x3b\xb2\x22\x8c\xd0\xe0\x6a\x38\x11\xec\x21\xcc\x68\x84\x92\x62\x64\x49\x3e\xcc\xa4\xb8\x03\x80\xab\x38\xc6\xbd\x10\x5d\xa0\x98\xb3\x80\x3d\x7e\xcc\xf7\x0a\x0d\x8b\x89\xa6\x74\x7f\xb6\x45\xaa\xec\x73\x81\x43\x44\x13\x06\x71\xd8\xb3\x7c\x57\x35\x44\xc1\x53\xaf\xa2\x6f\x4d\xfc\x8a\x9d\xb5\xe2\xe0\x2a\x50\xde\x49\x4f\x17\x23\x48\xb9\x64\x80\x3f\xb7\x51\xe5\x97\x74\x9e\x56\xfd\x81\x4d\x45\x97\xd7\x79\x1a\xd5\xd2\x4a\xf1\xa4\x2f\x7e\x3e\x3e\xf9\xf4\xfa\xe5\xd1\xfb\xb7\x9f\x3e\xbe\x7f\x9d\xc7\xee\x04\x69\xcf\xf5\x43\xc3\x75\xa3\x9e\xf9\x95\x20\x89\xd8\x43\x4c\xc8\x1c\x61\x44\x1d\x4c\x28\x1a\x23\x4a\x11\xcd\xf4\x87\x54\x74\xee\x7e\x3a\x8f\x61\x33\x32\x1c\xe7\x35\x47\x9c\x33\x59\x44\x21\xaa\x3a\x3a\xed\x0d\x33\xe5\x63\x76\x98\x2b\xa7\xb3\xc5\x43\xc3\xb7\x5b\xf1\x98\x74\x3e\x25\xa2\x93\x1a\x4a\xd7\x7c\x16\x44\x0f\xb9\xe7\xb7\xbd\xf3\x43\x12\x24\xf7\x6f\xe3\xd7\x6c\xf9\x83\xbb\xde\xf2\x2f\x48\x20\xfc\xa2\x85\x8e\x7a\xe3\x3d\xdf\x69\x01\x2b\xb8\x88\x32\x04\x3f\xb3\x29\xa2\xfa\x4e\x73\xd8\xd5\xdc\x7a\x3a\xad\x37\x53\x65\x70\x4b\xf1\x8a\xaf\xde\xb6\xdf\x36\xaa\x51\xe0\xb1\xf6\x74\xdf\xd0\x16\x6d\xc3\xd1\x6c\x42\x96\x6d\x45\xce\x9a\x37\xcc\x56\x78\xc2\x3f\xcc\xbe\x69\xc4\xd6\xcd\x6d\x9f\x0a\x5e\xfb\x7e\xec\xa2\x8d\xc5\xa0\x3f\xcc\x0e\xaa\xc5\xd4\xcd\xed\x1e\x8b\x68\x79\x53\x3b\xa7\xb9\x26\xae\xd9\x67\x4b\xd5\x40\x07\xe7\x9a\xa6\xe8\xdf\xf5\x13\x55\x6f\x49\x53\xba\xa9\x9e\xb4\x79\x3a\x6d\x1e\xdd\x42\x01\xae\xcc\x64\x72\xf7\x55\xb7\x3e\x5f\xdc\xa3\x42\x0a\x83\xc7\x7f\x3d\xff\xe5\xbf\xde\x7c\xde\xb8\x90\xc2\x66\xa5\x10\x94\xf1\x77\xbb\x35\x11\x3e\x5f\xc8\x88\x8c\xfb\x5c\x12\xa1\x85\x9a\xb1\x31\x42\xc2\x38\xc9\x37\x95\xcc\x3a\x47\x2e\x36\xcc\x63\xed\x5a\x8a\xdf\x96\xc2\xeb\x5b\x58\xa6\xb6\x98\x24\xe3\x6f\xe8\x6a\xab\xc9\x31\xfe\x86\xae\x1c\x42\x9d\xb1\x4c\x48\xd1\x3d\x27\x86\xd8\xaa\x24\x58\x70\x92\x9e\xfd\x5d\x4c\x8b\xf1\x14\x08\x3b\x51\x8f\xd1\x68\x56\x9e\x9b\x9a\x93\xdc\x93\x73\x48\x65\x91\x13\xf9\x34\x7f\xc7\xab\x0c\x1c\x30\x0c\x23\x99\x2a\x23\xf3\x63\x51\xa0\xad\x99\x28\x23\x9f\x95\xa3\x84\x94\x0e\xb9\x34\x6c\x1e\xc7\x0a\xd7\x1f\x88\x23\x43\x23\x1d\xa8\xfa\x06\x0e\xc2\xa1\x03\x9d\xcf\xe8\x4a\x1a\x3e\xd4\xb7\x01\x09\x51\xf1\xeb\x3d\xbd\x3a\x6b\xdd\xd5\x36\xfe\x54\xb9\x26\x66\xfa\xef\x8d\x97\x49\xd4\x22\x31\x28\x8f\xc1\x01\xf3\xbe\x61\xc2\xaa\xba\x4d\x3b\xd8\xb3\x2a\x8e\xda\x98\x7f\x1b\x3d\xe5\x2c\x0d\x4b\xee\x51\x8c\x4c\x26\x71\xad\xc7\xa8\xf5\x4c\xb7\x60\xa6\x2b\xf3\xc9\xfc\x6f\x92\x25\x92\xb1\x26\x1c\xe2\xf8\x96\x8d\x6e\x3c\x95\x90\xe8\xfd\x9c\x7c\xa9\xdf\xe1\x8d\x54\xe5\x98\xef\xdf\xb5\x5c\xd5\x1b\x49\x50\x81\x96\xee\x2b\xe7\x2b\xd7\xdd\x94\xb2\xfe\x22\x88\xd5\xb6\x93\x0b\xaa\x5e\xab\xd5\x53\xc6\xe2\x76\x93\xfc\x1e\x49\x32\xd1\x43\x61\xc4\x08\xcd\x5f\xc6\xc0\xfd\x41\xd1\x5e\xce\x80\x7c\x46\x57\x32\x9f\x58\x8e\x20\x43\x46\xce\xcb\xd8\xd0\x58\x58\x23\x51\xde\x85\x9a\x2a\x6e\x53\xe5\xa2\xbd\x78\xcb\x97\x0f\x52\x94\x8f\x44\x33\xae\x9d\x96\x29\x70\xcc\x13\xa7\x21\xdd\xf8\xea\x30\x42\x3d\xda\xa1\x73\x9d\x02\xc2\xd5\xc7\xa2\x3d\xdd\xb7\x96\x84\xdf\x16\x7b\xb3\x6e\x86\xa7\x77\x54\xa4\x37\x45\xa5\x04\x4a\x37\x9f\xfe\xa9\x1a\xf2\x7b\x9f\xfc\x69\xad\x22\xe2\xf7\x33\x09\xd7\x57\xbb\x0a\x25\x3a\xbc\xc5\xe4\x56\x9f\xd1\x55\xab\xb4\x56\x2d\xe4\xb1\x2e\x49\xad\xdc\xdf\x43\x4a\xab\xb6\x09\xad\x5a\xe0\xae\x4b\x3a\x2b\xf7\x2e\x92\x59\xb5\x4f\x65\xd5\x39\x91\x95\x79\xff\x94\x51\x7d\xc7\x39\xa9\x72\x4a\xa9\x6d\x3a\x3e\x23\xcc\xf9\x29\xaa\xd2\x95\x44\x58\xe8\xb4\x94\xd3\x99\xe7\x9e\x33\x02\x5d\x1f\x70\x56\x6d\xb8\xbb\x7f\x0f\x33\x57\x55\x26\xc1\x19\xb1\xfe\x04\xb1\x17\x90\x41\xcf\xdf\x61\xf4\x6a\x59\xca\x9c\x12\x40\x16\x4c\x3d\x22\xdb\x37\xa6\xcc\x91\xdc\x93\x91\xd5\x05\x6b\x3e\x07\x88\x89\x28\x3c\xf6\xd5\x3e\xd7\xe9\x6e\xf2\x19\x63\x0c\x11\x7e\x48\x8d\xdc\x38\x32\x43\x8c\x94\x2e\xfb\x5c\x34\x34\x12\x12\xf1\x81\xf8\x23\xe0\xba\x3a\x6d\x8c\xbb\xe7\xee\x8e\x46\xf4\x39\x1d\xba\xae\xaf\x1f\x5a\x07\x14\x3c\x76\x29\x15\x8d\x78\x0a\x76\x05\xdc\xfc\x6f\xfd\x89\xae\x50\xcb\xa6\x94\x5c\x3a\x64\xb5\x5a\x3b\xbb\xcc\xe7\x8b\x7b\x94\x56\x66\x36\x3d\x0f\xde\x5c\x3c\x64\xb7\x97\x56\x66\x7b\xd9\x64\x52\xc5\xeb\xa6\x69\x65\x3e\x5f\x18\xf9\x64\x4c\xcd\xeb\xef\x3c\x9d\x4c\xee\xae\x6a\x9d\x4b\x46\xed\xdf\xcd\x92\xc8\xb4\x40\x47\xfb\x14\x32\x6e\x55\x32\x16\x55\xaf\xc2\xca\xa7\xb5\xb0\x84\xb5\x00\xb2\x65\x0a\x16\xb7\x3e\x67\x85\xa9\x88\x38\x10\x32\xd7\x4f\x4a\xd3\x78\x06\xdc\xb1\x56\x42\x8e\xa3\x18\x59\xf3\x77\x3b\x8e\x85\x6f\x6b\x9b\xa8\xa5\x7a\xe0\x30\xe8\x7f\xbe\xe8\xa7\xc3\xcb\x9f\xd6\xb0\xe4\xa2\x66\xd6\x90\x82\x69\x34\x99\x1a\xfa\x43\x8b\x42\x31\xeb\xa0\x41\x93\xb8\xd7\x2a\x2d\xc2\xcd\xae\x77\x87\xa4\x02\xee\x1f\x20\xa5\x40\x0b\x8c\x75\x4c\x28\x60\x49\x27\xd0\xc1\xbc\x7d\x9b\x7e\xef\x6d\x12\x09\x58\xdd\x26\xb6\x93\x46\xe0\x86\xcf\x6d\x75\xf7\xbf\x44\xe8\xd2\x4d\x93\x0e\x6c\x23\x4f\xc9\x4d\x66\x1f\xa8\x34\xb8\xdd\x8f\xdc\x03\x15\x16\x88\x4e\x99\x07\x1a\xac\x18\x9b\xe5\x1d\x68\x6d\x4b\xb1\x7c\xb4\x46\xce\x81\xd6\x19\x07\x9a\x10\x9b\x03\xa4\x5b\xb6\x81\xd6\x4a\x99\x1b\x8f\xc9\x5e\x2f\xbf\x80\xfd\x30\xad\x9d\x5d\xa0\x42\x27\x77\x2b\xb9\x05\x1e\xdd\xd7\xd4\x02\x9d\xb6\x5f\xc7\xb4\x02\xed\x49\xd6\x1a\x49\x05\xb6\xb3\x31\xdb\x90\xb5\x75\xee\x82\x8a\x44\x02\xdd\xb3\xb1\x57\x37\x5a\x2f\x83\x40\xf7\xf4\x01\xfb\x2d\x15\x6a\x6b\xa5\x0f\xd8\x8a\xd2\xec\xfe\x67\x0b\x88\x09\xbf\x40\xee\x87\xa6\x24\xfa\xed\x6f\x17\xff\xfb\xcb\xfe\xaf\x76\x4d\xc9\x03\xc8\x18\x4d\xca\x3a\x0d\x7d\x75\xda\xb4\xe7\xb9\x49\x8a\x6d\x73\x08\x06\x05\x1a\xa1\x0d\xc9\x17\x93\x1c\xe5\xfd\x32\x8b\x45\x11\xb9\x29\x63\xf3\xe1\xde\xde\xe5\xe5\x65\xff\xf2\xb0\x4f\xe8\x64\xef\x60\x7f\x7f\x7f\x4f\x34\xaf\x7a\x29\xbe\xdd\x73\xcd\x9e\x86\x5f\x54\x86\x83\xf2\x27\x83\x67\xcf\x9e\xed\x55\xbf\xb6\xf4\x78\x19\x85\x5c\x12\x77\x1f\x3e\x9c\x7f\xd1\xcf\xa6\x88\x8b\x81\x85\x87\x17\x11\xba\xfc\x91\xf0\xdb\x63\xdf\xd9\x77\x1e\x3e\x74\x1e\x3e\x4c\x5f\x21\x9a\xc8\x1a\x77\x83\xfe\xc0\x76\x51\x29\xbc\x4c\xda\xd4\x9b\x09\x22\x1a\xc4\x28\xcf\x5f\xf1\x9e\xd3\x1b\x8b\x83\x70\xf0\x24\xfd\x79\xc5\x7f\xea\x5f\x09\xbb\x12\xac\x18\xa3\x10\x27\x63\x42\x67\x3d\x42\xa3\x49\x84\x87\xce\xc1\x93\xf9\x17\xe7\x60\x5e\xeb\x19\xd1\x05\x82\x41\x67\x08\x06\x5b\x86\xa0\x80\x83\x87\x6d\x91\xf0\xf0\xe6\xb0\xd0\x06\x86\xc1\xb6\x61\x38\xc8\x81\x90\x41\x54\x83\x86\xf9\x17\x01\xc6\xcd\x40\x70\xd0\x12\x82\x83\x2d\x42\xf0\xb0\x3b\x12\x1e\x6e\x1b\x0b\x0f\xbb\xa3\xe1\xe1\xb6\xf1\x70\x78\x98\xdf\x8f\xcd\x20\x1c\x1e\xf2\xed\xb8\xc5\x13\x31\xe8\x0a\xc1\x60\xb0\x5d\x08\x8a\x38\xd8\x6f\x8b\x84\xfd\x9b\xc3\x42\x0b\x18\x24\x1a\xb6\x08\x43\x36\xa8\x3c\x13\x83\x16\xfb\x71\x9f\x9f\x89\xc1\x16\x61\xc8\x81\x90\xad\x4c\x0d\x08\xf3\x2f\x62\x39\x6e\x08\x0b\xad\x40\xd8\xdf\x36\x0c\xdd\x17\xa2\x61\x1d\x6c\x32\xc9\x16\x98\x8c\x83\x3c\x59\x3f\xe8\x7a\x94\x0f\x0e\x36\x3d\xca\xf5\x10\xb4\x38\x46\x12\x84\x8d\x8e\xd1\x41\xcd\xe2\x1d\xb4\xb8\xe1\xf9\xe2\x1d\x6c\x74\xc1\x1f\xd4\x6d\xe1\x56\x20\xec\x6f\x19\x86\x67\x39\x10\x9e\x35\x43\xf0\x6c\xfe\x85\xff\x6f\x5b\xe3\x1f\x3e\xca\x1f\xe3\x47\x2d\x88\xfa\x23\x7e\x8c\x1f\xdd\x18\x0c\x2d\x90\x20\x40\xd8\x22\x16\x9e\x75\x46\xc2\xb3\x06\x1c\xdc\x0e\x21\x79\x9a\x83\xfb\x69\x8b\x53\xfc\x74\xfe\xc5\x79\xba\x3d\xc4\x0d\x1e\x77\x85\x60\xf0\x78\xbb\x10\x14\x70\x70\xf8\xb8\x25\x12\x0e\x1f\xdf\x18\x16\xda\xc0\x20\xd0\xb0\x4d\x18\xf2\x68\x38\x68\xb1\x12\x1c\x0b\x07\x5b\x5c\x89\x3c\x04\x83\x16\x48\xe0\x10\x0c\xb6\x88\x83\xc3\xc7\x9d\x91\xc0\x97\x60\xab\x58\x28\xc0\xd0\x06\x0d\x02\x86\x3a\x3c\xdc\x10\x31\x79\x54\xc7\x13\x0c\xda\x88\xfd\x42\xd4\xdb\xe8\x36\xac\x85\xe1\xb0\x2d\x0c\x87\x5b\x84\x61\x70\xd0\x99\x2b\x18\x1c\x6c\xcc\x15\xe4\x61\x38\xec\x0e\xc3\xe1\xb6\x61\x18\xe4\x6f\xe5\x41\x8b\x4b\x71\xc0\xaf\xe5\xc1\x46\x9c\x41\x61\x3f\xe4\x2f\xe6\x83\x16\xac\xc1\x01\xbf\x99\x0f\x36\xe2\x0d\x6a\x61\x68\x83\x07\x01\xc3\x36\xf1\x50\x58\x8b\x36\x78\x10\x6b\x51\x87\x87\x1b\x22\x2a\xcf\xea\x0e\x74\x9b\x8d\x7c\xd0\xb4\x91\x8b\x80\xbb\xa5\xe0\x95\x67\x5b\x75\x2c\x36\xcd\x0f\x77\x1f\x7b\xcf\x61\x17\x6e\x91\xf7\xc7\x7b\xf4\xbf\x93\xcb\x30\xf9\xe7\xfc\xb1\xdd\x26\x92\x73\x1a\xb5\xc5\xd8\xb7\x76\x39\xcc\x4d\x7d\x7d\xc7\x43\x77\x7b\x4e\x87\x6e\x95\xcb\xa1\x70\xa9\xa9\x09\x6d\x29\x7f\x61\x09\x08\x74\xda\x98\x37\x5b\xcc\xa6\x95\x77\xa2\x5b\xf2\x4d\xac\x39\xfb\x15\x65\xa6\x1c\x27\xdf\x52\x57\x3b\x12\x9b\xb0\x27\x5c\x71\xf7\xb3\xbc\x1c\x45\xaf\xa1\xb6\x2e\x7c\x75\x68\x5d\x0f\x7a\x0b\x9c\x83\x6a\x38\xdb\xc0\xd4\x35\x16\x02\x1c\x6c\x39\x1a\xc2\x42\x26\xee\x9e\x76\xa9\x3a\x5a\xf7\x87\x72\x85\xc9\xde\x3f\x5e\x7f\x3c\xfc\xa5\x96\x72\x1d\x29\x67\x4f\xfd\x97\x0b\xdc\xe3\x5c\x28\x8f\xfe\x59\x97\x10\x7e\x43\x37\xed\x47\xc0\xe5\x58\x6b\xa6\x91\x06\x8a\xf3\x14\x12\xb8\x3f\xc4\x11\xfe\x0c\xcf\x63\x54\xa4\x96\xd5\x59\x43\xa2\xe4\x75\xf6\xcd\x56\xbc\xdb\xbb\xe5\xf1\x96\x1e\x3d\xd2\x23\x27\x3c\x62\x8d\xc1\xa7\x6e\x93\xa3\x97\xe8\x2a\xc2\x93\x94\x3c\xc9\x11\x2c\xe5\xe4\xfa\xfd\xbe\x31\xab\x75\x03\x2d\xdd\xd6\x5e\xd8\x6e\x18\xa4\x75\x8e\x85\x97\x66\x11\xb8\xb2\x7f\xa6\x1d\xf6\xb6\x21\xc4\xdb\xb8\x59\x42\xc4\x60\x14\x37\xfa\x41\xbb\xa5\x44\xfc\x65\xea\xec\x56\x65\xda\x7f\x81\x92\x80\x46\xf3\xea\x52\xac\x6e\xab\xc4\xf5\xf9\x05\xcf\x75\x5a\x75\x05\x55\x71\xc8\x35\x19\x25\xf3\x69\xcc\x8e\x8e\x5f\x9f\x7c\x7a\xf9\xf6\xe8\xc7\xd7\x2f\x5f\xb4\x4d\xe3\xe6\xa6\xa1\xa3\xfc\x38\x33\xf2\x19\xe1\x1e\x5d\xc4\x28\x41\x4c\x9e\x6a\xbd\x08\xda\x33\x35\xbb\xa7\x1a\x42\xeb\x8b\x21\xdf\x9b\x2f\x7f\x4b\x37\x78\xde\xf6\xb1\x19\xbf\xc8\xbb\x39\x13\x7f\x36\xf3\x24\x8f\x81\x91\x06\x58\x8e\x2f\xce\x8f\x76\x8a\x5f\xe3\x04\x6d\x25\x86\x56\xfa\xe5\xb5\xf2\x21\x7f\x19\x46\x6c\x1b\x3e\x6b\x39\x16\xa1\x3a\xa7\x60\x9e\x2c\xd8\xeb\x51\x36\x85\x86\xe7\xb0\x9e\xbb\x67\x0c\xc7\x51\x89\x11\xed\xce\x79\x56\xe7\xc3\x59\x08\x95\x2a\x31\x57\xb7\xbe\x26\x16\xcf\xe2\xed\xd5\x9c\xcc\x45\xfa\xb6\x8e\xa0\x78\x0c\x8c\x60\xdf\x1c\xce\x53\x47\xed\xb6\x07\xa7\x35\xa4\xdd\x0a\x74\x67\x8e\xd9\xa1\xdd\x31\x7b\xbb\xd5\x09\xce\x49\x78\xd5\x39\x4a\xa3\x9d\x93\x77\x2b\xe7\x6e\x0e\x88\xa0\x27\x36\x17\x6f\xfb\x5d\x74\x13\x68\x48\xf3\xd3\x75\xc1\xc4\x63\x33\xb2\xa7\x76\xdb\xbc\x48\x0f\x65\x6b\x90\xdb\x05\xd3\x77\x38\x51\x25\xef\xdc\x6d\x44\xab\x97\x12\x65\x5a\xb3\xaf\x37\x88\x6d\x25\xb9\xac\x3e\x86\xfd\x86\x92\x3f\x96\x04\xa7\x6d\xba\xea\xa6\xa1\xe2\x19\xb7\x3f\x34\x25\x31\x8a\xd8\x82\xe2\x5d\xd4\x4f\xf9\xf0\xb5\x83\x9e\xe7\x24\x8e\x82\xab\x7b\x24\x00\xbe\xfb\xf2\x23\x59\xbc\x3c\x7e\xf2\xfb\x11\x00\x0d\x14\xdf\xa9\x8a\xac\xcc\x1a\xa7\xf9\xde\x24\x88\x7b\xec\x6a\x8e\x88\x21\xe7\x19\x31\x9e\x6a\x12\x33\x88\xe1\x44\x74\xdc\x8d\x7b\xa9\x2e\xfa\x65\xeb\xb8\xb6\xf0\x57\xcb\x6a\x58\xaa\x98\x98\xbd\x14\x16\x23\xf3\x5e\xc2\x20\x6d\x5d\x0f\xeb\x2f\x31\x39\x87\xb1\xf3\x26\x85\xd2\x79\x27\xe0\x5e\x97\xbc\x6e\x25\x47\x54\x57\x61\x16\x06\x71\xd2\x17\xf8\x8e\x4a\x0c\x79\xa1\x80\x71\x45\x14\xf4\xb6\x36\x0d\x70\xa3\xc4\xba\x97\x5a\x4b\xd2\xad\xb0\xbd\x3d\x79\xb9\x69\x17\x67\xe5\xa5\x9a\xb6\x6f\x9b\xba\x75\x9b\x6e\xdf\x17\x59\xb1\xab\x8d\x76\x64\xfb\x43\x97\xd3\x2e\xff\x2f\x89\x38\x2d\x74\x81\xa3\x76\x8f\xda\x29\x46\x0d\x2e\xcb\x76\xb9\x01\xe5\x73\xd5\x62\xe5\xf5\x17\x9d\x56\xab\x51\xf7\xd1\x8d\x50\x75\xd4\x7f\xb4\xc7\xc2\xef\x53\x99\xd0\x9a\x82\xdd\x86\xf0\x7a\x57\xf7\x29\xff\xef\x97\x08\x5d\xae\x99\xb0\x51\xe9\x3e\xda\x64\x33\xbc\x59\xad\xc8\x6d\xf0\x1d\xdf\xb4\x26\xdf\xb4\x26\x7f\x78\xad\x89\x3c\x43\xdf\x54\x26\xf5\xb3\xfb\xa6\x32\xb9\x61\x95\x49\x49\xd5\x70\xf7\xe6\x6f\x4a\xe2\xfb\x64\xfc\x0e\x7e\x1b\x1f\x5e\x7e\x3c\xa9\x28\x9c\xf1\x35\xea\x3e\x52\x04\xdf\x03\xe7\xa0\x35\x84\x65\x0e\x7e\x83\xa4\x7c\x4f\x05\xd6\xad\x18\x2d\x73\x78\xbb\x53\x5b\xf1\x0d\x59\x8b\xb7\xb5\x28\xf7\x54\x52\x6a\xdc\xbe\xbf\x03\xbb\x6b\x25\x8a\xbe\x71\xfb\xdf\xb8\x7d\xf5\xdf\x1f\x8a\xdb\xe7\x87\xfe\x1b\xaf\x5f\x3f\xbb\xbb\xe7\xf5\xab\x9a\x7c\x2d\xcc\x7c\x81\x73\xbe\x7b\x56\x5e\xa5\xff\xee\x45\x38\x61\x10\xdf\x2b\x9f\xd6\xc7\x61\xb2\x20\x97\xfb\x4f\xd7\xf1\xc6\xdf\x6e\x5a\x61\x75\x78\xdb\xf1\xee\x56\x8c\xde\x4b\x0b\xe6\x43\xe1\x52\xbf\x60\x28\x73\xb1\x0a\x74\x3e\xf8\xa4\x9f\x4c\xc9\x65\x67\x6b\x65\xab\x2c\xbd\xa5\x71\x35\x93\x75\x22\xc7\xae\x2d\x7c\xe7\x94\x98\x5a\xc1\x9a\xb5\xe2\x65\xbb\xea\x7d\xb7\x3a\x29\x60\x4c\x2f\x13\x7c\x44\x1d\x34\xf9\xcf\xd9\x99\xa5\x50\x49\xf6\xb5\x9c\x66\x5d\xaf\xa5\xec\x80\xcd\xb8\x2b\x76\xbf\x2e\x16\x6f\xd9\x1b\xd7\x2d\x55\x98\x12\x19\xdb\x93\x16\x45\x7d\xf2\x12\x1e\xa7\xa3\x14\xc3\xb8\x97\x90\x05\xe5\x78\xe8\x24\xde\x65\xfd\xa4\x87\x5d\xc1\xa1\xfb\xd1\xb9\xdd\xd3\x73\xef\x26\x1a\xe3\xb9\x4a\xc0\xb9\x29\xd4\x9c\x87\x75\x8b\x4e\xad\x35\x6b\x73\xfc\x9b\x99\xfe\x38\x8a\x19\xa2\xbd\xf3\x2b\x37\x1b\xed\xd5\x0b\x17\xb8\x99\xe0\x75\x9c\x5f\xd8\xed\x41\x82\xc5\xd1\x93\x49\xbd\x91\x88\x97\x59\x13\x8c\x8a\x1d\x9f\xbf\x82\x8c\x75\x9e\x53\xf2\x25\x42\xd6\x85\x06\x05\x35\x49\xf3\x56\xae\xf1\x10\xa1\xe4\x4b\x45\xc5\xe1\x76\x46\x75\xab\x49\xbd\xad\x40\xf2\x8e\x8f\xbe\x8e\xcc\xba\xbe\xb2\x23\x20\x18\xa3\x80\xa1\x50\x56\x9a\x9c\x17\x20\x68\x56\x6b\xd4\x29\x92\x6d\x0c\x45\x99\x84\xaf\x5b\xaf\xa0\x7a\x15\xb1\x2a\x34\x78\x27\x8b\xc8\xe7\x74\xbb\x6b\xd8\x4d\xd9\xc8\x91\xa3\x18\x95\x8a\x1b\xb5\x52\xe1\x98\xbf\x77\xbb\x44\xc4\xad\xb7\x6b\x8a\xe7\xfc\x1d\xa1\xcd\x51\x40\x4d\x9b\x03\x86\x21\x55\x79\xf5\xef\x64\x7f\xbc\x7a\xe7\x1c\x49\x10\x1c\x88\x43\x87\xcf\xe9\x36\xb6\x4b\x9d\x75\xbc\x88\xe7\x23\x8d\x22\xa3\x74\x6b\x3b\x5f\x81\x2a\x46\xc9\xe8\xd1\xe0\x96\x86\x55\xcd\xd5\x42\x17\x38\xab\x75\x3c\x10\x5c\xdb\x0e\xbe\x31\x68\xf2\x4e\x0d\x5b\x24\x9e\x10\x87\x35\x2c\x4f\xee\x5c\xac\x71\x3c\x36\x3c\x07\x01\x99\x5f\xf5\x74\x6a\x70\xc5\x3a\xa4\x85\x46\x35\x7f\x5a\x80\xd5\x38\xcc\x9b\x6d\xed\xc2\xaa\x15\xd7\x6a\x1b\xf8\x5f\x87\x55\x66\x70\xb2\x61\xc0\xd6\xa6\x23\xd8\x19\xd1\x8d\xe4\x10\x8b\x0a\xa8\x1c\xba\x7c\x43\x4a\xa0\x1a\x9d\xcb\xfd\x51\x08\xdd\x1f\x3d\xd0\x4f\xbf\x3d\xfa\xcf\x37\x47\xf1\xb3\x3b\xd5\x03\x75\x56\xff\xdc\x45\xe0\xf2\x96\x6c\x00\x16\xa6\xc3\xf4\x6b\x96\x47\xf2\x0d\x4a\xa6\x27\x0c\xb2\x85\xa4\x24\x55\x19\xad\x6b\xc9\xee\x5f\x11\x8c\xd9\xb4\xc6\xc8\xd8\x8e\x6d\xb4\xf2\x30\xdd\x5d\xd7\xed\x6a\x32\x37\xa0\x11\x8b\x02\x18\x57\x4e\xbd\x03\x4f\x71\xc4\x9c\x18\xc1\x84\x39\x04\x23\x67\x2a\x66\xef\x08\x72\xec\x10\x2c\x9e\x69\x92\xe0\x44\x89\x33\x86\x51\x1c\xe1\x49\xbf\x2d\x55\xb5\xc0\xae\x6d\x49\xb7\x0a\xfa\x14\x26\x0e\xd4\x35\x59\x36\x81\x7e\x0e\x93\x64\x5b\xd0\xc7\x71\x0e\xe8\xc4\x81\x14\x39\x6a\x80\xd6\x30\x16\x3a\xfd\x30\x45\x14\x89\x8e\x30\xc9\xf7\xde\x6f\x66\x83\xdb\x3d\x2a\x30\x61\x2d\x2c\x23\x65\x3b\x7d\x6d\x9c\x77\x4e\x94\x7d\xa5\x96\xf0\x98\x2c\x64\xdd\xbe\x06\xa2\x68\x53\x2a\xcb\x9e\xfe\x16\x61\x51\x53\xd9\x65\x88\xce\x22\x0c\x59\x84\x27\xbd\x09\x64\xe8\x12\x5e\xb5\x63\xc3\xbb\x49\x82\x39\xad\x75\xfa\xab\x21\xf5\x40\x11\x71\xb5\x69\x14\x2a\xd0\xb9\xd6\xce\x2e\x61\x29\xc2\x13\xce\xc5\xdf\x1e\x86\x16\xf3\x84\x51\x04\x67\xf7\x04\x45\x5b\x98\x91\x26\x3f\x37\x3f\xa3\x4d\x0e\x74\xb5\x7d\xa9\xd6\x9a\xdd\x0e\xd0\xf6\x6a\xfa\x46\xe6\x78\xdb\x2a\xfa\x82\xdc\x97\x55\x2b\xb5\x24\x9b\x78\x7b\xf2\xee\xe8\xf8\x65\x45\xbe\x89\x56\xa4\xc8\x9a\x43\xc0\x18\x32\x07\x42\x97\xb3\x56\xa5\xa4\x53\x7d\xad\xc7\x05\x6d\xa6\xa2\xd3\x33\xeb\x6a\x41\x5f\x9f\xd5\xca\x6f\xc4\x14\xad\x36\xd3\x51\xf3\x75\x54\x23\x65\x35\xa5\xfd\x30\xd5\xfe\x9f\x23\xb1\xbb\xda\x19\x6f\x36\x37\x01\x35\x6b\xa0\xba\x5e\xa5\xf9\x7d\x56\x9b\x96\xcc\xcd\x42\xc6\xc6\x84\xce\x20\xeb\xe1\x05\x97\x9f\x6a\x46\xb7\x04\x89\x99\xdd\xcc\xe3\x05\x85\x71\xf4\x1b\xaa\x9b\x40\xfa\x44\x20\xc5\xbd\x8c\xd8\x94\x2c\xb8\x40\xb4\x90\xc1\xa7\x02\xda\x75\x2f\x84\x0a\x7d\xe9\x3b\x69\xc3\xd8\xe8\x70\x56\xda\x41\x6e\xf8\x6c\x7e\x98\x46\x89\xa3\xee\x28\x67\x91\x20\xce\x14\x0b\x58\x9c\x31\xa1\x0e\x9b\x22\xe7\x58\x6c\xc0\xb4\xcd\x0c\x25\xd3\xdb\x39\xc5\xb5\x96\x92\xf5\xcf\x6c\xf1\x6c\x76\x52\x1c\x35\x4c\xf8\x3e\xe8\x6b\xee\x32\x6b\x81\x93\x55\x90\x47\xa0\x70\x38\xfd\x3f\xef\xaf\x9d\xc8\x20\x41\x49\x12\x11\xdc\xe3\x94\xe4\x7e\xa8\x7b\xc2\x57\x49\xf2\x1d\x9a\xff\xc3\xae\xee\x81\xf3\xc8\x05\xae\xaa\xbc\xef\x02\x37\x90\xb5\x02\x81\x3b\x43\x49\x02\x65\xf1\xf6\x2a\x3f\x7e\x5d\x87\x9d\xcf\x35\xdd\x93\x61\x20\x54\xbb\xf2\x1a\x53\x06\x62\xb3\x2a\x3b\x47\xd3\xf9\x4c\xd4\x86\x95\x2a\x9b\x30\x10\xfa\x9a\x03\xf3\xda\xd7\xaa\x1c\x31\xa6\xc4\x68\x73\xbd\x75\xdd\x6f\x0b\xb7\xd8\x16\x0c\x99\x98\x54\xcb\xf4\x65\x15\x95\x55\xc5\xba\x0a\x95\x49\x8f\x69\x2d\x55\xa5\x3e\x7d\x7a\xb0\xbe\x21\xef\x99\x35\xc9\xd8\x8b\x9f\x8f\x4f\x3e\x7d\x7c\xff\x3a\x8b\x76\xdf\x8b\xb0\xbc\x9b\x93\x3d\x85\xd5\xa4\x3f\x65\xb3\xf8\xff\xe8\x5d\x1b\xa2\x24\x9a\x60\x37\xab\x77\x2b\xb6\xc2\x14\xc5\x73\x07\x13\x32\x47\x18\x51\x07\x13\x8a\xc6\x88\x52\x55\x93\x4e\xd4\xf9\xa4\xc2\x1e\xef\x7e\x3a\x8f\x21\xfe\x6c\x4c\xf3\x35\x09\x3e\x3b\x27\x6a\x01\x37\x0a\x9c\xee\x14\x1d\x5d\x5d\xd7\xbd\x8a\x9e\x67\x3c\x18\xdf\xd1\x2e\x68\x88\xa0\x68\x18\xff\x68\xa2\x12\x48\x6c\x1e\xcb\xbe\x99\xf1\x56\x4f\xa6\xde\x78\x9b\x6f\xb5\x46\xf5\xf4\x1a\x54\xbc\x7a\xb1\xe1\x42\xe4\xfd\xa8\x3a\x8d\xfd\x23\x9a\xc2\x8b\x88\xd0\x0d\x21\xc8\xba\xb1\xe7\x52\x2c\xda\x83\x24\x39\xd4\x5f\xbf\x40\x31\x6c\x66\xb9\x1a\x66\xa2\x3a\xd9\x68\x1a\xfc\x2c\x6a\x60\x5a\xe6\x84\xb4\xdb\xbb\xf2\xf3\xfb\xf0\xe1\xf5\xa6\xb3\x13\x5d\x6c\x34\x37\x09\xc4\xda\xb3\x2a\xea\xed\x54\xaf\xca\x47\x69\x1d\x27\x94\xda\xf9\x4a\x35\xbd\xa3\x5d\xa0\x6e\x2c\xe5\x85\x6d\x32\x5d\xb3\x2b\xb7\x0a\x06\xad\x23\xe3\x8f\x0a\x15\xc6\xc3\x08\xc6\x64\x92\xde\xb7\x9a\xcd\xe0\x57\x6e\x65\x5c\x41\x84\x2f\x60\x1c\x85\x50\xc7\x16\xa8\xeb\xea\x79\x1b\xd7\xfe\x16\x57\xbd\xe2\x29\x5a\xc7\x9a\x18\xd5\xae\x6d\x75\x5b\x8b\x95\xad\x39\x8f\x13\x25\x9c\x01\x08\x8d\x55\xd1\x4f\xe4\x5d\x7b\x60\x29\x3b\x7d\x58\x5f\xf6\xda\x5a\xd7\xfa\xa1\x70\x09\x54\xf7\xad\x69\x47\x7a\x95\xa1\xb0\xf6\x3e\xb6\x89\x0d\xf6\x30\x85\x36\x4a\x2d\xb9\xd6\x5d\x10\xdb\x1c\x81\x92\xa9\x4c\x64\xb4\x4f\xd5\x3e\xae\xbe\xac\xd6\x5d\xc5\x0e\x2b\x24\xab\x8b\x1b\x25\xb8\x55\xe8\x4f\xba\x0c\x35\x0b\xd0\x1e\xbc\x20\x2d\xec\xdd\x11\xbc\xc3\x22\x78\xb5\x15\xc2\x2d\xc1\x1f\xe0\x10\xac\x1d\x6b\xb2\x69\x4a\xf4\xad\xd4\xb7\x2e\xcb\x69\x1b\xcb\xa0\x6b\x4a\x8c\x32\x28\xf6\xfe\xb8\x07\xb0\x8f\x3f\x7d\xf8\x31\x24\xf1\x96\xa2\xbf\xbb\xbf\xb8\x07\x4e\x07\xd9\x9a\xdc\xcb\x40\x13\x49\xf7\x8f\x82\x00\x25\x09\xa1\x3a\x90\xe1\xa1\x30\xcb\x7f\x46\x58\xac\x8a\xf1\x6e\xc3\x14\x79\x54\xe9\x03\xec\xe2\x6b\x7b\x4e\x65\x4b\x6e\x05\xf9\xdb\xe0\x9f\x64\x41\x1d\x31\xeb\x75\x63\xe8\xb6\x94\x03\xaf\xab\xb8\x26\x22\xa3\x05\xe0\xc5\xd0\x68\xfb\xda\x99\xf5\x28\x92\xc5\x79\xc2\x68\xe5\x56\xe8\x3d\xad\xaf\x4c\x71\x2b\x21\x25\xd5\x7b\xaa\x93\x28\x7f\x12\x90\x79\x47\x59\xbe\x81\x47\xce\x29\xc4\x5f\x93\x00\x8a\xa0\x67\x37\x16\x7f\x01\x77\x22\x52\x2c\xba\xdb\x4e\x03\xb7\xa5\x24\x08\x1b\xe3\x73\x8b\x89\xe3\x72\x58\xcd\x05\x59\x15\xd2\x22\xd8\xed\xc7\xdf\x72\xcb\x55\x67\x4c\x68\x4f\x17\x7e\x07\xa9\x13\x6c\xc6\x3f\xfd\xa7\x40\xc4\x5e\x94\xf4\x62\x34\x81\xc1\x55\x75\xbe\xc6\x35\xf2\xb0\x75\xce\xc0\x10\xc4\x04\xdf\x93\x04\x0c\x8b\x79\x1c\x05\x70\x9d\x1c\x0c\x1d\xb9\xed\x0a\x75\xc9\x2d\x30\x22\x37\x93\x45\xe3\xfe\xac\xe1\x6b\x32\x21\x8b\x35\xce\x52\x2b\x38\x36\x49\xa2\xf1\xf4\xab\x48\xa2\x11\x97\xd1\xd7\x01\x85\x2d\x81\xbb\x8b\x24\x1a\x09\x23\x73\x67\x91\x44\x78\x22\x95\x5d\x47\xc7\xaf\x25\x83\xfb\x5c\x9a\xc0\x2f\xa3\x38\xe6\xb3\x17\x1f\x91\x05\xeb\x57\x40\x72\xef\x93\x6c\x3c\x6b\x71\x95\xca\x43\xd2\x09\xe4\x62\xd3\x67\xdb\x4e\xb2\xf1\x74\x2b\x54\xf5\x46\x6f\xaa\x45\x72\x3f\x68\xdc\xc7\xe4\x3e\x66\x09\x7a\xfc\x55\x10\xb8\x45\xf2\x7b\x4c\x11\xb4\x48\x50\x91\xac\x7d\xad\xf4\xeb\x49\x0b\xfa\xf5\x31\xd9\x2c\x43\xd0\x93\x6d\x13\xaf\xc7\xdb\x20\x5e\x35\x0c\xbb\x92\x03\x4d\xd6\x1d\x62\x82\xaf\x66\x9c\x5d\xb3\x64\x56\xde\x16\x37\x79\x1f\x78\xcb\x6f\x19\xda\xbe\x65\x68\xeb\x00\xdc\x5d\x67\x68\xfb\xba\xa9\xef\x1f\x26\x45\x5b\x2b\xed\x73\xb9\xd1\xd7\x92\xc1\xad\x68\xfe\xba\xfb\x88\xdd\xb2\x82\xf6\x7e\x18\xe6\x1e\x05\xdf\xcd\x3e\xb2\xe3\x8a\xb8\x5d\x5d\x8e\x42\xd7\x32\x92\x7f\xea\x68\xde\x10\x61\x16\xb1\xdc\x33\xa3\x96\x81\xe1\x6c\x59\x34\xbc\xc5\x88\x15\xaa\x24\x4c\x28\x59\xcc\x0b\xd7\xbd\xb6\xc6\x89\x8c\x08\x6a\xf0\xf4\x62\xd4\x26\xc3\xe3\xd7\x89\x7e\x7f\xf5\x42\xce\x3e\x49\x43\x56\x20\xa5\xf0\xca\x95\x97\x77\xfb\x6b\x3d\x0f\xa0\x4e\x0a\xa4\xee\xde\xdc\x14\x3b\x44\xbb\xa4\xae\x40\x8f\xf9\x9d\xbb\x86\xeb\xcf\x86\x2a\xfa\x02\xa5\xc9\x8a\x3d\x75\xf2\xc4\xab\x49\xf4\x81\x60\x30\xdd\x1c\x67\x85\xe0\x4d\x63\xec\x5c\xb4\x45\xb1\x84\x93\xad\xd6\xc6\x93\x9c\x3e\xd7\x70\xf1\x7a\xd2\xb1\x8c\xf1\x13\xab\x61\x6e\x53\x2b\x9f\x85\x87\x36\x94\xa2\x75\x1b\xd0\x38\x77\xeb\x6c\xc0\x87\x77\xb3\x01\x5f\x99\x50\x6f\xbc\xc9\x14\xcf\x77\xf3\xbb\xe8\x51\xd5\x2e\x7a\xd4\x71\x17\x3d\xba\x95\x5d\xf4\xb0\x42\xb5\x6e\x33\x79\xa4\x64\x74\x23\x63\x7e\xa7\x4d\xf0\x9e\xdf\x7f\x9b\x9b\x08\x5f\x8b\x49\x48\x5e\x33\x71\xa6\xf0\x02\x39\x68\x76\x8e\xc2\x10\x85\x8e\xb8\x62\x8b\xa1\xdd\x6b\xa2\xb8\xfe\x66\x80\xf3\x39\x52\xe1\x92\xb6\x63\x9a\x5e\x98\x39\xa9\xb4\x7c\xb7\xbd\x27\x71\xf5\xc5\xc6\x5f\x6e\xef\x5a\xb3\x50\x83\x83\xbb\xa1\x06\x6b\x6f\x84\x32\x21\x38\xe8\x42\x08\xd6\x25\x03\x87\x55\x64\xe0\xb0\x23\x19\x38\xbc\x15\x32\x70\x50\x1d\xa1\x69\xe3\xc9\xb7\xcb\x76\x97\x99\xdc\xbb\x67\xbf\x75\x28\xfd\x7d\x4c\xa1\xfc\x8f\xe0\xc7\xe4\xaf\x6f\x82\xfa\xca\x28\x01\x99\x9d\x47\x18\x85\x69\x2a\xb1\x22\x5b\xfd\x04\xb8\x0b\xdb\x61\x2c\x1e\x98\xcc\xc7\xad\xfe\xd4\xa8\x93\x12\x47\x15\x07\xdc\x2d\x87\x29\x55\xc4\x6e\xd6\x69\x17\xdc\x62\xe5\x0b\x26\xf2\x50\x10\x5c\x1d\xe7\x6f\xf7\xda\xb0\x3d\xa9\x04\xaf\xec\x02\xd7\x3e\xb6\xbd\x63\x50\xbb\x31\xa5\x0f\x57\x73\xa5\x36\xa0\x68\x0e\x29\x0a\x3f\xfd\xba\x40\xb4\x65\x1e\x89\x2a\x3f\xba\xe6\xe8\xf6\xb6\x42\x81\xd5\x93\x6e\x93\x08\xf7\xd6\xbe\x03\x9b\x65\xa2\xac\xf0\x15\x32\x37\x52\x1a\xfe\xee\xaa\xd3\xd9\xe0\x89\x65\x03\x69\x5d\x52\xdc\x90\x60\xcf\xba\x67\x8c\x82\xab\x9a\x2d\x08\x03\xb7\xa0\xdf\x6e\xf8\xcc\x6d\x97\x92\xa1\xe5\xf6\x6a\xaa\x01\x7b\x0b\x5b\x2c\x9b\xde\xdd\xec\x31\x1b\x92\xb7\xbf\x7d\xea\x22\x88\x84\x5f\xe1\x8f\x11\x0e\x75\xd2\xc1\xe6\xcc\x3f\x06\xbb\x1a\x10\x1c\xc0\xa2\x49\xa5\xd0\xb1\x99\x88\x73\x70\xf0\xa4\xbf\xdf\xdf\xef\x0f\xb2\x50\xcf\x61\xe6\x37\x56\x84\xe5\xde\xe7\x82\x94\x3e\x76\x46\x2a\xce\x8d\x36\xc9\xc0\xf0\xdb\x5b\x37\xf5\x63\x0d\x93\x66\x09\xd5\xcf\xa7\xb6\xa9\xef\x79\x90\xf5\x50\x68\xb6\x21\x83\x57\xc7\x46\xdd\x23\x26\xef\xfe\xf0\x76\x97\x87\x5f\xc2\x1f\xe7\xff\x5d\xcf\xdb\x29\x48\x8d\x4c\xc1\xeb\x86\x18\xe4\x30\xe0\x7e\x7d\x89\x0d\x4b\x8c\xd9\x46\x99\xcf\xaa\x33\x8f\x7c\xcb\x94\xf8\x2d\x53\xe2\xb7\x4c\x89\xbf\xc3\x4c\x89\x06\x5b\xdd\x4a\xa6\xab\x60\xa5\x5b\xa7\x22\x6b\xcb\xf0\xb4\x89\xdf\x91\x23\xf4\x4b\xe5\x7d\x40\x9e\x7d\x73\xff\x9f\x6b\xcd\xed\x95\xcd\x28\x95\x17\xda\x27\xd9\x2b\xb2\xb9\xed\xc5\xef\x6e\x3b\xad\x03\x3a\x6c\x78\xb8\x93\xd9\x74\xcf\x8d\xb8\x69\x8e\xc0\x56\x50\x81\xd3\x3b\xcf\x12\x78\x4f\x4e\xd9\xba\x9a\x91\x36\x77\xfa\xd6\xb5\x22\x6b\x51\xbd\xf6\x8c\xc3\xad\xe4\xfd\xab\x63\xd2\xfe\x22\xb3\xa3\x0a\xa7\xa7\x49\x56\xfb\x00\x75\x8a\xa9\xcd\x6b\xf8\xeb\xbb\xed\x9e\x78\x6e\x83\x7d\xd0\x5a\xdc\x3c\x6c\x10\x37\xdb\xaf\xf1\xc0\x70\x2b\xac\x0a\xbd\x6c\x69\x73\x68\x10\x34\x3b\x7a\x0c\x59\x72\xbb\x6d\x4b\xbc\xfc\xca\x92\xb8\xed\x34\x48\xa7\xe9\x9e\xd9\x0b\xa6\x90\xb2\xfe\x17\xb1\x51\x6f\x54\x36\xcd\x1e\xc8\xea\xeb\xe6\xbe\x15\xf9\xc3\x60\x3c\x74\xa3\x90\xf7\x43\xf0\x70\xf9\xfe\xe5\xc9\xcb\x0f\xc3\xd3\xa5\xcc\xba\xa5\xde\xac\xce\x56\x40\x40\xca\x51\x16\xc6\x68\xb8\xe4\x4d\x4f\x3e\x1e\x1f\xbf\x3c\x39\x31\x1a\x27\x0b\xe1\x41\xeb\xae\xce\xc0\xcb\xf7\xef\x7f\x7e\x6f\xbc\x42\x94\x12\xca\x3b\x5a\x01\xd5\x6a\xb8\x5c\x01\xf1\x74\xb8\x5c\x09\x5c\x36\x89\xf6\x19\xf2\x4a\x12\x3d\xe8\x88\xf0\x1c\x96\x01\xdb\x96\x0e\x00\xd7\xeb\x00\x8e\x1f\xbf\x7c\xf7\x92\xed\xed\xd9\x75\x00\x27\x72\x2b\xb8\x7f\x59\x40\x1a\x9a\xa9\x0f\xc2\x28\x99\x43\xc6\x89\xa0\xab\xb6\x8b\xfb\x00\x32\x46\xf9\xb4\x1f\x64\x7a\xec\xb2\xaa\x40\x3c\xe8\x89\x89\xa7\x34\x2a\xa1\x41\x2a\xf5\xcb\x37\x2d\x24\x79\xc9\x96\xa9\xd2\x6c\x3a\x1d\x9b\xa4\x72\x40\x93\xbd\xb3\x9c\xbe\x20\x83\x39\x73\xd1\x38\x2b\x70\x23\x8f\x33\x47\xe6\x34\x5f\x0f\xff\x06\xa9\xda\x73\x6a\x33\xb5\x49\x83\x50\x14\x91\x25\x90\xaf\x42\x91\x22\x30\x39\x99\x92\x4b\x8e\xc8\x4c\x72\x06\xee\x0f\xe1\x82\xea\xd4\x10\x3f\x10\xcc\x37\x8d\x4e\xc6\x22\x70\x33\x59\x44\xa1\x7b\x26\xc8\xaf\x4c\x18\x68\x48\xdd\x87\xfb\xfb\xfb\x35\xf9\x02\xb5\x1b\xb2\x2b\xce\x52\x0b\x7d\x89\x53\x65\x8f\xde\x07\x2e\x25\x7c\xe7\xb9\x30\x46\x94\xb9\x66\xc6\x97\x79\x84\xc2\xf4\xa2\x3f\x00\xae\xba\x73\x8c\xfb\x7d\xd7\x76\xaf\x77\x2c\xb3\x52\x62\x21\x1b\x16\x4d\x1e\xf3\x6e\x4b\x26\xf4\x57\xf9\x79\xfe\x41\x56\x51\x0a\xda\x97\x30\x71\x20\x76\xe6\x94\x9c\xc7\x68\x76\x23\xab\x56\x93\x46\xd2\xbc\x10\x94\x18\x16\x89\x4c\x52\x29\xfa\xaa\x2c\xbe\xb6\x04\x42\x2c\x62\x31\x2a\x09\xaa\xc7\x64\x7e\x25\x72\x86\x09\xce\x5e\x97\xaf\x75\x18\x11\x89\x75\x83\x38\x9a\x9f\x13\x4e\xf4\x32\x41\x6e\x70\x08\x1e\x17\x72\x12\x49\x40\x99\x84\xf2\x40\x25\x07\x4d\xbf\xed\x31\xf4\x85\x29\xb0\x15\x41\xaa\x4a\x5c\x24\x78\xa9\x87\xe0\x49\x57\x5d\x3a\x10\x79\x89\xc0\xa3\xed\xf1\x3a\x85\x1b\x2d\x65\x71\x68\x2d\x8b\x83\x2b\x59\x9c\x14\x1b\x43\xd9\x22\xc2\xe2\x56\x53\xd2\xb3\xe7\xa6\xef\xf7\x48\xe2\xfa\x20\x24\xb3\x8a\x86\x21\x99\xb9\x3e\x30\x38\x26\xce\x29\x64\x2c\x92\xbf\x64\xd3\x28\xe9\x7f\x4a\x16\x73\x44\xfb\x70\x3e\x8f\xaf\x3c\xfe\x04\x40\x3a\x59\x88\x83\xe1\x03\xd1\x42\xdc\x30\x23\xa6\xef\x4a\xf9\x90\xef\xaa\x91\xf8\x2b\x24\x33\xf1\x4b\x7c\xac\x3e\xf9\xc4\x59\x3e\x84\x11\x4d\xb2\x36\xe9\x23\xcf\x5f\x81\xcb\x28\x8e\x5f\xa0\x84\x51\x72\xf5\x32\x16\xc7\x70\x0d\xc0\xb2\x51\xfa\x14\xcd\xc8\x05\xe2\x3d\x87\x51\xf8\x0a\x27\x88\x32\x4b\xbf\xfc\x7a\x47\x02\xa2\x9d\xee\x43\xc0\x50\x4e\xb1\x9f\x2e\x40\x5f\xe5\xc4\xf5\xdc\xff\xe3\xf6\xe5\x41\xf1\x52\xe4\x00\xd7\x51\xbb\xd5\xf7\xc1\x52\xb3\x4b\x06\x30\x8a\x3f\x45\x7d\x7d\xcd\x7a\xae\x62\xc6\x5c\x5f\x33\x55\xf5\xcd\x05\x7b\xe6\xfa\xab\x95\x5f\xe0\x62\x69\x23\x23\x96\x26\xe5\xb5\xb1\x61\x99\x7a\x21\x29\x33\x59\xfa\x97\xa3\x7e\x2b\xb8\x4c\x7e\x37\x1a\x7b\x47\x94\xc2\xab\x7e\x94\x88\x7f\x3d\xe4\xfb\x1a\xfc\x95\x87\xfc\xeb\xeb\x7c\x97\xd1\xd8\x73\x17\x58\xc2\x1b\xba\xa3\x91\xf4\xd5\x72\x4e\x04\x5b\x75\x7d\xbd\xeb\xc9\xbf\xfa\x11\x43\x14\x32\x42\x9d\x08\x3b\x92\xd7\xe3\x3d\xab\xae\x15\xef\x76\x7a\x06\xe8\x68\x77\x1f\xc0\xd1\xee\x00\x10\xcd\xd7\x31\x7a\xb5\x1c\x13\xea\xf1\x36\x09\x88\x46\xe8\xb4\xd0\xe5\x99\xe7\x7f\xbf\xeb\xd1\x91\x97\x8c\xa2\x3e\x46\x5f\x98\xe7\xfb\xfd\x90\x60\xe4\x3f\x78\xe0\xe1\xfe\x7c\x91\x4c\xbd\xa4\x2f\x68\x92\x0f\x76\xd9\xf5\x35\xee\x4b\xf1\x77\x77\x34\x62\xfe\xf7\x7c\x48\xff\xfb\x55\x20\xd6\x25\xf6\x97\x90\x83\x40\x46\xf1\x6a\x1c\x61\x18\xc7\x57\x4b\x0e\x00\xbd\xbe\xe6\x94\x71\x34\x8a\xfa\x12\xe4\xeb\x6b\xfd\x97\xe7\xa7\x2d\xa3\xb1\x07\x7d\x36\xa5\xe4\xd2\x21\xab\x95\x42\x1b\x5e\x09\x4c\x59\x10\xb7\x8b\xf4\xfc\x39\x16\x13\x46\x23\x3c\xc9\x50\xa8\x5f\x3a\x54\x7c\xa0\x70\xa4\xf8\xe4\x39\x25\x8c\xf0\x86\x7d\x46\x4e\xc4\x87\xfd\x00\xc6\xb1\x87\xfc\x7e\x12\x73\x0a\xf2\x14\xf4\x06\xfe\x8e\x2b\x9b\xbb\xa3\xd1\x08\x3f\x78\x80\xf8\x46\x4f\x18\x5d\x04\x8c\x50\x8e\x9b\x51\xee\x49\x9f\x5f\x0c\xbe\x80\xe5\x0d\x9c\x8b\x6f\xae\xaf\xdd\x13\x24\x3f\xd7\xd0\xc8\xdd\x31\xa6\x64\xe6\xa9\xc6\x47\xfa\xdc\xa9\x4f\xf6\xfe\xc7\x7b\x3e\xfc\x18\x5d\xbf\xf2\x31\xf3\x9e\x0f\x9f\x5e\x0f\x1e\x5f\x1f\x1e\xf8\xde\xf3\xe1\x71\x0c\x67\x73\x14\xfa\xcf\x45\x27\xff\xb6\xd7\x67\x28\x61\x1e\xf6\xf3\x33\x2d\xe1\x8b\x13\x15\x8e\x53\x8c\x2e\x9d\x0f\x57\x73\xf4\x92\x9f\x2f\x4f\xe7\x3c\x74\x20\xe3\x5c\xbe\x8a\x7f\x92\x93\x59\x08\xd5\x39\xee\x89\x2d\x72\x1e\x67\x36\x84\xfe\xbf\xf0\x2b\xec\x10\x1a\x22\xca\xdb\x9f\x23\x47\x37\x01\xe2\x03\xe1\xd0\xe9\x10\x81\xb5\xc4\x99\x2d\x12\x26\x9d\x5a\xa1\x63\xd9\x75\xce\x0c\xb1\x29\x09\xfb\xae\xbf\xe2\x9b\x40\x1f\x2e\x39\x8b\xa5\x27\x37\x0c\xbb\xbe\x66\x7f\x46\x6a\xc7\xf1\x1d\xc9\x46\xe9\xaf\x1d\xbd\xaf\xf1\x68\x1f\xd0\x11\x9f\x9f\x3c\x74\xcc\xff\x1e\xff\x07\xfb\x1e\x7f\xf7\x9d\x4f\x4f\xf1\xd9\x08\x9d\xe2\xb3\x1d\x8d\xa4\xd5\x76\x64\x25\x58\x2f\x2b\x45\x27\x47\x57\xfb\x6f\xff\x7b\x6e\x97\x95\x2e\x29\xc7\x03\xe7\xa8\x44\x82\xf1\x5a\x29\x48\xd0\xab\x98\x08\x7b\xa3\x99\x0a\x49\x58\x42\xb9\x38\x24\x59\xc7\x29\xc4\x13\x95\x42\x3c\xc8\x1b\x46\xb5\x5d\x34\xe3\x67\xf6\xdc\xa2\x96\x12\x64\xcf\xa4\xc2\x3d\xfb\xcd\xb4\xb7\x57\xfa\x44\xc8\x60\x79\x1f\x1e\x9b\xcd\x35\x41\xec\x05\x64\x30\xd5\x9d\xca\x92\x0d\x9b\x58\x5d\x05\x16\xc2\x6a\xf6\x3c\xcf\xa1\x0b\xc4\x69\x4c\x6b\xf1\x31\xc2\x9f\xcd\x7c\xeb\x32\x68\x54\x60\x4d\xc5\xa7\x9a\xd8\x3c\x2b\x7a\x9c\x54\x63\x2e\xef\x11\xad\xb3\x1b\x37\xf9\x3f\x59\xb1\x9c\x21\x56\x73\x7f\xea\x6f\x15\xe1\xda\x98\xea\x3d\x8d\xb4\x6d\x5a\xa2\xce\xb9\xe1\x33\x1d\xba\xe1\x8f\x33\x85\xc9\x54\x39\x71\x9f\xa6\x53\x4f\xf7\x63\x94\x1c\x53\x24\xa5\x7e\x29\x5c\x99\xf9\x5e\x5d\x35\x32\x70\xb3\x5c\xa2\x06\x06\xcf\x6a\x76\x57\xba\x44\xa6\xb1\x28\x90\x43\x19\x06\xa3\x54\xa0\xd3\x0f\x22\x3c\x8e\xa3\xc9\x94\xd5\x75\xae\xdb\xce\x11\x4d\xb4\xff\x81\x09\x55\x33\x5e\xed\xb9\x67\xf3\x9f\x9f\xd5\x29\x7c\xf3\x86\x96\x87\xe0\xd0\xf4\x11\xaf\x30\x1b\xf2\x21\x38\x33\xaf\xa6\xdc\xc6\xa2\xd7\x70\xe0\x5a\x88\xc3\x46\x4f\x57\x11\x8a\xc3\xcd\x7a\x6a\x98\x6f\x27\xdb\xc3\xfa\x51\xa3\x39\xe4\x37\x07\xe9\x32\x84\x5b\x64\x64\x6c\x81\xa4\x36\x55\x15\x6e\x0d\x47\xf5\xae\x5e\xf5\xf2\xfd\x20\xdf\xcf\x1a\xab\xb1\x89\x60\x5a\xe0\xf0\x53\xb1\x94\xd4\x8a\xa5\xb0\x4a\x2c\xcd\xc4\x3f\x53\x07\xdf\x24\x7c\x9e\x2f\xa2\x38\x44\xb4\xa2\x8d\x58\x69\x1f\x48\x7a\x35\xe4\xfc\xba\xa2\xda\x16\xb9\x47\xc8\x55\x9a\x48\xdb\x25\xb6\x15\xe0\x37\x14\x0e\x50\xbc\xfe\xf7\xf2\xbd\xf9\xbd\xe8\x55\x90\xd9\x61\x9e\xf9\xd6\x1d\xf7\xa7\x10\x87\x31\x7a\x79\x81\x30\x97\x47\x84\x04\xfa\x1e\x05\x28\xba\x40\x47\x8c\xd1\xa4\x93\x60\x2b\x24\x15\xd1\x8a\x23\x47\x0a\xcf\x0a\x89\xe2\x89\x94\x2f\xf9\x7d\xe8\x2b\x69\x03\xf9\xcb\x95\x94\xa7\xdf\x23\xcc\x71\xdd\x49\x8e\x96\x0b\x93\x20\x29\xb8\x82\x8c\x72\x2a\xf1\x37\x4a\xde\xa3\x09\x17\x81\x29\x0a\x3d\x45\xbf\xfc\x2d\xc8\xef\x99\x55\x46\x8e\xcb\x77\x6b\x3f\x4a\xde\xa2\x4b\xd7\x7f\xf0\x40\xea\x0c\xf8\x23\x4a\xe2\xf8\x1c\x06\x9f\x39\x26\xa3\xf3\x05\x43\x42\x7b\x90\x9a\x7e\x14\x77\x95\xb3\xfb\x48\x3f\x3e\xa4\x59\x5d\xc9\xad\x72\x31\x4d\x63\x55\xf0\xcf\xe9\xaf\xbe\xea\x83\x8b\x3d\x13\xf5\xa7\x9f\x03\x90\x5f\xdf\x0a\x30\xaf\x88\x2f\x75\xd7\x82\xdd\x7d\x1f\x30\x2d\x58\x21\xcc\x68\x84\x12\xb9\x56\x70\xc1\xc8\x38\x8a\xe3\xeb\xeb\xe5\xca\xef\x53\x14\x2e\x02\xe4\x15\x64\x6a\x0e\x32\x1d\x61\x8f\x81\x03\x1f\xc0\x11\x3d\xdd\x3f\x03\x64\x44\x4f\x07\x29\xc3\x9e\x8d\x8b\x00\x04\xc4\x07\x68\xe5\x03\xe6\x97\x17\x50\x72\x1e\x4c\xa9\x2f\xf8\xaf\x15\xb0\x6e\x5f\x75\x20\xe4\x3b\x2f\xd5\xd2\x60\x42\x67\xa2\x2e\x99\xda\xcf\x69\x57\x1c\x57\xd9\x5f\x06\xaa\x8a\x26\x34\xd2\x4e\xf9\x20\x99\xf9\x3b\x33\xa1\xe5\x04\x8a\xd4\x84\xc6\x1f\x48\x13\x9a\x34\x7d\xa5\x96\xaf\x30\x4a\xd2\x0a\x5e\xee\x0a\xbc\xfe\xf9\xe8\x45\xd1\xbe\x06\x02\x82\xc3\xa1\x66\xcf\x57\x20\x7d\xcb\x9f\x70\xa9\xdc\x34\xc0\xf1\x67\xc3\xe5\x0a\xa8\x77\x79\x5b\x5c\xc1\x6e\x07\x0a\xb0\x28\x2b\xdc\x6a\x05\xa4\x19\x2f\xb5\xc0\x49\xd3\xdf\x87\xf7\xff\x1c\xe6\xc6\x16\x4d\xcd\x09\xd4\xb6\x6c\x61\xc5\x33\xd7\xaf\x41\x7d\x54\x61\xd3\xab\xdc\x01\x05\x75\x13\xc0\xdb\xb2\xea\xd1\x7a\x49\x75\xf1\xcb\xf9\xc9\x49\x02\x3f\x6c\x6e\xd5\x6b\x12\x66\x95\xd2\x3a\x63\x5d\xb7\x60\xe3\xbb\x2d\x33\xdf\x81\x69\x31\xd2\x5d\xf2\x6d\x6f\x0a\xa6\xb5\xfe\xc7\x4a\x76\x4d\x79\x7f\x50\x9c\x81\x8a\xff\x09\xa3\xb0\xb7\x98\x87\x92\x28\xc8\xba\x8b\xd8\x0c\x15\x07\x2e\x3f\x82\x86\xad\x41\x09\xe4\x5a\x02\x50\xd2\x79\xc9\x57\xa6\xbd\xec\x66\xc8\x69\x02\x3b\x4a\xa0\x28\x8b\x66\x0f\xf3\x02\xd6\x53\xe0\xfe\xba\x40\x8b\x14\x6e\xab\x64\xf4\x14\xb8\xb3\x45\x96\xa5\x1e\xe5\x84\x15\x39\x9d\x74\xa5\xe4\xdb\xbe\xf8\xff\xa4\x3f\x8e\x68\xc2\x94\x46\xee\xac\x41\x7a\x53\x98\x92\x6a\xe2\x82\x0b\x56\x83\xd8\xa5\x90\x64\xf2\xe9\x1a\x3f\x99\xa7\x99\x42\x41\xad\x6c\xc5\xb7\x7b\x9a\x2a\x23\x2f\xb5\x75\xf5\xbb\xd5\x29\xc4\xca\x31\x8f\x9d\x52\x7a\xe5\xcc\x9e\x98\xb0\x37\x99\xe5\xd3\x8c\xc7\x3e\x35\x77\x40\x46\xfb\x9b\x94\x03\x95\xde\x75\xd9\xae\x04\x85\x2c\x68\xe6\xbc\xa4\xde\x2a\x2f\x5b\x4b\xea\xa0\x0d\xb4\x46\x22\x03\x90\x5e\x2d\x6b\xe6\x39\x2b\xea\x89\x0a\xe5\x58\xc9\x5c\x64\x54\xb3\xeb\xd7\x50\x76\x1e\x0e\x80\x2b\x9a\x2a\x0d\x8d\x3a\x88\x6d\x4e\x82\x6b\xe8\x98\x8c\x1d\x9f\xaa\x08\x5a\xec\x6e\x6d\x33\xc9\xcf\x5d\x27\x71\x2c\x1e\xdf\xc6\x1d\x58\x8e\xe6\x5e\x53\x86\xde\xd4\x08\x9f\x2e\x6d\xc3\x4e\xab\x3d\xa2\xf5\x9d\x6c\xeb\x94\x16\x95\x29\xea\xca\xcf\xa9\x6b\xcf\x64\xc8\xfd\xa6\x2e\xb0\x5b\x72\x61\x68\x83\xbb\xba\x2e\x6e\x0a\x73\x62\xcc\x9e\x66\x86\xe5\xb4\xf2\x07\x2d\xbd\x2a\x6e\x0d\x97\x79\xa2\x28\x59\xdd\x6e\x34\xd1\xd0\x48\x37\x2c\x5b\xbe\xdb\x75\x57\x4f\x4d\xd9\xd2\xa5\x24\x28\x92\x41\x55\x6d\x52\xed\xb6\x62\x4e\x85\xef\x3e\x61\xd1\x38\x0a\xd2\x12\x4c\xa7\x2e\x1c\xab\x60\xd9\xee\xbe\x26\xf5\xfa\xe4\x92\x3e\x6b\x1b\xbb\xc9\xd8\x51\xb9\xa9\xa4\xbc\x25\x8b\x82\xcf\xa2\x58\x60\x83\x39\x22\xdf\x5d\xce\x17\x7e\xb0\xaf\x2e\x8d\xfc\x08\xae\x5b\xe1\x2d\x63\xba\xab\xa8\xf0\x1b\xc7\xfc\x54\xb3\x7b\xcd\xc5\x2e\x13\x46\x09\x9e\x14\xbd\x7b\xff\x2e\xfb\xb4\x78\xde\x64\xff\x1d\x61\x47\x9c\x1f\xe1\xad\x23\x25\x6b\x14\x3a\x97\xd3\x28\x4e\x98\xa3\x68\xa5\x4c\x7c\xc8\x67\x06\x1c\x8a\xc6\x14\x25\x53\xe1\xe3\x42\xaf\x1c\x38\x81\x11\x2e\xe6\xd2\xae\x1a\xaf\xbb\xb2\xcf\x08\x10\x6d\x3a\xb5\xad\x14\xa9\x4d\x86\xa2\x16\xdb\xae\x1d\x34\xdd\x35\xa8\x8f\xab\x6e\x49\xd3\x3f\x67\x53\xe5\xa7\x29\xa1\xa6\xea\x4f\x58\xab\xfe\xa4\xdd\xd4\x9f\x16\xcd\x60\xe6\xa8\xb1\xda\xcc\xdf\x06\xeb\x11\x37\x53\x28\x82\xbc\xfe\x4b\xf0\xcd\x4a\xc1\xa6\xb4\x68\x7d\x39\x07\xf3\xf3\xd3\xac\xed\x59\x83\x4b\x4d\xcb\x39\x65\x4e\x2b\x42\x6e\x33\x75\x78\x5a\x2a\xb4\x28\x6d\x2d\xb0\x5f\x5f\xcb\x87\x23\xf5\x30\xa1\x81\x45\xc1\xe5\x2f\x2b\xf4\x62\x39\xa5\x17\x2a\x2b\xaf\x60\x3b\xe5\x47\x12\xe1\xcf\xf5\x0e\xcc\x0b\x16\xc5\xc9\x5e\x48\x66\x7b\xe8\x02\x61\xa6\x59\xeb\xbb\xf1\x59\xfe\xbc\xf7\xdf\x3f\x0e\x16\xf8\x6f\x76\xed\x46\xad\xae\x62\x60\x95\x91\x95\x64\xa0\x75\x36\xd5\xfc\xbd\x92\x0b\x4c\xf3\xa4\xfa\xe8\xac\xcc\x8b\x6f\x74\xda\xb3\x25\xd9\xd8\x03\xcf\x38\xe1\xca\x56\x51\x65\xe4\x48\x07\x56\x8f\x5a\xf8\xe3\xc5\x64\x32\xa9\xb4\x88\xc8\x97\xae\x6f\xa1\x2c\xd2\x12\x51\x72\x0b\x53\x2a\x45\xd5\x1f\x47\xca\x82\xa1\xd0\x73\xb5\xb3\x8a\x08\x48\x57\x7e\x2b\xcb\x30\xa2\xec\xea\xc3\xd5\x1c\x81\x28\x39\x81\x17\x11\x9e\xac\x5c\x63\x43\x2a\x07\x39\xa0\xa3\xe0\x33\xf5\x7c\xda\x85\xfe\xce\xcd\x42\x38\x2c\xad\xd2\x71\x5c\xe1\xdd\x93\x9d\xd8\x07\x0f\xd2\xbf\xb1\x8f\x46\x92\x9b\xdc\x41\x71\x82\x96\xc9\x65\xc4\xe9\x03\xf6\x97\x01\x4c\x90\x52\xac\x87\xee\x10\x8d\xd8\x73\xf9\x8b\x0f\x3b\xd4\x1a\xf7\x9d\x73\x8a\xe0\xe7\x1d\xd1\x56\x72\x0e\xba\xad\xf8\x25\xdb\x2a\x96\xc2\x6c\x2b\x0d\x4c\xa1\x3b\xe4\xbf\x14\x81\x91\xdf\x09\x17\x42\xf9\x9d\xf4\x26\x74\x57\x68\x24\x36\xf5\x05\xea\xa7\xfe\x7d\xc8\x57\x3e\x59\x4b\xc5\xb7\x66\x8b\x91\xda\x84\x7a\x83\xdd\xd1\x08\xf5\xc5\x66\xfc\x79\xec\x31\x49\x65\xd6\xbd\x0e\xee\xd0\x97\x52\x12\xad\x92\x75\x05\x0b\x40\x00\x1d\x79\xfb\x80\x71\x72\x8a\x7c\x0f\xf1\xab\xd5\x4e\x80\x31\x30\x76\xa3\xc4\xb8\xb4\x73\xe1\xbe\xda\xd0\xfc\x6b\xdc\x97\x9b\x3f\x75\xaa\x34\x2d\x5c\xb6\x97\xab\x1d\xd3\xb4\x57\x70\xd4\xa4\x60\xa9\xca\x06\xe7\xa0\xe7\xa3\xd6\x03\x06\xb0\x79\x3f\x28\x08\x98\xbf\x84\x62\x19\x8b\x6e\x99\xd9\x75\x0f\x05\x48\x3e\xa0\x9b\x5e\x97\xf9\xeb\x8d\x53\x18\xe3\xd0\xa4\xf7\xe0\xf5\x75\xee\x0a\xe7\x64\xb6\x7c\x81\x0b\x26\x36\xfd\x84\xdf\xe4\xca\x97\x63\x58\x36\x3f\xc9\x35\xdd\x49\x6f\x5c\xf4\xbc\x78\x83\x66\xa8\x92\x17\xaf\xa4\x59\x7d\x95\xfe\x4a\x5a\x90\x38\x2d\x04\xbc\x4f\x7f\x58\xf3\xb9\xda\x72\x72\x77\x79\x5e\xf9\xde\xc7\x59\xef\x12\x60\x0f\xcb\xae\x71\x5f\x77\xe3\xaf\x7c\x7f\x05\xe4\x56\xb5\x98\xff\xc4\x64\xaa\x41\x40\x8d\x20\xa4\x44\x59\x1f\x07\xa6\x26\x27\x07\x4e\xb9\x17\x8e\xf9\x61\xc9\x2b\x93\xa5\xce\x82\x64\xec\x08\x4b\x9a\x30\x3a\xea\x3d\x96\xae\x27\x32\xd7\xd6\xcf\x3c\x14\x95\x77\xe2\x3f\xc9\x42\xfa\x0f\x26\x73\x14\x44\xe3\x2b\x21\x96\x88\x02\x40\xf0\x02\x01\x87\x50\x87\x5f\xac\xfc\x81\xa2\x58\xfe\x8e\x74\x18\x1c\xa1\xeb\x6b\xd7\xe5\xff\x3e\x17\xf3\xd4\x73\xf0\x87\xe2\xa7\xc6\xaa\xf0\x94\x5c\xcf\x77\x58\x62\xee\x7e\xa4\x65\xf9\xe9\xe2\xc9\xc1\x09\xfa\x07\xb4\xb2\x37\xf5\xa5\x62\x55\x04\xf3\xc3\xbc\xae\xcc\x8d\xe1\x6f\xad\x32\xb9\xe9\xb0\x0c\xc9\x5c\x66\x31\xf0\xe5\xe0\x0b\x2e\xfe\x42\x1a\xc1\xde\x34\x0a\x43\xc1\x3c\xf1\xe6\x5a\x30\x4e\xd8\x95\x90\x96\x2f\xa3\x90\x4d\x87\xce\xfe\xf7\x53\x14\x4d\xa6\x8c\xff\x35\x26\x9c\x7b\x8c\x7e\x43\xfc\xc7\x1c\x86\xc2\x5c\xe8\xec\x7f\x3f\x83\x74\x12\x61\xfe\x97\x16\x99\x5b\xe6\x33\xdb\x8c\xcb\x32\x96\xdd\x08\xe6\x2c\xda\xec\xa4\xc5\x2d\xa5\x6a\xca\x57\xf5\xcf\x87\x7a\xbb\xef\x8e\xb2\x97\xa7\x87\x67\xcf\xcd\x1f\x65\x87\xfd\x52\x3f\xfb\xd6\x7e\xf6\xcd\x7e\xf6\xcf\x86\x7c\xc2\xea\x8e\x70\x75\x9f\x86\x6b\xf4\x73\xe4\xf9\xa2\xcd\x0a\xc0\x11\x3a\x65\xa9\xad\x1d\xee\x0a\x4f\x67\xea\x41\x80\x4d\x03\xbb\x9c\xdb\xaa\x81\xad\x6c\x15\xbb\xca\x71\x59\xcb\x53\x4a\x34\xdf\x21\x57\xa9\x0d\xd3\x2e\x82\x13\x61\x22\x4f\x5e\x61\xbe\x97\x50\xc0\x79\xab\xe1\xee\xe0\x86\xd8\x19\xdd\x08\xfe\x76\xf5\xba\x45\xc3\xaa\x30\x94\x56\x5c\x51\x2a\x00\xc7\x24\x31\xe5\xdf\x6a\x96\xc8\x06\x5d\xf1\x65\x0d\x06\xb6\x18\x9d\x22\x49\x94\x66\x09\xd4\x6a\x29\xc1\xbe\x00\x5f\x1a\xb8\xc2\x51\xc4\xd7\xf1\x97\x08\x5d\x72\x6a\x9d\x3d\x45\xff\x1f\x7b\xef\xbe\xde\xb6\xad\xe5\x0d\xff\x9f\xab\xa0\x39\x33\xde\xe2\x04\xa2\x25\xd9\x8e\x6d\x75\xd4\x34\x75\xd2\x36\x7b\xe7\x34\x71\xda\x7d\x70\xf4\xe6\xa1\x45\xc8\x62\x43\x93\x2a\x08\xd9\x71\x6c\x7d\xf7\xf3\xdd\xc6\x77\x65\xdf\x83\x23\x01\x12\xe0\x41\x92\x13\x67\xbf\x9d\x67\x4f\x63\x91\x20\x8e\x0b\xc0\xc2\xc2\x5a\xbf\x1f\xab\x8d\x31\x90\xc5\xf3\x94\x25\x1d\xab\x8a\x1d\x04\xae\x2e\x16\x74\x6f\x87\xbe\xfe\xf0\x31\xd4\xd5\x94\xb3\x28\x09\x3b\xd0\xeb\x78\x43\x58\x18\x01\xf9\x66\xe9\x79\x6b\xfa\x51\x01\x2e\xb7\x8d\x3a\x48\x0e\x60\xc7\xfc\x15\x57\xb6\xf4\x66\x79\x05\x2b\x4a\x49\x05\x1b\xdb\xd5\x04\x75\xac\x01\x1e\x25\x5c\x3f\x11\xd7\x6f\xb9\xfb\x13\xf9\xac\x23\xec\x1c\x80\x25\xa7\x26\x8c\x39\x4c\x0a\xc3\x02\xd9\x17\xb4\x27\x3b\x98\xe9\x29\x00\x8d\xd4\x24\x44\xfb\x55\xad\x05\xdc\xbb\xc9\x7a\xbf\xec\x3d\x70\xf7\x06\x47\xee\xd6\x48\x49\x9f\xdc\xde\xde\x2c\xd9\x96\xba\xc8\x5c\x6f\x7b\x1b\x4a\x25\x9e\x8e\x7d\x41\x4f\xc7\x8a\x0a\x6d\x7a\x49\xd6\x5e\x6b\xa0\x15\xeb\x0f\x83\x26\xcf\xdb\x02\x15\xff\x25\x51\x4e\xe2\xdd\xa0\x4e\x62\x51\xd5\x99\x8e\x4e\x8e\xa4\xa2\xcb\x3f\x70\xc5\x09\x04\x1e\x30\x6c\x12\x98\xb4\xf9\x78\x81\x10\x4c\x30\x55\xe3\xd8\xc8\xa5\xa3\xd2\x8b\x8e\xf7\x20\xdd\xde\x66\xfd\x84\x16\x89\x9f\x4d\x66\x90\x6c\xa8\x1d\x76\x75\xc0\x7c\xf3\xf4\xc3\x76\xa1\x09\xa9\xd2\x55\x88\xf6\x8d\x47\x9a\x41\x07\x54\x13\x1d\xcd\x28\xc6\xfa\x88\x68\x97\x52\x68\xb8\x08\x28\x3d\xc8\x16\xb5\x52\x9b\x85\x3a\x5a\xd4\x93\x85\x1c\xf2\xf7\xab\xaa\x88\x2c\xea\xe0\xeb\x7a\x78\x89\xc8\x87\x02\x48\x42\x19\x07\xe1\xcd\xb3\xb7\x27\xcf\x4f\xde\xe5\xfe\x50\x5c\x47\xa6\x8e\x5b\xe0\xed\xb3\x97\xaf\x7f\x7b\x96\xbf\x94\xb6\x82\xe5\x92\x1f\x42\xec\x4e\x5c\xac\xb7\xc3\x2a\x3f\xae\xbc\x2c\x4b\x1e\x3c\x41\x75\x2e\xbc\x20\xe1\xdd\x75\xf2\xec\x5d\xd1\x93\x2c\x2f\xaa\x2e\x99\xe6\x51\x66\x4c\xd2\xd4\x4f\x8c\x4b\xc1\x1a\x7e\x62\x26\x39\xfa\x5a\x7e\x62\xff\x8b\xb3\x6c\xde\xff\x03\xdd\xbd\x9f\xd8\x3d\x77\x0b\x6b\xef\x48\x25\xe2\x48\x64\x98\x0b\x50\xc2\x50\x9a\xb8\x55\x99\xec\xcb\x32\x38\x45\x75\x98\x69\xed\x7f\x55\x08\x49\x69\x10\xd8\x22\xaf\x7a\xc9\xba\x50\xf6\x3d\xa9\xf4\xda\xd1\x2f\xd4\x95\x75\x06\xe4\xeb\x4a\x3b\x6f\xad\x9a\x5b\xbc\xa6\x4e\x13\x79\xe9\x0d\xa0\x1f\xa4\xed\xbb\x14\x56\xc6\x71\x50\x7f\xe0\xe3\x5f\xe9\x37\x44\xbf\xe1\x7e\x43\x61\x1e\x27\xb7\x82\xe3\xcf\xb7\xe4\x7a\xd7\x10\xf6\xa1\xe9\xb8\x29\x22\xb4\x99\x91\x6b\x39\x62\x7f\x0e\x56\xdb\x49\xb6\x31\xef\x16\x91\xdb\x86\x1c\x5b\xea\x47\xc4\xec\xe5\xd2\x3a\x1a\xb3\x95\x77\xcc\xe6\xfd\xac\x8c\x5e\x31\x5f\xbb\x2b\x1a\x84\xce\x6d\xcc\x03\x87\xe3\x51\xe8\x1e\x38\x79\xf8\x69\x05\xfb\x8f\xd9\xfb\xe6\x84\xe5\x67\xf5\xbe\xf9\x67\xba\x40\x06\x7e\x87\x3d\x95\xb2\x56\x8b\x01\x36\x50\x3a\x50\xec\xde\x33\x08\x13\x4e\x51\x1a\xfa\xb5\x28\xfd\x2b\xba\xe0\x6c\x72\x55\xae\xf3\xc0\x69\x2e\x91\x15\x32\x25\xdc\x68\x6b\x85\xa9\x89\xe3\x63\x5d\xc5\xef\xc4\x61\xed\xee\xa5\xbb\xda\xbf\xec\x1e\x49\x77\x16\x5c\x56\xc9\xf6\x1a\xbe\x63\xf7\xc3\xb9\x56\xdb\xc0\xf8\xe9\xe0\x9e\xfa\x65\x7e\x95\x9d\x67\x73\x48\x66\x1b\x9f\x58\xcc\x7b\xb2\x95\xdb\x66\xe5\xc4\xa2\xf7\x9c\x15\x2e\x9b\x1a\xb6\x1a\x2b\x3c\xa3\xfe\x27\xce\xf5\x06\xa6\x9c\x5f\x15\xaf\xc1\xc2\x07\xc4\xe1\x35\x13\xc0\xee\xa0\xf8\x86\xe1\x2d\xb7\x85\x7c\xe7\xbd\x72\x86\xb4\x1e\x39\x92\x00\xb1\xe6\xb2\x95\xba\x0f\x15\x7c\x60\x63\x75\x0a\x81\x4f\x0d\x83\x1d\xbe\xe4\x46\xda\xc8\x89\xb5\x11\xb2\x40\x8d\x0f\xeb\x3d\xf5\x4f\x55\x2d\x63\x77\xe5\x9f\x5a\x17\x4f\x5f\xf6\xfd\x2c\xc4\xd3\x1b\xee\x0b\x37\xe5\xd6\x2a\x2f\x47\xcc\x5e\x29\x78\x7b\xdb\x68\x91\x9f\x23\xea\x51\xc9\x79\x34\xb7\xb7\x8b\x4f\x3a\xb6\xa0\x68\x58\xf2\x45\xe5\x46\x5f\x77\x15\x37\x50\xda\xb1\x5d\xce\x4e\x4f\x97\xc2\xfb\xe1\x0c\xb1\xfb\x62\xf7\xa7\xe9\x8f\xf3\x9f\x9b\x39\x43\x58\xe1\xed\xdd\x1c\x94\x94\x5f\xbf\xb8\xe5\x25\xa5\x48\xde\xa0\xe0\x49\x1a\x40\x2a\xc9\x08\x2a\x67\x8c\x7e\x1f\x10\xcd\x35\x8e\x26\x1f\xed\x31\xa3\xfc\xdc\xcf\x2e\x8c\xb4\x93\x3f\xc9\xd9\x88\x0a\x29\x5a\x70\xcc\x86\xc6\x61\x0c\xff\xab\xd6\x97\x01\x4a\xb4\xac\xaf\xf8\xa8\x61\x75\x8f\x65\x19\x1b\xe2\x77\xb2\x0a\xe7\x26\xf1\xb7\xf9\xa0\xe8\x6b\x43\x19\x7f\xc3\x00\xb0\x5d\x33\xb3\xa2\x6c\x92\x5e\x42\x74\xdd\x9d\xcc\x82\xa8\x39\x4e\x74\xf1\x3b\xea\x81\x5d\x8d\x5f\xd8\x16\xbd\x90\x5e\x20\x16\x00\x0c\x8b\xf0\x85\x5b\x3a\x7c\xe1\xf6\x76\x25\x78\xa1\x09\x10\xcf\x02\x91\xf8\x27\xd2\x9f\x0d\xe9\x6f\x35\x9c\xbf\x6c\x8e\x60\x10\xfe\x09\xf1\xb7\x1e\xc4\xdf\xee\xf3\x3f\x5e\xfe\xf3\xea\xe1\x49\x25\x25\x5a\x08\xe9\xbd\x8f\x20\x48\x33\x3d\xe4\xbf\xb2\x79\x1c\x61\x86\x0a\xc8\xa2\x8e\x0b\xa4\x6a\x24\xd9\x5b\x22\xa3\xc5\xef\x59\x6a\xeb\x6b\xf5\x9f\x0a\x8f\x40\x1a\x5a\x9e\x3d\x8d\xb2\x79\x1c\x5c\x53\x03\x48\x03\xef\x3f\xee\xbc\x57\xc3\x4b\x4b\x43\x1f\x60\xcc\xe3\x10\xdd\x24\x0d\x1b\xb0\x5d\xe4\xfb\xb0\xe5\x73\xcd\x82\x70\xa3\x9c\x9e\xd2\x79\x30\x89\xf0\xf5\xd0\xe9\x3b\x5b\xd1\x05\x59\x38\x83\x04\x7f\x97\xc7\x8f\x91\xff\x3b\x0b\x26\x1f\xcf\x51\xba\x48\xc2\xee\x24\x8d\x53\x34\x74\x2e\x03\xd4\xe9\x76\xaf\x66\x11\x86\xde\x77\x6a\x4a\x3a\x15\xc4\xfb\x10\x4e\x52\xd4\x65\xcf\xba\xfd\x5e\xcf\x90\xb4\x8b\x82\x30\x5a\x64\xfa\x17\xec\x59\x77\x60\xfe\x42\xab\xc2\x39\x0a\xae\xbb\xfb\xa5\x84\x9f\xba\xd9\x2c\x08\xd3\x2b\x3d\x5f\x18\xc3\x4b\x76\x18\x7d\xa4\x7d\xb1\x6c\x4c\x7b\x52\xe8\x5d\x18\x9e\xaf\x33\x38\xe2\xf3\x06\x83\xd3\xbc\xb2\x52\xe2\x8a\x70\xd7\x15\xb0\xe0\x28\x5d\x60\x66\xb3\x31\x62\x7f\x73\xfe\xbe\x1a\x22\x95\xd9\xa0\x01\x49\x0d\xd5\x7a\xc8\xb6\xeb\x02\xf7\x84\xf9\x1d\x1a\xe8\x90\x9c\xb7\xa4\x42\xa8\x6c\xd4\xd6\xb0\xd6\x2b\xcc\x73\x64\x12\x97\x11\xd9\x05\x0a\x7d\xfe\xed\xaf\x19\x74\x68\xe3\x51\x46\xd6\xef\x28\xc1\x10\x4d\x20\x59\xf7\x51\x30\x9d\x46\x13\x67\x91\x45\xc9\xb9\xf3\xe2\xc0\x99\xd0\x43\x58\x14\x38\xd9\x62\x32\x73\x82\xcc\x99\x07\x78\xe6\xcc\x11\x9c\x46\x9f\x60\xe6\xa4\xc8\x99\x61\x3c\x77\x58\x57\x65\xbe\xd9\x54\x61\x3e\x33\xaf\x44\x6b\xad\x34\x8b\x4c\xcd\xb9\x5b\x4b\xff\x2d\x06\xb9\x21\x08\xc6\x3e\x17\x8b\xee\x84\xfa\x28\x28\x58\xaa\xfc\xe6\x8f\x2a\xb8\x82\x66\x55\xb9\x88\x33\xc2\x37\xf0\xc4\xc5\xbb\x32\x03\x66\x5e\xaf\x25\x0f\x6a\xad\x70\x8b\xad\xe2\x4e\xe5\xfb\x44\x14\x72\xf7\x32\x2b\x8b\xa2\xa4\x7d\x54\x77\x3f\x5f\x20\x18\x32\x5d\x25\x8e\xb0\x13\x25\x93\xf4\x82\xc8\x2d\x82\x7f\x2c\x60\x86\x33\x27\x98\xa0\x34\xcb\x9c\x30\x9a\x4e\x21\x82\x09\x76\x04\xc7\x1a\x11\xdc\x6c\x71\x96\x41\x9c\x39\xe9\xd4\x09\x1c\x22\xef\x31\x14\xef\xef\x9b\x1c\x1f\x02\x37\x4b\x11\xee\x9e\x51\x97\x08\xba\x72\x88\x65\x35\x1f\xe5\x76\x60\x2f\xfb\xb9\x84\x34\x12\xf5\xfe\xd1\xa6\x44\xbd\x7f\xb4\x69\x51\x47\x30\x4b\xe3\xcb\x3b\x16\xf5\xb7\xa2\x90\xbb\x17\x75\x59\x14\x15\xf5\x45\xc6\x84\x9c\x29\xaa\xce\xd5\x2c\x9a\xcc\xa4\x26\x2e\xc4\x97\xc9\xad\x93\xcd\xd2\x45\x1c\x3a\x59\x80\xa3\x6c\x7a\xed\xc8\x33\x9f\x9c\x12\xdf\x8e\x64\x2b\x83\xda\x5a\xb2\xc5\xb7\xcd\x24\xfb\x70\x63\x92\x7d\xb8\xaa\x64\x67\x97\xe7\x5a\x07\xd2\x40\x17\x17\xb8\xfd\x5e\xef\xbf\xc4\x25\x03\x8b\x79\x51\x1f\xf6\x81\x7b\x19\xc1\xab\x1f\xd3\x4f\x25\x36\x92\x9e\xd3\x93\x64\x24\x2c\x33\xca\x46\x22\x1e\xf1\xbc\x8a\x16\x98\x39\x82\x44\x92\xe0\x93\x6c\x0e\x27\xf8\x2d\x51\x1a\xa9\x32\x9d\xc0\xf5\xf7\x59\xdd\x15\x2e\x4c\x2f\xba\x39\xc7\x4d\x11\x41\xfb\x3f\x38\xfd\x25\xc9\xf7\xf9\xd3\xa6\x04\x89\xab\x96\xf0\x0a\x7e\xc2\xaf\xd2\xb0\x31\x11\xa3\x5e\x0e\xbe\x82\x30\x61\x2c\x9e\x06\x27\x3f\x72\x28\xbb\x96\x92\xf6\x08\x90\x27\x52\xd8\x42\x71\x95\x42\x5f\x5c\xcb\x17\x74\x3a\xe5\x2f\xe4\x60\x81\x81\xc1\xfb\xa6\xc0\x76\xdf\xba\xd7\xcc\x37\x2f\x44\xcd\x33\x84\x6c\xd9\xcb\x02\xee\xf7\x35\x5d\x4a\xb3\x11\xb9\x64\x97\xe7\xdd\xc9\x02\x5d\xc2\x26\xdd\x76\x90\x77\x1b\xff\x75\xed\x8a\xf8\x78\x05\xd8\xae\x2a\x17\xbd\xbb\xf7\xb5\x0c\xf7\x95\x39\xa2\x7b\xa9\xe8\x5f\x18\x07\x68\xbf\x66\x80\xc6\x92\x60\xbb\x92\x77\xe7\xc0\x7a\xa3\x62\xbf\x6b\xd9\xb7\xbe\xd9\xd3\x0e\x71\xda\x34\x2d\x2b\x0c\x9b\x98\x47\x87\x6d\x27\xaa\x42\x78\x49\xbe\xa5\xca\xdd\x86\x17\x8f\xde\x17\x9d\xda\x03\xdb\xd4\x1e\xd8\x24\x67\xd0\x7e\x6a\x1f\xe6\xb3\xad\xcb\x5b\xd9\x67\xc0\x61\x6d\x26\x7a\xf3\x29\x2e\xa5\x65\x98\x0f\xb3\x38\xb7\xca\xf9\x6e\xeb\xe7\xf2\x69\x44\x6c\x5a\xf4\x7a\x6f\x4e\x8e\x9c\x09\x0e\xce\xa1\x4e\x8d\xc0\x73\xfc\xbb\xec\x99\xde\x06\x56\x90\x5d\x6d\xc2\xef\xae\xbd\x82\x1c\xa9\xf9\x1d\xd5\xaf\x1f\x47\x16\x21\x38\xda\xcc\xea\x61\xe5\x3c\xed\x0f\xac\x6f\x7a\xa0\xdf\xb7\xbd\x3c\xb2\xbd\x28\x2a\x38\x0d\xd5\x99\xa2\xa2\xde\x8d\x92\x18\xd2\x0b\xc0\x5a\x25\xa6\xdf\xab\x52\x5a\xd6\x56\x49\x72\xc7\x86\x0c\x07\x08\x67\xdd\xab\x88\xcc\x8a\x5c\xfd\xe4\x92\xff\xa8\x62\x31\xd9\xc4\x6a\x55\x95\x7f\xa3\x9d\x9b\xf7\xfc\x24\x42\x13\xc5\xda\x4a\x95\x71\x17\xb8\x03\x7f\x5f\xfa\xaa\x10\x99\xde\x17\x5d\x3f\xb9\x76\x8b\xb2\x7a\x60\x91\xd5\x83\x4a\x59\xad\x97\x52\xeb\x16\x67\x7b\xfe\x68\xdd\x5d\x4c\xd9\x64\x76\xef\x66\x93\x59\x45\x7d\x34\x2b\x5c\x1b\x18\x38\x9b\x8e\x52\xad\xa2\xd4\x0f\x9c\x55\xcf\xd8\xb3\xbd\xd8\x5d\x6f\x99\x90\x86\x89\xfb\xbf\x4c\x14\x36\xc8\xfe\x1d\x2f\x13\x55\xf9\x7f\xe1\x65\xc2\xa6\xd7\x54\xab\x35\xf5\xd2\x66\xdd\xb1\xac\x3b\xd9\x0a\x97\x00\x7d\x29\x6c\x85\x7e\xce\x19\x5b\xc9\x73\xe5\xfa\x83\x01\x1d\xbd\x13\xb6\x1a\x72\x98\x66\x8f\x98\x6b\x60\xa1\x91\xfd\x43\x79\xef\x55\x28\x40\x0c\xf1\xd0\x09\xce\xb2\x34\x5e\x60\xf8\x1d\x4e\xe7\x43\x21\xbc\xd7\xac\x43\x3e\x7d\x17\xc3\x29\x96\x4f\x3f\x89\xa7\xae\x49\xa6\x6d\x96\x28\xbb\x8d\x89\x3b\x05\xd2\xbb\x2d\xd9\x42\x99\x86\x29\x45\x21\x9c\x44\x17\x01\x75\x11\x38\x1d\x14\x90\xc2\xff\xab\xda\xac\x71\x37\xf8\x1a\x26\xbf\x87\x75\x69\x5b\x6e\x6a\xe9\x41\xa3\xc9\x47\x2b\x70\x04\x7b\xe9\x7a\x14\xaf\xe2\x84\x5e\xfc\x67\x95\xb0\x15\x2c\x89\xeb\x01\x2a\x7c\xa4\xb1\xd9\x90\x43\xb0\xe6\x2d\x73\xc7\xf9\xeb\x1f\xa3\x24\x8c\x92\x73\x92\x8a\x4b\xdb\x18\x28\x17\xb0\xc3\xad\x3e\x10\x17\x6b\xcf\xc3\xa1\xeb\x82\x4f\xc3\x1e\xb8\x1e\xf6\x00\x1f\x4c\x41\x04\x2f\x25\xf7\xce\x91\x29\x2e\x39\x78\x82\x78\x63\x01\xe5\xda\x30\x0d\x69\xb1\xd4\x3a\x50\x07\x0e\xe8\x60\x42\x6e\x38\x17\xc8\x0d\xf9\x35\xb7\xb7\x45\xb1\xd9\x3a\x05\x68\x87\x3c\x81\xc0\x75\x90\x4f\x1e\x43\x52\x83\x37\x01\x9e\xbd\xc8\x5b\x3d\x84\x3e\x93\x18\x3f\x64\xc0\x1b\x14\x61\x71\x7d\x2c\x07\xb5\x45\x02\x75\xa1\x54\xf8\xdd\xe1\xa0\xd9\x86\x40\x7f\x5f\x68\x39\x47\x21\x91\x7a\x5c\x09\xa0\x8f\x4e\x05\xff\x15\xbd\xc7\x07\x65\x00\x2a\x0a\xad\x76\x0e\xb1\xbc\x15\xf2\x3a\x45\xb8\x3d\x35\x07\x8f\xc1\x3d\xd0\x8d\xbe\x79\x51\x4c\x10\x45\x51\xf4\x72\xb6\xae\x1c\xa0\x81\xad\x50\x97\x9e\x2d\xe8\x4f\xa3\x24\xec\x74\xca\xb0\x68\xee\x8e\x3b\x52\xd1\x23\x20\x70\x9f\xc2\x29\x0d\xc6\x4f\x13\x9f\x22\xef\xfb\xbf\xbc\x7b\xf7\xc6\x27\x83\xf9\x86\x5e\xba\xba\xa4\x25\xdb\xdb\x15\x99\x3a\x39\x7c\x96\x9f\xe7\x46\xe4\x8c\xa1\x5b\x00\x34\x52\x4e\x37\x1a\x9e\x09\x6b\x8a\x72\x41\x0d\x5c\xdf\xf5\x0c\x49\xe8\xd2\x35\x0f\x26\xd6\x04\x39\xab\xa1\x07\x82\x91\xa2\x26\xad\x59\x9e\x02\x98\x28\x20\x1e\x94\xfe\x3f\x0d\xc6\x8f\x93\x51\x30\xb4\x27\x40\x63\xea\xaa\x85\x14\xe0\xd7\x44\x80\x56\xdc\x70\x0f\xd9\xe1\x56\x0f\x3c\x7f\x3a\x64\x7a\x61\x5d\x8d\x3d\x40\xf7\x2c\x4b\x73\xf2\xfe\x1f\xde\xd0\xe1\x1c\xde\x90\xf1\x1c\xde\xe4\x03\x3a\x74\x77\x28\xa4\x80\x50\xeb\x86\xc9\xf2\x01\x64\x8c\xba\x54\xf2\x18\xa0\x23\x15\x3e\xaf\x93\x02\x4b\x41\xba\xd8\x79\x92\x19\x17\x52\xb9\x17\x57\x29\x16\xd1\xbf\xa1\x7d\x03\xde\xd1\xb8\xf7\x6c\x59\x35\xdf\xe4\xd5\x94\x67\x1e\x6d\x60\x14\x12\xf3\x94\xe1\xe5\xb9\x65\xba\xab\xf2\xd4\x3d\x47\xc1\x7c\x56\xaa\x7e\x7e\x0c\x14\xce\x1c\xfe\xe9\xd8\x34\x87\x25\xfa\x07\xdf\xa5\x7d\x9a\x5f\xc7\xd3\x30\x12\x65\x6e\xfe\x34\x45\xcf\x82\xc9\xac\xa3\x6d\x0f\xd8\x67\x07\x48\xc3\xdb\xc4\xbb\xa1\x0b\xfe\x8b\x28\xf9\xd8\xc1\xfe\xf3\xa7\x20\xf1\xc5\x78\x52\x40\x3c\x8f\x2f\x0c\xbc\x92\xc6\xfc\x0b\x39\x60\x2d\x07\x40\x07\x52\xec\xf5\xe5\x8e\x90\x4a\x00\xbd\x76\x0b\xe6\x33\x5b\x2f\x50\x27\x43\x89\xe0\x93\x7f\x77\x7b\xbb\x55\x0b\x77\x94\xa7\x96\xb4\xd2\x37\xcb\x07\x39\xa2\xa0\x92\x00\x24\x23\xcc\x3a\xb4\xe3\x0e\x5d\xcf\xcf\x66\xd1\x14\x77\x3c\x80\x46\xa7\x78\x0c\x82\xd1\xe9\x58\xeb\x7a\x5a\x65\xd1\x2d\xa4\x0f\x60\x48\x5a\xde\xd1\x76\x68\x90\x7a\x37\x88\xcd\x0c\xec\x47\xa1\x07\x02\xf6\xc3\x95\xb5\x4c\xa9\x2b\xe5\xf3\x10\xb8\xdf\xe7\xcb\x48\xea\xe3\x94\xd4\x18\x40\x7b\x31\x7e\x14\x16\x1d\x61\xd9\x9a\x00\xfd\x28\x34\xb4\xe3\x41\xb2\x35\x1a\xa5\xdb\xdb\xb9\x43\x1e\x03\x45\xd3\x7e\xa7\xdb\xdb\x1d\x5e\x5f\x68\xae\x2f\x36\xd5\x17\xf3\xfa\x0a\xc1\xb9\xa1\xce\x6c\x43\xe4\x5f\x04\x73\xe3\x26\x92\x8f\xd2\xf1\xc9\x89\x0f\xb3\x49\x30\x87\x5c\xb5\x00\xd4\xd7\x6a\x18\xac\xf2\x2d\x05\x30\x61\x88\x7b\x25\xf4\x5c\x55\xf7\x69\xbe\x88\x38\xaa\xa6\xe2\xa7\xd3\x69\x06\xf1\xdf\x49\x01\xa4\x24\x0e\xe9\x77\x87\x45\xfd\x42\x4b\x20\x65\x15\xd5\x23\x8b\xf6\xd9\x0a\xae\x08\x1a\x75\x23\x98\x2b\x66\x5b\x54\x43\x64\xfa\x0f\x0c\xb7\xb7\x3b\xb0\x88\xea\x04\xe9\xec\x0b\xd3\x09\x55\xb9\x3a\x1e\xb8\xa1\x77\xcf\xc3\x02\x8e\x55\x7a\xc1\x30\x8c\x32\xdc\xf9\xcb\x29\x3d\x2a\xfc\xe7\xc8\x65\x57\xdd\xe3\xbf\x00\xec\x33\xfc\x12\xef\xf6\x56\x57\x58\xc5\x71\x75\xab\xaf\xa3\xf6\xe9\x8b\x87\x4b\x07\x1e\x24\xbc\x32\xbc\xf6\x59\x87\x5e\x17\xb0\x99\xe0\xe6\xad\xf2\x3c\xdb\x5a\x56\x04\xac\x02\x37\x17\xe9\x22\x83\xe4\x9c\x63\x80\x04\x76\x72\xac\xb3\x6c\x96\x5e\xd1\x85\x96\xab\xa1\x10\x9c\xe2\xb1\xb7\x04\xec\xf3\x05\xae\xfe\x7a\x16\x85\xd0\xf0\xf5\x92\xe9\xd9\x1a\x34\xa9\x2c\x48\x87\xc0\x65\xeb\x18\xe6\x0e\xc1\x11\xcc\x3a\x37\x9f\x86\x90\x8b\xd0\x3f\xc0\xb5\xfc\xfb\x9f\xdd\x7d\x79\xcc\x82\xbc\xd3\xe9\x1e\x93\x41\xec\xe7\xb7\x1b\xc5\xf3\x57\x6f\xe9\x2d\x81\xac\xa6\x2a\x79\xc5\xb0\x1c\xdd\xe4\x40\xc6\x6d\x09\x0a\x02\x91\xf3\x39\xfa\x13\x86\xb6\xc5\x26\x05\xd9\x4b\x25\x27\x64\xc7\x8d\x42\xd7\x7b\x80\xcb\x8b\xfe\xe3\x12\x61\xa3\x59\x48\x38\xee\x55\x41\x4e\x86\xf6\xaf\x4d\xa8\x59\xca\xd7\x78\x25\x5a\x44\x63\x00\x83\x3d\x9c\x48\x7a\x92\x63\x15\xc6\x97\x7b\x7d\x7f\x84\xd7\x19\x77\xb9\xe7\x4f\xce\x21\x7e\x7d\x95\x08\x3f\x70\xe6\xa6\x9e\x09\xa8\xce\xaa\x34\x24\x1b\x72\x3a\x44\x23\xe4\x4f\xa3\x18\x43\xa4\xcf\x05\x2e\xa3\xc6\x2c\x9e\xc2\x6c\x82\xa2\x39\x4e\x99\xb7\xbb\x0f\x93\xc5\x05\x73\xa4\x27\xf2\x0a\x12\xba\x61\x70\x51\x4e\x00\x12\xe0\xda\x4e\xb2\xd4\xe3\x34\x72\x0f\xf8\xfe\x77\xc9\xff\x14\x01\x41\xa9\x07\xfc\x0d\xf3\x56\x4f\x16\x71\xbc\xa5\xa0\x82\x26\x2a\x2a\x68\x32\x1e\xde\x2c\x1f\x24\xff\x35\x78\x8c\x79\xb7\x74\x02\x8f\x8c\xa6\x79\x96\xd3\x4a\x83\x80\xce\x30\xcf\x1b\xd6\xb4\x30\x7b\x6c\xf2\xb8\x27\x13\x0c\x82\xba\x4f\x3b\x81\xe7\x0d\x95\x3a\x59\x2a\x64\x73\xe9\xc7\x75\x05\x74\x02\x2a\x93\x9e\x97\xeb\xcd\x7a\x20\x02\x48\xf2\x9d\xc5\x89\x12\x07\x1a\x1b\xc3\xca\xe2\x31\x03\x09\xc8\x47\x93\x1c\x29\x84\xcb\xa2\xf8\x7d\x85\x22\xcc\xff\x5e\x7a\x43\x78\x8a\xc7\xa3\x04\x28\xe5\x06\x1a\x8f\x6e\xc3\x10\x1c\x68\x89\x8e\x51\x22\x70\x46\x7a\x04\xce\xed\xed\x56\xa7\x32\x06\x47\x84\xd5\x30\xf9\x3a\x1d\x03\x34\xda\xea\x81\x60\xb4\xd5\x07\xa9\x88\x84\xc0\xe8\x5a\xca\x60\x06\xa2\x11\x34\xc4\x79\x7c\xb7\xd5\x41\xa3\x4e\x36\x8a\xfc\x04\x7e\xc2\x1d\xcf\xf3\xc3\x34\x81\x1e\x39\x8f\x31\xbd\x28\xf3\x69\xc7\x79\x60\x0b\xdf\xde\x26\x5c\x76\xc9\x21\xce\xfb\x8e\x14\xe9\x7d\xc7\x01\x00\x63\xef\x26\x20\x55\x48\x47\xf1\x72\x1a\x25\x41\x1c\x5f\x53\xb0\x40\x74\x7b\xcb\x82\x45\x22\x9f\x55\xf9\xf6\x56\xfc\xd5\xf1\x64\xca\x68\xda\x09\x38\x94\x74\xba\xcc\xe7\x13\xed\xa9\xd5\xc3\x8a\xd2\xff\x6b\xc2\x8a\x52\x11\x56\xa4\xf7\x57\xf3\xc0\x22\x6a\x02\x5a\x4c\xf0\x02\xc1\xaf\x17\x5d\x94\xde\xc3\xe8\x22\xe5\xa4\x3f\x82\xda\x61\x9b\xff\xa4\x87\x47\xf6\xb7\xb4\x7b\xb1\x9f\x4f\xc8\xb6\x93\x04\x18\x72\x9b\x40\xa6\x86\x28\x65\xa3\x4d\x41\x46\xdf\x2c\x01\x2e\x7f\xdb\x57\x12\xf5\xc7\xdc\xf8\xf2\x40\xdf\xf6\x68\x43\xc9\x56\x59\xde\x22\x15\x4e\x20\x9f\x48\x0e\x51\x53\xa8\xa6\x16\x8d\x4c\x38\xfc\xa5\xe2\x07\xc6\xaa\x0f\xd4\xaa\x0f\xc6\x43\x57\x20\x09\x02\x13\xf0\xb6\x8e\xb0\xad\xb7\x20\x37\xa7\x9d\xe2\x31\x51\xdb\xc9\x4a\x7d\xf3\xfc\xe9\x50\x39\xc7\x69\x76\xab\x44\xfb\x85\x84\x85\x08\x1c\xcf\xa2\x38\x44\x30\x19\x9e\x8e\xc9\x78\x9f\xe2\xf1\x12\xc4\xa6\x36\x02\x34\x82\xe5\x13\x1b\x07\x0d\xef\x9c\x62\x00\xc7\xb6\x03\x9d\x03\xc5\x69\x95\x54\x01\x41\x22\x3d\x90\x22\x06\x83\x81\x47\x49\xb3\x7b\x63\x90\x51\xee\x6c\x10\x8d\x4e\xdd\xdc\x72\xe3\x02\x57\x1a\x6c\xf2\x28\x15\xf2\x17\xf5\x93\x77\xa5\x6c\x67\x25\xcb\x63\xce\xd1\x0d\xc9\xb1\x57\xc1\x0a\x67\x2b\x58\x44\x34\x04\x80\xd8\x79\x96\xbf\xba\x21\x43\x3d\x4c\xc4\x21\x6e\x88\x96\xcb\x07\x16\x51\x8e\x1f\x14\x44\xde\xd0\xec\x8c\x1e\x64\xc4\xe1\xdb\x33\xf7\x1e\x99\xd5\xa4\x8d\x4a\x17\x49\x2b\x44\xde\x57\x00\x4b\x6b\x85\xfa\x34\xe9\x24\x9d\x9b\x25\x80\x1e\xb8\x59\x02\x3a\xfc\x65\xa3\x26\xcb\x5e\x0c\xb8\xff\x7b\x1a\x25\xb4\x14\x7a\xfc\xe0\xed\xe3\xb3\xd8\x48\x96\x4f\x5b\xc1\x02\x73\x5c\x23\x19\x7a\xa2\x8c\xb3\x90\x36\x9f\xe5\x68\x95\x88\x05\xf9\xce\x67\x56\x42\x7e\x0c\xa2\xe8\xcb\x0f\x0a\x6b\x4c\xb9\xb7\xca\x33\xdd\x38\xd5\xfa\x63\x7d\x01\xc8\xa7\xda\xca\xb3\xf5\x66\x69\x9c\xa6\x8d\xf0\xf1\x6f\x96\x20\x18\xdd\x2c\xcd\x0b\x10\xaa\x5a\x80\xa4\x59\x9c\x52\x43\xd0\xc5\x68\x69\x54\x35\x05\x84\x3f\x48\x47\x49\x49\xa2\x52\xa5\xba\x1d\x34\x4a\x85\x34\x79\x20\x55\xc4\x49\x3e\xd6\xfe\x92\xef\xd9\xc2\x0d\x16\xa3\x34\x97\x22\x30\x19\x45\x9d\x00\x2c\x00\x06\x05\x3b\x78\xe2\x8b\x61\xf4\x7f\x0a\xa2\x98\x9c\x92\xb6\xb7\x3b\xd9\x28\xee\x18\xde\x08\xbb\x2b\x17\x0a\xcf\x03\x88\x35\x27\x1c\xdd\xb0\xb9\xce\x0d\xe0\x5c\x68\xa8\x30\xa3\x65\xce\x7d\x92\x6d\x6f\x77\x42\x99\xdd\x28\xf3\xc0\xc4\x17\x6b\x1b\xd3\xe4\x42\x6f\x09\x63\xc9\x1f\xc4\x3f\x99\xa8\x9f\x90\x05\x49\x1f\x99\xc4\xd2\xd1\x6a\x3b\xd1\xa9\xe1\xe6\x22\xf1\x9f\x3f\xf5\xc6\xc2\x60\x17\x77\x4e\xc9\x83\x31\x39\x70\xf2\x58\x1e\xf3\x2a\x0d\x3d\xa6\x19\x89\x85\x8e\xac\x5c\x74\xc8\x59\x4e\x19\xed\x6b\x69\x64\xa7\x7d\x0e\x16\xa3\x9b\xb7\x30\x8c\x10\x9c\xe4\x7d\xf4\xfc\x29\xeb\xa1\xe4\x94\x7d\x3e\x56\x7a\xaa\xa2\xbe\xc6\x11\x5b\xe4\x5d\x14\x77\x5a\x7d\xac\x0c\xea\xf3\xa7\x9e\x07\xb2\xc2\x88\x2c\x38\xc9\x92\xde\xe7\x81\xc7\xcc\xb7\x0b\x9d\xa1\x02\xe5\x4c\x33\xda\xa2\x27\xee\x47\xe8\xbd\x12\xf9\x4b\x61\x9b\x53\xef\x9a\xd8\xcd\x95\xf1\x0e\x05\xb8\x5d\x65\x6b\xec\xa8\x5f\x91\x85\x89\x2c\x4a\xaa\x1a\xb4\xa8\xb5\x0a\xc0\x8b\x33\x16\x1c\x1b\x43\x11\xbb\xa1\x20\x21\x14\xdf\x56\x7e\xb9\x3e\xf9\x9c\xf5\x03\xb9\x22\xde\xe8\x67\xc2\x73\x88\x4d\xe0\x33\x12\x04\x86\x6e\x1c\x4d\x3a\x20\x09\x70\x74\x09\xbb\xd9\x04\xa5\x71\x4c\x72\x6f\xdb\x0f\xe5\x0c\xbe\xe5\xee\x98\xa7\x73\x32\x2b\x4c\x9d\xc0\x4d\x76\x99\xfd\xa3\x6f\xb9\xe1\xb9\xff\x52\x8b\x86\xe7\xde\x41\xdf\x66\xc3\xe7\xf8\x9a\x91\x42\xd7\xc1\xa8\x7f\x1d\x7a\xc9\xe0\x8f\x7f\xfc\xf1\xf4\xb7\x47\x0f\x6b\xe8\x25\x81\xbb\x1d\x60\x4c\x83\x18\x0d\x3c\x93\x45\x60\x1e\xea\xce\x26\x5c\xb2\xfa\x03\x05\x83\x2e\xef\x0e\xea\xbd\xb7\x0b\x06\x35\xb0\x0b\xb3\x20\xfb\x85\xc5\x47\x36\xc2\x73\xb0\xc6\x52\xba\x0d\xc0\x33\x67\xa2\xa0\x5a\x50\xc1\x7e\x23\x6c\xb6\xba\xf2\xb2\xc5\xd9\xa6\x8b\x34\x38\x19\xae\x53\xc3\xb3\x34\xbc\xae\xa8\x9c\xc1\x7b\xd1\x14\xbd\x5a\x12\x11\x23\x68\xdf\x21\x70\x61\x72\x49\xe6\xc7\xf1\xeb\x57\x27\xbf\xbe\xf8\xf0\xe4\xf8\xc5\xc9\x87\x67\xaf\x9e\xfc\xf8\xe2\xd9\xd3\x02\x0f\x69\x10\xc7\xe9\xd5\x8b\xf4\x3c\x4a\xda\x06\x60\x1e\x00\x8e\x31\xa8\x3a\x22\x4e\x29\xfc\x5e\x4c\xf2\xeb\xe2\xf4\xfc\x3c\xae\x84\x1a\x95\x30\xdc\x9c\x6a\x43\x41\xf7\x57\xf1\xb7\xe9\x08\x43\x8c\xa9\x8b\xdc\xce\x0e\x5b\x1e\x86\x38\xfd\x08\x93\x2a\x0c\xaa\x02\x6c\x36\x4b\x6f\x83\xcd\x16\xe0\xf7\x5a\xe4\x67\x71\x0a\xf1\x22\xdd\x27\x14\x08\x35\x45\x4a\x2c\x54\x9d\xff\xf7\x8b\xf4\xdc\x89\x12\xe7\x2a\xc2\x33\x27\x50\x42\xd5\x69\x96\x2b\x51\x9b\x8b\x3c\x6b\xc1\x50\xcb\x01\xaa\x0d\x60\x10\x37\x27\xf9\xfc\x26\xae\x5e\xf8\x17\x71\x73\xd9\x6f\x57\xc5\xa3\x75\x3c\x52\x4b\x1b\xcf\xba\xcc\xba\x66\x94\xc2\xab\x28\x8e\xd9\x85\x73\x3b\x7f\xbd\xe2\x05\x5c\xbe\xcc\x73\x8f\xbd\x28\x7b\x0b\xcf\xa3\x0c\x43\x04\xc3\x8e\x58\x99\x3d\xce\xe6\x54\x78\x9b\xaf\xa3\xcc\x31\xa0\x15\xdd\x0d\x05\xdf\xb4\xed\xd0\x5f\x03\x04\x70\xfe\x3c\x19\xec\x3c\xb9\x7a\xb4\x02\x23\x62\x92\xe2\xae\xc2\x8a\x58\x06\x21\x75\xf7\x7a\xbb\x4d\xb9\x11\xf7\xf5\xed\x1a\x9c\xaa\x3b\x79\x31\x14\x8f\x96\xd0\x75\x81\xa5\xe0\x1c\xf2\xf6\x94\xac\x96\x4d\x40\xb5\x73\xd5\xa8\x0c\x2c\x5a\xb9\x6b\xd6\x00\x27\x94\x31\x67\x45\x6d\x25\x56\xe2\x18\xb8\xc7\x54\x54\x1c\xa6\xf2\xc1\x50\x42\xd8\xba\x45\x28\xda\x22\xe4\x40\x25\xd8\x6a\x71\x65\xb6\xf4\x53\xd5\x8a\x53\xd3\x33\x75\x2a\x45\xa9\x73\x76\x8d\xb0\xbe\x1a\x36\x90\x1d\xcb\xb6\x55\xe3\x1b\x2d\xde\x35\xcd\xab\xd0\x47\x8a\x2d\x33\x43\x63\xb2\xff\xa3\xdc\xac\xc1\x35\xbb\x99\xb9\x8c\xb2\x08\x93\x21\x76\x7e\x7d\xfb\xc2\xc1\xb3\x00\x3b\x51\xe6\x70\xfa\x38\x32\xf0\x8b\xe4\x63\x92\x5e\x25\x0e\x82\x9c\x92\xcb\xc9\x52\xe7\x3a\x5d\x38\x93\x20\x71\x30\xba\x76\xce\x53\x92\xf2\x2c\x98\x7c\x74\x70\xea\xe0\x19\x74\x50\x9a\x62\x27\x45\xf4\x2d\x82\xdd\x6c\x71\x76\x11\x51\x4d\x80\x61\x1f\x3f\x39\x7e\xe1\xbc\x23\x5b\xe8\xce\x09\x9c\x20\x88\x9f\x3f\x75\xce\x8a\xd9\x3c\x39\x7e\x91\xf9\x95\x78\x17\x95\xf0\xbc\x8d\xba\xb3\x7a\x93\x2b\xf6\x68\x1c\x19\x03\xa2\x48\x85\xbb\x31\x67\x16\x31\xa3\x4c\x1d\x00\x37\xd0\x23\x3f\x88\x02\xe6\xce\xd2\x0b\x89\x26\x3a\x63\x24\x47\x34\xca\x15\xc1\x29\x0b\x6c\xe6\xd0\x71\xa5\xb8\x92\x9f\x53\xd9\x4d\xa4\xa7\x9b\x01\x84\xd4\xb5\x23\x4c\x27\x59\xab\x76\x28\xb5\x3e\x32\x2a\xb0\x4f\x5f\x1f\x9f\x7c\xf8\xf5\xed\x0b\x0d\x9f\x23\x6f\x7e\x92\xa6\x73\x98\x40\xe4\x24\x29\x82\x53\x88\x10\xc3\x11\xa7\x68\xa3\x82\xe5\xe9\xc3\x59\x1c\x68\x35\x7a\x0b\x83\x90\x8a\x98\xf0\xc4\x92\x80\xea\x4d\x20\x52\x56\xc7\x97\x6f\xae\xe9\xd5\xee\x1d\x62\xb7\xa0\x7b\xd1\x3d\xd8\x11\x7a\x80\x92\x35\x07\xf4\xca\x17\x3b\xc1\x02\xcf\x52\x14\x7d\x86\xe1\xdd\x4c\xba\x4d\x2d\xd1\x6c\x2b\xbf\x83\x0a\x6e\x72\x91\x5d\x64\xd8\x39\x83\xce\x39\x0a\x12\xb2\xc6\xce\x21\xba\x88\xb2\x8c\x2c\x3a\x64\xf2\x5e\x46\xf0\x8a\x3a\x43\x52\x72\x6c\xdf\x79\x92\x7d\x64\x0b\x64\x10\x5e\x44\x49\x94\x61\xee\xf1\x31\xa5\xcb\x2d\x9e\x45\x09\x7d\x2f\x90\x84\xd8\xc5\x3a\x3d\xd5\x7c\x13\x2b\xe5\xdd\xaf\x30\xc0\xdd\x09\x26\xb1\x50\xf8\xf1\x05\xc3\x31\xfe\x9a\x6b\x4e\x5d\x9f\xc4\x30\x40\xc9\x1d\x74\xca\x8b\x67\x4f\xde\xbe\x2a\x74\x0d\xd3\xff\x77\x32\x38\x59\xa0\x08\x5f\x77\x13\x88\xaf\x52\xf4\x31\x4a\xce\x77\xe6\x28\x0d\x17\x74\x8c\xbb\xc1\x24\xce\x36\xd2\x6d\x3f\xa5\x71\x9c\x5e\xd1\x8e\x3b\x5f\x44\x21\xfc\x3a\x8b\xf4\x5a\x87\xc8\xe2\xd9\x68\x83\x18\xd4\x6d\xa1\xa5\x29\x4c\xfc\xbd\xa2\xae\x0f\x1e\xce\xd0\xa3\x47\x68\xaf\xc6\x74\x6a\xb4\x98\x1a\x01\x3d\xa8\xe3\xb4\x5b\x41\x25\x22\x53\xe4\x10\x1c\x1b\xc1\x1c\x2f\xf7\xed\x9f\xfc\xf0\xab\xf3\xc3\x6f\x84\xee\xbd\x35\xcb\x3c\x15\x8d\xd7\x09\xf7\xe1\x1f\x6e\xf5\xca\xdc\xf0\xc2\x83\xbc\x40\xe5\x0c\x19\xef\x9e\xb7\x32\x3b\x44\x4d\xf0\x6d\xa3\xe8\x4e\xbd\xfa\x05\x7e\xee\x22\xc9\x3b\x38\x1d\xd7\x86\x7c\xd6\x51\xb9\xaf\x1e\xd2\x5a\x0c\x08\xcb\xd0\xc4\x97\xfe\xb3\xf4\x8a\x79\x81\x22\x1a\x97\x5b\x4a\x49\x07\xcd\x94\x78\x43\x84\xe4\x0f\xda\xd0\x91\x17\x48\xc8\xf3\xb8\xc4\xed\x6d\x23\x21\xb9\xc8\x7b\x8e\xd2\x4f\xd7\x3c\x6b\x92\x97\xee\xca\x24\x72\x81\x34\x17\x1e\x51\x4b\x7d\xab\x94\x58\xac\x2a\xc6\xf0\x82\xd0\x62\xef\xa6\x73\xdf\x89\xd0\x3d\xf6\xdf\x07\x25\x96\x6e\xec\xdd\x0b\x12\x70\xa0\x17\x49\x07\x90\x4b\x1c\xfd\x5b\x19\xa7\xd6\xf6\xd3\x69\x1c\x64\xb3\xae\xb0\x9d\x99\x2e\xf6\xe3\xa8\x4b\x13\xd9\xbf\xfa\x36\xef\x76\xa7\x29\xba\xe8\xca\xdf\xad\xaf\x77\xff\x24\xb3\xf8\x77\xf1\x3a\xff\x93\xcc\xe2\x1e\x90\x59\xec\xc1\xa7\x87\xaf\x9f\xff\xcd\x7c\x6d\x52\xa3\x8d\xaf\xa3\x3b\x9b\x56\x01\x05\xf9\x65\xa7\x73\xfa\x7f\x4e\xdf\x8f\xc7\xde\xc3\x9d\x73\x90\xad\x06\x04\x63\x23\x08\x43\x30\xd3\x57\x31\x1b\xeb\x57\x49\x13\x64\x0f\x39\xd5\xa6\xfe\x58\x51\x3c\x45\xa0\xab\x1f\xc4\x51\x90\x75\x5c\xd2\x54\xba\x43\xb9\x1e\x88\x30\xbc\x68\x90\xac\x4e\x19\x9e\xa4\x09\x0e\xa2\xc4\xaa\x0f\x93\xbc\x5c\x2f\x57\x7d\x8a\xad\xcb\xdd\xbb\x41\x90\x2b\x9f\x49\x8a\x2e\x82\x38\xfa\x0c\x9f\x91\x83\x0d\x4d\x04\xb2\x51\xd2\x09\x44\x24\x24\x59\x32\x7c\x4a\x8b\xf9\x24\x8e\x3b\xa9\xe7\x81\x68\x94\x9d\x8a\x33\x48\xb7\x3f\x3e\xed\x8d\x1f\xa0\x51\xb7\x3f\x1a\x8d\x22\x9f\x8e\xe9\xeb\x69\xc7\x3d\x75\xbd\xc7\xae\x1e\x76\x4e\x16\x33\x40\x5e\x88\xa7\x11\x70\xc7\xae\x37\x8c\xa8\xcc\xc6\xac\x4e\xa4\x15\x34\x0c\x29\xf6\x67\x41\x12\xc6\xbc\x5e\x01\x40\x5c\x5b\x15\xc3\x46\x0e\x12\xa4\x82\x14\xb2\x61\x29\xd4\x8e\x85\x58\x4b\x16\xcb\xe2\xfe\x9c\xd5\xef\x52\x08\x42\x0c\x3f\xe1\x2e\x73\x2d\xbe\x1f\x47\xe7\xa3\x67\xef\x5e\x3d\x9d\x9e\xef\x37\x26\x3a\x9b\x46\x30\x0e\x33\x88\x8d\x36\xa4\x42\x13\xcb\x86\x24\xab\xe3\x87\x46\x17\x96\xc1\x00\x4d\x66\x95\x66\x28\x13\x98\xfa\x89\xfc\xcc\x0c\x5d\x7e\x00\xdc\x28\x99\x2f\xb0\x66\xc1\x4a\x13\x5e\x5a\x05\xb4\xb7\x70\x23\x51\x01\x46\xd3\x84\xe7\xd5\xf6\xb3\x8f\xf0\x3a\x4c\xaf\x2a\x3c\x4f\x5c\x91\x42\xc7\x48\xe5\xac\xaf\x39\xce\x1d\xf5\x3d\x61\xe4\x72\xdc\x0f\x85\xbf\x99\xc7\xc1\x04\xce\xd2\x98\x5e\xe2\xd3\xf7\xea\x13\x91\x5f\xb0\xc0\xe9\x34\x9d\x2c\x48\xaf\xe7\x7f\xeb\x24\x6b\xfa\x40\x54\xc1\xbc\xbb\xeb\xba\x49\x18\x67\xc7\xda\x56\xae\x5a\xe0\xae\x7c\x15\xb7\xaf\x6c\xfc\x28\x2a\x24\x25\x47\x8c\xca\x20\xa6\xeb\x07\xf3\xaa\x56\xa7\x28\x1f\x1c\x53\xf4\x00\x8d\x1a\x78\xcc\x66\xe8\x10\x32\x60\x27\x3e\xe2\x5a\x99\xfd\x5d\xea\x2f\xfd\x11\x5e\x1f\xa7\x21\x3d\xc3\x15\x19\x1a\x8b\x4b\x50\xbd\xe9\xee\x1c\x45\xa1\xea\xdf\x6b\xd0\x94\x5b\xf9\x42\x1b\x92\xc7\xc1\x75\xba\xc0\xd9\x4e\x1e\xda\x4e\xde\x2e\x2e\x12\x35\x73\xb6\x4d\x75\x19\xf6\x5d\x41\x1f\x07\x09\x40\x9b\x5a\xfc\x6a\x34\x95\xfe\xc1\xef\x93\xf9\xef\xe1\xd4\xac\xa9\x4c\x60\x1c\xbb\xa0\x4a\x61\xe1\x0e\x0c\x49\xf7\x2a\x4a\xc2\xf4\x8a\x03\xc2\x46\x9f\x61\xc5\xe4\xe6\x09\x74\x2c\x40\x03\x27\xe4\xbe\xe8\x2d\x93\xcf\x36\xbb\x13\xe1\xc2\xeb\x02\xf7\x07\x4e\xf0\xda\x65\x85\xbb\x3f\xb0\xd4\xdd\x18\x4e\xb1\xf2\x13\xa7\xf3\xfc\xd7\x31\x5b\x9e\xc8\xc7\x71\x04\x13\x7c\x12\x7d\x86\xc7\xb9\xc3\xdc\x22\xe6\x6b\xc7\x07\x9e\xf7\x09\xab\x36\x7b\xc6\xb2\x78\x41\xb2\xd7\x1f\xbd\x4b\x29\x7c\xa0\xad\xf5\x5a\xd1\x75\x5c\xff\xae\xa1\x62\x49\x2d\x61\x73\xf9\x96\x43\xac\x5d\x45\x44\xcf\x0f\x64\x84\x2b\x9c\x3d\x0a\x77\x25\x2a\x58\x23\xc3\xd8\xe4\xf2\x2b\xee\xc3\xfb\x7b\x60\xc0\x91\xa4\x01\x67\x6d\x13\x58\xd2\xf9\x0d\x3a\x4d\x7d\x64\x87\xa7\xdc\xec\xbd\x81\x71\xc2\x37\x86\x43\x94\xea\x6e\xfb\xf5\x94\x7a\xa2\x06\x02\x5b\x42\x01\x28\x14\x73\x9e\x03\xb9\xec\xf7\x7a\x80\x0c\x03\x43\x5d\x19\xf6\xfb\xbb\x80\xa6\x18\x76\x7a\x00\x89\xe2\xbd\x8e\x7b\x0e\xf1\x09\xfd\xb2\x80\x8a\x58\x68\xa0\x3b\x5e\x99\x58\x97\x2d\x52\xa3\xd3\xc1\x3e\x10\xff\x1b\x57\x23\x10\x36\xcc\x59\x98\x12\xd9\xcc\xd7\x8c\x89\xaa\x92\x49\x77\x14\x01\x8f\xd7\xf1\x96\xe3\x8d\x00\xfe\x51\x19\x7f\x41\xd7\x64\xaa\x01\xb3\x65\xad\xcb\x56\x69\x77\x4c\x4f\x8e\x92\x4d\xb8\x04\x5a\x47\x64\x58\xe8\xe2\x26\x00\x2e\xbe\xb0\x1b\xde\xc8\x21\x75\xc9\xfe\x26\x46\xaf\x84\xdb\x23\xd8\x4a\xca\xd0\x3c\x37\x1a\xd2\x4f\x9e\x33\xff\x82\xe1\x0e\xc9\x3d\x9b\xf5\xad\x01\xf1\xa4\xf8\x39\x15\xd3\x07\xd1\xb4\x83\x73\xfc\xaa\x8b\x20\x4a\x9c\xef\x1d\x22\xb2\x9e\xb8\x55\xd1\x80\x81\xce\x21\xfe\x31\x5d\x50\x11\x3e\xa6\x4b\xd2\x5b\x38\xc1\x1d\x8f\x1c\x74\x64\x2e\x7f\x99\xa6\x29\x86\xe8\x14\xa5\x31\x1c\x09\xc2\xed\x28\x99\xa6\xee\xf8\x2f\x34\xa4\xd6\xc7\xe9\xfc\x61\xe0\xb3\x35\x8d\xf5\x0d\xc8\x46\x12\x12\x26\x4a\x12\x88\xd8\xe3\x6e\xfa\x40\xe0\xcb\xe4\x3d\xf4\x32\xc0\x33\xff\x22\xf8\xd4\xe9\x81\x4c\xe0\x84\x31\xd6\xf8\xe7\x64\x90\x3a\xda\xa3\x13\xba\xcc\xbe\xe1\x20\xb2\x1d\x6f\x49\x1a\x15\x15\x0a\xa3\x98\x4a\x20\x2e\x75\x11\x1f\x55\x39\xec\x0f\xb2\xab\x88\x1c\x7e\xb6\x7a\xde\xcd\x24\xc8\xa0\x13\x7d\xdf\xef\xf5\x77\x87\x7b\x5b\xa3\x78\x7b\xbb\x68\xf1\x94\x9b\xbd\x36\x91\xbc\x07\x67\x08\x06\x1f\x1f\xf0\xef\x0f\xf6\xf6\x86\xbb\x35\x9f\xef\xee\x02\xf2\xbf\xbd\xe2\xb7\x7b\x87\x07\xc3\x41\xcd\xb7\xfb\x3d\xb0\xdf\x2b\x7c\xf8\x3f\x7b\x87\x87\xc3\x7e\xcd\x87\xfd\x5e\x6f\xec\x2d\x63\xc3\x8d\x41\xb1\x57\x84\x9d\xf8\x3e\x4c\xb0\x15\x60\x72\x66\x41\x36\x8b\x26\x29\x9a\x77\xf9\x5d\xfc\xbd\x38\x8d\x5e\x1c\xbd\xf8\xfd\xf3\xe5\x34\x36\x2b\x64\xc1\x02\xcf\x9e\x46\x41\x9c\x9e\x53\xf6\x62\xd1\x16\x17\xb8\x4f\x16\x78\xf6\x53\x8a\x2e\xf8\x9f\x6f\x50\x3a\x8d\x28\xa2\x71\x30\x8f\x5c\x71\x59\x2b\x7e\x99\x9e\x45\x21\x3d\xed\x24\xe4\x9f\x8f\xf0\x7a\x8e\x60\x96\x1d\x33\x92\x6a\x71\x8e\x2b\xb2\xa0\xda\xf5\x42\xdd\x8b\xf2\x22\x0d\x03\x2a\x0f\xf4\x34\x26\xbd\xac\x1a\xf0\x8f\x29\xc8\xcc\x67\x01\x99\xb1\xa6\x13\x71\xa5\x5b\x46\xbd\x0f\x5f\x05\xab\xd4\xe0\xd0\x2d\x72\x4a\x0d\x0e\xc4\xa3\x4f\x17\x31\xd5\xe8\x67\x18\xcf\x87\x3b\x3b\x57\x57\x57\xfe\xd5\xae\x9f\xa2\xf3\x9d\x41\xaf\xd7\xdb\xa1\x79\xda\x5e\xd2\x6f\x77\xdc\xbc\x06\x38\xc2\x65\xee\x57\xe6\xf8\x2b\x4e\x99\x25\x26\x92\x1e\xe5\xf8\x70\x5f\xf6\x77\xfd\xc1\xe1\x9e\xd3\x7f\xe4\xf7\x0f\x0e\x83\x81\x7f\x78\xf0\xc8\x61\xff\xed\x39\x7d\xa7\xdf\xf5\x7b\xbd\xc3\xee\xbe\x7f\xb0\xdf\x77\xf4\x97\xe4\x35\x79\xe9\x90\x97\x9f\x2f\xf6\xfd\xfd\xa3\x47\xdd\xbe\xbf\xbf\x77\x10\xf4\xfd\xdd\xdd\x5d\x87\xfd\x97\xe6\xe2\xf4\xba\x03\xff\xd1\xa3\x03\x47\x7f\x43\xde\xf5\x1c\xfa\xe6\xf3\xc5\x9e\x7f\xb8\x4f\x5e\x0d\xf6\x8e\x82\xbe\x3f\x38\xe8\x3b\xec\xbf\x2c\x03\xbf\x37\x38\xe8\xfa\xfd\xde\xc1\xa4\xe7\xf8\xbd\x5d\xf2\xd8\xef\x3d\x3a\xe8\x92\xe7\xe4\xf1\xe7\x8b\xae\x7f\xb4\x7b\xd0\xdd\xf5\xf7\x76\x1f\x19\x2a\xe0\x1f\x1d\xd2\xda\x1d\xed\x4f\xfc\xde\xee\xae\xdf\x3f\x18\xd0\x7f\x77\xf7\x0e\x49\x56\xfb\x83\xae\xdf\x3b\xf0\xf7\x77\xbb\xfe\xde\xa3\x7d\xff\xe8\x51\x97\x7c\xe0\xf4\xfd\x1e\x69\xdb\x9e\x7f\x30\x70\x76\xfd\xc1\x51\x39\xe3\x2e\x49\x42\x73\xde\x3d\x34\xb4\xae\xef\xf7\xfb\x24\x9b\xbd\xfe\x81\xbf\xbb\x37\x20\xff\x4f\xdf\xf4\x78\xc5\x07\xb3\xae\xdf\xeb\xef\x7e\xbe\x20\xf9\x1c\x76\x77\xfd\xdd\x5d\x43\xe5\xc9\xbb\x43\x52\xc6\x60\x6f\xe2\xf7\xfa\x7b\x7e\xbf\xbf\x47\xff\x1d\x0c\x8e\x48\xed\x77\xf7\x06\x41\xa9\xec\x6e\xdf\xef\xf7\x06\xa4\x06\x87\x83\x19\x49\x4d\xbb\x68\xb0\xef\x1c\x90\xff\x9a\xba\xa8\xff\x68\xbf\x4b\xc6\x6f\x42\xea\xe4\xf7\x8f\x76\xbb\xa4\x8b\xfd\xdd\xc3\x2e\x79\x45\xde\x90\x2c\xf6\x0e\xbb\xfd\x81\xdf\x3f\xea\x9b\xb2\xd8\xef\x1d\x74\xfb\xfe\x61\x7f\x6f\xe2\x93\xea\xed\x1e\xf8\xfd\xa3\x43\x7f\x9f\x54\xf9\xd1\x9e\x7f\x70\x48\x06\x6c\xf7\xd0\xdf\x23\x79\x0e\x0e\x8f\xfc\xc3\xc1\x61\xd7\xa7\x72\xd1\xdb\xdb\xbf\x24\xe5\x1e\x7e\x26\x22\x49\xb2\x1c\x3c\x22\x82\x71\xbc\xef\x1f\x1d\xf0\xbf\x89\xb0\xf4\xfc\x47\x47\xe4\x0f\x9e\xa8\xe7\xd0\xf7\xf4\x3f\xf9\xc3\xc9\xc0\x3f\x1a\x1c\x91\xec\x88\x74\x1e\x1c\xfa\x47\xfb\xfb\xce\xa1\xdf\x3b\x3a\x74\x06\xfe\xc1\xde\xe0\x45\xff\xc8\x3f\x74\xf6\xfc\xc3\xa3\xa0\xdf\x63\x82\xd9\xe3\x05\x90\xb1\xe9\x1f\xf8\xfd\xdd\x5d\xe7\xd0\xdf\xdb\xdb\x73\x0c\x09\x1c\x9a\xe0\x80\x24\x38\xe8\xc7\x7d\xff\xd1\xe0\xc0\x19\xf8\xfd\xdd\x80\x4c\xa6\xfe\xa1\xc3\xff\x61\xc3\x20\x8b\xdd\xdd\xfd\x2c\x66\xff\x34\xa2\x47\xe3\xff\xf8\xe9\xa7\x9f\x54\xe3\xd0\x51\x0b\xd3\x5b\x6e\xd1\xba\x80\xc9\x42\x64\x4c\xd7\x61\xa2\x8f\x75\x93\xe0\x52\x89\x00\x63\xa6\x33\xb1\x12\xb7\x30\xb9\xe5\xb6\xac\xc9\x0c\x4e\x3e\x9e\xa5\x9f\xcc\xd6\xac\x4a\xe3\x24\x8b\x4a\x33\x54\xcb\x14\x98\xf6\x8e\xbe\x75\x5e\xc2\x64\x51\x43\x9d\xd8\x28\x6c\x6f\x93\x55\xab\xb5\xa0\x1e\x0b\xbf\xa7\x72\x55\xed\x8d\x50\xf2\x4c\x02\x9d\xe1\x31\x40\x51\xd0\xe5\x95\x76\x5f\x32\xd4\xfa\xca\x20\xd3\x70\xd2\x38\x22\xce\xa9\x89\xfc\x6a\x1e\xde\xf8\xea\xe4\xcd\x93\xe3\x67\xa6\x08\xc7\x43\xe0\x9e\xe7\x11\x80\x09\x45\xbd\x61\xbe\x92\x54\x61\xd3\x68\xa7\x5a\x90\xb9\x14\x47\xd5\xec\x90\x29\x8a\x6b\xde\xaa\x3f\x2a\xab\xda\xd7\xda\x95\xa4\x79\xc3\x26\x41\xf2\x32\x48\x82\x73\xf8\x4a\x14\xb9\x12\x47\x4d\x13\x21\x13\xa1\x2c\x89\x40\x10\x2a\x12\x5c\xd7\x44\xe4\xb5\xac\xc2\x3e\x70\x79\xbc\x7e\x97\x2e\x33\xc2\x74\x26\x29\x54\xc6\xe0\xd4\xa5\x56\xb2\x1a\x7f\xe2\x8a\x02\xaa\xbc\x95\x31\x8a\xa8\x1b\xd9\x0a\xb9\xeb\xb4\xe0\xd6\xfe\xaa\xaf\x64\xe3\x40\xa8\x43\xe0\x46\x59\x97\xeb\x8e\x6e\x38\xf1\x73\x09\x5c\x51\x0a\x36\x18\x31\x60\xcf\xde\xe2\xfd\xfe\xfe\x3d\x56\xff\x67\xfa\x5a\x22\x59\x65\x0e\x9e\xc1\x8b\x0c\xc6\x97\x30\x93\xe1\x07\x89\x78\x1b\xd2\x38\x23\x76\x0a\x8e\x92\x73\xe7\x2a\x8a\x63\x9a\x82\x6d\x37\xd4\xaf\x98\xe3\xaa\x52\x47\x7a\xbf\x41\xa5\xcd\xcb\x68\xab\xa1\xab\x0d\xe3\x5a\x79\x44\xd8\x8e\xbc\xc6\x78\x14\x56\x34\x7e\x88\xc9\x20\xa9\x2f\x4e\x8d\xe7\x18\xdb\xff\xe5\x63\x54\x9b\xd4\x6d\x1e\x12\x0e\xdc\x1f\x78\x5c\x19\x6d\xf0\xce\x7f\xef\xfc\xf7\x8e\x1c\xef\xac\x45\x54\x78\x52\x5e\x31\x8d\x71\xe1\x64\xef\xfe\x7c\xed\x16\xce\x7d\x55\x2d\x39\xaa\x62\x43\x46\x90\x9c\xc6\x39\x1f\xf2\x53\x18\x43\x0c\xc3\x27\xd8\x05\xd6\x4a\xb5\x9f\xb9\xb5\xc3\x29\x08\x7f\x8b\x34\x49\xf9\x6a\x52\xda\x90\x94\xf5\x4b\xf2\xd6\xf2\x07\x32\x38\x20\xca\xba\x92\xc4\xc6\xcc\x62\xd4\xa0\xc6\x7a\x90\x1b\x0e\xce\xb8\x79\xc3\xed\xf6\x5d\xbd\x15\x44\xd6\x99\xa9\xde\x7c\x74\x16\x83\x5d\xf2\x11\xe7\x2d\x1a\x97\x48\xb8\xfe\x1f\xd7\xd6\xb8\x71\x91\x6d\xac\x5f\x4a\x69\x89\xe8\x6c\x2e\x2a\x76\x66\xd8\xa2\xae\x65\xdd\xf5\x37\x2c\x27\xa5\x69\xdf\xa6\x69\xb5\xd2\xf7\x15\x45\x83\x59\x55\x94\x7d\x12\x48\x25\x16\x14\x47\x5e\x56\x94\x75\xb9\xa3\x2c\x36\x1b\x1c\xec\xc6\x5b\x40\x4d\x1c\x56\xeb\x8f\xea\x11\x24\x36\xda\x0c\xf3\x1d\x9f\x45\xa7\xe1\x01\xe6\x05\x9d\x37\x9c\x64\x45\x22\x56\x65\xb9\x22\x6f\x4d\xba\xf3\x9d\xe9\xc3\xaa\xcc\xfc\xa9\x0b\x9b\xf3\xaf\xec\xab\xb5\x94\xa9\xb5\xda\x75\x9f\xb4\xa5\x1c\xa8\xf5\xce\xd5\xa5\x30\x2f\xaa\x85\xbe\xa4\x4d\xbb\x2f\xa3\x2b\x65\x29\x12\x9a\x12\x73\x97\x30\xd6\xe4\x6b\x2b\x48\x9a\x50\x4b\xce\xf8\x6f\x55\x39\x0a\x39\x55\x76\xa1\x19\x16\xfd\x67\xff\x2e\xf5\x9f\xfd\xaf\xb6\x29\xae\xb9\x2f\x56\x8c\xa0\x2a\x6f\x56\xe1\xd2\xcf\xf2\xdc\x51\xa3\x4a\x49\x59\x55\xbc\x5a\x5c\x41\x35\xab\x88\xea\xd2\xc9\x13\x37\xea\x99\xbb\xea\xbb\x84\x91\xfe\x7d\xe5\x8e\xab\xab\x45\x5e\x24\xa3\x44\xfb\xaa\x5d\xf6\xf1\xf2\xab\xf7\x57\x65\x15\xf2\xf2\xfe\x06\xaf\x77\x7e\x13\x7b\xd0\x97\xec\xb0\x5c\x2f\xd5\xbb\x8e\x86\xbd\x57\x74\x9e\xe5\x93\x30\xca\x82\xb3\x98\x62\x65\x58\xd3\x2d\x12\x0d\x53\x43\x73\x41\xfc\x22\x63\x42\x2a\xea\x53\xcc\xba\x66\x92\xfc\xe4\xf8\xc5\xd7\x95\xe3\x88\xf9\xf1\xa4\x95\xf5\xfd\x32\x7d\xd7\xa8\x2a\x79\xb9\xcf\xf3\xe4\x6b\xf6\xe0\xca\xc7\xb5\x56\xf7\x45\xb5\x17\x56\x15\xf8\x7e\x75\xa3\x5d\x37\x14\x8d\x8f\x47\x48\x30\x96\xb7\x53\xf6\xef\xf6\x74\xf4\x0b\x8c\xe7\xab\xea\x28\x6b\xd4\x78\xd5\x73\x4f\x33\x9d\xb9\x39\x5a\x4b\x45\x19\x1b\xd1\x74\x6b\xa0\xa4\x56\x47\x27\xe1\x97\xda\xcc\xcd\x88\x2a\xc2\x7b\xdc\x33\x88\x37\xf2\x69\x1d\xca\x8b\xad\xe9\x4d\xd3\xb5\x1a\x86\x3a\x80\x98\xbb\x1e\x07\x69\x61\x6d\x8f\x34\xf3\x25\x06\xeb\x97\x20\x9b\x45\xc7\x29\x9a\x3b\x2f\x48\x47\x7d\xd1\xe1\x5a\xc9\xc4\xda\x5a\x00\xa6\x10\x86\x35\x18\x73\x77\x2d\x03\xfa\xa8\xbf\x7d\xf6\xe6\xf5\x87\xe7\x27\x27\xbf\x3e\x33\x4d\x49\xd3\x20\xd6\x0e\x7e\xdd\x28\xbf\x41\xe9\x65\x14\x42\xe7\x27\xde\x17\x9b\x1d\x66\xc3\xf1\xb5\x0f\xfa\x03\xd0\x27\x15\xa9\x5d\xb5\x5b\x2f\xf4\x77\xa6\x38\x09\xb4\x65\xf7\xcb\x29\x48\xc5\x22\xd5\x33\xa4\x7c\xd3\x4a\x0d\x2a\x19\x92\xeb\x41\xb1\xd7\x75\xff\x68\xa8\xa7\x10\x25\xbe\x1b\x72\x4f\x58\xbe\x2d\x53\x5d\xf0\x07\x79\xcd\xa6\xa1\x5f\x1b\x2d\x4c\x96\x5b\x39\x6b\xd8\x92\x3c\x39\xd4\x46\xe1\xf0\x8e\x8b\x21\xe6\x79\x0c\xc0\x69\xee\xa2\xcb\xcd\x5b\xe2\x99\xf0\xd5\x5d\xed\xf2\xa9\x81\x9a\xa2\x9f\x79\xd6\x31\xd3\x96\x9c\xaf\x94\x45\xac\xe7\x56\x22\x98\xcb\xd0\x4f\xea\x59\x5c\x1d\xfb\xa9\x38\x1f\xb7\x37\xf2\xd9\xee\x19\x7a\xc0\x65\x70\xdf\xcd\xaf\x9b\xda\xa5\x94\x9e\xce\x05\xb9\xe4\x4e\x7e\x44\x1e\xb9\xc7\xf5\x0f\x69\x42\xd6\x5e\x76\xdd\xa0\xf6\x53\x55\x20\x98\x82\xb6\x65\x4f\xc6\xb3\xad\x8f\x11\xab\x6d\x0a\x5b\x62\x44\x98\x1d\xdf\x47\x64\x5b\xa4\xc9\x5a\x29\x9b\x36\x9e\xed\x19\x87\x74\xcb\x68\x66\xbd\xbe\x73\x0f\x19\xa7\x0a\x6d\x93\xa3\xca\xe3\xd4\xd1\xbd\xad\x9b\xd5\x7b\xa5\x0b\x95\x86\x4d\x6e\x02\x7d\x59\x5d\xc0\x23\x3a\x16\xbb\xec\x1a\xa2\x09\xb8\x69\xa3\x3a\xb7\x17\x8c\x40\xc6\x26\x50\x7d\xa2\xd7\x4a\x38\x8c\x2a\x41\xaf\x45\x47\xdf\xe5\x18\x35\x84\xe2\xac\x2e\xe3\x00\xb8\x67\x0b\x8c\xd3\xa4\x10\x95\x2f\x75\x30\xdb\xc5\xd2\x2e\x38\x62\xaa\x99\xc1\xd7\x97\xe7\xd8\xea\x72\xc4\x21\x73\x00\x47\xc9\x02\x52\x96\x85\x74\x81\x9d\x38\x3d\x3f\x8f\x12\x4e\x92\xd0\xa4\x31\xab\xcf\x9d\xa3\x86\x03\x53\xfe\xf2\xb0\xe1\x3d\xe6\x5d\x5d\x7f\x6e\x62\x77\xfd\x73\xf3\x90\x9b\xc7\xfe\xb7\xb6\x79\x98\x29\x49\xfe\xdc\x49\xea\xea\xbc\xee\x4e\x72\xb0\xf6\x46\x72\xf0\xe7\x3e\x42\x7b\xf2\xd1\xbf\xd1\x3e\xf2\x68\xe5\x7d\x64\xbf\xf1\x97\x77\x6b\x2b\xd7\x4a\xb9\x33\x7f\x22\x87\xf1\x1f\xa5\x0b\xfc\x95\x85\xbf\xda\x8a\xae\xdb\x20\x18\x90\xc4\x1a\x2c\x52\xb6\x3a\x6e\xd0\xcb\x52\x5d\x32\xf7\x0a\x4b\x66\x2b\x47\x95\xa6\x73\x60\x75\xd3\xe8\xca\xfe\x93\x55\xc5\xca\x4b\x8b\x20\x39\x87\x28\xcd\x21\x95\xd6\xec\x51\xc3\xfa\xd6\xd2\x8c\xda\x68\x2d\xec\x33\xbd\x8a\xc6\xae\x37\x5c\x13\x5f\xf0\xe4\x6d\x87\xec\xce\xd5\x83\x95\x75\xde\x56\x8e\xae\xbb\x60\xaf\x81\xd8\x18\x8e\x71\x60\xd0\xca\x3c\xdb\x52\x5a\xab\xef\x5e\xcd\xa1\x88\x55\x00\x5f\x4e\x2e\x87\x17\x41\x54\x32\x2e\xf1\xb5\xaa\xbf\x07\xfa\x07\xcd\x72\x61\x78\x19\xa6\x29\xab\x81\x67\x6c\x88\x8a\xe0\xf8\xf5\x9b\x7f\xbe\x7d\xfe\xf3\x2f\xef\x0a\xf7\x43\x1b\xe1\x17\xf8\xff\xfe\x5f\xe9\x9f\x5a\x51\xf0\x3f\x9f\x3d\x79\x5b\x62\xad\x22\x23\x27\x6f\x8e\xec\x23\x63\x8a\x71\xe2\xcc\x58\xd6\x92\x7f\x7b\xf6\xf6\xe4\xf9\xeb\x57\x35\x44\x59\x2b\xf6\x67\x0d\xa3\xce\x0c\xc6\x73\x67\xa5\xbe\x6c\x70\xe7\xa9\xb4\x38\x8f\xba\x78\xff\x69\x77\xb2\xd5\xed\x3a\xc6\x8b\xa2\x9f\x9f\xbf\xfb\x70\xf2\xcb\x93\x7c\xdc\xbb\xdd\xf7\x9f\x76\xf3\x43\x21\x6f\x76\x51\x6a\xd7\x00\x5e\x32\xe3\x6b\xdc\x39\x9e\xdd\x06\xe0\x8a\xc2\xf4\xc2\x47\x69\x8a\x3b\x9e\x4f\xf7\xb2\x17\x51\x86\x05\xa4\xbb\x2b\xe0\x3a\xba\x44\xb5\xed\x5e\x42\x84\xa3\x49\x10\x33\x25\xd0\x5b\x82\x62\x48\x49\x09\xef\x47\xa1\x9d\x31\x81\xfe\xe4\x54\xf0\x0c\x5c\x45\x49\x7e\x7b\x7b\x3a\xf6\xfc\x69\x94\x84\x46\x4e\xfe\x74\xce\xc0\x75\x19\x27\xff\x5b\x28\xc0\xbc\xdd\x2b\x14\x61\xc8\x9e\x32\x85\x69\x7b\x1b\xfa\x4f\xe2\x38\xbd\x5a\x7a\x9e\x86\x21\xa4\x99\xde\x35\x28\x21\x89\x9b\x13\x46\xd9\x3c\xc0\x93\x19\x43\x0d\x4d\xe0\x95\xf3\x32\x5d\x64\x1c\x44\xd4\x65\xdb\xab\xe7\x2d\x41\x11\x17\x9e\xe1\x40\xf1\xe3\x9b\x4f\x91\x16\x3b\x26\x40\x72\x3d\x1d\x45\x95\x25\xe9\x94\xcb\x97\x32\x2c\x21\xb5\x1d\x70\xa4\xf2\x22\x88\x29\x24\x85\x94\xe1\x0c\x15\xfc\x77\x1d\x74\x0a\x24\xa3\x82\x0c\x00\x94\x3f\x91\x80\x49\xf4\x48\xed\x3d\x90\xdd\x42\x43\xeb\x61\xf8\xb8\x93\x28\x22\x13\x84\x61\x8d\xbc\x00\xe4\x53\xac\x2f\x9f\xe1\x8b\x8c\x12\xfd\xa7\x86\x89\xf4\xd0\x9d\x7f\x72\xbd\xa1\x56\x42\x23\xa1\xac\x29\x84\xcc\xff\x15\x80\x14\x67\x30\x08\xbb\x7c\x9f\xd2\xf1\x13\xf3\xe4\xa2\x5a\x2c\xf5\x5d\xb3\x4a\x57\x32\x61\x5c\xa4\x21\x8c\x2d\x0b\x07\x6d\x0a\x07\x09\x66\xa8\x45\xc3\x1c\x7c\x7d\x85\x5e\xe1\xc8\x47\x16\xfc\x79\x92\xc4\xf6\xc9\xb7\x09\x3e\x3f\x83\x41\x8c\x67\x74\x0a\x74\x89\xca\x72\x3f\x90\x94\xfe\xc8\x7e\xff\xc7\x8b\xdd\x8b\xb7\x2b\x70\x97\x2a\x88\x02\x71\x1e\xb8\x31\x0f\xb2\x8c\xc6\x7f\x14\x81\x04\x94\x34\x57\x01\x4a\xea\xd2\x4c\x50\x44\xa7\x67\xcb\xa8\x2a\xd3\xbd\x26\x55\x24\x18\x74\x90\xfb\x2a\x75\x7e\xc9\x07\x22\x2b\xba\xae\x7c\x86\x48\xd5\x25\x7b\x0d\x54\xeb\xaa\x6a\x84\x66\xf0\xe2\xa2\x28\x98\xb4\x57\x6e\x12\x50\x93\x72\xf6\x0b\x61\x1a\x10\xf8\x4b\x26\x5b\xe0\x00\x88\x81\xa0\xe8\x6d\xee\x58\xfe\x16\x48\xbf\x72\x98\x8a\xa7\xed\xb5\x0b\xe6\xa3\x2b\x0b\x16\xa3\x0d\xd4\xb7\x77\x51\xb0\x10\x19\x59\xb2\x94\x21\xa0\xbd\x2f\x94\x5d\x3f\xc6\x6b\x29\x78\xc6\x69\xff\x15\x69\xb9\xd4\x0a\xc5\x51\x66\xa0\xc1\xf8\x1a\xeb\xd0\xcf\xe1\xdf\x0f\xae\xf6\x5f\x3f\x34\x23\xba\x09\x28\xb5\x00\x63\x94\x95\x81\xd4\x04\x34\x8e\x38\xb9\xf4\x77\xc1\xa0\x30\xa5\xdc\x7a\x04\x18\x0d\xf3\x95\x02\xee\x35\xe2\xf7\xad\x76\x7b\xca\x0f\x1e\x6a\xbf\xa7\x0b\x3c\x5f\x60\x27\x47\x88\x3d\x29\xf2\x2e\x5b\x01\xdc\xaa\x31\x80\x5c\x23\x40\x9c\x8d\x17\xbf\xcc\x55\xd9\x97\x35\xaa\x8f\xb3\xaa\x3c\x85\x86\x8d\xa0\x76\x78\x5c\x1b\xef\x03\xa6\x69\x88\x82\xdd\x36\xce\x52\xa2\x54\x5c\x2c\xf5\x55\x1a\xf2\x1c\xcd\x66\x0e\xf1\x61\x68\xeb\x86\x34\xdc\x58\xa8\xad\xb5\x92\x5a\xcb\x57\xab\x67\xa1\xf3\x9a\x55\x57\xb7\x08\xb5\x1f\xcf\x06\x4d\x3b\x26\xf2\xfe\xfc\x69\xfb\x66\xe5\x81\x2f\xac\x81\x32\x23\x72\x2a\x6f\x68\xab\xd8\x78\x6b\xde\x5d\xcf\x5b\x8e\x90\xd9\xac\x96\x8f\x1b\xcb\xd1\x04\xec\x6d\xd4\xb5\xf6\xf8\x32\x9d\xb1\x5b\x74\xb1\xc4\xe0\x20\xa2\xd1\x1e\xc5\x5c\xd9\xb7\x08\x05\x34\xaa\x75\x86\xf1\xdc\x05\xee\x39\x9a\x4f\x5c\x93\x46\xd5\xf0\x72\x80\x37\x94\xac\xc8\x2a\xc8\x62\x80\x83\x2e\x4e\xd3\x18\x47\xa4\x90\x67\xb4\x92\xec\xc4\x97\x39\x51\xe6\x64\x90\x52\xe7\x90\x2f\x28\x4c\x4e\x10\xc7\x0e\x82\xe7\x51\x86\x21\x82\xa1\xf3\xcb\xbb\x77\x6f\x9c\x20\x09\x9d\xf3\xb7\x6f\x8e\x1d\xfa\x99\x33\x0f\xf0\x8c\xc1\xec\xf0\x26\x3b\x78\x86\xd2\xc5\xf9\xcc\x79\x96\x5c\xa6\xd7\xce\x34\x45\x14\x53\x87\x1b\xb8\x82\x73\xb2\x41\x2a\xba\xd4\x33\xd1\x51\x2b\x99\x47\x9b\x9a\x3f\x37\x20\x56\xaf\x52\x6c\x8f\xc3\x6b\x3e\x45\x78\x36\x5f\x73\x82\xbc\xa6\x1b\xdb\xba\x53\x24\xb7\x65\x22\x1d\xee\xf3\x80\x48\x7b\x08\x2d\x6b\xa0\x28\x5c\x6f\xb5\xed\xfa\x80\xab\x9b\x93\x74\x7e\xdd\x15\x37\x26\x5c\xcf\xe4\xac\x0c\xf9\xed\x5b\xb9\x04\x37\x15\x7f\x5a\xda\xd9\xac\xc3\xeb\xac\xe9\x86\xeb\x80\x82\xb8\x16\xd3\x97\xbe\xde\x84\xe2\x9a\xeb\x89\xf7\x44\x71\x65\x07\x83\xfb\xa1\xba\xc6\x3f\xff\xf5\xd7\xec\x17\x72\xde\x6c\x48\x8d\x13\xea\xcc\x32\xfc\x68\x9a\x5b\xd0\x27\xc1\x3c\xc2\x94\x0d\x29\x87\x45\x2a\xe2\x03\x15\x34\xcd\x23\x7e\x04\x12\x02\xab\x7b\xdc\xab\xc7\xea\x74\x91\x60\xed\xe0\xed\x3a\xfc\xd0\x9b\x67\x7d\x68\x32\x9c\xab\xc7\x66\x61\x3d\xaf\xaf\xa9\x75\x19\x2a\xaf\x05\x9b\xea\x8b\x16\x4d\xd7\x5a\xce\xb2\x91\xd4\x0d\x03\x81\x70\x5c\xe8\x91\x69\x8a\x2e\x02\xdc\x4d\x16\x44\x26\x4a\x99\x97\x1b\xbc\xa1\x29\xa8\x4a\xfc\x06\x27\x21\xa0\x15\x2f\xd9\xdf\x4b\xbc\x34\x2a\x67\xa9\x4f\xdf\x3e\xd0\x78\xfa\x72\xc6\xc3\xc7\x82\x7c\x8e\x92\xd6\xac\x31\xc9\x61\xd8\x45\xd0\x46\x1f\xdd\x8c\x23\x66\xd3\xc6\x53\xcb\x0a\xf0\xf6\xfc\x8f\x9f\x5f\x3c\xda\xfd\x54\x7d\x78\xb5\xe2\x80\xef\xb3\x07\x59\x77\x12\xa0\xd0\x6d\xe2\x3a\xd6\xc0\x5f\x24\x9a\xa4\x89\xc9\x5f\xa4\xbf\x07\x06\x75\x84\xe5\xf5\xce\x28\x51\x12\x51\x89\x6c\xea\x91\xa2\x63\x98\x70\xdb\x9b\x1d\x1f\xd5\xae\x82\xda\xec\x7b\x45\x03\x9e\x41\x25\x7d\x37\x8b\x32\x27\x49\x43\xe8\xcc\x02\xf2\x87\xaa\x7e\xce\x0a\x36\x41\x15\x72\xc9\x50\xdb\x15\x4f\x83\x2d\xfa\x83\xbd\x60\xd5\xba\x56\xdf\x6c\xa8\x9f\x92\x34\xe9\xca\xbe\xea\x17\xfb\xaa\xb0\xf4\x3f\x89\x63\xc7\xb5\x57\x09\xb8\x62\x3f\x98\xc7\x0b\xa4\x2f\xd6\xc6\xe4\xb4\xbd\x54\xaf\x72\xb9\xeb\x5b\x97\xaf\x9f\xe0\x94\xd6\x95\xe6\x29\x4d\x94\x25\x28\x18\x5b\xc6\x66\x65\xd7\xae\xf1\xdb\x4f\xc4\xb5\x9c\xfe\x1b\x71\xa7\xad\xbc\x4f\x1f\xf0\x3f\x2b\x6c\x41\x19\x46\x69\x72\x5e\xd2\x86\x73\x3d\xc0\xa6\xfd\x9b\xa4\x43\xf9\x3a\x08\x43\x1a\x7e\x64\xef\x51\xfd\xc9\xfa\xbd\x55\xed\x7c\x5b\x5a\x4b\x92\x14\x77\xef\x72\xfe\xb4\xb5\x16\x2e\x12\x51\x52\xbd\x87\x5d\xd9\x66\xd8\xd2\x71\x45\x15\x0c\x4d\xf1\x29\x99\x12\xab\xce\x6e\x05\xd9\xb1\xad\x01\xba\xfa\x55\x69\xac\xec\xb7\xf8\xa4\x12\xbe\xa9\x4a\x3a\xd7\x31\x4e\xb6\x38\x5a\x69\xd2\xa6\x40\x7b\x9b\x56\x9d\x96\x5b\xd7\x86\x06\x5e\x59\xcb\xf3\x85\x72\x03\x03\x9e\x07\xcf\xdb\x57\xfb\x14\xcf\x20\x12\xeb\xf3\xe6\xd7\x7e\x5d\xac\xda\x4a\x48\xdd\xe6\xd0\x2b\x37\x20\x17\xde\x0d\x6e\x60\x9b\x95\xcd\x92\x91\xaa\xe5\x07\x2b\xa2\x72\x6e\xd0\x88\x50\x52\xe7\xe5\x29\x06\x55\x9e\x62\x12\xeb\x29\x46\x23\x78\x33\x97\xe4\x8e\x2b\xc9\xe5\x24\x85\x1c\x56\x29\xe4\x50\x14\xbe\x4d\xaf\x9e\x25\xa1\xeb\x01\xb9\xb2\x17\xa9\x93\x19\xfd\x68\x87\xef\x3d\xfe\x0f\x64\x3f\xf0\xf9\x32\xa7\x1b\x21\x8a\x04\x63\x10\x88\xe5\xd0\xe3\x67\xa8\xfc\x66\x72\x44\xe9\xbc\xe5\x25\x29\xf9\x49\x8e\x4c\x6b\xd7\x81\x97\x23\x56\x8a\xd1\xc8\x5c\x1f\x52\x56\xde\xfc\xd2\xa9\xf0\x57\xd1\x19\xc7\x7c\xc3\x2d\x9f\x0f\x77\xc5\xb1\xb0\x48\x44\xc5\xfd\x48\x5c\x6f\x7b\x1b\x3e\x7c\x58\xe2\xa9\xe2\x19\x4b\x8a\xab\xef\x7b\x2c\xdd\x0d\xaf\xce\x90\x72\xcf\x3a\x3b\x0e\x99\xf3\x8e\x64\x74\x86\x0f\x4b\x54\x59\x72\xc4\x64\x5e\xb7\xb7\x3d\x8f\xf2\xc0\xe9\x87\x51\x44\x7e\x56\x1e\x46\xa3\xcb\xeb\xee\x24\x0d\xe1\x45\x84\x10\xb5\xb4\x2a\xc7\x4f\xfd\x5d\xc5\x57\xdf\xa6\xb7\xca\xef\x57\xb8\x6b\x3f\x7b\xe7\x9f\x2c\x70\x14\x67\x3b\x61\x7a\xb1\x43\x39\x67\xbb\x72\xda\x7d\x61\x27\x26\x04\xe7\xa9\xc5\x71\x89\xbc\xca\x22\x9c\xa2\xeb\x9d\x34\x0a\x27\xdd\x39\x83\xe6\x40\x0d\xc8\xce\x35\xf2\xf6\xc6\x3c\xed\x2b\x32\x4b\x7e\x88\xc9\x69\x34\x81\x28\xcb\x5d\xe9\xe4\xa3\x8e\xb7\x04\x57\x51\x1c\x3f\x85\x64\x1f\xbf\x5e\xdd\x6d\x93\xf4\x86\xee\x05\x98\x97\x2b\x3c\xe5\xbc\x6a\x3e\xcb\xdc\x12\xc4\xf9\x07\xb9\x0f\xa5\xf2\x43\x2f\x81\x3d\x1b\xd1\x75\x76\x8a\xd2\x8b\x37\x28\xbd\x88\x32\xe8\x75\xf2\x1a\x4d\xa3\x24\x3c\x4e\x43\xf8\xe3\xf5\xaf\x6f\x5f\xb0\xe7\x19\x9a\x78\xe5\x2a\x06\x61\xd8\x51\x32\x05\x37\x17\x30\xcb\x02\x75\x5c\xb0\x94\x78\x98\x7b\x38\x62\x6f\x09\x0a\x43\xa5\xa7\xa3\x2f\x49\xb2\x25\xf9\x5f\x2b\x9b\x15\xa9\xdc\xbd\x63\x4b\x56\xcf\x5b\x99\x89\x3b\x19\x04\x9b\x9a\x95\x69\xb5\x75\x6c\xff\xc9\x3f\xf0\x5f\x4f\xae\x7e\xb9\x8f\xec\xc9\xd4\x1a\xa6\x3e\xf8\x93\x4e\xf9\xbe\xd1\x29\x37\x89\x48\xe2\x2e\xd5\x8a\x25\xbf\x92\x84\xd9\x7e\x5d\xc0\x27\x91\xbc\x76\xb7\x20\x55\xa7\xb9\xe1\x3f\x8e\x92\x8f\x54\x3c\xc6\x92\x30\x89\x0c\x37\x6d\x99\x26\x7c\x05\xbe\xe7\x22\xaa\x66\x9e\x4f\xa5\x07\xd0\x3e\x70\xaf\x23\x18\x87\xad\xad\x4e\x06\xd7\xa1\x75\x78\xa8\x4b\x21\x49\x0d\x2a\x17\x42\x1c\x44\xb1\x31\x7e\xf7\x2b\xd7\x0e\xb8\x3f\xd0\xef\xa9\xed\x57\xc6\x19\xb3\xf1\x64\xcb\x28\x7f\xad\x88\x09\x5d\xbd\xc9\x62\x74\x91\x22\xd8\xd5\xc2\x5c\x69\xce\xf0\xd3\x3c\x48\x42\x18\xba\x0a\x23\x9d\x20\x01\xb1\x5b\x81\x85\x5f\x47\xa1\x95\x4a\xfc\x89\x58\xc5\xea\x26\xb1\xe4\xc0\x33\x66\xa5\x1c\xb3\xeb\xc2\x62\x1b\x39\x9e\x71\xbf\x96\xc6\x63\xd6\xe4\x44\x5c\x33\xaa\xee\x97\x24\x48\x37\xee\xf1\xf2\x04\x9b\x8d\x24\x75\xaf\x3f\x47\x29\x4e\xf1\xf5\x1c\xfa\xec\xa6\xf0\x39\x86\x17\x94\xd4\x1a\x44\x95\xe7\xdc\xb4\x4c\xa3\x1e\x88\x07\xe0\xce\x09\xd5\x0f\x7a\xed\xf8\xd4\x0b\xfd\xe1\x8e\x01\x17\xdf\x21\x5d\xf9\xd6\x25\x57\xef\xf7\x7a\x7f\x92\xaa\x6f\x84\xf3\xf9\x41\x41\x5b\x2f\xd4\xa1\x28\xa4\x23\x55\x3d\x66\x47\xae\xcc\xdc\xc4\x07\x52\x79\xe6\x23\x3f\x1a\x8d\xf0\xf6\x76\x27\x19\xb9\xf2\x78\x9e\x00\xf7\xbb\xcf\x5d\x3a\x57\x86\x4e\xdf\xf5\x3c\x90\x2c\xbf\x3d\x96\xf7\xa4\x19\xcb\x3b\x6a\xcc\xf2\x1e\x8c\x12\xca\xf2\x8e\x34\x96\xf7\x87\x7d\x90\x9a\x79\xde\x83\x6a\x9e\xf7\xb4\x3d\xcf\xfb\x12\x4c\x4a\xd1\x6b\xc2\x4c\x20\xa6\x03\x4d\xf1\x53\x84\x32\xfc\x24\x99\xcc\x52\x44\xce\x05\x7e\x61\xde\x3b\xdf\x3b\x8b\xd8\xf9\xde\x89\x23\xb7\x2a\x84\x4c\x4a\x0d\x17\xe7\xef\xfb\xdb\xdb\x32\x84\x4f\xbe\x3c\xed\x8f\x1f\xab\x3f\x86\x37\x4b\x36\x36\x7a\xf8\xd8\xf6\x36\xdc\x2a\xd3\xae\xf3\xcd\xd3\xf3\x6e\x4a\xac\xed\xfc\x15\x98\x07\x28\x83\xcf\x13\xdc\x81\xa2\xc3\xfe\x13\xa5\x57\x23\xa5\xc1\x69\x06\x33\xdc\x61\xea\x27\x2f\x55\x49\xc9\x23\xc2\x3e\x3f\x27\xf2\x3c\xea\x3f\x50\x64\x83\x7c\x9e\x45\x67\x71\x94\x9c\xcb\xfa\xb2\x2d\x93\xc8\x45\x62\x95\x99\x80\xf3\xfd\x27\x3a\xdf\x7f\x5a\x0e\xa6\xab\x96\xa8\x6c\x94\x5a\xcb\x88\x46\x19\x29\xe3\x41\xf0\x7d\xf4\xb8\x14\x78\x17\x9c\xa5\x97\xd0\xf5\x86\xa6\x78\x39\xfe\x6e\x09\xe3\x0c\xd2\x81\x8c\x6b\x1b\xfb\x20\xb6\xe7\x03\xac\x03\x43\x83\xeb\x6c\xfd\x4c\x5e\x2e\x8b\x91\x77\x51\xed\xa1\x9c\x28\x62\xdd\x79\x90\x40\x03\x65\x7d\xe5\xd9\xf8\x0b\xf9\x8c\x4c\x5e\xfd\xfe\xd7\xb3\xe7\xbf\xfe\x6e\xa1\xb0\xa7\x6c\xf3\xf2\x50\x6c\x0f\x7d\x28\x1d\x60\x15\x40\xcd\x12\xdb\x4a\x41\x0b\x6d\xc0\x8c\x5c\x75\x48\x53\x15\xc2\xa2\x33\x9a\x9b\x77\xbf\x23\x22\x8e\x24\xe6\x4b\xe9\x6a\xb2\xc1\xd9\x81\x08\x3c\x4a\xcd\x87\x07\x5d\x25\xd4\x74\xd0\x62\xa4\x4f\x3d\xc7\xa9\x5a\x09\xd1\x6f\xcd\x2e\xf5\x1b\xea\xca\x35\x75\x6c\x74\xb3\x53\x28\xbd\xca\x8f\x41\x5e\x64\xcb\xe0\x98\x81\x86\xfc\xe1\xb2\x78\x99\xdd\x52\x4d\x1b\x0c\x4a\x13\x64\xf7\x06\xcd\xad\x75\x1e\xa8\xf4\x6f\xb5\x6a\xff\xab\xaa\xfa\xc5\x95\x63\xdd\x7b\x2a\x9c\x6b\xf1\x8a\x3d\xb9\x4e\xa1\x97\xca\x8c\x75\x53\x95\xaa\xc2\x39\xc4\x4f\x84\xc2\xdf\x71\xa3\xd0\xd5\xe2\xb3\xa5\x62\x73\x3a\x4d\xd1\xe8\x2f\x52\x37\xc3\xc0\xfd\xcb\x98\xa8\x64\xa6\xc8\x6d\xb6\xcd\x90\x9e\x18\xbb\x20\xf1\xe7\x01\x82\x89\xd0\xc2\xc9\xae\x55\xde\x33\xfd\xbc\xdb\x5c\x80\xa8\x52\x55\x8c\xfb\xf6\x6e\x44\x8c\x75\x18\x65\xf3\x38\xb8\x1e\xb1\x75\xd8\xe5\x56\x44\xe4\xa7\xd3\x69\x06\x85\x3a\x34\x78\x10\xf0\xe4\x17\xc1\x27\xf6\x6c\x24\x9f\x44\x09\x7f\x92\x2b\x9b\x29\xa0\xb1\xdf\x74\xbb\x72\x8a\x25\xd1\xa9\x5c\xce\x4f\x7f\x9c\x67\xda\x73\x8b\x3b\x0e\xaa\xdf\x71\x14\x64\xc2\xba\x3d\xa7\x7c\x85\xc2\x77\x07\x66\xed\x2b\x18\x6b\xbd\x1b\xf1\xdb\x41\x8a\xa6\xa6\x8a\x44\x34\xed\x14\x1d\x31\x3d\x9e\x2c\xe8\x40\x6f\xd9\x81\xde\xed\x6d\xe1\x03\x77\x91\xb0\x06\x85\xee\xd6\x88\x9c\x58\xd3\xa9\x73\x42\xf7\xa0\xed\x6d\xf6\xaf\x1f\x61\x06\x97\xe0\x44\x89\xc3\xb6\x45\x25\x63\x56\xe0\x14\xa5\x17\x86\x12\xc8\x46\x1a\x4d\x3b\x5b\x90\xa7\x26\x02\xe1\x66\x18\xb1\xeb\x47\x5e\x1a\x54\xea\x08\xb0\xc7\xf7\x4d\xbe\xff\xe6\x07\x69\x9c\x9e\xd0\x0f\xfd\x49\x10\xc7\x1d\xe8\xf9\x59\x4c\x66\xca\x21\xe8\xf6\xbd\x07\x2e\x4b\xee\x8e\x46\xa3\x64\x7b\x1b\x12\x69\xc8\x30\x5a\x4c\x70\x8a\xe8\x69\x44\x7b\xe2\x93\xb5\x8b\x0a\xa7\xfb\x32\x98\xd3\x6f\x6e\x6f\xdd\x13\xc8\x3e\x37\x36\x8c\x26\x7e\x22\xd4\x52\xfe\xc9\xce\xff\xe9\x3c\x1e\xfe\x1a\xdd\x3e\xf7\x12\xdc\x79\x3c\x3c\xbc\xed\x3f\xba\xdd\x1d\x78\x9d\xc7\xc3\xe3\x38\xb8\x98\xc3\xd0\x7b\x4c\x33\xf9\xcf\x1d\x1f\x93\xe9\x91\x78\x7a\x4b\x0b\xbd\x45\x4e\x94\x28\xbd\x72\xc8\x81\xf0\xdd\xf5\x1c\x3e\xa3\x97\x11\xee\xf3\xe4\x32\x88\xa3\xd0\x09\x30\x91\x0e\x1a\x3f\x93\xcd\x11\x0c\x42\x27\x49\x93\x2e\x1d\x9b\xb3\x18\x3a\x51\x92\xe1\x20\x99\x40\xff\x7d\xf2\x3c\x71\x52\x14\x42\x44\x92\x9e\x41\x47\x24\x01\xf4\x03\x1a\x08\xe4\xa4\xb4\xbb\x32\xe7\x62\x91\x61\x67\x16\x5c\x42\x27\x70\x4e\x0b\xc3\x3d\xee\x78\xce\x05\xc4\xb3\x34\xf4\x5d\x6f\xd9\xf1\x96\x52\xfe\x58\xf5\x6f\x3a\x64\xe2\xd0\xbb\x6a\xfc\xbd\xf0\xf7\xf5\xb6\xb7\x3b\x64\x55\xe2\xbf\x1e\x4c\x53\xd4\x61\x03\xda\x23\x3a\x30\xbc\x62\xfd\xda\xc1\xde\x77\xc9\xff\xe0\xef\x92\x87\x0f\x3d\x74\x9a\x8c\x47\xf0\x34\x19\x8b\xc3\x24\x5a\x7e\x91\x2b\x89\xc9\xbf\xae\x9e\x3c\x3b\x3a\x78\x67\x56\xbe\x9a\xa8\x5d\x77\x79\x29\x41\x51\xf3\x10\xa6\x71\xcb\x1a\xee\x23\xdd\x73\x29\x04\x68\x8d\x6f\x70\x7f\x0f\xf4\xcb\xc1\xaf\xa6\x18\xd9\x5d\x01\x30\x59\x42\x19\x2d\x5b\xa0\x79\x36\x51\x32\x5f\xe8\x11\x0c\x51\xe8\xaa\x6e\x87\xdc\x3d\x89\x5b\x56\x79\x6e\x8a\xc7\x91\xd4\xfb\xf3\xb8\x85\xdc\xf6\x29\xed\xf3\x79\x22\xed\xbd\xbc\x11\x90\xf6\xcd\x66\x9a\xac\x86\x4d\x86\x82\x30\x92\x51\xf7\x46\xd4\x29\x4d\xb9\xcd\x21\xa7\x38\xee\x2c\x7f\x18\xa0\x28\xe8\x72\x4c\x56\x97\x24\x36\xb9\x60\xb9\x36\x54\x78\x86\x00\x4f\x3f\xff\x20\xb0\x67\x8d\x1e\x4f\x8d\x0c\xb0\x2d\xac\xb4\xcd\x02\x84\x57\xa9\x79\x0f\xb8\xc7\xe2\xb7\x1d\x54\x6c\xe5\x3b\x0c\x5b\x18\x17\x11\x77\xf3\x81\x47\x54\xa6\x19\xe8\xaf\x15\x27\xb5\x21\x42\x5c\x5d\xdc\x5b\xcd\xd8\x34\xea\x9d\x36\x30\xb5\xdf\x50\xdf\x14\x50\xde\x56\xea\x9e\xb6\xb7\x38\xf5\x6d\x6e\x85\xf2\x7c\xff\x7b\x7b\x95\x08\xc4\xbb\xc6\xc7\x28\x6b\xcd\xca\xad\x4a\xf5\x7d\xc9\x46\xcf\x5b\xe2\xfa\x62\xab\x27\x6e\x48\xe8\xd0\xb1\x8a\xb1\xbf\xd3\x4b\x88\xa6\x71\x7a\x45\x0d\x6c\x41\x96\x0d\x5d\xe5\x09\xf5\x10\x2a\xe2\x74\x2d\x01\x83\x21\xd7\x9f\x7d\xd0\x1f\x31\x65\xdc\x6a\x1c\xdb\xea\x79\x80\x69\x5b\xec\xd4\xc5\x6a\xc7\xbd\x6d\xf8\x81\xad\x04\xd5\x25\xad\x86\xdc\x5e\x28\xf6\x2d\x66\xd8\x66\xff\xfd\x0b\xc8\x71\xc1\xe8\x89\xd1\x66\x41\x7c\x50\xac\x9b\x40\x5f\xc7\x65\x9b\x9e\x30\x4f\x27\xbc\x9e\xde\x92\xd5\x29\x0a\x9f\xcc\xe7\x30\x40\x39\xf4\x18\xe9\x04\x0a\x3c\x26\xdf\x95\x7c\x8c\xbe\xeb\x34\xbd\x37\xe2\x07\xcc\xed\xed\x0e\x2c\x22\x93\xe5\x06\x49\xcf\x0f\xc2\x90\x67\x03\x01\xea\x74\x7a\x20\xc9\xaf\xba\x98\x2b\x2f\xdf\xce\xc7\x9e\xe7\x2d\xc1\x87\xc2\x80\x8a\xa3\x77\xa9\x43\xf2\xc1\xea\xb3\x43\x8c\x38\x21\xd3\x8e\x22\x27\x88\x80\x7d\xca\x0d\xbb\x45\x49\x7a\x10\x28\x66\x53\x11\xcf\xdf\x49\xbd\xed\xed\xa0\x6c\x4f\x4d\xbd\x65\x07\x57\xb5\x92\xa5\x13\xfd\x55\xdf\x50\x09\x06\x47\x7d\xb6\xe0\x46\xae\xbe\xc8\x82\xbc\xbd\x5d\xd5\x4f\x40\x15\x60\x2e\xce\xd2\xc2\xcf\x4a\xa1\x22\x22\xae\xe9\x6e\x96\xcb\x1a\xbf\xb4\xbb\xbe\x12\x04\xcd\xeb\x68\x77\xd3\xa3\x82\xfd\xa0\xbe\xaa\xd5\x82\xac\x0d\x71\x23\x59\xae\xba\x1c\x8b\xa6\x1d\x6d\x1a\xa9\xab\x09\x9b\xc6\x44\x84\xc9\x22\xb4\x35\x1a\x61\xed\x52\x8c\x49\xb8\xb0\x21\x95\xe4\x9a\xe4\xfc\xbd\xe9\x4e\xcb\x53\x80\x1c\x35\xb0\x3e\x29\xfd\xc8\xbb\xbd\x2d\x5e\x57\x20\xcf\x7b\x60\x49\xbc\xbd\x6d\xb8\xc2\x40\xde\x72\x69\xbc\x96\xd2\xbc\x9f\x75\x2b\x95\xeb\x3d\x56\x46\x16\x7a\x43\x7e\x95\x2b\x27\x87\x19\x8d\x51\x33\x9f\xfd\x87\xaa\x1b\x7b\xf2\x82\x74\xab\xa7\xdc\xc6\xea\xeb\x34\x3d\x54\x9d\x92\x59\x33\x12\x27\x26\x6d\x7d\x7e\xa0\xf8\x32\x0a\x69\x83\xcb\x12\x22\x61\xd6\xd0\x4a\x15\x07\xd7\x10\xd5\x86\xcf\xcb\x53\x3f\x6e\x6f\x75\x4a\xbe\x01\xab\x53\x92\x5b\x9d\xd0\xea\x56\x27\x54\xb6\x3a\xa1\x3a\xab\x13\xca\xad\x4e\xa8\xa1\xd5\x09\xb5\xb7\x3a\x21\x4f\x6f\xe9\x37\x6b\x75\x4a\xbe\x0d\xab\x13\xaa\xb6\x3a\xed\xfe\x63\xf2\xb7\xd9\xdf\xff\xd8\x6f\x0e\x14\x61\x39\x30\xda\xc2\x9f\xca\xc6\x99\x1e\x33\xce\x14\xcf\xea\x36\xf3\xcc\xa6\xcd\x2a\xc5\x63\x84\xb4\x6c\x75\x05\xb0\x73\xe1\xfc\x76\xb1\x88\x71\x34\x8f\xa1\x62\xea\x02\x22\xa0\x6a\xf3\x10\x27\xa5\xb5\x50\x1e\x3d\x82\xca\xa3\x07\x5a\x19\x77\x59\x39\x90\x58\x2f\x78\xbc\x1b\xa6\x2e\xa9\x1b\x44\xd6\xf9\x4b\x61\x73\xf0\x3c\x11\xfe\x63\x0a\xf4\x51\xc7\x7b\x6b\x34\x82\x86\x3b\xa2\x25\xc9\x21\x45\xcf\x82\xc9\x4c\xcf\x82\x59\xb2\x46\xe5\xaf\x34\xe3\x9d\x47\x56\x3d\xe3\x96\xe4\x95\x76\xa5\xa0\xc1\xae\x54\xf0\xa1\xdc\x09\xac\xbe\xf4\x5f\xff\xee\x7e\x9a\xc0\x60\x10\xff\x66\x01\x2b\x6c\x76\x6b\xdf\x2f\x22\xa1\xc4\x91\xf1\x8e\x56\x12\xec\x16\x31\x0d\xf5\xa0\x68\x1a\xaa\x18\x64\xc7\x69\x32\x8d\xd0\x45\x20\x2e\xda\xeb\x91\x52\x0b\xd6\xbd\x3e\xb7\xee\x99\x82\x41\x19\x85\x0b\x79\x4a\xca\xc8\xa3\xac\xcf\x17\x51\x58\x62\x81\x30\x91\x4b\x18\x89\x28\x4a\x8c\x97\x4a\x51\x05\x96\x4b\xb3\x49\xba\xc6\x60\xc6\x1a\x68\x46\xc2\xe8\xb7\xb9\x7b\xae\xb3\x0d\x8b\xdb\xf4\x56\x35\xd4\x6d\x56\x13\x75\xf8\x1a\xba\x1f\xab\xdf\x74\x83\x18\x22\xcc\xfc\x8f\xa5\xd3\xbc\x9b\xa3\x58\x1d\x02\xf7\x8f\x05\x5c\x54\xfb\xb7\x93\xfe\x17\x1f\x8f\xc7\x75\x8e\xc6\xba\x68\x90\x8f\xde\x49\xbe\x9d\x71\xd1\x03\x7e\x65\x99\xaa\xf2\x56\x6e\x3b\x8e\x2d\xa1\x3a\xe8\xcc\x62\x61\xd7\x0d\xa6\x53\x60\x93\x8c\xda\x49\x50\x8f\xfb\xb0\x8e\xb0\x1b\x5c\x32\xfa\xeb\xb8\x61\xb4\x04\x42\x36\x50\xd2\xb4\x5b\x20\x1a\x50\xd2\xf4\x4c\x72\xdb\x8c\xa7\xeb\x7e\xf7\xac\xf9\xfb\x8d\xe9\x40\x55\x3b\xef\xd7\xf1\x7d\x59\xd1\x7b\x9c\xac\x19\xf9\xd1\x9a\xfc\xa2\xe9\x36\x63\x35\x22\x5d\xe3\x07\x61\x78\xb2\x38\x23\x7f\x76\x64\x89\x75\x06\x9f\x36\xf9\x33\xb3\x85\xa9\x88\xab\x28\x8e\xdf\xc2\x24\x84\xa8\x5d\xde\x25\xfb\x6c\x41\x47\xe0\x8e\xea\x51\xf6\x56\x82\x21\x75\xf4\x6d\x88\x85\x4e\xb7\xf4\x84\x29\xca\xd4\xbd\x00\xea\xdb\xff\x6d\xb1\x3b\x47\x1f\xcf\xab\x5c\x2e\xc5\x46\x04\xdc\x0c\x26\x61\x49\x05\x29\x6c\x71\x55\x71\x8b\x06\x45\x41\x00\x76\x18\x23\x86\x0c\x0e\x91\x46\xee\x3c\x25\xae\x28\x27\x6f\x07\xee\x0f\x1f\xe1\xf5\x59\x1a\xa0\x90\xb1\x97\xb8\x02\x14\x5d\x26\xaf\xdb\xc2\xf3\x20\xa5\x82\x6b\x42\x9d\xc3\xe5\x66\xe8\xf7\x5e\xa6\x08\x36\x5b\x30\x9b\x21\x94\x35\x77\x4d\x7c\xd4\x28\xa8\x8b\x2f\x8b\x4c\xb7\x92\x51\x5e\xe5\x8b\xbe\x7c\x89\x20\x07\x62\x75\x3e\x6b\xd2\x55\x29\x56\x0a\xe2\xa8\x92\x9d\x12\x49\xa5\xe7\x9b\x33\xe5\xf3\xbf\xf6\xe4\x5f\x82\x25\xb6\x74\x9f\x58\xee\xe3\x01\x20\x1f\xee\x17\xf6\x26\x83\x83\xe5\xdd\x9c\xc4\x8d\x2b\xc6\x57\x44\x1b\x4d\xd2\x10\x76\xa3\x10\x26\x38\xc2\xd7\xf7\x63\xfd\x9a\xfe\xe3\xb7\x5f\xfe\xf6\xae\x67\xf6\x5a\xaa\xe6\xea\xd0\x69\xae\x5e\x9d\xbc\x79\x72\xfc\xec\xe4\xc3\xb3\x57\x4f\x7e\x7c\xf1\xec\x69\x3d\xd0\x3a\x99\x56\x94\xa9\xc9\x79\xff\x5e\xa0\x4e\xbc\x7f\xef\x3a\x37\x54\x4a\x28\xa6\xde\xfb\xf7\xae\x6b\xc5\x1f\xa3\x12\xc2\x92\xbf\x7f\x8f\x1d\x67\x9e\xc6\xd1\xe4\xda\x19\x91\xaf\x28\xf1\xd2\xfb\xf7\x4c\xe0\x96\xef\xdf\x27\xe4\xff\x65\x81\x1f\xe6\x08\x4e\xa3\x4f\x0e\x4d\x20\x0a\xe4\xea\x82\xe1\x5d\x29\x77\x04\x83\xb0\x98\x79\x53\xed\xb5\x6d\xbb\x2c\xad\x22\x45\x56\xd6\xd8\x5c\x5f\x5b\x4d\xd7\x99\x66\x06\xa1\xfe\xaa\x53\x0c\x47\xd3\x68\x12\x98\x0d\x3d\x5f\x63\x86\x5d\xf6\x7e\x9d\x7d\xbc\x98\xfc\x5c\x63\xd8\xa9\xdd\xeb\x55\x9f\x38\x7e\x92\x35\x31\x20\x16\x56\xd2\xb5\x06\xb6\xd8\x95\x9b\xc4\x88\xa5\xb9\x5f\x5b\x54\xf6\x69\x1c\x64\xb3\x97\x0c\x84\x23\x6b\x80\xa9\x92\x26\xa4\xde\x31\xc4\x70\x23\xa8\x29\xab\x29\xfd\xf9\x35\x1c\x30\x78\x4d\xb8\xff\x91\x7b\xc9\x4b\x1d\x9c\xf4\xe4\x0d\x8e\x2e\x60\xba\xc0\xc3\x47\x70\x17\xb0\x8e\x82\xe1\x3b\xfe\x6c\xb7\xd7\xa3\x8d\x17\xf7\x9c\xef\x5e\xbe\x58\xf2\xc0\x3d\x1c\x4d\x3e\x5e\x6f\x6f\x77\x12\xfe\xe7\x68\xab\xe7\x01\x79\x4b\x29\xae\xcc\x69\x2f\xfb\x93\x18\x06\x48\xf4\x67\xc7\x03\xae\xa8\x76\x7e\x81\xc5\xae\xb1\xa7\x18\xa2\xc7\x1c\x4a\xc5\x47\x30\x4b\xe3\x4b\xd8\xc9\x5f\x75\x3c\xcf\x9f\x04\xb8\x68\xdd\x8d\xa6\x1d\xf7\x1d\x0a\x12\x16\x8c\xf3\xe4\x2c\x45\x98\xde\xc4\x8d\x20\xbb\xa5\x62\x57\x42\x70\xe9\x79\x3e\x9e\xc1\xa4\xa3\xc6\x62\x42\x51\xc7\x20\x0c\x3b\x89\xb7\xf4\xf8\xe5\xa8\xfe\xb4\xed\x32\x40\x41\x79\x32\x18\xc3\x09\xde\x99\xcc\x02\x84\xfd\x4f\x74\x76\xdd\xe9\x62\x90\x3f\xa0\x13\x5f\xa9\x83\x4b\x25\x31\x0a\xe2\xa1\x1b\xa7\x41\x48\x5d\x7b\x68\x7d\xb2\xe1\x0d\x79\x00\xc3\xe1\xcd\x12\xf0\x57\xc3\x9b\x34\x19\xde\x9c\xfc\x7a\x7c\xfc\xec\xe4\x64\x28\xfd\x07\x5c\x96\xd0\x5d\x8e\x97\x2c\x74\xad\x79\x0f\x54\xa2\x2d\x35\xe9\xb5\xaf\x63\x12\x0f\xe0\xd3\x97\xd1\xc1\x55\xcf\xbc\x72\x9e\xb0\xf1\x74\x7f\x5e\x50\x84\x63\xf7\x89\x00\xba\x11\x44\x89\x2e\x5f\x51\x5d\x20\xe0\x92\xf5\x7f\x6c\x86\x74\x0e\x9d\x0c\xbb\xb4\x0b\xe4\x31\x20\x43\x13\x79\x00\x62\x6f\xaa\x9c\xf8\xdc\x55\x89\xf6\xf3\xda\x4b\xad\xbb\xc4\x2c\xf5\x08\xc8\xb8\x27\x91\xf9\x05\xf9\x86\x11\x3e\x08\x41\x69\x02\xad\xa2\xbb\x6f\x0f\xf2\xe3\xa4\x2a\xbc\xec\xa6\xe0\xa8\x9a\x76\x47\x01\x45\x67\x3c\x47\x2a\xb8\xe1\xee\x2a\x64\x20\x1b\xe6\x55\x2a\xe5\x5f\x09\x9a\x59\x48\x6b\xa0\xf7\x0f\xa3\x2c\x38\x8b\xa5\x37\xb9\xfc\x69\x02\x83\x51\x0c\xd4\xbb\xe0\x10\x9c\xba\x7f\x8b\x92\x90\xb1\x6a\xe8\xf0\x61\x3a\x6e\x7c\x03\x13\x65\xe1\x94\x0d\x78\x01\x2d\x6d\x95\xfa\xff\x1d\xa7\x09\x8e\x92\x05\x74\xae\x22\x3c\x53\x91\x2c\x25\x33\x08\x69\xc2\x53\x16\x05\x25\x60\x53\xc5\xe3\x57\x1a\x92\xbe\x94\x2d\x1b\xd4\x6e\xfe\x11\x55\xcd\x69\x9f\xe4\x2a\x51\x9d\xd0\x74\x5c\x09\xe1\x5a\xca\x46\xd1\xa7\xbd\x1a\x28\x4b\xcb\xb8\x57\xb1\x7c\x54\x59\x57\x0f\xad\xe4\xd8\xab\x5d\x1a\x28\xb1\xb7\x0a\x48\x50\x2e\x33\x02\x40\x88\xae\xc9\x5d\x2a\x67\x3d\x60\x9a\x1a\x2b\x71\xf2\xe8\x97\x79\x35\xe4\x2a\x25\xf7\x81\x1e\x70\x4f\x4e\x5e\x3b\x6f\x72\x01\xaf\x23\x4f\x99\xa7\x57\x10\xc9\x7d\x93\x2f\x6f\xf9\x64\x73\x7f\x48\x93\x1c\xef\x8a\x25\x63\xcf\x33\x18\xa0\xc9\xec\x59\x92\x27\x9c\x33\x6f\x6d\xb1\x6a\xe7\x53\xb4\x62\x42\x1d\x02\xf7\x62\x81\x4d\xbd\x5c\xba\x79\xda\x05\x8f\xe8\x47\x54\xd2\xd8\x2a\x90\xf7\x77\x13\xef\x6e\x0b\xa4\x7a\xd5\xe2\x71\xd0\x68\xf1\xa8\x9a\xdd\xa6\xf9\x7c\x60\x9e\xcf\x07\xab\xcc\xe7\x83\xcd\xcc\xe7\x52\x36\x77\x39\x9f\x8b\xb9\x1d\x58\xd8\xf1\xab\x63\x50\x56\xdb\x27\x56\x5c\xe4\x1f\xad\xb1\xc8\xbf\x48\xcf\x9d\x28\xa9\x6c\x5b\xb9\x4f\x1e\xd5\x23\xdc\xaf\x84\xe2\xde\x40\x99\xe1\xbc\xae\xcd\xb4\x19\x83\x6d\x7c\x8e\xd2\x73\x04\xb3\xcc\x21\x8a\x30\x86\xe8\x22\x4a\x98\x56\x5b\x0a\x8d\x6a\x09\x69\xdc\x07\xb9\x85\x73\x8d\x93\x76\x49\x57\x5f\x1b\xc6\xf8\x8b\x82\x8c\x52\x6d\x78\x94\x43\xc1\x56\xb9\x7a\x4b\x84\x16\xfa\x25\x5d\x2e\xb9\xd7\xb3\x50\x7c\x3b\x2e\x3f\xfa\xb8\xed\x2f\x89\x98\xd5\xab\x3b\x4d\xd1\x45\xe3\x43\x0f\x49\xdc\x95\xbf\xf9\x67\x5f\xe7\xc0\xf3\xd3\xd3\x7f\xbc\x3d\x7a\xf1\xc6\x62\x2a\x0a\x27\xe4\x70\x43\xfe\xc3\xa1\x22\xc5\xc7\x8d\x51\x3d\xf6\x8b\xfe\x41\xd3\x08\xc6\x61\x46\xd4\x0b\x25\x84\xf3\x91\x49\xe1\xae\x84\xb0\x90\x15\x29\x4f\xd2\xe6\x7c\x96\xcd\xa2\x08\xdf\xd0\x11\x56\xf6\x30\xc5\xa3\x22\x88\xe3\xf4\xea\x39\xb7\x44\x72\x54\x79\xe4\x08\xd3\xe4\x63\x37\xa7\xff\x2c\x04\xc8\x9a\x96\xbf\xa2\x23\x54\x31\xf3\x46\x64\x0f\x73\x6b\x3b\x78\x4e\x11\x64\x64\x84\x7c\xf8\x98\x99\x99\x3c\xa4\xaa\x37\xbd\xda\x39\x5f\x30\xdf\x58\x6a\xbe\xf6\x9d\x77\x33\x78\xed\x64\xc1\x25\x74\xae\xd3\x85\x93\xa5\x17\xd0\xc1\xd1\x05\xa4\x3c\x87\x70\x3a\x4d\x11\x26\x2f\xde\xff\x05\x41\x67\x41\x91\xe8\x39\x93\xe1\x34\x45\xe4\xcf\x04\x4e\xb0\x33\x85\x01\x5e\x20\x98\xf9\xd6\xb6\xdb\xa1\x47\x14\x37\x0b\xea\x9a\x79\x8e\xd2\xc5\xdc\xb5\x03\x60\x0a\x2d\xd4\x05\x2e\x64\x88\xd7\x92\x49\xd2\x75\x66\x41\xd6\x85\x1c\xd1\xba\xac\xbb\x98\xce\x7a\x92\xd8\xbe\xf1\x79\x6f\x23\x6a\x6c\x5f\x9c\xc6\x65\x38\x72\x15\xd9\x84\x53\x15\xd8\xcc\x0e\xff\x26\xbf\x25\x91\xb5\x7b\x2a\x5a\x39\x2e\x1c\x08\x39\x85\x96\xa8\x8b\x32\xef\xca\x11\xce\x3a\x10\x24\x1f\x02\x75\xa6\x1a\x73\x29\x1c\x3f\x6b\x3c\x77\x59\x2b\x68\xa2\x0c\xe2\x6e\x06\x75\x23\x00\x6d\x4c\x9e\xbd\xcc\xfc\xd4\x95\x96\x0f\x11\x28\xc1\x1f\x8c\x9b\x07\x55\x37\xd5\x5b\xf6\x56\xa1\x39\xa8\x9e\xd6\x1b\x1c\xd4\x9e\x1c\x54\xd7\xd5\x9b\x3e\x8b\xc2\x10\x26\xe5\xb6\x37\xf7\xe6\x29\x10\x4a\x97\x9c\x32\x35\x70\x25\x52\x6a\x17\xc3\x4f\xb8\x84\x5f\xab\xf2\xc4\x16\x66\x72\x7e\x58\x60\xa7\x80\x62\xba\x28\x7b\x83\xa2\x0c\x47\x89\x81\xbe\xcf\x34\xfb\xcd\x67\x97\x8a\xb3\xa5\x9d\xde\xd8\x3a\x54\x72\x0e\x29\xf5\x94\x87\x1c\x6d\x30\x0b\x04\x88\xee\x29\x49\x36\x76\xa5\x8c\x06\x0b\x9c\x4e\xd3\xc9\x82\xa8\x16\xf9\xdf\x72\xf2\xf0\xa2\x57\xf2\x7a\xa7\x03\x61\x15\x7b\xb7\xc4\x96\x6b\x5a\xcf\x5e\x06\x9f\xa2\x8b\xc5\x85\xd3\x1f\x1c\x3a\x44\x45\x0b\x26\x44\x38\x7c\xe7\x65\x70\xed\xa4\x49\x7c\xed\x44\xc9\x24\x5e\x84\xd0\x89\x21\x26\x6f\x9c\xce\x62\x3e\x87\x68\x12\x64\x74\x37\xd9\x49\x91\x13\x93\xb3\x38\x79\xe0\x89\x27\x8c\xa2\x90\xe4\xb2\xc8\xb0\x73\x06\x9d\x45\x12\xfd\xb1\x80\xbe\x35\x22\xb8\x64\x28\xbc\x1b\x71\x6a\x41\xe8\x6d\x61\xb8\xb2\xd5\x87\x4a\x4c\x14\x0a\xf7\xe7\xa6\x3c\x6d\x55\x4b\x8e\x7d\x56\x2a\x87\x96\x7c\x42\xb6\x9d\x14\x6f\x17\x31\xcc\xaa\x69\x7f\x8e\x8c\x77\xf8\x4f\x5f\x1f\x9f\x7c\xf8\xf5\xed\x0b\xa9\x26\xb9\x3b\xe7\x8b\x28\x84\xd9\x4e\x30\x89\xfd\x19\xbe\x88\xff\x03\x2d\x62\xd8\xcd\xe6\x70\x22\xaf\x06\xf3\xf9\x80\x48\x4b\xdc\x19\x8c\xe7\x4e\x92\xa6\x73\x98\x40\xe4\x24\x29\x82\x53\x88\x10\x33\xfd\x30\x67\x4c\x6e\x06\xff\x70\x16\x07\xc9\x47\xa5\x75\x9d\x5f\x8e\x5f\x38\x3f\x51\xec\x50\xcf\x2d\x45\x7b\x94\x04\xa9\x7a\x77\x13\xe4\x20\xf2\x6a\xba\x39\xf5\xbb\x2b\x58\x7c\x43\xd8\x85\x61\x84\xa9\x99\x84\x9d\x4c\x11\x0c\x42\x32\x77\x54\x2b\x7e\x76\x9d\xe0\xe0\x13\xb3\x4c\xb1\x39\xcf\x19\x7b\x6a\xf6\x03\x3a\x4c\xe3\xbc\xaf\x67\x93\xb8\x7e\xb5\x68\x95\x67\x85\x7f\x33\x28\xbb\x27\x19\x3a\x8c\x28\xf9\xcc\x00\xa3\x7a\x7c\xd3\x22\xa5\x5d\xc6\xb8\x90\x8e\x73\x47\xaf\x56\x0c\x41\x8d\xe9\x0d\x4d\x23\xae\x79\x22\xfc\x39\xdc\x35\xc3\x5d\xec\x2d\xe5\x40\x77\xb7\x43\xda\xac\xeb\xf3\x6e\x16\x0b\x62\xe1\xda\x8c\x0e\xc0\x47\x78\xcd\x4e\x1f\x4a\x77\xda\x0f\x1e\xb4\xbb\x68\x1d\x35\xb5\xa3\xdd\xc0\x69\x39\xcb\x1c\xef\x66\x20\x2b\xce\xa3\x96\xa6\xdd\xc9\x3e\xc8\x32\x5f\x67\x23\x5c\x41\x65\x5d\x7d\xe5\x6f\xb9\x0e\xe8\x0e\xa0\x34\x20\x8d\x33\x0e\xa9\x57\xbf\xaa\x67\x2c\x91\xb7\x9d\xff\xde\xf9\xef\x1d\x92\x78\x02\x13\xda\x82\xe6\x77\x0a\xea\x57\xea\x99\x4b\x3d\x16\x91\x34\xae\xc9\xc5\xb2\x89\xd6\x90\xdf\xdb\xda\x48\x3e\x0d\x5a\xc3\x53\x59\x2b\x93\x42\x5d\x75\x39\x23\xee\x59\xe4\x1d\xcc\x4f\x11\x8c\x43\xf3\xf5\xcc\x9b\x38\x98\xc0\x59\x1a\x53\x1b\x8f\x72\x97\x23\x1c\x5f\x2f\x82\x79\xf7\xec\xda\x15\x17\x0f\xa0\xa2\xc7\x80\x4c\xa2\x5f\x8c\x71\x91\x50\xdb\x23\x66\x6d\x38\x51\x3f\x7f\x77\x3d\x87\x4e\xe0\xe4\x99\x3b\xca\x31\xae\x6a\x2e\xeb\x7d\xd5\x1c\xcf\x27\xbf\xdd\xd8\xcd\x2f\x8e\x4a\x1d\x5d\x9c\x18\xbb\x46\x8e\x82\x35\x8e\xaf\x36\x33\x39\xd3\x38\xd3\xf3\xf3\xb8\x0a\x74\xcc\x24\x3b\xbf\xd1\xe0\x6e\x6d\x94\xac\x90\x63\x75\x86\x98\xda\x33\x76\xe9\x58\x16\x65\x27\x93\x74\x0e\xc3\xb1\xcd\x0e\xa2\xdd\x54\xe5\x72\xc2\x3f\x53\x45\x42\x62\xc2\xb5\x34\x84\x54\x1e\xe6\x68\xa6\x67\xe9\xa7\xda\x03\x9d\xa9\x6b\x9f\xc4\xb1\xad\x33\xab\x20\x96\x0c\x1b\x46\xb1\xb9\x55\x52\x72\xaf\x17\xc2\x66\x97\x3e\xa2\xd7\xbb\xb9\x85\x32\x37\x5d\xca\x67\xd5\xd6\x46\x53\x05\xeb\xf4\x99\xfa\xe5\xb9\x28\x0f\x16\xf8\xb2\x16\x33\x20\x5f\x8f\x32\x65\x12\x28\xd6\xc2\x81\x7a\x93\x5b\x39\x43\x04\xfc\x09\x1f\x39\xe5\x43\x60\x59\x5e\xb3\x7b\x30\x81\xea\x2c\xb7\x83\x15\x08\x7e\x0d\xe1\x0c\x1a\x99\x6f\xc9\x07\xc9\xd2\x2b\xd5\x67\x1a\xb1\x22\x1d\x02\x77\x1a\x25\x61\x61\xf3\x93\x17\xa3\x55\xf3\xa5\xc5\x39\xe7\x5e\x0a\x27\x03\xf0\xe6\x75\x11\x62\xa9\x48\xd2\xfd\x10\xa1\xbe\xb6\x65\xb7\x17\x1e\x9b\x2a\xdc\xaf\x31\x16\xb1\xff\xb5\x52\xad\xdb\xa9\xcb\x4d\x4e\xca\xeb\x58\xab\xaa\x74\x4e\x98\x4d\x50\x44\xd5\x47\xa7\xf3\x9a\xfe\x1b\xc4\x9e\xd5\x58\x46\xf2\x0f\x10\x0c\x1a\xca\x5d\x9e\xb9\x49\xee\xd4\x59\x9b\xa7\xcc\x13\xae\x60\xc0\x2d\x7b\x13\x34\x35\x13\x6a\xc3\xbd\x56\xd4\x53\xe9\x0a\xbc\xb1\x2f\x41\x89\x2a\xea\x86\x0c\xea\xd0\x65\x39\xba\x20\xa1\x85\x8a\x5f\xda\x7d\xe8\x70\xab\xa7\x53\x39\x29\xb5\x70\xc7\x40\xa8\x1e\xc3\xad\xfe\x0a\x3e\x06\xc5\x70\x53\xa9\xc8\x94\x48\x8a\xc8\x70\xfa\xca\x72\xa3\x30\xff\x72\x57\x05\x79\x7d\x38\x3a\xbd\x61\xed\xe1\x17\xca\x40\xbc\x19\xba\xee\x12\xf0\x77\x27\xcc\x22\xe6\xc8\x6b\x5f\x25\x55\xc9\x5a\x26\xbf\x7a\x95\x86\xe6\x4f\xf4\x73\xe9\x72\xbc\xac\x04\xe4\xc7\xe8\xba\xbe\x73\x96\xcc\x1b\x1f\x69\xf0\x6a\xa2\x83\x40\x32\x42\x02\x26\x8d\x54\xed\x41\x76\x15\x91\xd4\x89\x77\x33\x09\x32\xc8\x07\x49\x51\x9f\x87\xf8\x71\x09\x33\x72\x8e\xe0\x65\x94\x2e\x32\x75\x67\x2b\x74\x3c\x75\xe3\xd0\xf7\x3e\xaf\x38\x6c\x86\x34\x8c\xa2\xc5\x1b\x76\xea\x53\xd2\xe7\x86\x9a\x94\x85\xc3\x58\x5d\x56\x50\x85\x20\x6d\x61\xef\xc1\x19\x82\xc1\xc7\x07\x7c\x0a\x0c\x39\x7c\x21\x63\x70\x45\x1c\x71\xb2\x04\x4d\x43\x9f\x12\x21\xa7\xa8\x69\x2b\x7a\xab\xb0\x43\x72\x6a\x80\x4e\xb3\x78\xac\x4c\x66\x51\x1c\x16\x3f\x2b\x79\xac\xa8\x40\x57\x6d\x81\xd6\xd0\x37\x00\xb4\x86\xfe\xaf\x81\xf7\x47\xdf\x36\xd0\x1a\xfa\x36\x80\xd6\x82\x6a\xdf\xac\xa3\x7f\xfd\xfd\xe1\x1f\x3f\xed\xce\xcd\xbe\x59\xe2\x82\x92\xa3\x8c\xc0\x4f\x70\x42\x29\x5f\xdd\x09\xe9\xe5\x98\x62\x92\xd0\xe8\x2b\x2d\x60\x9b\x19\xce\x5c\x81\xd3\xdc\xc8\x8d\x6b\x9f\xe8\x1d\xea\xfc\x27\x3a\x49\x7f\x17\xf4\x7b\x63\x71\x67\x31\x4f\xc9\x21\x9d\x7a\x8a\xfd\x20\xaf\x6f\x7e\xe0\x8a\xf0\x0f\x73\xdd\x02\xc7\x3d\x96\xb9\xf2\x44\x3f\xe6\x34\xc0\xe1\x44\xfc\x25\x2e\x7b\x80\xdc\xfd\xdd\x13\x6a\xcd\xa3\x5e\x45\xe2\x59\x43\x07\x68\x97\x05\x2a\x1a\x60\xdc\xaa\x62\xef\x1b\x40\xa5\x3c\x21\x1b\xa4\x13\x24\x0e\xfc\x44\x2f\x89\xcf\x79\xcd\x9a\x3a\xa2\xd6\xd4\x60\x82\xa0\xd9\xc5\xad\x8d\xa3\x5c\x25\x6e\x81\x62\x24\x54\xfb\xa7\xdd\xa5\x4a\x33\x4d\x5d\xe7\x1c\x60\xd8\xfb\x09\xbc\xea\xf2\x2d\xc9\x6e\x04\xac\x54\xe7\x8f\x69\x17\xd1\x25\x69\x2e\xfd\xf4\xaa\x2d\x57\xae\x1a\x24\xc1\x47\x41\x85\xef\xce\x8d\xcc\x14\xdc\x59\x5e\x03\x55\xa1\x9e\xd3\x84\xd2\x22\x61\x68\x56\x13\x76\xda\x1a\x69\x68\x4e\x28\x20\xfc\x1a\x07\x25\xdf\x15\x78\xa5\xb8\x33\x9a\x0e\x94\x0d\x60\xd9\x1b\x54\xb5\x29\xba\xbf\x34\xf1\xe7\xaa\xbb\xc8\x8b\xfd\x50\x57\x13\xb6\xba\xd0\x43\x00\xd7\x92\x9f\xab\x57\x89\x64\x29\xe0\xca\xbf\xbe\x82\x14\x56\x16\x73\x06\x46\x36\xdf\xcd\x74\x86\x40\xf0\x6f\x3e\x70\xc2\xa5\x5f\x8d\x92\x53\x7d\xfa\x35\xeb\x59\xf9\x1a\x22\xca\x4e\x82\x4b\xee\xc0\x6e\x77\x66\x29\xbe\xe2\xdb\xb8\x6a\x59\x53\xa2\x57\xa4\x7d\x63\x20\xed\x1b\xd9\xe2\xec\x22\xa2\x87\xef\x5d\x0b\x5d\x7b\x70\xa9\x1f\x7b\xb5\x42\xf3\x3b\xcc\x7a\x2c\x37\x3d\xc0\xac\x92\x9a\x06\xe2\xf2\xdd\x74\x25\xdc\x60\xb9\xd3\x5a\x06\xf5\xad\x1b\x02\xd0\xc0\x97\xa7\xf9\x42\x18\x24\xa1\x43\x8f\x6d\xe6\x09\x6e\x8f\x27\x69\x2d\x7a\x16\x81\xab\x11\x1a\x31\x42\x16\x99\xf9\xb2\xf2\x70\xcc\x34\xa5\x86\x4b\xe1\xa1\x81\x8e\xbd\xa5\x63\x82\x18\xd1\xf5\x55\x83\x54\x98\x8e\xea\x68\x24\x8b\x51\x55\xa5\x1b\xc0\xba\x50\xa4\x06\x95\xa1\x9d\xdc\x00\x5f\x09\x07\x67\x8b\x38\x40\x5d\xc1\xa0\x9f\x6f\xb4\x39\xfe\x93\xa2\x1c\x36\xd9\x6b\x69\xaa\x2c\x45\x98\x5b\xb1\xd9\x34\x78\x17\x5d\xc0\x61\x08\x33\x11\xb9\x30\x0c\xc8\x9f\xe6\xf8\xc4\x7a\x70\xa5\x0d\xed\xcb\xc2\xa2\x38\x6b\xea\x51\xda\x60\x03\x6a\x50\x3d\x94\x5e\x35\xaf\x5b\x68\x0d\x09\x64\x7b\xf4\x0e\x3b\x12\xbb\x40\xa1\xc1\xb4\xbb\xd1\x47\x4a\x42\xf7\xf9\xd3\x76\xbe\x22\x66\x2f\xc2\x43\xf6\x67\x17\xa7\x2e\xbd\x5c\xf7\x83\x49\x9c\xf9\x22\x86\xc1\x87\x61\x84\xa5\x85\x5f\x2d\x72\x5c\x34\xac\x57\xdc\xcd\xb4\x75\x29\xb2\x54\x39\x51\x2f\x54\x94\xab\xb0\x75\xaa\xa1\x6f\x09\x77\x27\x34\x62\x86\xd6\x1d\x3d\x4a\x16\x7f\xd6\xa8\xd6\xc6\x7e\xad\x62\x4d\xae\x81\x81\xfb\x83\x0c\xd3\xcb\xaf\x11\x99\xa7\x93\xbb\xa3\x77\x7b\x1e\x16\xba\xe3\xaa\x5e\x19\xc0\xe5\xf6\xb0\x1d\xb3\xc8\x34\xbf\x55\x66\xf0\x07\xcf\x99\x8e\x53\x7d\xa9\x4c\xce\x49\x9f\x59\x34\x4f\x83\xfd\xbf\x61\x17\xaf\xe8\x86\x98\xab\x30\x75\x61\x2a\x22\x1d\xb6\xbb\xf0\x0c\x6d\x9a\x45\xfe\x75\xd8\x28\x18\x26\x9f\x1b\xba\x3f\x8d\xc9\x75\xa5\x5e\xa7\xd9\xc0\xb4\xde\x44\xef\x64\x1b\xed\x9e\x43\xe0\xfe\x9e\x46\x44\x28\x5d\xe0\xe8\x0b\xb4\xee\x16\x51\x3c\x21\x68\x82\x0a\xca\x6b\x78\x62\xa7\x74\xdc\x4c\x87\x17\x75\xda\x75\x6e\xf9\x0a\x79\xfc\xe9\x97\x6e\x58\x19\x56\x77\x49\x77\x9a\x3a\xcb\x4a\x8f\x65\xe9\x13\xcb\xa8\x0e\xee\xd6\x03\x5c\xdf\x55\xef\xd4\xf9\x7b\x93\x0b\xee\x97\xe8\xd3\x4a\x37\xeb\x3b\xea\xb7\xb5\x1a\xa9\xe2\x12\xe5\xad\x2d\x79\x59\x2a\x8b\x97\xe6\x06\xcd\x9a\xa4\xbb\x23\x8f\x6b\x36\xd8\x86\x4b\xd3\x26\x68\x30\x35\x64\xfb\x82\x89\x51\x98\xe8\x49\xc3\x9f\x20\x1e\x60\xbb\xe0\x7f\x5c\x05\x09\xbd\x4d\x61\xf8\x6a\x14\x2e\x4d\x80\x42\x4e\x51\x7a\xc1\x1e\xe0\xf4\x23\x4c\x1e\x37\x31\x2e\x39\x6d\xcc\x55\x4d\x33\xac\x34\x1c\xe8\xf6\x5f\x18\x43\x66\xfe\x50\xcc\x01\x39\x70\x84\xcd\x1e\x20\x10\x4f\x38\x58\x6c\xd9\x43\x49\x9e\xe7\x94\x55\x9f\x25\x6d\x85\xbf\xf1\xc8\x82\xbf\xd1\x4c\x5d\xe6\xb6\xed\x96\x7d\x66\x8f\xd5\x2e\x26\xee\xe7\x30\xb8\x15\xdb\x72\x59\x6a\xbf\xc6\x78\xed\x32\x00\xb1\xdc\xca\xc2\xe4\x9f\x8b\x71\xd5\xa8\x34\xaf\xdc\x44\x5a\x6e\x5a\x56\x6e\xaf\x58\xb9\x0a\x13\x90\x4d\x54\xca\x00\xc3\x55\xa9\x1b\x13\x9b\xd6\x7e\x6a\x04\x03\x51\xd2\xac\x02\x27\x52\x7c\xb9\xa6\x0f\x90\xee\x21\x20\xfd\x80\xd2\x4a\x3f\xa0\xc0\xe0\x07\x84\xe0\x3c\xb5\xe0\x6f\x92\x57\x19\xd9\x52\xae\xc5\xf1\x2d\xdf\xfd\xbc\x82\xcb\x90\xee\x4e\xd4\xc8\x81\x48\x5e\x72\x8e\x4b\x8e\x43\x39\xdc\x66\x3d\xf3\xe1\x03\xc5\x3b\x86\x9d\x65\x29\x8b\x20\xcb\x04\x8d\x98\x71\x9c\x67\x13\x47\x19\x26\x2a\x62\x46\xb1\x27\x31\xb8\x21\x2f\xf3\x82\xb1\xf4\xa5\x80\x82\xf5\xf1\x14\x8d\xfd\xb3\x28\x09\x3b\xd0\xe3\xc5\xb3\x6b\x65\x90\x74\xb0\x4f\x8e\x00\x14\xee\x7e\xb9\x04\xd4\x02\xaa\x3b\xf9\xac\xe1\xfd\xb4\xd5\xf7\x48\x96\x53\x04\xb3\xd9\x71\x1a\xc2\x67\x74\x6b\x1f\xea\xfe\x14\x12\x87\x54\x0e\x4b\xc7\xf5\x35\x4d\x00\x7b\x2a\x93\xea\x12\x14\x70\x61\xa0\xee\x5a\x84\xe1\x05\x48\x46\xd0\xa7\xa9\x48\x27\xb2\xa6\x8e\x46\xa3\x84\x3d\xcb\x38\xda\x67\xc2\xd9\xcb\xc4\xe3\xd3\xde\x18\x04\x23\x11\x4a\x94\x8e\x90\xcf\xcc\x1a\xc2\x29\x69\xab\xc7\xbc\x92\x68\x5e\xa9\x4f\x45\xf6\xf5\xb4\xe3\xfe\x14\x44\x31\x0c\xc9\xce\x3b\x0f\x50\x06\x9d\x27\xc7\x2f\x1c\x44\x33\xf1\x86\xa6\xf4\xc2\x01\x82\x4b\xa8\xb8\x88\xf4\x86\xc6\xc2\x99\xd3\x4f\x55\x3e\xec\x86\x6e\xe8\x3c\xe1\x7f\x31\x64\x0e\xaa\xb2\xd1\x3c\x99\xa7\x6e\x3a\x4a\xfd\x6c\x71\x96\x61\xd4\xe8\xcb\xbc\x98\xa1\xeb\x3d\xec\x7b\xcb\x60\x7b\x9b\xb2\x51\x32\x2f\x8e\x00\xa4\x2a\xbb\x66\x89\xda\x97\x0e\x45\x69\xe4\x3b\x10\x48\x56\xcc\x79\x80\x60\x22\x40\x6a\x4b\xdc\x59\x69\x03\xd7\xa4\x2a\xa2\x85\x1a\xbe\xac\x3f\x3d\x8f\xfe\xf4\x3c\xfa\xd3\xf3\x68\x63\x9e\x47\x07\xf0\x8f\xbf\xfd\x7c\xf9\xaf\xe7\x66\xcf\x23\x69\x82\xcd\xe9\xce\xdc\x00\x45\xc1\x8b\xe0\x0c\xc6\x31\x0c\x7f\xbc\xe6\x0f\x8e\xd3\x04\x23\xf2\x11\xfb\xf9\x2c\xa7\xfc\x28\xf2\x46\x30\xd6\x92\x6c\x71\x26\xff\x6e\x48\x3f\xd7\xd3\x8c\x22\x55\xf0\xb2\x45\xa2\x92\xfe\x2e\xe8\xf7\x4b\xb7\x16\xfb\xac\xaa\x3a\x57\x89\x85\x93\xa4\xf8\xb8\x1e\x9b\x97\x79\x83\x74\x85\x7a\xcb\xb3\xcf\x03\x10\xb4\x30\xa7\xe2\x65\x6b\xa9\x38\xe5\x4c\xc0\x52\xe4\x24\x29\xba\x09\x3b\xbf\x50\xcd\x8f\x4e\x0d\x1d\xcc\xeb\xef\xc8\xdc\x55\x61\x87\xb9\x6b\x0c\x6d\xc5\x51\x09\x74\xb8\x74\x16\x50\x6c\x83\x74\x84\x66\x41\x36\x4f\xe7\x8b\xb9\x42\x59\x27\x49\xf8\xc2\xf4\x2a\x71\x73\x36\x91\x32\xec\x21\xa3\xd9\x12\x35\x70\x73\xb6\x2d\x05\xf4\x5e\x9c\x64\xd8\x33\x5a\xe6\x44\x0a\x74\x7e\x96\x68\x08\x84\xe8\xd6\x73\x73\x35\xa4\x98\x91\xfe\x5a\xfd\x1e\x68\x49\xdd\x52\x75\xad\xaa\x52\xb4\xd4\xdf\xab\xeb\xb9\x0a\x8b\x4b\xd1\x89\xa6\xc1\x91\xa6\x0e\x0c\xf1\xc8\x74\x19\x4d\x8a\xed\xce\x83\x04\xc6\xd4\x15\x71\x90\x0f\x99\x1c\x93\x01\x1f\xb2\x98\x2f\x4a\xf4\x7a\x58\x1d\x53\x91\x20\x27\x22\x52\x98\x66\xe8\xc0\xd0\x63\x86\x20\xcb\x21\x13\x3e\x7f\xb0\x2e\x9b\x90\x14\xa4\x06\xd7\xcf\xc6\xd0\xa7\x28\x2c\xc6\xf7\x6b\x0b\x5c\xd7\xd5\x09\x08\x81\xdb\x6d\x1b\xa4\xe4\x1a\x42\xce\x32\x36\xe2\x4d\x22\x13\x37\x59\x73\x23\xc4\x74\x21\x40\x8b\x39\x39\x28\xdc\x4f\x4d\x5b\x59\x0f\xa5\x5c\x73\x6a\x36\xf0\x97\xfe\x22\x5c\x02\x9a\xf4\xd2\x06\xdd\x0b\xbe\x89\x45\x81\x55\xb5\xce\x6f\xd5\xda\xec\x7a\x63\x74\x83\x0b\xf0\xb6\xe6\xee\x72\xb4\xdc\x86\x88\xbb\x1a\x73\xaa\x72\x85\xc4\xce\xa5\xda\x72\x19\xe0\x2f\x28\x3d\x9c\x66\x68\xad\xd8\x1c\x9b\xc1\x0e\x7c\x33\x82\xb8\x82\xc1\xad\x86\x56\xec\xa0\x19\x74\x2f\x78\x54\xa2\x1f\x5b\xcb\xf4\x66\xe5\x1b\xab\xb3\xbb\x6d\x94\xee\x52\x6c\xa4\xc3\xad\x3e\xd0\x75\xd5\xe1\x56\xcf\x82\x09\x2c\x76\x54\x92\xff\x86\x99\x73\xd8\x5b\xb1\x63\x8d\xc8\x2c\x36\xb3\x4f\x1a\xb8\x25\x7f\x11\x88\xb0\x06\x56\x49\xbe\x30\x79\xaa\xb9\x24\x97\x4e\xcd\x68\x52\xcc\x59\x6e\x9f\x7a\xdd\x04\x49\x0f\xf4\xa8\x75\x4d\x11\x5e\x9b\x4d\x4c\x7e\x29\x8c\x3a\xd0\xfb\xae\xdb\xdf\x1a\x8d\x30\x39\x63\x6a\x29\xb2\x39\xb5\x05\x60\xd0\x2f\x1b\xf6\x2c\xf5\x21\xd5\x30\x44\x07\x4a\x4b\x0f\x3f\xaf\xdc\xde\x26\x06\x82\x77\xf7\x34\x0a\xff\xcf\x48\x5f\x84\x4a\x2c\x44\xc0\x1d\xbb\x9e\x8d\xb8\x1d\x8a\x02\x46\x5b\xfd\xa5\xc7\xc7\x51\xc6\xc1\x41\x6f\x09\xc8\xa2\x55\x92\x14\xf2\x90\x11\xb2\x58\xe2\x16\x57\xb6\x48\xd9\x28\x6d\xbe\x06\xb5\xd7\xaf\x51\xef\x75\xf0\xd7\xe4\x7f\x2d\x31\x41\x61\x05\xe3\xa7\x38\xb5\xcb\x10\x20\xdb\xb9\xba\xc9\x29\x5a\xe3\x69\x79\xd4\x98\xf7\x73\x4c\x57\xe8\x2f\x41\xc4\x59\xe1\x14\x52\xdc\xab\xe4\x56\x28\x91\x83\x04\x34\xac\x05\x2e\xa7\x1c\x2b\xfe\xe5\x98\x3e\x75\x16\x19\x05\x5f\x24\x83\xa4\x06\xec\xe2\xa2\xa2\xa5\x03\xe0\xe2\x08\xc7\x25\xfa\x3f\x6b\xa8\x4c\xf1\x0c\x20\x29\x2e\x9a\x1e\x01\xcc\xd5\x4d\xd2\x04\xba\x76\x0c\x67\x1d\x43\x40\x19\x9a\x8f\xf0\x5a\x31\x7d\xf0\x9f\xd2\x49\x27\xca\xba\x64\x51\xbe\x2c\x86\xc8\x1b\xbd\x5d\x0d\x96\x85\x32\x6d\xb7\x85\xe2\x5b\x87\x93\x50\x6b\xd2\x94\x61\xa1\x81\xa3\xbb\xab\x1e\x6f\xf6\x75\x8f\x77\x79\xd4\xd5\x3d\xb7\xec\xc6\x08\x79\x85\x5c\x96\xee\xba\x78\xa9\xa2\x74\xef\x37\x38\x22\x71\x65\xa7\x46\x61\xba\x1b\x1a\x56\xd3\xc2\xbd\x49\x22\xc1\x3a\x4d\xc8\x1e\x63\x2f\xef\xc7\xe4\x7e\x26\x77\xd0\x0c\xe2\x67\x97\xa4\x2a\x74\x93\x95\xfb\x07\x06\x8a\xf4\xab\x2c\x76\xe2\x4a\x70\xe9\x79\xa5\xbd\xad\x9e\xad\x8e\xec\x60\x41\xdc\x15\x96\x3a\xf5\xa2\x05\x92\x96\x75\x33\xf2\x2a\xc0\xd0\xfe\xd1\xfa\x84\x05\xd6\x0f\xa4\xed\xf7\x06\x26\x8b\x0b\x66\xa3\x27\x4a\xe4\x39\xd4\x34\x44\xde\x05\x39\x0d\xc4\xd2\x6b\xd8\xf0\x76\x2d\xfe\x66\x9b\x9a\x23\xe7\x75\x2f\x16\x31\x8e\xe6\x31\xec\x5e\x45\x78\xd6\xe5\x91\xa5\x86\x5e\xd0\x3e\x52\xd2\xb6\xcb\xf8\xdf\xa8\xc3\xea\x3a\xa9\x3e\x83\x7f\xa3\xce\xd8\x11\xda\xd7\xba\x9d\x22\x33\xfa\x37\xe8\x9c\x4d\xcf\xa8\x7f\xb3\x89\xa4\x36\x39\x5b\x9c\x9f\xc3\x0c\xc3\xb0\x2b\x4e\x21\x9b\xed\xaf\x72\x01\xdf\x7e\x07\xae\x3a\xd7\xfe\x0d\x9a\xbe\x73\x06\xa7\x29\x82\x5d\x09\xf7\xba\x5a\x4f\x14\xb3\xf9\x37\xe8\x98\x75\x7b\xe4\xdf\xa8\x2b\xd6\xdc\x92\xbe\xf1\x9d\x88\xd2\xd5\x30\xc0\xd1\xfb\x61\xa1\xc2\x4f\x77\x0f\x7a\x47\x3f\x9e\x57\xa2\xd6\x7c\x20\xa7\x65\xe0\x7e\x10\x7e\x01\x65\x0b\x54\xce\x13\x66\x30\xde\x18\x5c\xf0\x2b\x49\xa2\xd8\x9d\xe3\x11\x38\x55\xde\x7d\xe0\xf0\x31\x89\x08\x85\x58\x93\xf3\x57\x67\x4d\xb5\x30\x55\xf6\xa5\xa1\x00\x9c\x0e\x0e\xb4\xe3\xbc\xf6\x8a\xfd\x94\x0c\x45\xea\x8d\x87\x64\xd0\xec\xab\x18\x35\x96\x4f\x1a\x51\x86\x95\x69\x7a\x72\x33\x48\xbd\x13\x8a\xdb\x2b\x21\xaf\x2a\x1e\x18\xf5\x2e\x2c\x16\xd3\x87\xc8\xa3\x6c\xe0\x30\xd2\x08\xd1\x71\x75\x68\xeb\xbb\xaa\xe7\x87\x32\xac\xb4\xb9\x8d\x2e\xd7\x45\xe4\x6e\x2e\x1d\x26\x74\xdb\x5a\x5c\x5b\x3e\xea\x65\x10\xfe\xf2\xb8\xca\x0c\xef\x12\xd3\xb6\x92\xd9\xca\x66\x2f\x35\x81\x87\x57\xa3\x40\x97\x20\x6c\xc1\x6e\x53\x20\xd2\xb2\xf5\x71\x43\x16\xa1\xd2\x2a\xb9\x49\x73\x50\xf1\xb2\xab\x5f\x6b\x20\x5a\xf1\xaa\x8b\x08\xa3\xe9\xaa\x4b\xb9\x89\xe2\xd3\x46\xbb\xb8\xe9\xef\x8e\x46\x23\xe8\x7f\x84\xd7\xc7\x69\x08\xb7\xb7\xe5\x45\x8e\xe0\xbf\xa4\x76\xa7\x4e\x02\xaf\x9c\x97\xe9\x22\x83\xec\x27\xbf\xf7\xb5\x5c\x06\xb5\x33\x62\x41\x39\x77\xb4\xfd\x88\xed\x77\xae\x4b\xaa\xf7\x98\xed\x30\xc3\x15\xed\x59\x08\x4e\xbf\xf0\xf6\x57\x6d\x21\xb4\xd3\x91\x16\xa0\x27\xd9\x50\xe4\xe3\xcb\xfe\xa2\x95\xf0\x96\x4b\xb5\x13\x70\x83\x4e\xc8\xd2\xf8\x12\xa2\xee\x24\x40\xe1\xfd\xd0\x06\x0e\x5e\xa2\xbf\x5d\xcf\x3e\x7f\xb6\x79\x92\x46\x94\xb5\x41\x3a\x0c\xca\x3f\xb8\xa1\xdd\x72\x33\x65\x88\x13\xd6\xda\x5e\xbc\x02\x71\x8d\x44\x9f\x05\x43\xfd\x20\xff\x35\xb6\xfb\x2a\x89\x72\x86\x05\x40\x5f\x03\xd6\x44\xc9\x95\x31\xd0\x6a\xce\x9d\x3c\x6c\xce\x82\xa4\xbe\xbb\x55\x54\x29\x55\xc8\x11\x16\x90\xa3\x9f\x82\x28\x4e\x2f\x1b\x7b\x26\xe9\xb1\xef\x6a\x6f\x4f\x65\x46\x15\xf7\x2b\xa1\xbe\xab\x52\x58\x07\x9c\xa6\x31\x8e\xe6\x66\x72\x9a\x62\x2d\x55\xde\x4e\xa5\xc4\x22\x9e\xc7\x7a\x19\xd5\xe0\x6b\xd7\x07\xe6\xf3\x54\xa9\x09\x25\xc0\xa6\x47\x16\x2a\x47\xa5\xbe\x3d\xbf\x68\xb4\x3e\xb9\x68\x2d\xad\x68\xdd\xee\x5e\xe6\xba\xb4\xdd\x92\xda\x9e\xd6\x95\x50\xcb\x6c\x67\xbc\xb3\xcc\xd5\xb0\xf3\x92\x5c\x1c\x93\x65\x07\x51\x68\x3f\x0e\xd7\x3c\x1e\x83\x5e\x1b\x95\x79\xd1\x72\xb0\x65\x89\x2b\xdd\x9a\xae\xbd\x4e\x59\xe1\x70\x8c\xf2\xde\x60\x99\x72\x0d\x00\x3f\x6f\x61\x18\x21\x6a\x77\x5a\x11\x7a\x44\x5f\xce\x45\x66\xcd\x41\x37\xc8\xf7\xfa\x22\xa3\xd4\x49\x09\x0e\xce\x1f\x6d\x16\xae\xc4\x86\xb0\x55\x37\x29\xaa\x25\x98\xe5\xdd\x62\xe5\x6e\xd2\xbd\xd5\xeb\xb7\xb5\x83\x6b\x57\xf1\x42\x65\x57\x5a\xc0\x5b\xe4\xd1\x94\x12\xb9\xc1\x50\xb6\x5b\xc7\xcb\x75\x6c\xb9\x84\xdb\xe6\x7a\x55\x20\xf8\x3a\x87\xb4\x72\x3e\x55\x4b\xee\xae\x15\x81\xb0\x4a\x8a\xab\xdf\x35\x5d\xe6\x5b\x81\x74\xac\x34\x39\xda\xcd\xda\x75\x27\xd2\xb7\x3f\x8d\xda\xad\x87\x5f\x74\x0a\xb5\x9b\x40\xd5\xd3\x67\xd0\x70\xfa\xd4\xda\x3b\x2a\x26\x4f\xd3\xe9\xd1\x6a\xda\x6c\x44\xd8\x57\x02\x49\x59\x45\x9d\xab\x23\x9f\x69\xc6\x59\xb2\x9e\x35\xa8\x7c\x4e\xde\xa0\x3d\xa8\x6c\xba\x78\x50\x7d\x6a\x4f\x63\xa8\x90\xa7\x34\x60\x63\x20\x89\xbb\xf2\xb7\x8d\x8d\x61\x33\xe7\xfb\xa4\xfa\x7c\xff\xb7\x97\x7b\x8f\x2e\x5f\xfc\xd3\x82\x51\x2f\x83\x38\x8d\xb1\x9b\xc5\xd0\xcd\x92\xc9\x5f\x53\x08\x45\x2f\x95\x57\x5a\xab\x19\xbb\x09\xdb\x7c\x05\x27\xf8\x3d\xa5\x8b\xcf\x75\x72\xd2\x27\x82\x21\xfe\x9b\xe2\x87\x1f\xec\x3f\xba\x37\xfc\xf0\x76\x01\xf8\xc6\x08\xde\xcd\xd3\xe0\xeb\x13\x66\x15\xe4\x55\xe7\xc8\xfa\xfa\x0c\x59\xc5\x5f\xb6\x85\x88\xfa\xd6\x0b\xa0\x59\xb7\x88\xf5\xad\x3c\x37\x19\x1e\x4b\x48\xfc\x6f\x94\x0f\x4a\x92\x69\x0d\x8c\xe3\x22\xc1\x22\xc2\x72\x12\x0c\x53\x4c\x98\x02\xba\x5e\x19\xb8\xe5\x28\x11\x5b\x2b\xa9\x19\xae\x86\xe1\xaf\x50\x84\x30\x07\xf7\x22\x27\x88\x4e\xfe\x61\x20\xfc\xd0\x84\x20\xef\xa6\x5a\x40\xb7\xcd\x69\x07\xfa\x7e\xbc\x36\x99\x19\xbb\x95\x66\xb8\x44\xec\x6f\x0d\x76\x48\xd9\xd8\xda\xb2\x39\xd1\x4f\x37\xc3\xe5\xa4\xa6\x5d\xe0\x28\xce\x76\xc2\xf4\x62\x07\x5e\xc2\x04\x0b\x28\xde\x82\x82\x01\x92\x4d\xa9\x18\xa8\x5a\xc5\xd8\xff\xfc\x26\xfc\xfb\xde\x93\x7f\x36\xa2\xc1\x91\xad\x11\xd1\x2e\x0a\xbb\xa3\x24\xc1\xb1\x44\xc8\x14\xb8\x71\x4c\x3c\x38\x16\x9e\x10\x41\xa6\x53\x4b\x14\x52\x42\x0e\xa6\x25\xa8\x11\x0c\x54\x42\x34\x26\x11\x3a\xca\xf5\x3c\x22\x0d\x62\x4c\xea\x42\x89\x4b\xa6\x53\x35\x04\x03\x0b\xec\x4b\xb5\x86\x8d\x8c\xa5\x66\x1e\x92\xb7\x2c\x9b\xf5\x78\xa5\x9b\x53\x9c\xdc\x2d\x1c\x7f\x35\xe1\x89\xba\x15\xd8\x02\xe2\x8b\x5c\x92\x1f\x68\x46\x1f\x58\x67\x8f\xeb\x88\x27\x69\xe2\x71\xae\x20\xf2\x0d\x55\x8c\x55\x13\x37\x05\xfb\x20\x7f\x79\x77\x04\xde\xe3\xf9\xd2\x58\x64\x85\xd1\x76\x15\x13\xfb\x4b\x79\x63\x59\x1f\xe8\x5f\x10\x0c\x55\x0e\xb3\x96\x9b\x6d\x53\x14\xe0\xe6\x75\xdb\xa3\x5c\x79\xdb\x6f\x96\x4d\xb9\x77\x36\x10\x6a\xa7\x69\xc2\xe5\x53\x18\xa5\x7a\xb2\x0a\xb8\xec\xd4\x6a\xce\xa8\xb6\x17\x5c\x4d\xa9\xa1\xea\x8c\x2f\x8d\x28\x80\x2a\x12\x6d\x28\xd8\x5c\xd7\xb1\x5b\xae\x21\x5a\x17\xaf\xb2\x8a\xe4\xdd\xd7\x7a\x1d\x91\x9f\x7e\xdd\x95\xc4\xc4\x30\x25\x40\x16\x94\x35\x85\xf1\x65\xc4\xf0\x94\xa5\x1f\xf3\xeb\x36\xf6\xeb\xa7\xc2\xf2\x52\xa4\x87\x5f\x7f\x17\xa9\x65\x8a\xba\xbb\x3d\xfa\x4f\xca\xa9\x12\x54\x6c\xbf\x77\xaf\x38\xa7\xdc\x2f\xc8\x36\x55\xbf\xaa\x56\xf0\x4c\x59\x4d\x03\xdf\x0a\xb7\xd4\x66\x06\xde\x84\x2c\xbc\x82\x86\xbb\xea\xc4\x94\xb4\x99\xe5\xa9\xa9\xbc\x2a\x4f\x4e\xe5\xe5\xe6\xa7\xa7\x70\x38\x74\xf3\x99\x4a\x3a\x17\xa1\xe0\xba\x58\xf1\xe2\x6a\xa1\x28\x37\xcd\x79\x59\x2a\x4f\x57\x0d\xe7\xaa\xa9\x23\xff\x9c\xad\xc5\xd9\x6a\x14\xb7\x0d\xcc\xd7\x06\xa3\xd9\x7e\xca\x55\x86\xa4\xf7\x7b\x4d\x01\xb3\x73\xc8\xc8\x12\x3d\xee\x17\xe0\xc5\xe5\xc1\x0e\x0a\x2b\x2e\x7b\xd2\x82\x13\xf7\x2e\x08\x70\x49\x25\x36\xa4\x0e\xd5\xd1\xdf\xda\x4f\x1d\x4d\xb9\x67\x35\xd3\x8a\xd5\x0d\xb3\xe6\x70\x81\x4a\x86\x8c\xf2\xbc\xda\x50\x8f\xb4\x63\xfd\x3b\x6a\xc5\xfa\x67\x04\x5a\xdc\x24\xeb\xdf\x24\x8d\xc9\xfc\x88\x14\xe4\x53\x94\x5e\x65\x9a\xe4\xef\xff\x5b\x13\xfa\x55\x7c\xa2\xdd\x76\xdc\x33\x2a\xc0\x0a\xa7\xd7\x36\x24\x7d\x64\x9e\x6c\x88\xa1\xaf\xfa\xdc\xde\xbc\x05\x0a\xd5\x98\x76\xdb\x64\x71\x06\xba\xbb\x91\x69\xcc\x11\xec\x5a\xa1\x95\xdc\x1f\x72\x24\x53\x9d\x28\xcf\x04\x5f\x6c\x3a\xb9\xe7\x60\xc2\x12\x26\x95\x6d\xb4\x94\x8d\x87\x77\x49\x1d\x33\x9e\xf0\x2a\x2e\x65\x22\x78\x86\xbe\xb4\x5d\xea\x65\x8a\x60\x7b\xa3\x4e\xa3\x7a\x34\xc1\x6c\x2a\x08\x65\x35\x18\x52\xad\x73\x62\x60\xfa\x5a\x03\x26\x32\x82\x18\x6d\x6a\x6e\xf6\x80\xfb\x2c\x8c\x2a\x5c\x67\xeb\x9d\x03\xeb\x01\xa1\x94\xcd\x3b\x24\x22\x8c\xd2\x45\xe9\x5e\xd5\x9c\xaf\xcd\xf4\xc8\xa1\x2d\x57\xe8\x35\x1a\xcb\xc8\x31\xce\x15\x10\xda\xe6\x44\x43\xd6\x93\x80\x52\x8b\xea\xc6\xd5\x9e\x25\x34\x7e\xa9\x20\x86\x08\x3b\x57\x01\x4a\x38\x35\x66\x23\x87\xd2\x7a\x2e\xab\xd2\x27\x85\x58\x9a\xba\xaf\x1c\x47\xd0\x00\xb1\x3e\xab\xcc\xbe\xca\x75\x55\xa9\x42\x33\xfa\x24\xf6\x7f\x8d\xc8\xb5\xc8\x98\x3c\x5e\xa3\x66\xcd\x52\xd8\xc2\x07\x2a\xdb\x5a\x98\x33\x2d\x27\x48\x21\xb3\xa6\xc0\x67\x36\x3e\xa8\x66\x00\x67\x14\x91\xb9\x11\x73\x57\x3d\x78\x59\xc3\xb9\xd6\x74\x18\xda\x7b\x5e\x3b\xad\x96\x99\xc6\xe4\x52\xcd\xab\x5c\x97\xa2\x7e\x11\x6a\xbb\x62\x97\xf7\xc9\x47\xe0\x00\x94\x59\xd0\x1b\xea\x40\x4d\x58\xb4\xea\x18\xae\x6a\x8a\xba\x3b\x7a\x2b\x83\xa7\x85\xf4\x0b\x09\x2a\xfd\x42\xd0\xca\xe4\x56\xa4\x4c\x8d\xda\xaa\x2e\xaa\x58\x75\x31\x51\x5d\x4f\xca\xee\x26\x0a\xc7\x15\xd5\x5c\x44\x4a\x66\xc5\xe1\x85\x90\xa2\x17\x18\x86\x7e\x10\x47\x41\xd6\x51\x6e\x41\x28\xc3\xd4\xea\x61\xcc\x79\x46\x2c\x98\x79\x9a\xa2\x8b\xe3\x34\xc1\x41\x94\x40\x44\x7f\x89\xc2\x5c\x81\xe2\x4b\xef\x41\x29\x47\x4a\xe2\x1f\x07\x71\x1c\x9c\xc5\x2c\x4c\xf9\x84\xbe\x51\x02\xa0\x57\x21\xbc\x2a\xd4\xca\x9f\xc4\x30\x40\x9d\x1b\x85\xdb\x98\x05\x38\x4f\x96\xde\x12\x08\x1b\xa6\x09\xd5\x8f\xd5\xb3\x10\x57\xcd\xdc\x80\x20\x20\x9d\x36\xc4\x4b\x43\x3c\x35\x67\x16\x03\x78\xd4\xc9\xe3\xbb\x3d\x3f\x49\xd1\x45\x10\x47\x9f\x59\x4b\x79\xdd\xa1\x5a\xf1\x64\x84\x79\x00\xb1\xe0\xb4\x4a\x18\x83\x0f\xe5\xb5\x62\x57\x59\xfc\x52\x6f\x58\x02\xff\xa5\xd6\x34\x90\xf0\x58\x63\x79\x55\x47\x79\xb5\xe8\xb3\xed\xed\x7a\x2a\xaf\xc4\x4f\xe0\x27\xc1\xfa\x74\x12\x9d\xc5\x51\x72\xae\xb1\x7b\x71\xbe\x2b\x3e\x05\x86\xb5\x83\xb1\x2c\xc6\x7e\x07\x0d\xdc\xa0\x16\x18\x36\x8b\x79\x96\x3c\x3d\x98\x8d\x5a\x3b\xa6\x28\x68\x21\x71\x52\x88\xa2\x46\x3a\x51\xd4\xed\xed\x56\xa7\x92\x2a\x4a\xb0\x3f\x31\x57\xeb\xd3\x31\x40\xa3\xad\x1e\x08\x46\x5b\x7d\x90\x0a\x1f\x29\x8c\xae\x6f\x04\x59\x50\x06\xa2\x11\x34\xd0\x11\x7d\xb7\xd5\x41\xa3\x4e\x36\x8a\xe8\x78\x74\x3c\xcf\x0f\xd3\x04\x7a\xdb\xdb\x9d\xc4\x9f\x2f\xb2\x59\x47\xc4\x94\x83\x2d\x7c\x7b\x9b\x70\x12\xa2\xad\xd1\x08\x7b\xdf\x91\x22\xbd\xef\x96\x13\x22\xb2\x9d\xd8\xbb\x09\x48\x15\xd2\x51\xbc\x9c\x46\x49\x10\xc7\xd7\x37\xa4\x02\xe8\xf6\x96\x71\x1a\x45\x3e\xab\xf2\xed\xad\xf8\xab\xe3\xc9\x94\xd1\xb4\x13\x70\x36\xb6\x74\xb9\xe4\xdd\x96\x2c\x69\x4f\xad\xce\x7e\x95\xe4\xec\x57\x68\x75\xf6\x2b\x54\x66\xbf\x42\x75\xec\x57\x28\x67\xbf\x42\x0d\xd9\xaf\x50\x7b\xf6\x2b\xe4\xe9\x2d\x2d\xf5\x57\x73\xfe\xab\x10\xb2\xc6\x10\x35\xf7\xab\x91\x60\x25\xdf\x06\x09\x56\x8d\xdf\xe1\xd1\xeb\x00\xfd\xf8\xf3\xbf\xfe\x5a\xed\x77\xa8\xfc\x63\x82\x2b\x08\x2c\xc1\x0c\x62\xc5\x32\xe8\xd3\xd6\xf8\xde\x32\xda\x40\x43\x90\x83\x5a\x7c\xe5\x79\x80\x67\x2a\xec\xb5\xbb\x93\x7b\x6c\x64\xb3\x14\x61\x23\x9c\x72\xc9\x15\xa1\x1c\x69\xfd\x94\x8c\x50\xc4\xdd\x2a\x5f\xf2\xab\xbf\x5f\xde\xbd\x7b\x43\x7e\x52\xd9\xc9\x36\x12\x84\xad\x76\xee\x05\x29\xa6\x7b\xc1\x73\x6f\x1a\xa1\xdd\xa4\xa6\x2d\x2e\xfe\x0a\x07\x8b\xea\x00\xcd\x26\x01\x98\x0d\x2e\x92\xcb\x1f\xe8\x71\x8b\x96\xeb\x8d\xd0\x8c\xb1\xe5\x28\x36\x52\x45\x46\x30\x8f\x22\x6c\x86\x8c\xde\x2c\x78\xd0\x50\x4c\x6b\x04\xf6\x35\x21\x01\xaa\x86\x5f\xb0\x41\xb4\x94\x53\x71\x7b\x24\xee\x3c\xac\xa2\xca\x66\xac\xe1\x08\x6f\x99\xd1\xe5\x30\x77\xc1\x37\x64\x47\x12\xd9\x2b\x76\xff\x2f\x79\xa1\x0d\x2f\x84\x8d\x92\xb4\xe2\x8c\x6a\x45\x90\x54\x2d\xa3\xaa\x25\x7f\x50\x13\xcf\xbb\xae\x80\x1e\x8a\xa5\xfb\x82\x35\xe7\xb4\x84\xdc\xd5\x04\x53\xbf\x3e\x60\xb4\x4e\x9c\xed\x93\x7f\x0d\x31\xff\xdf\x05\x44\xd7\x6f\x48\xb6\x77\x27\xea\x7f\x90\x32\xf2\x18\x96\x15\xc5\x9d\xd6\xd4\x79\x63\xc9\xa6\x42\xe8\x8b\x1f\x7e\x05\xc9\x57\x7a\x79\xd3\xd2\x5f\x17\xcd\x7e\x27\xd2\xdf\x5f\x57\xfa\xeb\xe2\x81\xdb\x48\xff\xc6\x22\x80\xf4\x03\x65\x63\x53\x4f\x03\x64\x30\xb2\xbf\x15\x0c\x2c\x1d\x2e\x37\x06\x74\x7f\xae\xe8\xc2\x04\xa3\x08\x66\x1d\xf6\xdd\x79\xce\xcc\x8d\xe1\x85\x9f\x4b\x9b\x4f\x65\xcd\xa7\x92\xe6\xdd\xde\xde\x2c\x3d\x1f\xc1\x70\x31\x81\x2a\xc1\x0e\x48\x04\x07\x39\xee\x24\x60\x40\x1a\x85\x4e\x7b\x63\x90\x8e\xd0\x69\x5f\xea\xd8\x81\x8f\xd3\x17\xe9\x15\x44\xc7\x41\x06\x3b\x9e\x9f\xe1\x00\xe1\xec\xef\x11\x9e\x75\xd8\x16\xed\x3d\x66\x76\x8d\xc0\x47\x90\xfa\xb1\x74\xdc\x37\x6c\xeb\x76\x3d\xc0\x34\xef\x74\x39\x84\x4b\x0f\xf0\x30\xa8\x37\x08\x4e\xa3\x4f\x2e\x7f\xe7\xee\xb8\x14\xdc\xb4\xed\x59\x3f\xa3\xee\x2e\xdd\xb3\xc0\x18\xef\x54\xc9\x11\xfd\x45\xe2\xa1\x17\xaf\x82\x5f\xe6\x27\x07\xd3\x9a\x78\xe8\x6a\x52\x5b\x6d\x8d\x39\xe0\x81\x0d\x26\x3a\x9e\x02\xe6\xcf\x34\x8a\x31\x44\xa4\x73\xaa\xc9\x54\x26\x69\x12\x06\x88\xfa\xd8\x51\x57\x8b\x5c\xd9\xa7\x84\xe1\xdd\x4c\xd3\xf8\xa5\x71\x7e\x17\x0c\xcc\x44\x3f\x53\x04\x21\x86\x9f\x70\x97\x55\x40\x09\x8c\x62\xc3\x95\x33\xc0\x16\x9c\x9e\x2a\x23\xa5\x28\xd9\x8c\xc8\x41\xf5\xc7\x1c\x48\xf5\x10\x94\xbc\x1e\xd5\xcc\xc7\xc2\x3b\x4a\x8b\xde\xd6\x56\xef\x4a\x0a\x42\xad\xa3\x2a\xd7\xe8\xf6\xc1\x93\xba\x8f\x61\x2d\xa7\x8e\xd5\xe3\xdb\x3a\x96\x2d\x82\x97\x2b\xa1\x76\xf5\xd4\xfb\x25\x06\x28\xce\xbf\x4a\x77\xe8\xe2\x2b\xd7\xe5\x4c\xaa\x0a\x7f\xcf\x0f\x12\xb9\x5a\x77\x52\x10\xa4\x44\x3c\xf0\x45\x7c\xc0\xc7\x3b\x87\xab\xae\x93\x17\x85\x01\x94\xcb\xf4\x49\x8a\xb0\xf3\x23\x8f\x7f\x30\xdd\xf2\xaf\x0b\xaf\xb1\xcf\x23\x10\x18\xbe\xa8\x8d\x35\x5a\x9d\x03\xec\xe6\xab\xc0\xf7\x4c\xbd\x2c\xec\x7c\x47\x6b\xf5\x42\x5d\xf0\x6c\x73\x30\x9e\xcd\xed\xb2\xc5\xa5\xbc\x71\xa0\x6d\x1b\xd6\xc2\xb6\x21\xb5\x19\x9c\x20\x88\x39\x43\xf7\xfd\x80\xd0\x9c\xfd\x32\xb8\xbe\x3e\x7c\xf4\x6b\x5b\x88\x8d\x7a\xb7\x48\x04\x2f\x21\x65\xb7\x31\xd9\x91\x0a\x41\x46\x4d\xc8\x74\x2b\x3d\x26\xdf\xca\xc2\x0c\x1f\x14\x70\x23\xf8\x7a\x5a\x0c\xd3\x5f\x4b\xd8\x4a\xe3\xba\x36\xe4\x4b\x5b\x8c\x5a\x7e\x5d\xd7\x8d\x42\x98\xe0\x08\x5f\xdf\x13\xf1\x3a\xfe\xf8\x3b\xfa\xf1\xc9\x99\x51\xbc\x4a\x42\xa5\x6f\x44\xc9\x25\x75\xd1\x7c\xfd\xea\xe4\xd7\x17\x1f\x5e\x9d\xbc\x79\x72\xfc\xec\xe4\xc3\xb3\x57\x4f\x7e\x7c\xf1\xec\x69\xfd\x46\x44\x36\x5a\xea\xce\xec\xbc\x7f\xef\x8a\x43\x86\xea\xe3\xac\x1d\x27\x5c\xe7\x86\x4a\x0c\xef\xc5\xe2\x37\x6c\xd3\x36\x7c\xf1\xfe\x3d\x76\x78\x00\xa0\x33\x22\x5f\x5d\xa1\x08\xc3\xf7\xef\x99\xfc\x2d\x5b\xe5\xd9\xcd\xa2\x10\x4e\x02\xd4\x9d\xa3\xf4\xd3\xf5\x0a\x25\x7c\x98\x53\x2d\xd8\xa1\x2f\x2d\x5f\x23\x18\x84\xfa\xc7\x49\x1a\xae\xf4\xe5\xb2\xc5\x96\xb6\x42\xb7\x5a\x9a\x4c\x4a\x5d\xbb\x43\xeb\xf3\x36\x77\x88\xb9\x3b\xc8\x67\xf6\x4e\xb4\x7f\x63\xdb\x2b\x57\x5f\x85\x4c\x2b\xc0\x9d\x62\x4f\xd5\x2c\x49\xf3\x38\xc2\xf8\x5e\x21\x46\x47\x9f\x7b\x3b\x6f\x7e\x0b\x1e\x36\x5b\x8f\xac\x57\x2c\x5a\xcb\xee\xfc\x96\xc5\x6c\xc8\x5a\x11\xbe\xd9\x64\xbe\xde\x94\xce\x55\x1e\xef\x2f\xbf\x0d\x92\x01\xec\x4e\x66\x01\xc2\x3b\x4c\x85\xbd\x1f\x82\xf7\xf7\x1f\xdf\xfd\x96\xbd\xfd\x5f\xb4\x12\x94\xd9\x3a\x63\x62\xe9\x8f\x8d\x32\x56\x46\xe1\x73\xb2\x70\x0a\x4f\x8d\x92\xef\x09\x75\x3b\x79\xd0\xd0\x55\x86\xd6\xd5\x0f\x42\xce\xb7\xdc\xc9\xc1\xeb\xf3\x51\xa3\xf8\x30\xc2\x6f\xc2\x87\x9f\xe0\x84\x3e\x5a\x7a\x1e\xe3\xe1\x7e\x0a\x33\x8c\xd2\xeb\x15\xdc\x87\x58\xe9\xcc\xa9\x50\xad\x00\x51\x4f\xbd\xd6\xc4\x01\x6a\xef\x9f\x2f\xee\xcd\x2a\xb8\xb3\xfb\x8f\xec\x10\xff\x91\x7c\x4d\x61\x54\xba\xe3\x4b\xc9\x62\xad\x08\x3c\x28\x4a\xab\x94\xc5\x9f\x49\x6d\x8d\xa2\x28\x89\x26\xc4\x13\xc5\xc5\xc4\x9f\xa4\x49\xf8\x98\xfd\x63\xf0\xb0\x1a\xb2\x37\x45\xa9\x5d\xa5\xe6\x65\xe1\x2d\xd4\x78\x3d\xd9\xbd\x17\x52\xfb\xf4\x0a\x5e\x1e\xff\x3a\xbd\x58\x45\x6a\x25\x55\x8e\x70\x78\xcc\x23\x3e\xc1\xa9\xfa\xa7\x1e\x0b\x2a\x02\x45\xcb\xdf\xa9\x52\xcc\xf2\xa0\x0f\x58\x1e\xdc\x60\x52\xff\x39\x37\xb2\xd4\x7d\x5f\x19\xed\x9c\x9b\x2e\x8b\x55\xdf\xc8\x3c\xdd\xcc\x0c\xa5\x79\x59\xfc\x4b\x59\x95\x3d\xa0\xcc\xe2\x34\xc1\x28\x48\x32\x7a\xef\xa0\xce\x83\xe5\xaa\x5e\xa1\x1f\xb8\x0b\xe7\xe8\x66\xc9\x1f\xd0\x91\x23\xbf\x97\x55\x7c\x2a\xca\x82\xc0\x04\x75\x6b\xc4\x7c\x28\x2f\x82\xc9\x2c\x4a\x84\x17\x23\xff\xe5\x67\x38\x9d\x77\x3c\xa0\x27\xa5\xf7\x27\x41\xbc\xbd\xcd\x66\x63\x86\x26\xe2\x91\xf6\x9e\xd7\x94\x67\x35\x52\x26\x74\x94\x60\x88\xe6\x48\x90\xba\x64\x68\x02\x6e\xd2\xe4\x9d\xa1\x87\x30\xab\x71\x42\x7d\x9d\x8e\x17\x19\x4e\x2f\x38\xdf\x4e\xde\x9f\x2e\xb8\x09\x21\x0e\xa2\x78\x88\x29\x03\x8c\xda\xd7\x9d\xc4\x03\x89\x98\x9a\x6f\x10\x45\x68\x83\xe1\xed\x2d\xf6\x79\xff\xf9\xd3\x14\x3d\x0b\x26\x33\xe5\xce\x27\xf1\x6e\x8c\x6b\x9f\xe8\xf2\xd3\x84\x6e\x9e\xe3\xed\xed\xf2\xb3\x0e\xfb\x17\x60\xb2\x10\x62\xf8\x09\x03\xec\xd3\x42\x29\x35\x5d\xee\x54\x0a\xa5\x47\x29\xf6\x96\x20\x4d\xe8\xe2\xa6\x35\x5b\xba\x7a\x01\x34\x92\x83\xcf\x1d\xc1\x40\xa0\xf8\x7e\xa1\xef\xfb\x8f\x51\xb7\x3f\xec\x79\x20\x1d\xf5\xbf\x4b\xff\x07\x7d\x97\x3e\x7c\xe8\x05\xa7\x69\xb7\x3f\xce\x3f\x3d\x4d\xc5\x6d\x55\x27\x19\x41\x21\x2e\xde\x29\x1e\x73\x31\x4b\x40\x40\xd6\xd4\xe5\x7a\x3b\x0e\xb0\x38\xce\x6a\x52\xc5\x05\xe4\x84\xbc\xba\xbd\x2d\x08\x5c\x80\xa1\x2e\x39\xec\x36\xad\xb3\xb6\x26\xa4\xcb\xf4\x12\x48\x8d\xcc\xe4\x9b\x2c\x07\x16\x8e\x47\x78\x09\x54\xfd\x49\x73\x97\x66\x71\x1e\x4e\xf1\x1b\x9a\x7b\x61\x50\x95\xcc\x59\xe7\x6b\x79\x17\x13\x17\xb2\x96\x5f\x54\xbb\x54\xcb\x36\x92\x45\x8a\x3a\x47\xe6\xbe\xde\xb6\xef\xb6\xb7\xb1\x3f\x67\x53\xe3\x29\x9b\x28\xe5\x27\x1d\xde\x87\x22\x8f\x0e\x5c\x81\x75\x8a\x8e\xed\x3d\xd9\x7a\x8f\xfe\x78\xf1\xfb\x02\xb7\x06\x62\xd6\x2f\xa2\x10\x4c\x42\x88\xea\x41\x2e\x9a\x5d\x7a\x89\x2b\x84\xb5\x36\xb9\x0d\x6d\x6f\x7c\x2f\x6b\xbe\xc1\x55\x6c\x39\xd1\xb4\xa3\xef\x1f\x6c\x8e\xf3\xad\x68\xab\x57\xda\x88\xf0\x64\x06\xb3\xc7\x7c\xc7\xe0\x85\x8a\xc7\x9d\x3c\x07\xa0\x26\xf7\x86\x7a\x2e\x49\x8a\x5f\xb2\x37\xdb\xdb\x1d\x38\xda\x6a\x94\x57\xfe\x91\x57\x5e\xc8\xf2\xc1\x06\xab\x0a\x7f\x66\x31\x1c\xdd\x87\xab\xf8\xcf\x8f\x26\x3f\xfd\x76\xfd\xbf\x7f\x6c\x02\x9a\xdc\x16\x7b\x99\xf7\x81\xe5\x16\xa5\xd6\x4e\xb4\xaf\x5f\x42\x97\x42\x8c\xa3\x24\xea\x92\x52\x4c\x77\xd0\xe2\xb0\x57\x0d\x2b\x57\x5b\x86\x1d\xef\x60\x43\x05\x44\x13\x33\x68\x45\x7d\xf6\xa6\xeb\xa2\x9a\xc2\x6c\x50\x9c\x75\x85\x6d\xd2\xca\x56\x98\x19\x1b\xbc\xd9\x6c\x7b\x9f\x89\x83\xb3\x6e\x12\x5c\xde\x8f\x3d\x6a\xf1\xf9\xec\xe7\x93\xbf\x7d\x3c\xac\xf0\xa8\x37\x19\x78\x93\xe0\x52\x73\x67\xcf\xf0\x75\x0c\xcb\x10\x44\xe2\xd2\xfc\xef\x51\xc8\x3c\x17\x0b\xde\x31\xdd\xae\x48\xd1\xbd\x22\x49\x24\x83\x5f\xe9\x43\xf7\x3b\x25\x6d\x0c\xa7\xb8\x94\xf4\x05\x9c\xe2\x52\xca\x19\x8c\xce\x67\xe5\xb4\xbf\xd0\xc7\xa5\xd4\x38\x9d\x97\x92\xbe\x4b\xe7\x9a\xa7\xcb\x41\x21\x36\x96\x07\x8d\xe3\xe0\x2c\x8e\x32\xec\x1a\xdc\xfb\xf3\xe6\xf2\x91\x37\x00\xab\x65\x4f\x92\xe8\x22\x20\x99\x70\x9a\x83\x20\xff\x4d\x89\xbe\x0c\x8c\xbb\xcc\x36\x3e\x00\xee\xf9\x82\x22\x82\x19\x17\xbb\x56\xac\x68\x15\xde\x2e\x65\xfa\x33\x73\x04\x83\x46\x85\x9c\xbb\x8c\xf0\x91\xd7\xdc\x64\x0a\xef\x34\xfa\x20\x85\x44\xf9\x10\xb8\x59\xbc\x38\x8f\xa6\xd7\x86\xf7\x1a\xf8\x45\x29\x59\x81\x73\xb9\xf0\x8f\xe6\xd2\x52\x17\x4a\xc1\x8a\xa5\x88\x0d\x2d\x42\x0e\xcc\x58\x2c\x85\xbc\x0a\x10\x2b\xb2\xe9\x0d\x19\x08\x6a\x59\xeb\x4a\x0e\x07\xb9\xc8\xba\x63\x33\x3f\x74\x23\xf6\xe7\x62\x90\x7a\x4f\xe4\x16\xa0\x28\xe8\x92\xa3\x29\x22\xcb\x48\x0d\xcb\x37\x70\x3f\xb8\x5f\x4c\x00\x80\xfb\x61\x1e\x24\xfc\xc3\x02\x12\xee\xfd\xa8\x61\x35\x9b\x49\x60\x88\x60\xe9\x57\x72\x24\xd5\x3b\x53\x35\x8f\x67\x69\x42\x0d\xbd\xc6\x16\xad\xed\x8b\x6b\x1f\x2e\x58\xe4\x35\x91\x71\xed\x04\x51\xc7\x02\xad\x2c\xc4\xc3\xad\xfe\xaa\x86\x33\xb2\x22\x9b\x59\xa1\xd7\xb3\x7b\xd0\x14\xff\x99\x04\x97\x79\xe6\x90\xe5\xd3\x71\xff\xc3\xf5\xd9\x4e\xd3\x91\x55\xf0\x44\xac\x36\x5d\xe7\x3a\xe5\x6f\xe2\xc8\xcf\xfd\xda\x64\xe6\x86\x73\x89\xb6\x41\x81\xad\x1e\x6b\xc9\xaf\xf3\x30\xc0\x95\xe6\x3f\x96\x0f\x5a\x24\x7e\x36\x99\x41\x22\x00\x1d\x37\x98\x62\x88\xde\xd2\x83\x8e\xd1\xc1\x1a\x8a\xfa\xc2\x8a\xca\x42\x5e\x53\x7a\x0d\xc0\x1e\x6b\x76\x0d\xb8\xbd\x2d\xdb\xc0\x75\xa7\x88\x1f\xc6\xc0\x8d\xa6\x5d\x0c\xa1\x9f\x4e\xa7\x19\xc4\xf4\x17\x50\xd5\x09\xf9\x8a\xfc\x00\xba\xf2\x20\xdf\xb1\x9f\x40\xd1\x17\xe4\xab\x77\xe9\x7c\x79\xd7\x4c\xe0\xad\xcf\x88\x64\x9a\xf1\xa8\x90\xfb\xa1\x82\x5e\x9d\xff\x31\xed\x3f\xbc\xbc\x5c\xc1\x99\xae\x8c\xba\x5d\x0f\x5b\x6d\xf5\xc7\x2c\x21\x71\x5b\x77\x84\xf1\xb8\x88\xf1\xdd\x60\xf3\x50\x97\x7e\xaa\x70\x85\x05\x5f\x50\x8d\x75\x67\x00\x5c\xae\xd4\x59\xf1\xbd\x8b\x5a\x94\x09\xc8\xbb\x16\x90\xdb\x72\x98\xce\x55\x04\xbe\x5f\xb6\x6c\x2f\xaf\xbe\xbe\xdf\x16\xd5\xd3\xd2\xa9\x7e\xed\xed\x43\x93\xeb\xf5\xaf\x5f\x54\x90\x0e\x25\x7b\xd2\x2e\x16\xfe\x04\x33\xdc\xa5\x3d\xc1\xa1\x71\x4a\x51\x24\xf4\xda\x93\xf4\x9a\xe1\xea\x53\x5f\xaf\x69\x4a\xf7\x83\xeb\x69\x4f\xa3\x90\xda\xf4\x95\xcd\x4c\x08\xae\x76\xc1\xb3\xc2\x1a\x50\xc0\x7f\x34\xd9\x8b\x20\x69\x8c\x9a\x46\xc9\xa1\xf8\xce\x94\x9c\x91\xd6\x24\x10\x86\x59\x17\x41\x4e\xaf\x05\x4d\x29\xe3\xe0\x3a\x5d\xe0\x6c\xe7\x1c\x51\x4a\x27\xf1\x9e\xf5\x62\x97\x1f\x2e\xab\xec\x57\x20\x01\x08\x04\x20\xdd\xd4\x92\x95\x55\x2f\x59\xfd\x17\xff\xda\xf9\xf4\xdb\x4f\x96\x90\x92\x09\x8c\x63\x85\xf7\xa6\xc2\xac\xc5\x83\x25\x92\xee\x55\x94\x84\xe9\x15\x27\x89\x8e\x3e\x57\xa1\xee\xf3\x04\x05\xc5\x56\x0f\xf3\xe2\xb3\x6b\xd7\x72\x98\x21\x2b\xc7\x2c\xc8\x8e\x83\x9c\xca\xab\x36\x90\x70\xc2\x13\xab\x0a\x68\x8d\xd9\x67\x12\x58\xb1\x51\x69\xe5\x9a\x78\xb2\x57\x05\x54\xbb\x02\xb9\x13\x06\xb6\x58\x39\x91\xc4\x8e\x8a\xb6\xae\x31\xce\xd2\x8c\x8a\x6e\x7f\x32\xa9\x89\x2c\x29\x9e\xe0\x14\x68\x52\xd5\xd0\x29\x01\x2a\x65\xa3\x9e\xe4\x4f\x36\xc8\xde\x2e\xfb\x88\x4d\xcb\x24\xc0\xd1\x25\xec\x66\x13\x94\x32\xd0\x1f\xd9\x61\x5c\xcf\x76\x81\xfb\x03\xbd\x98\x4c\x70\x97\xc9\xb2\xfb\x03\x4b\x4d\x0d\x37\xca\x4f\x9c\xce\xf3\x5f\xc7\x32\xee\x64\x12\x47\x14\xb9\xe6\x33\x3c\x96\x91\x18\x2e\xa6\x46\x44\xb6\xb5\x7c\xe0\xd9\x9f\xb0\x89\xc0\x9e\xb1\x5c\x98\x15\x48\x7b\x44\x2d\x38\xf6\xf9\xa4\x95\x5e\x8b\x30\x6f\xa8\x5b\x3d\xc4\xad\x59\x0a\x8f\x0c\x56\x98\x0f\x64\xed\xa8\x36\xc3\x28\xb9\xf4\x0f\x15\xcb\x1b\x37\xb9\xd0\x9f\x0a\x39\x5f\x0d\x26\x1c\x57\x24\xed\x14\xf4\x0d\xe6\x87\x05\xc3\x96\x4c\x8e\xfc\x38\x9c\x53\x3f\x88\xf0\xec\x2f\x30\x71\xc2\x86\x13\xa7\x8c\xe6\x6a\x6b\x2f\x70\x7f\x50\xf8\xfe\x44\x4e\x16\xc2\x3f\x13\xfb\x33\x67\x86\xad\xe7\x32\x98\x14\x25\x92\xf4\x82\x54\xf1\x1a\x42\x2b\x2b\xd1\x70\xd5\x63\xb1\x12\x7e\xdc\x4a\xcb\x8c\x11\x4e\xce\x1a\xda\xb4\x9e\x42\x68\x54\x72\xa4\x5e\x18\x8d\x90\xc4\x81\xcb\xb1\x8b\xa6\x29\xba\x08\xf0\x73\x0c\x2f\x4e\xc8\x5c\x02\x71\xa5\xf6\x98\x95\xb1\xe4\x52\x43\xd0\x13\x3f\x38\x6b\x1a\x65\x98\x5e\x74\x11\x9c\x5c\x4f\x62\x86\x0b\x2a\x5f\xfe\x18\x25\x61\x94\x9c\x93\x34\xaa\xd4\x83\x00\x63\x14\x9d\x2d\xb0\x9a\x80\xcf\xf7\x5a\xc3\x06\x4d\x37\xec\xf4\x40\x20\x6a\xe7\x75\xdc\x73\x88\x69\x1b\x5d\x0f\x30\xf3\x7b\xbf\xbf\xdf\x03\x28\xbd\xe2\x47\xdc\xfd\x1e\xb8\x08\x3e\xc9\x1f\x3d\xc0\xc5\x6f\x48\x67\x5f\xae\x41\xac\x64\x29\x29\xba\x0d\x32\xbd\xa9\xcb\x54\x41\x77\x4c\x9d\x4f\xe4\xf8\x94\xc2\xac\x69\x7d\x5d\x61\xa8\xc8\x9f\xcb\xca\xbb\xdc\xf8\x51\xc8\xb6\x38\xbc\xa3\xb2\x17\x50\x64\xa9\xaf\x34\x4f\xf0\x5e\x18\x8d\x46\x78\x7b\xbb\x93\x8c\x72\x4d\x3e\x01\xee\x77\x9f\xbb\x54\xca\x86\x4e\x9f\x54\x21\x59\x6e\xc4\xe6\x23\x1c\x89\x98\xf2\xa7\xa6\x3c\xbd\x61\xf6\x82\xa1\xb4\xee\x5c\x46\xf0\x8a\xa8\xf0\x1d\x6f\x39\xf6\x96\x40\x0c\x72\xe9\x6c\x92\x77\x15\x70\x3f\x88\xf0\xc7\x8b\xe0\xd3\x5b\x86\x00\x2f\x47\x5e\x3f\xbc\xb0\x51\x33\x74\x7b\xe6\x7a\x00\x97\x5e\xe4\xb9\x50\x5c\x2e\x28\x3a\xf9\x65\x80\x67\xfe\x45\xf0\xa9\xb3\x5b\x18\x42\x9f\x55\xe5\xf6\xf6\x74\x2c\x21\x2f\x3c\xef\x81\xf8\x22\x62\xe1\xf2\x86\x92\x94\x91\xff\xef\xe4\xe1\xe0\x88\x43\x9d\xdd\xf0\x2b\x20\x4c\x0e\x49\xd4\xb9\x87\x99\x9e\xd6\x73\x38\x52\xb4\x67\xee\x19\x17\x65\x6f\xe1\x79\x94\x61\x88\x48\xdf\x0a\xd5\xd7\x60\x4a\x53\xa6\xb4\xf1\x53\xb1\xa7\x78\xde\x12\x7c\xa0\x87\xa7\xb7\xf2\xec\x54\xaa\x74\x94\x71\x57\x25\xea\x6f\xa6\x3d\x89\x92\xf3\xdb\x5b\xd1\xa5\xd9\xcf\x71\x74\x71\x01\xd1\xa0\xe3\x3d\xa6\x8f\x10\x64\xae\x06\x1d\x8f\x2c\x0a\x49\xbe\x28\x50\x3b\xa5\xa7\xa3\x37\x46\x9f\xa1\x66\xb3\x62\x46\x1d\x9a\x0f\xb7\xce\x81\xc4\x60\x91\xbc\x08\xa2\xc4\xf9\xde\x09\xa3\x4b\x36\xf8\x1c\xe5\x20\x18\x61\x32\x6c\x3f\xa6\x0b\xba\x8a\x1d\x53\x8d\xea\x2d\x9c\xe0\x8e\x07\xd2\x72\x36\x7f\x99\xa6\x29\x86\xe8\x14\xa5\x31\x1c\xb9\x5c\xf3\x8b\x92\x69\xea\x8e\xff\xe2\x81\x6c\x14\xf8\x38\x9d\x3f\x4c\x7d\xa6\x99\x31\x11\x78\xd8\x07\xf1\x48\x5a\xd2\xa2\x24\x81\x88\xbd\xe8\x72\x17\x65\x32\x1c\xaa\x84\x4b\x71\xec\x81\xd8\xbc\x70\x14\xd6\xa3\x84\x97\xc7\x8c\x86\x55\xab\x10\x5d\xe7\x16\xd6\x75\xce\xbe\x20\xc9\x8e\xae\x59\x90\x16\xca\x82\x04\x29\x96\x9b\x62\x5a\x28\x2d\x48\x98\xbb\x72\x2e\xa8\xed\x96\x14\x9b\x09\xbf\x2b\xf6\xe8\x84\xea\xc3\x6f\x52\xee\xdb\xe8\x2d\x97\x80\xea\x88\x9a\x04\xf0\xa2\x73\x30\x4a\x92\xe2\xa7\x08\x65\xf8\x49\x32\x99\xa5\xa8\x03\x0d\x98\x9a\xb2\x41\x45\x57\xc3\xef\xfb\xdb\xdb\xd2\xb3\x26\x77\x26\xec\x8f\x1f\xab\x3f\x86\x37\x4b\x0b\x26\x61\x34\x65\x72\xfe\x9f\x18\x09\x7f\xd1\xff\xc4\xc8\xa7\x7b\x9e\xff\xf9\x39\x69\xfd\x88\x6c\x59\x1e\x10\xd8\x9c\xa2\xcb\xb6\xb7\xe1\x56\x69\x25\x11\x4a\x96\xe7\xdd\x14\x27\xaf\x34\xc4\xcd\x03\x94\xc1\xe7\x09\x05\x8c\xe4\x9e\x2f\x22\x6f\x80\x46\x4a\xbf\xa4\x19\xcc\xa8\x27\xa9\x4b\x96\xad\x20\x7f\x95\x31\x64\x4e\xb2\x67\xd0\x19\x02\xd2\x51\x60\x9d\x17\xd9\x28\xa5\x62\x1e\x68\x62\x0e\xa2\xb6\xd3\x25\x1e\x45\xd6\x32\x16\xa3\x98\x94\xf1\x20\xfb\x7e\xf1\x98\x94\x13\x64\xd9\x8b\x28\xa3\x8e\xfc\x1d\x37\x38\x4b\x2f\xa1\xeb\x0d\xd5\x17\xcc\xa7\x50\xbe\x03\x85\x1e\xef\x03\x31\x12\x23\xb4\x84\x71\x06\x1d\x6b\x6f\xd2\xc1\x29\x9a\xb2\xe3\xc6\x66\x2c\xe6\x99\x9b\xdd\x4f\x9f\xa7\xc3\xc9\xbb\x37\xd1\xeb\x8b\xd0\xe2\x61\x91\xcc\x17\xf8\x79\xa8\xc0\x16\xd6\x5b\x8d\xf6\xc0\x5e\xd1\x7e\xcb\xf5\x4b\xc3\x61\x87\xa2\x87\xf0\x0e\x72\x66\x41\xd6\xb5\x9c\x7e\xee\x85\x31\x65\xaf\xd9\xa9\x63\x6d\x9b\x48\x53\xa3\x07\x29\x88\xd9\x1d\x6c\x3e\x14\x31\xc4\xa5\xa3\x9e\x5b\x90\xcb\xae\xf0\x29\xe1\xb7\x07\xc0\xe5\x04\x47\xf2\x85\xf0\xe0\x70\x3f\xd4\x84\x68\xb7\xf4\xda\x28\x1d\x88\x51\xf1\xb2\x64\x4d\xeb\xc0\xda\x16\x82\x3d\x05\xb0\x4d\x21\x28\x69\xce\x07\xb2\xe2\x31\xdf\xee\x20\x91\x3b\x05\x18\x8e\xef\x06\x16\x15\x9e\xbd\x05\x62\xe1\x64\x96\x5e\x39\x5c\x0e\x84\x84\x99\x91\xdd\xeb\xee\xee\x6d\x03\x69\x75\x16\x28\x76\x4b\x1a\xb3\x0a\xba\xbb\xb6\x2e\x31\xc3\x4c\x94\xee\x9f\x92\x54\xca\x7c\x94\x75\xe1\xc5\x1c\x5f\xe7\xb8\x7b\x8c\xa9\x5d\xb5\x50\x68\xd7\x6b\xf2\x82\x4b\x76\xa2\x76\xeb\x96\x5f\xb1\xa9\x17\x4e\x8d\x07\xa2\x1d\x71\x2d\x50\x25\xaf\x96\xfd\xa0\x0a\x63\xa3\xd0\x81\xf5\xdc\x1d\x5f\x42\xf4\x7e\x89\x42\xd8\x44\xf4\x5a\x51\x8e\x34\x98\xec\xb2\xc8\x66\x2c\x3c\xd2\x40\x65\x5b\x0a\x6c\x15\x69\xb4\x44\x54\x71\x29\x34\xa5\xaf\xaa\x33\x74\x0d\xc0\xae\xcd\x82\xd5\xc4\x65\x66\x23\xfe\xad\x46\x55\x68\x83\x4e\xae\x75\xf6\x25\xe3\xb5\xe4\xe6\xdd\x67\xe4\xa9\xb4\x7c\x24\x69\x79\x16\x01\x34\x1a\x9a\x7e\x24\xea\xde\x49\x00\x8d\x66\x59\xb6\xf7\xe8\x3d\xef\xc6\x51\x76\x5f\x22\x3e\x5f\x1c\xfe\x1a\x1d\x1c\xf4\x2b\x41\xb2\x9b\x44\x9f\x18\xe1\x4a\xdf\x05\xe7\xad\xf0\xa1\xf3\xec\xf6\xc1\xa0\x01\x88\x74\x7f\x8f\xac\x00\xe5\x00\x50\xd1\xc7\x2c\xec\x53\xb0\x44\x69\xb4\xd2\xe3\x3a\x4c\xad\x1a\xf0\xea\xd0\x82\xcb\xa4\x94\xdc\x1e\xaf\x59\x2e\x99\x12\x2b\x95\xae\x97\x63\xba\xca\xd5\xad\x8f\xa4\xb3\xd7\x31\xca\xeb\x95\x34\xe9\xf5\x36\x57\x60\x31\xd2\x4d\x9c\x5d\xed\x18\x53\xd5\x1e\x8a\x4d\x80\x47\xeb\x91\xa5\xdb\x82\xa7\xad\xbe\xc2\xaa\x93\xfc\x2b\x02\xc4\x88\xd9\x1e\x76\x03\xba\xbe\xdd\x8f\x55\x07\xfe\xed\xe5\x51\xf4\xaf\x93\xbf\x7d\x69\x74\x04\x73\x6f\x28\xc3\x53\xb2\x5d\x97\xac\x4f\x3d\xa3\xf5\xa9\xa7\x5a\x9f\x7a\xe3\x61\x02\xaf\x9c\xbf\xc3\xe0\xe3\xcb\x60\xce\x2d\x6f\x37\xe7\x2a\xad\x0d\xce\x51\x5c\x21\x33\x26\x51\xa3\xa7\xe4\xa8\x40\xa7\xc9\x78\x09\xb2\xc2\x27\x00\x09\xa3\xa8\xfc\x88\xa7\x67\x55\x1a\x8d\x46\xc1\xf6\x76\x27\x18\xdd\x2c\x01\x64\xa6\x13\x10\x78\x1e\x08\x4e\x93\xf1\x08\xd1\x7f\x96\xcb\x65\x87\x6c\xf1\x3b\x37\x37\x9d\xd3\x27\xdd\x7f\x05\xdd\xcf\x7e\xaf\x7b\xf4\xa1\x3b\x7e\xe8\x2d\x97\x3b\xe7\x35\x10\xb9\x0d\x44\x34\x70\x8d\x77\x4f\xcc\x9f\xdd\x45\x44\x85\x75\x99\xed\xcb\x1d\x03\x04\xe3\xe2\x55\x83\xde\x51\xb9\xf9\x30\xc9\x8d\x6e\xd0\x2b\xf4\x0d\x35\xd0\x70\x06\x1d\xcc\xc9\x73\x48\xc5\x50\x42\x84\xa4\x60\xe3\x74\x92\x34\x9d\xc3\x04\x22\x27\x49\x11\x9c\x42\x84\x20\x72\xcb\xa6\x77\x5e\x47\xe0\x7e\x38\x8b\x83\xe4\xa3\xeb\x49\x3a\x94\x3c\x11\xd3\x00\x3c\x70\x19\xa0\x6c\x63\xed\x28\xe4\x5f\xbe\x13\xa0\x3d\xa9\x64\xe3\x0a\xb1\xa6\x2e\x9e\x1e\x20\x09\xee\xa2\x36\x79\x39\x82\xcd\x25\x18\xa9\xd5\x20\xbd\xe0\x16\x44\x72\x8b\x8a\x64\x1e\x09\xf9\xb8\x83\x47\x58\x42\x0e\xa3\xa2\x91\x8d\x32\xd5\xf0\xab\xb3\x64\x92\x86\xf0\xd7\xb7\xcf\xa5\xac\x29\xf7\x7a\x01\xe5\x57\x71\x5d\x8f\xb3\xde\x24\xb9\xa3\x1c\xbd\xba\x29\xf4\xa1\x37\xa4\xcf\xdb\x82\x15\x73\xc3\xcb\x7d\x02\x93\xbc\x84\x2f\xff\x16\xec\x5c\xd8\x10\x3a\x18\x28\x71\x95\xc6\x96\x1f\xd9\x25\x1e\xf1\x2e\xf5\xac\xa4\xb0\xc4\x36\xd7\xd1\xdc\x95\x40\x4b\xa4\xc5\x37\x0d\x4c\x27\x70\x57\xeb\xc3\xa2\x0d\x4b\xff\xba\xf9\x61\xdc\x48\x47\xaf\x9e\xb9\x77\xc9\x4a\x33\xd5\xbf\x65\xcd\x1e\xdb\xbc\x5a\xf9\xf1\x5a\x45\x69\x36\x9c\xaf\x9b\xb6\xc7\x54\x81\x3c\x08\xc4\xe0\xdc\x2a\xf4\xd8\x59\x90\xcd\x72\x2c\x63\x61\x52\xb3\xc2\x2c\x17\x8c\x6e\x45\x88\xe4\xf5\x9c\x64\xcb\xe2\xbf\xb6\x26\x53\x77\x34\x54\xc2\x2f\x84\xff\xc0\x56\xdf\x72\x60\x4c\x93\xb3\x78\x81\xee\xf4\x10\xc9\x2f\x5d\x89\x2a\x47\x76\x8c\x2c\x4f\x23\x1f\x75\x36\x05\x2d\x94\x97\x22\x2e\x4b\xbc\x4a\xe0\x94\x86\xd9\xf2\x6e\x64\x37\xb9\x41\x18\x1e\x13\x81\x79\xbd\xc0\x59\x14\xc2\x17\xbc\xc4\x8e\x37\xb4\x57\xc1\xf2\x4d\x25\x04\x59\x39\x9f\x52\x1b\x83\x30\xcc\x83\x4c\xc2\x74\x42\x2b\xdd\xf1\x84\x44\xab\x50\x64\xde\x0d\x8b\xee\x88\x32\x5e\x87\x0e\xf4\xe9\x64\x92\x57\x74\xde\xf6\xb6\x25\x89\x81\xdf\x4e\xfd\xaa\x03\x7d\xba\x2e\xe4\x77\x7c\xc5\x27\xa3\xad\x3e\x80\xf9\xb1\x5f\x78\x50\xf0\x54\x64\x0f\x81\xa6\xf6\xb2\x60\x93\x0a\x13\x44\xb7\x3f\x1a\x8d\x3a\xf2\xde\x19\xc1\x98\x6e\x68\x3e\x9d\x67\xaf\xa7\x1d\x57\xa8\x29\x2e\x6d\x9c\x19\xfd\xa2\x50\xd3\xf2\x33\x40\x76\x5d\xb2\xd1\xe0\x20\x8a\x95\x80\x11\x32\x73\x3a\x05\x7f\x11\xd6\x42\xcd\x5f\x04\x8e\x8d\x74\x87\xe5\x72\x38\x4a\x8f\x55\xbe\x80\x6e\x3c\xd1\xfc\x50\x78\x47\xae\x10\x9d\x92\x7e\x84\x89\xc5\x98\x72\x1f\x6e\xf3\xd0\x9b\x78\xef\xf9\xf3\x7f\x98\xa1\x30\x5b\xdd\xe1\xd9\x9c\xb3\xcb\x56\x97\xf6\x7c\x5c\xc2\xe4\x50\xf2\x80\x13\xd8\xf0\xd2\xb6\x21\xbb\x5b\xe0\xc2\x23\xe6\xfd\xc3\xf1\xd0\x69\x3e\x2c\x7c\x25\x45\xb8\x7b\x76\x4d\xc6\x83\xa1\xa7\xa7\xe8\xf9\xd3\x61\x90\x4d\x5c\x8b\xf1\xdc\x66\xdd\x28\xbb\x76\x4e\x1a\xf9\xa1\xcb\x56\x55\xd1\xbf\x57\xb9\x9c\xb3\xeb\x05\x99\x42\xb2\xdf\xb7\xe2\xae\x35\x9a\x27\x6a\x2a\x65\xbf\xf2\xb4\x5d\x68\xcd\x8a\x96\x9a\xbc\xcb\xab\xcc\xd9\xc6\x4f\x4f\x26\xe9\xdc\xca\xd1\x6c\xfd\xea\x29\xcc\x26\x28\x12\x5d\x65\x30\x29\x35\xb2\x44\xd5\x74\x8c\xe5\x5a\xb0\xfe\x9a\xaf\xf2\x52\xc5\x1c\x74\x6d\x26\xd9\xa7\xf2\x5f\x64\xd9\x57\x3b\xbb\x70\xb9\x24\x4e\x90\x45\x92\x0b\x71\xfa\x1d\xab\xc1\xfa\xd2\x04\x76\x08\x5c\x8c\x16\x44\xdd\x84\x8a\x27\xb0\x56\x0c\x38\x14\x6a\xaa\x1e\xcf\xd1\xfc\xe6\xa2\x5d\x3f\xf5\x0d\x11\xcd\x2f\xd2\x49\x40\x95\x59\x37\xa6\x7f\x01\xf7\x3c\x4e\xcf\x28\x40\xbc\x9d\x4b\x68\x53\x15\x2a\x91\xc7\xe7\x11\xf1\x9a\x2c\xb6\xef\x9a\x1a\x59\xad\x23\xb8\xbe\x13\x18\xa5\xe2\x36\x77\x2f\x88\x16\x58\xa5\x18\x61\xf2\x0e\x03\xd1\xfb\xc4\x91\xd5\xee\xf0\x84\x9c\x3f\xa0\x1b\xac\x5a\x09\x17\x70\x10\xb7\xa1\x1b\x85\x24\xa3\x34\x19\xde\xbc\x7d\x76\xf2\xee\xc9\xdb\x77\x43\xe9\xf8\xea\x32\x22\x01\x17\x4c\xd2\x24\x1c\xba\x51\x76\xc2\x7e\x2f\x81\x4c\x31\x47\xe9\x65\x44\xd6\xe0\xe5\x78\xc9\xe8\xb5\xb3\xe1\x0d\xc9\x72\x78\xb3\x04\xec\x73\xf2\x97\x48\x36\xbc\x21\x05\x9d\xfc\x7a\x7c\xfc\xec\xe4\x64\xe8\xfe\x7e\x85\xdd\xe5\x12\xfc\x7e\x85\x0b\x2f\x68\x5d\xc9\x2b\xfa\xc7\xf0\x86\x11\x25\xb7\xe8\x64\x83\x8a\xd3\x72\x64\x4a\x5a\x50\x91\xf1\x95\xe9\x34\x7c\x98\x3e\xc2\xeb\x8c\x33\xe4\xf2\x27\xe7\x10\xbf\xbe\x4a\xc4\xc0\x31\x3a\xd9\x4c\xd8\x31\xab\xd2\x90\x6c\x30\xe5\xeb\x45\x3e\xe3\x18\xea\x68\xea\xbd\xce\x96\xa5\x67\x21\x26\x74\x8a\x68\x1d\x7d\x98\x2c\x2e\x18\xe1\xed\xd2\xa3\x96\x9e\xf9\x22\x9b\x49\xc4\x40\x94\x9b\xe9\x72\x3e\x5b\x24\x6e\xf0\x84\x27\xa2\x13\x25\x0e\x7c\x6c\x13\x47\x2c\x64\x30\x01\x79\x61\xc3\xad\x1e\x91\x99\x69\x74\xbe\x90\xbf\xaf\x50\xc4\x83\xff\x7b\x4b\x6f\x08\x4f\xf1\x78\x94\x00\xb8\x21\x76\xdb\xa0\x5a\xb7\xec\x65\xff\xea\x5d\x4e\x7e\xfe\xc9\xac\x5b\x9e\xb0\x99\xe8\x52\x0c\x3f\x57\x38\x36\xb9\x0a\xa6\xa9\xc4\x41\x64\x74\x60\x25\xa5\x73\x1f\xa8\x30\xaa\x72\x3b\xce\xd0\x84\x2a\x7c\x6c\xaa\xb9\x82\xef\x47\x22\xab\x5a\x59\xab\x04\xef\xa8\x9b\x46\xe1\x24\x27\xac\x92\x93\x0d\x88\x99\x59\x1f\xab\x42\xca\x79\xa4\xfa\x63\xe8\x21\x37\x64\x66\x53\x8d\x41\x4e\x6e\xbb\x3d\x49\x26\xb1\x32\x4c\x19\x7d\xb6\x76\xca\x9b\xba\x20\xbd\x18\x03\x37\x57\xe4\x79\x23\x77\x84\xda\x4b\x5a\x3e\x6e\x4c\x91\xfb\x48\xb9\x10\xe3\x6d\xe4\x38\x71\x2e\xa7\xb7\x42\xd0\x88\x2b\x66\xd0\xac\x68\x08\xb2\x58\x28\xf5\xb1\x54\x59\x9c\xd2\x04\x22\x94\xe6\xc4\x5e\x9a\x5f\xc9\x23\xd6\x67\x6c\x81\xd9\xc9\x60\x3c\x95\x0d\x13\x74\xaf\xed\x03\x95\xaa\xe3\xee\x79\x6d\x0c\x34\x48\x8d\x14\xcb\x06\xbd\x28\x05\xf0\xcb\xf7\x23\x99\x09\x3b\xa2\xfc\xea\xae\xfc\x63\x01\x17\xd0\xad\x62\x5b\x3b\x04\xee\xc5\x22\x3f\x0a\x2a\xcd\xca\x55\xcc\xd3\x9c\x77\x8d\x36\xc4\xad\x82\x3f\x26\x7f\xed\xb1\x9a\xf2\x3d\xac\x18\x46\xfc\xf5\x07\x8f\x6c\xb6\xcd\xc6\xed\xf7\x2b\xdc\x76\xd8\xb4\x6e\x04\xee\x93\x05\x9e\xfd\xfa\xf6\x85\x04\xf1\x69\x3d\x24\xac\xb2\xff\xc6\xa3\xc1\x34\x9c\xaf\x34\x8f\x82\x05\x9e\xa5\x28\xfa\x0c\xe5\x44\x52\xc6\x4e\x70\x75\xe4\x2b\x31\x19\x0c\xe0\x8a\x8f\x02\xd2\x6b\xc7\x69\x58\x9f\xe8\x44\x80\x7f\xdf\x9f\x85\xae\xfc\xf2\x91\xd5\xc3\x0c\x0c\x00\x91\xa3\xfd\x35\x83\x25\x4b\x6a\xa9\x3c\x92\xa4\x95\x47\x92\xc0\x7a\x2f\xb0\x51\x97\x30\xaa\x8d\x8c\xe4\x31\x47\x31\xc3\x8a\xfd\x7e\x58\x46\xd8\xe0\xdb\xe9\x88\xc3\xb5\x12\x7d\xc5\x18\x95\x02\x7d\x22\xbb\x3e\x4e\xff\x7a\xf2\xfa\xd5\xa8\x8c\x48\xa4\xa6\x15\x90\xd9\x78\xd4\xff\x0e\xff\x4f\xd1\x97\xe0\x3b\xfc\xf0\xa1\xb8\xd0\x27\xc3\xb5\xa5\x38\x14\x60\xd5\xa1\x00\xd3\x70\x16\xfc\x5f\x83\xc7\x09\x57\xc5\x3b\x81\x07\xb6\x7a\x9e\x01\x2b\x9c\x68\xd3\x54\x87\x0d\x4e\xf1\xd8\x5b\x7a\xde\xb0\x46\xab\xce\x8c\x7a\x70\x04\xb3\x0e\x04\x75\x9f\x76\x02\xcf\x1b\x2a\x75\xb2\x54\xc8\xae\x68\xd7\x69\xfc\x01\xc0\xcc\x92\x2e\x2e\x85\x97\x9d\x1b\xc5\xa2\x48\x47\x2a\xff\x0d\xd8\xe0\x8a\x17\xe2\x17\x78\x25\x88\xca\xd8\x73\xf9\x73\x09\x6e\xc8\xaa\xfe\x12\xe2\x59\x1a\x16\xe0\x7a\xf3\x17\x8f\x0b\xbf\x79\xc2\xa5\xb7\x2c\x18\xb5\xcb\x20\xbc\x69\x83\x13\xde\x45\x7a\x8e\x82\xf9\xec\xba\x4b\xff\xb9\x1f\xb7\xcc\x67\x03\xf8\xfa\xea\xf7\x59\xda\x12\xe8\x33\xbb\x3c\xd7\xcc\x69\x2c\xee\x96\x81\x00\x31\x5a\x50\x8a\xc1\x20\x1d\xb9\x67\x3c\xa0\xce\x98\xc0\x18\x4e\x72\x6e\x76\xba\x93\x9d\xe8\x0a\xd3\x1b\x0a\x92\x8c\xd1\xee\x32\x08\x22\xfa\x80\x36\x90\xab\xee\xd4\x7f\x59\x00\x23\xb1\x52\xc1\x40\x6a\xec\xc0\x69\x94\xcc\x2b\x63\x15\x69\x46\xaa\xf3\x66\xb6\xac\x49\x84\x26\x96\x88\x9c\xb3\x60\xf2\xf1\x1c\xa5\x8b\x44\x72\x60\x21\xd9\x5f\xd4\x1c\xce\x3f\x75\x7b\x82\x4c\xc3\xe6\x6e\xde\xa4\xb4\xe0\xd3\xff\xcf\xde\xdf\x77\xb7\x8d\x23\x89\xe2\xf0\xff\xfe\x14\x36\x9f\x7b\xb5\x44\x37\x44\xdb\xe9\xd9\xd9\xbd\xea\x61\x7b\xd2\x49\x7a\x27\xcf\xa4\xd3\xd9\x24\x3d\x7b\xf7\x68\x75\xfb\xc0\x24\x6c\x71\x4d\x01\x1a\x00\xb2\xe3\xb1\xb4\x9f\xfd\x77\xf0\xc6\x57\x50\x24\x65\x39\x91\xd2\x9a\xb3\xdb\xb1\xc8\x02\x08\x14\x0a\x85\xaa\x42\xbd\x24\xbc\xe5\x3b\xe7\x9f\xe9\x3b\xcf\x3e\xd3\x77\xbe\xdb\xc6\x77\x2e\x29\x33\xe5\x90\xd7\x7c\xe9\x0f\xeb\xbf\xd4\xec\x62\xde\x48\xf7\x69\x42\x70\x25\x64\xc5\xe5\xa2\x19\x27\x5c\x20\x12\xe1\x6e\x0e\x9a\xd6\x1d\x22\x21\xb8\xb4\x99\x6b\x5b\x8a\x51\x61\xf7\x93\x36\xbd\xea\x07\x4a\x1c\x01\x79\x56\x91\xfb\x67\x19\x3a\x34\xd8\x7d\xb6\xb4\xf2\xb5\x12\x04\x89\x14\xbd\xca\x50\x71\x0d\xc8\x4e\xa3\x0a\x68\x1f\x57\xe1\x39\xbe\x9e\x69\x7f\xe0\x22\xb8\x7d\xea\x5c\x8b\x6e\x4e\xa6\x9b\xad\x15\xba\xc4\x69\x7b\x7c\xd1\x1a\x22\x9b\xd3\x84\xe8\x9c\xc1\x67\x8a\xc6\xbc\x7f\x5e\x17\x5d\xd2\xc6\x32\x8d\x5f\x49\x0b\xb3\x3c\xd3\x8c\xf0\x0f\x36\x45\x29\x37\x9c\x66\x0d\xeb\x5b\x4b\x47\x67\xd0\xfb\xf4\xcc\x83\xde\xbf\x9c\xad\x1f\x7b\xa1\x03\x81\x3f\x95\xcb\xd8\x7e\x92\xed\xff\xd9\x22\xe2\x3e\x4b\x26\x7b\x06\xbd\x58\xfe\x0a\xbe\x7b\xa6\xfd\xbd\x0b\x37\x2a\x3a\x6e\x7a\x48\x16\xf2\xd4\xcb\x36\xc6\x2c\x49\xd3\x44\x97\xe0\xb6\x13\x53\x9a\xc8\x0c\x7d\x4a\x66\x8b\xd9\x4f\x4c\xcb\x8d\x2f\x93\xeb\x44\xe8\xaa\xcd\x93\x49\xe9\x62\x63\xe6\x08\x15\x5c\x4f\x23\x4f\xb9\x30\xe7\x5f\xeb\xc2\x9c\xef\xf9\xc2\x3c\xfb\x5a\x17\xe6\xd9\x9e\x2f\xcc\x77\x5f\xeb\xc2\x7c\xf7\x19\x16\xa6\x3d\xd6\x62\x7b\x01\x6b\x4e\x2d\xc9\xe5\xb7\x9f\x7b\x36\x9f\xff\xf1\xec\x1b\xbc\x82\x2c\x2c\x5f\x79\xd9\x2b\xa0\x1f\xce\x2e\xb2\xb4\x0c\xe2\x1b\x0c\x4e\xcf\xcf\xce\x46\x67\xab\x8d\xfd\xdf\x55\xde\x93\xef\xbe\xfb\x23\xcc\xc7\x3a\x52\x19\x91\x46\xc3\xff\x63\xff\xb7\xb1\x3d\x43\x09\x05\xe1\x98\xf8\xe7\x00\x12\x3f\x78\xf6\xcf\xea\x1f\xfd\xdf\x7f\x51\xff\x9c\x83\x89\x86\xd5\xb4\x2d\x61\x87\x06\x6e\x18\x98\x7f\x34\xe4\xf0\x1c\x4c\x56\xb0\x48\x2f\xb5\x64\x3f\xb9\xc0\xa8\x72\xf2\x74\xc9\xe9\x23\xc1\xac\xeb\xf7\x98\xf9\xcf\xfe\x19\x62\x00\x99\xff\xcf\x67\xfa\xdf\x7f\x31\xbf\xcf\xcf\xe4\x83\x89\x52\x8b\xed\x47\x6a\x9f\x2f\xa8\x73\x8e\x2f\xab\xef\xd5\x33\xfa\x14\x1a\xe5\xde\xa9\xea\x35\x2c\xcc\x07\x2c\x97\xe3\xc9\x11\x71\x9b\x29\x54\x1a\x65\x05\xf8\x43\xde\x1c\x9b\xb9\x15\x52\x44\xdb\x67\x30\x6f\xa0\x5c\xcb\xf5\x3d\x68\xde\x94\xe4\x39\x89\x54\x70\xc7\x0f\xdf\xfd\xf1\xcc\xda\x7b\xbe\xfb\xe3\xd9\x29\x3b\x22\x21\xa9\xdf\x87\x16\xc9\xf4\x2c\x0c\xc5\x72\x29\xc2\x90\x0d\xcf\x97\x4b\x95\x78\x86\x21\x12\xd3\x99\x0f\xfe\xa4\xfc\xd7\x1b\xbe\x97\xc7\x2a\xcc\xd0\xdc\x77\x56\x75\x7d\xd0\xe2\xfa\xe8\xbb\x3f\x9e\x7d\x43\x4e\x19\xbc\x7f\x36\xca\xe7\x73\x5a\x47\xc0\x37\xc3\xf3\x3f\x9e\x41\x29\xa9\x8f\x44\x20\xff\xc9\x56\xb0\xd0\x0e\x1a\xf1\x7a\x24\x02\xf3\xd7\x6a\xa5\x0d\x38\xbd\x5d\xef\x55\x00\xdc\x6e\x98\x43\xae\x53\xf2\xf2\xc3\xe2\x79\xef\xca\xc2\x59\x1a\xcc\x72\x38\x9f\xf7\x67\xed\x6a\xa0\x32\x79\xfc\x99\x92\xbf\x24\xb1\x32\x76\x27\xfc\xc3\x54\x95\x55\xf0\xfe\x1c\x2f\x18\x32\x37\xb6\x7f\x56\x7e\x9f\x2a\x97\x20\x9d\xcf\x31\x7b\x41\x89\x40\x09\x51\x76\xed\x3f\x73\xd9\xd4\x5e\xc2\x66\xbd\x4e\xb2\xfa\xd8\x74\x36\x4f\xb1\xc8\xf2\x5e\xda\x2f\x98\x9f\xd9\x57\x26\x8e\x22\x23\x06\x72\x02\x3d\x42\x09\xae\x5f\x78\xea\x61\x29\xae\x4e\x6f\x95\xf2\x5b\x2e\x9e\x20\x19\xda\xf0\x36\xc1\x77\xf5\xa6\x73\x93\x2f\x48\xb5\x16\x2a\xe3\x66\x97\x3b\xdf\xd6\x82\x65\xdb\x3a\x6c\x0a\xa4\xf7\x25\x43\xf7\x28\x4b\x92\x61\x72\x25\xa7\x38\x54\xf1\x32\x53\x9a\xaa\xfb\x8c\xa2\x0b\x88\x82\xea\xd4\xec\xc9\x7c\x60\x33\x43\x7b\xaf\xe9\x95\xb2\x02\xb8\xdd\x76\x1b\xc0\x1f\x3f\x91\xc6\x06\x76\x2b\xc3\x87\xb2\xe7\xc7\xb5\xeb\xca\xe0\x38\xbf\x61\x50\xb1\x45\xce\xf9\xaa\xc2\x26\x29\x66\xfc\x54\x1e\xf0\x49\x64\xb6\xb5\xdb\x8b\x47\x27\xc1\x66\x74\x21\x12\x72\x7d\x9a\x17\x0d\xd5\xa5\x7e\xd6\x79\xef\x38\xaf\x1f\x92\x2b\x5f\x55\xe4\x0c\x12\xae\x2b\x73\x62\x90\x05\x18\xfa\x18\xac\x7c\x0c\x96\xcb\x4a\x03\x6f\x41\xf4\x34\x62\xef\xc4\x26\xcd\xd2\x5e\x3c\x83\x81\xfe\x37\x48\x04\x66\x48\x50\x76\x9c\x58\x97\x9d\x42\xc7\xfa\x83\x57\x8c\xce\x1c\x5f\x90\xa3\x4e\xae\xfc\x13\x6c\xa0\x1b\x52\x74\xe5\x63\xb4\x81\x66\x99\x53\x52\x9e\x7a\x53\xd0\x0f\xaa\x61\x10\xa1\x34\xf5\x31\x08\x78\x9a\x44\xd8\xff\x57\x38\x3c\x07\x47\x9e\x06\xf7\xc2\x30\x24\x83\x81\x2a\x02\xcd\x05\x5b\x44\x82\x32\x95\x85\xb1\xf4\x44\x57\x6f\x56\x63\xf9\x19\xcd\x55\x9b\xe5\xd2\xfb\xa0\x2f\x83\x88\x73\x62\x0a\xf8\xb9\x15\xd3\x4c\x93\xd3\xff\xe7\x5f\x8c\x7e\x4d\x96\xaf\x01\x11\xfe\xc5\xe8\x5f\x97\xe7\x7f\x5c\x7e\xf7\x0c\xf8\x17\xa3\x17\x29\x9a\xcd\x71\x0c\x2e\x54\x27\xff\xeb\x34\x10\x98\x0b\x9f\x80\xf2\x4c\x2b\xd8\x92\xe2\x21\xa3\x77\xc7\x04\xdf\x1d\x7f\xbc\x9f\xe3\x57\x8c\x51\xe6\x7b\xaf\x89\x4a\xf0\x77\x8c\x84\x3c\xa4\xc4\xb1\xa0\xc7\x7c\xce\x30\x8a\x8f\x09\x25\x43\xb5\x36\x97\x29\x3e\x4e\x88\x3e\x91\x83\xff\x22\xaf\xc9\xb1\xb2\x4f\x4a\xd0\x4b\x7c\x6c\x41\xa0\x6a\x80\xe4\x88\x8e\xa9\x42\x17\x3f\x9e\x2d\xb8\x38\x9e\xa2\x5b\x7c\x8c\x8e\xc7\x95\xe5\x9e\xf8\xe0\x78\xa6\x6e\x40\x02\x0f\xac\x7c\x50\xf1\xaf\x02\x0f\xbe\x64\xe2\x5a\x60\xf9\x01\x9b\x3b\x2e\xa0\x72\xcc\x65\xbf\x8e\xb2\x22\xb2\xe1\x19\x64\x85\x9a\xb1\x02\x7c\x4f\xfe\x24\xbe\x27\xdf\x7e\x0b\xd8\x98\x4c\x42\x3c\x26\xb6\x3a\xec\x31\xdb\xb2\x47\xd5\x8b\x6c\x53\x66\x5c\x5a\x6e\x39\xcc\x1a\x22\x93\xf4\x4b\x95\x17\x95\xb2\xe6\x0a\x94\x94\x61\x0f\xc0\x2b\x8c\xe3\x4b\x14\xdd\x34\x80\xd9\xd7\x1e\x28\x26\x4d\xcc\x2e\xaf\x6b\xf9\xef\x58\x21\xaa\xc6\xb6\x55\xd5\xf8\x17\x02\xfb\xa5\x3a\x01\x81\x1a\x41\x10\xa5\x18\x31\xdf\x86\x67\xea\x2c\x78\xfa\xca\x52\x77\x48\x43\xfd\xeb\xa8\x58\x04\x93\x05\xda\x7d\x49\x83\xf0\x82\x4c\x49\xf5\xe5\xb9\x76\x6e\x02\xcb\xa5\x85\x54\x97\x68\x47\xbc\xd0\x56\x3d\x19\x0c\x7c\x64\x7e\x87\xde\xff\x64\x51\xb7\x1c\x80\xd5\x4a\x76\x9d\xe4\x5d\xff\x72\x47\x30\xf3\x19\x80\x69\xc8\x02\x8d\xe2\x20\x5a\x30\x86\x89\x78\x2f\x7f\xe9\x22\x07\x8b\x30\x09\x52\x4a\x6f\x16\x73\xb3\x0e\xa3\xac\xd3\x14\x64\xb1\xa6\x55\x98\x22\xab\x05\x01\xc3\x57\x0c\xf3\xa9\x0f\x24\xf7\x98\x25\x1c\x07\x3a\x68\xb4\x88\xbe\x15\x00\x81\x98\x62\xe2\xfb\x0e\x55\x32\x55\xd3\x74\x8c\x51\x4e\x79\xb9\xcc\x23\x5d\xcd\xd4\x2f\x16\x41\xce\xbb\x3f\x52\xa3\xda\x2d\x20\xf1\xfd\xb3\x3c\x05\x30\xf0\x9d\x7d\x42\x04\x13\x00\xc0\x08\x2b\xa9\x19\x62\x5d\xbe\xd9\x35\x2c\xbc\x02\xf0\x41\xc7\xcd\x74\x91\xad\xf3\x93\x28\x8e\x3e\x9b\x44\xed\xd8\x6b\xa5\xd1\x8a\x2e\xa3\x3d\x45\x51\xca\x4f\x23\x86\x2b\xee\xc5\xb0\xa5\x85\xf2\xd4\x7f\x7a\xb1\xc7\xce\xac\x93\x78\xd7\x30\xca\x2f\xb8\x1e\x97\x8b\x44\xca\x87\x4d\x0c\x8b\xb2\x99\x07\xda\x6b\x61\x6d\x66\xd9\x90\xbd\xeb\xfb\x76\x33\x0a\xf5\xc4\xf7\x50\x94\x7a\x3a\x1c\x3d\xf7\x47\x68\xc8\x2a\x7b\x54\xf8\x94\x5f\x76\x5d\x0e\x18\x8e\x17\x11\x2e\xe9\xd6\x24\x4b\x14\x40\x4c\xa2\x00\x75\x9d\x3d\x92\x07\x4e\x28\xd4\xe7\xa5\x8e\xff\x12\x09\xe4\xcb\x67\x40\xf2\x2a\xf5\xab\xe0\x84\x00\x20\x2e\x47\xf7\xd5\x13\x06\x59\x67\xea\x2c\xc4\x91\x50\x36\x43\x69\xf2\x0f\x53\x94\x49\x89\x36\x19\x0e\x82\x29\x22\x71\x6a\x5e\x91\xea\x96\x96\x9b\xe4\xa8\x1b\x31\x7d\x5e\x7d\xd9\x41\x4d\x7f\x5f\x60\x76\xff\x4e\xa5\xb5\x1f\x3d\x68\xdb\xc6\x8f\xf7\xa3\x07\xc4\x47\xda\x05\x58\x2e\x2a\x62\xd1\x54\x3f\xd2\x00\x1e\x34\x09\x01\xe4\x27\x0b\x68\xe5\x98\xc4\x2f\x52\x4a\x70\x3d\x77\x93\x2a\x27\xee\x45\xa9\x52\x4d\xb1\x0b\x61\x1d\x77\xdf\x9c\xa6\x49\x94\xe0\x4d\xd8\x4b\xd6\x74\x3f\xf8\x4c\x79\xb8\xbb\xce\x70\xb6\xcc\x50\xd4\xe4\xef\x77\x9f\xa7\x3c\x9a\x8c\x77\x8b\x01\x70\xca\xc4\x8f\xf7\x23\x15\x10\xea\xb5\xee\xfc\x4d\x27\xcf\x68\xba\xd1\x06\xd6\xed\xf6\x63\xf7\x16\xc6\xfa\x3b\xdb\xba\xaa\xbc\xdc\x57\xbb\x71\xf5\xba\xfe\x1e\x77\xad\x0e\xa7\xdd\x60\xdb\x9a\x86\xfb\xb1\x6f\x8b\x83\xfd\x82\xeb\xdb\x26\xbf\x77\xdb\xd8\x5c\xc5\x87\xc7\x8f\x28\x76\xdb\xb4\xc9\x75\xec\xc0\xce\xef\xf2\x47\x8b\xfc\x36\xdf\xbf\xfc\xe8\x91\xca\x76\x55\x15\xfd\xb5\x6d\x02\x65\xd6\x3f\x9b\xb1\x43\x99\x43\xd0\xea\xd1\xfb\xed\x77\xc6\x6a\x12\x5d\xd3\x80\xfe\xfe\x66\x7e\x73\xbb\x6b\x33\xde\xfe\x1c\x09\x8d\x77\xee\xf4\x2c\x2b\xbd\x5c\x20\xb1\xe0\xbd\xd4\xde\x29\xe2\x1f\x54\xab\x91\xcb\x27\xc0\xf3\xc2\x30\xc4\xcb\xa5\x08\x38\x9d\x61\x67\x1c\xb5\x08\x74\x7b\x09\xa8\xd2\x10\x25\xfc\x2f\x18\xa5\x62\x7a\xef\x48\x01\x78\x52\xca\x01\x94\xf0\x5f\xc9\x54\xc3\xd6\x13\x01\x15\x5e\xba\x72\x09\xe2\xea\x88\xb2\x57\x5e\xc4\x12\x91\x44\x28\x55\x63\x37\xa3\x5b\x2e\xbd\x3b\xc4\x88\xbe\xfb\xc9\x9e\xae\xc0\x66\xca\xbc\xa6\x04\x3e\xa5\x77\xa7\xe6\xd8\xe2\x3b\x43\x11\xad\x4b\xaf\x92\x28\xd5\x1d\x61\xe4\x31\x15\xbc\x50\xef\x82\xf1\xc4\xe5\x0c\xf3\xb0\xb2\x26\xf0\xaa\x3f\x4c\xa1\xad\x07\x1c\x4e\x26\x39\x39\xa9\x04\x51\x1f\x34\xce\x5e\xbf\x5c\x35\x05\xf1\x64\x29\x46\xf1\x58\xe4\xe0\x93\xc1\xc0\x2f\x3f\x08\xc7\x13\x00\xcb\x8f\x54\x88\xbe\x2f\xd4\x1d\xa9\x36\x6b\xf7\x5f\x5e\x65\x58\xef\x29\x2d\xda\x46\x3b\x2f\x29\x96\x06\xba\xf7\x52\xe2\x76\x25\x43\x13\x58\x7f\x10\x0d\x9f\x46\x34\xb4\xa4\xb7\x5b\x67\x68\xab\x70\xb4\xd1\x5c\xed\xc1\xb0\x7f\x93\x85\x76\xe8\xce\x33\xa2\x7e\x3a\x14\x4b\xae\x69\x88\x35\x27\x40\x44\x09\xc1\x91\x18\xce\x19\xfd\x74\xaf\x8f\x83\xbf\x26\x24\xb6\x8e\x7b\x8f\x41\x73\x16\xb1\xf3\xc5\x30\x4d\xa8\x48\xae\xee\x9b\x38\x56\x8a\xf8\xf4\x67\xcc\x39\xba\xc6\xbc\x78\x25\xaf\xc2\xb1\x4b\x2c\xe6\x5c\xc9\x28\x59\xb2\x46\x14\xdf\xab\x50\xf0\xc1\xc0\xfb\xc3\xd9\x1f\xa4\x00\x53\xf2\x98\x54\xed\x03\xf5\x5f\x89\x7a\xc6\x85\x99\xa8\x11\x07\x81\x2d\x3d\xa7\x87\xa7\x92\x61\x3e\xc4\x3a\x83\xe8\x2f\x44\xa5\x50\x94\x4a\x36\x17\x49\x74\x73\x3f\x3a\x39\x83\xe2\x7e\x8e\x47\x99\xbc\x64\x06\x3a\xf2\x74\x15\x3e\x6f\x05\xe0\xd8\x0e\x4e\x73\x53\xb5\x96\x13\xc7\x49\x8e\xc1\x83\x1c\xb4\xfd\x5d\x70\xbb\xd1\xf5\xe7\x94\xb7\x8c\xfc\xc3\x97\xab\xbf\x99\x2c\x96\x11\x80\x14\xc7\x76\xf9\x3c\x7b\x72\xe2\xf0\x37\xa5\x8e\x27\x25\x8e\x5c\x27\xce\xe2\xe5\x13\x92\xd3\x4d\x82\xcd\xf3\x6b\x24\xf0\x1d\xba\x37\x82\x1c\xdf\x09\x72\xca\x98\xca\x17\x15\xef\x15\x4f\xad\xf0\xe2\x00\xa5\x09\xe2\x46\x6a\x7f\x2b\xd5\x11\x0f\xc0\x7e\x7a\xc0\x0d\xbe\xc7\xf1\x3b\xbd\x04\x35\x4e\x6f\x96\xa6\x55\x13\x28\xae\xa3\x5b\x94\x2f\x48\xe7\xf2\x63\xf7\xc1\x4b\xcc\x45\x42\x74\x82\x8b\x5c\x90\x97\x98\xd9\x58\x60\xaf\x2e\xda\x8e\x5a\x61\xca\xca\xba\x49\xd0\xd1\xae\xac\xf7\x45\x08\xc7\x42\x24\xe4\xfa\x8b\xd2\x2c\xc3\x73\xda\xe4\xbc\x66\x87\xd7\xee\xe8\x21\x92\x19\xa6\x0b\xd1\x00\x63\xde\x7a\x40\xe7\x4a\x63\xb3\x84\x5c\x4b\x5e\xa5\xe4\xfe\x8f\x99\x4f\x94\x3b\x77\x34\x34\x65\x82\x4d\x27\x81\xe4\x6f\x47\xb5\x32\xa0\x59\xbf\x1e\x3c\x39\x03\x50\xf8\x35\xc7\xad\x62\x25\x56\x5c\x69\x71\x5e\xc9\xcb\x7c\x83\xcb\xa6\x0c\x5b\x44\x42\xd9\x44\xca\x83\xf6\x55\xca\x0d\xa5\x25\x1c\x9f\x7f\xa7\x38\xfe\x0d\xbe\x7f\x41\x63\x3c\xaa\xa7\x67\x5e\x39\xab\x48\x75\x51\x03\xf2\xc2\xb0\x4e\x95\x5e\x97\x74\x0d\x94\x97\xb4\x9c\x12\x38\xb2\x0a\x8c\x76\x63\xd5\x5a\x8c\x86\x1a\x5b\xa8\x89\x37\xaa\xe2\xd1\xd9\x19\x3c\x61\x46\x1b\xd3\xfe\x15\xe6\x04\x81\xa6\x3f\x53\x83\xba\xd0\x14\x1c\x5d\x32\x8c\x6e\x8e\xd4\x47\x17\x2c\xe5\x63\x43\x0a\x13\x6f\x94\x19\x0c\x9c\xf3\x90\xc0\xe5\xa8\x9a\xea\x4b\xf8\xb0\xaa\x17\xbf\xc8\x5e\x5b\x9a\xf3\x20\x09\xd4\xa6\x70\x0f\x5c\xf7\x94\x0f\x5b\xfe\x06\x1d\x35\x25\x15\x45\x8e\x62\x34\x17\x55\xa7\xfb\x3f\xeb\xb0\x0e\x09\x70\x1a\xe3\xcb\xc5\xf5\x3e\xf9\xa4\x63\x72\xbb\xc6\x7e\x72\x95\x5c\x4b\x88\x84\x51\xa2\xa3\xe7\x6b\xee\xe9\xd7\x58\x0c\x8b\x10\x95\xa9\x4b\x9d\x7a\x03\x5e\x86\xc9\x6d\x91\x8f\xb1\xb0\x52\x69\x3c\xcb\x59\x7a\x97\x90\x98\xde\x41\x9b\x31\x5e\xae\xa3\x6c\xdb\x90\xb1\x54\x09\x71\xa7\xda\xbd\xb9\x3c\x6b\xbd\x84\x51\x9a\x0c\x35\x4c\x09\x72\x8f\x96\xf3\x8a\xb2\x19\x3f\x45\x51\xda\xb4\xa8\xa6\x1e\xbc\x3a\x7c\x15\x58\x6d\x45\x65\x17\xa7\xc6\xea\xb2\xa5\xe5\xb4\x5b\xab\x6a\xa5\x21\x9b\xd6\xf3\xf6\x3c\x88\xea\x6d\x9f\x39\xdb\x3e\x2b\xb6\x7d\x36\x19\xe5\xc4\x43\xeb\x5d\x7c\xe7\xec\xe2\xbb\x62\x17\xdf\x4d\x46\xcc\x4a\x57\xd4\x27\x92\x31\x49\x96\xf4\x37\x8d\x58\x9d\x07\x69\xe5\x24\xdb\xb5\x6b\x96\x09\x45\x5d\x56\xae\x00\x7c\x58\xbf\xdd\x58\xbf\x9b\x46\x3e\x5a\x5c\x38\x09\x75\x58\xb1\xdd\x58\x31\x63\x4b\xee\xb0\x6a\x16\xf2\xb0\x72\x4f\xb0\x72\xca\xa2\x81\x2b\x9e\x99\xe5\xa7\xda\xe9\x6b\xcd\x1a\x3b\xfc\xa1\xf5\x1a\x9b\xfe\x3a\xac\xb1\x85\xdc\xcf\x35\xb6\xa3\xdf\x9d\x95\x7e\x89\x04\x8a\x30\x11\x98\xf1\xd1\x83\xb6\x49\xa9\xe8\x32\x6f\xb5\x9d\xdd\xab\x68\xa2\xc3\xba\x6a\xb8\xfd\x5c\x55\x3d\xf6\xdd\x59\xd3\xce\xbb\x77\x83\xf5\xd4\x3e\x5f\x1d\x16\xd4\x00\xee\xe7\x8a\xee\xe5\x6a\xf6\xe3\xc5\x8e\x15\x9e\xe2\x74\x8e\x19\x3f\x1d\xaa\x78\xc4\x21\xd6\x05\xb8\x5c\x1a\x58\x42\xec\xdb\xe1\x9c\xa6\xf7\x57\x49\x9a\x36\xb5\xde\x49\xad\xac\xb9\x4f\x35\xf8\x57\x76\xe6\x1d\x3b\x2e\x36\x6a\xd4\xf9\x32\xfc\xac\xc1\xab\x45\xaa\x86\xad\x37\xd9\x49\x64\xae\x9f\x2e\xba\xe4\xae\x99\xce\x90\x98\x0e\x2d\x4c\x11\x76\x27\xa7\xd8\xdc\xa7\x9a\x5e\xc7\xfe\xd0\x25\x6f\x47\x57\x44\x7b\xe0\x4b\x02\xef\x1b\xc2\xd4\x04\xbb\x62\x2c\xa2\xdd\x50\x36\xed\x85\xb3\xe9\x3e\x22\x6d\xda\x0b\x6b\xd3\x76\xb4\xc5\x71\x77\xa4\xc5\xf1\xde\xa1\x4c\x4e\xaf\x2b\xc2\xe2\xb8\x1d\x5d\xc4\x89\x2e\xc1\x16\x2e\x7c\x91\xfd\xc3\x17\xe9\x81\x2f\xd2\x01\x5f\xf3\xf9\xf0\x16\x33\xbe\xc6\x54\xe6\xb4\x5c\xe7\x26\xde\x42\x0f\x36\xc9\x0a\xbe\xc6\x9f\xe6\x2e\xa9\xb1\x98\xd6\xc2\x26\x61\xd8\x50\xf8\x7b\x58\x41\x54\xf0\x0f\x7c\xfe\xee\x5d\x60\x46\x01\x69\xc8\xec\xdf\xbf\x90\xf4\x7e\xb9\x64\xc1\x34\x89\xf1\x87\x29\x82\x3c\x64\x01\x9f\xa2\xe2\xe3\xbf\x99\x56\x89\x4a\x14\x9f\xc9\x74\x83\x81\x2f\x41\xe9\xdd\x2b\x75\xc7\xa7\xca\x97\x26\x21\x0a\x66\xba\x28\xb6\xfd\x80\x7d\xfb\x1e\x5f\xbf\xfa\x34\x07\x00\x26\xcb\xa5\x0b\xce\xbe\x07\x90\x57\x3a\xe2\x53\x94\x37\xbe\x48\xc6\x67\x93\x11\xda\x24\x2b\x07\x9a\xcf\xcd\x54\x42\xd6\x52\xf6\x48\xad\x7d\xa0\x49\xc0\x67\x1d\x32\x1c\x14\xa8\x05\xbb\x37\x98\x4a\x27\xc4\x25\x45\xd6\x77\x99\x6e\xb4\x6f\x1b\xcd\x4c\xb5\xeb\x5e\x53\xe0\xed\xdb\x8d\x27\xa4\x3b\x3b\x97\xc0\xfb\x86\x36\x35\xc1\xae\x48\xe3\x09\xe9\x84\xb2\x1e\x72\x83\x82\xde\x43\xa4\xf5\x90\x1b\x24\x74\x07\xb4\xf1\xe4\xda\x49\x6b\xfa\x4d\x55\x79\x31\xf0\x7b\x87\x39\x3d\xcb\xce\xa8\x93\xe0\xed\xb8\x13\xa8\xc7\x2e\x95\xc0\xfb\x86\x36\x35\xc1\xae\x48\x13\xa8\x1b\xca\x9e\xf5\xc2\xd9\xb3\x7d\x44\xda\xb3\x5e\x58\x7b\xd6\x09\x6d\x3d\x98\x9b\x82\xde\x43\xb4\xf5\x60\x6e\x12\xba\x03\xda\xe8\xe5\xfa\x44\x7f\x0a\xa2\xb5\x28\x67\xbf\xc4\x7e\xb8\x21\xe7\x5e\x21\xaf\x5f\x58\xce\xeb\xb7\x5c\x9e\xf8\x6b\x33\xfb\xd9\x64\x7d\xda\x0e\x3a\x9e\x40\x16\x9e\x9c\x41\x14\x9e\x9c\x43\x6a\x45\x37\xc1\xee\xb3\x6a\x47\x1c\x26\x21\x76\x64\x8f\xfb\xfe\xc4\x67\xa1\xcf\xc3\x44\xd5\xe4\xf7\x01\x08\x62\x4a\x30\x18\x0c\x7c\x5d\xc4\xd3\xe7\xd6\x93\xe7\x44\x2c\x97\xc4\x88\xda\x27\x61\x28\xc0\xf7\xf2\x93\xe0\x7b\x13\x01\x91\x82\x07\x24\x87\x40\xc3\x74\x75\x95\x10\x94\xa6\xf7\x0f\x2a\x60\x62\xb9\xd4\x29\xe8\x92\x40\x0f\x79\xb9\xb4\x7f\xf9\x20\x83\x4c\xae\x7c\x04\x74\x04\x05\x5d\xe5\xd5\x42\x15\xa6\x0e\xc9\x0a\x7b\x24\x2b\x2c\xe3\xab\x7b\xba\x42\xe5\xca\xbc\x88\xc4\x82\xe1\x43\xce\xc2\xae\x55\x60\x4b\xea\x90\x5f\xbd\x9e\x60\xa1\x24\xd8\x73\x30\x3e\x9b\x40\x14\x66\x9e\x77\xec\xc2\xf3\xb2\x2b\x80\x72\xee\x39\xd4\x2d\x25\xb3\x65\x66\x3a\x2b\xab\xca\xb7\xcb\x9b\xf3\xb5\x3a\xa1\x77\xf2\x28\x58\x3f\xdb\x08\xcd\x70\x9a\xfc\x03\x37\x79\x8c\x69\x2e\x50\x3b\xfa\xb2\x66\x3b\x39\xe5\x35\x17\x15\xd9\x74\xbb\x5e\x52\x98\x06\x1d\x10\x49\x22\x9c\x0e\x51\x9a\xba\xf5\x71\xa2\x33\x1f\x46\xf7\xae\x16\x3b\x89\xc5\xb6\xf9\xce\x13\x81\x36\x22\x9d\xac\xe1\x4e\x4e\x7b\x1d\xf1\xe4\x53\xee\x4c\x3e\xb6\x49\x3b\x42\x2f\x99\xf3\x76\xcb\x29\x7a\x2a\xe0\x7d\x43\x9f\x9a\x60\x57\xc4\x5d\xb2\x0e\x34\x88\x13\xe7\x6e\x73\xa3\x4c\x02\xef\x1b\xca\xd4\x04\xbb\xa2\x0c\x27\x69\x3b\xca\x94\xab\x3e\xc7\x62\x78\x8d\xdd\x6e\xc2\x16\xa0\xa1\xc9\x4e\x62\xb0\xeb\x9c\x79\xff\x39\xf3\x5d\x9d\xf3\x1a\xaa\xb1\x83\x97\xb2\x72\x67\xea\x29\x34\xea\x8e\xd1\xb5\xd8\x1c\x16\x3d\x5b\xea\x4d\xf7\x15\xab\xfd\x51\xda\x01\x9f\x0b\x72\xd3\xd3\x8e\xaf\xdb\xec\x1d\x12\xd5\x44\x3b\x23\x70\x41\x6e\xda\x91\x97\x22\xce\x93\xab\xfb\xbe\x72\x88\x6d\xb6\x6f\x28\xcc\xa6\xdb\xd9\xcf\x46\x37\xd0\x88\x74\x78\x93\xe6\x18\xf9\xc7\x77\xdd\x8d\x86\x1a\x7a\xef\x90\xa7\xa6\xd8\x19\x73\xff\xf8\xae\xdd\x68\x28\xf7\x28\x6a\x88\xb9\x59\xb3\x7d\x4d\xab\x9d\x44\x60\x87\x09\x2b\xa3\xc3\x9a\x20\xcf\xcc\xfc\x20\x0e\xb6\xbd\xfd\xb1\xed\x91\xdc\xb6\xc7\x36\xb7\xed\xb1\xba\x6d\x8f\xb5\xd9\xf6\x58\x6e\xdb\x63\x1d\x6d\x7b\xac\xbf\x6d\x8f\x81\xf2\x4c\xf7\xdd\xb6\x47\xf6\xc3\xb6\xc7\xca\xb6\xbd\xac\x92\x20\x65\x4d\xe1\xd5\x2a\x43\x0c\x80\x26\x27\x40\x2d\x05\x12\x09\x25\x5b\x79\x06\xe4\x4c\xb4\x25\x90\x8c\xcf\x27\xa5\xbc\x00\xb2\x87\x20\x67\x55\x3e\x53\x96\xc0\x52\x34\x6c\x43\x24\x65\x91\xcf\x2d\xaa\x29\xb8\x3a\x31\xf6\x85\xd8\x3f\xe3\x86\x9d\x6c\xd7\xb3\x51\xc3\x77\x38\x2c\x54\x11\x37\xa7\x7b\xe6\x5a\x2c\x9a\x66\x7b\x87\x46\x3b\xdd\xce\x78\xd4\x0d\x3a\x20\xb2\xbb\x8b\xeb\x1e\x7a\xb8\xf6\x71\x70\xed\xe2\xdf\xda\xcb\xbd\x75\x1f\xbd\x5b\x7b\x39\xb7\x76\xf2\x6d\x8d\x11\x9f\x62\xd6\xdf\xa2\x9b\xb7\xdb\x33\x14\x16\x26\xdc\xb5\x57\xdb\xa2\x1d\x99\x38\xea\xc9\xf2\x64\x8b\x7d\x43\xa0\x9c\x64\xe7\xfe\xa2\x0e\x48\x33\x63\xec\xa4\x56\x94\xf3\xc4\x8e\xcf\x26\xb6\x40\x95\xf9\x79\x81\xc7\xe7\x93\x91\xfc\x6b\x13\x31\xe6\xb7\x2c\x67\x46\x53\x3a\x4c\xd7\x7d\xa5\xe8\x90\x12\x33\x9b\x6d\x12\x0f\x13\xc2\xb1\xdb\xee\xcf\x30\x89\x31\xab\x53\x49\xde\x68\x27\x89\xa5\x7d\xca\x36\x63\x49\xaf\x29\x9b\x46\x7b\x39\xe5\xab\x2b\xcc\xf0\xfa\xe4\x80\x2e\xb2\x3e\x96\x94\x5b\xcf\x66\x98\xe9\xd2\x27\x92\xbc\x83\xab\x84\xc4\x3f\xde\xfb\xde\xeb\x97\x1e\x2c\x95\x82\x7e\xfd\xd2\xd3\x69\x0d\x37\x11\xe1\xb3\x31\x3f\x25\xf5\xdf\x76\x3e\x9f\x25\xec\x4e\x2e\xfd\x9a\x3e\xe5\xf4\xba\xf6\x97\xdc\xb6\x93\x11\x9d\x0d\xb3\x6a\xc2\x07\xb3\xcb\xc1\xec\x72\x30\xbb\x1c\xcc\x2e\x9b\x99\x5d\xda\x12\xdf\x75\x37\xba\xf8\x64\x7c\x3e\x81\x59\x8e\x37\x13\x70\x2b\x97\x1b\xd2\x70\x8c\x02\x7a\x75\xc5\xb1\x78\x87\x18\x26\x02\xa2\x7c\x7e\x01\x17\x88\x09\xfe\x1f\x89\x98\xfa\xde\xff\x8f\x61\x4e\xd3\x5b\xcc\x46\x1e\x18\x0c\x68\xb0\x20\x7c\x9a\x5c\x09\x9f\xca\xe3\xaf\xd8\x03\x80\xd4\x95\xd9\x5a\x14\xd2\xf2\x7f\xfa\x36\x14\xa6\xcd\x1b\x7c\x25\xcf\xae\xfb\xfc\xc9\x47\x3a\x87\xaa\x92\xe8\xa7\xd1\x19\xbc\x1f\x9d\xc1\x29\x4e\xae\xa7\x62\x64\xc7\xf9\x17\xf5\x13\xde\x25\xb1\x98\x66\x0f\xff\x43\xfe\x5a\xf5\x33\x1c\xc5\x8c\xce\xfb\x0a\xff\x8c\xd6\x42\xb4\x76\xe3\x88\x5b\x3f\x55\x3d\xb1\x39\xbd\xc3\x6c\xc8\x71\x8a\x23\x31\x4c\xf8\xf0\x9a\xd1\x85\x13\x03\x45\xc0\x4e\x7d\xec\x24\x4a\x9a\xfb\x54\x53\x79\x27\x67\xf2\x41\x4d\xe4\x35\xff\x37\x8d\x8a\x8e\xdf\x68\x68\xbf\xe1\x32\xe8\xbf\xb0\x33\x42\xac\xc7\x4a\x64\xdd\xec\xfd\x62\x7c\xc8\x10\xb2\xf1\x7a\xd8\x2e\xda\x97\x84\x08\x96\xe0\xbe\x76\x4f\xdb\x6a\xdf\x50\x6d\x27\xdb\x15\xaf\x1a\xbe\x03\x12\x1b\x33\x8f\xc9\x57\x87\x88\x82\xaf\x42\xfc\x3d\x44\x14\xec\x97\xf8\xfb\x35\x46\x14\x3c\x03\x10\x85\x4c\x8a\xb5\x34\x64\x52\xaa\xe5\x79\x70\x01\xbd\xf0\xbc\x11\x85\x49\xa8\x02\x0b\x30\xb9\x05\x3e\xca\x2a\xf2\x4b\x24\x9c\x84\xc9\x45\x32\xe2\xbd\xe2\x0c\xf0\xdf\xbb\x67\x46\xc0\x7f\x5f\xa0\xbd\x73\x5e\xd5\x83\xee\x7c\x22\x48\xe8\xf6\xf3\xe0\x93\x53\xac\x74\x1a\x8d\x1c\x49\x0f\x76\x1e\x65\x9f\x7a\x88\x8a\x9f\x3a\x88\x85\x9f\xe6\xb3\xf3\x3e\x08\x9b\x9d\xef\x21\xca\xe4\x14\xbb\x23\x6d\x76\xde\x8a\x36\x6d\x73\x1d\x5e\xba\x5d\x0a\x9b\x85\xb7\xbc\xdd\x4e\x22\xb1\xcb\xa4\x37\x9a\xf1\x7e\x4e\x97\xc4\x9b\xac\xb0\x6e\xb5\x97\x13\xfe\x84\xe3\xe1\x35\x4b\xe2\x61\x8a\xee\xe9\xa2\xc1\x61\x31\x95\xea\x4d\x42\xc9\xa9\x06\xe2\xa7\xb2\xc5\xd3\x95\x94\x6b\x3d\xa1\xed\x29\x8b\xef\xf2\xb9\xfa\x58\x9e\xd3\x78\x7c\x3e\xa9\x84\xf6\xb5\x5c\x39\x5c\xa5\x52\x92\x72\xe6\x12\x58\xb7\xe6\xa6\xd5\x4e\xae\x79\x73\x9f\xd9\x64\x3b\xf6\x69\xe0\xdb\xe9\x28\xa5\xd4\xc9\x26\x9c\x67\x8a\x86\xde\x3b\xd4\xa9\x29\x76\x46\x1c\xa5\xac\x1d\x6d\x94\xcd\x90\x18\x92\x85\xc4\xd5\xfa\x60\xf9\x3c\x52\x2e\x4d\x87\xc9\xd5\x50\x6a\x41\x9d\x55\x5d\xa9\x2f\xbd\xa1\x11\x4a\xb1\xd6\x9a\x7c\xbd\xdd\xa4\xd6\xb1\xc1\x9e\x2d\xf7\x15\x92\x4e\x76\x66\xbb\x8d\x4b\x51\xb8\x9e\x99\x39\x90\xda\x50\xc5\x94\xba\xc6\x27\x5d\xaa\x61\xc3\xcd\x4c\x29\xa5\xa6\xfb\x46\x81\x8c\xce\x5e\xf5\xb4\xa9\x14\xda\xb4\x53\x23\xa3\x0b\x77\xe6\x28\xf7\x2e\xd6\xe0\xfb\x87\xc4\x45\x8f\x9c\x51\x1a\xbc\x15\x75\xd7\x51\x77\xbc\x49\xd8\x3d\x43\x9a\x9a\x5e\xc7\xfe\xae\xa3\x0e\xe8\x62\x74\x31\xef\x2f\x68\x65\xcd\x76\x12\x7d\x2d\x53\x76\x8a\x56\x6e\xcd\xfe\x7a\x47\xdd\x78\xd6\x10\x48\xf7\xee\xae\xbb\xe0\xca\xe9\x09\xd4\x84\xac\x1d\xf5\x00\x5a\x87\xad\xee\xce\x85\xd7\x1d\xdc\xa9\xa7\x88\x0f\x09\xfe\xd4\x37\xda\x28\x6b\xb6\x67\xe8\x9b\x22\xfe\x56\xcd\xb6\x63\x9f\x06\xbe\x13\x1a\xe7\x0c\xdf\x26\x74\xd1\x57\xac\x28\x35\xdd\x3f\x74\xbe\xcb\x66\xdd\x1d\xa5\xb6\x4d\x3b\x5a\x19\xbe\x1a\xce\xaa\xaa\x65\x03\x9c\xa0\x0e\xd9\x97\xd1\x85\x48\xc8\xf5\xa9\xc8\x8a\xd1\xc9\xf1\xb5\x25\x2f\x3d\x5c\xf5\xec\xcb\x55\x0f\xfa\xdd\x5c\xf5\xa0\xaf\xe2\xaa\x07\xed\xc7\x55\x0f\x75\x7b\x3a\x49\x6e\xd2\x58\xc4\x5f\xbf\x74\xfa\x3b\x41\xa4\xaf\x86\x68\xc8\x6c\xb2\xa9\x62\x6a\x29\xc9\xbe\x3e\x52\xa0\x0b\x35\x2a\xef\x27\xdd\x17\xac\x54\xf2\xcb\xdf\x04\x3a\xfb\x8f\x78\x2f\x7f\x41\x9a\x7b\xea\xfe\x72\x47\x30\x53\x90\x00\xc0\x6a\x7c\x1a\xed\xc0\x6d\x25\x17\xad\x9f\x5f\xe6\x55\x0f\x86\x7b\x97\xa4\x71\x84\x58\x5c\x02\x31\x28\xaa\x71\x5f\xc8\x0a\xfc\x17\x15\xcc\x74\x1d\xb9\x6f\xe2\x63\xa0\x19\x70\xaa\xfe\xcb\xcb\xcc\xb8\xfb\x1e\xe1\x73\x86\x51\xfc\xe5\xb6\x07\xed\x3f\x77\xbc\x95\x89\xef\x04\x73\xe0\x19\xf7\xd7\x53\x6e\x66\xfb\xc9\xe6\x6c\xdf\xc4\x78\xf4\x67\xfe\xd0\xc5\xf9\x2f\x4a\x2c\x7f\xb4\x05\x7e\x7f\xa1\xe7\x66\x8a\xc0\xae\x72\xec\x24\x4f\xcd\x3a\xb3\x2f\xa5\x16\xff\xb9\xf0\x72\x52\x16\x5e\x06\x83\xb5\xa2\x8b\xeb\x38\x7c\x0c\x67\xc6\x86\x45\x16\x59\xf4\xa2\x52\x4e\x87\x69\xd6\xc8\x01\x8c\x0a\x35\x88\x24\x6f\x81\x5c\x73\xdf\x24\xa4\x3e\x03\x30\x0d\x93\xf1\xd9\x04\x46\x61\x62\xe8\x22\x23\x8a\xe3\x85\x9f\x4a\x54\x46\x61\x14\xcc\xd0\xdc\x79\x71\x80\x03\x3e\x4f\x13\xe1\x7b\xa7\x1e\x50\x40\x98\x44\x34\xc6\xbf\xbe\x7f\xfd\x42\xca\xf8\x04\x13\x01\x82\xff\xa6\x09\x51\x10\x2b\x95\x12\x3e\xd0\xf9\xfc\x2e\x4a\xcc\x1e\x67\xcf\xc1\xc8\x27\x25\x86\xfe\x16\xcd\x70\xc9\xa5\x55\xd7\xd4\x0b\x3c\x30\x18\xa4\xa5\x17\x71\xa4\x1e\xfa\x69\x98\xc1\x48\xc2\x8d\x90\xf0\x53\x00\x60\xe5\x83\xe3\x74\x62\xdf\x22\x3f\x02\x00\x80\xd5\x51\x86\xda\x48\x61\x35\xde\xf2\xc1\x97\x0b\xd2\x51\xfd\x78\x53\x02\x0d\xa4\xe4\xd7\xf7\x6f\x5e\xe8\x92\xcf\xfa\x03\xf4\x52\xf6\x8d\x99\xed\xda\x22\xe7\xd7\xf7\x6f\xca\x05\xdc\x75\x67\xd8\x7c\x57\x55\x54\x2a\x1d\x78\x71\xcb\x81\x27\x66\xe9\x90\xa3\xab\xbe\x01\x8a\x79\xbb\x7d\xd3\xd7\xc4\x2c\xfd\xa0\xe6\xdb\x55\x59\x33\x0d\xda\x35\xb5\xc5\x0c\x91\xfe\xa1\x9e\x59\xb3\x7d\x43\x64\x36\xdd\xae\x88\x34\x0d\xda\x11\x79\x3f\xa7\xdd\xf3\xf6\x69\xe8\x7d\x43\x9e\x9e\x62\x57\xcc\x49\xe8\x56\xb4\x25\xb3\x45\xf7\xd4\x7d\x0a\x78\xcf\x90\xa6\x27\xd8\xb1\x43\x09\xdc\x8e\x32\xd2\x37\xa2\x58\xb6\xd8\x37\xb4\x91\xee\x11\xc5\x09\x69\x8f\x28\x4e\x54\x91\xce\xa6\x92\xe8\xeb\x50\x67\xdb\xed\x24\x02\xdb\x26\x7d\x4b\x6f\xfa\xe6\x2d\x31\x8d\x76\x72\xba\xeb\xe8\x45\x4f\xb5\x33\xc9\x48\xf0\x76\x04\xf2\x21\x8a\x44\x72\xeb\x8e\x52\x56\x32\x4e\x1d\x7f\x59\x9b\x7d\x43\x21\x7f\x6e\xe6\xda\x15\x89\xa6\x41\x27\x34\xaa\xb2\xb8\x9d\x6f\x78\xb2\x16\xfb\x87\x43\x3d\xd1\xee\x28\x94\xf0\x5d\x30\x28\x35\xfe\x7e\x18\xd4\x2d\x76\x12\x83\xed\xb3\xd5\x4e\xc3\x7d\x66\xbb\x8f\xbe\xd1\x09\x7f\xd5\xcb\x3b\xda\xc0\x77\xc1\xa0\x54\x0f\xfb\x66\x1a\xe8\x68\xba\x42\x99\xd9\x8e\xaa\xff\xb2\x7d\x35\xdb\x91\x8d\xcd\x76\x8f\x9c\xf8\x4e\x98\xed\x58\x67\xb3\xdd\x23\x6e\x6b\x76\xde\x6c\x87\x1a\xcc\x76\x4f\x7e\xe3\x51\x36\x1e\xef\x92\xd9\xae\x60\xad\xe3\xdb\xb5\x2b\x99\x48\x1b\x88\x42\xf9\x03\xd2\x10\x8d\xcf\x26\x90\x87\xa8\x66\xd2\x6b\xba\x34\x59\x67\x63\xa3\x4e\x1b\x1b\xad\xdb\xd8\x28\x00\xd0\x67\x61\xe1\x1b\x20\x93\x66\x02\x34\x9f\xa7\xf7\x3e\x83\x63\x9a\x59\xdd\x84\xcf\x01\x78\x5a\x93\x17\x5f\xcf\xd0\xff\x9b\xba\x2b\x14\xae\x11\xe4\x55\x93\x9d\x3c\x0f\xd7\x4f\xf5\x06\xdf\xf7\xf5\xc5\x50\x4d\x76\x72\xaa\xcd\x7d\xea\x69\x76\xec\x50\x02\xb7\x22\x2e\x45\xbc\x6b\xca\xac\x83\xa3\xc4\xbe\x38\x4a\x1c\x52\xc2\xec\x97\x50\xf5\xe4\x29\x61\x8a\xe2\x5b\x31\x1f\x8b\x2e\x85\xc5\xf2\x68\x55\x72\xe1\x79\x23\x72\xc4\xef\x12\x49\xdb\x27\x67\xe0\x21\x42\x1c\xd7\x28\x8d\x8d\xf2\x6c\x2c\x8b\x4b\x2e\x98\x3f\x3c\x07\xab\x4d\xc4\x07\xc9\x7f\x9e\xae\xc8\x71\x1a\xcd\x3a\x1b\x8a\x25\xec\x9e\x1d\x07\x6a\x7a\x1d\xfb\x4b\xa3\x59\xfb\x61\x80\xaf\xc4\x50\xb0\x64\xb6\x3e\xc6\x24\x07\x3b\xe4\x50\xf8\x2a\xce\x8b\x43\x0e\x85\xfd\x3a\x2f\xbe\xf6\x1c\x0a\xd9\x71\x84\xe4\x71\xa4\x4a\xfd\x8f\xcf\x27\x30\xc9\x5f\x70\xf9\x82\x3b\x4b\x36\x52\x98\xf4\x2b\xda\x98\xd2\xeb\xa1\xd3\x58\xef\x3e\x26\x14\xf4\xbe\x1d\x14\xf4\xfa\x55\xf7\x93\x82\x5e\xbf\x6a\x3f\x2a\xe8\xf5\xf9\x59\x1f\xa4\x9d\x9f\xed\x21\xd2\xe4\x14\xbb\x63\xed\xfc\xac\x13\xda\xba\x67\xa1\xd0\xd0\x7b\x88\xb6\xee\x99\x28\x14\x74\x6b\x75\xa1\x94\x5e\x77\x2f\x2e\xa4\x80\xf7\x0f\x69\xdd\x4b\x0b\x49\xe0\x0e\x94\x76\x87\x99\x12\xde\xfb\x79\xe9\xe4\xed\xf6\x0e\x85\xd9\x84\x3b\xe3\xd1\xb4\x68\x47\x66\x8f\xa8\xbc\x74\x47\xaf\xfd\xd7\x60\xae\x7b\x77\x1d\x4c\x71\x69\x9f\xa8\xbc\x74\xff\xa2\xf2\xd2\x1e\x51\x79\x69\x87\xa8\xbc\x19\xda\x20\xc4\xd5\x34\xda\x49\xd4\xb5\x4e\xb7\xff\x5c\xf7\x73\xa2\x9f\x3a\x1f\x59\x12\x76\x27\xa7\xd8\xdc\xa7\x9a\x5e\xc7\xfe\x66\xe8\x53\x3b\xba\xdc\x77\x15\x6e\x74\xed\xea\x25\xc5\x1a\x74\x25\xdd\xb3\xa9\xcc\x92\xf6\x4c\x2a\xb3\x0d\x33\xf2\xe4\xed\x76\x31\x2f\x4f\xbf\x94\x3c\x33\xda\x3d\x9b\x82\x84\xdd\x37\x92\xa1\xdd\xb3\x29\xcc\x68\x7b\x36\x85\xd9\xc2\x2d\xc6\xb8\xf1\xb5\xd8\x3f\x39\x66\xd6\xa7\xc3\x59\x17\x1e\xbe\x41\xb4\xfc\x3e\x46\xca\x93\x3e\x61\xf2\xa4\x4b\x8c\x3c\xa1\xbd\xb3\x98\xab\x26\xfb\x86\x38\x35\xcd\xae\x88\xa3\xb4\x3d\xeb\x22\xa1\x62\xd8\x27\xbb\xa7\x86\xdf\x43\x2f\x36\x42\xc5\xab\xbf\xf7\xc0\x9d\x78\xf5\xf7\x2e\xc8\xeb\x85\xb9\x3d\xc4\x59\x1f\x8c\xb5\xe2\x4b\x5b\xa1\x87\xa8\x2f\x8f\xcb\xdb\xed\x19\x02\xf5\xc0\x9f\x77\xef\xd4\x36\xe8\x8a\x4a\x47\xb6\xb1\x83\x47\xc5\x57\x70\x43\x76\xf0\xa8\xd8\xaf\x1b\xb2\x5d\xf2\xa8\x78\x58\x8d\x48\x31\xe1\x77\x18\xb2\x8b\xf1\x64\x64\xa8\xc8\x70\x0c\x9f\x6d\xe4\x7d\xa9\xb1\x64\x32\xf7\x3d\x9d\x1f\x05\x25\xc3\x98\x46\x8a\xc2\x5c\x47\x05\x25\xe6\x88\x70\x36\xd8\xc9\x33\xa2\x75\xbe\x77\x09\x89\xe9\x5d\xe7\xd9\x1a\xf0\xbd\x9c\x6b\xd7\x49\xee\xe5\xec\xe6\xb2\xa5\x3b\x2c\x64\x9d\x84\x63\x9b\xed\xe4\x94\xd7\x08\x38\xd9\x74\xbb\x0a\x38\xa6\x41\x3b\x22\x9d\x79\x7b\xdd\xa2\xf5\xfe\x65\xed\xed\x91\xb2\xb7\x43\xbe\xde\x39\xba\xc6\x43\x91\x88\xd4\x79\x13\x92\xbf\x75\x35\x78\x32\xab\x5c\x86\x88\xee\x06\xb6\x39\x66\x11\x26\x42\x0e\x2e\xa2\xe9\x62\x46\x78\x3f\x63\x63\xbd\xfd\x2e\x1a\x1d\x55\x32\x70\x88\xc7\xcf\x7a\x9a\x1f\xe7\x98\x5d\x51\xe6\x74\x30\x8c\x28\xd1\x3e\xfd\xd1\x7d\x0d\x7c\x27\x77\x46\xcb\x4c\x93\x39\x56\x01\xaa\xee\xb3\x62\x0d\x1f\x2d\xb6\xdc\xd3\x89\x6f\x30\xe3\xdd\x9c\x6a\x73\x9f\x7a\x9a\x1d\x3b\x94\xc0\xed\x88\x4b\x17\x0c\xa5\x0d\x39\x42\x12\x72\x25\x39\x05\x65\xa7\x69\x72\xe9\x68\xb2\x53\x2c\x90\xa6\x49\x74\x7f\x1a\x23\x81\x24\x2b\xc3\xac\xab\x6e\xaf\x95\x02\x11\x22\xab\x99\x19\x85\xe3\x87\xf3\xc1\x40\x0f\xea\x24\xcc\x5f\x8e\xcf\x27\x17\xc5\x1f\xa3\x87\x15\xb4\x3c\xed\x1a\x1b\x3e\xe5\xbd\x2c\x8c\x22\x0b\x7a\x2a\x9b\x0a\x08\x18\x0c\x64\xcf\x56\xbf\xbe\x58\xdb\xc7\x68\x2c\x82\xeb\x94\x5e\xa2\x74\xb9\xf4\x9e\xa7\xa9\xb7\x51\xb5\xf3\x02\x72\x9e\xae\xe4\xb3\x59\x88\x5a\x75\xc8\x83\x79\xe5\x60\x5e\x39\x98\x57\xbe\x36\xf3\xca\x76\x38\x7e\x43\x6d\x09\x87\x54\x98\x99\x6e\x1a\x8a\x04\xab\x19\xd4\xc2\x62\xce\xcc\xff\x86\x8e\xff\x98\xff\x9d\x4b\x8a\xa9\xd5\xd6\x1f\x91\xd0\x9b\x21\x82\xae\x55\xcd\x63\xef\xe8\x92\x61\x74\x73\xa4\xfa\xf4\x4e\x2a\xf0\x72\xe5\x53\x24\xb0\x6e\x95\xc4\x98\x88\x44\x24\x98\xdb\x56\x66\xde\xf2\xa5\xe2\x91\xf2\x95\xdd\x98\x12\xa9\x9a\x3b\x08\xa0\xcb\x17\xe7\x5f\x1d\x8d\x27\x30\xef\x4d\xfe\xb2\xcd\x47\xe3\xc9\xaa\x22\x0a\xb7\x54\xda\x30\xcc\x59\x6f\xeb\x35\xdc\x79\x83\x65\x95\x7d\xfe\x72\xe5\x3a\x57\x5c\xa7\xad\x3a\xe3\x48\x13\x02\xab\x0b\x78\x9c\x5b\xe9\x4c\x40\x93\xc7\x68\x8a\x3d\xbd\x12\x26\x36\x79\x68\x90\x74\xef\x15\xe1\xf4\x8c\x87\x35\x18\xdd\x94\xd0\x78\x7d\xbb\x32\xc0\xd1\x23\xa9\xa9\xdc\x77\x91\xb0\x2c\x71\x94\x20\xbc\xd5\x6a\x5b\x67\xb2\xd3\x40\xe6\x74\x28\x98\xef\xaa\x75\x6c\x8d\x58\x2c\xa7\xd7\x55\x2a\xa6\x77\xed\x42\xf1\x66\x49\xe3\xf7\x35\x61\xfc\xbc\x6f\xb6\xf8\x79\xd7\x54\xf1\x7f\x5f\xe0\x45\x5f\xbd\x4c\xb7\xd9\x33\x14\x9a\x89\x76\xec\x51\x41\xb7\x22\x8f\x21\x12\xd3\xee\x61\x91\x06\x7c\xcf\x10\x67\x27\xd9\xb1\x4b\x0d\xde\x05\x75\xd7\x7d\xe9\x4e\xb7\xd9\x3f\xf4\x5d\x77\xa7\x3b\x05\xdd\x8e\x3c\x25\x58\xf5\xc5\x9e\x6e\xb4\x93\xe8\x6b\x9b\xee\x15\xc3\x7c\xaa\x33\xbe\x6d\x57\x24\x72\x48\xba\x62\xab\x29\x57\xb4\x34\x85\x55\xae\x93\xa3\xaa\x06\x6d\x45\xad\x4a\x1a\x7a\x0c\x20\x09\xb1\x2b\xfb\x8a\x52\xba\x8e\x0a\x51\x17\xf4\x66\x31\x37\x9f\x1f\x65\xe9\x55\x08\x00\x81\xc1\x99\x0f\x56\xe5\x5c\xf6\xa2\x0d\xd5\xca\xf7\xa2\xb7\x13\x7d\xde\x6e\x2f\xe9\x6b\x8e\x7b\x3b\xee\x98\x46\x3b\x39\xdd\x35\xdc\xc8\x4c\xb5\x2b\x3b\x52\xe0\x1d\x10\x78\x8b\x59\x43\x78\xd4\x3a\x0c\xea\x56\x3b\x89\xc2\x96\x09\x27\xd7\xd3\x2e\xe1\xfd\x05\xb8\x43\x7c\xff\x57\x61\x5e\x3b\xc4\xf7\xef\x97\x79\xed\x10\xdf\xbf\xcd\xf8\x7e\x46\xa9\x18\x2e\x98\xd3\x05\xa4\x21\x1f\x6f\xd6\x64\x27\xd9\xfc\x9a\x93\x92\x52\xf1\x2b\xeb\xee\xfd\x61\xe0\xdb\x8f\x8e\x5e\x15\x5f\xf7\xb2\xe0\x6b\xbf\x7a\xaf\xdd\xca\xbd\x2a\xea\x92\x38\x8a\xa6\x87\x2b\xab\xaf\xec\x4c\x3d\x5c\x59\xed\xd7\x99\xfa\xf5\x5c\x59\xd5\x9d\x8d\xcd\xa7\x6f\xf0\x3d\xf7\x49\xfd\x96\x43\xaa\xfe\x51\xba\x88\x31\xf7\xbd\x77\x0c\x73\x4c\x44\x7e\x69\x90\x2b\xe0\xc1\x6b\x72\x8b\x99\xb8\xf0\xde\xfe\xf2\xf1\xd8\x1b\x79\x9e\x32\xe1\x6a\xe8\xa3\x5a\x47\xaf\x3e\xa1\xa8\x63\x37\xff\x84\x25\x6c\x7a\x7f\xac\x38\x61\x42\xae\x8f\xbd\x7f\x02\x39\xbc\xea\x09\xfe\x93\xf7\x4f\x8e\xaf\xbc\x63\xf8\x2a\xf9\xd4\xf1\x33\x73\x05\x8c\xe3\xe3\xcb\xfb\xf2\x17\x74\x2f\x0d\x9f\xf8\xb0\xb8\xea\xfe\x09\xae\x80\x1d\x9f\xd0\xbd\x34\x7c\xe2\x3d\xbe\xc6\x5d\xbf\x90\xe1\x48\x4c\xf1\x31\x93\x0d\xcb\x1f\x52\x7d\xa9\xef\xac\x6c\x77\xf5\xab\xba\xd6\x33\x49\x17\xa3\xea\x25\x11\x15\x9a\xed\xdf\xd1\x2e\xf0\x3b\x33\xe3\xee\x07\xbc\x6d\xd3\x7a\xcc\x73\x8c\x58\x34\x95\x3d\x1e\x4e\xf9\xc3\x29\x7f\x38\xe5\x0f\xa7\x7c\xcf\x53\xde\x9a\xeb\x35\x23\x69\x30\xd7\xeb\x97\x6b\x32\xa4\x6b\x99\xe0\x19\x90\xb3\x91\x72\x01\x0a\xc9\xf8\x7c\x52\xca\x8d\xae\xfb\x08\x72\x86\xe5\x33\x10\xa0\x38\xf6\xab\xd5\x63\x5b\x0e\x11\x8e\x53\x1c\x09\x65\x20\xbd\xc1\xf7\x43\x35\x5d\xde\x56\xb8\x9b\xa7\x8b\xeb\xe4\xca\x61\x6c\x2f\xae\x9e\x65\x8c\x3e\x09\x3d\xfb\xbc\xca\xda\x06\x03\x8f\xab\x3f\xaa\x2f\x32\x02\xb9\x70\xb9\xf8\x98\xad\xbd\x1a\x39\x5e\xe2\xc1\x60\xcd\xe7\x4a\x5b\x35\x0c\xc3\xec\xf9\x89\xfd\x3b\x67\x0a\x17\x76\x6c\xa3\xec\x83\xe0\xd1\x15\x31\x73\x7c\xff\x15\xdf\xff\x4d\x61\xbb\x4c\x4e\xd5\xab\x1b\xc8\xea\x8e\xa7\x67\x4e\xc7\xd3\xb3\xa2\xe3\xe9\xd9\x64\x34\x96\x84\xb3\xb9\xd3\x2a\x0d\x59\xa5\x9c\x26\x83\x54\x0f\x8a\xc3\xc4\x8a\xa6\x44\x32\x9e\x52\x6a\xe1\x11\x0f\x95\x99\xc7\x10\x09\xf0\xc7\x6c\x02\x60\x12\xb2\x8a\x97\x13\xcb\x46\x74\xe1\x73\x6d\x4f\x4a\x94\xf5\x08\x8c\xfc\x7a\x17\xe3\xb3\x89\xee\x45\xe5\x16\x91\x83\x48\xc3\x87\x1b\x7c\x3f\xe2\x50\x63\x3a\x59\xe5\x43\x42\x06\xcd\x38\xae\x8e\x2d\x7f\x23\xb9\xec\xf8\x6c\x32\x18\xf8\x38\x4c\x41\xd1\x6f\x8b\x2c\xe4\xae\xad\xc0\x52\x03\x68\xcf\xa3\x54\x8a\x6a\xfa\xef\x87\x44\xe0\x19\x1f\x51\x68\xc1\x47\x99\xf1\x0b\x5f\x50\xb9\x12\x78\xb5\x3a\x72\x2f\x3d\xdb\x52\x58\x9f\xe1\x2d\xa7\x92\xff\x30\x82\xd2\x21\xa7\x0b\x16\xf5\x91\x62\x8a\x7e\x44\xb9\x8f\xf1\x2b\xd3\xdf\x07\xd5\x1d\x0f\xae\x12\xc6\x85\x39\x0e\xc1\x11\x59\x2e\xfd\x7a\x9b\x9f\xb1\x40\x41\x75\x20\xc0\x1e\xbd\x19\x6e\x94\x97\xc8\x55\xf2\xe9\xc2\xf3\x46\xf6\x6f\x79\x12\x92\xc1\x60\xec\xdd\x2c\x2e\x31\x23\x58\x48\x5e\xe4\x09\xcc\x18\xd2\x01\x1a\x1e\xa1\x33\x94\x57\xa7\xf6\xa0\x87\xee\xb8\x37\xc9\x25\xf4\xcc\x80\x9c\xcb\xe6\x2c\x97\xb9\x37\xda\xbc\x06\xb7\x65\x54\x3c\x9d\x7b\x34\x9f\x2e\xae\xae\xdc\xf1\x46\x6b\x6e\xb3\x6c\xab\x3d\x13\xe8\xb3\xc9\x76\xec\xd3\xc0\xb7\x0b\xf2\xc9\x75\xf7\x24\x54\x0a\x78\xdf\x10\xa7\x26\xd8\x15\x6b\xc9\x75\x7b\x1e\x2a\xde\x23\x6d\x17\xdf\xbf\xb4\x5d\xbc\x47\xda\x2e\xde\x21\x6d\x17\x4f\xc8\xf5\x22\x45\xac\x57\x64\x4c\xb1\xd1\x2e\xc5\xc6\x28\x6d\xa7\x2f\xc7\x51\x6d\x76\x92\x0a\xda\x26\xab\xa5\xd7\x83\x86\x7f\xd0\xf0\x0f\x1a\xfe\x57\xac\xe1\xaf\xcd\xec\x61\x6f\xa4\x2b\x05\x53\x40\xc0\xf0\x3c\x45\x11\xf6\x4f\x8f\x4f\xaf\xa1\x37\xf4\x40\x20\xe8\x1b\x7a\x87\xd9\x0b\xc4\xb1\xbf\x99\x04\xa9\x39\xce\xd3\x65\xf5\xe0\x94\x6d\xe0\x35\x67\x5b\xed\x23\x0f\x9f\xa7\xc9\xa1\xda\xd5\x81\x83\x1f\x38\xf8\xef\x92\x83\x17\x4d\xa3\x19\x03\x67\x92\x81\x33\x48\x95\xb1\x14\xf2\xfc\x05\xbd\xf0\xa0\x37\xa2\xb6\x5b\x14\x28\xee\xe1\xf3\xcd\x78\xb9\x6c\xfb\x84\x9c\xfc\xef\xac\x7b\x6a\x57\x05\xbc\x93\xdc\x7b\x8d\x1e\xa6\x26\xd8\x55\x11\xfb\x3b\xeb\x70\x16\xa8\xaa\x9f\xc3\xbb\x44\x1c\x7c\x73\x0e\x27\xc2\xe1\x44\xf8\xdd\x9f\x08\x85\xcb\x32\xbf\xe2\xa0\x0a\x8a\x35\x82\x37\x4b\xd4\x97\x77\xf0\x84\xa7\x80\x40\xd6\xdd\xf0\x90\x82\xf4\xc0\xd4\x0e\x4c\xed\xeb\x66\x6a\x4f\xeb\x8a\x20\x79\x49\x93\x27\x82\x50\xd9\x14\x1e\xe5\x88\x20\xbb\x08\x0c\xab\xf2\x19\x74\xf9\x1f\xac\xc9\x37\xc1\x17\x97\xdd\xc5\xdd\xc5\xe5\xde\x49\xbb\x72\x7a\x5d\x85\xdd\xc5\x65\xbb\xac\xab\x6a\xf4\x1e\x4e\x84\xc3\x89\x70\x38\x11\x0e\x27\xc2\x56\x5d\xd0\xbf\xeb\x69\x53\x39\x1b\x51\x98\x84\x64\xfc\x6c\x52\x30\xac\xe8\x12\xe2\xbc\x16\xd8\xd5\xe6\x85\x76\x7b\x3d\x8c\x16\xec\xf6\xe0\x76\x7b\xe0\x6c\x07\xce\x76\xe0\x6c\x1d\x38\x5b\x2d\xc5\x85\x5e\xdb\x9c\xb6\x14\x29\x69\xc2\xca\x5c\x1b\xad\xcb\x5e\xee\x1c\x56\xf3\x8f\x7c\x76\xe1\xbd\xf0\x46\xde\xbf\x7b\xd0\x3b\xf6\x32\xcf\x31\x9c\xff\xc1\xa7\xc9\x95\xda\xa5\x65\xe7\xc8\xdc\x03\xd5\xcc\x50\xbb\xd2\x4a\xa2\xfe\x6f\x9a\x10\x5f\xf6\xb6\x02\xf6\x07\xf4\x00\x58\xc1\xd6\xb0\x5b\x48\xf4\xec\x10\xa4\x85\x30\x21\x1e\x92\x80\xb3\x68\xb9\x7c\xf8\x34\x3a\x83\xf7\xa3\xb3\x95\x64\xc4\x2a\xbf\xda\x72\xe9\x45\x8b\xcb\x24\xf2\x60\x1a\x8e\x29\x7c\xf8\x34\xf2\x79\xf0\xe9\x5b\x1a\x7c\x02\xa7\xcf\xe0\xfd\x88\x07\xf7\x2b\xbb\x18\x06\x32\x0c\xc3\x64\x30\x48\x35\xab\x79\xf8\x34\x4a\xc7\xe7\x93\xe0\x13\xbc\x1f\xd1\xe0\x7e\x05\x60\x8e\x2a\x1f\x85\x1c\x7a\xff\x45\x8e\x8f\x8f\x8f\x7f\x3e\xce\x31\x18\x7c\x2a\xa1\x0a\x05\xf7\x1a\xca\x03\x20\x7b\xc8\x02\x34\x9f\xa7\xf7\xc6\x1c\x03\x53\xd0\x2f\xf0\x57\xa0\x9b\xbe\xee\x29\xaa\xc9\x4e\x6a\x0b\x6d\x53\xed\xee\x86\x25\x61\x77\x72\x8a\xcd\x7d\xaa\xe9\x75\xec\x4f\xa0\x76\x37\x2c\x81\xc8\xb4\x0f\xbe\xa6\x7b\x88\xb0\x69\x1f\x8c\x4d\x3b\xa0\x8c\xdf\x74\x4d\x75\xae\x60\x77\x12\x63\x2d\x73\x4c\x44\x8a\x1b\x5c\xf3\xd6\x94\xcc\xce\x9a\xed\xe4\x94\xd7\x10\x49\x36\xdd\xae\x84\x62\x1a\xb4\x23\x92\x5e\x5f\xa7\x1b\xa6\x8c\x2f\xb7\xdd\x49\x94\x76\x99\xfc\x46\xb3\xde\xcd\xe9\xae\xa1\x20\x33\xd5\xae\xf4\xa3\xc0\x3b\x20\xf0\x06\x93\xd3\x84\x0f\x11\xa1\xe4\x7e\x56\xc9\x98\xf9\xf8\xfc\x69\x09\x7f\x6e\x3b\x6e\xcf\x2b\x6b\xa4\x9e\x0e\xc9\x59\x9f\x95\x93\xb3\xea\xb0\x86\xe7\x51\x84\x39\xa7\xec\xf5\x4b\x0f\x6c\x29\xeb\x6a\x86\x9e\x14\x5f\xa3\x68\x9d\x47\xea\x46\xb8\x79\xa3\x7a\x0d\x49\x53\xa2\xb9\xaa\x1d\x40\x14\xe7\x0c\xbd\xf7\x8b\x14\x73\x4f\xa9\x49\x52\x1b\x38\x09\x45\x16\x5a\x21\x95\xcf\x40\xb0\x64\xe6\x83\xa3\x5a\xe0\x08\xf4\xf4\x87\xf3\xc4\xf6\x59\xc0\x11\x19\x0c\xc8\xea\xa8\x1c\x25\xa6\xdb\xe3\xdc\x25\xaf\x00\x6e\x53\xdf\x93\xe0\x2a\x21\x71\x53\xbe\x67\x49\x84\x23\x15\xdd\xd1\x6c\xf4\x20\x3d\xac\x11\x82\x21\xc2\x13\xf9\x9d\xa1\xa0\x3d\x22\xab\xcb\xed\xf6\x8d\x01\x64\x83\xff\x48\xbb\xb3\x81\x42\xa3\x76\x66\x50\xcb\x57\xd6\x7e\x1e\x3b\x53\x97\xed\x3a\x22\x93\xee\xe9\x4a\x25\x70\x07\xc4\x2d\x48\xd4\x5d\xc8\x55\xd0\x7b\x87\x34\x35\xc5\xce\x58\x5b\x90\xa8\x1b\xda\x90\xe8\x2d\x03\xda\x66\xfb\x88\x42\x35\xdd\x3e\x58\x44\xa2\xc3\x29\x7e\x87\x71\x95\x15\x1e\x8c\xb3\x07\xe3\xec\xc1\x38\x7b\x30\xce\xf6\x70\x44\x10\x49\x74\xd3\x98\xc2\x58\xbf\x7c\x9c\x2b\x82\xee\x23\x50\xec\xea\x23\x6d\xf0\x45\x58\xc3\xe7\x24\xb7\x61\x3c\xa2\xac\xef\x91\x51\x68\xb8\x67\x87\x46\x71\xca\x1d\xbb\xcd\x9b\xb4\x1e\x1c\x0b\xd2\xdf\x68\xa0\xdb\xec\x24\x1a\x5b\x27\xfb\xf7\x4a\x0c\xce\xe1\x90\x3c\x1c\x92\x87\x43\xf2\x6b\x3b\x24\x7b\xba\x20\x1f\x9b\x03\x8f\xbf\x9a\xcd\xc5\xbd\xcf\xc0\xc5\x78\x62\x0e\xc1\xe7\x3e\x02\x81\xe4\x1b\x3f\xde\x6f\xe8\x8c\xac\x1b\x3f\x9d\x23\xf2\x62\x3e\xc7\x4c\x65\x45\xe9\x79\x22\x66\xed\x76\x92\x93\xaf\x39\x10\xf3\x09\x77\x3d\x0f\x6d\x8b\xf6\x13\x82\x25\x5f\xaa\x7c\x04\x26\x11\x8d\x1b\x85\x2f\xf3\xb6\x41\xfa\x2a\x8a\x58\x06\x32\x58\xb0\xe4\xff\x4f\x13\xf9\xba\x57\x7d\x87\x05\x4b\x87\x57\xee\xfa\xd3\x0d\x36\x35\xdb\x62\xdf\xc8\x88\xa5\x3f\xf5\xa8\x44\xad\xc1\x5b\x09\xc8\x95\x9d\xab\x55\xa0\x32\x8d\xf6\x0c\x81\x76\xaa\x1d\xbb\xd4\xe0\xad\x08\x74\x16\x39\x5b\xc3\xc6\xf6\xae\xd0\x59\xf7\x32\x67\xed\x45\xce\xee\x92\x34\x1d\xaa\x23\x9d\x3a\x23\xcb\x19\x96\x9a\x40\x1d\x67\xc5\x66\x3b\x89\xbe\xb6\x69\x8b\x69\x63\x61\xf4\xc6\x5d\x66\x5b\xed\xe4\x84\xd7\xd0\x8b\x9d\x6c\x57\xaa\xd1\xf0\xad\x48\xfc\xe4\x66\xf2\x82\x2d\x1c\x16\xeb\x4f\xfb\xc7\xdf\x3f\xf5\x60\xee\x9f\xd6\x70\xf6\x84\x24\x22\x41\x69\xf2\x0f\x89\x07\x34\x9f\x0f\x6f\x31\xe3\x4d\x4a\x73\x9a\x0c\x0b\x20\xc5\xb6\xc3\x2b\x24\x55\x88\xfb\x52\xb6\xc6\x88\x92\xab\xe4\xfa\x14\x93\xdb\x84\x51\xa2\xaa\x48\x56\xb0\x6c\xdd\xcb\x18\x44\x47\x8f\x16\x3f\x20\xb1\x0f\x82\xe7\xef\xde\x29\xfd\xa6\xf4\x44\xe9\x37\x52\x34\x2e\x3d\x34\x93\xd1\xfa\x15\x0d\x1f\x24\xd0\xc8\x7b\x3e\x9f\x1f\xff\xcd\x62\x22\x9f\xe7\xa8\x5c\x3f\x42\x19\x78\x0a\xc2\x07\xed\x80\xe3\x88\x12\x81\x12\x82\xd9\x30\xc6\x97\x8b\xeb\x21\x8a\xd1\x5c\x60\xb7\x44\x82\x39\x4d\x6f\x31\x3b\xb5\x7f\xf0\xd3\x28\x45\x9c\x27\x51\x63\x2f\x4f\x96\xd3\xc9\xe0\xa5\x71\xf4\x05\x1c\xd5\x1c\x23\x8b\x89\x1d\x97\xcb\x62\x8a\xc8\x23\x1c\x30\x7c\x9d\x70\x81\x99\xdf\xd4\xf7\x68\x86\x12\xe2\x15\xd0\x0e\xb1\x91\x1f\xdb\x9a\x78\x72\xcc\x7c\x8e\x22\xec\x41\x0f\xcd\xe7\x69\x12\x21\x39\x30\xfd\x1a\xac\x56\x95\x8b\x72\x47\x94\x50\x6d\xe9\x18\x4d\x53\xcc\x86\x69\x72\x85\xa3\xfb\xa8\x6b\x9a\x66\xf0\xb0\x89\x6e\x95\x7f\xdc\xe1\x5b\x00\xb5\x24\xad\xcb\xa2\x31\x4c\xe7\x98\xf8\x0f\x0c\x73\x2c\x5e\x64\xc3\x1c\x55\xf7\x9a\x12\xa1\x7f\xe3\x0b\x29\x99\x6b\x7f\x48\xf9\x04\xe6\xee\xa9\xd0\x91\xba\x54\x76\xcf\xb1\x18\x0c\xcc\x1f\xbe\x50\x32\xb7\xa1\x8b\xc2\xc2\x8b\x2a\x42\xdb\xf6\x42\xcd\xed\xab\xcd\x2b\xac\xa5\xf5\x4e\xf2\xf0\xce\x78\x88\x91\x40\xfa\x3f\x4e\x9e\xf0\xe7\x1c\xea\x54\x51\xfb\x29\xc7\x62\x31\xff\x0a\x26\xed\x5a\x75\xfd\xbc\xf0\x43\xcf\x76\x98\xed\x78\xd7\x51\xb2\xad\xdb\x03\xc3\xec\x8a\x23\x29\x90\x79\x76\x7e\xac\xda\x2d\xfb\xe5\x19\xab\x39\x0e\x0b\x9c\x68\x78\x9d\xd2\x4b\x94\x36\xa5\x3b\x6e\x3f\x40\x4b\x19\x8f\x3b\xf0\xdb\xe4\xca\x3f\x39\x57\xce\x33\xf6\x0c\xd4\xdf\x7d\x9e\x8f\xe9\xdf\xd4\x90\x6c\x9d\xf2\xb2\x7d\xf7\xc4\xf2\x84\xbb\x84\xc4\xf4\x0e\x90\x50\xff\x71\x84\x53\x8e\x8f\x1b\x60\xf5\x1c\x01\x09\xf5\x1f\x0a\xb6\xc9\x6e\xcc\x71\x7a\x65\x8d\xa2\x24\x94\xbf\x56\x46\x3e\x68\x1f\xf2\x11\x0b\x6b\x46\x54\x74\x81\x8c\xc9\xc1\x5a\x49\xd5\x01\x7a\x75\xef\xe7\xdd\xcd\x14\x61\xe8\xc2\x0e\x00\x92\x31\x9b\x2c\x97\xbe\xfc\x27\xc4\x30\x67\xad\x52\xab\x78\xa9\x95\x8a\x51\xc9\x32\xd9\xc6\x51\x63\x9c\x62\x81\x8f\x65\x87\xab\x15\x00\xab\x47\x9e\x04\x0d\xce\x54\x39\xd1\x36\x13\x59\x91\x86\xfb\xd2\xee\x55\x8a\xf8\x74\x38\xc3\x9c\xa3\xeb\xe6\xfc\xdc\x0e\x82\x2d\x0a\x8f\xaa\x13\x53\x1a\xb0\xd4\xe1\x90\xce\xe5\x48\x6b\x46\x82\x0d\x37\x75\x01\x5d\x0e\xc3\x64\xc1\x7c\xda\xbe\x63\x20\xcb\x09\x6f\xb9\x7c\x58\x41\x14\xb2\x40\x8d\xfd\x67\x3d\xf4\x97\xfa\x1d\x87\x34\x44\xcb\xe5\x78\x02\x79\x48\x8d\x7c\x92\x50\xf2\x93\x12\x8b\x13\xcc\x61\x12\xfa\x05\x09\x15\xf8\x08\x1c\xf1\xc1\xc0\x46\x7d\x1c\x25\x8e\x36\xc1\x15\x65\xaf\x50\x34\x2d\xb8\x9d\x09\xf0\x90\x49\x3f\x02\x7a\xc5\x81\xc8\x95\x30\x06\xb5\x51\x65\xb5\x24\x3b\x5e\x69\x7b\xac\xa1\x92\xea\x72\x16\x48\x83\xad\xda\xad\xb3\x65\xd2\x50\x89\x91\xdd\x04\x21\xdf\xf1\xd3\x9b\x5b\xc7\x43\x14\xa5\x8e\xa7\xca\x23\xd1\xf1\xdc\x94\x9b\xaf\xbf\x50\x55\xf6\xeb\x8f\x13\x22\x30\xd1\x2e\xc3\xb5\x77\x44\xcb\x84\x35\x5a\x83\x0c\x22\x48\x21\x87\x49\x81\xad\xa6\xd6\xc6\x9e\x86\x4a\xfe\x91\x82\xf8\x7b\x25\xb3\x32\xb5\xbb\xfc\x1c\xe9\x12\x0f\x00\x2e\xc2\x87\x9b\xdb\x51\x46\x34\x10\x45\x69\x7e\x64\x40\x35\xbf\x11\xcb\x7e\xeb\x79\x8d\x50\xf6\x40\xce\x67\x44\xb3\x9f\xd9\x3c\x46\x3c\x7b\xa6\xc7\x3f\x4a\xf2\x73\x28\xcd\xd8\x94\x1c\x44\xed\xea\xba\xe8\x57\xa9\x18\x96\xc2\x03\xd4\xf7\x37\x27\x42\x5d\x4a\x68\x08\x5e\x81\x80\x8b\x31\x9e\xa8\x27\x00\x40\x4f\xe1\x3a\x0c\x43\xbc\x5c\xda\xfa\xff\xf2\x17\xa8\x27\xef\x56\x4c\x10\x83\x23\x11\x44\x29\x46\xcc\xe9\x38\x49\x82\x88\x61\x24\xb0\xf6\x9f\x84\x2a\xfe\x7c\x96\x88\x06\x58\xa9\xa8\x27\xdc\x38\x5b\xda\xbb\x35\x25\x6a\x3c\x8e\x41\xa4\x6e\x7e\xba\x28\x49\xb6\x69\x71\x4f\x2c\x3a\xec\x89\xfc\xc7\x50\xee\xe5\x64\x18\xa1\x34\xbd\x44\xd1\x4d\x2f\xce\xa9\x9a\x9e\x32\x1c\x27\x0c\x47\x62\x38\x45\x24\x4e\x3f\x8b\xe4\x53\x1d\xf3\x25\xbe\xa2\xcc\x3e\x77\x2b\x7b\x18\x3c\x14\xb9\xa8\xca\x56\x5f\x7c\x00\x72\x0d\x2e\x50\xdd\x0c\x06\x95\x07\x41\x9c\x28\xd3\xd6\x7b\x33\xdf\xd7\x39\x42\x97\x4b\x5f\x0d\x18\xb3\xf7\x18\xc5\x09\xc1\x9c\xfb\xa0\xa0\xef\x6b\xcc\xf8\x46\x2a\x09\xf4\x5d\xae\x5f\x38\xa6\x71\x80\xe2\x5b\x44\x22\x5c\x68\xbf\x02\xa0\xac\x03\x76\x39\x07\x6b\x0b\xcb\x31\xaf\xdb\x4b\xf4\xc2\x5d\x52\x2a\x24\x9b\x98\x9f\x66\x40\xe6\x8d\x5e\xed\x85\xe6\x20\x9f\x6d\x3d\xb3\x51\xa0\x2b\xa9\x24\x3f\x6a\x35\x4d\xff\xea\x4c\xbb\x56\x3a\x67\x3e\x21\xe0\x2b\xc6\x22\xb9\x89\xfa\xe0\x07\xcd\x20\xdf\xa2\x19\x06\x0f\x65\x0b\x0a\x86\x4e\x28\x73\x79\x98\xb1\x56\xef\x5b\x17\xd8\x51\x6e\x08\xc8\x34\x26\x17\x9c\x72\xc3\x79\xec\x42\xaf\x5f\x60\x03\xe2\x5c\xde\xbe\x26\x31\xc8\xb6\xb5\xfe\xa8\xb4\xfe\x9b\xee\x5b\xb5\xc6\x76\x4a\x18\xf8\xac\xbc\x6d\xa5\x54\xa4\x80\x8a\xcb\x5a\x34\xd2\x98\xb2\xf5\x76\x10\xd9\xa2\xea\xdf\xe5\x2d\xd8\x45\xde\x48\x6e\xef\x87\x11\x8d\xf1\x2c\x61\x8c\x76\x4d\x45\x22\x59\x80\xf3\xf4\x56\x26\x75\x82\x89\x18\x55\xfa\x05\xd9\x99\x8a\x84\x60\xc9\xe5\x42\xe0\x1f\x13\x12\x27\xe4\x9a\x8f\xc6\xca\xb4\xe4\x4d\x1e\x7d\xfa\x34\x16\x71\x78\x94\x5d\x85\x26\x71\x34\x9c\x33\x7a\x9b\xc4\x55\x2b\x82\x26\x50\xfb\x8e\x9f\x52\xb4\x10\xd3\x67\x6a\xde\x5b\x31\x1e\x16\xe6\x86\x9a\xe6\xe6\xa9\xf1\xdd\x25\x62\xaa\x6b\xe9\xb2\x92\x6e\xa7\xef\x8b\x15\xdd\x12\x78\xb9\x48\xd2\xf8\x57\x96\xba\xcc\x0d\x52\x4c\xb9\x44\x1c\xff\xca\xd2\x15\x94\x2b\xe5\x90\x7b\x14\x90\x14\x48\xf4\x82\x01\x48\xf4\x23\xdb\xaf\x0f\x4a\x0e\x7c\x0a\x72\x4e\xe7\x8b\xb9\x07\x02\xb5\xf8\x04\x8e\x4d\x92\x22\xb9\x8d\x15\x92\x30\x08\xc4\x14\x13\x97\x9c\xf2\x20\xb1\x49\x59\xf2\x0f\x45\x5c\x1f\x54\xe2\x23\xac\x33\x14\xc1\xd2\xab\x17\x34\xc6\xa3\x18\xcb\x1e\x7f\x7d\xff\xfa\x85\xa5\x41\x15\xe6\x1d\x63\x00\xed\x02\x8d\x84\xd2\x19\x61\x94\x52\xee\xb0\xac\x56\x06\x1d\x30\x3c\xa3\x02\x7b\x40\xee\x49\xa5\xba\xbb\xac\x79\xaa\xaf\xcc\xa9\x4b\xff\xf4\x95\x49\x2f\xdb\x30\xc8\x6e\x18\x6b\x9b\xd5\x07\x48\x36\xaa\xbc\xec\x20\x80\x4c\xab\x16\xb4\x44\xb2\xa8\xaf\x59\x5c\x17\x05\x5c\xb0\x54\x23\xc5\x59\x55\x30\x6f\xaa\xef\xea\x5d\x05\xe7\xe9\x42\x24\xe4\xfa\xf4\x2e\x49\xe3\x08\xb1\x5a\xe9\xe0\xc7\x2b\x94\x0d\x54\xcd\x2a\xea\x9d\x29\xfb\xc7\x4b\x48\x05\x0f\x2b\x97\xd5\x56\xcf\xf5\x27\xca\x1a\x16\x78\x9d\x79\x21\xf3\x0a\xd2\x62\xbb\xfa\xa8\x3a\x42\x2f\xcc\x34\x55\x25\x4f\x2c\x99\x59\xbc\x88\x70\x51\x95\x94\xb8\xa8\x06\x3c\xe1\x31\x99\x5c\x88\x31\x99\x84\x2e\xe2\x1c\x93\x09\x18\x09\xeb\x90\x04\xc5\x0a\xc0\x87\x15\x18\x61\x6b\x0e\x7e\x24\x0d\x98\xb2\x64\x0d\x6b\xae\xdf\x9e\x5e\x25\xa9\xd0\xe7\xb3\x4b\xc1\xab\x00\xd5\xb5\xc9\x0a\x80\x43\xad\xac\x40\xd4\xf4\xcb\xca\xfb\x8a\x6e\x5b\x79\x5b\x55\x72\x2b\xaf\x89\xe4\x28\x2d\xef\x4f\xcd\x79\xb9\x0e\xce\x56\x5f\x6a\xeb\xaf\x43\x57\xc4\x5e\x98\x54\xb7\x56\x09\x4e\x55\xa8\x5c\xa3\x40\xc3\x14\x2e\x60\x04\x63\x78\xf5\xd8\xfd\x36\x77\xef\xb7\x99\xdc\x6f\x57\xf9\x7e\x2b\xec\xb3\xb9\x65\xff\x57\x6d\x1a\x7b\x56\x07\x6f\x2e\x09\xd7\x2a\xda\x65\x51\x66\x06\x8c\xce\x5e\xde\xdf\x33\xa0\x14\x7b\xff\x0c\xf2\xd2\x43\xa3\xcf\xfb\x67\x90\x95\x9e\x2b\xb5\xde\x3f\x83\xa8\xf4\xf4\xe6\x56\x3e\xa3\xa5\x67\x53\x8c\x52\x31\xbd\x7f\x2b\x4f\x08\xff\x0c\x26\xa5\x97\x0b\xb2\xf6\xb5\x99\xd8\x6b\xe3\xed\x28\x01\x16\x25\x00\x49\x20\x76\xf6\xfe\x19\x4c\x5d\xad\xe5\x8b\xa8\xdc\x4a\x1b\x1c\xfc\x33\x18\x17\x9f\xaf\x8e\xae\x32\x1e\x96\xd7\x01\x74\xb9\x6e\xcd\xc7\x78\x22\x55\x75\xb9\x2a\xd3\x12\x93\x98\x17\x99\xc4\xb4\x0b\x93\xa0\xd5\xfc\xd4\x05\x52\xa6\x4c\x9c\x4a\x81\x0e\x29\x17\xcd\x06\x7a\xaf\x02\x45\x53\x2c\x75\xdc\x75\x20\x0d\xcc\xa6\x0a\xe6\x60\x37\x55\x90\x3a\x3b\xa9\x42\xb8\x58\x52\x15\xe6\x89\x2c\x58\x0a\xb7\xca\x82\x55\x20\x85\xc2\x5e\x00\x50\xe1\xaa\xb2\x15\x00\x2c\xed\x1d\x56\x7c\x93\x6d\x1d\x54\x7c\x6a\x37\x03\x2d\x3e\xcc\x77\x0e\x2f\x3e\xce\x69\xaf\x40\xea\xa0\x68\xf2\xca\x11\xe3\x22\xbd\x85\x21\xbd\x9d\xb1\x12\xe9\xad\x39\xec\x79\x17\x56\xd4\x47\xb9\xa0\x0c\x0f\x2d\x6d\x3f\xf5\x95\x7f\xc3\x2d\x98\x70\xdd\x82\x35\x2a\x27\xcd\x93\x9e\x32\x7c\xd5\x10\xe5\x6c\x5e\x9d\x5a\x90\xcf\x33\xd3\x6c\x40\x0d\xda\x72\xc3\xcd\xd5\x4f\x88\x8b\x1f\x29\xcd\x0a\x19\x66\x4d\xac\x8b\x4b\xe8\x3d\xf7\xc2\x30\x24\x81\x40\xec\x1a\x8b\x40\xa0\x6b\x29\xa8\x5d\xd8\x07\xd5\x8f\x18\xc9\x9c\x8b\x8a\xa8\xce\x85\xef\x21\x4f\xfb\x8e\xe3\x10\x07\x73\xc4\x30\x11\xaf\x52\x2c\x05\xc2\xef\xf1\x60\xe0\x3d\xf7\xa4\x24\x67\x3f\xf0\x3d\xa8\x41\x1d\xe5\x11\x1d\xf6\xeb\xe0\x88\x0d\x06\x04\xdf\xe5\xb7\xb8\x3e\x56\xa6\x88\x60\x86\xee\x2f\xf1\x5f\xb4\x81\x0d\xac\x8e\x62\x1a\x29\xd1\x33\xb8\xa4\xf1\x7d\x80\xe2\xf8\xd5\x2d\x26\xe2\x8d\xd4\x13\x88\xf2\xe2\x48\x13\xc9\x4d\x09\x68\xbf\x3b\x33\xa3\x28\xf7\x28\x55\x98\x5b\xdc\xd8\x69\xab\x40\x2c\xf7\x7a\xcd\xb3\xa3\x3b\x4d\xca\xef\x3a\x6a\x57\x16\xb9\x31\x26\xb7\x6d\x85\x67\x15\xdb\xc4\xe4\x16\xf8\xde\x8b\x5f\xde\x7e\xf8\xf5\xcd\x6f\xbf\xbe\xfe\xed\xe5\xeb\x0f\xcf\x7f\x7c\xf3\xea\xb7\xf7\xaf\x9e\xbf\xf9\xf8\xfa\xe7\x57\x52\x4d\x1b\x4f\xac\x26\x35\xf6\x32\xc6\xaf\xce\x88\x49\x53\x7a\xaf\x8c\x37\x7b\x0c\xcf\x29\x4f\x04\x65\xf7\xa7\x99\x42\x86\xa1\x77\x9a\x99\x34\x3c\x00\xb5\x3e\x5d\x82\x95\x04\x5b\x80\xb1\xc7\x3e\x1f\x3d\x44\x54\x31\xf2\x86\x9e\x25\x5e\x0b\x19\xb5\xc6\xf9\x40\xf4\x0d\x50\xde\x8f\xe2\xef\xc5\x4e\xe4\x83\xe2\x27\x0d\xaf\x2f\x82\xe8\x47\x05\xa0\xd5\x6a\x02\xdc\x37\x60\x99\xb6\x62\xcd\x05\xda\x35\xc5\xea\xaa\xd9\xb0\xec\x48\x33\x47\x73\x4d\x93\x6b\x0e\xc0\x42\x13\xdd\x33\x00\x99\x45\x42\x92\x51\x51\xa7\xca\x7a\xe5\xae\x61\x66\xbb\x3e\x07\x1b\x93\xc9\x51\x61\xe8\x4a\x55\xbb\xa8\x98\xc9\x8a\x23\x50\x0f\x00\x24\xb0\x3e\x3c\x06\xc0\x28\x6f\xb9\x6e\xc2\x0d\xad\x57\xfa\xff\x9e\xea\x2a\xba\xf7\x4d\xb3\x6b\x2f\x4e\x31\x8a\x87\x97\x8c\xde\x71\xbc\xce\xca\xf7\xf8\x43\x20\x7f\x60\x0e\x82\xf2\x97\xdd\xae\x6d\x6a\x33\x74\x9e\x8b\xd5\xaa\x3a\x9b\x33\x24\x93\x51\xf7\xbb\x0d\x06\xe2\xb2\xa9\xa6\x5f\x20\x1f\x95\x7b\xb9\x12\xcb\x57\x3d\xd7\x4e\xaa\x85\xab\xd7\xc6\xf1\xb9\x62\xc3\x1a\xa2\x05\x3b\x06\xbd\xd1\x3c\xe8\x8d\x6c\x1e\xf4\x46\xea\x41\x6f\xa4\x2d\xe8\x8d\xe4\x41\x6f\xa4\x63\xd0\x1b\xe9\x1f\xf4\x46\x40\x79\xa6\x15\x6c\x75\x0f\x79\xe3\x73\x86\x51\xfc\xe5\xa2\xdd\xe8\x0e\x86\x84\xb7\x0b\xee\x3c\xac\x1c\xdf\xd9\xd0\x8a\xf5\x35\x7c\x4f\xef\xdb\xc0\x03\x8e\x2a\xe8\x10\x15\xe6\xc0\x7e\x78\x76\xc1\x86\xcf\x46\x67\x00\xd2\xf0\xd9\xf7\xf4\x4f\xec\x7b\xfa\xed\xb7\x00\x8d\xe9\xf0\xd9\xa4\x70\xa1\x42\xb3\x99\x91\xc1\x40\x94\xbe\x15\x47\x1e\xb8\x18\x67\x9f\xcc\x98\x39\xc8\x64\x04\x04\x46\x63\x51\xf8\xb5\x82\x49\x58\x73\xf1\xcc\xa4\x2e\x49\x22\x29\xd2\xe6\xc0\x11\xc9\xca\x0a\x7a\xa7\x8c\x52\x31\xd4\x77\xef\x9e\x14\x17\xf4\x5f\xa0\x00\x91\xbf\xc4\x71\x22\x4a\xaf\xae\x68\xaa\x2e\x15\xbc\xd3\x84\xc4\xf8\x93\x07\x56\xfa\x54\xb5\xa7\xaf\x3e\xc6\xf4\x24\x4e\x8b\x76\xe2\x2c\x84\xb5\xf1\x22\x26\x73\x5b\x2d\x34\x53\x72\x69\xd5\x4b\xd8\x80\x39\x3e\xc2\x40\x21\xbb\x93\x52\x7c\x1d\x06\xd7\x71\x25\xd7\x90\x67\x66\x27\x97\xc1\x9b\xd4\x2d\xa5\xc5\x58\x69\x3c\x16\x93\x52\xde\x2a\x4b\x39\xa2\x4e\x1f\xa4\x48\xe3\x3f\x9c\x5f\x88\xe1\xb9\xa4\x0f\x16\x9e\x7f\xcf\xfe\x24\xbe\x67\xdf\x7e\x0b\xc8\x98\x0d\xcf\x8b\xf4\xc1\xca\x19\x05\x1c\x92\xae\xcf\xcb\xa9\x4c\xc7\x65\xc3\x2f\xc4\x93\x02\xf6\x00\x58\x41\xac\xcd\xb4\xc0\xe5\x31\x3c\xf6\x66\x34\xc6\x3a\x54\xcc\xcb\xec\xd0\xbd\x91\x50\xb8\x6c\xc9\x06\xe2\xde\x47\x8a\x79\x9a\xd3\x30\x0c\x43\x3c\x18\x9c\x88\xc1\xc0\x3e\x91\x82\x51\xd9\x8c\x6d\x64\x5e\x63\x05\xf0\xfe\xc7\x5b\x15\xd8\x48\x0d\xe3\x45\xae\x42\x7e\x38\xbf\x20\x1a\xe3\x34\x3c\xff\x9e\xfe\x89\xa8\x1d\xc9\xc6\xb4\x8c\x71\xba\x45\x8c\xb3\x32\xc6\x8d\x51\xbc\x45\xe8\x34\xa7\x7f\x2e\x69\x16\xa9\x73\xb4\x83\xb4\xa6\xfd\xad\x85\x26\x24\xe2\xa4\xb9\xc2\x8e\xda\xd3\x19\xe8\x88\xc8\xfd\x1c\xfc\x4a\x6d\x33\x97\x4e\x64\x25\x4d\x6a\xae\xf5\x4b\x3a\xea\xdb\x0f\xef\x9e\xbf\x78\xf5\xe1\xb7\x57\x6f\xa5\x9e\xfa\xd2\x03\xe0\x61\x2c\x4f\x25\xa9\x42\x08\x91\x90\x6b\x29\xb5\xc6\x51\x90\x99\xfb\x78\xa0\x8e\x87\xea\x43\x73\x7a\x4c\x5a\xfc\x17\x6b\x1a\x0f\x80\x86\x0f\xf0\xf7\x78\x4e\x0b\x9e\x02\x05\x35\xd1\xf0\x7c\x4c\xa4\x14\x13\x7b\x35\x3f\x83\x51\xfd\xf8\xdc\xa0\x57\xc9\x2d\xab\x1d\x17\x3c\x6a\xbd\x0d\xba\x3c\xd2\x16\xd8\xd3\xff\x0a\x4e\xaf\x8f\x8a\x7a\x64\xd9\x64\x9a\xdd\x1b\x82\x40\xdf\xb4\x38\xdd\xe1\x70\x4d\x70\x58\xad\xc9\x07\x8e\xf3\xe3\x3b\xf8\xcd\x78\xda\x06\x73\x24\xa6\x1e\xf4\x0a\x67\x7b\x0a\xbd\x53\xdd\x91\x5b\xeb\x96\x2c\x17\x36\x1e\xdf\xb5\xc5\xd4\x3e\x40\xe0\x81\x84\x79\x06\x6f\x91\x8b\x0d\xc6\x41\xa5\x5b\x6f\x52\x0e\xc8\x54\x67\x34\x18\x24\x3e\x86\x08\x12\xb0\x52\x7e\xe7\xc2\xfd\x85\x7e\x63\xf5\x31\x64\x52\x0e\x57\x2b\x9f\x52\x7a\xb3\x98\xe7\xdb\x26\xa6\x33\x89\x28\x4a\x85\x0f\xb4\x0b\xf9\x9b\x84\x8b\x00\xc5\xb1\xef\x4d\x11\x1f\x1a\x6a\x90\xa2\x71\x6d\x57\x3d\x7f\xf1\xa6\xb0\xa5\xa4\x30\xd3\xb7\x77\x14\xa5\xdc\xa4\xfc\xdc\x96\xc1\x99\xe3\x54\x3b\x1b\xf7\x32\x72\x6d\xd9\xde\x5a\x18\x44\xb3\xad\xf5\x64\xad\x2d\xed\xf9\xdb\x17\x7f\xf9\xe5\xfd\x6f\x1f\x5e\xbd\x79\xf5\xe2\xe3\xeb\x5f\xde\x7a\x99\x2f\x6a\x03\x9a\x21\x0b\xeb\x3b\x44\x5b\x66\x33\x8b\xe9\x85\x14\x97\x0b\xb6\x56\x88\x55\xaa\xfc\xba\xc0\xc3\x7c\x9c\x99\x4f\x93\x2b\x5f\x2b\xb8\xf9\x5d\x7a\x70\xb9\x10\x82\x92\xc1\xe0\x59\x98\xff\xca\x12\x76\x04\x31\x12\x88\x63\x11\x4c\x19\xbe\x2a\x66\x1e\xf5\xb5\x66\x80\xc5\x73\xeb\x77\xe4\x7b\x12\xc6\x83\x24\x73\xe3\x16\xc1\x75\xfd\x3d\x38\x42\x52\xe3\x2a\x75\x1c\x22\x28\x8c\x4d\xb5\x06\x0e\x56\x2b\x48\x3b\x4d\xcb\x39\xe4\x93\x8a\xb7\x42\xfd\x58\xfc\xe1\x6c\x30\xc8\xb7\x6d\xc1\xab\xfe\xa2\xf8\x63\xa4\xdd\x36\x21\xd1\xb3\xfa\x60\xa9\xc2\x97\x8b\x75\x72\xae\x12\x00\xb1\xd0\x4b\xf8\x0b\x9a\xa6\x68\xce\x71\xec\x25\x4a\x7d\x3a\x21\x41\xe1\xe1\x60\x40\x32\xbb\x80\x0f\xec\x08\xce\x4d\x62\x1f\x0c\x1e\x56\x99\x4a\xe9\x83\xc1\x60\x0d\x92\x57\xed\x56\xee\x19\x5d\x70\x1c\xd3\x3b\xe2\x41\x04\x60\x27\xe8\xc5\x5c\x1d\xbb\x5b\xb4\x8a\xaf\x1b\x44\x73\x03\x33\x8e\x27\x36\xa4\xeb\x68\x2d\x7d\x96\xad\x77\x9d\x34\x2e\x3b\x8d\xce\x93\xf6\xe9\x6c\x8e\xc4\xe9\x35\x16\x36\x51\x87\xfd\xee\x1a\x90\x34\xb9\xcc\xbd\xa8\xf5\xa3\x98\xa7\x43\xfc\xc9\x69\x54\x83\x68\x5b\x1c\x8e\x56\xfd\x6e\x8b\xb8\x68\x66\x75\x4d\xce\xb4\x4e\x3f\x5a\xfd\x9d\xb2\xf0\x80\xc1\x11\x0d\xe4\x01\x27\x49\xeb\x63\xa6\x45\x78\xf9\x5c\xb3\x28\x31\xe5\xaf\x54\xb8\x94\xa5\x20\x40\x0b\x31\x95\x22\x5c\x84\x04\x8e\x95\x74\xc9\x8f\x4e\xaa\xb9\x83\x06\x83\x9a\x03\x2f\x80\x34\xa0\x57\x57\xf5\xaf\x12\x65\x63\x5e\x75\x72\x03\x72\xd1\xd0\x1d\x4a\x6f\x32\x9f\x33\x27\x15\xa5\xc9\x65\x21\x14\x5a\xf9\xa9\x7c\x61\x1f\xeb\xea\x98\x1b\x56\xbb\xc5\x7b\xda\x6a\x1a\xe8\x38\x21\xc7\x2c\xc8\xfa\x03\x85\xbf\x83\x29\xe2\xbf\xdc\x91\x6c\xe0\xc8\xae\x8d\x3e\xf7\x80\x4e\xaa\x5e\x76\xdb\xfb\x16\x75\xf2\x78\x9f\x25\x9f\x12\xa2\x9c\x97\x54\x5a\x09\x93\x40\xbf\xd1\x1b\xcf\x80\x2b\xd0\xcb\x94\x46\x37\x09\xb9\xce\xda\xb4\xdc\x94\xf5\xb3\x5c\xb3\x3d\xb0\x5c\xb3\xdf\x8d\xe5\x9a\xed\xb7\xe5\x9a\xed\xa0\xe5\x7a\x4d\x0e\xb5\x9f\xe5\x2e\xb3\x21\x53\x79\x78\xd9\x83\xd5\xcd\x9b\x2a\xac\x5a\xd5\x1d\x40\xb3\x25\x47\x0f\x0b\xde\x9c\x60\xcb\xc2\x67\x01\x57\x0f\xda\x87\xe7\xe1\xad\x4d\xa6\x30\xca\xe3\xc2\xf3\x92\x04\x23\x89\x45\xf8\x01\x47\x0c\x8b\xd7\x2f\x47\xa5\x6c\xfc\xaa\x60\xc1\x0a\xac\x60\x4a\xaf\xe9\xc2\x19\x3a\x5e\xfa\xb2\x8e\x98\xf5\x3d\xed\x4e\xa5\xbd\x9f\x49\x9d\x7f\x16\xe4\x4d\xc8\x94\xdd\xb0\x64\x4f\xb9\xc2\x38\xbe\x44\xd1\x4d\x80\x3f\xe1\x48\xca\x77\x7e\xfd\xbb\x4c\x2a\xbf\x34\x50\xfd\xfb\x75\xbf\xee\x02\x9c\x0a\x99\x79\xa9\x06\x66\xc4\x25\x06\xa5\x5a\xac\x6f\x52\xa1\xa7\xba\xf0\xd4\x15\x79\x7b\x38\x83\x61\x98\x6a\x2d\x25\xaf\x34\x11\x12\x9f\x29\x33\x5b\x89\x90\x1e\x74\x68\xd7\xcf\x34\xc6\x69\xbf\xb8\x66\x6d\x04\x95\xe8\x4b\xf4\xde\x96\xdd\x81\x15\x8c\xb1\xa4\xb3\x5b\x24\x70\xaf\xfe\x8e\xb4\xc3\x73\x25\x50\x31\xb7\xf6\x43\x2f\x11\x78\xa6\x34\x10\x0f\x1c\x95\xe8\x2b\xe1\x6f\xf1\x9d\x56\xad\x4d\xda\xa7\xf7\x38\xa2\x2c\xf6\xbb\xe5\x86\x33\xab\x61\x0c\x36\xdb\x3f\xf0\xb6\xa5\x35\xaf\x67\x03\xab\x0e\x65\x3f\xcc\xb8\x8d\xab\x05\xe2\xc3\x19\x22\xf7\x4d\x93\xd4\x5e\xbf\xb3\x84\x24\xb3\xe4\x1f\x9a\x40\xd6\x1f\xe6\x30\x53\x14\xcb\xae\xe7\xf2\xd4\x31\x4f\xae\xb1\x28\x88\x2c\x9a\x53\x73\x2b\x0d\xad\x83\x91\xdd\x08\x95\xd2\x87\xd5\xed\x62\xa2\x5a\xf9\xae\xdc\xc5\x4b\xcc\x23\x96\xcc\x05\xd5\x0c\x3f\xc8\x73\x59\xac\x00\x00\x50\x67\x88\x35\x44\x49\x20\x03\x79\xe2\xd6\xf2\x51\x51\xf0\x97\x17\x52\x88\xc0\x17\x4d\x2b\x2b\xec\x72\x12\x58\x4e\x9c\x91\xc9\xa4\xe6\xf7\x1d\x4b\x84\xf9\x7b\x05\x46\xea\x5a\x85\x40\xbc\xb5\x83\xa3\xee\x36\x60\x52\xd6\xe2\xe5\x72\x3c\x71\x18\x0c\x4d\xd0\x98\xbd\x39\x1c\x09\xa8\x2e\x0f\xe5\xb1\xb6\xaa\x15\x47\xc1\x63\x36\x19\x0c\x7c\xa4\x32\x25\x8c\xd9\x04\x40\xa4\x62\x55\xa8\xc3\xc2\xd2\xf8\x45\x87\xfc\x97\x9b\xd9\xcf\xbf\x17\x7f\xaa\xda\x14\xbe\x17\xdf\x7e\x6b\x07\xaa\xab\xc2\xe4\xb6\x04\x51\x34\x2c\x88\xc9\xe8\x61\x75\x24\xfe\xf7\xb3\x0b\x62\xc8\xcf\x47\x00\x9e\x9c\x35\x98\x37\xf5\x12\xa3\xb1\x98\xa8\x6a\x2e\x2d\x94\xc4\x9d\x6b\x9f\x60\xee\x63\xd8\xd6\xd4\x47\x00\x8c\x0a\x63\x6a\x18\x50\x33\x71\xb5\x51\x39\x82\xe6\x5c\xca\xdd\xfc\xf2\x25\xf5\xbc\x15\xd4\x31\xd4\x90\x57\x09\x04\x15\x4c\xc6\x6b\xac\xcf\x25\xe6\x6b\x3b\xf6\x40\x18\x2a\x0e\xeb\xa6\x2a\x11\x32\xff\x61\x05\x09\x2c\x35\x7e\xab\x82\xb2\xea\x65\x7a\x8a\x40\x4a\xaf\x11\x63\x34\xa9\x3c\x05\x50\xa8\x59\x24\x0e\x72\x5b\x3b\x7e\xaf\x52\x5c\xa9\x38\x07\xd5\x63\xea\x3c\x28\x19\xe6\x73\x4a\xe2\x9f\x28\xfb\xf7\x05\x66\xe6\x88\x19\x39\xef\x47\x0b\x87\x9d\x93\x4d\xe1\x6a\x89\xcd\x2c\xca\xfd\x9d\x64\xcd\x09\xe6\x21\xf5\xf3\x1f\x79\x65\x4b\x9f\x04\xc6\x08\xf0\x3a\x96\xaa\xba\xa4\xb8\xec\xf6\x61\x98\xe8\x67\xf7\x1e\xf4\x0a\xa6\x02\x0f\x7a\x2f\x91\x40\x11\x26\x42\x6a\xa4\xa0\xd4\xdb\x5b\x1a\x97\xba\x22\x34\x2e\xf5\x23\xdf\xd7\x3a\xf1\x24\xee\xd5\xc0\xb5\xf0\x23\xd4\x85\x5f\x09\x3b\xdb\xc5\x8b\xfa\xd8\x9a\xeb\x8d\x02\xd6\xb0\x0b\x6b\x78\xab\x58\xc3\x9b\x63\x4d\x9d\x38\x39\xd2\x38\x66\x35\xdb\x00\xcc\x3d\x07\x3b\xc7\x7e\xd5\xa7\x17\x72\x9f\x65\x98\xe8\x3b\x57\xc8\x2a\x33\xac\xf4\xd6\x71\xba\x30\x6f\x13\x96\x8d\x46\x49\xa1\x3b\x00\x20\x2b\x8b\x69\x69\x17\xe1\xe5\x77\x20\xa6\x29\xa7\xd9\x6d\x08\x69\x4f\x38\xb3\xcf\xc3\x15\xdf\xd3\x14\x17\x4a\xbf\x9b\x07\x36\x25\xbf\xfd\x7d\x31\x9e\x8c\xcc\x9f\xbb\xc5\x9e\x2a\xc3\xc7\x95\xe1\xe3\x7c\xf8\xe6\xcf\x27\xe3\x13\x7a\x24\x95\x24\x96\xfa\x69\x6d\x1b\x76\x20\xce\xaf\x66\x13\x3a\x32\x3f\x9a\x71\xf3\x94\x8a\xca\xdc\xd4\x2c\x86\xea\x45\x19\x6a\x8f\x32\xf1\x99\x71\xeb\xfa\x8f\x07\x1b\xef\xc1\xc6\x7b\xb0\xf1\x7e\xe5\x36\xde\xdc\x45\xb3\x64\x25\x55\x06\xbc\xab\x84\xc4\x3f\xde\x7f\x48\x17\xd7\x7e\x49\x2f\x2a\x56\x9c\xd5\xf6\x3e\xeb\x2d\xaa\x9d\x8e\x82\x38\x0a\x94\x07\x64\xe5\x9d\xf1\xe6\x04\x81\x71\xc6\xe2\x8b\x4b\x2e\x98\x7f\x0e\x9a\x33\x67\x1c\x8b\x66\xcb\x73\xc1\xca\xdc\x3c\x3c\xb7\xe9\xd9\x3e\xf5\x00\xcc\xed\xd7\x35\x15\xd4\x0c\x57\x73\xcb\xad\x9b\xa9\x8b\xae\xe3\x10\x6d\x66\xa8\x46\xeb\x0d\xd5\x05\x34\x86\x18\x22\x87\xb5\x1a\x41\x62\xe2\x7e\x1a\x8d\xdc\xe2\x11\xa6\x6c\xf7\xb9\xd0\x35\x35\x4f\xbf\x03\x82\xec\xc1\x01\xf1\x3b\xac\xd9\xb4\x9f\x07\xc4\x9e\x55\x34\x2c\x2b\x5f\xbf\x59\xd6\xd1\x70\x2e\xd8\xd7\x1e\x50\x7e\x08\x9b\xdc\xc7\x68\x38\xdb\x11\x34\x27\x48\x39\x59\x24\xcc\x3f\x04\x1f\x0c\x13\xcb\xbf\x65\x3c\x6b\x32\x6d\xc8\x72\x39\x9d\xac\x40\x14\xae\x78\xf4\x25\xa1\xe2\x5d\x2f\xd4\x0c\x1b\x2f\x29\x15\xcc\xaf\xf3\x18\x65\xfc\xad\xea\xbc\x04\x0b\x20\x0d\x69\x75\x0a\x91\x0a\xf3\x34\x11\xbe\x17\xe4\x05\xc3\x71\x30\xa7\x73\xdf\x1c\x7a\x45\x7f\x7c\x1f\x07\xff\x4d\x13\xa2\x80\xed\x57\x34\xa3\xed\xf3\x15\x7e\x97\x28\xa7\x34\xfd\x15\xf0\xa0\xea\x3d\x69\xb7\xd5\x51\xf9\x74\xbe\x62\x98\x4f\x7d\xa5\xa0\x48\x9a\x28\xbd\x6d\x1e\xd7\x0a\x62\xb9\xe3\x9a\xb1\x88\x0d\x44\x15\x41\x75\x88\xea\xe4\x4a\x10\x99\xb4\x11\xc9\xfd\xda\x98\xa5\xab\xc3\x72\x45\xf5\xa1\x56\x62\x3c\x1e\x79\xc7\x9b\xe7\x0f\x6d\xbb\xe5\xd5\x58\xcb\x6e\x79\x95\x34\x6c\x8f\x46\x13\x17\xe5\x0e\x8b\x61\x41\x01\xeb\x9a\x2d\xaa\x48\x82\x3a\x8e\xbf\xd4\xd4\x4a\x6b\x50\x9e\x9a\x1e\x65\xcb\xd4\x74\xfb\x7c\x6a\x71\x9d\x38\xb6\x3b\x35\xed\xc6\xd8\xff\x6a\xbe\x38\x33\x3d\xc8\x96\x99\xe9\xf6\xd9\xcc\x3a\x95\x6d\x55\x02\xaf\xc9\xf1\xd4\x90\xb5\x43\x81\x94\x1f\x21\x21\x9c\x29\x5c\x15\x9b\x2f\xa5\x60\xdb\x93\x2b\x47\x1c\x7c\x78\xf3\xeb\xbf\xfd\xf6\xd7\x57\xff\x19\xe2\xe0\xdd\xfb\xd7\x3f\x3f\x7f\xff\x9f\xea\x57\x16\x5e\x5d\x7c\xe8\x2d\x92\xd8\x3b\x2a\xb4\xf1\x5e\xbf\xf4\x8c\xd7\x64\x2d\x0d\xa0\x8f\x7c\x16\x3e\xac\xa0\x6a\x04\xcb\x69\x67\xac\xf0\x05\x00\x44\x3e\x53\x5e\x26\x2d\x10\xda\x46\xed\x86\x81\x0f\xe6\xd1\xdf\xd4\x14\x3d\x6f\x65\x5b\x49\xf9\xa5\xad\xe7\xf7\x8b\x14\xf3\x36\x20\xcd\x17\x5e\x2b\x2e\x5f\x05\x25\x0b\x49\x20\x19\xe8\xcf\x34\x4e\xae\xee\x3b\x81\x16\x2c\xee\xcd\xdf\x67\x00\xb4\x3b\x61\x1a\x72\x8e\x28\x65\x71\x42\x1a\xea\xd6\x1f\xa8\xba\x23\x55\xbf\xa5\x31\xde\x0a\x5d\xab\x8e\xda\x48\x4b\xae\x59\x15\xc8\xbe\xfc\x80\xaf\x75\x3e\xe9\xf5\x7d\x74\x22\x24\xdd\xe1\x3d\x89\x3e\x26\x8e\xbd\x94\x93\x66\x1f\x82\x8b\xa3\xde\x84\x56\x7a\xc2\x70\xaa\x1c\x67\xf9\x34\x99\x3b\x2a\x08\x40\x66\xdc\x05\x8e\xca\x31\xeb\xfb\x47\x85\x3f\xfd\xf2\xfe\xd5\xeb\x7f\x7b\xdb\x97\x26\x8b\xcd\x8a\xab\x5c\x26\x57\xc9\x1b\x4d\x68\x7c\x9d\x5c\xa9\x8f\x3a\x90\x2b\xf5\xd1\x7a\x26\x6b\x61\xcc\xdd\xa3\xe6\x98\x2c\x98\x22\xfe\x33\x22\xf7\x20\x0b\xd5\xc9\x3b\xa3\xb1\x03\x4a\x65\x39\xb4\x20\x3f\x63\x3e\x7d\x65\x82\xec\xaa\x9f\xbd\xa4\x34\xc5\x88\x54\x99\xbb\xc4\x31\x80\xa8\x44\xa2\x7c\x3d\x89\x26\x3c\xa2\xb7\x98\xdd\x0f\xa3\xa9\x2a\x2d\x75\x60\x8c\x1b\x33\xc6\xe2\xc5\xf3\x36\xf8\x63\xe9\x22\x7b\x5b\x2c\xee\x85\x5e\x66\x37\x43\x9d\x61\x81\x1c\xef\xfa\xf0\xbc\x42\x42\xc1\x03\x29\xed\xbe\xe4\x68\x9d\xab\x74\x30\xcd\x7a\x72\x54\xb9\xc3\xde\x7e\xe8\x08\xd7\x43\x24\xfd\x26\x97\x49\x5f\x62\x2e\xa4\x88\x96\x50\xb2\x85\x1e\x5a\xc7\xfa\x8e\xe1\x08\xc7\x58\x05\x5b\xad\x97\x46\xf5\xac\xd6\x89\xcc\xd5\x31\xe9\xad\x91\x0f\xec\x79\xb4\x0e\xcb\xd5\xd6\x28\x4d\xe9\x5d\xde\xf8\x67\xf7\xce\xec\x2a\xb5\xf4\x65\x12\x4a\xa0\x8f\x9f\xd7\x45\x2b\xa5\x4a\x5b\x30\xad\x34\xb7\x82\x6d\x5d\x3d\xe8\xc3\x8f\x6e\x6e\x37\x90\xc1\xaa\x6e\x28\x09\xff\x49\x27\x87\xf9\x8a\x65\xb0\x0d\xb8\xd4\x5f\xf1\xfd\x56\x24\x2b\xd9\x4f\x0b\xc8\x1b\x1a\xdd\xb4\x91\x85\x02\xfc\x29\x45\xd7\x75\x85\xb5\x02\xa4\xf6\x58\xdb\x27\xbb\x91\xad\x16\xd5\x3a\x91\xad\x91\x10\x4d\xa9\x92\xf5\x1f\xef\xb4\x57\x33\xb1\xd4\xe4\x60\x5b\x0f\x98\x11\xb1\xf1\x54\x35\x05\xe9\x63\xdf\xe0\xbf\x66\x81\x2a\x87\x60\x56\x4a\x20\xa9\x46\x60\xb9\xf4\x94\x6b\x69\x3f\xa1\x53\x27\xf3\x3e\x88\x07\xbb\x2f\x1e\x3c\x8f\x63\x86\x79\xab\x01\xa8\x8b\x26\xbf\xf6\x04\x2b\xaa\x4d\x8e\xf7\x2f\xa6\x38\xba\x69\x7e\xfb\x24\xe6\xa7\x8f\xe8\xfa\x1a\xc7\x06\x01\xcd\x43\xeb\x61\x5c\x70\x5b\x2b\xba\x59\x3a\x3a\x1e\xf1\x5b\x10\xe0\x5d\x09\x1d\x7f\x77\xdb\x53\x27\x0c\x32\x1b\xb4\xd7\x5e\xd5\xda\x5f\xdd\x00\x51\xea\xb3\xc0\xb4\x5b\xf7\x71\x17\xf5\xaf\x93\x8a\xd8\x2e\xe9\x37\x9b\x8a\xf5\x25\x82\x4b\xd2\xab\x32\x8c\x17\x6f\x6a\x5b\xc5\xe4\x78\xaa\x1f\x30\xe5\xcf\x3d\x28\xc7\xe9\x7b\x5b\x76\x72\x34\x9e\xc0\xf7\x34\xc5\x85\xdf\x3a\x4d\xef\x93\x98\xea\xd6\x14\x16\xfa\xdd\x11\xff\x23\xcd\xc3\xdb\x32\x7f\x74\x21\xea\x06\x7e\xd7\x93\x33\xbf\x4c\xf8\x3c\x45\xf7\x5d\x3e\xf8\xd7\x84\x74\x1a\x78\x9b\x44\xa6\x37\xcb\x42\x4c\x7f\x7d\xff\x66\x4b\xd7\x1b\x36\xcb\xf6\x81\x76\x77\x5f\xae\xda\xec\xc2\xee\x51\x2c\x7c\xed\x4d\x5e\x73\x33\x2d\x5c\x39\x39\xad\xbe\x56\x2f\xb7\x3c\x5b\xf5\xdf\x7e\x9d\xf7\xcb\x23\xa5\xa0\xca\xb0\x3e\xb3\x3c\x99\x85\xe2\xf5\x59\x82\x5e\xfb\x9f\xd1\x4f\x87\xed\xff\xd8\x9b\x4d\x68\x23\xce\x3e\x17\x2b\xe8\x61\xe5\xcf\x87\xb6\x05\x7d\xcc\x74\xf6\x4e\x53\xcd\xe7\xb2\x2c\x76\xd9\xeb\x7d\x88\x5e\x57\x1d\x3a\xd0\xfc\xe1\xc8\x73\x34\xb6\x91\x98\xd5\x96\xe5\x06\x35\xb5\x44\x2a\x1a\xd5\x2d\x97\x45\x8c\x3e\xa2\xaf\x72\xe8\xe9\x23\x3a\x6a\x3b\x93\x77\xe0\x08\xee\x70\xcc\xfe\x05\xf1\xe9\x67\xf7\x2c\xea\xc3\x5b\xb2\x1a\x6b\x07\xf6\xb2\x1f\xda\xe0\x47\x87\xe9\xbf\xc7\xb6\xb2\xc5\x05\x5f\xd0\x85\xc3\xa9\xa8\x42\x6e\xea\xdc\x54\xd9\xe5\xdd\xd4\xbd\xf6\x5c\xed\xa2\x45\xbe\xfa\x24\x30\x23\x28\xd5\x17\x8f\x8d\xbb\xe8\xdf\x90\xc0\x77\xe8\x5e\x27\xda\x6b\x02\x5a\x67\x7b\xed\x68\xe2\xed\x68\x0e\x7d\xa7\x8a\x18\xae\x47\x9d\x76\x6a\xf9\x88\xae\x7f\xb9\xc5\x8c\x25\x0e\x51\xc5\xba\xb7\x3c\xad\x44\xae\xad\xca\xef\x10\xe7\xea\x18\x59\x67\x7a\x7e\xc1\x12\x91\x44\x28\x5d\x0f\xf5\x1f\x88\x91\x35\x5d\xe5\x3e\x3f\x8f\xb2\x56\x74\xe6\xd5\x2e\x29\xb0\x72\xae\x6d\x66\x70\xdf\x86\x1e\xf6\x33\xe6\xd3\x0f\x02\x89\x05\xaf\xdf\x47\xc9\x77\x95\xc5\x29\x3c\xcb\xb0\x5c\x78\x56\x58\x9f\xc2\x16\x37\xc1\x08\x27\x67\x3a\x0e\x41\x97\xa7\x9a\x26\x3c\xa8\x37\x34\xe1\x07\x5e\x64\x3b\x3a\x6a\x6a\x61\x3e\x6f\x1b\xdc\x99\xd1\x34\xc2\x9b\x29\x58\xf8\xb9\x99\x51\x25\xee\xc1\xc3\xb3\xb9\xb8\xf7\x0a\x06\x4e\x07\x12\xaa\x78\xaa\xe2\x48\xf1\x9c\xa0\x4a\xd6\xb5\xe8\x8d\xb3\x5a\x56\x1a\x35\x64\xd5\x5a\x55\xc9\xcf\x7f\x96\x3b\x33\x51\x23\xa5\x67\xdf\x62\xd7\x90\xb3\x35\x72\x0f\x39\x5f\xc2\xe2\x57\xf2\xed\xb3\x85\x21\x9b\xce\x4a\x43\x36\xcf\xdc\x43\xce\x49\xc8\x3d\xe6\xfc\x7d\x69\xd0\x6e\xca\xdb\x74\xd4\xb6\xb7\xd2\xb0\xed\xc3\xe2\xb8\xe7\x5d\x69\x22\xdb\xc9\x75\xeb\xbb\x0e\xff\x1a\x39\x72\x13\xe9\x1b\xde\x72\x57\xe0\xa2\xe5\x7d\x21\xfa\xd4\x0d\xe9\xd9\xcc\xff\x3f\xde\xfb\x9e\xdd\xfb\xd9\x4c\x00\xf4\xf4\x80\x54\xb8\xaa\x9d\xe7\x14\x71\x0b\xe9\xc8\xbc\x74\x96\xc5\x1b\x99\x48\x23\xdb\xd9\x48\xb4\xcd\xe6\xe8\x92\x61\x74\xa3\x76\x6d\xbe\xe9\x1b\x9b\x65\xab\x5c\x6a\x67\xf7\x7e\x63\x33\x4b\xd1\xa5\x56\x12\xfc\xdc\x66\xb0\x12\x3f\x9c\xf5\xb5\xf3\x70\xeb\x41\x70\x10\x4b\xf7\x5b\xeb\xed\xe5\x07\xff\x24\x12\xd0\x1b\x1a\xdd\xbc\xc4\x29\xaa\xbb\xdf\x54\x00\x7f\xc4\x53\x74\x9b\xd4\xa5\xdd\x9a\x94\xf8\x71\xdd\x6d\xc6\x1a\xd1\xa2\x87\x98\xfe\x65\xb4\xda\x3e\x3b\xd4\x54\xcb\x3e\xec\xcf\x8d\xf7\x67\x21\x01\xc2\x36\xf6\x69\xa1\xbb\xd6\x1d\xfd\xae\x9b\x25\xd6\x64\x5f\x68\xdb\x0f\x1d\x42\xac\x36\x33\x8c\x75\x0a\xcc\x7a\x83\xaf\x51\x54\xdf\xdc\x55\xf5\xea\x51\x46\xb6\xed\x5c\xc1\x76\xde\xaa\x6f\xa8\x43\x0d\xab\xcd\x68\x0b\x96\x3f\x95\x3b\xea\xf7\x6a\x39\xdc\x69\xdb\x5c\x72\x95\x60\xc6\x4f\xe3\x24\x1e\x26\x84\x63\x26\xca\xac\xf6\xcf\x8a\xb1\x9e\x32\x4c\x62\xcc\x86\x39\xbc\xb3\xe5\x3e\x65\xb6\x2a\x8d\xdf\x46\x35\xf7\x9f\xb9\x69\xb9\x97\x33\x57\x75\x6c\xea\xe7\x2a\xc3\x57\xd9\x74\x2b\xd0\x7b\x39\xcd\xbb\x24\x4d\x87\x26\xe3\x77\xdf\x25\x2e\xb5\xdd\xa3\xd9\xdb\x02\x7e\xcd\x55\xbb\xea\x7e\xf9\xa6\xc2\x8e\xaa\xa7\xe2\x92\x9f\x8a\xd9\xb2\x32\xaf\x66\x16\x7a\xf6\x79\x9e\xdf\xc6\x66\xd3\xf1\xb8\xfa\xa3\xfa\x22\xcb\xb7\x72\xe1\x4a\xdc\x61\x52\xe4\xac\x9c\xb9\x24\x06\x83\x35\x9f\x2b\xa5\xbc\x09\xc3\x30\x7b\x7e\x62\xff\xce\x93\xeb\x5c\xd8\xb1\x8d\xb2\x0f\x02\x1f\x17\x32\xbe\xa0\x3c\x97\x8f\x9f\xe7\x9a\xa1\x57\xc7\x02\x00\x67\xd6\x9a\x17\x88\x10\x2a\x8e\x23\x94\xa6\xc7\xe8\x58\xd5\x67\x3b\x46\xfc\x18\x65\xf9\x8a\xbc\x7a\x39\x64\x83\x44\x6a\x73\xff\x70\x2c\xde\xd9\x11\xfe\x72\x55\xcd\x2b\x94\x25\x1d\xf9\xed\x37\x35\x8f\xdf\x7e\x0b\x05\x54\xe3\x86\xa2\xd0\x37\xcf\x55\xfa\x02\xe9\x94\x13\x1f\x65\xb8\x7b\x8f\xaf\x52\x1c\x89\xe5\xf2\xc4\xfc\x95\xe3\xd0\xa4\xee\x39\x39\x3f\x4a\xae\xfc\xda\xdb\x80\x4f\xd1\xac\x04\xe2\x58\x19\x65\x8d\xb1\x40\x67\xba\x44\x97\x9e\xc4\x4b\x24\x70\x63\xaa\xa3\xda\xc7\x7c\x09\x0e\xc7\x93\x92\xe1\x45\xd9\x35\x4e\xce\xf2\xca\x5d\x76\x30\xab\x95\x9f\x65\x68\xa9\x98\x91\x08\x64\xe1\xc2\x64\x37\x12\x36\x3f\xf8\x42\x99\x19\x40\x91\x7a\x8e\x48\x58\x1f\x04\x83\x85\x04\x5d\xa6\xa8\x20\x09\x5b\xb2\x69\x26\xfa\x05\x01\xab\x7c\x85\x92\xe2\x7a\x9e\x88\xe5\xd2\xd3\xd9\x89\xbc\x93\x30\x64\xbe\x00\x45\x2a\xcf\x52\x54\x89\x8b\xd4\xc7\x60\x24\xf2\x6e\x52\x93\xd0\x2a\x4f\x19\x5a\xa0\xcc\xf7\xf8\x0a\x33\x4c\x22\x4b\x9e\x72\x14\xc7\x53\xc4\xc9\x3f\x89\xe3\x4b\x8c\xc9\xb1\x2d\x39\xc4\x71\x7c\x3c\x3c\xd6\xe9\x4c\x41\x09\x42\xae\x85\xaa\x49\x99\x65\x72\xc9\x3e\xbd\x28\xb0\x80\x85\x9b\x7a\x2f\xf2\xfc\xe3\x85\xa7\xce\x5d\x9d\x13\xf4\x72\xe9\x6c\x25\x77\x66\x79\x7b\x46\x7b\xa4\xbd\xe9\x92\x5e\xc5\x3c\x4d\x71\xf8\x10\x47\xa3\x07\x5b\x65\x73\xf4\x30\x47\x62\x3a\xf2\x4e\x47\x71\xe4\xa9\x3c\xae\xca\x81\xdf\x01\x60\x5f\x49\xa8\x29\xbd\x73\x75\x41\xa4\x06\xb4\x82\x96\x63\xb9\x7a\xc9\xde\x79\x2b\x09\x68\x2b\xb2\x3a\x21\xed\x4b\x6f\x05\x71\x9c\x08\xd7\x17\xf3\x28\xd5\x55\x96\xa1\xa7\x0e\x66\x92\xe2\xac\x56\x1d\x27\xb8\x82\x8b\x39\x17\x0c\xa3\x99\x0b\x2e\x7b\x27\x01\xcd\xc9\xe5\x00\xb3\x55\xe3\x56\x2b\x28\xd0\xb5\xab\x23\xf9\x58\x0d\xca\x22\xa5\x09\xa7\x39\xd6\x4e\x47\x84\xc6\xf8\x74\x94\xc4\xde\x0a\x4e\x31\x4a\xc5\x34\x52\x76\x18\x47\x53\xfd\x7a\xa8\xdf\xcb\x61\x28\xc7\x32\x07\xa0\x76\x38\xeb\x33\x6b\x79\xb2\x73\x1c\xcb\x57\x2e\x58\xf3\x7a\xa8\xde\x4b\x78\x64\xaf\x1b\x1d\xc0\xd9\x3b\x09\x28\x95\xd0\x18\x09\xe4\x80\xb3\xaf\x14\xc6\x08\x15\x57\x74\x41\xe2\x46\x8c\x15\xf0\xa4\xc0\x63\xe7\xb7\xd5\xf3\x76\x82\xee\x8b\xe8\x76\x22\x1b\x96\xf6\x01\x13\x2e\xe2\x66\x72\x82\x43\xc1\x92\xf9\x50\x48\x45\x4f\x75\xac\x4c\xc6\xae\x8e\x75\xca\x5f\xf3\xbe\x07\x2a\xb7\xb2\x0b\xe3\xae\xdb\xef\xe6\xd6\xf1\xfe\xe6\xd6\x5b\x41\x5d\xb5\xdf\xf1\xf6\x9b\x1b\xac\x88\xb3\xe1\xe3\xf2\xf5\xa9\x2a\xf2\xbc\x6e\x08\x0a\x2a\x1b\x07\xf4\x18\xa5\x62\x68\x7e\xaf\x1f\x31\x8a\x52\x27\xd5\x46\xe9\x36\x30\x02\xe7\xc6\xc0\xe1\xda\x96\xd6\xf6\xb1\x0d\xc4\x33\x9a\x3a\x3f\xa2\x9e\x6f\xe5\x0b\xca\x58\xea\x64\x73\xea\xc5\x36\xbe\xa1\x88\x35\xc6\x9f\x1c\x40\x7a\x77\x98\x1c\xb4\xae\x6d\x27\x2c\x33\x5e\xc3\x3a\xbe\x51\x25\xa7\x75\x3d\x48\x73\x72\xc6\xb0\x5e\xdd\xb7\x56\x85\x7c\x30\xf0\xe3\x20\x8e\x4c\x32\x59\x1e\x3a\x18\x8d\x35\x8b\xad\xc3\x83\xe6\x36\xdd\xb0\x1d\x9b\x8f\x39\xbe\x65\x0a\x8c\x7b\x2b\x18\x47\x23\x39\xae\x95\x4e\x95\x78\x55\x94\xc9\xfd\x5a\xde\x50\x97\xdc\x37\x18\xe8\x02\x36\xa1\x70\x2b\x1e\x1f\xa4\xe8\x76\x8c\x3f\xcd\x99\x66\x3c\x3a\xc5\x25\x4e\xc4\x14\xb3\xe3\x4b\x7c\x2c\x5b\x1f\x53\x56\xd2\x44\x8e\x0a\xc2\xb7\x15\xdf\x6c\x3e\xe1\xc1\xa0\x90\x84\x14\x3e\x14\xa4\xe2\x91\x91\x70\x70\x51\x4c\xaa\x8a\x50\xab\x15\x80\x62\x30\xa0\x26\x49\x9a\x6f\x6b\xb9\xa8\x52\xa1\xcc\x26\x8c\xe4\x3e\x01\x47\x85\xf4\x9a\xd6\x3c\x8f\xac\xb8\x9c\xe5\xd1\xa4\xf5\x32\xfa\xbc\x90\x56\x93\x02\x98\x84\x67\xdf\x27\x7f\xa2\xdf\x27\xdf\x7e\x0b\xf8\x38\x29\x16\xcf\x4f\xb2\x14\x9b\x91\x9f\xea\xac\xa8\x28\x4d\x8d\xc4\x8e\x75\xa5\xfc\xac\x2a\x3e\x97\x0a\x85\x97\x52\x5b\xbd\xbd\x40\x74\xf6\xa1\x32\x41\x03\x00\x55\x6f\x40\xb3\x30\x1b\x74\x62\x61\xed\x33\x55\xb2\xc2\xa6\x3f\x95\x2a\x49\x2e\x13\x5e\xc1\x2b\x5d\x08\xa0\x64\xbd\x8b\xc1\x3a\x6d\x9e\x9f\x96\x4a\xcb\x6f\x3b\xff\x7a\x41\xc1\xec\x98\x60\x17\x37\xe4\xbe\x75\xa9\x99\x5a\xfd\x5e\x2e\x4f\xfc\xb5\x19\x76\x6d\xd2\x5c\x9d\x1d\x70\x3c\x81\x2c\x3c\x39\x83\x28\x3c\x39\x87\xd4\xca\xcf\x52\x89\xb4\xb4\xc1\x61\x12\x62\x47\x16\xd7\xef\x4f\x7c\x16\xfa\x3c\x4c\x02\x82\x3f\x09\x1f\x80\x20\xa6\x04\x4b\x16\xa1\xcb\x78\xf9\x3c\x50\x94\x0c\xa0\xd4\xbe\x88\xa1\x2b\xb5\xc5\xbe\x97\x9f\x04\xdf\x1b\xad\x32\x05\x0f\x48\x0e\x81\x86\xe9\xea\x2a\x21\x28\x4d\xef\x1f\x94\x16\x6b\xcb\x32\x24\x81\x1e\xf2\x72\x69\xff\xf2\x41\x06\x99\x5c\xf9\xc8\xec\x59\xba\x2a\x90\x82\xc4\xd4\x21\xab\x7c\x8f\xac\xf2\x65\x7c\x75\x4f\x1b\xac\x2c\x77\x8b\x48\x2c\x18\x3e\x24\x97\xef\x51\x07\xae\xa0\x9a\x2b\x43\xd6\x9b\x84\xdb\xf2\xf0\xbe\xb1\x12\xa7\x14\xc5\xda\x29\xc6\xfe\xa5\x6a\xba\x15\x78\xbd\xbd\x5b\x2c\x24\xa8\x8f\xe9\xac\x21\x07\xb1\xa9\xba\xaf\xce\x88\x06\x10\x63\xd3\x04\xd0\x9c\xf0\xef\xf1\x9c\x36\x81\xe2\x39\xe5\x89\xa0\xec\xde\xd6\x6b\x8c\x13\xae\x93\x7f\x01\xc8\x3a\xb5\x8b\x23\x0f\xc0\xee\x09\xf5\x67\xd5\xca\x98\x06\x81\x06\x1f\x1f\xfe\xf6\x2e\x98\x22\x3e\xf5\x1f\xcc\x14\xf3\xa4\xbf\x0c\xc6\x11\x1f\x95\xb3\xec\x3f\x4f\x53\x3f\x9b\xa7\x7e\x57\x98\x74\x0e\x12\x68\x2e\x55\x77\x47\x1a\x4f\x54\x56\x53\x25\x8e\x2d\xe6\x2f\xb2\xdc\xc9\x95\x8a\x36\xd8\xd8\x6c\x6c\x55\x3a\x01\x0a\xc9\x7a\xcd\xba\x3a\xca\x03\x94\x32\xe3\xcb\xad\xaf\x58\x85\x4a\x60\x51\x3a\xa3\x48\x58\xa9\xce\xf9\x13\x65\xbe\x00\x85\xbc\xd0\x24\x27\x1f\x78\x72\x66\x33\xa1\xab\x56\x31\x9d\x05\xf2\x28\xf5\xc1\x11\x2b\x50\x21\x8a\x63\x3f\x27\x39\xa8\xe4\x98\x59\xc2\x71\x60\x98\x6e\x09\x19\x0d\x1f\x3a\x57\x37\x69\x3a\x37\xad\x4a\xeb\xda\x50\x02\x01\xb2\xf0\x81\x2b\x87\xa9\x91\xe4\x8c\x31\x5e\x2e\x3d\x0f\xce\x30\xe7\xe8\x1a\x8f\x70\x60\xfe\x5a\x2e\xe5\x86\x12\x28\x49\x97\x4b\x4f\x31\x23\x4f\x0a\xaf\xaa\x67\x2e\xd9\xac\xfe\x6b\x7c\x36\x31\x99\xd9\xb3\xdf\x90\xd9\x3e\x42\x16\x88\x44\xa4\x78\xb9\x64\xd5\xbe\x00\x54\xa5\xe8\x58\xa0\x87\x22\xfb\xc8\x5a\x59\x10\x7b\xaf\x5f\x2f\xbe\xb0\x5c\x3a\xab\x2e\x04\xf2\x9d\x64\xd7\x27\x54\xcf\x58\xcb\x54\xbf\xbe\x7f\xe3\x5b\x59\x27\x98\x32\x7c\x05\x02\x29\xd0\x12\x95\x98\x5a\x97\x67\x28\x50\x6e\x60\x44\x1d\xc3\xbf\x86\xe7\xc0\x66\xaf\x3e\xf5\xec\xc1\x73\x0e\xbf\x03\x47\x34\x7c\xd0\x9f\xd5\xf5\x81\xf3\xd2\xc0\x52\x61\x18\x9f\x4d\xe4\xd4\x98\xe0\xff\x91\x88\xa9\xef\xfd\x8f\x92\xe5\x69\x26\x5b\xab\x16\x3c\xe0\xd3\xe4\x4a\xf8\x60\x05\x20\x0d\xe2\xc8\x3e\x1e\x9f\x4d\x56\x2b\x39\xfe\xa4\x3a\xf9\x22\x25\x82\xe5\xf2\x61\x05\xd3\x30\x09\xe2\x88\x2f\x97\x63\xd9\xc3\x04\x2e\xa4\x7c\xa0\xb7\x95\x7a\xa6\xff\x9e\xc0\xa8\x4e\x80\x0d\x9b\x39\x8e\x46\x67\x27\xf9\xd2\x64\x87\xaf\x0f\x02\xa5\x23\xfd\x72\xe5\x7b\xff\xec\x81\x8b\x7c\x77\x5f\x63\xf1\x3c\x12\xc9\x2d\xf6\x69\x56\x16\x23\x05\x16\x2d\x86\x78\x14\x47\x48\xcd\xfe\x1f\xd9\x81\x65\xfc\x60\xb1\x5a\x53\xd9\xe1\x9d\xd9\x0e\xf2\xf4\x1f\x63\x28\x6c\x45\x08\x8c\x98\xf9\x30\x98\xb8\xea\x3b\x18\xc2\xa7\xa1\x64\x0d\xe7\x60\x7c\x36\x39\x42\x7e\x04\x4a\x99\xd7\xeb\x78\xad\xf0\x0f\xea\x80\xc7\x9a\x42\x2b\x90\x0f\x7a\xdf\x31\x75\x81\xe5\x60\x63\xee\x6f\x77\xe8\x0b\x4a\x0d\x64\xd5\xe1\xee\xdb\x08\xd5\xe5\xb4\xa2\x6b\xea\x4f\x1c\x04\xe4\x7d\x11\x90\x7f\x87\x55\x35\xf6\x5a\x40\x7e\xf2\xe2\x1a\x55\x51\xfc\x2b\x2d\x3f\x8d\xfa\x94\x45\x26\x5d\xcb\x22\x33\x5b\x82\x98\xac\x29\x8b\x6c\xd2\xf4\x7d\x8e\xb2\xc8\x04\x80\x51\x61\x4c\x5b\x2f\x8b\x4c\x6a\x65\x91\xf7\x30\x19\x61\x41\xaf\xe3\x2e\x9d\xec\xa1\x87\x12\xf4\x48\x75\xcb\x2a\x49\x6b\xda\x37\xeb\x51\x65\x71\x9c\xac\x95\xf1\x1a\xa5\x34\x23\x47\xd5\xd4\xa8\x5c\x16\x03\xda\x70\x3e\x2a\x55\xee\x7a\x5f\xa9\x79\x66\x2b\x78\xc1\x38\x1a\x39\x8b\xa2\x49\xa1\x1a\x12\x29\x62\x82\x75\x12\x5a\x75\x7c\xc8\x47\xfe\xc3\x0a\x62\x00\xed\x48\x89\x1d\xa6\xd9\xb5\x3f\x9c\x5f\xf8\x22\xcc\x9e\x42\x79\x0e\x19\x99\x90\x86\x42\x0d\xa1\xa1\xa6\xa8\x14\x2b\x95\xee\x20\xff\x90\x72\x50\xe6\x2b\x40\x07\x83\xec\x6f\x7f\x5d\x2f\x99\xac\xae\x6a\x90\x9a\x7e\x94\x84\xae\x1a\x31\x2e\x34\x9d\x02\x48\x41\x61\xe4\x85\x37\x2b\xa0\x0f\x63\x01\x19\xa4\x0e\xd1\x93\x38\x4a\x86\x13\xa8\xd1\x1d\xe4\xa5\xd9\x2e\x1a\x10\x47\x00\x7c\x98\x63\x36\x4b\xcc\xb5\x9c\x28\x2d\x32\x5a\x88\x29\x65\xc9\x3f\xb0\x5e\x9e\xd2\x17\x8c\x2a\x64\xca\x8b\x4b\xc6\x45\x74\xc5\xf3\xb5\x4a\xb3\x43\xa7\x5d\x2b\x14\x97\x94\xea\xbb\x24\x4d\x3f\x66\x05\x79\x46\x15\x49\xb2\xb5\xdc\x12\xcc\xcb\xea\x0f\x06\x3e\x0e\x32\xe5\x3b\xc0\x24\x36\xfa\x93\x5d\x01\x73\x51\x01\xa4\x7a\x9a\xc3\x15\x35\xad\x4c\x15\x0c\x50\x94\x4a\xed\x45\xdd\x11\x01\x60\x4f\x88\xd6\x99\x1e\x15\x96\xa4\xa4\x78\x34\x9b\x2c\x60\xed\x55\xbe\x42\xa5\xc5\x31\xda\x91\x07\xd6\xad\xd9\xa4\x49\x8f\x61\xa1\x14\xd9\x9f\x01\x88\x42\x26\x15\x6d\x1a\xb2\xf1\xf9\xe4\x28\x43\x1f\x19\x0c\x48\x55\x8d\xb0\xfa\x15\x82\x45\x72\xa2\x2b\x53\xea\x65\xd5\x21\x27\x67\xa6\x54\xe8\xbb\xc9\x1d\x2c\x76\xdb\x64\x9a\xeb\x52\xd4\xb7\x3c\x3b\x7b\x13\xb6\x7e\x92\x28\x4a\xcb\x95\x63\xbf\xd0\xfc\x6c\xc6\x20\x63\x7f\x30\x53\x50\x77\xd6\x1d\x2d\x82\x28\x4a\x3d\x00\x2f\xf1\x15\x65\xba\x84\x76\xad\x50\x9a\x3a\x10\x12\x2d\x65\x23\x81\x7d\xb0\x6a\xb4\x0b\x2a\xf8\x44\xe0\x59\x98\xb7\xb4\xf5\xda\x72\x47\xff\xd1\x9a\x6a\x9a\x2b\xbb\x31\x0a\x27\x9d\xb9\xb4\x3c\x39\x83\x09\x7f\x63\xcc\x77\x27\xe7\x50\x7e\x67\x94\x7d\x11\x4a\x35\x88\x8f\xc6\xde\x0c\x11\x74\x8d\x75\x1a\x4d\x2f\x4a\x13\xf9\xc7\x64\x33\xa3\x61\x8c\xe5\xf2\xde\x56\xaa\xa8\x95\xe3\xf8\xf4\xc7\xbd\x84\xbf\xc5\x77\x1e\x18\x0c\xb2\x67\x81\x71\xb0\xd5\x55\xc1\x7d\xd0\xa9\xc0\x74\x85\x16\xf5\x42\xee\x05\x25\xf6\xa1\xb6\x8d\x0d\xd0\xcd\xe2\xc6\x43\x03\x69\xd4\xa5\x99\x24\x5e\x57\xcd\x15\x3c\x01\x1d\x6d\xb0\xf0\xba\x1c\xde\xef\x79\xe5\xff\xbe\xc0\xec\xfe\x1d\x62\xca\x65\x8c\x63\xc4\xa2\xe9\xe8\x01\xf1\x91\xa7\x55\x50\xc5\xde\x52\x29\x56\x9e\x9c\xad\x56\x4d\xfc\x2b\x2f\x45\x58\xaa\xc1\x96\x55\xb1\x75\xc8\xc1\xd5\x93\x57\x8a\x46\xda\x57\x21\x2c\x85\x3f\x97\x2b\xf0\x4a\x69\xc4\x0c\x48\x0b\x21\x55\xe9\x43\x49\x60\x9d\xaf\x53\x6a\xc4\xec\xb8\x4a\xf9\xf1\x3e\xe7\xa8\xfe\x7a\x8a\xae\x6b\x01\xae\x99\x7f\x2e\xda\xb6\xce\x47\x2d\x27\x6d\x53\x2b\xcd\x13\xeb\xdb\x41\xf5\x26\x45\x0e\xd5\xd0\xe5\xea\xbf\xad\x6a\xa4\xb5\x38\x43\xd2\x76\x20\x97\x07\x5f\x2b\xaf\xe7\xa8\xc0\xbf\x7e\xf6\xcd\x18\x4b\xc8\xf5\x29\x4f\xc8\xb5\x9c\x4a\x1d\x47\x3a\xff\xe7\x5a\xae\x51\x8d\x89\x38\x58\x96\x0e\x96\xa5\xdf\x99\x65\x69\xdd\xfe\xee\x76\xd8\x99\x3c\xbb\x86\xf5\x76\xb3\x31\x59\x3b\xcc\x3a\x5b\x51\x53\x09\xfa\x9a\x09\xa9\xb1\x08\xbd\x29\x49\x1a\x64\x03\x2b\x1d\x8c\xeb\x94\xf4\x8d\x4c\x3f\xfa\xec\x62\xe6\xb8\xd1\xd9\xbb\x8b\x65\xf6\x8d\xf4\xac\x6b\xec\x43\x52\xbf\x33\xc3\x59\x8a\x9e\xd2\xf5\xbc\xbe\x6b\x2e\x9a\x63\xcc\x65\xa5\x67\x0b\x0a\xff\xe1\xec\x3b\x6f\x64\xfe\x3a\xb7\x85\x85\x57\xfa\x06\x01\xaf\x4c\x7d\xd4\x47\x9f\x78\x9d\x14\xe6\x9c\x7b\x77\x11\xeb\x3a\xf0\xe8\xba\x8f\xdb\x57\xca\xa1\x59\x1f\x0e\xcd\xba\x72\x68\x62\xb9\x21\x5b\xc3\xa1\x75\x22\x05\xf6\x39\x38\x34\x03\x60\x54\x18\xd3\xd6\x39\x34\x6b\xe6\xd0\xfb\x93\x2e\xa2\xc0\xa1\xdb\xfc\xb1\x7a\xf2\xe8\xb2\xa6\x41\x99\xf8\xf1\x7e\xe4\x71\x95\xa4\xae\x55\xef\xe8\x2a\xd1\x33\x9f\x49\x96\x98\x0b\xf1\x9a\x5b\xf9\x0f\x8f\x14\xee\xab\xaa\x6c\x23\xdf\x57\x4e\x04\x0f\x2b\x58\x52\x2d\xb6\xc0\x00\xdb\xdc\x10\x34\x03\x54\xa1\x00\xfd\xe4\x7d\xdd\x64\x1f\x85\xfd\xc2\xc8\xbb\x14\xd2\x5e\x33\xef\x4d\xc5\x7c\xd9\xc7\x41\xc8\x3f\x08\xf9\x07\x21\xff\x29\x85\x7c\x95\x57\xfc\x20\xe2\x97\x45\xfc\xf7\x34\xc5\xbf\x3f\x01\x5f\x33\xed\x2e\xd2\x7d\x2b\x6b\x3e\xc8\xf6\x07\xd9\xfe\x20\xdb\x3f\x52\xb6\x37\xac\xf9\x20\xd9\x3f\xb9\x64\xaf\xef\x37\xfa\x89\xf6\xa6\xcd\x3e\xca\xf6\xc5\xa1\x6f\x20\xdc\x97\x66\xbe\xa9\x74\xaf\x3a\x39\x88\xf7\x07\xf1\xfe\x20\xde\x3f\xa5\x78\x6f\x85\xf5\xcd\x9d\x15\xf2\x6d\x57\xbb\x81\xde\xba\x14\xae\xef\x78\x49\xcb\x05\xef\xe7\x93\x88\x0d\xa7\xeb\x22\x12\xb7\xf3\xb3\x83\x4c\x7c\x90\x89\x0f\x32\xf1\x23\x65\xe2\xfe\xfc\xec\x31\xe2\xf3\x97\x76\xc8\x19\x0c\xdc\x0e\x39\x3d\x3d\x71\x76\x47\xba\x2f\xba\xfb\x77\x31\x02\x95\x5c\x88\x3a\x7b\x00\x3d\xbd\xd6\x50\x3b\x11\x2a\xc1\x89\xdb\xd9\x32\xc2\x19\x1e\xb2\xce\xcb\x55\x64\xee\xeb\x1f\xa9\xa2\x96\x2c\x67\x5b\x65\x86\xa2\x7d\x86\x36\xaf\x55\x67\xb5\xa8\xd0\x44\xe9\x06\x4f\xe6\xc9\x57\x13\x8b\xea\x7a\x4e\x75\x2c\xfd\x3c\xbc\xaa\xad\xbf\xcc\x42\x77\xe3\x88\x79\x86\xbf\x8d\x4c\xb2\x8d\x91\x39\xa5\xad\x17\x47\x23\x61\x63\x9e\xbd\x6f\x3c\xed\x9a\x9a\xc7\x3b\x04\x49\x7c\xb1\xc6\x51\x15\x7a\xdf\x78\xc0\x80\x3f\xde\x3f\xaf\x0f\xe9\x7e\xc9\x7d\xfa\x04\x76\x9b\x07\x1b\xde\xd4\x64\x5e\xef\xc7\x5e\x97\xcb\x52\xb0\xff\xd3\xae\xca\xcd\x6d\x67\x46\x72\x73\xfb\xe5\x19\x88\x1d\x43\x3f\xc6\x61\x5b\x35\x4c\x51\x27\x73\x46\x3c\xc2\x24\x3e\xa8\x07\x07\xf5\xe0\xa0\x1e\xac\x57\x0f\x3a\x1e\x81\x37\xb7\x4a\x23\x50\x41\x61\xdd\xee\x30\x6d\x69\xa9\xa6\x23\x53\x1b\x3b\x20\x0a\x87\xe7\xb6\x98\x99\xda\xe4\x6f\x55\x98\x9e\xce\xa3\x12\x78\x20\x98\xd3\x79\x31\x9f\x88\x0d\xeb\x83\x34\xc4\x72\xc7\x42\xbe\xf6\x36\xb4\x96\x17\xa5\x91\x53\xaf\xcb\x72\xc2\x2d\xdb\x4f\x0a\xfc\x1c\xce\x11\xc3\x44\xe4\x67\x34\x75\x1f\xd0\x2a\x37\x5e\x96\xe5\x8e\x42\x75\x28\x9c\x7a\x90\xc3\x04\xb8\x63\x4f\xec\x5b\x2d\x03\xa0\x8b\xb5\x31\x52\x1c\x66\xf5\x4e\x46\xc9\xaa\xa1\x47\xaa\xfb\x33\x6b\x32\x92\x1b\xde\x19\xa3\x9b\xa5\xd3\xd6\x22\x87\xc0\x33\x47\xd2\x23\x73\x55\xfb\xc1\x2e\xb0\xce\x26\xbe\x5e\x31\xc2\x00\x3e\x64\x5f\x0f\x0a\x84\x64\x46\xf9\x57\x7c\xef\x0b\x35\xc8\xd2\x86\xfb\x0c\x7a\xc6\xcd\xed\xa9\xce\xfb\xda\xe9\xd0\xd4\xd2\xce\x17\x3e\x35\x8d\xc8\xe5\xd4\x52\xb0\x51\x53\xd6\x19\x0e\x8f\x0a\x22\xeb\x5c\x49\x4f\x66\xe3\x04\x37\xb7\x81\x41\x86\xce\xd5\x71\xea\x85\x61\xa8\x4e\x46\x9b\xd0\x44\xfd\x00\x45\x9d\xbc\xa6\x10\xdd\xdc\xea\xed\x5a\x55\x88\xba\x1c\xed\x6b\xed\x80\xfa\x6c\x4f\xf8\x4f\x7a\x88\x87\xd3\xfd\x70\xba\x1f\x4e\xf7\xf5\xa7\x7b\xbf\xe8\xb8\x1e\xb2\x40\xab\xdd\xae\xc0\x59\xca\x87\x3b\xd0\xec\xc4\x3b\xf5\x54\x02\xb6\xf2\xf1\x98\xa7\x8f\xb2\xe7\x58\x66\x99\x2b\xf7\x02\xf1\xb7\xde\xa9\x57\xb7\xd0\x55\x53\x66\xe0\xec\x6b\x10\xad\x95\x14\x6a\xe9\xe3\xfa\x4b\x0a\x25\x7d\xde\x48\x07\xce\xe3\x98\x40\x04\x69\xaf\x2c\x19\x85\x63\xd4\x58\x14\x2b\xe6\x44\xd5\x6f\xf1\x90\xd6\xdf\x87\xde\x5f\xf1\xbd\x07\xd4\xf7\xb6\xec\x52\x95\x55\xe3\xa9\x1d\x00\xa5\x80\xc6\x4a\x71\x62\x17\x7c\xe9\xc0\xc8\x6e\x9f\xb2\xa4\x11\xf5\x1c\x85\xc9\x95\xdf\x90\x60\xd0\xfb\xc3\xd9\x1f\xbc\xb0\x98\x64\xd0\x8c\xbd\xeb\x91\x75\x64\x1d\xc3\x3e\x87\xe0\x51\x4c\x01\xdf\x45\xfa\x30\xa0\x9f\x4f\xfc\xe8\x75\x7c\xab\x4a\x06\xad\xf6\xa0\x8c\xcb\x8a\x8c\x5d\x54\x12\x8c\x2c\x97\x2a\xe9\x95\x4e\x4c\x76\x06\xb2\xfd\x66\x66\x79\xc5\x30\xfe\x07\xf6\x9b\x8f\x96\x07\x86\xee\x6c\xae\xee\x72\x1b\xa1\x09\xcc\x1f\x4b\x76\xa0\xff\x5f\x97\x5f\x98\x64\x1f\x29\x55\x0d\xca\x8e\x86\xad\x71\x69\x67\x8c\x74\x47\x1d\x4c\x0e\xd5\x03\x50\x15\x54\x68\x48\x23\x8b\x04\x1a\x72\x55\xe4\xff\xd4\x3c\xec\x1d\x21\x5d\xb3\x8b\x15\x58\x7a\x5f\xfb\x66\x7e\xf7\x21\x47\x16\xe8\x91\x39\x53\xdf\x10\x5f\xf8\x00\x7a\xdf\x78\x10\xab\x9b\x8c\x14\xa3\x38\xcb\x13\x9b\x73\xcf\x37\xea\xb1\xaa\x87\xf3\xe4\x31\xc8\x9a\x9c\xf9\x94\xde\xf5\xa3\xe6\xa4\x48\x5e\xb6\x1a\xc6\xe9\x15\x65\x43\x55\x0f\xc4\x83\x5e\x17\x72\x2b\xc8\xb2\xce\x8e\x23\x4a\x59\x9c\x10\x24\x07\xdb\xd0\x37\x69\xed\xfb\xe0\xf2\x73\x70\xf9\xd9\x1f\x97\x9f\xec\xbb\xdc\xbd\x25\x1c\x5b\x80\xb7\x6e\x81\x52\x31\xb2\xe3\xda\xd9\x03\xb7\x76\xe8\x6c\xe7\xfc\x48\x9d\xe7\x47\xef\x23\xc1\x2d\x34\xeb\x78\x80\xba\x24\xbc\xa1\x45\x0d\xa6\x21\x56\x59\xb7\xd6\x99\xd6\x68\x66\x5a\x2b\x24\x63\x71\x9f\x16\x85\xcc\x6e\x3e\xf7\x01\x4c\x20\x85\xa9\x16\x17\x37\x72\x85\x5a\xc1\x07\x41\x67\xf4\x9a\xa1\xf9\xf4\x7e\xc4\x3a\x7c\x95\x14\xbf\x9a\x57\x42\xea\xd2\x54\x94\x07\xbc\x8d\x2b\xf4\xb4\xfb\x09\x76\x5a\x2c\x1f\xf5\x85\x2e\xeb\xd6\x09\x16\x4e\xcb\xaf\xd9\x84\x70\x78\x0e\x82\xff\xa6\x09\x51\x4f\x4b\xee\x20\x19\x11\xe2\xa7\xbf\xf2\x2c\x20\xf3\x4b\x5e\x79\xa2\x2b\x81\x59\xdd\xe6\x57\xb0\xe8\x75\xc7\x25\x24\xe5\x5c\xf6\x2a\x1b\x95\xae\xa9\x6f\xce\x47\x0f\xfc\x70\x76\xe1\x95\x88\x67\xe4\x65\x0e\x0f\x47\x35\x1d\xdd\xf3\x6c\x35\x19\x01\xd5\x77\xcd\x2f\x02\xa4\x5c\xb7\x31\xc2\xb3\x62\x61\x07\xca\x7d\x1c\xe5\x32\xf1\xa5\x3c\x2d\x9e\x1a\x87\x0d\xfb\x22\xb9\xf2\x4f\x4a\x34\x9e\x73\xfc\x20\x4e\x6c\xfd\x3b\xb0\xe1\x06\xaa\x6f\x00\xb9\x38\x9f\x71\x3d\xb3\xad\xb8\x0b\xfe\x17\x8f\xd1\x2c\xf7\x6b\x1b\x65\x35\x0e\xf7\x28\xc3\xe5\x86\x97\xb7\x57\x18\xc7\x97\x28\xba\x69\x68\x63\x5f\xbb\x6a\xc0\x7c\xe9\xe5\xcd\x2d\x88\x79\x52\x4a\x73\x69\xd9\x39\xc5\x72\x49\xf4\x65\xdd\x45\x5f\x54\xcd\x1e\x5b\x9a\x97\xc5\x5a\x80\x3f\xe1\x68\x21\xb0\xa3\x84\xcd\xb1\x28\xdd\x92\x9a\xea\x43\xb8\x26\xe9\x36\xc0\x6b\x73\xc9\x5b\x1a\x63\x1f\x07\xf2\x1f\x28\x95\x64\x87\x98\x8c\xaa\x69\x60\x33\xa9\x16\xaf\x32\x51\x15\x7a\x31\x4e\xb1\xc0\x1e\x58\xf5\x35\xa2\xe8\xa4\xb2\x9d\xfd\x92\x2c\xfc\x9e\xc5\x7c\x95\x87\xdd\x70\x37\xb2\xea\x17\x08\x56\xee\x73\x2d\xa3\x31\x69\xc7\xf7\x27\xc9\xa3\xdd\x38\x30\xe1\x2f\x74\xd2\xd6\xf2\x58\x4d\xee\x6d\x43\x35\xea\x0e\x5a\x20\x76\x8d\x85\xd3\x3b\xa4\x7e\x09\x54\x8e\xa8\x51\x16\x44\xbb\x7b\xed\x17\x1b\x32\x4c\xaf\xbd\x24\xea\x76\xf3\x63\xd2\xd0\x32\x18\x47\x23\xa4\xb5\x5a\x76\x61\xf3\x43\x33\xcc\x69\x7a\x8b\x7d\x92\xf9\x72\x3c\x7f\xf1\x86\x8f\x1e\x74\xca\xab\x97\x1a\x8d\x7c\x34\x9e\xc0\xf7\x34\xc5\x85\xdf\x2b\x95\xa0\xbb\xec\xf9\xa9\x2a\x70\x7c\x0e\x53\xa8\x21\xc5\x2e\x51\x3a\x9d\x68\xd1\x61\xdd\xfc\x12\x97\x00\xdf\x9c\x7e\x53\x2c\x8b\xda\xc1\x74\xba\x2d\xee\xd2\x52\x28\xae\xaf\x3d\xa7\xe7\xae\xfb\x1c\xf1\xce\xed\xd6\xff\x8a\x65\x45\xd9\x54\xca\xb1\xc9\x8f\x25\xec\x56\x1e\x6b\xe5\xe7\x7d\xbb\xb5\xca\xe4\xfe\x2f\x7c\x71\xf5\xa4\x77\x51\xd0\x14\x9f\x53\xef\xcd\x0d\x74\x9d\x00\x33\x77\x42\x1c\x70\x55\xa0\x8e\x85\xd8\xdc\xf9\x1e\xe9\xaa\x45\xa6\xed\x28\xb3\x4d\x30\x00\x87\xe7\x61\x18\x92\xcc\xad\x90\xa9\xda\x4f\x21\xb1\x47\xcb\x7f\x91\xdc\x76\xc1\xac\x74\xaa\x1e\x0a\x96\xcc\x7c\x60\x4a\x3a\xd4\x0e\x8b\x66\x81\x70\xad\x51\xb5\xad\x76\x07\x82\xca\x52\x2a\x30\x9b\xf1\x91\xe7\x9d\x84\x21\xb9\x28\x8d\x55\x9e\x17\xbd\xf6\x9b\xf0\x81\xf1\x41\xf8\x1c\xe7\x47\x61\x9b\x69\x95\xfb\x51\x37\x6a\xe5\xea\xf5\xd9\x8b\x2d\x5d\xac\xcd\x19\xfd\x74\xdf\xd6\xfb\xe1\x6a\xed\x70\xb5\xf6\x7b\xba\x5a\xeb\xb8\xe9\x0e\xd7\x6d\x5f\xf0\xba\xad\xe0\x9a\xbe\xa5\x0b\xb7\xc2\x42\x65\x17\x6e\x2a\xdc\x0c\x07\x84\xc6\x18\x66\x0a\x88\xe3\x06\x8e\xb7\xdd\xc0\x71\x7d\x03\xa7\xd8\xed\xcf\x58\xa0\xd1\x58\x1e\x1d\x04\x47\x62\xa8\x9e\x79\xd0\x9b\x61\x3e\x1d\x5e\x23\x81\xef\xd0\xbd\x37\x09\x12\x12\xa5\x8b\x18\xf3\x82\xb7\x9a\xad\xaa\xf1\xd7\x84\xc4\x1e\x00\x17\x92\xd1\x34\x5e\xc7\x15\xa7\x43\x5a\xa6\xb3\xd6\x39\xbe\x14\x4f\x8c\xa1\x97\xcd\x21\xf8\xa0\x97\xfc\xf5\x4b\x2f\x2f\x83\x69\xc4\xa7\x87\x24\x1e\xb5\xb7\x82\x72\x24\x4d\x70\x6f\xb5\x03\x90\x1c\x65\x4b\x57\xba\x3e\xd0\xaa\x89\x0e\xca\x97\xa0\xaa\x75\xaf\x4b\x4c\x22\xb1\x46\x34\xd6\x48\x11\x6b\xdb\xbb\xd8\x5c\x9b\xea\xbe\x26\x4f\x9c\xa2\x38\x66\x98\xf3\x2f\x66\x09\xff\x72\xd7\x1b\xe5\x5d\x72\x12\x3a\xae\xf4\xcc\xee\xd8\xa7\x3b\x8e\xfa\x0a\xcb\x45\xe5\x38\x9e\x23\x31\xfd\x1d\x2e\x72\x99\x35\xae\x59\xe5\xe5\xb2\xfe\xe6\x9d\x6c\x14\xbc\x52\x08\x0c\xde\x49\x04\x66\xd7\xbb\x7f\x3a\xdf\x73\xb2\x38\x38\x36\x6c\x1f\xa7\x1d\x82\x70\x6c\xf6\x31\x86\xe3\x84\x49\xc2\x14\xf4\xb3\x5a\x9c\x1f\xec\x87\x47\xe5\xf8\x81\xb2\xaf\x02\x78\xa4\x9a\x7a\x70\x3c\xd8\x32\x65\x19\xc9\xee\x80\xcc\x6d\x20\x73\x31\xe7\x82\x61\x34\xfb\x5a\xf9\xde\x36\x8e\xc3\xfd\x3c\xdd\x08\x15\x57\x74\x41\xe2\x2f\x96\x15\xc5\xf0\xd6\x5a\x54\x69\x35\x53\x92\x1d\x71\x90\x1b\xf6\xb4\x16\x95\xeb\x54\x49\xbc\x31\x1a\xfa\xfb\xde\xa7\x45\xa3\x85\x91\x89\xb5\x7f\xbc\xe9\xf4\x11\x56\xc2\xb4\x6a\x25\x4c\xf0\xba\xae\xbb\x98\x08\x9d\x5d\xc7\x09\x8f\xe8\x2d\x66\xf7\xc3\x68\x8a\x12\x52\xe9\x96\xb5\x76\x8b\xbe\x6a\xcb\x23\x7d\x12\xcb\x23\xea\x62\x79\xe4\x9f\xd7\xf2\x88\xbe\x8c\xe5\x91\x7f\x21\xcb\x63\xe2\xde\x0d\xee\xcd\x95\xb4\xee\x82\x74\xbf\x0c\x8d\x8b\xed\x18\x1a\x1f\x53\x30\x35\xbf\xd0\x6a\xc9\xa9\x91\x3e\x3e\x52\x96\xa7\x8b\xeb\x91\x39\x29\x8a\xf9\x35\xd2\x5e\x36\xc9\xc4\x07\x30\x85\xbc\x60\xb8\x83\x0b\x96\xf2\x35\xf9\xeb\xe4\x6b\x0f\x40\xc3\xbd\x47\xe3\x49\xdd\x70\x99\x7d\xa0\xc5\x1e\x09\xbd\x84\x5c\x33\xcc\x79\xe1\x89\xc0\x6c\x96\x10\xed\xa0\xb4\xd6\x6e\x29\x8c\x90\x62\xcc\x75\x56\x58\xb9\x10\xa3\x2a\xaa\xa8\x4f\x55\x62\x41\x6d\xaa\x53\x27\xc2\x08\x75\xc0\x0d\xab\xe3\xc6\xce\xba\x4b\x73\x52\x6b\xee\x36\x8b\x92\x1c\x5b\x8f\x40\x07\x69\x40\x47\x03\x32\x88\x46\x86\xe9\xd2\x34\x6a\x9e\x57\x35\xca\xb0\x36\xaf\x4e\x75\xef\xdb\xa4\xbb\x45\x2f\xb1\x66\xaf\x75\x6c\x2b\xec\x6d\xae\x60\x1b\x14\xd8\x6e\x0e\xde\xcb\x9f\x4f\xb7\x30\xa8\xb7\xf9\xfb\xbe\x0c\xee\xb7\x32\xf4\xce\x4e\xa5\x8d\x1d\x7c\xf1\x14\x78\xeb\x47\xf6\xb8\xcd\xb5\x0b\xf9\x35\x9b\xca\xb2\x3f\x14\x12\x5d\xda\x84\x8b\xa5\x4c\x44\x4a\xdc\x80\x66\x4a\x8e\xf7\xb9\xe6\xa9\x94\x44\xa0\x45\x09\xce\xa2\x11\x0e\xb2\xa9\x7f\x46\x8d\xbd\x8a\xf3\xdd\xc9\x8a\xb9\x73\x79\x30\xa1\x12\xfe\x3a\x2e\xe9\xe7\x5e\x42\x73\xe6\xee\xc6\x76\xf9\x62\x41\x52\x4a\xcc\xdc\x57\xe3\xd9\x2e\x04\x46\x7d\x55\xc2\x82\x40\xd7\x07\x3c\x6e\x01\x8f\x5f\xbb\xbd\xfe\x29\x91\xf9\x25\xcf\xd3\x6e\xce\xf5\xf2\x74\xec\xe7\x1c\x5f\xc8\x6e\x73\x8d\xc5\xf3\x48\x24\xb7\xd8\x57\xee\xb8\x6b\x83\xbc\x75\xfe\xcd\xa3\x96\x64\xf4\xb0\x64\x6c\xd0\xfe\x40\xbd\x30\xfe\x85\xef\x20\xd6\xe6\x97\x23\xf8\xce\xa0\xf4\x15\x63\x52\x7a\x78\x87\xae\xf1\x31\xa1\xe2\x58\x0f\x39\xcb\xe2\x15\x44\x34\xc6\xe1\x1f\xce\xfe\x00\x71\xaf\xb9\x6b\x31\xa6\x41\xb1\xc0\xe4\x76\x8d\xb6\x9e\x2f\x09\xba\x4c\x9d\x11\x6a\x45\x1f\xe1\x8c\x42\x2a\xe7\xf1\x73\xc6\xd0\x7d\x90\x70\xf5\x6f\x21\x2b\x1e\x97\x3b\xcd\xc7\x60\xb9\x4c\xd4\x7f\xa9\xfa\x6f\x01\x41\x7a\xe2\x12\x41\x1f\xef\xe7\xd8\xa0\xe7\xb5\x8e\x7f\x3c\x46\x42\x6a\x20\xe2\x58\xd0\x63\x3e\x67\x18\xc5\xc7\x84\x92\x61\x22\xb4\xd5\xf6\xd8\x2a\xe4\xc1\x7f\x91\xd7\xe4\x98\xb2\x18\x33\x09\x7a\x89\x8f\x2d\x08\x54\x0d\x90\x1c\xd4\x31\x55\xab\xcf\x8f\x67\x0b\x2e\x8e\xa7\xe8\x16\x1f\xa3\xe3\xb1\xbe\x24\x08\x14\xbc\xa0\x6c\xe2\x83\xe3\x19\x16\x53\x1a\x07\x1e\x58\xf9\xa0\xe2\x41\xdc\x6f\xee\x78\x2b\x13\x8f\x31\x17\x6c\x11\x89\x05\xc3\x5f\x6e\xf6\x54\xf3\xc4\xe4\xca\x5e\x68\x72\xc1\xa4\xd8\x19\x86\xe2\x7e\x8e\xe9\xd5\x31\x2e\x2c\x38\x14\xe0\xa8\x74\x9b\x33\x67\x54\x50\x09\x18\x08\xfa\x41\x35\x0c\x22\x94\xa6\x3e\xb6\x2c\xfb\x5f\x25\xcb\x36\x8c\xda\xd3\x8d\xbc\x30\x0c\xc9\x60\x20\x77\x04\xd1\x08\xa0\x4c\xc5\x3c\x94\x9e\x68\xab\x18\xf4\x7e\x46\x73\xd5\x60\xb9\xf4\x3e\x60\xdd\xf6\x42\x2f\xcb\x15\xa3\x33\x1f\x83\x91\xf7\xdc\x5e\xa3\x18\xc0\xd3\xff\xe7\x5f\x8c\x7e\x4d\x96\xaf\x01\x11\xfe\xc5\xe8\x5f\x97\xe7\x7f\x5c\x7e\xf7\x0c\xf8\x17\xa3\x17\x29\x9a\xcd\x71\x0c\x74\x0f\xff\xeb\x34\x10\x98\x0b\x9f\x80\x0b\x3d\x37\x5b\xb5\xa0\x72\x05\x01\x1e\x7c\x93\x71\x76\xb9\x14\x3f\x60\x73\xb7\x03\x06\x03\x65\xc8\x37\xbf\x8e\xec\x4d\x10\x09\xcf\x20\x53\x7c\x41\x53\x8d\x00\xdf\x93\x3f\x89\xef\xc9\xb7\xdf\x02\x36\x26\x93\x10\x8f\xc9\x24\xbb\x42\x2b\xb9\x23\x6b\xfc\x2f\x88\x66\x06\xb1\x77\x62\x97\x40\x2f\xe6\x60\x50\x59\xd4\xe3\xc4\x5e\x6e\x15\x48\xb3\x84\x9b\x27\xf5\x3d\xee\x71\x18\x29\x66\xc6\x9a\x80\xd5\xcb\xa6\x44\x9e\x46\x29\xa8\x2a\x69\x35\xf5\x4e\x20\x26\xb8\xbe\x0d\xfe\x1f\xab\x2f\xd0\x30\xcf\x02\xa2\x0c\x87\x98\xdc\x02\xf9\x41\x2a\x7e\x7d\xff\xc6\x03\x59\x60\x8d\xf7\x3f\x56\x25\xcc\x1e\x59\xe5\x3d\x58\xb0\x14\xd8\x6b\x08\x3d\xd4\x80\xe1\x88\x5e\x93\xe4\x1f\xd8\xa7\x00\x26\x21\x92\x9d\x93\xdc\x2a\xc9\xe1\xc3\x2a\x3f\xf4\x7e\xb9\x23\xa6\xb0\x0e\x00\x00\xa6\x61\x32\x3e\x9b\xc0\x45\x98\x98\x0d\x72\x5e\x57\x52\x8a\xf1\xa0\xe3\xb4\x2e\x06\x15\x65\xa0\x49\x16\x1b\xe4\x2f\xb2\xd7\x40\x9e\xaf\x8e\x7b\x95\xfe\x22\x80\x55\xae\xb1\xc1\x73\xa3\x48\x20\x77\x89\x59\x14\x93\xbf\x52\x87\xca\x52\xb5\x8f\x07\x03\x1f\x37\xac\xd4\x85\x43\x7a\x30\x90\x25\x21\xc2\xb6\x87\x5a\xe8\x50\xaa\xbf\x49\x31\xbe\x46\xf4\xb0\xad\xaa\x02\xc7\xfa\x84\x45\xd9\xe5\xd4\x97\x11\x38\xa2\x34\xc1\x44\x34\xec\x16\xfd\xf2\x74\x2a\xc4\x7c\x7d\xb4\x65\xe1\x86\x2d\x8e\xba\xe5\x5a\x50\x7b\xd5\x44\xd8\x76\x6b\x61\x42\x6c\xe3\x84\xcb\x53\x29\x6e\xc9\xbd\x90\x5b\x67\x24\x85\x27\x11\x12\x3a\x6b\x7b\x47\xba\x34\x19\x66\x7d\x90\x19\xea\xf4\xc4\x0a\x04\xab\x71\x2b\x91\x1d\x71\x50\xb2\x0c\x15\xa6\x55\x96\x71\x9b\x13\x76\xb9\x5c\xec\x8d\x97\xbf\x5e\x85\xc0\x66\xd4\xf0\xc0\x60\xa0\x81\x78\xc1\xef\x47\x03\x79\xf0\xc1\x82\x19\x4a\xd8\xec\x8a\x27\xcf\x21\xb1\x98\xc7\xf5\x38\x75\x93\x3e\x17\x9b\xbc\xb8\xe6\xdb\xa3\x92\xec\x5d\x1b\xf5\x72\xa9\x73\x43\xe8\xe7\xe8\x92\x32\xe1\x83\x95\x3a\xc5\x20\x83\xe8\x28\xc7\xfd\x1c\x33\x9e\x70\xe1\xfb\x28\x14\xd0\x67\x21\x06\x09\xf1\x49\xf8\xb0\x02\x0d\xf7\xf1\xb2\x03\x43\xff\xa8\xd7\x7d\x3c\x19\xb3\x49\x88\x20\x01\xd5\x0c\x0f\x6b\x04\xe5\x62\xf5\xd9\x2e\x4e\x3a\x5f\xb3\x5b\x0a\x29\xba\xa5\x90\xf0\xfc\x7b\x52\x77\x4b\x21\xd6\x2d\x05\xd5\xdc\x52\x48\xd1\x2d\x85\x28\xb7\x14\xf2\xbf\x9f\x5d\x08\xeb\x02\x82\xd6\xb8\xa5\xa8\x41\x43\xf4\x39\xdc\x52\x10\x00\xa3\xc2\x98\xb6\xee\x96\x82\x9a\xdd\x52\xd8\x3e\xe6\x64\x47\xce\x93\xe6\x89\x73\x5e\xb0\x42\xce\x8b\x6d\xa5\x3c\xb7\xa2\xd8\xfa\xe4\x19\x4d\x47\x0a\xa9\x97\x3a\x43\xf6\x98\xa0\x36\x5d\x06\x5f\x41\x56\xaa\x9a\x38\xe2\xc5\xfb\xff\x6a\xfe\x0c\xe6\xaa\x85\x82\x0a\xb5\x50\xa8\xdc\x0c\xac\x56\x29\xcd\x04\x3d\x57\x24\x13\xe4\xe6\x72\xfa\xf2\xe4\x54\xf3\x13\x7e\x8a\xa2\xf4\x69\x84\x13\x67\xb0\x95\x5f\x5f\x5a\x12\x8a\x80\x43\x16\xe6\x71\x68\xe4\xc2\xf3\x46\x04\x04\x82\xbe\xa1\x77\x98\xbd\x40\x1c\xfb\x76\x1d\x54\x61\x9d\x92\x5d\x5f\x9b\x81\xca\xc0\x85\x18\xf8\xe5\xb2\xde\xe4\xf5\xcb\x35\x0d\x56\x0a\x8f\x1d\x30\x97\x57\xd0\xdb\x09\xfc\x55\xd0\x07\x51\x79\xce\x1f\x94\x07\x89\x0b\x59\x90\x96\x21\x5f\x62\x2e\x94\x87\x0b\x25\x4e\x70\x1e\xb2\xca\x93\x24\xf4\x9e\xa7\xe9\xb1\x75\x5a\x39\xf6\xbf\x01\x5e\xf3\xea\xa1\x0c\xd9\xdc\xae\x0e\x2d\x3d\xf2\xbe\x91\x9c\x02\x0d\x06\xea\x5d\xe2\x78\x47\x1d\xef\x3a\xaf\xdb\xcd\x6d\x8b\x8b\x4a\x72\x3d\x15\x43\xc1\x92\xd9\x56\xaf\xd1\x5b\xd7\x93\x64\xc5\x4d\x02\x0e\x51\xbe\x9e\x4c\xae\x27\x2b\x62\xb0\xec\xba\x52\x5a\x3c\x5d\x19\xc1\x3b\x95\x2a\x9e\xe6\xae\xa7\x59\xbd\x29\x37\xc5\xa3\xf2\xf3\xee\x78\x54\xa9\xdb\x77\x82\xf4\x37\x66\x1d\x2a\xf6\xb4\x17\xeb\x78\xae\x63\x32\xb7\xc1\x3f\x54\x6a\x67\xeb\xe6\xb8\xd7\x78\xfc\x60\x7d\x35\xb7\xc7\x85\x97\xcb\x32\x5d\x7f\x44\x52\xff\x5c\x2e\xc7\x13\x10\x70\x3a\x73\x06\xf3\xaa\x4f\xe0\x75\x0b\xe3\x1a\xc6\x3b\xca\x84\x1a\x88\xb6\x3a\x36\xee\x93\x3e\x2b\x5b\x33\xb5\xef\xdf\x9a\x6e\x70\xac\x5a\xa1\x57\xa9\xe2\x9d\x57\xf6\xf9\x8b\x37\x3c\x28\x67\x0a\xeb\xb8\xd0\x4a\x86\x5c\xbb\xda\x8e\x2f\x15\x33\x90\x6d\xe9\x3b\x86\x2e\x1c\xd1\xdd\x15\xba\x98\xab\x59\x1e\xe8\xe2\x71\xbb\x8b\xd1\xb5\xca\xf9\xef\x19\x87\x55\x8a\x57\xdb\x2a\xc1\x4f\xb5\xa1\x6c\x8e\x87\x58\xca\xc1\xa2\xfb\x77\x0a\x09\x1d\x3a\xec\xab\x76\x8a\x70\x1c\xa2\x75\xb1\x6e\x11\xa9\xe2\x4f\x9f\x57\xa6\x63\xc6\x38\x02\x69\xc8\x02\x0e\x79\x81\x64\xa8\x24\x19\x5a\x25\x19\x63\x7c\x3b\x39\xd3\xd6\xb7\x63\x5e\xb2\x72\x5b\xdf\x41\x0f\x8c\x32\xef\x6f\x07\x65\x41\x6e\xb5\xdc\x7f\x05\xe0\xc8\xd1\x8f\x40\xd7\xcd\x7d\xe4\x47\x6d\xde\xcf\x1f\xdc\xfd\xd8\x24\x64\x60\x64\xc6\x8d\xc2\xac\xc9\xbf\x14\x86\xf1\x2f\xb6\xc8\xd6\x1d\x62\x24\x21\xd7\xde\x48\x9b\x16\x59\x22\x92\x08\xa5\xe6\xe7\x1c\x71\xae\x5e\x96\x54\x6e\x33\x2a\x9d\xc2\xbd\x7c\x09\x93\x89\xc0\x08\x00\xf0\xc3\x59\xa5\x2a\xd7\xc9\xf9\xaa\x52\xa6\xab\x01\x59\x60\xb9\x5c\x83\x02\x1d\x11\x63\x2e\x2b\x33\xd3\x0d\xf6\x8b\x86\x9b\xf2\xed\xae\x00\x17\xa2\xba\x05\x44\x31\xe3\x08\x24\xca\xaa\xa5\x8b\xc4\x36\xec\x00\xd2\x8f\xf6\xbf\x12\x69\x3c\xd8\x40\x24\xb7\x01\x16\x2d\xf2\xa4\x6a\x98\xdf\xe2\x39\xbb\xc8\xa4\x7b\xe8\x8d\xf2\x0b\x3c\x27\xa8\x16\x1b\x37\x3a\xc0\x54\x15\xb9\xfd\x5e\xab\xe7\x51\x84\x39\xa7\xac\x0b\xce\x0f\x47\x5f\xff\xa3\xaf\xfa\x39\x29\xb5\x6e\x59\x5c\x75\xd2\x29\x4b\x50\x9a\xfc\x43\x12\xe9\x30\x73\x6d\x2e\x1e\xaa\x7f\xc6\x72\x54\xc3\x18\x09\x54\x80\x3e\xfd\x6f\x4e\xc9\x16\x0e\xd6\xc6\x06\xd9\x58\x1e\xca\x86\xef\x6b\x2c\x1c\x8e\x69\xd9\xc1\xb0\x52\xd9\xbe\xdb\x26\x2a\x07\x3f\x44\xf3\xa4\xf3\x4c\x15\xf0\xbe\xce\x96\x61\xde\x6d\x4d\x15\xe0\x9e\xce\xb2\x62\xd4\x86\x4d\x60\x85\xbb\xe3\x52\xd6\x67\x1a\xe3\x54\xf7\xf2\x39\x93\xb1\x3f\xcc\x59\x32\x43\xec\xfe\xaf\xf8\x7e\x44\x82\x77\xef\x5f\xff\xfc\xfc\xfd\x7f\xfe\xf6\xd7\x57\xff\xa9\xa2\x0b\xf4\xd3\x0f\x6f\x7e\xfd\x37\xf5\x88\x61\x3e\xa7\x24\xfe\x89\xb2\x7f\x5f\x60\x76\xff\x1e\x47\x94\xc5\xce\xdb\x97\xe3\x42\xed\xec\x06\x89\xa4\x62\x86\xcc\x22\x26\x31\x24\xe3\xb3\x89\xc9\x97\xdf\x31\x11\x71\x23\x82\xdb\xd7\x43\xb9\x22\xd4\x25\x77\xf9\xf8\x54\x3f\x6c\x7a\x3b\x55\x35\x14\xb9\x6b\x15\xe3\xc8\xf5\xd4\x9a\x68\x6a\xdd\xe9\x1b\x98\xe1\x55\x42\xae\x31\x9b\xb3\x84\x88\x7a\x55\x6e\xa8\xee\xb4\x21\x85\xbc\x70\x17\x9c\xec\xe3\x65\x5e\x1a\xba\xee\xda\xaa\xb7\xbc\x3f\x3c\x1b\x0c\xb2\x12\xfa\xf9\x9d\xee\xb3\xe2\x05\xef\xb3\xc9\xe8\x61\x05\x51\xf8\xb0\xaa\x24\x89\x36\xf7\xe1\x0d\xb5\xb7\xc7\x15\xf9\x77\x12\xca\x19\x4a\xca\xca\x3e\xc8\x82\x38\x1a\x0c\x7c\x34\x26\xc1\x5f\x5e\x3d\x7f\xf9\xea\xfd\x87\xdf\x5e\x3e\xff\xf8\xfc\xc5\xab\xb7\x1f\x5f\xbd\xaf\xb6\x96\xc0\x00\x16\x61\xdf\x3e\xff\xf9\xd5\x87\x77\xcf\x5f\xbc\xaa\x82\x16\x3e\x40\xf8\x85\xfc\xcf\x28\x67\x4a\xa2\xd0\xc3\x87\xff\xfc\xf9\xc7\x5f\xde\x4c\x42\x04\xc5\x0a\x2e\x1c\xfb\x16\x09\x81\xa2\xe9\x5f\x34\x0d\x8e\x52\x58\x20\x9e\x91\x7f\x06\x79\x41\x51\x09\x7e\xfa\xe5\xfd\xab\xd7\xff\xf6\x56\xed\x61\x1a\xbc\x55\x23\x93\x3f\x40\x75\x47\x37\x66\xfe\x3f\x6a\xd2\x34\xcd\xf3\xd4\xc7\xd0\x47\x21\x83\x34\x54\xa9\xf5\xed\x50\x7c\x12\xe4\x0c\x06\x92\xc0\x30\x15\xa9\x47\x45\x00\x96\x55\x18\x04\x2e\x50\x30\x43\x73\x9f\x82\xd1\x18\x4d\xcc\x9f\x92\x17\x58\xc7\x4d\x04\xa9\xf2\x3e\xe9\xc2\x87\xfa\x8d\xbd\xfb\xa0\x7d\xa6\xb8\x52\x79\x18\xfa\x32\xd7\x31\x8e\xfc\x82\xa5\x98\xa2\xd4\x76\x68\x2e\x83\xf3\x8f\xb9\x87\x9a\x71\xcd\x13\x29\x34\x0b\xe5\xb9\x49\x00\x64\xa5\x31\x73\x48\x21\x19\x97\xd6\x7a\x02\xfc\xda\x48\x7f\x55\xde\x37\xfb\x30\xd2\x97\xaa\x52\x4a\xfb\x48\x79\x79\xa4\x69\x97\x91\x1a\xbf\xae\x2c\x0b\x86\xff\xb0\x82\x69\x65\x98\x29\xe4\x8e\x61\xfa\x38\x7c\x58\x41\xc9\x77\xe5\x5b\x3e\x01\xea\xef\xe2\xa6\x82\x64\x5c\xfc\x39\x01\x10\x03\x30\x4e\xf5\x89\x06\x09\x65\x33\x75\xf4\xbc\x57\x13\xe5\x65\xe7\x05\xcd\xe2\xf5\xe8\x78\xc8\xea\xfc\x60\xb9\x7c\x58\x1d\xe9\x1a\x32\xc7\x8e\xd7\x86\xbf\x6a\x97\x31\xfb\xa5\x77\xe8\x3e\xa5\x28\xf6\x75\xdf\x92\x99\x94\x5e\xff\x8c\x85\xae\xd3\xcf\x61\xaa\x20\x8e\x3c\x15\xf8\xe8\x9d\xa8\x3b\x4f\x3f\x0d\x66\x58\xa0\x70\xa1\xb7\x60\x14\x16\x4f\x76\xd9\x2c\xf1\x1f\x24\xc0\x68\xb1\x82\x42\xbb\x40\xe8\xe4\x16\x3a\x2f\xfa\x51\xd5\x1b\x2d\xba\x60\xa3\x68\x05\x45\x32\xc3\x5c\xa0\xd9\xbc\x2e\x77\xf9\x04\xdf\x1d\xbf\x44\x02\x03\xa9\x89\x7c\x4c\x66\xd8\x2f\x22\x4e\xe5\xb8\x2d\x21\x4d\x9d\x8a\x30\xd1\x68\x4b\xc3\x87\x08\x45\x53\x6c\x9c\xd3\x46\x68\xcc\x82\x17\xcf\x5f\xfc\xe5\xd5\x6f\x2f\x7e\x79\xfb\xf1\xfd\x2f\x6f\x2a\x2c\x19\x46\x0b\xc6\x29\x1b\x15\xd9\xf7\xeb\xb7\x2f\x5f\xfd\xdf\x2a\x5c\x1c\x8d\x3a\x1d\x07\xd6\x21\xa3\xcb\x79\xb0\x2a\xa3\x47\x9e\x74\x63\xef\xd3\x90\x21\x72\x8d\xbd\x89\x42\xbe\xfa\xbb\xf4\x18\x40\xb3\x40\x61\x18\x26\x0a\x46\x6e\x69\xbd\x2e\x19\x5a\x7d\x00\xa9\xe3\xf8\xc3\xe0\xa1\xe4\xe9\xf7\xe1\x9e\x44\x12\xc3\x1e\xd4\xbd\x28\x97\x0e\x98\x16\xd0\x6d\xa8\xc7\xe5\x89\x8b\x3b\x25\x6e\x28\x0a\x5b\x79\xb1\xe5\x2d\x88\xca\x85\xce\x76\x55\x62\xee\x2b\xbb\x4a\xb9\xb1\x1f\x5e\x3e\x63\xd0\x7d\x61\xde\xda\xa4\xb2\x46\x7a\x68\xb6\x04\x59\x49\xb5\xcc\x0d\xeb\x54\x56\xe5\xf3\xd6\x4a\x4d\x8c\x55\x57\x6f\x01\x6b\x65\xc5\x4a\x5a\x70\xb9\xc1\x0a\xc9\xaf\x49\xc8\x8a\x47\x3a\x0a\x31\x24\x52\x54\x16\x0d\xa2\xb2\x94\xb6\x37\x72\xff\x14\x63\xa2\x64\x36\xed\x1f\x0d\x09\x44\x25\x2f\xbc\x2e\x89\x08\x4a\xf4\x50\x4e\x61\xb6\x85\x4d\x53\xed\xb1\x25\xac\xea\x2b\xf6\x34\x3d\x94\x5e\xd8\x86\xa7\xe9\xee\x94\x5e\xd8\x0e\xe3\xe3\xbb\x6a\x22\x61\x25\x13\x89\x49\x3c\xcf\x54\x02\x27\x9d\xcb\xa9\x30\x86\xe0\x85\xdc\xdb\xe3\xfc\xd1\x04\x80\x06\x83\x0a\x6f\x67\x42\xda\x42\x52\xe4\x3c\x4e\xe3\x1d\xdf\x96\xf5\xae\xf3\x81\xf4\xe8\xe3\xa7\x6d\xb1\x7a\x77\xf3\x93\x8e\xf1\x78\x4c\x17\x0d\xaa\x64\xef\x7e\x1a\x14\xbd\xde\xfd\x34\xa8\x61\xdd\xfa\xe9\x7b\xde\x39\xdd\x5b\x37\x3c\xe9\xf2\xbe\xbe\x16\xe9\xb0\xd9\x89\xb4\x07\x5a\x6e\x6e\x3b\x9a\x26\x51\x8c\xe6\x62\x5d\x87\xc6\x73\x55\x15\x54\x1d\xca\xe3\xb1\xc9\x64\x59\x10\x29\x3e\x73\x52\xcc\xed\x2c\x73\xf2\xc8\x33\x21\xc6\x11\x8d\x1b\x03\x48\x91\xa0\x97\x2a\xe3\xa4\x59\x42\x67\xa6\x02\x24\x04\xf3\xbd\xbf\xc9\x81\x66\x11\x67\xb5\x58\x67\xa1\xa3\x11\xcd\xe7\xb2\x9a\xb8\x02\x8c\xe4\xea\x74\x33\x9b\x6d\xc1\x7c\xef\x9f\x41\x9a\x5b\x1f\x95\x31\x3f\x3f\x7c\x7a\x5b\x1c\xdd\x23\xa1\x0d\x23\x49\xb2\xe7\x52\xfa\x48\xea\x5a\x81\x0a\xac\xcd\xca\x2c\xf9\x54\x69\x07\x99\xf1\x08\x03\xc8\x7d\x0a\x59\xd1\x9c\x23\xc6\xc8\xfe\xfc\xf7\x5f\x5f\xbd\xff\xcf\xdf\xde\x3d\x7f\xff\xfc\xe7\x09\x50\xb6\xc8\x86\x53\x35\x69\xdf\xcc\x55\xdf\x89\x0d\xb7\xb3\xea\xe6\x09\x19\x5c\x9d\xe3\x7b\x5e\x18\x86\xb8\x28\x5c\x0c\x06\x7e\xe9\x77\xa8\x5d\x2a\x00\xc4\x2b\x88\xb6\x2b\x4f\x3d\xc1\x65\x93\xa2\x11\xb6\x86\x44\x9f\x6a\x9f\x30\x29\x8f\x37\x7e\xf5\x8d\xb2\xec\x77\x3a\x71\x33\xe7\x0a\xed\x7c\x3f\xf2\x00\x64\x21\xd1\x0e\xf8\x86\xd4\x1f\x8c\x97\xc9\x88\x98\xe0\x6b\x09\xf4\x8e\x32\x31\x62\xab\xda\x41\xdd\x18\xc4\x53\xa0\xde\xb5\x89\x3d\xfa\xd0\xaf\xee\x68\x57\x8f\xe8\xb5\x26\x8e\x3c\xa9\x97\xdb\x1a\x5e\x58\xee\xa0\x74\x5d\x93\x91\x9d\xcb\x60\xd1\xee\xa8\xac\xe2\xd1\x1d\x6f\x42\xe7\xd3\xc6\x0f\xe1\xc0\xa6\x51\x0c\x3d\x0f\x6a\xc5\x79\xec\x55\x3e\xa6\xdd\x40\xb2\x9f\x13\xb7\xfe\x98\x59\x77\xf5\x08\xb2\x01\x86\xe3\x89\xbd\x54\xcb\x5e\x8e\xc5\x24\x7b\x2f\xcf\xe9\xb1\x52\x82\xf5\xf7\x9f\x46\x2a\xef\x23\x52\x67\x69\xfb\x56\x3b\x2f\x4f\x77\x90\x18\x69\x12\x47\xc3\x39\xa3\xb7\x49\x8c\xd9\x16\x76\x6b\xb9\xbf\xdf\xb5\xed\x68\xff\xc4\x58\xba\x35\x56\xf8\x7c\x21\xa6\x94\x95\x65\xd5\x9a\xbd\xb6\x85\x9e\x59\x8d\x25\x1a\x17\xd5\x2d\x9c\xbf\xa4\x61\x37\xd1\x42\x02\x6b\x0c\x8b\x9b\xef\xcb\xd8\x01\xd1\xd7\x6c\x07\xf4\x1f\x54\x76\x5e\x11\x24\x71\x21\x9a\x58\x04\x84\xaf\x20\x6d\x12\x9c\x69\x3b\x4f\xab\x07\xb4\x6c\xc8\xcc\x4c\x47\xbb\x2a\x7a\xf4\xe5\xf5\xb5\x92\x50\x9b\xa2\x45\xf5\xf3\xb5\x60\xa5\x1a\xb8\xb3\x21\x52\x74\x37\xc5\xe7\xc9\xa7\x84\x58\x1a\x3a\x45\x7c\x38\x43\xc4\x81\x35\xc8\xb6\x85\x37\x87\x22\xc5\xec\x03\xb8\x31\x06\x3b\x88\xfa\x2d\x81\x2e\x3d\x90\x68\x7b\xda\x55\xda\x7a\x22\x65\x53\x8f\x2c\xf7\x51\x23\x75\x89\x25\x57\xae\x6b\x05\xb9\x74\x11\x87\x95\x93\x63\xcb\x66\x63\xed\x7c\x3d\x09\xa5\xf4\x02\x7b\xf4\x1d\xb6\xf6\x8d\x75\xc1\xcb\x9f\x28\x1b\x0c\xf2\xbf\xd7\x69\x00\x27\x61\xc8\xb4\x7c\x2f\xff\xd1\x4d\x42\x5b\x1d\x02\x2a\x75\x7b\x9b\x7a\x76\xd3\x39\xcf\x4a\xe7\xbc\xf3\x1c\xca\xb5\x2c\x06\x3d\x15\xa4\x65\x48\xd0\xc6\x5a\x64\xa0\x1e\x80\x6f\x69\x8c\xf9\x88\xad\x36\x77\x4a\xe5\x98\xf3\xed\x98\xb5\x6d\x4f\xfb\xb2\x89\x76\xd3\x49\xb8\x16\x0e\xb3\xe1\x6a\x98\x7e\x5a\x0f\x06\x07\x84\x3c\x52\xd6\x1d\x1c\x10\x6d\x6b\x45\x1d\x82\x7f\x7e\x74\xa0\x8d\x0e\x11\xa7\xb9\xba\x6c\xc0\x35\x0b\xbb\x3e\xc3\x8d\x96\xa6\x43\x12\xbc\x5f\xa4\x98\xab\x3c\x9a\x0f\xaf\x5f\xca\x0f\xe1\x88\x61\xf1\xfa\xa5\xda\xb2\x23\x12\x14\x02\x72\xe0\xc7\xfb\xb9\x7c\x24\xff\x81\xaa\xdd\xc8\xb4\x5f\x01\x48\x06\x03\xe3\x1e\x57\xe8\x83\x14\x79\xcd\x07\x9c\x5e\xad\x21\x47\x27\xf9\x2a\xb0\x0d\xdc\x28\xd7\x1b\xb1\xd7\x10\x7a\x56\x22\x5d\x21\xc7\xc6\x15\x0d\x06\x19\xbe\xec\xa3\xe5\xd2\xcf\x7f\x14\xcc\x2d\x0a\xe8\xf5\x4b\x9b\x27\x8b\x05\x5c\x50\x86\x83\x39\xc6\x37\xcf\xd3\xd4\xf7\x34\xe1\x02\x93\xd6\xc7\xf7\x2c\xae\x3c\xa8\x9a\x1d\x21\xb9\x16\x19\x06\x55\x5f\x90\x04\x79\x08\x56\x21\x5c\x0a\x95\x43\xb3\x32\x15\xa0\xc4\xee\x21\xe9\x2c\xe9\xeb\x4c\xdf\x43\xb9\x2f\x51\xea\xba\x78\xe6\x02\xb1\x6b\x24\x70\x1d\x78\xbf\x42\x47\xf4\xd8\xd5\xfd\xcf\xda\x28\x62\x05\xf1\xc4\x05\x8b\xec\xb1\x67\x39\xbe\xb9\x3c\x5a\x37\x35\xb3\xb3\x4d\xd2\xc2\x7c\x6f\x77\xbd\xf5\xd5\xd3\xbf\x14\x14\xad\x9f\xbe\x82\xf8\x5a\xa7\x6f\x12\x62\x1a\xd1\xac\xa5\x90\x50\x66\x7f\x12\xfd\x93\x3e\x93\x2c\xe1\x75\xa5\xc1\x76\x53\xf6\x56\xbe\x60\x92\x33\x9f\xd8\x34\xcc\x47\x6b\x73\x34\x93\x3c\x47\x33\xeb\x99\xa3\xb9\x90\x9d\x99\xd5\xb3\x33\x33\x57\x76\x66\x35\x16\x93\xa0\x99\xe5\x09\x9a\x99\x73\x62\x0a\xb8\x94\xaa\x99\xf5\x4f\xd5\xcc\x40\x79\xa6\xab\x7d\x4d\x3a\x4e\x9e\x3a\xb1\xf4\xb6\x44\x59\xf7\xee\x8e\xe9\xac\xa9\x1a\x24\x9d\x79\x00\x62\x72\xdb\xf0\x1e\x93\x5b\x0f\xc0\xfe\xe5\x24\xd5\x83\xa6\x6a\x92\x85\x8c\xb4\x92\xd0\x4f\xf1\x2d\x26\xc2\x74\xe2\x01\x98\x90\xa4\x74\xc4\xb4\x0a\x57\x50\x43\xa4\x09\x17\x98\x60\x66\x02\x24\x62\x3a\x0b\xb2\x47\xbe\x01\x2a\xf0\x1d\xb5\x36\x1f\xb0\xd0\x2f\x50\x1c\xff\x2d\xe1\xc9\x65\x92\x26\xe2\xfe\xc5\x14\x91\x6b\xe5\x85\x7f\x97\xa4\xe9\x4b\xcc\x05\xa3\xf7\xf5\x21\x65\xbd\x07\xda\x29\xc4\x7e\x64\xbe\x60\xd7\xd9\x8f\x75\x03\x5f\x41\xc7\x67\xdd\xd9\x78\x8f\xaa\x9f\x44\x71\xec\x67\xf3\x8c\x69\xa4\xba\xf4\x01\x7c\xb8\xcd\xfa\x8b\x2a\xfd\x09\xf0\x60\x53\x43\x06\xd3\x24\x8e\xb1\xca\xeb\xae\x47\x3b\x3c\x97\x8c\x7c\x05\xef\xa6\x98\x3c\xbf\x45\x49\xaa\xce\x7b\xf7\xed\x1f\x24\xa1\xe3\xcb\xb9\xba\xaf\xfb\xbe\x90\xf8\x35\xd9\x17\x0b\xe2\x1e\xcb\x0a\x86\x56\x67\x43\xd6\x8d\x1d\x3c\x20\x1f\x40\x55\x2f\x44\x49\x18\xa3\x6a\x5e\x47\x0c\x56\x50\x4d\xa5\x8e\xbf\x5a\xa8\xdd\x99\x33\xd4\xee\xac\x68\xd9\x3e\x9b\x8c\xce\x8e\x84\x5f\x25\x9a\x06\x3b\xb2\xcd\xc6\xab\xeb\x65\x36\x51\xda\x0a\xa2\xe8\xef\x8b\x84\xe1\x6a\xbe\xf4\x6a\x83\x80\x27\xff\xc0\x3f\x68\x24\x63\x72\x1b\xdc\x22\xe6\x7b\x2f\x7e\x79\xfb\xe1\xd7\x37\xbf\xfd\xe5\xe3\xc7\x77\xbf\xfd\xfc\xfc\xff\xfe\xf6\xe2\x97\xb7\x6f\x5f\xbd\xf8\xf8\xfa\x97\xb7\x1f\x6c\x06\x75\xbb\x2e\x48\xa0\x20\x4a\x29\xc7\xb1\xc4\x59\xe8\x9c\x46\x42\x62\x97\xd1\xe4\xe4\x04\x07\x26\xd0\xd3\x07\x2a\x08\x03\xff\x7d\x81\xb9\x18\x26\xb1\x37\x19\x0c\x48\x5e\x85\x73\x0d\x9c\xc4\xc2\x51\x9e\x5b\x6f\x30\xf0\x04\xfe\x24\xec\x3e\x57\xb5\x6c\xb4\x39\xa6\xd0\x43\x44\x95\xff\xda\x50\x72\x04\x15\x0a\x62\xd2\x91\x16\xd1\xa2\xf8\x1f\xf7\x41\x40\xf0\x27\xe1\x03\xfd\xbb\x18\xc5\x28\x79\xb1\x56\x6a\x52\x8c\x38\xf6\x19\x80\xcc\x2c\xcd\x1f\x9e\xfd\x1f\x00\x56\xb5\x2e\x25\xe1\x61\xa5\xea\xa8\x16\xf5\xca\xe5\x45\x60\xad\x69\x69\x1a\xec\xa4\x7f\x97\x64\x9e\xba\x5f\x69\xe7\x30\xdb\xce\x31\xba\x26\xb2\x76\xc1\xda\x20\xda\xbe\xa2\xa1\x54\xd0\xc1\x50\x27\xf2\xef\xea\xed\x96\x09\x6a\x33\xb7\x6c\x54\x90\xbf\xc2\xb2\xfc\xb5\x5c\x9e\xf8\x6b\x25\x30\x2b\x54\x69\x5a\x1f\x4f\x20\x0b\x4f\xfe\x3f\xf6\xfe\x75\xb9\x6d\x5b\xed\x1f\x40\xbf\xe7\x2a\x18\xfe\x67\x5c\x71\x5e\x48\x3e\xc4\x69\x53\xad\x57\x2b\x4d\x93\xb4\xcd\xdb\x9c\x9a\x43\xbb\xba\x5c\x4f\x06\x26\x21\x89\x35\x45\xa8\x20\x64\x47\xb5\xb5\xaf\x65\x5f\xcb\xbe\xb2\x3d\x38\x91\x20\x09\x92\xa0\x44\x5b\x76\xea\xcc\xac\x55\x59\x22\x40\xe0\xc1\xe1\x39\xff\x9e\x3d\x00\x47\xf7\xf7\x01\x56\x7c\x90\x92\x65\xea\xdd\x4a\x40\x38\x42\x06\x2e\xff\xaf\xfb\x3d\x32\xea\x25\xa3\x50\x6e\x24\x6f\x10\xe0\x18\x79\x5c\x05\x9c\x2f\x92\x69\x2f\x51\x5b\xeb\x3e\xbd\xbc\x8c\xe5\xb5\x71\x7f\x34\xa2\xde\xbf\xd8\x2b\xbd\x7f\xad\x7c\x48\xfd\x69\x2f\xf2\x2e\x20\x1b\x02\x1e\x45\xab\x71\x18\xc3\x28\x5a\x5e\xb0\x01\x90\xcb\x4b\x21\x2a\x84\x03\x31\xe4\xcb\x4b\xf5\x89\x89\x15\xf2\xc9\x70\xdc\x83\x9e\x10\x81\xf0\x2a\xf3\xba\x72\x4a\x5d\x5e\xfa\xf2\xbf\x0b\x5d\x10\x09\xdb\x0b\xc2\x41\x26\xa6\xf2\xff\xf7\x6f\xab\x10\x16\x69\x73\x9f\x95\x26\x94\x23\xd3\xe2\x36\xd4\x75\x49\x47\xeb\x5b\x17\x75\x09\xbe\xe0\xa2\x2e\x41\x45\x51\x97\xe0\xda\x8a\xba\x8c\xaf\x44\x43\x4c\xbb\x9f\x35\x96\x29\x4a\x1f\x9d\x7f\xd1\xd1\x24\xd3\x2b\x89\x40\x98\xdb\x44\x20\x9c\x5c\x6f\x04\xc2\x7c\x3b\x99\x48\x27\xb7\x26\x5c\x87\xcb\xef\x14\x12\xfa\x9b\xae\x77\x28\x5e\x5e\xf1\xab\x21\x8a\x4c\x27\x29\x3b\xc1\xfd\x7d\x37\x57\x09\x84\x02\x17\x31\x0e\x90\x0c\x74\xdf\x97\x80\xd6\x73\xb3\x13\x38\xc8\xa9\x3f\x3d\xaa\xea\xc1\xd1\x95\x00\xa7\x3b\x1b\xe5\x83\xbd\x51\xec\xe3\x00\x7d\x7c\xf7\xe2\x29\x9e\xcd\x71\x8c\x62\xea\x81\x25\x7b\x86\xd4\x3d\x03\xce\x3c\x30\x61\x4f\xc1\xec\x29\x0f\x7c\x1a\x99\x03\x74\x78\x3a\x27\xa3\x44\xb0\xf0\x0b\xc1\x45\xd9\x12\x0b\xc8\x6a\x9a\x05\xc5\xfe\x11\xbb\x5e\x5d\x24\x24\x09\x67\x3d\x5e\x97\x5f\x84\xc7\xb2\xc7\x33\x08\x2b\xf7\x8f\x98\x7d\xf1\x38\x1e\xa2\x95\xc7\xb8\x07\x28\xe3\x95\x00\xa8\x5d\xb0\xe4\xdf\xfb\x8f\x49\x7f\x7f\xb8\xe7\x01\x3c\xda\xff\x17\xfe\x5f\xf2\x2f\xfc\x3f\xff\xe3\xc1\x23\xdc\xdf\x3f\xd6\x8e\x2e\x3e\xd6\xd1\xce\x62\x7e\x7d\x43\x3e\x64\x1f\xf5\x62\xaf\x72\x92\x45\xc4\xc6\x22\x16\xa0\x4a\x8b\xdd\x13\x7c\xad\x87\xb8\x67\x00\x29\x70\x39\x2a\x80\x15\x15\x5f\x4d\x2f\xf5\x14\xb4\x70\xda\x9b\xf6\x2e\x56\x00\x71\xe4\x8d\x02\xa0\x21\x5d\x71\x97\x9b\x07\x8e\x68\x5a\xbe\x09\x7a\x2b\xf0\x66\x74\x44\xf3\x99\xf6\xc0\xfd\x4f\xff\x9d\x54\x83\x5e\x3c\x73\xf9\x9f\x22\x85\x1d\x3c\x5f\xd3\x32\xa3\x69\x1f\xf5\x15\x86\x74\x83\xaa\x07\x78\x8d\x25\xa6\x65\xd4\x37\x4a\x1f\x4b\x76\x3f\x4f\x09\x4f\xca\x10\x55\x88\x9a\x8b\x14\x5d\x8d\x91\x66\x4d\x83\x4b\xbd\x8d\x65\x41\x4c\x95\x35\x97\x95\xf6\x6c\x70\x82\x83\xa5\xa1\xc5\xa7\xea\x16\x52\xf9\x95\xb5\xb3\x4d\xe7\x38\x2e\x1f\x20\x5d\x42\x89\xff\xbd\xff\x38\x16\x07\x08\x8e\xf6\xff\x05\xff\x37\xfe\x17\xe4\xd2\x0a\xcc\x1f\x20\x78\xac\x3c\x9c\x6c\xde\x6c\xa0\x15\xd4\x4e\x46\x51\x8f\x83\x5f\x24\x47\x7b\xc7\xc0\x1f\x25\x69\xb9\x31\x10\x88\xc6\x0b\x12\xe5\x4a\x97\xa1\x74\x77\x87\x3d\xdf\xf3\x52\x6c\x7b\xc7\xf5\xc0\x78\x14\xf5\x02\x0f\xcc\x46\x63\xd6\xdb\x7c\x34\xce\x7a\x5b\x8e\xe6\xf2\x0e\x71\x32\x3c\x7c\x76\x7b\x80\x4f\xa3\xa8\xb7\xf4\xc0\xf3\xd1\x27\xd6\xe8\xf3\xe8\x53\xd6\xe8\xcf\xd1\x05\x5b\x95\xe7\xf2\x1e\x02\x42\x28\x1e\xce\xd4\xdf\x52\x3b\x1d\x4e\x7b\x27\xec\x5c\xd2\x01\x3b\x61\xcf\x5f\x7f\xf8\xf4\xe1\xf7\xb7\xcf\x81\x5e\x8f\x8a\x83\xc5\xfd\xcb\xf1\xa7\x90\x24\x88\x8e\x16\x74\xdc\x7f\xe4\x7a\x60\xd2\xfb\xec\x79\x62\x21\x99\xf8\x20\x2c\x98\x8b\x15\x13\x9e\xfe\x94\x05\x94\x64\x20\xe6\xe8\x8d\xf1\xd6\x29\x94\x95\xba\x3f\x1a\xfd\xa9\xac\x15\x32\xa0\xbb\x8c\xaa\xa4\x3f\x01\xa4\x57\x56\xff\x8e\x07\x7d\x83\x8b\x95\x66\xb1\x58\x78\x8c\x5b\xfd\xf8\xfc\x83\xcb\xdf\x20\xe8\xe0\xf1\xdb\x51\x6b\x99\x9b\xfe\x71\x76\x4d\x73\x48\x40\xef\xf1\x9f\x7c\x23\x8c\xfe\xef\xfd\x9b\xd7\x03\x71\xc5\x85\xe3\x65\xef\x4f\x6e\x07\xf2\x86\x65\x75\x42\xfc\xb2\xb3\x23\xfe\x9b\x1a\xc5\x2e\x2f\x75\x49\x53\x36\x4f\x7f\x65\xb2\xb6\x7c\x91\xfc\xe9\x1e\x8a\x12\xc4\x65\xb4\xb7\xa3\x33\xf5\xfc\xbd\xb7\x9a\x91\xad\x27\x27\xc2\xb6\x5a\x3a\xe8\xc7\x7c\xc4\x0b\x12\x69\x40\xa1\xfc\x6f\xe0\xee\x64\x78\xa0\x6f\xbd\x61\xc5\x43\x8f\xf5\x87\x52\xe9\xa7\x92\x5a\xa3\xc6\xdd\x02\xfe\x4c\x0f\x70\x9b\x74\x87\xec\x6c\x77\xc7\x1c\x55\xf6\x5d\xee\x3e\x51\xa7\xd4\x10\x4e\xc0\xee\x66\x71\x25\xeb\xf5\x6a\x52\x67\x77\xb9\x56\x9a\x18\xae\x64\x77\x21\xcf\xa6\xbe\x28\x1c\xb6\x0c\xc5\xe5\xc3\x9b\x9f\x9f\xbf\xd6\xd3\x19\x94\x7b\xfc\xb1\xeb\x0e\xb3\xbf\x3c\x10\x2a\xe2\x7b\x2b\x8f\x67\x40\xa5\x8c\x45\xcd\xa4\x47\x32\xfb\xb0\xd1\x2c\xac\x45\x8e\x95\x0c\xc3\x10\x5c\xe0\x39\x8a\xf3\xb6\xb9\x81\xb4\xa5\xf6\x90\x34\x69\x7b\x2b\x30\x43\x49\x02\x0b\x16\x6f\x71\xf9\xca\x19\xcb\x0d\x8e\x62\x4a\x78\x9d\x36\x71\x00\xd4\xe0\x2b\x2e\x02\xd1\x43\xd2\xa3\xe0\x80\x27\x1a\xb1\xdb\x0c\x8e\xe2\xa3\xfd\x54\x87\x7c\x93\x59\x45\x39\x48\x2a\xe2\x45\xd1\xd2\xe3\xce\x08\x94\xbb\x73\x58\x37\xc6\x54\x88\x18\xc8\x21\x11\x89\x96\xe4\xad\xee\x09\x56\x4c\x16\xb1\x30\x56\x95\x53\x37\x1c\x24\x31\x47\x01\x17\x71\x73\x64\x6a\x6e\x1c\xf7\xd0\x80\xb7\x13\x5d\x70\xb3\x71\x81\xd2\xca\x9a\x9a\x52\x1a\x90\x1e\x37\x81\xc2\xc1\x18\x31\xb9\x4c\x21\x9e\x7a\xb5\x0e\x04\x3d\x36\x44\xb7\xaa\xe6\x65\x6e\xe4\xad\x00\xb7\xd8\x96\xec\xf8\x92\xda\x3d\x54\x32\x0c\x7b\xc2\x89\x21\x0f\x0a\xca\x7b\x58\x8a\x26\x77\x8b\xde\x64\x1b\x63\x7f\x25\x43\xb1\x45\x7f\xb2\x8d\xa9\xbf\x9c\x21\xf9\x79\x55\x85\x83\xbc\x21\xb9\x20\xb6\x35\x9b\x94\xed\x6c\xbe\xbc\x2f\xf3\x4f\xf2\x14\x57\xfd\xcc\xf7\x4f\x55\x4c\x57\xaa\x95\xe2\x2f\xda\xa8\x91\x5c\x89\x51\x03\xdb\x18\x35\xc2\xeb\x35\x6a\xe0\xed\x18\x35\x6e\x29\xf6\x67\xbe\xd8\x70\x1e\x52\xdf\x63\x02\xba\x59\x31\xfc\x3c\x35\xe6\xc2\x46\xd2\x59\x55\x21\xad\x48\xcf\x2c\xc0\x5c\xfc\x48\x8d\x10\x3d\x24\x25\x4b\x80\xb8\x0c\xd5\x0b\x7b\xdc\xae\x90\x77\xdb\x31\x7d\x59\xe7\x52\x25\xaf\x1e\x08\x7b\x14\xb8\x4c\x04\x64\xcf\x32\x3e\x75\x79\x79\x21\x95\xe3\x68\x94\xf4\x12\xa9\x43\x33\xa1\x42\x54\x87\x7e\x8f\xe2\x7c\xd2\x1f\x1e\x30\x4e\xce\x27\xe1\xe3\xf8\x0c\x11\xca\x24\x8f\x0b\xee\x1f\x74\xb8\x38\x9b\xe7\x3d\x64\xa9\x66\xce\xa5\xdb\x39\x93\xdb\x58\x6b\xe1\x7e\xa1\x3a\x34\xdb\x0a\x24\x0b\x1e\x96\x37\x2c\xa7\x24\x60\x15\xe6\xd8\x4b\xa5\x1d\x04\x14\x8f\x1d\x52\x20\x6b\x2c\xc4\xf2\xc3\x07\xf4\x99\xf2\xf0\xe7\x12\x47\x95\xd7\x9a\xbc\x90\xc2\x7b\xe1\x28\x49\xfd\x04\x78\xec\x70\x2f\xc3\xe3\x64\xc8\xa8\x9f\x1a\x77\xf8\xa6\x06\x58\x70\xd9\x5e\xc8\xa7\x3e\x9b\x33\xed\x40\x67\x22\x58\x78\x6c\x05\x63\x55\x39\xfd\x82\xbf\x8e\x0c\x5c\x7b\xf0\x79\x4a\x7a\x91\x07\xf0\x0a\x60\x5b\x58\xba\x94\x89\xcc\x4f\x30\x24\xc1\x6e\x84\x7d\x18\xf5\x13\x8a\x09\x9c\x14\xf3\x1d\xd4\x43\xe5\x40\x34\x3d\x28\x26\x83\x30\x1c\xb9\xea\xfb\xa2\x57\x6f\x67\xc7\x4d\xf8\x87\xe2\x0f\xa9\x11\xfd\xb1\x49\x4a\x90\x9e\x8f\x95\x31\x67\x74\x67\xa7\xe6\x75\x39\x1f\xc6\x68\x34\x4a\xbf\xbf\xaf\x3e\x67\x3e\x93\xc7\x6a\x6c\xc3\xf4\x85\x5e\xce\x68\x2f\xf3\x3a\x35\xcf\xc2\xbf\xe2\xff\xa5\xa5\xca\xac\x64\x44\xb9\x4f\x41\xe3\x1c\x23\xfd\x8f\xcb\xcb\xfb\xfb\x80\x0c\xf4\xbb\x67\x74\x7f\x0f\xb8\xfc\xfe\x70\xc3\xd8\xe1\x51\x5b\x03\x75\x17\x8d\xee\xef\x55\x87\x66\x12\xc6\x35\x19\x13\x2a\xe4\x67\xa6\x8b\x01\x15\x9f\x14\x55\x89\xc5\x4c\xdf\x8c\x8b\xbe\xd8\xd4\x18\xf8\xe9\x13\xa7\xc7\xa7\x4f\x23\x0a\xf8\xfc\x01\xf5\x72\xb0\x56\x4a\x17\xd2\xf6\x61\x85\x23\xf7\x1d\x1a\x47\xc8\xa7\x97\x97\xf7\xe5\xa7\x6c\x2d\xa4\x91\xf5\xfe\x3e\x63\xf6\xa5\x5f\x07\xc9\x14\xce\x72\x8f\x18\x56\x98\xe7\x57\xa8\x87\x84\xab\x57\x4e\xe2\x19\xa4\xa8\xd2\x13\x56\x7a\x59\x8f\x3d\x0e\x8e\xf4\xad\xed\x5d\x70\x4e\x7f\x7f\x4f\x5e\x2d\x59\x40\xc4\xfe\x6a\x95\x05\xb7\x14\xa4\xbe\x18\x90\x51\x28\xe5\x17\xaa\x02\x5b\x42\x51\x3e\x5e\xdf\x85\xf7\xe2\x51\x79\x10\x24\x93\x03\x01\xf4\x56\x4c\x9b\x76\xe2\x51\x43\x00\x79\x22\x7e\x88\xf5\xd5\xcf\xb9\xdd\xef\xd3\xcb\x4b\x57\x38\x23\xdd\xfb\xa3\x11\xe3\xc7\xfa\x69\xc9\x6c\x9f\x8f\x0b\xfe\xe3\x4c\xcf\xf3\x32\xd7\xe9\x3b\x34\x46\x04\xc5\xbe\xf2\x9f\xb2\x97\x3b\x53\x98\xc4\x5f\x51\xe7\x04\xa1\xd8\x09\xe3\x90\x86\x30\x0a\x13\x14\x38\x7d\x47\x44\x7c\x7b\xb9\x27\xd8\x12\xa0\x20\xab\x1b\x8e\x56\x3d\xe4\x0d\xa9\xd1\xa7\xdd\x0b\xcd\x5b\xf7\x71\x26\x37\x68\xdf\x1a\xaf\x86\x6c\x37\xa7\xf6\x8c\x7c\x2b\x1e\xa4\xc3\xfe\xaf\x2b\x0e\xaf\x8f\xa2\x57\x0e\x77\x30\x90\x3e\x8d\x6b\xa7\x9e\xd1\x4b\xfd\x9e\x91\xd1\x41\x9f\xe7\x44\x24\xbf\x08\xa7\x32\x0a\xe9\x14\x11\xe7\x04\xf1\x2c\x02\x07\x13\x07\xa6\xfb\xd1\x65\x1c\x20\xdd\xff\x8a\x88\xb2\xd2\x2d\xdd\xd9\xd1\xdc\xc4\xe0\x42\xdb\x98\x43\x39\x3f\xa4\x8b\x41\x45\x11\x89\x1b\xc0\x77\x76\xc4\x25\xb3\xf2\x7a\x11\x40\x5e\x0a\xf8\x98\x80\x70\x84\x7b\x91\x77\x4f\xf7\xd3\xa7\x72\x7e\xe9\xdc\xa4\x11\xb2\x3d\xa4\x33\x4e\xea\x99\x29\xf1\x14\xc6\x31\xa6\x7c\x0f\x39\xd0\xf1\x23\x98\x24\x0e\x4c\x72\x13\x5f\x89\x13\x11\x79\xa0\x17\x8f\x42\x71\xe2\xf9\x37\xc8\xf3\x06\x9f\xfc\x93\x11\x05\x71\x1a\xa2\x3f\x8a\xd8\x53\x47\x17\xa7\x68\x39\x74\x71\xfc\x34\x0a\xfd\x53\x17\x08\x1a\x94\x42\x7f\x3e\xf9\x27\x22\x9c\x88\x49\x27\x3d\xc4\xc3\x7f\x26\x90\xa2\x0f\x5c\x0b\xbe\xbc\x44\x03\x7f\x41\x08\x8a\xa9\xf8\x42\x45\x7e\xa1\x59\x48\x7b\xae\x14\x46\x5c\x70\xb1\xf2\x56\xab\x63\x6f\x67\x87\xf4\xf4\x55\x88\x3d\x90\xf0\xef\x40\xe2\x81\x68\xd5\xcb\xc4\xc2\x4a\x99\x50\x72\xea\xe1\x79\x18\x07\xf8\x7c\xc0\xd9\xf7\x7b\xf1\x1d\xe0\x13\xca\xb8\x36\x28\x05\x74\x1b\x0d\x5a\x8c\xda\x1c\xca\x3c\xaf\xf0\xcb\x17\xb1\x43\xf8\x82\xa2\x59\x8f\xeb\x69\x00\x79\x25\x48\x06\x7b\x59\x03\x27\xd6\x02\xc6\x35\x47\xba\x67\x77\x07\xa3\x06\xcd\x64\xe6\xb6\x91\xed\x38\x40\xfd\x59\xc8\x55\xe1\xdc\x54\xc3\xb3\x65\x9f\xfd\x28\x7e\x33\x37\xb8\x8d\x89\x1c\xda\xf8\x77\x23\x51\xc3\xa1\xd6\x14\x81\x82\x90\xca\x47\xaf\x6e\xd1\x8f\x2e\x62\x38\x43\x43\x97\xa9\x0b\x2e\x98\x85\xec\x73\xd1\x00\xec\xf2\x12\xe8\x43\xf7\x4f\x78\x06\x85\xe6\xc9\xce\x0b\x1d\x1e\x09\x83\x3a\x70\x67\x70\xee\x1e\x03\x18\x85\x30\x91\x5f\x3e\x74\x8f\x57\x40\x76\xfd\xd3\xd3\x97\xaa\x67\x1e\xd6\xf8\xb9\x4f\x16\x27\x4b\xd5\xa9\xf8\x2c\xba\x23\x27\x7a\x37\xe2\x17\x77\x06\x7d\xf9\x89\xc0\x53\xc4\xfe\x73\xc2\xff\xef\xb3\xf6\x8a\xdf\x9f\xbc\x2a\xbe\x63\x09\x67\x91\x7a\x87\xf8\x2c\xde\x21\x3e\xbb\xcb\x59\xa4\xbd\x8b\xff\xb5\x3a\x06\xeb\x06\x84\xcf\x78\x02\xa8\x41\xed\x58\x01\xb6\x7c\x6b\xa5\x89\xb0\x0d\xf7\x9c\x6f\x81\x4a\xab\x60\x80\x67\x03\x14\x21\x1e\x4f\xcc\xe7\x0d\x09\x82\xce\xff\x38\x41\x78\xe6\x02\xe4\x0d\x9e\xe2\x00\xbd\xe2\x1b\xae\x5d\x00\xa6\x08\x52\x0f\xe3\xd3\x5d\x7e\xff\xfa\x38\x2a\xa3\x7c\xd6\xa4\x9e\x68\xc2\xb2\x65\xcc\x1d\xaa\xc8\x0b\xb9\x8b\x7d\xb4\x8b\x7d\xbc\x4b\xa8\xb1\x4e\xa8\xc9\xd3\xeb\x16\x84\x3d\x7e\x41\x79\x35\x6d\xc2\x25\x24\x38\x6b\x73\x4a\x4c\x86\xe3\xea\x81\xd3\xaa\xbc\x1c\xed\xf9\xd3\x33\x1e\xb8\xc1\x15\x85\xe6\xa7\x55\x3a\xbd\x07\xe6\x04\xcd\x21\x29\x43\x1a\x49\xda\xa5\x65\x13\x34\x03\x71\xcc\xb3\x82\xe7\x88\x24\x61\xce\xfa\xa8\x5b\x65\xa7\x61\x72\xc4\x84\xe5\xac\x32\x3e\x38\xf4\x8e\x1e\x1c\x1f\x0f\x64\xbb\x5e\xcc\x2d\x98\x33\x7c\x86\x5a\x77\x21\xc3\x3e\x8a\xb9\xb5\xeb\xdc\xff\x95\xc6\xaf\xee\x0a\x45\x6a\x3b\x88\x6e\xbc\x83\x4c\xcb\xa5\x9c\x09\x6b\xd7\x92\xd2\xd3\xd2\x47\xfc\x00\x72\xb4\x4b\xfa\x58\xed\x24\xcb\xf5\xa7\xa9\x39\x04\x40\x80\x47\x48\x83\x66\xcc\xc1\x32\x0a\x36\x9f\xfa\xac\xd5\x8e\xe8\xc1\x11\x05\x3d\x32\xc2\x5e\x18\xf7\xe2\xd1\xc5\xca\xab\x30\xeb\xb3\x17\xac\x55\xa7\x20\xe6\x1e\x59\x10\x7b\xa6\xbd\x97\xc1\xce\xda\x0d\x5b\xa6\x81\x14\x61\x18\xa8\xf5\x2e\x34\x40\xcc\xdc\x89\x1f\x77\xe2\xc7\x9d\xf8\x71\x27\x7e\xd8\xa2\x12\xf7\xf7\x79\x44\x4e\x1a\x55\x35\xdc\xdd\x15\x40\xa9\x23\x79\xf5\xb0\x2f\x54\x9c\x14\xf2\x58\xcf\xea\x72\x63\x4f\xae\x00\xac\xe0\x48\xb2\x75\x5d\xb6\xaf\x41\x91\x6a\x0c\x1d\x6d\x66\xc1\x46\x16\x17\x03\x28\x31\xac\x47\xb4\x47\x7a\xc8\x03\x07\x1e\x48\x46\xf8\x68\xef\x18\x84\x23\xac\xc5\xe0\x70\xa9\x21\x39\x1e\xc8\x4e\x7a\x21\x6f\x5b\x25\xad\xc8\x14\xd4\xb4\x4b\x3c\x82\xac\xcb\x64\x04\x8b\x5d\xe2\x4c\x70\xe1\x66\x77\xb3\xe8\xd2\xaa\x3f\x29\xc5\x24\x25\x8c\x90\x6a\x74\x32\x9d\x83\x88\x64\x6b\x6b\x4d\x96\xf3\xb6\x7b\xf9\x3d\x7f\x7d\x6e\x74\xdd\x91\xb6\x31\x1b\xbb\x69\xf8\x0d\x70\xfd\x74\xac\x35\x12\xb1\xf4\xfb\x5e\xcf\xc5\xb2\xbc\xef\xd7\xca\xca\xca\xcf\x74\x6d\xfc\x86\x1b\x71\xdb\xc3\xdb\x71\xdb\x63\xf3\xc5\xdc\x8b\x7b\x74\x74\xc1\x6e\x00\x1f\xc5\x3c\x6a\xa2\x51\xd7\x0b\x7c\xd7\x03\x31\x37\xe5\x35\x3e\xcb\x71\xf5\xc5\xd3\xd6\x0f\x4f\x20\x45\xe7\x70\x69\xd1\xbb\x86\x0c\x21\xef\xb2\x35\xda\xb4\x68\xb2\x02\xae\xfc\xdc\x57\x3b\xcc\x05\xf6\xcd\x3d\x10\xf7\x28\x70\xe7\x04\x7f\x0e\x51\x62\xd1\x52\x20\x0c\xea\xed\x96\x6d\x5e\x9c\x6f\x5e\x2a\x82\xd6\xbc\xd0\x85\x16\xaa\xa7\xac\x62\xa0\xcd\x24\xb4\xfa\x82\xaa\x03\x69\x2d\xb0\x69\x9d\x1a\x16\x64\xd3\x58\xe1\x09\xda\x34\x96\xa8\xf8\xaa\x6d\x6a\x02\xb1\x69\xab\xd9\x4b\x8a\xcd\xd7\x6a\x7d\x7a\x66\xd1\xec\xf4\x2c\x7d\x5e\x42\xe2\x35\x43\x9d\x88\xa0\x6c\xb5\x47\x24\x84\x99\xcd\xee\x10\xb8\xbd\xb9\x96\xcb\xf6\xed\x08\x8e\xac\x5e\xc7\xa1\x5f\x55\x23\x1c\x06\xbe\x45\x9b\x3c\x4e\x7a\x4a\x99\xe5\xbc\x72\xf7\x57\x8b\x32\xbb\x27\x11\xf6\x4f\x19\xc3\x4d\x77\xa1\x40\x86\x29\xba\x8c\x84\xc5\x81\x17\x43\x1d\x91\x9c\xb9\x88\x27\xbe\x89\xb2\x30\xb9\xdc\x3c\x0f\x84\xa3\xe4\x68\xff\x18\x44\xa3\xe4\xe8\xe0\x98\x67\xc7\x3c\xd0\xb3\x63\x0e\x55\x76\xcc\xd1\xe2\x58\x15\x60\x54\x6e\xf4\xe7\x67\x28\xce\x85\xc0\x6c\x04\x2e\x72\xb1\x02\x74\x74\xc1\x28\x34\x74\x65\xd8\xba\x2b\xb2\x54\xd0\x0a\xc4\xf9\xcc\x45\x1e\x11\x3e\x43\x14\xba\x1e\xaf\x87\x9b\xcb\x4c\x61\x9c\x5d\x14\x4d\xdd\xd9\x09\x06\x04\x31\x91\x3f\x8c\x50\x2f\xf6\x78\x25\x6d\x59\x3d\x52\xe3\x1b\xee\x90\x7f\xa3\x9d\xcf\x61\x6c\x8a\x46\x0f\x78\x4a\xc1\x13\x2e\xba\xac\xee\x9d\x10\x04\x4f\x65\x16\x9d\xbc\xc2\x55\x47\x8c\xc1\xc8\xcf\x62\x8f\x89\xcf\xe9\x0e\x6f\xe8\xfe\xfb\xe5\xb3\x74\x70\xbd\x08\x84\xa0\xf0\x3a\xed\x32\x18\x32\x92\x8f\x47\xa4\xe7\x7b\x6a\x75\xa0\x48\x49\xc2\x7a\x4a\x12\x94\x93\x1e\x63\xd2\x57\x77\x7a\xdd\x20\xbe\x5f\x4a\x5e\xdb\xc3\x20\x3f\x00\x95\x0a\xd8\x7e\x06\x2b\x6d\x06\xfa\x35\xcc\xa7\x30\x2b\x4c\x61\x26\xa6\x30\x33\x4f\x81\x73\xdb\xc6\x21\xbc\xc6\x81\x18\x7f\xe1\xe5\x8a\x89\xf1\x17\xcf\x0b\x2f\x9e\x8b\x17\xcf\xd7\xa7\x1d\x7f\x37\xcf\x3a\x49\x69\xa7\xbf\x5d\x89\x08\xe2\xf5\xd3\xc2\xeb\xa7\xe2\xf5\xd3\xf5\x5f\xff\xa3\xe8\xbf\x6e\x08\x29\x0f\xe3\x43\x38\x29\x0c\xe1\x44\x0c\xe1\x64\x4d\xd2\x6b\x74\x2f\xbd\x58\x5c\xf8\x7a\x6b\xad\x71\x82\xa2\x71\xcf\xe7\x77\x91\xf1\x74\xc9\x43\x54\xe4\xec\xd9\x91\x6b\xda\xd1\x8c\x1e\x3e\x9b\x9c\xe1\x48\x95\x64\xa3\x61\xba\x55\x34\xb9\xa5\xee\x05\x2f\xe4\x43\xfa\x8b\xf8\x6c\x7c\x76\xaf\x1a\x5e\x29\x99\x91\x78\xd1\xe9\x99\xfc\x90\x71\xdf\x61\x3c\xea\xe1\x11\xeb\xc7\x33\x85\x83\xe6\xa6\x95\x52\xdb\xe0\x87\x2e\xc2\x42\x05\x2a\x08\xea\x22\x3b\xa3\xc3\x48\x03\x46\x0e\x57\x5e\x7e\xa4\x9c\xe5\x0d\x45\xb6\x77\x7e\xaf\x9c\x89\xbd\x72\x56\xde\x2b\x8a\xf5\x6d\x7c\xd9\xa5\x3c\xb4\x62\xdb\xe8\x54\x90\x8b\x9b\xef\x00\xaa\x52\x15\x95\x23\x49\x9f\x10\x3d\x60\xb6\x6a\x58\x5b\xb5\xd4\x1c\x2a\x42\x9f\x98\x26\x2b\x18\xb0\x30\xff\x7b\x3c\xde\xbb\x05\xb0\xa9\x0d\xa7\xaf\x8d\x1b\x09\xf0\x2c\x0f\x11\x07\x4c\xaf\x49\x5d\x25\xc6\x5f\x73\x10\x4c\xa5\x37\xcc\xe0\xf2\x04\xf5\x99\x9a\x7e\xd5\xc0\xc4\x15\x36\x37\x3e\xba\xfa\x5c\x6d\x3b\x33\x9b\xe6\x30\x12\xc4\xd2\xed\x54\x69\xa1\xfd\x62\x08\x18\x1d\x7c\x2f\x57\x82\x0b\x39\xef\xc5\x72\x6b\x29\x1d\xaa\x69\x38\x92\x61\xea\x83\x93\x30\x0e\x7a\x69\xb9\xfb\x3c\x96\x81\x21\xcb\x8c\x0e\x44\xd9\x79\x49\x8d\x95\x07\x78\x5e\x44\x38\x7e\x8d\xa9\x7a\xb7\xd7\xcb\x7c\x2c\x9e\xd7\x2b\xa5\x2f\x6a\xf9\x6e\x54\xfd\x98\x7b\x6f\xd8\xd8\xa9\x29\x25\xb2\x28\x4d\x69\xf5\xa8\x98\xb4\x05\x5c\x26\x79\xc9\xe1\xbb\xde\xce\x4e\xd8\x13\xc5\x9b\x06\xc2\x0f\xc1\xc1\x1e\x4c\x30\x15\xec\xcd\x62\xed\x54\xf1\x0f\xdc\x12\x12\xb8\xe6\xe4\xcc\xc5\x35\xd7\xf2\xe0\x5c\x73\xa8\x5d\x79\x07\xa6\x66\x47\x9e\x07\x83\x63\x1f\x79\x02\x34\xb9\x55\xa4\x9d\x99\x2e\x75\xd9\x0c\x37\x8c\x30\x4c\x73\x5a\xe7\x00\xe7\xb0\xb6\x01\xac\x71\x58\x8a\x53\x2d\x83\x43\xcd\x87\x5a\xab\x4c\xc4\xc6\xa3\xb3\x16\xc8\x76\x2b\x8f\x91\x45\x60\x41\xc2\x61\x3c\x58\x90\x70\xb5\xc1\x2a\x35\xd4\xd4\xa8\xbc\xe7\x67\x31\x9a\xe1\x38\x4c\xe8\xee\x6c\x11\xd1\xb0\x2f\x02\xf3\x6a\xab\x70\xb5\x35\x32\x27\xd7\x88\x13\x8c\x6f\x2b\xf4\x1a\xbc\xf3\x42\x5f\xbf\x17\x1a\xdf\x72\xef\x2a\xb6\x86\xb5\x4b\xbe\x60\x58\xbb\xa4\x02\xd6\x2e\xb9\x1d\xde\x88\x90\x67\x2a\x83\x48\xfc\x67\x21\xfe\xe3\xaf\x8d\x33\x5d\x57\x18\x5a\xfe\x2a\x50\x8f\x9a\x7c\xd0\x46\x27\xa8\xa5\x17\xba\x5e\x72\x58\x07\xdb\x28\xe4\xab\xf2\x0a\xce\x19\xa1\xe4\xa7\x05\xff\x94\xe6\xfe\xf6\xde\x23\x6a\x0b\x82\x44\x50\x82\xe8\x53\xe8\x4f\x73\x19\xa2\xe9\x4b\xda\xa3\x24\x45\x55\x05\x8f\x54\xce\x29\x37\x8d\xe6\x56\x7a\xe0\x47\x08\x92\x9e\x27\xd7\x7c\x55\x16\x47\x74\xcc\x61\x40\x46\xa8\x27\xf1\x8a\x45\x35\xee\x05\x09\x3f\xc0\x49\xcf\x6b\xc4\xfd\x48\x1d\xfc\x17\x2b\x90\x8c\x62\x91\x20\x4c\x00\x06\xf7\xf7\xbc\x7b\x49\x96\x32\xc9\x1e\x1f\x10\x34\x1e\x61\xb5\x31\x8b\x38\x21\x09\xb8\x28\x21\x80\xc4\xde\x05\x17\xd8\x45\xe6\x35\xb7\x70\x78\xbd\x58\x02\x59\x80\x58\x80\xd6\x18\xa1\x33\x58\xb3\x58\x12\x28\x01\xd8\x03\x30\x43\xca\x58\x29\x78\xe3\xfb\xa3\x51\xc2\x74\x85\xa7\x22\x11\x88\x4b\x5a\x3d\x6f\x67\x27\x19\x04\x61\x32\x67\x2c\x42\x7c\x65\x78\x48\xc0\x65\x2c\xe2\x73\x02\xe7\xc6\xa8\x3e\x34\xf8\x24\x68\xae\x28\xb8\x60\x9a\x8c\xc8\x26\x5e\xa4\xa1\x90\x6c\x8c\x45\x12\x79\x20\xad\x09\x53\xfa\x0d\xc4\x2b\x50\x40\x53\xd1\xc2\xf7\xec\x43\x09\x77\x76\xf4\xbf\x74\x3f\xf9\xfd\xd2\xfd\x2e\xf0\xa6\xf8\x4c\xf9\xdb\xfe\xd5\x36\x7a\x45\x6a\xcf\xf9\x18\x16\x90\x8c\x60\x0f\x83\x03\x0f\xf8\x02\xe5\x2a\x10\xc6\xfd\xb1\xb0\xe0\xfb\x7c\x50\xd1\x60\x0a\x99\x88\xe7\xc5\xa3\x48\x28\x75\xec\x34\xa4\x40\xce\x20\xe2\x34\x65\xa2\x75\x06\x67\x34\x1b\x5d\xac\xee\x85\xb2\xe1\xce\x4e\x6f\x36\x0a\x65\x53\x0f\xcc\xd8\xc6\x1e\x21\x10\x8f\xc6\xca\x2c\x12\x80\x99\x18\xe0\x7c\x64\x02\x69\x8f\xc1\x45\x01\x54\x45\x2b\x61\x2d\xf7\x21\x19\xc5\xe5\x0d\x02\xe0\xa8\xb8\x7e\x42\x0b\xbd\xa7\x03\x5e\x67\x8b\xb3\xb3\x13\xca\xc9\x5c\xf8\x5a\x47\x43\x02\x44\xb3\x21\x5c\xb1\x8d\xc3\xa6\x15\x7b\x97\x97\x3a\x15\xe6\x22\xed\x3c\x23\x86\x14\x46\x7a\xf7\xb3\xe7\xd9\xee\x81\xc1\xf2\x3d\x85\x14\xfd\x7b\xff\xf2\x92\x78\x3b\x3b\xf2\xb4\xb2\x6e\xd3\xad\x19\x97\x41\x64\xd8\x06\x43\x3b\x3b\xbd\x74\xd7\x22\xb1\x87\x05\x85\x2f\x2f\x7b\xe9\x45\x04\x0e\xf8\xc6\xc8\xde\xb4\xb3\x93\x8d\xb3\x40\x8c\x05\x09\xbd\x14\xb2\x26\x30\xd8\x02\x49\x2f\x4a\xa1\x7e\x3c\xcf\x58\x29\x4e\x04\x7e\x32\xf1\xf6\xc0\xbb\x47\x8f\xf6\xb2\x58\x9d\xa3\xfd\xe3\xdc\x84\x99\xc6\x5f\x89\xa7\x78\xb4\x77\x5c\xca\x8d\xf3\xad\xf4\x23\x2e\x93\x14\x72\xe3\xe2\x09\x81\xf3\xe9\x80\xff\xff\x75\xab\xa6\xfc\xa5\x65\x5a\x16\x70\x2b\x5a\x6a\x82\x78\xd6\xac\xf9\xfd\x95\xc0\xfe\x18\x32\xf9\x6c\x59\xf1\x44\x12\x9e\x44\xdc\x58\x68\xfc\x95\xef\x02\x23\x44\x0d\xfb\x35\x4c\xfa\x78\x41\x93\x30\x40\x15\x0f\x4c\x10\xed\xfb\xca\x51\xd8\x30\x90\x18\x93\x19\x8c\xc2\xbf\x51\x9f\xab\xab\x55\x03\x12\xa0\x3b\xe9\x65\x50\x39\xee\xd0\x3f\xed\x73\x54\xd2\x3e\x8c\xfd\x69\x15\x90\x0e\xc0\x20\x01\x21\x88\x34\x6d\x77\xd1\x5e\xdb\xf5\x6f\x41\x55\x1c\xff\x1f\x13\x55\xe5\xdf\xee\xaa\x38\xfe\xed\x50\x61\x02\x30\x06\xb3\x51\xe1\x06\x03\x73\xf6\x4d\x94\x7d\x93\x21\xf6\x82\x69\xa5\x7a\xe3\x0f\x55\xbd\x13\x70\x1e\xc6\x32\x11\x7b\x0d\x7d\x61\xcc\x49\xf0\x1b\x82\xa7\x4c\x53\x08\x0a\xa8\xc2\xa9\x05\xfa\xcd\x79\x8c\x88\x40\x93\x68\x82\x46\x6d\x78\x1b\xc7\xc0\x94\x82\xbc\x9a\x82\x29\x8b\x53\xa8\x23\xfe\x0a\x9c\x85\xe8\x7c\x5e\x40\x61\xd3\x1f\x3a\x0f\xe3\x15\x98\x2c\x42\x63\x4d\x7f\x39\x81\x45\x18\xfc\x80\x89\x00\xfb\x61\xb7\xdc\x0f\xec\x92\x7b\xc2\xef\xb8\xe1\x1c\xc8\x0b\x7b\x98\x95\x66\x94\x17\xfc\x30\xd5\x99\x40\x98\xbc\x11\xb7\xf6\x30\x2b\xdb\x98\xde\xbe\x42\xba\x49\xb2\xe6\x48\x08\x3c\x22\x1b\x5f\x6d\x97\x8a\x6a\x85\x0a\xcb\xae\xa0\x9d\x7c\x66\xdb\xeb\x22\x97\x1a\xcd\x6f\xde\xb4\xa6\xac\x68\xc5\x4e\x3e\x7e\x9c\xb5\x21\xe5\x36\x29\x31\xb0\x48\xa8\x49\xd1\xf3\x8e\xe8\xb1\x37\x24\x47\xf8\x78\xb5\xf2\x86\x0a\x15\x64\x82\x54\xe2\xac\xfc\x26\x8f\x11\xb7\x02\x29\x1b\x19\x86\xe9\x84\x09\xc6\x75\x8b\x98\xd6\xe6\x79\x2e\x52\x6a\x57\x40\xe6\xd6\x7e\xbf\x7c\x61\x5c\xb6\xb4\xe1\x04\xa9\x36\xec\x51\xbe\x80\xb2\x69\xf2\xfd\xf2\x03\x9c\xf0\x1a\x95\xf9\xeb\x5d\x8a\x09\xea\xe0\xf1\x39\xab\xfe\x86\xd4\xd3\xba\xcc\xba\xc8\x75\x6c\x2e\x51\x39\x93\x95\x28\xe5\x53\xc6\x87\xdc\xff\x27\x8a\xc9\x24\x8b\x93\x84\x92\xde\x1e\xd8\xf7\xc4\xab\x91\x3e\x07\xf5\xf3\xbe\xe7\x0d\x17\x3d\xd1\xaf\xc7\xe4\x36\x90\xb2\x7d\xf3\x10\x02\x83\x62\xf3\x18\x0d\xf5\x37\x88\xce\xb4\x9e\x2a\x66\xb3\xe8\xe9\xad\x84\x05\xa8\x5a\xaa\x0c\x44\x39\xa1\x9a\x0a\xc7\xb2\x9c\x28\xe2\x9a\x64\x98\xbc\x88\x7f\x2d\x9d\xda\xcd\xb3\xc4\xf6\xee\x8d\xa5\x5a\x90\xa6\xb6\xb0\x8d\xff\x82\x07\x13\x09\x88\xc3\x37\x27\x4c\xd6\x2b\x8e\x11\x95\x67\x26\x61\x84\x84\x36\xa5\xd0\x24\xef\x19\x90\x7e\xe8\xce\x0e\x7b\x82\xcd\x49\xbd\x26\x9e\x48\x37\xda\x05\xdb\xf7\xaf\x20\x99\x84\xf1\xd0\xdd\x9b\x7f\x76\x01\x9d\x12\x94\x4c\x71\x14\x0c\xe3\x0c\x3c\x8b\x0c\xb0\x18\x16\x53\x70\xf4\x53\x32\x58\xc4\xfa\x2f\x3b\x3b\x63\x4d\x13\x22\x03\x1e\x72\xc1\xc1\x1b\x79\xf1\x24\x7e\x67\xe6\xe5\xdd\x69\x83\xbc\xab\x0c\x59\xcd\x45\x2e\xed\x8a\x3f\x76\x59\xeb\xd8\xcc\xd9\x16\x24\x4c\xa3\xe4\x86\x06\xc0\x7a\x36\xd8\xf5\x92\xfe\xd9\x7c\x4c\x40\x02\xcd\x2d\x17\x24\xfc\x3f\x1c\xc6\x55\x17\xdc\x9f\x38\x54\xcc\x71\xa0\x0f\x1f\xb8\xbb\x2e\x70\x5d\xaf\xb6\xe3\x0f\x70\x52\xd5\x2f\x85\x93\xb4\x53\xf6\x7e\xe1\xe9\x56\x3c\x58\xbc\xd5\x90\x3b\x58\x3a\x5c\xfb\xc6\xc3\xb5\xaf\x1f\xae\xfd\xe3\xa1\xeb\x82\xb5\x0f\xa6\xeb\x96\xd0\x75\x78\xac\x82\xbc\x8a\xe1\xe5\xa5\xc4\x1f\x56\x52\x18\xbb\x49\xa2\x1e\xbb\x72\x4a\x40\xb7\x14\x68\x2c\x2b\x83\x5c\xa6\x5e\x86\x78\x9f\x9a\x63\x7a\x8c\x79\x5d\x5e\xc6\xfc\x30\xba\xae\xb7\x5a\x01\xaa\xd3\xd3\x5c\x95\xa1\x7b\x20\xf4\x34\x1a\x80\xf0\x8a\xd8\xad\x32\x82\x51\x7c\x56\x75\x3c\xd9\x4f\xd7\x8d\x49\x13\x9f\x19\xc8\xc7\x25\x56\x14\x9f\x71\xb0\x2a\x70\x06\x4d\xb8\x19\xb9\x67\x5a\x29\xe5\x63\x84\x82\x13\xe8\x9f\xd6\xdf\x52\x4c\xc9\x62\x4a\x83\x2c\xcb\x56\x87\x05\xf8\x05\x63\xbb\x92\x36\xd8\xae\xc4\x16\xdb\x35\x56\x38\xaa\xa4\x06\xdb\x95\x7b\x5e\x01\xb9\x0e\x6c\x57\xe2\x79\x43\x6d\x4c\x9d\x63\xbb\x92\x6a\x6c\x57\x78\x1b\xb1\x5d\xb1\x11\xc3\x7b\x05\x92\x8a\x53\x1e\x63\x1a\x8e\x97\x15\x9e\xa9\x71\x04\x93\xe9\x2b\xe1\xbd\x48\x5c\x0f\x44\x78\x32\xa9\xf4\x94\x89\x1f\x5d\xcf\x80\xf2\xa5\x25\x23\x32\x2d\x30\x59\x97\xb9\x60\x10\x96\x9b\x3e\xd0\x9e\x79\x70\x2c\x7d\x9a\xf7\x52\xa4\x80\x5e\x08\xdc\x30\x79\x89\x61\xc0\xcd\x74\xf7\xf7\xbc\x0c\x03\x57\xd3\xbd\x63\x0f\x2c\x0a\x5f\x25\x1e\xf0\x85\xf1\x5c\x10\x29\xbb\xdb\x4d\x11\x5b\xf7\xf7\xef\x8f\x46\x68\x67\xa7\xe7\x0b\x27\x95\x22\x5b\xcf\x03\x3e\x37\xb9\x93\x1e\xe9\x5d\xac\xc0\x05\x0d\x67\x08\x2f\xe8\xf0\x6b\xf4\x00\x88\x55\x40\xc1\x07\xf9\xdd\x83\xbd\xbd\x95\x80\xaa\xe5\x41\xf8\x8b\x0c\xb1\xcd\x03\x90\xbf\x6a\x18\xf5\x3c\x10\x52\x34\x1b\xf2\x9b\x42\x0b\xf9\xd2\x07\x53\x1e\x03\x1c\x88\xf5\x19\xc8\xd5\x61\x62\xa5\xfb\x81\xc0\x38\x09\x59\xa3\x27\x27\x98\x50\x1e\xfb\x30\x42\xdc\x04\xf5\xb8\xeb\x41\xb3\x8b\x62\x93\x3e\x05\x9c\x37\x40\x39\x42\x08\x07\x19\x12\x30\xef\x03\x19\xc1\x90\x0b\x27\xaa\xdc\x07\xfb\x65\xe0\xb8\xa4\x89\x3b\xb1\xe3\xd0\x9f\xa9\xf3\x60\x28\x8a\xef\x47\x61\x9f\x3f\x55\xd9\xe8\x36\x62\xaa\x8d\x31\x69\xb0\x95\xb3\x27\x76\x4f\x16\x61\xc4\x34\x8c\x2b\x93\x53\x8a\xd6\xb2\x2a\xc5\x81\xe0\xc8\x22\x2f\x4f\xa4\x14\x01\x11\x03\xde\xfc\xb8\x4a\x5c\x5a\xb7\xc8\x10\x23\x51\x32\x3a\x3a\x5e\x01\x4e\x27\xb3\x2e\x1e\x57\x2b\x08\xac\xbd\xfe\xda\x76\xa2\xe5\x14\xc1\xa0\x1f\x40\x0a\xab\x76\x2d\x7b\xc0\xf4\xf8\x6d\xdc\xaf\x11\xfc\x7b\xd9\x17\xe9\x8b\x5b\x83\xd0\x99\xe2\x45\x14\x70\x3b\x5c\x79\x2e\xf7\xf7\x57\xa5\x5d\x54\x2a\xaa\x5d\xb3\xa1\xee\x65\x98\x99\x03\x59\xa1\x18\x68\x71\xf5\xb1\x77\x61\x32\x5e\x1c\xc5\xbc\x42\xd0\x40\x1b\x5a\x8f\x89\x37\x8f\xd1\x51\x7c\x5c\x93\x42\x06\xd2\xc8\x4e\x61\x27\x92\xfc\x83\x35\xcd\x27\x7d\x31\xd6\xcd\x19\xe3\x63\x58\xe4\x8f\x54\x5b\x46\x31\x25\x22\x90\x3b\x87\xb0\xa2\x40\xd6\xd0\x00\x51\x8b\xe4\x14\x0a\xe3\x4d\x9d\xa3\xf1\xb1\xa1\x2a\x0d\xcf\xa4\x48\x8b\xe2\x30\x11\x8e\x7a\x71\x8f\xb4\x84\xc9\x91\xc2\xcd\xb6\xb6\x53\x49\xa4\x2a\x9e\xff\xa6\xf1\xcf\xe1\x04\xf5\x69\x48\x23\xe1\xfb\x33\xdd\x02\xd9\x23\xd5\xcd\x6e\xe3\x6d\x30\xc7\xf3\x45\xa1\xc4\x35\xc5\x24\x2c\x3d\x71\x1b\xe7\x96\xf1\xa7\xad\x6d\xcd\x09\xa2\xaf\x70\x80\xa2\xbc\xf9\xdd\xbb\xe0\xd0\x9a\x6f\x49\x38\x83\x64\xf9\x33\x5a\x96\x7e\x7a\x1f\x2d\x26\xa5\xef\x13\x8a\x49\x15\xeb\xe6\xbf\xb9\x1e\x48\xb3\x49\xcd\xd7\x27\x30\x98\xbd\x6c\xb3\x5f\xef\xa5\x88\xe3\xf7\x47\x23\x5e\xf4\x28\x8d\x27\x73\x5d\xfe\x95\xc8\x09\x17\x57\x34\x1f\xd0\x60\x8e\xd0\xe9\x13\x89\xee\x3c\xd0\x89\xd1\x33\x2a\xab\x84\x3b\x9d\xb3\x74\x0e\x02\xdc\x2c\xf9\xca\xf5\x46\xfc\xbd\x3e\x7f\x28\xf6\x8a\x4f\xa6\x09\x62\xae\x27\x46\xa3\xfe\xd6\x43\x90\xe1\x28\xd7\xe6\xfd\x32\xf6\x99\x54\xed\x7a\xf7\xc8\x20\x4c\x9e\x71\xa3\x72\x70\x79\x99\xba\x44\xe0\xe5\x25\x54\xb3\xbd\xbc\x44\x72\x5a\x8b\x38\xc2\x30\x78\x87\x7c\x4c\x02\x71\x5b\x7a\xab\x15\x60\x93\x7d\x13\x57\x57\x50\xca\x48\x22\x5b\x1a\xa8\xc2\x2e\x7e\x60\xc8\x3c\xeb\x16\x44\x0e\x90\xd1\x45\xe0\x0f\x11\x88\x93\x21\x5d\x95\x18\x95\x8a\x5a\xe2\x05\x0e\x78\xc4\x57\xfa\x15\xe0\x61\x82\x23\x11\xca\x03\xb4\x69\xf1\xba\xf3\xc6\x19\x11\x39\x23\x91\xa9\x50\xe1\xdc\x2b\x2b\xae\xc6\xa9\x3c\x38\xce\xeb\xb3\x17\x2b\x00\xf9\x54\x28\x9b\x4a\x0c\xc2\x60\x88\xca\xf3\x21\xd9\x7c\xa0\x9c\x8f\xfa\x0a\x40\x3e\x1f\x62\x9e\x4f\xcd\x3a\x41\x6f\x05\x44\xbc\x48\xc3\x7a\x8b\x87\x1a\x56\xbc\x0c\x79\xa4\xc1\xe3\x27\xf0\x0c\xf5\xea\x50\xf0\x44\x7d\x81\x11\x2a\xa5\x99\xb3\xbb\x8a\x7b\x9f\xc5\xeb\x65\x40\x05\xdb\xfb\x3c\xae\xd6\xf5\x3c\xa0\x0a\x0f\xa4\x69\x54\x12\x72\x3f\xe6\xa1\xf5\x23\xfb\x8d\x1b\x1f\xa9\x6f\xb3\x7b\xad\xe7\x1d\x73\x7b\x5d\x6e\x14\x46\x03\x41\x7a\xbb\x1b\x0e\x98\x40\x31\x07\xa1\x08\xa7\x80\x79\x4e\xaf\x0d\x50\x34\xaa\xba\x6e\xda\x89\x04\x9a\x6e\x03\xfd\xa8\x4a\xbf\x33\xb2\x1a\xed\xf7\x19\x7b\x7f\xc2\x7b\xb8\x42\x07\x51\xe6\xd3\x69\x62\x3b\xd2\x59\xc0\xc6\x53\xc3\x81\x52\x75\xeb\xed\xbb\x17\xaf\x9e\xbc\xfb\xfd\xd3\xcf\xcf\x7f\xe7\x31\x7b\x8d\x77\x1b\x7f\xc6\xb8\x3b\xb4\x14\x3d\x60\xda\x27\xc5\xf5\x69\x52\xd9\xcc\x20\x28\x6b\x2e\x93\x50\xd3\x29\x9e\x61\x1e\x4b\x67\x0c\x22\x0b\x65\x8a\xb5\x21\xd2\xab\xab\x95\x84\x85\xca\x53\x5a\x7c\x0b\x6e\xbf\xc8\x1a\x59\x9a\x38\xca\x86\x1e\x31\x5e\xee\x9a\xf3\x93\xf2\xd5\x4b\xb3\xab\x37\x96\x57\xaf\xfa\x0a\x70\x26\x32\xa2\x2d\x58\x49\xac\x33\xc7\xd7\x38\xa8\x84\xc2\x15\x46\x05\x43\x02\x37\x7b\xc8\xa0\x7f\x09\x7e\x9a\x01\x75\xe4\xc0\x3c\x04\x31\x5c\x8f\x91\xa3\x17\xf3\xd0\x53\x5a\x19\x02\xa0\x6f\x74\x79\xc9\xae\x3c\xe1\xb5\x98\x21\x0a\xf3\x30\x21\x02\x21\x04\xc4\x25\x63\x5b\x53\x9e\x69\x1e\x32\xaa\xc5\xb6\x6f\xf4\x07\xdd\x25\x8c\xdd\x06\xd8\x52\xf2\x8f\x09\xb8\x24\x5f\x04\x6c\x29\xb9\x1d\x71\x97\xd0\xc0\x66\xec\xe1\x0b\x1a\x18\x52\xe0\x67\x8c\xa8\x2a\x94\xa3\x89\x01\x5c\xac\xaa\x95\x09\xa1\x16\x8a\xf0\xaa\x2c\x5d\x43\x3c\xdc\xe3\xda\xa1\x0b\xc4\xf6\x8c\x73\x59\x2e\x25\x6c\x6b\xc6\xca\xb2\x6b\x3a\x16\x9a\x25\xbb\xc6\xab\xe0\x0d\x2e\xf8\x8c\x4d\x4d\xd8\xc5\x9e\x05\x60\x89\x27\xf8\x56\xcd\x42\x9e\x44\xfd\xc2\x91\x7b\xb8\x77\xe8\x02\xc6\xf2\x29\x0c\xa3\x91\xfb\x16\x4e\xd8\x7e\xa5\xce\x18\x2f\xe2\xc0\x05\x19\x4a\x0a\xbf\x28\x2f\xb8\x73\x27\x19\x1e\x91\xe3\x95\x28\xd4\xf1\xc4\xa7\xe1\x99\x09\x6c\x3c\x6f\xa1\x54\xb3\xbd\x57\x40\x5f\x61\x37\xc5\x11\xba\xbc\x84\xb9\xb2\xd4\x1c\x8f\x90\x6d\x57\x8d\x9f\x32\xa1\xbe\xa2\x4e\x35\x1d\xc5\x3c\x2f\x83\xc9\x2b\x02\x4c\x95\x6a\x60\xaa\x24\x8f\x08\x93\x94\x9d\x73\xca\x54\x91\x91\x32\x01\x2e\x0f\xb4\x97\x97\x56\x6a\x54\x85\x15\xab\x85\xb2\xd5\x02\x48\x15\x38\xe6\xee\xbe\x22\x7d\x0a\x1b\xaf\x80\x14\xce\x67\xde\x0e\xea\xb5\x06\xdd\x6f\x13\x06\xdd\x95\x7f\xa8\x7c\xb2\x03\xdf\x16\x91\xb2\xe9\x64\x17\xa6\x6b\xa1\xef\x8b\x40\x53\x3f\x19\x48\xa3\x49\x8f\x7a\x05\x64\x7b\x72\x79\x99\x33\xd5\xbc\x42\xc9\xf4\x79\xcc\xae\xe5\xc0\x95\xd1\xa2\x75\x6e\x00\x93\xe3\x57\xb7\xd4\xc9\xcd\x22\x8e\xd1\x40\xdb\x63\xf2\x40\x32\xb1\xac\xf1\x51\x71\x58\x5d\x6f\x40\x49\x38\xeb\xa5\xb8\x43\x54\x62\x0c\x3d\xdc\xdb\x73\x87\x9a\x44\x2c\x6f\xa7\x11\xd9\xd9\x89\x07\x28\x0e\x92\xdf\x42\x3a\xed\xb9\x4f\x45\xec\xa2\x60\x2d\x27\xc8\x41\x62\x96\x4c\x2c\x4a\xb9\xd2\x22\x41\x7c\xa3\x3a\x28\x0e\xe6\x38\x8c\xa9\xeb\xed\xec\x64\xee\xdb\x02\x7d\xc0\xfd\x7d\x51\x96\x9a\x43\xa1\x09\x4e\x89\xd8\x65\x34\x2c\x82\x2d\x19\x42\x90\xea\xca\x59\x1b\x61\x18\x37\x53\x8e\xb3\x7e\x1a\x60\x22\xbe\xe0\x68\x25\x78\x25\x95\xa8\x89\x4d\x25\x6a\x7c\xbd\x95\xa8\xc9\x76\x2a\x51\xe3\xdb\x18\xad\x94\xb4\x57\xfa\xb3\xc3\xd4\xde\xbe\x53\x69\xcc\x94\x99\xc9\x68\x90\x5a\xd8\x81\x76\xfd\xf6\x50\x26\x92\x49\xd4\xdf\xae\x4d\xbc\x38\x35\xf1\x72\xfc\xb7\x18\x88\x23\x3a\xfc\x4a\x20\xe4\xb0\x61\x39\xa3\x91\xe3\x7e\x95\x06\xbc\x82\xaf\x5c\x07\x13\xe7\x19\x4a\x68\x18\xf3\xdc\xd3\xec\x21\x4f\x7f\xea\x2b\xaf\xd6\x5c\x8c\x8b\xe6\x62\x5c\x67\x2e\x36\x1b\x8a\x7b\x6c\x06\x6d\xa3\x69\xf2\xc0\xb5\x1b\xd9\xb5\xc2\xe4\x07\xcc\x43\x4f\x0c\x97\xef\x69\x29\x70\xb6\x5b\x83\x56\xeb\x0d\x7c\x7a\x66\xb1\x73\x49\x7e\xe7\x56\x09\x1b\x44\xc5\xd5\xad\xbd\xf3\x18\x6b\xc9\xdb\xe4\x90\xa7\xb0\x0f\x78\x75\x73\xa1\xa0\x87\xe3\x65\xef\x88\x00\x0a\xd0\xb1\x07\x92\x16\x36\x73\x9c\x15\x09\xbe\xbc\xec\xc9\x96\x0a\xfd\xf0\x67\x0e\xe6\xa4\x19\xec\xa8\x86\x81\xc8\xed\xa3\x45\x66\x9e\x08\x65\x23\x1c\x5d\x84\xc1\x10\x01\xe5\x16\x21\xe5\x2d\x0e\xb3\x2d\x1e\xca\x2d\xae\xbe\x6a\xe5\x05\x09\x75\x83\x5c\x83\xb8\x07\x36\x59\x08\x77\x97\x47\xdf\x09\xc0\x01\x57\xa1\x0b\xe4\xe7\x19\x83\x04\xcd\x21\xd7\xc4\x87\xee\xae\x5b\x3b\x6b\xdc\x38\xeb\x8a\x05\xab\x0b\xde\xa8\x91\x1c\xd0\xfd\x51\xde\xf4\xf7\x33\x5a\xba\xde\xca\x1c\xa3\x18\x0b\x1b\x1a\xd3\x08\xf5\x56\x71\xad\xb8\xaa\x36\x7b\x71\x5f\x8a\x5d\x89\x47\xa4\xbc\x25\x49\xd9\xa9\x75\x0f\xef\xec\xe0\xbc\xfb\xc5\x5b\x49\x53\x4b\xc9\x4a\xd9\x42\x23\xe2\xf8\xa7\x37\x53\x0d\x6a\xb8\x91\xf8\xc8\xd5\x25\xf3\x12\xc1\xc0\x68\x3a\xcf\x9b\xbf\x8b\x7b\x49\x34\x33\xee\xa8\x62\x49\xaa\xa6\x24\x80\x32\x04\xfb\x66\xe2\xb7\xec\xe4\xba\xdd\x53\x6d\x24\x13\x73\x3c\x44\xfa\xec\xfb\x97\x1f\x7f\x4c\x1f\xac\x5d\x49\x31\x55\xa3\x11\xaa\x03\x64\xf0\xf2\x7d\x83\xb2\xfb\x86\xca\xfb\x46\x7d\x05\xa8\x40\x25\x69\x21\x48\x14\x77\x4a\x0b\x17\x99\x98\xf9\x6e\x10\x26\x52\x3f\xbc\xdb\x32\x9b\x6f\x99\x82\x01\x4d\x31\xe1\xa3\x63\xb3\x3d\x2e\x6f\x2c\x4c\xa3\x9e\x56\x2b\x90\xc2\xfb\x5a\xf6\xbe\xe1\x2e\x40\x71\xed\x26\xe0\x79\x56\xdd\x6d\x8a\x2e\xa5\xc9\xb8\xb4\x2d\x08\x5e\xd0\xca\x9c\x0b\xf1\x63\x2b\x04\xde\x96\x92\x67\xed\x36\x23\xff\xa4\x9b\xc9\xb4\x89\x8b\xe0\xb1\x3c\xe9\xcd\x7d\xfa\xe6\xf5\xfb\x8f\x2f\x3f\x3d\x79\xfa\xf2\xfd\xa7\xe7\xaf\x9f\x7c\xff\xf2\xf9\x33\x65\xcf\x13\xef\xc9\xd0\xae\x8d\x1e\x00\x15\xb7\x14\xaf\x4c\xf6\x63\xf1\xba\xa3\x63\x93\xad\xeb\xe8\xe2\x1d\x92\x90\x68\x2e\xdb\x83\x4c\x50\x74\xc1\x13\x9e\x8d\x31\x74\x99\x2a\x8f\x5c\xf0\x24\x8a\xf0\x39\xdb\x85\x95\xc7\x38\x17\x4d\x77\x51\x28\xfd\xc0\xbe\x95\x1b\x6f\xf0\x49\xfe\x57\x42\x3b\x71\x54\xa2\x81\xfc\x0e\xf2\x6e\xb3\x14\x13\xf1\xfd\x8b\x78\x8c\x13\xd7\xcb\x45\xda\xc5\x5e\x6c\x86\x82\xcb\x59\xc1\x06\x4c\xf0\x9d\x25\x26\x9b\x4a\xec\x5d\x50\xee\x30\x92\xcf\x1c\xc5\xc7\x42\xee\xcc\xe0\xb3\x48\xd5\x14\xe4\xd0\xdf\xb1\xbf\xc4\xb8\x52\xa5\x4a\x58\xf3\xcd\xe0\x4a\xe2\x4d\x5c\x5b\x19\x84\xb1\x1f\x2d\x02\x94\xf4\xd4\x2e\xe7\xaf\xd6\x31\xb0\x7a\x2a\x72\x70\x04\xe5\x10\xe5\xdf\x5e\x1e\xd8\x3c\xb5\xd1\xeb\x1e\x0a\xd5\x69\x5d\x4c\x91\x78\xe6\xf2\x12\x5d\x5e\xba\xff\x9f\xf4\xe2\x2d\x43\x4b\x53\x3d\xe8\xaa\xe4\x15\x92\xd6\x07\xca\xe3\x4e\x2b\x5f\x27\xae\x77\x24\xdf\x99\x41\x18\xac\x36\x91\x9e\xf3\xc5\x5a\x6e\xa6\x18\x3d\x83\x31\xac\xce\x7f\xe3\x41\xc5\xeb\xe7\x87\xa8\xb9\x8f\x4c\x40\x2b\x83\x08\xe3\xd3\xc5\x5c\xbe\x24\xa5\xd3\x30\xcd\x89\xe6\x05\x02\xfa\xe7\x21\x9d\xf6\x17\x24\x72\x3d\xaf\xf1\x42\xce\x13\xbc\xe2\x76\x4b\xa1\xe6\x75\x65\xd4\xc7\x01\x1a\x52\xc0\xb4\x32\x34\x8c\x99\x6e\x4a\xd8\x6d\x05\x4d\xba\x41\xfd\x4d\x87\xbd\x15\x88\xf0\x04\x2f\x68\xd3\x4b\x4d\x7d\x8b\x96\x95\x1d\x17\xf0\xde\xe4\x42\xc8\x35\x94\xd0\x6e\x45\xb2\x09\xf6\xf4\x14\x07\xe8\xfb\xe5\xc7\x77\x2f\x2b\x02\x11\xf3\x21\x34\x89\xbc\x51\xd2\x15\x04\xee\x09\x4c\xd0\x47\x12\xf1\x6c\xb5\xdc\x5b\x39\x30\x5d\xe1\xa5\xe0\xc2\x70\xcd\x2b\xf7\xae\xf2\xb7\xdc\xdf\x13\x0e\x17\x07\x0d\x64\x2a\xd9\x80\x83\xbb\x4b\xff\x0a\x41\x33\x4c\x91\x73\x0e\x13\x47\x00\xcf\xb9\xde\xb0\x17\x0b\x8f\xac\x08\x1b\x78\x57\x7e\xc2\x93\x8a\x35\x9b\xee\xe8\xf0\xdb\x6f\x0b\xe5\x65\x72\xed\xd3\xd7\xe6\x5b\x3d\xdc\xdb\x5b\xa9\x80\x46\x18\xc0\x39\x45\xe4\x07\x4c\x7a\xb4\x14\x08\xcd\xb5\xfa\x5e\x5c\xce\xb9\x6b\xa1\x0c\xaa\x1a\x53\x9b\x58\x0a\xa1\x1f\x25\x7d\x69\x4f\x28\xff\xca\x51\xec\xa1\x1f\xed\x86\x49\x9f\x47\x59\xf4\x05\x84\x48\x5f\x26\x1f\x96\x65\x42\x39\xa6\x2b\x2e\xd0\xc0\xe1\xfc\xb5\xc4\xb7\xa4\x10\x46\x87\x95\x9d\xcc\x03\x61\x7b\xf5\x5f\xce\xa1\xd9\x28\x09\x5b\x88\x86\x50\x13\x0d\x05\xbd\x4d\x76\x77\x8e\x73\x6e\x0c\x0d\x96\xfb\x3e\xe7\x9e\xa4\x68\x36\x8f\x44\x25\x38\xe1\x7d\x4c\x5d\x8f\x69\x04\x71\x85\x4e\xc1\xde\x42\x99\x24\x12\x35\x47\x33\xa7\xcf\xf5\x0a\x55\xcd\xe4\x28\xde\x2d\x22\x94\xb8\xc5\x7d\x1c\xb6\xd8\xc7\xc5\xcc\xb4\x35\x74\x11\xd1\xc7\x4d\x8a\xb8\x15\x23\x6a\xed\x93\xb1\x31\xad\x6e\x14\x39\xcf\x59\x16\x37\x9d\x06\xbe\x29\x13\x60\xed\xc8\xf9\xca\x98\xf9\x72\x29\x22\x03\x77\xd3\xb0\xb8\xf2\x91\x9c\x5c\xe6\x53\x8f\x14\x65\xb0\x54\x34\x15\x86\xfb\x5c\xf4\x40\x1a\xc3\xb9\xa7\x38\xa7\x72\xf4\x7e\xbf\xec\xb9\xd2\x71\xc5\xd3\xfe\x06\x9a\xd3\x48\x7e\xff\xe2\x19\x63\x56\x59\x28\x11\xb7\x65\x52\xef\x5f\x3d\x7c\x79\xd9\xc3\x23\x92\xfe\xd2\xd0\x8f\x88\x41\x8a\x3d\xcf\x63\xf4\x1c\xe1\xf4\x44\x66\xbc\x12\xca\xa0\x50\x90\x1b\xbd\x88\x13\xf5\x00\x2c\x71\x88\x16\xea\x3f\x4f\xe9\xbd\x51\xfc\x81\x8f\xe8\x56\x73\x07\x3e\x83\xad\xf1\x86\x75\xef\xd8\x86\xda\x1e\x37\xdb\x1e\xaf\x06\x5f\x13\x07\xa8\x5f\x1d\xb5\x31\x42\x55\x51\x6c\xf9\x78\x32\x5e\x2d\x91\x2b\xbf\x1c\x24\x4f\x45\x6a\xaa\x60\x0c\x25\x06\xde\x93\x6e\x12\x21\xce\x25\xa3\xa3\x0b\xb9\x7c\x22\xb4\x8f\x27\x8a\x0e\xdd\xd7\x69\x48\xdf\xea\x18\xc4\xab\x92\xf6\x5d\x88\x77\x03\x70\x44\xcb\xd8\x4f\xfa\x2c\x91\xd2\x72\x72\x9d\xa8\x44\xc4\x0f\x70\x92\xb8\xde\xe5\xe5\xd1\xb1\xb7\xf2\xc0\xd1\xb1\x37\x58\xc4\xe1\x5f\x59\xd5\x99\x5c\x08\x11\x7f\x18\x40\x95\xad\x21\xbf\x15\xf3\x07\xb4\xf0\x75\xf1\x9a\x42\xd9\x35\x95\x6f\x9e\xa6\xe5\x81\x52\x98\x5e\x5a\x43\x96\xf0\x38\xbd\xb5\x79\x43\x03\x63\x48\x79\x65\x3c\xe0\x93\x91\xf5\xf0\x02\xf4\x39\xff\x50\x66\x1f\x96\xd4\x7b\xf1\x4c\x38\x1d\x45\x3b\xfe\x7f\x6c\x07\xac\x3c\xbe\x1b\xfa\xfb\x8c\x43\x2a\xa6\x23\xfb\x3e\x22\xc7\xaa\x79\x16\xab\xc8\x1b\x6a\x0f\xb0\x0f\x00\xaa\xe7\x9e\x4e\x91\x7f\x9a\xe8\xbf\x8b\x6f\x6a\x60\x04\x5d\xf7\xfe\x08\x0d\x52\xf6\xc4\x8e\xbe\x78\xcb\x5a\x7d\x8d\x8a\x7d\xd5\xf2\xa3\xd8\xb4\xd0\xb0\x62\xa1\xe3\xc2\x42\xc3\x95\xb8\x96\x8b\xa7\x06\xd7\x9f\x9a\x8f\xdc\x66\xed\x50\xec\xb0\xa5\x4b\x43\xb7\xd9\x19\xc2\xe9\xd6\xc9\x55\x96\xbc\xda\x3c\x43\x59\x24\xb3\xd3\x64\xc3\x2a\x91\x69\x5d\x8d\x50\x95\x77\xbe\x99\xb7\xbc\x4d\x32\x73\x23\x27\x10\x13\x54\x9c\xc0\x98\x10\xd4\x95\x90\x9c\xae\xfd\x75\x09\xc9\xdf\xe7\x65\x89\x8a\xfc\x26\xb1\xd9\x2b\x60\x22\xd6\xdd\x39\xb2\x3e\xf6\x46\x3a\x98\xec\xa3\x5b\x19\xf2\xea\x65\x45\x58\x92\x15\x49\x57\xb2\xa2\xa0\x48\x6b\x1d\xd0\xda\x95\xd9\x64\x48\x48\x50\x34\xae\x11\x94\xc4\xbe\xe4\x45\x6e\x8d\x7e\x97\x04\xf9\x04\x51\x79\x12\x0c\x46\xb9\xac\x3b\xdc\xa3\xde\xe3\x0b\xe1\x57\xc1\xe4\xc5\xb3\x21\xc7\xb2\x7e\xcf\xdb\xbf\x78\x36\x44\xab\x61\x21\x99\x81\xaa\x30\xfd\xae\x32\x4c\x73\x24\xf4\xd2\x03\xf5\x56\xa0\x19\xd5\x9d\xa9\xc6\x04\x14\x89\x88\xa4\x5f\x08\x69\xff\xef\x70\x54\x9f\x91\xd8\xd8\x3b\x07\x67\xca\xf7\xbd\xae\x90\x4f\x97\x73\xb4\x9b\xc2\x1b\x37\x9e\x66\x1d\x16\xa8\x75\xf5\xc5\xab\xb5\xad\x18\xe1\x82\xf4\xfd\x2b\xc4\xf2\xb4\x34\x0d\x5b\x0c\x26\xf3\xba\xd2\x74\xe6\x72\x99\xcd\x84\xbc\x67\xc8\x77\xd4\x3c\x96\xb1\x2a\x3e\xc4\x3f\x8f\x09\x9e\xa9\xe3\xdf\x43\x47\x54\xc1\xe9\x20\xed\xc6\xf5\x00\x2f\x93\xa3\x8d\xe5\x49\x14\xb9\xde\xe3\x8b\xd5\x90\x3b\xee\xd7\x55\xdd\xf9\x5a\xe6\x0b\x2d\x36\x2c\x67\x55\xf5\xdc\xae\xd6\x1b\x10\x2d\x38\xff\xae\xd6\xe0\x16\x52\x47\x93\x5b\x9e\x12\x89\xdb\x97\x42\x09\xaf\xb1\x14\x4a\x72\x5b\x4b\x7c\x24\xd6\x35\x1c\xc3\x2f\xb8\x86\x63\x58\x51\xc3\x31\xbc\x1d\x89\xb8\xd1\x48\x8f\xa2\x01\x10\x24\xaa\x9a\x77\x49\x93\x39\x34\x6a\x32\x87\xba\x26\x73\x78\x3c\xcc\x47\x05\x83\x48\x86\x9a\x73\x2e\x01\x16\x45\x80\xbb\x0d\x50\xa2\x40\x3c\x12\xa8\xa4\xae\xf4\x89\xba\x20\x80\x14\x0e\xe9\x0a\x90\x7c\x2c\x33\xfb\x7a\x20\x2c\x09\x97\x97\xc5\x18\xa5\x11\x53\xab\x08\x8c\x27\x88\x6d\xac\x14\xd5\xaa\x47\x3c\x90\x69\x60\x85\x51\xfb\xa3\x0c\x06\x1d\x15\x45\x2b\x77\xe0\xa6\x89\x1f\x71\xee\xaf\x50\xde\x37\xd9\xd6\xe7\x3b\x5d\xec\x7b\x8d\xb7\x7b\x20\xd0\x70\xff\xc6\xa3\xd4\xd3\x3d\x36\xf9\x20\x24\x96\x2f\xee\x05\x5a\x79\x83\x34\xa8\x44\xc6\xe0\xed\xec\xf4\x92\x51\xa2\x06\x72\x44\x8e\x3d\x0f\xa0\x0c\xa9\x0f\x01\xdc\x4b\xea\x2a\xa0\x9b\x7a\xcc\x62\xbc\x2e\x2f\x61\x5a\xa4\x2d\x5f\xfe\x9c\x56\x94\x3f\x8f\xbc\xb4\x8c\xb4\x0f\xf8\x2a\x12\x53\x9d\xf9\x2c\xa0\xee\x42\xbe\x76\x98\x01\x66\x0d\x4e\x64\x03\xf6\x7a\xf5\x59\xa5\x17\x89\x02\x30\x0b\x26\xd6\x66\x95\x49\x55\xa9\x9b\x0d\x52\xcf\x5b\x94\xe3\x6f\x1f\x81\x22\x13\x52\x17\x3b\x3b\xfc\xd9\xac\xd4\x67\x75\xe1\x4f\x79\x0b\xa8\x52\x76\x3e\xdb\xe0\xa6\xd8\x2c\x63\x3d\x3b\x5e\xc8\x4e\x2b\xf3\xe9\x8f\x2e\x56\x02\x7f\x99\x0c\x7c\xf6\x26\xaf\xe7\x57\x17\x17\xea\xf8\xd5\x5a\x11\xd9\x15\x58\x4f\x12\xaf\x12\xbd\xb3\x5a\xa4\xf7\x1a\xc3\xbc\xc4\x1a\x96\xc3\xbc\x48\xfa\xea\x48\x94\x7d\x88\x3d\x91\xfb\x03\x16\xe5\x70\x8a\xa0\x41\xe2\x4e\x10\x24\xfe\x74\x7b\xb0\xa8\xfc\xf5\x3c\x9d\xb0\x1c\x35\x0c\x83\x80\x1f\x9e\x97\xb2\xaa\x50\x1e\x1a\x50\x40\x83\x55\x3f\xb0\x6a\x87\x7e\x95\x9e\xac\x5a\x5c\x63\x59\x7e\xb7\x50\x8c\xb7\x4b\x1b\x22\x1a\x84\xe3\xd7\x98\xaa\x2b\xa8\x0e\xf0\x58\x8e\xce\x65\xd3\xcc\x37\x32\x06\x28\xda\xec\xad\xec\x79\x2d\x6e\x56\xdd\x68\x3b\x3b\xf7\xb3\x3f\x38\x8c\x6a\x5d\xb5\x16\x49\x1c\x9e\xba\x68\x1b\x48\x9e\x5a\x0c\xe0\x44\xc0\x33\x78\x55\xd8\x17\x76\x5d\x4c\x10\xfd\x95\x11\x99\xc9\xbd\xe6\xb0\x12\x0d\x39\x57\x36\xba\x97\x4f\x7c\x96\x19\xd7\x15\x41\xa6\xec\xe4\x8a\x37\xc4\x9c\x8b\x79\xa6\x1c\x35\xe4\xad\x64\xa9\xdb\xdc\xab\x8b\x22\xff\xe5\x65\x0f\x8d\x8e\xd0\x71\x0e\xce\x57\x0e\x0a\xc4\xbc\xde\x68\xc9\x27\xa6\x19\x5b\x64\xd5\x52\x39\x1a\xce\xfe\xc0\x45\x56\x68\xa8\x38\xa8\xb8\xa5\x57\x3d\xc1\x84\x6e\xed\x9a\xf0\xf1\x4c\x65\xb9\xe5\x8e\x78\xab\x03\x4e\x4b\x70\x69\xe3\x08\x52\x17\xb8\xdf\x7d\xe6\xbf\xed\x8e\x93\x59\x53\x42\x7e\x5b\xf5\x2d\xb9\x46\xf5\x0d\xdf\x56\xf5\xed\xce\x96\xb2\x05\x5b\x0a\xbe\xfd\xb6\x14\x4b\x9d\x3f\xf9\x82\x75\xfe\xa4\x42\xe7\x4f\x6e\x87\xce\x1f\x56\xdc\xf7\x76\x75\x65\x22\x5c\x8c\x82\xe1\x2c\xb3\x50\xd7\x44\x57\x90\xc3\x00\xb8\xce\xbf\x9d\x4c\x11\xa6\xf2\x24\x7a\x2b\x00\x83\xe0\xc7\x05\x24\x41\x45\x55\x44\xe1\xbb\xe0\x0f\x54\x8a\x03\xd2\xf1\xda\x8b\x05\x1e\x14\x11\x78\x50\xe4\x68\xff\x58\x2b\x3f\x83\x00\x06\xe5\xf4\x9d\xfb\xf7\xe9\x00\xc7\x7c\x00\x29\x66\xfd\x51\x72\xac\xc6\x69\xa9\xae\x8b\x24\x17\x70\x84\x00\x3d\x5e\x81\x19\xf4\xa7\x61\x6c\x42\xcf\x5d\x1b\xf5\x32\x05\x2c\x92\x29\xfb\xaf\xc4\x2b\xf2\x55\x2a\x64\xd6\x6f\x4a\x50\x51\x41\x92\x09\x60\x04\xcd\x21\x41\x4f\xa7\x90\x18\x71\x7f\xd3\x21\xf4\x90\xc8\xe9\x9e\x43\x92\xa0\x5e\x21\xbd\x9b\xdd\xd4\x03\x1c\xef\xec\xc8\x3d\xc8\x57\x30\xe9\xf1\x00\x78\x8a\x8c\xf9\x40\x4c\xf3\x4a\x2b\x7e\x0e\x70\xfc\x98\xfd\xdf\x08\x0d\x70\x3c\xcc\xa7\x14\xe1\xb8\x6a\x69\xf5\xe6\xa2\xec\x80\xfc\xc4\xbb\x91\xa2\x1f\x23\x3e\x62\x84\xa7\xfe\x14\x55\x6c\xa4\x4c\xb0\xde\xd9\x29\x70\x37\xea\x3d\xa6\xc3\x23\x7a\xec\x0d\x12\x3c\x43\x15\x59\x3a\xb2\x73\xe5\x41\x14\x59\x17\x86\xa4\x1c\x35\x08\xb4\x5a\x81\x30\xa6\x88\xcc\x09\x32\x95\xdc\x14\x48\x05\xf7\x44\x7a\xd7\x40\x5f\xa2\x1e\xf2\x74\x90\xd6\xb4\x13\xaf\x27\x73\x18\xf8\xda\x8b\xd5\xcd\x02\x7f\x92\xc5\x49\xe2\x93\xf0\x04\xe5\x09\x18\x0f\xfc\x29\x8c\x27\xdc\x00\x44\xd8\x19\xe5\xd2\x2b\x60\x44\xcc\x52\xc2\x7a\xb1\xa0\x21\x5c\x81\x49\xf1\x2c\x16\x11\x89\x94\xb6\x9f\xd7\x89\x50\x7d\x29\x52\x26\x6a\xec\x7b\x47\x7b\xc7\x1a\x16\x15\x3b\x63\x81\x5b\x56\x9d\x9b\x1c\x8f\x22\x64\xc3\x50\x38\x21\x80\x14\xca\x5f\xaf\x31\xba\x64\x4a\xe9\xbc\x19\xdb\xac\xec\x56\xf3\xb8\xb1\x52\x58\xb9\x2a\xda\xb3\x07\xe4\xe3\x69\x20\x65\x2b\x03\x14\x47\xa3\x2b\x59\xa0\xc4\x33\x03\x78\x82\x09\xed\xc9\x50\x11\xd6\x20\x67\x6e\x12\x5f\x67\x43\x34\xfc\x18\xc6\x21\xed\x19\x9c\xe9\xc5\xdb\x5b\x4b\x48\x41\x9e\xe6\x56\x07\x17\xb3\x34\x86\x01\xad\x00\x95\x50\x3f\x7c\xbf\xc7\x30\xe2\x26\xd5\x1f\x30\x79\x11\x08\xb0\x2b\x71\xf3\xbd\x8f\xe1\x3c\x99\x62\xda\xbb\x10\xc7\xb0\x1c\x69\x90\xd9\x7a\x64\xc5\x94\xfc\x00\x32\x74\x42\x12\xc2\x28\xfc\x3b\xfd\x1e\x8f\x72\xe3\xd1\x4d\xa9\x32\x50\x01\x60\xc0\x48\xed\x13\x44\xd9\x80\x2a\x75\x78\x38\x48\xcb\x50\xbf\x43\xc9\x1c\xc7\x09\xd3\x53\x31\x60\x8a\x8d\xcb\x7a\x13\xbb\x1e\x68\x80\x0d\xd6\xe4\x2b\x82\x3c\x14\x88\xc8\x6d\x68\x55\x49\xb2\x05\x10\xf7\xf5\x31\x98\xbb\xa1\x6b\x3e\x27\x0d\x60\x31\xf8\x32\x68\x72\x3d\x61\x29\x27\xac\x64\x81\x6e\xda\xa7\x24\x71\x29\xab\xad\x0b\x00\x6a\xc3\xe4\x89\x79\x92\xb1\x9e\x1c\x07\x08\xa0\x4c\x14\x6a\x8b\xc3\x41\xd1\x67\xda\x9f\x21\x98\x2c\x48\x31\x25\x53\x5c\x7c\xb9\x07\xaa\xda\xdd\xc6\xb2\x2a\x34\xf4\x4f\x9b\x4a\x25\xcb\x67\x4a\xd3\x13\x69\x7b\x5d\x85\x8a\x98\xe5\xe5\x35\x53\x4c\xf9\x55\xca\x6e\x4e\x7a\x8e\x50\xfc\x01\x97\xb6\xa7\x21\x8a\xd0\xba\x62\xb0\x01\xfa\xe8\x20\x5f\x94\x43\x9e\x15\x6c\x59\xc2\x91\x89\xd2\xd9\x7e\x9e\xc2\xa4\x97\x78\x8f\x7b\x3d\x32\x8a\x05\x6c\xaa\xe7\x29\xfd\x13\x8f\x1d\x3a\xf8\xc0\xe6\x24\xf1\x0d\x13\x8a\xe7\x3d\x5e\xde\x5d\x94\xdd\xef\x71\x90\xc2\x84\x83\xad\xca\x27\x07\x14\xf7\x08\x40\x3c\x98\xda\x03\xc4\x1b\xf6\xd4\x03\x48\xd4\xab\x08\xca\x7e\x07\xfd\x76\x94\xb4\x4c\xbb\x93\x8f\xa7\xfe\x12\xbd\x9d\x88\xa0\x7f\x05\xe7\xed\x4c\x70\xb2\x3e\x62\xfd\x36\x9c\x0b\x3b\x9f\x2a\x9c\x78\x5d\xc5\xf7\xd2\x28\xc1\xaa\x2d\x5a\x1b\x8a\x14\xcb\x02\xfa\xec\x0c\x99\x42\xfe\xd0\xb9\xb2\x5f\xe6\xaf\x63\xf1\x2a\xb2\x88\x85\xa5\x05\x95\x85\xb8\x46\x9a\xf2\xfc\x69\x63\xdc\x70\xa1\x28\x54\xfe\xc9\x5b\x79\x8b\xf1\x84\xf4\xc6\x39\xde\xaa\xb9\x61\x42\x77\x33\xeb\x70\xb2\xeb\x4f\x51\xbe\x5a\x74\xc1\x4e\x9d\x5a\x48\xe8\x9d\xd1\xf1\xf6\x60\xff\xc7\x99\x09\x8f\xac\x8f\xfd\x4f\xca\xc6\x3b\xd2\x84\xfd\x4f\x32\xfb\x1d\xb1\xc4\xfe\x27\xed\x2d\x79\xc4\xcb\xcf\xf4\xb6\x63\xff\xc7\x37\xdf\xfc\x98\x7d\x51\xbe\x77\x8c\xee\x53\x1d\x5e\xe1\xbd\xcc\xd7\xf1\x1e\x67\x26\x8e\x14\x7b\x13\xe0\x7b\x2e\x4c\x7c\x1e\x82\xdb\x43\x83\x64\x1e\x85\xb4\xe7\x0e\x5d\x0f\x1c\x78\x4c\x50\xea\xc1\x51\x0c\xf0\x88\x89\x18\x78\x14\x03\x38\x22\x9e\xc4\xbe\x85\x03\xd1\x31\x08\x47\x58\x7e\x54\x78\x0f\x89\xcc\x70\x9f\xc3\x24\x61\x67\x64\xa8\xb2\xac\xe5\xdf\xa3\xd1\x28\x7c\xbc\x37\xdc\xbf\xc7\x9f\xf2\x49\x48\x43\x1f\x46\xe9\x63\xe9\x17\xf2\xb9\xbe\x7c\xf0\x1c\x92\x98\x77\x27\x5f\x13\x9a\x5f\xd3\xaf\xe8\xd7\xd9\x4f\xd1\x21\x54\x34\x44\x7a\xe8\xf7\x56\x43\xb4\x5a\x59\x5e\xdb\x46\x64\xed\xce\x5d\x8c\x6d\xd7\xdc\x7a\xf8\x65\x58\xc2\xdb\x33\xf6\x32\x8a\xc6\xed\x19\x7b\x31\xbf\xfb\x66\x8c\xdc\x84\x26\x5f\x1c\xb9\x21\x1f\xf9\x4e\x52\xb9\x93\x54\xee\x24\x95\x3b\x49\xe5\x5a\x25\x15\xc9\xf7\xeb\x05\x16\x25\xa6\x0c\x53\xd1\x05\xa4\xf8\x53\x70\xf0\x0a\x25\x53\x91\x71\xfd\x54\x8a\x07\xff\xc6\x86\x2f\x33\x91\xa1\xb2\xdd\xff\xd6\xb4\xeb\x67\xa2\x46\x11\x02\x4b\xef\xea\x37\x21\xd0\xe4\x46\x20\xbf\xab\x19\x80\x7c\xe2\x7f\xab\x5b\x59\xbe\xfe\xad\x90\x9b\x72\x1d\xc9\xef\x6a\x5e\x2f\x9f\xf8\x77\x75\xab\xfe\xbe\x26\x57\xb5\x11\xac\x4a\x79\xad\x37\x83\x45\x1a\x86\xae\xc0\x9c\x92\x5d\x38\x9f\x47\xa1\x0f\xaf\x5c\x1c\xd4\x23\xce\x7e\xfa\xf0\xea\xe5\xf7\x90\x24\x03\x35\x8c\xde\x45\x18\x0c\xdd\xe4\xfb\x1f\x7f\x7c\xf9\x3e\xf9\xd9\x05\x3c\xee\x71\xf8\xd5\x85\x9b\x88\xf2\x29\xee\xf0\xe8\x18\xb8\xdc\xfb\x2a\xee\xd3\xe1\xd1\xd1\x43\xe0\x4e\x11\x0c\xfa\x11\x5c\x0a\x3b\xdd\x31\x38\x62\xff\x3b\x3e\x3e\x06\x47\x7b\xc0\xfd\xe3\x8f\xd8\x3d\x06\x47\xfb\xe0\xe8\xe0\x11\x70\xb3\x5a\xea\x6c\x96\x4f\x45\x2c\x27\x6b\xe1\xa6\x98\xee\x2e\x70\x3f\x05\x68\x4e\x90\x0f\x29\x62\xbf\xb9\x4e\xdf\x71\x81\xbb\x4b\x67\xf3\xdd\x13\x82\x7d\x1f\x47\x61\xff\x60\xff\xf0\xeb\x83\x8f\x8b\x87\xf0\x87\xbf\xfe\xfa\xe9\xd5\xdf\xbb\x78\x41\xfb\x87\xdf\x1e\xf4\x7d\x1c\x61\xd6\x30\xf8\xa4\x26\xf5\x69\x4e\xb0\x48\x51\xdd\x6d\x20\xfc\x60\x7a\x92\xb8\x6c\xdc\x63\x18\x25\x28\x37\xfc\x43\xe0\x86\x63\x17\x1c\xf1\x49\xc4\x98\xf6\xd1\x5f\xfc\xaf\x43\x70\xa4\xf0\x67\x81\xab\xa3\x68\x72\x0c\xa0\xe3\x63\xe0\xea\x0b\x7b\xcc\xbd\x2c\xc7\xe2\x3f\xe0\xa2\x40\xc9\x3d\xe0\x3a\x0e\x7b\x19\x23\x29\x4c\xa6\xa1\x8f\xc9\xbc\x2f\xe3\x5d\xc1\xd1\xd1\xfe\x01\x70\xc3\xc0\x05\xee\x39\x81\xf3\x39\x22\xac\xfb\xa3\x23\xf7\xbb\x39\x22\xb3\x90\x5b\xe8\x12\x17\xb8\xdf\x05\xbe\xfc\x0f\xfb\x7f\x21\xa4\x27\xd9\x47\xf6\x09\xc7\xc2\x2d\xcd\x09\x7f\x70\x00\x5c\xbd\x87\x63\xc0\xbf\x62\xbd\x1c\x8b\x35\x63\x4b\x22\xa7\x1a\xf8\xfc\xa5\xf2\x33\x0f\x27\xd4\x50\x4c\x8e\xe5\xcc\x64\x17\xea\xdd\xe5\x6e\x14\x88\xb0\xea\x2a\x1b\x65\x55\x77\x8f\x80\x0b\x7d\x79\x38\x8e\x0e\x1e\x80\x3d\xb6\xc1\x80\x4b\x50\xe6\x73\x52\xc4\x3d\x36\x11\xf6\x8f\x3f\x62\x41\xdb\x7d\x31\x36\xbc\xa0\x11\xa2\x6e\x71\xa9\x1d\x27\x5d\x01\xb9\x57\x22\x0c\x05\x16\x27\x27\xbf\x1f\xc1\x84\x0d\xf3\x2c\x44\xe7\xea\xa7\xe3\xf2\x86\x67\x9d\x1c\xb3\xcd\x4e\xe0\x0c\x51\x44\xf8\xc1\x59\x69\x1b\xaa\xfc\xa3\xda\x19\x6c\xe5\x9f\x9f\x31\x6d\x93\x8f\x6c\xf5\x15\x98\x21\x0a\x87\x17\x33\x7e\xb8\x05\xa6\xb4\xcd\x36\xb6\x8a\x13\xcd\x9a\xa7\x09\xc4\xc9\xee\x09\x4c\x42\xbf\x1f\x10\x3c\x0f\xf0\x79\xcc\xf6\x1f\x2d\x25\x16\x0b\xd7\x57\xfe\xc9\x56\xbd\xdd\x22\x73\xab\xcd\xb4\x28\x09\x79\x7c\x56\x37\x44\x52\xbd\x7d\x59\x44\xea\x86\x38\xb7\x9e\x28\x73\x7c\x8e\x48\x3f\x41\x11\xf2\x69\x7f\xb6\x88\x68\x38\x2f\xe2\xb5\x09\xda\xe8\x0f\xb6\xe9\xea\x8b\x24\xd0\x6e\xcd\x09\x5b\x93\x50\xbb\x5f\xca\x31\xd3\x67\xb7\x39\x7d\xbe\x28\x72\xec\x9e\xa0\x31\x26\xa8\x8f\xe7\x54\x88\x47\x9b\x52\xa7\xd8\xe1\x17\x45\xac\xee\xa8\xf4\x45\x92\x67\x1e\x41\x1f\x4d\x65\x8d\xb5\x8d\x49\xa4\xf7\xf6\x65\x91\x49\xbf\x6c\x27\x04\x2f\xe6\x5d\x50\xab\xdc\xe9\x17\x45\x34\x91\x13\xda\x4f\x73\xe9\x37\x26\x58\xa1\xc3\x2f\x8a\x58\x9d\xc9\x02\xb7\x5b\x04\x60\x1a\xfe\x76\x2d\x45\x3f\x06\xcf\xdf\xfc\xfd\xed\x2f\x5f\xdb\x59\x8a\xea\x55\x6f\x77\x03\xe5\x37\xf0\xd7\xd1\x79\x03\x9f\xa3\xd4\x6d\x9b\x88\x7f\x7f\x7c\xfb\x77\xf0\x72\xb9\xbb\x7d\x22\x72\x72\x6c\x40\xc9\xdd\xbe\xb2\xc6\xdc\x08\x3b\xe6\xff\x7c\xff\xc3\xf2\xc1\x23\x72\x66\x6d\xc7\x44\xb3\x39\x5d\xf6\x55\xce\x6c\xce\xe0\x23\x40\xf7\xfa\x87\x7b\x0f\x94\xd5\x0d\x46\x11\x3e\x7f\x89\x27\x21\xb7\x0f\x52\xb2\x40\x0d\x96\xa7\x87\xc0\xe5\xe3\xe8\x27\x11\x56\x76\x52\xf7\xbb\x98\xdb\x09\xc1\x11\x37\xa2\x0a\x6b\x52\x55\x27\xa2\x9b\x6f\x80\x3b\x3d\x70\x01\x7f\x21\x38\x7a\x24\x96\xfe\x77\xbc\x70\x20\x77\x29\x51\x27\xb5\x88\x05\xec\xf1\x6f\x6d\x8d\x52\x56\x83\x4c\x16\x27\x6d\xc6\xf9\xa0\x38\x4e\xee\x18\x73\x38\x15\xbb\x1e\xda\x09\x0e\x96\x56\xa3\x9a\x17\x07\x25\x7f\x76\x1c\x46\x45\x55\x9c\x7d\x42\x60\x4c\x51\xe0\x68\xa6\x51\x87\x62\xe7\x2c\x44\xe7\xa2\x40\x3b\x87\xb5\x71\xf8\x06\x70\x30\x71\x60\x72\xea\x2c\xf1\x82\x38\x30\x98\x85\x71\x98\x50\xe9\x4c\x1e\xb3\x6f\x59\x8b\x98\xff\xee\x08\x68\x0d\xe9\xb3\xe3\xd0\x89\x03\x6d\x78\xdd\x92\x44\x58\x4c\x13\x2b\xaa\x44\x61\x4a\x96\xfd\xbd\x6c\xdf\x07\xd8\x4f\xfa\x51\x18\x9f\xba\x06\x7a\xc9\xa6\x30\x6b\xb9\x0f\xdc\x29\x41\x63\x17\x1c\x1d\x7c\x2b\x8d\xe5\xbc\xce\xdc\x91\x2a\x07\xf6\xec\xcd\xd3\xf7\x9f\x3e\xbe\x7b\xa9\xac\xb5\xc0\x15\x30\xa0\x71\x80\x3e\x0f\xa6\x74\x16\x71\xab\x2f\x1f\x02\x41\x91\x0b\xdc\x18\xe3\x39\x8a\x11\x71\x62\x4c\xd0\x18\x11\x11\x4d\xcf\x1f\xa0\x3c\xac\xd9\x05\xee\xa7\x93\x08\xe6\x46\xf8\x0e\xc1\xc0\xa1\x53\xe4\x04\xd8\xe7\x9e\x5f\x65\x7e\xcf\x11\xb8\x4c\xf2\x26\x6a\x44\x08\x92\xb8\x73\x72\xbc\x7c\xfe\xe4\xdd\xeb\x02\x51\xc4\x2d\xbb\x9b\x20\x7f\x41\x42\xba\xec\xc7\x88\x9e\x63\x72\x1a\xc6\x93\xdd\x39\xc1\xc1\x82\xaf\x6c\x9f\xb3\xaf\x2e\x08\xf6\x03\x66\xb7\x19\x27\xd9\x64\x11\x06\xa8\x99\x54\xad\x0d\xdc\x5d\xf2\xa8\x02\xa3\xd9\x88\x65\x99\x8a\x65\x6e\x85\x5b\x9d\x1d\xfc\xf9\xf1\xd5\xdb\xff\xac\xc9\xad\x52\x27\xc4\xd6\x78\xd0\x6f\x28\xf2\xf1\x8c\x83\x77\x3f\x79\xfa\x32\xb9\x91\x37\x3c\x1b\x58\xca\x28\x25\xa6\x95\x13\x8a\x6c\x06\x47\x78\x23\x1d\x3f\x5a\x24\x14\x91\x81\xf3\x1b\x72\x12\x4a\x70\x3c\x89\x96\x0e\x8a\x7d\xbc\x20\x70\x82\xf8\x19\x59\x24\xc8\xc1\x63\xd1\x5b\x18\x3b\xd9\x89\x74\x50\x7c\x16\x12\x1c\xf3\xb1\x39\x63\x4c\xf8\xe3\x27\x28\xa1\x8e\x3a\xca\xce\x9c\xb0\x7b\xd9\x47\x77\x17\xff\xdd\xc5\x7f\x77\xf1\xb7\xbd\xf8\xd5\x75\xbd\xd1\x9d\x3f\xc6\x64\xb6\xed\xfb\x7e\xf9\xeb\xee\xbb\xf7\xf1\xe7\x5f\x8c\xf7\xbd\x2b\x33\x87\x5c\xe0\xfa\x30\xf6\xf9\xfa\xa6\xb6\x21\x36\xb7\x71\xc8\x66\xe0\xd2\xe5\x9c\x2d\x59\xe1\x8c\x7f\x03\x5c\x31\x43\xe3\x2d\x28\x77\xeb\x38\x44\x51\x90\xb0\x5d\x51\x71\x57\x66\x67\x02\x9e\xb0\x01\x68\x7b\x5b\x1e\x0b\xbe\xb9\xf9\x18\x78\x16\xa4\x2b\xfc\xf4\x32\x4e\xe2\x10\x1c\xb9\x21\x45\x6c\x94\xaa\x30\x50\x1a\x13\xe1\x4c\x61\x92\x42\xbd\x4b\xaf\xbd\x71\x04\xda\x28\x92\x39\x8c\x8b\x63\x7d\x2d\x2f\xbc\x6f\x2b\x1b\x3e\x04\x6e\x18\xcf\x17\xd9\x1d\xc9\x57\x8d\x87\x43\xf0\x22\x4d\xee\x77\x70\x41\xf1\x18\xfb\x8b\x44\x44\x43\x68\xc3\x4e\x87\x2b\x1f\xd5\x9e\x3c\x36\xd2\xaa\x3c\x0c\x39\xf6\x20\x3c\xcb\x5d\x2b\x22\x84\xd7\x25\x30\x08\xb1\x32\x66\xe6\x09\x5b\x4b\xc7\x0f\x7c\xd5\xcd\x74\xd4\xa9\x28\x03\x57\x10\xe4\x60\x77\xa2\x2b\xb6\x5a\x49\x1a\x5a\x61\x8e\x41\xc9\xff\x33\xee\x02\xf3\x52\x35\x2d\x99\x0c\x02\xf2\xe1\x3c\xa4\x3c\x91\x58\x46\x73\x3c\x14\xd1\x13\xe2\x0e\x54\x16\x0d\xf3\xa2\x16\x5e\x21\x17\x57\xa3\xad\x5c\x2c\x41\x23\x41\x55\xb9\xe6\xf2\x2e\x56\xaf\x3b\x56\x34\x9f\x22\xff\x94\xcb\x7f\x1a\xd5\xd9\x85\xfd\x57\x91\xfe\x8a\xee\xa5\x21\xa7\x7d\x64\xab\xc0\x7a\x4e\xe3\x6c\xaa\x03\x58\xd2\x40\x9c\xb4\xdd\x9e\x3c\xd5\x72\x7b\xa8\xbb\xba\x9a\x1a\xf9\x9d\x57\xbe\x81\x1f\xaa\xe0\x12\xa0\xaf\x6e\xed\x7e\x2d\x9c\x78\x8d\x11\x66\x87\x7d\x9d\xf3\x2a\x80\xf9\x3b\x12\x1f\x38\xbf\xe2\x85\x26\xb8\xfc\xf0\xff\xc8\x22\x42\xfd\x64\x8e\xfc\x70\x9c\xc6\x5b\xe5\x39\xe4\x14\x45\x73\x67\x2d\x36\xd9\xfb\xe9\xe9\x4b\xe7\x07\x4c\x66\x90\x7a\x8a\x72\xb5\x97\x8e\x8f\x03\xd4\x47\x41\xc8\xe3\xd9\xe4\xd5\xa3\x68\x98\x5e\x3d\xe9\x5d\x94\x2c\x63\x0a\x3f\x8b\xd0\xac\x53\xb4\x14\xf7\x41\xc3\x25\x20\x2a\x30\xb2\xd5\xce\x5d\x00\xea\x07\x90\x6b\x94\x3d\x3c\xf5\xa3\xe6\xed\x98\x36\xd0\x2e\xe7\xba\xeb\x2e\x1f\x21\xc7\xde\x2b\xf0\x22\xac\xee\x99\x2b\xde\x73\x2f\x9e\xad\xc5\x21\x8a\xcc\x80\x75\x63\x22\x84\xf6\x76\x54\xe2\xb8\xbf\xa1\x3f\xbe\x8a\x22\x67\xc2\xf6\x1b\xa4\xc8\x81\xce\xc7\x8f\x2f\x9e\x39\xe1\x58\x28\x1c\x9c\x05\x3b\x61\xe2\x44\x68\x4c\x1d\xae\xcf\x0d\xaa\xcf\x65\xdd\x19\x2f\x1d\xf1\x4a\x01\x57\x67\x45\x25\x4e\xb1\xd1\x02\x9e\x2c\x28\x65\xfb\x49\xdd\xdf\xfb\x07\xec\x6d\xa9\x72\x9d\xbf\x5c\xb5\x60\x40\x49\xe0\x30\x79\x4b\xc2\x84\x86\xb1\x16\x17\x98\xfe\x24\x23\xe9\xc5\x2f\xc6\xbb\x39\x65\xd6\xf9\x20\xcb\x63\x6d\x0c\xda\x25\x7b\x90\x5e\xb2\xc9\xe2\x64\x16\xf2\x9d\xf5\xa0\xe2\x48\x08\x42\xe8\x23\xca\x49\x2b\xef\xe1\x99\x94\x41\x0c\x8b\x52\xa4\x5a\x2b\x32\x55\x51\x60\xd3\x19\x2d\xe6\x81\xe5\x8c\x9a\xc5\x7a\x8b\x3d\xa0\xb8\x19\x4a\x50\x2d\x9d\xa5\x9c\x5b\x35\xaa\xa7\xe2\xf7\x9a\x7b\x87\xdd\x69\x71\xa0\x05\xe9\x56\x6d\x66\xb9\x89\x0a\x61\xbc\xfa\x41\x67\x3d\xe1\x78\x39\xc3\x8b\xa4\xb0\x9f\xec\x8e\xc3\xc3\x54\x48\xe7\x8c\xa8\x1f\x84\x30\xc2\x93\xf4\x8a\xc9\xbc\xb2\x47\xee\x13\x82\x84\x61\x78\x21\x3f\x9c\xc3\x58\xa6\x8a\x44\x88\x22\x71\x53\x3c\x79\xfa\xd2\xe1\x51\xed\x8f\xeb\x75\xfa\xc2\x18\x9a\x6d\x04\x76\xdd\x35\xac\x70\xee\xa2\x16\xc3\x76\xf3\x8b\x2f\x5b\x55\xae\x3e\xfb\x74\x28\xf6\x81\x6c\x9f\xdf\x07\xf2\xaf\x39\x24\x3c\x78\x54\xdf\x17\xcf\xd2\xf7\x55\xdd\xf1\xc5\xbd\x7b\x98\x33\xa7\xb4\x22\x9a\x5c\xc7\x36\x6b\x20\xe6\xd3\xd7\xb7\x43\x69\x1f\x00\xf7\xbb\x4c\xe1\xfb\xce\x4f\x77\x3a\x23\xcb\x83\x94\x40\xfb\xe9\xa7\x83\x54\x80\xb5\x99\xef\x3e\x38\x00\x0f\x0c\x73\x5e\x33\x46\xb9\x82\xc7\xe4\xff\xea\x4a\xdd\x67\x7a\xec\x46\xaa\x7e\x0c\xcf\xb6\xad\xe9\xbf\xfd\xf8\xfd\xe4\xfd\xc1\xe9\x5b\x6b\xcb\x2e\x85\x27\x72\xdc\x62\x9b\xb0\x43\x90\xa4\x22\x21\xcf\x00\x53\xb7\xdc\x14\x26\x53\x57\x5c\x49\x47\x47\x4a\x86\x92\xb2\xb4\x2b\x82\x1c\x84\x1f\xd0\xfd\xc0\xae\x0f\xa5\x5b\xb2\x07\xfa\x14\xbb\x3c\x8c\x7f\xc0\xdd\xbe\x54\xfc\x9e\xbb\x21\xc3\xa4\x2f\xc5\xf2\x8a\xc7\x8e\x15\x43\xb6\x1f\xc7\x3b\x2c\xc5\x53\xf3\x30\x08\xd6\x04\xcf\xca\x51\xe4\x9e\x5a\x63\x10\x5c\x11\x09\xeb\xc6\x31\x57\x4f\x34\x0d\xa5\xf8\xe0\x71\xca\x65\x72\x19\x30\x1d\x9c\x85\x18\x9e\x6d\x76\x14\x30\x4d\x55\xa3\xad\x47\x3d\xfc\xfe\xf5\x4f\x7b\xef\x7f\x3b\xfc\xd3\xee\x50\x1c\x56\x28\xe6\x54\x59\x42\x14\x87\xaf\x65\xd2\x55\xbd\xc8\x32\x85\xac\x9f\x64\xc1\x7d\xb2\x36\x99\x3a\xdc\x5f\x4c\x32\xd6\xec\x4c\x61\xe2\x9c\x20\x14\x3b\x30\x08\x50\x30\xa8\xba\x44\x2b\x3a\xfb\x30\x45\x04\x39\xe7\x30\x71\x60\xec\x70\x95\x8e\xf5\x13\xc6\x13\xe1\x56\x4e\x5f\x53\xd5\xaf\xcd\xab\x1a\xc9\x28\x45\xc3\x9b\x41\xc6\x04\x9e\x75\x42\xc6\x04\x9e\x5d\x33\x19\x53\x19\x68\x8b\x64\x64\x24\x10\xe3\xe8\x82\x86\xbc\xa7\xeb\xde\x8c\xc9\x75\x93\xf0\x35\x3e\x77\x16\x09\x9b\x26\xcf\x74\x6e\x9a\x65\x0b\xfa\x89\x5e\xe9\x14\xd2\x6b\x22\x1e\x47\xfa\xdc\xfe\x0e\xe4\xc3\xe8\x62\x03\xb2\x8e\x36\xdb\x7f\x2a\xc1\xae\xf9\x51\xcb\xaf\xba\x65\xee\x3a\x73\xde\x84\xcd\xa3\x20\xbc\xbe\x9a\x15\x15\xcc\xfd\x3c\x89\x7e\xfc\xe5\xf7\xb7\xbf\x6e\xe4\xdb\x4a\x8b\x07\x9b\x9d\x5c\x0f\x79\x6a\x6d\xff\x2c\x44\xe7\x65\x0b\x6b\x84\x21\x63\x9d\x52\xd1\x8d\x1c\x49\x94\x83\x03\x26\xc2\xbd\x54\x3f\x36\xba\xc7\x1b\xb4\x41\x7d\xcd\x9a\x74\x42\xae\x10\x33\x75\x50\x2e\x53\x51\x18\x7b\x08\xbe\x3e\x2e\xd8\xeb\x4a\x86\x7c\xf0\x75\x41\x8b\xb3\x09\x9a\x20\x08\x06\x3e\x59\xcc\x4e\x1a\xc2\x01\x34\x1d\x1f\x37\xf9\x79\xca\xce\xf2\x47\x75\x26\x7d\xa3\x84\x5d\xf6\x58\x3d\x89\x22\xe7\x83\x52\x2f\x2a\x4c\xec\x26\xbb\x66\x6d\xb4\x44\x67\x71\x2f\xda\xbc\xa7\xfb\x56\x26\xd4\xbc\x65\xd2\xce\xe1\xe6\x4a\x2f\x99\xc1\xb2\x69\x88\xf4\xb5\xbc\x4e\xd5\xbf\xd7\xe8\x5c\x5c\x9b\xd6\x26\xbd\xee\x49\xdd\x18\x9a\x52\xb2\xe9\xd5\x19\xf2\x5a\x58\xe3\xe6\xcb\xbe\xb2\x5d\x19\x5d\xc1\x46\x83\x3f\x10\xd5\xbc\x1d\xf1\x47\xb3\xcd\xe7\x29\x9e\x2f\x1d\xd5\xc4\xd6\xd4\x52\xd8\x5d\x35\x36\xd4\x26\x33\x9a\xe4\xfa\xd5\x36\x54\xf6\xb3\x18\x5f\xb5\x9f\xa1\x0b\xdb\xe5\x22\xb9\x15\x86\xcb\xf6\xd6\x49\x26\x93\x56\x92\xf7\x63\x52\x4b\x5c\xf3\x46\xb8\x26\x6b\xa4\x63\x13\x1e\x57\x7e\x7c\x1f\x64\x36\xc8\x32\x54\x42\xf1\xe9\x7a\x27\xf5\x95\x5a\x8f\xf7\x85\x49\x34\xdb\xea\x62\x0b\x3b\x1f\x93\x1a\xdb\x70\x9b\x91\x65\x56\xd9\x96\x23\x3b\x28\x8e\xcc\xe0\xc8\xa8\xdf\x22\x57\x67\xc0\xdd\xfc\x3e\x4f\x01\x1d\x6c\x78\xa7\x2e\x00\xc9\x18\xac\x26\xa1\xa7\x29\xb8\x4c\x17\xbd\xd9\xae\x6e\x2d\x79\x33\xd1\x70\x13\x79\x9b\x47\x30\x6e\x5b\xe0\xc6\x3f\xd0\x68\x32\x9e\xee\x99\x05\x6e\x59\xf8\x10\xb8\xa2\x48\x48\xfa\x01\x05\x2e\x48\x3d\x8c\x62\x1a\xe9\x7f\xd3\x48\x80\x34\x3c\x46\x17\xcd\x51\xcc\xbe\x38\x45\xcb\x39\x41\x49\xf2\x34\x0a\xfd\xd3\x66\x89\xfd\x10\xb8\x11\xa2\x8a\xad\x8b\x21\xf4\x4f\x38\x0a\xe3\x07\x71\x9c\xd4\x40\xb3\x0b\x36\x69\xe4\xf5\xf9\x5e\x85\x95\x17\x9e\x44\xa8\x7f\x8a\x96\x7d\x51\x26\xc7\x2d\x58\xce\x5d\x29\x94\x8a\x3a\x43\xec\x0b\x26\x7a\xf6\xf2\xef\x65\xdd\xc6\x13\x3a\xe5\xbb\xce\x2b\x7a\x95\xf3\xfd\xcd\x60\x0c\x27\x7c\x48\xa5\x9e\x5f\xa5\x3f\x89\x17\x3c\xe2\x0e\xda\x9c\x8c\x98\x7f\x97\xbc\xcc\xb2\x6f\x52\x47\x76\xc3\x20\x32\xe2\xe5\x06\xf0\x94\x7f\x2d\x5e\x5e\xe8\xb9\xdc\xa5\x44\x62\xca\x2c\xe5\x62\x94\x62\xad\xbe\x5f\x8a\x10\x88\x8a\x85\x68\xa5\x90\x45\x61\xd2\x4e\x21\xeb\x54\x1d\x6b\x52\xc6\xd8\x85\xbb\x7f\x00\xf6\x1f\xd4\x43\xfa\x88\x47\x5a\xc6\x66\xb7\x89\xb1\x37\xe9\x19\xea\x3e\x65\x92\x95\xd0\x96\x2a\xe2\x4f\x64\xb0\xdd\x98\x47\x2d\xf5\xe3\x05\xbb\x3f\xaa\xf7\x5d\x31\xfa\x8e\xb1\x08\x8a\x29\x34\x30\xaa\xca\xd8\x92\x72\x08\xcf\x98\x87\x2a\x51\x8c\xa3\x13\x48\xfa\x14\x4f\x26\x1c\xa0\xa4\x14\xd1\x76\xbd\x21\xef\xf5\x81\x67\x06\x67\x50\xc1\xbb\x70\x6c\x0a\x50\x4a\x9f\x49\xf9\x7c\xfa\x45\xb7\x33\x95\xd4\x6c\xa1\x41\x4d\x68\xcd\x7d\xb3\x67\xa5\x4a\xc9\x71\xc9\xac\x72\xf6\xfa\x92\x16\x85\x63\x55\x57\xd9\xfd\x2e\xbd\x42\xd8\xf7\x0a\x55\xc2\x00\x3c\x26\x5b\x54\x23\x7c\xf1\xef\x67\x8b\x6c\x02\xaa\x45\xee\xc6\x4a\x43\xb6\x64\x08\xdf\x40\x7e\x91\x49\x60\xda\xa5\x96\x7d\xa7\x18\x8c\xfd\xdb\xf5\x8b\xd0\xea\xfd\x45\x1f\x60\x9d\x40\xb6\xf9\xd6\xb0\x12\xc6\x94\x8e\xc7\x57\x82\x73\x4a\x1e\x05\x2e\xfb\x0a\xc2\x64\xce\x8b\xa8\xb1\x83\xfb\x1d\x45\x44\xf3\x3c\x67\x85\xab\x5d\x71\x8d\x57\xc5\xcc\x16\x48\xce\x25\x85\x5c\x70\x56\x81\xc3\x83\x2a\x89\xa0\xba\xab\x1a\x11\x21\x8f\x42\xa7\x6d\x98\x26\xfb\x5c\x53\xf2\x2b\xb2\x14\x73\x85\x0b\x7f\x11\x41\xd2\xf7\x71\xc4\x46\xae\x07\x7d\xe4\xbd\xf9\x09\x26\x54\x4e\x99\xcb\xaa\x30\xf1\xdd\x4c\xe7\x6a\xc6\xb4\x6b\xa1\x2e\xda\x5a\xb9\xb4\x9b\x92\x4e\xdb\x87\xdc\x1b\x9b\xa9\x70\x6c\x53\x33\x2b\xe3\x88\xd5\x0c\x09\x3e\x6f\x37\xbd\xa0\x51\x15\xae\x65\x19\x66\x6e\xa1\x8c\xcd\xdc\x68\x20\x03\x47\x73\xb6\xce\xfd\xf4\xc7\xa2\x6d\xaf\x9a\xaa\xf5\xf4\x36\xcd\xa3\xc4\x06\xd2\xc3\x79\xa8\xce\x17\x23\xbc\x26\xbb\x5a\x1b\xd5\x0a\xaf\x17\x59\x72\x25\xe1\x23\xff\xa2\xf2\x14\xd7\x31\x61\x3a\x0d\xd9\x05\xeb\xbc\x33\x6f\xf6\xac\x23\x78\x77\x3b\xd5\x4a\x5c\x29\xf4\x37\xc7\x73\x7c\x86\x48\x7f\x86\xe2\x45\xda\x23\xfa\x3c\x87\x71\x20\x39\x6d\x9a\x6f\xe0\x7e\x77\x8a\x96\x27\x18\x92\xe0\x89\xf0\xdf\x31\x9e\xbc\x38\x61\x2d\xb3\xab\xc7\xb0\x33\x1e\xa5\x56\x8b\xaf\xf5\xfc\x06\x46\x64\x45\xcc\x7a\x44\x4e\xf6\xe9\x1b\x73\x27\xbc\x7d\x41\x67\x11\x05\xda\x5c\x69\x57\x2b\xfa\xcd\xed\xec\x5a\x36\x22\x93\x82\x79\xb1\xb5\x94\xbd\xc2\x04\x19\x5e\x64\xb5\xfa\x96\x63\xe2\xab\x68\x3d\xa0\xaa\x04\x45\x99\x49\x14\x0b\x67\xaf\x5d\x5a\x0e\x34\xf5\xc0\x86\x23\x2c\x9a\x2a\x17\xe2\x44\x99\x02\xfa\xfb\x6e\x37\xf7\xde\x1e\x70\x9f\x07\x22\x34\xb9\x2e\xb9\xa7\x1c\x57\x58\x7d\x8d\x09\xc3\xbc\xf4\x7d\x0b\xd8\x67\xf7\x3d\x2f\x12\x99\x7f\xbf\xed\x8d\xd6\x25\x9d\xcb\x79\x73\x5c\x1d\xca\xeb\xe7\x6c\x22\xdf\x0a\xdb\xb2\x3c\x0c\xf9\x5c\xa0\x36\xcb\xc3\x93\x47\xb8\x45\x46\x2a\xfb\xfb\x12\x95\x56\x05\x76\x53\x3c\x17\x91\x08\x4d\x4b\xd0\x94\xb9\x26\x36\x6f\x13\x1d\x2a\x7b\x51\x8a\x53\xce\xcf\x00\x23\x44\xa8\xa3\x8a\xb3\x58\x74\xde\x90\xd3\x50\xd5\x28\x53\xaf\x85\x3c\xd4\xa6\xa5\xe3\x28\xbb\xb2\x58\xac\xc6\xd7\xd4\x13\x39\x37\x1c\x5b\xb3\xbc\xfa\x57\xe9\x7c\x49\xd2\x65\x2e\xfa\x60\x9c\x0f\xec\xef\xf3\x30\x8a\xd8\xf8\x79\x23\xbc\xa0\x83\x0e\x66\x61\xff\xd4\x37\xc0\x5d\xd8\xe6\x11\xe6\x5a\x55\x25\xaa\x33\x8e\x47\x44\xa0\xbe\x25\xe5\x0a\x26\x7f\xad\xd3\x8a\x63\xe5\x0b\x03\x67\x1d\xd3\xdb\xdf\xcb\x1d\xe2\xcc\x67\x64\x4c\xed\xcb\xfc\x06\x72\xc4\x2f\xd5\xd9\xb7\xde\x31\x2d\x76\x56\xc1\x4f\x6f\x4d\xa0\x8d\x2f\x30\x4b\x8f\xc7\x3a\x93\xb3\x79\xca\xee\x96\x6b\xc3\x8a\xd6\x13\x58\xb7\xc9\x54\x72\x41\x74\x9d\x73\x94\x46\xef\x9a\x73\xc7\x4a\x2a\xff\x29\x56\xb2\x48\xca\xb2\x66\xf1\x1d\xdb\xe0\x23\x06\x27\xfe\x1d\xa7\xe8\x8e\x53\xc8\x50\x82\x56\x6c\xc2\xea\xbc\xb5\xa1\xf3\xb5\xf3\x88\xfc\x7d\xf4\x0f\x60\x10\x65\xeb\x42\x9e\x7e\x1b\xb0\x84\xda\xe0\x05\xd3\x35\x7f\x60\xda\xb7\x2d\xc2\x8b\x12\x14\x07\x4f\x55\x88\x91\xda\xb8\x5a\x2a\xde\x42\xd4\xa0\x68\xdc\xa3\x0d\x1a\x9e\x96\x98\xa9\x6b\x79\x55\x39\x99\x1d\xb2\xe0\x35\xaf\x8b\x35\xcf\x42\x31\x4d\xa0\x73\xf6\xdc\x94\x1b\x59\x18\xff\x1d\x87\x2e\xfc\x53\x1c\x5a\xd0\xf1\x46\x32\x69\x3d\x4b\xf8\x8e\x47\x37\xf1\xe8\xa2\xd3\x56\x0b\x37\x6b\xcb\xbe\xb3\x3c\xe5\x56\x1c\xdc\xf6\x48\xb6\x59\x88\x6b\x67\xe2\xa5\x8b\xeb\x1f\xc0\xc7\x0d\x18\x3a\xaa\x69\xf1\xe1\x6f\xd9\x26\xd9\xdf\xaf\x0c\xec\xb4\x74\x22\x14\x1f\xfb\x1a\x7c\x03\x1e\x59\x85\x01\x1e\x82\x87\xa5\xe7\xca\x4f\x95\x43\x0a\x2d\xcc\xd6\x1c\xa5\xc4\xda\x0d\x5a\xc6\xa8\x6c\x09\x9c\x5c\xe8\xaf\x63\xf7\x66\x19\xc4\xf2\x8a\xc2\x27\xf4\x7f\xaf\x05\x3e\xa6\x33\xc6\x8b\x38\xd8\xc0\xaa\x50\xc0\xdb\xbc\x41\xce\xad\x66\xa0\xce\xc2\x3a\x98\xb8\xe1\x75\x2d\xc3\x39\xcf\x35\xe3\x8b\xe1\xcc\x20\xf5\xa7\x69\xa2\x9e\x88\x1c\x00\x0e\x26\x9c\xe3\xce\xe0\x92\xc3\x86\x6a\xd0\xcd\x1a\x22\x34\x12\xbd\x2d\x25\x10\xb7\x68\xcb\xba\x1a\x63\xd2\x36\xfd\x4d\xff\x27\x52\xe1\x02\x1c\xff\xf1\x15\x1b\x11\x9a\xc9\xaa\xb0\x30\x5e\xca\x37\x22\x6a\x35\x44\xf5\x70\x65\xca\x5c\xb7\x1b\xc5\xe2\x21\x8b\xf0\xe3\x86\x80\x98\x8d\x90\x28\x73\x3f\x1e\x54\x25\x08\xee\x9b\x4a\xf3\xad\x15\x68\x2c\xa1\x4e\xd7\x8f\x34\x56\x48\x03\x37\x03\xbf\xf2\x9b\xe0\xcf\xff\xec\xed\x8d\x0f\xd7\xc9\xf1\x8b\x70\xa2\xe7\xfa\xb5\x02\xb0\x74\x95\x33\x3c\x0a\xfd\xa5\xa2\x84\xb8\x80\xc4\x1f\x7a\xa5\x4b\xa5\x41\xf1\x48\x20\xfe\x73\xae\x36\xa5\xfa\x4b\xa5\x72\xd4\x04\xd4\xe5\xe3\xe0\x6a\x9d\xcd\x92\x4c\x6e\x9b\x82\x90\x1d\xe5\x3c\xc9\xe1\x71\x45\xa0\x2f\x63\x6c\x65\x24\x2e\x9c\x0b\x71\x56\x0b\x40\x72\x9f\xcc\xe7\x51\x88\x02\x76\x47\xb0\x1b\x6c\xcc\xc1\x60\xf9\xfd\xc7\x03\x4b\x87\x6e\x46\x9e\xc4\x6d\x15\xcb\xd6\xa0\xae\xb9\x77\x78\x63\x9b\xe3\x8d\xad\xeb\x96\x68\x4d\xbf\x3b\x20\xb2\xd6\x40\x64\x1d\x25\x2d\x76\x08\x21\x26\xb0\x37\x6f\x64\x1a\x5e\x37\x19\x60\x0f\x6b\xf0\xc3\x36\xc2\x0b\x2b\xeb\x52\xd6\x44\x6a\xca\xd0\xbb\x5a\x21\x57\x0e\x70\x86\x03\x18\x15\xf7\x0f\x8e\x05\x17\x4e\x51\xa5\xea\x92\xd7\x5a\xc5\x63\x59\x92\xa6\x8d\xba\x56\xda\x45\x65\xc5\x4d\x42\xcb\x86\x71\x73\xc6\x5f\xab\x48\x2e\xcb\xd9\xd8\xab\x3c\x85\x99\xd8\x1b\x02\x3f\x64\xa7\xd8\x09\x13\x47\x16\x1b\x8f\xf8\x9c\x17\x09\x1a\x38\x2f\x44\xad\x19\x7f\x8a\x31\x4f\x44\x35\x1c\x7f\xe0\x84\x54\xc4\x7f\x9c\x20\x87\xa0\x19\x3e\x43\x81\x33\x26\x78\x56\xe0\xff\x6e\x6d\x60\xa7\x79\x77\xea\x99\x23\xf9\x34\xfe\x3d\xe0\x0e\xd7\xb4\xcb\xd4\x89\x34\x6a\x08\xdf\x49\xdc\x5e\x25\xe7\x29\xf9\x26\x85\xf1\x35\x03\xe5\x6d\xb6\x10\xe2\xbc\x38\x3e\x8c\x99\xc2\x75\x82\x9c\x45\x1c\xe0\x18\x0d\x44\x6e\x91\x75\xd6\xac\x0d\x0d\xba\xdf\xad\xad\xa2\x4f\x0b\x74\xba\xbe\x14\xde\xdf\x51\x02\x9c\x96\x2e\x8c\xab\x4b\xe3\x2d\x3a\xbb\xec\x6c\x9d\xf6\xf9\xde\x6b\xe8\xb3\xb6\xc1\xd2\xd7\x84\x42\x69\x6b\x55\xb8\x09\xf8\x94\x5d\x60\xf6\xe4\xf5\xf1\x6e\x34\xfb\x1b\x85\xd1\xb7\xfc\xcf\xec\x24\x7a\xb7\x7c\x5a\xa1\xe2\x4b\xd8\xf1\xdb\x03\xd5\x27\x6c\x06\x57\x8b\xd3\x27\xde\xf1\x85\x82\xf4\x15\x09\x78\x15\x08\x7d\xd7\x40\xc0\xed\xc1\xf3\x49\x02\x5e\x25\x36\x5f\x7b\xfa\xb5\x00\x46\x03\x7a\xba\x3d\xa3\x86\xaa\x46\xc0\xff\x9b\x70\x64\x01\x92\x50\x71\x3b\x55\x1b\x73\x32\xda\x8a\x8c\xf4\x00\x51\x18\x46\x8d\xc6\x1f\xc5\xe3\xf3\x6e\xfc\x6f\xb5\xc2\x22\x69\xd6\x7b\x2f\x6f\xc1\x10\xaf\xc9\x96\xae\xec\xd9\xcc\xff\xee\x0e\x9d\x72\xb2\x7d\x61\xac\x5a\xf6\xbc\x0d\x36\x53\xbd\x75\xf9\x6a\xf8\x52\x67\xa0\x72\x59\x97\x32\xbd\x7f\xab\x7c\xe9\xd1\xa3\x05\x9c\xbf\x39\xff\x68\x87\x1d\x9b\x93\xed\xf5\x08\x00\x46\x1d\x1f\xc9\x03\xd3\xcf\xe5\xc1\x29\x3c\x33\x83\x02\xb4\x07\x34\x4c\x07\x4d\xa8\x10\x6a\xc1\x24\xc2\x27\x30\xd2\x3a\x93\x68\x50\x61\xe2\x9c\x2c\xc2\x88\x3a\x61\x4c\xb1\xac\x34\xf7\xc7\x57\x89\xba\x10\x92\x65\x42\xd1\x6c\xc0\x2b\x90\xfa\x30\x76\xe0\x7c\x1e\x2d\x85\xe2\xc6\x2b\x9a\xc0\x48\x3d\x49\xb1\x34\xce\xf2\xea\x72\xe3\x45\x14\xa9\x32\xa2\x62\x00\xf3\x54\x41\xe4\x25\xee\x82\x90\x83\x61\x38\x98\x48\x75\x8f\xfd\x05\x9c\x93\x05\xe5\xef\x39\x41\x4e\x38\x89\x31\x41\x81\x73\x22\x5c\x47\xfc\xcd\xec\x32\x09\xb9\x05\x09\xc6\x12\xcf\x2a\x19\x38\x2f\x11\x24\xb1\x33\xc3\x04\x31\x95\x93\xdd\x35\xee\x95\x14\x72\xe1\x84\x0a\xe3\x7e\x86\xac\x7c\x5c\x5d\xa0\xa5\xb1\xfe\x99\x5c\xb3\xaa\x82\x70\x83\xb2\x94\x58\x13\xc3\xc4\xf7\x75\xc8\xed\x71\x9c\xae\xc5\x28\x15\xd5\xbc\x2a\x24\x46\xfd\x5e\xaa\xba\x65\x4e\xab\x55\x8f\x07\x95\x2a\xb8\x01\x1f\xce\xdc\x45\xe9\x8d\xbf\xc2\x28\x0c\x9c\x67\x90\x42\x1f\xc5\xfc\x3a\x6a\xf1\xfa\x47\xc0\xfd\x13\x87\xbc\xc2\x33\x70\xe4\x55\x2b\x76\xde\x6e\xa0\xf5\x98\x33\x1e\x17\xb3\xb4\xdb\x0e\xf8\x19\x4a\x7c\x12\xce\xab\x0b\xfa\x35\x52\x2a\xd7\x83\xf9\xfd\xf5\x3a\xc3\x35\x3a\x57\x3a\xe3\x01\xec\xc2\xee\xe4\xea\xbf\x09\xc0\xa2\x27\xbf\x27\x6f\xdf\xfe\xfe\x7f\x53\xb3\x46\x92\xc7\x1f\x02\xf9\x8a\x49\x35\x8a\x0a\xdf\x22\xc9\x13\xad\x6e\x76\xb3\xe0\xd2\xca\x67\xe5\x66\xc7\x66\x0e\x27\xa8\x4f\x43\x2a\x30\x14\x5e\xa3\x73\x69\x99\xe3\x8a\xb6\xfb\x29\x40\x73\x82\x54\x08\xad\xbb\x4b\x67\xf3\xdd\x13\x82\x7d\x1f\x47\x61\xff\x60\xff\xf0\xeb\x83\x8f\x8b\x87\xf0\x87\xbf\xfe\xfa\xe9\xd5\xdf\xbb\x78\x41\xfb\x87\xdf\x1e\xf4\x7d\x1c\x61\xd6\x24\xf8\xa4\x88\xf5\x69\x4e\x30\xe3\x09\x98\xec\x5a\x2f\x2d\xdf\x23\xc7\x1b\xe2\x4c\x56\x4e\xf4\x79\x10\xd2\x5b\x38\x53\xeb\xc9\x57\x4e\x5c\xe4\x5f\x33\x8e\x4f\x09\x8e\x92\x5b\x35\x79\x60\x87\xe9\x24\x8a\x28\xaa\xb3\x03\xdc\xef\x64\x61\xdd\xd4\xb7\x90\x89\xe5\x52\x3a\x31\xb8\x17\xf3\xc7\x0f\xb8\xe2\xb6\x71\xf9\x35\x6b\x82\xf5\xd0\x50\xa3\xd4\x17\x4f\x72\x85\xef\xc5\x77\xcf\xd5\x50\xb6\x89\xf5\x9b\x2e\x80\x09\x67\xea\x01\x38\x6c\xc2\xc0\x53\x8f\xb5\x06\xe7\xcb\xfc\xb3\xed\x06\xac\xb9\x81\x5b\xe0\xf3\xd9\x1a\x9f\xf5\xd2\xdd\x6d\x47\x96\x6f\x7c\x15\xc3\xbb\xb1\x80\xc9\xe5\x4a\x23\x39\xe4\xe4\xb7\xd9\xaf\x5f\x02\x76\xf2\x55\xb2\x63\x47\x62\x21\x0b\x7e\x64\xcb\xe4\x4c\x06\xa1\x4c\xec\x65\x22\x07\x1e\x57\x48\xbc\x69\xb8\xd2\x7a\x60\x2b\xbf\x86\xad\x07\x9b\x6b\xaf\x31\x5f\x7b\x3e\xb7\x86\xbf\xa1\xc0\xeb\xb6\x88\x32\xdd\x08\x84\x55\x72\xbc\x5f\xdb\x82\x56\x32\x07\xc5\x64\x37\x11\xbd\x4c\xfd\x96\x80\x56\xeb\x17\xa5\x7d\x54\xe5\xc6\x91\x91\x65\x01\x65\x53\x5d\xe5\x46\x80\xb2\x9e\x47\x6f\x7e\x79\xfe\x9c\x5d\x78\x46\x65\x05\x13\x26\xe0\xb0\xff\x70\xa9\x49\x83\x64\x6d\xc6\x51\x6d\x7d\x53\xd6\x0b\xa9\x3a\xef\xd8\x9a\x74\x9a\xc5\xc7\x6e\xa2\x85\xdc\x0a\x41\xbc\xed\x54\x8b\x8c\xb2\x35\xe0\x6d\x06\x2d\xe7\x3e\x71\x28\x76\xfe\xeb\x9a\x31\x64\xf9\x73\x01\xe2\x0f\xfe\x97\x67\x16\xb8\xf5\xc8\xb0\x6c\xfb\x36\xe0\xc2\xe6\x8c\x27\x9b\x69\x13\x4a\x7f\x30\xa3\xc7\x6e\xaa\x07\x74\xaa\x05\xb4\xd0\x01\x0e\xc1\xc3\xfa\x48\xe1\x62\x3a\x4f\x47\x52\x59\x9d\x44\x56\xc5\xd0\x4d\x2c\x7b\x73\xdc\xca\x18\x9e\xd9\xb2\xea\x96\x57\x5e\x79\x21\x44\x61\xc5\xfd\x6b\xc5\xe5\xb4\xd3\xc3\x6a\xb4\xb0\x7d\xeb\x50\xf2\xae\x55\xb0\x26\x05\xac\xeb\x91\xd9\x45\x26\x59\x39\x1e\x6a\x54\xa8\x3b\x44\x5f\x35\x2e\x7b\x44\x5f\x1f\xc7\x01\x24\xcb\x9b\x05\xef\x2b\xc5\xa8\xd4\x83\x5b\x40\xf9\xdd\x5f\x0b\xe5\x37\x63\x6a\x75\x83\x50\xef\x1a\x08\x44\xda\x9b\x06\xf5\x6b\x10\x15\x52\xa8\x59\x69\x95\x9b\xb1\x11\x50\x9e\x1a\x21\x39\xab\x81\x92\x0a\x71\xd7\x8c\xdc\xdb\x66\xab\x6d\x8c\x38\xac\x8f\x51\x0f\x4c\xde\x26\xd0\xaf\x94\xf7\xa4\x3a\x68\x8e\x4f\xc5\x71\x16\x13\xa9\x07\xd3\x55\x6d\x47\x71\x10\xe2\xc0\x14\xac\x52\x8c\x65\xbd\x4b\xeb\x2d\x9b\xd9\xb6\x95\xd6\xab\xb8\x4b\x97\xa9\xbd\x4a\x35\xbb\x4b\xef\x5d\x7f\x39\x3a\x4b\xf1\x4d\x7b\xbc\xd6\x34\x5f\xf5\x56\xab\x61\x66\x43\xbc\xb6\x54\xdf\xee\x43\xce\xcb\xe6\xf2\x5c\x10\x06\xf6\x93\x7e\x14\x8a\xf8\x8f\xb5\x70\xbb\xad\x43\x53\x7c\x3c\x9b\xc1\x38\xe0\xc1\x29\xbb\x92\xfd\xa4\xc2\x62\x6d\xd8\x49\x45\xb8\x8a\x8a\x65\xd0\xa3\x51\x1c\x1c\x3b\xf3\x82\xf5\xde\x4c\x93\x5a\x10\xf0\x0a\x6a\x45\x08\x92\xf8\x2a\xc8\xf5\xf2\xf9\x93\x77\xaf\x4b\xf4\x62\xdc\x70\x37\x41\xfe\x82\x84\x74\xd9\x8f\x11\x3d\xc7\xe4\x34\x8c\x27\xbb\xdc\x52\x1a\xc6\x93\x3e\xf4\x23\x43\x68\xcf\x06\xc4\x7c\x87\x60\xc0\x8f\x27\x0f\x24\x6a\x4f\xc1\x9b\x91\xcf\x5e\x93\x93\x6e\x23\x34\xb6\xfc\xb1\xbb\xb4\x76\x83\x51\x6b\x4d\xeb\x2d\x2f\xea\x7f\x33\x92\xdb\x7f\xfa\xfa\xfd\x8f\xf1\x9f\x7f\x46\x5b\x4a\x6e\x67\x94\x30\xa7\xb6\xcb\x90\x96\xef\x02\x5f\x4b\x74\x37\x25\xb8\xab\xcc\x77\xf6\x39\xf0\xdd\x42\xda\x7b\x4e\x57\x29\x30\x62\x18\x07\x36\x59\xac\xa0\x2d\xd7\x6e\x34\x4d\x1b\x25\xb7\xdf\x38\x63\x0c\x13\x11\x0c\xc9\x08\xe3\x2c\x12\x14\x3c\x2e\x6b\xe1\xb5\x59\x5c\xbf\xa1\x3f\xbe\x22\xc8\xc1\x71\xb4\x74\x78\x40\x24\xc5\x4e\x32\xc5\xe7\x4e\x18\x8b\x02\x49\xec\x1e\x1e\x63\x22\xd8\x3c\x09\x67\x90\x2c\x9d\x2c\x94\xcd\x81\xb1\xb8\x62\x64\xd6\x9d\xf6\x93\x8c\xbb\x64\x92\x7f\xca\x98\x79\xcf\xe8\x0c\x91\xa5\xe3\xc3\x04\x49\x01\x24\x9b\x41\x98\xf0\x38\xcb\x50\x84\x7f\x9b\x2c\x6a\xad\x22\xcd\x64\xb6\xdd\x5d\xb2\xfe\x5d\xb2\xfe\x5d\xb2\xfe\x17\x91\xac\xff\x0e\x47\xe8\x2e\x55\xff\x2e\x55\xff\x8b\x4c\xd5\x7f\xc7\x59\xe0\x17\x9e\xa8\xff\x4e\xf2\xf9\x96\x69\xfa\xac\xd9\x5d\x92\x7e\x57\x8b\x70\x97\xa4\x7f\x97\xa4\xdf\x71\x92\xfe\x5d\x9a\x7e\x2b\xcb\xc8\x0d\x48\xd3\xd7\xcc\x0a\x15\xd6\x89\x7b\x2d\xac\x13\x37\x2a\x41\xff\xe1\xcb\x9f\xdf\x8f\x5f\xfd\xf7\xfc\x4b\x49\xd0\xe7\xca\xf1\x95\xa6\xe7\xb3\x37\x7c\xa1\xc9\xf9\x79\xe2\x5d\x45\x6a\xfe\x95\x13\x6f\x7b\x89\xf9\x9c\x78\x57\x99\x96\xdf\x96\x76\x77\x49\xf9\x5f\x56\x52\xbe\x89\x7d\x6c\x6e\x2c\xbf\x09\x39\x99\xef\x1f\xe2\x1f\xff\x7a\x7f\x53\x72\x32\x65\xff\x5a\xf5\xc7\xda\xc0\xc0\xca\x5c\x45\xa6\x88\xb9\x5b\x88\x11\xce\xd6\xb5\x83\x84\xcc\xca\x29\xbe\x46\xe7\xb7\x6b\x86\x5f\x44\xfc\xf7\x7a\x33\xef\x3e\x0b\x93\x33\xbb\x7f\x58\x0e\xa6\xa0\xfd\x5d\x02\xe6\x5d\x02\xe6\xfa\x09\x98\x7c\x0f\x99\xb3\x2f\xdf\xc9\x9f\xee\x52\x2f\x6d\xec\xdd\x8a\xfd\xac\x69\x30\x49\x19\xf4\xa6\xcc\x22\xfb\x77\x8b\x52\x17\xeb\xee\xb7\x52\xae\xdf\x5a\x06\x9a\xcd\x83\x42\x0a\x9c\x6e\x23\x19\xf7\x46\xe4\xf2\x4d\x7f\xd8\xf3\xe7\xff\xf7\x11\xdf\xfc\x5c\xbe\xf4\x26\xda\x8e\x74\xf3\xe5\x67\xf1\xad\x37\xcf\x1b\x90\xc2\x57\x78\x50\x64\xb3\xbc\x60\xf3\x90\xfd\xbe\x46\xe7\x28\xe1\xbe\x68\x1c\x05\x28\x13\xfa\x6a\x1a\xca\x17\xbd\xe1\xcf\xb3\x96\x31\xef\xe3\x66\x65\x0d\x72\x79\xf7\x16\xe6\x0c\x56\xc9\xac\x77\x09\x83\x77\x09\x83\x0d\x5a\xc3\x5d\xc2\xa0\x61\xe3\xb6\x4e\x17\xe4\x07\xf0\x2e\x57\xf0\x2e\x57\xf0\x2e\x57\x50\xcf\x15\x14\x75\x81\x6f\x72\xa6\x60\x36\xc2\x1b\x96\x27\xc8\x23\xbb\xef\xb2\x04\xff\xc9\x59\x82\x9c\xa9\x74\x99\x22\xc8\x35\xbe\x1b\x94\xea\x75\x5b\xf2\x03\xc5\x42\x74\x96\x1c\x28\xba\xbb\xd6\xcc\x40\xfe\x4a\xab\x01\xca\xc1\xdd\xe5\x04\x76\x9c\x13\xc8\x19\xcd\x95\x64\x04\x12\xdd\xa2\x7c\x0b\xd2\x01\x39\xa5\x9e\xbc\x7d\x51\xa0\x96\x22\x52\xc2\xb1\xbd\xef\xf2\xfd\x6e\x7d\xbe\x5f\xd1\xfc\xb5\xa6\x6d\x57\x80\x60\xef\xf6\xc7\x21\x8a\x82\x04\xd1\xa4\x1f\xa1\x09\xe4\xe8\x0e\x5b\x35\xf4\x7e\xdc\xff\x69\x7c\x08\x0f\x88\xd9\xd0\x6b\x36\xe2\xe6\x23\x61\xd4\x8c\x6a\x3c\x52\x6e\x55\xd9\x7d\x79\x4a\xf9\x19\x13\x8a\x25\x45\x9f\x69\x65\x82\x8f\x0a\xf4\x49\xf3\x9b\x9c\x29\x4c\xfa\x2a\xb6\x22\x13\x05\x6b\x7d\x62\xc9\x1c\xc6\x76\x70\xf4\x85\xab\x3d\x8c\xe7\x0b\x5a\xd6\x04\xf9\xf5\x2e\xec\x71\x78\x8c\xfd\x45\x92\xd9\xfd\xcc\x38\xec\xae\x6c\xa1\x35\x28\x07\x83\x97\xa3\x44\x95\x74\x20\x6d\xaf\x96\x89\x68\x45\x64\x7f\xa1\x29\xb8\x04\x06\x21\x9e\x10\xbc\x98\xbb\xc5\xa5\xa8\xa5\xfc\x07\x15\xba\x66\xa0\xbc\x41\x9c\x41\x90\x69\xc8\x05\xcb\xae\x86\x21\xc9\x5e\x1b\xb6\x44\x07\xad\xd9\x52\xf5\x41\xf2\x55\xeb\xaf\xe2\xb6\xe0\x3c\xa4\x30\x0a\xff\x46\x59\x34\xd6\x71\x03\x78\x7f\xc5\x2b\xe4\x4e\xd1\xc8\x2e\x97\x5c\x90\x4f\x10\x5c\x6e\x20\xc9\x5f\xd2\x48\x73\xb5\x1c\x53\xe4\x9f\x1a\x72\x05\xcb\xc9\x7e\x6a\x49\x4a\x43\x4e\xfb\xd0\x12\xe0\xf6\x81\x9b\x5a\x22\x2a\x75\x2d\x37\x35\x55\xa4\xed\xf6\xb2\x0c\x35\xb6\x73\x5c\x2d\xec\xad\x3a\xa7\xaa\x2e\x35\x6e\xbf\x14\x17\x6d\xd3\xaa\xb2\x51\xf9\x76\x29\x5a\xac\xf8\xc5\xb2\xce\xdd\xf0\x6e\xc1\x44\xc9\x6e\x64\xa9\x62\xe9\x0f\xb2\x60\x2a\xff\x1c\xf9\xba\xc5\x3c\x27\x31\x4c\x51\x34\x77\xd6\x12\x1b\x7a\x3f\x3d\x7d\xe9\xfc\xc0\x93\x7d\xbd\x6a\x4f\xbd\xa3\xab\xec\x01\xea\xa3\x20\x14\x56\x8f\x82\xe3\x41\xdd\x72\xc9\x32\xa6\xf0\x33\xfb\xa4\x99\xc2\x4e\xd1\x52\x5c\x24\x0d\xb7\x07\x27\xa5\x08\xb5\xd1\x6f\x0e\xf5\x03\x70\xa7\x7e\x3e\xb7\x51\x6b\xd2\xb4\x59\xd3\x47\x2b\x4c\x02\x75\x57\xea\xba\x59\xbe\x57\xb5\xe5\x5e\x3c\x5b\x8b\x19\x15\xf9\x8e\x08\x0a\x34\x27\x1a\xc9\xb7\xa3\x52\x5e\xfe\x6f\xe8\x8f\xaf\xa2\xc8\x99\xb0\xfd\x06\x29\x72\xa0\xf3\xf1\xe3\x8b\x67\x4e\x38\x16\x09\x5b\x9c\xdb\x3b\x61\xe2\x44\x68\x4c\x1d\x6e\xf2\x18\x98\x07\xdb\xfa\x2c\xe7\x1b\x74\x14\x87\x5a\x25\x77\x75\x2a\xcb\x6d\x5b\x88\x3b\xf8\xfd\x90\xbe\x9f\x3c\x30\x17\x2e\x34\x02\x32\x54\xcb\x6c\x6b\x9e\x8b\x0a\x71\x23\x7f\x1e\xf0\x64\x52\xae\x21\x64\xc9\xcb\x9b\x58\xeb\x4b\xec\xc3\xc8\xad\xe3\x9e\x6c\x2e\xf2\xa9\xab\x62\x8e\xbc\xd3\x13\xfc\xb9\x8a\x3f\xd6\xb1\x19\x94\x50\x12\xfa\x54\x1c\x33\x51\x45\x8b\x62\x07\x3a\x11\x1b\xb2\x06\xc0\x50\x82\x82\x30\x47\xe6\x54\x1c\x6f\x4e\x00\x55\x52\x6b\x82\xa8\x93\x20\xea\x84\x31\xd7\x2f\xdf\xc1\x31\x75\x12\x8a\x09\x72\xf0\x98\x7f\x23\xde\xfd\xec\x29\xc7\x83\x08\xb0\xa8\xb1\x75\x86\x08\x6f\x49\x09\x8c\x93\x59\x48\x69\x56\xf4\x47\x21\x49\x3c\x7b\x2a\x2a\x70\xcd\xa3\x90\xc7\x1c\xa8\xd2\x5a\x98\x4e\x11\x71\x9e\x3d\x2d\x5d\x19\x2d\x2f\x0b\xfb\xfb\xd7\xe1\x80\x00\x90\xa2\xbe\x70\xc6\x88\x3d\x62\xdc\x7f\xa6\x55\xd1\x44\x77\xa7\xf7\x46\xf6\xe0\x55\xd2\x9b\xbd\x11\x12\x04\x4d\x1b\xb4\x50\xcf\x49\xec\x36\x75\x8d\x5b\x6f\xb6\xab\x29\xf3\x64\xba\x12\xd8\xd0\xc3\xc0\x15\x2a\x43\x52\xa4\x5a\xa5\x51\xf9\x9d\xc9\x8e\xe3\x6a\x38\x2f\xc2\x7f\xa2\xc9\x18\x39\x6c\x17\x1d\xe8\xa3\x02\xcc\xa5\x20\x20\x88\xf7\x15\x21\x5e\x5a\xcc\x4f\xc7\xa2\xb2\x9a\x62\xb1\xf4\x44\x61\x96\x12\x1b\xb1\xe3\x79\xbe\xd5\x20\xa4\xaa\xa7\x7a\x05\x0c\xb3\x13\x4e\x79\x03\x30\x8e\x9e\xe1\x17\xd1\x0f\x0f\x7e\x32\x57\x51\x6c\xc0\x38\x6a\x8f\x6d\x54\xb2\xe7\x2b\xd0\x8d\x47\x32\x6d\x7c\x37\xd4\x4c\x40\x35\x65\xe3\x1a\x83\xe2\xb4\xd8\x03\x49\x6e\x5d\x2e\x59\xa7\xbc\x42\x53\xb7\xd9\xb8\xed\x8b\x2c\xdc\x40\xbc\x9d\x3c\xf6\x93\xdd\xa2\x14\xb1\x78\x34\x98\x9e\x8a\x27\x32\x48\x9a\x3b\x10\x9e\x3b\x10\x9e\x35\x61\xc7\x4c\x97\x07\x8c\x71\xbc\x9c\xe1\x45\x53\xd9\x49\xd5\x41\xbf\x6c\x3a\x12\xe1\x6b\x98\x70\x45\x51\x4e\x87\xf7\x5f\xfc\xcd\xfe\x4a\x2a\x58\x14\x3a\xc4\x08\xe2\xf0\x1d\x5f\x30\x48\xd0\xe1\x55\x81\x04\x55\x81\x3b\x58\x10\xa9\x09\x24\xa8\x4c\xa2\x6b\x02\x75\xa8\x9f\xf1\xf6\xa1\x1b\xd6\x72\x35\xe9\xd2\x52\x17\x52\xd7\x8d\xc2\x6e\x78\xbd\xfc\x08\x27\x7b\x07\xe1\x17\x80\xdd\xf0\x61\x8a\xa4\x82\x7e\x55\xd8\x0d\x54\xbd\xe1\xcb\xc3\x6e\x30\x10\xaf\x63\xec\x86\xeb\x21\xde\x56\xb0\x1b\x32\xe2\x5d\x11\x76\xc3\xf5\xd0\xce\x8f\x70\x7c\x03\xf6\x1d\x1f\x46\xe0\xc0\x44\xcf\xbf\xa1\x64\x11\xfb\x42\xe8\x94\x2f\x5c\x08\x20\x89\xa2\xb8\xf4\x08\x68\x9e\xd8\x4d\xb2\xd6\x0d\xeb\xc1\x46\x76\x8d\xf7\x40\xb2\x05\x0c\x12\x1e\x35\x16\xe3\x73\x67\x91\xa8\x99\xc6\xe8\xdc\x79\xf2\xf4\xa5\x98\xf1\xe6\x44\x54\x1d\x43\x9a\xf5\x7a\x45\x90\x24\x77\xc0\x25\x5f\x0c\x70\x89\x51\x78\xea\x40\x1a\xbb\x09\xd0\x25\xd3\x5f\x1f\x4c\x4e\x7e\x3f\xfb\x7a\x03\x13\x58\x31\xc3\xf3\xc6\x54\x9d\x77\xeb\xb0\x3f\xb8\xee\xe8\x6e\x21\x79\x52\x5b\xfc\xab\xc4\x37\xe1\x19\xe2\xb7\x6c\x92\x5f\x44\x72\xec\x9a\x53\xef\x1e\xe3\x44\x88\x36\xff\x30\x90\x13\x49\xfd\xa2\x9e\xfb\x10\x7c\x0d\xbe\x01\x8f\x9a\x50\x01\xd4\x63\x77\x28\x27\xff\x68\x94\x13\xaa\x60\x81\x0d\x30\x27\x79\xc8\xe0\x3b\x9c\x13\x0b\x9c\x93\x0f\x6b\x08\xef\xea\x5f\xc6\xc6\xbe\x44\xa4\x93\xc6\xf4\x8f\x4a\x9f\x61\x0b\xa0\xfe\x62\xfb\xce\xac\xfe\xd5\x74\xee\xca\xd8\xbf\x48\xa4\xa5\x3f\xd5\xd6\x2c\xac\xfd\x1d\x5b\xfa\x9b\x9d\x43\x2d\x4c\xf9\x4c\xaf\xae\xb4\xe3\x57\xa2\xc1\xdb\x19\xf0\x3b\x35\xde\xbb\xb6\x68\xe3\xae\x25\x8e\x78\x95\x7b\xe2\xca\x9d\x28\x45\xb8\xee\xa7\x62\x53\xd6\x61\xef\xdb\x8e\x69\x6d\x90\xee\x83\x16\x20\xdd\xb6\xbe\x8c\xb5\x3d\x19\x57\x1e\x93\xd0\xcd\x29\x92\x26\xc2\x6a\x2f\xd8\x42\x86\x96\xd9\x06\x8e\x59\xf8\x76\xae\x01\xcb\xaa\x74\xc3\xb7\x21\x7b\x13\xa7\x2b\x9d\x62\x3d\x20\x8e\xc9\xc8\x3e\xe2\xe5\x9f\xdc\x4c\x4e\x32\xd4\x52\x60\x57\x13\xf7\x0b\xe8\x31\x7a\xce\x6f\x48\xa4\x59\x2e\xe6\x13\x02\x03\x14\x38\x78\x41\xf8\x3d\x9d\x2c\x13\x8a\x66\xce\xc9\xd2\x81\xaa\x4e\x03\xbb\xd3\x29\x76\x04\xc3\x72\x08\x5a\x70\xa9\x57\x2f\x4f\x19\xfa\x53\x51\x13\x02\xf2\xc0\xc3\x98\x57\x87\x5a\xf2\x20\x42\x2e\x70\x0d\x9c\x67\x22\xff\xf3\x1c\x13\xb2\x04\x0e\x3a\x43\xec\x41\xbc\x98\x4c\xf5\xf0\xc8\x73\x98\x38\xe7\x24\xa4\x14\xc5\x2a\x84\x11\x47\x81\x93\xd0\xa5\x2c\x2a\x11\x26\x4e\x42\xc3\x28\x12\x41\x80\x03\xe7\x27\x7c\x8e\xce\x10\x01\xce\x39\x72\x02\xec\x10\xe4\xe3\xd9\x0c\xc5\x81\x9c\x56\x0a\x5e\xcc\x7a\x91\x21\x92\x32\xb0\x31\x46\xe7\xa2\xdf\x81\xf3\x12\x41\x12\x3b\xa2\x96\x16\x27\x83\xdb\x71\x6a\x40\x7f\x16\x4e\x08\xa4\xa8\x2f\x89\x91\x4f\x24\x34\x04\xfc\x37\xe6\x17\xca\x75\x0d\xf4\x9c\x4b\x6d\x75\x07\xf6\xd1\x97\x9d\xd5\x11\x32\x44\x04\xe5\xf2\x5b\xd1\x38\x8c\x43\x2e\x4a\x70\xa4\xa8\x72\xd0\x66\xbe\x1b\x4b\x4d\x21\x28\x45\x3c\xeb\x02\x4f\x43\x86\x69\x10\x58\xf1\x47\x2e\x0a\xcd\x97\x7d\x75\xfb\x55\xe5\x8b\xcd\x71\x12\xaa\x85\xa8\x91\xcf\xf4\x3f\xd9\x7d\x31\xef\x27\x14\x12\x9a\xe6\x8c\xa5\x3c\xb9\xb2\x87\xea\x62\x1f\xcd\x53\x2e\xd1\x2b\x35\x32\xdd\x08\x52\xbd\x47\x3e\x41\x54\x12\xea\x83\x94\x61\x2b\x68\xc4\x01\x5d\xd8\xe3\xf9\xd7\x1d\x73\x7e\x53\xdc\xa7\x05\x82\xea\xef\x11\xe4\xb4\xac\x7e\xd2\x3e\x08\xa8\x2d\x2f\x06\x96\x47\xb1\x1d\x13\x29\x2f\xfc\x7b\x1f\xcf\x1b\x72\x24\xed\x17\x7e\xbf\x2a\x7a\x2c\x8b\xcf\xe7\xa1\xe7\x2e\x70\x27\x11\x3e\xe1\x41\xdb\x26\x5f\x41\x1d\xa9\xad\x72\xc7\xcc\x67\x60\xad\xae\xaa\xa2\x26\x6f\x08\x44\x65\xd1\x52\xb9\x99\x37\xe3\x46\x80\x54\xfe\x74\x80\x9e\xd1\xb3\xa7\x15\x11\xbd\xd6\x20\x95\x20\x75\xf1\x5e\x03\x5c\x65\x66\x51\xda\x92\xa9\xfa\xcb\x07\xac\x5c\x73\xa2\xc5\x5b\xba\x35\x62\xa5\x80\x40\xfb\x10\x66\x78\x94\xad\x00\x26\x79\x43\x78\x45\xf0\x92\x9b\x83\x4a\x0a\x91\xfb\x16\xa2\x4a\x56\x38\x09\x38\xac\x24\xf8\xba\x11\x58\x12\x7c\x7d\x07\x2d\x79\x07\x2d\xd9\x1d\xbd\x6f\x39\xb4\xa4\x63\xa7\xee\x56\xfa\x59\xee\xd0\x25\x33\x65\xe4\x0e\x5d\xf2\x4b\x46\x97\xb4\x33\xf2\xb5\x82\x8a\xbc\x76\xeb\xde\x7b\x61\xdd\xa3\x58\x58\xf7\x44\x49\x78\x76\x16\x39\x68\xd7\xd8\x60\xdc\xe3\xe1\x76\x3e\x8c\x39\x64\x9b\xa8\xf9\xae\xdb\xf5\x38\x96\xd5\x0c\x13\xe4\xc0\x13\xbc\xa0\xa2\x43\xbe\x75\x13\x9e\x63\x3c\x65\x2f\xc1\x6a\x20\x8e\x20\x98\xb2\xc5\xfd\x33\xed\x6d\xb6\x28\xa5\xd2\x85\x77\x93\x61\x4a\xb5\x21\xde\x30\x9c\xd2\xda\x4a\xbe\xd2\xae\xf4\x1d\x8e\xb9\x47\x4f\x83\x2e\xe5\x9f\x23\x3c\xc1\xec\x0e\x93\x95\xab\xe3\x12\xa2\xe9\x81\xbc\x02\x6a\xaf\xe3\x1c\xbc\xa9\x16\x91\xbb\x1e\x22\xaa\x6d\x2b\x39\xf6\x96\xad\xf2\xf1\xdb\x77\xe0\xab\x37\x17\x7c\x55\xde\x9c\x1d\xa2\xaf\x32\xb6\x20\x8c\x18\x37\x08\x59\xf3\xb6\x40\xb0\xca\xe5\xe8\x0c\x83\x55\xf6\x77\xad\x20\xac\xe2\x9d\x76\x43\x94\xc3\xbb\x36\x18\x56\x8b\x87\x2c\xfc\xbc\x5f\x20\x8a\x65\xc9\x26\xd6\xde\xfc\x1b\x72\xb1\x97\x69\x1c\x37\x22\x96\xfd\xff\xfe\x9e\xfd\xf2\xe4\xdb\x6f\x5e\xd8\x61\x1e\x5d\x4d\xd1\xcc\x17\x8a\x24\xd7\x6c\xe6\x2c\x2c\xc5\x55\x57\xce\xbc\x7d\xd3\xac\x0d\xb0\x66\x83\x4e\xbb\x76\xf8\x5e\xde\x34\x88\xf9\x0a\xa2\x5b\xdd\x0d\x63\x5b\x33\xe2\x99\x43\x5b\x5f\xe8\xbf\x7f\x09\xe1\xad\xd6\x67\x5a\xfd\xcb\x1f\xe1\x35\xb9\x65\xee\x7c\xdc\x9e\xe0\xd2\xf6\x14\xb3\xf6\xd7\x1b\x51\x08\x81\xfb\xf1\xa3\xf8\xd0\x2c\xa2\x3d\xc5\xf3\x25\x07\x1d\xec\x34\x73\xff\x5a\x2b\x15\x66\x8a\x65\x7a\x0c\x15\x06\x52\xa6\x5c\x32\x8a\x15\x31\xa1\x58\x23\x85\x89\x22\x1c\x28\xdc\xe7\x0f\xaa\x21\xa2\x78\xca\x2a\x8c\x13\x19\x2c\x53\x3e\xfe\x03\xe5\xab\xe5\x8b\xc2\xfa\x38\x36\x6b\x6e\x9b\x39\xa5\x5b\x67\xdb\x99\x6e\xf7\x8d\xa4\x92\x1b\xe1\x93\x9e\x3f\x4f\x1e\x7c\xff\xc3\x2f\xd4\xec\x93\x86\xf3\xd0\x05\xd5\x9e\xe9\x92\xd8\x62\x64\xc9\xf9\x9b\x7b\x3b\xfc\xb8\xde\xb9\x2a\x60\x40\x20\x85\xfd\x08\xf3\xbb\x5e\x6d\xfb\x84\xf8\x6e\x39\x77\x69\x57\x6d\x4e\xb5\xad\x8f\x41\xf6\x1d\xdf\xb0\xc0\xdd\x35\xf0\xb3\xaa\x73\x68\x6b\xc9\x95\x29\x8b\x16\xbc\x9f\x49\x12\x32\x59\x57\x76\xa2\xd2\x1d\xd3\xf4\x57\xd5\xd9\xb1\xb5\x53\xc6\x76\x98\x9c\x86\x35\xfe\xab\x0d\x5c\xd6\x4f\xf8\xe1\x50\x65\x16\x85\x89\x17\x3b\xcf\x50\xbc\xac\x70\x55\xcb\x06\xd2\xbf\xcd\x1e\xe4\x36\x01\xd6\xb2\xa2\xc5\x7b\xbc\x20\x3e\xd2\xaa\x39\x8a\x2f\x86\x4e\x6d\x55\x47\xad\x95\x7c\x97\x6a\x56\x5b\xe3\xf1\x19\x4a\x68\x18\x73\x7b\xab\xf6\x46\xed\xdb\x86\xd7\x16\xdb\xa7\xf3\xd4\x3a\xa8\x1d\xc0\x5b\x82\x7c\x14\xa0\xd8\x57\xef\xd6\xbe\x70\x9e\x24\x7e\x73\x33\xf9\x4a\xbd\xdd\x33\x94\x35\xdc\xb4\xc2\x64\x8e\x47\x59\x09\xc8\x22\x53\xb0\x83\x3c\x8c\x75\xcc\x66\xd5\xfe\xf1\xec\x5f\x76\x1f\x56\xc0\x9e\xca\x5b\x74\xcc\xb1\xb0\xfb\xf1\x82\xdd\xdf\x7a\xfe\x3c\xa4\x50\x37\xed\x18\x42\xcd\x1c\x8a\x29\xac\x08\xd9\x37\xcb\x74\x45\x31\xbe\x84\x54\x3a\xe6\x99\xff\xd2\x01\x59\x80\xc6\xb5\xc9\x0b\x58\x2f\x27\x64\x9d\x12\x34\x6d\x3c\xbd\x9a\xd8\xd1\xa1\xa3\xb7\x5b\x1a\xac\xed\xf4\x35\x6f\x97\x56\x96\xc0\x2f\xce\xf7\x7b\x60\xf0\xfd\x1e\xdc\x50\xdf\x6f\xb7\xdb\xa8\xeb\x2a\x83\xe9\xd1\x31\x10\xb6\xec\xc3\xd3\xf6\xe2\x1a\x69\x22\x5d\x38\xf3\x0a\xe3\x7d\xb0\xae\x43\xaf\x4b\x92\x17\x59\x43\x95\x2e\x66\x57\x91\xf0\x30\xf3\xdf\x11\x34\x26\x28\x99\xf6\x09\x5e\xc8\xd0\x6a\xbb\x01\x38\x57\xe0\xa1\x6a\x49\xb4\x36\x6c\xd7\x70\xfb\xb7\xf2\x5c\x75\x70\x43\x96\xff\xbd\xc6\x4e\xc6\x56\x36\x76\x65\xe9\xff\x34\xb7\x56\x26\x44\x58\x7b\x2a\x8a\xc4\xaa\x2f\x0d\x63\xed\xee\x2a\x76\xdb\x99\xeb\xab\xd8\x71\x4b\x37\xd8\x35\xac\x6d\x67\x7e\x31\xad\xcf\xce\x7d\x63\xfa\xbf\x3a\x3f\x59\x36\x06\xab\x61\xeb\x43\x6e\xe3\x2f\x2b\xae\xea\x76\x76\x61\x2b\xb9\xb2\xd8\xf7\x86\x65\x0e\x0d\xdd\x75\x55\xf2\x30\xe3\x71\x57\x52\xf3\x30\x2c\xd9\xe0\x9b\x89\x65\xf7\xd4\xa6\x05\x11\xbb\xa0\xe9\xcb\xe7\x4f\xde\xbd\x2e\x51\x96\x71\xe2\xdd\x09\xa2\x34\x8c\x27\x22\x4d\x0b\x05\xec\xeb\x58\x61\x9e\x5d\x57\xb9\xc4\xb6\x84\x6d\x7d\x70\x5a\x35\x68\xf1\xb0\x1d\x40\x40\x63\xa7\xc6\x30\x9d\x8a\x14\xa9\x4d\x5d\xef\x9d\xbb\xcd\xf7\x3b\xb4\x3e\x6f\xe2\x14\x3f\x3d\xbb\x11\xce\xf0\xe5\x8f\xc9\x78\xf6\xf7\xb8\x02\xd8\x2d\xf3\x4e\xba\xc0\x15\x56\x72\x3b\x07\xf9\xcf\x9a\xd2\xd1\x32\x0f\x88\x3b\xd7\x7e\x46\xcb\xdd\x5f\xd3\xd2\x54\xd7\x67\xa8\x96\xab\x72\x75\x59\x4e\xaf\xd1\xf9\x2d\x9a\x5c\xa3\xb1\xef\xf4\xac\xd1\x0d\xde\xa5\x13\xdc\xc6\x01\xbe\xa9\xfb\xfb\xf4\x6c\xa0\x76\x7a\xc1\xf9\xfd\x33\x5a\x3a\xbb\xce\xaf\xc2\x20\x5e\x72\x7d\x97\xa4\xdf\x02\x86\xce\x1c\x12\x51\xb8\x52\x9c\x0d\xe0\xee\x36\x43\xa7\xea\x55\x30\x93\x28\xf4\xd9\x16\xda\x03\x7d\xb9\xb3\x92\x79\x14\x52\xeb\xfe\x5b\x14\xa7\xdb\x80\x74\x63\x1c\x09\xb7\x0d\xfb\xf5\x4f\x1c\xc6\xa9\x9b\xe6\x11\xdf\x48\x28\xcb\x5b\xce\x26\x24\x7e\x0c\x02\xa9\x2d\xf0\x08\x5f\xb0\x9f\x33\x78\xb7\x9c\x2b\x70\x8d\x93\xd7\xeb\x20\x29\x90\x78\xbd\xea\x51\x6d\xdd\x49\x70\xd0\x02\x12\xa4\xeb\x7c\x13\x3b\x5d\x7c\xad\xc0\x87\xe6\xbb\x3a\xeb\x5c\xee\xbc\x08\x8d\x69\x9f\x92\x70\x66\xee\x0b\x18\x57\x69\x73\xbc\x63\x47\x86\x4d\x68\x07\xd1\x42\xdb\xe9\x7e\x31\x5a\x26\x72\x08\x43\x69\x92\x28\x6d\x60\xd3\x64\x8d\x73\x48\x62\x99\x3d\x59\x51\xeb\xce\x9c\xbf\xf1\x9b\x68\x97\x4b\xe0\xf8\x30\x0d\x13\xe7\xe7\x5f\x39\xb4\x35\xaf\x18\x77\xea\xc8\xa1\x0e\x38\xd6\xb2\x0f\x45\xa0\x93\xf3\xf3\xaf\x7f\x7c\x95\x38\xe7\x21\x9d\xe6\x9e\x4a\x80\x73\xb2\xa0\xce\x39\xd2\x30\x51\x02\xcc\x94\xe5\x04\x8b\xa7\x7d\x48\x10\xd7\x63\x99\xfe\x9a\xfe\x04\xa9\x03\xa3\x68\xe0\xbc\xa0\x42\xb7\x45\x13\x48\xc3\x33\x14\x2d\x9d\x70\x36\x87\xbe\xc8\xef\x60\xba\xe1\x19\x72\x62\x1c\x20\x27\xa4\xec\xfd\x30\x49\xb0\x1f\xf2\xc2\x70\xac\xf3\x81\xf3\x1e\x21\xe7\x04\x45\xf8\x9c\x29\xe7\x22\x3f\x44\x20\x05\x27\x4c\x4d\x62\x9d\xbc\x64\xa3\x7d\x2f\x46\xcb\x33\x45\x12\x84\x3a\xd2\xf6\x98\x28\x48\x62\x18\x25\xbb\x8a\x1a\xdd\xa5\x80\xe0\x05\x71\xaa\xd2\x40\xb2\xb9\x86\xb1\xf0\x4d\xb1\xf5\x32\x26\x7a\x5a\x45\xb8\xe8\xa6\xce\xd3\xb3\x96\xf1\x26\xc0\xfd\x4e\x1e\xf4\x36\x91\x27\x46\x50\xf0\xea\x6b\xbd\x3a\x5c\xa5\xc8\xae\x6b\x9f\xcc\xb8\x53\xf5\xfd\x94\xb3\x44\xab\x99\x15\x0a\xa7\xad\x7f\xb6\x33\x42\xcb\x56\x6b\x46\xf7\xa4\xef\xac\x27\xb3\x9d\x0f\x27\x3f\x7c\xf6\xc8\x37\x86\x48\x9f\xcd\x32\xe4\xba\x0f\x03\xd2\xc5\xd9\xb5\xf4\xaf\x1b\x11\xf6\x83\xc8\xe1\xb7\x7b\xd3\x13\x6c\x56\xc0\x34\xe8\x09\x1b\x5d\xcc\xa8\x72\x6c\x51\xdd\xb0\x08\xf6\xa9\x57\x2e\x9a\x42\x08\xae\x4b\xb9\xe8\x5c\xb8\x2f\xc2\x59\x6d\x20\x73\xb7\x57\x54\x6a\xb3\x06\x2b\x74\x8e\x83\x2b\xd1\x39\x6e\x88\xc6\xf1\xe0\x9a\x34\x8e\x83\x56\x1a\x07\x87\x6f\xbc\x75\x9a\x85\x2d\x4b\xb7\x71\xfb\x34\x0b\xfa\xcd\x41\x13\xaa\x3a\x0b\x3c\x45\x6e\xfa\x57\x40\xf0\x3c\xfb\x8b\xa0\x33\x44\x12\x94\x6e\x93\x75\xf6\x78\x0b\xf5\xa6\x4e\x39\x71\xba\x88\xfc\xf9\xe2\xe0\x0d\xe6\x11\xf4\xd1\x54\x1e\x74\x53\xc4\x0b\x1b\xf3\x7b\xfe\xd1\x39\x59\x3a\x02\xfd\xed\x7a\x42\x5a\xae\x17\x42\x60\x2d\x24\xe8\x4e\x19\x55\x9b\x98\xae\xd3\xb3\x41\xbe\xe4\x68\x85\xc4\xbd\x7e\x84\x57\xbb\x2b\x61\xbd\x29\x10\x8c\x69\xbf\xb3\x98\xb4\xba\x0b\xe1\x1a\x2c\x13\x4e\x87\x71\x3c\xa7\x67\xae\x19\x13\xa0\xeb\xb4\x7c\xeb\xe8\x9d\x92\x2a\x6b\x0e\xd7\x49\xb7\x61\x21\x70\x27\x17\x68\xe5\x86\xc9\x0f\xfc\xc6\x51\x81\xb5\x3f\xa3\xa5\x08\xcd\xcd\xe0\xa2\x4d\xaa\xe2\xba\x61\x3f\xdd\x07\xfb\x74\x1e\xe2\xb3\x4e\x60\x4f\x57\x39\xd0\x3c\xe2\xe3\xe7\xdd\x5f\x9d\x39\x0c\x49\x17\xc1\x3c\x5a\x08\x4f\xaa\x21\xb5\x88\x9d\xa8\x76\xfc\x5a\x3b\x64\x3b\x8e\xd1\x59\x23\x32\xe7\x8a\x16\xa7\xb3\x68\x9c\xac\xcb\x2b\x08\xc6\xf9\x1d\x2f\x54\x00\x8e\x78\x7f\xbc\xcc\x5e\x68\x35\x44\x6d\x78\xed\x02\x6f\xae\x67\xf3\xb4\x0c\xad\xe9\x24\xa0\xa6\x1b\xc3\x2a\x9c\xa0\x98\xee\x32\xd5\xf6\x2a\x82\x67\x7e\xde\xfd\xb5\x2e\x6c\xa3\xe9\xb7\xcd\x23\x64\xae\x21\x2e\xa6\x23\xda\xd9\x87\xc4\x6c\xbc\xa5\xaf\x0e\xa6\x61\xbf\x0d\x4e\xc3\x36\xcc\x98\x9b\xc4\x91\xc4\x38\x40\x37\xad\x62\xf3\x83\xf3\xe7\xd3\x93\xf3\x8f\x51\x5b\x84\x85\x9b\x56\x30\x57\x5a\xc6\x79\xb9\x80\x30\xe6\xa5\x00\x60\x37\x65\x73\xd3\xde\x54\x05\x53\xe5\x74\xbb\x0d\x55\x9b\x33\xff\xa3\x15\x1d\xc3\x44\x78\xf0\x62\xec\x44\x38\x9e\x20\xe2\xa0\xcf\x61\x42\x13\x55\x79\xc1\x87\x14\x46\x78\x62\x4b\x55\x3b\xe2\x54\xf8\xe9\x37\x3b\xaa\xa6\xb3\xb6\xd1\xb1\xbd\x11\x1e\x88\x68\xf2\xcb\xe9\x07\xf2\xe6\xb0\xce\x03\xe1\x02\xa6\x2a\x44\x74\xba\xcc\x7d\x92\xee\x2a\x39\x0d\x77\x11\x67\x3f\xe9\x9f\xa5\x43\xd0\xc6\x59\xf1\x9a\xd1\xe5\x9a\x1d\x15\xda\x5a\xd4\xfb\x2a\xd0\x19\x8a\x69\x3f\xe1\xf9\xa4\xe5\xcc\x64\xe9\xf9\x4c\x4c\xde\xc2\xd6\xf9\xb5\x22\xab\xd6\xe9\x3d\x89\x97\xce\x7b\x7e\xf4\xbc\x8a\x0c\x50\x9f\x84\x34\x14\x88\xf7\x4f\xe5\x47\xe7\xe9\x14\xf9\xa7\x49\x45\x03\x75\x7c\xd3\x80\x80\xfa\xc7\xe7\x30\x49\xc4\xe3\x6f\xc5\xa7\xc2\xe3\x15\x79\xa5\x62\xdf\xac\x0d\x2e\x2d\x90\x9b\x03\xd4\x85\x07\xa8\x1b\x58\x65\xbe\x33\xdb\xe6\x89\x1a\x15\xac\x16\x69\xa2\xe6\x6f\xfe\x89\xc6\xe1\x35\x32\x20\x6f\x4a\xd2\x63\xb7\x48\xb7\xfa\xc1\xba\x81\x16\xea\x35\x92\x1b\xc5\x8c\xa4\xd5\x4d\x5e\x2e\x95\xf4\x70\xc3\xe4\x63\xca\x5a\xd6\x41\x26\x35\x67\x28\x7d\x0d\x8e\xd6\xdc\x92\x35\xb5\x88\x16\xda\x40\xab\x23\x55\xcb\xe6\xb4\x74\x82\x4e\xca\x0e\xcd\x10\x4b\x85\x77\xe7\x0d\x3e\x25\x4f\xd8\x37\xc0\x5d\xd8\x94\x3b\xea\xc2\x36\x9c\x4e\x9d\xcd\xc0\xad\x88\xf9\xa9\xc0\x9b\xcd\x5c\xa9\x40\x2e\x8d\x3a\x07\xed\x76\xca\x14\x26\xef\x65\xbd\x0e\x0b\x6c\xdb\xec\x45\xf5\x8f\x9a\xc2\x84\xba\x4f\x58\xad\x45\xa2\x75\x0b\x9e\xfa\x07\xe0\x9b\xcc\x1c\x6d\x67\xfc\x92\x43\x10\x8b\xe4\x33\x4a\xa2\xa0\x4f\x50\x41\xb6\xa1\x70\xf2\x5a\x56\x52\x12\xe6\x89\xac\xb2\x12\x0c\x02\x82\x44\x15\x08\x5f\xc9\x03\x47\xdc\x30\x62\xf0\xa2\x70\x09\x6b\x90\x4c\xf1\xb9\x58\x8a\x47\x52\xd2\x2b\x2c\x80\xf6\x75\xfa\xf7\x13\xf9\x1e\xed\x2b\x25\x7f\xac\x95\x4c\x5b\x47\xf4\xd0\xaf\x03\xd6\xaf\x72\x73\x1b\xc6\x79\xc8\x6f\x13\x01\x60\xa3\xfd\xb2\x76\xc2\xa3\x3c\xbd\xc9\x1c\xc6\xb9\x8b\x86\x23\xe5\x30\x76\x4c\xc3\xb9\x0b\xdc\x97\x52\xd0\x49\x0f\x77\xf6\xc5\x1a\xf5\x8d\xf4\xd7\xb7\x4a\x60\x6a\x69\x40\x79\x54\xf3\xfe\xf2\xd3\xdf\xd4\x64\x37\x75\x85\x0c\x5c\x20\x7b\x85\xb5\x4f\x76\x56\x9f\x0a\x57\xe9\xd5\x31\x57\x0f\xdb\x68\xfb\xae\x97\xaf\x5d\xc9\x85\x5e\x63\xae\xb7\x4b\x5f\x4b\x9d\xed\x6f\xad\x5d\x72\x65\x39\xca\x35\x7e\x10\x73\x83\xfa\x6c\x5c\x41\x03\x93\x1b\x63\x50\x3b\x84\x4e\x89\xd5\x32\x23\xb0\xce\x4c\x6b\xed\x5f\xb0\x86\x58\xb6\x81\x7f\xb4\x8f\x4b\x2e\x7e\xff\x75\x15\xa6\x7d\x5b\xb1\xf1\xa7\xce\x85\xc6\x83\xab\x10\x1a\xd7\x13\x19\x7f\xb2\x13\x18\xbb\x10\xed\x3a\x13\xec\x0e\xae\x4b\xb0\x3b\xb8\x0e\xc1\x6e\x53\xa1\xae\x78\x82\x1f\x02\x77\x42\xc2\xa0\xef\xe3\x88\x8d\x37\xd4\x60\x33\x7d\x14\x45\x3f\xa1\x70\x32\xe5\x31\x0c\x72\x07\x83\xa3\x6f\x0f\x34\x3c\x95\x56\x92\x68\x83\x18\x68\x25\xfb\x59\x88\x7d\x87\x66\xb1\xef\xb0\x20\xf6\x1d\x96\xc5\xbe\xc3\xb5\xc4\xbe\x2b\x14\xf9\x4a\x63\xec\x52\xe4\xdb\xa2\xb8\xb7\x51\x36\xb9\x35\x2b\x39\x04\x0f\x2d\x7d\x80\xe5\x02\x10\x96\x0b\xdb\x42\xd4\xeb\x40\x46\xbb\x02\xe9\xac\x03\xb9\xac\xd5\x62\x76\x2c\x8b\xb5\x92\xc2\xba\x93\xbf\xae\x57\xf6\xe9\xca\x63\xbd\x9e\x64\x74\x50\x51\x5d\x5b\xf3\xda\x6d\x6c\x6d\xed\x28\x1c\xad\xd3\xf3\x51\x79\x32\xb4\x90\xae\x5a\x39\xa8\x1b\x18\x37\xdb\xf3\x60\x79\x12\x1a\xcf\x80\x55\x48\x92\x38\x2d\x32\x1c\xa9\xe9\x58\xac\x15\x4d\xd1\x06\x3e\xbb\x7d\x28\x45\xf5\x8f\xc6\x92\x16\x6b\xba\x70\x37\x0f\xb8\x90\x42\xcd\x56\x1d\xb7\x1f\xff\xf3\xe7\x9b\x5f\x7e\xf9\xfb\xa7\x5a\xc4\xe8\x42\xc1\xe2\xd7\xb9\x6a\xa8\x36\x2e\xd9\x5c\x7e\x77\x2a\xbd\x5d\xbf\x7f\x96\x51\xbc\x2d\x6e\x74\x1d\x03\xb7\x75\x68\x48\xa4\xc4\xe6\x78\xea\x46\xef\xb0\x4a\x12\x76\xcb\xf8\xe9\x76\x1d\x50\x3c\xc3\x13\x02\xe7\xd3\x65\xeb\x2e\xb8\xe7\x4b\x83\x9e\xd6\xd3\x74\x1f\x01\xf7\xaf\x05\x5a\xa4\xf9\x2f\x46\x2f\x94\x04\x71\x93\x5a\xe2\x73\x85\x59\x9d\x57\x9d\x3a\x47\xb0\xbe\x25\x40\xdb\x41\x98\x48\x20\xaa\x3a\xb8\xed\x6a\x6d\x22\x1b\x1d\xd0\x03\x6d\x0e\xf7\x0e\xdb\x64\x67\x7c\x0d\x34\xec\x49\xb9\xf4\x34\xf4\x4f\x97\xad\xd8\x74\x09\x7d\x80\x1f\xab\x5c\x15\x65\xae\xc7\x8b\xd0\x42\xcc\xee\x08\x17\x46\x88\x50\xb7\x60\xc8\x90\x71\x06\x8e\xde\xb4\x9f\xc6\x20\xd5\x95\x2e\xa9\x85\x2f\xb8\x5f\x25\xe2\xb5\x8a\x34\xaa\x63\x8c\xed\x79\xde\xdd\xb2\x54\x2f\xcb\x13\x15\xf3\x76\x0e\x13\x87\x20\xba\x20\x31\x0a\x9c\xf3\x69\x18\x25\xd4\x91\x05\xc4\x1d\xca\xd6\x8e\xcd\x08\x38\x32\x73\x82\xd7\xfe\x24\x4b\x07\x4e\x60\x18\x77\xbe\x62\xd5\x02\xca\xe1\x15\xe0\xec\x17\xae\xa9\xba\x70\x17\x2e\x57\x74\x21\x4e\xdb\x95\x3d\x37\xfa\x89\x65\xe5\x68\xc1\x76\xcb\xd5\xcf\x0f\xc0\x83\x62\xe1\x46\x13\x21\x79\xf6\xea\x5a\x72\x75\x9b\x92\x48\x4e\x43\xe2\xb6\x53\xf8\x57\x76\xe9\xb4\x4b\x38\x8e\xa5\x5e\x11\x97\xeb\x22\xe5\x54\x8e\x36\x68\xef\x5d\x29\x24\x57\x03\x93\xef\xca\xf8\xa6\xb2\x14\x58\x90\xc2\x9a\x27\xea\x74\x11\xbf\xd4\x2d\xcd\x6a\x8b\xd8\x17\xc7\xfd\x10\xb8\x14\x9e\xf4\x45\x31\x7a\x3d\xa7\xec\x58\xc7\xe5\xf6\x69\x31\x9a\x4f\xec\x23\x98\x4c\x5d\xc1\xc5\x8f\x8e\xd4\xfc\xe5\x46\xcb\xc5\xcf\x49\x5b\xbe\x93\x33\x83\x57\x19\x56\x07\x9a\xe9\xb6\x10\xc1\x17\x26\x7d\xb9\x8d\x2d\x9a\x1c\x2b\x4b\xbc\xfd\x30\xdf\x23\x72\x16\xfa\xc8\x79\x11\x27\x14\xc6\x3e\x6a\x1c\x6a\x22\x1a\xd8\x0e\xb3\xf8\x78\x3a\x44\x0d\x7a\x45\x93\x88\x01\x93\xc2\xe4\x40\xda\x4f\xe6\x1d\x4f\x56\xfa\x40\xc2\xb9\xf3\x21\x9c\xa1\xa6\xa9\x10\x4a\x2d\x67\xa1\x3d\x79\x5c\xf0\x80\xb4\x1a\xa0\x0e\x63\x64\x41\x69\xa5\x69\x58\x52\x3a\xff\xf8\x1a\x9b\xe1\x15\xa2\x50\x20\x3c\xd7\x8f\x6c\xa6\x9e\xb3\x1b\x59\xf1\xf1\xe3\x5a\x95\xa3\xdb\xab\xa1\x45\xfa\x94\xbb\x6e\x89\x33\xcd\x85\xa0\x7f\x2e\xbe\xaf\x70\xff\x6a\x4f\x8a\x2b\xb8\x1b\x3b\x64\x37\xf1\x7d\x65\xce\x71\x00\x5c\xbc\xa0\x11\x62\x07\xc1\xcc\x32\x1a\x07\x67\xa3\xa5\xb5\x86\x81\xcd\xfd\xba\x76\x95\xd4\x82\x75\x62\x13\x83\xd2\x6e\xee\x66\xde\xb2\x75\x69\xb6\xf7\xcb\xe2\xec\xdd\xd3\x57\x76\x49\x3c\x06\x87\x76\x18\xa4\xde\xec\x7e\xe6\x26\xcc\x65\xcd\xc3\x93\x7e\x22\x7d\x9b\x05\x09\xa4\xc2\x49\x2e\x15\x1b\x0a\x4f\xe6\x30\x46\x91\xdb\x2a\xcb\xd5\x05\xa9\x6b\x79\x7d\x83\xb8\xb6\x44\xa6\xec\xf2\x72\x1e\xb9\xa1\x60\x07\x6f\xed\x02\x57\x38\xb1\x79\x52\x79\x39\x28\x21\x1b\xad\xa9\xec\x5e\x7b\x35\x74\x6d\x0f\xd7\x36\x4c\xe1\x4a\x93\x9f\x42\xf6\xc1\x11\x44\x77\xc4\x2e\xda\x96\x65\x3b\xd3\x19\x8b\xb0\xaf\xdf\x76\x61\x93\x2e\x5d\x00\x9b\x5f\x27\xb3\x8c\x29\x6f\xf5\x2a\xc1\x6f\xff\x13\x9f\xbe\x78\x62\x06\x99\xb6\xbe\x4a\x34\x59\xe0\xfa\x6e\x11\xed\x34\x32\x11\xc7\x02\xd4\x3a\xc3\x9f\x50\x03\xae\xbb\x27\x30\xa7\x7f\x1f\xc5\x94\x84\x32\x0d\xa8\xea\x95\xeb\x1d\xff\xb5\x8f\x7e\x47\xc7\xde\xe2\xc8\x97\x8e\xbb\x22\xdc\xa0\xc2\x45\x6a\x71\xc2\x3b\x3d\xdd\x66\x41\x61\x93\x73\x9e\xce\x70\xe3\x33\xce\xf4\x8b\x2d\x1f\xef\xbf\xe6\x3f\xc2\xc5\xeb\xd9\xc7\xcd\x8e\x37\x61\x1a\x58\x9f\x92\x70\xde\xa7\xa1\xd8\x60\x57\x78\xca\x9d\xe6\x40\x3c\x4e\x34\x89\x21\xca\x63\xdf\xaa\xf1\x76\x03\xab\x8a\xdc\x01\x6d\x34\xb6\xbc\x0a\xe3\x70\xb6\x98\x59\x70\xb8\xac\xd7\xc0\xda\x84\x53\x99\xa2\x96\x53\xa3\x67\x61\xac\x5c\x7c\x33\xf8\x99\x0d\xe7\x07\x22\x74\xa1\x67\xe1\x24\xe4\x7b\xec\xe8\xa0\xe0\x84\x9b\x25\xad\x86\x6c\x41\x08\x14\x84\x30\xde\x2e\x1d\xf8\x10\x6e\x00\x29\xc4\x9b\xb7\x4b\x0b\xf8\xf9\x2a\x08\x61\xba\xd6\x4d\xdf\x3c\xd4\x7d\x9f\x7d\xfe\x9f\x2c\x47\x45\x73\x8a\x36\xf9\x49\xeb\x2e\xf7\x4e\xef\x77\x42\xd7\xc5\xa5\xd5\x3a\x49\x0d\x60\x5b\xbe\xdf\x5f\xff\xf7\xed\xb3\x93\xdf\x97\xb1\x39\xce\x40\x85\x18\x55\xd7\xa2\xd6\xc2\xb6\x35\xd9\xe6\x7d\x6a\xde\xab\x12\xa9\xaa\x38\x85\x66\x18\xdc\x86\x3a\x29\xdc\xb5\xeb\x80\x1b\x7e\x03\xdc\x30\x9e\x2f\x68\x79\x4a\x65\xb3\x37\xc7\x65\x11\x31\x1b\x5c\x1d\x38\xc1\x9f\xcd\xd6\x70\xb7\x4b\xd4\xc4\xdd\xb9\xac\xcf\x79\xd3\xa0\x13\x3b\x8c\x5f\xe7\x27\x4c\x6c\xa1\x2a\x2c\xb7\xee\xa0\xeb\xac\x42\xbe\xdd\x02\x30\x38\x1f\x5b\x3f\x94\x76\xf5\xbc\xfa\xc0\x01\xe5\x54\x52\x5e\x8a\x68\xa7\xa5\xe0\x05\x7e\x6a\x39\xd7\x42\xaf\x0f\xb2\x8a\x94\xbe\x16\x47\xdd\xa0\x11\x1f\x18\x63\x15\xbb\x89\xbc\xdd\xc8\x26\xd1\x71\xc0\xaa\xa5\x5d\x42\x05\xe9\x41\xc2\x63\x0c\x52\x32\x5b\x3a\xbf\xae\x0e\xe1\xa8\x2d\xc0\x51\x83\x8a\x73\x65\x71\x77\x39\xb6\xd6\x05\x83\x4c\xdd\x21\x5b\x65\x90\xf0\xdd\x8b\xf8\xc9\x37\x3f\xff\xb7\x9a\x41\x6a\x20\x29\xe8\x33\xf2\x17\x94\xdf\xeb\xec\x74\x47\x5c\xd2\x4c\x12\x38\xe1\x5f\xe1\x78\x1c\x12\x03\x58\x4a\x15\x2f\x14\xdb\x3f\xf3\xdf\x6c\xcb\xbe\x9a\x2d\xc5\xba\xb0\xbf\x14\x9e\x2c\x22\x48\xf2\xf9\x2e\x47\xfb\x07\xd9\x74\xb4\xf8\xb9\xa2\x25\xa5\x10\x5d\xb7\x95\x92\xf3\x74\x5a\x8a\xd4\x97\xbd\xd5\x7a\xc2\xcb\xcd\x5e\x3c\x5b\xa3\xd1\x33\x14\xc1\xe5\x1a\xed\x3e\x7c\x78\xb9\x46\xab\xef\xd1\x14\x9e\x85\x98\xac\xd1\x34\x45\x8f\x69\xdb\xf0\xff\xf7\xff\x5d\xdb\xd6\x6b\xb5\xe4\xc4\x26\xf2\xa6\x38\xca\x66\x45\x2b\x7b\x3e\xad\x3a\x25\x37\x46\x5d\x00\x85\xd3\x90\xcb\xb0\xe9\x08\xd8\x1e\xdb\xe6\xfb\x5f\x62\xff\x54\x6e\xd9\x6d\x0e\x83\xef\xfe\x6d\x0e\x20\x3b\x48\x57\x37\x8a\x7a\x45\x66\x03\x97\x98\x79\x62\x5a\x19\x06\xe0\x64\x19\x9a\x45\x67\x96\x4d\x1d\xb0\xba\x3c\xb5\xae\xd7\xe4\x61\xca\x7d\x45\x48\x64\x10\xc2\x08\x4f\xd2\x6b\x42\xf1\x68\x76\x53\x3c\x21\x88\x27\x62\x24\x0b\xf9\xe1\x1c\xc6\xd4\xa1\x58\x03\x09\x14\x11\x8d\x92\x27\x3d\x6e\x9b\xc2\xde\x22\x3e\xa1\x7d\xd7\x1a\x81\x54\xac\x82\xc1\xfa\xc9\x11\xcd\x33\x70\xec\xfd\x7d\xe0\xe2\xd8\x8f\x42\xff\xd4\xb5\x0f\x19\xff\x5a\xe6\x5e\xa7\x64\x91\x01\x2c\x46\xbd\xeb\x51\x11\x35\x5b\xec\xbe\x42\x31\x0d\x4d\x2f\x96\xa3\xd7\x18\x67\xfa\x9e\xfa\xed\x91\x51\xc1\x90\x6c\x6e\xd1\xca\x22\x1e\x9c\xef\x9d\x4d\x96\xa6\x0d\x7c\x81\xde\x54\x5c\x2d\x0f\x73\x85\x46\xec\x5e\xda\x4c\x2f\xa7\xbc\x73\xd4\x2b\x74\x39\xad\xb8\x75\x0e\x0c\x2b\xf6\xa0\x72\xcf\xa8\xf4\xe5\x54\x5e\x10\x87\xd2\x69\xbb\xb8\x6d\x06\x2b\x25\xf1\xf6\x83\x3d\x2c\x0e\x36\xed\x68\x9d\xdd\xc7\xfa\x33\x27\xc6\xd6\xb5\x6a\x8d\x04\xb1\x86\xfe\xc8\x8b\x5f\xfe\x53\x82\x0f\x34\x15\x3f\x17\x75\xc7\xcb\xee\xf1\x7b\xfd\x35\x0e\xd0\xc0\xf9\xc1\x50\x85\x0f\x88\x34\x3c\xf7\x7a\xea\x0b\x6e\x80\xec\x5c\x57\x5f\xf0\x06\x06\x58\x74\xef\x82\xcd\x48\xba\x9e\x19\x82\xd7\xd9\x4b\x76\x55\xfd\xbe\xad\x1a\x20\x76\x49\x74\x3e\x3d\x1f\x3f\x35\x1b\x20\xd6\xb6\x38\x88\xa9\x19\x4e\x8b\xdc\xde\xe3\x10\x45\x01\x37\xc2\x5a\x54\x9b\x55\xd5\x51\xac\x6b\x82\xe5\x23\xc4\xf7\xd3\x2b\x9b\x1f\x20\x71\x6f\x53\xf4\x99\xba\xa5\xa0\x60\x69\x70\x51\x09\x55\x4a\xd9\x72\x9d\x29\x4c\xfa\x2a\x2b\x2c\x8b\xa8\xa8\xcb\x78\xd1\x11\x18\x2c\x94\xfa\x4a\x23\x3f\x5c\x50\x3c\xc6\x3e\xcf\xc4\xcc\x3e\xcb\x79\x49\xc3\x7c\x3e\xc4\x5e\x0c\x5a\x36\x97\xc0\x1b\xea\xd5\x42\x18\x93\x6f\xa9\x44\x49\x49\x71\x2e\x75\xd1\x29\xef\x13\x48\x3b\xcc\x84\x2a\x4e\xd2\xca\xb0\xfb\x74\x8a\xc8\xbc\x31\xb2\x7f\xaf\x16\x09\xe5\xe9\xcb\x0e\x67\xdb\xce\xb3\xd7\xef\x9d\x29\x4e\x28\x9b\xca\x40\xfc\xea\xe3\x98\xc2\x30\x76\xf6\xfb\x5f\x1f\x3a\xfe\x14\x12\xe8\xb3\xbb\xc0\xe9\x09\x4f\x64\x02\x9c\x08\x51\xca\x3f\xc0\x38\x70\xa6\xcb\xf9\x14\xc5\x89\x27\xfe\x9a\x89\xfe\x27\x61\x2c\xca\xcc\x42\xf9\xf0\xc0\x79\x13\xfb\xc8\x11\xbb\x2d\x00\xe2\xbe\xf6\x61\x1c\x63\x3e\x1c\x41\x94\xa0\x2e\x86\xac\xbc\x75\xcd\x1b\xca\x4e\x3b\x72\x2b\x73\xa7\x0a\x41\xbd\xb9\xde\xf9\xa6\xe0\xf8\xe0\x42\xc2\xd7\x4b\xc6\xb5\xd0\x97\x9a\x6c\xbb\xc6\xf2\x72\xc6\xec\x8c\x9c\xb8\xc4\xf6\x88\xa3\xa4\xb1\xbe\x00\x57\x85\x86\x00\x8b\xda\x73\xf4\x0c\x25\x3e\x09\x79\x5b\xa7\xf7\x46\xf6\xe1\x99\x4e\x96\xd2\xe6\xd0\x67\x0a\x09\x82\xb9\x71\xc9\x93\xa1\x75\xb6\xc1\x01\x31\xac\x4a\xae\x63\xd3\x3a\x98\x58\x64\xdd\x7e\x2a\xf1\xfd\x27\x4f\x5f\xbe\xff\xf4\xfc\xf5\x93\xef\x5f\x3e\x7f\x66\x93\xed\x59\x75\xf7\x6a\x81\x34\x91\xf0\x8d\x1a\xa3\x5d\xca\xa8\x09\xef\xd4\xf3\x46\xa0\xe1\x6a\x71\xe9\xfb\xa5\x03\x03\x9e\xbd\xc7\xdf\xc8\x13\xf6\x78\x24\x17\x9c\x21\xc1\x1c\x81\x50\x8e\xc3\x28\x72\xe0\x7c\x1e\x2d\x1d\x3a\x15\xb0\x06\x30\x8a\x1c\x8a\x4f\x51\x9c\xa8\x83\xca\x0f\x31\x4f\xd3\xd4\x7b\x30\xd7\x34\xd6\xe4\x42\xf6\xe6\xbe\x48\x44\xd0\x32\x7f\x8b\xd5\x73\xf3\x86\x62\x5e\x2b\xd7\x95\x4c\xb6\x70\xed\x3e\x79\xfa\x92\xed\x72\x46\x92\x67\xe2\x81\xa4\x9c\x30\x5c\x5e\xec\xda\xf5\x98\xe3\x28\xf4\xc3\x56\x4b\xf2\x56\x6b\xb2\xf6\xaa\xa8\xf7\x6e\x65\x61\xf8\xcb\x97\xcd\x4b\xc3\xb1\x44\x5e\x04\x28\xa6\x21\x5d\x36\xae\x15\x3f\x7e\xc6\x15\xe3\x14\x5b\xda\xad\x99\x05\x6c\x45\x03\xb4\xee\x66\x92\x8d\x49\x1d\x0d\xc2\x04\x9e\x44\x28\x28\x21\xaa\x61\x52\x64\x43\x61\xf2\x96\x84\x09\x0d\x63\x94\x21\x4f\xa5\x3f\x49\x2d\x59\x33\xb3\x65\x5d\x6b\x92\x40\xa6\xe5\x66\x75\xa5\xcd\x5a\xae\x9b\xaf\xe0\x27\x40\x03\x74\xb9\xe9\x3d\x3c\xeb\xa2\x28\x9f\x3d\x51\x2a\xe6\xbb\xf1\x44\x65\x0e\xf4\x86\x13\x2d\xb2\xdf\x8a\xa9\xc9\x41\x11\xc4\x03\x04\xaa\x89\x2f\x05\xf6\xaa\x31\x99\xec\x0d\x25\x7e\x03\xb3\x0a\xb8\x31\xa6\x55\xdb\x56\x9a\xe0\x0a\xf5\x22\xf3\xe2\x68\x76\x14\xdb\x97\xf9\xed\xc2\xbe\x2a\x8c\x4a\x52\x07\x57\x77\x91\x95\x75\xb5\x73\x7b\xea\x95\xdb\xc1\x04\x60\x80\x2a\x7e\x93\xdf\x01\xf9\x72\x9a\xb9\x1d\xf1\x2c\x7d\x9f\x5d\x08\xc2\xe1\xba\x00\x6b\x6d\x6c\x9c\xb2\x3b\x31\x97\xbe\xbe\x0d\x4a\xeb\x0f\xdc\xef\x32\x7d\xf5\xbb\xcc\x30\x97\x95\x69\x4e\x4d\xc7\x59\x60\x8b\x21\x0b\xb0\xc2\x8a\x65\x48\x4a\xdf\x14\xe2\xe8\x4a\x43\x0a\x75\x2b\xc3\xa6\x96\x8a\x1b\x55\x23\x2a\x3c\xfb\xe9\xf0\x7c\x2f\x82\x15\x26\x0b\xa9\xa5\xb7\x2d\x71\x54\x28\xd3\x7a\x3d\xa5\xa2\x7e\xc7\x0b\x92\x89\x46\x3c\x89\xe1\x04\xa1\x98\xc9\x61\x9d\x14\x8b\x92\xf2\xdc\x32\xf7\x9a\x5b\x51\x29\xaa\x13\x32\x26\xf0\xac\x13\x32\x26\xf0\xec\x9a\xc9\xb8\x95\xc2\x65\x55\x64\x9c\x41\x72\x8a\x02\x6e\xc3\xe6\xe3\xaa\xa9\x36\xd6\x82\xa8\xa2\xab\x8d\xc8\x5a\x53\xaa\xab\x7c\x2b\x17\x62\x89\x95\xd1\x84\xff\x57\x44\x21\x93\x84\x8a\x0b\xac\x5a\x20\xcf\x48\x2e\x51\xad\x10\x85\x61\xd4\x28\xc0\x2b\x96\x4f\x72\x5a\xc1\xb7\x99\xdb\xdb\xc7\xb1\x0f\x79\x3a\x4e\x2f\x2f\xb2\x4a\xe0\xe1\x74\x45\xf3\x4f\x97\x7f\x77\x87\x8e\x5b\x82\x23\x2e\x8c\x15\xb8\x59\x45\x28\x5b\x57\x7a\x65\x6c\x5f\x57\xe6\x75\x23\xab\xd9\x90\x6f\xa1\x20\xdc\x7a\x8a\xd3\x7f\x9e\x07\xdf\x7f\x8b\xcf\xa8\x99\x5b\x15\x41\xf6\x72\x16\xbd\x1a\x26\x66\xad\x3c\x6a\xa1\x15\x85\x72\x69\xe8\x3c\x13\x84\xdd\x6b\x86\xe5\xd3\xd6\xa7\x12\x98\xaf\x4d\x9a\xa2\x71\x86\xcf\x83\x90\xde\xb6\x29\xd6\x42\x3d\x01\xf7\x3b\x89\x7a\xc5\x07\x2f\x5e\xe1\xc8\x4d\xce\x71\xf9\x92\x97\xea\xf7\xcd\xea\x9e\xd9\x41\x40\xa9\x9b\x4d\xa1\x3e\xc9\x29\x1b\x71\x9f\xc0\x61\x3d\x74\x9e\x7a\xa8\x65\xcd\x28\x6b\xc4\x27\xd7\x02\xe9\xc9\xdd\x14\xe1\x49\x10\xa0\x02\xe3\x29\x35\xa1\xb9\x46\xa0\xa7\xb2\x71\x70\xd3\x7a\x5a\x9b\x16\xaf\xdb\xc0\x5c\x95\xbb\x5c\x5a\xdb\x75\xf8\xc1\x75\x0d\xe0\x51\xc6\xd8\xc7\x7a\x53\x4a\xf7\x64\xb5\x00\x77\xd9\xfc\x25\x56\x58\x29\x86\xb3\x27\x5d\xca\xd6\x30\x95\xcd\x3f\xae\x8f\x6e\x52\xbc\x01\xd7\xe7\xe3\x37\xa2\xd8\xe9\x41\x40\x1e\x7e\x78\xfe\x8e\x54\x30\x72\x9e\xfd\xc4\xff\xc3\xeb\x43\xa4\x39\x6d\x65\x20\xdd\x64\x21\x85\x4c\xbb\xb2\xa6\xb9\x7b\x63\x0b\x1c\xac\xa9\xba\xe9\x3a\x35\x4a\xf9\xc6\x81\x89\xef\x02\xf7\x89\x43\xb1\xf3\xdf\x8a\x0a\xa2\xfc\xb9\x00\xf1\x07\xff\xcb\x1e\x7c\xd2\x50\x3b\x94\xd1\xbf\xb9\x72\xe8\x9a\xd5\x58\xdb\x72\x66\x99\x7d\x75\x93\x39\xf3\x21\x78\x08\xbe\xae\xbf\x2d\xc4\x23\xd7\xcc\x7b\x24\x1b\x49\xf7\xfe\x95\x31\x49\x4b\xa8\x2e\xab\xa8\x2c\xa3\x34\x30\x28\x18\x96\x8e\x4d\x6e\xf1\xf4\x99\xd4\x3a\x9f\x7e\xf1\x05\x14\x60\x75\xdb\x96\x5f\xf5\x71\x1c\x40\xb2\xbc\x59\xb5\x58\xe5\x15\xdf\x6d\x49\xd6\xec\xbe\xaa\x1b\x84\x7a\xd7\x40\x56\x1d\xba\xf1\x75\x59\x6b\x31\xac\x94\x0b\xd7\xa2\x00\x93\x7d\x99\xad\xfc\x56\xdb\x3c\xd3\x57\x1b\xe3\xc1\xcd\x4a\xf2\x15\x43\x33\x21\x03\xf1\x73\x91\x79\x8d\x74\xbf\x87\x55\xd4\xbd\x38\x15\x71\x50\x69\x81\x6c\x51\xcc\xaa\xa3\xea\x1f\x96\x64\x6c\x57\x21\xa7\x32\x78\xe2\xca\x0a\x50\xeb\xff\x5e\x63\x2d\x9c\x42\x54\xe2\x69\xad\x21\xe9\xff\xf4\xd2\x25\x3a\xbf\x6c\x72\x31\xeb\xd4\xa8\xca\xa7\xb3\xae\x7a\xd3\x69\x09\xa0\x9a\x48\x95\xeb\x5e\x9e\x73\x6e\xb7\xe6\x8b\x64\x2c\x24\x64\x55\x59\x85\x4e\x91\xde\x27\x7b\x1c\x12\x24\x7b\x60\x1d\x8e\x31\x69\x6b\x50\xcf\xff\xab\xad\x00\xa3\xc5\xee\xd8\x94\x81\xd1\x06\x2a\x6a\xc1\xdc\xac\x8d\xd4\x02\x5b\xd5\x31\xda\x74\x72\x40\x4d\xd8\x4f\xfa\x51\x98\x0b\x6f\xaf\x4e\x0a\xdb\x30\x26\xdf\xc7\xb3\x19\x8c\x83\x64\x37\xce\x6c\x92\x1d\x84\xe3\x3f\xd3\x43\xf1\x1d\x1c\x6b\x2b\x58\xbd\x22\xf5\x79\x3b\xf5\x44\x8b\x10\x24\xf1\x15\x52\xed\xe5\xf3\x27\xef\x5e\x97\x68\xc7\x78\x5f\x46\xb9\x64\x37\x41\xfe\x82\xa0\xbe\x3e\xd9\x0e\x88\xf9\x0e\xc1\x80\x9f\xd7\xc9\x22\x0c\x6a\xd3\x85\x36\xde\xed\x57\x87\xe9\x50\x0c\x54\x68\x69\x01\x3a\xb8\xee\x52\x4c\xeb\x5a\x96\x36\xa9\xc5\xa4\xa0\x24\x6e\x58\x6c\xc3\xe4\xd5\xe7\x8f\x93\x1f\x9f\x9f\xd9\x01\xe2\x5d\x9b\x37\x5e\x56\xfe\xb0\x73\x23\x7f\x10\xf9\xab\x02\xe2\x3d\x75\x22\x07\x88\xa0\x49\x98\x70\xa3\x18\x0f\xc3\xb7\x28\xb5\x62\xc3\x10\x5b\x78\x8a\x3b\x72\x55\x56\x6c\x9d\x4d\x37\xe2\x8d\x30\x72\x4e\x97\xbf\x46\x8f\xf6\xbf\x7f\xb4\xa1\x91\xd3\xce\xb4\xf9\x5e\x43\xe3\xba\x46\xc3\x66\x9e\xe2\xf5\x85\xc1\xd6\xb4\x14\x6e\xc7\x26\x5a\x78\x50\xc3\x88\x06\xee\xc7\x58\x16\x5f\x66\x2d\xca\xf5\xac\x0d\xed\xe4\x2b\x7e\xca\x9a\xa5\x7d\x6c\x6e\x84\xcd\xab\xeb\x35\xa5\x6d\xd4\x3d\xc2\xd5\xdd\xcd\xf5\x6d\x7b\xf3\xa9\x93\x37\xa1\xa6\x9b\xc6\x68\x43\x6d\xc6\xc3\x32\xa5\xe7\x76\xaa\xd8\x36\x5b\x53\xd5\x3f\x75\xec\x2a\x12\xb2\x6a\xa1\x1d\x33\x60\xc1\x4c\xcd\x32\x84\x92\x38\x14\x53\x58\x99\xcc\x5c\xf7\xfd\xc6\x05\x5e\xac\x24\xa6\xab\xb5\x93\x9a\x88\xd4\x4a\x17\xbd\x33\x98\x6e\xd1\x60\xda\xdd\x26\xea\xda\x70\x5a\x84\x1e\x6c\xb2\x9c\x26\x45\x9c\x4c\x8b\xcd\xd7\x95\x01\x35\x37\xd6\xb5\x2d\xa8\x96\x84\x6e\x5b\x1d\xbf\x00\x97\x58\x05\xb2\x9e\x22\x4a\x58\x69\x6f\x5b\xad\x37\xbe\xb6\x71\xf5\x0a\xcc\xab\xeb\x1b\x58\x37\xbe\x38\xb3\x7f\xaf\x33\x90\xc5\x0e\x6c\xac\x39\x2b\xab\xe2\x9f\x2d\x4c\x63\x4d\xe6\x96\x1b\x59\x6c\x7d\x0b\x2b\xd5\x99\xb9\x35\xed\xf1\x0a\x8c\xad\xf5\xe6\x56\x4d\xcb\x55\x83\xb0\x1a\x75\x36\xe2\x76\x56\xd7\xeb\xdc\x5a\x2d\x6d\xaf\x1d\x59\x5f\x3b\xb7\xbf\xe6\xf8\x62\xe7\xe6\x57\x1d\x63\xba\x1e\x67\xac\x11\x85\x6c\x43\x03\xec\x95\x98\x60\x27\x88\xd2\x30\x9e\x30\xee\x43\x28\x0a\xba\x25\xa6\xbd\xf9\xb5\xa3\x6d\x7f\x6d\xb6\xda\x66\x33\xab\xd5\x7b\xb6\x61\x6e\x35\xd8\x4b\x36\x32\x73\x09\x6c\xea\x6d\x5b\xba\x1e\xfd\xfe\xf2\xe7\x83\xe0\x55\x45\x5c\x3e\x94\x75\xf2\xd6\x32\x6c\xe5\x82\x56\x39\x5c\xe6\xd6\x0c\x5c\x82\xd6\x6b\xda\xb8\x1a\x2a\xbf\x9b\xb2\x8e\xcb\x18\x39\xed\xcc\x69\x73\x82\x3f\x2f\x4d\x81\x77\x76\x2d\x55\xd5\x23\xcb\xb0\x3d\xb6\x0c\x8a\x46\x16\xf5\x93\x3b\xb6\x2f\xd9\x58\x97\x4a\x15\x93\x0d\xf7\x48\x29\x31\xd5\x46\x48\x6c\x53\x29\xd9\xb5\xac\x92\x5c\xe6\x5a\xed\xe2\xe7\x4b\x65\x5b\x73\x01\xf4\xef\x0b\x7c\xb5\xbe\x48\xf0\xa6\x63\x10\x00\xf8\xa5\x81\xa8\xca\xb5\x3d\xb7\x1c\x9e\x2e\x7f\x2b\x44\xa8\x7b\xd5\xe3\x2d\x73\x30\x8b\xfb\xbf\x23\x65\xcd\xc6\x5c\x68\x98\x63\x35\xf8\xaf\x89\x1d\xe7\xd5\x6d\xf4\x59\x60\xd2\x15\x4f\xb1\xba\x53\xb4\x0b\xc6\x50\x60\x40\xef\xe9\x34\xe4\xb8\x04\x5a\x73\xe0\x7e\x77\x1e\xd2\xe9\x8b\x78\x8c\x8b\x77\x95\x50\x85\x3b\x27\xb3\x45\xf9\x67\xd7\xa2\xc4\x93\x5b\x55\xcc\x47\xed\xb4\x6a\xd0\x30\xd7\x58\xb1\xa7\x65\x94\x6a\xa9\xe0\x83\x71\x43\x17\x41\xcf\x9a\x77\xbe\x69\xc7\x57\x6d\x91\xb5\x69\xf4\x1a\x07\x57\x4e\xa0\xac\xa4\x70\x11\x67\x0d\x07\x28\xab\x68\xde\x40\xa1\xfc\xc3\x2d\xa9\xd4\xc5\x76\x6d\x54\xdd\xca\xb6\xc8\x32\x7e\x8c\x56\x3d\xd8\x34\xbb\xec\xe7\xd6\xe6\x46\xbb\xf2\xc7\x0a\xbd\xa1\xa9\xe0\xb1\x7a\xae\xb1\xc4\x71\x8d\xc4\xac\x65\x10\x6d\x4e\x7d\xeb\xd2\xc7\xee\x4d\xaa\x15\x9f\xde\x0d\x99\x1c\x69\x59\x32\xde\xae\x65\xb1\x2c\x7b\x3e\xfc\x40\xee\xad\x9f\x43\x19\x90\x3a\x43\xc9\xb4\x3f\x81\x14\x9d\xc3\xe5\xba\xa5\xd0\xe5\xbe\xa9\x28\x38\x5f\x1e\x35\x4c\x9f\x6f\x35\xd9\x52\x33\x43\xfd\x76\x2d\xad\x4e\x09\xbd\x6d\x67\xf3\x96\xb5\x73\x38\xcf\xb3\x9b\x8e\x7c\x51\x9b\xa9\xe4\x9a\x1c\x17\x10\x7f\xec\x87\xfa\x01\x4e\x12\x67\xc7\xe1\xf2\xb9\xdd\x58\x6d\xca\xbd\x37\xb7\xb2\xab\xfa\x6e\x53\x6c\xbc\x7d\x14\x54\x47\x3a\xb7\xa6\xc2\x75\xa0\x76\xef\x42\xed\x08\x6c\x55\x01\xdf\xfb\xf6\xf9\x13\xfa\x74\xf9\xa3\x59\x01\xa7\x70\x32\x41\xc1\x93\x54\x0d\x57\x35\x70\x94\x62\x6e\x5d\xe6\x46\x3f\x8b\x5b\x29\xfe\xfb\x41\x9f\x49\x5d\xd1\xba\x22\xe6\x95\xb1\xac\x4d\xfb\x4a\xc0\x55\xef\xef\xc8\xf7\xd6\x49\xb9\x9b\x0f\x70\x52\x6d\xce\xab\x6c\x95\x4a\x01\x1b\x14\xcd\xb2\x9a\x63\x6d\x7d\x17\xb9\xf0\x4c\xfd\x70\xf3\x0b\xc2\x21\x3a\xf6\x4b\x05\x0b\x5a\xa1\xbf\x5a\x14\xa2\x70\xb3\xa0\x0d\xfd\xc5\x7b\xe5\x4a\x09\xea\x56\xab\xc2\x78\x93\xdc\x97\xfb\x3d\x2b\x85\xbd\x92\x94\x07\xca\x6d\xdf\x62\x42\x4b\x0d\xe5\x97\xb6\xf8\x6f\xa2\x68\x8f\x11\x30\xb8\x27\x6f\x1b\xa9\x5b\x37\xc5\xfb\x15\x89\x55\xbf\xcd\xec\x09\x5e\xa2\x93\xc6\x35\x86\xf9\x87\x14\x41\xaa\xeb\x2a\xb8\x0d\xf8\x80\x0f\x2a\x8a\x9a\xac\x15\x21\xbc\x29\x28\x7f\x63\x59\x6e\x0d\x08\x1f\x06\x41\x28\x20\x7a\x9d\xf4\x2e\xae\x2a\xcf\x5d\xe7\xf4\x2a\x3e\xd9\x21\xb6\x7b\x0d\x97\xec\x8c\xef\xe6\x04\xe0\x2d\xb3\xde\x07\x8b\xb3\x57\xbf\x7e\xf3\xfd\xbb\xcd\xca\x6e\x8b\x19\xf5\xb3\x02\x92\x5b\x2a\x20\x97\x37\x42\x6c\x50\x94\x48\x0e\x4c\x0d\xbb\xde\x20\xf1\x50\x11\x80\xcf\xbf\x22\x1d\x8f\x2d\x72\xa2\x42\x23\x9b\xc2\x7b\x78\x47\x6c\x22\x59\xdc\x66\x39\x13\xb2\x34\xd1\x62\xd0\x8f\x10\xd8\xd3\xa7\xde\xca\x3f\x9f\xf3\x91\xb8\x40\x2b\xa6\x64\xb2\xb1\x6d\x08\xc5\xda\x58\xab\x3f\xb5\xb6\xcb\x7a\xfd\x69\x98\xb8\x50\x46\xc5\x5e\x6a\x79\x3b\x34\xec\x8b\xd7\x38\xb8\x41\x9b\xa2\xd3\x9d\xa0\x4d\xed\xb8\x52\xc1\xd9\xc6\xb2\xc6\x38\xd8\x6c\x4d\xaf\xff\xc6\xd7\xef\xe7\x8a\x4b\xff\x5e\xeb\x4b\x3f\x55\x47\xb7\x7c\xe1\xbf\x9c\x7f\xff\xf3\x37\xf0\x8d\xb9\xca\x87\xf5\x85\x3f\xe3\xde\xb5\x2b\xbd\xe7\x6b\x4e\x5c\xfe\xad\x13\x03\x28\x7a\xe6\xd5\x78\x60\x50\x30\x92\xf2\x76\x6a\xb8\x39\x78\xa3\x75\xef\x0c\xae\xc0\x4d\xca\x57\x40\xb5\xa7\xa3\xfd\xd1\xbc\xad\xb5\x91\xd8\xf2\xd5\xd5\xd1\xd8\x48\xb6\xb5\x2c\x15\x64\x36\xb4\x37\xee\x3c\xcd\xc0\x64\xbf\xfb\x5e\xc9\x83\x63\x51\x29\x44\x79\xb0\xad\x61\xb1\xd9\x45\xa4\x06\x55\xc7\x70\xea\x8d\x04\xb9\xd7\xfe\x83\x36\xa5\x81\x77\x29\x62\xde\xbc\x0d\x7a\xad\xfc\x30\x25\x43\x57\x0a\x90\x14\x4c\xb7\xcb\x08\xff\xe7\xb7\x70\xfc\xcb\xc7\x07\x9f\xd7\x66\x84\x5b\xd0\x6f\x94\x44\xaf\x44\xf9\x8f\xf3\x84\x12\x04\xd7\x86\xe2\x69\xb8\xe1\xf8\xeb\xfa\x8b\xf4\x25\x6d\x2e\xba\x8f\x7a\xab\xfa\x68\x00\xf5\x82\xbe\xda\x20\x15\x2a\x54\xae\xec\xc7\x71\x33\x4d\x8e\x65\x86\x01\xaf\xff\xc1\x3f\xc5\x69\xae\x7d\xe9\xb2\xb7\xab\xec\x61\xbb\x30\xa9\x8e\xf5\x16\xd2\xe9\x95\xae\x8e\xd4\x2b\xfb\x73\xfe\xa2\x36\x2b\x24\xc6\x18\x38\x69\xcb\x0a\x87\x7c\x83\x79\xc7\x19\xe3\x28\xc2\xe7\x61\x3c\xe1\x99\x79\x3c\x78\x8a\x5d\xa5\x41\x78\x16\x06\x0b\x18\x39\x3f\x7d\xf8\xf0\x56\xbc\xc4\x91\x83\x75\xe8\x94\xe0\xc5\x64\xea\x3c\x8f\xcf\xf0\x92\xa3\x49\xab\x88\x90\x2c\xf8\x39\x0a\x4f\x91\xf3\x96\xe0\x19\xa2\x53\xb4\x48\x06\x0e\x8f\x08\xe5\xa5\x12\xe1\x09\x5e\x50\x51\xc0\x21\x8c\x9d\x52\x11\xc2\x2a\x05\xc3\xb4\xf7\x74\xf2\x55\x6c\xbb\xcc\xcf\x60\xb7\xd8\x35\x56\xd2\x4e\xb6\x9d\x74\xc6\x9b\x37\x60\xb3\xe9\x03\x54\x35\xb5\xd2\x8e\xd7\xdb\xb6\xd6\x7b\x52\xf8\x31\x85\x02\x56\xb3\x78\x57\xae\x59\x3f\xe2\x81\x82\x48\xda\xc3\xab\x09\x7c\x5c\xb4\xb5\x18\xf5\x70\xa3\x3a\x6e\xbf\xfa\x95\x1a\x70\xc7\x7c\x9e\xcf\x61\x53\x26\x2f\xc3\x63\xb6\xca\xda\xf7\x5f\xfd\xf5\xd7\x37\x7b\x8b\x5d\x1b\xa0\xed\xf6\x61\xbc\x2a\xc4\x29\x1f\x15\xb5\x95\xa8\x5e\x46\xec\xdb\x13\xd1\xeb\x4f\x61\x18\xaf\x15\xd1\x1b\xf2\x98\x19\x19\xb5\xb4\x5e\x40\x70\x88\xd6\x6b\x2b\xc3\x4c\xde\x6b\xb9\x0d\x2d\x42\x8a\x95\x51\xb3\x29\xa2\xd8\x42\xe1\x59\x0b\xee\xb3\x26\x57\xfd\xa0\x11\x85\xfb\x56\x23\x70\x6f\x12\x41\x5c\xd6\xb6\xae\x03\x80\x7b\xed\x48\x5c\xd3\x85\x74\x65\x81\xb9\xe6\xa0\xd0\x8d\x83\x74\xcd\x21\xa4\xa5\x80\xdd\xcd\x57\xa2\x36\x58\xb7\xa4\x7b\x99\x0b\x99\x65\x04\xaf\x0d\x49\xb3\x02\xbc\x58\x3f\xbe\xaf\x2e\x54\xce\x30\x42\x8a\xc8\x2c\x8c\x21\xcf\xd8\xda\x30\x76\xee\x65\x18\x9f\xa2\x20\x3b\x44\x8d\xd1\xf3\xa5\xd3\x58\x1b\xc2\x65\x6c\x51\x1d\x37\x67\x4b\x80\x30\x9e\x30\x39\x7c\xd3\xc9\x6b\x3a\x77\xe3\xb4\x75\xd5\xd9\x72\xde\xa5\x26\x86\x89\xdb\x0f\xf6\x85\x94\xed\x6c\x06\x1b\xa6\xcf\x5a\x0f\xb6\xd4\xc4\x10\xc7\x69\x7d\x84\x3a\xdc\xa0\x2f\x32\x79\xc1\x66\xde\x99\x70\x61\x3f\xf1\x62\x9b\xfa\xb8\x4e\x21\xfa\x00\xf7\xa9\x14\x81\xda\x4e\xe8\x1d\x5e\x30\xba\x58\xcc\x86\xc8\x27\xad\xa7\x52\x68\x50\x7b\xce\xf4\xca\x8f\x55\x0b\xb9\x41\x58\xa8\xc5\xf4\xa4\xbb\xc7\x72\x6e\xfa\xd3\xb9\x89\x55\x6a\x66\x16\x7a\xd8\x95\xe3\x8c\x97\x3d\x02\x0b\x12\xf1\x04\xc4\x42\x16\x46\xbd\xf5\xfd\x90\x1d\x29\xa1\x35\x04\x7d\x18\xfb\x53\xa6\xf7\xaa\xa5\x90\x4b\x70\x06\x79\xc1\x2b\xa2\xca\x23\x1a\x5f\x66\x5a\xca\x67\x90\x42\x1f\xc5\x94\xc3\x7f\xa4\x1c\x5b\x75\x11\xf8\x15\xcd\x5e\xa7\x01\xfc\x4d\x0a\x95\x10\x2a\x5c\x25\x90\x54\x50\xeb\xcd\x1c\xc5\xce\x33\x98\x4c\x4f\x30\x24\x41\xc3\xe2\xdd\x10\x8c\x6c\xc7\x32\xd0\x78\x4b\x61\xc6\xa9\x4e\xb9\xa1\x11\x60\x37\xd4\x78\xcf\x76\x91\x14\x7f\x3d\xf8\x6f\x70\xf8\xfd\x89\xd9\x1c\x90\x22\xd7\x59\x3b\xbf\x75\xae\xb7\xcd\x48\xa7\x0d\xec\xca\xb2\xaa\x7d\x71\x66\x65\x5c\x2d\x9e\xa4\x2f\x8a\x95\x70\x83\xd9\x09\xfe\xec\x1a\xe1\xb6\xdc\x16\x40\x55\xd7\x06\x3c\xd5\x0e\xec\xc9\xed\x16\xf0\xe8\x45\x96\xde\x6e\x42\xaf\xbf\x01\xf8\xf1\x0a\xf5\xc8\xec\x77\x61\x82\x01\xbf\x33\xb2\x8a\xea\xc0\xfd\x2e\xb5\xa5\x54\xe4\x5d\xb8\xb9\xd2\xba\x07\x1c\x8e\x0a\x05\x6f\x0d\x16\x98\x2a\xa7\xe8\xfe\x3a\x00\x5b\x96\xc8\x49\x1b\x79\xa5\x3b\xf5\x4b\x5b\x7b\xa6\x0b\x01\x13\x29\xc1\x2d\xa3\x99\x37\xc7\xab\xb0\x7c\xc4\x82\x73\x5e\xb5\xc7\x3a\xcf\x76\x3a\x62\x62\x9a\x26\xb1\x55\x2e\xf6\xeb\x3c\x7e\x9b\x3c\x1f\xcf\xed\xfc\xd5\xf5\xc2\x45\xc7\x04\x57\x24\xea\x98\xe2\x37\xa2\x68\xe7\xe1\x5f\xe4\xef\xbf\xdf\xed\x3d\xb4\x23\x7b\x76\xb7\xa6\xd3\xe8\xab\x42\x6c\xe2\x9e\x90\xd5\x44\x94\x37\x5b\x9a\xe2\xe1\x82\xe2\x71\x18\x45\x92\x4d\x2e\x4e\x66\x21\x4d\xd9\x64\xe6\xf1\xce\x7b\xb3\xa5\x99\xba\x2c\x65\xbf\xe7\xc6\xbb\xbc\xac\x9d\xe4\x8d\x75\xac\x11\x25\x30\x4e\x78\x40\x7e\xb3\x6a\x3c\x10\x59\x57\x15\x0a\x53\xf7\x5b\x69\x93\x5a\x71\x95\x7d\xde\x08\x5c\xe5\x57\x3f\xbc\x3c\xff\xe6\xaf\x6f\xdf\x54\xa0\xcd\xcc\x43\x17\xb8\x01\x8a\x43\x0d\x56\x59\xc7\x57\x36\x6d\x39\x11\xf0\x85\xb9\x89\xb9\xe4\xc3\xc8\x95\x14\xde\x55\xc2\x48\x1a\x09\x01\xb2\xef\x84\xd6\xe6\xea\x14\x1b\x63\xa2\xa4\x84\xf4\xb1\x24\x5a\x4c\xac\x52\xc7\x6c\xd8\xb6\x70\x29\x59\x40\xad\xf0\x27\x0b\x40\x87\x9a\xfb\x4a\xa0\x60\xaa\xee\x3a\xb6\x19\x73\xd2\x06\x6d\x12\xe6\xc5\x72\x09\xdf\xb3\xfb\x44\x0a\xb6\x6c\x59\x97\x19\x64\xa7\x88\x1d\x6c\xf0\xab\xaf\x03\x1f\xed\x16\x0b\x49\x3f\x89\x22\xa7\x57\x78\xb1\xae\x3a\x64\x45\xa0\xcd\x30\xd0\x1c\x50\xd2\xd4\x2b\x3e\x77\x54\x91\xea\x64\x71\xa2\x17\xc3\x2e\xbe\x42\x62\x7f\x96\xa1\x82\x9b\xde\xad\x68\x96\x7b\xf5\x33\x14\x2f\xd5\x8c\x72\xbd\x96\xbb\xab\x00\xa6\x16\x0b\x64\x07\x4d\xad\x09\x6b\x15\xfa\xa0\x66\x0c\xb4\x55\x08\x1b\x3a\x6e\x0c\x8d\x2e\x88\xa4\xec\x3e\x83\x51\xba\x75\x25\xae\x1a\x37\x37\x49\xef\x64\x7f\xbd\x72\x29\xeb\x80\xe5\xe8\x7c\xa3\x50\xf3\x6e\xfd\x8a\x77\x96\x22\x6d\x95\xd2\x5c\xb1\x2f\xdb\x01\x55\x5e\x99\xf6\x5c\x58\x4d\x7b\xb8\xe7\x9b\x82\xf0\xac\xb2\x1b\x8b\xd0\xce\x0f\xd6\x82\x76\xd6\x4f\xe7\x15\x28\xfa\x05\x6a\x6f\xac\xf0\xa7\xdb\xdd\xad\x70\x4c\x15\x68\xa3\x30\x9a\x73\x86\xf6\x1c\x53\x00\xd5\x5c\xa4\xba\xb7\x3a\xc6\xb2\x36\xe6\xb2\xa5\xda\x6b\x0d\x6b\x52\xa4\x7d\x51\x5a\x6e\x28\x66\x07\x74\xbb\x84\xe4\xfc\x87\x99\xb1\x81\xa0\x31\x41\xc9\xb4\xcf\x9f\x61\xb2\x52\xdd\xd5\xc4\xd5\x0b\xeb\x01\x6f\x6c\x3c\x68\x45\xcf\x76\xd0\xbd\xb9\xdb\xa9\xd9\xa0\xa0\xff\xcb\x19\x17\x32\xe2\xe8\xa9\xe4\x66\x03\xa4\xa6\x18\x9b\xa2\x0c\x5d\x01\xdd\xeb\x9a\x4a\x02\x8c\x31\x11\xd1\x9b\x72\x69\x8a\xb6\x8c\xfc\x94\xaa\x71\x3f\x1d\xfb\xd4\xfe\xb5\x1e\x6f\xf1\x70\xf9\xd1\xc3\x4d\x71\x46\x9b\x71\xe2\x6a\x52\xc3\x3b\xae\xe4\xb4\x5f\x59\x0b\xbc\x3b\x8d\xaf\x13\x4c\x51\xde\x29\x49\xbd\xa5\x5b\xd5\xf4\xce\x7e\xfb\xf8\x13\xfa\xf0\xcb\xff\x9f\xbd\x6f\x6d\x6f\x1b\xb7\x12\xfe\xae\x5f\x21\xf3\xd9\xd5\x00\x13\x88\x96\x9c\x4c\xb7\xa3\x0c\xc7\xaf\xe3\xb8\x1d\xb7\x49\x9c\xb5\x9d\x6e\xb7\xaa\xd6\x0f\x2c\x42\x36\x1b\x0a\xd0\x00\x90\x1d\x8f\xc4\xff\xfe\x3e\xb8\x91\xe0\x45\x17\x3b\x4e\x26\x99\x4e\x3e\x38\x14\x89\xeb\xc1\xc1\xb9\xe1\x9c\x83\xf8\xe3\x42\xed\x8a\xf3\xd9\xcf\x11\x6d\xa7\xb4\xc9\x44\x8c\xd9\x0d\xe1\x77\x5d\x7b\x6a\xed\xbc\xda\xcc\xd9\xf5\xaa\x23\xed\x8a\xce\xb5\xda\xda\xf7\xd8\x28\x64\x01\xf4\x28\x98\x53\x24\x33\xff\x95\x8d\x7d\xff\x3d\xfe\xeb\xdf\xbf\xe7\x3f\x7f\x1c\xea\xf8\xf9\xa7\x7f\xa5\x73\xaa\xaa\xfb\xe4\x47\xc4\x5d\x6f\x1f\x87\x90\xc7\x10\x4c\xf1\x5d\x9b\x93\x31\x49\x6e\x48\x5b\x72\x3c\x99\x24\xe3\xf6\x84\xb3\x69\x43\xb8\x81\x0b\x49\xd0\x7c\xc9\x8e\x3a\x6c\xbf\x22\x98\x53\x3f\xe8\x60\xcc\xe8\x24\xb9\x9a\x73\xd5\x8d\x2d\xe5\x82\x10\xea\xce\x8b\x1f\x9d\xa5\x9c\x52\x32\x96\xbb\x8d\x8e\x31\xa3\xd5\x19\xb4\x37\x66\xde\xb6\xf0\x13\x92\xcc\xba\x97\x4a\x94\x21\xb3\x5a\x9a\xed\xfb\x04\x51\xac\xb9\x3d\xa3\x12\xb0\xd3\xe4\x50\xbb\x32\x34\xe7\x3e\x01\x87\x1f\x21\x9b\x3d\x9a\x34\xb6\x95\xfc\x55\x92\xb7\x52\xe3\x48\xd7\x74\xa6\xd3\x0c\xf5\xc7\xcd\x09\xfe\x79\xe3\xeb\x4b\x04\xf6\x51\xa8\xb5\x34\x3e\x43\xbf\x2a\xa5\x7e\xf7\xf2\xf8\xe5\xc9\xfb\xe4\x4f\x1f\x47\xa9\x5d\x14\xfb\xaf\x9b\x37\xe5\xf7\x28\xf7\xdf\x70\x94\xfb\x67\xdb\xe2\x7a\xb2\x8f\xb1\xbd\xe7\x9e\xa7\xed\xaf\x9b\x24\xe9\x1f\x7f\x99\x9e\x92\x97\x5b\x1e\xbd\xae\xda\xe3\xa5\x38\xda\xdf\xb6\x38\x96\xfb\x48\xdb\x0b\x77\x72\x19\x0b\xcb\xd5\x32\xd9\xc3\x25\xaf\x47\x96\xb7\x6a\x8e\xe2\x8f\x20\x6b\x95\x02\x54\x1f\x28\x66\xe5\x71\xd2\xdb\x86\x47\xaf\x96\xb6\xd6\x86\x44\xff\xf6\xe5\xae\x7c\x2b\xfe\x1b\x48\x5c\xc5\x5c\x1f\x40\x93\xcd\x81\xea\xaf\x9d\xa9\x61\xd2\xef\x9f\x3f\xfb\x33\xb9\xef\x4d\xd8\xcf\xfc\x13\xe1\x66\xa2\x66\xa3\xf7\xdc\x34\x6b\xc7\xca\x7b\xc8\x3b\x53\xde\x7c\xc2\xf0\xf0\x65\xd3\xbd\x3c\x64\x85\xae\x09\x8e\x7f\xed\x05\xba\x65\x7f\x7c\xf1\xf3\xdf\x92\x5f\xb6\xe6\x8f\x36\xae\xb6\x72\xd5\xac\x5a\xaf\x29\x8b\x35\x35\x35\x25\x2a\xf9\xf1\x3f\x7e\x77\x28\x68\x3d\x04\xca\x29\xc3\xf1\x17\x60\x51\xbc\x7a\xff\x73\xef\xfb\x97\xb7\xdb\xed\x84\x87\x43\xc9\xce\xf6\x21\x80\xa2\x4c\x6a\xc3\xff\xaf\x0d\xa9\xdd\xc3\xbf\xf4\x3e\x5c\x8d\xb7\xb3\xbd\x3e\x1c\x52\x6e\xba\x0f\x02\x95\x75\x05\xfb\x75\x01\x75\xf8\xea\xc5\xdd\xf1\xeb\xef\x6e\x3f\xc6\xad\xf0\x23\xe0\xa7\x61\xf0\x10\xe8\x09\x73\xf9\xdc\xaf\xae\x1b\x7c\xff\xdd\xd1\x0d\x7d\xff\xfa\x6f\xdb\xc3\xaf\xe1\xf2\x7b\x3b\x95\xcf\x98\x45\xc0\x81\x6f\x7d\xf6\x80\xb5\x91\xed\xa6\x81\xc7\x08\x6d\xdf\x26\x3a\x3a\xd8\x18\x1b\xed\xc0\xf8\xc9\x82\xb8\xb7\x8e\xec\x59\x93\x2c\x8a\x32\x99\x8c\x49\x3b\xb1\x81\xcf\x5b\x27\x46\x79\xc5\xc6\x38\x6d\x9f\x49\xc6\xf1\x55\xa3\x6b\xcc\x76\x46\x72\xa1\xb4\x31\xbb\x70\x4a\x16\x4e\xa6\x53\x12\x27\x58\x92\xf4\xae\x2d\xf0\x0d\x89\xdb\x92\xb5\x53\xdd\x97\x30\x7d\xb5\x31\x8d\xdb\x33\xc2\x45\x22\xa4\x97\xb9\xe7\x92\xb3\x5b\x41\x78\x7b\x2e\xf0\x15\x59\xa7\xc4\x34\xbf\xf9\x2f\x73\xab\xfc\xa6\x04\x31\x93\x84\xa4\xb1\xf6\xc9\xd8\x94\x27\xa0\x7e\xc1\x70\x1e\x15\xd6\x7e\x95\xd0\xf7\x2b\x52\xc3\x6f\xa5\x3a\x1c\xc4\x71\x1b\x6b\x5b\xad\x82\x8e\x77\xa7\x6c\x3b\x26\x12\x27\x69\x5b\x6d\x67\xa5\x8a\xaa\x4f\xef\x8e\x55\xa1\x2b\x22\xdb\x3f\xcf\x93\xf1\x7b\xef\x6e\x57\xec\xaa\x75\x6f\x93\x98\xb4\xa7\x44\xf2\x64\x2c\xda\xb1\x1b\x67\xd8\x3e\xa2\x92\x70\xdd\x4a\xfe\xb2\xfd\xee\xf4\x55\x3b\xa1\xb6\x5f\x0d\x8f\xf6\x25\x49\xd9\x6d\xd8\xfe\x5f\x36\x6f\x8f\x31\x6d\xcf\x05\xd1\x1f\x67\x29\x1e\x93\x6b\x96\xc6\x84\xe7\x17\xfa\x8f\xf5\x75\x3c\x25\x39\x2b\x58\x2c\x8a\xe0\xbd\x2c\x0b\xaa\x12\x96\x5e\xf0\xb5\xd5\xad\x32\x19\x2a\xb2\xde\xd4\xc0\xed\x75\x32\xbe\x6e\xdf\x26\x69\xda\xbe\x24\x6d\x4e\xf4\xc0\xe2\xf6\x6d\x22\xaf\xf5\x40\xd5\x86\x6a\xb3\x89\x9d\xa8\x1b\x8a\x53\x5b\xda\xe3\x39\xe7\x84\xca\xf4\xae\x7d\x49\x94\xb2\xaf\x08\x10\x89\x37\x69\x6a\x45\xc6\x08\x13\x64\xea\x19\x02\xec\xde\x2b\xfb\x10\xd6\x22\x74\x19\x9d\x24\x7c\xaa\x4f\x5a\x47\xa8\xf4\xd3\x19\x08\xda\xda\x5d\x4d\x92\x0f\xb2\xe2\xce\x66\xcc\x3b\x3c\x15\x17\xa2\x88\x84\x5c\xe3\xec\x27\x66\xb8\x96\x1b\xe9\x95\x46\x2f\x4b\x9f\xb5\x87\xc4\xa6\xdb\x63\x57\x3a\xa3\x51\x13\xb3\xa3\x06\x34\xb4\x8d\x8c\x02\x0b\x0b\xeb\x46\x56\x32\xfb\x36\x44\x97\xea\xb2\xb9\x1b\xd9\xea\x94\x30\xb9\x9f\x59\x0e\x0e\x5d\xef\x3d\xb9\x9b\x99\xdb\x3a\x56\xd6\xd4\x3e\x4b\xf5\x6a\x31\xbb\xa5\xdb\xd7\x2a\xdc\xeb\xec\xaa\xac\x74\xad\x0b\x56\x5d\x20\x40\xc2\xab\xb0\x7d\x2d\xe5\x4c\x0c\x76\x77\xaf\x38\x9e\x60\x8a\x43\xf2\x01\x4f\x67\x29\x09\xc7\x6c\xba\x1b\xef\xf6\x77\x2b\xe7\x5c\x53\x22\xae\x3b\x8c\x5f\x25\x71\xd4\xef\x14\x18\x1c\x05\xeb\x37\x58\x0f\x05\x1d\xd7\x84\x5a\xa3\xa2\xfc\x86\x1d\xb5\xd1\x48\xb1\x36\x9b\xad\x0b\xda\xae\x99\xc0\xde\x1d\x5f\xbc\x3c\x3e\x3b\x78\xf1\xea\xe8\xe2\xf4\xe8\xe0\xd5\xf9\xf1\xeb\xa3\xc6\xf8\xe8\x8d\xa6\xc0\x8f\x21\xd3\x2f\x14\xc3\x55\xdb\xfc\xbf\xe7\x84\x27\xab\xb0\x7d\x15\x9d\xfe\x2b\x21\xb3\xf6\x18\x4b\x9c\xb2\x2b\xcd\x54\xdb\xf3\x59\x57\xb2\x6e\xac\x36\x91\x22\x38\x6c\x2e\xdb\xd6\x29\xcc\x5c\x20\x4e\x34\xb5\x0e\xdb\x07\xf4\xae\x6d\xb0\x57\xb4\xa7\x38\xd6\xd7\xb9\x17\xb7\x74\xeb\xab\xde\x34\x25\xf4\x5c\xa2\x6e\xd9\x5c\x53\x5f\xd5\xa0\xf1\xbd\x53\x44\x9f\x13\x9c\xb6\x65\x32\x25\xe1\xda\xa1\xaf\xcc\x1e\xa9\x69\x4a\xee\x31\xba\x86\x6a\x94\x09\xdb\xda\x7b\x37\x57\xd2\x84\x71\x9a\x10\x2a\x87\x97\x16\xe8\x39\x59\xd0\xde\xa9\x24\x0e\x6a\x89\x0b\x2c\x89\x30\xf5\x02\x2b\x1f\xe5\x44\xd2\xd6\xaa\xee\xe3\x07\x90\x8d\x87\x38\xca\x36\x51\xd2\xfe\xfd\x66\x70\x42\x03\x14\x9c\x4c\x26\x35\x37\xb5\x55\x34\xe4\x61\x3b\x72\xab\xd0\xd3\xad\x85\xd5\xcd\x1f\x1f\xa8\x8d\x95\x94\x82\xed\xf4\x31\x8e\xa9\x50\x92\x9c\xd8\xbd\x64\x2c\x25\x6a\x35\x0a\x7d\x0c\x05\xff\x8f\x28\xdd\x49\x6d\x47\xac\xf8\x7b\x82\xd3\xe4\x17\xc2\x77\xbb\x33\x9e\xdc\x18\x0d\xc7\xd3\xd8\x90\x7c\x80\xce\xb6\xb2\x82\x1d\x79\x80\x16\x84\xce\xa7\x84\xe3\xcb\x54\x55\x41\x57\x44\x0e\xf2\x3e\xe1\x82\x13\x39\xe7\xb4\x2d\xc3\x17\x66\xfc\xe7\x6e\x46\x59\x06\x37\xce\x39\x36\xf6\xee\xaf\x73\xc2\x2f\xb1\x24\xf7\x9a\x2d\x9d\xab\xb9\x7d\xb5\xf3\x7d\xa3\x87\x7f\xaf\x19\x0b\xc9\x2b\x56\xbf\xaf\x6a\xc6\x67\x7a\xf8\x9b\x67\x3c\x97\x49\x2a\x76\xf1\x38\x15\x5d\x97\x1c\x71\xa5\x51\xc5\x3d\xb7\xa5\x9a\x1d\xa2\x45\x77\x8a\x19\x92\xfd\x55\x83\x97\x6e\x8a\x14\x95\x07\xef\xce\xf5\xdc\xef\x5b\x9e\x48\xfb\x9c\xc1\x01\x19\xca\x51\x44\x11\xc9\x3e\xc2\x98\xe3\x0f\xff\x06\xf3\x36\x8d\x30\xbf\xd2\xa7\x71\x22\x34\xc7\x9f\x3f\xf6\x3b\x1d\x63\xf2\xd9\x89\x8a\x8f\xc3\xfe\x68\xdf\xff\x31\x78\xcb\xd9\x34\x11\xa4\x65\x67\x9c\xb7\xcb\x4d\xbb\x18\x31\x24\x22\x3b\xd0\xf7\xe4\x4e\x00\x0e\x87\xbd\x11\x4a\x22\x3e\x14\x23\x57\x4b\x82\x45\x22\x0e\xe6\xf2\x9a\xf1\xe4\x17\x12\x0f\x28\xb9\x6d\x53\x50\x82\x31\x2e\x86\x2c\xe1\x82\x00\x09\x33\xb5\x70\x89\x38\xa2\x0a\x32\x8d\x75\x58\x63\x9d\x0c\x09\x94\x84\x63\x2c\xc7\xd7\x5e\x71\x09\x17\xc9\x04\xc8\x50\x1f\x3a\x88\x4e\xc7\x3d\x0d\x7b\x23\xb8\x10\xb7\x89\x2a\xed\xbd\x0b\x0d\x52\xc0\xc5\x18\x0b\x12\x7c\xd7\xeb\x05\x83\x64\x02\x76\x54\x1f\xd0\x4e\x8a\x81\x9d\x3e\x44\x58\xff\xa5\x21\x27\x0a\x04\x40\xc2\x16\x03\x3b\x3d\xfb\xbe\x75\xc9\x09\x7e\xdf\xd2\x6d\x3c\xeb\x3d\x0d\x06\x2b\xbf\xf5\xf5\xb7\x7e\xf9\x9b\x5d\xcc\x81\xbc\xe6\xec\xb6\xd4\x9f\xcc\xcc\x20\x86\xa3\xac\xe9\x23\x84\xa1\xbc\x26\x15\x68\x15\xc3\x36\x43\xe8\x41\x44\x32\x08\x61\x96\xad\xdd\x21\x62\x4c\x3e\x95\x69\xbb\x4c\x33\x0c\x9a\x92\x50\xcc\xd2\x44\x82\x60\x37\x80\x0e\x7d\xa8\x43\x59\xb9\x4f\x43\x91\x26\x63\x02\x7a\xa8\x2b\x61\x68\x34\x5b\x10\x04\x30\xfc\x17\x4b\xa8\xae\x34\x08\x82\xf5\x13\x92\xec\xb2\x4c\xdd\x2e\xb1\x20\x7f\x78\xd6\xfd\x97\x78\x04\x3a\xf6\x09\x76\x60\x30\x97\x93\xee\x1f\x03\xc4\x23\xe9\x1a\x0f\x25\x7b\x71\x27\xc9\x01\xe7\xf8\x0e\x90\x02\x4e\xe4\xb6\x7d\x4e\x3e\xc8\x97\x64\xcc\x62\xc2\x01\x85\x61\xac\x1f\x01\x87\x6b\x61\x72\x29\x19\xfe\x4a\x61\xe2\xe6\x7c\x44\xf3\x39\x13\xfd\xe8\xc1\xa5\x80\xdb\x84\xb3\x69\x01\xb9\x0d\x50\x19\xe3\x74\x3c\x57\x52\x62\x77\xc6\x4c\xcc\x78\x19\x46\x86\x29\x5e\x62\x91\x8c\xbb\x31\x67\x33\xa5\xc7\xaf\xae\xfa\x05\xf1\x48\x5b\x7e\x03\x6f\x1c\xe3\x34\xd5\x01\x62\x46\x49\xf9\xb4\x04\xc0\x8d\x2e\x70\xaf\x82\x9d\x48\xf5\xcb\x26\x6d\xb2\x5f\x9f\x03\xc9\x06\x64\xfd\xda\xe9\x78\xca\xee\x24\xa1\x57\x84\xcf\x78\x62\xb2\x76\x6d\xc9\xe1\x1d\x72\xfa\x6c\x8d\xc0\x56\x32\x01\xf6\xcd\x15\x91\x27\xb7\xd4\xcd\xf5\xcc\x9c\x7d\x98\x5a\x3c\x5a\x57\x46\x35\x23\x3b\x1d\xc0\x23\x1e\x9a\x48\xb7\x32\x8b\xb2\xd3\x6b\x6c\xe2\x25\x11\x63\x9e\xcc\x24\xe3\x7a\x8c\x61\xb1\xd6\x8a\x8a\x23\x1a\xce\xe6\xe2\x3a\xc4\xb3\x59\x7a\x07\x28\xe2\x30\x73\x54\x21\xcb\x67\x67\xe6\xca\x38\x30\xf3\xeb\x3f\xa7\x3f\x54\x37\xe0\x73\xfa\xe4\x89\x65\xed\x91\xd2\xd7\x76\xbc\x5d\x48\xfd\x5d\x48\x47\x83\x45\xd6\xa2\xff\xb9\xb7\x2f\x2d\x58\x00\x86\x68\xa7\x07\xc3\x09\xe3\x47\xb8\xca\x7c\xf5\xa0\x11\x1e\xca\x91\x42\xba\xc1\x86\x19\x8a\x46\x99\x2a\x21\x02\x10\xb4\xa9\x2a\xc0\x10\x0e\xbc\x31\xad\x18\xd0\x6a\xa1\x6d\x13\xf4\x31\x92\x50\x4d\x22\xcb\x91\x31\x07\x30\xff\x0a\x05\x44\x87\xef\xb8\x4e\x8c\xf7\x1a\x89\xf1\x9e\x8f\x06\x7b\xa3\xc1\x5f\xce\x4e\xde\x84\x46\x6d\x48\x26\x77\x35\x49\x91\x29\x79\x4c\x4b\x5f\x0a\x9f\xa2\x28\x59\x2e\x13\xdb\xc1\x0f\x7d\x68\xc4\x17\x45\xc5\x8f\x94\xec\x05\x82\x77\x5a\xde\x6b\x4b\xd6\x36\x7b\xb8\xed\xed\x61\xd4\x9e\x26\x42\x24\xf4\xaa\x3d\x61\x9c\x24\x57\xf4\xaf\xe4\xae\x6d\xcc\xbb\xb0\xd6\x6f\x6a\xa6\x35\x47\xe3\x48\x38\xa1\x02\x05\x30\x9c\xe2\x59\x59\x30\xca\x47\x96\x0e\xc9\x68\xb9\x54\x7f\x3f\x7a\x7c\x3a\x61\x44\x3e\x26\xd5\xa4\xa6\x56\x51\x3a\x94\xa3\xe5\x32\xa7\xd8\x39\xe7\x06\x14\x2c\x32\x94\x42\x04\x38\x98\x47\x8b\x0c\x49\x14\x43\xc4\xc1\x1c\x11\x94\x98\x07\x86\x30\x18\xc6\x28\x19\x39\xb1\x67\xac\xb6\xfd\x5c\x0b\x70\xeb\x48\x61\x9c\xe4\x59\xaa\x3e\xb9\x0c\x47\x22\x12\x1e\x32\xc6\x63\x24\x23\x69\x9e\x5a\x05\xbd\xe9\x21\x1e\xf5\x9e\xf3\x1f\x48\xf8\x37\x32\x76\xf4\x86\x17\xf4\x46\xbf\x1f\xf2\x51\x57\xda\x87\x16\x7d\x12\xe1\x6f\x71\xa6\x3e\xb3\xe8\x35\x96\xd7\xa1\xf8\x99\x4b\x40\xe1\x13\x12\xfe\x44\x92\xab\x6b\xf9\x44\xda\x07\x24\x22\xf6\x84\x84\x07\xf1\xbf\xe6\x42\x2a\xdc\x7c\x22\xbd\x1f\x2d\xf1\x63\xaf\xd3\x01\x2c\x12\xf9\xa2\xe8\xe6\x38\x9b\xd3\x18\xf4\xc9\x77\xdf\x32\xb8\xdb\xef\xf5\xd6\x43\x92\x4d\x77\xc7\x69\x32\x7e\xdf\x9d\x24\x5c\xc8\x3c\xc1\xe4\xa7\x66\x8d\x1f\x25\x2a\xc9\xda\xc6\x90\x8e\x53\x3d\x54\xf8\x92\x3c\x40\x38\x92\xa1\x8d\x48\xa7\x2c\xd6\x06\xb6\x50\xb2\x57\xec\x96\xf0\x43\x2c\x08\x80\x2d\xab\x54\x61\xab\x43\x19\xfb\xec\x40\x3f\x1b\xb3\xae\x79\xc6\xf6\xff\xcb\xb9\x94\x8c\x06\x03\x33\x5a\xbb\xe4\x04\x70\xe4\xfa\x81\xe1\xcf\x73\xc2\xef\xce\x74\x0c\xb8\xda\x89\x38\x80\x2d\xd6\xe9\x50\xc0\x60\x96\x59\xbf\x05\x1f\x6c\xc3\x60\xca\xe6\x82\x98\xe3\x15\xf3\x3c\x9f\x19\xb3\xe8\xf8\x7d\x30\xaa\x13\x02\x4f\x8c\x7e\xad\x4a\x1f\xdd\x10\xaa\x04\x82\xc5\xe5\xfc\xf2\x32\x25\x42\x53\x66\xb5\x95\x52\x47\x97\x6f\x12\x72\x3b\xb8\x4d\x68\xcc\x6e\xb5\x30\xd5\xcc\x6a\x48\xe8\xe2\xea\x4d\x8b\x52\x73\x8f\xe6\x2b\x15\x7d\x4c\x63\x82\x88\x4f\x94\x0c\xaa\xbc\x6d\x25\xbf\x2b\xa4\x43\xdb\x2f\x20\x30\x33\x4a\x74\xce\xce\x36\xd0\x19\x35\x66\x23\x76\xa5\x89\x90\x84\x12\xbe\xbd\x51\x45\x53\xe1\x1d\x40\xf2\xfb\xc8\xd8\xa4\x2d\xa1\x47\x7d\xcf\xef\x66\xc4\x52\xe0\x43\x4c\x29\x93\x6d\x25\x9f\xb6\x71\x5b\x1f\x2a\xb4\xb1\x68\xe3\x1c\xc3\x03\x58\x12\x79\x54\xeb\x1e\x11\x7a\x4e\x7f\x90\x35\x61\x87\x47\x72\x48\x47\x2d\xee\x49\x55\x91\xff\x63\xb9\xdc\xe9\x23\x1e\xfa\x7c\x39\xda\xe9\xb9\xb3\xc5\x84\xb6\xb9\x92\xea\x42\xc7\xa7\x23\xa5\x5d\xaf\x5a\x1e\xae\x24\x4a\x25\xa0\x3d\x0a\xff\x36\xe3\x27\xf5\xcd\xdc\x6b\xdc\xcc\x3d\x7f\x33\xf7\x46\x83\xe1\xc8\xd7\x1e\xb9\x5a\xf5\x96\x01\x88\xd7\x43\x0e\x4d\x02\x56\x52\xa3\xad\xbb\x93\x40\x5e\x27\x02\x11\x88\xd4\xff\x61\x8e\x2b\x91\xd9\xf4\x1c\x61\xc4\xdc\x98\x78\x44\x10\xc0\xd1\x70\xf1\x9e\xdc\x0d\x02\x1c\xc7\x01\x32\xd0\x28\xb6\x17\x52\xb2\xae\xb3\x45\x45\xaa\x49\x25\xa8\x17\x7a\x44\xe4\xf4\x08\x09\x71\x24\x5b\x24\x15\xa4\x9d\x4c\x80\xf4\x31\x8d\xa8\x4f\x21\x27\x53\x76\x43\xc2\xcb\x84\xc6\x40\x42\x5d\x52\xb7\x2b\x22\xd5\xb3\xde\xba\xaf\xec\x60\x03\x94\x44\x81\x29\x5f\x7e\xdf\x32\x30\x88\xa2\x48\x0e\xc5\xa8\xd3\x01\x22\x0a\x94\xde\x98\x44\x01\x9b\x4c\x02\xa8\x61\x9b\x46\xb4\x15\x58\x3b\x6b\x3e\xbc\xb4\xd3\x01\x69\x69\x5f\x7e\x3e\x39\x52\xc9\x1e\x0a\x8c\x66\x78\xf3\x92\xe2\x93\x36\x48\x4c\x55\x8e\x42\xfc\xa1\x0e\xc5\x48\xbf\x40\x0d\xaa\xe7\x30\xb1\xdf\x68\x96\x01\x82\x94\x5c\xa4\x68\x61\x0b\x47\xf5\xc2\xf3\x95\xfd\x12\x60\x08\xa8\x6b\xb5\x84\x46\x5a\x0d\x52\xaa\x48\x6d\x87\x30\xaf\xd0\x24\xa1\xf1\x31\x8d\xc9\x87\xe6\x0e\xa2\x28\xc2\x6a\x5c\xce\x66\xe6\xd5\x54\x92\xe4\x98\x00\x82\xfa\x70\xd8\x1b\x01\x25\x7d\x21\x83\x9e\x06\x1f\x6a\x18\xea\xba\xaf\x0c\x73\xfd\xe4\x5a\xcd\x73\xb3\x9d\xf7\x2a\x5b\xc7\xee\x41\x88\x48\x96\x8d\xa0\x62\x89\x3c\x9c\x71\x26\x99\xc2\x2d\x84\x21\xd2\x6c\x92\x23\xa6\x4a\x80\xb5\x5a\xbf\xa2\xe2\xfe\x05\x31\xbb\xf9\xd9\xe1\xbd\x48\xb9\x11\xa8\x89\xb5\x95\x2e\x0c\x4d\xa1\x88\x23\x5c\x61\x3d\xeb\xcb\x2e\x32\xc4\xaa\x6a\xb8\x22\xe5\x46\x8e\x64\xbe\x0c\x49\x23\x36\xe4\x23\x24\x4d\xd6\xbe\x93\x09\xa0\xf0\xc7\xa8\xb7\x5c\x02\x3c\xa4\xa3\x88\x0c\xe9\x28\x07\x2a\xce\x74\xdf\xdb\x29\xf4\x6c\xa3\x42\x7f\xcf\x01\xd9\xe6\xf2\xf5\x51\x4f\xba\xc9\x63\x71\x94\x6f\xde\x50\x71\x37\xbd\x55\x3a\x1d\x6f\x06\x59\x3e\x83\x47\x14\x2d\xc5\x43\x05\x41\x0a\x20\x4a\x8a\xe6\xa8\x69\x2e\xd1\x98\x8e\xd2\x87\xb6\xba\xc8\xd0\x3c\x4a\x43\xeb\x12\xa5\xc9\x2b\x1a\x47\x12\xa4\x68\x18\xf8\x2f\x83\x11\x6c\x11\x6b\xef\xd0\x3d\x0e\xab\x13\x4b\x23\x62\x73\x71\x99\x56\xe6\x91\x42\xd0\x61\xe0\xbd\x0b\x46\x9e\x95\xd9\xb4\x95\xa0\xe1\x1c\x25\x23\x68\x8f\x10\x44\xcd\x96\x6e\x8f\x12\x7c\x06\xa2\x25\x13\x77\x30\x20\x0d\x02\x47\x4d\x4c\x28\xdd\x4f\x07\x0c\x02\x89\x08\x6c\xd1\x50\xbd\x5c\x2e\x01\x8d\x16\xea\x69\x10\x4c\x89\x10\xf8\x8a\x04\x28\xc6\x12\x0f\x68\x66\xe8\xb1\xb0\xde\xb8\x57\x44\x02\x1a\xaa\x4f\xcb\xe5\x22\xb3\x17\x52\xc3\x96\xe8\x74\x00\x51\xe0\x12\x8c\x47\x1c\x08\xfb\x88\xdc\x3b\xb5\xf4\x63\x3c\xbe\x26\x87\x8c\x4a\xce\xd2\x48\x94\x7e\x42\xd4\xed\x47\x51\x04\xca\x85\x96\xcb\x20\x80\x39\xe6\x06\x94\x75\x85\x64\x9c\x04\x0a\x1d\x93\xd2\xda\x44\x14\xa2\xa4\x22\xe0\x52\xc7\x48\xb0\x42\x61\x94\x84\x33\x4e\x6e\x12\x36\x17\xfa\x73\x0e\xf1\xca\xfb\xa8\xdc\x30\x9a\x5b\x41\x19\x8d\x47\x10\xe5\x88\x33\xef\x74\xf4\x72\x97\x07\x31\xb7\xd2\x44\x95\x51\x83\x80\xcd\x08\x0d\xca\xf4\xca\xa8\x0a\xc4\xe9\x2f\x57\x44\x1e\x7a\x6d\x01\xd8\xca\x3b\x93\x9d\x4e\x75\x6e\x66\x4c\xfe\x14\xec\x3e\x76\x74\x02\x0b\x91\x5c\x51\x47\x59\x0c\xae\x01\xe2\xd1\xe3\x85\xa2\xb9\x92\xcf\x95\x16\x33\xb0\x5b\x94\xac\x65\xd5\x19\x44\x8b\xca\x28\x9b\x0c\xbb\x55\xa8\x64\xe8\x8a\xc8\xb7\x3e\x88\x57\xd5\x2a\xad\x83\xea\x2e\xc9\x10\x09\x6f\x70\x9a\xc4\x58\x92\x43\x83\x5b\xf9\x66\x52\xc8\xfe\x02\x8f\xdf\xb3\xc9\xc4\xf7\x1a\xa7\x8f\x26\x94\x3e\x25\x4f\x91\xfc\xc8\x13\x4b\xd4\x20\xa3\x6e\x67\xcf\x12\x44\x9e\x27\x53\xc2\xe6\x75\xd5\xd9\x49\x9a\xde\x8e\xe4\x36\x5c\x4a\xc9\x14\x5c\x48\xbb\xec\xf6\x4c\x59\xf3\x98\xa2\x4b\x68\x75\xe2\x9d\x9e\x51\x8a\xb5\xa0\x88\x8b\x6d\xf6\x9d\xda\x5f\x4f\xf5\x3b\x33\xe2\x4e\x47\x9f\x3d\xaa\xba\x46\x4b\xee\x05\xea\xeb\xc0\x13\xd9\x65\x99\x32\xf9\x84\x0a\x2e\x24\xe0\x50\xd1\x7e\x8d\xb3\x46\x99\xe2\x59\xd6\x6a\x5c\x49\x5a\x95\xfb\xf3\x9d\xf2\x50\xf6\x30\x4f\x53\x44\xa3\x19\xe6\x82\x1c\x2b\x45\x5a\x43\x63\x27\x11\x6f\xf0\x1b\x40\xf3\x73\x54\x63\x65\x56\x5b\x8d\xfe\x20\x3b\x1d\x40\xa3\x1e\x44\xda\x38\x33\xc5\x1f\x00\x45\x7d\xa8\x06\x5c\xc1\x45\xde\x32\xeb\x50\xc7\xe7\x15\x0a\xbd\xc5\x8a\x32\xb0\x8a\x95\xae\x40\x4d\x01\x0c\xed\x91\xa7\x46\xce\x44\xac\xe1\xa4\xa2\x91\x64\x93\xcd\x2a\x72\x49\xb8\xd2\x24\xf7\xf3\x1d\xae\x3e\x70\x43\xac\xf1\x01\xa8\xbe\xc2\x88\x39\xa1\x82\x29\x89\xad\x84\xff\x5c\xab\x44\x2c\xcc\x7d\xae\x88\x39\xdb\x77\x98\x90\xeb\x4e\xaa\x60\xa1\x6b\xab\x86\x95\x76\x5d\x7b\x19\x2d\x32\x88\xea\xaf\xf3\xf6\xa3\xa2\x2b\x44\x74\x7d\xc3\x97\x92\x88\x59\xd6\x2b\x51\xaa\x3b\xd3\xc7\x88\x89\x1e\x7d\x2b\x97\xc3\x53\x58\xf3\x22\x28\x70\xca\xe4\xe6\x6b\xab\xca\xc5\xe9\xbf\xde\x67\xab\x8f\xde\xf3\xf9\x91\xca\x80\x0d\xa3\x36\x7c\x3c\x65\x82\x00\x85\x42\x79\xfb\xe6\x9c\x7e\x93\x95\xb7\x8e\x5a\xe6\xf8\xee\xf3\x98\x27\x1b\x0e\x0f\xee\x47\xad\xd9\x43\x91\x53\xa2\x06\xf9\xf5\x69\x63\xd5\xa7\x7e\xd5\xa7\xa3\x01\xf5\xa5\xd7\x7c\x93\x68\x59\x32\x79\xb8\xf4\xda\xb2\xc2\xbb\x6a\xc7\x4a\x25\x9c\xe0\xf8\xee\x4c\x62\x49\xa2\x3d\xf3\xc6\x2c\x52\xd4\x70\xdc\x29\x1b\x8e\x3b\x0d\x67\xb7\x98\x81\x43\x4e\x04\x4b\x6f\x94\xa2\x38\x90\xb5\x0e\x7a\x7e\x81\x2a\x2e\x5a\x33\x1b\xf5\x2a\xfc\xd8\x2f\x28\xb1\xdf\x4e\x1f\xd1\x8a\xe4\x63\x29\x9e\x16\xa8\x32\x88\x18\xa0\x28\x41\x5c\xa3\x7c\xc3\x3e\xa9\xd6\x56\xaa\x92\x71\x94\xf1\x60\xb1\xa2\x0b\x3d\xd5\x20\x6b\xda\x4d\xaa\x61\xbf\x89\x4f\x21\x8c\x25\x1b\x85\x31\x3d\x40\x5f\x98\x72\x1e\x44\xe5\xc5\x70\x5c\x5e\xf3\xee\xf6\xde\xa0\x86\x0c\x35\x47\x9f\xf2\xf7\xa7\xbe\x89\x23\x17\xcb\x6c\xe9\xd3\x39\xa5\x84\x97\xc3\xf6\x3c\x43\x9d\x35\x8c\xa9\xf5\xe6\x9e\xd7\x92\xb4\xa8\xe7\xcc\x5c\x80\x22\xd9\x00\xe4\x9c\x08\x9a\x66\x32\x08\x5b\x72\xc3\x5a\xb5\xaa\x23\x93\x55\xa9\xb0\xcc\x91\xb5\xf0\x61\x9a\xb2\x01\xe7\x68\xa1\xff\x1f\x10\x64\xb9\xea\x80\x84\xf6\x29\x83\x19\x2a\x8b\x26\x16\xe2\xa4\x0e\xee\x3d\x03\xee\xa7\x56\x4a\xda\xe9\x59\x28\xee\xf4\xef\x47\x41\x6b\xa9\xf3\xd1\x96\x36\xef\x35\x4d\x1b\x95\x63\x97\x8b\x9b\xd9\xda\x72\x65\xf9\x60\x73\x41\x77\x17\xf7\xc6\x82\x96\x34\xf0\xed\x7a\x77\x2c\x64\x73\x59\x45\x15\xb6\x2d\x5b\x98\x94\x36\x97\xb5\x21\x79\xb9\xbb\xcd\x98\x51\xa3\xe2\x8c\xcb\xd3\x25\xf4\xa6\xea\x62\x83\xb4\x0d\x09\xe9\xf3\x67\x94\xa2\x39\x1a\xa3\xd8\x33\x56\x4d\xca\x65\xcc\x29\x88\x11\x0f\xc8\x90\x8d\x80\x80\x28\x8d\x12\x93\x6f\xd9\x9e\x84\xcc\xcb\xac\x9c\x82\x39\xcc\x92\x30\x66\x94\xec\x4b\x90\x42\xc7\xcc\x72\xfa\x9b\xda\x9d\xc5\x11\xf6\x8e\x24\xa6\x4d\x26\x54\x27\x6b\x6b\xee\xe3\x49\x6a\xad\xb5\x32\xac\x6a\xd8\x5a\xa9\x72\x53\x08\xa2\xb0\x95\xf7\x25\xb4\x7d\x0e\x30\x3d\x4b\x05\x87\x80\x92\x0f\x32\x50\x1a\x41\x5e\x26\xa9\x95\xd1\x9a\x82\x2e\x24\xac\xf4\x66\x04\x61\xd5\xd3\xcc\x1d\xec\x3d\x40\x7a\x60\x74\x4c\x94\xde\xcd\xec\x4c\x22\xa2\x3d\xb2\x8a\x5f\x1a\xdf\x23\xe2\xd8\x63\x0e\xc9\x48\x93\xec\x0f\x77\x11\x09\x6d\x3c\xa8\x26\x1c\x67\xae\x98\x8b\xa8\x29\xbf\x3d\xb1\x38\x59\x7e\x7b\x68\xb1\xda\x7f\x6b\x26\x89\x40\x0f\xc5\x21\xa1\x37\x10\x78\xf1\x42\x2e\x4e\xe8\xe2\xf4\xdd\x9b\x37\x47\xa7\x01\xb4\x07\x9a\x64\x1c\x0c\x66\xab\x0c\xf6\x46\x3f\xb4\x20\x22\x1f\x24\xa1\x31\x58\x48\x2c\xde\x0f\x40\x0f\x8d\x43\xf5\x04\x01\x27\x57\x8a\x62\x60\xc9\xf8\xe9\x9c\xea\x78\x9a\x29\xe6\xef\x8b\xf5\x6d\xf3\x82\x14\x37\x14\xbe\xe5\x25\x1b\x32\x37\xc7\x5c\xcf\x9f\x3b\x35\x93\x6b\xbd\x3e\xe2\xa1\x5a\xf3\x9c\x17\x25\x13\xa0\x08\x28\x5c\x98\xf7\xd1\x77\x86\x09\x39\x56\x63\xdf\x3e\x45\xa4\xc4\x29\x08\x04\x12\xb6\x1c\x61\x35\x65\x7a\x9e\x0f\x6b\xfb\x3b\xa3\xa0\x12\x1a\xbb\x33\xdc\x36\x0f\x85\x64\x33\x00\x15\xe7\xd2\x3c\x04\x66\xd0\xf1\x60\xa8\x95\xe7\x40\x01\x22\x80\xe1\x8c\xf0\x09\xe3\x53\x00\x33\xdf\x2d\x36\x9f\x70\x09\xd0\xce\xb6\x30\xdd\x02\x7e\xa4\x72\x3e\x84\xf2\xfd\xb4\x19\x9c\xa4\x0a\x4e\x62\xc0\x49\xca\xe0\x64\x11\xc0\xd1\x36\x23\xb9\xc7\x4a\x6e\xd9\x75\x32\x01\x9a\xb5\x2f\x48\xe3\x4a\x12\xb7\x92\x75\x9e\x9f\xaf\x24\xd9\x6e\x25\x89\xb7\x92\x5a\xc9\x81\x00\xea\x9a\xc0\xb6\xb4\xa7\x06\xc3\x34\x29\xcc\x87\xf3\x7d\xe3\x70\xbe\x43\xcc\xd0\x54\xd7\x99\x50\xfb\x9d\x50\xa9\x54\x80\xbc\x55\x64\x4b\xef\xf9\x03\xfb\xbe\x18\x0e\xbe\xe4\xf3\x99\x04\x81\xf5\x1a\x44\xc2\x8e\xa3\xdf\xdb\x66\xf0\x75\x97\x08\x83\x25\x45\xf3\x85\x55\x39\xa7\xc4\x30\xcb\x40\xc9\x6b\x1b\x8b\x3b\x3a\x7e\x34\xd4\x7c\x74\xc4\x6c\x32\x8e\x34\x60\x42\x66\x01\x57\xc3\xa6\xff\x6a\x5c\xbe\x67\x08\xbb\x35\x7f\x36\x60\x6e\xe9\xec\xc7\xbe\xbf\x5a\xff\xb5\x7a\xb5\x98\x6d\xe1\x8f\x9f\x76\xb1\x34\xbf\xba\x8e\x40\x0f\x09\x27\x9a\x42\x40\xdd\x23\x72\xaa\xe7\x0c\xb6\x9a\xb9\xc2\xb5\x16\x60\x2f\x55\x03\x49\xd1\xc0\xb5\x2a\xde\xc4\x5a\x2e\x75\xf1\x1b\x55\x3c\x2d\x8a\x5f\xaa\xe2\x4d\xfc\xe9\x46\x17\xbf\x53\xc5\xe7\x6b\x86\xa7\xaa\x37\xf0\xbc\x3b\x5d\xfb\x4a\xd5\xc6\x45\x6d\x9f\xed\xbc\x55\x0c\x13\x99\x37\xda\xdf\xd9\xbc\xc8\xdd\x7f\x55\xc3\x86\xa9\x5e\xe9\xb6\x2e\x54\x5b\xac\x68\xcb\xeb\xdf\x71\xe1\x0b\x5d\xf0\xa4\x49\xa2\xbf\x00\x44\xb1\xcf\xa2\x75\x50\xd7\xdd\x0a\x07\xd7\x2b\x6d\x95\xd2\xba\x5b\xce\xec\x4f\x74\xe3\x47\x6a\x14\xbc\x68\xe5\x04\xdd\xf8\x90\x30\x02\xc2\x51\xab\x2c\x38\xac\xd0\x30\xae\x4b\x2a\x4d\x49\xbe\xd2\x9a\x56\x49\x9f\xb1\x5b\x42\x2b\xed\x25\xe7\x07\xe9\x34\xef\x5c\xcf\x24\x4d\x26\x1e\x00\x11\x05\x2b\x8c\x82\xab\x74\x64\x53\xe9\x91\xf4\x23\xc5\xd3\x33\xe8\x80\x5a\xc8\x58\x8f\x68\x08\x2c\x26\xd6\xe0\x3c\xb6\x9d\xcd\xc5\x4e\x65\xbd\x58\xeb\x59\x11\x7d\xe0\x60\x40\xf4\xf1\x17\xcc\x7c\xc3\x0d\x81\x0b\x06\x88\x09\xdd\xd1\x53\xaf\x9d\x01\x51\x24\x14\x43\xa9\xbd\xe7\x28\x81\xa8\x6c\xfa\x6d\x38\xb2\xb3\x36\xb9\x4e\xa7\x30\xce\x91\xb0\xc1\xf7\xc3\x75\xd3\xf4\x49\xf5\x54\xac\x8d\x16\x83\x1f\x71\x59\x2e\x7d\x68\x96\x36\x9c\x27\x91\x6a\x7e\xd3\x64\x9c\x5c\x61\x83\xa9\xe1\x30\xa2\xf9\x46\xd8\xce\xe2\x63\x1b\xb2\xb8\x6b\x51\xb7\xd2\x4e\x06\x91\x5c\x1f\x85\xb1\x46\xd3\xfc\xa4\x86\xcd\x8f\x3c\xc2\xf2\x68\x35\xaa\xb5\xfa\xe0\x23\x15\x6d\x5d\x6c\xe4\x77\xc6\x0e\x58\x36\x8f\xcb\xac\x88\x80\x79\x1c\xcb\x98\xdc\x68\x19\x53\xab\xb3\xb5\x61\xec\x69\xcd\xe2\x55\x92\x20\xf6\x06\xe5\xf3\x7d\xcf\x72\xda\x30\xdd\xc2\x3b\xc2\x59\xcb\xe4\xfd\x10\xcb\xda\x50\x3e\xf1\x61\x8c\x2f\xbb\x14\x04\xcf\x69\xf1\x0f\xc4\x8b\xe1\x08\x89\x88\x68\x2f\x33\x3d\x48\x47\x5f\x9d\x97\x59\x6e\x5d\x66\x5e\x73\xc5\x19\x26\xcb\x73\xe2\x42\xed\xb2\x46\x55\x4b\xf6\x3a\x3a\x16\xb1\x7a\xa8\x4a\xce\xa9\x76\x8a\x46\x08\x0a\x12\xf1\x92\x08\xc9\xd9\x1d\x89\x55\x4b\xf5\x8f\x29\x91\xe6\x53\xe5\xcb\x2b\x73\xdb\xa0\x96\xf7\x90\xe7\x42\x97\x8c\x3a\x1d\xa0\xfe\x8b\x44\xae\x45\x27\x34\x91\xcd\xde\x55\xad\x8a\x43\xa1\x62\xaf\x15\x47\x29\x1c\x1b\x1e\x1f\x5e\x58\x3c\x2a\xe8\x5c\x93\x9c\x62\x86\x29\xcc\x30\x5d\x2e\x2c\x25\xe4\x68\x2e\x04\x6d\xf3\x17\x62\x3e\x23\x7c\x85\x1c\x8a\xaa\x6c\x67\x50\xf1\xbd\xdd\x30\x40\x2d\x28\xa1\x35\xa7\xff\x7a\xfe\x76\xbd\x81\x75\x33\xb3\x95\x61\xd5\xb7\xc1\x8e\x91\x94\x06\xd8\xc0\xb0\xb6\x6e\xbf\xa1\x6e\x63\x1f\x25\xce\xb0\x75\xeb\x65\x01\xad\xa9\xdd\x9a\x21\x7e\x6d\x7b\xba\x74\x63\x3b\x55\xb2\xb5\xb6\x19\x55\xb8\xb1\x95\xdb\x24\x4d\xed\x0e\xf0\x1b\xdb\x88\x24\xa8\x74\xc0\x53\xc1\x08\x03\x62\x60\xb8\xa4\xda\x0b\x8e\x58\x2f\x2c\x42\x0e\x18\xb2\x43\x1b\x60\x54\x22\x89\x03\x5c\x26\x91\x59\xe1\x28\xbf\xb8\x1f\x6d\x2c\xcc\xc6\x5f\x32\xd3\x5d\x75\x50\xad\xe5\x20\xed\xdd\xd0\xaa\x86\x19\x16\xee\xc1\xd5\xbd\xa2\xc3\xf4\x1a\xbc\x83\x20\x32\x1e\x0b\x7c\xbf\x30\xf4\x72\x43\x11\x56\x1f\xfd\x4a\x8d\x34\xc0\x1c\xe5\xea\x58\x76\x5f\xde\x25\x8a\x27\x50\xb3\xf7\x5d\xf6\x5d\x54\x91\xad\x1c\x1a\xa0\xdc\x6f\xc9\xe1\x0b\x2f\xa4\x5f\x7d\xc2\x66\x9b\x69\x26\x6c\x7e\x43\xa0\x20\x64\xd9\xa6\x38\xf0\xd5\x86\xf9\xad\xdc\x42\x1d\x20\x80\x8c\x1a\x60\x6f\x9c\x29\x3b\x1d\x9b\x46\xb2\xfa\x21\x4c\xa4\x31\x88\xec\x37\x41\xd6\x4a\xe9\xd9\xa0\xc9\x99\xb6\xd3\x59\xd3\x9d\x3e\x86\x77\x22\x4e\x14\x45\xf9\xfb\x1d\xf7\x5c\x88\x43\xfb\x6e\x6c\x83\xbc\x43\x08\x48\x3d\xd0\xe0\x13\x85\x31\xf0\x2f\x39\x8c\x21\x1f\x25\xae\xba\xad\x77\x3a\xbc\x24\x53\x4a\x88\xa8\x7e\x87\xa8\xda\x0a\x79\x45\x56\xae\x08\x58\x14\xcc\xa9\xe9\x31\x2e\x84\x97\x53\x93\x83\xaa\xd3\xb1\x0f\x6a\x6f\xee\x7b\xcf\x83\xaa\x31\xbe\xea\xd0\xe4\x40\xf8\x7c\xa7\xe6\x84\x7b\x8d\x85\xe7\xdd\xeb\xdc\x6f\x25\xec\x74\xac\x7f\x12\x20\x51\xac\x54\xec\xe7\xf0\x79\x1e\xf7\x99\xbb\x11\xe7\x7e\x61\x9b\x62\x47\x39\x2a\xdc\x1f\xb1\x1e\xbf\xfe\x6b\xfa\xa3\x70\x80\xed\x79\x93\x42\x2e\x35\x87\xe5\xd2\xc7\x31\x91\xe3\x58\x93\xe3\x40\x3e\x54\xd9\x8c\x70\x67\x8a\x01\xb5\xc9\x07\x9d\xa6\x4e\x1f\x44\xcd\x85\x6c\x93\x44\x5e\x13\xde\xbe\x24\xda\x11\xab\xcd\x78\x09\x03\x5b\xa4\xae\x39\x58\xf6\x23\x3b\x1d\xb9\xd1\xab\xd1\x53\x0f\xaa\xaa\x83\x96\xd0\x3b\x9d\xc4\x98\x82\xfc\xd3\x28\x94\x0b\x60\x20\x71\x9d\x0a\x22\xdf\xba\xbe\x4e\x26\xcb\x65\x79\x51\x73\xc3\xcc\xc5\x85\x1e\xd1\xc5\x45\x24\x11\x31\x40\xf4\xda\x4e\x0b\x9f\xb6\xb2\x4b\x84\x87\x6d\x51\x05\xdb\x96\xcb\x1d\x87\x62\xf9\x0c\xa1\x3b\x50\x56\x6b\x5f\xfb\x1a\x8a\x6b\x3c\x2d\x15\x69\xa0\x41\xda\x18\xe7\x0a\xf5\x5a\x5e\x04\xd6\x4b\x2c\x3d\xa0\x87\x92\x99\x94\x36\x06\x45\x6a\x9d\x01\x55\x1c\x0d\x7d\xd2\x0b\x17\x5a\x8c\xde\xe9\xd9\x53\xcb\x42\x58\xef\x6b\x13\x76\xf3\xd1\x23\x45\x5c\x23\xb8\x1a\x6f\x1e\x11\x6c\x0d\x62\x3e\x9d\x6c\xd1\xa8\x3e\x08\x5e\x08\x33\x08\xc3\x4c\x07\xd9\xd0\x68\x85\xb4\xe3\x06\x30\x37\x1f\xa8\x4f\x41\xe6\x7e\x2c\xc9\x0e\x5d\x2e\x9d\x42\xa3\xd0\x1a\x50\xe8\xd3\xf3\x1c\xf3\xe9\xfe\x18\x10\x38\xf0\x02\xdd\xc7\x36\xae\xb7\xf0\xb8\xf2\xb6\xc4\x29\x99\x10\x4e\xe8\xd8\xed\x0b\x7d\x09\xc7\x35\x16\xf4\x1b\xd9\xbe\x24\x84\xb6\x95\x86\x91\xe0\x34\x11\x24\x6e\x77\xdb\x5a\x6e\x03\xb0\x54\x42\xad\x85\xd2\x57\x5a\xf5\x10\xf0\xd8\x63\x76\x71\x33\xf6\xee\x17\x54\xc2\x7b\xdb\xc8\xbf\x0a\x84\xce\x03\x07\xca\xb5\xb4\xcf\x99\xfa\xf3\x88\xce\x5c\x1f\xed\x7a\x5b\x77\x22\xa5\x79\x64\x96\xb7\x26\xcb\x25\x51\x3c\x44\x69\x7a\x35\x6d\x5e\x7d\x80\x9d\x4e\xdf\x7d\xf4\x6d\x07\x96\xd3\x15\xd6\x00\x50\xaf\x0f\x5b\xb2\x90\xce\x9a\xcd\x5e\x4d\x3e\x78\x4f\x9e\x20\x1a\x5e\x94\x5c\xcb\x57\xd8\xc3\x56\xf9\x2e\x35\xd9\x7e\xb3\xac\xb6\xe9\x08\x5c\x08\x90\x20\x02\xad\x3c\x9e\x82\xc4\x3b\xb6\x57\x44\xd0\xd9\x04\x8a\x18\x71\xe3\x99\x06\x11\x60\x91\x6c\xde\x5a\xb0\xec\x5e\xc5\xac\xa8\x18\x61\xfb\xb0\x5c\x9a\x60\x55\xc4\x42\x93\x8d\x33\x97\xe2\x58\x7e\xe6\x8e\x58\x78\x8d\x69\x9c\x12\x1e\x71\x63\x14\x1f\x03\x06\x21\x62\x15\xeb\x12\xae\xbe\x71\x31\x08\x7d\xc4\x9c\xb4\xcb\xf2\x80\x15\x90\x20\x1b\xc5\x57\x82\x5a\x43\xb4\x54\x32\x01\x4d\xab\xee\x42\xb1\x40\x0c\x3c\x3f\x2f\x88\xaa\xed\x19\x82\xb5\xe2\x4c\xc8\x46\x6a\x19\x9f\xa5\x7a\xd7\xba\x4f\x2b\x5d\x37\x99\x71\xf5\x77\x05\x38\xa3\xa3\x59\x30\x35\x38\xf9\xe5\x3d\x55\xb4\x87\x86\x3e\x7d\x17\xbf\x12\xe2\xe5\x6d\x98\x08\x86\x75\x51\x65\x45\xd7\xad\x9a\x41\x0d\xf5\x77\xa2\x88\xb8\xa0\x09\x3b\xb9\x9a\x29\x7c\xed\xcc\xec\x2f\xa0\x10\x79\x04\x51\x92\x29\x7a\xb3\x9d\xb2\x60\xfd\x9d\xfc\x1f\x5d\x71\x9d\xd8\xcf\x8f\xab\x4d\xde\x72\x3c\x33\x5b\xb6\x51\x38\xa0\xe4\xb6\x74\xfa\xea\xc5\x9e\xc9\xe5\x52\x46\x51\x54\x15\x0a\x73\x9c\xb3\x9e\xf1\x54\x1b\xac\x24\x6c\x99\x5a\x5a\x56\x6e\xb4\xe3\xfb\x11\x6b\x46\x40\x54\xf4\xce\xa5\xb1\x72\xcd\x92\x96\x27\xde\x6b\x79\xd5\xf3\x1c\xd5\x02\x6c\xc6\x57\x4a\x5f\x9b\x2c\xb5\x7c\x83\xa5\x36\x4f\xcb\x80\xa3\xde\x73\xfc\x83\x1b\xdb\xf3\x27\x4f\x72\x5b\x24\x1d\xe2\x91\xf6\xd8\x07\x4c\x87\x9f\x7a\x80\x71\xf1\x55\x0d\x82\xcd\x26\x09\x58\x22\x06\xad\x03\x40\xf3\x1a\xfb\xa1\x8b\x0c\xa5\xfb\x09\x60\x70\x20\x14\x09\xca\x23\x3e\x79\x06\x08\x68\x66\x87\x12\x42\xad\x65\x68\xa3\x9d\xd4\x31\xad\x45\xa5\x95\x55\xac\xa0\x88\x48\x98\x88\x33\xc9\x66\x33\x12\x37\x1d\x2a\x72\x40\x60\x98\xe7\x8f\xb7\x05\x55\x2d\x41\xcc\x9e\x7d\x7b\x8d\x6b\x27\x6e\xba\x12\x29\xbe\x4a\x5b\xc1\xd2\x85\x73\x43\xa1\x1b\xea\x8c\x4b\x05\x5c\xb5\xb7\x58\x88\xe4\x86\xb8\x9d\xdb\x54\x71\x56\x29\x22\x9d\xd1\x47\x49\x3f\xff\x43\xf0\xfb\xd7\x78\x86\xa8\xff\xcb\xc7\xc4\x82\x63\x1b\xfb\x6c\x0e\x40\x85\x65\x2c\x25\x21\x16\x82\x70\x09\x8c\xb2\x41\x51\xf0\x8d\xc2\xd7\x6f\xda\x89\x50\xba\x85\xc9\x11\x8c\x69\x5b\xc3\xa3\x6d\xa4\x37\xd4\xbe\x9c\xcb\xf6\x15\xd3\x8e\x67\x88\x96\x14\x46\xb8\xb0\xf1\x9f\xd5\x61\xef\x13\x03\xb5\xb0\x48\xb9\x60\x3c\xe4\xf5\x4f\x12\x6b\xc5\xb5\xe9\xb8\xce\xd4\x9a\x71\xfd\xff\x4b\x23\xe3\x28\x65\xbf\xe9\x3d\x80\x70\xd0\xa4\x6a\xda\xb9\x36\x9a\x0f\x1c\x1c\xb4\xcd\xa5\xd3\x29\xfd\xf4\xf3\xc3\x94\x7b\x6a\x27\x54\x24\x31\x69\xdb\x59\xb6\xf5\xb7\xb6\x33\xf3\xb5\x13\x7a\xc3\xc6\x86\x8d\x06\xa8\x06\x0b\x58\x56\x95\x29\x5c\x48\x83\xe0\x8a\x52\x2c\x74\x53\x06\x4d\x06\x04\xe9\x5f\x03\x8a\x0a\x94\x1b\xec\xa1\x12\x2e\x0d\x08\x72\x40\x1c\xec\xf4\x91\x30\x78\xac\x1e\xab\xb8\xad\xde\x55\x86\x62\xc2\x7a\x64\x32\x25\x67\x12\x4f\x67\x03\x1a\xe6\xcf\xcb\xa5\xd6\x5d\x28\xbb\x05\x70\x65\xbe\x32\x3d\xe4\x20\x11\xe7\x7c\x2e\x24\x89\x0b\x22\xde\x2f\xc7\xae\x7b\x24\x8a\x97\x08\x2a\x85\xc8\xd0\x2c\xde\x40\xb3\xb8\xa2\x59\xcc\x5c\x4c\x90\x88\x5c\x66\x6e\x1a\x03\x43\x96\xa8\x94\x9d\x25\x6d\x74\x4f\x73\xee\x34\x6e\xf5\x21\x0d\xdb\x21\x19\x65\x48\xf8\xe5\xf4\x06\x2c\x97\x50\xfb\xb6\x4a\x89\xcb\xf3\xac\x38\x62\xda\xfe\x1b\xd9\xbd\x8c\x4a\xcd\xe7\xa7\x7b\x43\x32\xca\xbd\x3f\x4b\xd6\xf1\xf5\x1d\x33\x8f\xbb\xa8\x09\x6b\x5b\xda\x8a\xc9\xea\x80\x19\x7d\x0e\xd1\x36\x6c\x7c\x45\x39\x83\x61\xa6\x60\x09\xe9\xea\xe5\x4b\x9f\xd5\x60\xa7\x33\x26\x48\xfc\x16\xcb\xeb\xba\x9c\xd3\x58\xa9\xe5\x85\x90\x45\x11\xd9\x1f\x8e\x06\x7a\x51\x54\xe7\x6f\x4e\xde\x1c\x15\x7d\xf6\xcc\xcb\xc3\x83\xb7\xe7\xef\x4e\x8f\xdf\xfc\xf9\xe2\xed\x4f\x07\x67\xde\xf7\xbe\xf9\x7e\x70\x7e\x71\x7e\x70\xfa\xe7\xa3\xf3\xe2\xcb\x9e\xf9\xf2\xe2\xdd\x8b\x17\xaf\x1a\x2a\x3e\x35\x9f\x8b\xcd\xb6\x02\x2e\xfa\x5b\xa6\xf7\x9a\x42\x43\x7c\x65\x0c\xf4\xab\xe6\xd9\x32\x7e\x50\xb3\x8d\x64\xae\xd2\x60\x41\xe7\x2a\x1f\x00\x34\x9d\x1f\xbb\x1d\x7e\xff\x51\x90\x1a\xeb\xdb\x62\x6c\x4d\xfd\x95\x07\xd9\x54\x02\x98\x23\xaf\xb6\x4d\xbc\x53\xc0\xd4\x66\xac\x06\x65\xdc\xb4\xc5\x6c\xa5\x82\x5f\x6c\xaa\x57\x94\x84\x19\x2a\x93\x6b\x1f\x26\xd8\x55\xb3\x1d\x58\xbd\xf9\xad\xa9\x40\xe2\x06\xd4\xb6\xe4\xd5\x0e\xc8\x62\xf6\xc6\xe1\xd8\x72\xb6\x9b\x9c\xae\xd6\xdb\xcf\x3f\x99\x92\x82\x8f\x8f\x52\x7d\x57\xc1\x36\xbb\x52\x8f\xed\x85\x06\x59\xbd\xb8\x70\x42\x8d\xa8\x16\x35\x16\x15\x52\xa1\x44\x2d\x59\x42\x54\x97\x11\xdd\x3b\x56\xf1\x41\x6d\x9a\x52\xca\x48\xc3\xeb\x68\xa7\xa7\x54\x34\x35\x46\x33\xa8\xbf\x29\x1a\x98\x0f\x71\xa7\x0e\x5c\x51\x29\x4a\xe0\x82\x2c\x97\xfe\x72\x25\x34\xa9\x9f\x98\x66\xd9\x0a\xde\xe4\x11\x44\x13\x5b\x60\x85\xea\x9c\x49\xb1\xf5\x19\x55\x50\x93\x28\x61\x34\x6e\xcf\x7e\x62\x5e\x84\xee\x90\xa9\xd1\x44\x54\x1a\x8a\x5f\xc1\x57\x7d\x8d\x90\xdb\xfc\x15\x31\xb8\x65\x9e\x8f\x52\x48\xca\xa6\x60\x97\xad\xb4\xba\xc7\x4c\x19\xbb\x2a\xbe\x3c\x6b\xd1\x2d\x7d\x5a\xaa\x5a\x5d\xa3\xba\x44\x37\x3a\xb6\xac\x38\xc1\xce\xa5\x65\xed\xfc\x98\xab\xa0\xd0\x25\x39\x7a\xae\xdf\x57\xc5\x7d\x08\xa8\x3e\x45\x84\x56\xb3\x24\xa1\xc9\xd4\x12\xd1\x4a\xac\xb1\x4b\x55\x70\x31\x33\xa6\xb5\x43\x9c\xa6\x97\x78\xfc\x3e\xf7\x63\x97\xcb\x25\x68\x2c\xa0\x83\x63\x65\x66\x76\xc2\x90\x6b\x4d\x8e\x41\x27\x52\x89\xa8\xf7\x5c\x14\xf9\x4a\xc4\x93\x27\x90\x0d\xc5\xc8\x73\x82\x04\x78\x4b\xdf\x05\xfb\x63\x83\x1f\x41\x9e\x67\xcc\xd4\x99\x4c\x4c\xa5\x3c\xc3\x58\xa6\x80\x6c\xdc\x2d\x4e\xcf\xfe\xf6\xd6\xa0\xb3\x01\x56\x38\x4d\x3e\x24\x14\x78\xeb\xed\xc0\x46\xbd\xdb\x1a\xf8\x26\x6c\x57\x48\xaa\x29\x2c\x55\x58\x3b\xc1\x6a\xf9\x3f\xb9\xbb\xcf\x47\x1a\x54\x03\x7d\x15\x5d\x97\x93\xab\x44\x48\x7e\x37\x98\xe2\x84\x06\x88\x46\x24\x4c\x19\x7b\x3f\x9f\x01\x59\x37\xe7\x7b\x58\x73\x45\xe4\x81\x94\x3c\xb9\x9c\x4b\x02\x82\x24\x0e\xac\x75\xdf\x89\x4d\x43\x39\xda\x7c\xea\x9b\x88\x2e\x9b\x4b\xa5\xbb\x7c\xf1\x81\xea\xee\xc6\xe9\x56\xc1\xa8\x78\xb4\x23\x97\xcb\x1d\x6d\xed\x95\x38\xa1\x02\x48\xa5\x3f\x90\x48\x5b\x7d\x88\xff\xba\xe5\xf8\x4c\xa7\xb3\x83\xb7\x8f\x19\xa4\x8c\x4f\x71\x9a\xfc\x42\xba\x9b\x6c\x5a\xfe\x81\xf8\xef\x59\x86\x7f\xcf\x32\xfc\xef\x98\x65\xb8\xc1\x71\x7c\xbb\xbd\xbd\xc8\x4a\xb9\x24\x9c\x17\x4c\x61\x4c\x75\x69\x39\x8c\x89\xc3\x66\xd4\xe5\x10\x2d\x28\x9e\x92\x01\xb1\x06\x74\x99\x6d\xe1\xe8\xf2\xb3\xc0\x9f\x89\x41\x7c\xa4\xc3\x53\x4e\xf0\x6a\x1e\x4f\x1f\x99\x35\x96\x14\x59\xb1\x4a\x59\x57\x0f\xd2\x54\x5f\xb3\xb1\x09\x82\x22\xb9\x4c\x3f\xd9\xe5\xd1\x4d\x1c\x83\x68\x6b\xd1\x73\x1a\x51\x1d\x8a\x74\x66\xfa\x7f\x0e\xed\x69\x12\xd5\x59\x6a\xcf\xef\x66\xa4\xd3\xa1\x2b\x32\xd6\x2a\x96\x90\xb3\xc6\xb5\x33\x24\x71\x22\x19\xdf\x4d\x93\xad\xc9\x7d\x63\x7a\x9a\x64\x02\x74\x60\x4e\x98\x08\x77\x95\x43\xde\x3f\x20\x3a\xa2\xc3\x77\x74\xa8\x7a\x2a\xec\x54\xfd\x99\x2a\xde\x52\x8a\x2a\x58\xfa\x54\x34\x6c\x3a\x9c\x70\x36\x6d\xe8\xc1\x39\x30\xb9\x93\x0f\xed\xbb\x50\x4d\x54\x49\xbc\x31\x22\xe9\x44\xb1\x9a\x43\x4d\xd9\x6f\x81\x40\x7b\x71\xc7\x1f\x51\xb7\x0f\x5b\x81\x29\x1e\x44\xfa\x14\xa5\xe4\x87\xa5\xf9\x56\xe9\x8d\x3e\x97\xd2\x8c\x31\x78\x8d\x67\xba\xce\x72\x19\x9c\x11\x53\xbd\x71\x62\xba\xf0\x81\x43\x68\x5b\x65\xf7\xff\xc0\xfe\xe0\x5d\xb2\x3c\x86\x54\x82\xfd\xc1\x1f\x97\xfd\x3f\x2c\x9f\xee\x41\xb0\x3f\x38\x4c\xf1\x74\x46\x62\xb8\xaf\x1b\xf9\x8f\xdd\x50\x12\x21\x01\x87\xe5\x99\x56\xa0\xa5\xc4\xdf\x06\x2f\x9b\x63\xaa\x53\x15\xb5\xb1\x94\x64\x3a\x93\xfa\x8e\xbd\x19\x27\x38\x6e\x53\x46\xbb\x7a\x6d\x2e\xd3\xc2\x41\x2c\xfc\x27\x3d\xa6\x6d\xc6\x63\xc2\x55\xd1\x4b\xd2\x76\x45\x90\xae\xa0\xbd\xb0\xad\x19\x5d\x18\x8f\x9d\x6b\x7c\x43\xda\xb8\x3d\xac\x2c\xf7\x08\xc0\xf6\x94\xc8\x6b\x16\x87\x01\xcc\x40\xdd\x35\xcd\x3b\xec\xfa\x91\xb8\xb3\x28\xa5\x8b\x47\xf9\xaf\x4a\xb2\x6e\x35\x35\x83\x99\x12\x3e\xa7\x3f\x48\xcd\xb6\xb9\xcb\x46\x58\x1c\xac\x3c\xda\x5e\x36\x0e\x64\xbe\x2b\x8b\x16\x62\xad\x21\x20\x94\x3c\x99\x02\x98\xe7\xc6\x22\x2e\x6e\xf8\x55\x42\xa5\x09\x27\x41\x2e\xb5\x95\xf6\x28\x2f\x65\xc7\xe0\x8f\x4e\x75\xd5\xd0\xac\xdd\x45\xbc\xb8\x3b\xc7\x57\x9a\xa6\x68\x15\xca\x15\x81\x4d\x69\xc8\xb6\x23\xc1\x87\x2c\x26\xaf\x13\x85\x54\x05\x2d\x36\x8a\x00\xe1\x3f\x91\x74\x46\x38\x08\x0c\x05\x0a\xf8\xfc\xf2\x2e\x40\xf5\xfc\x1d\x43\x9d\x75\x3e\x7f\xad\x33\x1d\xb8\xc0\x2a\x09\x08\x08\x8c\xb4\x11\x40\x88\x92\xc8\x24\x45\x6d\xf2\x5e\xed\xea\x23\xe4\x50\xf0\x71\x91\xaa\x6c\x77\xcc\x62\x32\xd5\xc3\xdb\x9d\xb2\x98\xec\x06\x2e\x2d\x3d\x46\xc1\x6e\x00\xbd\x5f\xe1\xbf\x44\xa0\x45\x99\x16\x0d\xf1\x5c\x91\x5c\x1c\xbf\xd6\xb7\xd2\x20\x0c\x51\xb2\xcf\x00\x1c\x80\xda\x80\xa8\x52\x2c\x15\xb8\x51\x90\x32\x1c\x97\xa7\xc7\x80\x09\x27\x2f\x52\x99\xd9\xf5\x76\x79\xc1\xf8\xfa\x2c\xa7\x0a\x69\x76\x2f\xe7\x49\x1a\x57\x2f\x77\xb3\x59\x26\xcc\x2d\x99\x44\xd6\xdf\x74\x6d\x26\xb2\x84\xd1\x26\x23\x89\xd2\x32\x55\xeb\xfa\xb6\xd3\xae\x4b\xed\xd9\x94\x9a\xe2\x8b\x10\x20\xf0\xc3\xf3\xec\xe5\x41\x9a\xab\x1c\xca\x1e\x3a\xa6\xa0\x31\xbc\x70\xeb\xe4\xa1\x36\x6b\xac\x3e\xa6\x12\xd1\xc2\xa4\xd2\xd4\xa9\xe8\x94\x1c\x48\xd1\x15\x91\xfa\x3a\xc8\x15\x3e\x18\xaa\x94\xb6\x2c\xbe\x54\x15\x1b\xd4\x26\xd6\xe9\xec\x94\xd9\xb6\xb4\x54\x54\x9f\x6d\x3b\x2b\x46\x7e\x3c\x17\xa8\x11\x04\x48\x1a\x67\x0a\x6d\xdf\x2c\x37\x5d\xee\x5f\x95\xd6\x86\x97\x26\x7f\x30\x3c\xd4\xf4\x50\x8d\x1f\xc0\x51\x44\x6c\x93\xc6\x41\xa3\x6a\x99\x72\x1e\xb0\x38\x17\x96\x11\x8b\x24\xa0\xcb\x25\x36\x2c\x15\x89\x88\x99\xcb\xda\xd8\xb0\x3f\x42\x69\xc4\x15\xdf\x14\x3b\xd6\xf9\x26\xef\xc8\xe4\x3b\x35\x9e\x20\x02\x88\x22\x97\x90\x7a\xa5\xf3\x36\x08\x18\x7a\x63\x50\x0c\x38\x8d\xd2\xa1\x18\x65\x26\x0d\xa8\x6b\x4e\xcd\x1b\x40\x34\x6e\xf2\x1b\x98\x87\x92\xfd\xe5\xec\xe4\xcd\xbe\x7b\x00\x70\x50\x44\x09\xcd\x2d\x18\x61\xfe\x51\x7b\x26\xf8\xba\xf3\x18\x86\x09\x1d\xa7\xf3\x98\x08\x90\x58\x0f\x85\x38\xf2\x6e\xee\xc8\x29\x54\x82\x82\xb6\xdb\x99\xed\x98\x11\xed\xd7\x47\x3e\x24\x42\x11\x9e\x96\xe1\xea\x71\xee\x3a\x85\x62\x3d\x8b\x49\xe4\x8f\x26\x81\xad\x32\x0e\x4c\xe0\x72\x99\xe3\x67\xaa\x03\x97\xea\x29\xbe\x87\xc9\x48\x1b\xfa\x3a\x1d\x1b\x5d\x15\x99\xb2\xa1\x95\x98\x3c\x61\x74\xdf\x72\xeb\x49\xa7\x03\x26\xd1\x70\x04\xd1\x64\x88\x43\x7b\xfb\xec\x7e\xa0\xb4\x70\x2b\x43\xb9\xc4\xd3\xf6\xe7\x08\x58\x1f\x62\x1f\x11\xe7\x28\x41\x13\x08\x07\xb9\xef\x5d\xde\xd4\x72\x19\x68\x57\xca\xc8\xd6\x2a\x8f\xa2\xd3\xd1\x69\xcb\x57\x7d\xde\x2f\xf7\xe0\x3a\x1e\x54\x5f\xdb\xbe\xca\x59\xad\x5d\x46\x47\xa0\x4d\x87\xa2\xe9\xbc\xb5\x29\x4c\xa3\x84\x4a\x21\x67\xc6\xdc\x99\x9b\xb9\x44\xa7\xb3\xb1\x08\x70\x5b\x71\x9c\x12\x5c\x8f\x75\x7a\x28\xdd\x5a\x64\xab\xa3\x4b\xc8\xbe\x0d\xf1\x21\x98\x13\x1e\x11\x13\xf8\x68\xa9\x0c\xf0\xbf\x29\x59\xbd\x18\x7d\x86\xc4\xfc\x72\xda\x14\xf0\xf6\xf0\x41\x36\x3b\x24\x93\xd2\xae\x36\xbd\x4a\x35\xd4\x56\xf9\x05\x28\x83\x17\x6a\x5a\xf9\x37\xb3\x96\x8c\x8b\x26\xaa\xc5\x72\x42\xe5\xd6\x7c\x85\x1f\x5b\xde\xea\x1a\x40\xe6\x78\xa3\xe4\xbf\x02\x87\x6c\x07\x38\x8e\xf5\x6e\xdf\xd8\x41\x63\xd3\xae\xb6\x6a\xda\x3d\x37\x06\x7a\x29\xa2\xd7\x34\x53\x77\x10\xad\x3a\x1b\x60\x7d\x16\x7d\x8d\x1b\x61\x52\x2c\x95\x2a\x95\xfb\x87\x3a\x40\x47\xee\xc1\x88\x93\x02\x22\x11\xea\x4d\x12\xd9\xff\x8b\xf7\x59\x56\x64\x5d\xf0\xf4\xaf\x44\x9c\xe1\x9b\x84\x5e\x59\xb2\x35\x66\xd3\xd9\x5c\x92\x18\x68\x3a\x9a\x7f\x6d\x92\x1a\x0b\x3e\x94\x17\xcb\xec\xd5\x00\xa5\xec\xed\xbc\x94\xae\x20\x1f\x83\x49\x04\x41\x8b\x14\x0e\x5c\x67\xff\x59\x27\x8e\x29\xa1\x89\xd0\x9b\x84\x33\x3a\xbd\x9f\x09\xf5\x7e\x5a\x35\x59\xa1\xf0\x36\xb9\xff\x1b\xed\x6a\xb9\xdc\x01\x6b\xd5\x6a\xa7\x29\x1b\x89\x67\x38\x42\x3c\xda\xe9\x21\x1c\xed\xf4\x11\x73\xda\x87\xe4\x77\xb9\x3d\x54\xa0\x24\x22\x0d\xaa\xdb\xf3\x1d\xc0\x23\x20\xa2\xc4\x26\xc0\x81\x26\x97\x4e\xa7\x03\x8c\xc9\x15\x08\x47\xd5\x77\xe4\x72\xe9\xdc\xf5\x74\xb0\xc7\x73\xd5\x25\x7c\x6e\xcf\x52\x52\xb8\xc0\x6a\x08\x2c\x4a\xb3\x49\x42\x71\x9a\xde\x99\xfb\x5d\x96\x4b\x7b\xff\x56\x68\x86\xbc\x5c\xba\x27\xa5\x2b\xda\x92\xc9\x04\x60\xeb\x2a\xcf\xb2\xc2\xb6\xab\x21\xf5\xbb\xa5\xe0\x1e\x96\x82\x32\xbc\xb6\xb7\x15\xc4\xc4\x4c\x66\xce\xc9\xef\x06\x83\x6d\x34\x9f\x26\x05\x7b\x5b\x56\xf8\x70\x3d\xc3\xba\xd1\x3f\xf8\xce\x3c\x67\x1f\xf0\x8f\x7b\x0b\x29\x3f\x1c\x33\xf6\x3e\xc9\xaf\xc2\x7d\x1e\xc0\x35\x21\xf8\x81\x12\xcf\x48\x06\x57\xdf\xd3\x42\x9c\xe1\xc4\xb6\x17\x05\xc6\x56\x22\x1a\x0e\x2a\x79\x98\xb2\x31\x4e\x6d\xc6\x21\xc5\x30\x8f\x25\x99\xfa\x97\xcc\x6a\x9c\x88\xe4\xbe\x99\xe5\x40\x56\x93\xb1\x78\xa1\x4c\xdc\x19\x68\x34\xe2\x5e\x11\x79\x44\x25\x4f\x88\x78\x71\xa7\x36\x01\x08\x38\x31\x41\x07\x7a\x7e\x25\xdb\x43\x4e\xda\x9d\x45\x40\x75\x19\x9a\xc0\x1c\xc9\xb8\x31\xe4\xea\x43\x3c\xa3\xb0\x41\xb8\x5c\x2e\x32\x4b\x02\xf3\xca\x8b\x2c\xcb\x50\x1a\xe1\x46\x43\x4d\x61\x6c\x40\xf3\x28\x1d\xa6\x76\x01\xbb\xfd\x51\x28\xf8\x18\x8d\xbd\xd4\xc0\x45\xf8\xb0\x4b\x67\x61\x73\x00\xda\x2c\x81\x2f\x0e\xce\x8e\x2e\xde\x1d\x5f\xbc\x3b\x7d\x95\x27\xb2\x9a\x7b\x17\x19\x17\x97\x16\xef\x79\x37\x15\xb7\xfc\x26\x7e\x3a\x3f\x7f\x7b\xf1\xf6\xf4\xe4\xfc\xe4\xf0\xa4\x68\xa4\x88\x95\xe9\x74\x00\x89\x12\x30\x87\x2e\x35\xda\x4f\xda\xbd\x4b\xb2\xb1\xbe\xac\xe1\x5a\xca\xd9\x6e\x3f\xec\x07\xf5\x46\x5f\x1f\xfc\xfd\xe2\xf0\xe4\xcd\x9b\xa3\xc3\xf3\xe3\x93\x37\x67\xc1\xc0\x65\x07\x8c\x28\x68\xee\x5d\x1f\xb0\x15\x09\xea\x79\x61\xf5\xb9\xde\x0b\xe0\xa0\xf1\xc3\xcf\x2b\x3e\x88\x59\x7c\x17\x40\x3b\x9f\x3c\xd1\xad\x9d\xde\x77\x6a\x7d\xe2\x1a\x16\xe6\x60\xa6\xa1\x27\x15\x58\x90\xc7\xe4\x86\xa4\x6c\xa6\xe5\x04\x93\x3e\x4c\x48\x7c\xa5\xf8\x8e\xf9\x35\x66\x37\x44\x87\xb4\x98\x9f\x8a\x3e\xeb\xbb\xbb\xf3\x4d\x09\x78\xc4\x94\x5a\x40\xe2\xf9\xb8\x1c\x84\x9d\x47\x8c\x4a\x40\xd1\x1e\x44\x38\xe2\x4a\x3d\x66\x11\x1f\xf6\x47\xd5\xfb\xec\x2c\xe4\x0e\x0e\x5f\x9d\x5d\x1c\xbd\x39\x78\xf1\xea\x28\x18\x90\xb0\xfe\xf6\x65\xb4\xb3\xa3\x6f\xc8\xd4\x79\xf0\x81\x61\x75\x80\xc1\xb2\x26\x55\x4a\x2c\x67\x1b\x79\x73\xf6\xf6\xe0\xf0\xa8\xa1\xf5\xf2\x87\x87\x77\x70\x76\x76\x52\x6f\xbc\x78\x79\xbf\x86\xdd\xd2\x92\x21\x1e\x45\xac\x38\xb5\x84\x68\x91\x41\x38\x24\x23\xc7\x22\xb9\x12\x78\x73\x0f\x04\x32\xaa\xc5\x46\x99\xe0\x8c\xe6\x9d\xf6\xee\xf8\xe2\xe5\xf1\x99\x1a\x5d\x9e\x97\xd3\x2e\x74\xbd\xc0\xc1\x9b\xc3\x9f\x4e\x4e\x2f\xce\x8e\x5e\x19\xd4\x77\xbb\xaa\x69\x56\x02\x28\x7e\xdd\xab\xce\x6d\xb9\x8c\x5d\xda\xcb\x35\x19\x41\x1d\x3a\x9b\x46\x6a\x35\x4a\xd4\x61\xcd\x9e\xdf\xbc\x73\x6d\x3f\xb1\xee\x67\x6c\x6e\x91\xa9\x6c\xa9\xd8\x1c\xcf\x6d\x92\xb6\x1b\x4c\x94\x9f\xdc\x13\x26\x99\x00\x6b\x49\xce\xa9\xc3\x30\x28\x64\xf3\x70\xaa\x89\xf7\x2e\x08\xbf\x85\xff\x1c\xea\xbf\xa3\x5d\x47\x3a\xfb\x8e\xff\x0c\x83\x00\x29\x85\x69\xcd\xfc\xae\xb5\x71\xdc\x5c\x60\xdd\x4d\x26\x9b\xee\xaf\x6e\x3a\xa6\xfb\xcd\xa5\x29\x78\xd4\x4b\xba\x0b\x75\x8b\xd6\x5f\xf1\x8f\xbc\x10\x60\x51\x24\xad\x02\x8a\xfc\x42\x85\x31\xfb\xea\x69\x40\xf5\x0b\x84\x37\x21\xb8\x66\x86\x78\x9c\xee\x26\xc2\x58\xeb\xbb\x82\xf0\x1b\xc2\xbb\x36\xb3\xc6\x97\x7c\xa2\x1f\xf0\xd9\xb8\xad\xc7\xd9\x9e\xe2\xf7\x09\xbd\xd2\xb1\xc6\x83\x36\x9f\x8d\x07\xed\x31\xa6\xdf\xc8\xb6\x12\x95\xac\xe0\xde\x3e\x38\x7c\x15\x34\x1d\xfe\x3b\x4a\x67\xa2\xf4\xcd\x05\x35\xc5\xd3\xb0\x37\x2a\xfd\x08\x63\x22\x71\x92\xc2\x4e\x47\x6f\xd0\xfa\x97\x7c\xc7\x92\x0d\x67\xff\x1a\xf4\xe6\xe5\xe3\xc2\xf9\xa7\xa3\x83\x97\x47\xa7\x67\x17\x67\xff\xfb\xfa\xc5\xc9\xab\xa8\x78\xf1\xf2\xf8\xcf\x47\x67\xe7\xde\x8b\xf3\x93\xbf\x1e\xbd\xf1\x7e\x1f\xbf\x79\x79\xf4\x77\xbf\xc2\xc1\xf9\xc1\xe1\xd1\x9b\xf3\xa3\x53\xef\xe5\x9b\x83\xd7\x47\x9a\xab\x3a\x9d\xbd\xe9\x53\xf0\xf7\xee\xa1\x99\xaf\x92\x1f\xc5\x0c\x8f\x49\xd0\x6a\x6c\xb8\x28\xf9\x12\x4b\x3c\x26\xfa\xfa\xf9\x56\x75\x4c\x45\x29\x7d\x15\xa1\x5f\xc0\x4c\xa2\x28\x70\xce\xde\x13\x5a\xea\xcc\x4c\xbb\x28\x71\x68\x92\x01\xfd\x84\xc5\xb5\x5f\xce\xc2\x2b\xb8\xb8\x30\xab\x72\x31\x4f\x2e\xd4\x22\x5d\x5c\x13\x1c\x13\x2e\x2e\x2e\x82\xcd\xeb\x69\x32\xdc\xdb\x1a\x9f\x7c\xff\x34\xd8\x74\x72\x1e\xd1\x20\xb5\x15\x17\x77\x38\x89\x7b\x10\x78\x97\xba\x15\xc4\x07\x90\x21\x55\x28\x6d\x94\xa1\x51\x44\x87\x7d\xf7\x43\xe7\xe5\x51\x82\xca\x36\xd8\x6d\xa0\xa1\xdd\x62\xba\x33\xcc\xf1\x74\xdb\x6b\x6e\x7f\xb3\xdc\xe5\xeb\x32\x1c\xd4\xf9\x58\x9b\x9b\x94\xa3\x65\xc7\x48\x62\x94\x55\x80\x1b\x94\x05\x8c\x84\xbb\xed\xb0\x12\x80\xf9\xbb\x41\xf2\x77\x83\xe4\xef\x06\xc9\xc7\x31\x48\x02\xa1\xd4\xf0\x34\x4a\x94\xd8\x37\x8f\x12\xa5\x86\xfb\x59\x5d\xe6\x6e\x96\x58\x2f\xe5\x38\x22\x20\xcd\x49\x7f\x2e\x6c\xb1\x4e\x07\x8c\xa3\xe2\xf8\x97\x21\xa5\x77\xb8\x5f\x63\x14\x8c\x02\x9b\xd4\x4d\x35\xb9\x8f\xf3\x2f\x70\xe0\xb2\xcf\x44\x51\x24\xc1\x1c\x16\xdf\x38\x98\xa3\x31\x84\x83\xfc\x45\xd1\xfc\x18\x05\x51\xd1\x3c\x01\x73\x7d\xef\x01\x1a\x8e\x9c\xe9\xa7\x13\xdc\x83\xcd\xcc\xf9\x3a\x41\xea\xdf\x82\xbb\x3c\x52\xde\xd5\x46\x55\xa5\xc8\x82\x50\x95\xd7\x11\xf3\x98\x12\xfe\xb1\xbf\x8f\xbb\xfd\x41\x0f\x22\x11\xf5\x9f\x8b\x1f\xb0\x0b\x99\xe9\xf6\x47\x9e\x34\x2f\x46\xf6\x82\xb9\x7e\xce\xb2\x2a\x56\x59\x7d\x63\x8b\x3e\x81\xb7\x0e\xfa\x4a\x00\x39\x93\x98\xeb\xcc\x82\x5a\xfc\xf6\xac\x67\xfb\x81\xcd\x81\x93\x74\x3a\x20\x89\xf6\xea\x25\xfe\x49\xff\x49\xcd\xad\xac\xd1\xb3\xa6\xaf\xea\xdb\xb3\x1d\xd7\xc0\x53\x77\xa3\x6c\xb1\x39\x86\x78\xb4\xaf\xfe\x0c\x82\xc0\x99\xb8\x12\x6b\xfc\xeb\x0f\x2a\xf7\x55\xd6\x08\xaa\x18\x88\x88\x00\xe1\x1b\x97\xda\x65\x5e\x27\xe0\x40\x44\xd5\xdb\xae\x0b\xeb\x6e\x50\xec\x13\xed\xee\x8e\x82\xc0\xb3\x90\x66\xa5\x64\xc0\x0f\x18\x4c\x69\xff\xea\xa1\x50\x20\x4a\xcd\x3e\xf3\x2e\x2b\x31\xd2\xa3\x81\xe8\xb0\xe7\x8c\x54\xc5\x18\x79\xbe\xab\x85\xce\x81\x6d\xc6\x19\x38\xbf\xc4\x2d\x36\xf5\x26\x05\xf4\xdf\x62\x3f\x97\xa4\xc5\x07\x24\xfb\xaa\xc8\x56\x9f\x2f\xc7\x57\x25\xc9\x18\x2f\x4e\x4d\x1a\x20\xf6\x1a\xcf\xf6\xd5\x48\x5e\xe3\x99\x75\xbb\x71\xe9\x64\x79\xd5\x2a\x66\x59\x8f\xb9\x0a\x9a\x98\xfb\x98\xff\x64\x8b\x54\x84\x11\xea\x5d\xca\x3c\xa4\x58\x26\x37\xa4\x3d\x66\x31\x51\x2c\xac\x08\x85\xd0\xb2\x5f\xab\x39\x4d\x20\x79\xc4\xe4\x80\xbe\x59\xdd\xde\x8a\xad\x5d\xc4\x88\x77\xdd\x9c\xcd\x21\x22\x6d\x16\x65\x5e\x4a\x6a\x59\x1c\x79\xf9\x0e\x16\x28\xa9\xa7\x9d\x83\xc5\xfd\x44\x0f\x4f\x89\xe3\x87\xbf\xf4\x37\xe5\x26\x14\x80\x23\x97\x5c\x2d\x1f\x72\x25\xc3\x25\xc0\x11\x03\x70\xbf\x96\x10\x6f\x45\x26\xca\xa1\x82\xe2\xa8\xc5\xfd\x20\x2a\xee\x04\x51\xac\xf8\x0d\xc8\xd7\xfd\x32\xa1\x71\xee\x7b\xe2\xa5\xb1\xa1\x9d\x8e\x00\x18\xf9\xd1\x90\x08\x67\x2e\xe3\x95\x76\x74\xf4\x3c\x55\xf2\x81\xb3\x7f\xb7\x44\x87\xf9\xcc\x45\x29\xa1\xa4\x78\xd4\x84\x92\x5e\xc6\x8e\x55\xa9\x2a\xbf\xb4\x64\x7f\x9e\x47\x7c\x5a\x22\x44\xa0\xae\x85\xd6\xa9\xc7\x57\x9a\x64\x54\xd8\xfb\x66\x40\x9a\x67\xdc\x43\x1c\xe1\x08\xc8\x28\x45\xfa\x3c\x10\xd5\xfc\x0a\x70\x94\x80\x52\x76\x57\x16\x35\xd0\xa5\x16\x69\x48\x87\x89\x3d\x5a\xc6\x6c\x3a\x4c\x12\xe1\xf5\xe9\x30\xa9\x0b\x19\xcf\xbc\x44\x80\xa9\x67\xe0\xaa\x47\xfa\x3e\x7e\xc2\x61\x33\x86\x14\x22\x40\x23\xec\x67\x23\x83\xd0\xde\x69\x7e\xc8\x62\x12\x11\x44\x1d\x3d\x4e\x33\xc0\x81\xee\x01\x42\x2f\x1c\x3b\xdd\x28\x0b\x7d\x12\x73\xe2\xe1\xc9\x9b\xf3\xa3\x37\xe7\x17\xe7\xff\xfb\xf6\x28\x22\xe1\xe1\xc1\xe1\x4f\x47\x17\xea\xe5\xe9\xc9\xab\xc2\xb4\x5b\x7e\x1d\x1c\xe2\xf1\x35\xd1\x06\x54\xce\xd2\xa0\x55\x69\x25\xb0\x96\xd5\xae\x02\xe5\x66\x63\xa9\x51\x60\x1f\x77\x56\x6f\x4f\xb4\x85\xfb\xe5\xd1\xab\xa3\x73\x35\xad\xb7\xef\xce\x8b\xc9\xa8\x1f\xc1\xdb\x77\xe7\x6a\xe0\xb6\x44\x60\xfe\x57\x6f\x74\xd5\x40\xfd\x55\x43\x6f\xad\x1d\x3a\x27\x3f\xcf\x89\x90\xf7\xcc\x02\xa1\x13\x47\xd4\x52\x3e\xf8\x42\x5e\x4e\x22\xe9\x6f\x55\x92\xe5\xbf\xe9\x80\x6e\xec\x07\x74\xcb\xa8\xff\x5c\xd6\x03\xba\xa5\x0b\xe8\xa6\xb5\x80\x6e\xe9\x1f\x71\x49\x7d\xc2\x27\xff\x73\x6f\x9f\xbb\xe0\x69\xba\x26\xa0\xdb\x26\x06\xff\x1c\x01\xdd\x14\xc2\x81\x37\xa6\x47\x0f\xe8\xa6\xab\x03\xba\xd9\xe7\x0d\xe8\xae\x8a\x46\x5f\x78\x56\xf9\xdf\x33\x82\xff\x7a\x19\xc1\xc7\xd5\x8c\xe0\xe3\x5f\x23\x23\x78\x71\xa0\x2d\x4b\x46\x02\xaa\x43\xaf\xd6\x5f\xa2\xff\x6b\x18\x09\x64\x25\x13\xb9\x45\xdd\xf1\x57\xa7\x21\xc4\xff\x36\x1a\x42\xe2\x34\x84\x79\xa1\x21\x50\xc4\x11\x8b\x52\x30\xf7\x04\xf2\x79\x49\xa3\xff\x7c\x22\xf9\x1c\x22\xc0\x23\x56\x88\xe4\x10\x86\x17\x73\x9e\x46\x12\xf1\xf0\xc2\x08\x9d\x91\x22\x9f\xee\x60\x3f\xa2\xfe\x0f\x0c\x30\x58\x64\x88\x42\xb4\xc8\xd0\xc2\x5d\x65\x65\x5c\xa3\x06\x81\xda\x94\x89\xc9\x3e\xba\xfb\x2f\xc1\x68\x90\xb9\x5b\xb8\xb4\x39\xd9\xb5\x12\x5e\xb2\xf8\xce\xd8\x9f\x34\x41\x77\xef\x87\xe5\xf6\x46\x51\x20\xc9\x07\x97\x1e\x4c\x48\x4e\xf0\x34\x80\x88\xe7\xd7\xb3\x45\x73\xa5\x5e\xd8\x74\xe0\xb9\x1a\xb0\x3e\x33\xb6\x2d\xb6\x3e\x29\x36\x71\x77\x2d\x7d\xb8\xe6\x36\xe6\xa8\x39\x49\xbb\xae\x9d\x15\x09\xc1\x39\x11\x33\x46\xe3\x95\x0d\x6e\x99\xe9\xdd\x35\x67\xcd\xbc\xf5\xc6\x34\x05\xf2\x14\x29\xcf\x25\xc8\x44\x59\x79\x5f\x80\x5f\xb0\xfa\x19\xae\x99\x5c\xf5\xc2\xc5\xed\xd2\x9e\x37\x36\x65\x6a\xf8\x4d\x30\x4a\x89\xc1\xcc\x0d\x0b\xf6\xe1\x9a\xe7\xb5\xf0\x25\xe3\x4d\xb9\xcf\x3f\xca\x53\xaa\xa7\xf9\x68\x1d\xd3\x5c\xee\x78\x8b\x31\x00\x56\xd1\xd3\x4e\xd8\x57\x67\x5b\xc5\xe5\xb0\x61\x31\x45\x13\x64\x2a\xfd\x2c\xf4\xce\x2b\xb5\x7e\x97\xa1\xb9\x78\xba\xdd\x1f\xc8\x50\x4f\x57\x9f\x07\x64\x23\xd8\xe9\x08\xe0\x13\x28\x0a\x11\xd7\xef\x10\x87\x68\x9e\x81\xd2\x7d\xbc\x8e\x04\xc7\x1b\xd5\x4c\x33\xfa\xc7\x55\x33\x8f\xdf\x9c\x1f\x9d\xbe\x39\x78\x75\x71\x76\x74\xfa\xb7\xa3\xd3\x8b\xa3\xd3\xd3\x93\xd3\x88\x84\x7f\x3a\x39\x7d\x71\xfc\xf2\xa5\xf6\xaa\x7a\xf7\xe6\xe0\xdd\xf9\x4f\x27\xa7\xc7\xff\x38\x7a\x19\x91\xf0\xe4\xaf\x85\x22\x7a\xf2\xd7\x68\xaf\xa7\x1e\x4a\x65\x9e\xf5\xfa\x2d\xbf\x89\x67\xbd\xa7\xad\x55\x5d\x7d\xd7\xeb\x6d\x9c\xf8\x87\xeb\x6d\x0f\x50\x3e\xad\x27\x4a\xd5\xe7\xe5\x37\xaa\xfb\xf1\xfb\xe8\x7e\x7c\x5b\xdd\xcf\xe5\x68\x04\x7c\x8d\xee\x67\x6c\xed\xfc\x73\xe8\x7e\x1c\xc2\x81\x37\xa6\x47\xd7\xfd\xf8\x6a\xdd\xaf\x76\x67\xd6\xd7\x90\xcc\xab\xe1\x30\xbd\xb8\x36\x80\xdc\x02\xba\x5c\xfe\xfd\xf5\xab\x9f\xa4\x9c\x9d\x1a\x9b\x12\x6c\xb1\x90\x51\x4d\x34\x15\xe5\x22\x26\x9d\x46\x45\xe7\x7a\xb6\xea\xb2\x17\x9d\x5b\xc1\xc6\xef\x1e\xa4\xe9\xa9\xe6\xd6\x82\xfc\xe4\x28\x7c\x71\x74\x1b\x40\x43\xb3\x0b\x02\xff\xa3\x22\x4a\x36\x28\xdc\xbc\xf9\xe1\x59\xaf\x97\xa7\xa8\x50\xe4\xfe\x86\x70\xa9\xc5\x18\xc5\x4c\xda\x5a\x00\x1a\xb9\x1b\x6b\x4d\x4f\xb0\x85\x43\x31\x1f\x8f\x89\x10\xfa\xfa\x79\xaf\x35\xff\xf9\x9c\x7c\x90\x56\xd7\xc1\x36\x1f\xbc\x44\xa5\x86\x54\x89\x75\xb5\xcd\x6f\x73\x9b\x5f\x0b\xeb\xa8\xdd\x94\x48\xe2\x4f\x48\x31\x63\x7b\xc1\x0a\x0e\x8d\xe0\x87\x70\x38\xe7\xa9\xda\x49\xc8\x8b\xf0\xb7\x0c\xb0\xd3\x01\xf9\x73\xb4\xc8\x9c\x07\x00\x07\x5c\x49\x84\xf9\x27\x2b\x19\xfe\xbd\x6b\x57\x8c\xc4\xdd\xff\x49\xe4\x75\x30\x08\xca\x2b\x19\x64\xb9\xb2\x53\xf1\x93\x13\x4d\xdb\x86\xe4\xba\x24\xc2\x11\xe0\xd1\x1e\xda\xde\x35\x8e\x46\x9b\x9c\xe3\xee\x97\x02\x6b\xf1\xdb\xf6\x89\xcb\x34\x0d\x2f\x01\x8c\xba\x9c\xcd\x6b\xbd\xe1\xa4\x2e\xf9\x20\x6f\x38\xeb\x22\x71\x7f\x9f\x38\xd4\xe4\x10\xb7\x5f\xf2\x84\x1b\x3c\x82\x1b\xdc\xbe\x99\x9b\x3d\x81\xaf\x83\xe8\xab\xf0\x83\x83\x48\x44\xd8\x24\x6a\xc1\xc3\x7e\x2e\x83\xb0\x50\x10\x69\x77\xa5\x21\x85\x40\x98\x7b\xe6\x11\x0e\x2f\xc9\x84\x71\x72\x46\x68\x0c\x18\x44\xaa\x28\x8d\x01\xd6\x1a\x1c\x44\x6c\xbd\xab\x4a\x22\xfe\xc4\xaa\x99\x91\xbe\xc0\x48\x89\xfc\x92\xeb\xdd\xc0\xa8\x55\x1a\x2f\xbb\xfd\xf5\xb9\x06\xde\x93\xbb\x73\x76\x60\xee\xb6\xfe\xb2\x73\xff\xee\x06\xc5\x05\xc4\x51\x24\xf7\x83\x60\x40\x1c\xab\xdb\x70\x69\x7e\x4a\x26\xb2\x2b\x79\x32\xfd\xd2\x97\xf0\xe1\xe9\xa7\xf2\xe5\x37\x66\xbd\xdc\x2d\x46\xc2\x7d\x12\x8a\xf9\xa5\x90\x1c\x38\x53\x36\x1c\x90\xb5\xe0\x9a\xe2\xbb\x4b\xd2\x55\xf4\xed\x73\x24\xac\x5c\x1d\x44\x25\xab\xf7\xd4\x49\xff\x2a\x55\x02\x20\xa2\x1b\x2f\xea\x9d\x26\x34\x99\x26\xbf\x90\xd7\x2c\x26\x9f\x7c\x3a\xeb\x39\xf8\x3d\xee\x8d\x7f\x43\x6e\x75\x50\xfa\xaa\x18\xf6\xc5\xf1\xcb\x41\xa9\xca\xf1\xcb\x00\x22\x9d\xc7\xab\xf4\x5a\xbd\x09\xf4\xde\x58\x0b\x24\x45\x8f\x15\x61\xbf\xeb\xea\x1c\x6f\x9f\x1a\x48\x2b\x03\xb4\xda\xb9\x7a\x1a\x68\xbb\xc5\xfe\x22\xab\xb9\x0e\x7d\x4a\x85\xc0\x33\x5b\x2f\x32\x73\xd5\xfc\x5a\xb8\xd9\x24\xf3\xf1\x79\x32\x25\x6c\xfe\xa9\x21\xf7\x38\xb7\x81\x3f\x9c\xc4\x08\x22\xed\x44\x6b\x76\x5e\xba\x32\x9b\xf1\x76\x4d\xfb\x47\x33\xb9\x03\x48\xf5\x56\x70\x7d\x9b\x10\x28\x65\xc3\x04\x14\x66\x10\xd1\x2d\x2e\xec\x36\x49\xc1\xba\x0a\xc1\x3e\x1b\x82\x97\xad\x1f\xf5\xa8\x19\x5f\xcf\xb5\x87\x04\x64\x48\x47\x9d\x0e\x90\xce\xc0\x02\x91\x74\x91\x58\xeb\x26\x97\x5c\x5d\xff\xf6\x19\x9c\x49\xf4\x6f\xb2\x52\x38\x56\xa6\xb4\x5b\xfa\x63\xd4\x2b\x88\x6c\x8a\x85\x3c\xce\x99\x5f\x14\x45\xb4\x60\x80\x3d\x25\xfb\x92\x62\x97\xaf\x85\x29\x9b\xcb\x84\x5e\xed\x72\x12\x27\x9c\x8c\x65\x57\xb2\x5f\x85\x32\x16\xd7\xc5\x86\x6a\x48\x26\x51\xb3\x55\xf0\x43\x3f\x97\x46\xdf\x79\x60\x87\x01\x74\xf7\x5e\xce\x52\x3c\x26\x4a\x6f\xf5\x02\x32\x28\xd2\xf5\x9c\xa3\x39\xdc\x48\xe5\x1c\x24\x24\xc7\x54\x24\x6a\x5c\x8a\x6e\xfe\x9e\xe9\xf9\xdf\x29\x5c\xea\xf7\x4c\xcf\x9f\x32\xfe\xf2\xa3\x14\xa3\x45\xd6\x94\xf3\x69\xaf\x9c\x60\xc9\x5a\x75\x9c\x6b\xbd\x4e\x9f\x43\xdd\xad\x29\x81\x26\x2c\x03\xef\xd8\x33\xb0\x09\xee\x98\x52\xb5\x35\x10\x51\xe2\x72\xca\xb3\x28\x09\x67\x98\x13\x2a\x9f\x43\x11\x89\x3c\xb3\x31\x60\x48\xea\xcc\xc9\xac\xc8\xde\xc7\xc9\x0d\xe1\x42\x49\xea\x1c\x10\x8d\xce\xcb\xa5\x7f\xbc\x1a\x20\xa1\xf0\xab\x9a\x90\x9a\x98\x84\xc0\xd5\xc8\x35\x1e\x52\x1d\x65\xae\x36\x8e\x90\x98\x4b\x61\x48\x5b\x3c\x0e\x75\xcc\x0f\x89\x02\x53\x20\x0c\x3c\xf2\x46\xa3\xa1\xab\x38\xca\x69\x20\x84\x68\x58\xfc\xd4\x2f\x32\x84\x1f\x73\x51\x72\x65\x35\xd4\x41\xd1\x3a\x44\x7e\xb9\x1c\x8e\xaa\x32\x3d\xad\xcf\x53\x71\xff\x7d\xf5\x67\x60\x2b\x8b\x21\x1d\x65\xfa\x36\x6b\x0b\xce\xad\xe8\xf5\x2d\x4e\xdf\x7f\x7e\x96\x05\x17\xa5\xcb\xb8\x87\x64\x04\xb3\x0c\x91\x50\x8d\xc6\xf7\xa5\x28\x5a\x31\x09\x6e\xbc\x6b\xd1\xcb\xf7\x05\x37\x58\x51\xb9\xe1\x08\x17\x6c\x26\x75\xde\x69\x85\x1b\xd6\x23\x07\xb1\x48\x0e\xf9\x28\x74\xdf\xca\x8d\x0d\xf9\x08\xfa\x21\xf0\xd8\x17\x6d\x48\x69\xdc\xaa\xec\x48\x4b\x97\x86\xef\x02\x8e\x98\xce\xb5\x01\x3d\xab\xb2\xcc\x8f\xff\xed\x53\xb4\x70\x1d\x0f\x16\x33\x2c\xaf\x07\x41\x90\x65\x30\x6b\xd9\xf9\xcb\xad\xd6\x2d\x49\xe3\x31\xe6\x8f\xec\x34\x7b\x2f\x71\x63\xa7\xaf\x0d\xc0\x34\xd2\x11\x74\xbe\x4a\x29\x61\x0e\xda\x50\x4d\xb0\x88\xbf\xf9\x36\x70\xf7\x57\x71\xb8\xf0\xcc\xb0\xeb\xa6\x2c\x08\xe6\xe3\xeb\x5d\xa3\x18\x6f\x90\x2a\xbe\x00\xf9\xb5\xf9\x42\xae\x87\xcb\xb4\x56\x25\x6b\x52\xa7\x72\x79\xd6\xdc\xf6\x65\xe7\x15\x04\xe8\x42\xbb\x57\x0c\x47\xab\x72\x62\xe7\xd9\x4a\x8d\xcc\xa8\x8b\xe7\x09\x67\x27\x09\x8d\x1f\xcd\xe3\x60\x38\xaa\x26\x30\x9e\x93\x68\x9d\x95\xa3\x2e\x51\x75\x3a\xdb\xa7\xeb\x53\x78\x24\x43\x4e\x04\x4b\x6f\xec\x09\x90\xc9\xc1\xdc\x9c\x04\x63\x0b\xab\x8b\x96\x0f\x16\x42\x5f\x82\xa3\xa3\x2d\x0b\x88\x99\x44\xbe\x0a\x39\x9b\x53\xe7\x36\xad\xf9\x83\xa0\xa6\x13\xfd\x55\xf3\xa7\xef\xcb\xc1\x50\x8e\xe0\x6a\xf3\x17\xb1\x2b\x8c\x34\x70\xae\xae\x08\x07\x81\x39\x43\x0c\x90\xbb\xf2\xc7\x79\x7b\x59\x28\x19\xdd\xe0\x9f\x34\x80\xc6\x41\x47\x6a\x4f\x2f\x0d\x54\x85\x1a\x9b\x72\x7d\x08\x93\x01\x71\x57\xa7\x43\xec\xda\x5f\x5f\xf6\x6e\xfd\x18\x6d\xd3\xde\x22\xe9\x27\x7f\x6c\x94\xb2\xb6\xca\x6e\xa9\xf3\xab\x19\xdc\x4f\x26\x77\x4d\x59\x36\x9f\x36\xb6\xf3\xd4\x6f\xe7\xa9\x6d\x47\xe7\x69\x6b\xca\xb4\xf9\xac\xb1\x8d\x67\x7e\x1b\xcf\x46\x25\x8a\x61\x27\x59\x76\x75\x52\xa2\xaf\x9d\xb1\x79\x11\xe4\x8b\xad\xbd\x97\x88\xce\x95\xc9\xbc\x04\x02\x04\x79\x29\x66\x16\xee\x7e\x92\x86\x3b\x21\x65\x9e\x3f\xd3\xcb\x3e\xe0\x69\xa2\xb0\xe5\x28\x44\x11\xde\xda\xe9\x00\x1a\x7d\x13\x04\xdf\x40\xcb\x91\x38\xa0\x8e\xcf\x60\xb8\xa0\x51\x10\x14\xbc\xc6\xe6\xde\x2e\x75\x8e\xb8\x1f\x54\xca\x4b\x69\xbd\x8d\x51\xc8\x5d\x96\x6a\x7c\x8c\x23\x25\x5e\xd8\x0e\x12\xb8\xe0\xba\xf3\xcc\x5e\x12\x12\x8a\xb5\x13\x40\x3c\x3f\x0c\xc6\xab\xe6\x88\x84\xbb\x1a\x72\x35\x98\xcc\xf7\xb5\x90\xda\xd8\x0d\xcd\x10\x4e\xd3\x66\xea\xd5\x6a\x30\x50\xc9\x55\x06\xaa\x64\x02\x7a\xfa\xca\xa8\x9c\xd3\x7b\x3d\xc2\xdc\xd3\xc5\xd9\x58\x58\xae\x52\x29\x09\x2a\xf2\x2e\xac\x29\x1c\x6a\x72\x9b\xd6\x5a\x92\xa3\xd4\xc8\x14\xcb\xe4\x97\x2f\x9c\xce\x14\x14\x9d\xac\x62\x62\x81\x9d\x0b\xe9\x7a\x9a\xc9\x26\xab\xbc\x4c\xc6\xef\x09\xdf\xd5\x60\xff\x3d\x08\xe9\x61\x41\x48\x5e\x6c\x32\x8f\x9a\x4c\x48\xd6\x55\xbf\xd3\x71\x3e\xfb\x57\x44\xee\x7b\xcf\x2b\x42\x97\x2b\x80\x55\x7a\xf1\x4e\xcd\x12\x74\x8d\x85\xe7\xff\x64\xed\x41\x48\xc2\xdc\x25\x1c\x90\x28\x56\x9b\xf5\x39\x7c\xee\x39\xcc\xa3\x52\x98\x25\x6e\x76\x87\xab\x78\x53\xe5\xf4\x40\x8f\x5f\xff\x75\x11\xf2\x03\x7b\x0f\x45\x66\xa2\x3d\x10\x5d\x2e\x6b\x21\xdc\x8f\xed\xa4\x9d\xb7\xce\xbe\x8a\x90\x1a\x51\x75\x3a\xeb\x74\x58\x29\x7e\x5e\x42\x44\xf5\x3b\x44\xa1\x1f\x31\x94\xfc\x06\x5d\xff\xd3\x7a\x4c\x90\x17\x6f\x94\x3e\x6a\xbc\xd1\xfc\xf7\x78\xa3\xb5\xf1\x46\x71\x35\xde\x28\xfe\x94\xf1\x46\xe3\x86\x78\xa3\xf1\xd7\x1d\x6f\x14\x7b\x9c\x2e\xfe\xb2\xe3\x8d\xce\x6f\x09\xa1\x11\x09\xcf\x35\xdb\xf7\x4d\x65\x93\xb2\x8b\x01\xa0\x79\x4c\x4e\x34\x07\xd4\x8b\xc6\x29\xa2\xf5\x1b\x74\x8c\xed\x84\x99\x3e\x79\xba\xfb\x87\x5e\x21\x5e\x5a\x8c\x40\x80\x44\xb2\x14\x6d\x23\x88\x3c\x55\x54\x87\x2b\x82\xe8\x0c\xbe\x80\x22\x1b\xc7\xa2\x84\x97\x7b\xc5\x56\x98\x0a\x56\x77\xd5\x2a\x69\x11\x66\x61\xfb\x6a\x0a\x21\x29\x22\x15\x5a\xfa\xc6\xa0\x63\x2a\x09\xbf\xc1\x66\x98\xe1\x45\x62\x7f\x3a\xdd\xde\xfd\x8e\x94\x20\xef\x8a\x36\xdd\xf9\x12\xaa\xf1\x00\xa8\x56\xa6\x18\x87\x76\x7a\x63\x77\x0d\xf3\x5a\xdb\x77\x96\x8d\x94\x3c\xee\xc5\x36\xa0\xe9\xf6\x4b\x4a\x2a\xc1\x55\xde\x9a\xf0\xfa\x9a\x28\xec\x51\xf4\x5c\x6b\x23\xfe\xba\xe8\x54\x28\xc3\x4d\xf3\xc8\x31\x24\xbf\xb0\xc6\xa0\xe3\x9f\x39\x9b\xcf\xb4\x63\x67\xfd\x75\x68\x9b\x03\x4a\x94\x4d\x89\x24\xed\xa6\x52\x06\x0a\x5b\x62\xc8\x85\xb4\xd3\x70\xcb\xe0\x61\x82\x9b\xe1\x06\x6c\x28\xb7\x13\x11\xcf\x68\x5b\xee\xe1\x8a\xd8\x61\x76\x3a\x60\xd5\xa7\x86\x7c\xac\xd2\xd9\x8b\x54\xe9\x6a\x9b\xea\xc1\x5c\x49\x54\xfe\x50\x4c\xe4\x6a\xcd\x44\x2a\xa1\x43\xae\x72\x5e\x37\x11\x07\x69\x72\xb3\xb1\x9e\x2d\x56\xc0\x4e\xe2\xc6\xb0\xa3\x52\x69\x25\x56\x39\xdf\x72\x6f\xf5\x00\xd4\x37\x40\xa9\x0d\xfb\x2a\x11\x92\x50\xa2\x08\xb6\xd9\xb2\x0e\x08\xeb\x82\xb0\x6c\xdf\x2b\xb6\xb7\x64\xb3\xcd\xe3\xea\xaf\x18\x97\x51\x96\x3f\x66\x68\xaa\xf7\xe6\x91\xe1\xb1\x4c\x6e\xc8\x21\x9b\xd3\x26\xc0\xf9\xd0\xae\x83\xab\xa8\x5a\xc7\x5f\x5b\x6c\x75\xc4\xde\x95\xfa\x1c\x91\x2a\xba\xac\xaa\x57\x39\x43\xca\x91\xfc\xca\x6e\xdb\xfc\xf5\x3d\xb6\xb5\x3e\x04\xbd\x76\x84\xd3\x0c\xa8\x71\x63\xfb\x25\xea\xa4\xae\x95\x73\xb4\xa9\x26\x70\xb3\x68\x41\xb0\x20\x27\xf3\xaa\x6a\xe5\x9d\xf8\x91\xdd\x88\x23\xfa\x2d\xe8\x76\xc9\xb7\xe4\x5b\xf2\xa4\x0f\x9f\xc8\x2c\x43\xd7\xd1\x04\x5d\xde\x83\x70\x22\x97\xa9\x06\x89\x87\x9a\xee\xfa\x7b\x28\x79\xa8\xb9\x6e\x16\xda\x89\x36\x50\x6e\x56\xa7\xdc\xaf\xf5\x11\x36\x48\x8c\x7b\xb2\x92\x2a\x66\x42\x71\x57\xfd\xcb\x9c\x34\x28\xa2\xae\x7f\xfe\x89\xe3\xa9\x0e\x31\x40\xcc\xd0\x1f\x16\x4e\x18\xbf\xc5\x3c\x16\x88\xdd\x9f\xea\x4f\x0b\x12\x9e\x63\x9c\x64\x75\xec\x44\x3a\x4d\x50\xa3\x7f\x53\xe3\x39\x1d\x85\x0b\xa5\xd7\x75\xf5\xa9\x79\x06\x21\x52\x28\x55\xb4\x13\xce\x52\xac\xbb\x2c\x33\x06\x25\x63\x8d\x89\x68\x8a\x81\xf5\x4c\x58\xa5\xce\x35\x02\xce\x14\xc4\x56\xc4\x2a\xd9\x5b\xd1\x5d\x68\x30\x20\xe1\xc5\x78\xce\x39\xa1\x72\xa2\x40\x89\x88\x62\xd7\x5a\xda\xd4\xf1\x38\x43\x39\x52\xaf\x74\x8b\xf6\x59\x32\x89\x53\x5d\x58\xc0\x56\x71\xa3\xa3\xfa\x62\x4f\x81\x94\xe0\x0c\x0b\x00\xba\x05\x59\x49\xd9\xfc\x01\xfc\xe0\x38\x48\xd1\xcb\x7e\x31\x2d\x1d\x68\xe3\xf6\x99\x5f\xed\x49\xe4\x44\x8d\x31\xd7\xf7\xf9\xc0\x01\xa8\x97\xaa\xb7\x5d\x21\xa5\x00\x86\x8a\x0a\x02\x6f\xf4\x97\x78\xfc\x7e\xfb\xe1\x77\xab\xe3\x68\x18\xeb\x8f\x51\x6f\xbf\x32\x23\x3b\x58\x3e\xb7\x0e\x4e\x39\x0e\x37\xcc\xa1\x4a\xfe\x1b\xc6\x7c\xc5\x24\x3b\xa0\xf1\xdb\x14\x37\x8a\x36\x35\xf3\x67\x85\x58\xfa\x08\x90\xcb\x02\xfe\xcb\x68\x91\xa1\xfb\xa1\x5d\x1d\xad\xa2\x1c\x61\x86\x72\xa4\xd5\x42\x0e\x62\x50\x4a\x5f\x57\x9e\x87\xd1\xf7\x1a\xf5\xb6\x12\x57\xd1\x6d\xae\x66\x28\xf6\xfa\xd6\x32\x47\x69\xae\x53\x15\x3f\x74\x29\xbf\x2f\x4d\x9a\x9a\xba\x2a\xd5\xd3\x70\x71\x27\x8f\x5e\xed\xd7\x36\x23\xd4\xaa\x91\xba\xe0\x7d\xc7\x4a\xbc\x71\x79\x1e\x03\x70\x81\x5d\x82\xb0\x35\xd8\xa2\xa5\x7c\x8b\x92\xa0\x0f\x0b\xca\x48\x1c\xb1\x49\xc4\x81\x3c\x5b\x21\x18\x95\xa6\x53\xde\xad\x7d\x5f\x18\x93\x47\x0d\xb1\xf2\x6b\xaa\xff\x58\xdf\x90\x85\xc4\x51\x91\xb2\x56\x21\x72\x11\x0b\x51\xdd\x16\x75\x49\xad\xe9\xce\xce\x22\xd4\xbf\x26\x3d\x3d\xa4\xcb\x86\x66\xd6\xf5\xba\x42\xe2\x2b\x09\x54\x66\x13\x9c\xa9\x3d\x5e\x07\x61\xd1\xd4\xac\x79\xb7\x37\x34\xa5\xf6\xd3\xda\xa6\x56\x09\xc8\x0f\x69\xcb\x1b\xfe\x6a\x54\x2f\xa1\x6c\x29\xea\xde\x03\x6e\x7e\x5c\x1c\x5a\x51\x18\xc0\x4e\x47\x5a\xe2\x57\xde\x5d\xeb\x08\xe0\x47\x77\xba\x5c\x4a\xe3\x75\x55\xeb\xd5\x55\xdb\x5a\x2c\x95\x75\x7d\x8b\x18\xa7\xbb\xa9\x15\x88\x90\xff\xc5\xa7\x1e\x46\xf2\xd9\x48\x7c\xbc\xad\xd5\x40\x82\x72\x9a\xb0\xb1\x9d\x9c\xa1\xe5\xad\x8c\x20\x22\x19\xd0\xc9\xfd\x8c\xc5\xe6\x72\xfd\x19\x8e\x4c\x49\xe5\x04\x2b\xbf\x43\x3f\x4d\xba\xe6\xbc\xb3\xeb\xee\x68\xaa\x54\xaa\x9d\xe0\xdc\xdb\xac\xb4\xb2\x82\x15\xcf\x03\xb4\x28\x87\x49\x5c\x35\x5d\x3c\x5d\xdc\x66\x9b\x69\x57\x89\xd5\xd3\x65\x53\x76\xc5\xf1\xec\xfa\x33\x44\x93\xd5\x9c\x97\x8a\xd3\x99\xef\xdd\x3f\x84\xa3\x6e\xf1\x83\x45\xc3\x51\x8b\x36\x70\x6a\x61\x92\xf5\x46\x91\x08\xdf\xb0\x98\xb8\xab\x2c\x44\x78\x46\xae\xd4\xe2\x37\x56\x32\x76\x7f\x53\x63\x27\x92\xfa\x7f\xb5\x31\x6d\x9d\x28\x4a\x72\xb1\x13\x08\xa4\x43\xbe\x75\x50\xec\x82\xb2\x98\x0c\x4c\x79\x14\x27\xe6\xbc\x65\x40\x91\x30\xf5\x06\x49\x06\x11\xfd\xc1\xb8\x03\x53\x88\xe8\x8f\x58\x3b\xaa\x51\x73\x58\xc8\x42\xc1\xb8\x5c\xe9\xec\xe2\xda\xeb\xca\xfc\xd1\x1e\x33\xb6\x5c\x24\xaf\x3b\xa0\x45\x69\xf4\x1a\xcb\xeb\x70\x92\x32\xc6\x41\xb2\xbb\x97\x6f\xfa\xe4\xc7\xde\xbe\x88\x92\xff\xdc\xdb\x67\xc3\x74\x94\x37\x34\x00\x6c\x98\x76\xfb\xc5\x8b\x27\xa5\xcf\x70\x77\x6f\x00\x84\x76\x9f\xed\x21\x1c\xf5\x20\x5a\xb8\x4f\x62\xc0\xd0\x34\xa1\x03\xed\xbb\x70\xac\x58\x71\xaf\xf7\x2d\x87\xbb\xfd\x5e\x0f\x4d\x49\x9c\xe0\xca\x27\x61\x3f\xe1\x0f\xe5\xf7\x58\xbf\xdf\x70\x6c\x3c\x1f\x4f\x12\x2e\x3e\x5b\x18\x93\xe7\x07\x51\x84\x19\xf4\x61\x28\xd9\xbb\xd9\x2c\xbf\x39\xaf\x56\xa6\xbf\xe1\xf0\x77\x3e\x8b\xb1\x24\xc6\x0b\xba\x6b\x4d\xee\x9f\x3c\x18\xcf\x2a\xe1\x51\x4e\xae\xf9\x7e\xe1\xfb\xa7\xf6\xd7\x80\xdb\xdc\xcc\x44\x3b\x2e\xe9\x38\x8b\x46\xcf\x2a\xdf\x65\x90\x42\xd5\x52\x06\xe1\x73\xed\x4d\xa8\xd0\x59\xfa\x07\x8d\xa6\xac\x99\x82\x3e\x85\xe9\x74\x0a\xfd\x4a\x22\x97\xae\x26\x40\x24\x34\x80\x38\x90\x00\xeb\x8b\x3f\x6d\x80\x03\xc0\xa8\x8f\x86\x72\x54\xb8\x45\xc8\x15\xb0\xb5\x17\xa4\x27\x8c\x8a\x5d\x3c\x4e\x1b\xa9\xb2\x76\xa3\x12\x44\x76\xfd\xc2\x37\xf9\x8d\xee\x8f\x40\x94\x1b\x73\x8b\xd1\x68\xa1\xe3\xf7\x86\xa0\x87\x64\x7e\x93\xfb\x5b\x4e\x04\x51\x9b\x0b\xec\xf4\x20\x2a\x7d\x7a\x65\xdc\x2c\xc0\x42\xed\xac\x7e\x06\x47\xe8\xfc\x6e\x46\x06\xab\xab\x67\x5e\x46\x1d\xba\x19\x3e\x89\x86\xba\x76\xd2\xfe\xa2\xa0\x74\xa6\xef\xc8\xfd\x58\x58\xbd\x24\x42\x26\x54\x8f\xfb\x63\x9b\x3a\xd0\xb3\x7c\x3c\xc0\xbf\xbf\xf9\xc2\x20\xfe\x57\x72\xf7\x11\xf0\xb9\xe7\xec\x8d\xa7\xfe\x17\x06\x01\x8d\x22\xa5\x69\xfe\x89\xf1\x29\x96\x10\x2c\x38\xb9\x22\x1f\x06\xbb\xff\x37\xc4\xdd\x5f\x0e\xba\xff\xe8\x75\xbf\x1f\x81\xe2\xb9\x3b\x5a\xf4\xd0\x1f\xf6\x32\xef\x2b\xdc\xff\x8f\xdd\xec\xbe\x38\x31\x63\x69\x32\xbe\xfb\x0a\xa1\x72\xd0\xfd\x07\xee\xfe\xd2\xeb\x7e\xff\xcf\xee\xc5\x68\xd1\x47\xfd\xbd\x3f\x66\x0f\x98\x3f\x67\xe9\xd7\x88\x13\xd5\xd9\xef\x7d\xf7\x87\xc6\xd9\x37\x24\xa2\xf6\xe7\x23\xf5\x75\x87\x9f\x84\xfd\xe7\xe9\xca\xdc\x8b\xc5\x0a\xd6\x69\x9c\x45\x76\xbd\x1b\xa8\x83\xaa\x97\x83\xe4\x77\xd6\xca\xb6\xa1\x9e\x8c\xdc\x85\xef\xa1\xbe\x37\xf0\x8c\xa4\x64\x2c\x19\x07\xdf\x4c\x89\xc4\x43\xaa\x34\xd3\xe0\x9b\x27\xe4\xc9\x37\xc1\xe8\x1b\xa8\xd3\x1c\x49\xc9\x93\xcb\xb9\x34\x43\xd2\xe2\x00\x44\x34\x5a\xb8\xeb\x7e\xbd\x2b\x8c\x63\x32\x66\x31\x79\x77\x7a\x7c\xc8\xa6\x33\x46\x09\x95\xfa\x2e\x9d\x8a\xcf\x63\x05\x56\x74\x35\xac\x68\x11\xd5\x50\xf8\x2e\x18\x97\x85\x6f\x0e\xd9\x3c\x8d\xdb\x94\xc9\xb6\x0e\x74\x33\x73\x6d\x4f\x38\x9b\xb6\xd5\x4c\xda\x12\x5f\xb5\x6f\x13\x79\xdd\x56\x53\x6a\xdb\x29\x85\xdf\x18\xd1\x8f\xcf\x29\x4d\xe8\xd5\x39\x11\x52\x2c\x97\x9c\xfc\x3c\x4f\x78\x09\xe4\x78\x36\x0b\xa0\x5b\x18\xe7\xe5\xb3\x50\x4d\x0d\x8a\x52\x01\xba\x21\x5c\x28\x06\x14\xec\x85\x7b\x61\xef\xc9\x1f\xff\x70\x49\xfe\xf0\xac\x3f\x0e\x32\xd8\xfa\xff\x01\x00\x00\xff\xff\x74\xe1\x01\xf7\x22\x15\x0d\x00") -func web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4JsBytes() ([]byte, error) { +func web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJsBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4Js, - "web_ui/assets/consul-ui-1b984a2dd785945b71a755b88134c6c4.js", + _web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJs, + "web_ui/assets/consul-ui-21d63b0298afc21debc0d574ec59049b.js", ) } -func web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4Js() (*asset, error) { - bytes, err := web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4JsBytes() +func web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJs() (*asset, error) { + bytes, err := web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/consul-ui-1b984a2dd785945b71a755b88134c6c4.js", size: 644571, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/consul-ui-21d63b0298afc21debc0d574ec59049b.js", size: 857378, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xe9\x8e\xe4\x38\xb3\x28\xf6\x2a\x74\x8f\x07\xd3\xd5\x9d\xe2\xa7\x3d\xb7\xd3\x85\xef\xdc\xb9\xf7\x60\x0c\xf4\xd8\xb0\xbf\x7b\x1a\x06\x06\x8d\x03\x95\xc4\xac\xd4\x6d\xa5\xa4\x23\x29\x6b\xe9\x44\xcd\x63\xf8\x9f\x01\x3f\x81\x1f\xca\x4f\x62\x70\x91\x44\x52\xa4\xb6\xcc\xec\x65\xbe\x46\x77\x55\x65\x4a\x64\x30\x18\x0c\x06\x83\xc1\x88\xe0\xdf\xc3\x7d\x50\x94\xa8\x02\xaf\xfe\xfd\xbf\xff\x9b\xb1\x7a\xb5\x85\xd5\x73\x8e\x8c\x28\x0e\x92\xec\x7e\xc1\x7f\xd9\x04\x61\x15\x3f\xa0\xc5\x1f\x45\x96\xa0\x77\xf4\xd9\xc7\xdb\x28\x7e\xc0\x3f\x20\x8a\x40\xd0\xf3\xaa\xbf\x72\xae\xad\x9b\xb7\x55\x83\xc5\x21\x88\x53\xda\x50\xf3\xa9\x7e\x49\x1e\xe4\xf5\x9b\xb6\xd6\xa9\x42\x4f\x95\x11\xa1\x30\x2b\x82\x2a\xce\xd2\x4d\x9a\xa5\xe8\x65\x17\xa3\x24\x2a\x51\xb5\xd8\x17\xa7\xbb\xac\x88\x50\x41\x9f\x57\xc1\x5d\x82\x40\x18\xe4\xb8\xe8\x82\x7e\xab\xa2\xfa\xc3\xbe\xf9\x80\x82\x88\x7c\x8d\x16\xd5\x9e\xb6\x10\x24\xf1\x7d\xba\x49\xd0\xae\x7a\x09\x8a\x2a\x0e\x13\xb4\x08\xca\x38\x42\x8b\x5d\x7c\x7f\x2c\xd0\x62\x97\x65\x15\x2a\x16\xb8\x26\xfe\x73\x5f\x64\xc7\x7c\xb1\x2f\x16\x25\x0a\x71\x5b\xa7\x28\x2e\xf3\x24\x78\xde\xdc\x25\x59\xf8\xe9\x05\xa2\xc3\x1d\x2a\x8c\xbb\xa0\x8c\x43\x23\x2a\xb2\x3c\xca\x1e\x53\xa3\x2a\xe2\xfb\x7b\x54\xfc\x11\x14\x71\x60\xa0\xa7\x3c\x48\x23\x14\xbd\xab\x8a\x23\xfa\x08\x58\x8d\x3c\x7b\x44\x85\x51\xa2\x04\x85\x95\x51\x56\x41\x75\x2c\x8d\x38\xac\xfb\x02\x1f\xe3\x6a\x6f\x44\xa8\x0a\xe2\xa4\x04\x55\xb4\xc9\xd2\xe4\xd9\x08\xf7\x71\x12\x11\x82\x27\xc1\x1d\x4a\x36\x9b\x3b\xb4\xcb\x0a\x74\x32\x1e\xd1\xdd\xa7\xb8\x32\xaa\x22\x48\xcb\x5d\x56\x1c\x36\x45\x56\x05\x15\x7a\x6d\xad\xcc\x08\xdd\xdf\x6c\x75\x2f\x5e\x48\x27\xfe\xf3\x98\x55\x68\x71\x97\x45\xcf\x8b\x28\x5a\x44\xc9\x22\xaa\x16\x0d\xdd\x19\x55\xf6\xd6\x62\x6f\x2f\xf6\xce\x62\xef\x2e\xf6\xde\x62\xef\x63\x92\xec\xab\x43\xb2\x88\x77\x45\x70\x40\x8b\x04\xdd\xa3\x34\x5a\x24\xf1\x22\x4b\x16\xf9\x22\x2f\xd0\x02\x93\x3b\x28\x50\xb0\x38\x26\xa7\x43\x50\xdc\xc7\xe9\xc6\xdc\xe6\x41\x14\xc5\xe9\xfd\xc6\x7c\xe9\x80\x3c\xed\xb2\xb4\x32\xca\xf8\x33\xda\x58\xa6\xf9\xf3\x96\x7c\x7d\x44\xf1\xfd\xbe\xda\xb8\x26\xa9\x50\x56\x45\x96\xde\x9f\xf8\x37\x4b\xd3\x7c\x39\x26\xa7\x24\x2e\x31\x1d\x9f\x13\xc4\x33\x08\xc7\x12\xa7\xb6\xe5\xe0\x18\xc5\xd9\x02\x8f\x43\xb4\x88\x0f\xf7\x8b\xec\xee\x7f\xa0\xb0\x5a\x3c\xc4\x11\xca\x4e\x7b\x0a\x36\x38\x56\xd9\xf6\x10\x3c\x19\x8f\x71\x54\xed\x09\x42\x2f\xb0\xcc\x8a\xca\x08\xb3\xb4\x2a\xb2\x04\x90\x31\x58\x6c\xd2\xac\x7a\x9d\xc4\x37\xb7\x77\xc7\xaa\xca\x52\x36\x0d\x51\x82\x2a\x24\xbf\xfb\x03\xbf\x7b\x47\x3f\x7f\x24\xef\x60\x98\xe5\xcf\xc6\x5d\x95\xde\xd0\xaf\x5c\x65\xfa\x84\x72\xd0\x3e\x28\xf3\x2c\x3f\xe6\xef\x0e\x28\x3d\x7e\xbc\x61\x13\xf0\x2e\x48\x53\x54\x7c\x04\x69\xf0\xb0\xd9\xc5\x45\x59\x19\xd9\xce\xc0\x10\x28\x66\x6f\xf1\xa4\xa4\x25\x71\xb5\xb8\x42\x87\x8f\x8b\x80\x36\x11\x16\x28\xc0\x43\x4e\x51\xae\x91\x58\xf0\x68\x96\xc7\xbb\x43\x5c\x7d\x14\x9e\x15\xa8\x44\xd5\x47\x32\xec\xb0\x42\x87\x3c\x09\x2a\x64\xa0\xa2\xc8\x0a\x80\x99\x32\x90\xde\x54\xd9\x27\x94\xb6\x5f\xf1\x08\x01\x32\xe9\xd9\x90\x14\xb7\x9b\x24\x28\x2b\xca\xd6\x00\x86\x59\xba\x8b\x8b\x03\x99\xfc\x46\x90\xa0\xa2\xba\x3d\x26\xb7\x49\x7c\xfb\xe6\x1c\xb8\xb7\x14\xf5\x70\x8f\xc2\x4f\x77\xd9\xd3\xc7\xb7\x7a\xe2\x90\x37\xa0\xcc\x83\x94\xc8\x26\x32\xd1\xa8\x18\x00\x30\x20\x93\xbf\x9c\x00\x8d\xce\xe3\x7d\x50\x1a\xac\x2e\x46\xac\x86\xd3\xdb\xdb\xde\x9a\x93\x31\x10\x25\xc9\x24\x14\x74\x55\xc7\xe3\xd0\x8a\xa6\xec\x18\xee\x8d\x30\x48\x92\xec\x58\x91\x19\xba\xad\x5f\x1d\xcb\x46\x10\xb2\x17\x87\xec\xb3\xea\x69\xd9\x7d\x28\x3f\x78\xa1\xfc\x5d\xa0\x07\x14\x24\x20\x4e\xf3\x63\xb5\x21\x68\xa2\xe8\x4f\x74\xd0\x60\x13\xa1\x5d\x70\x4c\x2a\x25\x42\x58\x86\x75\x11\x62\x4f\xcb\xee\x43\xf9\xc1\x4b\x70\x0a\xb3\x24\x2b\x36\x3f\x59\x9e\xef\xec\x76\x2f\x84\xbd\xa8\x18\x63\xab\x12\x7d\x1f\xa7\x7b\x54\xc4\xd5\x0b\x16\xc3\x4d\x95\x9d\x6d\xd9\xee\x0b\xe6\xfe\xd3\x5d\x10\x7e\xc2\x6b\x51\x1a\x19\xec\xed\x6e\xb7\xdb\x72\x12\xd3\xcf\x9f\xb6\x64\x81\x2b\x50\x1a\xa1\x02\x4b\xba\x2c\xaf\xe2\x43\xfc\x19\xbd\x47\xf7\xf1\x5d\x9c\xc4\xd5\x73\xd3\x47\x52\x12\x57\x34\x82\xe8\x7f\x1c\xcb\x8a\x4a\x5c\xd2\x51\xdd\xab\x52\xf3\xa6\x07\x54\x56\x3e\x19\x14\xc5\x43\x96\x55\x7b\x8c\xd3\x7d\x11\x3c\x97\x61\x90\xb4\xe3\x2f\x15\x08\xd2\x2a\x0e\x92\x38\x28\x51\xb4\xcd\x1e\x50\xb1\x4b\xb2\x47\xe3\x69\xb3\x8f\xa3\x08\xa5\xed\x93\xe7\x4d\x19\x16\x59\x92\x34\x60\xee\xb2\x27\x8c\x05\x06\x41\x15\x05\xfc\x64\xab\x7e\x7a\x88\x53\x26\xd7\x1d\xd3\xcc\x9f\x5e\x60\x78\x30\x4a\x2c\x66\xf7\x31\xfc\x35\x8b\xd0\xef\x31\x16\x6a\x8b\x30\x8b\x10\x5e\xc9\x4e\x3a\x54\xf1\x1a\x41\x9e\xed\x82\x43\x9c\x3c\x6f\x0e\x59\x9a\x95\x79\x10\xa2\x17\xac\xae\x74\x46\xcc\xdf\x2d\xfd\x95\xbd\x65\x2b\x8c\x95\x3f\x6d\xd9\xb2\x68\x41\xaf\x40\x07\x60\x92\xd1\x67\x22\x77\x41\xb8\x77\x41\x79\xa9\x59\x4b\x4f\x7c\x73\xff\x25\x89\xd3\x4f\xbf\x07\xe1\x3f\x9e\xcb\x0a\x1d\xfe\x2d\x4b\xab\x85\x11\xe4\x79\x82\x8c\x92\x3c\x59\xbc\xfa\x07\xba\xcf\x10\xf8\xf7\xff\xe5\xd5\xe2\xff\xc8\xee\xb2\x2a\x5b\xfc\x6f\x4f\xcf\xf7\x28\x5d\xfc\xfb\xdd\x31\xad\x8e\x8b\x5f\x83\x14\x43\x4d\x92\xc5\xab\x7f\x8b\x8b\x00\xfc\x23\x48\xcb\x57\x8b\x57\xff\xb5\xc8\xe2\xa8\xfe\xf2\x1b\x4a\x1e\x50\x15\x87\x01\xf8\x5f\xd1\x11\xbd\x5a\x34\xdf\x17\xff\x5a\xc4\x41\xb2\x28\x83\xb4\x34\x4a\x54\xc4\xbb\x17\x7e\x75\xa6\x4b\x71\xcd\xd5\x2d\x25\x35\x6c\x81\x49\xf9\xc2\x93\xba\x19\x68\x3a\xcc\xb8\x0c\x99\xb5\x3c\x4f\x10\xfa\x3f\xee\xe3\x0a\x19\x84\xea\x9b\xbc\x40\xdb\xc7\xac\x88\x8c\xc7\x22\xc8\x37\x69\x56\x1c\x82\xe4\xe5\xcd\x62\xb3\x09\x76\x58\xa7\xeb\x28\x4c\x1c\x77\x30\x4c\xb7\xdd\x47\x8d\x0e\x7a\xe2\x54\x81\x80\x0e\x0f\x5b\x17\x83\x28\xce\x3e\xf2\x4f\x1a\xd1\x78\x0a\x8f\x45\x99\x15\x9b\x3c\x8b\xd3\x0a\x15\x2f\x23\x6b\x3d\x20\xac\x9a\x06\x09\xd3\x56\xef\x82\x12\x25\x31\xd6\x6a\x88\xc4\x90\xde\x56\x59\xfe\xd2\xcb\x33\xb5\xf2\xf5\x42\x75\xb5\x5a\x91\x36\x5f\xde\xb0\x8f\x6c\x32\x98\x2f\x30\x8a\xcb\x10\x53\x18\x2b\x9b\x78\x49\x85\x45\x76\xac\x90\x11\x06\x45\x54\xaf\x85\xc7\x04\x24\x31\xd5\x4e\xc2\x24\x28\xcb\x8f\x37\x0b\xb8\x4b\x82\x72\x6f\x1c\x50\x59\x06\xf7\x08\xe4\x90\x28\x05\x8a\xc7\x4f\x71\x59\x95\xdd\xe7\xe5\x31\x0c\x51\xa9\x78\xf1\x18\x14\x69\x9c\xde\x2f\xe0\x1e\x05\x49\xb5\x27\x04\x32\xb2\x63\x95\x1f\x2b\xbc\xa9\x40\x07\x09\x8f\x34\xab\xe2\x10\xc1\x38\xdd\x65\xcd\x97\x3c\x4b\xe2\xf0\xd9\x38\x04\x69\x70\x8f\x0e\x28\xad\x9a\x37\x0d\xf4\x7c\x5f\x04\x25\x32\x50\x14\x57\x59\xd1\xed\x5d\x15\xdc\x19\x69\xf0\x00\x20\x25\x2c\xc2\xfb\x1a\x58\x05\xf7\x54\xf5\xc0\x12\x5d\xae\x20\x28\x47\x58\x91\x98\xa2\x27\xf2\xef\x36\x51\x5c\xe2\xb5\x38\xea\x2d\xb4\xcb\xc2\x63\xd9\x5b\x62\x8f\x07\xb5\xde\x82\x0d\x17\xc4\x05\x9a\xa6\xa9\x2a\xca\x2a\xdf\xc8\xb5\xd9\xf3\x8b\x29\xb7\x32\x78\xd2\xb7\xab\x41\x1f\xec\xee\xb5\x5a\xbe\xf0\x66\xa0\x0a\xee\xf2\x20\x45\xc9\xc7\xdb\x9c\xdb\x2b\xaa\xb7\xea\xb7\x6c\x8b\xab\x7e\xc9\x36\xbe\xa3\xf7\x18\x54\x67\x84\x51\x90\xde\xa3\x22\x3b\x96\xb7\x74\xc4\x08\xc6\x51\xfc\x30\x61\xb7\xd2\x85\xd4\x8e\xce\xb9\x90\x1a\x18\xe2\x0e\x48\xf8\xd6\xce\x35\xf1\x31\x9d\x5d\xe2\x33\x61\x3e\xa9\x5e\xf5\xcd\x20\xc5\xc4\x61\x5b\x2b\xf6\xa6\xae\xa7\xda\x8a\xf1\x13\x42\xff\x46\x84\xc7\x63\xab\xac\x39\x72\x1a\xcc\xab\x25\xe0\x72\xb1\xdd\x25\xf7\xa6\x1e\x07\x7d\x01\x3a\x84\xfa\xf7\xc3\x63\x76\x85\xad\x2d\xc7\x9f\x67\x6d\x71\x47\xc0\x57\x12\xe0\xe2\x8d\x10\x2a\x5e\x67\xb3\x3e\x28\x65\xbe\x50\xab\x92\x44\xfa\x42\xad\x36\xed\x11\x68\x7b\x8b\xe8\x1c\xf0\x53\x9c\x46\x46\x5e\x64\x4f\xcf\xba\xe7\xa2\x5a\x52\x1b\x35\x60\xcd\xe2\x44\x31\x69\x4c\x1d\xf8\x47\x58\x3c\xa6\x1b\x41\x06\x47\xe9\x12\x20\xa5\x21\xb8\x04\xc8\x06\xd8\x2c\xa3\x8d\x30\x8f\xcf\x85\xc0\x66\xea\xd9\x60\xe8\x5c\x9c\x69\x4a\x1a\x1c\xc7\x8b\xc1\x95\x06\xf3\x62\x70\x25\x88\x53\x8d\x60\x8a\x21\x3d\x03\x84\x30\xa6\xe7\xc0\xe1\x07\x75\xba\x71\x6e\xe4\xa8\x5e\x02\xb0\x72\x58\x2f\x01\xb8\x05\x19\x01\x6a\x6e\x10\x65\x5c\x15\xe1\x8d\x59\xd9\xdd\x94\xd5\x3b\x5d\x6a\x97\x28\xb3\x24\x8e\x5e\xfe\xaa\x5b\x8d\x71\xea\xe0\x58\xbd\xed\x8a\x5a\x95\xc6\xaa\xc9\x86\x8a\x3d\xf1\x6c\x6f\xe9\x5b\x5b\xf6\xcd\x59\x3a\x81\x6b\xcb\x43\x77\x61\xd2\x8d\xeb\xbf\x0a\xfb\xe5\x6e\xb5\x0b\xa4\x0e\xdc\x05\xa1\x15\x86\x52\x07\x54\x36\x82\xde\xad\xdc\xc4\xd5\x7b\x1e\x72\x2b\xb4\xf6\x03\xe7\x45\x6f\x3a\x99\xbd\xa1\x9c\x87\x0f\xb3\x80\xcf\x35\x4b\x8d\xb4\x1a\x0d\x9a\x7f\xb4\x96\x9e\xb3\xf4\xb1\xe9\x22\xac\x43\x42\x74\x87\xd0\xce\x1e\x45\x42\xad\x69\x4d\x34\x86\xa9\xa7\xe4\x1d\x8a\xa4\x46\x76\x41\xe8\x9a\x76\x17\x2c\x33\xe5\xa9\x70\x0d\x77\xcb\x0e\x18\x1b\xdd\x99\xce\x7a\x2b\x7c\x7b\xe1\xcd\x78\x2a\x7c\xcc\x9d\xd7\x91\x12\xf4\x78\xa5\x06\x64\x06\x76\xb4\x74\x5f\x34\xdb\xfb\xbe\x5d\xb6\xa2\xbd\x55\x70\x67\x75\xda\xa3\x33\x65\x2b\xa0\xf4\x32\xd6\x6e\x30\xc2\x38\xa0\xdf\xe5\x4f\xdb\xab\x2b\xfa\xe3\xac\x96\x41\xa7\x3f\x94\x62\xdb\x76\xc8\x5f\x54\x67\xc5\x43\xa0\xd9\x28\x4c\x02\x2d\xda\x52\x86\x2c\x16\x8a\x46\x4d\xe4\x9a\x81\x33\xd8\x68\x9f\x05\xf6\x12\x96\xa5\x6f\xd8\x42\x30\x7b\xaf\xf9\xbd\x6c\xac\xbe\xcd\xad\xc1\x1c\xac\x46\xa9\x44\xe1\xd2\x71\x5d\x6f\x2b\x7c\xeb\x8a\xe2\xde\x43\x18\x55\x3b\x6b\x14\x22\xd4\xdb\x94\x77\x67\xad\x6c\xb3\x6f\x2a\x35\x32\x49\xb5\x02\x78\x81\x1d\xc8\x0b\xbe\x24\x48\xfb\x27\xea\xe8\x93\x8e\x3e\x09\xfb\x2d\x9a\xb6\x7f\x98\xff\xbe\x47\xf3\xdf\xf7\x61\x21\xfb\x61\x92\xba\x9e\xed\xe2\x87\xf5\x67\x90\x82\x8a\x85\x80\x2d\x2a\xd2\x3e\x9f\xac\x2d\x63\x17\x02\x5e\x41\x54\xb4\xb0\xdc\xd9\xb6\x1d\x0e\xb6\xa0\x3a\xda\x1f\xb5\x02\xaf\x91\x6d\x79\xcd\xbe\x85\x7e\x7b\xf9\xe9\x58\x24\xe5\x7f\x94\xa8\x78\x88\x43\x44\xf7\x6f\xcc\xf3\x44\xb1\x81\x45\x65\x96\x3c\x60\x80\x41\x11\x81\xa8\x9a\x52\x92\x7a\xb1\xf4\x14\x2d\x6b\xe9\x81\x71\x60\x3e\x79\x55\x96\x25\x55\x9c\x7f\x9c\x59\xad\x07\x3f\xbc\x15\x9f\xda\xe2\x50\x1d\x7d\x73\x65\x9e\xc4\x55\x35\xb9\x8f\x63\xaa\xe9\x1b\x65\x25\x86\x9b\x51\x17\x6c\x00\xa3\xa7\xb8\x8a\xd3\x7b\x51\x27\x5b\xfc\x11\x05\x55\x60\xc8\x85\xe5\xa7\x6c\xd4\xc9\x3a\x46\xa7\xe9\x0e\xa1\x08\x33\x2b\x80\xf5\x27\x16\x00\x60\x64\xc7\x4a\xb0\x41\xa8\x5b\xe8\x2b\xc1\x5a\xab\xf6\x4a\xfa\xaa\x1f\x33\xb8\xa2\x3f\x7a\x4c\x04\x5a\x5e\x64\x39\x2a\xaa\xe7\x4d\x96\x07\x61\x5c\x3d\x6f\xfb\xde\x29\xea\x47\x47\x16\x15\x00\xad\x72\xab\x7b\xae\xa8\x57\xc5\x87\x38\xbd\x37\x76\xc7\x94\x88\xb1\x4d\x12\xa7\x28\x28\xb6\xc3\x25\x18\x2e\x1b\x73\xcb\x5c\xb7\x0c\xf4\x80\xd2\xaa\xa4\x6e\xa6\xc2\x4c\xaf\x45\x77\x9c\xde\x4f\x9d\xf4\x54\x04\x4f\x2e\x3f\x28\x00\x9a\x0a\x54\x4c\x8e\x6f\x80\x95\x9f\x26\x61\x28\x5a\x33\xe5\x8c\xb2\xf2\x30\xc6\x22\x0c\x82\xf6\x5c\x04\x54\x95\xa7\x88\xbb\xd1\xdd\x1f\x57\x73\x52\xd3\x63\x3b\x3e\xae\xe6\x44\xa9\x3b\xb6\xe3\xe3\x2b\x4f\x45\x60\x64\xf7\xc7\x57\x1e\x5c\x02\x20\x55\x39\x6e\xc7\xae\x04\xea\xf2\x83\xcd\x8c\x25\x6d\x5f\xf1\xe1\x46\x46\x92\xaf\xaf\xb8\x66\xb5\x12\x04\x9b\xfa\x1d\x93\x31\xd2\x4b\x41\x60\xa9\xdf\xf1\x0b\xa1\x7a\xf5\x12\x5a\x1f\x2e\x37\x0c\x50\xc0\x6a\xb8\x9c\xb8\x78\xaa\xc7\xb2\xef\x65\xdd\x52\x5d\x46\x39\x4e\x7d\x2f\x7b\x56\xe2\x66\xc5\x34\x95\xeb\xa8\xd9\xbb\xfa\x1e\xd3\x12\x55\xca\x7a\xf4\x8d\xaa\x2e\x4a\x82\x67\xa9\x31\xf6\x48\x5b\xba\xdb\x0c\xf7\xb8\x5e\x99\x2d\x79\x65\x26\x3e\xe4\x74\x93\x50\x65\xf7\xf7\x09\x02\x74\xcf\x52\xa1\xa7\xea\xe3\x42\xf1\x22\x0f\xca\xf2\x31\x2b\x22\xe9\x65\x13\xb7\x26\x9c\x67\x01\x56\x06\x3d\x55\x02\xdc\x81\x42\x6d\x1b\xda\x82\xea\xf6\x9a\xc0\x4a\xfa\x94\x78\x8b\x93\x60\xc4\x8f\xd4\xac\xa4\x47\x62\x64\x4d\x0d\x66\x83\xb5\x1b\x74\x49\xb0\x02\x7f\x00\xa9\x23\x51\x7f\x99\x16\x0f\x5d\xb9\xa6\x45\xa1\x00\x89\x67\x24\x67\xbb\xbb\x38\xa9\x48\x10\x66\x71\x33\x8a\x5a\x67\x83\xd1\xa0\x3c\x0d\x94\x18\xd2\x41\x82\x78\xe0\x6a\xe9\x15\xe8\xb0\xfd\x86\x83\x3c\xb6\x58\x3f\x36\xea\x10\x16\xe8\xa9\xce\x66\xaf\xbf\x61\x9d\xb1\xe5\x9c\xb9\x6f\xd4\xed\xfc\x54\x47\xcb\x55\x13\x2a\x20\x0a\x14\x2e\xb0\x90\x7f\x7e\x4b\x9e\x68\x36\x5e\x3a\x69\xc1\x2a\x4d\x99\xb1\x7c\x95\x39\x41\xa3\x03\x35\x59\xd0\x60\x30\xb2\x1c\x45\xe9\xcd\xc8\xd2\x1a\xd4\x89\xf5\x76\xb8\x7d\x45\x31\x7d\xf3\x8a\xc2\xa4\xf5\x3a\xfc\xa7\xf6\x8c\x6f\xe3\x96\x05\x9b\x33\x5e\x8a\x52\xbc\x58\x49\x76\xe7\x2a\x82\x11\x2a\xab\x38\x25\xeb\xa4\x54\x29\xcd\x22\xd4\x7e\x2b\xf7\xd9\x23\x80\x25\x2a\x4b\x6a\xbf\x8c\x18\x49\xa8\x03\xc8\x85\xad\xf7\xa0\xee\xce\x77\x1d\xb3\xab\xb2\x86\xe4\x63\x0c\x1b\xb4\x08\x95\x04\x2d\xf3\xd1\x6e\x65\x09\x20\x5d\xd0\xac\x47\xb7\x62\x88\x30\x49\x9c\x80\xff\x26\xb7\x51\x75\xc6\x82\x70\x7b\xd1\xc8\xe3\x4e\x6e\x04\x50\x07\x9d\xb2\xef\x02\x6f\x89\x79\x13\xa6\x18\xf9\x6b\x36\xfa\x1e\xc3\x9d\x45\xdc\xbf\x6a\xa0\xb4\xc6\xa2\x76\x12\x57\x5b\xdb\x7b\x51\x2c\x20\x5f\x78\xa5\xf8\xa7\x93\xf7\x7f\x21\x61\xff\x35\x24\x9a\x5a\x1c\x75\xc5\xcf\x7c\xa9\x33\x63\xce\x0b\x29\x44\x7c\x53\x19\xf9\xfa\x43\x8d\xd5\xaa\xb1\xbd\x4a\xeb\x1c\x1d\xf3\x87\x16\x32\xac\x85\x9c\xab\x11\x74\x74\x80\x19\xcb\xfd\x37\xb0\x6a\x7f\xb1\xb5\x97\x17\x11\x1e\x16\x11\xaa\x59\xf1\x75\xd6\xe0\x1f\xbb\xb5\xd1\xab\xf7\x5f\x62\xdd\xfe\x0b\x88\xc7\x7f\xa6\xbd\xd6\x25\x95\x9b\xef\x4b\x38\x7f\x43\x5b\xaa\xae\x5d\xf5\x87\x92\x27\x2a\x79\x93\x74\xbb\xd9\x3a\x8e\x5e\xf9\xe8\x59\x76\xd9\xb0\x59\x36\x19\xb7\x9f\x1e\x8b\x20\xcf\x51\x51\x07\x1a\x71\x53\x9c\x26\xf9\xea\x78\x39\x2f\x08\xf7\xd3\xd0\x2a\xd6\xae\x92\x0c\xc9\x6d\x14\x09\x6f\x50\x64\xe0\x81\x3e\x16\x21\x22\x62\x85\x0d\x40\xc0\xcc\xb7\xaa\x04\x33\xf8\x0b\x6e\x71\x30\xdf\x4c\xe7\x0d\x57\x4b\x13\x8e\x83\x4b\x88\xe1\x49\xac\xbf\x8a\xf0\x31\x45\x3e\x50\xa6\xa3\xa0\x83\x42\x67\xf9\x7a\x99\x0b\x15\x7a\x12\x3a\x5c\x54\x87\x92\xc1\x4d\x51\xba\x3a\x89\x4d\x27\x2b\x63\x25\xca\x83\x22\xa8\xb2\x62\x50\x1b\xe3\x3c\xc4\xf1\x08\x7e\xbb\xe9\x19\x07\xc5\x2e\xd7\xe7\xeb\xf8\x62\xd7\xd1\x8e\xfa\x70\x3b\x3a\x53\xb1\x1e\xc0\x26\x09\xcd\x30\x3b\x22\x72\x52\xe2\xc4\xf1\xba\xc8\x34\xa5\x43\x06\xfd\x25\x55\x16\x6e\x7c\x66\xb8\x98\x63\x82\xe5\x05\x02\x24\x8f\x9b\x9c\x5a\x35\x02\xf9\x99\x1a\x07\x87\xdc\x5c\x37\x6e\x8c\xe1\x99\x9a\x43\x07\x8b\x19\xbe\xd0\x51\xfc\x20\xd8\x6c\xeb\x1c\x72\x63\x56\xac\x6f\x65\x6d\xd1\xcc\xa6\x7a\xfc\x15\x7a\x55\x67\x7d\xbe\xc4\x52\xab\x5d\xcd\xbe\xf2\x8e\x9b\xb0\xda\xd7\x91\x71\xd7\x10\x4a\x33\xc5\x4a\x3b\xe1\x2e\x23\x09\xce\x9a\xc0\x64\xda\x29\xf4\x46\x85\x12\xa8\xd5\x9b\x5a\x55\xe9\x9b\x56\x8c\xe6\xab\x3e\x67\xe9\x31\x7f\x0d\xcd\xe4\x22\x0a\xc1\xfc\x35\xff\x8c\x35\xfb\xc2\xeb\xeb\x05\xd6\x48\x7e\xbe\xb1\x55\x40\x1f\xfe\x12\x16\x31\xc9\x58\xaa\x58\x18\xc6\x7b\xb3\x27\x70\x17\xc4\x09\xf1\x76\xc4\xdb\xd7\xe1\xe2\x05\x8a\xe2\x02\x85\x55\x7f\x71\xd1\x29\xb8\xdf\xf9\xba\x9b\x71\x02\xb0\x80\xf5\x9e\x5e\xa8\x2b\x76\x57\xec\xf9\x30\x18\xcd\x8d\x38\x42\x69\x15\x57\xcf\xb3\x21\xcd\xa8\x88\xd9\x62\xa8\xda\x48\x12\xab\xdd\xb4\xeb\xe2\x9c\x06\x05\x1f\x82\xe4\x88\x8c\x20\x49\xb2\x47\x56\xa8\x46\xa0\x5b\xaa\xe6\xbd\xc1\x82\x11\x4a\x9f\x07\x0b\xe5\x41\x59\xb6\x81\x1e\xfa\x72\xb5\x8e\x25\x95\x53\x85\x68\xd7\x59\x40\xf4\xa5\x48\xc4\xf6\x60\x31\x96\x7a\x63\xb0\x5c\x83\x9a\x5c\xae\x40\x88\x24\xf3\xa6\xbd\x91\x50\x97\x97\x52\xee\x8d\x26\xcb\x4a\x67\x6a\xe8\x0a\xf6\x4d\x85\xa1\x3a\x7a\xd6\x1f\xa8\x39\xa2\xa0\xc8\xda\x3d\x9a\x6b\xd0\x08\xb8\x5b\xc1\xf4\xdb\x5f\x87\xb1\xd2\x94\x2a\x6c\xe8\xc6\x57\xa1\x13\xe9\x16\xa6\x59\x6a\x7c\x46\x45\x36\xaa\xf0\xd8\x82\xdc\x2a\x4c\x16\xc4\x40\xcc\xc0\xdc\x92\x4e\xb7\x47\xe9\x94\x60\xfd\x6b\x9f\x33\x1a\xf5\xae\x1b\x72\xfa\x9e\x0e\xdf\xc9\x05\xfa\x10\xd1\x95\xd5\xf3\x99\xa6\x46\x4f\x01\x91\xaf\x84\x4b\x45\x54\xd9\xc0\xdf\xb2\xdb\x5e\x98\x1c\x1c\x2c\x5f\xdf\x78\x20\xd5\x13\xd2\x18\x75\x68\x24\xbc\xed\x23\x90\xb2\xa0\x9e\x3a\xaa\xe2\xba\xb7\x22\x5d\x18\x2f\xf4\x0d\xfd\x1f\xbb\xac\x20\x86\xe3\xbb\xa0\x60\x0a\xbc\xce\x9b\x3d\xf8\xa3\x40\xc9\x9b\x77\x7b\x94\x70\x31\x2b\xaa\x92\xf5\xda\x43\x60\x1f\xb2\x28\x48\xfe\x23\x4c\xb2\x12\x4d\xb4\xe5\x35\x38\xb2\x86\xd1\x53\x85\x8a\x34\x48\x9a\xc6\x47\x1f\x4c\xd2\x57\xf5\x62\x27\xca\xde\xa9\x40\xe8\x12\xd7\x07\xe3\x82\x5b\xd9\xeb\xb5\x70\x2b\x84\xe2\xa8\x86\x56\xb3\x8b\x96\xd9\x5e\x28\xd6\x61\x7a\x3e\x73\x57\x5f\x0d\x99\xfb\x47\xd6\x1b\x2c\x86\xf9\x4d\x5f\x88\x33\xd0\xe8\xf5\x21\x5d\x51\xb5\x52\xa4\x2b\xdd\xd5\x8c\x74\x25\x95\xea\x91\xae\xb0\x52\x47\x9a\x67\x8a\x98\x59\xbd\x61\xa4\xf6\x90\x0a\x13\x9e\x2c\x80\x35\x3b\x02\x41\x02\x11\x83\x5c\x54\x35\x0b\xbe\x7c\xcc\xa5\x29\xce\xe8\x32\xb2\xb4\xbc\x0c\x9e\x61\x53\x39\x07\x86\x48\x9d\x49\x77\x92\xa9\xab\x8c\x28\x33\xb3\x5f\xd3\x80\xb4\x1d\xab\x4f\x25\x65\xc1\xd0\xbc\xe8\x59\x0a\x3b\x65\xb4\xab\xa0\x5c\x52\xf1\x42\x58\xfb\xaa\x48\x61\xcf\x0d\x5a\xa4\x75\x0d\x0a\x65\x9a\x24\x82\xdd\xbe\xb5\xef\x7a\xbb\xd7\x2d\xd6\xd3\xc3\x4e\x61\xf5\x3b\xb1\x9f\x7b\x7e\x8b\xc7\x27\xde\x28\x50\x8e\x82\x6a\x93\x66\xec\xd3\x96\x7b\x97\x67\x34\x2a\x70\x13\x22\x72\xa7\x8a\x64\x7d\xbe\x0d\x78\xed\xb8\xd5\x27\x0e\xe8\xcf\x4d\x5a\xed\x8d\x76\x71\x79\x6d\xdf\x70\xaa\x88\xee\xe2\xa8\xb7\xe2\x3e\x88\x2f\x27\xbc\x11\xd5\x03\xc2\x67\x54\x87\x08\xe2\xd4\x48\x83\x87\x5a\x41\x19\xed\x2d\xd9\xcf\xba\xe3\x8d\x79\x30\xa6\x73\xfe\x01\xf5\x54\xe6\xfd\xa9\x06\x5a\x96\xac\x7f\x97\x58\xe6\x41\xa3\xed\x69\x5d\x4a\xae\xab\xaf\xa8\x88\x34\xc3\x6e\xa7\x80\x32\xe0\xc5\x33\xbe\xdf\x73\x4d\x80\x5a\x9c\xf4\xde\x39\x53\x91\x9a\x61\x4e\x54\x61\x15\x81\x00\x3f\xe6\x65\x51\x23\xcd\x76\x59\xc2\xb5\xdb\x04\x36\x1f\x82\xf2\x53\x57\x58\xa8\x9f\x0a\x75\x24\x21\xb2\x55\x3d\xec\xb1\x68\x8e\x94\x39\x97\x33\x3a\x4e\xb7\xcc\xcd\xb6\x4c\xb2\x7c\xb3\x17\x36\xea\x0d\xf5\xe2\x9f\xce\xf8\xf7\xed\xd8\xdf\x3a\x03\xde\x67\x6d\x19\x58\x46\x2f\x6d\xff\x99\x6a\xdb\xe9\xf4\x65\xaa\x79\x65\x82\x99\xa4\xd3\xd6\x80\x6e\x30\xde\x26\xf1\xbd\x6a\x11\x63\x0c\x22\x67\xe9\x1e\x3a\x6b\xca\x38\x9d\xe4\xfb\xb4\xb2\x7c\x93\xca\xd1\x0f\xab\x51\xa7\x98\x2c\x0e\x7e\x98\x69\xae\xa0\x62\x5f\xd0\xd8\xa3\x36\xbe\x8c\xd3\xb7\xbf\xaa\xe2\xfe\x4f\x66\x08\xfa\x6a\xfb\x91\x6f\xc1\x3c\xa5\xdd\x11\x0d\x19\xae\x64\x69\xd4\xd9\x43\x7d\x41\x2b\x53\x07\x17\xd1\xee\x13\xc5\x65\x9e\x04\xcf\x9b\x38\x25\xae\x93\x77\x49\x16\x7e\xda\x62\x95\x0d\x77\xf8\x97\x5f\xb6\x0f\x71\xc9\xee\xaf\xde\x90\x8f\x09\xe2\xcd\x41\xc4\x05\x05\x97\x0e\xe2\x74\xcb\xae\xe8\x85\x36\x3a\x6c\xdb\xb0\x79\x74\xd8\xca\x77\xe6\x62\x3d\xbb\xca\x72\xed\xbd\x18\x1d\xed\x7c\xc6\xb9\xac\x4e\xa9\x1d\x71\xb2\x35\xc9\x3e\xcc\x1b\xce\xe2\x43\x70\x8f\x36\xc7\x22\x79\xfd\x4b\x14\x54\xc1\x86\x7c\xff\x5b\xf9\x70\xff\xf6\xe9\x90\x6c\xc3\x7d\x50\x94\xa8\x7a\xf7\xef\xff\xfd\xdf\x8c\xd5\xe2\x5f\xca\x87\x7b\xf0\x10\xa3\xc7\xff\x92\x3d\xbd\x7b\x65\x02\x13\xd8\x2e\xb0\xdd\x57\xe0\xe9\x90\xa4\xe5\xbb\x57\xfb\xaa\xca\x37\x7f\xfb\xdb\xe3\xe3\x23\x7c\x74\x60\x56\xdc\xff\xcd\x36\x4d\x13\x03\x7b\x75\xfb\x2f\x79\x50\xed\x41\xf4\xee\xd5\xef\x16\xb0\xad\xbd\x6d\xbf\xb7\x6c\x60\x03\xfc\xe5\xf3\xc1\xb2\x0d\x67\x6f\xd8\x0f\x86\xbd\xb7\x1f\xec\xcf\x07\xd3\x70\xc9\x57\x77\x6f\x3f\xb8\x9f\x5f\x81\x5d\x9c\x24\xef\x5e\xfd\x6c\x3b\xbb\x60\xb5\x73\x96\xaf\xfe\x76\xfb\x2f\x18\xea\xed\x2f\x37\x2f\x63\x77\x53\x53\x16\xab\xef\x97\x3e\xa6\x69\xf2\xc4\xf9\x42\x4a\xe4\x85\x57\xbe\x0b\xc8\x75\xd1\xde\xf3\x3d\x8f\xe1\xf6\xbb\xef\xc1\xcb\xc4\x2d\xf5\x57\x9e\x7d\x16\x70\x1e\x2c\x17\xda\x89\xe1\x40\x1f\xff\xbc\xf7\x81\xe5\x25\x3e\xf0\x81\x6f\xf8\x86\x05\x5d\xf2\xe3\x40\x1f\x38\xd0\xff\x80\x29\x32\x7a\x06\xce\xdb\x4f\x7e\x5d\x82\x38\xc0\x72\xf6\x0d\x41\x70\x9f\xdf\x5b\x1e\xb0\x56\x09\xa6\x06\xa3\x08\xc0\x3f\xec\xed\x6f\xce\x83\x40\x10\x7a\x47\xd3\x80\xc8\x9e\xb0\xc5\xe9\x16\xfd\xbe\xe9\x33\x79\xb2\x28\xdd\x75\xbe\xf2\xa4\x71\x80\x6d\x7d\xf0\xe1\x2a\x69\x48\xb0\x02\xeb\x84\x12\x00\xf8\x80\x91\xe0\xbd\x65\x01\x1f\xae\x3e\x60\xc9\xd2\x47\x82\xd9\x16\xeb\xd1\x96\xcd\x41\x33\x61\xaf\x55\x6f\xa2\x1f\xd0\x48\x2b\x41\x8f\x8a\xae\xd5\x9a\xbf\xf2\xb0\xaf\x81\x0f\x5d\xeb\xbd\xb5\x84\xde\x1a\x78\xc0\xb2\x81\x65\xe2\x8f\xf8\x29\xf0\x80\x47\x3f\xd0\x67\x96\x8d\x4b\x2c\x9b\xd7\x16\x79\x64\x39\xe4\x33\x79\x6c\xd1\xff\xf4\x33\x7d\xde\xcb\x26\xa3\x9c\xc4\x2f\xea\x41\x3b\xca\xa6\x3e\xd6\xd9\x73\x9a\xbf\xc8\x57\x1f\x69\x27\xb4\xa0\x85\xab\x03\xb8\x06\x36\xb0\x1f\x2c\x37\x34\x81\x05\x2d\x03\x7f\x37\x6c\x60\xff\xe6\x85\x06\x29\x63\xd8\x06\x5c\x1b\xb6\x61\x7f\xf0\x42\x13\x3f\xc2\xdf\x70\x99\xbd\xe5\x7e\x3e\x18\x36\xb0\x6c\xe8\xad\xdf\xd7\x63\x0c\xac\x25\x58\x91\x8f\x1e\x1e\xfa\x65\xcb\x47\xe4\xe9\x12\xd4\xaf\x6b\x3e\x5a\xb2\x92\xf4\xe9\x92\xe3\x23\xf2\x18\x3f\x61\x45\x78\xf6\xa1\x97\x88\x0c\x2c\x44\xd3\x0c\x68\xca\xd2\x3f\x46\xea\xdc\x91\x92\x26\x7a\x4f\x9c\xc8\x58\x97\xf6\xcb\xfa\x55\x77\x9d\xa4\x47\xb8\x1d\x4f\xf2\xf7\xfa\xca\x3c\x64\x03\xfb\x57\x1f\xba\x2b\xcc\x3d\x80\x7d\xb0\xec\xd2\xc5\x9f\x2c\xb3\xf9\x6f\xb0\x07\x86\x65\xfe\x03\x8b\x6d\xb2\x55\xb0\x81\x4d\x39\xc7\x4b\x0c\xcf\xf0\xf0\xba\x6f\x61\x1d\xc8\x7a\x8f\xeb\xb8\xd0\x5a\x26\x58\xc2\x1b\x4b\xc2\x58\x6b\xb0\x4a\x8c\x35\x58\x4f\xd6\x18\x27\x59\xa4\x55\x85\xff\xa9\x49\x2c\x2f\xa5\xbd\x87\xb4\x5f\x7d\x33\xfd\x2d\xd1\xea\xab\xed\xc7\xbf\x25\x22\xbc\x9c\x75\x0c\xfc\x57\x72\xc8\xfa\x32\x27\x04\x0a\x58\x5f\x7b\x52\xae\x81\xe5\x43\x6b\xf9\xde\x85\x2b\x07\x58\x76\x82\xd9\xc9\x26\x8c\xf5\x9e\xa8\xf1\xb6\x05\x96\xe4\x21\x65\xb4\x6f\x6f\x42\x5d\xac\x03\x2f\xd7\x39\xe4\xfa\xca\xeb\x93\x4f\xd5\x36\x2c\x0f\x88\xce\x66\x2d\xc1\x12\x2b\x6e\x2b\xb2\x81\x03\x96\x59\x5b\xc4\xce\x90\x12\x53\x5d\x4d\xc6\xfb\x7d\x7c\xed\xd9\x71\x09\xf2\x7d\xb5\x95\xe6\x2b\x0c\xbd\x68\xd3\x9a\xc9\x02\x6a\x20\x5f\x9b\x15\x96\xd0\x05\x96\x9f\xb8\xd0\x37\x5c\xe8\x83\xfa\xa7\xb6\x23\x33\x13\xd9\x7b\x5a\xec\xdb\xe3\x86\x0b\xa1\x3f\x9c\x4a\x4f\x88\xd6\xbf\xa0\xf0\x73\x80\x6d\x4e\xd7\xb5\x2c\x07\x7a\x2b\x3f\x71\x0c\xe7\xbd\xe5\x43\xd7\x72\xc9\x12\xe1\x00\xf2\x8f\x18\x78\xd7\xf8\x69\x62\x38\xf8\x1f\x70\xde\x2f\x71\x79\x60\xad\x70\x15\xc3\x86\x4b\x8f\xfc\x22\xeb\x09\xa1\x94\xe5\x02\xf2\x00\xff\xfa\xfc\xbb\xe5\xc0\xb5\xe9\xc1\x95\xe7\x87\x36\x5c\x9a\x3e\x74\xd7\x2b\xe0\x42\x6f\x8d\x0b\x78\xae\x0b\x5c\xb8\xb2\x7c\xe0\x41\xdf\x4d\xa0\xed\xb8\xd0\xf4\x71\x49\xd7\x87\x4b\xcf\x05\x0e\x5c\xad\x08\xb8\x35\x70\xa0\x07\x3c\x68\x3a\xbe\x01\x5d\x97\x54\x5e\xdb\x86\x0d\xcd\x95\x03\x5c\xe8\x2c\x2d\xc3\x83\xab\xa5\x4f\x3f\x3f\x18\x76\xe8\x41\xd3\x73\x81\x89\xe1\xfb\x2b\xc3\xc3\x10\x6d\xc7\xf0\xa1\xe5\xd9\xd0\x76\x71\x55\x7b\xb9\x34\x2c\x68\x2f\x57\x78\xbc\xed\x95\xe1\x40\xdb\x5f\x1a\x2e\x5c\xaf\x3d\xc3\x82\xcb\xd5\xda\x80\x8e\x63\x38\x70\xe9\x2d\xa1\xe7\xbb\x86\x0b\xbd\xa5\x0d\x6c\x68\xf9\xb8\x9f\xbe\xbd\x36\xe0\xd2\x5e\x1a\x36\xf4\x4d\xcf\x80\x8e\xeb\x19\x0e\x74\x5d\x1b\x3a\xbe\x6d\xc0\x95\xe3\xe3\xee\x1a\xd0\xb3\x97\xb8\xce\xda\x35\xa0\x6d\x63\xbc\x57\xb6\x63\x58\xd0\x5c\xad\xe1\xda\xc2\x0d\xad\x4d\x0b\xd8\xd0\xb4\x30\x31\x2d\xac\xc5\xc2\xf5\x6a\x69\x40\xcb\xb4\xa0\xb3\xf6\x0c\x68\xae\x2d\x60\x41\xd3\xc2\x9d\xb1\xa0\x6d\xd9\xd0\xb5\x57\x70\x6d\xaf\xc8\x53\xcc\xa0\xb8\xd7\xae\xe9\xe0\x4f\x0f\x76\x68\xb8\xd0\xb2\x96\xc0\x34\x3c\xe8\x2f\x6d\x03\xae\x7d\xc3\x87\xae\xbb\x32\x6c\xb8\x5a\xba\x06\xf4\x3d\x1b\xa3\x6f\x41\xcb\x59\x62\x8c\xbd\x25\xb0\xe0\x6a\x65\x1b\x1e\xb4\xac\x95\x81\x07\x05\x77\x1f\x0f\x85\x85\x69\xb2\xc6\xef\x9d\xb5\x65\xb8\x98\x3e\x81\x0b\x57\x6b\x40\x7e\x99\xc0\xb4\x1c\xe8\x63\x3a\x2d\x97\xbf\xae\xa1\x6d\x63\xad\xc2\xf6\x81\x65\x41\xdf\x74\xa0\xeb\x58\xa0\x19\x7e\x8f\x9f\x31\xfe\xbf\x2d\xfd\x95\x4d\x1f\x18\xc5\x31\x41\xef\x5e\xa5\x59\xfa\x19\x15\x19\x3f\x91\x34\x9e\x8b\x5f\x5b\xcc\x59\x0e\x5c\xd9\xc0\xf9\xd5\x72\x88\xad\x7f\x85\x27\x0c\x74\x80\x05\x2c\x0b\x58\xa1\x61\x41\x07\x98\x86\x0d\x5d\xb8\x72\x31\xc9\x6d\x60\xff\xe6\x36\x46\x28\x40\xcd\x4e\x0f\x96\x4f\x0d\x55\xd4\x6e\x05\xec\xbd\xe5\xd6\xb6\x2c\x66\xbb\xaa\xed\x54\xcc\x6c\x65\xd8\x7b\x3c\xb0\xab\xcf\x58\x9d\x73\x7e\xf3\x1f\xec\xbd\xf3\x60\xe0\xcd\x8e\x03\xfc\xbd\xf7\x60\xd8\xf8\xd9\xe7\xdf\x7d\xb0\x7e\xb0\xf7\xfe\x87\xf5\x6f\xfe\xe7\x83\x67\xf8\x21\xf4\x3c\xcc\x38\x00\xba\x1e\xc6\xb1\x34\xc8\x07\xc3\xc2\x3f\xf8\xb3\x81\x3f\x93\xbf\xf8\xc9\xe7\xc3\x1a\x9a\x98\x95\xcc\xdf\x6c\xe7\xc1\xde\x1b\x36\x5c\xaf\x97\x0f\xf6\x6f\xd6\xea\xc1\xfd\xcd\xfd\xe0\xed\xed\x07\x0b\x9a\xe6\x72\x6f\x99\xe4\x8b\x07\xd7\x6b\x7b\x6f\xe3\x4a\x1f\x2c\xe7\xf3\xc1\x04\xe6\x6f\x16\x7e\xf8\x80\x05\x8a\x0d\x2c\x37\x71\xe0\x7a\x0d\xdc\x07\xc3\xd9\x63\x96\x22\x58\x7f\x73\xc2\xff\xc7\xa0\x5e\x71\x50\x27\x9f\x0d\x2b\xdc\x84\x2f\xb7\x4e\x62\x91\xe9\x83\x71\xfc\x71\xcf\xba\x94\x66\x29\x12\xc4\x15\x7a\x40\x69\x16\x45\x35\x0b\xb5\x16\xbd\x95\xfd\xab\xfd\xdf\x5e\x11\x9e\x5a\xe1\x65\xcb\x4d\x0c\xb8\x74\x96\x70\x69\xbd\xb7\x2c\xb0\x84\x9e\xe7\xff\xe6\x7c\x58\x41\x6f\xb9\x5f\x25\x78\x20\x5c\xbc\x3c\xac\x5c\x17\x2e\xf1\x8a\x61\x59\xef\x2d\x07\xac\xa0\xe9\xdb\x9f\x31\x05\x49\x92\x1e\x4c\x89\x4f\x88\xc0\xff\x95\x9a\xf6\xd9\x23\x83\x38\x75\xbd\x7b\x65\x41\xef\x15\x78\x7a\xf7\x0a\x2e\xbd\x57\xe0\x99\xfd\xad\xdf\xb9\xf8\x25\xf5\xf8\xaa\xbf\x15\x4f\xef\x5e\x2d\xa1\x4d\x8e\x08\xda\xe3\x5d\xe8\xe1\x45\x36\x59\x83\xf5\xab\x91\x4d\xb2\x47\x49\x9c\xa2\x30\xc8\xdf\xbd\x2a\xff\xf3\x18\x14\x88\x8c\xfc\x7d\xaf\x4d\x73\xbc\x3f\x6e\xa7\xe4\x05\x19\xc1\x05\xd6\x48\x39\x31\x99\x0f\xf0\x04\x60\x5a\xe5\x72\x8d\x97\xf4\xb5\xdd\x30\x02\xb1\x45\xf9\xd0\x73\x97\xbf\x91\x79\x67\xf9\x22\x2b\x38\x2d\x2b\xd8\x60\x09\x4d\xbc\x76\x2a\x58\x81\x34\x31\x81\x0f\x6c\x81\x0f\xec\x9a\x0f\xfc\x2e\x1f\x98\xbe\x03\xc8\xef\x64\x89\x55\x06\x40\x7e\xbf\x1a\xd3\xf6\x38\x86\xd0\x84\x2a\x7c\x5d\x3b\x00\x56\x74\x3f\x78\x7b\x0f\xae\x5d\xf7\x83\xf3\x9b\x17\x60\x11\x8e\x81\x99\x54\xb6\xbb\xed\x03\xb5\x6c\x7f\x30\x3c\xb8\x5e\xed\x0d\xfb\x83\xb5\xfe\xcd\xfb\x7c\x58\x1b\x16\x11\xe8\xd0\x5b\x27\xc6\x1a\xae\x1c\x40\x7e\x59\xe4\x50\x88\x58\x24\xe9\xf9\xf0\x07\xcb\xdc\xdb\x1f\x9c\xbd\xb1\xbc\x84\xa7\xc0\xf8\x1c\x3e\x83\xc9\x58\xfa\x53\x92\x48\x6f\x47\x66\x71\xe8\x89\xf7\xd6\x86\x49\x7f\x65\xfb\xd0\x0a\x2e\x2d\x3c\x07\x96\x96\xfb\xde\x72\xa1\x8b\xe7\x86\xeb\xec\x0d\xcb\x7c\xb0\x96\xd0\x72\x89\x4b\xcc\xca\xfb\x40\x4a\x7c\xfe\xdd\x36\xa1\xe5\x3a\x60\xf9\x80\x37\x56\x4b\x2b\x34\x01\x5c\xae\x7c\x03\xfa\x2e\x19\x7b\x7b\x4d\xcc\x6f\x6b\xfa\xf9\x37\x0c\xef\x5f\x2d\xe8\x3a\xe4\xa5\xe3\x10\xf6\xb2\x00\xde\xca\xe1\xda\x1f\x70\x53\xbf\x3a\xc0\x26\xd5\x1d\xf2\xdb\xc6\xda\xbe\xbd\xc6\x2c\x68\xe2\x26\x13\x0f\x78\x9f\x7f\xc7\x3a\xf6\x12\x58\x04\x89\xbd\x65\x3e\x90\x56\x56\x14\x4b\xfc\xe9\xf3\x01\xeb\x2f\x2b\x8f\xac\xf1\x56\xdb\x03\xf9\x1d\xad\xb8\xc6\x2f\x3f\x58\xd4\xf5\x0d\xda\x2b\x7f\xef\x61\xc0\x1f\x7c\xfc\xf9\x37\xd2\x16\xab\xda\x63\x2c\xec\x0f\x4d\xfd\xf2\x23\x69\x9b\xc0\xdf\x1b\x58\xd4\x1a\x9c\xf6\x66\xc1\xf5\x1a\xae\xc9\x1f\x60\xbf\xb7\x81\xb5\x92\x95\x38\x5f\x56\xe2\x56\x92\x12\x87\x15\x24\xcb\xfe\xcd\xfd\xb0\xda\x5b\xfe\x83\x65\x7e\x7b\xea\xed\x37\xd0\xf5\x71\xc9\x08\x2e\xc9\x23\x96\xb9\x04\x16\x5e\xe1\xeb\x15\xca\x34\x7f\xe6\x56\x40\xf2\x6d\x12\x15\x5d\x17\x7a\x2e\x30\xdf\x9b\xc0\xf6\xa0\xbf\xfe\xb0\x5a\x42\xd7\x4a\x2c\x1f\x2e\xb1\x6c\xf7\xfd\x0f\x8e\x07\x1d\xef\x3d\x2d\x66\xad\xa1\xf3\x59\x58\x58\x7d\x1b\x3a\x36\x30\x1f\xdc\x35\xb4\xbc\xdf\x48\xa9\x0f\x8e\x09\x57\xd6\x7b\x7b\x09\x57\xc0\x35\xa1\xbb\x7c\xf0\x6d\xb8\x5e\x12\x98\x2e\x86\xb9\xfa\xe0\xe3\xed\xfc\x1e\x4f\xec\xd5\x83\xb5\x82\xb6\x4d\x1b\x34\x48\x83\xf8\x97\xaa\x11\xcb\x72\xa0\xe5\x26\xa4\x0d\x83\x22\x6b\x7b\x70\xe9\x24\x06\x81\x4c\x2a\x3f\xf8\x16\x5c\xda\x89\x41\x1a\xb7\x7c\x68\x52\x35\xe3\x82\x9c\xfa\x63\x00\xce\x18\x80\x17\x65\xc0\xf0\xbc\xc0\xd2\xeb\x87\x24\x9e\x19\xae\x76\xb9\xe8\xad\xf3\x82\x92\xbe\xbe\xab\x44\xe8\x41\x8f\x9a\xfa\x4c\xbc\xce\xaf\x7c\x7a\xd8\x5d\x1a\xf5\x17\x83\x7c\xff\x87\x4d\xdc\x07\x89\x3a\x60\xd1\x53\x72\xbf\x39\xff\x66\x0a\x86\x09\x4d\xcb\x0d\x2c\xe8\x79\x1e\xa0\xbf\xa9\x3a\x0b\x5d\xd7\x31\xe0\x7a\xe5\x85\x06\x5e\xce\x0d\x68\x2f\x6d\x03\xfa\x06\x51\x4e\xe0\x7a\x45\x2c\xac\x58\x3d\xc0\x0f\x42\x03\x3a\x2b\x0f\x9a\xf6\xca\x80\xfe\xca\x83\xd6\xca\x23\x75\x71\x91\xc0\x62\xd6\x43\xfc\xbb\x85\x8d\x5f\xef\x89\x76\xf0\xc1\xf2\xa1\x13\x42\xd3\x5e\x43\x67\xe5\x43\xcb\x23\xba\x14\x2b\x43\x74\x09\xac\x39\x41\xbf\x79\x82\xdb\xa5\xcd\xe2\x56\x81\x09\x70\x9b\x06\xa9\xb8\xc6\x1f\x70\xb9\x1a\x65\x8a\xae\x5f\xf7\xc6\xff\x8d\x68\x35\x1f\x2c\xfb\x01\xf7\xfb\xf3\xef\x64\xbb\xbd\xc4\x48\x3a\x2e\x26\x00\xfe\x4d\xa4\x92\x01\x5d\xc3\x0a\x31\xae\xd0\x22\x46\x5c\xd7\xc1\x4f\x00\xb4\x97\x96\x01\x6d\x6f\x45\x68\x41\xca\x95\xe4\xa5\x65\xaf\x88\xad\x25\x84\xb6\xb7\xc4\xa5\xa0\x8b\xdb\x25\x76\x17\xcb\x5e\xc3\xa5\x6b\x93\x0a\x41\x47\x91\x23\x56\x18\x7b\x15\xe2\xd7\x26\x69\x09\x77\x66\x49\x8c\x34\xa2\xf2\x64\x79\xbe\xb3\xdb\x29\xf7\x96\xa3\xce\x16\xa6\xa4\xcd\xb8\x44\xd2\xd9\xf1\x71\xfb\xda\x98\x62\x7d\x8e\xa3\xef\x77\xea\x99\xc4\x96\xee\x87\xac\x8e\x69\xac\xc8\x6e\xc0\x21\x07\x0c\xf4\xf3\x0a\x5a\x16\x3d\x98\xc0\x25\x1c\xe8\x7b\x4b\xd0\xbc\x69\x7e\xb3\xfa\xf4\x9b\x41\x35\x7f\xfa\x99\xbe\xc7\x7a\xb9\x67\x90\xda\xf8\x89\xbd\x36\x9a\xb7\xf6\x1a\xcf\x00\xaf\x96\x03\xf8\xc9\xea\x9f\x5a\x0c\xac\xbe\x1f\x31\x20\x6f\xfb\xc7\xe6\xa4\xed\x66\xe9\xfb\xfa\xce\xb9\x9c\xef\x6d\x63\x21\x77\x27\x5b\xc8\xa9\x3b\x97\xf9\xdb\xf2\xc1\xc0\x3b\x5e\x31\xa4\x64\x85\xd6\x7e\xe0\x5c\x28\x10\x70\x44\x6e\x84\xb9\x21\xf5\x17\x0c\x2a\x1f\x5b\xf9\xeb\x8e\x3f\x16\x97\xf2\xe8\x97\xf5\xa8\x37\x83\xcd\x0d\xb2\x65\x83\x69\x15\x0c\x7f\x5a\x85\xb1\x1e\x1c\xc3\x89\x65\xbe\xb6\x1d\xc3\xb2\xc1\x4a\x9a\x35\x65\xd3\xcf\x86\x16\xa0\xa6\x05\x5e\x94\xec\x49\xa4\x35\x81\x7f\x11\xca\x7e\x45\x0f\xd2\xef\x83\x40\x63\x7c\x45\xb8\xab\x1a\xce\x9a\xd2\x6c\x0f\x8e\x89\x59\xef\xc0\xf1\xe7\xf3\x4d\x4b\x78\xa3\xbd\x72\x9c\x5f\x6d\xb8\x22\xd1\x4c\x8e\xb5\x02\x3e\x5c\x5a\x36\xde\x3e\x7b\x24\x0a\xc2\xf7\xc1\x0a\xae\x9c\x0f\xee\x7b\x1b\x6f\x8d\xe1\x72\x99\x18\x2b\xe8\x39\x2e\x58\x42\x7f\xe9\x3f\x18\x2e\x5c\xb9\xeb\x5f\x57\xd0\x5b\x79\xc0\x72\xa1\x43\xfc\x42\x96\xbe\x43\xb6\xc5\x98\xb0\xb4\x0d\x85\x0f\x01\x3f\x8f\x15\x39\xaf\xbf\xf2\x2a\xe8\x41\xdc\x9f\xbd\x01\x97\xeb\x04\x6b\x59\x58\x63\xf9\x57\x1f\xba\x4b\x0b\xd0\xdf\xf4\x3c\xc1\xf2\xc1\x1a\x7a\xc0\x67\x3f\x26\xc0\x2f\xf0\x13\x62\x80\xf3\xf1\x37\x07\x9a\x6b\x03\x7a\x6b\xe0\x42\xe2\x3f\xe2\x2d\x13\x68\x2f\xa1\xbd\x7a\xc0\xb0\x3d\xe0\xc2\xf5\xfa\xbd\x6d\x42\x77\x0d\xac\x75\x42\xbc\x58\x0c\x8f\x4a\xc9\x5f\x97\xd0\xb4\x80\xe5\x02\x0f\xd3\x7e\xbd\x06\x1e\x86\xfd\x0f\xf2\x94\x7c\xc4\x2f\xf0\x50\xd0\x52\xa4\x5d\x52\xae\xfe\xe2\x2a\x36\x2a\x42\xcc\x42\x4f\x7a\xb6\x1f\x03\x70\xe9\x01\x38\xf3\x64\x68\xfe\xbd\x10\xd3\x33\xfd\x4f\xcc\x7e\xaf\x2f\x3e\x37\xb7\xf8\x94\x44\xc4\xd3\x92\xba\x0c\x01\xbc\x86\xac\x1e\x66\x7d\x5a\x64\xf3\x94\xc4\xe9\x27\x55\x41\x6b\xbd\x5e\xff\x8d\xbc\x7d\x75\xfb\x2f\x11\xda\x95\xbc\xca\x86\x39\xcd\x09\x98\x1b\x00\x99\x03\x78\x81\x5b\x82\xf6\x09\x9d\x17\xcb\xcf\x07\xcb\x32\x46\x96\x34\x5c\x60\x59\xa3\x8a\xbe\x02\x71\xf4\xee\x55\x40\x78\x9b\xa2\x76\x2c\x51\xcb\xf6\xeb\xff\x66\x5b\xde\xfa\x15\x20\xd8\x6f\xf6\x05\xda\x91\xc7\xc1\x90\xc9\x44\x9b\x29\xe8\x1b\x50\xe3\x2c\xbc\x8d\x7c\x6f\xad\xa0\xb5\x02\xb6\x95\x18\x16\xf4\x5d\x63\x09\x4d\x07\xaf\x93\x6b\x68\xbb\x89\xb1\x84\x16\xde\xde\x5a\x34\x3d\xc5\x1a\x5a\x78\x43\xef\x3b\x80\xbd\xf7\xa0\xeb\xe3\xa5\xd2\x79\xef\x11\xaf\xa4\x6f\x30\xfc\xe0\x4b\xf7\x73\xba\x44\x9c\x73\xbb\xce\x40\x9d\xe9\xf7\xc2\xcc\xb8\x79\x65\xf4\x25\x24\x8a\x82\xd3\xef\x77\x18\x97\xf8\x7d\x20\x71\xd6\x88\xf4\xea\x97\x90\x9c\x96\xd9\x4a\xce\xf5\x2b\xf9\x54\x0a\xac\xaf\x29\x4b\xa9\x14\x63\x3e\x25\x98\xad\xfd\xf7\x4b\xe8\x2d\x3d\xb0\x82\x4b\x2f\x31\xa0\xbf\x72\x0c\x1b\xae\x1d\x60\x43\x7b\x49\x1c\x80\x97\xc4\x21\xcf\x37\xa0\xed\xb9\xef\x3d\x80\x35\x5d\xe0\xc0\x15\xfe\xe5\xad\x7d\xb8\x72\x6c\xfc\xd5\x4b\x48\x05\x40\x2a\x60\x28\x00\x43\xf9\x7c\x69\x79\x39\xf7\x7e\xb3\x91\x77\x45\x0d\x5c\xf9\xd3\x73\xed\xcd\xa8\x0b\x40\xf4\xd7\x06\xa8\x13\xed\x7f\x75\xab\xb3\x65\x87\x36\xb4\xf1\x0a\x48\xbc\xae\xd7\xc0\x35\xdc\x92\x7c\x32\x5c\xfa\x0f\xd0\x2f\x80\x7e\x00\xf8\x83\xcb\xb6\xac\x36\xf4\x97\xc0\x34\x56\xc4\xac\x69\xac\x80\xfb\x60\xef\x2d\xff\xc1\xb0\x43\x13\xbf\xf3\x0d\x0f\x3a\x8e\xe1\x1a\x2b\xa3\x57\x83\x1c\x97\xe0\xff\x1b\x58\x2f\x97\xa1\x0d\x97\x3e\x30\x81\x87\x27\x8f\x4b\x12\x6f\x98\x00\xfa\x9e\x01\x2d\x87\xf8\x9e\x1b\xd0\xf1\x81\x05\x57\x4e\x62\xc3\x35\xf1\xa5\xb7\x43\x0b\x7a\x96\x41\x1c\xd3\x6d\x88\xa7\xda\x6a\x4d\x3c\x78\x0c\x17\x92\xe9\xb7\xc4\x9f\x9c\xb5\xe1\x1b\x4b\xe8\x19\x96\x45\xff\x10\x4b\xad\x0d\x97\x2e\xb4\x3d\xc3\x81\xeb\x15\x5c\x26\x36\xb4\x7c\xe2\xff\xff\xab\x65\x42\xe2\x17\x87\x5b\xb5\xa0\xe3\xd1\x04\x01\xcb\xcf\xbf\xdb\x78\x7b\x80\x4b\xda\x2b\x8c\xe2\x0a\xba\x3e\x74\xfd\x7f\xb5\x2c\xb8\x32\xb1\x26\x44\xfe\xb0\x3d\x07\x1e\x7b\xdc\x3c\xc0\xcd\x03\x1f\x2c\x89\xde\x4f\xff\x50\x07\x5f\x07\x9a\x8e\x01\x49\x81\x95\x01\x57\x6e\x02\x5d\x1b\xba\xf6\x7b\x6b\x8d\xab\xd9\x78\x1d\x04\xb6\x89\x3f\x3b\xd0\x5e\x02\xea\x1b\x64\x2f\x3f\xff\xbe\x84\x1e\x71\x37\x4b\x08\x20\xfc\x2b\x34\xa0\xe9\x41\xdb\x32\xa0\xb9\xc2\x9d\xc7\x7f\x7c\xa2\x90\x41\xdf\x27\xfc\x43\x23\x3e\x00\xb4\x6d\x4c\x53\xd7\x35\xa0\xe9\x10\xd2\x9a\x22\x18\x7f\x89\x99\xca\x82\xae\x05\x3d\x2c\xc9\x6c\xfa\x07\x8f\x8b\xe1\xe1\xef\x2e\x89\xbc\x35\xf1\x9e\x0b\xda\x78\xa7\xe4\xb0\x82\x9f\x0f\x2e\x74\x2c\x03\x2e\x57\x89\x03\x2d\xac\xff\x59\x1e\x34\x6d\x03\x5a\x3e\x31\xfa\xfa\xbe\x41\x18\x99\x44\x9a\x24\x06\xb4\xf0\x8e\xe8\x9b\x54\x68\x7e\x30\xe2\x0f\x46\xe4\x25\x28\x3a\xdc\x11\x07\xe7\x32\x0e\x8d\xa8\xc8\xf2\x28\x7b\x4c\x4f\xcd\x9d\x09\x05\x4a\x82\x2a\x7e\x40\xea\x72\x0b\xe5\x53\x83\x65\xf9\xec\x7f\x0b\xde\x34\x52\xf9\x2e\x7b\x32\xca\xf8\x73\x9c\xde\x6f\xee\xb2\x22\xc2\x55\xb2\xa7\xad\xf2\xa9\x1a\x8f\x1a\x66\x8b\x77\x70\x57\x66\xc9\xb1\x42\x2c\x77\x68\x70\xac\xb2\xed\x67\x23\x4e\x23\xf4\xb4\xb1\x4c\xd3\xe4\x73\x8d\x86\x59\x92\x15\x9b\x9f\x76\xbb\x5d\x3f\x74\xc3\x48\xd0\xae\x3a\xe1\x5f\x1b\x73\xa8\x68\x81\x35\xb8\x13\xf9\xad\x2d\x8c\x55\x95\x24\x78\x6e\xb1\xde\xc5\x4f\x28\xe2\x50\xdb\x14\xf7\x77\xc1\x6b\x73\x81\xff\x41\xef\xa6\x4e\x84\x6a\x9a\x3f\x37\x79\x50\xf1\xe7\xb6\x63\xdb\x2a\xcb\x37\xe6\x96\xa2\xb8\xcd\xb3\x38\xad\x50\x61\x60\x55\xa9\x2a\x37\x69\x96\x6a\xc6\xb1\x41\xfb\x31\x2b\x0e\xfb\x2c\x41\x46\x56\xc4\xf7\x71\x2a\x25\x71\xad\x2b\xe7\xd9\x23\x2a\x8c\x12\x25\x28\xac\x1a\x18\xe7\x8d\xa7\x00\xb2\x2a\xe2\xfb\x7b\x54\x74\xb9\x70\xcb\x2a\xe2\x5e\x5a\xf9\x13\x28\xb3\x24\x8e\xc0\x4f\x41\x10\x6c\x1b\x90\x55\x95\x1d\x34\x2f\xe9\x68\xa8\xdf\x11\x92\x69\xaa\x05\x51\x7c\x2c\x37\x6e\xfe\xa4\xe6\x9a\x2d\x49\x70\xdb\x24\xa6\x5d\x7a\x5b\x3c\xb0\xbb\x24\x7b\x34\x9e\x36\xfb\x38\x8a\x50\xba\x25\x36\xc6\xfa\xf1\x06\x25\x49\x9c\x97\x71\xb9\x3d\xc4\x29\x5f\x11\x1d\xb6\xc6\x21\xfb\x6c\x1c\xcb\x86\x18\x64\xd4\xb6\xc6\xa1\xec\x3e\xec\x96\x62\xf4\xef\xbc\xa0\xb8\xc6\xe9\x1e\x15\x71\xd5\x47\x72\x66\x5e\xa8\xd3\xf4\xbe\x7a\xb5\xad\x39\x80\x9c\xe7\x6d\xc3\x04\x05\xc5\xe6\x2e\xab\xf6\x7d\x50\x0c\x96\x06\x61\xd1\xd7\xd2\x2e\x0b\x8f\xe5\xe9\xcb\x0e\xa8\xc0\xa0\xfb\x20\xca\x1e\x29\x7d\xa4\xef\x9a\x49\xd2\xf4\xee\x0e\x25\xd9\x63\x4f\xdf\xe8\x6d\xf0\xe8\x29\x0f\xd2\x08\x45\xef\xaa\xe2\x88\x3e\x6a\x84\x61\x03\x33\x4e\x8d\x3c\x09\x42\x34\x11\xec\x49\x20\x13\xe9\x74\xcd\xaf\xa6\x48\x42\x4a\xac\xe6\xe5\x50\x1f\x83\xbb\xec\x61\x2e\x32\x55\x96\xab\x31\xc1\x2f\xd4\x68\x08\x4d\x10\x42\xec\x89\x03\xf6\x89\x4d\xb3\xf5\x7a\xdd\xb0\x22\x4d\x25\xdd\x9d\x63\x8f\xfb\xb8\x42\x46\x99\x07\x21\xda\xa4\xd9\x63\x11\xe4\x9a\x69\xa7\x6c\xb4\xac\x82\xea\x58\x1a\x71\x98\xa5\x8a\x65\x44\x99\xcd\x9a\x8a\x63\xb3\x96\xc5\xb5\xf4\x65\x2c\x6b\x6e\x0f\x41\x71\x1f\xa7\x74\xf1\x61\x14\x28\xab\xe7\x04\x6d\x08\x4b\xd6\x8f\x28\x94\x65\xfe\x04\xdc\xfc\x09\x34\xb4\x62\x1d\x0f\x82\x00\x54\x45\x90\x96\x79\x50\xe0\x55\x93\xfb\xbc\xa5\xec\xef\xe5\x6a\x29\x4a\xe6\xaa\x71\x57\xa9\xba\x13\x1e\x8b\x32\x2b\x36\x6c\x81\x60\x80\x6c\x1d\xa4\x9a\x29\x0e\xc7\xa4\x8a\xf3\x04\x19\x64\xa7\x45\xef\x8a\xdf\x05\x87\x38\x79\xae\x65\xcb\xb6\xbd\x3f\xbe\x7e\x42\xbb\x43\xe7\x99\x92\x8a\xbc\xf4\xac\x2b\xd5\x13\x35\xc8\x73\x14\x14\x41\x4a\x46\x34\x45\xdb\xec\x58\xe1\xe2\x78\x6d\x0b\xa2\x08\x2f\x25\xe6\x76\x97\x64\x41\xb5\xc1\xfc\xd6\x15\xcf\x3c\xb5\x08\x2f\xe0\x85\x32\xad\x36\xf6\xa4\x9e\x6e\xa2\xb8\xc4\xe2\x2f\x3a\x75\xe5\x3f\x42\xea\x65\x51\x03\x69\x53\xf7\x8c\x7c\x15\x38\x3d\xcb\x83\x30\xae\x9e\x37\xd6\xb6\xe5\xf9\x69\xa0\xf1\xd2\x71\x61\x88\xe5\x35\x10\xbd\x2c\x8e\xff\x44\x04\x6d\xc0\x65\x39\x71\xa3\x39\xb5\xb3\x80\xc9\x1a\xb5\x40\x95\xea\x31\x39\xcd\xad\x8e\xf7\x45\xf0\xac\x50\x77\x18\x3a\x8e\xe3\x28\x34\x1f\xe4\xe2\x7f\xed\x44\xc4\xe2\x6b\x78\x86\x5b\xd0\xf5\xf8\x29\xcb\xf0\xb6\xb1\xe8\x03\xf8\xb7\xa3\x99\x9a\x4d\x1f\x0a\x74\xc8\x1e\x10\x11\x6c\xa2\x18\x1b\x5b\x8d\x98\xaf\x37\x7b\xbc\x2c\xdc\x34\xb4\x87\x9e\x7a\x55\x40\x41\x11\xee\x1b\x3a\xbb\x1a\xe4\x68\x31\x26\x17\x3b\xd4\x55\x28\x93\x26\xaf\xcb\x77\x85\xa6\x4a\x26\xb6\x84\xd6\xc9\x69\x1e\x0b\x41\xbf\x3a\x53\x0f\x52\xea\xfb\xa7\x11\x8a\xb3\x4a\x3d\xeb\x28\xcb\x5d\xb6\x1b\x89\x5e\xa3\x02\xd4\x0a\xc0\xb0\x9a\x5b\x23\x3f\xb0\x79\x23\xca\xcf\x68\xdd\x94\xe1\x76\x9e\x1e\x36\x07\x4d\xa2\x87\x2a\x95\xec\x91\x00\x6a\xa5\x93\xef\x6a\xb7\x37\x9a\xde\x9f\xab\xe5\x4d\xc5\xb1\x9d\x30\x4a\x70\xb5\x48\x4c\xe2\xb2\x62\x6a\x16\xe9\x4a\x2d\x18\x39\x8d\xe1\x1a\x7b\xac\x21\x45\x56\x39\x4c\xf4\x0f\x8a\x8c\xb8\x42\x07\xdd\x35\x68\x27\xda\x03\x3a\xd1\x56\x9a\xa9\xcf\x7a\x4f\xfd\x01\x31\x09\xee\xb2\xa7\x8f\xa7\x46\x47\x7e\xa6\x4a\x68\x8d\x7c\xf3\xbc\x0c\x8b\x2c\x49\x30\x55\xaa\xec\x18\xee\xb7\x87\xe0\xa9\x99\x9b\x36\xb4\x3d\x74\xe8\x69\x4d\x12\xbf\x9c\x80\xd2\x61\x89\x17\x90\x9c\xee\x1c\x6a\x95\x8a\xed\x1c\x38\x35\x9f\x41\x4d\x33\x96\x68\x1f\x45\xd3\x60\x01\x3d\xc6\xca\x41\xa0\xaf\x86\xb0\x52\xd8\x52\xc6\x62\xca\x37\x50\x8f\x78\xbd\x61\xea\xac\xaa\x51\x34\x0c\x24\x3c\x16\x58\xa3\xd5\xc2\xf0\x56\xeb\xe5\xee\x6e\xdb\xb5\x6b\x75\x09\x68\xa4\xc1\x01\xd5\x03\x19\xa1\x5d\x70\x4c\x98\x12\xff\x48\xd9\x60\x69\xaa\x67\xaf\xb0\x0d\x94\xc8\x36\x59\x4b\x6e\xf5\x18\x60\xf9\x44\x13\x50\x37\x4a\x50\x56\x8e\xef\xc0\x1b\xda\x4d\xd6\x0a\x9d\x49\xb6\x6e\x2d\x9f\xd3\x08\x9b\x10\x42\x03\xae\x39\xb9\x01\x15\x98\xb9\x78\x2a\xba\xac\x9b\x96\xf5\x58\x46\x71\xf1\xae\xa8\x92\x8f\xdc\x70\x50\x0f\xb3\x91\xf5\x94\xc8\x0c\xc9\xc0\x51\x40\x04\x41\x59\x0b\x44\xaa\x5e\x8c\xed\x94\x12\xae\xa4\x18\xcf\x47\x50\xb7\x45\x26\x8a\x2e\x41\x74\x3e\x92\xbc\x65\x82\x8c\xa3\x97\x3f\xb1\x2d\x7b\x9c\xc6\x55\x1c\x24\xf3\x61\xb7\x46\x02\xca\x6c\xe3\x40\xd7\xab\x74\x3f\xec\x0b\xcd\x56\x66\x9c\xd0\x4d\x83\xeb\xe1\x22\xcd\x46\x8a\x87\x76\x56\x9f\x8b\x87\xb2\xb5\xeb\xf6\x5a\x45\x67\x3c\x9d\x7e\x52\x6a\x64\xf5\xd9\xc0\xa9\x3e\x6e\xf0\x2c\x73\xdb\x3d\x28\xe2\xb3\xe1\xb4\x41\xbe\xf4\xba\xaa\x2c\x01\x49\xcc\x69\x68\x24\xf0\x97\xaa\x4f\x83\xd5\x6e\xdf\xd4\xcb\x31\x75\xe3\x6d\xb6\x9a\xad\x01\x80\x6e\x39\xb3\x76\x17\x4a\xb7\xdb\xe4\xf1\x2e\x41\x4f\xfc\x2b\xee\xb1\xb0\xdf\xa0\x37\xc9\xb1\xfb\xc3\x71\x7d\x5c\x42\x7c\x4a\xbe\x10\x49\x54\xd6\x77\x8a\x0f\x60\x4f\xfd\x3a\x6a\xfc\x69\xe4\xcf\x88\x1e\x37\xee\x0b\xc2\x9e\x89\xdb\x2e\xc2\x25\x3a\x30\x05\x97\xe8\xee\xe4\x52\xbc\xe6\x8e\xbd\xff\xef\xff\xfe\x7f\x7f\x61\x4a\x00\x39\x47\xb2\xad\xc5\x7a\xbd\xb0\x3d\x6f\x01\xbd\x9b\x71\x28\x37\x18\x30\xd4\xef\x82\xd0\x0a\xc3\x81\xba\xa7\x8b\x8d\xcc\x30\x8d\x16\x13\xa8\x28\x2c\x1b\x10\xeb\xb6\x3d\x95\x15\x46\x53\x4c\x61\xc3\x21\xeb\x0d\x71\x3b\xa1\x11\xa4\x74\xa3\xbd\x10\x1e\x11\xdb\x82\x26\xce\x34\x8a\x40\xc0\xea\xf4\x14\xe8\x83\x90\x0f\x00\xc8\x9b\xfa\xa4\x7f\x5c\x83\xed\x77\xee\x7d\x2e\xbe\x6e\x6a\x9f\x88\xc1\x34\x42\x61\x56\x90\x3b\xdc\x36\xc7\x34\x42\x05\x3d\x07\xe4\x3a\x2b\xf6\xbc\x3e\xf8\x39\x93\x40\x7d\xa4\x61\x4d\x5c\x91\xba\x3d\x74\xed\x6d\x7c\xc6\xc0\x70\x43\xc2\x40\x8f\x1d\xb3\x76\xb4\xf8\x8a\xda\xc1\x14\x64\xe7\x8b\x1a\x3f\x12\x3f\x26\xc4\x3b\x53\x28\xdd\xe7\x92\x28\x3b\x3f\xa2\xba\xb5\xc3\xb9\x1a\x68\x7b\xbb\xee\x33\xfe\xd4\xf4\x67\x67\x5b\x76\x5f\x15\xed\x85\xd0\xca\x77\x27\x4e\xb6\xfa\x9e\x42\xb8\xf2\x7b\x71\xfc\x80\xb5\x5c\x05\x77\x79\x90\xa2\xe4\xe3\x6d\xce\xe5\x14\x07\x8a\x06\x6a\xe9\x4c\x6d\x06\x79\x91\xdd\x17\xa8\x2c\x21\x5e\x51\x2b\x54\x1c\xe2\x34\xa8\xce\xf3\xec\xbb\xa8\x77\xa8\xce\x9d\x9f\x5c\xfd\xfa\xee\x55\x59\x15\xc7\xb0\x3a\x16\x88\x28\xa7\x46\x92\x05\x58\x93\x78\x75\xfb\x2f\x64\x75\xbf\x85\xea\xf7\x58\xb1\x40\xed\x80\x5b\x2f\xba\x72\x35\x75\x4e\x41\x1a\xd3\x7b\x24\x37\x9a\x92\xbb\x20\x0d\x9f\x8d\x32\x8f\x53\xe0\x94\x20\x4e\x77\x58\x7b\x45\x00\x0b\xab\xa0\xd8\x36\x4d\xd9\xde\x96\xa5\x79\x8b\x82\x72\x1f\x14\x45\xf0\xbc\x31\x81\xeb\xf2\x4f\xb3\xdd\xae\x44\xd5\xc6\xdc\x8a\x09\xe1\x36\x64\x38\xb6\xe4\x40\x69\x97\x15\x07\xe6\x21\xb1\xf1\xcc\x9f\x81\x67\xfe\xfc\xf2\xf7\x4f\xe8\x79\x57\x04\x07\x44\xee\xb5\xe9\xc7\xf1\x64\xfe\x7c\x1a\x8d\xc7\x8b\xed\x29\x4a\x3b\x0e\xb0\x2c\x45\x71\xc3\x35\x5f\xbc\x09\xe0\x0d\xcb\x32\x5f\x96\x93\x5a\xb0\x3c\xf3\xa5\xca\xc6\xb7\x60\xdb\xe6\xcb\x08\xf2\x94\xf1\x01\xef\x9b\x6a\xfa\x34\x84\xde\x14\x59\x15\x54\xe8\xb5\x19\xa1\xfb\x1b\xdc\x70\xe7\x8d\xe3\xd3\x77\x2f\xff\xf2\x37\xca\x77\xbc\x4b\x73\x7f\xe6\x3f\xe7\x95\x90\x1d\x91\xf3\x7f\xb6\x6c\xe0\x25\x3e\x70\x1e\x56\x89\xe1\x03\xc7\xf0\x0d\xe7\xc3\x4a\xf6\x58\xee\x3a\x28\xf7\x4e\x0c\xc2\xf8\x18\xc4\x9c\xba\xf5\x64\xe0\xbd\x08\x39\x39\xd1\xa8\x2b\x4c\x49\xe5\x5e\x15\x28\x47\x01\x96\x38\xec\x53\xff\x31\x29\x53\x33\xf1\xce\x83\x9d\x51\xd0\x4d\x08\xe7\x69\xdb\x31\xfc\x75\xbd\xc5\x3a\x7e\xb9\x8d\x52\x48\x05\x5f\xe7\xfd\x9f\xe8\x70\xe2\xae\x84\x66\x16\x7d\x2a\x8e\x99\x31\xb7\x38\xe0\xed\xa8\xd6\xe3\x57\x82\x50\x5f\x2a\xcd\x70\x0d\x8e\x55\xa6\x6e\xb6\xd1\x0f\x45\x05\x54\x75\x41\x75\xab\x5a\xff\x5f\xff\x0f\x98\xf0\xf3\x8b\xd8\x72\x99\x07\xe9\x82\x9c\x42\x25\xf1\xcd\x2d\xcb\x15\x4d\xd5\x23\x94\xa0\x0a\x35\xe7\xcd\xa0\x59\x20\xde\xbe\x91\x2b\x34\x85\x68\x28\x3d\x7d\xf8\x91\x14\x6a\xf2\x4e\xdf\xd0\xaf\x1c\x68\xfa\x84\x5a\xed\xf6\x41\x99\x67\xf9\x31\x7f\x77\x40\xe9\xf1\xe3\x8d\xd0\xd8\xd8\xc0\x72\xda\x97\x80\x36\x11\x16\x28\xd0\x61\x2f\x67\xc4\xee\x29\x24\xf5\xac\x3c\xde\x1d\xe2\xea\xe3\x70\xc1\x02\x95\x48\x2a\x27\xa6\x54\xa0\xd7\x0a\x62\xed\x20\x50\xb6\xdf\x65\xc0\x7e\x76\xeb\x70\x4e\x97\xb7\x31\x79\xba\x5b\x09\xb1\x4c\x6b\xd1\xa2\x36\x18\x5b\x9a\x6e\xe0\x1b\x73\x65\x77\xa1\xf7\xeb\x12\xff\x06\x36\x5c\x3a\x60\x09\x7d\xab\xcf\x11\xb7\x5c\x43\x7b\x69\x38\xd0\xb2\x00\x75\x0c\x0e\x35\x0e\xc3\x9f\x69\xbc\x55\xd8\x75\x84\x2d\xe9\x07\xe0\xe1\x9f\xc6\x6d\xd9\xa0\x1f\xf0\xb3\xcf\x07\xd3\x58\x85\xc4\xfd\x15\x98\x86\x43\x83\x0a\x1c\xe0\x94\x9c\x53\xae\x63\xd0\x2f\x86\xc3\x79\xc8\x7e\x93\x2e\xda\xff\x24\x04\xee\x1e\x13\xf8\xbb\xa5\xbf\xb2\x5f\x60\x15\xdc\x61\x21\x73\xd2\x1c\x43\xf2\x6e\xa0\xb6\xfc\xb0\x3e\x47\x09\x91\x89\x7c\xce\x61\x71\x9b\xa0\xaa\x42\x05\xf1\x0f\x8b\xd3\xfb\x0d\x34\x1d\x74\x68\x9a\x02\xc7\x44\x69\x97\xda\x76\x3d\x2c\xbe\x29\xc3\x53\x83\x3f\x11\xd1\x1d\x87\x88\xe6\x6d\x0c\x82\x93\xce\x3f\x8e\xdb\xe2\x2b\x0e\x7f\x1d\x35\x81\x79\x95\x41\x18\x3d\xb5\x0b\x48\x4d\x46\x0b\x83\xa3\x07\x0a\x2d\x6e\x74\x95\xaa\x6d\xfc\x37\xed\x96\xb6\xb7\x4c\x6d\x56\xe8\x29\x42\xb7\xbe\x5a\xbc\x15\xe7\x54\x77\x08\xed\x18\x03\x96\x88\xe4\xaa\xb9\xe5\xae\x77\x2e\x82\x28\xce\x3e\x2e\xfa\x5f\xbf\x7d\x23\xaf\x07\x72\xe9\x7a\x09\xd1\xd4\x22\x14\x13\xaa\x9d\xb8\x6d\xa8\xf9\x3f\xc5\x87\x3c\x2b\xaa\x20\xad\xc6\x07\xbc\xe9\x63\xdc\xba\x61\x6d\x52\x24\x9b\xee\x66\xe4\x36\x5e\x4d\x08\x51\x3b\x89\xee\x1c\x36\xe7\x13\xf4\x0d\xcc\x97\x96\x0f\xf3\x27\xe0\xe5\x4f\x2a\xd5\xf5\x5b\xbf\xd8\xfa\x9a\x37\x55\xd7\x3e\x16\xf9\x53\x1b\x60\x80\xe7\xea\x44\x9a\x0c\xd2\x42\x4b\x03\x75\xdf\x07\xfa\xdc\xe9\xab\xaa\x8f\xdd\x53\x69\x41\x84\x69\x5c\x19\xd8\x16\x68\xdd\x12\x04\x7f\x14\x2c\xc9\x78\xa3\xd4\x9a\x8d\xcc\x17\x69\xfa\x68\xa6\x89\x00\xc2\x99\x42\xe3\x3f\xc8\x3e\xf1\xa3\x9e\xc6\x4d\x01\x99\xc6\xcd\x0b\x01\xc3\xfa\xa9\x86\xc6\xf5\xeb\xa6\x1f\xed\x83\xb6\x3b\xec\x99\x78\xdc\x6c\x8a\x74\xa2\x52\x7f\x62\x2f\x87\x67\x57\xa7\xa0\xa6\xd7\x9a\xd9\x25\xbf\xed\xa7\x42\x77\x76\x75\x5f\x74\xa8\xa2\x3e\x80\x98\x34\xe6\x9d\x84\xf6\x97\x8e\x74\x1e\x9d\x7a\x7f\x20\x24\x7a\x30\x33\x7f\x5f\xcc\x74\x7f\xd6\x7e\x7d\x44\xb5\x3e\x67\xff\xc4\xc0\xeb\x4e\x62\xff\xe1\x88\xec\xbe\xbb\x00\x84\x68\xed\xc6\x08\xe9\xbc\x0c\xa6\x1a\x18\x4a\xe7\x22\xec\x17\x31\x23\xd5\x39\x14\xeb\x64\x8a\x7b\x9d\xea\xfc\x22\x17\x10\x0e\xf6\x6a\xb9\x57\x57\x83\x3e\x3a\x34\xb0\x4f\x6a\x05\x5b\xd0\xfd\x98\x8c\xf4\x4c\x0e\xa7\x46\xfc\xd5\x2d\xd7\x55\x6c\x7f\xb5\x74\xc6\x5f\xb0\x13\xa1\xb2\x8a\x53\xa2\xa7\x4a\xfb\xfa\x34\x8b\x50\xfb\xad\xdc\x67\x8f\x00\x96\xa8\x2c\x69\xca\xc2\x48\x71\xa1\x7f\xd0\x64\x9d\x14\xce\xfc\xc4\x43\x05\x52\xa4\xee\x75\xbd\x6d\x10\x1c\x77\x5b\x8a\x24\x41\x5e\xa2\x4d\xfd\xa1\xee\x7b\xd1\x39\x0a\x95\x95\x1e\x59\xdb\x21\xa7\x9e\x4d\x86\x47\x31\xa4\x0e\xbf\xdb\x58\x8d\xae\xb3\xc1\x9b\x42\xe2\xd6\x27\x7e\xfb\x86\xd4\xad\x73\x52\x5a\xf6\x67\x9f\x1c\xc8\x2f\xc9\x14\x19\xdf\xcc\x9f\x38\x75\xb9\xe6\xc0\xba\x94\xca\x32\x29\x97\xa1\xa7\xa0\xb4\x9f\xd4\x8f\xa7\xe1\xeb\x40\xd2\xd8\xeb\x17\x30\xcd\x6a\x94\xff\x6c\xc0\xa8\x1a\xa1\x89\x54\xea\x22\x37\x0b\xf5\xe3\x5b\xee\x44\xe9\xd4\x89\x7a\xd2\xc0\xba\x7d\xa3\xd8\xee\xe9\xca\xf2\x0d\x68\x22\xa6\x68\xcd\x30\xc8\xf9\xed\x48\x2d\x25\x56\x9c\x94\xe0\xa7\x96\xb2\x77\x7b\xf1\xb1\xe4\x7e\x02\xd7\x2d\xac\xbb\x2c\x7a\xc6\x10\xd1\x41\x24\x74\xd7\x2a\x2c\x78\x2c\xba\xa6\x29\x4a\xa5\xcb\x27\x56\x9d\x93\x19\x75\x56\x46\x54\x8d\x17\xc2\xaa\xf1\xd2\xb2\x48\x2c\x00\x46\x84\x18\x37\x6f\x99\xac\xa5\xe6\x43\x6a\xa3\x05\x12\xa4\x66\xa7\x33\x28\x44\x7f\x62\x0b\x90\x2c\x44\x41\x40\x55\x5b\x11\x00\x2b\xdc\x11\xdc\x33\x6a\xd2\xd6\xe3\xb4\xac\x82\x54\xdb\xfc\xa9\x13\x45\x52\x2b\x9a\x66\xab\xa2\x33\x13\xd1\xa4\xbe\xee\x85\x05\x63\x4c\x27\x29\xfb\x4c\xaa\xd7\xe9\xa2\x50\xfb\x24\x04\xab\xad\xf0\x6a\xda\xb9\x92\xa6\x6b\xbd\x60\x8b\x38\xd7\x75\x4b\xde\xac\x78\xf5\xc2\x5c\x1b\x4b\xe8\x2a\x79\x53\xcf\xb6\x42\x36\x21\xa9\x0b\x8b\xcb\x66\xb3\x5b\x7a\xa9\xf6\x8d\x84\xaa\x0f\x4d\x5e\xa4\x5c\xe9\x8d\x1e\xe4\xd7\x6f\x44\xeb\x37\x46\x90\x3e\xc7\x13\x9f\x9d\x40\x61\x85\x42\x31\xed\x45\x11\x87\x1f\x71\xd2\xfe\xef\x07\x14\xc5\x01\x78\x7d\x08\x9e\x58\x8c\xe5\xca\x5d\xe7\x4f\x37\x27\x71\x64\x98\xf2\x28\x71\x6d\x71\xbb\x49\xab\x3d\xed\xdf\x6b\xfb\x66\x1c\xab\x4b\x95\x44\x99\xaf\xc0\xc7\xb5\xcd\x2e\x3e\x5a\x0d\x88\x41\x6f\x65\x53\x17\x2f\x15\x5f\x63\x89\x69\xb4\xda\x10\x86\x92\x55\xaf\xf9\xf1\xa3\x67\x42\x9c\xd0\x1b\x03\xb6\x9d\x2e\xe2\xaa\x3d\x96\x50\xfc\x42\xcf\xad\xdb\x02\xc9\x26\x77\x2e\xe2\xc0\x72\x5c\xd9\x15\x90\xa7\xd1\x4b\x48\x48\xae\x10\xdc\x8a\x2e\xd9\xa6\x4a\xe8\x36\x13\xb3\x35\x06\x58\x2e\x6f\x62\x12\x44\xb8\x67\xfe\xbc\x15\x77\xc9\xc4\xbd\xac\xf5\x2e\x63\xc2\x9b\x2e\x0b\x58\x1c\x7c\x5c\x28\x5e\xe4\x41\x59\x3e\x66\x45\x24\xbd\xc4\xe5\x83\x02\x49\x9e\x4c\x80\x95\x41\x4f\x95\x00\x77\xa0\x50\xdb\x86\xb6\xa0\xba\xbd\xc6\x11\x87\x3e\x25\x86\x4e\xe2\x78\xca\x4e\x14\xf5\x48\x8c\xac\xa9\xc1\x6c\xb0\x76\x83\x6e\x93\x18\x1d\x97\xd6\x50\xa7\xbf\x4c\x8b\x82\xae\x9c\xba\x31\xe2\xc0\x40\xc4\x6a\x7b\xc5\xe4\xcd\x28\x42\x9d\x0d\x46\x83\xf2\x34\x50\x75\xaf\x4e\x24\x98\x4a\x8e\xd3\xd6\xc5\x6f\x2b\x22\xfb\xe2\xb4\x44\x15\x30\x81\x93\x3f\x91\xf8\x4f\x3e\xe5\x89\xe9\xdf\x6c\x27\x15\x95\x4d\xcf\x72\xf8\x63\x1b\x40\xae\x9d\x65\x3d\x11\xc5\xbd\x13\x70\x74\xbd\x9a\x72\x7d\x15\xc6\x4c\xdb\x33\xea\x8f\x42\x7a\x70\xb2\x8f\xae\x3c\x45\x0e\x5c\x1a\xe8\xf4\xae\x8e\x96\x1e\x7d\x10\x47\x08\x96\xf9\xd5\x47\xf5\x69\x48\x1c\x8d\xae\x3b\x5b\x52\x5d\xb5\x85\xe9\x34\x98\x27\xdf\xfa\x12\x0c\x88\x4e\xb0\x3d\x02\x45\xca\x23\x30\x24\x47\x7a\x8b\x73\x88\xc9\xe5\x46\x4a\x8d\x89\xd5\xfa\x30\x1b\x23\x23\x7a\xeb\x4c\x14\x0d\x97\x80\x35\xba\x3f\x53\x04\x81\x0c\x68\xdc\xfc\x9f\x56\xab\x0f\xf1\x11\xb3\xbd\xb7\xca\x39\x93\xfc\xe2\x80\x47\x77\x74\xf6\x94\x96\x13\x7b\x8c\x9f\xc9\x8a\xfc\x1d\x83\xd3\x79\xb0\x0e\x8f\x99\xaa\xf0\xd8\x89\x3d\xa3\xee\x20\xa2\xa3\xa6\xf8\x60\xc5\xa9\xf3\xfc\x52\x00\xa7\x75\x6f\xd2\x8c\x57\x41\x1b\x39\xed\xa7\x57\x1d\xec\xc7\x18\x01\x30\x58\xef\x2c\x29\x70\x15\xe8\xd3\xfa\x3d\x5f\x1e\xa8\xd2\xf2\x8c\x15\x0a\xe3\x45\xc1\x08\x01\x30\x7d\xda\xcf\x9b\xec\x13\xa7\xf8\x85\x26\xf6\x05\xa7\xf3\x25\x26\xf1\xe4\xa9\x3b\x6b\xc2\x4e\x9b\xa6\xd7\x98\x9c\xd7\x9a\x92\x17\x9f\x88\xe3\xa6\xdf\x2d\x3a\xdc\x86\x59\x84\xb4\x8c\xab\x2e\x30\xc4\x18\x4d\x2d\xcd\x20\xa9\xdf\x4f\xea\x6a\x0d\xa2\xeb\x25\xc7\xdb\x13\x89\x28\x5a\x70\x0f\x1a\x63\x8b\x78\x04\x4f\x6d\x93\xbc\x3f\xe0\x0f\xcb\xe1\x0f\xcb\xe1\x77\x63\x39\x14\x5d\x47\x54\xfe\x28\x22\x43\x53\x77\x5e\x2d\x5b\xf3\xaf\x07\x98\x5b\x15\x00\xcc\x13\xbe\xdb\xd2\xa8\xa2\x13\xd8\xbd\x37\x04\x59\x47\xb9\x01\xb4\x26\xd5\x3f\x77\x02\x70\xd1\xc8\x2a\xd6\xed\xa2\x3a\xa6\xe4\xf8\x29\xa1\x6a\x7e\x1a\x1b\x0e\x60\x38\x1f\xd8\x45\x27\x89\xca\x85\xbd\x0d\x93\xe0\xb9\x9f\xb8\xc3\xeb\x27\x07\xf7\x7a\x68\x72\x28\x42\xd8\x85\x01\xeb\xb4\x34\xaa\xe8\x94\xc9\xd1\x17\x44\xaf\x1d\x82\x7e\xb4\x26\xd5\x3f\x7b\x72\xb4\x21\xf8\x4a\x96\xef\xa0\x3a\xa6\xe4\x84\xc9\xa1\x68\x7e\x22\x3f\xf7\x63\x38\x1f\xd8\x65\x27\x87\x90\x43\x5c\xcc\x70\x20\xe8\x8b\xc4\xe7\x44\xab\x2c\x76\xdf\x0e\x6a\x8a\x4d\x60\x84\x4a\x4d\xec\xbe\x9c\xa6\x23\x52\xe7\x16\xee\x38\xda\x6f\x8f\xa3\x4d\xd3\x94\x55\xe1\x3e\x2d\x78\xb2\x02\xdc\xa3\xfb\x9e\xa7\xf6\x8a\xea\xbc\xec\x9e\xc3\x77\x49\xa3\x8f\xca\xbd\x1e\x3f\xc0\x53\x95\xcf\x3e\x12\x9e\xc7\x37\x73\x95\xcd\xc9\xa3\x78\x39\x6e\x9e\xa8\x9c\xf6\x70\xcc\xe5\x66\xc8\x25\x64\xc7\x79\xdc\x7c\xf6\xf4\x96\x63\xbd\x38\x8e\xef\xd9\x7a\x4d\xdd\x25\xe9\xb7\x29\x67\xed\x29\x82\xce\xbd\x20\x7f\xb1\xcd\x79\x37\x2b\xa7\xe0\xec\xbe\x46\xb6\xe5\xad\x95\x81\x8e\x33\xb7\xe0\x57\xdc\x6c\x7f\xc1\xad\xf4\xd5\xf6\xc4\xdf\xc2\x96\xf7\x72\x59\xcd\x04\x2f\x98\x3c\x08\x3f\x6d\xca\x2a\x28\xaa\xd6\xab\x9e\x7b\xf6\x3f\x8e\x65\x15\xef\x9e\xeb\x74\xc8\x24\x3e\xc0\xa0\xaf\x5a\x3f\x42\x12\x8b\xd0\xbd\x1b\xa8\x4d\x79\x6c\x2d\xf3\x27\x60\x39\xb2\x6f\xd9\xb0\xad\x67\xa6\x75\x66\xd0\x4a\x72\x09\xcb\x46\x63\x47\x28\x10\x71\xb6\x7b\x40\x45\x15\x87\x41\x22\x13\xe6\x10\xa7\xf2\xd7\x7d\x9d\xdb\x36\x7f\x6a\x68\xe4\x37\x24\xaa\x7d\xb0\x69\x92\xc4\x85\xd6\x73\x1c\x45\x71\x05\xa2\x44\x98\xd9\x23\x95\x10\x3d\x05\x27\x2a\x14\x98\x64\xd4\x71\x7d\xdc\x02\x4e\xfe\x2a\x16\x50\xa0\x7a\x38\x62\x2c\xce\x18\x40\x29\x8a\xc0\x82\x2e\x89\xc7\xff\xbe\xd5\x76\x29\x32\xc2\x51\x75\xe9\xed\x90\x52\xd9\x29\x30\xaa\x63\x6f\x07\x14\xae\xce\xfb\xe9\xdd\x7b\xdb\xa6\x2a\x21\xde\xaa\x90\x4b\x91\x56\x77\xd9\x93\xbb\xfc\xfd\xeb\x03\xc2\x15\x17\x2f\xdd\xd8\x0a\xea\xc5\xde\xc9\xbd\xa0\x2c\x56\xbb\xc1\x8b\x07\x00\x34\xab\xbd\xae\x46\xed\xf0\x2f\x54\x59\xe6\x4f\xb5\x03\x71\x9b\xa6\xa9\x89\xda\xb6\xc5\x10\x08\xc3\x6b\x10\x4f\xd1\x3d\x09\xff\xe0\x5b\xab\xaf\x89\x30\x07\xb1\x56\xde\x7f\xc6\x37\xe4\x34\x69\xa3\x56\x2d\x3a\xab\xde\xd6\x59\x3b\xe4\xd4\x43\xb8\xb6\x55\x11\xc6\xd2\x77\xc9\x6b\x17\x39\xc1\x16\x30\xd4\xb4\x12\xa8\x0a\x85\x81\x46\x55\xa6\x6b\x6d\x0a\x2c\x05\x1b\xf1\x31\x88\xbd\xc9\x34\x58\xf8\x67\x0f\x4f\xd6\x21\xa5\x43\x9d\xd0\xdf\x77\x45\x1b\x6c\xf2\x5e\xfd\x52\xfb\xae\x4f\x1b\x4e\x2d\x16\x2a\xc2\x53\x4e\xa3\xd7\x8a\xb8\xa3\x19\x47\x05\x44\xdf\x6f\xae\x0d\x3b\x7f\xd2\xa4\x8f\xbc\xcc\x62\x77\x92\x6f\x29\x11\x46\xcf\x1a\xdf\xfa\xd9\x7b\x5f\x2e\x60\x6a\x5a\x9b\x17\xb2\x68\xb5\xb9\xd0\x85\x34\x9a\x56\x37\xcd\xe6\x34\xf4\xba\xe1\x2b\xf3\x51\xed\xc0\x12\x83\xf6\xc9\x15\x69\x57\x34\xf9\x7c\x45\xcb\x88\x4a\x7f\x11\x72\xcd\x88\x6a\xb1\x32\xe1\x90\x22\x0e\x4f\x11\x85\x2a\x43\x12\x0c\x22\x82\xa0\x13\xd8\x84\x44\xf5\x35\xba\x3c\x09\x31\xdf\xc5\x28\x89\x4a\x54\xdd\xe6\x3d\xde\x02\x6f\xa5\xf6\x04\x0d\xc6\xaa\xc3\x4d\xa5\xc0\xcc\x88\x8f\x89\x95\xae\xc7\x68\x16\xcb\xa1\x8a\x78\x10\xda\xcc\x00\x23\x0a\xe3\x9f\x71\x05\x29\xf5\xd5\x97\xd8\x4e\x41\x8b\x03\xc1\x59\x39\x1a\x69\x2f\x2e\x03\xb5\x72\xa1\x0c\x6a\x62\x2c\x63\xd8\x66\xad\x98\xd0\xf1\x27\xa3\x15\x06\x49\xf8\x1a\x2b\x39\xc0\x00\x24\xe8\x4d\x89\x24\x17\x07\xd6\x8d\x56\x1d\x4f\x16\x35\x05\x6f\xeb\x30\x58\xe1\x1e\x17\x12\x31\xaf\x0d\xb2\x9d\xd0\x28\x4b\xf6\xa2\x6f\x59\x64\xf3\x36\x0c\x5c\x83\x27\x93\x37\x1a\x1c\x0a\x2e\xd0\x10\xf7\xe4\x06\x54\xd1\x89\x0d\x8f\xd8\xa5\xe6\xea\x5c\xe1\x22\x57\x23\x44\x49\x32\x1a\xf2\xed\x9b\x11\x78\xab\x39\x94\x49\x02\x6b\x42\x3f\xc4\x1c\x59\x9d\xbc\x58\x83\xb3\x55\x0e\x40\xe5\x2c\x23\xa3\x30\x57\xdc\x99\xc6\x02\x6b\xbb\xf1\x45\x8a\x78\x26\x72\xfb\x11\xc0\xbc\x0f\x4c\x21\x42\xc9\x12\x62\x99\xfa\x8a\x89\x42\x98\x4c\xa8\xee\x78\x92\x29\x66\x90\x39\x46\x89\x6c\x28\xe7\xdb\x5b\x3a\xdf\xc4\xcd\x00\x9d\xc1\xdd\x0b\x8d\x1a\x7b\x91\x39\x92\xf7\xe5\xac\xd6\x1d\x91\xc1\x5d\x18\x3c\x56\x00\x2a\xa7\x28\x87\xbe\xe3\x37\xc8\x45\xd9\xc1\x28\x50\xf8\x1c\x26\x71\x7a\xaf\x95\x19\x42\xa9\xf3\x92\x72\x74\x60\x0d\xa6\xe8\x30\x85\x14\x1d\xf4\x9b\x1a\xd6\x5d\x16\x3d\x77\xf3\x3b\xb4\x2b\x30\x11\x4a\xf6\x9a\xcf\x68\xd1\x65\x6d\x11\x66\x14\x9d\x1a\xa3\x22\x5e\x7a\xeb\xb4\x7f\xf2\x03\x4d\xe5\xdb\x37\xb2\x3e\xf0\x02\x8f\x29\x4d\x0d\xf4\x4c\xd6\xaa\x46\xdd\x60\x39\x87\x22\xd9\xaa\x63\x9b\xea\xc1\xaa\x53\x49\xfc\x49\xbb\x4d\x76\x15\x4b\x55\xb2\x0e\x55\xd4\xb3\x22\xa1\xcb\x60\xb9\x3f\xdf\x9c\xe4\xa9\xf1\x37\x60\xdf\xe8\x9b\x71\x46\x36\xe3\x0c\x37\xe3\xf4\x34\xe3\x8e\x6c\xc6\x1d\x6e\xc6\xed\x69\xc6\x1b\xd9\x8c\x37\xdc\x8c\x57\x2f\xde\x52\xfa\x8b\x31\xe3\x34\xad\x8e\xa2\x79\x03\xf8\x9c\xfa\x30\x00\x4d\x35\x84\xd3\xea\x88\x18\x78\x04\x01\x67\x3c\x02\xaa\xc1\x9d\x56\x47\x44\xc0\x71\x64\x05\x6a\x00\x98\x6a\xd8\xa7\xd5\x11\x11\xb0\x3d\x8c\x80\xe5\x61\x04\xc6\x27\xc6\x10\x98\xad\xc9\x8e\xd0\xc8\xae\x4e\x7a\x8e\x31\xb0\x6a\xb4\x88\x3c\x9d\x9a\x6b\x43\x06\x22\xb1\xb7\x9c\x90\x81\xd6\x93\xe0\xb5\xe8\x40\xf4\x94\x67\x25\x8a\xf2\xa0\xda\x97\x52\x3f\x2d\x39\x97\xc2\x59\xd0\xbc\x9b\x2e\x3b\x5a\x3e\x1e\x0d\x4e\x70\x5e\xb0\xbd\x4e\x82\x89\xb3\xa0\x39\x17\x85\xe6\x36\x1c\x64\x89\x59\x9e\xfa\xd3\x7b\x90\x43\x1b\xd1\x14\xcd\xf1\x67\x56\xbd\xd6\xa7\xc1\x50\x82\x92\x39\xbc\x17\x02\x6e\xf6\x22\xa8\x28\x00\x71\x54\x23\xe7\x54\x5c\xd6\x90\x5e\x50\x83\xe9\x90\x40\x15\xc1\x03\x1a\xcc\x3d\x32\x12\xce\x9f\x55\x74\x09\x50\xfb\xf3\x81\xdc\xf6\xa4\xeb\x19\x51\x59\x25\xcb\xec\xae\x2c\x9b\x04\xc9\x11\xe6\xb7\x43\xe7\xb7\x67\x76\xa5\xed\x24\xa8\xae\x00\x75\x79\x06\x54\x8e\x15\x6a\xd0\xe7\x71\xc1\x7c\x28\xfb\x81\x0e\xda\x4b\xb3\x4f\x2c\x4e\x12\x0b\xda\xf4\x36\x63\x24\x82\xb6\xf2\x04\x61\x30\x05\x86\x5e\x0e\x70\xb9\x71\x14\x56\x19\xb7\x97\x5e\x29\xb1\xe0\x31\xd5\x21\x29\xc7\xb2\x5e\x67\xf9\x9b\x09\xa7\x33\xbb\xc5\x8e\x4f\x44\x62\x4a\x65\x5b\xe0\x2d\xdb\x6e\x14\xb0\x4b\x93\xaa\xb3\x3a\x4e\xc1\x52\x14\x1c\x9e\x3f\x16\x4b\x6a\x1d\xae\x51\xbd\x19\x4f\x51\xd6\x9c\x63\xfe\x7c\x49\xb8\xb6\x62\x22\x53\x7d\xbf\x49\x9e\xd5\x18\x80\xd7\xa6\x22\x79\x96\x22\x47\x14\x37\x1f\xf8\x2c\x58\xa2\xea\xe7\x42\x7b\xe5\x2d\x71\x73\x58\x2e\x36\x3a\xf6\x5c\xe0\xaa\x2e\x39\x0a\x45\x77\x22\x44\x6e\xb9\xb3\xc4\x35\x47\x95\xec\x6c\xad\x48\x76\x36\x93\x3e\x5e\xbb\x66\x34\x23\xf2\xdd\xd0\xe6\x02\x88\x76\xe6\xe6\x2c\x28\x9d\x65\x6e\x16\x14\xef\x22\x50\xfc\xe1\xec\x74\xca\x6c\x79\xc3\x7b\xab\x7e\xc2\x4d\xd4\x0f\xb2\x1d\xb9\x8a\xa3\xdb\x69\x15\x1c\x59\x2d\x18\x59\xa9\x77\x9d\x19\xae\xe2\xde\xf4\x25\xad\x3b\x6f\x2f\xea\xde\xbc\xbc\x40\x72\x2d\x49\x98\x25\x09\xbb\x0b\xa2\xc9\xb1\xac\xb4\x0b\xbf\x40\xce\x3e\xd7\x01\xf9\x16\xd8\x0e\xb1\x06\xb7\x4e\x70\x04\x8e\x50\xeb\xf6\x98\xdc\x26\xb1\x7c\x13\xb1\xd3\xfa\xca\x09\xc6\x3d\xa1\x66\x96\x2c\x24\x48\x0b\xd1\x62\x48\x4a\x88\x4f\x74\x37\xaf\xf0\x16\xd9\xfb\x22\x8e\x9a\x07\xe4\x0b\xfe\x65\xe0\xcd\xbf\x51\x64\x8f\x25\x71\x78\x51\x2c\x12\x96\x4d\x84\xd5\xe9\x12\x48\x92\x16\xef\x83\x9c\x74\x9b\x2c\x10\xdb\x1a\x35\x3c\x3c\xc7\x43\x5a\x6e\x70\xd3\x87\xe0\xe9\xb5\x8d\x5f\x2f\xac\x5d\x71\x73\xf3\x87\xfb\x91\x22\xdb\xb0\x40\x5d\x98\xde\xc6\xf6\xda\x5d\x74\x2b\xa9\xe6\xa3\x65\x7b\xeb\x4b\xf5\x65\x14\xe2\x84\xba\xbb\x38\x49\x06\x3a\xd0\x94\x53\x74\x64\x2b\x51\xed\xe7\x97\xef\x3d\xed\xac\x90\x53\xfe\x8f\x28\xa8\x02\xa3\xca\xb2\xa4\x8a\xf3\x8f\xa7\x91\x97\xee\x11\x77\xd5\x30\x4b\xab\x20\x4e\x6b\x13\x3e\xe7\x2d\x85\x3f\xd3\xab\x89\xeb\xf3\xed\xfa\xca\x52\x29\xab\x7b\x73\xf7\x91\x58\xba\x5b\x90\x08\xa6\xee\xec\xf0\xc9\x1e\xe9\x74\xe0\x6e\x41\xde\x5b\xda\x36\x14\x2c\xe9\xfb\x6b\x09\x40\x7d\x88\xc3\x6f\x36\xb4\x00\x95\x7d\x5c\x88\xe8\x2c\xc6\x01\x17\xfc\xf4\x5f\xa4\x63\x89\xb6\x0e\x5b\x4f\xc8\x03\x3e\x83\x6d\xcf\x19\x0e\xbb\x59\xf1\x01\x6d\x2c\x7a\x6e\x72\x5f\x64\x8f\x1b\x4b\x6e\x03\x34\x47\xd7\xbc\x9f\xcb\x9c\x93\x26\x45\xda\x75\xc9\x3f\x9c\x7f\xc8\x27\x5d\x17\x9c\xc3\x9b\xf3\xb2\x35\xe3\x26\xe9\x9c\xa6\x9b\x3d\x99\x9c\x2f\x79\x9d\x8c\xc1\xa6\xaa\x7e\x25\x04\xa8\x2d\x4d\x93\x14\xe9\x1e\xc1\xf1\xb0\x55\x90\xde\xe2\x8f\xc2\x50\xf0\xd9\x8b\x49\x66\xf1\x9a\xf7\xe5\xbb\x09\x6c\xb5\xef\xa9\x6e\x5c\x6e\x07\x5c\x7b\xc8\x0a\xa2\xf0\x95\xbe\x8d\x2a\x85\x7f\x1c\x9b\xb5\x78\xd3\xfc\xd2\x73\x93\xa3\x7c\x69\xe3\xa5\xee\x6a\x14\x6f\x5c\x94\x2f\x57\x5c\xf0\x8d\xb1\xeb\x13\x85\x67\xf4\xa6\x44\xfd\xed\x88\x2a\x9f\x71\xc5\xf1\xaa\x54\x97\x9c\x08\x52\x13\x86\xfa\x3e\x64\x02\x16\xa2\x43\x5e\x89\xa7\x87\xb0\xbe\x8c\x51\x3c\x53\xc4\x3f\x7c\x75\xe1\x16\xac\xe6\xac\x9a\xa4\x86\xae\xda\x24\xfd\xdc\x8d\xfc\x5d\x47\x28\xd5\xf0\xd7\x72\x89\x38\x9e\x29\x19\x20\x92\x82\x17\x45\x0f\x3e\xd7\xd4\x30\xce\x9b\x13\xa7\x66\x59\x5d\x6e\x75\xe5\xf6\x6a\x51\xc8\x7c\xb6\x0a\x84\x48\xbf\xa8\xf3\xd6\x4d\x67\x02\x38\x1d\x90\xb8\x07\x23\xc5\xfc\x9f\xdc\xfd\x7a\xf2\xb5\x62\x5f\x85\xa3\x29\xe3\xd4\x37\x8e\xb6\xb7\xf1\x33\x91\x4d\xfd\xcd\xde\xb6\xbe\x73\xb8\x1a\x16\x7b\x1f\xaf\x3d\x17\xce\xb8\x3d\x00\xc0\x30\x4b\x77\x71\x41\x2f\xaf\x36\x82\x04\x15\x15\xd5\xae\x6f\xe5\xbb\x49\x2f\x70\x2b\x81\x92\x38\x5a\x71\x38\x1e\x44\xef\x65\x07\xbd\x5d\x9c\x71\x4d\x42\x0f\x06\x3a\x67\xb1\x11\x28\x4c\xbb\x75\x41\x85\x83\xec\xe9\xa8\xf0\x6b\x1c\x73\xa3\xef\xd5\x6f\xf1\x9d\x30\x8f\xda\xb6\xfb\x26\x54\x8b\xba\xee\x0a\xdf\xde\x6b\x7b\xfb\xae\xea\x1d\x71\x3d\xef\x95\x66\xdf\x45\xe0\xf7\x30\x8f\x96\xb4\x33\xa6\xa3\x16\xd6\xdc\x79\xd9\x76\x7e\xee\xfc\x1c\x40\x69\xc6\x44\x95\x71\x9a\x31\x61\x75\x48\xc9\xee\xbb\x0a\x9f\x3d\x76\xed\xa9\xf0\xfd\x45\x66\x77\x7d\xc4\x07\xcb\xc7\xf2\xad\xe8\x81\xf3\xd7\xba\x5a\x21\x60\xda\x6d\x93\x40\x7d\xd0\xe5\x91\xdc\xea\xda\x75\x65\xb4\x25\x97\x47\x6d\x31\x99\xd8\x82\xe6\xb4\xcc\x9f\xb6\x42\x40\x4f\xef\x05\xf6\x9d\x71\xa3\xc9\x50\xe4\xa7\x24\xaf\x0e\xd5\x09\x6b\xbe\x61\xf7\x60\xd0\xbb\x67\x6f\x4e\x03\x4d\xfe\xb4\x5b\xee\x56\xbb\xa0\xd3\x1c\x05\x3c\x18\x93\x24\x57\xa3\xad\x6a\x43\xcf\x65\xe6\xba\xfc\xba\x71\x9e\x9c\x96\x2e\x75\x93\xb1\xa5\xbd\xbb\x34\xae\x3c\xd4\x41\x4c\x07\x08\x5c\x73\x98\xb3\x74\x02\x57\xce\x46\xe6\xd9\xde\xd2\xb7\x5e\x26\x2c\xad\x34\xe5\x8d\x24\x1d\x27\xd4\xa7\xf9\xa4\xa4\xfa\x57\x5a\x0b\xe9\x04\xb9\x12\x70\x9a\xa7\xeb\x4a\xab\xac\x92\xca\x57\x6a\x4b\x39\x22\x73\x96\x73\x25\xd2\x73\x00\x29\x31\x9a\xad\x14\x50\x2e\x98\x5d\x9d\x8e\xf3\x6c\x85\x42\x49\x94\xd9\xd0\x7a\x28\x33\x47\x37\xe1\x49\x33\xa7\x3e\x4f\x9b\x39\x8a\x4d\x0f\x71\xe6\x80\x53\x51\x47\x15\x4a\x44\xd7\xb7\x1e\xad\x06\xc0\xbc\xc8\xee\x0b\x54\x96\x30\x4e\x23\x54\xa1\xe2\x10\xa7\xc1\xf5\xb4\x1d\x6d\x7b\x82\x16\xa4\x2d\x25\x2d\xb9\x03\xe5\x04\x2d\x6a\x54\x59\xba\x04\x69\x8b\x6a\x97\x26\x5d\x0d\xcd\xe5\x7f\xcd\xcd\x51\xf8\x03\x1f\x21\x67\x74\xa2\xbe\x89\x4d\xb3\x6f\x5b\x4a\x6c\x71\x9d\x3d\x29\x79\x7a\x1d\x15\x95\xb5\x28\x6b\x3f\xfc\x53\xbe\x79\x69\x13\xc9\xbd\x19\x5c\xef\x49\x59\xe9\x10\x93\x33\x72\x49\x46\xbc\x95\x10\x56\xd1\xb9\x32\x6f\x90\x86\x4d\x98\x9f\x4c\x4b\x2d\x5d\x34\x34\x6c\x89\x2c\x0e\x80\xd8\x8a\x82\xa6\xcd\x3b\x25\x6d\xa5\xb7\x02\x75\x7b\x4a\x50\x2a\x4b\x05\x06\x68\xde\xe8\xbe\x4d\x80\x73\x1f\xf5\x88\xca\x4d\xea\xdd\x28\x69\xc7\xde\x5d\x89\x1b\xf9\xd6\x65\xba\x75\xdf\x75\x11\x92\xf8\xb3\xf3\x7e\x90\x4b\xb9\x1a\x17\x4c\x30\xd4\x31\x87\x77\x53\x0e\xc9\x37\xf9\xf2\x0f\xe5\xa4\x43\x0a\x18\xb3\xae\x03\x6e\x6c\xf6\xc4\x21\x01\x7a\xe8\x00\x0c\xbc\x1f\xbc\x01\xd4\xb9\x0e\xda\xcd\x13\x31\x6b\xcf\x18\x1e\xe2\x3d\x9c\x95\x8c\xc4\x15\xb8\x26\x37\xf1\x78\x28\x59\xaa\x5b\x40\x83\x9f\x8a\xb9\x3a\x85\xc6\x71\x98\xf6\xd4\x6b\xa5\x38\xdc\x6b\x54\x9a\x40\xab\x96\x02\x8a\x53\x23\x5e\xf1\x6a\x43\x07\xd5\x6d\x86\x50\x21\x6b\xd9\x31\x85\xbe\x64\x67\x5b\x2c\x48\x71\x2c\x8a\x75\x52\xda\xec\xa4\x3b\xe9\x99\xcf\xea\x1b\xf9\x49\xd4\xe3\xfc\x63\x88\x1f\xe7\x04\x3f\xce\x09\x0e\x1f\xa5\xfc\x2d\x35\xe7\xc2\x35\x3a\x00\x0b\x1d\x14\xa2\x59\x99\xf9\x40\xb0\xb2\xc5\x9f\x31\x88\xc6\x8d\xe2\x69\xab\x7c\x7a\xc9\x6b\xae\xff\x94\xb2\x49\x0c\x30\xc5\x9f\x7c\xdc\xfd\xc8\x61\xfc\x53\x1f\xab\x3f\x54\x49\x4e\xb5\x74\xc1\x8e\x5f\x72\xb6\xfd\x49\x97\x92\x20\x8d\x31\xc7\xa5\xf7\x37\x2c\x12\xe7\x0e\x25\x37\xa3\x49\x3b\x7e\x0c\xfa\x5a\x9b\x34\x32\x13\xc7\x71\xb8\xdd\xb1\xa3\x3b\x95\x19\x7a\x5a\xee\xf3\xc9\x9c\x36\xa8\x75\x22\x02\x65\xe3\x43\x83\x39\xa6\x72\x3f\xb5\xc7\x43\xd0\x92\x6d\x04\x08\x29\xc7\xc2\xc5\x97\x9c\xdb\x37\x13\x17\x98\x79\x8b\x82\x46\x8e\x4f\x4f\x13\x32\x6b\x39\xb8\x7d\xd3\xbd\xd6\x65\x2b\x27\xc8\x69\xd4\x5a\xa7\xce\x67\xc3\x8e\x39\xc8\xf7\xeb\xe4\x18\x9d\xa7\xac\x5f\x60\xcb\x70\x05\x46\x3a\xdf\x5a\xad\x03\x2c\xdd\x28\x31\x8e\x4d\xe5\x54\xfb\x23\x6b\xcd\xb6\x96\x8e\xb2\xd3\x8e\x69\x75\xcc\x0c\xe9\x31\x7c\x6a\x2a\xf4\xb4\x30\x0c\x72\x10\xc6\x34\xe2\x4c\xad\xcb\x6e\xda\xd0\xd9\x41\xaf\xc0\x71\xf4\x48\x6a\x32\xf3\xb0\x6a\xb3\x58\x40\xa8\x3b\x6a\x48\xfb\x6a\x0c\x17\x19\x8b\x91\x82\xee\xe8\x0e\xa1\x9d\x3d\x7e\x43\x76\x9d\x8d\xd2\x8c\x8d\xd1\xdc\xed\xcc\xec\x3d\xc8\xd8\x8c\x45\xae\xee\xf8\xde\xce\x9f\xc0\x52\xba\x50\xdd\x96\xf3\x15\x69\x0b\x29\x73\x82\x76\x6d\xd7\x52\x1e\xc4\xf1\x03\x4b\xf7\x68\xd7\x19\x5e\x06\x7b\xfa\x20\xb3\x8a\x33\x87\x5a\xa8\x3d\x7d\xc0\x59\x84\x8e\x2a\x6c\x66\xca\x21\x35\xb1\x88\x70\xbe\xd7\x37\xb4\x6e\x89\xf2\xa0\x08\xaa\xac\x98\x70\x62\x8d\x89\xf7\xf6\x98\x5c\xeb\xf0\x75\x18\xd3\xeb\x70\x07\xeb\xd5\x9c\xd3\xd9\x61\x94\x67\x30\x1d\xc3\x67\xf6\xc1\xe8\x30\x52\x73\x19\x5a\xc0\x6c\xce\xa9\xe4\x58\xd4\x66\xcc\x16\x8a\x1b\xef\xed\xdc\x48\x4a\xf5\xb5\x73\x13\x8c\x80\xd7\x33\x1f\xbc\xd5\xb7\x32\xc7\x58\x77\xce\x1e\x7f\x10\xce\x1c\xbb\x99\xf8\x46\xdc\xb0\xcf\x1e\x80\x3f\xaf\x66\x2f\xed\xb4\x73\xfe\x20\xfc\x79\x86\xe5\x53\x03\xe9\xfc\x81\xf8\xb3\xcd\x68\x47\xbc\xea\xe8\x2a\xde\x6e\x54\x81\xe5\x99\x07\xbc\xe3\x79\x12\x1f\x08\x95\xc8\x95\x02\xe4\xf9\xf6\xd2\x40\xa4\x57\x8b\x41\xa0\x67\x55\xd6\x62\xc4\xed\xdc\xcd\xf9\xec\x5a\x9b\x66\xbe\x14\xdb\x72\xed\x9d\xcf\xbe\x1c\xb0\x0b\xb1\x71\x07\xe2\xf9\xec\xdc\x82\x3c\x75\x86\x92\xb2\x03\x26\xf0\xff\xf9\x9a\x9c\x49\x19\x2c\x19\x8a\x65\xe6\x4f\x37\x37\xdb\xb1\x05\xa7\xaa\xb2\x98\xec\xed\xb1\xc1\xb5\x74\x17\x65\x53\x73\x15\x5d\x19\xce\x59\x7a\xaf\x1a\xd8\x5c\x35\x58\x82\xa6\xf1\x9a\x31\xa9\xcf\x0c\x1f\x0a\x4f\x06\x6f\xf2\xd8\x11\x45\x45\x6c\x72\x46\xea\xa9\x09\x23\xa8\x6c\x70\xf6\x38\x2a\xa1\x9d\x37\x9a\x3d\x20\x67\x8f\xa9\x0a\xa6\x22\x02\x71\xf4\xe0\xd1\xa3\x02\xcc\x02\x57\x1a\x2c\xbe\x81\xe9\x83\xc3\xd7\x9e\x39\x18\x5d\x10\xd3\x89\xcf\xc1\x60\x99\x9b\x27\xac\x6d\xa4\xde\x75\x88\x4b\x41\x4f\x27\x2b\xad\x37\x93\xa0\x7c\xe5\xe9\xa4\x24\xb5\xa9\x0b\xd4\x04\x1a\xb2\x13\xad\xbb\xec\x01\x5d\x95\x4f\x59\x0b\x73\x19\x95\x55\x3f\x8b\x53\x05\x18\x73\x59\x95\x02\x21\xe9\x83\xed\xd5\x14\xef\x0d\x5a\xf3\x4a\xdc\x4a\x61\xcf\x60\x57\x5a\x71\x2e\xbf\xf2\xb5\x67\x30\x2c\xa9\x7e\x62\x2e\x3a\xae\x3d\x85\x9a\xb7\xd7\xb2\xfc\xdc\xce\x32\xbe\xdc\xce\x37\x91\xdc\x9e\x61\xc3\xb8\x3d\xd6\xd9\xaf\xb9\xf0\x74\x37\x7f\x02\x13\x04\x00\x6e\x7f\xaa\x61\x74\xaa\x06\x73\xa5\xbd\xc6\x35\x99\xe0\xca\xf6\xdf\xc9\xc7\xd3\x67\xf1\xe6\x39\x06\xe7\xf9\xce\x52\xe7\x4d\x8a\xb3\x6d\xdd\x67\xb8\x58\x9d\x39\x27\xcf\x37\xb4\x37\xb9\xb9\x48\xa2\xfd\x6f\x67\xba\x9d\xc1\xb9\xe7\xb2\xd2\xd9\x23\x4a\xc9\xca\x79\xc3\x61\x55\x89\x73\x04\x9d\xea\x87\x79\xed\xa3\x80\x6e\x33\xb3\x3d\x26\xcf\xb7\xb6\xeb\x00\xcd\x76\x5f\x6c\x21\xd1\x21\x69\x2d\x1f\xc7\x3c\x47\x45\x18\x94\x68\xab\xce\x81\x42\xae\xec\x72\xbc\xe6\xce\xae\x0b\x1d\x3c\x7d\xb5\x73\xa4\xeb\x1c\xf5\x5c\xfd\xc0\xe6\x2a\x27\x2e\x7c\xc2\x9d\x79\x63\xcc\x62\x21\xbe\xe4\xe8\x6a\x9a\x9c\x3d\xae\x1a\x78\xe7\x8d\x68\x2f\xd0\xd9\x63\xa9\x86\x7a\x12\x23\x9d\xd0\x61\x2b\x06\x45\xf1\x4f\xea\xd4\x42\xd6\x94\xb1\xbe\xbd\x9a\xf3\x85\xf2\x8e\x99\x71\x07\x7e\xe7\x1c\x64\x9e\x75\xd2\xa8\xf5\x20\x12\x6e\x57\x02\xed\x2f\xc7\x27\x51\x7b\x75\x4e\xbd\xda\x4a\xbd\x8b\xab\xda\x9b\x8e\x7f\x7b\xc8\x3e\x6b\x5e\x71\x4f\x27\xcc\x53\x18\x53\x02\x5d\x6b\x33\xcc\x37\x30\x63\x0e\x72\xb5\xe7\xce\xb8\x0e\x88\x19\xf3\xab\x85\xd1\x35\x42\xce\x52\x5a\x5a\x80\xb7\xf5\x65\xa5\xd7\x26\x7f\xd3\xd0\x59\xc3\xd0\x40\x39\x7f\x38\x24\x50\x67\x0d\xcb\xad\xfe\x86\xe2\x35\xb2\x2d\x6f\xad\xb9\xe4\x8f\x8b\xa1\x25\x81\x43\xab\xe6\x3a\xb5\x69\xd1\x40\xc2\x55\x8f\x57\x93\x85\x4d\x0b\xf3\x64\xa2\x74\x17\xe5\x2c\xd9\xd8\x7b\x9f\xe5\x54\x20\x34\x89\x24\x49\x87\x6a\x41\xb2\x0e\x75\x06\x89\x2e\x5a\x5e\xfe\xb4\x6d\x62\xcc\x88\xd4\x7c\x0b\x70\x85\x9b\x97\xbf\x97\xc7\x1c\x4f\xbf\x12\xa4\x59\x05\x5e\x73\xc9\x49\x81\x42\x92\xde\x80\xac\x00\x42\x19\x49\x9e\x76\x0a\xf0\xef\x6e\x4e\x3f\xd6\xc4\x79\x6b\x62\x4b\x50\x9b\x44\x73\x9e\xe3\x4d\xab\x0a\xe3\x9a\x1e\x7b\x36\x23\x56\x4c\x73\xdd\xea\xa5\xe3\xfe\x06\x07\x6a\xa0\xd6\xa4\xf0\x37\x8d\xc2\xb2\xdb\xdd\xa1\xc6\x37\xaa\xca\x72\xa2\x3b\xf2\x6e\xa4\xdc\x2b\x22\x2e\xf9\x77\x8d\x9e\x53\xa0\xc3\xc5\xa9\xf3\xe5\x72\xd6\xcc\x0d\x67\xbc\x64\x26\x95\xaf\x96\xad\x44\xef\x8f\x7d\x16\xcd\x1f\x83\x22\x8d\xd3\x7b\x45\xeb\x2c\x33\xe9\x10\xd9\xc6\x02\xd0\x77\x7c\x10\x42\x1d\xc1\x19\x98\x5e\x68\x3b\x57\xee\xef\xb8\x25\x79\x3a\xa0\x33\xfa\xdf\x93\xbb\x6c\x17\x84\xae\x69\x77\xd3\x63\x5c\x78\x1e\x82\x7c\xfa\xec\x69\xea\x4c\x61\x79\xd0\xdc\x1b\x6e\x9a\xe6\x15\x44\xd5\x2c\x21\x30\x6f\xea\x72\xce\xe0\xd2\xf5\x09\x53\x52\x8f\xab\x8e\xaf\xae\x23\xc2\xe7\xca\xc7\xd9\x82\xed\x54\xdf\x1b\x2f\xdf\x58\x74\xb9\x48\xfd\xb9\x22\x7f\xc8\x90\xde\x57\xb5\x93\x97\xb6\x3d\xa8\xf8\xeb\x4b\x6a\x45\xfa\xf7\x2b\x84\x69\xcd\xda\x36\x9f\xb3\x4f\x3e\x6b\x63\xdc\xec\x84\xb3\x3c\x08\xe3\xea\x79\x03\x97\x35\x53\xf8\xdc\x1d\x13\xfe\x79\x13\xfb\x5b\x0c\xf3\x1d\x11\x9f\xdb\xee\x37\xcf\x12\xf7\xdf\x79\xb8\x18\x63\x87\xb5\x7d\x0d\x1e\xf8\x4b\x3b\x19\x39\xab\xeb\x92\xec\x2f\xe7\x3f\x68\xcd\xba\x11\x75\x94\x65\x33\x89\xc1\x79\x9e\xcd\x32\x84\xb9\x16\x4d\x25\x98\x19\xd6\x4c\x11\x8e\x22\x83\x05\x3a\xdc\xa1\xc2\x48\xb2\x00\xab\x66\xe0\x2e\x8b\x9e\x6f\xcb\x87\xfb\x6b\x9d\x77\xc7\xd1\xff\xfc\xee\x17\xe3\x97\x8f\xfc\x11\x61\xe3\x4d\x7f\x4c\xa8\xad\xeb\x8f\x5d\x56\xd0\x62\x6f\xaf\xee\xd1\x4e\x51\x4a\xb2\xfb\xec\x58\x7d\xd4\x60\xc2\xde\x7e\x29\x64\x68\x86\x30\x1d\x32\xec\xed\x97\x42\xe6\x58\x6a\x31\xc1\xaf\xde\x9e\x39\x5b\xce\x62\x88\xb9\xed\x4d\x1f\xed\xb9\x2d\x4d\x1f\xca\xb9\x2d\x4d\x19\xa7\xd9\x0e\x22\xe7\x0c\xd6\x59\x8d\x4e\x1f\xb1\xb3\x9a\x9b\x3e\x6c\x67\x35\x37\x7d\xec\xe6\xf8\xe4\x9c\x3f\x78\x73\x5b\x9d\x3b\x7a\x73\xdb\x9b\x3b\x7c\x73\xdb\x9b\x30\x7e\xd7\xce\x89\xd4\x1f\xad\xf6\x4f\x18\x9f\xc7\xdf\xf9\xe0\x3a\xcc\x29\x82\x7f\x70\xad\x31\x50\x31\xfe\xbc\x01\x50\x43\xba\xa8\x3c\x3d\x87\xf4\x4a\x78\x02\xdd\x7d\x99\xee\xf8\x81\x3e\x43\x68\xbb\xa7\x6c\xb2\x7b\x3c\xc4\x65\x7c\x97\xf0\x5e\x11\xda\xab\x85\x75\x60\x4f\xd2\xed\x85\xec\x0a\x40\x4b\x75\x05\x60\xfd\x4e\x75\x1d\x27\x7f\x95\x60\xdd\x8d\xba\x28\xfc\x14\xa7\x91\x91\x17\xd9\x53\x9b\xb0\x98\x22\x07\x1d\x74\xe0\xb0\xaf\x2b\xa1\x83\x74\xc7\x85\x7c\xd3\x9d\xfe\x16\x43\x9b\xbf\x97\x50\xb8\xec\x4e\xb8\xd2\x4e\xbe\xab\x5d\xad\xee\xf7\x64\x05\xe7\x1d\x19\x6c\x3f\x7f\xd2\xa4\x09\x5f\x75\x8d\xba\x75\x23\x35\x92\x9d\x5c\xc4\x33\x2f\xae\xfc\x0a\x39\xc7\x6a\x0b\x57\x1d\xe9\xf9\xb0\x07\x06\x58\xd3\x9b\xcb\xdd\x15\xf9\xe3\x29\x2e\x30\x97\x29\x00\xc2\xb8\x08\x13\xd4\x04\x0d\xb3\x2c\x83\x59\xba\xc1\x25\x51\xd1\x3e\x00\x16\xf4\x4a\x10\xa7\xbb\x38\x8d\x2b\x04\x50\x50\x22\x23\x4e\x8d\xec\x58\x6d\x67\x55\xea\x84\x29\x1b\x59\x11\xdf\xc7\x29\x1e\x48\x80\x07\x53\xfb\x62\x17\x27\xc9\xe6\x27\xb4\x0b\xdd\x68\x35\xd4\xbd\x7b\xf9\xd6\x74\xfb\x46\xdb\x65\x23\x42\x78\x8c\xa1\x5d\x6e\x15\xcf\x26\xb7\xe4\x0c\xb7\xe4\x28\x5a\x72\xa6\xb7\xe4\x0e\xb7\xe4\x2a\x5a\x72\xa7\xb7\xe4\x0d\xb7\xe4\x29\x5a\xf2\xca\x97\xbf\xd7\x15\x3e\xa1\xe7\x5d\x11\x1c\x50\x09\x64\x66\x39\x99\x3f\x2f\x2c\xd3\xfc\x59\x11\xc1\x5e\x86\x41\x82\x9c\xff\xfa\xda\x5a\x58\x0b\x8b\x8f\x58\x17\x5f\xbc\x38\x4e\x5f\x6d\x73\x61\xaa\x6b\xd3\x17\x2f\x2f\x7f\xff\x96\x91\x13\x9c\x72\xbe\x96\xe4\x62\x52\xc7\xed\x44\x21\x36\xab\x4b\x2d\xa6\x7e\xf9\x45\xe1\xe6\xf4\xd9\x88\xd3\x08\x3d\x6d\x0c\x8b\x0a\x6d\xb3\x3d\xc8\x79\x78\xd4\x03\xbf\x0d\x44\x2d\x75\xdb\xb9\xd2\x76\x4b\x52\x42\xd6\x99\x2a\xb6\xbc\x01\x5c\x74\x66\x6a\x34\xe1\x77\x98\xcb\x8d\x34\x78\x30\xaa\xec\xfe\x3e\x41\x2c\x24\x00\xe3\x97\x56\x1b\x63\x6d\x9a\x5d\xcf\x38\x7d\xe5\xbe\xd3\xe4\xdd\x6e\xcb\x3b\x80\xd9\x23\x9c\x8e\x69\x52\x6f\x45\xc8\x1b\x7f\xbd\x73\x9d\x9d\xbc\x05\x1e\xa7\x7b\x54\xc4\xd5\x96\xbf\xb4\xb8\x7e\x46\xb1\xa9\xbf\xf5\x5e\x2d\x36\x80\x1d\x3b\x93\x0b\x86\x22\xf2\x58\xb9\xfa\x2c\x63\x5c\x69\x72\xf7\x78\x7f\xbf\x7b\xda\x57\x14\xd3\x37\xaf\x28\x8c\x5b\x3f\x75\xb3\xc9\x89\x57\xeb\x8d\xa5\x0f\x31\x13\x63\x88\x83\xb7\x55\x0a\xa8\x4e\xae\x86\xcb\xf6\x56\x52\x11\x6f\x6a\x85\x11\xb8\x69\xe8\xd9\xd6\x91\x13\x5a\x0f\xcd\x02\xcd\x1e\xea\xed\x24\x8e\xe2\x9c\x67\x47\x72\x2c\x57\x63\x1a\xef\x8e\x9d\x11\xf5\x2d\x6d\xa3\x8b\x37\x14\x64\x5e\x4f\xd3\xeb\x51\x6f\xab\x6b\x4c\x58\x99\x31\x26\xa1\xd8\xa9\x3c\x05\x4f\x8d\xa8\x18\x9e\x22\x93\x50\x94\xaa\xea\x10\x14\x04\xf3\x74\xc6\xed\xce\x9d\x01\xbe\xed\xad\x30\x49\xe6\x8d\x94\xa3\x3d\x4c\xdb\x2f\x5f\xb4\xd4\x1e\xa8\x36\x86\xd2\x73\x64\xfc\x68\x86\x1d\x53\x77\x02\x92\xe3\x57\xb6\x91\xdc\x3a\x5c\x93\xfa\x38\x72\x4e\xbc\x23\x05\xc7\xd4\xb5\x7d\x74\x79\x8c\xd6\x68\x86\x9b\xb8\xc2\x8f\x2d\x4e\x71\x38\x09\xfa\xd0\xe0\x52\x14\xa7\xf9\xb1\x1a\xd9\x49\x69\xf6\xff\x19\xc5\x0f\x43\x02\x43\x07\x5e\x81\xfe\x20\xf4\x5b\x02\x6c\x5a\xa2\xc1\x7e\xff\x9c\x69\xd2\x4e\xf2\xcf\xe9\x04\x12\x11\x3b\x0e\x56\xd9\xd5\x7e\xe6\xb3\x68\xdc\x98\xf9\x86\x69\x3d\x0c\x40\xb2\x88\xcf\xa3\xdd\x90\x30\xd2\x55\x93\xae\x72\x73\xf9\xab\x80\xc6\xd1\x66\x54\xff\xa7\x27\x99\xfa\xab\x6b\xfd\xe2\x06\x93\xbb\x8a\x09\x90\xfd\xa5\xe2\x22\xfc\xd1\x51\x32\xa7\x7a\xdb\xeb\x9a\x66\xbd\xef\xa5\xc3\x1b\x1c\xab\x4c\x6f\x38\x1e\xbd\x73\x95\x9c\x23\xf5\xfb\x6e\xdb\xac\x5b\xe6\x76\xde\xad\xbb\x9c\x62\xe7\x4d\x3c\x36\x70\xcb\xc4\x9c\x7c\x22\x66\xef\x38\x89\xab\xe7\xae\x05\x5c\x7d\xc5\x8f\xc4\xcf\xcb\x36\x72\xa2\xb5\x58\x5f\x74\x3b\xac\xcd\x61\x31\x62\xf7\xae\x37\x3a\x53\xf4\xe5\x9b\x27\xa1\x2f\x6f\xe6\x89\x59\xb9\x9b\x59\xd4\xa8\xe2\x03\xee\xf2\xee\x98\x12\xe3\xff\x26\x3c\xde\xc5\xa1\x71\x87\x3e\xc7\xa8\x78\x0d\xad\x05\xfe\x6f\x7b\x0b\xb8\xbe\xd9\xce\xab\xa5\x68\x33\x3a\x16\xd4\x2c\x0b\x6d\x3e\x3d\xa8\xf8\x5c\x51\x2f\x2f\xb2\x1c\x15\xd5\xf3\x86\x90\x12\x90\xae\x6f\x87\xde\xcf\xb8\xca\xa9\xcd\x95\x8e\xe7\x41\x0f\xdb\x3a\x66\xcd\xae\x66\xe3\xd9\x69\x9a\x3f\xb3\x8c\x87\x74\x68\x48\xae\xca\x36\x28\xc7\x23\xf7\xaf\x4b\xd6\x1f\xba\x34\x0a\xb2\x9e\x85\x6b\x79\x66\x13\x11\xd9\x7a\x85\x9b\xc0\x21\xf3\xdf\xeb\xcc\x0a\x01\x0e\x15\xdd\x5d\xcb\x0f\x9f\x41\xde\xbd\x51\x59\xba\x08\xca\x4c\x20\x90\xbe\x4c\x90\x29\x0c\xdc\xca\x64\x31\x83\xce\x6a\xca\x52\x41\x35\x8e\xb1\x6b\x95\x50\xf8\x54\xd3\xdb\xc3\x53\xf9\xc7\x32\x22\x2e\x23\x5c\xaa\x17\x3a\x2f\x04\x61\xe7\x71\xd2\x8f\x9d\xee\x11\xee\x7a\x81\x51\x5c\x86\x78\x3a\x3c\x1b\xe1\x3e\x88\x53\x00\x8b\xec\x58\x21\x23\x0c\x8a\x08\x94\x88\xcc\x7e\xe6\x0e\x7e\xfb\x66\x01\x77\x05\x42\xa4\xa5\x5d\x9c\x54\xa8\x20\xb2\x79\x51\x9f\x07\x03\xb8\x47\x41\x52\xed\x09\x7b\x1a\x71\xba\xcb\x40\x14\xc1\xcf\xa8\xc8\x78\xf1\xcd\xae\x27\x68\x16\x9f\xe6\xc6\x9e\x15\x39\x37\x3a\x75\xa5\xda\xd9\x26\x67\x72\xaa\xc5\x8e\xb3\xa4\xb3\xae\xfa\xa9\x7c\xd8\x45\x16\x5c\xe3\x0e\x55\x8f\x08\xa5\x02\x30\x5c\x77\x63\x71\x60\x08\x27\x3e\xa0\x8d\xb5\x25\xdf\xef\x8b\xec\x71\x23\x5f\x66\xdf\xb3\x86\x4e\xd1\x97\xd5\xe9\xcb\x24\x96\x98\x45\xaf\x09\x02\xa0\x1d\x31\xdb\xf7\x47\x2c\xa2\xdc\x24\x9e\x30\xdf\x25\x7d\x94\x30\xeb\x84\xa9\x3b\x61\x9a\x49\x6a\xf7\x4f\x58\xc7\xca\x51\x71\xbb\xcb\xb2\x0a\x15\xb7\x81\x70\xf0\xdc\x95\x3b\xbd\xe5\x7b\xcc\xf3\x2c\xd1\x0f\x6f\xa1\x77\x95\x21\xda\xaa\xe3\x67\xb8\x44\x07\x2a\xc0\x0d\x1b\x93\x46\x42\x62\x4c\x2e\xfe\x28\x44\x26\xf2\x35\xd7\x8b\x5c\x66\xca\xcd\x38\x5d\xee\xee\xda\xea\xb5\xd8\xea\x50\xfa\xcd\x49\x24\xa5\x38\x8e\xbc\x80\x61\xcb\x9e\xef\xaf\xb0\x84\x91\x89\x25\x48\x4a\x5b\x21\x29\x6d\xcc\x7c\x5d\x81\xe5\xda\x56\x1f\x38\x1a\x5a\xcf\xc3\x6b\x8f\x8d\x14\x7d\x69\x34\x08\x4b\x68\xad\xd1\xcd\x5d\xdb\x54\xb4\x26\xba\x45\x70\xbb\x07\xc1\x27\x01\x57\xed\x34\xd9\x4d\x50\x24\xca\xa2\x97\x9f\xaa\x2c\x4b\xee\x82\x82\x89\xaa\x05\xac\x82\x7b\xea\x06\x14\xd1\x44\xb4\xad\x8f\x74\x15\xe1\x97\x25\x88\xfa\xf6\xff\x3d\x93\x81\x26\x91\x18\x2d\x34\x2f\x6c\x17\xff\xee\x16\xfb\x7a\xa6\xae\xd1\xdd\xce\x1e\xbb\x8f\xeb\xf4\x87\xf7\x8e\xf1\x3b\xba\x66\x57\x3a\x27\xb1\xc0\x6c\x13\x17\x2e\xc9\xb4\x7c\xe2\xcf\x0a\x97\xa6\xac\x30\xab\x03\xe7\x19\x9b\x8c\x54\x1e\xfe\x0a\x27\x3b\xe3\x8c\xdf\xdf\x99\xe1\x5f\x7f\x29\x99\x17\x58\xae\xe3\xea\xc5\x1f\x08\xd2\x08\xbc\xae\x17\x1a\x3c\xfc\x11\x7a\x88\x43\x64\xe4\xf1\x13\x4a\x0c\xb2\xbd\xdc\x98\x37\x27\x6a\x8a\xe4\xd6\x56\x5f\xd8\xa4\xbc\x10\xa9\x22\x8a\xb7\x8f\x3c\x3a\xcd\x32\x64\x02\x37\xef\xdc\x00\x49\x0d\x0c\xb5\x0e\xd4\x9a\x31\xc8\x67\xc9\x26\x52\xdf\x57\xec\xf9\xce\x6e\xa7\x60\x5c\x7f\x49\x19\x57\x85\x90\x28\x8e\xbb\x34\xf1\xfd\xc6\xcf\x8f\xe9\xe8\x60\x6f\x9d\x54\xc8\x4a\x0e\x37\x71\x5a\x56\x41\x1a\xa2\xf6\x49\xb9\xcf\x1e\xf9\xca\x4c\x17\x12\x31\x7a\xfb\x46\x44\x49\x7a\xdd\x70\xdd\x1b\x09\x8c\x6a\x97\x81\xca\x2c\x79\xc0\xda\x08\xde\x68\x44\x55\x6d\xf2\x1d\x53\x92\x45\xe2\xeb\x8b\x96\xb5\xc7\x23\x16\x96\x2c\xe8\xa7\xf6\x5a\x9c\x59\xad\x07\x3f\xbc\x5f\x9a\xda\xe2\x50\x1d\x7d\x73\x65\x9e\xc4\x55\x35\xb9\x8f\x63\xaa\xe9\x1b\x65\x25\x86\x9b\x51\x17\x6c\xec\xf9\x82\xff\xa8\xee\x29\x97\x83\x09\x50\x37\xdc\x1d\x42\x11\x9e\x9c\x20\x57\x3f\xe5\x43\x88\xd5\xbe\xaa\x63\x4a\xd4\x09\x1e\xf6\x4a\x92\xaa\x1f\xd7\x87\x0d\x9c\xea\xdc\x15\x6a\xfe\x6e\xe9\xaf\xec\x8b\x4c\x82\x2b\xb1\xe8\x79\xec\x36\x95\x6f\xfa\xd9\xe1\xcc\x11\xee\x1f\xa7\x3e\xf7\x23\xce\xa0\xcc\x76\x4a\x44\x77\x5e\x37\xb7\x3e\x72\x65\x9b\x9b\x1f\x89\xdc\xef\x2d\x42\x76\x15\xab\xf6\xea\xc8\x09\xdc\x70\x71\x41\x37\x43\x54\xcd\x94\x37\x1a\x89\x31\x7d\xae\xcf\x99\xac\x0a\x4f\x2a\xed\xbd\x9c\xd4\x5e\xcb\x9b\x4c\x1d\xd5\xcd\x9c\xea\x62\xcd\x9e\x4d\x7d\x52\xb3\xad\x37\xb7\x41\x55\x15\xaf\xf9\x1e\xdc\x6c\x79\xa7\x3f\x73\xcb\x59\xef\xd8\x46\x98\xed\x3d\xf9\x0b\x75\xbc\xfc\xe9\x86\xbb\xe1\xda\x1c\xc1\x43\x63\x79\x67\x14\xb3\x8c\xe5\x0e\x3d\x3b\x48\xe3\xaf\x1a\xf7\x9e\x51\xaf\x47\x5b\x71\xb4\x7b\x9d\x8b\xbd\xe7\x1a\x31\xce\x77\x77\x7d\x40\x45\x15\x87\x41\xc2\x0a\xd2\xa4\xd1\x59\xfe\x43\x91\xfa\xa1\x48\xfd\xb5\x15\x29\xfd\x59\x9c\xf5\x43\x81\xfa\x06\x14\x28\xce\xcb\x5e\x13\x52\xf0\xda\x5a\x40\xaf\x13\x4f\xc0\x9e\x4a\x87\xa9\xa6\x26\x84\x6a\x4d\x52\x20\x92\x05\xd0\x20\x07\xf5\x17\x1f\xfa\x29\x63\x3d\x71\x70\x07\x47\x73\xf2\xf0\x4d\x1e\xbc\x46\xdd\x95\x95\x08\x03\x2c\xf3\xa7\x9b\xbe\xa0\x3e\x45\x30\x82\x10\xd5\xc0\x9f\xf1\xa1\xc8\xc0\xc4\x3d\x16\x21\x22\xfe\x1a\xec\x9c\x90\x18\x96\x83\x9b\x1a\x09\x2e\xb1\x2c\xc1\x60\x85\xd5\x18\x86\x19\x39\x7f\xe7\x14\x65\x92\x5a\xad\x39\xa8\xa7\xd6\x77\x85\xee\x3c\x01\x07\x66\x72\x16\x91\x78\x0b\x5c\x19\x09\x3e\x8e\xc3\x42\x87\x29\x6d\xa8\xce\x7b\xea\xeb\xdd\xa6\x2c\xc3\xe3\x5b\x6c\x23\xa3\x9a\x06\xe9\xc4\x59\xe2\xb9\xd2\x9a\xe9\xa3\xd6\x30\x1f\x75\x8e\x05\xe7\xeb\x48\xc2\x09\x87\xd9\x6a\x35\x58\xe7\xdd\x10\xc5\x57\xfa\x7a\xc9\xc3\x58\xa1\x7f\x35\xdb\x37\xbd\xd4\x8b\x29\xc5\xd9\x2d\x1d\xf9\xe6\x93\x00\xf9\xf6\x0d\x07\xf5\xf6\xcd\x49\x88\xfc\x71\xda\xf3\x95\x9a\x4b\x4d\x4c\x79\xfe\xfc\x3b\x3b\x56\xf9\xb1\x19\x5d\xe1\xd4\x14\xd7\x6e\x4f\xa5\xe8\x77\x21\xb0\xc8\xcb\x9f\x54\xe6\x3e\x6a\xe3\x1e\xd7\x0a\x9e\x36\x7c\x2b\xf4\x3b\xdf\xca\x8a\x9c\xff\x77\x81\x81\x28\x22\xd1\xb8\x42\xec\x09\x93\x01\x2c\xff\x61\x71\x08\x12\x31\x1c\x56\x3a\x70\x22\xb9\xe2\x14\xb0\x17\xaa\xf6\xf2\x02\x49\x3b\x36\x5b\x4d\x4c\x3c\xbe\xe2\x09\x86\x70\x00\xa8\xac\x92\xab\x63\xa3\xe8\x95\x01\x62\xc4\xb1\xa2\x7a\x8d\x17\xa3\x69\xfe\x04\xea\x1f\x12\x9e\xc3\x6c\xbb\x3b\xdb\xb2\x5d\xcd\xf1\x2a\x7d\x48\x09\x47\x8f\x61\x67\x9d\xad\xd6\x3b\x4d\xdb\xcc\x9f\x80\xed\xe2\x5f\xe4\x86\x03\xbf\xc3\x89\xf8\xe5\x0b\xcc\x83\xb2\x8c\xd3\xfb\x9e\x2e\x91\x94\xc3\x0c\x59\x1b\xdd\x99\xce\xfa\xa5\x49\x09\x38\xae\x16\x4d\x57\xfa\x02\xc3\x22\x26\x9b\x95\x91\xd5\xc2\xa5\xe3\xba\x9e\x7a\x7c\x13\xe1\xbc\x40\xc9\x2d\x2c\x37\x21\xe7\x6d\xd7\x53\x4a\xca\x60\xb8\x56\x73\xe5\xa8\x76\xa3\x4a\x82\x66\xaa\x40\x09\x6e\x78\x2a\x91\x63\x01\x0b\xb4\x62\xa7\xf9\x46\xbb\xc3\x2f\x93\x58\x2c\xdc\xcc\x3c\x88\xff\xc2\x02\x59\x49\x51\x5e\x16\xe9\xa4\x23\x88\x92\x5b\xe9\xb0\x80\x51\x42\x74\xcc\x2b\xab\xa0\x8a\x43\x69\xdd\xd1\x48\x08\x85\x8b\x86\x66\xc8\x9b\x18\x63\x36\xec\xaf\xed\x1b\x2e\x8b\xe9\x08\x3e\xe9\xf2\x04\x74\x34\x1c\x86\xc5\x10\x6f\x2d\x02\xae\xc9\x3c\x7c\xbb\x6e\xbe\x79\x81\xc8\x50\x29\x9c\xdc\x34\xa0\x41\x98\x45\xe8\xf4\x98\x15\x11\x1d\xe3\xbb\x02\x05\x9f\x0c\xfc\x5d\x59\x43\xd4\x2e\x15\x7b\x2e\xba\x40\x60\x21\x4e\xbc\x4f\xb0\x3e\x34\x65\x39\x3a\x09\xde\x90\xd6\x9a\xf9\x32\x02\xcb\x1d\x5a\x24\xe5\xf5\x69\xf2\xc8\x69\x05\x02\xae\x95\x55\xaf\x85\xf1\xbb\x11\x1b\x34\xd5\xcb\x21\x3a\x48\x19\x2c\xa8\xd3\xa6\x68\xee\xc3\x2b\x22\x77\xc0\xd8\xe7\x12\x57\x09\x69\x32\x7b\x4b\xf6\xf8\x07\x73\xab\x3c\xb7\xc2\xf7\x83\xab\x57\x85\x5e\x8f\xbd\xa6\xd4\xdb\x28\x3a\x89\xeb\x43\x7f\x35\xb6\x78\x0c\x00\x67\xa5\x38\xe0\xbb\x60\xb5\x73\x96\x03\xc0\xeb\x35\x66\x00\x7a\x5d\x8c\x03\xcf\x96\x1b\x7d\xbd\xcb\x29\xc6\x23\x36\x0d\x20\x18\xa1\xe7\x83\xa0\x4e\xc1\x0a\xaa\x88\xa6\x53\xf9\x8c\x8a\xac\xa7\xef\xb2\x14\x1d\xa0\x26\xf1\xc9\x14\x8e\x72\x7b\x7d\x38\x4f\x0a\x1f\x6b\xb6\x14\xc8\x4e\xd6\xfc\x63\xc1\x03\x49\xe1\x07\x65\xb6\xfc\xca\xf5\x52\x79\x0c\x8f\x61\x00\x66\x1b\xe5\x77\xa8\x58\x09\xda\xea\x95\x40\x89\xbc\x4c\x1b\xe9\xba\xc4\xb5\x6a\xe7\x80\xcc\x95\xc7\x2b\x89\x95\xae\x76\x7d\x75\x7a\xc7\xbf\x85\x27\xa8\x91\xbd\x38\xd4\x21\x65\x4c\x0f\x9d\xdd\xb6\x94\x9e\x5e\x79\x62\x82\x15\xcf\x55\xe7\x28\xc4\xf4\xa4\x13\x13\x6d\xb1\xa1\xfd\x30\x8b\x39\x1c\x2a\x45\xa3\x1f\xfb\x7c\x97\xf5\x80\xda\x22\x3a\x28\xb5\x55\xa7\x1f\x90\x58\x8a\xc1\xd2\x93\xb7\x86\xd3\x53\x82\x46\x4d\x2a\xe9\xbe\xaa\x6f\x33\x13\x29\x2a\x9f\x54\x69\x8b\x4d\x31\x67\xb4\xc6\x85\xce\x7c\x01\xd2\xb6\x86\xcd\x1b\x12\x4e\xa0\x8e\xaa\xeb\x6b\x57\xc8\xaa\x4f\x16\x64\x6a\xff\xe9\x64\xc9\x1f\x63\x75\x22\x32\xb3\x7f\x6a\x81\x80\xcf\x58\xd6\xa6\xd4\xa2\x1e\xe9\xaa\xf3\x3b\x22\x6a\x9a\x72\x28\x49\xe2\xbc\x8c\xcb\x51\xd8\x88\xda\x1e\xd9\xd1\x8f\x1f\x83\x0b\xda\x6a\xce\x3e\x8b\x1a\x85\x36\x67\x90\x62\x3d\xe8\x6a\x2c\x1c\x83\x34\x3e\x59\x5b\x95\xb0\xf7\xe8\x79\x6b\xed\x60\xc5\xa9\x38\xe4\x73\x63\xca\x33\xf0\x57\xf0\x37\x60\xdf\x70\xd7\x58\x4d\xb5\x55\xf2\xc6\x3b\x86\xfa\x2e\xc9\x82\x4a\x8a\xa2\x20\x0d\x38\xa6\x98\xe1\x9d\x37\x81\x58\x9e\xd2\x8a\x33\x20\xec\x19\x30\xc7\x19\x2c\x0a\x82\x79\x71\x10\x9a\x93\xc4\x0b\x9c\x51\xb6\xd1\x4a\x2c\xe8\x89\x6c\x64\xb8\x08\xa3\x31\xf4\xa7\x4b\xfe\xe8\x15\xbc\xa9\x96\x66\xa9\xc1\x57\xad\x2d\x18\x83\x02\x80\xf7\x60\xe5\x78\x45\x1c\xd6\x76\xe7\xea\x8f\x18\x18\x41\xaa\xf0\x4a\x4f\x67\xdb\xdb\x59\xba\x6f\x95\xc6\x63\x6a\xcb\xa5\xb5\xa5\x88\x1b\x39\xe4\x52\x23\x75\xe5\x38\x1d\xea\x0f\xd9\xe4\xce\xca\x73\x14\x14\x41\x1a\x22\xde\xe0\x2e\x18\xdf\x19\x0b\xb7\x0a\x8d\x2a\xf2\xa7\x26\xfe\x5d\x10\x5a\x61\xa8\x69\xb5\x1b\x34\x44\x83\xd8\x38\xd9\x96\x1f\x2b\x23\x4f\x82\x10\xed\xb3\x84\xbb\x21\xa8\x66\x87\x89\x60\x0f\xd9\xe7\x4b\x42\x2b\x2f\x8d\xe0\x04\x40\x8a\xf8\x94\xad\x20\x32\xd4\xe3\x2c\xaa\x90\x74\x74\x54\x16\x26\xb8\x44\x87\x1b\x21\x26\xb0\x9e\xd3\xb5\x22\xa1\x19\x77\x26\x99\x49\x14\x0a\x5f\x5d\x90\x9c\x5d\x45\x5a\x05\x4b\xda\x5b\xcb\x97\x68\xf4\xc4\xc3\x68\xb2\x2f\xf2\x8e\xbe\xf2\xdd\x93\xaa\xac\x99\xb2\x27\x2e\xcc\xf7\x45\x50\x22\x03\x45\x71\x95\x15\x0a\x15\x88\xd1\x53\x61\xb1\x16\x6a\xb2\xe1\x26\x6a\xdf\x29\x3b\x56\x78\x49\xde\x98\x3d\x6e\xbc\x52\x75\x16\xdc\x39\xbe\x79\x65\xfb\xda\x39\xdf\x9a\x4b\x78\x8e\xea\x30\xc0\x9c\xf0\x5a\x09\x91\x79\xeb\x16\xbf\xb4\xba\x1d\x23\xb7\xd7\x25\xf7\x31\x91\x35\x3a\xb9\x44\x12\xb3\xa5\x1d\x73\x8a\xb8\x56\xbb\x5d\x78\x42\x70\x3e\xd9\x23\x2b\x07\x68\x46\x68\xa0\x04\x87\x86\x8f\x37\xf3\x40\x5a\xb0\x59\xa2\x90\x19\x9c\x2b\x51\x50\x41\x2f\x3e\xf0\x89\x8f\x10\xa5\x33\x4b\xc3\xd1\x62\x7c\x13\x95\x42\x64\x3a\x1b\x77\x01\x23\x0a\x67\x69\xa3\x81\x45\x0b\xde\x45\x7d\x97\x15\x07\x4d\xb9\x93\x66\xf5\xe1\x9b\x60\x97\xe0\xf0\xd0\x6e\xdf\x8c\xd8\xd9\x8f\x9d\x78\x72\x76\x5c\xe5\xa8\x2b\xb3\x02\x32\x32\x5e\x81\x1e\xf5\x21\xa3\x92\x20\xcc\x53\x03\xf7\x34\xc3\xaa\x40\xce\x22\xa7\xba\x8d\x68\x0a\x9e\x94\x9e\x8b\x7c\x64\x9d\x94\x3f\x8d\x6b\x7c\xd1\x3f\x32\xca\xa1\xd2\x9c\xc6\x8d\xa1\x5b\x7f\x6b\x63\xa9\xdd\xf0\x8b\xb8\x44\x72\x73\x8c\x47\x05\x3e\x04\xc9\x11\x19\xcc\x70\x29\xb8\x78\x74\x10\xd0\x97\x95\x5a\x54\x74\x59\xaa\x2b\x86\xfa\x4f\x69\x55\x5b\x53\xc6\x81\x68\x8a\xed\x50\xca\x70\xdb\x2d\x2c\x1f\x03\xd3\x61\x79\xb3\x57\x36\xad\x2d\x2a\x9b\xfa\xda\x39\x3b\xda\x34\x2b\x62\x94\x56\x9b\x7d\x56\xc4\x9f\xb3\xb4\x0a\x12\xe1\x6d\x14\x17\x34\x90\x7d\x53\xa0\x07\x54\x94\xa8\x95\xd0\xdc\xab\xec\xd1\xa8\x5f\xf7\xbc\xba\xec\xc1\x19\xc7\xcd\xfc\x46\xa0\xcb\xb0\xaa\xe4\xd7\x4d\x7c\xa9\xc0\x45\xbb\x18\x25\x51\x89\xaa\x2e\x97\xd4\x6f\x78\x57\x04\xb2\xc4\xb7\x27\x6e\x2a\xed\x64\x6d\xae\xa5\x01\x9c\x81\xab\x10\x49\xdb\x2f\xbb\x08\xf7\xd2\x78\x36\xf2\xb8\x0d\x66\x7b\xb3\x98\x5a\x93\x28\x5f\x33\xea\x11\x4b\xdc\x5b\x85\x80\x99\x86\xee\xac\xea\x35\xce\xb3\x2a\x33\xc4\xaf\x63\xbc\xd5\x6c\x36\xf5\xfa\x48\x1f\xd5\x47\xf4\x6f\x5e\x22\x83\x8b\xae\x8c\x33\xb4\xbb\xa9\xec\xbd\x80\x05\x0a\xa2\x2c\x4d\xb0\x94\x88\xd0\x21\x2e\x8a\xac\x00\xf0\xd7\x2c\x42\xbf\x93\xcf\x06\x5d\x7d\xcb\x59\x1c\x21\x69\xb0\x23\x68\x33\xa2\x0c\xf5\xf2\x1f\x4b\xc4\xd1\x05\x41\x37\x1f\x56\x3f\xc6\x63\x70\xbd\x64\x7f\xae\xd5\x65\xc1\x66\x76\x69\xf2\xb3\x90\x09\x3e\xaf\x98\x2b\xad\x19\xfc\x3e\xbc\x0b\x57\xd8\xa5\x0b\xbb\xa6\x75\xfe\xb4\x6d\xae\xc1\x74\xc5\x7d\x38\x59\x97\xaa\xec\x90\xdd\x17\x41\xbe\x7f\x06\xb0\x15\x1e\x27\x9a\x48\xbf\x56\x81\xf8\x42\xc1\x53\x5c\xd2\xd7\x64\x93\x5a\x56\x45\xf6\x09\x35\x26\x0c\xfa\xd5\x88\x82\x72\x1f\x14\x45\xf0\xbc\x71\x81\x2b\x35\x42\x14\x1c\x2d\x04\xb1\x30\x51\x67\x4f\x75\x89\x3a\x1f\x07\xc1\x8d\x05\x9a\x0b\xc5\xf1\x06\xbe\x04\xf8\x77\x53\xa7\xbf\x18\x3b\xd0\x51\x77\x82\x2d\xc0\x32\x95\xaa\x38\xfc\x24\xb6\xa1\xc2\x9c\x94\xaa\xd0\x13\xef\x4a\x00\x57\x4b\xaf\x40\x07\x16\x4a\x94\x86\xfb\xac\xd8\x94\x55\x50\x54\x5b\xe9\x78\x70\x97\x04\xe5\xde\x38\xa0\xb2\x0c\xee\xd1\x3c\xdd\x4b\x9f\xa5\xc3\xbe\x48\x00\x4d\x7d\x02\x04\x2c\xef\x67\x09\x61\x90\x77\x7c\xf2\x14\xa7\xb8\xc4\xe0\xe3\xaa\xed\x47\xf5\x54\x58\x37\xe7\x32\xad\xac\x3d\xb5\x7a\x8f\x65\x11\x37\x0f\xce\x85\xd2\xe1\x53\xd6\x51\x07\x25\x31\x51\x08\x49\xb3\xc1\x4b\xee\x32\x2c\xb2\xa4\xb5\x4b\x18\x4f\xcc\x32\xc1\xef\x34\xb8\xe2\x49\x9c\x56\xb5\x27\xb6\x6a\x9b\xb4\xde\xad\x77\xc1\xb6\x6b\x12\x0a\x5c\xfc\x4f\x22\x83\x59\x8f\xbb\x6d\xe1\x7f\xf4\x60\x64\x17\x1c\xe2\xe4\x79\x73\xc8\xd2\x8c\xa8\xa2\x7c\xfa\x19\xde\xfc\xb3\x64\x3a\x00\xd9\x00\x87\x07\xa3\x34\xf6\x41\xb9\x8f\x79\x4a\x71\x06\xa4\x2e\xaa\xa6\xc9\xed\x0a\x6a\x44\xc2\x5d\x64\x47\x56\x27\xcc\x92\x4e\x54\xc1\xff\x1a\xba\x7c\xab\xc2\x62\x78\x7f\x24\x0e\xf7\xb5\xe5\x74\xb9\x5a\xd9\x6b\x53\x81\x81\x1d\xd8\x3b\xc7\xe7\x9b\xd0\x82\xa4\xeb\x2b\xef\xaa\xb8\x61\xd1\x9c\xfb\x38\x05\x3f\xed\x56\xbb\xd5\xce\xd4\xd6\xc6\x88\xa7\xc7\xc3\x5d\x6b\xcd\xf5\xa3\x55\xb0\x5a\x69\xe8\x66\x10\xfd\x0e\x45\x20\x8a\x1f\x04\x56\x41\x09\x0a\x2b\x14\x71\xe3\x8e\x87\xce\xb5\x57\x4e\x6f\xd3\xcc\xe0\x4d\xab\xc7\x59\xba\xe8\x2b\x4c\xf3\xf4\x4e\xae\xa1\xac\x36\x1d\xd1\x49\x38\x4e\x47\xef\x0c\xcc\xbe\x01\x12\x12\x5d\xdb\xf6\xbc\x45\xfd\x43\x4e\xed\x39\xb0\xc4\x41\x26\x3c\x18\x61\x76\x38\xa0\xb4\xaa\x99\x2d\x8a\x90\x83\x96\xca\x92\x65\x55\xc4\xe9\xfd\x42\xff\xca\xb0\x1b\xd7\x91\x28\xba\x0b\x1c\x25\x14\x91\xb7\xa3\xc8\x45\xde\x4a\x59\xf0\x21\x28\xe2\xe0\x2e\x41\xca\x06\xeb\x97\x6d\x93\x6b\xb4\x72\x43\x4f\x09\x29\x42\xbb\x11\x88\x65\x39\x2a\x82\x2a\x6b\x50\x43\x0e\xfe\xa7\x2c\xfa\x09\x3d\x3f\x66\x05\xe7\x71\xc6\x1c\x97\xbb\x25\x83\x2a\x3b\x8c\xe8\xeb\x01\x55\x81\xb2\x9f\x55\x70\x3f\x02\xf5\xa0\xaa\x8a\xf8\xee\x58\xa9\x69\xf5\x9f\xc7\x20\x89\x77\x71\x4b\xf4\xf5\x2e\x0c\x3c\x5f\x09\xa9\x4e\x89\x39\x82\xaa\x77\xc7\x38\xa9\xe2\xb4\x7f\x78\x9c\x9e\x36\x79\xc6\xa6\x19\x5c\xa8\x53\x42\xab\xd8\xf1\x13\xcf\x32\x2d\xdb\xd2\x4f\xbc\x43\x50\x85\xfb\x38\xbd\xbf\x2b\x82\xf0\x13\xaa\x68\xdc\x51\x84\xc2\x8c\xa5\x08\x3d\xa6\x11\x2a\x30\xfc\x6d\xbb\xd5\xe4\x97\x4d\xe5\xa6\x49\xea\x99\x3c\x47\xc6\xd4\xe1\x27\xce\xb4\xf2\x2d\x6b\xa3\x00\xff\x1b\xdf\x9e\x38\xc5\x02\x27\x08\xef\xc2\xf1\xb5\x65\x16\x20\x66\xbd\xb1\x95\xbb\xf3\xd2\x0f\x97\x77\x2b\xeb\x05\xe2\x8a\xf2\x09\x0e\xb5\xfd\xd5\x0a\x08\xd6\x86\x64\x27\x1a\xc5\xa9\x1f\x07\x08\xb0\x4b\xd7\xf2\xec\x11\xd5\x4b\x9e\x51\x15\xf1\xfd\x7d\xe3\xd1\x6f\xd3\x88\x33\xee\x20\xb1\x09\x00\x15\xce\x84\x1a\xb5\x6f\xa3\x5a\xfd\x4d\xd3\xdc\xf2\x39\x39\xb8\xa5\x5d\x77\x44\x60\x0a\x98\xea\xe3\x51\x6b\xef\x7f\xc5\x09\x9a\xed\x29\xb3\x8b\x53\x64\x9a\x80\x24\x69\x83\xcb\x35\x7a\x9b\x17\x48\xe5\x96\x89\x55\x05\xe2\xb2\x1d\x66\xe9\x2e\x2e\xe8\xc5\x50\x90\x7d\x89\xd3\x7b\xf5\xe5\x3f\x2f\xca\x6a\x20\x97\xb2\xe6\x75\xaf\x34\xea\x26\xb0\x93\x02\x1f\xb8\x79\xa8\x6c\x43\xf0\xa0\xf9\x3a\x17\x46\x35\x8e\xa5\xb7\x83\xc4\xd3\xb9\xbf\x9b\xfa\x24\x7c\x7d\xbd\xe6\x5c\xd8\x0c\xe6\x3c\x2f\x0d\xb9\x6e\x5c\x24\x5b\x29\x3a\xb0\x9b\x19\x35\xb1\xbc\x24\xa6\x11\x6f\x43\x04\x8d\x9a\x0b\x9a\x55\x55\x86\xf5\x27\x23\x8a\x83\x24\xbb\x37\x32\xee\x8c\x98\x4f\xd5\x4c\x2e\x50\x73\xc4\xf4\xcd\xec\x99\x3e\xe1\x5c\x73\x71\xa5\x8c\xf2\x89\x0f\xb5\xa4\x19\x87\xb5\x65\xa5\xe0\xd5\xa6\x0a\xe9\x54\x37\x49\x8b\x22\x4c\xd4\x59\x3a\x81\x6b\xf3\x71\xa5\x66\x9d\x3c\x94\xf6\xfa\xe3\x6d\x5f\xea\x64\x41\x0b\x5b\xdf\x48\x35\xa3\xf8\xa1\x13\xe4\xc3\x6c\xa7\x36\xdb\x35\x75\xad\xa7\xa2\xa3\x66\x7f\x39\x65\x42\x4e\x9d\x1f\x80\x1a\xb9\x6e\x1a\xd0\x76\xb7\xac\xa9\xc1\x02\xa6\x04\xa2\x72\x95\xc4\xfc\x61\x64\xc4\x0e\x59\x14\x74\xcf\xdc\xa9\x05\x32\x0d\x0e\xe8\x1d\x29\xf0\x71\xd1\x79\x22\xa7\x11\x13\xce\xab\x34\x05\xf9\x2b\x11\x18\xea\x4d\x76\x7b\xcf\x34\xdb\x75\x67\x17\x3f\xa1\x48\xc8\x6d\xad\x10\xd4\x5c\x92\x76\x91\x21\xd4\xde\x26\x66\xe7\xd2\xb8\x3e\x48\x7f\x8d\xfb\x3d\xd5\x1d\x23\x5e\x6b\x44\xb4\x36\x46\x4b\xcf\x54\xe4\xff\xee\x54\xb9\xcb\xa2\xe7\x13\x7f\xf1\x2d\x77\xcb\x9d\x54\x18\xd6\x2c\x85\x85\xb3\x98\xa9\x7d\x10\x37\xce\x7e\xb3\xf2\x94\x79\xc2\xb9\x7c\x12\xea\x89\xf0\x46\x4a\xe0\xea\x75\x03\x17\x3c\xed\x2c\xe2\xaf\xea\x35\x9e\x29\xd2\x5c\xaf\x57\xe6\xc3\x5e\x0a\xe5\x74\xb4\xb0\xe8\x1c\x5e\xf4\x4e\xd7\xc1\xd4\xb5\x5a\x2a\x37\x10\x34\x89\xd4\xd5\xc5\x01\x4d\xc7\x8a\x67\xe7\x7f\x84\x49\x56\x76\xef\x80\xd0\x3b\x2c\xe9\x82\x70\xbb\xd6\x3b\x5e\x7d\x50\xe5\x23\x60\x9a\xa2\xc3\x39\x06\x77\xc8\xc8\xb8\x54\xb8\xf4\x9a\x58\xb3\xd2\xac\x8a\x43\x04\xe3\x74\x97\x2d\xea\x2f\x79\x96\xc4\xe1\xb3\x71\x08\xd2\xe0\x1e\xe1\xdd\x75\xf3\x86\x9d\xa9\x77\xe3\x93\xb7\x1d\x2b\x64\x97\xd5\x9a\xf3\x73\x74\x10\x95\x2a\xea\x85\x87\x0e\xe0\x2d\x70\x6c\x92\xd5\xa9\xb3\xf4\xf3\x78\xb6\x29\x02\x74\xf8\x76\x4a\x30\xbc\x7b\x02\xc8\x28\x77\xfb\xcc\x58\x4a\x1d\x5d\xcb\xac\xa8\x88\x3c\x28\xb2\x04\x28\xae\xf3\x11\x0b\x50\x91\x29\xfb\x86\x74\x61\x28\x6f\x9c\xa9\x57\xf9\xe6\xfc\x60\x39\x14\x1b\xd2\x1b\xcc\x31\x14\xa0\x31\x26\xf4\x67\x9c\x36\x30\x80\xe5\x6d\x59\x9b\x84\x06\xca\xd1\x3b\x73\xfa\xfa\xd4\x07\xaa\x2d\xa4\x83\x23\x74\xbf\x07\x94\x58\x8e\x5e\xd2\xa3\x8e\x69\x9a\x3e\x3c\x57\x22\xcc\x97\xa2\xda\x75\xa8\x2a\x45\x76\x0d\x50\x83\xca\xdd\xfe\xce\x68\xcb\x88\x58\x88\x6b\x06\xf3\x4e\xff\x27\xe0\x66\xe1\xec\x73\x44\xa7\xc1\x31\xe9\x45\x52\xfd\x5e\x68\x79\x52\x6c\xd3\x15\xc5\x5e\xf7\x7d\x1e\x54\x7b\xe5\x86\xaf\xb9\x9b\xc7\xd2\xdc\xd9\x63\x29\xef\xec\x91\x6f\x0a\x4a\xe2\x14\x05\x45\xdf\x5d\x42\xac\x84\xb4\x6e\x8c\x4a\x50\xfc\x53\x10\x45\x05\x2a\x4b\x54\x82\x3a\x60\x75\x31\xae\xe2\x01\x55\x81\x11\x05\x55\x30\xb5\xe2\x31\x2f\xab\x02\x05\x87\xa9\x2d\x92\xd2\x10\x3d\xe5\x59\x89\x22\x4c\xf4\xb2\x5b\x35\xcd\xa2\x11\x88\x4a\x99\x58\xba\xfc\xa2\x1b\xd2\xe6\xba\x24\x7a\x94\xac\xbc\x49\x89\xbd\xea\x1e\x98\x33\xeb\x90\x78\x5a\xbd\x7d\x40\x61\x95\x15\x06\xda\xed\x50\x48\x4c\x1d\x46\x19\x06\x09\x1e\x5e\x5a\x90\xee\xea\x1f\x50\x07\xc7\x3f\xe2\xe8\xcd\xbb\x5f\x36\xbf\x28\x72\xdd\x11\xf4\x1b\x35\xc0\x3b\x77\x9d\x01\xc1\xfc\xb5\x43\x59\x77\xd2\x92\x20\x47\xe3\xf2\x26\x6b\x55\xc7\x75\xe1\xa5\xe4\x9d\xe8\x3f\x50\x9f\xdf\xeb\x13\x9c\x69\xb3\x99\xf5\xa5\x2e\xd3\xaa\xb6\xaa\xb0\xcf\x8e\x0e\x8f\xee\x10\xda\xd9\x5b\x36\x8b\x0d\xf4\x80\xd2\xaa\x64\xca\xe2\xec\x71\x1c\x95\x9a\xb4\x77\x34\xc7\xe6\x2d\x1d\x1a\x53\x01\xce\x49\xea\x65\x90\x24\x7d\xa3\x71\xdb\x5e\x9b\xd4\x8f\xa4\xb2\x84\x8c\xc1\xed\x1b\x7a\x44\xd2\xe6\xd5\x3b\xe6\x39\x2a\xc2\xa0\x44\xad\x21\x9c\x3b\xcd\xb7\xeb\x58\x48\x76\xc5\x82\x6b\xf6\xad\x34\x5f\x38\x37\x5e\xed\x3c\x00\x6d\x2e\x80\x88\x7c\x69\xe4\x40\x9f\x66\x24\xe6\x52\x44\x87\x71\x19\x1b\x95\xe5\xd4\xe9\x19\xd1\x41\x26\x36\x17\x33\x43\xd3\x7f\x74\xf3\x61\xf5\x26\x04\xb9\xea\xde\x46\xba\x42\xb2\xb3\x0f\xed\x5b\x1b\x18\xc1\x81\x3c\xb5\x01\xaf\xad\x2a\x97\x8e\x71\x35\x35\x8e\xe2\xfa\x05\x82\xb8\xef\x63\xf1\x57\x5f\x23\x5c\xb3\x84\xd5\x6b\x1a\x1d\x4e\xb6\xde\x4a\x79\x96\xe9\x00\x37\x04\xcb\x7d\x56\x54\x37\x20\x3a\x2b\x1e\x7c\x56\x1e\x66\xed\x3d\x6b\x3d\xf7\xe4\x30\x71\xdb\xbd\x0d\xb3\xbf\xc3\x90\x9c\xb6\x1a\x14\x7e\x59\x7b\xf7\x35\xed\x34\x87\x53\xbf\xfd\x32\x0a\xce\x7f\x1e\x51\xf1\x9c\x07\x05\xd6\x8a\x64\x9c\x1b\x58\xff\xbb\x02\x56\x18\x17\x61\x52\xbb\xb6\x35\x4a\x85\xd2\x03\x8f\x9c\x62\x4a\xf5\x47\x24\x7e\xfe\xe2\x77\xc3\x75\x3b\x59\x3e\x28\xce\x94\x2e\xbf\x6c\xf3\xdb\x38\x60\xfd\xcc\x84\x93\x63\xff\x3c\x56\x70\x5e\x34\xe7\xb7\x62\x68\x3a\xe7\xb6\x34\x11\x4c\xef\xfe\xab\x64\x5e\xac\xb5\x7f\xaf\x06\xc3\xa1\x52\x0d\x8a\x42\xc1\x5e\x1c\x2f\x15\x83\x52\x87\xef\x69\x22\x50\xd8\x5a\xa1\x08\x40\x09\xb3\xe4\x78\x48\xe5\xd8\x13\xf6\x54\x64\xcc\x28\x2e\x99\xff\x88\x86\x37\x03\x22\x34\xc4\x58\xfc\x21\x19\x35\xb0\xe7\x55\xbe\x17\x55\xdf\x28\x39\x35\xdb\xdb\xf6\x2c\xf4\xba\x4b\x9f\x94\xfb\x50\xb3\xbb\x97\x45\x3f\x95\xfa\x18\xe1\x79\x21\x06\xe3\x5b\xa8\x3a\x89\x93\xc1\x2f\xca\xeb\x84\x7a\x81\xd6\x33\xed\x98\x08\x47\xeb\x52\x06\xce\x91\x20\x40\x12\x0b\x21\x44\xde\x10\xcd\xd8\xf2\x74\x05\x5a\x89\x0b\x9f\x32\x11\xa0\xa3\x49\xff\x3c\xbc\x7a\xb6\xf9\x29\x56\x23\x6c\x3e\x81\x1c\x78\x30\x38\x5f\x66\x1e\xf2\x0d\xe6\x66\x94\xa3\x49\x07\x95\x0b\x21\x8f\x85\x9c\x65\x65\x65\xfe\x0c\x56\x6d\x90\x3c\x3d\xc1\x92\x73\x97\xa8\xcf\x54\xc6\x98\xca\xb2\xab\x91\x41\x65\x3e\x1b\x81\x0e\x48\xe2\x4e\x00\x68\x3d\x07\x95\xd7\x78\x35\x13\x73\xf1\x8b\x48\x24\xb2\x1f\x11\x62\x1a\x68\x76\xc7\x73\xc4\x95\xc2\x3d\xaa\x2f\x43\x95\xfe\x86\x06\x31\xfb\x94\x5e\x61\xe4\x14\x64\x21\x59\x13\xdd\x31\xda\xed\x0e\x9f\x29\x5f\x3d\xf9\xf7\xeb\xfb\xae\x3d\x76\x64\x24\xdf\x49\xda\xa6\xec\xb1\xf8\x3c\x39\x03\x5c\x14\xa7\x09\xaa\x7a\xf3\x6b\xd1\x12\x27\x15\x68\xf3\xe7\xde\xeb\x01\x64\x10\xca\x8c\x11\xe4\x2c\x8e\xe6\x13\x72\xec\x9f\x49\x3a\x21\xf0\x16\x58\x3f\x03\x03\x38\xf9\x53\xef\x79\x0f\x03\x4b\xe9\x42\x40\x60\x08\x06\xad\x4c\x12\xad\xef\x2d\xfe\x12\x3a\xb8\x2a\xd0\xe1\x65\x6f\x0b\xcf\x1c\xf2\xcc\x69\x92\xbb\xa3\x03\xff\xba\x68\xee\x79\x97\x8f\xd4\xfb\x42\x8f\x9a\x42\x6c\xef\x5a\xbd\xe6\xc2\x7d\x6e\xb4\xd1\x6e\xa2\x0f\xbe\xed\xbd\x90\xaa\x49\x7c\x73\x4b\x73\x14\x40\x3c\x11\x8d\x08\x25\xa8\x42\x0b\xe9\x1d\x3d\xe4\xa3\x9f\xe9\x1e\x0e\x86\x59\xfe\x6c\xdc\x55\xe9\x0d\xfd\xca\x55\xa6\x4f\xfe\x08\x8a\x38\x30\xf6\x41\x99\x67\xf9\x31\x7f\x77\x40\xe9\xf1\xe3\xcd\x22\xa0\x05\xc3\x02\x05\x15\x5a\xb0\x86\x6b\x50\x0b\xbe\xb1\xf2\x78\x77\x88\xab\x8f\xc2\xb3\x02\x95\xa8\xfa\x28\xd9\x59\x11\x71\x7f\xc4\x34\x11\xaf\x9d\xf4\xd5\x36\x91\x81\x8d\xe2\xb8\xbd\x9c\x72\xcf\xa7\x3c\x8f\xe9\xbd\x08\xb3\xef\x26\x66\x36\x8e\x25\xc2\x5b\xb1\x2a\x2b\xe4\x6e\x57\xd9\x27\x94\xb6\x5f\x49\x62\x73\xc2\x65\xb5\x65\x99\x4f\x5c\x74\xab\x3c\xa5\x55\x37\xd3\xb0\x18\xd3\x29\x6a\x57\xae\x29\x30\xa8\x7d\x7c\x1f\xd0\x2b\x24\xb3\xb4\xc4\xf8\xcc\x07\x44\x3c\x92\x22\x54\x05\x71\x32\x17\x92\x30\x10\xde\x38\xd6\x18\xda\xda\x0b\x5a\x97\x3a\xad\x74\x44\x0c\x53\x72\xa6\x12\xee\xb2\x5d\xba\x0d\x23\x93\x82\xde\xb3\x78\x8b\x37\xcc\xe9\xbd\xe8\x19\x02\x58\x09\xf4\x54\x29\xdf\x0f\xc9\x8d\xfe\x4a\x34\x92\x30\xf8\xa3\x40\xc9\x9b\x77\x7b\x94\xe4\x32\xaf\xc5\x64\x11\x8d\x33\x99\xdf\xaa\x08\x46\xa8\xac\xe2\x94\x3a\x39\xa2\xc3\xf0\x11\x08\x2c\x51\x59\x52\x8e\x88\xf8\x58\x72\x5c\xb9\x15\x92\xc2\x65\x18\xf0\x53\x9c\x46\x46\x5e\x64\x4f\xcf\xf4\xb9\x02\x5f\x41\x2e\x76\x89\x35\x5f\x6c\xd6\x10\x6a\x8f\x53\x19\xe7\x2a\x02\x75\x09\x76\xa1\x00\xd9\x30\x77\x8c\xb3\xfc\x08\xa3\x83\x7e\x74\xe5\x77\x83\x23\xdb\x21\xfa\xd7\x19\x2c\x15\xf1\xe5\x57\xd3\x08\x8f\x89\xab\x26\xfa\xa9\x63\x9e\x6d\xae\xbf\x9e\x99\x8e\x88\xf3\x23\x32\xcd\x87\xfd\x17\xdc\xfa\x9f\x9d\x7b\x97\x79\xa1\x71\xaa\x2d\xc9\xf5\x80\x09\xdf\x9f\xaa\x9e\xe5\xa8\xef\x5e\x56\x2e\x31\x20\x4d\x56\x70\xfb\x46\x95\x27\x78\x30\x59\x94\xb4\x54\x47\x31\x5d\xa4\x3a\x91\x98\x0d\x16\x0b\x09\x1d\xd2\xf8\xa9\xeb\x5f\x65\xbb\x0f\x8f\xe0\x6f\xe0\xb5\x65\xfb\x26\xf8\x1b\xb0\x4c\xf3\xe6\x46\xf2\xe4\xd3\x96\x53\x25\x0b\x32\x85\xfb\xd7\x25\x2f\x41\x53\x9d\xde\x58\x91\x1c\x01\x37\xc3\x03\x1a\xd1\x1d\xdb\xed\x40\x27\xb7\x3c\xbc\x90\x7c\x1b\x75\x5e\x0f\xd1\xd6\xf5\x05\x2e\x0e\x18\x9b\x75\x45\xcf\xf8\x45\xf6\xa8\x48\xb6\xf2\xc2\x77\xa4\x4d\x5b\xd2\xa6\xe6\x57\xbe\xe7\xaf\xb3\x6f\xf2\xbb\x8b\x64\x34\x5b\xb7\x3d\x75\x28\x08\x79\x5a\x1f\x21\xf4\xb4\x22\x26\x91\x97\x46\xc6\x54\xbb\x4b\x37\x79\xbd\xb0\x9e\xbb\x18\x2a\x40\xae\xd6\xef\x38\x57\xe3\x5a\x54\x3c\x62\xc5\x29\x25\xc6\xbe\xf2\x06\xfc\x11\x26\x41\x59\xbe\x79\x47\x1f\x18\x52\xd2\x07\xad\xb7\xbe\x88\x03\x5e\x01\x98\xa2\x5e\x3f\xfa\xf4\x70\x53\xcf\xc5\xd6\x56\x40\xf6\x73\xb5\xce\x26\xa9\xe7\x27\x61\x3f\xe8\x73\x01\xc5\x1d\x07\xfc\x5a\xe2\xe7\x9a\x74\x4d\xdd\xe7\x8a\xf8\x08\x35\x48\x92\x78\x4a\xff\x8a\x28\x7f\xdd\x00\x0c\xda\x6c\x9b\xb4\xaa\xa7\xa8\x6c\x75\x54\x5e\x8f\xc0\x42\x45\x1a\x58\x80\xdf\xa0\xa8\xcc\x78\x2c\xea\x84\xbf\xa6\xfc\xa7\x63\x91\x94\xff\x51\xa2\xe2\x21\x0e\x91\xc6\xce\xae\x28\xa4\x0f\x5e\xc2\x03\xe3\xe4\x4f\x75\x84\x8b\xea\x64\xb0\x37\xf2\x63\x9a\x3e\xc0\xa5\x45\xed\x1c\xb9\xa0\x34\x92\xac\xda\xf8\x89\x6c\xce\x26\x6f\x51\x1a\xf5\x36\x4c\x74\x17\x78\x4c\xa9\x76\xfd\x0c\xf6\xb6\x7c\x2b\xc7\x12\x6f\xb1\x07\x5d\x6f\x18\x09\x1b\x4f\x1f\x3c\x05\x41\x45\xd4\x09\xb5\xc5\x96\x35\x48\xb8\x4b\x70\x35\x33\x5a\x97\x5a\x2d\x52\xfc\x40\x8f\x55\xcf\x98\x22\x79\xe2\xce\xff\x38\xc9\x30\x4a\xc1\xa3\xaf\x8c\x20\x49\xb2\x47\x06\x4e\x65\x3e\x22\xd6\x07\xb2\xc8\x88\x90\x3f\x3d\x48\x6b\x35\xee\xfb\xf8\x58\x28\xc5\x48\x74\x20\xf2\x8a\xb0\x6a\x9e\x28\xe8\x57\x45\x20\x80\x71\x29\x38\x44\x6b\x2e\x7c\x66\x39\x3b\x84\x1c\xa3\x18\xb5\x4e\xe0\x9b\x23\xe4\x0c\x6c\x73\x1b\x59\x1e\x89\x74\x6a\x70\xa6\xbe\xd8\xaa\x6d\xb6\xb4\x3b\x5e\x8c\xd8\x99\x4b\x55\x14\x27\x56\x18\x57\xd7\x16\x54\x0b\x59\xe4\x88\xf4\x0d\x42\x95\x7a\xd5\x69\x89\x1b\xb0\xaf\x7e\xa6\xaa\x70\x87\x9f\xd3\xa7\xb1\xf7\xdc\x98\xe7\x40\x57\xad\x0b\x75\xc4\x19\x09\x65\xfa\x05\x2f\x44\x7f\x94\x55\x50\xa1\x8f\xbf\x7c\x5c\xa8\x1e\xca\x01\x51\xaa\x32\x6d\x5a\x31\xf9\xa0\x82\xda\xd5\xc8\x42\x27\x07\x63\x70\xb3\xe7\x05\x1e\xd0\x9f\xed\xc5\x39\x44\x2a\xbf\xb6\x6f\x1a\x6f\x35\xcf\x77\x76\x3b\x4d\xa1\x1e\xfb\x32\xad\x27\x2e\x61\xe4\xd4\x62\x98\xd7\x59\xa8\x82\xa0\x33\xd0\x33\x07\x5d\x5d\x2a\x70\xba\x37\x19\x8e\x3a\x88\xfa\xff\x03\x00\x00\xff\xff\x55\x74\xdc\x84\x0b\x8a\x02\x00") +var _web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x6f\x5b\x39\xb2\x28\x8a\x7f\x15\x22\x8d\x8d\x33\x3d\xdb\xac\xcd\x2a\xbe\x9d\xdd\xc1\xaf\xc7\x7b\x1a\xfe\x01\xce\xbd\xc0\x9d\xb3\xfd\x47\x0f\x1a\x07\xcb\xd2\xb2\xa5\xd3\xcb\x92\x8f\x24\x2b\x89\x1b\xb9\x9f\xfd\xa2\x8a\x4b\xb2\xde\x92\x1f\xe9\xc4\x19\x23\xf1\xd2\x5a\x7c\xb3\x58\xac\x07\x59\x2c\xfe\xff\x3a\xbd\x6a\x34\xae\x27\xea\xcd\x7f\xff\xcf\x5f\x74\x7a\xf3\xf6\x87\x66\x78\xd5\x1f\xe8\xc9\xf0\xea\xaa\xa9\xff\xbd\xdb\x9f\xaa\xcb\xe1\x70\x52\x8f\xd4\xc5\xed\x64\x32\x1c\x1c\x41\x7d\x7d\x33\xf9\xa4\xc7\x93\x6a\x52\xbf\xbb\x6d\xde\x35\xfd\x77\x7f\xdd\x14\x78\x5c\x75\x26\xfd\x69\xbd\x29\xaa\xa9\x2e\xea\xe6\xdd\xf6\xf2\x16\xe3\xe7\xc5\x4c\x3e\xdd\xd4\xba\xdb\xaf\x9a\xe1\xd5\xd2\xc7\x2c\xc1\x3f\x47\xc3\xa6\xfe\xa9\x84\xfd\xf6\xae\xdb\x9f\xf2\x9f\xea\x76\x55\xb5\x23\x6a\x77\xe6\x9b\xad\x79\x6f\xee\xb3\x56\x47\xd7\x55\x7f\x50\x2a\x9a\xbf\xcd\x22\x25\xe0\x66\x16\x73\x9f\xeb\x8f\x49\xfd\x71\xa2\xbb\x75\x67\x38\xaa\x26\xfd\xe1\xe0\x78\x30\x1c\xd4\x9f\x2f\xfb\x75\xd3\x1d\xd7\x93\xa3\xde\xe8\x8f\x8b\xe1\xa8\x5b\x8f\x4a\xf8\xe6\x36\x4c\xaa\x8b\xa6\x56\x9d\xea\x86\x0b\xd8\xd2\xce\x92\x66\xd2\xab\xab\xae\x9a\xf4\x4a\x2b\x96\xf3\x2d\x04\xcd\x93\xb5\x9f\xdd\xd9\x4b\xef\x88\xdf\x7b\xa5\xd1\x55\xd3\xbf\x1a\x1c\x37\xf5\xe5\xe4\x73\x35\x9a\xf4\x3b\x4d\x7d\x54\x8d\xfb\xdd\xfa\xe8\xb2\x7f\x75\x3b\xaa\x8f\x0a\xb6\x1c\x71\x59\xfc\x73\x35\x1a\xde\xde\x1c\xf5\x46\x47\xe3\xba\xc3\x15\xfe\xd1\xed\x8f\x6f\x9a\xea\xd3\xf1\x45\x33\xec\xfc\xfe\x19\xea\xeb\x8b\x7a\xa4\x2f\xaa\x71\xbf\xa3\xbb\xa3\xe1\x4d\x77\xf8\x61\xa0\x27\xa3\xfe\xd5\x55\x3d\xfa\x67\x35\xea\x57\xba\xfe\x78\x53\x0d\xba\x75\xf7\xa7\xc9\xe8\xb6\xfe\x4d\xb5\x39\x6e\x86\x1f\xea\x91\x1e\xd7\x4d\xdd\x99\x08\xf2\xdc\x8e\x75\xbf\x33\x1c\x94\x36\xc3\x87\xfe\xa4\xa7\xbb\xf5\xa4\xea\x37\x63\x35\xe9\x1e\x0f\x07\xcd\x27\xdd\xe9\xf5\x9b\xae\xc0\x46\x30\xec\xf8\xf8\xa2\xbe\x1c\x8e\xea\x3f\xf4\x87\xfa\xe2\xf7\xfe\x44\x4f\x46\xd5\x60\x7c\x39\x1c\x5d\x1f\x8f\x86\x8c\x8e\x7f\xc1\x64\xba\xf5\xd5\x8f\x6f\xb7\x45\x7c\x96\x4e\xfc\x9f\xdb\xe1\xa4\x3e\xba\x18\x76\x3f\x1d\x75\xbb\x47\xdd\xe6\xa8\x3b\x39\x9a\x0f\x65\x0b\x95\x1e\x1e\xf5\xe8\xa8\x67\x8f\x7a\xee\xa8\xe7\x8f\x7a\x81\x41\xd2\x9b\x5c\x37\x47\xfd\xcb\x51\x75\x5d\x1f\x35\xf5\x55\x3d\xe8\x1e\x35\xfd\xa3\x61\x73\x74\x73\x74\x33\xaa\x8f\x18\xdc\xd5\xa8\xae\x8e\x6e\x9b\x3f\xae\xab\xd1\x55\x7f\x70\x6c\xde\xde\x54\xdd\x6e\x7f\x70\x75\x6c\x3e\xaf\x15\xf9\xc7\xe5\x70\x30\xd1\xe3\xfe\x5d\x7d\x8c\xc6\xfc\xdb\x5b\xf9\xfc\x50\xf7\xaf\x7a\x93\x63\x67\x24\xc3\x78\x32\x1a\x0e\xae\xfe\x58\x8c\x89\xc6\x7c\xbe\x6d\xfe\x68\xfa\x63\x86\xe3\xa7\xa6\x2e\x38\x27\x60\x6c\xb1\x50\x77\x86\x4d\x53\xdd\x8c\xeb\xe3\xd9\xcb\xdb\x36\x62\x7c\x53\x75\x4a\x6b\xd6\x70\xe6\x8f\xfb\x96\x56\xb7\xdd\xfe\xf0\x88\xc7\xad\x7b\xd4\xbf\xbe\x3a\x1a\x5e\xfc\xef\xba\x33\x39\x9a\xf6\xbb\xf5\xf0\x8f\x5e\x69\x46\x75\x3b\x19\xbe\xbd\xae\x3e\xea\x0f\xfd\xee\xa4\x27\x1d\xf8\x0c\x9d\xe1\xe0\xb2\x3f\xba\x96\x29\xa2\xab\xa6\x1e\x4d\x36\x52\x1c\x25\xc3\x79\x04\xd7\xf5\xe0\x56\xdf\x54\x83\xba\x51\x65\x3a\x70\x40\x7f\x52\x5f\xff\x76\x04\xd7\xc3\x51\xad\x6f\x86\x37\xc3\x69\x3d\xd2\x1c\xfe\xee\x9f\x4c\x44\x7e\xea\xf4\xea\xce\xef\x17\xc3\x8f\xbf\xfd\xbb\x14\x22\x04\x6f\x2d\xf3\xb0\xdf\xed\xb4\xb8\x36\x27\x83\x8f\x2d\x6b\x96\xaf\x2d\xae\xd0\xba\xbf\xae\x86\x3f\xa4\x44\xc1\xf5\x45\x50\xa9\x96\x3e\xd6\x4d\x3d\xa9\x8f\xaa\xf2\xd5\x19\xd5\x15\xa3\xa9\x34\x1f\x3a\xc3\x9b\x4f\xfa\x62\x32\x98\x7d\x97\x24\xd5\xa0\x53\x37\x6d\x50\x69\xc0\xa8\x1e\xd7\x93\xdf\x96\x82\xc6\xb7\x17\xd7\xfd\xc9\x6f\xed\x0c\x57\x50\xc9\xbc\x1e\xab\xc5\x34\xe5\xfd\xb7\xe3\xc1\x70\xf2\x97\x79\x5d\x3f\x0a\xc2\xc3\xa4\xbe\xbe\x69\xaa\x49\xad\xeb\xd1\x68\x38\x52\x3c\x1d\xab\x23\xe9\x9e\x1a\xdf\x54\x85\x22\xcd\x09\x18\x4f\xba\x4d\x25\x2f\xf5\xf0\xa0\x1c\xd2\x96\x42\x51\x7a\xd5\xf8\x66\x78\x73\x7b\x23\x40\xfc\xed\xc7\x96\x64\xf4\xaa\xb1\x9e\xf5\x65\x32\x7a\x37\xeb\xd7\x03\x46\x62\x13\xe9\x79\x4c\x41\xf7\x04\x69\x78\xdb\xe9\xe9\x4e\xd5\x34\xc3\xdb\x89\xcc\xcb\xb7\xb3\xa8\xdb\xf1\x1c\x57\xda\x88\xeb\xe1\xdd\xa6\xd0\xf1\x7a\xe0\x6a\xc0\xe7\x02\xcd\x51\x3d\xad\xab\x46\xf5\x07\x37\xb7\x93\x63\x69\x66\xdd\xfd\x7f\xeb\xeb\x2d\xad\xe9\xd6\x97\xd5\x6d\x33\xd9\xd8\x20\xa6\x5c\xeb\x0d\x6a\x43\xc7\xeb\x81\xab\x01\x9f\xab\x3f\x3a\xc3\x66\x38\x3a\xfe\x01\x7d\xb0\x97\x97\x9f\x05\x31\x0a\xf1\x6a\x79\x51\x89\xef\x0f\x7a\xf5\xa8\x3f\xf9\xcc\xc4\x77\x9e\xe5\x92\x90\xdc\x67\xc6\xb5\x3f\x2e\xaa\xce\xef\xcc\x81\x06\x5d\xdd\xc6\x5e\x5e\x5e\xbe\x5d\xa0\x93\xe1\xe6\xe3\x5b\x61\x6b\xa3\x7a\xd0\xad\x47\x4c\xaf\x86\x37\x93\xfe\x75\xff\xae\x3e\xab\xaf\xfa\x17\xfd\xa6\x3f\xf9\x34\xef\xa3\xa4\xe4\x8c\xba\xea\xfe\xef\xdb\xf1\xa4\xd0\x59\xe9\xe8\xb6\xa8\xf1\x96\x98\x1d\x45\x0d\xc7\x1f\x75\x69\xe2\xf5\x70\x38\xe9\x71\x9b\xae\x46\xd5\xa7\x71\xa7\x6a\xee\xc7\x7f\x25\x41\x35\x98\xf4\xab\xa6\x5f\x8d\xeb\xee\x5b\x26\x23\x97\xcd\xf0\x83\xfe\x78\xdc\xeb\x77\xbb\xf5\xe0\x3e\xe4\xd3\xf1\xb8\x33\x1a\x36\xcd\xbc\x98\x8b\xe1\x47\x6e\x05\x17\xd1\x92\xf4\x8b\xe1\xc7\xb7\x9b\x43\xaf\xfb\x83\x96\x3a\x5b\x63\x6e\x3e\x7e\x86\xce\xb5\x1e\xf3\x64\xea\xf5\xe1\x64\xd8\xad\xdf\xf7\x79\x42\x1f\x75\x86\xdd\x9a\xf9\xd7\x1f\xdb\x9a\xca\x94\x5e\xc2\x2e\xab\xeb\x7e\xf3\xe9\xf8\x7a\x38\x18\x32\x23\xa9\x3f\xb3\xdc\xb3\x36\x62\xe1\x32\x86\x44\x6f\x5b\x3e\x81\x37\x1f\xdf\xb6\xcc\x10\xc1\x8f\xea\x6b\x65\x3e\x97\x19\xbe\x9e\x55\xd8\xf6\x4d\x35\xaa\x07\x05\x43\x5a\x32\x76\x24\x18\x7e\x54\xf0\x6d\xce\x65\xff\x58\x6c\xd2\xdf\x9a\xfe\xe0\xf7\xf7\x55\xe7\x1f\x9f\xc6\x93\xfa\xfa\x97\xe1\x60\x72\xa4\xab\x9b\x9b\xa6\xd6\x63\x09\x39\x7a\xf3\x8f\xfa\x6a\x58\xab\xff\xfe\xff\xbf\x39\xfa\x7f\x86\x17\xc3\xc9\xf0\xe8\xff\xfe\xf8\xe9\xaa\x1e\x1c\xfd\xf7\xc5\xed\x60\x72\x7b\x74\x52\x0d\xb8\xd4\xa6\x39\x7a\xf3\x4b\x7f\x54\xa9\x7f\x54\x83\xf1\x9b\xa3\x37\xff\x35\x1a\xf6\xbb\xb3\x8f\xd3\xba\x99\xd6\x93\x7e\xa7\x52\xff\x57\x7d\x5b\xbf\x39\x9a\x7f\x1f\xfd\x3c\xea\x57\xcd\xd1\xb8\x1a\x8c\xf5\xb8\x1e\xf5\x2f\x3f\x2f\xf2\xed\xc2\xa4\x67\x98\x7f\x0f\xed\x2d\xa8\xc3\xe0\xfe\xbc\x38\x1c\x73\x64\x28\xa8\xc0\x69\x64\x66\x2f\xe2\x8d\x8c\xd1\x87\x5e\x7f\x52\x0b\x8b\xaf\x8f\x6f\x46\xf5\xdb\x0f\xc3\x51\x57\x7f\x18\x55\x37\xc7\x83\xe1\xe8\xba\x6a\x3e\xff\xf5\xe8\xf8\xb8\xba\x64\x69\x6f\x4d\x94\x5a\xc0\xa0\xb6\xa5\x6f\xd7\x83\xe6\x02\xef\x1f\x0b\x4c\xbf\x2a\xc3\xb3\x42\x2c\x17\x03\x47\x55\xb7\x3f\xfc\xed\x8f\xce\xed\x68\x3c\x1c\x1d\xdf\x0c\xfb\x83\x49\x3d\xfa\x7c\x60\xae\x69\xcd\x42\x6b\xd5\xb4\x72\xec\x45\x35\xae\x9b\x3e\xcb\x3b\x42\x55\x56\x62\x27\xc3\x9b\xcf\x3b\x71\x66\x26\x96\x7d\x2e\x52\xdc\x4c\x6a\x37\x9f\xff\x3a\x13\x9d\x4a\xcf\xcc\x67\xa8\x06\xfd\xeb\xaa\x70\x88\x49\x75\xa1\x07\xd5\x54\xdd\x36\x33\xf8\x6d\x91\x74\xa0\x5b\x0d\xae\xea\xd1\xf0\x76\xcc\x12\xc2\xde\x34\xc7\x97\xc3\xce\xed\xf8\x90\x84\x3d\x1e\xeb\x23\xe8\xf6\xc7\x1d\x7e\x63\xd1\x98\xf5\x00\x18\x0d\x6f\x27\x2c\x07\x8c\xba\xef\x5a\xf6\x7e\xdb\xa8\xa6\xbf\x51\xda\x5a\x0b\x3a\xee\xf6\xc7\xdc\xbf\xee\xa6\xb8\xb6\x69\xeb\x11\xd2\x94\x4d\xca\xe2\x52\x3c\x33\xef\x79\xf9\x3f\x96\xcf\x92\xe7\xc7\x23\xb8\x6c\xaa\x71\x4f\x5f\xd7\xe3\x71\x75\x55\xab\x1b\x10\xc1\x62\x43\xf0\xc7\xfe\x78\x32\x5e\x0f\x1f\xdf\x76\x3a\xf5\x78\x43\xc4\x87\x6a\x34\xe8\x0f\xae\x16\x05\xcb\x22\x7f\xae\xc1\x5c\x1a\xd4\xed\x4f\x7f\xdc\x9d\xf6\xbe\x2f\xfb\xd3\x2e\xa4\x3a\x5c\x74\x3d\xa0\x79\x4f\x29\x6c\xad\xfd\x4f\x29\xec\xbe\x98\xc1\x70\xd2\xef\xd4\xb3\x61\x6b\xbf\xfa\x83\xcb\xe1\xfc\xe3\x66\xd8\xf4\x3b\x9f\xf4\x75\x35\xa8\xae\xea\xeb\x7a\x30\x99\xc7\xcc\xc7\x68\x93\x8c\xbe\x1e\x36\x47\xb4\x0d\x51\x2d\x8a\x6e\x88\x39\x00\x07\x9f\x6b\x7c\x9e\x6b\x68\x9e\x3e\x2a\x87\x29\x2a\x6d\xf8\x1c\xae\x9b\x63\x5b\xd0\x6e\x8e\x7c\x00\x74\xf7\x29\x47\x87\xc3\xf7\xe1\x25\x6d\x83\xf0\xc3\x4b\xba\x2f\x63\xc6\x09\xa0\x14\x52\x77\x55\xb5\x57\x9f\xdb\x13\xbf\x40\x85\xf7\x24\x6c\x07\x65\x4f\xaa\x65\xfa\x7c\x50\xe2\x5d\x43\xb9\x71\x9d\xea\x5d\xbb\x68\xb4\x39\xb2\x5d\x4a\x2a\x91\x93\xea\x42\x08\xe6\x6f\xef\x6e\x16\x16\x75\x56\x94\xdc\xa5\xaf\x7b\x80\x2c\x07\x97\xee\x2f\x87\x2d\x75\x76\x53\xd4\xae\xae\x6d\x55\xa5\x17\x83\x66\x85\x6f\x88\x29\x0d\xda\x10\x71\x68\xd5\x5b\x55\xf6\x12\xb4\x5c\xf5\x52\xcc\x62\xd5\x4b\x11\x0f\xab\x7a\xb6\x34\xb0\x21\xec\x7e\x14\x36\x45\xae\xd7\x3f\x8b\x59\x1a\x91\xed\x09\x76\xb5\xf0\x90\x85\x8a\x92\x76\x6d\xbd\xe2\x80\x9c\xf7\x04\xe6\x81\x19\xf7\x36\xfc\x31\x85\x1e\xbc\xe0\xb2\x35\x66\x06\xeb\xed\x09\xca\x60\x6d\x8f\xdf\x3f\x22\x5f\x68\x89\x67\x33\x19\x7c\x78\xd6\xd2\xc1\x87\xe7\x5b\xc2\xd5\xc7\x66\x7f\x32\xdc\x16\x71\x79\xf3\x7a\xd7\x61\xc5\xdc\x23\xf6\x53\x4a\x39\x0c\xcb\x9f\x52\xc3\x61\xf9\x97\xd9\xc5\x23\x57\xfc\xf6\x8a\x17\xcf\x56\xee\x8a\xb0\xf1\x6c\xe5\xae\x94\xf8\xf0\xb5\xca\x03\x41\xf0\x1c\x05\x6f\x84\xc1\x73\x14\x7c\x5f\x64\x57\xb5\x2b\x2b\xb3\xfd\x0c\x59\x5b\x19\x0f\x9b\x7e\x77\x9f\xc6\xbe\x41\x74\xdb\xb9\x02\xf5\xf6\x7e\x2f\x65\x38\x3a\x9e\x56\xa3\xbf\xe8\xb2\x01\xa8\x2f\x46\xd5\xa0\xab\x83\x31\x47\xed\xba\xc8\x8f\x6f\x17\x13\x4d\x3e\xdd\x0c\x37\xa4\xf9\xfc\xc5\x54\x98\x67\x15\xdd\xbf\xb4\x9c\xf3\x14\xd1\xe5\x1b\x63\xef\x5f\x9b\xe1\x7e\x7d\x8a\xbf\x65\xbd\x7e\x69\xe6\xfc\xe0\xc9\xc7\x80\xed\x14\xf9\xc1\x46\x5b\x39\xda\x34\x19\xb6\x6a\xb0\x87\x6d\x79\x3d\xab\xb4\xf5\x44\x4e\xb6\x09\x2e\xf1\x32\x5d\x56\x2b\xa0\xb9\xa8\x3a\xd8\xe9\xac\x80\x66\xa7\xde\xb4\x95\x45\x3e\xae\xca\x54\xe7\x50\xd9\xcf\xdb\x97\x6d\x1e\xad\xfe\x3d\xae\x3d\xed\x5e\xd0\xe1\x0b\x9d\x0b\x1c\x61\xad\xbe\xfa\xa2\xae\x2f\xe9\xa0\xfa\xb6\xae\x24\x2e\xaf\x5a\x6d\xc6\xf7\x8b\xba\xbb\x52\xc9\x65\xd5\x71\x86\xd6\x8b\x6d\x57\x2e\x37\xb5\xb5\x73\x19\xd7\x8a\xa1\xfa\xc2\xd8\xfc\x76\xe9\xeb\xf3\xe2\x7a\xdb\xa6\xf6\x98\x4b\xbf\x36\x05\xcb\xae\xdc\xac\x20\x53\x51\x37\xba\xcf\xbb\x16\x84\xb7\x28\xe4\xbb\xf4\xc4\x0d\x6d\x49\xd5\x05\xae\xb5\xa5\xa0\xdc\xdb\xa5\xe6\x6e\x6a\xcb\x9e\x05\xe8\x5d\xd4\xf3\xd0\x75\x83\x07\xaa\xc9\x7b\xb5\xde\x1d\xe5\x6d\x80\x8e\x4d\xb1\x5a\x83\x4e\x19\x9b\xb7\xf7\xc8\xb5\x01\x34\x1b\x2d\x04\x96\xda\xb3\xa1\xb6\x16\x05\x1e\x5e\xdb\xfe\x35\x96\xbd\xca\x7e\x6b\x43\xb5\xde\x28\x53\x3b\x53\xd9\xfd\x8d\x3a\x64\xb7\xe5\x4f\x58\x9b\xff\x72\xab\xb5\x8f\x2b\x63\xcf\xc2\xe3\xc3\xb5\xf6\x6f\x59\x6d\x99\x15\x79\x90\xcc\xd1\x89\xd6\x39\xff\x76\xe9\x6b\x9d\x1c\xef\xd9\x77\x5a\xdc\xe6\xd8\x54\x6b\xae\x3b\x75\xbd\xb3\x62\x7f\x81\x89\xcc\xe7\x83\x57\x80\x1f\xbf\x6a\xb2\x89\xa5\xf8\x8a\xaa\x55\x76\xbb\x42\x7d\x0f\x9a\x5c\x0f\xde\xa6\xfc\x62\xdb\x6f\xdf\xec\xc6\xda\xb7\xba\x9b\xf4\x2d\xed\xbf\x3c\xe3\xee\xc6\xb3\xae\x55\x3e\x71\xf9\x70\x57\x5b\x5e\xe6\xb2\xd5\x0b\x5a\x64\xda\x40\xf6\x5a\x0a\xbc\xa2\x83\x0a\x21\x5e\x22\x7b\x0f\xd9\x46\x7b\xda\xd2\xf2\x86\x46\xc6\x4b\x22\xea\xec\x6f\xe4\x06\xdb\xe9\xd6\xd6\xfa\x68\x47\x9c\xd6\xf7\xe6\x19\xdb\xd2\x94\x11\x9a\xad\xa3\x4d\x86\x37\xc7\x78\xf3\x51\xc9\x4a\x9a\xfa\xa1\xba\xe7\x1b\x17\xc3\xc9\x64\x78\xbd\x25\x72\x34\x33\xf1\xda\x10\xd7\xd4\x97\xab\x51\x87\x2e\xd1\x35\x7d\x55\x2d\x1b\x79\xf7\x85\xe7\x74\x6f\x5b\xeb\x7b\x40\x3f\x7e\xbb\x35\x62\x43\xce\x49\xff\xba\x3f\xb8\xd2\x97\xb7\x03\xc1\xb8\xe3\xba\x1a\xd7\x7a\x78\x3b\x79\x7b\x40\x9a\xcf\x3f\xdc\x8e\x9a\xf1\xff\x1a\xd7\xa3\x69\xbf\x53\x8b\xcd\xeb\xbc\xc5\xeb\x7a\x6a\x3d\x1e\x36\x4c\x2f\x59\x55\x55\xdd\xc9\x43\x52\x16\x93\xac\x1d\x49\xc7\x33\xdd\x97\xdb\xd0\x1a\xa1\x4e\x86\xc3\x66\xd2\xbf\xf9\xed\x91\xd9\x76\xb4\x8f\x35\xee\x87\xd6\xb8\x2f\xcf\xf6\xea\xc6\x37\x4d\x7f\x32\x79\x70\x1f\x0f\xc9\xb6\xbd\xd2\x36\xc5\xfe\x6a\x36\x27\x9c\x17\x5c\x7f\xec\x4f\xfa\x83\xab\x65\x49\xf2\xe8\x9f\xdd\x6a\x52\xe9\xd5\xc4\xab\xa1\xed\xa8\xcb\xb9\x8e\x1e\x4a\xfb\x37\x67\xdc\x95\xa2\x2d\x64\xd2\xdb\x08\xb6\xcd\xc1\x6d\xb9\x9b\x26\xda\xcd\x68\x78\x53\x8f\x26\x9f\x8e\x87\x37\x55\xa7\x3f\xf9\xf4\x76\x57\xdc\xee\x89\xba\x6d\x9e\x1e\x34\x4d\x9b\xfe\xa0\xae\x46\xbb\x26\x69\x9b\xa2\x6d\xcb\xb1\x79\xdb\x9a\x17\xea\x7a\x5a\x0f\x26\xe3\x62\x2e\xbd\x34\x81\x67\x62\x6c\x7f\x70\xf5\xd0\xb9\x5c\x98\xda\x83\xd3\xef\x9d\xd7\xf3\x0c\x85\x6b\x1c\x5e\x41\x9b\xfe\x61\x84\xa3\x34\xeb\x91\xe4\x63\x63\xe6\xfd\x2d\x5e\x2e\x43\x9a\xfd\xd8\x06\x6c\xca\xfc\x10\x2a\x76\x70\xf7\x0f\xcb\xf9\xa0\xaa\x0f\xed\xf8\x61\x39\x1f\x48\x4c\x0f\xed\xf8\xe1\x99\x1f\xda\x80\x03\xbb\x7f\x78\xe6\xbd\x94\x1d\x8a\x20\xf4\xee\x50\x02\xbf\x39\xfd\xde\x6a\x0e\x05\xed\xae\xe4\xfb\x2b\x39\x10\x7c\xbb\x92\x6f\x61\x42\x4b\x84\x6d\x73\x5c\x4b\x63\x56\x22\x97\x08\xd6\xe6\xb8\xfd\xfc\x6d\xa9\xf6\xfd\xe9\xf6\x17\xb8\xd4\xaa\xfd\xe9\x96\x99\xe7\xe6\xb1\xdc\x15\x39\xab\x69\x96\x66\xe3\x38\xed\x8a\xdc\xc1\x89\xe7\x1c\xd3\x6c\xe4\xa3\x66\x27\xf7\xbd\x1d\x8c\xeb\xc9\xc6\x7c\x25\x66\x53\xde\xba\xa9\x3e\xad\x54\xd6\x06\x6d\x4d\xbd\x5e\xcd\x42\xf0\x8c\x33\xe3\x2a\x67\x96\x73\x0e\x4b\xdb\x80\xe5\x4c\x59\xd1\xa9\x6e\xaa\xf1\xf8\xc3\x70\xd4\x5d\x39\xcc\xb7\x98\x64\x52\x7f\x9c\x6c\x8c\x9e\x9f\xc3\x2c\x1a\x59\x39\x19\xbd\x5e\xee\x7a\x64\x5b\xe2\x62\xc4\xbc\xac\xcd\xe7\x75\x4b\xda\x59\xa1\x6b\x75\x3c\x20\x53\xa9\xfb\xa0\x0c\x07\xb5\xa9\x85\xc8\x43\x5a\xb4\x94\x65\x7f\x7b\xda\xe4\x07\xb5\x86\x13\x3d\xa8\x2d\x0b\x19\xf6\xb7\x44\x12\xef\x69\x47\x09\x95\x43\x25\x72\xc4\xf9\xb7\x2d\xe8\xf6\x98\xdc\xbb\x5a\xb8\x2d\xe7\xbc\xb9\x72\xd0\xe9\xba\x50\xee\x9d\xc8\xb4\x3d\x4d\xa9\x7f\x53\xfc\xbc\x96\x85\xc8\x2d\x98\xb1\x2d\xc5\x5a\xe1\xab\xe3\xbe\x10\xb5\x71\x98\x37\xc7\xaf\x15\xbb\x3c\x88\x6b\x2b\x2e\x65\xef\xfe\xb2\xdf\x4c\xe4\xf8\xf9\xe8\xc7\x83\x47\xf4\xc9\x45\xdd\x37\xf5\x91\xc5\x2c\x1f\x59\x93\x83\x8c\x90\xa2\x1f\xd5\xd7\x6f\xbf\xe1\x43\x6c\x6f\x59\xb7\xd2\xb3\x63\x7c\xe0\x37\xed\x14\xa8\xd6\xd6\x7b\xe7\xc9\xef\xaf\xb1\xf4\xf1\x88\xc5\x8b\x47\xae\x40\x6c\x5b\x43\xe8\xd5\x55\x33\xe9\xc9\x9a\xa6\x1e\xde\x4e\x6e\x6e\x27\xaa\x3b\xf9\x93\xce\xbc\x17\xcb\x19\x39\x84\xfb\x4c\xe7\xde\x1f\x92\xb3\x5d\xc6\x5b\x66\xa4\x0b\x07\xc6\x17\xc3\x4b\x23\xb7\x2c\x67\x94\x92\x2f\xaa\xc1\xa0\x1e\xfd\xa6\x06\xd5\xf4\xf8\xb2\x3f\x1a\x4f\xf4\xf0\x52\x73\x11\x2d\x86\x2d\xf7\x70\xc9\x57\xc9\x61\x05\x54\x07\xa6\x2b\x9b\xef\x87\xa5\x2d\xdd\x5a\x4b\xda\x54\x4f\x6b\xfe\x86\xfc\x9b\x5a\xbf\x21\xd9\xb6\xc6\x6f\x48\xba\xd0\xf6\xdd\x92\xc8\xfe\x94\x2d\xf2\xec\x4d\xc7\x14\x72\x57\xaa\x2d\x94\x75\x57\x96\x07\xb8\x5b\x99\xd9\x10\xed\x49\xd5\x0e\x74\x31\xc4\xda\xed\xbf\x65\xee\x4f\x64\x76\x18\xe6\xde\xf9\xc7\x92\xcd\xd9\x60\xd8\xad\xef\xbf\xc6\xbd\xe1\x07\x05\xe3\x7a\x3c\x2e\x7b\x3a\xcb\x35\x6e\xe0\xef\xef\xe6\x0e\x18\x36\xc0\x7b\x85\xb7\x2e\x04\xee\x5e\x44\x2c\x49\x0a\x09\xbc\x47\x6f\x69\x83\x1a\x36\x4a\x68\xfa\x1e\xc7\x34\x73\x80\x2e\x05\xae\xf7\x66\x0e\xae\x25\xe6\x2a\xbf\xcd\xbb\xee\xe4\x09\x3c\xb7\xf4\xf6\x5b\x73\x14\x71\x34\xe9\x42\xb7\x1e\x4f\xfa\x03\x61\x94\x5b\x16\x66\xff\x58\x66\xbc\xb4\x9b\xf3\x6e\x38\xe9\xbb\xef\x68\xe5\x26\xf6\xb0\x7a\x6a\x70\x8d\x46\xef\xb3\x36\x79\x25\xd6\xaf\xc4\xfa\x4f\x21\xd6\x4b\x64\xe4\x4b\x39\xcb\x59\xa3\xdf\x85\x78\x7f\xb9\x13\x5d\x5f\x87\x13\xec\x20\xe1\x6b\x35\x1e\x42\x9f\xbf\xb8\xeb\x9f\x27\x73\x84\x25\x02\xbc\xe4\x58\x2b\x18\xb3\xdb\x83\xd5\xab\x1e\xf3\x67\xe8\x31\xdf\x9e\xbe\xb2\x53\x3b\x79\x92\x48\xd9\xfb\x02\xf2\xd8\x66\xe1\xab\xf7\x0d\xca\x42\x9b\x85\x9f\xc5\x29\xe9\x37\x4f\xc9\x83\x56\x1d\xfe\x45\x15\xed\x6d\xc2\xcc\xab\x30\xf6\x2a\x8c\x7d\x69\x61\x6c\x4d\x68\xfa\x06\x24\x9c\x27\x2a\xb2\x8f\x92\x82\xbe\x2f\x2d\x75\x7d\xd5\x7a\xd3\xf9\xac\x7f\x61\x51\xe8\x1b\x16\x1b\xf6\x88\x04\x3b\x38\x70\x3b\xde\x48\x32\xe0\x3f\x7c\x18\x55\x37\x37\xf5\x68\x76\xf2\x6f\x69\xd5\xa1\x85\xed\xf1\x60\xd2\x2b\x13\xe5\x2f\xf4\xe3\x5e\x0f\x64\x37\x07\x3b\xa6\x5e\xf6\x3e\x7d\x3f\xab\x8a\xe3\xcb\xb5\xe3\x1b\x47\x32\x93\x44\xd1\x7a\xd7\xf6\x7a\xe3\xc0\x35\xef\xba\xdd\xa5\x98\xba\xab\x19\x35\x6f\x47\x9d\x5a\x80\xdd\x76\xab\x6a\x17\xad\xd7\xe4\x89\x71\x7d\x53\x8d\xaa\xc9\x70\xf4\xdb\x52\x64\x77\xc9\xb1\x2d\x97\xf4\x18\x79\x63\xa9\xf0\x07\xe4\x96\xda\x1f\x70\xb2\x41\x9a\xb7\xd1\x9f\x57\x51\x55\x6f\x36\xfb\xf7\xe2\x8f\x85\xb8\xed\xee\xbe\xd6\x62\x16\x72\x6d\x39\x64\xc9\x29\x0e\x5b\xc1\xaa\xaf\x9f\x49\x1a\x5b\x84\xf6\x03\x00\xfd\x10\x18\x3f\x93\x1b\xe1\x4d\x2d\xdd\x9b\x75\xb1\xad\x7b\xcf\x71\x48\x6b\x59\xb2\x6c\x1d\x80\xf3\x70\x2c\xaf\x5f\xb4\x49\xd6\xfc\xbb\xb7\x02\x28\x8f\xca\x23\x57\x0f\xf7\x08\x4d\xf5\xf5\xf3\x0a\x57\x7b\xca\x7b\x90\x08\xb6\xa7\xac\xc7\x8a\x69\x5b\x8b\x7d\x84\x5c\xb7\xb0\xdc\xf2\xef\x5b\xcb\xbd\xd9\xc3\xa0\xf6\xf1\xaf\x9b\x97\xe1\xbf\x7a\x93\x80\x59\x5f\x3f\x44\xee\x5c\x4e\xbd\x4b\x18\x5d\x4e\xb9\x22\x9f\xae\x0c\xca\x22\x63\x87\xdf\xfb\x83\xae\xbe\x19\x0d\x3f\x7e\x5a\x92\x65\x25\x4b\x61\x7e\xe5\x9a\x82\x65\x5e\xbf\xc2\xf9\x6f\x5e\xd6\x2a\x5d\x0b\x83\xa7\xc8\xd3\x37\xa3\x5a\x89\x9b\xdd\xa7\x09\xd6\x0b\xa4\xf6\xb1\x05\x75\x9b\x47\x1f\xd5\x62\x1a\xfb\x44\x81\x7e\xad\x03\x8f\x28\x69\xde\x83\x47\x9c\xdd\xea\xf6\xa7\x4b\x5b\x59\x33\x2f\xc2\x87\xc8\x70\xdf\x9e\x48\xb2\xcc\x12\xb7\xcc\xc7\x19\xea\x6d\xd0\x99\x76\x89\xd0\x87\x8b\xbf\xcf\x2c\xc9\x3e\x55\x58\x7d\x94\xb8\xf9\x44\x91\xed\x69\x92\xd7\xf3\x8a\x49\xdb\x64\xa0\xef\x69\x21\xe8\x10\x9e\xff\xec\xb6\x09\x6b\xbc\xef\x70\xee\xf6\x27\xad\xbe\x7c\x2d\xda\xfe\x54\x8a\xbc\x41\xbb\x7f\x16\x6d\x7e\x5d\xeb\xde\xad\x31\x3f\x49\x25\x3e\x5c\x3f\x7c\xb2\x1e\xf8\x8c\x0a\xdb\x56\x35\x6a\x41\x73\xfa\x13\xf4\xa4\xc3\xb4\x9f\xdd\x5a\xcd\x83\xf5\x95\x03\x95\x8f\xef\x44\x79\xd8\xa8\x23\x2c\x29\x03\x9b\xe4\xfe\x97\x27\xaa\x3f\xb3\x84\xfd\x0c\xa2\xee\x22\x7d\x6b\x05\xaf\xed\xc7\xb7\xab\x0f\x63\xe8\x0c\x07\xe3\xdb\x46\xd7\x1f\x27\xf5\x68\x50\x35\xba\xc8\x4d\xf7\xeb\xd7\x0b\x69\x98\x27\xdd\x47\x94\xc0\xbd\xf9\x97\x93\xad\x14\x31\xea\xcb\xf5\x15\x1b\xc4\xba\xc3\x8f\x8d\x36\x70\x59\xf5\x1b\x39\x56\xd4\x9d\x1c\x92\x7c\x54\x77\xfb\x23\xa6\x69\x3b\x93\x2f\x9f\xbe\xdb\x7d\xca\x71\xdd\x31\xdb\xcc\x8d\xe5\x8e\x5e\xac\x1f\x72\x7c\xe0\x71\xc2\x59\xf2\x05\x75\x02\xa6\x55\x73\x5b\xeb\xaa\x69\x86\x1f\xda\x44\xb3\x06\xac\xa7\x9a\x41\x7f\x6f\xc2\x6e\x3d\xf8\xb4\x37\x11\x53\x82\xfb\x33\xc5\xdb\xd3\xcd\x54\x8a\x95\x74\x9b\x5c\x13\xb5\xab\xf6\x3b\x52\x89\xa7\xa2\xbd\xc9\x5a\xb7\x73\x7b\xd3\xcd\x9b\xb6\x9a\x6e\x54\xd7\x72\xff\x51\xe9\xcd\x4a\xd3\x57\x19\xff\x42\xcc\x06\x65\xa5\xab\xea\xeb\x35\xe4\xd8\xa1\xbb\x54\xf3\x49\xf2\x6e\x69\x2f\x6e\x77\x9e\x76\x30\x1e\x92\xa5\xed\xfc\xe1\x59\x0a\x2a\xbe\x83\xc1\x70\xa0\xef\xea\xd1\xf0\xa0\xc4\x87\x26\x2c\xbb\xcb\xd2\x08\x21\xc8\xd5\x8f\x47\xf0\xfb\xed\x45\x3d\x1a\xd4\x93\x7a\x3f\xd1\x5a\x4f\xba\x4c\x78\x06\xc3\xeb\xaa\xbb\xb7\x94\xa5\x54\xab\x05\xdc\x6b\xe4\x6b\xa1\xac\x8a\xaf\x05\xae\xa9\xdd\x6b\x29\xda\x11\xb8\x0f\x5f\x94\xe8\xa0\xba\x9d\xf4\x8c\x96\xa0\x9b\xd1\x70\xda\xef\x2e\x9e\x7c\x5f\x4a\x79\x35\x1c\x5e\x35\xf5\x41\x49\xaf\xfb\x9d\xd1\x70\x3c\xbc\x9c\x1c\x94\x7a\xf8\xfb\xa4\xda\x96\xb0\xc5\xb8\x9d\x94\x7c\xb3\x4f\xde\x79\xf4\xa4\x1e\x8d\x2a\x66\xc1\x7b\x07\x66\x2d\xe5\xf2\xe0\xb4\x80\xdc\xd5\x96\x7f\x5e\x0e\x47\xb2\xe3\x77\x51\x8d\x5a\xf1\xf3\xb7\x7d\x06\x1a\x0a\xba\xc3\xce\x58\x37\xfd\xc1\xef\xaa\x9a\x1f\xfa\xdd\x97\xa7\xa9\xab\xd1\x60\x6f\xa6\x45\x63\x8a\x03\xeb\x59\xce\xb2\xbd\x9a\x55\x21\xb3\xfa\xe7\xa8\x6e\xfe\xfa\x53\xaf\x6e\x16\xce\x43\xef\xd9\x94\x65\x8d\x54\xa6\xee\xce\x84\x23\xb5\x04\x72\x59\x91\xea\x4e\xe6\x04\xec\xb0\x2d\xe0\x2d\x85\xb4\xf8\xf5\xa4\x32\x56\x27\xd8\xc6\x32\x66\x2c\x56\x30\xe4\x7a\xd8\xad\x9a\xff\xd5\x69\x86\xe3\xfa\xb7\xa3\x16\x70\x33\xac\x5c\x76\x4c\xb2\x09\xaa\x6b\x8b\x64\xdb\xd9\xf3\xb6\xa4\x9b\x79\xf4\xb6\xd4\xeb\x8c\x7a\x5b\xca\x8d\xdc\x7a\x5b\xe2\x8d\x2c\x7b\x65\x7f\x7d\x8e\x21\x8b\xe1\x87\x22\xc4\x01\x79\x56\xc7\xff\x80\x2c\xab\xc3\x2d\x6d\x64\x71\xb6\x25\xc5\x83\x61\xb7\xd6\xfd\x6e\x3d\x98\xf4\x27\x9f\xb6\xa6\x6a\x05\xe7\x2d\x09\x5b\xe9\x76\x7f\x89\xcb\x09\x77\x17\xba\xc0\xbd\xf6\x17\xbc\x9e\x78\x77\xe1\x85\xa9\xed\x2f\x77\x29\xdd\xee\x22\xef\xc9\xf1\xfe\x62\xd7\xd2\x6e\x2d\xfa\xe1\x17\x23\x6f\xce\xb2\x9a\x66\x66\x0c\xb2\x2a\x85\x4d\xba\xd0\x1f\x4c\xea\xc1\x64\x36\x3f\x97\xa5\xb9\xfb\xe8\x32\xcb\x56\x62\x7b\x8b\x32\xf9\xa2\xc7\xb3\x51\x7d\x53\x57\x93\xe3\xc1\xb0\x7d\x7b\xbb\x10\x77\x33\x2c\x1e\x03\x8e\x3b\xb5\xdc\x09\xb8\xe7\x2e\xf3\x19\x5d\x59\x59\x4a\x7f\x57\x2d\xca\x6c\xf7\x6c\x70\x71\x81\x0a\xb8\x56\x61\x0f\xef\xee\xbd\x36\x2d\xc6\xcf\x59\xce\x96\xf8\x7b\xfe\xb2\x39\x41\x21\x1b\xf7\x95\x5f\x55\x93\xfa\x43\xf5\x69\x2f\x2b\x5f\x49\xb7\xcc\xc8\xe5\x92\xe7\xce\xb0\x69\xca\xbe\x43\xd9\x11\x28\x2e\x06\x17\x7a\xfc\x23\x2b\x75\x55\xb7\x3b\x62\x19\x7f\xd1\xf4\xea\x01\xd9\x19\x63\x1f\x9b\x57\x56\x69\x1f\x93\x79\x49\xd6\x56\x73\xb2\xa8\xba\x0f\x07\xc1\x4a\x51\x32\x32\xcf\x50\xce\x8c\x4d\x3c\x43\x49\x6b\xbb\x4e\x4f\x2f\x73\xc6\x97\x9e\x5c\x12\xf3\xee\x9f\xae\xeb\xdf\x1e\x57\xd2\xe2\x4a\xf1\x86\x8e\x3e\x53\x89\x4f\x2e\x86\x85\x9d\xa7\x16\xd2\x6d\x16\xb0\xf4\xc9\x3d\xeb\x36\xd0\xad\x26\x55\x21\x7e\xcf\x53\x5e\x8b\xf8\xcf\x51\xd4\x40\x6e\x92\x7d\x9e\xb2\xe6\xf3\xe8\x79\x0a\x9b\xf4\x9e\xa9\xa4\xe1\x68\xf2\x4c\x25\x8d\x86\x93\x61\x67\xf8\x4c\x58\x31\x9f\xd8\x0b\x85\x2d\xec\xa6\x6c\xd2\x8f\x96\xe2\xfb\xe3\xd6\x03\xe8\xbb\x8d\xd1\x9b\x74\xa5\xf5\x0d\x19\x75\xc0\xde\xc9\xbb\xed\xd9\x77\xac\xd9\x6e\x6e\xff\x43\x0a\xd8\xd4\xc1\x87\xe4\x3f\x0c\x02\x4f\xee\xf3\xec\x56\xf6\xd5\x8c\x4f\x81\xd3\x13\x40\xf4\x24\xe8\x3c\x04\x30\x4f\x81\xc9\xde\x7d\xb5\x9d\x50\xd9\x9f\x7b\x07\x5c\xf6\x67\xde\x09\x99\x5d\xd9\x0f\xad\x6c\x2b\x74\x58\xc6\xd2\xf5\xc7\x9b\xe1\xb8\xee\x6a\xa6\x80\xe3\x42\x4e\xb6\xc9\x7e\x3b\x33\xac\x49\x7b\x3b\x53\xaf\xcb\x77\x5b\x93\x1f\x22\xd1\x1d\x9a\x79\x5d\x86\x3b\x34\xe7\x26\xa9\xed\xe0\xbc\x3b\xe5\xb4\x43\x4b\xd9\x24\x99\x1d\x98\x77\xa3\x2c\xb6\x23\xef\xc1\xd2\xd7\x03\xcb\x78\x44\xc6\x65\x09\xeb\xd0\x6c\xdb\x64\xaa\x07\xe4\xdf\x22\x45\x3d\xa0\x84\x75\xb9\xe9\x01\x99\x37\x48\x4a\x0f\xc8\xbd\x49\x36\x7a\x50\xf6\x15\x69\xe8\x21\x79\x57\xe5\x9f\x87\xe4\xdd\x24\xf1\x3c\x20\xff\x26\x19\xa7\x64\xbf\xbd\x19\x4f\x46\x75\x75\x7d\x10\x85\xdb\x90\x78\x0b\x75\xdb\x90\x72\x1b\x65\x5b\x49\x7a\x38\x55\xdb\x9d\x71\x1b\x45\xdb\x9d\x6b\x3b\x35\xdb\x93\xef\x00\x4a\xb6\xbb\x84\xed\x54\x6c\x67\xbe\x1d\x14\x6c\x2d\xdf\x03\xa9\xd7\x41\xf9\x1f\x98\x69\x13\xd5\xda\x9d\x65\x37\xc5\xda\x9b\x77\x27\xb5\xda\x9b\x7b\x1b\xa5\xda\x9b\x71\x2b\x95\xda\x9b\x73\x3b\x85\x3a\x20\xeb\x46\xea\xb4\x3f\xdf\x66\xca\xb4\x3f\xdf\x76\xaa\xb4\x37\xef\x26\x8a\x34\x9e\x54\x93\xdb\xb1\x76\xc6\xee\x5c\xed\x9b\x27\x73\x3b\x93\x4d\xaa\x2b\xcd\x4a\xe1\x52\x15\x62\xcd\x33\xaa\xa7\x75\xd5\x14\x2b\xe2\xb9\x0c\xb8\xbc\xcf\xbe\x98\x6e\x39\x66\xb6\xdf\xb7\xf5\xa4\xfc\xca\x8e\xcf\x6c\x17\x4d\x64\xcc\xb2\xcf\x53\xf5\x07\x7a\x50\x4d\x67\x5b\x81\x5b\x32\x6c\xd8\xde\xbb\xac\xeb\xee\x7c\x6d\xf5\x01\xdb\x82\x05\x1b\xc7\x6a\xc5\xfc\x78\x47\xc5\xcb\xfb\x7d\x5b\xea\x5d\xb1\x18\xdb\xb8\xb5\xb3\xf1\x2c\xf0\x52\x48\xb5\xbc\x66\x3f\x5b\xa3\xdd\xbf\xba\xbf\x92\x72\xcf\xda\xfe\x16\xbb\xa9\x07\x29\xde\x8f\xb5\xc0\xda\xa4\x45\x3d\xba\xac\x75\x9d\xea\xd1\x45\x6d\xd2\xb0\x1e\x51\xd8\xe3\x1a\xb2\x45\xfb\xda\x6d\x9c\xf6\x88\xe1\x7a\x84\x9d\xdb\xf6\xf1\x7a\x4c\x61\xdb\x06\xec\x31\x65\x6d\x1f\xb1\x87\x95\xf6\xc8\xa6\x6c\x1b\xb3\xae\xaa\xb8\x9b\x8b\xb2\xc4\x2c\x06\x2e\x87\xcd\x22\x55\x9c\x74\x99\x32\x2f\x4a\x97\x73\x57\xdc\xd7\xd5\xf8\xf7\xf5\x2d\xac\xcd\xa1\x4b\x79\x56\xb6\xb6\xde\x6e\x0c\x5c\xbb\x18\xa8\x73\x3b\x1a\xd5\x83\xc9\x09\x7f\x1c\xbc\x1b\xb6\xd5\xbe\xf1\xc0\x7d\xb2\xdd\x97\xf2\x54\xb7\x93\x9e\xbe\x1c\x8e\xae\xdf\xdd\x14\xd3\x50\xb1\xf9\xf9\xf1\x3e\xfb\x61\x06\x90\x2b\x3b\x5b\xcf\x67\x76\xb8\xab\xcc\x3f\xd3\x36\x71\x5f\x63\x76\xdb\x30\x2e\xd9\xd7\xf7\xff\xd9\x69\xaa\xf1\xf8\xaf\x3f\xc9\xac\xfa\xed\xdd\xf7\x6c\xe9\xf8\x55\x8d\x0d\xd7\x2c\xb4\x5e\x37\x5c\x5f\x37\x5c\x5f\x37\x5c\x5f\x37\x5c\x5f\x37\x5c\x5f\x37\x5c\xbf\xf8\x86\xeb\x56\x07\x75\xaf\x5b\xb2\x8f\x29\xe1\x50\x20\xee\x03\xdb\xab\x69\xfb\xaa\x69\xfb\x77\xb9\x5b\xbd\x0b\x67\x1e\xb3\xd7\xbd\x7c\x4e\x74\x59\xba\xdf\x63\xf8\xff\x7d\x6f\x7d\x1f\x02\xe8\x03\xb7\xce\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\x5f\x37\xc1\xff\x94\x4d\xf0\xcd\xdb\xd6\xc5\x5d\xec\xcc\x91\x54\x77\x69\xf7\xf6\x79\x36\xab\xdb\x55\xf0\x76\x73\xfd\xb7\x5d\x5b\xeb\xcf\xbf\xb1\xfd\x98\xb3\xae\x8f\xdd\x0c\x3f\xec\x8c\xec\x33\xef\xa0\x3f\xe2\x90\xed\xc1\xfd\xfb\xd3\xce\xe6\x6e\x3e\xfa\x38\x87\xc1\xb6\x23\xab\x3b\xcd\x04\xfe\x35\x8f\xb2\x3e\xc2\x38\x62\xff\x19\xd4\x65\xeb\x88\xfd\xf6\x13\xaf\x76\x13\x5f\xd9\x6e\x62\x87\xb2\xfe\x74\x2b\x8c\xe7\x3f\xcb\xfa\x6a\x98\xf1\x27\x18\x66\xec\xc5\x89\xc7\xda\x79\xec\x30\xd1\xd8\x7e\x46\x79\xdd\x76\xe3\x09\xa7\x96\xd7\x0c\x3f\x56\x0f\x32\x77\xfb\xe3\x9b\xa6\xfa\x74\xdc\x1f\x88\x27\xd3\x8b\x66\xd8\xf9\xfd\x6d\x67\x28\x45\x1e\xbf\x79\xf3\x76\xda\x1f\xf7\x2f\xfa\x0d\xd3\x28\x79\x6d\xea\x45\xa3\x0e\x71\x43\xc5\xa9\xab\xfe\xe0\xed\x87\x7e\x77\xd2\x3b\x46\xa0\xfa\xfa\xed\xfd\xe5\x7e\xf5\xf5\xdb\x69\x3d\x12\xc6\xa0\xab\xa6\x7f\x35\x38\x96\xcd\xef\xc9\xf0\x66\x93\x5b\xbe\xcd\xf6\x29\xfd\xeb\xea\xaa\x3e\xbe\x1d\x35\x7f\xf9\x1f\x2c\x56\x1f\xcb\xf7\x7f\x8c\xa7\x57\xff\xfe\xf1\xba\x79\xdb\xe9\x55\xa3\x71\x3d\xf9\xe9\xbf\xff\xe7\x2f\x3a\x1d\xfd\xe7\x78\x7a\xa5\xa6\xfd\xfa\xc3\xdf\x86\x1f\x7f\x7a\x63\x94\x51\xe4\x14\xb9\x37\xea\xb2\xdf\x34\x3f\xbd\x19\x0c\x07\xf5\x1b\xf5\xf1\xba\x19\x8c\x7f\x7a\xd3\x9b\x4c\x6e\x8e\xff\xe3\x3f\x3e\x7c\xf8\x00\x1f\x2c\x0c\x47\x57\xff\x41\xc6\x18\x2e\xf8\xcd\xbb\xff\x14\xa1\x96\x33\xe9\xd1\x6d\x53\xff\xf4\xa6\x9e\xd6\x83\x61\xb7\xfb\x46\x75\x9a\xfe\xcd\x6a\x58\xf7\xa7\x37\xef\x11\x15\xfa\x1e\x4d\xa9\xa7\x69\xaa\xe9\xee\xda\xe8\xd4\xa3\x69\xe8\x69\x3a\x8f\x77\xd7\x90\xb3\xf6\x27\x01\x5c\x54\xa4\x48\x05\x70\x49\x91\x42\x1a\x3b\x0e\x42\xa3\x32\xe4\xac\xd0\x9c\x60\x04\x4f\x8a\xe4\xff\xfc\x1d\xe9\x1f\xed\xbb\x42\xe4\x84\x74\xf7\x1e\x49\x91\xe9\x68\x07\x8e\x94\xd1\x49\x5b\xf0\x49\x27\x9d\xc6\xe5\x45\xc9\x9f\xe2\x0f\xc5\x1f\xe5\x85\xc3\xee\x66\xd0\xf8\x37\xb2\xc6\x98\x37\xff\xf1\xee\x3f\xb9\xd3\xef\xfe\xc7\x8f\x6f\x5f\xe1\xfd\xa7\xc2\xfb\xf3\xc1\x3e\xaa\x1e\xe1\xdb\x69\xdb\xde\xcc\x21\xee\x73\x9e\xc1\xfb\xca\xc3\x3d\x78\x2c\xba\x55\x78\x16\x1c\x3c\x18\xef\x04\x9f\x32\x78\x8b\xa8\x08\x4f\x08\xc1\x44\x4c\x8a\x50\x11\x81\xb1\x36\x2b\xcc\x60\x2d\x5a\x45\x08\x14\x04\x51\x72\x8e\xf9\x0c\x2d\x44\x6b\x92\x72\x90\x53\x0e\xe1\x04\x09\x72\x30\x5e\x59\x08\x3e\x9b\xcc\xc8\x63\x6c\x5e\xf8\x36\x40\x21\xe3\x2c\xfd\x19\x41\xb4\xc9\xb8\x59\x79\x27\x08\x39\x04\xc6\xec\x59\x75\x90\x29\x31\x6e\x72\x16\x17\x52\xca\x8a\xf0\xb4\x6d\xea\xaf\xef\xd1\x2a\x4c\xa7\x88\xe7\x18\x4e\xd1\x9e\x63\x2a\x41\x4e\x82\x8c\x04\xb9\x5f\x17\xb0\xef\xb2\x4a\x97\x36\x2e\x21\xe0\x57\xb0\x14\x39\x7c\x95\xf0\xd9\x17\xe1\x1f\xbd\x40\xf9\xf8\x55\xb3\xfd\x55\x7e\x01\x6e\xf7\x8a\xf9\xfb\x30\xff\x19\x59\xdd\x2b\xb0\xf7\x93\x99\x03\xcd\x27\x1f\xa2\xd7\x3f\x3b\xbb\xf8\xf2\x22\x8b\x00\x54\x11\x76\x10\xbc\xe3\x8a\xc1\x1b\xab\x11\x42\xc8\x0a\x21\x5a\xd4\x16\x8c\xa1\x32\xde\x32\x7c\xb9\xa3\x21\x46\x8d\x60\xad\x26\x08\x19\xcb\xab\x05\x17\x48\x99\x32\xb0\x65\x58\x53\x19\xd5\x32\xa6\x65\x44\xe7\xe3\xa9\x08\x7b\xe8\xc1\x04\x7b\x57\x06\xb3\xc8\x4c\x2c\x3d\xb1\xdc\xe4\xe4\xd3\xf5\x68\xea\x76\xc9\x2a\x07\x2f\x6d\xbe\x48\xf1\xfd\x25\x8f\xcd\x8b\x92\xdb\x5f\x32\xa0\x3f\xef\xd6\xc7\xbf\xae\x04\x6b\x15\xda\x1e\x3a\xa0\x46\x5b\x08\xcc\x0c\xce\xd0\x2b\x4c\x4d\xd0\xe5\x1f\x82\x53\xfc\xd7\xc6\x9e\xda\x29\x2d\x76\x95\xea\x0b\x63\xf3\x1e\xb2\xfd\x80\x15\xe1\xf5\xa4\x2f\x8f\x64\xcf\x60\x8a\xb1\x29\x1a\x9d\x05\x9f\xd7\xc1\x8a\x0c\x57\x3c\xc3\x08\x18\x15\xe2\x2a\x64\x57\x29\xe9\xa3\x8f\x72\x1c\x7a\x0a\xe0\x81\xae\x2f\xb7\x2d\x48\xbd\xbc\xf1\xc2\xcc\xaa\xbe\x8c\x84\xcf\xca\x2b\x24\x16\x86\x7c\x09\x55\x5e\xf9\xf2\x52\xc2\x90\x38\x45\x9c\x47\xa3\x04\xa1\x95\x77\x09\xc6\xf2\xbf\xbc\x97\x70\x52\x6d\x1d\xbb\x06\xf8\x20\xcf\xe7\xcf\xea\x14\xfb\xa0\x93\x23\x07\x7b\x9f\xde\x68\x24\xfa\x2c\xce\x61\x1f\xe1\x3f\xf4\xeb\x52\x55\xaf\xec\x29\xe6\x13\x32\x80\x8a\x05\x73\x65\x81\xa5\x63\xe5\xcf\x39\x14\x95\x44\x94\x87\x60\x10\xe1\xa9\x3f\x69\xd3\x58\xd5\x66\xc3\x7c\xee\x4f\xac\x64\x95\x3f\xe5\x95\xfd\xf5\x3d\x7a\xc1\xab\x78\xc6\x44\xc3\x0b\x61\x69\x71\x8c\x43\x92\xe0\xb1\x24\x89\x67\x33\x3c\x3e\xe3\x50\x15\xcf\x66\xd1\x2d\x1e\x9f\xcd\x0a\x48\x05\x77\xcf\x66\x78\x7c\x36\xab\x63\x51\x3e\xef\x44\xeb\x9c\x7f\x86\x65\x80\xa7\x9d\xb0\x79\xaa\x85\xd8\x93\xcc\x10\x9f\x62\xec\xf1\x68\x4b\xa1\x03\x2a\xfd\xda\x8b\x01\xff\x0a\xe8\xfe\xb5\x74\xff\x7f\x05\xd8\x6e\x92\x19\x1f\x66\x1a\xb0\x31\xf5\xcb\x93\x44\xbc\x62\xc1\xb1\x83\x80\x5c\xa9\xe2\x51\x54\x34\x45\xd7\x31\x0a\x01\x35\x7f\x6b\x52\x74\xea\x3b\x5a\xd2\x68\xd2\x90\x35\x69\x3a\xf7\x1d\xc3\x41\xfc\xc5\x69\xee\xae\xdb\xa1\x71\xf3\xc1\x5d\x90\x45\xca\xe8\xb5\xc1\xf1\x5e\xde\x29\x83\xab\x66\xd1\x33\x79\x67\x56\x40\x3b\xb8\x0b\xf2\x4e\x3b\xb8\x3b\xa4\x9a\x1d\x37\xcd\x1c\x7a\x25\xc7\xf3\xde\x6a\xb1\x7e\x45\xc5\x01\xd7\x14\x3c\x87\x77\xfa\x87\x3b\x34\xff\xca\x7b\x1b\xa4\xe8\xa4\xdd\x02\x5b\xd8\x0b\x3b\x99\xed\x78\x95\x10\x0e\x52\x44\xdb\x76\xc4\x4e\xa8\x4d\x38\xdf\x19\x23\x45\xbf\xbe\x47\xc3\x44\x82\x25\xed\xb3\x7b\xd1\xfa\x8c\x43\x59\x6b\x3a\x9b\x89\xd7\x3e\x9d\x61\x56\x49\x22\x96\x28\xc8\x06\xad\xf3\x2b\x9c\xad\x7d\xa2\xc1\xf6\x53\x8e\x26\x3c\xc1\x12\xf3\xb1\x36\xc4\xfb\xab\xfc\xda\x62\xc8\x8b\xc2\xd8\xaf\xb6\x97\xf0\x92\x80\xb4\x49\x30\x78\x90\x6d\xdf\xa6\xc4\x2f\x4f\x2c\xd8\x32\x66\x63\x27\x43\x60\xe6\xff\x75\x1b\xa0\xd1\xfc\x63\x71\x64\xee\xae\x35\x29\xf4\x8d\xf6\xda\xcb\xa2\x93\x2e\x2b\x4f\xed\xc0\x34\x3c\x2e\x3a\xca\x58\x65\x95\x1a\x9d\x55\xde\xb5\x50\xf1\x7c\xc7\xfb\x9f\x7e\xf4\xe9\xa1\x07\x0e\x5e\xe4\x36\xc3\xb7\x34\xfc\x2f\x6a\xdb\xe0\x5b\x02\xdc\xe7\xbd\xa7\xe3\x9f\x78\xb4\xfc\x19\xb2\x3e\xe6\xbc\xec\xb3\x5b\xfa\x3e\x8b\x8d\xe8\x4b\x9c\xe7\x59\x61\x60\x3e\xe9\x20\x59\x85\xd4\x30\xb6\x51\xd9\x24\xc8\x45\xb5\x57\x51\x02\x5b\x3c\x6c\xd3\x7f\x1f\x73\xf5\xd9\x3b\xff\xf9\xcb\x18\x58\xbf\x40\xe9\x21\x14\xe5\x9d\xc9\x94\x68\xee\x18\x55\x64\xf1\x2c\x89\x38\xa6\xd0\x34\x41\x05\x35\xdb\x95\x92\xc7\x4e\x32\xf6\x50\xef\x11\x8f\x77\x1d\xf0\xfc\x07\x16\x9e\x44\x6b\x5e\x32\x71\x79\x5e\x2c\x78\x49\x94\xe5\xb9\xf1\x7f\xcf\x1d\x5a\x8f\x3c\x39\xf4\x22\x71\xca\x43\x34\x9e\x09\x71\x4a\xbe\xd1\x0e\x7c\xe2\x47\x56\xf3\xb7\x7b\x88\x6a\x81\x31\x83\xfb\x3b\xc3\xae\x2f\x04\x83\x03\x5d\x5d\xbe\x44\xb4\x49\x40\xd9\xab\xc8\x70\x6b\x18\x4a\x4a\xa0\x34\x7f\x53\x73\xdb\x08\xb5\x66\x2d\xf1\x7d\xe0\xcc\x17\x01\xc0\x01\x8c\xf9\x31\x77\xef\x3c\xee\x6e\x9a\x9d\x5e\x83\xbf\xa4\xe7\xe1\xc3\x0a\x79\x89\xb3\x46\x58\x16\x06\xe1\x61\x45\x36\x16\xbe\x86\x41\x61\x62\x7d\xd4\xe7\xa6\x20\x8b\x0a\x67\x6d\xda\xef\x63\xb6\x3c\x6b\xc7\x37\xd9\x51\xb5\x6e\x76\xc5\x94\x4a\x75\x1b\xb8\xac\xfa\x0d\xa7\x50\xdd\xc9\x33\x4a\xfb\x56\x91\x79\xf8\x5a\x2d\x5a\xf0\x29\x34\x56\xdb\x33\x0c\xe0\xd0\x89\x6e\x64\x95\xfc\x13\x9b\xb2\xcc\xa1\x8d\xb6\xfc\x4f\xd9\xb3\xc8\xe9\x15\x26\xce\xa2\x09\xa2\x97\x87\xd0\x0e\x27\x64\xc4\x29\x09\xe0\xc7\xdd\x7b\xb4\x90\x8d\x87\xe4\x43\x87\x20\x9a\x00\x2e\x17\x1a\xc4\x09\xbc\x73\xca\x41\xc2\xa0\x3c\x04\xd7\x00\x59\x07\x26\x70\x4a\x17\x20\x7a\xa7\x2c\xa4\x24\xc5\x65\x65\xc1\x2b\x0f\xc6\x06\x0d\xce\x49\xe6\x4c\x9a\xc0\x24\xab\x1c\xd8\x88\xda\x43\x8a\xa1\xbc\x4f\x35\x75\x3c\x18\x31\xe4\x74\x90\x42\xd2\x9e\x4b\x24\xab\x03\xa0\x27\x20\xc7\x59\x49\xac\x37\x29\x32\x13\x0d\x94\xb4\x05\x0a\x51\x3b\xc8\xd9\x6b\x84\x98\xb2\x2e\xf6\x9c\xd1\x47\xf0\xc1\x31\xf9\x8c\xa4\x08\x30\x70\x3f\x03\x65\x0d\x91\xa2\x26\x08\xc6\x6b\xb0\xce\x6b\x0b\xce\x11\xd8\x40\x1a\x92\x0d\xdc\x5d\x0d\x9e\x22\xe7\xc9\x4e\x03\x11\xb7\x3b\x91\xd5\x08\x26\x65\xc8\xc8\x15\x65\x83\x8a\xc0\x20\x03\x13\x3d\x57\x90\x53\xd4\x80\x06\xc1\x66\xaf\xc1\x64\x26\xcc\x06\xb9\x33\x08\x84\x04\x8e\x92\xd8\x90\x72\x28\xb3\x7a\xee\xb5\x33\x96\xdf\xa6\xd4\xd1\x0e\x10\xa3\x32\xda\x43\x88\xa4\x21\x07\x1d\xc0\xb9\xa4\x09\x52\x74\x1a\x82\x27\x6e\x3e\x02\xda\xc8\x2d\xf6\x51\x21\xa4\x44\xda\x03\x62\xd2\x3c\x28\xdc\x7d\x1e\x0a\x64\x98\x64\x8e\xb7\x19\xb5\x63\xf8\x54\x0e\x12\x8b\x1e\x29\x2b\xa3\x0c\x5a\x08\x0c\xa7\x18\x4f\x32\x10\xb1\x3a\x4d\x81\x27\x51\x30\x16\x9c\x45\x35\x1f\x7e\xbf\x38\x63\xc2\x2f\x31\x24\x7a\xb3\x38\x49\x07\xc3\xc1\x5d\x3d\x1a\x2e\xdb\xab\x95\xeb\x8b\x0f\xf3\x75\xbd\xd1\xe5\xf5\x97\xb8\x2e\xf9\xf9\x66\x2c\x53\x97\x74\xd8\x8c\xbd\x5a\xa2\x82\x1b\x88\xdb\xc2\xa4\x4e\x10\xb2\x55\x68\x20\x9a\x58\x21\xa4\xc0\xc3\xc2\x4f\xa3\x50\xa1\x06\x63\x02\x63\x35\x39\xb5\x1c\xc9\xd1\x1c\xa9\x24\x72\x61\xb8\x72\xc0\xff\xf2\xb2\x6b\xb2\x40\x38\xc0\xda\xa0\x32\xc4\x18\x2a\x48\xde\xf2\x5f\xa9\x40\x19\x46\x1f\x13\x17\x42\x39\x9c\x91\x37\x9a\xc8\xe2\x6c\xb0\x72\x18\xc4\xfb\xb5\xac\x60\x30\x6a\x30\xb1\xa3\xc1\x20\x18\xa2\xf2\xeb\x1c\xff\x46\xe0\xec\x3c\x9f\xad\x4a\x60\x4b\x6e\xc1\xad\x52\x85\x86\x4c\x5e\x66\x74\x5e\x8e\x50\x08\xde\x67\x20\xef\x3b\x60\x88\xa7\x07\x18\x8a\x8c\xaf\x60\x4c\x06\x6b\x6d\x05\x89\x90\xff\x66\x25\x05\x27\x26\xdd\xef\x31\x42\x8e\x91\x5b\xeb\x42\xac\x20\xb9\xcc\x7f\x2d\x24\x11\x42\xd4\x40\x39\x2c\x84\x0b\x10\x73\x22\x0d\x21\x53\x07\x9c\xb5\x60\xa2\x85\xe8\xc0\x05\x16\xe4\x33\xcf\x87\x0a\x88\x90\xff\x24\x83\xe1\xce\x05\x30\x31\x70\x75\x94\x02\xf7\x2e\xa4\x15\xd8\x68\xee\x17\x57\x99\xdc\x0a\x64\x39\x42\x49\x04\x6b\xa2\xc1\xcb\xac\xb3\x11\x57\x0b\x40\x70\x99\x29\x13\xa5\x95\x02\x24\x82\xc3\x39\xbf\x25\xa6\xb3\xc1\xae\x65\x87\x24\xe4\x3d\xf9\xd5\xea\x93\xd8\x6f\x27\xbf\x80\x31\xff\x15\x28\x26\xbb\x84\x31\x09\x92\x2b\x5b\x7c\xd6\x31\x8d\x8a\x39\x29\xa3\x13\x84\xc4\x54\x28\x79\xdf\xbe\x27\x08\x48\x27\x80\xde\x2b\x07\x18\x98\xb6\x19\xe7\xc1\xb2\x36\x9d\x98\xba\x62\x95\x20\x38\xaf\xca\xb3\xb4\xc1\xb7\x30\x88\xb2\x82\x67\x3c\x53\x45\x1b\xa9\x0a\x4c\x4b\x55\x79\x16\x50\x47\x26\x68\x9a\x07\x42\x05\x48\x91\xda\xa7\x69\xff\x31\x5e\xfb\xa0\xd6\xf2\xa9\xfb\x7c\xcd\x7d\x05\x8e\x9b\xc2\xc3\x15\x42\x8b\x38\xf7\x0d\xb9\x5b\x07\xc7\x36\x7a\x77\x75\x4f\xf3\xb6\xf8\x48\x79\x89\xe2\x24\x5a\x48\xa4\xec\x09\x5a\x31\xf0\x67\x2c\x21\xb0\x8c\x4a\xa8\xb0\xa3\x11\xac\x32\x9a\xc0\x31\x5e\x31\xf6\x29\x3a\x75\x73\xab\x23\x55\xec\x8c\xa6\x18\x8a\x65\x52\x31\x54\x52\xb4\x60\xbc\xd4\x1a\x2b\x4d\x75\x06\x63\x35\x64\x3f\xb7\x51\x6a\x4d\x96\x34\xf5\x98\x17\xa6\xbb\xf7\x59\xa1\x3d\x0d\x53\xea\x59\x39\x93\xad\xad\x0a\x3d\x3f\xd5\xc4\x61\x77\xef\x83\xca\x53\xea\x85\xf3\x7c\x1a\xee\xae\xbd\x0e\x1d\x10\xc2\x81\x0a\x9c\xe7\xe6\x8e\xb5\xbc\x68\x99\x43\xfc\xae\xf9\x5d\x7e\x39\xe4\xee\xbd\x53\x84\xe7\xbe\x47\x53\x04\x63\x62\x0f\x8d\x7c\x78\xc8\x99\x7a\x4c\x62\xec\x39\xc6\x53\x4c\x53\x77\xea\xee\xae\xe5\xe4\xb6\xb6\x53\x6d\x4f\x89\x9b\xd3\xd3\x11\x0c\x4e\x59\xfc\x22\x85\xae\xb1\x90\xb3\xfa\x5e\x4e\xd5\xbc\xa2\xc0\x97\x40\x81\xcf\x3b\x1d\x6c\x3c\xa3\x7c\x12\xf8\xff\xf3\x0a\x28\xf7\xa6\x18\x89\x4e\xe8\xef\xb3\xe5\x8a\x98\x95\x6b\x34\x44\x1b\x21\xe2\x19\xa2\x8a\x2c\x1e\x9c\xda\xf3\x04\x3e\xf6\x52\xa3\x09\xb2\x63\x41\x3a\x39\x07\x91\x65\x6b\xc4\x33\x64\x39\xc0\x04\xba\x63\xd8\x8c\xea\xce\x44\x20\xf1\x7b\x2d\xe5\x9f\x14\x1b\xd0\x36\x48\x8b\x23\x90\x9f\xde\x20\xf8\x37\xea\xe3\x4f\x6f\x20\xfa\x37\xea\x53\xfb\x3b\x8b\x73\x1c\x59\xbc\x84\xcc\xbe\x46\x1f\x7f\x7a\x13\x81\xfc\x12\x2b\x63\x55\xc4\x82\x6f\xb2\xca\x6f\x0e\xac\xb2\x0d\x6a\xfa\x83\xba\x53\xdd\xfc\xf4\x66\xfc\x7f\x6e\xab\x51\xbd\x4a\xfd\x0f\xba\x1c\xe4\x60\xe7\x55\xcf\x88\x08\x4e\xe1\x81\x66\x40\x0f\xc6\x03\x46\xed\x56\x0b\x8f\x99\x95\x9f\x4c\x73\x44\x90\x9d\xf0\x00\xde\xc5\x53\x99\x59\x18\x96\x51\xc1\xde\xa3\x02\xa9\x08\x86\xb5\x8c\x0d\xa8\x20\x55\x3c\x00\x0f\x68\x09\x0f\x68\x86\x07\x61\x1d\x0f\x4c\xb0\x4a\x9e\x4d\x64\xe5\x4a\xc9\xf3\xcd\x21\x75\x1f\x88\x10\x07\x5d\x85\xf7\x22\xa5\x83\x27\x5b\x4e\xb0\xfe\xb4\xc1\xf1\x89\xa8\x1f\x89\x25\x58\x0e\xf2\x2c\x18\x67\x56\xea\xcf\x30\x40\x56\x98\xc0\xe2\xcf\x11\xb2\x61\x84\xe1\x67\x2b\x02\x93\x22\x73\x77\x1d\x40\x0e\x7a\xe2\x59\x04\x16\x2a\x43\xde\x9c\xd4\x75\x4a\xb5\x0b\x9e\x55\x44\xbf\x49\x5e\x83\x60\x84\x67\x3d\x24\xb0\x9e\xfc\x6a\xe8\xf2\xbd\x0c\xd7\xe7\xe7\xf1\x5e\xb9\xcf\x1f\xe4\xb7\xb1\xfd\x2f\x63\x9e\x14\x62\x8f\xa6\x19\x7c\xc7\x28\x88\x29\x68\x88\xcc\x0a\x80\xc1\xc5\x43\xe5\x7b\x1a\x5d\x47\x73\x94\x8c\xa3\x97\x04\xba\x4d\x30\xd5\x18\x4f\xac\x22\xc9\x64\xe5\x49\xca\x81\x57\x74\x8a\x76\x4a\xa7\x7e\x8a\xa1\x87\x76\xaa\xf3\xdd\xfb\xc8\x9a\x61\x44\xd7\xcb\x53\xb1\xcb\x48\xa7\x71\x2a\xbf\x77\xd7\x2c\x21\x26\x1f\x7b\xf9\x9c\xc5\x48\xdb\x46\x44\xc9\x43\xb3\xf4\xf9\x34\x9e\x63\x39\x31\xcd\x1a\xf4\x79\xe0\x67\xcf\x4f\xdb\xb2\xee\xde\x23\x73\x0c\x7f\x8e\xbd\x30\x0d\x3d\x6e\xdd\xb9\xe5\x6c\x67\x98\xc4\xea\x43\x23\xa3\x01\xa3\xe0\xe9\x4e\x93\x8f\xe5\xbd\xd9\xf9\xe8\x6d\xbe\x81\xe4\xc9\xd7\x7b\x3c\xe5\x72\x87\xa7\xdd\x5a\xf0\x9c\x0e\x17\x9f\xd5\x57\xdf\x86\x09\xf3\x8d\x70\xbf\xd7\x29\xf3\x4d\x72\xb9\xd7\x61\xd9\x4c\xc9\xb6\x78\xe9\xfd\x36\xd8\xcf\xc3\x8e\xb4\x61\x3e\xf7\x3d\x0f\xd9\xb9\x73\x7b\xea\x2b\x96\x39\xca\x62\x5f\x39\xdb\x76\x1f\xb0\x6d\xf9\xc0\x43\x4e\x3d\x4d\xe7\x98\x4f\xfd\xdd\x75\xd6\x28\x0b\x05\xb2\xef\x97\x21\x59\x25\x8f\x05\x87\x0a\xe5\xa8\xfd\x39\x9a\x1e\x9d\xdb\x9e\xde\xc9\x30\x9e\xe9\x3a\xb8\x27\xde\xa1\xf1\x20\xf7\xf5\xdf\x0a\x45\x7d\x90\x80\xea\x94\x6b\x9c\x72\x53\xa4\xd3\x70\xee\x7a\xe9\xee\x3a\x28\x0c\xe7\x51\x6c\xab\x4f\x43\x47\x23\x90\x2f\xeb\x4a\xd1\x2f\x2e\x2c\x91\x97\xdd\xca\x82\x1b\xd4\x29\xc9\x18\x39\x38\x54\xd6\x8a\x9c\xa6\xd3\x34\xd5\xd4\x4b\xc5\x29\x8b\xdd\xf6\xf5\x3e\xa9\xd4\x73\xe7\xe1\x34\xed\xf2\xb4\xf1\xb5\x29\xe2\x77\x0a\xd6\xc7\x4e\xb5\x27\x5f\xa3\xf2\xf8\xeb\x0d\xd6\x73\xae\xf9\xda\xfd\x56\xe6\x22\x23\x03\x19\x15\x7a\x3a\x35\x9a\xf4\xc2\x42\x2d\x42\xce\x90\x75\x71\x48\x7a\x46\xac\xe6\xad\xac\xd7\x86\x15\x82\x7b\x9e\x56\x16\x69\x45\x3b\xa4\x53\x77\x9e\x7a\x18\xa6\x68\xbe\xdd\xb9\xf3\x8d\x80\xe1\xf3\xfc\xd2\xfb\x7d\x9b\xe3\x2b\xe9\xd6\x77\xc7\x9f\xfd\x9e\xfd\x6f\x05\x63\x1f\x42\xe6\x08\xc1\x18\x71\x74\x68\xd2\x09\x19\x88\x0a\x1d\xd8\xe2\xb2\x8b\x58\xe6\x53\x48\x60\x9c\x57\xb6\xa3\x1d\x98\x90\x94\xd1\x01\xac\xec\x95\x07\x9f\x74\x04\x6f\x93\x8a\x10\x92\xeb\x11\x20\x62\x07\x9c\x58\x97\x38\x24\x85\x60\xa2\xb8\x08\x13\x2b\x99\x24\xbb\xef\xc1\x13\xe4\x5c\xbc\x87\x29\x02\x74\x59\x13\x18\x22\x2e\x8f\xda\x57\x04\x27\x3b\x93\x04\x81\x1c\x84\x5c\x22\xc5\x58\x44\x62\x0d\x0b\xb0\x36\x89\xf9\x86\x89\xca\x82\x15\xeb\x11\xeb\x9c\xf2\xe0\xc1\x4b\xc1\x04\x49\x39\xa0\xe0\x21\xdb\xa0\x3c\xa4\x9c\xc0\x70\x52\xcd\x14\x3a\x78\x0d\xc1\x10\x04\x7f\xea\x21\xba\x50\x95\xaf\xb2\x78\x82\x12\xa7\x21\xf8\x0e\x18\x69\x2b\x06\x2e\x8a\xdb\xe7\x53\x02\xef\x90\x81\x11\xe3\xa9\x85\xe0\xa8\x72\x0e\x30\x64\xd5\xfe\x18\x65\x8c\x06\x1f\x50\x39\x88\x14\x3a\x9a\xa1\xc0\x13\xc2\x64\xd9\xe9\x01\xc3\xd2\x54\xb6\xf2\xd6\xc3\x62\xf8\x83\x0c\x3b\xe9\xb2\x31\x4e\x8b\x69\x0c\xa7\x11\x88\xe0\xdd\xb5\x4e\x80\x9e\xb4\x87\x90\xfd\xa9\x3d\x47\x84\x88\xbd\xcc\x32\xf5\x19\x3f\xb3\x4a\x10\x8d\x6d\x10\x30\x71\x6b\x93\xf2\x60\x64\x3b\xdb\x90\xd3\xf2\x2c\x21\x12\x89\xe5\x29\x4b\xce\x49\xbc\xbb\x2d\x59\x75\xe1\x2f\x84\xe4\xbe\x21\xd2\xf3\x8a\xcf\xaf\xf8\xfc\x9c\xf8\x7c\xb0\xbc\xf4\xf0\x7b\x1b\x0f\xbf\x07\x6d\x25\xe5\x4b\xe4\x1d\xb2\x67\x0b\x39\x62\x55\xb6\xb0\xf9\x51\x8c\x41\xf8\x35\xcb\x33\xfd\xbc\x12\xa7\x90\x54\x06\xcb\xca\xe9\x4a\x84\x64\x2a\xcf\x4d\x99\xa4\xaa\xbb\x6b\x07\x39\x58\xb1\xf4\x73\x27\x18\xc0\x26\x27\xf6\x30\x41\xe6\x79\xeb\x72\x25\x8e\xb5\x93\x18\xe4\x18\x2d\x59\x94\x65\xec\x3a\xb5\x53\x02\x1f\xa9\xe7\xc0\xd8\x78\x12\x21\x60\x50\xe8\x21\x38\x95\x21\x88\x9b\x39\x4a\xa1\x78\x72\xe1\xb7\xb1\x94\xa3\xa5\x1c\x55\xaa\x2e\xe5\x10\x4e\x75\x29\x49\x4b\x51\xdf\xae\xe0\xf6\x3a\xa2\xcf\x3d\xa2\x9f\x7f\xf8\x30\xaa\x6e\x6e\xea\xd1\xbb\x72\x6c\xe4\x5d\xb5\x48\x35\xbe\xc4\x8c\x46\x13\x15\xa2\xbb\xdf\xa8\x35\xe6\xdf\x16\x36\x6a\xe5\xeb\x41\x92\xbc\x73\xe2\xec\xf5\xcc\x28\xe6\x1d\xf9\x3c\x45\x70\xd8\x60\x80\x68\x19\x6c\xe1\xdc\x7a\xb0\xfe\xac\x24\xc3\x0c\xf6\x6e\x69\xff\x37\x10\x58\x52\x66\xea\x32\xa0\x3f\x95\x54\xe7\xd6\x40\xc2\x33\x8a\xcc\xa6\x0c\xb8\x38\x0d\x04\x39\x4a\x99\x32\x14\xe9\x3c\xf0\x18\xf7\x30\x42\x4c\x53\x4c\x40\x54\x2a\xd4\x52\x21\x3f\x36\x55\x82\x68\x01\x5d\x23\x75\xe8\xd2\x58\x56\xb0\x6d\xa3\xa5\x64\xc9\x3c\x0d\x08\x91\x1a\x2d\x95\x63\x00\x53\x76\xc3\x9f\x71\x02\xbe\x0e\xc0\x13\x06\x60\x61\x33\xdf\x7d\x6f\x9b\xf9\xa8\x30\xf5\xc4\x6f\xb1\x16\xc7\xc5\xa8\x31\x3c\xd3\x76\x31\xce\xb6\x8b\xf3\xec\x5a\x93\xbc\x78\xad\x49\x9e\x5d\x6b\x92\xdb\x6b\x4d\xae\x8d\xac\xe4\x13\x10\xe7\x64\x52\x19\xb3\x76\xca\xf5\x68\xd9\x81\xd9\x78\xe6\xfd\xac\xc3\x1a\x39\x4b\x72\xd1\x6b\xab\xbc\xa4\x23\x20\xaf\x58\xc6\xe5\xa7\x2c\x6f\x01\xb1\x7c\xc5\x45\xf1\xbf\xef\x84\xcf\xbd\x0e\xdb\xfd\xe4\x6c\x9d\xcb\xf6\x07\x97\xc3\x6f\xc7\x3d\x5a\xc7\x83\x2f\x07\x3f\x8c\x62\x98\x87\x02\xff\xb1\x9e\x7d\x68\xf9\xfe\x47\x31\xac\x76\xb6\x8c\x43\x90\xc8\xd9\x90\xc8\xa6\x92\x42\x03\x06\x5d\x85\xe0\xc5\xc8\xc2\xb7\xb6\xf1\x46\x83\x73\x56\x43\x4e\xbe\xa3\x59\x30\xd0\x40\x91\x75\x24\xcd\xb9\x38\x5c\xce\xdb\xd8\x5e\xd9\x9b\xea\x68\xb0\x89\x55\x8e\xa4\x21\x24\x0f\x98\xbc\xe4\xe5\x24\x15\xb6\x67\x49\xf8\x79\x5f\x36\x47\xf7\x64\xf3\xea\x9c\xc5\x9a\x0e\x18\xca\x60\x53\x00\xf4\x09\x22\xba\x36\x8d\x6c\x73\x01\x25\x0f\x61\x1e\xc2\xf5\x96\x6a\xb9\x56\x65\x14\xd7\xa9\x25\x63\xe6\x17\x4e\x37\x6b\x72\x69\x6e\x98\xf5\x26\x9c\xca\x16\xdb\x39\xd2\x94\xfb\x7d\xf7\x5e\x4c\x0a\x23\x37\xd2\x3a\x06\x80\x75\xf3\x53\x03\x4e\x63\x87\xdb\x0a\x28\x47\x7a\x9c\xe5\x10\x05\x14\x91\x75\xca\x24\xb0\x90\x74\x63\x89\x44\x4a\x62\x18\xda\x01\xf2\x91\x53\x81\xe3\x7a\xc5\x48\x14\x29\x43\x74\x24\x19\x18\x1e\x56\xb6\x8d\x6c\x6b\x2a\x2f\x26\xa3\x94\x3a\x1c\x6d\xa4\x26\xee\x4c\x14\x8b\x52\x5a\xba\x90\x09\x7d\xb0\x97\x97\x1b\xed\xe7\x1e\x62\x90\xb2\xe7\xb6\xd2\x17\xc9\x6a\x5e\xe2\xac\x90\xf3\xd8\x3e\xbc\xce\x8a\xa7\xcd\x8a\x17\xcc\x69\x5f\xb1\xf6\x15\x6b\xf7\x1d\x0f\x1e\xcf\xae\x42\x58\x72\x62\xbb\xf9\x56\x86\x03\xd3\x8e\x6f\x9a\xfe\x64\xb2\xa5\xe8\xc3\x6f\x83\xde\x7a\x43\xf3\xca\xc5\x9d\x2f\xce\x76\xe4\xb9\xe6\xa5\x58\x93\xa6\xd0\x69\xf3\x18\x9d\x00\x9d\x95\xf5\xed\xd4\xbe\x27\x40\x2c\xe7\x91\x39\x85\x85\xe0\xa3\x9a\xc7\xcc\x9f\x6d\xfe\xf2\xa5\x2d\x84\x59\x4c\x5b\x0a\x8b\xde\x5e\xd6\xdb\x23\x87\x50\xd6\xf3\x58\xca\x3c\x3d\xfc\x8c\x48\x70\x48\xfa\x97\xa6\x11\xe9\xe5\xd2\x88\xdf\x6f\x2f\xea\xd1\xa0\x9e\xd4\xe3\xbd\x1b\xbc\xeb\x49\xd7\xf7\x78\x17\xd2\xec\xdf\xe6\x5d\x4f\xfc\x45\x4e\x42\xb7\x4b\x48\x84\xf7\x0b\x48\x87\xba\x2f\xb8\x5a\x3c\x60\xf1\xcb\x2f\xbf\x2c\x11\x8a\x45\x0d\xca\xb0\x36\x89\x60\x0c\x55\x08\x24\xe6\x5b\xfc\x9c\x21\x6b\x24\x40\x3a\xb3\x40\x59\x39\x20\xc3\x23\x48\xc4\xc8\x42\x34\x9f\x2d\x21\x44\x48\xb6\xd1\x08\x3e\xa3\x0a\x90\x49\xca\x42\x49\x86\x6d\x32\x05\x64\xe5\x38\xbe\xf5\x8d\x03\x17\xac\xf2\xe0\x7d\x47\xfc\x19\x50\x06\x9f\xc1\x05\xc8\x81\xa3\x9a\x08\xe8\xb3\xe6\x36\x75\xc0\x46\xc1\xf2\xc8\x78\x11\x12\xa7\xd0\xe0\x7c\x96\x32\x48\xcf\xcb\xd0\x40\x99\xc0\x12\xcf\xd3\x68\xb9\x2e\xcd\x75\x85\x33\x8c\x90\x29\x8a\x5b\x84\x2d\x6d\xd7\xd2\xf8\x00\xe2\x9c\xc0\x24\x01\x83\x9c\xd2\x77\x33\x1b\x39\xf0\x39\x31\x22\x2f\xa2\xa3\xa5\x70\xf2\xf7\xe5\xb3\x2e\x0c\xcb\xe8\x65\x53\x2e\x32\xe5\x40\xa6\x45\x65\x5e\x67\x2a\x2f\x8e\x29\x10\x62\x07\x8c\xf1\x80\x36\x30\x38\x80\x1c\x18\x4f\x60\x43\x04\x63\x2d\x50\x04\xf1\x01\x41\x60\x9c\x85\x58\x81\x23\x9e\xf1\xf3\x73\xd7\x48\x1e\xa8\x91\x53\xdf\x18\x6c\xe5\x20\x07\xaf\xca\xb3\x34\xd7\x82\xec\x15\x7a\x97\x94\x5c\xa3\x2b\x8f\x59\x66\x9b\x34\x18\xb9\x98\xcb\x44\x30\x12\x52\x4e\x06\x92\xd5\xe5\x34\x39\x32\xb1\x43\x8c\xe2\xda\x41\x3c\x40\x80\xe7\xe9\x1b\x35\x98\xc4\x8f\x2c\x73\x54\xcb\x7e\x1a\x90\x67\xd8\xc7\x33\x0f\x4e\x89\x7d\x61\xc5\x03\xe9\xe6\xe4\x8e\x42\x6e\x1d\x35\x44\xe2\xbf\x59\xb8\x35\x91\x01\xd0\xe1\x06\x58\xc0\x20\x05\x83\x23\x02\x93\x1d\xf8\xd8\x80\x31\x01\x8c\xe1\x21\x01\x13\x7c\x47\x8e\xa4\x27\x20\x04\x24\x1e\x69\xc0\x14\x81\x2c\x02\x3a\x92\x7c\x14\xc0\x47\xf1\xf2\xc0\xf0\x33\xc1\x72\x0f\x31\x7a\x30\x31\x01\x91\x6d\x00\xc9\x02\x62\x25\xee\x2b\x54\x79\xb6\xad\x89\x29\x2a\x0b\x8e\x11\x01\x30\x30\xe4\xe5\x7c\xbd\x23\x30\x9e\x7b\x6a\x2c\xa0\x63\x60\x85\x50\xda\x8a\x99\x5b\x65\x75\x69\x31\x13\xdc\x90\x89\xd9\x17\x8f\x4f\x10\xc0\x12\x0f\xaf\x71\x1a\x6c\x14\x00\x73\xbb\x8c\x6f\xe1\x1e\x4a\xa1\x86\xb8\x46\xe9\xa5\x29\x6e\x07\x04\xeb\x35\x10\xa5\x52\xb5\x8d\x0e\x88\x91\xde\x52\x04\x17\xb9\x65\x40\x26\x30\x96\x58\x8b\xe0\x72\x02\x4a\xd4\xe3\xac\x8c\x55\x5c\x8f\xc1\xb6\x22\x29\x36\xc9\x4b\x03\x28\xc3\xdb\x01\xb4\xfc\x66\x03\x10\xc9\x88\x26\xb0\x2e\x94\x51\x20\x2f\xbe\x34\x08\x9c\x74\x31\x24\x9e\x4b\x6d\x5f\xb9\x8b\x46\x00\x1a\xc1\x78\x5b\x3c\x03\xc4\xd4\x70\x32\x2e\x39\x57\xcc\x03\xad\x2a\xcf\xd6\x94\x14\x88\x82\x22\x88\xa9\x91\x6e\x63\x48\xcc\xeb\x3c\x8f\xa7\x14\x82\xde\x81\x61\x02\x80\x5c\x46\xf4\x80\xd9\x6b\x20\xc3\xec\x06\xac\x17\xd1\x40\x32\x1a\x6e\xa1\xe3\x31\x4f\x5a\xba\x6f\x4d\xe6\x32\x3d\xa0\x71\x1d\xc1\x68\x20\x24\x6e\x08\x4f\x64\x1e\x24\xcf\x13\x00\x30\x63\xe9\x91\x00\xc6\x83\xb7\xc4\x33\x33\x31\xc0\x70\x2a\xc0\xea\xb0\x48\x50\x86\xc7\x86\x32\x3c\x4e\x26\x49\x3b\x02\x32\x9e\x51\x66\x08\xa3\x0f\x72\xcb\x1c\xa0\xe1\x82\x7c\x4b\xaa\x3c\x05\xb0\x8c\x03\xdc\x1f\xce\xec\x82\x00\x3c\x30\x6a\x73\xa1\xa9\x29\x93\x07\x7d\x66\xfc\x4b\x51\xb9\x85\x93\xf3\x16\x3c\x23\x1d\x72\x22\xc6\x34\x06\x53\x08\x60\x18\xd9\x6d\x02\xc3\xd8\x9e\x23\x20\x01\x72\x97\x63\x96\x61\xb0\x19\x65\x97\x3f\x38\x4e\xc2\xc2\x0c\x82\x61\xfe\x4b\x19\x50\x4e\xe9\x3b\x30\x48\x22\x5d\x30\x61\x31\x21\x73\xd7\x04\x58\x68\x88\x09\x14\x58\x87\x60\x11\xc1\xf3\xf0\x63\x06\xcc\x05\x03\x0a\xca\xd9\x28\x9e\x5c\xc0\xbb\x02\x6d\x3d\x03\x77\x10\x3c\x67\xac\x61\x51\x43\x40\x61\xa2\x4c\x6a\x1e\xa7\x50\xa8\x09\x31\x16\x39\x2e\xd1\x32\xff\x0f\x28\x93\x80\x73\x15\xfc\x44\x9e\xa2\x56\x70\x5d\xb7\x63\x20\xae\x2d\x98\xd2\x08\x9c\x4d\x10\xd1\x26\x6c\x41\x2d\xaf\x09\x04\x01\x99\xb8\x77\xc0\x78\x2e\xc6\x4a\xdf\x0b\x62\x13\x0a\xe8\x05\x61\x18\xa7\x30\x31\x26\x09\x83\x60\x9c\x2e\xf6\x1d\xcc\xa2\x64\xb0\xad\x8b\x32\x0b\x0c\x4f\x3d\x21\x3a\x89\x5b\x05\xe2\x64\xa3\x11\xe4\x37\x86\xda\x39\x8a\x1d\x01\xb3\xf1\xcc\x36\xc0\x44\x71\xda\xc3\xd2\x22\x95\xf6\x93\x60\x2c\x77\xdf\xcb\xd4\x65\xfa\xc9\xb4\xa5\xe0\x68\x14\xb2\xe7\xb4\x18\x26\x00\x09\x72\x0a\x9c\xb8\xfb\x42\x74\x25\x95\x06\x97\x5d\x81\x7b\xc8\x42\x94\x39\x61\x92\xf9\x5b\x28\x37\x8f\x02\xb3\xa6\x32\x5f\xa5\x06\x1f\x04\xfd\x84\xca\x09\x96\xe5\xf9\x52\x63\x32\x4e\x5b\x70\xd1\x35\xe2\xd8\x86\xe9\x61\x47\x5c\x9d\x14\xd4\x10\x6e\xc0\x24\x4f\x90\x9d\x81\xe5\x25\x84\xb1\x44\x86\x13\x99\xc0\x6a\x70\xc6\x41\x19\x1e\x9e\xb9\x5a\x60\x2a\xc3\x9a\x62\xe9\x90\x41\x86\x9e\x8c\x64\x4b\x38\x42\x2a\x72\x31\xba\x54\xe8\x8e\x50\x69\xee\x9c\x8f\x42\x7b\x74\x99\x27\xd2\xa3\x44\x1c\x2c\x53\x52\x40\xc4\xa5\x72\x19\xd4\x4e\xcc\xc4\xd4\x3d\x09\x2e\x82\xc9\x85\x50\x61\x64\xe8\x7b\x2f\xa0\x13\x3c\x66\xfc\x75\x09\x2c\x4f\x61\x4f\xe0\x58\x74\x65\x12\x23\x9e\x52\x50\x24\xf6\xcc\x78\xca\x2f\xa1\x11\xb4\xe5\x12\x7f\x66\xca\x94\x55\x79\xb6\x0e\x2f\x0c\xb0\x00\x61\x29\x55\x59\x7c\x7f\x94\x67\xcb\x51\x8d\x34\x21\x32\xd1\x16\xa2\xcb\x4d\x14\xe8\xc8\xe0\x30\x16\x64\xdb\x62\x36\x31\x56\x71\x9c\xb3\xa5\x19\xcc\x09\x52\x4b\x61\x04\x6b\x2c\x93\x45\xcd\xa2\x80\xb0\x05\x06\xae\x08\xe2\x24\xc3\x15\x6d\xab\x82\xd8\x54\x94\x91\xbb\xf7\x19\x62\x56\x01\xac\x47\xc1\x2e\x27\x96\x42\x42\xfb\x79\x40\x5d\x05\xd6\x81\x75\xb3\xb6\x7a\xe6\x25\x73\x86\x23\x3e\x8e\x82\x46\x26\x26\x3f\x5b\xc8\x91\x75\x2e\x7e\x96\x7d\xf7\xfb\xa2\xef\xae\x21\x87\xa4\x4c\xc5\xf4\x44\xc9\x63\xb6\x6d\x6f\x51\x0c\x7c\xd0\xb3\xf8\x17\x58\xb8\x92\x29\x2c\xa3\x6f\xec\x5a\xf5\x8c\x45\x3d\x89\x3a\x63\xa8\x06\x29\xff\xee\x5a\x5b\x48\x99\xf5\xa4\x14\x1b\x04\x2f\x1e\x9b\xac\x97\x82\x78\xc2\xa5\x95\x72\xd0\x3a\xf0\xc9\x37\x33\x5e\xc7\x7d\xc8\xce\x81\x0f\x58\x71\x0f\xbc\x2a\xcf\xd6\xf9\x8a\x0f\x4c\x29\x3c\x86\xbb\xeb\x00\x09\x85\xd7\x72\x57\x88\x85\x00\x43\xf7\xe9\xc4\xee\x80\x21\x89\x90\xb9\xad\x3e\x58\x3d\x63\xcc\x1b\xda\xa0\xb9\x11\xc2\x43\x1c\xb7\xda\x88\x69\x57\xe9\x4d\x14\x1b\x30\x17\x7a\x10\xa8\x01\x9b\x22\xcb\x16\x45\xd6\x12\xfb\x2a\xcf\x64\x9a\x71\x98\x67\x6b\x11\x91\x98\x6d\x04\x43\x9c\x58\x83\x4b\xb2\x92\x95\xc5\x69\x8d\xa7\x0a\xac\xcd\xfc\x37\x77\x41\xc4\x24\xca\x37\x32\x88\x5c\xbf\x58\x54\x81\x75\xdc\xfd\xa4\xe4\xd1\xaa\x57\x10\x4c\x2e\xe6\x63\x0d\x8b\x39\x9a\x95\x70\x3f\xcb\xb7\x3c\x40\x0a\x28\x33\x5e\xc5\xd2\x07\xcb\x93\x65\xa5\xdf\x0a\xac\x49\x85\x82\x30\x37\x35\x4c\xef\x63\x2c\xfe\x91\x02\x57\x9e\x59\x8e\x9a\x91\x9c\x52\xbd\xd3\x3c\x86\x3c\xb0\x99\x67\x02\xf7\xa4\xe0\x9f\xe7\xa2\xfd\xbd\xda\xa9\xc0\x84\x82\x3c\xdc\xf7\x90\x2c\x24\x8c\xdc\xf5\xc4\x7f\xf3\x06\x30\x17\x8c\x99\x19\x78\x6a\x20\x27\x12\x57\x32\x5e\x2a\x97\x8b\xb9\x32\xce\x2d\x51\x5a\x14\x6a\x20\x8b\x5f\xa0\x18\x45\x50\xc2\xd5\x5e\xb3\x50\x81\xac\x6c\x2e\x1f\x42\x07\x5a\xf4\xd7\xc3\x4a\xd4\xca\xd1\xf3\xbd\x9b\x0b\x4d\x5d\x8d\x06\x0f\x3c\xee\xba\x21\xcf\xb7\xb1\x68\xd4\xfa\xb4\x72\x26\x8b\x2f\x21\xdb\x24\xc8\x28\x53\xcd\xa7\x8e\xf8\x8e\x33\x0e\x42\x0c\x10\x12\xf2\xaf\x18\xfe\xf1\xb0\x81\x63\xa2\x4c\x18\x20\xb3\x38\x3c\x8f\x6a\xb4\xc8\x53\x62\xd1\x88\x53\x0b\x31\xc4\x8e\x51\x80\xc2\x51\xc5\x4b\x50\x99\xea\xb6\xac\x70\x44\xb1\x60\x74\xd6\x41\x60\x7e\x11\x9d\x85\xc4\x2c\xdf\xc6\x08\xc4\x7c\x29\x79\x0f\x5e\xa8\x1a\x4f\x33\x31\xdd\x31\xd1\x82\x95\xe9\xef\x02\xa3\x43\xd2\x16\x72\xb0\xf2\x86\x50\xb6\x3f\x53\x16\x5d\x4d\x62\x84\xf3\xf0\xb4\x64\xb9\x86\x19\x91\x78\x95\xd3\xc5\x53\x2c\x33\x27\x2e\x16\x98\xf9\xb2\xf8\x01\x9e\xe9\xb0\x37\xb2\x44\x22\x0d\x48\x15\x04\x4c\xfc\x77\x4f\x27\xac\x2c\x10\x4d\xc5\x24\x8a\xe7\x8d\xac\x21\x39\x7f\xe6\xc1\x2b\x24\xf0\xb2\x80\x04\x9e\xcb\x4b\xe2\x48\xce\x59\x26\x68\x2c\xeb\x10\x37\xa4\x12\x8d\x47\x95\xe7\xdc\x05\x19\x27\xcc\x48\x4a\x98\x73\xfb\x9c\x71\x24\x9b\x99\xcc\xf5\x58\x92\x61\x80\x1a\xe6\x93\xa6\x15\x6c\xc4\x8b\x96\x13\xc1\x86\x95\x4e\x61\xe5\x19\x4c\x8c\x80\xb9\x44\x21\x8b\xcf\x29\x80\xb5\xb6\x28\x1d\x39\x82\x6d\xa5\x71\x91\x13\x33\x3f\xcf\xbc\xf8\xdb\x23\xc3\xcd\x67\x75\x4f\x43\x64\x6e\x47\xe2\x3a\x8f\x61\x16\x99\xb6\xf9\x64\xc1\x1b\x19\x0a\x27\x21\xe2\x13\x8a\xdf\x1a\x11\x24\x34\x4b\xc1\xac\xe5\x8b\x92\x2f\xb2\x4f\x08\x90\x99\x18\x26\x9e\xe8\x2c\x2f\x51\x28\xaa\xa6\x17\x1c\x63\x7d\x9d\x45\x30\x16\x38\x82\x2f\xc3\x63\x2d\xb5\x2c\xd6\xe5\x02\x2f\x54\xe5\x39\x23\x1a\x24\xc7\x0e\x62\xe8\x08\xe1\x66\x2e\x65\xc1\x93\x18\x99\x3a\x66\x1e\xfc\x16\x42\x62\xd2\x9f\x58\x12\x4b\x26\x9d\xb0\x84\x2c\x9e\xfa\xa8\xac\x68\x32\xc3\x0a\xe5\xc5\x3a\x59\x1e\xa3\x58\x64\xcc\x5c\x30\x5f\x17\xb4\x96\x79\xa1\xdb\x79\x41\x41\x04\xb7\x00\x9e\xc1\xc1\x2f\x89\x91\xa3\xa8\x1e\x77\xd7\x8c\xd0\x3c\x88\xd1\xf9\x46\x7b\x31\x13\x80\xe8\x8a\x93\x6c\xc7\xa2\x52\x93\x20\x7a\x46\xdb\x94\xd2\x59\x59\x54\xf5\x8d\x96\x40\xc5\x5c\x53\x31\x90\x20\xdb\x78\x26\xcb\x79\x9e\x69\x5d\x04\x8f\x49\xcc\xe5\xb2\x53\x0e\x6c\x20\xf1\x89\x1c\xa8\x48\x07\x15\xf3\x4c\xab\xca\xb3\xc5\x19\x69\xd4\x59\x14\x0b\x5d\xf1\x8c\x26\x0b\x0c\x72\x6a\x72\x4a\x10\x2a\xf0\x16\xe5\xfa\xef\x39\x02\x26\x91\x63\x99\xb1\x80\x61\x85\xc4\xb0\xe2\xe1\xc0\xfa\x04\x8e\xdf\x9d\x63\xa1\x0c\x82\x38\x0b\x63\xc5\x24\x83\x47\x82\x8c\x51\x84\x06\x62\x79\x95\x43\x5a\xe5\xc7\x23\x8d\x09\x02\xcf\xfd\x12\x64\x35\x87\x31\x61\x11\xa1\x16\x52\x19\x68\x27\x65\x25\x89\x04\x12\x01\x35\x59\xb0\x3c\x5f\x2d\xb1\xb8\x97\x18\xaf\x22\xcf\x43\x08\x0b\xcd\xcd\x22\x49\x4e\x35\x4f\x83\x5e\x01\xfe\x8e\x63\xa2\x40\x5e\x05\x71\xd9\x19\x55\x68\x1e\x71\xec\xfd\x9e\x8a\x6f\x3e\xf7\xbe\x89\x33\x3c\xec\xe0\xfb\xc6\x12\x9e\x25\xf3\xfe\xa3\xef\x9b\xb2\x3f\xfa\xec\xfb\xf6\xc2\x1e\x73\xf8\x7d\x13\xfb\xfc\x46\xf6\xf0\x5f\x19\xe8\x2b\x03\x7d\x65\xa0\xaf\x0c\xf4\x95\x81\x7e\x8b\xb6\x2a\xaf\xd4\xf9\x95\x3a\xbf\x52\xe7\x57\xea\xfc\x4a\x9d\x37\xab\x37\xc3\x7e\xb7\xd3\xaa\x06\x0a\xaa\xdb\x49\xcf\x68\x09\xba\x19\x0d\xa7\xfd\xc5\xc3\x19\xdf\xce\x62\x55\x86\x64\x3c\x63\x4d\x20\xb1\x03\x48\x56\xd9\x9e\xf6\x72\x49\x10\x42\x22\xe5\x39\xaa\xc7\x01\xf1\x8e\x89\xbf\xc9\x49\xd9\xd3\x00\x84\xee\xcc\x81\xcd\xa1\x64\x96\x14\xfe\x6c\x96\xe0\xee\xfd\x42\x5c\x95\x04\xcf\xd2\x0c\xdb\x8c\x51\x4e\x16\x9f\x13\x18\x6f\xdb\x27\x87\x13\x4f\xc3\xb2\xe0\x7c\x96\x99\xde\xcb\x25\x12\x0e\x62\xd0\x16\x9c\x4d\x77\xd7\xe8\xc1\x99\xa0\xcc\x19\x13\x2f\x9b\x38\x1e\x05\x73\xfd\xac\xa2\xb5\x02\x83\xe6\x02\x5d\x07\xbc\x95\x0b\x0b\x02\xbf\x58\xc1\x52\x63\xac\xe6\x96\xb4\xeb\xed\x77\xd7\x9a\xb9\x5b\x70\x8a\x67\x1f\xa0\x22\x6c\xee\x2b\xd7\x2b\xaf\xaa\x34\x69\x01\x1d\xfe\xfe\x37\xef\x56\xce\xc6\x56\x1f\xf6\x9b\xde\x2c\xa4\x59\xb7\xb9\xe1\xc8\xfd\xc6\x36\x0b\xa9\xbe\xfc\x7d\x03\x7f\x9a\x55\x5d\x84\x18\x85\x41\x22\xda\x8e\x6c\xe5\x9b\x04\x21\x7a\xe6\x57\x4c\x03\x48\x18\x97\x2d\x9c\x23\xb8\x5c\x76\xd3\xb2\xec\x8d\x3a\x20\xe6\xd3\x26\x79\x1e\x6e\x20\xe3\x21\x5a\xb1\x15\xe0\x77\x66\x1c\x60\x65\xff\x96\x89\x55\xb2\x85\x4d\xc9\xe6\x21\x91\x2f\xf6\x1d\x8e\x43\xf8\x25\xca\xc1\x76\xb9\x9a\x03\x4c\x66\x11\x80\x09\xb9\x15\xd6\x45\xb3\x8d\x4c\xb1\x7f\xf3\x2c\x9e\x14\xb1\x83\x23\x82\x65\x1e\x27\x77\x76\xe4\xc4\x5c\x52\x88\x15\x57\xe2\xb3\x6c\x00\x27\x66\x99\x59\x73\x53\x2a\x08\xc4\x0c\x76\xbe\x69\x86\x99\xe9\x58\x94\xad\xad\x48\x65\x7f\xdf\x05\x07\x16\x99\x11\xe6\xb6\x1b\x14\xc0\x33\xcf\xc4\xc4\x13\xb0\xfc\xba\xc8\x54\x0f\x52\xf6\x60\x12\x53\x5e\xce\x4f\x3e\x71\xd5\xc5\xa6\x20\x67\xd9\xf3\x65\xee\x9f\xc4\x99\x88\x1c\x20\x17\x59\x49\x5e\x08\xed\x94\x85\x9c\x8a\x49\xb7\x90\xef\x76\x7b\x54\x7a\x2a\x07\x3b\xe5\x16\x93\x36\x54\x9a\x8a\xb2\xb5\xe5\x5c\x6a\x9f\x33\xe3\x96\x28\xbb\x77\xca\x03\xba\xf2\x98\x59\xb7\x48\x84\xf1\x9d\x76\x97\x56\x20\x26\xa9\x65\x7f\x4f\x36\x7c\xa3\xad\xac\x6c\x24\xda\xf9\x76\xa2\x98\x07\xca\x9e\x67\xe8\x30\x5c\x51\x8c\x8f\xc4\x2c\x48\x43\xb2\x2c\xcc\x50\x25\x93\x17\xe6\x26\x5a\x21\xe5\xd6\x7e\x2f\x8a\x77\x00\x7e\xce\xad\xb7\xc4\x1a\x93\x1b\x81\xad\x7d\x04\xc6\x0c\x4e\xf6\x5c\x63\x66\xa4\x61\xf0\x58\xe6\x65\x68\x21\x04\x46\x38\x82\x1c\x64\xf7\x97\x72\x02\x1f\x03\x78\x12\x66\x1a\x18\x3b\x1b\x89\xcc\xa9\x03\x96\x9c\x6c\xfc\x7a\x2f\x76\x03\x21\x24\xd9\xcc\x61\x84\x16\x81\x86\x7b\xcb\x3f\x2e\x58\x31\xfe\x12\xa3\x22\x12\x04\x92\x84\x61\x86\x8d\x8c\x78\x52\x48\xd2\x90\x43\x2c\x2f\x14\xbc\x74\xbd\x18\x25\x05\x0d\x31\xc9\xce\x6f\x65\x21\x14\x0f\x0c\x66\x76\x9d\x40\x41\x32\xb2\xc2\xd2\x65\xff\x48\xcc\x09\x8d\x80\x5d\x0c\x00\xa2\x2d\xbb\xea\x26\x8b\x81\x40\xaa\xc0\xc6\xc0\x7f\xf3\x21\x96\x4d\xf9\x62\x46\x22\xdf\x8c\x3b\x21\x94\x17\x32\x7e\x0a\xd6\x16\x51\x33\xb0\x40\xd6\xee\xd7\xb6\x9b\xc8\x81\x43\x51\xc2\x78\x22\xb2\x68\x89\x91\xc4\xc8\xc2\x59\x49\x13\x03\x71\x87\xee\xde\x47\x88\x94\x58\xbe\xca\x3c\x8a\xcc\x30\x68\x51\x48\x31\x32\xcb\x32\xd3\x6b\x74\xe7\xb2\x63\xde\x11\xb9\xb3\xa0\xbe\x5c\xdb\x81\xba\xf5\xc4\x4a\xad\xb9\x80\x6c\x93\x32\x23\x10\xa1\x5e\x2e\xa5\x69\xe5\x7b\x5b\x60\x18\x4d\x86\x22\xa1\x5a\x5b\x36\xa4\x2d\xf1\xdc\xd1\x72\x01\x8d\xec\x9b\x27\xeb\x79\x50\x2b\x16\x2f\xf9\x6f\x0e\x97\xe4\x19\x7d\x05\x9a\x16\x8c\x6b\xb7\xf4\xa5\x10\xb1\x43\xb2\x34\x65\x44\x28\x6a\x4d\x6b\x9a\xe4\x85\x3e\x19\x01\x0d\x8f\xbc\x29\xa6\x7c\x81\xa7\x03\x83\xb9\x42\x60\x02\x97\xef\xcd\x02\xc5\x5a\x23\x74\xda\xb7\x4c\x62\x6a\xc6\xc2\x6f\x44\x2f\x48\x32\x2e\x68\x63\x52\x80\x58\x4c\x3a\x42\x07\x7c\xa1\x03\x21\x82\xd8\x2f\xc6\x0c\x96\xb5\xaa\xf6\x4f\x6c\x5a\x78\x7a\x8b\x02\x66\xc2\x94\x29\x5e\x95\x20\x67\x66\xa1\xfc\x9c\x59\x7e\x05\xb1\x71\x08\xac\xf4\x89\x17\x0d\x7e\xce\xe2\x64\x97\xd4\xf3\x04\x0a\x89\xc4\x81\x91\xd8\xc8\x44\xd9\x39\x27\x0b\x5e\x64\x72\xe3\x78\x0a\x95\xdd\xdb\xd4\xba\xd0\x60\xad\x2f\x70\x41\xc0\x24\x29\x78\xc8\xde\x81\xcb\x42\xaf\x50\x26\x8f\xc5\xc4\xc4\x97\x27\xa9\x2a\x21\x3c\x5d\xa3\x1c\x7b\x47\xa1\x10\x56\xe6\xb3\x90\xfc\xcc\xe0\x15\x02\x66\x05\xbc\x31\x95\x5e\x66\xee\x9b\xd8\x47\x89\xfd\x02\xb1\xd0\x68\xb3\xf4\x5e\x0c\x88\x02\xa0\x65\x5c\x6c\xc9\x62\xb6\xad\xf4\x30\x33\x44\x29\x3c\xc0\x84\x06\x1c\x16\x0a\xd5\x99\x59\x6c\x84\xd6\x7a\xc1\xd2\xcc\x8c\x41\x18\x85\xd8\x29\x18\x26\xf3\x38\x33\xd5\xf1\x4c\xc8\xbc\x8b\xaa\x3c\x5b\x6c\x16\x72\xe3\x62\xb8\xbb\xd6\x45\x84\x2e\x6c\x82\x6c\xe2\xaf\x42\xee\x11\x45\xe7\xa4\xf2\x62\x4d\x99\xf4\x62\x05\xc3\xf8\x29\xc6\x60\xce\xb7\xb6\x21\x3c\xf2\xe4\xc4\x48\x04\xdb\xb7\x68\x48\xa8\xad\xc5\xc2\x42\x98\xcf\x59\xd6\x34\x65\xca\x61\x2e\x64\xce\x17\xeb\x15\x5f\x2e\x8d\xe2\x17\x32\x42\xf8\x1c\x8a\x12\x10\x48\x14\x45\x12\x53\xa9\xc0\x90\x90\xee\x07\x64\xaa\x38\x15\xa0\x30\x9e\x8a\x59\x05\x2b\x8c\x62\xe1\xc0\xd2\x7d\x94\x79\x50\x2c\xc0\x84\xc2\x8a\x09\x10\x79\x70\xe4\x4a\xd5\xc2\x3c\x78\x40\x04\x3f\x28\x73\x0c\x6b\x2e\xc1\x06\xa6\xe7\x1d\xe1\x1e\xc2\x64\x84\x49\x14\xfd\xb2\xd0\x1e\x61\x14\xcc\x86\x67\x5a\xb6\x30\x12\xf2\xa2\xc4\xb1\xb6\xc5\xc4\x96\x95\x41\x59\x6e\x98\x53\x43\x61\x62\x41\x08\x07\x63\x85\x94\xc2\xf8\x27\x16\x87\xc1\xf7\x20\xb8\xd4\xe1\x11\x95\xb9\x27\x5d\x16\xf6\x29\xe8\xe2\x79\x96\x17\x74\xe1\x61\x17\x93\xc0\xd4\x30\x1c\x58\x72\x2d\x5e\x15\x8c\x75\xc5\xc3\x42\xa7\xb0\x25\x41\xb0\x48\xad\xc5\x90\xd8\x33\x79\x26\x25\x3e\xcc\xad\xde\x51\x71\x93\xa4\x5f\x3d\xf0\x76\xad\x7a\xd6\x73\xef\xab\xc7\x19\xce\xb5\x95\x1b\x71\xbf\xe0\x2c\x4f\x13\x14\x89\xd7\x59\xd6\xcc\x5c\x5b\xb7\x58\xbb\x73\xdd\x62\xda\x27\x75\x5b\x12\xbd\x73\x56\xb7\x50\x20\xae\x3b\x20\x6b\xc8\x65\xf0\x71\x66\x83\x28\xc0\xf1\xac\x02\xb2\xf4\x7c\x0f\x48\x84\x62\x63\x68\x2c\xf3\x91\x0a\xb2\xcb\xfc\x37\x8f\x67\x4a\x18\x42\x31\x7b\x66\xf2\x81\xc2\x41\x5c\x6b\x60\x99\x42\xe1\x64\x68\x33\x90\x17\x2b\x5e\xc7\x7f\xf3\xe9\xe1\x65\xea\xf6\x98\xbf\x0b\x1a\xc8\x1a\x43\x6b\xc3\xa8\x67\xf0\x8a\x73\x3c\x08\x2d\x22\x50\x6b\x55\x44\xc1\xc9\x3d\x3e\xc4\x00\x21\xa1\x48\x86\x8a\xdb\x9f\x96\x5e\x4b\x5a\x26\x1a\x34\xb3\x31\x2a\x85\xfa\x96\x94\x33\xc1\x10\x4c\x6b\xe1\x2f\x4d\x59\x14\xf9\xc9\xd3\x2f\xf6\xef\x73\x13\xe7\x07\x89\xb7\xac\x25\x3b\xf1\xcb\x61\xb1\xc3\x3c\x48\x40\xa2\xa8\x3d\x42\x10\x59\x84\xf1\xbe\x80\x29\xa6\x22\x3c\x5a\x31\x9a\x49\xcc\xee\x7c\xe4\xb4\x2d\xd5\x2f\x06\xa8\x99\x0a\xd9\x8b\xcc\x6b\xc5\xd0\x88\xdb\x9e\x45\x22\x8b\xa2\xf7\x8a\x34\x68\x89\xf5\x1f\x9e\x7f\x24\xf3\x25\xa3\x26\xa0\xc4\x42\x86\x9c\x16\xf1\xac\x4d\x8b\x04\x4a\xb2\x8c\x83\x3e\x17\x86\xe8\x2d\xcf\xdf\xbb\x6b\x1d\x64\x98\x2c\x13\x93\x0e\x41\x94\x55\x29\x96\x3f\x99\x51\x7a\x27\xd7\x69\x04\x59\x71\x73\x45\x1d\x17\xf0\x31\x21\x0c\x81\x27\x3b\x53\x07\x6f\x6c\x25\x42\x91\x5c\x0d\x18\xc2\x4c\xee\x8d\xcc\x31\x14\x32\x9a\x75\xc4\xbd\xbb\x95\xeb\x96\x64\x38\x72\x0a\x3a\x73\x0d\x9a\x20\xe0\x9c\xf2\x71\x14\xcb\x11\x46\x58\x21\x0b\x5f\x72\xaf\x5f\x10\xaf\x4f\xac\xc5\x1b\x2b\xfe\x76\x7d\x50\x19\x92\x4b\xe5\x7d\x71\x18\x7f\xc9\x0f\x73\xd1\x7e\x59\xd7\xdd\xf9\x8d\xca\x87\xdb\xad\x6c\xce\xf6\xad\xec\xbd\x3d\xc6\x91\x7f\x9c\x9d\xf1\xf7\x59\x4e\x31\x01\x79\xdb\x61\xf5\x5e\xdc\x6c\xa5\xc0\x3a\xbe\x8d\x4e\x31\x29\xcf\x8a\xc5\x69\xf0\x62\xbd\x1e\x92\x08\xb7\xb6\xbc\xb8\x2c\x47\x5b\xa8\xdc\xd0\x26\x77\x6f\xc9\x72\x9e\x93\x8b\x0d\xb3\x26\x66\xfa\x10\x04\x6f\x43\x16\x19\x63\xf1\x15\x9c\x2f\xce\xab\xe4\x89\xad\xbf\xe5\xf6\x05\xb2\x29\xaa\x58\xb1\x88\x64\x99\x64\xf6\x22\x0b\x60\x9e\x49\xb3\x20\x9c\x7c\xcb\x52\xd5\xfc\x1d\x52\x96\xb8\x90\x04\x99\x8a\x1d\x9f\x22\xc8\x28\xd7\x97\xf1\x9c\x0d\x41\xfc\x86\x49\x0c\x04\x79\xb3\x51\x66\x14\xb7\x4c\x68\x8f\x97\x55\x4f\x66\x4e\xae\x65\x4b\x26\x44\x91\x95\x90\xc0\x8a\x8f\xb3\xb2\xaa\x55\x6e\xc2\x24\x31\x7c\xd7\x85\x28\x3b\x27\x2b\xa6\x86\xc4\xd9\x58\xf1\x1d\x2d\x42\x61\x92\x43\x05\xe5\x82\x4c\x11\xe0\x3c\xfe\x9c\xc1\x06\xab\xca\x73\xee\x19\x28\x94\x65\x48\x31\x69\x2b\xda\x4f\x00\x44\xee\x90\x37\xbe\xd5\x8b\x18\xc8\x2c\x61\x89\x29\xba\x93\x83\x21\x7e\xe1\x55\xae\xd8\x44\x70\x88\x40\x72\xcf\xa4\xf3\x4e\x16\x7a\xb8\x3d\x16\x82\x83\x88\x72\x72\x85\xc4\x1a\xcf\x52\xfb\x2e\xbd\x11\xe3\xed\x6c\x93\x16\x08\x3a\x48\xc6\xcb\x5a\x64\x28\x16\xa4\xa2\x82\xb3\xa4\x17\x62\x82\xec\x88\x7f\x99\xc6\xe5\x72\xbb\x82\x15\xe9\x8b\xf1\x8d\x25\xa5\xd9\x6b\x12\x28\x00\xb1\xbc\x97\xc0\x67\xc6\xa3\x08\x4e\x9c\xc1\xe5\x28\x4b\xf5\x3e\x0a\xd6\x59\xed\x81\xda\xb7\xcc\x8a\xc2\x09\xb5\xf8\x2a\x2e\x27\xec\xec\xf0\xdd\x37\xbb\xe9\xf2\x3a\x2d\x5f\xa7\xe5\xeb\xb4\xdc\xb7\xda\x7e\x35\x1c\x5e\x35\xf5\xb7\xbe\xdc\x4e\xa8\xc4\x3b\xa3\x65\xdd\x23\x50\x39\xb8\x80\x45\xa3\x41\xb9\x81\x3f\xb1\x90\x99\x20\x84\x29\xcb\x61\xa1\xe7\x20\x87\xca\x81\xd8\x61\x97\x15\x30\x86\x62\xb2\x82\x11\x79\x4a\x40\xd9\xf5\x08\xb2\xcf\x1d\x84\x68\x23\x6b\xdd\x1c\x65\x83\xec\x66\xb6\xaf\x72\x0d\xf2\x22\x2c\x1d\x25\xff\x8b\x5b\xbd\x8b\x55\xfc\x3e\x1a\x9e\xfb\x1d\x12\xa5\x5b\x48\x06\x4b\xc4\x09\x2d\xcb\x51\x29\x88\x2f\x9c\x20\xb7\x67\x79\x46\x1d\xca\xac\xa1\x25\x56\xf4\x83\x18\x4e\x07\x48\x91\x65\x4d\x24\x27\x6f\x24\xfb\x00\xe2\xeb\x87\x42\x59\x80\x67\xb5\xcc\x7b\x6d\x21\xa6\x7c\xca\x88\x11\xa7\x04\x36\xf8\x2a\x03\x8a\x9b\x7c\x7e\x1a\x65\xe4\x58\x8a\xf8\xa6\x5c\x16\xba\xad\xfb\x39\xf9\xe5\x6b\x41\x63\x91\x6d\x2d\x50\xc0\xca\xcb\x1d\xcf\x05\x58\x86\x65\x48\xf4\xe7\x11\x6c\xc2\x1e\xcb\xc0\x52\x0d\x13\x3d\xcc\xed\x66\x44\x62\x39\xb2\xe1\x28\x2d\xed\x58\x92\x0c\xff\xf6\xb7\x13\xb3\x11\x50\xb2\x5e\x21\x47\x48\xe4\x04\x89\x2a\xf7\x18\x97\x95\x40\x1b\x43\x43\xc5\x65\xa9\xec\x4a\x24\x62\xa1\x38\x15\xd5\xc6\xe8\x20\x87\xad\x19\x32\xd2\xd9\xf2\x90\x98\x79\x8f\x03\x4a\x83\x94\x34\xa8\x03\x51\x4e\xf2\xa0\x88\xfc\xb2\x0b\x11\xb3\x2c\xa9\x7a\x57\xde\x97\xb6\x21\x7e\x76\xd6\xfa\xed\x53\xe5\xba\xdf\x19\x0d\xc7\xc3\xcb\xc9\xb7\x3e\x5b\xac\xb2\xbd\x04\x3e\xe2\x54\x9e\xa7\xf6\xdc\x2e\x0d\x8d\xf5\x76\xe5\x2a\x35\xb9\xd5\x3a\x2b\x7b\x4a\x6d\x1e\x9e\x4b\x3e\xe2\x72\xc6\x84\x7f\x3b\x31\x61\xf9\x0e\x36\x55\xb2\x96\xfa\xce\x09\x4f\xed\xb4\x64\x5d\xa2\x40\xfe\xe7\xf0\x8b\xd9\x54\x63\xf9\x39\x25\xce\xda\xd6\xb9\x21\xff\x2f\xbf\xfc\xed\x67\x93\xb6\x8f\xcc\xf0\xf7\x49\xf5\xcd\x0f\x0a\x18\x99\x3d\x9e\x52\x55\xde\xcb\xd3\x28\x34\x46\x74\xad\xa8\x96\xc3\x8d\x60\xbc\xb1\xf1\xee\x3d\x96\xbb\x78\x23\xf8\x0e\x6b\x97\xc2\x2b\x02\x02\x3a\x27\xbf\x64\x53\xd3\x6e\x4c\x7b\x2a\x96\x20\x5e\x1c\x10\x08\x47\xa1\x24\x46\x27\x3d\x04\x2b\x4b\x14\xb2\xed\xc3\xfa\x9e\x1c\xd4\x23\x71\x03\x30\x85\xec\x83\x64\x94\x75\x85\xc4\xc5\xca\xd1\x20\x7e\xe9\x09\xff\xe9\xc8\xf1\x55\x91\x6b\x12\xc8\x86\x4f\x02\xca\x53\xae\xdd\xca\x02\xb6\x9c\x2c\x33\x0e\x8c\x77\xed\xd2\x46\xc2\x0a\xc1\x1b\x11\x41\xca\xa2\xba\x11\x62\x2b\xbc\x17\xc8\xd1\xec\x20\x34\x4a\x61\x48\x8d\xd8\xbd\x20\x18\xc4\x0a\xc8\x33\xe9\x76\x85\x76\x03\x89\x8e\xce\xc0\xa1\xf2\x90\x60\x0b\x4e\x4c\x11\xb2\xc9\xe7\x11\xa2\x15\x06\x81\xde\xcb\xba\x3b\x59\xae\x20\xc9\x4b\x8f\x65\x23\x77\x77\xed\x21\xf8\x72\x92\x29\x75\xc0\xbb\x72\x31\xb6\x71\x99\x61\x29\xf7\x28\x27\xb0\xd9\x4d\xe5\xf0\xdb\xbc\xac\xe2\xde\x38\x14\x8b\x04\xf2\x41\x0a\x0b\x0b\x43\x41\x72\xb2\x97\x7f\xc9\x07\x39\x3a\x53\x64\x85\x29\xc8\x19\x50\x59\xb3\x45\x2e\x48\xfc\x35\x78\xc8\xc9\xb7\x6f\x65\x13\x29\x7a\x40\x79\xca\x3d\x8b\x51\x56\xbd\xad\x2c\xf7\x3a\x0f\x94\x34\xc4\x10\xcb\xaf\x2c\xe2\xc8\xa9\x24\x39\x1c\x4b\xd9\x6a\x2e\x88\x34\x93\xba\x55\xc4\x62\x96\x97\x99\x6d\x58\xa4\xbb\xf7\x72\x59\x67\x8b\x43\x72\x74\xbe\x5d\x9c\xf3\xf2\x2b\x06\x36\x06\x15\x43\x54\xc6\x93\x9c\x07\x16\x4a\x2d\xb8\x10\x99\xb5\x34\x08\xc1\x94\x7d\x80\x4e\x39\x53\x28\x87\xf1\xee\x97\xee\xe5\x30\x5e\x25\xf7\xe3\x3b\x4a\x65\x5c\xe5\xb0\xb7\xc1\x5e\x41\x13\xe6\xd8\xb2\x2d\xc4\x58\x17\x33\xc8\xe9\x73\x6a\xc4\x47\x1c\xc3\x46\x0e\x8f\x53\xb6\x65\xb3\xce\xb6\x67\x6b\x59\x1e\xb3\xb1\xe1\xb2\x00\xc5\xb6\x87\xbc\x2c\x52\x20\x75\x4a\xa0\x1c\x7a\x43\xe1\x94\x62\x4b\xe5\x48\xac\x12\x6c\xc0\x0a\xbc\x61\xc9\x70\xe6\x82\x5a\x8e\x39\x96\xe5\xb4\x38\x3b\x95\x6e\x12\xf7\x45\xf6\x18\xe5\x48\xb3\xe0\x71\xfb\x60\x21\x23\x89\x2c\x29\x67\x8d\x58\x10\x36\xd9\x55\x62\x6b\x43\xe5\xde\x69\xc3\x02\x3b\x43\x28\x4c\x91\x85\x57\x99\x46\xdc\x6d\x99\x5f\xb6\x78\xb5\x20\xf1\xe9\x61\x50\x36\xcc\x7c\x39\xbd\xde\x9e\xe8\x93\x46\x93\x65\xfc\xc5\x5c\x16\x57\x79\xee\x30\xce\x61\x2e\xb1\x98\x19\xe5\xf0\xee\x9a\x65\x6d\x31\x5a\xf2\x36\xf2\xdc\x92\xcb\xd5\x05\x89\xd1\x94\x69\xb1\x18\x58\xd8\xb8\xa1\xbb\x6b\x0c\x90\x18\x06\xcb\x79\x8c\x69\x71\x65\x29\x93\x69\x33\x2d\x89\x90\xf1\xbf\x4e\x70\x89\x00\xf7\xea\xaa\x99\xf4\xc4\x4e\xba\xee\xea\x51\x5d\x76\xe7\xc5\x87\x4d\x71\x76\xf3\x0e\xee\xea\xd1\x70\x8b\x9b\x1b\x31\xc2\x56\x93\xae\xf8\xaf\x29\x09\xc5\xcb\xcd\x7a\xf8\x57\xf6\x02\xc8\x4c\xd1\xaf\x5f\x8a\xec\xf6\x5d\x8a\xbc\x76\x13\xf2\xdd\xb5\x26\x85\xe6\x34\x4e\x35\xf5\xd0\x2c\x5f\xa5\x92\xea\x1c\x2a\xfb\xb8\xdb\x54\x16\xbe\x54\x39\x28\xa0\xba\xf7\xc6\x10\x8f\xbf\x95\xa5\x2d\xea\xb0\x4b\x59\xf6\x34\xe2\x01\xd7\xb9\x6c\xab\x76\xed\x36\x97\x83\xaa\xdc\x7b\x07\xcc\x6a\x75\x5f\x60\x51\xf1\x45\x20\xdc\x33\xae\xd6\xbc\x88\xfe\x7e\x5e\x3f\x11\xa3\x0e\x38\xe2\xf2\xee\xa0\x23\x29\x8f\x28\x69\xdb\x79\x94\x87\x14\xf5\x12\x17\xc4\x83\x42\xb3\x3a\xfa\xe3\xd9\xa8\xcf\x07\x7b\x61\x90\x91\xd4\xc3\x32\xe8\xf0\xb0\x0c\xdf\xc5\x82\xe6\x0b\x02\xeb\xca\xae\x91\x60\xf4\x3f\x2f\x87\xa3\x9f\x58\x20\xd0\x83\x6a\xaa\x27\xc3\xab\xab\xa6\xfe\xed\x85\xfb\x4d\x4d\x2b\x04\x6c\x3c\x87\xcd\x1c\x7e\x6a\x06\xbf\xbb\x6b\xa3\xe8\x41\xc3\x61\x54\xf8\x97\x43\xf2\x17\x03\xd4\xcf\x30\x18\x5e\x57\xdd\xbd\x16\xad\x4b\xa9\xd6\x6d\x5a\x4b\xf4\x7e\xab\xd6\xa5\x74\x5f\xde\xae\x15\x83\xc2\x74\xa8\xeb\xb8\x85\xf1\x1d\x0c\x07\x2c\xe0\x6f\x72\x1f\xb7\x70\x6d\x4e\xce\x21\xce\xfc\xa5\x83\x0f\x59\x05\x48\x11\xa7\x04\x39\xf8\x86\xb5\xb1\x20\xdb\x18\x99\x58\x0f\x66\x75\x31\x65\x37\x8d\x20\x6e\x24\x9c\xa8\xde\x11\x62\xd2\x0e\x5c\x3c\x77\xe0\x52\x4f\x03\x3a\x7f\xb7\x64\x7a\xd0\x9a\x24\xfc\xed\xe7\x84\x6f\xda\x65\x51\xf1\x33\x71\x06\xe4\xc4\x27\x24\x36\x9e\xf5\x57\xd6\x96\xa2\xec\x6c\x04\x51\xcd\x15\x41\x71\xb9\x6d\xe5\x90\x4a\x4e\x0d\x81\x0b\x9e\x5b\x92\xa4\x89\x29\x36\x0e\x2c\x3a\x59\xb3\x14\x9f\x50\x88\x7b\xab\x36\xa4\x32\x78\xc7\xf9\xa3\xac\x18\x5b\x17\xcb\xd2\xc4\x79\x02\xe3\x1b\x39\x76\xe3\x5d\x3a\x03\x12\x5f\x4f\x2e\xcd\x9a\x39\x4d\x90\x29\x34\x11\x12\x21\x07\x84\x38\xd5\x0c\x8a\xbb\x55\xef\x12\x8f\xd7\x0a\x8a\xe0\xf6\xb8\x9b\x1a\xb7\xe4\xdd\x2b\xa3\xaf\xe4\x7b\x91\xf4\x3f\x41\xf2\x96\x71\x31\xc5\x90\xfd\x09\x19\x30\xd9\x39\x15\xc1\x9b\xec\x48\x11\xaa\x00\x36\x18\x17\xf8\xd5\x9f\x10\x96\x83\x49\x58\xac\x3c\x18\xef\x49\x61\x52\x24\x97\xd3\x38\x8b\xfc\xe9\xef\xd3\x78\xe5\x4f\xd0\xab\x00\xe4\x8d\xcd\x0a\x3d\xc4\xe0\x55\x04\x4b\x84\x8a\x95\x7f\x4f\x5c\x59\x8c\x14\xe4\x6e\x7f\x31\x23\x34\x60\x28\xd0\x09\x7a\xc8\x96\x27\xb1\x91\xa5\x09\xf4\x60\xc5\xb4\xd1\x80\x23\x6f\x15\x3a\x6e\xb3\xe5\xef\x94\xf0\x2c\x41\x8e\x5e\x8e\x3e\x04\x44\x7b\x92\x20\x26\xe7\xb8\x2a\xb4\xc9\x44\xee\x10\x79\xb4\x2a\xf0\xbf\x13\xd7\xb6\x2f\x28\xcb\x8d\x91\x77\xab\xf2\x89\x94\x66\x4d\x20\x65\x21\x59\x97\x64\x7b\xc7\x61\xf4\xca\xf3\x5b\xa2\x6c\xcf\x31\x00\x46\x13\x4f\xe6\x29\x02\xf8\x44\x9c\x1f\x23\x84\x6c\x13\xbf\x71\x51\x64\x0a\x80\x66\x95\x11\xa9\xa0\x88\x4e\x22\x07\x27\xf9\xce\xf3\x44\x99\xf3\xe4\x79\x11\x09\x30\x78\xcc\xf3\xc2\xa3\x6a\xab\x3d\x6f\x9b\xc1\xa5\x38\x17\x32\x37\x2b\x18\x74\x9c\x23\x25\x72\xfc\x8d\x3e\xcb\x11\x10\xe7\x49\xc0\xe5\xe5\xa0\x91\x9c\x10\x13\xf3\xfb\x90\x29\x9d\xf0\xb7\xf1\xb2\x4e\x1e\xb9\x46\x74\xfc\x9a\x32\x43\xd4\x29\xb4\x27\x28\xb6\x4c\xd2\x38\x06\x3d\x8f\x2d\x0f\x06\xb7\xe4\x04\x53\x1b\x11\x14\x99\x79\x32\x7e\xb5\x27\xfc\x44\xc8\x18\xe5\xa2\x39\x47\x51\xda\x90\x43\x8e\x0a\x13\xf8\x90\x64\x84\x9d\xa3\xb3\x15\xe4\xfb\xf5\x3d\x26\x25\x65\x7b\x4f\x3c\x52\x98\xc5\x61\x26\x51\x92\xd7\x13\x64\x58\x3a\x27\xce\x77\xda\x44\x8e\x91\xcf\x9d\x60\x94\x70\xfe\x8c\xf7\x69\x22\xe7\x89\xf7\x65\xb4\x89\x98\x2d\xa8\xf0\xeb\xfb\xa8\xf2\x49\x64\x92\x26\xb1\x61\x96\xca\x70\x02\x73\xe2\x67\xa5\x18\xe5\xe7\x89\xbc\xca\x27\x0c\xda\x12\x35\x4b\x92\x54\x50\xe9\x64\x56\x40\x52\x71\x9e\x22\xaa\xfc\xeb\xf7\x21\xd2\xbc\xd2\x89\x57\x3a\xf1\x4a\x27\xbe\x0a\x9d\x78\x8a\x54\x34\x1c\x4d\x1e\x2d\x15\x6d\xce\xbb\x5f\x2a\x5a\xce\xf7\x12\xa5\xa2\x04\x96\x69\x93\x31\xc6\xe0\x89\x7c\x10\x98\x94\xe4\xa6\x30\xfe\x15\x93\x00\x6f\x0c\x8a\x4f\xf8\xf2\x7a\x8a\x8e\xe7\x4a\x46\x5c\x88\xf5\x10\xee\xf3\x96\xaf\xb6\xd8\xf3\xd8\x16\x5f\x42\x23\x67\x64\xac\x6a\x4b\xe0\x79\x23\x25\xb8\xd9\xeb\x29\x12\xf8\x64\xdd\x49\xf9\x0d\x1c\x1e\x0c\x4f\x9a\xfb\xef\x88\x2c\x91\xcb\xb7\x14\x91\x88\xe4\xe4\xa3\xb7\xe5\x7a\x88\x78\x46\xdc\x34\x79\x3d\x21\x84\x68\x4a\x30\x93\x18\x9e\x7b\x19\xe5\x8d\xd3\x9c\x94\x17\x4e\x31\x4b\xc8\x54\x5e\x72\xd3\x29\x46\x26\x37\x81\xe7\x93\xcf\xae\xdc\x1a\x9b\xc4\x13\x7e\x50\xe5\xc8\xa8\x9b\x7f\xa0\x3f\x47\x07\xd6\x9f\x62\x3e\xc1\xdc\x02\xc8\x09\x50\x8d\xb8\x4f\xf4\x02\x9f\xd9\x57\x38\x27\x73\x52\xde\xc9\xb4\xa9\xdb\x5c\x54\xdc\x2d\xe6\xf2\x72\x8a\x5e\x88\x93\xe4\x2d\x31\xb6\x2d\xb5\xe4\x6a\xbf\xce\x99\x0e\xc9\xfb\xac\xa6\x59\xae\xd2\x0a\x66\x19\xa5\x7d\x01\xec\xb9\x34\x58\x98\xd4\x7d\x47\xca\x15\xb8\xf3\x4e\x06\xb0\xc8\xc3\x49\x3c\x24\x06\xe9\x84\xc9\x58\x89\x47\x01\x5a\x16\xeb\x36\xfe\x8c\x72\xd8\x3c\xb9\x9c\xca\x77\x90\xc4\xa9\xa5\xa7\x06\x7d\xb1\x1f\x0a\x62\xd3\x67\x4c\x96\xe4\x91\x98\xb9\xd1\x69\x81\x31\x9e\x30\x8c\x6d\x5b\x02\x37\x60\x11\xc8\xab\x30\xce\x27\x02\x2b\x9a\x77\x6e\x09\xc4\xb8\x00\x62\x5c\x02\xf1\x2c\x57\x01\xe4\x0c\xc2\xfe\xc4\xb5\xf8\x5e\xc2\x97\xe0\xbb\x00\xde\x25\xe8\xce\xb2\x94\x06\xcc\x80\x7b\x0f\xdb\x45\xd0\x0a\x64\x0d\xcd\xbb\x26\xa0\x65\xfe\x4f\xa7\x04\xc1\x9f\x10\x50\x46\x53\x4c\xc7\xe6\xe8\x38\x43\xd0\x39\xca\x4a\x22\x6c\x31\x59\x7a\xc8\xa8\x8e\x62\x19\xbf\xf0\x91\x84\x5f\xb6\x93\xc9\x9c\xcc\xa6\xf2\x6c\xaa\xc9\x3c\x9f\xcd\xc3\xf6\xa3\x4c\xd5\x76\xca\xfe\xfa\x1e\xe5\x96\x62\x4e\x7d\x92\x21\x99\x10\x67\x9f\x2a\x97\x89\xce\x61\xed\xc7\xea\x3c\xcf\x65\x9a\x63\xb6\x96\x53\x48\xee\x78\x4f\x45\xe2\x12\x15\xe1\x54\xf7\xb1\xae\x34\xa6\x64\x9d\x7d\x2d\x35\xed\xa4\x9d\x50\x6d\x03\x66\x25\xd0\x3d\x15\xa1\x79\xc7\x7f\x7d\xef\x0b\x29\x3a\x71\xa5\x15\x85\x02\xb9\x16\x51\x24\xc8\xdd\xe3\x89\x6b\xd1\x44\x0a\x6c\x73\x90\x29\x43\x2b\xbf\x82\x73\xa5\x3a\x09\xce\x2d\x92\x48\x50\xbe\x47\x92\xdc\x22\x89\x94\xd0\xe6\x28\x55\xe7\xf2\x7b\xca\x9c\xbd\xad\xf9\x04\x97\xda\x83\x4b\x4d\xc5\xb6\x03\x2d\x45\x59\x28\x09\x97\x2a\x69\xbf\x0a\xba\x2f\x35\x0b\x97\x5a\x8c\xb9\xed\x49\xa1\x28\x0b\x5d\xc4\xa5\xde\xcf\xbe\xce\x31\x2c\x72\xeb\xf0\x4b\x0c\x89\x5e\xa8\x60\xff\xca\xea\x5e\x59\xdd\x2b\xab\x7b\x65\x75\xaf\xac\xee\x95\xd5\x3d\x82\xd5\x3d\x45\x37\x1d\x0d\x27\xc3\xce\xb0\x79\xb4\x7e\xba\x3d\xff\x7e\x1d\x75\x3d\xef\x4b\xd4\x53\x99\x71\x91\xb0\xaf\x08\xb3\xa5\x0b\xf9\xa5\x42\x47\xca\xd9\xa1\x58\xd6\x94\xee\x53\x95\x5c\x6a\x16\x37\x4f\x23\x79\x4e\xee\x53\xd1\x7d\x1a\x29\xf0\xd7\xf7\x4c\xd1\xd1\xc8\x9d\xdb\x39\xc7\x24\xec\x80\x82\x2c\xe0\x24\xf2\x85\x6e\x07\x2b\xdf\x01\x51\x18\x34\x31\xa3\x60\x8c\x8c\x24\xfc\x5c\xdc\xc3\x25\x48\xb2\x4e\x44\x90\xe4\xc8\x8b\x2c\x63\x45\xe6\x63\x18\x82\x2c\x90\x59\x9b\x24\x7d\x4e\x51\x56\xbb\x2c\x59\xa1\xa5\xc9\x14\x7e\x6b\x85\x0c\x12\x04\x8a\xd2\x6d\xca\x29\x4a\x73\xbc\x0d\xf2\xed\x83\x50\x4f\xe2\xd6\xf3\xb7\xb0\x15\x03\x3e\x53\x6e\xe3\x2d\x33\x86\x14\xb8\xf9\x09\xd0\x5a\x59\xba\x23\x0c\x89\xdb\x6b\x1c\xb7\x83\x59\x81\x6f\xbb\x4b\x52\x7e\x34\xa5\xbb\x39\x3b\x59\x53\x8b\x3e\x85\xf2\x1d\x0a\x03\x5c\x00\xcf\xaf\xef\x73\xf1\xff\x96\x99\xd1\xc5\x93\x0c\xde\x27\x27\x8b\x52\xd9\xa4\xac\x32\x50\x12\x2b\xc7\x04\x88\x99\xc9\x89\xf1\x1e\xe5\x56\x7e\xeb\xdd\x89\xb8\x66\x4b\xf2\xe9\x38\x79\x02\x83\x39\x0b\x74\x5c\x8a\xa8\xc4\x27\x58\x2e\xc3\x9a\xd1\x9f\x44\x88\x16\x31\x71\x71\x26\x12\x93\xdc\x1c\x5d\xf9\xf6\x41\xdc\x28\x91\x37\xa5\xb5\x26\xa4\x7c\x22\xbe\x18\xca\xfd\xe9\x8e\xc5\x3d\x8b\x39\xca\x58\xf9\x60\x93\x5a\x6a\xfa\xaf\xef\x3d\x38\x2f\xcb\x7f\x01\x82\x89\xf1\xc4\x83\x2b\x5d\xe5\x6f\x83\x4a\xfc\xf4\x31\x2b\x0c\x0c\x62\x39\xaf\x41\xce\xf9\xb2\x30\xc9\xf4\xd7\x05\x39\x09\x66\xc1\x26\xa1\xae\x81\x64\xfb\xd0\x40\x70\x5e\x7c\x50\x60\x34\x51\x25\x2e\x86\xdc\x89\x07\x93\xc9\xc9\x12\x5a\x88\x36\x89\x7f\x29\x0c\xb2\x60\x66\xc9\x23\x53\x67\xef\xc4\x1f\x95\xcd\x31\xc6\x13\x07\xd6\x24\xc3\xc4\xd6\x25\xe3\x94\x13\x56\x68\x1c\xf1\x1b\x9d\x38\xae\x37\xa2\x0f\xca\x81\x77\x62\x90\xee\xc1\x1a\xcf\xcd\x5e\xea\x16\xf7\x33\x64\x2b\x37\x49\x9a\x18\x23\x9d\xf0\x77\x40\x27\xdf\xc9\x07\xc5\xdf\x19\x93\x7c\x67\x9b\x95\x87\x68\x88\x24\x7d\x32\x64\x4f\xf8\x9b\x3b\xca\xf1\xa6\xc4\xa3\x21\xe1\x62\xc1\x48\xfe\x88\x4e\x06\xc7\x78\x13\x83\xa4\x8f\x24\x9f\x39\x5a\x29\xce\x60\x49\x9e\x64\xe9\x70\xa9\x39\xbf\xbe\x4f\x90\x43\x12\x1f\x70\x3e\x3b\x8c\x27\x09\xb2\x45\xb9\xa9\x2c\x58\xe7\x18\x40\x29\x16\x16\x97\x5d\x64\xe6\x9e\x4c\x42\x86\x77\x8c\xce\xfb\x13\x96\xa4\xd1\xc9\x4d\x50\xce\x07\x8e\x77\x9e\xe4\xe8\x09\x19\x1f\x04\x47\x30\x8a\x4f\x10\xef\x32\xcb\x63\x29\x1b\x96\x5d\x0c\x05\x2c\x18\x67\x3d\xaa\xc0\xa5\xc8\x62\x39\xc6\x18\xb9\xb3\xce\x99\xb2\x62\x9d\x18\xc3\x22\x78\x97\x44\xb4\x20\xcc\x5e\x44\x37\x97\x13\x8f\x56\x4c\x36\x97\x6b\x3a\x53\xf4\x67\x09\x62\x4e\x8e\x81\x19\x92\x25\xe6\x9b\x98\x50\xae\xf0\x22\xcb\xa3\x9b\x21\x1a\x9f\xe4\x66\x92\xe0\xb3\x60\x8b\xb4\xce\x01\x99\x4c\xfe\x24\x43\xf4\x59\xb6\x94\xad\x09\x58\xf8\x71\x68\x5d\x27\x78\xcb\x33\x66\x09\x58\xbf\x8a\xbf\x33\xef\x18\x9d\x58\x94\x28\xf4\x4b\xb0\x0b\x23\x79\x59\x13\x4f\xc6\x78\xf1\xfb\x10\xa9\xac\x99\x7b\x59\x4d\x0e\x8e\xa2\xcc\x7f\x62\x79\xd0\x83\x33\xc6\x08\x3d\x09\x51\x6e\x1b\xf3\x58\x36\x20\x28\x39\xee\x5e\xb6\x9e\xc9\x05\x23\xb7\xe0\x4e\x8e\xc4\xc8\x2e\xb6\xfe\xa9\x38\x4e\xb3\x22\x0f\xdb\x48\xc4\xdf\x14\x5c\x3e\x11\x47\x42\x28\x6e\xd4\xa2\x8d\x65\x9d\xbd\x78\x73\x33\x29\x05\x99\x3c\xc1\x8a\xfa\x63\x02\xd3\x13\x94\x73\xfd\xe2\xd6\x2e\x1b\x27\x4b\xf6\x29\x1a\x9e\x7b\x4e\x74\x17\x20\x13\xc4\xfd\x1a\x8f\x9e\x94\xee\x7d\x96\x6f\x2c\xc4\x14\x8d\x77\x05\x16\xbe\x08\xa6\x0b\xb0\xf9\xf5\xbd\xb8\x64\x63\x72\x94\xc1\x19\x2f\x3b\x01\x3e\x17\x6a\xe8\x93\x13\x19\x01\x9d\x09\x85\x46\x78\xd1\x49\x02\x57\x5f\x98\x81\x2d\x3b\x07\x51\xa8\x29\x89\xfb\x02\x07\x36\x7a\x59\xdd\x77\x36\x14\x89\x23\xe7\xc2\xb4\x4c\x4e\xac\x1e\x12\x4b\xf3\xb1\x28\x75\x28\x1e\xbe\x8a\x72\x15\x92\x4c\x51\x42\xf1\xdf\x07\x31\x60\x64\xc5\xc5\xc8\x26\x41\x2a\xa6\xe2\x1e\x32\x19\x21\xa6\xe4\xb2\x28\xa4\x31\x51\x90\xda\xbc\xc9\x5c\xba\x77\x51\x78\x4f\xcc\xce\x95\x6d\xa2\x96\x1a\x7a\x27\xd5\x61\x46\xa1\xed\x44\xde\x73\x7a\x24\x5b\xe4\x2c\x01\x8f\x97\x29\x29\xdf\xc1\x17\x1d\x60\x01\x3a\xbf\xbe\x2f\x15\x49\x3b\xa3\x25\x7f\x22\x9b\x1a\x4e\x04\x39\xc7\x53\x5c\x76\x3d\x20\x46\x93\xe4\x95\x64\x03\xc4\x40\xb4\x56\x88\x6e\x34\xe2\xce\xc0\x5b\x4f\x52\x29\xcf\x04\x9e\x9e\x4c\x1e\x4e\x84\x64\x93\xb8\xdf\x23\xd1\xb8\xe4\x08\x67\x12\x77\x7c\x32\x14\x09\x12\x53\xa1\x04\x01\x9d\x4d\x9c\xde\x5b\x2b\x08\xec\xb2\x14\x47\xd1\x08\x02\x65\xef\x85\x23\x04\xf1\xd9\xea\x21\x25\x86\x7c\x02\x1f\xcb\x16\x15\xc6\x20\xf1\x8e\xab\xc7\x00\x4e\x6e\xa6\x49\x60\x63\x96\xbd\xa5\x88\x56\xd2\x3b\x23\xf2\x26\x94\x3d\x16\x47\x91\xca\x57\x20\xb5\x02\x08\x41\xa4\xc8\x43\xe2\x98\x56\xf1\x50\x04\xa0\x60\xa3\xf2\x90\x42\x94\x52\x43\x40\x9e\x45\x91\x89\x13\x7f\xe7\x42\x42\x03\x39\x14\x05\x35\xba\xcc\x44\x23\x64\x17\xca\xde\x60\x48\xb2\x1b\xe4\x93\x0c\x04\x3a\xe1\x76\x2e\x05\xc1\xd2\x94\x44\x72\x89\x91\xb2\xec\x4d\xb9\x2c\x37\x2f\x5a\xd9\x06\x63\x10\x14\xaf\x21\x36\xdb\x82\xd4\xc9\x0a\x09\xc9\x31\xcb\x30\x63\x0a\x28\xf4\x14\x53\xa9\x6d\xa1\xed\xbf\xbe\x97\xbb\xb4\x44\x87\x4a\xc1\xdb\x7c\xc2\xa2\x85\x15\xee\x9c\x53\x0e\x3c\xd9\x93\x8d\x51\xce\x00\x9a\x20\x04\xd9\x45\xe6\x58\x19\xc8\x24\xc3\x5c\x17\x03\x62\xd9\x7f\x93\x62\xd0\x9a\x32\x79\xac\x93\xbb\x5f\x43\x62\xbe\x25\x43\x13\x58\x08\x40\xe3\x0a\xc3\xca\x5e\x68\x8b\xb7\x58\x40\x6f\x5c\xb9\x7a\x32\x64\x9a\x0d\xdd\x89\x87\x1c\xa3\x29\x27\x27\xd1\x67\x15\x00\x9d\x2b\x3b\x69\xd1\x89\x91\xd2\x52\xeb\x59\x42\xc9\x5e\x28\xad\x33\x59\x34\xb7\x60\xcb\x72\x08\xc6\xc4\x04\x35\x58\x8c\xc5\x81\x28\x7a\x29\x06\x33\x0f\x2d\x8f\x41\x11\xb8\x4c\x41\xf1\xc8\x84\x09\xe5\x3c\x31\xb5\x40\x13\xf1\x2f\x12\x95\xce\x18\x14\x82\x65\x28\xc9\xdc\x4c\x32\x57\x85\x80\x49\xe7\x92\xf3\x2d\x81\x2b\xc5\xa7\x68\xb3\x50\x10\xe9\x8d\x03\xe4\x31\x65\x0a\x62\x30\xb5\xa4\x4a\x9a\x95\xc9\x3a\xd9\x76\x43\x4f\x6d\xf9\x0c\x7b\x9f\xf9\x97\x49\x9c\x4d\x12\x1f\x63\xcc\x45\x1e\x94\xb1\xf1\x64\x3d\x8a\xfc\x67\x51\xa4\x86\xec\xad\xd0\x73\x9b\x91\xf8\xdb\x07\x99\x8e\x0b\xc0\xf9\xf5\xbd\xb8\x3b\x26\x81\xbd\x65\x01\x4a\xb6\xb2\xbd\x20\x2c\xf9\x76\xd7\x5a\x9c\x9d\x30\xd4\xcb\x2a\x18\xda\xb2\x39\x6b\x7c\x70\x42\x82\x12\x89\xce\x4a\xb6\x40\x29\x07\x5f\xd6\x43\xca\x12\x9a\x23\x59\xa0\x70\x85\x1d\x04\x30\xc9\x73\x6b\x85\xb3\xf3\x74\xe2\x5f\xa6\x4f\x81\x8a\x94\x98\x22\x7f\x9b\x60\x79\x2c\x52\xbb\x51\x8b\x10\x5a\xba\x19\x65\x6b\xd8\x42\x4c\xc1\x15\x21\xb8\x10\x2e\xe7\xac\x67\x39\x1f\xad\x2d\x83\x27\xc4\x21\x82\x11\x61\x3d\xb0\xa8\x23\xad\x5e\xec\xed\x77\xb3\xe2\xf9\xaa\x34\xbd\x2a\x4d\xaf\x4a\xd3\xab\xd2\xf4\xaa\x34\xbd\x2a\x4d\xaf\x4a\xd3\xab\xd2\xf4\xaa\x34\xbd\x2a\x4d\xaf\x4a\xd3\xab\xd2\xf4\xa7\x2b\x4d\x07\xef\x9d\xa9\x6e\x03\x55\xb7\x3b\xaa\xc7\xe3\xc3\x36\xcb\x76\x67\x58\xd9\x1d\xdb\x9c\xf8\x25\x6e\x87\xcd\xbc\xe5\xcd\x9c\xe5\xb9\xa2\xb5\x8d\x1d\xbf\xa1\x99\xff\xd7\x6d\x80\x46\xf3\x0f\x51\xdc\x66\xce\xc9\xae\xb5\x60\x48\xb6\x1d\xb9\xeb\x45\x83\xcb\x3a\x6a\x0b\xc9\xeb\xa8\x39\x5c\x9c\xcf\x13\x98\x24\x0e\xf1\x80\x50\x3c\x84\x9c\x31\x16\x4f\x71\xf9\x64\xf8\x94\xa5\xa4\xbb\xeb\x00\x59\x13\x78\xd7\x29\xfe\x34\x12\xea\xf6\xde\x21\x04\x71\x05\x97\x7b\x1a\xa7\x5a\xdc\xc3\xc8\x65\x03\x5e\x4b\x8a\xd3\x34\xd5\xd4\xa3\x0e\x78\x5f\x7c\xe7\xb2\xa4\xa2\xf1\x3c\xf6\x68\xe5\x64\xe1\x54\x83\xc3\x0e\x81\xf8\x29\xc1\xac\xe4\x82\xe7\xa0\x58\x1a\x16\x2f\x32\xd2\x5a\x90\x0b\x92\xa3\x26\x60\xe9\xdd\xe6\xef\xe6\x9c\xe5\xeb\x78\x3f\x71\xbc\x3f\x43\xb7\x3f\xee\x0c\xa7\xf5\xe8\x93\xee\xf4\xaa\xfe\x40\xc1\xa8\x1e\x0f\x9b\x69\x3d\xd2\x9d\x6a\xd4\x65\xea\x30\xaa\xbb\xfd\x51\xdd\x99\xa8\xee\xe4\x49\xa7\x33\xdb\x3b\xa6\x19\x37\x7a\x75\xff\xaa\x37\x29\xef\x4f\xf6\xd5\x20\xa2\x60\xb2\xf6\x84\x20\x15\xfe\x88\xac\x0e\x45\x61\x4a\xc5\x58\xca\x05\x96\x03\x93\x3d\x77\x67\xad\xb5\x57\x6c\x74\x62\xf1\x86\x25\xa6\x18\xa6\xda\x41\x72\x2c\x68\x88\x74\x24\xde\xed\x59\xff\x0b\xa2\x9c\x17\x53\x1c\xa9\xe3\x6e\x27\x45\x97\xf3\xe1\x93\xe1\xb0\xb9\xa8\x46\xb3\xe3\xe1\x5f\xd9\x51\x8c\xdc\x49\xe6\x7a\x1a\x62\x6e\xb4\xf8\x6a\xa2\xf8\x73\x90\x3b\x45\x42\x7b\xb3\x48\x7b\x58\x36\x03\x6b\x45\xe5\xcf\x28\x8e\xe0\x10\x0c\x9d\xf6\xda\xa5\xe2\x87\x53\x94\x21\xb2\x1a\xc1\xc7\x06\x28\x02\xa5\x29\x97\x2d\xea\x71\x3e\x23\x23\x2e\xff\x73\xa3\xf9\x53\xfb\x72\x20\xff\xa4\x5c\x43\xe5\xca\xf1\x98\x9c\xcb\x51\x89\x7f\x48\xa8\xbc\x8a\xf1\x94\x9a\xa5\x92\x7a\xcb\x55\xf0\xed\xc7\x92\xb3\x43\xf4\xc1\x5e\x5e\x2e\x21\xf1\xe5\xa8\xae\x27\xf5\xc7\x89\xbe\xec\x37\x93\x7a\x24\x6e\x7a\xbe\x3d\x5f\x6b\xdb\x07\x43\xc6\xe2\x05\x0e\xc5\x2a\x31\x59\xbe\x4f\x57\xcd\xdc\x80\x7c\x4b\x03\xf1\x10\x0e\x63\x8e\xd0\x80\x49\x41\x74\xa6\xb3\xb0\xf2\xc5\x0a\x9d\x0f\x96\x4c\x50\x67\x66\xe5\x6b\x31\xe5\xd2\xd7\xaf\xea\xbd\x3d\x92\x4b\x17\x39\x31\xaa\x33\x7b\x24\x46\x9a\xf7\x69\x97\xbf\x96\x53\xde\x7f\xfd\xaa\xde\x8b\xa8\x6c\xd0\xc6\x78\x64\xd4\xd9\xc2\x17\x42\x48\x88\x14\x1c\x4a\x11\x4b\x5f\xcb\x29\x8d\x94\x63\x21\x85\x4c\x99\xf2\x91\x2c\x31\x9a\xcc\x74\xef\x6c\x21\x98\x75\x14\x9b\x5c\x26\x52\x67\x72\xdf\x9d\x14\x77\x94\x58\x73\x31\x44\x3e\xa9\x33\x4c\x4b\x7d\x2e\x5a\x45\xa4\x1c\x8f\xe4\x5e\xc2\x24\x3a\xc6\x59\x02\xe3\xa3\xac\x1e\x2e\xa5\xce\x40\x2e\x60\xf6\x14\x96\xcb\x24\xc0\x94\x30\x04\x5f\x5a\x90\xad\xa5\xe5\xe0\x2d\xed\x5d\x08\xe6\xfe\xcd\x6b\x3a\x72\x40\xac\x4c\x05\xc3\xe9\xef\x83\x59\x6f\xb4\xd9\x91\x73\x0c\xa2\xe5\xaf\x2d\x59\x16\x82\x9f\xe5\xe8\xd6\x92\xdb\xa8\xd6\x47\xc2\x75\x35\xa8\xae\xea\xeb\x7a\x30\x79\x06\xd7\x59\xeb\x85\x3e\xdc\x83\xd6\xee\x76\x1d\x6a\xbc\xb7\xbf\x25\xbb\x9d\x6a\x1d\xd2\x8a\xdd\x26\x80\x3b\x5a\x30\xe9\xaa\x0a\xfa\xe3\xa5\xa8\x17\xeb\xc5\x08\x65\xa3\x83\xe2\x19\x26\xc0\xa4\x08\x1b\x8d\x10\x9c\x8e\x60\x2c\x0b\x42\x3c\xef\x1a\x1d\x41\xee\xa4\xc1\x33\xb1\x3d\x16\x47\xba\x09\x82\x55\x6d\xbc\x07\x59\x1d\x8e\xf6\xcc\x43\x92\xa3\xbe\xb3\x62\xbf\x1b\x35\xe2\xeb\x00\xe9\x10\x67\x85\xe5\xc6\x09\x41\x5c\x99\xe1\xd5\x8f\x47\x30\x18\x4e\xfa\x9d\x7a\x3b\x0e\x3f\x87\x90\x8e\xe6\x5e\x48\xcf\x2b\x32\x3a\x1a\x95\x0f\x19\x8b\x92\xe4\xf8\x63\xd3\x1f\xfc\xbe\x29\x21\xe6\x9c\xff\x43\x62\xdf\xbc\xfb\xcf\x6e\x7d\x39\x6e\x07\xaf\xdf\xfd\xe9\x4d\x55\xc6\xa6\x18\x83\x87\xb3\x08\x5e\xee\x97\x8c\xbe\xd1\xe2\xcb\x5e\x14\x20\x02\x8a\x5e\x6e\x81\xe5\x6f\xb9\x82\xcf\xbb\x33\xaf\x58\x50\x97\x93\xd9\xca\x82\xcf\x01\x92\x5c\xc8\x9a\x7c\x23\x19\x94\x64\xe0\x52\x14\x97\x52\x9c\x90\x94\xea\x6f\xc7\xf5\xfd\x60\xe5\xbf\x13\x7a\xee\x28\xb7\xf0\xb8\x37\xaa\x2f\x25\xb8\x7a\xb3\x09\xbb\x1e\xb9\xac\x23\xc4\xea\xf0\x45\x9d\x6d\xc9\x37\x2c\xe9\xac\x26\x7d\x89\xe4\x2b\x88\xdc\x89\x67\x56\xa1\x6f\xac\x78\xe6\x9e\x6a\x7b\x8a\x6e\xaa\xe9\x94\x23\xa7\xda\xde\xbd\x27\x54\xb9\x61\x05\x3e\x6b\x37\xb5\xa7\x68\xa6\xd4\x63\xf1\x75\x6a\xcf\x38\xea\xfb\x20\x52\x5f\x18\x14\x9f\x61\x52\x5d\x69\x46\xdc\x45\xec\x9a\x74\x39\xf8\xc5\x2f\x0b\xa2\x5c\x2b\x67\x01\xb3\x6f\xd0\x80\x38\x85\x90\x1f\x9d\xc0\x58\x54\xfc\x3c\xb3\x20\x3b\xf1\x28\x37\x34\xcb\xb5\x0a\xcc\x00\xc4\x4d\x93\x31\xe5\xaa\xa9\x7c\xf7\x1e\x21\xc9\x29\xa4\xe0\x2a\x66\x03\xc5\x77\xaf\x0f\x4e\xcb\x25\x94\x92\x2f\x49\x3e\xfb\xf3\x2c\xde\x81\x5c\xe5\x40\xce\x37\x12\x51\x8a\x9a\x67\xe7\x8c\x1e\x7c\xf0\x67\x44\x50\x96\xff\x8d\xbd\x2f\xdd\x28\x82\x44\xa9\x91\xa6\x4a\x4b\xf1\xbe\x66\x62\x12\x67\xce\xee\x1b\x75\xf7\x3e\xb1\x8a\x26\xee\x74\x15\x16\xe5\xd1\x18\x2d\x0e\xb8\xdb\x6f\x63\x8c\xb2\xdf\xc7\x9c\x78\x1d\xd8\x07\x0c\xec\x67\x98\xd4\xa3\x51\x75\x39\x1c\x5d\xef\xf5\xf7\xb6\x96\x72\xdd\xe7\xdb\x7d\x92\xfd\x7e\xdf\xd6\xd2\x7e\x83\xbe\xdf\x66\x88\xba\x01\xff\x56\xbd\xa2\xf9\x13\xf7\xf7\xbf\xfb\x56\x3e\x01\x8f\x8c\x80\xbe\x71\x90\xe4\xb2\xb7\x44\x38\xf5\x10\x9c\x3b\xf3\xe0\x0d\x0b\x89\x72\x9d\xc3\x9a\x6f\x35\x67\x9c\xf9\x1b\xb5\x88\x6c\x20\x5b\xb9\x81\x22\xb6\x99\xa5\xb8\xc4\x78\x40\xf6\x9c\xcb\xdf\x50\xc2\x62\x3b\xe4\xa6\x39\x23\x79\x49\xf2\x46\x55\xf2\xf2\xf3\xae\x34\x53\xf4\x70\xbb\xd0\x50\x3b\xd5\xa5\x32\x2d\x39\xa4\xb6\x67\x74\xc9\xc6\xc3\xd6\xa9\x07\x93\x7a\xf4\xd8\x23\x5e\x3b\x4b\xd8\x7b\xc8\x6b\x63\xee\x17\xc9\xc0\x48\xc5\x73\x7b\x4a\x53\x4c\x3d\x32\xe7\xf1\x14\xe9\xee\x7d\x50\x98\x4f\x9d\xec\x1a\x4c\xe9\xee\xda\x68\xb7\xfa\x75\x9e\x17\x3f\x7c\xf9\x90\xc3\xbc\x69\x29\xe1\xca\xd7\x62\xb6\x34\xcb\x86\x46\x21\xf5\x74\x9b\x54\x53\x4f\xd3\xc2\xeb\x79\xee\xa5\x29\x9a\xbb\x6b\x4d\x3a\x71\x54\x89\xb9\xbb\x36\xca\x2d\x7c\x7e\x1f\x4c\xe7\x7b\x1f\x8c\xc7\xce\x78\x18\x0d\x9b\xfa\x11\x8b\x41\x9b\xb2\xed\x59\xbd\x59\xcc\xf2\x42\x27\x34\x52\x87\x80\x50\x19\x25\x22\x46\x56\x4e\xbb\xb1\xbc\x69\x57\xfe\xa9\xf2\xa1\xca\x8b\xe2\x17\xd7\xba\x8a\x25\x90\x7b\xcd\x92\x42\xb0\x4e\x27\xe5\xa6\xd4\xc3\x30\xd5\xd4\x31\x1c\x27\x37\x6b\x58\xed\x74\xd2\x3b\x16\xeb\x5f\xd8\xa4\xfb\xfa\x00\xfb\x0c\x93\x4f\x37\xb5\x1e\xd5\xd3\xba\x6a\x54\x7f\x70\x73\x3b\x39\x6e\x97\x6e\xfe\x7d\x69\xbf\xe9\x65\x62\x64\xec\x10\xc8\xfd\xf0\x5e\x84\x5a\xe5\x95\xdc\xc5\x12\xbc\x2e\xf7\xc3\xc8\x35\xea\x41\x21\x24\xdb\x10\x64\x52\xfc\xe8\x20\x78\xd4\x1c\xa9\x08\x44\x82\xc8\xca\x82\xb3\xda\x81\xac\xcc\x44\x7e\xb3\x59\x07\x1d\xc1\x6b\xc4\xf2\x03\x4e\x31\xdc\xa3\x03\xf2\xac\xad\x26\x88\x0d\x01\x72\x19\x18\x4e\xc4\xec\x4a\x1c\xf2\x15\xf7\x07\x8a\x65\x67\x15\xef\xde\x8b\x01\x1a\xa7\xa4\xc4\x4d\x4c\xe0\x02\xb8\xf0\xb3\x18\xa0\xb6\x76\xa8\x6e\xb6\x87\xc6\xf8\xc2\xd5\x8b\x8d\x9a\x12\xeb\x5a\x55\x8c\x71\x59\x5c\xf6\x65\x0f\xcd\x6a\x90\x04\x49\x43\x72\x0d\x38\x02\x47\x67\x98\x39\x1b\xc9\x1a\x1e\x19\x7e\x67\x0d\x42\x59\x55\xaa\xbf\x7b\x1f\xc1\x5b\x95\x21\x35\x52\x10\x3f\x3a\x1a\x8c\x97\x1b\x12\x4d\x2a\x57\xc3\x24\x90\x0b\x70\x11\x42\x10\x9c\x53\x56\xfe\x81\xdc\xac\x0b\x72\xff\xa2\x15\xd0\x9a\xe5\x62\x42\x64\x44\x94\x6b\x88\xbc\xd5\x04\x54\x7e\x78\x5c\xb4\xe7\x6f\xa7\xbd\x2e\x77\xdc\x67\x60\xe5\xc5\xdb\x36\xe1\xdd\xb5\x03\x8b\x1a\x62\x6a\x58\x5e\x14\xa1\x54\xae\x55\xc6\x20\x17\x12\x04\xb9\xdf\xd0\x69\xcb\xff\x1a\x0d\x18\xc1\xe0\x77\x43\x1d\x5e\x91\xf7\x15\x79\x17\x28\xf5\xf1\x68\x38\x9c\xfc\xa1\xf5\x87\x5e\x7f\x52\x1f\xff\x70\x79\x79\xf9\x56\xeb\x6e\xdd\x19\x8e\xf4\xc5\x70\xd4\xad\x47\x1a\x8d\x39\xc6\x9b\x8f\x6a\x3c\x6c\xfa\xdd\x79\xe4\xa8\xea\xf6\x6f\xc7\x9a\x8c\x39\x76\x37\x1f\xdf\x6a\x7d\x35\xaa\x3e\x69\x6f\xcc\xf1\x0f\xe1\x32\x86\x44\xf3\x94\x75\x53\x4f\x2b\x96\x8e\x74\x30\xe6\x98\x05\xb2\x9b\x8f\xca\xdf\x7c\x54\x3a\xde\x7c\x54\xa3\xab\x8b\xea\x2f\xe6\x48\xb5\xff\xc1\xa4\x1f\x8f\x8c\x42\xae\x10\x0d\x27\xb2\x1b\x12\xe1\x8f\x6f\xb5\xbe\x18\x55\x83\xae\x36\xde\x1c\xff\x70\x99\xeb\x8b\x4b\x9a\x87\x71\x3d\x3f\xe4\x9a\xd0\xe7\x79\x58\xe2\x30\x5f\xa1\xb3\xee\xad\xd6\x93\x4f\x37\xc3\xf6\xda\x8f\xd2\xe6\x62\x28\x71\xdf\xe6\xd1\x68\x38\x2a\x31\x9d\x68\x9d\xf3\xb3\x3c\x9d\xe1\x60\x32\xaa\xc6\x13\x9d\x73\x3e\xfe\xc1\x18\x33\x8b\xb8\x6f\xcd\xb4\x1a\xfd\x65\xa1\x75\x3f\x2e\xa7\xe0\xb6\x2d\xa6\x08\x46\x52\xb4\x10\xdf\x95\x64\xfc\xa1\x9a\x74\x7a\x0f\x48\x93\x56\xd2\x24\x63\x7e\xfc\x0c\xf5\xf5\x45\x3d\xd2\x17\xd5\xb8\xdf\xd1\xdd\xd1\xf0\xa6\x3b\xfc\x30\xf8\xe3\x66\x38\xee\x33\x30\x8e\x47\x75\x53\x4d\xfa\xd3\x7a\x73\xba\xa3\x8d\xa1\x02\x94\x7a\x30\xd9\x1d\xab\xfe\x3a\xe7\xf6\x17\xc3\x8f\x7a\xdc\xbf\xeb\x0f\xae\x8e\x5b\x1c\xbb\x18\x7e\x7c\xbb\x31\x74\x73\x3b\xfe\x3f\xf6\xde\xb5\xc7\x71\x5d\x49\x10\xfc\x2b\xda\x3c\x5d\xe8\x72\x56\xca\x47\x96\x1f\xf9\xf0\x2d\xe3\x62\x7b\xb1\xd8\xfd\xd0\x0b\x2c\x76\x67\x30\x40\x21\xa7\xc1\xb4\xe8\xb4\xa6\xf4\x6a\x49\xce\x74\x96\x91\xe7\x67\xcc\xe7\xf9\x6d\xf3\x4b\x06\xe2\x43\xe2\x23\x48\x51\xb2\xb3\x6e\xdd\xbe\x07\xe7\x9e\x73\xd3\x54\x30\x18\x24\x83\xc1\x60\x30\x18\xc1\x71\x76\x74\xa3\xa7\x2a\x4f\x0e\x35\x5e\x93\x4b\x99\x07\x74\xa8\xf3\xf5\x0f\x3f\xce\x22\x7c\x7c\x98\x35\xd3\x24\xd8\x4b\xb6\x79\x92\x97\x84\xd5\xed\xd8\x7d\x3f\xc1\xbb\xfa\xd4\xfc\xe7\x21\xe8\x03\x2d\xe3\xe7\x7d\x7d\x22\xff\x35\x02\xe7\x2f\xb8\x4c\xd0\x5b\x47\xf5\x2e\x3e\xe2\x48\x20\xed\x81\x31\x7a\xf3\xcf\x74\x39\x61\x9d\x99\x05\xc1\xa7\x35\xbd\x61\xa2\x7f\x77\x1d\x5b\xd7\x79\xf1\x10\xac\x29\x89\xeb\x22\x8f\x9b\x33\xbc\xdf\x88\xfc\xba\x7a\x68\xf6\x91\x1e\xb2\x5f\xf3\x32\xdd\xe7\x09\xf6\xf3\x32\x7e\x8e\xb3\x53\x14\x57\x45\x82\xde\x1e\xe2\x2c\x89\xbb\xca\x45\xfe\xda\x3a\xaa\xb4\x38\xce\x9b\x4f\x09\x65\x5d\xc6\xcf\xcf\xb8\xd4\xb9\x70\xcd\x2a\x52\x61\x43\x04\x0d\x38\x8f\xeb\x86\x5a\x9f\x0f\xd1\xf4\x76\xb9\x6e\x86\x7a\x97\xe4\xaf\xfe\xf1\x61\x1f\x47\x11\xce\xd6\xc4\xe7\x89\x17\x3f\xe0\x24\x89\x8b\x2a\xae\xd6\x69\x9c\x89\x15\x71\xba\xf6\xd3\xfc\x87\x7f\xa8\x5a\xf2\xc8\x38\xae\xfd\xb4\xd2\x0b\x75\x28\x36\x22\xda\x07\x4a\x6b\x9c\xed\x71\x19\xd7\xb6\x41\x60\x37\xe8\x6c\x82\x1e\xae\xae\xd6\x7c\x4e\x48\x96\xa1\xf5\x36\xc1\xa8\x7c\x78\xca\xeb\xbd\x0d\x8b\x4f\x84\xdb\x0b\xbe\xb1\xb5\xb4\xcb\xb7\x87\x4a\x9e\xc4\x3d\x8a\xf2\x57\x4a\xb1\xf2\xdb\xc0\x48\x6d\x7b\x4f\x38\xc9\x5f\x2d\xad\x7d\x43\x65\x8c\x9a\x43\x2e\xca\x22\x1c\x7d\xad\xcb\x03\x7e\x34\x08\x8c\x16\x67\x9c\xf9\x45\x82\xb6\x78\x20\xda\x53\xcb\x6e\x75\x9d\xa7\x64\x11\x73\x0e\x0a\xd6\xf2\x37\xb2\x5e\xdb\x8f\x7d\x7d\x44\x4f\xf9\xcb\x58\x62\xea\xbc\x80\x29\x69\x3e\xc0\x64\x48\x4d\x90\x81\xd8\xe7\x49\x44\x98\x83\x30\xfe\xfd\xfd\x7d\xcb\x1c\x4f\x49\xbe\xfd\x0e\x70\x3d\xd9\xd6\xfd\xaa\x40\x5b\xfc\x90\xe5\xaf\x25\x2a\x0c\x0b\x01\x6c\xb4\xaa\x51\x7d\xa8\xfc\x78\x9b\x67\x80\xa8\x95\x85\x85\x4f\x49\xa0\x22\x2b\xe0\xf2\x8a\x4b\x28\x3a\xde\x0f\xc1\x3a\x45\xe5\x73\x9c\x51\x01\xcd\x46\xa0\xaa\xdf\x12\xfc\x40\xd5\x0b\x56\x44\xb1\x34\xfa\xc1\xa2\x38\x7a\xed\x58\xb1\x8e\x23\x84\xbc\xba\x44\x59\x55\xa0\xb2\xd9\x59\x84\xbf\xd7\x54\x02\x2f\x0b\x58\xd2\x90\xd5\xe3\x3f\xd5\x50\x77\xb6\x87\xb2\xca\xcb\x07\x26\x44\x19\xa2\xd0\x84\x89\x33\x45\x7a\x48\xea\xb8\x48\xb0\x4f\x4e\xb9\xa7\x5d\x9e\xd5\xfe\x0e\xa5\x71\xf2\xc6\x57\xfb\x9a\x94\x55\xf1\x0f\xdc\x96\xd0\xee\xd0\x75\x06\x8e\xa2\x28\xcf\x78\x25\xbe\x50\x51\x51\x60\x54\xa2\x8c\xcc\x68\x86\xd7\xf9\xa1\x6e\xc0\x1b\xf9\x8f\xa2\xa8\x11\xb7\xc1\x7a\x97\xe4\xa8\x7e\x68\xf8\x4d\x17\x98\xe2\x68\x11\x5e\x68\x36\x93\xac\x7e\x08\x07\xf5\xf4\x21\x8a\xab\x46\x20\x45\x27\x5d\x22\x63\x0c\x6f\x1d\x06\x4c\x0f\xbc\x67\xe4\xa7\xc4\xe9\x79\x81\xb6\x71\xfd\xf6\x30\x5b\x77\x3c\x3f\x0c\x75\x23\xcc\x2f\x8c\xb1\xfa\x08\x42\x2f\x4b\xe3\x3f\xd0\x80\xb6\xe8\xf2\x82\xa4\xdb\x3b\x75\xab\x80\xc9\x1a\x58\xa0\x2a\xf5\x98\x9c\xee\x4e\x3a\x5e\x73\xa0\x01\x14\x10\x46\xce\x7c\x3e\x07\x74\x11\xbc\x68\xfe\xe9\x16\x62\x23\xbe\xfa\x57\xf8\x6c\xba\x58\x8a\x4b\x96\xd1\xdd\x9c\x93\x02\xaf\xf9\xef\xdc\xb0\x34\xdb\x3e\x94\x38\xcd\x5f\x30\x11\x6c\xb2\x18\x73\xad\x46\x6d\xd6\xfb\x66\x5b\x98\xb4\x63\x3f\x5d\xc2\xbb\x02\x46\xe5\x76\xdf\x8e\xf3\xc2\x40\x1c\x05\x63\x72\x51\x1b\xdd\x46\x88\x2b\xa3\x1b\x88\xfa\xae\x2e\x34\x21\x99\xd8\x0d\xb4\x49\x4e\x8b\x54\x30\x8d\x07\xa6\x65\xa0\x1e\x04\xea\xc4\x7c\xb3\x27\xfa\xb8\xa1\xaf\x74\xc6\xe5\x6f\x9a\xfa\xaa\xb3\x9d\x23\x79\xad\x0a\xc0\x15\x80\x7e\xc5\x93\x13\xdf\x73\xc0\x21\xca\x8f\xa0\xcd\x18\xfa\xc7\x36\x7a\x46\xdb\x79\x7a\xd8\x18\x32\x89\x1e\x0a\xaa\xbd\x8e\x08\xb8\xd2\x29\x76\x55\xef\x8d\xa1\xf7\xe7\x6a\x79\x43\x69\xec\x16\x0c\x88\x8e\x8b\x44\x72\x4d\x45\xd5\x2c\xd2\x15\x2e\x18\x05\x8d\xe1\x23\x4e\x3d\x36\x9a\x68\xca\xc8\x86\xb0\xa7\xfc\xf8\x78\x6a\x35\xd7\x37\xaa\x1a\x72\x94\x6d\x79\xb5\x2d\xf3\x24\x69\x68\xad\xf3\xc3\x76\xbf\x4e\xd1\xb1\x5d\x31\xe1\x34\x5c\xe2\xd4\xd2\x9a\x22\x14\x05\xb1\x71\x67\x10\x1b\x8d\x58\x2f\xa8\x3e\xcf\x15\x1d\xa6\xcf\x0b\xca\x37\xc3\x9a\xe5\xb5\x8f\x92\x24\x7f\xc5\xd1\x30\x5c\x9e\x99\x62\x90\x83\xe9\xa7\x3e\xaa\x00\x2b\x80\x2b\xa5\x62\x03\xb4\xa8\x3b\xc6\x68\x7b\x5d\x14\xf5\x23\xd9\x1e\xca\x46\xcf\x34\xe2\x58\xde\xdd\xdf\xee\x9e\xd6\xba\x45\x46\x1f\x40\x3f\x43\x29\xe6\x13\x19\xe1\x1d\x3a\x24\x4c\xb5\x7e\xa5\x6c\x70\x1b\xc0\x6b\x4a\x3a\x9c\x29\xc3\x36\x58\x77\xed\xb4\x0b\x6f\xb6\x22\xfb\x73\xef\x71\x0d\x9c\x4a\x3e\xba\x7e\x5c\xe3\xf4\x44\xd7\x23\xdd\x36\xac\x1c\x09\x72\x4c\xcf\x17\x3a\x70\x8c\x6e\xda\x46\x68\xda\xb3\xc7\x34\xc2\x96\x98\xd4\xc0\x22\x18\xdc\x00\x84\x66\x2c\x9d\x40\x97\x4d\xc3\xca\xb9\x23\x8a\xcb\xaf\x65\x9d\x3c\x0a\x13\x4c\xbd\xa3\x1c\xeb\x81\xc4\xf4\x71\x81\x13\x12\x90\x55\xa8\x1a\xe1\xda\x29\x10\xaf\xa2\x00\x8f\x27\xd0\x74\x14\x26\x0a\x2d\x21\x74\x3c\x91\xa2\x05\x82\xcc\xe3\xb2\x38\xb2\xa3\x79\x9c\xc5\x75\x8c\x92\xf1\xb8\x3b\x63\x00\x65\x36\x37\xd4\x7c\x37\xb6\xe3\xbe\xd0\x6a\x65\x46\x08\xd3\x32\xf8\x38\x5a\x94\xd5\x48\xe9\x30\xae\xea\x73\xe9\x00\x5b\xfb\xd8\x5e\x43\xe3\xdc\x2c\xa7\xdf\x92\xbc\x59\x5f\xf4\x45\xf2\x97\x28\x7e\xf1\x76\x79\x5e\xe3\xd2\x7b\x3a\xd4\x75\x9e\xd1\x23\xc4\x4d\x1f\x14\x39\x48\x35\x2b\xaa\xa8\xdf\x08\x0f\xe3\xf6\x79\x16\xa9\x0f\x7d\x31\xd6\xa1\x4f\x43\xa5\xf6\xfb\xa0\x18\x2e\xe2\x85\x11\xc5\x28\xc9\x9f\x79\x45\xb1\x88\x42\x51\x4d\x8c\x16\x3d\x6e\xa2\xf8\x85\x3c\xaa\x89\x22\x0f\xb1\x3a\x16\x00\x1b\x86\xa2\x07\x41\xd1\xd6\x4f\x51\x9c\x89\x0d\x76\xbf\x85\xef\x85\xfc\xb9\xad\x7d\x22\x36\x2c\x72\x7f\x46\x6e\x19\x1f\x0e\x59\x84\x4b\x72\x7d\xd1\x33\x4b\xd0\x28\x5e\x83\x53\xd3\x19\xd3\x2f\x3d\x9f\xbd\x33\x69\x6e\xfa\x22\x6c\x21\x33\x04\x6f\xec\x4c\xbe\xb1\x71\x0c\x6b\xe2\x03\x99\xce\xc2\x6e\xd6\xc6\x47\xf0\xab\xc0\xa9\x0c\xb5\x2b\x2b\x77\x4c\x2c\x56\x34\xf2\x38\x53\x4e\xe9\x2d\xf5\xc5\xf8\x5a\x66\x44\x91\x2b\x06\xcf\x6d\x21\x0e\x46\x4b\xbd\x7a\xee\xb2\xd9\xa2\x7b\x25\xaf\x65\x11\x3a\x2e\x12\x88\xbd\xfb\xf9\xb1\x97\x69\xb4\xa9\x57\xa7\x94\xfe\x3e\xb5\x86\xfa\x77\xf2\x85\x3e\x5b\xf4\x32\xf4\x22\xbd\xd9\xcd\x13\x2f\x89\x9b\xa1\xa3\x53\xce\x9c\x29\x54\x21\x47\x8e\xd7\x0e\x68\x20\xfe\xd1\x90\x75\x12\xd3\x05\x23\xf7\xdd\x1b\x41\xd2\x26\x89\x05\x5b\x84\xdf\xcc\x83\x7c\x09\xd2\x19\xae\xa9\xa9\x34\xef\xac\xa7\xd4\x4c\x4c\x8a\x77\x09\x3e\x8a\x9f\x84\xe2\xfe\x1e\x48\x25\x08\x7a\x4f\x21\x8f\xbc\xa4\x70\x9b\xcc\xb9\x0e\xcd\xea\x8f\x1a\x91\x74\xee\x6b\x0e\x1a\xa3\xb0\xb4\x5d\x68\xef\x8c\x7f\xbf\x5a\x5b\xfa\x70\x67\xea\xc3\x74\x9b\x67\xbb\xb8\x4c\xa9\xb3\x0e\x4a\x70\x59\x83\xd2\x83\xc6\xaa\xb8\x99\xa6\x38\x3b\xf8\x05\xca\x70\xe2\xd1\xc5\xd1\x14\x34\x87\x94\xc7\x9b\x69\x9a\x97\xd8\xe7\x21\x2e\x9a\xf2\xcd\xb7\x66\xb6\xbf\x12\x2f\xd0\xa7\xfc\xf8\xf8\x85\x20\x21\xcb\x5c\xab\x9c\xc7\xd1\x96\xc7\xc5\xe0\xd2\x69\x2c\x2e\x30\xcc\xc6\xb5\x5a\x3e\x04\xe3\x6b\x5c\xef\x7d\x71\xa8\x3c\x26\x50\x70\x82\x6b\x7c\x83\xe8\xaf\x6d\x89\x51\x8d\x6f\x28\xf9\xd3\x6d\x5e\xbc\x35\x27\x0d\xfe\x9b\x82\xa0\x6c\x8b\x13\x56\x44\x09\x28\x71\x85\xeb\x47\xa9\xa8\x3a\x3c\xa5\x71\xfd\x78\xc3\xd8\x62\x4a\xbd\x96\x2a\x4f\x84\xa1\x7f\x3f\x12\xee\x68\xdb\x9a\xdc\xec\xeb\x34\x99\xd6\x38\x2d\x12\x54\x63\xea\xd3\xe4\x35\x82\x8b\x0a\xe8\x56\x86\xed\xf2\x32\x85\xd0\x49\xdd\x72\xaa\x41\x08\xa0\x86\x96\x3d\xaa\x8a\xbc\x38\x14\x64\xe4\x1e\x27\x37\xc4\x7b\x61\xba\x47\x95\xcf\x3b\x50\x97\x1b\xde\x99\x01\xc3\x4f\xf1\x90\x39\x88\x70\x8d\xe2\x64\x24\x22\x75\x6b\x32\x5d\x94\xab\x02\xce\xbc\x48\xda\x1b\x51\x60\xb1\x08\xdf\xcc\xab\x46\x04\x1a\xbf\x7c\x04\x2c\xfa\x3a\x12\x3e\x9e\x8d\x1d\x0e\x60\x63\xfa\x3e\xaa\x09\xfb\x52\xeb\x00\xa5\x35\xd7\x15\x2b\x8b\x4f\xfb\x20\xac\x42\xf5\x9b\xb8\x1c\xe1\x6f\x6c\x5d\x76\x1f\x5d\x16\x28\x07\x76\x5e\xa9\x1d\xfa\xc1\x4b\x76\x60\x55\x99\xb6\x0f\x5d\xc4\x1d\x65\x97\x5a\xcd\x9d\x37\x82\x62\x20\x76\xbd\xd5\x53\x59\xa5\x4f\x2d\x78\x87\x36\x44\xdb\xbe\xa5\xee\x3f\x63\x76\x91\x7f\xb8\x5d\xe3\x24\xb9\x03\xcd\x8a\xa3\x72\x31\x1a\xc2\x17\xa3\xe4\x36\xd8\x9b\x15\x47\xcf\x0f\x3b\xef\x61\xe2\x54\x39\x0b\x27\x6b\x67\x48\x95\x2b\x4e\xa2\xb3\xe0\x6d\xe7\x0b\xc0\xd4\x6a\xeb\xe9\x46\x65\x30\x7a\xcc\x53\x4b\x89\xb6\x4e\x95\x3c\xce\xd1\x13\xfa\x93\x9e\x21\x26\xa7\x9e\x26\x7f\xdb\xdd\xee\xee\x76\x48\x6b\x8e\x22\x36\x73\x35\x3b\x59\xaa\xd5\xd8\xc9\x05\xb8\xfc\xd9\xe2\x00\xaf\xde\xdd\xb6\x18\xc3\x0e\x31\x56\x0a\xff\x0a\x82\xd6\x41\x5a\xb6\x27\xb8\x70\x75\x77\x3b\x07\x87\x8a\x1f\x48\xe1\x81\x62\x5f\x81\x61\x92\xbe\x48\x83\xc4\xbe\xb8\x0c\x11\x05\x75\x1f\x20\xe1\x54\xdb\x3f\x3c\x02\x72\xc3\xca\x36\xb0\x54\xeb\x5f\x73\x3b\x47\x8b\x50\x71\xfc\x5b\x86\xcb\xdb\xd5\xcc\x7e\x50\xf9\xb0\x53\xc9\x65\x4e\x20\x83\x55\xdd\x5f\x49\x65\x66\xb2\x62\x17\xce\xc2\x85\xc9\xa3\xde\xac\x1f\x33\x4b\xa2\x19\x80\x99\x27\x2d\x1a\x32\x43\x61\x81\xe0\x38\xce\x50\xa0\x79\x23\x67\xa0\x60\x54\x9c\x47\xc0\x65\xda\x1e\xac\x7e\x2b\xad\x0f\xae\x4f\xdb\xbf\x94\xaa\x48\xa9\xb9\x14\x36\x91\xb6\x0b\x68\x9d\x22\x71\x17\x40\x47\x6d\x75\xc6\x3d\xdd\xa0\x4b\xb2\x08\xae\xf4\xdd\x80\xee\xd6\xac\xa3\x7b\x42\xdb\xd9\x76\xbb\xee\x94\x2a\xea\xa2\x2d\xbe\x30\xd1\x1c\x12\xec\xd1\x4a\x19\x78\x83\xe7\xae\x38\x72\xcc\xab\xe2\xd8\x22\x65\xd7\xe8\x3f\x5d\x65\xfe\x87\x37\xbc\xc0\x4f\xbb\x94\x79\xf0\xa6\x45\x99\x3f\x97\xb8\xaa\xa6\x71\x16\xe1\x1a\x97\x69\x9c\x35\xa3\x08\xcc\x8f\x19\xd6\xc0\x9e\x46\x78\xfb\x7c\x1a\xeb\x49\xf3\x6c\x84\x52\xe6\xbf\x0f\x4e\xe0\x8b\x1e\x50\x91\x5f\x9c\x40\x19\x1f\x19\x61\x87\xf3\x97\x19\x95\x89\xef\x8c\x35\x06\xf3\xe3\x79\x98\xcc\x7c\x6a\xc2\x0b\x48\xb4\x46\xcc\x2c\x83\x4f\xf4\xd5\xdb\x52\x91\x56\xfe\xac\x39\x14\x0a\x02\x89\x14\x00\x3c\xdf\x6a\xf0\x5d\xcb\x5f\xae\xad\x36\x33\x19\xd0\x7e\xb8\x91\x61\x1d\xed\x58\x52\x25\xd8\xa6\x25\x81\x98\xec\x5b\x10\x10\x74\xca\x02\xe0\xc0\x13\x97\x11\x4e\xb5\x81\x49\x80\x67\x1c\xd3\x64\x3c\xbd\x47\x36\x09\x7c\xbc\x9d\x6c\x38\x1a\x87\x53\xa0\x88\xf4\xf4\x12\x57\xf1\x53\x9c\xc4\xf5\x1b\x73\xcf\x86\xf8\x92\x94\x80\x8c\xc8\xbe\xc0\x9c\xc7\x3e\xf6\xb0\x1a\x85\x92\x79\x8b\x96\xa9\xcc\x24\x95\x8a\xdc\x23\x7e\x90\xd8\x45\xff\xc0\xf9\x83\x7e\x71\x61\x08\x02\xe9\x7e\x26\xa5\x88\x87\x4f\xf9\x80\x7a\x02\x49\x86\x0d\x56\xf2\x21\x0a\xfe\xb7\x38\x2d\xf2\xb2\x46\x59\xfb\x3a\x81\x3d\x07\xb8\x2b\x8e\xc2\x37\xe9\x4a\x6e\x09\x4b\x28\xda\x72\x1b\xf0\xc7\xc4\x11\x42\x48\x20\x33\x67\x74\x40\x2e\x1c\xd2\x42\x03\x9c\xd2\x7e\x03\x39\x46\xfd\xaa\x71\x8e\x02\xa0\x73\x10\x08\x20\x71\x52\x0b\x31\x96\xa3\x3a\x04\x76\xce\x6a\xe1\x46\x72\xd8\xb0\xfa\x7d\x9c\xd6\xaa\xdb\xfc\x79\x09\xc4\x33\xc4\x58\x48\x8a\x27\x20\xc7\x48\xdf\x61\x7e\x91\x40\x7a\xb8\x45\x84\x95\x79\x45\xfc\xa2\x72\x0a\xf0\x4d\xe4\x13\xfd\xb3\xc4\x25\xa6\xcf\x9c\x47\xc4\xef\xae\xca\x15\x83\x77\x97\x3c\x62\x23\xc3\xb9\x63\x70\x6d\x8d\x48\x58\x16\x5d\xcc\x8f\x82\x5e\x7e\xa2\x24\x7e\xce\x1e\x68\x64\x40\xc9\xd0\x5e\xa0\xed\xf7\xb6\x3c\xad\x48\x15\xa9\xf0\xbf\x1d\xaa\x3a\xde\xbd\xf1\x27\x2b\x10\x0e\x19\x39\x47\x22\x95\x92\x1f\xc4\xef\xb9\xe2\x45\xdc\x3d\x7b\x8b\x92\xed\xe7\xe9\x12\xa7\x9e\xef\xcd\x8a\xe3\xc4\x23\x05\xe1\x34\x6c\x4b\xc8\xd3\xfe\xf6\x81\x8c\x65\xb5\x74\x71\xc3\x2d\x4b\x46\x02\xb2\xac\x1b\x09\xce\x65\xf1\x88\x15\x80\x15\x24\x7e\x06\x97\x11\x00\xa0\xad\x25\x1d\x46\x5f\x50\x26\x18\x69\x55\x89\x40\xce\x4b\x4b\xa8\x34\x70\x7d\x89\xcd\x8d\x5c\x64\x83\x51\xc0\x34\xc3\xcb\x4d\x73\xc6\x6f\x5b\x50\x07\x47\x38\xf9\xc3\xe3\xd6\xaa\x11\xcd\x99\x85\x32\xf7\xa2\x65\x65\x40\xa7\x60\xcf\xd0\xcc\x90\xda\x5d\x0e\xe1\xfe\xf6\x79\xc3\xd2\xac\x8d\x04\xd2\xf1\xa9\xd1\x4d\x2c\xf2\x5b\xb5\x01\xb5\x7e\x52\x7f\x5a\xe9\xff\x46\x56\x7a\x3e\xc3\xd3\x7b\x9c\x7a\x33\x9c\x02\xa2\x1c\x7c\x91\x3c\x2a\x9a\x0b\x6c\xf3\x39\x49\x0f\xec\x44\xee\xd5\x8d\x51\xbc\x4b\xcc\x61\x9f\x60\x50\x9d\x73\x24\xde\x9a\x05\xc5\x11\x70\xd7\xd1\x30\x55\x05\x52\x03\xda\xb0\x9e\x8a\xf6\x02\x82\xad\xdb\x29\x96\x01\xcc\xb9\x90\x55\xd6\x70\xdb\x11\xc5\x2f\x30\xf4\x13\x8e\x4c\xef\x44\x17\xdd\xd5\xb6\xf6\x52\x94\x3c\x3a\x97\xbd\x1a\xf8\xf0\xce\x4a\x9c\x9e\x7f\xe3\x02\xbd\x82\x7b\xc2\x78\x17\xbe\x4f\x5f\x51\x99\xc5\xd9\x33\x80\x81\xb9\x29\xf2\x3b\x21\x14\x2c\xb7\xe1\xdc\xa1\x82\xe5\x0e\x7a\x87\xb6\x8b\x20\x04\x4e\x46\x00\xb2\x82\x37\x1c\x04\x81\x61\x04\xb4\x57\xaf\xaa\x72\xa4\x6a\x45\xaa\x3a\x44\xf4\x20\xed\xa9\x2c\x11\x6d\xa2\xf8\x92\x17\xa6\x83\xf8\x1a\x28\xe1\x06\x57\xfe\x83\xee\xb2\x28\x8b\x9b\x11\xc9\x9e\xe9\x0e\x46\x30\x4e\xec\x02\xd2\x5d\x7c\x0e\xa9\xe7\x46\x0f\x2c\x78\x87\x08\xe6\x61\x35\xad\x54\x0d\x12\xea\xe3\xb7\x80\x73\xf0\x38\xd0\xef\xba\x99\x9c\xb1\xf7\x9c\x85\xc8\xd6\x85\x56\x72\xdb\xbd\x2e\x4f\x5c\x6c\x7f\xb2\xe9\x1b\x9a\xb3\xa7\xf0\x6c\xbe\x5f\xc4\x31\x81\xc4\x34\xae\x29\x79\x6a\xde\xbf\x08\xd9\x05\xd7\x10\x18\x03\xa3\x52\xa8\x61\xcc\x21\xd6\x71\x9e\x0e\x68\xef\x75\xe8\x2a\x0f\xed\xfb\x87\xb4\xae\xc5\x83\x14\x70\xd9\x47\xef\x9d\x1a\xd5\x04\x95\x18\x01\xdf\x36\x38\x85\x4a\x9b\x5d\xdd\x3e\xaa\x30\x39\xf6\x31\x86\xeb\x90\xc3\x04\x7d\x8f\x22\xfd\x10\xc8\x16\x4a\x09\xc1\xe2\x6f\x42\x2a\xfc\x6c\x84\xc2\x15\xa8\xaa\x5e\xf3\x32\x72\x02\xea\x1a\x75\x81\x6e\x88\x71\x82\xeb\x25\x92\x0e\x98\x03\x88\x1b\x81\x6c\xfc\x7b\xc8\x63\x50\xbd\xc4\x35\x4d\xf6\x02\xb8\x11\xd6\x00\xf5\x91\x45\x60\x2c\x44\xd1\xd2\x46\x6f\xcb\x89\x0e\xfa\xc8\x38\x7f\x10\x74\x1f\xb9\x86\x6a\x66\xda\x4d\x15\x2c\x1d\x11\x0e\xc7\x5f\x70\x4a\x5f\x32\x29\x3c\x0b\x94\x75\x94\x03\x1f\x37\x30\x1e\x4a\x85\xf0\x81\xf1\x9b\x56\x02\x22\xef\xb8\x49\x2f\x54\x11\x13\x5e\x51\x7e\x83\x48\x39\x27\xa8\x45\x1d\x42\x60\x78\xa4\xa1\xa3\xfb\x1a\x4d\xb0\xeb\x3f\xa1\x72\x62\xe4\x8c\xf1\x55\x65\xd2\xc7\xe1\xd8\x9c\x45\x3c\x1d\x90\x41\xfb\x12\x28\x67\x87\xed\x52\x10\x8a\x93\x14\x06\xf1\x1d\xd8\x68\x28\x12\xce\x74\x8f\xd0\x5e\x44\x41\x9a\x51\x05\x3f\x83\x32\x5f\xc7\xab\x7f\x64\x18\xc1\xfd\xc3\x49\xf0\xab\x6d\x0c\xa8\x44\xdb\xbe\xdc\xf6\xc2\x46\x64\x08\x45\x52\x95\x7e\x7a\x86\xec\x25\x64\x05\x0f\xa1\x45\xa8\xd0\x4f\x89\xcb\xd6\x61\x5a\x9b\x6e\x44\xd9\x6b\xdb\x28\x74\x92\x09\x7d\x7c\x64\x86\xa1\x4d\xbb\x4a\x78\x03\x53\x98\x20\x34\xe4\x16\xf9\x0e\xce\x30\xfc\x5d\x43\xab\xcb\xf7\x91\x82\x16\x6a\xff\x2c\x54\x1d\xa9\x67\x8a\xfe\x13\x89\xda\xa5\x06\x04\x35\x05\x0a\x05\x5e\x4a\xc4\x59\x85\x6b\x2f\xf0\xe6\xc5\xd1\x53\x1f\x40\x04\x2b\xe9\xa9\x44\x3f\xa8\xfa\x32\x43\x8d\xb3\xd7\x45\x2a\x75\x90\xd0\x96\x20\x96\x3d\xc2\x7b\x60\x4d\x3e\x96\xc3\xaa\xa9\xca\xfe\x20\xf2\x0d\x7b\x84\x73\x1d\x27\x92\x95\x93\xc9\x98\x9d\xc6\x86\x7f\xe8\x26\x74\x36\x2e\x97\x4e\x5f\xe2\x64\x04\x4b\xb3\xb1\xad\xea\x92\xef\x4c\x4c\xe7\x0e\x83\xdb\xf9\x0b\x92\xbb\x63\x5b\x54\x65\xf4\x59\x78\xce\xed\xbe\xfd\x94\xe7\xb8\x03\x0c\x6f\xdc\x61\x3f\xb8\x1c\xd2\xf1\x63\x34\xf8\x68\xa9\x1c\x84\x2c\x40\xbb\x18\x27\x51\x85\xeb\x4d\xe1\xa2\x9b\xd8\x48\xef\x51\x5b\x86\x56\x75\x19\xad\xfe\xe3\xec\x70\xa9\x61\x55\x8f\x86\x55\x1c\xd8\x05\xf0\xd0\x3c\x74\xc5\x5b\x94\xb0\x21\xd5\x06\x92\x2e\x1d\xcd\x21\x23\x05\xc4\x6b\x97\x51\xfb\xfa\x28\x3c\x5f\x23\xfc\xa0\x16\x5c\x87\x78\xb4\x09\x81\x5f\xc5\xdd\xe1\xfb\x15\x9a\xbb\xe9\x76\x4a\x14\xf1\x7e\x95\xce\xa1\x82\xd0\xd1\x7e\x68\x07\x05\x4e\x43\x62\xd6\xdb\xac\xa0\x36\xba\x2e\xa3\xa5\xa9\x68\x47\x28\x67\xa3\x50\x58\x7a\xf6\xa1\xaa\xd8\x90\xc6\x40\xe1\x3a\x02\xc1\xc8\xbe\x9e\xa5\x6f\x0d\x69\x08\x90\xc2\x83\xab\x8f\xec\xe3\xa5\x94\x2a\xb7\x36\xdd\x24\xe9\x79\xb8\x06\x0f\xc4\xaf\xa4\x39\xa9\x14\xf7\x2b\x4c\x2e\x35\x2c\x43\x72\x86\x7a\x64\x41\xe5\xb4\x70\xad\xca\x50\x2f\xb0\x9b\x0e\x64\x41\xe3\xb0\xe8\x2c\x1a\x4f\x0f\xe8\xdf\x4e\xd1\x81\x08\xbb\x88\x7e\x73\x41\xc4\x3d\xe3\xf8\x73\xb5\x19\x20\x83\x89\x83\x4a\xe3\x58\x4b\xec\xa9\x5b\x15\x17\xe5\x06\xc4\x64\xd1\x70\x7a\xe1\x7b\xc9\xbc\x90\xae\x03\xe1\x1e\xa3\xf0\x8c\xc6\xd3\xd7\xd1\x8f\x55\x7d\x86\xb6\x08\x8b\xd1\x91\x58\xce\xe9\xfa\x79\x9a\xd0\xd0\xd6\x20\xc9\x3c\x0a\xc7\x39\x5d\xbe\x98\x62\xe4\xde\xb0\xa3\x1c\x3e\x1f\xe1\xb8\x71\xf9\xa5\xf4\x24\x88\x6c\x07\x65\xc9\xb5\x5a\xdf\x08\x9d\xa3\x36\xf5\xe0\x73\x5f\xf4\x76\x05\xca\xa9\x86\xa3\x16\xd5\x83\xcb\x75\xc1\xda\xf4\x29\x07\xf8\xbf\xa1\x52\x65\xa2\xee\x32\x9a\xd5\x85\xb1\xbb\x0c\xeb\xcf\xd4\xb1\x86\x68\x56\xce\xfa\xd4\xb9\x5a\x94\x9b\xee\xe4\xa0\x31\x5d\x5e\x4f\x3a\x4f\x3b\x3a\x43\x27\xfa\x59\x9a\xd0\x39\xfa\xcf\x68\xad\xe7\x67\xe8\x3a\xe3\x35\x9c\x91\x7a\xcd\x4f\xd6\x66\x2e\xa4\xc3\x5c\x42\x73\xf9\xbb\xd2\x57\x06\x69\x29\xee\xba\xc9\x65\x34\x92\x01\x7a\x88\xab\xf6\x71\xbe\xce\xe1\xac\x69\xb8\xe9\x17\xbf\xa2\x56\xf1\x11\xba\xc4\xc5\x35\x88\x9f\xa7\x37\x6c\x70\xba\xd9\xe6\x11\x56\x37\x51\x5a\xe8\xb8\x1d\xf5\x03\xb7\x3c\xd8\x0f\xca\xb8\xc3\x06\x68\xee\xaf\xad\x96\xcc\x69\x14\x12\x5e\xbf\xda\x37\x85\x7c\x9d\x97\x85\x72\x53\x33\xa3\xe7\x90\xa0\x38\x69\xde\x62\xef\xc4\x85\x98\xbc\x00\xdf\x10\x6d\xf3\x46\x28\x68\xfd\xdd\xa4\x70\xa0\x2f\xa8\xfc\xec\xd3\x00\xed\x14\xce\x5f\x06\xc1\xcd\x6f\xdb\xdb\xf9\x62\xb1\x14\x5f\x42\xff\xe9\x0f\xfc\xa7\x3f\xf0\x9f\xfe\xc0\x7f\xfa\x03\xff\xc7\xf7\x07\x96\xd3\xbe\xc8\xc1\x93\x69\xd8\x4f\x97\xc3\x36\x8b\x20\x6b\x3f\x65\x1b\x81\xda\x7d\x5f\xcc\x36\x66\x38\x41\x1b\x41\xa4\x36\xc0\x33\xb3\x2d\x0b\x58\x8f\x2a\x3d\xb8\xaa\x48\xcd\xb0\xe3\x70\x7f\x1d\x83\x46\x3d\xb0\xa2\x2b\x85\xaa\x96\xdd\x5f\x03\x54\xad\x07\x55\x73\xa5\x4d\x56\xb7\x6d\xf0\xae\xea\xf1\x78\x1c\xfd\x34\xf7\xaa\xbd\x42\xc2\x37\x27\x7e\xec\x3b\xd3\x99\xa1\xcc\x4d\x5a\x99\xcb\x7e\x4e\x33\xc1\x98\x1b\xb3\x70\x8a\xed\xf4\x05\x43\x00\xcd\x5c\xe8\xcc\x74\x21\x84\x2a\xf1\xe7\x9e\x92\x58\x28\x0e\x49\x64\xf3\x5c\x23\xfd\x22\x9b\x45\xfa\xb0\x8b\x6c\x23\x50\x4b\x84\x98\xec\xd1\x20\xb2\x8d\x20\x52\x1b\xa0\xc8\xb6\x65\x57\xec\x59\x22\x83\xab\x8a\xd4\x0c\x13\xd9\xfd\x75\x0c\xab\x6a\x60\x45\x57\x0a\xd5\x75\xd7\x5f\x03\x5c\x88\x83\xaa\xb9\xd2\x26\x2f\x55\x1b\xbc\xeb\xea\x1c\x8f\xa3\x9f\xe6\xde\x35\x28\xe4\xde\x74\xe2\xc7\x3e\x91\x6d\x86\x32\x37\x69\x65\x2e\xbb\xc8\x36\xc1\x98\x1b\xb3\x70\x8a\x4d\x64\xc3\x10\x40\x33\x17\x12\xd9\x17\x42\xa8\x12\x7f\xae\xc8\x26\x98\x20\x9b\x44\xfd\x56\xe4\xec\x39\x34\xb5\x49\xd0\xf4\x3a\x13\xc8\x62\x45\x03\x5a\x08\xf2\xd2\x3d\x6e\x84\x6b\xf0\x06\xb7\x38\x0a\x23\x02\x1b\x68\x6f\xec\x65\xca\x74\x93\x13\xf4\x26\xbf\x2b\x1c\x69\x53\x22\x81\xbe\xb4\xe1\xdf\xe6\x59\x5d\xa2\xaa\xf6\xef\xef\xef\x6f\xe2\x6c\x8f\xcb\xb8\x86\x26\xc0\x53\x2c\x38\x8e\x46\x18\x27\xbb\x88\x83\xb9\x62\xa8\x25\x01\x3e\xca\x43\xe7\x6f\xfd\xe0\x7c\xd6\xa9\x17\x29\xb1\xd4\xfe\xb4\xbe\xfe\x1d\x5b\x5f\xed\xc9\x97\x84\x55\xf4\x54\xa2\x2c\xf2\x57\x41\xd0\x2e\x21\x43\xee\xd8\xf3\x4d\xac\x16\xa5\xd3\x6c\x46\xfd\xdb\x1b\x4c\x3f\xde\x04\xfa\x51\x66\xcd\x8f\x37\x56\x5e\xd8\xea\x78\xae\x61\x71\x94\xf5\xf0\x97\x32\x12\x5e\x30\xc0\xb3\x16\xce\xb9\xaa\x51\x59\x2b\xd1\x9c\x69\x99\x1a\xcc\x99\x7c\xa7\x9f\x52\x74\xec\x62\x2c\x7f\x12\x02\xab\xf1\xcc\x3f\x5d\xe0\xc4\xd9\x6d\x71\xf4\x66\xf3\xe2\x08\x09\x0b\xf8\x36\x65\xd8\xbd\xc8\x90\x1b\x0b\xf7\xfb\x84\x91\x16\x7f\xab\xe5\xdd\x62\x35\x37\x5a\xbd\x2f\x61\xb9\x6e\xed\xc4\x25\xae\xe2\x1f\xf8\xe1\x05\x97\x75\xbc\x45\x89\x3a\x8d\x52\xe4\x6c\xfa\x93\x4d\xe7\x6d\x50\x1c\xdb\x19\x5d\xb5\x13\x2a\x87\x5e\x05\x83\xbf\xb5\x51\x9e\xeb\xfc\x3b\xce\x84\xa0\xcf\x51\x5c\x7b\xa4\xb3\x51\x22\x87\x5c\x73\x99\x74\x87\xb9\xee\x9d\x62\xd7\x99\x1d\xc6\x01\x36\xc5\x21\xb2\x7e\x25\xf1\x90\x20\xbe\xd1\xd9\x45\xe5\x12\x41\x6b\x88\x12\xe1\x47\x87\xb2\x6d\x8a\xfc\xff\xb8\x00\x54\x67\xb0\xa0\x12\x4c\x71\x36\x5d\xe0\xf4\xcf\x53\xd1\x87\x9d\x8a\x94\xd0\x95\x73\x78\xb0\xd5\xc0\x85\xae\xb1\x03\xdd\x82\xf8\xb9\xc4\xd4\x1b\x1c\xbb\xce\xd5\xff\xca\xd5\xa3\x09\x8a\xf7\x66\xf1\xe9\x19\xad\x7f\x8b\xa9\xf2\x42\x70\x2b\x24\x13\xf7\x05\x8a\x25\x69\xf6\x27\x03\xd8\xac\x0f\x58\x60\xbd\x3e\xd0\x96\x1d\xcd\x80\x36\x26\x34\x4d\x03\xf0\x4d\x21\x0a\x5a\x12\x67\xce\x00\x43\x21\x4e\x83\x3f\x5d\xe2\x74\x0d\x05\x79\xfd\xf3\x80\xfb\xf7\x7a\xc0\xed\xe2\xcf\x2f\x64\xd7\xa2\xaa\x2e\xf3\xec\xf9\xb4\xcb\xb3\x2e\x34\x78\x99\xa2\x64\x4d\x4a\x5e\xa9\x92\xb3\x08\x02\x9e\x86\x98\x3a\x13\xe9\x71\xeb\xe5\xdc\x4e\x61\x00\xb5\xd2\x86\x3a\xa7\xad\x35\x0a\xd7\x6c\xd1\xa8\x4f\xf6\x8c\x76\x72\xfa\x85\x3b\x39\xdc\xf8\xa0\xd8\xe1\xae\xe1\xbc\xdd\x83\x6c\x8f\x0d\x75\x3d\x3a\xc2\xf4\x49\x0d\x22\xe6\xf1\xf4\xa5\xb2\x07\xd9\xc2\x94\x09\x7e\x16\x16\x47\x92\xe4\xdd\xbf\x55\x83\x96\xdd\x4d\x6e\x02\x6f\xd6\x60\x9e\x05\x0d\xc0\x5c\xcd\x00\xaf\xa4\x8a\x3f\x13\x15\x94\x12\x00\xe0\x85\x66\x1e\x76\x49\xfe\xca\x32\xc4\xb5\xbd\x22\xc9\xe4\x29\x6c\xa7\x8f\x7b\xb3\x65\x90\x56\x37\x8d\xfa\x2e\x16\xac\x07\x01\x0b\xea\x7d\x20\x85\xb6\x8f\xa2\x61\xa1\xea\xa3\xc8\x39\x80\x7c\xa4\xa5\x87\xb7\x03\x8f\x0d\xb1\xde\x56\x1d\x11\xdc\x3c\x8a\x4e\xca\x3d\x6c\x37\x36\x34\xb2\xf8\xa0\xe1\xe1\x55\xc6\x41\xf7\x0d\x12\x83\x1f\x39\x4e\x52\xed\xe1\x43\xc5\x62\xb1\x77\x09\x17\xfc\x06\x92\x85\x6e\xd7\x52\xbd\x54\xb8\x40\x25\xaa\xf3\x92\xe5\xda\xd9\xc5\xa5\x90\x33\x49\x18\xe3\x28\x7e\xf9\x72\x18\x26\xf2\xdc\x9a\x18\x30\x69\x9c\x86\x0b\x36\x3f\xb2\xe5\xde\x65\x32\xa4\xed\x5e\x76\x62\xad\x9f\x97\xdd\xc6\x4a\xcb\x58\x56\x95\x28\x1b\x9d\x2f\xc7\x81\xb4\x11\xeb\x80\xd2\x76\xea\x52\xb9\x08\xd1\x2f\x61\x6f\x3c\x73\x26\x91\x3f\xae\xcf\x4a\x14\xf2\xc7\xf5\xd8\x6c\x1e\x7f\x68\xd9\x6d\x07\xd5\xbd\x50\x36\x8c\x16\xd3\xf9\x69\x29\xfe\xb8\x3e\x01\xbb\xa8\x54\x44\xf4\x50\x6d\xef\x74\x00\x71\xff\x74\xe3\x19\xd0\xd9\x98\xa0\x8d\x76\x7d\x1e\x33\x88\x68\x2e\x87\x61\x28\x73\x08\x38\x2e\xc4\x24\x1a\xc6\xf3\x99\xa5\x43\x79\xd2\xe6\x8b\x4e\x69\x82\x6a\xfc\x5f\x3e\x93\xcc\x6b\xfe\x2c\x08\x3e\x79\x3e\xd1\xfa\x26\x93\xb5\x33\xa0\xa0\x72\xcd\x16\x73\x92\xb0\xfa\x28\x15\x00\xdb\xe6\x9f\x19\xd2\x2e\x95\x21\x6d\x54\x22\x28\xed\xbe\x84\xdd\x8a\x28\x37\x26\xbc\x54\xbd\x33\x21\xa9\xca\xfc\x27\x5c\xbf\x62\x9c\xd9\x66\xf7\x01\xed\x6a\x5c\x9e\x35\xc7\x1c\xc5\x65\x6a\x0f\x9d\x6f\x56\xff\x42\xb3\x2e\x61\x3b\x7f\xee\x29\x3a\x39\x5f\x80\x90\x9f\x4e\x38\xa4\xb5\x27\x33\x9a\x33\xcf\x23\xf9\xc8\xc4\x47\x45\xea\x61\xa0\xd9\xfc\xbb\xd6\x86\xad\x52\x03\x86\x8b\x54\x76\x3b\x39\xa8\xd5\xcf\x3a\x48\xc0\xc8\xc6\x9e\x2b\x14\x6c\x27\xd8\x7e\x12\x50\xeb\x09\x91\xb6\x44\xd8\x7e\xa1\xc2\x76\x2d\x27\x92\x12\x17\x5e\x1c\xfd\xd3\xd7\x2b\xff\xea\x51\x54\xfe\x5a\xf1\x7f\x48\xa8\x4d\xe9\xdb\x2e\x2f\x29\xd8\x97\xb1\xb3\x7b\x66\x4b\x3f\xb5\x91\xfe\xd5\x7e\x4e\x33\xa3\x85\xc2\xf9\x8d\x8e\x91\x1d\x67\xb4\xaa\xa6\x24\x11\xaf\xb5\xe9\xfb\x46\xf2\xdf\x6f\x19\x4a\xf1\xd7\x34\x8f\x50\xf2\xa8\x97\x7c\xb9\x3e\x19\xb9\x37\x1a\x78\x30\x8e\xdc\x0f\xb1\xd1\x90\x53\x67\x34\xfe\x90\x18\x9d\x71\x8a\x8b\x12\x2d\xd1\x29\x20\x92\xc9\xd9\x4e\x16\x1f\x03\xcf\xff\x36\x3c\x17\x44\xe1\x28\xa4\x41\x24\xe7\x89\x6a\x0b\xca\xd1\x02\x1b\xc2\x79\x02\x72\xbf\x76\xf3\x45\x4d\xfc\x8d\x04\x1f\x36\x3f\x52\xbd\x33\xaa\xf4\x8d\xbf\x58\x69\xe4\x78\xeb\x28\x86\x8f\xaf\x80\xe3\xc4\x93\x35\x93\x6d\x0f\x1d\xea\xfc\x9d\x7c\x18\x7b\x59\x40\x2a\xbb\x8e\xa1\x02\xdc\x37\x7a\x14\x7c\xe4\xb8\x89\x95\x87\x8f\x18\xa9\x7d\xa2\x17\x2b\x3a\xc3\xa1\xa7\xfc\x05\x8f\xe1\x38\x5e\xf1\x9c\x3a\x6e\x3c\xc7\x6a\x9d\xc5\x74\x12\x8e\xb1\x5c\x47\x91\x9c\xc8\xcd\x35\xb9\x95\x22\x05\xa3\xd9\x8d\xd4\x76\xe6\x37\x05\xba\x97\xe1\x28\xfc\x58\x8e\x13\x6b\x8f\x60\x39\x52\xfd\xc4\xae\x92\x17\xa1\x7c\x9a\xdf\x0c\xb4\x68\x6f\xdc\xad\xcf\x9b\x21\xe6\xe2\xcd\x78\xeb\xee\xe6\x0c\xf3\xeb\xe6\xc0\x7d\x80\xe4\x9c\xca\x5e\xa0\x0f\x92\x7e\xdb\xa2\xee\xef\xc3\xac\x62\x23\x86\x7e\xdc\x25\xcf\xc6\xd9\xcc\x36\x6c\x76\x07\xdf\x1f\x6d\x06\x58\xeb\x86\x72\xcf\x88\xeb\xa9\xcd\x68\xc3\xdf\x79\xdc\x7a\xf6\xcd\xd8\x66\xbc\x7d\xf1\xcc\xc5\x72\xfe\xb5\xdc\xe6\xfa\x24\xe6\x3b\x3e\x7f\x0d\x0d\x65\xf0\xe1\x7c\x78\x2e\xab\x9c\x3d\x63\x74\xd8\x6a\x7c\xac\x7d\x94\xc4\xcf\xd9\x43\xa3\x40\xc0\xc6\x1f\xed\x3e\xe9\xbc\xfb\xca\xd1\x37\x8d\x67\x5c\x14\x5e\xec\x96\xef\x72\x97\x72\x74\xec\x3b\x7b\xfa\xa1\x28\x70\xb9\x45\x15\x5e\x4b\x21\xa0\x5a\x37\x9c\x46\x2b\x99\xce\x97\xf2\x21\xf0\xd2\x97\xc1\x17\xbc\xdd\xbd\xe8\x65\xed\x07\xde\xb6\x7e\xe4\x6d\xa9\x03\x6e\xd1\x4f\xcf\x75\x7a\x71\x5a\xd4\x6f\x17\x99\x58\x8e\xe9\xa2\x48\x46\x4e\x26\x43\x73\xd9\x69\x94\x90\x5e\x6c\x02\x29\xd6\x93\xe4\x21\x37\xc3\x69\xbb\x56\xe9\xc1\x55\x2c\xe1\x5e\x97\xaa\x11\x87\xf8\xa6\x0d\xf4\xd6\x18\xe2\x5f\x31\xcc\x1f\xe2\x1c\x8f\x85\xb3\x5c\x0a\x5a\x4b\xd7\x2c\x28\x8e\xeb\xd7\x7d\x5c\x63\x9f\xdc\x27\x71\xe7\xc5\xee\xf9\x06\xbf\xa5\xda\xc5\x35\xbf\x7a\x12\xbf\xa6\xf9\x0f\xc3\x27\xa1\x54\x5a\x63\xd3\x98\xf6\xb6\x39\x7d\x0d\x59\x51\x62\xbd\x33\xaa\xf4\xae\x16\xa1\xd2\xd8\xb5\xa1\xa1\x18\xb1\x12\x3a\x1c\xba\x9d\xcb\xa0\x37\x74\x55\x36\x0f\x63\x2e\xfd\xa0\xfa\x17\xa8\x3a\x60\xc4\xdb\xca\xe7\x8f\xbc\x82\xea\xac\x19\xe0\xb8\xf4\x67\xae\xf4\x61\x6b\xf5\x8a\xea\xed\x5e\x78\xda\xfa\x5b\x10\x04\x13\x8b\x5b\xae\xe2\x8f\xbb\x66\x02\x2c\x50\x0e\xf6\x51\xfc\xc2\x5d\x7e\x07\x4b\xad\xae\xe2\x39\x75\x5c\xa4\x58\x5b\xeb\x0c\x69\xa6\xe0\x18\x27\xd5\x5a\xf7\x68\x7d\xe0\xe9\x96\xb1\x2c\x8e\x64\x0a\xd8\x95\x5e\x71\xf4\xbe\x78\xcd\x16\x31\x79\x97\x5c\xd6\x15\x07\x76\xd2\xc6\x89\xde\x08\xea\xcf\x11\xc9\xdf\xcc\x1a\xf8\xd7\xea\x50\x34\x0b\xb3\xf2\xb2\xbc\xf6\x3e\x7f\xee\x84\xa1\x07\x88\xd1\x89\x97\x97\x9e\x04\xa3\x08\x53\x0d\x40\xfc\x36\x39\xfd\xb9\xaf\xe9\xfb\x5a\x37\x58\x61\xd0\xac\xa6\x77\x68\x2a\xb5\x55\x4c\x1c\xab\xc3\xe5\xf2\x86\xff\x3b\xbd\x57\x58\x82\xbf\x1e\x38\xc1\x2e\xe1\xab\xe2\xe8\x35\xff\xfa\x84\xa9\x94\x44\xd6\x37\x0c\x80\xfc\xc7\x5f\x28\x00\xa1\xea\x13\x7e\x26\x2e\xd0\x29\xdc\xe4\xf3\x0e\x77\x72\xb3\xcb\xf3\xba\x0b\x1d\x55\xe7\x05\x7f\xbb\x59\x1c\x0d\x35\xf6\x18\x45\x5d\x0d\xaa\x7d\x09\x95\xf6\x75\x9a\x74\x0f\x34\xc9\xdc\x92\xfb\xc8\x93\xe2\x9b\xfe\xae\x5d\x58\xf2\xcb\x51\xe1\xe2\x92\xde\x7f\x4a\x74\x9c\x7e\xf8\x71\x16\xe1\xe3\xc3\x32\x08\x3a\xb1\xbb\x8b\x8f\x38\x02\x39\x40\x13\x10\x7a\xb7\xce\xf7\xe9\xa1\xe7\x7c\xea\xec\xd1\xf9\xf4\x48\xa5\xe4\x87\x1f\xd7\x38\xad\x5a\x40\xd5\x2b\x48\x45\x20\x16\xaa\x3e\x41\xac\x58\x10\x4d\xf0\x7c\xd1\xe7\x9b\x27\x0e\xb7\x0c\x8a\xa3\xa0\x53\x18\xaa\x3c\xe5\xd1\xdb\x49\x74\x2b\x23\x2b\x0c\x04\x9e\xf2\x79\x8d\xb3\xe7\x6e\x8e\xd1\xa1\xce\xfb\x69\x13\xd6\xf0\xdd\x72\x29\xbe\x6e\x69\x9f\xca\xf0\xd9\x9e\x19\xb8\xf1\x5a\x39\x2a\x2c\xbb\x27\xc6\xfc\xac\xb0\x34\xb2\x72\x43\x02\x27\xd9\x7f\xa3\x44\x0b\xbd\xbe\x0b\x5e\xf6\xad\x99\x39\x6c\x96\x68\x38\x37\xe2\xa2\x0b\x09\x7e\x10\xc5\xd7\x8c\x68\x70\x98\x85\x02\xa5\xfc\x45\xab\x71\x94\x5b\x0c\xda\x3d\xa8\x0d\xdc\xfb\xb6\xcb\x4b\xba\xba\xfe\x6d\x9b\xe4\x15\x7e\x3c\x6d\x0f\x65\x95\x97\x0f\x45\x1e\x13\xf6\x31\xbf\x90\xd1\x85\xcb\xed\xee\x6e\x87\x80\x54\xfd\xbb\x24\x47\xf5\x03\x19\xec\x35\xb1\xbc\x34\x33\x96\xd5\x0f\xfe\x7d\x10\x90\x33\x07\x15\xd2\xf3\xe2\xc8\x39\x82\x0c\xe3\x34\xcb\xeb\x78\x8b\xa7\xe4\xd5\xd3\x0d\xff\x15\x67\xbb\xbc\xfd\x51\xe4\x49\xbc\x7d\xf3\x53\x94\xa1\x67\x9c\xe2\xac\x6e\xbf\xbc\xa2\x32\x6b\x18\x4e\xa7\x86\x95\xb4\x02\xc9\xfc\xfc\x4a\x3a\x45\x0a\xfe\x3f\x38\xf5\xbe\x78\xf3\xb0\x38\x4e\x64\x1a\x3b\x95\x49\xa0\x55\x2b\xd4\x68\xd6\x20\x18\xed\xbd\x2a\xcc\x8a\xa9\x30\xcd\x1f\xef\xd3\x28\xae\xb6\x0d\xaf\xbe\xf9\xdb\x3d\x79\x14\x57\xe6\x87\x1a\xfb\x5b\x54\x46\x7c\xb6\x0f\x89\x97\xc4\x37\xd3\x3d\x46\x49\xbd\x27\xc2\xd4\xcf\x0f\x75\x71\xa8\xbd\x28\xf2\x70\x7a\x53\x47\x1e\x7b\xc2\xa6\x0f\xdb\xc7\xc4\x86\x18\x27\x17\xdb\xf9\xa1\x4f\xa6\xf4\x19\x74\x1f\x0d\xf6\x3c\xd0\x3c\x28\x1c\xa0\x1d\x1b\x56\xa0\x6b\x0e\xc4\x9e\x58\xa0\xb2\x39\xfa\xca\xab\x68\x30\x39\x1d\x4b\xf4\x90\xd5\xe9\xca\x0a\x79\x2d\xf3\x70\x2d\xb5\x5b\x5c\xf4\x68\xf1\x8c\x6a\xfc\x8a\xde\xa6\xdb\x3c\xab\x0e\x89\x8f\x8f\x35\x2e\x33\x94\xf8\x55\x7e\x28\xb7\xb8\x23\x40\x81\xfb\x1e\x67\x51\xfb\xb1\x2a\x50\xd6\x02\x30\xbe\xce\xf2\x08\xfb\x71\xb3\xbe\xe3\xfa\xcd\x0a\x59\xe1\xf2\x25\xde\xea\xc0\x40\x00\x21\xfe\x44\xea\xe3\x67\xb5\x7d\xdb\xc9\xa4\xd2\x7d\x37\x6e\xf7\xc4\x93\x9a\x1c\xd6\xe8\xc6\xb1\x68\x64\x5b\xfb\xfa\x32\x78\x37\x8c\xe5\x8d\x38\x76\x74\x24\xa0\xb1\x92\xbe\xa8\x63\x03\x8c\x09\x7e\xc2\x78\x17\xae\xbb\xc7\xa8\x77\x9d\x70\x03\xd6\xad\x1c\x50\x09\xa6\x94\x05\x46\x10\xc8\xa5\x25\x46\x9a\xf5\xcf\x2a\xe1\x34\x52\x80\xf2\x46\x55\x7d\x0e\xab\x4b\x60\x65\xde\xfb\x98\xd4\xc8\x9c\xfd\x4c\xd9\xc7\x8c\x6c\xfd\x2c\x84\xf5\xb3\x50\x19\x21\x84\x65\x90\xe3\x19\xcc\xed\xba\xcb\xf5\x92\x6b\xdc\xd5\xd6\xc8\x0b\xad\xcd\xf5\x49\x95\x74\xae\x9d\x1e\x60\x55\x1a\x66\x46\x3a\xc7\x6e\x74\x96\xa1\xa8\xb5\x0c\x31\x96\x59\x09\x2c\xb3\x02\xf5\x8c\x36\x4e\x83\x36\x68\xf2\xb0\xa8\x1d\xb7\x77\xad\x87\x78\xd0\x55\xce\x6d\xd2\x5c\x26\xcb\x6d\x92\xc6\x4c\xce\xa8\x49\x51\x3d\x65\xff\xc1\x1e\xb8\x33\x56\xbc\x87\xb9\xec\x4f\x3f\x34\x9b\x1f\xda\xfc\x6e\xd4\xa0\xfd\x03\xbb\x8b\x1a\x0f\xd2\x17\x8a\xf2\xa4\x9a\x88\xe4\xc3\x99\xd1\x22\x65\x0c\xa2\x75\x46\xa4\x29\x7a\xa6\x6d\xda\x1d\xd6\xe6\x65\x22\x2f\x89\x27\x6a\xa6\x89\xf0\x8b\xd0\x61\xe4\xd0\x3b\xd5\x04\x75\xf7\xed\xe3\x49\xd3\x70\x9d\x64\x25\x69\x00\x77\x58\x83\x9c\x7d\xd0\xc8\x5e\x38\x1c\x56\x20\x5e\xcc\x89\xef\x33\x48\x0d\x8f\x86\x15\x56\x74\x27\x18\xac\xbd\x70\x92\x74\x7b\xea\x6f\x65\xaa\xc1\x4f\x52\x52\x95\xdb\xe2\xc8\x83\xc0\x30\x93\x8b\xa8\xd5\x86\x9d\x56\x4b\xee\xa2\x9a\xe9\xa2\xf8\x33\xfc\x4c\xf4\x04\xb1\x35\x1e\x3a\x25\xe8\xa5\x1a\x34\x42\x8b\x0d\xcd\x5b\x13\xd0\x5d\x47\xce\x9d\xb5\x75\xd6\x0e\xb1\x10\x7f\x11\x7b\x7c\x63\x82\x6a\x6d\xc7\xf2\xf8\x68\xc4\xd1\x58\xda\x8e\x4d\x83\x48\x21\x12\x7a\x1a\xe5\xcf\xf5\xb5\x8a\x90\xae\x66\xe2\x25\x46\xff\x2e\x9c\x85\x0b\xf0\xd4\x27\x4b\xcb\xf9\xa2\x1d\x61\xd3\xdc\xf5\xf6\x44\x37\x4c\x49\xda\xd6\x9a\x9b\xa2\xaf\xae\xf8\x6d\xe7\xb0\x39\x35\x52\x01\x8d\x3e\x65\x37\x2a\x06\x17\xce\xdc\x03\x21\x31\xf7\x5b\x68\x83\x66\x95\xeb\xcc\x0b\x38\xf2\x4b\xcc\x8e\xd1\x50\x68\x21\xe0\x68\x0e\x4c\xae\x19\xa1\x97\xc4\x60\xe4\x07\x5b\x9d\x1b\x37\x7c\x52\x94\x66\x2b\x0d\x48\x66\xb3\xd1\x6d\x53\x5b\x4d\xcb\x47\xe0\x45\xda\xb2\x38\x7a\x4d\x2f\xfd\x50\x0d\x77\xa4\x5e\x93\xd9\x20\x6d\x24\xf2\x74\x22\x16\x08\x9a\x37\x05\xa4\x6f\x55\x1c\xbd\x3b\xa8\xd5\x60\x39\xb9\x21\xd6\x18\x6f\x01\x5d\xcc\xa9\x81\x9f\xc6\xe3\xb1\x4e\x15\x1d\x62\xfa\x58\x0a\x4d\x84\x6d\x19\x08\x7a\xc5\xe2\x73\xeb\x1b\x0c\x7c\x85\x68\x6d\xf7\x90\x80\x91\x7a\xd6\x9a\x5b\x7e\xe0\x40\xbe\x87\x1c\xd8\xc8\x43\x1b\xf5\x42\xd0\xad\x52\xcf\xf2\xf0\xd0\x46\x1c\x36\x55\xf7\x94\x3d\xa5\x5e\x4b\x54\xd0\xcb\x8d\x16\x0e\x27\x49\x5c\x54\x71\xe5\x44\x4d\xe7\x85\xd5\xb0\x01\xb9\x92\x72\x9f\xdd\x0f\x0a\xdc\x3c\xca\x38\xef\x44\x76\x37\xac\xbc\x07\xfa\x56\x22\xb0\x1e\xb5\x1c\xae\x8a\x23\xf8\x84\x7e\xc9\x6e\x01\x98\x4e\x23\x28\x11\xe4\xef\xd6\xc9\xc3\x6f\x7e\x7a\xbf\x7b\xe1\x44\x70\x01\x91\xec\xb7\x0e\x94\x8b\x6f\x75\x19\xe9\xa2\x32\x2e\x6f\xb1\x81\x62\x01\x12\xb4\x1e\xd2\xb8\xa4\x1f\xf7\xce\x79\x12\xf3\x4b\xda\xf9\xbc\x17\x54\xc8\xa8\x30\xe8\xd2\x9a\x07\x6d\x66\xd3\x4c\x1d\xa5\xf3\xe2\x82\x97\x36\x01\xe1\x6e\x8f\x46\xbc\x73\xbd\x9e\xf6\x6a\x53\x30\x66\xf6\x79\x4f\x23\x3e\xb6\xc0\xe2\xaf\xbd\xec\x8b\x20\xec\x9d\x03\x50\xee\x4f\x50\x88\x25\xcd\xc9\x74\x65\x3c\x81\x81\xa4\x45\xe0\x1e\x2c\x9b\xbf\xf9\x18\x2d\x1b\x76\x52\xe6\x27\x8d\xa3\x28\x31\xdc\xf1\xb6\x6d\xb0\x2b\x8e\x41\x03\xc8\xeb\xc8\x43\xc0\xe9\x0a\x57\x77\xb7\x73\x6b\xab\xa6\x88\xe6\x1c\xbf\xb8\x90\x6e\x64\x97\x90\x2c\x8f\x70\xf7\xab\xda\xe7\xaf\xde\xb4\xc2\x55\x45\xad\x1b\x72\x4d\x81\x3c\x24\x77\x40\x02\xab\xa3\x69\x84\xab\x3a\xce\x50\x23\x31\x14\x25\xc6\x42\xa8\x80\x52\x78\xe6\x22\x04\xdb\x4a\x50\x51\xe1\x07\xfe\xc7\x3b\x35\xa5\x44\x79\xea\x97\x78\xfb\xb6\x4d\xe2\xec\xd9\xab\x4b\x61\x7b\xfa\x15\x04\xf4\x59\xc6\x63\x3a\x0a\x2b\x27\x27\x11\xc6\x35\xbc\x2e\x8b\x4c\x20\x71\x94\xfc\x4d\x8e\x47\xe0\x86\x15\xc6\x27\xbe\xae\x21\xe2\xb5\x6f\x89\x28\xdc\x23\x88\x4f\xc0\xc5\x48\xab\x3e\xcd\x78\x46\xa6\xea\x0f\x90\x30\x10\x62\x40\x77\x23\x66\x9d\xa4\x15\x27\x9b\x87\x3c\x4b\xde\xf4\x35\x60\x83\xd3\x14\x18\x83\xb6\x32\x88\x8e\x6b\x6b\xeb\xd7\x27\x5d\x49\xb2\xe2\xdf\xa2\xa2\xa9\x2a\x22\x65\x45\x6a\xb0\xf1\xbb\x5e\x39\xdb\x2f\x82\x24\x62\x7b\xa4\xa3\x02\xac\x30\x8b\x6d\x14\x64\x06\x95\xbf\x9d\x64\x4f\xa4\xe9\x7d\x5f\xaf\x9e\xf2\xe8\xad\x69\x91\xc7\xaf\xd6\x8a\x65\xb6\x5d\x3b\x87\x22\xe6\x37\xad\x35\x7a\xf2\x33\xf4\x22\x1e\x35\x43\xf5\x08\xab\x6e\xa3\x6b\x78\x0f\x4b\x30\x2a\x1f\x9e\xf2\x7a\xbf\x4e\x70\x5d\xe3\x92\xb0\x01\x09\xa9\x11\x90\x50\xf1\xac\x29\xe3\x89\xe1\x17\x92\x99\x16\x1f\xa1\xa0\x3d\xd9\x74\x3d\xa2\xb6\x1b\xd5\xba\x87\xb2\x38\x45\x54\xbc\x76\x5d\xef\x4c\x0e\xbc\x6e\xa3\xba\xc9\x03\x3d\xef\xce\xfa\x12\x94\xe9\x04\x42\x92\xd6\x93\x9d\x8e\x0e\xa4\x1e\x9e\xd0\x2f\xca\xbc\xc0\x65\xfd\xf6\xa0\x1e\xf0\xd6\x4e\x40\xd2\x84\x4b\x7e\x2f\x92\xe2\x62\xb3\x42\x3d\xcc\xba\x04\x1f\x5d\xaf\xe8\xf2\xa0\x17\x20\x38\x9a\x78\xe8\x81\xbf\xd9\xb0\xc1\xf0\xb4\xa0\x16\x10\x96\x00\xd5\xe0\x45\x01\x4e\x4e\x5b\xbf\x9b\x10\xad\xc3\xa2\x91\xd7\x36\xbf\xd0\xf9\x86\xd9\x89\xbb\x5c\x36\xc2\x9a\xe3\x16\x5a\x72\x70\x61\x0f\x0b\x18\x35\xd4\x73\xed\x26\x98\x78\xd7\xde\xac\x38\x4e\xd6\x96\x40\x82\x9f\xa1\xfa\x24\xe2\x45\x5b\xfd\x26\x00\x23\x0b\x3a\xd6\xb4\xb1\x16\xa5\x53\xa3\x0e\xe4\xb0\x21\xb0\xed\xd7\x1b\x52\xcb\x05\x46\xc7\x4c\x99\xae\xc2\x44\x10\x7b\xec\xff\x4f\x8a\x36\x1f\x2e\x38\x77\x2a\x80\xfa\x55\x87\x41\x34\x7a\xad\x55\x0d\xc0\xb2\xd9\xcf\x79\xb4\x82\x70\xd1\x1e\x89\x24\xd0\x0d\x75\x82\x26\x57\x70\xe4\xda\xe1\xf1\xc6\xfe\x59\x0b\xea\x64\x85\x36\x7a\x54\x43\x5a\x60\x24\x28\x13\x64\x5f\x32\xdf\xca\x47\xdc\xbb\x5e\xb3\x79\x2a\xee\xa5\x5d\x2e\x20\x72\x58\x16\x22\x57\x92\xdf\xbf\xd2\x16\x70\x01\x67\xec\x01\xc3\xca\x64\xda\x80\x0a\x34\x59\xb4\x65\x36\x6c\x28\x45\x1c\xd0\x95\x0d\x71\xed\x1d\x42\xbe\xe5\xc9\x5b\x24\x81\x58\x64\xb2\xee\xed\x87\xab\x3c\x79\x69\xe4\x30\x2a\x23\x2f\x12\x3c\x67\x8d\xa0\x15\xf7\x0b\xac\x0a\x94\xb1\xfb\xbb\x3a\xcf\x93\x3a\x2e\x1e\xa1\x6a\xf9\xa1\xc6\x03\xeb\x54\x45\x12\x37\xfa\xcd\xc0\x6a\xec\x93\x0a\xf8\x2d\x42\x35\xf2\xf9\xcf\xb6\x87\x44\xdb\xdb\xcf\x08\x6e\x03\x48\xbd\x87\x5a\x3e\x89\x4f\x3f\xb4\xa1\x5e\x86\xcb\xdb\xd5\x0c\xb8\x9b\xf8\x45\x4d\xde\x6b\xd1\x4c\x0a\x99\x60\xf9\x82\x43\x75\x5d\x7e\x16\xc7\x69\x22\xb9\x9e\x07\x6b\xe1\x80\xc8\xd6\x2c\x93\xdd\x62\x8c\xc7\x65\xb3\xbf\x76\x32\x2a\x70\xe2\x49\xa6\xd0\x8d\x62\x49\x4b\xed\x3e\xce\x34\x57\x75\x61\x50\x73\x6d\x98\x4f\x39\xbc\xca\x8b\xb4\xd4\xc6\xad\xcc\xc1\x0e\x64\x56\xe3\xa5\xb1\xa8\x63\xca\xa7\x0d\xca\xc1\x1e\x00\x40\x8f\x3d\xd2\x09\x85\xd9\x70\x1a\x06\xbb\xa7\x51\x81\x70\xfa\x44\x54\x2e\xd2\x3e\x20\x8b\x8c\x0b\x44\x62\x44\x21\xc3\x1d\x75\xb5\xfa\x97\x3c\xc2\xff\x1a\x93\x87\x0b\xb2\x71\xab\x4d\x48\x27\x3c\x6d\x99\x91\x47\x37\x0a\x2d\xdf\x8e\x7e\x91\xa0\x2d\x79\x21\xf0\x5f\xbf\xd6\x79\xf1\xe8\xc9\x00\x3e\x2a\xcb\xfc\x55\x7c\x98\x25\x91\xdc\xc7\xaa\x1b\xa6\x14\x58\x18\x95\xc2\xb1\x58\x3c\x36\xd7\x6b\x0b\xaa\x0e\xc8\x84\x87\x73\x67\x1f\x2a\x19\x8e\x61\x23\xd1\x00\xfc\xaa\x46\x35\xde\x18\x42\xe3\x3b\xac\x59\xd7\xc5\xea\xb4\x2c\x5d\x17\xa0\x79\xa9\x29\x8b\xca\xb2\x9a\xf8\x32\xd2\xfd\x04\x3e\x48\x75\x1a\xfb\x0a\xed\x7c\xf5\xcb\x70\x31\x71\x11\x89\xfc\x81\xfa\xc4\xc7\xca\xfc\x9f\xbf\x4f\xfc\xa4\xed\xe5\x42\xfb\xd0\x08\x65\xaa\x7f\x03\xb3\xaa\x5b\x3d\x1b\x9b\x6e\x06\xe8\xde\x2f\xfe\xa9\x5b\xfc\x14\xdd\x42\x70\x4a\xd2\x2d\x27\xd5\x16\x25\xf8\xf3\xec\x66\xba\x14\xad\x22\x62\x29\xd3\x04\x3b\xab\x0d\xb9\xea\x15\x02\x39\x90\xdf\xfe\x3d\x79\x8c\x43\x14\x4a\x9f\x1a\xb9\x2e\x3d\xbb\x43\xa6\x73\xe0\xfc\xf5\x4e\xd8\x85\x66\xa8\xf3\x6c\x54\x34\x6f\xbf\x39\x03\x4c\xfa\xc6\xcc\xaa\x6f\xf4\x69\x10\x2e\x0e\x5a\x4e\xc1\x01\x14\x9f\x37\xa7\xb7\x88\x7d\xbd\xf8\x20\x45\xed\x67\x69\x71\x97\xd5\xf2\x0c\x6e\x6a\xf6\xd1\xe0\x36\xe1\x1e\x28\x6a\x34\xb1\xf5\xd8\x8c\xa8\x03\x31\x61\x91\x3a\x63\x44\x24\x43\xfd\xe2\x1e\x67\x3d\x3c\x48\x85\x88\x9d\x85\x8c\x30\xf2\xdc\xcb\x4f\xe2\xd9\xab\xd5\xff\xf8\x67\x9a\xb6\xc3\x4b\x96\xef\xb1\x77\xe7\x38\x24\x56\x22\xe1\xef\x52\xcb\x83\x9c\xf6\x04\xdf\xd8\x2f\x4a\x6a\x76\x29\xf1\xed\x0c\xa7\xef\x74\x27\xa0\x1b\x4b\x86\x5e\x44\x9f\x0c\x43\xa2\x0d\x9f\xbc\xba\x41\xdf\x4a\x9c\x5c\x7f\xe5\xef\x3d\xdb\xbd\x5b\xdc\x62\xef\x8c\xcf\x09\xa8\xc7\x2e\xc3\xb1\xc7\x09\x3f\x42\xe9\xe5\x27\x29\xde\xa3\x01\x9d\x58\x41\xda\xe2\x80\x0f\xa7\xbc\x40\xdb\xb8\x7e\x7b\x98\x9a\xfc\x4a\xf6\x21\xbf\x2e\x6e\xfe\x72\x72\x45\x69\x00\x4d\x34\xc0\xdf\x84\x07\xb7\xd3\x95\x90\x80\x98\x44\x3a\x0c\xbb\xdf\x64\x20\x9b\x02\xd6\x72\x8d\x9e\x48\x0c\xa1\xc7\x4d\x21\x98\x75\x3d\xa0\x01\xae\x45\xd1\x4b\x86\xa2\xcc\x9f\x4b\x5c\x55\xd3\x46\x97\xad\x71\x99\xc6\x19\xaa\x25\xd3\x6e\x9c\xa2\x67\xfc\x70\x28\x93\xcf\xff\xdc\x68\x04\x0f\xe4\xf7\xef\xd5\xcb\xf3\x97\x63\x9a\xac\xb7\x7b\x54\x56\xb8\xfe\xfa\x9f\xfe\xff\xff\xd3\xbf\xbb\xf9\x4b\xf5\xf2\xec\x1d\xd3\x24\xab\xbe\x5e\xed\xeb\xba\x78\xf8\xfd\xf7\xd7\xd7\xd7\xe9\xeb\x7c\x9a\x97\xcf\xbf\x87\x41\x10\x34\x15\xaf\x28\xc8\xc3\x31\x89\xb3\xef\x10\xe0\xec\xfe\xfe\xfe\x77\xf2\xf5\xca\x23\x5a\xdb\xd7\xab\x70\x71\xe5\x51\xc5\x8d\xfe\xbd\x4d\x50\x55\x7d\xbd\xaa\xea\xf2\xb0\xad\x0f\x25\xf6\xe3\x6d\x9e\xf9\x49\x8e\x1a\x66\xbf\xda\xfc\x85\xac\x87\xcd\x14\xfe\xee\x3f\xa1\x0a\x77\x13\x3e\x7b\x37\xc1\xf1\xd1\x39\xd1\x1b\xc2\x86\xe7\x0d\x90\x3b\x94\x6d\xdf\xfc\xaa\x88\x33\x6f\x5e\x79\x71\xb6\x8b\xb3\xb8\xc6\x5e\x73\x16\x47\xe5\xba\x6d\x2a\x5c\xae\xab\xba\xcc\xbf\x63\x3f\x42\xd5\x1e\x95\x25\x7a\x7b\x08\xbc\xc5\x42\x2c\xcd\x77\xbb\x0a\x37\xfa\x29\x2b\x6b\x70\x6c\x51\xf1\x40\xa6\xa3\xd3\x6d\xfd\xbc\x8c\x9b\x25\xbe\x0c\x3e\x79\xcb\xe0\xd3\xfb\x5f\xbf\xe3\xb7\x5d\x89\x52\x5c\x79\xbd\x34\x9e\x82\x4f\x27\x67\x3a\xde\xc3\x25\x00\x3d\x9f\x7b\xb3\x19\x00\xee\x2f\x82\xf7\xe5\x00\xf4\xfe\x6c\x16\xbc\xdf\x0e\x6a\x61\xb6\x0c\xde\xeb\xdc\xbd\x85\x30\x0c\xde\x1d\x86\xa7\x8a\xd3\x22\xc1\xed\xf8\x74\x87\x88\x32\xaf\x51\x8d\x3f\x07\x11\x7e\x9e\x34\x0d\x6b\x5f\xe6\x2b\xfa\xed\xfd\x2f\xbf\x53\xbe\xfb\x4b\x84\x77\xd5\xe6\x2f\x05\x6a\xd4\x65\x42\xd0\xd7\xab\x4f\xe1\x3c\x08\x82\x2b\xf6\xdb\x67\x7c\x3d\xbf\xf2\x76\x71\x92\x7c\xbd\x6a\x96\xe3\x95\x17\x47\x5f\xaf\xd0\x95\x17\x7d\xbd\xfa\xd7\x59\xe8\x2d\x93\x95\x37\x7f\xb9\x4b\xfc\x95\x37\xf7\x57\xfe\xfc\x3f\xdf\xfd\xb8\xfa\x7d\xf3\x97\xdf\x29\xf6\x43\x85\x3d\xb2\x48\x1e\xf6\x25\xde\x91\x06\x50\xcf\xc2\x20\x8c\xdf\xa0\x18\x53\x97\x2f\x06\x42\x42\xf5\xf2\xbc\xf9\xe7\x89\x25\x31\x96\xf8\xa9\xc4\x05\x46\x8d\xc4\x61\x7f\xe9\xea\xb9\x68\x04\xe6\x2e\xc0\x8b\xce\x33\x98\xdc\xe6\x92\x7d\x6e\x9b\x27\x09\xbb\x13\x25\x9b\x2e\x18\x1f\xb7\xcc\x8f\x6f\x3e\x3e\x16\x79\x85\x23\xbf\x99\x84\xaa\x8d\x4b\x4e\x3e\x1d\x8a\xaa\x2e\x31\x4a\x59\xf1\x49\x34\xab\x3d\x97\x71\xd4\x1e\x0c\xc8\x0f\x5e\xda\xb4\x7d\x48\xb3\x8a\x04\x13\xf2\x88\x4f\x27\x29\x6e\x2d\xc4\xfa\xf7\xb6\x6a\x99\xbf\x56\x7c\xa5\x2a\xb5\x2c\x9f\x50\x89\x51\xf5\x70\xc5\x3d\xcd\xa9\xeb\xd1\x95\x77\x45\x2f\xe4\xda\x02\x29\xda\x31\x89\x17\x02\x04\x1f\x52\x5e\x5c\x36\x87\x24\x50\x71\x30\x1d\xae\xb4\x79\x12\x0d\xf7\xdd\x65\xb9\xe3\x24\x49\xee\xd8\x96\x19\x03\xe1\x94\xe9\x93\x60\x4e\xe2\x90\x3f\xcc\xd4\xc9\x7b\x98\xd1\x21\x6e\x46\xf6\x81\x8e\x6b\x67\xc8\x8c\x6b\x9c\x32\x23\x65\x55\xa3\xb2\x96\xa6\x4f\xfa\x40\xad\x9c\x15\x4e\x76\xac\x80\x29\x03\x41\x10\x0c\x18\x82\xac\xde\xd3\xbf\x3f\x87\x36\xae\x85\x01\xb5\x41\x10\x81\xe4\x51\x08\xad\xa3\x40\x99\x09\x1c\x05\x9c\x45\xd0\x18\x34\xc5\xc2\x08\xe0\x2c\x1a\xd2\x69\xc5\xff\x62\xc0\x28\xb8\xd4\xd4\x87\xc5\x56\xab\x0b\x11\x76\xe4\xb1\xeb\x86\xfb\xd8\x8a\xf7\xe8\x3d\x4e\xb8\x37\xf5\xbe\x73\xe6\x7c\x89\xab\xf8\x29\xc1\xa3\x18\x66\xee\xca\x30\x73\x17\x86\x99\x4f\x8c\xcb\xa6\x99\x75\x62\xf0\xd1\x99\x28\x14\x98\x88\xf5\x4f\x85\x91\xef\x06\xf8\x0d\x03\xe1\x1a\xf5\x16\x41\x60\x3b\xe1\x93\xc2\x79\xd2\x25\x83\x80\x66\x9c\xdc\xd9\x44\xc9\x18\x31\x64\xa8\x66\x93\x4a\x4a\x15\xf9\x79\xf5\x6a\xc0\xe6\x66\xc3\x4a\xae\xc3\x46\x75\x41\xa8\x39\xa0\x17\x5e\xa4\xb8\x7d\x5f\xa6\x13\x91\x10\xbf\x76\x5c\x67\x34\x0c\x83\x3a\xd5\xd6\x16\x8f\x62\xf7\x38\x75\xee\x1e\xcd\x93\x67\x22\x5d\xf8\xaa\x90\xe5\x45\x40\x0a\x9c\x21\xfb\x89\xc4\x94\x63\x6a\x11\xda\x46\x6e\x5f\xa3\xaa\x8d\x6f\x90\xd8\x46\x86\xa9\x0d\x7d\x70\xf6\x79\x1b\xb9\x5d\x0f\x41\x2a\xf4\xc9\xc6\xb1\x2e\x30\x66\x2e\x1b\xa1\x4d\xb8\x22\xf3\x0e\xc9\x25\x9f\xcb\xf0\x9d\xe1\xb5\x44\x05\x77\x12\x52\x0b\xc6\xad\x0e\xef\x7a\x2c\xd7\x5d\x3b\x33\x93\x1d\x12\x46\x6a\x9d\x51\x33\x94\x8c\x0c\x72\x2e\xbf\xf4\x58\x5e\x66\x0d\xb3\xa0\x75\x1f\xb0\x92\x24\xcc\x17\xe1\x6d\x29\x50\x48\xd9\xc6\xdd\x18\x3f\x66\xd3\x2c\x8f\xb0\xe4\xb9\xe0\x3e\x0e\xa6\xba\x7d\x3d\x55\xeb\x89\x56\xdf\xf9\x39\x9d\x19\xd9\x8f\x11\x5d\x00\xa8\xef\x42\x3a\x0a\xdd\x19\x32\x37\xde\x74\x9b\x17\x6f\x3e\x8d\x23\xd9\x06\xa0\x34\xef\xe0\x16\x70\x75\x4b\x07\x40\xbb\x40\x95\x42\x82\x71\xbe\xef\x8b\xaf\x12\xc6\x4d\x86\xd8\xa2\xfb\x5c\x40\xb5\xec\x53\x21\xd6\xb8\xd8\x4c\xc8\x12\xcf\xb9\x2b\x7d\x95\xac\x72\x15\xea\x08\xb1\x91\x0c\x31\x3a\xb9\xd2\xea\x42\x9e\x4c\xd1\xc5\x36\xd4\x36\x16\x67\x46\xb6\x06\xbf\xe9\x99\x59\x85\xad\xdb\xd0\x9c\x2c\xcc\x26\x03\xf7\x0c\x1a\x2f\x7d\xb7\x13\xa1\x1a\xd1\x13\x99\x84\xa2\xcc\x13\xf7\xf6\xea\xfc\x3b\xce\xfa\xa1\xc9\x65\x56\x89\x5f\x30\x4a\xa0\x27\xa8\xe7\x73\x5c\xbf\x20\x70\xae\xeb\xcc\x7f\x5c\x44\xf0\xfb\x82\x21\xda\x3f\xb9\x7e\x3e\xab\x37\x83\x30\x68\x7d\x72\xaa\xdd\xf6\x6c\xf6\x0e\xf3\x57\xd3\x39\xfa\xbc\x00\xb2\xec\x1a\xab\x90\x1b\xfa\x41\x35\x28\xb9\xe6\x1a\x2a\xcf\xf6\x12\xa5\x56\xe8\x23\x49\x85\xef\x23\xa8\x8d\x73\x9b\x55\x35\xca\xb6\xc3\x88\xb3\x55\xee\x23\xd4\x56\xb7\x8f\x68\x6d\x31\xf7\x52\xaa\xd5\xe8\x23\x4f\xab\x60\xa4\x09\x5c\x4a\xd3\x24\xce\xbe\xa3\xa7\x04\x5b\x48\xeb\xa9\x68\xa4\xb0\xa7\x9e\x91\x50\xe3\x1a\x55\x89\x75\x02\x65\xde\x2b\x0e\x90\xcc\x1b\x06\x5c\xe0\xa6\xa6\x8d\x60\x52\xb3\x46\x28\xf6\x6e\xc9\x74\xc7\xc0\xee\x15\xda\x40\x47\xa0\x77\x4d\xc8\xdc\x5e\x6c\x9e\x33\x06\x18\xf5\xa5\xef\xd8\xd3\xe4\xd0\x43\xa1\xfd\xa4\xc7\x7c\x0b\xe2\x6c\x8f\xcb\xb8\x7e\x17\x7d\xe5\x9d\x8f\x5a\x1e\x55\xf6\xd1\x68\x83\x8e\x45\x87\xe1\x98\xcf\xbb\xb2\x50\xf1\xd8\x6f\x34\x94\xd7\xee\x23\x95\x63\xba\x0f\x74\x87\x8e\x91\x68\x1a\xd9\x3d\xfc\xc0\xa3\xb5\xee\x5c\x11\x6a\xaf\x47\x3d\x87\xdb\xea\xa9\x24\xb6\x63\x0c\xe6\x2f\x07\x3f\x3a\xe3\xdc\x68\x4b\xa8\x31\x70\x4c\x2d\x38\x9c\xc6\x09\xa8\x7f\x3a\xa3\x9b\x92\x16\xa4\xb5\x20\x59\xa8\x7f\xea\xd0\x0d\xa0\xeb\x03\x27\x60\x30\x15\xa3\xa7\xd0\x90\xe9\xaf\x4d\xf1\x37\x19\x3d\xa7\xa8\xaa\xe2\xec\xf9\x02\x33\x19\x25\x1d\xb2\x31\x93\x08\x10\x32\xc0\x90\x64\x6e\xba\x67\xd6\x8c\xcd\xf6\xda\xa0\xf4\x26\x01\x49\x13\xe2\xa7\x60\x7e\x3f\x76\x76\x58\x1a\x9e\xcb\xcc\x4e\x8b\x6c\xc4\xec\x40\x84\x0c\x98\x1d\x73\xd3\xf6\xd9\x31\x37\xdb\x3b\x3b\x7a\x93\xd0\xa3\x72\x74\xb7\x9b\xdf\x8e\x3e\x63\x97\x31\x79\x0f\x76\x99\xe9\xe9\xb0\x8d\x98\x1f\x90\x94\x01\x13\x64\x69\xbc\xe7\xcc\x6f\x6e\xb8\x77\x8a\x80\x46\x81\x39\xda\xde\xce\x17\x8b\xe5\xd8\x39\x22\x1a\xe7\x65\x26\x88\xa1\x1a\x31\x3b\x3a\x11\x03\xa6\xc6\xd4\xac\x7d\x5e\x4c\x4d\xf6\x4e\x8a\xda\x9c\x25\x15\xd2\xa8\x19\xf9\x56\xe2\xe4\x6b\x8a\x1f\x47\xdc\x8f\xdb\xea\x5a\x47\x03\xa8\x67\x89\xbb\x3d\xf0\x5c\x22\x1f\x36\x2d\xc7\x0c\xeb\xa9\x54\x06\x3a\x49\x24\x69\x21\x95\x0e\x59\x84\xcb\x24\x1e\x60\x1d\x6c\x66\x16\x45\x51\x89\xab\x4a\x62\xa5\x01\xd5\xb5\xab\x9a\x01\x75\x49\x97\xc7\x54\xd6\xf9\xb3\xb3\xcc\x5e\x06\x1f\x35\x22\x5f\x06\x17\x71\x93\xbd\x0c\xa6\xbc\xac\x2f\x84\xa9\xcc\xeb\x7c\x9b\x3b\x6e\x2b\x26\x3e\xb1\x56\x70\xbf\x00\x84\x79\x61\x80\x30\x34\xcc\xfe\x90\x1b\x47\x7d\xbe\x07\xa9\x99\xca\x0c\x0f\xa9\xab\xce\xe9\x90\xba\xe6\x59\xd4\x9d\x6f\x2c\x33\x08\x00\xbb\x5d\xc1\xda\x66\xae\x77\x4f\xb1\xce\x5a\xff\x5d\xaf\x69\xc6\x1c\x34\x74\x70\xb6\xfa\xeb\xc1\x33\xd5\x5f\x4f\x9f\xa5\xf3\xb7\x4f\x6f\xba\xcd\xd3\xa7\x38\xc3\x91\xcf\xe7\x15\xb8\x8f\xe0\x9b\xcb\x48\x39\x51\xdb\x70\x5a\x2f\x01\xdd\x49\x73\x66\x77\x07\x62\x80\x9b\xc6\xa1\x84\xf4\xcc\xa6\x85\x08\x6b\x6c\x18\xf1\xe2\x5b\xbf\xb3\xd1\x56\x83\x76\x39\x41\xa0\x92\x98\x26\x07\xb0\x79\xf7\x89\x3e\x0f\xb3\xe2\xf8\x6e\x18\x5f\xa8\xbb\x60\x90\x12\x21\x4e\x5c\x77\x23\xa9\xe6\xe2\x35\x25\x03\x11\xef\x2f\xff\xc0\xe9\x89\xb8\x04\xc7\x49\x5c\xbf\xf1\x50\xaf\x5a\x18\x50\xa0\x26\x8f\x05\xa7\x60\x60\xfe\xc5\xdc\xc6\x8d\x0e\x75\x0e\x37\xdb\x2e\x3a\xf9\xd6\x78\x0d\xe1\xe2\x4f\xf0\xff\xe7\x7f\xff\x1f\xde\x80\x7f\xaf\xac\x19\x40\x79\x58\x3d\x1e\xab\xfd\xfa\x66\xba\x2b\x31\x26\xfa\x1b\x4d\xe2\xc3\xe2\xae\x88\xd4\x93\x12\x6b\xc8\xd5\xd2\x93\xb2\x88\xc6\xd9\x2e\xf7\xa2\x68\xfa\x03\x97\xb9\x14\x83\xd5\x06\x57\x47\xd3\x98\x74\xd9\x47\x49\x92\xbf\xf2\xe0\xda\x5d\x71\x84\xb3\x37\x9e\x7b\x57\x9b\x3e\xfb\x64\x69\xe3\xce\xe2\xfe\x29\x9d\x04\xf2\x9c\x4b\x30\x38\x95\xdc\x16\xc2\xb0\x4d\xa1\x22\x20\xd1\x32\x76\xa4\xa8\xfa\x3e\xfc\x6d\xdf\x4b\x8c\x5f\xff\xf7\xfc\xf8\xf5\x2a\xf0\x02\x2f\x5c\x78\xe1\x42\x7e\xbf\xd4\xff\xf6\x8f\xbd\x8a\x6a\x2a\xf9\xe5\x21\xc1\x5f\xaf\xf0\x0b\xce\xf2\x28\xba\xf2\xb6\x49\x5c\xa8\x65\xec\x25\xd4\x62\xba\xfc\x97\xdb\xe6\xbf\x5e\x38\xbd\x9d\x7b\xb7\xd3\xd5\xcc\x9b\x79\xb3\x70\x3b\x6b\x7e\x2e\xa6\xf3\x7b\x6f\xe5\xdd\x4e\x97\xde\x6c\xd6\xfc\x5f\x75\x3f\x0d\x6f\xfd\xf9\x74\x36\xf3\x66\x33\xff\x76\xba\xdc\xfa\x0d\xa0\xdf\x00\xfa\xab\xa6\xc0\xa7\xe5\x3f\x1a\xe4\xb3\xdb\xad\x1f\x4e\x6f\x57\x5e\xe0\x2f\xfd\x70\x1a\x2e\xfc\xa5\xbf\xac\xe8\x1f\xde\xb2\xf9\xd7\x6b\x7e\x78\xcd\x0f\xfa\x47\x53\xf6\x23\x0d\xfc\xbb\x06\xef\xaa\xa9\x38\xf7\x66\xd3\xf9\xc2\x9f\x7b\xf3\xaa\xf9\xc3\x9b\xd3\x7f\x7c\xfa\xc3\xa7\x7f\xf8\xcd\x1f\xf3\x1f\x7c\xc8\xd8\x8b\x30\xe1\x39\xd5\x9f\x93\xf2\x0b\x4e\x8a\x59\x15\x11\x22\x74\x8a\xdb\x8a\xe8\xc5\xd5\x25\xe6\xd6\xae\x13\x2e\x94\xe6\x16\x0c\xd5\x4b\xdf\xcd\x91\xac\xf7\x4a\xf8\xa5\x27\x54\x61\x72\x06\xee\x6d\xbe\x8b\xb7\xf2\xff\x34\xba\xee\xff\xcd\x3f\x7b\x57\xef\x4e\x84\xb5\xd5\xff\x3f\x0a\x21\x61\xf8\x69\x59\x44\xf5\xc7\xea\x5d\xc6\xc3\x3a\x9a\xee\xf2\x44\xcc\x67\x64\xca\xf0\xb5\x96\xb5\x06\xf9\x0a\x8c\xa1\x02\xf6\x09\x08\x2f\x79\x50\x40\x5e\x34\x92\xfe\xf0\x80\xc7\x34\x4b\xc2\x84\x47\x04\x2f\xd5\x20\xd4\x30\xb0\x94\x2c\xa1\xf3\x2c\xb4\xa3\xb6\x45\xaa\xb8\x50\xee\x26\x3a\x55\x4c\x47\x4b\x71\x8d\x48\x30\x19\xa2\xa4\xa9\x1d\x8c\xf0\x0e\x1d\x92\xda\xa5\x8a\x99\x70\xf6\x74\x51\xfa\xfd\xae\xc4\xaa\x69\x1f\x61\xaf\xf8\x17\x79\xdf\x6c\x66\x84\xc5\x1f\xc2\x29\x4b\x97\x10\x92\x67\x9c\x7a\x2c\x76\xd9\xc7\xba\x29\x12\xd6\xfc\x5f\x53\x1c\xc5\xc8\xfb\xdc\xc5\x09\x5c\x84\x41\x71\x9c\x9c\x78\xef\x28\xa7\xc4\x79\xc6\xba\x57\x52\x2d\xba\x7b\xa5\xf6\x39\x9c\xf4\xa7\xd6\xf8\xad\x59\xe9\x7e\x97\x5f\x83\x25\x15\x92\x0e\x2c\x7a\x96\x48\x31\x25\x84\xa4\x77\x0c\x6e\x2f\x12\x73\x2c\x75\xac\xf7\x6e\x0e\x22\x74\x12\x03\x79\xfa\xf7\x41\x10\x8c\xc8\xe3\xc3\xd2\x62\xb1\x49\x6d\x73\x04\x09\xd1\x87\x78\xf8\x26\x22\xfe\x04\x9d\x5d\x78\xdf\xda\xbe\x8c\xbd\xeb\xf4\x78\x2e\xd5\x07\xd0\xc0\x56\xb7\x4c\xc4\x17\x6f\xa1\x12\x41\x24\x33\x4f\x98\x83\xd3\x91\xf9\x8a\xda\xf6\xa8\xd8\x71\x8b\x69\xca\xcf\xe2\x63\x72\x3b\xb5\x0d\xd2\xc8\x58\xb7\x34\xc4\xf5\x33\xe1\xda\x2e\x9a\x5a\xd4\x94\x55\x0e\x27\x77\x5e\x95\x57\x81\x5e\x2a\x5c\xd0\xdd\x95\x37\x27\x0e\x03\x6b\xd9\xd5\x8b\x7c\x0e\x85\x92\xd2\xfa\xe3\x45\x51\x87\x38\xfa\xb0\x27\x30\xca\xa3\x0d\xf2\x53\x7a\xd4\x1d\x48\x24\x01\x4f\x5f\x79\x0c\xaf\x96\x56\x23\x4c\xb7\x79\xdf\x5c\xc9\x9b\xdd\x74\x8e\x53\x85\x58\x89\x9d\xfd\xfc\x50\x37\xc7\x9c\x76\x78\xdb\x18\xbc\xa1\x12\x27\x9c\xfe\xd6\x12\x69\xe9\xd2\x73\xb5\xa4\xd2\xd3\xa9\x95\x66\x45\x8b\xad\xd0\xdf\x62\x2b\x77\xc5\xf1\x1d\x22\xd9\x8b\x48\x1a\x0e\x79\x5b\x02\x64\xbf\x18\x2a\x47\x48\xbd\x4a\x23\xb2\x2c\x95\xd5\xcd\x70\xdf\x40\xed\x15\x5a\x9e\x57\x35\x35\x65\x47\x19\x13\x07\xf9\x8e\x3c\xd5\x57\xa2\xdf\x18\x91\x1b\xc2\x81\xaf\xe5\x6c\x50\x40\xf5\x93\x1c\x76\x97\x6d\xf5\x33\xea\x44\xb7\x96\x33\x96\x82\x39\x44\x80\x48\xbe\xa3\xb2\x9a\xf1\x7d\xa5\x61\x16\x8f\xc4\xda\x27\x7f\xcd\xc8\xa3\x59\xe6\x4a\x60\xa1\xbf\x99\x14\xd5\xa7\x80\x5d\x71\x3b\xd6\xda\xa1\xed\x22\x08\xdf\xdb\x5b\x57\xc7\x6a\xfc\xfa\x15\xe0\x59\x53\xb2\x65\x29\x75\x01\xc4\x04\x09\xad\xc5\x78\x00\x64\x29\x16\x7a\xab\xcb\x78\x05\x62\x62\x50\x4a\x62\x9e\x7b\x98\x75\x9d\xda\x8d\x6a\x35\x89\x32\x84\x8a\xa4\x57\x15\xb5\xb7\x66\x8a\xd9\x6b\x73\xfa\xa7\x37\xf3\xc8\x86\x29\xff\x12\x32\x6a\xb0\x6d\x3e\x5c\x35\x5b\xec\x28\x8e\xea\x17\xaa\x5a\xd8\x5c\xf6\x70\x5d\x89\x9b\xcb\x4b\xd5\xc0\xb9\xf4\x79\xc5\x13\xae\x5f\x31\xce\x0c\x23\x2a\x0a\x2c\x1a\x2a\x0c\x04\x53\xd3\x63\x8a\xe7\xba\xf6\x60\x53\xd5\xa8\x8e\xb7\xda\x56\x00\xcf\x64\xab\x67\xb2\xd9\x6c\x34\x4d\x6a\x44\x63\x69\xb1\x77\x31\x4e\xa2\x0a\xd7\x8c\x87\x96\x06\x16\x8a\x22\x28\xc3\x71\x3f\xf7\xe8\x9c\x32\x9d\x1b\xf8\xae\x91\x60\x52\x6e\xcd\x05\x59\xf9\x21\xfb\x8f\xa4\x83\x17\x25\xf6\xe9\x86\xe8\x44\x54\x51\x62\x6f\x9b\x47\xf8\xf4\x9a\x97\x11\x9d\xf9\xa7\x12\xa3\xef\x7e\xf3\x1b\xac\x21\xbd\xc9\x31\x9d\x29\x1b\xe9\x4f\x62\xa1\x35\x3a\xde\x90\x7d\xac\xeb\x27\x39\x55\xdd\xb3\x44\xa2\xde\xcc\x20\x0b\x60\xe5\xe5\xce\x2c\x38\x80\x69\xef\x13\x12\x91\x98\x16\x9e\x55\x53\x12\xc3\x07\xf0\x3e\x2a\x58\x36\xc5\x53\x94\xf5\xcc\x34\xdc\x90\x5b\xf7\xdb\x70\xeb\x93\x78\xb8\x18\xd1\x84\x1c\x77\xd8\x09\x14\x60\x0e\x41\x31\x11\x94\x92\x31\xf4\xf0\x1d\x6f\x84\xdd\xbb\xad\xfb\x25\x8a\x1c\xba\xd3\xb6\xe4\x0e\xfa\x25\x8a\x4e\xf2\x56\x3b\x86\x4a\xb6\x3b\x8f\xea\x21\xab\xeb\xd8\x43\xde\x92\x3b\xa8\xd0\x43\xe6\x02\x37\x86\x4a\xae\x49\x8c\xea\x22\xaf\xec\xd8\xc7\xb6\xad\x01\xb0\x42\x2f\x99\x16\x33\x94\xd0\xbe\xd6\x2e\xf8\xa8\x71\x28\x69\x4a\xde\x43\x10\x62\x48\x02\x49\xc3\x58\xba\xdd\x31\x51\xb8\x01\xc9\x24\xe1\x9b\x2a\x87\xcb\x2c\xd9\x66\x16\xff\x68\xf6\x1a\xa6\xaf\x90\x51\x37\x14\xab\xf7\x4a\x6b\x39\xeb\x21\xd1\x5c\xfa\x32\xd8\x16\x28\xd3\x87\x43\x28\x3f\x41\x31\xe4\x9a\x16\x3d\x16\xed\x47\xd6\x80\x44\x13\x12\x39\x41\x9a\x8f\x42\x06\x3b\x07\x6d\x75\x78\xb5\x2c\xcf\x7c\xb1\x2a\x3f\x4f\xf4\xa6\x22\x17\x4d\xb4\xc2\x86\x24\x27\x98\xee\xf4\xc1\x95\x43\x8a\x68\x29\xbf\xb9\x38\x4b\x9a\x32\xa9\xd6\x96\xe9\x51\x2c\x3c\xb4\xb6\x72\xf7\xaa\x5e\x66\x3b\x66\xa1\x07\xc3\x70\xd3\x24\xf4\xea\xe5\x2e\x7d\xbf\xcb\x59\x14\x15\x05\x46\x25\xca\xb6\x72\x44\x3a\xd1\x7a\xc7\xd8\xaf\x4b\x14\x02\x5d\x17\x9f\x24\x0b\xbe\xa1\x55\xfd\xa6\x99\xde\xd2\x0a\xa2\xa9\x38\xd4\x34\xa1\xcb\x9e\xdc\x15\xa8\x9c\x33\x10\x6d\x9a\xff\xb8\x24\xb6\xea\xd2\x04\x0e\x40\x44\x2f\x58\xe4\xe5\x29\xe5\x39\x87\xe7\x19\xcc\xc6\x0d\x1c\xf1\xa6\xb7\x38\x9d\x88\x69\xc6\x5b\x63\xc0\x5d\x1b\x60\x19\x9c\x77\xa6\x74\x36\xf5\xa5\xea\x52\xba\x77\xfd\x9c\x00\xe1\x52\x14\x59\xb2\x54\xc5\x65\x0b\x87\x42\x5e\x06\x9f\x0c\xc9\x05\xee\xc4\xec\xcb\x92\x25\x49\xfa\xf2\x3e\xa5\x34\xf8\x4f\x88\x47\x0b\xa6\x31\x20\x77\x79\x99\x9a\x32\x16\xc2\x86\x98\x71\x67\xe4\x0b\x9e\x80\xdb\x59\x5b\xd0\xe0\xe5\x6b\xf8\xa6\x74\x2d\x9f\x0a\x7d\x1a\x5d\xa5\x1b\x06\x7a\x99\x45\x2e\xff\xaa\xbc\xac\x27\xda\xb0\xa8\x00\xca\x30\x49\xf9\x54\x9b\x7e\xe5\x65\xdc\xd0\xba\xcf\xcb\xf8\x47\x9e\xd5\x28\x91\xbe\x46\x71\xc9\x12\x46\x96\xf8\x05\x97\x15\xee\xba\x2e\x7c\xca\x5f\x7d\xfe\xd9\xf2\x49\x18\x00\xa5\x97\xf2\xa4\xb7\x27\xc6\x76\x2f\x58\xdd\xd2\x13\x63\x37\x0c\x74\xd1\xe9\xd7\x3a\xea\x68\x18\xe0\x4e\x06\x01\x0a\x9d\x56\x57\xf7\x1f\xd3\xb6\x96\xcb\x5f\x9c\x66\x96\xfa\x83\x24\xb9\x64\x16\x09\x7a\xf9\xab\x35\x62\x00\x84\x2e\x15\x24\x39\xa6\xbd\xf9\x15\x96\x9a\xf0\x37\x57\x14\x85\x26\xb5\x82\xcd\xb5\x39\xe3\xa2\xc3\xb8\xd9\x5b\x73\x1d\xed\x86\x08\x40\xa2\xc2\xc2\xc4\x9b\xbe\xa0\xe4\x80\x7d\xfe\xcc\x47\xcc\x19\xa2\x11\x60\x86\x55\x5a\x04\xba\xac\xd4\x95\x5c\x9f\xbe\x0c\x69\xd5\x58\x53\xa5\x81\x28\x16\x2d\x01\x5f\xa8\x38\xc8\xf2\x3a\xde\x62\x7d\xd0\xe4\xcf\x92\x4f\x20\x49\x50\x2e\x76\x85\x5b\xc4\x74\x52\x5b\x5b\x99\x66\xd3\x0c\x3a\x9b\x66\x20\xd9\x34\x03\xd9\xa6\x49\x9d\xf2\x80\xc6\xb4\xeb\x3f\xfb\x8a\x73\xaa\x36\xc2\xf4\x6a\x93\xc0\x23\x69\x1d\x87\x66\xcc\x10\x8b\x3b\xaf\x73\x67\xdc\xe9\x15\xaf\xb6\x48\x84\x65\x78\x4a\xd5\xfa\x72\x2c\xbf\xbe\xd6\xe4\xd3\x83\xa4\xe9\x87\xe0\x65\xd9\x7d\xa0\x8a\xed\x8f\x22\x20\xe8\x11\xdc\x0e\x22\x5b\x4b\xe5\xe3\x71\x7d\x10\xb8\x17\xb3\x6e\x12\x96\x04\xc9\x37\x43\x6b\x92\xc8\x15\x23\xea\x11\xef\x94\x2f\x80\x24\x1f\x46\xee\xa8\xea\x9c\xe6\x51\x95\x19\xe1\x1f\xe9\x11\x64\x38\x0a\x3a\xa9\x3c\xa3\x38\x6b\x8c\xde\x7b\x59\x45\xc4\x22\x6d\x99\xa1\xe3\x05\x3f\xcc\xa8\xe2\xf8\x4c\xc2\x2e\xf7\x69\x42\x40\x4a\xf1\x12\xa3\x88\x86\x9f\xce\x23\x9c\x92\xbc\xa5\x9e\x90\xc3\xd4\xa7\xca\x4e\x35\x8a\x2f\x14\xbf\x64\x87\xb1\x71\x80\xa1\x7e\xdb\xae\x83\xe8\x0c\x48\x4f\x7e\xb2\xe1\xce\xce\x43\x3f\xb9\x3f\x1f\xd5\x65\xe1\x80\xeb\x32\x45\xc3\x86\x9f\xf9\x9f\x8b\x79\x8d\x16\x8a\x28\x16\x4f\xc9\x3a\x5e\xe9\x0c\x2d\xdd\x1d\xdd\x17\xc7\x2e\x2d\xca\x42\x3e\x25\x53\x0f\xf6\x3c\xcd\x9f\x4b\x54\xec\xdf\xbc\x69\x27\x3c\x4e\xbb\x38\x49\x3a\x8d\x53\x04\x42\xc7\xb8\xa2\x9f\xc9\x59\x8f\xe6\xd9\x68\x0d\x0c\x5a\xb6\x90\x85\xb7\x50\x1a\x21\x5b\x8e\x11\x83\x0c\x4c\x4e\x0f\x27\x0e\xc1\x4e\x16\x94\xb6\x7b\x1c\xce\x96\xf7\x32\x78\x12\x67\xb8\x22\xd9\x60\xda\x3a\x76\x30\xe6\xea\x08\x77\x82\x29\x1d\xea\x28\xd5\xf1\xf6\xbb\xdc\x06\x44\x39\x81\xaa\xf1\x51\xbc\x1c\x9b\xde\xdd\x2e\x4b\x9c\xb2\xd4\xda\xd9\x76\x9f\x97\x72\x62\x03\x96\xe5\x68\xba\x4b\x50\xb5\xf7\x53\x5c\x55\xe8\x19\x8f\x92\xb1\xba\xe5\xa5\x4d\xa4\x19\x5e\x24\x61\x2d\x0f\xa5\xe9\xcd\x96\x9f\x14\x82\xbd\x42\xf3\x6b\x01\x8c\x96\xc4\x1c\xb3\x80\xad\x3b\x7c\x29\xf0\x1b\x5a\x31\x5f\xf4\x49\xf0\x3a\x9a\x13\xd7\x46\xf6\x83\x5e\xd7\xcb\x29\x39\xc2\x40\xae\xec\x57\xdb\x32\x4f\x12\x3d\x21\x81\x78\x8e\x13\xc0\x93\x38\xab\x2d\xc9\xaf\x77\xf7\xbb\xfb\x1d\x02\x4c\xb5\x68\xd1\xfc\xa3\xf4\x3a\xe0\xd3\x1c\xce\x9a\x7f\xa8\xcf\xd3\x0e\xa5\x71\xf2\xf6\x90\xe6\x59\x4e\x0e\xd3\x82\xa3\xe6\x6c\x2e\xa4\xd1\xbe\x65\x39\xe9\xee\x9b\x0e\x6d\x53\xbf\xf2\xf7\xa8\xda\xc7\xe2\xc0\x74\x37\xcd\x80\x1a\x10\x04\xa2\x15\x88\x5f\x3c\xed\xa2\x30\x9a\x09\xe5\xa2\x11\x58\xf2\xa6\x9c\x2e\xc4\x56\xa5\xbd\xef\xf9\x40\xf2\x63\x72\x33\xe6\xed\xdd\x5d\x78\x1f\x00\x14\x84\x28\xdc\xcd\x57\x62\x13\x46\x94\x74\x3b\x15\x1d\x7e\xa8\x73\x93\x57\xef\xe3\xcc\xfb\x6d\x77\xb7\xbb\xdb\x05\xc6\xda\x0d\xe1\xd9\x21\x7d\xea\x4c\xab\xab\xe8\x0e\xdd\xdd\x19\xc6\xcd\x27\x4a\x1d\x8e\xbc\x28\x7e\x91\x58\x05\x27\x78\x5b\xe3\x48\x98\xf7\x66\xea\x16\xe1\xdd\xdc\xda\x34\xb3\x3e\xd3\xea\x24\xad\x9d\x05\x78\x43\x45\xf7\xd0\x1a\x60\xb5\xe1\x84\x0e\xa2\x71\x38\x79\x67\x50\xf6\x0b\x0c\xa1\x9e\xcb\x74\x36\x91\xa8\x26\x77\x6b\xdb\xd4\xdf\xe6\x69\x8a\xb3\x9a\x33\x5b\x14\xe1\x39\xbe\x05\x21\xab\xba\x8c\xb3\xe7\x1b\xf3\x27\x3f\x6c\x83\x2b\x44\xd1\x13\x9a\x83\x58\x64\xde\x8e\xa2\x05\x5e\xde\x81\x80\x2f\xa8\x8c\xd1\x53\x82\xc1\x06\xf9\xc7\xae\xc9\x7b\x7c\xb7\xd8\x2e\x41\x4c\x11\xde\x39\x10\x96\x17\xb8\x44\x75\xde\x92\x86\xe7\xcd\x3f\x20\xe8\x77\xfc\xf6\x9a\x97\xc2\x3d\x3f\x73\xff\xd3\x21\x51\x9d\xa7\x0e\x7d\x4d\x71\x8d\xc0\x7e\xd6\xe8\xd9\x81\x74\x54\xd7\x65\xfc\x74\xa8\xe1\xb1\xfa\xf7\x03\x4a\xe2\x5d\xdc\x0d\xfa\xfd\x6e\x8b\x96\x2b\x10\x53\x51\x36\xc3\x50\xbf\x39\x8c\xea\xd3\x21\x4e\xea\x38\xb3\x4f\xcf\xdc\xd2\xa6\xc8\xd8\x34\x5e\x24\xbd\xe0\xef\xf4\x38\x71\xe1\xcd\x82\x59\x38\x33\x2f\xbc\x14\xd5\xdb\x7d\x9c\x3d\x3f\x95\x68\xfb\x1d\xd7\x27\x63\x5c\x8f\x75\x77\xb2\x14\xb7\x4d\xf0\x8c\xa4\xf4\x4c\x5d\x23\x2e\x75\xc4\x85\x33\x0c\xbe\x63\x6d\x8c\x9a\x7f\xdc\xdb\x93\x97\x18\x9a\xa3\xed\xd3\xd6\xbd\xb6\xca\x02\xc4\x68\xea\x5a\x59\x5f\x97\xab\xed\xed\xd3\x1d\x89\xe4\x1b\x61\x1f\x47\x71\xb3\xc2\xe4\xeb\x40\xae\x80\x34\xda\x50\x9b\xf8\x88\x3d\x6d\x06\xae\xe0\x04\x44\xde\x14\x37\x3d\xf5\x8b\xfc\x15\xf3\x2d\xcf\xaf\xcb\xf8\xf9\xb9\xf5\x6f\x0d\xe9\xfb\x11\xe1\x56\xaf\x4d\xc9\xae\xbe\xd7\x62\x74\x40\xbb\x7f\x10\x04\x02\xdf\xac\xc5\xad\xdd\x94\x61\x3a\x90\x28\x35\x67\x88\xe7\xbe\xb0\x6b\x41\x01\xe2\xce\xef\x4b\xf0\x7a\x9c\x12\xd3\xa6\x39\x57\xce\xb3\x42\xa3\x9b\x42\x7d\x37\x4c\x3d\x2b\x1a\x55\x81\x18\xef\xb6\x79\xb6\x8b\x4b\x9a\xb4\x72\xca\x7e\xc4\xd9\x33\xa4\x2b\xee\x76\xef\x60\x35\xaf\x90\x6f\x80\xd7\x5a\xfa\x03\x20\xa9\x9c\xe2\x06\x2c\xac\x43\xb0\x8d\x93\x38\x7d\x67\xdf\x55\x6a\xf9\xa3\xc8\xa1\x01\xc8\x1d\x15\xd7\x38\xad\x78\xf2\x28\xee\x93\xb2\xe9\x1d\x3c\x93\xe3\x67\x60\x7e\xf3\x65\xeb\xb5\x90\xa9\xd7\x67\x6e\xa3\xca\x94\x9b\xe6\x45\x1e\xe5\x19\x4e\xdf\x65\x3f\x1c\xea\x67\x23\x9e\x48\x66\x0b\xa2\xa0\xa3\x43\xbd\xf7\xc9\xb5\x51\x41\x2d\xbd\xb8\x59\xef\x13\x2a\x53\xbb\xc4\x96\x87\xa2\xc0\xe5\x16\x55\x98\x1d\x09\xc5\x11\x04\xd6\xad\x01\x2b\x95\xac\x20\xc7\xa9\xce\x5c\x2c\x05\x7b\x67\x69\x10\x90\xb2\xe5\x3e\x17\x1e\x8c\x10\x89\xe2\x85\x32\x1c\xbd\x1d\x57\xbc\x8b\x97\x38\x15\xf7\x82\x0e\x98\xc9\x97\x27\x54\xc5\x5b\x3f\x2a\xf3\x22\xca\x5f\x33\x2e\x61\x6e\x04\x40\xe6\xf4\x2b\xba\xcb\x0a\x58\xda\x14\xb1\xed\xb9\x93\x5e\x00\x18\x86\xa4\x7b\x26\x65\x89\x25\x21\xca\x0b\x9d\xe5\xa8\xf1\xbd\x75\x34\xe0\x32\xcf\x9f\xbd\xff\x96\xe4\x94\x95\x48\x8a\xe7\x28\x7e\xf1\x76\x79\x5e\xe3\x92\x87\xe1\xd0\x52\x0c\xcf\x42\xb1\x85\xf6\x40\x4e\xb3\x40\x17\x47\xda\x94\x3f\x2f\x8e\x46\xd4\xa7\x56\xb2\xf6\x25\xa1\x14\x67\x2f\x20\x0e\xfc\xd6\x34\xa0\x7a\x8b\x1b\xe1\xdf\x93\x82\x3c\x78\x67\x77\x79\x74\x98\x6f\xf8\x2f\xe2\x8d\xc8\x7f\x68\x71\x42\xdb\x2f\xec\xb2\x91\xcf\xe1\x0c\xa7\x5e\xf0\x3e\xcd\xe3\x68\xcb\x76\x1e\xef\x1b\xc9\x8d\xfa\x4f\x5f\x7d\x52\x58\x94\xf9\x4b\x1c\xe1\xf2\x51\x75\x74\x0e\xbb\x53\x3f\xf9\xdb\x7e\x6b\x15\x48\xb7\x56\x81\x74\x6b\x25\x78\xd8\x49\x84\x58\xb6\xc5\x1b\x09\x30\x89\x01\x29\xe1\x8a\x4a\xe2\x76\xfb\x2b\x43\x6b\x0a\xf3\xbe\xfc\xe5\xfa\xf7\x02\xd5\xfb\xd6\x74\x4e\xf8\x81\x30\xa7\x1f\x1d\x98\xb6\x37\x9d\x55\x6b\x53\x39\x50\xaf\x8e\x53\x92\xfb\xf8\x90\x51\xc7\x0c\x96\x91\xb9\x1f\x42\x75\x13\x70\x25\x94\xeb\x58\x0f\xd4\x08\xb7\xb6\x7c\xd2\x4d\x8d\x6c\xa3\x95\xed\x7c\xeb\x17\xbc\xad\xf3\xd2\xc7\xbb\x1d\xde\x92\x5d\xc3\xaf\xb6\x28\x21\x39\x8b\x09\xe0\xfb\x94\xea\xd8\x1a\x8d\xdf\xe2\xe8\xfa\xeb\xd5\xc3\xd5\xa3\x61\x9c\x5b\x03\xec\x72\xcc\x2c\x4b\x6f\x4d\xd1\x50\x3e\x10\xc2\xbf\x40\x75\x7b\xd8\x44\x49\x83\xaf\xa4\x63\x17\x25\x3e\xd4\x71\x1e\x9c\x1e\xfc\x26\x5b\x5e\xb9\xe5\xd3\xd8\x7d\x00\x0d\xed\x1b\xf4\x81\x53\x5d\xe9\x0f\xff\x2c\x7e\x95\xda\x06\x8a\x9f\x30\xde\x85\x6b\xc6\x9b\x3e\x7e\xc1\x59\x5d\x31\xcb\xd5\xe8\x79\xac\x36\xcc\x72\x4f\x63\xed\x8c\x98\xcd\x3e\x0c\xae\x73\x2a\xe1\x39\x29\xbd\x44\x49\x62\x9b\x8d\x4d\x17\x43\xc8\x4e\x24\x08\xa1\x52\xb0\xb9\x36\x6b\x46\xed\xce\x27\xee\xa7\xfc\x41\xfb\x2b\xdd\x04\x16\x81\xed\x95\xb6\xd4\x4f\xee\x10\xe3\x32\xb6\x66\x58\x70\x08\xf9\xc6\xcf\x84\xfa\x34\x14\x1c\x23\xc9\x0f\x21\x34\x82\x23\xb5\x1e\x4e\x9d\x28\x85\xe1\x40\x2a\x3d\x9c\xaa\x83\x4d\x64\xe3\x19\x91\x18\x3e\x72\xeb\xb2\xca\x7e\x36\xa0\x9e\xba\x74\x3d\xd1\x69\x09\xdc\x1a\xdc\x6a\x1a\xa2\xcd\x98\x37\x00\xa2\x83\x36\xe2\x6d\xc2\xe4\x5b\x9b\x88\x07\xbe\x99\x57\x9c\x49\xf9\x93\x77\x9b\x14\xa7\x53\xc9\x82\x8e\xec\x89\xab\x4c\x14\x9d\xd4\x53\x3f\xe0\x9e\x47\x26\xbd\x85\xc3\x49\x12\x17\x55\x5c\x39\x44\x37\xb0\xef\x2a\x4a\x50\x31\x4b\x80\x02\x26\x4e\xf5\x78\x67\xf6\x0e\x4f\x89\x61\xca\xa7\xf8\x2b\x7e\xef\xa9\xc7\xbf\xf9\xbf\x7a\xa2\x9f\x31\x3c\xff\x7e\xc0\xe5\x5b\x81\x4a\x94\x56\x1a\xcd\x2d\xae\xff\x17\xc0\xb5\x8d\xcb\x6d\xc2\x2f\xfd\x5a\xa5\x01\xbc\x9b\x24\x06\x1f\xa5\xbe\xfe\x90\xf3\x6f\xef\x34\xac\x77\xb2\x7a\x01\x8e\xdf\x97\xdf\x96\xdb\x87\x98\xe4\xad\xe9\xa7\x35\x3f\x7a\xda\xd4\x60\xa7\x8d\xd3\x75\x6f\x54\xf7\x3e\xd3\x65\xe9\x6c\xad\x06\xaf\xb1\x10\xe8\x89\x4f\x7c\x8d\x14\xf6\x41\xb5\x24\x4a\x80\x56\x1a\xcf\x66\x24\xe6\xa5\xcd\x83\x58\x19\x7c\xb4\xd9\x5e\x00\xb8\x68\xd3\x3c\xe4\xaa\x77\x36\x2b\x95\x19\x33\x8a\x2b\x66\x6a\x37\xf0\x26\x22\x42\x63\x2d\x79\x5c\xf4\xc9\xa8\xc4\x2e\xa3\xc0\xef\xb2\x6a\x2b\x66\x85\xee\xcc\x46\x56\x89\xc2\x59\x88\xa4\xeb\xbb\x11\xd3\x07\x79\x49\x4c\x4f\xb2\xd7\x5f\xfd\x24\xce\xbe\x3f\x6e\xb8\x6e\x20\x72\xd3\xd2\xca\x4d\x17\xd8\x3a\x95\x88\x07\x01\xdc\x9e\xba\xb5\xd0\x5d\xa5\x19\x90\x71\xce\x5d\xee\x2d\xd4\x5a\x18\x14\xef\x0a\xb4\x58\x39\x4e\x83\x64\xe5\x54\xe2\x87\x38\x45\xc6\xfc\x80\x1e\xcb\xdb\x23\x18\x67\x80\xbe\xe2\x19\xb3\xc7\xb6\xe1\xa0\xbc\xbb\x7e\x5e\xf2\x90\xea\xb8\xd5\xbb\xaa\xc6\xb9\x9e\xf4\x87\x7e\x10\xe6\xc6\x61\x11\x28\x2f\xcc\xd7\x6a\x94\xb7\xbb\xe0\x93\x77\xd7\x3d\x01\x6a\xd3\xfd\xab\xb7\x13\x6c\xcb\x9e\x0b\xc6\x23\xc3\x92\x90\x5a\xcf\x3f\x6c\x18\x48\x38\x64\xa2\x66\x93\x67\xff\x4e\x27\x4b\x2f\xef\x92\x83\x02\x01\x85\x40\x7b\xaf\x39\xca\x50\x73\x2a\x91\x7c\xc2\x68\x98\x88\x73\x84\x0e\x60\xb7\xb6\xa0\xeb\x22\x67\xd9\xd1\xda\xd2\xa4\x74\x6a\x34\x3b\xe6\x53\x17\x18\x7a\x6e\x0c\xbb\x73\x3e\x53\xd1\x74\x53\x6f\xb7\x91\xd2\x61\xf1\x97\xcc\x3f\x49\x78\x58\x46\xe4\xc8\xb2\xe5\xa2\x99\xe0\x78\x34\xeb\xe1\xa2\x38\x4b\x70\x6d\xd3\x87\x18\xc4\x09\x42\x2d\x98\x9e\x67\x40\x23\x2a\x0a\xf0\x3d\x1c\x79\xef\x47\xfe\xe3\xcf\xc3\x4f\xde\xef\x5e\x38\xf1\xbe\x78\xb3\x4f\x9e\xef\xcd\x8b\xe3\xa4\x9f\x76\x16\x0a\x8d\xa0\x68\x30\xf8\xb4\xf2\x2d\xa9\x2c\xa5\xcd\x13\x7e\x10\x03\xf2\x2f\xad\x99\x48\xb4\xb7\x07\x0b\x30\xd4\x63\x6b\x52\x97\xea\x18\xc2\x91\x6a\x36\xf9\xe9\x1d\x4e\xa1\x03\xe0\xd3\xee\x69\xb7\x95\x30\x6e\xae\xf9\x35\xcc\xad\x64\xc8\xa7\xb7\x1d\x92\x8a\x41\xbc\x9f\x25\x00\xf1\x88\xda\xd7\x33\xe5\x1d\x20\xd9\x82\xf4\x3a\xda\x93\x9d\xb5\x7e\xef\x23\xd3\x7f\x18\x2b\x2d\x2f\xf9\x16\x52\xa2\x7a\x89\x53\xe9\xd6\x64\xba\x6a\x26\x03\x78\xcb\xa5\x76\x64\x93\xc4\x9b\xeb\x1b\xa0\x90\x0c\xfd\xe6\xd2\x99\xa3\x2f\x70\xc5\xaa\x2e\xbf\x07\xea\x70\x20\xb1\xf2\xb2\x39\x72\x05\xe4\x61\xaf\x7e\xeb\xd8\xcf\x37\xfa\x73\x4f\xa8\x4e\x2b\xae\xbb\x7d\x3b\x24\xe3\x6e\xb8\x05\x9b\xb7\x1e\x06\x8d\xc0\x82\x2e\x67\xf4\x59\xe8\xb6\x0e\xfb\x0c\x41\x69\xf8\x7d\x2d\xba\x2c\x61\x13\xc1\x55\xf7\x1e\xa7\xef\x50\x24\xdc\x48\x1c\x53\x25\x88\x1d\x37\x55\xf6\x56\x24\x73\xd3\x06\x4b\x74\x00\x6e\xfe\x75\x03\xa4\x62\x01\x76\x3f\x18\x42\x96\xe4\x39\xc4\x2c\xe4\x26\x97\x89\x76\xb7\x02\x9d\x79\xb9\x88\x21\x37\x93\x6d\xf4\x04\xe8\x29\x7a\xd0\xec\x27\xf6\xf0\xc3\x80\x7a\xe1\x3e\x2c\xf0\x08\x6e\x78\x04\x63\xd9\xfe\x2d\x05\xff\x92\xde\x9d\xdf\xf1\xa0\xc2\x4e\x8d\x52\x4b\x84\xa5\x65\xf9\x4d\x45\xe7\x64\x62\xa0\x93\xb2\x6b\x68\xa0\xa1\x14\x12\x45\x34\x3d\x99\x78\x75\x74\x92\x1c\xa4\x8d\x56\x28\x82\xce\xdf\xe2\x24\x79\x9f\x3e\x97\x71\x24\x24\xea\xd0\x32\x77\x70\x94\x4b\xe2\x1b\xe4\x36\x27\x10\x69\x42\x14\x18\x73\xc7\x61\x16\x67\xc2\x61\x36\x60\x20\x36\xf2\x2b\x57\x35\x02\x4d\xef\x72\x17\x6e\x6b\x5d\x08\x1d\xf0\xec\x0e\xce\xb8\x4c\x82\xb0\x2d\x8b\xa3\xe7\xdf\x2a\x4f\xbd\x82\xbb\xc9\x4d\xe0\xcd\x66\x2c\x42\x83\xd7\x08\x50\x6b\x62\xe6\xf3\x50\xe9\x86\x04\x80\x8f\xba\xd8\x26\x5c\x8d\x06\xd7\xf9\x17\xba\xce\x65\xbd\x9a\x4a\x0e\xed\x9a\x6d\x2d\xda\x09\x1d\xc5\x97\x62\x51\x50\x45\xd5\x36\xc1\xa8\x7c\x78\xca\xeb\xbd\x1b\xb3\x11\x2f\x08\x40\x34\x88\xe1\x6b\x57\x2d\x71\x51\x9e\xfa\x25\xde\xbe\x6d\x13\xc9\x8f\x49\x59\x17\x12\x94\x57\x97\xe3\xcc\x0e\x30\xae\xcd\x75\xcf\xfb\xe3\x40\x7a\x7f\xcc\x7e\x29\xd7\x07\x30\xee\xa7\x3c\x7a\xb3\xbd\x9c\x20\xc2\x31\xbc\x97\x62\x6f\x68\x4b\x46\xc6\x19\x45\x27\xf9\x98\xcc\xee\x2a\xd4\x02\x43\xe5\xcd\xb5\x16\x0f\x13\x02\xdc\xa2\xa2\x99\x86\x3f\x68\x0f\xc8\xc1\xee\x56\x0a\x09\xc1\x83\x3a\x01\x01\xc2\xa5\x57\xbc\x8e\x70\x7f\x70\x25\xbe\xe3\xfa\xe6\xcc\x65\x6e\x66\xee\xd8\xcc\xbc\xbf\x99\xb9\xa5\x99\x85\x63\x33\x8b\xfe\x66\x16\x96\x66\x96\x8e\xcd\x2c\xfb\x9b\x59\x4e\xe0\x14\x06\x2e\xf3\x34\xac\x0e\xd0\xbc\xef\xad\x04\x8d\xa4\x07\x1b\x34\x85\xc3\xea\xc8\x14\x2c\x09\x01\x73\x77\x02\xa0\xc9\x1d\x56\x47\x26\x60\x3e\x57\x75\xb2\x1e\x64\xd0\xb4\x0f\xab\x23\x13\x10\x2e\x89\xa1\x61\xd9\x10\x20\x47\xcd\xa7\x1e\x66\xdd\x6f\x1c\xc5\xb5\x07\x38\x66\xb6\xc1\xfa\xc5\x40\x09\x0e\xa8\xa4\x40\x6f\x7d\x18\x9a\x66\x2f\x42\x0a\x80\xa8\x23\x64\x5a\xe7\xdf\xb1\x98\xc8\x40\x46\xc5\x55\x13\x62\xd0\x3c\x63\xb0\x3a\x94\x23\xc6\xc9\x58\x79\xc0\x10\x0d\xc1\x61\x1e\x1d\x21\x6a\x1b\x70\xcc\x58\x34\x3c\x6d\x0d\x08\x74\x1f\x10\xa7\xe2\xde\x5c\x0d\x02\x05\x62\x82\x08\x59\x94\x2c\xa6\xe1\xdd\xf2\xb6\x69\x99\x1c\xbd\xf9\x9a\x1a\x8b\x5c\xca\x04\xc7\x8d\x45\x81\x3e\xef\x03\x31\x0a\x8b\x72\x26\xb3\x13\xe0\x74\x7d\x77\x7f\x7f\xb1\xf1\xa1\x82\x6e\xc6\xc6\x66\xf5\xf7\x35\x36\x17\x20\x74\xee\x90\x83\xa4\x1f\xcb\xe2\x22\x58\x96\x17\xc1\xb2\x9a\xc8\x87\x3a\x28\x99\xa4\xdd\x31\xdb\xfa\x3c\xd7\x90\x44\x52\xcc\x8f\x48\x95\xfa\x1d\xc6\xd1\x13\xda\x7e\x27\xef\x91\xbb\x2c\x21\x44\x4b\x25\xef\xeb\x1d\x30\x15\x5d\x18\x24\x19\x03\x39\xdc\x68\x2f\x67\x99\x1e\x2a\x26\x49\xe8\x3a\xca\x4a\xdb\xa0\xe1\x6f\xe4\x70\x01\x9c\x8f\xe6\xe4\x7c\xd4\x3d\x2a\x20\xa7\xec\xf7\xe9\x21\x13\xeb\x41\x97\xbb\xc2\x77\xda\x99\x93\x1c\x49\x34\x9c\xc3\x0e\xe3\x72\xcd\x3c\xb9\x51\x30\xdd\xc8\x6d\x13\x08\xb9\xe4\x90\x9c\xa0\xdb\x2c\xe9\x14\xf3\x5c\x0a\xe9\x09\xc8\x0f\x62\x66\x68\x86\xd4\x2f\xf3\xd7\x8a\xc6\xda\x11\x9b\xf6\x92\x98\x1a\xf7\x94\xe6\xda\xf2\x13\x37\x54\x1c\xd2\xec\x61\xf6\xbb\x3f\x03\x84\xf9\x2c\x5c\x89\x01\xc1\xcf\xea\x23\x69\xee\x19\x15\x2c\x51\x42\x73\xbe\xe5\x3d\x63\x54\x54\x0f\x4d\xd3\x29\x3a\x7e\x0e\x9b\xcf\x37\xb3\x5d\x39\x99\x7c\x5b\x3c\xd2\xbe\xb6\x4b\x89\x03\x97\xb8\xc0\xa8\xfe\xbc\xb8\xd1\x2b\x41\x82\x77\x16\x2e\xef\x2f\xd5\x17\x27\xc2\xc9\xe4\xec\xe2\x24\xe9\xe9\x40\x0b\x07\x74\x64\xad\x8c\xda\xa7\xf7\xf7\x69\x91\x17\xcd\x22\x6f\xbd\xe8\x89\xbd\xf6\x9a\x9b\x95\xe6\xe4\x56\x18\x84\x11\x33\x12\x01\x71\x0d\xa9\x7d\x71\xa5\x57\x3f\xf1\x5b\xb4\x39\xf0\x9a\x4a\xf2\x35\x81\x9a\x95\x03\xfa\x35\x9c\x2d\x4a\x24\x16\x20\xc0\x2f\x50\x86\x93\xe6\x58\x2a\xda\x51\xf9\xc4\x09\xcd\xc8\x31\x5b\xa5\x1b\x4c\x45\x1e\x2a\xf6\x22\x39\x9c\x60\xfb\x59\x72\x91\x24\x1e\x9d\x65\x5e\xa3\x1a\x7f\xf6\x17\xcb\x08\x3f\x4f\xd6\xc6\x0f\x86\x67\x2f\x24\xe8\x26\x91\x72\x34\x19\x91\xd8\xbf\xf6\xca\xa9\x6f\x04\xc8\x14\xc9\xd7\x52\x9d\x9d\x81\x67\x3a\x15\xbc\x4e\x35\x2c\xb5\x9a\x9c\x4d\x6b\x46\xda\x67\x00\x93\x94\xf6\x58\x46\x8d\x7e\xa9\x37\x4b\xfd\x36\x45\xdc\xcc\x59\x22\xcd\xcb\x46\x0d\xa6\xbc\x91\xe2\xec\xe0\x4d\xc5\x5f\xd6\x64\x7a\x86\x04\x7c\x03\x30\x98\xec\xe1\x2e\x28\x4e\x42\x0c\x89\x91\xfd\xd8\x5c\x9f\xdf\x93\x16\xc7\x39\x7d\x81\x62\x41\x0a\xcf\x99\x00\xcb\x2a\xd7\x02\xbb\xf5\x37\xd7\xf2\xa1\x8d\x1b\x93\x36\xd1\xd3\xd9\x23\x23\x63\x3a\x6b\x7c\x5a\x7d\x45\xbb\x01\x62\x79\x84\xce\x0e\xb1\xcb\xe3\xe8\x6a\x21\x77\x47\x8f\x23\x7d\x56\x73\x89\x71\x94\x30\x9d\x37\x8e\x14\x95\xd1\x8d\x79\x74\x67\xd9\x9b\x98\x91\xb5\x69\x92\xf0\x0b\x8c\x14\x25\xe3\x02\x88\x44\x8a\xce\x1b\x71\x91\xa4\xf3\x30\x19\x12\xa1\xb7\xf1\xac\x22\xbc\x8b\x33\xf6\x2c\xad\x69\x6e\x13\x25\xa0\xdf\x92\x0e\xb6\x89\x6a\x73\xea\x91\x05\x75\x04\x82\x6a\xb5\xf7\xef\x4c\xeb\x30\x83\x5e\x4b\xcf\x89\x75\x8f\x8b\x05\x4e\xe9\xb1\x93\x3e\x2b\x4c\x72\xd4\xa0\xf5\x9e\xf2\xe8\x6d\x53\xbd\x3c\x2b\x1e\x86\xe6\x65\x2d\xf9\x47\xae\xf8\xd5\xac\x1e\x4a\x7b\xc1\x8e\xb9\x7a\x0b\x2c\x84\x0f\x4d\xb6\xd9\xd0\x81\x4b\xee\x24\xdf\x06\x99\xcf\x62\xfa\x98\xfa\x81\x7e\xef\x0a\xbc\xd9\x74\x59\x79\x71\x46\x06\x00\x7b\x18\x55\xd8\x8f\x33\x3f\x3f\xd4\xeb\x51\x95\x34\x1d\xc8\xcf\xcb\xb8\xd1\x53\x96\xc1\x27\xaf\xe9\x95\xf1\x03\x75\xd9\xc7\xbb\xed\x22\xba\x53\xbb\xf3\xac\x1b\x8d\x8d\x5d\xf4\x23\xdc\x8c\xca\x34\xac\xd6\x40\x59\x2f\xe6\x79\x3f\xe6\x39\x80\x79\xde\x8f\x79\xd1\x8f\x79\x01\x60\x5e\xf4\x63\x5e\xf6\x63\x5e\x02\x98\x97\xd5\xfb\x5f\x79\x85\xef\xf8\x6d\x57\xa2\x14\x57\x9e\x3a\xd9\xa7\xe0\xd3\x4d\xa3\x91\x9f\x74\xf5\xb6\xda\xa2\x04\xcf\xff\x8f\xcf\xb3\x9b\xd9\xcd\x4c\x54\x6f\xe5\x0f\xef\xf3\xb9\xad\x76\x70\x13\xc0\xb5\xe9\x87\xf7\xf7\xbf\xfe\xca\xc4\xc9\x73\x73\xbe\xd3\xd5\x28\x8f\xa3\x8b\x84\x92\x93\x72\x0f\x98\x64\x6b\xf3\x91\x9c\xf9\x4c\x8f\xb2\x88\x4c\xe4\xd2\x70\x8a\x8a\xc2\x7f\x89\xf1\x2b\xb1\x67\xd1\xc7\x52\xec\xdb\xc4\x9b\x36\x1f\xd4\x71\x13\xb2\xc2\x3c\xa1\x2c\xc3\xe5\xb8\xd8\xa6\x17\x18\x52\x36\x1c\x8b\x2e\x79\x15\x23\x48\x7f\xa6\x74\x65\x71\x66\xf5\x67\x3c\x84\x41\x3b\x82\x2f\xaf\x22\x72\xdd\x21\xf1\x05\x95\x9f\x7d\xbf\x7a\x25\xef\xa4\x9e\x4a\x94\x45\xfe\x2a\x08\x6e\x7e\x0b\x82\x60\x22\x93\xb2\x51\x7c\xc9\x81\x98\x25\x62\xf8\xb8\x60\xad\x67\x08\x63\x98\xbc\x0c\xbd\xc8\x59\x37\xe5\x2d\xde\x53\xb6\xf8\xd6\x7b\x83\x9f\x29\x7a\xb0\x51\x3b\xd8\x34\xae\x58\x80\xa4\x0d\x1a\x5c\x63\x50\x4b\x1b\x59\x41\x11\x1d\xd1\x1c\x11\x38\x12\xb8\x41\x5c\xdb\x75\x05\x6f\x56\x41\x55\xa0\x6c\xc2\x34\xad\xe1\xf5\xa8\xae\xe7\x56\x8f\x9e\x5e\x07\xc0\x8e\xa4\x4f\xad\x3b\x84\x46\xe2\x9a\xe5\x0e\x3a\x92\x42\xa5\xaa\x89\x40\x29\x7f\xe3\xb9\x6b\x40\x44\xe6\xb4\x04\xac\x15\x86\xb4\x33\x6c\x01\x00\xf5\xdd\xa8\xb3\xb1\x3f\x08\xdd\x3f\x77\x3d\xd5\x5c\xe6\xad\x87\xf7\x4d\xa0\xe3\x88\x73\xe5\x7c\xa0\xaa\x81\xf1\x0d\x90\xe3\xc8\x83\xd8\x5e\x8c\x88\x76\xae\x38\x75\x17\x94\xce\x90\x14\xbd\x2b\x34\x89\x22\xe9\xc8\xad\x03\xbb\x01\xb1\xa2\x2b\xa0\xb9\x13\x86\x49\xda\xf0\xb0\x1e\x71\xb6\xc7\x65\x5c\x2b\x5b\x3d\x4d\x27\x65\xd6\x93\xa8\x85\xfc\xdb\x2e\x2f\xbf\xa6\x28\xce\xfc\x0c\xbd\xb0\x70\x42\x8f\x27\x31\x8d\x9c\x7f\x1f\x04\x81\xaa\xd3\x58\x2a\xf7\x3c\xf9\x11\xc2\x41\x4c\x43\x9c\x3a\xa3\xa5\xee\xb6\xc2\x23\x74\xe6\xf2\x36\x48\x2b\x71\x94\x88\x70\x25\xe5\x52\x6e\x21\xb9\xa2\xfd\x62\x4a\xc6\x90\x5d\xdc\x5d\xa8\xfc\xa4\x2d\x62\x80\x18\xa6\x21\xd4\x24\xe3\x31\x49\xc1\x2e\xe7\xe4\x53\x6c\x2b\x62\xc0\x76\x35\x55\x32\xf3\x5b\xec\xe3\x2a\x42\xe2\x97\x28\x7e\xe9\xe3\xa4\x16\xb0\xbd\xc8\x5a\x04\x01\xd7\xf0\xcb\xce\xbf\x9b\xdc\x6e\xf7\x25\xbc\xba\xa3\x29\x92\xfb\xa7\xb5\x7f\xf0\x64\x88\xd1\x6f\xbe\xde\x75\x34\x17\x7d\x11\x34\x22\x4b\xc4\x07\x4c\x9d\x90\xca\x66\xb5\x1a\x20\x0a\x6d\xd2\xd7\x49\x52\x8d\x90\x53\x8a\x94\x5a\x1a\x3c\x81\x16\xf7\x6e\x9c\xf4\xa7\xd4\xfa\x28\xa9\x25\x5d\x72\x2e\x75\x07\x0f\x52\x26\xbc\xf4\x22\xf3\xf9\xb3\x98\xe8\x52\xef\x3f\x3f\x3e\x7f\xe0\x47\xac\x77\xee\x06\x14\xb0\xeb\xf4\xf9\x9d\x79\xaf\x97\x1f\xa7\xfc\xd1\x55\xa7\x21\x99\x58\x04\xd4\x75\xf7\xe4\x7f\xbe\xe4\xd9\x11\x2c\x78\xbe\x18\xde\x83\x89\x0f\x3c\x16\x13\xc8\x44\x44\x2c\x6e\x42\x10\x4c\xd5\x6e\x63\x91\x56\xca\xae\x69\xb6\x51\x85\x41\xd0\x76\xac\x25\xa1\xbb\x98\xd4\x4d\x60\x2e\xea\xa2\xf9\xca\xa3\x7d\x3a\x25\x5d\x7e\x4c\x57\xaa\xf6\xa8\x6d\x3f\x2c\x67\x73\xeb\xe3\x25\x65\x72\x16\x4a\x5b\xf7\x06\xc3\xeb\xb1\xd6\x07\x25\x60\x63\xda\xbd\x94\x09\x78\x10\x9c\x00\xcc\xc5\xda\xcc\xb3\x17\x78\x81\x4b\xec\xc5\xed\xe1\x29\xde\xfa\x4f\xf8\x47\x8c\xcb\xcf\xd3\xd9\x4d\xf3\xbf\x70\x79\x33\xbd\x9f\xd8\xe2\x31\x5a\x6a\x59\xe3\x44\x86\x86\x38\x91\x21\x18\x27\xb2\x0d\xc0\x45\x3a\xeb\xd1\x50\x1d\x3d\xdf\xf5\xc9\x11\xd3\xe6\xe8\xe1\xa4\x04\x7f\x13\x5b\xf8\x5b\xae\x7e\xdf\x0a\x22\x93\xc8\xd0\x79\xb3\xd5\xfd\x76\x28\x93\xea\xdf\x2a\x5c\xbe\xc4\x5b\x4c\xdf\xf0\xfd\xd6\x68\x74\x05\x2e\x37\x34\x26\xab\xfa\x7b\x83\xb4\x8c\x6f\xe4\x3f\xc4\xdf\x8a\x3d\xa5\x9d\xd6\x71\x9d\x60\xe0\xae\xf1\xd2\x7b\x15\x0d\xb6\x2e\x3d\x4f\x75\x5e\x49\xbf\x9a\xa1\xf3\x1f\x6a\x37\x17\x2d\xf1\xf5\x5b\x91\x33\x3b\x7c\xb0\x04\xed\xf0\xd0\xc6\x9d\x11\xcd\xb7\xf2\xa6\x4d\xc7\xa8\x53\x13\x7d\x8d\x68\xb8\x0e\x97\xfd\xe1\xe6\xba\x5e\xea\xde\x86\x70\x43\x41\x5d\x4e\x96\xab\xb9\x72\x54\x9f\xe1\xd4\x51\x8d\x84\x89\x76\xbf\xa3\xd0\xe9\x16\x5f\x80\xaf\xb4\x8d\x13\xd8\xc8\x63\xe9\xe9\xfb\x10\x25\x5c\xb7\xb9\x9e\xc4\x80\x95\xb7\x41\xf0\x3e\xfa\x5c\xf6\x77\x7e\x41\xe2\x68\xb8\xfd\x7b\x36\x81\x23\xa3\xf7\x10\xc0\xbe\x77\x2d\xfb\xbe\xb7\xdb\x05\x89\xfc\x2d\xa6\x4a\x6d\x4b\xf7\xa1\x69\x53\x91\x23\x33\xb4\x71\x6f\x60\xa4\xde\x3e\x84\x42\x39\xa8\xa8\xf7\xb3\x0d\x6e\xb3\xaf\xac\xc2\xd5\xdd\xed\x5c\x83\x89\xa2\xd6\x80\xd8\x74\x43\x6e\x8f\xfc\x3f\xf1\x7f\x91\xb3\xdc\x5f\xa2\xa7\x52\x06\x76\x8d\x2c\x0a\xfb\x47\x86\x5e\xc4\xb7\x06\xe2\x8d\x71\x53\x43\x14\x09\xc4\x09\xd5\xd0\xe4\xdf\xe8\x2e\x18\x08\xe3\xd9\x05\x2b\x52\xce\x79\xc4\x0a\xaa\x90\x4f\x02\xba\x43\x71\x5f\xba\x1c\xcc\x70\x87\x37\x7a\x6a\x60\xe9\x8a\xf7\x0e\x1a\x2a\x1e\xa3\x41\xcd\x08\x7c\xa9\x8c\x13\x34\x57\x9e\x32\x78\xb4\x50\x1c\x3b\xf2\x91\x16\x0b\xbd\xbd\xb7\x50\xdc\xd7\x5b\xf2\x30\x41\xe3\x7b\x1e\x6f\x4e\x0c\x59\x42\xc6\xf5\x5e\xf3\x34\x26\x0f\x2f\x24\x94\x32\xb3\x51\x7e\x57\xc3\xed\x8b\xe1\xb9\xc4\x80\x3b\xbc\x1a\x8d\xc2\x4f\x62\x83\xb4\x45\x87\x0c\x1d\x6a\x72\x5a\xc6\x91\x18\xc2\x9f\xb8\x8d\x07\xe4\x41\x29\xdb\xbb\x6a\xf4\x44\x36\xee\xc7\x4d\x21\x3c\x7a\x97\xd6\xa0\xf4\xa5\x27\xd8\x11\xe9\x11\x10\x51\x46\x5e\xe9\x6d\xea\xe3\x2e\xb7\xa5\x90\xea\x59\xed\xff\x5c\xeb\x3f\xc0\xe3\xed\x2c\x0a\x07\x6f\xd5\xcf\x5c\x3b\x74\x77\x9d\x37\xaf\x8e\xb0\x19\x6b\xa2\x21\xd7\x79\x9e\x3c\xa1\xb2\x3d\xe0\x0a\x62\xbd\x55\xe5\x03\x6f\x51\x68\x71\x7d\xc4\x30\x7f\xa1\xe0\x72\x4b\xfe\x56\x8e\xc9\x92\xce\xf4\xfe\x9b\xdc\xa6\xac\x7c\x18\xf3\xf9\x82\xd4\xca\x8f\xb1\x8c\xca\x57\xdf\x72\xe6\x8b\x08\xc0\xb0\x5a\x81\x18\xf6\x33\x30\x1e\x9d\xf2\x6a\x2e\xce\xaa\x1a\x65\x5b\xf5\x9d\x99\x50\x99\xd6\x52\x46\xe4\x8b\x12\x3a\x44\xf9\x6c\x8c\xf2\x21\x37\xce\x0e\x78\x4a\xdb\xe6\xa6\x64\xcb\xff\x42\x7b\x02\x08\xe3\x6b\x87\x52\x9e\x0a\xeb\x01\xd2\xc1\x9e\x21\x59\x31\x6e\x71\xca\x42\x70\x18\x92\x1e\xf1\x08\xc5\x82\x32\xbe\xc0\xa9\x4a\x04\xf8\x30\x6f\x0d\xed\xb8\x86\x88\xd6\x97\x89\xfe\x35\xc2\x8d\xac\x0b\x93\xa7\x8e\xeb\xb5\x92\x60\x49\x66\x08\x71\x31\xb1\xe5\xb9\x5a\xdd\x35\xfc\xac\x0e\x8d\x64\x25\x08\x01\x4b\x6b\x28\x2d\x8f\x76\x71\x2e\xc2\x99\x0d\x5d\xf7\x0e\x49\xb6\x4c\x10\x74\x7a\x5f\x5a\x81\x3e\x83\x17\x23\xcb\x88\xa4\x56\x04\xe3\xda\x2d\x15\x37\x7e\xf2\x18\x50\xab\x49\x36\x47\xa1\xba\xf2\xbe\x93\xbc\x08\xa5\xf9\x8d\x69\x5a\x6b\x5c\xe1\xfa\x11\x0a\xc6\xca\x6c\x7d\x82\x34\x7e\xdf\xcf\xc4\x44\x39\xd3\xbb\x12\xa7\xef\xfb\x50\x2a\x9b\x93\xb2\xb9\x58\x56\xb6\x26\x3b\xf6\x84\xbc\xdd\x61\x6c\xe9\x9e\x7b\xb6\x21\x43\xd5\x93\x9c\x08\x35\x04\x93\x78\xf4\xc4\x67\x77\x0b\xa1\x0e\x86\x5a\x97\xc2\x60\x32\xc9\x7a\x23\x9c\xbb\x49\x2d\xed\x35\x01\xec\x19\x4f\x32\x0a\x35\xf0\x23\x40\xe9\x73\x38\x3b\xb0\xa6\x22\xd5\xf6\x17\x06\x76\x6c\xf6\x97\x00\xd6\xba\xda\x61\x5b\x1c\x30\x3a\xcf\x15\x2e\x10\xc9\x56\xf9\x38\x6c\xf8\xf4\xda\x67\x57\xec\x1d\x5a\xad\xea\xd8\x51\x35\x20\x1a\x31\xc6\x2a\x26\x69\xc4\x97\x70\x3e\x0e\x75\x91\xf4\xe5\x16\xb0\x04\xd8\xe6\xa1\x09\xc5\xc7\xda\xfc\x15\x2c\x21\xd7\xcf\x0f\x75\x71\xa8\xbd\x28\x22\xb9\x31\xa4\xf5\xc2\x82\xc3\x0f\x5b\x34\xac\x92\x94\xfb\x89\xd8\x04\xaa\xba\xcc\xb3\xe7\x01\x6b\x8a\x61\x1a\xb0\xb0\x58\x8d\x06\x82\xa9\x24\xbc\x55\x58\x08\x52\xc8\x02\x55\xd5\x6b\x5e\x46\x2e\xb0\x8c\x08\x07\xc8\x46\xc3\xb7\xc3\x19\xe4\xa8\xbd\x12\xb5\xe8\xa3\x6f\x25\x4e\xae\xbf\xee\x71\x52\x3c\x1a\x00\x79\x1a\x41\x71\x43\x6a\xa6\xb8\x37\x70\x81\x10\xae\x40\xab\x4c\xb6\x30\x78\xd4\x84\x4f\xf2\x20\x09\x1f\xc4\x31\xa1\xc9\xf9\x67\x2d\x56\xa0\x63\x62\xdc\x14\x90\x94\x71\x1b\x15\xa7\x60\xbc\xc8\x35\xc7\x2a\x1c\x86\x20\xf2\x38\x29\xd1\x34\xc2\x55\x1d\x67\xf4\xf9\x0e\x4e\x4f\x5a\xda\x1e\x7d\x41\x35\xeb\x55\x64\x75\x9c\xba\xb1\x79\x0f\x1c\x9b\xbd\x1e\x28\x32\x95\x46\x18\xd3\xc8\x1b\x2b\x08\xa9\x0d\xbf\x18\x81\x7e\x1a\x4b\xcb\xc5\xdd\x80\xa8\xac\xcc\x8b\x14\xea\x55\xd6\xfe\x00\x16\xc6\xa9\x89\x67\xc4\x74\x44\xc6\xd0\x1d\xaa\xa2\x2a\x69\xbd\x37\xd3\xa2\xcc\x8f\x6f\x3e\x3e\x16\x79\x85\x23\xbf\x40\xf5\xbe\xe2\xc1\x64\x01\xb8\x43\x51\xd5\x25\x46\x29\x04\x23\x29\xa8\xb3\x70\x59\xf2\xe8\xb1\xe2\x0e\x38\x86\x48\x8f\x7c\xa7\x63\x3e\x71\xa5\x18\xac\x64\x23\x5f\xaa\x20\xf4\x85\x79\x80\x4a\x5d\xe1\x5e\xa1\xdd\xec\xab\x9a\xb8\xe9\x0c\xe2\xa1\x2c\xf2\x3e\xf3\xb3\x5d\x73\x1e\x8a\x70\x73\x3a\xf6\x8b\xf8\x88\x13\x9f\xdc\x14\x3f\x04\x93\x13\xf5\x30\x15\x90\xae\x24\x37\x89\x77\xf6\xd4\x91\xbd\xd3\x17\x00\xa7\xb7\xcd\xc0\xb7\x07\x96\x71\x56\x5a\xf1\xb9\x65\x10\xbc\xec\x7f\x62\x62\x14\xdd\xc5\x80\x9d\x69\x55\x1f\x03\xb1\x58\xb3\xae\x4a\x87\x2b\x12\x28\x9c\x58\xb6\xad\x61\x20\x59\xfc\x47\xfd\x78\xa9\x88\xa8\x6b\xba\x98\xaf\xc7\xb8\x43\xb4\xc8\xb5\x9b\x73\x42\x9f\x74\xfc\xa5\x11\xdf\x16\x2f\xaf\xde\xef\xde\xe7\x59\xb8\x0a\xbc\xdf\xbd\x59\x10\x4c\x26\xca\x99\xd8\x08\x07\x59\xa5\x02\xe9\x20\xac\x9c\xb7\x03\xfd\xbc\x1d\xc0\xc7\x77\x1e\x40\x66\x40\x77\xc2\x85\x86\x9d\x84\x1c\x7a\x27\xa9\x6a\xdb\x4b\x18\x3a\xd6\x2c\xc1\xcf\x07\x25\x99\x18\xe3\x4c\x65\xe6\xe7\x32\x7f\x05\x7c\xa8\xde\xc5\x8e\xb4\xe6\x5c\x51\xd2\xb1\xfb\xb1\x89\x32\x4c\x41\x17\x20\x09\x4e\x05\x4e\x4a\x79\x5e\x34\x4b\x2b\xe2\x25\xdc\x44\x8d\x7a\xa4\x47\xea\x22\xca\x0d\x5f\xd4\x44\x63\xbf\xe9\x03\xf0\xa4\xf0\xa7\xdc\x6b\xbc\x7b\x5e\xd8\xe8\x5b\xec\x5a\x7c\xe2\xf1\xec\x3f\xb4\xc0\x7f\x34\x98\x6f\x55\x13\xac\x4c\x43\xb3\x7d\x50\xdc\x6d\xd1\xf7\x97\x89\xa7\x5e\x5b\xd1\x20\x26\x5c\xd5\xa3\x32\x7d\xba\xcd\x8b\x37\xff\xa9\x96\x00\xfd\xe5\xaa\xe3\xca\x87\xe0\xdd\x60\x41\x29\xb4\xcb\x10\xba\xdb\xeb\xe5\x40\xe6\x5b\xb3\x16\x64\x51\x90\x88\xf2\xa8\x27\xe0\xee\x74\x90\xee\x2f\x03\xa8\x1a\x0d\xab\xd9\x14\x34\x07\x1e\x73\x06\x79\xe2\x9b\x27\x38\xd9\x41\x0e\x4f\xe4\xe9\xf2\x5c\x76\x76\x62\x65\x90\x3d\x9e\xc4\xad\x3c\xf5\x19\x86\xe9\x9e\xaa\xd8\xdb\xe1\x18\xf9\x8b\x3b\xd9\x6f\x2d\x78\xef\x8f\x3e\x27\xe9\x87\x42\x50\x44\xcd\xdc\x8a\xb3\x48\xb1\xb5\x36\x25\xaa\xa1\x95\x7c\xc5\x59\x64\x6d\x98\x04\x61\xec\xa2\x4d\x79\xfb\x50\xcd\x15\x7e\xcb\x23\x18\xd8\x48\xff\x2d\xc5\x35\xf2\x23\x54\xa3\x36\x3a\xa4\xea\xcf\xd4\x8f\x83\x0d\x7a\xc5\x51\x34\x4b\xd8\xab\x1b\x1d\x15\xbe\x98\xb0\x04\x50\x23\x2b\x6d\x25\xc4\x27\xd3\x3b\xa6\xbd\x46\x16\x96\xad\x12\xba\xb2\xc1\xef\x9e\xaf\x1e\x18\x31\x0d\xa3\x78\x62\x82\x4c\xaf\x00\x8d\x75\xe4\xa1\x69\x5c\x09\x99\xba\x8d\xc1\x63\x6c\x5e\x37\x52\x18\x19\xf2\xfc\x40\xd8\xfb\xa8\x4f\x51\x58\x1c\x5d\xd6\x88\x1a\x64\x94\xb0\x12\xb4\x44\x6e\x3a\x18\x12\xf9\xd3\xa1\x8a\x69\x55\x85\x56\x23\xba\x3c\xe8\x68\x9b\x40\x21\x48\xd5\x96\x84\x59\xfc\x65\x52\xa1\x08\x22\x7a\x4c\x9f\x94\x88\x8a\x80\x08\x65\xa2\xf3\x1c\xec\x90\x40\x67\x92\xee\x5b\x86\x52\xfc\xf5\xaa\xd9\x41\xbe\x11\x03\xe0\xe3\xd5\xe3\x0d\x54\xa8\xde\x0a\x42\x30\xc6\xab\x41\xba\x86\xe8\x0e\xa5\x3a\x31\x0b\x4b\xea\xdd\xc8\x7d\x5d\x0f\x85\xf8\x61\x83\x9e\xc1\xfc\xaf\x00\x00\x00\xff\xff\x0a\xbf\x15\xbe\xab\xf3\x03\x00") -func web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752CssBytes() ([]byte, error) { +func web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69CssBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752Css, - "web_ui/assets/consul-ui-a5fc236bd86696b34dfca653ff20b752.css", + _web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69Css, + "web_ui/assets/consul-ui-97ec8a4278cddf4266ff5aa45bf84f69.css", ) } -func web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752Css() (*asset, error) { - bytes, err := web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752CssBytes() +func web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69Css() (*asset, error) { + bytes, err := web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69CssBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/consul-ui-a5fc236bd86696b34dfca653ff20b752.css", size: 166411, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/consul-ui-97ec8a4278cddf4266ff5aa45bf84f69.css", size: 258987, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x51\xe1\x8e\xda\x3c\x10\xfc\xcf\x53\x24\xfe\x61\x79\x15\x7f\x51\xc2\x07\xc7\x91\xbb\x25\xaa\x4e\x7d\x82\xf4\x5f\xaf\xd2\x05\xb2\x81\x54\x60\x53\x67\xd3\xeb\x09\xf3\x68\x55\x1f\xa9\xaf\x50\x91\x80\xe0\xda\x5f\xe3\x19\x7b\x67\xbc\x1a\x55\x77\x66\xc5\x8d\x35\x8a\x34\xc3\x41\xd8\xe5\x57\x5a\xb1\x40\xe4\xb7\x3d\xd9\x3a\xa0\x1f\x7b\xeb\xb8\xcd\x77\xb6\xea\xb6\x14\x9f\x29\xb2\x22\xc8\xc4\x65\xf6\xfa\xbc\xa2\xba\x31\x24\xe5\x80\x71\xb9\xab\xf2\xe1\xa8\x3e\x7f\xd1\x1c\x2f\x1b\x53\x29\xd2\x04\x90\x9d\x1c\x8e\xa0\x44\x67\x86\x07\x95\x08\x2f\x26\xeb\xad\x5d\x96\xdb\x7c\x80\x8c\x37\x4d\xab\xaf\xbf\x84\x43\x53\x2b\x8a\x9f\x8a\x42\xca\x1e\x62\x6a\x57\xe5\x9e\xc0\x11\x77\xce\x04\xb7\xda\xe8\x7b\xe9\x02\xc6\xbf\x86\x13\xc4\xd2\xad\xbb\x1d\x19\x6e\xe3\x2d\x99\x35\x6f\x80\x37\xce\xbe\x06\x86\x5e\x83\x4f\x6f\x7b\xfa\xe8\x9c\x75\x4a\xbc\x5c\x9d\x5e\x02\x47\xdf\xba\xc6\x51\x1b\x94\x26\xb8\x8c\xc7\x02\x46\xb5\x75\xaa\x8f\xd1\x06\x0b\x76\x8d\x59\x2b\x02\xed\xd0\x9c\xad\xb5\xc5\xff\x52\x5d\xa0\x10\xba\x44\x13\xaf\x36\xa5\x7b\xb2\x15\x7d\x60\x95\xc0\x43\x14\xd9\x47\xf7\x00\x49\x88\x8a\xdf\x5f\x5a\x80\xbc\x88\x90\x17\x98\x4a\xc9\x8f\xf8\x7f\xea\x7d\x3a\x9e\x21\xb2\xf7\x09\xa2\x95\x92\x17\x38\xb9\xef\xef\xa6\x33\xef\xd3\x7f\x34\x29\x27\x53\xc4\x32\x17\xcf\xcf\x22\xe2\x98\xed\xf9\x77\xe9\x1d\x44\x22\x10\x99\x4a\x42\xb4\xde\xa7\x21\x3a\xef\x27\xd3\x10\x19\xa4\x54\xa7\xc0\xf1\xfd\x49\xe8\xa3\xe6\x03\xbc\xcf\xe2\x05\xde\x4d\x7b\x36\x4f\x7a\x36\x9f\xf5\x2c\x1d\x8f\x21\x1f\xb6\xe8\x37\xc8\xfa\xe8\x5b\xa1\x88\x50\xfc\xfe\xf5\x53\x8c\xce\x65\x15\xc7\xd1\x6d\x6d\xde\x0f\xcd\xe2\xe1\x08\xfa\xb6\x48\x64\xcd\x47\x18\xfd\x09\x00\x00\xff\xff\x50\x8c\xbd\xa5\xad\x02\x00\x00") +var _web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x51\xcb\x6e\xdb\x30\x10\xbc\xeb\x2b\x28\x1e\x08\x32\x52\x69\xc9\x8d\xf3\x50\xb2\x51\x8b\xa0\x87\x1e\x7a\x52\x6e\x4d\x81\xc8\xd2\xda\x52\x61\x93\x2e\xb5\x4a\x1a\x84\xfe\xb4\xa2\x9f\xd4\x5f\x28\x2c\xd9\x88\xd3\x9e\x86\x33\xe4\xce\x70\x31\x93\x93\x90\x35\x44\x9b\x2e\x9b\x4c\xd6\xd4\x74\x7a\x8e\x93\xaa\xeb\xb0\xab\xca\x0d\xb2\xc7\x54\xcf\x74\xca\xe6\xcf\xec\xc3\xba\xa4\xa6\x2d\x3b\xe6\xd9\x97\xcf\x77\x6c\xd5\x56\x68\x3a\x64\x27\x93\x40\x2e\x7a\x53\x51\x6b\x8d\xc4\x98\xd4\x0b\xb7\xf3\xef\x58\x11\x07\xa0\xe7\x0d\xda\x05\xc3\x9f\x1b\xeb\xa8\xcb\xd7\xb6\xee\x57\xa8\xf7\x14\x48\xa2\xca\xf8\x61\xf6\xf5\x79\x8d\x8b\xd6\xa0\x10\x23\xea\x72\x5d\xe7\xe3\x51\x7e\xfd\x16\x93\x9e\xb7\xa6\x96\x18\xa3\x52\xd9\xce\x61\xab\x24\xef\xcd\xf8\xa0\xe6\xe1\xc1\x64\xb9\xb2\xf3\x72\x95\x8f\x90\x51\xd3\x76\xf1\xd1\x37\xd5\x4b\xbb\x90\xa8\x6f\x8b\x42\x88\x01\xf4\xb8\xae\x72\x48\xbd\x33\xec\x58\x0b\x1e\x4b\xc7\x08\xfe\x19\x4e\x00\x4a\xb7\xec\xd7\x68\xa8\xd3\x2b\x34\x4b\x6a\x14\x35\xce\x3e\x31\x83\x4f\xec\xee\x79\x83\x9f\x9c\xb3\x4e\xf2\x87\x57\xa7\x07\xe6\xf0\x47\xdf\x3a\xec\x58\x69\xd8\x61\x5c\x73\x15\x2c\xac\x93\x43\x4c\x6c\xa0\x20\xd7\x9a\xa5\x44\x15\x3b\x30\x7b\xeb\xd8\xc2\xbb\x34\x2e\x80\xf3\xb8\x04\xa3\xab\xa6\x74\xb7\xb6\xc6\x8f\x24\x13\x75\x15\x45\xf6\xda\x5d\xa9\x24\x04\x49\x6f\x2f\xad\x52\x79\x11\x01\xdd\x40\x2a\x04\x5d\xc3\xfb\xd4\xfb\x74\x7a\x0e\x40\xde\x27\x00\x56\x08\xba\x81\xd3\x8b\xe1\x6e\x76\xee\x7d\xfa\x9f\x26\xc4\xe9\x0c\xa0\xcc\xf9\xfd\x3d\x8f\x48\x93\xdd\xff\x2e\x3d\x53\x11\x67\x3c\x93\x49\x08\xd6\xfb\x34\x04\xe7\xfd\xe9\x2c\x04\x52\x42\xc8\x5d\xe0\xf4\x62\x27\x0c\x51\x97\x23\xbc\xcd\xa2\x1b\x38\x9b\x0d\xec\x32\x19\xd8\xe5\xf9\xc0\xd2\xe9\x54\xe5\xe3\x16\xc3\x06\xd9\x10\x7d\x2c\x14\x11\xf0\x3f\xbf\x7f\xf1\x60\x5f\x56\xb1\x0d\x8e\x6b\xf3\x7e\x6c\x16\x5e\xb6\x2a\x3e\x2e\x12\x28\xa6\xad\x52\xc1\xdf\x00\x00\x00\xff\xff\x8e\x18\x53\xe4\xf1\x02\x00\x00") -func web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJsBytes() ([]byte, error) { +func web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJsBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJs, - "web_ui/assets/css.escape-432357d359e6980aaec701dfabef34ba.js", + _web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs, + "web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js", ) } -func web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJs() (*asset, error) { - bytes, err := web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJsBytes() +func web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs() (*asset, error) { + bytes, err := web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/css.escape-432357d359e6980aaec701dfabef34ba.js", size: 685, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js", size: 753, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -501,7 +482,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js", size: 529734, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js", size: 529734, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -521,7 +502,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon-128-08e1368e84f412f6ad30279d849b1df9.png", size: 11154, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon-128-08e1368e84f412f6ad30279d849b1df9.png", size: 11154, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -541,7 +522,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon-16x16-672c31374646b24b235b9511857cdade.png", size: 821, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon-16x16-672c31374646b24b235b9511857cdade.png", size: 821, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -561,7 +542,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon-196x196-57be5a82d3da06c261f9e4eb972a8a3a.png", size: 37174, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon-196x196-57be5a82d3da06c261f9e4eb972a8a3a.png", size: 37174, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -581,7 +562,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon-32x32-646753a205c6a6db7f93d0d1ba30bd93.png", size: 2075, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon-32x32-646753a205c6a6db7f93d0d1ba30bd93.png", size: 2075, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -601,7 +582,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon-672c31374646b24b235b9511857cdade.png", size: 821, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon-672c31374646b24b235b9511857cdade.png", size: 821, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -621,7 +602,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon-96x96-6f8f8393df02b51582417746da41b274.png", size: 10171, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon-96x96-6f8f8393df02b51582417746da41b274.png", size: 10171, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -641,7 +622,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/favicon.ico", size: 34494, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/favicon.ico", size: 34494, mode: os.FileMode(420), modTime: time.Unix(1607636633, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -661,7 +642,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/loading-cylon-pink.svg", size: 983, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/loading-cylon-pink.svg", size: 983, mode: os.FileMode(420), modTime: time.Unix(1607636633, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -681,7 +662,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/mstile-144x144-ac561ffa84c7e8ce1fe68d70f1c16d1d.png", size: 20027, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/mstile-144x144-ac561ffa84c7e8ce1fe68d70f1c16d1d.png", size: 20027, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -701,7 +682,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/mstile-150x150-6b13ab220a09a9e72328a3b05d5b9eec.png", size: 64646, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/mstile-150x150-6b13ab220a09a9e72328a3b05d5b9eec.png", size: 64646, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -721,7 +702,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/mstile-310x150-ccc673174b188a92f1e78bc25aa6f3f8.png", size: 112362, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/mstile-310x150-ccc673174b188a92f1e78bc25aa6f3f8.png", size: 112362, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -741,7 +722,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/mstile-310x310-49242d1935854126c10457d1cdb1762b.png", size: 201893, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/mstile-310x310-49242d1935854126c10457d1cdb1762b.png", size: 201893, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -761,7 +742,7 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/mstile-70x70-08e1368e84f412f6ad30279d849b1df9.png", size: 11154, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/mstile-70x70-08e1368e84f412f6ad30279d849b1df9.png", size: 11154, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -781,52 +762,52 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/assets/safari-pinned-tab.svg", size: 3798, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/safari-pinned-tab.svg", size: 3798, mode: os.FileMode(420), modTime: time.Unix(1607636633, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\xbd\xdb\x76\xdb\xc8\x96\x20\xf8\xae\xaf\x20\xd1\x67\x70\x22\xcc\x2d\x18\x11\x20\x09\x32\xa4\x10\xcb\xe9\x94\xb3\x5c\x27\xd3\x76\xd9\xce\x93\x75\x8a\x87\xad\x82\xc8\x20\x89\x34\x05\x30\x01\x90\xb2\x52\x64\xad\xec\x99\xe9\xb9\xae\x35\x1f\x30\x2f\xd3\xaf\xf3\x34\xff\x50\x7f\xd2\x39\x3f\x32\x2b\x2e\xb8\x91\xa0\xec\x3a\x3d\x7a\x10\x81\x40\xdc\x2f\xfb\xbe\x77\xdc\x87\xd1\x2c\xbe\x77\xae\xef\x6e\x45\x72\xfd\xe6\xcf\xfc\xf1\xd5\xf5\x8b\x8f\x3f\xbe\xbf\xfe\xc0\x1e\xf7\x70\xfd\x4f\x1f\xaf\xdf\x7c\x7b\xf3\xee\xfd\xdb\x8f\x6f\x3f\xfe\xe5\x9d\x4c\xfc\x36\xc8\x04\x6b\x93\x3d\xdc\xfc\xc3\x3f\xfe\x78\xfd\xfe\x2f\x37\xaf\xdf\x7c\xbc\xfe\xee\xfd\x8b\x8f\xaf\xdf\xbe\x61\x6d\x77\x7f\xb6\x0d\x92\xd6\x2a\x0e\x66\x22\x81\x99\x98\x87\x91\x80\x44\xfc\xb2\x09\x13\xf1\x43\x3c\xdb\xac\x8a\xb7\xfc\xf7\xe7\x14\x92\x4d\x14\x85\xd1\xe2\xa3\x48\xb3\x94\xb7\xc9\x05\x9a\x6f\xa2\x69\x16\xc6\x11\x12\xf8\xd1\xda\xa4\xa2\x95\x66\x49\x38\xcd\xac\xb3\xfc\x43\x2b\x43\xf8\x51\x36\x24\xf8\xdb\xdb\x9f\xc5\x34\x73\xa6\x89\x08\x32\x81\xa2\xcd\x6a\x85\xcf\x12\x91\x6d\x92\xa8\x25\x9c\x9b\x1b\xbe\x8d\xc3\x59\xcb\x85\x99\x58\x89\x4c\xa8\x24\x10\x7b\x59\x34\xe1\x8f\xba\x9b\xac\xd6\x5b\xd6\xd4\x69\xd6\x38\x04\x76\x34\x14\x56\x3c\xed\xcf\x8a\x47\x6e\x9e\x78\xad\x12\x5e\x1d\xe4\x3c\x4e\x90\xec\x53\xc6\xc7\x13\x48\xf8\x0a\x09\xb0\x90\xc9\x8e\x2d\xc8\x30\x44\x3c\x73\x56\x22\x5a\x64\xcb\x73\x72\x11\x5d\x71\xf7\x22\x3a\x3f\xc7\xd9\x38\x9a\x38\xe2\xf3\x3a\x4e\xb2\x14\x15\xe3\x4e\x9c\x3b\xd5\x44\xfe\x65\x0f\x7a\x84\xfc\x31\x8a\x5f\xc6\xd1\x7c\x15\x4e\x33\x56\x34\x9f\xe9\x99\x8c\x20\x3c\x93\xdd\x88\x5a\x61\xd4\xca\x70\xe6\x2c\x83\xf4\xed\x7d\xf4\x2e\x89\xd7\x22\xc9\x1e\x50\x84\x6d\x3b\x69\x4a\x44\x21\x97\xdd\x00\x31\x0e\x27\x5c\xe8\xa7\x68\xc2\x93\x71\x34\xc1\x7b\xb8\x0b\x3e\x89\x6f\xc5\x3c\xd8\xac\xb2\x6b\xd5\x9b\x62\x8f\x44\x3c\x43\x18\x42\x8e\xe4\x8f\x8b\x55\x5a\xcc\xc7\x96\x19\xb6\x05\x96\xe9\xbe\x05\x96\x1e\x8f\x35\x29\x37\x40\x80\x04\x64\x90\x40\x84\x1f\xb3\x65\x98\x3a\x9b\x4d\x38\xe3\x61\xa7\x03\xea\x2d\x9c\x71\xa1\x9f\x66\x62\x9d\xf2\x76\x3e\x77\x72\x08\xfa\x69\x14\xb3\x4c\xe7\xd0\x75\xf3\x47\xd3\x1a\x7b\xdc\xef\xf5\x87\x69\xb0\x5a\xdd\x06\xd3\x4f\x3c\xd1\xef\xcb\x20\xd5\x43\x48\x5f\xa4\xdf\x8a\x35\x6f\x13\xd3\x58\xfa\x62\x15\x06\x29\x8f\xf4\x6b\x22\xc2\x79\x28\x66\x3c\x12\xf7\xad\x17\x49\x12\x3c\xa0\xbc\x75\xac\x33\xa4\x59\x90\x09\x6e\x45\xe2\xde\xda\x17\xe3\x49\x11\x7e\x2c\xdf\x36\x72\x53\x14\x23\x29\xd3\x57\x7a\xd4\xe5\x86\x09\x79\x34\x16\x93\xdd\x2e\x1a\x8b\x8e\xf5\x3c\x8c\x66\xe2\xb3\x35\xb9\x08\x6d\x3b\xcc\xbb\x75\x81\x65\x9e\xd0\x09\x67\x2a\x9b\x7c\x28\x73\xe6\x3b\x26\xdc\xed\xca\xed\x08\x99\x6c\x3b\x89\xef\x5b\x72\x08\xd7\x49\x12\x27\xc8\x7a\x19\x6f\x56\xb3\x56\x14\x67\xad\x79\x18\xcd\x5a\x7a\xd2\x5a\xff\x62\x75\x44\xc7\xfa\x97\x56\x78\x27\xe7\x45\xcc\x5a\xf3\x24\xbe\x93\xa9\x59\xc7\xfa\x17\x0b\xef\x55\x65\x90\xd8\xb6\xb5\x16\xd1\x2c\x8c\x16\x56\x9b\xf3\x50\xcf\x80\x6d\x5b\xf3\x30\x0a\x56\xe1\xaf\x62\x56\x4b\x46\xa1\x23\xdb\xf8\x56\xac\x53\x94\x60\x48\x9c\xf5\x26\x5d\xa2\x10\x63\x08\xcb\x99\x98\xea\x7e\x86\x73\x64\x39\xb2\xb4\x70\xa6\xcb\x20\x79\x91\x21\x17\xe3\xfc\xf8\x9f\xe5\xb3\x94\x70\xe1\xa4\xeb\x55\x98\x21\xeb\xb9\xa5\xcf\x52\xf9\xea\xa4\xab\x70\x2a\x90\x0b\xe7\x44\x6e\x47\x17\x62\x9e\x6f\x92\x8b\xf0\x32\xbe\x08\x3b\x1d\x7d\x42\x02\x9e\x8c\xc3\xc9\x99\x6a\xd2\xb1\x38\xe7\x81\x6a\xdf\xe5\x9c\x47\xf9\x0a\x1f\xcf\x5b\x10\xc9\x49\x0b\xa6\x53\x91\xa6\xad\x75\x90\x88\x28\xcb\x67\x2f\x9e\xb7\x92\x38\xce\x2c\x7c\x16\x39\xeb\x78\x8d\xf0\x5e\xac\x52\x61\xc6\xa4\xea\x9f\xc6\x51\x16\x46\x1b\x21\x33\xc8\x49\x08\xf0\x7e\x6f\x46\x17\x39\x3f\xc7\x61\xa4\x46\x50\xce\xca\x5c\xee\x1b\x9d\xa1\x8d\xda\x72\x6b\xd8\x76\xbb\xb6\x37\xf0\x3e\x70\xd6\x49\x9c\xc5\xd9\xc3\x5a\x38\x47\xa7\xb3\x84\x4a\x39\x7c\xad\x9c\x91\x1c\x9e\x9c\x49\x28\xcb\x39\x17\xbb\x9d\x15\x2b\xf0\x6b\xb5\xb9\xac\x2f\x9e\xb7\xd4\xb2\x9a\x3a\x2a\xa9\xbb\x9d\x86\xc3\x6a\xa5\x66\xba\xc5\xdd\xae\x6d\x80\x77\x98\x5e\x7f\xce\x44\x94\x86\xb7\x2b\x81\x04\xde\xed\x50\x91\x89\x0b\xbc\x87\x6a\x97\x4d\x1f\xaa\x1d\x95\x13\x56\x6e\x25\xce\x79\x79\xcc\x76\x3b\x4b\x9e\xc7\x07\xb9\xf5\x6a\x1f\xf2\x4d\xd2\x34\x3c\x0d\x2d\x9d\xfb\x24\x58\x6b\x58\x9d\xda\x36\xaa\x83\x84\xe3\x2c\xc8\x1c\xd7\x3a\xec\xc0\xb8\x04\x0a\x0f\x48\x03\x39\x33\xa7\x79\x16\x27\x58\xaf\x57\x0f\xaa\x78\x0d\x80\x14\xe0\xbc\x9a\x68\xf6\x19\x77\x6b\xa0\xa4\x1c\x7c\x23\xa4\xb2\x6d\x3d\xf9\x7a\xc9\x50\xc3\x90\xb9\xc0\x06\x47\x1c\x6f\x09\xdb\xd6\x05\x0e\xd3\x11\x86\x86\x9a\xea\x8b\xb5\x89\x52\x21\xaa\x4b\x75\x08\x00\x4f\x82\xe0\x7a\x3d\x6a\xfa\x0e\x97\xdc\x4c\x89\x3c\xfd\x95\x75\xad\x35\x51\xac\xfd\x59\x96\x3c\x3c\xd6\xc0\xb3\x7a\xb9\x31\xeb\x02\x87\x85\x64\xbd\x7b\x35\xad\xab\x87\xc7\x13\x5b\x28\xdf\x14\xa6\x98\x90\x07\x5e\xcc\x2c\x7c\xd8\xf9\x9b\xa3\xde\xe7\x70\xc9\xec\x84\x7c\x6d\x35\x20\xc2\x90\x71\xf7\x22\xbb\x14\x39\x10\xca\x72\x00\x94\x70\x31\xce\x26\x67\xf2\x1f\x4f\xf2\x09\x1f\x15\x4f\xec\x10\xef\x23\x9c\x03\x0b\x51\xef\x51\x0e\x5e\x6b\x34\x88\x9c\x52\xb9\x24\xfc\xf4\x74\xe6\x40\xfc\xac\xa4\x57\x0a\x24\x0b\x09\x77\x2f\x92\xcb\x1c\xd7\x5d\x24\x79\xaf\x23\x9e\x8d\x93\x09\x84\xb5\xb1\x8e\x93\x49\xb9\xdc\x86\x44\xd3\x9d\x37\x6f\xfb\xb3\x02\xfd\x4b\xf8\x3a\x42\xcd\x28\xd8\x85\xb0\xd8\xc3\x0d\xbb\x11\xb3\x82\x9c\x50\xb5\x1c\x66\x0e\x3e\x89\xf7\xfa\x3b\xc2\x2c\xa7\x32\x1a\x73\xea\xbe\x85\xf9\x56\x5d\xa1\x29\x8a\x72\x5a\x03\xe7\x0f\x20\x8e\x16\xbf\xd2\xc4\x09\xd8\x2a\x41\x06\xaf\x52\x63\x39\x15\x67\x3a\x36\x45\x19\x08\x8c\xf7\x05\x38\x28\x40\x63\x06\x99\xe9\xcf\x6b\x45\xef\xc8\xe9\x69\xaa\x69\x5e\xd4\x01\xd9\x1e\x90\x26\x70\x79\x15\xe1\x4b\x92\xa2\x24\x27\xce\x42\xdb\x56\x5b\xa1\xc4\xca\xbb\x1d\x0a\x92\xc5\xe6\x4e\x44\x59\x6a\x56\xf8\x92\xda\x76\x75\xff\x1c\xa1\xbe\x20\x6a\x6d\xa2\x74\xb3\x36\xa4\x81\x41\x7a\xf7\x41\xda\xd2\x3d\x98\x41\x4b\x7c\x5e\x8b\xa9\xfc\xf8\x2f\x3a\x09\x85\x33\x68\xa9\xdd\x64\xb2\xe3\x7f\x69\x85\x51\x9a\x89\x60\xd6\x5a\xc4\x19\x2b\x08\x8e\xa2\x33\xad\x2c\x36\xd5\x29\x7a\xe3\xb0\x93\x18\x14\x09\x26\x89\x21\x4d\x8a\x49\xe4\x92\xc8\x99\xe3\xe3\x09\x06\x39\x5a\x9e\xa8\x26\x82\x68\x2a\x31\xd5\x66\x24\x47\x10\xa0\x44\xad\x0b\x24\xd0\x76\x31\xd3\x49\x9a\xe0\x6c\x13\x8c\xf7\xf8\x18\x0d\x29\x72\x44\x9f\x52\x3d\x87\x73\xd4\x4e\x76\xbb\xfc\x48\x25\x35\xb4\x83\x12\x9e\xd7\x39\x9e\x40\x0a\x8a\x6d\xc1\x87\x40\x39\x83\xa4\x01\xc2\xeb\x3e\x43\xb2\x37\x0c\x8b\x13\x28\xea\xb3\xde\x11\xb3\xf2\x54\x52\x11\x07\x53\x32\x32\x53\x9d\x81\xec\x82\xa4\x34\xf5\x00\xe5\xd3\xbe\x64\x65\x1c\x11\x65\x49\x28\x0a\xee\xe5\xe7\xd4\xb9\x11\xc1\xa7\x9b\x54\x88\x88\x47\x95\x7c\x6a\xd3\x55\xde\x0f\x60\xbe\xc0\x8f\x9a\x9d\x51\xe9\xd8\x92\x13\xa8\xf3\xa0\x5a\x73\xd3\x95\x08\x92\xea\x11\xf9\xca\x9e\x28\x2e\x22\x93\x75\x99\x71\x59\xf3\x38\xb6\xa0\x52\xd1\x1e\x57\x3f\x3d\xbf\x0d\x12\x4b\xce\xfa\xe9\x1c\x41\x3a\x9b\x5b\x30\xce\xe1\x41\x95\x11\xc9\xa1\x49\xa5\xb8\x39\x3e\x8a\x37\x2a\x5b\x90\xdc\x52\xe5\xed\xa8\x0f\xbf\xaa\x3e\x54\x57\x50\x77\x1c\xd7\x33\xfe\xb2\xf9\xd5\x7a\x2a\x57\x35\x11\x4c\x89\xcf\x56\xd3\x80\x4d\x16\x47\x57\x69\x39\xba\x0f\x96\x63\x46\xab\x12\x12\xf9\xeb\x3c\x97\x39\x9f\x9a\x9f\xbb\x20\x8c\x4c\x8d\xaa\x50\x73\xde\x02\x0b\xa9\x7c\xc5\x14\xca\x0c\x39\x68\xab\x7d\x39\x48\x56\x8d\x14\x69\x66\xc7\x94\x13\x7a\xb8\x73\x10\x86\x9c\x16\xe5\x05\xd5\xa9\x6b\xb6\xed\xa3\x2f\x7a\x65\x6d\xbb\x7e\xe0\x6c\x1b\x1d\x9c\xc0\xc7\x43\x4e\xbf\x26\x23\xd8\xe3\x3d\x56\x78\x09\x43\x6d\xdf\x6a\xa0\x9b\xd3\xe4\xf2\xa4\x29\x3e\xb5\x48\x09\x51\x00\xa9\x42\xb8\xed\x64\x1c\x4c\xf4\x53\xa6\x9e\x24\x00\xd9\xf0\x92\x82\x2e\x7a\x6c\x3a\x60\xdb\xe6\x41\xc1\x97\xd4\xb6\x37\x39\x21\xbb\x41\x81\x84\x55\x32\x3d\xce\xd3\x62\x93\xa6\x44\x32\xfc\x98\x2b\xa9\xb2\x72\x7f\xb4\x3a\x41\xc7\xfa\xa3\x85\xcf\x34\x20\x5f\x39\xd3\x78\x26\xb8\xf5\xc3\xdb\x6f\x7f\xfc\xfe\xfa\xe6\xcd\xdb\x8f\x37\xaf\xde\xfe\xf8\xe6\x5b\x0b\x56\x4a\x7c\x32\xe5\xb2\xef\x35\x9a\xed\x4c\x8e\x61\xec\x4e\x14\x69\x8b\xa6\xf9\x2c\x42\x15\x16\x68\x08\xa9\x32\x92\x89\x84\x93\x39\x07\x8a\x92\xdd\x4e\x02\xa0\x29\x94\x05\x73\x16\x3f\x27\x63\x64\x8b\x05\xa1\x99\xd3\x20\xf1\xd7\x4c\x17\x04\xdc\xbd\x08\x2e\x73\x3e\xed\x22\xe8\x74\x70\x88\x22\x39\xe7\x45\x0f\xf6\x7b\x84\xd1\x23\x61\xe3\x93\xe2\x27\x81\xa8\x9e\xcc\x0c\x12\x8e\x32\x2e\x10\xe9\x61\x6c\xdb\x99\x73\x73\x23\x52\xcd\x08\x8c\x32\xf6\x68\x10\x34\xcb\xf6\x67\x49\x8e\xad\x9d\x9b\xdb\xe0\x56\xac\xde\xc5\xab\x87\x79\xb8\x5a\xd9\xb6\xb5\x89\x0c\x1e\x2c\xf9\xa4\x69\x1c\xa5\xb1\xdc\x98\xe6\xc1\xb9\x0f\x92\xa8\xfe\x86\xac\xbf\x53\x15\x3d\x5f\x9b\x9a\x5a\x61\xaa\xe5\x6d\x72\x29\x13\xd1\xca\x96\x41\xd4\x8a\xa3\xa9\x68\xc5\x9a\x77\x68\xad\x83\x85\x70\x5a\x1f\xe5\xa3\x7c\x4b\xe2\xdb\xe0\x76\xf5\xa0\x98\xf9\x99\x48\xc3\x24\xb8\x5d\x89\xe7\x61\x94\x89\x48\x56\x12\xc8\x3d\x11\x3c\xb4\x96\xc1\x56\xa8\x0e\x89\x5f\x36\x22\x9a\x8a\xb4\x15\xce\x5b\xb3\x70\x3e\x17\x8a\x87\xdd\x8a\x24\x0d\xe3\x28\x95\x5c\x6c\xb6\x14\xad\xbc\x3b\x69\x2b\x48\x44\x4b\xf2\x34\xa1\x98\xb5\x74\xe1\x2c\x94\x74\xb4\xd3\x7a\x3d\x6f\x3d\xc4\x9b\xd6\x2c\x6e\x45\x42\xcc\x24\xea\x96\x1d\xaf\x15\x3f\x18\x03\xb4\xe4\xfc\x1f\x8c\xf8\x79\x29\xc6\x2a\xa8\x83\x2c\x6e\xdd\x3e\xac\x83\x34\x55\xb5\xc9\x89\x0a\xa3\x85\x23\xe1\xc4\x89\x05\xe0\x6d\x77\x0f\x8f\xa4\xc7\x48\x0f\x28\xa3\xfb\x09\xd0\x27\x57\xde\xc3\x20\x50\x4f\xfe\xeb\xca\x7f\x84\xa8\xff\xae\xfa\xaf\xbe\x11\xaa\xfe\xab\xaf\xbe\xfc\x37\x90\xff\xfa\xf2\xdf\x50\xfe\xf3\xdc\xbe\xfe\xf1\xb1\x6c\xd8\x65\xc4\x05\x42\x18\x21\x40\x28\x23\x14\x88\xc7\x88\x07\xa4\xcb\x48\x17\x3c\xe6\x81\xe7\xf6\x99\xe7\xf6\xc1\x73\x7d\xe6\xb9\x3e\x74\x59\x17\x7a\xac\x07\x7d\xd6\x07\x9f\xf9\x30\x60\x03\x18\xb2\xe1\x7e\x02\x5e\xb5\xe3\x12\xfb\x0b\x44\x7d\xd5\x3a\xd5\xdd\xa1\xa4\xaf\x7f\x7a\xfa\x47\x7f\xa3\xae\xfe\x31\x89\x43\xfd\xe3\xeb\x44\xf3\xa3\xcb\x51\xaa\x7f\x3c\xfd\x43\x74\x4e\xf3\xa6\x5b\xa0\xa6\x4e\x55\x0b\x19\xe8\x79\x19\xe8\x29\x19\xe8\x02\x9e\xf9\xd1\xcd\xba\xa6\x16\xf3\xa3\x5b\x70\xcd\x8f\xae\xda\xd5\x55\xbb\x3d\x2c\x4f\x9e\x9e\x3e\xea\xea\x9e\xb9\xba\x3d\xd7\xf4\xda\xb4\xa7\x97\x66\xd0\xd3\x3f\x7d\xfd\xe3\xeb\x9f\x81\xfe\xd1\x1d\x1c\xea\x02\x43\xbd\x8a\x43\xdd\xcf\xa1\x5e\xc7\xa1\xae\x65\xa8\x6b\x19\xea\x5a\x86\xba\x96\xa1\xae\x65\xa8\x9b\x75\xf5\x50\xfa\x7a\x06\x7d\xfd\xe6\xeb\x0e\xf6\x75\x07\xfb\x26\x8b\x1e\x66\x5f\x8f\xc1\x27\x6a\x44\xbe\x1e\x66\x4f\x27\xf6\x74\xb9\x9e\x2e\xd7\xd3\x2d\xf4\xf5\x84\xf4\x75\xce\xbe\x9e\x90\xbe\x69\x41\x67\xf1\x75\x16\x5f\x7f\xf3\x4d\x5f\x74\xaf\xf5\x1b\xd1\x5d\x22\x79\xa2\x9e\x02\xbd\x43\x88\xae\x9a\xe8\x0e\x92\xbe\x49\x34\xe5\x74\xa2\x6f\xb2\xe8\x39\xd3\xad\x93\x9e\xa9\x53\x4f\x5d\x4f\xad\x11\xf1\x4d\x16\xdd\x82\xee\x3c\xd1\x83\x26\x3d\x3d\xad\x3d\xf3\xa6\xb3\xe8\xd1\x12\xdd\x79\x62\xc6\xd7\xd5\xe3\xeb\x9a\x99\x30\x89\x7a\xb4\x3d\x3d\x9f\x3d\x3d\x9f\x3d\x3d\xf6\x9e\x9e\x1e\xcf\x6c\x37\x33\xad\x7a\x26\xf4\x4a\x53\xbd\xd2\x54\x8f\x9d\xea\xfd\x49\xf5\x46\xa1\x7a\x6b\xd0\x81\xf9\xa6\x8b\x0f\xfa\x6a\x8d\xf4\x96\xa2\x7a\x13\x51\xb3\x93\xf5\xbe\xa6\x9e\x69\x56\x67\xf1\x74\x65\x9e\x5e\x4d\xcf\x8c\x41\x37\xe4\xe9\x16\x3c\xdd\x42\x57\xd7\xd2\xd5\xb5\x74\x75\x2d\x5d\x33\x4c\x5d\xbc\xdb\xc3\x90\x95\xd2\x19\xd4\xa3\x0a\x68\xf4\xba\x8c\xf4\xba\x40\x7a\x12\x6c\xf5\x80\xf4\xfa\x8c\xf4\xfa\x40\x7a\x3e\x23\x3d\x1f\x48\x6f\xc0\x48\x6f\x00\xa4\x37\x64\xa4\x37\x04\xd2\x77\x19\xe9\xbb\x40\xfa\x84\x91\x3e\x01\xd2\xa7\x8c\xf4\x29\x90\xbe\xc7\x48\xdf\x03\xd2\xef\x32\xd2\xef\x02\xe9\xf7\x18\xe9\xf7\x80\xf4\xfb\x8c\xf4\xfb\x40\xfa\x3e\x23\x7d\x1f\x48\x7f\xc0\x48\x7f\x00\xa4\x3f\x64\xa4\x3f\x04\xe2\xbb\x8c\xf8\x2e\x10\x9f\x30\xe2\x13\x20\x3e\x65\xc4\xa7\x40\x7c\x8f\x11\xdf\x03\xe2\x77\x19\xf1\xbb\x40\xfc\x1e\x23\x7e\x0f\x88\xdf\x67\xc4\xef\x03\xf1\x7d\x46\x7c\x1f\x88\x3f\x60\xc4\x1f\x00\xf1\x87\x8c\xf8\x43\x20\x03\x97\x91\x81\x0b\x64\x40\x18\x19\x10\x20\x03\xca\xc8\x80\x02\x19\x78\x8c\x0c\x3c\x20\x83\x2e\x23\x83\x2e\x90\x41\x8f\x91\x41\x0f\xc8\xa0\xcf\xc8\xa0\x0f\x64\xe0\x33\x32\xf0\x81\x0c\x06\x8c\x0c\x06\x40\x06\x43\x46\x06\x43\x20\x43\x97\x91\xa1\x0b\x64\x48\x18\x19\x12\x20\x43\xca\xc8\x90\x02\x19\x7a\x8c\x0c\x3d\x20\xc3\x2e\x23\xc3\x2e\x90\x61\x8f\x91\x61\x0f\xc8\xb0\xcf\xc8\xb0\x0f\x64\xe8\x33\x32\xf4\x81\x0c\x07\x8c\x0c\x07\x40\x86\x43\x46\x86\x43\xa0\xae\xcb\xa8\xeb\x02\x75\x09\xa3\x2e\x01\xea\x52\x46\x5d\x0a\xd4\xf5\x18\x75\x3d\xa0\x6e\x97\x51\xb7\x0b\xd4\xed\x31\xea\xf6\x80\xba\x7d\x46\xdd\x3e\x50\xd7\x67\xd4\xf5\x81\xba\x03\x46\xdd\x01\x50\x77\xc8\xa8\x3b\x04\x4a\x5c\x46\x89\x0b\x94\x10\x46\x09\x01\x4a\x28\xa3\x84\x02\x25\x1e\xa3\xc4\x03\x4a\xba\x8c\x92\x2e\x50\xd2\x63\x54\xe2\x25\xd2\x67\x94\xf4\x81\x12\x9f\x51\xe2\x03\x25\x03\x46\xc9\x00\x28\x19\x32\x4a\x86\x40\xa9\xcb\x28\x75\x81\x52\xc2\x28\x25\x40\x29\x65\x94\x52\xa0\xd4\x63\x94\x7a\x40\x69\x97\x51\xda\x05\x4a\x7b\x8c\xd2\x1e\x50\xda\x67\x94\xf6\x81\x52\x9f\x51\xea\x03\xa5\x03\x46\xe9\x00\x28\x1d\x32\x4a\x87\x40\x3d\x97\x51\xcf\x05\xea\x11\x46\x3d\x02\xd4\xa3\x8c\x7a\x14\xa8\xe7\x31\xea\x79\x40\xbd\x2e\xa3\x5e\x17\xa8\xd7\x63\xd4\xeb\x01\xf5\xfa\x8c\x7a\x7d\xa0\x9e\xcf\xa8\xe7\x03\xf5\x06\x8c\x7a\x03\xa0\xde\x90\x51\x6f\x08\xb4\xeb\x32\xda\x75\x81\x76\x09\xa3\x5d\x02\xb4\x4b\x19\xed\x52\xa0\x5d\x8f\xd1\xae\x07\xb4\xdb\x65\xb4\xdb\x05\xda\xed\x31\xda\xed\x01\xed\xf6\x19\xed\xf6\x81\x76\x7d\x46\xbb\x3e\xd0\xee\x80\xd1\xee\x00\x68\x77\xc8\x68\x77\x08\xb4\xe7\x32\xda\x73\x81\xf6\x08\xa3\x3d\x02\xb4\x47\x19\xed\x51\xa0\x3d\x8f\xd1\x9e\x07\xb4\xd7\x65\xb4\xd7\x05\xda\xeb\x31\xda\xeb\x01\xed\xf5\x19\xed\xf5\x81\xf6\x7c\x46\x7b\x3e\xd0\xde\x80\xd1\xde\x00\x68\x6f\xc8\x68\x6f\x08\xb4\xef\x32\xda\x77\x81\xf6\x09\xa3\x7d\x02\xb4\x4f\x19\xed\x53\xa0\x7d\x8f\xd1\xbe\x07\xb4\xdf\x65\xb4\xdf\x05\xda\xef\x31\xda\xef\x01\xed\xf7\x19\xed\xf7\x81\xf6\x7d\x46\xfb\x3e\xd0\xfe\x80\xd1\xfe\x00\x68\x7f\xc8\x68\x7f\x08\xd4\x77\x19\xf5\x5d\xa0\x3e\x61\xd4\x27\x40\x7d\xca\xa8\x4f\x81\xfa\x1e\xa3\xbe\x07\xd4\xef\x32\xea\x77\x81\xfa\x3d\x46\xfd\x1e\x50\xbf\xcf\xa8\xdf\x07\xea\xfb\x8c\xfa\x3e\x50\x7f\xc0\xa8\x3f\x00\xea\x0f\x19\xf5\x87\x40\x07\x2e\xa3\x03\x17\xe8\x80\x30\x3a\x20\x40\x07\x94\xd1\x01\x05\x3a\xf0\x18\x1d\x78\x40\x07\x5d\x46\x07\x5d\xa0\x83\x1e\xa3\x83\x1e\xd0\x41\x9f\xd1\x41\x1f\xe8\xc0\x67\x74\xe0\x03\x1d\x0c\x18\x1d\x0c\x80\x0e\x86\x8c\x0e\x86\x40\x87\x2e\xa3\x43\x17\xe8\x90\x30\x3a\x24\xd0\xa3\xac\x27\x29\x9f\x6e\x03\x01\x21\x71\xe2\x01\x04\x72\xb4\x2c\x65\xbe\x0a\xb2\x1f\x82\xf5\x1e\x1e\xe9\x90\x32\x3a\xa4\x45\x3d\xbd\xa6\x7a\xbc\x53\xf5\x84\xd1\x74\xb5\x99\x89\x54\x55\xe4\x31\x3a\xf4\x8a\x8a\xfa\x4d\x15\x75\x8f\x2b\x32\xfa\x03\x23\x20\x50\x15\x75\x19\x1d\x76\x8b\x8a\xfc\xa6\x8a\x8e\x61\x6b\x5e\xd1\x42\x64\x15\xf5\xe6\xb7\x22\x9d\x26\xe1\x3a\x8b\x13\x5d\x75\x8f\xd1\x61\xaf\xa8\x7a\xd0\x54\x75\xff\x64\xd5\xdb\x60\xb5\x31\x5d\xec\x33\x3a\xec\x17\xf5\x0c\x0f\xeb\x39\x64\x39\x34\x5a\xa3\x92\x02\x39\xac\xfb\x5d\x12\xdf\x85\xa9\x12\xe8\x4a\x0a\x5b\xd6\x9e\x1f\xd9\xa1\xcf\xe8\xd0\x2f\x5a\x21\x6e\x53\x77\x07\xc7\x55\x7e\xc8\x12\x49\x39\xaf\x83\xd9\x75\x34\x53\xdd\x1d\x30\x3a\x1c\x94\x15\x91\xa6\x8a\x86\x4f\x55\xf4\x21\x0b\x92\x4c\x55\x35\x64\x74\x38\x2c\xab\xa2\xc7\x55\x79\x92\x2e\x3c\x51\x55\x96\x84\x77\xef\xc3\xc5\x52\xd6\xe5\xb9\x84\x79\x6e\xb9\x85\x49\x03\x11\xec\x49\xfa\xec\x89\xba\xbe\x17\x73\x5d\x95\xcb\x3c\xd7\x2d\xab\x6a\x38\x0e\x9e\x7b\x70\x1c\x48\x8f\x60\x67\x8e\xac\x20\x7d\x88\xa6\xaf\x33\x91\x04\x59\x9c\x58\x1a\x49\x13\x46\x7a\x04\x3c\x97\x32\xcf\x55\x15\x36\x9c\x0b\xef\xb0\xbe\x01\x76\x16\xab\xf8\x36\x58\xc9\x2a\x24\x5a\x03\x8f\x32\x4f\x15\x3f\x3a\x0d\x59\x83\xf8\xd1\xa8\xc1\x8e\x55\x6f\x46\x27\xf9\xf1\x61\x2d\x34\xf7\x2f\x3a\x96\xe4\x03\x95\x5a\xb2\x10\x53\xb4\xad\xd2\x6c\x62\xbf\x87\x47\xd9\xee\xd1\xe1\x31\x4a\x08\x44\x07\xf8\xec\x64\x1f\xda\x09\x12\xf8\xc9\x46\xa3\x96\x96\xc7\x1c\xb6\x29\xb1\xd1\x40\x36\x7c\x74\xb4\x8c\xd4\xa0\x94\xcb\x18\xee\x93\x59\xd4\xe9\x3b\x3d\x6b\x7f\x66\x45\x9b\xbb\x5b\x91\x94\x12\x80\x9b\x1b\x61\xdb\xe8\xe6\x46\xf0\x04\x9b\xf1\x1c\x9d\xb4\x7c\x3c\xa4\xdf\x3c\x1e\xc8\x20\x52\x63\x92\x43\x82\x42\x89\x96\x95\x1a\xe6\xf4\x3e\xcc\xa6\x4b\x14\xe1\xc7\x69\x90\x8a\x16\x61\x07\xd2\x1f\x94\x14\x02\x21\xa1\xc5\x22\x19\x24\x78\x7f\xa6\x72\xd3\xe3\xdc\xb2\xbd\xa3\xfc\x10\xe5\x25\xbc\xa6\x12\x10\x36\x96\x81\xb0\x54\x16\x1f\x8b\xa7\x44\xae\x76\x84\x42\x3e\xac\x74\x17\x8f\x44\x92\x80\x92\x1b\x3e\x02\x18\xe5\x0c\xb5\x25\x54\xc2\xe8\xb8\x56\xbf\x9d\xdb\xe3\x68\xd1\x46\x61\x28\xf2\xb8\x07\x2b\xb0\xe0\x71\x21\x2a\x96\x27\x65\xb1\xfd\x1e\x3b\xc1\x1e\x2b\xf8\xc5\xa8\x27\x9b\x3f\x02\x33\x95\xcd\x07\x91\xfc\xed\x62\x67\x16\x4f\x55\xdf\x21\xe4\x89\xb6\x50\x41\x91\x31\x05\xba\x5e\x09\xf9\xe5\xd4\x46\xcd\x85\x3e\xa3\x83\xfc\x48\x60\xad\x7e\x7c\x94\xb4\x93\x44\xad\x7a\x4f\xd2\x23\x58\x55\xf4\xa7\xab\xfb\x23\xb9\xea\x50\xfe\x0e\x31\xc4\x32\xbd\x8f\x21\x90\xbf\x3d\x0c\x07\x9b\x6a\xa3\x4b\xaf\x60\x0a\x73\x58\x72\x61\xa7\xce\x2b\x98\xa9\xdf\xef\x60\xad\x7e\x3f\xc0\x9d\xfa\x7d\x07\x5b\xf5\xfb\x0d\x2c\xd4\xef\x4f\xf0\xc0\x67\xa3\x88\x45\xe3\x6c\xb2\xdb\x21\xf9\xc3\x1f\xf7\x18\x6e\xf9\x43\xa9\x75\x82\x1b\x3e\x1b\x25\x6c\x3d\x4a\xc6\xd9\x84\xa1\x44\xe5\x7d\xdc\xe3\x32\x87\xd2\xe0\xad\x5a\x61\xd4\x9a\xd9\x36\xda\xf0\x0c\xc3\x06\xa3\x29\x6f\x2f\x6d\xfb\x26\xd7\x17\xb7\x39\xbf\x19\xaf\x26\xd8\xb6\x03\xf4\x00\x2b\xbc\xdb\xa1\x39\x9f\x8e\x64\x1a\xdb\x8c\x57\x13\x78\x18\xaf\x26\x7c\xd6\xa8\xf1\x97\x99\x46\x32\x13\xdb\xda\xf6\x74\x14\xa2\x39\x24\x98\x2d\x6c\x5b\x7e\xe0\x7c\x3e\x3a\x14\x0a\x56\x75\x60\x5a\x5e\x1a\xce\x95\x70\xb5\xaa\x9d\x11\xf8\xd1\x9c\xb8\x23\x45\x8f\x3e\x80\x6e\x7e\x40\x22\x71\xdf\x12\x67\xf5\x43\xa9\xd2\x50\x86\x0f\x4e\x9f\x49\x96\xe7\xf2\x30\xa5\x22\x7b\x14\x55\x3d\x7d\xe5\xcc\x94\x6a\xb9\x62\x72\xb9\xa8\x2c\x45\xb6\x47\x73\xcc\xee\xaa\x93\x54\xc0\xa8\xf9\x28\x44\xaf\x4c\xaa\x3a\xb9\x30\xc7\x6c\x0e\x77\xb6\x8d\xd0\x83\xb3\x0d\x93\x6c\x13\xac\x76\xbb\xf2\x59\x2e\x35\x96\x13\x38\x07\xb9\x19\xde\xdb\xf6\xad\x6d\xb7\x6f\xc7\xab\x89\x6d\xc7\xe8\x16\x64\x05\x18\xef\xcf\x52\xe7\x15\x27\x90\x3a\xdf\x71\x0a\xa9\xf3\x81\x77\x21\x75\xde\xf1\x01\xa4\xce\x37\x9c\xf4\x21\x75\x7e\xe2\x9e\xfc\xf2\x23\xef\xcb\x4f\xef\x39\xa1\x83\x0a\x3a\x4a\x0b\x1c\x44\x24\x23\x04\xe6\x28\x48\xa2\x1a\x24\x0b\xa1\xe0\xc3\x11\xc2\x6d\x3e\x68\x59\xf2\x90\x5b\xa4\xb4\x05\xc2\xfb\x69\x20\x97\xaf\x50\x51\xb5\xdd\xbd\x41\x37\xf4\x08\xed\x1e\x42\xfd\x26\x89\xa9\x36\x5f\xb4\x6d\x63\xc6\xf8\x43\x90\x2d\x39\x97\xff\x47\x3a\x85\x35\x15\x4a\xc5\x6a\x6e\xdb\xf2\x7f\xb5\x80\x7c\x67\xf9\x72\x20\xab\x62\x7d\x61\x61\x84\x9b\x30\xcc\x42\x61\x98\x45\x81\x61\xe8\x11\xa2\x37\x86\x86\xfb\x03\xc3\xb9\x13\xd8\xa6\xd4\xfd\x6a\x38\x2e\x93\xf2\xd9\x39\x22\x02\x0a\xf8\x33\xd4\xf0\xc7\x73\xab\xb0\x4e\x20\xea\xe2\x51\x0d\xea\x84\x95\xea\xe7\x1a\xb9\x21\x02\x21\xc6\x7b\x76\xa4\xcc\x32\x7b\x5e\x59\x1a\x80\x46\xce\x92\x15\x06\xc9\x28\x0e\xc1\x93\x04\x93\xec\xd4\x11\x85\x50\xc7\x11\x2e\xb6\xed\x7f\x3f\xae\x10\x88\x12\x8c\xac\x59\xb8\xb5\xf0\xd7\x62\x0d\xdd\x39\xc9\x55\x43\x81\x41\x8e\xa8\x88\xa7\x30\xc1\xb1\xf2\x68\x14\x6d\x56\xab\x36\xe7\x82\x35\x9c\xdc\x9c\x46\xa2\x07\x34\x45\xae\x48\x57\x08\xc1\xd7\x08\x81\xfa\x1a\x21\x78\x44\x22\x84\xc6\x31\x9f\x25\xce\xdc\x2c\x59\xe3\xf7\xa3\x05\x0a\xe7\x48\x76\x1e\x32\x1e\xa3\x0c\xda\x2e\x06\x49\x6a\x40\x88\xcb\xe3\x96\x6b\xac\xf3\x23\x97\xe2\xc7\xbd\x24\x11\x17\x22\xb3\xc2\xa8\x95\xec\x76\x56\x6a\x1e\x8f\xa8\x35\xeb\x85\xb2\x57\x8b\x13\x4d\xb1\x15\x4a\xfc\x92\x62\xb3\x14\x3f\xa3\x4a\xdb\x36\x32\x26\x29\x2a\x0d\xeb\xfd\x42\x7c\x46\x7c\x30\x0b\x23\xd9\x5b\xf0\x08\xf3\xc8\x7e\x22\x77\xcf\x57\x2c\x4c\x79\x1a\x1e\x45\xb4\xb9\x13\x4a\x4b\xc1\xda\x88\xd8\x02\xc3\x34\x8e\xe6\xe1\x62\x93\xa7\x51\x99\x76\x9f\x84\x99\x79\xef\xca\x77\xd5\x19\x96\xe5\xe0\xc5\x7b\x8a\xa0\x38\x79\x1e\x0b\x7a\xb6\xa0\xf8\x72\x5b\x59\x89\x9d\x9a\x80\x3a\x8a\xb8\x70\xb2\x58\xb3\x19\x72\xff\x27\x28\xe4\x91\x39\xcf\xb8\xa8\x48\x55\x70\xa2\xb4\xea\xf9\xdb\xf9\x17\x0a\xb7\xff\xdb\x9a\x3f\x5a\xf2\x97\x41\xf4\xc7\xac\x35\x8d\xa3\xad\x48\x32\x43\xa1\xb7\xb2\xb8\xb5\x4e\xc2\xbb\x30\x0b\xb7\xa2\xa5\x97\x1c\x57\x49\x75\xef\x40\x69\xa2\x31\xb9\x40\x94\xe2\xb3\x0c\x65\xce\x77\xf0\xa8\xb9\x1a\xa6\x08\x25\x7d\x58\x29\xa3\x54\xe3\x14\x59\x83\x77\x7c\x82\x0a\xf4\x3a\xee\x4e\xc6\xa4\xaf\x74\x8a\x1a\xfb\x26\x55\xd4\x5b\x12\xab\xde\x09\xdc\x21\x50\xf7\xe9\xc5\xcd\x81\x7a\xcd\x7e\xf1\x4d\x9e\xd6\xc8\xc9\x64\xf9\x11\xe8\xa8\x7d\xde\x1d\xb0\xae\x9a\x89\x13\xb0\x5f\xb2\x8a\x14\x23\x6b\x13\xa5\xd3\x78\x2d\x37\x68\xaa\x4c\x50\xb5\x0c\xa4\x24\xc8\xb4\x4d\x65\x34\x4e\x26\xb6\x2d\x90\x4f\x31\x8a\x20\x51\xda\xf2\x66\xb0\x25\x73\x8e\xc5\x84\x4b\x04\x2a\x99\x4e\xca\x48\x8f\x82\x4f\x99\x2f\x79\x46\xef\x08\x5d\xd4\xa4\x0a\x45\xd7\xe8\x10\xa3\xb6\xfb\x14\xf7\x93\xa3\xc1\x0e\x8a\x46\x89\xaa\xca\x50\x5c\x8c\xa8\x9d\x40\xe8\x90\x11\xaa\xd4\x50\x4f\x60\x83\xfa\x0a\x1b\xea\xae\x8d\x44\x95\xb8\xcb\x70\xc5\x4a\x34\xb2\x6d\x65\x89\x7e\xcc\xbe\x26\x1d\x8b\xb5\xc2\x68\x1a\x27\x89\x50\x0a\xc0\x6d\x3c\x0d\x4e\xb0\xb0\xde\xe0\x4b\x9b\xcb\x7f\x62\x73\x29\x08\x36\x20\x6c\xa0\xa0\xd6\xd3\x72\x9a\x62\x46\xbb\xd4\xb0\x03\x9e\x01\xff\xa4\x4b\xaa\xf3\x3b\x9e\x38\xd3\x78\xfd\xf0\x53\x98\x2d\xc3\xe8\xd0\xec\x5a\xeb\xb3\x13\x63\x54\x10\xf0\x10\xc5\x85\x21\x53\xca\x65\xa6\x00\xc3\x86\x4b\x12\x39\xc0\xb0\x3a\xb2\xed\xb9\xa2\xa3\x72\x78\x74\x92\x5b\xd6\x4d\x15\x81\xe3\xdc\x85\x11\x42\x05\x17\xbb\x1a\x05\x2c\x42\x2b\x08\x30\x3e\xdf\x40\x70\x9e\x62\x98\x73\xa2\x18\x83\xcd\x65\x6a\xdb\xe9\xe5\xa6\x33\xb5\x6d\x34\xe7\xe7\x04\x36\x1d\x3e\x3d\x27\x90\xaa\x1f\x7c\x31\x3d\x3f\x6f\x5d\xb9\x17\x78\x23\x97\x28\x1e\xc5\xe3\x74\xc2\xe3\xf1\x66\xc2\x8c\x9b\x85\x4c\x90\x99\xe7\xb2\xe0\x3c\x5f\x95\x58\xed\x17\xcf\x67\xc4\xf3\x81\x74\x09\x23\x5d\x02\xa4\x4b\x19\xe9\x2a\x29\xe4\x11\x5e\xf8\xdb\x66\xb8\xd9\xb1\x22\x9f\xd4\x98\x87\x15\x83\xfc\xe0\x68\x0a\xd5\x3c\x07\x57\xa4\x32\x91\xa4\x98\xc8\x58\xce\x7e\x70\x62\x96\x57\xbc\x98\xdb\xcd\x28\x66\x11\xda\x40\x8c\x2f\x56\x57\xe9\x05\xce\xc6\x69\xa7\x33\xe1\xa2\x60\x16\xbe\x30\x13\x27\x71\x15\xe9\xba\x66\xf0\x5d\x62\x06\xef\xf9\x5f\xe0\x71\x2b\x7c\x55\x0c\x81\xae\x2b\x85\x8d\x9c\x11\xb9\x87\x22\xb4\x29\xa6\x63\xca\x43\x14\xc0\x4a\x59\x91\x08\xdb\x8e\xdb\x3c\xd6\x73\x78\xb1\xba\x9a\x5e\xe0\x70\x8e\x50\xca\x37\xe3\x69\xa7\x33\xc1\x6d\x9e\xe2\x82\x86\x17\xab\x54\xb4\x8a\x8c\xd3\x4e\x47\xe5\x15\xbb\xdd\x54\xee\x90\x0d\xb6\xed\xcd\x78\x3a\xe1\x9c\x17\xb6\x29\xf2\xdb\x6e\xe7\x9a\x19\x69\x0b\xdb\x3e\x27\xfb\xfa\xb4\xb8\x8c\x74\xdd\x7c\x7a\xe4\xb4\x9c\xe4\xc1\x7b\x86\x07\xf7\x8b\x1d\x41\x35\xcd\xa5\xa6\x49\x72\xe1\xdd\xde\x69\x3c\xa0\x26\x84\x13\xce\x05\x6c\x38\x95\x3f\x2b\xee\xc9\x9f\x29\xef\xca\x9f\x39\xef\xcb\x9f\x25\xef\x29\x03\xea\x39\xcc\x78\xb6\xdb\x05\x67\xc7\xf3\x1b\xc0\xba\xdc\x73\x77\xb0\x85\x85\xdc\x6d\x18\x1e\x78\x84\x16\x92\x49\x4f\x50\x00\x6b\xf0\x30\xdc\xf0\x18\x3d\x14\xf3\x7e\xcf\x5d\xb8\xe6\xe9\x68\x86\x32\xb8\xc1\x6c\xa3\x1e\x5c\x6c\x76\xd6\xc5\xcd\xd5\xfd\xc5\xbd\x99\xd3\xe5\x6e\x77\x2f\xe7\xf4\x01\xdb\x36\xda\xf2\x5b\x74\xc7\x1f\xc6\xf7\x13\xb8\x87\x05\x06\x81\x65\x9e\x14\x5f\x8f\xef\x27\x7c\x7b\xa6\x56\x25\x9c\xa3\x2d\x36\x5c\xb3\x30\x6c\x72\x2e\x47\x6a\xbb\x9a\x17\xee\xe5\xbc\xf0\x9d\x7e\xef\xe7\xef\xf7\x39\xaf\x7c\xad\x1d\x10\xee\xb4\x8f\x82\xac\x74\x9a\xaf\x3e\x29\x26\x62\x74\x4e\xd8\x6a\xb7\x9b\x8e\xa6\xec\x5a\xaf\x65\x7d\x6b\x43\xb7\xc7\xba\x3d\xe8\x75\x59\xaf\x0b\xbe\xcf\x7c\x5f\xae\xea\x11\x23\x99\xaf\xaa\xe7\xe5\x7b\x9d\xea\x65\xf5\xfd\x72\x55\x4f\xa1\xac\x00\x52\xd8\xe0\x47\x85\xa7\x8d\xdd\x93\x24\x94\xe5\xce\x5e\x49\x08\x17\xa3\x55\x31\xed\x4b\xbe\x19\xcd\xcf\x09\x73\x61\xc6\x37\xb2\xf3\x44\x6e\xfc\xe0\x92\x62\xb5\x95\x2f\x14\x96\x5a\xca\xd9\x9e\xe2\xc7\x94\x4f\xc7\xcb\x09\x2c\x3b\x7c\x76\x76\x9b\x88\xe0\x93\xa4\xa6\xe5\x1b\x6c\x46\xcb\x4b\x97\xcd\x2f\xf9\xf2\x98\x90\x7e\x2f\x66\x9b\xa9\x72\xf5\x10\x77\xeb\xec\xa1\x15\x48\xb4\xdf\xba\x0f\xb3\x65\x2b\x8a\x5b\x61\x14\x66\x61\xb0\x2a\x28\x2b\xd5\xec\x66\xb4\xbc\xe2\x2e\x9b\x5f\x2d\x2f\x64\xf5\x58\x77\xc0\xb6\x51\xca\x33\x94\x82\xee\x05\xac\x70\x81\xed\xd2\xa6\xa9\xf6\x3c\xe6\x79\xe5\x24\x9f\x24\x90\x06\xc4\x1c\x9d\xa1\x39\x3a\x8a\x5a\x49\xd7\x62\x1a\x4a\x4a\xe5\x04\x68\x51\x30\x35\x6f\x5f\xa6\xd8\x76\x83\xf0\x19\x65\x5c\x38\xd3\x38\x4a\xb3\x64\x33\xcd\xe2\x04\xef\x76\x59\x9b\x6b\xd2\xc7\xb6\xdb\x11\xaa\x08\x4d\xf0\x6e\x87\x32\x03\x41\x31\xc8\xe5\xb3\x6d\xe3\x67\x82\x32\x9e\x8d\xc3\x89\x6c\xa3\xc8\x51\x15\xc7\x8e\x54\x85\x2c\xab\x11\x42\x43\xe6\x0f\x0b\xe4\xdd\x3d\x49\x9c\x75\xbb\xa7\xe1\x42\x29\x0d\x52\x02\x60\x8c\x34\x37\xde\xed\xb2\xae\xa4\x5c\xbb\x5f\x47\x63\xe5\xbb\x78\x60\x00\xb6\xdf\x97\x9b\x78\x3c\xd1\xe6\xfe\x10\xf0\xc7\x7d\xa5\x07\x85\x38\xe8\x36\x8c\x66\x55\xf2\x20\xa7\xad\x73\x3c\x96\xf2\x58\x53\xf5\x05\x2a\x02\x22\xb1\xd3\x81\x91\x79\xc2\x53\xb9\x02\xd3\x20\x43\x87\xf9\x71\xcd\xc3\xa4\x6e\x04\xdd\xc0\x6f\xb6\x91\x24\xb6\x5a\x01\x2e\x21\x5c\xc4\xc7\x13\x08\xb9\x7b\x11\x5e\x66\xca\x4f\x2a\x1a\x87\x13\x6e\x05\x63\xab\x13\x76\xac\x89\x75\x16\x48\xbe\xb0\x14\xa9\xbc\x82\x40\xd9\xd0\x16\x42\xb6\x57\xc8\xea\xe4\x8e\x4c\x60\xe1\x8e\x85\xad\x42\xe0\x26\xcb\x22\x21\xf9\x57\x94\x41\xee\x91\x05\x09\x66\xa1\x92\xcc\x89\x52\xf4\x56\xdf\x47\xb6\x8d\x36\x15\x59\x5c\xf5\x13\x6c\xe4\xfa\x99\x93\xd1\x67\x7e\xbf\xdc\x20\x27\x75\x1d\x5d\x23\x6e\xd6\xe7\x22\xe7\xac\x3e\x06\x0b\x4b\x2e\xa7\xf5\x22\x9f\x4d\x8b\xf3\xa4\x41\xca\x51\xcc\xf6\x1e\xe1\x27\x0f\x93\xc4\xcd\xf9\x80\x4a\x77\x9d\x91\xf5\x63\x21\xbe\x62\xb9\xdb\xd5\xc8\x7a\xb3\x59\xad\x2c\x66\xa5\xaa\x2f\x25\xef\x17\x1f\x6c\xe0\x8a\x30\x40\x72\xe8\x46\x10\x90\xe0\xc7\xfd\x1e\x65\x46\x12\x21\x81\x63\x84\xf1\x28\x66\xe1\x48\x9e\x3a\x66\xbd\xcd\x25\x21\x28\x50\x34\x02\x6e\x94\x5d\x66\x6a\x37\x09\x31\xaa\x4c\x01\x0b\xaa\x47\x30\xe7\x8c\xba\x27\xd4\x39\x8f\xfb\x82\x51\x7d\x9a\x80\xc9\xa5\x61\xb9\xab\xde\x00\xce\x49\x2e\x17\xeb\x7e\x1d\x59\x3e\x1c\x62\x67\xae\xd6\x71\x98\x8b\xe9\x89\x41\x26\x92\x76\x90\x14\x82\xa4\x26\x53\x2e\x50\x7f\x20\x8f\x91\x40\x83\x9e\xa4\x8e\x04\x1a\xf8\x12\x7b\x48\x5e\xc9\x93\xf8\x43\xa0\xde\x40\x62\x0e\x81\x86\x5d\xec\xcc\x83\x34\xfb\x93\x78\x80\x99\xc2\x4a\x43\x0c\x6b\x3e\x1f\x59\x37\xa9\x5c\x9c\xf0\x57\x61\xc1\x5d\x93\x87\x00\x44\x7c\x29\xf1\x93\x64\x40\x5f\x59\x92\xdb\xc1\xa5\xcb\x72\x38\x8e\x26\x8a\x0a\x4f\xb8\x70\x6e\xe6\x17\xc9\x45\xc2\x13\x27\x92\x88\x3d\x71\x3e\x55\xb4\x4f\x49\x15\x6e\x3c\x2e\x44\xf6\xb2\x84\xb4\x75\x81\xd1\x06\x56\xba\x65\x39\x8e\xca\x17\xc9\x0d\x21\x01\x53\xc8\xc0\xba\x09\x2d\x0c\xc2\xb9\xc9\x78\x26\x7f\x42\x1e\x69\x67\x6a\xf9\x32\xcf\xbd\xa8\x85\x73\xb3\x2a\x9e\xc7\xeb\x09\x77\x41\x4b\xc9\x12\xdb\x4e\x51\x02\x1b\x10\xe3\xd5\x44\x9e\xcd\xd2\xac\x16\x4d\x2b\xd2\xf0\x47\x65\xac\xcd\x1a\x7d\xa1\x66\xc6\x07\x0e\x83\x1a\x79\x28\x97\x4b\x4e\x40\x74\x11\xf1\xc8\x89\x70\xe4\x24\xbc\xed\x42\xe4\xac\x6d\x1b\x45\xce\x9a\x47\xce\xda\x89\x0a\x94\x61\x58\x8f\x64\x1c\x39\xe1\xe4\x4c\xf5\xfa\xb8\xbb\x7b\x93\x8d\x1d\xdb\x24\x97\xcd\x47\xfc\x0e\x49\x00\x23\xd7\x27\x2a\x1c\x63\x9c\x08\x62\xd9\xe4\x59\xde\x90\x5a\x2a\x27\x9c\x80\xe9\x58\x6c\xdb\x28\x76\x22\x1e\x62\x08\x95\x17\xeb\x9a\xc7\x18\x12\xd9\x11\xc9\xce\x22\xf5\x14\xaa\x94\x55\x91\xb2\x52\x79\xc6\xeb\xc9\xf9\xf9\x3e\x17\x93\x47\x7b\x98\xc7\xc9\x75\x30\x5d\xd6\xba\x59\x74\xb0\xf4\x6b\x85\x88\xc7\x92\x29\x3c\x64\x03\x9b\xb9\x17\x0f\xcb\xad\x34\x4a\x9c\x88\x69\xef\xb7\xf9\x85\x22\x74\x22\x94\x38\x5b\x48\x9c\x4f\xca\x8f\x09\x5f\x24\xb6\x9d\x38\xc9\x05\x96\xfb\x6e\xbd\x87\x65\x90\xb2\xe3\x53\xd9\x6e\xdf\xa1\x72\xca\x04\xde\xef\x31\xcc\x6d\x3b\xa9\x2d\xb7\x39\x04\x27\x04\xb8\x45\xf1\xf1\x7a\x22\x8b\x4f\x95\x0f\xc7\x91\xac\xd3\x48\xdc\x20\xe6\x77\xea\x0c\x15\xec\xe4\x28\x76\xb6\x3c\x61\x48\x2d\x73\xcc\x1f\x43\x16\xca\x73\xa5\xc4\xa1\x9f\x58\x06\x5b\x96\xc0\x9a\xa9\x5d\xb4\x82\x28\x9f\x85\x44\x45\x2f\x90\xfb\x43\xf9\x99\xde\xcc\xe5\x0a\x44\x6a\x4b\x45\xf2\x51\x6e\x94\x4e\x07\xf4\xc1\x94\x0b\xa9\xce\x64\x38\xe1\x31\xc6\x20\xf6\xb0\x10\xd9\x75\x94\x25\x0f\xec\x0e\x52\x91\x7d\xc8\x92\x38\x5a\x1c\xf5\x79\xa3\x1e\xea\x47\x4d\xcf\x79\xc6\x67\xda\x2b\x5a\xbf\x16\xde\xe5\xc5\x4e\xdd\x43\xe3\xe9\x30\xd9\xc1\xb8\xdc\xdd\xac\x2e\x32\xdb\xce\xe4\x32\x65\x12\xc7\xd5\x9c\x45\x6f\xb2\xdc\x37\xf1\x66\xc5\x33\x9e\x8d\xb2\x62\xc9\x33\xe7\x66\x8e\x47\x2b\xe4\x82\xf5\x49\x3c\x48\xac\x25\x46\x99\xf3\x89\x69\x79\x6e\xfe\xbe\x65\xe3\x4c\x6e\x07\x67\x3b\xc1\x0c\xe5\x1d\xcf\xf9\x5c\x44\x30\xde\x43\x32\xb2\x8c\xdd\x8d\x55\x94\x86\xb6\x72\x98\x82\xa9\x22\x95\x24\x2e\x20\x3e\x23\xc4\x07\x42\x3d\x46\xa8\x07\xa4\x3b\x64\xa4\x3b\x04\xcf\x67\x9e\x6f\x18\x81\xde\x80\xf5\x06\xd0\x1f\xb0\xfe\x00\x06\x3d\x36\xe8\xc1\xc0\x67\x03\x1f\x86\x5d\x36\xec\xc2\x70\xc0\x86\x03\x18\x0e\xd9\x70\xb8\x9f\x40\xef\x2b\x65\x04\x12\xb8\x47\x06\x46\x2f\x44\xf6\x93\x08\x3e\x29\xa8\xef\x0d\x34\xd0\x1f\x90\x66\xa0\x2f\x39\x0d\x09\xf4\x7d\x62\x80\xbe\x84\xe9\x73\xbe\x41\x3d\xc5\x2d\xa0\x3e\x86\x19\x77\x25\x94\x3f\x46\x53\x72\x9b\xe9\x2d\xa5\x7d\x2d\xee\xf0\xbe\x0a\xfe\xcd\x06\x08\xf8\x78\xb2\x87\x6d\x33\xa9\x39\x47\xc2\x09\xa0\xa9\xee\xb1\x2b\xb9\xe7\x6c\x8f\xf7\x67\x77\x15\xea\xa6\x7e\xb2\x0a\x22\x71\xab\x4f\x96\x06\x61\x05\xc2\xc8\xc6\x64\x72\xfa\x38\x17\x65\xf6\x72\x5f\xb3\x26\x8c\x5d\x56\x9b\x8c\x92\x31\x99\xf0\x4c\xef\xaa\x40\x33\x87\x63\x01\xd9\x04\x9f\x04\xb1\x99\x3c\x9c\x2a\x7b\x39\xc2\x72\xe8\x99\x1e\xa1\x28\x30\xc7\xbf\xe6\x9e\xc7\x81\x72\xd6\x9f\x0a\x94\x49\x0a\xb7\xdd\xfe\x57\x49\xe8\x7f\x25\xe6\x0b\x73\x5d\xfb\xbc\x11\xf3\xcd\x1b\x31\xdf\xac\xd3\xa9\x61\xba\x1a\x8a\x0b\x41\x8c\x37\x75\x14\x97\xa0\x79\x15\xc5\x35\x0c\x5f\x92\xcf\x71\xa9\x46\x68\x13\xb3\x53\xe5\xc7\x5c\x02\x22\xe9\xbd\x64\xb4\x46\xd3\x1c\x2a\x62\x47\xd7\x84\x04\x66\x89\x6d\xaf\x50\x0e\x29\x42\x6c\xdb\x05\xb6\x33\x49\x0d\x0b\xfb\x37\x36\xba\x0c\xd2\x86\x16\x15\x78\x3f\x0d\x9f\x63\x1e\x21\x25\xe9\x68\xbb\xb5\xba\xe3\xd1\x5a\xd1\x6d\x22\x53\x0a\x76\x16\x8f\xe5\x0c\x6b\xa5\x22\x6c\xe6\x69\x16\x27\x82\xad\x6b\x90\xa2\x06\x21\xbc\x01\xf3\x06\xd0\xa5\xac\x4b\x0d\x84\xf0\x09\xf3\x89\xa6\xdb\x35\x84\x90\x50\xe1\x48\x5e\xd6\x08\x15\x7c\x23\x3b\xeb\xd3\x9c\x04\x34\xd0\x40\x81\x8b\x40\x83\x8b\x1a\x38\x90\xe0\x61\x65\xc0\x85\x04\x07\xfd\xae\x26\x01\x07\x7d\x4d\x02\x12\xda\xc5\x8a\xf6\xf3\x4f\x8a\x97\x60\x0d\x4a\x10\xa4\xe7\xe9\x81\x27\x63\x31\x81\x5b\xfe\x00\x37\x7c\x3b\x52\x1a\x38\x66\x05\xb3\x99\x05\xf7\xfc\xd6\xb6\x6f\x2b\x1b\xe9\x9a\x3f\xee\xe1\xf3\x31\xa7\xc0\xef\x95\x7f\x29\xba\x07\x01\x96\xde\x07\x0a\x6c\x37\x1c\x6a\xb4\xb0\xed\xb6\x52\xfc\x48\x5c\xa1\x6d\x83\xe4\x3a\x6b\xde\xc2\x65\x02\xef\x99\xb5\x0c\xd2\xff\xa6\xf2\x0b\x91\x9d\x28\xdf\xca\x8b\x8f\xf4\x49\x62\x27\xeb\x90\x33\x70\xa2\x8e\xe6\x32\x6a\x63\xd6\x14\xd7\xc9\xd3\x25\x20\x31\x65\xf0\xbe\x59\xf5\xd6\xba\xb5\x6d\xb4\xd8\xed\xee\x1d\x43\x7c\xd9\x76\x7b\x5a\xe5\xe8\x90\x04\xea\xb7\x38\xb7\x36\x45\xd8\x89\xc4\xe7\x0c\xe1\x3d\xc6\x7a\x65\x3e\x28\xb0\x7f\x0b\x2f\xf8\x87\xf1\xcd\x04\x2d\x46\x8f\x7b\x76\xee\x02\xc1\x6d\xfe\x01\xde\xf2\x5a\x65\x1f\xd4\x39\x23\x78\x8f\xe1\x13\x9f\xd7\x22\x1e\xa9\x4a\x90\x04\x30\xf0\x92\xb7\x17\xb6\x5d\x2b\x58\x52\x04\xba\xb1\x8c\xf7\x2e\xb2\xf3\xf3\x0b\x2c\x64\x9b\x59\x49\x1f\xb5\x85\x6a\xe2\xdc\x95\x90\xea\xd3\x6e\x87\xd0\x2d\xcf\x50\xd5\xc8\x46\x92\x29\x19\xdc\x4a\x78\xae\xb9\xf9\x99\x1a\xe2\x03\x64\x70\x5b\x00\xb7\x1a\xf0\xdb\x42\x34\xbe\x99\x40\x84\x21\xda\xe3\x8a\x39\x11\xbf\x87\xfb\xaa\xa0\x87\xdf\x62\x40\x6f\x77\xbb\x97\x92\x1b\xff\x8c\xf2\x5d\x8a\xe1\x33\x52\xdb\x0d\xc3\xd6\xb6\x3f\x6b\x5d\x34\xc6\x80\x5e\xee\x76\x2f\xb0\x4c\xb9\xc1\xb0\xb0\xed\x7b\xed\xd3\x59\x40\x39\xf3\xae\x45\x8f\xb7\xfc\xce\xa9\x83\x7c\x94\x81\x80\x2d\xdc\x60\x88\x51\xf5\x00\xad\x31\x04\xce\x9b\xeb\xeb\x6f\x79\x3b\x97\x33\xb7\x96\x48\x8e\x17\xae\xc7\x62\xc2\x6f\x21\x42\x91\xf3\x5d\x27\x72\x7e\xea\x44\xce\xab\x67\xe8\xb6\xcd\x1f\x30\x5c\x63\x58\xec\x76\x77\x4e\x41\xdd\xc9\x22\xb0\xc5\x70\x5b\x83\x53\x64\xc0\x08\x19\x00\xa1\x5d\x46\x68\xd7\xc0\xab\x3e\x65\x7d\x0a\xfd\x2e\xeb\x77\x73\x78\xe5\x32\xdf\x05\xbf\xc7\xfc\x9e\x81\x5a\x83\x3e\x1b\xf4\x4b\xd8\x45\xbf\xa4\xa2\x1a\x3c\xa1\xa2\x1a\x30\x22\x59\xec\xde\x91\x0c\xf5\x14\x17\xac\x65\x19\x4f\x18\x3c\x86\xf8\x51\xc9\x79\xc4\xa8\xb4\x12\x71\x21\xc4\x98\x29\x25\x7f\xa8\xe7\xa0\xcf\x08\xe9\x97\x54\x59\xf7\x4b\x63\x18\x3e\x31\x06\x65\x62\xa4\x84\x32\xb2\xaa\x23\x49\x5d\xe3\x48\xfa\x4a\xe0\xff\x6d\x90\x55\x4c\xad\xe4\xae\xf8\x18\xde\x09\x08\x0f\x3f\x64\xf1\xeb\x0f\x6f\xb5\xa4\x01\xe2\x46\xd2\xed\x6a\x38\x12\xcc\x72\xad\x8e\xa8\x32\xd5\x0d\x02\x1d\xcb\xf5\x06\xbd\x73\xd7\x3f\xa7\xbd\x8f\xae\xcf\xdc\x3e\xf3\x86\xce\x70\x38\xfc\x67\xab\xcd\x43\x0d\x77\xe4\x19\x92\x1d\x40\xe7\x3d\x41\xbc\x73\x15\x2f\x60\xb7\x6b\xd7\x2a\x3b\xcc\xfa\x26\x78\x23\xb3\x8d\xaa\x59\xe6\xa8\x1d\xa6\xaf\xc2\x28\xcc\x04\x8a\x4a\x90\x86\x73\x95\xf4\xfb\x20\x5a\xe4\x62\xe6\xd7\xd1\x36\x58\x85\xb3\x56\x16\xde\x15\x7a\xfa\x4a\xb0\x19\xc8\xb8\x9a\x9e\x1f\x3f\xbe\x7c\xb5\x59\xad\xfe\xa2\x1d\xa6\x93\x22\xf1\x87\x70\xb5\x0a\x53\x31\x8d\xa3\x59\xaa\x82\x72\x65\x97\xee\xc8\x3a\xb7\x58\x76\x35\x1c\x0e\x87\x23\xab\x63\x31\xcb\x2a\x58\xfa\x0e\xb2\x5c\xf9\x67\x75\x94\x5e\x31\xb8\x4d\x91\xa4\x1c\xb4\x74\x26\x1c\x9d\xf7\xd9\x79\x17\x77\xac\x73\xab\x13\xa3\xa2\x89\x38\xca\x96\x08\x77\xc8\xe1\x07\x35\x7e\x8c\x3b\xd6\xc7\x6a\xea\xdf\xc7\x9b\x24\x55\xc9\xac\x56\x4b\x18\x6d\x32\xd1\xf0\xe1\x43\xde\x79\xdc\xb1\x1c\xab\x83\x92\xab\xe1\x70\x94\xa8\x25\x8d\x51\x22\x53\xff\xd9\xda\xb3\x70\x0f\x8f\xea\x70\xca\x9d\xf6\x95\xe2\xdb\x5c\xfe\xd7\xf5\x9e\x30\x7a\xce\x45\x71\x6d\xce\x85\x6d\x97\x56\x05\xea\xcd\x38\xa0\xaa\xd7\x63\x0d\xc1\xeb\x42\x95\xbd\x0c\xa3\xac\xd4\x61\x47\x28\x17\xf5\x96\xd5\x09\xad\x72\xef\x7a\x8c\x74\x3d\x4d\x1c\xc9\x91\x7c\x95\xe2\x5d\x1b\x0d\x29\x11\x62\x43\x2f\x8c\xf5\x47\xb0\x5a\xb5\xee\x44\xb6\x8c\x67\xad\x38\x6a\xb5\xac\x8e\x38\xd2\xa9\xf7\xbe\xa4\x53\xa7\xee\xe9\xc3\xae\xed\x81\x8a\x25\x68\xb0\x9e\xaa\x57\x45\x9e\xa8\x4a\x59\x7b\x69\xf0\x9a\x8b\x71\xfb\x4f\x98\x16\x59\x15\xfc\x04\x75\x73\x3c\x08\xd3\x77\x39\xb0\x78\x3b\x87\xb5\x49\x7e\x9d\x5e\x17\x96\x47\x90\xc5\xdf\xc7\xd3\x60\x25\x0c\x18\xc9\x25\x97\x60\x8c\x75\xac\x3c\xa2\x18\x58\xc6\x18\xb0\x7f\x5a\x89\xeb\x1a\xee\x94\xb8\x5d\x43\x89\xba\x27\x2d\xea\x73\xa9\xbf\xc0\x4a\xfc\x34\xd7\x0e\xfe\x39\x15\x10\x40\xca\x25\x8d\x0f\x1b\x1e\x3a\x73\x58\x71\xf7\xa2\x10\x02\xad\x2e\xf0\x26\xb7\x23\x0c\x78\x3a\x5e\x75\x3a\x13\x45\xc7\x99\x50\x62\x75\x65\xb4\xdb\x65\xc4\xed\x02\x71\x7d\x46\x5c\x1f\x88\x3b\x60\xc4\x95\xbb\xab\x7f\x52\xeb\x9a\xd3\xd3\xbd\x5c\x3d\x97\x2b\x5d\x25\x5d\x1d\x18\xd1\xea\x93\xa6\xcf\xc6\xe8\xf9\x95\x31\x7a\xfe\xce\x18\x3d\x7f\x30\x46\xcf\xef\x8c\xd1\xf3\x37\xf0\xc0\xd7\xa3\x84\xdd\x8d\xb4\x29\xb3\xb2\x68\xe6\x8f\x7b\xdc\x68\xdb\x0c\xb7\x7c\xdd\x60\x21\x7d\xc3\x2b\xb4\xc1\x6e\x57\xa5\x14\xe4\xf7\xd2\x22\x7a\x5d\x5a\x44\xcf\x39\x42\x53\xde\x9e\xd9\xf6\x43\xc5\x28\xfa\x61\xbc\x9a\xe0\xd1\x03\xdb\xe0\xf1\x6a\x02\x4b\x2e\x49\xb4\x51\xa0\x2d\x9c\xb7\x27\x0c\x7d\x83\x26\x43\xdf\x07\xdb\x8e\xd1\x03\xac\x40\x9b\xf3\xfe\x88\xe1\x76\xbc\x9a\xb4\xf9\xdc\xb6\x43\x65\xcd\xbb\x54\x84\xd2\x4d\x9e\x88\x94\xf1\xf4\x1c\xef\xcf\x12\x67\x1a\x27\x82\x47\xf0\xff\x87\xa5\xaf\xa1\x64\x94\xff\x4b\xae\x9c\xd5\x54\x8b\xb1\x26\xea\x9f\x54\xd1\x6a\xad\xc8\x5d\x90\x4d\x97\x4f\xeb\x0a\xf9\x73\xe7\xb9\x0a\xc2\x65\x3d\x77\x9e\x5b\x63\x31\x41\x59\x6e\x98\x18\xd5\x14\x15\xd9\x38\x99\xf0\x36\x81\xf6\x71\xc6\x10\x3f\xe6\x1e\x0d\x35\xab\x27\xd9\xc3\x2f\x51\x20\xd4\x7b\x02\x92\x18\x8b\xd1\xfe\xd3\xb4\x87\x76\x49\xae\xc8\x98\x0c\x66\xf0\xcd\xf6\x97\x34\x89\x52\x28\x18\x66\x52\xce\x8d\xe2\x26\x09\x75\x95\xdd\x48\x45\xad\x0a\x2b\xde\x0e\xd1\x81\xae\x4e\xa8\x49\x2a\xa4\x49\xe2\xb3\x98\x1e\xc7\x8c\x1a\x4f\xca\x1c\x8b\x24\xde\xac\x53\xfe\x18\x30\xcb\xb7\xf6\x92\xa5\xb6\x7c\x89\x65\x2c\xcb\x49\xc4\x7a\x15\x4c\x05\x12\x60\xfd\xe1\x32\xb8\x52\x11\x68\x1a\x6a\x7b\x8e\x46\x0c\x3f\x57\xe4\x81\x6c\xee\xec\xb8\xd5\x82\xa7\x3a\x61\xfe\xae\xa7\xc3\x0a\x6e\x73\x08\x58\x62\x0c\xaa\xe2\x1e\xe5\x91\x37\xad\x40\xc5\x41\x1a\xbb\x13\xdb\xb6\x6e\xf5\x33\x99\xec\xd1\x49\x4a\x74\xae\x3b\xb9\xe4\x81\x04\x70\xb3\x86\x09\xcb\xf8\x63\x69\x7f\x3f\x5e\x4e\x1a\xfa\xed\xef\xc1\x6f\x73\x2b\xdf\x48\x18\xd6\x7c\x36\x6a\xaa\xa9\x4d\x20\xe1\xcf\x83\xe7\x65\x10\xd5\x53\x33\xa1\x94\x10\x9b\xd5\x6a\x0f\x96\x1a\xb1\x1c\x8a\x50\xd2\xfc\x2a\x07\xf4\xb8\x87\x5a\xc2\x78\xd3\xd4\xbd\x64\x8f\x21\x19\x2f\x27\xc8\xb2\x30\xb4\xb3\x7d\x6e\xf2\xa1\x0c\x3c\x67\xbb\x5d\x7b\xad\x22\x18\xaa\xb5\x34\xed\xb4\x57\xbb\x5d\xad\xe1\xf6\x54\x8f\xe1\x4e\x6e\x9f\xf1\x72\x02\x5b\x3e\x47\x31\x2c\x41\x8d\x1a\x0e\x4d\xef\x2a\x76\xe0\x99\x1e\x23\xe7\xe9\x68\x66\xdb\xed\x70\xf4\x38\x8b\x23\xc1\xda\xae\x31\x9e\xbd\xab\xb9\x20\xb1\x83\xaf\xc6\xd9\x28\x51\x76\x82\xc5\x57\xb2\xdf\x63\x58\xf0\xed\xd8\x9d\xc0\x03\xdf\x8e\xc9\xe4\x2c\x41\xb9\x2f\x60\x01\xa2\x05\x2c\x30\x44\xe8\xbd\x58\x5c\x7f\x5e\x57\xd2\x97\x40\x39\xcf\x46\x8d\xc2\xd1\x87\xc2\x28\x5e\x8b\xaa\xf6\x0d\x62\xcc\x7a\x26\xbc\xcf\xa5\xd0\x39\xaf\xe6\x32\x42\x5d\xc8\x35\x94\xb9\x7f\x71\xcf\x67\x3d\xdf\x70\x6d\x05\xcc\xfb\x6a\xf2\xb0\x69\xff\xe6\xe7\x2b\x27\xe1\x32\x5e\x92\xcf\xc2\x38\xfa\xd9\x36\xca\x3a\xdc\x5a\x28\xe9\x63\xb8\x88\xe2\x44\xbc\x0c\x52\x61\x92\xb5\x50\xf2\x6e\xb3\xca\xc2\x55\x18\xe5\xa9\x77\x2a\x75\x13\x85\xd3\x78\x96\xa7\x6d\x54\x5a\x9a\x85\xd3\x4f\x0f\x26\xe9\xc1\xc2\xa0\xd0\x7a\x4e\x22\xf6\x8f\x48\xc4\x66\x09\xd9\xb0\x6e\xab\xa0\xcc\xa7\xaa\x4a\x52\x0d\xef\xc3\xf4\xa5\x32\x29\xf8\xb0\x4e\x44\x30\x93\xe4\x51\x23\xf0\x57\x3e\x34\x29\x6c\xa0\xc0\xf6\xa5\xf8\x42\x49\xc5\xf8\x14\x16\xdc\x85\x07\xde\x6e\x2f\x25\x2a\x5c\xc2\x0c\x3c\x7c\xb1\xb8\x5c\x69\xd3\x9b\x85\x36\x1e\x93\x8f\x6b\xfe\x30\x7a\x40\x9b\xf1\x62\x02\x0b\x48\x31\x53\x4f\x77\xf2\xd4\x46\x68\x8d\x6d\x1b\xdd\xf1\x02\x3f\xa3\x3b\xbe\x1e\x07\x13\x3c\x6a\xb7\xef\x58\x82\xd6\x18\xc3\x9d\x6d\xcf\xaf\x5c\xbc\xe5\xba\x4b\x6b\x08\xd1\xba\x30\x03\xda\xc2\xfc\x9c\xe0\x73\x72\x96\x87\x5f\xdd\x5e\xf1\xa1\xeb\xfa\x64\x38\xa4\xbd\xae\xdf\x75\x87\x43\x72\x44\x31\xe3\xb3\x6c\xbc\x9d\xf0\xf5\x7e\xdb\xe9\xec\x17\x9d\x4e\x6e\xb6\xb0\xad\x19\xe3\x98\x8d\x66\x90\x6a\xcd\x26\xa5\xdf\x40\x47\xe7\xae\x03\x3d\x43\x17\x0e\x3c\x3d\xfd\xbe\x21\xa8\x24\x33\x92\xe6\xeb\xb2\x51\xeb\xe1\x49\x5c\xf2\xb8\x87\x29\x7f\xdc\x5f\xa0\xaa\xbb\xcc\xc1\xc1\x9f\xc3\x52\x37\x30\xcb\x45\x92\x7c\x39\x3a\x86\x48\x62\xcf\x36\x12\xde\x3e\xf0\x08\xc9\x42\xd9\x88\x32\x82\xe1\x96\xbb\x67\xcd\x0e\xa6\x8b\xa7\x7c\x3d\xc3\x4c\x93\xcf\x6d\x4b\x47\xa6\x42\x0b\x63\x3e\x32\xe3\x29\xca\x23\x5c\xe2\x8b\xd9\xd5\xed\xc5\xad\x31\x70\xdb\xf2\x6c\xf4\x80\x02\xb4\xe6\x62\x7c\x3b\xc1\x12\x8e\xac\xc7\x64\x82\xd9\x03\x52\x09\x98\x73\xbe\xda\xed\xb6\x9c\xf3\xdc\x04\xad\xb5\x2d\x0d\x10\xef\xf8\x22\x37\x17\xb8\x68\xa3\x35\xbf\x33\x52\x3a\xec\x48\xf8\x74\x61\x9a\x08\xd1\x1d\x3c\xc0\x5a\x9b\xda\x43\x76\xa2\x52\xec\x7c\xf3\xfe\xfa\xc5\x9f\xf8\x0a\x12\xe7\xfd\xf5\xc7\x1f\xdf\xbf\xe1\xd3\xda\xea\x7a\x8c\xf4\x0c\x1f\x96\xaf\xf1\x80\xf9\x03\x18\x78\x6c\xa0\x28\x8a\x23\xeb\x84\x9a\xcf\x2f\xed\x63\x64\x45\x41\x16\x6e\xc5\x79\x9e\xed\x3c\x8b\xcf\x0d\x33\x09\x05\xc9\x58\x18\xf4\x2b\x83\xeb\x3e\x23\xca\x05\xcb\x77\xbf\x44\xf4\x74\x9f\x20\x7a\x8c\xfd\xbd\x4f\xbe\x54\x49\xef\x89\x4a\x7a\x8c\xf6\x64\x25\x5f\x12\x62\xd1\xa7\x8c\xf8\x8d\x34\x49\x79\x96\x19\x6d\x60\x2e\x59\xf2\x4f\x52\x9e\xbe\x5b\xba\x7f\x56\x45\x36\xb6\x9d\x14\xe9\xc6\xa7\x73\x0f\x8f\x8a\x9e\x95\xf5\x7d\x91\x4e\x7c\xc2\x20\x5c\xbb\xb1\xe8\x0e\xf6\x86\xac\x37\x2c\x18\x59\xff\xa4\x7d\x59\x6e\x5e\x47\x28\x55\x6a\x90\x27\xc4\x6e\x4a\x8f\x02\x01\xcf\xaa\x64\x43\x8e\x34\x02\xad\x8c\x6e\xe0\x2d\x02\xdb\x46\x31\xaf\xc4\x1c\xc5\x2a\x6c\x67\xf1\x6a\xdb\x09\x8a\xb1\x6d\x47\xb6\x2d\x9b\x8a\x73\xff\x1c\x4a\x19\xa1\xb4\x00\x47\xfe\x57\x79\x99\x57\xc1\x54\x61\xa5\x94\xe4\x6e\xd0\xd9\x29\x67\xcc\x91\x40\xb8\xa0\x17\xf0\xa1\x5b\xe6\x48\xa0\x6c\xec\x4e\x70\x85\xa2\x90\xaf\x87\x6e\x9a\x26\x1b\x64\x0a\x1a\xd4\xf2\xea\xb4\x03\x1f\xe9\x5a\x01\xc8\xc6\xb4\xb1\x94\xfe\xa0\x8b\x76\x4f\x17\x85\x6c\xec\x9d\x2e\xaf\xbf\x1e\xba\x8a\x26\xa5\xfb\x9e\xff\x94\x7d\x59\x65\x4f\x18\x9b\x2c\xeb\x57\x4b\x31\xb4\x47\x62\x08\x54\x78\x88\x35\x10\x3f\xd6\x87\xdc\x1e\x2c\x41\x02\x8f\x8a\x98\xe7\x16\x66\x85\xad\x57\xd5\x65\xc5\x3f\x61\x98\x25\xd0\xa0\x66\xf4\x16\x16\xe1\x0d\x20\x3c\xf2\x5b\x79\xd2\x72\xab\x0c\xfa\xad\xe8\x63\x55\x56\x47\xa1\x0e\xc7\x91\x52\xf7\xe2\xaa\xc5\xd8\x60\xc0\x06\xaa\x63\x27\x3d\xf5\xeb\xb3\x55\x8b\xed\x5a\x37\x96\x34\x33\xa2\xbe\x98\x09\xa9\x0e\x7d\x70\x24\x28\xaa\x1f\x58\x25\xd7\x9c\xaf\xe2\x38\x79\x72\x80\xca\x37\xcc\xb6\x0b\x31\xad\x7c\x91\x9f\x95\x22\x7b\x0f\x8f\xf9\xe1\x1a\x7c\x11\xc8\x3e\x21\xe4\xcf\x7d\xad\x06\x27\x05\x31\x39\x90\xe9\x0e\xaa\x36\xbc\x5f\xc1\x95\x97\x1a\x6c\x65\x37\x59\x52\x50\x19\x17\xe3\x50\x51\x50\x19\xb3\x34\x95\x6e\x71\xa5\x39\xc6\x47\x26\x7e\x05\x08\x19\x9c\xb6\xe4\x3e\xe9\x85\xa5\xf9\x91\x0a\xff\x1f\x8e\x32\x94\xa0\x48\xe1\xfd\x48\x9d\xf4\x0c\x45\xb9\x04\x20\xc8\xb5\xcd\xc2\xd1\xd9\x8d\x1b\x5b\xd1\xf1\x58\x41\xbb\xc2\xdd\x0d\x82\x7d\x95\x0a\x1e\x1c\x59\x41\x37\xab\x49\x06\xa5\x9a\x44\xcf\x27\x55\xac\xfd\xe3\xfe\x4c\x7b\x66\xc5\xd0\x70\x34\x1a\x38\x45\xa5\x6e\x6c\xf4\xdf\x82\x0c\x02\xfc\x58\xd1\x51\xf0\x04\xc5\xf0\x28\x49\x15\x16\x21\x02\x81\x64\x55\x43\x99\xaf\x63\xb5\x2a\xe1\x45\x2a\xe8\x32\x57\x3c\xd5\x5c\xbf\xb4\xb9\x8c\x1c\xea\xd7\xe9\x51\x06\xc3\x13\x2a\x71\x9f\x6a\x8a\x73\x60\x28\xce\x41\xd7\x10\x9c\x72\x2a\x56\x4a\x64\xd9\x33\x26\x32\x47\x13\xc1\xdb\x68\x3c\x71\x3e\x89\x87\x54\xc5\x91\xfe\x9c\x59\x61\x64\x12\x10\xc6\xb0\x6c\x62\xaa\xe5\x54\x9d\xda\x22\xb3\x52\x87\x9e\xa2\x19\x64\xb0\xd6\x52\x98\x07\xb8\x85\x1b\xb8\x3f\x0a\x40\x32\xb7\x6d\x21\x39\x87\x17\x39\x25\xf7\x62\x2c\x26\x67\x75\x17\x08\x6d\xfd\xc4\xd4\xa3\x31\x5e\x3a\x8a\xad\x51\xb5\x00\xcf\x8d\xd5\xc4\x53\x41\x35\x0e\xf2\xc1\x35\xaf\x2d\x1f\x7c\xe6\xa5\x99\xd5\x1d\x7c\x90\xdc\xcb\x8b\x5a\xb0\x80\xb7\xfc\xc5\x78\x3a\xd9\xed\x5e\x8c\xad\xbf\xfb\xbb\x62\x4a\x27\xbb\xdd\x9d\x6d\xbf\x18\xdf\x4d\xe0\x13\x7f\xbb\xdb\xdd\xa3\x3b\x0c\x2f\xf9\xdd\xe8\xf3\xe8\x1e\x15\x46\x58\x98\x7d\xca\x4d\xdc\x3e\xf2\x02\xf0\x65\xb6\xfd\x22\xd7\x58\xef\x76\x6f\x25\x11\xfe\xd1\xb6\xd1\x0d\x5f\xa1\x8f\xa5\x0e\x4a\x60\x2c\xa9\x06\xe3\x7b\x5c\x21\x1d\x6e\x14\xf5\x6c\xdb\x68\x83\x6e\xe0\x5a\xd9\x76\x25\xbb\x5d\x03\x15\x72\xa3\xfa\x1d\xa3\x1b\x98\xc2\x12\x63\xf8\x6c\xdb\x6f\x6d\x3b\x1f\xae\xac\xdb\x89\x82\x3b\x89\x06\x3e\xf0\xb6\x0b\x9f\x1a\xf6\xc0\xdb\x8a\x8e\x6b\xaf\x6e\x0d\x69\x2f\x76\x3b\xb9\x9a\xed\x0f\x72\xf8\xba\x81\x17\x30\x85\x4f\x18\x94\x65\xf9\x27\x08\xc6\xd7\x13\xbe\x84\x3b\x49\xd6\x3f\xf0\x47\xdd\x1c\xfb\x3c\xfa\xc4\xee\x51\xde\x38\x06\xb9\xd6\x6c\xab\x13\xd5\xba\x63\x30\x53\xc2\x5e\xee\x61\xa1\xa4\xe9\xb7\xda\xa9\x46\xfd\xbc\xd8\xed\x42\xf4\x02\x6e\xe1\x41\x32\x1c\xda\x8d\x26\x42\x91\xf3\x4e\xab\x89\xe7\xbb\xdd\x07\x0c\x19\x3c\x14\x92\xae\x07\x2d\x42\xef\x31\xe2\xf6\x8e\x34\xc3\xf9\x01\xd5\xba\x61\x7d\x4c\x07\x5d\x36\xe8\x6a\x7c\x07\x83\x21\x1b\x48\x5a\x77\x70\xd2\xc5\xff\xe8\x88\x45\xbc\x4d\x94\x34\x55\xdb\xa6\x8e\xfd\xc9\x38\x99\x20\x7c\x16\x1a\xb0\x58\x9d\xdd\x48\x45\x3a\x35\xa1\xbb\x92\xf8\x0e\x85\x50\xb3\x49\x93\xf0\x93\xee\x73\x08\x1b\xe3\xc7\xfd\x53\xce\xd0\x99\x6d\xb7\xa3\xba\x45\x51\x58\xed\x4c\x20\x3b\x03\x29\x0f\x74\x87\x52\xb5\x7f\x8e\x17\x5b\x0b\x8b\x42\xed\xbd\x2a\xf3\x36\xec\x87\x74\x0f\x02\x05\xd5\x8e\xe5\x28\xa2\x2e\xfb\x1d\x7c\xa5\xdf\x69\xd1\xb6\xf1\x0c\x07\x2d\xb0\x6a\x8b\xdc\x45\x7c\xf0\x44\xc4\x80\xc7\x3c\xcf\x13\x1c\x5d\x9b\xe8\x3c\xc3\x13\xc4\x85\x22\x2a\xc4\xe7\xf5\x1d\xa9\x40\xba\x76\xb2\xdb\x25\x88\xb8\xf8\x8a\x52\x97\xf6\x9c\x6e\xbf\xe7\x0f\xbb\x03\xb7\xef\x93\x81\xf9\x72\xd9\xf4\xe5\x9c\x8a\x73\xe2\xb7\x79\x82\xf4\x13\x6e\xb2\x9d\x71\x39\x47\x82\x77\x24\x31\xc8\xc4\xd5\x39\x11\xe7\x7d\xdb\x16\x97\xf2\x77\x24\x3a\xe2\x99\x78\x4e\x59\xde\x2b\x24\xf0\x39\xd9\xb3\xc4\x8c\xe1\xa4\xf6\x6a\xe8\x15\x04\xd2\x3a\xbe\x87\x90\x47\x88\xc2\x79\x4f\xe9\x7e\xd4\x23\xf5\x24\xea\x90\x8f\x84\xfa\xf8\x19\xa2\xe7\xb1\xf6\x5e\xa5\x70\x2e\x59\xde\xca\xe0\x35\x99\x95\xc4\x9b\x46\x5f\x17\x88\x60\xc3\x0b\x0d\xb3\x90\x78\x27\xa9\x88\x97\x37\x97\xe9\x68\xf5\x0c\x6d\x9e\xa7\xcf\xe3\x0e\x79\x1e\x9e\x93\xe7\x21\x7e\x96\x3e\x8b\x19\x8a\x24\x05\x83\x48\x27\x96\x29\x1b\x7c\x8e\xb2\xf3\x0d\xc6\x57\xc1\x6e\x17\xb5\x79\x24\x4b\x91\xe7\x2e\x66\xab\x67\x91\x5c\xd6\xa1\xc7\x86\x92\x5b\x1f\x1e\x11\x58\x07\x3d\x5d\xc5\x0b\xb2\x6e\xa2\x33\xf5\x24\xab\x09\x1e\x98\x09\x1e\x8c\xc4\x79\x65\x82\x57\xf1\x02\x91\x8e\xc8\xf9\x81\xe1\x13\xd1\x53\x54\xfe\x34\x5c\x44\x4d\x2d\x95\x4b\xba\xdb\x89\x36\x17\x72\x61\x2f\x5d\xe5\xbb\x96\x57\x7d\xd2\xd5\x8b\x74\x7d\x49\x16\x8a\x2c\xb0\x0e\x5c\x92\x8c\x94\x4f\x7b\x49\x04\xdc\x85\x9c\x13\xa9\x5d\xcd\x53\xe9\x4f\x25\x7c\x0b\x6c\x78\x5b\x29\x3f\x1a\xbc\x5f\x52\x54\xa0\x14\xb1\x95\x0c\xb9\xae\x2b\x8e\x52\xf4\xb8\xc7\x12\xca\xaf\x6a\xd8\x3b\x46\x02\x12\x30\x07\xf4\x31\x64\xd6\x5b\xab\xd3\xea\x74\x02\xb8\x57\x41\x99\xf0\x1e\xa6\xd5\x28\x60\x7f\xba\xfe\x0b\x4b\xe0\xcd\xf5\xf5\xb7\xac\x4d\xc0\xf8\x62\xb0\x63\xa0\x15\x95\x56\x90\x56\xfa\x70\x77\x1b\xaf\xaa\x71\x3e\x04\x43\x87\x9e\x34\x2d\x31\xb2\x3e\x58\xcc\x7a\x67\xe1\x8e\x0e\xb5\x1e\x2a\x0b\x33\x5d\x5d\x5a\xa9\xee\x95\xa5\x63\x31\xe4\xef\xd7\xd6\x99\xa4\x3c\x0b\x56\x70\x9c\x4c\x9c\x50\x19\x8d\xff\x24\x82\x4f\x0d\x7d\x3b\x51\x71\xdb\xad\xd5\xdb\x26\xc7\xd5\xde\xef\x21\x8e\x5e\x25\x42\xfc\x2a\x9a\x24\xe1\x1b\xdb\x9e\x2a\xeb\x27\xdb\x4e\x15\x79\x6f\x9a\xb2\x6d\x59\x13\x08\xe3\xa0\xe9\x33\xd2\x2d\x64\xdf\x55\xdb\x4a\x23\x81\x19\x9e\x14\x6d\xe4\xea\x5f\xe2\xf5\x95\x68\x03\x42\x9e\x38\x3f\x6c\x32\xe5\x8c\xff\xf6\x36\x15\xc9\x56\x48\xe0\xe6\xfc\x24\x6e\xff\x14\x66\x87\x5f\xd4\x3d\x5b\xeb\x24\x9e\x8a\x34\x85\x80\x27\x79\x30\x43\x48\xb9\x65\x92\x2d\xae\x99\x1a\x14\x3f\x25\x64\xd7\x0e\x2e\x47\x8e\x6f\x10\x29\x95\x6e\x2a\x39\x4f\x1e\x3b\xb3\xf8\x2e\x08\xf5\x25\x76\xe2\x73\x98\x21\x7c\x21\x2e\x24\x72\x14\xce\x3c\x02\xc1\x85\x42\x54\x0a\x8d\x45\xa8\xa2\x70\xd4\xf8\x51\x8c\x36\x08\xb3\xc2\x02\x3e\xdc\xef\x8b\x67\x25\x70\x12\x51\x26\x12\xa4\x2d\x0b\x53\x5c\x73\xc2\x8b\x55\xc5\x1f\xc3\xe9\x27\xb4\xc2\xfb\xc2\x25\xb7\x1d\xca\x99\x89\x82\x6d\xb8\x90\x38\x5d\x56\x52\xbc\x38\x69\x16\x44\xb3\x60\x15\x47\x42\xd2\x35\x81\x6d\x07\x4e\x22\xd2\x78\xb5\x15\xb9\x1b\x4f\x91\x60\x78\x36\x7c\x56\x6b\x74\xea\x64\x4b\x11\xc9\x06\xb5\x60\xb4\xf6\x31\xca\x65\x18\x79\x7f\x8c\x81\x74\xdb\x85\x25\xcf\x45\x67\x26\x2a\xda\x47\xf1\x39\x7b\x13\xcf\x04\xb2\x2c\x7c\x26\x29\xc5\x10\xad\xb0\x13\xeb\x25\x44\x4b\x78\x9c\x2e\x83\x24\x98\x66\x22\xf9\x36\xc8\x02\xd6\x76\xf7\x07\x3e\x88\x4b\x67\x16\x64\x01\x9f\xf3\xf6\xfc\x98\x70\x2e\x44\x49\x8f\xf3\x88\x25\xa0\xb8\x9f\xfc\xfa\x1f\xe5\xc2\xa0\xa9\x87\x08\x83\xd8\xed\x90\xe0\x11\x6c\x24\x03\x91\xf1\xc8\x78\x8a\xf7\x19\xf1\xfa\x86\x0b\xcd\x45\x7c\xc3\xaf\x76\xcb\x2c\x6f\x13\xac\xe2\x9c\x33\x65\xf2\xbc\xd6\x9b\x91\xeb\x50\x60\x75\x33\xd3\x70\x5e\x72\xca\x59\x35\x66\xc5\xb1\x59\xcd\x37\xc1\xac\x65\xf6\x75\xab\x22\xd5\x93\x5c\x39\x17\x10\xf1\x64\x5f\x5c\x10\xa6\x96\x53\x3b\xe5\x9b\x14\x09\x39\x55\x5c\xbb\x92\x22\x73\xe6\x4d\x62\x16\xd9\xc9\xc8\x48\x38\x72\x43\xba\xe1\xd7\x69\x7c\x9a\x6d\x51\x8c\x97\xb5\xe1\x01\x7d\xe5\x24\x61\x20\x79\x90\x4a\xd4\x54\x25\x60\xd2\xdd\xee\x08\xfe\x6b\xed\xd7\xe3\x1e\x32\xa5\x08\xe5\x1f\x14\xd4\x45\xb2\x29\x2b\xb8\x9d\xce\xc4\x7c\xb1\x0c\x7f\xfe\xb4\xba\x8b\xe2\xf5\x2f\x49\x9a\x95\xca\x31\x49\x0b\xfa\x10\x95\xb2\xab\xdc\x1c\xb7\x66\x23\x9b\x8d\xc5\x84\x8b\x3d\x06\xbf\xcd\x25\x2e\x01\x81\xc7\xc9\x64\xb7\x33\x9d\x54\xac\xa6\x4a\xcf\x30\x36\xfe\xa5\x16\x6e\xf3\x68\x5f\x27\x93\xca\xf0\x10\xca\x88\x26\x3d\x8e\x06\xb1\xe1\x04\x56\x3c\x72\xe6\x30\xe5\xa1\x33\xbf\x48\xaf\x36\x17\x85\xf5\xcd\x1c\x96\x3c\x28\x1d\x6a\xc7\x9b\x4e\x67\x82\x61\xc6\x57\xa3\x04\x2d\x71\xee\x77\xbb\x42\x4b\x8c\x99\x4c\x81\x35\xcf\x6f\x70\x83\x3b\xee\x5e\xac\xaf\xee\x2e\xf0\x54\x1f\xc7\x25\xcc\xf9\x6c\x7c\xa7\x6d\x74\x50\x36\x9e\x4f\xf8\x72\x3c\x9f\x54\xac\x74\x58\x7a\xda\x4e\xa7\x70\xfb\x36\x80\xdc\xb8\x7d\x0f\x4f\x4a\xf8\x0a\xb3\x36\xd7\x35\xd6\x0b\xae\x59\x75\xda\xc3\xc8\x7a\x7d\xad\x2f\x7d\xb5\xe4\x0e\xa8\xac\xeb\x1e\x8e\xe0\x6f\x06\x2a\x02\xc3\x50\x72\x28\xf3\x24\xb8\x13\x8a\xb8\x08\xcd\x38\xb5\x27\xa3\x93\x66\x0f\x2b\xe1\xcc\xc2\x74\xbd\x0a\x1e\xb8\x15\xc5\x91\xb0\x40\x20\xdf\xc3\x4e\xb0\x5e\x8b\x68\xf6\x72\x19\xae\x66\xfa\xba\xc7\x34\x99\x72\xeb\xe7\x60\x1b\xe8\xe8\xbb\xcc\x02\x94\x71\xa5\x4b\xcf\x44\x94\xfd\xa4\x03\xbd\xe5\x70\x0a\x3b\xf1\x5a\x44\x08\x43\xe6\xdc\x27\x61\x26\x90\x75\xa9\x8b\x5d\x15\x90\xec\x95\xd9\xba\x97\x7f\x7d\x6e\x3e\x59\x32\xfb\x74\x15\xa7\x02\xc9\x45\xcf\x9c\x57\x17\xd1\xf9\xf9\x05\x36\xe6\xc6\x69\xc9\x01\x8f\xc3\x71\x34\x29\x2c\x2e\x52\x09\xe2\x0f\x85\xb5\x06\x52\x36\x85\x72\x09\xeb\x46\xd4\x5c\x8c\x50\x50\x13\xf9\x08\x39\xf7\xea\x26\xa8\xea\xa5\x61\x5c\x66\x87\x70\x1c\x4f\xb8\xc0\x2c\xe4\x29\xaa\x79\xbb\x87\x2c\x42\xa1\x11\x2d\x13\xd7\x65\xc4\x75\x81\xd0\x1e\x23\xb4\x97\xab\xa2\xb4\x72\xc2\x65\x7d\x17\x7c\x8f\xf9\x0a\x1e\x7c\xd1\xd6\xee\x29\x1b\x5d\x63\x71\x68\xc2\xbf\xe9\x46\x94\x1e\xc4\xef\x32\xbf\xab\xe2\x0b\x9f\x94\xa8\xe6\x56\xc7\x5e\x2e\x9d\x74\xfd\x7a\xa4\xba\xde\xa0\x39\xec\x99\xe4\xcf\xeb\x55\x2a\xd7\x95\xe2\xe2\x17\x15\x20\x27\x53\xc7\xb6\x3c\xae\xae\x3e\xa2\xda\x78\x39\xe6\x81\x3a\x94\x90\x8d\xe3\x49\xdd\x92\x31\x3f\x40\xd5\xc1\xe4\x34\x0f\x71\x1b\xe4\xb5\x45\x58\x37\xb7\xf0\x20\xee\xe7\x80\xd2\x35\xda\xf1\xae\xa7\xa5\x65\xbe\x51\xcf\xfa\x4a\x58\xf6\x85\xe0\xd2\x26\xf8\x9b\x9c\x85\xd5\x31\x81\x28\x34\x68\xca\x78\x60\x3c\x1b\x37\xd5\x18\x6f\x26\x46\x60\xe9\xd8\x2d\x09\x10\x95\x56\x44\xfa\x42\xed\xc8\x99\x97\xf1\x04\x41\x8c\xb3\x89\xd9\x3b\x06\x74\xe4\x02\xc5\x22\xe0\x8a\x5e\x6c\xb3\xc0\x8a\x26\x2c\x97\xf9\xa4\x10\xba\x0c\x4d\xe3\x7a\x92\x8d\x08\xab\x0e\xde\x10\xf3\xa3\x08\x7b\xf5\xd0\x8d\xb6\xdd\x38\x4d\x6f\x82\x3b\x91\x8e\x4e\x7f\x42\xba\x34\x66\xe3\xc9\xd9\x17\xb0\x64\x6c\xdb\xd6\xd8\xc4\x35\xd3\x50\x64\x62\xf1\xdc\x68\x5b\xd4\x11\x43\x65\x8a\x15\x62\x3d\x88\x5a\xd9\x8a\xf3\xcb\x1a\xf7\x7b\x24\x30\x8b\x74\x80\x08\x3d\xab\x1e\x23\xae\x97\xcf\xa6\x9a\xb3\x86\x10\x67\xe5\x6e\xea\x17\xf0\x37\x47\x18\x96\xde\xcc\x16\x58\x05\x48\xb0\xb0\xda\x25\xa7\xe7\xa1\x91\x57\x94\xad\x85\xa6\x57\x7d\x46\xdc\xbe\x86\x09\xaa\x4f\x0d\x8a\xd0\x93\x2d\x68\xec\x9d\x9a\x30\xca\xee\x69\x8e\x80\x1c\x04\x6c\x39\x42\x26\xf1\x91\x8c\xf1\x18\x9e\x2e\x44\x56\xb1\xc6\x6d\x1c\x98\xd0\x41\x5d\x12\x35\xbe\x91\x18\x87\x93\xc6\x20\x8d\x55\x45\xaa\x96\x09\x97\x91\x64\xab\xdf\x46\xb5\xb7\xb2\x6f\xac\x56\x44\x77\x6f\x14\xab\x38\x0c\x5a\x85\xaa\x81\x6e\x8e\x7b\xd5\x51\x51\x33\x74\x52\x92\x57\xce\x90\x41\xbb\x5d\x82\x51\x9b\x34\xa3\xde\x27\x03\x16\x05\x3a\x20\x98\x84\x33\x2e\xac\xf8\x58\xc7\x0c\x08\x5a\x61\xd4\x4a\x71\xd0\xd6\x9a\x90\x14\x02\xc9\xef\x15\x16\xbf\x2a\xbe\x4c\xae\xa5\x55\x60\x52\x66\xe1\x99\xa6\x5c\x6c\x1b\xfd\x6b\xa8\x22\x82\xed\x76\x45\x99\x02\x6a\x1e\x0c\x59\xc3\x8a\x2e\x61\x5d\x52\x19\xf8\x49\x35\xa7\xda\xe7\x91\xde\xe7\xc7\x4b\x2e\xe9\xb5\xc6\x85\x96\x2b\x1c\x9d\xd8\xc1\x0d\xf6\x33\x72\x07\x3f\xee\x1b\x35\xa7\xf9\xe6\x3d\xa9\x5a\xec\xd3\xba\x35\x73\xff\x89\xc8\x30\x5a\x09\x85\x22\x13\xdc\x5f\x19\x20\xab\x7b\xb8\xf5\xfb\x58\x4c\x74\x5c\x97\x40\x92\xa9\x19\x8a\xe5\x56\x4d\x9c\x0f\x9d\xc4\x79\xf5\xac\x66\x7b\x18\x6b\x17\xb0\x3c\xe6\x06\x04\x6a\xac\xda\x12\xb7\xe2\x4b\xa4\xe2\xee\x9f\x44\xb0\x25\x0d\x9f\xef\x2a\x89\xa3\x9c\xf9\xd7\x86\x05\x2b\xe9\xe0\x58\x09\xee\x14\x4a\x4d\x90\x0a\x35\x57\x10\xc2\x2b\xee\xc2\x94\x8f\x27\x17\x9b\xab\xd5\x05\x36\x50\x33\x80\xb8\x34\x2c\x9f\xea\x2d\x23\x46\xe3\x18\x82\x71\x3c\x99\xb0\xa0\x8a\x75\xa7\xfb\x2a\xda\x2d\xe9\xd6\x02\x4c\x1e\xdf\x2c\x50\x0e\xd0\x3b\x60\x52\x72\x3f\x6e\xdf\xc5\xce\x7b\x31\x5f\x89\x69\xd5\xb2\x22\xb6\xed\xd8\x89\xef\xa3\x3f\x1d\x6d\x2b\x63\x4d\xef\xcc\x51\xa8\xf4\x83\xda\xa4\xbe\x08\x28\x90\x15\xb1\x72\xd4\xb5\x98\x59\x0d\xa0\x1b\xca\x5b\x13\x0c\x39\xb7\x49\x8e\x2f\x31\xa8\x5a\xa8\xac\x83\x24\x15\xaf\x56\x71\x90\x19\x51\x49\x17\xab\xab\x07\x2a\x9d\x25\xcf\x13\x24\xbf\xf4\x70\xc7\x3a\x77\x25\x97\x72\x4e\x9e\xbb\x0d\xf1\xb1\x23\x63\x46\x29\x0f\xbd\x87\x55\xc8\xf3\x32\x18\x82\x24\x0d\x43\xdb\xb6\xce\x25\xf8\x2b\xef\x42\x1f\x9d\xbb\x2c\xd4\x42\x5d\xe2\x75\x19\xf1\xba\x40\xbc\x1e\x23\x5e\xaf\x32\x82\x27\x6d\x6c\xd4\x08\x5e\x47\x07\xfd\x37\xa1\xe7\x7a\x72\x06\x9f\xff\xc7\xf1\x79\x67\x32\x72\xc7\x9f\xff\x69\xf2\xbc\x32\xb0\x41\x9b\xf3\x04\x85\x1d\xcb\x1d\x58\x78\xb7\xa3\xb4\x78\xff\x4c\xfa\x16\x1e\x35\xd0\xcb\x07\x63\x2c\xd5\xd3\x21\x64\x57\x57\x57\xee\x6e\x87\x62\x27\x13\x69\x86\x42\x3c\x92\x64\x8b\x8b\xf1\x97\x46\x77\x24\x0e\xfd\x52\x9c\xea\x47\xc1\xda\x04\xb6\x4c\x61\xf7\x03\xc4\xff\xa8\xed\x5f\x55\x58\x59\x03\x51\x8e\x6f\x77\x38\xe4\xb1\x72\x31\xeb\xf0\xa4\xd7\x5d\x79\xc9\x40\xa4\x02\x5f\xd5\x4c\x80\x94\x99\x44\xce\x05\x9e\x69\xd0\x13\x4a\xf2\x36\x9f\x1f\xe4\x42\x5c\x08\x88\xe4\xe9\x8d\x73\xf1\x45\xa1\xfc\xce\x85\x7a\x7d\x36\xec\xab\x4e\xf7\xbf\xc0\x0d\x78\x4f\x38\xf1\xe4\xe1\x9f\xc9\xe9\x1b\x22\x08\x79\x42\xe3\x5f\xc2\x9b\x50\xa2\xab\x0c\x2b\x3c\x0e\xd9\x38\x9c\x40\x74\x40\xa5\x6b\x5d\x9a\x6a\xec\x24\x2f\x9b\x0b\x22\x73\x43\xfc\x5c\x9c\xad\xe5\xdd\x69\x32\xb5\x34\x79\xde\x1f\x4a\xc0\x86\x2c\xab\x13\xe0\x5c\xbe\x90\x13\xa8\x16\x3e\xd3\xf7\x83\x84\x51\xba\x16\xd3\xec\x43\xbc\x49\xa6\xa2\x09\x6e\x06\x39\xc1\xb8\x07\x74\x32\x06\x5d\xee\xe6\xd2\x74\x37\x65\x70\xb6\xb2\x6d\x14\xa2\x00\xac\x48\xb1\xcb\xbb\x5d\x54\xbc\x48\xca\x5d\x91\xe8\x6d\xce\x03\xdb\x46\x79\xd6\xd8\xe4\x8a\xd5\xc7\x91\x65\x75\xe4\x2f\x4b\xb5\x70\xc3\x1c\x9a\x0c\x63\x59\x5a\xf9\xf4\x2b\x6f\xcd\x80\x6d\xd4\x43\xfe\x96\x5b\x1e\x30\x64\x58\x5d\x99\x0e\x79\x2a\xc6\x7b\x5c\xba\xa9\x54\xa2\xb8\x14\x93\x74\x6c\xe4\xd0\x14\x19\x6a\x19\xa6\x3a\x74\xc3\x38\x9e\xec\x76\x41\x4d\xad\x5b\x91\x39\x1b\x2c\x37\x64\xfd\x61\xee\x6f\xa2\x79\x0d\x63\x81\x4d\x8e\x2f\xec\x68\x14\x61\x75\x15\xf6\x3b\x34\x25\xd7\xfe\x0c\x4f\x21\xf0\x30\x77\x7a\x68\x76\x07\xcf\x2d\xf2\x0a\x0e\x01\x4c\xc4\x26\xc3\xc7\x14\x06\xb0\x31\x2e\xaf\xbe\xae\x45\xfe\x93\x1d\x6a\xc9\x16\x72\x97\x3a\x3d\x65\x62\xd6\x4a\x63\x99\x12\x46\x8b\x56\x9c\x2d\x45\xa2\xef\xbb\x0c\x22\x43\x62\xb6\xe2\x44\x49\x0c\x4a\x5f\xc0\x58\x45\xee\x36\x76\x38\x6d\x5e\x0d\x4c\xdc\xd8\xea\x7f\x50\xad\xaa\x00\x5d\xca\x91\x2f\x8c\xa6\xf1\xdd\x3a\xc8\xc2\xdb\x95\x68\x25\x62\x2a\xc2\xad\x48\x2a\xae\x86\xf5\x70\xf3\x5d\x9f\x75\x7d\x75\x3f\xcf\x57\x44\x5b\x81\x48\x53\x4b\x8a\x17\x6e\x5c\x04\x08\xf8\xa1\xfd\x7f\xee\x9e\x02\x29\x8f\x61\xc3\x91\xf2\xbc\x80\x88\x3f\xbf\x7d\xf6\x7c\x01\x71\x2e\xa0\xb6\x02\xc9\x32\x18\x33\x05\xfd\xe6\xb6\x95\x4f\x49\x90\x66\xaf\xa3\x99\xf8\xbc\xdb\x29\xc1\x6b\x99\x80\x8b\x30\xac\x6d\xce\x9f\x23\x3c\x1a\x3d\x57\x9d\x40\x96\x85\xc7\x64\x72\x81\x36\xbb\xdd\x0a\xab\x60\x8a\xc7\xfa\x46\x39\x98\x14\xa6\xca\x65\xb6\x20\x7b\x95\xfe\x40\xce\xb2\x1e\x1c\xb2\xfe\xa3\xd5\x99\x3a\xa9\x82\x0f\x1d\xeb\x0f\x68\xd4\xfe\xeb\x5f\x53\x6c\x81\xd9\x26\x53\x79\x04\x37\x2a\x54\xe1\xb4\xda\xad\x28\x8f\xd7\x37\x05\xa1\x32\x44\xb6\x8d\x2a\x39\xf8\xd4\xb8\x05\x8c\x22\x27\x94\x09\x9d\x48\x02\x60\x13\x6b\x39\xc3\xb0\xd2\x26\x9c\x45\x88\x27\xdb\x36\x27\x4b\xe6\x83\xe4\x30\x6a\x50\xca\xc9\x45\x7a\x79\x28\xcf\x3c\xa7\x17\x69\xa7\x83\x0b\x69\x52\x09\xf3\xd3\x89\x6d\xa3\x68\x9c\x4e\xf2\x80\x5a\x7b\xe5\xe4\x7f\xe0\x2b\xd6\xef\xb3\xbe\x42\x20\xc7\xf7\xb3\x1c\x11\xf5\x61\x7a\x28\x13\x2b\xb8\x37\xce\xb3\x91\x32\x0b\xdc\xed\xc8\x73\xc1\x39\x79\x9e\x31\xd1\xe6\xc2\xb6\xb3\x36\xcf\x72\xcc\x7a\xfa\xce\x95\xdc\xe0\x4d\x8b\x94\x8e\x30\xa9\xe2\x8b\xda\x65\x0c\xc9\x36\xe7\xd9\x71\x1c\xef\x8e\xc5\x5a\x53\xe5\xf6\x9a\x8a\xac\x15\xa8\x9b\x71\xf5\xf6\x6c\x5b\x35\x39\xdf\x63\x2a\x32\x63\x41\xe9\xa4\x07\xcc\x29\xb2\x6e\x6e\x54\xb9\x9b\x1b\x2b\x8c\x1e\xf7\x25\x55\x63\xe2\x5c\x4b\xba\x02\x19\x9b\xfe\x03\x1f\x40\x49\xcf\xaa\x5b\xa4\x0e\x79\x62\xa8\x54\xaa\x55\x6b\x14\x63\x94\xc1\x78\x82\x21\xe1\x3a\x10\x63\xc1\x96\x2a\xcb\x8e\x8a\x95\x44\xc2\xdb\xee\x91\xa6\xa5\x3a\xfd\xa1\x96\x03\x49\xae\xb7\x68\x86\x67\x1a\x37\x28\xbd\x20\x7a\xdc\x43\x9b\xe4\xae\x48\x18\xa6\x4b\x31\xfd\xc4\xb4\xd5\x85\x4b\x18\x71\x49\xcd\xe4\x3d\x37\xff\x23\xc7\x57\x82\x3c\x19\x86\x65\x68\x22\x8e\xf6\x72\x7d\xc3\xd7\x47\x1e\x55\x51\x54\xce\x42\xdb\xce\x6c\xbb\x9d\x8d\xe3\x89\x3c\x18\x73\x15\xe0\xf8\xb1\x7e\x37\x80\x0b\xcd\xb1\xc7\x94\xc1\xd9\xbe\x66\xcc\x68\xe4\x5d\x0a\x13\x15\x92\xc0\x53\xb7\x92\x54\x43\x0a\xfa\xa4\x6a\x76\x59\x0b\x11\x79\x8a\x06\x8a\xf1\xa3\x50\x11\x50\x05\x8f\x47\x82\x55\x6d\xc0\x42\x75\x8d\x91\x24\x88\x8e\x86\x92\x5f\x69\x50\xeb\xb6\x46\x9a\x65\x87\x4f\xc7\xa1\x57\xee\x06\xc6\xfe\x29\x32\xf4\xd1\x17\x22\x2f\x2a\xa6\x16\xc9\x9f\x8a\xf1\xa7\x76\x40\x00\x83\xc7\x55\xa3\x27\x05\x1e\x3d\xc3\x55\xfb\x8a\x33\x8d\xc6\xd6\xcd\xcd\x34\x4e\xc4\xf9\xcf\xe9\x4d\xba\x0c\x12\x31\xbb\xb9\xb1\xb4\x9b\x6e\xe3\x17\xfe\xb8\xc7\x17\x27\xc8\xac\x72\x43\xeb\x5e\xca\x9f\x12\xf6\x67\xa3\x8c\x3d\xaa\x1b\xda\xad\xfc\xaa\x6a\x4b\x1e\x20\xcd\xa4\x16\x17\x88\x25\x8e\x79\x82\xbb\x78\x26\x98\xb2\x88\x1c\x59\xeb\x4d\x22\x2c\x66\x69\x80\x6c\xc1\x34\x5e\x3f\x24\xe1\x62\x99\x31\xeb\xdf\xfe\xef\x16\x75\xc9\xb0\xf5\xad\x88\xc2\xb4\xf5\x6e\x93\x2e\x3f\x05\x89\xd8\xb6\xd0\xaf\xab\x38\x4c\xe2\xe9\x27\x27\xd9\x60\x4b\xd1\x39\x9a\xbe\x31\x0e\xea\xc6\xc6\x8b\x1c\x5f\x99\x72\xc8\x2d\x78\xde\xd7\x07\xe2\x2d\x64\x11\x10\x28\x9a\xa0\xc9\x73\xa0\x84\xf5\xbb\x9d\x76\xff\x47\xb1\xe2\xee\x95\x81\xaf\x3c\xf7\x71\x6d\x3f\xe9\xf0\xa8\xb9\xc9\x2c\x39\xbe\x46\xe5\x54\x40\x8e\x2f\xc4\xd1\x6d\xb7\x95\x2b\x42\xd5\xf6\x6c\x64\xcc\xe9\x95\xbe\xa3\xa6\x65\x22\x85\xa9\xbd\x0a\x42\xa9\x77\x7c\x21\x0a\x39\xbc\x75\xa5\xb2\xc7\x3d\xa3\x6c\xe8\xfd\x3b\xa2\xa2\x97\xbe\x17\x90\x1a\x52\x05\x49\x3e\x0c\xab\x20\xe9\xa1\x24\x29\x72\xfc\x59\xda\x1e\xb9\xbb\xdd\xe6\x8a\xaf\x46\x62\x64\x59\x06\x52\x32\x14\xf3\x54\xf1\xde\x2f\xe3\x99\x78\x91\xa1\x0d\xc6\x97\xbd\x1e\x1d\xf6\x77\xbb\xf8\xaa\xd7\xf7\xc8\x70\xb7\xdb\x74\x88\xf6\x35\x42\xc1\x41\xe6\x0e\x91\xd9\xfb\x1e\x75\x77\xbb\xe0\xaa\xe7\x7b\x5d\x6f\x24\x46\x69\xce\xcc\x6f\x30\x8b\x99\x7c\xd7\x92\xe7\x0d\x6c\x3a\x14\xb3\xe0\x5c\x95\xe8\xa0\xf8\x5c\xb5\x74\x79\x49\x5c\xdc\xe9\xf7\x7a\x5e\xdf\xe8\xc8\x87\x8c\x78\x43\xed\xe2\xa8\xee\x49\x3c\x6d\xf9\x4e\x9f\x9e\x3a\xed\xa5\xa2\x18\xd5\xec\xf8\x5a\x0c\xe3\x7c\xf0\x1f\x54\xe8\xdf\xd6\x2c\x16\xa9\xc4\xac\xc1\x74\x2a\xd6\x59\x2b\x11\x0b\xf1\xb9\x72\x3f\x43\x31\xc9\x06\xa4\x68\x07\xcc\x01\x65\x03\x7d\x97\xe3\x49\x49\x50\x2e\xa4\xeb\x1b\x39\x50\x4f\x05\x71\x7d\x6e\x3d\x5f\x54\xf5\x94\xc5\x25\x13\xda\x22\xd1\xb4\xa6\x25\x3e\x29\xb7\x2e\xad\x4e\x6e\xf9\x6e\x29\x6a\x5a\x92\x83\x1d\x6e\xb5\xac\x4e\xd2\xf9\x23\xb7\xfe\xd8\xc9\xfb\x87\x0b\x3f\xea\x18\x2c\xfb\x97\x4d\x9c\x5d\x58\xb8\xf3\x47\xeb\x8f\x18\xd2\x8e\x75\x65\x75\x82\x8e\x75\xf9\xdc\xea\x64\xf2\xe5\x94\xfd\x72\xce\x6d\x3c\xee\xcf\x42\x2d\x0f\x0c\xb4\x3c\xf0\x9d\x92\x07\x46\xc7\xbe\xc8\xda\x5d\x59\x36\x53\x68\x7f\x25\x44\x73\xb2\xf8\xfb\xf8\x5e\x24\x2f\x83\x54\x20\xbc\xdb\x65\x86\x89\x95\x19\x73\xb2\xd0\xdb\x63\xc8\xfd\x40\x8c\xec\xdf\x78\xb7\xd6\xa5\x89\xde\x13\x7a\x9c\x5c\x46\x9d\x43\xa2\x27\x36\x44\x79\xa1\x40\x7d\x96\x6b\x82\xc3\x02\x02\xc5\x23\xab\x65\x31\x93\x31\xc6\x30\xd5\x22\xac\x70\x8e\xa6\x97\x7c\xb3\xdb\x59\x16\xe7\xab\x5c\xd4\x91\x9e\x69\xb3\x94\xe9\xf9\x06\x96\xf9\x15\x36\x2b\x50\xd6\x71\x53\x11\xae\xd0\xfc\x79\x11\xc9\xbd\x98\xa7\x65\x3e\x0f\x73\xdb\x46\x4b\xbe\x34\x87\xc5\x85\x39\xc6\x10\x8c\x96\x9d\x94\xa5\x9d\xa5\x3e\x18\x1e\x23\x9e\x57\xdc\xbe\x50\x1e\x90\xaf\xa3\x62\xbe\x02\xd2\xe8\xc5\x2c\x01\x8a\x0a\xde\x03\x21\xb7\x2c\x88\xb5\x25\x63\x38\x47\xb1\x84\x24\xb1\x24\x81\xdd\x86\xb8\x3e\x2f\xe3\x4d\x94\x19\x2a\xf5\x56\xb4\x22\xb1\x50\xde\x82\x96\x11\xe5\xc7\x57\xee\x05\x8a\xaf\xae\xae\x38\xc1\xda\xf5\x37\xc3\x98\xd8\xb1\x6d\xa3\x50\x3e\x9f\xd5\x2c\x66\x8f\x40\xc1\x49\xda\xa6\x5f\x82\x82\x5a\x68\x03\x25\xf1\x0b\xb8\x35\xb6\x3a\x71\xc7\x9a\x58\x90\xf2\x0a\x57\x14\xc8\xe3\xf0\xcc\x92\xab\x6f\x52\x75\xca\x1f\xac\xba\x9d\x9f\x96\x01\xe9\xb3\xa9\x2c\x0a\xc2\x63\xd3\xc1\x76\x3b\x96\x67\x00\xef\x76\xd6\xef\xbf\xfd\xef\xff\xf6\x9f\xad\x36\x37\x0f\x2a\x59\x99\x19\x29\xe9\x7a\x3a\xca\xd0\x54\x05\x16\x9c\x9c\x49\x96\x2a\x18\x47\x13\xbe\xa9\x1e\xb0\xb4\x3c\x10\x81\xb2\x20\x5c\x29\x11\x66\x33\x2d\x21\x78\x15\x36\x01\x91\x14\x26\x12\xbc\xe0\x58\x51\x0a\x96\x85\x31\xd0\xa3\x0f\x1b\xfd\xa1\x16\x40\x4a\x5d\xe6\x6a\x24\x92\xcd\xc7\xf0\x88\x5a\xab\x04\xac\xf9\x6b\xf6\xd7\xe8\xaf\xdb\xbf\xce\xff\x9a\xb4\xfe\xed\xbf\xfc\xd7\xff\xf3\xb7\xff\xfa\x5f\xfe\x8f\xdf\x7f\xfb\xed\xf7\xdf\xfe\xd3\xef\xbf\xfd\xf7\xbf\xff\xf6\x3f\xfc\xfe\xdb\xff\xf8\xfb\x6f\xff\xf9\xf7\xdf\xfe\xa7\xdf\x7f\xfb\x9f\x7f\xff\xed\x7f\xf9\xfd\xb7\xff\xf5\xf7\xdf\xfe\xb7\xdf\x7f\xfb\x7f\x7e\xff\x4f\xff\xd7\xff\xfb\xdb\x6f\x7f\xdd\x50\x97\x0e\xd4\xff\xe1\x5f\x37\x73\x31\x9f\x5b\x86\xad\x3a\xbe\x1b\xa8\x60\xe4\x6b\xbe\xde\x7e\xdf\x28\xb3\x3d\xad\xcc\xee\x0d\x4d\x6c\x54\xc9\x12\xf0\x55\x61\xbb\x37\xe7\x2b\xc9\xa3\xbc\xbe\xbb\x13\xb3\x30\xc8\x04\x2c\xf9\x4a\x07\x6c\x2b\x93\x66\x7c\xe5\xfc\x20\xd2\x34\x58\x88\x97\xcb\x20\x8a\xc4\x0a\xd6\x7c\xe5\x7c\x1b\xa6\x6b\xc9\xb7\xc0\x1d\x77\x61\x2b\x37\xc3\xe2\xd8\x87\xbe\xa3\xd8\xf1\x70\x8e\xb6\x07\xb7\xe8\xc9\x15\xca\x03\x9e\xca\xe5\x37\x32\x2d\xf9\x0c\x19\x92\xb0\xef\xa1\x76\x1e\x73\xc7\x60\x65\x92\x86\xf7\x67\x73\xdb\x5e\xaa\x3b\x2d\x9b\x4d\x82\xc6\x13\x88\x38\xb9\x38\x0a\xae\x1c\x5d\xe0\x3c\x86\x4e\xc1\x3d\x47\x9d\x4e\xa9\xe9\xd8\x8e\x3b\x9d\xbb\x9a\x45\x7b\xd0\x24\x60\x12\x23\x51\x5e\x37\x28\x30\x64\x78\x0f\x09\xba\xc3\x70\xb7\xaf\xfa\xc8\x08\xfc\x58\x19\xd8\x1e\x8e\x8c\x23\xa7\x78\x94\xd4\xb2\x4f\x4b\x93\xc3\x18\x2d\x40\x00\xc1\x78\xcf\xd6\xb6\xbd\x76\xa2\xf8\xfe\x20\xb3\x4a\xab\xe6\x9b\x8d\x50\xc8\x51\xa4\x44\x1e\x33\xec\xc8\xbd\x48\x21\x52\xbf\xc4\x89\xa3\x3b\xbd\x8a\xfc\x01\x12\x1e\xa3\xd0\x59\xc7\x69\x66\x56\x16\x42\x59\x03\x5b\x39\xc1\x6c\x76\xbd\x15\x51\xf6\x7d\x98\x66\x22\x12\x49\xa3\xdf\x6a\xa5\xa0\x6d\xb7\x57\x4e\x78\x27\x9b\xf8\xa0\x8c\x22\xd2\x11\xaa\xf7\x72\x55\x6d\x07\x89\x8e\x65\x81\x84\x34\x7b\x38\x6e\x0c\x59\xa6\x8b\x16\x3c\x48\x36\x16\xb3\x84\x5b\x71\x94\x88\x60\xf6\x90\x66\x41\x26\xa6\x4b\x09\x60\xad\x30\x6a\x6d\x90\xa5\x8d\x30\xac\xba\xf6\x3f\xad\x19\x25\x55\x72\x61\xe7\xb8\xa2\xea\x3a\xa7\x4e\x22\xee\xe2\xad\xd0\x05\x75\xe8\x87\xc2\x1d\x7d\x5f\x0f\x58\x91\xea\x68\x75\xf1\x26\x2b\x66\x1f\x94\xd4\xe5\x40\xf0\x30\x07\x1d\x33\x7d\x59\xf8\x2f\xe6\x71\x93\x95\x95\x8f\x91\x9c\x7a\xcc\x37\x77\x1a\xa8\x23\x7e\x5a\x30\xaf\xd1\x96\xbe\x0f\x2a\xf8\x0c\x61\x71\x35\xd4\x17\xc8\x77\xa4\xed\x95\xf0\xa5\x3b\x8a\x90\xe8\xa8\xeb\x69\xc2\x42\x64\x68\x70\x8b\x6a\xfb\xa4\x9c\xbe\x40\x99\x4f\x5c\xd8\x54\xd8\x56\x56\xb5\x1e\xee\x59\x25\x0a\x56\xa8\x34\x94\x2a\xb0\x71\x9b\xf3\xb0\x01\x69\xfe\x94\xc4\xd1\xa2\xa5\x4f\x6b\x85\xe8\xac\x21\xc1\xf2\x56\x21\x72\x7c\xb3\x57\xc5\x5d\x43\x52\x1a\x5f\xef\x0f\xda\x0a\xd3\x37\xc1\x1b\xe3\x72\xe1\x32\x24\xae\xdc\x51\xc4\x12\x8c\x0a\xc3\x7f\x72\x7c\xcb\x55\x21\x17\xf1\xbf\x92\x75\x49\x0e\x09\xe7\xdc\xdc\x8f\x3c\x71\x71\x54\x75\xdd\x4f\x2c\x76\x25\x1c\xa2\x5c\x64\x35\xdb\x47\x71\x30\x98\x7b\xb0\xde\x4f\xdc\xca\xf4\xa5\x81\x18\xaf\xe4\xa4\x36\x1a\x55\xe7\x97\x2e\x05\xf4\x9e\x08\x0c\xa7\xee\x99\x2c\xa5\x52\xc7\x57\xdf\xd4\xe8\xb9\x70\x8e\x94\x08\xaa\xc2\x07\x0d\xab\x22\x8b\x92\xf8\xe9\xd3\xdc\xca\xab\x9f\x47\xe1\xe8\x19\xcc\x68\x7c\x22\xbd\xfc\xaa\x08\xd2\xd7\x71\x82\x7d\x6a\xe2\x04\x13\x5f\xc7\x09\x56\xcb\xb0\xce\xa9\xec\x3b\x95\x32\xc0\xb0\xcd\xaf\x33\x5b\xe4\x56\x64\x0f\x46\xae\x74\x6b\x14\x1c\x37\x46\xea\x79\x9f\x9b\xd7\x5c\x9b\xb0\x20\x9f\x8d\xc3\xea\x87\xdc\x27\xf3\x45\x69\x82\xf5\x36\x8f\x10\xf2\xc9\x48\x7b\xe0\x65\x1e\x97\xea\xa3\x09\x76\xfe\x5e\xdb\xa0\xc0\x3b\x25\x20\xf2\x31\xfc\xa0\xee\x43\xef\x62\xf8\xd6\x78\x7f\xbe\x31\xf1\x8e\x7f\xce\xef\xc0\x78\x2d\x8b\xb8\x18\xbe\x97\x23\x1e\x62\x78\x65\x64\x79\xbf\x72\x2d\xd0\x84\x6f\xf8\x2b\x67\x0e\x7f\xcf\x7f\x75\xe6\xf0\x23\x8f\x9c\xf2\x6c\xc2\x4f\x3c\x72\x0a\x9e\x11\x7e\xe1\x91\xf3\x63\x18\x65\x03\x25\xc3\x84\x3f\x1f\x3a\x97\xc3\x77\x3c\xd5\x4e\xe3\xdf\x6c\xe6\x73\x91\xc0\x5f\x78\xea\x7c\x1b\x64\xc1\x9f\x43\x71\x0f\x7f\xe2\x1f\x91\x8b\xe1\x0f\xfc\x23\xa2\x18\xfe\x91\x7f\x44\x1e\x86\x7f\xe2\x1f\x51\x17\xc3\x3f\xf0\x8f\xa8\x87\xe1\x9f\xf9\x47\xd4\xc7\x20\x04\x7f\x8f\xda\x2e\x86\x4c\x3d\x10\x0c\x89\xe0\x3f\xe8\xe0\x1f\x29\x44\xf2\xf9\x93\x78\x48\x21\x94\x4f\xc6\x33\x10\x62\xc1\xff\x5c\x8a\xe7\xdf\xce\x21\x90\x09\x89\xba\xcf\x09\xd2\xf2\xf9\x7d\xb8\x58\x66\xb0\x91\x09\x3f\xc7\x61\x04\x2b\xf9\x94\xc6\x49\x06\x53\xf5\xa4\x6e\xf9\x99\xcb\xc7\xc2\x18\x6e\xa9\xdf\x6a\x01\x05\x67\x82\xbf\xac\xf9\xf8\xad\x55\x42\xfd\xc2\x99\x3b\xc1\x3f\x21\x4b\x4e\xcd\xec\xa6\x66\x4e\x0e\x5b\xf5\x65\x26\xe6\x07\xe9\x0b\xc1\x03\xe7\xe5\xdb\x37\x1f\x3e\xbe\x87\x07\xf9\xfc\xf1\x2f\xef\xae\xbf\x85\x5b\xf9\xf8\xe7\xd7\xd7\x3f\xc1\x8d\xe0\x1f\x11\x81\x46\x62\xf8\x85\x40\xef\x90\x00\x31\xde\x8a\x89\xa2\x4f\x30\xdc\x8b\x26\x6a\xbd\x45\x38\x57\x04\xc3\x2f\xca\x9d\x54\xae\x29\xe9\xab\x85\x43\x63\x32\xc1\xce\xad\x5a\x3e\x3c\x76\x27\x7b\x0c\xd7\x82\xb7\xdb\xbf\xd8\x76\xbb\xfd\x4b\x45\x23\x94\x8a\xcc\xb6\x6b\x55\xeb\xfa\x88\x8e\x1e\xae\x44\x79\xf0\x59\x34\x5d\xa7\xc2\x67\x86\x97\x4a\x24\x2f\x95\xfc\x77\xb9\xac\xff\xc7\x1c\x15\xc4\xf3\x79\x2a\xb2\x0a\x2a\x48\xf6\xf0\x41\x1c\xe2\x9d\x1b\xe5\x25\xf3\x20\xf4\xb5\x93\x39\x28\x34\x1e\xe6\x3f\x55\xa3\xda\x04\x2d\xb5\x04\xfa\x32\xaf\xb6\x24\x43\x5e\x1c\x76\x4c\x5d\x98\xa4\x6b\xbc\x33\x35\xe2\xbc\x26\xeb\x75\xd6\x58\x53\xd5\x43\xa0\xd2\xd9\xfc\xda\xf2\x3d\xbc\x3d\x6c\xc5\xe4\xf8\x74\xb8\x4e\xf0\xe9\x30\x67\x71\x65\x08\x77\x21\xe2\xb9\x09\x18\x84\xfc\x85\x50\x26\x56\x17\xd1\x55\x72\x81\xc3\x71\x32\xe1\xd9\x38\xe9\x74\x26\x25\xd6\x84\x97\xe2\x28\x02\xc8\x37\xea\xe1\xc4\xbd\x1e\x3a\x66\xfc\x6c\x9c\x4c\x94\xcb\xd6\x47\x71\x42\xd5\x16\x82\x16\xb9\xdd\x6b\xdf\xbe\x23\xdb\xfb\x29\x5f\x9d\xb8\xc9\x64\x5e\xca\x79\xa7\xb0\xe4\x6f\x51\xaa\x2f\x6b\x51\xba\x9e\xa5\x6d\xb7\xaf\xd1\xd2\x04\x1a\x0a\xf8\x52\x13\x60\xa9\x84\xea\xe3\x09\x64\xdc\xbd\x68\xab\x88\x29\xb5\xc0\x40\x59\xa7\x83\x23\x4d\xd6\xc7\xe6\x22\xe3\xb3\x94\x47\xea\x4a\xb6\xb9\x6d\xaf\xae\xa8\x6d\xa3\x29\xdf\xa0\x29\x54\x2f\x7f\x04\xaa\x1c\x52\x5c\x48\xf8\x1a\x15\x97\xd1\xeb\x79\x55\x8e\xe0\x09\xbe\x48\xae\x32\x55\x7d\x38\xce\x26\x7c\x3e\x9a\xa2\x74\x9c\x4d\x20\xc3\x4c\xfe\x56\xe6\xf9\x7d\x8d\x96\x2c\x03\x7d\xbb\x90\x1d\x4f\x4e\x52\xb4\x90\xe1\x8b\xec\x4a\x5c\x60\x25\xa5\x2f\xfb\x26\x2a\x8b\x98\xec\xe1\x9d\x39\x75\xb5\x23\xb6\x14\xa5\x0f\xf8\x2f\xea\x5a\x0f\x0c\x3f\x88\x06\x5f\xdc\x65\x1e\xd3\xe4\x9d\x18\x4d\x4d\xa1\x0f\xc2\x88\x34\x58\xfe\x54\xc3\xc3\xdf\x0a\xfe\x58\xde\x74\xca\x1a\x37\xee\xf7\xf5\x9a\x40\xd9\x21\x7c\xd5\x9d\xa6\x78\x0f\x62\x2b\x92\x87\x26\xcf\xb7\x7f\xaa\x56\xf8\x75\x77\xe3\xe0\x3d\xcc\xc3\xd5\xaa\x61\x33\xbf\x36\x03\x6f\x1c\xe3\x3c\x5c\x65\x22\x69\xea\xc3\x5b\xb3\x38\x7f\xf8\x1b\xfa\xa2\x2a\x8e\x66\x4d\xd5\xfe\xc3\xdf\x38\xb4\x68\xa6\xb0\x58\x53\x95\xff\xfc\xb7\x55\xd9\x70\x41\xd1\x9f\xfe\xa6\x9a\x42\x8d\x5e\x9b\xba\x96\x89\xbf\xb1\xc6\xe9\x6a\x33\x13\x4d\xd7\x9c\xb4\xc4\xdf\x56\xa5\xc4\xec\x0d\x9b\x63\x23\x9e\xda\x1d\x15\xe2\xa1\xa1\x6c\xfc\x64\xd9\xbb\x60\xdd\xd4\xfd\x9b\xbf\xad\xfb\x9a\x52\x69\xe8\x44\xf0\x64\x27\x2a\x04\x4e\x43\xd9\xf4\x0b\x65\xb7\x22\x49\x45\xe3\x55\x5f\x90\xf1\xbc\x4c\x09\xce\x4a\x16\x0b\x65\xcf\x95\xfc\xd1\xbd\x88\x2e\x93\x0b\xac\x43\x98\x8f\xa3\x09\xe8\xdf\x4e\x67\xa2\x53\xce\xcf\x33\x93\x96\x55\xef\xd6\x5d\x86\xe9\x1e\xd2\xf8\xae\xd1\x2b\xf6\x1f\xff\xa6\xf9\x93\xe4\x5c\x53\x6d\x2b\x71\x08\xc0\x64\xe6\xcd\xad\x42\xe7\x8d\x57\xe8\x14\x39\xa3\x22\x34\x2a\x84\x7c\xab\x70\x70\x05\xe1\xa3\x77\x28\x81\x44\xe1\x73\x8c\x12\x43\x3f\x41\xe2\xdc\x3e\x64\xe2\xad\xa2\x66\x3a\xe1\xb3\xc4\xf9\xe6\x2f\x1f\xaf\x3f\xdc\xbc\xbb\x7e\x7f\x73\xfd\xfd\xf5\x0f\xd7\x6f\x3e\xc2\xba\x72\xc3\x73\x36\x8a\xd8\x16\x65\x10\x61\x7c\x1e\x2a\x0e\xeb\xcd\x09\x02\x22\x87\x56\x87\xa0\x1d\x94\x27\xc9\x1e\x7e\xae\xa3\xf0\xfc\xb3\x61\xcb\x3f\x0b\x54\x9d\x36\x90\xf4\xb5\xbe\xa5\xca\x0c\x30\xd2\x28\x3e\xe4\x6b\x14\x15\x28\x32\xd6\x11\x05\xc3\x4e\x76\x95\x1c\x12\x6c\x25\xef\xae\xc5\xdc\x97\xe1\x05\xd6\x0b\xdd\x89\x27\x3c\x1a\xc7\x9d\xce\x64\x0f\xaf\x05\x7f\xcc\xe3\x78\x1c\x6f\xcf\xf0\x10\x4d\xed\x75\x1c\x90\xe3\x9c\xd1\x71\x4e\x13\x48\xe4\x38\x6f\x72\x94\x77\x0f\xdf\x9f\x98\x55\x4d\xfe\x89\xf1\x83\x98\xd8\x76\xee\x78\x5e\x98\x8d\x65\xb6\xad\x2f\x5a\xb0\x6d\x23\x72\xee\x64\x98\xf3\xc2\x94\x6f\x0f\xaf\x4e\xd4\xfb\xbd\x24\xd9\x32\xbe\xd0\x0e\x41\x78\x34\x45\x54\x7b\xf5\xb0\xbf\xd7\x02\x19\xf8\xf5\x98\x62\x33\x62\x75\x74\x50\xd8\xb6\x6f\x50\x22\xc9\x5e\x94\x80\x65\x2e\x0e\xc0\xbb\x9d\x7a\x55\xb7\x73\x98\xe7\x54\x3f\x2b\x37\xbc\xc2\x26\xc1\x7c\xbb\x4f\xc2\x4c\x07\x01\xb5\xed\x76\xe2\xe4\xaf\xe6\xab\x28\x4c\xf0\xcd\xf7\x32\x61\xf4\x8d\xe9\x1d\x43\xca\x40\x31\x31\xf1\x18\x05\xde\x9f\x2d\xc4\x6e\x87\x7e\x75\xe6\xfc\x95\x80\x57\xce\x9c\xff\x2a\x30\xc4\x28\x76\x3e\x74\x62\xe7\xd5\xb3\xf6\x42\x94\x46\xf3\x8f\xa7\x3c\xab\xd8\x2b\x01\x35\x8f\xb2\x07\xf6\xab\x50\x81\x95\xaa\x50\xc9\xac\xa8\xe2\x30\x6c\x1b\xcd\x05\x5f\x36\x91\x40\x1b\x51\x33\x64\x54\x7b\xff\x1b\xc1\x97\xe8\x51\xd2\x3a\xf8\x6c\x89\xbe\x11\xf0\x5a\x60\x98\xcb\x87\x99\x7c\x36\x1c\x26\x06\xf5\xed\x51\xb1\x82\xec\x8d\x50\xf7\x6b\xfd\x2c\x60\xda\x74\x6b\x15\x7e\xdc\x17\xc1\xe5\xd9\xfc\x30\xee\x3c\xfb\x41\xf6\xff\xa5\x90\xf5\x59\x1a\x2a\x58\x60\xdd\x5a\x65\x5a\x01\x20\x2c\xb0\xe2\x7a\xfa\xf7\xb9\x5b\xd1\xaa\x4c\x2f\x5c\x8d\x84\x85\xe1\x1b\x99\xb4\x16\x4f\xd1\xf5\x72\x33\xef\x4f\x07\xb5\x4a\x73\xcb\xd7\x29\x17\x1d\x84\x36\xbc\xdd\xde\xe0\x91\xf5\x72\x15\xdc\xad\xc5\xcc\x62\x96\x85\x3b\x26\x36\x11\x2c\xb9\xda\x61\x1d\x01\x33\xae\xf6\x57\x47\xc0\x96\x47\xe3\xe9\x04\x16\x7c\xbb\xdb\x3d\xee\xe1\x81\x6f\x6d\xfb\x03\xda\x62\xb8\xe7\xed\xed\x6e\xd7\x0e\x9c\x17\xdf\xfc\x59\xdf\x8c\xf4\x56\x7e\xdb\x56\x84\x05\x9f\xaa\x5d\x31\x3c\x4a\x72\x6a\x2c\xf5\xac\xc6\x1b\xcb\xb9\x99\x95\x26\x91\xdb\xf1\x72\x82\x92\x67\x59\x27\x72\x62\xb8\x17\x78\x9f\xd3\xf3\x87\xf7\xa3\x35\xd6\x09\x51\x69\x64\x7a\x33\x3b\xdb\xd8\x36\x8a\x38\x32\x02\x38\x15\xf0\x04\x45\x4a\x98\xea\xb2\xe8\x8a\xf6\x7a\x23\xda\xeb\x31\xda\xeb\xd9\x11\x86\xd0\xd9\x8e\x67\xba\xed\xd0\x89\x21\xaa\xb6\xae\x30\x4c\x79\x82\x94\xc7\xfd\xfe\xec\x7e\x84\xb6\x3c\x45\xf5\x0e\x40\x88\x1f\x57\x48\xc0\x16\xa6\x60\xdd\xcc\xcc\x85\x20\xb1\xbe\x21\x1b\x96\xdc\x85\x99\x06\xc1\x12\x02\x18\x8e\x35\xa9\x5a\x96\x7d\xb7\xdb\x59\x15\xe9\x8b\xc5\x39\xda\xf0\x5b\x99\x79\xb7\xb3\x3e\x28\x1b\x9d\xfa\xe7\x4d\xe1\x75\xa8\xb9\xe8\x64\xf4\x49\xa0\xad\x3c\xdf\x1f\xcd\xe1\x91\x2f\x67\x31\x4f\x60\x26\xb1\x46\x04\xe6\x92\xee\x05\xd7\xa8\x4d\xef\xd0\xb3\xaa\x10\x58\x9b\x1c\x2c\x8e\x99\xfa\x12\x47\x84\x73\x84\x02\xbe\x38\x9f\xe1\x4b\xf7\x64\xae\xe2\xde\x72\x14\xf0\x35\x0a\xf1\xb3\x0c\x77\x66\x57\x8b\xd3\xb5\xa6\x3c\x78\x9e\xe9\x52\x29\xbf\x43\x89\x72\x16\x11\xf7\xad\xef\x50\xc0\xd3\x67\xe6\x16\xce\x39\x12\x6a\x6e\xe1\xf1\x96\xc5\x10\xb3\x19\xac\x58\x00\x82\xa5\xb0\x65\x32\xf3\x5f\x50\x8c\xf7\xf8\x62\x79\x99\x5e\xe0\x4f\x48\xc0\xb2\xd3\x91\x3c\xd6\x5b\x5e\xd9\xb8\xfc\x33\xfa\x46\x81\x8d\xb7\x50\xbd\xa3\xc2\x82\x2d\xc6\xac\x1e\xa9\x5c\x79\x0b\x35\x88\x49\xb6\xe8\x5c\x7f\x79\x73\x74\x93\xd4\x16\x74\x06\x7d\x99\xab\x7e\x26\x4e\x2f\x7f\x94\xdb\xa9\xed\xe2\xdd\xee\xc4\x06\x52\x5b\xe6\xac\xe2\x6d\xba\x85\x29\x06\xb9\x63\x46\x5f\xda\x2b\xf1\x93\x7b\x25\x1e\x15\x2c\x7c\x38\x92\x7d\x59\xa0\x04\xcc\x9e\x80\x30\x37\x3e\x6c\x73\x1e\x1d\x7e\xc5\xcc\x24\x60\xf6\xd4\x36\x33\xb9\xe4\xca\xc9\x29\xff\x13\x7a\x68\x73\x7e\x6c\xdd\x3e\x7a\x81\x16\x85\xe7\xe5\x0b\xf4\x80\x31\x93\x29\xb5\x4b\x18\x55\x2b\xdb\xdd\x6e\x8e\xb6\x20\x60\x31\x16\x13\x59\x63\x75\x09\xdf\x42\xb2\xdb\xa1\xb7\x35\xb7\x8d\x2d\xd6\x9b\xfb\x25\x7f\x3b\x9e\x89\x09\x7c\xe4\xed\xf6\x4b\xdb\x46\x65\x0c\xb8\x97\x2a\x26\x5a\x6e\x96\xa5\xdf\x30\xbc\xe7\x05\xe6\x38\x93\x2d\xde\x09\xe5\xf7\x2b\xf7\xc7\x83\x90\xb3\x2f\x9f\x6e\xcb\xc4\xad\xba\x9c\x0a\x6d\x46\x66\x71\xf1\x78\x2d\x26\x9c\x4f\xd9\x5a\xf5\xfb\x2d\xde\xed\xbe\x41\x6f\x9f\x80\xeb\x53\x09\xd0\xaf\xc7\xd3\x09\xdf\x2a\x14\xfb\x5d\x27\x76\x7e\x52\x68\x16\x6d\xdb\x7c\xa1\x6e\xc4\x52\xa8\x17\xa6\xf0\x78\x44\x72\xb2\x6c\x5f\xc5\xcc\xb5\xbd\xb9\x70\xe2\x79\xbe\x22\xca\xd1\x6d\x0a\x8f\xf3\x24\xbe\x63\x1f\x05\xc4\x73\xf6\x5e\x22\x33\xeb\xa8\x46\x4b\xf6\x5a\xce\xf6\xdb\xa6\x8f\x72\x7f\xc8\xe6\xde\xc1\x54\xe2\x5d\xf8\x19\x4d\x4d\x82\x6a\xff\x5a\xc8\x46\x34\x86\xdd\x57\x3f\xb4\x3f\xc2\x54\xe1\xe7\x64\xb7\x7b\x5b\xc8\x62\x39\x9f\x0b\xb5\x72\x45\xc2\x5c\x54\x4b\x35\x1c\x35\x82\x0b\xe7\x5f\x35\xa0\x1c\xad\xd7\x5a\x43\x0d\x52\xd2\x31\x01\x3a\x39\x90\xfb\x22\xdc\xe6\xba\x5a\xf5\x15\x1f\x7d\x56\x77\x47\xd5\x2a\x7b\x7b\x90\x47\x4f\xb0\x2e\xbe\xc7\xaa\x4b\x4d\x44\xc3\xb7\x72\x81\x3f\x8e\x5e\xb2\xf7\x72\x06\x3e\xea\xf9\x9d\x09\x78\x9f\x07\x89\x69\x8c\xb0\x53\x35\xfa\x2d\x3d\xe1\xf2\x40\x77\xc6\x71\xfc\xf0\x92\x57\xea\x33\x42\x7d\xa5\x86\x24\x9e\xaf\x54\x82\xc4\x1b\xc0\x81\xee\xad\xf0\x9b\xcd\x1d\xce\x49\xb7\xc7\x48\xb7\x07\xa4\xdb\x67\xa4\x5b\x18\x98\x16\x01\xf4\xf2\x78\xdb\xa4\xdf\x65\xa4\x9f\x5f\xb9\xe6\x0d\x99\x37\x84\xae\xcb\x0a\x77\x54\x7d\x5d\xa4\xf2\x62\xa8\x5f\x31\x5b\xb9\x9c\xed\xc8\xe1\x24\x8f\xdc\x5d\xb9\xa2\xad\x12\x9e\xef\xe0\x1a\x5a\xd9\xd3\x23\x05\xd5\x91\x99\x50\x55\x89\x94\x1b\x39\x0f\x86\x07\x4a\x24\x9f\x9a\xc0\x9a\xc4\xdc\x35\xd9\xef\x6a\x25\x92\xe7\x6b\x1d\x92\x52\x19\x2d\x73\x95\xd1\x2c\x57\x19\xad\x4b\x35\xcf\x5d\x61\x8d\xbc\x35\xaa\x99\x45\x1e\xa9\xf3\x81\x57\x7c\xc8\xe1\x96\x1b\x2c\xa7\x64\x2e\x6d\x0b\x6e\x78\x54\xd3\xaf\xdc\xf3\xa8\xd4\xaf\x5c\xf3\xc8\x91\xe4\x0a\x7c\xae\xeb\x70\x3e\xf0\xc8\x79\x1d\xcd\xc3\x28\xcc\x1e\xe0\x05\xbf\x81\xb7\xfc\xda\x09\x6e\x53\xf8\xc4\xaf\x55\x48\xb8\x97\xfc\x5a\x33\xf2\xf0\x91\x5f\x3b\xab\x78\x01\xef\xf9\xb5\xf3\xfd\x1b\x0a\xef\x78\x38\xb2\x6e\x6e\x2d\x56\xd0\xae\x3f\xa8\x94\x95\x4c\xa9\x50\xa8\xdf\xaa\xd4\xd8\xa4\x1a\x7a\xb6\x0c\xd7\xf3\x06\x1d\x5e\x0d\x0d\x81\x3a\x45\x5a\xe5\x90\xc8\x99\x1d\x3c\x4b\xce\xb3\x73\x02\x1b\x8e\xc8\xe5\x65\x8a\xcf\x09\xac\xf8\xe6\xea\x8a\xc0\x94\x53\x4f\x71\xc7\x9f\x54\xb4\xba\x2e\x3e\x57\x0f\xbe\x8f\x99\x0b\x73\xee\xca\xc9\xbe\x74\x77\x3b\x57\x5f\xaf\x41\x9e\x8b\x4b\x77\x44\x98\xab\x10\x3e\x12\xfc\x2d\x12\x18\xb7\xb9\xd8\xed\x04\xe7\xfc\xc3\x08\x85\x5c\x45\x62\x23\xcc\x85\x88\x6f\x30\x43\x11\x7f\x89\x3e\x22\x81\x9f\xbf\xc7\x20\x9e\xa1\x98\xab\x06\x24\xbd\x47\x24\x1d\x78\x7e\x0e\xf1\x33\x4e\x31\x20\xd1\xe1\x51\x67\x75\xc5\xc9\x68\xfa\x3c\x66\xd3\x67\x32\x1f\x39\x5f\x61\xfc\x2c\xbe\xe2\x54\xe6\xed\x74\x20\x7e\x2e\xf3\xaa\x7c\x1b\xd9\x98\x69\xc5\x14\x44\x21\x47\xe2\x59\x7c\x4e\xb0\x2a\x9d\xc9\x9c\x7c\x85\x99\xec\x95\x4a\x59\x55\x3f\x71\x17\xe3\x8b\xec\x8a\x0f\x2e\x82\xf1\xbc\xd3\x99\x70\x49\x72\x86\x10\x3e\xe7\xb4\xd7\x87\xec\x9c\x0f\xf0\x85\xba\x12\x9c\x47\x97\x97\xd9\x2e\x84\xb4\xc3\xb3\x8b\xf4\xca\xad\xe6\x8f\x20\xd2\xf9\x53\x95\x3f\x17\x25\x8d\xcf\xcf\xe7\x93\x1d\x27\x74\xf0\x6c\x09\xc1\xbe\x58\xad\x9f\x0f\x56\xab\x58\x9a\x58\x2d\x4d\x28\x97\x26\xe0\xb1\x5c\x9a\x94\x87\xe7\x3e\x6c\x78\xa2\x56\x4b\x8c\x37\xe7\xe7\x13\x98\x72\x42\x7d\x7b\xa5\x2f\x68\xba\xba\xe2\xbe\xea\xcf\x54\xf6\xe0\xd9\xb4\xa3\x6e\xe3\xdd\x9c\x9f\x9b\xce\xe8\xce\x4f\x6d\x59\xf3\xb9\x5a\xf5\xe9\xd5\x15\x3f\x4f\xcb\x81\x44\xaa\x60\x74\x58\x30\x9c\x23\x57\x45\xff\x9f\x72\x72\x1e\x14\x57\x41\x4c\x39\xe7\x71\x4e\xd5\x46\xa3\x37\xc1\x1b\xb6\x1a\x9d\x7f\x60\x1f\xce\xa2\x0e\x37\xb3\x3a\x3d\xe7\x81\xf1\xb8\x40\x2b\x15\x8a\x0f\x3f\x8b\xd4\x94\x4f\xcf\x33\x5c\x4e\xc4\xeb\xda\x85\xce\xde\xe4\xf2\x92\x76\x77\x62\x4c\x27\x97\x97\xa4\xbf\x13\x63\x32\xb9\xbc\x1c\xec\xc4\xd8\x9d\x94\x65\xbe\x2f\xcb\x8c\xe5\xdc\x8b\xca\xb7\x57\x87\xdf\x40\x5c\x5d\x0d\x6c\xda\xeb\x55\x32\xfd\x7a\x32\x93\x7c\x20\xfd\xfc\x89\x76\x0f\x0a\x7e\x53\xe9\xad\x3c\x70\x3d\x0a\x83\xca\x60\xfe\xfe\xe0\x33\xf5\xa0\x5b\xf9\xfc\x63\xbe\xe8\x77\x48\x8c\x1f\x26\x4f\x2b\x8b\x8c\xa6\xa8\x28\xfc\x53\xdd\x82\x37\xe4\x33\xd4\x49\x70\x2e\x2d\x12\xe3\x1f\x26\x86\x6c\xff\x8c\x6e\x0d\x57\xc3\xc5\xf8\xdd\xc4\xb9\xb9\x85\x80\x87\x1d\x31\xfe\x76\x02\x29\xcf\x83\x74\x04\x10\x74\x4a\x5b\xc8\x68\x94\xb2\xd4\x31\xe2\x49\x54\x69\xf5\x17\x54\xdc\x90\x03\x71\x6e\x9f\x58\xb4\x1c\x34\xb4\x9c\x0b\x34\xd3\xa2\xf5\x0d\x0f\x74\xeb\x2b\x1e\xa1\x4e\x28\x21\xb9\x7b\x31\xbd\xcc\x2e\xa6\x9d\x0e\x4e\xc7\x9b\xce\x74\xc2\x57\xe3\x78\x34\x65\xd9\xf9\xf4\x9c\x4c\xf6\xb2\x66\xc9\xd3\x6a\xfe\x6b\x55\xc5\xf3\x37\x8a\xda\xdf\xed\xea\xa9\x12\xcc\xdd\x68\x72\x7f\xb7\x5b\x35\xa8\x62\x55\x06\xd0\xd9\x0a\x42\xff\x46\xdd\x30\x09\x35\x12\xbd\xcd\x6f\x14\xc5\xb9\xc7\xa5\x68\xf6\xcf\xf0\x1d\x47\x37\x4d\xb6\x1a\xe6\x86\xe8\x1b\x5d\xdf\x0b\x34\x53\x46\x1b\x78\xfc\x30\xe1\x2f\xe4\x02\xff\x85\xaf\xd1\x0b\x0c\x7f\xe2\xee\xc5\x5f\x72\x71\xea\x9f\x2e\x30\xfa\x33\xff\xcb\xf8\x4f\x9d\xce\x04\x87\x51\xeb\x66\xb7\x4b\xd1\x0d\xfc\x19\x5e\x8c\xff\x3c\xc1\x67\xf1\x6e\x87\xbe\xab\x91\xcc\x37\x78\x2f\x7b\xf1\x07\x05\xcc\xef\x91\xee\x39\xc5\x18\xfe\x91\xdf\x8f\x1f\x26\xca\xcc\x30\xca\x06\x67\x7f\xc8\x9f\x90\x0b\x94\x74\xfd\xee\xc0\xeb\x77\x07\x18\xca\x74\x52\xa6\x0f\x31\xb4\xff\xe0\x2c\xf2\x02\xd8\xb6\xcb\x37\x82\x77\xbb\x0d\x92\x75\x2b\x9a\x51\xa6\x1d\x88\x6d\xff\xb1\x72\x99\xb0\x80\x4c\x9e\x59\x79\x58\xb4\x14\x40\x19\x2f\x7c\x6d\x01\xc5\x68\x69\x52\xab\x3e\xc3\xf9\xd4\xd6\x97\x27\x97\xae\x2a\xe5\xb6\x56\xa9\xde\xf2\x6d\xa9\xaf\xd3\xb8\x2e\xc3\xe0\xea\x80\x71\xe3\x1f\x26\x3c\xdb\xd7\xc2\x61\xeb\x13\x68\xaa\xbf\x07\x2b\x47\xed\x16\x86\x29\x12\xb2\xc1\x32\x25\xa7\x58\xc6\x3f\x4c\x20\xe4\x73\x63\x62\x15\x4a\x44\x18\x5e\x45\xc5\xae\x3f\xd2\xa8\xab\x43\x89\x92\xca\x6d\x10\xa3\xe8\x3c\x64\x4b\xc9\x76\x1d\x97\x2b\xd9\x6b\xd5\xe5\x77\x13\xae\x6f\x6a\x1a\x7f\x3b\xe1\x61\x31\x8c\x64\x0f\xa1\x6d\xa3\x1f\xd1\xcd\x81\xe0\xea\x66\x65\x61\xf8\x11\xdd\x57\x64\x5f\x37\xb7\x45\xd2\x89\x9c\x55\x89\xd8\x4d\x6c\x61\x0c\xf9\x8a\x2f\x8e\x56\xbc\xd8\xee\x3f\xe9\x49\x23\x20\xf0\xd8\x9d\xe4\x8b\xa8\x02\x79\x1e\x2e\xfa\x89\x32\x2a\xef\xeb\x28\x23\xfd\x86\x9b\xf0\x4d\x56\x5a\x55\x42\xa8\x2b\x2c\x0c\x1a\xc9\x0c\x32\x50\x17\x61\x48\xf4\x20\x41\x75\xd1\xfa\xdf\x52\x65\xab\x5a\x65\xde\x37\x8f\x36\x8d\xe3\x35\x32\x75\x75\x0f\xeb\xc2\x45\x17\xfe\xdd\x25\xaf\xae\xae\x5c\x55\x5a\x45\xc3\x68\x2e\xfe\xf3\xc9\xe2\x06\xbd\x14\xe5\xfb\xdd\x27\xcb\x0f\x8e\xca\x6b\xec\x05\xcd\x67\xfc\x97\x62\xe1\xe0\x7b\x25\x3f\x3f\x71\xb4\x9b\xf2\x1d\xae\x70\x25\x9f\x5c\x8a\x57\x55\x8d\xf6\x58\x72\x68\x79\xe5\xff\xfe\x52\x87\x0b\x56\x29\x24\x27\xec\xd7\x93\x4d\xfd\xfb\x4b\x1d\x2f\xd2\x41\xb1\xbf\x3f\x5d\xac\xb6\x36\x95\x62\x72\x51\xbe\x39\x2a\xb6\xc7\x67\x0b\x74\x08\xfa\x60\x81\xea\xe0\x2a\xd5\x27\xd6\xd8\x2c\xa9\x30\xf4\x55\xc6\x85\xdf\x40\x52\x30\x2e\xfc\xbe\x1a\xb5\xa5\xe0\x4d\x4d\x30\xf6\x93\xbc\xa8\xe6\x39\x35\x4f\xa9\xb9\x49\xc3\x35\x56\xf9\x45\x1d\xbc\x5d\x73\x84\x05\x2f\x78\x64\x4f\x5f\x18\xdb\xd4\xec\x08\x8b\xeb\x51\xbb\xea\x82\xc8\x38\x37\xe4\x52\xca\x42\x39\x46\x99\xb4\xd5\xe3\xdd\xf0\x36\x6a\xd7\x78\xb3\xdd\xae\x5d\xf2\x66\x92\x53\xdc\x48\xda\x02\xe6\xdc\x7a\x5d\x18\xd0\x55\x6c\xe9\xd4\xa3\x11\xbb\xeb\x94\xd7\x85\x4d\x16\x54\xec\xb3\x40\x6d\xaa\x32\x39\x7f\x36\x1b\xa0\xf2\xd2\xef\x6a\xb9\x7d\xe5\xa2\xdb\x8b\xe9\xe5\xf0\x02\xa3\x84\x47\xe3\xf9\x78\xda\xe9\x4c\x26\x78\x84\x42\x54\x89\xa0\x05\x81\x5a\xac\x7a\x5a\xaa\x34\x4f\x6c\xa5\xe2\xc6\x97\xc6\xce\x2f\xbe\xf9\x33\xdb\x80\xb6\x55\x63\x2b\x50\x86\x6a\x2c\x00\xb9\xe2\x2c\xad\x06\x2b\xae\x5f\x4e\x2a\x53\x1b\x0d\x50\xdd\xdc\xde\x35\x09\xa2\x59\x7c\x77\xe2\xa2\xc9\xf2\xf2\x1c\x1d\xa2\xd4\xca\x65\x81\xa5\x19\xf2\xc8\xb2\x98\x00\x0b\xdf\x58\x80\x3a\x9d\xa4\x13\xe1\x42\x5a\x84\xbc\x3e\x2e\x4d\x7b\x9f\x8a\x50\x52\x86\xf7\x3d\xbc\xad\x6a\x93\x8a\xe4\xc5\x42\x44\xd9\x6e\x67\x59\x95\xbb\xaa\x48\xf7\xa4\x9b\xe3\xe0\x84\xfd\x74\x6e\x79\x96\x20\x15\x1f\xdc\xb9\xc9\xfe\x3f\xe2\xde\x7d\xbd\x6d\x1c\xd9\x17\xfd\xdf\x4f\x61\x71\x65\xb1\x81\x08\xa2\x49\x5d\x7c\xa1\x0d\x6b\xa7\x13\xa7\x27\x33\xb9\xad\x38\xdd\x33\xb3\x64\xb5\x37\x2d\x41\x16\xdb\x12\xa9\x26\x29\x5f\xda\xe4\xbc\xd9\xf9\xce\x23\x9d\x57\x38\x1f\x0a\x17\x82\x14\x65\x27\xb3\x7b\x9d\x33\xd3\xb1\x48\x90\xc4\xb5\x50\x28\x14\xaa\x7e\xd5\xe8\xfa\x0e\x31\xa7\x37\xf0\x20\xc8\x2e\x38\xb2\xed\x26\xec\xf7\x75\x98\xb0\xa9\x61\x82\x56\x09\x66\xe3\x0d\xb6\x9b\x30\xd7\x22\x02\x1f\x1e\x29\xd7\x6e\x4f\xa8\x3d\x40\x4d\xf1\xa4\xbb\x54\xe4\x88\x81\xc8\x73\xa4\x2e\x69\x38\x7c\x2c\xfc\x44\x3f\x78\x2c\xf0\x8e\x75\x69\x51\xca\x4a\xa0\xa3\x3c\x07\x65\x67\x96\xe7\x01\xca\x08\x53\x18\xe2\x31\xe0\xe4\x28\x87\x69\xcf\xf7\x06\x1e\xd9\xf0\xcb\x2d\xa7\xf2\xa0\x01\xf7\x51\xa0\x33\x7a\x83\x2e\xae\x44\x1d\xf0\xea\x81\xfb\xeb\x8e\xd6\x77\x37\xa6\x9f\xb5\xe0\x00\x2e\x96\x8d\x20\x71\x13\x32\x4c\xd8\xec\xea\xdc\xe8\x8e\x1d\xdb\xb6\xf4\x7b\x8e\x87\xa1\x1f\x61\x24\x09\xd8\xb1\xda\x20\x98\x3b\x69\x16\x27\x8c\x26\x9b\x0e\xdb\x25\x36\xd2\x60\x2b\xf2\x53\xff\x60\x6b\x00\x28\xb0\x0a\xae\xe2\x77\x76\x31\x08\xd4\xf2\xad\x0f\x00\x76\xd2\x14\x79\xbc\x55\x9a\xf4\xb3\x51\x34\xce\x73\x56\x8f\x73\x12\x8e\x38\xe9\x8e\x2b\x31\x86\x84\x1e\x0f\x06\x4d\x05\x88\xf2\x06\x15\xa3\x6e\x45\x3b\x60\xa3\xbd\x93\xa1\xcc\xf9\x4c\xd4\x29\xa3\x69\x83\x06\xf6\xca\x05\x26\x0c\xf5\x06\x18\x59\xe5\x13\x88\xd9\xdd\x1b\xf8\xbd\x81\x54\x27\x82\xaa\x10\x0a\x1a\x54\x0b\xda\x50\xf2\xc9\x52\x01\x04\xb7\xdf\xc5\xa8\x2f\x2b\xd0\xce\x9c\xb7\x2f\x5b\x9c\x18\x0e\x31\x1a\x8d\x1d\xb0\x56\x03\x66\xa8\x6b\xb6\xd5\x80\x2d\x51\xbb\x87\x8a\x0c\x53\x08\xf4\x9c\xee\xa1\xef\x75\x0f\xa5\x92\xb3\xac\xe7\xfe\x37\x77\x08\x18\xba\x81\x9e\xb0\xec\x0a\x9e\x66\x74\x82\x58\xff\xca\xcc\x0f\xbe\xb3\x13\xba\x5b\x3a\x41\xd8\xcb\x55\x7b\x61\xbb\x0d\xdd\xbf\xd3\x0d\x87\xdf\x59\x53\x40\x25\xb4\xb4\x81\x9c\x45\x42\xda\x72\x77\xa2\xdd\x30\x1a\x8d\x6d\x5b\xec\xb1\x3c\x3c\x8a\xc6\xe6\x4e\x3b\xa4\x2d\xaf\xc0\xa4\x6c\x62\x68\x36\xe7\x09\x5b\xbb\xcd\x16\x3d\x63\x79\xa4\x47\x28\x32\x06\xa7\xd6\xe4\xa3\xef\x6c\xf2\x00\xe2\xc7\xb8\x3b\xd0\x6a\xab\xda\x50\x87\xa7\x55\xd4\x0d\xf5\xa6\x46\xd5\xa6\xfe\xb9\xad\x14\x55\xda\xda\xd4\x6a\x78\xff\x6f\x68\xaa\x42\xa4\x55\xe4\x27\x8c\x16\x39\xfd\x99\xf4\x69\x36\xa9\xc1\xac\xf1\xdf\xa7\xc6\x7d\xef\x1b\xea\x3b\xe8\x8b\xfa\x2a\x9f\x5b\x0d\x9e\x5a\x0f\xfe\x0a\xfa\x7f\xe0\xb7\xbd\x32\xf8\xeb\x4e\x09\x2c\xd9\x02\x3f\x8d\xca\x01\xb0\x11\xf5\x87\x01\xce\xa4\x6e\x67\x12\x2f\x37\xf6\x90\x89\x0a\xd4\x2b\x80\x45\xa7\x4d\x4b\x14\xef\x83\x21\xff\xe3\x0b\xd1\x70\xb5\x69\x99\xbc\xa4\xab\x2d\x66\xdb\xb7\xa5\xd9\xf6\x52\x46\xfe\x5d\xa3\x39\xe8\x10\x6e\x21\x84\x6f\x86\x96\x64\xd5\x6c\xf0\x0b\x86\xd6\xe2\xa0\xf4\x21\xcf\xa7\x54\xf8\x8a\x40\x00\x7d\x0c\x80\xec\x0b\xe1\xb1\x88\x12\x1a\xa0\xb9\x76\x0c\x3f\x4e\x4e\xaf\x8f\xaf\xdb\x6d\x9c\xa2\x05\xb9\x26\xb7\xc3\x25\x9a\x43\x10\x61\xec\xf3\x5f\x19\xdc\x09\x8e\xf2\xa9\x8c\x1d\x3d\xe7\xd2\x35\xe4\x75\xdc\x42\x13\x3a\xab\xda\x89\x9b\x79\x85\x68\x46\x96\x64\x34\x91\x66\x4b\xd7\x63\x4e\x59\xfe\x44\x99\x8f\xab\x53\x73\x59\x19\x7a\x4d\x16\x92\x5c\xea\x07\x60\xf2\x60\x6b\xd0\xf3\xf9\x5f\x38\xb2\x92\xd1\xa2\xca\x70\xb2\xe2\x50\x0a\xc8\xaa\xfb\x3d\xd3\x40\x02\xcc\x46\x74\x34\x76\xa4\xad\x2d\x67\x72\xad\xc8\xb6\xbd\xbd\x91\xa7\x13\x91\x47\x3a\x2e\x3e\x71\x8d\x99\x81\xc2\x3c\x57\xdc\x3b\xc2\x06\xf9\x3c\x61\xb3\x1b\x0e\xa3\xe6\x50\xf1\x79\xee\xfa\xdf\x34\x87\xe0\x0c\xaf\x9c\x43\xbd\xa7\x17\xb6\x73\xa3\x56\x22\x10\xa4\x0f\x71\xac\x21\x4f\xd9\x89\x47\xfe\x01\x88\x77\xfb\xdf\x16\xff\xaf\x37\x90\xb8\x8d\x07\x5a\xde\xd1\x38\xdf\x15\xc1\xe7\x70\x80\x91\x98\x06\xaa\x0e\xd5\xdc\x85\xd6\x4e\x06\x17\x10\x37\x21\x75\xe5\xd5\x0d\xcd\x0a\x13\xf4\x44\xd8\xfa\xcb\x4f\x48\x26\xaf\x6e\x94\x29\xe5\x65\xd8\x6e\x4b\x8a\x6a\xb1\x3c\x4f\x4e\xa9\x0a\x9f\x3c\x44\xaa\x1c\x39\x53\x22\xe4\x61\xec\x47\xc8\x25\x02\xed\x87\xd2\x6c\x98\xf8\xa5\xd9\x41\x36\x64\xa3\x64\xec\x8f\x12\xc2\x7f\xf9\xd6\xbd\x0c\x95\x16\x3a\xaf\xd4\xd0\xd0\x50\xec\x3f\x49\xa2\x51\x83\x12\x23\xa8\x5a\x62\x84\x9e\x03\x9a\x16\x88\xc0\x82\x71\x1f\x0e\xfc\xc3\x01\x39\x3c\xf0\x0f\x0f\x4a\xa1\x6d\xff\x7b\x64\x29\x09\x27\x3e\x1a\x83\x57\x95\x49\x94\xe0\x29\xd9\xa2\x0a\x7a\xb7\x91\x40\xab\xf6\xda\x06\x22\xb6\x84\x96\x93\xe6\xad\xe6\x1e\x8f\x58\x3e\xab\x91\xa2\x6a\x93\x24\x23\xe5\x65\xb9\xbf\xff\xfd\xed\x90\xe7\xb8\x46\x50\xf5\xd1\xb8\xea\x5d\x46\x5b\xad\x58\x4d\x49\xe3\x41\xd3\xb4\x0c\xca\x56\xc7\x66\xab\x1b\x0d\xce\x85\xf8\x1d\x60\x8d\x5c\xbe\x6d\x76\x6a\x27\x5b\xd1\x37\x29\x0d\xcb\x80\xbe\x64\x4d\xd3\x8e\x27\x20\xa6\x37\x16\x75\xdb\x46\x6b\xed\x59\x8a\xd6\x24\x42\x55\xd5\x1f\x26\xeb\x13\x17\x5e\x4a\xdb\x6b\x7c\xbc\x3e\xa5\xee\xf1\xba\xd3\xc1\xe1\x0c\xad\x61\xd3\x66\xdb\xd9\x68\x3d\x36\x3d\x7e\xd7\xbc\x3e\xe2\xba\xe3\xd5\x06\x45\x6b\x6e\x14\x5c\xbd\x60\xa6\x25\xc7\xf8\x5e\x69\xd5\xdb\x22\xad\x2e\x83\x55\x55\x54\xdd\x62\x94\xff\xef\x48\x06\xdf\x23\xa7\xf2\x65\x1e\x58\x1d\x54\x70\x23\xd6\x8a\x3e\xc0\x62\x48\xc7\xc8\x6b\x09\xbe\xa4\xcd\x6f\x18\x36\xb1\xcf\x2b\xa2\x40\x3c\x6b\xb4\xd1\x6f\xf6\x3a\x02\x58\x80\x26\x30\x83\x9a\x5c\x80\x91\xf6\x4a\x42\x51\xa5\x67\x98\x89\x94\xa0\xac\xc1\x69\x46\x22\xd1\x5f\x62\x09\xac\xa1\x64\xec\x7f\x97\x88\xdb\xdb\x32\x9c\xa6\xbb\x66\x65\x58\x1b\xdd\x1c\xbe\x41\x9c\xad\x8c\x37\x1c\xee\x54\x87\xbc\xe7\xf7\x7b\xe5\x90\x1f\x7c\x97\xf0\xfa\x74\x23\x9a\xea\xff\x7f\x52\x75\xef\x99\xaa\x7f\x8b\x1c\xab\xaa\x7e\xd0\xab\x05\x23\xee\x1d\xa8\xe5\x13\x94\x40\xa3\xb1\x38\x96\x35\xda\xb7\x19\x3e\x4e\x83\x5b\x26\x15\x5a\x15\xa6\x56\x4d\x2a\x8b\x18\x19\x0e\x07\x22\xdc\xa0\x70\x51\x08\x67\x28\xa3\x86\x4b\x44\xe2\x67\x44\x47\x47\x4d\x71\x15\xd4\x57\x1d\xda\x95\x47\xbb\x6b\x2a\xa2\xa6\x91\x05\x67\x87\xfc\x62\x42\x63\xb4\xe8\xac\x31\x99\x19\x26\x27\x13\x4c\xe6\xd4\x3d\x9e\x9f\x4c\x8e\xe7\xed\x36\x9e\x8d\xe6\x63\x5a\x86\xe3\x16\x33\x43\x03\x79\xb5\xe7\xd8\x87\xa3\xae\x75\x7b\xae\x5d\xf4\x66\x72\x04\x94\xcd\x94\xe4\x6a\x02\xf0\xa1\x62\xb9\x24\x03\xba\x78\x07\xdf\x25\x06\x76\x31\xda\x46\x53\x69\xbc\xac\x51\xd4\x36\xef\x99\x7f\x83\xd3\x1d\xf4\xbe\xa3\x96\xbd\x5e\x6d\x0f\x24\x7c\xef\xa1\x8e\x49\xc6\x89\xc7\x23\x5d\xd2\x1b\x57\x64\x54\x93\x70\x02\x78\x11\x69\x08\xd3\xba\xed\x9c\x7c\x2e\x41\xe5\xb6\x2c\xa3\xdb\xbc\x7d\x0c\x69\x41\x81\xd2\x2a\x0f\xc8\xea\x3d\x91\x88\x06\x55\x59\x42\xc8\xfa\x02\x5e\xaf\xc6\xe0\x0e\x6a\xea\x2c\xe1\x69\x8f\x64\x8d\x44\x36\x60\x5b\x07\x2f\x0f\x9e\x95\x88\xdf\x04\x19\xb3\xc8\x63\x14\xdf\x6d\x5a\x5c\xc0\xe1\x31\x7f\x01\x94\x76\x5f\xc3\x25\xe0\x9c\x6b\x69\x19\x4a\xd8\xae\x4c\x12\x0b\xd2\xc0\xa4\x24\xc4\x33\x33\x3c\xb9\xb3\xf8\xdd\xf9\x27\x41\xfb\x2d\x4a\x13\xac\xab\x63\x3c\xf0\x13\xc1\xed\x07\xfe\x60\x60\xd0\xca\xf7\xac\xdc\x40\x23\x91\xc4\x4b\x78\x92\x99\xc8\xb5\x46\x00\xc1\xaa\xd6\x83\x41\x84\x93\xc5\x7f\x3d\xff\xf4\x11\xe1\x3c\xf7\x5a\x94\x6e\x34\x84\x3f\x94\xde\x21\x66\xe5\x37\x33\x07\x19\xc5\x6c\x29\xff\xd2\xdf\x90\xee\x95\x6c\x95\xc1\x0e\x5b\x61\xd0\x45\xeb\xe5\x15\xd8\x63\xa8\xb5\x34\xcf\x75\x44\xf9\x0c\x0f\x2b\x3d\x8a\xb0\x0c\x3f\x22\x64\xee\xaa\x01\x65\x9d\xaa\x0e\x9b\x87\x51\xe1\x94\x7e\x4e\xc2\x65\x28\xe0\xc4\x48\x52\x6b\xfc\x0e\xf8\x26\x25\x79\x2e\x22\x9e\x27\x24\x23\x0c\x0d\xf6\x31\x36\x01\x53\xf7\xfd\xc1\x7e\x79\x0e\x73\x70\xd4\x54\x5c\x35\x5b\xbe\x9b\x29\x71\x10\x22\x9a\x29\x1a\xdc\xa9\x8c\x4b\xdb\xb2\x5a\xd4\x7a\x17\xdd\x06\x8b\x70\x0a\xc9\x96\x6d\x0b\x54\x79\x94\x6d\xc1\x23\x17\x3d\x1c\x19\x4e\x3a\x3b\x25\xde\x30\x1b\x26\xc6\x03\xbf\x9a\xb5\xe8\xcb\x12\x69\xfe\xd0\x7d\x56\x97\xaa\xec\xc8\x2d\xf2\x78\x15\x46\x53\x9f\xa1\xfe\xbe\xd8\x72\xf6\xf7\xfd\xfe\x7e\x49\xd2\x87\xdf\xb2\x74\x1e\x7a\x92\xa4\xdd\x81\xa9\x76\x9f\x07\xe9\x3b\x29\xb5\x81\xe6\x7d\xd3\x78\x1d\x14\x95\xbb\x21\x1f\x25\x38\x59\x41\x21\x89\xd4\xd1\x47\x6d\x03\x50\xca\x6c\x2d\x53\x66\xcb\xf3\x56\x66\x44\x1d\xf5\x44\xd4\x51\xa4\x62\x20\x8a\x62\xb4\x5b\x47\x25\x1e\x0e\xc0\x72\x81\x7f\x9e\x80\x06\x3a\xe6\x02\x7d\xf5\x43\x43\xa4\x6f\x29\x79\xbe\xa5\xe4\x79\x65\x45\x2c\xa9\xa9\x1a\x76\xd4\x3b\xec\x36\x0f\x82\x30\x74\x4d\x1a\x3a\x83\x44\x74\xef\xd7\x8b\xf4\xa5\x96\x87\xd1\xe8\xd7\x5d\x34\x7e\x89\xf7\x76\x04\xb6\xbe\x22\xe8\xc1\x21\xb6\xed\x0c\x25\x0a\x72\xff\x39\xc8\xe0\x32\x34\x04\xb2\xac\xb6\x70\x5b\x5d\x02\xdc\x72\x84\x47\xde\x58\x42\x2f\x97\x27\x89\x56\x21\x65\xd9\x6a\x50\xb1\xc3\x6f\x03\x16\xec\x6b\x90\xa4\xa3\xda\x31\x8b\x87\x91\xf5\x21\x58\x59\xa4\x61\x6d\xda\x64\x49\xac\xb6\xc5\x53\xdb\x35\xd7\xd0\xae\xb9\x86\x0e\xb6\x66\xa0\x67\x04\x4b\xb9\x66\xd9\x59\x94\x25\x0f\x72\x79\x23\x50\x09\x4c\x4a\x0d\x17\xdf\xc0\x39\xb7\x75\xbf\x28\xc3\x63\x31\x71\xa6\x6c\x56\xfb\x5c\x2c\xa4\xae\x2f\x21\xa4\xe0\x54\x00\x78\xda\x91\xef\xf5\x8f\x48\xff\xc8\xef\x1f\x91\x81\xe7\x0f\xe0\xcc\xf1\x70\xfb\x81\x0f\x4c\x9d\xa3\xae\x86\x37\x4a\x7f\x4f\x32\x85\x6b\x15\x4c\xe2\x74\x6e\x6c\x9e\x5a\x28\xb4\xed\x03\xcf\xa5\xa6\xbb\x71\x88\x3e\x02\x07\x76\x3e\xbc\xfa\xc7\xe5\x2f\xaf\xde\xff\x7c\x86\xc1\xc9\xc6\xdb\x73\xb1\x00\x66\xe4\x75\xce\xe6\x16\x79\x84\xfc\x1a\x64\x03\x01\xf9\x74\xe2\x81\x81\x28\x3b\x3d\xea\x1f\xb9\xfb\xdd\xfd\x81\xb3\xdf\xed\x77\x07\xde\x60\x7f\xa8\x83\x40\x33\xdc\x86\xeb\xf7\x1f\xbb\x7e\x82\x58\xc7\x6b\x47\xfc\x2f\x7e\x19\x21\xd6\xf6\xb0\xb9\x14\x93\xa3\xae\x7f\x24\xb8\xc8\xf6\x25\x5f\x79\x4e\x07\x69\x18\x55\x5b\x9a\xd8\xb6\xb7\x97\x20\x17\x9f\x9a\x0d\xe0\xaf\xf9\xc6\x96\xd1\x80\x51\xd6\x6b\x0e\x6d\x67\xd8\xb6\xdd\x16\xcd\x86\xd9\x89\x3b\xec\x30\xd4\xc9\x70\x19\xc7\x3a\x6b\xeb\x7e\x46\xd9\xcb\x8c\xd7\xda\xcf\x6a\x22\xc4\xe1\x93\x22\x84\xa8\x71\x16\x34\xd7\x18\xf4\x1d\x46\x95\xf9\x7b\x4d\xf2\x98\x19\xdd\x5c\x57\x0e\xa2\x6c\xef\x21\xaf\xc3\x30\xde\xeb\xd6\x6b\x75\xf0\x0c\x15\xf5\xb4\x08\x25\x0b\x9f\x5c\x35\xcb\x82\x89\x28\xf9\xa5\x8a\x83\x8e\xcc\x38\xe5\xde\x5e\xaf\x3a\x8e\x32\xc0\xb8\x77\xb8\x65\x45\x36\x44\x37\x55\xee\xe2\x8f\x46\x1b\x29\xc4\x4e\x4f\x4f\xa9\x8b\x87\x3d\xaf\x63\x90\x70\x49\x5e\x6d\x67\x20\x6b\xf5\xfe\xd3\x4f\xdd\x33\xec\xf7\x36\x3a\xa1\x71\x9d\xae\x0c\x0d\xbb\x5f\xd5\xeb\xb3\x85\xee\x65\x3f\xb4\x13\xd4\xd8\xe1\x47\xdb\x97\x52\xd1\xe1\xae\xa9\xda\x40\x49\xcb\x08\x92\x5f\x52\x00\xdc\x4a\x91\x51\xf6\xa8\xeb\x1f\xc1\x11\xf6\x91\xf7\xad\x3d\x2a\xc2\xcc\xfb\x0c\x1d\x79\xa6\x72\xf8\xc8\xf3\x8f\x80\xc3\x1c\x6d\x59\x70\x4c\x8a\xbd\x4a\x6b\x99\xce\x1f\x56\x71\x9d\xe7\xa9\xad\xa3\xc0\xd3\x74\x65\x3c\xf5\x86\xc8\xb2\xee\x71\x70\x92\x1e\xe3\xf5\x09\x8a\xa8\xa1\x57\x1b\x05\xed\xf6\x18\xe3\x21\x8a\x69\xfc\x12\x85\x74\xbd\x17\xe1\x97\x61\xdb\x23\x6b\x1a\x61\x3f\x6e\xd3\xe8\xd4\x1d\xa2\x90\x46\x7b\x6b\xfc\x32\xf4\x23\x8d\x49\x4d\x81\x59\x0d\xbd\x3d\xd7\x5f\xbf\x2c\xa7\x68\x5c\x17\xef\x8f\xb6\xab\xd4\x55\x4b\xc3\xe5\x7a\xf1\x94\xce\x49\xaa\xe6\x06\x2d\x9a\xa0\x7e\xf7\xa8\x7f\xb4\x7f\xd0\x3d\x1a\x90\x01\xce\xf3\x6e\x4b\x23\x1b\x14\xe5\x10\xf2\x0c\x1b\x37\xee\x6d\xbe\x6e\xb7\x39\xc3\xde\x1f\x0c\x7a\x03\x3b\x21\xb1\xbc\xd2\x0d\x73\xf3\xf0\x65\xdc\x46\x48\xbe\x70\x7a\x7a\xea\xed\xe3\x97\x71\x3b\x7c\x29\x93\x22\x91\x24\xec\x24\x4f\xdd\xca\xdc\xd3\xd2\xf0\xd1\x33\x26\x03\xe5\xa0\x2e\xe2\x6b\xcf\x6d\x9a\xf4\x06\x13\xd7\x53\xcc\x73\xcf\xea\xdd\xfb\xfc\xfe\xcc\x28\x68\xe5\xc3\xe2\xd5\xc4\xf5\x8f\x9e\x39\xd3\xaf\x64\xd4\x68\x50\x69\x54\x78\x4f\xad\x3a\xf5\xda\x6e\x67\x89\xb5\x42\xd2\xf0\x3a\xf2\x81\x47\x36\xb1\xb6\xa3\xed\xac\x4d\xcd\x74\xb5\x40\x6b\xee\xf2\x24\x6d\x75\x59\xc7\x3b\x68\xd1\x96\x20\xe4\x30\x9a\x23\x91\x84\x0d\xaa\xaa\x2c\x66\xf5\x76\x03\x33\x96\xcb\x32\x60\x0c\x76\x14\x93\xf2\x91\x58\x73\x3b\x11\xea\xf0\x5f\xfc\x52\x30\xd0\xb3\xbd\xee\x26\xed\x18\xbc\xe6\x49\xc6\xd9\xdc\x44\x5d\xd5\x8d\x45\x4c\x43\x5a\xf2\x2a\x42\x34\xb7\x8e\x21\x51\xc9\xa9\xec\x87\xe2\xa2\xe3\xf9\x28\xeb\x84\x78\x0f\xa0\x1f\xdb\x11\x34\xa4\x68\x60\x88\x5d\xf7\x99\xcd\x8b\x51\xa3\x64\x1d\x4d\x9a\x97\x18\x77\x58\xae\x2d\xbe\xc6\xc1\x14\x30\x96\x26\xf5\x74\xdd\x6f\xd9\xde\x1c\xb8\x52\x33\xe8\x55\x35\x83\x07\x03\xa5\x18\xec\xc9\x00\x5d\x7d\x09\xac\x28\xfc\xda\xd6\x54\x45\x48\x01\xc7\x38\x21\xf9\x4f\x2a\x61\xe8\x66\x34\x73\x84\xf0\x46\xe6\x74\x46\xa6\x74\x66\xec\x07\x56\xd4\x12\xcf\x2c\xca\xf7\xdb\xe8\xe8\x10\xa3\x29\xc6\x64\x49\x2d\xfe\x31\xdf\x0f\xd4\x03\x13\x91\xdb\x06\x93\xb4\x18\x31\xd2\xf2\x44\xf0\xa7\x54\xe9\xf4\x0c\x14\x0f\x0d\x54\x65\x22\x29\x07\x14\x65\x74\x39\xcc\xa0\x9e\x08\xfb\x13\x94\x91\x1e\xc6\x26\xe2\xbf\x0b\x59\xf6\x7b\x22\x36\x43\x7f\xc0\x7f\x61\xaf\x76\x78\x48\x29\x45\x89\x0c\xe4\x27\xdf\xee\x62\x9c\xe7\x5e\x17\x4c\xec\xd5\x7e\xec\x63\xf0\x51\xfb\xb5\xf7\x0f\xc5\xf7\xe9\x5d\x08\x21\xeb\xcc\x6f\x3d\x8c\x1f\x27\x41\xca\x76\xf7\xf7\x7d\xf8\x3d\x3a\xf4\x23\xda\x25\x21\xed\x1f\xed\x5c\x25\x2c\xb8\xd9\x81\xe4\x83\x23\xf1\xd8\xf3\x3c\x3f\xa2\x87\x24\xa4\x83\x81\x7c\x3e\x65\xb3\x60\xbd\xc8\x7c\x51\x72\x3b\x2b\xb4\xf3\x0b\x59\xd3\x4c\x7a\xda\x74\x31\xc4\x89\x9c\xd1\xb5\xec\x93\xe3\xc5\xc9\xec\x78\xd1\x6e\xf3\xad\x21\x4a\xe9\xda\xac\xd4\x02\xe3\x93\xfe\x61\x9e\xa7\xa7\xa1\xd1\x1e\x35\x03\x54\xdc\x41\xb4\x86\x00\xa0\xba\x58\xd8\xa0\xce\x90\xb5\xeb\xc6\x9e\x85\xf3\x9c\x5f\xbb\x57\x70\x39\x43\x56\xdb\xbd\xf7\x2c\x8c\x1f\x67\x0d\xc3\x58\x5f\x81\x4f\x3c\xd8\x7d\x24\x95\x70\x4f\x15\xa7\xf6\x99\x6d\xa3\xd5\x30\x30\x99\xd3\x54\x1c\xee\x7f\x9a\x95\xea\x69\x5f\x51\x59\x8b\x46\x28\xc1\x78\x18\x82\x8a\x6d\x8e\x6e\x21\x86\x44\x42\x66\xd8\xe7\x97\x85\x56\x2a\x5f\x03\xbc\xe7\xe0\x10\x0f\x53\x34\xc7\xbe\xa5\xf7\x1d\xe4\xc3\xbb\x8f\xf2\xea\x63\xf0\x91\x7c\x3c\xfb\xe9\xd5\xd7\x77\xbf\x9c\x5d\xbe\xfb\xf8\xf6\xdd\xc7\x77\x5f\xff\x49\x3e\x7f\x3a\x7f\x57\x4d\x39\xfb\x7c\xfe\xee\xfd\xa7\x8f\x44\x49\xef\x24\x4c\xdf\x45\x19\xbb\x66\x09\x01\x30\x5a\x12\xa6\xe7\xc1\x8c\xa9\x34\x5e\xd4\xf9\xab\xb7\x3c\x83\xaf\x67\x3f\x9d\x7d\x81\x12\x2b\x09\x46\xc8\x4a\x1d\xfb\x51\xe7\x69\x5a\xff\x92\x2b\xea\x1e\x3f\x28\xe2\xbf\x3a\xbe\x6a\xb7\x71\x82\xe6\xe4\x9a\x3e\x8c\xae\xc6\x80\xf5\x82\x66\xe4\x1a\xdb\xf6\x82\xff\x92\x35\x7f\x86\xf1\x8e\x31\x45\xe9\x94\x4c\x2b\x0e\x40\x33\x52\x6a\x79\x64\xaf\x92\x19\x6e\x74\x42\x16\xfa\x1a\xa2\x03\x3f\x4a\x1d\x98\x44\x48\xde\x34\xdd\x16\xae\xbe\x03\xff\x60\x50\x73\xe6\xed\xba\xdb\x25\x3f\xc5\x32\x55\x5d\x1e\x65\x77\xfb\x5a\xee\xef\x92\xce\xc0\x5c\xbe\x21\xc3\x27\x05\x2c\x61\x07\xaa\xc6\x6b\xa3\x04\xf5\xa0\x81\x33\x2b\x4d\x61\x09\x21\x0e\xa1\x82\x2a\x0b\x81\x32\xee\xec\xba\xcf\xcb\x3b\x46\x99\x72\x7c\x7d\x86\x0e\x5d\x73\x7d\x3f\x74\xfd\x43\x91\xdd\xf3\x52\x8d\x91\x1d\xdf\x06\x37\xac\xcb\xac\x45\x59\x7d\x05\x79\x46\xd7\x7c\x58\x2e\xaa\x86\xf8\x6d\x14\x65\x50\xf7\x96\x8d\x1a\xb6\x6d\x9e\x72\x42\xeb\x60\xc6\x45\x63\x43\x9f\x17\x88\x74\xe9\xf5\xd9\xe4\x6f\x94\x50\x6d\xeb\xf3\xdb\xbf\x32\xeb\xda\xbc\xf4\x3b\xcf\xe4\xfd\x8c\x70\xe2\x79\xdd\xca\x56\x4b\xaa\x3c\xca\xd9\xde\x02\x55\xbd\x2e\xbf\x7c\x20\x37\x5e\x9e\xd7\xf5\x3d\xaf\x3c\xd9\xe9\x7a\xcf\xec\xed\x3c\xaf\xb7\xb5\xc4\x77\x51\x63\x79\xef\xa2\xb2\xb4\x9e\xef\x79\x3d\xa3\xb4\xef\x39\x83\xd4\x48\xe3\xbd\xbe\x3a\x84\x04\x63\x3a\xcf\x71\xb2\xf8\x6d\x78\xcf\xa6\x24\x30\x34\x40\x24\xa5\x23\x97\xe8\xff\x8f\xc9\x5a\x49\x0e\xea\x75\x1f\x42\x28\x26\x09\x9b\x64\xbb\x61\x74\x1b\x4f\x02\x5e\x8f\x96\x55\x8b\x6b\x61\xe2\xac\x76\x3c\x12\xd1\xec\xb8\xdd\x4e\x4e\xf6\x8f\x71\xd4\xa6\xec\x65\x3a\x4a\xc6\x84\xff\xa1\xd1\x7f\x7a\xec\x80\x44\x34\x40\xd1\x9e\xc7\x0e\x20\x2c\x85\xd9\xba\x32\x0a\xc1\x3e\x49\xa8\x7b\xdc\xe9\x64\xa7\xd4\x3d\xc6\x49\x9b\x02\x78\x28\x40\xde\x05\x28\xd9\x63\xbc\xc1\xc9\x7f\xb2\x97\x1e\x3b\x28\xc8\xac\x19\x40\x74\x9f\x64\xd4\xb2\x8e\x3b\x1d\x06\x99\x70\x39\xc6\x6a\x51\x9a\x49\x1f\x77\x11\x44\x31\x1d\xb1\xb1\x46\xa9\x13\x67\x0d\x90\xb4\xc3\xbf\x55\x47\xa7\x6d\x19\xe5\xd0\x72\x2d\x72\xd0\x51\xfb\x3c\xdc\x4e\x54\xc4\xb9\xac\x1a\xbb\xc0\xc4\x1e\x2b\x0f\x60\xff\xb3\x4b\xa9\x37\x9c\xf3\xc7\x1d\x8f\x24\x2f\x19\xf6\xe7\x88\xbd\x64\x24\xdb\xeb\x92\x04\x17\xe6\xe1\x12\x58\xc5\x20\xcb\x75\x5c\xd7\xe5\x95\x3e\x64\x9d\x81\x1a\x15\xd4\xc3\x79\x6e\x79\x3c\xd9\x39\xd2\x89\x2e\x24\x3a\xdd\x01\x4f\xe7\xbf\xe5\xfb\x5d\x78\xe4\x56\xff\xe7\x75\x0f\xf9\x9b\xc8\xbd\x9f\x32\xf7\x6a\xff\xaa\x17\x1c\xec\xf7\x5d\xf7\xd0\xc5\x46\x96\xe2\xac\xb0\xb6\x53\x89\x0d\xe4\x30\x93\x96\x15\xd1\x6c\xcc\x0e\x01\x78\x4b\xa6\xf2\x74\x9a\xac\x31\x59\x09\x54\xfb\x25\xb5\x2c\x72\x4b\x2d\x17\x10\xc9\x57\x27\x6e\x9e\xaf\x4e\xbb\x0d\x21\x61\xd6\x20\x34\x4e\x5b\x74\x2a\x85\x26\xeb\x63\xf0\x11\x3e\x9a\x9e\xd0\x8e\xc7\xba\x5e\x9e\x4f\x4f\x29\xbf\x50\x52\x95\x1c\xcd\xa9\xf8\x12\x4c\x71\x96\xd4\xea\x58\x64\x4a\x3b\x53\x4c\xa6\xa7\x1e\xeb\x74\x3d\x4e\x16\x31\x17\x5a\x9b\xe9\xd0\xe5\x13\xeb\x38\x39\xa5\x7d\xf7\x68\xff\x18\x67\x6d\xea\x75\x49\xb2\x07\xb7\xe2\x14\x20\x39\xa5\x5d\xf1\x80\xa7\x77\xf5\x56\xa6\x40\xd3\x97\x73\xd4\x25\xfb\x47\xc4\xc3\xb8\xb3\x7f\x84\x4f\xdc\xa1\x48\xea\x64\xc4\xc3\xfe\x74\x8f\x5f\xf3\x4b\x12\xbf\xa4\xfd\x81\xdb\x1b\x1c\x1d\xed\x77\x0f\x7a\x07\x6e\xff\x68\x9f\xa0\x8c\x0e\xba\x9d\x0c\x9f\xba\xa2\x3e\x0b\xe4\x92\x98\x6f\x18\x56\xc7\xc1\x29\x3d\x38\xc6\x0b\xc4\x27\x93\x8b\x49\xd0\xa1\x07\x02\x26\x00\xcd\x91\xe7\x92\x40\xc4\x54\x20\x01\xcd\x3a\x1e\x7f\xb9\xdb\x3b\xc6\x13\xe4\x9d\x9c\x74\x7b\xf0\x76\xb7\xb7\x03\xb7\x01\x26\x0b\xe4\xf1\xb7\x27\x5c\x86\xbd\xa5\x33\x24\x3d\x75\x65\x61\x0b\xc0\x13\xc8\x78\x66\xf0\xd0\x9c\x07\xab\x32\xf0\x07\x5d\x9d\xba\xc3\x65\x9b\x8b\xba\xb7\x6a\x6e\x9c\xd0\xd5\xd0\x72\x1d\xab\xf2\x49\x27\xc5\xed\x5b\xff\x56\x87\x27\x4a\x3b\x2b\xdc\xb6\x1c\xab\xad\x92\x78\x02\xf6\x97\xed\x5b\x65\x16\x20\xa3\x15\x49\xe3\xa7\x5e\xdf\xef\xf5\x6b\xe7\x7d\x5d\xef\x7b\x0c\x02\xf8\x5e\xab\xe4\x90\xc0\x18\x3f\x27\x6c\x12\xa6\x61\x5c\xb1\xb6\x4b\x36\xb7\xe6\x62\xc6\xc9\xe6\x78\xc4\x3c\x6c\xaf\xbc\x1d\x6e\x9d\x1e\xba\xa4\x86\x1d\xb1\x3a\x25\x10\xaf\xff\x87\xf9\xf2\x16\x26\x8c\x37\x42\xdd\xb1\xa1\x2c\x3b\xc3\xbe\xba\x22\x4a\x4e\x6a\xee\xbb\xe7\xcc\x4c\x79\x6f\x18\x90\x83\x41\xaa\xd4\x21\x07\x15\x75\xc8\x81\x7f\x74\x00\xf9\x3d\x2f\x7d\xe9\xbc\x26\x09\x0b\x32\xe6\xc3\x06\xd5\xcc\x8b\x4b\xa9\x90\xd7\x73\xa2\x97\x32\xe8\x18\x1c\x62\x23\xdb\x0a\xf2\x61\xc8\x52\x9f\xef\xa6\xa5\x70\xe7\xb9\xae\xef\xb9\xae\x09\x8c\x03\x25\x3d\xa7\x71\xfa\x86\x92\x1e\x7c\xb9\x55\x37\xce\xc0\x64\x83\x94\xc0\xed\x6d\x11\xb1\xd4\x39\xe8\x51\x1f\x3b\x71\xf4\x36\x61\xec\x0f\xb6\xc3\x6b\x7d\x84\x91\x35\x83\xdb\xa7\x0f\xbf\xa2\x52\xd2\xb4\xed\x0c\x45\x78\xc8\x50\x82\x22\x8c\xfd\x48\x1d\x3a\x1e\xf9\x9e\x7b\xa4\x0e\x1b\xfb\xfe\x91\x18\xfd\x6d\x27\xe5\x7d\x57\x9d\xcc\x7a\xd8\x99\xe9\xba\x6c\x03\x9c\x6c\x08\x90\x6d\xa2\x02\x46\xa6\x21\x0d\x44\x7b\x57\x46\x22\x7a\x73\x23\xaa\x27\x6d\x1b\xa1\x6a\x47\x1b\xa6\x21\x0d\x55\xf8\x18\x2c\x59\xda\x54\x3a\x7f\xbd\xab\x06\xc3\x73\xbb\xbe\xe7\x76\x55\x31\x3c\xfb\xee\x16\x21\x0e\xac\x2b\xd4\x99\xb4\xd9\x6e\x23\xfa\xed\xd3\xad\xad\xb5\x15\xd7\x4e\x7d\x75\x4b\xc1\x84\x01\xaa\xb2\x45\x95\x7f\xe8\x95\x15\x08\xd3\xb3\xfb\x8c\x45\x69\x78\xb5\x78\x86\x14\x4a\xc8\xd3\x56\x06\x08\xa7\xa8\xc5\xf2\x9c\x01\x1a\xdc\x26\x29\x40\xf9\x5b\xb6\x81\xd5\xf2\xdf\x26\xf1\x1f\x2c\xfa\xd6\xb2\x79\xd1\x79\x0e\xa1\x2f\x79\xd1\xdb\x4a\xde\xc2\x7c\xaa\x25\x9f\xb3\x60\xc1\xa6\x7f\x72\xc9\xdf\xc1\xa6\x42\xe0\x20\x5d\x79\x7a\xe2\x75\x3d\xdf\xeb\x96\x66\xb7\xdd\xee\x16\x2e\x65\x50\xd2\x41\xd9\x1c\x30\x28\xff\xb7\xe8\xe7\xc0\xf7\xdc\x83\x46\xfa\xd9\xc2\xbc\x9e\xe4\x2a\xab\x84\xdd\xb2\x28\x93\x54\x05\x41\x62\xff\x27\x18\x4c\xf7\xdf\xe1\x78\x29\x0b\x16\xff\x43\xd5\x79\x7e\x23\xaa\x87\xbd\x1a\xf1\x1a\x48\xa0\x0b\x31\x39\x24\x19\x74\x7d\xaf\x6b\xec\x0a\xbb\xdf\x62\xab\xdb\x3f\xe0\xcd\x7e\x2c\x76\x92\x51\x63\xd8\xe4\x31\xb5\xfe\xb0\x48\x22\xcc\x80\x46\x22\xe0\xfe\xee\x1f\xe3\xd2\x08\x68\x33\x62\x76\xa3\x4d\x90\x94\x57\x54\x0e\x56\x5b\x58\xb6\xe0\xb6\x35\xb6\x0a\x65\x70\xa0\x14\x49\xa6\xbf\x29\x6f\x49\xef\xd9\xfd\xad\xec\xad\x9f\x84\xa4\x54\xdb\x4a\x7f\xc3\x0e\xba\xb7\xfd\xf0\xb2\xba\x83\x36\x4b\x50\x5b\xe7\x67\x77\xcc\xbd\x67\xc5\x41\x52\x06\xfd\x53\xb8\x74\x07\xae\xf4\x31\xeb\x0b\x1f\xb3\xbe\x42\xa5\xeb\x0a\x54\x3a\x4e\xb0\x33\x69\xa9\x39\x97\x28\x75\x53\xfe\x5c\x41\xd2\x75\x0f\x54\x5c\xa3\x7d\x11\xba\xfc\x96\x93\xf7\x00\x23\x81\x4a\x77\xb4\x2f\x62\x1b\x79\x5e\x5f\x04\x37\xf2\xfa\x87\x22\xba\x91\xe7\x0d\x30\xb9\xa3\x81\x11\x1f\xe8\x8c\x06\x3a\xca\xe0\x3d\x3d\xb3\xed\x33\x15\xad\x39\x25\xe7\xf4\xde\xb6\xef\x9d\xdb\xc3\x3c\xb7\x2c\xf2\x8a\x06\xce\xe7\x24\x5e\x86\x29\x23\x9f\xa8\x11\x22\x6f\x8d\xce\xb0\x89\x0c\x8c\x1f\x0b\xf2\x9a\x26\xf4\xda\x99\x01\x20\x67\xcd\xcc\x47\x8c\xc0\x2b\x27\x61\x69\xbc\xb8\x65\x08\xa6\x27\xca\x2a\x3a\xca\xc7\x02\x8f\x36\xc2\x33\x8f\x69\x75\x91\xbe\x21\x37\xb8\x50\x68\x2e\x9f\xf2\xbc\xc1\x64\x5e\xd6\xf7\x0b\xe3\xb4\x19\xc6\x11\x44\xb1\xc3\xb6\x9d\x39\xd9\x9c\x45\xe8\xc6\x34\xd9\x4f\xc0\x1c\x83\x9e\x6b\x67\x2d\x6b\xdf\xd9\xb7\xb0\x6d\x77\x3c\x4a\xe9\x55\x99\xfc\x7a\x9e\xc4\x4b\xb6\xb7\xbf\x6f\xa9\x90\xf0\x11\x7e\x2c\x0a\x84\xc9\x97\x4d\x95\xb8\xb2\xc8\x42\xad\x09\x00\x06\x6c\xda\x88\xa1\x8c\x32\xa8\x0e\xe6\x15\x2b\xc8\xe7\x06\xb0\x01\xe6\x5c\x46\xf8\x91\xff\xa5\x2d\x57\x99\x31\x39\x97\x93\x9d\x5b\xd4\xa0\x8d\x00\x98\xe5\x5b\xbe\xe5\xa0\xfc\x2a\x95\x47\xe4\xfa\x4d\x1d\x8e\x52\xc4\x86\x09\x87\x99\x13\xdf\xf8\x99\x33\x0b\xc2\x05\x9c\x34\xc8\xa1\x21\x0b\xb8\xe6\x7d\x47\x26\x34\x73\xa6\xf1\x32\x08\xa3\x1d\x3e\x88\xe9\x10\x85\x79\x8e\xba\x50\xc0\xdc\xb6\x3f\x72\x51\x8b\x5f\x52\x0f\x93\x16\xdf\x1f\xa4\xc3\x84\x46\x3e\x9a\xd8\xf6\xc4\x61\x51\xc6\x12\xc4\xc7\x39\x45\x11\x26\x13\xdb\x46\x13\x87\xdd\x87\x19\xe2\x33\xa2\xe5\x62\xfe\x88\x52\x60\x36\x7c\xbc\x86\x0b\x74\x87\x2c\x39\x78\x9d\xc9\x3c\x08\xa3\xdd\xc9\xc3\x64\xc1\x2c\x8c\x7d\x14\xd3\x2f\x70\x06\x20\x55\x03\x09\x59\x93\x05\xf6\xd7\x3c\xcd\x5f\xa0\x48\x0d\xca\x0c\x3f\x4e\x6c\xbb\x15\x40\x05\x44\x59\x0b\x34\xc3\x45\x71\xac\x74\x2a\xa7\xf1\x31\x0e\x50\x02\x50\xf7\x78\x87\xf7\x27\x1d\x8d\x89\xe8\x65\x8f\x64\xb6\xdd\x12\x8d\xfb\xa0\xf0\x0d\x3e\x54\xc6\x77\x29\xca\x0f\xea\x16\x92\x72\xce\x8b\x41\x88\xe9\x1b\x15\x85\xd6\xb6\x51\x46\x1f\x2a\x30\xa3\xc3\x33\x87\x2d\xc3\x0c\x59\xeb\x68\x1e\x44\xd3\x05\x9b\x6a\x52\xb5\x48\x48\x18\xf6\x51\x42\x03\x27\x8e\xf4\xf3\x44\x3d\xc7\xc3\x04\x3d\xca\xfe\xf2\x19\x49\x58\x90\xc6\x91\x1f\x16\x80\x8d\x18\xc0\x6c\x8a\x17\xa0\x97\x75\x18\x9f\xe9\xfa\x02\x59\x3f\xab\xcc\x76\xe5\xf7\xbb\x89\x51\x2a\xb8\xac\xf3\x91\xfc\x94\xe7\xbc\xee\xc3\xae\xef\x41\x4a\xa0\x9c\xdf\x62\x3e\x81\x98\xd4\x9b\x64\xce\x2d\xe7\x8d\x6f\x9a\xc0\x14\xbc\x96\xa2\x0f\x4e\x11\x88\xe7\x01\x90\x19\x13\x15\x93\xa2\x20\x1f\xbf\xad\x4b\x77\xca\xae\xd2\x75\xfd\x8b\x68\x84\x05\xdd\x94\x41\x37\xe9\x67\xb2\x81\x60\x84\xb8\xd9\x4b\x7c\x64\x0a\x90\xb1\x7e\x6b\x38\xc4\x82\xb3\xaa\xcc\xb9\x9c\xe6\x39\xe2\x3f\xb4\xe5\x12\x94\xd1\xcc\xb9\xbc\xcb\xf3\x0c\x3b\x97\xb7\x94\x91\xcc\xb9\x4c\x69\x97\xff\x04\xe2\xb5\x80\xbf\x30\x51\xb0\xb5\x98\x7c\x96\xe8\xff\x05\x79\xd7\x14\x9b\x89\xaa\x88\xab\xad\xc4\xb9\x9c\xe2\xc7\x44\x16\x94\xd0\x04\xca\x49\x60\x9a\x85\x33\x94\x80\x81\xa7\xe8\xeb\x72\x52\x94\xf1\x8a\xe5\x5c\x9d\xee\x86\x59\xca\x16\x33\x0b\x1f\xa3\x8c\x7e\xe1\xd2\xdc\xf0\xb6\x1e\xf6\x3a\xa2\x8f\x97\x77\x7e\x42\x2e\xa7\x7e\xcb\x2b\xa0\x84\x4c\x3a\x2f\x91\x14\xbd\x23\x11\xf1\x30\x49\xd1\x6f\x70\xa1\xe6\x51\x88\x1f\x7f\x93\xa6\xf7\x10\xed\x9a\xd3\xa4\xe8\x83\x84\xf7\x81\x47\x3e\xa3\x04\x82\x80\x96\xcc\x50\xbe\x6f\x16\x06\xfb\xb0\x62\xe7\x6b\x9e\xa3\x57\x95\xfe\x98\x0b\x5d\xc4\x2b\xa2\x9a\x66\x11\xeb\x72\x6e\x61\x32\x03\x8f\x4e\xd3\xd6\x98\xd7\x97\x21\x5e\x51\x81\x11\x25\xea\x2a\xaf\x55\xf1\x89\x2e\x5e\x61\xc9\x17\xc4\xd4\xb8\x29\x97\x51\x98\xeb\xe2\x52\x13\xb6\xb8\x4d\xb5\xff\xe8\x14\xf8\x00\x5c\xde\x56\xdf\x99\xeb\x77\x84\xf7\xbe\x71\xde\x26\x70\x66\xd1\x2b\x43\x72\x7a\xe4\xec\xbd\xd1\x34\xe7\x35\x5a\xc9\xf6\x97\x01\xb6\x13\x27\xbe\xa1\x0d\xb6\xc4\x7c\x6f\x45\x12\xe0\xd2\x8d\x6e\xe3\xb6\x9d\x91\x44\x32\x69\xca\xe7\x8b\xb8\xf4\x2b\x15\x9f\x88\xf8\x5b\x89\x72\x96\x0d\x6c\x5b\x5e\xd4\x1e\xa4\xb6\xfd\x59\x54\x0d\x82\xf9\x29\xd6\x5c\x10\xe8\xe6\xc6\x50\x42\xfc\x3b\x58\x57\x65\x89\xa0\x0d\x22\xd1\x66\xb8\xe1\x88\xdd\xed\x66\x3b\xca\x8e\x99\x67\x2b\x31\xea\xd4\xca\x43\xf9\x20\x43\xb8\x56\x99\xca\xa7\x35\xe5\xa3\xcd\x13\x0b\x72\xed\xcc\xe8\xeb\xc6\xb0\x9a\x94\xd2\x57\x02\x35\x56\x40\x9e\xf3\x87\x7e\x22\x5c\xf3\x17\x68\xe1\xfc\xd4\x5e\x38\x7f\x6f\x2f\x04\x58\xf5\xa3\x24\x39\xff\x15\xc0\x23\x78\xdd\x3e\x46\x06\x21\x8a\xb4\x1e\x46\x46\x4a\x28\xc1\x58\x94\x24\xc4\xf3\x3c\x57\xf9\x95\x24\xfc\x28\xaa\xdc\xa0\x7b\x7b\x5d\x31\x9c\x47\x2e\x51\x4b\x2c\x16\xf4\xae\xfa\x59\xd6\x57\xe4\x8d\xe2\x3c\x6f\x7d\xc5\xd5\x02\xa0\xa7\x1a\x23\x18\xf1\xb5\x86\x97\x02\xbd\xf0\xca\x17\x0e\x45\xb8\x9a\x65\x0b\x7d\xe5\xa2\xfe\x06\x9c\x81\x23\x7c\x19\x1d\x31\x9b\x6e\x84\x5e\xb1\x2c\x36\x30\x23\x78\x55\x58\x26\xe1\xd4\x9c\x89\xa8\x3b\x4a\x80\x08\xe1\x1a\x04\x88\xb8\xba\xf4\x09\xf2\x1f\x8d\xa5\x6c\xe2\xed\x4c\xc1\x02\x84\xd4\xf3\x4e\x69\xdc\x6e\x93\x35\x6d\x79\x3b\x89\xa0\x50\xa9\x0b\x25\x41\xbb\x4d\xb4\xa8\xc2\x6b\x0c\xa4\x67\x7e\xbf\xce\x73\xb4\x06\xa6\x3a\x4a\xc7\x94\x91\x4e\x27\xc8\x73\xb0\x1f\x28\xc4\x32\xa7\x13\x0a\x3d\xf9\x62\x87\xd9\x76\x88\x62\xe7\xb6\x42\xf4\x49\x50\xf3\xfe\xdb\xd6\x6e\x68\x6b\x58\x6d\x6b\x43\xd3\x36\x2b\x5e\x76\x5a\xc4\x57\xa6\x32\xa4\x2e\xaf\x50\x84\xc2\x6a\x85\xe4\x76\xa4\xef\x7b\x5e\x9f\x78\xde\xc0\xf7\xbc\x41\x03\x48\xb8\x04\x64\xd3\x60\xe1\xfb\xbe\xd7\xdb\x07\x14\x2d\xaf\x5f\x6e\xc7\x84\xbf\x94\x84\x65\x33\xa0\x80\x4c\x94\x84\xfd\x43\x7f\xff\x50\x21\x3a\x99\x00\xde\x02\xdd\x69\xe0\x1f\x0d\xc8\xd1\xbe\x7f\xb4\x0f\xdb\xa2\x67\x0e\xe7\x95\x0f\x5a\x0f\xac\x94\x90\x38\xad\xff\xc2\x66\x0b\xf0\x36\x7f\x2c\xb0\x70\xa0\x26\x71\xe9\x82\x00\x09\x55\x05\x69\xed\xa4\xa8\xe2\x84\x26\x5c\x85\x64\x96\x9c\x6c\xf9\xe7\x15\x0e\x4c\x02\x45\x60\x70\x38\xb4\xa6\x11\x0a\xca\x4e\x1f\x86\x28\x25\x19\x59\x6b\xb7\x33\x71\x27\xb5\xdb\xa2\xbf\x0e\xfd\x5e\x03\xe0\x39\xb4\xff\x39\x4b\xfa\x43\xd9\xfe\x9e\x60\x28\x3d\x85\x5c\xee\x55\x8d\xb4\xfa\xfb\xbc\x62\x4d\xfd\xa3\x37\x4b\x64\x41\x83\xe7\x3d\x95\xd7\x95\xbe\x21\x5c\xca\xdd\xf0\x56\x9e\xd0\x56\x25\xa7\x75\xbd\x3f\xcd\x83\xe6\x45\x9e\x4f\x2a\x1d\xac\x2b\x54\x5b\xe6\x22\x88\x4a\x85\x64\x10\x92\x60\xd3\x42\xa8\x37\x64\xbe\xe9\xcd\xde\x1d\x83\xb4\xcc\x45\xf7\x85\x76\x55\x97\x03\x06\x91\x84\xab\x16\x58\xf2\x04\x48\x98\x5e\xb9\xbe\x01\xd0\xcb\x84\xbd\x95\x57\x49\x43\x80\xf6\x29\x9e\x74\x37\x9f\x90\x0c\xe0\x3c\xe1\x71\x6f\xcb\x63\x92\x41\x1d\xe1\x9d\xfe\x53\xef\x90\x6c\xd4\x1b\x0b\xb4\xdd\x19\x1d\x45\xeb\xc5\xa2\xf4\x44\x05\x56\x26\x61\x02\x66\x00\x1b\xce\xee\x50\x2a\x13\x18\x99\x61\xf1\xdd\x5c\xec\xce\xa5\x18\x31\xa5\x09\x8a\xd1\x1c\x0f\xe7\x7e\x5d\x39\x83\xc9\xaa\x36\x57\x94\x5c\x37\x25\x25\x2e\x73\x8c\x56\x78\xb8\xf2\xa7\x9b\x64\x6c\xb8\x54\x55\x4c\x7a\xa4\x52\x4b\x1d\x93\xf4\xb6\x28\x20\x8f\x8e\xaa\x00\x3b\x3d\xe5\x98\xdc\xaf\xc0\xe7\x6c\xcc\x59\x49\x3f\x4e\xf5\x74\x03\x65\xce\x0c\x3d\x16\xc4\x53\x7e\x56\x5e\x81\xcb\x9b\x6e\x7d\x6e\xd7\x8e\x46\x0c\xfa\x4b\x48\x2c\x29\x30\xa1\x21\x12\xa0\x58\x11\x8a\x85\x24\xa9\xa4\x16\x67\x26\xdf\x24\x2d\x57\xca\x90\x81\x56\xf1\x7a\x85\x72\x03\x14\xa6\x4f\x9b\x93\x5e\x9f\xb8\xf4\x9e\xb1\xb2\x91\x66\x96\xb2\x7b\x94\x0e\xd0\x6c\xc6\x82\x65\x8d\xcd\xc8\x14\x46\xb7\x88\x4a\x5e\x0e\x28\xb8\xda\xb4\xc2\x4a\xc0\x30\x6c\xdb\x22\xa7\x5d\x36\xca\xc6\xd5\xb3\x0f\xa3\xf6\x50\xe3\xef\xf1\x05\xed\x1d\x56\x44\x39\x56\x42\xaf\x24\x15\xe8\x15\xa9\xf6\x8a\x14\xb8\x0a\x1d\x8d\xe1\xbc\x58\x04\x62\x53\xf1\x5f\x33\x5c\xec\x30\x74\xd8\xc7\x28\x2a\xf5\xa0\x75\x39\xb1\x44\x68\xd9\x99\xc6\x8f\xca\xf3\xed\x32\x3c\xd5\xc1\x75\x25\x83\x90\x94\x21\xc5\xce\x69\x1c\x41\xd0\xa6\xe2\x6e\x1e\x2e\x18\x6a\x21\xc4\x68\x36\xd2\x08\x2f\x00\x93\x2d\xeb\xae\x85\x6e\x99\x03\x93\x1f\x7b\x85\x04\xe4\xaa\x8c\x90\x8c\x09\xd5\x68\x37\xb6\xab\x84\x4d\x39\xb7\x0c\x3a\x39\xec\xfb\x87\xa0\x12\xee\x6d\x3b\x02\x73\xbd\x8d\xe9\x23\x66\x8d\x59\xfa\xd6\x08\x6c\x26\xc1\x63\x93\xac\x05\xe5\xe3\xa7\x69\xe0\x39\x9b\x26\xe5\x2f\xd9\x48\xb3\xd5\xc3\xaa\x66\xdb\xb0\x68\xf3\x64\xaa\x56\x87\xfe\xb6\x03\x32\xb7\xee\xb4\x79\xe0\x49\x9f\xf5\x6e\x75\xc1\xe4\x95\x0b\x51\xb8\x51\x39\xd3\x0b\x2b\x24\xa9\xc8\x7a\x4d\x16\x64\xd2\xb4\x10\x85\xbe\xb9\x0c\x29\xa6\x19\xa0\x10\x53\x4a\x27\xc3\x70\x94\x8e\x7d\xb4\xa6\x19\x38\x81\xa6\x18\x0f\x23\xb4\xd6\x11\xfd\x86\x6b\xc7\xa4\xc2\x16\xa5\x6b\xe7\x9a\x65\x43\xf8\x2b\x98\xf1\x44\x85\x5c\xf2\x63\xb4\xa0\x09\x0a\x31\x1e\x32\xb4\x20\x29\xd1\x4f\xea\x67\x95\x1b\xfd\x25\x8d\x2c\xf5\xe9\x52\xff\x79\xe7\x9c\xb2\x47\xe6\x41\xda\xec\x3c\x28\x26\x67\xcd\x6c\xb0\xff\xa4\xb7\x8e\xe2\x08\x72\x25\x32\x4f\x0d\x37\x0b\x36\x9f\x6e\xb3\x20\x24\xad\x88\x0b\xe3\x0d\x33\x08\x2a\xf3\x3c\x46\x55\x59\x5c\x7c\x17\xfd\x8d\x3d\xc0\x59\x9a\xa7\xce\xd2\x3c\xcf\xf7\x3c\xe3\x2c\xad\xff\x8c\x8c\x56\x69\xdd\xc6\x11\xd6\x66\x99\x1b\xaf\x54\xdb\x09\x08\xf3\xe5\xaa\x13\x09\x7b\xc9\x72\xc9\xc9\x36\x96\x9c\x7a\x07\x3c\xe9\x9f\x28\x8e\x8c\x76\x12\xdb\xde\xa8\x58\xba\x6d\x8e\xc2\xf8\x3b\x93\x39\x9b\xdc\xc0\x8d\x59\xbf\x04\x22\xc2\xf3\xd4\xb2\x8a\xd1\xe6\xaa\x58\x3f\x99\xea\x6f\x59\x03\x95\x7c\x00\x33\x3a\x52\x33\x3a\x94\x33\x3a\x96\xcd\x00\x04\x3e\x4f\x06\xed\xe1\xfd\xbf\x96\x07\xb4\x22\x32\x56\xb5\x4d\xe6\xd4\x8e\xf9\x8c\x16\xa5\xcd\xc8\x9c\x4c\x37\x27\x77\x7f\x18\x1b\x93\xbb\x37\x26\x2b\x9a\x38\x33\x94\xa2\x18\x93\x05\xc8\x95\xad\x15\xa8\xda\xd7\x68\x4e\xb9\x88\x50\xfa\x63\xa3\x39\x60\xf6\x4d\xf1\xce\x8a\x06\xc8\xc5\x45\x38\x43\x21\x5a\x95\xa1\x3c\x41\x43\xef\x51\x4a\x57\x46\x5c\xce\xd6\x1a\x4d\xab\x2e\xdf\x33\x28\x71\x4a\x16\xe2\x8b\x19\xe7\x0b\x79\x3e\xe3\x1d\x9d\xe7\xf0\xfd\x4c\x7f\x5f\x7e\x38\x13\x5c\x85\x4e\x48\x26\xbe\x26\x33\xac\x62\x49\x89\xfb\x00\xb9\x64\xa2\x17\xb2\x96\x5b\x54\x2c\x75\x5a\xbc\x5a\x10\xf8\x1f\xc1\xaf\xe0\x44\x53\x32\xc1\x06\x9a\x4e\x8d\xdd\xa8\xa0\x53\x5b\xd8\x4e\x29\xf2\xf4\xb7\x1c\xb9\x6a\x6f\x14\xc9\xb6\x85\x5b\x49\x58\xba\x9d\x00\xef\x96\x23\xbe\x0f\x03\x9e\x39\x5f\xd8\xf5\xd9\xfd\x8a\xac\x69\x4a\x16\xd4\x70\x70\x27\x13\xba\x17\xec\x5d\x93\x99\xf8\x99\x83\xf6\x28\x45\x13\xdc\xa2\x74\x02\x3b\x02\xe1\x6d\x8e\x5a\xf3\x3c\xdf\x86\x4c\x31\xd3\xc7\x49\xe0\x55\x6e\xe1\x31\x6d\x79\x44\xe4\x32\xc9\xf3\x14\xcd\x30\xa5\xb3\x3c\xb7\xf6\x82\xbd\xd0\x6a\xd1\x14\x4d\x88\x15\x5a\xb8\xc0\x18\x3f\xd6\xe1\x9f\x85\x2a\x95\x8b\x10\xa6\x27\x43\x4a\x42\x81\x42\x37\x31\xb0\x70\xd4\xa8\x44\xb6\x1d\xda\x36\xab\x1c\x72\x51\x9a\xda\xf6\x64\xc8\xfc\x04\xcd\x41\x57\xb5\x06\x71\x6e\x32\x64\x4e\x1a\xaf\x93\x09\x03\xbf\x6d\x7f\x8d\x50\x48\x2b\xa8\x00\x29\x36\x5f\x09\x79\x26\x81\xc2\xa0\xf2\xf9\x5e\x42\xa0\x44\x2d\x48\x6a\x38\x44\x54\xd1\x82\x01\xc9\x39\xe5\xfc\x36\x25\xec\x59\xef\x7c\xb5\x0d\x1b\xb1\x71\xcd\x03\x3d\xc3\x8f\x3c\x95\x0a\xdf\xe4\x15\x0d\xd1\x1a\x93\x25\x75\x8f\x57\xea\x8c\x65\x79\x8c\xa7\x68\x35\x5a\xc2\x19\xcb\xa2\xd2\x01\x29\x31\x71\x0c\x16\x86\x5f\x82\xa0\x05\x8b\x37\x40\xa9\xe0\x64\x12\xae\x00\xcf\xcb\x63\x65\xa5\xef\x50\xa0\x19\x86\x67\xc2\xfe\xbe\xbf\xbf\xaf\xfc\x13\xc0\x33\xe1\xb0\xeb\x1f\x1a\x86\x52\xfd\x6f\x81\x09\xf3\xba\x2e\xde\x01\x26\x85\x1e\xb3\x20\xe1\xdd\xa3\xeb\x08\x2d\xe0\x9d\x36\x8b\x93\x09\x9b\xfa\x59\x8b\xd2\x3d\x67\xcf\x61\xf7\x6c\x52\x90\x47\xfe\xe3\xab\x83\x7c\xd7\xf7\xba\xae\xc1\x2e\x37\x0c\x8f\x80\x92\xad\x6b\xab\xc5\xb3\xb8\x76\x66\x8b\xe0\x3a\xb5\x6d\x05\x3d\x21\x8a\x34\x8f\xe4\xe1\x85\x2d\xf0\x0a\x30\xb5\x4c\x0b\x31\xe8\x0a\xdd\xf0\xc1\xb7\x80\x65\x71\x2e\x9c\x28\x60\x29\x10\x03\xf7\xe5\xce\xce\x3b\x82\x1e\x19\xe8\x29\x45\x4c\x0d\x97\x38\x5a\xd4\x51\x91\x36\x8e\x1e\x69\x19\xa3\x5b\x00\x8e\x66\x32\x56\xa5\x9f\x8d\xe2\xf1\x4e\x9d\x85\x45\x43\x05\x3a\xa2\xa2\x4e\x8a\xae\x40\x19\x1e\xc5\x63\x24\xad\x6f\x41\xb1\x57\xe7\x47\x31\x4d\x51\x40\x84\x7a\x59\x9c\xc3\x01\xc8\x68\x89\xd5\x07\xfc\x75\x47\x00\x51\x81\xc5\xd8\x42\x07\x88\x56\x9f\xb4\xd6\xce\xf5\x22\xbe\x0a\xb4\x42\x22\x44\x6b\xbe\x6c\xdc\x42\x14\xde\xb5\xb3\x8e\xc2\x49\x3c\x65\x3b\xeb\x12\x55\x90\xba\x7a\xe6\xcd\xc8\x9c\x8e\xc6\x64\x4a\xdd\x63\x09\x90\x83\x66\x54\xe4\x80\x8f\x45\x25\x57\xaa\xc8\x19\xa8\x27\xe6\xa3\xe9\x98\xae\x08\xd8\x84\xaf\x6c\x1b\x99\xf9\x46\x68\x41\x12\x33\x05\x73\xee\x4f\xa6\xed\x76\x61\xd8\x80\x4f\x87\xbc\x28\x7f\x5e\x8c\xa5\xf4\x73\xe4\x7b\x5e\x19\x8a\xa1\xb7\xef\xf7\x34\x7f\x1f\xf8\xfb\x03\x20\x88\x6f\x31\xff\x2f\x09\x42\x43\x03\x79\xca\xfe\x5f\x22\xd1\x73\x12\x09\x24\x89\x90\x54\xa2\x16\x06\xf7\xa4\x04\x30\x24\x0b\xd3\x33\x60\x42\xf7\x2e\x5e\xa0\xd1\x0b\xfb\x7f\xff\x30\xce\x2f\xa6\x17\xd3\x61\x7e\x32\xfa\xf5\x74\xfc\xf2\x14\x0b\xb6\x5f\x7b\x8a\xf7\xae\x15\xe5\x25\x6c\xb5\x08\x26\xcc\x22\x5d\x93\xf6\xe6\x64\x4a\x56\x0d\xb4\x67\x84\x21\x96\xd4\x17\x6e\x52\xdf\x7c\x93\xfa\x42\x6d\xea\x4a\x22\x4e\x7f\x53\x19\x9f\x5c\x0c\x59\x84\xc1\x02\xdf\xa4\x3c\x55\xd0\x82\xae\xd0\x54\xd2\x1e\x11\x31\xae\x16\x15\xea\x5b\x18\xd4\x37\x11\xd4\x37\xab\x50\x1f\x99\x37\x1d\xf5\x24\x3b\xf3\x3c\x47\xda\x87\x20\x91\x51\x50\x6f\xe9\x44\xd2\x29\xc0\xfd\x8a\x3a\x5c\xd3\x89\xa6\xcf\x89\x49\x9f\xda\xbb\xf0\x81\x8e\xc6\xc7\x92\x10\xaf\x68\x80\x26\x64\x06\x55\x15\x5d\x43\xaf\xb0\xf0\x4e\x0c\x67\xe8\x41\x6c\xde\xaf\x30\x69\xdd\xca\x54\xa0\x51\x59\x8f\x2b\x4e\xbc\x70\xb6\x5f\x16\x13\xa3\x19\x89\xcc\x14\x4c\xae\x31\xd6\x65\x5f\x92\x3b\x6a\x59\xe4\x8c\xba\xe4\x9e\xba\xc7\xf7\x27\xca\xd9\xed\xf8\xbe\xdd\xc6\x8f\x57\xf4\x61\x74\x3f\xd6\x33\xe9\xbc\x52\x12\x79\x45\x53\xb4\x46\x21\x92\xb6\x19\x98\xcc\x34\x38\x9d\x8b\xc9\x27\x3e\xe9\x6e\xa8\x77\x7c\x73\x72\xa5\x32\xbd\x69\xb7\xf1\x27\xf3\x18\x81\x52\x8a\x2e\xe9\xd5\xe8\x66\x8c\x87\x97\xbe\xcc\xfd\x52\x47\x95\xbd\x72\xae\x93\x78\xbd\x82\x83\xda\xb9\xe8\xa1\xaf\x74\x74\x3e\x56\x01\x2c\x3e\x91\x57\xbc\xb3\x34\xa5\xbc\xb6\xed\xaf\x22\xfb\xd7\x22\x8b\x2f\x7a\x8c\xa4\x6e\x4f\xea\x28\xbe\x62\x29\xc5\x7d\xa1\x4b\x74\x4e\x66\xe4\x15\xf9\x44\x5e\x73\x1a\x79\x75\x4a\xcf\x6c\x1b\xdd\xb5\xe9\x4c\x1e\x26\x9f\x91\x57\xb8\xfd\x85\x9c\xd1\x57\xed\x73\xd5\x40\x35\xd7\xef\xda\xfa\x2d\x5c\x8c\xcb\xf0\x8d\x4b\xd0\x98\xca\xb8\x8d\x4a\xd1\x1d\xb5\x59\x89\x8c\x10\xaa\xcb\x39\x9d\x6d\x50\x7c\x6c\xdb\x28\xa6\x09\x97\x8e\xe7\x74\x82\xc9\x54\x9d\xcb\xcf\x4b\x2a\x4f\x54\xc6\x93\x1d\xa9\x8d\x0d\xca\x58\x11\x42\x21\x6b\xbd\xb0\xa4\x82\xd4\x7a\x61\x81\xc6\xd4\xb2\x55\x8a\xd4\xcf\x5a\xff\x5b\x27\x64\xda\x54\x3f\x12\xea\x55\xeb\x87\x8d\x67\xa9\x7c\x72\x62\xf9\x13\x1a\x8f\x02\x99\xec\x91\x8e\x87\xc7\x35\x37\x5a\xa1\x78\x6d\x07\x3b\x32\xee\xe0\x4c\xcd\xba\x04\xc4\xf1\x53\x19\x46\x7d\x4e\x17\x68\xb6\xe7\xb9\x5a\x4b\xca\xdf\x9d\x0f\x13\x7f\x7e\x42\xd7\xc3\x32\x48\xf6\x68\xde\xf1\xc6\x43\xdd\x46\x0f\xfb\x22\xa9\x6d\x26\x25\xc5\x84\x86\xa3\x59\xc7\x1b\x17\x75\x83\xf9\xc9\xd0\xb2\xfc\x49\xa1\x64\x6e\xc5\x91\xb7\x04\x6c\x6d\xe6\xd0\xdf\xe2\x7d\xa0\x39\x74\x57\xed\xb5\x8c\xa5\x3a\x65\x41\xb2\xb1\x56\x4b\x22\xf9\x77\xd6\xea\xf0\xfb\xd6\xea\xf0\xe9\xb5\x3a\xa4\x01\x8a\xcd\xb5\x3a\xac\x70\xcb\xd0\xe0\x96\xa9\xe0\x96\xeb\x2a\xb7\xe4\x1b\x07\xcd\x69\x76\x12\xb4\x20\x10\x77\x3b\x35\xf9\x9e\x5a\xb6\xb9\xe8\xbb\x2e\x0f\xdd\xcd\x97\xc8\xa2\xfe\xd5\x42\x01\xa3\xd3\xc9\xb0\xe3\xf9\x13\xc1\x71\xea\xab\xab\xb4\xd7\xad\x8f\xda\xb7\xc0\x33\x1e\x56\xd4\x0e\xd2\xc8\x2f\x94\xab\xa9\x01\xed\xa9\x97\x55\x21\x94\xc2\x16\x79\xbf\x8f\xd5\x8a\xca\x17\xd7\x09\x1d\x8d\x81\x09\x91\x19\x6d\xad\xab\xea\x76\x18\x08\x03\x4d\xc4\x7a\xe0\x7b\x1c\x4d\x1d\xab\x45\x98\xd5\x16\xd3\x35\x5f\x4e\xa5\x94\xa2\x1d\xc7\xa9\x35\xb1\x28\xb5\x82\xab\xab\x89\x72\x57\xde\x43\x57\xf8\xe5\x1e\x1e\x79\xe3\x3c\xef\xb7\xa8\x95\xb1\x34\x2b\x9f\x0d\x7d\xbc\xc7\xe7\xa8\x64\x3a\x00\x61\x62\x05\x57\xe6\x0b\x01\x7c\xaf\x5f\xe0\x79\x38\xe5\x73\x67\x88\xf9\x3f\xe3\x05\xf3\x29\x46\xe5\x93\x53\x2f\xcf\x2d\xfd\xc8\x19\xea\x07\xc3\xcd\x05\x3a\xda\x10\xf5\x4a\xff\x16\x61\xb4\xa4\x70\x00\x46\x63\x09\xdb\x56\x22\xb5\xcd\x95\x55\x0c\xcf\x4e\xaf\x51\x30\x99\xc8\x9a\x2f\x3e\x0b\x8a\x98\x13\x5e\x47\x71\xc2\x5e\x07\x29\x1b\x5a\xa1\xe5\x5b\x16\x6e\x23\xe6\x2c\xd7\x8b\x2c\x5c\x84\x11\x1b\x5a\x4b\x9d\x28\x97\xe9\xa1\xb5\xd6\x49\x69\x16\x4e\x6e\x1e\x86\xd6\x03\xa4\x40\xe8\xdc\xa9\x19\x07\xb0\x1c\x4a\x3f\x39\x3d\x3d\x75\xc9\x8a\x1a\x33\x4e\xed\x12\xc9\xa2\x6d\x5d\x5b\xf8\x18\x85\x34\x15\x95\x5e\x11\x30\x37\x6c\x21\x14\xd3\x95\xb1\x38\x9f\xce\x40\xdc\x84\x25\x2c\x92\xcc\x75\x46\x42\xb9\xc0\x62\x12\x1a\x88\xd4\x32\xf5\x44\x21\x0c\xdb\xf6\x44\x2e\x72\x6b\x12\x2a\xc6\x8c\x39\xd1\x86\x23\x77\xac\x96\x9b\x19\x8d\x89\x82\x2e\x38\xa5\x53\x2e\x02\x1b\x15\xe0\x8c\x56\x64\x6b\xdb\x46\xb2\xc6\x65\xdf\x9d\x51\x4a\x55\x81\xc3\x56\xc0\xdf\xe2\x94\x86\x2c\x0b\xe7\xb9\xac\xb8\x65\x61\xbf\xde\x06\x8c\xcb\x52\xa7\xc3\xb5\x5e\x6a\xa6\xd8\x5f\x17\xbe\xe5\x2a\x82\x91\xeb\xb3\xdb\x44\x34\x59\x03\x4c\xa9\xa0\x92\x6c\x38\x1a\xfb\xf3\x1a\xc0\x6d\xe1\xcf\xc9\xf7\x4a\x9f\xeb\xe7\xa5\xcf\xd5\xb3\xd2\x67\xa6\x16\xfc\x29\x5a\x29\xe9\x33\x23\xab\x16\xa5\x22\x10\x44\x5a\xe1\xaa\x69\x65\x07\x94\x08\x0d\x46\x85\xab\x2e\x69\x84\xd6\x44\xd0\x14\x26\xb7\xe5\x86\x87\x5c\x53\xb4\x6e\xa4\xf0\x75\x13\x85\xaf\x37\x29\x7c\x26\x48\xfb\xda\xc2\xe4\x01\x28\x77\x89\x66\xc3\xb5\x6f\xfd\x8a\x86\xbe\xd5\x5e\x4b\xfa\x6d\x5b\xd8\x22\xd7\x98\x5c\x99\x28\xc3\x06\xe9\x67\x9c\xf4\xd5\x32\x7f\x55\x99\xb1\xb0\xf2\x56\x4f\x8b\x76\x25\x27\x0f\xd0\x03\x99\xe0\xe1\x68\x32\xf6\x47\xa5\x8c\x79\x49\x5d\x72\x47\x5d\x72\xc6\xa5\xe2\xbb\x13\xf5\xed\x31\x7e\x7c\x30\xc8\x74\x36\xbc\xf3\xc5\x51\xd7\x3d\x39\x87\x9c\x66\xc3\x89\xaf\xcc\xff\xee\xb0\x29\x40\x9f\xe7\x39\xba\xa7\x0b\x14\x23\x23\x07\xde\x74\xd7\xbf\xc3\x98\xe8\xda\x61\x4a\xe9\x25\xbe\xa3\x21\x9a\x90\x3b\x72\x8b\x75\x80\xe4\x33\x41\xcb\x2a\xf7\x4b\xc2\x3f\x3b\x53\xb8\xde\x65\x8b\x77\xcf\x74\x2b\x5e\x51\xef\xf8\xd5\x09\x55\xf2\x62\xc7\x3b\x7e\x25\x10\x42\x64\x5e\xe7\xa3\x57\xe3\x6d\x79\xdc\xd1\x4b\x7a\xaf\xe0\x40\x76\xeb\x85\xf3\xa2\x37\xd6\x3d\xa1\xd7\xd0\x76\x26\x4d\xbb\x4c\xa1\x8d\xe1\x6b\xa2\xd0\xc0\xc0\xca\xd8\x7f\x62\x65\x64\xa8\xdb\x3f\xc2\x1b\x62\xcd\xfe\xbe\x8c\x7f\x06\x47\xcc\x7b\xce\x5e\x89\x75\x1a\x57\x4c\x9c\xa5\x36\x69\x53\x67\x52\xba\x31\x80\x85\x66\xb1\xb3\x45\x69\x68\xed\x05\x7b\x57\x56\x4b\x79\x61\x3e\x4a\x8d\x9b\x15\x58\x04\xd4\x2e\xbe\x75\x65\x15\xb8\xc0\xc3\xb8\x6e\xd8\xc4\x68\x56\xb1\xf2\xb2\xf6\x74\xc8\x3b\xcd\x92\xad\x3d\x4b\xa9\x6f\xc2\x68\x97\x0d\x99\x50\xf6\xf8\xad\xc8\xb6\x2b\xda\x3e\xd1\x00\x05\xae\xca\xb0\x86\x93\xc4\x7e\xd9\x14\x5e\xcb\x28\x58\x32\xdb\x8e\x1b\xb4\x9f\xa1\x61\x45\x69\x22\xb1\x82\x06\xaa\xdb\x3f\x92\x63\xb4\xa1\x37\x83\x31\x1a\xfc\x09\x90\x9a\xe7\x2c\xfb\x1f\x83\xd4\x0c\xa6\xcd\x11\x92\x2a\x78\x98\xbc\x02\x98\x30\x5a\x22\x62\x32\x40\xc4\xdc\x0e\x87\xd9\xad\x87\xfb\xaa\x11\xa7\xd7\xe3\x0d\x0b\xa2\xc9\xbc\xe2\x93\xd8\xd0\xb6\xac\xde\x38\x4e\x41\x12\x17\x35\x53\xdb\x81\x9e\xe7\x7b\x3d\x51\xee\x53\xa7\xf2\xaa\xdc\xab\xf0\xfa\xfb\x3a\x54\x7c\x61\xf1\xff\x1a\x8a\x7c\x4a\x07\xaa\x8b\x5c\x84\xd1\xcd\xf7\x16\x2a\xbe\xd9\x56\xec\x53\x7e\x4c\xba\xd8\x78\xf1\x8c\x43\xde\x66\xa9\x5b\x4b\xfc\xae\xe8\x56\x5e\xf7\x08\xe2\xfa\x28\x40\x62\xc5\x35\x1e\xf9\x12\xf6\x39\x0e\xa3\xec\xd5\x93\xc1\x0c\x34\x3a\xf9\x91\xef\x75\xcb\x78\x77\xdd\x6f\x0a\x59\x55\x42\x70\xab\x5d\x5c\x0f\x62\x9c\x5a\x96\xc3\xa2\x69\xfa\xf7\x30\x9b\x57\x01\xb9\x7b\x18\x59\xea\x89\x85\x8d\xda\xaa\xc4\xed\x7e\xe0\x8c\x98\x5f\xc6\x1b\xa7\x67\x5b\x42\x4d\x05\x34\x31\xa2\x97\xa4\xe5\xda\x1c\x0f\x03\x5f\xc7\x2a\x01\x25\x42\x60\xec\xd4\x98\x69\x65\xa7\x24\x9b\x35\x49\xb1\xaf\x37\xf9\x1d\x25\xaa\x91\x94\x2f\x8a\x6b\x35\x8e\xae\xef\xf5\x6a\xd1\x48\xc8\x7e\xcf\xdf\xef\x41\xb7\x3e\xb5\x39\x56\xd4\x34\x0b\xef\x9f\xf3\xef\xdc\x20\xa7\x2c\xdb\x4e\x4f\x4f\x6d\xed\x74\x99\x71\x94\x4d\xe2\xc5\xf7\xb3\x09\xfe\xa1\x45\x2c\xf9\x6d\x03\xab\xd8\x7f\x7a\xfd\x2c\x8b\x4f\xc3\xe7\xdc\xba\xb7\x96\x2e\x3e\x6d\x2a\xfc\xb9\x03\xe9\x1e\x04\xb8\x94\xf0\x6f\xb3\x24\x5e\xbe\x96\xc0\x64\x24\xac\xa4\xaa\xd9\x64\xda\x17\xb6\x5a\xa1\x6d\x7b\x2d\xad\xa5\x32\x09\xba\xf2\x51\x85\xaa\x35\x94\x06\x09\x85\x69\xf1\x66\x4c\x0e\xea\x1e\xc7\xa7\xc1\x31\x1c\xc1\x66\xb4\x5d\x45\x04\x25\x09\xca\x88\xe7\x79\x7d\xcf\xf3\xb0\x11\xd6\xd5\xc0\x06\xc9\xda\xd6\x6e\x98\xee\x46\x71\xb6\x1b\xec\x0a\x80\x73\xce\x0e\x76\x57\xbc\x32\x16\xde\x09\xa5\x7d\xd3\xc9\xfe\x60\xd0\xdb\x1f\xf2\x8e\xf5\x23\x34\x18\x74\x8f\xf6\xdb\x08\x65\x1d\x00\xde\xdc\xc7\xa7\xa7\x9e\x8b\x49\xf6\x9f\x9e\xdb\xed\xb7\x07\xfb\xbd\xae\x8b\xb5\x4e\x2f\x84\x70\x4c\xc8\xa0\x37\x11\xaf\xa2\x64\x20\xdf\x15\x1c\xa9\xe7\xe2\x4d\x4e\x11\x46\x93\xc5\x7a\x0a\x41\xa6\xca\x8e\x55\x89\x0d\x4c\xad\xd5\xfa\x97\x0e\x4c\x61\x7c\xac\x9d\xe2\xbe\x27\x10\xa1\x31\x95\xeb\x53\xf8\x5b\x96\xbe\x30\x0b\x16\xe1\xe4\x19\x27\xe2\x0d\x6a\x0e\xb7\xcf\xe1\x6f\x3b\x00\xe4\x6b\x01\x1c\x02\x1e\x0e\xb0\xdc\x7c\x95\x5d\xd7\x64\x16\xa7\xd9\x5d\x69\x1b\xb7\x19\x8c\x4c\x87\x1e\x2b\x2d\xe6\x42\x1d\xb9\xe7\x54\xa3\xbc\x0e\x9b\x2d\xdc\x7c\xc4\x25\xcd\x84\x44\xba\x8c\xb6\x0e\x59\x46\x36\x4c\xda\x70\x65\x39\x82\xf0\x61\xd0\xfe\x6f\x59\x85\x9f\x5f\xfb\x9b\xa5\x9c\x79\xc2\x66\x8d\xdc\xa3\x1e\xaa\x67\x73\xdd\x73\xcb\xf3\x25\x65\x6d\xa3\x29\x35\x09\xee\x9a\x27\x3e\xdf\xbf\x3a\x49\x70\x07\x9b\x6b\x63\x75\x6a\x64\x05\xa3\x31\x49\xa9\x7b\x1c\x9e\xa6\xc7\x58\xba\xbf\xa8\x7d\xef\x28\x05\x80\x60\x92\x9e\xc4\xb6\x5d\x7d\x56\x52\x75\x3a\x2e\x9d\x76\x82\xfa\xa4\xdd\x12\x3a\xab\x5b\x0f\xf4\x53\x37\x64\x32\x05\x8d\x84\xad\x58\x90\xf9\x02\x5b\xab\x02\x52\x53\x66\xf7\x2d\xab\x5e\xba\x0c\x16\xcf\xb8\xb9\x6f\x8c\x9e\xfc\x66\xcb\xa4\xf9\xae\x90\x33\x0d\x32\x4c\x9a\x05\x49\xb6\x45\x8a\x29\x9f\x55\xb8\x53\x99\xfc\xa4\x24\x53\xf9\x3a\xa6\x12\xb7\x9b\x4b\x22\xdf\x28\xd6\x68\xa2\xc1\x24\x78\x52\x66\x09\x48\x5c\xca\x2c\x31\x89\xdb\x81\xfa\x92\x52\x1a\x7c\x93\xcc\x52\x0f\x4a\xd3\x3c\x7a\x59\x12\xde\x3c\xb3\x7c\x6f\x0e\x9f\xfc\x68\xdb\xf8\x3d\x15\x27\x50\x17\xbc\xbe\xfa\xde\x52\xd7\xdb\x65\xef\x7a\xc4\x9b\x2d\x45\x7e\x67\xec\x05\xf1\xc5\xb6\x22\x9f\x5b\x4f\xfa\x18\x09\x9c\xda\xef\x2a\xb3\xa7\x4b\x02\x5c\x4c\x28\xe9\x5b\x16\x91\x3a\x48\xef\xe0\xb0\x6a\xcd\xea\x79\x32\x0c\xed\x51\x1f\x3b\x7f\x3b\xfb\x27\x68\xf9\xf7\x25\x4a\x80\xd7\xdd\x17\x30\x01\x5e\xb7\x2f\x70\x02\x20\xe6\xb9\x0a\x9c\x0e\x48\x01\x10\x03\x7e\x0a\x17\xae\xc0\x0a\xd8\xf7\x04\x54\xc0\xc1\x11\x06\x94\x80\xde\xa1\xc0\x08\x38\xf4\x24\x46\x00\x67\xb3\x57\x0a\x20\xf8\x52\x19\xe0\xdd\x49\x27\x95\x33\x2a\xc0\x6d\xc8\xbd\x32\xde\x3b\x97\xd6\x7c\xaf\x24\xda\x08\xf9\x44\xef\x9d\x19\xb9\xa1\xe7\xce\x8c\xbc\xa6\x67\xe0\xf3\x9f\xa9\x10\xec\x5f\x68\xe6\xfc\xf5\xfc\xd3\x47\xf2\x99\x7e\xb1\xed\x2f\x8e\x80\xf6\x0d\x67\x0f\xe4\x03\x9d\x21\xeb\x72\x1e\x4e\xa7\x2c\xb2\x30\x79\xc3\x6f\xab\xe1\x72\x3e\xd2\xc7\xc2\x59\x49\x73\xe7\x77\xe9\x99\x30\xbe\xbe\x5a\x30\xf2\x1b\x5d\x23\x2b\x85\x12\x3a\x09\xbb\x0e\xd3\x2c\x79\xb0\x30\x79\x57\x26\x73\xb9\xe6\x3d\xbf\x8d\x57\x9d\x32\xe5\x2d\xdd\xc0\xb4\xf8\xa3\xe9\x78\xfd\x2b\xf9\x91\x66\xce\x7f\x89\x97\xc9\x5f\x68\xeb\xc7\x3c\x6f\xfd\x58\x7e\x55\xbd\x83\x78\xce\xaf\xe7\xe1\x62\x4a\x7e\xa6\x91\x6d\xa7\x0d\x0a\x98\x83\x16\xbd\x43\x37\xe8\xb1\x80\x55\xf1\xb1\xd9\xbc\xea\xa6\x5c\x37\xe5\xda\x7d\x50\x60\x87\x33\x12\xfe\x17\x57\x34\xd1\xa5\x32\xf9\x13\x7a\x4b\x32\xbc\x13\x69\xb3\xff\xb7\xa3\x6c\x4c\x6e\xe4\x4b\x24\xb2\x6d\xd6\xa2\xf4\xad\x6d\xdf\xf0\x17\x49\x84\x0b\xff\x86\xfc\xbd\xc1\xed\xf9\xdd\x88\x8d\xe9\x1d\xfa\x6a\x38\x95\x68\x7c\x39\xe7\xf2\x86\x32\x92\x15\xe4\x77\xfa\x87\x6d\xcb\x4e\x36\x3a\xcc\x51\x01\xe6\x87\x9b\xf3\x68\xe3\x6d\x56\x34\xe2\x96\x9a\x3a\xaf\xaf\x05\xf9\xa5\x0a\x71\x18\x55\x5c\x3c\xdf\xda\xf6\x2f\xe8\x3d\x24\x93\x5b\x10\xb1\xe8\x95\xf0\xb7\x26\xb7\x28\xc2\x24\x41\xef\x48\x86\x87\x28\x72\x98\x26\x1b\x00\x28\x27\x1f\xb0\x6d\xb3\xd1\x87\xf1\x28\x1b\xdb\x36\x92\x57\x54\x44\xef\xbd\x43\x91\x36\xf2\xbf\x5a\x30\xff\x12\xb9\x10\xb7\x0f\x63\x5f\x7e\x9b\xe7\xbc\x63\x3f\x90\x4b\xe4\x91\xc7\x02\x63\xa2\x33\x70\x31\xf9\x59\x56\x14\xfb\x37\xf2\xaa\x20\x3f\xd5\x4d\x07\xf9\x52\xa2\x01\x2c\x49\x44\x57\x80\x09\x90\x61\xce\x09\x5c\x12\xeb\xb3\x8d\xe3\xf8\x34\x3c\xc6\xbf\x20\x2e\x21\x46\xa3\x90\x6f\x4e\xb2\x51\x52\x86\x75\x64\x05\xf9\x67\xc3\x20\x7e\x34\xcf\x20\xe8\x15\x82\xa0\x73\xa5\xbb\x88\x74\x0a\x7d\x6b\xdb\xbc\x87\x98\x00\x10\x7e\x4f\x18\x06\xfb\x49\x94\x01\xbc\x9c\xd4\x5e\xc0\xf5\x3b\xb8\x90\x69\xbc\xef\x20\xa8\xde\x87\xf1\x88\x8d\x71\x9e\x67\xb8\x20\x7f\xdb\x84\xab\x60\xf4\xa1\x3a\x26\x40\x81\x32\xbf\x0c\xf2\x7b\x4f\x32\x5c\x52\x30\x33\x5c\x5a\xa2\xca\x7b\x95\x01\xcb\xf3\xca\x80\x42\xa7\x47\x45\x41\x5e\x34\xe3\x29\x92\x88\xbe\x46\xbc\x26\x58\x6d\x07\xdd\xe3\xc8\x80\x7e\x80\x52\x68\x24\xe0\x1f\xf2\x3c\xa3\xf4\x03\xfc\x0d\xf2\x5c\xed\xe2\xca\x65\xbf\x20\xff\xb5\xb5\x14\xa0\x48\x12\xd2\xd7\x28\x1a\xbe\xf7\x45\x89\x31\x2f\x91\xef\x36\xf5\x89\x59\x70\x8c\x45\xc3\x68\x28\xc2\x4f\xe4\x79\x04\xfd\xff\x16\xda\x1a\x8b\x22\xdf\x8d\xb2\x72\x90\xe3\x62\xe7\x8f\x3c\x47\x31\x42\x5f\x4d\x27\x6a\xe9\x09\x53\x99\x30\x72\xa7\xaa\x81\x5d\x90\x25\x58\x70\xb9\x59\x35\x2c\x2f\x5b\x96\xd0\xab\x33\x3a\xd9\x94\x8a\x9a\x35\xad\xc4\x70\xa1\x8f\xc4\x26\x47\x10\x92\xb4\x28\x7e\x4f\x60\xda\x69\x3a\x11\x97\xa3\x0f\x63\xa0\x32\x54\x92\x0d\xcc\xb5\x9f\x95\xb8\xc6\x27\x52\x84\x35\x8c\xcb\x6e\x64\xdb\x7f\xb1\xed\x9f\xd1\xdb\x26\xab\xd4\x94\x65\x7e\x56\x60\xf2\x77\x70\xe7\xfe\x46\x64\x22\xe9\xea\x73\x53\x60\x72\xef\xcc\xe8\xdf\xc8\xb9\x33\xa3\xbf\x10\x65\x8a\xcc\x57\x2c\xfa\x02\x6e\x0f\xf9\xed\x3f\xe1\xb2\xcf\x2f\xff\x8b\x33\xcf\x16\xe0\xf6\xd8\x76\x8c\xde\x12\xab\x69\x35\xb2\xc8\x3f\x81\xc6\xe7\xce\xac\xc9\x21\xfd\xef\x68\x06\xfe\x2f\x98\x84\x28\x74\x7e\x6a\x87\xce\xdf\xdb\xa1\xf3\xf6\x65\xeb\x0f\xf2\x28\x46\xc8\xff\x5a\x94\x2c\xe1\x1f\xd4\x0c\x49\x46\xc2\xf4\x35\x1c\x1b\x9c\xaf\x12\x16\x4c\x61\xf1\x53\x9c\x96\x80\xd5\x25\x91\x16\x70\x44\x18\x76\x10\x09\x96\x43\xe0\x30\x93\x18\x0b\x2a\x31\xc0\x9f\xc8\x3a\x4a\x27\xf1\x8a\x67\x97\x56\xd0\xc6\xff\x4a\xdd\xe3\x7f\x28\x3a\xf8\xeb\x31\x9e\xa1\x7f\x8c\xfe\x0a\x86\xbb\xaa\x7e\xff\x4d\x5f\xa1\x99\x93\x66\x71\xc2\x30\x61\x8c\xba\xc7\xff\xad\xde\x67\xec\x18\x4f\xd1\x7f\x8f\x98\x08\x3f\x0b\xee\x38\xaa\xa9\x92\x18\x45\xf4\xff\x66\x9d\xe9\x6f\x84\xb5\xa9\x65\xe1\xe1\x6f\x23\x36\xf6\xf9\x1f\xfa\x95\x8f\x33\xb9\x61\x0f\x6f\x6b\x1f\x85\x33\xd4\xfa\x9d\x77\x6b\x9d\xe8\x99\xa9\x9d\x11\xeb\x0e\xa7\x75\x3d\x59\x77\xc3\x68\xf7\x37\x1c\xce\xd0\x6f\x9c\x69\x1b\xc1\x90\xb3\x82\xac\x53\x76\xce\xb2\xcc\x84\xb8\xc6\x8f\x7f\xa1\x2d\x57\x3c\x0a\x97\x2b\xd3\x77\x05\x1e\x81\x9b\x58\xb5\xa1\x75\xc4\xc9\xa7\x8f\x8f\xb3\xe1\x1d\x62\xd8\xff\x09\xdd\x09\xbf\xbe\x82\xd4\x9c\x19\x7f\x21\x1b\x10\x93\x3f\x91\xad\x9e\x60\x7f\x23\x0d\x90\x85\xfe\x8b\x5a\xaa\x18\x8b\xd4\xff\xaf\x02\x93\x2f\xb6\x5d\xd6\x1f\xb5\xfe\x00\x53\xf8\xfa\x61\xd6\x57\xa4\x0f\xb2\x84\x1b\xab\xd5\xa2\x9f\x91\x58\x02\xac\xc7\x02\xee\x1e\x03\x9f\x15\xc6\xbd\xe8\x07\x41\xfa\x98\x58\x5c\x08\x84\x3d\x9c\x94\xff\xb6\xa8\xed\xf8\x8a\x38\x62\x63\x12\x52\xef\x78\x83\x31\x85\xc7\xca\x7b\xb0\x64\x50\xa1\xa0\xb5\x19\x4a\x28\x67\xe5\xde\x98\xa0\x6b\xc4\xd9\xa9\x3e\x3e\x87\x45\xee\x77\xc3\x6c\x63\x09\xcf\x2b\x20\xbc\x72\xdd\x6a\xb2\xb4\x04\xd0\x9e\xa4\x76\xb2\x8f\x49\xeb\x77\xbe\x66\x6b\xe2\xc1\x84\x97\x4d\x33\xf2\x59\x5a\x40\x7c\x11\xb8\x93\xc4\x90\xa6\x46\x6f\xc6\x2a\xd4\xa3\x91\x4a\xde\x98\xef\xa8\xc8\x07\x98\x2c\xd0\x57\x3d\x6b\xf8\x1d\xdf\xc5\xaa\xb0\x22\x9c\xdd\x2c\x90\x94\xac\x65\xd7\x4a\xa0\x35\xed\xc9\xa1\x50\x28\xa5\xa5\xbc\xdb\xf7\x3d\xb7\x4f\x4a\x68\xbf\x43\xdf\x73\x0f\xb5\xa7\x47\x69\x49\xaf\x10\x03\xf6\x7d\xaf\xbb\x6f\x04\x00\x17\xee\xaf\x5e\xff\xc0\xf7\xfa\x07\xc4\x1b\xb8\xbe\x37\x70\x89\x37\xf0\x7c\x6f\xe0\x95\x48\x02\xe6\x39\xa2\xe7\xef\x7b\x0d\x2e\xc5\x32\x4a\x40\xd7\x3f\xe8\x92\x83\x23\xff\x40\x21\xe7\x49\x24\x81\xbe\x7f\xd4\xaf\x47\x0f\xa8\x87\xbd\x7c\x46\xdb\xb0\xaf\x34\x47\x83\xaa\x7b\x3d\x68\xa4\x03\xa5\x90\x48\xe5\x36\x68\x2d\xa3\x05\x40\x20\xd8\x1f\xd7\xb3\x19\x4b\xe4\x3e\xeb\x80\xef\xb3\xa2\xca\x83\x19\x8d\x9c\x37\x41\x16\xfc\x12\xb2\x3b\x32\xa7\x89\xf3\xea\xc7\x5f\x6c\x7b\xed\x84\x29\xa4\x4c\xe9\xc4\x18\x4c\xd0\x0c\x80\xa7\xd1\x2f\xef\xce\xfe\xae\x51\xe6\xfe\x2e\x54\xdc\xeb\x16\xa5\x13\x4c\x1e\x8d\xec\xfd\x89\x72\x3b\x15\x18\x07\x89\xf3\xfa\xd3\xc7\xf3\xaf\x5f\x64\xdc\x5c\xf1\x12\xb8\xd3\xf1\xd2\x9a\xf8\xe8\xdc\xb6\xe7\x80\x33\x96\x02\x26\xff\x4a\xf9\xf5\x11\xa5\x65\xf9\xf9\xa9\x80\x40\xad\x88\xdd\xed\x4e\x50\x17\x6b\xb3\x4a\xb9\xfa\x3b\x57\x0f\x19\x7b\xaf\x03\x4e\x55\x6b\xd3\x14\x31\x5a\x5b\x52\xb5\x28\x9d\xda\x76\xc9\xf0\xd4\x9c\x91\x16\xa5\xa1\x34\x31\x31\xa5\x62\x2a\x13\x8d\x42\x49\x04\x11\x62\x12\x3e\x6a\x31\xaa\x85\x9a\x4e\x00\xbd\x81\xdd\x21\x39\x43\x27\x18\xa3\x00\xa5\x9d\x08\x63\xe9\x2d\x34\x93\xa5\xac\xe4\x9d\xf4\x51\x89\x4e\xd2\x63\x0c\x5e\x51\x3f\x87\x51\x76\x88\x96\xed\x36\x99\x3b\xd7\xea\x36\x6a\xb7\x4b\xfd\xde\xba\x28\x4a\x38\x18\xb3\xfd\x46\xe4\x60\x03\x68\xa3\x1a\x61\xda\xeb\x0f\x7c\xaf\x3f\x20\x5e\x7f\xdf\xf7\xfa\xfb\xdb\xa0\x23\x4a\xaf\xce\xe7\xc2\xa3\x96\x64\xd4\x12\x04\xcf\xe9\x90\x3c\x2a\xca\xf4\x05\xf1\x6b\x4a\x95\x1a\xc9\x6a\x25\xb4\x0a\xb1\x1e\x3f\x95\x7f\xdc\xc7\xc8\x02\x5c\xc5\x5e\xd7\x22\xfd\xa7\x15\xbf\x9c\x6b\xd7\x55\x24\x22\x51\xa9\x42\xfb\xbe\xd7\x07\x35\x49\x3d\xe2\x68\xa5\xa8\xfd\xbe\x45\x0e\xff\xbc\xa2\x7a\xcd\x45\xbd\x8b\x32\x6f\xbf\x6a\xe3\xf8\x7f\x58\xd0\x66\x60\x69\x55\xd0\x9f\xdc\x79\x83\xad\x05\x1d\x56\x2d\x7a\xff\x0f\xcb\xd9\x6f\x2e\x87\xcf\x8a\x3f\xb9\xeb\x0e\xb6\x97\xf4\x27\xf7\xdd\xe1\xf6\x92\xfe\xdc\xce\xdb\xc4\x92\xfe\x93\x0a\xd2\xc1\x5b\x75\x59\xd5\xc8\x8f\xcd\xa6\x39\xc2\x6d\xde\x15\x0b\x61\xbf\x8b\x91\xbb\xa9\x6b\x84\xa5\xf0\xe8\x40\x2c\x85\x03\x57\xa8\x19\xf9\xd2\x38\x91\x06\x3d\x42\xcb\xc8\x2f\xe6\xb4\x15\x39\xaf\x26\x7c\x47\xf1\x0f\x21\xe2\xd9\xb6\x55\xb9\xb7\xc2\x68\x37\x22\x53\x1a\x70\x46\xfa\x77\x16\xdc\x90\x55\x93\x8f\x38\x59\xd2\xb5\xb3\x9e\xc1\x4e\xa2\x16\x11\xec\xcf\xb3\x0d\xba\xa6\x1b\x01\x77\xc3\x19\x5a\x70\x61\x50\xb2\xd4\x69\xa9\xda\x6f\x89\x15\x65\x89\x26\x52\x0f\xc7\x2b\x0f\x71\x74\x21\x8a\x3b\xf8\x56\x0e\x35\x8e\xc4\x58\x3b\xec\x6f\x0f\xc9\xbb\x06\x13\xa4\x8d\xec\x88\x0c\xc7\xfb\x40\x37\xec\xa4\xd4\x3b\xe4\x96\x5c\x93\x35\x69\xb9\x7c\xd0\x77\x66\xb6\x3d\xb7\x6d\x94\x22\x94\x08\x50\x81\xd7\xe5\x56\x1e\xdd\x56\x2a\x5a\xca\x95\xd7\x98\x04\xce\xc7\xb3\xb3\x37\xb4\xe5\x92\x10\x8d\x2c\xa1\x1e\xb4\x08\xdf\x60\x5a\xc4\xba\x66\x70\xba\xcf\x32\x6b\xbc\x61\x87\x9f\xd1\x87\x4a\xcc\xe7\x6c\xc4\xc6\x3b\x31\xca\x08\x23\x06\xad\x86\xb2\x37\x33\x2e\x61\xaf\xb8\x3c\x2c\xcf\x3e\x67\x5c\xbc\x16\x57\xb0\xe0\x26\x42\xdb\x10\xcb\x03\xce\xd9\x88\x8d\xe1\x73\xb5\xa9\xe0\x95\xa0\x94\x09\xaf\xd5\x58\x1d\x83\x1b\x61\xc6\x49\x06\x78\x5d\x05\xae\x80\x09\x2b\xb3\xad\xae\xdf\xef\x92\x81\xeb\x0f\x5c\x61\xbc\x55\x85\xae\x11\xf2\xa4\x8a\x19\x50\x8f\x65\xda\x28\x49\x0e\x14\x22\x7d\x1f\x1c\x27\xf4\xc8\xfc\xff\x60\xc5\x06\xd0\x38\x28\x31\x48\x48\x5a\xb2\x09\xef\x6d\x92\x91\x96\x57\x8b\xea\x6c\xf4\x04\xb4\xf8\xbb\x22\x56\x1c\x28\xd1\xb9\xab\x00\x7c\xa4\x7f\x7e\x4f\xc6\x0f\xec\x0f\xf4\x31\x25\x48\x41\x7c\x4b\xbf\x08\xb2\x0f\xc1\xaa\x21\x14\x4b\x0a\xb0\x5a\xa6\x25\xe4\x6e\x2c\x34\x83\x21\x5a\x1b\x96\x43\x01\x5a\x13\xde\xe7\x28\x25\x6b\xb2\x26\x19\x71\x89\x47\x0c\x93\x82\x91\x37\xc6\x24\x15\x12\x58\x6f\x80\x91\x25\x8b\x14\xc2\x57\xdd\x73\x46\xc0\x1a\x0d\xfc\xde\x80\xf4\x07\x7e\x7f\xa0\x04\xad\x03\x7f\x5f\xd0\xc0\xf7\x9c\x5d\xf6\x3d\x71\xee\x5f\x6b\xf3\x13\xa6\x12\xda\xfe\xeb\x3b\x4c\x22\x54\xbb\x4a\xcb\x8a\x82\x3c\xca\x26\x78\xbe\x79\x7c\xfc\x44\x88\x55\x89\x67\xed\x96\x15\x36\x31\xc6\x59\x94\x25\xe1\xb6\x0a\x6b\x5b\x35\xcf\xf5\x3d\xcf\xf0\x50\x3e\x7a\xce\xc8\xc7\x53\x47\xbb\x7d\xb9\xc6\xc0\x29\x11\xa7\x98\x41\x6f\xb3\x12\xdb\x34\x17\xe9\x16\x7d\x40\x40\x52\x1a\x09\x3f\x9f\x10\x42\x54\x26\x28\xe5\xcb\xd2\x63\x41\x66\xd4\x3d\x5e\xa8\x8e\x9d\x1d\x63\xbd\xdd\x40\x01\x5d\xa3\x94\x64\x74\x31\x9a\xc1\x21\xbe\x6d\xc7\x68\x22\xf0\xc3\x64\x83\x27\x35\xdc\x03\x89\x0d\xa2\x76\xbb\x83\x9e\x3f\x30\x8e\xd8\x9f\x88\x11\x6b\x74\xb9\xb7\xd9\x5a\xd8\xcc\x7f\x77\x8f\x7f\x0f\x28\xd3\x40\x3a\xe1\xaa\x05\x1e\xf6\xac\xb1\x44\xfa\xd6\x27\xeb\x5f\x4c\x00\xc7\x59\x18\x05\x8b\xc5\x43\xc3\x19\x7a\x28\x11\x53\x15\xb6\x65\x9e\x47\xea\x92\xcf\xfd\x06\xed\x08\xdb\x31\x75\xac\x00\x63\x18\x94\x27\x40\x25\x18\x11\x2c\x1d\x08\xd7\x21\x1a\xcb\xee\x28\x70\xe1\x33\xf2\x7d\xdf\x0a\xdd\x9f\xf8\x54\x77\xa6\x04\x42\x94\xfb\x30\x01\x63\x58\x0b\xda\x57\x8f\xa2\xfb\x8c\xf5\x94\x76\x73\x16\xf6\xe6\xbf\x08\x70\xf4\x8b\x3d\xcf\xbd\x70\x2e\xa6\x6d\x04\x7f\xf1\x10\xed\x7e\x88\xaf\xc2\x05\xbb\xd8\xbb\xb8\x6b\xe3\xe1\xee\x79\x30\x0b\x92\xf0\x62\x6f\x4f\xb8\xa7\x44\xa6\x0d\x56\x68\x58\x35\xac\x82\xe9\x59\xd4\x6c\xc0\xfc\x7d\x6c\x04\x4e\xaa\xe4\xb1\x74\xd7\xf7\x7a\x5d\x0d\xf3\x58\x92\xd6\x77\xa9\x51\xfe\x3f\x68\xf9\x79\x16\x6c\x0b\xfd\xfe\x9d\x6d\x77\x9f\x69\x7b\xaf\x1e\xb3\x77\xab\x29\xc0\x7b\x36\xfb\xce\x55\x9e\xf7\x3b\x81\x6f\xa1\x3d\x56\xd5\x34\xa0\xf7\x64\xfc\x5e\xb3\xe4\x2f\xe1\xf5\xfc\x3b\x8b\xee\xea\xa2\xcf\xa2\xe9\x46\xc1\x9b\x9b\xed\x81\x8b\x91\x15\xa4\x0f\xd1\xe4\x9d\x3c\x46\x10\x1f\x09\x75\x1e\x7c\x54\x5b\x1c\x4b\xcb\x2a\x86\xbc\xfd\x7e\x19\x66\x44\xba\x96\xaa\x38\xc3\x72\x5b\x71\x20\x41\x5d\x0e\x0f\xa5\x8f\x22\xe7\x50\x6b\x9a\x22\x2b\xd4\x05\x92\x05\xbf\xaf\x04\xa3\x20\x13\x1a\x08\x3d\x1b\x99\xd1\xc7\xd7\xe7\xe7\x5f\xd6\x0b\xf6\x3e\x4c\x33\xbf\xe5\x92\xd7\xe7\xe7\xe7\xd9\xc3\x82\xbd\x61\x93\x45\x90\x40\x40\x2a\xbf\xe5\xf1\xe4\x5f\x38\x83\x15\xaf\x79\xe4\xf5\x22\x64\x51\xf6\x85\x4d\x32\x95\xf2\xe6\xd3\x87\xda\xad\x28\xd2\x48\xf8\x1a\xdf\xb0\x48\x15\xf4\x26\xc8\x82\xaf\x49\x10\xa5\x33\x96\xbc\xcb\xd8\x52\xbd\xf7\x36\x5c\xe8\x52\xfe\xf2\xf5\xc3\xfb\x57\x8b\xc5\xeb\x78\xb1\x10\x48\xe3\x2a\x71\x33\xe5\x6d\x9c\x2c\xcf\x16\x8c\xd3\xaa\x4a\x3a\x67\xfc\x1d\x23\xf1\x03\x9b\x86\x81\x2a\xff\x43\xb8\x64\x5f\x1f\x56\x0c\x3a\x82\x3f\xfd\x18\x2c\xd9\xf4\x63\x3c\x65\x5c\xbc\xe2\xf7\xf1\x54\xf7\xca\xe7\x20\xe4\xad\xfd\x7d\xcd\x52\xdd\xc2\xcf\x8b\xf5\x75\x18\x95\x57\x3a\xa3\xf3\x5f\x7e\x12\x8a\x34\xf5\xe6\xf9\x2f\x3f\x89\xe0\x5f\x46\xc2\xe7\x20\x9b\x9f\xb3\x6b\x33\x25\x0e\xa3\xcc\xb8\xaf\x76\xdf\xf9\x2f\x3f\x89\xde\x8a\x13\xdd\x55\xe7\xe0\xdc\x22\x54\x63\x3a\x8d\x0f\xde\xf9\x9c\xb1\x4c\xd5\xfd\x2b\xbb\xcf\xbe\x26\xc1\xe4\xe6\x75\x39\x7c\x3a\x4d\x27\xc4\xeb\x89\xaa\x6f\x41\xe6\x34\x41\x33\x0c\x20\x1a\xd3\x93\xb9\x3a\x24\x9f\xb6\xdb\xd2\x35\x95\x2c\xe9\x7c\x34\x1d\xf3\xad\xe4\x68\x39\x26\xd7\x34\xe4\x3f\x0f\xf4\xda\xb6\x8d\xd8\xd3\x00\x62\x60\xdb\xe8\x61\xb4\x1e\xe7\x79\x8c\x1e\xc8\x9a\x4c\x30\x79\x18\x2d\xe4\xed\x82\x2c\x31\x09\x46\xcb\x31\x9d\x90\x5b\x8c\x39\xf5\x83\x0e\x35\xc3\x0f\xa3\xd5\x38\xcf\x23\xf4\x40\x56\x24\x1b\xad\xc6\x52\x00\x2f\xa3\xe5\xd4\x62\x9c\x78\xfb\x7d\xdf\x2b\x95\xde\xa0\xee\x3e\x3c\xf4\x0f\x0f\x61\x96\x3d\x27\xc5\xf5\xf6\x4b\x45\xdf\x8f\x80\x77\xf5\x6e\xb9\xe4\xb4\x92\x31\x1f\xb0\xb9\xc8\x64\xc1\x82\xc4\x4c\x84\x04\xc9\x04\x05\xce\x6f\xc9\xfc\xb6\x48\x71\xca\x20\x69\xbf\xca\xea\x47\x63\xa9\xba\x8e\xe9\xde\x87\xf3\x77\x67\xbb\xce\x85\xa3\xb9\xb9\x19\x48\xa2\x59\x85\xa1\xce\xf5\x37\x78\x77\x97\xc4\xb4\x05\x50\x48\x12\x4e\x40\xbd\x40\xba\xa5\x5d\x03\x8a\x86\x06\xbb\x6b\x3a\x93\xc9\x86\x99\xff\xb6\x34\x3b\x95\x60\xc1\x82\x21\xc6\xb8\x00\x8d\x70\x51\x00\x80\xe2\x4f\xed\xc4\xf9\x11\xa0\x47\x63\xe8\xc4\xaf\xe1\x92\xc5\xeb\xcc\x0f\x50\xe6\x94\xb7\x98\x6f\xe1\xdf\x45\x19\x4b\x6e\x83\x85\x7a\xa6\xee\xa5\xdd\xa5\xb9\x9e\x68\x59\xa2\x57\x8d\xac\x4b\xc0\xeb\xac\xe7\x0e\x40\x9e\x77\xfb\xe2\xa7\x87\x49\x65\x9f\xdf\x05\xd9\xde\xed\xf9\x3d\xb7\x07\x94\xd0\x73\xfb\x30\x44\x3d\x77\x20\x24\x16\xc8\xf9\xa0\x9e\xb3\xd0\x8d\x3f\xbd\x7e\x93\x64\xd3\xc4\x29\xa2\x89\x33\x0f\x52\x43\xee\x26\x61\x93\x30\x27\x0e\x9b\x86\xf2\x50\xfa\xb1\x20\x31\x0d\xb5\x5d\x4f\x9e\x5b\xff\xeb\x7f\x69\x16\x4e\x02\x1a\x3a\x95\x65\x04\x9e\x57\x17\x16\x92\xd2\xd0\x31\xb8\x3c\xbc\x62\x72\xfd\x12\xad\x42\xe0\xfb\x82\xee\x4b\xc0\x00\x40\xc8\x77\xdd\x04\xd3\xd0\x61\x39\xcc\xfc\x25\x89\x55\x33\xc5\x29\x2b\x0a\x4d\x24\xdc\x00\x94\x0e\x37\x28\xca\xf3\x91\x61\x4b\xe1\x5c\x86\xd1\x6d\x7c\xc3\x36\x42\xa7\x0a\x6a\x9d\xec\xd4\x49\x39\x24\x31\x68\x38\x22\x4a\xe9\x5c\x1e\x35\xf3\x9c\xa5\x7d\xc5\x4f\x2c\x12\x2d\xdd\x0d\xd3\xdd\x60\x91\xb0\x60\xfa\xb0\x9b\xac\xa3\x88\x8b\x37\xc2\xff\x93\x52\x3a\x15\x27\x8b\xf0\xb5\x45\x29\x0d\x65\x46\xb1\x2a\xee\x2b\x12\x68\x28\x89\xb3\x64\xd9\x3c\x9e\xd2\x90\x24\x4e\x90\x5c\xd3\x58\x61\xb2\x04\x34\x71\xa6\x6c\xc1\xae\x83\x0c\x18\x98\xc6\xf3\x38\x47\x81\x44\x95\x49\xa1\x94\x94\x52\xba\xc2\x93\x38\xca\xc2\x68\xad\x65\xf3\xb4\x28\x78\x0d\x22\x76\x9f\xf1\x0a\xa8\x72\x30\x67\x23\x51\x46\x13\xe7\x52\xfe\x06\xc9\xf5\x8e\x8a\x74\x5f\x56\x58\xbf\xaf\xba\x62\xa2\xba\x82\x4e\x45\x4d\x77\x12\x67\x1a\xa6\xab\x20\x9b\xcc\xcf\xee\x27\x6c\x25\x04\x78\xfe\x44\x60\x9c\x58\x52\xcd\x63\x64\x66\xdb\x89\x13\x5c\x25\xeb\x15\xc4\xf3\x80\xa7\x22\x2f\xbc\x13\xd1\xb9\x74\x45\x5e\xc8\x01\xda\x81\xea\xc7\xc9\x32\x58\xf0\x3c\xd6\x0e\x0c\xb3\xa8\x4e\x02\xae\xcc\xc3\xa9\x3f\x23\x6b\xe8\xb5\x86\x1e\x90\xc6\x74\xf0\x5c\x18\xc3\x8b\xaf\x8a\xa2\x6c\xa5\xc8\xd4\xb6\x91\x68\x95\x1c\x0a\xf9\x5c\x0e\xc8\x5a\x34\xa9\x28\x00\x2f\x38\xc0\x24\x2e\x34\x05\xab\xba\x3e\x96\x18\x8a\x8f\x3c\x47\x5f\x55\x9c\x4b\xb2\x3e\x2b\x81\x31\x8a\x3a\xa8\xa2\x7c\x5d\x96\xc8\xdf\x8e\x8a\xa2\x60\xce\x5d\x12\xac\xe8\x5a\x62\x56\x58\xe9\x3a\x5d\xb1\x68\xca\x84\xe8\x6c\x91\x99\x91\xf4\xcf\x90\x2d\xa6\x16\x99\x53\x8b\xdd\xb3\xc9\x3a\x03\x31\x7b\x4a\xad\x49\xbc\x5c\x2d\x58\xc6\xa6\x16\x59\xd1\xc7\xc2\x04\x89\xc1\x8f\x65\x13\x6e\x2b\x77\xd7\xfc\x4e\xa0\x03\x3d\x16\x3b\x0f\xa3\x78\x4c\x9b\x4d\x6b\x8a\x1d\x81\x1b\x24\x27\x64\x15\x11\x96\x5c\xd2\x2b\xdb\xbe\x42\x57\xe8\x35\x1a\x8d\x31\xc6\x3b\x97\xb6\x7d\xd9\xa2\x14\xc2\xd1\x40\x67\x5c\x92\x18\xf3\x15\x99\x5e\x0a\x2d\xe1\x1d\x35\xd6\x6b\xba\x34\xae\xab\x53\xfe\x01\x97\x0d\x39\xe3\xdc\x70\x24\x48\x9c\xa8\x2e\x54\x84\x35\x76\x66\x71\x72\x16\x4c\xe6\xe5\xe6\x91\xf3\xe9\x51\x36\x6e\x5a\xc8\xa4\x7a\x17\x38\x85\x0e\x68\xaa\x0b\xba\xd7\xab\xe7\x8e\xf9\x62\x99\x51\x42\x42\x03\x83\x3d\x46\x15\x78\x60\xb9\x99\x36\xea\xc1\x39\x8c\xbe\xdd\xcd\xf8\xe7\x26\x60\xcf\x02\xb1\x51\x32\x26\x8c\x84\x62\x12\x88\x96\xb5\x28\x4d\xe5\x1c\x10\x13\x25\x05\xca\x9e\x50\x89\x40\xab\xb5\x1c\xb6\x6d\x89\xa8\x6c\x25\x93\x9f\xe8\x7e\x9f\x10\xeb\xf2\x32\xb8\x0b\xc2\xcc\xc2\x43\x59\x33\x1d\x94\x60\xe2\xc8\x67\x0d\x51\x15\x32\xc9\x4b\x08\x80\xbc\xd5\x50\x5c\x32\x55\x49\xf5\x14\xfb\x1b\x79\x37\x45\x6a\x90\x28\x97\x8c\xc4\x68\x5d\xcb\x52\x0d\xcc\x46\xce\x45\x80\x52\x31\x25\x31\x74\x1c\xef\xcd\x42\x7b\x51\x65\x34\x1b\xca\x30\x5f\x31\x89\xb1\x1f\x23\x5c\x94\x03\x79\x6e\x62\x80\x30\xbd\xcc\x8d\xd4\xd4\x1f\x2b\xfe\x2d\xce\xb2\x4b\x06\x0c\x90\x0d\x64\x0b\x7b\x2c\x33\x72\x44\x2d\x6c\xbb\xe4\xeb\x55\x46\x47\x33\x22\xea\xd0\x94\x97\x3a\x24\x5f\xed\x6c\x61\x45\x9c\x9a\x0c\x53\xbf\xaf\x73\xb6\xab\x4a\xde\x9d\xc6\x4c\x58\x40\xad\x92\xf8\x36\x9c\xb2\xdd\x60\xf7\x07\xf8\xf8\x87\x5d\x91\x97\xa5\xfb\x68\x55\x88\xe5\x16\x40\x4c\x74\xdd\x15\x27\xae\xae\x5b\x82\xe2\xb4\x73\x75\x63\xb5\x42\x20\xc4\x7a\x67\xad\xa4\xf6\x3f\x14\x8b\x85\x5c\x8e\x87\x02\x87\x6f\x88\x92\x11\xd0\xc6\x7a\x91\xf1\xed\xce\x98\x4a\x44\x3e\x92\x38\x9c\xcc\x28\x83\x9f\xf7\xf1\x44\x4f\xe8\x96\xb9\x8e\x18\xfd\x2b\xa8\x52\xf6\x2e\xde\xac\x06\xf6\x63\x1f\x7d\x5b\x87\xea\xce\x14\x15\xd3\x36\x65\xd1\xae\x9c\x50\x4d\xd9\x97\xd4\xf5\xaa\x14\xb2\xf9\x82\xf0\x3e\x9e\xf8\x6c\xe4\x8e\x8b\x1d\x0f\xec\x31\x6c\x1b\x65\x22\xbe\xca\xfb\x78\x42\x19\x68\xb7\xbb\xe5\x13\xa9\xa1\x13\xcf\xba\x63\x92\x39\xc1\x2c\x63\x89\xb8\xef\x8d\xa5\xaf\x57\x96\x3c\x9c\x09\x95\xae\x46\x54\xd7\xe5\x7f\x32\x84\x7c\x47\xb2\xff\x30\x8e\xf2\xfc\xb1\xd8\xc9\x60\x20\xa9\x5e\x97\xa4\xd5\x78\x06\x43\x67\xbe\x4d\xb3\x32\xc3\x1b\xed\xd8\x56\x16\x4b\x47\xaa\x6d\x56\x12\xc7\x99\x55\x8c\x09\xd3\xac\xf6\x95\xc0\x70\xd2\x41\x7d\x58\x86\xf8\x7e\x49\x67\xf8\x5a\x9e\xc5\x31\x8d\x31\x35\x8a\x61\xce\x25\x25\x89\x49\xbc\x83\x9d\x66\xcb\x2c\x41\x17\x1a\xa5\x17\xd0\x79\xc2\xf4\x63\xf0\x11\x31\xed\xc0\x23\xa5\xc9\x8e\x67\x6c\x5a\x76\x13\x19\x29\xef\xb8\xdd\x0e\x4f\x98\x86\xf7\xe0\xf3\x5d\xc5\x4c\x08\x71\x59\x0b\xc9\x98\x46\xe1\x98\x08\xb1\x81\xb6\x3c\x92\xec\xd4\x9e\x67\xfa\xa1\x4b\x92\xa2\x74\x0a\x03\x12\x0e\x14\x98\xc6\x23\xbf\xf5\xbf\x1a\x7c\xe8\xab\x5e\x21\xa4\x94\x92\x95\xf0\xf5\xca\x58\xd0\x58\x02\xef\x2a\xf8\xa9\xd7\xe4\xba\x72\x7f\x4b\xae\x47\xe9\x98\xde\x82\x38\xb6\x08\xc0\xfc\x8f\x96\x72\xaa\xda\x33\x59\x7c\xae\xa7\x1b\xc9\x0d\xd6\xe4\x4d\xdd\x5e\x43\xb1\x55\x87\xa7\xad\x0c\x2c\xe5\x28\xbd\xcd\xf3\x86\x22\x29\xa5\x28\x33\xeb\x95\xe7\x19\x00\x56\x60\x5c\x10\xe6\x2c\x83\xe4\xa6\x69\x35\x96\x4b\x7e\x15\xc2\x7a\xd8\x98\x8a\x18\xb9\xc6\x3e\x62\xce\xe5\x25\xf4\xd7\xe5\x25\xbd\x26\x29\xcc\xaa\x3c\x47\x8c\x77\x4c\x43\xbd\x30\x26\x6c\xab\x88\x71\x87\x09\xe3\xb5\x0b\x40\x06\xdb\xac\xde\xa3\x5c\x24\x7d\x56\x14\xe4\x0c\xdd\x9b\x9b\x10\xe3\x66\x14\x6c\x95\x9d\x08\x73\x5e\x99\x9b\x26\x7a\xcf\x8b\xe3\x29\xb4\x6a\x14\xc0\xc5\x0a\xc1\x45\x39\xa7\xba\x47\x6b\x9d\x5c\xee\x9c\x9b\x06\x15\x25\x78\x18\xfb\x31\xd0\x21\x6a\x58\x78\xf5\xb7\xc0\x8b\xa5\xfd\xa1\x7e\x9f\x6f\x7d\xcf\x78\x37\xdc\x55\xbb\xcf\x22\x77\x4f\x08\x84\xe4\x4e\x6f\xfb\x36\x5f\xd1\x81\x62\x75\x66\x63\x8b\x77\xc3\x0d\x7b\x48\x1b\x28\xd0\x00\xe6\x49\x44\x00\x89\x4c\xc5\x29\x2b\x9d\x53\x12\x76\xcb\x92\x94\x21\x4c\x36\x27\x79\x56\xe2\xf7\x48\xd8\x66\x67\x15\xaf\x90\xd8\x9f\x89\x1c\x6b\x53\x39\x32\xe7\x79\xa1\x1f\x96\xb3\x9b\x57\x57\x1c\xed\xd0\xd7\xe4\xc6\xa0\x9e\x47\x63\x5e\xf8\x37\x04\xd8\x5e\xdd\xf8\x40\x06\x3d\x63\xb7\x2a\x80\x1c\x70\x08\x79\x0d\x1b\x31\x19\x7e\x0d\x2e\x45\xb2\xaa\x8d\xb8\xa9\xac\x3a\x90\x54\x5d\x00\x21\x49\x48\x18\xf5\x85\x42\x71\xe7\x4f\x98\xb4\x18\xae\x74\x2c\xb0\x6b\x4b\xee\x10\x35\x8c\xa3\x96\x16\x25\x82\xa9\x6d\x4b\x1e\xdb\x4e\x4a\x80\x2f\x65\xde\x9f\x8c\x69\x86\x0b\x92\x66\xf1\xca\xaf\x9c\xd3\xe8\x26\xb8\xd2\xeb\xa0\x56\xaf\x91\x3b\x36\xd6\x9d\xaa\xdc\xc1\x84\xdc\x21\xb6\x9c\xcc\x94\x20\xc4\xd2\x72\x1b\x2c\x0a\xb2\xb1\xfd\x6c\xec\x75\x00\xbd\x92\x19\x49\xdc\x1a\x9e\x5e\x6e\x23\x42\x88\x70\xa8\x68\x39\x95\x0b\xa5\x94\x13\x44\x9f\x6a\xb1\x24\x22\xe1\x53\xc2\x47\xab\x15\x6a\x8c\xd3\xb8\xde\xde\x12\x94\x29\x3e\xa5\xee\x71\xa7\x13\xab\x8d\x7e\xbd\x63\xe2\x31\x49\x21\x98\x67\xa5\x73\x60\xb9\xa5\x94\x06\x8e\x58\x80\x4b\x54\x62\x8b\x45\x53\xa1\x7b\x50\xcf\x4e\xa8\xa6\x38\xb5\x5d\x88\x14\x98\xa7\xa5\x64\x10\xd0\xc9\x97\xc9\xa5\x00\x22\xf2\x5a\xdb\xf6\xa2\x4a\xbc\x27\x81\x96\x5f\xca\xc2\xcb\x34\xb0\x5a\xa9\xbd\x5f\x66\x6a\x7e\x61\xa4\x16\x4a\xf7\xb0\xfe\xee\xb2\x0a\x85\x94\xd5\x5a\x6c\xea\x69\xb2\xe4\x61\x37\xcd\x82\x0c\x74\xee\xbb\x77\x61\x36\x8f\xd7\xd9\x2e\x7c\xbe\x1b\x27\xbb\xb2\x06\xd6\xbf\x51\xe1\xa2\x28\x88\xd0\x62\xd4\xec\x7f\x4a\x53\xd6\xad\x23\x9f\x88\x91\x4f\xb4\xc6\xab\x36\xf2\xc9\x58\xe0\x5f\x6e\x8c\xa2\x9e\x92\x61\x75\xa0\x64\x1c\x47\xa8\x7c\x68\x56\x53\xae\x1b\xa1\x40\x47\x2d\x8a\xd8\xb6\x91\x05\xd7\x30\xbf\xf2\xdc\x52\xfa\x12\xb8\xc7\xb6\x1d\x97\xa5\xda\x76\x76\x42\x63\x23\x3b\x00\x86\xe5\xac\x47\x05\xf4\xe2\x82\x7c\x49\x9f\xfe\xa3\x21\xfc\x88\x70\x98\x24\x90\xdc\x28\x1e\xa2\x6d\xec\x0a\xa6\x94\x59\x0c\x97\xd6\xe1\x89\x52\x5e\x20\xbe\xd3\x54\x37\x9b\xc6\xc6\xdf\xc0\x30\x8c\x36\x3b\xc2\x8b\xb3\xda\x70\x48\x1c\x96\xd5\x81\x6f\x7d\x43\x79\x25\xdf\x40\x9a\xf1\x50\xcd\x6a\xe1\xdd\x2a\x33\x56\xbb\xbd\x32\x43\x31\x39\x7d\x43\x95\xc5\xa4\xd6\x29\x93\x2c\x54\xbc\x97\x61\xb2\x2a\xc8\x2c\x8c\xc2\x74\xbe\x05\xe5\x60\x2b\x59\x65\x82\xac\xb4\xba\xb8\x4e\x56\x99\x10\xb2\xcd\x3d\x86\xe9\x05\x53\xe9\xf1\xc4\x18\x57\xce\xd9\xe4\x26\x04\x93\x4f\x28\xe1\x55\x6c\x0a\x05\xfa\x27\x56\x51\xd0\x20\x54\x4f\x2e\xdd\xc9\xd6\x55\x22\x32\xf4\x21\x21\x8d\x60\xd4\x79\x2d\x35\xa4\x4a\x51\x6c\xf0\x85\x70\xc1\x17\xd2\x85\xe4\x04\x41\x96\xb1\xe5\x0a\x0e\x6f\xd5\x0a\x0b\xfa\xb4\x6a\x38\xb1\xa8\xaa\x27\xd2\x6b\xf1\xa3\xda\x30\xfa\xaf\x21\xe6\x92\xde\xce\xfa\x09\x91\xdb\x57\x3f\x2a\x88\x56\xc2\x1a\x94\xa2\x86\x5e\x2e\x1c\xbc\x5b\x59\x81\x36\x14\x37\xd9\x50\x1f\x22\xf8\x8f\x85\x8a\xd5\x72\xad\x84\xa8\x2f\xeb\x28\x0b\x97\x8c\x26\xa5\x5a\x51\x8b\x80\x56\x02\xca\xb0\xfa\xbb\xbb\x74\x37\xb1\x30\x82\x00\xb9\x8f\xc5\x98\xff\x21\xb0\x15\x7d\xc2\xa4\x74\xa3\x5a\xcb\x78\xba\x5e\xb0\x06\x45\x93\x78\xa0\xaa\x3c\xac\xde\x52\x2e\x6f\x4e\xe0\xec\x67\x98\x09\x1f\xd5\x0d\xff\xae\xf2\x95\x4d\x96\xfe\xdb\x7f\xad\x59\xf2\xb0\x9b\xb0\xdf\xd7\x61\xc2\xd2\xdd\x60\xf7\x2e\x8c\xa6\xf1\x1d\x70\xf7\xdd\x60\x57\x7d\x69\x95\x42\x22\x62\xb8\xf0\xe1\x2f\xb2\xd6\x91\x70\xaa\x9a\x96\xb1\x75\xc5\xf7\x43\xf1\x23\x02\xa6\x3e\x67\x59\x4b\x47\x63\x12\x19\x2d\x21\xe1\x16\x1d\x68\x4c\xa5\xb0\x44\x02\x20\xe1\x68\x12\x64\x24\xa5\x22\x9c\x29\x59\xd3\x44\xa1\xe8\x90\x05\x7d\x2c\xc8\x84\x2e\x4a\x48\xc3\x19\x5d\xd4\x0f\x6f\xe6\x74\x56\x3e\x9f\x52\x89\x3a\x2a\x8a\xc6\xa0\xe1\x25\xcb\x86\xcd\x4a\xf3\x5e\xce\x8a\xe0\x14\xd8\x08\x32\xec\x44\xf1\x14\x4e\xa1\x8b\x66\xb3\x5c\x11\xc2\x80\x6f\x03\x81\x81\x89\x1e\x03\x53\x5b\x50\x60\xb7\x5c\x92\x26\x13\xfe\x13\xc5\xd1\x84\x89\x8b\x0f\x30\xfa\x7c\x53\x5b\x0a\x5b\x0f\xe6\xf1\x0b\x68\x3d\x29\x4a\x68\x92\xe7\x11\x96\xfb\x2f\x79\x4c\x8e\x2c\x61\x25\xa6\xe5\x1a\x60\xce\x24\x03\xf9\x35\xe4\xb2\xeb\x35\x46\x31\xcd\x46\xe1\x98\x6f\x2a\xaf\x59\xf6\x2a\xcb\x92\xf0\x6a\x9d\x71\xce\x5a\xb9\x47\x21\x97\x56\x03\xbe\x73\x34\xd2\x48\x8c\x77\x12\x67\xce\x82\xa9\x13\xac\x56\x4c\x3a\xf3\xa3\x00\x3b\xab\x20\x61\x51\xf6\x31\x9e\x32\x27\x61\xcb\xf8\x96\xa9\x27\xe5\x06\xfe\xaa\xd6\x35\x94\xb2\x21\x6b\x5b\x96\xbf\x31\x23\x98\x19\xfc\xbf\x4c\x1d\x2e\x46\x13\xa5\xea\x18\xe7\xb9\xfa\xcc\xd7\xce\xf2\x02\x94\xb4\xd1\xc0\x98\x4f\x89\x4b\x67\x16\x39\x61\x14\x8a\x68\x4d\x05\xb9\xa3\x7b\xbf\x8e\x2e\xd2\x8b\xf5\xdb\xb3\xb7\x6f\x2f\xee\x5f\xb9\xe3\x76\x5e\xbb\x7f\xb1\x77\x5d\xd3\x9d\x0b\x96\xdd\x6a\x71\x8a\x10\x8c\xda\x12\xea\x28\x8d\x26\x94\xd0\x2b\xc3\x54\x7a\x09\xde\x45\xad\x5b\xf8\x41\x56\x00\x56\x91\x7c\xeb\x90\xe7\x60\x45\x9d\xe7\x8a\xb0\x2a\xe1\xa9\x4f\x5d\xdb\xce\x3a\x42\x09\x86\x0b\x5e\x73\x7a\x69\xee\x9f\x7e\xfb\x9d\xcf\x6b\xdf\xea\x39\x7d\xc7\xb3\x88\xb9\x9d\xba\x24\xa2\x22\xbe\x4b\xb2\x58\xd8\x35\x6c\x6e\x3f\x63\x13\xe7\x92\xd4\x4d\xbf\x6b\xa3\x64\xbe\xec\xb3\x13\x17\x96\xfe\x11\x6b\x03\x37\x16\x85\x8d\x7d\x91\x36\x2e\x08\x9f\xab\xe7\x59\x30\xb9\x69\x30\x9c\xbb\x74\x96\x2c\xb9\x16\x26\x39\xa6\x6e\x04\x81\x5f\x93\xde\xa6\x72\xd1\x4c\x4c\x53\x11\x37\x38\x2b\x08\x0b\x9a\x43\x69\x5f\x3a\xfc\x89\xc6\x11\x24\xcb\x9a\x79\xad\xb9\x08\xe9\x9a\xa1\x4b\x67\x19\xc8\x70\xe2\xd5\xf3\x78\xbd\xcb\x57\xc7\x4f\x9c\x52\x30\xdf\xab\x55\x5d\xb7\xb6\x65\x1c\x9b\x47\xec\xfa\xd4\x1e\x10\xdc\xc3\x24\x6d\xc2\xb2\x80\x0c\xd8\xef\xc8\xc5\x05\x59\x04\x4f\xbe\xd2\xf1\x70\x41\xd8\xef\x5b\xa2\x2b\x97\xf4\xd7\x66\x6d\x04\xc3\xe4\x97\x50\xfd\xb5\x7a\x72\xa1\xda\xb6\x93\x93\x6c\x38\x92\x3b\xd2\xb1\x3f\x1a\xf3\xec\x4d\x13\xbb\x5a\x2b\xf5\xa8\xe4\xf9\xe6\x00\x8a\x81\xf7\x53\x92\xc6\x49\xe6\x27\x0e\xff\x01\xe7\xea\x09\xd8\x61\xc0\x45\x41\x2e\x1d\x76\x9f\xb1\x68\x4a\x61\x32\xca\x6b\xa3\x3c\x01\xf5\x25\x35\x36\xc0\xea\x4c\x33\xf0\x3c\x7f\x2c\x48\x4a\x3d\xb2\xde\x04\xa9\x5a\xd0\x96\x07\x1a\x10\xeb\x2a\x8e\x17\x2c\x30\x38\x47\x60\xdb\x68\x41\x83\x4a\x66\xa9\xcc\xac\xdd\xc6\x64\x83\x01\x05\x79\xbe\x44\x01\xce\x73\x14\xd0\xc7\x02\x93\x94\x52\xba\xb6\x6d\x24\xb6\x9d\x24\xed\x74\xf0\x71\x7a\xb2\x3e\x4e\x05\x52\xb0\x60\xf4\x88\xd1\x2a\xe0\x95\x19\xcb\x93\xb2\x51\x36\x26\x96\xd6\xb8\x59\x2d\xca\xb7\x0c\x41\x8b\xd2\x88\xd7\xce\xb6\xf9\xcf\xa5\x13\xa6\x9f\x17\x41\x18\x49\x9f\xe0\x88\x57\x21\xa4\x30\x89\x9d\x30\x85\x5f\x14\x61\x8c\x87\x28\xa1\x01\xcf\x31\xa6\xa1\x6d\xb7\xaa\x2f\x24\x78\x38\x1a\xfb\x61\x9e\xd7\xb3\x4b\xf0\x30\xf1\x1f\x0b\x12\xd2\x96\x47\xf8\xe7\x54\x0d\x07\x5a\x90\x18\xf0\x38\xca\xd8\x04\xbc\xb9\xfc\x95\xc8\x40\xee\x2a\xc7\x0f\x3d\xb2\xfb\x55\x10\x4d\x63\x5f\x8a\x18\x56\x1b\x49\x66\xd4\x06\x18\xa9\x84\x3f\x5c\x22\x8c\x1d\xe9\x77\x8f\xf6\x2e\xde\xec\x5d\x13\xcb\xc2\x24\x4c\xbf\xb0\x60\xfa\xc0\x57\x3c\xc6\xc5\x94\x0a\x41\xd7\x45\x18\x3e\xa9\xa3\xb8\xaa\x28\x29\x48\xa5\x61\x0d\xf6\xf4\x5a\xdb\x8a\x5a\x7c\x35\x51\xaa\x34\xf1\xfe\x98\xf7\xbe\x5e\x4a\x24\xa0\x07\x0d\xf9\x75\xd3\xca\x83\x12\x3a\x53\xfc\xc0\x32\x68\x1e\x76\x92\xe6\x24\xc0\xb6\x2d\x65\x8c\x04\x83\x41\x03\xaf\xe7\xd9\x72\x95\x3d\x6c\xab\xa7\x19\xef\x55\x56\xd8\x2b\xc3\xd3\x11\x11\xa2\xe6\xec\x36\x58\xd4\xf6\x71\x5c\x24\x78\x14\x62\x03\x18\x80\xc0\x65\x81\x37\xd8\xa4\xb6\x86\x21\x11\x05\xd8\x6f\xbe\x86\x01\x61\x26\x1a\xfe\xee\x38\x3a\x49\x6c\xbb\xe5\x71\x8a\x94\x7d\x32\x8a\xc6\x24\x22\xfc\x07\x1f\x47\xed\x36\x3e\x06\x85\x03\xff\x4c\x2a\x02\x55\x1c\xbf\x86\x0f\x64\xb4\x1b\xc5\x48\x0b\x92\x25\xe1\xf2\xa9\xd5\xc5\xb2\x7c\xc4\xe5\x80\x92\x52\xee\x00\xa2\x8a\x2c\x83\x1b\x56\x5b\xbf\x0c\xf3\x9e\x2c\xcf\x47\x1a\x02\x5e\x8b\x5a\xe8\xcc\xf0\xa7\x1f\xaa\xe5\x26\x11\x28\x5f\xd1\xb5\x29\x4d\x8c\xd8\xd8\x67\xd8\x97\x30\xff\x09\x61\x18\x93\xa4\x20\xca\x16\xb0\x6e\xfb\x52\xa9\x75\x36\xec\x78\xfe\x5a\x11\x05\x03\x74\x64\x28\x6a\xab\x7a\xa3\xad\xd4\xab\x7c\x24\x48\x58\xe9\x7d\xe8\x63\x06\x1e\xfa\x34\x1b\x45\xe3\x52\x4f\x2d\x41\xc7\x43\xc2\x0a\x72\x9d\xb0\xd5\x46\xad\x54\x01\x11\x97\xb1\x05\x2e\x0e\x2b\x61\xfb\x5a\xc9\x71\x78\x12\x1f\x87\xed\x36\x6e\x65\x08\x4e\x66\x42\xdc\xa2\x34\xb0\x6d\x89\x0f\xc0\xd3\xf4\xfc\x8e\xea\xcb\xa7\x61\xf5\xc3\xb9\x31\x75\x49\x4a\x05\x58\xbc\xa6\xa3\xa8\x6c\x49\x7c\x12\x1d\xc7\xed\x36\x96\xec\x30\xa4\xbc\xc8\x78\x4c\x62\x92\xf0\x49\x26\x4f\xdf\x42\x81\xd6\x0e\xd4\x14\x4b\xee\xf8\xdc\x07\x5a\x4f\x22\x16\xd7\xd1\x98\x80\xd4\xb2\x0e\xa7\xbe\x47\xd2\xf5\x8a\x6f\x95\xfc\x55\x81\xc9\x56\x63\x2d\x60\xae\xb3\x68\x24\xee\xf4\x01\xee\x98\x26\x1b\x49\x98\x48\x99\xc2\xfa\x51\x2c\x24\xbb\xc2\xfe\x73\x57\x6c\x24\x76\xdf\xea\xb3\x4b\x4e\x27\xbb\x6f\x82\x8c\x49\xe4\x71\xc9\x5e\x04\xe3\x92\x05\x6b\xd4\x90\x5d\xab\xbe\x5f\x5c\x8c\x34\x5f\xb2\xda\x59\xdb\x1a\x5b\x63\x9a\x39\x59\xfc\x3e\xbe\x63\xc9\xeb\x20\x65\x08\x17\x42\x77\x74\xbf\xa9\xef\x2f\x57\x48\x92\x12\x88\xd3\x4b\x66\x22\x9c\x17\x59\x82\x4f\xdc\x03\xb9\x22\x97\xd4\x4a\xc3\x3f\xfe\x58\x30\xab\xed\xbd\xe4\x2c\x95\x57\x96\xdc\x99\x5b\x31\x19\x4f\x8a\x9c\xd3\x35\x43\x98\xbc\x12\x3f\x9f\xc4\xcf\x8d\xf8\x79\xdd\x2c\x53\xf3\x6d\x4d\x66\xdb\x68\x06\xf0\x42\x6e\x41\xbe\xd2\xc7\xa2\xbe\x07\xfb\xc2\x09\xf3\x33\xfd\xe2\xac\xe2\x15\xf9\xc0\x7f\xf9\x56\xee\x8d\xba\xf8\x48\xbf\xc8\x1d\xdf\x6f\x74\xdb\xd4\x71\x89\x41\x64\xc9\x49\x74\x9c\x88\x65\x97\x8d\x92\xb1\xe9\x28\xaf\x78\x7e\xc7\x2b\xc8\x3b\x6a\x41\xb8\x56\x36\xcd\x53\xb0\x24\x66\xd3\x1c\x4e\x8b\xf2\x60\x9d\xc5\xb3\x78\xb2\x4e\xe1\x6a\xb5\x08\x1e\xf2\x49\x1c\x65\x49\xbc\x48\xf3\x29\x9b\xb1\x24\x9f\x86\x69\x70\xb5\x60\xd3\x5c\x60\xae\xe5\x61\xba\x0c\x56\xf9\x22\x8e\x57\x39\x84\x6a\x58\x2d\x58\x1e\xaf\x58\x94\x27\x2c\x98\xc6\xd1\xe2\x21\x97\xdb\xeb\x69\x9e\x4e\xe2\x15\x9b\x5a\xe4\x3d\xb5\x46\x17\x17\xf7\x5d\xf7\xe2\x22\xbb\xb8\x48\x2e\x2e\xa2\x8b\x8b\xd9\xd8\x22\x6f\xa9\x85\x86\xfe\xc5\xc5\xc5\x85\x93\x8f\x2e\x2e\xee\x3a\xe3\x7c\xf4\xeb\x85\xdb\xb9\xb8\xb8\x0f\xdc\x31\x6e\x5b\xe4\x0f\x6a\x5d\x5c\x8c\xac\xf6\xfb\xb6\xf5\x12\x59\xed\xb7\x6d\x0b\x43\x80\x07\xb8\x1f\xbd\xfc\xf5\x45\xde\xfa\xd7\x78\x48\xb1\x4c\x19\xfa\x3f\xa0\x32\xc7\x5f\xf9\xef\x0f\x63\xfc\x12\xff\x90\x5f\x58\xf5\x07\x17\x16\x7f\x72\x61\xe5\x32\x5f\x9c\xcb\x5c\x2e\x2e\xc6\x16\xf9\x91\x5a\x7e\x59\xe0\xc5\x05\x42\xe8\xfb\xb3\xc6\x79\xfd\x09\xc2\xa3\x8b\x8b\xf1\x38\xb7\xda\x7f\xb4\x2d\xfc\x12\xe7\xce\x4b\x7c\x71\xc1\x8b\x26\x7f\x31\x03\xb0\xbc\x6f\x5b\x6d\x8b\x40\x78\x8b\x9f\xcd\x74\xeb\x57\xa8\x63\x1b\x32\xfe\x55\x66\x3a\xc6\xaa\x14\xfc\x52\xb4\xa1\xfd\x42\x7e\xfc\xf7\x86\x8f\x5f\x12\xf1\x63\x61\xf2\x7b\xd3\x63\x34\x3a\x6d\xff\x8b\x57\xf1\x7d\xdb\xc2\xfa\xd5\x5f\x6a\xd5\xcb\x4f\x2d\x4c\x7e\x32\x13\x7f\xc4\xe4\x9f\xf5\xfc\xde\xb6\xad\x17\x16\x26\x7f\xa3\x8f\xef\xde\xf8\x95\x67\xff\x21\x7b\xd7\xc2\xe4\xf5\xfb\x57\xe7\xe7\xd5\xa7\x17\x17\x4e\xf9\xfc\xeb\xab\x9f\xaa\x4f\xc5\xa3\x7c\xf4\x72\xcc\x1f\xbf\xfa\xfa\xf5\x8b\x5f\x2b\xf7\x0f\x4c\x3e\x9f\x9f\xfd\xfc\xe6\x53\xfd\xc1\x8f\x98\xbc\xfe\xcb\xbb\xf7\xb5\xca\xf8\x08\x08\x17\x36\x25\x39\xdf\x76\xe4\x51\x36\xe7\xff\x3a\xfc\x06\x77\xd0\x84\xef\xdf\xf3\x78\xd6\x01\x75\xa1\xa0\x08\xd9\x5b\xec\x96\x45\x79\x3c\x9d\xe6\x08\x8d\xda\x9d\x71\x8e\xd1\xc5\xc5\xf4\x25\x8e\xf2\x92\x28\xe5\x03\x79\x7f\x71\x31\x6d\xe3\x1c\x6b\x6a\x83\xd1\xb7\x42\x0b\x13\x2e\xaa\xd7\x5a\xca\x89\xfd\x5d\xdb\xc2\x2f\xe4\x2b\x11\x63\xd3\xf4\x75\x1c\x65\xec\x3e\xab\xb7\x8d\x67\x27\xc6\xce\x2f\x6b\xc5\x7e\xcf\xaf\xb3\x7c\x21\x5a\x54\x36\xb0\xda\x06\x34\xf4\x3b\x17\x17\x53\x3c\x84\xaa\x1b\x15\x43\x43\x3a\xfa\xb5\x33\xce\x5f\xc8\x2a\x16\xe4\x05\xdd\xfb\xcb\xd7\x0f\xef\x5f\xec\x85\xe4\xbf\xe8\x1e\xaf\x60\x18\xad\xd6\x99\xe4\x2b\x39\xaf\x57\x90\xb0\x20\xbf\x5a\x67\x59\x1c\x61\xfe\xde\x3f\xe8\xde\xaf\xf3\x8b\x29\xbf\xfc\x2b\xdd\xfb\x75\xf4\xeb\xe3\xb8\x7d\xf1\x78\x91\xbe\xbc\x18\x45\x41\x16\xde\xb2\xdd\x8b\xbb\x3d\xf2\xdf\x22\xb7\xff\x40\x23\xce\x08\xda\x38\x47\x17\x77\x6d\x9c\x5f\x38\x2a\x01\xbf\xd8\x23\x8c\xd1\xbd\x51\xfb\x5f\xe3\x3d\x92\xb1\x0a\xad\xc1\xe4\x1a\x5d\x5c\x4c\x83\xce\x6c\xfc\xe8\x91\xfd\x02\x5a\x31\xcc\x45\x13\x71\xee\x40\x0b\xf8\x9c\x48\xb6\x59\xf2\x5a\xee\xbd\xd5\xce\x3a\x00\xb4\xad\x85\x80\x16\x8d\xf2\x3c\x19\x66\x7e\x74\xe2\x0e\x1b\x30\xc9\x51\xd4\x16\xc8\xdc\x7e\xe3\xc3\xd3\x53\xcf\xcd\x01\xc5\x9b\x78\x6e\xb7\x67\x47\xb9\x00\xed\x2e\x48\xc4\xe8\x1e\x1a\x71\x6e\x77\xef\xcd\x2e\xee\x0f\x66\xe3\xfc\xd7\xce\xf0\x62\x8a\xf3\x5f\x3b\x2f\x24\x1f\x94\x4f\x3a\x17\xeb\xb7\x6f\xdf\xbe\xe5\xdd\xb0\x77\x4d\x42\xd6\xbc\x00\x65\x43\xeb\xc2\x85\xd3\x81\xa1\xf5\xff\xfc\xdf\xff\x97\xe5\x33\x1d\xac\xa8\xe3\xe1\xb6\x75\x71\x61\xb5\x19\x1c\xd1\xf2\xaa\xbd\xca\xb4\xbd\x4b\xc7\xc3\x5a\x31\x88\xbc\x7d\xdc\xb6\x76\x2d\x5f\xbc\x5e\x90\x98\x99\x1b\xd2\x39\xdf\xd9\x06\x8c\x5e\xb2\x06\x6b\x00\x70\x84\x67\x8e\x5a\x30\x6c\xdb\x9a\x85\x6c\x31\x15\x5e\xda\x54\x28\x08\x3f\x06\x4b\x56\x5b\xd4\xc9\xe3\x34\x4c\x7c\xab\xd4\x99\x59\xa0\xfa\xf6\xad\x05\xbb\x66\xd1\xd4\x92\x4a\xeb\x37\x0a\x21\x49\x61\x15\xde\x39\x30\x2b\xf9\x17\x29\x26\xd5\xbb\x2f\x23\xf3\x5e\x69\x65\x4a\x15\xa5\x50\x76\xbf\x62\xf8\xf1\x0d\x7d\x84\x7c\xfd\x2f\xcd\x81\x9b\x3e\xc8\x62\x19\x51\x10\x89\x18\x17\x5b\xe5\x5a\x66\x88\xb5\xc7\x6c\x94\x48\x19\xb6\xdd\x1e\x1f\xe3\x63\x2d\xc0\x26\x1d\xaf\x30\x6c\x79\x52\xa6\x82\x2e\xca\x33\x37\x92\x4a\x09\x66\xc5\x25\x17\x61\xd4\x1e\xdf\x45\x2c\x79\x53\xca\x29\xd9\x30\xd3\xcd\xf1\x8f\x84\xd5\x21\x18\xae\x6b\xe1\xbe\x65\x28\x10\xf9\xb6\x8f\x6f\x69\xce\x6c\xfb\x48\xfc\x78\x70\xab\x23\x1b\x09\x33\x28\xdb\x46\x88\x67\x5c\x29\x2c\xcf\x33\xff\x0e\x0b\x3c\x9e\x39\xca\x30\xc9\xf8\x6e\x63\x4a\x96\x22\x1e\xb9\x27\xf3\x45\x33\xfa\xdf\x10\xbb\x98\xcb\xc2\x5c\x20\x89\xe9\x6c\xe4\x8d\xe1\x9d\x23\xca\xcb\x02\xf5\x3c\x5a\x50\xd0\xad\x4a\x25\xed\x8f\x0f\xef\xa6\x66\xd4\xf4\x48\xc4\x3a\x0d\xa7\x94\xd2\x58\x27\x0a\xd1\x77\x81\x49\xa4\x0f\x7b\x1f\x40\x8b\xf1\xd0\x90\x95\x6d\x5f\xa1\x8c\x2c\xb0\x6d\x3f\x97\x0f\x84\x53\x1f\x75\xc7\xea\xb9\x22\xb1\x88\x98\x55\x4c\x7f\x7c\xf8\x1a\x5c\x73\xc2\x05\x80\x46\xa8\x21\x34\xae\x37\xc6\xb6\x9d\x54\xdf\x7c\xbd\x08\xd2\xf4\x23\x04\xd4\xc9\xb6\x3c\x79\xb6\x34\xfd\x26\x6f\x0d\x89\x0a\x38\xd5\xfa\x3d\x0d\x6c\xbb\x75\x33\x62\x7c\x76\x8e\xf9\x26\xfd\x36\xcf\x5b\xb7\xc2\xbb\x46\x6c\xdb\x61\x20\x4a\x4d\x30\xec\x60\x9b\xe7\x9c\x18\xb9\x6b\xca\x38\x75\x11\xbe\x75\x3d\xb3\xed\x5f\x74\x5e\x40\xd0\x68\x42\x6b\x4a\x70\x2b\x9c\x5a\x18\x0f\x27\x74\xa2\xf7\xa6\x11\x23\x21\x03\x30\xeb\xfa\x8b\x64\x42\x2f\x31\x49\x29\x5a\xd1\x80\xe7\xa9\x24\xd6\xb4\xd3\x39\xc6\x2b\x30\x0b\xfa\x0f\xab\x3d\xe1\xad\x69\x5f\x31\xc4\x53\xf0\xce\x35\x5d\x49\x38\x74\x02\x81\xbd\x18\x53\x75\xb2\xed\x6b\x86\x32\x43\xb1\x8e\xf3\x3c\x2b\x4a\xa3\x79\xa3\x37\x1f\x1c\xd0\x06\x0b\x97\xb9\x38\x79\xb5\x58\xa0\x6b\xe8\x47\x31\xe9\xef\xf1\xe3\x8d\x38\x3a\x2a\xe4\x61\xe6\xe3\x84\x52\x7a\xc9\x07\x4c\x28\xeb\x6b\x2d\x2e\xb4\x45\xdd\x1a\x31\xdd\xf2\x9f\x89\xf5\xc2\xb3\xb0\x9c\xb7\xe5\x64\xe6\x5b\x04\x09\x7f\x57\x6e\xc8\xab\x96\xda\x86\x5e\x55\x98\x24\xf1\x4e\xc0\xa7\x91\x33\x09\x26\x73\x09\x5c\xa5\x51\x79\xb3\x11\x73\xd2\x79\x38\xcb\x10\x06\x24\x57\x18\x7e\x1a\x1a\xec\x63\xc1\x4c\x83\xac\xd1\xe5\x98\xb6\x5c\xc2\xca\xe7\x13\x56\x6a\x46\xa7\xf5\x23\x12\xcd\xa1\xd5\xc9\xa0\x30\xca\x63\x28\xc3\x06\x93\x54\xca\x18\xdd\x63\xe6\x48\x80\xcb\x4d\xf3\x81\x07\x30\x0b\xbe\x9f\x35\xaa\x3b\x63\x9b\x4c\x53\x6e\x0a\x73\x0b\x93\x50\xc7\x2e\x38\x0e\x39\xa9\x44\x4e\x90\x65\xc9\x5f\x82\x68\xba\x60\xa3\x64\x14\x8e\xc7\xa6\x7d\xe9\x9c\x55\x94\x20\xb6\x0d\x6e\x4b\xb6\xed\xe9\x05\xe7\x2b\x1c\x94\x0b\xed\x4c\x79\xaf\xa2\x69\x41\x48\xb5\x4e\x66\xde\x01\x2b\xad\xb0\xa3\x04\xb6\xf6\xc7\x09\x15\x26\x3c\xe7\xe1\xd5\x22\x8c\xae\xc1\xf2\x33\x31\x76\x5c\x1d\x4f\x6b\x2a\x86\x9e\xdf\xf1\xca\x5a\x4e\xd9\x93\x81\x0f\x2c\x90\xa0\x2c\xba\x7d\xbe\xf2\x2e\x86\x93\x0e\x4a\x99\xd1\x95\xab\x6d\xf9\xca\xee\xd8\x92\x9b\xac\x26\x2a\xcb\x4d\xf2\xdc\x12\x02\x1b\xdc\x6d\x2b\x6f\xf9\x4c\x3b\x66\x71\xb2\xb4\xc2\x08\xce\x9c\x4d\xfa\x90\xca\x31\x25\x18\x0c\xad\x45\x70\xc5\x16\xe2\x4d\xe3\xda\xf8\xa6\x92\x81\xfe\x90\x57\xc7\xcf\xea\xb7\x61\xfa\xc6\x48\xc8\x73\x33\xa5\x45\x69\x8b\xd9\x76\xc0\xe9\xb9\xe9\x6b\xa3\x74\xde\x66\xf3\x99\xd1\xee\x5b\xb3\xdd\x0b\x86\x36\x9b\xbe\x9b\xd1\x76\x46\xcc\x47\x70\xe6\x6f\xc4\xf6\xa4\x0c\x8d\xc6\x44\xd1\x36\xc9\x30\x09\x68\xac\x28\x3d\xe0\x94\x9e\x8c\x42\x1a\x8f\x82\x31\x67\xee\x9c\xd0\x69\x0b\x45\xfc\x87\x5f\x63\x40\xb1\x31\xbc\x6c\x2a\x73\x5e\xe1\xe4\xb5\x38\xd1\x37\x2d\x5c\xb6\xcd\x0a\xad\x5b\x4d\x68\xca\x1c\xa9\x26\xa2\xe0\xae\x97\x32\x27\x4c\xff\xf1\xe1\x7d\x83\x1d\x25\x03\x63\xdb\x74\x15\x4c\xd8\xcf\x5f\xde\x91\x84\x22\x56\x97\x0e\x18\xd6\xfa\x13\x59\xb0\xd2\xd9\xbe\x10\xdc\x3b\xcb\xf3\x84\x2f\x94\x8a\x1a\xf3\xdc\xe2\x5b\x08\xbe\x9b\x98\x43\x5d\x58\xa6\x72\x6b\xd0\xec\x84\x24\xa0\x6c\xb8\x59\xaa\x7f\xa7\x15\x61\x42\x36\x39\x02\xcb\xb6\x72\x8e\x07\xf5\x6a\x0d\xd1\x8a\xa2\x29\x0d\x36\xea\x4b\x96\xb4\x15\xa3\x29\x26\x77\x22\x27\x14\xd2\xa9\x23\xa3\x41\xff\x12\xb2\x3b\x6c\xdb\xa1\x93\xc5\xab\x16\xa5\x5c\x44\x0a\x9d\x60\x3a\x3d\xbb\x65\xc2\xc5\x99\x45\x2c\x19\x6e\x26\x21\x6b\x1d\x2d\xe2\x60\x6a\x91\x98\x91\x96\x87\xfd\x90\x33\xb2\x60\x32\x87\xb7\x78\x86\xc6\x2d\xb2\xe2\xa8\x7c\x1d\x63\x92\x00\xd7\x83\x45\x28\xa5\x93\x26\x61\x7b\x97\x39\x13\x25\x27\x50\x2b\xb4\x48\x8b\xd5\x56\x6b\xfd\xd8\xc2\x05\xcf\xb1\x89\x30\xb6\xe6\x6d\x1e\x68\xab\x45\xe3\x75\xbc\x14\x8b\x86\x85\xb1\x2c\x6e\x53\x44\xb2\x5e\x5a\x6a\xad\xdf\x2c\x55\x4b\x36\xf4\xaf\x82\x34\xa6\xdb\x64\x24\xf1\x25\x17\xe9\xb6\x54\x71\x55\xa9\x22\xc3\x5c\xd4\xbb\x24\xad\x5a\x86\x82\xdc\x9a\x52\xd1\x65\xbd\x9a\xbc\xb0\x21\x8a\x9c\x59\xb8\xc8\x58\xe2\xbc\x7b\xd3\x38\x1d\xd4\xfa\x9f\x31\x92\x94\x87\xb4\x8d\x7d\xb8\x29\x3c\x71\x36\x58\x14\x24\x02\xe8\xff\x6a\x09\x75\xf0\xcb\xba\x90\x6c\xdb\xcb\x92\xaf\xd7\x84\xde\xb2\x1e\xc9\x70\x94\x8c\xfd\xd1\xb8\x28\xb0\xff\x27\x34\x45\x94\x57\x65\x2e\xba\x49\x82\xb7\x6f\xa6\x89\xa6\xea\x1a\xf1\x99\x2f\x0c\xa4\xff\x8c\xc6\x0b\x35\x6f\x63\x17\xf0\x2d\x07\x64\x83\x12\x1a\x6f\xa9\x15\x36\x6b\xa3\x24\xf1\x51\x2c\x8c\xc5\x43\x9a\x35\xd0\x09\xc3\xb0\x99\x8b\x69\x28\xf7\x71\xff\x5e\x09\x52\x86\x84\xa1\x51\x7d\xf0\xf5\xd5\x4f\xb4\x79\x5e\x3e\x15\x3d\xb8\xd6\x3f\xc6\x47\x5b\x77\x2d\x3e\xec\x1f\x86\xd9\xa6\x64\xac\xc3\x82\xd6\xf7\xb4\xea\x9c\x4c\x1f\xa4\x6c\xcd\x1c\x2c\xea\x5e\x0a\x1b\xd0\x47\x29\x29\xc5\x70\x7c\x73\x8c\x3d\x30\x0b\x2f\x79\x72\x54\x37\xc2\x8f\x94\x6c\x1d\x6b\xca\x00\x75\x60\xbd\x5f\x8c\x7d\xd5\xb7\x91\x4d\xf5\x9b\xa5\xb6\x54\xdc\xb6\xd5\x62\xb8\x20\xd7\xbc\xb5\xb7\xfc\x8f\xd8\x70\x95\x5c\xaa\xde\x6f\xb0\xdf\xaa\x31\xa6\x4d\x8e\x14\x45\x2c\xe1\x2b\x1d\xb5\x4e\x82\xdd\x70\x4a\x7f\xb0\xda\x97\x6d\xeb\x87\xd3\x93\xbd\xe0\xf4\x44\x28\xcc\xca\xe4\xce\x45\x72\x71\xf1\xc3\xee\x32\x0d\x16\x8b\xf8\x6e\x12\xac\xb2\x75\xc2\xe8\x0f\x3f\x9c\x9e\xc4\x2b\xa9\x26\x10\x9a\x7b\x48\xdb\x13\x89\xa7\x27\x7b\x22\xf9\xd4\x22\x6c\x73\x74\xad\x51\x35\xbb\x5f\xe9\x0f\x3f\x8c\x35\x7f\xb6\xed\x5b\x19\xf7\x7a\xf4\xf2\xd7\x17\x63\x5a\x2a\xd1\x7f\xc8\x2f\xac\x0b\xd0\xbd\x36\x66\xaa\x6a\x52\x66\x95\xe7\x2a\xab\x52\x5d\x3f\xf4\x61\x1a\xe4\x42\x81\xb9\x2d\xaf\x70\xfa\x2f\x2a\xda\xdf\x94\xdb\xbf\xe8\x96\xef\x7c\x79\x9e\xd1\xf0\x4d\xf9\xa8\xf1\xcb\xe0\x3f\xa0\xb8\xf6\xcb\x86\x4f\x9d\xff\x70\xda\xa3\xf6\xbf\xc6\xb0\x62\xd6\x86\x97\xd5\xc6\x73\x9e\xb0\x19\xfd\xe1\x87\x5d\x2d\x33\xfe\xa0\xae\xaa\x03\xdc\xf8\x5c\x8c\xde\x9e\x31\x7c\x3b\x5b\x36\x68\x42\x46\xc7\x3b\xf5\x2d\x36\x17\xcf\x2d\x62\xe9\x40\x38\xd5\x25\x3b\xc3\xb5\xd7\x45\xd4\x58\xeb\xcd\xb6\x61\xe0\xcf\xe9\xb4\x89\x36\xe0\x4b\xa1\x5b\xd6\xe7\x2d\x16\x26\x5d\x58\x0f\x1a\x06\x86\x45\xd0\xc8\x86\x9c\xf4\x23\x62\xf9\xaa\x2f\x2c\x4c\x36\xe6\x8d\xee\xb1\x96\xbb\xbd\x98\x32\x83\x6f\x2d\xa7\x29\x9b\x97\xc4\xbf\xb7\x30\x51\x5f\x12\xe7\xa5\x6f\x01\xf0\x3c\x4a\x1c\x88\x93\xc0\x52\xf5\xbe\x62\x06\x0f\x74\xa5\x1e\xe5\xf9\xca\xb9\x63\x57\x37\x61\xf6\xa1\xfa\x2e\x7f\xb0\x8c\xff\x68\x48\x8d\x9b\xde\x4c\x6b\x89\x9c\xbb\xd4\xa5\x1e\xde\x2b\x93\x38\x8a\x60\xe2\xc1\xfb\xf4\x41\xb9\x1d\xc2\x01\x4d\x79\x37\x4a\x5b\x7c\x9e\x43\xcb\xae\x65\xcb\x5a\xd4\x22\x3f\x72\xaa\xbe\xa5\xb7\xba\xc3\x0c\x05\xfa\xad\xd4\xbb\xe4\x5c\xb6\xbb\xa6\xd7\x4d\xef\x5c\x9b\xef\x64\xaa\x3f\x56\x60\x5c\x1d\x24\x4c\xc9\xe6\x9f\xe3\x34\xe4\xd5\xc6\xe4\x8a\x66\x79\x6e\xbc\x16\x65\x41\x18\xa5\x78\xd8\x64\xc0\x70\x54\xd9\xb1\x0f\x59\x5d\x46\xf7\x01\x4f\xb4\xaa\x6b\xd8\x31\x8e\x5e\xa3\x3c\x6f\xa1\x56\x24\xd4\x9c\x91\xce\x88\xa7\x26\xba\xe8\x61\x79\x89\x22\xec\xb3\x6d\x55\xb7\x6d\x6f\xdf\xde\xfa\x14\x6c\x8e\xea\xeb\x65\x38\x43\xc2\xb2\xf4\x38\xa3\x66\x1d\x41\x5e\xc8\x0c\x59\xa0\xe5\xee\x68\x75\x0a\x79\x4d\xb3\xe1\x46\x3e\xcc\x3c\xc6\x9d\xf1\x59\x20\xfc\x9f\x22\xda\xda\x5a\xa7\x4e\x2b\xdb\xf6\x48\x2f\xb5\x79\x8e\x3c\x1b\x45\x8d\x5b\x38\xe1\x67\x59\xd7\xfb\xe2\xe1\xf6\x4e\xc8\xb0\xef\x41\xac\x1f\xb0\x6d\x7b\xc3\xf8\x66\x86\x4d\x85\x0d\x50\xf3\x17\x50\x4a\x34\xe4\xcd\x9b\xe6\x79\xad\x12\x94\xd2\x3b\xdb\xbe\x42\x77\x84\xe1\x61\xc7\xf3\x33\xf1\x56\xb6\xed\xad\x0c\x0f\x3d\x7f\x32\xfc\x0d\x4d\x08\xc3\x1d\xfe\x93\x61\xdf\xf5\xfb\x76\xc4\xbf\xf6\x9a\xc6\x67\x5b\xbf\x26\xda\x08\xa5\x1c\x36\x10\x78\x8c\xdb\x00\xc2\x4b\xa4\x54\x7a\x19\xb4\xc2\x3c\x6f\x69\xbd\x32\xb4\x48\x57\x7a\xe8\xf9\x21\xbf\x89\x9b\x2a\x08\xce\x39\xa6\x4e\x5a\x6a\xb0\x76\xa4\x15\x12\x68\x99\x4c\xea\x09\x9c\x75\x24\xf4\x7f\x89\x7a\x29\xdb\x78\x29\xad\xbf\x74\x1c\x8c\xa2\x31\xa5\x34\x1d\x45\xe3\x63\x1c\xb5\xdb\x9a\x08\x86\x73\x86\xf8\x43\xc2\x1f\x61\x5f\xbe\x77\xc7\x2b\x9c\xaa\x6b\xcf\x77\x0b\x32\xc5\xfe\xb4\x20\x29\x53\xcc\xae\xf9\xd0\x09\xce\x2e\xc0\xa3\x50\xb8\x15\x62\xf3\x13\xcd\x3a\x37\x86\xa2\x89\x04\xd5\x09\x03\x6c\xfe\x6a\x39\xd8\xf6\x12\xb4\xdf\x99\xd6\x7e\x5f\xe7\x79\xeb\x5a\xea\x17\x84\xd1\x9a\xa1\x0f\xcf\x30\xc6\x59\xf2\x20\xcf\xf5\x34\x67\xcc\x84\xf7\x66\x9e\x37\x70\x53\x4e\x90\x8a\xe5\xc8\xd3\x91\x32\x41\xb3\x13\xad\x17\x34\x94\xa3\x37\x22\x58\x55\x51\xf6\x48\x46\xa6\xa2\x3b\x46\x6c\x8c\x35\x84\x2f\xf4\x8c\x62\x3f\x8d\xbd\xf9\x4c\xaf\x5c\x49\x4b\xed\x94\x81\x76\xa0\x96\xc5\xd3\x1f\xef\x68\x0f\x97\x52\x9b\x5a\xb3\xae\x91\xe6\x93\x5f\x45\x6f\x99\x6f\x92\xda\x9b\x78\x18\xc2\x89\x55\x6b\xa9\x76\x0f\x3b\xf5\x1d\x4a\x3c\x8c\x7d\x53\x89\x91\xe7\xad\xe5\xb0\xb6\x25\xce\xb0\x8f\xe2\x86\x4d\xa5\x18\xd0\xd8\x81\x98\x44\xb3\x90\x4d\x87\x12\xda\xc1\x07\x55\x32\x6f\x3f\x4b\x27\xc1\x8a\x35\xb8\x19\xd4\x6c\xe7\xc4\xf9\x84\xf8\x24\x49\xe2\x2a\x0c\xd6\x86\x7b\xc8\xf9\x43\x94\x05\xf7\xbb\xf0\x26\xd9\x5d\x47\x09\x9b\xc4\xd7\x51\xf8\x07\x9b\xee\xb2\xfb\x55\xc2\xd2\x34\x8c\x23\x7f\xd7\x6a\xcb\x2c\xd7\x51\xf8\xfb\x9a\x9d\xc7\x49\x93\xde\xca\xd8\x3a\xc1\xac\x9f\xd1\x56\xe2\x4c\x59\xc6\x26\xd9\x9b\xf5\x6a\x11\x4e\x82\x8c\xa5\x64\x42\x25\x03\x3d\xcf\xb8\x9c\x02\x9a\x69\x71\x68\xcb\x05\x16\xfe\x00\xbd\xc6\x64\xa6\x9c\x92\x29\x83\xa8\x63\xc7\x18\x56\x94\x51\x3c\x06\x65\x95\xdc\x55\xc5\x58\x4e\x7e\x50\x9c\x33\x69\x65\x0c\x4a\x44\xe2\x69\xfa\x9c\x08\x07\x60\x56\x90\x90\xa6\xd0\xf9\x5f\xd9\x7d\x53\x03\x12\x6a\x59\xc0\x19\x63\x63\x61\x2e\x77\xd9\x7c\x6b\x17\xe7\xf9\x91\xf8\xf1\xe0\x56\xb8\xd4\x6d\x18\x17\x82\xeb\x05\x18\x2d\x44\x25\xf0\x82\x99\x08\xd5\x66\x94\x39\x60\xa0\x00\x82\xe0\x31\x3b\x66\x12\xc3\x43\x2a\xdc\x71\xd2\x06\xab\x54\x7d\x04\xd8\x13\x45\xf7\x4d\x76\x2a\x6a\x0a\xf8\x8e\x85\x36\xac\x83\x7e\x13\x9b\x77\xc8\xa3\x0c\xcf\x96\x14\x04\x45\x42\x07\x29\x18\x4d\x4a\x1f\x8d\x53\x18\x7f\xe0\x12\x21\x8f\x7f\x4e\xd9\x7a\x1a\xfb\x0b\x26\xc2\x67\xf9\x7f\x23\xe5\xf4\xf0\x1f\xc1\xeb\x6e\xca\x7f\x13\xb6\x00\x93\x06\xff\xd1\x3a\xb5\xfc\xcd\x93\x6d\x61\xf7\xde\x72\x0b\x62\xed\x36\x3c\x2f\x88\xd5\xd6\xc9\x09\xbb\x0d\xe3\x75\x2a\x9b\x5f\xf9\xf6\x5f\xdb\x5e\x2a\x0a\xb2\x4a\xd8\x5b\xd0\xfb\xf8\x8f\x60\x1a\xd3\xa4\x9b\x1a\x79\x63\xc0\x0f\xa9\xe9\x80\x08\x1b\xf5\xc6\x14\xf1\xbf\x79\xce\x46\x7d\xf8\x3b\x18\xe7\xb9\x39\xa7\xe4\xab\x7c\x6f\x06\x44\xd8\x15\x01\x11\x7b\x63\x6a\xf1\xa9\x31\xea\x8d\xe1\x3c\x8b\x94\xe6\x07\x7d\x5c\x48\xab\x9b\x27\xeb\x52\xe1\x31\xc4\x8a\xb2\xb9\x28\xc0\x1b\xeb\x9c\x7a\x78\x28\x6b\xa7\x66\x34\x62\x23\x77\xcc\x2b\xde\x1f\xd3\x36\xe2\x3f\x43\x5e\x65\x7e\xb9\x3f\xce\x73\x0f\xfb\xdd\x97\xc8\x62\xb7\x4c\xb8\x62\xc2\xb7\x56\x3c\x9d\xaa\x3b\x88\xc5\x38\x10\xdf\x1e\x8c\xdb\x6c\x74\xb8\xf1\x82\xcf\x7f\x6c\xbb\x5e\x62\xa1\x4c\x8c\x9a\xa6\x4e\x8b\x17\x6f\xdb\xbc\x77\x14\xad\xfd\xcd\x81\x3e\x90\x27\x9a\x3c\x8f\x21\x9f\x89\x3e\x34\x68\xc8\xdf\xa4\xd5\x2e\xf7\x13\xdb\xfe\x49\xbc\x9e\x80\xb3\x3c\x0d\x50\x02\x71\x19\x65\x70\x29\x15\x44\xdd\xc2\x96\x3e\x59\xe8\x64\xb8\xa3\xae\x31\x0c\x8c\xcb\xf3\x75\xcb\x3e\xcc\x78\x8b\xbb\x63\xe5\x5c\x06\x29\xe6\x68\xf5\x30\x2e\x38\x41\x0b\x12\xfa\xfa\xea\xa7\x06\x0f\x8b\xba\xf2\xb0\xf1\x80\x49\x2a\x85\x86\x1b\x0e\x14\x2d\xb7\x39\x92\xa7\x3e\x21\xe0\x6c\xb0\xf9\xec\x4a\x2a\x11\x85\xc9\xd8\x66\xbd\xce\xe5\xf9\xb8\xf6\xf3\x80\x80\x5d\xa6\xa1\x10\xfa\x55\x5b\xb6\xb1\xb6\x25\xac\x83\xf2\x17\x18\x14\x77\xe7\x88\x35\x22\x48\x89\x31\x68\xe0\x6b\x93\x52\xc3\x64\xdc\x98\x41\xc4\x6a\x6e\x65\x8d\x3a\x7a\x0b\xc3\x04\x2b\x70\x41\x6a\x13\xb6\x62\x6b\xad\x93\x35\xda\xa1\x14\x04\x50\x64\xb8\x0b\x09\x8b\xec\x70\xc8\x77\x7c\xbc\xb3\xfc\x16\xef\x83\xb0\xcd\x99\xb9\x25\x92\x86\x5c\x00\x4d\x7c\xf5\xc6\x30\x6c\xc1\xed\xaf\xf2\x36\xb1\x6d\x17\x80\x9b\x14\x79\x25\xd8\xb7\x5e\x96\x0f\xcd\x07\xa7\x1d\xcf\xb7\x5e\x98\xcf\x04\x15\x95\x24\x28\x8a\xfa\x97\x7c\x05\x71\x16\x11\x6a\xe2\xf9\x0b\xe7\x82\x60\x6f\x84\xeb\x99\xe6\xe2\x0b\x58\xdf\xe0\x80\x32\xd4\x04\xaa\xf2\x6e\x7b\x90\x7b\xdb\xea\x58\x40\xb2\x75\x16\x43\x6a\x08\x28\xc0\x51\x60\x50\x4a\x52\x27\x01\xb5\x16\x41\x9a\x99\xe9\x1d\x88\x6c\x62\x49\x6b\x3f\xa8\x86\xea\x5d\xbe\xca\x45\xb2\x7f\x1a\x42\xd6\xb6\x5a\xe6\x1e\xc2\x20\x72\x5e\x93\xb5\xa8\x47\xc5\x36\x99\xc6\x2d\x4a\x83\xa1\x65\x2c\x73\x56\x03\xe7\xbf\xad\x6e\x46\xae\x69\x2a\xdc\x1c\x9a\x66\x08\x79\xa0\xad\xb5\x6d\xb7\x52\x72\x45\x5b\x1e\x5f\xaf\x6f\x61\x59\x8e\xa5\x0c\xb1\x3c\x16\x17\x73\x9a\x1d\xcf\xe9\x7c\xb4\x14\x2a\xed\x74\x38\xdf\x3e\xe5\xae\x7d\xde\xf0\x79\x5d\x0c\x6e\x79\x3b\x2b\xba\xa4\x56\x1c\x2d\xc0\x8b\x8f\xd9\x76\x6b\x65\xdb\x95\xd6\x14\x7a\xca\x87\x33\xb4\xa2\xa3\x60\x78\x6b\xac\xf2\xfe\xad\xc3\x7b\x1f\xae\xc7\x24\xb0\xed\x07\x51\xb9\x2b\x8a\xa6\x14\x2d\x28\x9a\x50\x34\xa3\x68\x4e\x6f\xf1\xe8\x72\x9c\xe7\x68\x3e\xba\x1c\xd3\xc7\x02\xe3\xd1\x5c\x8a\x5f\xef\xde\xf0\xf4\x99\x79\x2f\x5e\x60\x63\xc0\xf1\xe4\xfc\x0f\xec\x5b\x16\x23\x6f\x8c\xf9\x4f\x77\x4c\xe6\x10\x5c\xcc\x30\x11\x1b\x4d\xc7\xc7\x73\xda\x6e\x4f\x21\x64\x0a\xef\x95\x3c\x47\x57\x74\x4a\x5d\x9c\xe7\x2b\x01\xfd\x02\xfd\x54\xed\x08\xdb\x6e\xb7\xaf\x6c\x7b\x2e\x00\xdf\x26\x23\x36\xa6\xa3\x33\x32\x25\x57\x63\x85\x9a\x60\xda\x2b\xf1\xfc\xcc\x46\x65\x7f\x52\xa3\x08\x1c\xb0\x5f\x09\xf5\x03\x7a\xae\x19\x7c\x55\x78\x62\xb8\x5b\x30\xdc\xad\xca\x70\xe7\x79\xab\xdd\xbe\xca\x73\x68\x85\xa8\xfe\xfc\xdf\xa8\x3a\xef\x9b\xab\x31\x26\xf3\x16\xef\x2e\x7c\x8c\x8f\xa5\xd0\x7e\xd5\xa1\x21\x16\x4a\x9c\xab\xff\x8c\x28\x75\x6d\xfb\x6a\x2f\x3a\xa5\x6e\x51\x34\xac\xb2\xe5\xf1\x04\x88\xbe\x20\x99\xa5\xd0\x33\x91\x93\xb2\x4c\x08\x3f\xe9\xa8\xd6\x2e\x53\x66\xb0\xd6\x91\x3c\x00\x67\xd3\x5d\x91\x81\x10\xeb\x75\xd8\xde\xd1\xe5\x78\xc8\x05\x45\x3f\x2c\x01\xe4\x51\x42\x47\x8c\x30\x62\x59\x24\x1b\x13\xb3\xac\x9a\x99\x3f\xaa\x9b\x5b\x0d\x4d\xcb\x00\x56\xf1\x54\xe1\x9b\x2e\x68\xd2\x86\x3d\x00\x1b\x45\xff\x2f\x6f\xef\xda\xe5\xb6\x8d\xac\x8d\x7e\xef\x5f\x61\x71\x7b\xf8\x02\x56\x49\x2d\x39\x33\x7b\xed\xcd\x6e\x98\xcb\x49\x9c\x89\x67\x92\x71\x92\x76\x26\xc9\xb0\x99\x5e\x6c\x09\xea\x66\x4c\x91\x0a\x08\xf5\x25\x4d\x9d\xdf\x7e\x16\x0a\x17\x82\x17\x39\xd9\xb3\xcf\x7b\xb2\x56\xdc\x14\x09\x02\x20\x2e\x85\x42\xa1\xea\x79\xd8\x2f\x84\x43\x95\x64\x29\x4d\xd9\x84\x08\xb5\x3f\xc7\x5f\x07\x3a\xb6\x7e\xaa\x7c\x16\x20\xd4\xd3\x5c\xe9\x81\xba\x61\xa2\xa7\xb2\x92\x51\xd1\x35\x27\x5a\x90\x24\x30\xd1\xe8\xf5\xd0\xb3\xa9\x5d\x51\x54\x5b\x74\x3f\x40\x89\xb3\xbc\xfd\x88\x0a\x32\x56\x5a\x3b\x40\x0e\x49\x8a\x18\xee\x1d\x8f\x2f\x52\xb1\x2c\xa9\x53\xad\x91\xd4\xea\x6b\xa4\xfa\x53\xd1\xee\xb7\x00\x62\xe7\xda\x75\x17\x55\x17\x50\xd2\x13\x73\xae\x40\x50\xc0\x9b\xf8\x73\x22\xf4\x78\x3e\x1c\x28\xdc\x66\x75\xff\x13\x8f\xba\xa9\x18\x7f\x4b\x6f\x63\x7e\xa0\x60\xf7\xe5\x47\x72\xe1\x03\x8d\x07\x86\x19\x13\xe9\xef\x69\x9a\x26\x47\x90\x69\xbb\xae\x71\xb5\xae\xa9\xa2\x8a\xac\xbc\x39\x52\xcc\x4f\x46\x39\x44\x7d\xe0\xd8\x78\xc5\xf7\x71\xb4\xc2\xb0\x5a\xbd\xb5\x60\xe0\x14\x74\xb2\xae\x10\x97\x92\x6d\x63\x39\xc7\x9c\xfa\x4e\x7e\x0f\xdb\x22\x52\x0f\x54\x05\xfa\xcf\xf4\x7d\x23\xfd\x89\x60\xa2\x37\xce\xb5\x03\xce\x02\x0f\xfd\xdc\x77\xe3\xfa\x7c\xb8\xbf\xcd\x0b\x4e\x48\xd7\x38\x4a\xfb\x9e\x59\xb4\xb5\x8d\x1e\x28\xc8\x4c\x74\x62\xb1\x9d\xb1\x98\xcf\x8b\x6a\x95\x69\x4b\x6d\x7b\xad\x66\xe1\x6d\xe7\xdc\xd9\x42\x4d\x61\x19\xf9\xfa\x00\xa2\xaa\x46\x63\xbb\x39\x63\x6c\x77\x00\x8c\x84\x39\xf6\x7c\x3d\xcf\x90\xaf\xcc\x18\xa4\xc3\x90\x4c\xd6\xaa\xc8\x2f\x30\x7c\xa6\x69\xaf\x51\xc4\x4e\x26\xc4\xc2\xc5\xf0\xf9\xad\xe0\x9b\xa6\xf9\x7f\xf8\x5c\x66\xd7\xe8\x64\x86\xa1\xc5\x78\x30\x11\x6d\x39\x99\x2c\x29\xd8\x83\x0a\xfc\xbd\xa0\x60\x0e\xb1\x46\x75\xef\x8f\xba\x75\x79\xde\x64\xaa\x16\x7c\x6e\x23\x7f\x9a\x40\x9f\x3a\x79\x8f\xec\x41\xde\x01\xec\xd5\xb8\x5e\xee\x3b\x73\xf9\xbf\x5c\x06\xf8\x51\x60\x1c\xc0\xdb\x5c\xf9\x76\x27\x87\x94\xbd\xbf\xbb\xd1\x47\x44\x54\x3b\x24\xce\xff\x73\x2c\x16\x54\xd7\x61\xa4\xb6\x13\xb7\x22\xcc\xb1\x74\x3c\xd8\xbd\xe5\xd9\x9a\x8f\xf2\x47\xff\x68\x66\x9c\x6b\x53\x7a\x00\x6c\xc0\xb1\xc4\xdf\x8e\x24\xd6\x6e\x73\xff\xcb\x6e\xf2\x9c\xef\x1c\xc6\x50\x7b\x4b\x1e\x00\xc3\x3d\x86\xf1\xb2\xfd\xac\x8e\x95\x19\x86\x81\x34\x08\x32\xdc\x01\x56\xe3\x46\x81\x48\xd6\xdf\x93\xa0\xd2\x8b\xb1\xbf\xf6\x9d\xbe\xf9\xcf\x86\xef\xdf\xf1\x21\x27\x4f\xb2\x48\x51\xc6\xf5\x1e\x7b\x56\xce\x44\xce\x96\x2a\x0d\xff\xb5\x9f\xa2\xdd\xec\x24\xe2\x7c\x11\x8b\xa9\x8c\x04\xa6\xbc\xe3\xe5\x30\x37\x2f\x24\xee\x4c\x9c\xcb\x33\x31\x65\x2f\x29\xef\x3b\x18\xf0\x03\x85\x6a\xbd\xfe\xd8\xeb\xcb\xdf\x79\xbd\x18\x7c\x4a\x37\xd6\xd4\xd5\xf5\x95\x8c\x65\x24\xce\x66\x33\xa5\xba\x9c\xd9\xcc\xca\x4e\x66\x37\x7f\x34\xb3\xb3\xe9\xb4\x3c\x97\xe3\xb9\x1c\x0e\xd4\x8d\xf2\x52\xde\x32\x6f\xcc\xff\x0a\x4f\x22\x5b\xe7\x55\x34\x59\x68\x19\x72\x5d\x3d\xa8\xeb\x4d\xae\xb9\xf0\x77\x59\x5d\xdf\x57\x62\xad\xae\xf3\x6d\x76\x83\xe8\x2a\xb4\x55\xa3\x64\xca\xd0\x02\xeb\x62\xb1\x9f\xea\xfd\xf5\x36\x47\xfa\x0d\x0d\x4c\x38\x48\xbf\xd3\xe9\xad\x6f\xe2\x23\xef\x00\x82\x5f\xf3\x2e\xbe\xd3\x02\x3a\x61\x12\x41\x70\x26\xcf\xc5\x99\x9c\x4e\x69\x39\x45\x5c\x80\x2e\x18\x75\xd9\xe6\x74\xc5\xbb\xf1\x3a\x72\xbe\xce\x95\x0e\x28\x51\x78\x28\x45\xaa\x69\x4a\xc8\x98\x08\x43\xdf\xa6\xc6\x18\xab\xa0\x66\x0f\xed\x21\x88\xd4\xe2\x27\xee\x6c\xcf\x72\x67\x63\x95\x78\x68\x62\x74\x7d\xe9\x1d\x25\x66\xce\xca\x68\xde\x68\x57\xab\x8f\x6d\xf5\x94\xda\x5b\xe3\xb1\xd1\x7e\x58\xc6\x48\x21\x61\xc8\x4d\x2e\xee\xc8\xb0\x63\xcb\xfc\x48\xfd\xf2\x8d\xd6\xce\xa5\xd6\xce\xa5\xd3\xce\x65\x4f\x3b\x97\x5d\xed\x1c\xf2\x30\xcc\x3f\xe2\x80\x4c\x75\xa9\x4d\x23\x4f\x6c\xe0\x04\x29\xd8\x2a\xa9\xf4\x8e\xca\xdf\x8d\x30\xc6\x6a\x77\xb8\x95\xbc\x4c\x99\xda\x70\xa9\x8f\x57\xa9\xd9\x2d\xe0\xbd\xe1\x07\xb6\xeb\xbe\xeb\xef\xfb\x8e\x93\x6b\xab\x87\x77\x9a\xda\xf7\xb2\x6d\x75\x4e\xb4\x80\x23\x1a\x54\x92\xa7\x26\xdd\xc8\x32\xa2\xd1\x95\x5d\x81\x6f\xb8\x6f\x34\xf0\xb5\xdb\x24\x85\x9a\x2d\x60\xdf\x8e\xdc\x82\xe9\x38\x6d\xe9\xa0\x2f\x48\xc5\xb8\x51\x71\x45\x18\x4e\x04\xa9\x30\x9f\xa6\x21\x99\xb5\xcf\x43\x81\x07\xd8\xea\x47\x4d\x7d\x24\x09\x57\x85\x07\xaf\x0a\x9e\x2a\x5c\x86\xe1\x44\xe9\xe1\x48\x34\xf0\xc0\x49\x49\xb1\xcb\x26\xb9\xbe\x97\xab\x7b\x2a\x3d\xed\xf8\x20\x9b\x70\xe8\xde\x60\x4c\x61\xad\xfe\xd9\xb1\xcc\x7e\xcb\x96\x55\x4d\x73\x5c\x24\x2d\x70\x8e\xb9\x00\xfd\x1c\x03\xf4\xb5\x12\x9d\x94\x29\x08\xcf\x9a\x4e\x64\xd3\x04\x2f\x02\xa8\xdb\x93\xfc\xa4\x4e\xa3\x1a\xf7\x04\x77\x6c\xc2\x9b\x66\x52\x85\xa1\x8c\xb7\xd1\x1b\x4e\xb6\x70\x0b\x1c\x6b\x08\x37\x4c\xc4\x79\xd3\x90\x2a\xe6\xd1\xae\x69\x4a\x04\xed\xc8\xa2\x3b\xf4\xbf\x0f\x43\x41\xee\xe0\x46\xa7\x2c\x71\x9b\x5b\xb0\x37\x9c\xdc\xc0\x9a\x42\x49\x0a\x50\xdd\xa3\x9e\xad\x98\x65\xf6\x3b\x5b\xe1\xae\x63\xc3\x8a\x64\x85\x5d\x72\x93\xac\x93\x55\xaa\x36\x1e\x77\xe6\x6a\x43\x3d\x9f\xc1\xbc\x69\x34\x7e\x98\xe9\xf8\x42\x35\xd1\xca\xf9\x41\xb8\xec\x6e\x74\x76\x85\xee\xc4\xbb\x64\xa5\xf2\x39\xc9\x71\x35\xd5\xfe\x63\x05\xec\x35\x31\xc7\xf1\xb7\x49\xc1\xf2\xf8\x17\x52\xc1\x86\x46\xb7\xea\xd6\xab\xd9\x32\x0c\x49\x95\x14\xaa\x7e\x99\xfa\xb3\xa1\xd4\xd8\x0e\x6e\xf0\x4b\x19\x63\x59\x7c\x63\x8f\x74\x76\x60\xb3\xa6\xd1\x0d\x85\x3c\x36\x15\xc8\xe0\x06\xf6\x34\xb2\xb1\x30\x19\xdc\x74\xbc\xc6\x2f\xba\xa2\x18\x90\x35\xc0\x47\x48\x28\xe7\xf6\xfc\x22\x41\x93\xb1\x52\x05\x10\x49\x54\x6d\xad\xdd\xa3\xe0\x59\x90\xc2\x9e\x65\xf1\x32\x5a\xc0\x6a\x3c\x16\x50\x87\xc3\x1f\xa0\x06\xa5\xcc\x6e\x8e\x24\xfa\x05\x99\x12\xd4\xbe\xc8\x24\xbc\x65\x3e\x79\x8d\x47\xec\x32\xc9\xd4\xd0\x6f\x1a\x31\x61\xac\x50\x73\x8a\x48\x26\x68\x3b\xca\x56\x26\x79\xb4\x31\x17\x2d\xd4\x8f\xde\x2d\xe6\x87\xf4\x6c\x7f\x5e\x9d\xed\x75\xb4\xbc\xe8\x7e\xeb\xde\x7c\x2b\xbd\x65\xc9\x15\x27\xf7\x9c\xdc\x52\x10\x34\x6d\xa5\x9d\x7a\x41\xdb\xc4\xbd\xe4\x36\xe6\x08\x0f\xd4\xd4\x5d\x73\x6c\x4d\x69\x72\x95\xea\x96\xce\xd9\x74\xba\x3f\xcb\xcf\x2b\x35\x83\xfd\x22\x73\x93\x07\xe2\x51\x18\x43\x88\x9a\xfe\xfb\x57\xcb\x30\xd4\x15\xc0\x4b\xb5\x7e\x3a\x83\xe5\x7e\xb6\xa4\x06\x09\x8e\x18\xe0\xef\xe0\x99\x3e\xa9\xd8\xcf\x5e\xea\x1c\xe3\xe0\x45\x10\x05\xc1\xc1\x03\x9b\xb1\xc1\x4a\x02\xf6\xe7\x79\x18\x5e\xb4\x59\xee\x21\x57\xa2\x44\x55\x4f\xdd\x75\x36\x50\x77\x17\x97\x6f\x7a\xb8\xb5\x8a\x91\x3d\x46\xc4\x1a\xda\x1f\x8f\x3e\x16\xb6\x6d\xa7\xba\x55\x4b\x3a\xc6\x12\x34\xc7\x3f\x72\xc8\x58\xad\x56\x99\x0f\xbc\xcc\x7f\xeb\x87\xb4\x1a\xf3\x8e\x0f\xe8\xc0\x5e\x5b\xdb\xbe\x5a\x4b\x9c\x3f\x67\xbc\x88\x56\xee\xc8\x14\x95\x96\x9a\x71\xd8\xe3\x4c\x54\x15\xb0\x87\x61\x67\xb5\xb1\x7b\x66\x18\x03\x11\x86\x13\x92\xb3\x1f\x74\xc0\x62\x4d\x11\x59\x28\x0c\x49\xcd\x6a\xdb\x00\x6a\xfc\x9b\x39\xd6\x34\x35\x85\xbd\x11\xe2\x2c\x49\x29\x05\xc1\x26\x4b\x20\x39\xfb\xd5\xe5\xa0\xc4\x3e\xcb\x6d\xac\x16\x54\x3a\xb9\xe9\x24\x01\x08\x72\x87\x99\x7a\x9d\xf2\x0c\x1d\x0d\xdb\x42\x9d\xd5\x5c\xbb\x08\xab\x7a\x53\x55\xcf\xbf\x27\x59\xea\x55\xb5\x48\xb2\x54\x7f\x80\xba\x52\x7d\xd5\x34\xbf\x5f\x78\x06\x66\x74\x46\xf9\x91\x42\xd1\xb3\x45\x68\xc8\x1a\x47\x87\x11\xdb\xf0\xd9\xa8\x8e\xdb\x23\x30\x1a\xbd\x26\x1c\xf6\xd4\x35\xfd\x41\xe5\xa8\xbd\x85\xf2\xe2\x48\x77\xaa\x4e\xa9\xf4\x5a\xfa\xce\xeb\xcc\x49\xad\x7b\x46\x1f\xd6\x60\xb4\x20\x88\x76\xc5\x11\x28\x3c\x6b\x76\xc1\x89\x4c\x44\x8a\x73\x2b\xce\xed\x2a\x1a\x55\xf6\xea\x8c\xd4\xec\x5d\xe7\x04\xc7\x8b\x0c\x73\xc6\x1e\x0f\x6c\xe6\xd5\x02\x2a\xd6\x5f\x2c\xc1\x00\xdf\x6e\x60\x07\x77\x70\xc3\x16\xf0\xc8\x82\x45\x00\xd7\xac\x0a\xc3\x24\x85\x2b\x55\xff\x7b\x56\xc0\x83\x5a\x34\xf3\x30\x6c\x7d\xb9\x89\x5a\xf9\x56\x14\x2e\xd8\x9b\x29\xd3\xdb\xab\xfb\x78\x19\x75\x00\xa0\x9a\x66\xbe\x84\xd7\xec\xc1\x54\x01\x07\xec\x4a\x03\x72\x69\x87\xa7\xac\x69\x56\xf4\xec\x71\xc2\xd8\xeb\x30\x34\x50\x30\x1b\xf6\x90\x3c\xa6\xf4\xec\x71\x3a\xd5\x6b\x54\x18\x1a\x8f\x80\x1d\x5b\x40\xd6\x34\x9b\x81\x97\xd4\xba\x69\xc8\x2d\xd9\xa8\x7e\x9e\x6c\xe9\xd9\x1d\xe3\xc9\xce\x7a\xaf\xdf\x91\x8d\x7a\x69\x0d\x35\xa5\x4f\x66\x58\x6f\xa8\x31\x58\xab\xca\xbc\x61\x17\xf4\x20\xc2\x90\x90\x0d\x9b\xdc\xa9\xc2\xc2\xf0\x66\x36\x03\x25\x0e\x6c\x72\x7a\xc8\x37\xe4\x66\xca\x1e\x41\x84\xa1\xaa\xee\x8d\xab\xd1\xd9\x1d\x93\xa6\xb4\x3b\x72\x0d\x57\xaa\x61\xbd\xa5\xf6\xe6\xd5\x42\x5b\xaa\x1f\x55\xc7\x5e\x27\x8f\x69\xd3\x5c\xe1\xbf\x44\xfd\x61\xdf\x68\x07\x94\x3d\xa5\x27\x57\x6a\xed\xbb\xa2\x07\xbb\xa0\xed\xe1\x8a\xc2\x2a\x0c\x95\x0e\x71\xe5\x7a\x31\x0c\x6f\x1c\x9e\x90\x92\x98\x1d\xcf\x0c\xb2\x6f\x3d\x1f\xf4\xa7\x41\xc1\xee\x29\x5c\x1f\xda\x98\x89\x82\x93\x8a\x46\xd5\x81\x54\x4a\x1a\x52\xe7\x0c\xc0\xb8\x73\xea\x39\xc0\xbe\x75\x13\x60\x43\x53\xa8\x56\x14\x1d\xf2\xcc\x31\x06\x04\x58\xb3\x49\x1e\x86\x19\xe1\xec\xd6\x15\xa3\x54\x0f\xd4\x73\x98\xc0\x00\xee\x25\x1a\x9b\xcc\xa4\xc4\xc5\x67\xcf\xd6\x4a\xc7\x5e\x7b\xc7\xb8\x2e\xa2\xf6\xd5\xcb\x30\x0c\xde\x7e\x8e\x4c\x09\x05\xdb\x27\x8b\x94\x9a\x2d\xfe\x7f\xf7\x82\x1e\xb7\x6a\xb0\xba\x15\x68\x8f\x47\xee\xb8\xe8\xe9\xc0\x6c\xc9\x88\x8b\xcd\x20\x85\x5d\xca\x7c\x89\x65\x2c\x9f\x92\xda\x33\x88\x96\xee\xe2\xe4\x16\xcf\xa4\x3b\xc6\x3d\x68\x97\x93\xbd\x15\x4d\x7a\x73\x67\x3f\x0e\xf5\xa4\x8a\xfd\x7d\xee\xc3\x5a\xd8\x90\xdf\x78\x11\xed\x1d\x98\xd2\x6c\x86\x93\x64\x9f\x54\x29\xf8\xeb\x28\x82\x9e\xe2\x47\xe8\xdd\xd4\x86\xe9\x6f\x30\x8a\x56\xce\x36\x1f\xfd\x14\x1b\x60\xbc\xb7\xda\xce\x78\xa0\xb1\x09\x98\xde\x5b\xfd\xab\x82\x25\x85\x09\xe1\x2c\x77\x7e\xb2\xd7\x5c\x8d\xd8\x7e\x6c\xb7\x1a\x1b\x20\xec\x59\x90\xb1\x9b\xde\x36\x4d\x4d\x38\xac\x29\x25\x39\x7a\x51\x81\x80\x89\x6c\x9a\xdf\x89\x76\x46\x3c\x2e\xdf\x59\x88\x5d\xd9\xc0\xd9\x80\x5a\x57\x21\xe3\xa2\x8b\xa1\x46\x57\x30\x74\x38\x62\x93\xc9\x06\x6e\x09\x85\xae\xdb\xe6\x91\x20\xab\xe5\x47\x9c\x60\x3f\x12\x4a\x3c\xe2\x3d\xef\x76\x71\x63\x4e\xf4\xff\xa1\x3d\xe6\x03\x08\xfe\x43\x9b\xa8\x5a\xeb\x60\xcf\x36\xa5\xd2\xab\x35\xb3\x69\x36\xc6\x52\xd5\xa0\x6d\xf5\x96\xe7\x37\xb7\xb2\xb9\xcf\xd7\xf2\x36\x80\xfe\x56\x46\x2f\x6b\xe3\x71\x59\x12\x02\x77\xca\xdb\xdd\xf3\xc6\xcb\xe8\xa5\x8e\x9c\x6b\xdd\xd8\x86\x7e\xd9\x63\xdf\x85\xf6\xb8\x53\x0c\xc9\xf0\xbe\xa4\xeb\x90\x8f\xf3\x20\x40\x00\xc0\xe0\x77\x3e\x5a\x27\x75\x5f\x6d\xde\x1c\xfd\xc8\x30\xfc\x7d\x63\x60\xdb\x10\x36\xc4\x11\xbd\xa5\x8e\x75\x99\x01\xa6\xeb\xd5\xa9\xf5\xab\x37\xd5\x7a\x3b\xa8\x10\x6e\x1e\x4f\xfc\xb6\xd7\xf6\xe1\x44\xa6\x71\xaf\xa9\x23\x04\x4e\x1b\xf7\x03\x2c\x3d\x3f\xc0\xd2\xf7\x03\xa4\x50\xf3\x03\xe1\xf4\xe4\x0a\x67\x3c\x7b\x40\x38\xc6\x9d\x60\x0f\xad\x37\x97\xb9\x95\x04\x51\xa0\xe1\x1d\x77\xc2\xe9\xa4\x57\xbe\xff\x9e\xfd\xc1\x1e\xbc\xbb\x70\xa5\x41\x83\x1f\xac\x97\x1c\x5c\xe9\x40\xd9\xcf\xab\x15\x7b\xd0\x97\x70\xd5\xfa\x74\x3e\xb8\x4b\x55\x2e\xba\x28\x3a\x17\xd8\x07\x73\x03\x1d\x31\x2f\x06\x08\x34\x3d\xe4\x3a\xe7\x40\x22\xce\x94\x52\x9e\x48\x25\xcd\xfe\x7b\xe2\xbb\xc8\x3b\x0b\x50\x7b\xcb\x2a\x07\x57\x18\x7d\x54\x13\x61\xe1\x07\x2d\xbc\x9d\x5b\x0a\xcb\x03\xbc\x3e\x8a\x30\x96\xa4\x23\x36\xf9\x7e\x44\x3d\xd7\x90\x9d\xc2\xe6\xec\x79\xd4\xbd\xb3\x2d\x8d\x72\xb7\x23\xdb\x5b\x2b\xe1\x87\x2e\x78\xda\x1f\x74\xfd\xe9\x41\xc7\xa8\xfa\x7e\xc6\x4e\x7f\x3e\x27\x49\x36\xfb\x2d\x4d\x7e\xbe\x3c\xbd\x5c\xbc\x8a\x10\x6a\x4c\x5e\x8a\xcb\xf2\x72\x93\xbe\xa0\x49\xf7\xf7\xe5\x69\xfc\x8a\xc4\xd1\xf9\xe5\xe9\xe5\xf2\x55\x43\x9f\x9f\xe6\x6d\xad\xde\xf7\x7c\x6e\xb6\x44\xd2\xf8\x6a\x7e\x23\xf8\xae\xab\x59\x96\xad\xcb\x87\x45\x7d\x84\x12\xd0\xe3\x56\x1c\x68\xd4\x2e\xbb\x63\x6f\x77\x37\xc9\xe6\x95\x01\x6c\x8b\xfc\xe8\xab\x2d\xdc\xa2\xda\x3f\x9b\x3c\xae\xcc\xa6\xc1\xa2\x30\xda\xdf\x47\x00\x8f\x64\xb2\x48\xbd\xf3\x32\xc2\x59\x10\x95\x95\x24\xe8\x1a\x45\x03\x0a\xda\xc0\x68\x97\x38\x74\x7e\xf1\x3f\x0c\x95\x85\x9e\xa7\x36\x3a\x23\xc5\x49\x99\x46\x49\x1a\x75\x93\x10\x0e\xe6\x8b\xe4\xd8\x17\x75\x47\x18\xc2\x0c\x7b\xb0\xb8\xe4\x09\x5d\x2c\x47\x7c\xed\xa0\xec\x00\xfe\x6a\x4a\x8c\x13\xcf\x11\xb5\x05\xc2\xe9\xf0\x15\x78\xf8\xc7\x6a\xbe\x98\x96\xf3\x0e\x34\x70\x4f\xc2\x16\x67\xf2\xbc\x44\xfb\x74\xbe\x21\xed\x64\x27\x79\x22\x53\x4d\x56\xd6\x1a\x31\xa9\x73\xd1\xef\x16\x90\xa4\x14\xfc\x9c\x74\xbb\x10\x0e\x98\x89\x17\x0d\xf9\x6a\x19\xfb\x62\x89\x08\x1a\x09\xe7\x8b\x37\xe6\x9a\xd6\x2d\xe7\xbd\x41\x7e\x46\x35\x72\xb2\xa4\x08\x16\x3b\x7a\x94\xf5\xd1\x17\x17\x14\xb1\x5a\xc7\x4e\xd7\x26\x26\xe5\xd0\x19\x2e\x0c\xdf\x39\xcd\x4d\x35\x68\xe4\x6a\x61\xe3\xac\x0d\x7c\xe3\x77\xf0\x8d\x86\xfa\xba\xac\x5f\x90\xf3\xe4\xf2\xfe\xf2\x87\x74\xfa\x8a\x26\x3f\xbf\x4a\x5f\x34\xff\xe1\xa1\x7d\x9d\x11\x87\x51\x3e\x3a\x80\x73\xa8\x70\x79\xe9\x74\xab\x53\xa4\xbf\x1b\xa9\xa3\xd1\x74\x73\x16\x9c\x6b\xa3\xc9\x22\x0d\xc3\xe0\x95\xbe\x6e\xe1\xb0\xd2\x16\xbf\xfc\x15\xfb\x24\x4e\xb4\x7d\x07\x9d\x10\xd2\xe8\x1b\x07\x72\xd4\x34\x93\x3c\x51\x89\xad\x53\xb3\x52\xe2\xe4\x5c\x83\x91\xc7\x08\x7b\x40\x4d\x47\x3b\x52\x92\x16\x22\x5a\xba\x67\x18\x13\x62\xa1\x92\x24\x93\x3e\x6d\xf1\x55\xac\x26\x69\xa4\x56\x9e\x16\x2b\x1c\xae\x94\x6a\x58\x73\xa5\x6e\xe0\x9b\x20\xad\x3f\x18\xce\xcc\x11\x00\xa7\x12\x7b\x15\x3e\xd3\x5d\x94\x6b\x57\xa8\x3e\x22\xb2\xa4\x2d\x36\xbe\xa4\x5b\xcd\xce\x94\xa7\x34\x36\x17\x44\xaa\x5f\xfa\x53\xd0\xf1\x30\x07\xe9\x23\xa6\x22\x8b\x97\x51\x72\x2b\x56\xf6\x63\xb4\xf3\xe4\x65\xda\xb2\x3e\x2d\x52\x56\x81\x37\x71\xd9\x52\xb3\xfe\x1d\x3a\x4b\xc2\x7b\xc7\x9c\xa2\x9d\x41\x3a\x2f\xe8\xe9\x17\x6d\xd5\x90\x6b\x57\xcc\x39\x32\x2a\xc7\xe6\x2f\x8e\x44\x72\xa5\x64\xa3\x43\xd0\x25\x3a\x1f\x7a\xa0\x9e\xd9\x4a\x8d\x35\xf8\x8e\x5d\x91\x52\x0f\xd3\xaf\xf5\x20\xd5\x3a\x78\xdd\xec\x04\xbf\x23\x71\xf4\x7d\x29\xf3\xa2\xc1\x08\xe0\x53\xf8\x9c\x3d\xa1\x07\x99\xe0\x25\x1e\xb7\x69\xc7\x8f\x1a\xb9\x0b\xf8\x03\x1e\x99\xa9\xd7\xba\xfc\x05\xff\x68\x97\x5b\x6f\x6d\x5f\xf6\xd6\xf6\x33\x77\xd8\xd7\x91\x81\xb7\x59\x3d\x86\x23\x6f\x3f\xc8\x33\x9b\x74\x90\xce\xc7\x65\x9b\x46\x29\x5a\x9c\xf1\x73\x71\xc6\x07\xf2\x4d\x43\xcd\x27\x3c\xf5\xe5\xdb\x01\x56\x45\x55\xf3\xba\x4f\x5c\xe4\x87\x51\xf9\xc2\x18\xad\x3d\x19\x1b\x4a\x62\xad\xa4\xe0\xf4\x75\x62\x43\x5b\x05\xec\x01\x43\x2b\x48\x93\x32\x3d\x13\x61\x28\x94\xc6\xd1\x0b\x7d\x42\x53\x6e\xeb\x2a\xb0\x5c\x86\x21\xc9\xe2\x4c\x3b\x9f\x18\x57\xd2\x7e\x0c\xfa\x91\x75\x0b\x21\x8f\xe9\x53\xe5\x4e\x80\xbb\x66\xb0\x3e\xb0\xbd\x3b\x8d\xea\xc8\xeb\x8a\x46\x15\x7a\x10\xac\xf9\xc3\xa8\x2b\x45\x3c\x02\xbd\x6c\x96\x72\xd5\x20\x60\x46\x3a\x75\x70\xca\x28\x96\xad\x4c\x51\x02\x2b\x32\xc2\x04\x65\x97\xb9\xe8\x20\xe7\xe8\x0e\x17\xb5\xda\x6d\xab\xe1\xf7\xba\x28\x88\x95\xc1\xd1\x6c\x79\x80\x6c\xbd\x8e\x46\x83\xb9\x06\xb4\x00\xde\x97\x75\xb8\x0a\x6e\xb8\x24\x14\x70\xd8\x51\xaa\x16\x8b\x6c\xbd\xfe\xb4\xcf\x71\xe0\x67\x9a\xad\xd7\xc4\x22\x5c\xf7\xd0\xf3\xa3\xde\x6f\x3b\x58\x39\x45\xcf\x2e\x83\x3e\xfc\x34\xe2\xf0\x61\xfd\x2c\x86\x01\xa1\x36\x82\xcb\x97\x89\x26\x78\xc8\xcc\xe7\xb1\x9a\x5e\x10\x0e\xfe\xc1\x31\x75\xa9\x71\xd6\x1f\xf3\xcb\xee\xbf\x86\xf0\xd7\x65\xdf\x61\xc3\x24\x56\xb3\xbf\xe3\x1f\x4b\x0f\x5a\x46\x1c\x4b\xdb\xf7\x05\x36\x79\xbf\x2e\x8a\xa3\x9f\x30\x92\xfd\xc7\x92\x1f\x29\xe1\xf7\xbf\xd9\x2f\x07\x3f\x5a\xe5\xf4\x07\x9a\xaa\xef\xdd\xac\x5e\xad\xf5\x8f\xd1\x7e\x79\x4d\x88\xdf\xc9\x4d\xf3\x74\xa0\xde\x6e\x19\x89\x2e\x9c\x1c\x1e\x7d\xdf\xdf\x5c\x23\x1d\x98\x11\xd4\x23\x89\x3d\xd7\x7d\x93\xcc\x2e\xa3\xf1\xe0\x4e\x44\xd4\x2e\x26\x90\x7c\xbb\x2b\x32\xc9\x03\xf4\x6e\x6c\x5f\x6c\x1a\x4e\xdd\xba\x9d\xa4\xc0\x7d\x88\x4a\x8c\xb1\xe8\x4c\x42\x44\xe4\xe6\xa9\xcf\x09\xee\x8e\xbf\x3c\x86\x0e\xd9\xea\x8b\x01\x36\x76\xc7\x75\xfd\x2f\x14\x8f\x88\x05\x85\x32\x0c\x07\xb2\xa6\x44\x93\x98\xdb\x25\x20\x0d\xa8\xbf\xa4\xbe\x52\xf2\xf3\x73\x74\xa5\xed\x4c\xfe\x9c\xc2\xd7\xad\x6d\x2a\x6f\x89\x33\xcd\xdb\xad\xcc\xc8\xa9\x55\xf3\x7e\x61\xa7\xc9\xcf\x9d\x9d\xd7\xd4\xa7\x8f\x79\xeb\x4b\xc5\xf6\x88\xf2\xab\x36\x30\xcf\xbb\xfb\x85\x3d\x14\x37\xed\x81\x58\x75\x3c\x0c\xb7\x04\xa3\x76\x35\x51\x38\x8d\x73\x4b\x62\x80\x94\x8d\xa8\x61\x65\x79\xa1\x94\x68\x97\x56\xde\xf2\xb2\x4d\x88\x8d\x19\x49\x63\xac\xd3\x5d\x0f\x09\xb7\x46\xd6\x92\x5a\x10\x3c\x8c\xc0\xef\xa7\xa2\x87\xc3\xd5\xfc\xb3\xac\x28\xae\xb3\xd5\x87\x2e\x09\x29\x67\x23\x72\x7e\x28\xbb\x5a\xd2\x3b\x23\xe6\x4c\xe8\x2c\xf9\x05\x4d\xac\xd0\xf5\x19\x96\x89\x48\x99\x5a\x85\x41\x1e\x94\x5a\xd3\xb2\x4f\x1c\xc0\x44\x78\x3a\xcf\x01\xbd\xee\xe2\x51\xcb\x6c\x09\x7b\xd6\x5b\xfa\x73\x96\x63\x04\x76\xb9\xc2\xb0\x7a\x36\x59\x9c\x65\xce\x5f\x97\xcd\x96\x66\xf5\xcd\xac\xd9\xf6\x6c\x3a\xad\xcf\x9d\x7b\x32\x45\x7f\xf3\x2a\xa9\xed\x01\xa8\x48\x16\x29\x08\xad\x54\xf2\x79\x2d\xab\xdd\xbb\xf2\x8b\xac\xa8\x39\x1e\xa9\x55\x2d\x17\xcb\x64\x49\x4f\xf8\x7c\xcb\xb7\x95\x78\xc4\x33\xab\x89\xd2\xfa\xd8\x64\x89\xac\x98\x15\x13\x71\x92\x46\x48\x77\x50\xb0\xa7\xce\x3a\xd5\x72\xf5\x18\xff\x0a\xd9\xc9\x7b\xb6\x84\xcc\xae\xdc\x1e\x9d\xab\xda\x41\x3d\x99\xb6\x15\xd0\x9d\x59\x5b\x52\xd2\xd8\x1e\x15\x84\x21\xf2\x65\x21\xc7\x48\x65\x3d\xae\xa2\x32\x0c\x4b\xb7\xfd\x6d\x95\x18\x76\x4d\x4a\x1a\x86\x92\x94\xf4\x40\x0f\xa4\x25\xb6\x01\x53\xb1\xbd\x9d\x19\x07\xd0\x70\x88\x23\xdf\x61\x6a\xe5\x5e\x86\x23\xe6\x98\x33\x22\xd8\xd5\xdc\xf0\x30\x10\xa9\xe9\x00\x5e\xcd\x96\x67\xb4\xb2\xe6\x68\x01\x4b\x0a\xe2\x9c\xd5\x61\x58\xcf\x66\x07\x5b\x74\x5f\x59\x74\x3a\x48\x9b\x1d\x87\x0a\x75\xa4\xca\x8b\x52\xee\x39\x6d\x76\x1a\x1e\x4f\x3f\x4d\xf6\xc6\x04\x38\x92\x32\x67\x99\x3e\xea\xc3\x10\xd2\x4e\xea\x91\x1e\x9d\x54\x07\x28\x2a\x5f\x79\xe8\x67\x24\x9a\x46\x36\x0d\xd1\xf9\xd9\xe2\xd5\x2b\xa3\xd9\x4d\x72\xf4\x4f\xe4\x3f\xe4\xb2\x43\xfe\xd1\x2e\x43\x39\x0e\xbd\x84\x83\x3d\x72\x31\xc7\x98\xb1\xf5\x18\xa6\x91\x48\xdb\xf1\x04\xb2\x69\xbc\x1e\x55\x79\x8f\xd4\xb5\x98\xdb\x42\xfb\x74\x47\xde\x7b\xa3\xf5\x2d\x0f\x4e\x0c\x14\x3e\xa7\xcc\xe7\x7c\xc3\x45\xe7\x1d\x77\x9e\x99\x24\x41\x59\xc9\x7c\xf3\x18\xa8\xf5\xb4\xba\x11\xbc\xae\x03\xf0\xa4\x11\x09\xf4\x24\x0b\xe8\x91\xbb\x2f\x53\x48\x02\xc1\xeb\xaa\xb8\xe3\x01\x04\x4a\x60\xf6\x32\x50\xc2\xe1\xd9\x78\x2e\xdd\x47\x0b\xb0\x19\xad\x03\x9d\x2b\xe2\xcf\x42\xa0\xa4\xef\xbf\x9b\xe9\x12\x4c\x3e\x2a\xd3\x14\x4a\x16\xec\x78\xb9\x46\x7d\x21\x67\x4f\xc8\xcb\x3a\xd2\x09\xe5\x01\xb2\xe2\x3e\x7b\xac\x47\x49\xbe\x70\x55\x68\xfb\x45\xaf\x0e\x83\x7e\x1a\x92\x53\xda\x61\xa3\x69\xb0\xb5\x35\x40\xa9\x3b\xf9\xae\x53\x07\xbd\x9f\x72\xf9\xb5\xa2\xdd\x76\x64\x07\x38\xf2\x88\x54\xd2\xeb\xfd\x96\xf0\xa4\x4c\xfe\x9c\xa2\x40\xd5\x57\x27\x55\x52\x26\xcb\x34\x25\x83\x12\x73\x44\x13\x1c\x23\xda\x3a\xc1\x75\xcf\x5b\x21\xdd\x25\xee\x0d\xf4\xb8\x21\x4a\x4b\x56\x63\xc9\x2e\x9b\x73\xd3\x9b\xa6\x81\xd4\x6f\xe4\x08\x8c\x64\x52\x26\x8b\x74\x1a\xa8\x41\x1e\xa4\xba\xb0\x1c\x99\x63\xda\x22\x0f\xf4\x40\x41\x93\x4c\xeb\xed\xb5\x2e\xed\x00\xaa\xed\x7c\x2f\x49\x2f\x30\x6f\xd1\xaa\x05\x59\x4b\x5b\xde\x0f\xe0\xd0\xa9\x6b\x4d\x3a\xe5\x51\x5e\x41\x31\xa4\xcc\x2a\x4e\xf4\x91\xe6\x79\x45\x0d\xde\x04\x2b\x4d\x13\xd5\xb0\xc7\x40\x05\xd1\x56\xce\x23\x8a\x54\x7b\x05\x83\x06\xf0\xfe\x56\xbb\xe8\x3f\xab\x79\xb1\x99\x61\x9b\xec\xf1\x44\x97\x9e\x14\x48\xae\xf3\x47\x99\xfa\x70\x51\x54\x9f\x0f\x5b\x52\xd0\x38\x8f\x0b\xab\x7e\x64\xa4\x02\x01\x6f\x21\xa7\xe6\xf2\x2b\xa5\x91\x45\xa4\x9a\x4e\xe1\xe3\x89\xdc\x5d\x61\x3a\x4f\xf5\x09\x55\xef\x96\x13\xc6\xde\xe2\xda\x68\x34\x95\x3d\x53\xba\x0a\x90\xbc\x69\x84\xed\x5a\x4c\xad\x9b\xe2\x70\x80\x15\xcb\xe3\xa2\x43\xbd\x2d\x1e\x9f\x0a\xe2\x29\x3f\xed\x18\x9e\x73\xcb\x95\xfd\x65\x55\x7d\x50\xbb\xe9\xf1\x27\x84\xc3\x6a\x5e\x2b\x9d\xf0\xbd\xc8\x56\x6a\x67\x3b\x5d\xbe\x62\x6a\x0d\x51\x15\xfc\x6a\xa4\x82\xc2\x8c\x33\x14\xa1\xa6\x6a\x27\x32\x5e\x11\x1a\x11\xaf\x94\x1b\x2e\x51\xd5\xd4\xc5\x13\xbf\x10\x76\x24\x19\xd1\xf1\xcd\x5c\xbe\xcf\xb7\xbc\xda\x4b\xb2\x52\x79\x7f\x64\x7a\xaa\x39\x9f\x2c\xd2\xe4\x93\x14\x77\xae\x19\x59\x00\x87\x2d\xc9\x69\x9c\x47\x6f\x81\x77\x9a\x1c\xf5\x9e\x7e\x4a\x49\x63\x19\xbd\xc5\x87\x2f\x07\x0f\x4b\x1a\x97\xd1\x57\x94\x76\xe7\x87\xb9\x3c\xc6\x0d\x35\x61\x6a\xdd\x36\x4b\x03\x87\x5c\xc7\x78\x55\x43\x15\x52\x8c\x38\xc0\x64\x4c\x26\x2f\x95\x2e\x28\x93\xbf\xa4\x27\x79\x22\x95\x20\x61\x99\xaa\x15\xd4\x61\x88\x17\xbe\x5c\x29\x99\xd2\x5c\x92\x4f\x66\x3c\x4d\x5e\xa6\x16\x90\xcb\xde\xf9\xc4\xbf\xb3\xc0\x14\x6a\x31\x06\xdb\x64\xea\x07\x05\x9d\xa9\x54\x37\xd4\xca\x47\xa1\x4a\x64\xb2\x48\xc7\xd8\xff\xf5\x93\x8e\x5c\x51\xfa\xa5\xb1\xe9\x45\xe3\xcb\x69\xf7\x25\x96\xb9\xe5\xf7\x40\x21\x77\x0d\x5b\x51\x6d\x1b\xc5\xb9\x54\x41\x45\xa1\x3a\xc0\xfd\x2d\x1f\x8b\xd8\x18\x90\xe8\x09\x26\xa1\x64\x96\x46\x0e\x72\x66\xa8\x1f\xbd\xba\x64\xde\x98\x23\x14\xea\x31\xe6\xd3\x56\xc0\xd3\x27\xdc\xe1\x69\xc1\xa9\xae\xfa\x45\xbe\x5a\xc6\x83\x32\x22\x01\xb3\x99\x6c\x9a\xcc\x9f\xbc\xb8\x77\x3b\x1c\x90\x7b\xfc\x9c\xa9\x6d\x9b\xda\x23\x65\x5a\x82\xe3\xc9\x9f\x4d\x0d\x99\x99\x57\x30\x91\x14\xdc\x2a\x8a\x60\xb9\xb8\x8c\x12\xda\x34\x5b\x92\x27\x22\x0d\x43\xf5\xaf\xde\x23\xb9\x63\xe2\x4c\xaf\x7a\x06\x5a\x04\x9d\xb1\xbe\xc0\xd4\xa0\x8a\x71\xb9\x7b\xb4\x54\xed\xa0\x36\x5b\xc1\xdf\xd8\xe9\xcf\xe4\xcd\x5d\x56\x34\x6f\x4b\xc9\x45\x99\x15\xcd\x77\x59\x79\xc3\x9b\xef\x54\xcb\xf1\x72\xc5\x1b\x0d\xbd\xd2\xa0\x1f\xfb\xf7\xdf\xbd\xa5\x28\x83\x9f\x9f\x9e\x1c\x13\x2f\xcc\x77\x02\xa7\x4f\xb8\xe7\xae\x2b\x0d\xa0\x62\x2e\xe7\xf7\x99\x28\x91\x23\xfb\x37\x83\x0a\x84\x58\xc6\xb4\x9f\xc4\xd2\x02\xbb\x92\x9e\xb9\x92\xa2\x67\xc1\x54\xce\xb7\xbc\xae\xb3\x1b\x0e\x52\x8b\x1a\xb4\x57\x5c\x69\xeb\xf2\x1b\x9b\x92\xf9\x4b\x7b\x47\xd6\xf8\x62\x15\x97\x19\x79\xa0\x07\x6c\x96\x4f\x3b\x63\xa7\x5d\x03\xbf\x54\x33\xd0\xe0\xa8\xf7\x30\x85\x3f\x7f\xf7\xb5\x09\x2f\xfc\xaa\xca\xd6\x7c\x1d\xc0\x97\x4a\xb4\x8d\xa6\xd5\x70\xc2\x5f\x52\x5b\x57\xa2\x99\x53\xf5\x8f\xb1\x71\xfa\xa9\xee\x69\x4e\x35\x47\x7e\x47\x1c\xf6\xbf\x97\x70\xea\xf6\x19\xad\xc6\xea\xa8\x0c\x97\x80\xc9\x7f\xc8\x72\x19\x99\xeb\xce\x84\x23\xda\x15\x20\x9e\xcd\x4c\xc6\x98\xf2\x6a\x6e\x32\xa0\x4d\x43\xdc\x0f\x36\x59\xc0\x04\x2d\x32\x61\xd8\x49\xff\x6a\xd1\x34\x9f\xf6\x26\x45\x72\x95\x5a\xbb\x21\xa6\xc3\x4f\x62\xfa\xcb\x20\xb0\x14\xe5\x9a\xfa\x1b\x13\x5c\xa8\x29\xd0\x34\xd8\x5a\x66\x77\xe7\x3f\x41\xaf\xdd\x1e\x14\xdd\x7c\x5d\x5d\xac\x44\x55\x14\x71\xa7\xa3\x4d\x89\x08\xbc\x3b\x44\x83\x3e\xd2\x73\xc3\x84\xb6\xdb\xf4\xd4\xf9\xbe\xef\x6b\x66\x68\xce\xac\x32\x34\x12\x93\xc0\x98\xc0\xd3\x4f\xa7\x9d\xb0\x6b\x25\x0f\xd0\x35\xf6\x59\xae\x36\x55\x93\x05\x08\xfa\x3d\x66\x58\x83\x48\xea\x14\x26\x0b\xcc\xf4\xc4\x46\xab\x77\x88\x2f\xf1\x85\xad\xa6\xdf\xcc\x90\xdd\xac\x40\x33\x3b\x69\x4f\xbe\x2d\xce\x3f\x8d\x48\xc1\x24\x0c\xcf\xeb\xdc\x26\xa9\x35\x75\x0b\x04\x5a\x34\x67\x4e\x2e\x8a\x42\x62\x7c\x30\x08\xc8\xe2\x32\x2a\x2d\xa1\x62\x9d\x42\x0d\xf6\x91\x17\x39\x91\xc7\x3c\x2a\x62\x5b\x0f\x1a\xed\x63\x0d\xad\x02\x82\x46\xd5\x01\x7e\x60\xa7\x3f\xcf\xb6\xf5\xec\x14\x7e\x65\xa7\x33\xed\x24\x40\x7d\x2b\xd4\x3f\xbb\xf6\xef\xb9\xac\xbe\xdf\xed\x9c\x7b\x81\x4b\xf6\xd7\x8e\xab\x8f\xf5\x21\xfb\x01\x82\x6d\x3d\xf3\x90\x71\x7e\x85\x7f\x6a\x9f\x84\x9f\xc6\xa6\x57\xf7\x7c\x5b\x23\x27\xf9\xbf\x27\x53\xef\xf4\xbb\xad\xe2\xdf\x51\x70\xe4\xf5\xdc\x50\x8c\x6a\xe7\x0a\x75\x35\xfd\xfb\x7c\x9f\xaf\xa7\xd3\x03\xfe\x65\x4b\xf8\xbb\xcf\x89\x8c\x30\x46\x63\xf6\xf2\xc4\xcf\xad\x87\x94\xf2\x74\x80\x9f\x34\x37\xb3\x8f\xc5\xd8\x7d\x83\xc9\xc8\x58\xea\x35\x1b\x7a\x1b\xf5\x0e\x7e\x3a\x30\xde\xc7\x12\x56\x55\xb9\xc9\x6f\xf6\x02\xad\x05\x78\x4a\x4e\x41\x1e\xa0\xe6\xf2\x18\xb9\xa2\x3e\x43\xc2\x2f\xb0\x00\xc3\x7d\x73\x9a\xa4\x79\xf2\x57\x22\x69\xca\xc4\x49\x97\x8f\x53\x3f\x29\x69\x97\x3d\x32\xef\xf3\x3a\x0f\x70\x95\x11\xa0\xa4\x53\x70\xd4\xfb\x72\xb5\x17\xeb\xdc\xd0\x35\x38\x40\xb6\x5a\xf1\xba\x3e\x66\xf5\x6e\xb3\x6f\x1a\x39\x62\x95\x95\x16\xbf\x5f\xed\x4a\x62\x77\xc0\xa2\x6a\x18\xe9\xf3\x96\x5a\xff\x04\x41\xa1\x3d\xe7\x8c\x45\x24\xe9\xd0\xc0\xd4\x39\x8f\xeb\x77\x76\x67\x6a\xf7\xc0\x93\xe9\x93\x60\x44\xf6\xe8\x75\x95\x22\x8b\xb6\xe7\xbf\xaa\xba\x30\xf5\xbd\x34\x2f\x9f\x95\x71\x22\xd3\x48\x76\xac\x95\xd4\xf7\x69\xd6\x8a\x82\xe1\x30\x29\x13\x99\x88\x34\x3d\x10\xbf\x25\x94\x7c\xf7\xd8\x60\x49\x49\x7f\x67\xd8\x19\x6d\xd0\xe4\xd9\x7b\xaa\xb6\x31\xb7\x59\xfd\x79\x26\xb3\x3f\x3e\xe6\xdb\x6f\x0f\xc3\x49\xbf\x3e\x52\xa9\x57\xea\xf5\xe7\x18\xb0\xf0\x77\xf8\xd6\xfc\xfd\xd1\x78\x2f\x3c\x69\xd7\x85\x17\x97\x87\xe6\x32\xb1\xd7\x29\x7d\x7e\x0a\x7f\x63\xa7\xc9\xeb\xd9\xbf\x52\x5f\xd2\xfc\x6b\xe0\x16\xd7\xf6\x79\x9f\xaf\x04\x59\x94\x59\xb0\xce\x64\x36\x53\x0a\x88\x95\x2f\x7f\x83\x60\xf6\x3c\x0c\xfa\x41\xfe\xfd\x01\x85\x6c\xb6\x1d\x77\x3d\xa5\xce\xe1\xa6\x4e\x8c\x11\xfc\x4b\xb1\xc7\x15\x11\xb7\xaf\x59\x51\xf3\x40\x2f\xb6\x24\x50\x22\x5d\x63\x38\x21\x52\x15\x67\x8c\x4d\xf9\x34\x08\xe2\x29\x8f\x7e\x74\xde\x1e\x7f\xbb\x78\xf7\x0f\xed\x90\x80\x73\x86\x1e\x88\xb0\x5b\xc7\x9c\x3e\x1d\xbe\xf5\x86\xaf\x0e\x69\xb2\x90\xf2\xad\xcf\xd8\x95\x7f\xc2\x3d\xe8\x44\x17\x7e\x6d\x1e\x12\x4e\x9b\xe6\xb9\xf7\xeb\x00\xeb\xee\x3b\x9d\xf9\xf7\xed\x5c\xcf\x4f\x5b\x07\x33\x65\x3e\xef\xbf\x42\x9f\xbe\x35\x9a\x94\x01\x5a\xbc\xfa\x58\xae\xcf\xfb\xb9\x5e\x1d\xcd\xf6\x79\x27\x5b\x54\x4e\xbc\x33\xfd\x41\x21\x3d\xa8\x7b\x7d\xc4\x0b\x99\xda\x3c\x57\x9e\x2f\x6a\x67\x0c\x69\xd7\x16\xef\x28\x07\xd7\xed\x6f\x51\x90\x54\xda\x91\xab\xf2\xce\xc0\x27\xcf\xf5\x13\x08\x4c\x23\xaa\xb1\x52\x07\xd4\x70\x3f\x09\x17\x1b\xa8\xe7\x71\x86\x9b\x03\x55\x0e\x29\x99\xfa\xa1\x35\xe9\x16\x80\x4c\x0f\x55\x7d\xf6\xf4\x57\x52\x1a\x33\xea\x5f\x28\x85\x7f\xe9\x30\x48\xe4\x42\x3e\x79\x8e\x43\xa1\x5f\xaa\x8f\x9e\x99\x9b\x8b\xa1\x6d\x45\x0b\x46\xdc\xe2\x7a\x2a\xb5\x1e\x5c\x96\xef\x9e\x46\xdf\xf7\x69\xec\x2d\xee\x45\xbe\x21\x95\x27\x67\x1d\x0e\xa1\x93\x01\x44\xd8\xe6\x02\x4e\x69\x2c\x22\xff\xc9\xbf\x7a\x77\x4f\x7e\xb7\x32\xc8\x94\x7f\x30\xa8\xa8\x30\xdc\xe7\xe9\x27\xea\xcb\xc7\x87\x63\x8f\xee\x7e\x50\x92\x19\x51\xee\xcb\xcd\x59\xb9\x19\x53\xbf\xee\xf9\x9e\x8f\xaf\xae\xaa\x25\x5a\x8f\x29\x86\x11\x9b\x9b\x87\x80\x4e\x03\x7c\x29\x80\x92\x3d\x77\xeb\x0f\x88\x30\x44\x54\xe5\x01\xa7\xba\x4a\xe5\x4d\x00\xdf\xbb\x46\x50\x1a\x95\xed\x61\x0c\xb2\xd2\x1d\x60\xcd\x87\x95\xa2\x4f\xc8\x25\xa7\xca\xd7\x48\xbc\xec\x6a\x8e\xa9\x74\xe1\xa5\xe3\x82\x42\x5a\x28\x17\xdd\xc4\xae\xe6\x57\x98\x4c\xed\x04\x6b\x0d\xec\x1a\xe4\xa5\x33\x84\x33\xc3\xd3\xe2\xbd\x53\xce\x66\x18\x31\x4b\x54\x59\xcc\xb8\xae\x5a\xd0\x5c\xff\x5d\x0a\x66\x81\xa9\xf0\x1c\x0b\xdc\x51\xa1\xd7\xfa\x57\x73\xf3\x31\x46\x4e\x54\x94\xc2\xa4\x0c\x43\x9c\xa0\x78\x7c\x82\xc6\x08\xa2\x84\x42\x5b\xcf\x71\xde\x6e\xd3\xec\x98\x22\x38\x71\xb2\x45\x77\x80\x40\x39\xe7\x9a\x59\xc0\x93\x3e\x9c\x39\x6e\x37\xef\x5b\x72\x3c\xd1\x93\x48\xd7\xc5\x22\xd5\x7c\x42\x7d\x51\x34\xd6\x43\xba\x9e\x2f\xed\x91\xf3\x88\x27\x0f\x91\x8c\x03\x67\xaa\x65\x41\xa8\x76\xee\x8f\xf6\x73\x11\xdb\x7e\xb5\xd2\xcc\xf1\x4e\x38\xad\x2b\x1a\x1d\xe8\xdd\x51\xe1\xa6\xd6\x49\x77\x04\x98\x59\x00\xa6\x73\xb9\x76\x83\xb7\x5d\xaa\x94\x25\xf4\x96\x69\xfb\xad\x9d\x36\x23\xe3\xf2\xe3\x53\x6f\x34\x93\x55\xc1\x33\xf1\xed\x47\xf3\x31\x03\x46\x8f\x76\x48\xd2\x51\x93\x9f\xaf\xbb\x2d\x21\xef\x1a\x97\xf4\x5a\x00\x59\xc7\xc3\xaa\xf6\xed\x69\xb3\x59\xd9\x34\x79\x67\x4b\x5c\x41\xa2\xb4\x23\x54\xca\x3e\xd2\x79\xba\x33\x30\x64\x47\xd7\x50\x63\x50\x11\x61\x84\x41\x95\x64\x29\xf0\xce\x60\xd5\x54\x27\x38\x20\x95\xdc\x9f\x4e\xc1\xfc\xc2\x31\x58\xb7\x9b\xb4\x9a\xf8\x16\x39\xe9\xcc\x42\x9a\xcc\x75\x96\xc6\x4a\x9b\x5a\xbf\xb8\x9c\x37\xf4\x72\x3d\x25\x71\x94\xf0\x37\x29\x3e\xb8\x5c\x4f\x1b\x7a\x6a\xd8\xd9\xfa\x94\xaf\x3f\x5b\x66\x5d\xca\x1a\x4a\x82\x29\xe7\xd3\x80\xe2\x1e\xef\x4f\xe9\x0b\x47\x98\x2b\x38\x4b\x82\xf7\xd5\x2e\x80\xe0\xbb\xfc\xe6\x56\x06\x10\x7c\x5a\x49\x59\x6d\x03\x08\xbe\xe2\x1b\x19\xa4\x50\x72\x36\xd8\xe3\x77\x59\x56\xbd\x43\x5b\xe7\x1f\xd7\x83\x5b\xc6\x13\xa1\x4a\xed\xbb\xaa\xed\xae\xaa\xf9\x1a\xbd\xfe\x4a\x54\xc4\xbe\xab\x2a\x03\x9e\x43\xfe\x8d\x6c\x9b\xa6\x93\x09\xa9\x10\x47\xbd\x97\xce\x34\x69\x36\xce\x0d\x1b\x94\x55\x89\x2a\x1e\xe1\x4c\x33\x76\xd5\xf2\xb1\x40\x62\x35\xa4\xfc\x6e\x4c\x08\x4a\xe7\x6e\x18\xe6\x1c\xf7\x82\xee\xed\xab\xf9\x0a\xe5\x50\x60\x52\x04\x08\x83\x3c\xb0\x50\x38\xef\x5c\xc8\xd8\x93\x1e\x79\x95\xde\x98\x65\x49\x95\xda\x62\x92\x2a\x85\xf6\x92\x49\xcb\xc2\x53\x69\x1b\x85\x70\xbc\xab\xb8\x7e\x50\x90\xd4\x4b\xad\x32\x6a\x77\x76\xad\x96\xbd\xe7\x63\x95\x78\xb9\x80\x9a\x95\x43\x1c\xd2\x67\xe5\x7c\xb5\x17\xc4\xc7\x8a\xf7\xbb\xc4\x2c\x6d\xe8\x8e\xb0\x67\x6a\x14\x17\x4a\x57\x17\x88\x21\x4b\x30\x81\xe6\xc2\x4f\x64\x1a\x07\x41\x14\xec\x1e\x02\x0a\xab\x4e\x98\x44\x2f\x59\xd3\xa8\x44\x13\xc6\x8a\x30\x9c\xee\x69\x18\x4a\xae\xdd\x89\x5d\x71\x3a\x0a\x77\x15\x86\xab\xe4\x93\x14\x83\xdd\x51\x23\xdb\x9f\xb2\x97\x50\xb0\xa2\x69\xd4\x7d\x58\xb1\xe9\xbe\x69\x96\x7a\x92\x5e\xe9\x76\xc1\xca\xae\xa6\x05\x05\xb2\x9c\x55\xf4\x05\x59\xce\x48\xa5\xaa\x7d\xba\x6f\x9a\xf9\x5f\x28\x3d\x67\x8b\x30\x24\x19\x5b\x50\x58\x9d\xb2\xea\x64\xf5\x82\xbd\x84\xc1\xcb\xe6\x48\xfc\xe0\xc5\x05\xac\xd8\x74\xd5\x34\xaa\xc4\x85\x5a\x88\x93\x65\x1a\xaf\xa6\x44\xfd\x9d\x2e\xe9\x0b\x91\xbc\x4c\xa3\xa9\xfa\x17\x4a\x25\x08\xe6\xfb\x32\x97\xac\x80\x72\x5e\xcb\x4c\x48\xb6\x82\x72\xce\xcb\x35\xc3\x90\x72\x34\x8f\x14\x1c\xc7\x85\xed\x34\x8f\xa0\x12\xb1\x61\xba\x13\xa0\xf4\x02\x99\x20\x67\x05\xf7\x37\xf5\x68\xb4\x10\xf3\xeb\x6a\xfd\xd8\x61\x11\x11\xbd\xe0\x34\xc4\xcb\x30\xe3\x57\x7a\xe3\x17\x3e\x46\x5d\xe9\xc6\xbd\x56\x26\x82\xeb\xa2\x5a\x7d\x08\x28\x60\x15\x58\xde\xa1\xfd\x1c\xb0\x5a\x2a\xa5\x57\x3b\x41\x2c\x20\x6b\x81\x49\xaa\xf3\xec\xac\x9a\x4e\x29\x29\x11\xbe\xdb\x4c\x44\x8c\x1d\x2f\xbb\xd3\x0f\x64\x4c\x5c\x0d\x54\x2f\xe4\x6a\xe0\x6b\x69\x5c\x7a\x9f\xd0\x34\x1a\xdf\x20\xa9\xd4\xa8\xec\x65\xc2\x90\xab\x2d\xd0\xf6\xce\xde\xec\xce\x38\x7a\xb1\xe8\x7c\xb5\xb7\x13\x8d\x74\x89\x13\xaf\x44\x7d\x07\xb4\xea\xee\x15\xac\xed\x70\x3a\x80\x73\xe1\xbe\x4b\x1f\x55\xe5\x1a\x99\x5c\x7d\x61\xaf\x3e\xea\x89\x87\x64\xd4\xd1\x3e\xea\xdb\xea\x7e\x64\x26\x6e\xcc\x4a\x8b\xba\xf2\x6d\xbe\x1e\x3b\xf7\x37\x69\xe8\x01\x64\x75\x73\x53\x8c\xad\xc2\xc1\x75\x55\x15\x3c\xf3\x0f\x66\x63\xb3\xa9\x50\x05\x13\xe3\xd7\xae\x0a\xb0\xd7\xfd\xa5\x3f\x33\xa5\xc4\x57\xfa\xaf\x7d\xd1\xfe\xd4\xef\x1e\xdc\x02\x77\xcb\xb5\xa9\xc0\xe2\x30\x35\x88\xcc\x84\x9c\xe8\x6b\xce\x4e\xbb\x51\x4b\xbd\xa0\xa5\xd3\x1c\x76\xea\xf5\xe7\xcd\xcf\xdb\x6a\xbd\x2f\xf8\xf3\xe6\xf2\x94\xc4\xd1\x2f\xd9\x5d\xd6\xf0\xd5\x36\xa3\xf5\x4a\xe4\x3b\x79\x9a\xc3\x96\xb3\x27\x0d\xed\x16\x25\x4b\x08\x2c\xf1\xd0\x76\x5f\xc8\x7c\x57\x70\xf6\x7f\xec\xd5\xff\x79\x15\x40\xd0\x52\x0e\xa5\x20\x6f\x79\xb6\xd6\x2f\x61\x44\xa9\x7e\x6e\x2e\x53\x58\x55\x45\x94\xbc\x74\x0f\xcf\x57\x55\x71\x23\xaa\xfd\x4e\x27\x73\xbf\xbc\x37\xa4\xe8\xbc\x20\xd5\xc4\x34\x99\xe2\xa5\x9f\x74\x1d\x25\x9f\xf4\x93\x9e\x4b\x61\x92\x8b\x57\x23\xef\x5c\x99\x88\xc5\x28\x59\x40\x10\x40\x10\xa4\x9e\x18\xb9\xf3\xb9\x60\x9d\x69\x81\xfd\x0e\x35\x66\x7c\x84\xc7\x50\x03\xd9\xd0\xc8\x7b\xbd\x4f\x1f\x14\x8f\x30\x0a\xd9\xd7\x92\x14\x7a\x66\x3f\x1d\xf0\x16\x3b\x7f\x50\x8e\x46\x6a\xd1\xe5\xf4\xec\xe1\x9a\xa1\xf0\xb3\x1b\xf1\xf3\xf2\x4c\x4c\xa7\x54\x4f\x44\x9e\x88\x14\x82\x9b\xa2\xba\xce\x8a\x37\x77\x59\x11\x60\x04\xb1\x96\x0e\xb2\xff\x8c\xd2\xc3\x96\xcf\xab\x9d\xc4\xfe\x62\xfa\x3a\xaf\x4a\xd8\xf2\x39\xb6\xb1\xba\x25\x37\x55\x25\xd5\x85\xed\x57\xbc\xce\xf4\xe9\xd6\x16\x1d\x18\xb2\x35\xbe\x71\x8b\x3f\xd7\x38\xc4\x1f\x39\x5c\x73\xb8\x52\xa3\xb9\x09\xff\x23\xbe\xbc\x9f\x9e\x9d\xb6\x5d\x72\x7f\x0c\x50\xc9\x82\x7a\xc0\x86\x49\x23\xaa\xad\xc0\xff\x42\x64\x37\x28\xb3\xa9\x05\x2b\x5a\xc0\xae\x6d\x86\xf5\xf9\xee\x6c\xad\x83\x15\x10\x70\x69\x9d\x52\x8d\x38\x59\xd1\xfe\xa1\x47\x45\xa9\x6d\xed\x5b\xa8\x3c\x44\xa2\x2a\x8d\xaa\xf6\xac\xe3\xca\x84\x5d\x57\xc6\xf8\x91\x31\x44\x54\xe8\xd0\x69\xf5\x63\x9d\xd7\xf9\x9d\x12\xac\x35\x23\x6b\xb3\x80\x57\xb4\x69\x12\x3d\x26\xe9\x10\xcc\x7e\xcf\xb6\x3c\xa9\xd3\xa6\xd9\xf2\xb9\x1d\xc4\x90\x79\x41\xc3\x7b\xb5\x98\x5e\xcd\x6f\xe5\xb6\xf8\x46\x70\xe3\x9f\x5b\xd1\xe9\x5e\x2d\xab\x2b\x0c\xeb\xd7\x28\x42\x19\xcb\x5a\xc8\xe4\x93\xf6\xfb\xb2\x0e\xff\x3d\xc9\xd8\xc6\xf7\x79\xf6\x81\x49\x59\x10\x68\x33\x9c\xc1\x74\xb1\x1f\xf7\x9e\x3f\x18\x05\xd3\xc8\xf5\x4d\xef\x2d\xd5\x15\x67\x15\xbb\x4d\xd6\x16\x49\xa2\xc4\x18\x22\xe3\x4b\x58\x41\x49\x5f\xcd\x96\x14\xdd\x91\x0c\xe0\x95\x6b\xe4\x82\xe5\x78\x18\x9f\xb1\x3b\x4e\xba\x8d\x5b\x51\x08\xb4\x2c\x0b\xf0\x64\xe9\x86\x93\x8c\x82\x26\x5d\x5e\x61\x89\x59\xb2\xc2\x12\x77\xb6\xa7\x2c\x46\x62\x40\x5d\x04\x6a\xd5\x12\x58\x1e\x1e\x95\x42\x7f\x6c\x54\x75\xca\x2e\x8f\x74\x2c\xb9\x6e\xb3\xe8\x53\xb1\xf5\xa9\xd5\x0c\x13\x1b\xca\xf6\x80\xc2\x35\xef\x3d\xb7\x74\x74\x10\xb4\xc4\x74\x83\x44\x86\x9f\x4d\x35\xc1\x63\x97\xca\xed\x9a\x53\xd8\x69\x10\xcf\xcf\x8a\xaa\xe4\xec\x91\xcf\x57\xea\x02\xfb\x6a\xb2\xa0\xbd\x5f\x6e\x70\x58\xe0\x4f\x95\xa1\x1f\x9d\xae\x3a\x35\x13\x3c\x7b\xf5\x70\x7e\xea\xae\x03\xd8\xcd\xcb\x0a\x0b\xf8\x4c\xbf\xc6\x26\x93\x41\x49\x6d\xde\x7e\xe8\x38\x0a\x82\x37\x6a\xb1\xfa\xc0\x1f\x4f\xe1\xc1\xac\x7a\xdb\x6a\x5f\xf3\x66\x57\xe5\xa5\xe4\xa2\x59\xe9\x00\xe0\x2d\x2f\xf7\xcd\x5a\x64\x37\xcd\x5a\x54\x3b\xda\xac\x8a\x7c\xf5\xe1\x14\x2e\xf0\x9d\xe4\xe7\x79\xfa\x82\xaa\xdd\xe0\x9c\xcc\xa7\xb4\xa1\x9e\x28\x79\xcd\x7d\xfa\x00\x77\xfb\x9d\x77\xdb\x63\xdc\xfe\xc0\xbb\xe1\xc5\x8c\xb1\x9e\x7b\x93\xdb\x01\x74\x40\x5d\x5b\x8f\xa7\xc3\x81\x50\xc6\x48\x80\x90\xb0\x68\x31\xf2\xb4\xbd\xcf\x7a\x28\x6d\xb8\xf5\x82\xba\x7b\xec\xea\x0e\xaa\x9e\xec\xd1\xeb\x60\xff\x2d\xd0\x60\x5a\x36\x8d\x00\xe1\xb6\xe0\x92\x62\xf6\x35\x66\x2f\x93\x3a\x85\xca\xd3\x98\xd4\xac\xc3\x43\xde\x52\xc3\xc3\x30\x96\xc7\x24\x67\x02\x4a\xe6\xb2\x88\xcc\x83\x30\x1c\x9e\x9b\x09\x95\xba\x84\xd2\xa5\x35\x3f\xbd\x1a\x18\x3c\xf1\x9c\xe6\xec\x1d\x77\x33\x78\x92\x3b\xe0\x00\x1f\x0d\xbf\xc2\x2d\x45\x0e\x24\x1f\xdd\xd8\x12\x3a\xaf\x36\x1b\xc2\xd1\x1f\x68\xcc\x45\xf1\x40\xe7\x37\xfb\x7c\xcd\x32\xfc\x83\x60\x79\xf8\xfb\x0a\xff\x4c\xa7\xe8\xba\x35\xb4\xc1\xf0\x3b\x5e\x4a\xed\x61\xa4\x83\x22\x72\x28\xf1\x44\xb9\xed\xa4\xf7\x0e\x2e\x52\xc4\xe4\xb9\x3b\x84\x98\x2c\xd1\x50\xea\xde\x57\xf7\x9e\x1c\xc9\x75\x34\x59\xc2\x2d\xb2\xba\x88\xc1\x39\x52\x89\x5c\xd4\x66\x8d\xc5\x52\x71\xaf\xb6\x0c\xf9\x3c\xaf\xdf\x8b\xfc\xe6\x86\x0b\x13\x92\x25\x75\x30\xa7\xb5\xa2\x53\x62\x4b\x44\x2c\x83\xac\xc0\xad\xe0\xd3\x81\xce\xd7\xbc\xe0\x37\x4a\xf8\x5a\x5a\x7a\x59\xed\xbe\x11\xd5\x2e\xbb\xc9\xf4\xb7\xba\xf6\xcf\x46\xbc\x8f\x9e\xb7\x06\x67\x09\x19\x1a\x4c\x6d\xcd\xc0\xd4\x83\x50\xc8\x26\x8c\x91\xbc\x5b\x71\xb5\x6d\x88\x3b\xaf\x23\x47\x35\x7b\x3a\x60\xf2\xb6\xaf\xb1\x46\x6f\xb7\x5b\xbe\xce\x33\xc9\x3b\x55\x03\x8e\x61\x5b\xbc\x94\x9f\x6b\x69\x80\x76\x9e\xbb\x96\x7b\x27\x6b\xcf\x22\x3a\x45\x99\x93\x61\xdb\x26\x52\x37\x1d\x71\xe6\xeb\x2c\x59\xa4\x70\x35\x47\xc7\x88\xf6\x48\x5b\x0d\x21\x0b\xe8\x6c\xe3\x37\xe1\x63\xf5\x53\x7a\xb8\x67\x66\x6c\xad\xda\x6a\xd5\xea\x0e\x80\xd7\x9c\x1e\xcc\x3d\xf6\xa4\x35\xa7\xe8\x69\x18\x29\xd7\xe1\x93\xf0\xb5\x18\xcb\xe7\x00\x77\xb6\x18\xaa\x99\x17\xf0\x34\x65\x6e\x46\x14\x6e\xf3\x48\xc5\x04\xb5\x77\xd0\xa7\xcc\xa2\x55\xa0\x81\xfa\x58\x54\x3d\x47\x24\x19\x3b\x49\x44\x6f\x92\x00\xd9\xb3\x3b\x5d\xff\x9a\x36\x8d\xf7\x0b\xd1\x3d\x49\xc6\xee\x4c\x91\xda\x89\xc3\xfe\xea\xb8\x2d\xf5\x4f\x44\xae\xda\x76\x32\x5d\x84\x84\xfa\x52\xa3\xcc\xd9\x47\x6a\x67\x87\x38\x0f\xd6\x5e\xe3\x79\xae\x19\x6a\x61\x0a\x05\x23\xe6\xa8\x21\xa0\xfe\xa1\xb1\xd2\x96\xac\x66\x57\xe0\x89\x31\xdb\x32\xc4\xfa\xd2\x5a\x95\x4c\x8a\xd4\xa0\x0d\x2d\x53\xd8\x31\x52\x27\x2f\x0d\x1d\x91\x81\xbe\x99\x5b\xec\x1b\x0a\xeb\x30\x24\x1b\xd6\x9f\x69\x6b\x9c\x69\xb0\x66\x24\x8f\x37\x9d\xf9\x16\x6d\xe6\xd7\x79\xb9\x36\x0c\x07\x6b\x38\xfa\xee\x8a\xb5\x27\x2b\x08\xa5\xb6\x86\x4a\xe4\x37\x98\xc7\x56\x1f\x3d\x96\x4e\x6a\x08\x50\x7d\x12\xe9\x1e\x02\xdb\xb7\x51\x0e\x3e\x0e\x46\x84\x3d\x7d\x04\x24\xc3\xc4\x68\x53\x68\xa5\xd2\xce\xe0\xfa\xcc\x03\x3c\x6e\x00\x72\xcb\xf6\x5a\xf5\x25\xe6\x92\x25\x69\x2b\x4d\x3e\xab\xf6\xa5\x64\x0b\xd8\xa8\x59\xb7\xdf\x85\xe1\x64\x39\x61\xcc\xfc\x6a\xe1\x2a\x76\x90\xa1\x75\xb1\xef\x84\xa4\x04\xd1\xc0\x31\x69\x0d\x19\xa5\xb0\x51\x0f\x54\x3b\xab\xbf\x36\xa7\x15\x85\x95\x1d\xd1\x76\x84\x76\x6f\x30\xfd\x87\x52\xc8\xe3\x5b\x1b\xb6\x72\xdb\xad\xef\x74\x0a\x0b\x58\xd1\xc8\xa8\xa5\xab\x56\x4c\xeb\x09\xa9\x3e\xd2\x3b\x2f\xfb\x37\x26\x66\x7b\x60\x1c\x86\x9d\x69\x1a\x86\xfe\xfc\xb1\x08\xa0\x7f\x70\xc8\xe6\x1b\xf2\xbf\x1a\xb5\xba\xb8\xa3\x83\x0f\xbb\x97\x91\xf2\xe3\x83\x17\x69\x41\xa0\x66\x35\xd2\x71\xf5\x08\x8f\x2e\x2f\xe7\x34\x98\xda\x31\x74\x79\x39\x27\x71\x34\x7f\x71\x79\x39\x6f\x68\x40\xa7\x01\x51\x57\xcf\x69\x80\x14\x14\xec\xd6\xc3\xdc\x3a\xa3\x2b\x76\x8b\x90\x5b\x79\x18\x6e\x27\x8c\xad\xe6\x76\xe0\x37\x0d\x22\xec\xab\x5e\xc5\xfb\xba\xdb\xeb\x30\x9c\xd4\x7a\xfc\xae\xe6\x6e\xf8\xaa\xc5\x26\x0c\x4b\x4c\x57\x3b\x46\x47\x12\xbc\x78\x81\xee\x76\x4d\x33\x69\xef\xab\x21\x7d\xdb\xc1\xd9\xf2\xdf\xe9\x0d\x99\xd9\x0c\x36\xc6\x6a\x17\x86\xf6\xaa\x1d\x95\xf4\x24\x0b\xc3\xc9\x6d\xbb\x0a\xa9\x1d\x4d\x26\xd6\xd5\x7d\xe9\xa6\x84\xbd\x61\xdf\xda\x81\x27\x29\xaf\x7c\xcf\x4a\xc2\x61\xdd\x3e\xb4\xc7\x84\x38\x0d\x5b\x78\xe6\xf5\xb3\xbc\x7c\xb6\xa7\xb6\x2f\xdd\xe1\xdb\x7a\xaa\x06\x05\x0e\xd3\xc9\x82\x9e\xf4\x9d\x4d\xf6\x38\x22\x5d\xea\x40\x17\xf2\x4c\x0f\xc8\x80\x1e\x30\x7e\x6a\x37\x08\x4c\xe9\x84\xfc\xa9\x61\xef\x06\xd1\x26\x7f\x50\x4a\xd7\x1e\x4f\x4c\xf4\xfe\xac\x7f\x2a\x87\x52\xd9\x53\x0a\x02\x5b\x1a\x6a\x26\x49\xad\x71\xd5\x70\x5c\xad\x06\x83\xd3\x3d\x35\x06\x7e\xb5\x41\x65\x35\x48\xb6\x3c\x93\xe7\xfd\x92\x10\xf3\x64\x9f\x48\xcf\xdf\xd9\xf0\xa8\xd6\xed\x98\x46\xae\x07\x7d\xc2\x35\x59\x29\xc5\xe2\x73\xf3\xc5\x4d\x83\x5d\xd5\xb9\xe7\x05\xc7\xd7\x6e\xdb\x6e\xeb\x68\x04\x4f\xed\x27\x82\x42\x23\xb0\x90\x9c\x65\x89\x9c\x4e\x53\x8a\x23\x35\xaf\x3d\x8d\xe1\x42\x56\xbb\x1d\x5f\x13\x7a\xa6\x9d\x25\xe7\xab\xbd\x10\xbc\x94\xa6\x6a\xf9\x9c\x17\x7c\x0b\x42\xe5\x52\xb1\xdc\x15\x93\x08\x2f\xbb\x31\x4d\xc4\xcb\xb7\x9e\x0b\x37\x2b\xcc\x10\xac\xe6\xfe\x1d\x3f\x81\xdd\xec\xfa\xf3\x88\xd4\xa6\xdc\x77\xd7\xbf\xb0\x0a\xea\xb9\x5a\x7d\x58\x85\x7f\x5a\xdf\x30\x52\x32\x32\x50\x39\x2b\x37\x77\x8d\xee\xa9\x33\x6a\x9a\xca\x7e\x0a\x35\x6b\xb8\xf9\xd2\x3d\xf2\x58\x28\x25\x9f\xd4\x73\xc1\xeb\x7d\x21\x19\x5a\x8c\xeb\xa1\xde\x57\x0f\x35\xd7\xf6\x00\x70\x35\xdf\x55\xb5\xb4\x7d\x17\x86\xdd\xdf\x9d\xbe\x04\x5b\x12\xfa\x73\xe9\x06\x3e\xee\x1c\x83\x43\x3e\x49\x61\xcf\x64\x57\x30\x40\xc1\xf8\x5c\xd3\x87\x20\xee\x7a\x18\x16\xbe\xf7\x0b\x09\x70\xdf\xe9\xf3\x21\xf0\xb9\x26\x5c\x78\xc5\x96\xc6\x23\xb5\x50\xba\xce\x6d\x5e\x9f\x15\xac\xe8\x84\x9f\xa3\xee\x69\xc0\xb7\xfc\x6c\x6d\xae\x93\x96\xc5\x01\xfd\x96\x0b\xc7\x68\x6e\x86\xaa\x89\xce\x7d\x3a\x80\xe6\x2e\xd8\xa3\x61\xcf\x29\xaa\x59\x92\xab\x1e\x44\xb0\x53\x27\xfb\x2c\xf1\x6d\x96\xe4\x29\x2b\x3b\xfa\x42\x7c\x45\x72\xad\x10\x1b\xdc\x8b\x02\x63\x3a\x0d\xc8\x90\x7e\x64\xf8\x68\x0b\xb7\x76\x51\x50\x39\x85\xa1\x0b\x76\x3d\xa9\x9c\x9c\xac\x0d\x7c\xac\x1a\x05\x51\xd1\xf6\x43\x75\x70\x7e\x3a\x85\x09\xc3\x3a\x97\xbf\xfb\x96\xb4\x18\x90\x88\x75\x8b\x4a\xb5\x1a\x27\xbd\x5e\x1d\x77\x29\x1d\x6c\x02\x80\xc3\x13\x2f\xf7\x5b\x6e\xbd\x49\xfb\xde\xa5\xe8\xe5\x89\x01\x38\xde\x7e\xd1\xba\x46\xa9\x09\x90\x97\x59\x81\x99\x3a\x1f\x98\xb1\x67\x9d\x23\xc1\x8f\xbf\x3e\x78\x92\xf0\xb4\xe7\xdd\x7a\xf4\xfb\x8c\x43\xc3\xef\x7c\xd2\xbd\xc8\xa5\xbd\x36\x4e\xb5\x78\xc8\x70\x80\x4d\x3e\x0e\x33\x92\x38\x27\xe1\x34\xe6\x91\x5a\x03\x4c\x4b\xa2\xb3\x9c\x91\x08\xd1\x53\x51\x65\xeb\xe8\xa9\xac\x3e\xdd\x5f\x1b\xdf\x5c\xc0\x21\x1c\x3d\xa1\xa6\x38\xe2\x49\xa9\x2a\xdc\x34\xce\x02\x70\xcb\x6d\x68\x85\x01\xcf\x94\x73\xcc\x20\x0c\x3f\x10\x09\xd6\x62\x16\x86\xef\x11\x68\x51\x4f\x0f\xb5\xd9\x82\xc9\xf2\x00\x66\x53\xf1\x7f\xa7\x14\x0a\xea\x6b\xdc\x81\xc1\x88\x4f\xa8\x95\x0f\xff\xc3\x42\xcc\x8a\xe9\xca\x69\x1a\x7c\x9e\xe1\x2a\x7d\xcd\x37\x95\xe0\xfb\x52\x37\xac\x2f\xe5\xba\x35\x68\x0f\x15\xb4\xb4\x53\xf2\xa7\x33\x86\xd0\x15\xb6\x73\x67\xae\xeb\x89\x16\x37\xf7\x1e\x3d\x1c\x0e\x3a\x18\xc5\xa9\x29\x03\xd7\xfb\xd1\xf0\x10\x55\xe0\x58\xd4\x88\x71\x65\x9c\x0f\xb3\xb2\x28\xb1\xb7\x79\xdd\x01\xa8\xd2\x49\x5d\xb8\x50\x67\xac\x81\xc4\x10\x54\x2d\x0d\xe3\x91\x49\x64\x11\x9d\xd0\x65\x5d\x27\xd3\x37\xf2\xda\xac\x2d\xdf\xe8\x95\x86\xaf\x99\xc3\xab\x74\xb7\x2c\xd1\x26\x8a\xf1\xfe\x43\xb3\x74\x71\xbf\xdd\xe2\xd7\x3c\x7a\x67\x8b\xd4\xab\xba\x1d\x06\x61\xf8\x89\x5e\x0d\xf0\x97\xe7\x85\x6c\xef\xb4\x2b\x40\x64\xef\xe9\x8c\xba\x5a\x02\xef\xfe\xd6\x49\x10\xae\x96\xaf\x5d\x92\xce\x6f\x73\xd8\xa8\x9b\x00\xa4\xde\x18\xe2\x66\xd3\x37\xe5\xcc\x65\xbe\xe5\x17\x32\xdb\xee\x98\x6e\x51\xfb\xb3\x69\x3e\xcf\x24\x9f\x97\xd5\x3d\x31\x46\x9f\x76\xee\x33\x9c\x03\x7d\x19\xca\x9e\x3c\x1c\xb2\xc8\x3c\x86\x61\x8b\xab\xa6\x1a\x53\x90\xf4\xfd\x8f\x68\x3a\x3a\xc1\x45\xbe\xdd\xe3\x67\x46\x93\x25\x74\x15\x86\x61\xd4\xf4\x70\x68\x9c\x1c\x1b\x07\xaf\x39\xa8\x35\xdc\x3c\x76\xa5\x20\x33\x55\x4f\x2d\x39\x40\x4f\x2b\xf9\x9f\x14\x3c\xfc\xae\x8f\x15\x3d\x50\x7f\x74\xd9\x63\xad\xf4\x3f\xa9\xc4\x47\x5a\xf9\xf7\x6a\x73\xc4\x68\xa7\x4f\xbc\x07\xb5\x3d\x38\xa4\xa5\xac\x90\x7f\xe7\x8f\x6a\xad\xb9\xc6\x65\x01\xf1\xcc\x56\x6a\xba\x17\x6e\x81\xba\xcd\xca\x1b\xbe\x7e\x5f\xed\x11\x4f\x5e\xdd\x91\xa2\x30\x6f\xad\xb9\xcc\xf2\x42\x5d\x61\x67\x7c\x73\x9b\xd5\xf8\xd2\x96\xcb\xcc\x24\xd9\x65\x37\xfc\x47\x7b\xf1\x93\xba\x40\x47\x4c\xf3\xf4\x2e\xe7\xf7\xa6\x14\xa1\x97\xc3\xb5\x2d\x55\x7c\x66\xae\x3f\xe8\xa4\x1f\xf8\xa3\xbd\x63\x88\xb8\xdc\x95\xae\x56\x91\xf3\x52\xfe\xd8\x5e\x62\x61\xd5\x66\x53\x73\x7d\x57\x5f\xe2\x5d\x73\x52\xf1\x76\xed\xfd\xc0\x9d\xb6\xaa\xde\x4a\x70\x5e\xfe\xd8\x5e\xe2\x1b\x5a\x0a\x78\xad\x20\x2b\x73\x8e\xa0\x7f\xb8\xfb\xf7\xb7\xf9\xd8\xce\x8d\x59\xa5\xb3\x4b\xde\xcb\xe7\x98\x3e\x0c\xdf\x58\x40\x68\xbd\x24\xc5\x26\x0e\x78\x6e\x1b\x22\x6e\x2f\x23\x3e\x77\x6d\xe1\xde\xf7\xe3\x1b\x1e\x7a\x79\x2d\x43\x19\x2f\xa3\x97\xa1\x8c\x3f\x89\xfe\x1c\xca\xf8\x65\xb4\x88\xcc\x8b\x7a\x2c\x58\xfb\xa8\x1a\x26\x2d\x0c\x97\x66\xc8\xd3\xa7\x22\x79\x19\xc0\x75\xb1\x17\xe6\x67\xb5\x97\xc1\x10\xd3\xa8\xbb\x07\xe1\x29\xeb\xab\x16\x4e\x69\x79\xef\xfc\x3b\x3f\x1c\x53\x10\x86\x69\xf5\x32\xdf\x31\x8c\x48\x1f\x36\x0c\x0f\xa1\x94\xdc\x10\x51\x80\xd7\xd5\x1d\x17\x01\xe0\x65\xc1\xb3\x3b\x6e\x6f\xef\x65\x60\x3b\xdd\x24\x37\xbf\xf4\x0b\xe6\x87\x79\xc5\x3e\xfa\x83\x5f\xdc\xad\x1e\x58\xbb\x4d\x24\x8d\x92\x3c\x18\x19\x18\xba\xd3\x5d\x25\x90\xb7\xc0\x6d\xfd\xdc\x80\xc1\x03\x24\x66\x14\xa6\x3e\x7a\x5f\x89\xc4\x10\xba\xc7\x59\xee\xb6\x7f\x20\xda\xdd\xeb\xf8\xa1\x0c\x98\x77\x10\x73\x7c\xe0\x25\xdc\xa1\xbb\xb3\xde\x76\xa6\x42\x9f\xb5\x4e\xba\x78\xff\x00\x55\x39\x34\xd5\x1d\x4b\x0e\x4b\xf5\xc2\x66\x73\x2c\x2e\x0c\x7d\xd7\x87\x82\x5e\xdd\x71\x4d\xe3\x14\x11\xbf\xbd\xe0\x8a\xf0\x9e\xa9\x41\x1f\x4c\x95\xed\xee\x3a\x2e\x5d\x0b\x4d\x83\x79\x30\xf5\x1e\x45\xed\x23\xa4\x32\xd1\x5b\x32\x28\xdd\xc6\x19\xa5\xea\xe8\xf1\x9f\x21\xdc\x41\x4c\x4d\x4e\xb5\xa0\xdf\x6c\x10\xf8\x9d\x1f\xc1\xce\x44\xb3\x80\x0c\xc3\x16\x4b\xa2\xc5\x04\x46\xe4\x1a\x09\xd2\x9d\x16\xa2\x92\xa3\x4f\x16\xde\x19\xfc\xc0\xa3\xc7\x65\x9d\x98\x01\x10\x3a\x44\xc1\xa2\xb2\xa2\x43\x52\x3c\xc9\x04\xcf\x9a\x6b\xd1\xac\xaa\xa2\xe1\xdb\x6b\xbe\x6e\x6e\x45\x93\x6f\x6f\x1a\x54\x80\x9b\x22\x2f\x3f\x34\x4a\x92\x37\xbb\x4c\x64\x5b\x4a\x3e\xe6\xc3\x84\x90\xae\xf4\xf2\xf4\xd5\xe9\x4d\x0e\xdf\xa8\x02\xf4\x39\x7f\x73\x8e\x4e\x61\xcd\xb9\xca\xed\x34\x87\xaf\x39\x3b\x35\x87\xd5\x97\xf5\x0b\x12\x47\xc9\xcf\x2c\x6d\xd8\x65\xfd\xc2\x9e\x61\xcf\xe9\x69\x0e\x9f\x73\x76\xfa\xf3\x65\xfd\xe2\x7c\x42\xe2\xe8\x32\xf9\xec\xf3\xd7\xef\x5f\x5f\x26\xcd\x6c\x46\x1b\x75\x23\xbd\x4c\xd5\xf5\xab\xcb\xfa\xc5\x73\x3f\xf2\xea\x1f\xdd\xb3\x60\x0d\xd9\xa6\x56\x32\xa5\xcd\x7f\x20\x43\xa0\x40\xe9\x83\xcb\x05\x52\xa8\x74\x08\x11\x6c\x41\xe6\x48\x80\x5e\x33\x01\x4d\x16\x69\xd3\x78\x38\x65\xbf\x74\x19\xcb\x70\x0e\x11\x2d\xb5\x8f\xd1\x2c\x4e\x83\xd3\x60\x6a\x34\x5f\x2f\xa7\xb7\xbc\x17\xa0\x75\xaa\xdd\x77\x5b\xcf\x07\xc7\x09\xf4\x17\x1a\x73\x5f\x81\x76\xc1\x37\x91\x55\xf1\x07\xa5\xfa\x25\x7d\xc5\x47\xcd\x2a\xb0\xd7\x20\x2a\x3d\x7e\x56\xb5\x09\xe8\x1a\xd2\x49\xe5\x45\x82\x50\x3c\x20\xc5\xa3\x3e\xa8\x28\x14\xac\x72\x46\x75\x37\x0b\x8c\xe1\x34\x33\x93\x07\xb2\xf6\xa4\x0a\x0a\x03\x3c\xb6\x80\x92\x15\x49\x9e\xf6\x9d\x9f\x3a\x07\xbf\x90\x83\x4a\x93\x88\x94\x9e\x7c\xdb\xad\x53\xcd\xbe\xf5\xea\xb4\x67\x3e\x54\x5a\x4d\xc1\x04\xea\x68\x8c\x11\xd7\x12\x5f\x78\xce\xc3\x92\xd9\xf3\xea\x24\x55\xbb\x18\xeb\x4c\xdc\xfa\x2d\x2d\xe0\xb6\x8d\xbc\x5e\xb3\xdb\xd9\x12\xee\x10\x51\x1b\x6e\xd8\x96\xdc\xe1\xc1\xc2\x4d\xd3\x20\xa6\xde\xe0\x14\xfe\x2e\x0c\x27\xbe\x53\x47\x18\x7e\x6d\xd6\xe7\x3b\x0f\x9f\xbf\x3b\x8f\x1d\x5c\x0e\x9f\xf3\x5f\x49\x4e\x4f\x6e\xc2\x90\x20\x1d\xf2\x9d\x67\x42\xcb\xa1\x42\x2f\x22\x42\x29\x85\x2f\x38\xa9\xac\x20\xc6\x0a\xdd\x62\x7f\x91\x9c\xdd\xab\xad\x32\x72\x7c\x75\xbd\x6d\x27\x4b\xe0\x6a\xdd\xf0\xa7\x00\x3a\x03\x78\xee\x45\x7e\x84\x59\x45\xa1\x6a\x9a\xd2\x18\xb6\xf6\x8c\xd4\x06\xab\xf0\x8e\x93\xdc\xf3\xeb\xf9\x85\x3b\xc2\x92\xb3\xcd\xf9\xed\xd9\x66\x3a\xa5\x05\xcb\x61\x33\x61\x6c\x8d\xd4\x1e\x57\xda\xd7\x84\x14\x80\xf1\xfe\x14\xf6\x6a\x27\xa4\xdd\x9b\x6a\xb8\x53\x0f\x5c\x76\x94\x82\xb0\xa1\xe1\x9b\x14\x0a\xd8\x50\x4d\xaf\xa8\x7d\x86\xea\xa4\x6e\xb1\x9c\x7b\x1f\xa8\x6b\x57\xc3\x5b\x4e\x55\x27\x9e\x6d\xce\xf7\xa6\x32\xb5\xca\xca\xba\x18\x15\xbe\x8b\xd1\xc4\x0d\xf0\xa2\xeb\x57\xa7\x6a\xe8\x96\xdc\x15\x14\xc8\xed\x36\xaf\xc5\x2a\x0c\x03\xed\xb5\x19\x4c\x18\xf3\x33\xeb\x51\x4c\x5c\xcd\xaf\xf8\x5d\x56\x7c\x2f\x8a\x30\x9c\x14\xf3\xb2\xfa\x1a\xdf\x52\xf9\xda\x07\x3a\x43\x78\x2a\xab\x72\xc5\x23\x95\xa6\x5c\xf1\xa6\x29\x7a\xe2\x04\x6f\x07\xf4\x40\xa3\x47\x55\x5e\xeb\xb8\xe5\xa2\x47\x3f\xe7\xc8\x36\x51\xc0\x8a\x3a\x33\x9e\x27\x07\x7e\xe3\x03\x2e\x02\xc8\x99\x8c\x7d\x4c\x79\x1a\x71\xa8\xd8\xe2\xcc\xf0\x12\x95\xda\x9d\x17\x1d\x7f\x45\xd3\x2c\x27\x3e\x3e\x3c\xaa\x23\x05\xcf\x4a\x9c\x95\x77\x9a\xb3\xb0\xec\x50\x09\x13\x81\x31\x06\xa5\xe6\x3b\x51\x49\xbc\x2e\xee\xa4\xed\xb8\x66\x7b\xe4\x6e\xdc\x8f\x1c\xf5\x7d\xe7\xc6\x79\x8c\x6d\x53\x7c\xc7\x21\x38\x7f\xbe\x7c\x75\x7e\xfa\xfc\xe5\xab\x40\xa3\x1a\x0f\xd4\x94\xd6\xe9\xc3\x67\x21\xeb\xb9\x44\xc1\x86\xe5\x36\x46\x7d\x42\xfa\x3e\x54\xba\x4d\xfc\x78\x80\x65\xf7\x86\x0e\x83\xd6\x8c\x12\x84\x53\x2d\x25\xd1\x47\x6e\x45\x0d\x9c\x32\xa9\xd4\x4f\x6f\xfa\x38\x06\x46\x56\x25\x25\x12\xf1\xa9\x3f\x85\x45\x53\x6a\x09\x40\x48\xc1\xf6\xc7\x38\x40\xc2\xd0\xda\xbb\x6a\xb3\x21\xd8\xdb\xb5\x96\xd5\xf6\x2a\x32\x79\xe9\x78\x85\xc0\x3a\x8b\xe1\xef\xa6\x21\xfb\x8e\x17\x18\xab\x3b\x3f\xb1\x45\x24\xe2\x33\x53\x6d\xf3\xae\x9a\x06\x3f\x04\xd0\xc1\xd2\xff\xc4\xaa\xff\x69\x5f\x71\x82\xdf\xa6\xbe\xcc\x78\xc0\xe0\x32\xb5\xb2\x1d\x6f\xda\xc8\x1b\x2e\x3e\x1b\x14\x27\x19\x4c\x36\x61\xa8\xcf\xd2\xda\x11\xb5\xd2\x81\x5a\xe5\x20\xd4\xd2\xa7\x44\x2c\x31\x50\xa0\xa3\xc4\xe3\x98\xf7\xc3\x41\xb9\x1b\xf6\xf9\x86\xfc\x44\x04\x35\xd0\xed\x22\x79\xde\x46\xa4\xe3\x2d\xbb\xfc\xb5\xe8\x04\xf6\x4e\x9e\x94\x69\xdc\xd3\xcc\x90\xc1\xb0\x7b\xe8\x88\x4e\x60\xf6\xd0\xf1\xc4\x2f\xc0\x74\xf8\x41\x24\xdf\x7a\x08\x05\xc4\xff\x69\xb5\xc4\xa1\x0e\xbf\x46\xe2\x9f\xb1\x59\xf2\x9b\x53\x10\xc7\x0f\xdb\x87\x09\xe9\x08\x3f\xb5\x49\xd3\x0f\xc7\xed\xe3\xec\x62\x6c\xb9\x66\x59\xd1\x3e\xf4\xc6\xf1\x1e\x99\xbb\xe9\x40\x91\x5d\x9a\x23\x99\xfe\x84\xea\xdd\xfb\xef\xfe\xad\xa6\xd1\xb6\x47\xdf\x9f\x95\xb7\xf1\xb9\x7c\x10\xb1\x48\x0f\xa0\x7d\x30\x47\xf6\x9e\x5f\xf0\xde\x76\xa9\xf3\x79\xff\x7e\x15\xff\xe1\xda\xb3\xe3\xff\xa9\xeb\xb9\x13\xfc\xdf\xaa\x8e\xd5\xe0\xba\x45\x2d\x47\xee\xfd\x77\xff\x96\x35\x52\xb4\xf5\x3a\x91\xf3\xbc\xac\xb9\x90\x9f\xa2\x99\x5b\x89\xc9\x0e\xb0\xb2\xaa\xa8\xb6\x80\xff\x8f\xeb\x89\x25\xfb\x6b\x43\xef\xc6\xa0\x60\xed\xff\x75\x80\x6c\x23\x47\x2d\x04\xff\xdf\x17\xd7\xa1\xc3\x51\x45\x0f\x80\x52\x1d\xa8\x3e\x1e\x35\x9b\x45\x52\x5b\xf7\x12\x99\x52\x3c\x06\xef\xf3\xe8\x90\xde\x2a\xc9\x91\xb7\x43\x6d\xc0\x3b\xbe\xd7\xdd\x7d\xe2\xc8\x7a\xe5\xf9\xba\x1a\x33\x51\x18\x72\x83\xca\xc3\x98\x8c\x79\x64\x6c\xd1\x4a\xfd\x19\x0d\x77\x43\xed\xab\x13\xbc\xae\x56\xd4\x3f\x38\xab\xdb\x73\x1b\xdc\x13\xe9\xa3\xcd\x2e\x33\x4b\x17\xaf\x40\x63\x5e\x78\x3b\x0b\x87\xc1\xe3\x7c\x95\x47\x71\x5f\x78\x18\x4e\xbe\xf1\x88\xd2\x26\x5b\x9e\x38\x27\x7c\xfe\x31\x27\xfc\x94\x3e\x71\xd6\x77\xb1\x57\x83\x5a\x3c\x6a\x36\x06\xbb\xc9\xc0\x13\x6f\xf3\x31\xc2\x9c\x95\x1f\xef\x30\xa9\x3b\xcc\xab\x37\x53\x99\xb2\x85\x07\x81\x71\x90\x66\x84\x59\xc1\xa6\x27\x38\x1e\xc6\x1d\x97\x40\x46\x5b\xe9\xe2\xd8\x5a\x93\x71\xe2\x82\xe0\x3e\x32\xd2\xdb\x30\xf3\xee\xf0\x3e\xf1\x00\x85\xf5\xd4\x3e\x5f\x8c\x7c\x19\x92\xdb\x00\xfa\xf9\x98\xba\x98\x70\x08\xc3\x7b\x73\x50\xb2\xdf\x33\xb6\xe9\xaf\x7a\x5f\x45\x81\xbe\x0a\xac\xd8\x52\xb7\xcc\x65\x00\xfe\xd4\x8a\x02\x2d\x2f\xec\xdd\xd7\x38\x9b\x03\x9c\xd4\x81\x6d\x80\xd7\x45\x11\x05\x5e\x63\x8c\xd8\xdc\x7a\xc8\xe9\xbc\x13\x88\xa7\x29\xb5\x10\x73\xaa\x72\x8c\x7d\xb3\x25\x64\x6c\x71\x96\x9d\xb3\xea\x2c\x53\xfa\x2b\x12\x70\x56\x5e\x28\xba\x9e\x10\x4a\xc7\xbb\x22\x79\x92\xa5\x34\x91\x29\x11\x14\x6a\xcb\xfa\x0b\x42\x13\x21\x74\xe6\xa6\x87\x85\x5e\x3a\xe3\xca\xa7\xfd\xc8\x65\x1b\xad\x1c\x4f\x76\x0f\x54\x87\x2c\x4f\x6d\xc4\xf2\x97\x5d\xaf\x4c\x4b\x60\xda\xd9\xc6\x38\x55\x2b\xe7\xf7\x1e\x83\x93\x98\x57\x3b\x5e\x72\x81\x56\x22\x4e\x75\x05\x3f\xab\xb6\xbb\xbd\xe4\xeb\x0b\x8c\xf3\x94\xf4\x00\xdf\x77\xaa\x23\xb8\x71\x0c\x6b\x02\x8a\x35\x68\x4d\x27\x3f\xf0\x51\x55\xd8\x86\xf0\x5a\x65\x0c\x43\x46\xbf\x44\x25\x35\x0c\x49\x80\x7b\x9e\x8c\x61\xe1\xf6\xa4\x1b\x75\x42\x22\x69\xd3\x08\x25\x0a\x9b\x06\xb5\x66\xf4\x45\xf5\x22\x50\x29\x85\xc9\x6e\xbe\xcb\x1f\x78\xf1\x69\xf5\x80\x15\xae\x09\x0d\xc3\x4f\xcd\x84\xcf\x68\x18\x7e\x6f\xcf\x69\x35\xda\x48\x3d\x47\xd2\x3f\xc8\x59\x3d\xdf\xe6\xe5\x0f\xf8\xa3\x52\x3f\xb2\x07\xfd\xa3\xbd\xef\xdd\xb5\xef\xb1\x0c\x54\x4d\xef\x4d\x4a\x7d\xaf\xf4\xdf\xc9\xc1\x7b\xab\xa2\x1e\x02\x53\x16\x67\xd3\x20\x88\x3c\xf6\xf6\x5f\x3b\xa6\xa6\xa7\x0e\xe0\x94\x3e\x3f\x6d\xf9\xf7\x1c\x93\x06\x93\xf4\x08\x7a\xaf\xb1\x94\xd8\x84\x87\xc3\xa1\x43\xe1\x62\x4b\x95\x3a\xef\x15\x7d\x2a\x4c\xb4\xe5\xaa\xae\xdf\xf3\x07\xc9\x82\x9d\x61\x6b\x8c\xb2\x6b\x84\xaf\xe5\x67\x05\xdf\xc8\x68\xb6\x54\xff\xed\x1e\xce\xf0\x7b\xa3\xff\x5c\xec\x1e\xce\xb6\x99\xb8\xc9\xcb\x99\xac\x76\x91\x7a\xb2\xcb\xd6\xeb\xbc\xbc\x89\x16\x67\xd7\x95\x58\x73\x11\x2d\x02\x04\x74\x1d\xcf\xde\xf2\x71\x9e\x99\x38\xcf\x08\x63\x65\xcf\xae\xab\x87\x59\x9d\xff\xa6\xf2\xd1\xb9\xcc\xae\xab\x87\xb3\xea\x8e\x8b\x4d\x51\xdd\x47\x35\xa2\xe8\x99\x92\xa3\x6c\x2f\x2b\x5b\x98\x5f\x03\xbf\x9e\x7f\x3a\xc3\xfa\xfd\x29\x80\xb2\x1b\x25\x53\x74\x95\xa6\x95\x81\xc3\xd7\x56\xb7\xee\x0c\x58\xd1\x93\x9c\x05\xcb\x3f\x05\xda\x97\xb9\xda\xc1\x9e\x2d\x5f\x32\xc6\x04\x91\x73\x5d\x97\xaf\xf8\x46\x52\xf7\xb9\x22\xbf\xb9\x95\x2c\xf8\xcf\xc5\x9f\x02\xa8\xd9\x27\xff\x69\x92\xe2\x6d\x25\x52\xdc\x1d\xac\x65\xfb\x9e\x6d\x1d\x16\xd8\xd6\x0f\x20\xb3\x45\xad\xe6\xfa\xe8\x09\xc7\xd5\xe9\x27\x54\x7d\x90\xbf\xc9\x2d\x28\xac\x34\x8a\x72\x3b\xbc\x84\xb7\x06\x6b\x56\xe1\x6a\x5f\xae\x09\x42\x2f\x7d\x51\x54\x19\x92\xe8\x1c\x5c\xdc\xbb\xde\xb3\x0e\xe3\x98\x30\xc6\x49\xe5\x3e\xfa\xe0\x64\xe5\x62\x92\xed\x87\x5c\x67\xab\x0f\x37\x58\xd6\x67\x45\xbe\x63\x81\xe1\xb7\x50\x9d\xa9\x06\x45\x37\x46\x68\xfc\x95\x00\x76\xb8\xb8\x08\xdc\x1e\x63\x47\x74\xf3\x61\xe8\x1c\x3a\xf2\x6e\x8b\x6a\xb3\x83\xa7\xeb\xea\xe1\x02\xc7\xd3\x77\xbc\xc8\x8f\xa0\xcf\x23\x44\xcc\x01\xba\x52\xe4\x48\xba\xda\xa4\xb3\xac\xa6\x47\x92\xe5\x6a\x31\xd6\x05\x7e\xed\x06\xc8\x91\xb4\xfb\x03\xe8\x71\xad\xeb\x7a\xac\x86\xd9\xe1\x40\xe9\x81\x12\x3d\x50\xff\xc9\x59\x12\xfc\xc0\xaf\x3f\xe4\x32\x80\xe0\xeb\xea\xb7\x00\x82\x6d\x1d\xa4\xf0\xd7\x91\x38\x34\xec\x26\xdd\x56\xf0\x53\x37\x94\xfe\xef\xdc\x63\x85\x52\xf3\x54\xc9\xdf\x1a\x09\x3d\x7e\xe2\x09\xef\xa0\xfd\x71\xb5\x1d\xfd\x2b\x8f\x79\x84\x8f\x46\x57\x4f\x89\x1c\x69\x5d\x58\xc4\x29\x6f\xc3\x30\x04\xfb\x27\xef\x20\x45\x69\xac\xed\x7f\xf2\x44\xa4\x53\x49\xb1\x00\x67\xcf\x3c\xa0\xc4\xe7\x7a\x84\x3e\xc7\x88\xaf\xb2\x2a\x79\x83\xc6\x78\x12\x4f\x66\xab\x84\x67\x29\x9d\x4f\xe9\x29\x7c\xab\x1e\xcf\x66\xa7\xf0\x23\x67\x4f\x4e\xcc\x78\x13\xe9\x2e\xaf\xf3\xeb\xbc\xc8\xe5\x63\x14\xdc\xe6\xeb\x35\x2f\x03\xb0\xc2\xc7\x44\xea\x1f\xe0\x6f\x9c\x3d\x15\x5c\x4a\x2e\x2e\x76\xd9\x4a\x09\x93\x60\x11\xc0\xa6\x2a\xe5\x0f\x48\x18\x1b\x05\x7f\x5e\x2c\x02\xaf\xfd\xfe\xc5\x7b\x0c\x89\xd6\xa3\xbb\xa5\xe8\x8b\x71\xe6\x6d\xb3\x07\xb2\x80\x32\x79\x99\xce\x88\x68\x9a\x05\xa5\x53\x52\x22\x30\x04\xa2\x40\x44\xb2\x9d\xb5\x16\xfc\xac\x13\x2c\xc6\x02\xcd\x55\x8b\xf0\x37\xcb\x68\x01\x1a\xca\x73\xa1\xe9\xeb\x18\x23\x65\x1c\x68\x59\x18\x44\x76\x9e\x04\xce\x34\xbc\xd0\x18\x7b\xd9\xf9\x9f\xcf\xb2\x29\x7b\x49\x03\x2d\xb6\x2c\x52\xc0\x7e\xea\xa0\x3a\xc4\x54\xf0\x24\x43\x80\xcf\x9c\x52\x28\x63\xe2\x72\xb3\x89\x67\x2d\xae\x87\x11\xb9\x41\xf7\x25\x9b\xfb\x64\xf8\x82\xa9\xa2\x4e\x3f\x0d\x7e\xd0\xfc\xbb\xfa\x3d\x1a\xf9\x15\x19\xcd\xbb\xbd\x8b\x80\x86\x7e\xf2\x8f\xe4\x1c\xd5\x7f\x2c\x9d\xed\x33\x84\x66\x7a\x85\xe0\x17\xfb\x29\xf3\xba\x0f\x2f\x57\x3c\x2f\x08\x4f\x02\x2d\x8e\x83\xa9\x1c\x0e\x78\xe9\x06\x7c\x3a\xab\x66\xfb\x59\x3d\x9b\xff\x85\x52\xd5\xeb\xb0\x6f\xfb\x59\xca\xee\xd8\x41\x85\x08\x72\x46\x26\xbb\xf9\x40\x6e\x11\xa5\x09\xd1\x30\x0c\xda\x75\xb1\x83\xb0\xe2\x5e\x08\x60\xb2\x84\x12\x35\x57\xc8\x98\x51\xc8\x4a\x0a\x35\xfb\x63\x35\x56\x03\xaa\x55\x9f\x7a\x5c\xc8\xd9\x49\xc6\x02\xb5\xee\x06\x96\xb6\x6f\xbc\xae\x61\x98\x37\x8d\x4e\xc8\x18\xcb\x9a\x66\xe2\xad\x39\x4a\x29\x0b\xf2\xb2\xc8\x8f\x80\xc4\xe8\x0f\x40\xd8\x65\xb5\x16\xa3\x1b\xc6\x77\x7c\x25\x6b\xc7\x4a\x66\xe0\x35\xfe\x60\x4b\x90\x8a\xd5\xfa\x34\x15\x43\x0f\x79\x52\xa7\x14\x43\x9c\x3a\x75\x52\xbd\x33\xb5\x53\xaf\x69\x48\x3e\x36\x9f\xa0\x82\x12\x32\x3a\x55\x73\xd6\x5b\x66\xa5\x1f\x52\xe2\xf9\xb5\x09\xcf\x89\x0a\x69\x29\xbd\x74\x9e\x21\x7a\x55\xd7\x1a\xf0\xeb\xa9\x52\x52\x47\x3e\x46\x4f\x43\xe8\x51\xb4\x8e\x1a\xe5\x1e\x7b\x35\x30\x89\xdd\x56\x1f\x51\x3b\x44\x1c\x2c\x83\x48\xa0\x9b\x9f\x03\x92\x89\x9e\xb2\x32\xdf\xa2\xe7\xce\x5b\xc9\x05\x5e\xa0\xdb\xb3\xf6\x96\x29\xf6\xdb\xf6\xe7\x26\x2f\x8a\x77\xa6\x1a\xea\x67\xc1\x1f\xfe\x2a\xaa\x7b\x7b\x7d\x71\x2b\xf2\xf2\x03\xfe\x6a\xa5\xe2\x64\x01\x37\x22\x5f\xbf\x16\x3c\xb3\xd7\x9f\x61\xae\xdd\x5f\x6f\xca\x75\xf7\xc6\x85\xcc\x84\x7b\xfb\x3b\x5d\x88\xb9\xf4\xd2\x7e\x57\xdd\xbb\x84\x6a\xd0\x7c\xe9\x0a\xad\xda\x7a\x6a\x35\x10\x2f\x76\xb7\x99\x76\xe6\xb9\xcf\xd7\xd5\x3d\x5e\xfd\xf6\x16\x09\xf6\xd4\x55\x55\x6d\xb5\xdf\xaa\x59\xeb\xa2\xa7\x03\xe0\xd2\x38\xe2\x74\xa0\xbd\x07\x3e\xe9\x99\xe4\xff\xab\xf7\xdb\x6c\x6e\x3c\x00\x21\xa8\x11\xf8\x14\xf6\xec\x5b\xb7\xf9\x40\x0f\x73\xbd\x0b\xca\x37\x64\x8f\x40\x34\x7f\xe7\x44\x6d\x98\x33\x3d\x78\x71\x0c\x60\xa0\xa7\xf7\xb3\xf6\x70\x21\xda\x69\x18\x86\xc1\x0d\x97\x41\x8e\x97\xad\xa1\x39\x67\x99\x89\x59\xd4\x53\x28\xce\xa3\x22\x91\xe9\x49\x6b\x14\x61\xa4\x72\x81\xbd\x9a\xef\xde\xae\x58\x42\xcd\x38\x4d\x4f\x4a\x04\x33\xb8\x48\xb9\x92\x23\x41\x89\x83\x28\xa0\xa0\x0d\x45\x6a\xdf\xa8\x25\xbb\x7d\x32\x61\xac\x6a\x1a\xf5\x4d\x62\x8a\xec\x22\x43\xc4\xa3\xba\x45\x3c\xa2\x43\xd5\xae\x69\x70\x13\xa8\x16\x46\x54\xb2\x1d\x4e\x64\xab\xda\x05\x6a\xf3\xa7\xbe\x86\x05\x79\x79\xcb\x45\xae\xa6\xa3\x6a\x88\xba\xd7\x10\x0c\x2d\xee\x99\x89\xdf\x15\xc6\xa9\x65\x1f\x17\xea\x4e\xeb\x48\x0d\x82\x62\xe3\x30\xa1\x29\x2d\x06\x70\xbc\x1d\x48\x28\xd3\xa3\x76\x51\x6f\xbb\xd5\xef\x47\xf2\xf1\x8e\xa4\x9d\x5e\xf3\x3b\x6b\x01\xc2\xed\x13\x1d\x7c\x90\x13\xdd\x08\x2c\x24\xb6\x59\x61\xa0\x85\xa4\x12\x66\x7f\x43\x70\x30\xf6\x37\xa4\x03\xd5\x80\x3d\xa2\x69\x44\x4c\x2a\x5f\xac\xe5\x14\x10\x38\x5d\x34\x4d\x5e\x7f\xa1\x24\x10\x27\x15\x8d\xab\xa6\x59\x44\x9a\x11\xc2\x19\x63\x92\x40\x73\xe2\x07\x60\x34\x8d\x74\x60\x34\xf1\x3e\x8d\xf5\x25\x94\x9d\x2f\x8e\xba\xfd\xb9\x69\xa2\x21\x06\x98\x05\x28\x1b\x97\xec\xf8\xe8\x53\xd5\xe3\x79\x79\xd3\x26\x21\x54\xef\x96\x62\xb3\x6a\x96\x34\xaa\x55\x03\xfd\xd8\x01\x5a\xb4\xda\xaa\x4d\x73\xa0\x03\xd8\x68\xbf\x5f\xcd\x92\x9b\xb1\xc9\x6e\xde\xd1\xc1\xd5\x0a\xd6\xea\x8e\x88\x85\x6a\x75\x4a\xa8\x19\xc9\x9a\xa6\xfc\xc3\x6b\x71\x85\x51\x55\xb1\x59\x5a\x4a\xa8\xa1\xa2\x91\x83\xb2\xad\xc3\x30\xd3\x3a\xd2\xbf\xa3\x5c\x78\x5d\x5d\xa9\x81\x30\x33\xa5\xd8\xa5\x4b\x97\x8f\xda\x07\xec\x87\xd3\xdd\x60\x8b\x91\xbc\x55\x44\xd1\x8f\x5c\xc3\xa6\xa9\xb9\x01\x82\x79\x48\x63\xf0\x2f\x4e\x16\x20\x60\x6f\x0f\x88\xec\x88\xf0\xb6\xc1\xec\x57\x4e\x76\xf3\xe1\xee\x07\x46\x96\x33\xa3\x43\x78\x5f\xa1\x57\xb6\x36\xb7\x76\xb4\x8c\x0e\x89\x82\x6f\xe4\x0c\xc7\xc1\x53\xfb\x4e\xb4\x38\x8c\x8c\x89\x8f\x67\x72\xa0\x66\x51\xf7\x3c\x01\xb5\x95\x41\xed\x44\x8d\x61\x21\x08\xc0\x98\x1b\x8c\xda\x38\xb4\x2b\xba\x29\xc2\xa7\x6a\x92\xe8\x73\xb5\x76\xf8\x75\x88\xfb\x17\x80\xe1\xf3\xd5\x90\xfa\x4f\xc4\xc2\x06\x7e\x3e\x0b\x68\x94\x88\xf4\xac\x3c\xff\x33\x9e\x74\xe6\x09\x57\xaa\x6b\x99\xaa\xfc\xab\xa4\x4c\x9b\xa6\x4a\xca\xd9\x4b\xfc\xbb\xf0\x30\xee\x0e\xbe\x1a\xee\x80\xe5\xda\xca\x29\x69\xc8\xfe\x85\xac\x0c\x9d\x83\xbe\xbe\x20\x3c\x6e\xc4\xef\x19\xfa\x10\x0a\x40\x6f\x48\xfa\x90\xe0\xfa\xab\x5b\x0d\xd7\xc6\x00\x9d\x65\xe7\x39\x1a\x53\xab\x44\x26\x59\x9a\xb6\x63\x0d\x35\x7e\xb5\x86\xd9\x0f\xaa\x0e\xfd\x68\x73\x11\xfb\x50\x74\x82\x46\xed\x40\x3d\xa0\x7f\xe0\x10\x43\xd7\x18\x9f\xdf\xdf\x73\x5e\x32\x21\x41\x1c\x75\x72\x17\x12\x94\xb4\x1c\x89\x19\x56\x3b\x32\x6d\x9a\x2f\xf8\xd6\x86\x23\xec\x44\xb5\x63\xc2\x3a\xd3\xd5\x79\x79\xc3\x72\x25\xfd\xf5\x75\x8b\xe0\xa3\xdd\xf9\x10\x22\xa9\x66\xd2\xba\x56\x67\x42\xda\x93\xb4\x7b\x66\x43\x04\xac\xe7\x35\x2f\xd7\xac\xd4\x97\x88\x93\x57\xf5\x16\x56\xd1\x2e\xac\x07\x58\xed\xc5\xd0\xf2\xaf\xbf\x72\x67\x44\xb7\xad\xae\x1b\x2a\xdc\xc8\x5c\x0d\x6c\x65\x4e\x55\xfd\x77\x5c\xf5\xdb\xe7\x07\x10\xfb\x11\x46\x1c\x10\xbf\x57\x98\xdf\x00\xf3\xf5\x5e\xab\xa2\x86\xe1\xb7\xaa\x99\x64\xb6\xcd\x12\xaf\x2d\x53\x7b\xa0\xd6\x7f\xf1\x05\x87\x05\x2c\xc7\x9f\x99\x93\x61\x9d\xab\x3d\x90\xab\xee\x19\xb1\xad\x3a\x6b\x5b\x9f\xbe\x90\xd3\xf6\x57\x37\xbf\x5a\xf2\x9d\x39\x8c\xf1\x6f\xb5\x1e\x54\x3a\xf6\xd1\xe6\x6f\x79\xb5\xc3\x50\xa8\x19\x16\x0b\x87\x63\x71\xac\x51\xdd\x73\xcd\x8e\x72\x80\xc1\xae\xc1\x1b\xa4\xfe\x33\xf0\xf3\x63\x4f\x2e\x74\xa9\xb7\x34\x9b\xbe\x71\x18\x2c\xa8\xbd\xaa\x3a\x7b\x67\xb9\xd6\x51\x5c\xdd\x4e\xb8\xee\x32\x0b\x17\x63\x12\xeb\x35\xc1\x3c\x8b\xbb\x49\x23\x22\xed\xd4\xd5\xad\xa1\xef\x43\x80\x98\xaf\x7a\x1f\x38\x41\xdc\x5e\x25\x9b\xeb\x5e\xf5\xae\xe6\x9b\x07\x6c\x53\x97\xfb\xe0\x0e\xe1\x34\x1a\xad\xf8\xc4\x97\x6a\x1f\xa9\xf7\xdf\xb9\x66\xb5\xdb\xd1\x7e\xdd\x51\x95\xbf\x8f\x9c\x2c\xe9\x7c\x00\x3e\x9b\x22\xe7\x27\x86\x4e\x75\x9a\xdc\xa8\x0c\xef\xd5\xd4\x1f\xde\xc6\xb5\xf0\xa9\xff\xad\xbd\x0f\x50\x53\x0f\x6f\x74\xbc\x9c\xc6\x2a\x68\x03\x2e\x50\xb6\x3c\xa9\x6d\x50\x36\xee\xb3\x74\x80\xfa\x5e\x2d\x56\xc3\x67\xf3\xbf\xcc\xb4\x8e\x51\xd5\x84\xbf\xc0\xcb\x6f\xde\xd2\xd3\x97\x5e\xd4\x5b\x80\xef\x06\xaa\xa8\xcd\x03\x1b\x0c\x44\x70\x1d\xc3\x9e\x34\xd7\x41\x29\x21\x97\x50\x49\x8d\xe0\xa4\xb1\x14\x9b\xfa\xb6\xba\x6f\x6e\xf3\x35\xa7\xcf\x4f\x21\x93\xec\xb4\x05\x01\x7e\xee\x21\x34\xd5\x78\x0e\x21\xc3\x90\xa0\x4f\x72\x39\xd7\x66\x39\x1d\x69\xf6\xeb\x9e\xd7\xf2\xb5\xdd\xb5\x7e\x21\x34\xf2\xde\xe8\x7d\x52\x4b\x1a\x75\x98\x75\x6a\x53\x53\x74\xba\xbf\xcb\x0a\xaa\x7f\xca\x7c\xf5\x81\x50\x0f\xf1\x67\x2f\x7d\xfd\x60\x9c\x83\xa9\xb4\xae\xd3\x07\x0a\xa5\x64\x6d\xec\x54\x9b\x4d\x21\x87\xa4\xf6\x4f\x5a\x9b\x8e\xb8\x0e\x77\x97\xda\x6a\x67\x96\x71\xf6\x72\x26\x69\x9e\xd8\x05\x7a\x4a\x04\xc3\x35\x9d\xa6\x2c\x4f\x3c\xc3\x57\xca\x7c\x86\x72\x92\xcf\xcd\x86\x97\xe5\xe6\xe0\x49\xad\xa6\x6d\x3d\x56\x72\xcc\x23\x8f\x6c\xe4\x5c\xaa\x15\x8f\x0b\xbd\x29\x49\x52\x3a\x5f\x55\xe5\x2a\x93\x9d\x47\xc1\x8b\x20\xa5\x06\x7e\x34\xef\xc3\x8f\x22\xc1\x44\x9e\x54\xa9\x96\x7b\x02\x24\xf0\x36\x84\xcf\x83\x35\x95\x43\xbd\x40\x65\xb8\x51\x43\xc9\x9c\xa1\x7b\x50\xd4\x3e\x5c\xf5\x5c\x13\x71\xfa\x6d\x6f\x21\x13\x70\x3e\x1c\x68\x97\x96\x38\xdf\x10\x8b\x3a\x34\x59\x9e\xb4\x06\xe8\x52\x36\x8d\xea\x58\x10\xbe\xe9\xae\xd0\xb2\x5d\x75\xf0\xb4\x70\x8b\xc4\x0c\x41\xe3\x97\x33\x22\x4e\xdb\x9b\x68\xa7\xd3\xd5\x2e\x74\xf3\xd4\xfd\xe6\xb0\xf7\x55\x83\x88\x7d\x49\x5a\x3d\xa5\xf6\xb8\xfe\x08\x87\xa4\x80\x12\x44\x4a\xa1\x3c\x5f\x86\x61\x16\x8b\x48\x6d\x1e\x86\x89\x96\xb0\x48\x4d\x2c\xbb\x43\xe2\xe6\x18\x7e\x0d\x93\x25\xb2\x1b\xd7\x0e\x10\x5b\x07\x4c\x73\xd8\xa1\xf9\xc2\xf7\x54\x96\x14\xaa\x9d\xf4\xee\x4d\x16\xf0\x64\x7c\xd2\xde\xa0\xe8\x88\x9e\x0e\xa0\x85\x48\x34\xd0\x4e\x0e\x20\x28\xd8\xa0\x32\xb3\x51\xce\x79\x1d\x49\x77\xf3\x9d\x5e\x00\x23\x01\xae\x31\x23\xd7\xdc\xb6\xf9\x22\xe1\x5a\x12\x74\x2b\x45\x49\x0a\x06\x32\x50\xfd\xf6\x49\x3d\x9d\xf1\xd3\x68\x65\x84\x43\xa1\xd6\x59\xa4\x2d\x37\x97\xf3\xce\x17\xe0\x10\x36\x0f\xf4\x07\xb8\xb6\x77\xbd\x65\x22\xd4\xa1\xd4\x31\x75\x23\x7c\xb8\xe8\x6a\x12\xf7\xba\x37\x42\xe5\x35\xf7\x03\xb5\x4f\x34\xf9\xf5\x64\xe1\x9c\x3d\x5c\xd7\x0b\xdd\xf5\xcb\xf6\x34\x3f\x26\x7f\xbc\x63\x41\xa6\x94\x46\xb5\x4f\x61\x69\x6f\x1b\x3d\x80\xc2\x8a\x15\xb8\x04\xe8\x5a\x7c\x04\xd4\x00\x9f\x0b\x6d\xe3\x54\x5f\xc0\x64\x52\xb2\xbf\x12\x41\x53\xa8\x18\x22\x7f\x76\x35\xf2\x4a\x9b\x7e\xaa\x64\x69\x13\x30\xb5\x79\xa0\x20\x0c\x83\x17\x02\x16\x57\xe0\xa8\x73\xd4\x08\xee\x5a\x37\x4a\x34\x67\xe8\xfd\x0d\x5a\x34\xa8\xab\x43\xc5\x32\xe3\x50\x48\x2a\xda\xe6\x51\xa6\x50\x51\x5d\xc9\xa6\x21\xa6\x50\x91\x02\xb2\x94\xe7\xc6\x6b\x53\x22\x52\xf2\x81\xac\x46\xfb\x9e\x76\xe5\x51\x47\xa8\x38\xd9\x54\x00\x07\xfb\xba\x13\x51\x5b\x04\x3a\xae\x76\x14\x37\x42\x3e\x15\x40\xa1\x17\x7c\x53\x1c\x3e\xa0\x98\x94\xe9\x37\x10\x35\x47\xfb\x22\xb7\xc4\x99\xdb\x6c\x47\x56\xb0\x92\x50\x50\xd8\x12\x5b\x55\x54\x25\xc3\xd0\xff\x69\x51\x62\x0a\x0a\x45\x4b\xa0\x6b\x52\xd8\xdf\x86\x47\xd7\xdc\x55\xd7\xb6\x3a\x96\x7f\xce\x30\xeb\x9a\xbb\xea\xda\x89\x4b\x73\x4f\xff\x72\x0b\xdd\xd6\x87\x47\xdb\x83\x15\x19\x59\x99\x6f\xa3\x02\x34\x81\x81\xff\xc9\x07\x4a\xa1\x38\x5c\xcd\xdd\xca\xda\x46\x40\x6c\x24\x3c\xd9\x45\x22\x7a\x0a\x5e\x04\x51\x32\x32\x14\xcd\xbe\xa5\x9d\xe5\x3a\x98\xdb\xb4\xd8\x9e\x13\x61\x14\x2b\x68\x8f\xc8\x94\xbc\x11\x87\xf4\x00\x26\xfb\xde\xbe\x73\x4b\x38\x8d\x0d\xdd\x80\x5e\x9d\x22\xce\x5a\xc2\xfb\x13\xdf\x63\x67\x81\xe1\x6e\x3d\xaf\x60\xc1\x70\xd4\xf9\x8b\x9c\x48\x59\xf7\xa7\xa6\xcd\xef\xdc\x72\x34\x1f\x52\xfb\x51\x9a\x01\xd6\xfd\xec\x23\xee\xde\xb0\xb1\x07\x75\x39\x1e\x9a\x5a\xa3\x9a\xfa\x05\xb7\x1a\x03\x63\xad\x76\xca\x3b\x6b\x0d\x86\x6d\xc7\x98\x9c\xe1\x16\xd9\xa1\xc2\x41\xb0\x79\x50\xea\x54\xa0\x3f\x17\x3d\x82\x85\xee\xb2\xa6\x31\xc0\x8e\x38\x31\xbb\xfc\x26\x48\xd0\x42\xe7\xfb\x12\xef\xae\xc3\x90\x64\xee\x07\x5b\x40\xad\x66\xa8\xa3\x1d\x01\xff\x87\xbf\xc2\xb6\xef\x34\x4d\x4d\xe8\x81\x42\x7b\x67\x3a\x85\xdb\x91\x15\x7b\xec\x5e\xfb\xd2\x6c\x06\x2d\x5f\x0b\xd6\xd1\x74\x59\xd3\x64\x5d\x1e\x14\x43\xf5\x67\x85\x59\x0a\x95\x43\x39\xc3\x95\xdf\x7a\xba\xe0\x23\xb5\x27\x0e\xb4\xee\x89\x26\x52\xc8\x19\x63\x64\x1b\x07\x4a\x07\x0d\xa2\x40\x37\x20\xbe\xa7\xaf\x27\x4c\x6d\xcf\x27\x77\x1e\x1e\xc0\x9d\x92\x68\xab\xaa\x94\x79\xb9\xe7\x27\x5b\x36\x59\x1c\xd6\x4a\x16\xdd\x85\xe1\x1d\x5a\x59\x5a\x63\x43\x49\x0f\xf9\x86\x90\x3d\x1b\xa1\x00\xa3\xb8\x25\xe9\xde\x5d\xd3\xd6\x9b\x7b\xd3\xa7\xee\x0a\x43\x22\xe6\xd6\xc1\x85\x25\x3b\x77\x0d\xed\xe5\x8f\xde\xf5\x4f\x29\x98\x5e\x2f\xb0\x6e\x16\x28\x1d\x23\x49\xda\x51\xd3\x1a\x5b\x5b\x54\x7a\xb2\x1a\x21\x64\xc0\xf7\xe2\x15\x2b\x22\xb2\xd1\x20\xd3\xc8\xd7\xd8\xe7\x76\x68\x9a\x02\xc6\x5e\x07\xfd\x12\xa5\x14\x88\x77\xa6\xb7\x6a\x1a\xf3\x6b\xa6\x8f\xd6\xd5\x3d\xbd\x31\x9b\xb0\x62\x94\x22\x62\x53\x54\x19\xe2\x65\xe0\xd9\xc8\xad\x16\x89\xde\x28\xda\x39\x48\xf8\xe2\x40\x4d\x1b\x14\xc8\x35\xe0\x9e\x40\xc1\x5c\xbe\xab\x38\x08\xa2\x15\x9e\x35\x38\x68\xfb\x4e\x8d\x30\x24\xc8\xb6\x6a\x18\x92\xb6\x89\x99\xf3\x0f\x18\x1b\xcd\x5e\xba\xf6\xfd\x64\x91\xfa\xfd\xe5\x3f\x59\xfa\x4f\x7e\xf2\x9f\xbc\x4c\xd5\x20\xdf\xb3\xc9\x12\xd6\x54\x7d\xf4\x5d\x6c\x4b\xce\xcb\x67\x77\x61\x48\xb6\xec\xce\x6c\x8a\x68\x74\xe7\xf3\x27\x59\xa9\x00\x4f\xd6\x85\x41\x35\x4a\x15\x86\xc4\xbe\xc0\x26\x5b\x0a\xdb\x30\xf4\x3a\x75\xd8\xa6\x6e\x58\x6e\x9b\xc6\x74\x24\xf8\xa8\x62\x56\xf6\xc0\xda\xe3\x8c\x28\x41\x4d\x0c\xaa\xeb\xbe\x92\x64\x1b\xab\x09\x12\x2d\xa0\x84\x5b\x0a\x98\xdd\x9d\xfa\x18\x35\x7b\xf6\xc6\xa2\xb2\x55\xdd\x8a\xa6\x2c\x7b\xc7\xfc\x65\x0b\x4a\x0f\x69\x2b\x65\xfb\x6c\x4f\x71\x77\xe3\x60\x25\x33\xa7\x51\xf7\x01\x6a\x7c\xd6\xb9\xb4\xde\x71\xbe\x1e\xc0\x9a\x68\x3d\x93\x87\xe1\x08\x55\x98\xaf\x44\x73\x1a\x3d\xd9\x75\x37\x12\x4d\x33\x11\x61\x28\x9b\x66\x8b\xde\xc3\xbc\x55\x73\xb9\x55\xa4\xf5\x73\x19\x86\x93\x2d\x3a\x19\x4a\x8f\x61\x7b\xf3\x30\xaf\x36\x9b\xb8\x74\x2a\x31\x5b\x44\xed\xa9\x99\x29\xbf\x7d\x8a\x74\x18\xf6\x87\x6a\x49\xbd\xe1\x56\xdf\x53\xfb\x99\x78\xb7\x93\xf6\x76\x1a\x8d\x27\x71\x1a\xbe\x3d\xc1\x2b\xb5\x10\x0e\x43\x84\x9b\x2a\xdb\xf5\x44\x5f\x21\x33\x13\x85\x72\x5e\x15\x6b\x56\x3a\x25\x04\xda\x4b\x7f\x95\x50\xaa\x55\x55\xac\x69\x18\xe2\xdf\xd6\x30\xa6\x72\x30\xe5\xf4\x38\x90\xcc\x7d\x7a\x50\x1a\x7a\xc7\xfa\xbc\xc9\xd6\xfc\x7d\x75\x3c\xfe\x1b\xb5\x0c\xe3\x8a\x9d\x71\x8a\xc2\xc3\x1d\x84\xc3\xc2\x32\x2c\xa8\xa1\xa6\x76\x94\xa8\xcd\x70\xe2\xce\xd5\xe5\x01\xb8\x09\x33\x37\xcf\x8e\x1d\xfa\xb1\xbe\x14\xe7\x9a\x47\x0c\x5b\x94\xe8\x94\x6a\x5f\xdb\x35\xb6\x4a\xb6\x31\xe0\x78\xdd\x11\x05\x15\x3d\x23\xb9\xc3\xdb\x47\xf4\xbc\x4d\x5e\xe6\xf5\x2d\x4a\x60\x89\x9a\x26\x99\x2c\xe8\xa1\x65\xc5\xd6\xcf\x59\x06\x6a\xa9\xd2\x7c\x7c\xd8\x6a\x1e\xaf\x5d\x66\x8c\x9c\xba\x69\xcd\x73\xc8\x68\x7f\xdb\xd3\x99\x01\x63\xa8\x12\x2a\xb9\xf5\x1e\xd5\xbf\x40\x12\xe1\x6a\x33\xca\x03\xa5\xc3\xca\x7d\x2e\x28\x69\x10\xea\x6c\x78\xc4\x80\xc1\x6a\x3c\xda\x5c\x57\x62\xa2\x54\xb8\x36\x12\xa1\xc3\x1c\x85\x2d\x8f\x4a\x6d\xdd\x01\x54\xa6\x7a\xbf\xa6\x81\xc9\xd4\xbf\x58\xf5\x30\x2c\x11\xf5\x8c\xb6\x3c\xaf\x18\x47\x9c\x0d\x13\x66\x4e\xab\x68\x5f\xd2\x3b\x3e\x17\x62\x96\xcf\x66\x67\xb4\x52\xaf\x28\xfd\x75\x62\xa1\x13\x5c\x4d\xf1\x11\xd6\x75\x82\x8c\x98\x04\x6f\xa8\xd1\xa5\x3b\x55\x50\x90\x4a\xc4\x57\x16\xa3\x32\x87\x25\xa5\x27\x13\x19\x86\x42\x69\x15\x23\xe4\x60\xba\xe7\x47\x2c\x78\xb6\x75\x89\x63\xdd\xfa\x58\x93\x82\xf0\x9b\x0a\x4a\x26\x12\xdb\xac\x41\x8a\xbc\x3c\xdd\x56\x4e\xbb\xcd\x5c\xc6\x65\xbb\x2f\xd6\xb0\xc4\x66\x48\x4e\x16\xd0\x23\x58\x53\x7d\x8b\x30\xfe\xba\x59\xf5\x5f\x2f\xc8\x58\x2d\x3f\xb2\x6d\x53\xa9\xdb\x54\xea\x36\x35\x71\x44\xaa\x29\xa5\x69\x4a\x1d\xf0\x81\x67\x9a\x5e\x53\xaa\x5c\x5c\x33\x4a\x6c\x46\x6d\x5b\x5b\x9c\xc9\xf3\x0c\xa3\x65\xca\x44\xa6\x61\xa8\xfe\x35\x95\xed\xfc\xf0\x64\x93\x1d\xed\xf6\xa3\x0e\xb4\x73\x16\x6e\xb4\x49\xd0\xfa\x22\x68\x4d\xb2\x7f\x22\x6e\xb9\xe6\x36\xaa\x88\x13\xf3\xd7\x5f\x77\x3a\xfe\x40\xda\x28\xdd\x34\x63\xbc\x32\x47\x60\x35\xf4\xec\xb6\x52\xac\x90\x44\x62\x4b\xea\x8c\xfd\x40\x8a\xba\xc8\xd7\xfc\xf3\xea\xbe\x8c\x0a\x69\x74\x5c\x0a\x78\xf3\xfb\x1d\xde\xc2\xfa\x9b\x5b\xef\x35\xe3\x8d\xba\x6d\x3e\x93\x82\x92\xbb\x6f\xcb\xd6\x01\x49\xe7\x71\xc0\xfb\xef\xf6\xd2\x7b\x80\x39\xe9\x07\x26\xa3\xf6\x99\xc9\xee\xf0\xfb\xf1\x16\x43\xa1\x6e\xbf\x52\x5a\x09\x8d\x9f\xa7\x47\x23\x4b\xd2\xd6\x82\xdb\x97\xb9\x18\x3c\x85\xe7\xd4\x3a\xb1\xde\x28\xf9\x96\xda\x33\x79\x2e\x7c\x64\x51\xc2\x19\x06\x15\x10\x13\x5d\xa0\x27\xae\x70\x23\x6b\x36\x83\x25\x3d\x11\x6e\x6f\x62\xac\xde\xd5\x8e\xa0\x09\xd8\x98\x83\xbd\xad\x36\xeb\x1e\x67\xe8\x7a\x58\x9d\xc4\x1a\xcd\x33\x81\x00\x53\x1d\xc3\x34\x5b\x7e\xe2\x3d\xee\x58\x37\x65\xd3\x90\x1c\xc5\x62\x2d\x09\xb5\x2f\xa2\x61\xa2\x93\x4c\xfb\x7c\x83\xb7\xdc\xb3\xa7\xba\xa8\xee\xa3\xff\x5c\x2c\x60\x93\xd5\x32\x7a\xb9\x58\xb4\x16\xfe\x3f\x2f\x16\x66\xc9\x5d\x73\xa5\x14\x77\x6d\x71\x8e\xe5\x53\x65\x87\xd8\xe2\x4e\xcd\x90\x69\xd3\x48\x4d\xf6\x85\xe2\xdc\x93\xf0\xa2\xed\x6e\x6f\x01\xed\x18\xd4\x05\x48\x7a\x52\x0e\xaa\xcf\xb5\x23\x90\x4d\x95\x1b\x90\xc2\xfe\x09\xe6\x31\x66\x0d\x90\xc3\x47\x1a\x6c\x25\xf8\x1d\xda\x0e\x7d\x94\x17\x50\x7a\x62\xa0\x30\x02\xcb\xb9\x14\x58\xf2\x8c\x77\x25\x0b\x34\x34\x27\x42\x28\x2a\x2d\x7e\x27\x35\xbe\x3a\x5f\x33\x69\x50\x5d\xf8\x1a\xc8\xc7\xa8\x3f\xf0\x5d\x16\xc8\xc0\x42\xe4\x18\xde\x0f\xd8\xcd\xf1\xe2\x9f\xf6\x39\x73\x25\x1d\x8c\x8f\xf7\xad\x84\xb5\x64\x06\xf5\x3b\x93\x52\x7c\x89\x41\xbd\x27\x1d\x85\x49\xdd\xff\xe8\x79\xfd\x15\xbe\x7a\xf4\x40\x1c\x5a\xc4\x8f\xff\x01\xa3\x65\xfb\xd2\x31\x42\xd9\x41\xbd\xba\x67\x02\xed\x06\x58\x2d\xe1\x9f\x4c\x90\x17\xe2\xbf\xf4\x9f\x97\xea\x0f\x1d\x84\xfd\x76\xf0\x0b\xe2\x2b\xb4\x8c\xda\xa3\x7f\x62\x98\x25\x3a\xc1\xf1\x6a\x02\x31\xfd\xf9\xe6\x38\xba\x17\xdf\x87\x27\xe9\x1e\xa6\xba\x12\xcc\xd6\xaf\x2b\xbe\x95\x91\xa3\xb7\xf0\x7c\x0e\xb4\x18\x67\x22\xc6\x7b\x9d\x96\x40\xfe\xf5\xbc\xf5\x48\xcb\x7d\xd7\xbc\x92\xe5\xce\x23\x4d\x52\x1a\x97\x11\xe9\x51\xba\x48\x10\xd3\x20\xa0\xea\x73\xf2\xd6\x53\x2c\xb7\xbb\x66\x9d\x85\x65\x24\x50\x19\x18\x3b\x00\xaa\xfa\x79\xb9\xc6\x0f\x35\x0f\x0d\xf5\x39\xea\xb9\xf6\xf3\x23\x0d\x45\xff\xd4\xa7\xd1\xd7\x2e\xbe\xfe\x70\x0c\x43\x33\x48\x35\xef\x2d\x02\xe0\xd8\x01\x6d\x16\x3d\x33\x54\x4f\xfc\xc3\xb3\x01\xc5\x8d\xa1\x03\x36\x69\x99\xd2\x84\xd0\x2f\x75\x74\xc8\xf5\x0f\xd0\xa4\x52\x8b\x9d\xad\x4f\xe9\x79\x03\xd6\x73\x1d\x84\xc9\xf2\xa4\x44\xb6\x9f\x21\x7a\x8d\xc0\x41\x79\x3b\x38\x87\xf5\x79\xb9\x51\xb5\x96\x71\xaf\x27\x85\x39\x51\xf4\xf2\xd2\xd6\x4a\x07\x7b\x37\x1c\x39\x9a\x75\xd4\xd4\xf9\xf4\xf2\x7e\x7a\x7a\x43\x47\x35\x86\xb5\x34\xce\x81\xae\xdb\x4e\xf0\x56\x77\xcb\xda\x61\xa4\xec\x0d\x5d\x17\x5c\xa0\xf4\x4d\x95\x5f\x96\x02\xfe\x8b\xc6\x2f\xe3\xa6\x69\x72\x89\x33\x1c\x29\xe6\x79\x45\x21\xb7\x51\x86\x3b\x73\x6c\xab\x91\x9a\xb4\x3c\x6b\x2c\x68\x43\xa3\x91\xe6\x90\x7c\x6e\x6b\x12\x66\x8d\x7a\xa2\x6e\x79\x2c\x6a\xb2\x15\x17\x84\xf7\x08\xfe\x75\x9c\xe0\xb3\xc0\x3b\x2c\xbd\x91\x1d\x84\x0d\x7f\x52\x1b\x47\x14\x9f\x0a\xa9\xc8\x6a\x04\x18\x0f\x3c\x77\xeb\x47\x3f\x87\xee\xc1\x06\xa7\x31\x8f\xc6\x42\x80\xbb\x15\xeb\xd2\x08\xee\x86\xe0\xc2\x7d\x11\xaa\x9d\x01\x3e\x2e\x42\x7b\x18\xc5\x1f\x17\xa1\x5e\xa4\x5e\xa2\xb3\xff\x22\x7f\xc0\xb0\x1b\x9e\xf6\x45\xe9\xa0\x7e\xff\xa6\x28\x3d\x22\x23\xd5\x12\x63\x2b\xa0\x17\xf9\xdc\xdc\xb1\xce\x9e\x1d\x01\xf8\xc7\x05\x9c\xf6\x20\xfc\x83\xc2\x4c\x25\x46\x82\xe3\x9d\x15\x56\xd9\xb5\x76\xda\x1e\x77\x67\xe9\x09\xbd\x40\x66\xd7\xe8\x34\xec\x05\xbe\xc7\xe8\x57\xf8\xb6\x54\x6a\xf3\x72\x41\xa3\x9d\xb4\x88\x86\x16\xe3\x84\x36\xcd\x76\x78\x13\xd1\xe1\x04\xdf\xc4\x8b\x68\xb6\x54\xf2\xca\xb4\x4e\xf4\xb4\xa9\x44\x14\xdc\xca\x6d\xf1\x45\x25\x02\xc0\xc1\x19\xe9\x31\xaa\x5e\x0c\x54\xb7\x75\xb4\x04\x5c\x60\x3c\xc7\x10\xab\x3c\x1c\xf9\x24\xee\x47\x5c\xb7\xe7\xfe\xb2\x0b\x3c\xe0\xa3\x0e\xd8\x1c\xb1\xa5\x40\x6b\x82\x7d\x97\x93\x91\xbc\x65\x18\x12\xd9\x7b\xf9\x8f\x96\xd2\xdb\x27\x99\x5e\x0a\x20\x10\x3c\x5b\xbf\x2b\x8b\xc7\x00\x82\x6d\xf6\xf0\x15\x4e\x8f\x00\x82\x15\x2f\x0a\x13\x4c\x65\x7e\x7d\x63\xfc\x1b\x20\x10\xd5\xfd\xc5\x2e\x2b\xd5\xfd\xaa\x30\x57\xfb\x9a\x7f\x9d\xed\x02\x08\x36\x22\xdb\xf2\x4f\x8d\x1f\xab\x0d\xc1\x78\xb3\xd6\xc8\xd6\xfe\x5e\x4c\x29\x24\x6e\x00\x23\x6a\x47\x67\x95\xc7\xcd\x65\xdf\xcb\x31\x5b\xaf\x3f\xc3\xee\x1b\xf1\x61\xf3\x31\xcd\xb4\x3f\xe3\x96\xb4\xce\x0e\x23\xd3\x59\xed\x70\x0c\xa3\xa7\xcd\x97\x70\x6f\xf7\x2b\xe1\xc6\x6c\xc2\xa9\x81\xd5\x22\x92\xa1\x14\x73\xe0\xea\x66\x29\x43\x79\xb0\xb7\x6c\x79\x39\xbb\x91\x44\xa0\x87\x82\x52\x39\xbc\x33\x83\xe0\x59\x30\xbd\x53\xfa\xf2\x54\x09\x57\x43\x67\xb0\x38\xab\x98\x4c\x32\x7c\xbb\x6c\x5d\xe8\x9f\x05\xd3\x0a\x93\x61\xc8\x7e\x39\x65\xfa\xd7\x49\xae\xa6\x61\xcd\xee\x90\xec\xd6\xb8\xab\x0d\x44\x2f\xd4\x0e\xfa\x49\x03\x49\x98\x90\xd3\xff\x1b\x6d\xe7\x65\xfd\x3b\xcd\x37\x19\x80\x1f\x74\x76\x92\x4a\x24\xd8\xfa\x07\xc1\xff\x3f\x0d\x8e\xf9\x8d\xb5\xfa\xab\xd9\xf2\x8c\x96\xac\x74\x58\x52\xee\x11\xfc\x2f\xba\x41\xef\xb4\xfb\xdd\xe0\x9d\xc6\x9a\x95\x0f\x4a\xcf\xbb\x58\xed\xdd\xfa\xeb\xa5\xb5\xf0\x0d\x8c\x12\x32\x0c\xcb\x58\x33\xed\x7b\xa3\xda\x98\x24\x3a\x5d\x45\x23\x3c\xa9\x1d\xe9\x5c\xd1\x76\xae\x57\xe1\x4e\xe7\x0a\xd7\xb9\x08\x5c\x4d\x0f\x47\xa8\x74\xf5\xf8\xd2\xde\x0e\xf9\x86\x94\x1a\x1e\x90\x2d\xa0\x62\xa6\x08\xc8\x74\x17\x9f\x49\x96\x25\x39\x76\x4a\x35\xbf\xcd\x6a\x5d\xa6\xa4\x71\xd5\xa9\xb6\xa4\x51\xd5\x7e\x98\x34\xc6\xc2\x16\x68\x1d\xdd\xfb\x75\x9b\xe8\xc8\x14\x35\x86\xdc\x40\x0c\x43\x8f\xa0\x2c\xb8\xba\x72\x8b\xc0\xd5\x55\xe0\x10\xb8\xeb\x8e\x6e\x33\xb8\xe5\x3a\x57\x1a\x03\x2f\x8f\x83\x20\xf2\x4d\xc4\xdd\x7c\x51\x0d\xa2\x1a\x68\xc5\x7c\xd6\xf8\x14\x64\x0b\x63\x17\x53\x43\x8d\xab\xa1\x66\x47\x7a\x69\x47\x7a\x7f\x7c\x13\x33\xc0\x71\xfc\xeb\x41\xee\xc6\xb2\x44\x96\x4e\x4b\xa5\x78\xe2\xc8\x13\x8d\x16\x79\x2d\xd9\xe9\xa5\x38\xbd\xe9\xee\x4b\xef\xb2\xe2\x98\x7c\xb0\xa8\x2f\xce\xd4\xdd\x9b\xcc\x31\x29\x99\x1a\x51\x63\xa6\x4d\xa3\xf9\xe4\x27\x03\x40\x22\x25\xdb\xf4\x86\x28\x67\x65\xdc\x1d\x62\x76\x10\xde\x65\x05\xa1\x34\xe2\x34\xce\x59\x10\xb8\x83\x18\x37\xe6\xf3\x38\x9f\xaa\x07\xdd\x49\x92\x6b\x6f\x19\xed\xf5\x91\x8f\x61\x53\x19\xdb\x9e\xea\x3e\x3e\x0d\x82\x03\xa5\x80\x6a\xd5\x5d\x56\x78\x8e\xd0\x86\x00\xa7\x7f\x7b\x1c\x70\x0d\xdd\x6b\x8c\x9e\x25\x7d\x64\xe6\x76\xd8\xe5\x10\xe0\xc6\x0a\x23\xa3\x30\x2b\xbd\xcf\xca\xd5\x18\xa1\x51\x1e\x77\xeb\x90\x8f\x54\x20\xff\x58\xe9\x37\xc3\xd2\x89\x60\xda\x0b\xbc\x2d\x9b\xc6\x62\xa0\x71\x13\xc1\x0c\xaf\x1f\x8d\x1d\x14\x0c\xb9\x46\x6a\x7c\xb3\x6d\x15\xaa\xb1\x84\x25\x7c\xeb\xe8\xbb\xb6\x76\x91\x25\xa9\xfe\x63\x1a\xa0\xa9\x8f\x0f\x8d\x3d\x41\x97\xe3\x3b\x49\x0c\x62\x18\xc7\x50\x2f\xad\xce\x1c\xc9\xd5\x0c\x51\xcb\x78\x5c\xa3\x82\xdd\xd5\x94\x32\x66\x8c\x4c\x33\x73\xd6\x6c\xd0\x58\x6b\x96\xa1\x79\x20\x42\x82\x99\x2c\xae\xa6\xcb\xc8\x3a\x52\x6a\xa3\x24\xab\xce\x17\xf1\x3e\xca\xe2\x0a\x5d\x41\xf7\x3a\xa2\x63\x43\x08\xc1\x5d\xac\x63\x6f\x51\x9a\x63\x89\x14\xc5\x61\x38\x11\x8e\x0d\x26\x0c\xc9\x44\xf8\x8a\x99\x7d\xd0\x34\x93\x0f\xc4\x7f\x02\x81\x25\x6f\x0e\xa8\xc5\x9a\xbb\x22\xc2\xcc\x00\xc8\xdc\x7a\x79\x62\xcc\x94\xd2\xad\x2f\xf5\x20\x62\x6a\xc0\x52\xef\x37\x8e\x9a\x15\x1f\xb8\x0d\xf4\xf0\x5d\x47\xb3\xd9\xec\x8c\x12\x74\x1b\xcd\xbc\x2f\x63\x2d\x94\x50\x3b\x10\x4d\x86\x9a\xab\x9e\x42\x85\x12\x07\xcf\x98\x26\x0b\xd7\xa3\x02\xb1\xa9\x3b\x7d\xc1\x66\x4b\x0a\xd5\xe1\xd0\xd1\x49\x8d\x81\xad\xb5\xe8\xf5\x74\xc5\xce\xf4\x4b\x87\xb6\x01\x6c\xaf\x41\x08\x8b\xdb\xb1\x5a\xd4\x43\xef\x3b\x08\xb7\x2d\x8b\xb2\x52\x6d\x19\xac\x0d\x11\xb7\x00\xdd\x12\x11\xc3\xe5\xa8\x14\x19\xe0\xfe\x9a\x71\x1d\x07\x55\x19\x44\xd6\x44\x48\x71\xab\x61\x50\xd5\x59\x50\x95\x16\x60\x3d\x2f\x9f\x69\x7e\xdd\x2b\xb3\x67\x37\x0f\xf0\x4f\x63\x71\xd7\xaf\x8b\xbd\xa0\xcf\x4f\xe1\xbe\x5b\x91\x31\x56\x82\x13\x37\x31\x0d\xf6\x20\x3c\x0d\x60\xd6\xd5\xac\xf1\x79\x6d\x8d\x2f\x94\xa6\xd2\xbb\x61\x49\xde\x34\x65\x0a\x8f\x6c\x63\xa4\x32\x18\x58\xe1\x58\x73\xa7\x44\x12\xae\xbd\x67\x0e\x45\x1b\x13\xb4\xec\x56\x2d\x15\x5e\x94\x68\x32\x30\xb6\x63\x7b\x96\x33\x95\x3d\xa8\x8d\x6f\xde\x8b\xd2\xf5\x7f\x4f\xae\xcc\x4e\xef\x71\x3a\x20\xa9\x54\x43\xed\xb1\xd5\xdd\xe6\xa8\xb5\x85\x21\xb9\x66\x8f\x5e\xa9\xf0\xc8\xae\xe7\xda\xff\x80\xc2\xb5\xa1\xe3\xa3\xb0\x62\xde\xab\x91\x56\xb3\x55\x5f\x4d\x1f\xd5\x22\x20\x7d\x66\x1d\xd9\x61\xd6\x79\x84\x21\xf7\x6f\x18\x4a\x4a\x5b\x76\x58\x56\xc5\x2f\xa3\x4f\xc0\x6b\x05\x76\xdd\x32\x3b\x82\xf4\xc8\xbf\x98\xf4\x91\xc9\xc7\xf8\xfc\xae\x7f\x97\xcf\x4f\x1b\x8a\xa4\xe5\xee\x32\x00\xa1\xd2\xb0\x97\xa8\x55\xc6\xb2\xa0\xe4\x14\x04\xb3\x92\x3c\x91\x69\xe4\xcb\x01\x01\x68\x34\x58\x0f\x48\xe0\x1e\x35\xd2\x5b\xd5\x34\x93\xb5\x6d\x7d\xc3\xd6\xe6\x7e\x5b\x4a\x31\x10\x46\x72\x4d\xaa\x30\x9c\xac\xe7\x96\x74\x28\x0c\x27\x77\xe8\x05\xa6\x39\x17\xd7\x1d\x92\xc3\xa6\x79\x04\xdb\xcf\xc5\xf4\x11\xf9\xcf\x98\x0f\x64\x46\xcf\xea\xb3\xde\x9d\x1b\x2d\x01\x6b\x0a\x7b\x56\x9f\xec\x99\xd2\x20\xba\xe0\x59\x3a\xda\xd3\xa4\xdb\xfb\x50\x5a\x4d\xb3\x37\x59\xfd\x90\x97\xeb\xea\x1e\xd1\x4a\xec\xe6\x80\xd4\xec\x06\x77\x07\x4a\x8a\xcb\xa3\xd4\x71\x3b\x56\x83\x9e\x07\x2c\x7b\xb5\x8c\x8b\x68\xed\x88\x1a\xd5\xe7\x90\x5b\x4b\xba\x37\x60\xdc\xd3\x6f\xa5\x96\x62\xa8\xb6\x34\x80\xe8\x53\x60\xf9\x55\x6b\x10\x48\xff\xb9\x0a\xc3\x3a\x59\xa5\xed\x93\x30\xfc\x89\xd4\x14\x2d\x01\xa6\xbf\x3b\xaf\x68\xbb\xa8\xa3\x1b\x92\x03\xae\x94\xd6\xd0\xa2\x2b\xff\xa8\xfa\x55\x8e\x10\xb0\x10\xda\x34\x6b\xe7\x83\x62\x7c\x04\xda\x1b\xa6\xd0\x9b\xf9\x0e\x0f\xd8\x04\x6d\x9a\xc9\x4f\x24\xa7\x4d\xb3\x0a\xc3\x2d\xc9\x93\x47\x6c\xc0\x3b\xad\x87\x91\x3d\xcb\xf5\x67\x10\xf5\x17\xc7\x60\x4b\xfc\xe9\x66\x34\x7b\x84\x63\x2d\x1e\x86\xbb\x21\x59\xe9\x23\xdc\x4b\x0a\xaa\x2c\x42\x3f\xfa\xe6\x18\x07\x92\x7e\x79\x58\x07\x33\x7f\xf6\xb6\xae\x7b\x84\xfd\x73\x74\x75\xb5\x21\x60\x39\xe2\xa7\xe1\xe4\xae\x27\x33\x40\x80\xb6\xe2\xf7\xf8\x72\x16\x07\x7a\xd2\x67\x47\x2e\x35\x52\xa0\xa4\x03\x2c\xd7\x21\x8f\x96\x67\xf3\x3c\x72\xe2\xd3\xcd\x5b\x55\x54\x5a\x44\x4d\x73\xf3\xcb\x01\x0b\x76\xd7\x39\x58\x69\xfc\x5e\x80\xf8\xb3\xb1\x3c\x05\x62\xc8\xfa\x6b\x9b\x8e\xa2\xfc\x37\x98\x44\x74\xc1\xdd\x83\x59\x23\x8d\x4c\xbb\x11\x09\x8e\x98\xa9\x4b\x83\xa9\x57\xbd\x1e\xff\xf6\x08\x11\x89\xc1\xfc\xc1\xd8\xc0\xae\xc0\xd0\x0a\x7a\xeb\xb2\x57\x22\xf7\x77\xd3\x94\xc3\xa1\xc7\xf5\x57\x83\x9f\x16\x48\x8e\x78\x24\x4b\x84\xca\xd5\x84\xa3\xff\x7e\xc1\xb3\xe5\x49\x1e\x77\xb2\xcf\x69\x44\xca\xd1\xb1\xdc\xd6\xc6\xb8\x01\xaa\x0c\x30\xdc\x5b\xb3\xf6\x4b\xc6\xe7\x45\xb5\xd2\xe1\x1d\x0f\xfe\x29\x3b\x5c\xa8\x8d\x60\x7c\x7a\x72\x35\x47\xc3\xeb\x8f\x5f\x7f\x35\xc4\x25\x44\xeb\x8d\x6c\x9a\x81\x47\x91\xa3\xc7\x53\x83\x16\x21\x36\x05\xc3\x91\xcf\xe7\x9f\xbf\xfb\xfa\x1b\x95\xa1\xa0\x3a\xe3\x2f\x44\xb5\xbd\xc0\xd7\x51\x93\xe0\x0f\xf2\xf4\x61\x5b\x04\xd4\xe0\x67\x96\xf4\x49\x38\xa8\x63\x87\x74\x38\x41\x74\x41\x73\x3e\x5b\x7f\xfa\xf8\x3e\xbb\x51\xdb\x1e\x12\x60\x96\x82\x0b\x51\x09\xcf\x1d\xf9\x6a\x8e\x77\x48\xf0\xb6\xbc\xcb\x8a\x7c\xfd\xec\xc7\xaf\xbf\x8a\x9e\x05\x53\x24\x38\xc1\x96\x78\xad\xbe\x36\xb9\x4c\x9f\x9f\xc2\x3b\xdc\x01\xc7\x97\xe5\xe9\x0d\x7c\x30\x6a\x57\xbd\xbf\xde\xe6\xd2\x1c\xa2\x34\xf9\x36\xbb\xe1\x8d\xe0\x35\x97\xcd\x26\x2f\x38\x9e\xaa\x7c\xf6\xd1\xe3\x97\x0f\xfc\xf1\x86\x97\xd4\x3f\x6a\x79\x2f\x7b\x4e\x6a\xa3\xb1\xd6\x66\xbe\x78\x01\xf7\x12\xdd\x50\x9a\xe6\xb5\xb5\x75\xd3\x58\x4d\x92\x9c\x46\x2a\xc7\x69\x90\x04\xd3\x21\x0f\x89\xb3\xd5\xe7\xb1\x8c\x02\xa5\x26\xa4\x01\xe4\x96\x1a\xc0\x92\xcc\x8b\xa6\xb1\x6f\x4e\x18\xbb\x56\xe5\x1b\xcf\xff\xae\xef\x95\xa4\xae\xa8\x1c\x73\x92\x49\x9e\xea\xcc\x70\xb8\x64\x5b\x36\x7e\x14\x88\x50\x9c\x63\x33\x1b\x29\x1b\x25\xa1\x91\x3c\x29\x13\xeb\xa9\x94\x32\x5e\xae\xaa\x35\xff\xfe\xbb\xb7\x9f\x55\xdb\x5d\x55\x6a\x06\xc3\x69\xc0\x82\xe9\xc8\x13\x7f\x2b\x4a\x0f\x68\x57\xd2\x3b\x79\x6a\x11\x75\x86\x2d\x8c\x90\x64\xf3\x5f\x7e\xdd\x73\xf1\xa8\xb4\x4a\xb5\x56\x14\x59\x5e\x3a\x37\x41\xdb\x01\x1d\x60\x8a\x5c\x6f\xd0\x95\x86\x06\xed\x56\xdd\xb5\xa4\x17\xbf\xf3\x5e\x12\x01\x18\xb3\xa3\xba\xcd\xed\x66\x8d\xee\x16\x06\xb4\xe7\x31\x59\x73\x91\x67\xc5\x38\x6e\x9c\x69\x5a\x62\x4c\x4f\x26\xa1\xfe\x0e\x8a\xd0\x18\xfe\xad\x31\xe0\xb9\x11\x00\x60\xed\x92\x61\xce\xdf\xb5\x9d\x8a\x9b\x69\xd5\xee\xbe\x79\xec\x2b\x84\xc6\x6c\x78\xa0\xd6\x75\x73\x90\x9d\x33\x90\x74\x02\xc5\x55\x73\xa9\x36\x36\xe6\x9b\xbc\x26\x41\x64\xf7\xbc\x01\x0d\xc3\xcf\xcc\x80\xee\xd8\x51\x94\xb2\xf0\x41\xb6\x80\xbf\xfa\xe9\xca\x02\xec\x4f\x6e\x1d\x18\x30\x3d\xd0\xee\xc7\xf9\x5e\x5d\xbe\xc9\xa8\x4b\xb7\xa5\x9d\x00\x7a\x46\x22\x41\x63\x6d\x20\x12\x23\x06\xa2\x27\xf5\x21\x91\x56\xd0\x0d\x21\x67\xcb\x2d\xf0\x4e\x42\x70\x29\x2e\xcb\x40\x2d\x7c\xd1\x48\x52\x31\x9e\x54\x63\xc9\x3a\x3a\x1e\xc9\x4e\xff\xf4\x72\x71\x7a\x03\xdf\x48\x76\xfa\x1f\xf3\x17\xcf\x4f\xe1\x6b\xc9\x4e\x49\x12\x87\x29\xbd\x62\xc9\xcf\x61\xfa\xe2\x14\x3e\x47\x99\x33\x7f\x11\xd3\x28\x79\x76\x29\xd3\x17\x24\xf9\x59\xe5\x98\xbe\xa0\xcf\x4f\x6f\xb6\xf0\x0f\x23\x93\xfe\xfa\xe6\x7d\xf3\xe5\x9b\xd7\x9f\xab\x4d\xe2\x2f\xea\xde\xe5\xe9\xe5\xe9\x29\xbc\x95\xec\xe9\x00\x5f\xe1\xbf\x5f\x48\x16\xbc\x38\x0d\x6c\x28\x69\xf0\x22\xa0\xf0\xdb\x88\x43\x4e\xe6\x03\xc4\x7e\xea\x9f\xdd\x76\x7d\x8f\x86\x4b\x82\x73\x32\x55\x79\x9f\xd8\x78\xd6\x05\x54\xfd\xe3\xf0\xce\xe1\xae\x3e\x74\x10\x86\x94\xb7\x64\x95\x31\x06\x07\xd3\x80\x31\x56\x26\x8b\x34\x26\x25\x2b\x1d\x8a\x4a\xd3\x04\x2f\x02\xd0\x21\x6f\x1c\x43\x3d\x92\x94\x3a\x4f\x73\x41\x69\xd4\x7f\x86\xfb\x00\xe1\x33\xc1\x7c\xd9\x97\xcc\x1a\xd8\x83\x33\xc6\xbe\x92\xed\xd7\x67\xa4\xd6\xcf\xf7\x0e\xa7\x23\xa9\x53\xed\x4f\xa9\x65\x46\x52\x9b\x88\xa4\x76\x48\x9a\x57\x0a\x56\x1b\xb7\xe3\x63\x4e\xb9\x45\xd3\x54\x4d\x93\x27\x45\x1a\x57\xf1\x84\xec\x59\x41\x8d\x7d\x2d\x22\x12\x09\x9f\xd5\x9e\xa2\x75\xa2\x2f\x28\x64\xea\x9f\xc9\x92\x1e\x28\xec\xed\x62\x99\xf9\x89\x93\x45\xaa\xf4\xf1\x1c\xe3\xaf\xc2\x30\xc3\x6e\x6e\xbf\xfb\x7b\xd9\x8b\x46\x64\x57\xf3\xec\x97\xec\xe1\x82\x4b\x99\x97\x37\xf5\x7c\x53\x64\xd2\x44\x8d\x3a\xea\x6f\xa1\x17\x84\xd6\xa4\x99\x88\x54\x69\xf6\x79\x22\x90\x7c\xb6\x69\x48\xc9\x9e\x0e\x94\x26\x22\xd5\xa4\xc6\x1e\x7b\x99\x1f\xda\xca\xa1\xa4\xc0\x0f\xbf\x49\x3c\xae\x65\x6f\xf4\x5f\xdf\x09\x69\x25\xf3\x3b\x1e\x2d\xa0\xc8\x6a\xf9\x75\xb5\xce\x37\x39\x5f\x63\x08\xac\xcc\x30\x14\xd6\xaf\x6b\xf4\xb4\x17\x45\x64\x33\x41\x2d\x3b\xf8\xeb\x9b\xf7\x01\xe4\xf5\x57\xd5\x2a\x2b\x22\xed\x02\x71\x5d\xed\x65\x93\xed\x76\xea\xff\x59\x2d\x2b\xa1\x56\xf6\xf9\x74\x86\x65\xd6\x79\x55\xe2\x02\xaf\xd6\xfa\xe6\x3e\x5f\x23\x5d\xe7\xf3\x53\x2d\x71\xde\x98\x78\xfa\x55\x55\x50\xd0\xb4\x30\x48\x1d\x28\x2a\xa5\x98\x21\xc9\xc4\x64\x01\x59\xfd\x58\xae\x0c\xab\xaf\xe4\xa5\x44\xe6\xb7\x40\x6d\x92\x72\xad\x76\x9d\x3e\xcc\xee\xef\xef\x67\x9b\x4a\x6c\x67\x7b\x51\xe8\x75\x6d\x7d\xf6\x6c\x75\xab\x54\x19\xc9\xbe\x7f\xff\xc5\xec\xbf\x02\x50\xea\xde\x4e\x9a\x90\xbd\x2f\xa4\xa6\x5c\xd0\xea\xd2\x4e\x2d\x58\x81\x86\x6b\xd7\x77\xd4\x65\x00\x0f\xea\x77\xa7\xa4\x6d\x01\xcf\x9c\x86\x05\xbf\xd4\x88\xa9\xe9\x25\x50\x77\x4c\x8a\x5f\xb2\xbb\xcc\x50\x67\x1c\x6c\xdd\xeb\xe8\x49\xe5\x79\x7a\x79\xfd\xb0\x2d\x2e\xaf\x4f\x75\x91\xa7\x97\xd7\xea\xef\xa9\xce\xef\xf4\xf2\x5a\xfd\xbd\xbc\x3e\x3d\x80\xe0\xf5\xae\x2a\x6b\xfe\x45\xce\x8b\xb5\x79\x39\xb0\x37\x7f\xfc\xfa\xab\xc0\x7c\x85\xbd\xf5\x9e\x3f\x48\x5b\x2d\x7b\xef\x6f\x17\xef\xfe\xa1\x6b\x70\xc7\x85\x34\x41\x8b\x58\xc5\x20\xd2\x6a\xa3\x56\x1a\x9f\xe1\x37\xab\x86\xd6\x3f\x55\x2e\x41\xa4\xde\xd6\x6a\xa6\xb9\xad\x3e\x3c\x6a\x55\xda\x03\x78\x43\x5a\x0f\x19\xdb\x55\x0f\x52\x6d\xc4\xdc\xa0\xda\x1f\x71\x2a\x91\xf1\xf7\x92\xe0\xc4\xe9\xce\x15\x0a\x92\x46\xdf\x4b\xd2\xbd\x8b\x6c\x19\xea\x46\xcb\x54\xf3\xa9\x24\x6f\x25\xc5\x9b\xef\x45\x56\xd6\xbb\x4a\x48\x75\xf3\x2b\x73\xb3\x17\x5f\x3d\x66\x64\xea\x71\xc2\xa1\x57\xa7\x41\x74\xe8\x85\x33\x6a\x23\x5e\x3b\xad\xf7\x3b\xf2\x84\x81\xe2\x5b\xb6\x9b\x9b\xcf\x6e\x9a\x1d\xdc\xb5\x3f\xc3\x90\xf8\x10\x1d\x5b\xa3\x2c\xd1\xf8\x8a\x6c\x69\x64\xad\x88\x37\x9d\xe0\x7f\x78\x64\x57\xf3\xcf\xb2\xa2\xb8\xce\x56\x1f\x6a\x12\x54\xe5\x8a\x3f\xdb\xf2\x6d\x25\x1e\x03\x0a\xd7\x6c\x37\xaf\x65\x26\xf7\xf5\x67\x48\xa8\xfe\x74\x80\x7b\x25\x61\xdf\xa8\x7f\x1e\x58\xa0\xc9\x46\xf9\x3a\x80\x0b\xf6\x24\x78\xb6\x7e\xbc\x90\x6a\x63\x8d\xe4\xde\xdf\x99\x71\xf1\x25\xcf\xd6\x63\xe4\xd1\x27\x1a\x0a\x5b\x6d\x4c\x34\xed\x4a\xcd\x9e\x0e\x67\x92\x7d\x2e\x75\x9c\x6a\x46\xcf\x68\x9d\xc8\x01\x3d\x00\x12\xac\x33\x72\xf4\x51\x07\x68\x41\x26\x2f\x53\x7a\x22\x59\x9d\xf0\x91\xa4\x87\x8e\x7e\x21\xb5\x7e\x21\x8d\xca\x07\xcf\x94\xce\x77\xc3\xe5\xeb\xa2\xe8\x7e\xcb\x18\x48\xf1\xca\xb8\x7b\xa1\x15\xff\x3b\x0d\x97\x31\xf8\x72\x6f\x34\xea\x22\x57\x18\x53\xf0\xa6\x5f\xb9\x74\xe4\x56\xd3\x70\xb8\x4f\x78\xca\xcc\x29\xe7\x01\xaa\x3b\x2e\x44\xbe\xe6\x5f\xe7\x5b\xcd\x58\x79\xd4\xb6\xbd\xc2\x38\xbb\xad\x49\xc7\xb8\xcd\xa1\xed\xdb\xf1\xee\xc1\xa8\xf6\x15\xbd\xb0\xe1\x78\x3c\xb9\x30\xe3\xc1\x0f\xf2\x90\x5a\x81\xbe\x56\x7b\xf5\x44\xfd\x0b\x3c\x91\x69\xda\x25\xc2\xc8\xae\xd5\x6c\x19\xf1\x8f\x69\x9a\x07\xb7\x28\x87\x61\x3e\xc7\x84\x44\x52\x78\x4d\x16\xf6\x44\xf7\x80\x7b\x84\x1b\x87\xc4\x70\x41\x61\x37\xdf\x8b\x82\x11\xa2\x26\x81\xba\x6c\x1a\xb3\x82\xd0\x69\x10\x50\xa7\xb9\xfd\x22\xc1\x93\xfe\xd3\xe0\xf4\x34\x50\xef\x6a\x4c\x9f\xf9\x96\xcb\xdb\x6a\xdd\x34\xc2\xf0\x7e\xed\xdc\x1d\x9d\x04\x76\xed\x8a\xcc\x48\xfb\x03\x55\x17\x7a\x5c\x17\x0a\x02\x1b\x2d\xba\x9b\xaf\x44\x55\xd7\x9f\x57\xdb\x2c\x2f\xe9\xd3\x08\xc8\xb7\x52\xd3\xd4\xb6\xbb\xd0\x8b\x29\x7e\x0c\x98\x1f\xfa\x0f\x74\x32\x61\xbf\xf5\xbe\x67\xaa\xd6\xe1\xaa\x96\x13\x8d\x5a\xe0\x3d\x28\xf0\xbe\xd9\x9e\xbf\xa3\x4f\xdd\x7c\x94\xcc\xcc\x37\xe6\xab\xc2\x70\x37\xf7\xd6\xc3\x96\x09\xcf\x69\x39\x36\x9d\x79\x81\xd9\x3d\x8e\xfe\xa9\xda\x54\x64\x6b\x44\xea\xcb\x0a\x4a\xe1\x4b\x25\x2c\x61\x07\x02\x2e\x28\xac\xac\x91\xe1\x02\x15\x91\xdb\x67\x79\x49\x36\xd6\x4a\xad\x8a\xd6\x8b\x32\x0d\xc3\x05\x53\x22\x0f\xd5\x87\xe9\x14\xb5\x8e\x8e\xad\x2a\x40\x69\x28\x33\x21\xdb\x6e\xd4\x7f\xba\x60\x7d\xb0\x43\x0f\x04\xc3\xca\x32\xf9\x87\xd9\x96\xe8\xa4\x14\x2a\xdd\xcc\x6e\x94\x7c\x83\x27\xa4\x9d\x97\xe2\x23\xed\x82\x30\x97\x46\xe4\x6a\x1d\x41\xd3\xc5\xb9\x93\x88\xdf\x55\x18\x30\xd6\xd6\x34\xa2\xfe\xd3\xd2\x9d\x49\x08\xa6\x81\xd2\x7c\xd7\xa6\x86\x5a\x59\xb6\x01\x3c\x14\xbc\x5e\xf0\xaa\xd5\xda\x75\x58\xb7\xbb\x90\xf6\x71\xca\xc8\x85\x69\x80\x8a\xc6\x41\x18\x44\x41\x1c\xd0\xa9\xe9\x38\xe3\x11\x69\xd2\x6b\xf3\xf3\x6e\xbe\xca\x56\xb7\x18\x09\xc4\x2a\x57\xbb\xaf\x25\x04\xcf\x97\x01\x85\xf5\x78\x86\xc1\x15\x0b\xa6\x0f\x72\x3a\x9d\xae\xed\xfc\xac\xf4\x65\xbe\xb1\x4a\x20\xc2\x40\xf8\x5a\x61\x52\xa5\x61\x78\x31\xef\x0b\x4d\x12\xbc\xdd\xcc\x6c\x9a\xd9\x45\x5e\xae\x78\x00\x83\x37\xd1\xf8\x2b\xb3\x9b\x8f\x65\xf2\x8f\xaa\xe4\xb3\xaf\xd5\x14\x08\xda\xd4\x94\x82\x37\xf0\xdb\x5e\x37\x46\xf2\x5e\xff\x0a\xff\x27\x1d\x2f\xc9\x64\x30\x7b\x8f\x1e\xd8\x9d\x0c\x28\x8c\xbd\xf0\x1a\xd5\xc4\xc0\x17\x31\xc9\x22\x45\x23\xb9\x56\x20\x93\xee\x93\x34\x3e\xfa\x64\xaa\x76\x07\x58\x6d\xff\x76\xac\x56\xb0\xe9\x17\x72\x1a\x9c\x3d\xfb\x95\x2d\xe6\x8b\x65\x10\x05\x01\x8d\xda\x6c\x34\xf2\xd0\x6e\x7e\xab\x57\x35\x3a\x52\xcd\xdb\xf6\x71\x72\x9b\xa2\x4b\xd7\x6e\xae\xa9\x60\x2e\x78\xb9\xb6\x18\x52\xfe\x3d\x7d\x9e\xb8\x85\x0b\xd8\xd1\xa6\x59\xb9\x13\xdc\x0b\x23\xda\x31\x93\x07\x16\xe0\xaf\x00\x1e\x91\x23\x74\xd7\x42\x6e\xc0\x85\x8e\x97\xde\xcd\xeb\x3d\x5a\x4e\xd5\x1d\x84\xe1\xd8\x69\xe3\x20\x85\x9c\x7d\xa9\xd4\x2e\x23\x5e\x50\x87\xb8\x98\xb7\xfa\x07\x5b\xc2\x26\x0c\xef\x7a\x52\x03\x39\x6d\x92\x0b\xd8\xa5\x1d\x81\xb4\x9b\xa3\xe2\xaf\x1a\x5e\xea\x70\x98\x57\x08\x40\xce\x8e\x01\x53\xd9\xef\x08\x4c\x72\xa5\x25\xb8\x77\xa9\x16\xe6\x2b\x36\x59\x42\x3e\xaf\xd5\x6e\xe8\x1e\x5e\xd3\x56\x06\xe3\x82\x2a\x6f\x45\x75\xff\xec\xdd\xc9\x6b\x32\x5b\xc2\x3b\x7a\x38\xe0\x5a\x8a\xbf\x82\x7f\x54\xcf\x9c\x76\xe9\xef\xe0\x5f\xeb\x5d\xa8\xdb\x96\xa2\x82\x78\x0f\x6f\xe0\x81\x89\x93\x55\xd3\x90\x95\xda\xcf\xee\xc3\xb0\x17\xdb\xb3\x57\xcd\x65\x4e\x44\x32\x56\x2b\x69\x05\x9d\xc6\x92\xaf\x16\xf1\x9f\xd5\x5e\x8d\xc9\x57\xec\xe5\x62\x11\x86\xf2\xfc\x93\xc5\xa2\x69\x3e\x59\xfc\x99\x31\x26\xa1\x0c\x43\x72\x3f\x08\xeb\xf6\xa0\xae\x1c\xd9\x8c\xdd\x7d\x80\x6a\x3d\x37\x16\xcf\x82\x17\x01\x63\x6c\x9f\x2c\xd2\x33\xba\x77\x27\xb9\x2e\xc2\x44\x73\x63\x73\xa7\x9f\x34\x0d\xfa\xba\x74\x75\xae\xde\x0c\xa3\xd4\xf3\x46\x53\xfa\x47\xad\x54\x95\x1a\xe3\x4c\xd5\xbf\x5a\x3a\x95\x94\x3e\xed\xdd\xbe\x3b\xa7\x27\xd7\x82\x67\x1f\xd4\xaa\xa7\x2a\x93\x97\xcf\x04\xad\xb0\x5e\xa8\xcc\xb4\xfc\xcf\x42\xab\xa5\x7b\x4d\x1b\x3c\x6f\xb7\x34\x49\xae\xf4\xc6\xa9\x7a\x90\xd2\xa7\x8a\xe5\x26\xc7\x0c\x09\x72\x72\x7a\x40\x4c\x8c\x4c\x95\xe0\xdc\xbf\xab\x89\xfe\xf6\x30\x6c\xab\x52\x51\x10\x49\x95\x1e\xc8\x0e\x2e\x10\x69\xb8\xdf\xbe\x3d\x10\x64\xe4\x07\x79\x3a\x20\xad\x65\x6b\x50\xd0\x8b\x03\xb6\xc4\x2a\x59\xa6\x9a\x93\x12\x95\x31\xaf\xca\xb4\x48\xb2\xbe\x76\xd9\xf9\xa4\x2c\x3d\xd1\xbc\x8f\x2b\xdb\x35\x67\x15\xfa\xaa\xf1\x79\x77\x5b\x98\x18\xda\xc2\x91\xfb\xa8\x95\x4e\xf6\x61\x88\x28\x72\xaa\x86\x5f\xe0\x9e\x29\x0c\x89\x64\xfe\x0d\x3c\xfb\xb1\x5f\x80\x48\x06\x15\x78\x25\xab\x62\xf5\x68\xa9\x54\xcf\x38\x73\xb7\x96\x6f\xfb\x30\xdc\xa3\x63\x3d\xf6\x0e\xc9\x58\x91\xec\xb1\x3f\xaa\xb4\x69\x8a\x24\x78\x81\x97\x1e\x83\x71\x81\x4e\x3e\x35\xcb\x3d\x54\x57\x9a\x2c\x53\xed\x90\xef\x65\x80\x62\xd4\xe5\x81\xbf\x28\x7d\x42\x08\xe7\x2c\xce\x90\xe1\x38\xc2\x98\xfd\x02\x47\x18\xa9\x98\x4a\x03\x2b\xd7\xa1\xb5\x6a\x7f\x6f\x7c\x61\xe2\x4c\x15\x9f\xa9\x16\xc1\x09\x5f\x53\xc9\x32\xe7\xf1\xa8\xc4\x84\xfe\xdd\x0a\x07\x63\xb5\xac\x71\x13\xd5\x39\x21\x01\xfc\x13\x65\xf1\xbb\x48\x49\x08\xdd\x7d\x35\x22\xbf\x89\x6a\xab\x86\xe4\x34\x78\x26\x2b\xd5\x00\x87\xc3\xa1\x9b\x8f\x11\xa3\x01\xa8\x76\x8f\xe4\x41\x8d\xba\x7b\xb8\x40\x6c\xa4\x98\xf4\x56\x67\xf2\x86\x5d\x8c\xcd\xbe\xaf\xb2\x5a\xba\x05\x59\xc3\x97\x0c\x96\x63\xf6\x86\xc2\xb1\xf7\xd5\xc2\x6b\x5f\x33\x8b\x30\x7b\x43\x29\xbc\xd4\x42\xa6\x69\x82\x2f\xdf\xbc\xfe\x3c\xc0\xb5\x44\xa9\x30\xf1\x03\x0b\xca\xca\x12\x00\x44\x46\x16\xe9\xbb\x72\x6b\xeb\x11\x91\x07\x76\x8f\x5b\x12\x0e\xb7\xec\x5e\x6b\x34\x05\x9b\x90\x35\xbb\x37\x8b\x85\xd6\xa6\x1e\x60\x22\xc3\xf0\xa1\x69\xd4\xca\x63\x9a\x54\xa2\x63\x36\x42\x61\xe0\x12\x8d\x1b\x1b\x26\xdd\x25\x52\x27\x11\xd1\x34\x0f\x6a\x4f\x01\x45\x7c\xd3\x41\x13\xdb\x42\x72\x0b\x0f\x70\x91\xd2\xe8\xc6\x87\x13\xdb\xaa\x45\xe6\x01\xd6\x69\x9b\xa9\xda\x61\x91\x6b\xb5\x9f\x36\x82\xb8\xb3\x3c\x15\xb1\x5e\xa0\x4c\x37\x45\xf8\xeb\x8d\xae\xa3\x5a\xaf\xa0\x88\x6f\x23\x95\x9d\x46\xe9\xf1\x0a\x49\xa9\xca\x89\xf4\x56\xba\xcf\xcc\x4a\xea\x56\xbb\xd9\xcc\xea\xd4\x78\xc0\x36\xa6\x51\x57\xe8\xb0\x66\xf7\xc3\x17\xb8\xef\xfd\xdb\xc5\xbb\x7f\x1c\x09\xde\x7a\x76\x65\x83\x48\x40\x40\x80\x16\x1c\xbd\x57\xbe\x40\x43\xd4\xf8\x96\xd7\xbe\x63\xdd\x5b\x5a\xc6\xd7\x8e\x1b\xd9\x0d\x97\x01\x04\xbb\xaa\x96\x43\x28\xf4\x5e\xb0\x56\x97\xf9\x61\x4b\x0c\xb4\x3e\xfa\x25\x95\x08\xa2\x6d\x2d\x2d\xda\x8e\xd2\x42\x73\xa1\x01\x89\x83\xf1\x82\xb2\x02\x29\xca\xf5\x1c\x11\x60\xe6\x4c\x84\x38\x19\xfd\x93\xa6\x30\x44\x87\x46\x95\xab\x25\x7f\x66\x47\xbe\x18\x4b\xf5\x0b\xd3\xa6\x4d\x57\xa0\x6d\x02\x40\x85\xdb\x33\x43\x2e\x9d\xa1\x72\xd9\x35\xa9\xa1\x71\xcc\xbc\xe5\xdb\x21\x0e\x07\x68\xc5\x6c\x0f\xe7\xb5\xa5\xc2\xd6\x30\xcd\x87\xfe\x61\xd6\xbd\xc8\x76\xaf\x8b\x11\xcf\x61\x7f\x13\x8f\x6b\x18\xd1\x78\x2c\x84\x33\xcf\xd5\x37\x59\x28\x8d\x5a\xb2\x2b\x03\x18\x3c\xa0\x2b\xa7\x73\xfe\x2b\x59\x50\x8f\xaa\xcf\x26\xeb\x06\xbf\x74\xd8\x3c\x6d\xce\x20\xfb\x47\x61\x8e\xbf\x13\xcf\xaf\xce\xb8\x26\x37\x35\x5b\x6a\x8c\x3c\x3e\xa3\xaa\x82\x83\xdb\x2d\x1d\xb5\xa3\x76\xd4\x7e\xe5\xc6\x20\xa2\xda\xe1\x6d\x59\x8e\xd3\x52\x1f\xf3\xb6\xf7\x42\x29\xdc\xfb\xdd\x40\x0a\xfa\x71\xf7\x7a\xe7\x49\x2f\x98\x74\x3a\x14\x69\x23\xe1\x63\x31\x37\x1d\x84\x27\x7a\x1e\x29\x25\xd5\x55\x1e\xb1\xab\x6c\xdb\x18\x83\x31\xd7\x12\xd1\xad\xb3\xca\x5a\x76\x9d\xb7\x69\xa4\xf3\xdf\x97\x83\x12\x3a\x2c\x8a\xd8\x7f\x84\xd3\x79\x59\x49\x12\x5c\x57\xeb\xc7\x60\xc8\x07\xdc\x86\x9a\x38\x72\x48\x7b\x3c\x68\xc9\xea\xe9\xa1\x05\x60\x34\x31\x9e\xbb\x9a\xef\xd7\x55\x6d\x91\x95\x46\x70\x39\x7a\x09\x91\x6b\xaa\xe0\x48\xd7\x39\xfe\x68\x2c\x93\x09\xe1\x3e\xc7\x9b\xd2\xf8\xf4\x4f\x4d\x78\xf2\x11\xd6\x04\x2c\xa6\x73\xee\xf2\x70\x2b\xfc\x38\x7b\xf4\xa7\x68\x79\x69\xf8\xfc\xc7\xaf\xbf\xfa\x52\xca\x9d\xd9\x64\x99\x95\x5f\xaa\xd9\x8b\x46\xe0\x1f\x24\x7b\x5a\x20\x70\xc0\xf2\xe5\xcb\x4f\xa2\x97\x8b\x3f\x1f\xe0\x57\xd9\x3f\xdc\x79\xb8\x15\x84\x9e\xa8\x2d\x93\xa8\xd9\x64\xf2\xab\x0c\xc3\xe0\x3e\x97\xb7\x9f\x09\xbe\xe6\xa5\xcc\xb3\xa2\x0e\xf2\xf2\xd9\xaf\x12\x76\xf8\x22\xfb\x55\x62\x32\x53\x59\xb7\xbd\x20\x03\x37\x11\x28\xf5\x0e\x4f\xe5\xdc\x34\x2a\xe3\x89\xec\x58\xb0\xac\x66\xd1\xa1\x38\xf6\x5d\x50\x99\x34\xd5\x53\xea\x38\xb2\x5c\x12\xed\xa7\x06\x12\x2d\x5b\x52\x6f\xb7\xd4\xaf\x9a\x0b\x7d\x2e\x3f\xdf\x65\x75\x7d\x5f\x89\xb5\x9a\xea\x0f\xb7\x42\xab\x95\xad\x3a\xeb\xdf\x54\xfa\x2a\xf3\x6e\x58\xf5\xd5\x24\xb4\x7b\x88\x30\xac\xe7\x7d\xfb\xe8\xd8\x3d\xd2\xbe\xa2\x0a\xf7\x3e\xb5\x69\xf2\x24\xf8\x71\x66\x7a\x8a\xaf\x67\xc8\x68\x9a\x36\x0d\x19\xbd\xcf\x82\x6e\xd7\x06\x14\x72\x5a\x0f\x37\xd4\x19\xa0\x5b\xf6\x89\x18\xf3\x44\xf6\xcd\xca\x78\x58\x50\xb2\x7a\x5e\x95\x45\x95\xad\xf1\x02\x15\x17\xbc\xc2\x2d\x28\x5e\x99\x8d\x27\x5e\xe3\xae\x0e\xb5\xa1\xd5\x6d\x56\xde\x68\x86\x61\x30\x3b\x6d\x0c\x74\xa9\xed\x26\x3c\x32\x5a\x90\x0e\x7f\xe9\x23\x63\xd5\x46\x71\x89\x2b\xb2\x00\x93\x92\x46\x15\xb1\xf7\xa1\xf6\x74\x24\xf5\xe0\x07\x99\xd8\x5b\x69\xd3\x8c\x26\xd3\xe7\x3a\xc8\x7b\x51\xbb\x1d\x84\x31\xa0\xe1\x13\x3a\xe2\x9e\xe4\xa5\xe4\x0f\x32\x7e\xba\xce\xcb\x4c\x3c\x46\xed\xed\x43\xf4\x84\x27\x40\xdd\x84\x07\x40\x22\xce\xa1\xe5\xfe\xff\x25\xef\x6f\xfb\x1a\xb9\x95\x7d\x61\xf8\xbd\x3f\x05\xf4\xc9\xcf\xab\x75\x10\x1d\x33\x6b\x9d\xb3\xee\x6d\xa2\x78\x33\xc0\xcc\x90\x30\x40\x80\x99\x64\xe2\xed\xed\xdd\xd8\x32\x56\x68\x77\x3b\x6a\x19\x86\xe0\xfe\xee\xf7\x4f\xa5\xc7\x7e\x32\xcc\x24\x6b\x9f\xeb\x5c\xd7\x1b\x70\x77\xeb\x59\xa5\x52\xa9\x54\xf5\xaf\x10\x29\x57\x04\x33\xaa\x3c\x44\x38\xad\x8c\xad\x19\x51\x29\xb5\xaa\x9e\x3b\x3f\x5c\x3b\xf6\x03\x37\x0b\x69\xbf\x71\xec\xbd\xc9\x94\xb2\x6b\xee\x9d\xb9\x21\x76\x51\xa3\x72\x81\x77\xbb\x29\xc0\x30\x62\x2e\xeb\x57\x33\xa7\x74\x0a\xb9\x52\x27\x88\x92\xba\x4a\x5d\x19\x2b\x58\x24\x73\x90\x58\xe9\x80\x30\x4a\xcb\xb0\x2a\x6a\xca\x77\xa8\x86\x87\x26\x98\x48\xe9\x96\x2b\x2c\xdb\xa5\x7b\x0b\x02\x10\x05\xcc\xee\x14\x29\x09\x84\xa8\x3b\xec\xd2\x2d\x95\xbd\xff\x54\x49\xf4\x45\xa7\xbb\xa5\xc4\x5b\xa5\x8b\xcc\x96\xf7\x74\xb2\x68\x7c\xff\x79\xd7\x7d\x29\xdd\x77\xea\xda\xbe\xfd\x8f\x9b\x70\xd0\x97\xa5\xae\x65\x42\xa4\x5e\xc3\x25\xe7\x0b\xc4\x28\xea\x0b\xab\x9e\xd0\x84\x30\x6d\x1c\x2c\x2b\xbe\x95\x36\x60\x07\x9d\x61\xd4\xa8\xfa\x97\x1c\x2e\x5c\x1f\x54\x85\x4f\x22\x05\x43\x37\x98\x8e\x49\x37\xd7\xa1\x7c\x66\xe0\x92\xa6\xcc\xb5\xa8\x9e\x9a\x03\x21\x78\xbe\x81\x5f\x4b\xa9\x23\xf8\x4e\xa5\xfd\x3e\x40\xda\x9d\xc7\xcf\xac\x02\x6a\x83\xb9\xd1\x93\xbe\xe3\xee\x9b\x04\x87\xea\x19\xe7\x7c\xd2\xa7\x92\xb1\x17\x28\xca\xd2\x30\x90\x8b\x6a\x4b\x9f\xaf\xca\x2c\x4e\x18\xc3\x46\x63\xc1\x8e\x69\xb7\x9b\x85\x1e\x1b\x52\xe7\xbe\x7f\xf4\xfe\x01\x1b\xa0\x7a\x94\x03\x92\x82\x06\xb2\x84\x2b\x23\xa4\x5c\xb8\x91\xae\x55\xb4\x4e\x81\xdf\x0a\x32\x1c\xe1\x4f\x82\x7c\x1b\x12\xf4\x1f\x83\x70\x40\xba\xeb\x6f\xd0\xfa\x3f\x06\xca\x62\xd2\xa3\x5b\x79\x8a\x59\xf6\x83\x89\xbe\x0c\x55\xd7\xdb\x4b\x73\x37\x5a\x0f\xef\xf1\x56\x28\xcb\x69\x38\x53\x29\x4f\x83\x9d\x60\xac\x34\xe0\x25\xb1\x99\x82\xa5\x09\x6d\xa4\x1f\x59\x07\xdc\x80\x2f\x03\x5c\x72\xeb\xa8\x04\xc1\x02\xb5\xb4\x88\x20\x65\xb7\x1b\x7e\x32\x06\x58\x72\xe8\xd1\x20\x58\xf1\x24\xa8\xe3\x2f\x08\xad\xe1\x86\x3b\x0b\xf1\x67\xef\x2c\x5c\x9d\xfa\x66\x21\x90\xff\x95\x9b\x6f\xbe\x5e\x07\xaa\x17\x60\xbc\x5e\x32\x63\x31\x97\x7b\xa6\xf9\x66\x44\xc9\x22\xac\xbc\x41\x83\xca\x8b\x50\x4a\xbb\xa5\x37\x38\x1f\x88\x61\x3e\x22\xf2\x8f\xbd\x98\xf8\xa4\x2e\x26\x76\x18\xea\x57\xc6\x09\xc6\xc7\xbb\xff\x30\xe3\x65\xae\x2c\x74\x4a\xb0\x53\x64\x20\x00\x38\xbd\x98\x5e\x77\xca\x3e\x61\x44\xea\x57\xbe\xb1\x33\x57\x65\x3b\xc1\xd6\x43\x9c\x6f\xa5\x99\xd8\x92\x04\x24\x47\x0c\xc7\xc3\xde\xa8\xc0\xe5\xd1\x20\xea\xb0\x0c\xe8\xdf\x6c\x84\xe5\x9f\x12\xf2\x2f\xb1\x4e\x99\x05\x4e\x1b\x50\x50\x2d\x6f\xc9\x06\xe0\xfd\xe4\x20\x30\x42\x86\xfa\x50\x5c\x06\x36\x9e\xd0\xf9\xf2\x78\xf3\xca\x50\x4a\x02\x5e\xe5\xf3\x90\x21\x08\xe8\xb6\x00\x78\xf2\x2c\x8c\xe1\xcc\x15\x93\xcc\xc5\x5f\x30\x2c\x08\x0c\xc4\xd5\xfd\xe5\xbb\x6b\x80\xb2\x80\xb6\x92\x30\xfc\x28\x48\x1a\xb1\xc5\x52\x9d\xb5\x80\x92\x1a\x12\x86\x92\xea\xe4\x11\x01\x79\x41\xf8\x83\xef\x24\xb1\x7d\xff\xdd\xb7\xea\x9f\xff\x10\xe0\x57\x84\x90\x8f\xc2\x3b\x26\xd8\x9b\x30\x6d\x1a\x02\x45\x34\x2b\x29\xea\xe8\x89\x83\xe1\xa8\x1f\x36\xba\x5c\x6b\xc3\x0c\xc9\x9f\xc5\x7a\x1d\x36\xf5\x72\x10\x86\x8c\x84\x2f\xee\x27\xaa\x5e\xf4\xde\xc4\x39\x95\xaf\xe1\x66\x37\xb5\xc6\xdc\xda\xec\xa9\xce\xe3\x18\x42\x7d\x41\x00\xed\x72\x9b\x77\xbb\xc3\x11\x0e\x33\x72\xa8\x6c\x23\x28\x42\x83\xa1\xa8\xd4\x90\x0d\xf7\x46\x68\xd4\x0f\x33\xf2\xa0\xc0\x67\x05\x8e\x61\x66\x63\x1b\xe4\x6d\x1c\xc6\xc8\xf1\xe1\x71\xb4\xa0\xfc\x96\x86\xc3\x11\xce\xfc\x93\x18\x42\xce\x22\x45\x2b\x0a\x40\x58\x6a\xc5\x42\xc1\xb1\x42\xd8\xce\x09\xf5\x3d\xf1\x5d\x70\x06\xe5\xd6\x95\x92\x7b\x11\x9a\xa0\xc4\xf2\xd0\x2d\xcf\xe8\xea\xa9\x87\xe5\x33\xd8\x16\x97\x6d\x64\xfa\xa2\x01\x38\x56\xa8\x40\xa4\x17\xe7\x57\xd7\x72\x9d\x19\x4c\x98\x5e\xb7\xdb\xa0\x71\x61\xeb\x75\x55\xe9\xa2\xac\xae\xb4\x3a\x14\x55\xe0\x79\x29\x7a\xca\xdc\x32\xc4\x71\x24\x53\x87\xe9\x40\x6e\x97\x53\x76\xff\xbd\x85\x38\x0b\x3d\x12\x04\x88\x83\x99\x42\xac\x87\x83\xb3\x59\xbb\xbc\xdb\x2d\xab\x86\xe2\xda\xe1\xb8\x04\x42\x98\xad\xd7\x9e\x82\x1d\xe4\x66\x81\xe9\x08\x90\xb9\xb5\x92\xc2\x6a\xca\xdc\x65\x38\x76\x6a\x3c\x5c\xd1\x01\xfa\xda\xc4\x92\x9e\x11\xbb\x6b\xb1\x7a\xc8\xc1\x2a\xa4\x62\xf9\xd0\x0f\x7b\x14\x45\x0d\x47\x75\x8d\x26\x38\x6d\xca\x3a\x8e\x6e\x39\x5d\x86\x16\xea\xd2\x3f\x7d\x1a\xbd\x0c\x6c\x1f\x2a\xea\x88\x9e\x55\xd9\x5f\x75\x1c\x07\x47\x90\x73\xf8\xd9\x0e\xcb\x63\x6f\x4b\x5c\x3c\x63\x1d\x40\x10\x42\xa9\x4b\xa6\x89\x67\xe4\xa9\xe8\x04\x52\x56\x67\x13\xb9\x61\x25\x2e\xf8\x9e\x17\x0b\xde\x84\xca\x0f\x10\xce\x89\x89\x02\x1f\x2a\x34\x5a\x5d\x34\xa8\x4d\xf1\xca\xbd\x48\x20\x74\x1e\x0e\x4b\x31\x0c\x93\xf5\x3a\x98\xb1\xcf\x74\x0a\x0f\xea\x4a\x7e\xe5\xef\xbe\x2b\x91\x81\xe7\xe3\x20\x8c\x49\x98\x92\x89\x6d\x44\x88\x10\xc4\xbd\x67\x92\x5f\xd0\x99\x40\xfd\x72\xf4\xdc\x0c\xad\xd7\x3d\xcc\xfc\x57\x2b\x15\xee\x58\x21\x22\x87\x82\xd8\x48\x08\xbc\x04\x8d\x2b\x17\xb9\x06\x25\x86\xd0\xfa\xdd\x6e\x38\x93\xff\xd5\xd3\x6e\x2e\xff\xee\xc4\x2e\x89\xac\x1d\xd2\xc8\x1f\xfa\x79\x37\x87\x7f\x72\xe3\x0c\x56\xb9\xe4\xb4\xf2\x08\x3e\x90\x27\x7b\x96\xde\x9a\x7a\x67\xa8\x3f\x81\xe1\x99\xa9\x50\x4a\x9e\xd6\x31\xab\xce\x25\x1c\x5c\xda\x30\x46\x9c\x58\x0d\x4a\xb8\x26\x7d\x1a\x90\xae\x2a\x35\xb2\xb4\x62\xb0\x52\x05\xd2\x52\xa1\xc2\x6a\xa8\x80\x21\xa4\x83\xb4\x4d\xcb\x33\x00\xa6\xdf\x12\xc5\x50\x0a\xb3\x65\x5d\xa7\xef\xa7\x88\x9f\x44\xb6\xec\xc3\x98\xee\xf0\x68\x19\xdf\xd2\x4f\xaa\x51\x58\x8e\x5c\x5f\x8d\xa3\xfe\xf2\x8b\xfa\x52\xa0\x3e\x64\xea\xa9\x24\xbd\xc2\xf8\xea\xe3\x65\x43\xec\x7b\x36\xb3\x6a\x52\x03\xca\xe9\xf7\x0e\x33\x52\x2e\x4c\x0a\x6b\x8e\x18\x15\xdd\xa6\xfe\x1a\x41\x1b\xfa\xea\x6e\x49\x75\xdc\x3c\xbb\x26\x6a\x83\x80\xa9\x7c\x03\x9f\x2f\x40\x43\xb8\x5e\xf3\x68\xaa\x3f\xea\x0d\x6b\x5f\x21\xea\x12\xc2\x41\x26\x58\xaf\xd5\xef\x4a\x2a\xc0\x63\xb0\x4b\xb5\x61\x55\x2b\x55\xaf\x87\xb2\x24\x8f\xd7\x2a\x9e\x4a\x0d\xf2\x3f\x64\xc0\x01\x6c\xc3\x61\x79\xd5\x82\x94\x5f\x67\x4b\x1b\x9e\x1c\x61\xa6\x26\xa9\x9a\xe8\x94\xce\x84\x4b\x65\xae\x4e\xdc\x7c\xef\x32\xf8\x6b\x87\x58\xc5\x9c\xba\x96\x1c\x1a\x90\xfe\xdd\xfc\xef\xaa\x1a\xaa\x49\x21\x0c\xa7\xf2\xcb\x2b\xb0\x3f\x94\x2f\xf4\x17\x29\x2b\xc9\x4b\x93\x21\x47\xfe\x25\x83\xea\xe7\xb1\xaa\xf3\xf5\x3a\xa5\x45\x19\x05\xd7\x06\x5e\xeb\x07\x1e\x25\x07\xd8\x06\x6a\x53\xef\x35\xed\xb7\xb8\x0c\x96\x92\xc8\x7d\xa0\x53\x83\xaf\x4d\x37\x04\xc5\x84\x9b\x20\x59\x52\x26\x69\xfc\x3e\xa4\x68\x90\x11\xda\xff\xb7\x2a\x09\x64\x84\xfa\x2b\xd4\x0f\xff\x6b\x6f\xec\x07\xd9\x50\x8c\xfa\x74\x98\x8e\x3a\xd9\x20\xb3\xf1\xe6\x42\x3e\xc8\xfc\xa5\xda\x67\x98\x0f\x58\x3f\xf3\x17\x36\x82\x6c\x84\x15\x80\x16\x5c\xe3\x65\x15\xb0\x63\xb9\x5d\xc3\x9e\xb1\x39\xe8\x2f\x84\x76\x5d\xb2\xcf\x34\xb9\x30\xd1\x70\xfd\x5b\xb0\x52\x00\x60\x13\xa6\x5c\x20\x6c\xc2\xc9\x73\xa4\x0e\x0b\x6e\x5b\x19\x8a\x11\x84\x5d\xed\xf3\x02\x79\x13\xa9\x23\x7c\xdb\x88\xc4\x40\xdf\x7d\x1d\x58\xa5\x0e\x2e\xac\x32\xd9\x28\xad\x20\xd2\x07\x3b\xd4\x28\x65\xfa\x02\x07\x41\x3f\xc8\x56\x02\x5e\x17\x15\xb4\x5a\x98\xdd\xd4\x9b\x5d\xa7\x46\x26\xd5\x71\x93\x02\xba\x87\xe0\x6c\x25\x7a\x26\xf7\x66\xbe\x5e\x87\x70\x55\xcf\xd6\xeb\x6d\x75\x36\x32\x11\xde\xfa\x26\x20\xaf\x15\x45\xab\x84\x03\x10\x0a\x86\x70\xcc\x4e\x23\xc5\x50\xb0\x4c\x71\x9b\xb4\xea\x05\x1a\x88\xa1\xed\xe7\xa8\x2f\x2c\xb3\xaa\x72\xad\x61\x30\x01\xc6\x09\xc9\xfe\x0d\xa4\x1a\x43\x83\x83\x30\x23\xb5\xf4\xd8\x86\x4c\x13\xc0\x0c\xe1\xf4\x99\x25\x89\xcc\x8f\xb3\xd2\x93\x49\x60\x42\x15\xab\x04\xe5\x27\x57\x39\x32\xbe\x28\x72\x7c\x06\x6a\xa5\xcb\x3e\xe7\xc8\x86\x5e\x54\x28\x12\x39\x2a\xe4\x81\x61\xc0\xfa\xc6\x58\x08\xee\x09\x2d\x71\x04\x37\xc9\x8a\x6f\x81\xdb\xef\x96\xf6\x05\xde\x32\x4e\xc0\x5b\x9c\xe6\xec\x0f\xba\xa5\x5a\xb9\x35\x49\xd8\xe4\x6e\x6b\x7a\x93\xa8\x1f\x8b\x6c\x95\xd3\x69\xf6\x90\xaa\x5f\xab\xa5\xfa\x2f\x0f\x21\xea\x57\x76\x4f\xb9\xfe\xb5\x12\xea\x07\x4d\x85\x79\x97\xd0\xf8\x9e\x6e\x29\xa5\xea\x96\xf2\xd6\xdc\x52\x5e\x9e\x5b\x77\xf4\x11\xca\xbd\xa3\x8f\x4b\x4e\xf3\x5c\xfe\x58\x2d\xb7\xb4\x3d\xfc\x82\xa6\xab\xc0\xb3\xfc\x78\x56\xc8\xf5\xee\xb7\x6b\x78\x93\xbd\x81\x93\x7c\x95\xf6\x0a\x73\x7d\xa7\x67\xae\xd2\x1b\x3c\xbe\xe7\xb2\x6b\x1b\xfc\xbd\x5d\x5f\xe5\xfa\x74\xdd\x0d\x05\x20\x1a\x54\x8b\xbb\x61\xbe\x1a\xaf\x7c\x23\x6f\x9a\x47\xb5\xfb\x39\xe6\x70\x79\x57\xcb\x52\xc9\x30\x9b\xd9\x1c\xa8\xc0\x06\xd3\xe1\x99\x40\x10\x4a\xfe\xd7\x01\x1d\x56\x69\x4b\x2e\x9b\x47\x6e\xc3\x35\xb0\x29\xaf\xfa\xe0\x7f\xfe\xcf\x40\x8f\xa5\x7c\x21\x30\x18\x58\xff\xcf\x00\x73\x3d\x04\x4b\x9e\x7d\x7e\x6c\x76\x54\xc5\xe0\x8c\x5b\x57\x7d\xc1\x91\x9e\x0e\xc5\x48\xc7\x4a\xe0\x52\x26\xf6\x42\x27\x92\x4c\x09\xa8\xee\xa0\xf7\x0a\xe1\x90\x35\xa8\x79\xa8\x39\x9e\x69\x27\xef\xd4\xf8\x16\x54\x4b\x00\x98\xbc\xe8\x76\xc5\xa6\x84\xfa\xff\xd6\xeb\x31\xfc\xdf\xd9\xc1\x4c\x4a\xc0\xf3\x2c\x99\x5e\xd2\x78\xfa\x58\xc6\x80\x01\x28\xdc\x78\xfa\xf8\x73\xcc\xc4\xce\x4e\x5f\x3f\x41\x70\x0a\xb0\x41\x00\x7f\x47\x52\xf2\x7e\x34\x4a\x90\x1f\xae\xce\xcf\x88\xe7\x41\x33\xb6\x4e\x99\xe4\x0e\xf2\xbe\xd1\x15\x91\x05\x3c\x2a\xd0\x0c\x72\x8f\xc7\xd1\x24\x5e\xd0\xe4\x30\xce\x29\x79\x8b\xc7\x4a\x13\x7d\x03\xf9\x1f\xac\x8b\x39\x64\x39\x5b\x2d\x28\x67\x93\x86\x28\x16\x2a\x97\xbb\x6e\x0e\x1d\xbc\x17\x11\xbe\x65\x32\x91\xb2\xdc\x36\xcb\xcf\xe2\xb3\x90\xfa\x21\xd4\x29\x42\x05\x0e\x4c\xc9\x6e\x12\xa7\x74\xc6\x52\xda\xed\xaa\xff\x51\xbc\x98\x9a\xdf\x61\xa0\x7c\x5b\x02\x3c\x1c\x35\xc4\x1c\x1f\x6b\x49\xff\x47\x41\x68\xf4\xdb\x4f\x32\x25\xfe\x46\xfe\xfe\xc6\x45\x88\x49\xb3\xc3\x2c\x9d\x25\x6c\x22\x48\xd3\x41\x34\xfa\x46\x0a\x46\x70\x30\xfc\x86\x7c\x23\x20\xc8\x86\x29\xcb\x7e\xd1\x8f\x3f\x0a\x84\xc7\x05\x28\x8e\xec\x3b\x99\x6d\x2c\x5f\xa3\x1a\xac\xba\x5c\x1b\x9d\x45\xcc\xd2\x43\xc5\xa7\x48\x79\x47\x42\x4f\xd6\xe6\x53\xf3\x24\xb5\x27\x52\x9c\x03\xa4\x53\x27\x07\x74\x15\x36\x8c\x77\x48\xf0\xad\x02\x5f\x1d\xa9\xfe\xae\x48\x26\x13\x48\xf9\xc7\x5c\x58\xad\x0c\xc5\xaf\x3a\xea\x2b\x91\xa7\xbf\xf5\xba\xbc\x98\xd4\x55\x91\x00\xfc\x9a\x63\xe5\x80\x7f\x98\xad\x92\x29\x28\x34\x67\x2c\x9d\x6e\x2d\xb2\xe9\x2a\xa1\x1a\xd7\x8e\xd3\xdf\x57\x8c\xd3\xe9\xd6\xcd\xa3\x72\xce\xef\xbf\x24\x23\x2a\xa0\x3b\x36\x7e\x5c\x42\xf2\x68\x4a\x97\x39\x9e\x90\x3c\x32\x6a\x77\x3c\x23\xb2\x2c\xe5\xdc\x9b\x58\x6d\xdf\x9c\xf4\xf6\xe7\xdf\x99\xe7\xfd\xf9\xce\x0e\x0a\xe8\xe7\x65\xc6\x45\x0e\xa7\xea\xe1\x7c\x34\x98\x0d\xe7\x23\xb2\xea\x07\xba\x75\xe5\xf7\xa2\x0f\xff\xd2\x50\xbe\xc2\xb1\x95\x07\x26\xbe\xf2\x65\x86\xf0\xaa\x90\xec\x44\xf2\x34\x49\x67\x53\x47\x8c\x0f\xb0\x66\xba\x5d\xef\x9b\xf3\x8d\x50\xa6\xf8\xdd\x6e\x30\x54\xaa\x2a\xf3\x66\x24\x1b\xf1\x54\x44\x22\x53\x1e\x70\x8a\x63\xe8\x8f\x68\xbd\x0e\x75\xfc\xbe\x63\xb9\x60\xbc\x9f\x70\xf5\xe2\x24\x53\x75\x19\x5c\x7e\x15\x8d\xc7\x49\x16\x4f\xa9\x41\xe6\x23\xca\x3c\x49\xeb\x04\x43\x85\xcf\x92\x35\xbd\xed\xd0\x96\x18\x4d\x4f\x45\x87\x0f\xc2\x14\x26\x85\x08\xc9\xe8\xac\xea\x18\x70\x2b\xe0\xfd\x70\xe4\x7f\x00\xf0\x16\x3a\x22\x69\x81\xc3\x66\x70\x2d\xbd\xbd\x48\xd6\xa8\xc5\x6e\x22\x30\x5c\x62\x36\x25\x7f\xad\x24\xbc\x50\x16\x8a\xd6\x6b\xef\x71\xc7\xd1\x7a\x81\x45\x34\xa6\xf1\xdd\x58\xee\x9d\x84\x61\x37\x16\xe4\x49\xcd\x4d\x9f\x62\x4d\x05\x7d\x81\x39\xbd\x65\xb9\xe0\x8f\x7d\xa6\x0d\xad\xa9\x37\x7a\x91\xca\x80\x85\xff\x4e\xe7\x2d\x42\x84\x69\x18\xfc\x3b\x95\x53\xf2\xed\x2e\x04\x8f\x48\xe3\x24\xff\xf6\x86\x67\x0f\x39\xe5\xbb\x34\xbd\x67\x3c\x4b\x25\xf7\x0f\xf0\xd0\x12\xe4\xa8\x74\x55\x17\xac\x72\xba\x25\x99\xe0\x44\x04\x1d\x2a\x3b\x7e\x74\xfe\x9e\x50\xc9\x95\x19\xa7\xb3\xec\x33\xfc\x3e\x9c\xf3\x6c\x21\xcf\x5c\xab\x9c\xf2\x83\x5b\x9a\x4a\x76\x35\x67\xb9\xc8\x80\x99\x18\x6d\x31\xa1\xd1\x83\x66\xde\x40\x09\x4a\xa1\x41\x6a\x1a\xd2\x9c\x26\x33\x0b\xfa\xac\x1e\xe4\xdf\x48\x91\x03\x21\x9a\x2e\x9a\xc9\xf9\x67\x4d\xea\x90\xc3\x8b\xce\x4f\x08\x31\x9f\x6a\x15\x1a\x79\xd6\x56\xea\x5e\x40\x31\xe6\x91\xf8\x5f\x6a\xa5\x98\x6e\xda\x52\xdc\x0b\x28\xc5\x0e\x83\xff\xa5\x56\x8a\x1e\x36\x5b\x88\x7d\x86\x32\xcc\xa0\x7a\xef\x6b\x25\xa4\xf1\x3d\xbb\x8d\x45\xc6\x6d\x19\xde\x1b\x28\xc5\x3e\x93\xd2\xb7\x9a\x20\x62\xbf\xb9\x89\x75\x44\x20\x3a\x1a\xa6\x67\x20\xcb\x04\xff\xc1\x8e\x9d\x60\xde\xd1\x68\x33\x83\x52\xd7\x4d\x2a\x3b\x14\xa9\x52\xd6\x9b\x74\xba\x53\x26\x99\xe9\x2d\x83\x54\x99\x49\xd5\xd0\xac\x7e\x70\xfa\x98\x7e\xde\x0a\x41\x74\xce\xa6\x14\x49\x6a\x75\xd4\x98\x75\xd4\x36\xb4\xbd\x2d\x65\x2b\xb3\x30\x79\x34\x01\xc2\x55\x80\x89\xd9\x92\xf2\x18\x75\x3c\x7a\x8e\x21\x57\xae\x72\x35\xd1\xda\x49\x9a\x8b\x38\x49\x34\xee\x5a\xc7\x5f\x16\x79\xd1\xb2\xfc\x24\x49\x66\x09\xd5\xfc\xc0\x5b\x78\xd8\x24\x9e\xd2\x9b\xd5\xad\xff\xb8\xe4\x74\x12\x0b\x3a\xdd\x9d\xd1\x58\xac\x38\xcd\x2b\x27\x6e\x70\xd8\x2d\x2f\x54\xc3\xad\xbc\x85\x96\x76\x78\x74\x7a\xfe\xf6\xed\xf1\x25\xdc\x66\x3c\x25\xd9\x6d\xed\x5e\xd8\x48\x41\x94\xe8\x66\xa2\x28\xc9\x6e\xf5\x2e\x43\xbd\x20\x43\x05\x7e\x88\x79\x0d\x5d\xa8\x29\xbf\x4c\xd7\x58\x80\x32\x0a\x7f\x41\x09\x90\xb0\xb1\x08\x96\xce\xb2\x97\x94\x20\xd3\x35\x16\x00\x43\x5d\x2b\x01\x5b\x7d\x91\x2e\x21\x82\x74\x83\x50\xb8\x22\xe1\x8d\xd9\x7e\xfd\xe8\x4b\x2f\xaa\x37\xce\x73\x5a\xbe\xfc\x6f\x6b\xba\x4a\xd9\x54\x88\x16\x13\x19\x49\xbd\xf9\x66\x1b\xc8\x4e\xc4\x4c\x9e\xfd\x9b\x48\xce\x4b\x08\x9a\xd0\xc6\x2f\x2b\xc1\x92\x76\x32\x5d\x66\xc9\xe3\x8c\x25\x49\x9d\x38\x95\x76\xab\x42\xa0\x4b\xce\xee\x63\xc1\xfe\xa0\x4d\xa1\xe5\x86\xbd\x11\x4e\xc9\xe3\x50\x8c\x94\xa3\x8c\xd9\x8e\x0d\xb3\x30\xe7\xe2\x7e\x20\xa5\x04\x26\x93\xc7\x84\x0d\xf7\xac\x42\x5c\x66\x25\x61\x0f\x73\x15\x34\x29\x45\x61\xb6\x13\xf4\x83\x9d\x78\x27\xd8\x0d\x76\x6e\x24\xf5\x45\x6f\x0e\x0e\xaf\xcf\x2f\x3f\x8d\xdf\x9c\x5f\x12\x1a\x1d\x9a\xf1\x21\x34\xba\xd4\x7b\xae\xbf\x7a\x32\xd2\x24\xe3\x52\xd7\xe8\x7a\x90\x07\x0f\x02\xd7\x7e\x1c\xee\x8d\x06\xfe\x43\xff\xa9\xe8\x68\x70\x6c\x5d\xa7\x86\xfa\x81\x69\x20\x42\xfd\x57\x26\x52\xea\x83\xb2\xc5\x81\xbe\x4d\x19\xb4\x22\xe6\x8f\x28\x14\xea\x83\x36\xa6\x52\x49\x67\xb1\xdc\xf8\x1e\xdf\xc7\x69\x7c\x4b\xf9\x61\x5b\xc6\x86\x64\xa5\x62\x58\x7e\x44\x73\xc1\xb3\x47\x3a\x25\xdb\x7b\x95\x77\x2c\xbd\x25\xdb\x7b\x85\x8e\x93\xa9\x7c\x78\x7d\x48\x9e\x34\x4a\xb2\xec\x6e\xb5\x6c\xb6\x31\x5f\x69\x1b\x63\x7f\x04\xa2\x34\xe3\x0b\x00\x18\x02\x38\x67\x54\x60\x29\xbc\x41\x65\xfe\x1c\xcc\x0d\x00\x78\xbd\x39\x3d\x99\x65\xc6\x52\x28\xe4\xa8\x9e\x75\xda\x98\x55\xf6\x0e\x72\x02\xe2\x56\xd9\xfc\xa7\x92\x70\xbd\x0e\xbd\x0b\x9d\xd0\x34\xc5\xd8\x63\x37\xa2\xd9\x69\x2b\x2a\x49\xd3\x36\x66\x62\xc3\xc8\xcb\x43\xbf\x94\x98\x6d\x9a\x89\x7d\x6b\x46\xa1\xdb\xb5\x3f\x43\x84\x8a\xe7\x86\x10\xc1\x08\x02\x1d\x9d\xa4\x52\x52\x90\xfb\x6e\x3b\xe7\x51\x18\x91\xe7\x3f\x9f\x1d\x5f\x8e\x3c\xb0\x38\x4c\x61\x50\x55\x83\xdf\x64\xbc\x61\xd9\x7e\xf5\x0a\xc0\xfa\xf4\xd0\xd8\x7c\x05\xfe\xa6\xe3\xe4\x80\x49\xaf\x45\x2c\x75\x47\x10\x9b\x53\xd9\x32\x01\xf4\xca\x29\xd0\x9d\x8a\x15\x62\x38\x88\x05\xf7\xa6\x92\x05\x14\x21\xf2\x61\x76\x3c\xc2\x54\x31\x13\x5d\xb1\xb7\x54\xa3\x77\x84\x02\x07\x39\x4b\x6f\x13\x2a\xc0\x6d\xc4\x66\xcf\x5f\x9c\x9d\x49\xa1\x21\x15\x2c\x16\xd4\x2f\x60\xe5\x13\x4b\x6d\x28\x5f\x35\x0e\xe5\x2b\x7f\x28\x5f\xc1\x50\xa6\x04\xc0\x0f\xb6\xb9\x1b\x31\x5e\x1a\xb1\xd4\x6f\x58\x7d\xb8\x84\x83\x50\x95\x9d\xe0\x91\xed\xad\x0b\xd1\xa6\x48\x32\x2d\x9f\xd5\xed\x05\x04\x2b\xaa\x06\xc1\x15\x94\xa3\x44\xcb\x2c\x2e\xbb\x77\x7f\x21\x5f\x36\x1f\xf0\x24\x2f\xb7\x23\xd7\xf1\x06\xda\x6b\xa3\x76\x81\x4e\xbb\x5d\x35\x9d\xdd\xae\x9a\x97\x42\x07\x0f\xf4\x00\x99\xf5\xb2\x22\xcc\x1c\x2f\xd1\x0b\xab\xc6\xcc\xaf\xd1\x6f\x48\x0a\x1e\xc5\x2a\x4e\xb8\xaa\xbf\xb5\x01\x5f\x5c\x6b\x7b\x87\xbd\xce\x6e\x97\x2b\x2b\x2b\x4a\xbe\xa8\x3b\xaa\x1f\xa9\xc6\xd9\x65\xa6\x8a\xf5\x5a\xd5\xd0\xd4\x9f\x24\xce\xf3\x8e\xd2\xc5\x34\x2a\x54\x54\x87\xb7\x34\x0b\x09\xa0\x88\x54\xa9\x7a\xdd\x2a\x48\x2a\x81\x97\x5b\x58\x64\x89\xf2\x6a\xf2\x81\x47\xe0\xda\xe7\x2d\x14\xa8\x42\xac\x4f\x66\x5b\x97\x6d\x5d\x84\x14\x50\x0a\x85\x83\xa2\x6b\xa9\x98\x64\x38\xf3\x9a\x3b\xa9\x0f\xac\xe6\xb0\x79\xa7\xe2\x22\xec\x7f\x93\x4c\xd6\x6a\x92\x18\xe9\xed\xb3\xef\x84\x0d\x1d\xbb\xb3\xa3\x6f\x74\x08\xc0\x1d\xe6\x24\x03\x33\x56\xca\xc5\x23\x4e\x48\xa6\xc0\x45\x67\x8c\x72\x3c\x91\x4f\xb0\xca\x3b\xe9\x30\x1f\x91\xc9\x40\x32\x91\x04\x3f\xa9\x97\xfd\x49\x81\xfa\xf0\x06\x49\x41\x28\x3f\x7a\x4c\xe3\x05\x9b\x48\xae\xe9\x9e\xc8\x76\x0c\x29\xfc\x49\x98\x95\xf7\x2d\x33\x98\x92\xb7\x78\x92\x97\x67\x7f\xd0\xa2\x91\x71\x1d\x36\xd7\x32\xb6\xda\xfe\xf6\x9e\x8d\x5a\xec\x30\xbd\xba\xdd\x89\x8e\x3f\xe6\x05\x8f\x52\x2f\x21\x74\x72\x0a\x64\x27\xd9\xe9\xf5\xe3\x92\xda\xdd\x2c\x0f\x53\xa4\x5e\x7b\xaf\x24\x91\xda\x1e\xcd\xe5\x2e\x65\x06\x5c\x18\x16\x86\xb9\xd1\x30\xdd\xd1\x47\x99\x03\xa7\xa4\xb7\x9f\xba\xb8\x9f\xa9\x99\x0b\x46\xc4\x90\x0f\xd3\xd1\xa8\xc3\xdc\x2e\xcc\xdc\x2e\xec\x0d\xde\x54\xdb\x9e\x37\x4b\x5b\x4a\xac\x6a\xa4\xae\x96\xc4\x85\x2f\x9b\xaa\x73\xec\x12\x88\xf6\x67\x1a\xdf\xbd\x8f\x97\x9d\xb2\x24\xbb\x84\x14\x8b\x36\x69\xd5\x70\x62\x25\x4a\x3a\x99\xd7\x17\x3a\xa9\xde\xf1\x55\x1a\xb9\xac\x89\xd0\x02\xe5\x2a\x49\x40\x31\xaf\x3f\xda\x7d\x7a\x0a\x6f\x53\xac\xaf\xf2\xa7\xf4\x5a\xeb\x0c\x2d\x1c\x38\x48\x50\x6e\x01\xe8\xd7\x4b\x17\x98\x42\x21\x03\x1b\x9a\xab\xc9\x91\xdc\xaa\x21\x1b\x6e\x39\xec\x52\xab\xd5\x6f\x90\x1c\x4b\x6d\x2a\x77\xde\x31\x8b\x45\x7c\x67\x13\x85\xae\xf7\xe5\xbe\x6b\x77\xbb\x52\x89\x05\xe6\x9a\x9f\xd7\xc4\x22\x2d\xa0\x78\x7c\xc1\xdf\xf5\x5c\x7c\xed\xb0\xdc\xa8\xa6\xf1\x95\x67\x9d\xd4\x2f\x89\x93\x0c\xa7\xa5\x85\x5d\x1d\xe6\x4c\x8d\x68\x4c\x78\x89\xfd\x51\xf0\x1f\x0f\x7b\x98\xc9\xf3\x25\xbb\x4d\x11\xe0\x73\x61\xd9\xb9\x6d\xd7\x71\xdd\x27\x54\x63\xea\x6f\x62\x96\xd0\xe9\x96\xc8\x0c\x53\x8f\xd3\x2d\xb5\xa5\x4c\xe8\x56\x36\xdb\xfa\x5b\xb0\xd3\xd0\xfe\x9d\xe0\x6f\xd1\xd6\xfb\x2c\x17\x5b\x09\xbb\xa3\xc9\x23\xe4\x5a\x28\xde\x96\x3c\xea\x0b\x93\xe9\x16\x54\xbd\x95\x71\x55\xa8\x02\xd2\xd5\x7a\x78\x75\x6e\x8d\x02\xd4\x69\xb8\x70\xf1\xda\x3d\x66\x29\x13\x6f\xd4\x12\x1b\xb4\xbc\x57\xb2\x7a\xbf\x34\x28\x4e\xc4\x02\x48\x84\xea\x00\xc5\x08\xe1\xb0\x87\x95\x79\x96\x5c\x22\x28\x8c\xbd\x85\xa3\x2d\x4f\x73\x52\x1b\xc1\xd0\xa9\xec\x15\xc5\x6b\x72\xc7\xb9\x92\x42\xf1\x3d\xf9\xf6\x3f\x87\xff\xd9\x1f\xed\xf4\xe1\xef\x37\xdf\xe2\xdb\x96\x15\x6c\x0c\xf8\xeb\x77\xbc\x8d\x12\x62\xcf\x97\x10\x7b\xee\xb8\x39\x33\x3a\x70\x6a\x7f\xfa\x87\x4c\xbd\x6d\x2a\xee\xaf\x7e\x96\x3f\xc3\x8a\x89\x15\x91\xd5\xf8\x16\x2d\x27\x28\x1d\x26\xc7\xa2\xc4\xb9\xdb\x38\xa4\x4a\xcb\x5e\x98\x2e\x71\x02\xac\x62\xa5\x4d\xd7\x09\x2a\xa9\x25\xc9\x4d\x3c\x57\xa7\xd5\x5d\x7f\x41\xca\x59\xcc\x92\x2b\x2a\x80\x2f\x5f\x51\xcd\x2d\xc7\x3a\xe0\xc9\xe6\xac\x72\x3c\xce\x37\x26\x2c\x6c\x30\xbe\x2a\x53\x14\x1e\x0b\x6f\xba\xbe\xa0\x0f\x5b\x99\x8d\xb5\x0b\x28\xf2\x72\x5a\x4a\x89\xff\xa2\x33\x47\x69\xb5\xcb\x53\x5b\x69\x5c\x22\x75\x9a\x95\xdb\x74\x9d\x7e\x86\xe9\x88\x54\x46\x4c\xbe\xe2\xb2\xc1\xab\xb4\xa1\xc9\xe6\xbc\xd9\x56\xe9\x8b\xa8\xc1\x8b\xa5\x59\x69\x8e\x18\x95\x3e\x96\xa8\xa0\xf6\xd1\x34\x58\x8c\x70\x63\x8f\x85\x1e\x77\x28\xa2\x05\xad\xba\x59\x7a\x12\x25\x8e\x0d\x97\x68\x5a\xd8\x5b\xaf\xbd\x13\x9d\x94\xfa\xe1\x4c\xd7\x76\x94\xd3\xc7\x2a\x6d\x13\x4f\x68\xa5\x43\x95\x53\x9c\x03\x7e\x51\xde\x59\xb6\x3f\xf3\x58\x4a\x59\xa6\x34\xc7\x16\xc0\x98\xdd\x3d\x5a\x81\x3b\x95\xdc\xd0\x1e\xee\x6c\xaa\xf2\xbc\xfb\x49\x06\x5e\x65\xf1\x54\x99\xa2\xd7\xda\x4a\x98\x85\xdb\xf3\xf5\x1e\x15\x8d\x51\x49\xf4\xd6\x57\x20\x25\xae\x07\x02\xb9\xd1\x1d\x98\x97\xc8\xb4\x5d\x2b\x5b\xb9\xa7\x6c\x75\x60\xb2\xe0\x13\x43\xf3\x09\x67\x37\x4d\xfe\xd8\x5b\x7e\x75\x6e\x8c\x4a\x8f\x5a\x23\x76\x44\x95\x63\x0a\xcb\xd2\xc1\x33\xdf\x43\xaa\xa2\xac\x54\xfb\x31\x28\x3d\xd9\x76\xc9\xe4\x54\x36\xd4\x8e\xcb\x1b\x23\xb8\x7d\x65\x8b\x6d\x41\x83\x96\xf7\x2f\x6c\x61\xad\x41\xf5\xa6\xb6\xda\xed\x57\x58\x37\xc4\xbd\x0d\x5b\xbe\x54\x78\x83\x57\x1b\xac\x47\x5f\xd0\x6b\x56\x4c\xbe\x64\x50\xfc\x52\x06\xed\x9f\x54\x88\xef\x17\x0c\x4e\x3d\x13\xb5\x42\x6f\x08\xed\x2e\xdf\x3b\x9b\x28\xdc\x5a\x3b\xf9\x51\x4a\x4a\x7e\x4f\x8d\xc6\xc0\xdc\xd3\x75\xbb\x4e\x8d\x56\x59\x36\xe6\x83\x3c\x01\x41\x3a\x4f\x63\xa4\x95\xe0\xad\x4a\x9d\xea\x29\x8e\xba\x43\xb7\x3d\x89\x72\x6c\x0b\xec\xa7\x05\x6a\x5d\xbb\xca\x28\x4b\x98\x50\x61\x6f\x32\x0e\x98\x9f\x55\x7b\x8f\xca\xbe\x09\x13\x2e\xb3\x59\x3d\x5b\x43\xce\xd2\xae\x51\xc9\xdd\xa9\x9d\x23\x5a\xf9\x86\x28\xbf\xa9\x57\x19\xc2\x09\xc1\xeb\x44\xe3\x66\xdb\xb6\x77\x99\xfd\x84\xd7\x7a\xf4\x92\x0d\xd0\x28\x52\xbd\x6d\xa9\xd6\x35\xde\xda\x35\xde\xda\x35\xe8\x13\x2f\xb5\xa7\xbd\x57\xb6\x72\x3a\xaa\x6e\x61\xee\xf7\x50\x58\xdf\x4a\xf9\xbb\x63\xd4\x3d\x4d\xea\x05\xd3\xb0\xd2\xa4\xa5\x23\x54\x29\x6f\x20\xff\xbc\x64\x9d\x39\x6d\x2c\x2c\x32\xe3\xa1\xa0\x90\x1e\x1a\x54\xe4\xc6\x1e\xb0\xdc\xb8\xfd\xb0\x49\x9e\xf5\xb9\x52\xed\x0b\x19\x8e\x90\x06\x82\x7f\x32\x2a\x9d\xbe\xc0\x56\xa1\x03\x06\xcd\x58\xb8\x03\x5c\x9b\x68\x50\x9e\x77\xa5\x49\xdd\x55\xfe\x02\x7e\x50\xb1\x52\x80\xdb\x52\x6b\xb4\x96\xc5\xdc\xa7\x55\xe9\xc8\xf4\xcd\xc9\xdf\x43\xe6\xfa\x55\x7a\xfb\x6c\x9f\x52\xd5\xa7\xbb\x34\x7b\x48\x9b\x56\xa5\xd5\xca\xe0\x14\x67\x6d\xa2\x72\x5c\x56\xd4\xd4\x84\x36\x84\x73\xd2\xdb\xcf\xbf\x33\xde\x74\xfb\xb9\xd1\xdc\xac\x48\x3c\xcc\x47\x9d\x55\x79\xf2\x88\x3a\x03\x67\xc3\xd5\x88\x6c\xf7\x50\xd1\xc0\xf5\x37\xac\x79\xbf\x2f\xb0\x34\x5e\xb2\x5b\xf8\x99\x40\xfe\x68\xff\x0c\x65\x56\x0f\x9f\x02\x67\x9a\x39\x56\x58\x7d\xd3\x86\x79\x6f\xa2\x55\xe8\x35\xeb\x1d\xb8\xda\x38\x22\xf3\x29\xd5\x44\x35\xa9\x0e\x46\x69\xa1\xfb\x0b\xca\x53\xbc\x51\x23\x7f\x69\xb1\xd5\x18\x21\x00\x04\x1a\xef\x0b\x63\x81\xca\x1d\x64\x97\x61\x75\x65\xad\xde\x46\xe6\x7d\xf2\xa7\x9a\x5b\x51\x1f\x7e\x6d\x93\x6b\x32\xf7\xd7\x0b\x13\xb5\xa2\x06\x6d\xd7\x27\xb4\x7e\xc2\x81\x4b\x70\x31\xea\x64\xeb\x75\xa8\x7e\x36\x9d\x79\x90\x36\x82\x49\xd7\x6b\x8e\xf3\xba\xb5\xa5\x01\x5c\xd8\xca\xb5\x3d\x26\xdd\xd0\xbc\x72\x58\x89\x2d\x30\xce\x5c\xb5\xcb\xe4\x6d\xe2\x86\x27\x69\xbc\x48\x46\x6a\xbe\xdf\xd3\xe0\xe5\x70\xa1\xe7\x5d\xdf\xdf\x42\x3f\x1e\xdb\x98\xca\x0d\x09\x83\x60\x07\x7c\x17\x78\x9c\x4e\xb3\x45\x88\x76\x5c\x64\x2a\x07\xc3\x1d\x44\x10\x11\xbc\xcd\xb2\xa2\xc5\x8e\xee\x0b\xec\x77\x2a\xc6\x11\x56\xdb\xc3\xbd\x15\x0d\xb0\x2b\x15\x03\xb8\x01\x35\x9b\x17\x80\x3c\x55\x49\xd0\xe6\xcd\xf4\x89\xa2\xc0\x80\xdc\x52\x23\x55\xf4\x64\x52\x10\x2a\xd3\xdc\x52\x71\x7c\xf6\xb1\x09\x34\x40\x7e\x95\x9f\xa8\x81\xed\x27\x54\x43\x8d\x94\x2c\x8d\x30\x23\x3c\x0c\xd3\xba\x65\x9f\x4a\xdb\xed\x5a\xc8\x6c\x77\x52\x73\x2e\x26\xa9\xee\x15\x5a\xaf\x79\x3d\xc4\x94\xb3\x07\x6c\xfe\x6e\x4c\x5d\xd5\x7f\xb4\x5e\x37\x19\x6e\x79\x06\xcc\xdd\xae\xf7\xb0\x5e\xa7\xf4\x61\xcb\x18\x9c\x87\x81\xb7\x81\x06\x08\x88\x4b\xf7\x96\x55\x8d\x42\xfc\xf5\xee\x31\x8f\x27\xb6\x00\x72\xe8\x53\xac\x09\xa3\x4f\xb1\x1a\xeb\x3e\x2d\xfa\xf6\xb3\x88\xf4\xaf\xf5\xda\xa5\x04\x06\x63\x5e\xea\x4c\x42\xcf\xd4\x7a\x4d\x8b\x22\x64\x98\x29\x9b\x5b\xd9\x34\x33\x25\xc6\xd8\xed\xe9\xf8\xec\xe0\xf5\xe9\xf1\xf8\xfc\xe2\xfa\xe4\xfc\xec\xe0\x74\xfc\xe6\xf8\xe0\xfa\xc3\xe5\xf1\x55\x7f\x7b\x0f\x1f\xff\x72\x7d\x7c\x76\x34\xbe\xb8\x3c\xbf\x3e\xbf\xfe\x74\x71\x7c\xd5\x7f\x52\xf1\x9c\xb6\x7b\xd8\xf4\x5f\xfe\x56\xc7\x8f\xfe\x76\xaf\xc0\xa7\xe7\x6f\xc7\x57\xd7\x07\x87\x3f\x5e\x5f\x1e\x1c\x1e\x8f\xcf\xcf\xc6\x47\xc7\x17\x97\xc7\x87\x07\xb2\x78\x99\x56\x26\xf8\x78\x7c\x79\xa5\x1f\x2f\x0f\x4e\xae\xea\xc9\xf6\xf0\xd5\xf5\xe5\x87\x43\xd9\x10\xa8\xfe\xcd\xc9\xe9\xb1\x7c\x3b\x3e\xb8\xb8\x38\x3d\x51\xa9\xc6\xd7\xc7\xef\x2f\x4e\x0f\xae\x8f\xc7\x3f\x5f\x1e\x5c\x5c\x1c\x5f\xca\xe2\xdc\xcb\xf3\xb3\xd3\x4f\xe3\xb7\xa7\x27\xef\xdf\x1f\x5f\x8e\x0f\xcf\xdf\x5f\x9c\x9f\x1d\x9f\x5d\x43\xb7\xc6\x3f\xfc\xf4\xe1\xf8\xf2\xd3\xf8\xe4\xec\xfa\xf8\xed\xa5\x6d\xd9\xf8\xe8\xf8\xcd\xc1\x87\xd3\xeb\xf1\xc1\xd5\xa7\xb3\xc3\xf1\xf9\xeb\xab\xe3\x4b\xd9\x52\xc8\x72\x79\x7c\x79\x7c\x76\x74\x7c\x39\x3e\x3d\x3f\xbf\x18\x9f\x9e\xbc\x3f\xb9\xee\xef\xd1\xbf\xe3\xe3\xf7\xaf\xe1\xe5\xc1\xd1\xf8\xdd\xf9\xf9\x8f\x57\xfd\xa7\x02\xdb\x21\x7c\x2a\x8a\x8e\x5a\x0b\x31\xae\xf8\x00\xd7\x48\x92\x5a\x91\xdb\x93\x77\x74\xe4\x2e\xd0\xb2\xcc\xe3\xfc\xfc\x21\xbd\xd0\xe2\x13\x20\x41\x06\xb5\x09\x0a\xd4\xe6\x14\x54\x9b\x05\xef\x8d\x68\x18\x0f\xf9\xa8\x03\x7e\x64\xe9\x40\xfe\x56\xd8\x2b\x74\xc8\x47\x7d\xc0\xba\x4e\xbb\xdd\x50\xbd\x07\xdb\x95\x21\x1f\x29\xf5\xa2\xdc\x56\x6a\x35\x56\xae\x4c\x9b\xba\x66\x03\xbe\x11\x86\xe2\x7a\x09\x91\x3e\x63\xab\x5b\x64\xfd\x84\x45\xf4\xe6\xc3\xd9\x21\x4c\xb4\x4d\x3a\x86\xbc\x92\x74\xae\x64\x13\x1b\x8a\xb2\x6e\x20\xba\x30\xf3\x8c\x70\x53\x6a\xe5\x70\xa2\x93\xc2\x83\x72\x00\x56\xcb\x56\xbd\xef\x6c\x68\x71\xf6\x67\x5b\x99\x6d\x6a\x57\x56\xa8\x9b\x02\x1a\x55\x67\xb3\xd3\x34\xca\xb9\xb3\x86\x46\x86\x7e\x56\x0e\x38\xba\x4a\x3f\x2b\x64\xa3\x3f\x0d\x57\xa3\x4e\x39\xe6\x18\xf8\xf0\xc7\xb5\x7a\xa5\x24\x9c\xd4\x22\xad\xd9\xfd\xa7\xe1\xbe\x85\x16\x48\xd1\xce\x84\xd0\xc8\xac\x8b\xc6\xe6\x4f\x6c\xf3\x27\xb6\xf9\x33\xd9\xfc\x09\x9a\x54\xdb\x3e\x53\xcd\x33\xe5\x0d\x67\x9a\x54\x27\xc3\xd9\x08\x49\x8e\xa7\xf8\xdd\xf1\xd9\xc7\xf5\x9a\xc9\xf5\xd7\xbe\x2f\x73\x9e\xf1\x5d\x08\x6e\xcb\xd2\xdb\xba\xbd\xed\x06\x43\x77\x85\x1e\x0a\x1b\xe1\xb9\xc6\x56\x6b\x70\x5b\xd6\xdb\x69\x2d\x05\x45\x4f\xc2\x6e\xa4\x47\x2c\x5f\xc6\x62\x32\x3f\xd7\xd8\x7d\x0d\x05\x71\x5d\x50\x7b\x52\x39\x0d\xaa\xc4\x2c\x85\x2b\xb8\x6b\x15\x50\xd9\xdb\x73\x39\x4e\xc9\xd3\x2d\x15\x5b\x1a\x0c\xce\x6f\xa7\xe4\x54\xe5\x8c\x69\xeb\xa0\x99\x80\x54\xbb\xf9\x6a\x29\xc7\x69\x83\x9d\xf2\xc6\x6c\x09\xbb\xf9\x76\x1a\x8b\x78\x1c\x4f\xe3\xa5\x68\xb1\x28\x6d\xce\x66\xef\x34\xc6\x60\x62\x6a\x4b\x78\xc6\xe8\x59\x4b\xbc\x6a\xaf\xb7\xf4\x44\x71\x70\x14\x8b\xf8\xc0\xb4\xe2\x89\xa6\xab\x05\xe5\xf1\x4d\x02\x80\xb5\xa5\x70\xfe\x6e\xc8\x8c\x3d\x6d\x51\x20\xdc\x5a\xae\xbd\x96\x3f\x92\xcd\xfc\xb2\x1a\xb8\x57\xc3\xcb\xe7\x62\xd3\xe8\x34\xcd\x90\xb6\xe7\x6f\x1a\x7a\xbe\x02\xa8\xc0\xaf\xb3\x24\x27\x5c\x8b\xa2\xd6\xb9\xd3\x1c\x14\x54\x30\xf0\x49\x9c\x1e\xc6\x22\x4e\xb2\xdb\xe3\x54\x70\x46\xf3\xd7\x8f\x2d\x31\x7e\x82\x45\x36\xa5\x49\xa0\xae\x5f\x03\x41\x17\xcb\x24\x16\x14\x9e\x0b\x3c\x79\xae\x0c\xd5\x18\x10\xef\x0f\x50\xc8\xa3\x33\x1b\xf6\xfd\xec\xe0\xfd\xf1\xd5\xc5\xc1\xe1\xf1\x15\xc2\xcc\xa6\x80\x1b\x74\x17\xe5\x1c\xee\x72\xe1\x9e\x96\xcd\x1e\x11\x84\xfc\xfc\x26\xf0\xa2\x67\xce\x32\x7e\x5c\x82\xe8\xf0\xb6\xef\xb4\x7d\xfb\x4e\x51\xb7\x9b\x39\x0c\x7f\xed\x00\x37\x4c\x47\x9d\x00\x2a\x0b\x08\x51\x2d\x02\x7d\xd6\x0c\x85\x31\xea\x76\x99\xd2\xa1\x40\x93\xa6\x71\x3e\xa7\x9c\xfd\x41\x11\xc4\xdb\x55\xa7\x90\x4c\x9e\x41\x14\x72\x33\x2b\x0a\xe4\xcd\xcc\x17\x2c\xe6\xfa\xaa\xfc\x22\x63\x70\xbe\x4a\x93\x0c\xfc\xfe\xeb\x49\x17\x54\xc4\xc9\x9f\x22\x3d\x0c\x18\x38\x2f\x21\xc0\x98\x64\x55\x02\x64\x29\x2b\xad\x33\xa5\x29\xc8\x57\x4b\x5a\x42\x28\x72\x57\x3a\xe6\x26\x32\xa1\x71\x4e\xdf\x43\xe4\x24\xb8\x80\xcd\x80\x50\x14\x38\x63\x6d\x75\x5b\xf7\x72\x21\x38\xbb\x59\x09\x7a\xca\x16\x4c\xf4\xff\x6e\xe2\xe6\xbd\x97\xd4\x2c\xa9\x50\xae\xfc\x72\xd9\x7d\x5b\xb6\x64\x09\x0a\xe9\xba\x21\x16\x97\xd7\x82\x07\xb9\x19\x40\x89\x00\xc0\xd6\x1a\x23\xdb\xdc\xbf\xde\x52\xe1\x52\x87\x9a\xee\x55\x61\x1d\x1a\xa6\x95\xa8\xa5\xce\xc4\xee\x0e\x8c\x5c\x32\xa2\x80\x9a\x6d\x11\x61\x8a\x29\x9c\xce\xed\x8a\xd0\x34\xca\xa3\xec\x26\xa7\xfc\x9e\xba\xa4\x54\x07\xa9\x45\x08\x67\x85\x55\x34\xf8\x50\x2f\x8d\x8b\xc9\x9c\x6d\x43\xc9\x03\x79\x65\x32\x34\xd4\x97\x06\x2e\x8f\x51\x51\x42\x84\xae\xa4\x95\x0d\xb3\x29\x01\xf8\x4b\x36\xe8\x3a\x3b\x94\x7d\xab\x82\xf4\xd4\xfc\x9c\xac\xad\x0e\x2c\xbf\x5b\x6b\xdd\x01\x46\x1a\x9e\xd1\x73\xa8\xd8\x55\x3f\xd8\xa1\xa8\x43\xa5\x34\xce\x15\xff\x28\x2c\x34\xb7\x9a\xb5\x4b\x3a\xc9\xf8\x34\xaf\x7a\xa2\x33\x0f\x69\x58\x4e\xdc\xca\xcd\x10\x4e\xb4\x72\xcb\x6b\x77\x48\x11\x9e\xd8\xb9\xd5\x65\x86\x09\xa6\x9e\xd9\xf2\x0c\xc6\x31\x1c\x52\x2d\xc8\xcf\xc9\xa4\x36\xd1\xc6\xd8\x5e\x4d\x5f\x6e\xa6\x4f\x15\x08\x28\x47\x08\xe7\x30\xf9\xe6\x95\x9c\x8f\x29\x79\x9a\xb2\xe9\x21\x40\x17\xf8\x1d\xe1\x38\xc3\xb1\x63\x84\x09\xe1\xfb\xc9\x77\x7c\x27\xde\x4f\x8c\xce\x75\x22\xbb\x95\x46\x4a\x0c\x3c\x10\x48\x99\x20\xce\x49\xa9\x8e\x09\xea\xb4\x34\x68\x02\x0d\x12\xe1\x70\x3e\x42\x45\xd6\xed\xb2\x90\xe3\x4c\xae\x07\x96\x24\xd5\xe6\x94\xae\x08\x0b\x43\x22\x50\x7d\x3c\x9d\x82\xc4\x7b\xae\x0a\xe7\x28\x9c\xc0\x9a\xc7\x53\x84\x4b\xb4\xb9\x7a\x9e\x36\xa1\x40\x45\x8f\xb5\x32\xa1\xc0\x1a\x41\x56\x89\x17\x8b\x70\xde\xc8\x73\xea\xa4\x2b\xfb\xa9\x5d\x0d\xfe\x34\x47\x7b\xb6\x6b\x05\x9e\x52\x41\x27\x0d\x32\xca\xf6\x9e\x64\x82\xc9\x6a\x61\xaf\xb6\x36\x72\xab\x2a\x4f\x68\x60\x57\xea\xa6\x01\x67\xcd\x94\x1e\xd7\x28\x3d\x2b\x51\x7a\x2e\xc7\x20\x1c\x42\xa2\x32\xa3\x92\xe9\x34\xf9\xaf\x5a\x88\x56\x28\x27\xa4\x30\xfd\xbe\xb7\x5e\xb3\xef\x7b\xf2\x94\x21\xb7\xe0\x7c\x32\xa7\xd3\x55\x42\xcf\xd3\x09\x45\x61\x10\x2b\x85\x70\xa0\x08\x25\x7f\x19\xd1\xed\xb7\x90\x9b\xb2\x0d\xc3\x2b\x54\xbb\x3b\xf5\x86\xaf\x85\xac\x62\xcc\xf0\x0a\x15\x0a\x21\x7f\xd3\x98\xf2\xda\xa8\x51\x67\xc6\xac\xe3\x42\xe3\x49\xb6\x4a\x45\x1f\x6a\xbb\xa5\x02\x85\x1c\x07\xea\x9e\x24\x40\x66\x8a\xfb\xda\xfe\xd0\x9f\x6f\x39\x2b\x6a\x11\xf7\x69\x01\x11\x32\x9a\x76\x23\xeb\x34\xa7\x66\xd7\x35\x28\x0c\x1a\xf7\x50\x2f\xde\x37\xe1\x51\x8b\xa8\xa8\x39\x6d\x80\x06\x32\xc9\x86\xef\xaa\xdd\x63\xc9\xb3\xa1\xa5\xf9\x79\x6a\xa5\x40\xb9\x09\x52\xcb\x62\x69\x35\x6e\xb7\x0d\x59\x03\x1b\x60\x5f\xd4\x28\x12\x46\x0f\xa0\x6f\x4b\xa5\xb4\x1e\x92\xe1\xdc\x20\x20\xcc\x86\xda\x54\x35\xeb\xd0\x19\x0b\xdc\xd2\xcc\x3a\x3c\xaf\x52\xa3\xdb\x4a\xb3\x16\xc9\x96\x7b\x3b\xbc\x6d\x42\x6d\xc5\x8b\x8a\xd4\x2a\xa4\xd4\x2a\x9a\xa4\x56\x6a\xda\x2f\x86\xe9\x08\x19\x33\x74\xb8\x89\xf2\x65\x52\xd4\xe1\x8a\x73\x67\x20\x8e\xf2\x02\x3b\xf2\xdb\x2c\xd1\x58\xf6\xdf\x10\xf4\xe1\xc9\x92\x9a\x6f\xde\x26\xe9\xf1\x63\x9c\xac\x68\x5e\x21\xf4\x43\xef\x13\x5c\x31\x44\x39\x8d\xf9\x64\xfe\x23\x7d\x7c\x90\x0d\xa9\x24\x37\xaf\x55\x52\x35\x85\x8d\xe5\xbe\xf1\x3e\xa9\xc4\x93\x2c\xc9\xaa\xcb\xec\x50\xbe\x83\xcf\x5e\xe7\xfd\x26\xd5\xc7\xe1\xa9\xf0\x92\x9a\xe6\x6c\x1c\xae\xc6\x36\x3d\x53\x30\x34\xac\x81\x55\xa9\x1b\x92\xd2\x46\xdb\x90\xca\x7b\x53\x94\x0f\x19\x71\xdb\x21\xe3\x36\x61\x8b\x45\xf5\x24\x91\x66\x53\xba\xab\x8c\x76\x03\x1c\x40\x9e\xdd\x9b\xf8\x86\x26\x4d\xfe\xa2\x1b\x0f\x1e\xba\xf8\x6f\xb3\xe5\x44\x96\x39\xc9\x16\x4b\x96\xb4\xa8\x13\xcc\xc1\xe2\x05\xce\xab\xde\x49\xc6\xd4\xc0\xe9\x8c\x72\x0a\xb1\x1a\x9f\x3f\xde\x58\xe7\x57\x9b\xdb\xd5\x6d\x5e\xc9\x2a\x1b\xcb\xba\x67\xf4\xa1\xb9\xdb\x8d\xd8\x0c\x26\x1d\x03\x2c\x03\x0b\xdd\xeb\x9d\xb5\x28\xbf\x67\x2d\xed\x6e\x2c\xc9\x1d\xce\x4c\x5b\x1f\x18\xa7\x80\x9b\x1d\x8b\xc6\x62\x3c\xf7\xe1\x80\xe7\xf7\xa5\x81\x93\x93\xdd\x3c\x1f\xd9\x4a\x94\x0e\x81\x2f\x71\x65\xc7\x25\x24\x54\x17\x4d\x1a\x2f\xf0\x3d\xbe\xc5\x8f\xf8\x06\x8f\x55\xe8\x40\x7c\x85\x0f\xda\xae\xce\xce\x43\xf4\x04\xe0\x0f\x5b\x94\x9c\x84\xc3\x40\xd2\x4d\x96\xd2\x54\xf4\x77\x35\x45\x07\x2e\x42\xfc\x79\x13\x70\x52\x81\xa9\x73\xea\xb8\xab\x14\x67\x14\x15\x96\x1e\xfb\x8b\x98\xa5\x5e\x91\x77\xcf\x16\x79\xf8\xa5\x45\x1e\x3e\x5b\xe4\xf5\x97\x16\x79\xfd\x6c\x91\x97\x2d\x45\xf6\xed\x80\xe6\xdf\x36\x8c\xe8\xe5\xb3\x05\x5f\xb4\x15\xbc\xcb\xb3\xcc\x2f\xea\xe2\xd9\xa2\xde\xbf\xb4\xa8\xf7\xcf\x16\x75\xf4\x25\x64\x73\xf4\x6c\x71\x67\x5f\x37\x7a\x67\xcf\x16\xfc\xdb\xd7\x15\xfc\xdb\xb3\x05\x9f\x94\x51\xd6\xd6\x6b\x08\x81\xa8\x61\xae\x11\xc2\x34\xe2\xf1\x03\x11\x98\x82\xb4\x7d\xea\x16\xdc\x9b\x8a\xdd\xf9\x1f\x21\x6c\x64\xa6\x61\xda\xe9\x02\x81\x05\x26\xb5\xaf\xc9\x1b\x4c\xa3\x39\x4d\x96\x94\x93\xdf\x31\x8d\x68\x3e\x89\x97\xf4\xf8\x33\x00\xe2\x95\x0d\xa0\x4a\x27\xf7\x6d\xef\xe4\xce\x66\x21\x5c\x8e\x8b\xec\xdd\xf5\xfb\x53\xe7\xe1\xa9\x9e\x95\x83\xa5\x8a\x67\x4d\xf5\xc7\x20\x00\x17\x59\x6a\xe3\xa8\x6a\x93\x4b\x79\xa6\xb7\xbf\x21\x10\x22\x13\xc6\x90\xc6\x96\xeb\x3c\x04\xad\x66\x4e\xe0\x58\x00\xa4\xc0\x5c\x2c\x92\xab\x78\x46\x49\x2e\x30\x8d\x58\x2e\x1b\x00\xcf\x2b\xf9\x3c\x06\xc7\xf2\x4b\x9a\x4e\x29\xa7\x3c\xf7\xe7\xe2\xad\x71\xff\x23\x3d\x59\x0e\x87\x34\x57\x54\x88\xc4\x47\xa3\x46\x4f\xaa\x1f\xe4\x1b\xd1\xed\x86\xdf\x08\x72\x6c\xb6\x67\xf9\x9f\xf2\x10\xa4\xcd\x15\x40\x01\xaf\x38\xa7\xa9\xb8\x5c\xa5\xa7\x59\xb6\x44\x21\x5a\xaf\x57\xd1\x4d\x3c\xb9\xbb\x59\xf1\x94\xba\x73\x8f\x77\xe4\x01\xcd\xed\x8f\xc2\xd9\x3a\x7f\x23\x4c\xcc\x72\x7d\x97\x71\x6d\x66\xad\x32\x2b\x94\x57\x85\x49\x6f\xbc\xf8\x90\x8e\xf4\x05\x47\x43\x7e\x8f\xd8\x20\x25\x81\x5b\x95\x79\x9c\x37\xd6\x65\x53\xd6\xeb\xab\x34\x31\x6f\xa2\x74\x5e\x69\x47\xd9\xc2\x88\xea\x2b\x96\x9c\x8a\xd5\xf2\x38\xbd\x65\x29\xb5\x96\x24\xa5\x74\xd6\x8d\x22\x0c\xe4\x4e\xde\xdf\xcd\x56\x22\xa1\x22\xc0\x67\x29\x2c\x10\xfb\xd5\x31\x22\x93\xe2\x02\x52\x58\x53\xab\x6a\x01\x4e\x01\x8e\xeb\x99\x2b\x39\xf5\xa6\xdf\xdf\x9d\x66\x8b\x5d\x05\x30\x29\x65\x0a\x83\x4f\x14\x60\x3f\x85\x7e\xb7\xa9\x08\xc1\xa9\xdc\x28\x34\x5e\x92\x92\x2f\x9e\x2d\xcc\xf6\x35\xec\xe1\x07\x87\xe9\x81\xc2\xcb\x10\x21\x7c\x5d\x19\x0f\x5b\x86\x96\x1c\xca\x62\xce\x4c\x6c\x2c\xf1\x5a\x96\x78\x58\x19\xbf\x6a\xa2\x43\x99\x28\x28\xcb\x3c\x7e\x2d\x6a\x03\xac\x0c\x83\x37\xe8\x4e\xbc\xac\x96\x7c\x17\x22\x60\x7f\x65\xcb\xe4\x30\x50\xcc\x2b\xc0\x4f\x9e\x4b\x75\x7f\x7b\xaf\x28\xf7\x5c\xa5\xea\x27\xd9\x24\xc0\x73\x5e\xfe\xe6\xed\x31\x82\x7e\x16\xbb\x33\x46\x93\x69\x80\x3f\xd3\xd6\x64\x93\x39\x9d\xdc\xdd\x64\x9f\x03\xfc\xd0\x9a\x28\x61\xe9\xdd\xae\xc8\x02\x7c\xd9\x9a\x84\xa5\xcb\x95\x1c\x77\xde\x42\xb5\xde\x5e\xa2\x93\x5e\xa6\x6d\x65\xc9\x96\xc7\x9c\xc6\x01\xbe\xa2\xa8\xf3\x18\x1d\x9f\x7d\x8c\x9e\x35\xd8\x58\xaf\x37\xcc\xf7\xb9\x9c\xca\x1b\xb5\xb0\x61\x49\x1e\xb8\x38\x2f\x2d\xeb\xb2\x89\xb4\x1b\x49\x2d\x50\x31\x10\xce\x97\x54\xdb\x8f\x96\x09\xbc\x69\x31\x54\x68\x86\x6b\x2e\x1e\x00\xb5\xf9\xd9\x9b\x2a\x6c\x59\x06\xb2\xa6\x9b\x15\x4b\xa6\x40\x40\xca\x54\xaf\x74\x30\xce\x1f\x98\x98\xcc\x43\x1a\xdd\x64\x99\xb1\xc5\x96\xdb\x88\xac\xfb\x7d\x36\xa5\xe8\x69\x12\xe7\x54\x16\xc8\xc0\xb0\x2e\xe8\x6b\x56\xf7\x39\xb2\xef\x5e\xab\x0a\xa2\x1b\x88\xef\x00\x10\x7a\x90\x89\xd3\xf9\xe3\x94\x4b\xb2\x37\x99\xe6\x91\x79\xc7\xb2\xb4\x21\x9b\xde\x6b\x5c\x72\x05\xd4\x5b\x4f\x09\xd1\xa6\xda\x39\x8d\xed\x72\xe0\x75\xeb\x25\x0b\xd5\x1b\x74\x57\x46\x63\xd1\x1b\x39\xc9\x7b\x49\x59\xaf\xdb\xcb\x96\x52\xe3\xb5\xe5\x09\xd5\xdc\x17\x9a\x11\xb8\xf9\x34\x59\xa1\x09\x01\xfe\x55\xb4\x7d\x96\xe7\x27\x11\xe0\x1f\x04\xc2\x0b\x8d\xa2\x26\x05\x97\x97\x93\xed\x6a\x39\x8d\x05\x6d\x27\x5b\xb3\x0d\xa0\x4e\x2b\xbd\xd9\x9d\xa2\x89\xde\x8c\xa3\xa1\xe1\xf1\x1d\x4f\xa0\x9b\x47\x47\xe7\xef\x95\x26\x34\xd7\x68\xc1\xad\x95\x34\xec\x25\x2f\xa9\x0e\x73\x62\xc6\x65\x00\xd5\x5d\x73\x4a\x0f\xbd\x62\xfa\x9f\xa3\xb3\x6c\x4a\x1b\xbe\xf8\x2d\xd5\x60\xc6\x85\x12\xb9\x54\x03\xdf\xc7\x13\x9e\x95\xf7\xfb\xe3\x54\x29\xb1\x14\x8b\x61\x42\x5d\xd9\xbf\xc9\x38\xf9\x8d\x62\x1a\x4d\xe2\x65\x7c\xc3\x12\x26\x58\x59\x98\x68\x71\xbf\x7d\x31\xda\x93\xea\xf4\x76\xaf\x63\x5c\x6a\x9e\x20\xa6\xe4\x29\x9b\xd1\xc3\xc7\x49\x42\x4d\x84\xa3\xbc\x6f\x60\xea\x68\x64\x53\x4c\x4a\x29\x10\x06\x00\x02\x80\x37\xf4\x52\xbb\x97\x08\x2b\x8a\x79\x97\x65\x77\x7d\x51\x68\x56\x7a\x68\xb8\xb6\x46\x1f\x68\x72\xe5\xe8\x70\x72\x10\x59\x4e\x3d\x7e\x7f\x70\x76\xf0\xf6\xf8\x72\x7c\x75\x7d\x79\x72\xf6\x76\x7c\x7a\x7e\xfe\xe3\x87\x8b\x06\xc0\x40\x3a\xf0\xb5\x8e\x56\x8d\xa7\x4c\x16\xbd\xfd\x62\x77\xa1\xaa\x86\x9b\xb4\xa2\x6f\x85\xea\x84\x87\x4f\xfa\xba\xad\xcf\xb1\xd1\x24\xf4\xb7\xf7\x74\xfc\x61\x5b\x40\x50\x60\x61\x64\xbe\x0d\xfd\x31\x34\x36\xe1\x7e\x44\x59\x40\x11\x32\x85\x77\xbb\x5e\xa9\x80\x75\x0e\x91\xdc\x2c\x2c\x96\xf5\x0f\x81\xb1\xd3\x01\xc3\x79\xf3\xd0\x35\xf4\x82\x36\xf4\x42\x47\x00\xe7\x7e\x27\xaa\x05\x7f\x4e\x31\x8d\x4c\xc2\x43\x45\x8b\x55\x52\x74\xea\xbf\x76\xdb\x17\xbb\x66\x5f\x68\x98\xe2\x2f\xf3\x8d\xd6\x2f\x0d\x8b\xf0\x4b\xaa\xa8\xe6\xdd\x58\x17\xcb\xaf\xf4\x76\x06\x7c\xef\x0d\xe3\x39\x44\xcb\x78\x71\x85\x6d\x05\x6c\xac\xb5\x85\xd5\xbc\xb0\xd2\x56\x56\xa5\x38\xe7\x39\x08\xf5\x1f\x19\x7d\x20\x34\x82\xeb\x91\x2b\xa1\xfc\xf1\x4f\xce\x3e\x9e\xff\x78\x4c\x68\xf4\x41\xae\x5d\x59\xc9\xa5\xd1\x4c\x12\x1a\x1d\xdc\xe4\x82\xc7\x93\x3a\xd1\xd3\x68\x4c\x3f\x2f\x29\x67\xa0\x20\x4c\x34\xc3\xa3\xd1\x89\x24\x3f\x15\x40\xdd\x1c\x3d\xe1\x2d\xe5\xc2\x7b\xf6\x7e\xca\x03\xab\x36\x82\xa4\xd1\xb1\xdb\x7f\x08\x8d\xde\xa9\x93\x3a\x8d\x2e\xcf\xcf\xaf\xc7\x97\xc7\x6f\x00\x38\x4f\x37\x84\xd0\xe8\x94\xa5\x77\xfe\xf3\x35\xfd\x2c\x0e\x38\x8d\xf5\x4f\x08\x7a\x2b\xb3\x68\xf9\x55\x16\xe4\xed\xb5\xbe\x85\xc7\x1f\xed\x70\x7b\xda\x21\x60\xa2\xc0\x65\x35\xb2\x88\x2c\x96\x4d\x35\x32\x07\x15\xb2\x46\xf9\xcf\xde\xcb\x3b\xdf\xf9\x36\xa0\x0e\xa1\xee\x39\xdc\xe5\x7f\x25\x04\xb5\xae\xd1\x78\x54\xd0\xc8\x9c\x15\xf0\x13\x28\xab\xfb\xa2\xd0\x98\x62\xf8\x35\x79\x13\x3e\xb1\x69\x3f\x98\xff\x36\xff\xfc\x21\xe3\xab\x00\xdf\x24\xd9\xe4\xae\xff\xb7\xa7\x20\x7f\x5c\xdc\x64\x49\x1e\xf4\x87\x23\x0c\x51\x4c\x20\x82\x82\x7c\x1e\xee\xe1\xe1\xab\xff\x1f\xf6\xb8\x11\x1e\x0e\x5f\xfd\x1d\xf7\xf0\x70\x34\x1a\xc1\xf1\x7c\x84\x67\x71\x92\xd3\xd1\x08\x07\xf3\x38\x3f\xbe\x8f\x93\xa0\x0f\x6f\x8a\xbf\x61\xd9\xdd\xfe\x93\xd2\xb9\x83\x05\x4a\xb0\x8c\x27\x77\xf1\x2d\xcd\xbf\x6d\x55\xda\x83\x3d\x90\x91\xf7\xf3\x6f\xa5\xe0\x13\xcd\x6f\xf2\x40\xa9\xfe\x4b\x73\xf3\x1a\xa6\xe5\x9d\x1c\xa4\x3c\x52\x9d\x40\x61\x70\x79\x2c\xf7\x88\x0f\xd7\xc7\xe3\xeb\x83\xb7\x81\xb2\xfb\xf8\x40\xe2\xe8\x0d\x8f\x17\xf4\x21\xe3\x77\x7f\x89\x95\xce\xf0\xdd\x88\x24\xd1\x11\xe3\xe2\x51\x2e\x87\xeb\xf8\xd6\xa2\x67\x15\x98\x53\x39\x60\x2b\x41\x9b\x6f\xd1\xf6\x41\x23\xf2\x5b\xc6\x52\x14\x36\xa8\x04\x86\xef\x46\x2a\x9a\x5f\x34\x95\xc5\xc3\x8d\x38\x74\x5e\x93\xfa\x07\xfc\x21\x62\xb9\x7a\xd0\x3a\x2c\xb2\xdd\x93\x42\x61\x2c\xb7\x03\xdb\x4f\xb8\x33\x44\xe1\x07\x35\x04\x3f\x3f\x43\xbd\xba\xc5\x96\x7a\x6b\x15\xbc\x84\x6e\x2d\xff\x37\xfd\xf7\x8b\x2e\xaa\xf0\x76\xbf\x57\xf4\x73\x3f\x4b\xb9\xc7\x7e\xfd\xe8\xbe\x42\xd7\xb4\xb1\xb0\x5c\x04\x03\xe5\xd3\xab\xc4\x1c\x27\x65\xa8\xeb\xf6\xb7\x15\x7a\xf8\x70\x71\x74\x70\x7d\x1c\x20\xfc\xa9\xf2\x41\x31\x35\x10\x4c\x35\x7f\xfb\xa4\x40\xee\x2b\xe9\x0e\xc0\xe0\x3a\x40\xf8\x9b\x56\xfc\x93\xa6\xb1\xb9\xa5\x8d\xf8\xdd\x3f\x18\x3a\xb1\x18\x18\xb0\x3e\x7f\x2a\x3b\x20\x9a\xc2\x85\x09\x69\x6f\xac\x48\x14\x50\x94\x0e\x2a\x8f\x54\x04\x05\x14\x25\x71\x2e\x2e\xe9\x3d\x03\xfd\xa4\xc2\x44\x81\x77\x70\x3d\xa7\x5f\x14\x76\x2c\x79\xc4\xd2\x39\xe5\x4c\xe4\xa7\x59\x96\x53\x04\xb1\xe7\xb0\xf0\xda\x7e\x0f\xf9\x1a\x89\x37\x12\xf1\xad\xbe\x57\x2f\x55\x6b\x2e\xd9\x6d\xb5\x9d\x8a\xa7\x99\x3c\x56\x00\x72\x0e\x74\xde\xc3\x6a\x77\x0d\xf5\xa9\x25\xd4\xb6\x23\xa5\xae\xe9\x96\x85\xda\xf5\xb7\x08\xbf\x41\xf8\x97\xb6\x91\x73\x72\xa3\x71\xd9\xf5\xe3\xf1\x0b\x3b\x78\x10\xa8\x91\xd3\xb4\x11\x93\x83\x3f\x3f\x6c\x0d\xcc\xdb\x6c\xf2\x54\xbb\x3b\xb6\x53\x85\xe7\x43\x68\xda\xd1\xe2\xfc\x1d\xd6\x93\x81\xe1\xe8\xaf\x06\x61\x09\x10\x31\xb5\xa3\x77\x11\x26\x11\x6c\xf0\x76\x9f\x56\x5c\xe0\x87\x76\x32\xb3\x24\xdc\xc8\xf4\xd4\x60\x7d\xc5\x60\x38\x19\x34\xec\xe1\x24\x62\x39\x34\x0b\x56\x71\x39\x11\x9b\x85\x09\xf5\x23\x8a\x40\xdf\xc0\x72\x84\xcd\xc2\x49\xf5\x53\x4c\x43\x3a\x14\x23\x85\x55\xe8\x7f\x9c\x47\x1f\xce\x8e\x8e\xdf\x9c\x9c\x1d\x1f\x49\x71\xe0\xf8\xf2\xf8\xec\xf0\x58\x81\x00\x86\x3d\x3c\x05\xfc\x96\x78\x32\x97\x5c\x1b\x85\xa8\x08\x2d\x4d\x61\x1d\x76\x81\xaa\x68\x4f\x9b\xe7\xcd\x6b\x09\xf5\xd6\xb2\x28\xc2\x9f\x10\xfe\xb5\x95\x24\xad\xc3\xb4\x21\xca\xb4\x71\x3d\xab\xe0\x6b\x7a\x51\xe0\xd4\x82\xed\xfd\x48\x1f\x09\xf7\x9e\xaf\xe3\x5b\x92\x38\xa1\xcc\xdb\x85\xc2\x1e\x9e\xc8\xa5\xfa\x26\xe3\x46\x7e\x44\x0a\x7d\x05\xa7\xf2\x3d\x29\x15\x82\xd3\xa2\x6d\x4e\x0d\x68\x7a\x13\x8c\xae\xd9\x33\x9a\x19\x85\xd7\x09\xc3\x30\xbc\x7e\x38\xb3\xb8\x89\x32\x00\x52\x63\x9e\x0e\xdf\x96\xc3\x64\x42\x82\x5c\x26\xa8\x17\x5a\x29\xd2\xcc\xc0\x0f\x08\x53\xfa\xfc\x14\xec\x6f\x1c\x7c\x27\xe0\xd6\x26\xc0\x42\x3e\x4b\x56\x98\x91\x97\x4c\x47\x12\x1d\x9e\x9f\x5d\x5d\x1f\x9c\x5d\x4b\xa9\xc4\xb3\xe7\x96\x53\x01\x0b\x63\x92\x2d\x6e\x58\x4a\x51\x38\x64\x38\x1b\xa1\x7f\xe1\x8c\xd8\x9e\x55\x67\x45\x12\x02\xaf\x4d\x14\xf6\xd8\x2e\x66\x16\x86\xbf\x1c\x25\x88\xb0\x6e\xd7\xd8\x6f\x01\x86\x9c\x6d\x91\x7a\x59\xf6\xc1\x21\xce\x45\x2b\x5d\xaf\x7d\x3f\x1e\x62\x42\x87\xe1\x98\x58\x05\x0a\x98\xfb\x68\x2a\x89\x31\x47\x00\x47\x20\xe5\x23\xa5\x49\x68\xa6\xf5\x18\x68\x3d\x2b\x5e\x4a\x52\x76\x54\x1c\x3b\x68\x27\x2f\xd1\x4e\x5e\x9b\x36\x1d\x4b\x62\x02\x08\xa5\x51\x7a\xc4\x3c\x1a\xdf\xeb\x85\xcf\xbf\x8a\x06\x6a\x9b\xb7\x7f\x64\x50\x65\x17\x38\xd5\x83\x57\x56\x57\x1b\x4f\x67\x95\xca\x00\x15\x8a\xf8\xb6\x2c\x90\x62\x2f\x11\xd1\xa3\xf2\x8d\x94\xa3\x1a\x8e\x87\x82\x2a\x5f\xa0\xaf\x1b\x31\x6f\x9b\x56\xd4\xf3\xe2\x25\x86\x79\xd3\xda\x52\x6b\x96\xbb\xc2\x46\x5f\xbb\xc5\xb3\x59\x58\xdd\xd0\x1c\x3c\xa9\x26\x21\xb8\xd2\x05\x61\x92\xe5\x17\x3c\xfb\xfc\x88\x42\xee\xed\x53\x17\x9c\x2d\x98\x3a\x04\x1b\xda\xd3\x7d\xf9\xe8\xbb\xf5\xcb\x3d\x46\xd4\x04\x09\x91\x49\xb9\xb7\x61\x4f\x2a\xd7\x47\xd1\x40\x4d\xa2\xed\xf1\x0b\xd6\x0e\xa8\x37\xae\xf9\x4a\xcc\x1f\x03\x84\xb0\x11\xb0\x7d\x5e\xed\x27\x40\xfd\x97\x56\x01\xa3\x84\x3f\x6a\xcc\xa3\x22\x9c\x4b\x21\x65\x0a\x31\x14\xe3\xc4\x89\x2a\x38\x7d\x01\xfb\xde\xbc\x83\xea\x0b\x7c\xc9\xbb\x63\x7e\x9b\xc3\xae\x29\xe9\x01\xa8\x02\xa7\x5f\x23\xc8\xf0\x86\x49\xe7\xc8\xe1\xec\x9a\x68\x90\x71\x02\xf8\xc5\x69\xbc\xa0\x53\xd8\x1e\x0c\x43\x89\x09\xb3\x94\xe1\x49\x88\x61\x86\xe3\xda\x6c\x43\xb4\x39\x7f\xbe\x37\x73\x76\xd5\x5d\xc3\xd0\x65\x8f\x25\x27\xf7\x9b\x24\x99\x85\x6a\x92\x6c\x9c\x69\x92\xd7\x3c\x6b\x44\x00\x71\x23\x8d\x28\xc3\xfe\xf4\x4c\x18\x10\xce\xfa\x5c\x54\xd7\xe6\xf0\xdd\x48\xad\x5a\xd8\xfe\xbe\x6e\x86\xfe\xd4\x28\x9a\xa6\xfe\x35\xe3\x68\x4f\x32\xfe\x78\x66\xff\xe7\x29\x7b\xe3\x68\xd8\xdc\x1e\x59\xe9\x7d\x52\xd6\x66\xfb\x11\xb7\xf6\xe3\x5f\x76\x92\x28\x1d\xab\xf0\xf6\xde\xcb\x24\xf4\x39\xf5\xce\x47\x43\x3a\xd2\x19\x1b\x0e\x48\x38\xff\x93\xbb\x3a\x54\x21\xb7\x6d\x98\x0f\xbd\xd5\xfc\x55\x62\x9c\xbf\x89\x2b\xf6\xaa\xe9\xad\x50\x16\xf4\xad\x18\x75\x2a\xf1\x2d\x55\x5b\x08\xb4\x46\x0d\xad\xd6\x0f\x09\x3c\x7c\xba\xa3\x8f\xfd\x4f\x6d\x8e\xa7\x6e\xf4\x3e\x8d\x8a\x62\x84\x14\x05\x38\x35\xce\x4a\x9d\x97\x1c\x8a\x00\xa1\x1a\xb4\x5a\xf8\xa0\xd5\x9c\xa8\x56\x80\x1d\xb7\x85\x50\xf6\x60\xd6\x69\x1d\x00\x90\x36\x84\x92\xf2\x2c\xc3\x26\xf4\x19\x6f\x70\x9b\x72\x46\x9d\x0f\x49\xcf\xc3\xe0\xf6\x82\xa5\x6c\xd7\x02\xa5\xb7\x5e\xa0\xa1\xf5\xda\x7f\xb4\x37\x45\xb2\xb4\x81\x0a\xfa\xf7\x0b\xa0\x0f\xea\x73\x2a\xea\x43\x4b\x07\xee\x79\xd3\xe6\xaf\xf5\x58\x53\x5a\xd1\x43\x1d\x9d\x5c\x5e\x7f\x52\x4a\x4d\xbc\xac\x7e\x3c\xb8\x7c\x7b\x15\x20\xbc\xa8\xbe\x37\x5a\x71\x50\x73\x59\x15\xf9\x42\x09\x65\xf7\xd5\xd4\x27\x57\xe3\xa3\x93\xab\x8b\x83\xeb\xc3\x77\x27\x67\x6f\xc7\x07\xd7\xd7\x97\xb2\xd4\xdb\x6a\xba\x77\x07\x57\xe3\xd7\xa7\xe7\x87\x3f\x06\x08\x3f\x56\x3f\xbe\x3e\xff\x70\x76\x24\xb3\xdd\x50\xb2\x8c\x0e\x33\x4e\x3f\x32\xfa\x60\xf4\xad\xcb\xe8\x70\xce\x92\xa9\x7c\x95\x5f\x29\x17\x50\xbc\x8c\xe4\xe3\x95\x88\x05\x75\xaf\x80\x3c\xc1\xc7\xc0\xbc\x8b\x23\xe5\x2a\x7e\x00\x93\xe7\x52\x56\x9f\x65\x61\xef\xd9\x67\x96\xe2\x30\x3c\x25\x4f\x72\xb3\x36\x36\x21\xdb\x3d\xfc\x95\xfa\xde\x7b\x3a\x32\x91\x66\x86\x53\xda\xaa\xfc\x55\x09\x16\x5a\x37\xf3\x8b\x17\xd5\x65\xf8\x28\x5f\x82\xc9\x3b\xa7\xea\x02\xbe\xda\x0c\x59\x70\xa3\xa4\x0d\xad\x0b\x51\x51\xa0\xe1\x24\xba\xb8\x3c\xbf\x38\x96\xa4\x70\x74\x72\x34\x3e\x7c\x77\x70\xf6\xf6\x78\x54\x15\x4d\xb7\x4d\x9b\x7d\x0d\xd3\x70\x49\x47\x98\x13\x87\x6d\x3f\x10\x43\x3a\xea\x9b\x2b\x8e\x66\x50\xbc\xb7\xa3\x6e\x57\xfe\xf5\xa4\x3f\xad\xed\x40\x45\x81\x4f\xe5\x9b\x03\x21\x1a\xb1\x7e\xad\xd3\x8d\x64\x3c\xa7\x10\x7e\xf5\xe8\xfc\x7d\x2d\xb5\xbd\xe9\x58\xca\xc4\x72\xf2\x4c\xa4\x7a\x3d\x7a\xb0\xd9\x11\x0f\x60\xf6\xc3\xe5\x09\x21\x64\x1e\x5d\x7d\x7c\x3b\xb6\xbe\x27\xca\xb7\x74\xee\x20\x9d\x9c\x3c\xcb\x31\x00\x95\x33\xb8\x46\x05\x31\xcc\xa1\x80\x5b\xa6\xbb\x5e\x07\xb1\x10\x10\x65\x35\x1b\x70\xd3\x2f\xf0\xa8\x0d\x63\xd4\xe7\xc3\x78\x24\x7b\x31\x65\xd3\x4b\x3a\xa1\xec\x9e\xca\xcf\xa5\xbb\x4f\xfb\x59\xce\x6d\xf5\xc3\x03\x4b\x92\xe6\x2f\x53\x36\x85\xf3\x4c\x73\x81\x32\xdf\x87\xca\x51\xad\x92\xaf\xf2\x01\xc9\xa5\xee\xae\xbc\x6e\x28\xbe\xa1\x1b\x90\xea\x8d\x21\xbc\x7f\x8f\x7d\x43\x23\x4e\xb3\x25\x4d\x95\xdf\x91\xbf\x84\xf4\x85\x80\x5c\x49\x4e\x2a\xba\x88\x79\xbc\xc8\xfb\xc3\x91\x72\x2e\x6a\xbc\x87\xb8\xd1\x5b\xde\x98\xda\xab\xa8\x7b\x91\xff\xf1\xcf\xcb\x37\x2f\xba\x8a\xfa\x17\xdd\x2f\xd1\xc5\x52\x3c\x9a\x0b\x26\xfc\x40\xc9\x0d\xb5\x37\x43\x49\xfc\x98\xad\x44\x7f\x4c\xf1\xc4\xf2\xa2\xfe\x50\xbb\x8e\x58\x83\xb7\x11\x16\xf1\xad\xaa\x5d\x9b\xa4\x59\x4f\xec\xd7\x2c\x9d\xb2\xf4\x56\x66\x92\x94\x17\xe0\x00\x72\xd1\x69\x80\x03\x96\x4e\xa9\xa0\x7c\xc1\x52\x65\xe6\x37\x65\xb9\xe4\x25\xf2\x93\x88\x6f\x34\xc2\x45\x20\x49\x3e\xc0\x41\xbc\x12\x19\xc4\x06\x0f\xb0\x89\xc6\x2a\x13\xce\x32\xbe\x90\xf5\x2b\x3b\x04\x6b\x81\x67\x8a\xea\x6f\xef\xe1\x52\x35\xf2\xc5\x94\x4d\x4f\xd2\x9c\x72\x13\x28\xfd\x2b\xdc\x39\xa9\xca\x19\x95\xca\x26\xe6\x94\xa8\xe5\x05\xef\x13\x2a\xf0\xa4\xe6\xae\x58\x56\xc2\x78\x23\x53\xaa\x42\xbf\xd5\x17\x60\xf6\x92\xf6\x81\xe2\x87\x2f\xa2\xe9\x6f\xed\xe8\x28\x6b\x97\x63\xea\xcc\x7a\x1a\xd4\xfe\x2a\xd8\xa3\x4c\xf8\xd9\xa7\x88\x25\x5c\x19\x9b\x8d\x66\x33\x7d\x78\x76\x93\x2f\xa3\x10\xe5\xae\xaf\x27\x5b\x36\x3c\xa1\xc2\xcc\x7d\x1e\xdf\x2b\x1a\xe1\x7a\xd6\x63\x63\x0e\x2b\x1f\x68\x3a\xd1\xe4\x25\x9f\x16\xe0\x65\xab\x1f\xd2\xcc\x5c\xb9\xe8\x17\x02\x76\xd0\x00\x07\x73\xca\x6e\xe7\x02\x08\x71\xb9\x82\xf8\x94\x01\x0e\x92\x18\x5c\x63\x12\x96\x83\xe5\xaf\x2a\x74\x11\x4b\x4a\x5c\x30\x59\xdd\x62\x95\x08\xb6\x04\x0f\x2a\x4d\x9a\xcb\x58\xc8\x15\x16\xe0\x20\x67\x7f\xc8\x17\xb9\xa0\xcb\x00\x07\x20\x9d\x06\x38\x78\x60\x53\x31\x0f\x46\x18\x9e\xfb\x41\xa0\xa8\x15\x66\x5f\x4b\xb9\x53\x14\x3e\x35\x8a\x9e\x81\x1c\xc3\xa0\xc0\xb9\xff\xd1\xf3\x32\x55\xdf\xeb\x28\xc0\x6a\x07\x34\xf3\x6b\xf4\x2d\xee\x9a\x10\x60\xc4\xb7\x58\xba\x75\x6c\xcd\xed\x8f\xe9\x90\x8e\xb4\x1d\x94\x31\xfd\xd2\x14\xa1\xd7\x49\xa8\xe7\x0e\x75\x04\x7f\x7c\x52\x16\x39\x84\x16\x93\x58\x4c\xe6\x21\x77\x57\x80\xc7\x0a\xeb\x59\x7d\x27\x84\x16\xa1\x40\x0a\xc8\x16\x61\x2e\x79\x8c\x1c\x26\x05\x49\xa2\x87\x4e\x3d\x2c\x98\xf9\x11\x7f\x56\xd8\x81\x92\xe2\x9d\x89\xc2\x67\x8a\x3f\x7f\x19\xc9\x7b\x14\xa8\x88\xfe\x6a\x03\x2d\xb7\x51\x30\x18\xd0\x8e\xb0\x23\x75\x4b\xca\xce\xbc\xb6\x89\x9a\x79\x06\xee\x64\x93\x0c\x3c\xdc\x34\xad\xe4\x34\x51\x56\x85\xc7\xe9\xd4\x7f\xbc\x12\x31\x6f\xa0\xfc\x07\x1e\x2f\x1d\x51\x2a\xe2\x57\x64\x35\xc2\xb2\x7c\x0d\xec\x92\x25\x79\x79\xc0\xc0\xbc\xe3\x8a\xe2\xab\xaf\x18\x2f\xe8\x91\x1a\xae\x03\x8a\xcf\xed\x5e\x75\xcb\xae\xcf\x3e\xef\x64\xcb\xc6\xbd\x2a\xe8\x5a\xbf\x96\xaa\x01\xc5\x3f\x70\xc0\x66\x60\x35\xf1\xbf\xf0\x9e\x36\x99\xc0\x4f\x55\x2b\x8b\x7f\xc0\xb7\x60\x29\xb7\x51\xc9\x37\x61\xc3\x2b\xea\xe9\xb0\x36\xbe\x08\x12\x96\xde\x5d\x33\x91\xd0\x60\xe4\x19\x60\x54\xf2\xff\xab\x6c\x32\xb4\x1d\xb7\xdd\x35\xef\x6c\x38\x83\x19\xa7\xf4\x0f\x1a\x3e\x99\x61\x6f\x58\xd3\xf6\x72\x0e\xb2\x1e\xd6\xb2\x16\x68\x3f\x3c\x68\xda\x86\xcf\x3d\xda\x8b\x03\xcc\xb3\x95\xa0\xfd\x3b\x8a\x15\xfc\x85\xf9\x91\xcb\x5f\x10\xca\x5e\xfe\x08\x26\xca\xe7\x64\xf7\x61\x4e\xd3\x40\xd1\x8b\x90\xc3\xa6\x7e\x72\x9a\xe8\x77\x7a\xc7\x35\x4f\x92\x47\xaa\xdf\xca\x4a\x49\x41\x76\x04\xea\x21\xc0\x49\x16\x4b\x3a\xd7\x6f\xf5\x93\xdb\x77\xf5\x7b\xb7\xa3\x6b\xaf\x1c\xb9\xfd\x36\xad\x95\x39\xa7\x33\xc9\x6e\x61\x3e\xe5\x06\x9f\x94\x85\x00\xcd\xb3\x47\x6e\x9b\x29\x6d\x1b\xaa\x4d\xae\x19\x25\x51\x82\xc7\xa9\x12\xd2\x58\x7a\x7b\x92\x56\xdf\x9c\xaf\x64\xb1\xf4\x9e\xa6\x42\x0d\xec\x24\x61\x93\xbb\xe0\xcb\xcf\x48\x1d\x4f\x8b\x66\x8b\x53\xf8\xe1\x8a\x67\x5b\x0c\xd6\x31\x4b\xef\xb3\x3b\xf0\x3c\xd7\xbe\x98\x72\x33\xb8\xd5\x16\xc7\x28\x0c\x76\x8d\x8b\x26\xc2\x63\x3d\x7d\x97\x30\xd7\xb0\x67\xc4\x09\x8b\x73\x14\x06\x26\x73\xe4\x27\x91\x95\x56\xb3\x71\x38\x56\x6e\xce\x0c\x49\x64\x46\x35\xd2\xcf\xe7\x53\xe9\x6c\x36\xee\xda\xe7\xf6\xb4\x00\xde\x06\x38\x68\x68\x4e\x80\x9b\x15\x90\x90\xc5\x41\x11\x10\x72\xa7\xa3\x1b\x94\x47\x82\x16\x08\x8f\x35\xb9\x57\x6b\x55\x18\x04\x58\xfd\xcf\xdb\x2a\x82\xaf\x46\xcd\xa9\x92\xda\x6a\xb7\xa1\x5a\x79\x32\x14\xea\xa7\x50\x82\xfd\x58\x2d\xab\x6a\x85\xf0\xb6\xad\x1e\xf8\x58\xe9\xd0\x21\x55\xb0\x0f\x1e\x90\xb4\x02\x77\x31\x62\xeb\x8b\x84\x83\xed\xbd\x26\xc1\xa0\x74\xd5\xc5\xf2\x23\x5d\x24\x11\x18\x02\x66\xc3\xfb\xd2\x32\x95\x4c\x48\x2d\xa1\x5a\xc7\xbc\xa5\x2f\x67\xd1\x2c\xb4\x7a\x4b\x54\xb4\x03\x9d\x40\x57\xe2\x65\x96\x43\xd7\x52\x45\x23\x69\x28\x32\x83\x1f\x66\x12\x83\xb1\x1e\x65\x6f\x95\x97\x58\x5b\xcb\xf0\x37\x94\x6f\xa2\x29\x6e\x9b\x96\x8e\x59\x7e\x00\xad\x53\x10\x3b\xf2\xbc\xf9\x9a\x1e\x7c\x51\x7b\x6b\xcb\xe6\x5f\xdd\x09\x6c\x61\xb7\xab\x35\x83\x6c\xb7\x4d\x88\x40\x15\x52\xd0\x7d\x14\xb2\x8f\xf6\xb1\x8a\xc2\xa4\x2c\x8e\x54\xeb\xca\xb1\x2a\xb4\x06\xa5\xdc\x60\xc0\xaa\x0e\x6e\x94\x60\xe9\x45\xfd\xb2\x75\xeb\x30\x17\xf6\x68\x84\x3a\x82\xf0\x81\x8d\x58\xb8\x15\xa0\xbe\x02\x8f\x51\xa3\x35\xb2\x01\x18\x35\x7c\x96\x1e\x3b\xac\xf1\xf0\xd5\x00\x5a\xb0\x1a\xcd\x8d\x70\x4c\x7a\xfb\xb1\x53\xb6\xc6\x3b\x3b\x88\xcd\xc2\x2c\x32\xbd\x7c\x93\x71\x18\xa1\x30\xc5\x0c\x8b\x61\x3c\xc2\x14\xdb\x7b\xc8\xed\x5e\xc7\x2d\xa8\xca\x76\x51\x9f\x7f\xbb\xdb\xf8\x64\xd2\xb4\x26\x6c\xe4\x3b\x3f\x61\xb7\x5b\x59\x2a\x46\xd2\xf4\xab\xdd\x65\x69\x50\x20\x5c\xdd\xa7\xfe\x44\x5b\x54\xe0\xd0\x5a\x6b\xd6\xeb\x52\x6b\x50\x4b\x73\xb2\x95\x08\x80\x66\x60\xdf\xaa\x52\xcc\x36\xe8\xad\x58\x7e\xc5\xa4\xd8\x7a\x28\xb7\x4f\xe4\x05\x3a\xe9\x79\xc4\x13\xdd\xac\x6e\x6e\x12\x9a\x3b\x1b\x0b\xd8\x29\x8f\x94\xe8\x68\x10\xd3\xcc\xc9\x57\x51\x36\x66\x64\x3b\x5d\xaf\x83\x71\x4e\x93\x59\x40\x08\x01\xbb\x0b\x15\x71\xb5\xdb\x65\xdd\x2e\xad\x14\x13\x22\x0c\xa0\xba\x60\x6e\x97\x8b\x6c\x79\xc1\xb3\x65\x7c\x1b\xab\x11\xc1\x55\xc6\xe8\x88\xbc\x95\xfa\xc1\xe7\xb8\xbc\x18\x7c\x02\xa4\x06\x24\xc9\xd0\x6a\x5e\xa2\xd5\x95\x81\x98\x07\x09\x08\x27\xe4\x09\xde\x6b\x85\x51\xae\xc4\x38\x90\x3d\x32\x0f\x29\xeb\x3e\x9a\x25\xf1\xed\x2d\x9d\x9e\x58\x7c\x09\x24\x0f\x60\xda\x6c\x3c\x4b\x23\xeb\x4b\xa8\xc3\xbf\x8d\x6f\x69\x4a\x79\x2c\xe8\xb5\x9d\xbc\x30\x31\x98\x0d\x48\x0e\x0a\x40\xdd\x54\xd3\x54\xd1\xd0\x52\x83\x87\x56\x59\x63\x0d\x70\x49\x34\x72\x74\x42\x32\xef\xe1\x3a\x0b\x4d\x51\x45\x81\xa5\x70\xf7\x17\xf0\x7d\x2d\xfa\x96\x98\xa7\xfe\xf5\x0e\xc4\x47\xaf\x65\x92\x29\xc5\x81\x59\x80\x3a\x67\x1b\x7f\xdb\xf2\xdf\xc9\xa2\x7c\x51\x4e\xcf\xb0\x28\xcf\x30\x2f\xcd\x70\xda\x3c\x52\x69\x64\x46\xfb\xc3\xe5\xa9\xc6\xf1\x94\x9b\xad\xae\xa9\x3e\x24\x95\xce\x1f\x70\x7a\x9a\xc5\x53\x90\x62\x7d\x79\xbb\x75\x97\x50\xb2\x93\x0d\x3e\x54\x2d\x46\x45\xfc\x73\x0e\xf7\xa5\x7e\xdb\x7d\xba\x92\xa9\xde\xca\x06\xb1\xca\xf0\x6c\x5a\x1e\x25\x41\x7a\xfb\xe2\x3b\x63\xa5\xbc\x2f\x0c\x12\x1d\x27\x26\x5a\xb0\x6a\x10\xb7\x6b\xab\xb0\x17\x54\x76\x98\xe4\x84\xf4\x83\xff\x21\xcf\x16\x25\xb5\x73\xb3\x61\xb9\x15\x6d\x7e\x9e\xd3\xb4\xe3\x47\x91\x84\xaf\x39\x15\xa1\x77\x38\xd0\xfa\x58\x61\x6d\xc3\xe2\x05\x44\x02\x15\xdd\x2e\xdc\x0e\xe8\x96\xa3\x27\x41\x84\x86\x5b\xd0\x37\x19\xb7\x74\xa4\xee\x3c\x55\x91\xee\x30\x8a\x45\x94\xcf\xd9\x4c\x84\x1a\x6f\x91\x13\x31\x34\xe5\xec\xee\x8d\x3a\x80\x4e\xc8\xf2\x9f\x1c\x0b\x18\xb8\x62\x34\xa9\x8b\x68\x99\x2d\x43\xa4\xae\x37\x73\x0d\xa6\xe5\x27\xb8\xa3\x08\xc3\xf6\xa2\x0b\xf6\x8a\xd0\x34\x74\x47\xfd\x6c\xfa\xa5\x6b\x1a\x76\xdf\xb4\xb4\x7c\x47\x6b\x2f\xf3\x00\x0b\x54\xd0\x24\xa7\xfb\x45\x81\xd0\x0b\x34\x09\x7a\x01\xa8\xe3\xb1\xaf\x4d\x3f\xa8\x68\xd3\x6b\x7a\x73\x75\x70\xcf\x83\x42\x8d\xda\x35\xc5\x97\x94\x1c\xd0\x4e\xd5\x7b\xe5\x52\x5d\xdb\x5d\x50\x72\x2d\x3f\x7a\x2e\x3a\x17\xea\xcb\xfb\xea\x5d\xdc\xf1\xc1\xe1\xbb\xf1\xc9\x59\x80\xf0\x11\x7d\xc6\x01\x40\xdd\x5e\x6b\xab\x4a\x11\xdf\x12\xaa\x4c\xbd\xe5\x84\xbf\xa7\x23\xb2\xdd\xdb\x14\xf4\x71\xa3\xd1\x59\xe5\xbe\x5a\x7c\xc1\x7d\x35\x78\x0c\xc8\x7a\xcf\x28\x09\x6e\xe8\xab\x7f\xfe\xf3\x9f\xff\xeb\x9f\xbb\x37\x37\x37\x74\xf7\x1f\xff\xfb\x55\x6f\xf7\xdf\x66\x93\x9b\xdd\x57\x7b\x7f\xa7\xb3\x7f\xfc\xfd\xef\x93\x49\xfc\xca\x03\xdc\xf9\x8d\x96\x0e\x05\x4d\xe6\xbb\x1b\xae\x99\xbb\x5d\x2a\xfb\x5d\x98\x8b\xdb\xdf\xa1\xb4\xf5\x3a\xf8\xf7\x3b\xfa\x18\xa8\xcb\xdd\x8f\xf6\x1d\x9b\xd2\x54\x30\xf1\x18\xa8\xcb\xdb\x93\xd6\xd1\xb6\xd1\xc2\x34\xb8\x86\x1e\xf0\x3b\xfa\xf8\x26\xe3\x26\xe8\xa4\xa1\x10\xb2\x71\xcc\x59\x7e\xbc\x58\x8a\xc7\xfa\xa8\x83\x28\x17\x2d\xe8\x22\x7b\x93\x35\xde\xcc\xa9\xf0\x76\xf4\xb3\x68\x31\x84\x51\x6d\x33\x7c\x5f\xb5\xcd\x8a\x2d\xba\x6d\x92\x55\xf0\xef\x1d\x3f\xb5\x2a\x73\xbd\x21\xc0\x74\xbf\xc9\x78\xc8\x91\x91\x5f\x75\x8b\xe4\x9b\x8c\x08\x10\x47\x79\xd9\xa3\xc9\x14\xbe\xb3\x83\xc1\x28\x21\xd3\x7a\xe3\x14\xcb\xbc\x7d\xa6\x7d\x48\xf0\xe9\x26\x33\x1a\x1b\x97\xc6\x08\x14\xac\x64\x52\xa8\xc2\xd0\x2b\x93\x8d\x18\xa0\xef\x05\x66\xcf\xdb\xa3\xcc\x78\xb6\x68\x8c\x30\x66\x58\xbc\xe9\x08\x44\x34\x1b\xfc\x4c\x81\x42\x64\x35\x00\x50\xaa\x0c\xca\x65\x21\x6f\x14\x18\x9e\xe4\xc2\x8d\xe5\x0d\x47\x5e\xc4\xf7\x76\xa8\x4c\x6e\x5d\x85\x35\xef\x92\x65\x87\xbc\x66\xb9\x6e\xe6\xa1\x75\xc1\xc1\x18\x00\x22\x8a\x28\xc2\x13\x8a\xf0\x9b\xff\x4b\x07\xf7\x45\x7d\x86\x1d\xdd\xc1\xc0\xba\x11\x30\xe6\xbd\x72\x04\xfe\xd8\x3c\x02\x56\x48\x34\x63\x90\x95\xc6\x40\x7e\x37\x63\x70\x47\x1f\x73\x22\x70\xa6\xb7\x33\xc2\x71\xd6\x6a\x11\xa4\xc7\xe1\x24\x9d\xd2\xcf\xad\xd4\xe1\x07\x1d\x83\xd8\x88\xdc\x33\xb1\x86\x20\x1b\x66\x41\xfe\x4c\xbd\x78\xfe\xc3\x11\xce\x48\x6f\x3f\xfb\x2e\xdd\xcf\xe4\xf9\xd0\x42\x7b\x5b\x8b\x4e\x3e\xcc\x46\x5e\x50\x51\x33\xbc\x1c\x33\x9c\x7e\x01\xf5\x5a\x9d\x20\x4e\x65\xa5\xa6\x66\x1c\x93\xed\xbd\x4d\x74\x2d\x4b\x08\x63\x12\xaf\xd7\xa6\x43\xdf\x93\x57\xa8\xdb\xd5\x1e\xf1\x02\x61\x66\x08\x1e\x67\x3b\x3b\x85\x92\x01\x32\x49\x0a\xf1\xc0\xb6\x56\x01\xb5\x69\x47\x8e\x53\x30\xbd\x93\x6d\x7f\xd6\x5c\x7a\xd3\xfa\x50\x33\x07\x0b\x24\xdd\xc4\x54\x0d\xaf\xcc\xfd\xb5\xf4\x7a\xc3\x46\x80\xb9\xd9\x7a\xb5\xa3\xbf\xd9\x0c\x38\xcd\x57\x89\x30\x9b\x81\xde\x1a\x78\x6d\x6b\xa0\x1b\x96\xcd\xf0\x0a\x44\x00\x55\xb4\xc8\xf8\x28\x54\xb4\x22\x99\x3e\xd8\xf1\xeb\x8e\xbb\x71\x98\x66\x29\x95\xa3\x59\x0e\xcd\xc1\x50\xb7\xfb\x8a\x10\xc2\x8c\xb0\xe5\x11\x46\x6a\x06\xfa\x1d\xd5\x4f\x06\x4a\xe0\x6b\xb6\xab\x0d\xdb\x91\x19\x1f\xb3\x21\xa9\xf1\xa9\x6e\x48\xe6\x24\xa2\xc6\x0b\x24\x59\xe8\x54\x6d\x83\x62\x95\x0d\x4a\x4e\x84\x51\xaa\x98\x2d\x0a\xde\xc5\x24\x05\x0a\x6a\xdf\xa4\xfc\xe9\xa2\x66\x70\x61\xe7\x8a\xf5\xce\xc5\xd4\xce\x95\x99\x9d\xeb\xdd\x9f\x35\x9c\xfc\x6a\x97\x80\x36\x59\x20\xb2\x2e\x01\x75\xe2\xf6\x75\xaa\x40\xd3\xaf\x29\xc2\x1f\xfe\x1f\xda\x85\xe1\xde\x73\x4b\xd4\x24\xec\x8d\x6c\x67\x7e\xa6\xe4\x49\x53\x66\x83\x92\xb9\x57\x60\x39\xa9\x6d\xe0\xa5\x05\xfe\xfd\x79\x41\x8f\xd3\x99\x27\xe5\x5d\xc4\x62\x6e\x56\x36\x34\xe6\xe5\x1e\x0d\x56\x32\xaf\x18\x4e\x3b\x41\xdd\x96\x38\xda\x18\xa1\x5d\x31\x85\xba\x15\xb4\x5b\x5f\x33\xb3\xb8\x4c\x81\x60\xf7\xec\xbc\x80\x4a\x36\xfd\x36\xe4\x5e\xd9\xf5\x20\x45\x2a\xa6\x75\x0f\xc7\xd1\x18\x02\x81\xa5\x42\xa7\x47\x30\xff\x9e\x8f\x00\x53\x01\x2b\x09\x21\x21\x25\x52\x82\x30\xf2\xf8\xb6\x27\x8f\x3b\x13\x4f\xf7\xb6\xce\xb1\x64\x6e\xdd\x10\x08\xcb\xa3\xbd\x86\x53\x34\xf8\x83\x96\xf7\xd7\x30\xf5\x19\x6c\xb8\xdd\x43\xa8\x9f\x47\xef\x0e\xae\xc6\x67\x07\xd7\x27\x1f\x8f\xc7\x57\x9f\xde\xbf\x3e\x3f\xed\x76\x3f\x51\x99\xfd\x83\xca\x5e\xc9\x85\x50\xff\x2d\xf5\x4a\xf7\xf6\xc7\x7a\xca\x17\xb4\x40\xb2\x42\x18\x67\x6b\x17\xda\x42\xcb\xc0\x88\xa9\x71\x5f\x84\x7c\x6a\x30\x3f\x96\x72\x57\x16\x33\x35\x23\x2e\xbc\x7c\x72\xc5\xbc\xb8\x3a\x99\xd8\xab\xed\xbd\x9f\xb7\xbd\x32\x9b\x4b\xef\x66\x35\x46\x5f\x33\xbe\xed\x35\x1a\xdf\xf6\x46\xdd\xae\xff\xe4\x9d\x51\xe4\xca\xea\x68\x78\x2a\xa1\x61\xa8\xe0\xac\x66\xd0\xa1\xe8\xe0\x1b\xda\xff\x95\x86\x3f\x51\x8d\x37\xf5\xef\xea\x86\xd5\x7c\xff\x91\x9a\xd7\xe6\x30\x67\xbe\xfc\x4a\xc3\x5f\x68\x0d\x6d\xea\x57\x1a\xfe\x40\x43\x01\x86\x90\xc0\xdb\x3f\xfe\xbf\x89\x19\x38\x56\x20\x2a\xac\xa0\xe2\xe1\xf4\x12\x6f\x3c\x8e\x83\xe1\x28\x40\x76\x95\xf3\x86\x15\xce\x3d\xc1\xd5\x3b\x47\x9a\xd5\x63\x5a\x5c\x5e\xed\x1c\x0d\x4e\xa9\x39\xfa\xa4\xa8\xdf\xb0\xf2\x39\x1a\xbc\xf1\x93\xb4\x2d\x71\x8e\x06\xef\xfc\x74\x6f\xa9\x57\xba\xbf\xac\xe1\xeb\xcf\xf4\xff\xab\x2b\xb5\x69\xbd\x19\xd8\xb7\xbf\x64\x45\x51\xbb\xa2\x9c\x2e\xe7\xed\x33\xa6\xfe\xe6\x44\xe1\x6c\xfb\x3f\x3d\x93\xa3\x26\x21\xbb\xac\x3f\x5a\xf1\x5c\xb7\x4b\x23\xb0\x72\x0f\x9e\xe2\x1b\x5a\x91\x8e\xec\x97\x9f\xca\x5f\x7e\x81\x4b\x47\xfb\xf5\x17\xea\xa1\xe8\x39\xc4\x58\x05\x9a\xa7\xdc\x69\x2d\xbf\x52\x83\x97\xae\x24\x31\xdb\xb7\x0e\x19\xb6\x3c\x78\x40\xf9\xb7\x2b\x36\xd5\x7e\x76\x85\xab\xf3\x07\xdf\xb5\xc2\xce\xa7\xa8\x76\xcf\xb3\xf0\x56\xe6\xdd\xb6\x80\x5f\x3d\x3f\x89\xa7\xa2\x76\x19\x52\xba\x37\xa1\xfa\x11\xc7\x44\x0c\xb3\x3a\x94\x41\x3c\x08\xe5\x7b\xd2\xc3\x19\xea\xab\x9f\x3b\x3b\x31\x0e\x82\x9d\x6c\xe7\x8c\xee\xc4\xa8\x00\x6e\x45\xc5\x33\xfa\xca\x5c\xe3\x01\x6d\xe2\x6d\x1b\x94\xb6\xc1\x8e\x57\x0a\x44\x5a\x07\x6c\xde\x36\x15\xa6\x29\x29\x44\x36\xa6\xaf\x0f\x4a\xa4\x6e\x7a\x85\xc0\x5c\xe0\x54\x90\xa7\xa0\x1b\xf4\x83\x6e\xbc\x58\xee\x07\x38\xf8\x4e\xfe\x4e\x84\xfc\xf9\xbd\xfc\x79\x2b\x7f\xfe\x2d\xf8\x5b\x3f\xe8\xfe\xbe\xca\xe0\xfd\xdf\xe4\xfb\xff\xf1\xf9\xd5\x3f\xe5\xc3\x7f\xa9\x87\xff\xdd\x93\x0f\x44\x3d\xfc\xfd\x68\x3f\x28\x30\x13\xe4\xdb\x61\xf7\xbb\xef\x83\xbf\xfd\x17\x19\x7d\x8b\xb3\xd2\xe3\xad\x5b\x2d\xb1\xf0\xf9\x81\x90\x07\x52\xfb\x2d\x17\x15\x05\x28\x21\x74\x40\x49\x10\xf4\xeb\x48\xc6\xdd\x6e\xe8\xc1\x0f\x23\x0c\x70\x07\xa2\x04\xd3\xb2\xaa\x16\xd7\xae\x4f\x6d\x5c\xb7\x6a\xd8\x3d\x37\x20\xbf\x3c\x2e\xd6\xeb\x90\xb7\x9b\x64\xc6\x72\x4b\xe1\x22\x9a\xab\x6d\x95\xeb\x93\xc3\x24\x4b\x3c\x27\x21\xe1\x68\x17\x8e\x80\x9a\x00\x6a\x38\x71\x0a\x62\x43\x44\xcb\x98\xe7\x92\xcc\x6c\x59\x76\xd7\x12\x83\xa0\x1f\xf4\x05\x50\xdc\x4c\x34\x1f\x82\xd2\x30\xdd\xac\x1c\xf2\xdc\xc5\xe0\x1e\x52\x5d\x68\x92\xed\x3d\x9c\x45\x80\xda\x44\xd2\x21\x8b\xce\x7f\x3e\x3b\xbe\x1c\xe1\x2c\x62\xb9\x87\x96\x45\x74\x12\x8b\x5e\xd7\x80\x4f\x59\xce\x81\x33\x85\xbd\x97\x3d\xd2\xa9\xbd\x48\xc8\xc9\xb0\x1c\x69\x52\x39\xb7\xb1\x59\xe8\x30\x20\x43\x4e\x12\xa1\xda\x4d\x71\x30\xcb\xb2\x9b\x98\xf7\x6f\xe2\x3f\xe4\x88\x9b\x47\xe5\xea\x4f\xed\x40\xbd\xc9\xf8\x87\xcb\x53\x92\x08\x88\x6b\xba\xd5\x14\x77\xf3\xc3\xe5\x29\x12\x82\x7c\xb8\x3c\xc5\xb5\x7c\x13\x95\x0f\xee\x2f\xeb\xa2\xbe\x88\xb4\xe5\x3b\x02\x2c\x0f\xd8\xe6\x20\x7e\x64\x18\x1c\x66\xab\x64\xba\x95\x66\x62\x6b\xc6\xd2\xe9\x16\x98\x3c\xcb\x9a\xb6\xe4\x54\xb2\xf4\x76\x6b\x41\x27\xf3\x38\x65\xf9\x62\x6b\x96\x71\xf8\x72\x15\xa7\x4c\x68\xe8\xb5\x00\x75\x84\x50\x71\xb6\x4c\x15\x61\xb0\xe2\x09\x40\x76\xd6\xda\x58\x14\x21\x9c\x5f\xe3\x3c\xa7\x5c\x5c\xcf\xe5\x70\x33\xa1\x80\x4d\xa7\x28\xcc\x00\x75\xa0\xe9\x84\x9b\x62\x8a\x70\xba\xc1\xaf\xd1\xa9\x34\xb5\x22\x45\x63\x4b\x94\xb9\x5a\x56\x6d\x52\xb3\x7e\xdf\x84\xcf\x76\xb7\x47\x4d\xa7\x7a\xb0\x5e\xa8\x24\x44\xa1\x50\x54\x86\x15\x24\x47\x16\x89\xac\xc9\x4d\xbb\xa9\x62\xee\x7b\xb1\x49\xea\xf5\x20\x2c\x1b\xb5\x0a\xbf\x19\xb0\x95\xcc\xe2\x7f\x9f\xa4\xb9\x88\x93\xc4\xa0\x0f\xba\x7c\x9e\xc2\xcc\x27\x71\x65\x04\x61\x54\xbf\x2d\xa5\xf8\x90\x02\xe0\x15\xec\xea\x53\x4e\x34\x7f\xb2\xba\x72\x21\x0d\xb5\x4d\xd9\x54\x07\xd0\xaa\x20\x04\xeb\xe5\x09\xf1\xaa\xa2\x1b\x7a\xcb\x52\x52\xb5\xbc\xac\x70\x8a\x1e\xf6\x5b\x00\x59\x3c\x6f\x54\x59\xcc\x24\x5b\x2c\x58\x4d\x9b\xa6\xe5\xf8\x06\x7e\xd0\x69\xfb\x40\x86\xce\x26\x89\x93\xde\x3e\x77\x66\x46\x7c\x67\x07\x89\x21\x1f\xb9\x0e\x80\x65\x3c\x2d\xfb\x17\x2f\x98\xf0\xdb\x36\x63\x69\x9c\x24\x8f\x8d\xdd\xda\x2b\x0a\x9c\x16\xe1\xdc\x07\xf8\x93\xfb\xac\x8f\xf7\x37\x53\x1b\xed\xbc\x4d\x38\xd0\x03\x36\x75\x37\xa3\x1a\x2a\x73\x83\x90\xb0\xe4\x74\x19\x73\x7a\xc0\x6f\x9b\x10\xda\x95\xc7\x9e\x90\xf3\x77\xe8\x6f\x3e\x65\xa7\x2b\xe1\x1c\xbf\x4e\xc1\x5c\xb9\xe1\xf3\x61\x0d\x2c\xcd\xc9\xe6\x0d\xc9\x15\x45\xb5\x96\xd6\xe4\xfa\x55\x16\x99\xa7\xde\x4e\x6a\x03\x19\x81\x13\xdd\x4e\xd0\x0f\x76\x68\xa4\x40\xdc\x8b\x62\x03\x82\xe3\x5c\x8d\xf7\x52\x90\xa7\xe9\x63\x1a\x2f\xd8\x44\x35\x08\x3c\x89\xd4\x8b\xeb\xf8\x56\x3e\x79\xa3\x28\x1f\x15\x17\x30\x4f\xd6\xea\x19\x50\x5f\xb7\xf7\xb0\xb6\x72\x32\x8f\xda\x21\x39\x4e\x12\xca\xfb\xdb\x3d\x53\xf4\xd5\x24\x5b\x02\x9c\xa5\x07\x19\x6b\x53\x9f\x68\x67\x7d\x88\x03\xbf\x68\xd9\x8d\xff\xa5\x2a\xc9\x06\xac\x2b\x75\x3f\x96\xea\xa1\x05\xc3\x1e\x22\x77\x95\x99\xc5\x0c\x9a\x64\xa9\xe0\x99\xec\xa8\xc1\xda\xcd\x69\x32\xeb\x5b\xf1\x98\x0d\x1a\x01\xac\xfa\xca\x9d\x94\x21\x0c\x4b\x88\xfd\x01\xc6\x99\xf7\xd1\xd8\x45\xe0\x01\x2f\x0a\x64\xc0\x9d\x23\x03\xe0\x3f\x15\x92\xbf\x6a\x2f\xf1\x2a\x39\x79\x88\xc7\xc6\xbe\x3f\x8a\x73\x95\xca\x1e\xb9\x9f\x20\x60\x35\xed\x0b\x83\x2f\x19\x22\xac\x2c\x0c\xae\x01\x6f\x54\x44\xde\x93\xa9\xe9\xb0\x05\xab\x58\x8f\xde\x52\xe8\x74\x57\x34\x99\x35\xab\x6a\xe5\xb8\xe8\x44\xd7\x71\x83\x08\xbf\x55\x56\x89\xc8\xa4\xad\x8b\x10\x38\xad\x19\x39\xeb\x33\x7f\x64\x51\x89\xdb\x17\x7e\x11\xce\x05\xc2\xf7\x02\xfc\x79\x17\x02\xdf\x36\x8d\xde\x57\x42\x2f\xdf\x8b\x8e\x3e\x84\xc4\x0e\x79\x51\xc3\x10\x13\x51\xb8\xa5\xfc\x28\xe9\x18\x78\xd8\x4d\xeb\xb1\xc8\xd9\xaf\x29\x3b\x42\x1f\x25\x55\x95\x6c\x6d\x52\x8c\xca\x49\xe3\x47\xa8\xdb\x63\x3d\x38\x9c\x68\x9d\xe4\x3c\xce\x7f\xe6\xf1\x72\x49\xa7\x86\xe3\x31\x5d\x4c\x12\xe7\xf9\x25\x9d\x69\x5c\xc1\x96\x57\xb2\xec\x12\x24\x21\x5c\xdc\xf6\xfa\x00\x8e\x60\x6d\x41\x36\xb0\xe5\x69\x75\xb7\x2c\xe9\x1f\x6c\x5f\x8c\x76\xca\xeb\xaf\x56\x4a\xf9\x9b\xb6\x32\xd7\x63\xb7\xb7\x94\x87\x81\x17\xcc\x52\x77\x0d\x24\xbd\xd2\xf7\xc3\x84\xc6\x5c\xd1\x52\x60\x6c\x99\x1a\x5d\x94\x29\xea\xf0\x6e\x37\x84\x6f\x13\x99\x49\x7f\x91\x89\x50\xc8\xc1\x1f\x56\x7f\xa9\xe4\x43\x85\x68\xda\x72\x1d\x02\xb8\xb0\x93\xe2\x0f\x82\xc1\xe6\xb0\x13\x86\x8c\x5d\xa7\x9b\xc2\x47\x51\xdd\x0c\xc6\xa2\x1c\xd8\x64\xb8\xa0\x23\x05\xc7\xe0\x9d\xe5\x1e\x4a\x89\xc0\x1d\x1a\x22\x43\x0b\x50\xbb\x86\xd6\x82\x0a\xef\x79\xe6\x57\x68\xa0\xca\x1e\xf6\x46\xa8\xbf\xa2\x21\x14\x8d\xfd\x62\x8f\x85\x36\x96\x35\xc7\x43\xcb\x74\x86\xbd\x11\xe6\x84\x0e\xf7\x46\xd8\x12\x89\x18\xec\xee\xf5\x95\x73\xe9\xe7\xf3\x59\xa8\xe3\x53\x83\xa6\x71\x77\x6f\x9b\x10\x63\x7f\x40\xf8\x30\x05\x33\xba\xed\xea\x8d\xa5\xd6\x23\x6a\x11\x9a\x0d\x7b\x90\x2c\x23\x84\x8c\xa3\xf3\x65\x1e\xbd\xa5\x62\xbd\x76\x8f\xef\xe3\xc7\x1b\x7a\x9a\x4d\xe2\xc4\x04\xc6\x66\x43\xe6\x8c\xd6\x70\x4e\xe2\x61\xec\x1b\xb1\x0d\xd3\x11\x19\xaa\xbc\x0a\x24\x15\x07\xbb\xaa\x95\x78\xc8\x70\xae\x71\x71\x8b\x42\x29\x32\x3e\x0b\xf2\x04\x47\xca\x46\x9c\x79\xdb\xcd\xbe\xe9\x22\x71\xc6\xeb\x43\x8a\x29\xde\xee\x8d\x3a\xc6\x16\x22\x5f\xdd\xa8\x63\xab\x24\x02\x04\xc8\x6c\xee\x95\xd8\xd9\x33\x1c\x7b\x28\x39\xc1\xf6\xde\xa8\xc0\x4c\x89\xc1\x35\x3b\x57\x37\x88\xbd\x11\xce\x08\x07\x18\x8b\xe1\x2b\x65\xd1\xce\xa6\xe0\x05\x6f\x86\xc3\xd7\x0b\x31\xd4\x29\xa9\x0e\xe2\x6e\x37\x8c\x89\x30\x66\xcb\x27\x10\xc8\x76\x13\xba\x45\x8c\x30\x70\xc6\x34\xca\x7d\x0f\x7b\x59\x27\x8e\xf1\x76\x0f\xab\x70\x0d\xb2\xe6\x9c\x30\x37\x3e\x51\x80\xbe\xdf\xdd\xc3\x2b\x92\x0f\x1e\x84\x6c\x88\x31\xa2\x8f\x02\x84\xfa\x63\xa1\xda\x16\xe4\xe2\x31\xa1\xd0\xfa\x6e\x37\x5c\x01\xd3\x3e\x10\xe1\x0a\x43\x82\x80\xe5\x1f\x59\xce\x6e\x12\x1a\x20\x00\x42\x2c\x35\x21\xc3\x2b\xbc\xbd\xa7\xeb\x2f\xf0\x95\x20\xb9\xb2\x97\x5c\x26\xf1\x63\x7f\x2b\xcd\x52\xba\x1f\x20\x7c\xd0\x2a\x6a\xbc\x1c\x11\x29\xd5\x00\x3e\xb6\x3d\xad\x98\x48\x1a\xaf\xec\xc5\xa0\x48\x2f\x87\x3a\xf2\x4c\xf2\xac\x4d\xb9\x3e\xed\xe8\x46\x59\xb0\x55\xab\x8f\x64\x33\x8f\x76\x77\x82\xad\xca\xe0\x18\xd2\x00\x9d\xd0\x20\x97\xcc\xa5\x6f\x70\x67\xb7\xae\x2c\x2e\x69\x2c\xcf\x4c\x1e\xee\xce\xb9\x20\x4f\xcd\x74\x8a\x9e\x78\x85\x4c\xd4\xfc\x62\x18\xa6\x45\xbc\x44\x61\x6d\x62\xcd\x2e\xba\xbc\x92\x49\x41\xc5\x8e\xdc\xbc\xe2\xd2\x87\x86\xe8\xff\x60\x3d\x4f\x07\x57\xca\xff\xaf\x28\xf0\x9d\x68\x90\xf0\xf4\xe2\x31\x34\xd8\x0f\x00\x5f\x42\xae\x25\xc9\x3d\x80\x69\x30\xb3\x9a\xd4\x5a\xaa\xd2\xbb\x66\x18\xcf\x2c\x15\xb3\x1e\x94\x62\x44\xd6\xba\xc2\x09\xc9\x6a\xcb\x62\x42\x92\x41\xe6\xad\x88\xfe\x70\x84\x67\x24\x51\x4b\x65\xa2\xd7\x47\x86\x3a\x2b\xe2\xe9\x61\xe5\xe2\x38\x14\xe1\x0c\x27\x83\xc9\x70\xe2\x38\x5c\x3f\x53\x66\x1d\xd7\xf2\x5b\x8c\xf3\xda\x4a\x31\x8d\x2f\xad\x97\xc3\xbf\x70\x5d\x2c\x63\x31\xb7\x4b\x42\xad\x81\xb4\xe9\xb3\x8d\x00\x3b\x85\x9b\x34\x90\x3e\xfe\xa5\x8b\x44\x0e\x5c\x19\xb5\x57\xb6\xa5\x64\x1d\x52\x6e\xd3\x7a\x1d\x36\xbc\x95\xcb\xfc\xc6\x8f\x5f\x2b\x1c\x00\x1c\x5d\xaf\x7b\x9a\x04\xb5\xde\xb5\x6f\x45\xd1\x86\xc5\x73\xdd\x3e\xec\x5a\xaf\x87\xd3\xaf\x95\x4f\x61\x3c\x59\x3d\xf7\xab\xc6\xdc\xaf\xfc\xdc\xaf\x54\xee\x17\x03\x66\x01\x96\x20\x49\x31\x8f\x66\x71\x92\x3f\x12\x56\x41\xd1\xfa\x6b\xe7\xd4\x08\x8d\xaa\x5a\x63\xeb\x00\x35\x77\xca\xa6\x22\x21\x1a\x88\x3e\x6f\x19\x7c\x27\x5e\x5d\x0a\x7f\x53\x07\xa0\x1a\xff\x9a\x14\x37\x83\x4b\xb3\xa6\xb7\x9d\x74\xb8\xa4\x23\xc2\xac\xde\x45\xd9\xed\x59\xbd\x4b\x66\x1c\x09\xd4\xfd\x0a\xce\x09\x60\x9f\x49\x6e\xb1\x22\x7c\x18\x8f\x3a\x0d\x7a\xf6\x55\xb7\xbb\x1a\xfe\x38\x1a\xc8\xef\x64\xd5\xcf\x01\xd6\x27\x84\x27\xb9\xd2\xdf\x8b\x50\xb9\xc9\x30\xf9\x26\xc7\x29\x24\xb3\x90\x84\x11\x48\x82\x72\xc5\xc1\xbe\x7c\x21\x6a\x90\xfb\x6f\x02\x84\xdf\x6f\x38\x9a\x68\x7c\xa3\x65\xf4\xfe\xc3\xf5\xc1\xeb\xd3\xe3\xf1\xe1\xf1\xe9\xe9\x88\x6c\x2b\x59\x76\x78\x21\x46\xe6\x90\xa2\xb1\x4f\x9b\x10\xd5\x1b\x10\x4b\x4d\xee\xe1\xdb\x51\xd9\x5c\xfc\x08\xda\x58\x8a\x92\xf4\x5b\x88\x10\x3e\x13\x64\x38\xda\x0f\x7b\x78\xa6\x94\x44\x6f\xc0\xed\x1c\x85\x67\x42\xe5\xfb\xed\x5f\xaa\x48\xc8\x9a\x14\x09\x59\xcb\xc1\xbc\x7c\xf8\xa6\x91\xfa\x51\x3a\x79\xd3\xca\xc9\xdb\x0b\x6e\x59\x53\xb8\x5a\x7b\x5a\xa8\x09\x64\x47\xf5\xf3\x2c\x5e\x50\x9c\x35\x84\x9a\x60\xb3\xd0\x01\x41\xa1\xd6\x9b\x54\x83\x27\x37\x30\x74\x6c\x02\x34\x84\x1c\xd7\x0a\x45\x7d\xb8\x67\x48\x0d\x09\x67\xf6\x2a\xc3\xc6\x78\x0b\x76\x52\xa8\x3b\x36\x72\x87\x0d\x99\x61\x13\x1f\x29\x8d\xb1\x3c\xc2\xfb\x5a\xa9\x96\x1e\xbb\xb3\xa2\x36\x29\xf0\x06\x09\x0c\xa6\x23\x7b\xd4\x6d\xd1\x7c\xa4\x2d\x9a\x8f\xb4\x36\xfe\x4a\x59\x21\x87\xb4\x51\xc9\x62\x9b\xe2\xd8\x4c\xed\x9c\x3d\x10\xdd\xae\x30\x6e\x5b\xeb\x75\x30\x65\xf7\x81\xde\x02\xb2\x76\xcd\x8a\xaf\x39\xf1\xe3\x44\xc9\x4c\x8d\x1a\x4e\x03\xba\xae\xe1\x2c\x65\x3b\xc2\x60\x3c\x3e\xb8\x7c\x7b\x35\x1e\x07\x16\xcc\xd6\x7c\x86\xe0\xf9\xee\xb3\x67\x0b\xe6\xf9\xb3\xf4\xcf\x04\x44\xa8\x9f\xd6\x3c\xbc\x4d\x31\x93\x78\x29\x56\x9c\x86\x10\xf8\x1e\x73\x64\x2f\x93\x19\xb0\x96\x0c\xc7\x7e\xfc\x16\x70\x98\x51\xda\x85\xa8\xea\x35\xe3\x3c\xa8\x62\xb5\x63\xfa\x30\x9d\xe6\x6c\xea\x9b\x7e\x96\x00\xab\x35\xed\xc6\xaa\x9b\xf9\x7e\x98\x93\xa7\x02\x49\xb6\x57\x2a\xc6\x36\x17\x67\x24\xc7\xa5\x4e\x65\xcd\x7d\x52\x3e\x43\xca\x35\xb4\x7c\x30\x8d\x51\xb7\x1b\x5b\xeb\x26\x54\x33\x4b\x5d\x91\xf7\xb1\x98\x47\x0b\x96\x86\xb1\xf5\xc0\x68\xe8\x53\x27\x23\x4f\xc5\xcb\xda\x62\xf7\x90\x84\xf4\xf6\x93\xef\x56\xfb\x89\xd9\x3c\x26\x24\x1e\x26\xa3\x4e\x36\x9c\x54\x7a\x1c\x8b\x50\x8a\x73\x9a\xfe\xbd\xa9\x9d\x46\xc7\xef\x2f\xae\x3f\x8d\x0f\x2e\x2f\x0f\x3e\xe9\x59\xce\x80\xe6\x5b\xf4\xa0\x98\x61\x7b\x84\x4c\xa3\x7b\x46\x1f\x70\x4e\x44\x65\x72\xe5\x9e\x55\x6d\x3a\x4e\xc8\xa5\x08\x57\x68\x3f\xac\x1a\xa9\x78\x94\xca\xa6\x01\x02\x9d\x84\x3d\x79\x12\x11\xb1\x29\x2a\x50\xc8\x71\x82\x70\x62\xa0\xe2\x19\x7d\x20\x31\x4e\x86\xb7\x74\x44\x32\x9c\x18\x9f\x71\x87\xc5\x8b\x85\x65\x08\xdd\x6e\x98\x68\xae\x48\xdc\x5b\xc5\xbb\x27\x24\xb7\xb6\x58\x08\xcf\xc8\x33\xea\x57\x2f\x64\xce\x89\x14\xc1\x3b\x6a\x08\xc8\x04\x2b\x2d\x88\x3c\x38\xf7\xf0\x32\x8a\xa7\x53\x0b\x88\x88\xc2\x18\x4f\x10\x9e\x38\x55\x54\xc5\xed\x4f\xab\xa2\xe6\x24\x08\xb6\x09\x99\x18\x26\xd1\x91\x62\x26\xad\x5e\x53\x4d\xca\x1a\x2d\xa3\xcc\xc2\x93\x68\x5c\x72\x56\x05\x8c\x18\x4f\x0f\xb6\xb9\x98\x12\x78\x58\xa0\xfd\xfc\xa6\x20\x45\xdc\x88\x90\xe2\x09\x5e\xe1\x19\x9e\x3b\x84\x4f\x7f\xd2\xb4\x2e\xa7\xdb\x0d\xa7\x4e\x67\xc8\x7d\x0e\xa3\x53\x34\xb4\x63\xde\xde\xa3\xa9\xe6\x8c\xed\xba\x64\x3b\x1b\xc3\x05\x1d\xe9\xeb\xb8\x96\xeb\x1c\x7d\xf0\x54\x7a\x7f\x7f\xf3\x00\x47\x17\xdd\x68\x9c\x11\xea\xab\x1c\xf7\x61\x2e\xf3\x8a\x6e\x30\xc5\x42\xeb\xff\x72\x2a\x4a\x7a\x41\x81\x53\x35\x72\x72\x69\xd4\x30\x61\xf0\x8a\xa4\x91\x43\x64\xc2\x89\xff\x68\x12\xc1\x16\xe9\x38\x0a\x0a\xeb\xa7\xd4\x8a\xfb\x87\xf3\xc4\xdc\x07\x4d\x5a\xb6\x5f\x12\x24\x57\xe4\xb3\x31\x7e\x88\xe5\x1a\x5c\x0d\xf7\x46\xfb\xa0\x8f\x72\x6a\x98\x44\xce\x9d\x76\xc4\x48\x10\xfe\x2c\x22\x7d\x70\x07\x37\x9c\x15\x4e\x11\xc2\xd9\xee\x6e\x61\x34\x59\x9e\x02\x47\x2e\x58\xc3\x7b\xb8\x5b\xb5\x03\xef\x77\xbf\x6c\xc3\xc4\xe5\xa2\xa9\x6b\x89\x36\x1d\x99\x27\xde\x51\xbf\xda\x00\xa5\x3a\x40\xdd\xee\x79\xb9\xd5\xa9\xe4\x19\x02\xc7\x38\xc5\xdc\x3b\x68\x4f\x48\xea\xb5\x32\x6d\x6d\x65\x8a\x3a\x55\x25\xc5\x17\xb4\x12\x7b\x8d\x11\xd0\x02\x39\x76\xda\x98\x6a\x46\xf4\x11\x9d\x61\xe6\x47\x22\xa8\xd7\xa8\x0f\xe4\x33\xd7\x7b\x29\xf1\xeb\xf9\x96\xbf\x1a\x1d\xc9\xbe\x5c\x25\xe1\xab\x52\x10\x4e\xba\xdd\xc4\xd6\x91\x34\xd6\x71\x27\xa0\x5b\x80\xc4\x8d\xf0\x57\xd4\xa8\x31\x19\x24\xef\x0c\xbc\x61\x0b\x62\xce\xe2\xcb\x2c\xa1\x01\x4b\xb7\xd2\x6e\xb7\x5a\x32\x97\x9f\xf0\x58\x84\xa9\x97\xd4\xcb\x9f\x6e\x64\x82\x59\x95\xf9\xa4\x1b\x99\xa0\x66\x28\x2d\x57\x4f\x6a\xeb\x72\x1c\xe8\x91\x8e\x88\xc0\xe5\xeb\xa8\xac\x76\xcb\xe5\x09\x8d\x1a\x86\xbc\x41\x7a\x14\x83\x66\x7d\xe1\x70\x4a\x47\x23\xd4\x87\xff\x25\x6e\xf7\x8c\x50\x5a\xe2\x69\xd5\x31\x08\x45\x75\xcc\x58\x7a\x74\xfe\x3e\x80\x0d\xd4\xdb\xb0\x2a\x83\x53\xf9\x6a\x98\x36\x74\xba\xe1\x44\x57\x6b\x14\xf4\x1c\x86\x20\xd5\x3f\x6c\xc8\x29\x56\x66\xc2\xa0\x9e\xf4\x6e\x41\x5e\xbe\x43\x9f\x0a\xc9\xa9\x79\xb7\xbb\x6d\xaf\xa7\x54\x9c\xaa\x14\x19\xb3\xc6\x4b\x21\xf9\x51\xb9\x01\xa4\x74\x99\x85\x85\x02\x09\xee\x61\x21\x89\x51\x1b\x3f\x33\x9a\x87\x99\xfd\xb6\x57\x19\x0d\x0f\xf8\xb5\x61\xa4\xfc\x8d\xbf\x60\x0d\xf3\x51\x22\x4a\x55\x56\xb9\x18\x7f\x9b\x34\x64\xda\x6c\x58\x50\xbb\x21\xcd\x9a\xac\x0c\xbe\x8a\x6a\xea\x1d\xde\x4c\x15\x2d\x37\xb3\x65\xf7\x65\xb8\x97\x75\x0a\x98\x13\x51\xda\xef\xdd\xa4\x1f\x51\x11\xb3\x24\x57\x71\xfe\x58\xac\x47\xa3\xbf\xdd\x2b\xbc\x1b\xaa\xd3\x2f\xcd\xbd\x57\xa8\x2b\x8a\x37\x75\xc3\x88\x5e\xc9\x30\xa2\x57\x36\x8c\xe8\x95\x0c\x23\x7a\x55\xc3\x88\x5e\xd9\x30\xa2\xf7\x45\x86\x11\xbd\x26\xc3\x88\x3f\xd4\xc5\xf5\x6f\x02\xbf\xae\xeb\xb1\xed\x65\xb1\x14\xc0\x8c\x02\xa6\x2c\x9f\x9b\xab\x62\x75\x10\x36\x97\xc5\xe6\x8e\xfa\x0f\x61\xec\xd4\x24\x8b\x74\x86\x03\x38\x26\xd9\x20\xf3\x0f\xc7\x06\x65\x5a\xdd\x77\xbb\xf7\x24\xc6\xa5\x23\xb9\xb9\x7d\x86\xab\x69\x7d\xe1\xac\xae\xc7\x9f\x64\x23\xfb\x14\x97\xdb\xd7\x17\x58\x9f\xd1\x39\xb6\x1a\x84\x14\xfb\x27\xe0\xfe\x1b\x51\x3a\xb4\xc7\x45\x81\xdf\x3d\xab\x35\xdd\xac\xb9\xf4\xaf\xd2\xbf\x0e\xe2\xbf\x49\xe7\xe3\x94\x16\x35\x35\x45\xf5\xd2\xfb\x79\x9d\x05\x6f\xd1\x59\xf0\x9a\xb5\x46\xab\x1d\x8b\xe7\x2c\xe9\x56\xbb\x9a\xf0\x2f\x3a\xfd\x30\x7b\xfa\x61\x5a\xe8\x85\xf3\x0b\xb3\xe7\x17\xa3\xe8\x69\x3a\xc6\xb0\x16\xa1\x9f\x7d\xd9\x31\x86\x6d\x3e\xc6\x60\x7b\x80\x61\x0a\xa3\x33\xc3\xb1\xf2\x07\xff\x4d\x20\xfc\xe1\x39\xfb\xa7\xde\x17\xd9\x3f\xfd\xf5\xcb\xfc\xe7\xe7\xac\xe5\x1d\xc1\x52\xed\xa3\x0b\x8e\xbb\x92\xef\x75\xca\x66\x27\xfa\xb2\xf9\x21\x7a\x73\x70\x78\x7d\x7e\xf9\x69\xfc\xe6\xfc\x52\xc3\x71\x74\x6a\xcb\x91\x47\xb3\x55\x92\xc8\x39\xd4\x08\x31\x7b\x3d\x54\x5e\x7c\x1f\x44\x75\xc5\x72\xb3\x62\xd5\x05\x5b\x83\xa2\xb7\x41\x16\x6a\x38\xc9\x81\x6c\x03\x7e\x57\xbf\x3f\xab\x79\x56\xd4\xa7\x39\x5c\xc9\x38\x6b\x93\x09\x0a\x84\x5a\x6c\x32\x0d\xa2\x0f\x5b\x3a\xac\x08\xa8\x35\xaa\xa5\xd6\x31\x4e\xca\xce\x04\x5e\xd2\x42\x09\x0b\x2d\x2e\xb7\xb5\xd6\x62\x61\x5c\xcd\x9e\xb5\x03\x02\x0a\x56\xda\x2d\x58\xc2\x6a\xf2\xd8\xb4\x64\xc6\x72\x32\x45\xa1\xc1\xbe\xa1\xe9\xbd\xe1\xf6\x3c\xcb\x44\xc5\x19\x5d\xf1\x6f\xcd\x90\xe7\xd9\x2a\x99\x5e\xd2\x59\xb2\xca\xe7\x26\x2a\x82\xb3\x65\x21\x1a\x26\x4c\x63\x7f\x65\x4b\xd9\xb4\x9c\x3c\xc5\xc9\x43\xfc\x28\x85\x27\x2d\x5d\xc9\x6d\xb4\xa3\xeb\xa8\x02\xe3\x2b\x7f\xd4\x84\x70\x7f\x57\x99\x90\xc4\x63\x6a\x33\x85\xf7\xaf\xf2\xbe\x8f\x59\x8a\x42\xfb\x99\xcb\xe9\xbc\xe5\xf1\x02\xcb\xd3\x47\x86\xe3\x50\xe0\x27\xbd\xe8\xfa\x0c\x7c\x7a\xaf\xd8\x4d\xc2\xd2\x5b\x0d\x1d\x8c\x27\xa8\x33\xcd\x9e\x28\x99\x69\x2f\xee\xe2\x61\x2e\xab\xd9\xa6\xca\x87\x5c\xab\x39\x3c\x67\x6f\xe5\x3e\xdf\xd4\x76\x3d\x7b\xd3\xc8\xc4\x79\x08\x57\x48\x1b\x83\xb4\xba\xc6\x6f\xc2\x14\x80\xd9\x20\x04\x68\x65\xb3\x55\x94\x76\x8c\x77\x26\x51\x16\xd6\xcd\x9b\x9c\x9e\x9b\x6e\x7f\x52\xa1\x16\x67\xbf\xd5\x30\xed\xba\xa7\xfa\x95\x71\x1b\x20\x10\xb8\xde\xb3\xe4\xed\xf0\x6e\x57\x28\xb3\x64\x6b\x13\xec\x8c\x9c\x8d\x05\x30\x24\x52\x06\xc2\xa1\x1c\x1d\x45\xd6\x6f\x05\x58\x1c\x5b\x1f\x2e\xef\x5a\xed\xad\xb3\x09\xa2\xa8\xf3\x56\x81\x28\x4e\x68\x28\xf0\x9e\x27\xc9\xfd\x68\x2d\xe5\xbe\xd1\xee\x1e\xf2\xf7\x4f\x82\xf4\x3a\xab\xe8\x26\x9e\xdc\xdd\xac\x78\x4a\x79\x94\xa5\x61\x00\x4d\x6c\x81\xf2\xea\xed\xd3\xef\xde\xda\x3b\x37\xba\xb3\x83\xde\x8a\x21\x1d\x45\x63\x63\xf0\xed\xc8\x38\x94\x27\xdb\x5a\xe1\x34\x9d\xbe\xb8\x68\x36\x0b\xb7\x75\xf1\x2c\xff\x28\x8b\x0d\x11\xe8\xe6\x7f\x12\xdf\x3f\x46\xc7\x67\x1f\xa3\xf1\xe5\xf1\xe5\xf1\xd9\xd1\xf1\xe5\xf8\xf4\xfc\xfc\x62\x7c\x7a\xf2\xfe\xe4\x5a\xfb\x41\xc8\xbe\x61\x95\xdb\x8e\x32\xf6\x9c\x23\x58\x3a\x93\xc2\x2b\xdd\x52\xd3\xc7\xd2\xdb\x2d\x96\xea\xb6\x83\x99\x30\x15\x74\x22\xe8\x34\xb0\x2a\xbb\x9f\xc4\xce\x4e\xb9\x43\xbf\x65\x2c\x05\x65\x3b\xfe\x51\xa0\x02\x6a\xf4\xba\xe6\x2c\xbb\xbe\x11\x86\x1c\xbf\x11\x92\x82\xb2\xe4\x9e\x76\xf4\x44\xb4\x95\x48\x51\x51\xc8\x21\x84\x89\xfa\x65\x23\x5b\x33\x5a\xb9\xda\x85\xf4\xdf\x1b\x2f\xa4\xff\x5e\xf2\x15\xfe\xfb\xa8\xe9\x2a\xfb\x1f\x8d\x39\xff\xe1\x5f\x65\xff\x63\xd4\x9f\x47\x93\x84\xd1\x54\xbc\x5e\xb1\x64\x4a\xb9\x62\x5a\x63\xb9\x82\x34\x93\x1c\x73\x3f\x30\xb9\x30\x01\x12\x19\x7d\xb8\xa4\xb7\x2c\x17\xfc\xd1\x88\xce\x63\x39\x49\x2c\xa5\xd3\x37\x19\x3f\x3a\x7f\x6f\xe4\xdd\xb1\xcf\x3d\xbd\x32\xc1\x55\x47\x3d\x96\x22\x21\xef\xee\x59\x2c\xc7\x4b\x33\xaf\x97\x90\xde\x65\xa7\x8b\xec\x9e\x4e\x2f\xcb\xa5\xdc\xa8\x2e\x10\xb6\x89\x1f\x49\xb9\x32\x9d\x9e\xc3\xce\x03\x0a\xf4\xba\x8c\xca\x4a\xec\x8a\xcd\x42\x4d\xa8\x07\x17\x17\xa7\x27\x87\x07\xd7\x27\xe7\x67\xe3\xeb\xe3\xf7\x17\xa7\x07\xd7\xc7\xe3\x9f\x2f\x0f\x2e\x2e\x8e\x2f\xbd\x58\x2f\xa5\xcb\xa1\xa5\xc0\x4f\x65\x69\xaa\x2c\x1f\x15\x00\x58\x42\x1f\xc2\x16\x8f\xab\x3f\x71\x35\x9b\x1a\x31\x9d\x35\xf9\xda\xb0\xc6\xfb\x3c\x6b\x20\x39\x65\xf7\x41\xa1\x2e\x38\x5f\x66\x58\xbd\x59\x62\x7f\xa9\x7d\x35\x7b\x81\x7d\xb5\x90\xc9\x36\x2a\xb9\xd1\x93\x68\xd6\xc6\x95\x35\x6e\xd5\x44\x6c\x0a\xd6\x57\x25\x57\x53\x04\x8e\x1b\x0b\x51\x86\x0f\xba\x15\x21\x55\xc2\x22\x66\xa5\xf0\x86\xee\x03\x2a\xac\x54\x39\x56\x34\x77\x44\x81\x5b\xa9\x36\xc2\xfe\x3e\x59\x71\xfe\x88\x42\x86\x34\x08\x91\x4a\x77\x9d\x35\x9e\x9b\x20\x8c\xbc\x78\x71\xa1\xdc\x14\x5a\x4b\xd8\x72\x1f\xa0\x23\x78\x09\x4d\x90\x5b\xbf\x0b\xc5\xc4\x1a\x6d\xf6\x21\x2c\x20\x7d\xd8\xfa\x28\x42\xc3\x26\x68\x7a\xdf\xc0\x30\x70\x8a\x39\x66\xe5\x05\x6a\x7a\xa0\xb8\xb6\x5c\xc4\xa1\x72\xcb\x36\x42\x45\xcd\x4b\xa8\x79\x6b\x82\x1c\x92\x05\xd1\xe7\xa2\x2e\x29\x59\xb0\x53\x67\x5d\x43\x31\x52\xc2\xc7\x2a\x6d\x2c\x6a\x4a\x13\x2a\xe8\x56\x43\xc6\x7a\xf1\x23\xd5\x20\xc9\x99\x2a\xba\xa7\xca\x69\x4e\xf3\x43\x05\x04\xaf\x8d\xcc\x69\x9c\xae\x96\x72\x28\xe4\x89\xd8\x88\xad\x15\x86\xda\xed\xd2\x92\x66\xa9\x6a\xe8\x2d\xeb\x2f\x97\x54\x65\x64\xdb\x15\x86\x8c\xcc\xd6\x2d\x88\xc7\x97\x2d\x0a\x2a\x3c\x59\xa7\xa8\xdd\xdd\x7d\x43\x2b\x62\xc8\x47\x9d\x54\xc9\x76\x21\x05\x30\x14\x6f\x87\xb6\xf2\x0b\xc7\x7b\xe0\xef\xde\x28\xdb\x55\x9a\x62\xac\xc9\xc6\x75\x71\x6e\x0c\x26\xe6\x07\x49\x02\xfc\x3e\x44\xe6\x0c\xf2\x3a\x5b\xa5\xd3\xbc\x89\x31\x0d\x1f\x6d\xa0\xf9\x27\x75\x57\x6a\x42\x02\x89\xa8\xf4\x2c\x65\x6d\xc6\x73\x71\x96\x4d\x25\x33\xb2\xbf\x43\x84\xe5\x9e\xa4\x5f\x9b\x9f\xa1\xea\xcc\xa4\x85\xf1\x54\x30\xda\x69\x7a\x0f\xa1\xb6\xd4\x86\xb3\xa4\x1c\x84\x92\x3c\x44\x15\x57\x5f\x75\xa6\xf2\x56\x43\xbd\x47\xe5\x19\xe9\x58\x7c\x3c\xb0\x56\xe7\xf6\x9e\x42\xc7\xd1\xc7\x6f\x85\x41\x16\x43\xb8\xba\xd4\x72\x4f\x9c\x0d\xab\x35\xe7\xad\xb8\x39\x15\xca\x90\x8b\xdd\xa2\xe3\x7a\x9b\x31\x66\xf2\x84\x34\xcd\x9e\x78\x59\x4a\xb6\x17\x74\x2a\xc1\xcb\xec\xbf\xe0\x1a\xd0\x89\xf7\x48\xe3\xa5\xc5\xde\x4d\x56\x4e\xe2\xf2\x91\xad\x93\x7d\x4f\x68\xb7\xbb\x9d\xaf\xd7\x61\x6c\xce\x67\x51\xf5\x78\x46\x72\x5c\xcb\xa9\x6c\xc1\xf9\x2a\x3d\xf1\x25\x7e\x14\xc6\x58\x6b\x7e\x02\xc9\x19\xd9\x7a\x9d\xa3\xa2\x68\x10\x5b\x92\xe8\xf0\xc3\xe5\xe5\xb1\xf2\xd8\xb1\x5e\x20\xf6\x4c\xe0\x1d\x08\xd4\xf1\x8b\xad\xd7\xa6\xe3\xdf\x53\x65\xce\xb0\x6f\x62\x8a\xeb\x85\xb6\x92\x1b\x77\xb6\x84\x03\xa1\x3b\x22\xac\x50\xc7\xae\xb0\x99\x3c\x21\x58\x40\xf2\xd2\x82\xed\x76\x3f\x09\xe3\x36\x29\xda\x28\x80\x94\x65\xdd\xed\x66\xc1\xcb\x2c\xd6\xba\x40\xd6\xd3\x90\xca\xdb\x7b\x2a\x76\x50\x95\xd8\x42\x84\x29\xd9\xee\xd9\x61\xa0\x76\x99\x3f\x3f\x76\xd8\x21\xad\xc3\x5a\x2a\x9d\xc4\x0c\xc2\xbf\xfc\x60\x46\x16\xb5\xcb\x8d\x05\x2c\xdc\x32\x23\x21\x8d\x47\x18\x9f\xda\x9b\x70\x8e\xe9\x50\x78\xa7\x91\xa2\xbe\x04\x0c\xfa\x69\xaf\x2a\xea\xd2\xe6\x89\xa9\x6f\x6d\x7e\xc3\x4a\x27\x0b\x93\xf4\x3c\x9d\x50\xa3\x8f\x0c\xfc\x00\x24\xdc\x96\xa1\xca\xd6\x47\xae\x36\x65\x8d\xcf\x7d\x9b\x89\x68\xbd\xae\x4d\x8d\xda\x7d\xeb\x93\x68\xc8\xac\xa9\x17\x66\x5e\xf4\x01\x50\x23\x2c\x6f\xe0\x4a\x1a\x87\x42\xcd\x23\xe5\xe4\x17\xa5\xbb\xfb\xe1\xcf\x9a\x30\x3e\x6b\x6b\xfb\x12\x17\xf6\x48\x72\x3f\x1a\x95\xc4\x1c\x5a\x16\x0f\xf0\xf6\x1e\xa6\x91\x91\x77\x6a\xd1\x7c\x1b\x1c\x6d\x6b\x9e\xff\x07\x93\x09\xcd\xc1\xc5\xff\xbf\x94\x52\x43\xe5\xf9\xaf\x2d\x96\x03\x1e\x40\x9c\x24\xd9\x03\x9d\x6e\xb1\x74\x2b\xcd\xd2\x5d\xe6\x34\xc2\x5b\xde\x9d\x55\xbe\x15\xe6\xab\xc9\x7c\x2b\xce\xb7\xde\xc4\xb9\x78\x9d\x65\x02\x45\x81\x52\xff\xfe\x02\x3e\xc8\x27\x29\xe5\xc2\x0e\xf4\x0f\x6a\xa0\x7f\xfd\xbf\x67\xa0\x7b\x5f\x34\xd0\xb4\x04\x0f\x50\xf7\x78\x2b\x0d\x8c\x1d\x51\x3b\x3c\xbf\xaa\xe1\xa1\x9c\x3c\x69\x40\x48\x5e\x13\xa7\x4b\x3a\x67\x5a\xba\xe7\xa9\x5d\xf0\xe8\x00\x50\xbc\x28\x30\xe7\x7f\xee\xde\x46\x01\x6c\x88\x2f\x33\x28\xdf\x7c\xbc\x53\xad\xfb\xf3\x5e\xb3\xda\xd3\x34\xe5\x5f\xe6\x6a\xfd\xcc\x8d\xe2\x17\xba\x5a\xef\x3d\x7f\xd5\xc0\x78\xb3\x05\x35\xe3\xda\xc6\x99\xe3\xb8\x75\x96\xfe\x85\xde\xd8\xcf\x9f\x89\x53\x5e\xe0\x74\x83\x31\x6c\xd9\xe0\xb5\x64\x49\xd9\xa9\xdb\x43\x32\xae\x8d\x20\x9f\x8c\x55\xac\xf6\xd1\x96\x87\xca\xc7\xa5\x9c\x60\xcf\xae\x0d\x62\x29\x82\x9e\xb3\xf5\xbe\xcd\x0b\x3d\x51\x35\x92\x8c\xcb\x46\x72\xaa\x30\x9c\x13\x63\x7b\x19\x3e\x4d\xd4\x84\x7a\x46\x8d\xb2\x09\xb1\x15\xb1\x2c\x55\xaa\xf7\xd8\x84\xba\xef\xe7\x45\x9b\x23\xb6\x73\x51\x54\x49\xfd\xb3\xfd\x2f\xa1\x40\x5f\xe8\x9b\xbd\xc1\xd6\x03\xc2\xf2\x72\xaf\xaa\x7d\x17\x1d\x94\x9b\x38\x94\x16\x7e\x72\x93\xf7\x76\xf5\x16\x5f\x16\x06\x4b\x8b\x73\x84\x73\xad\x1f\xa0\xf1\xdd\xfb\x78\x89\x57\x16\x4c\xf9\x16\xac\x35\x14\x41\x9d\xcf\x9c\xfa\x39\xe1\xa5\xeb\x98\x1c\x8c\x8c\x34\x7f\xf0\x00\x86\x38\x10\xb9\x3d\x24\xd2\x7d\xa5\x0d\x15\xfb\x20\x2e\xe6\x1c\x6c\x1f\x85\x35\xf8\xcd\x75\x1c\x74\xd4\x11\x64\xc5\xe5\x40\xfa\x1e\xe7\x09\x0f\x9f\x66\x3a\xc6\x6e\x0b\xdf\x8f\x39\xf0\x60\x13\xa6\x4f\xae\x53\x1d\x02\xd6\x0b\x3a\x90\x71\x12\x47\xba\x7f\x26\x92\x1e\xcb\x4d\x04\xd5\x5a\x60\x0b\x35\xc6\x75\x15\x97\x8d\x9b\x6a\xc3\x89\x3c\x2e\x69\x81\x0a\x84\x70\xc6\xbf\x28\xbc\xa2\x0a\x9f\xa9\x36\x84\x19\x27\x19\xc7\x73\x4e\x7e\x6f\x42\x36\xbf\x89\x92\x6c\xa2\xf9\x83\x51\x11\x23\x3c\xe5\xcf\x5c\x71\x6a\x7d\x33\xdf\x0c\x09\xb6\xc9\x80\xde\x3b\xe4\x9b\xc2\xcc\x0f\x79\x8e\x94\xbc\x41\x6f\x59\x00\x87\x9a\x7b\xf1\xb4\xb6\x78\xb5\xe4\x30\x35\x47\xf0\xd6\xcd\xe3\x0b\x6b\x62\xb3\xb0\xa9\x96\xa8\xb4\x5d\x34\xa0\x1d\x73\xd7\x08\x03\x38\x6a\x2a\xb5\x6c\x41\xef\x51\x0d\x40\xb7\x4c\xdb\x7e\x14\xa5\xdd\x8b\x55\x77\x2f\xed\x9a\xa1\x1c\xa2\x37\x5c\x67\xda\xee\xfa\xe9\x35\x06\x90\x29\xa4\x8e\xc5\xf3\x5c\x31\x26\x47\xa5\x20\xcb\x46\x5b\x14\x7b\x1b\xcb\xb4\x99\xdf\x41\xff\x2b\x45\x5f\xc4\x5c\xb0\x38\x79\x79\x71\x3a\x83\x2e\x06\x6e\xbb\x96\x5f\xb8\xd7\xef\xfd\xa9\xbd\x7e\xef\x8b\xcd\x0a\x1c\x27\x5c\xf0\x56\x07\x93\x28\xce\x1f\xd3\xc9\x29\x9b\xd1\xc3\xc7\x49\x02\xb5\xc9\xd3\x58\xee\x18\xe4\xfd\x86\xcc\x53\xcb\xc4\x61\xd1\xde\xf2\x76\x3d\xff\x5f\x23\x3d\xb0\x26\xe9\x81\x35\xef\xc9\x5a\x93\x87\x65\x9e\x29\x4d\xe8\xad\x94\xad\x33\xc2\x3d\x57\x85\x58\xca\xb8\x29\xc9\xac\x97\xa8\x71\x5c\xd7\x63\x6f\x68\x28\xac\xee\xe9\xca\xa0\x1b\xa7\x25\x95\xf9\x23\x0f\x19\xce\xb5\xed\x09\x6b\xdd\x32\x61\xaf\xb4\x0d\xaa\x5b\xa9\xc7\xfc\x36\xef\x68\x6f\x09\x49\x2b\x00\xc8\xdc\xf1\x5d\x1e\x0c\x5a\xab\x6b\x9f\xc2\xf8\x67\xcf\x98\x8a\xda\x4a\xcb\xe6\xa8\x0b\x0e\x51\x8e\x3d\x98\x23\x57\x30\x37\xc5\x6e\xb0\x25\x7c\x41\xb1\x1f\x2a\xed\x55\xc5\x4a\x6e\x98\xa5\xa2\x04\x1d\xff\x7c\xb9\xc2\xcb\xe7\x0a\x6a\x15\x80\x5a\x4a\xd1\xf3\xf6\x8b\x91\xc1\x2a\xa5\x9a\x62\x37\x8b\x29\x72\x6d\xd8\x0a\xd0\x40\x1b\xc5\x6c\xba\xe2\x69\x68\x98\x83\xdf\x2e\x5f\xab\x71\xfc\xe4\x2d\x71\x51\x5e\x79\xee\x4b\x61\x9a\xda\x6a\x74\x23\x09\x2a\x12\xf1\xad\x9e\xc9\x76\xa0\xab\xb6\xbb\xb0\xaa\x2f\x63\x03\xd8\x50\xcb\x31\xa9\xea\xe2\xa8\x8e\x49\x08\x3f\xb6\x8a\x03\xc6\x7a\x4d\xdb\x3d\xa8\x21\x7a\x11\x06\x4e\x79\xc1\x90\xb4\xc9\x36\x69\xb3\x01\x86\x25\x15\x51\x33\x9b\x53\x77\x00\xb6\x00\x8f\x33\x98\xed\xe0\xa6\x7a\x4c\xb6\xbd\x78\xde\x3e\xd3\xf6\x93\x37\xdb\x53\x9a\xa3\xf6\x2d\xb7\xb7\x9d\xde\xd0\x7b\x43\x5c\xb7\xd0\x7c\x99\x15\xa6\x67\x7c\x59\x92\x13\xb0\x69\x19\x9c\xdf\xc7\x7f\x6a\xc7\xfb\x52\x20\xb1\xea\x8e\xb7\xf7\x3c\x90\xd8\xc3\xbf\x7c\x03\xfa\x02\x7b\x50\xcf\x05\xe0\xbf\x03\x93\x6b\xcc\x9b\x4e\xa7\x15\x40\xac\x86\xb3\xa2\x4d\x31\x8f\xce\x3e\x9c\x9e\xba\x0b\xd0\x2f\x3c\x21\x7e\x09\x22\x17\xc2\xc7\xbc\xe6\x09\xde\x0c\xa4\xf5\xc0\x0b\xfc\xb9\x4d\x96\xac\xb8\x3e\xf6\x90\x27\xf4\x5c\x71\x7f\x0a\x5c\x42\x10\xcf\x21\x31\x08\xe7\xf6\xce\xc6\x41\x45\x68\x28\x11\x85\xe7\x96\x7e\xbf\x37\xa8\xe1\x3d\xc8\xfc\x7b\xd6\x8b\x56\x41\x3c\xf4\x01\x7b\x44\x66\x78\xd5\x9c\xe1\x55\x35\x03\x73\x42\xd6\x81\x27\x64\x95\x4e\x6d\xb4\xd6\x45\x8b\x6c\x10\xec\xda\x84\xfd\x40\xc5\xfb\x9f\x31\x9a\x4c\x03\x57\xec\xf9\xb3\x63\x60\x4a\xf3\xd0\x47\x70\x4a\xf8\x90\x7b\x10\x4a\x8c\x54\x3a\x5c\x1e\xa1\x6a\x67\x53\xd4\x67\x4a\xd9\xce\x0c\x0a\x06\x43\xfd\xc0\x6b\xd6\x5d\x49\xa4\x74\xef\x0f\x79\xc5\x7a\x19\x67\x9d\x12\x9c\xac\xf3\x5a\x1f\x7e\x1a\x21\x46\x38\x80\x1f\x7d\x1a\xb9\xdb\xb2\xd8\xa6\xe8\x38\x77\x61\x12\x0f\x42\x46\x04\x38\xd1\x29\x05\x7c\x2e\xe5\x12\xfd\x73\xc8\x47\xa8\xef\xd7\x01\xde\x9d\x8c\x80\xb0\x68\x8f\xf7\x8d\x37\x29\x55\x83\x24\xac\x0c\x73\x95\xc7\x30\x9c\x04\x7b\xfb\xfc\x3b\x6a\xd1\x36\x3d\x23\x25\x3e\xd2\xc6\xd4\x4f\x3a\x60\x3d\x93\x9c\x48\x29\x4c\x6f\x68\xd2\x0f\xfe\xdd\x84\xef\x9f\x24\x59\xbe\xe2\x74\x57\x35\x37\xf8\xa2\x40\xab\xca\x18\x44\xe7\xc4\x71\x5d\x45\xb0\xb5\x02\x63\x2e\xcd\x10\xb5\x71\xe0\x90\xe1\x6c\x14\x4d\xb2\x74\x12\x8b\x30\x0d\x05\x42\xa8\xd0\xc0\xde\xd7\x8d\x72\x50\x93\xaa\x43\x61\x53\xaf\xd7\x4d\x71\x3f\xac\xea\x01\xe2\xf3\x05\x41\xdf\xa2\xa5\x78\x0b\xf8\xb2\x7c\xf0\xf0\xd6\x81\xa1\xd9\x45\xbc\x0c\xaf\x39\x52\xe6\x68\x41\xe0\x19\x12\x5e\x70\xbb\xb3\x7b\x40\x26\x5b\x4a\xb7\xf0\x9e\x13\xf9\xdd\xd5\x74\xf4\xec\x32\x69\x88\x20\xeb\xdd\xa7\x79\x40\x21\x00\x8a\x26\xa5\x78\x6d\x50\x8d\x70\x56\xa7\x92\xd8\xa3\x92\x0c\xe1\x9c\xf4\xf6\xf3\xef\xb2\xfd\x7c\x67\x07\xc5\xc3\xdc\xa7\x92\xdc\xdc\xf1\xb7\xac\x81\x81\xfc\xa3\x27\x8f\x63\x66\xe6\x2c\x96\x2c\x06\x14\xe8\x46\x11\x83\x87\xef\xb9\x9d\x52\x86\xe3\x12\x40\xfc\x59\x59\x53\xa6\xa6\x4e\xac\xd7\x00\x7e\x24\x06\xd5\x8d\xa1\x5f\x73\xc4\x07\xcc\x83\x0a\xaa\xd1\x60\x05\xd2\x5c\x09\xe8\x8b\x1a\xd0\x3a\x00\xeb\x68\xbf\x0d\xb0\x87\xb7\xfd\x16\xb0\xa1\x3c\x5b\xf1\x89\x17\x7c\xc1\xe0\x0a\xb9\x37\x1c\xa7\x60\xd4\xe0\x41\x0b\x29\xf4\x18\x97\xa4\xda\x2f\x2b\x5b\x41\xba\x17\x07\xf3\x70\x52\xc0\x66\x08\x30\xcc\x00\x04\xec\x4b\x2e\x8c\x5c\x10\x03\x28\x96\xe5\x87\x59\x9a\x0b\x08\x8a\x01\x73\xc6\xbd\x1d\x85\x3e\x6c\x09\xc8\xb1\x31\x5e\xda\x66\x78\x1d\x33\x60\x46\x00\x2e\x0f\x98\x31\x8d\x30\xc3\x63\xcc\x23\x4a\x03\x5f\xd9\x23\xb6\x52\x85\x28\x1f\x0a\x72\xa6\xfd\x60\x2a\x73\x87\xd3\x5a\x3c\x21\x18\x34\x7d\xd5\x5d\x99\x33\x2d\x30\xbb\x99\x45\x4e\xb5\x5c\xe0\x74\xf8\x76\x54\x22\x2a\xa7\x89\x6e\xaa\xda\xa9\xdb\x5b\xbb\x61\xe2\x0a\xfe\xa4\xc4\xbf\x93\x4d\x34\xbb\x39\xb8\xa2\xa5\xdd\x1b\x1e\xa7\x93\xf9\xcb\x63\xc5\xb0\x76\xba\x62\xae\xb0\x11\x52\xcb\x7f\x4a\x84\xcc\xa1\x10\x99\x24\x4b\x50\x88\x4c\xe9\x4b\xe2\x38\x36\xd0\x9f\x07\x97\xe6\xb9\x11\x77\x9a\x88\x92\xa1\x81\x55\x51\x0c\x78\x3f\xd5\x24\xc9\x94\x93\xf6\x17\x80\x3c\xc9\x5e\x38\xfc\x26\x87\xf4\xa4\xa2\x02\x97\x70\x9e\xe0\x8d\x1d\x83\x32\x15\x51\x45\x45\xd4\x0b\x5d\x0b\xf3\x68\x27\xed\x94\x97\x75\x32\x8e\xf1\xef\x87\x82\x4c\xb2\x34\xcf\x12\x8a\xa2\x24\xbb\x35\xe7\x05\x6f\xc1\x29\x07\x42\x5e\xc1\x52\x7a\xff\xe1\x3a\x40\xf8\x8f\xea\xeb\xab\xf3\x0f\x97\x87\xc7\x81\x57\xf7\x6b\xae\xec\xe6\x5c\x9d\x36\xf8\x1e\x9c\x63\x7d\xbd\xd2\x55\xe4\x85\x5c\x0e\xeb\xd8\x2c\xa6\x49\xaa\x4d\xef\x38\x19\x06\x71\x22\x02\x1c\x00\xe0\x67\x80\x83\x05\x15\x71\x80\x83\x89\xe0\x49\x30\xc2\x1f\x38\xf9\xf6\x3f\x27\x09\x9b\xdc\xad\x17\xd9\x2a\xa7\x6b\x91\xad\x26\xf3\x6f\x3b\xcb\xe8\x00\xda\xa6\xd1\xa3\xad\xe1\x21\x9d\xaa\xf7\x39\xb4\xf0\xe7\x26\x43\x44\xaa\x65\xa9\x13\xdb\xee\x67\x0b\x1b\x2a\xd0\xa8\x02\xff\xfe\x4c\x81\xda\x3e\xf1\x25\x05\x16\xf8\xe3\x33\x7a\x05\xe5\x58\x03\x51\xe5\x9f\x7c\x93\x03\x73\xea\x30\xb5\x5a\xfd\x02\x3c\x83\x01\x31\xf7\xdf\xc0\xfd\x63\x5a\xd1\x3b\x98\xb3\xb6\x9b\x53\x92\x69\x26\xb6\x58\x26\x6c\xc2\xc4\xb5\x02\x2f\xd1\x5e\x93\xd3\x6c\x41\xb4\x59\x0b\xbd\xa7\x29\x40\x39\xa9\x15\x70\x4b\xc5\xb1\x79\x13\x7a\xd1\xa2\x56\xcf\xdc\x8d\xd8\x4c\x6d\xe6\x30\xb6\xad\xea\x2a\x32\x4b\x1d\x16\xd0\x7a\x1d\x00\x51\x04\xfa\xde\xe3\xc0\x75\xb4\x51\xea\x71\x22\x4c\x65\x5c\x0c\xa4\x85\xb6\x2d\x6a\xfe\x0a\x96\x46\x54\x12\x41\xe5\xfb\x50\x8c\xaa\x5b\x08\xd5\x2d\xd2\xa3\xd7\xcc\x34\xca\x43\x6c\x36\x30\xdb\x5f\x37\x4c\x00\x65\xa2\x64\xee\x00\x0d\x84\xbe\x93\xd5\xcf\xa6\xea\xbe\xcf\x35\xf4\x15\x4a\x13\x9d\x82\x06\x81\x93\x0a\xad\x98\x8d\xd1\xd6\x0e\x11\x3b\xa1\xa2\x9b\xd5\xcd\x4d\x42\x73\x40\x9c\xd4\xaf\x96\x1c\x66\xff\x48\xc5\x03\x0a\x20\x70\xa5\xfa\xa2\xed\x5f\x7e\xa4\x8f\x39\x5c\x18\x1b\xda\x50\x7d\x04\xa8\x1d\x00\xfe\x64\xd5\x83\x59\xf9\xb4\x6c\xa1\x96\xd4\xef\x0f\x3c\x12\x34\x17\xa1\xba\xb9\x35\x17\x9b\x60\x2c\xc2\xf2\x2b\x39\x8e\xf4\x50\x12\x82\xb2\x27\x26\x41\x50\xe8\x30\x61\x5a\xbc\x8b\xd3\xc7\x00\x7d\x4f\x7a\x26\xf2\x7d\xaf\x12\x63\xe0\x1d\xf7\x83\x0c\xb0\x59\x48\x87\xef\xf8\x90\x8f\x76\x82\x1f\xe9\x63\x30\xea\x76\x15\x4a\xae\x2d\x10\x3e\x22\x1b\x47\xdf\x1e\x2e\x8b\x90\x62\x7b\x05\x8e\xd6\x6b\x05\x72\x6a\x75\xf5\x2a\x92\x83\x3f\x74\x72\x40\xd6\x6b\x1a\xe5\x22\x5b\x5e\xf0\x6c\x19\xdf\xc6\x8a\x4e\x70\xd8\xc3\xea\x9c\xe3\xe1\xac\x58\xea\x29\x13\x3b\x48\xf1\x4f\x70\x14\xa3\x58\x1f\xcd\x72\xb0\x15\x50\xca\xdd\x4e\xc3\x79\x06\x24\xf1\xa6\xf7\x83\x30\x55\xda\x3f\x2e\x77\x03\x9a\x4e\x07\x5f\x71\x6a\x4b\xfd\x53\x9b\x2a\x46\xef\x47\x39\x1e\x3a\xa1\x9e\xca\x43\x5a\xff\x4f\x97\x2f\x4b\x34\xa5\x53\x54\xa0\x3f\x5f\x24\x2f\x95\xf7\xe7\x8b\xf3\x4f\x3c\xb2\xc4\x02\xe1\x04\xb5\x58\x60\xff\xce\x8d\x19\xa2\x72\x50\x6b\xdb\x1e\xb4\xd7\x59\x9b\x27\xe9\x33\x26\x1f\x38\xc6\x2b\xf0\x76\x74\x37\x4b\x13\x92\xa8\xe5\x8f\x67\x24\xf1\x8f\x94\x73\x92\x48\x56\xde\x61\xb3\x70\x66\xf1\x3c\x11\x20\x5c\xcf\xb4\x5a\x2a\x5c\xa9\x9f\x7b\x08\x0d\x3f\x8d\x50\x4c\x56\x4a\xbf\xb1\xf2\x51\x64\x3a\x31\x59\x39\x13\x5c\xbd\x00\xa7\x64\x38\xc2\x4b\xf2\x6a\x7f\xf9\x9d\x29\x7c\x7f\xb9\xb3\x83\xa6\xca\xac\x18\x4a\x5d\x6a\xd4\xa7\x85\x92\x51\x56\x2b\x36\x45\x61\xe9\x1e\xeb\xa3\x3c\x5a\x2c\x70\x8c\xa7\x78\x82\x67\x38\xc3\x0c\xcf\x61\x80\x35\xd4\x4d\xf3\x6d\x46\xb6\x00\x21\x4a\x6f\xa8\x0a\xee\xc3\xec\xe1\x3f\x2b\x83\xff\xb2\x33\x0a\xc7\x81\x14\x7e\x77\xcb\x73\x1d\xd4\xbd\x56\x9a\x12\xee\x06\x3b\xa9\x16\x2b\x37\x98\xa6\x94\x75\x67\x7b\xa8\x23\x86\x9f\x46\xe0\xa6\xee\x6d\xec\x4e\x80\xc2\xd4\xdb\x88\x69\x65\x17\xb6\x9b\x50\xcb\x2d\x0b\x5c\xb0\x88\x17\xc1\x5f\x58\x9c\xcb\x4f\x2f\xba\x33\x30\xd7\xe3\x1b\xaf\x0c\xb4\x82\xbf\x94\xb6\xaf\xf0\xfc\xfa\xd4\x57\xe3\x97\xd5\xab\xe9\xe0\x17\xde\xff\x81\x17\xf8\xc7\x97\xdd\xc8\x54\xe4\x25\xdb\x0a\xdd\xaa\x85\xb9\xfb\xe7\xde\xfd\xcc\x5f\x70\x13\x63\xca\xb5\x7b\xad\xba\x23\xd5\x85\x58\xfb\x81\x92\x80\xae\x96\xfc\x37\x7f\xe1\x92\x37\xbe\x21\xfe\x42\xf7\x6f\x97\x75\x2e\xd7\x9c\xf2\xd4\xe1\xd4\x36\xce\x5f\x6e\x3f\x82\xf6\xc5\x75\x99\xe1\xf4\x59\x62\x73\x57\x7a\x9b\x57\xa5\x59\x8d\x25\x14\x1e\x57\x13\xa1\x76\x64\x3b\xa9\x29\xc8\x36\x9f\xe1\xf2\x78\x6e\x5c\x6a\x16\xe6\xa8\x74\xb3\x6d\x4b\x37\xa7\x32\x5b\x78\x5a\x32\x09\x7b\xf9\xba\xc1\x3f\xfd\x35\x13\x5a\x0b\x11\xf4\xe2\xab\x8e\x86\x11\xdf\x14\x0c\xe8\x65\xf7\x22\xd0\xb5\x5f\x94\x89\xdb\x37\x1c\xff\xa0\x7e\xfd\xc4\xf1\xaf\x4a\x59\x89\x69\x39\xb0\x14\x7f\xb4\xce\x2b\x6d\xe1\xf5\xa6\xec\x3e\x00\x15\xb4\xe7\x19\x3a\x9d\x02\x47\x3b\x95\x47\xa7\x94\xf2\x50\x8b\xfc\x0d\x7a\x61\xbe\xb3\x53\xe0\xa7\x4c\xdf\xac\x21\xdc\xa0\x80\x84\xa2\x06\xea\x24\x00\xbf\x4d\x71\xa8\x1f\xd2\x5a\xb3\x54\x02\xf8\x17\x20\x14\xb1\x94\x89\x52\x26\xbc\xdd\xc3\xdb\x3d\x04\xf1\x91\xf2\x65\x2c\x26\x73\xf5\x99\x36\xbe\x02\xaf\xa0\x62\x22\xdf\x85\xa9\x17\x8a\x5e\x0e\xa3\x48\x9f\x05\x94\x50\x6e\x31\xda\xa6\xc1\xfa\xd4\x57\xce\x82\x92\x77\x09\x77\xf8\x02\x95\xcb\x26\x12\x53\xf3\xff\x86\x67\x8b\xea\xa9\xa9\xe4\x67\xa4\x57\x8a\x31\x30\x75\xba\x63\x1e\xc9\xe1\x86\xab\xa8\xa5\x3c\xe0\xdf\x97\xcc\x55\x3a\xa9\x81\xf8\x97\xa9\xba\xdd\xd0\xfe\x36\x07\xd1\x4a\xa7\x10\x66\x26\x87\x2e\xce\x64\xd2\x8f\xf6\x6e\xb8\x9a\x2f\x33\xf9\x74\xd5\x26\x9f\x7e\x34\xa7\xda\x5a\xbe\x74\xbd\x66\xeb\x75\x36\xa0\x15\xe8\x08\xa0\xa2\x14\xeb\x6a\xfb\x0c\xeb\x82\xfa\x59\xd1\x2f\xa5\xd4\x30\x43\xfa\x22\xa7\xf5\xea\xab\x13\x9b\x06\xda\xed\xda\x34\xd1\xed\xdf\x71\x73\x23\xb5\x89\x4f\xb5\x70\xef\x72\x2b\x37\x85\xaf\x72\xca\x2f\x78\x76\xcf\xa6\x74\x6a\x0c\xa3\x4c\x3d\x4d\xdf\xcc\x61\xbe\xb1\xca\x15\x51\xb1\x09\xd2\x6e\x37\x5d\xaf\xb7\xf7\x2c\xb6\x83\x9f\x5a\xca\x81\x2b\x74\x0f\x90\xaf\x7a\xc4\x75\xd1\x96\x98\xac\x9a\x7e\x1b\x8a\xea\x76\xe5\x3b\xb8\xc7\xc6\x09\xa6\x08\xab\x3c\xe1\xaf\x1c\x0b\x54\xa8\x48\x8e\xe5\x92\xf2\x16\x51\x59\x97\x63\xb7\x8c\xf2\x70\xe2\x52\x21\xd8\x9f\x35\xb3\xd3\xf2\x94\xf4\x70\x9a\x92\x9e\xd3\x72\x95\xc2\x6a\xa5\x3b\x3b\x98\xa6\x03\xaa\x1d\x48\xcb\x8c\x48\x25\xea\x5b\x6f\x7e\x80\xa4\xd2\x64\xb2\x21\xcb\x76\x4f\x1e\xd5\x5b\xbe\x7a\xf7\x41\xb1\xd7\x10\x6e\x1b\x52\x63\x87\xcf\xb4\xa2\x31\xbd\x6a\x42\xd3\x27\x1d\x07\xa5\x95\x1b\x69\x5e\x74\xf5\xe1\xe2\xe2\xfc\xf2\xfa\x6a\x7c\xfc\xf1\xf8\xec\x7a\x7c\x7e\x71\x7d\x72\x7e\x76\x45\xa8\x5e\xd5\xe5\x10\xa2\x1b\xad\x63\x5b\x84\x16\xeb\xf5\x56\x0e\xaa\x54\x35\x35\x2d\xc9\x35\xbe\x80\x22\x64\x49\xcf\xc9\x24\x3a\xfe\x0f\x1d\x94\xb7\xcb\x3e\xdd\x24\xa6\xb8\x88\xb3\x21\xad\xb0\xcf\x10\x61\x39\x69\x96\x1c\x3d\xd1\x1c\x53\x47\x88\xd4\x52\x21\xa6\x95\x85\xb7\xd7\x26\xb2\x34\xc5\x32\x2a\x49\x4a\xae\x26\x73\xfb\x04\x75\x49\x71\x49\xd7\xd6\x69\x68\x6e\xb9\xfe\x6e\x37\x54\x51\x28\x75\x38\xe5\x3f\xdd\x97\x97\x0a\x49\xa0\xdf\xd7\x96\x34\x52\xea\x44\x21\xc5\xc3\xa7\x3b\xfa\xd8\x0f\x26\xd9\x4a\xce\x7f\x1e\xe0\x5b\x2a\xea\xc6\xc2\x4f\xf1\x74\x9a\xf7\x79\x8a\xd5\x7a\xca\xfb\x69\x5a\x14\xc5\x08\x55\x82\x51\xad\x1a\xa7\x1d\x2c\x1a\x86\x74\xd8\x1b\xc1\xb5\x6c\xbd\x6d\xc1\xbf\x07\x3b\xb4\x40\x98\x0e\xf7\x46\x5e\x40\xe3\xa4\x74\x9c\xf6\x4a\xdd\x26\x84\x77\xbb\x76\xa6\x06\x21\x33\xc6\x32\x5a\x11\x4e\x11\x66\x11\x4b\xef\xb3\x3b\x7a\x25\x62\xc1\x26\xaf\x93\x6c\x72\x17\x72\xeb\x85\x88\x50\xbf\x9c\x20\xe4\x08\xe1\x6d\x15\x4e\x72\x92\x3e\x83\xfd\xf7\xdf\x18\x14\xb1\xd1\x53\x67\x96\xfe\x9f\xb3\x65\x6a\xc3\xe5\xf7\x96\x4b\x7a\xcb\x52\x5a\x87\xff\x97\x8d\x61\x13\x1d\x98\xf7\xbf\xc7\xf0\x69\x92\xb6\xb8\xe5\xb8\x18\x02\x2a\xec\x32\xb8\xd0\x01\x5c\xf7\x31\xb4\xde\x0c\xb7\x06\xd1\x47\x1d\x1e\xdd\x64\x99\xd0\x67\x73\xb8\x2b\x20\x3c\xd2\xee\x1c\x6f\x32\x29\x2d\xdb\xf0\x8f\xe5\x8e\xae\xd7\x61\x0f\x5f\x45\xb7\x92\xf3\x83\x9d\xab\x49\xf6\x46\x65\x06\x47\x98\x52\x0e\x2c\xe5\x9b\x45\x36\xa5\xc9\x25\x9d\xb9\x58\x0d\x84\x90\x18\x31\xf2\xa4\x86\xb7\xcf\xb1\x57\x63\xea\x1c\x86\x10\x86\xb0\x93\xca\x97\x27\x45\x58\xc4\xb7\xfd\xca\x31\xa5\xec\x40\x6e\x84\xcc\x15\x89\x7d\xd0\xd3\xce\xf3\x55\x3d\x41\x23\xfb\x79\xd1\x54\x27\x14\x86\x4d\x37\xfa\xb1\xf9\x79\xdf\x5f\x59\x68\x38\xf6\xd5\xa1\x22\x6b\xda\x95\x17\x39\x0e\xa9\xfe\x6c\x8c\x27\x89\x9e\x7a\xcf\xf8\x34\xb9\xb1\x80\x0d\xc1\xf4\xd0\x9c\x69\xa1\x8f\x10\x52\xa8\x05\x71\xd6\x37\x27\x73\x39\xaa\x88\xb3\xe0\x90\x14\xc0\xd7\x00\x33\xe4\xd9\xc7\xce\xab\x9e\x0e\x25\xa5\xcd\x2c\x6d\x32\xea\xb4\xd3\x20\x0a\xcf\x8a\x66\x5a\x43\x84\xac\x06\xbf\x5b\xc8\x5d\x21\xc0\x62\xbd\x1e\x8e\x30\x1f\x39\x46\xa0\x59\x96\xb3\x75\xd5\xe0\x8a\x43\x15\x23\xcf\xc0\x31\x6b\x4c\x66\xcd\x57\x97\x1b\x0e\x5f\xd6\x75\x54\x1e\xa7\x60\x4e\xdd\x0d\xda\x25\xc4\x80\x37\xca\x1e\xe8\x88\x51\x22\x79\xd0\x76\xe0\x8e\x0d\xe2\xbd\xc3\x3a\x83\x77\x47\x3a\x7c\xe5\x26\xf1\x48\x05\xa7\x69\x56\x38\x01\xb4\x0b\xf1\x5b\x63\x54\x4d\xde\xdc\x8b\xca\x3d\x4b\xcd\x0e\x26\x1d\x54\x5a\x49\x88\xff\xea\x88\xce\xfa\x86\x19\xcd\xe3\x5c\x3b\xf8\xaa\x4b\x8a\x40\xaf\xc3\x60\x27\x45\x83\xb0\xda\xd9\x4a\x4f\x7d\x14\x1c\xb9\x20\xe7\x69\x98\x62\x6e\xd1\x01\x74\x32\x6d\x66\x18\xd6\x47\xa9\x71\x30\x75\x88\xb5\x36\xec\xc3\x46\x90\x1c\x2d\xfa\x2f\x9e\x93\x71\x7d\x18\x44\xea\x8e\xd4\x49\x74\xc4\xb8\x78\xac\x18\x40\x6c\x0c\x2c\x5a\x6a\x5c\xd9\xb3\xee\x56\x9f\x84\x14\x32\x40\x6d\xb6\xfd\x7b\xd0\x0a\x86\x63\x4b\x6c\x22\x3f\x99\xfe\x2d\x17\x21\x4b\xbd\x3e\x68\x9b\x83\xa9\xec\x87\x71\xeb\xc7\xf7\xcf\x6b\x20\x14\x46\x0b\x14\xed\x91\xbe\xaa\xe4\x4c\xaf\x07\x4f\xf9\x50\x31\xff\xd0\x8b\x47\x45\x16\xfc\x5a\x9a\x2f\x37\xc1\xb1\x25\x17\x65\x8e\x0e\xd4\xcf\xbe\xed\xbe\x29\xd9\x26\x11\x26\x89\x18\xd6\x7b\x60\xca\x1c\xd5\xc8\xaa\x7d\xe6\x60\x00\x6f\x5f\x3a\x80\x66\xe0\xee\xe8\xa3\x3f\x5c\xf4\x39\x5d\x4d\xa9\x31\xa2\x01\x1b\x54\xbb\x8b\x3d\x3f\x7e\xb5\xdb\xea\x6e\x97\x0e\x4d\x9b\x46\xd5\x48\xae\x8f\xcf\xb2\x63\x13\xf9\xf9\x2f\xe2\xc7\x37\x2f\x5b\x9a\x1e\x0d\x4e\x9d\xb7\x9d\xe3\x15\x92\x55\xa8\xe5\xeb\xde\xbd\x68\xa0\x5b\x06\xb0\x69\xd3\xf5\x42\xf5\x39\xf2\xaa\x1d\x53\x39\x84\xe4\x96\xdb\x7a\x29\x21\x6f\x3c\xcf\x1a\xb9\xb4\x46\xb6\xa9\x3a\xb0\x3c\x71\xc9\x92\xb1\x46\xc3\x4d\x21\x96\x16\x8c\x47\xdf\x84\xe0\x2e\xe1\x52\x3b\x09\x89\x7b\x22\x42\x51\x84\xe5\x91\x84\x2e\xb4\xdc\xc1\x93\xd2\xc1\x5b\xf6\xd0\x85\x42\xb2\xbd\xb5\xb7\xe0\x5b\xce\xd9\x06\xee\xcc\x5d\xa8\x1b\x5f\x46\x81\x4f\x5e\x7b\x0c\x60\x99\x9d\x34\xeb\xbd\x5c\x99\xe0\x4e\x65\x6e\x2d\xba\xb0\x67\x33\xeb\x9d\xd1\x45\x6d\xe3\xb9\x85\x7b\x67\x54\x23\x1c\xf1\x55\xfb\x88\x17\xf0\xb8\xb6\x4c\x52\x07\x0e\xdb\xe6\xe9\x59\x02\x8a\x4b\x23\x4e\x67\x94\x73\xe7\x25\x6b\x7a\xc2\x00\xcb\xcb\xfa\xf6\x80\x14\xc5\x26\x21\xc3\x43\x1b\xc3\x78\x38\xea\x0b\xbc\x4a\x43\x8e\xdc\x8a\x1a\xc9\x25\xe5\x87\x5b\x6e\x0c\x95\x94\x7d\x61\x33\xb3\xd6\x66\xc6\xdd\x6e\x78\x2c\x64\x13\xb2\x7a\x63\x63\x3c\xb4\x0d\x04\xbb\x52\xd9\x34\xd9\x82\xe3\xb4\x04\xc1\xfa\xd9\x5b\x60\xe0\xe9\x6e\x17\x66\xb7\x0b\xc8\xaf\xca\x09\xbd\xdb\x0d\xcc\x4d\x4d\xa0\xe8\xec\x71\x49\x07\xc2\x9c\x7d\xb4\x42\xcc\xf5\xfd\xca\x77\x0b\xcb\xc0\x4d\xdd\xf3\x5f\xef\xcb\x83\xbe\xe7\xdb\x50\x72\xda\x78\x52\x36\x98\x4e\xc7\x46\x07\x7e\xf0\x38\xf3\x01\x96\x64\xbe\x8c\x27\x54\x8a\xb3\x34\x1a\xd3\xcf\x4b\xca\x99\x3c\xdc\xc6\xc9\xfb\x78\xc2\xb3\x9c\x1c\xab\x20\xd1\xe7\x29\x79\x62\xb3\x7e\xd3\xc9\xcf\xd7\xf2\x9a\x9e\x9f\x18\xed\x48\xc8\xf5\x7d\x3b\x57\x0a\x60\xf5\xff\x15\x42\x05\x56\xb7\xc3\x4d\x45\x82\x14\xa8\x2e\xf6\x59\x4b\xb0\x31\x35\xa3\x34\x9d\xd0\xbc\x1e\x56\x56\xdb\x85\xbf\x92\x47\xb1\x30\xf6\x2f\xf4\x71\x5a\x31\x4d\x4a\xcb\xa6\x49\xfd\x0c\x40\x93\xe7\x44\xa7\x03\x6e\x19\xa0\x6e\x57\xa7\xd3\xcf\x78\x4a\x72\x3c\xb5\x81\xca\xba\xdd\x70\xd9\xb4\xeb\x4e\x5b\xb4\x34\x2e\x72\x66\x81\x9c\x65\x49\x81\xf0\xbc\xdb\x0d\x17\x0d\x6c\x7b\x5e\xdd\xff\x84\xe4\x4d\x5e\xf5\x74\xd8\x1b\x79\x41\xa8\xc1\x40\x5e\x1e\x71\x68\x81\xf0\xb2\xdb\x5d\x0c\x1a\x1a\xb1\x08\x97\x60\xcf\xd2\x5f\xae\xd7\x8b\xf5\xfa\x4e\x83\x93\xcc\xf1\x14\x2f\xf1\xc2\x81\xc4\x34\x5c\x4a\xc5\xc3\x4f\xa3\xc1\x21\x0f\x63\x1c\x63\xf9\x1b\xcf\xc0\xe4\xc4\xb3\x53\x5d\x21\x08\xde\xe5\xbd\x89\x91\xcc\x91\xb9\x53\xb2\xfd\xe5\x4e\xce\x33\xd4\x10\x85\xbb\xee\x15\xa0\xdf\x28\x4f\x16\xcf\x61\xd7\xde\xf2\xa0\xb2\xab\x85\xd3\xd8\x14\x85\xdf\x02\x1c\xe3\x19\x42\xc3\x1f\x21\x22\x89\xc6\xad\xe4\x92\x32\x39\x8f\x1f\x2b\x84\xd9\xe4\x0d\x65\xa9\xb1\xc0\x6a\x16\x9b\xf3\xc8\x92\x33\x1a\x5e\x72\x2c\x5c\x16\x54\x94\xf5\x83\x7e\x86\xdf\xb8\x73\x98\xad\x5e\xcf\xe0\xfa\xa5\x0a\x2a\xf0\x3c\xce\xe7\x6d\x0d\xae\x60\xb5\x14\x38\xc9\x6e\x37\x36\xf4\xb4\xda\xd0\xc5\xaa\xda\x50\xb7\x4c\xab\xed\x93\x1b\x6d\xc8\x49\x8a\xba\x5d\x3e\x7c\xc3\x47\x76\x23\xd6\x86\xff\x95\x70\xae\x96\xa2\xd9\xf0\x0f\x3e\x22\x29\x66\xc3\x4f\x23\x92\x0e\xdf\x8e\x30\x93\xd9\xe5\xcc\xb0\x02\x07\xbf\xaf\x28\x7f\xdc\x5d\x82\x52\x32\xd8\xd8\xfa\xd7\xd5\xd6\x73\x1a\x4f\xb3\x34\xa9\x4e\xa8\x62\x5e\x4d\x8b\x53\xb6\x64\xbd\xa6\x45\xc3\xe8\x97\x54\xf6\xb9\xa2\x96\x55\x7a\x93\xad\xd2\x69\x73\xa3\x62\xda\x3e\x95\xde\xd5\xfc\x2a\x4d\x68\x9e\xff\x59\xf6\xfa\xca\xb2\x59\x54\xd8\x80\xfb\x1b\x07\xeb\xaa\x3a\x58\xc1\x2e\x8d\x27\xf3\x5d\x96\x6e\xc8\x77\xd4\xd4\x19\xc8\x0b\x00\x26\xbb\x00\x94\xb2\xb1\xda\x83\x7a\xb5\x69\xc6\x17\x71\xc2\xfe\xa0\x2f\x69\xf6\x79\x3d\xff\x2d\x15\xbb\x5a\x76\xdf\xbd\x8f\x79\xd0\x9f\x7b\x3a\xd6\x8f\xb1\xd3\xc1\x34\x0e\xb2\x82\x08\x6b\xa2\x67\xd8\x81\xbc\xf8\x7c\x4a\x91\x84\x06\x25\xe8\x22\xfd\xd2\x44\x70\xf1\x1a\xbb\x04\xa5\x01\x66\xd0\x46\x7d\xea\x68\x59\x4b\x34\xf2\xd5\xd7\x8e\xd7\x73\xd2\x12\xba\x13\xa2\x93\x27\x11\xf0\x57\xeb\x53\x11\x06\xf2\xec\x1c\xa0\x7e\x43\x57\x20\x80\x47\x0a\x32\xe5\x7d\x1a\xa6\xfe\xc9\x1b\x73\x35\x8c\x71\x9e\x53\x2e\x76\x8d\xa1\xef\xae\x95\x37\x76\xe7\x70\x76\xda\x35\xbc\xf4\xff\x4f\xdd\xbb\x7f\xb7\x6d\x6b\xf9\xa3\xbf\xeb\xaf\x88\x39\x67\xf1\x10\x5f\xc1\x8a\x9c\x9e\x99\x3b\x57\x0e\xaa\x49\xf3\x38\xcd\x69\x5e\x8d\xd3\xd7\xd1\x68\xb4\x68\x09\xb2\xd0\xd0\xa4\x0a\x82\x4e\x5c\x4b\xff\xfb\x5d\xd8\x78\x93\xa0\x6c\xe7\xb4\xdf\x59\xb7\x3f\x34\x16\x09\xe2\x8d\x8d\xfd\xfc\xec\x64\xf2\x99\xe3\x75\x69\xb8\x96\xc1\xdb\x72\xb4\xee\x41\x0e\xd1\x8b\xf6\xac\xb5\x68\x40\x10\x3e\xde\x26\x39\x29\x5d\x76\x4d\x66\xaa\x21\x8d\xd1\x5d\x9d\xff\xfa\xa1\x52\xa0\x23\x01\x60\x91\x0a\x55\x68\x58\x21\x5e\x96\x4a\xd8\xab\xc9\xdb\x32\x8c\xf7\x86\x14\xd5\x2a\xa7\xb3\xf9\x62\xd9\x65\x1b\x63\xa5\x9a\x5a\x54\x97\xda\x37\x3e\xf2\x3e\x68\xe0\x5b\x26\x6a\x83\xdd\x18\xbc\x78\xcd\xea\x9a\xda\x57\xb1\x96\xe5\x36\x35\xef\xd5\xac\x77\x5e\x7a\x09\x4a\xaa\x91\xe2\xd4\x4e\xb3\x98\xb8\xc7\xca\x82\x95\x3a\xd3\xf6\x79\x51\x2d\x3f\xd6\x03\xf0\x50\xc9\x12\x23\x02\x5f\x43\x74\x0f\x3c\xd2\x4a\xca\x95\x79\x22\xbb\xca\xca\x8b\x6c\x01\xd1\x43\x50\x04\x3e\x29\xcc\x6f\x53\xe0\x53\xe9\xf2\xa8\x96\x64\x7c\x5a\x3e\x7e\x6e\x21\x48\xcb\xe1\x10\x65\x63\xfc\xbc\x9c\x95\x73\x04\xb9\x84\xf7\x28\x13\xc8\x0d\x5f\xf2\xf1\x7a\x24\xaf\xf2\xdf\x21\xea\x5f\x3e\x82\x6d\xba\xd2\xae\xa5\x1a\x9c\x12\x45\xad\xb5\xc1\xaa\x1b\xdf\xa7\x9a\xdc\x68\x06\xf3\x46\x6b\x74\x41\xab\xfe\x77\x8e\x41\xa1\xab\x33\xab\xc4\x3f\x1d\x55\x25\x09\xbe\xaa\xe5\x9c\x06\x1f\x1e\x10\xc6\xef\x8a\xab\x73\xe5\xd2\x18\xf5\xa3\xe9\x0c\x42\x39\x96\x2b\x89\x1a\x3e\x32\x60\x48\x3c\x86\xe6\xa3\xcf\x46\x6f\x8b\xfa\x58\x99\x60\xc9\xd2\x7f\x6a\x74\x99\x07\x24\x2a\x0f\xc7\x5c\x0a\xc6\x06\x46\xb5\x6f\x37\x0f\x87\xb8\x54\xa8\xd6\xd0\xe5\xd8\xad\xeb\xf7\x6a\x46\xe7\xb7\xc0\x25\xdd\x3a\x92\x45\x07\x3b\x69\xe0\x2c\xd2\x61\xde\x26\x3d\xe8\x32\x18\x11\xd3\x23\x8a\x9e\xbf\xe1\xd0\x06\x7a\x59\xcf\xb6\x3b\xc3\x32\x45\xe6\x38\x80\x66\xba\x15\x40\xc9\x1b\xfb\xa2\x8b\x9b\x34\x88\xb4\xa5\x76\x48\x98\x79\x3c\x56\x69\x3b\xf9\x37\xd0\x2b\x83\xc4\xe6\xeb\x81\xca\x69\x56\x1e\xa0\x7d\x1a\x03\xae\x44\x68\xc2\x75\x98\x05\x45\xd8\xd3\x22\x69\x10\x3f\x03\xa9\xc5\x27\x01\x31\xd8\x9f\x42\x4e\xf4\xda\xe6\x44\xaf\x20\xf5\x20\xb1\xac\x54\x85\x30\x64\x3d\x85\x48\xcc\x5e\x12\x3b\x1c\xee\x9d\x67\x4e\x87\x36\x0f\x87\x76\xb9\x5d\xf4\x49\xcc\x83\xa1\xa5\x4c\x1a\x78\xb8\x64\xde\x2d\x64\xd2\x3f\x75\x34\xb7\x16\x4d\xdb\x6e\x54\x8d\xb9\x6d\xd2\x53\xf8\x95\xa8\x31\x01\xdc\x36\xa0\xe0\xde\xed\x04\x84\xf7\xdd\x8c\xce\xa3\x69\xe9\x1f\xf0\x81\x83\x6a\x02\xf3\x08\xae\x08\xc5\xb9\x49\x56\x53\x93\x27\x65\x06\xe6\xd2\xa6\xa0\xe0\x35\x91\x4b\xf9\x99\x05\xb6\x59\x75\x1c\x26\xc9\xb0\xc2\x35\xda\xed\xfa\x5e\x5a\xdb\x8d\x52\x5b\x58\xc1\x31\x2b\x89\x14\x0c\xcd\x31\x04\xc7\x1f\xc9\xed\xd9\x3f\x46\xac\x56\xc3\xd0\x36\xdd\x69\x6c\xd0\x8d\xb5\x61\x74\xa6\x9b\x1b\xa7\xab\x69\x49\x1d\x8b\xac\x23\x21\x03\xf6\x63\x92\xd1\x51\x49\x3f\x69\xec\xfb\xfc\x1c\x8e\x09\x66\xee\xab\xa0\x34\xda\x4f\xcc\x41\x5f\xdc\x7e\x36\x21\xcc\x27\x28\x86\x40\x52\x85\x59\x87\x93\xe4\x14\xa9\x70\xef\xe9\x52\x01\x89\x85\xf4\x06\x21\x96\x2f\x1d\x26\x16\xb5\xf7\xc1\x56\x7d\xa3\xe0\xfa\x17\x07\xc9\x4f\x77\xaf\xd8\xab\x2e\xd8\x2d\xee\x6c\x96\x76\x8f\x30\x52\x06\x8b\x6c\x54\x58\x93\x64\x48\x51\xb0\xd1\x2c\x36\xe7\xe7\x32\x63\x6a\x39\x51\x16\x82\x77\xfd\xc2\x21\x7b\x5c\x15\xb9\xc6\x6d\x42\x75\x75\x1e\x17\x90\x65\x59\x6e\xc3\x17\x15\x7f\x63\xd4\x54\x31\x8d\x36\xb6\xe9\x96\x4a\xe0\x77\x74\x00\xd5\x64\x62\xb3\xf5\x40\x26\xe7\x12\x0e\xa2\x81\x0c\x28\x87\x8f\x14\x45\x51\x3f\xc7\x90\x95\x59\xd9\x78\x85\xa7\x15\xe3\x7b\x6f\x72\xef\x7c\xa3\xfb\x67\xc8\x9f\x48\x8a\x2b\xd3\xd5\xdc\xdf\x23\xb6\x62\x94\x95\x98\xe1\x27\x65\xc6\x71\x85\x10\x40\xcb\x2b\xe8\x5c\x70\x29\x70\x00\x66\x85\x33\x1e\x35\xd3\x7a\xd2\x04\x2b\x58\x74\xa8\xd5\x92\x1c\x64\x72\x81\x74\x15\xe1\x5a\x2e\x4d\x25\x4b\x05\x46\x79\x5b\x32\x43\x80\xf5\xea\x54\x9f\xe0\x33\xf0\xcb\x52\xd8\x00\x41\x03\xb5\x49\x2a\x24\xc7\x90\xa6\x3a\x33\x8e\xcd\x86\xf3\xf6\xcd\xab\x5f\x16\x7f\x7f\xf5\xf2\xf5\xeb\xe7\xef\x17\x4f\xdf\xbe\x7e\xf7\xf6\xcd\xf3\x37\x1f\xce\xd2\x34\xdb\x28\x4f\x68\x9e\xd5\xc8\x5c\x29\x47\x50\x85\xfb\x5b\xef\xbd\x1b\x15\xac\xb3\xe4\x99\x79\x22\x7b\xb0\x4a\x53\x0f\x04\x94\x10\xb2\x52\x11\x7a\x37\x2a\x5c\x67\x65\x36\xfb\x60\x43\x56\x56\x75\x0b\x92\x96\xe0\xd9\x65\x56\x22\xac\x6b\xc3\xb5\xc2\x03\x38\xe7\x19\xc3\x0d\x86\x57\xf5\x6e\x57\x1a\x77\x9d\x6c\x8c\x3f\x8d\xb6\x9c\x5d\xe5\x02\x10\x5b\xde\x48\x32\xe2\x76\xb9\x66\xe8\x36\x76\x48\xdf\x08\x59\x8f\xac\xc0\x3b\x6e\xed\x4a\x9e\xc9\x4a\x94\xba\x5c\x8e\x7f\x9d\xa1\xc3\x02\x0c\xdc\x28\x05\xde\x20\xbc\x89\xed\xe4\xd7\xc6\xd7\xa1\x6d\x46\xe9\x91\x77\x5a\x30\xad\x7d\xa5\x34\xc7\x60\x44\x6b\xe3\xbf\xe4\x64\x49\xc3\x5b\x27\xc3\x16\xc3\x12\xa9\x4c\xf1\x12\x1c\x61\xae\xcd\x96\x4f\x4b\x72\xa3\x88\xf4\x24\xee\x34\xe5\xb2\x1d\x7b\xa4\xe7\xa3\xbc\xdc\x42\x8a\xe3\x18\x8e\x3d\xfe\x50\x92\x17\xd9\x0d\x5b\x4d\x92\xe5\x66\xfd\xfd\xf2\xdb\xff\xfc\x2a\xc1\x20\x2f\x4d\xfe\x7a\x93\x28\x77\xa9\x3a\x99\xcc\x92\x74\xa5\x23\x48\xe7\x38\x01\x79\x00\xf4\x8a\xc9\x64\x36\x3b\xf9\x1b\x3e\x99\xcf\x31\xe4\xd8\xbc\xca\x8b\x64\xb2\xce\x8b\x9a\xee\xff\x8a\x2f\xa9\xc8\x27\x37\x8e\x26\x4c\x92\x6d\xbe\xfc\x98\x5f\xd0\xfa\xa1\x46\x80\x3d\x36\xfb\xac\x7e\x68\xf0\x68\x0a\x76\xfe\xd0\xf0\x2c\xb5\x83\x88\x1d\x6d\xce\xeb\x64\xbf\x47\xf8\xbd\xed\xef\x9b\x9f\xfe\xf9\xfb\xab\xb3\x97\x2f\xe3\xfd\x35\x68\xb6\x09\x4e\x3e\xd0\xcf\xe2\x05\x60\x17\xe1\xe4\xbf\x0c\x20\x73\x82\x93\x34\x87\xf4\xc9\x9d\x01\xfd\x0d\x2b\x69\x6f\x36\x7b\xf4\x9f\xd8\x3b\x33\x78\xe6\x81\x22\x29\xab\xe8\x1c\x47\xca\x78\x60\x49\xba\x94\x36\xa1\xde\x74\x1b\x62\x6b\x68\xe7\x2b\x3c\xc6\xb3\xc4\x61\xf0\x26\xf3\xbe\x6f\xfe\x03\xcb\xd2\x27\x78\x36\x9f\xe3\xd9\xec\xe4\x2b\xfc\x37\xf8\x23\xf9\x2f\xad\xc9\xf7\x87\x38\x77\x55\x2b\x0c\xe8\x44\x96\x7d\xf4\x15\xfe\x4a\x7e\x2e\xff\xc3\x09\x68\x16\x29\xf8\x6d\x4e\x66\xf3\x7d\x4f\x7b\x8f\xfe\xac\xf6\x3a\x8f\x4e\xf0\xa3\xf9\xde\xcc\xda\x9f\xb2\xa7\x40\x57\x67\xf7\xd3\x3b\xbb\x9f\xd6\xeb\x27\xaf\xfe\xe3\xdb\x67\x45\x74\x3f\x75\x77\x3d\x9e\x3d\x7a\x84\x8d\x32\x61\x8e\xa1\x83\x7f\x56\x97\x55\x2b\xb6\xcf\xaf\x4b\x92\x1c\x8b\x6a\x7b\x5c\xd0\x2b\x5a\x24\xf8\x59\x49\x94\xf2\x0b\xbf\x39\xe8\x1f\x65\xe3\xec\x16\x1e\xad\x70\xb9\x3c\x35\x44\xbf\x76\x74\x50\x70\xf8\x1d\xc8\xc0\x81\x27\x40\x72\xba\x06\x0a\x7e\x59\x66\x37\xda\x83\x63\x72\x23\x3b\x62\x94\x63\x58\x55\x3a\xb9\x81\xca\x26\x1c\xb3\x52\x54\xc6\x06\xa7\x4d\xe1\xcf\x4a\x65\x20\x7f\x1d\x58\xc0\x4d\x6e\x49\x6b\x1e\xdf\xef\xc3\x14\xb3\x9c\xae\x27\xcc\x7e\xe9\xea\x8a\x1b\xd4\x75\x7f\xf6\x54\xe3\x5d\xc7\xbc\x33\xa2\xbe\xb0\xec\x5f\xcf\xd7\xc0\x30\xf8\x12\xb7\x5d\x48\xb9\x0b\x86\x9a\x1a\xe6\xdb\xe1\xb9\xe0\x0e\x10\x07\xe6\x00\x71\xd4\x29\x08\xd0\xac\x7b\x40\xfd\xa6\x23\x4e\xab\x2d\x2d\x55\x28\xa7\x3f\x9e\xa0\x36\xe7\x0c\xd3\xe9\x94\xc7\xcb\xf9\x7b\x04\xb8\x39\xb3\x41\x00\xe8\xac\xed\xfa\xa0\x5c\x5b\x38\x2e\xb1\x98\xb1\xd1\xdb\x9f\xde\x3c\x7f\x3f\xc7\x95\xd6\x75\x1e\xcc\x24\x18\x64\x6b\xd3\xb7\xd9\x40\x90\xce\x3e\x95\x57\x30\xe4\xf0\xea\xf8\xc5\xd1\xa9\x8d\x06\x03\x6b\xc9\x19\x2d\xa8\x64\x24\x32\x8a\x26\x54\x45\xe7\x9b\xc4\x2f\x28\xcc\xfa\xe2\xc6\x94\xb4\xd3\x1a\x9a\xb4\x30\xbd\x79\xd5\x74\x76\xde\xb7\x9e\xef\x59\xc7\xc3\x8b\xd3\xb5\xc5\x8b\xe9\x0b\x22\xb7\xb9\x5a\xbc\x94\x8a\x6f\xca\x3d\xc2\x34\x4b\xba\xf4\x41\x12\x93\x87\xc0\xeb\xcb\xab\x86\x7e\xde\x56\x5c\xd4\x92\x08\xc7\x4b\x4a\x32\x02\xf8\x2c\x73\x1c\xb2\x3a\x49\x53\xd3\x07\x72\x22\x97\x22\x19\x68\xd3\x14\x78\x58\xd0\x77\xda\x68\x9c\x51\xec\xb9\xf4\xdf\xd0\xb2\xb9\xa4\x1c\xdc\xa8\x8f\xc6\x71\x0f\xff\x07\x62\x64\x3e\x90\x54\xaa\xb7\x56\x85\xb9\xf2\x1a\x60\x63\xee\x58\xaf\xfb\xe4\x60\xcd\xf7\xaa\xf3\xd6\xda\x2e\xef\x53\xdb\xe5\x6d\xb5\x6d\x29\xfd\x78\xaf\xfe\x99\x0f\x0e\xd6\x5a\x53\x71\xaf\x4a\x75\xf9\x83\x75\x5a\x0f\x9a\x3b\xd7\x6a\xbf\xd8\x03\x60\x42\xff\xce\xb5\xfb\x31\xd8\xbc\x2a\xf4\xfe\x3c\x3f\x97\x97\x59\xe4\xd3\x46\xb0\xc2\xdb\xe4\x90\x5a\xa4\xb5\xa3\x31\x6f\xed\x69\x6a\x86\x4a\x96\x98\xda\xb9\x24\x6b\x4c\xbd\xcd\x14\x9c\x58\x63\x5b\x80\x1c\xc2\x5a\x53\x03\xd0\x73\x2e\x59\x95\xa4\x98\x7a\x87\x13\x0a\x4b\x4e\x28\xec\x23\x42\xdd\x1c\xf8\x71\x86\x25\xb6\x86\x5f\x47\x00\xbd\x4a\x4a\x97\x32\x9f\x3b\x40\xa7\xa6\x54\x8b\xb2\x4a\x24\x5d\x70\x15\x57\x3a\x76\xf1\x04\xd7\xb7\x18\x8f\x16\x85\x8e\x14\xab\x7f\xa4\x1c\x32\x84\xd9\x9c\xb0\xea\x72\xa2\xab\xe7\xe5\xca\x65\x8a\x5d\x17\xb9\x90\xe5\x57\xa6\xb8\x49\xbe\xa5\xfd\x20\xfd\x54\xcf\x8b\x15\xad\x97\x9c\x6d\x45\xc5\xeb\xf0\xc5\xa7\x5c\x2c\x37\xac\xbc\x08\x9f\x5e\xb2\xcf\xac\xac\xdb\x55\x6c\x5b\x4f\x96\x9b\x9c\x95\x3f\xc9\x0a\x68\xbb\x5a\x78\xd5\x7a\x26\xf2\x8b\xce\x83\x56\x91\x75\x21\x1f\x99\xb4\xe4\xe0\x17\x64\x78\x1d\x58\x0b\xcf\x11\x75\xb4\xac\x4a\xe3\xf7\xef\x9c\x52\xbd\x87\x6e\xf5\x70\x6b\x7e\x75\x2d\x7b\x23\xf3\x75\xee\x39\x48\x0c\xf2\x52\x8a\xa6\x79\xc1\x7e\x6f\x25\xc4\xf0\x7a\xba\x23\xff\xb9\xc7\x7c\xd4\x94\x77\x2b\xfe\x3f\xaa\xb8\x14\xec\xe2\x65\x7d\xe9\x72\xb1\xc9\xeb\x17\x45\x7e\x91\xfd\x27\x52\x1f\xd9\x94\x26\x9d\x53\xe0\x7f\xa6\xa6\x49\xc7\xab\xaa\x19\xd4\xd6\x01\x3d\x9d\x90\x78\x9c\xc7\x6e\x35\x2f\x2a\x50\x36\xf1\xcc\xe4\x49\xcb\x90\x89\x91\x56\xa7\xd3\x7b\x31\xb8\xf2\x93\x95\xe7\x2b\x49\x74\x9e\xc2\xd2\xcb\x77\xd6\xa1\xcb\xc3\xc9\x86\x74\x92\x72\x38\x67\xd0\x9d\x67\x36\x2d\xe8\xad\xf3\x70\x02\xf3\x50\x53\x71\xe8\xcb\x60\x71\x4e\x22\x2d\xd1\xfe\xc4\x70\xa6\xa1\x47\xd1\x86\xc2\x0f\x83\x76\x1e\xa9\x76\x82\xb9\xb9\xb5\x95\xbf\x99\x56\x7a\x3f\x0b\xda\xf8\x9b\x2c\x6d\x3e\x8e\xac\x7e\xe6\x95\x4e\x29\x32\xcb\xbc\xb8\xa0\xe2\x2d\x57\x18\xfe\x6f\x3f\x95\xaf\xf3\xa8\xef\x97\xfc\x76\x46\xe7\x3a\x4f\xe1\x8c\xce\xdb\x9e\x2f\x4d\x51\x80\x77\x4a\xbb\xbe\xb3\xb8\x07\x77\xb7\x3e\x40\xad\xa3\x42\xd5\xb1\x66\xe5\xea\xa5\xa1\x69\x27\x21\x7e\x62\x90\x9b\xf5\xd4\x90\xf4\x53\xcb\xe3\x1e\xb0\x18\x08\x62\x12\x9d\xee\xbb\xcd\x3c\x6a\xe9\x8d\x1c\x42\x95\xdf\x10\xb7\xd9\x5e\x79\xbb\x21\xe7\x77\x3a\x13\xf3\x96\x2e\xd9\x06\x36\x71\x88\xd4\xef\xe9\xc2\x57\x9d\x38\x5c\x67\x86\xf6\x3b\x51\x9e\xba\xa6\x68\xbb\x29\xad\xb6\x66\xed\x4e\x38\x7f\xd3\x19\x0f\xdf\xe4\xa6\x7b\xf9\x7e\x5f\x92\xb2\xbf\x7f\xe1\xe6\xf8\x17\x27\xa9\x63\x89\x3b\x3c\x51\x9b\xbc\x7e\x59\xda\x9e\x84\xdb\xea\xcb\x7a\x92\xa6\x65\xa8\x01\x3c\x1a\x0f\xbc\x56\x2d\x3e\x04\xe6\xa3\x4f\xb2\xd1\x67\xf2\x7a\x6b\x2f\x90\x5b\x9c\xc8\x49\xca\x12\xb8\x13\x21\x45\x2a\xac\x94\xbd\x9c\x18\xc0\x45\x97\x7d\x07\x09\xcb\xd5\x23\x5c\x36\x2d\x99\x9c\x4e\xcb\xa1\xd9\x34\xdc\x43\xa6\x51\xec\xdb\x4f\x9d\x45\x64\x3a\x9e\x40\xbd\x52\xf0\x0a\xab\x75\x29\x2a\xcc\x14\x45\xaa\x7f\xe4\xaa\x87\xa3\xba\xae\xf8\xf3\x7c\xb9\x79\x59\x46\xfa\x68\x97\x04\xf7\x6e\x5f\xc5\x34\xf4\xed\x60\xda\xde\xc1\xa6\xc6\xfc\x01\x2b\x1f\x70\xe2\x8d\x4a\x93\x8f\x09\xc7\x15\x52\xf9\xb7\x72\xb4\xdb\x65\xca\xcf\x23\x47\xb8\x9a\xe5\xf3\xaf\xc7\x69\x0a\x40\xc7\xed\x5d\x2e\x97\x57\x07\x14\x45\x53\xab\xf7\xae\xae\xe4\x4f\x12\x98\x07\x73\xb7\x1d\xac\x42\x16\x6f\xb5\xd7\x03\x10\x08\x65\x0f\x99\x5f\x81\x57\xa2\x3e\x44\xad\x32\xb3\x06\x3d\x39\xd4\x11\xbf\x1f\xe0\xa8\x02\x97\x72\x3b\x3b\xb6\xdf\xa3\xd8\x04\x14\xf6\xcb\xc4\x45\xb3\xc8\xc5\x11\x92\xb4\xcb\xed\x3d\x9b\x23\x2c\xc0\x05\xc2\x75\xed\x6e\xed\xb9\xba\x83\x5d\x60\xc3\x3b\x4c\xad\x66\x14\x4f\x03\x66\xb3\xaf\xd6\x80\x25\x3d\x38\xc3\x21\xf3\x7a\x70\xae\x7b\x9a\x6e\xcd\x7a\x50\x61\xa7\xe7\xb7\x74\xb9\x6e\xc5\xb8\xdc\x04\x6c\xb4\x68\xf5\x6f\xe0\xd1\x07\xb5\xd1\x3d\x87\x11\x8e\xda\x4d\x67\x60\x3e\xd8\x5e\x7f\xa8\xbc\xec\x74\xdd\x11\xf6\x0f\x2d\xbc\xb0\xb3\x44\xf7\x4b\x9d\x0d\xa0\x9e\x3f\x19\x31\x22\xa4\x11\xfd\x5b\xcb\xc8\x1d\x09\x92\xdb\x48\x18\x5a\x18\xa9\x27\x9c\xad\x0e\xb9\xb2\x15\xe1\x98\x47\xc3\x74\x3c\x81\xba\xc1\xff\xeb\x33\x2b\xbb\xfa\x9e\x2e\x47\x93\x25\x5a\xfe\x49\x10\xd0\x17\x45\x0a\x37\x79\xdd\xad\xa1\xcd\xd9\x85\x77\x98\xab\x28\x24\xa7\xaf\x95\x74\x15\xe5\x7b\x70\xef\x0d\x67\xa4\xb2\x81\x7f\xc7\x65\x5e\x6c\x9e\xb0\x64\x52\xe0\xd2\xb4\x95\xf9\xca\x4b\x85\x75\xca\x25\xe9\x54\x5e\x74\x5c\x0a\xfe\x1c\x41\xfe\xbf\xd6\x95\xac\x2f\x45\x27\x36\x86\x2b\x9b\x75\xe4\x4a\x3f\x99\xbd\xfd\x48\xfb\xdd\x20\x64\xdd\x45\xdc\xad\x17\xab\xfa\xc0\x62\x9b\x1b\xd7\x7e\xe6\xaf\xb8\x20\x84\x54\x36\xf0\x50\x6d\xed\xcb\xea\xaa\x67\x00\x7a\xe9\xdb\x43\xcc\x28\xae\xfc\x75\xea\xfb\xf8\x4e\x8b\xe5\x75\xf4\x8b\x57\x0c\x94\xff\xb0\x66\xa5\x5b\xb3\x12\x61\x2e\xaf\xcb\x34\xa5\x2a\xc6\x37\xb2\x78\xf9\x6a\xf5\xa1\x7a\x65\xe5\xdd\x76\x9c\x02\x66\x26\x64\xb2\xa9\x37\x16\xa0\x46\xbf\x9c\x9e\x4c\xc6\xe0\x03\x6c\xe6\xf0\x05\xaf\x2e\xfb\xea\xea\xaf\x47\x49\x51\xfe\x8b\x08\xb2\xa1\xe2\x13\xda\xe9\x10\xbe\xfe\x9b\x67\x21\x77\xa9\x0f\xfe\x36\x4f\x53\xff\x17\xae\x88\x5d\x46\xb8\x77\x4c\x1f\x21\x8f\xdb\x2a\xab\xb0\xea\xa2\xa4\x8d\xe0\x56\x91\xa7\x69\xfe\xb8\xab\x52\x49\xd3\xac\x32\xb9\xe5\x73\x7c\x82\x22\x5a\x97\xe3\x63\x9c\x93\xe3\x13\x84\x01\xa9\x36\x47\x95\x72\x8c\xba\x01\xd4\x16\x07\x0b\x2b\xf0\x25\x15\x9b\x6a\x35\xe1\xf8\x23\x2b\x57\x90\x3b\xa9\x5c\x4e\xd8\x3e\xc8\xde\x2f\x99\x95\xc1\x23\xe5\x89\xf8\xe8\x88\x90\x7a\x24\x0b\x4f\x83\x3e\x4c\x32\xf5\x94\x94\x80\x1a\x5e\x2e\x09\x43\x01\x33\x13\x59\x90\x36\xd1\x6e\xe9\x87\xe4\x04\xe8\x24\xe4\xea\x1a\xb1\x58\x60\xbc\x12\x55\x9a\xc2\x14\x75\x87\xbe\xdb\xe5\xc3\xa1\x1a\x77\x74\xea\x22\x2a\xaa\x71\x47\xe1\x02\x6c\x42\xf8\x0c\xce\x99\xe9\x62\x74\x34\xc6\xb4\xdf\x19\xc9\xe3\xdc\x68\xfe\x68\xcf\x1d\xe8\x99\xd8\xbb\x6d\x64\xa8\xc5\x71\x04\x57\x6f\xd8\x4b\xd4\x1e\x89\x70\x2b\xc9\xdb\x85\x07\xdd\xb9\x80\x80\x27\x6e\x56\x76\x1c\xd9\x5a\xb1\xed\x46\xc6\x6d\x17\x65\xe1\x7b\x28\x1b\x87\xd0\x59\x39\x3f\x85\x85\x59\x41\xaa\x0f\xd8\x8c\x90\x1c\x00\x00\xaf\xd9\x48\x6d\x46\x04\x3d\x68\x4a\xc0\x7e\xcf\x58\xac\xbd\xe1\x10\xed\xf7\xfb\x1e\xb5\x62\xbe\x0f\xb6\x55\xb0\x80\x97\xfa\xf2\x8d\x91\x07\x07\xa4\x0f\x1f\xde\xba\x0e\x1c\x85\x43\xe6\x91\x21\xf3\x59\x39\x1f\xe8\x91\x1e\x41\x32\x19\x90\x29\xe0\xa8\xa4\xe9\x89\xfd\x7b\xb7\xcb\x5a\x4c\x1f\xec\x40\x75\x6a\x3b\x33\x04\xd8\x81\xea\x43\x14\xf2\x47\xd5\x79\x4d\xf9\x15\xe5\x80\xe4\xd5\x0f\xe0\x77\x87\x3d\x16\x22\x62\x0b\x1f\x10\xdb\x48\x99\x52\x70\x87\x4b\xc2\x1b\x4e\xa9\x87\x03\xcb\x5c\xaa\x81\x7b\x7e\x63\xcb\x4d\x5e\x5e\x50\x80\x9b\x71\x9a\xd1\x34\xcd\x28\x8c\x97\xaa\xf1\x96\x6e\x50\x0a\x0d\x4a\xf4\xa0\x41\xa9\x63\xd4\xc1\x82\xf2\x0e\xda\xc2\x9d\x34\xd7\x9e\x39\x6b\x4d\xc8\xa3\x06\xca\x68\x15\x25\x4e\x20\x89\x8c\x50\x59\xb1\x9a\xa2\x98\x6c\x3c\x86\x94\x3a\x64\x29\xad\xa0\xaf\x35\x4e\x5e\x34\xad\x33\x2e\xfc\x60\x0a\x17\xe0\xba\x54\xfc\x49\xe1\x18\x0e\xfb\x6a\xed\xf8\x8b\xc2\xf8\xc0\xc6\x65\x0f\x0f\xc0\xbc\xc9\x28\xf2\x2f\x78\xff\x83\xcc\x54\xc4\x91\xf3\x33\x52\xf4\x54\x83\x55\xe9\x5f\x84\x23\x2c\x06\xb2\x32\x1e\xa6\x87\x86\x20\xc6\x08\xff\xb3\xd6\x7d\xf3\x6d\x1a\x4e\x81\xeb\xfa\xa9\xfa\x08\x6e\xff\x9e\x47\xef\x52\x39\x1b\x73\x1f\xf5\xc5\x5d\xba\x66\x6c\x8c\x50\x9b\xd3\xeb\x94\x7d\x4d\xc6\xa7\xec\xf8\xd8\x88\xe7\x74\xc6\x40\x3c\xaf\xd4\x9e\x53\xe7\xa8\xd2\x27\x87\xc0\xe0\x2a\x7d\x7c\xe4\xce\xf4\x34\x3b\xda\x8d\x71\xaf\x8d\x2d\x9b\x43\xc6\xa5\xe2\x0e\x46\xa5\x6d\x55\x5c\xaf\x59\x51\xf4\x9b\x4c\xdb\x66\xa6\x3b\xd8\xa3\x78\x53\x16\x55\xb5\x95\x0f\x8c\xfb\x86\x0d\xd2\x8d\x7e\xef\x59\xb5\xdd\x7b\xca\x79\xc5\x4d\xbf\x1f\x5e\x29\x82\xe9\xf7\x66\xcb\xe9\x32\x17\x74\x75\xbc\xa6\xb9\x68\x38\x8d\x8f\x01\x3c\x2d\x3a\xc6\x31\x3f\x37\x05\x2e\x00\x78\x7b\xd3\x31\x98\x99\x94\xdf\xa4\x12\x98\x42\xfc\xaa\xfe\x1d\xf5\xe9\xff\xa6\xaa\x0a\x9a\x97\xd9\xb9\x71\xde\xa7\x0a\x4d\x6b\xb9\xa1\x52\x54\xbf\xf4\x7e\xaf\x7e\xcc\x8b\x06\x9e\x5e\x69\x5b\x9c\x2d\x76\x81\xe9\x28\x2f\x58\x1e\xd5\x2e\x7d\x4b\x21\x16\xa6\x00\x2f\xfa\x06\x72\x61\x8e\xec\x3c\x18\x8b\x65\x57\x11\x6a\xb6\x29\x58\xd7\xfb\xac\x9c\x02\xdf\x2c\xab\x72\xcd\x2e\x1a\x6b\xdd\xf4\x6d\x9d\x27\xb8\x0e\x82\x54\xd1\x4d\x99\x21\x2c\x84\x72\x9e\x00\x68\xf8\x1e\x6b\xa8\x2c\xf7\xbd\x46\xf9\xe0\x68\xbf\x87\x5e\x4b\xc1\x10\x32\x0a\xfd\x4c\xd5\xbc\x90\xef\xf5\x1f\x3f\x31\xb1\xd1\x19\x06\x7a\x34\x86\xdf\x53\x1b\xc6\xe1\xe2\x10\x9c\xa6\xda\x34\x2b\x9b\xa9\xa9\x20\x42\x2e\x9e\xe0\xd7\x6d\xbd\xa7\xcb\xf6\xf4\x40\x08\xbd\x2b\x8e\xc6\xd0\x3b\xe5\xac\xfe\x44\x90\x15\x05\x1f\x92\x6d\x11\xba\x1c\xfb\xbd\xe9\xf0\xd7\x5f\x45\xf9\xeb\xaf\xe6\x53\xff\xc7\x64\x43\x07\x90\xce\x63\xc4\x6a\x93\xbf\x6e\x7a\xe9\xdc\x92\x26\xb6\x59\x8d\x92\xb9\x77\x1d\x79\x59\xbe\xc9\x05\xbb\xa2\xf0\x1d\x01\x50\xc3\x7c\xb5\x82\x5f\x6f\xf5\x95\xda\x37\xd0\x2b\xd3\xc2\x1b\x0c\x80\x8d\x06\xcc\xf3\x7e\x1f\xff\x6a\xe6\x09\xc2\xa3\x21\x8b\x6f\x29\x7e\x62\x45\xf1\x14\x6e\x4c\xb2\xa4\xad\x77\xcf\xd8\x4a\xbf\x5a\xcb\x57\x34\x5f\x6e\x20\x6b\x2c\x6c\xf8\xe0\x09\x74\xc4\xab\xaa\xe9\xbe\x75\x95\x15\x7a\xe8\x56\x06\x7a\x83\xc1\x31\x35\x2e\x4f\x79\x3e\xf9\xa5\xb5\x7f\x23\xef\x2a\xf0\x60\x4d\x8e\x4e\x6c\x3a\xf8\x0e\x17\x96\xb5\x55\xc3\x0a\xe4\x82\xd9\x28\x7c\xd8\x41\xa1\xdf\xd9\x1f\x98\xc2\x50\x85\xa6\x6e\x15\x16\xba\xcb\x0c\x55\xc9\xbd\x6e\xfb\x08\xfe\xe3\x08\x97\x6e\x85\xed\x1c\xfd\x0a\xc7\xa2\x54\xf8\xa9\xe4\x25\x10\xb6\x37\x55\x19\x0d\xc5\xd2\x51\x2f\x7b\x28\xf4\xfc\x72\x2b\xae\xc9\x46\x91\xc2\x6f\x8a\xbc\xfc\x48\x56\x62\x40\xc1\x78\x4a\x6b\x59\x59\xb7\x86\xa3\x95\xd0\x8e\x58\xe7\xf4\x82\x95\x86\xdc\xa8\xf5\xab\x89\x00\x40\x4e\xf8\xa1\x5f\x31\x5a\x93\x12\xd6\xbc\x5c\xb5\x4b\x73\xf9\xbc\xac\x04\x5b\x5f\x87\xaf\xc8\xcf\x72\xc6\xaf\x28\xe7\x6c\x65\xb4\x6d\x94\x02\x6d\xf4\x89\x1c\x61\x54\x0d\x44\x41\x47\x3a\x05\x04\x79\x09\x35\xc3\xa1\x92\x4f\x9f\xd1\x65\xc5\x73\xf9\xe2\x77\x55\x8b\x29\xf8\xa2\xe2\xee\xdd\xa2\xfd\xca\xb6\x73\xae\x6e\x0b\xc9\x00\x32\xaf\xb2\x4f\x8a\x20\x75\x9e\x3f\xc7\x74\x04\x8a\xb6\xef\xe8\x35\xa9\x64\x8b\x4d\x69\x7f\xe7\xf2\xf7\x9a\x95\xac\xde\xf4\xaa\x3a\x69\x5c\x99\xea\x5b\x89\x81\xc7\xe1\xd4\x20\xe7\x3d\x29\x8a\xc0\x86\xdc\xb1\x2f\xa7\x29\x6d\xeb\x39\xcf\xa8\x47\x30\xfc\x86\xc8\x5b\x4d\xba\xe1\xe1\x87\xfc\xa2\x7e\x51\x71\xd9\xf7\x7f\x50\x33\x32\x20\xf5\xef\xbc\xa1\xc1\x83\xd7\x6a\x3d\x7a\xd4\x9b\x7a\x0f\xbe\x51\xd4\x5e\x1d\x2b\xfd\x35\xf9\xd5\xd6\x4c\x9e\xd9\x3f\x29\x57\x31\xb1\x6f\x74\x77\xbc\x2d\x15\xa3\x03\x37\x7b\xec\x51\x6f\xcc\xc8\x09\xe8\x0d\xda\x27\x34\x4d\x43\x3a\x2d\x10\xd8\x9f\xc6\xfe\xc7\xb3\x93\xb9\x92\x29\x4f\xd9\x63\x1b\xee\xca\x86\x43\xc4\x67\xe5\x8c\xcd\xe7\xea\xca\x92\x7f\x22\x2f\xd6\x0c\x76\x43\x6f\x27\x3d\x98\xa2\xdd\xce\x84\x4f\xd9\x5c\x37\x1e\x37\x6d\x1d\x0e\xb3\x08\xc5\xe1\xb8\x34\x1c\xfe\x47\x7a\x2d\x69\x17\x66\x92\x17\x6d\x75\x93\xc8\xbe\x61\xb8\x06\x39\x96\x74\x07\xed\x41\x4d\x4f\x47\xf4\xf3\x36\xb7\x47\x51\xf6\x92\x0a\x45\x74\xed\x6d\xf1\x0d\x56\xf9\x3d\xae\x72\x41\xed\xc3\x1f\xec\x4e\xb1\x8f\xbe\x1d\xd0\xd1\xba\x68\xea\xcd\x93\xfa\xba\x5c\x9a\xc7\x6d\xa5\xc4\x4f\x84\x90\x7a\xf4\xf4\x87\xf7\xef\x9f\x2b\x68\x4d\x8b\x8d\xa0\xc6\x39\xf8\x29\xfe\x1a\xff\xde\x55\xf1\xf5\x13\x7d\x49\xc2\x41\x72\xef\xba\x4a\x64\x68\xb7\xeb\x38\x1c\x64\x08\x4d\x7f\xd7\x7e\x52\x99\x90\xb7\x73\xa4\x31\x8e\x6e\x68\x88\x4f\x49\x01\xec\xe9\x3d\xbd\x62\x92\x77\x55\xb8\xa5\xb9\xef\x7b\xa9\x73\xe2\x06\x19\x01\x04\xbf\xbe\x79\x09\xb7\xfe\x4c\x4e\xf5\x36\x17\x9b\x39\xda\xaf\x59\x99\x17\xc5\xb5\x6a\x81\xfc\x43\xb2\x05\xea\x9d\x94\x44\xfd\x56\x08\xf5\x51\x2f\xc1\xff\x4c\xb1\x5c\x97\x1d\x05\xbb\xf3\x07\xe8\x5c\x4b\xdc\x4f\x38\xf6\xf5\xc9\x54\x1c\x9f\x4c\x20\x85\xf3\xc9\x69\xf9\x58\x80\xd6\x80\xcf\xca\xe3\x13\xff\x82\x2a\x2d\x78\xda\x2b\x1d\x90\x49\x15\x33\xd5\x66\x2b\xfe\xe0\x0b\x11\x33\xc9\xc7\x9b\x6b\x71\x10\x41\xa9\xa9\xa7\x59\x49\xe4\x11\x17\x38\x27\x47\x8d\x0a\x31\x7a\xf6\xfc\xc5\x93\x1f\x5e\x7d\x58\x3c\x39\xfb\xe5\xcd\xd3\xc5\xdb\x6f\xce\x9e\xbf\xff\xf1\xf9\xfb\x33\x34\x91\x65\x47\xeb\x12\x33\x52\x4b\xee\x9a\x96\x2b\x5a\x8a\xef\xe8\x75\x8d\x73\xa2\xf4\x85\x4e\x81\x54\x90\xd9\x1c\x2f\x63\x77\x67\x61\xc2\x3b\xf7\x78\x4d\xc6\xa7\xeb\xc7\x86\x41\x38\x1d\x0e\xd7\x88\x8a\x8c\xcd\xd6\x73\xbc\x44\xad\x2b\xdc\x9e\x0b\x79\x85\xdf\xc8\x05\xae\x27\x85\xd2\x74\xe6\x7b\x7d\xa3\x83\xdb\xb5\xb2\x97\xbc\x82\xeb\xb8\x94\x07\xfc\x4f\x5e\xda\x2b\x95\x21\x1a\xe7\xe4\x25\x04\x48\xd6\x24\x37\x26\x01\x3e\x1b\xcf\x07\xf9\x6e\xc7\x67\x27\x73\xad\x55\xe8\x3a\x50\x03\x96\xd9\x85\x8d\xe4\x15\x2e\x47\x27\x60\xa9\xe5\xac\xa4\xdc\xb9\x88\xe9\x48\x21\x3a\x4c\x26\xc9\x30\xab\x77\x3b\x81\xb0\xc1\xb2\x62\x5e\x5c\x5e\xb5\x47\xfb\x81\x52\x57\x16\xa4\x12\xd9\x8d\x94\x41\x9a\x96\xac\x02\xe4\x54\x4b\x20\x54\x45\x91\x08\x79\x32\x4c\x73\xf9\xb4\xc8\xe4\x18\xb0\x1c\x00\xe6\xb3\x47\x73\x34\x29\xe4\x44\x8b\xfc\xc2\xbf\xd7\x3f\xd8\x47\xe4\xbd\x3c\x50\x39\xff\xa8\x68\xeb\x93\x1a\x80\x35\xc9\x3b\xac\x9c\xe4\x9a\x4b\x4a\x7e\xa1\x20\x76\xe4\xcb\x8f\x74\x45\x7e\xb2\x3f\xc8\xdf\x35\xd3\x1a\x0f\x65\xbc\x16\xa3\xa6\xdc\xf2\x6a\x49\xeb\x9a\xba\x32\x35\x39\x1a\xe3\x85\x70\x5b\x8a\xaa\xd0\xb3\x0f\x3a\xb1\x33\x79\x22\x14\x9b\xd0\x53\xed\x85\xd8\xed\xce\x1c\x2e\xf4\x83\x4f\xca\x00\xdc\xfa\xa4\x26\xcf\x81\xaa\xa8\xe6\x5d\x4d\x9f\xbd\xa7\x4f\x8a\xc2\x2b\x7f\x26\x2c\x9d\x3f\x14\x9a\x09\x9b\xfb\x42\xe1\x54\x02\xc7\xad\xb3\x4c\x7e\x12\x33\x31\x97\xe3\xd2\x2a\xdc\x85\x53\xbf\x51\x04\xc6\x82\x07\xac\x7c\xd0\xc0\x06\xa1\x9f\x4d\x30\x7c\x9a\x52\x02\xc1\x7d\xc1\xd3\x99\x98\xa7\x69\x16\x79\xaa\x2d\x42\x48\x71\xb1\xb6\x9b\x67\x34\xe7\xcb\xcd\x33\x56\x4b\x16\x27\xe6\x51\x76\x21\xf4\x15\x7d\xeb\x27\x30\xc1\xc4\xc8\xff\x6a\x79\xde\x3c\x79\xfd\xfc\xec\xdd\x93\xa7\xcf\xcf\x16\xdf\xfc\xb2\x78\xf9\x8c\xf8\x8f\x08\x1d\x7d\x80\x9d\x01\x89\x82\x00\x68\xe5\x4d\x25\x14\x7a\x32\x5d\x11\xea\xb0\x94\x25\x6b\xd6\x94\x2f\xcb\x0f\x3c\x2f\x6b\x75\x5b\x10\x03\x86\x0f\x3e\xb6\xdf\xbd\x79\xfb\xd3\x9b\xc5\xbb\xf7\x6f\xdf\x3d\x7f\xff\xe1\x17\x79\x23\x12\x3a\x7a\xf6\xfc\x9b\x1f\xfe\xbe\x78\xf9\xe6\x1f\xcf\x9f\x7e\x78\xf9\xf6\xcd\xe2\xc5\x0f\x6f\x9e\xea\x34\x07\x4a\xb9\xf0\x5a\xe9\x96\xe8\x48\x51\x11\x3a\x7a\xc5\xce\x79\xce\xe1\x7e\x1f\x15\xde\xdf\xc0\xd2\xbd\xa9\x56\xb2\x31\xdb\xc8\xb3\x97\xcf\x16\x4f\xbf\x7d\xf2\xe6\xef\xcf\xd5\xd3\x9f\x7f\x59\x3c\x7d\xfb\xe6\xc3\xf3\x37\x1f\xe4\x17\x5a\x49\x62\x4f\x8d\x14\xf6\x8b\xea\x3c\x2f\x9c\xfe\xc4\x73\x08\x5e\xe1\x6d\x5c\xd5\x78\xe9\xb6\xcf\xf6\x70\x4c\xbd\x81\x1f\xd8\x06\x51\xf3\xb6\xa2\x2b\x9f\x0f\xd8\xc6\x54\x93\xce\xcd\xcd\x24\xcc\xb6\x1f\x5f\x78\x14\xdd\x7c\x0b\x7a\xc5\xeb\x78\xaf\xcf\x7d\xe5\x00\xf3\xbd\x6c\x3a\x62\xe7\x84\x7b\x3a\x48\xe7\xbd\xd5\xb6\xdf\x06\xdd\x59\x78\xdd\xb9\x36\xdd\xb1\x6f\x3f\xb5\x44\xb7\x23\x42\xd3\xf4\x1a\x4c\x9c\x7e\xb1\xe7\x6e\x66\x8f\xb2\x8e\xfa\xe2\x24\xaa\xbe\x38\x99\xa3\xdd\xce\xff\x39\xb8\x76\x3a\x60\x59\xd7\x67\x0d\xdc\x02\x8a\xac\xec\x84\x7e\x85\x23\x77\x22\x0d\xb2\x96\xef\x3d\x04\xca\x33\x2f\x73\x41\x27\x9c\x45\x9b\xcf\x3e\xfb\xf3\xff\x04\xbf\xc5\x1f\x15\x61\xb1\x6e\xe2\xb1\xd3\xe0\x67\x01\x7e\xea\x0e\x77\xdd\x03\x85\x6c\xcb\x7e\x08\x17\xd2\x74\x45\x2e\x99\x9f\x7a\x12\xbc\xd1\x1c\x77\x4e\xd8\x6e\x67\x81\x47\x91\x6d\xcb\x87\x8a\xd7\x2e\xeb\xed\x9d\x71\x19\xec\x0a\x18\x17\x78\x25\x7f\xbe\x96\x4f\x4d\x55\xef\x33\x8a\x73\x93\xe1\x26\x0f\x9c\xaf\x20\x3f\x69\x33\x13\x96\x09\x2b\x76\xbb\x4c\xfe\x26\x4f\x33\xe4\x0d\xec\xbd\x15\x2f\xda\x98\x0c\x72\xa2\x43\x13\x1f\xf7\xad\xe9\x61\x37\x85\xc6\x63\xef\x32\xca\xf6\x2c\x79\xbd\xcb\x9e\x5a\xcd\x7c\x38\x1b\xae\x5f\xef\x0e\x9f\x1c\x37\x3f\x80\xeb\xe8\x79\x6a\xf9\x82\x6c\x9d\xa6\x9d\xb9\x9b\xea\xac\xe6\xa3\x35\xe3\xb5\x08\x01\xa4\x27\x75\xf8\xdb\x4c\x6d\xd0\x80\x9a\x5a\x17\x55\x3e\x95\xb3\x6a\x10\xbe\xec\xe3\x22\x4d\x9f\x64\x85\x07\x6e\xe2\x07\xb6\x17\xbb\x5d\x3e\x3a\xcf\x97\x1f\xcf\x1b\x2e\x9b\xa3\x65\xdd\x70\x97\x11\x01\xed\x7b\x48\xf9\x47\x6c\x89\xfd\x5b\xfc\x24\xb8\x71\x68\x0b\x0a\x1b\x7a\xfe\x9a\x58\xb3\x95\xdb\xf6\xcf\xfc\x13\x38\x7c\xed\xa6\xfc\x8d\xd6\xe7\x79\x80\xaa\x11\x82\xf0\xef\x51\x82\xf0\xef\x21\x41\xf8\xf7\xf9\x80\xed\x76\xb1\xa4\xac\xbb\x5d\xc6\x08\x97\x5c\x27\xe0\x24\x07\x8b\xd9\x72\xa5\xc8\x54\x67\x8e\xe4\x8c\x55\x38\xf7\x36\xed\xaf\xa6\xa7\x36\x05\xe8\xa0\xb3\x7b\xf9\x34\xab\x08\xc7\x39\x61\x68\x92\x55\x0a\x38\x39\x27\xbc\xdd\x64\xc4\xed\x22\x13\x38\x6c\xee\xa5\x3f\x31\xbe\x9a\x99\x99\x79\xb2\x4f\xaa\x08\x61\xaf\x06\x8c\x74\xba\x97\xdb\xc3\x95\x4f\xf3\xa8\x56\xd1\x04\x65\x06\x0d\xee\x76\xf0\x8f\xc9\xb1\x62\xd5\x93\x86\xc1\xaf\xed\xbb\xe3\xaf\x4e\xeb\xaf\xc9\xf8\xb4\x3e\x26\x5f\xa9\x6e\x36\x84\xcd\xea\x39\x2e\xe4\x3f\xc3\x13\x29\xa7\xc8\x3f\x1e\xcd\x07\x45\x9a\x66\xcb\x34\x55\xb3\xda\xe0\x02\xe1\x46\x12\x0b\x42\x11\xee\x50\x5f\x59\x56\x12\x96\x62\x8e\x70\xa1\x23\x3e\x1b\xf0\x8c\x31\x9e\xbf\x40\x8f\x5f\xdd\x26\x57\xe1\x17\xf6\xa2\xfe\xdd\xfc\xe5\x25\x68\xff\x62\xb7\x95\xa9\xff\x63\xf2\x0a\x57\xe4\x99\x14\xef\xe5\xde\xae\xc0\xce\x73\x74\x82\x19\xc2\xcf\x68\xcb\x5e\xf9\xad\x6b\xf1\x0b\x5d\x64\xb4\x8a\x18\x9a\xfb\x55\x55\x8f\x7f\x05\x58\x13\x50\xd8\xdb\x96\x7e\x88\xc3\x4c\xba\x67\x47\x8a\xc0\xbe\x98\xfc\xee\x04\x20\x75\x69\xef\x76\x5c\x5f\xb3\xc6\xd7\x0b\x73\x73\x0b\xca\xab\xa0\xdd\xf1\x47\xd1\x8e\x3f\x0a\x3a\xfe\x68\xae\x80\x67\xac\x03\xb7\x66\x7a\x54\x10\xd6\x70\xe8\x7c\x30\x4a\xa2\x38\x73\x91\x25\x93\x04\x49\x01\x89\x91\x7f\x80\x26\x0b\x0d\xb8\x86\x63\xb8\x81\xaf\x26\x27\x58\x8a\xaa\x93\x12\xf2\x94\x30\xec\x2b\x24\x26\x36\x5f\x36\xae\x9b\x1a\xc4\xe9\xd5\xe4\xe8\x64\x8f\x14\x76\xda\x4f\x1a\xc3\xee\x37\xfc\x23\xfe\x3b\xfe\xa5\x27\x8e\x4b\xbb\x42\xe5\xab\x15\x5d\x85\x78\x53\xbf\x35\xb4\xa1\x64\x36\x3f\x04\xc4\x96\xaf\x56\x87\xbc\xcf\xa1\x56\xc3\x18\x3a\x93\x52\x9a\x6a\x6c\xab\x33\x6a\xf2\xd3\x43\x41\xbd\x20\x08\x61\xe3\x04\x6f\xbc\xf3\xa0\x2f\x5a\x48\x83\x56\x70\x09\x5e\x65\x1a\xcb\x0b\xb4\x5f\x3d\xe8\xf6\xf0\xe9\xc0\x6b\x65\x59\xd0\x9c\x1b\x54\x0f\x33\xc8\x81\x93\xeb\xc7\xa7\xe2\x31\x75\xe9\xdd\xcd\x99\xe7\x84\x4a\x99\xaa\x94\xff\xc8\x33\xcf\xe0\x8f\x47\xf3\x81\xbc\xaa\x9d\x96\x4b\xe9\xb8\xec\xb5\xbd\xdb\xbd\xcc\x24\xb9\x9b\x71\x5c\xce\xd1\xde\x86\xe0\x76\x64\x8f\xdf\xb0\x2f\x9c\xfc\x88\x63\xe2\xcb\xdf\x71\xec\xc3\xb8\x76\x57\x76\x36\x43\xf8\xe8\x44\xdd\x5f\xdf\xb5\x38\xba\x88\xc8\x01\x21\x80\x31\x51\xe4\x3b\xa8\xe1\x2f\xb0\x62\xbf\xe0\xef\xfd\xc4\x78\x3f\x7f\x09\x57\xae\xa8\xef\x11\x6b\x85\x94\x65\x28\x4d\xe1\x61\x10\x32\x26\x79\x34\x6d\xdc\x57\x22\x00\xf3\xb8\x92\x2a\x4d\x23\x4a\xa9\x4a\x4e\xa4\x32\x60\xa4\xa9\xf7\x43\x11\x12\x87\x9e\xce\x02\xdf\xdd\x4c\x20\x70\x7b\x6a\x6f\x67\x38\xd1\x71\x6d\xe6\x91\x8d\x58\x70\xf1\x1a\xda\x94\xf4\xcf\x81\xdc\xe5\xff\x24\x47\x27\xe8\x34\x8b\x39\x32\xea\xdb\xd6\x85\x9c\xb8\xc4\x49\x69\x9a\xe5\xf6\x78\x94\x9a\x1c\xe4\x08\xe1\xdc\x3a\xc2\xb2\x30\xc6\x21\xe3\xd8\x77\x98\x75\x9e\x1e\x72\xd2\xd4\xf5\x8e\xe4\x54\x2c\x2c\x9d\x50\xda\x6f\xaa\x5f\xee\xd1\x1e\x65\x3f\x83\xe3\xe1\x3f\xe0\x70\xa5\x69\xf6\x0f\x7b\x50\xfe\x49\x8e\xc6\x40\x15\xe5\xe4\x77\x62\x61\x8d\xeb\xe8\xad\x96\x12\x88\x6d\x51\x56\xa6\x4c\xe0\xa3\x31\xfe\x19\xed\xb3\x71\xbc\xd2\xde\x49\x0f\x67\x19\x6e\x88\xef\xbf\x1e\x4f\xff\xa2\x5c\x9e\xb1\xc0\x25\x9a\x48\x26\xa3\xc4\x33\x8a\xc5\xdc\x76\xdb\x5f\xf7\x77\x66\x28\xdf\x3d\x60\x3a\xcf\xc5\x77\x73\x29\x0d\x02\xa5\xfb\x87\xa5\x82\x72\xdc\x6e\xab\x53\xfa\x65\x23\x76\xb6\xa1\x40\xe0\x94\x42\xd1\xcd\xf7\xc3\xa1\x7b\xc2\xe5\x93\xe3\xe3\xef\x1f\x93\x71\x9a\xfe\x45\xd1\x34\x5f\x70\x2a\x55\xd0\x2d\xcd\xd0\x40\xf0\xeb\x1b\x10\xaa\xb4\xee\x1a\x40\xa7\x5d\x49\x46\x03\xfe\xd3\x72\x54\x69\x9a\x55\x24\x60\xda\x90\x16\x9a\xaa\xee\x51\xc0\xb5\x3e\x70\x15\xc2\x8d\x63\xd2\xeb\x41\x93\xa6\xf5\x48\xd0\x9c\xaf\x2a\x9d\x3b\xa0\x52\xd5\x80\xb7\x87\x9c\x33\xb6\xce\x28\x21\x44\x99\x77\xec\xad\x21\xcf\x96\x3c\x0f\xf8\x53\xc6\x11\x5a\x12\xe5\x72\x6b\x20\x3a\xfa\xa3\xc4\x05\x5e\x4a\x31\x81\xab\x24\xa0\x96\x86\x70\x74\x53\x10\x80\x73\x82\x84\xa4\xeb\xe9\x97\xf9\x5f\xac\xb1\x91\xa6\xe4\x0b\xb8\x4f\x27\xc5\x1e\x4d\x24\xfd\x24\x4c\xc1\x1b\x16\x84\x1f\xe8\x1d\x47\x83\x3c\x4d\x29\xf8\x49\xca\x71\x44\x28\x12\x90\xf6\x67\xc1\xa7\x10\x5c\xda\x7e\x08\xf5\x15\xde\x9a\x57\xf4\xce\xc2\x5b\x45\x3a\xf4\x4c\x2e\x04\x0b\x23\x1d\x24\x47\x3e\x3c\x41\x18\xf6\x83\xe1\xb9\xbb\x84\x35\xf7\xd9\x9d\xd1\x27\x56\x14\x50\x41\x9a\x7a\x3f\xcc\x29\x8a\x8e\xd7\x96\xf2\xc7\xdb\x79\x08\x87\xce\x0e\x36\xbf\x65\xb0\xfd\x3a\x1e\x7d\x71\xb4\x22\x5f\x33\x7b\x73\x44\x67\xe6\x44\x4d\x41\x77\x82\xc6\xe6\x54\x98\x79\xc1\xb5\xdb\xff\xf9\xa0\x0e\xe6\x66\xc5\x56\x3f\x28\xdb\xa9\x9c\x1c\xf7\xeb\xe0\xec\xb8\x62\xad\xed\xd0\x7a\x2a\xe7\x07\x76\x60\xf5\xf5\x89\xbc\xaf\x3a\x4b\x79\x7c\xa2\xa9\x56\x4d\xe3\x6a\xb3\x86\xb6\xf9\xff\x9a\x86\x0c\x99\xb9\x0b\xf3\xd0\x41\xc4\x7e\xe6\xa5\xb8\xbc\x5f\x5d\xcf\xfc\x7b\xb7\x55\xd5\xd2\xab\xaa\x1b\xfd\x92\x09\x32\x96\x72\x2d\x39\x3e\x41\x13\x0f\x38\x31\x4d\x33\x0e\xfe\xec\x2d\x56\xf2\xf8\x04\x21\xec\x8d\x14\xcb\x1b\x20\xf9\x2f\x95\x63\xe0\x9c\xae\x2b\x4e\x13\xb8\x0f\x30\x70\x61\x98\x7a\xce\x95\xd4\x13\x80\x3b\x3d\x60\xb7\xf7\x40\x05\x4d\xca\x1e\x38\x80\x85\x70\xab\x9e\x66\xec\xf1\x78\xb7\xe3\xf2\x7f\xec\x98\x1f\x91\x31\x4a\x53\xc9\x38\x25\x8a\xc7\x4c\x24\xd1\x80\xdf\xb3\x39\xfc\x5d\xb8\x3e\x05\x23\xd1\xfa\x07\x33\x12\x36\x37\xfb\xf4\xa2\xad\x77\xcd\x91\x76\xda\x07\x07\x5c\x08\xaf\xc4\x8d\xf3\x9b\xcc\x32\x78\xce\xa6\xe3\x09\x43\xc7\xb5\xa4\xae\xe2\xf1\x78\xda\x0c\x85\xd2\x3e\x29\x3e\x23\x01\xb5\x8e\xa2\x7b\x09\x4a\x53\x50\xb7\xe8\x9e\xfb\xaf\x64\x97\xf5\x17\x52\x3a\x31\x1f\xa0\xe6\xf8\xe4\x71\x31\xac\xcd\x58\x73\xff\x03\xe7\x3d\x0b\xae\xa4\xd4\x98\xd2\xd7\x9c\xd2\xdf\x69\x36\x9b\x7b\xca\xc5\x15\x0d\x18\xdb\x8e\x73\x97\xa4\xd4\x13\xe7\x5a\x96\x69\xbd\xe9\x96\x92\xff\xa0\x7f\xf3\xd4\xde\xde\x96\x63\xeb\xcc\xed\x40\xa3\x01\xb0\x7f\x3d\x26\x5b\x8a\xa8\x36\x9d\x68\xc1\x9c\xe2\x99\xc0\x7c\x6e\x52\x89\x94\x48\xc7\x46\x98\x62\x80\x9f\x37\x70\x3e\xaa\x2d\x4f\x00\x62\xe0\x0f\x2b\x52\x6a\x40\x4c\x86\xd9\x70\x4b\x25\xcf\xdd\x69\x68\xc8\xf0\xd8\x36\x55\x21\x49\x23\x3b\xbd\xf5\xd4\xf0\xb4\xc3\x57\xca\x8d\xca\x81\xdc\xaa\x13\xb8\xdb\x25\xad\xe3\x9d\xe0\x5c\x15\xb2\xdc\xb1\x29\x63\x8f\x6d\x82\x6b\xe5\x5e\x91\x6c\xf2\x3a\xf0\x63\xf3\xe2\x2a\xcb\xc8\x49\x83\x5b\xb0\x8c\x6c\x5c\xc9\xc5\xe2\x5a\x1d\x9a\x9f\x7b\x2a\xf6\x0f\xe7\x05\x75\x0a\xf5\xfa\x16\xfc\x5f\x49\xfd\xae\x29\x60\x88\x87\x20\xbf\x60\x53\xa0\xb7\xa1\x98\x2c\x95\x3f\x9d\x81\xed\x58\x7c\xa4\xd7\x16\xe4\xc3\xbb\x69\xc1\xb8\x7a\x50\x20\x6e\xb9\xd9\x1d\x10\x8e\xa1\x0d\xb8\xc5\x6c\x9c\xc0\xd7\xe3\xa9\x18\xf2\xc9\x31\x64\x55\x67\x5f\x8f\xad\xff\x7d\x25\x39\xd5\x12\x2d\x28\x28\x5f\x14\x5e\x94\xce\xb4\xd9\x22\xb6\xed\x70\x25\xbb\x25\xc2\x36\xed\xdd\xcf\xa0\x4d\x36\x39\x3e\xc1\x75\xc7\x99\x43\x8e\xd6\x6e\xea\x46\xf6\xa1\x42\xb9\x94\x92\xce\x65\x47\x1a\xd3\x91\x5c\xd2\x2f\xf8\xbb\xc1\xb5\xea\x54\xe7\xaa\xef\xc6\xb1\x81\xe3\x9a\x5a\x79\x56\x5e\x68\x87\xc6\xef\xe8\xb5\x01\xb0\xea\xdc\x86\xdd\x2a\x6a\x51\x6d\xfb\x6b\xe8\x6b\xa0\x37\x70\xcf\x4c\x4e\x34\xf2\x16\x76\x44\x34\x2e\x5e\xcc\xe8\x1c\xc9\xff\x19\x15\x0f\xc4\x18\x9f\xf8\xe1\xae\x66\x7f\x0d\xce\x69\xc6\xb1\xda\x64\x78\x8c\xb9\x3d\xcd\x80\xf1\x15\x1f\xcd\x1d\xbb\xab\x7d\xd1\x66\x14\x42\xca\x8f\x8f\xe5\x5f\x8f\xc9\x38\x8c\xca\x37\xdd\x58\x1c\xe8\xc6\xd2\xb6\x1c\xdf\x54\xe8\xe6\x67\x87\x07\x17\xa6\x3b\x3b\x0f\x48\x11\xf8\x6d\x1d\x1f\xb3\xaf\x6d\x70\x7d\x45\x80\x98\x33\x34\xa8\xd2\xf4\x9b\xac\x82\xb2\x49\xa4\xc1\xc4\xe7\x0b\x17\xf7\xa9\xf5\xdb\xbb\xd6\xfa\x89\x7a\x96\xb1\x03\x06\x1b\x95\x8e\xac\x8f\x80\xe8\x8d\xa8\x23\x9e\x23\xdb\xe3\x3e\xda\xb3\x60\xad\x54\x95\x01\x40\x03\x9f\x86\x6f\x88\xbc\xf9\x54\xb4\x62\x66\xe0\xe3\x2e\xab\xab\x03\x39\x09\x5c\xa5\x77\x8e\x61\x92\xa2\xf8\xac\x9c\xab\xf8\x6e\x1b\x13\x56\xe2\x13\x34\x38\xe7\x34\xff\xb8\x57\xd8\xee\x07\xb0\x20\xfe\xc5\x46\x1d\x0e\x86\x05\xbf\x68\x79\x5c\x46\x1d\xa0\x20\xe0\xdf\x35\xaf\x42\xe2\xb4\xfa\x81\x62\x29\xeb\x19\xef\x05\xbf\xb6\x2e\x8d\xe9\xf9\x44\x3d\x3e\x44\xdf\xe3\xc3\x2e\xd3\x54\x45\x4b\xe9\x23\x17\xc8\x3a\x8e\x8d\xe6\xc0\x56\xce\xe6\x8e\xfc\x56\x64\x7c\x5a\x39\x9e\xa2\x1a\x0e\x51\x39\xab\xe6\x4e\xa3\xc2\xfa\x02\xd3\x72\x32\x3e\xcd\x9d\x97\x54\x3e\x24\x8f\xd0\x0d\xcf\xd8\x2c\x9f\x63\x36\xcb\x87\x27\x73\xb4\xdf\xb7\x8f\xf2\x67\x9a\x05\xd9\x65\x9e\x7b\xf7\xf2\x19\x6d\xe5\x3d\x7d\xaf\x36\xbb\xf2\x00\xf2\x2d\xe2\x4f\x5a\x22\x5d\x20\xb4\x0e\x58\x1c\x26\x21\xfb\xac\x0c\x58\x0a\x93\x58\x8b\xc0\xcc\xab\xf5\xad\xc7\xb4\xb3\x75\x06\x27\xd9\x90\x02\xc7\x98\x47\x84\x46\x36\xd0\xfa\xc7\x6a\xb7\xab\x7a\x94\x7a\x55\xd7\xf2\xba\xdb\x39\x1d\x4a\x9f\xd6\x67\xb7\xcb\x3a\xca\x95\xbe\xb2\xfa\x98\xaa\xf1\x69\xa9\x17\xd8\x3c\x39\x84\x8f\x34\xc8\x7c\xf8\x94\x6a\x9b\xa4\xf5\xe6\x4d\xd3\x4c\x4e\x80\x66\x78\x31\x1d\x7d\xa4\xd7\x98\xa2\xd0\xe3\xf7\xe8\xc4\x37\xb9\xd3\x20\x27\x78\x0c\xbe\xc2\xba\xb5\xc2\xb1\x41\xee\xcd\x8c\xcf\xd3\xf4\xa3\xd6\xbd\x2b\x07\x56\x59\xee\x7d\x2f\x47\x65\x15\x78\x3a\xc6\x55\x6c\x42\xb4\xb4\xa0\x93\xd8\xa7\x9e\x7e\x29\x35\xb8\xe0\xd1\xd2\x4f\xda\xd3\x9b\x35\xd7\x30\x72\xbc\xd3\x5a\x68\x81\x2f\xbd\x44\xad\x9f\x68\x56\x22\x13\x14\xac\x5b\x2e\xf1\x13\x49\xe5\x54\xad\x66\x6d\xee\x9a\x1b\xb6\x13\x9a\xab\x7b\xa5\x31\xcd\x5c\xa7\x0e\xe5\xe1\x0d\x86\xd3\x71\x61\x3e\x52\xbb\xde\x53\x87\x1e\x08\xc0\x50\x04\x85\x5b\x98\x35\x13\x8a\x67\x72\x48\xfc\x17\xcd\x97\x1b\xc8\x98\x39\x05\x9e\x7b\x12\x27\x6b\xc6\x07\xc7\x50\xe2\x80\xaa\x1d\xa9\x58\xcf\xc5\x55\x55\xe4\x82\x15\x54\xab\x5e\x39\x9a\xea\xb0\xa2\x89\xf2\x17\xb2\x59\x5d\x3f\xd2\x6b\x14\x04\xe9\xea\xb1\xf6\xa0\x97\x1a\x9f\x6d\x37\x53\xd3\xb6\x5f\x26\xec\xf3\xd3\x8f\x2e\x6d\xe3\xa9\xd9\xf5\x72\x03\x83\x0f\xeb\x07\x9a\x09\x84\x9f\x82\x2e\x56\xa5\xbb\x45\x93\xa7\x54\xf3\xf5\xc0\xfc\x6c\xaf\x63\x38\xb1\xd8\xe2\x96\x88\x4d\x1d\xa1\xb3\xe0\x4f\xc7\x11\x9f\x09\x60\xbf\xa8\xb6\x4e\xed\x71\xfb\x96\x0f\x58\x38\xa8\xcd\xd8\xb8\xd4\x51\xb9\xd9\xa3\x01\xf0\x8f\x80\x54\xb3\xdb\x8d\xd1\xf0\xc4\xc2\xbc\x6b\x9b\xe1\x28\x31\xbb\x43\x1e\x9c\x8c\x8f\x54\x90\x34\xc2\x3c\xce\x04\x74\xdb\x6c\x9d\xfe\x1b\xc3\x36\xca\x7f\x8f\x8f\x7b\xdb\x6b\xca\x48\x8b\x30\x6d\xf2\xb1\xe7\x9b\x1a\xbd\x0a\xdb\x16\xc0\x5b\x38\x27\xa4\xcd\xc0\x80\x5c\xd6\x01\xa9\x12\x0a\x9d\xcd\x24\xb9\x36\x57\x33\xe0\x1f\xeb\x04\x42\xdc\x4b\xdf\xc9\x7a\xe6\x4a\x8f\xe8\x36\xe6\x05\x6b\xac\x2e\xe1\x55\x59\xda\xe9\x10\xb6\x52\x81\x70\xa9\xda\x3f\x3e\x36\x7f\x81\x3e\x5f\xb2\x33\x90\x48\xdb\x66\xd2\x70\xd0\x82\x7d\xfc\x04\x9c\x73\xda\x43\x33\x78\x3c\x77\xb7\x01\x43\x50\x54\x4c\x5d\x15\xde\x03\x7b\xf2\x14\x59\xc3\x9f\x68\xc6\x4d\x9a\x7e\x4d\xf8\xb8\x24\x7c\xbc\x55\x10\x4d\xba\x54\x19\x85\x04\xd7\x43\xa7\x84\x04\x38\xde\xba\x87\x48\x5a\x81\x4c\xcb\xdc\x55\x93\x95\x84\xcd\xaa\x39\xf2\xcc\x44\x10\x8d\xe8\x8b\x37\x26\xb0\xd8\x0d\x5d\x4f\x8f\x9e\x87\x6d\xb5\x6d\x0a\xc9\x14\xae\xd7\x74\x29\xe8\x2a\xb3\xc3\x38\xd1\x00\xcb\xed\x12\x71\x64\x90\x8f\xf4\x1a\xe2\xd1\xcd\x8f\x61\x32\x4a\x86\xd4\x1a\x91\x7c\x22\x74\xb0\x79\x8a\xc5\xf0\x04\x73\x34\x11\x5f\x9f\x00\x01\x86\x5b\x54\x7e\x61\x2c\xf7\xb4\x23\x44\xbd\xfb\x17\x75\xfe\x07\x14\xfe\x46\x87\x1c\x06\x1f\x19\x5a\x65\x7b\xf0\xfa\x8b\x15\xf1\xfd\x0a\xf7\x0a\x8c\xab\x71\x15\x36\x20\x19\xf4\x75\xce\xf0\x4a\xc8\x17\xde\x9e\xd9\x1e\x9e\x65\x02\x4d\xed\x94\x4d\xac\xc1\xc4\x73\xc6\xa2\x87\x83\x14\x03\xbf\x4e\x7d\x4f\x86\x9d\xdf\xed\xbc\x9c\xd1\xbf\x86\x4d\xdb\xb9\x9a\xe4\xdd\xa6\x5f\xfa\x8c\x17\xf8\xc1\x13\x3a\x3b\x51\x4e\x04\x8f\xac\x3f\xe1\x57\x00\x0c\x6b\x82\xa2\xb2\x88\xc5\xc0\x0b\x54\x72\xcf\xdc\x69\x40\x11\xa8\x72\xee\xb9\x4f\xda\x87\xa5\x9f\x18\x2a\x71\x56\xb0\x84\x95\xf2\x5d\xe2\xdb\xc9\xe0\x99\xc7\xf9\xfa\xea\xfb\x57\x1d\x4b\x00\x05\xd0\x3c\x17\xd1\xe1\x36\x85\x77\xe0\x41\x82\x61\xbe\x04\x63\x94\x50\xb3\x6a\x3e\x28\x1d\xa2\x61\x96\x83\xaa\xd3\xc0\x0c\xca\x9f\x48\x6e\xe2\x67\x92\x67\xce\x71\xe9\x6f\x85\x17\xff\x0b\x7d\x91\x7b\xf6\xd7\x48\x5f\x7e\xf7\xd6\xbb\xeb\xf7\x4e\xf7\x66\xc5\x9f\x43\x76\xc6\xbd\xef\x05\xfe\x5e\xe5\xac\xff\xe6\x16\x45\x83\x5b\x33\x72\x64\xf9\x62\xb7\x68\xf6\x61\x38\x03\x2d\x98\x64\x2a\x72\x9f\x5c\xf7\x70\xb5\x35\x15\xcd\x36\x82\x7e\x54\x76\x11\xa8\x34\x97\x2c\xe9\xab\x31\x0c\x77\x63\x9d\xbb\xd8\x56\x59\x57\x83\xf4\x2d\x8d\xfa\x74\xb5\x9c\x29\xbf\x8a\x84\x13\xfa\xc4\x51\xa0\x49\xa5\x70\xb9\x9b\xad\xfe\x56\x3b\xf7\x02\x2a\x01\xf1\xc1\xc6\xa9\x37\xa7\x38\x30\x14\xd3\x60\x6a\x21\x08\x3f\xab\x09\x58\x52\x70\x77\x75\x1b\xe5\xc8\x21\xb9\x91\x1a\xed\x91\x5d\xeb\xc2\x5b\x75\x2e\xe5\x34\xcd\xea\xd4\x01\x2e\x08\x24\x43\xb3\x8b\x80\x30\x87\x95\xf9\xe1\x96\xdd\x00\x50\xd4\x81\x23\x55\x91\xd7\x82\x58\x8c\x8e\x1e\x98\xe8\x36\x47\x6a\xeb\xd2\xc0\x71\x5e\x55\x00\xc7\xbb\xac\x2e\xcf\x59\xd9\x96\x70\xac\x70\x03\x5f\xd6\xec\x77\xda\xe3\x97\xad\x6d\xad\xf1\xb2\xb6\x29\x8d\x8c\x34\x9b\x07\xd9\x8a\xa0\x7c\x27\x24\xd0\x73\x73\xb2\xda\x2f\x70\x47\xad\x4d\x5f\x11\xe8\x80\x0f\xa0\xc6\xc8\x3e\x74\x30\x63\x3a\x2d\xcb\x52\x0e\xe0\xc5\x2e\xc0\x4f\xf4\x0f\x0c\xb5\x93\xc2\xdc\x4b\xb8\xe0\x2c\xa4\x0e\x38\x04\x96\xd3\x72\xc4\x8c\x7f\x94\x4b\x54\x52\xc1\x0b\xe5\xa8\xa0\x1f\xe5\x71\x17\xb0\xdf\x68\x06\xa6\xc2\x1b\xbf\x16\xb6\xdb\x75\x07\x5c\xc9\x31\x7a\xfb\x34\x47\xd8\xe2\x27\xfd\x16\xfa\xad\xfc\xa6\xf4\x11\xb3\xf1\xdc\x24\xdc\x80\xd0\x2e\xb8\xd0\x24\x97\x3c\xe5\xb1\x4e\xb3\x20\x85\x70\x1e\x4b\x78\x6f\x84\xd1\x56\x22\x80\xb6\xeb\x46\x0c\xe5\x07\x73\xf2\xc1\xa8\xa4\xcd\x20\x7e\xa4\x69\xfa\x23\x35\x70\x81\x39\x78\x08\x80\x4f\xa1\x24\x54\xd3\x8c\x92\xd2\x65\x36\x41\x2a\x15\xa6\x49\x57\x82\x26\x94\x30\x7b\x9a\x11\xce\xda\x26\x47\x08\x37\xad\x20\x72\xff\x9c\x72\x78\x0a\xfa\x9e\x34\x7d\x9b\x71\xfc\x41\x9b\x72\x11\x84\x69\xb6\xc1\x3d\xde\x99\x8e\x86\x6d\x1a\xce\xf2\x3b\x9a\xa6\xdf\x81\x37\xcf\xde\x85\x32\xfd\xa0\xee\x86\x1f\x15\x1c\x91\xdb\x86\x7f\xf7\xae\x9b\x1f\xa9\x8e\x3f\xfc\x81\x0e\x7e\xa4\x84\x77\x7c\x84\x7e\xa4\x44\xd8\xfc\x7f\xe6\x98\xf8\xfe\x45\xbf\x40\x6d\xba\x1f\xde\xf4\xe9\xb8\x90\xef\x54\xeb\xf8\x2f\xb4\xeb\x4a\xe8\xe2\x94\xfc\xa8\x90\xef\x7d\x5a\x8e\x4b\xab\x5b\xc7\xbe\x13\x37\x29\x25\x17\xeb\x7b\xb8\xcb\x67\xf2\x50\x9c\x79\x69\xd0\xaa\xe9\xcf\x46\x89\xa0\x14\xa5\xca\x84\x35\xf6\x1d\x35\xda\x26\x70\x13\x83\xa8\xec\x86\xb0\x35\xc0\x85\x53\x79\x54\xa8\xbf\x3b\x78\x13\x7c\xb7\x3b\x62\xbb\x1d\x88\xf3\x34\xea\x77\x4f\x47\x4d\xf9\xb1\xac\x3e\x59\xcc\x85\x29\x9f\x74\x9e\x05\x47\x46\x77\xdd\x43\x83\xa6\xb8\x24\x1d\x8e\x4d\x4c\x85\x27\x70\x4f\x44\x2c\x9e\xdc\x05\xaf\xf3\x96\xa3\xa9\xd5\xe8\x90\xef\x21\x3b\xce\x8c\xcd\x91\x4b\xf7\x68\xfb\xf2\x8f\x76\x5f\xe4\xb5\x4a\x66\x73\x9c\x13\x8a\x1b\xe2\xf7\xe0\xb4\xf1\xf5\x28\x6c\x9d\x39\x35\x51\xc6\x49\x63\x64\x5e\x94\xa6\xae\x20\xba\xf1\xde\xe8\xe0\xd1\x7c\x74\x99\x6f\xb3\x48\xd0\xd2\x07\x88\x65\xde\xa3\x81\xc2\x25\xd4\x06\xf0\x0a\x17\xc6\xf4\x3d\xfb\x90\xe5\xea\x28\xcd\x91\xb1\x36\x5c\x41\xb6\xc5\x0f\xc0\x86\x29\xa4\x27\xb8\x00\x96\x9e\x4b\x46\xc6\xc8\x39\xbc\x47\x28\x27\xa0\xd0\xcc\xa3\x2b\x99\x77\x56\x32\x9f\xf1\xf9\xa4\xf3\x38\xe3\x1e\x10\xe2\x9a\xac\x6c\xdb\x4b\x17\x90\xbe\x46\xa8\xb3\xa0\x6c\x94\x17\x92\xfd\x9a\xfe\x3d\x40\x10\xc8\xe5\x0a\xe5\xd8\xbc\x45\x7b\x34\xc9\xc9\x45\x96\x23\x8d\xc9\x65\xfd\xdc\xfc\x69\x05\x37\x09\x52\x8f\x7e\xd8\xae\x72\xd1\x0a\xae\x0a\xaf\x5b\x74\xea\x31\x42\x39\x8a\xe3\x29\x67\x1c\xa9\x79\x9b\x35\xa3\x5f\x2b\x56\xc2\x82\xe3\xcd\x1c\x61\x3d\x9f\x1b\x6b\xdd\x01\x5f\x0a\x3b\x65\x9e\x0f\x6f\xee\xa3\x27\x90\xad\xef\x8a\x2b\x7f\x23\xf5\xbd\x0d\xc2\xf6\xae\xe6\x0a\xed\xdb\xe1\x8d\x7f\x51\x24\xee\x9f\x94\x3c\xfc\xef\x11\xec\xb3\xbf\x3c\xf4\x7c\x2f\x85\xcf\x15\x7a\xc1\x6e\x37\x09\x1a\xf0\xc7\xe3\xa9\xc8\x1c\xac\xcf\x3f\x29\x4e\x46\x40\x7f\x27\x1e\xc7\xd4\x76\xbc\xc5\x35\xe1\xae\x9e\x7d\x82\x70\x43\x4c\xb8\x33\x1f\xd5\xcd\xb9\x5a\xcd\xac\x1c\x9e\xe0\x1a\x99\x63\x81\x13\xa4\xf3\x7d\xfa\x65\xea\xe1\x09\x1a\x88\x61\xf0\x6c\x8c\x4b\x34\xc8\x49\xa1\xd7\x50\x81\x58\x34\x8f\xf3\x53\x94\x55\x64\x19\x8c\x00\x3d\x1e\x4f\x59\x96\x89\x61\x31\x6b\x86\xc3\xf9\x70\x89\x62\x63\xa1\xb6\x00\x5e\xe2\x0a\x33\xb4\xcf\x92\x04\x03\xac\x84\xef\x56\x2a\x02\xd3\xc8\x11\x0d\x68\xc4\x4d\x8b\xac\x76\x99\x7b\x25\x41\xf9\x64\x40\x29\x19\x40\x79\xaa\x88\xed\xcf\xda\xd8\x6a\xa5\x2a\x4b\x6a\x85\xc8\x72\x5c\xe9\xc3\x71\x54\x22\x97\x5c\xb7\x18\xe9\xa4\x8e\xd9\x5f\xcd\xa9\x7a\x50\x53\xf1\x60\x9d\xb3\x82\xae\x26\x0f\xd4\x3e\x92\x47\x75\x9b\x8b\xcd\x83\xe4\xaf\x43\xe6\xf6\xe5\xf0\xaf\xc9\x83\x65\xd5\x14\x2b\x48\xcb\x7b\x4e\x1f\xac\xab\xa6\x5c\x8d\xfe\x6a\x34\xcc\xe0\xb9\xa8\xdd\xa9\x3b\xe2\xbd\x75\x63\xcd\xbb\xe0\x42\xf5\x34\xab\x8d\xaf\x08\x20\xcf\x59\x5f\x2f\xe5\x3b\x2d\x6f\x08\x14\xc1\x08\xa1\xb7\x5c\x10\x35\x15\x3f\xb4\x28\x4b\x06\xfe\xa4\x1c\x6b\x84\xbd\x9f\x75\x97\xd0\x24\x56\x5a\x27\xe3\xf4\x25\x4b\x2e\x32\x74\xa3\x94\x6b\x2d\x3c\x02\x5b\xc2\x22\x02\x9c\x66\x90\xc8\xdb\x72\x37\x0a\x0c\x00\x39\xd5\x3c\x39\x3a\xc1\x7c\xb4\xe0\x34\x5f\xbd\x2d\x8b\x6b\xfd\xd3\xf9\x86\x6b\xa6\x4d\x25\x38\x78\x0a\x0c\x98\x2e\x73\x41\x85\xa0\xdc\x2b\x50\xfb\x0f\x5c\xf6\xeb\x99\xb0\x18\x7d\xf3\x30\xb2\xd3\x51\x47\x15\xd0\xa9\x5c\x06\x3b\x9a\x0a\x26\x05\x46\xbf\xf9\xb1\x76\xaf\x33\x60\x14\xf1\x4a\x2b\xe4\x3a\x59\x39\xa2\x9d\x93\x6a\xe0\x5e\x00\x47\xb0\xdb\x71\xe1\x0d\x20\x97\xcb\xb0\xdf\xfb\xfa\xdd\xac\x24\x1c\x8d\x16\x5b\xbd\x28\xfa\x7a\x2a\x3d\x1e\x93\x83\xff\x7a\x3b\x0b\x9f\x14\xf2\x2c\xc8\x55\x47\xfa\x62\x6d\xb9\xda\x12\x26\xb6\xce\x3c\x69\x4d\x15\xf3\xb3\xef\xe9\x72\xf8\xc8\x81\xda\xda\xf9\x71\xce\x65\x17\x54\x40\x54\x41\x4d\x45\x10\x27\xa1\x41\x69\xcd\xdc\x78\x89\x7d\x73\xfb\x52\xcf\x45\x4c\x17\x9e\x07\x79\x00\x3b\x27\xa9\xf2\x42\x32\xf9\xb4\xf2\x36\xdf\x84\xef\xd1\x7e\x8f\xd9\xc8\x6e\x3e\xef\x2a\x54\xcd\xba\x6d\x39\x96\x05\xed\xb6\xec\x14\x74\x1b\x16\x0a\x6e\x3b\x7e\x41\xa6\x60\x6b\xcd\x44\x98\x47\x51\x7e\xbb\x88\x7d\x6c\x25\x50\x47\x4e\xe5\xa1\x72\x32\x66\x08\x87\xda\x16\xfb\x40\xbe\x93\x57\xf8\xe3\xb1\x17\xc1\x69\x9d\x0a\x6d\xbe\x27\x5f\xfa\x93\x93\x19\x53\xd8\x50\xd9\xc9\x55\x8f\xff\x8d\x4d\x79\x64\xa7\x4e\x6b\xc1\xdd\x19\xf6\x43\x8d\x6f\x35\x0b\x7a\x10\x9d\xfa\x02\xb8\xe8\xfa\xf4\x5a\x8c\x9e\x34\x7d\x61\x21\x3f\x40\xdd\x09\xcb\x7b\xd1\x49\x7e\x62\x81\x90\xad\x45\xb0\x9d\xba\x42\x50\xae\x76\x8a\xd2\xf3\x2b\x76\x94\x5c\xea\x1e\xb2\x56\x2a\x64\x66\x22\x65\x38\x89\xd7\x60\x24\x2a\x79\x01\x79\xbe\xb8\x46\x5f\x8e\xf3\x7e\xeb\x7d\x67\x43\xe7\x69\x9a\x87\xa1\x1b\xf8\x95\x37\xea\x0a\x72\x25\x43\x7b\xbd\xd0\x87\xc1\x96\x35\x0b\x04\x57\xe2\x7b\xfd\x50\xa7\x9c\x97\x5d\xf7\x0f\xe0\x34\x9c\x36\xf5\xd3\xfc\x3a\xb3\xd7\x95\x32\xc9\xd4\x0a\xd8\xf1\x4c\x2d\x7c\xf0\x6a\x59\x54\xe7\xe7\x94\xbb\x2f\x60\xe3\x77\x7b\xd0\xc9\x7e\x10\xb9\xb5\x9f\xe6\xa5\xbc\x7c\xe5\x9d\x2d\x87\x74\x5c\x95\xc5\xf5\x03\x73\x86\xe4\x7d\x2d\xe4\x2d\x5d\x95\xfa\x26\x9f\x3c\xf8\xeb\x50\xc9\xc8\x65\xbd\xa5\x4b\x01\xe2\xb1\x6c\xde\xf5\xa9\x6f\xde\x74\xf0\x0a\xc8\x9a\x57\xc6\x8b\xd3\x5d\xd1\x3e\x29\x39\x04\x3c\xe9\xcd\xa7\xdd\x21\x7a\x0a\xc2\x29\x3b\xe8\xa2\x69\xcf\xd3\xa0\xf5\x9b\x50\x10\xb0\xdb\xad\x59\x0b\x80\x16\xba\xdb\x5f\x95\x70\x56\x16\xb1\x6d\x73\xa5\x60\x80\x60\xfb\xc3\x56\x55\xbb\x1f\xd7\xa4\xf2\xb2\x12\x31\xd2\x33\x32\x5c\x83\x96\x03\xbc\x6b\xed\x89\xd1\x41\xf7\xa1\xd7\x8d\x91\x8b\x77\x3b\x7f\x47\x37\x48\xc1\x24\x81\x23\x11\x56\xfc\x49\x83\x30\x93\xfd\xed\xea\x74\x9d\x1f\x75\x8b\x10\x39\x02\x22\x7a\x08\x08\xf7\x08\x88\x0e\x0b\xf0\xaf\x3d\xd3\x56\xfb\xe6\x43\x7b\xcc\xf7\xd9\x37\xe0\x30\xdd\x41\x42\x29\x95\xf6\x90\xf5\xb2\x46\x77\x4c\xad\x7b\xf0\x3a\x2f\x63\xd7\x79\x19\xbd\xae\xf4\xcb\x85\xba\x02\x6d\x11\x1d\x74\xba\xc7\x65\xf4\x36\x6c\x7d\x65\x8a\x78\x5f\xf5\x5e\x5a\x06\xeb\x8a\x12\xfd\x35\x1a\xb5\xee\x40\x2f\xa6\xd9\xd5\x77\xd9\xce\xc9\xa7\x74\x49\xba\x0e\x33\xc6\x71\x4c\xdb\x2e\x94\x1d\x61\xb7\xbb\xd9\x4f\x32\xfd\x43\xbb\xe3\x44\x15\xaf\xdc\x28\x5e\x35\xd9\xee\xd3\xbd\x9a\xd1\xeb\x62\xfb\x3d\x56\x9f\x79\xc6\xaa\x8e\x4e\xcd\x7c\xe3\x19\x47\x94\xd6\x96\xef\x33\xe8\xc9\x27\x9e\x6f\x15\xb4\xeb\x59\xb3\xa5\x1c\x65\x2f\xf4\xd7\xc8\x53\x57\x55\xe2\x0f\x54\xea\xea\xd1\x80\x5e\x77\xaa\xd1\x85\x4b\x91\xcd\xe6\x08\x33\x81\x32\x50\xf1\x8a\xd9\x89\xfc\xdf\xa3\x39\x9a\xb8\x12\x02\x0a\x00\xa7\x9f\x0b\x52\x89\xd1\x39\x2b\x57\xca\x21\x62\x10\x01\xfc\xc9\xd5\xce\xaf\x45\x2b\x82\xe2\x66\xaf\x11\x37\xfe\xff\x73\x24\xaa\x92\xfe\x94\x1f\xfa\x46\x15\xc8\xee\xbc\x7d\xb5\x8d\xa2\xbd\x90\x0e\xf2\xdc\xee\xe0\x81\xdd\xc0\xfb\xbb\xec\x19\x5c\xdc\x2a\x83\x99\x03\x19\x97\xc4\x94\xe6\x87\x80\x00\x12\xf2\x7d\x33\x31\xc7\x7f\xac\x58\x71\x27\x99\xa2\x65\xaf\xe7\x10\x0a\x6d\xac\x8b\x75\x73\x69\x03\x85\x0f\xdd\x06\xc6\x45\xc8\xfb\xa2\x44\xf8\x8e\xc4\x9d\xb9\x90\x81\xb8\x4b\x86\xa9\xd6\xdd\xe3\x5d\x96\xd3\x9f\xfa\x07\x5c\xe3\x59\x43\xe4\xbf\x52\xb5\xe1\x4e\x4d\xa1\xc3\xa6\x62\x2f\xec\x10\x7a\x58\x03\xc5\x95\x10\x42\x6a\x71\x9a\x95\xbb\x5d\xc7\x5f\xe0\xeb\x71\x87\x49\xc6\x65\x9a\xca\x9b\xdd\xb1\xd1\xc0\x0d\x1d\x6c\x07\x18\x61\x13\x1f\x7e\x24\x9b\x93\x42\xa9\xbe\xa4\xeb\x16\x47\xca\x11\xba\x8d\x21\x15\xe1\x6c\xe8\x59\xec\x15\xb7\x64\x55\x4b\x21\x8b\x74\x4f\xa6\x2d\xb0\x16\xf6\x5e\xb6\xa7\x60\x29\xfa\x19\xc9\xe4\x30\x23\xf9\xd7\x64\x28\x86\xc9\x5f\x7d\x46\x32\x89\x30\x92\xb6\xa9\xb5\xe8\xe7\x1e\x3d\xb6\xd1\x7d\xb0\x11\x8e\x4e\x68\x10\x66\x49\x27\x3c\xd4\x57\xb6\xce\x92\xb2\xb9\x3c\xa7\xdc\x8f\xd8\xf4\x4c\x96\x47\xea\x97\x09\xef\xf0\xf1\xab\x9c\x55\x23\xc4\x54\x57\xd6\x46\x14\xad\xdb\x00\xac\x1f\x95\xfb\x78\xd3\xc6\x31\x24\x50\xaf\x72\xd7\x19\xad\x60\x8c\xb6\xcf\x74\xfb\x3a\xd2\x30\xde\x03\xc3\x2f\x1e\x31\x97\x5f\xd2\x4e\x18\xe0\x4c\x9b\xd9\x85\xd9\xdb\xed\x62\x40\x62\xa0\x95\x78\xf8\xdf\x67\x0f\x47\x82\xd6\x16\x4c\x6c\x2b\x0e\x1b\xb0\x17\x9c\x5e\xb0\x5a\xf0\x6b\x32\x9b\x9b\x1c\xcc\x15\xa7\xaf\xd8\xf9\xcb\x72\x45\x3f\x93\x83\x0e\x0a\x92\x45\x50\xf0\x7a\xd7\xdf\x5c\xbf\xc9\x2f\x69\x0f\x50\x67\xd8\x12\xe6\xc4\x68\x79\xb0\x8e\x3c\x30\x21\x07\x62\x56\xce\x47\xa5\xac\xc8\xcf\x56\x31\x2b\xe7\xca\xab\x52\x7e\x1f\x01\x71\xf7\xe5\x05\xd3\x88\x59\x14\x2b\xa8\x06\xfd\x54\x26\x44\xee\x9c\x20\x83\x41\x0f\x87\x46\x1c\xb4\xb5\xd9\xa0\x8b\x31\xbe\x91\xfd\x9b\x50\xac\xd3\x36\x4c\xc4\x1e\x21\xbf\x7b\x4f\x55\x4d\xb2\xb1\x58\x56\x3b\x53\x0c\x3a\x7f\xa4\x42\x19\x56\xf4\x7d\x77\x6c\x2d\xbf\xd7\xd8\x18\x00\xe9\xb7\x3d\xbd\x56\xb3\xcd\xfb\x46\x21\xf0\x09\x42\x16\x08\xc5\xe1\x23\x6e\x15\x2b\x73\xa9\xf8\xac\xad\x18\xf8\x80\x89\x97\x02\x5f\x46\x07\x99\x25\x60\x84\x4d\xf0\xd2\xd0\x18\x75\x4b\x5e\x89\x4e\x3a\x74\x29\x51\xbd\x75\x5a\x56\x7c\x21\xc8\xd1\x09\xbe\x16\xe4\x46\x8a\x53\x93\x31\x5e\x44\x11\x42\x27\x47\x27\x92\x57\x7d\x10\x7d\xd9\x4e\x5f\x15\x2d\x04\x56\xe0\x9e\xef\x6d\x04\x62\x4d\xc5\x70\x88\x0f\xd4\x22\x79\x5a\x7c\x0e\x7d\x5e\x08\x32\x9b\x0f\x02\xe0\xcb\x85\x9a\xbd\x4f\x22\xe6\x4a\xeb\x68\xf3\x73\xa1\x9c\x37\xfa\xe0\x50\xad\x83\x14\xc5\xa2\x83\x04\x8a\x79\x1b\xf2\xfa\xb6\x9c\x47\xeb\x2c\xa3\x04\x7c\x6f\xf9\xd3\x6a\x45\x9f\x88\x6c\x8c\xd0\xd7\xe4\x3f\xfe\x3d\x4d\xe9\x63\xf2\xff\x8e\x8d\x43\xcf\x5b\x25\x77\x0e\xf2\x34\x35\x78\xbd\x0a\xd2\x34\x87\x28\x47\x47\x8e\x3e\x03\x39\xca\xda\x86\x1d\x67\xb8\xd0\x07\x4f\x55\x2b\x9c\x11\x61\xf0\x49\xcc\xf2\x39\xe1\xa7\x61\xfd\x1c\xe7\x2e\xc4\xa6\x56\x4e\xdc\x6c\x9d\x5d\x09\xc5\xa2\x48\xb1\xda\x40\x7e\xf1\x59\x0d\x23\x12\x33\x36\x27\x35\x6e\xd2\xb4\x19\x09\x03\x13\x4b\xc8\x13\xe1\xe9\x40\x43\x5c\xd6\x06\xa1\xb0\xd5\x06\x7b\x3d\xf3\x0c\x7e\xb2\x4a\x0f\x49\x55\x99\x7b\x41\x11\xd0\x20\x24\xd7\x82\x95\x0d\x1d\x28\xe8\xa3\x06\x61\x39\xf8\x06\x3c\xd0\xcc\xb8\x09\xdb\xa3\x6c\x46\x6d\xbf\x32\x34\xc7\x0a\xe2\x0a\xd2\x58\xbb\x08\x1e\x61\xd5\x9d\x7d\x3b\x61\xa0\x9c\x8f\x33\xb9\x63\x70\x3f\x7a\xee\x09\xc2\x74\xb7\x3b\x17\x3e\xc1\x5d\x08\x1c\x49\x18\xf5\x59\xa8\xf8\x91\x01\xec\x61\x6f\x4d\x9f\xb8\xce\x84\xf3\x16\x48\xa1\x0e\x53\x7f\x4a\x27\x59\xc4\xbd\x1d\x8c\x4e\x17\x4a\xf1\x28\xc7\x87\xfd\x84\x47\x6d\xa0\x5c\xd4\x4e\x46\x44\x07\xab\x4a\x7e\x99\xf1\x78\xe2\xa6\x8c\x23\xc9\xf2\x19\x21\xc0\x51\x95\xdd\x8e\x13\xd2\xa1\x35\xca\xfa\x39\x68\xa5\x5d\xea\xf6\xe2\x46\x90\x24\xab\x9b\x73\x00\x1d\x7e\x50\xad\x1f\x00\x03\x84\x12\x63\x7d\xfd\xb4\x61\x05\xf5\x53\xac\xda\x88\x89\xdd\x2e\xc9\xb4\xa1\x1a\x25\x7b\xe3\xaa\x12\x6c\x33\xe3\x5b\xe2\x47\x64\xbd\x35\xcc\x19\xbf\xf6\x60\xad\x8c\xb8\xe2\xb4\xc2\x5d\x14\xc0\xd0\x47\xc3\x3c\x45\x69\xca\xfd\x3d\x9b\xa6\x7c\xbf\x04\x00\x8c\x12\xdd\xec\xf7\x11\xbc\xde\x4f\x6a\xca\x3f\x8a\x36\x40\x8c\x36\xfb\x87\xe9\x5b\xbc\x48\x28\x8f\x13\x89\xa1\x6a\x48\x1e\x04\x52\x2e\x30\x8d\xc2\x9b\xa6\xf4\x88\x18\xf4\x60\xf5\xe3\xad\x76\x8b\x97\x7f\xbf\x01\x36\x48\xfd\x0d\x4d\xa9\x3f\x9f\xe5\x82\xaa\xbf\xd4\x11\xf2\xc2\xa8\x6e\xe9\x80\x32\x2b\x45\xdf\xd4\x54\x05\xa2\xbf\x17\xf8\x9d\x20\x37\x5e\x86\xab\xd7\xa2\x6d\x7c\xe5\x10\xf7\x01\xa9\xb9\x2d\x0b\x42\xe7\x10\xf6\xc0\xa6\x1f\x35\x61\x62\x2a\xea\x78\x02\xff\xc7\xcc\xf3\x8c\x16\x7e\xb0\x6c\xe0\x79\x3f\x13\x73\x97\xcc\x47\x11\xc8\xb2\xe3\x03\x43\x3c\xf0\x17\x42\xb4\x67\x0d\x20\x52\x81\x35\x34\x86\x67\x92\x4f\x61\xdb\x49\x81\x59\x11\xd4\x89\xe7\x70\xf2\x46\xf5\x47\x63\xc9\x03\x26\xe2\xcd\xa7\xac\x44\xd3\x2c\x9f\x89\x79\x24\xc7\x27\x36\xe0\x15\xb8\x21\x8b\x4c\xdb\x92\xb3\xe6\x01\xd3\x98\x9e\x92\x65\x16\x7e\x48\x5e\x63\x74\x45\x6e\x70\x41\x02\x23\x85\x5f\x5d\x93\x45\x06\x33\x80\x70\xbd\xdb\x65\x35\xb8\x88\x08\x2c\x85\x3e\x07\x2c\xba\xdb\x1d\x65\x75\xab\xa5\x70\xca\x0a\xbc\x24\xde\x68\x6d\xdb\xd8\xda\x23\xa0\xc3\x05\x71\xda\xfc\xc6\xfe\x15\x7e\x58\xdb\x0f\xd5\x5f\x68\x62\xff\x9c\xb8\xd7\xcb\x23\x6f\x84\xbb\x5d\xa1\x7e\xea\x2f\xb4\x47\x4a\x78\xe3\x37\x96\x64\xae\xad\xbd\x6f\x89\xd7\xd6\xbc\x57\xe0\x6f\x69\xb6\xc6\xa5\xf0\xfc\x83\xe4\x7e\xc2\x25\xae\x71\x2e\xe9\x45\xed\x81\x7b\x4f\xf4\xad\xa4\xb9\x3a\x81\xbe\x26\xe3\xdd\x2e\x51\x47\x95\x96\xb9\x53\xc3\x32\x5a\x27\x3a\xa9\xc6\x25\xe5\x17\x9d\xe7\xd3\xb6\x4f\xb0\xdb\xf2\x72\x8d\x76\x3b\xc0\xd7\xcb\xd5\xf4\x5e\xe6\x1f\xa9\x76\xac\x63\xc8\xf8\x03\xb5\xdf\x70\xe4\xb4\xd9\x7b\xbd\xcd\x6a\x34\x29\xd2\xb4\xf0\x3b\x7c\x7c\xd2\x6e\xda\x3a\x82\xe4\x70\x2a\x54\xd3\xb0\xd1\xac\x2f\x83\x8a\xa9\x03\x48\x04\x3e\xca\xeb\x9a\x5d\x94\x28\xbb\xd9\xe3\x1c\xe1\x86\x78\x30\xa1\x85\x42\x66\x30\x17\xb5\xc7\x5f\x66\x85\x66\x1d\x96\xa4\x9c\x15\xf3\xc1\x53\x91\x2d\xd1\x34\x6b\xc8\xd1\x18\xd7\xb3\x62\x4e\xe0\xa8\x16\x78\x89\x73\x7c\xb3\x47\x68\x02\x0f\x97\x66\x51\x1a\xb9\x69\x47\x8b\xba\xd9\x52\x4e\xaa\xd1\xfb\xb7\x6f\x3f\x20\x5c\x7b\xc3\x7c\x2a\x54\xd4\x62\x49\x9e\x99\x33\x56\x2b\x98\x38\xb7\x7c\x6a\x29\x7d\xd7\xfd\x5f\x3b\xf4\xc6\x5c\x4a\x5e\x82\x04\x8e\xcc\x3a\x5c\x04\xb9\x8f\x38\xea\x89\xe5\xa9\x49\x39\xfd\x66\xf2\x2d\x6e\xc8\xf8\xb4\x79\xcc\x54\x90\x99\xb9\xfc\x9b\xe1\x10\xd5\x19\xc5\xfa\xf1\xac\x99\xeb\x54\x01\x98\xe9\xa4\x0f\xa1\xe3\x9e\x4b\x01\x51\x4e\xdf\x4c\x7e\xc5\x4b\x32\x3e\x5d\x3e\xce\x4d\x75\xcb\xe1\x10\x15\x19\xc5\xf9\x6c\x39\xb7\x39\x07\x5c\xc8\x85\x37\xbe\xd8\x7d\x95\xa6\x76\x06\x24\xef\x12\x73\x44\xb5\x45\x4a\x90\x90\x5c\xd4\x83\xef\x85\xa4\x73\x63\xdc\xec\x71\x23\xff\x57\xb4\x6c\x8d\x4b\xc5\xa0\x07\xcb\x87\xbb\xee\x48\x00\x8f\x7b\x63\x1d\xd3\x55\xba\x3c\xbc\x72\xd7\xc3\x56\x5e\x39\x1a\xd4\x5f\x5e\x09\x58\xff\xcd\x66\x74\x6e\xcd\xd1\x97\x64\x7c\x7a\xe9\x98\xad\x4b\x25\xcd\xd6\x44\xcc\x2e\xe7\x78\x43\x38\xce\x1a\x92\xad\x48\x8d\x3c\xca\xf6\xad\x98\x6e\x6c\x76\xf0\x6c\x85\xa6\xef\xc4\x24\xdb\xd8\x8c\xe3\xd9\x0a\xe1\x95\xb1\x21\x30\x5a\xa3\xc9\x0a\x1d\x11\xf2\x0e\xd2\xce\x36\x8a\xd9\x83\xad\x5f\x81\xde\xee\xb5\x3c\xf0\xf0\x61\x9a\xb6\x9f\x48\x4e\x75\x49\x5e\x8b\xac\x8f\x68\xe0\x06\x7c\xfb\xf1\x1a\x0a\x75\x68\x87\x79\xdd\xa0\xa6\x7b\xc2\xe4\xcd\xa4\xcc\xf3\x05\xc2\x6f\x44\x56\xe1\x02\x37\xb3\x62\xae\xa7\x77\x89\xd7\x08\x0d\x3a\xdf\x25\x86\x3f\x4e\x10\xa4\x51\xb6\x6c\xbc\xe3\xe8\x35\xf0\x56\xad\xb2\xbb\xd4\x69\x9a\xd1\xcc\xfc\xf0\xd6\x4e\x92\xef\x4f\x4c\x6c\xaa\x46\xa4\xa9\xfb\xdb\xba\xac\x6f\x11\xda\x67\x02\x17\x70\xf5\x51\xec\x25\x38\xd9\x90\xf1\xe9\xe6\xf1\xd2\x2c\xda\x46\x2d\x9a\x9c\xa3\x5a\xf0\x66\x29\x2a\x9e\x1c\x81\xa7\xe5\x72\xb6\x99\x83\x93\x65\x6b\x10\x1c\xc1\xfd\x9e\x13\xf0\x23\x60\xa4\x91\xff\xac\x47\x4f\x5e\xbd\x7c\x72\xb6\x78\xfd\xfc\xc3\xb7\x6f\x9f\x21\x95\x3a\x29\x4d\x99\x7f\xa9\xbd\x10\x3a\x2e\x76\x45\xde\x0b\x80\xd5\xad\x71\x83\x06\x39\x59\x41\xda\x2d\xcc\xc8\x4a\xf9\x97\xef\xa3\x2c\x01\xb3\x69\x5b\x8f\x14\x7f\xc0\xd1\xf4\xa5\x4a\x70\x04\xa7\x91\xa1\x89\xfe\x49\xa1\x63\x08\x83\x52\x8e\xe3\x1c\x33\x5c\xf8\x59\x5d\xc3\xce\xa6\x69\xf6\xbe\xad\xbc\xb4\x54\x0a\x57\x44\xe8\xc4\x9d\x92\xd5\xc4\x39\xe1\xb3\x6a\x8e\x6b\x52\xce\xaa\xae\x17\x6f\x6e\xd8\x83\x23\xb8\xd4\x3d\x1e\x9c\x41\x8f\x2b\x24\xf9\x0f\xc2\x2c\xb0\x1b\x9a\x64\xb9\x25\x99\x84\xce\x2a\xc9\x27\xdc\xc8\xd9\x98\xe4\x1a\x14\xb0\xde\x6b\x93\xca\x0b\x81\x7f\x17\xf8\x1b\x81\xbf\xed\x53\x6e\x39\x75\xcb\x36\x96\x84\x2a\x64\xcb\x3a\xb9\x3c\xbc\x35\xf6\x62\x65\x90\xb2\x39\x85\xf2\xb7\x82\x1b\xae\xab\x4b\x1a\xf5\xaf\x15\x10\x43\x8c\xf6\x36\xb2\xe0\x66\xef\x82\x40\x62\x99\xf6\xb5\x10\x3d\xe3\xf3\xc1\x07\x91\x31\x34\x2d\x67\x7c\x4e\x7e\xa7\x19\x43\x13\xf8\x53\xae\x28\x24\xcb\x71\x8b\x98\x19\xef\x05\x75\x36\xc8\x0f\xc2\x46\x90\x40\x86\xd0\xa7\x6e\x43\x87\x61\x48\xfa\xa8\x98\x48\x24\xaa\xf9\x17\x7f\x4e\xa5\xa4\x38\x1e\xfc\xc1\x36\x39\xf9\x85\xec\x41\x26\x1c\x9e\x07\x35\xbd\xef\x5a\x93\xba\x1e\x85\xdc\x0b\x52\x31\x51\xe9\x53\x3e\xc9\xec\xa9\x07\xb2\x57\x07\x4b\x42\xbd\xad\x00\x16\x03\x9d\x6f\x06\xdc\xfc\x06\x07\x94\x9c\x9c\x56\x5b\x1a\xcd\x79\x78\x5b\x06\x22\xa3\x9d\xb1\x99\x87\x5a\x79\x87\xd8\x3a\x03\x8f\x77\x8b\x44\x62\x31\x1b\x1c\xd5\x37\xfc\x19\x44\x5a\xfb\xab\xe7\x95\x19\xb4\x77\xba\x5f\x4e\x4f\xeb\x8c\x69\xb7\x7b\xef\xa1\x89\x7b\x37\x45\x5c\x0a\x37\xff\xb1\xf7\xb7\x61\x03\x7f\x80\xcc\xc5\xca\x0a\x08\x01\xf6\xdb\x6d\x71\x1d\xcb\x14\x05\x17\xf6\x4c\x96\x9b\x23\x5b\xf0\x5d\xce\x05\xcb\x8b\xbb\x94\x5f\x51\x11\xa4\x7f\x0a\xb3\x3b\x1c\x79\xd1\x99\x66\x1b\x38\x18\x79\x39\x99\x3e\xd1\xa5\x6d\x9f\x5b\xc5\x04\x98\x93\x79\x67\xc0\xf1\xa9\xff\x63\xa2\x35\x3b\x03\xab\x27\xb2\xf2\xca\xd1\xc9\xc0\x40\x64\x43\x5f\xfc\x1c\x9c\xe3\x81\xd1\x96\xa9\x89\x05\xc7\x12\xe7\x66\x15\xd2\x13\x2f\xd6\xca\x64\x4c\x45\x0e\x8a\xc7\x84\xfe\xc5\x11\x28\x44\x34\xba\xd6\x72\x1d\x36\x68\xd0\x90\x82\xe8\x2e\x57\x9b\x4f\x2f\x0b\xe6\xdd\x5d\x5f\x7a\xbb\x9e\x9b\x34\x7c\x1c\xe2\x25\xca\x19\xf3\x77\x3d\x9b\x7b\xd6\x03\xd3\x68\x89\x01\x72\x02\xf0\xbd\xba\xc6\x67\x7f\xb9\xac\x33\xe4\x5d\x53\xbb\x4c\xfd\x1f\x76\xb1\xfe\xa4\x15\x0f\xd7\xdb\x3f\xa1\x0e\x96\x30\xb8\x3e\xfc\x22\x38\x12\x10\x0b\x81\x82\x19\xc4\xe4\x2b\x15\xa5\xb0\xcc\x90\xf9\xeb\x60\x68\x5e\x7b\xbb\x48\x39\xd3\xc5\x89\x1a\x96\xab\x33\xe5\x56\xad\xf5\x00\xda\x40\x49\x3b\x46\xf4\x07\xcf\x86\x47\xd3\xd4\x58\xc0\x76\xbb\x31\xb6\x9e\xc8\x72\x0a\x54\x38\x8a\x4f\x11\x07\x21\xe4\x94\xf0\x15\xd6\x14\xd2\xec\x49\x2a\x19\x30\x4b\xdf\x8a\x29\x83\x49\xff\x56\x18\x02\xc8\xd0\xde\x49\xce\x26\xd3\xd3\xb7\x92\x1f\xf0\x4d\xdd\x5e\x02\xb1\x0e\x9f\xf3\x42\x74\xe3\x2f\x1d\x73\x43\xe8\x1e\xe1\x30\x9f\xd4\xef\x91\x4a\xda\x25\xa2\x79\x66\xe9\xa7\x07\x2f\x84\xba\x68\x0e\x65\xaf\xfa\x46\xf4\xe5\x3b\x87\x3b\xfc\x21\x48\xd3\x61\xd6\xf3\xbe\x64\xe5\x61\x42\xf0\x4e\xea\x6f\x93\xa8\x2e\xd6\x5b\xe0\x2e\x54\x6a\xb0\x76\x19\x59\x93\x7c\x4d\x20\x77\xd8\xdb\x9f\xde\x3c\x7f\xef\x3b\x9d\x03\xe5\x11\x2e\x26\x0d\x0a\x00\xa0\xbd\x2a\xca\xfb\x86\xc7\xab\x46\xb0\xf2\xe2\x6e\x03\x34\x85\x0b\x76\xfe\x90\x7e\x16\x0f\x97\x55\x29\x78\x55\x14\x94\xdf\x5a\xbc\xa8\x96\xb9\x1c\xc9\xc3\x7c\xcb\xee\x5e\xb8\xac\x4a\xba\x30\xbf\xee\xfe\xd9\x26\xaf\x37\x5f\xf2\x19\xab\x45\xc5\xaf\xbf\xe0\xcb\xbc\x11\xd5\xdd\x3f\xab\xaf\x6b\x41\x2f\x1f\x5e\xd0\x92\xf2\x5c\xd0\xc5\x3d\xa6\x51\x7f\xea\xbe\x58\xac\xab\x3b\x7f\xb5\xaa\x8b\xbb\x16\x95\x8f\xee\xde\x1d\x28\x7d\xd7\xc2\xbf\x35\x94\x5f\x2f\xb6\x39\xcf\x2f\x6f\xdf\x65\x00\x06\xb9\xa4\xf6\xe1\xfd\x3e\xb8\xc7\x84\xe6\xcb\x0d\xbd\x53\x2e\x7f\xbc\xc2\x5b\x7c\xd9\x3a\xd6\x7d\xe0\xe8\xc9\x2b\xbb\x27\x5a\x61\xbd\x71\xe7\x3f\x6e\x6c\xb8\xfb\x7d\x3f\x1e\x7c\xf2\xa6\x2a\xe9\x3d\x2b\x2e\xef\x54\xf1\xb7\x79\xbd\xb9\x67\xc5\xec\x6e\x15\xab\x93\x75\xcf\xba\xab\x3b\xd5\xfd\xa4\x11\xd5\x3d\x2b\xce\xef\x54\xb1\x39\x9f\x4f\xbd\xe3\x79\xa7\xea\xeb\x2f\xac\xfe\x45\x2e\x85\xc4\xeb\x3b\xb7\xd2\x5b\xc3\xc1\x76\x1d\xed\x78\x51\xdd\x75\x44\xcd\x9d\x46\xf4\x1e\x8e\xdc\xb3\xb3\x57\x77\xac\xb5\xb8\x47\xad\x77\xac\x72\x79\xf7\x2a\xef\x58\xe3\xfa\x4e\x35\x7e\x2f\x89\xda\x3b\x4d\xd3\xee\x54\xef\xe6\xce\x3d\x65\xe5\xc5\x99\xa2\x6a\x77\xac\x7a\x75\x8f\x79\xbd\x5f\xcd\xdb\x3b\xd5\xfc\x4d\xb3\xfc\x48\x05\xe4\x6b\xbc\x63\xbd\x97\x5e\xbd\xb7\x71\x2a\x31\xe6\xe3\x30\xdb\x72\x49\x45\xee\xdd\x7c\xee\x43\xa8\xcb\xbb\x4b\x81\xdf\xbe\xf5\xca\x88\xb1\x79\x5a\xdf\x1e\xb2\x7a\x7a\x4c\x2e\x5a\x50\x3f\xd0\x3a\x8d\xec\x26\xae\x0f\x9e\xcc\x92\xdf\xbc\xed\x34\xc7\xde\xaf\x09\x68\x18\x17\xbf\x6d\x9f\xd1\x82\x5e\xe4\x82\xda\x07\x2a\x50\x6a\xe5\x23\x17\x7a\xa9\x5a\x5c\x76\xcc\xd9\x3c\x91\x22\x22\x00\xe0\x97\x53\x3e\xe1\x1a\x8e\x7d\x8c\x4b\x88\x9c\xa6\x23\xaf\x76\x94\x31\xe5\xca\x7e\x41\x05\x82\xa8\x57\x29\xbb\xf0\xbc\xac\x99\x6c\xe3\x43\x05\x9b\x68\x12\x11\x5b\x29\x71\xdf\x81\x19\x3e\x11\x39\xbf\xa0\x22\x91\x12\x2c\x64\x2c\x0e\xeb\xd8\xed\xc2\x87\xb8\x9b\xa8\x0d\x57\x9e\x2c\xc3\x10\xd6\xb0\xae\xa7\xf9\x70\x88\xaa\x59\xee\xcb\xb9\xf9\xdc\x03\x7b\xd1\xee\xff\x4a\x34\xe7\x74\xcd\x3e\x43\x8b\x52\xd2\x78\xc2\x2f\x74\xf7\x2a\x39\x32\x1d\x75\xfc\xa5\x83\xf2\x3f\x97\xe3\xd1\xbf\x7f\x62\x62\xf3\xbf\x31\x9c\xbd\x73\x97\xd6\x1b\xcf\xdb\x93\xec\x2e\xc7\x2c\x64\xda\x23\x87\x6c\x45\xcf\x9b\x8b\xe0\x28\xdc\x72\x08\xb4\xa6\xef\x46\xa9\x3a\x27\x5d\x6d\x23\xc8\xb3\xec\x72\x5b\x50\x39\x74\x68\xdd\xb8\xe0\x85\x4f\x6b\xcf\x72\xcf\xb5\xea\x54\x4f\x0e\x0f\x63\x1d\xc3\xcf\x26\x37\xfb\xbd\xd7\xad\x5e\xb9\xef\x2e\x7c\xbe\x3f\x23\x50\xc1\xf1\x79\x7e\x4e\xe3\x4c\xf6\x39\xaf\x3e\xd5\x94\x1f\xd3\xf2\x8a\xf1\xaa\x94\x1d\xba\x0b\xb1\x6a\x4b\xa2\x71\xea\xd4\x94\x82\x5d\xc6\x39\x70\x45\xad\x5a\x2b\x76\x67\xc1\x46\x7e\x7d\x90\x2d\x8e\xc9\xb7\x9a\xdb\x7b\x97\x8b\x0d\x59\x63\xf5\x28\xaf\x37\xf0\x7b\x83\xa3\x5b\xa2\xe8\x8f\xd2\x50\xbe\x4d\xda\x3f\x47\x90\x83\xd1\x1a\xa8\xb5\x49\x48\x22\x57\x2c\xc1\xe2\x70\x44\x41\x15\x8b\x28\xa8\x3a\xea\xcf\x00\xac\x96\x57\x95\xf8\xe1\xfd\x2b\x2c\x22\x2a\x73\x3a\x32\x13\x08\x74\xa1\xa9\x29\x7f\x72\x41\x4b\x81\x4b\x42\x47\x5a\xca\xc4\x8c\xd0\xd1\xaa\x5a\x42\xff\x5f\x57\x2b\x8a\x2b\x42\x47\x2a\xbc\x05\xe7\x92\x9a\xe8\x06\x6a\x92\x48\x31\x38\xc1\x05\x39\x3a\x51\xde\x17\x00\xb5\xf5\xa2\x29\x0a\x39\xa5\x48\x6b\xbc\xe0\x79\xdd\x6c\x61\x43\xea\x25\x90\x63\x2c\x91\x31\x76\xad\xb3\x1c\x0b\x34\x58\x12\x42\x56\xd3\x9a\x24\xba\x27\xc9\x24\x79\xf8\x6f\x09\x21\x64\xa9\xe1\x1b\xb2\x31\x7e\x84\xa6\x59\x69\x08\xd8\x99\xc8\x05\xcd\x6e\x20\x0f\xe3\x6a\x8f\x93\x04\xaf\x10\xf6\xbe\x47\x93\xac\x20\x47\x90\x27\xa2\x31\xdf\xe8\x9e\xe1\x15\xd2\x86\xc4\x4e\x0f\xf3\x7a\xa3\xee\x2c\x79\xc9\x54\xba\x93\x5b\xb2\x71\x9d\xdc\xee\x76\xc9\x43\xe8\x58\x9a\x26\x0f\xff\x0d\xfe\xdc\x42\xc7\xf3\x7a\x93\x1c\x68\x74\x8b\xd0\x9e\xad\xb3\xc2\xa9\x82\x0d\xcf\xbc\xcf\x6e\xcc\xd2\xa8\x18\x51\xbb\x50\x7a\x30\xea\xa9\x59\x23\xbb\x72\xea\xb1\x5b\x48\xbd\x38\x13\x8a\xfd\x25\x54\xa5\x82\x45\x55\x0b\xaa\x5e\xa8\xbf\xf7\x68\xa0\x22\xd8\x55\x46\x61\x88\x67\x30\xd7\xc9\x32\x2f\x97\xb4\x30\x9c\x99\x68\xb6\x09\x3e\x1a\x23\x2c\xf4\x16\xf0\xb4\xcc\xcc\x2a\x92\xb4\x9b\xa0\x76\x51\xcd\x12\x3b\xbe\x64\x28\x34\x16\x0a\xb4\xc0\x71\xa2\x7b\x9d\x60\xaa\x73\xd7\xfa\x4d\x57\xe5\x92\x53\x41\x5f\x06\x07\x28\x81\x20\x09\x65\xd1\x7e\xd6\xc5\x24\xf6\xce\x43\xfc\xfb\x01\xd0\x73\x8b\xf4\x0a\xb1\x12\xd5\x48\x71\x8e\x7e\xc4\x84\xa7\x04\x8b\xea\xc0\x0f\x34\xf1\x07\x69\xc4\xb3\x31\xce\x47\x82\x5f\xbf\x2c\xaf\xaa\x8f\x54\xee\x22\x1a\x62\x1b\xae\x03\x30\x27\xcc\xec\x41\x34\x87\x10\x57\xf6\x91\xdc\xdc\xf0\x28\xb7\x8f\x40\x42\x50\x67\xd5\x72\x63\x36\x18\x35\x51\x9b\xbb\x0a\x0f\x20\x27\x59\xe9\x9e\x9d\x58\x10\x96\x7f\x4b\x10\xb2\x88\xbb\xea\x84\x28\x17\xe3\x27\x22\xb3\x39\x7b\x4f\x10\xe4\x6a\xe2\xee\x73\x84\xd9\x90\xf0\x61\x6e\x73\xe8\xa4\x69\xc6\x86\x24\xf9\xb7\x64\x58\x6a\x6f\x5c\x59\x33\x9a\xb0\x21\xc9\x87\x95\xef\x54\xb7\x09\xe0\x67\x70\x49\xd4\x64\x98\xba\x8d\x06\xda\x0e\x27\x51\x08\x9b\x59\xf2\x10\xfe\x9a\x8d\xe7\xe0\xa7\x93\x3c\x4c\x86\x25\xc2\x5c\x37\x8a\x30\xdf\xbb\xdb\xa0\xc0\x85\x65\x8c\xcd\xf1\x4a\x1e\x26\x98\x95\x4c\x00\x05\x9a\x2c\xb3\xc4\xfe\x48\x90\x14\x25\x64\x99\x65\x96\xa8\xbf\x12\x84\x6b\xfb\xa8\x36\x8f\x34\x69\xd0\x8f\xdd\xaf\x04\xe1\xaa\x04\x34\x21\xf3\xce\xfb\x99\x20\xbc\xae\xf8\x65\x6e\x6a\xb3\x3f\x12\x84\xed\xf9\xe2\x5d\xe2\xc1\x2d\xe5\xd0\xe7\x9e\x8f\x3e\xb1\x72\x55\x7d\xf2\x28\x09\xf7\xc8\x48\xe7\xbc\xab\xf4\xb5\xf7\x61\x49\x5a\xba\xce\xfb\xb0\x24\xfd\xac\x46\x87\xa1\xe0\x4d\x59\x54\xd5\xf6\x0f\x61\x1c\xee\xc2\x22\xe6\x71\x7e\xa0\xfc\x97\xf9\x01\xb8\x3a\x7a\xf8\x81\xd2\xf0\x03\x39\x29\xbb\xfc\x40\x0e\xb8\x7e\x3e\xf5\x03\xd7\x38\x8f\x84\xba\x55\x50\x06\x7e\xf3\x7b\xb7\x53\x9b\xc0\xee\x17\x13\x19\x22\x3b\xa3\x72\x43\x7d\x9b\x97\xab\xc2\xe2\xc8\xec\x71\x6e\xa8\x48\xd7\x3c\x64\xdc\x24\x34\x8d\xf1\x2f\x31\xa4\x3f\xfc\xe1\xfd\xab\x1e\x2a\xad\xbf\xcb\x90\x23\x0b\x58\x10\x33\x46\x75\x5c\x85\x3a\xae\x42\x1e\x57\x4c\xe5\x5f\xea\xbc\x52\x48\x27\x85\x01\x29\x26\x68\xc1\x58\x70\x4c\x37\x46\x72\x5c\x04\x44\x94\x70\x7e\xf2\x5a\x9c\x51\x73\x03\xc9\x9a\xdc\x71\x3c\x50\x9b\xc1\x82\x52\x7d\xb8\x43\xad\xde\x41\xee\x56\xbb\x50\x28\xac\xcf\xaf\x68\x69\x3d\xfb\xb2\xfe\x05\x81\xab\xf6\x9c\x95\x2b\xdd\x5c\x6b\x5a\x85\x9d\xd6\x1f\xde\xbf\x32\x39\x0b\x5c\x8f\x8e\xec\x35\xdf\xdb\x65\x15\xa9\xa7\xf0\x9d\x11\xd6\x1b\x25\x5f\xad\xc2\x0e\x26\xae\x67\x49\x5f\x5f\x61\xec\x96\x52\x45\xec\x4b\x30\x81\xb2\x50\xcf\x6d\x7e\x60\x7e\xe4\x57\xb1\x37\xdd\xcf\x3b\xdd\x4a\x53\x3d\xa8\x58\xc5\x77\x1c\x57\xb9\xcf\x4a\xcb\x35\x38\x82\x91\xdf\x8f\x52\x76\xcc\x3b\x7f\x12\xb1\xfc\x62\xda\x78\x17\xca\x58\x81\xf3\xad\x21\x88\xb9\xb3\x1a\x7f\xd6\xff\x1d\xc3\xff\xfe\x26\xff\x77\x6d\x7e\x9a\xff\x12\x7b\x98\x1e\xce\x3e\x5f\xcf\x1f\x5e\xe0\x6e\x14\x89\x71\x10\x20\x27\xff\xf1\x7f\x5e\xe7\x62\x33\xe2\x79\xb9\xaa\x2e\x33\xb4\x1b\xe3\x2c\xf9\x2c\xb9\x0d\x3a\x15\x93\xaf\x52\xb1\xfb\x4f\xe4\x02\x6d\x4e\xfe\x03\xed\x55\xcc\x63\xfd\xa7\xd1\x6e\x2d\x6f\x60\x61\x84\x23\x20\x51\xb7\x10\xf3\x3a\x46\xcc\xeb\x83\xf4\x95\xf5\xd3\xd7\xba\x73\x0b\x18\x88\x93\x2d\xe5\xf1\xe1\x68\x60\x5f\x23\x16\x8c\x40\x9d\x77\x46\x0b\xba\x14\x15\xcf\x92\xf3\xbc\x96\xdc\x8c\x20\x49\x32\x00\x6a\x4b\x40\x62\x7e\x22\x04\x67\xe7\x8d\xa0\x59\xb2\xe1\x74\x9d\xa0\x2e\xe5\x93\x5f\x02\x0d\x11\x11\xaa\x18\xde\x45\xb7\x5e\x45\xdb\x6a\x5b\x4b\xbe\xaa\x7d\x11\xa9\xf1\x02\xcb\xd5\x73\xa5\xe8\x55\xb1\x35\xeb\xdf\xa7\xed\x1e\xd9\xd5\xa3\x48\xde\x2a\x09\x34\x97\xa8\x04\xd4\x6a\x9a\x5b\xc2\x2b\x39\xd2\x89\x68\x1d\x91\x55\x92\x28\xc2\x3a\x6c\xd4\x12\xbb\x2c\xa0\xc2\x68\x20\xd2\x54\x80\xb3\x35\x28\x39\xf5\x08\x39\xbd\x62\x55\x53\xcb\x6d\x13\x14\x9f\xe8\xc0\x50\x4f\xd6\x55\x2b\x7d\xf0\x26\xb5\xbc\x9f\x08\xf5\x01\x5a\x59\xa5\xd7\x06\x24\x7e\xd9\x91\x32\xbf\xa4\x03\x41\x84\x3b\x80\xff\xfd\xf0\x2f\x0f\x71\x02\xaa\x43\xde\x7d\x6a\x72\x7f\xd8\x37\x2a\xcd\xd4\xc5\xf3\xcf\xdb\x2c\xf9\x9f\x64\xc8\x87\x49\x36\x25\x0f\x77\x7f\x41\x09\x92\xe5\xfb\xca\x89\xbe\x72\x0f\xff\xfb\xe1\x7f\x3f\x7c\x78\x21\xe5\x07\xeb\x9f\xc2\x86\x24\xa3\xa3\x9a\xe6\x7c\xb9\xd9\xed\x92\x04\x0d\x43\xa6\x41\x4e\x4a\xe4\xf2\x8f\xae\xd1\x80\xb6\xd7\x88\x22\xec\xaf\x0b\x55\xc7\x1c\x3c\x01\xd5\x37\x14\x1a\xe8\xe1\x09\xfe\xb5\x46\x82\xd5\xa5\x66\x75\x3b\xdb\xda\xf7\xbf\x6b\xed\xc6\xa9\xbf\xd9\x47\xb0\x79\x27\xfa\xc2\x52\xcf\xa0\x32\x59\xb1\x1d\x50\xa4\xff\x4a\x89\x42\x71\xd3\xb0\xd5\x24\xcf\xd0\x7e\x10\x54\xeb\xe6\x42\x98\x5c\x62\xb8\xdb\x88\x49\xf5\xd4\xbf\xa5\xbd\x79\xfc\xc2\x9e\x04\x13\xf6\xaf\x77\xa6\x8f\x25\x73\xab\x3a\xb8\x9d\x3b\x6b\xd3\x28\x9f\x15\xaf\x76\xbb\xac\x02\xf4\x7f\xdb\xae\x64\xbe\x82\x6e\x21\x94\xa6\x34\x73\x05\xd0\xbe\x9f\xdf\x32\x6d\x25\xf1\xb6\x61\x50\x71\x5e\xcb\xdb\xa8\x71\x9a\xe0\x0b\xc9\x74\x9a\xdd\x83\x28\xa0\x89\x92\xf6\x39\x70\xe8\xea\x6f\xcd\xad\xc7\xcb\x63\x3e\x14\x43\xd8\x94\x5f\xc2\xf2\xc5\xdf\x44\xd0\x06\xc3\xb9\x39\xcc\xf0\xdd\x3e\xb1\x3d\xcc\x5e\x7d\x2f\x66\xaf\xe5\x39\xf4\x27\x71\x7a\x5d\xfb\xc7\x9d\x4c\x81\x9a\xb8\xff\x49\x6c\x92\xd2\x16\xdf\xc2\x15\xb1\x18\x57\xc4\x22\x2a\x6f\x7f\x23\x6b\xd0\x99\xfe\x4b\x51\xd2\x94\xd6\x85\xe8\xf8\xc9\xd8\x36\xa7\x77\xbd\xb7\x34\xb6\x4b\xfb\xb0\xb5\x99\x0c\xd9\x01\x25\x06\xb2\xc3\x62\x60\x03\xaf\x9e\xe6\x45\x71\x9e\x2f\x3f\x2a\xb8\xc9\x0d\x6c\xc1\xbb\x36\x81\x23\xf5\x64\xaa\xe5\xbb\x12\x86\x80\x12\x28\x2c\x89\xd8\x21\x86\x23\xdc\x73\x2a\x18\x20\xd8\x28\xad\x19\x50\xf4\x24\xc1\x9e\xf6\xec\x9e\xca\x24\x90\x4c\xbc\xc3\x72\xc0\xb2\x67\x37\xac\xef\x8c\xea\x58\x9d\x3e\x85\xc2\x10\x12\xbf\x78\x06\x1e\xcf\xfb\x51\x73\x1e\x7b\xef\x2c\xd0\x56\x7a\x7c\x88\x6f\x96\x12\xe2\x54\xfd\x63\x15\xa6\x68\x92\x24\xee\x43\xe6\xf7\xa9\xe2\xec\x82\x95\x03\x17\x37\x9e\xd9\x50\x83\x65\x55\x0c\x93\x87\x0f\x93\x21\x1d\x6d\xaa\x5a\xc8\x9e\x63\x3a\x92\x63\xd7\x6a\x8f\x89\x7c\x25\x7f\x23\x95\xaf\x46\xab\x7b\x89\x50\x66\x2d\x50\xea\x12\xee\x6c\x5c\xa4\x54\x7f\x1b\xe3\x4c\xcc\xcb\x53\x4e\xd8\x50\x0e\x7c\x58\xc2\x7e\x51\x3e\xa1\xd0\x49\xc2\x30\x8d\x58\x48\xe2\xe9\x2d\x44\x9a\x26\x55\xe9\x09\xd0\x0c\x9e\xb9\xc8\x5f\xba\xdb\xd1\xaf\xff\x1f\x68\xa1\xcd\x5a\x87\x15\xb2\x75\x96\x1d\xeb\xd8\x71\xe3\x28\xf0\xa4\x5c\x71\x59\xd1\xa3\x51\x82\x76\xbb\xbe\xb7\x7f\x1b\x8d\x13\x79\xad\xb6\xdf\xbf\xae\xce\x59\x41\x1f\x9c\xe5\xeb\x9c\xb3\x04\x0a\x90\xa0\xc0\xd3\x0d\xaf\x2e\x69\xec\xcd\x4f\x70\x79\xd4\x0f\xde\x6d\xc0\xe4\xd1\xb1\xe1\xe8\x78\xf6\x4c\x0e\xdf\xf2\x4b\x30\x76\x18\xa9\x67\x0a\x6a\xbb\xcf\xda\xb3\x25\xb7\xc7\x50\xa0\xfd\x5d\xce\x46\xc7\xa1\xf0\x3e\x57\x49\xcf\x85\x61\x7f\xaa\x48\x8a\x87\x4b\x8d\x66\xe7\x5e\xd4\xc6\x2d\xe7\x0b\x7d\x51\x4c\x64\x65\xfc\xc8\xd6\xfe\x3e\xd2\x6c\xc4\x94\x4e\xa8\x39\x4d\x16\x1f\xc8\x2a\xf6\xf7\xd1\x2b\xac\xf9\x5f\xc0\xd6\x6b\x8b\xdf\x1e\x07\xe9\x23\xad\xc9\x62\xf1\xb6\x0d\x2a\x0f\x2c\xe7\xa8\x2a\xb3\x04\xfe\x74\x39\xeb\x93\x80\xe8\x89\x91\xe0\xec\xe2\x42\xb2\x2e\x9d\x72\xe0\x56\x1e\xaf\xce\xe5\xdc\x3e\x58\x9b\x57\x4c\x56\xb6\xc7\x65\xe0\x05\x13\x4d\xec\xfc\xaf\xa7\xdb\x01\x5b\x17\xa7\x35\xbd\x3c\x2f\x28\x70\xc6\x00\xc8\x88\x42\x80\x62\x3d\xa4\xc5\xaa\xfa\xe1\xfd\xab\x0f\xb6\x57\x59\xe2\xf7\x30\xc1\xf0\xa5\x5e\x31\xa8\x98\x7e\x16\x3c\x5f\x0a\xb0\x6a\x3c\xe1\x17\x35\x18\xc2\x40\x94\x35\x7e\x2a\xb8\x22\xe5\xe8\xb2\x5a\xd1\xa2\xc6\x35\x29\x47\x9e\x83\x13\x6e\x48\xbb\x75\xaf\x69\xb9\xab\x6b\x7c\x34\xb6\x12\x6b\x33\x5a\x7c\xa4\x74\xfb\x4c\xed\x4d\xe7\x85\xf7\x63\x5e\x34\xb4\x96\xf2\x40\x23\xe7\xd4\xf3\xc4\xe9\x13\xf7\xfc\x41\xc5\x37\x8e\x8e\x50\xb0\x46\xa4\x04\x96\xab\xe1\xc5\x8b\x8a\xc7\x91\xb7\x6e\x35\x4d\x7e\x7d\x32\xe5\xc7\x27\x93\xb1\x9c\x9f\x13\xdf\x44\x79\x7c\x12\x37\x52\x8a\x60\x76\x90\x75\x01\x35\x3d\xc6\x33\x3a\x37\x61\x62\x25\x82\x0e\xb2\xfa\xc9\x52\xb0\x2b\xfa\x67\xec\xa5\x3f\x6d\xd5\xd5\xbf\xaf\xd9\x92\x57\x05\x3b\x37\xe1\x56\x47\x8d\x1d\xcd\x4b\x48\xba\x09\x9e\x03\x69\x9a\x1d\x65\x7e\x60\x4f\x8d\x5c\xe2\x10\x13\x64\x67\x6b\xde\x72\xba\xcd\x39\xf5\x1c\x36\xdd\xae\xc2\x30\x92\x7a\x93\x17\x45\xf5\xe9\xf9\x6f\x4d\x5e\xa0\xac\xc6\x8d\x92\xf6\xfd\xfe\x22\x35\xb5\x9c\x2e\xab\x8b\x92\xfd\x1e\x93\xaf\x6b\x03\x36\xa8\xb9\xb1\x30\xb8\xaf\x67\xa0\xae\x46\x00\x48\xf4\x5a\x78\x52\xae\x5e\x55\x79\x2c\x91\xee\xbf\xd8\x90\xae\x18\xda\x03\xe3\xbc\x45\x11\x73\x24\xbf\x01\x17\x0b\x60\x32\xf9\x08\xe4\x39\xba\xc2\x37\xcb\x86\x73\x5a\x0a\xeb\x7d\x36\x01\xcd\xa9\x81\x53\x44\x59\x62\xda\x6e\x17\x4c\x10\xd6\x8f\x24\x97\x7a\xcb\x57\x2d\xa3\x6b\x5f\x69\x2b\xea\x21\xcb\xfe\xf6\x15\x35\x5e\x10\xb6\x17\xca\xdf\xef\x2e\xbd\x4f\xd0\xdd\x18\xea\x6e\xd8\xc2\xad\x5c\x43\x2f\x2b\xb0\xad\x8a\xeb\x35\x2b\x7c\x27\x2e\xc3\x1d\x7c\xb9\x0d\xe1\x4f\xbc\xb7\x7b\xe0\x59\x37\x79\x0d\x53\x18\xe5\x88\xd5\xf6\x85\xe9\x36\xe5\xb4\x28\x15\xbf\x0d\xdb\xe9\x5a\xbc\xef\xc3\x0b\x23\xc8\xd7\xfd\xa0\x4c\x53\xd6\xa5\xe2\x0a\xe3\xbb\x94\x32\x5b\xc1\x7e\xf7\x29\x43\x1c\x88\xf5\x00\x25\xf1\xb1\x59\x15\x61\x0e\x85\x40\x3f\xa9\xac\x57\x97\x42\xfb\x6f\x1d\x51\x93\xd2\xc2\x8b\x59\x37\x1e\x43\x06\x8e\xa5\xc2\x06\x64\x30\xd6\x7b\x93\x56\xdf\xeb\x8d\x5e\x55\xe6\x5f\x13\x02\xcf\x6e\x7c\x0f\xe3\x6a\x3f\x47\x2a\x63\x85\xa1\xb5\x2f\x2a\xde\x5e\x3a\x1c\xa6\x13\x0a\x57\xa0\x8f\xd4\x70\x2d\x61\x73\x9d\x81\x09\xe7\xa4\x9a\x55\x2e\x51\x8a\x79\x8d\xeb\x16\xe7\xee\xa5\x9d\x30\x31\xdd\xce\x85\x85\x0f\x89\xc5\xad\x74\xb7\x98\x7c\xa2\xab\x03\x8c\x01\x88\x74\x3c\x75\x71\x98\x1c\x57\x76\x5b\xd8\x7c\xe9\x35\x28\xd2\x72\xe4\xdd\x9a\xfa\x9e\xe1\x80\x31\x7b\xc4\x14\x91\x64\x31\x22\x59\xe1\xca\x4a\xe2\xca\x2d\x58\x79\xad\x80\xfe\xc0\xa3\x2b\x7a\x96\xbc\x22\x8e\x12\x1d\xfc\xc2\x2f\xd3\x22\x5e\x86\xfc\x1e\xf8\x2c\x42\x7d\xa5\x8c\x74\xcb\x57\xb2\xc8\x9d\x89\x9e\x1f\x4a\x75\x37\x25\x42\x8f\x7b\xb0\xcf\xa9\xb8\xf0\x63\x83\x83\x2c\xeb\x07\x26\xe5\x75\xbe\x3d\x04\x8f\xba\xc9\xeb\x5e\x62\x03\x95\x40\xf8\x30\x85\x68\xdc\x5a\x04\xb6\xc0\x2e\xb2\xa9\xfa\x00\x32\xe9\xa1\x76\x1e\x77\xdd\x17\xec\x15\x54\xa9\x10\x4a\x84\x70\x69\x73\x72\xc8\x76\x94\x93\x5e\xa7\x21\x9b\x47\x40\xf5\x28\x84\xdc\x8a\xf5\xc0\x8a\x43\x2a\x02\x7a\x6a\x50\x92\x27\xdc\x02\x8b\xde\xcb\xc3\xb9\x27\xae\xf0\x9e\x8b\xd8\x1e\x96\x3b\x5f\xda\x37\xd1\xd5\x3f\x49\x86\x2a\x77\xca\xdd\x3b\x07\xe1\x8b\xbd\x4e\xe8\x91\xfb\xb2\x7d\x3d\xde\x65\xf3\x95\x64\x3c\x08\xd5\x48\xfd\x78\x77\xfb\xd6\x5d\xda\xda\xad\x71\x06\xfb\xeb\x71\x34\xcc\x7d\xec\x87\xb9\x8f\xe7\x2a\xac\xa3\x8b\x70\xf1\xf5\x49\x18\x52\xaf\x7b\x0e\x1b\x84\x7e\xde\x16\x6c\xc9\x84\x42\x0e\x3e\x3a\xd1\x40\x15\x90\x99\x5d\x67\x26\x18\xd1\x12\x52\xe1\x55\xf9\x8a\x95\x17\x67\x52\xda\xcf\x05\xad\x89\xa7\x53\x11\x3d\x65\x0c\xc8\x09\xa4\x8c\xa9\x2d\x5c\x71\xb5\x95\xe3\xad\x89\x38\x74\x12\x79\x78\x7b\x78\x77\x77\x85\x1b\x95\x55\xb3\x20\xc9\xc3\x45\x53\x36\x35\x5d\x2d\x56\xcd\xe5\xe5\xf5\x82\x72\x5e\xf1\xc5\x36\x17\x1b\x75\xa1\x2c\x40\x29\xfc\x70\x02\xcf\x13\xb8\x32\x21\x77\x7f\xa5\x30\xa8\x38\x9a\x30\x80\xd5\xab\x20\x43\x71\x89\x26\x15\xe1\xbb\xdd\xcd\xfe\xd0\xc0\xd3\x34\xab\x35\x0c\xfb\x30\x59\x14\xea\x6d\x82\x6f\xa4\x6c\x2c\x2c\xa4\xe3\xa4\x1a\x85\x0f\xf6\x08\x7b\x9f\xa9\x0e\xdd\xfa\x11\x06\xf5\x6c\xb1\x47\x08\x37\x16\x17\x0d\xa0\x1d\x72\x83\x04\xdf\xfe\x04\x05\x73\x8c\x06\x75\xb6\xc4\x89\xe9\xa5\xec\xc3\x12\x27\xa6\x75\x53\x3b\x6e\x14\x40\xe2\xd2\xf5\x11\x57\x78\x69\x59\x80\xcc\x38\x64\xbb\xb7\x40\x99\xb6\x4d\x9b\x00\xfa\xd7\xbb\x97\x0f\x6f\x60\x60\x52\x74\xb7\x46\xb4\xbc\x60\x25\x7d\x59\xae\x6d\x7a\x6a\xa1\x63\x8a\x7a\x8a\x8d\xd6\x4d\x51\xc8\x41\xea\x4d\x3d\x3c\x41\xb8\x0d\x34\x27\xf9\xf9\xe2\x85\x2e\x37\xc9\xf7\xb8\xaf\xc9\x01\x03\x9c\xb8\x9a\x72\x95\x72\x57\xc3\x01\xb0\x70\xee\x46\xf9\x6a\x05\x37\xe0\x8b\x8a\x3f\x87\x8f\x33\x81\x6b\xe7\x9a\xce\xbc\x5c\x7d\x2a\x2b\x51\xf2\x8c\xae\x59\xc9\xca\x8b\x07\xf9\x03\xd8\x7f\x0f\x6c\x13\xfc\x81\x64\x96\xe1\x99\xc5\x6b\x6f\x44\xcd\x56\xf4\x41\x5e\x3e\x50\xd5\x3f\x60\x35\x64\xeb\x03\x51\x92\xae\xe4\xbc\x19\x35\xbf\x52\x8a\xcb\x3f\x54\xd0\xfd\x11\x09\xd9\x20\x23\xb2\xb6\xce\xf3\x38\x3c\x81\x1a\x41\x47\xae\x13\xac\x9f\x59\xdf\x1e\xcb\x8c\xfe\x2a\x90\x0d\x83\x06\x8c\xa1\x1c\x78\x6f\xdd\x33\xbd\xab\xc0\x8e\x80\x7d\x84\x8b\x30\x0f\x18\x75\x28\xb7\xe4\x2b\x24\x32\x3a\xe3\x73\x34\x12\x95\xfc\x63\x78\x32\xc7\xf2\x9f\x47\x73\x04\x58\x35\x97\x55\x53\x86\x88\x32\x8a\x1b\xfe\x42\x48\x91\x9b\x3d\xd6\xcc\xa7\x59\x68\x4e\xeb\xaa\xb8\x52\x41\x58\xaf\xf3\x6d\x26\x10\x6e\x88\x18\xb0\x51\x2e\x4f\x7b\x43\xe4\x1f\xc8\x42\x59\xea\xa3\xd7\x80\xe8\x17\x1e\xbd\x35\x51\x50\xe3\x02\x1b\x34\x8c\x97\xab\x49\x39\x1c\x62\x18\xc2\xbb\x8a\x95\x62\xb2\xc4\x66\x2b\x4f\x96\x7b\xbc\x21\x0a\xe1\x6f\x60\xf0\xe1\x2d\x42\x8e\xe4\x53\x37\x60\xfe\x68\x54\xdb\xab\xbb\x90\xbb\x26\x24\x77\x95\x09\x91\x38\x3a\xc1\x97\xa4\xe7\x3c\x0c\x2e\xd3\x34\xdb\xda\x34\xf8\xdd\x02\x64\xad\xf1\xc1\x35\xf1\x59\xe2\xf0\xe0\xb9\x92\x93\x75\x78\xea\x90\x24\x40\x57\x21\x01\xba\x6a\x11\xa0\xd5\x1e\xe1\x6a\x04\x60\xbe\x8a\x0c\x5d\x21\x5c\x90\x2b\x8f\xfa\xe0\xad\x71\xf7\x89\xf4\xed\x52\x79\x90\x5d\x1c\x24\x06\x89\x14\x62\x98\x16\xf7\xf7\x78\xed\x28\x52\xcf\xcd\x05\xd3\x76\x4d\x1a\x9f\xc4\x9f\x13\xbf\x1a\xf7\x7c\x71\xb0\xe9\x73\x68\x4e\x53\xce\xeb\x0e\xc9\x6f\x6f\xa2\xfd\xad\x44\xe8\x1a\x2f\x10\x56\x5d\xd3\xf3\xd8\xea\x98\x7e\x7a\x87\x6e\xe1\x3b\x77\x0b\xdb\xa5\xba\x43\xef\xf6\xb7\x94\x59\xe2\x0b\x5d\x8f\xca\x9b\x8b\x97\xb8\x40\x6d\xc4\x9a\xbc\xc5\x11\x46\x7c\x53\xfd\x45\x05\x5b\x92\x62\x5c\xf6\x19\x45\x69\x7a\x04\x40\x5d\x53\xf3\x70\x98\x8c\x92\xa1\x98\x78\x76\xc4\x3a\xc8\xd5\xf8\x65\xc8\x42\x37\x7b\x1c\x41\x25\xfa\xca\x2b\xf4\xd5\xdc\xe5\x73\xd7\x43\x6a\x93\x8d\xee\xd9\xe7\x40\x13\xa4\x64\xa9\x9c\x92\xb4\x11\x54\x27\x55\x54\x0f\x31\xc3\x25\x58\x99\xf5\x0d\xe3\xdb\x5b\xaa\x7b\xb0\xc8\xea\x28\xd5\x09\x9e\xcd\x7d\x4f\xe5\x7b\xd4\x10\x05\x25\xb9\x57\x78\xf5\xad\x31\xa1\xbe\xe5\xd8\x4f\x6a\xbc\x56\xe0\x05\x2f\xe4\xe5\xeb\x09\x0a\xe7\x79\xcd\x96\x09\x52\x44\x65\xc0\x09\x1f\xd1\xcf\x82\x96\xab\xec\xc6\xf8\x9e\x76\x03\xca\x93\xcc\x8c\x63\xa5\x00\xc5\x1f\xb8\x0a\x51\x62\x22\x63\x4b\xd2\x12\x48\x9c\x42\xc0\xa6\x89\x28\x31\x97\x6b\xe5\xf5\x0d\xf2\xb5\xf5\x42\x2f\x80\x65\x38\x22\x0f\x71\x74\x03\x98\x90\xf1\x96\x39\x44\x03\x6a\x29\xa9\x44\x83\xb1\xd5\x9b\xc9\xbe\xde\x75\xed\x42\x64\x95\x2f\x13\xc0\x23\x9d\xff\x03\x24\x19\x25\xa0\xb0\xda\xd7\xad\x99\x2b\xea\x4a\x99\x6a\xe8\x7d\x44\x41\xb8\x21\x8f\x59\xb9\xae\xfe\x85\xad\xae\x51\x6b\x22\x9b\xdb\x57\xb9\x7e\xb9\xb7\xd0\x3d\xe2\x75\x5b\x22\xec\x8a\x6e\x39\x5d\xca\xdd\x7b\xbc\xa6\xb9\x68\x38\xad\x0f\x84\xe2\x68\x82\x83\xb5\xea\x66\xf1\xeb\xed\xb0\x3a\xad\xa0\xe0\xfb\x93\x84\xbb\x20\xe5\xf4\x6d\xb5\x33\x43\xe5\xc8\x16\x83\x0e\xe6\x59\xfb\x79\x44\x6b\x43\x1d\x71\x24\x84\x6c\xf7\xde\x29\xa3\xa3\xf7\x6f\x7f\xf8\xf0\xfc\xfd\xe2\xf9\x8f\xcf\xdf\x7c\x58\x3c\x7b\xfe\xee\xfd\xf3\xa7\x4f\x14\xae\x97\x7e\xb7\x78\xfa\xf6\xcd\x9b\xe7\x1a\xeb\xcb\x93\xf6\x57\xc0\x04\xfd\x44\xf3\x8f\xaf\xf3\x6d\x00\x3a\x6c\xd2\xcc\x5a\x5b\xf8\xe3\x13\x94\xa6\x36\xa5\xec\xcd\x5e\x32\x1d\x10\xc6\x69\xe1\x23\x0d\x78\xe8\x78\x3e\x60\x90\x1d\x7b\xca\x67\x6c\xae\x20\x01\x2d\x7e\xc2\xe4\xe1\x82\xad\xfe\xa2\x93\x04\x31\x88\xd1\x6b\x17\x4a\xd8\x2a\x31\x42\x1a\xb7\x6f\x1c\x3e\x04\x52\xe9\x62\xad\x2e\x73\x1f\x1b\xe4\x4a\xe5\x92\xc1\x57\x71\x55\x7f\x75\x6f\x2f\x33\x9d\x09\x45\x0a\xdb\xe0\x5a\xc6\xdb\x06\x80\xca\x45\x4f\x55\xb1\xe8\xa9\x45\x4d\x9d\x12\xb2\xeb\x90\x65\xcd\x84\x46\x55\x21\x39\x6b\x57\x7e\x91\xc5\x82\x5e\x75\xc0\xcf\x02\xd4\x77\x70\x09\xf7\x66\x0a\x06\xf5\xb0\x59\x3e\xef\x11\xa1\xfa\x8f\x01\xb7\x38\x7a\x19\x27\x19\x25\x42\x2e\xb8\x7e\xb9\xdb\xcd\xe6\x0e\x3d\x8f\x79\xeb\xa5\x9c\xc2\x16\xbf\x6d\x47\xbf\x6d\x6b\xc8\x16\xef\xd9\x77\xcd\xde\xd0\xe0\x0e\x36\x4f\xcc\x70\x98\x2b\x8c\x07\x0a\x6a\x6b\xe0\x67\xf8\x2c\x9f\xbb\x4c\x2c\x64\x7c\x5a\x3b\x34\xc2\xe1\xb0\x36\x59\x58\xd8\xac\x9e\x0f\x12\x30\xa3\x26\x00\xfe\x5f\x2f\xab\x2d\x95\xa2\x8d\x64\x8e\x44\x4d\x2a\x48\x48\x9c\x8f\x16\x39\x28\xb0\xbf\x7f\xa7\x91\x41\x62\xd9\x90\xac\x75\xb0\x55\x36\xa3\xaa\x5a\x9b\x61\x14\xec\xb7\x42\x4d\x36\xb8\xbc\xb1\xf2\x22\x56\x73\xbb\xde\x4e\xd9\x8c\x8e\x1a\x5e\x7c\x47\xaf\xa1\x2e\x75\x57\xb5\xed\xe7\x77\x08\x72\x86\xfa\x27\xc9\x50\x65\x4a\x3e\x32\xc8\x9e\x37\x7b\x5f\x63\xda\x67\xfb\x54\x83\x75\x56\x22\xb9\x66\xd3\x72\xb6\x1c\x9d\x7d\x78\xf2\xe1\xf9\xe2\xec\x97\xd7\xdf\xbc\x7d\x35\x9f\x1c\xac\x03\x44\x0b\x9c\x13\x1e\xee\x53\xa5\xc7\x10\x3e\x60\x7e\xa5\x47\x39\xcb\xe7\x52\x14\xbd\x0e\x4c\x0f\xbe\xd9\xba\x41\x23\x4e\x57\xcd\xd2\xc7\x32\xf6\xdc\xbd\x20\x81\x7e\x33\x13\x73\x4c\xf7\xb8\x46\x2a\x10\x4f\x93\x44\x77\xaf\x7e\x47\xa3\x48\xb0\xb4\xa7\xf8\x2d\xc9\x9b\xf5\xd8\x23\x1f\x02\x2f\x23\x2b\x5d\xd1\x2f\xae\x36\xfa\xa9\xad\x78\xa1\x65\x8e\x17\x15\x8f\x56\xec\xc5\xeb\x04\x47\xd1\xb3\x65\x8d\x92\xa1\xdd\x6e\xbb\xdd\x6d\x05\xb7\xbc\xda\xa2\xdd\xee\x66\xbf\xd7\xde\x31\xc2\x71\x77\x3d\x5e\x23\x7b\x70\x7c\x88\xc4\x03\xad\x28\x6c\x32\x25\xf1\x6a\xff\x12\xed\xf7\xe3\x5e\x25\xe6\x95\xce\x0a\xf9\x23\xa3\x9f\x6a\x1d\x6b\x67\x6e\xe4\xf7\xb4\x9d\xd1\x30\xa0\x61\xee\x4a\x1e\x70\x1f\xb8\x27\x4a\xa0\x94\x38\x3c\x62\xa5\x3a\x00\xa6\xf9\xd6\x50\x95\xad\x0b\x7a\x41\x4b\x11\x0e\x7d\xa5\x8c\x19\xb2\xc6\xd9\x5c\x7f\xde\x3b\x50\x37\x4c\xb5\x4f\xcc\x6f\xbf\x42\xf9\xa6\xef\xf9\xad\x8e\x50\x11\xfd\xf8\xfd\x10\xa0\xf5\x06\xa2\x2d\xa7\x9a\x88\x2b\x10\x04\xb3\xae\xfb\xf1\x76\x20\xfb\x64\x3e\x82\x55\xbb\xa4\x2b\x96\x0b\x8f\xbe\xfc\x59\xdd\xb7\x57\xd1\xc1\x8e\xe1\x8a\xb0\xd9\x78\x8e\x73\xc2\xb4\x5a\xf6\x04\x9d\x76\xc6\xdc\xd7\x73\x3b\xfe\x59\x65\x2d\xc6\x39\xd2\xc1\xbb\x6b\x4e\x63\x11\x74\xb7\x79\x9e\xc0\x67\x06\x09\x37\xef\x73\xce\xfa\xd3\x97\xd9\x6b\xf7\x7e\xab\xdc\xca\x34\xeb\xe7\xc4\x68\x9f\x4a\xf9\xbd\xaf\x59\xd5\x7e\x50\xad\x52\x52\xac\x64\xe0\xd6\xc6\xd6\x19\x27\x95\xfe\xa2\x2b\x64\x66\x0c\xe1\xa3\xd6\xc7\x46\xe9\x1e\x39\xf1\x09\xb2\x00\xff\x52\x44\x9b\xba\x22\x39\x4e\xb6\xde\xd5\x5e\x27\x68\x32\x9b\x9f\xb6\x2e\x1e\x11\x45\x37\xa6\xa3\x7c\xb5\x32\xb9\x52\x32\x31\x04\x48\x31\x4c\x15\x70\x98\xbe\xe5\xc1\x62\x0c\xc9\xe3\x70\xab\xb7\x84\xef\xaf\x5c\x4e\xf6\x4e\x77\x0b\xa2\xbd\xad\x6a\x05\xed\xef\x93\xb4\x62\x04\xca\xf4\xb7\x57\x94\x73\xb6\xa2\xb5\xec\x22\xac\x17\x70\x7f\x40\xc8\x61\x2c\x28\xf0\xf8\xc2\xa2\x7d\xb1\xab\x95\x78\x59\xae\x2b\xad\x08\xde\xe8\x8d\x71\xee\x70\xeb\xf0\x8a\xc8\xef\xde\x3d\x79\xff\xe4\xf5\x99\xf9\x70\xd0\x8c\x82\x49\xeb\x4e\x8f\x75\xca\x6a\x46\x97\xf9\x76\x46\xe7\x03\x61\xe4\xdb\x95\x7f\x5c\x97\x79\xb1\x6c\x0a\x08\x1c\x58\x6e\xa8\xbc\x9e\x32\x6d\x25\x6b\xb1\x13\x42\x31\x75\xd8\x54\x23\x4f\xf3\xc6\x70\x41\x4c\x12\xea\x51\x53\xae\xe8\xb2\x02\x5d\x87\x16\xa4\xc0\xf9\x31\x84\x7e\xa1\xb8\x42\x5a\xeb\xb1\x25\x9a\xc7\xef\x4c\x8c\xfb\xc4\x17\x36\x38\xde\x6a\x25\x20\xec\xfb\xce\x45\xa1\x1d\x60\x3d\x5c\x2b\xab\x2d\xac\x37\x55\x53\xac\xde\xd3\x72\x45\xb9\x4e\xa7\xcc\xe1\xc7\x07\x7a\xb9\x95\xc3\x07\xaf\x21\xb8\xef\xec\xd6\x89\xd9\xc6\x5b\x49\x46\xfd\x75\xea\x9f\x50\x1e\x9d\x50\xae\x27\x94\x9b\x09\x1d\x94\x6a\xff\xa8\xd9\x44\x70\xf9\x9f\xd3\x75\xc5\xe9\x6b\xc9\x63\x77\x2e\xab\xb5\xa4\x65\xb1\x37\x9c\xae\x18\x6f\x05\xcf\xc8\xe7\x5a\x70\xb2\x9e\xbe\x1d\x5e\x41\xbb\x5a\xa8\x4a\xed\x71\xa1\x9f\x01\x6b\xe1\x32\x6c\xca\x82\xfa\x69\x69\x3b\x7a\xcf\x5f\xe6\xdb\xc4\x09\x2b\x0d\xc8\xa2\x08\x84\xd9\x00\x58\x50\x4a\x0f\xbb\x5d\x9d\xa6\x50\xc2\xe4\x79\x2c\x60\xef\x8a\xe5\x26\x7b\xf8\x3f\xd9\xe8\xff\x20\x10\x57\xd1\x40\xe3\xd7\x17\x90\x86\xad\x98\x9d\xc8\xfb\x84\xce\x9a\xb9\xdc\x90\x47\xe3\xbd\xac\x5d\xa5\x5b\xab\x90\x65\xcb\x02\x36\x98\xea\x64\x1d\xda\x3e\x03\x36\xa7\xc7\x27\x06\xba\xdd\x08\xb3\x07\xce\xea\x2c\xfc\xf6\xf8\x64\x6e\xe7\xc9\xbf\x76\xd6\xac\x5c\xc1\x54\x66\x0c\xe7\x6d\x0e\xb5\x27\x90\x02\x0c\x64\xf0\x8d\xda\x60\x56\x2c\xc9\x5a\x94\x9b\x22\xcd\x19\xd9\x56\x3a\x6a\x32\x77\xdb\xb4\x97\xa6\x16\x15\xa7\x09\x42\xf0\xb1\xbd\x71\x7c\xa8\xba\xbc\x7d\xc4\xda\x11\x0c\x9e\xc2\x4d\x40\xa6\x50\x7d\xc0\x29\xd6\x12\xa1\xee\x5e\x70\xb5\xc4\x73\x7a\x74\x65\x69\xc8\x0b\xdc\x95\xaf\x9c\xf3\x19\x6f\x5d\x6c\x69\x9a\x51\xd2\x7e\x88\xb0\x88\xbb\x7b\x50\x8d\x4e\xd2\xbe\xd3\xee\xd8\x3d\x07\xd3\x64\x91\x53\x01\xa4\x09\xd9\x53\x12\x1d\x2a\x8e\x0b\x92\x38\x14\x11\x35\x71\xea\x61\x59\xa6\xf7\x92\x26\xad\x4f\x06\x51\x14\x28\x3f\x2f\xfc\x75\x2b\xa7\x0b\xa0\x7a\x13\x6a\xa1\xe7\xda\x93\xae\xf0\xdc\xd4\x89\x2b\xcd\xf5\x5e\xa5\x69\xe5\x76\xe2\x6e\xa7\x33\x20\xe8\x23\xa1\x36\x63\xdd\x4e\x91\x94\x5b\x57\xa2\x76\xc9\x59\x3e\x37\xc7\x06\x6a\xf6\x89\x90\xa2\x66\x3e\x9d\xee\x06\x04\xc2\xeb\x0c\xb9\xa2\x51\x7e\xa8\x24\x90\x3c\xa9\xc5\xbd\x0d\xca\xdd\xae\x9b\x45\x44\x8e\x69\xca\x09\x9d\x64\x5a\xb6\x11\xba\xf1\x28\x0f\x25\x08\x45\xa8\xe3\xcc\x8a\x03\xd7\x12\x4f\x1b\xd9\xde\x04\x14\x0d\x4a\x48\x8a\x58\x4a\xce\xb7\x4a\x53\xf5\xaf\x1f\x7d\xf7\xf0\x02\x27\xa3\x44\x8a\xec\xe5\xa8\x6a\x44\x41\x05\x2e\x48\xe9\xed\x76\xbc\x34\xfe\xec\x68\xd0\x48\x52\x9a\x5c\xe6\xac\x4c\xb0\x98\x66\x15\xe0\xf7\x99\xbe\xe6\x84\xb6\x06\x53\xa1\x49\x56\x85\x11\xbb\xa6\xb9\x9c\x54\x68\x50\xec\x76\x59\x41\xc4\x94\x76\x58\xc9\x75\xfc\x70\x55\x68\xd2\xfb\x66\xb7\xeb\x56\xe3\x75\x4f\xe5\x44\x6f\x67\x34\x2f\xd4\x24\x6e\x48\x31\x28\x48\x4f\xd5\x1b\xb4\x5f\xa6\x69\x01\x32\xa1\xa1\x3f\x4b\x6d\xdf\xc6\x5b\xef\x2b\x33\xf8\x49\x32\xcc\xd1\xa0\x4e\xd3\x6c\x45\x2e\x32\x8a\x50\x9a\xd6\x84\x90\x95\xeb\x0c\xac\x89\xce\x4a\xa4\x34\x98\xe4\x06\xf4\xe8\x93\x35\x96\x0b\x34\xa9\xb1\x5a\x8b\x49\x83\xc1\x3a\x5f\x61\xaf\x4b\x05\xb6\x2d\x6d\xe5\x18\x17\xa2\xda\xbe\xa2\x57\xb4\x90\x92\xb5\xd9\xcb\xd6\x9d\xf6\x52\x65\xe3\xc0\x25\xe6\x58\xa0\xc1\x4a\xb9\xd0\x81\x9a\x09\x4c\x73\x15\x52\xe0\x82\x55\xb9\xa4\x2d\x9e\x32\x59\xd4\x54\xbc\x85\x8e\xd4\x5a\xbc\x65\xf5\xb2\x2a\x4b\xba\xd4\x8f\x63\x94\x08\xe0\x3d\xba\xb9\xe3\xa7\x42\x6e\x7a\x88\x54\x54\xdb\x8c\x5b\xeb\xa7\xec\xf7\xd4\xff\x11\xd9\x31\x9a\xde\x20\x84\x85\xca\x3d\xa9\x36\x21\x74\xb7\xdd\x2b\xf0\x43\xf4\x92\x80\x1c\x24\x6c\xbe\xe3\x28\xdc\xc0\x1a\x47\xcf\xc0\xc7\x59\x38\x3d\xcd\x68\xc5\x5b\x03\xee\xee\xc0\xec\x38\x85\xc6\x85\x21\xf4\x69\x0a\xd9\x7a\x82\x5d\x21\xec\xae\x70\xbd\xf7\x56\x2c\xd6\x35\xed\xbb\x24\x7b\x38\xa8\xf4\xdc\x12\x70\xbc\xa9\xe0\xb0\x6b\x0c\x46\x00\x04\xd4\x9b\xac\x52\x29\xbb\xd4\x56\x53\xa5\xcc\x7e\x33\x35\xe8\x6d\x07\x7a\x5b\x7f\xef\x99\xa4\x4f\x66\x03\x1a\x00\x95\xbb\x6d\x21\xb4\xf7\x54\x2b\x0a\xc7\xeb\x50\xc4\x7e\x44\x63\x14\x3c\xea\x1a\xef\xbc\xb9\x1a\xb8\x50\x5a\x97\x3c\xe6\xeb\xb1\x3c\x95\xa1\x7a\xe7\xae\x5d\x97\x1c\x73\xc3\x8a\x95\xdd\x29\xaf\xa9\xc8\x57\xb9\xc8\x43\x56\xb8\x8a\x42\x3f\x5e\xb8\x6b\x3f\xb6\x29\xbe\xd0\x96\x0f\x09\x70\x8e\x4c\x3a\xaa\x76\xda\x1b\x3f\x5d\x3b\x24\x34\x2f\xf5\x1e\x96\xdb\xc3\x06\xc1\xcd\xca\xa1\x4d\x9a\xb6\xcf\x40\xc0\x3d\xa4\x0c\xf6\x58\x55\x7c\x7c\xe2\xa2\x70\xd2\x54\x8b\x76\xce\x5b\xe1\x5a\xf1\xf1\xdc\x0f\x29\x92\xdc\x4b\xfb\xc1\x6e\xa7\x15\xda\x8c\xb4\xe4\x18\xc5\x4b\x87\xa5\x67\xcc\xa5\x37\xee\xbe\xb2\x73\x50\xb5\xa4\x09\xfb\x89\x6c\xc0\x33\xd0\x4e\x3b\x4f\x26\x59\xe7\x11\xb9\xd9\xe3\x80\xd3\xef\x94\xc0\x41\x5f\x90\x9c\xc5\xa8\xde\xb7\x36\x02\x9b\x9a\xc1\x4e\x3d\x28\xf2\x68\x9f\xd9\x35\xc1\x10\x4e\x10\x19\xb7\xec\x61\x1d\xda\xd7\x9c\xb1\x46\xa5\x6b\xad\x9d\x99\xa5\x31\x42\x10\x64\x69\x5d\x92\x02\x24\x7e\xc8\xf3\x39\xc8\x67\xea\xd7\x9c\x2c\xa7\x95\xf9\x7b\x72\x9e\xd9\x34\x06\x4a\xee\x36\x6c\x55\xee\xd6\xfb\xdc\xd3\xc4\x07\xc9\xbd\x33\x8a\x54\x52\xe4\x27\x28\xa3\x5a\x3b\x87\xd0\xc4\xdb\x2a\x0b\x6b\xc7\xa2\x96\x9b\x74\x2e\x13\xce\x15\x6d\x10\x71\xa3\xd1\x79\xf9\xb8\x72\x97\xb1\x52\xd2\xfe\x4a\xc7\x29\x3c\x2d\xf2\xba\xce\x6e\x98\x0a\xb8\xd1\x0e\x0c\x93\xa3\xf1\x1e\xe1\x2b\x2f\x94\xb6\xf6\xec\xb5\xe6\xd3\xac\x1a\x3d\x81\x0e\x6a\xd8\x0e\x5c\xb9\xb8\xb0\x76\x02\xd3\x83\x78\xf6\x37\x7b\xec\xb3\x46\x1a\xce\x1e\x6c\x6e\xea\xef\x90\x73\x51\xcf\x40\x92\x9a\xc0\x9a\x9a\x78\x29\x94\xdd\xb4\x52\x0b\x5c\x19\xc0\xf6\xae\x28\xd1\xe2\x25\x3b\x32\xb4\x3e\xe6\xa5\xf1\xea\xb1\x08\x49\x37\x52\x74\x9b\xf8\x8e\xcc\x46\x33\x11\xba\xaf\x00\x33\xe4\x38\x79\x23\x12\x97\x92\x7f\x94\x93\xae\x64\xc0\x8c\x83\xa9\xae\xf6\xfb\x4d\xb5\x56\xab\x6c\xe5\x55\x30\xc9\xec\x6d\xc2\xdf\x3d\xc2\x8b\xdf\xb6\xed\x49\x68\x8f\x5f\x43\xcf\xe0\xfc\x4e\x8a\xc9\x3a\x2e\x2b\x35\xa4\x8e\x33\x80\x39\x32\x79\x7f\xe3\x66\x95\x04\xe1\x65\x90\x72\xad\x70\x91\x99\x03\x95\x47\x57\x59\xe1\x5d\x1d\x4d\xab\x02\x20\x81\x34\xa2\x00\x29\xe5\xc1\x66\xe4\xc6\x3f\x7b\x93\xa3\x31\x96\x5b\x56\xfe\x0b\xf6\x4b\xf9\x47\x5e\xcb\x2d\xed\xc8\x9f\x55\x87\xd0\xb6\xb4\x64\x40\xa8\x73\x72\xb3\x3f\x0d\xa8\x5a\x8e\xe9\xac\x9a\x63\x3e\xab\xe6\x08\x97\xb3\x6a\x4e\x72\xcc\xe4\x3f\x47\x63\x9b\x84\xb8\x96\x15\x73\x04\x84\xb9\x55\x71\x8d\xd2\xf4\x88\xcd\xea\xb9\x31\xe2\xb6\xeb\x6f\x30\x9f\xd5\x73\x4c\x65\x11\x5c\xce\xea\x39\x69\xcc\x71\x2d\xf7\x19\x68\xb8\x6c\x84\x97\x93\x9c\x7d\x52\x98\xad\x10\x2e\xb4\xd3\xc0\x12\x1c\x5d\x43\x49\xb9\xc6\x39\xc2\x94\x14\x46\x07\x38\x9b\xe3\x4b\x39\x83\x57\x64\xe6\xae\x86\x8b\xfe\xb9\xb9\x40\x69\x9a\xe8\xbc\x74\xe6\x61\x72\x44\xc8\x45\x9a\x26\x0a\xfc\x0e\x7e\x19\x5f\x4b\x3a\xbb\x98\xe3\x05\xb9\x56\x66\x64\xc9\x95\x2a\xf1\xe0\x93\xf1\xbe\xf0\x36\x92\xa4\x53\x8b\x34\xcd\x3e\x41\x0a\x4c\xf9\xfd\x73\x72\x3d\xca\x6b\xbd\x3d\xe3\x46\xce\xec\x02\xe1\xcf\xc1\xbe\xb9\x40\x83\xcf\xe4\x3c\xfb\xac\xaa\x38\x23\xd7\x23\xb9\x15\xc0\xec\x57\xc1\x9f\x6f\xd7\x28\xfb\x8c\xf0\x13\xd2\x57\x6d\xf6\x19\x3f\xc7\x67\x08\xbf\x25\xf9\x30\x99\x24\xc3\x0b\xfc\x91\xdc\xf4\xa8\x57\x27\x61\xd3\x38\xd8\x86\x9f\xb1\xad\x3d\xfc\xe8\x89\xf7\xc2\x3c\x81\x0d\x7b\x86\x95\x99\x72\xf2\x1c\xcb\x6b\x65\x72\x81\xbb\xf6\xf7\xc9\xdb\x36\x31\xcc\xb1\x52\x19\xc0\xc1\x03\xbd\xe6\xe4\x93\xca\xd6\xab\x89\xa7\x3a\x04\x8b\xfd\xe0\x72\x76\x31\x27\x97\xb3\xe7\xf2\x7f\x6f\xe7\xe4\x23\xde\x2a\x19\xe7\x23\x90\x7a\xf9\xd7\x85\xb9\xb8\x6e\x7e\xdb\xd6\x93\x2d\xbe\xcc\xb7\x93\x4b\x1c\xe8\xbb\x27\x57\x58\xe9\xe6\x27\x37\xc6\x86\x38\xe9\xf2\x6c\x25\xb9\x9c\xd1\xb9\x32\x47\x5a\xa3\xbf\x76\x53\xbf\xf5\x23\xc3\x8b\x74\xbe\xc5\x11\x27\x85\x52\x69\xbb\x02\xa3\xc0\x97\xd6\xdd\x75\x54\x28\x25\x71\xde\x23\x5c\x53\x9f\xe4\xff\xa1\x38\x0c\x77\x57\x41\xed\x76\x47\x10\x9b\xce\xea\x0f\xb4\x96\xfd\x44\x99\x49\x6a\x7c\x9a\x95\x2d\xc3\x96\xec\xb1\xd6\x2f\xc2\x14\x49\xa2\x60\xbc\x93\x2c\x6e\xb8\x36\x42\xe5\x30\x2c\x80\x18\xf0\x94\xb7\x0f\x02\x08\x04\xa5\x15\x57\x05\x27\x7e\xac\xa8\xd5\x69\x4f\xda\x4a\xfb\x83\x9e\x32\x09\x1a\x5d\xe6\x5b\x5c\x05\x57\x03\x45\xc6\xbc\xe8\x3f\xe5\xc8\xf8\xce\x54\xbe\xef\x8c\xca\x18\x4f\xd8\xac\x9a\xe5\x73\xe8\x79\xad\xd5\xa1\xb6\xa5\xb8\xff\x40\x56\x23\x9c\x68\x0b\x24\xe8\xba\x12\xd4\x9a\x78\x3f\xca\xd2\x2a\xbb\x94\xc5\x12\x0d\xce\x39\xcd\x3f\x9a\xe4\x97\x47\xe3\x3d\x5e\xb3\xb2\x45\x44\x7a\x26\x84\xad\xb3\xb6\x8b\x73\xd7\xcb\xc9\xe5\xa7\x75\x46\x0f\x86\x2b\x72\x48\x2d\x6e\xae\x76\xc3\x07\xd7\x24\x1f\x2d\x42\x2e\x38\xab\xe4\x1d\x0e\x46\x16\x85\x88\x55\x9f\xc6\xed\x66\x39\xae\x9c\x7c\x5d\x90\xf1\x69\xf1\xb8\x96\x9c\xb2\x9b\x7a\xab\x16\x82\xe7\xb3\x62\x8e\x57\x64\xa3\x7a\x83\xb7\x64\xe5\x6b\xc7\x2e\xc9\x46\xfb\x5e\x3c\x50\x20\x9f\xe6\x27\xbe\x32\x19\x91\x2e\xbc\x6c\xa5\x90\xde\x3d\x33\x65\xd0\x34\xbb\xf2\xb6\xce\x16\x6f\x94\x7b\x06\xbe\x20\xab\x28\xe9\xbe\xc2\xb6\xfa\x0d\x50\x7b\x84\x26\x97\x53\x97\xf7\xfc\x82\xd0\xd9\xe5\x1c\xa5\x69\x76\xa5\xd2\xbc\x47\xea\xb8\x88\xd4\x91\x5d\x90\xcd\x28\x4e\xcd\xf1\x15\x39\xcf\x36\x21\xf3\x8f\xf0\xb6\xc7\x0d\x63\xd5\xe7\x83\x71\x71\x44\x82\x26\x54\x45\x37\x6d\x01\xef\x6d\x59\x5c\xa7\xe9\xd1\xc9\x11\x21\xcc\xdc\xb2\xab\x9e\x4d\xbe\x41\x2a\x60\x40\x37\x7d\x8d\x5d\xb0\xfb\x60\x31\x65\xe4\x68\x3c\x81\x14\x14\x0b\xb0\xe6\x1c\x9d\xa0\xbd\x33\x25\x98\xa9\xc6\x57\x68\xdf\xe9\x16\x91\x53\x14\x9f\x0d\x02\xbc\xc0\x11\x3f\x08\xc8\xb2\xdb\xa9\x40\xb3\xec\x46\xe5\x94\xbf\xc0\x57\xac\x66\x3a\x35\xd8\x47\x7a\x3d\xb9\xdc\xed\xcc\x1a\xec\xd1\x9e\xa5\x29\x8f\xc4\xeb\xab\x3d\xd9\x6f\x7c\xf5\x84\x3d\xbd\x35\x15\xd5\x19\xe8\x9f\xde\x2e\xed\xf3\x99\xc1\x89\x5e\x28\xb3\x4c\x7b\x84\xfd\x03\x34\x5a\x16\x34\xe7\x99\xbe\x22\x0e\x79\xa0\x5e\xe2\x3a\x78\x7b\x06\x99\x6b\x0f\x94\x27\x37\x55\x39\x69\x2b\x7c\x0e\xe1\x0b\xef\xf7\x4e\x2c\xbb\xc4\x37\xce\x7a\x35\x89\x5a\xbb\x9c\x05\xe9\x3e\x56\x0d\x65\x03\x71\x86\x31\x8a\x26\x62\xbf\x57\xa0\xc4\x95\xdc\x39\x2f\x78\x7e\x49\x3f\x55\xfc\x23\x48\x95\x28\xbb\x52\x7c\xd8\x27\x72\xe5\xf9\x94\x7f\xba\xaf\x7b\xf6\x3d\xf1\xb6\xfe\xaf\x3b\x63\xeb\xf0\x9c\x03\x58\x1d\xf7\xce\x9c\x70\x97\x04\xb9\xf7\xf2\xdf\xbe\x6f\xda\xd7\xfb\xe5\x88\x5d\x68\x34\x4f\xcf\xfb\xfc\x8b\xd3\xa8\x5a\xad\xc7\x55\x86\x6e\x9e\x6a\xe9\x53\x6d\x53\x95\x29\xe3\xac\xa8\x3e\x79\xde\x49\xec\xd2\xa1\xc3\x96\x95\x60\xeb\x6b\xc3\x2f\xab\x5b\x38\x4b\x1a\x5e\x18\x37\x37\xb0\x52\x04\x18\x0a\xda\x5f\xcd\x01\x31\xc0\x6e\x2e\x3c\x95\x67\xe0\xd1\x86\x93\x15\x5b\xb9\xd6\x13\xb4\xf7\x95\x98\xea\x9a\x3f\xfc\xfd\x27\x56\x14\x5e\x05\x98\x23\x5f\x27\x18\x7a\x16\x52\xf3\x19\xe8\x55\xc8\xdb\x78\xde\xac\x73\xa2\xf4\x49\x9e\xb6\xa6\x60\x4b\x8a\x17\x7f\x98\xdb\xb7\x45\xe1\x51\x71\xda\xa2\x83\x27\xd1\x7a\x0e\xc0\x7b\x91\xa2\xe6\x99\xe4\xbe\x01\xc1\x41\xb3\x79\x2a\x73\x5b\xa6\xd2\x20\x08\x8f\xc4\x12\x9d\xe9\x5d\x3e\x54\x48\x1e\x2b\x88\xcc\x0d\x5e\x98\xd8\x41\x15\xa0\x59\xf7\x55\xea\x42\x0c\xbf\xb9\x56\xbd\x89\x17\xf4\xb7\x87\xe9\xb0\xb7\x3f\xec\x18\xc0\x65\xf2\xfb\x86\x36\x74\xe5\xae\x38\x2a\x28\x57\xfb\xae\x96\x9b\x32\x8a\x92\x53\x39\x54\xfa\x88\x93\x7c\x3d\x5a\xb0\x92\xa9\xf9\xe2\xff\x88\x68\xf1\xc1\xef\xfe\x22\x82\xf2\x8e\xb4\xeb\x99\xca\x41\x54\x76\x54\x38\xf1\x99\xf1\xf0\xfb\x4a\x6f\x97\x34\x7e\xde\xe0\xfb\xe2\x00\x35\xb8\x54\x23\x5c\x92\xa6\x3b\xc2\xa5\xec\x59\x17\x07\x48\x63\x07\x60\x4e\x2a\x5c\x12\x16\x59\xb0\x99\x98\x83\xc5\x96\xcb\xb7\x17\x54\x3c\x0f\x16\x3e\x2b\x91\x14\xbe\x46\x41\x58\xa4\x89\x46\x70\x76\x75\xdc\x38\x6b\x7b\x0e\xaa\xb9\x7a\x46\xad\xd2\xbc\x31\x0f\xc8\xd1\x18\x1f\x59\x4d\x30\x0f\x34\x7b\xaa\xae\x56\x4c\x9a\x0b\x17\xcb\x71\x61\xc2\xd3\x10\x0a\x9b\xdb\x03\x93\x1b\x44\x41\x80\xeb\x62\x9a\x4a\xd1\x6e\x15\x0b\x84\x41\x59\x83\x0e\x06\xa6\x2f\x9b\x5a\x54\x97\x2e\x32\xfd\x81\x62\x96\x1e\x54\xa5\x17\x89\xae\x22\xd5\x75\x3c\xba\x06\x02\x55\x11\xe9\x66\xe0\x7b\xc0\x07\x70\xed\xc6\x7c\x32\xa2\x8b\x42\x95\x18\x6b\x4d\x26\xed\x30\xfc\xdd\x6e\xd5\x89\xfa\x91\x8d\x35\x5d\x60\x5e\x11\x10\x4f\x6f\xe7\x53\x8d\xfb\x9b\x05\x59\x0e\x18\x4e\x3c\x80\x30\x29\xa2\x22\x59\x71\x40\xa1\x83\x51\xe4\x6d\x2e\x8c\x85\x85\x71\xeb\x37\x00\xc3\x2c\x47\x21\xc9\xee\x38\xa7\x45\x6a\x0d\xbf\xc0\xed\x07\x16\x23\x6a\x19\x12\xf8\xae\x13\x83\x09\x11\x80\xf4\x33\x19\x43\xf6\x8d\xfc\x16\x16\xd5\x61\x51\x06\x43\x65\x87\x21\x2b\xcd\xd7\x11\x8f\x34\xf8\xd8\xbf\x28\x75\xa6\x64\x3a\x12\x55\x70\x39\x7a\xeb\xd3\x6e\xad\x03\x69\xb9\xf4\x1c\xaa\x9f\x31\x45\xc4\xe3\x8e\x58\x74\xf4\x29\xaf\x9f\x9c\xc3\xfe\x94\xa2\x02\x33\x3f\xa6\xd9\x18\x5f\x8e\x8a\xea\x02\x7e\xa3\x4c\xa0\x49\xe6\xa0\x34\x8f\x4e\x6c\x14\x3a\x1d\xc1\x1f\x58\x60\xcd\xeb\x23\xcc\x46\x0b\x56\x43\xa3\xca\x56\xb1\xca\x74\x21\x34\x05\xa7\x4b\x8d\xdc\x6c\x9c\xe1\x83\x21\x64\x10\xa8\xab\x4a\xcb\x16\x73\xd9\x7c\xe6\x9e\xc1\xe8\x16\xba\x1f\x6e\x9a\x9f\xea\x58\xa9\xae\x67\x34\x6b\x7f\xf0\x8a\xe6\x57\xb1\x14\x04\x50\x30\x96\x0a\xc1\x1a\x83\xec\xbb\xfe\x83\xe3\xca\xdc\x7e\x78\x40\x73\x0c\x53\x60\x0f\x27\x60\x02\x36\xfb\xcc\x66\x67\x46\x78\x19\x48\x0d\x46\x5a\x80\x1b\xb9\xc1\x6b\x6b\x64\xa8\x05\x6f\x24\xcd\x1c\xad\xea\xc2\x60\x63\xd7\xbb\xdd\xec\x7a\x8e\x9d\xb3\x2d\x2b\x56\xcf\xce\x5e\x65\x68\xb0\x31\xa8\x13\xbe\x82\xc4\x61\x4f\xe0\x56\x38\xfb\xd1\x18\x57\x5a\xdd\x07\xee\xd9\x75\x4d\x39\x38\x5e\x81\x42\x26\xa6\xa8\x1b\x9f\xd2\xc7\x6b\xa3\xc4\xa0\xc3\x21\x5a\x03\xfe\x59\x5e\x14\xda\x0b\x1d\xe1\xe5\xe8\x32\xdf\x66\x9b\x00\x26\x05\x7b\xdd\xec\x81\xd5\x58\x6c\xf2\xfa\x75\xb5\x6a\x0a\xfa\x4d\x5e\xd3\xd5\x7b\xe5\x63\x05\x4c\xa9\xba\x8f\x79\xfc\x3e\x66\xe4\x26\x0e\x56\x30\xa1\xb8\x85\x60\x31\x89\x84\xf3\x44\xee\xa4\xe3\xcb\x7c\x6b\xbc\xec\xda\x41\xfa\xad\xa4\xd0\x31\x86\x68\x46\x01\x77\x24\xfe\x86\x70\xb4\xb7\x6e\x33\x72\xad\xad\xd6\x03\x18\x09\xcc\x4c\xb2\x80\xc3\x5c\x51\x37\x73\xc0\x6f\xaa\xf0\x3b\x53\xe0\x66\x0f\x15\xc5\x27\x35\xca\x0e\x75\xa6\x16\x0c\xff\xd4\xa1\x46\x5b\x95\x00\xb7\xf6\x5f\x6f\x9b\x8d\x16\x0b\x75\x77\xf3\xeb\xc5\xc2\xb8\xc8\xf1\xd1\x65\xb7\x75\x77\x5d\x5a\xb0\x24\x95\x0f\x45\xe4\x5c\xe8\x34\xed\xb7\x33\x6c\x92\xbd\x63\x79\x01\xf0\x93\x56\x03\x0c\x4e\x9f\x8a\xe9\x03\xad\xae\xc5\xef\x06\x07\xcb\x7e\x9e\xcf\x4b\x78\x73\xe5\xb0\xe5\x2d\x8a\x7d\xa6\x5c\xbb\x14\xa6\x13\x90\x2b\xc5\x4a\xe8\x5f\x7b\x9d\xcd\xc5\x34\x1d\xdf\xe1\x3a\x2d\x07\x94\x7b\xa5\x5b\xce\x50\x67\x56\xdb\x5d\x33\x88\xad\x5e\x89\x58\x76\x53\x64\xb0\x40\x02\xbe\x57\x9e\x1e\x1f\xbd\xbf\x15\x7e\xe0\x06\x28\x09\x17\x3e\x1a\xab\xdd\xe7\x7c\x52\xfc\x91\xd8\x00\x50\x56\x6b\x67\x1a\x56\x5e\xa4\x69\xeb\x19\x5d\x19\x7b\xa9\x30\xc9\x3a\xee\xe2\x0d\x05\xa1\xed\x4a\x55\xeb\xbc\x2b\xc6\xa7\x95\x0b\xf4\xac\x86\x43\x74\x43\x09\x9f\x55\x5a\x67\x6b\xd5\xab\x39\x59\x75\xc3\x76\x35\xbc\x9b\x8d\xda\xd0\x0e\x0a\xb9\xa9\xae\x31\x6e\x4d\x05\x79\x9d\x31\x2c\x70\x3e\x6b\xe6\x68\xc0\x48\x31\x2a\x98\x26\x19\xb5\xbc\x0b\x3e\x95\x67\xca\x27\x05\x7c\x33\xc1\x92\x0d\xa0\x1a\x9e\x4b\x95\x72\x14\x3b\x22\xa4\x5b\x5c\x79\x3a\xed\x76\x59\xed\xbd\x44\x7b\xf0\xe5\x74\xc0\x8b\x35\x79\x06\x7d\x80\xbc\x80\xa4\xde\x03\x8c\x92\xb5\x6a\x88\x6a\x5b\x18\xd7\x3b\xd4\x7d\x34\xb2\xcb\xa5\x52\xcc\x30\x34\xb0\x66\x8a\x65\x9c\x66\xae\xc9\x32\x20\x7b\x57\x8c\x7e\x9a\x1c\xab\xbe\x26\xda\xa8\x1f\xb4\x41\xd6\x46\xdc\x31\x5a\x84\xc3\x3d\xc0\x4b\x6b\xe6\x3e\xf6\x68\xc4\xb1\xc1\xff\x99\xc0\x8c\x21\xc9\x27\x3e\x85\x7a\xdf\x57\x15\x78\xe5\xc5\x86\xbc\x07\xd3\x7e\x4f\x4e\x09\x83\x95\xa6\x50\xb5\x1e\xfe\x5b\x36\x1a\xa2\xe9\x43\x34\x1b\xcf\x43\xf0\xde\x0e\xf4\xb6\xad\x4e\x79\x7a\x77\x8b\xf4\x87\x0a\xb6\x36\xf4\x8c\xce\x33\x01\x09\x96\x2d\x61\xfb\x90\x71\xac\x5d\xc1\x65\xd5\xff\x77\x80\xc8\xd7\xb7\x03\x91\xdf\x0f\x80\x7c\x7d\x4f\x28\xea\x3c\x84\xa2\x6e\x2f\x40\x0b\x7d\x3c\xd7\x39\xe0\x6e\x8b\xf3\xfb\x73\x60\xc0\x4f\x5b\x00\xe0\x16\x2b\xf6\xb6\xf8\xbd\x36\x30\x38\x7e\x6a\xe2\xef\xea\x3f\x0f\x1c\xbd\x8e\x80\x92\xfd\x49\xf0\xe8\x8a\xf4\xf6\xce\xce\x2d\x30\xe9\xc1\x9a\xdb\xbc\xa3\x2e\xa9\x58\xa5\x16\xbd\x03\xa4\x4e\xa3\x11\x8f\xf6\xca\x30\x1f\xe8\x84\x63\x21\xa4\xec\xc1\x10\x69\x5f\x0f\xd5\x86\xa2\x35\xf2\x63\x0d\x76\xde\xff\xbd\x1d\xa7\x85\x98\x5e\xe4\xf9\xfa\x76\xc8\xe7\xf6\x84\x05\xd8\xcf\x3a\x30\x39\x92\xad\x2a\xf8\x28\x34\xdf\x7a\x51\xa6\x52\x8c\x45\xb7\xa6\xbe\xf2\x69\xb6\x65\x46\x82\x6b\xc2\x26\x2f\x8f\xdc\x21\x44\x2b\x0e\x6f\x33\xd1\x78\x81\xd6\x99\xc9\x07\x69\xc2\xe6\x02\x05\xa6\x65\x0f\x84\x72\xc5\xb1\x40\x7b\xf0\x73\x26\xe6\x08\x64\x3d\xde\x94\x28\x93\x3f\x67\x7c\x8e\x13\xdd\x43\x75\xe4\xee\x04\xfb\xd0\xe2\xbb\x25\x8b\x2f\xe2\xba\xef\xc5\x9a\xf9\x10\xd7\x8e\xb4\xa8\xc6\xee\x82\x05\xe1\x8c\x66\xf9\x6a\xa5\x97\xb6\xb7\xda\xae\xab\xb3\x47\x7a\xb2\x00\xa8\x3a\x3a\x14\x97\x90\xe3\x56\x15\xad\xe1\x1a\x1d\x63\xdb\x23\xe4\xf5\xa5\x7a\x64\xbd\x02\x48\xd7\xc9\x3f\x4d\x2d\x98\x26\x8b\xa5\xea\x57\xbc\xba\xb5\xcd\x55\x48\x33\xfe\xd1\x94\x9e\x95\xc7\x2c\xe5\xe4\x26\x4c\x00\x36\xa1\xfb\xc1\xa1\x8f\x97\x46\x76\x33\xcc\x51\x8e\xd0\x7e\xaf\xe3\xfb\x24\x5f\xa8\x03\x73\xfc\xbe\x67\x2a\xda\x8c\xdb\x68\x33\x83\xa1\x8f\x05\xc2\x31\x68\x5c\x9d\x48\x4c\x25\xff\x97\x7f\x65\x3d\xe5\x6c\x76\x51\x59\xd4\xfe\x30\xd2\x77\xcc\x4f\xb8\x97\xc3\x19\xbc\x37\x3e\x92\xc2\x37\x40\x95\xb8\xd2\x81\x89\x2b\x5a\x50\x41\x1f\x88\x19\x9d\x63\x31\xab\xb4\x9d\x79\x4e\x74\x5c\x55\xd4\xaf\xa0\xc4\xa6\x9c\xf6\x22\xd3\x53\x6f\x17\x8b\x10\x62\xfc\x3b\x07\x02\x64\xe5\x38\x5e\x46\x89\xc1\xb7\xd2\x38\xa2\x49\x12\xb9\xef\x1d\x64\x5c\x3d\x26\xd7\x88\x10\x3a\xa5\x93\x24\x97\x64\x5c\x39\xf8\xfe\xe3\xec\xed\x9b\x91\xda\x6f\x6c\x2d\xd9\xae\x49\x92\xa8\x9c\x7f\x3d\x8e\xd6\xad\xca\xe3\xb3\x06\x1a\xc8\x32\x4d\xb3\x70\xd2\x4a\xed\x01\xad\x79\xa9\x1e\x47\x0a\xae\xf2\xa2\xc8\x49\x2b\xb5\x23\x85\x1e\xeb\xed\x68\x21\xb1\xd1\x9e\x2b\x89\x5b\x8d\x37\x11\xbc\xa1\x90\x85\x78\x92\x94\xcd\xe5\xb9\x72\x20\x14\xd3\x37\xf0\x77\x46\x91\x8a\xec\x7d\xbb\xce\x50\x30\x4f\x30\xfd\x4f\x50\x06\xf3\xb5\xcd\x79\x2d\xaf\x19\x34\x51\x33\xb5\xe5\x4d\x49\xfb\xb2\xc8\xf4\xb3\xd4\x2d\x3f\x1b\xea\x45\xa7\x3c\x80\x8c\x54\xda\xed\x8a\x43\x38\x78\x39\x1f\xb0\x34\x65\xfd\x0e\x14\x62\x56\xce\xd3\xd4\xce\x78\x39\xdf\x6b\x16\xbf\x57\x03\x6d\x73\x20\xe0\x8a\x28\x5f\xc7\x35\x24\x0f\x56\xd6\x7b\xb0\x5c\x81\x29\x24\x8b\xde\xe1\x38\x27\x37\x3a\xef\xe7\x62\xcb\xab\x25\xad\x35\xab\xe1\xda\xf3\x1d\xf4\x2b\x29\x70\x62\xae\x03\x43\x9c\x6f\x2c\x47\x2e\x05\x68\x3b\x23\x82\xfa\xc6\xa8\x4c\x4a\x64\xac\x5f\x19\xeb\x65\x2b\x3a\xac\x26\xf3\xc1\x27\xda\xe9\x0a\xf2\xfd\x1c\x79\x12\x4c\xad\x25\x98\x5a\x2f\xeb\x6d\x83\x8a\xcc\x67\xcb\x31\xaf\xd7\x25\xc2\x2c\xae\xc3\xa0\x75\x57\x5d\xcb\x2b\xab\xb7\x8e\xd9\xe5\xe8\xfb\x1f\x9e\xbf\xff\x65\xd1\x42\x1a\x08\x9c\x8a\x73\x54\x81\x73\x54\x8d\x76\xbb\x8c\xcd\xea\x39\xc9\x67\xf5\xdc\x48\xbc\xeb\xa6\x28\xae\xcf\x96\xd5\xb6\x93\xfb\xc1\x26\x77\xee\x2f\xc2\x5a\x8b\xc9\x31\x43\x7b\x3d\x75\xed\xb5\xec\x4d\xbf\xf1\xd1\x52\x10\xd3\xa7\xcd\xf5\x0a\x92\x5f\x94\x75\x23\xe5\x68\xff\x0a\xae\x33\x86\xb9\xbf\x21\x0c\xf7\x14\x0b\x09\x61\x41\x48\x08\xc2\xa5\xf6\x09\x3e\x78\x5e\xdb\x5f\xc1\x70\x2e\xa8\xf8\xfe\xdd\x6b\xea\xc7\x24\x79\x72\xb8\x52\xcd\xb8\x88\x9d\x40\x6d\x05\xbe\x43\x50\x49\x2b\x5c\x27\x56\x93\xc5\x27\xa1\x33\x71\x7c\xa2\xb2\x52\xd8\x60\x63\x6d\xfa\xd6\xc2\xaf\x0b\x09\xb6\x41\xba\x0e\x61\x4c\x8a\x9a\xe4\x68\x8c\x21\xc2\xa6\x20\xb3\x39\x5e\x92\xf1\xe9\xf2\xb1\x38\x1d\x0e\x97\x88\xad\xed\xf9\xb1\x03\xcb\xe8\x6c\x39\x47\x4e\x08\x58\x93\xf1\xe9\xfa\x31\xf3\xfd\xf7\xd6\xc3\x21\x92\xfc\xc7\x6f\xdb\x7a\xb6\x9e\xe3\xc2\xc4\x39\x9e\x06\x7b\xa0\xc6\x4c\x92\x2b\x6d\x12\xc8\x89\x56\xa2\x6e\x08\x78\x06\x17\xe0\x19\x5c\x5b\x75\x70\x6e\xb9\x66\x37\x3a\xb2\x41\x78\xa3\xd8\xbc\xd8\xce\xeb\x88\x3e\x96\x68\xe2\x60\x33\xf9\xcb\x58\x91\x31\x20\xd8\x18\xbd\xda\xe3\xfc\x74\x38\xac\xe4\x44\x94\x9d\x89\x60\xb3\x6a\x8e\x90\x83\x52\xb3\xba\x34\xfd\x47\x41\xc6\x10\xbb\xeb\xcd\x4c\xf1\x78\x09\xde\x8d\x59\x43\x20\x28\x58\x39\x37\x22\x1b\xfd\xc3\xd3\xb4\x86\x1f\xbb\x5d\x1d\x81\x46\xb3\x45\xba\xaf\xe4\x07\xce\x0d\x12\x0a\x69\x17\xc7\x34\x6d\x8e\x08\x89\x7d\x03\xa8\x80\xb1\x17\x73\xc2\x67\xcd\x1c\xeb\x1b\x42\xfe\xad\x36\xe6\xa1\xf3\xd6\x97\x4b\x45\x79\xe5\x10\x1a\xf3\x25\xf5\x11\x36\x14\x14\x5d\xe5\x43\xd1\x01\x4a\x4d\x7b\xd6\x2b\x49\x93\xec\xac\x37\x44\xce\x33\xf7\xe7\xb8\x79\x5c\x40\x84\x15\xac\x19\xbc\x91\x63\xd1\x89\x68\x61\x96\x45\x9a\x96\x7a\x96\xcb\x9e\x59\x86\x22\xb1\x59\x2e\xbd\x59\x86\x42\x7a\x96\x99\x3c\x60\xf1\x39\x96\xec\x4c\x6c\x8e\xc5\x8c\xd9\x39\x96\x7f\xb7\x55\x93\x51\xb8\x91\x32\x0a\x37\x52\x6a\xb8\x11\xaa\x5d\xe7\xd0\xa0\xaf\xd1\xdc\x48\x05\x4b\xac\xe6\x40\x85\x00\x79\x71\x65\x8a\x59\x5c\x6e\xe8\xaa\xb1\x76\xa3\xae\xed\xd8\x48\x5d\xb7\x3a\x4c\x2d\xea\xee\x3b\x02\x32\xa0\x69\xe3\x2d\xc8\x82\xda\xb1\xcb\x95\xac\x95\xe3\x14\x4e\xb4\x5b\x4e\xd8\x46\xa2\xd1\xc3\xea\x51\xf4\x75\x17\x9f\xf1\x1e\x77\xad\x42\x7d\xda\x5a\xe3\x93\x27\xa6\x86\xdf\x47\x1f\xc6\x2e\xdf\x10\xff\x66\xe0\x1c\xc5\xfc\xf4\x3c\x0a\x02\xd8\x5a\x9b\xc7\x0e\x02\xdd\x40\xc6\x1c\x9a\xef\xae\xce\x21\x32\xf1\x70\xe5\x14\x23\x55\x89\xe1\xd6\x22\xe5\x0e\xad\x9d\x64\x98\xa1\x2b\x97\x39\xff\x08\x06\xef\x27\xb5\x36\x79\x47\xa4\xf2\xc0\xa5\xca\x97\xcc\x43\x63\x79\xbf\xee\x26\xac\xc0\xa4\xd2\x91\x33\x51\xd0\xdc\x7c\xde\x36\xf6\xc7\x5b\x57\x67\xcd\x7c\xdf\xf1\xee\x89\x5e\xb4\x70\xb1\x72\x48\x1c\x6b\xd0\xf9\x01\x44\xd9\x85\x44\x5a\xae\xac\xad\x63\xa9\x66\x62\xbe\xdb\x65\xf2\x9f\x98\x5b\x94\x45\x31\x55\xfa\x15\x30\x28\xda\x90\x83\x98\xc4\x7f\x9a\xe5\xa4\x56\x21\xd0\x4f\x37\xac\x58\xb5\x7c\x93\x04\xbe\x31\x91\x9b\x93\xa3\xb1\x9f\x3e\x80\xed\x11\x1a\x9d\x57\x15\xc4\x63\xa8\xd6\x48\xee\xe2\x47\x71\xb5\xcf\x58\x37\x62\xfa\x53\x3b\x29\x16\xb5\xb9\x23\x4e\xf9\xd7\x64\x7c\x7a\x7c\xec\xc2\x12\x67\x7c\xee\x54\xdf\x01\xd7\xc1\x34\xac\xba\xc8\x18\x2e\x8d\xc6\x7d\xbf\x57\xf1\x57\x37\x9f\x58\x51\x68\xd3\x27\xc4\x49\x74\x02\x1a\xf4\x3e\x8c\x90\x23\x1d\xf6\x0f\x46\xc6\xce\x67\x0e\x77\x40\xae\xd6\xcc\x75\x7d\x3e\x90\xe3\x0a\x0d\xd5\xf2\x9e\x71\xfe\xee\x15\x39\xcb\xa8\xf1\xf4\x40\x41\xb8\x4a\x19\xdb\xf4\xe0\x5d\xd5\xab\x18\x97\x92\x09\xc2\x47\x27\x7b\xb5\xd8\x9f\xfd\xaa\xb5\xf1\x32\xdf\xed\xb2\x2f\xa9\x39\x57\x35\x23\x3f\x69\x86\x0f\x8a\x82\x19\x99\xcd\x07\x65\x9f\xb2\xa5\xfb\x4c\x19\x6c\x3f\x6c\x78\xf5\xa9\x9c\x06\xbf\x26\x74\x20\xa4\x48\x09\x8c\x9c\x50\xa0\x26\xe5\xe8\x92\xd6\x75\x7e\xf1\xff\x51\xf7\xf7\xcd\x8d\xe3\xc8\x9e\x28\xfc\xbf\x3e\x85\xcc\x67\x42\x4d\x8c\x61\x96\x3d\x67\x9f\xbb\x7b\xe5\x66\x7b\x5d\x2e\x57\xb7\x4f\x57\xd9\xb5\xb6\xab\x7b\x3a\x34\x5a\x0d\x2d\x41\x16\xa6\x24\x52\x03\x42\x76\x79\x6c\x7e\xf7\x1b\x48\xbc\x93\x90\x44\xb9\xea\xcc\xde\x1b\xe1\x08\x53\x24\x90\x78\x07\x32\x13\x99\xbf\x24\xe6\x83\x79\x03\xe1\xa8\x78\x36\xfe\xe2\x7c\x82\xdf\x08\x37\x54\x56\xb9\x4d\x83\xd0\x71\xcc\xd2\x71\x91\x97\xc5\x9c\x20\x59\xbe\x92\xcd\x40\x60\x10\x5c\x32\xf4\x50\xf7\x71\x46\xe7\xa4\xab\xc4\x2e\x9a\xdf\x4b\xe3\xb3\x7e\x37\xda\xd7\x11\xcf\x40\x1c\xad\xb0\xda\x41\x03\xee\x5a\xca\x63\x35\xdf\x3c\x3b\x24\xd8\x14\x1c\xee\xde\xec\x30\xc1\x29\xbc\xf9\xc1\x36\x4c\x83\xfa\x24\xb0\x14\xf4\x42\x3c\x89\x37\xe4\xcf\x60\xa8\xfb\x3c\x59\xd2\x87\x82\xff\x62\x43\xce\x55\xa8\xaa\xec\xa2\xfd\xea\x36\xb0\xb6\x89\x10\x04\x3b\x97\x7b\x3b\x55\xe3\x23\xf6\xa3\x91\x03\x4f\x7f\x1a\x33\x0b\x46\x80\xa9\xfc\x88\x0b\x74\x52\x78\x41\xd0\x6f\xbe\xa9\x48\x9c\xa5\x75\x67\xf2\xe2\x84\xf7\x0b\xe9\x4c\x1e\xae\x4a\x3d\x03\x3d\xe1\x7d\x2a\x33\xe0\x0c\x9d\x64\x5e\xf5\x4e\x1b\x51\x1c\xad\xfe\x3f\x47\x50\x21\xf1\x5b\x5a\x67\x64\xea\xe2\xcf\x02\xc9\x30\xc0\xb5\x69\xa4\xd0\xb6\x9e\x36\xe8\x23\xed\xf5\x0a\x5b\xea\x95\x27\xe7\xef\x49\x47\x1b\x83\x13\x61\x6d\x2d\x4b\xc3\x64\x44\x67\x59\xfe\x03\xef\xaa\xe3\xbf\x2b\xfd\xe0\xba\x3f\x44\xfb\x6c\x3f\xfa\xa1\x7b\x47\xc6\xd9\xaa\x24\xdd\xa7\x62\xc5\xba\xd9\x72\xd9\x9d\x65\xa5\x48\x3e\xa5\x39\x2d\x67\x64\xd2\xb5\xfa\x0c\xb1\x1c\x68\xce\x8b\x2e\xe5\x65\x77\x4a\x59\xc9\xe5\xea\x48\xba\xb7\x85\x25\x9f\xeb\x12\x8a\xbc\x3b\x01\x5f\x3f\x68\x99\x4c\x5a\x76\x27\x2b\x26\x4d\x3f\x2d\x5d\x2c\x0a\xef\x8e\xb3\xbc\x3b\xce\xe6\xf3\xee\xdf\xe1\x5e\x28\x46\x7f\x17\x14\xf8\x8c\x74\xff\x6e\xe7\xeb\xdf\xbb\x72\x6f\xe9\x2e\xb3\xb2\x14\x95\x2b\x64\x0a\xb8\x0a\x7d\xe3\xc0\xde\xbd\xb1\x38\x77\x7f\xef\xce\x8a\xe2\x4b\x99\x44\xa8\xaa\x49\xa7\x47\x78\xe5\x9e\x3d\x2b\x71\xf6\xac\x0e\x0e\x04\x83\x5f\xa4\x31\x05\x7c\x38\x65\x85\x27\xf6\x12\xe5\x41\xe8\x3c\x0e\xd8\x50\x0e\x03\xa8\xbc\x8d\xb6\xc7\x9c\x46\xe0\xab\x12\xab\x6d\x39\x4d\x53\x26\xf2\x1a\x8f\x95\xc0\xbe\x9c\xc3\xe5\x71\x47\x48\xce\x95\x34\x93\x38\x57\x27\xf8\x1c\xcd\xdd\xab\x99\xda\xfd\x9f\x0e\x03\xb5\x97\xf5\x7a\x7b\x1c\x05\xa7\xc1\x65\xc1\x67\xa2\xeb\x15\xeb\x02\x1d\xe7\x4f\x86\xa4\x7b\x31\x85\xb1\x98\xd0\x89\x4a\xe6\xa4\xc2\xc0\x37\x75\xa1\x31\x30\x5a\x77\xa4\x0b\x73\x67\xd2\xbd\x7b\xea\xca\x06\x0b\xfa\x9c\xad\x48\x77\xca\x8a\x85\x33\x17\x54\x24\x4b\x50\x06\x39\xa1\x2c\x30\x10\x80\x4c\xb6\x32\xbc\xe8\xde\xad\xee\xee\xe6\x24\x71\x3d\x14\xbe\x34\x64\xed\x94\x34\x19\x64\xd1\x41\xea\x9a\x51\x24\xb6\x9c\x83\x16\xc2\x73\x25\xc7\x28\xa7\x4c\x1a\x74\xca\xcc\x86\x9d\x32\xa1\xa5\x62\x1f\x26\x27\xc5\xa0\x04\x76\x6d\x98\x6a\x0f\xa2\xbe\xfb\xca\x68\x7e\x62\x83\x7c\x88\xac\xf7\xbb\x69\xc1\x99\xcb\xfd\x6d\xb5\xce\x11\x63\x0e\xdc\x4d\x0d\x9e\x7f\xa4\xb2\x7e\xca\xb8\x38\x30\x05\x8f\x38\xe0\x4e\x08\xd2\x5c\xe2\x20\xc8\x40\x8b\x21\x5b\xab\x63\xef\x1e\xc4\x0d\x93\xa9\x94\x69\x8d\x8f\x36\xf2\x26\x2e\xc2\x29\xe0\x26\x45\x81\x91\xae\x9a\x5b\x75\x08\x7c\xc1\xdd\x69\x51\x67\xd5\xeb\x65\xc9\xe9\xa7\x4f\xa3\xb3\xdb\xeb\x0f\x23\x65\x92\xfc\xe9\xfa\xea\xd3\x4d\xaf\x17\x7b\x95\xa4\x79\x77\xf5\xf2\xa2\xb8\x5e\x1f\x62\x22\x5e\xd5\xda\x53\x47\xd4\x30\x08\x7c\xd6\x94\xce\x0f\x13\x5a\xa9\xe6\x85\x7c\x71\x50\x9d\x3c\x0a\x74\x50\xbb\xda\x39\x1d\xda\xbe\x8a\x4e\xfc\xd3\xd6\xf5\x74\xf2\xa0\xca\xce\xc4\x5b\xf7\x60\xad\x49\xa4\xe0\x1d\xe2\xcb\xa2\x24\x20\x67\x7a\x37\xfc\x2f\x2f\x3c\xe4\x9d\x24\x84\xbd\x75\xc2\xe8\x92\x15\x0b\x5a\x92\x94\x24\x63\xc0\xea\xf4\x2c\xb8\xa7\xf1\x1e\x6f\x1a\x3d\x6b\x4f\x02\xd2\xe1\x01\x19\x0d\x84\xaf\xc8\x9e\x14\xd2\xd9\xc0\xdd\x41\xae\xeb\xe7\x35\x69\xdc\x7f\x70\xe4\xc3\x6c\x28\x16\x3e\x80\xb3\x91\xc7\x05\xa0\x69\x48\x55\xe3\xa0\x18\xba\xfd\xfb\xc9\x62\xde\xd8\x0b\xf0\x74\x40\x86\xc7\xcc\xc0\x87\x1c\x6b\x51\x82\x69\x8f\x76\x8d\x87\x68\x0c\xde\xd2\x34\xe5\x56\xb3\x2a\xeb\xac\xa1\xfc\x4a\xbf\xa2\x14\x31\xc9\xea\xd2\x5a\x55\x3e\x2a\x45\xba\xb9\x64\x79\x96\x05\xf4\x73\x85\x0b\x56\xf6\x43\x8e\x35\x8f\x59\xf9\xb9\x24\x93\xfe\xde\x91\xd6\x93\xc6\x54\x41\x0d\x9e\x88\xd6\xc9\x47\xd4\xe7\x00\xff\xa3\xad\xb2\x75\xdd\xb0\x01\x1c\x2c\x50\x9f\xa4\x05\x7e\xb6\xc6\x7d\x7d\x82\xb5\x41\x5e\xbf\x70\x2a\xfa\xce\x17\xb0\x44\x21\xcc\xc5\xf8\xd3\xfd\x00\x46\xbe\xaa\x9c\x64\x91\xd1\xdc\xb4\x48\x46\xbb\x63\x2e\x4f\x28\x91\xcf\xa4\xa1\x60\x65\x1a\xfc\x5c\x55\x98\xa3\x6a\xe4\xa3\x08\x2d\xc2\x96\xca\x20\x26\xfa\x56\xe0\x71\xe3\x9d\x89\x26\xea\x51\x74\x53\xf4\x1b\x79\x2a\x7d\x73\xe0\xbe\x54\x41\x11\xe5\x97\x0a\xdb\xad\xbe\x1f\x80\xe3\xc3\x39\x60\x9f\xe8\x1e\xa4\x8d\x58\xd3\x6e\x68\xc3\xfd\x7d\x80\x76\x11\xf2\xb4\x38\x55\x04\xe7\x62\x4c\x8c\x0d\x1c\x80\x35\x02\x3d\x3a\x2e\x6c\x5e\x30\x02\x15\xdf\x78\x4a\x06\x85\x3c\x63\x9c\x80\x9a\x98\xa5\x77\xd2\x18\x3d\x47\x66\x86\xf7\x7a\x7b\x34\x66\x98\xa3\x63\x64\x67\x78\x0e\xed\xb3\xd0\x0e\x0a\x31\xca\x84\x19\xb1\xc7\x66\xf2\x8f\x82\xe6\x40\x1d\x80\x82\xb4\x7b\x30\xb5\x28\x4d\x9e\xb3\x4b\xff\x01\xfb\x5e\x2a\xfd\x7b\x13\x46\x3f\x7a\x13\xd9\xf0\xfb\xd1\x2c\x2b\x67\x11\x5e\xb1\xb9\x0c\x1c\x1d\x44\x1e\xaa\x6f\xc2\x6b\xed\x96\x2b\xe9\x56\x5d\x73\xa1\x31\xb5\x9d\xac\x77\x93\x96\x67\xe5\x65\x3a\x72\x9c\x8b\x2f\x77\x76\x2e\xd6\xbe\xab\x5b\x42\x40\xb5\xf1\xc5\x7d\x5d\xac\x61\xd7\xaa\x52\xcf\x43\xe2\x69\x58\xa0\x68\x65\xa0\x4d\x1c\x17\x15\x96\x72\xf7\xd7\x7f\x96\xd2\x41\x91\x55\xc6\x95\xc6\xba\x84\xae\x37\x3c\x83\x2b\x00\x13\xb5\xb5\x41\xae\x63\xac\xa7\x15\xcf\xdd\x30\x45\xcb\xb1\xba\x53\x31\x48\xb3\x7b\x47\x20\x79\xf7\x7a\x2e\x8c\x07\xb5\xb8\x4f\x8e\x22\xcd\xc3\x87\xa6\xbe\x15\x9e\xd3\xee\x35\x91\xf6\x73\x5c\x6a\x6e\x6a\x06\x18\x30\xe7\xff\x5c\x65\x73\x40\x3a\xf2\x10\xe7\x1c\xb4\x8e\x5a\x64\xec\x7c\x87\x09\xc3\x1d\x05\xf7\xee\x11\xc7\x94\xbf\xf6\x4e\x71\xf4\xd6\x3b\xaf\x6f\x70\x3a\xdf\xe6\x84\xdd\x98\x96\x75\x5b\xd9\x30\x82\xb2\x60\x34\x34\x3a\x9d\xa7\x95\xe1\x29\xe0\x42\xd7\x0e\x78\x1f\xc2\xeb\x84\x24\xcb\x62\x19\xa3\xc4\xc7\x7d\xd3\x90\x6a\xe6\xbc\xe9\x13\x03\x4e\x23\x4d\x73\xfb\xc4\x83\x8a\xe3\x55\x85\x49\xc8\xba\x21\xa8\x1f\x6e\x00\x18\x34\x5f\x0d\x8a\xb5\xa8\x2a\xa2\x2e\x35\x50\x47\x33\x3d\x1b\xf2\x82\xa8\x56\x0d\x4b\x25\x70\xcd\xa1\x22\x49\xdd\x88\x84\x64\x52\x47\xa6\x14\xa7\x51\x40\x12\xa1\x01\x59\x87\x91\x71\x71\x9f\xd3\x7f\x11\xa6\xac\xcb\x59\x29\xe3\x12\x62\xe9\x7c\xc0\xed\x99\x65\xd7\xb6\xe0\xb5\x00\x30\x47\x12\x2e\x3b\xa5\x35\xe4\x67\x69\x06\xe8\x16\x32\x1e\x56\xa9\xc4\x90\x4c\xe9\x8c\x57\x6e\x78\x2d\xb0\xf6\xa8\x6a\x6d\x49\x61\x6d\x35\x2f\xc5\x82\xb6\xa9\x01\x48\xcf\x76\xa1\x7e\x07\xc3\x50\x78\xce\xbf\xf8\xb8\x9f\x26\x3c\x67\x14\xe1\x9a\x2b\x86\xe9\x8d\x15\xb8\x63\xe0\x79\x2a\x76\x91\x15\xc2\x63\x07\x85\x26\x17\x87\xfc\xbc\xd7\x9b\x0b\xae\x50\xb1\x7d\x53\x00\xb1\x5e\x25\x10\x13\xf9\x6a\x1a\xcf\xd1\xc9\x2a\x29\x57\x77\x25\x67\xf1\xdc\x86\xb0\xee\xaf\x3a\x63\xb9\xab\xc1\xa1\x97\x0f\xe6\x43\x3c\xd5\x88\x6c\xee\x07\xbc\x42\x1d\xba\x9f\x46\xfd\x3e\x84\xf8\xed\x47\xfb\x63\xb3\x6b\xef\x53\x83\xf0\x9b\xe1\xe8\x20\x42\xa2\x63\x37\x43\xbf\x85\x2d\x80\xd3\xe7\x0a\x07\x58\x98\x15\x70\x30\x4e\xf8\x38\x2e\x0a\x70\x2d\xf0\xd3\x39\x88\x17\xf5\x08\x28\x01\x23\x28\x19\xeb\x4e\x7a\x9c\x33\x5f\xb7\x98\xa5\x85\x8b\x4d\x29\x0e\x04\x07\x0b\xbd\xa1\x6a\x96\xca\xdc\x79\x4c\x5d\x6f\xe7\xdc\xaa\x5e\x3e\xb1\xe2\x9e\x65\x8b\x45\xc6\xe9\xd8\x51\x7c\x95\xdd\xbb\xa7\xee\xe7\xeb\x0f\xdd\x71\x96\xe7\x05\xef\xde\x91\x2e\xa8\x53\x1e\x29\x9f\x51\xc7\x03\x3a\xe9\x7e\x9a\x93\xac\x84\xaf\xa0\x29\x91\x1e\xd1\xb9\xbc\x52\x2e\x39\xc9\xc0\x1b\x9a\xa6\x19\xe8\x2a\x29\x78\x14\xa4\xb4\x72\xbb\xc8\x3d\x63\xd6\x41\x9d\x63\x9a\x1e\xc2\x82\x66\xeb\x71\xf4\x18\x92\x82\x4d\x88\x8f\xcc\xf7\xf7\x2b\x93\x9d\x23\xde\xcc\xdb\xeb\xd1\xfd\x7d\xc3\xcb\xa7\x69\x4a\x2b\x75\x59\xf5\xe6\x6f\xc9\x9b\x7b\xcb\xcc\x96\xcd\x3b\x22\x87\xe1\xcc\xc5\xf2\x90\x88\xc9\x2c\x80\x98\xcc\xd4\x5e\x7f\x88\xe9\xfe\x11\xb2\xac\xa4\xd5\xa9\xe8\xa5\x50\x20\x04\x90\x58\x9d\x3c\x2d\x02\x2a\x9b\x95\xdf\x41\xc4\x13\xba\x42\x17\x0e\x71\xcc\xd2\xe7\x0a\x0d\xf2\x61\xfa\x9c\x49\x0c\xbb\x0a\xe7\x29\x43\x5a\x5f\x9b\x07\x64\x49\xb5\x93\xca\x7e\xc8\x07\xc5\xb0\xd3\x20\x9d\xf5\x7a\x71\x06\x24\xb3\x0a\x02\x1d\x0c\x8a\xe1\xcb\x8b\x2e\x42\xc1\xe4\x29\x8c\xc2\x4a\x1a\x6a\x5a\x8b\xa8\x0c\x61\x91\x3e\x65\x8e\xb8\x35\x77\x22\x17\x07\x6c\x7d\xe3\x08\x0c\x14\xc1\xbd\x46\x3c\x0c\x0e\x87\x68\x7d\x7c\x53\x09\x40\xf3\x46\xc5\x5c\xdf\xcc\x24\xe8\xc4\x0e\x6b\xa2\xae\x8b\xb6\xa5\x5e\xd0\xaf\x34\x2f\xdf\x18\x77\xc7\x25\x2b\xbe\x3e\xb5\xcd\x35\x2e\x72\x9e\xd1\x9c\xb0\x96\xd9\xc6\xc5\xb2\x4d\xa2\x85\x60\xeb\xb6\xa6\xa3\xe5\x01\x11\xeb\xae\x6d\x65\xa5\xd1\x67\xeb\x96\x89\x4a\x88\x8d\xa9\x6d\x7f\x5b\x58\xd8\x96\x19\xa0\x3e\x2d\x3b\xce\x1b\xd3\xdd\xf2\x8c\x0b\x46\x46\xbb\x4d\x06\xa9\x32\x56\xb7\xf1\x1b\xe1\x91\xfc\x2e\x5b\x3e\xb5\xea\x30\x95\x9e\xe4\xab\x05\x69\xd7\xc5\x2a\xc7\xc1\x4e\x93\xb3\x80\x60\x54\xbb\xd0\x5f\xc8\xa3\x68\xb4\x7b\xcd\xa4\x2a\x6e\xa4\x3a\x4e\xa1\x69\xb4\xee\x08\x29\x7c\xb7\x4d\xae\x94\x7c\x2d\x67\x01\xf9\xca\xdf\xb0\xf2\x61\x0d\xd2\x94\x93\x50\x6c\x53\x07\xc5\xb4\x15\x41\x63\xb2\xdf\x1e\xd3\x09\x3f\xe0\x7b\xfc\x84\xef\xf0\x08\x3f\xe2\x73\xfc\xb5\x26\x72\x84\x95\xbb\x04\x47\x57\x6a\xe6\x3e\xdb\x41\xe9\xef\x1d\xe2\xa0\x82\xb7\xcb\x35\x73\x20\x76\xd5\xb5\x24\x0d\x26\xd9\x8e\xb4\x6b\xf9\x36\x96\xa1\xae\x1f\x9f\x3e\x89\x41\xfa\x28\x06\xae\x65\x31\xac\x55\x13\xce\xf4\xc6\xbb\x33\xfd\xbc\x15\x7d\xb9\x51\xb7\x22\x48\x5b\x12\x54\x9b\x7a\x2b\x9a\x45\x2b\x9a\xb4\x3c\x97\xfb\x7f\x2b\x9a\x59\x2b\x9a\xa7\xf2\x90\x68\x45\xb1\x6c\x45\xf1\x32\x13\xe2\xe5\x6e\x74\x9d\x3c\x9b\x6b\xdb\x9a\xe2\xe9\x46\x3a\x1f\xe5\xc6\xb7\x5b\x25\xdd\x4c\x1b\xa9\x33\xb2\x28\x1e\xc8\x69\xdb\x85\x56\x26\x3a\xc3\x46\xaa\xab\x9c\xfe\xf3\x6d\xfb\xda\xca\xe4\x5b\xe6\xd3\x6e\x1d\xa0\xd2\x6f\x59\xa8\x96\x8f\x68\x45\x76\xd5\x72\x52\x19\x66\xa3\x15\xd5\x79\xfb\xc9\xff\x49\x1e\x2b\xad\xc8\x8e\x5b\x91\x95\x1f\x76\xa1\x3b\x6d\xb9\x09\x32\xb2\xd3\x16\x3e\x6b\x45\xb6\x81\x5a\xd9\x9a\x7a\x23\xe7\xe6\xde\x86\xfc\xbf\x68\x26\xab\x55\x19\x93\x96\x1d\xa3\x39\xb1\x56\x44\x97\xad\x88\x9e\x3b\x4c\x51\x2b\xb2\x8b\x56\x64\x47\x3b\x9f\x60\x0f\xed\xe8\x82\xcd\x40\xce\xdf\x17\x6d\xfb\xf6\x21\xb1\x59\xb6\xcc\x67\xcb\x58\xb6\xa2\x7c\xdf\xaa\xc6\x6a\x3f\xdd\xb9\x9f\x9f\x5a\x51\x97\x7a\x51\x39\xe7\x6e\x34\x7f\xda\x8a\xfe\x5d\xbb\xe9\xa1\x99\xd8\x56\x34\x47\xad\x68\x7e\x92\x9c\xee\xce\x33\xe4\xd1\xa1\xbe\x9e\xb3\xbc\xbe\xf9\xed\x53\x4b\x82\xe7\xad\xaa\x5b\xe4\xa0\x82\x57\xfe\x47\xad\x49\xfb\xd9\x36\x96\x20\xdd\x44\x5b\x52\xfe\xaa\xbc\x4a\x2b\xb8\x4f\xdb\xa8\x63\xf0\xc4\xee\xf6\x9a\x86\xb6\x22\x43\x53\xa6\x6e\x7d\x2f\xe6\xdc\x7f\x15\x38\x93\x1e\xbb\x69\x9a\x66\xfa\x06\xff\xb0\xe3\xdc\x1b\x69\x2f\xda\xc2\xb1\x99\xb1\x6f\x25\xb4\x63\xa4\x0d\xc3\xa3\x34\x4d\xcb\x5e\xcf\xf0\xdb\xda\x23\xb9\x40\x10\xf8\xd0\x41\x2b\x53\x3d\x63\x41\xf0\x03\x1f\xa1\x76\x0d\xfa\xab\x00\xfd\x0c\xf5\x7a\xd9\x06\xfa\x07\x47\x7f\x0e\x7e\x96\x30\xec\xd2\x7c\x8d\xc6\xf9\xa0\x1c\xe2\x5c\xc2\xfc\x48\xf5\xdb\x5c\xd7\x6f\xde\x29\x1f\x29\x1f\xcf\xe2\x12\x3d\x8f\xb3\x92\x18\x3f\xd9\x3e\xfc\x52\xce\xb1\x7d\xcd\xbe\xcb\x9a\xc3\x27\xa5\xb2\x72\x3e\x49\xe8\x4c\x72\xa6\xab\x80\xf0\xa1\x4a\x2b\xb5\x29\x7d\xad\xba\x1b\xa7\xda\x15\x08\x4f\x0d\x1a\x10\x9e\xa5\x1f\x33\x3e\x4b\x16\x34\x8f\xc7\x78\x8a\xf0\x24\x3d\x3c\x9e\xfc\x38\x3b\x9e\x68\xad\xe2\x32\x25\x71\x31\x98\x0c\x71\x36\x98\xd8\xa6\x2c\x75\x53\x96\x95\xa9\x8a\xc8\x2f\x4b\x36\x1d\xdc\xaf\x8b\x4c\x76\x08\x4f\x0a\x6f\x60\xfa\x87\x32\xeb\x24\xe3\xc4\x6b\xde\x3d\xe1\xb7\x74\x41\x62\x04\x31\x48\xd5\x33\xea\x28\x7a\x3a\xe5\x61\x55\xa9\x9b\x59\x88\xfb\x21\x56\xe5\xa4\x7f\x08\x31\x77\xfa\x47\x58\x75\x6f\xff\x2f\x58\x76\x6d\xff\x3f\xb0\xec\xc8\xfe\x7f\xc3\xd0\x4b\xfd\xff\x3f\x96\xfa\x97\xfe\xff\x85\x0d\x68\xd0\x7f\x37\x2b\xa0\xff\x3f\x30\x00\x86\xf6\xff\x6f\x2c\xea\xd7\x3f\x3a\xac\x1a\xe6\x07\x4a\x5b\x7b\x60\x10\x7a\xd9\x4f\x87\xe8\x20\x66\x3f\x1e\x6e\x57\x20\x5a\xc5\x5b\x60\x65\xd7\x50\xad\xbf\xa7\x4a\xd1\xe8\x83\x9a\x4a\x82\xad\xcb\xdd\xdc\x8f\x85\xe2\x81\x4a\x17\x70\x1b\x92\x4d\x5e\x48\xd7\x23\x68\xf5\x7a\x79\x7d\x5e\x10\x63\x41\x4a\x12\x51\xbb\xd8\x5e\x78\x38\xfb\x8c\xa8\x21\x55\xe8\x00\x8d\xe2\xb9\x29\xde\xc2\x9b\x4a\x1d\x33\x96\xb1\xc9\x01\x01\x8b\x1a\x55\x38\x47\xe8\xa7\xf4\xd0\x6c\x1d\x83\x72\xd8\x61\xae\x65\x3e\x9d\xc6\x7e\xc5\xb9\xbc\x09\xc8\x52\x6d\xc6\x81\x30\x03\x73\xa7\x42\xe6\xc9\x10\xc4\x72\x50\xea\xf9\x83\x83\xf2\xa7\xf4\xf0\x18\x65\x83\x72\x98\x92\x58\xfc\x53\xb5\xaf\xb4\xf1\x6a\xa3\x17\x38\x42\x82\x3a\x74\x80\x4c\x8b\x99\xd8\xf2\x14\x79\x63\xf5\xca\xbb\x7a\xb2\x16\xd3\xee\xbb\x8c\x13\x94\x81\x59\x9b\x78\x8c\xb9\xb3\x5c\x9a\xd9\xe5\x85\x1a\xe8\xf5\x21\x8a\x74\x06\xf7\x4e\x4e\x2a\xcc\x91\x3a\xe4\xac\x3d\x82\xaf\xc2\x57\x38\x8c\x78\x85\x7a\xbd\x68\x34\x8a\xf6\xd2\x54\x5f\xaf\xd1\xfc\x3e\x3e\xc4\x7f\x41\xbd\x5e\x9c\x0d\x56\xc3\x94\x9d\x90\x98\x0f\x56\xba\xe5\x7d\x0e\x0e\x90\xc6\x5f\x06\x26\x1d\x3f\x19\x0c\xa5\x56\xdf\x3c\xb5\x5b\x39\x9e\xba\x0b\x0f\x02\xa9\x9d\x10\xe7\x6d\x2e\xf0\x5b\xe0\xc8\x6f\x5d\x30\x79\xf2\xfe\xf3\x25\x60\xc3\x8d\x3e\x5d\x5f\xdd\x5e\xdd\xfe\xf1\xe9\x7c\x74\xfe\xd7\xdb\xf3\xcb\x9b\x8b\xab\xcb\x9b\x5e\x8f\x24\xe7\x97\xbf\x25\xf0\xe6\x9d\x4d\x72\x93\xbc\x57\x74\x8d\x1d\x86\xc7\x63\x50\x52\xc6\x3a\x85\x1d\x18\xfc\xac\xc3\xfd\xf4\x9f\xc7\x45\x3e\xa5\xf7\x2b\xc3\x79\xb8\x7c\xc8\x11\x7e\x64\xd4\xf8\x33\xc9\x48\x0e\x21\x35\x9a\x36\x0e\x52\x06\x4b\xea\x6e\x36\x08\x58\x2e\x27\x81\x03\x27\xa5\x8c\xb3\x07\x7c\x46\xcb\x21\x42\x55\x85\xa5\x96\x97\x94\xdf\xa7\x6e\x8a\x1a\xfb\x4e\x75\xcb\xbf\x53\xad\xf2\xef\x52\x9f\x76\x7c\xa0\x55\x18\xbb\xc7\x85\xaf\x42\xde\x14\xbd\x00\x98\xd9\x03\xb8\x3b\x00\x5f\x48\x7f\xde\x6f\x9d\xda\xee\xc9\xd7\x8c\x00\xaa\xdd\x33\xd4\xe5\x1e\x5c\xa5\x3a\x7e\x4f\xa8\xb6\x9b\xbb\x96\x1f\x4e\xb2\xe6\x4d\x20\x87\x58\xb2\x16\x4d\x9b\x5b\xf0\x88\x30\x33\xce\x71\x34\x1a\x31\x92\x95\x45\x3e\x7a\xa4\x7c\x36\x02\xf2\x23\xb8\xa7\xce\x47\xa3\x08\xab\x50\x26\xc4\x1f\xf0\x0a\x10\xe0\x55\x70\xe5\xcf\xb9\xb1\xd9\x98\x7c\xbe\xfe\x70\xae\xfd\x19\xa4\x17\xa3\xd3\x46\xc7\x00\x57\x21\x1f\x37\x93\xe9\x83\x4d\x53\x6f\xb8\xf8\xbc\xa3\xe5\x32\xe3\xe3\x99\x8e\x89\x85\xa4\x6d\xec\x9e\xc1\xff\xec\x88\x66\x57\x15\xa9\x09\x24\x29\x6d\xc4\x18\xc0\x62\x11\xcb\x69\x4d\xe2\x28\x2b\x9f\xf2\x71\x54\xf3\x69\x63\xc9\x5d\x36\xfe\x72\xb7\x62\x39\x61\xc6\x73\x38\x8e\x94\x87\x47\x24\xe3\x15\x82\x9b\x2c\xaa\x51\x9b\x42\x78\x0f\xcf\x66\x34\x48\x8b\x25\x23\x31\x29\xa1\xd7\x00\xd0\x49\xd1\x94\x14\x8b\x5c\x3b\x88\x60\xaa\x03\x82\x73\x87\xd1\x28\xda\x2c\x05\x7b\xc3\x68\x97\xc2\xd0\xab\x5a\x5b\x36\x86\xf4\x7a\x61\x9c\x23\xa9\xc2\xb6\x6c\x89\x7a\xa1\x58\x03\x52\x3f\x82\x7b\xbd\xe6\xa9\x6c\xf2\x9a\x13\x59\x70\x27\xf6\x97\x99\x1a\xe2\x75\xab\x33\xaf\x76\xdd\xe6\xb1\x8d\xf7\x73\xba\x58\x88\x2d\x80\x4c\x09\x23\xf9\x9a\xeb\x4e\x71\xe6\xed\x68\xcd\x56\x0b\x5e\xb2\x6e\xbb\xc0\xb4\xd6\xeb\x30\xb6\x76\xdb\xc8\x5c\x4b\x14\x2f\xbe\xab\xd2\xee\x44\x08\x17\xa9\x45\x69\xe2\xd2\xd4\x5a\xd4\x0b\x41\xf8\x1a\x94\x30\x92\x4d\xc4\x7a\xbd\xcd\xee\x6d\xef\x59\x0c\x2e\x19\x28\x1a\xe6\x22\x19\x17\xf9\x44\xfd\x90\xf8\xd8\x31\x14\xc9\xb3\xfb\xf7\x05\x43\x31\x45\x08\xd3\x8a\x38\x8a\xa5\x34\x0b\x47\xec\x28\xd3\x3c\x01\x15\x87\xb6\x18\x8f\xe3\x22\x7d\x56\xf9\x24\xe3\x42\x73\xca\x77\x8a\x00\x24\x2d\x16\x4a\x22\x55\xaf\x1a\x2f\xd5\x69\x2e\xbc\x48\xf4\x19\x24\x9a\x1b\x32\xd7\x85\x13\xfb\x8e\xe6\x04\xc5\x03\x9e\xbc\xa3\x8c\x3f\xa9\xe4\x0e\x8e\x6a\x02\x08\x37\xb5\xf7\x3c\x39\xbb\xba\xbc\xb9\x3d\xbd\xbc\x1d\xdd\x9e\xfe\x8c\x86\x00\xf7\xe4\xe0\xee\x35\x5a\x23\xdd\x1d\xd4\x38\xe1\x96\x28\x7a\x15\xa6\xe5\x2d\x5b\xf1\xd9\x53\x3d\xec\xa9\x25\xd5\x3c\x55\x35\xd4\x4c\x3d\x10\x9d\x99\x25\x62\x1f\x11\x75\xfd\x5d\x6c\x9a\x7a\xdf\x6f\x1a\x8c\xa7\x3a\x47\x12\xed\x93\x63\xa0\x96\x4d\x26\x57\x8a\x8f\xd0\x98\x79\x72\x6f\x32\x4a\x49\x4d\xce\x82\xe2\xa3\x0a\x4f\xe8\xe4\x73\xfe\xb8\x73\x69\xf2\xb2\xe4\x35\x05\xae\xfd\x18\x76\xbf\x55\xf2\xc8\xff\x40\x1d\x69\x89\x34\xa3\x25\x40\x4b\xe5\x6b\x1c\x66\xa0\x22\x4c\x70\xd9\x83\x3c\xf9\x7c\xf9\xeb\xe5\xd5\xef\xc0\xae\x7e\x3a\xbf\xbe\xfd\x43\x4c\x88\x61\x00\x45\x40\x0f\xc7\xd9\x2c\xa3\xf9\x6d\x76\x5f\xbe\x2f\x18\x00\x69\x78\xa3\x93\x48\x44\xf3\x22\xa9\x85\x1e\x0d\x98\x7c\x66\x16\x7e\x4f\x4b\x6c\x6e\x40\x2f\x49\xa6\x24\xfc\xf3\x5a\x4a\xde\x76\xe2\x2d\x1d\x41\x94\x26\xb4\xbc\x90\xf0\xdd\xf4\x5f\x42\x32\x41\x2f\x2f\xe2\xdd\x27\xcd\x9d\x01\x0a\x0a\x24\x77\x8b\xdf\x1c\xc6\x17\x73\x75\x64\xc9\x9c\xd6\x0a\xda\x06\x64\x2b\x14\xa0\x46\x81\x5c\xdb\xe5\x72\x87\xed\xbd\x6e\xe5\xb1\x93\x19\x72\x68\x7b\x6e\x63\xdc\x2e\xe6\x91\xb7\xcf\x85\xe2\x42\x6b\x2e\x61\x58\x8b\xb2\xb9\xd1\x5e\xf4\xb5\x18\xb1\x1a\x6b\xc4\xf8\xa1\xba\xbf\x06\x64\xd8\xeb\xed\xc5\x7b\x70\x52\xf8\xef\xdd\xcd\x28\x47\x9e\xbd\x59\xe1\xd8\x75\xca\x79\x2b\xed\x43\x22\xd4\x81\xd3\xc3\x89\xc4\x59\x78\x11\xdb\xdc\xa1\x64\xbb\x0c\xa5\xbc\xb7\x7c\xad\x21\x79\xf0\xe8\xfd\xfe\x56\x3c\x9b\x0c\xbb\xb6\x09\xd1\xff\xa7\xec\x7b\xb4\x8a\x7b\xb3\xa1\x4b\x80\x25\x19\xe3\x69\x87\xa8\x5b\xe7\x74\x09\xd6\xb4\xf2\x52\x3b\x7d\xc4\x44\x6b\x7b\xd2\xaf\x0e\x37\x40\xbc\x1b\xf5\x94\xb8\x56\x00\x29\x49\x4e\xdd\x65\x34\xd3\x08\x25\x53\x46\xc8\xbf\x48\x3c\x18\x22\x1c\x04\x65\x21\x8e\x2e\x71\x19\x9b\x18\xf1\xaf\x34\xb6\x9e\xe0\x3c\xbd\x8d\xc1\x01\x58\x05\xdb\x2a\xd2\x00\x5f\xcb\x4e\x58\xc0\xe9\xcb\xae\x09\x22\x8e\x05\xc3\x96\x6e\x08\xd9\x58\x80\x30\x03\x28\x32\x1c\x50\xee\x00\x91\x06\x60\x36\x94\x4b\x97\x38\xa5\x1d\xd3\xd2\x85\x44\x08\x51\xa4\xff\x92\xa6\x8d\x96\x9e\x98\x52\x6c\x2c\x1d\x96\xa6\x9e\x25\x36\x41\x95\xad\x3f\x0b\xb1\x0c\x2a\x29\xc3\xc4\x73\x01\x7d\xd0\x10\x99\x36\xd0\xad\xc1\x7e\x2b\xd2\xfc\xb8\xf8\x91\x4a\xb7\x2f\x3a\x8d\x99\xa4\x23\x15\x8c\xa7\xd0\x2b\x05\xc2\x05\xb6\x4a\x4a\x6d\x3b\x7b\x70\xe4\x87\x94\x73\x9c\x2d\xa1\x40\x19\x09\x28\x07\xdd\xbc\xce\x01\x30\x0b\x72\x44\xfb\x8d\x72\xa8\x17\x60\xce\x03\x9a\x3e\x38\xda\x4b\x81\x2a\x97\x54\x99\xa0\x6a\x53\xdf\xd5\x00\x5b\x74\x22\xb7\xdc\x07\x1f\x92\xc3\x21\xbe\x67\xc3\x1c\xb9\x44\x47\x2e\x9b\xd1\x34\xe5\x0f\xce\xcc\xbf\x0c\x7d\x0b\xff\xc3\x90\x17\xc0\x7f\x38\x69\xfe\xc3\xf1\x02\xd0\x63\x62\x82\x3f\xff\x78\xd8\xeb\xc5\x6c\x3f\xa5\x08\x8b\xda\xe7\xbd\x1e\xdf\x4b\xf9\x49\x68\x3d\xed\xa5\xa4\x0a\x79\x34\x4a\xe9\xca\x8b\xdd\xf7\xe8\x86\xa5\x7f\x65\xbb\x8e\x3a\xce\xe2\x51\x3e\x00\x48\xce\x01\x3c\x43\x98\xd8\xd2\xce\xf5\xcc\x58\x97\xe1\x10\x0f\xf2\xa1\xb7\x5a\xbe\x3a\xfa\x11\xe9\xd4\xa5\x7c\x8e\x2f\xc4\x5e\xf8\x60\xe4\x52\xe9\xbc\x55\xd7\x53\xbf\xbc\x5c\x39\x2a\x65\xed\x4e\xd5\x31\x5a\x87\xb9\xb9\x79\x93\xc2\xac\x45\x5d\x65\x7e\xea\xdc\xb8\xe3\xab\xc6\x5a\x00\x57\x6b\x03\x9e\xa7\x69\xee\x82\xe0\xa4\xcc\x85\x34\x31\xc0\xcc\x6b\xb4\x8b\xf6\x90\xb5\xdb\x8e\x3d\x05\xd2\xbd\x23\xb7\x27\x4f\xeb\x8e\xaa\x8b\x6c\x19\x37\xf7\x03\x7f\x1b\xa8\x10\x40\x4b\x5c\xd5\xf9\x1b\x63\x1e\x87\xe3\x78\x0c\x56\xec\x2c\x39\xff\xf8\xf6\xfc\x7a\x74\x7a\x7d\x7d\xfa\x07\x44\x95\x1b\xab\xd5\x59\x9e\xf2\x06\x07\xab\x40\x8c\x4d\xad\xbd\xba\xf8\x7b\xab\x5d\xe2\x4c\xc7\xd8\x1a\x44\x83\x61\x34\x4c\x6f\xe2\xb0\x47\xbc\x8c\x29\x89\x4b\xf7\x9b\x0b\xb6\xab\xbc\x6f\xa5\xe7\xc9\xa1\x14\xc5\x74\x4c\x07\xe5\x4d\x0b\x41\x92\x00\xb6\x44\x9e\x48\xe9\xcd\x1a\x21\xd2\xd6\x0e\x58\xa2\x43\x54\x49\x49\xfb\x2a\x9f\x3f\xc5\x10\x64\x23\xdb\x95\x86\x53\x9f\x83\xa3\x06\x3d\x10\x57\x9a\xd8\xdd\x8d\x85\x78\x18\x5c\x88\x87\xee\x42\x3c\x14\x1b\x4c\xe8\xd4\xf4\x8f\x47\x35\xd9\xf4\x19\xe9\x54\x0f\xae\x42\x08\x6c\x33\x24\xa5\xfb\x04\x61\xa3\x80\x60\x2f\x2f\xec\x27\x7a\xc2\x52\xda\x57\xfb\x50\x4a\xf7\x19\x3a\x26\x3f\xb2\x63\x94\x0f\x72\x45\x61\x98\x86\x7a\x80\xec\xef\x5b\x27\xee\x0a\x8f\xf5\xbd\x53\x18\x3b\x79\x64\x31\x9d\xf7\x8e\x20\x48\x99\xe8\xf3\x8b\x66\x16\x0f\x91\x4b\xdf\x35\xc5\x7e\x95\xd3\x1c\x41\x65\xf3\x83\x23\x84\xcd\x0e\x9a\x5b\x5f\x7f\x9a\xb2\x63\xfa\x53\x7a\x78\x4c\x25\xf8\x4b\xa8\xfe\x14\xb9\x17\x79\xd4\x1c\x23\xa2\x6e\xd9\x64\x02\x5b\x8d\x16\x6d\x6b\x15\x74\xa6\x45\x3d\xa5\x11\xa7\x64\x40\x3d\xc5\x79\xb5\xa3\x15\x48\x5c\x23\x37\xcb\x4a\xef\x73\xb9\x76\xba\xce\xb2\xf2\x03\x2d\x39\xc9\x09\x2b\xb5\x24\xf0\x3f\xe5\x95\xf0\x58\x49\xe1\x20\x41\x6f\x4c\x29\xe1\x77\x22\x19\x8d\x0c\x5e\x9d\x49\x21\x38\x18\xe6\xaf\x71\x04\x84\x73\xd8\x26\xa9\xc0\x81\x6e\xb2\x50\x04\xc0\x8d\x74\x4d\x86\x06\x59\xc5\xda\xad\x71\x46\x7b\x25\x17\x0a\x42\x32\x73\xe7\x26\xce\xd3\xc3\xe3\xfc\x47\x76\x9c\x6b\xc3\x02\xb5\xfa\xf4\x74\x8b\x73\x21\x5a\xa9\x2b\x45\x8a\x73\x09\x07\x5d\x79\xbb\x20\x04\xbb\x84\xda\x9e\x8a\xdd\x43\x3d\x87\x26\x8a\xdc\x17\x1b\x6c\xab\xdf\x41\xa5\xe2\x25\xc5\xac\x81\xbe\x58\x64\xcb\x90\x7e\xe2\x9b\xfa\xe0\x36\xf6\xfd\xa3\x9b\x75\x92\x57\xd9\x9a\xd1\x19\xd0\x61\x6a\xfa\x41\x7e\xab\x20\xae\x0f\x54\xef\xed\x13\x34\x7d\x4a\xe7\x3c\x18\xec\xf3\xdf\x53\xd7\x5a\xfd\x7a\x3d\xa6\xf1\xe6\x74\x55\x19\x81\x53\xe2\xbb\x56\xd0\xaf\x1a\xf4\x40\x73\x55\xef\xd9\x50\x31\x8e\xd8\x2e\x67\x3a\x64\x79\xfb\xb4\x2e\x56\x8e\x22\xb9\x58\xc7\x97\x20\xdb\xb0\xf5\x44\xe4\xf7\x2d\x44\xa6\x34\x0f\x8a\x82\xf7\x7a\x71\x7e\x43\x2f\x99\x02\x82\x75\x54\x25\x6c\xae\x1e\x79\x20\xec\x29\x54\xbf\xbb\xef\x55\x3f\x5a\x9e\xfb\x65\xd4\x8b\xd8\x5c\xc1\x2c\x0f\x56\xef\xe9\xfb\x55\xef\x34\x0f\x55\xee\xa9\x4d\xe5\x18\x99\xac\x3c\xe8\x53\x47\x41\xbb\x79\x75\x01\x5e\x0d\x4b\x49\xcc\x30\x37\x1b\xa0\x0d\xec\x25\x58\x87\x87\xe2\xcb\x9a\x98\x4c\x9b\xb5\x6d\xfc\xa7\xa3\x13\xee\x6a\xdb\xf8\x96\x88\x4c\x5b\xb7\x02\xee\xb8\x82\xc0\xe2\x07\xd5\x2b\x67\x4f\x17\x50\x49\xd0\xdc\xe2\x1c\xa4\xff\x02\x42\xc9\x16\x52\x4d\xb2\x66\xdd\x84\x99\xe6\x2e\x91\x4b\x17\xf4\x52\xe3\x50\x5c\xd6\xe0\x66\x40\xbc\x58\x14\x7b\xa9\xa2\x42\xf3\xf1\x7c\x35\x69\xf8\xf8\x3b\x62\xb5\xcb\x7e\x1d\x42\x9e\xb2\x60\xb5\xd5\x5e\xe3\x51\xbd\x5e\x52\x8d\x8c\x11\xe4\x73\x24\x12\x5f\xe3\x70\x78\x4c\xad\x77\xb7\xf1\xdf\xcd\x52\x32\xa0\x43\x5c\xa6\xae\xd8\x92\x21\xbc\xf2\x34\x1f\x19\xc2\x73\xf1\xc2\x38\xe0\xa0\xb8\x04\xc7\xf4\x69\x6c\xed\x0b\x2b\x63\x16\x07\x8d\x58\xe5\xf4\x9f\x81\xbe\x5b\xea\x50\x62\x63\xad\x05\x0b\xf4\xe0\x52\x75\x89\x0a\xaa\xcc\x67\xc5\xaa\x79\xdd\x0f\x8d\xd7\xdd\xeb\x18\x71\x81\x60\xa4\xc4\xd7\x34\x25\x27\x81\xd9\xc3\x01\x72\x73\x8d\xbc\x4e\xaa\xd0\xa6\xcf\x45\x5d\x10\xc2\x5f\xea\x92\xdc\x15\x36\xbe\x19\xf8\x19\x90\xb2\xfa\x8d\x81\x73\x59\x7e\xdd\x4b\x82\xc3\x3d\x11\x1f\xfa\x71\x4d\x9e\x22\x42\x84\x57\xbd\x44\xf3\x92\x30\x7e\xba\x46\x10\x3b\xb7\xf0\xf7\x0a\xc4\x48\xab\x13\xc3\xe9\x1f\x6d\xfa\x0a\x8b\x05\x24\x05\xab\x50\x47\x9c\x37\x64\x29\x18\x0e\x9b\xa9\x5c\x0b\xe0\xa4\x5b\xe2\xe6\x3d\xc4\x06\x67\x69\x59\x2c\xeb\xc5\x86\xfa\x89\x4e\xe3\x43\x57\x0a\x80\xd3\xd8\x68\x11\x9a\x22\xcf\xc1\x91\xbf\x79\xe8\x9e\x88\xc9\xc1\x11\x3e\x92\x51\x0a\x67\x74\xca\x9b\x65\xab\x92\x9c\xc2\x1b\x65\x92\x60\x99\x87\x6b\x4a\x3c\x44\x98\x54\x78\x95\x07\xcb\x6b\x74\xf1\x21\x74\xac\x97\x7a\x7b\xdf\x1e\xba\x3d\xca\xc4\xe1\x59\x92\x46\xde\x36\xdd\xea\xac\x96\xda\x6e\xa2\xa8\xc6\xf5\x46\xda\x69\x6a\x66\x5d\x49\x82\x15\xd7\x65\xd5\x7a\x15\xe8\xc0\x4a\x89\xbd\x58\xb4\xfe\x02\xa9\x2b\x19\xdc\xe6\xca\xab\xcd\x46\xbf\xda\x5b\x20\x87\xde\xcb\x0b\x60\x5c\x83\x3d\xe4\x73\x68\x14\x19\x92\xd1\x73\xfd\x31\x64\x35\x31\xc0\x2d\xd4\x6f\x25\xd0\xbc\x23\xf7\x34\xf7\xaf\x3a\x4b\x14\x5b\xa9\xb7\x89\xbb\xcd\x0e\x0e\x90\x53\xa4\xa4\x0c\x50\x0f\xc8\x55\xee\x91\x7c\xd2\x24\xab\x3a\x02\x6e\x94\xd7\xcd\xae\xfa\xf6\xa8\x82\xa1\xd8\x05\x6c\x91\xcf\x0c\x9d\xb2\x71\xb5\xec\xe9\x99\x36\xb5\x14\x87\x15\xf6\xc6\x16\xdb\x94\x11\x83\x29\xce\xb6\xb6\xc1\x9d\x97\x77\xf1\xf1\x05\xa6\xca\x59\x7d\xfb\xfd\x82\x4b\xbb\xfd\xea\x91\x5d\xd7\x1f\x03\x32\x14\x23\x09\x73\xaa\x1f\x52\x6c\xbc\x52\x1d\x3b\x0b\xa8\x63\x2f\x72\xe7\xa2\xc6\x93\x80\x9d\x16\xba\x77\x39\x67\xd0\xc0\x5b\x7c\x9d\x0e\x22\x59\x7a\x34\xec\x9c\x49\x48\x2c\x14\xec\xdc\x9a\xc1\x1f\xdc\x4a\x5e\xeb\x2b\x90\x4a\x0c\x89\x47\x3f\x8d\xa7\xe9\x19\xd2\xe7\xa9\xe2\x27\xa7\xf8\x5a\x24\x3c\x4d\x6f\x71\xb6\xc6\x3a\x14\xb2\x9f\xc4\x67\x2a\x47\xad\x54\x95\x3b\x78\xcb\xf4\xf2\x32\x18\x56\xa8\xbf\x29\x41\x4c\xd2\xc1\x10\xe1\x2b\x6b\x8c\x7d\x42\xfa\xba\x28\x82\xa4\x85\xfd\xa7\xf4\xca\xb9\x02\xfd\xb4\xc3\x15\xa8\x0b\xd8\xd0\xe6\x1e\xf4\x7b\x5c\x5d\xab\x0b\x4d\x09\x48\xf2\xda\xbb\xdb\x06\x86\x46\xa0\xf6\x9b\xec\x2d\x43\xcd\x69\x0b\x34\xf7\x3c\x1a\xd9\xe2\x47\x52\x50\x07\x54\xb1\x8b\x5c\xac\x2f\x5a\xe4\x6b\x74\xc6\x89\x97\x31\xf1\xf3\xc4\x00\xe4\x5e\x7c\x59\x2d\x37\x68\x95\x7d\x02\x0a\xca\x56\xf2\x2b\x93\xa6\x75\x90\x73\xbc\x79\x19\x3b\x04\x42\x64\x70\x40\xa3\xf1\xd0\x06\x89\x13\xa1\x53\xea\x63\x94\xe1\x20\x8a\x4d\x64\x4c\x4c\x70\x34\xa5\x79\x36\xa7\xff\x22\xef\x4c\xb4\x4c\xcf\xe4\x48\xb4\xc5\x46\x97\x0e\x18\xe4\xbc\x52\x1a\x7c\xf6\x79\x4f\xbf\x37\x9c\x70\xd6\x2a\x92\x08\x4d\x99\x3f\xf7\x72\x77\xba\xd1\x9d\xa6\x9b\xf6\x0d\xfd\xf7\xad\x92\xe5\xd3\xb7\x2d\x11\xf7\xbe\xfe\xdf\x54\xeb\x57\x57\x55\xbb\x41\xfe\xbb\x7a\xd7\x5d\xa2\x01\x2d\xed\x64\xa2\xf5\xca\x81\x93\x09\x17\x39\x79\x45\x6e\x21\xbd\x2a\x02\x0a\x9f\xfe\xbf\xd6\x44\xe7\x58\xe9\x53\xf3\x09\x38\x99\x5a\x63\x29\x54\xe1\x62\x3a\xdd\xd4\x02\xc9\x72\x6d\xea\x82\x59\x16\xe2\xc1\xd7\x29\xe5\xc9\x37\x18\xe9\x84\xac\x4f\xda\xfb\x5a\xb6\x33\xb7\xf9\x96\xc3\xa0\xb6\xc3\x18\x2c\x95\x76\xd8\x98\x9b\xed\x73\xfe\x0f\xd9\x96\x79\x97\x9e\x01\x43\x14\xa3\x7c\xb8\x27\xdc\xb1\x40\x73\x8e\x91\x0d\x51\xed\x99\x1f\xd5\x5e\x5e\x41\x10\xb8\x82\x60\x83\xdc\x9d\xc2\xb9\x8d\xdf\x9f\x78\x25\xf9\xaa\x3e\xe9\xa9\xa1\xfd\x36\x18\x04\xbb\xf5\x6f\x66\x59\xf3\x86\xc1\xb9\x9a\x2a\xc3\x8d\x20\xf5\x4c\x36\x91\xd3\x03\x21\x6e\x3f\x08\xa1\xbe\x5e\x30\x90\x0b\xaa\xc9\xeb\xaf\x21\xb3\x49\xe0\x09\x59\x94\xae\x6b\xd1\x06\xeb\x53\x5f\xf0\x91\xd7\x75\x5b\x36\xbc\xe6\xa5\x9f\xdd\x2b\x7c\x53\xdb\xed\xfb\xce\x26\x5a\xb3\xac\xd4\x9f\xeb\x8c\xc5\x96\x2d\x68\x3f\x32\xb7\x87\x30\x71\x7f\xa7\x7c\xa6\x7c\x35\xd6\xcf\x15\x3f\x9d\x37\x6d\x68\x3e\x66\x10\x27\x7a\xad\xd9\xf1\xab\xed\xc5\x3c\xeb\x15\x77\xba\xc6\x10\x69\xf7\xfd\xbc\xc8\x78\xdc\x58\x8e\xe8\xe5\xe5\x10\xed\x33\xe0\x04\xff\x0f\x54\xad\x51\x1f\x51\x9d\x03\x51\x1d\x5e\xdc\xdf\xcf\x49\xb0\x2e\x6b\x88\xed\x35\x1b\x57\xe1\x71\x36\x9e\x91\x0d\x83\x7e\xaf\x62\x2c\x4e\x20\xc2\x1f\x38\x12\x7c\xf3\xe1\x53\x03\x0d\xdb\x69\x3f\x96\x7e\x34\xaf\x3b\x54\xea\x3b\xb2\x74\x99\x52\x0e\x0d\xe5\x27\x92\x43\xb8\x27\xed\x65\xa0\xed\xf6\x69\x79\x43\x38\x9f\x0b\x3e\xaa\x79\x07\x57\xb7\xad\xb5\x89\x6b\x26\x20\xe6\x43\x80\xfe\x35\xdc\xa4\x01\xe8\x1a\x2d\xdf\xaf\xe6\x53\x3a\x0f\x17\xd7\x2c\xcd\x64\xd5\x97\xf7\xde\x57\x4b\xab\x51\x1b\x9d\xb1\xbf\x77\x84\x9d\x84\xe2\xa7\x1a\x9e\x7a\x45\xeb\x56\x3b\x16\x06\x95\x79\x30\xa8\x06\x25\xe3\x87\xb2\xab\x48\x75\x17\xab\x12\xb0\x4f\x4b\xc2\xa3\x0d\x27\x49\x77\xd3\xf1\xe2\x9e\x14\x04\x3f\xd7\x2a\xed\xb5\xa8\x42\x98\x25\x7c\x46\xf2\x80\xa5\x14\xf8\x35\x29\x01\x8b\x4c\x5e\x5e\x9c\x9f\x34\xbf\x57\xbd\xd8\x2c\x4e\x7b\xbf\x30\xbf\xb7\x0e\xe5\x35\xb0\x5b\x8c\x0a\x61\xf1\xaa\x52\xd4\x8c\x64\x5e\x73\x54\x19\xd1\x39\x38\xf4\x77\xdd\x2e\x8e\x50\xe5\xb8\x36\x60\xd1\xe4\x3e\x8d\x23\xf1\x3f\x42\x18\xe2\x6e\x88\xdf\xf0\x10\x21\x0c\xf2\xe5\xfc\x49\xbc\x52\x8f\x62\x62\xd4\xdc\x1c\xeb\x43\xe1\xf8\xee\x79\xd3\x4b\x8d\xad\x0d\x42\xc6\xac\x21\x3a\xf3\x2c\xc9\x5f\xc7\xb2\xd5\x51\x40\x77\x02\x0c\xf8\x8e\xbc\xe7\xf3\x68\x64\xaa\xa2\xd4\x12\x4c\x86\x0d\x72\xc3\x7a\x6d\xd4\x2e\xd8\xfc\x89\xca\xaa\xb4\x0b\xf2\x03\x61\x62\x44\xf4\x73\x84\xf0\x2a\x77\x3f\xd8\x5f\x11\xc2\xb5\x68\x62\xe2\xfb\x2c\x2b\x23\x64\x48\x91\xc9\xd5\x52\x7f\xb9\x27\x5c\xfe\x70\xbe\xcb\x17\xa5\xf8\x5c\xc8\xc7\x40\xe6\xd2\xcb\x5d\x36\xb3\xbf\x2f\xd8\xed\xd3\x92\x38\x54\xd4\x9b\x10\x31\x27\xb1\xa5\x69\xd3\x53\xd0\xd5\x88\xaf\x54\x6b\x6d\x5a\x4f\x4b\x83\x41\xc1\xd3\x46\x5f\x23\xc7\x31\xe2\x3b\xcc\xc7\x35\xb0\x9a\x9b\x4f\xaf\x57\xf9\xe3\x7f\x9f\x69\x2b\xeb\x2b\x27\xac\xac\xb4\xfb\x7c\x26\xa3\x58\x05\x5e\x29\xe5\x7e\x2d\x76\x46\xe4\xa5\xf1\xce\x26\x73\x55\xe5\xc5\xd2\xf0\xd3\x4b\xa3\xdb\x06\x0c\xb1\xd6\x80\xd7\x32\x93\x9a\xa7\x63\x0a\xf6\xb6\xb1\x97\x4e\xc7\xe1\x52\xea\x3a\xc1\xcd\xe0\xbc\xb2\x97\xe9\x5a\x1d\x70\xda\x50\x1d\x7e\x93\xe9\xe5\x73\x85\x73\x05\xdd\x5f\xe4\x60\xbe\x2d\xfb\x19\x82\x01\x7a\x6d\x06\xac\xf6\x34\x87\xbd\x3e\xd0\x33\x62\xe2\xa7\xf4\xe5\xa5\xce\x44\xba\x8d\x24\x8e\xb3\x0e\x20\xbf\x3f\x87\x7a\x31\xf7\x5c\xc2\x54\xc6\xbc\xd9\x85\xb4\xd7\x8b\xe9\xa6\x2e\xcc\xc1\x43\xd4\x58\x70\x82\x43\xfb\x48\x56\xc0\x3a\xf6\xaa\x17\x1d\xe7\xb2\xb2\x52\xde\x9c\xa6\xa4\xa2\xd7\x8b\x8b\xcd\x33\x42\x61\xe5\xa9\x0b\x22\x84\x69\xaf\xa7\xda\x01\x6e\x2c\xd2\x9b\xad\x24\xf9\x04\x65\x69\x5c\xa6\x14\xb9\x8e\x4a\x25\x1e\xe4\x46\x36\x2d\x74\x70\xbc\x2c\x8d\x57\x29\x45\xe2\x93\x4c\xb6\xc2\x03\x2f\x15\x9d\xc6\x7b\x47\x7b\x16\xb0\x69\xef\x50\x07\xde\x38\xf2\x99\xd9\x56\xdb\x42\x08\x39\xd9\xdd\x0c\x20\xf3\xc1\x5d\x76\x47\xc2\x8e\x4e\xeb\x5d\xa0\xbe\x19\xed\xa6\x86\x2e\xdd\xda\x7d\x39\xb8\xb3\x14\x38\x93\xb1\x76\x95\xe4\x1b\x8d\x04\xf9\xfc\x9e\x4c\x94\xc5\x25\x68\x1d\xac\x39\x67\x84\x27\xc6\x77\x33\x9c\xd6\x3a\x7e\x56\xb8\x16\x1b\x40\x6f\xf9\x8e\x8a\x9f\x84\x3d\x6d\xe5\xc4\xa9\x80\x2b\xa1\xf9\x8c\x30\xca\xcb\x0f\x45\x51\x12\xe9\x34\x63\x82\x69\x99\x2b\x23\x13\x6c\x33\xa1\x39\xf5\x0c\x6c\xbc\x40\x34\x39\xe5\x6b\x3c\x98\xe5\x01\xa3\xac\xe3\xc1\xf5\x18\xac\x95\xd3\x43\xff\x4b\x2a\xfd\x26\xe1\x95\xdc\x5a\x20\x6d\xba\x77\xe8\xbd\x34\xd9\x6a\x3d\xe4\x66\x57\xb6\xc4\xf5\xfe\x13\xb2\xfa\x83\xbc\x0e\xa0\x89\xe3\xc2\xdc\x0c\xe3\x6d\x0d\x88\x37\xd2\xd0\x37\x98\xba\x0a\x41\x59\x90\x39\x57\xd8\x8d\xa5\xed\x97\x10\x21\x50\xe3\x98\x40\x11\x69\xfd\x3c\x73\xaf\xd9\x55\x1e\xe3\x8d\x43\x6b\x1f\xfc\xcc\x39\x5c\x7d\xb3\xa0\x97\xb4\xb9\xb8\x97\x09\xdd\x96\xd5\xed\x78\x34\x6e\x92\x3b\x70\xbd\x5e\xec\x0f\xe4\x60\x88\x30\x18\x4b\xad\x19\xf9\x5e\x8f\xfc\xb4\xee\x9b\xbe\x92\xd9\xda\x53\xd2\x19\xd8\x86\xbc\xf4\xe8\xa9\xb3\xc9\xa5\x82\xf5\x35\xad\xb1\xea\x6f\x16\x7e\x4c\x7f\xcc\x41\x81\xed\x7d\x1f\xd0\xa1\x6f\x88\xac\x7b\x9e\xaa\x0d\x34\x58\xf4\x61\x67\xdd\xbc\x3f\x38\xaa\x3c\x36\x57\x17\x43\x86\x15\xa6\x03\x96\x18\xf7\xea\x77\x17\xef\x46\x67\xbf\x9c\x5e\xfe\x7c\xee\x7b\x59\x37\x3a\xc3\x58\x27\x25\x23\x89\x60\x10\x9a\xb9\x31\xea\x9b\x21\x77\x6c\x28\x46\x34\x7f\xc8\xe6\x14\x70\x0f\x60\xe8\x37\x90\x68\x1a\xb9\x85\xe6\xc3\xc9\x61\x3f\xd4\x23\xb8\xc5\xa0\xe2\x5c\x63\x39\xd4\x07\xad\xaf\xfb\xb3\xc5\xd2\x94\xbb\x40\xd8\x68\x1e\x4c\x61\x72\xbd\x29\xb9\x6d\x6f\xe6\x32\xfb\xad\x9f\xa9\xcd\xee\xb2\x25\x51\xb3\x23\xb7\xcf\x77\xd2\xeb\xed\x79\xd2\x71\xaf\x27\xf7\x93\xa6\xe7\x84\x8c\x26\x06\xd1\x2d\x82\x5b\xa5\xdc\x64\xb6\x77\x65\x73\x63\xac\x51\x82\x8b\x5b\xb6\xde\xdf\xa2\x91\x41\x57\x4c\xf6\xd1\xc6\xf3\xd0\x2d\x7c\x6d\xf2\xa0\x9b\x03\x97\x47\xf4\xa6\x59\x20\x93\x18\x4c\x99\x02\x5c\x5f\x8a\xfd\xda\x30\x34\xab\x6f\xe6\xe3\x7e\x7e\x40\xd1\x71\x0c\xce\x92\x6b\x16\xba\xb2\xe1\x69\x7e\xf8\xa9\x40\xf5\x3d\xd3\xd9\x1e\x0a\xb4\xe1\x10\x0c\x4f\x4f\xd9\x1a\xe8\x24\x3b\xa3\x9b\x83\xb7\xfe\x08\xf6\x8b\xaa\xe4\x65\xbb\x14\x88\x00\x03\x59\xf0\x06\x83\xe7\x2f\xe4\xa9\xaf\x3b\xa0\x8e\x57\xaa\x3d\xf0\x5d\x52\xed\xe7\xb6\x77\xc0\x93\x13\x8f\x93\xb7\x3b\x40\xa8\xb2\xb5\xbd\x54\x7e\xab\x6b\xca\x74\xb8\x33\xcf\x17\xea\x80\x68\xa8\xca\x1c\x3d\xe7\x30\x01\xb8\x73\x1b\x74\x90\xc3\x75\x90\x66\x88\xd6\x1e\x9e\x1d\xaa\xd7\xa1\x71\xd4\xa4\x62\xb7\xd0\xf6\x76\xfe\x26\x83\xaa\xaa\x02\xff\x4d\x0b\xe9\xe7\x41\x3f\xe0\xd2\xc6\x73\x74\x0d\xaa\xf0\x73\xad\xd3\xa4\x9c\x99\xcd\x69\x56\x3a\x18\x29\x08\x8f\x18\xd1\xa5\xf5\x8b\x76\x60\x61\xa1\x18\x23\xbb\x30\xe4\xc6\xea\xa1\x4d\x80\xbb\xcd\xc1\x17\x6b\x20\x06\xdb\x4c\x66\xbe\x41\x3e\xd8\x12\x25\x65\x3d\xeb\xaf\x01\x03\x1a\x22\x40\x03\x38\xdc\x3b\xb3\xc9\x60\x39\x54\xc1\xd4\x02\xb2\xc2\x3c\x5d\x29\x2d\x84\xe5\xa8\xe5\x3c\xc0\x63\x98\x93\x34\x19\xfd\x4e\xb2\x2f\x37\x84\xe3\x29\xbc\x10\xbf\x3e\x66\x4b\x3c\xf3\x7e\x4d\x34\xb8\xd7\x52\x1a\x80\x97\x4f\x8b\xbb\x62\x8e\xe2\xe8\xfd\xf5\xe9\xc7\xf3\xdf\xaf\xae\x7f\x1d\x9d\x7d\x38\xbd\xb9\x89\x1c\x2d\xd1\xc2\xf5\x3f\x88\x0f\x71\x69\x70\x94\xc4\xfa\x30\xa2\xbd\xcb\x6b\x11\x25\x1d\x92\x3c\xe3\x2e\xec\x07\xce\x52\x92\xd4\xb1\x40\xf0\x3c\x35\x44\xf2\x5e\x2f\x37\x7a\x03\x13\x9d\x4d\x88\x96\xbd\x5e\x66\x3f\x4c\x53\x37\xc2\x24\x47\x78\x96\x1e\x1e\xcf\x7e\x9c\x6a\x83\xf8\x99\x36\x88\x9f\xa4\xd3\xc1\x6c\x88\x97\x29\x1f\x4c\x86\x78\x21\xaa\xbf\x4a\x26\xa4\x1c\x33\xba\xe4\x05\x7b\x5f\x30\x8b\xce\x42\xf0\x04\x33\x84\x1f\x6c\xa1\x0b\x90\x6c\x1f\x24\xa9\xfb\x94\x0c\x26\xc3\xce\x5c\xd4\x50\x03\x7f\x4e\xd0\x4f\x07\x47\xbd\x5e\xbc\x4c\xef\x4f\xa0\x3f\x17\xd9\x17\x6d\x22\x78\x6f\xc0\xf9\x96\xa8\x5f\xff\xb8\x44\x08\x8f\x45\x93\x9a\x94\xbc\x08\x54\xcf\x15\xbe\xc7\x4b\x84\xaa\x87\x93\x05\x00\x27\x89\x4a\x2e\x51\xdf\xe2\x31\x58\xcc\xd4\x00\xc0\xcd\xcb\xcb\x04\xc2\x91\x9d\x88\xaa\xa7\xcb\x7e\x28\x4d\x2c\x08\x56\x52\x40\x13\x5d\xc9\x92\x55\x0e\xde\xe1\x2e\xdc\x0d\x86\x8e\x9b\xd2\x9c\x96\x33\x40\xed\x29\x51\xcc\xd4\x5b\xc7\x66\x83\xe0\x48\x90\x89\x74\x64\x50\xff\x1f\x93\xde\xd3\x0f\x6b\x42\x9f\xea\xd3\x60\x0a\xf1\xd7\xa5\x59\xb1\x45\x48\x46\x1d\x33\x2c\xa4\xd7\x8b\xa7\xc9\x84\xcc\x09\x27\xcd\x74\x98\x25\xef\x4f\xcf\x6e\xaf\xae\xff\x18\xbd\xbf\xba\x86\x4e\xd3\xb7\x72\xb8\x9e\x58\xae\x26\xcf\x6e\xf9\xd8\x99\xe1\x1c\x25\x8d\x9e\xa8\x88\xd8\xb0\x29\x7f\x2f\xcd\xb7\x7c\x29\xdb\x2d\x4d\xda\x3a\x3e\xa4\xa4\x29\x29\x3f\xa8\xb5\x9b\xb6\xb3\x41\xe0\xbe\x0d\x82\x0a\xed\x77\xcc\x84\x1c\x32\x60\xae\x0d\x02\x1b\xda\x0b\xcf\x95\x94\xb6\x61\xd7\xd0\xae\xd4\xfa\x5e\xfa\xa1\x21\xaa\x8b\x77\x93\xa6\xb4\x6b\xce\xe7\x32\x59\x12\xf2\xe5\xa3\x0f\x8b\x04\xec\xe6\x4d\xb1\x62\x63\x62\xef\x60\x62\x07\x7f\xb7\x24\xbc\xf9\x59\xcc\x9a\xcc\xb5\xd4\x33\x78\x81\xdc\xf8\x28\x38\xc2\x77\x33\xbd\xb1\xec\xb3\xe9\x47\xfa\xf3\x44\xe5\xb2\x56\x01\x0f\xeb\x24\x79\xf1\xa9\x91\xcf\xdf\x93\xeb\xcd\x23\x93\x18\xbd\xbc\xc4\xd0\x1f\x72\xfe\x39\x3d\x82\x9b\xed\x15\xe9\x91\x28\x87\x17\x37\xa0\x5c\x6c\xf6\x6d\x00\x59\x85\x4b\xcb\x7d\x99\xe3\xfc\x2b\x27\x79\x49\x8b\xfc\x24\xea\x47\xfb\xe1\x4f\x42\x72\x8b\x34\xac\xc2\x8f\xd1\x7e\x0c\xdb\x8d\x8a\x90\xaa\x6a\xf7\xf2\xe2\xaf\x0b\xbd\xc6\xb4\x25\xb9\xbb\x2a\x74\x01\x31\x42\x10\xa3\x52\x92\x5b\xd1\x89\xb9\xa6\x46\xfb\x64\x3f\xfa\x29\x12\xa7\x15\x11\xb5\x98\x34\x1b\x16\x54\x3f\xb1\xb6\xea\x27\xe7\x8a\xb2\xa6\x84\x62\x62\x68\x99\x52\x8d\xea\x15\x35\xd7\x26\xc6\x89\x85\xe4\x12\x13\xdf\x55\x33\x41\xac\x56\xc9\xb3\x06\xa3\x38\xca\x28\xc8\x1a\x2a\x6a\xb0\x1c\xaa\x70\xc5\x78\xe5\x6c\x49\xce\x36\xb4\x3a\x29\xd3\x95\xb4\x8a\xed\x7b\x7b\x53\x69\x20\x09\x4d\x54\x4c\x47\x87\x5b\x42\x8a\x09\x52\xa6\x45\x59\x5c\x2a\x18\x67\xf5\x5b\x37\x69\x11\x33\xec\x00\x18\x92\xb0\xc1\x92\x1e\xbb\xd0\x61\xab\xae\x6e\x1a\xe7\x2d\x4b\xdd\xea\x12\x7b\xac\xe6\xf6\x03\xef\xf5\xb8\xfd\x00\xd0\xce\x65\x7a\x78\x5c\xfe\x58\xdf\x9d\x8e\xcb\xfd\x7d\x73\xf2\xaf\xd2\xf2\xc7\xc3\x97\x97\x7a\x9a\x1f\xd3\x52\xc3\xd4\xd8\xbd\xaa\x1c\xe2\xb9\x77\x8c\x43\x38\x56\x71\xb6\xeb\xc0\xaa\xc7\xe3\x1f\xa7\xc7\x63\x7d\x94\xcf\xd2\xf9\x60\x3c\xc4\x93\x74\x35\x98\x0d\x15\x0a\x37\x31\xe7\xe7\x4c\x9c\x9f\x1a\x6e\x3e\x13\x29\x26\xe9\xb2\x71\x26\x2f\xcd\x99\x3c\x69\x9e\xc9\x13\x54\xd1\x69\x9c\x8b\x86\x07\xa8\x2e\x34\xd5\xfa\xf9\xbc\xc0\x13\x54\x89\x6f\xe9\xc4\xc2\x51\x87\xe7\x36\x5c\x37\x93\xc0\xe6\xef\x8a\x28\x62\xb7\xba\x96\x2c\x3e\xc2\x73\x87\xd0\x86\xa9\xad\x8c\xb2\x9c\xbc\xcd\xf5\x08\x24\xec\x51\x04\x10\x07\x80\xa0\x1e\x8f\xf5\x59\x4a\x10\x9e\x49\x1c\x26\x31\xd3\x7b\xbd\x99\x3d\xcf\x56\x35\xbb\xc1\x66\x7d\x10\x42\xb6\x71\x35\xfe\xd6\xd1\x76\x06\x8e\xa5\x40\x43\xa4\xfb\x40\x5d\xb9\x18\xe2\x7a\x2c\x7a\x8d\x98\x84\xc7\xe4\x58\x42\xb1\x2a\xa9\xdb\x62\xd0\x40\x18\xeb\xd5\x92\x30\x80\xe1\xb7\xf7\x13\xa6\xb0\x0b\x85\xb8\x1a\xf4\x6c\x70\xf1\x58\x75\x1d\x05\x8f\xe0\x30\x90\x01\x4f\x75\xdb\xe5\xb1\x58\xee\x9b\x98\x4f\xee\xdc\xcd\xb1\x64\x24\x68\xbf\xbc\x3c\x43\xd4\x6b\x92\x8d\x67\x67\xea\xbe\x70\x13\x06\xe2\xeb\x4c\xa4\x60\xcf\x73\x2b\xaa\xac\x2c\x9f\x2b\x8f\x13\xf2\x26\x8f\xf1\x5f\x79\x67\x1a\x53\x7a\x1e\xfe\x30\x06\xd4\x01\xdf\xd1\xe1\x65\xa9\x6e\x1a\xeb\x38\x08\x00\x05\xaa\x2a\x98\x3c\x50\xc2\xd6\xa9\x2b\x38\x0f\x3d\x7d\xd1\x33\x60\x88\xc4\xc4\xf3\x3d\xb3\x03\xdd\x81\x8d\x4c\x8f\x81\x37\xbb\x03\x73\xd8\x3a\xaa\x98\xfb\xce\x80\xaa\x83\x68\x55\x87\xa3\x6b\x6b\xe8\x3b\xcc\x84\x6f\x70\x4e\x21\xa6\xa2\xa6\x90\x40\x62\xe4\x6b\x65\x00\xce\xf6\xab\x0b\x91\xbc\x6b\xb3\x94\xa1\x6e\x8b\xdf\x11\x8d\x92\xe4\x40\xcc\x9c\x73\xb0\x7e\x0b\x2a\x4e\xbe\x98\xa4\xb5\x8d\x02\x21\x79\x42\x9e\x59\xf6\x02\x86\x08\xcf\x7c\xce\x9c\x98\x06\xdb\xb1\x5b\x53\x09\x75\x66\x48\x1b\x5b\x59\xe7\xab\xa9\x5f\x29\xb2\x97\xa6\x4d\x8c\xfb\x13\xa2\xce\x69\x50\xb1\x90\x4a\xcc\x75\xcb\x99\xad\x12\x28\xf4\x56\xfd\xc6\x52\x3e\xd6\x3c\xd4\x83\x32\x13\x4a\x9c\x78\x64\x48\xf0\xd1\xa5\xdc\xea\xf6\x0e\xe1\xc7\x47\xc2\x67\xc5\x24\xdd\x3b\xea\x48\x91\xf1\xc1\xd1\xdd\xdc\xef\xa0\x6b\x71\xe2\xcc\x7e\x9f\xab\xcf\x9a\xe2\xa4\xd5\xa5\xe8\xab\x2f\x36\xc3\xbc\x1f\xfd\x96\xab\x47\xaa\xaf\x1e\xc5\x1e\xd2\x10\xa8\x8a\x86\x3c\xa3\x15\xdf\x26\x86\x1e\xd2\x9e\xea\xc5\x06\x66\xbc\xae\xc4\x13\xc3\xa0\x2c\x00\xbd\xf7\x8b\x42\xc8\x0c\x9f\x20\x52\xba\xb5\xd3\x22\x52\x34\x60\x80\x9d\x61\x0a\x06\x83\x67\xb3\x4a\x62\x62\x98\x43\x87\x39\x47\x00\x19\x25\x3f\x78\x6c\x36\xd6\x58\xb0\x36\xb1\x5c\x2e\xd0\x10\x51\x3d\x98\x7e\xa4\x6c\xb4\x7d\xc9\x8a\x31\x29\xcb\x50\xfb\x03\x72\x9e\xa3\xa5\xaf\xe7\xc0\xee\x2d\xae\xca\xaa\xb6\x6e\xe5\xd4\x5e\x59\xfc\x33\x57\x57\x59\xe0\xc2\xbd\xff\xb5\x55\x11\x8b\xa5\x48\x2e\x4f\x3f\x9e\xdf\x7c\x3a\x3d\x3b\xbf\x49\x99\xf3\xc3\xfb\x32\x7a\xfb\xc7\xe8\xe2\x9d\xf7\x5d\xbe\x92\xa4\x45\x03\x4f\xe7\xf3\x94\x39\x3f\x6c\xbf\xe3\x22\xb9\x7b\x12\x3f\xd3\xda\x88\xec\xb0\x0e\xff\xcb\xd5\x9d\xad\x96\xe8\x4e\x16\x0d\xaf\x08\x05\x1d\x02\x59\xdd\xa6\xe0\x6c\x6c\x04\xb5\xc0\xb9\x69\x70\x6b\x58\x49\xe4\x09\x6a\x15\x8f\x57\xbf\x9d\x5f\x5f\x5f\xbc\x3b\x1f\x5d\xfd\x7e\x79\x7e\x1d\x09\x19\xe0\xdb\x76\x8f\xf5\x92\xa3\xd8\x43\x02\xc7\x39\xd5\x47\xe0\x08\xda\x6c\xa2\xee\xfe\x4a\x9e\xd6\x9c\x40\x6b\x24\xe9\x06\x8a\x3c\x48\x57\xd3\x95\x9c\x94\xfa\x80\xcb\x13\x68\xe9\x9a\xfb\x91\xc1\x7c\xe8\x3a\xd6\x0f\xe6\xc3\xce\x2b\xca\x84\x49\xd6\xbc\xe4\x50\x14\x53\x02\x07\x20\xad\xe2\x2c\xb4\x6e\xc7\x06\x52\x5e\x6e\x3a\x63\x7d\xf4\x99\x63\xcf\xf8\x68\xab\x81\x18\xfb\xfe\xc3\xf5\x99\xb0\x0a\xbd\x5b\x37\xca\xca\x79\x9b\x1a\xab\x12\x03\x65\x65\x95\x15\x66\x57\x54\xf2\xb5\x74\xeb\x28\x4b\xc2\xf8\xed\xcc\x41\xea\x26\x13\x14\x53\x84\x99\xb5\xbe\xfa\x7f\xe3\xb4\xa8\x0f\x45\xa3\x7b\x57\x4e\xf7\x56\xa8\xb3\xdb\xde\xf5\x1a\x0b\xaa\x6f\xb6\x93\x52\x41\x25\x76\x88\x09\xe6\xec\x11\xf4\xbf\x5c\x75\xc4\x42\xd3\x9e\x62\x5a\x97\x06\xd4\x4d\x9b\xbd\x89\x6b\x73\x72\x98\x78\x89\xed\xdd\xfe\x02\x3b\xf7\x16\xc7\x38\xc9\xf4\xae\x31\xbe\xd1\x32\x71\x24\x7e\x47\xf6\x92\xc6\xfd\x64\x42\xdc\x45\xaa\xcf\xd9\x20\x97\xeb\x8c\xa0\xe1\xcb\x8b\x86\x60\xed\xb8\xea\xc9\x94\x9e\xf0\x66\xb4\x35\x30\x7e\x8c\x24\xc3\x8e\xfa\x0e\x76\x2b\x15\x4c\x8d\x2b\x38\x43\x14\x97\x13\x9a\xaa\x98\x2d\x7d\x5f\xaa\xd6\x94\x45\x02\x1b\xfd\x2f\x10\x1c\x45\x14\x07\x31\xfe\x6c\xf8\x1e\x5a\x69\xa9\x35\x1a\xc8\x0a\x68\x1c\xe7\x61\xd4\x37\xa1\x11\xb1\xf9\x78\x09\xd0\xb3\xe2\x9b\x02\xa1\xb5\x9f\x24\x6b\x28\x3e\x29\x73\x50\xfb\x49\x4b\x14\xe2\xa3\xe9\x16\xfb\x19\xd4\x48\xe2\x9b\xb6\x12\xd4\x1f\x44\xb5\xc5\x7b\xa8\xb4\x7d\x7d\x4d\xee\xcf\xbf\x2e\xc5\x07\x46\xee\xc9\xd7\xa5\xf3\x49\x6e\x92\xe2\x93\x59\x77\xa6\x12\x74\x0e\xae\xae\x50\x09\x3a\x27\x73\x5a\xf2\xa8\xc2\x79\xda\x08\xb5\xa6\xd9\xdc\x75\x93\x56\xf1\x1b\x81\x69\x1a\xb8\x83\x6d\xe1\xae\xe9\xac\x54\xa3\x94\x78\xae\x2c\x66\x0a\xc4\x93\x18\x90\x61\x7a\x84\x39\xa2\xd3\x98\xb9\xc0\x35\xcc\xc6\x36\x72\x6c\x15\xeb\x28\x5c\x20\x64\xda\x29\x66\xa3\x05\x86\xe2\xee\xa0\x8a\x28\x36\x23\x9d\x02\x1a\xfb\x85\x6a\xfa\x8d\x7a\xd9\xd0\xf3\x80\x4d\x9a\x81\x57\x8d\x09\xe8\x24\x26\x14\x52\x65\x2c\xa4\x74\x51\x9d\xae\x84\x5d\xab\xc2\xe1\xc9\x48\xe4\x93\x36\x87\x52\xbb\xa6\xdf\x61\x2e\xa8\xae\x56\x74\x92\x16\x98\x24\xf7\x24\x27\x2c\xe3\xe4\x67\xf1\xa2\x59\x40\xfc\x4a\xb5\x4e\x86\xf6\x8b\x18\x75\x72\x58\xa0\xa5\xba\x3a\xb4\x91\x10\xa1\x0e\x4a\xd4\x68\x96\x0a\x36\xd1\x31\x41\xc8\x8a\x2d\x3c\x2d\xe1\x44\x23\x20\xab\xf0\x34\x13\xe4\xb1\x25\x6c\x23\x0a\xba\x79\x56\x3a\x8f\x81\x9f\x51\x63\xd3\xe1\xa9\x35\xb7\x4e\xd9\x49\x54\xf2\x48\x50\xec\x5b\x54\x68\xf1\x36\x5f\xa9\xb7\x72\x1c\x75\xda\x27\xf5\x36\x8e\xf6\xc9\x7e\x84\x22\xb8\x84\x94\xf5\xa8\xdc\x06\xca\xb9\x9e\x32\x4c\x92\x47\xe6\x01\x73\xaa\x88\x4d\x7b\x4f\x6e\xb8\x48\x19\x61\x52\x01\xd1\xf7\x7a\x4f\x16\xf1\xba\x7b\x15\x13\x7c\x15\x73\x7c\xef\x84\x0c\x53\xae\x26\x10\x92\xc9\xc2\xc4\x3e\xca\x17\xc6\xa1\x33\xbd\x91\xf7\x42\x36\xc5\x48\xbe\xb0\x29\xbe\x42\x55\xcb\x65\x48\xe3\x59\x07\xc9\x26\xbd\x5e\x08\xf0\xde\xc3\x7f\x52\xcf\xff\x88\x09\x3e\x84\x0a\x4a\x33\x74\xab\xac\x0b\x22\x0b\x92\xce\xa4\x50\x86\xf2\x56\xc3\xe2\xc4\x6a\xb4\xd9\x63\x86\xb9\x7f\xf7\x6f\x62\xb2\xe5\x1d\xb6\x46\x3f\xc3\x50\xf5\x38\xa3\x73\x12\xab\x95\xcc\x90\x67\xe9\x8e\x05\x97\x97\x4b\xe0\xbf\xf4\x03\x26\x16\x06\xb0\x61\xe3\x4a\xa7\xf1\x07\x39\xe7\x54\x75\xc9\x80\x1b\xdf\x6b\xa3\xc2\x03\xcf\x2d\x4c\xac\x82\x3f\x7c\x58\xea\x0d\x68\x60\x28\xbc\x97\xa0\x35\x60\x6d\x49\xb4\x9c\x1e\x52\x0a\xff\x4b\x4d\xee\x4a\x8e\x67\x2d\x99\xe8\x58\xb9\xfa\xfe\x65\x27\x27\x26\x4d\xe5\x43\x97\xc4\x3c\xec\x7f\xe0\x04\x1f\x75\x2c\x6b\xd7\x1f\xee\x3c\x70\xb8\x07\x43\x8f\x5a\xf0\x86\x28\x52\x2e\xed\xfa\xb2\x07\x3c\xdb\xf3\x9f\x14\xd0\x73\x84\x23\x84\x7f\x89\xf9\x20\x1f\xa2\x97\x17\xf1\x86\xc8\x1f\x56\x57\x5d\x79\x7a\x79\x5b\x77\xd3\x50\xd3\x08\xe7\x5a\x51\xe7\x7e\xab\x58\x7b\xe8\x19\x08\xa7\xf3\xb5\x39\x4e\xce\x12\xfd\xa7\xd2\xfa\x76\x5c\xf5\xbd\x8e\x7d\xe5\x65\x94\x5d\xff\x4f\xa5\x1b\x96\xe4\x41\x8a\x69\xce\x05\xbd\xfc\x7b\x3d\x32\xf8\xd3\x50\x51\xfc\x9d\xf2\xd9\xc7\x2c\x9f\x64\xbc\x60\x4f\x37\x84\x73\xc2\x52\x92\x70\x92\xb1\x49\xf1\x98\x37\xbf\x94\x84\xaf\x96\xcd\xd7\x0e\x08\x7c\x4a\x12\x70\xf8\x4d\x49\xf2\xcb\xe9\xcd\xe8\xf2\xf4\xf6\xe2\xb7\xf3\xd1\xa7\xeb\xab\xbf\xfe\xe1\xbf\xba\xf9\xe3\xe3\xdb\xab\x0f\x29\x49\xae\xaf\xae\x6e\x85\xf4\x33\x23\xe3\x2f\xbf\x64\xe5\xcd\x6a\x09\x34\x7f\xfe\x7c\xf1\x6e\xf4\xeb\xb9\xc8\xb5\x6e\x85\x96\x3e\x3f\x7d\x68\xcf\xe6\xc2\x70\xd1\xfb\xfb\xb4\x92\x98\x91\x52\x1e\x88\x70\xe9\x99\x0a\xad\xe0\x97\x78\x9a\xa7\x2c\x8e\x46\x23\x99\x6a\x5f\x70\x33\x49\x5e\x3c\xc6\x10\x93\xc8\x54\x46\x22\xeb\x8d\xd3\xc1\xd0\x16\x36\xb5\xe7\x18\x50\x10\xdb\x75\x3c\xdf\x87\x70\xd1\xd3\x79\x51\xb0\x18\x1e\x59\x96\x4f\x8a\x45\x8c\xfe\xec\x90\x46\xfb\x22\xbd\x99\x28\x63\x1d\x4b\x17\xf3\x4a\x5e\x06\x9a\xbd\x67\xcb\x66\x55\x9e\x6c\x4b\x10\xc0\xfb\xb1\xc0\x3d\xee\x05\x25\x09\xe0\x76\x31\xf4\x0c\x36\x18\xdb\xb6\x4c\x89\x10\x8d\x79\xd5\xd9\x34\x6a\xb3\x8e\x34\x5a\x7a\xf3\xb7\x24\x96\xd0\x44\x2f\x62\x81\xfc\x0d\x24\x9d\x17\xd8\xd9\xe4\x33\x7a\x83\x97\x01\x0d\xb7\x59\x62\x78\x91\x2e\xe5\xda\x0a\xdf\x32\x56\xc8\x70\x39\x91\xf3\x3a\x42\x3f\x1d\x1c\x85\x22\x62\x4c\x12\x4e\x4a\x1e\x2f\xb5\x88\xe0\xc6\x4e\x31\x3e\xdb\x87\xa2\x71\xfe\x6c\x5d\x28\x23\x18\x77\x62\xdd\xd7\xc2\xda\xb8\xf7\x11\x8e\xd9\xd9\x93\x1d\x8e\x07\xb5\xd3\x36\xee\x1c\x64\x44\xcf\x45\x4c\x10\x7e\xb0\xac\x08\xe6\x95\x5a\x3c\xf7\xea\xf5\x3d\xde\x3b\x92\xea\xe3\x3b\xb7\x2a\xb6\x30\x15\x9d\xe4\xce\x6e\xd5\xe6\xd3\xa3\x8b\x5e\xac\xb7\x7c\x41\xea\x3c\x4c\xea\xab\x24\xc5\x7b\xbd\xf3\x00\xb5\x1b\x17\x31\xd2\xa5\x76\x0a\xd4\xb8\x31\xe3\xb3\x04\x25\xa3\xe1\x0b\xc2\x0e\x2e\xa2\x9c\x27\x1d\xe7\x39\xe5\x1d\x6d\x86\x17\x94\x93\x7d\x50\x2a\x99\x85\x59\x1f\xbf\x53\xd8\x34\x19\xc2\xa3\x98\xe1\x47\x30\x5e\xf8\x1a\x33\x7c\x03\x4f\x0c\x2a\xfb\x65\xbd\xb4\x81\xcf\x36\xce\xcb\xdb\xd4\x3b\x8e\xf0\xb5\x6b\x02\x80\x3f\xa5\xff\x79\x73\x75\x99\xc8\x83\x90\x4e\x9f\xf0\xc7\xf4\xe8\xf0\x10\xbf\x4b\xff\x1b\xbe\x4c\xdf\xfc\xef\xc1\xdf\x1e\xff\x34\xdc\xff\xd3\x1b\xdb\x37\xff\xf0\x23\xe5\xec\x1d\xe9\xb0\xf8\xd6\x11\x12\x62\xc2\xdb\x13\xb1\xdf\x3c\x23\x21\x85\x12\x2a\xfa\x9b\xc4\xe8\x5b\xb8\x70\xa4\xe9\xde\x61\xe7\x8e\x91\xec\x8b\xf4\xe4\x33\x27\x7a\x9a\x7e\x79\x79\xb1\xa2\xb6\x3d\x01\x21\xb1\x8d\xee\xe1\x9c\x83\x50\xb4\x39\x3d\xfb\x8d\x24\x69\x9a\x9e\x9d\xc8\x18\xb0\x27\xd1\x40\x77\x6c\x3f\xda\x97\xef\xf6\x23\x21\x06\x0e\x1c\xc1\xb4\x49\xbd\x16\xef\xff\x93\x58\x47\xf2\x83\xe4\xa9\xfb\xf0\x43\xcb\xc8\xf2\x97\xe2\x3a\xfb\xb5\x10\xf9\x2e\xf1\xca\xe5\x3c\x72\x94\xd7\xa7\xaf\x8d\x4c\xae\x2e\x6a\x55\x67\x0e\xce\x28\x1b\xaf\xe6\x19\x1b\x46\x0e\xcf\x06\xa7\x34\xa6\x27\x01\x5e\x8f\xff\xf4\xce\xe4\x55\x22\x76\xc7\x5a\x9a\x46\x83\x08\x87\xd0\x90\x45\xc9\xfb\x29\x78\x67\x9e\x44\xdd\xa8\x1f\xe1\x6e\x84\xe9\x4f\xe9\x47\xf4\x9c\xef\xa7\x51\x92\x24\xdd\x68\x3f\x36\x28\x9e\x1f\xd1\x7e\xd4\x5d\x14\x8c\x74\x29\x27\x8b\x32\x52\xe3\x9b\xef\xa7\xff\x88\x01\x52\x19\x5c\xa8\x74\x7d\xf7\xd3\xa8\x3b\x8c\x2a\x31\xf7\xf6\x8f\x70\x8e\xfa\x5b\xaa\xad\xc5\x79\xb7\xde\xcf\xa2\xde\xd7\xa2\xd5\x45\x7a\x78\x5c\xfc\x48\x75\xf5\x0b\xbf\xfa\x85\xad\x7e\x51\xaf\x3e\x6d\x56\x5f\x2c\x23\x5d\x7b\x79\xba\xd3\x41\x31\xec\xe4\xfb\xe9\x45\x9c\xa1\xfd\xa8\xdf\x8d\xf6\x45\x93\xb2\x40\x93\x2a\xa7\x49\x76\xc7\xba\x70\x76\xac\x4b\x79\x0c\x00\x83\x2c\x26\x92\x4d\xf5\xc1\x73\xcf\x57\x98\xd9\xe1\x78\xb8\x03\x3e\x84\xaa\xbd\xf7\xb7\x02\xd8\xb3\xfe\xe5\xed\xa9\xe2\xcd\xdb\xf5\x5b\x8d\xdd\x06\x7e\xa9\x69\x0a\xd2\x94\x40\x11\x9f\x43\xe6\x75\x52\xfc\xef\xf5\xac\xca\x07\x5e\x0c\x85\x74\xb9\xb6\x2c\x79\xf0\xc9\x94\x92\xf3\x69\x72\x6c\x9f\xa1\xc2\xbf\x87\xca\x04\x06\xb5\x13\xe0\xfc\x7e\x87\x3c\xff\xac\xaf\x1e\xf1\xf2\xb7\x35\x76\xb2\xae\xab\xdf\x9c\x2e\x28\x4f\xa5\x3b\x4f\x22\xd2\xa4\xd2\x83\x26\x29\x79\xc1\x48\xca\xd4\x0f\xfa\x2f\xa2\x5d\x39\x16\x14\xae\x0b\xd5\xaf\x19\xe5\xe6\x59\x65\x79\x79\x51\x7c\x5f\xa5\x50\xb7\x9b\xd7\xad\xc0\xe7\x84\x78\x68\x4b\x47\xad\xfa\x93\xd8\x14\xb3\xbf\xef\x14\xa3\xf5\x02\x0a\x2d\x5b\x56\xca\xa4\x90\xa7\xa6\x6e\x12\xe8\x0f\x2a\x09\xeb\x11\x0e\x79\x63\xbb\xe2\x27\xd3\x5e\xed\x40\x23\x9e\xfd\xa2\x5d\x3e\x01\xf3\x64\xb9\x62\xf7\x4d\x5f\x18\x99\x54\xc1\x1a\x37\x7b\xd1\xed\x37\xdd\xa3\x95\x34\x29\xd0\x6c\xfe\x6f\x30\x88\x3f\xe3\x3f\xf0\xaf\xf8\x4f\xe9\x34\x8e\x1c\x59\x20\x12\xc9\x5c\xd9\xe0\x4f\x78\x8d\x08\xf1\x33\x5e\x2f\x75\xfc\xb1\x5e\x54\xf9\x75\x9d\xd2\xef\x81\x92\xc7\xf2\x0d\xf0\x7e\xdb\x34\xd4\x32\xa9\xa3\x9f\xfe\xc7\x3f\x57\x84\x3d\xb5\x4b\xbb\xfe\x32\xb3\x91\x14\xd0\x14\x47\x13\x15\xb9\x7c\xcd\xe5\xa8\xcd\x35\x2e\x16\xcb\x22\x17\x59\xa4\x5a\x63\x4b\x72\x0d\x32\x41\xbe\x72\x8b\x2d\xb1\x31\x87\x7c\x02\x65\xbc\x78\x6c\x47\x1f\xf4\xdf\x23\x30\xdb\x68\x59\x8c\xce\x38\xa3\xf3\x09\x14\xb4\x63\x46\xf1\x62\x54\xf2\x8c\x93\xd7\xe4\xdb\x25\x47\x1d\x99\x63\xeb\xf0\x64\xfc\x4d\xc6\x39\x6b\x39\xfe\x72\x18\x47\xcb\x8c\x71\xba\xe6\x9a\xdb\xe6\x81\x79\xa5\xb2\x1c\x98\xa9\xd0\xae\x20\xd5\x8e\x45\x96\x67\xf7\xa4\x89\x75\xe5\x47\xfb\xc4\x63\x3c\xc5\x33\x3c\xc1\x4b\xbc\xa8\x29\xba\xd5\x21\xe1\x47\xf7\x8d\x09\x8e\xfe\xf1\xbf\xe4\x02\x79\xb6\x86\x6f\xfd\xbd\xc3\xb0\xd1\x96\xbd\xf0\xa8\x2a\x84\xb7\x90\x7c\x47\x4b\x41\x6c\xd2\x9a\xb4\x9f\x6d\x63\x09\xd9\x64\x72\x26\xe6\xe0\x6f\x30\xd7\x5b\xd1\x07\xcb\x1a\x93\x69\x23\x75\x5a\xde\xd0\xc5\x72\x4e\xce\xe6\x74\xfc\xa5\x35\x79\x2f\xd7\x46\xfa\xf7\x84\x8b\x3a\xbc\x2d\x56\xf9\xa4\x6c\x4d\xdf\xcb\xd5\x86\xfe\xd9\x9c\x92\x9c\x5f\x93\x31\xdf\xb9\x10\x27\x6b\xeb\x96\xd0\xfc\xde\x66\x7b\x55\xab\x3c\x0a\xdb\xca\xbd\x2e\x0a\xc8\xb9\x53\xdb\x4c\xa6\x6d\xd4\xcd\x44\xd9\x89\xbc\xcd\xd5\xa6\xd7\x2e\xda\x2e\x0d\xd3\x4b\x17\x9b\x57\xc5\x3d\xe1\xe7\x73\x40\x25\xdc\x69\x5d\xf8\xd9\xda\xd4\x5c\x25\xdf\xb5\xfa\x2a\xdb\xc6\x12\xca\xd7\xb5\xa1\x6c\xdf\x86\xf2\x75\x6d\x28\xdb\xb7\x01\x38\xb0\xd7\xb4\xa2\x9e\x71\x7b\x29\xaf\x69\x49\x3d\xe3\xe6\x52\xb4\x0d\xec\x0d\x7f\x9a\x93\x77\x64\xc9\xc8\x18\xc0\xc6\x3e\x92\xb2\xcc\xee\x49\xfb\x52\xb7\x10\xda\x58\x0b\x70\xd5\x7b\xe7\x70\x5b\xad\x0a\xcd\x5b\x9d\x56\x67\xfa\x40\xfe\xa0\x58\xb3\x56\xb4\x69\x2b\xda\xb7\xe4\x2b\xbf\xd1\x2c\x48\x2b\xba\x45\xcb\x3a\x33\xb2\xc3\xcc\xca\xda\x11\x15\xec\x20\x18\x1c\xee\x56\xe5\xb2\x1d\x75\xb3\x37\xee\x46\x7d\xd5\x8a\xba\x20\x7c\x23\xf8\xca\xdd\x88\xcf\x5b\x13\x57\x16\xe6\xad\xa8\x8e\x5b\x51\x95\x58\x64\xbb\xd5\x77\xda\x8a\xf2\xc7\xcf\xb7\xa7\x6f\x3f\x9c\x8f\xce\xce\x3f\x7c\x68\x49\x78\x96\xb8\x99\x36\x52\x97\x7c\xec\x27\xcd\xf9\xb6\x22\x3f\x69\x55\xef\x59\x56\xee\x4a\xd6\x66\x69\x51\xe7\x33\xcb\x7a\xb7\x22\xbf\x74\x6a\xbd\x9e\x81\x96\xe3\xf8\x51\x31\xe8\xed\x28\x2f\x1c\xca\x9b\xa5\xde\xa6\x78\xb2\x59\x00\x96\x32\xec\x16\x4b\x2c\x77\xac\x7d\x9c\x72\x09\x45\xaa\xed\x5c\xbd\x89\x84\xea\x19\xd7\xa2\xfc\x36\x6a\x3e\xcd\xe6\xf3\xbb\x6c\xfc\xe5\x40\x7c\x39\xd0\xa0\x8c\xdf\xa5\x29\x41\xb4\x75\x68\x85\xb5\x81\x41\xa0\x1d\x6f\x05\x50\xbc\x49\x64\x6f\x65\x1b\xf7\x4a\x74\x78\x35\xbb\xa4\x5f\xaa\x8c\xdf\x02\x85\xfb\x60\xcc\x6e\x84\xfb\xc8\xa4\xe9\x47\xfb\x8e\x96\xcb\x09\xd1\x91\x03\x84\xd6\x3c\x7b\x2a\x56\x9b\x08\x71\xb2\x58\xce\x33\x4e\xfa\x86\x62\xf9\xc6\x23\xa9\x62\xa0\xe4\x12\x58\x76\xb7\x6e\x5c\x23\x8e\xb7\x19\xf9\xd6\x10\x99\xaf\x11\xee\x27\x8a\x01\x21\x93\x83\x29\xc9\xf8\x8a\x91\xfa\x54\xd3\xc2\x75\x9b\x21\xcc\xd2\xe7\x92\xe4\x93\x60\xb4\x89\xef\x1d\xa2\x52\x42\xe6\x40\x31\xa5\x72\x08\x53\xbf\x06\x04\x7c\x4c\x8b\x5e\x6f\x2f\xde\x03\x3d\xbc\x7b\x97\x96\x23\x7d\x9f\xa1\xaa\x5c\x77\x10\x31\xe8\x92\x80\x5b\xe1\x20\x2c\x66\x1e\x60\x2a\x14\x91\xdc\x9c\x5f\xbe\x1b\x9d\x9e\xdd\x5e\x5c\x5d\x2a\x97\xe3\x35\x6a\xce\x5e\x8f\x0f\xa8\xb7\x71\x0c\xe1\x02\x94\x27\x0f\xd9\x7c\x45\xe0\x7a\x59\x96\x26\x37\xd2\xb0\x65\x97\xe7\xb1\x45\x52\x0b\x9b\x19\xc0\xdf\x12\x03\x9d\x44\xfb\xa4\xe9\x03\x63\xa2\x9b\xef\x49\xeb\x30\x8d\x30\xe0\x98\x97\x34\x03\x70\x61\xea\x8c\x56\xfe\xd3\xd1\x49\x2e\x47\xab\x48\x8f\x8e\x8b\x1f\x73\xb8\xfb\xa0\x83\xc2\x1f\xad\x62\xd8\x09\x19\x98\x9c\x70\x3f\xb0\x02\x45\x12\x55\xcc\x83\x27\x8d\x9f\x15\x42\x2b\xaf\xc1\xb3\xd2\x0a\x55\x55\x25\x7d\x96\x6b\x00\xaf\x99\xbb\x2c\x57\xad\x97\x65\x50\x91\xb7\x13\x04\xfb\x76\x7d\xea\xf7\x81\x67\x1f\x1b\xf6\x51\x42\x91\xe7\x10\x56\xec\x1d\x29\xc7\xef\xc8\xb8\x60\x19\x2f\x18\x12\xfb\x66\x3e\xa5\xf7\x2b\x75\xfa\x1e\x61\xf7\x2c\x3e\x5a\xeb\x88\x58\x93\xdd\xb5\xd7\x51\x85\x70\xb6\x5c\x92\x5c\x6a\x8d\xea\x01\xf7\x7c\x7d\xd2\x1a\x20\xfc\xb5\xd8\xa1\xed\x74\xb1\xff\xa6\xe0\x24\xbe\x69\xc3\x60\x08\x88\x75\x8d\x58\x49\x21\x77\xfd\xfe\x40\x1a\x51\x83\xd4\x10\x61\xfb\xe3\x2d\x05\x75\x8e\x18\x7d\x9a\xd3\x1a\x54\xbc\xb9\xc1\x0f\x5f\xf5\x57\xd8\xd2\xec\x33\xdc\xa0\xd9\x67\xaf\xec\x63\x5f\x9f\xfe\xda\x69\xae\x0f\xfa\x75\x87\x50\xdb\x93\xa5\x9d\x57\xe2\xf3\xd1\x7f\xf4\x23\x19\x82\xf5\x92\x3c\xce\x69\x4e\x22\xfc\x97\xff\xde\x8f\xc6\x59\x3e\x26\xf3\xa8\xc2\x59\x7d\xa8\x58\x72\x0b\x1b\xb9\x27\x5f\xe0\x67\xd8\x6d\xfb\x51\x84\xc5\xfe\x48\xef\x56\xdc\xf6\xe7\x20\xca\x56\xbc\x18\x67\x4b\xca\xc1\x03\x25\xc2\xf2\x45\xc1\x98\xb4\xe3\x16\xbf\xa6\xc5\x78\x25\xba\x6a\x62\xd4\xba\xd1\xb4\x60\x8b\x08\x47\x8b\xec\xab\xc6\x4f\x8b\x16\x34\x37\xcf\x00\x1c\x36\x2b\xe6\x13\xb8\x1e\x61\x24\x9b\x14\xf9\xfc\x09\x1e\xff\xb9\xa2\x0c\x48\x94\x64\x2e\x41\xbe\xdf\x51\x46\xb4\x71\x7a\xb9\x24\xf3\x39\xd8\xe4\x44\xe2\x54\xba\x53\x37\x3f\x11\xa7\x7c\x2e\x18\x2c\x87\xb0\x84\xac\xd6\x75\x12\x8b\xdc\xd4\x46\x85\x72\xd8\x75\xf6\xc9\xfb\xb1\x22\x8f\xa3\x65\x56\x72\xe2\x01\xb6\x10\xa5\x9a\x11\x5d\x69\x80\xea\x9c\x1c\xe3\x15\xdf\x29\x3d\xcd\x97\xad\x72\x54\xf8\x6e\x75\x77\x37\x27\x25\x04\x37\x10\x33\x71\xc9\x08\xff\x95\x3c\x81\x5e\x24\x64\x0c\x56\x0c\x48\xf2\x85\x3c\x9d\x15\x13\xc9\x13\x6c\xa0\x1e\x23\xcc\x3d\xf7\x2d\x3e\x04\xeb\xc3\x70\xea\xbe\xef\x80\xe9\x06\x15\x89\x60\x8a\xc9\xe6\x24\x2a\xb3\x3a\xe4\x2b\x3c\x6e\x46\xca\xd9\x54\x27\x62\x02\x0f\xab\x59\xef\xe5\x2c\xe3\x88\x88\x5e\x50\x5d\x47\x10\x2e\x63\xb5\x48\x0e\x72\xbd\x4a\xb8\x89\xdf\x0c\x4b\xa5\x41\xa0\x1c\x67\x4b\x72\xb0\x64\xa4\x2c\x9d\xc4\x30\xcd\x2f\xf2\x7a\x6a\x78\x7d\x40\xf3\x7a\xca\xab\x55\xd3\x5b\x6d\x7d\x9b\xb0\xa1\x54\x98\x71\x17\xa4\xbe\x90\xa7\x4f\xa2\x1e\xf5\x52\xbf\x90\xa7\x46\x05\xbf\x90\xa7\xcf\xcb\x66\x99\xcd\x59\xa1\xca\x13\x34\x84\xf4\xe2\x12\x78\x57\x3c\x36\x5a\x28\xd2\x4d\x8a\x47\xa7\x85\xae\x61\x5b\xe9\xda\x2c\x15\x5e\xa8\xee\x3a\xc3\x65\x3e\x10\x84\x33\x3f\xa5\x9c\x20\x48\xe2\x79\x3b\x1c\x64\xaf\xd7\xb0\x23\x2e\xd0\x33\x5b\xc3\x16\x15\x35\xb6\x68\x90\xe1\x7c\x58\x49\x40\x9a\x00\xd3\x55\xf4\x7a\x45\x9c\xe1\x1c\x75\x80\x31\x76\xeb\xa3\x56\x55\x84\x7a\xbd\x3c\x29\x79\xb1\x14\x27\x5b\x76\x9f\xc9\xf9\xed\x84\x06\xc8\x5a\x9f\x31\xa1\x1b\xce\x7f\x57\xc4\xbd\x11\x67\x59\x5e\x52\x41\xe4\xb6\x08\x6c\x0a\x72\x72\x8e\x57\x8c\x91\x9c\x83\xb6\x0c\xb3\xc0\x4b\x6d\xa2\x27\x9e\x41\xa6\x70\x7e\xa7\x04\x03\x38\x05\xf9\x4a\xcd\x7f\xe5\x72\xcd\x12\x58\x93\xbd\x9e\x7a\x30\x5c\xd4\xab\x04\x46\xff\xc6\xf7\xbf\x5c\x5c\xbc\x63\xc5\x63\x49\xd8\xc1\xb6\x10\x0d\xdf\x62\x33\x50\x37\x45\x68\x2f\x82\x06\x7c\x97\xcd\xca\x5c\xd5\x8c\x64\xd7\x40\x31\xae\x67\xe0\x1a\xfc\x40\x34\xc4\x39\xc9\x18\x29\xf9\xd5\x14\x42\x75\x84\xa5\x5a\x09\x70\x92\x31\x75\x57\x81\xf3\xd4\xf3\x7b\x53\x02\x4a\x28\xf6\xbd\x46\xaf\x89\xb9\x6b\x92\x1b\xfa\xee\x81\xe4\x55\xc7\xfc\x58\x59\xd7\x5b\x27\x17\xde\x11\xa2\xa4\xad\x46\x55\xe9\xca\xff\x4e\xf9\x2c\x18\x11\x6b\x6d\x13\x34\x7d\x02\x5e\x5f\x1b\x4a\x60\x84\x91\x7c\x42\xd8\xda\x18\xb4\xee\x72\x4a\x74\x6a\x8d\x3d\xa0\x4e\x07\x09\x76\xfa\xdd\xe4\x18\x1d\xad\x5c\x94\x44\xdc\x4b\xbd\xba\x34\x13\xda\x1a\x8c\xae\x27\xa5\xc9\x2c\x2b\xdf\x5d\x7d\x0c\x6c\xc9\xe4\x64\x52\x8c\x81\x4b\x4a\x60\x26\xdf\x00\xef\x56\xb0\x98\xa0\xbe\x32\x7d\x32\xc5\xeb\xa2\x6a\x18\x7e\xf2\xf5\xba\xca\x9b\x4c\xa6\x9c\xbb\x62\xf2\x64\x7b\xec\x62\x22\x79\xba\x47\x3a\x9f\x5f\xc0\x69\xaf\x9a\xd8\x5f\xe1\x09\x9d\xd4\x5f\x41\x98\x82\x39\xc9\xd8\xb5\x1c\xac\x55\x28\x7e\x6f\x4b\x7e\xd0\x1f\x51\x1d\xc0\x57\x0d\xa8\x83\xd5\xe7\x55\xa8\xf1\xce\x4e\x22\xcb\x4f\xad\x30\xcf\xee\x85\x78\xf3\x4d\xfc\xaa\xe9\xa1\x97\x97\x28\xd2\xe8\xcd\x8a\xf0\xcb\x4b\xec\xa7\x51\x87\xb2\x07\xda\x81\x2a\x2c\xf1\x62\x81\x79\xd8\x14\xc0\xc8\xeb\x09\x27\x8f\x8e\x2c\xc7\x51\x55\x75\xca\xe4\x3f\xff\xd7\xe7\xf3\xeb\x3f\x46\x17\x97\xb7\xe7\x3f\x5f\x9f\xca\x53\x3e\x9e\x27\x7f\xaa\xbb\xca\xb8\x55\x33\x5e\x6d\x27\x00\x9f\xa8\x3d\x98\xb5\x61\x9d\x4e\xd5\xf7\xbf\x7a\xdf\x2a\xa4\x7c\x3a\x6a\x0a\x12\x4f\xfd\x3b\xde\x7e\x0c\x85\xcd\x6f\x9c\x83\xc8\xdd\xa9\xd7\xed\xcd\x3c\x46\xcf\xce\x86\xcc\x21\xfe\xa2\x8e\x87\x24\xb9\x9a\x32\x7d\xae\x5a\xd7\xa6\x69\x75\xb6\xf9\x60\xdc\x0e\x53\xbc\x2d\x68\x56\x2b\x01\xb8\x5e\xe5\xef\x6f\x99\x57\x1f\x86\xf6\xf4\x47\xaa\xcf\xec\x7d\xf3\xab\xce\xf5\xdd\xce\x6a\x6d\x8b\xd5\x86\x8d\x9b\xa5\xcf\x8b\x62\x55\x12\xe0\x99\xfa\x11\x3c\x17\x0f\xa2\x91\xf0\x38\x27\xd9\x03\xd1\xaf\x57\x3c\xaa\xf0\x24\x2d\xea\xd7\x05\x44\x8a\x81\xcf\xbc\x58\x8d\x67\x25\xcf\x18\xef\x47\xf0\x7c\x23\x9e\x23\x0c\xcf\x8b\x42\x10\x82\xc7\x8f\xc5\x03\x51\x6f\xc5\x76\x2c\x5f\x9e\xe7\x13\xf5\x4e\x09\x4c\xf2\xf5\x99\x54\x34\x08\xb1\x41\x88\x07\xfd\x48\xc9\x0f\xf0\x66\xb5\x84\xdf\x9f\x97\xf0\x0b\x44\x15\x78\xf1\x49\x0a\x2d\x50\x6b\x99\x0b\x1e\x65\x3e\x78\x14\x39\xe1\x41\xe4\x55\xa1\x87\x16\x24\x5f\xa9\x70\x0e\x5f\xf9\x47\x92\xaf\x22\x3c\x9e\xd3\xf1\x97\x7e\x34\x96\x96\x58\x93\xbb\xb9\x7a\x31\x29\x56\x77\xc6\x40\x0b\xe8\xc8\xe6\xc1\xa3\x6c\x1e\x08\x5a\x34\xef\x47\x4a\xa4\x53\x6f\x8a\x15\x57\xaf\xae\x84\x0c\xd6\xe8\xfb\x73\x29\x58\x36\x3a\xff\x83\x78\x8e\x70\xb9\xba\x5b\x50\xde\x8f\xe4\xff\x08\x83\x08\xdf\xd7\x92\xbc\x92\x72\xa3\xb1\x0e\x7e\xc3\xb2\x7b\x35\x1e\xe2\x51\x0d\x87\x78\x94\x2f\xe4\xb3\x2a\x5e\x3c\xaa\xd2\xc5\xa3\x2a\x5c\x3c\xaa\xb2\xc5\xa3\x98\x1a\xf2\xe5\xd5\x83\x4c\x59\x2c\xc5\xef\x62\xa9\x69\x4d\x34\xa5\x49\x54\x61\x56\x14\xe6\x44\x8c\xc4\x69\x1a\x6d\x3a\x61\xb4\xd5\xb0\x5c\x34\xbf\x48\xfc\xf0\xb2\xe6\x30\x0e\x77\x69\x80\xd3\xd2\x08\xa3\xef\x06\x2d\x81\x98\x82\x52\x12\x95\x2a\x7a\x07\x7e\x12\xb0\x5a\x1c\x95\xbd\x9c\xbf\x10\x28\xa6\x23\xcd\xf0\x65\x10\x06\xea\x6a\x17\x9c\xa6\x44\x98\x23\x13\x8e\xa8\x4e\xcc\x4d\x27\x11\x7f\xa7\x81\xc3\xe8\xe5\xa5\xac\x19\x1c\xa2\xb8\x30\xfe\xdd\x06\xaa\x31\x3b\xc9\xfa\x6b\xb8\x9e\x0c\x21\x89\xbe\xf6\x81\x96\x10\xa0\x37\x56\x18\x25\xe2\x98\xa6\x6a\xaf\xb1\x2e\xe6\x32\x06\x56\x69\x8f\x2d\x91\x3f\x9b\x4c\xc0\xea\x22\x98\x15\xef\x15\x09\x2d\xe3\x28\x09\x7c\x43\x36\xe0\xa6\x60\xd1\x01\xa5\x22\x8e\x3e\xe7\xa2\x25\x5d\x5e\x74\xb3\xc9\xa4\xfb\x43\x23\xdf\x0f\x5d\xa8\xb0\x48\x20\x7a\xa9\xab\x0e\xcd\x6e\x1c\xed\xc7\x45\x52\xaa\x96\xbd\xbc\x14\x83\xc3\xa1\xe6\x1e\xd0\x7e\x84\x92\xee\xc7\xec\x0b\xe9\x96\x2b\x46\xba\x4f\xc5\xaa\x5b\x12\xde\x75\xba\x59\xd0\xe3\x33\xd2\x15\xf3\xab\x5b\xb0\x6e\x96\x1b\xca\x82\x91\x56\x5f\x92\x08\x19\x5f\x92\x95\xf8\x90\x23\xf0\xb3\x71\xdc\x0a\xe3\x95\x86\x38\x84\xd9\xa5\x26\x60\x5c\xe0\x15\xce\x07\xab\xa1\x9e\x75\xea\x7d\xc8\x83\xc5\x38\x6a\xef\x30\xee\x6a\xda\x86\xa6\x32\x30\x1a\xbe\x7d\x1c\x02\xa7\x9f\x74\xef\xd0\x78\x02\x01\xba\x47\xee\xb1\x42\x0c\x4c\xf5\x69\x85\x69\x90\x2c\xb8\x12\x9c\x6a\xb9\x2b\x8e\x26\x19\xcf\x0e\xd4\x68\xe9\x8b\x2d\x9a\x1a\xcb\x97\x26\xd3\x30\xc8\x41\xab\x07\xac\x9e\x51\xca\x90\xc4\x88\x72\x25\xce\xd2\x42\xdd\x5f\x75\x28\xf8\xb7\xaa\x9e\x57\x80\xb8\x80\x80\xfb\x2c\x45\xc3\x22\xa1\x9c\x2c\xe2\x12\x75\x0e\xd3\x34\x9d\x83\x93\x96\xf5\xb4\x6c\xd4\xed\x20\x92\xf0\x29\x54\xc3\xd2\x6e\xaa\xe7\x5c\x2a\x00\x87\x08\x55\x15\x9d\xc6\xd4\x4a\x5f\xe3\x74\xef\x10\x4f\xd3\xc3\xe3\xa9\x75\x23\x9a\x5a\xdc\x5c\x3a\x98\x0e\x3b\xb3\x5e\x6f\x96\xc0\xe6\x00\x8e\xea\x69\xca\x7a\xbd\x78\x9c\xce\x54\x5f\x33\x80\x3c\x18\x1b\x87\xa0\xb1\xbc\x9c\x34\x57\x7c\xb3\x01\x1f\xea\xce\x11\xcf\x78\x92\x72\x5c\x47\x54\x90\xaa\x14\xb3\xc6\xe5\x26\x27\x47\x31\xfa\x08\x07\xc2\x83\xdc\x49\xac\xa1\x6f\x4e\xb9\xfd\x12\x13\xbc\x77\x24\xfe\x78\x22\x98\x08\x0c\x28\x33\x19\x9d\x63\x9e\x94\x63\x46\x48\xfe\x57\xf3\xf4\x07\xe6\xc9\x18\x0c\x5c\xff\x6a\x9e\xe0\x1d\x67\xf3\x5f\xc9\x13\xe6\x49\x36\xe7\xf2\xa1\x9c\xd1\xa9\x7a\x14\x8c\x98\x7c\xba\x5b\x71\x5e\xe4\xc0\x44\xce\x05\x2b\x22\xf5\xfc\xeb\xcc\x5e\x98\xb9\xd1\xd5\xca\x7f\xae\xc3\x13\x7a\x26\x2a\x32\xa0\xec\x22\x0d\xec\xfc\x83\xc2\x8f\xd1\x64\x25\x67\x13\xe9\x90\xa5\xc4\xaf\xce\x31\xef\xf5\x20\x7e\x4c\x92\x17\x13\x22\x36\xa7\x5e\x4f\x7b\x27\xb2\x97\x17\x26\x71\x9a\xf7\xe2\x43\x3c\x4e\x14\xea\x5c\x89\x62\xb1\x7e\xd1\x31\x0a\xae\x37\x8e\x4e\xf2\x98\xe3\x65\x3c\xc1\x04\xa1\x3e\xc4\x1e\xdf\xbc\x78\x7a\x3d\x6a\x33\x60\x2b\xbe\x5f\x16\x13\x52\x75\x88\xd8\x76\x61\xec\x34\x9c\x45\x5c\xe0\x85\xd4\x1f\x3e\x4b\xd7\xdf\x50\x5f\xf0\x61\x00\xea\x44\xf7\x43\x67\x52\x88\xed\x67\x4d\xfd\x25\x6e\x87\xe8\x95\x1c\x40\x73\x65\x94\x39\x20\xaf\xe2\x9e\xc7\x80\xc4\x5e\xd7\x40\x5a\x8f\xcd\x3d\xe9\x9d\x29\x39\xb3\xb7\xa0\xb6\x94\x1e\x9a\x95\x3e\x5f\x82\x78\x06\x6e\x4f\xf5\x7a\xad\x7a\x0e\xaa\x49\x65\x35\xa5\x0f\x68\xad\xff\x24\x22\x46\x63\x94\x51\xb0\x63\x39\x7e\x40\x95\xac\x23\x49\x8a\x3c\xe6\xfb\xea\x38\x8b\xb0\x3e\xd7\xa4\xbf\x4a\xb3\x6b\xc3\x7d\x09\xaa\xc6\xdc\xd9\x7e\x39\xc4\x02\xe5\xb5\xed\x37\x3e\xc4\x73\x47\x7e\x44\x10\x0f\x54\xf4\x71\xad\x0e\x83\x46\x1f\x0c\x43\x75\x21\x89\x92\x7a\xe5\x1c\x77\x37\xda\x5c\xec\xae\x80\x83\xe9\x15\x68\x36\x5c\xe9\xe8\xc9\x3d\x47\x4f\x65\xc8\x21\xf7\x5d\x0a\x4c\x0a\xc0\xf8\x48\x74\xcc\x64\x9e\x95\xfc\x62\xc3\xfe\x8b\x0f\x15\x8c\x48\xb6\xf1\x8c\x28\xd4\xde\x2b\xed\x39\x6a\xdb\x28\xc4\x78\xb2\x41\x41\x32\xb1\xa7\x67\x66\x5f\x25\x08\xe7\x12\xbd\x20\x83\xe8\x3e\x10\xf1\xbe\xa1\x3b\x01\x04\x39\x69\x81\xb1\x99\x03\x23\xce\x3c\x39\xe1\xeb\x18\x2a\xbd\x4e\x5a\x1e\xdb\x3e\x46\x53\x73\xc1\x22\xa2\xc0\x41\xfd\x19\xc9\x42\x2c\xee\x80\x0d\x25\xa7\xe6\xb3\x68\x1c\x25\xc5\x74\x1a\xdb\xe9\xf2\xe7\x3f\x3b\xc8\xa9\x0e\xf7\x27\x0b\x0a\x73\x71\xdb\xef\xbb\x2b\xac\x3d\x36\x9b\x9a\xb1\x28\xae\xd9\x3e\xa3\xc8\x57\xa9\x4f\x5a\x6b\x0f\xb4\xc0\xfd\x6d\x41\x8a\x37\x6a\xca\xdb\x89\xc9\x35\xb1\x58\x42\x27\xda\x16\x91\xda\x48\xfb\x17\xe2\x7b\x79\x70\x7a\xec\xc9\xdd\xe8\xfc\xf2\xb7\x64\xd4\xfc\xde\x69\xd0\x2c\x70\x88\x4e\xaf\xc7\x8c\xfe\x33\xa6\xa9\x0d\x8a\x4b\x17\xd0\x63\x8a\x0a\xde\x2b\x7a\x3d\x7a\x42\xe5\xa2\x12\xbb\x9e\xd8\xb6\xeb\xbf\xe5\xda\xbd\x65\x59\x5e\x4e\x09\x8b\x50\x7f\x10\x19\x79\x30\xc2\x4a\xfe\x8b\x8c\x00\xa8\x9e\xe7\x52\xd6\x8b\xb4\xb0\x07\x8f\x10\x2e\x4a\x89\x77\xd1\xb0\x89\xe8\x41\xd0\xb3\x2e\x7c\x4a\xbf\xfe\x52\x14\x5f\xca\x01\x19\xa6\xcf\x4b\x56\x2c\x4b\x51\xae\x5b\x91\x61\x55\xa1\x7e\xb3\x43\xd2\x3d\x15\x17\x2c\x4b\x0b\x1d\xf9\xc0\x1d\x96\x16\x77\x60\x5b\x35\x2f\x3b\x85\x6d\xdf\x36\x13\x77\x54\xd1\xac\x55\xc6\x04\x7c\x82\x49\x7b\x9d\x5c\xdd\x13\x70\x7b\x13\x25\x92\xe0\x16\xb3\x28\xa3\x43\xf4\x4e\xa1\x72\x39\xa7\x3c\x8e\xde\x44\x08\xb3\x94\x0f\xf4\xa9\x72\x70\x64\x90\xa0\xbc\x97\x69\x34\x8a\xf6\x19\xe6\xc9\x3f\x0a\x9a\x43\xb6\x2a\xd4\x6c\x05\x2c\xe6\x83\x4b\x35\x60\x2d\x65\xbc\x55\xb1\x41\x6b\xe4\x2c\x19\x4e\xc7\x11\x45\x0d\x46\x65\x1c\x19\xe8\xd1\xee\x63\x56\x76\xf3\x82\x77\xa7\xc5\x2a\x9f\x74\x1f\x67\x24\xef\x8a\x3e\xa3\xf9\x7d\x77\xb5\xec\x66\x5d\xe8\xd1\xae\x36\x42\x4d\xba\xb7\x33\x5a\x76\x69\xd9\x5d\x14\x25\xef\xce\xe9\x17\x32\x7f\xea\x4e\x56\x20\xd5\x2e\xb2\x7c\x95\xcd\xe7\x4f\xea\x9e\x89\xd3\x8c\x0b\x32\x59\xde\x95\x60\xaf\x82\x47\x48\xba\x37\x84\xf4\xbb\x33\xce\x97\xfd\x37\x6f\xee\x29\x4f\x68\xf1\xe6\xfc\xd7\x4f\xcb\xfc\xd4\xdd\xbb\x95\x4d\xab\x35\x7e\x8d\xf6\x39\x7a\x79\x09\x7e\xc8\x51\x15\x73\x2c\x06\xc2\x09\x78\x40\x2b\x4c\x1c\xf3\xf3\x00\x4e\x1b\xff\xff\x62\xcf\x00\x8f\x78\x2d\x2d\xb4\x25\x17\xea\xf5\x84\x60\xa5\x5e\x5e\x36\x27\x02\xd3\x81\x96\xab\x67\x3d\x9e\xe3\x0e\xf0\xd3\x3b\x2d\x25\x75\xac\x46\x7b\x80\x76\x22\x75\x1c\xbd\x1e\xb1\xb7\x23\x27\xce\xb3\xbc\xa3\x33\x37\x25\x00\xcf\xe8\xf9\x79\x06\x45\x02\x2d\xbc\x89\xe9\xa4\xa4\x37\xf1\x28\x85\x3b\xf1\xa4\x05\x3e\x21\x3c\x3d\xce\xe8\x78\xf6\xd3\x91\x46\x07\x13\xb2\x11\x04\x5c\xd9\xe6\x2f\x15\xd8\xb6\x7e\x50\x37\xb8\xdd\x52\x64\xe9\x5a\x26\xb5\xbb\xc8\xc4\xcc\xe0\xac\x98\xac\xc6\xa4\x3b\x66\x45\x59\x1e\x94\x94\x93\xae\x84\x71\x12\x79\x1e\x56\xf3\x5c\xc8\x84\x74\x4e\x39\x25\xe5\x71\x77\x39\x27\x99\x60\xdb\x73\x50\xfb\xf0\x59\xc6\xbb\xc0\x4f\x96\xdd\x3b\x22\x32\xdc\xc1\xac\xcd\x18\xe9\x2e\x41\xe4\x9c\x3f\x75\xa5\x4d\xcd\x24\xe9\xbe\x2f\x98\x42\x26\xc9\xa7\x05\x5b\x40\xbd\x71\x97\xe6\xe3\xf9\x0a\x2a\x38\x2b\x1e\xc5\xac\x55\x76\x5b\xc0\xbd\x75\x1f\x33\x96\xd3\xfc\x1e\x77\x4b\x42\x60\x92\x96\xfd\x37\x6f\x60\xc4\xff\x51\x26\xe3\x62\xf1\xc6\x39\x49\xca\x37\x0f\x47\xc9\xd7\x37\xff\x3f\x5e\x8c\x47\x77\xb2\xd1\x07\xd0\xe8\x03\xdb\xe8\xa4\x7b\x23\xbb\x61\x3a\x25\x63\x4e\x26\xfd\x6e\xf4\xc3\x3e\xd9\xff\x21\xfa\x41\x61\xe4\x19\x67\xd0\xe0\x20\xea\x7d\xc0\xf7\x59\xe8\x2f\x32\x9a\xc3\xee\x6b\xc1\xf7\xfc\xb0\x7e\xc1\xc3\x59\x29\x46\x07\x64\xd8\x51\xa2\x70\xee\xdc\x28\x0b\xae\x03\x98\xed\x1c\x55\x2a\xdc\x8e\x71\xf8\x4c\x73\xf9\xcb\x91\x82\x42\x07\x16\x55\xe0\x14\x2f\x2f\x1a\x99\xd0\xf7\xb9\x0c\xe5\x29\x1a\x79\xca\x75\xe5\xc0\x96\xe6\x41\x02\x96\xeb\xc8\x8b\xa4\x85\x97\xb4\xee\xd5\xe8\xdf\x00\xda\x38\x3e\x26\xed\xba\x7a\x17\x7e\x5a\xcf\x68\xb7\x31\x86\xcc\x98\x1e\x99\x80\x56\x9b\xc7\x54\x0f\xe7\x4a\xe2\x9e\x61\x19\x5d\xd0\x29\xa1\xc4\xc4\xb3\xf9\x0d\x2a\x92\x32\x0d\xfb\x65\x2c\xd6\x59\xaf\x17\xb3\x14\xe0\x84\x3a\x60\x34\x2c\xed\x17\xe4\x1a\x9f\x0b\xd9\xc7\x29\x63\x65\x47\x4e\x3a\x7a\xa7\x73\xfb\xe6\x1a\x62\x02\x8f\xed\x0b\xc7\x4d\x3b\x34\xc0\x63\xd1\x66\xd1\x4b\x36\x59\x8c\xaa\x5a\x09\x9e\xd3\xf5\x26\x2a\xcd\xd4\x92\xd8\x02\xe4\x92\x35\xe6\xff\x53\x05\xbe\xa6\xa7\x82\x52\xf8\x34\x4f\x4b\x0b\x34\x6e\xb5\x42\x56\xd0\x52\x6f\x62\x2e\xe5\xea\x63\x5f\x25\x71\x8c\xe8\x34\xe6\x0e\xfa\x95\xd1\x0e\x48\xb0\x45\x32\xff\xa8\xea\xe8\x21\x0c\xba\xf8\x6e\x45\x03\xc3\x27\x0b\x23\xa5\x95\x76\x8f\x10\xdf\x6f\x88\xb1\x9d\xc8\xcc\xa4\xc7\xbc\x72\xcc\x73\x9c\xc9\x31\x18\xe2\xdc\xce\x10\x0f\x18\x4e\xc7\x11\xdd\xb2\x7b\xec\xe5\x2f\x2f\x79\xe2\xc6\xd7\xf1\x7e\x93\xc9\xcb\x8b\xbf\x97\x98\x8a\xcc\x5d\xf6\xd6\xb3\x13\x91\x13\xcd\x43\x46\x1a\xdb\x56\xce\x65\xf8\xc6\x9a\x82\xf4\x5a\x5a\x8e\x76\x5c\xf7\x68\xb8\xdd\x7a\x4b\xa6\x05\x23\xb1\x90\x43\x58\x09\xa3\x83\xb0\x74\xcf\xce\x27\xa7\x53\x30\x0b\x03\xfd\x86\xfa\x02\xde\x0c\xd3\xd4\x41\x36\x33\x57\x2f\x6a\x07\xe8\xf5\x62\xf5\xe4\x20\x1c\xa9\x39\xf7\xf2\xb2\xf6\xd3\x8d\xb9\xcc\x08\x24\x29\xfe\xf5\xb1\x45\xaa\xb2\x45\xa2\xa2\x45\x9a\x47\x72\xf7\x85\xf2\x5a\x42\x21\xc2\xdb\x79\x39\xdd\xce\x30\xad\x03\x11\xd9\xd5\x22\xc1\xc8\xe0\x72\x11\x88\xc5\x65\x7d\xcd\x62\x06\x5c\xbe\x1a\xd6\x67\xe9\x3a\xd6\x27\x89\xf1\x21\x53\x09\xb0\x75\x3e\xa3\x55\x58\xa6\xf0\xca\xd0\x1b\xaf\xc9\x76\x20\xdf\xe8\xad\x57\xc6\xb0\x8b\xf3\xa4\x84\xf8\x4f\x62\x4e\x9b\x68\x42\xc8\xe8\xcb\x20\x06\xb5\xa0\x2b\x5d\x90\x0c\xb1\x97\x97\x42\xd5\x50\x6f\x19\x85\x81\x54\x96\x79\xda\x70\xa4\x0d\x08\x9d\x76\xfe\x7e\x6d\x70\x79\xa4\x29\xe5\xab\x3d\x61\x6a\x71\x28\xf4\xb5\x3f\x4f\x40\x35\x44\x26\x98\x27\x52\xe7\xa7\xd4\x59\xf8\x99\x96\x62\x7f\xef\xef\x1d\x62\x65\xc6\xd9\x37\x02\x48\xe3\xfe\xd7\x58\x87\x6f\x37\x82\x92\x26\xa0\xd1\x92\x11\x69\x52\x15\x05\x8c\xa3\x3c\xeb\xd1\xc4\x24\xc5\x7b\x9e\x81\x98\x23\x1a\xa9\xbb\xcb\xb3\x2c\x17\xb2\x90\x95\x5f\x48\x37\xeb\x9a\x21\xee\x3e\x52\x3e\x2b\x56\xbc\x9b\x75\xcd\xd6\xd5\xfd\xd4\xe4\x50\x9f\x8a\x15\xb0\xa4\xb0\x4b\x09\x4e\x53\x86\x1f\xdd\x8f\x80\x40\x37\x53\xbc\x6a\xd7\xc4\xbb\x79\xa3\xb9\x80\x24\x42\x95\x63\xa0\xa5\xad\xb1\x04\x0f\xbe\x00\x3d\x3d\xcf\xe8\xdc\xb7\xd0\x36\xbb\xa9\xc4\x64\x53\x46\x57\x06\x6d\xd0\x9e\x77\x10\x80\x43\x75\x4c\x23\x30\x07\x26\x70\x71\x24\x23\x8c\x91\x0a\x2b\xa3\xe7\xb6\xbe\x84\x2c\xec\x4b\x98\xa7\x47\xc7\xf9\x8f\x1c\xa0\x91\xd9\x20\xf7\xbd\xd3\xf2\x61\x67\xeb\x90\xab\x43\x12\x3c\x02\xa4\x0f\x41\xe0\x86\x81\x22\xc3\x7f\x3a\x44\x18\x18\x93\x85\xfa\x6a\x4d\xe0\xd8\x01\x19\xaa\x88\xae\xca\x0e\x41\x5a\x9f\xe7\x6e\x60\xc6\x58\x4d\x6a\x15\xc3\x18\x2e\xae\xf4\x41\xee\x46\xc4\x68\xbb\xd0\xd5\x9a\x6c\x8d\x27\xe6\xe6\x7a\xb3\x64\x64\xc4\xd4\x12\x68\x9f\x6b\x96\x95\xda\x35\x60\x97\x6c\x34\x1f\x4d\x8a\xc5\x2e\x39\x26\x36\xfa\xde\xeb\x3d\x8f\x7c\xaf\xb0\x67\xb3\x92\xfb\xdc\xd9\x4a\xde\x5d\x7d\xec\x1b\x98\x0d\x31\xe8\xda\xd8\xc4\xee\x37\xb6\x32\x7d\x0b\x9a\xe1\xc5\xdc\xda\x6d\xc8\xde\xa8\x7c\xc1\xa1\x0b\xe9\xd6\xda\x19\xd3\x3f\x07\x7d\xfd\xd0\xb3\xdd\xa8\xb8\xd5\xe1\xfc\x51\xac\xba\xe3\x2c\xff\x81\x77\x05\x65\x27\x67\xb7\x58\xf1\x92\x4e\x48\x17\x66\x36\x51\x9b\x95\xd8\x88\x54\xb4\xaf\x68\x9d\xa1\xa5\x83\x48\x1c\xb4\x2f\x0e\xde\xc0\x54\x4e\x10\x0d\x35\x50\x6c\x47\xdf\xb8\x75\x13\xa7\x65\x8c\x0d\xd9\xe1\x3b\xcd\x4d\x39\x7a\xaf\x8d\xb3\xa3\xe3\x26\x69\x5b\x22\x3b\xfb\xb6\x8f\x20\x0b\x8d\xa0\x10\x50\xfc\x21\xcc\x95\xee\x4d\x29\x3a\x26\x26\x5e\x26\x0a\x0f\x4d\x9b\x02\x74\xbe\x8d\xd4\x2b\x84\xeb\xeb\x8e\x7e\xcb\x4a\xf1\x36\x9c\x76\xe3\xb9\xc3\xf2\xd3\x59\xd8\x2a\x9f\x17\x85\x83\x69\x68\x4f\x4d\xa9\xf6\x7f\xfd\x1e\x54\x1f\x6c\xbb\xab\x3c\x37\x07\x02\x82\x9f\x1b\xee\xc0\x58\xdd\x93\xd0\xe5\x65\x3d\x2d\x5c\xdf\x91\x0d\x46\xd0\x82\x5b\x53\x0b\x94\xa8\x68\x1b\xe0\xed\x44\x93\xe9\x3c\xbb\xbf\x27\x93\x0b\xd3\x68\x14\x47\xd0\x89\xf2\xba\x36\x89\xf6\x39\x96\x16\x9a\x7d\x86\x45\x4f\xf6\x49\x85\x43\x6e\xc8\x39\xa8\xe9\x51\x4c\x20\x92\x04\x30\x01\x12\xef\x56\x1a\xef\xd7\x26\x46\x81\x76\xbb\x9b\x09\x1e\x29\x3b\xf9\xd5\x7c\x8f\xd5\xef\xce\xc8\x6f\x9a\x16\x9e\x3d\x21\xb5\xd3\x42\xda\x52\xae\x1d\x67\x79\x47\x2e\x15\x48\x5f\x29\x5f\x97\x70\x95\xbb\x49\xbf\x77\xef\xbb\xdc\xc3\xab\xd8\x8f\xc6\x12\xb4\x43\xf3\x3a\x19\xa3\xde\xa1\xdc\x06\x76\xa3\xb5\x96\xe7\x68\x2d\xb7\xe5\xdc\x7b\xbf\xb9\x9f\x17\x77\xd9\xbc\x3c\x60\xa4\x2c\xe6\x0f\xf5\x96\xca\x7b\xf2\xf5\xc1\xdc\x5e\xeb\xd1\x65\xc2\x5f\xb5\x90\xd7\xdc\xda\x42\x0f\x67\x73\x3a\xc9\x38\x39\x10\x8c\x69\x90\xc4\xfd\x9c\x2e\x16\x5b\x40\x38\xdb\xf4\xf7\xfc\xbf\x28\xd6\x2c\xa6\x4a\x3b\x93\x06\x9d\xaa\xe4\x37\x1b\x98\x10\x73\x54\x29\x55\x57\x20\x3c\x6d\xd6\x08\x4f\x2b\x19\xf4\x65\xc6\x4a\x88\xb7\x2a\x11\x83\x61\xe6\x34\xa0\x76\x2a\x9c\x25\x79\xc1\x16\xe0\x4e\x1e\xbe\x23\x91\x37\x99\x7d\x75\x93\x79\x38\xc4\x79\xca\x07\xe6\x1e\xd3\xdc\x27\x45\x7b\x69\xca\x4e\xd8\x7e\xd4\x8f\xf6\x85\x3c\x00\xbe\xdf\xf1\x9b\xf8\x6f\xc9\xcb\xe8\xe5\x00\x25\x6f\xee\x71\x50\x24\x1b\xcf\x32\x76\xca\xe3\x23\x94\xf0\xe2\xf3\x72\x49\xd8\x59\x56\x92\x18\x55\x48\xec\xbe\x59\xa2\xa6\x65\xb3\x6a\xda\x23\xd2\x34\x13\x6c\x61\x52\xa6\x73\xc8\x60\xc9\xe2\x83\x1b\x91\x60\x90\x2b\x50\x13\xf9\x1c\x33\x84\xb0\xf8\xa9\xa4\x1a\x95\xf7\x8a\xcf\x08\x13\xdf\xc0\xb8\xd9\xb5\x33\xc1\x0c\x80\x9d\x33\x5b\xec\x5a\xa4\xea\xda\x00\x80\xe8\x14\xaf\xf9\x92\xd6\xde\x43\x10\x0c\x9c\x39\x6f\x5a\x8e\x0d\x85\xb1\xc1\x59\x4a\x71\x69\x62\x01\xbb\x01\x87\x65\xdc\x67\x84\x57\x69\xe6\x9b\x2f\xbd\x89\x10\x9e\xa7\x60\xdd\xb4\x3a\xc9\x92\x72\x4e\xc7\x24\x3e\xc4\x2b\x04\x02\x36\x88\x95\xde\x50\xf7\x7a\x32\xad\xac\xcd\x38\xcd\x9c\x3b\xef\x4e\x96\x8e\x07\x63\xe7\xce\x5b\x2a\x0f\x21\xe8\xb5\x45\x2f\x40\xf1\xd8\x14\x73\x70\x84\xd4\xdd\x77\x12\x21\xd4\x51\x75\xf7\x02\xeb\xa2\x78\x8a\x54\x78\x96\x08\xb4\x51\x12\x7e\xff\xa3\x78\xec\x4b\xd2\x42\xfc\xa4\xd3\x27\x24\x78\x6b\x3a\x8d\xf7\xb2\x97\x97\x3d\x16\xb6\xc0\xbe\xc8\x61\x1b\xe9\xea\x48\x99\xfd\xee\xdf\x21\xde\xd7\xdf\x71\x77\xb1\x2a\x79\xf7\xce\x48\x06\xd3\x82\x2d\xba\x7f\x17\x2b\xae\x2f\x3a\xf0\xef\x5d\x73\x03\xf1\x6c\x32\x13\x0c\xdf\x19\xd6\x6f\x7e\x97\x5a\x10\xf0\xca\xa4\x78\x42\x99\xc8\xda\x9f\x63\xf8\x97\x81\xb5\x7f\xbf\xc4\x8d\xa9\xda\x8f\xd4\xab\x68\x7f\x56\x89\x09\xe0\x07\xd7\x0a\xa2\xee\x84\x16\x42\x63\x71\xa6\x69\xca\x20\xae\xe3\x89\x79\xd7\xcd\x78\x37\xda\x67\x49\xa0\xca\x76\xf9\xfe\x4d\xac\x5b\x31\xa4\xfd\x98\x8b\xb5\x55\x14\x7c\x3f\x4a\xa2\xfd\x7a\x7f\x83\x16\x10\xd5\xf3\x45\x08\xa2\x59\x93\x39\xcc\x18\x28\x5f\xac\xbe\xfd\xb4\x91\x1d\xc2\x8f\x22\xb8\x7c\xc8\x20\xaa\xd6\x6d\x23\x8c\xb6\xbb\x69\x38\x91\x22\x70\x96\xac\x4a\x72\x5d\xac\x38\x61\x97\xd9\xa2\x9e\x25\xba\xcb\x4a\x3a\x8e\xc0\x28\x13\x02\x5d\xc8\x7f\x69\x14\xf5\xd5\x93\xfc\x57\xaf\xfa\x28\x42\xce\xf6\x73\xab\xfa\x2c\xb8\x0a\xdb\x75\x60\xc7\xb0\x8f\x10\xb7\x4e\x53\x44\x9a\x3f\xad\xbd\x85\x1e\x9a\x90\x71\xb6\x20\x72\xad\x70\xe4\x56\x68\xdd\xf5\x22\xcc\x84\x5a\x7f\xc4\x1a\xc9\xc2\xdb\xdd\x88\x4b\xee\xac\xc8\x39\x2b\xe6\x73\xc2\xbe\x23\x51\x48\xfe\x1d\xe9\x7d\x14\x33\x29\x14\xc5\xd0\x9f\x4c\x72\x3c\x9d\xfe\x56\x7b\x20\x81\xd9\xab\xa6\x98\x22\xf9\x0b\x99\x2f\x37\xb4\x79\x7d\x5d\xe0\x55\xeb\xba\xd4\x97\x8b\x0c\xb1\xda\xae\x8a\x62\x7f\x6b\x53\x50\x0b\x8a\x5f\xf2\xe2\x31\x7f\x5f\x30\x31\x43\xd7\x98\x8b\x6f\x3a\x32\x68\xa3\x50\xc1\x6e\x8b\x7d\x55\x06\x1b\x8d\xe9\x7e\xf4\xa7\x08\xe1\x72\x0d\xaf\x81\x57\xa9\x7f\x03\x8f\xe7\xe9\xe1\xf1\xfc\xc7\x95\x36\xb9\x9d\x6b\x93\xdb\x71\xba\x1a\xcc\x41\x95\x99\xc9\x98\x20\x63\x84\xca\x81\x02\xe0\xca\xf2\x52\x2c\x91\xdb\xc2\xe8\x66\xdf\xaf\xe6\xf3\x1c\x36\x3e\x3c\x46\xc3\x74\xef\x50\x5f\x2a\x94\xa2\xd5\x9b\x72\x04\x6f\x86\x9b\xad\xcc\x53\xee\x9c\x54\x7f\x66\x3a\x2e\xa2\xb1\x52\x02\xae\x47\x2e\xd9\xac\x14\xec\x9e\x58\xb1\xb9\x0c\x5f\x9f\x29\x27\x40\x84\xc7\xe9\x7c\xad\x6f\xab\xcb\xe4\xb6\x0a\xa0\x50\xb3\xb5\xa9\x33\xc9\xf3\xec\x5f\x4f\xa3\x79\x91\x4d\xd6\x27\x71\xad\x5f\xb7\x2a\x79\x36\x21\x4d\x5f\xc9\xaa\xb4\x44\x8f\xd7\x19\xb6\x61\x3f\xef\x46\xb5\x6c\x43\xb5\xc8\x3f\x40\x8f\xb4\x44\x42\x96\xc9\x37\x52\x64\x2b\x48\x03\x86\x9c\xad\xe9\xba\x99\x36\x52\x87\x01\x6c\x0d\xcc\xcf\x12\x95\x7e\x23\x4d\x23\x92\xee\x8c\xcc\xbc\x61\xbe\xaa\x80\xca\xbb\xab\xae\xd6\x3b\x2f\xef\x04\xf4\xe1\x28\x3a\xf2\x7b\x9a\x13\xa7\x4a\xaf\x10\x0f\xdb\x88\x86\x65\x6a\x00\xa0\x8d\x77\xaf\xd3\x27\xf2\x56\x6a\xbc\x2a\x79\xb1\x50\xd8\x4f\xf0\xc6\x75\xf3\xfc\x16\x18\x01\xa7\xa8\x64\xf4\x98\xf1\xf1\xec\x42\xb5\x58\x79\x5e\xa8\xf3\x4b\xe9\x46\x22\xd7\xd4\xfd\x40\x77\x8e\xbc\xd4\x95\x30\x42\xcf\xce\x7d\x5e\x7f\xef\xa8\x42\x15\x1e\xdd\x15\x05\xbf\x79\xca\xc7\xa1\xbb\x34\x59\x4f\x91\x82\x4c\x4e\xc4\x8f\x7e\x4c\xe0\x2c\x58\x99\x93\x1c\x5c\x00\x95\xf1\xe1\x13\xd8\x64\x26\x4e\xf3\x4f\x64\x0d\xed\x8b\xd4\xfb\xdc\x6f\x7c\x6e\xb4\xdb\xf9\x08\x61\x68\xe5\x6b\x10\xd9\x98\xf5\x47\x4d\x18\x70\x19\x38\xd2\x09\x22\x27\x71\xa0\x37\xd9\x2a\xd7\x5d\x69\x43\xfd\xb3\x52\x75\xab\x89\xf4\x9c\x8d\x39\x7d\x20\xae\x13\x64\xcd\xfc\xdf\xb8\xe8\xca\x3e\x4a\xf7\x64\x40\x1f\xed\x1a\xa9\xfb\xa5\x09\x10\xe5\x20\xa9\xd4\xba\x50\xd2\x1b\xe9\x8b\xd0\xd1\x08\x60\xa2\x64\xfb\xa4\x01\xe4\xb8\x58\x2c\x57\x9c\x4c\xd0\x9a\xc8\x8c\xe6\x7e\x5f\x65\x92\xb7\xfa\x95\x60\xdc\xb3\xc9\x55\x3e\x7f\x8a\x11\x9e\xd0\xc9\x99\x34\x1d\x51\x66\x77\x35\xdd\x9b\x87\x18\xe2\x0e\x82\x68\x1a\xcf\x18\x17\x6c\x5d\xcd\x45\xc2\x19\x88\xc4\x4d\x63\x3a\x69\x42\x27\x37\xd0\x56\x48\x23\x8e\x70\xd5\x4d\xb2\x9e\x8d\x05\xe2\xa7\x37\x82\x75\x83\x0c\xf6\x4a\xb6\x9f\x62\x8b\xa3\xf1\xf9\xfa\xc3\xda\x09\xee\xe5\xf0\x68\x99\xbc\xc0\x17\x86\x26\x40\xc3\x01\x27\xf5\x46\xa0\x0e\x11\xa1\x0d\x16\xf3\x1a\x4e\xaa\x3b\x39\x71\xe4\xee\x28\x9a\x25\xf3\x40\x55\x6b\x09\x9a\x9a\xf9\x1c\x53\xc7\xba\x1a\x2a\x1e\x17\xb8\x31\x96\x98\x54\xe2\x48\xf0\x3a\xa7\xc6\x1c\xcb\x8e\x58\xb1\x79\x85\x1f\x68\x59\xd3\xd1\x5a\xdc\x9e\x4e\xb3\x27\x3b\xae\xff\xf9\xc8\xdc\xbd\x8f\x46\xd6\xf0\xcf\xd9\xf6\x75\xcf\xc8\x3b\x6e\xbd\x9e\x8b\x34\x74\x5a\x15\x20\x24\x97\x49\x39\x2b\x56\xf3\x89\xbc\x07\x95\x18\x25\x52\x8f\x7b\x43\x38\x07\x17\x72\x94\xf0\x19\xc9\x43\xcb\xa4\x42\x7d\x5e\xe1\xb2\x0e\x7f\x42\x12\xd0\xa1\x2b\x6d\x82\xfa\x05\x6a\x91\x5b\x03\xe6\x75\x7a\x57\x30\x4e\x26\x56\xda\xec\xf5\x68\x32\x92\x15\xfe\x48\xc7\xac\x98\xd3\xbb\x44\xee\x1c\x36\x93\xbd\x99\xdf\x96\x52\x56\xb9\xc0\x25\xea\x40\x2d\x36\x95\x7c\x62\x2d\x36\x48\xb2\x90\x96\xc8\xa0\x52\x5b\x39\x53\x86\x3a\xbb\xa2\x35\xab\x14\x63\x25\x27\x36\xa6\xce\x3c\x07\x01\x55\x3c\x20\x64\x2b\xe2\x61\xea\x7c\xeb\x39\xb6\xca\x03\x27\x59\x55\xa1\x4e\xe9\xdb\x17\xac\xdf\x40\xc3\xa6\x17\x2d\xa3\xda\x3f\x57\x1d\x9e\xf0\xe2\xdc\xce\x3c\xb1\xaf\xa8\x43\x8d\x23\x38\xbf\xec\x81\xda\x98\xa0\xb8\x96\x39\x46\xcd\x43\xd5\x23\x51\x12\xf6\x40\xc7\xa4\x7f\xa0\x4d\xf6\x04\x09\xfd\x1c\xc8\xeb\xd9\x5d\x00\x7a\x8f\x5c\x48\xab\x35\xa1\xfc\xf4\xb6\xd3\xe8\x8e\xc3\x60\x77\x1c\xba\xdd\x71\x28\xbb\x43\x94\x28\xdd\x8f\x52\xaa\x5d\xaa\xe0\xa5\x77\x0a\x82\x4f\x7d\xf9\xee\xea\xa3\xaa\xa2\x5c\x6a\x42\x5c\x4f\x89\xfb\x0b\x3b\xb6\xa3\xb4\x7c\x2b\x19\xbc\x13\x45\x4f\xfd\x4c\xdf\xca\x58\xa1\xb1\x93\x44\x61\x2f\xdb\x34\x7e\x79\xe6\xbd\x3e\x06\x54\x8d\x81\xbf\x0a\xd4\x76\xef\x08\xab\x9d\x58\x4e\xbc\x34\xca\x8b\x5c\x08\xb8\x4e\xf5\xbc\xfd\x43\x6e\x60\xce\x1b\xa7\x92\xee\x6b\x55\x4f\x2f\xa5\x3e\x82\xdc\x97\xad\xeb\x29\xe6\x8b\x9e\x10\xb2\x16\xfa\x57\x6a\x3f\xf4\xfd\x0f\x21\x0b\x4d\x43\xc3\xe4\x81\x32\x3d\x86\x4b\x87\x34\x5c\xcb\x91\x79\xfd\xe3\x70\x5b\x7e\x5f\xba\xbc\x95\x93\x5e\x36\x55\xa7\x56\x0d\xd7\xaf\x91\x3f\x31\x3c\xfe\x2a\x0e\x74\x8c\x3b\x45\x9c\xf7\xc8\xe0\x0b\x10\x2f\xc6\xa6\xb3\x26\xd3\xc6\x99\xdc\x38\x1e\x9d\xc3\x51\x4e\xb2\xd4\x9f\x64\x75\x16\x30\x6d\x56\x10\x7b\xb3\x3e\xad\x2f\x0a\x4c\xf4\x31\x65\x4c\xc9\x48\x15\x23\x3c\x4f\x4b\x47\xd6\x98\x57\xa8\x13\x16\xb7\xea\xb2\xfb\xab\x41\x17\xbf\xd1\x83\xd4\xbb\xd0\x6b\xd8\x16\xac\x17\xf2\x5a\xa8\x2a\xbe\x19\xc4\x8a\x49\xfe\x32\x5c\x68\x53\x38\x94\x52\x63\x90\x92\xe1\x4e\x36\x8a\x92\xdf\x88\x3f\xb5\x26\x16\xa0\xd9\xcc\x1f\x62\xf4\x0c\x72\x41\xb7\xae\xb2\x92\x67\x14\xd1\xea\x29\xe4\x4c\x5f\x96\x3d\xa6\x5c\x4c\xad\x41\x74\x70\xb7\x1a\x7f\x21\xfc\x60\x9c\x8d\x67\x4a\xec\x1b\x5a\xbb\xf6\x00\x27\x05\x73\x32\x28\xf8\xde\x8b\xfd\xf3\x29\x9d\x35\xa4\xdf\x00\x82\x11\xa9\x71\xc4\x6b\x84\xe2\x6c\xc5\x0b\x21\x25\x81\x19\xac\xba\x8f\x16\x0b\x05\x7e\x3b\x03\xa7\x19\x83\xf2\x9b\x44\xe7\x3f\xe9\xed\xf7\x4f\xe9\xdc\x6c\x40\xf7\x2f\x2f\xf1\xbd\xd8\xac\x17\x41\x67\xe3\xdc\x38\x1b\xef\xcd\x6b\xfe\xb8\xbd\x5e\x96\xcc\xe9\x1d\xcb\x18\x25\x56\xe2\x3e\x2b\x18\xf9\x00\x6f\x9f\x62\x13\xb9\x11\xa0\x07\x54\x89\x31\x4a\xa4\xf7\x2d\x42\xe6\xd4\xcc\x26\x34\x27\x65\xf9\x8e\x4c\x09\x63\xd9\xbc\x4c\x8f\x6a\x22\xa4\xfe\x1d\xea\x13\xed\xe5\xa0\xf8\x2a\xd5\xa5\x6a\xf3\x71\x3a\xd5\xec\x9e\x5e\x3a\x5d\x09\x27\xa1\x92\x6d\x47\x4b\x46\x96\x19\x23\xef\x0b\xf6\xb3\xfd\xa8\xa5\x21\x9d\x5f\x25\x7e\xcc\x28\x7f\x5f\xb0\x77\x57\x1f\xaf\x49\x36\x79\x8a\x01\x10\x9b\xce\x27\xba\x96\x4d\x99\xe8\xf5\xcc\x89\x99\xe7\x77\x59\x49\xd4\x4e\xea\xf2\x93\xf2\x95\x09\xc4\xa4\x51\xb1\x00\x31\xdb\xe3\x33\x03\xb8\xd0\xa1\x0e\x56\x71\xc4\x2b\x5c\xe7\x53\xd7\xab\x47\x82\x64\x1c\xd7\xa8\x70\xdf\x36\xe6\xb4\x92\x66\x63\xe7\xc7\xcb\xcb\x58\x3d\x21\xbd\x00\x8d\xbe\x41\x74\xf8\x3b\xb3\x0d\x19\x6e\x1a\x34\x3a\xe1\x6f\x6b\x44\x55\x6f\xe8\x62\xa4\x4c\x91\x47\x93\x46\xfe\xd1\x48\x47\x89\xf6\xa4\x39\xc1\xfd\xb9\xbf\x2b\x5c\x9b\x1f\x6e\xb9\x7b\x7a\x71\xca\xff\x09\x2d\x21\xc9\x09\x68\xd5\xcb\xf1\x8c\x4c\x56\x73\x82\x62\x15\x50\x44\x03\x6d\x47\x93\x62\x01\xe9\x22\xc5\x7c\xfd\x29\x96\xca\x8c\x27\x79\x83\x76\x47\xf3\x89\x16\x8d\x6d\x52\x54\x61\xfd\xa3\xd1\xd9\x9e\x8b\x8e\x5d\x7e\x37\x4f\xf9\x38\x06\x03\xb5\x29\x61\xd7\x7a\xa9\x36\xb7\x9f\xe6\x2a\xde\xdf\xaf\x70\x36\x79\x10\xfd\xb4\x53\xbe\x83\x03\x7c\xa8\x01\x42\x03\x9f\x41\xcf\x55\x24\x45\x3e\x26\xaa\x81\x92\x0f\xa4\x93\xb7\x64\x5c\x2c\xa0\xac\x27\xb1\xfe\xc4\xc6\x1a\xf2\x22\x10\x1f\x3e\xb1\x62\x41\x4b\x82\x1a\x4a\x3d\xf5\xa1\xc3\xd9\xd3\x73\xa3\x13\xc6\x62\xf6\x8b\xc9\x5e\xad\xcb\x17\x54\x1e\x2a\x67\x6b\x67\x47\xf3\x66\x1b\xbc\xbb\x56\x56\x48\xe9\x2a\xb9\xbe\xf9\xed\x53\x02\xdd\x6d\xa6\x9e\x53\x82\x8c\x1c\xee\xd7\x11\x54\x77\x8e\xca\x0e\x61\xb0\xde\x70\xd5\xed\x62\x02\xb9\xac\x93\xa3\x2c\xad\x8f\x91\x69\x28\xd7\x86\xa3\x42\x78\xfb\x87\x84\x43\xc6\xbc\x02\x78\xe1\xd2\xd7\x9a\xbb\xcd\x09\xae\x93\x4e\xab\xbd\x5e\xb7\xd1\x4a\x06\x7e\xe7\xd4\xde\xcb\xa3\x01\xa6\x83\x34\x4c\x94\x3b\x9f\xad\x16\x7c\x62\x2b\x30\x59\x8c\x94\x89\x65\xb4\x75\xbf\xc0\x5b\x96\x9e\x19\xe2\x08\x01\xee\x8c\x37\xf3\xbc\x19\xce\x9e\x64\xcf\x74\x24\xf2\x12\x4d\x68\x79\x4b\x4a\xc1\xa0\xa1\x18\xbd\xbc\x48\x34\x26\x65\x77\x7d\x2a\x2f\xd3\xe1\xd2\xb1\x44\xb2\x16\xe0\xb1\x67\xde\xde\x90\x8c\x8d\x67\x16\x0d\x70\xef\x10\xd5\x4e\x23\x14\x93\xe6\xc1\x77\xb2\x61\x58\xfa\xa1\xfd\x0e\xb9\x93\x5e\x2b\xd4\xe1\x54\x03\x08\x28\x57\x8b\xd9\x69\x0e\x92\xbe\xbf\x75\xf5\xf1\x56\x17\x5c\x9f\x5a\xc1\xfc\xce\x5c\xc3\xac\xde\xa9\x2e\x94\xf8\xeb\x95\x30\xdb\x3b\xf7\xa8\x5e\xf7\x9d\x27\x6a\xa9\xef\xa5\xbc\xd3\x59\xee\x6c\xbd\x5e\x1c\xfe\x2c\x79\x00\xb4\x81\xe1\xf1\x02\xf1\x87\x53\x84\x7c\x34\x1d\xe8\x72\x89\x0d\x8d\xaa\x8d\xa5\xa8\x28\xfd\xa8\xa9\xe4\xb4\x37\xc6\xa0\xe6\x74\xf7\x42\xd1\x09\x01\x15\xa3\x54\x7b\xb2\xc6\xc1\x6a\xd4\x97\x90\x8f\xaf\xd5\x4d\xe6\x09\xd4\x41\xf0\x0e\x28\x91\x33\xc8\xe7\x5d\x58\xf1\x68\xd7\x7a\xee\xae\x75\x52\x49\xf3\xe4\xce\x93\xaf\x4b\x83\xaa\x34\x75\x69\xfe\x56\xb6\xc9\xfb\x48\xfb\x0f\xd7\xec\x73\xb5\x92\xcb\xbd\x68\xc0\x9a\x67\x31\x2c\x4b\x4d\xa7\x16\xf0\xf6\xc6\xcf\x92\x6f\x0b\xc6\x83\x0a\xc4\x0e\xac\x6a\x4a\x36\x28\xbf\x2f\x8d\x80\x74\xf9\x7e\x8a\xb0\x22\x1e\xcf\x93\x3a\x9e\x13\x38\x9a\xff\x43\x06\xbf\xa9\x35\xcc\xb1\x93\xc0\xee\x01\xa3\x55\xd7\x6e\x79\x5a\x3f\xd2\x17\xbb\x95\xa8\xd3\xe9\x8a\x17\x1f\x8c\xd2\x24\x98\x74\x96\x95\x33\x91\xf4\x97\xac\x9c\x6d\x4b\x4a\x4b\x5e\x08\x69\x63\x9c\xfc\x22\x1f\xb7\x64\x00\xe5\x17\x1e\x27\x97\x45\x4e\x82\x49\xe3\x43\x3c\x49\x96\x8c\x3e\x64\x1c\xec\x1a\x1e\xc4\xb8\xad\x1d\x16\x30\xb4\x1b\x27\x6f\x41\xe0\x04\xfb\xc6\xfa\x90\x68\xbd\xa7\xec\x41\x3b\x2b\x6e\xe4\xfb\x5a\x3f\xd7\x53\x47\x23\xf3\xe4\x5f\x62\xc5\x04\xb6\xb3\xa5\xbc\x6a\x38\xb5\x83\xa0\x67\x37\x98\x72\x10\xad\x35\xbd\x4b\x9f\x1c\x6d\xcb\xdd\xda\xcb\xed\x9a\x86\xe2\xfb\x63\x72\x6d\x35\x04\x97\x66\x08\x41\x53\x15\x0a\x40\x15\x03\x32\x4c\x73\xb0\x2f\x1d\x0c\xb1\x78\x90\x8e\xe5\x1c\x61\xd6\xeb\xf1\x58\x62\x24\xb8\x5c\x50\xd3\xab\x9f\x82\x11\x2a\x66\xc9\x23\xcd\x27\xc5\x63\xaf\x17\x70\x00\x3c\xb3\x82\xbb\xf6\xf4\x15\x63\xed\xbc\x8e\x09\x7e\x96\xa0\x9a\x7d\x2e\x4d\x1d\x49\x85\x3a\x9a\x68\xa2\xd7\x98\x4c\x5b\xa0\x4a\xd4\xb5\xd7\x83\x1a\x6f\xda\xaa\x63\x0e\x0c\x06\xd1\x07\x45\xdd\xed\xf6\xfc\xf2\xb7\xe4\xfc\xe3\xdb\xf3\xeb\xd1\x87\xab\xd3\x77\xa3\x5f\xae\xae\x7e\xbd\x79\x79\x79\xae\x30\x4d\x9f\x2b\x5c\xa4\xb4\x63\xb3\x16\x1b\x07\xba\x66\x5a\xbe\x16\x22\x6a\x47\xb8\x2a\x1b\xc3\x93\x0f\xa4\xad\x23\x18\x37\x59\x7c\xa6\x7c\x70\x24\x46\xee\x2f\x43\x69\xe7\xcd\xd3\x67\xb9\x6f\x0d\xa2\xac\x2c\x09\xa0\x90\xd1\x12\x56\x89\xf2\xaa\x8c\x70\x24\xf1\x82\xe0\x65\x34\x74\xfc\xbc\x07\x91\xe1\x70\x20\x9b\x09\xa6\x5b\xcf\x6a\xa3\xec\x0e\xa5\xbb\x4b\x3d\xa7\xe3\xc5\x69\x32\x41\x30\xeb\x21\xd6\xab\xb2\x9e\x45\xad\xe1\x7a\x2e\xf5\x1a\x10\xcd\x9c\xee\x1f\x67\x62\xe7\x36\x8a\xb2\x76\x86\x4f\xc1\x35\xb6\x83\x5f\x05\x2d\xcf\x73\x89\xa4\xd6\x44\x22\x81\xf5\xa4\xdd\xfb\x24\x0e\x2a\xe0\xd5\xb1\x13\xd6\xdf\xdb\x53\x33\xed\x12\x02\x64\x5e\x7d\xba\xbd\xb8\xba\x3c\xfd\x30\x7a\x7f\x7e\x7a\xfb\xf9\xfa\xfc\x46\x4c\x50\x39\x0b\xdf\x5f\x9f\x7e\x3c\xff\xfd\xea\xfa\xd7\xd1\xd5\xdb\xff\x3c\x3f\xbb\x1d\x5d\xfd\x7e\x79\x7e\x3d\x3a\xbd\xfe\xf9\xf3\xc7\xf3\xcb\xdb\x54\xa7\xfb\xf9\xc3\xc5\xc7\x8f\xe7\xd7\xa3\xab\xcb\xd1\xc7\xab\x77\x17\xef\x2f\xce\xaf\xcd\xb7\xb3\xcf\x37\xb7\x57\x1f\x47\x67\x57\x1f\x3f\x5d\x5d\x9e\x5f\xde\x8a\xdc\xa3\x4f\xd7\x57\x7f\xfd\xa3\x91\xfd\xfd\xe5\xe8\x97\xf3\x0f\x9f\x9c\xcc\x97\xa7\xb7\x17\xbf\x9d\x8f\xde\x9d\x9f\x5d\x5d\x9f\xde\x5e\x5d\x8f\x6e\x3e\x7f\xfa\x74\x75\xdd\x2c\xf9\xf4\xf2\xe7\x0f\xe7\xa3\xb7\xd7\xa7\x67\xbf\x9e\xdf\x8e\xde\x7e\xbe\xf8\x70\x3b\xba\xb8\xbc\x69\x16\x71\x75\xfd\xfb\xe9\xf5\x3b\x53\xcd\x9b\xd1\xef\x17\xb7\xbf\x8c\x6e\x3e\x7d\x38\xbd\xbd\xbd\xbe\x78\xfb\xf9\xf6\xdc\x66\xfa\x78\x7e\x7b\xfa\x61\x74\x0b\x44\xdf\x89\x3a\x7f\x3a\xbf\xbe\xbd\x70\x13\x5c\xbd\xfb\xfc\xe1\x7c\xf4\xf9\xf2\xe2\xfd\xc5\x19\x68\xd8\xcc\xa7\x8b\x8f\x9f\xae\xaf\x7e\x3b\x7f\x27\x6a\x71\x7b\x0d\xdd\xe5\x27\xf8\x70\xf1\xf6\xfa\xf4\xfa\xe2\xfc\x66\x74\x71\x73\x7d\xfe\xf3\xc5\xcd\xed\xf9\xf5\xf9\xbb\x94\x24\x7a\x18\x52\x92\xbc\x3b\x7f\x7f\xfa\xf9\xc3\xad\x19\x19\x7f\xbf\x78\xde\x44\xa8\xbf\x77\x84\x37\xd7\xc4\xa6\x68\x36\xc3\xf9\xb6\xa6\x0f\x6c\x8a\x5d\xba\xb6\xbf\x77\x88\x5b\x0d\x9c\x4d\xb8\x6e\x0a\x34\x49\x99\xe9\x63\x3f\xad\x9f\x7c\xcd\xfa\x3b\x93\xd7\x12\xd8\xb2\x02\xfa\x7b\x87\x55\x27\x30\x4e\xb9\x75\x1d\xb5\x5e\x4e\x39\x96\xeb\x4e\xa7\x72\x82\x9d\x15\xf6\x94\xd8\x8b\xb7\x2c\x4f\x09\x9e\xb4\x97\xa6\x04\xbd\xbc\x90\xca\x99\x30\x54\x83\x29\xc6\x74\xe3\x24\x43\x9d\x2d\x93\x30\xd3\x96\x61\x86\xd0\xba\x49\x64\x49\xad\x9d\xf0\xa5\xba\xdb\xb5\xc4\x9a\xf3\xcd\x92\x09\x2c\xa9\x95\x72\x61\x72\x08\xac\x99\x94\x0e\x99\x75\x4b\x77\xae\x82\xb5\x58\x62\xbb\xcc\x5f\x5b\xc0\x4e\x1b\xca\x58\xf9\x8d\x34\x0b\x5d\x33\xfd\x9b\xe5\xac\xdb\xe0\xa6\x2a\xa4\x87\x25\xbd\x6e\xc1\x58\x9a\x6b\x77\xd5\x19\x10\x9b\x84\x3a\x47\xaf\xad\x40\x0f\x98\x5d\x7b\x02\xd9\x97\x4e\xf6\xf5\xeb\xcf\xd2\xd9\x70\x40\x48\x5c\xa4\x45\xa0\x3e\xce\x62\x6d\xd6\xc8\x3d\x86\x16\x1d\x89\xaf\x6d\x49\x6c\x59\xd2\x96\xdc\xb6\xd3\xef\xc1\x67\x01\x8c\xe7\x41\xbb\xd3\x7f\xd3\x75\x60\xed\x9e\xd1\x21\x2d\xc3\x8b\xeb\x9f\x23\x08\x5d\xd7\xc6\xb1\x5d\xca\x21\x81\xfb\x31\xa6\x3e\xf9\x51\xa2\x07\x91\x2d\x24\x1a\x6a\xd8\x7d\x80\xfc\x70\x6e\xa4\xe1\xaa\x4e\x7a\xf7\x59\x39\x5a\xe2\x8c\x05\x1d\xe9\xd7\xe2\xca\x18\xe3\x5c\x74\xac\x23\x7c\x9a\x94\x20\xde\xa3\x98\xaa\xf0\x1b\x29\x5d\xeb\x9d\xbe\xad\x9b\xbe\x39\xfe\xee\x77\x89\x2b\xcd\x9a\xc8\x39\xd6\x69\x45\x1c\x3c\x12\xde\x5d\xde\x0c\x0a\xb1\x57\x85\xe9\x02\xf7\x23\x78\xdc\x10\x8b\x18\x98\xfa\x76\xf3\x6f\xe3\x9d\x78\xcd\xcb\x5a\x92\x15\x9d\xea\x32\xc9\x8d\x8f\x5c\xaa\x42\x43\x9f\x1e\x33\x16\xf6\xca\x6f\x44\xbb\x5f\x6f\xa1\xae\xe4\x6e\x07\x98\x52\xf5\x61\x6b\x13\x70\x4d\x42\xe5\xdb\x68\x5e\x6e\x34\xbb\x2d\xa9\x3b\xba\xe0\x6d\x0e\x01\xbb\x12\xb6\x59\x36\x9b\xf0\xab\xd6\xfd\x9e\xb1\x1d\x7b\xa6\x08\xf5\x0c\x49\x46\x62\xd4\x2e\xa6\x9f\x4b\x9a\xdf\xdf\x70\x46\x97\x4b\x32\x79\x2f\x45\x9c\xf7\xf3\xec\xbe\x94\x51\x45\xde\x89\x41\x7e\xaf\x68\xa6\x60\x89\x59\x7f\x65\x66\x8d\x78\x97\x12\x79\xbf\x01\x89\xe0\xa3\x48\x0c\xae\xde\xfa\xd7\x0d\xc9\xe6\x6e\x36\xfd\x3e\x25\x89\xa8\x52\x2a\xf6\xb3\x29\x84\x1f\x01\xa1\xd2\x5d\x6f\x59\xea\x21\x98\x94\x69\xd6\x31\xc9\x34\x27\x92\x75\x14\x01\xcd\x59\x88\x17\x40\x58\x73\x07\x59\x47\x97\xa8\x8f\x6e\xf9\x46\xd7\x47\x9f\xba\x26\x1d\xd4\x58\x1f\x9f\xe6\xad\x6a\x95\x3e\x17\xc5\x7b\xa7\xe9\xfa\x74\x13\xaf\x1b\x9d\xa6\xcf\x2d\xf1\xb1\xd1\xc9\x0f\xca\x80\xa1\x39\x92\xf6\x6e\xb9\x7e\x1f\x7d\x70\x34\xac\x3a\xf5\xa1\xb8\x6f\x33\xca\xb2\x77\x03\xfb\x4c\x6d\x43\x78\x85\xb4\xeb\xed\x57\x4d\xe2\x2a\x38\xc0\x16\x54\xed\x05\x2d\x45\xdd\xaf\xa4\x29\xd2\xe7\x9c\xd3\xb9\xb3\x47\xa4\xf5\x04\x17\x93\x4d\x5f\xfd\x6f\xb5\x65\x91\x06\xb7\x78\xb5\x93\x79\x13\xaf\xd3\xcc\x4b\xf1\xa6\xb2\x78\xe3\xab\x5f\x4f\xd6\xf8\xde\x68\x68\xae\x4e\x48\x6f\x01\x64\x69\xb1\x16\x37\x22\xd0\xd1\xed\xc0\xfd\xc4\xf2\x79\x28\xbe\x90\x60\x0f\xfd\x72\x7a\xf9\xee\xc3\xf9\xb5\x27\xac\xf2\x14\xba\xc4\x7c\xe2\x0a\x02\x69\x4b\x97\xb1\x4e\x2d\x50\x92\x4c\xa6\x0a\x0f\x1d\x7d\xde\x31\xd4\xb6\x2d\x7a\xdf\x0e\xac\x27\xae\x90\x67\x1b\x29\x08\x7a\xe6\xd6\x7e\x0f\x69\x75\x97\xb4\x8d\x0d\x54\x0a\x0e\xc0\xb5\x7a\xb8\xef\xbb\x04\x76\x99\xfd\xed\x66\xf8\xb6\x81\x52\xe3\x19\x5a\x06\xeb\xab\xd6\x9c\xd2\x7e\xe5\xf2\xad\x1c\x5f\xc0\x46\xad\xc9\xfc\x6c\xec\xb8\xf7\x9f\x2f\x21\x1e\xb8\x10\x38\x6e\xaf\x6e\xff\xf8\x74\x3e\x3a\xff\xeb\xed\xf9\xe5\xcd\xc5\x15\x68\x8f\x4e\x3f\x7d\x1a\x9d\xdd\x5e\x7f\x18\x5d\x5f\x7d\xbe\x3d\xbf\x06\x49\x12\xde\x7f\xb8\x38\xbd\x11\x52\xe6\x2f\x57\xef\x52\x12\x30\xb5\x4a\x49\x62\x25\x9a\x8f\xa7\x97\xa7\x3f\x9f\x5f\x8f\x6e\x6e\xaf\x2f\x2e\x7f\x1e\x7d\xb8\xba\xfa\xf5\xf3\xa7\x94\x24\x8a\xe8\xf9\x6f\xe7\x97\xb7\x82\xea\xc7\xf3\xeb\x9f\xcf\x53\x92\x7c\xb8\xfa\xf9\x67\x47\x0b\x06\x35\x7a\x67\xab\x28\x92\x3a\xb1\xcc\xf5\x48\xf9\x2f\xf7\x0e\x3b\xeb\xf3\xc3\x47\x55\x0a\x3c\xcb\x92\xe1\xd1\xaf\x14\xbc\xda\xd6\x12\x48\x14\xe8\x03\x78\xef\x75\x95\x7c\x13\xec\x54\xf8\xb4\x79\x3c\xf6\xfc\x53\xc8\xb8\xc8\xad\x63\x77\x55\x02\xb1\x8e\xe4\xe3\x81\x84\x5b\x6c\x63\x5e\xea\x08\x40\xbb\x8a\x6f\xae\xa5\xe5\x24\xbb\x3f\x58\x64\xcb\x57\xc4\x3f\xdd\x8c\x6d\xb3\x8b\x9b\x60\xc3\x86\xd4\x3d\x96\x85\x04\x56\xd2\x22\x3f\x30\xa1\xcf\x77\xb2\x4f\x6d\x83\x50\xe3\x9a\x86\xae\x33\x0c\x5d\x38\x86\xa1\xf7\xdb\x0c\x3d\x17\xeb\x0c\x3d\x83\x76\xa6\x5b\xc9\xad\xb5\x1b\x35\xe4\xee\xfd\xa8\xc4\x75\x53\x55\x6c\x6d\x54\x37\xb9\x17\x9f\xc3\x58\x7d\x52\x53\xb0\xbd\x97\xb1\x9b\x6f\x9b\x6c\xf1\xaa\x32\xca\x66\x19\xc1\x73\xe0\x29\xa5\x89\x31\xb0\xd0\xc2\x3b\x4d\xf4\xbd\xe4\x27\x56\x7c\x7d\x02\x61\x17\x3f\xbf\xd2\xa6\xd5\xbb\xc5\x07\x4b\x3f\xea\x18\x42\x5d\x67\xb9\x8c\x4d\x5e\xae\x98\xe7\xd4\xd8\x2c\xa9\x96\x4d\x9b\xca\x36\x2d\xab\x82\xc9\xd3\xbd\xc3\x7f\x83\xc5\x27\x14\xdd\x6c\x0c\x98\xe5\x58\x5b\xd0\x71\xc8\xf0\x73\xad\xb5\x83\x67\xc8\xe6\x78\x58\x4a\x03\x08\xd7\x25\xd3\xef\x6a\xe9\xa2\x84\x9d\x7e\xd8\xec\xd0\xe9\x24\x84\x0a\xd1\xa6\xab\xe9\x36\x02\x8d\x0c\x40\xa8\x36\x42\x61\x4b\x0e\x6d\x7d\xe6\xa5\x8d\x23\x77\x14\x9d\xa0\x6a\x12\x4a\xcf\xa9\x32\xd8\x9d\xa8\xa2\x9a\x1e\xb2\x01\x33\xda\x66\x41\xcd\x6c\x2d\x0a\xac\xd1\xa9\x99\xe0\x98\xf0\x62\xd2\x75\x72\xe5\xb8\x4e\x3a\x1d\x07\xa8\x5b\x01\x1c\x0d\x27\xe2\x26\xc4\x27\x23\x88\xcb\xdb\x73\x66\x23\xad\x54\x71\x8e\x14\xf0\xbc\x89\x66\x8e\x65\x7c\x4e\x13\x11\xb3\xdc\xdf\x47\x2c\xcd\x07\x74\x50\x0e\x87\xb8\x00\x63\x61\x89\x8a\x83\x19\x66\xc9\x1d\xa0\xad\x63\x96\x64\x53\x4e\x18\xea\x14\x09\x2f\x96\x65\xc1\x78\x2c\xfd\xb8\xcc\x96\x79\x67\xab\xf6\x6c\x8c\x4a\xfa\x44\x4f\xfe\xd8\xb6\x90\xe0\x48\xdb\x59\x45\xe8\xe5\xc5\x06\xb5\xd3\x13\x9e\x3b\x38\xf1\x23\xe7\x3e\xdd\xf6\xb7\x0f\xe8\x2f\xfd\x94\xc4\x56\x03\xe0\x17\x70\x37\xdf\x7c\xa7\x0c\xb7\x06\x64\xa8\x2f\x4d\xc5\xca\x14\x1f\xfc\xe8\xc3\x3a\x91\x36\x9c\xb3\x36\x47\x0c\x55\xea\xe3\x80\x43\x0f\x0d\x53\x5e\x55\x35\xbb\x24\x77\x4e\xf6\x03\x71\x8d\x43\x2b\x67\x5d\x42\x3b\x73\x46\xf5\xc9\xee\xfe\x8c\x82\x44\x65\x9e\xd0\xbc\x35\xaf\xbb\x3e\x91\x35\x9b\x8c\x17\x8e\xa0\x30\xbb\x7f\xfc\xac\xb9\x93\xfe\x1d\xcc\xf7\x8e\x7b\xbe\xa4\xe0\x8d\xe9\x84\xa3\x8f\x9b\xe6\x45\x98\x04\x9c\x05\x7d\x7b\x2c\xe5\x6f\xa4\xb0\x5f\x1c\x78\xf7\x08\x3f\x0b\x41\x62\x4e\x78\x91\x6b\x0f\xc5\x7a\x62\x09\xb2\xde\x4c\x67\xab\x64\x99\x3e\x6d\x69\xe5\x80\xbd\x06\x7c\x20\x1d\xf3\x1e\x49\x3c\x02\x24\x77\xdd\x25\x11\x5e\x13\xcc\xc5\x37\xc0\x52\x18\x90\xaf\xcc\x0d\x76\x13\x38\x1a\xf1\x62\xf9\x81\x3c\x90\xf9\x6f\x94\x3c\x6a\xf8\xa5\x08\xdb\x30\x49\x07\xc5\x8a\xcf\x09\xaf\xe7\x07\x83\x09\xfd\xad\x85\xfd\x97\x93\xd5\x63\x91\x75\xe4\x57\xdf\x98\x69\x43\x86\x5d\x4a\xb2\x36\x53\x77\xd6\x1c\x2b\x92\x76\xbd\x35\x83\xae\x75\xdd\xb3\x31\xe3\x62\x43\xc6\xb0\x95\x56\xd8\x01\xd6\x70\xda\xd3\x44\x99\xd4\x6e\xb6\x05\xb3\x19\xa2\x16\xc5\xe8\xf5\x75\x30\x2d\xd8\x01\xc8\x11\xf7\x34\xbf\xd7\x6b\x47\xdb\xe9\xb2\x6d\x33\xd5\x88\x27\x92\xc6\x41\x36\xc9\x96\x8e\x05\xa0\x23\x63\x6c\x2a\xb0\x46\x14\x82\x86\xd6\x28\x99\x82\x40\x7b\x79\x2a\x3f\xba\xef\x43\x15\x68\x2e\xc8\xf5\x75\x9d\x25\x67\xa1\x22\xea\x24\x42\x11\x20\xf0\xc4\x9a\x0d\x7d\x80\xf7\xa8\x8a\xb9\x6b\x78\x27\x39\x62\x6b\x73\x07\xf6\xcb\xd8\xec\x71\x70\x29\x73\xed\xfe\x52\xf6\x78\x8f\x9e\x3d\xde\x63\x58\x62\xdd\x80\x33\xd3\xca\xe3\xb1\x21\x7e\x06\x23\xfe\xb5\x74\x03\x5c\x2b\x26\xb7\xc4\x95\x31\x87\x73\xe9\x48\x5d\xf3\x78\x60\xf6\x1e\x88\x1e\x42\xe7\x7a\xdc\xac\xe4\x55\x6e\x95\xbc\x56\x35\x92\x1b\x05\xb9\xd5\x56\x72\xf3\xd6\x82\x5c\x50\x00\x1a\xa7\x2c\xf1\xaf\x2e\x59\x48\xfa\x61\x76\x5e\xba\x32\x91\xe0\xe9\x5f\xeb\xf1\x27\x43\x4b\xe9\xb0\x70\xc0\xad\x77\x5c\x0f\xa7\xac\x24\x1d\xf2\xf2\xa2\xfd\x05\x5c\xac\x0d\x93\x20\x25\xa8\x63\xed\xbc\x7d\xf1\xa0\x7e\x96\x4f\xb3\xf9\xfc\x2e\x1b\x7f\xe9\x13\x2f\x5d\x65\x9c\xa7\x5c\xf7\x28\x66\xc3\x4e\xc4\xcf\x80\xe7\x05\x7e\x08\x55\xc3\xe2\xbe\xee\xc5\xe3\xe3\x6b\xac\x73\xc2\x39\x69\xbc\xe9\x37\x5d\x7f\x52\x89\x86\x0e\xce\x36\xea\x95\xb5\xc1\x64\xf6\xbe\x3b\xe6\x8e\x37\x04\x41\xc8\xab\xa4\x76\x23\xda\x1d\x33\x48\xb2\xe9\xf3\x42\xcb\xd0\xef\xc8\x52\x1c\xeb\xf9\x98\x12\x23\x65\x36\x70\x84\xcc\xc8\x6c\x01\xeb\xa9\xf9\x5c\x6c\xc1\xdf\xf9\x46\xf9\xb4\x39\xbe\x9b\xc0\x4c\x3a\x0d\xc1\xae\x0d\xd4\x8f\x45\xbb\x0e\x08\x5b\x5e\xd1\xe0\x99\x64\xfa\x6a\x63\x50\x63\xc9\xaf\x02\xa2\xbe\xdc\xbb\x83\x7e\x8d\xdf\x88\xac\xa1\x41\x4a\x0d\xfa\x0d\x94\x04\x31\x28\xc1\x12\xd6\x45\x69\xa5\x3e\x36\x7f\xc6\xc5\x7e\xc8\xc9\x04\xc2\x67\x16\xab\x9c\x03\x2c\xab\xa4\xd0\xfd\x01\x50\x5b\x7f\xc0\xdd\xbb\x15\xef\x52\xde\xa5\x32\x52\xa7\x0d\xb2\x2d\xe3\xc9\x50\x5e\x76\xe5\xee\x9c\x44\x1a\x7e\xa6\xee\x87\xc1\x1d\xf8\xc4\xac\xae\xdc\x01\x3b\x34\x19\xd3\xbc\xc2\x6b\x26\x6c\x58\xe8\xc6\x4e\x84\x74\x8f\x20\x90\x3b\x1e\xf8\x2e\x0a\x21\x1e\xc7\xbc\x52\x5a\x43\xdf\x7c\xbc\x69\x3a\xcd\xbc\xf8\x61\xea\x40\x67\x20\x44\x48\x60\x4e\x37\x20\x28\x13\x6b\x59\xef\x6f\xdb\xa7\xec\x46\x04\x94\x00\x0f\xa5\xfa\x7a\xe0\xfb\x4b\xd4\x19\xc9\x55\x8c\x50\x98\x6d\xc7\x86\xcf\xef\x1f\x44\xfb\x31\xf3\x91\x16\x4e\xa2\x49\xb1\x88\xfa\x91\x98\xf5\x82\x45\x0f\x61\xaa\xd4\xcb\x2a\x63\x84\x86\x1d\x56\x07\x9a\x50\x61\xd4\xd7\xe3\x32\xed\xd0\xcf\xaa\x17\x59\x00\x01\x46\xef\x9b\x92\x07\xb4\xf2\x8f\x7f\xcf\x1b\x82\x3f\xf2\xb2\x19\x36\x7b\x6b\xbe\xaa\x42\x9d\x71\x3b\xfc\x1c\xc0\x13\xe8\xf5\xe2\xa0\x80\xb6\xbd\x82\x61\x39\xa0\x45\xc3\x6a\x63\x1a\x2c\xdf\x91\xf6\xec\x84\x10\x83\xdf\xe0\xd2\x8d\x64\xbb\x21\x0f\xea\xb7\x2f\x44\xcf\xad\xdd\x8a\x51\xb9\x90\x41\xe9\x99\xa6\x63\xd7\x37\x20\xc4\xdf\x06\x2e\x5c\xda\x30\xba\x5b\x82\xe8\xd4\xf6\x9d\x20\xa0\xf2\x80\x0d\x75\x58\xd1\x70\x52\x41\x57\xa4\x4a\x79\xd5\x71\x82\x76\x96\x4f\x8b\xbb\x62\x8e\xe2\xe8\xfc\xf2\xe7\x8b\xcb\xf3\xd1\xa7\xd3\xeb\xf3\xcb\xdb\xc8\x87\x8a\x04\xa6\x7a\xc7\x0b\xc6\xe0\x6d\x2a\xc0\x59\x39\x1f\xb9\x57\x4c\x2d\x98\xc9\xee\xce\x04\x5b\xfa\xd1\xd2\x87\xe0\x9f\x23\xfb\x1b\xe2\x29\x42\xb8\xcf\x72\x75\x57\x8e\x19\xbd\xab\xa3\x74\x68\x15\x23\xc5\x85\x85\x6d\x4f\x22\x84\xb3\x74\x30\x54\xaa\xc4\xc2\x55\x25\x46\x7f\x8e\xd2\x34\x8d\x69\x5a\x0c\xca\x21\x3a\xc9\xd4\xe6\x34\xf8\xdf\x7f\xfb\x5b\x32\xfc\x73\x84\xfa\xea\x0d\xd5\x10\x50\x99\x82\x4f\xff\xdb\xdf\xc4\x01\xb7\xda\x4f\xa3\xf8\x6f\x7f\x4b\x92\x3f\xa3\x93\x48\x59\xeb\x3c\x2f\xc5\x49\xca\xf2\x3e\xc1\x8c\xdc\x93\xaf\x7d\x07\xb9\x37\xfa\xdf\xd1\xfe\x4a\xa2\xf7\xca\x10\x69\x7d\x5e\xd9\x90\x91\x50\xd2\x1c\xe1\x3c\x7d\xae\x30\xc4\x9f\x5d\xe5\xa1\x96\xba\x40\xc2\x87\x98\xa6\x87\xc7\xf4\x47\x8d\x95\x7b\x4c\x21\xbe\x19\x1d\xa6\x69\x0a\x5e\x9b\x29\x45\x1d\x06\x5d\x21\x8e\x5e\x7c\x24\xc9\x57\x52\x20\x27\xbe\xcd\xa5\xa2\x91\x1e\x9a\x34\x8d\x58\x2e\xa9\xd3\xf9\xac\xf4\x23\x46\x0d\x86\x1d\xff\xab\x36\x90\x78\x96\x93\x59\xdd\xb8\x89\xee\x0e\xa1\x27\x69\x97\x28\xe5\xc5\xb4\x24\x0c\x42\x25\xe7\x63\x02\x4e\x46\x71\x91\xd2\x24\x2f\x1e\x5f\x5e\x68\xb2\x28\xfe\x75\x29\x9f\x64\x2c\x49\xf5\x63\x51\xaa\x87\xe2\xb2\x78\x44\x27\x12\x96\x20\xa6\xa8\xff\x2e\xe3\x44\xe4\x75\x14\xc0\x2b\x19\xc0\x1d\x53\xe5\x63\x25\x6a\x06\x48\xc8\x35\xd6\xeb\xc7\xf4\x3f\x82\x5e\x5a\xfc\x24\xce\x52\x8e\xcb\x34\x47\xfd\xb8\x48\x39\xce\xd2\x1c\x97\x29\x45\x80\x26\x60\xa0\x8b\x4d\xf0\x08\xb0\x43\x2d\xf5\x34\x2a\xa0\x49\xd3\x74\x1c\x93\x66\xe8\x9b\xee\xca\x6a\x27\xa7\x69\x9a\xce\x4f\x4c\xf6\x7e\xd3\x94\x96\xb3\x27\x27\xca\x83\x48\x96\x6b\x8f\x7a\xaa\xdd\x9e\x59\x42\xbe\x8e\x89\x04\xb6\xa7\x98\x56\x53\x9a\x67\xf3\xf9\xd3\x33\x8f\x51\x55\xc5\x19\x9e\xe2\x15\x2e\x91\x2b\x87\xa2\x67\x2f\xf8\xa9\xb4\x84\xa4\xd3\x38\xd4\xb8\xb9\x8e\x0f\xab\xe2\xe2\x65\x2f\x2f\x71\x16\x9e\xaf\x98\x8a\x85\x58\xa4\x87\xc7\x85\x9d\xb2\xc5\xfe\x3e\x8a\x79\xca\x06\xc5\x10\x25\xb0\x66\x24\x1a\x35\x41\xbd\x1e\x55\x3e\x76\x2a\xa4\xa0\xf5\xe1\x1d\x90\x21\x34\x45\x08\x49\xd0\xe5\x59\xb0\x56\x2b\x3c\x4e\x69\x5c\x20\x3c\x55\x0e\x6c\x37\xb7\xd7\x9f\xcf\x6e\x3f\x5f\x4b\xbb\xfb\xf7\x17\x1f\xce\x3b\xd3\x5e\x2f\x5e\xa5\x64\x3f\xea\x77\xa3\xfd\xb1\x2a\x09\x0b\xa1\xa1\x98\x93\x84\xd3\x05\x89\x57\x08\x99\xfb\x8b\x99\x68\xc2\x24\x15\x72\xd3\x32\x3d\x3c\x5e\xfe\xa8\x4b\x3e\x5e\x6a\x60\xed\x45\x9a\x0d\x96\xc3\xce\x4c\x56\x7e\xa1\xae\x25\x62\x82\x27\x78\x6c\xe1\xb3\x5c\x38\x39\xb3\xa0\x05\x59\x96\x1e\x1e\x33\x4b\x96\x69\xb2\x79\x9a\x0d\xd8\xb0\x13\x98\x8d\xb9\xbc\xf0\x10\xec\x15\x3c\xc0\xf4\x18\xe3\xd9\x80\x0d\x51\x35\xed\xf5\xdc\xc6\x9c\xe7\x93\x78\x85\xaa\x2a\xb4\xba\xb3\xe0\x9a\xcf\xd2\xba\x65\xb1\x11\x57\x6b\x81\x44\x17\xc5\x84\x4e\x69\x5b\x23\xf3\xf0\xed\x7c\x5b\x8b\xdb\x92\xf0\x8f\xaa\xb8\x8f\x59\x9e\xdd\xef\x86\x62\x5d\xcb\xba\xf1\xe2\x7a\x9c\x2d\xb3\x3b\x3a\xe7\x94\xb4\x05\x9f\xe6\x89\xee\x89\x33\x9b\xb7\x8e\xed\x2c\x27\xda\x1b\xc1\xe3\x64\x5b\x79\x90\x60\x9c\x9f\xad\x71\xfd\xa4\xd0\xc4\x7f\x25\x4f\x67\x50\x8a\xb2\x5a\x62\x6b\x02\xd3\x02\x26\x7d\x23\x0e\x33\x85\x48\xb4\xf7\xa4\x09\xeb\x86\x15\xfa\x8f\x82\x3f\xe5\xd9\xfd\xfb\x82\xe9\x9e\x43\x3a\xf8\x25\xce\xd4\x67\x96\x8d\xbf\x78\x90\xb9\x24\xa5\x66\xcb\x72\xa4\x42\x9e\xac\x96\x13\x08\xcf\x50\xe0\x4c\x29\x97\xc4\x0c\x5e\x2d\x08\x8a\x33\x70\xb2\xc7\x79\x65\xf7\x72\xd1\x0a\xd8\xc9\x85\x88\x2b\x83\x01\xe9\xb8\x8b\x3a\xa4\x47\xc1\x50\x3c\x80\x54\x43\x84\x9e\x69\x4a\xea\xd6\x88\xae\xe2\x4d\x2e\x1f\x8a\x2a\xb7\x4a\x25\xe1\xc0\xd7\xd3\xf1\x3b\x32\x2e\x58\x06\x24\x0b\x84\x4d\x68\x5d\xa6\x6a\x51\xad\x4f\x9e\xaf\x9d\x00\x2b\x4e\xc2\x5e\xcf\x2a\x8d\x74\x19\x90\xe9\xcc\xc3\x68\x91\x8d\x59\xb1\x25\x31\x23\x93\xd5\x98\x8c\xea\x79\xb6\x78\x0b\xac\x5d\x0b\x64\xb1\xe4\x4f\xad\x57\x01\xa4\xde\xb8\xb6\xf2\x82\x9f\xef\x44\x52\x67\xd8\x42\x35\x27\x3b\x50\xcc\xc9\xb6\x3a\xee\x52\xbd\x8d\xb4\xee\x8a\x62\xde\x9a\x98\x48\xbc\x91\x1a\x04\xf7\x6e\xbf\x27\x89\xd4\x1b\xe9\x91\x7f\xae\xb2\xf6\xd5\x83\xd4\x1b\xe9\xdd\xef\x60\x49\xb4\xb9\xdf\xee\x79\xfb\x01\xbd\xe7\x9b\xc7\xb3\x35\x2c\x3f\x4f\xe6\x9b\x6b\x35\xdf\xa1\x56\xf3\x2d\xb5\x2a\x72\xf2\x7b\xd6\x7e\x1d\xc8\xe4\x5b\x5c\x2e\x24\xda\x78\x6b\x9a\x3a\xc3\x96\xc8\x06\xca\x08\x36\xbf\x3f\x9d\xd3\xac\xfd\x91\x58\xcf\xb8\xb1\x94\x2c\x6f\x1b\x8f\x81\x27\x59\xbe\x39\x16\x43\xd1\x9e\x33\x28\xb6\xc4\xcb\x58\x2d\x5a\x47\x89\x28\x57\x8b\xcd\x6b\x17\x60\x57\xda\xd1\x5a\xd0\x7c\xcb\x3e\xf0\xb5\x3d\xad\xec\xeb\x16\x5a\xcb\x1d\x68\x2d\x37\xf7\x17\x98\x6c\xb6\xed\xb0\x82\x6d\x35\x20\x7c\x47\xa7\xd3\xf6\x04\x65\xfa\x6d\xad\x7d\xdb\x76\x81\x40\x7b\xdf\x6e\x5e\x1d\x53\x3a\xe7\xad\x39\x51\x96\xc8\xe4\x2d\x28\xee\x50\x49\x9d\x61\x23\xd5\x55\x4e\xff\xd9\x9a\xa2\x48\xbc\x95\xda\x0e\x35\x94\xc9\xb7\x51\x2c\xda\xaf\x0f\x48\xbd\xd9\x61\x4e\x70\xd2\x25\x19\xb7\x9f\x8e\x26\xc7\x66\xd9\xa0\x98\xcf\x77\xa1\xaa\xd2\xaf\x91\x05\xd6\x8b\x4d\xb5\x1b\xf4\x36\xe1\x5e\xb6\x3a\xde\x02\xd3\xdf\x21\x89\x04\x9c\x53\xca\x1c\x6c\x7e\xd3\x8e\x45\x9f\xf9\x9d\x64\x5f\x3e\x66\x4b\x5c\x13\x05\x73\xdf\xb4\x8d\xb8\x57\x6d\x41\xb5\x89\x97\x42\x3a\xeb\xf6\x7a\x81\x97\x31\xc2\x32\xae\xf0\xd5\x63\x6e\xba\xdb\x20\xe3\x21\x2d\xb0\xe8\xba\x96\xa6\x15\x65\x4a\x4f\x1a\xe1\x70\x51\xff\xb9\xb2\xa0\xd5\x2a\xe1\x80\x0f\xd3\x1c\x3f\xdf\x87\xa0\x05\x0b\x21\xee\xe8\x7b\x6c\x68\x9d\xd2\xa7\xc9\x8b\x5c\xd1\x13\x85\xd8\x5e\xa4\x88\x43\x10\xea\xe8\x28\x75\x22\x9f\x05\xb7\x36\x79\x01\xf7\x3b\xcd\xa5\x46\x8a\xab\x18\x27\x82\x40\x8e\x39\x92\x30\x87\x76\x20\x68\x43\xde\x96\x23\xa5\xc4\x9b\x7c\xad\x78\xc3\x31\x6b\x21\xde\x64\x4d\xf1\x26\xdf\x2e\xde\xd0\x94\x25\x0f\xd9\x7c\x45\xb0\xc9\x8f\xd7\xe7\xa4\xc1\xe9\xbd\x59\x8a\xf9\xde\x02\xb0\x91\x0f\x99\x84\x06\x5a\xaf\x76\x69\xde\x46\xe3\x1c\x06\x1a\x7c\xca\x21\x42\x03\x68\x59\x09\xa8\x57\xf3\x01\x1d\x3a\xb7\xb0\x74\xd8\xec\x6c\x03\x44\x34\x18\xda\x6a\xd0\x98\xa0\x67\x75\xff\x45\x50\xa5\x0b\x0f\x68\xc3\x9e\xa5\x42\x8d\x0d\x8a\xa1\x74\x39\x27\x5f\x97\x59\x3e\x51\x0b\x81\x92\x12\xc5\x99\x18\x00\xad\x0c\x13\x22\x67\xee\x58\x34\xea\xae\xf5\xdd\xe6\x0b\xed\x29\x3f\x08\x76\x41\x61\x5c\x31\x71\x9e\x1e\x1e\xe7\x3f\x92\xe3\x5c\xd7\x45\x85\x99\xb7\x01\x50\x8a\x41\x3e\x54\x57\xca\x31\x45\x26\xb6\x46\xe5\x08\xcc\x6e\x62\x32\x44\xd5\x10\x81\xd2\x09\x44\xc2\xc0\xed\x88\x92\xf2\x75\x60\x1d\xb2\x1f\xa9\xfa\x44\xc1\xe0\xe0\x20\xe3\x0b\x52\x10\xc3\xd1\x2d\x0d\xac\x26\x2a\x4c\x8c\xa4\xf8\x8d\x85\xed\xb5\x2d\x2d\x0f\x45\x61\xac\x97\xb4\xb6\x31\x97\x45\x4e\x36\xb6\xe5\x55\xc4\xf7\x1a\x04\x25\x3d\x21\x59\xbe\x8a\x60\x57\x7b\x15\xae\xab\x29\x08\x99\xb5\xb5\xb0\x9d\xf8\x83\x0e\xbb\xed\xd3\xb4\x97\x23\xa0\x11\xce\x55\x19\x20\x78\xee\x5c\x46\x70\x6e\x12\x94\xa6\x29\x93\x64\xef\xeb\x60\x62\xaf\xa6\xf9\x93\xa1\x48\xbe\x1b\x49\x5d\xcb\x06\xe4\xd9\xab\x49\xfe\x68\x28\x7e\xb7\x5a\xfe\xa8\x6b\x29\xc5\xd3\x75\x53\x2c\x13\xf2\x1f\x8a\x09\x52\xe9\x62\x89\x9d\xa7\xc4\xcf\xed\xb9\x6c\x1c\x2d\x09\xe7\xe1\x0b\x96\x6d\x26\x76\xfd\xdc\x5f\xd3\x1e\x30\x63\xb2\xe9\x80\x87\xf2\x95\x82\x3a\x29\xce\x11\x16\x2c\x28\x34\x9e\x09\xce\x24\xaf\x21\xe8\xb1\xf8\x30\x18\x9b\x1b\x10\x33\x44\x6a\x8d\xcb\x14\x4e\xb8\x27\x13\x16\xac\x16\x65\x7e\x07\xa5\x5f\x0b\xc6\xf2\x9b\x20\x47\x1a\x1c\xa6\x7b\xf6\x49\x76\xd1\x74\x1e\xab\xed\xbf\x83\x61\x54\xdf\x10\x1a\x61\xb7\xec\x86\x90\xaf\xe6\xf3\x34\x4d\xe9\xcb\x4b\x24\xdb\x6f\xef\x11\xe9\x49\xde\xa7\x89\xec\x81\x98\x63\x65\x4f\xe4\x05\x5f\xb3\x77\x5b\x85\xe2\x65\xe4\x25\xa0\xa2\xfe\xe6\x7f\x92\x6c\x3c\x7b\xa3\x6f\xa1\x4e\x8a\xd4\x8b\x34\x0c\x5f\x93\x3f\xff\xe9\x0d\x8e\x22\xb8\xfc\x23\x98\xec\xa7\xd0\x02\xe4\x34\xab\x86\x59\x43\x0c\x50\x0d\xc7\x83\x06\xc3\x59\x6b\x68\xe1\x85\x98\xa5\x25\xf0\x21\x62\xe6\x9f\xc0\x8b\x53\x14\x53\x27\x6e\x3d\x41\xa8\xaf\xdf\xc3\x39\x1b\x6c\x6a\x66\x11\x2d\x05\xe3\xbc\xc8\x96\x41\x14\x48\x39\x14\x95\xb3\xf5\x86\x1b\x44\x43\xdc\x84\x53\xe9\x53\x14\x73\xbf\x8e\x6b\x6b\x56\xd6\xae\x95\x0c\xd7\x1c\x96\x21\x04\x2f\xcd\x52\x8e\x79\x3a\x18\x22\x2c\x47\x30\xd4\x12\x68\x22\xd3\xc3\x5f\xd5\xae\x7e\xbf\x7f\x71\x52\xee\x0e\x95\x38\xdf\xcc\x6b\xf2\xf5\xbc\x26\x6f\xf0\x9a\x86\x89\xf7\x6b\x61\x0d\x55\x65\xb4\x3a\x39\x19\x94\x3b\xd5\x8d\xbd\xd5\x21\x41\x08\x50\xc9\x6f\x3a\x93\x10\x13\x00\x3b\x72\xe6\x5e\x86\x7a\xbd\x2c\x98\xb9\x10\x72\x5a\x4c\xd0\xcb\x4b\x5c\xa8\xe8\x0d\x98\x6a\x36\x17\x81\xa0\x4b\x2b\x54\x91\xa4\x5c\x2d\x42\x66\x31\xd4\x3d\x59\x5c\x41\x85\xec\xf3\x0a\x1f\x4a\xad\x9b\xe2\x2d\xbe\xee\x44\xe0\x63\xc6\x67\x22\x93\x8c\xe3\x85\x0f\x8e\xde\x1c\x4a\x5d\x99\xa4\x56\x8b\xf8\xdc\x8e\x1a\xcd\x15\x35\x49\x0c\x6c\xbf\xa0\x6a\xcb\xb4\x94\xff\xdf\x3e\x85\xe5\xae\x12\xf6\x39\xb9\x7b\x44\xfb\xa1\x49\x64\x07\x00\x8a\x00\xc2\x72\x56\x81\x2d\x8c\x56\xec\x34\x64\x70\x25\x1e\xa6\x7f\x49\xd3\xc6\xec\x3a\xd9\x5a\x4c\xc0\x86\xd8\x4f\x91\xa6\x69\x6e\xec\x54\x56\xb5\x56\x50\x24\x2d\x55\xe8\x3f\xd3\xb9\x7a\x58\xd3\x01\xdf\xba\xe9\xfb\xf3\x91\xaa\xbd\x50\x16\x88\x62\x8a\xb9\xbb\x0b\xd6\x79\x04\xa3\xcd\x49\xdb\xc9\x7f\xdf\x7d\x4d\x36\x77\xdc\x46\x6b\x37\x34\x95\xf6\x07\xc3\x4a\x2c\x67\x9a\x2c\x8b\x65\x8c\xf4\x66\xb3\xc6\x2a\xe8\x98\x5b\x97\x49\x2e\x84\x38\xe3\x7c\x99\xee\x09\xf1\x8e\x0e\xb8\x36\xc3\xc8\x5d\xc1\x93\x4e\xe3\x7c\x50\x80\xf1\x10\x7a\x66\xe9\xde\x61\xe7\x8e\x91\xec\x4b\x25\x04\x3d\x00\x68\x55\x92\xde\xde\x91\x92\xf4\xf6\x0e\x2b\xaf\xce\xa7\x28\x2e\x50\xe5\xaa\xdb\x90\xb2\x78\x7b\x47\xa7\xd3\x5d\xa6\x05\x0f\x4f\x0f\x65\xe0\x7c\x2f\xcd\xae\xa9\xfd\xc5\xc3\x7d\xc7\xd4\x34\x71\x3b\x93\x85\x7a\x4f\x66\x3e\x10\xad\xa4\x09\xe8\xe1\xae\xa6\xe0\x28\x68\x26\x15\xdb\x34\xbf\x94\x5e\xef\xdf\x35\xbb\x3c\xcb\x67\x9a\x72\x7f\x72\x71\x47\xa0\x72\xd6\x71\x43\x2b\x95\x9f\x08\x3e\xaa\x9f\x37\xc6\x50\x2c\x6a\xa3\xda\x94\x23\x58\x30\xdf\x50\x11\x98\x26\x63\x22\xf0\xf2\x22\xe1\xf7\x54\x37\xc7\x5c\x9c\x06\x54\x9f\x9a\x8a\x7a\xe0\x70\xa5\x27\x6b\x4c\x4b\x9a\xe7\x6c\xd3\x15\xe3\xff\x61\xef\xcd\xbb\xdb\xc6\xb1\x44\xf1\xff\xf5\x29\x6c\xbe\x69\x1d\xf2\x19\x56\x24\x2f\x59\xe4\x20\x9e\x54\xe2\x54\x7b\xda\xb1\x6b\x62\xa7\x7a\x7a\x54\x7a\x6e\x5a\x82\x6c\x54\x28\x52\x0d\x42\x76\x5c\xb1\xbe\xfb\xef\xe0\x62\x27\x41\x5a\x59\xfa\x4d\x9f\xdf\x79\x7f\xc4\x11\x49\xac\x17\xc0\xc5\xdd\xaf\x76\x8d\x49\x60\x74\xce\x6a\x5a\x42\x53\x90\x2f\x40\x83\x00\x81\x0e\xc1\xf9\xd5\xe0\x03\x19\x06\xa8\x27\xea\xf4\x04\x9f\x9d\xe0\x5e\xad\xed\xd1\x54\x36\xa4\x32\xce\x2d\xab\xa8\x0c\x72\xf1\x53\x47\xb6\x28\xaf\x4e\xf8\xfd\xf0\xe0\x48\x14\x9d\x75\x86\x26\xf2\x82\xd3\xd9\xbd\x16\x84\xbe\xb9\x49\xf3\x6b\x9d\x8e\x26\xd5\x76\xe5\x93\x80\xd4\x72\x13\xe3\xac\xdb\xcd\x5a\xc2\x7e\x43\xf3\x8c\xcc\x8b\x5b\x72\x76\x55\x12\x76\x4b\x58\x12\x0b\x76\x66\xa2\xdb\x9d\xe2\xe8\xdf\x45\x9b\x90\xf4\x14\x2d\xf0\x2c\x5e\x82\xe4\x47\x6c\xa0\x85\x36\xba\x52\x66\x4f\xd3\xc3\x68\x34\x8e\x86\xea\x0c\x1f\x48\x41\xec\x74\x6a\x5b\x86\x21\xcf\xd1\x44\x00\x62\x34\x1f\xaf\x48\x56\x92\x8d\x0c\x2f\x1a\xf6\x2f\x1f\xf5\xc7\x88\x8a\x66\xf5\x85\x93\x0f\xdd\xeb\x27\x77\xd7\xc5\xeb\xa8\x44\x54\xf4\x42\x57\x49\x87\x5a\xb8\x66\x89\x0a\x5c\xa6\x1d\x63\xd6\xba\x6a\x6e\x93\x43\x77\xb2\x86\x06\xbf\xd5\xfb\x2f\x19\xde\xc4\xb7\x68\xd1\x88\x1f\x62\x62\xaf\x49\x23\x68\x57\x8b\x96\x59\x26\x69\x56\xa3\x5e\xeb\xfb\xdf\x98\xb5\x0e\x05\xb3\x21\x01\x24\xe0\x34\xd0\x78\x62\xc4\x50\x8e\xf3\x87\x87\x28\x2d\x27\xd1\xd8\xa5\x42\x6f\x2a\x58\x17\x46\xda\x7c\x86\xa8\xc5\x60\xf2\xa6\xe0\x01\x11\x25\x1f\x15\x63\x54\xe2\x54\x0c\x63\x89\xd3\xd1\x60\x8c\x32\x49\x7e\x82\x59\x13\x93\x22\x2d\x83\x83\xa4\xab\x98\x49\x8b\x5b\x26\x72\x27\x89\x6d\xaa\x6e\x96\x68\x4a\xca\x89\xd8\x6a\xcb\xc3\xed\xc1\xff\xce\x86\x99\x16\x72\xf6\x57\x89\xa0\x21\x25\x04\x27\x1e\x07\x6c\x94\x21\xad\xfa\x93\x7a\xc2\xc0\xba\x36\x05\xb8\xe8\x39\x61\xd7\xa4\xe9\xa3\x54\x2b\x34\x7d\xbd\x23\xe9\xa7\xcb\x92\x84\x7d\x13\xd7\x35\xb1\xd1\x5d\xac\x19\x36\x52\x99\x69\xb7\x6b\xd3\xa1\xc9\x5f\xd4\x58\xd7\x6e\x5a\x56\x6b\x6d\xf9\x52\x20\xc8\x73\xb2\xae\x02\x8c\xba\xc3\x25\x3d\x00\xb5\x7b\x1e\x0a\xcc\x65\xb4\xa7\x43\xa6\x4b\x0e\x4d\x00\x29\x59\xba\x68\x58\x7b\x77\x75\xd6\x32\x7f\x37\x07\x83\xfb\xd4\xd3\xe0\x80\xbf\xac\xde\xd8\x92\x8a\x92\x04\x88\xbd\x9c\x39\xd8\xbb\xb2\x44\xd7\xcd\x75\x70\x86\x4f\xe4\xbe\x8c\x99\xbe\xd8\x73\xd7\x38\x5b\xa7\x74\x10\x37\x3b\x11\xb4\x16\x1b\x15\x63\xab\x9d\x5a\x11\x05\x75\x88\xb9\x17\xb0\xcf\x67\xba\x0f\x59\xec\xe1\x81\x3b\xa6\xfa\xac\x05\x36\x6a\x5b\xff\xb0\x64\x0b\x32\xac\x85\x12\xc4\xf0\x80\x20\x86\x6b\xb5\x00\xe9\xb8\xc1\x43\x5c\x10\xf1\x20\x88\x20\xc0\xc7\x18\x49\x47\x88\x11\x33\x14\x10\x59\xb5\x4c\xcf\x1c\xbd\xef\xf2\x7d\x08\x90\x28\x6a\x83\x1f\xaa\xff\xdd\x4d\x6d\x76\x10\x31\x5e\xb2\x82\x0f\x74\xe8\x86\x95\xc6\xda\x26\x2e\xb1\xd5\xd2\xa4\xd3\x69\x88\xff\x34\xed\xc0\xb5\x45\xd0\xa6\x4a\xcf\xb4\x42\x5c\x25\x35\x6c\xaf\xe5\x24\x3e\xe4\x82\xbc\x68\x2f\x2d\x59\x77\x99\x1a\xb7\xd1\xe7\x43\x65\x9d\x5d\x5f\x3d\xed\xba\x7e\x30\x56\xb0\x6d\x08\x14\xd8\x14\xe5\x4b\x0b\x1a\xaf\xd2\xc9\xa7\xab\x25\xcb\x1b\x02\x76\x85\x5c\x6e\xde\x2c\x19\x23\x39\xff\xb0\xcc\x4f\x8a\x62\x11\x0a\x39\xaa\x92\xb2\x80\xdf\xc8\xef\x05\xcd\xf1\x0d\x22\xbd\x2b\x72\x4d\xbd\xc0\x8d\x99\x7c\x25\x69\x79\x92\x4f\xfd\x6f\x90\x44\x09\xa8\x60\x95\xa5\x2d\xd0\x51\x66\x3e\x2a\x39\x59\xe6\x79\x7f\x82\x32\xfb\x5c\x95\x98\x5e\xd0\x39\x61\x21\xf7\xf2\x4c\x14\x93\x5f\x15\x5f\x91\xe6\x13\x92\xd5\xcb\x67\xde\x17\x59\x36\x4b\x39\x61\xc1\x46\xe1\x4b\xc3\xb8\x8a\x7c\x42\xbe\x8d\x6d\x91\x76\xea\x04\x0c\xd4\xc5\x39\x75\x30\xa3\x3d\xb4\xbc\xb7\xcc\xcb\x1b\x3a\xe3\x8e\xfa\x1e\x59\x60\x9d\xe5\x13\x0b\x30\xee\x01\xf9\xac\x32\xb0\x1a\xa0\xbd\xba\xfe\xa4\x72\xf2\xf9\x1b\x79\xb1\x35\x27\x05\xe2\xad\x81\x98\x89\x0f\x5b\xee\xac\x5a\xe8\xe4\xe9\x75\x93\x87\xae\x37\x25\x57\xc5\xb2\x69\x9e\xfa\x63\xc3\x1c\xf9\x0d\x2b\x38\x6f\xd8\x8c\xfa\x63\x43\xdd\x2b\x9a\x4f\x31\x31\x89\xfb\x3e\x2c\x73\x4c\x7a\xf6\xfc\x61\xd2\xfb\xc7\x92\x2c\x49\x09\x99\xe5\xcb\xdb\x05\xf8\x84\xfd\xa7\x78\xe5\xdd\xd6\x28\x85\xdc\x73\x2a\x21\x43\x1c\x45\x5b\x20\x24\x63\x69\x3e\x2d\xe6\x71\xb2\xa5\x1d\x6f\x62\x90\xfc\x4a\x09\x7a\xd4\x8b\x50\x14\x09\x64\x53\x6d\x59\x47\x40\x1e\xd9\x14\x88\xca\x9f\xf5\x82\xa5\x79\x49\xcd\x3b\x70\xff\x8b\x50\x04\xbe\x0e\x1f\xf4\x93\xce\xc2\x86\xca\x71\xc7\x8c\x5f\x07\x51\xf6\x3d\x9e\x97\xe8\x8b\xfa\x09\x3d\x0f\x6d\x87\x45\xfe\x93\x40\x04\x9e\x4c\x2c\xc5\x64\x85\x8a\xfc\x28\x9f\x56\x98\xc6\x14\x73\xf8\x20\xa6\x70\x21\x03\xa3\xb3\x9e\xf7\xac\xbf\xbe\x27\xfc\xa6\x98\x0e\xa3\x22\x57\xb1\x2f\x66\xd9\xb2\xbc\x19\x16\x6e\x4c\xaa\x89\xbb\x7e\x6c\x99\x87\x96\xce\x5b\xa4\x4c\x7b\x3c\x4a\xb3\x12\x88\xc3\xd4\x71\xc8\x7d\xa7\x39\x81\xf9\xc2\xed\xb9\x5b\x60\xd6\x51\x3b\xe3\x9f\x77\x72\xd6\x6b\x99\xf9\x2d\xbb\xf6\x08\x6c\x94\xbb\x2d\xe7\xa6\xe5\x1b\x5f\x3f\xc1\xb5\x7e\x82\x25\xc9\xca\x27\x1c\x94\xf7\xf2\x8f\xca\x84\xf0\x78\x2a\xa4\xaf\x4d\x6f\x50\xea\x3c\x4e\x3f\x26\xb7\x41\xde\x9c\xdb\x20\xe9\xe4\x95\x80\x60\x95\xdc\x52\x43\x88\x6a\xda\x94\xf7\x20\x4f\x94\xca\x32\x77\x68\x07\x5f\x3d\x29\xc0\x90\xb7\x45\xfd\x57\x05\x04\x0d\x27\x7f\x9a\x70\x0c\xdf\x94\xfb\x2d\xe4\xac\x1b\x4c\x3a\x91\x15\x13\x7c\x89\x48\xef\x0e\xdf\x01\xd8\x26\xe9\x9c\x64\xf4\x0f\x82\x8f\xc4\x63\x5a\xde\x10\x26\x9e\x3e\x03\x3a\x57\x9f\xce\xc5\x03\x18\x3b\xcd\xee\xf1\x6b\x60\xe8\xa7\x84\x95\x93\x82\x11\x7c\x06\x05\x17\x94\xa7\x50\xf4\x53\x0b\xcf\x74\x4d\xf8\x39\x4c\x75\x7d\xe3\x69\x5b\xa5\x9d\x1d\x2b\xbf\xbe\xe9\xd2\x6d\x5a\xad\xe7\x93\xd1\xc6\xe5\xf8\xc9\xb5\x12\x82\xe5\x3d\x88\x4c\x15\x0f\xc8\x6e\x48\xf5\x75\x24\x55\xf2\x12\xbd\x53\x14\x6d\x83\x67\x72\x8a\x9f\xc4\xbf\x6d\x3f\xfc\x76\xf9\xf0\x5b\xef\xe1\xb7\x32\xd9\x8a\x7b\xc9\xe1\x93\x6b\x54\xe2\x27\xf1\xff\x79\xf8\xed\x49\x12\x8f\x5e\x6f\xff\xf7\x38\x79\x72\x8d\x96\xeb\xf4\x62\x75\xb0\x69\xed\xc0\xe9\xf3\x74\xc8\x7a\xbc\xf8\xb8\x58\x10\xf6\x26\x2d\x49\x9c\x0c\xa3\x68\x65\x87\x56\x86\x9b\xe5\xc5\x49\x71\xa7\x6b\x80\xba\x2a\xc3\x4f\xfe\x8f\x18\xfb\xa5\x1a\x34\x9a\xe0\x27\x71\x2f\x09\x4e\x67\xa6\xa6\xf3\xf0\x5b\x2f\x89\x47\xe9\xf6\x1f\x30\xa3\x9b\xd6\x19\x59\x5e\xb3\x71\x22\xd1\x65\xb4\x15\x98\x0c\x62\xb8\xbe\xb1\xf5\x4a\x6e\xc5\xf9\x61\x5e\xab\x93\xac\x50\x6e\xc5\x46\x4f\xa2\x20\xcb\x05\x36\x6d\xe2\x8f\x01\x96\x20\x65\xcc\xc3\x04\x31\x27\x7d\xaa\x74\x81\x7e\x12\xd9\xef\xb3\x26\xc8\x3a\x43\x01\xc8\x4e\xf1\x13\x00\xd2\x6f\xd3\xb1\x5a\xff\x2d\x01\xae\x05\x7e\x22\x60\x5b\x6e\x3d\xb9\x46\xf3\xaf\xdb\x0c\x53\x14\xfd\xdb\xe0\xf2\xdf\x76\x9c\xd1\x2c\x50\x74\x19\x25\xd5\x75\x45\xb7\x76\xe3\x89\x11\x2c\xfb\xfd\x37\xfd\xed\xdf\x96\xfd\x9d\xbd\x77\xb0\x66\xd7\x5f\xd7\xf1\xed\xba\x73\xbe\xaf\xcd\x59\xf4\x76\xf5\x75\xbd\xdd\xdb\x69\x56\xe6\x65\x6f\xfc\x4b\xcf\x78\x67\xd3\x97\xc8\xb3\xe4\xe1\xa1\x16\x57\x66\x27\x01\xe5\xf6\x3a\xd7\x0b\x1a\x24\x09\xaa\xcb\xcc\x19\xee\x77\x6a\x83\x7d\xf2\xa7\x7f\x8f\x47\xfd\xed\x17\xe3\x2d\x79\x44\x3c\xc1\xbc\xba\x30\x0e\x17\x29\x2b\xc9\x71\xce\xe3\x1c\x0d\xfa\xc9\xf6\x60\xc8\xb6\xb6\x50\x81\xa9\x91\x33\x1e\xf2\x11\x1d\x6b\xe9\x8f\x92\x0e\xca\x1b\xc2\x32\xe7\xc5\x61\x31\x54\x22\x88\xe2\x30\x92\x24\x50\x34\x34\x0a\x8e\xe2\x30\x8a\x86\x12\xb9\xc5\x85\x14\xfe\x1b\x23\x33\xf9\x3a\x01\xc5\xb5\x80\x9b\x15\x94\xde\x79\x2b\x20\x0f\xce\x13\xb1\x39\x9d\x32\x47\x4e\x99\x2b\xa5\x8e\xb2\x5f\x3f\x3b\x5f\x8b\xda\xd7\x73\xe7\xeb\xb2\xf6\xf5\xb5\xf3\xf5\xa6\xf6\xf5\xcc\xf9\x3a\xaf\x7d\xfd\xe4\x7c\xbd\xd6\x5f\x99\x4c\xd8\x56\x0d\xb3\xde\x93\x00\xe8\x76\x43\x97\x09\x25\x65\x2c\xbf\xdb\x6d\x81\xbe\xdc\x0d\xbf\x4c\x8a\x7c\x46\xaf\x97\xe6\x52\x71\xaf\x98\x01\xba\x63\x94\x13\xfd\x09\xac\x85\x03\x37\xce\x9d\x0a\xe7\xbb\x42\x59\x31\xf9\xbe\x16\x7f\x30\x71\x7a\xa9\xd5\x34\xab\x15\xd2\x77\xfe\x0f\x99\xf2\xb9\x99\xb2\xa5\x33\x7e\x48\xc3\x47\xb6\x61\x4d\xb1\xfc\x90\x76\x3f\x9b\x76\x2d\x85\xf3\x43\x1a\x3e\x33\x0d\x6b\x3a\xea\x87\x34\xfb\xda\x36\x6b\x48\xb0\x1f\xd2\xf0\x27\xdd\xb0\x40\xe5\x9d\x1a\x59\x1b\xa4\x5a\xd7\x14\x40\x5a\xba\xab\x92\xb8\x83\x80\xe9\x68\xe0\xab\xbd\xea\xbd\x12\x41\x09\xdf\x88\xd8\x2c\xb7\x9a\xfd\x51\x0e\xf7\x4f\x48\x3e\x29\x80\x67\x5e\x73\xa4\xc7\xca\x3b\x83\x0a\x26\x18\xaa\x36\xe6\xdf\x70\x44\xa2\x3a\x64\xda\xd5\x72\x36\x23\x0c\x13\x19\x5a\x49\x60\x92\x5f\x8a\x12\xf7\x55\xd4\x39\x41\x2b\xf7\xdb\xc4\xa4\x72\xb0\x75\xc9\x33\x79\xb5\xb3\xbf\xef\xc4\x33\x03\x3e\x3b\x8e\xce\x16\xa2\xf8\x86\x68\x63\xa3\xb8\x25\x6c\xe3\xf9\xf6\x15\xe5\x65\x6f\xe3\xe7\x82\x6f\x40\x14\xb3\x9e\x0e\xb2\x25\x07\xa6\x2c\x95\x1e\x78\xed\x7a\xdc\xde\x79\xf9\xf2\x79\xe2\x0f\xdb\xad\xa8\xed\xe5\xad\x78\x1b\xef\x1c\xb0\xba\xee\xc0\x0d\xe0\xe0\x62\x1d\x3a\x8b\xa3\x7c\x29\xb6\x93\x13\xc9\xa1\xdb\xcd\x5f\xed\xed\xbc\xd8\x7b\xf1\xf4\xd9\xce\x8b\xe0\xfc\x08\x4b\xf3\xa9\x9c\xdb\xee\x8e\x37\xb9\xbc\x61\x72\xb9\x0c\x05\x2d\x81\x5d\x9f\xc1\x0a\xf1\xde\xa2\x6a\xb6\x2d\x81\xbc\x3d\xd0\x11\xab\x65\x8d\x11\xd9\x1a\x8c\xeb\x83\xba\x60\xf7\x34\xbf\xde\xe0\xc5\x06\xb4\xb3\x51\xa8\x41\xd2\x7c\x63\x51\x2c\x96\x59\xca\xc9\x74\xa3\xcc\x0a\xbe\x41\xf3\x92\x93\x74\xba\x51\xcc\x36\xd2\x0d\x46\x40\x5d\x2b\x3f\x55\x46\x0e\x3d\x61\x6e\xc6\xf6\x57\xca\x6f\x6a\xe4\xf2\xbf\xc2\x08\x91\xff\x6a\x67\x8c\x99\x11\xa7\x07\x0e\x0e\xaf\x9c\xc5\xac\xb8\xdb\xce\xc8\x2d\xc9\xd6\x3e\x8d\xe7\x3c\x9d\x7c\xc2\xe2\xff\x82\xa5\xbe\xfa\xac\xe9\x28\xaa\x93\x98\x8a\xdb\x10\x8f\xc6\x72\xc8\x20\x23\x6d\x3d\x7a\x55\x0d\x85\x35\xc1\x80\xca\x3a\xda\x20\x34\x2b\x76\x33\x77\xa3\xc3\x98\x62\x5b\x5b\x1d\x92\x95\x44\x9d\x00\x36\xe2\xe3\x8e\xed\x3f\x5f\xb9\x2a\x09\x68\x69\xc4\xc7\x02\x59\x48\x7d\x07\x23\xb3\x46\x05\x86\x2c\x4d\xc6\x50\x92\xb9\xe2\x7f\xe2\x4e\x18\x72\xae\x9b\x31\xdb\xae\x89\x59\x26\x0d\xc9\x40\xe2\x27\x0f\x88\xdf\x15\xb9\x72\xa4\xa6\x7d\x4b\x26\x98\xb4\x41\x1d\xc2\x1e\x06\x90\xbe\xd8\xcd\x32\xe0\xbb\x68\xc3\xd8\x1e\x88\xd9\xc3\xef\x77\xac\x70\xec\x2b\x79\x7b\x3d\xee\x54\x74\x2a\x39\x3c\x68\xb8\x1a\x62\xb2\xe2\xa4\x58\x54\xad\xfc\x74\x51\xb1\x7e\xe6\xb7\x5c\x1d\xb8\x6a\x3f\xa4\x77\x4d\x35\x88\x3a\xe9\xd7\x84\xfb\xa5\xfc\x05\xb7\x0d\xd6\x82\x57\x99\x71\xea\x18\x56\xa2\x54\x46\xf2\xd0\xe5\xe9\x17\x75\x76\x81\x38\x57\xac\x72\x3e\xf3\x62\x5a\xd1\x9a\x02\x01\xb0\x7d\x95\x5e\x11\xb0\x8e\xd7\x05\xd7\xce\xc3\x59\x12\x26\x23\xa8\xfe\xb4\xa4\xd9\x94\xb0\xb0\xb5\x28\xed\xcd\x0a\xa6\xa2\xad\x4a\x11\xb7\xb2\x3b\x25\xbd\xd3\x62\x4a\xde\x9e\xbd\xbf\x60\x84\xbc\x29\x2c\x86\xf1\x45\x7e\x9e\xbc\x41\x6f\x62\xe6\x6c\x0b\xe2\x58\x67\xf3\xe4\xe1\x01\x74\x8c\xd2\x19\x29\x17\x94\x24\x2f\x4f\x8a\xa2\x24\x49\xcc\x10\xb1\xb1\x3c\x6b\xfb\x35\x97\x21\x55\x3f\x96\x24\x23\xa5\xf6\x4b\xf4\xb3\xbc\xe9\xec\xa2\xb5\x8f\x95\xe5\xd5\xc1\x24\xfd\xe2\xa0\x29\x81\x5e\x5e\x73\xce\xe8\xd5\xd2\xf7\x56\x01\x08\x13\xef\x33\xec\xd2\x15\x62\xab\x98\xf5\x02\x70\x12\x6b\xdd\x04\x42\xed\x82\x11\x84\x9e\x36\xbb\xd3\xc6\xd4\x10\x9d\x39\x18\xed\x55\x42\x33\x71\x96\x3a\x2b\x26\x9f\xde\x92\x05\x44\x57\xe3\x41\x30\xe7\x1a\xcc\x14\xe7\x75\x30\xd3\xde\xe5\x65\xb1\x20\x39\x34\x54\x0d\xc4\xa3\x70\x72\xa0\xb7\xad\x2d\x1d\x11\x39\x5d\x2c\x48\x3e\x7d\x53\xcc\x01\xa6\xd1\x9f\xb6\xae\x86\xd1\x16\xdf\x8a\xfe\x04\x31\x17\x2d\xef\xef\x74\x63\x37\x48\xb2\x42\x62\x00\x93\xac\x28\x49\x6d\x04\x7e\x6d\x5b\xc6\xa9\x8e\x1a\x06\xb1\x2d\x06\xb1\xbd\xdd\x38\x7a\x31\x3a\xd9\xb5\xac\xf9\xe7\x8b\xf7\x27\x38\x60\x26\x16\x6e\xfd\x3a\x9b\xb3\x3f\x45\x60\x62\x14\x5d\xbc\xfe\xe9\xe4\x28\x52\x59\x35\x7a\x44\x6e\xad\x1e\x4f\xaf\x4f\xd3\xb9\xb1\xc5\xe5\xc6\xf0\x33\x7a\x29\xeb\xd1\x57\xdb\x83\x24\xe2\x0c\x6a\x2a\x1c\x48\xb7\x06\x88\x6e\xed\x26\xe0\xd2\x1b\xbd\xe4\x57\xc5\xf4\xfe\x15\xc0\xf2\xe5\x13\xf5\x90\xac\x22\xa8\x71\xd8\x30\xb2\x8d\x3f\x45\xc9\xd0\x87\x9b\x9d\xa0\x77\x2e\xb5\x55\x4c\xfb\x0c\x1d\x94\x0d\xd1\xbd\x27\x8c\x70\xf2\x53\xb1\xcc\xa7\xd2\xba\x50\x4f\x18\xe5\xa8\xf0\x00\x7a\xe1\xe9\x49\xb5\x4c\x47\x46\x52\xc7\x71\x8e\x63\x79\xc5\x27\xb6\x01\x29\x6c\x89\x29\x66\x70\x8b\x9e\xd3\xab\x8c\xe6\xd7\xc9\x61\xde\xcb\xd2\x92\x43\x7c\xe3\x21\xed\x2d\x18\xb9\xa5\xc5\xb2\xd4\x9f\xb5\xfc\xe6\x71\xa8\xc4\x45\xb7\xbb\x8b\x31\x2e\x7a\x02\xf3\x5e\xdc\x2f\x88\x4a\x8f\x52\x2f\xff\x50\xdf\xbb\x76\x56\x1e\x14\x61\xce\xb0\x33\x03\x08\x4a\x5b\x32\x57\x37\x47\x4e\xc8\xb4\x3c\xfa\xcc\x59\xfa\x46\xd4\x14\xcb\xdd\xf2\x19\x6f\x0e\xbc\xb1\xb8\xbd\x39\x27\x21\x59\xa7\x90\x18\xad\x38\x85\xb5\xc1\x1a\xec\xad\xb7\x64\xb7\x1b\x5d\xfc\x74\xf6\xf6\x6f\xd1\x66\x78\x67\xeb\x41\x3b\xad\xc5\x11\x6c\x52\x1d\xea\xd6\xb8\xde\xd3\xfc\xba\x3e\x27\xc5\xa5\x81\xb6\x52\xd7\x07\x21\x9b\x3f\x0f\xa7\x79\x0f\xee\x2b\xe5\x08\xf2\x81\xcc\x8b\x00\xfe\xe7\xd6\x51\xba\x2e\x9a\x0c\x12\x55\x3b\x2e\x51\xb5\x33\x56\xf1\xea\xb1\xba\x3e\xe6\x60\x20\xef\xdf\x1e\x91\xf4\x90\x8f\x92\x4e\xe1\x5f\x12\x91\x38\x3c\x11\x62\x09\xa2\x3d\x9a\x97\x84\xf1\x9f\x64\x98\x3e\x8e\x0a\x94\xfb\xf3\xab\xcd\xc1\x9d\x25\x08\xe1\x57\x28\x17\xd7\xcd\x29\xb9\x53\x25\xd4\xe5\x9e\x54\xc8\x89\x02\xd8\x53\x93\x72\x20\xa8\x11\x73\x83\x3b\x34\x10\x1b\x4b\x4e\xbd\xe7\xdb\xb9\xfb\x74\x47\x19\xd9\x86\xe8\x99\xdc\x7d\x6d\xd8\x7e\xfb\x6a\xc1\x8a\x6b\x96\xce\x5b\x12\xe4\xd5\xc8\x17\x35\x74\xd0\x9a\xe9\x14\x0a\x4a\x59\x58\x67\x16\x10\xc3\xa4\x47\xa7\xd2\xff\x81\xf0\x14\x02\xb3\x5e\x09\x04\x8f\x52\xcc\x1e\x1e\xa2\x49\x46\x49\xce\xb7\xa3\xad\xb7\x5b\x5b\x0a\x49\x7c\xa1\xd3\x61\x8a\x44\xe9\x21\x45\x72\x31\x5d\xbd\x3b\xd3\x36\xd6\x4c\x1a\xe2\x3a\x81\x1e\x18\xa2\xc9\x90\x1a\x4a\x1a\xf2\x27\xfc\xc7\xf9\xd9\x69\x0f\x64\xcd\x71\x91\x24\x48\xa0\xc8\xd3\x98\x20\xd9\x09\x8c\x64\xc8\x11\x23\x33\xc2\x18\x61\xc3\x72\x95\xac\x56\xca\x30\x63\x79\x5d\xa3\x33\xac\x41\x6c\x4d\xde\x98\x3a\xf2\xc6\xe2\xd5\xee\x61\xb1\xbd\x3b\xec\x27\xa8\xc4\xbb\x07\xe5\xcb\x02\xa2\xcd\xa6\xa3\x72\x7b\xd7\x95\x3c\x96\x82\x25\x60\xc5\x9d\x72\x64\x61\x24\x9d\xdc\xa4\x57\x19\x49\xe2\xe8\xbd\x4c\x3d\xba\xa1\xc4\x19\xef\x09\x4f\xa7\x29\x4f\x37\x66\x05\xdb\x88\xb6\x98\x0e\x24\x0a\x35\xa7\x74\xc2\x93\xd8\xf3\x8d\xec\x15\x8b\x32\x10\x49\x1b\x15\x1a\x78\xe9\xa8\x18\x77\xca\x3b\xca\x27\x37\x31\x03\xe9\x46\xf2\x65\x92\x96\x24\xe2\x45\x34\x5c\x8e\x98\xca\x18\x45\xb6\x4a\xe9\x02\xd2\x81\x8f\x74\x77\x27\x1a\xc2\x2f\x19\x92\x58\x3d\x00\x18\xdd\x6a\x5e\x25\x99\x24\xd6\xfd\x6c\x42\xa4\xcb\x0c\xad\x71\x99\xb8\xe5\x4b\xce\xfc\xc2\x46\xd0\x55\x29\x28\x33\x28\x6d\x57\xca\x97\x87\x7e\x0d\xc0\x11\x95\xf6\xb7\x81\x31\x6c\xe8\x45\xae\xa1\xdf\x55\xb8\x7c\xa8\x24\x04\x78\x73\x0a\x6e\x6e\x7a\xc0\x58\x30\x3a\xa7\x9c\xde\x7a\xf0\x08\xa9\x55\xc8\xab\x57\xbb\x7a\x81\x9e\x75\xd5\xea\x6c\xf4\x87\x5a\x43\x08\xcd\x6d\x0c\x86\xae\x86\xf8\x14\x84\x49\x31\x4b\xe4\xc7\x9d\x61\x5d\x7d\x6c\x3e\xee\x0e\xf5\xea\x57\x9a\xde\x1c\xf8\x4d\x6f\xf6\x2b\xad\x01\x3c\x55\x1b\xf2\xd5\x0a\x9e\xf6\x60\x33\x6c\xec\x37\x0c\x49\x9b\xf3\x36\xec\xf8\x64\xb5\x8a\x81\xe0\x71\x80\xa5\xa3\xbd\xbb\xb0\xd2\x09\x1d\x09\x13\xc7\xc7\x5d\x56\x45\x3f\x8a\xe6\xea\x2b\xeb\x7c\xac\x2c\x58\x96\xfe\x71\xbf\x0d\xb7\x60\x9a\xf3\x5a\xc5\x33\x7e\x43\x58\x5c\x42\x9c\xd3\x11\x9c\x2c\x48\x36\xb7\x1c\x1b\x24\x71\xee\xb3\xd0\x82\xe1\x21\xbd\xac\xb8\x96\x27\x37\xbc\xb6\x20\x2c\xd1\x57\x9f\x6f\x10\xdb\xe0\x98\x1b\x49\xd9\x25\x8e\xb6\xe0\x56\x04\xf1\x6e\xa2\x34\xb1\x82\x00\xdc\x32\x92\x94\x28\x8e\xb6\xd8\x56\x94\x44\x62\x1c\xbf\x9c\xbc\x7e\x73\xf4\xe7\xb3\x93\xb7\x47\x1f\x2e\x65\x7e\x6b\x4c\x7a\x7f\x65\x82\x4c\x9a\x6a\xf6\x93\xf4\x7e\x49\x99\x60\x33\xdf\x92\x19\xa4\x58\x83\xd4\xcb\xe7\x7c\x2a\x67\x60\x8b\x55\x9f\x8f\xd2\x6b\xc2\xaa\x2f\x4f\xd2\x3f\xee\xab\xef\xde\xc0\x95\x21\x60\xff\x8b\xbc\x6f\xbc\x77\x92\xa1\x50\xd0\x7c\xa3\x2e\x46\x4c\x7a\xaf\xaf\x4a\xce\xd2\x09\x77\x5e\x89\xc6\x9d\xc7\xf7\xe0\xd6\x2e\x8a\x5e\x5c\x7c\x38\xbf\xfc\xe9\xe4\xec\xcd\x5f\x5c\x2e\x78\x89\xb2\x4e\x10\x06\xdb\x03\x14\x67\x78\xf9\xf0\x10\x2f\xf1\x97\x55\x92\x8c\xb2\xde\xd9\x82\xe4\x26\xe7\x92\xa6\x54\xfa\x63\x1c\x85\x3e\x44\x28\x1b\x65\xbd\xb7\x74\xfa\xc6\x63\x6c\x07\x63\x1c\x55\x5f\x9a\xa2\x92\x89\x3f\x49\xef\x8b\x25\xc7\x3b\xb2\xa4\xfb\x4e\x15\x84\x3c\x56\x84\xe1\x5d\x51\x42\x3d\x44\xc6\xc1\xe7\x6c\x51\xa2\x19\x8e\xba\x29\xe7\xac\x14\xb7\xb1\x3b\x73\x95\xf7\x1f\x4d\xd1\xe2\x9f\x23\xc2\xea\x4b\x66\xb2\x98\xcd\x4a\xc2\xb5\x40\x1f\x32\xa5\x79\x17\x91\xa2\x19\x97\xf9\xa4\xc4\xa3\xf1\xfa\x02\x46\x23\x12\x82\xaa\x2a\xf2\x73\xe2\xf4\x62\x24\x79\xb2\x80\x96\xbf\xaf\x54\x6c\x07\x9a\x35\x1c\xb7\x91\x33\xec\xb1\x0a\x5a\xab\x5a\x64\x32\xc2\x8e\x69\x74\x94\x8f\x13\x2d\x68\x59\xc5\x89\x9b\x02\xd8\x89\xc5\x94\x63\x32\x1a\x8c\x05\x55\x33\xda\x19\x0b\x9a\x66\xb4\x3b\xee\xb0\x1e\xf9\xbc\x60\x31\x4d\x50\x71\x28\xbd\xc4\x60\xcb\x08\x8a\x33\xce\x51\x81\x78\x32\xac\xbf\x06\x02\xd6\x4d\x21\x79\xfb\x95\xfd\x4c\xef\xf3\x74\x4e\x27\x7e\x2f\xfe\x4b\xdd\x87\x39\x30\x15\xf1\x01\xa9\xbf\xf8\xc6\x0d\x22\x48\xa0\x6b\xf4\xcd\x09\x6c\x44\xf5\x7b\x6b\x4e\x90\x4e\xa7\x71\x44\x67\x51\xd0\x16\x9c\xce\xe2\x4d\xf2\xf0\x30\x80\xb0\x63\x46\xe4\x5c\x91\xfa\x9f\xff\xed\xf4\xe2\xf5\x7f\x6d\x1c\x7d\xf8\x70\xf6\x61\xb8\xf1\xbf\xe8\x6c\x83\x91\x7f\x2c\x29\x23\xe5\x46\xba\x21\x33\x2d\x6e\xe8\x11\x08\x86\x5f\x5a\x30\xdc\x0b\xac\x74\x3c\x8b\xbf\xa4\xec\xba\x0c\x3a\xb1\xc0\x02\x90\x51\x7f\x2c\x98\x07\x5e\xe8\x98\x38\x09\x1a\xac\x10\x9d\x5d\x30\x5f\x95\x28\xf8\x8b\xdb\xe2\x13\x39\xe7\x29\xa7\x13\x40\x77\x31\x13\xbc\xd1\xec\x5d\x9a\x95\x5e\xd1\xbc\xdb\x0d\x95\xce\x13\x15\x30\x4e\xc2\x64\x99\x67\xa4\x2c\x7f\x1c\x5c\x64\x7b\xff\x23\xb0\x69\x9e\x70\x08\x3c\x0d\x90\x74\x61\x73\x47\xbd\x28\x4e\xdf\x09\x19\xc8\x6a\xf4\x4f\x80\xcb\x74\xb9\x88\xab\xf0\xd9\x59\x7b\xef\xa0\xc1\xf7\xec\x1e\x41\x73\x05\x20\x54\x24\x5f\x0a\x67\x2e\x8d\x33\xe1\xdd\x6e\xf4\x89\xdc\x83\xf8\x61\xd4\x1f\x0b\x1c\x50\xc8\xc9\xf1\xd1\x40\x3c\x26\xc3\x02\x70\xf7\x2f\x9a\xd4\xfd\x20\xb8\x2b\x92\x4f\x74\xaa\xd8\xc2\x85\xc5\xce\x0a\x5d\x15\x53\x2f\x41\x98\xa8\xce\x8f\x39\x81\x58\x72\xb1\x28\xff\xfb\x72\xbe\xf8\x08\x9b\x34\x8e\x8e\x4e\xce\x8f\x22\xf1\x52\xf4\x01\x06\xa9\x50\x44\x40\xd4\xd2\x86\xbd\xd9\x02\x0d\xc4\x6b\x39\xe8\x8b\x22\x8e\x8e\x2f\x8e\x3e\x40\x3d\x92\x73\xc2\x4e\x68\xc9\xe3\x08\x44\x27\xe2\x5d\x26\x18\x6c\xa7\x0c\x85\xde\x49\x1c\xfd\xf4\xe1\xe8\xf5\x5f\xdc\x22\xa6\x4a\x68\x5d\x76\x60\x5c\xc5\x22\xde\xd1\xa3\x8e\xa3\x77\xc7\xa7\xaf\x4f\x4e\xbc\x6e\x6c\xa3\xe4\x33\xe5\x30\x14\x55\xd1\xce\xa7\xb1\xb2\x9a\x7f\xde\xed\x86\xc6\x50\x59\x6b\x9a\x6f\x13\x4d\x87\xfc\x30\x2c\x6a\xda\xfc\xbe\x93\x61\xb5\xe6\x8e\x17\x6b\x28\x39\x84\x13\x0e\x4f\xea\xcc\xad\xdc\x31\x12\xf7\x49\xb7\x1b\x5d\x2f\xe9\x14\x7e\x7f\xcd\xe8\xa7\x05\x91\x69\xcc\x78\xfa\x89\x6c\xa4\x1b\x7f\x8f\xb6\xd8\xa8\x3f\xde\x8a\xfe\xbe\x21\x59\x4b\x98\x04\xec\xd5\x7c\x54\x8c\x4d\xbc\xbd\xe0\x59\xde\x0b\x9f\xde\x9a\xe4\x28\x96\xf2\xa6\x3a\x16\x43\x10\xda\xa1\x52\xd6\x5b\xcc\x6d\x81\x8d\xb6\xd5\xdd\xbe\x7d\x9b\xb2\xe6\x2b\x80\x6b\x3f\x43\x00\x6d\x2a\x1d\x84\xa9\xa6\x92\x7e\x49\x59\x3a\x2f\xe3\x54\xc7\x69\x79\x2b\x9b\x3c\x9f\x14\x0b\x02\xe3\xbb\xa2\xf9\xd4\x7b\x59\xb4\x8f\xda\x6f\x40\x7a\x75\x37\xe0\x6a\x33\x1b\x27\xb7\x53\xc3\x24\xb4\xb5\x9f\xf1\x28\x14\x10\x7f\x78\xd8\xa4\xbd\x12\xda\x34\x54\xf9\x9f\x49\xb6\x20\x72\x41\x80\x76\xd2\x93\x27\x72\xf2\xda\xc7\x79\x20\x96\x53\x81\xcf\xd4\x8d\x0b\x49\x1f\xa5\x88\xa3\xcd\xbe\x94\xe5\xad\x12\xc4\x1f\x1d\xa4\x51\x1a\x74\xbb\x02\xc8\x1d\x67\xc0\x36\xbc\x41\xb7\x9b\x37\x0c\x96\x8a\x36\x40\x92\x6a\xd8\x6c\x7f\xc5\xec\xa0\xad\xab\x6f\xe3\xd8\x99\x18\x3b\xfc\x96\x28\x16\xac\xf6\xbf\x80\x5c\xa6\x1c\x12\x44\xf3\x8c\xe6\xa4\x1c\xf2\xd5\x4a\x90\xe7\x5a\x06\x57\x4a\xf1\x9c\xfc\xa8\x4c\x1b\xe0\xbd\xb6\x6a\x50\x9f\x30\x93\xa6\x44\xd7\xed\xe6\x05\xff\x1a\x9c\x40\x3a\x9d\x2a\xe1\x59\xdd\x1e\x60\xae\x3e\x90\x26\x96\x41\x4b\x3e\x8d\x7f\xbb\xdb\xa3\x0d\x05\x9b\x1e\x6a\xa6\x41\xb5\x98\x78\x95\x87\x3e\x4b\x91\x8e\x93\xd8\x7e\x94\x8c\x05\xba\xff\xff\x3d\x2c\x7d\x65\x12\x01\x0c\x34\xab\x9a\x25\x17\x7a\xff\x83\x1c\x9c\x45\x48\xe2\xf8\x62\xd4\x1f\x63\x8c\x27\x3d\x79\x5a\x12\x86\x0b\x71\x39\xe4\xb8\x10\x8c\x10\xc5\x85\x60\x84\xc0\xaa\x44\x15\xde\x14\x85\x3f\xe6\x9f\xf2\xe2\x2e\xaf\xb7\x68\xaa\x53\xf0\x57\x5b\xd5\x16\x57\x5a\x63\xd9\xf5\x55\x3a\x27\xbd\xba\x4a\x68\x5a\x5b\x74\x39\x39\x13\x59\x05\x62\xe4\x94\x87\xb6\xe3\x61\xb9\x72\xe3\x23\xab\xf0\x20\x4b\x5c\xdf\x1f\xa1\x96\x96\x6e\x4b\xcb\x55\x75\x56\x8a\x43\x15\x2d\x5e\x35\x99\xe0\x99\xc5\x9f\x18\xa9\x89\xec\x39\x93\x72\x08\x8e\xdc\xaf\x53\x09\x1d\xc3\x80\x39\x8a\xaa\xea\xfa\x1a\xe7\x6f\xad\x78\xd2\x4d\x24\xae\x46\x5f\xbf\xec\xf8\xbd\x6c\x0f\xdc\xec\xc0\x72\x28\x12\xf3\x00\xb2\x84\xbb\xcf\x4f\xb8\x6b\xaa\x7a\x93\x91\xd1\xc6\xdc\x09\xc9\xa0\xc4\x4c\xe9\x80\x94\x97\x12\x41\xa3\x2f\x9f\xc8\xfd\x50\x09\xad\x2f\x40\x42\xd8\xe4\x0e\x53\x1d\xd1\x6a\x35\x4e\xb4\x85\x48\x5d\x8e\x75\x05\x13\xb9\xfc\x6a\xf0\x83\x42\x62\xfa\x2f\x01\x7e\x39\x14\x7b\x29\x38\x4b\x00\xd7\x83\xca\x77\x4b\xf3\x6b\x29\xa7\x5a\x77\x5d\xa4\x11\xc6\x0f\x58\x0d\x39\xc0\xea\x6a\xb8\xd6\xfa\x6e\xee\x3f\x56\x01\x92\x49\x08\x76\xa3\x26\x2d\x5d\x73\x16\x1d\x49\x86\x4c\x7a\x17\xe4\x33\xaf\x38\x36\xf0\x1e\x27\x9f\x79\x2c\x50\x96\x25\x58\x26\x3d\xa5\x79\xae\x15\x9e\x28\x8d\x74\xad\xbc\xa3\xdd\xad\x57\x72\x3e\xc6\x6e\xad\x77\x8e\xae\xb5\x56\xcb\x53\xc4\xba\xb5\x74\x3e\xab\xa0\x8b\x06\xef\x69\x05\x17\x0a\x49\x94\x80\xda\x30\x6b\xa7\x54\x33\xba\xc1\x38\x47\x0c\x4c\x21\x94\xe6\x3f\x40\x61\x2b\x89\xac\x7c\x94\x66\xa8\x3a\x41\x70\xba\xa1\x13\x61\x0d\x37\x24\x2a\x2f\x37\xe6\xe9\x3d\x7c\xbb\x22\x1b\xcb\x92\x80\x09\x26\x64\x1a\x56\x54\xf9\xac\x60\x73\xb0\xb4\x34\x39\xb4\xe2\x54\x5e\x9c\x76\xb6\x92\xa6\x7c\xcd\x79\x78\xbe\x44\x22\x7b\x22\xef\x0a\x10\x9a\x71\x45\x86\x81\x48\x8c\x21\x8a\x72\xb7\xbd\xb7\x56\x5e\x56\x6d\x30\x26\x68\x73\x00\xd1\xf8\xdc\x7d\x60\x65\x78\x95\xf2\xf3\x40\xf9\x0b\xb6\x2c\x21\x38\x6d\x43\xf3\xfd\x70\xf1\x47\xbb\xa9\xd4\x3b\xb3\x4a\xf8\x46\xa8\x74\x04\x4c\x1e\x1e\xb8\xe0\xb0\x4d\xfb\x60\x52\x2c\x4a\x43\x2e\x70\x50\xe6\x1b\xde\x5d\xef\x35\x16\x00\x97\x69\xa0\x79\x11\xaa\xfb\x8c\x8c\xf6\xc6\xa8\xc4\xdc\x68\x8e\x05\x13\xb2\x94\x4e\xe4\xd4\x91\x35\xc6\x4b\x30\xc6\x11\xd4\xa7\xe4\x1c\xbe\x58\xac\x34\xa4\x68\x21\x18\x18\xc2\x09\x2b\x87\x79\xef\xe8\xfd\x2f\x17\x7f\xbb\x7c\xfd\xe1\xc3\xeb\xbf\xad\x12\x31\x81\x1a\x99\xcc\xd0\x52\x12\xc7\x85\x58\x9b\x52\xd2\xc8\xa1\x05\xfd\x86\x89\x98\x93\xb5\x0c\x1c\x22\x89\x31\xdf\x15\xec\x22\xbd\x8e\x19\x2a\x13\x94\xe1\x65\x4f\x2a\x44\xd1\x04\x2f\x7b\x2a\xb5\x1c\xe5\x94\x94\x68\x26\x5e\x98\x2b\xc6\x39\x73\xd9\xc3\x83\xfa\x35\x79\xe4\xf4\x0d\x37\xde\xa4\xb9\x38\x5c\x33\x9a\x4f\x37\x0c\xf7\x62\x55\xc6\x37\x01\x58\xdf\x7c\x2b\xac\x55\x7c\x30\x6f\x35\x3b\xb3\xc3\x58\x86\x47\x30\x50\xb5\x7a\xa5\x38\x83\x3c\xc4\x0e\x5f\x68\x17\x69\x82\x66\xe8\xc6\x59\xa6\x69\xb7\x3b\x4d\x92\xe1\x7a\x8d\xb9\xcd\xd4\x1b\x71\x96\x5a\xa9\xba\xd6\x40\x1b\x76\x69\x3b\x7c\x3d\x19\x1f\x97\x72\x01\x06\x7b\x10\x84\x02\x41\x91\x9e\x1e\xb3\x1a\x4a\x4c\x11\xef\x91\xdb\x34\x3b\x87\xfb\x50\x9c\xc1\x5c\xb4\xb0\x28\x16\x9a\x21\xe7\x8e\x68\xc8\x95\x08\x4c\x7a\x7f\xa3\x24\x9b\x3e\x36\x99\x0e\xef\xdd\x8b\x72\x10\xbe\xda\xa9\x2c\xf0\xca\xb9\x58\xb7\x66\x74\x61\x6b\x8e\xbc\xab\x4d\x6b\xa6\xda\x6a\x4e\x55\x99\xb8\x3a\x3d\xe6\x5f\x92\x94\xe4\xfc\x9c\x4e\x61\x43\xd4\xb0\x17\x53\x17\xac\xd8\xe2\xf0\xe8\x8e\x1f\x8c\xbd\x1e\x9d\xfd\xa6\x20\xbd\x63\xd3\xca\x31\xec\x74\x70\xfb\x63\x49\xb7\xcb\x7b\xd7\xcb\x94\x4d\xc9\x54\xb6\x56\x85\x11\x9c\x88\x35\x2f\x19\xc0\x0e\x7b\x12\x3b\xec\x57\xd0\x5c\x91\x00\x82\x70\xd1\x5e\x86\xcb\x6e\xb7\x14\x68\xa0\xdb\x5d\x76\xcc\xf8\xb4\x2c\x51\xf0\x03\x99\x0d\xc3\x27\xfd\xd9\x16\x8e\x3c\x40\x8a\x28\x96\x41\xcd\x65\x8d\x70\xf8\x5a\x7c\x2f\xa6\x95\x18\x39\xc8\xb2\xa6\xeb\xac\x75\x30\xad\x14\x70\x85\xb1\x65\xdf\x6b\xaa\xb6\x77\x92\x2f\x7e\x4f\xae\x5a\x34\xd4\x91\xfb\xbd\xde\x0f\xb0\xd7\x52\x8c\x48\x5c\x31\x22\xb3\xfb\x68\x54\x8c\x9d\x78\x98\x92\x82\xa3\x82\xa0\xaa\xeb\xa5\x2f\x01\xfa\x47\xcd\x14\x3e\x6c\x51\xe0\x0a\x53\x9a\x1b\x2f\x27\x75\x87\xff\xec\xee\x2d\x43\xee\xa7\x4b\x4e\x8b\x65\xe9\x7f\x64\x96\xf0\xaf\x91\xfb\x41\x63\xfe\x92\x4f\xe3\xc6\xc8\xd7\x10\xcb\x48\x71\xf9\x2d\x05\x4b\xae\xf7\xfd\x66\xff\x2b\xcb\x0f\x92\x95\x8c\x38\x51\xf2\xaa\xb8\x41\xfb\xce\xf5\xae\x96\x34\x9b\x1a\xbb\x75\xcb\xcf\x5c\x13\xae\x66\x1d\xea\xe5\xb0\x19\x84\xc3\x66\x00\x2a\xb9\xca\xe7\xb5\x56\x4a\xda\x0d\x28\x5e\x4c\xf1\x72\x6a\x75\xd4\xd5\xcd\x30\xd3\x32\x30\xb0\xc1\xa7\x7f\x08\xe4\xdb\x22\x75\xb1\xe5\x6a\x7e\x09\x25\x9f\x9e\xd0\x2b\x7c\x64\x36\xa0\xb2\xf2\xac\xe0\xa4\x30\x14\x9d\x11\x6b\x79\x9c\x83\x10\xb9\xdb\x4c\xc5\x34\xdb\x93\x67\xb9\xcd\x48\x21\x9f\xdb\x8a\x23\x9d\x0a\xc9\x8f\x8c\xe7\x2e\xd1\xde\x4e\x60\xda\xf1\xae\x60\xda\x91\x44\x9e\xa0\x86\x7c\xec\xca\x4f\x48\x01\xba\x77\x43\xd2\x05\xca\x31\xeb\xcd\xd3\x2c\x2b\x26\xb1\x8e\x48\xc0\x03\x71\xf2\xf8\x88\x06\x33\x1e\x17\x87\xd2\xb7\xed\x97\x2c\x9d\x90\x9b\x42\x8c\x26\x2e\x92\xa1\x72\x78\x2b\x8c\xac\x9e\xf5\x04\xb9\x50\xde\xbc\x97\x5d\xe5\x88\x24\x28\x57\x1e\x24\x55\x0a\x2d\x68\x3c\xe0\xed\x89\x5e\x56\x14\x9f\x96\x8b\x10\x31\xe2\x06\xd8\x55\xc4\x1a\x3b\xfc\x22\x49\x3d\x69\xa6\xea\xd2\x7a\xea\x8d\xc1\x35\xf0\xbc\x1a\xba\x9d\x99\x91\x29\x23\x39\x96\x84\x86\x2d\x3f\x36\x79\x69\xe9\x71\x23\x26\xad\x99\xde\x38\x43\x90\x81\x75\x80\x1a\x34\xb0\x52\x94\xb3\x6c\xfd\xe1\x21\xce\x65\x35\x85\x69\x49\x92\x20\x3d\x23\xe2\x4f\x87\x79\x73\x59\x39\x23\xd5\x7c\x64\xcb\xe6\xae\x40\xd7\x70\x9e\x7a\x77\x6b\x63\x41\xe0\x1f\xd7\x6f\x47\x6b\x05\xd0\x23\x52\x21\x6d\xfb\x55\xb6\x4b\x21\xd4\xe6\x35\xa5\x5d\xc1\x50\xcd\x54\xe9\x33\xaa\xda\x33\x39\x66\x49\xe7\x3f\x52\x5a\xd7\xd1\x2c\xbe\xb4\xaa\x15\xc7\x4a\x0a\x56\x4a\xed\x21\x86\x28\xce\x8d\x63\xc3\x4c\xb9\x30\x82\x01\x11\xe0\x0b\x69\xa1\x87\x65\xe4\xeb\x43\x95\x9f\x6a\x96\x0c\xe9\xd6\x40\x5d\x07\x56\x4e\x83\xbf\xdc\xa4\xe5\xd1\x6d\x9a\x0d\x59\x4f\xfd\x42\xaa\x37\xb1\xea\xff\x04\xc9\x95\x23\xa8\xd2\x40\x41\xdc\x95\x1b\x82\x8c\xca\xc3\x47\x1d\x26\x78\x7d\xc6\x4f\xd2\x2b\x22\xe9\xcd\xde\x8c\x40\x3e\x7c\x87\x52\x18\x24\x32\x0c\xad\x39\xca\x17\xd2\x60\xbe\x42\x4e\x20\xd6\x5b\xd4\xd5\xd8\xe2\xb5\x24\xf0\xc5\x5e\x4b\xa7\xf5\x96\x5d\x85\xb5\xd2\x18\x37\x8e\xa2\x91\x34\x63\x40\x9a\x29\x66\xdb\xaa\x0f\xd9\x63\xb4\x16\x62\x8a\x6a\x0f\xae\xb4\xa0\xe4\xc5\x60\x3c\x49\x92\x98\x88\xa7\xdf\x66\x01\xed\x5d\xf0\xe4\x09\x82\xe4\x32\xe6\x4a\xd9\x34\x74\x79\xc7\x80\x40\xb1\x91\x99\x44\x55\x31\xe3\x90\xac\x92\x15\xc4\xc4\x6f\x01\x9d\x67\x17\x70\xfa\x56\xe6\x5f\xf1\x04\x6b\x76\x62\xfa\x7b\x78\xc1\x4a\x5e\x2c\xf4\x86\x51\x8a\x38\x66\xc8\xc2\xb0\xc8\xb3\x30\x9e\x83\x15\x83\xca\x73\x68\xe0\xf5\xa3\x6e\xf1\xca\x3c\x32\x74\x6c\xa4\xb0\x2a\x7c\x21\x39\xca\x72\x8a\xb9\x94\x4a\x70\x25\xc6\x73\x1a\xee\xd8\x73\x46\x8c\xd5\x77\xb3\x84\x42\xdd\x32\x44\xf0\x29\xa5\x2f\x97\xc8\x70\xe9\xca\x25\xb2\xc3\x38\x6d\xe4\xc9\x49\x82\xd2\x06\x06\x7f\x89\xa4\x76\x12\x68\x8d\xcd\x01\x90\x1b\xc9\x70\xbd\xb6\xdc\x56\x6a\x6d\xac\x14\xe9\x77\xd6\xae\x52\x83\x7d\x10\xd2\xa9\x71\x08\xd5\xf7\x98\x56\x0d\xaa\x87\xf4\x6a\xb2\x5d\xe3\xc3\x2a\x5b\x0b\x15\x54\xfd\x48\x0c\xfb\x25\xe5\x43\x82\xe4\xab\x21\x5f\x25\x21\x27\x7c\x37\x52\x94\xdb\x82\x76\xbc\x96\x3d\xab\xf0\x78\x86\x7a\x72\xb2\xf6\xf1\x51\x3e\x06\x9f\x98\x94\xa3\x14\xb3\x11\x55\x2d\x8c\xb7\x8b\x0e\x91\xdd\x41\x8e\x7d\x0d\xc1\x4f\xcd\x7b\x56\x8e\xe2\x1b\x0d\xfb\x94\xe1\xa8\x8c\x3f\x20\x81\xae\x9c\x51\x80\xab\x4d\x03\x8e\xf2\xb1\x40\x53\xce\x2c\xa5\x77\xae\x8c\x99\x04\xbf\x51\xe5\xa6\x5c\xa9\x6b\x20\xe8\x5e\xa4\xd8\x26\x9b\xd5\x28\xce\x13\x19\xa4\x5c\xf2\x7d\x9d\x96\x85\x17\xcb\xe5\x2d\x8a\x32\x9c\xaf\xc2\x42\xd9\xd1\x5b\x93\x7c\x67\x9a\xea\xff\x98\xa0\x7e\xcd\x38\x3f\x5c\x0c\xb9\x00\x4c\x7c\x7b\xfb\xb5\xea\x20\xd7\x51\xca\x9a\xdf\x7f\x6b\x0b\xce\xc3\xee\x38\x01\x0a\x4f\x00\xe6\x7d\x3a\xb9\xa1\x95\xcc\x87\xdf\x05\x9f\x41\x7f\x67\x6f\x3d\x10\x89\x92\xdf\x00\xa5\x5a\xb5\x6f\x01\x54\x7b\x23\x01\x58\x55\xf9\xa3\x0a\x71\x69\x21\x19\xef\xec\x25\xfe\xd6\xd6\xbb\xd4\x1c\x21\xef\x00\xa9\xc8\x13\x9a\x50\x26\xec\x96\xd4\x75\xf5\x81\x85\xde\x1e\xb8\x55\xfe\x4a\xf9\x8d\x8a\x2c\x12\xc2\x5c\xc1\xfa\x96\x3a\x17\x2d\x84\x36\x42\x0b\xec\x54\xf7\x20\x33\xa9\xb2\xcb\x80\x1f\x9f\x3e\x47\x15\xaa\x46\x71\xe3\x20\x3a\x65\x64\x91\x32\x32\xb5\xd7\xc2\xe6\x40\x5c\x07\x9b\x7d\xc9\xc0\x06\x9c\x85\xdd\xb6\x77\x9e\x3b\xc5\xce\xd3\x19\x69\x29\xfa\xc2\x29\xfa\x56\x39\xa8\xbf\x63\xe9\x75\xd5\x8b\xd4\x56\xd9\x75\x07\x71\xea\xf9\x80\x78\xc5\x06\x4e\xb1\x8b\x4a\xbc\x62\xa7\xd8\x0e\x14\x83\xf0\xd4\x96\x58\x65\x69\x5e\xaa\x6c\xc1\xc1\x5a\x2f\x06\x0e\x57\xfe\x15\xd5\x64\x67\x55\x9b\xb0\x70\xe1\xbd\x3d\x59\xd8\x37\xff\x6a\x28\xbb\x6f\x1a\x6e\xf0\x05\xf5\x4a\x0f\x74\xcb\xeb\x14\xb6\x63\xfe\x50\x14\xbc\x32\x08\xbb\x87\xe5\x72\xf6\x11\x41\xfc\x70\x30\xec\x9b\x4a\xbf\x52\xc6\x97\x69\x16\xaa\xeb\xd5\x1c\x20\x62\xea\x80\x9b\x73\xcb\x74\x77\x76\xf4\x04\xda\x0a\xed\xca\x42\x72\x2f\xbf\x66\xd5\x38\x50\xa6\xe0\xb3\x17\xaa\x6b\xc5\xbf\xea\xe5\x0c\x92\x87\xfd\x07\xde\xb1\x55\x9f\x0f\x10\x53\x95\xb5\x33\x95\x43\x69\xe9\x9c\xdb\x0d\xfd\x3e\xdf\x31\x53\x0e\x71\x28\xe1\x59\x3d\x97\xb3\x72\x59\xab\x73\x92\xcd\x9a\xba\xd8\x53\x5d\x04\x58\xb1\xa6\x2a\xfb\x81\x2a\xca\xad\xa6\xa1\xc6\x53\x55\x03\x22\x55\xbc\x2b\x98\xe0\x5b\x9b\xca\x3e\x53\x65\x2b\x74\x67\x6b\x07\x2f\xfa\xaa\x52\x95\x31\x6b\x2a\xbf\x6b\xcb\x7b\x6e\x41\x0d\xc5\xf7\x9c\xad\x07\x6a\xa0\x20\xe8\xf5\x05\xb2\xff\x4c\x6f\xbe\x35\xca\x3e\x37\x0d\x9f\xcf\xd3\x2c\x5b\xa3\xc6\x0b\xb3\xb5\xd7\xab\xf0\xb4\xef\xc0\x53\x1d\xb6\xd6\x0a\x7b\x2f\x9c\x0a\xa0\xe0\x0a\xef\xb4\x7d\x89\x25\x8c\x09\x7d\xc3\x3d\xb2\xeb\xb4\x56\xbb\x37\x6a\x1e\xbe\x0d\xde\xe8\xbb\x41\x32\x77\xd7\x25\x73\x77\xa5\x37\xba\x32\xa3\x6c\x42\xd7\x9a\xe7\x08\x98\xdd\xca\x4b\xdf\x3f\xe2\x3e\x67\x0f\xc2\xcb\x6e\xd7\x34\xd2\x72\xa4\xab\x22\x01\x28\x5f\x3d\x94\xc1\x42\x21\x9c\x18\x2c\x58\x12\xfe\x6b\xca\x28\x38\x0b\x38\xef\xcc\x09\xab\x49\x25\x94\x51\x5d\x49\xb8\x38\xde\x53\x5d\xb9\xac\xb5\x6e\x0b\x82\xe0\xa1\x5e\x00\xc6\x59\x2c\x62\x8f\x28\xa8\x9c\xd5\x60\xa5\x76\xe5\x91\x69\x58\x9b\xe1\xeb\x67\x6f\x89\x6a\xf6\xce\x86\x5c\x6b\xb8\x6b\xe3\x56\x51\xbf\x4f\x09\xba\x44\x9f\xab\xad\x44\x55\x95\x41\x93\xac\xbf\x22\x41\xf4\xb5\x8a\x56\xd2\x6f\x9a\xab\xb2\xb5\x1e\x53\xab\x64\x27\xc4\x46\xcd\xfa\xa5\x90\xd5\x1c\x09\x5b\xed\xdc\x39\x0c\x9b\x8a\x3f\x47\xee\x36\xce\x54\x35\x2d\x66\x69\xaf\x05\x39\x0e\x25\x7f\xea\x12\x91\xf6\x02\x5e\x32\x46\x83\xe7\xd8\xbb\x38\xf7\xaa\xe4\x8c\xa9\x70\x0c\x52\xdc\x49\xc3\xd5\xfc\x4c\x22\x8d\xba\xf8\xad\x81\x46\x93\xfd\xb8\x22\xb5\x86\x82\x12\xdd\x36\x45\x22\x71\x0a\xbe\xd0\x17\xaf\xf6\x83\x69\xc0\x6e\x4f\xa1\x9c\x71\x69\xa9\x2f\xa4\x22\xcf\xe3\xa7\x7b\x1e\x3b\xad\x04\x01\xb1\xda\xd1\xa5\xba\x61\xb4\x3f\x4a\x43\x6f\x92\x8a\x53\xce\x31\x2d\x7d\x3d\x5b\xa7\xaf\x1a\x1e\x68\xa2\xbc\x6c\x79\x89\x0e\x1a\xca\xed\xda\x72\xba\xc9\x86\x92\x7b\x95\x16\x1b\x8a\x39\x84\xc6\x23\x0d\x3e\xb5\x25\xdb\x1a\x7c\x8e\x4c\x56\x9e\xb6\x62\x86\xdc\x83\xe0\xff\x0d\x85\x06\x9a\x1e\xcd\x8a\x74\xda\x54\x46\x77\x08\xe2\xd3\xa6\x42\xba\xbb\xe9\x72\xf1\xc3\x1c\x41\x5d\xbc\xba\xf8\x76\x87\xd0\x7e\xa7\xca\x25\xc7\x83\xa7\x48\xeb\x85\x16\xc5\x8f\x1b\xf0\x20\xd0\xd3\x33\x43\x39\x4b\x1f\xb2\xc6\x0d\x6f\x58\xf7\xfd\x75\xf6\x7d\x5d\xa1\x10\x3e\x6d\x83\x3d\xd5\x3b\x9d\xdd\x7f\xdc\xdd\x69\x28\xb4\x6f\x11\x40\xd3\xe6\x1c\x38\x87\xbb\xe1\x60\xef\x38\x13\x6d\x25\xce\x76\xe4\xa0\x7e\x5f\xce\x03\xe1\x16\x2b\xe0\xd8\xdf\x59\x07\x1c\xa2\xa9\xe3\x00\x7f\xa0\x91\xc9\xfe\xee\xba\xad\x48\x4d\x40\x4b\x4b\x6b\xa1\x40\xd1\xd2\xd1\x3f\x42\x1c\x64\x5d\x56\x12\xef\x0b\x1c\xd1\xda\xa8\xdc\xaa\x69\x59\x12\xc6\xcf\x9b\x68\xe5\x78\xff\xa9\xb9\xa9\x8e\xe6\x0b\x7e\xef\x73\x83\xde\xd5\x24\xa9\x7b\x29\x63\x6b\xd4\x58\xa3\x1c\x8f\xc6\x88\xe2\x7e\x87\x57\xd4\x36\x4a\xc1\xf7\x65\x2e\x2e\x57\x50\xe3\x66\xd9\x55\x0a\x51\x70\x60\x06\xc3\xe8\xcd\xc9\xeb\x8f\xe7\x47\xd1\x16\xdd\xda\x5a\x19\x9b\x10\xd8\x60\xb1\x5e\x50\x3b\x1d\x4b\x8a\xca\x5d\x1a\x1b\x1b\x12\x57\x03\x97\x2b\x5d\x24\x88\x9d\x5a\xb2\x91\x6e\x30\x05\xfe\x98\xf4\x60\x80\x90\xd5\xea\x8a\x64\x10\xe7\xde\x04\xdf\xc9\x8d\x93\xca\x41\xf1\x0a\xf7\x0f\x8a\xed\x6d\xed\xb0\x93\x8f\x0a\x15\x67\x53\x92\x2e\xa9\xaa\x6f\x69\xc6\x9d\x04\xa5\x3d\x3d\xeb\x38\x41\x02\x2f\x14\x8a\xe2\x94\x4e\x97\xa0\x29\x5a\x39\x8d\x28\xdd\x91\x9a\x98\x55\x14\x29\xd0\x7c\x06\x11\x32\x50\x37\xd3\x80\x59\x8b\x95\xdf\x2b\x29\xb8\x14\x8f\x2a\x32\x2d\xe7\x82\x58\xbc\x07\x3a\xd2\xd4\x62\xc9\x17\x16\x0f\x5c\x03\x29\x72\x18\xf3\x0a\xd8\x1d\x31\x57\x9c\x24\x43\x57\x94\x04\xb6\x3f\x2c\xee\xbb\x2d\x84\x09\x27\x69\x5d\xd8\x42\x20\xc5\xd6\xc8\xf2\xa7\x94\x39\x9c\x89\xec\x62\xd7\xef\x22\x38\x42\x2d\x61\x53\x55\xf6\xd6\xa8\x52\x95\xb4\xa9\xaa\xfb\x6b\x54\x3d\x2d\xa6\x2a\xf3\x82\xba\x23\x20\xb8\x6f\xbb\x80\xe0\x85\xc7\xf4\x7b\xf3\xac\xdf\x30\x76\x25\xeb\x5a\x49\xc3\x67\xf8\xde\xc8\x25\x78\x23\xcb\x1d\x55\x55\x3f\xba\x7c\x97\xcf\x77\xb8\xc8\xc0\xbc\xb4\xd2\xa2\x60\x2b\x8f\xc9\x47\xbd\x3d\x15\x10\xa1\x54\x1b\x25\x15\x08\x06\xcc\xfa\x1a\x66\x05\xf0\x2c\x1f\xa1\xd0\x9f\xbe\xd0\x94\x8e\x3e\x06\x0d\x58\xcf\xca\xeb\x80\x72\x6a\x13\x35\x3e\x6b\x37\xf7\x58\x14\xed\x86\x1e\x5a\x5e\xad\x22\x7e\xaf\x56\x48\xd6\x53\xdc\xcf\x5a\x75\x4b\xfa\x07\x31\x15\xe5\xc5\xf0\x88\xc3\x91\xe5\x7d\x26\x32\xa5\xa1\x6b\x5e\x52\x8b\xc5\xf3\x09\xf4\x55\x6f\x7c\x55\xa1\x56\xd7\xf1\x98\x1b\xef\x54\x1d\xa9\x94\x62\x2f\xdc\x2b\xca\x0f\x73\xad\x9c\x57\xc6\x22\x12\xa3\x0e\xfb\x26\x76\x69\x55\x21\x8f\x73\x44\x6d\xf8\x12\x19\xed\x4c\x26\xf7\x95\xc7\xf0\xe2\x86\x96\xc7\xc6\x06\x6e\x9a\xc4\x34\x49\x90\x74\x95\x26\x65\x49\x8b\xdc\x98\xc2\xf8\xb6\x20\xc6\xf0\x43\x1b\x7b\x4c\x95\x83\x8e\x17\x07\xc4\x38\xf7\x35\x38\xb8\x18\xe3\x90\xdc\xb5\xc9\xa7\x98\xd7\xe6\xd1\x4b\x4b\x6d\x04\x2e\xbd\x12\x51\x8a\x99\x6f\x63\x14\x17\x28\x4f\x3a\x4a\x79\x9e\x1e\xf2\xde\x8d\x7c\x9d\x3a\x2e\xb6\x43\x7a\x68\x6d\x9c\xd2\xfb\x2b\x72\x52\x4c\xd2\x2c\x2e\xc0\x62\xfd\xba\x22\x1a\x11\x2f\x4c\x9a\xa6\x22\xf1\x7d\x0f\x04\x91\x8f\x9a\x0c\xe7\x94\x95\x71\xff\x20\xb7\x3e\xf1\xf9\xd6\x56\xa2\x6d\xcd\x47\xf9\x38\xe9\xd8\x5c\x67\x5a\xd5\xe6\x74\x20\xa7\xf4\x95\x60\x23\xd2\x15\x1f\x8c\x9b\x53\xe9\x41\x43\x67\xae\x3b\xf4\x26\xc6\xd4\x04\xe2\xab\x40\x8f\x0a\xe8\x59\xef\x85\xf2\x51\x9f\x05\x41\x6b\x38\x2e\x43\x12\xda\xe0\x02\xa4\x00\x5f\x22\xd0\x52\x9b\x30\xe2\x4b\x5c\x8c\xfa\x63\x94\xe1\xc2\x7a\x49\x73\x38\x39\xf7\xbe\xbd\x41\x0a\x2a\x21\x07\x1a\x3f\x93\x16\x27\x0f\x63\x2e\xef\xae\x1f\xb3\x94\x47\x20\x71\x92\xbf\xb4\xf9\x88\x7a\x66\xf2\x76\x63\x34\x1b\xca\xd3\x59\xdc\xb6\x49\x13\x13\x37\xbd\x3f\xee\x30\xcc\xcc\x84\x51\x68\xfb\xe5\xca\xf9\xbe\xba\x05\x2b\x53\x60\xcd\x53\x60\x95\x29\x7c\xcc\x65\x62\x98\xaa\x9d\xbd\xa7\x1e\x0f\x84\xfa\x90\x3c\x97\xb7\x11\x15\xd7\x5b\xb3\xe8\xd6\xec\x70\xcd\x81\x4e\xd7\x90\xf1\x0a\x1a\xeb\xa9\x70\x06\xa6\xf6\x0a\x62\x18\x18\x43\x3d\x89\x03\xe4\x6f\x44\xb5\x31\x2e\x57\x3f\x10\x5d\x01\x12\xab\x44\x63\xe6\x3a\x1a\x73\x81\x79\xdd\x28\x40\x46\x30\xf1\xd0\xaf\xef\xd6\x4c\x92\x43\x45\x1b\x56\xb1\x9f\x6b\x75\x2b\xf0\xec\xd0\xdc\x5c\x01\x20\x0a\xaa\x44\x06\x3a\xa9\xa8\x87\x2a\xf6\xa9\x66\x7e\xbd\xd2\x09\x61\x48\x12\x47\x13\xf4\xec\x29\x62\xc0\x8c\xc8\xf6\x40\xae\x6e\xad\xdc\x83\x74\xd1\xb9\x35\xfc\x8b\x49\xb7\x4b\x5c\x4b\x40\x87\x46\xb1\x17\x72\x5c\x7d\xab\x26\xe0\x1f\xcc\x9a\xd0\xd2\xd8\xfa\x6a\x8a\xd8\x3b\x09\xd6\x0b\x27\x48\x25\x29\x70\x02\x41\xc4\x55\x4c\x05\x70\xa0\xb1\xd4\x5d\xdf\x10\xea\x0b\x16\xbb\x23\x8f\x9f\x0d\x50\x15\x7e\x6e\xa0\xc0\x22\x69\x10\x09\xd7\x08\xbf\xdb\xbe\x81\xac\x03\x35\x0f\xac\x74\x56\x31\xce\x6d\xe8\xd4\x5b\xb5\xbd\xe7\x10\xb8\x0b\x8e\xb4\x24\xff\xd4\x1e\x91\xa1\x74\x56\x26\x0e\x4d\x33\x74\x01\x75\x2a\x4c\x0d\xb7\xff\xb2\x2e\x23\x79\x1a\x94\x91\x3c\x75\x65\x24\x4f\x55\xb0\xdd\xac\x5e\xfb\x99\x53\xec\x99\xc9\xd8\xf5\x4f\xa5\x90\x55\x40\xbc\xcd\xcd\x38\x7d\x78\x58\x3e\x3c\xf0\x04\xcd\x30\x84\x70\x26\x0f\x0f\xc4\xa5\x92\x1f\x1e\x36\xe3\xcd\xfc\xe1\x41\x7c\xcb\x47\xfd\xb1\xbe\x21\xd1\x0d\xfe\x32\x4f\x69\x3e\x4c\x91\x00\xef\x70\x89\xc0\x50\x72\xc8\x57\x9d\xda\xbe\x12\x50\xbc\x41\xc5\x77\x92\xe0\x9a\x9e\x40\x13\x34\x73\xc9\xf0\xec\x30\xae\x9f\xb7\xcc\x3f\x6c\xb2\x80\x22\xc1\x33\xf1\xec\xd9\xef\x09\xfe\xaf\x5c\x83\x9a\x2f\xbf\x83\x9a\x2f\xc2\x66\x7d\xd5\xfd\x06\x41\x83\xd1\x52\xee\xb8\xd0\x66\x09\x6e\xb5\x67\x63\x7f\x0f\x49\xf3\x78\x81\xa4\x2d\x14\xc4\x4d\x39\xd1\x66\xc7\x95\x55\x4e\x42\x7a\xa0\x98\xd8\xf1\xa0\x0c\xf1\x44\x46\x8c\xf8\x91\x1b\x53\xf9\x54\x4e\x34\x19\xdd\x21\x8a\xeb\x10\x83\xd2\xc1\xb7\x5b\x71\x96\x18\x1f\xcc\xb6\xd4\xc8\xa6\x4d\x77\x48\xb4\x89\x3e\xe0\x5b\x25\xb5\x08\xe8\x12\xf5\x30\x34\x17\xaf\x4a\xb6\x6b\x17\xd5\x06\x5d\xda\xea\x72\x16\x41\x14\x58\x9b\xd4\xfa\xca\x48\xe5\x36\xaa\x13\xa2\x3c\xa6\x95\x9c\x2a\x89\x95\x04\xf1\xb0\x8f\xa8\xbc\xf6\x87\x9b\x03\x47\x2a\xb4\xc0\xfd\x83\xc5\xcb\x1b\x4d\xd8\x2c\xb4\x11\xe4\x1c\xdf\x8c\x16\x26\xd4\xf1\xbc\x37\xb9\x49\xd9\x6b\x1e\xf7\x13\x15\xef\xb8\x1b\x0d\x45\xb1\x5b\xe5\x17\x3b\x8b\xa3\xae\xb2\x00\x8b\x30\xc6\xf3\xe4\x16\x2f\x3b\x32\x9e\x91\xf8\x44\xf3\x5b\xc2\x4a\xa2\x3f\x65\x26\x06\xc9\x7c\x13\xe3\x59\xd2\x14\xdb\xb6\x73\x8b\xd9\xea\xf6\xd0\x6e\x07\xff\xfa\x8d\x6f\x6b\xb3\x5c\x6c\x0d\xec\x3c\xfb\x2b\x70\x84\x6d\xa8\x2c\x23\xfe\x3c\x56\xdf\x0d\x79\xfb\xef\xd1\x90\xce\xe2\xcd\x34\x91\xef\x64\x68\x9f\x54\x50\xd4\xf7\x38\x15\x84\xf0\x15\x9e\x77\xc4\xf6\xbd\xc2\x73\x43\x6f\x26\x2a\xd4\xc5\xb5\xf1\x25\xb8\x4a\x0e\x20\xfb\xd2\xa5\x09\x8d\x2f\x2e\xd8\xfb\xd1\xe5\xb8\x7d\x38\x83\x55\x92\xac\x56\x66\x3a\x56\xcb\xac\x57\x6f\x6b\x80\x36\x37\xe3\xe5\xc3\x43\xf6\xf0\xc0\x12\xbb\xc6\x77\x78\x6a\x25\x7f\x77\xaf\x70\xff\xe0\x4e\x4b\xfe\x8e\xf0\x74\x74\x37\x46\x9f\xf1\x91\x3a\x8a\x9d\xa3\x9e\xea\x50\x52\x62\x5a\xd7\x13\x7f\x56\x24\x97\xab\xbe\xfe\xac\xc4\x7d\x2e\x86\x8b\x79\xe3\x31\xfa\x4e\x2d\x72\xf8\x10\x7f\xbd\x56\xb9\x19\x59\x0b\x6c\x5d\xf5\x82\x6f\xf0\x0b\xb3\xa1\x70\x50\xf9\x3d\x84\x41\x47\x21\x81\x47\xe3\x07\xa6\x86\x0e\x4b\xad\x97\x74\x35\x04\x60\x1a\x0a\xf9\x97\xea\x4b\xaf\x2a\xab\x8c\xd3\x66\xb2\x51\x54\x7b\x44\xbe\x59\x37\x32\xdf\xec\x3b\x41\xf0\x4b\x51\xc2\x0b\xbe\xb7\x5a\xc1\x7d\x78\xef\xdb\xa6\xd4\xdc\x77\x14\x4d\x6a\x64\x06\x68\x73\x60\x0d\x31\x34\x7d\xec\x39\x1d\xca\x97\x1e\x1d\x01\x87\xbd\xc5\x14\x41\xbb\x85\xa3\xc2\x77\x64\x6e\x32\x81\xf3\x36\x65\x8d\x22\x36\xaa\x9b\xbe\x71\x05\x3d\xa1\x57\xd6\x5f\x33\xe6\x75\x92\xb8\x4a\x1a\xd4\x39\x8a\xef\xb3\x1d\x07\x0f\x1f\x87\x0e\xe8\x59\x27\x12\x70\x77\x52\x01\xf8\x0b\xfc\x3e\xe5\x37\xbd\x39\xcd\x41\xfe\x05\x7c\x75\x75\xd2\x85\x03\x08\x6b\xc3\x17\x5b\x0c\x93\xe2\xfe\x41\xfa\xb2\x38\x48\x05\x5f\x1c\xa0\x06\x66\x0b\xc4\xb7\xd3\x80\x01\x0c\x1b\xa5\xe3\x64\x55\xe3\x7e\x1e\x5b\x5d\x65\x68\x23\x86\x66\xf1\x40\xcb\x12\x97\xcd\x09\x1f\x43\x7c\xa0\xe2\xbf\x64\x30\xb1\xb0\x5f\xc1\x68\xac\x73\xa3\x06\xd2\x15\x92\x11\x1b\x77\x20\x5d\x6a\xb8\xf9\x3c\x59\x85\xbb\x87\x78\xf9\xb1\x64\x37\x15\x69\xb4\xc6\xa0\x53\xc5\xb6\x02\x2b\xa5\x39\x9d\xfa\x4e\x12\x03\xd6\x17\xba\x8e\x0c\xa8\x6e\x73\x95\x4e\x71\x48\xfe\x34\xc0\xb8\x7f\x48\x5e\x6d\x0f\x0e\x39\x26\xc3\xb8\xc6\x73\xc9\x92\x32\x35\xec\x5e\xf2\x48\x81\x41\x35\x41\x01\xcd\xaf\xa3\xa1\x4e\xbb\xa4\x41\x8d\x18\xde\xa9\xa6\x02\x20\x69\x2e\x0a\xf6\x1f\x08\x62\x78\xd7\xcb\x5e\x00\x61\xdf\xc5\xc7\x9d\xea\xa7\xa5\x96\xb9\x88\xaf\xbb\xce\x57\x2f\x86\xbe\x2b\x50\x3b\xce\x6f\xd3\x8c\x4e\x37\x0c\xd4\x36\x16\x69\x59\x92\x29\x24\x3c\x74\x65\x0b\x91\xf4\x61\x56\x31\xb0\x4b\xfa\x07\x39\x9e\xcf\xc9\x94\xa6\x9c\xc4\xfc\xe5\xcb\xdd\x07\x26\xe8\x64\xcb\x80\x0e\x76\x21\xb9\x49\xe1\x17\x0d\x3b\x61\x92\x57\xd8\x66\xae\x7c\x78\x20\x2f\xfb\x87\x61\x98\xf2\x44\xf4\xb4\x3f\x24\x9a\x67\xae\x8b\x3e\x02\x12\x09\xc3\xfa\x1a\x84\x15\xf0\xcc\xd3\x2d\x06\xfc\x89\x9a\xac\x6b\x77\xaa\x32\x80\x1b\xed\x0a\x05\xad\x35\xdc\x39\x4d\xad\xed\xb7\x4a\x14\x54\x9b\xc1\x90\x90\x0d\xb6\x88\xee\x8d\x12\x0e\x2c\x43\x34\x96\xd1\x37\x1e\xc5\xb9\x0e\x32\x53\xe0\xdc\x77\xe6\x4a\x71\x1e\x08\x32\xb3\x89\x31\xed\x76\xd5\xaf\xa2\xdb\x4d\x55\x14\x51\x8d\x27\x4a\xdc\x3f\x28\xad\x8b\x51\xb9\x85\x77\x12\x3e\x2a\xc7\xa3\xfe\x18\x47\xff\x1e\x6d\xa9\xdf\x35\x23\x8a\x90\x5b\x17\xf5\x30\x60\xd5\x4b\xcc\xf0\x43\x32\x6a\x39\xda\x1c\x20\xd6\xed\x32\x08\x69\xa9\x63\xe3\xd9\x1b\x47\x09\x49\xdb\x41\xd7\xb0\x12\x3a\x6f\x50\x58\x78\xc6\x13\x54\x54\xbf\xa7\x2a\x93\xba\x73\x3e\x5e\xec\x1b\xc7\xf9\xa2\x2e\x8f\x6d\x32\xf0\x79\x8a\x7c\xcc\x01\xb5\x75\xbc\x94\x46\xe3\xf5\x17\xcf\x6a\x7b\xcb\x93\xf6\x55\xbf\x6a\x24\x0c\xad\x73\xcf\xc3\xc0\x37\xb0\x7a\x1a\x6e\x57\x0f\x2c\x14\x20\xa4\xc9\x06\x6b\xb7\xbd\xa9\x79\xc8\x1b\xdc\xc4\x65\x58\x4f\xb8\xb7\xe9\xca\x83\xe2\xbd\x7e\xf3\xf1\x0d\xdd\xa0\x2a\x58\x5b\x93\xc7\x7c\x60\xe0\xce\x6a\xef\x3c\x53\x22\x54\x27\xc0\xfe\x9a\x7b\xcf\x5c\x12\x54\x27\x40\xab\x7d\xe4\x89\x76\x94\x93\xb0\x7c\x8a\x72\x04\x32\x2d\x76\x38\x10\x6c\xaf\x1e\xbf\x8d\x0a\xf6\xcf\xeb\xfb\x59\xa8\x6f\x1b\x42\xed\xc7\x76\x5c\x3f\x69\xa5\x49\x56\xe3\x8c\x69\x1f\x84\x99\x72\x28\xbe\xec\xbf\xbe\x1b\xd7\xa2\xb0\xe5\x0d\x27\x85\x5b\x8e\x0e\xa4\x09\xb5\x87\x0e\xed\x4d\x18\x75\x7f\xf3\x76\xae\x09\xa4\x9b\x77\x73\xbb\x28\xba\x1a\xc2\xb9\xc9\x14\x72\xd7\x89\x04\x6b\xaf\x3c\xcd\xc5\x05\x8e\x09\xe9\x09\xc6\x4e\xba\xdd\x17\xd3\x7b\x65\xd3\xe2\x99\xfb\x34\x09\x88\x74\x28\xf6\xa3\xd3\xb7\xc7\xa7\xc7\x17\xc7\xaf\x4f\x22\x9d\x59\x94\xc7\x6a\xa9\xa5\xa1\x51\x9e\x20\x16\xbb\x86\x55\x6e\x28\x74\xc5\xba\x50\xee\xb7\x5c\x29\xef\x76\x12\x06\x9d\x6b\xca\xe3\x4f\xbb\x62\x8f\x66\xf1\x03\x4c\x1b\xe6\x9f\x63\xd2\x93\xb1\xbd\x20\xb9\x99\x8a\xc6\xdf\xc0\x05\xb3\x1a\x83\xcb\x43\x0c\x2e\x4c\xa1\x16\xf9\x9d\x57\x22\xbf\xd3\x6e\x97\xc6\x9a\x07\x75\xe2\xb6\x85\x08\x6c\xe5\x9d\xef\x92\x10\xda\x53\x9f\xd4\x5d\xee\xf5\xd6\xf3\xde\xca\x7e\x9c\x08\x5e\x61\x8b\x98\x3a\x07\x0e\xdd\x58\x2d\xbe\x12\xdc\x1e\x6a\x5e\x4e\xc6\x40\xd1\x28\xcd\x44\x25\xaf\xea\x4c\x36\x89\xb6\x0f\xe8\x77\x2c\xd7\xd2\x3f\xe0\x96\x61\xe1\x9a\x59\x53\x61\xd9\xf9\x38\xb1\xdd\xea\x24\xbf\x85\x7b\xfa\xaa\xb2\x10\x9a\x7c\x61\xae\xb4\xb6\x22\x61\x63\xe0\xa7\xe8\xec\xeb\xda\x77\x92\x95\xa4\xed\x3b\xe8\x16\x12\x2f\x9b\xa7\x1f\x8b\x9d\x24\x2f\x5f\xee\x75\x68\xb7\x1b\x17\x0f\xf8\x39\x38\x4b\x88\x5f\xcf\x64\x15\x41\xb4\x39\xd1\x12\x54\xfa\xa8\x14\x62\x01\x74\x2c\x8d\x06\x31\x01\x96\xb8\x7f\xb0\x7c\x69\x92\xcf\x2f\x3d\xe0\x94\xa3\xa5\xcb\xa6\x02\x26\x4a\x15\xf5\xa2\x63\x93\x85\xf6\x91\x8a\xc9\xe4\x46\x09\x24\x89\x5a\xc0\xba\xad\x0d\xd7\xb6\x36\x9a\x24\x6d\x35\x7e\xa9\x6e\x1c\x2d\xab\x6e\x92\xe8\x80\x65\x0c\x5f\xc5\x9f\x92\x4e\x35\x27\xd5\x1b\x80\xd6\x45\x93\x5d\x8c\x13\xc8\xaa\x25\x6d\x6f\xbb\x3e\x38\x0f\xe9\x83\x73\xcb\xf4\x7b\x7d\x2b\xb0\x89\x8f\x32\x91\x18\xd1\xfa\xde\xaa\x1e\x2f\xf7\x2e\xa8\x06\xcb\xa6\xa7\x50\xd0\x6a\x82\xbe\xb7\xaf\x6a\x2b\x81\xce\x5c\x22\x3d\x7c\x85\xe8\xce\x90\x57\xb7\x2e\x52\x02\xb7\xae\xdc\x56\x69\x32\x47\x57\xec\x58\xa1\x9a\x85\x4a\x45\xad\x42\x58\x80\xa0\x2b\xad\xc4\xfe\x78\x23\xf6\x47\x3d\x1d\xd9\x05\x2c\xe3\x87\x7f\x99\x3d\xa2\x6e\xd5\x43\x13\x2b\x27\x4e\x1c\x81\xaa\x5d\x3c\xde\xba\x4b\xd6\xd8\x18\x96\x7f\xb6\x3d\x7d\xc3\x16\x69\xdd\x15\x9a\x44\x30\x1d\x1c\x40\x5c\x21\x7e\x18\x92\x30\xd6\xf1\x81\x53\x71\xe5\x58\x46\xb8\x52\x49\x67\x6d\x03\xf9\xe7\x3e\x00\xfc\x7f\x69\x36\x8c\x73\x12\x37\x88\xbb\xb1\x54\x29\xe5\xd4\x06\x8a\x99\xe0\xfa\xe4\x07\x15\xe2\x3b\xa6\xce\x65\x62\x4d\xe8\x64\xaa\x2d\xb5\x19\x14\xfd\xd1\xb0\x25\x90\xb3\x19\x9c\x48\x45\x4d\xd7\xf5\x85\xec\x40\x6d\xe2\xcf\x7a\x13\x1b\xeb\xb9\x5f\x60\x8a\xef\xdd\x25\x31\x33\x74\x63\x48\x09\x8a\xce\x84\x23\xd4\xa8\x9d\x87\x82\xcd\x08\xd2\xb7\xca\x47\x7b\x57\xbb\xae\x6e\xad\x92\x54\x16\x09\xb3\x5a\x3a\x75\xab\x23\xa6\x1d\x7a\x42\x5b\xa4\xe2\x86\xf1\x95\x89\x9a\x53\xcf\x3a\xf8\x1e\xa6\xf6\x16\xcb\x30\x59\xa7\x8f\x4e\x31\x1c\x55\xfd\xc4\x0b\x96\xa5\x42\x67\x49\x69\x82\x2a\x04\x53\xb5\x6f\xee\x64\xf8\x9e\x13\x5b\xd2\x0f\xaa\xa5\x48\x5c\x45\xfd\x98\xf8\x5a\xb2\xb2\x22\x6b\xb0\x0d\x88\xe5\x09\x63\x5c\xb3\x3a\x79\x85\x4e\x31\xef\xd1\x69\x25\xf5\xed\x4a\x19\x84\xd5\xd1\x06\xeb\xa5\x65\xfd\x10\xd6\xa3\xd5\x1f\x3a\xbf\x87\xde\xcc\xc9\xdd\xc6\x55\x85\x04\x84\xfc\xf3\x4e\xe2\xdc\x1a\xf4\xd0\x17\xb3\xd4\x4a\x5f\x07\x76\x9e\x81\x6d\x52\x89\xd4\x2e\x3e\x1f\xba\x0f\x3f\x78\x2c\x7d\x33\x96\xbf\x7a\xab\xd6\x30\x22\x6f\x69\x0f\xeb\xaf\x86\xa1\x0d\x40\xee\x36\xce\x7f\x00\xc0\xc4\x36\xaf\x64\x7f\xd6\xe9\x96\xbd\xac\xcf\x6d\x29\x9e\xc7\x15\xa3\xb7\x4a\x2e\x66\x95\x63\x94\xf4\x6c\x5e\xcd\x0f\xcb\x9c\xd3\xb9\x93\x68\xf3\xaf\x8c\x72\x72\x96\x67\xf7\xf6\xd5\x9f\x49\xba\x30\xd9\x34\xb5\x95\x1c\xe9\xb9\xbf\x55\x33\xee\x2b\xd3\x90\xf7\xf2\xe8\xe4\xe4\xf2\x2f\xa7\x67\x7f\x3d\xbd\x74\x08\xd4\xcb\x5f\xce\xce\x8f\x2f\x8e\xcf\x4e\xdd\xb0\x77\x0c\x7f\x59\x75\x1e\xaf\xd1\x57\x57\xa8\x4a\x8b\x3a\x63\x84\xfc\x41\x20\x1a\x10\x6d\x40\x08\x26\xca\xa6\x60\xcc\x4b\x3c\x1a\x2b\x27\x15\xc6\xd2\xfb\x12\x8f\x72\xf5\xcc\xa5\x93\xa1\xfe\x2c\x11\x92\x7d\x56\x17\xde\xd4\xbc\x90\xc2\xea\xc7\xc2\x42\x05\x34\x32\x8e\x38\x49\x8d\xc9\xa8\xcc\x89\x8d\x25\x06\xaa\x89\xa1\x57\x0a\x08\x20\x92\xc8\xdc\x2b\x8e\x6c\xaf\x41\x75\x63\x13\x4e\x9b\xdc\x5d\x21\x5d\x8e\xd5\xdf\x68\xd1\xc5\x88\x8d\xfd\x98\x66\x56\x5d\xc3\xe5\xef\x2a\x17\x06\x96\x55\xba\x13\xc3\x8f\x39\x13\x95\xc0\x7e\x64\x9e\xaa\x90\x37\xcd\x9b\xd6\x00\x96\x6a\x91\x9a\xdb\x8d\xbd\xb5\x93\x4d\xb3\xc4\x5b\x61\xdb\x9f\x72\xfa\xb4\x52\xe0\x40\xb7\x90\x2f\x5c\x02\x8a\xce\xee\xa5\x56\x27\xb8\x94\x4e\x30\x29\x31\x14\x16\x58\x4a\xae\xe6\x28\x77\x52\xd3\x1c\xd5\x3e\x7b\x04\x76\xba\x94\x07\x3c\x5e\xfc\x52\x14\x01\x74\xfc\x45\x0d\xc3\x1b\x13\x92\xe0\x77\x97\x42\xdd\xca\xea\x9d\x7a\x40\xaa\x2b\xaf\xdf\x95\x13\xec\xae\x86\x06\xa8\xe2\x6b\x1f\xbb\xaf\x4d\x68\x5d\x82\xbc\x13\xcb\xcd\x10\xdd\x83\xcb\xf5\x20\xbd\xe3\xca\xcd\x30\xfd\x53\xeb\xad\xb8\x97\x43\xd9\x3a\x97\x69\xfb\x36\x7d\xb2\xb9\x99\x5d\xcb\x01\x37\xa9\xb3\x1b\xf9\x0f\x35\xf8\x11\x19\x2b\x1f\xe0\xd3\xfa\x7a\xbb\xe5\x55\xa7\xb6\xfc\xf9\xa3\x47\x5d\xcb\x34\x8d\xa8\x9f\x39\xa7\x9f\x9b\xd3\xdf\x1e\x09\xae\xc3\x46\xf9\xd8\x34\xa5\xf2\x81\x53\x1b\x2a\x57\x8d\xa6\x3e\x8e\x1a\xaa\xd0\x63\xf7\xd2\xb8\x37\xed\x6f\xbd\x44\x23\x22\x8d\xdd\x31\xc6\xbe\xc0\x58\xad\x9a\xf8\x5e\xaf\x52\x09\xc0\xab\x7e\xb8\x9a\x67\x0d\xc4\xa6\x73\xad\xca\xc1\xc1\x86\x2b\x3b\xae\xac\x5a\x62\xf6\x76\xed\xd6\x2b\x94\xf8\x25\xc8\x4f\xe4\x8f\x39\xda\x18\x5f\x1a\xb3\xf1\x39\xca\xbb\xdd\x98\x9a\x9d\x9f\x9b\x9d\x4f\xf5\xb6\xcf\xf5\xb6\xa7\x66\xcf\xe7\x66\xcf\x53\xbb\xe1\xe9\x1a\xbb\x9d\x9a\xad\x9e\xeb\x5f\x89\x34\x78\xe7\x55\x4e\x25\xd7\xcc\x2b\xc5\x79\xfd\x18\xd0\xaf\xdc\xd6\xf4\x2b\x8f\x0d\xfd\x97\x3a\x06\xf4\xab\x8e\x01\xfd\x57\x39\x06\xf4\xbb\x8f\x41\xbe\x12\xec\xae\x4b\x09\xa6\x1d\x29\x5a\x0c\x1e\x00\xa6\xd8\x44\x9d\x13\x2a\x06\xed\x40\xb3\xd4\x24\x91\x02\x1a\x49\x73\x79\x17\xb1\x7c\x15\xdc\x98\xcc\x4a\x55\x58\x48\xaa\xf2\xc8\x7d\x2e\x27\xe9\x76\xf5\x18\x31\xe6\x95\x75\xae\xdb\x7c\x1d\xf0\xd6\x9b\x80\x3d\x02\x75\xeb\x62\x2f\xb7\x92\x04\xcd\x88\x6c\x0f\xc6\x8f\x8b\xbc\x64\x61\x3d\xba\x15\x62\xab\x38\xb5\x92\x02\xbd\x78\xa5\xcc\x82\xdf\x74\x2f\xab\x5b\xf9\x06\xb8\x01\x25\x75\x93\xa9\xdd\xfb\x56\xa4\xc1\x9b\xb2\x77\xd1\x3f\x1a\xd3\x76\x0d\xb6\xe2\xf8\xd9\xd3\xe7\x5d\xd3\xbc\x98\xfd\xd5\x7d\x3a\x9d\xb2\xd8\xe9\x26\x49\x5e\xbd\x7a\x9e\x18\x3f\x49\x5a\x2a\x39\x4f\x63\xb3\xfd\x9d\xbd\x47\xdb\x34\xcd\x89\x5d\xd2\xd4\xd2\xce\xfe\xfe\xfa\x0d\x15\x8b\x41\xab\xfc\xba\xb9\x8d\xad\x81\xdb\xca\xce\xb7\xb6\xb2\xe3\xb6\xb2\xfb\xad\xad\xec\x26\x81\xe4\x69\x99\xef\xcc\xf5\x40\x5e\xbe\xdc\x59\x19\xbe\x72\xa9\xdc\x2c\x06\xfd\xbd\xe7\xfb\xcf\x9e\xa2\x59\xf3\x4e\x32\xd6\x76\x36\x1e\xbf\x65\xad\xf4\xae\x72\x29\x39\xfd\x34\x49\x17\xe9\x84\xf2\x7b\x3c\x41\x8e\xfc\x50\x06\xb5\x04\x6d\x1b\xb0\x6d\xa0\x6e\x93\x15\x3b\x76\xd3\x0a\xdc\xff\x91\xe6\x7c\x77\xc7\xd8\x6c\x58\x4e\x4f\xe7\x6f\x50\x9d\x5b\xf0\x28\x7b\x41\x77\x2c\x79\x65\x2c\x7d\xc7\xe5\x26\xd8\xd3\xc4\xeb\xa9\x9d\x43\x5c\x54\xe3\xc7\x4a\x1c\x41\xff\x20\x6f\x6e\x88\x55\x46\x8b\x7e\x46\xee\x82\x6d\x8d\x65\x6e\x4d\x53\xb2\xe2\x38\x2b\x78\x32\x6f\xd8\x5a\x66\x37\x8f\x4d\x83\xa8\xef\x02\x21\x69\x81\x9d\xe6\xee\xb6\x26\xce\x78\x7a\x25\xe1\x10\xb3\xb6\xba\x56\x2b\xef\x79\x7b\x5b\xd1\x60\x72\xdb\x35\x62\x2d\x98\xa2\xa4\x1c\xcb\x40\x61\xc3\x27\xa8\x72\x32\x9e\xb2\x4c\x12\x51\x53\x52\x70\x69\x0a\x0a\x6c\x96\x9d\x21\xea\x23\xe5\x5f\x40\xdc\x4b\xd5\x63\x76\xe5\xab\x2d\xbc\x8b\x00\xbc\x6e\x7e\x88\xd0\x60\xa0\xa3\x11\xd9\x1a\x8c\x71\x16\x73\x24\x1d\xd1\xcb\x4a\x9a\x0f\x0f\x37\xc3\x48\x14\x44\x5a\xe1\xa1\x9a\xd6\x6c\x40\x80\x15\xae\x4e\x95\xa0\x2c\xee\xa3\xdd\x44\xcf\x92\xaf\x31\x4b\xae\x07\x5c\xcc\xea\x43\x56\xb2\x86\x49\xb1\x20\xd5\x22\xe1\xc1\x6e\x0d\xc6\xaf\x5e\xed\x00\xe0\x18\x69\xbc\x70\x6d\xe1\x4e\x15\x88\x61\xd3\xc1\x07\xfe\xf2\xe5\x6e\x7f\x15\x73\x34\x30\x9e\xfe\x4e\x6e\x8f\xd6\xf3\xe3\x42\x42\x9f\x9d\x8e\x73\xa6\xc6\x78\x67\xb0\xf7\x6c\xef\xf9\xee\xd3\x3d\x65\xc3\xe1\x62\x29\x09\xd8\x11\x47\x40\x01\xa9\x20\xdc\xbf\xb8\x68\xcc\x45\x7a\x8a\x14\xd5\xb9\x33\x9d\x62\x28\xa0\x95\x36\x7e\xbe\x7c\x8c\xa4\x0b\x2f\xa2\x98\x8d\x34\x54\xcc\x21\x88\x73\x44\xe3\x44\x45\x0a\x4e\x17\x7c\xc9\x48\x5d\x14\xff\x8d\x91\x8d\x1c\xb0\x28\x95\x52\x75\x82\x06\x82\x3e\xe2\x20\x89\x42\xc3\x5a\xb8\xaf\x45\xf8\x76\x7b\x21\x58\xd7\xa1\x5d\x62\x24\x6b\xb8\x62\x7e\x10\x36\xce\x94\xa3\x54\x93\x00\xef\xbb\x66\x28\x50\x19\xfd\xf6\x20\x53\xa2\xfa\x4c\x3b\xfd\x19\xc9\xa6\x45\x82\x5a\x93\x70\x59\xc8\x5b\x51\x94\x5f\x5a\x48\x25\x21\x95\x8a\x2a\xda\x74\x96\x54\x53\xfa\x6e\x22\x5e\x07\x75\x49\x8b\x96\xdc\xde\x28\xcf\xa9\xc7\xf5\x22\xdf\x35\x8d\x9b\xfb\xa9\x1f\xdf\xad\xa6\x36\x73\xa5\x5f\x32\xb4\xba\xf8\x5b\x40\xae\x50\x30\xd0\xfa\xe1\xb0\xa8\x88\xb5\x65\xac\x88\x45\x33\x5b\xb2\x96\x12\xd7\x21\x72\x03\x4c\x87\x20\xaa\x6f\x1c\x5a\x69\xae\x8d\xbb\xdc\x94\xce\x2a\xb7\x7c\x62\xfa\x93\xee\x52\xa2\x9c\x31\xcc\xc8\x6b\x97\x2d\x4b\x0e\xf8\x4b\x06\x28\x22\x17\xf8\x49\x20\x08\x03\xcf\x95\x15\xe7\x2f\x2a\xfa\x03\xa6\x0d\x9d\xbf\x55\x83\x20\x86\x5f\xd1\x21\xd0\x12\x18\x86\xa0\xd5\x47\x8f\xa7\xd7\x18\xe3\x4c\x2c\xa8\x2a\xe7\xe7\x49\xb2\x45\x75\xb1\x2b\x2f\x32\x58\xf2\xe5\x66\x6b\x4b\xbc\x9e\x14\xf3\x2b\x9a\x93\x8b\xf4\xfa\x9a\x4c\x5b\x5d\x11\x80\xd4\xd3\xe2\xeb\x97\xb9\x75\x47\xa0\xe0\x8e\x20\x86\x24\xf8\x67\x0a\xd9\x30\x55\xef\x93\x0e\xdd\xc4\x38\xeb\x76\xe5\xc5\xe1\x70\xf3\x8b\x58\xe6\x1e\x53\xfd\x9f\x8b\xd5\x09\x5c\x5a\xd0\x35\x11\x07\x61\xaa\xbc\x41\x0e\x94\x31\x34\x3b\x30\x11\x18\x74\xd7\xb9\xdf\x75\xee\x75\x9d\x27\xd0\x52\x4e\x3e\x73\x88\x44\xc4\x9a\x86\xf2\x3d\x40\xf8\x06\x00\xcc\xd3\x45\xf8\xea\x95\x26\x62\x3a\x47\x1b\x2d\x55\xfa\xa5\x70\x6a\xb6\x4d\x8c\x8f\x44\x31\x63\x71\xff\x26\x9d\xdc\x10\x4c\x7a\xf0\xff\xd4\x9a\xef\x93\xde\xc7\xc5\x34\x85\x3b\x41\xec\x18\x5d\x40\xfe\x7e\x4b\x19\xbf\x77\x3e\x7d\xfc\xf0\xe1\xe8\xf4\xe2\xf2\xe2\xf5\xcf\x98\xf4\x7e\x3d\x3b\x79\x7d\x71\x7c\x72\xa4\x1e\xdf\x9c\x9d\x9e\x5f\xbc\x36\x5f\x2f\xd2\x6b\xa9\xf8\x13\x40\xfe\x40\x6e\x69\x49\x8b\x5c\x36\xa3\x2b\x62\xd2\x53\x86\x7f\x4e\x75\xf1\x52\x45\xd2\x3c\xbf\xcf\x27\x37\xac\xc8\xe9\x1f\xaa\x11\x35\x66\x13\x69\x53\x17\xa5\x45\xfe\x9a\x71\x3a\x4b\x27\xa0\xea\x3a\xa1\x25\x3f\xe6\x64\xae\x35\x65\x76\xb2\x4a\xc9\xe5\xf4\xa6\x95\x58\x83\x8e\x1d\x4c\xde\x71\xc6\x78\x9a\x9e\x2a\x69\x5b\xd3\x95\x18\xba\x56\xc0\xc9\xa3\xc1\x44\x0b\xd0\xe6\x6d\x9a\x2d\x49\x9c\x60\x8c\x1d\xd4\xe9\x40\x89\x22\xda\xa3\x53\x35\xbc\x42\x6c\xb6\x54\xfc\x29\x1f\xbd\x52\x44\xf7\x1a\x37\xd3\x3c\x27\x0c\xf3\x36\x9e\x07\xc6\x51\xa7\x36\xe3\x3e\x2a\x46\xa6\xbd\x71\x12\xdb\xf6\x80\xf6\x6a\x99\x5f\xdc\x47\x69\x43\x55\xb0\x95\xf0\xf9\xda\xa5\x3d\xda\x85\x3a\x47\x1d\xe9\x18\x12\x8a\x3a\x47\x34\xdc\x56\xda\x5b\x30\x9c\xeb\xc8\x2e\x40\xac\x32\x2f\xd3\x29\xe6\x2b\x6f\x57\x96\xa8\xda\x8f\xa9\xde\x7f\xa4\x79\x60\xe8\x54\xba\xcf\x4c\x5a\xa1\xc4\xd2\x2b\x3b\xe9\x54\x0e\x42\xd6\xdc\xcb\x69\x7a\xfa\x48\x3f\xa7\xe9\xa9\xd3\xd3\x44\xf5\x34\x30\x3d\x79\x27\x70\xd2\xdc\xd3\xcd\x23\xfd\x70\x8c\xf1\x8d\xea\x65\xa6\x7a\xd9\xb1\xf3\x71\x4e\xbd\x26\x0f\xf3\x2a\x81\x13\x94\x36\x22\xf6\xad\x94\xe2\x8d\x2b\xa8\x0c\x89\xe9\xe5\x49\xc1\xac\x45\x16\x69\x8c\x1d\x7f\x18\x85\x7e\xe3\x92\x52\xa5\xda\xd8\x53\x24\x9e\xa4\x05\x5c\x9b\xf8\xb3\xe1\xa4\xe9\x8c\x78\x72\x42\x2b\x48\x79\xe4\x99\xb6\x1b\x95\x9c\x9a\xf2\xd6\xd6\x0d\x88\x11\xa9\x73\x8a\x16\x4e\x36\x17\xe2\x67\x71\xe9\xeb\xfc\x28\x59\xc7\xcf\xea\x42\x46\xfd\x71\x25\x7d\xcb\xad\x02\x58\x2c\xbe\x21\x08\xd3\x53\xcd\xb2\x72\x6d\x8a\x24\xab\x55\xe5\x82\x98\xa2\x65\x3c\x95\xbb\x68\xfe\xa3\xe4\xd0\x59\x5a\x72\xe0\x1e\x55\x16\x3d\x30\xb2\x2e\xf9\xaf\x00\x4c\xf9\xe2\x9b\x84\xd1\xad\xab\xe1\x74\xba\x89\xf1\x8d\x36\x38\x76\xc7\x72\x83\xcc\x2b\x39\x16\x45\xcf\xcf\x17\x4b\x4e\xe2\x24\xa9\x7c\x56\xb6\x78\x35\xac\x69\x42\x6a\xfb\xb3\xd4\x0b\xec\xde\xc6\xf3\x8e\x0c\x7f\xd0\x00\x58\xeb\xdc\xa1\x61\x9b\x07\x8f\xce\x8c\xb2\x92\x63\x8e\xf2\x5e\x49\x26\x45\x3e\xc5\x0c\xe5\x8f\xd2\xd7\xb5\x83\x54\xa5\x4b\x6a\x87\x01\x71\x69\xfe\xe3\x27\x18\x5c\xf2\x10\xcc\xa5\x3b\x70\xfa\x59\xb6\x01\x03\xd4\x78\x5e\xfb\xef\x8a\x91\xea\x77\x52\x8a\x3e\x4f\x3a\xcb\xf8\x36\x51\x31\x11\x9a\x80\xa2\x18\x7b\x0d\x12\x16\x04\x09\x4f\xaf\x4b\xcc\x11\xfb\x06\x30\xb4\x03\x61\x0d\x10\x54\xe4\x14\x62\x28\x88\xe3\xed\xc1\x23\xbe\xbe\x1a\x16\x1d\x8e\x0d\xf4\x72\x41\x19\x5a\x25\x93\x86\xd1\xb5\x84\xd1\xfd\x77\xc3\x48\x80\x08\x76\x2a\x10\x8c\x62\xa7\x8a\x3e\x7e\x24\xb0\x14\xa1\x15\x38\xb0\x74\xed\xed\xe3\x0c\x50\x4b\x7e\xaf\x9d\x9d\x43\x7b\xcb\x45\x8d\x70\x21\x3a\xc5\x25\x4f\xaf\xf5\x61\x17\x13\x26\xa8\xda\xa4\x3e\xf7\xf6\x2c\x3b\xfb\xb1\x42\x4a\xdf\xa3\x65\x7c\x2f\x81\x7f\xd5\x6e\x10\x25\x3a\xd0\xc4\x9f\x63\xee\xe8\x23\xba\xaf\xa2\xe2\xfc\x2d\x65\x13\x71\xda\x7e\x6c\x6a\x3a\xd5\x89\x9b\x13\x57\xc0\xa3\xdb\xf5\xa8\xa8\x87\x87\xb8\x5a\xa3\x82\xf3\x50\x7d\x2e\x86\x5e\x13\x3c\xba\x0c\xdb\xda\x86\x02\x3d\x18\x18\xb2\xb8\xca\xb1\x5c\xa9\xf8\x26\xdf\x89\x08\x61\x47\x03\x74\xf2\x9e\x61\xd7\x01\x31\xce\x25\x81\xb8\x16\x62\x6c\x3d\xdc\xce\x2a\x98\x1e\x3a\xb6\xc9\x1b\x48\xf4\x2c\xfa\x4a\x62\xe2\x63\xb7\x2b\xb9\x6f\xee\x1e\xd1\x08\x56\xaf\xc2\x96\xcd\x64\xb3\x5e\x4f\xf1\xe6\x00\xd9\x3d\x2e\x37\x88\x37\x46\x4c\x5a\xd5\x24\x84\x7c\x6a\xba\x39\x9d\x5e\x0e\xfd\x11\x0e\x2b\xdf\x63\x15\xc8\x3c\xb4\x21\xe8\x2c\xde\xac\x36\x97\x84\xbb\x89\x3d\x25\x82\x99\x41\xc3\x8e\x27\x5a\x32\xc0\xdc\xad\xad\x9b\x3e\xea\xd4\x01\xc8\x0c\xa6\x75\x0c\x00\xcc\xa4\xc0\xa3\x4c\x17\xd0\xa8\x0a\x63\x9c\x1f\x1e\x0d\xe3\xca\x0a\x51\x90\xb7\x35\xa5\x1f\x7f\x6c\x12\xb2\x8d\x5a\x67\xa1\x23\xe7\x20\xbc\xc0\xd2\xf7\x11\x77\x18\x4e\x4f\x38\x70\xa7\x32\xe8\x47\xe9\xf4\x6a\xf7\xea\xd9\x73\xb2\xbd\x3b\xdd\xd9\xd9\xde\x23\x7b\x57\xdb\xcf\x9f\x3d\x4b\xb7\x9f\xee\x0e\x9e\x4d\x76\x26\xfb\x93\xc1\xde\x7e\x04\x85\x1b\x93\xb8\xab\x0d\x2a\x39\x50\x62\xb7\x5b\xd6\xc0\x2d\x37\x13\x63\xd0\x84\x45\x06\x3e\x43\xff\xb9\x9a\xa7\xf9\xab\x70\x01\x52\x98\xd3\xb4\xf7\xae\x60\x31\x4b\x1c\x36\x83\xa7\x34\x97\x07\x46\xd0\x4b\x24\x97\xbf\x3e\x91\x7b\xcc\xc4\x5f\x41\xd5\x71\xc2\x40\xb7\x08\x98\x83\xcc\x0b\xcc\xe1\xbf\x4a\x9b\x28\xff\x26\x32\x35\x70\x59\xa9\x3d\xa2\x47\xa6\xf0\x88\x1e\x86\xaa\xf1\xab\x37\xad\xd8\x8a\x1c\x4c\x14\xfc\x4a\x85\xf7\xee\x90\x65\x79\x31\x0b\xe0\xd8\xf3\x5e\x79\x53\x2c\xb3\xe9\x07\x32\x2f\x6e\x03\xeb\xb4\xe9\x0d\x49\xf9\xa4\x90\xba\xbb\x92\x0b\x4e\x45\xd7\x01\x44\x01\xe3\x31\x10\xdb\x9c\x16\x53\x02\xe6\x11\x5a\x84\xb3\x5e\x8a\x5e\xaa\x25\x42\x16\xdf\xcd\xd3\x05\x06\x47\x0f\x2f\x83\x6c\x46\x4b\x69\x8e\x2b\xba\xcb\x3f\x91\xa9\xe8\x28\x88\x0c\xcd\xba\xb6\xe2\x42\x5a\x42\xe0\xef\x80\x00\xc5\x1f\x97\x0f\x72\x95\x97\x25\x4e\x12\xdd\x40\x1c\xce\xd7\xa2\xf0\x82\xf1\x6b\xc1\x2a\x52\xaf\xd7\xf8\x61\x43\xe3\x43\xaf\x14\x0a\x00\x8a\xa8\x1c\x27\x01\x1a\x6d\x73\x53\x43\xd1\xaa\x3d\x1b\x85\x59\xb6\xd4\x5d\x5a\x9e\x8b\x45\x6d\xd0\x36\xca\x82\x7a\x3a\x86\xe3\xe6\xdd\x2e\x87\xcd\x60\xf3\x2c\xb6\xb4\x60\x28\x17\xb1\x74\xb9\x0f\x5a\x48\xb4\x4c\xc4\xd1\x1c\x2b\xf7\x00\x30\x97\xd3\x16\x63\xaa\xf1\x98\x26\x88\x4a\x5c\x5c\x12\xc6\x7f\x22\xb3\x82\x55\x99\x9b\x5b\x1b\xb4\x55\xf4\x99\x3b\x7d\xd2\x4a\x9f\x05\x66\x7e\x9f\xd4\xe9\xb3\xf0\xce\x6a\xee\x75\x19\x17\x88\x27\xa8\x00\xe5\xb9\x77\xb2\xaa\x23\x10\xdd\x76\x88\xd7\x12\xeb\x31\x38\x8e\x60\x5c\xe7\xb7\x6a\xd3\xf1\x57\x5a\xd5\x54\x03\x2d\xb9\x53\x7b\x4a\x32\xc2\x89\xb3\x92\x30\x15\x30\x87\x56\xb2\xf1\xc6\x85\x87\x96\x8c\x04\x5d\xe5\xcc\x21\xe9\xb4\x91\xb1\x16\xe5\xa5\xec\xde\x60\xf4\x80\x08\xf7\x35\x1c\xfa\xb3\xb6\x2c\xc7\xf5\xdd\xdc\x71\x6c\xed\x4d\x30\x88\xd4\xb4\x19\x74\xa8\xca\x2b\xd9\x3c\x9d\x5b\xd8\xd4\x44\x1c\x37\x1e\x66\x5e\xb0\x87\x07\xef\x3c\xe7\x90\xd4\xc1\xa5\xa5\xc1\xab\x4e\xfc\x18\x12\xbd\xfd\x78\x52\xbf\x82\x8d\x50\xdb\x0d\xbb\x9c\x7c\x21\x23\xd2\x53\x71\xc2\xfa\x63\x1c\xc9\x9f\x11\x12\xaf\x7f\x61\xcb\x9c\xe0\xc1\x18\x47\xf0\x4b\xbe\x7c\x5b\xe4\x04\xef\x8c\x71\x24\x7e\x44\xab\xf8\xec\xe1\x21\x3e\xc3\x5f\x56\xca\xa5\xf9\x4d\x33\x44\x35\x96\x93\x79\x51\x94\xff\xbc\x82\x81\xb6\x0d\x80\x84\xd9\x1c\x55\x40\x5b\xc5\x2d\xcc\x02\x44\x99\xa3\xc8\x48\xf9\x98\xe9\xb5\x6f\x73\xd3\xb8\xcf\x27\x61\x06\xf9\x4c\x01\xe2\xe0\x20\xd1\xa2\x2e\x25\xe3\xd2\x5f\x86\x6a\xed\xc4\x22\xa8\x30\x68\x6e\x3c\xa8\x8d\x33\x09\x33\xb7\x18\xbc\xa8\x96\x12\xb0\x1b\xba\x48\xca\x14\x17\x5f\x62\xa9\xfe\x4f\xa7\xb7\x69\x3e\x21\x17\xc5\x5f\x48\xab\x15\xac\x9a\xbc\xc6\x5a\x76\x5f\xe5\x98\x6b\xdd\x55\xde\xed\x02\x55\xb1\x89\x31\x39\x48\x34\xa9\xd1\x87\xa8\x69\xe6\x78\xd9\x48\xf7\xb9\x66\x52\x2d\x60\x9d\x52\x89\x3e\xba\xd5\xf8\x72\xde\xfe\xb6\xf7\xc2\xa3\xc3\x24\x7a\x57\xdb\x50\xf1\x79\xe2\x1b\x08\xa7\xcc\x40\x52\x9b\x26\x7f\x22\xf7\x75\x96\x92\x03\xed\x84\x31\x3d\x34\x20\xfd\x00\x48\x2d\xce\x93\x21\x78\xe6\xc5\x34\xb1\xdf\xde\x17\x60\x3a\x3b\x34\x2f\x8e\x01\xcf\xc5\x79\x82\xf4\x9a\xeb\xc9\xca\x66\x9a\xae\x0d\x3b\x1d\xe6\x4d\xf7\x20\x66\x98\x25\x8a\x06\xb2\x91\x79\x14\x58\xb9\xab\x1d\x44\xce\x19\x50\x98\x38\x06\x54\x89\x14\x8f\x80\x18\x90\x4c\x06\xfc\xef\xab\xc8\x77\xcd\x4d\x61\xbb\x01\xf6\x42\xf4\x50\x60\x26\x2e\x60\xd9\x5f\xd2\x29\x9c\x01\x33\x7d\xe7\xaa\x8f\x87\x31\x83\xcb\x44\xde\x2d\xb9\xfa\x2d\x5b\x51\xe3\x2c\x24\x69\xc7\x0f\x61\x35\xc0\x87\x59\xfb\x17\xbb\x9b\x3a\xa6\x66\x2a\x12\xec\x6b\x03\x57\x8d\x3e\xf7\xe7\x4a\x31\xaf\xde\x53\x79\xd2\xd1\x77\x57\x4c\x61\x8c\x54\x8d\x91\xca\x31\xe6\x87\xb9\x1d\xa3\x49\x67\x28\x31\x5f\xc3\x1d\x63\x16\xcf\x1b\x9a\xc2\x3c\x48\xa1\x00\x3d\xb1\x5a\x4b\x0d\x37\x80\x3b\x2d\x7f\x07\x39\x87\x82\xe9\x43\x21\x31\x88\xa6\xeb\x3b\xa1\xd1\x11\xf7\xc4\x56\x28\xec\x38\x39\x8c\x89\xbe\xa0\xf3\x04\xf1\x9e\xbc\xa2\x63\x80\x45\x92\x0c\x15\x81\x5d\x9f\x0e\x60\xff\xba\x01\x1e\x6c\xd9\xa9\x44\x5d\xfe\xb5\x5b\x51\xb2\xbe\xa9\x9a\x31\x48\x63\x8e\xf5\x8d\x18\x50\xd0\x04\xc2\xbe\xbc\x9d\xbb\x4f\x59\x71\xb7\x9d\x91\x5b\x52\x37\x7e\xd0\x41\x4f\x2b\x26\x10\x0c\x82\xb9\xbe\xf7\x0f\x7a\x3d\x48\xea\xc2\x70\xd9\xde\x57\x57\x7b\x33\xe7\x71\x0a\x7a\x74\xd9\x64\x5b\xf0\x55\x15\xf5\x1e\xa5\x75\xb5\xd1\x7e\x50\x6d\xb4\xef\xaa\x8d\xf6\xc7\xc3\x2f\x2b\x54\x8a\x31\x11\xa0\xf4\x75\x2c\x7d\xb4\xc4\x6e\x44\x04\xed\x31\x80\x32\xfc\x7b\xbc\x44\x54\xaa\xdf\xd0\x04\x67\xbd\x79\x9a\xa7\xd7\x84\xa1\x19\xce\x20\xb2\x13\x04\x83\xdb\xfc\x73\xfc\x2e\x9e\x40\x4c\x66\x27\x6a\x5c\x3c\x4b\x12\x34\x49\x02\x89\x3c\xd2\x3c\x2f\xf8\x86\x8c\x07\xb0\x61\x62\x53\x95\x1b\x77\x94\xdf\x6c\xa8\x28\x59\x1b\xd2\xfb\xb7\xdc\x48\xcb\x8d\x74\x83\x15\x05\xb7\x25\x7b\x51\xd2\x29\x30\x74\xa8\x82\xe9\xce\xd0\x52\x87\xd5\x56\x2e\xa0\x9f\xc8\x7d\x19\xa7\x89\xef\xe7\x62\x48\xc6\x11\x41\xe9\x88\x8c\xc7\xab\x04\x4d\xf1\x28\x9a\xa7\x34\x17\xbb\x29\x2b\xc5\x0e\x81\xb8\x2b\xd1\x18\x2d\xf0\x4d\xad\xba\xa2\x16\x6c\xd8\x3a\x08\x64\xb7\x4a\x3a\x7e\xa4\x79\x7d\xef\xce\x71\xff\x60\xfe\x72\xf7\x7f\xeb\x10\xc4\x07\xf3\xad\xad\x04\x2e\x29\x93\xe6\x14\x34\x9b\x6a\x37\xd4\xbf\xa0\x9b\x60\xe6\x33\x3d\x8c\xc1\xb8\xe3\xd5\x01\x0d\x73\x09\xc1\x86\x64\x5a\xdd\x58\x7d\x46\x0b\x34\x45\x7d\x08\x26\xeb\x55\x90\x65\x2b\x2f\x8b\xca\x73\x96\x20\xb5\x4f\x4b\xd8\xa7\x25\xe1\x6f\x55\xdc\xb9\x37\x2a\x27\x9a\x87\x8f\x7f\x06\x43\x02\x89\x18\x9a\x0b\x8a\x72\xbf\x8a\x72\xd7\x84\xab\xa0\x53\xbf\xa6\x55\xd3\x5e\xed\xe2\x3e\xf5\xc3\x1c\x43\xb0\x8c\xa2\x84\x08\x00\x69\xd6\x4b\x79\xdc\xf7\x8e\xd4\x2d\x8f\x19\xc4\xa0\x04\x13\xa4\x4a\xfa\x32\x27\x78\xc0\x15\x22\x32\xd1\x44\xe0\x3e\xf9\x56\xcb\x40\x41\xff\x37\x98\xc9\xfc\xf5\x86\x72\x52\x2e\xd2\x49\x90\x8d\x29\x48\x8f\x93\x92\x03\xef\x42\x7a\x79\xc1\xe6\x20\x28\x33\x11\xc6\x3e\x13\x31\x5a\x08\x00\xa0\x43\x57\x04\x95\x60\x1f\x89\xd8\x33\x2a\xad\x92\x8c\x39\x6d\xc6\xc0\x88\x34\xd4\xa3\x45\xde\xda\xc6\x25\x6f\x6e\x83\x96\xc6\xa1\x45\xd4\x7b\x47\x99\x14\x96\xe0\x7b\x2e\x06\xa8\x51\xc0\xfd\xbb\x2c\xbd\x2e\xdf\xb1\x62\x8e\xdf\x21\x08\xe5\x64\xb0\xc3\x3d\xfe\x03\x91\xde\x9b\x25\x2b\xc1\x72\xe6\x4d\x91\x4f\x18\xe1\xe4\xa7\x62\x99\x4f\x4b\x4c\x7a\xe7\x47\x1f\x8e\x5f\x9f\x1c\xff\xf7\xeb\x8b\xe3\xb3\xd3\xcb\x77\xc7\x1f\xce\x2f\x2e\x4f\xcf\xde\x1e\x5d\x9e\x5f\x7c\x38\x3e\xfd\x19\x0c\x70\x94\xc1\xa1\x9e\x05\xe9\x9d\x92\x3b\x15\x67\xd0\xbe\x7b\x7b\xf6\xfe\x82\x11\xe9\x9b\xc7\x96\x30\x4d\x4c\x7a\xc7\x6f\xcf\xde\xbf\xb9\x49\xf3\x6b\x02\x9d\xfd\xfa\xf3\xe5\xe9\xeb\xf7\x47\xe7\xbf\xbc\x7e\x73\x24\xeb\xd8\x8f\x2d\x7b\x87\xf4\xde\x1f\x9f\x1e\xbf\x7f\x7d\x72\xf9\xe6\xf5\x2f\xaf\x7f\x3a\x3e\x39\xbe\x38\x3e\x3a\x17\x0d\x1c\xbd\x7b\xfd\xf1\xe4\xa2\xf6\x5a\x6a\xaf\x8f\xf2\x5b\xca\x8a\x7c\x2e\x6f\x5e\xff\x49\x06\x5d\x23\x26\x6c\xd3\xcf\x50\xcf\x86\x0d\xa4\x57\x4b\x2e\xbe\x9f\xd3\xf9\x22\x23\x81\x0f\x72\xa5\x3e\x90\x72\x99\x71\x6d\x4e\x45\xf3\xeb\x5f\xdf\x63\xd2\x3b\x29\xee\x4e\xc4\x05\x07\x0f\x6f\x8a\x7c\xaa\x4e\x8f\x6b\x7f\x15\x88\xa9\x4a\x7a\x1f\x4f\xdf\x1e\xbd\x3b\x3e\x3d\x7a\x7b\xf9\xe1\xe8\xdd\xd1\x87\xa3\x53\x00\xd3\xe9\xc7\x93\x13\xe7\x85\xe3\xb3\x9f\x0a\xc6\x37\x6e\xd5\x32\x11\x41\x59\xa5\x9c\x28\x9f\x11\x10\x8e\xcd\x68\x96\x9d\x2e\xb3\xac\x4c\xe2\x17\xcf\x13\x65\x13\xd9\xca\x9f\xa5\xd3\x6a\xc4\x6a\x89\x2e\x6a\x27\x77\x27\x78\x72\x77\xdc\x93\xbb\x33\x1e\x46\xe5\x7d\x39\x49\xb3\x2c\xea\x04\xc6\x38\x22\x63\xfc\x45\x15\xb0\x25\x05\xa5\x85\x74\x41\x30\x60\xe6\x32\x24\x67\x55\x8e\x63\x9d\xac\x17\x2a\xd7\x09\x82\xeb\x53\x3d\xd8\x8a\xaf\x67\xbc\x16\x1a\x10\xe5\xc9\x97\xbc\x57\x2e\x04\x6d\x26\x2a\x41\x5e\x56\xd5\x29\xae\x5a\x6a\x3a\xba\x81\xca\x0c\xd8\xb8\x93\xf7\xd4\xc8\x0f\x73\xf3\x15\x20\x37\x74\x9f\x95\x85\x94\x16\x0d\x24\xe8\x87\xb9\xf2\x81\x90\x43\xd9\x4e\x2c\x18\xb9\xd5\x66\x13\x8f\x1b\xd5\x3a\x90\x54\x31\x73\xb4\x22\xe1\xe7\x25\x9d\x4a\xcb\x2e\x71\xf9\x2d\x5b\x74\xcb\x46\xea\xe2\x48\xdd\xd7\x35\xeb\x6d\x51\x21\xcb\x25\xc4\x18\x93\xc3\xd9\x50\xd1\xdf\xe4\xf0\x66\x28\x53\xcb\x1c\x4e\x87\x9b\x03\xf8\xb1\x18\xea\x50\xd3\x18\xeb\x10\xd4\x87\xe2\x8a\x98\x40\x5c\x34\x72\xb7\x91\x49\xbf\x3c\x3f\xcc\x4e\x80\xb9\x98\x81\x98\x3a\xaf\x68\x20\x20\x3e\x4e\xfd\x00\x2f\x95\x6d\xd8\x8f\xb2\x82\x81\x23\x65\x9b\x5f\x73\x05\x9b\xe6\xc4\x41\xc5\x16\xc9\x56\xc5\x79\xaa\x48\x1b\xfd\xde\x2a\xc2\x2c\xd6\xed\xc6\xe1\x82\x58\xc2\xd5\x6a\x6d\xb4\x25\x52\x62\x6c\x2b\xaa\xe1\x8c\xbc\x5d\x01\x00\x5e\x0a\x9a\xf7\x9f\xb3\x9d\xa0\xf1\x99\x1a\xa5\x4a\x7b\xd6\x09\xa3\x5a\x63\xe7\x06\x65\xb5\x25\x5c\x05\xfd\x6a\x2b\x7f\x59\x68\xb3\x9f\xa0\x85\xfe\x3d\x48\xd0\xfc\x6b\x55\x63\xa0\x7c\xf8\x06\x5b\x4d\xe5\xf5\x53\xfc\x54\x14\x99\x0b\x7c\xab\x50\xe6\xea\x6b\x50\xce\x4f\x5c\xdd\x5a\xfd\x7e\x7a\xcc\xec\x68\x2d\xeb\x91\x45\xca\x38\x98\xd8\xc0\x44\x21\xef\x8a\x67\x67\x9e\xc4\x3c\x59\xc7\xfe\x66\x4d\x53\x1a\xe3\x6a\xae\x5c\x7d\x00\x28\x30\x86\x80\xcf\x8f\xfd\x38\xe2\xd6\xae\x46\x8a\xac\xc4\x5e\x27\x23\x3e\xc6\xd7\x31\x4b\x1c\xc7\x0b\x6d\x35\x78\x48\x7a\xbf\x17\x34\x8f\xa3\x48\xc7\x58\x94\x28\xc2\xb7\x58\x70\x0c\xf5\xae\x2d\xe4\x23\xfd\x32\xda\x34\x98\xa9\xc7\x0b\xe9\xe6\x7e\x18\x45\xc3\x73\x93\x19\x20\x85\x34\x7b\x83\x86\xd4\x90\xc5\x62\x00\x42\x3a\xc9\x73\x14\x10\xed\xab\xc2\x55\x4a\x87\xf7\x98\x25\x31\x41\x39\x24\x57\x4e\xc4\x82\x67\x45\x3a\x05\x4d\xa1\x1f\x96\x16\x15\xd2\xbe\x56\x74\xfa\xf4\x91\x4e\x99\xa3\xe6\x94\x61\x47\x63\x26\x9a\x76\x79\x2a\xdb\xda\xde\x3a\x53\x90\xe3\x13\x6d\x48\xc6\x03\x22\xe4\xea\xb6\x91\xd3\xda\xfe\xfa\xad\x81\x24\xcd\x7d\x2e\x2a\xcf\x29\x2e\x0e\x47\x20\x26\x50\xdc\x84\xdf\xbd\x0a\x0f\x8a\x52\xdb\xfb\x8b\xc7\x40\x63\x57\xc1\x46\x2f\x60\x6a\x24\xaa\x69\x1b\xd0\xed\x7d\xba\x88\x93\x51\x3e\xee\x98\x8b\x8d\x76\xbb\x10\xa4\x02\x7c\xd9\xb3\x99\x2c\x1d\xe7\x49\x82\x3c\xe8\x52\x3b\xa2\x9d\x7e\xeb\x88\xc4\xff\x3b\x1d\x52\x49\xe5\xc3\xd0\xe6\xa6\x03\xd3\x67\xdf\x31\x29\x7f\xf1\x9c\x21\xea\x91\x9b\x5e\x9e\xaf\xb5\x95\x2b\x90\x52\x6b\x90\x74\xe8\x61\xac\x92\xa3\xd3\xd1\xce\x38\x41\xe6\x61\xe0\x3e\xf4\xc7\x49\x32\xd4\x05\x25\x5f\xdf\xf8\xe0\xac\x6a\xeb\xc8\x36\x37\xc3\x23\xf2\xf7\xfb\xe1\x74\xb8\xb0\x2d\x0e\xfa\xbe\x42\xc7\xdb\x76\x3e\xd4\x34\xee\x77\x4b\x30\x29\x36\xb7\xa9\x54\xb4\x95\xbc\xd7\x27\xab\xf4\x59\xc5\x15\x36\x4f\xad\x9e\x8a\x0d\xc7\x01\xcb\xc7\x0e\xe8\xab\xfe\x01\xdd\xde\x4e\xbe\xe4\x23\xba\x3d\x18\xfb\xc3\x58\xf9\x33\x14\xdc\xbe\x5c\x50\x65\x5b\x18\xbd\xf9\xf8\xe1\xc3\xf1\xd1\xdb\x8d\x37\x67\xef\x7f\x39\x3b\x3d\x3a\xbd\xd8\x80\x4b\x15\x22\x85\x6d\x8c\xe8\x14\x3f\x9d\xf5\xfb\x33\x72\xf5\x62\x3b\xed\x93\xd9\xf6\xde\xfe\xde\xb3\xed\x17\x2f\x48\xba\x9d\x4e\x76\x77\x9e\xcf\x9e\xf7\xd3\x09\x49\xc7\x91\xc5\x94\x57\xce\x1d\x15\x6f\x92\x87\x87\x4d\x32\xba\x1f\x4b\xd6\xe4\xf2\x51\x2f\x08\xef\x72\x4d\x19\xd8\x77\x8a\xdf\xa3\xfb\x31\x36\xf9\x09\x3c\x62\x64\x99\xdf\xb1\xd4\xf7\x53\x13\xd8\x0d\xbc\x8d\xbd\x70\x03\x1d\x5f\xbf\x73\x70\x60\x36\x09\xa8\x6b\x20\xe6\x34\xc5\x4c\x0e\x01\xa4\xc3\xe2\x12\x71\x25\x27\x0b\x46\x40\x37\x95\x3b\x2f\xc5\x56\xc8\xd3\x39\x99\xf6\xe6\x84\x5d\x93\x38\x97\x4f\x49\x82\x36\xaf\x62\x6a\x4c\x94\x68\x87\x63\xba\x5a\xa1\x96\x78\x0f\x72\x98\xb5\xe0\x03\xae\xea\x47\x72\x1a\xd8\x00\x47\x6c\xb2\x43\x4f\xb8\xa3\x93\x4c\x6b\xe2\x43\xac\xc6\x21\xdb\xd2\xce\x7f\x43\x16\x08\x51\x70\xe7\x90\xe7\x47\xa2\xbc\x77\x87\x99\x62\x47\xae\x21\x28\x90\x94\xe4\xe1\xa1\xf5\x32\xb4\x75\x3f\x3b\xd7\xa7\x4a\xcb\x62\xc9\x7a\x93\x16\x83\x74\xbb\xb6\x3d\xec\xb6\xf7\xe7\x8b\xf7\x27\xb6\xb5\xf3\xb5\x5b\xab\xb1\x10\xbd\xbc\x98\x92\x8b\xfb\x05\xb1\xad\xbd\x76\x5a\x53\x89\x67\x6c\xf9\x55\xab\x54\xe3\x52\xea\xbb\x5b\xac\x98\xd6\x0c\x5f\x24\x46\x85\x39\x04\xba\xd1\xf4\x1b\x43\xd4\x35\x13\x44\x54\x7a\x08\x45\x4a\xb8\xb7\xcd\xc9\x67\x1e\x89\xb7\xe9\xb5\x74\x9c\x53\xe5\x8d\x41\x19\xf5\x0c\xca\xc2\x31\x89\x1e\x33\x63\xaa\x33\xce\xed\x16\x6f\x3c\xbd\xee\x70\xc7\x44\xaf\x6a\xe5\x96\x3c\x3c\xd4\x5f\xe2\x8a\xd5\xb8\xd6\x91\x19\x42\x18\x4c\x99\x02\x16\x55\xda\x57\xc5\x37\xb6\xeb\x90\x4d\xc9\xec\xc4\x1c\xeb\xed\x2c\xd6\xf8\x90\xd8\x5d\x9d\xa8\x22\x52\x3f\x59\x4c\xe5\xbe\x70\x8c\x63\x1d\x5b\x59\x65\xd9\x59\x26\xe8\xd3\x3f\xd9\x1b\xf6\x11\xcb\x6b\x56\x63\x78\x1b\xb9\x03\x38\xf7\xca\xbc\x19\xb5\xd8\x0e\xb4\x31\x34\xeb\xd8\xfb\xc1\x5e\xd0\x8b\xef\x71\x2f\x7a\x0f\x05\xc6\x26\x16\xe3\xe1\xe1\x08\xfe\x9a\x14\x4e\xf6\xc8\x3d\x3c\xd4\x8f\xed\x2a\xe6\xc9\xe1\x60\x18\x8b\xe5\xe8\x76\xc5\x85\x72\xd8\x1f\x7e\x16\x2f\x77\x87\x81\x1e\x04\x82\xe8\x76\x07\x20\x49\xb0\x27\x5e\x14\xdf\x1b\x9e\x8b\xff\xf6\x87\x03\xc5\x3d\x29\x0a\xec\x39\x0a\x68\x0c\xdc\x8b\xd4\x6c\x51\x86\x8f\x44\x0b\x16\x47\x72\x41\x46\x10\x29\x4c\x2d\xe3\x44\xd9\x8a\x28\x79\xa3\x40\x5c\x31\x73\x48\xbd\x17\xeb\x76\xa4\xb0\x9e\xd7\x23\xff\x8a\x9e\x76\x77\x1e\xeb\x49\x9c\x1c\x8b\x1f\xf0\x51\xcc\xdc\x69\x31\x49\x6b\x37\x75\x77\x41\x3e\xf3\x98\x26\x07\xc0\x13\x2a\xcf\xe5\x04\xcc\xcd\xb5\x65\xe2\x5f\x29\x97\x14\xc7\x59\x5c\x20\x8e\xa8\x43\xac\xed\xf6\xd7\x85\x42\xcb\x84\xdf\xb1\xf4\x5a\x7c\x90\x7a\x1c\xd5\xf0\xe0\x07\x34\x0c\xca\x5d\xa7\xd1\x1d\x1f\x92\xf6\x5c\x54\x72\xdc\xd9\x0a\xbb\x0d\x15\x4c\xe6\x39\xcb\x58\xed\x35\xb7\xed\x67\xab\xb4\x55\xf6\x1b\x5b\x6f\xa8\x31\xd8\x69\x26\x8e\x7d\x72\xb4\xc2\x27\xc8\xc8\xf3\xcc\x59\xb9\xc1\xee\x9a\x1c\x00\x7b\xf5\x6a\x57\xa7\x90\x7b\xd6\x65\xc6\xa9\x4d\x93\xf9\x9e\xe5\xce\x40\xbf\xae\xf4\x2f\xe3\xe1\x09\x32\xca\x2d\xbd\xd3\x50\xda\x04\x9a\xf3\x4a\xef\xaa\xd2\x47\xf9\xa4\x98\x92\xa9\x4d\xc6\xc6\xbc\x62\x7b\x43\xf8\x6f\xff\xd1\x91\xac\x2c\x2c\xf6\x9a\x37\x5b\x47\xb9\x89\x2f\xb5\xdb\x1d\x57\xdc\xbb\x03\xca\xfd\xc7\xab\x4b\xa3\x7d\xbb\x6b\x9d\xda\xed\x5c\x2c\xf0\x8c\xc0\x88\x41\xfa\x1a\x29\x2c\x60\xc9\x76\x6e\xd6\x1b\xf2\x2e\x3a\xed\xb5\x30\x90\x1d\xf7\x04\x39\x28\x66\xd0\xc2\x0e\x2a\x29\x85\x57\xbc\x85\x47\xeb\xa8\x81\xba\xe5\xf7\x1e\xdb\x6b\xde\x0a\x69\x9e\xa8\x43\x6a\x99\x79\x5c\x49\xc6\xd3\x16\x69\x8c\xc0\x09\x90\x1c\xc7\x19\xc4\xd3\x9d\x0a\x17\x28\xd3\xe2\xd8\x41\xb6\xc3\xa0\xf9\x6c\xb9\x71\xee\xbc\x23\xb6\xf7\x2c\xcc\x77\xca\x36\x14\x17\xeb\x14\x7f\xda\xbc\x8d\x00\xc3\x4b\x16\x95\x1d\xaa\x2d\xc5\xbc\xdc\x04\xf0\xee\x74\x99\x65\xce\x94\xf6\x5b\x90\xa8\x6d\x51\xa9\x95\xa5\x8c\x86\x1b\xe9\x8c\xee\xcf\x5a\xd7\xd0\xc4\xc3\x6a\x3a\x41\x10\xc8\x4b\xe4\x2b\xbd\x48\x5a\x21\x86\x4a\x4c\xdd\x1c\xa4\x4b\x6c\x98\x67\x3a\x8b\x97\xaf\xfa\xc9\x97\x14\xa7\xbd\x89\xc0\xbd\x8e\xfd\x40\x86\xfb\x07\xd9\xcb\xe5\x41\xb6\xb5\x95\xa4\xae\xf0\xa9\x1c\x65\x63\x54\xf4\x52\x1e\x67\x89\xe0\x88\xdd\x61\xb8\x23\x48\x21\x1f\xb1\x20\xce\x9d\x0d\xb0\xdf\xb6\x0b\xab\xe2\x13\x3a\x8b\xfd\x0b\x91\x26\x09\xd5\x87\xb7\xdb\x25\xbd\xeb\x82\x17\xb0\x49\xb3\x92\x48\xf3\x14\x60\xe8\xf3\x8a\x4b\x87\xc0\x8f\x85\x3a\xfb\x4e\x35\x54\xbb\x5b\x2f\xe2\xc2\x45\x49\xfb\x6d\x82\xba\xaf\x1a\xac\xb8\xc7\xbf\x61\xb0\x4e\xb5\xc7\x07\xdb\x2e\x07\xd4\x62\x2f\x35\x64\x68\x1e\x83\x0d\xa5\xe9\xc2\x36\xd5\x72\x08\x54\xd5\xc7\x28\x95\x0b\xd7\x39\x29\x38\x4d\xee\x62\xef\xa7\xbb\xc1\x1e\x49\x7e\x2b\xb3\xe9\x02\x16\x67\x1a\x8b\xf3\x22\x24\xa3\x8f\x99\xbd\x14\xda\xf2\xea\xac\xed\xeb\x09\x0c\x62\x5a\x96\x84\xf1\x48\xc9\xec\xa5\xa7\x1c\xeb\x4d\xc0\x53\x68\x2d\x67\xd9\x90\xa3\x93\x99\xa2\x66\x44\x6c\xca\x0e\x09\x5e\xc4\x7d\xd6\x24\xa0\x72\xf5\x0d\x29\xc5\x78\xf4\x9a\xe8\x88\x28\x49\xec\x7a\x96\xc5\x09\xec\x7d\x99\xf2\xdd\x30\x61\x0d\x79\x65\xbe\xc6\x7f\x10\xac\xa1\x19\xca\x15\xc0\x7e\x5f\xce\x17\xdb\x74\xb6\x9d\x17\x7c\x5b\xa5\x4f\x9c\x46\xe2\x2b\xb8\xce\xe6\x4d\xbc\xea\xb7\x39\x06\x3d\x06\x17\x58\xad\x90\x35\xa6\x3b\x8a\xce\x26\xe9\xa5\xd9\x5d\x7a\x5f\x7e\x30\xd0\xea\x76\x1d\xc6\x3b\x77\xb1\x86\x8c\x4d\x30\x05\x20\xd7\xe3\x13\xf8\xb3\xbb\xf1\x1d\x6f\x35\xd0\x1b\xf2\xbd\xac\xef\x84\xac\x0c\xd0\x99\x16\x62\xd0\xa9\x04\xf5\xbd\xde\xa7\xb9\x17\x7e\xe3\xeb\x74\x4a\x21\x29\x85\x67\x41\xa9\x27\x6f\x27\xd4\x98\xdd\xc5\xd4\xac\x0d\x49\xbe\x87\xe1\x67\xd2\x86\x52\xc1\xef\x8a\xb8\xb9\x4e\x1c\x4d\xbd\x36\x7e\x96\x8f\xcd\x9a\x78\xb7\xa1\x56\xaf\xa5\xd0\x44\x95\x3b\xcc\x82\x4c\x5a\xf2\x97\x5c\x91\x6c\x2b\xda\x18\x45\x5b\xf0\x7c\x79\xbd\xa4\xd3\xad\x68\x1c\xf9\x3c\x70\x0b\x45\x19\xe2\x96\x80\x03\x6c\x52\x2c\x38\xcc\x50\x3b\x61\x59\x6b\xf6\x8d\x4c\x1f\xba\x46\xcb\xbb\x2d\x37\xb3\xdf\x72\xb1\x20\xb9\x32\x77\x5a\xa7\xdd\x16\xba\xbe\x8d\x89\x74\x7b\x71\xd8\xc7\xbd\x00\x39\x85\xd8\x1a\x8a\xad\x70\x97\xa1\x5b\x9b\x63\x6a\x87\xa4\x2f\xeb\xb2\xf1\xb2\xe6\xb8\xd4\x58\x3b\x70\x47\x97\x49\xb2\xaa\x75\x52\x24\x09\xc3\x45\xbd\x93\x65\xb8\x93\x22\xe9\x30\xbc\x6c\xe9\x64\x09\x84\x98\x03\x3c\x50\x6e\x91\x79\xc1\x89\x01\x21\x4a\x91\xcb\x0d\xd4\x08\x71\xa7\x72\xb1\xf0\xeb\x3a\x8b\x19\x96\xec\x38\x5c\x91\xa3\x42\xe5\x7d\x08\x78\x0e\xb9\xc1\xa4\xb5\x44\x6f\x96\xc9\x08\xd0\xa8\x41\xeb\xca\x55\xfc\x20\x51\xc0\x19\x11\x54\xd3\xa3\x71\xa5\x32\x61\xf9\x8f\x53\x73\x92\x15\xa5\x9d\x47\x07\x94\x48\x35\xab\x56\xbb\xd9\x47\xfd\xb1\xb8\x21\x46\x83\x31\x70\x2f\xb7\xbd\x72\x72\x43\xa6\xcb\x8c\x1c\x8b\x4d\x9e\x65\xea\x6a\x65\x10\x39\xd0\xc4\x69\xb8\x26\xfc\x2d\x91\x56\x7e\x05\x13\x94\x37\x15\xf7\x45\x4e\xee\xe0\x6d\x21\x33\x6b\x0a\xee\xd0\x82\xbf\x4d\x47\xd9\xae\xbb\x46\x29\x2e\x8c\x2d\x74\x89\x65\x96\x5b\x82\x96\x95\x0d\x9f\x79\x70\x00\x03\xea\x89\x31\x45\xcc\xaf\xc1\x8a\x5a\xee\xa3\xb3\x85\xf2\x3c\x2b\xd1\x4d\xdd\xdc\x75\x2a\x58\x03\xc9\x74\x4f\x50\x89\x96\xe8\x06\xcd\x92\x4e\xcb\x92\x8b\xf9\x19\x30\xa5\x48\x45\xc2\x59\xe0\x54\x80\xe9\x22\xbd\x8e\xa7\x3e\xf1\x78\x91\x5e\x27\xf1\x22\x24\xe9\x7a\x1b\x2f\x90\x68\x40\xd3\x73\x6f\xbf\x5f\x33\x20\x89\x10\xaa\xe1\x07\x6a\x01\x93\xe3\xd9\x6a\x05\xe4\x40\x34\xf9\xc2\x22\xa5\x0c\xd0\xd1\x2f\x1c\x39\xdf\xf7\x5d\xac\x55\xa7\x4e\xb9\xa8\xda\xdf\x52\xf5\x6e\x9d\x61\xae\xb5\xcf\xa5\x33\x98\x4e\x6e\xe9\x14\x9a\x3c\x3c\xc4\xfe\xbe\x95\xa5\xcc\x7a\x30\xc4\x93\x7a\x34\x8f\xdc\x8f\xba\x50\xea\x3b\x6c\x77\x0d\x96\x02\xd8\xd5\x62\xb1\x5b\xd9\xb5\x9e\x5a\x3c\x6d\xf8\x94\x27\x82\x37\x3d\x6c\x12\x3c\x69\x0b\x04\xe7\x38\x97\xe2\xb3\x4e\xea\x0c\x96\xa7\x90\x80\xbd\x74\x50\x42\x9b\x24\x87\xaa\x31\x17\x6a\xcc\x4d\x03\x63\x62\x60\xfe\x79\x12\x5c\xb3\x5e\xf5\x0c\x17\x0d\x83\x2e\xe4\xa0\xd1\x04\x57\x87\x5d\xb5\x98\x8d\x53\xb4\x44\x9b\x9b\x14\x65\x55\x5e\xaa\x0c\x9d\x85\xd3\xb8\x44\x13\x73\x12\x4e\xbf\x97\x6a\xf7\x23\x7d\xa4\xc6\x8c\xd7\x92\xf1\x10\x75\x77\x5b\xcd\xc1\xd0\xef\x2a\x50\x88\x1f\x5c\xc3\xd3\x8c\x7d\x55\xb0\x90\xc7\x4e\x84\x19\x98\x3e\x13\x56\x45\x66\x0f\x85\x7b\x02\xd6\x54\x91\xe5\x56\x45\xa6\xf5\x63\x46\xd5\x82\xe0\x00\xd9\xa3\x60\xa0\xfb\xbb\x36\x73\xb5\xf6\x4f\x45\xf1\x69\xb9\x08\xa8\x32\x61\x1d\x80\xf4\x3c\x6e\xd6\xd1\x4b\xa4\x55\xd7\x19\x39\xc9\x57\x24\x1e\x20\x3c\xd5\xce\xa5\xa0\xc3\xcf\x83\x9e\xfa\x4d\x41\x50\x1c\x05\xeb\xf7\xc4\xcf\xf1\xb4\xe5\x36\xf2\x07\x73\x82\x71\xd0\x59\xcc\xc0\x8a\xb2\x1a\x95\xc3\x0e\x41\xf1\x72\x70\xb0\xe9\x2c\xbe\x12\x94\x62\x8e\x19\x50\x40\x1b\x74\x16\xd7\x54\xc6\xac\xdb\x65\xc9\x97\x1c\xff\xee\x25\xce\x62\x88\x59\xd8\x18\x83\x34\xc7\xd1\xee\x3e\xce\xab\xb1\xc7\x34\x08\xab\x30\x41\x79\xcd\xaf\xdf\x35\x76\xe5\x8d\x4e\x1a\x66\x41\x3a\x3a\xfe\x43\xb7\x7b\x25\x35\xa3\xd2\xb6\xf6\x52\x99\x37\x9b\x28\x3e\xe8\xe4\xb1\x40\x36\xb4\xe4\xae\xea\x30\x64\x22\x48\xdc\x18\x0e\x64\x2d\xbd\xa2\x35\x09\x1c\x8d\xcd\x12\xd2\x92\xab\xe8\x5a\x3c\x10\x5d\xeb\x2e\xe6\x4e\x7c\xad\xa4\x03\x72\x22\x6d\xc7\xa6\xfa\x74\x93\xac\x69\xd7\x6e\x69\x07\xb8\x11\xd5\x22\x5c\xbe\x73\xb4\x2b\x7d\x71\x4b\x29\x3a\x43\xa5\x3a\x1c\x0c\xfb\x89\xf3\xf6\x22\xbd\x3e\xdc\x51\xaf\x16\x8c\x2c\x52\x06\x79\xb0\x0f\xf7\xd4\x3b\x49\x91\xc0\xab\xe7\xea\x95\xc1\x15\x7f\x2e\x8a\x4f\x87\x83\xa7\xea\xb5\xc2\x60\xf0\x72\x77\xc7\xef\x05\x68\x9c\xc3\xa7\x7e\xa3\x6f\xd2\x2c\x23\xec\x70\xb0\xa3\x1b\x96\x08\x02\x1a\xd8\xd9\x7f\xea\x95\x05\xaa\x30\x9f\x90\xc3\xfd\x81\x68\xda\x5a\x41\xfc\xe1\x7a\xb4\x6c\x6e\xc6\xa4\xcb\xb5\xfd\xe2\xd3\x16\x9d\xa5\x23\x61\x56\xf2\xe5\x4f\x9a\xf8\x72\x59\xaa\x67\x2d\x0a\x3f\xd9\x04\x70\x0a\xba\x0d\xb1\x17\xdf\xf8\x0d\xac\x6b\x44\x99\x1b\xf6\x49\xff\x2a\x6b\x57\xa6\x2f\x79\x07\x42\xb4\xee\xcf\xd7\x62\x66\x29\x86\x77\x1c\x17\x68\x89\x4a\x94\xba\x83\x6c\xd1\xb3\x55\x14\x16\x35\x1a\x99\xe2\xdc\x90\x53\x05\x7e\x27\x6d\xef\x3c\x0f\x41\xe5\xcf\x90\x88\xb9\x7d\x99\x1a\x7c\x30\xcc\x91\xaa\x37\xa4\x68\xe2\x54\x18\x16\xca\x6b\x02\xb0\xab\x0a\x2d\x2f\x31\x2d\xc4\x94\x87\x9f\xf2\x42\x90\x27\xde\x57\x57\x38\x16\x93\xcf\x42\x54\x55\xae\x68\x92\x81\xe5\x54\x51\x89\xd3\x8a\xb6\x7c\xd9\x0a\xfc\x02\x50\x70\x13\x67\xa5\xe2\xa5\xa2\x1a\x8a\x2d\x25\x7e\x0d\xad\x9a\x20\xf8\x13\xc8\x2d\x02\xc1\xa8\xae\x04\x37\x2b\x05\x88\x7d\xc4\x7a\xcb\x9c\x91\x74\x72\x23\xfa\x4e\xe2\xa4\x93\xe3\x72\x95\xd6\x6c\x5d\x9f\x05\x24\xbb\xe2\xe6\x73\x94\x9b\x6a\x6b\x75\xae\x62\x9a\x1c\x32\x2c\x05\x3c\x43\x8e\xdf\xc5\x31\xc3\x86\x56\x4f\x6a\x4b\x48\xcd\x12\x2a\x2d\xa3\xbb\x8e\x95\xd5\xe3\x66\x59\xd9\xe3\xeb\xe8\x30\x6a\xcf\x3c\x15\x40\x0e\x1e\x20\xbc\x27\xcd\xa4\x34\xcf\xb7\x14\xf0\x84\xf8\x35\x89\x56\xbb\x50\x2b\x80\x00\x7e\xad\x26\x74\xd8\xbc\x8a\xd3\x16\x58\x52\x9c\xea\x38\xb6\x8e\x56\xf1\xd9\xba\x5a\xca\x90\x0d\xb4\x9f\xb0\x4c\x92\xe5\xf9\xab\x57\x7b\xa8\xc4\xcf\xbb\x39\x5a\xe2\xd1\xb8\xb3\xd7\xcd\xbb\xdd\xa5\xec\x57\x7a\xa6\x26\x68\xc7\x7d\x07\x6e\xaa\x09\x1a\xb8\xef\xa4\xcf\xaa\xa0\x9b\x1c\xdf\x4f\x8a\xc4\x81\x4e\xd1\xe6\x66\x99\x20\xaa\xd5\x6d\xe0\xf0\x69\xa7\xf3\xec\x71\x95\xad\x6a\x54\xfa\x0c\x73\xd7\x76\xf6\x51\x1c\x08\x20\x57\xd9\x29\x2c\x32\x74\xa4\x07\xcf\xda\xad\x5c\x5d\xfb\x5b\x4f\xed\xeb\xe1\x45\xda\xb3\x9b\xae\x23\x16\xb5\xdb\x8d\xd3\x06\xcf\x28\xe2\x94\xc5\x5c\xd9\x5a\xd6\xd1\x95\x42\x4d\x56\x27\xa0\xb9\x55\xea\xfa\x38\x52\x52\x06\x11\x5b\x91\x80\x30\x9d\xa2\x14\x15\x2a\xdc\x49\x89\x53\xe0\x5f\x74\x17\x19\x2e\x1d\x0f\x6a\x71\x8d\xff\x11\x53\xaf\x65\xb4\x97\xc8\x41\x4f\x70\x21\x93\x4a\x2b\xee\xa7\x44\x33\xfb\x26\x4f\xe7\xa4\x44\x37\x78\xe9\xde\xd1\x71\x86\x24\x22\xba\x49\xbe\x14\xbd\x49\x46\x52\xe6\x68\x15\xa7\xb8\x7f\x30\x7d\x39\xd1\x14\xc7\x74\x6b\x2b\x51\x87\x77\x32\x9a\x8e\x6d\xb9\x05\xbe\x71\x0c\x31\xd1\x1c\xdf\x48\x4b\x50\x74\x8b\x4d\x46\xa4\x6b\xdc\x3f\xb8\x7e\x79\x7b\x70\x6d\x1b\x59\x8c\xae\x9d\x46\xee\x3d\x8f\xec\x79\x82\x2e\x71\xff\xe0\xf2\xe5\xbd\xee\xfd\xd2\x56\x9c\x8f\xee\x47\x97\xe3\x71\xd2\x29\xd4\x06\xce\xd1\x3d\x9a\xa1\x5b\xb4\xd9\x4f\x56\xb9\xf6\x4d\x96\x69\x96\xec\xa3\xd9\x8c\x6d\xf7\xa9\x65\x3a\x7d\xa9\x89\x94\xe4\xd8\x1d\x01\xc2\x1c\xbd\x44\x4b\x5c\x54\x97\xba\xac\x2d\x75\x6a\x10\xa0\x14\x99\x77\xfe\x88\x97\xe8\xe9\x9e\xd8\x82\x59\x4d\x92\xa3\xa3\x67\x0f\xba\x0c\xcd\x6c\xf1\xe7\xa2\xf4\xac\xa2\xdd\xd3\x0e\xed\xa6\xd4\x60\x07\xca\xdd\xb8\x86\xf8\x89\xf2\xfb\x29\x4d\x2c\x64\xd0\xd7\xa9\x41\xa1\x19\xca\xd0\x0d\xda\xdc\x9c\x00\x4c\xc5\x2b\x93\x05\xa3\xb4\xa2\x20\x68\x7d\x67\xff\x69\xd2\xed\x6e\x06\xa4\x42\x82\xea\xac\x70\xc2\x7f\x8d\x17\x68\x8a\x4a\xe4\x9a\xab\x3f\x7f\x8c\x54\xf0\xcf\x6f\xf0\xb8\xc1\x59\xf6\x25\x79\x45\xd2\x49\x03\x92\x3c\xd7\xfb\x61\x50\x11\xa3\x5e\x91\x6b\x9a\x83\xd4\xf6\x67\x56\x2c\xa5\x6d\x7b\x45\x2e\x2b\x3d\x68\xa5\xd1\xbc\x33\x85\xdd\x4a\x4b\x8d\xf2\x51\x72\xb7\xf1\x93\x23\xef\x68\x77\x55\xf8\x0e\x79\xc7\x23\x32\x8e\x56\x19\x60\x49\xb8\x2b\xe9\x28\xd1\xe6\x66\x2e\x48\x09\xb9\x67\x7e\x6a\x8f\x03\x6b\x28\xf9\x32\x10\xba\x6e\x92\xa5\x65\xe9\xa4\xc1\xd6\x52\xb2\x47\xf3\x5e\x3b\x23\x0a\xf8\xb8\x4a\x51\xee\x97\x5b\x19\xa3\x13\x01\x66\x5b\xa4\x13\x32\xcc\x11\x67\xcb\x92\xd3\xfc\x7a\xc8\x56\x9d\x08\xba\x8f\x30\xd8\x43\xbb\xe3\xd1\x31\x10\x50\x65\x06\x23\x32\xc6\x54\xc6\x49\x32\x52\xd1\x8a\xe3\xb0\x3f\x0d\x95\xde\x89\x20\x2e\xd3\x3b\x81\xe8\x3b\x1c\x58\x69\x83\xea\xe4\x9e\xa6\x3b\xcf\x9b\xcb\x19\x05\x87\x44\x4e\x3a\xf0\x0d\x66\x3d\x33\x41\x94\x62\xd6\xd3\x53\x14\x68\xdb\x4e\x91\x83\xeb\x8d\xd8\x6f\x27\xb1\x3b\xd7\x24\x41\x32\x5b\xe1\xa6\x71\x99\x2c\x1f\x97\x77\x71\x64\xb4\x2a\x70\x35\x1d\x54\xf5\x2e\x41\xa9\x17\x45\x65\x92\xac\x56\x62\x5c\xd0\x65\xd3\x94\x97\xd5\x29\x83\x18\x0b\x65\x38\xa6\x78\x69\xe6\xbd\xf4\xe6\xbd\x34\xf3\x46\x8f\x8e\x5e\xa5\x67\xf4\xa7\xb0\xf6\x1c\x32\xeb\x35\xe7\xaf\x76\x95\x4b\xfe\xb3\xe3\xee\x31\x80\x7b\x99\xa0\x81\xc3\x57\x7e\xac\xc5\x63\x01\x6b\xf5\xab\x8c\xf4\x4a\xb0\xce\x71\xb3\x85\x02\xd7\x76\x4d\x78\xcc\x93\x83\xed\xc1\x26\xc6\x45\xb7\x4b\x03\xfe\x5c\xc5\xd6\x00\xa5\x09\x62\x4a\x9e\xd5\xed\xc6\xfa\xa7\xd8\xbd\xa9\x66\x5c\x5f\x3c\x66\x40\x56\x27\x92\x9c\xcb\x2d\x35\x78\xd6\xbf\xe6\x5a\xb0\x48\xa7\xec\x4d\xe9\xf4\x0d\x5c\x2e\x5a\x85\x93\xfa\x4b\x45\x3e\x2f\xc8\x84\xbf\x71\x14\x1b\x71\xf4\xb6\x52\x47\xba\xa0\xff\x2f\x2d\x6b\x8c\x12\x40\x44\x1a\xed\x3e\xe6\x8b\x57\xbf\x39\x9c\x49\xf9\x97\x87\x9a\x54\x85\xf1\x33\x17\x66\xe1\x5e\x58\x8f\x39\xed\xfd\x90\x6e\x2f\xd2\xeb\xd3\x74\x4e\xfc\x9e\x43\x3c\x44\xae\x88\x94\x41\x03\x91\xe2\xaa\x9b\x9c\x71\x84\x59\x7d\x50\x3d\x49\xd2\x79\x62\xd4\x53\xb3\x0a\x3d\x83\x6e\x5c\x1a\xf4\xcf\xf1\x4c\xb0\xfe\xb9\x54\x12\xa9\xc0\x3a\x37\x68\xa9\x54\xa3\x82\x4a\xad\x1b\xe9\x2a\xc2\x15\x0e\x48\x3c\x6b\x65\x4c\x53\x27\xd0\x8b\x6a\x7d\x22\x76\x41\xa6\xd8\x55\x75\x78\x2e\xa0\x06\x32\x6f\x25\x77\xe8\x58\x29\xad\xe5\xb0\xd7\xe8\x6a\x69\x89\x8e\x14\xbf\x8b\x8b\x16\x91\x44\xd9\x20\x92\x28\x7c\xa6\x36\x0d\xb0\xb2\xd4\x4f\x75\x47\xdd\xa9\x55\xe5\x13\x96\xc4\x60\xae\x0a\xe5\xf9\xba\x7c\x51\xee\x4c\xcd\xaa\xd9\xbd\xad\xdb\x49\x75\xce\x52\x8a\x52\x95\x7e\xb4\xb0\xd6\x0c\x8f\xc9\xa1\xbc\xb6\x7c\x44\x57\x73\xe1\xcc\x75\x46\xd0\x01\x10\xed\x66\x36\x21\x02\x29\x77\x8c\xf8\x9c\x3e\x72\x60\x5c\xa8\xea\xe8\x26\x2d\x8f\x6e\xd3\x4c\x23\x5a\xaa\x90\xa2\x47\x94\x54\x1c\x64\x45\x79\x39\x9a\xc2\x31\xcd\xab\x52\xa7\x75\x37\xc4\xfa\x81\x37\xed\xba\xa6\x0c\xd2\x00\x40\x9c\x48\xe9\x24\x97\xf2\x53\x60\xc1\x4a\x9c\xaa\xc9\x6f\x0f\x0e\xca\x57\xb8\x7f\x50\x6e\x6f\xeb\x8b\x31\x1d\x95\x63\xc1\x20\x34\xdc\x13\xe2\x73\x02\x27\x55\xb6\x29\x2e\x8c\x25\xda\x1c\xa8\x3b\x23\x13\x77\x86\x63\xfd\x99\x6d\x0d\xd0\x24\x41\xb9\xbd\x2c\xf4\xcf\xd1\x72\x8c\x27\xce\xac\xbf\xee\xba\xa0\x95\x59\x2a\x1e\xb3\xf3\x31\x8e\xba\x52\xc2\xa0\xa3\x63\x41\x18\x33\x92\x20\xf1\x85\xe6\xb7\x84\x41\xe4\x2c\x19\x40\xcb\xf9\xa4\x32\xb6\x44\x48\x85\xd8\x92\x9f\x2c\xe5\xde\xee\x25\x5c\xdd\xc6\x4a\x89\x56\xc7\x09\x2f\xbe\xfe\x02\x09\xb1\x1e\x55\x03\x0c\xc5\x1e\x74\xa8\xb8\x02\x65\x68\x1d\x85\xb8\x0a\x94\x2a\x1d\x95\xbd\x1d\xe3\x02\xd1\x80\x61\xc8\x3f\x40\x0c\xe3\xca\x54\x5f\x54\xcd\x3e\x26\xc5\x7c\x4e\xb9\xcb\xb0\x28\x1a\xfd\xaf\xad\xca\x76\x43\x7e\x68\x35\x63\xd1\xa2\x6e\x2f\x7a\x26\x7c\x1a\x66\xc8\xdc\x26\x38\x47\x85\xc7\xa3\x62\x8a\x0a\x5f\x01\x6f\xea\x45\xa8\xf8\x5e\x13\x36\x47\x97\x65\x9a\x45\x61\xcd\xbb\x3b\xa8\x8e\xd1\x10\x12\xc4\x8c\xc1\xdb\x3f\xda\xa0\xb3\x1e\x6c\x34\x14\xea\xf0\xb9\x92\xb1\xa8\x2c\x34\xa6\x74\xba\xad\x20\x22\x43\xd3\x45\xe2\x53\xdd\xa6\xee\x3b\x61\xd4\x6a\x8d\x60\x61\xa6\xd4\x6c\x72\x94\x1d\xb0\x07\x94\x86\x04\x6a\x83\x42\x54\x3f\xb3\x41\x3f\x2a\xf5\xaa\x0e\x6c\xe2\x6a\x54\x7f\x95\x27\x46\x90\x10\x45\x46\x7a\x34\x9f\x15\x71\xf4\xb1\x24\x1b\x7f\x9f\x14\x39\x27\x9f\xf9\xdf\xd1\x46\x9a\x4f\x37\xfe\x2e\x70\xd2\xcb\x45\xca\x6f\x5e\x25\x7f\xdf\xe0\xc5\x06\x84\x2b\x02\x52\x7a\x83\x93\xf9\x22\x4b\x39\xe9\x45\x09\xe2\x71\x24\xde\x45\x52\xf5\xfa\x33\xfe\x15\x76\xf2\xdf\x5a\x54\xb0\x5a\x01\x5b\xca\xe8\x57\x4a\xb3\x56\x4c\xd2\xcc\xe7\x3d\x8d\x48\x89\xe2\xfe\x01\x7d\xa9\xaf\x9a\x03\xaa\x35\x66\x05\xce\x47\x74\x8c\x52\xcc\x47\xc5\xf6\x60\x0c\xec\xb4\x20\xfc\x24\xd2\x2c\x54\x1c\x66\xd9\xf2\x28\x1d\xe3\x72\xd5\x10\x0a\xa6\xd9\x25\x13\xc6\x68\xec\x57\xa1\x25\x89\x35\x17\x19\xe5\x71\x24\x00\x50\xf8\x8f\x29\x2e\x46\xfd\xb1\x34\x12\x82\x90\x56\x03\xc1\xd7\x83\xbd\x92\xbd\xa8\xb4\xed\xb1\x04\x1d\xc6\x38\x3d\xe4\xb2\x8c\x14\xf3\x0c\xf3\x51\x3a\x3e\xe4\x58\xfc\x37\x14\x24\x57\x6a\xae\x8e\xe8\xdf\xa3\xa4\xdb\x5d\xca\xef\xe2\xbf\x61\xcc\x9d\xb1\xda\x36\x50\x89\x69\x82\x04\x89\x38\x5d\x4e\x48\x53\xb2\x3a\xc9\xaa\xac\x4c\xf0\x27\x65\x85\xf2\x62\x1d\x09\x07\x7d\x44\xd6\x5d\x93\x85\xcb\x2f\x39\x30\x49\xe4\x6e\xe3\x6f\xd6\x19\x44\x06\xc9\xfc\x39\x76\x63\x4e\x68\xae\x2f\xe0\x2a\x96\xca\x90\xb4\x89\xcd\xc9\x67\xb1\xed\x37\xdb\xcf\x54\x24\x35\x56\x1f\xd3\xe0\x46\xb9\xc4\x45\x48\x17\x97\xa9\xd7\x0e\x2c\x72\x79\xd7\x1b\x08\xd0\x04\xcd\x04\xf5\x00\x57\xb8\x8a\xc2\x11\x97\x68\x99\xa0\x1b\x9c\xea\x8e\xe3\x99\x1b\xa4\x03\xac\xc2\x6e\x3c\xc2\x72\x81\x6f\x34\xdd\x39\xc7\x53\x4d\x63\xa0\x5b\x87\x8c\xb9\xc6\x55\x82\x6d\xae\x05\xb9\x9b\x83\x04\xdd\xe3\xdb\xea\xbe\xbc\x06\xba\x43\xea\x63\xe5\xbb\x5b\x49\x33\xdb\x17\x49\x82\xae\x2b\x84\xd7\xbd\x7e\x05\x4b\x77\xeb\xca\x2b\xf5\x21\xbe\xd2\x72\x61\x25\xb8\xbc\xad\x46\x20\xd1\x92\xe2\x89\x2b\x29\x86\xd5\xbb\xc3\x93\xd1\xe5\x18\x1d\xe1\x6c\x74\x27\xce\xf9\x67\x39\x6c\x75\xce\xef\x92\xce\xd5\xe8\x68\x8c\x3f\xaf\xe8\x2c\xbe\x4f\x74\x7f\xe7\xb8\x7f\x70\xfe\x52\x4f\xf7\xe0\x5c\x37\xf6\x1a\x9f\x6f\x0d\xd0\x19\xbe\x1f\xcd\x47\xe7\x63\x1d\xf4\x64\x13\xe3\xb3\x6e\x57\xce\x21\x7e\x8d\xce\x92\x95\xfc\xed\x0c\xf0\x4a\x7b\xda\x58\xbf\x1b\xb8\x60\x16\xfa\xf6\xfe\xcb\x1a\x06\xd9\x8e\xed\x88\x0d\x62\xbe\x9e\x41\x81\x9b\xf0\xc2\xc6\x16\x76\x92\x38\x38\xc7\xf7\xe9\x5a\x1e\x55\x9e\xd7\x93\xbc\x3c\x74\x62\x01\xc8\x1c\x62\x25\x2f\xfa\xc4\xe6\xf5\xa0\xf1\x80\x67\xb5\xbe\x15\x39\xda\xef\xbf\xc4\xa9\x1d\xa7\xeb\x76\xd2\x42\xbc\x69\xf7\xb5\x13\x5a\x7a\x36\xa7\x4f\xf7\x03\x2e\x6c\x50\xc8\x29\xf3\x58\xfc\x18\x8f\xd2\x75\xc2\x8a\x6b\x41\xa4\x0d\xa6\x9f\xab\x08\xd0\x72\xfa\x89\x1e\xd5\x31\x27\x73\x19\x08\x19\x51\xa5\x96\x70\xfc\x78\x60\x0f\xfc\x5b\x48\xce\xa8\xa8\x4c\x7d\xd5\x89\xae\xcf\xe9\x55\x46\xf3\x6b\xcc\x05\x4b\xa8\x02\x63\xfe\x1b\xb4\xf0\x9f\x6d\xc6\x4b\xaa\xc1\x45\xca\x48\x2e\x63\x70\xaa\x36\x75\x6a\x3d\x63\x6d\x83\x59\x6b\x1e\x25\x68\x40\xc9\x6a\x9a\x6c\xee\x6d\x2f\x20\x13\x35\x61\x3f\x1b\x8a\x43\x81\x95\x4a\x92\xd8\x56\x50\x7c\x77\x03\x7f\xb9\xb1\x40\xff\x13\x60\xf0\x5f\x8f\x06\x59\xa9\x43\x40\xc6\x9f\xf8\xbf\x3d\xe9\x5c\x15\x7c\x6c\xce\xb9\xcd\x53\x6e\xe6\xf3\x1f\x55\xc6\x94\xf8\x43\x04\x07\x45\x62\xc7\xa0\xe4\x1b\xba\x2b\x29\x03\xd0\x31\x60\x80\x3f\xb5\x1b\x4b\x26\x9a\x0a\x24\xfc\x70\xbd\x19\xd3\x4e\x81\xd3\x95\x15\x74\xfe\xb7\x9f\x42\xa0\x3e\x1c\x56\x19\x4e\xee\x0f\x87\x62\xa6\x87\x23\x38\xf7\xca\x70\x74\xde\x0f\xf0\x37\x87\x34\x28\x6e\x30\xff\xa2\x43\x71\xe1\x8c\x85\x00\xed\x2f\x68\x45\x3a\x8b\x37\x4d\xee\x74\x88\x6a\xb3\x19\x3a\xe7\xda\x3c\x48\x8d\xf6\xf4\x3c\xe6\x28\x2a\x6f\xaf\xa3\xa4\xc3\xd9\xfd\x17\x0d\x8c\xd7\xd3\xdf\xd3\x09\xc9\x39\xc4\x1a\x88\xae\x00\x34\x90\xd6\x22\x7a\x39\xa1\x6c\x92\x91\x57\x2f\x9f\xa8\x1f\x51\xb2\x9a\xa4\x7c\x72\x23\x30\xc4\x6a\x46\xf3\x34\xcb\xee\xf5\xa2\x0a\x2e\x9d\x49\xf7\x4d\x31\x79\xed\xdc\xf9\xf0\xc0\x24\x80\x60\x92\x56\xf0\xfd\xf1\xc3\xb1\xa8\x40\x56\x2b\x30\x68\xb0\xb3\xd1\x98\xc7\x1b\x7b\x1c\x4d\xe9\x6d\x14\x8c\x3f\xe1\x70\x3d\x3f\x2a\x62\x87\xbd\x72\x24\x84\x04\x64\xaa\xe1\x4c\x05\x87\x55\x98\x10\x33\x82\x60\x2d\x0e\x49\x4b\x4d\x37\x44\x22\x54\x1d\xf2\x2a\x30\xf2\xaf\x6c\xa0\x41\x7d\x04\xda\x93\x77\x67\x1f\x8e\x8e\x7f\x3e\x3d\xfb\xe9\x3f\x8e\xde\x5c\x80\xa2\x48\x5c\xb3\xa7\xe9\x9c\xf4\x78\xf1\x71\xb1\x20\xec\x4d\x5a\x8a\x6b\x4c\xed\xcd\xe8\x65\x79\x7b\xfd\xea\xa5\xe8\x88\x5e\xe7\x92\x2e\x79\x15\x6d\xb1\xad\xe8\xe5\x13\xff\xe5\xcb\x27\xa2\x64\xd4\xe1\xd2\x16\x53\x0c\x10\x17\x70\x6f\x3a\xcb\x6c\x7f\xae\x8c\x57\x49\xaa\x3a\x51\xad\xd6\x5b\x49\x2b\xad\xac\x6a\xab\xed\x5b\x31\xd8\x92\x88\x62\x10\x47\xcb\x14\xf4\x45\x03\x02\xe0\xd5\xd3\x0f\x82\x90\x02\x89\x23\xef\x44\x64\xf9\xcf\x98\x83\x64\x61\x15\x53\x24\xb6\xe6\x2a\xe6\x82\x16\xd7\x6c\x37\x73\xf4\x20\x8a\x1d\x37\xdb\xae\xdb\x0d\xd1\x18\xc1\x9d\x0c\xc7\xdf\xce\x3d\x82\xc9\x44\x26\x0b\x52\xf3\xa1\x94\xe9\x57\xa3\x04\xed\x60\x8c\x79\xfd\xc0\x25\x5a\x6f\xa3\xed\x41\xfb\xab\x98\x24\x87\xdf\xe2\xea\x67\x82\x79\x26\xbd\x65\x49\x32\x52\x96\xca\x8f\x0b\x9b\x70\x57\xca\xaf\x2b\x8a\xbe\x32\x62\x64\xfb\xc1\x92\x38\x0e\x4e\x55\x9e\x04\x28\xc1\x47\xce\x86\xb6\x7e\xc2\x9b\x03\x54\x60\x76\xc8\xc0\x7f\x8f\x16\xcb\x52\x6d\x85\x21\x57\x49\x7e\x69\x36\xed\x14\xdd\x6e\xb1\x41\x95\x09\x65\x31\xdb\xb8\x20\x9f\xa5\xca\x71\xb3\x5f\x49\x4a\x25\xd5\x8f\x3e\x28\x10\x4b\xb4\x8b\xfb\xd7\x8d\x50\xc7\x10\xeb\x76\xfd\x6b\x20\xd0\x47\x82\x52\xb5\xf5\x86\x92\x86\x61\x04\x47\x37\x9c\x2f\x86\x4f\x9e\xdc\xdd\xdd\xf5\xee\x76\x7b\x05\xbb\x7e\xb2\xd3\xef\xf7\xc5\xb1\x8a\x3a\xd5\x90\xde\x4c\xa5\xbf\x20\xf8\x8b\x77\x98\x87\x03\x34\x25\xe5\x64\x38\x40\x9c\xf2\x8c\x0c\x07\x2b\x44\x49\x85\x2b\x01\x73\xbd\x83\x51\x74\x15\xa1\xe8\x8a\x5e\x8b\xbf\x59\x31\xf9\xf4\x8f\x65\xc1\x89\x78\x28\xa6\xf7\xe2\x3f\x16\xa1\x68\x02\x34\xa1\xf8\x51\x4c\xc5\xb7\xa9\xd8\xaf\x62\xbb\xa3\x68\x9a\x89\x3f\x1c\x12\x56\xa8\xac\x15\xe2\xe3\xcd\x40\xfc\xd9\x11\x7f\x76\xc5\x9f\x3d\xf1\x67\x5f\xfc\x79\x2a\xfe\x90\x14\x0a\x89\x26\xa9\xf8\x37\x17\xdd\x67\x14\xfe\x80\xc6\xd4\x88\x55\xa3\x39\xe1\x69\x84\xa2\xbc\x80\x91\x14\xa2\xbb\x85\xf8\xc7\xc4\x40\xd8\xf2\x4a\x0c\xb2\x14\xff\xe6\x69\x26\x3e\x96\x8b\x54\x54\x2b\x39\x2b\xa0\x99\x92\x33\xfa\x49\x94\x2d\x97\x57\xf0\x57\xd4\x06\x51\xb5\xf8\x5f\x0c\x7c\x29\xfe\x89\xaa\xb7\x29\x8b\xc6\xc1\xa4\x04\x7a\x4d\x21\x56\xf6\x40\x11\xc0\x05\xc1\x4f\x46\xbf\xf1\xed\xdf\xd8\xc6\x6f\x9f\x5f\xf7\x7f\x5b\x0e\x9e\x3e\x17\x7f\x9f\xf7\x8f\x7e\x5b\x8a\x35\xdb\x86\xff\x5e\x8b\xbf\x3b\xcf\xe1\xef\x0b\xf8\xfb\x4e\xfc\xdd\x7f\xf7\xdb\x72\xb7\xdf\xef\xff\xb6\x7c\x77\xf4\xee\xdd\xf8\x09\x4a\x09\x8e\x96\x39\xe8\x65\xc8\xd4\x9a\x4f\x4e\x8b\x09\xdc\x72\xd2\x02\x5a\x3f\x49\xbb\x2b\x82\x2a\x86\xd8\x75\x4e\x4c\x57\xd0\xb4\x23\x58\x1f\x7d\x94\xbb\xd0\xfa\xdf\xb5\x1b\x36\x54\x2b\xd4\x3c\x77\x97\xfe\x67\xaf\xe3\x20\x96\x5c\xa1\xca\xfb\x50\xb0\x73\x94\x03\x32\x3d\x04\xcf\x3e\xf7\x4a\xc5\x82\xbe\x78\x78\x00\x92\x47\xdc\x80\x10\x67\x71\xc4\xf5\x45\x38\x4e\x86\x31\xc3\xee\xd7\xcd\x41\x82\x58\xb7\xbb\x29\xd1\x0f\xac\x62\x63\xee\x0e\x39\xac\x8d\x74\x23\xda\x22\x5b\x91\xc0\x1f\x74\x4a\x36\xd2\x7c\xe3\xfc\xd7\x9f\x37\x94\xdc\x30\xf2\x33\x83\x86\xa7\x7a\x7a\x1e\x33\x82\x88\xaf\x99\x6f\x80\x0a\x49\x5a\xf3\xe4\x89\xab\x88\x54\x30\x16\x5c\x5b\xbc\x05\xdf\xaa\x7a\x1a\xdf\xfa\xf1\xd3\x6b\x58\xde\x5a\x03\x7a\xdd\xe4\x90\xde\x08\x2e\x4f\x82\x72\x71\x69\x6a\xf3\x53\x08\x65\x58\xc1\xbe\xc4\xc1\xbe\x36\xa4\x08\x4f\xc8\x63\x97\x1f\xb3\xf4\xbe\xac\xad\x1d\x36\xb8\x8b\xc0\x45\x35\x05\xb1\xa4\xed\x3e\x05\x23\x29\xd5\x68\x6d\x90\x1d\x87\x6e\x09\x6c\xde\x4e\x05\x00\xa9\x00\x40\xba\x66\x67\x69\xb5\x33\x44\xbc\x2b\x20\x95\xe0\x2b\x71\x71\xe8\x51\x30\x43\x97\xe6\xe9\x78\x24\x0b\x41\xa5\xca\x68\x2b\x97\xec\xe2\xb1\x64\x81\x95\x1d\x76\xe1\xa7\x0d\xf4\xd6\x7d\xdd\x36\x8c\x93\xb7\x92\xbc\x1c\xd4\x12\xb6\xb0\xef\x8c\xb5\xf7\x2d\xb1\x19\x2a\x87\x2d\x9c\xec\xa3\xfd\x7c\xca\xb4\x1f\x79\x9b\xf1\x96\x3e\x35\xb5\xc4\x0b\xbb\xc1\xc4\x0b\xbb\x6e\xe2\x85\x5d\x15\xe4\x58\xd0\xff\x6e\x17\xa7\xe7\xe2\x5c\x21\x96\x0c\xfd\xf7\xea\x50\xb3\x55\x2c\x25\x31\xb5\xfc\x1e\xcc\x24\xbb\xca\x31\x27\x71\x2a\xa8\x58\xc1\x99\xca\x9f\x88\x81\xe3\x73\x28\x31\x48\xbe\x4a\xe2\x92\x3c\x3c\xc4\x25\xb1\x59\x0a\x33\xf2\x4d\x71\x22\x1c\xe2\xd1\x5c\x2e\x1c\x39\x26\x5f\xd2\x41\xac\x39\x69\x7d\xdb\xa2\xb6\xae\x44\x10\x5a\xb9\x3a\x61\xe1\x6a\x32\xbc\xac\xf7\x3d\x96\x6b\xae\x4e\x74\x20\x27\x85\x71\x9a\xf3\x93\x7d\x22\xe6\x1e\x59\x77\x9d\xdc\xa4\x2b\x99\xa4\xc8\x26\x44\xfc\x9a\x10\xb5\x4c\x13\x35\xeb\x19\xc1\x13\xa2\xd6\x6b\x42\xc4\x82\x75\xbc\xac\x2c\x33\x59\xfb\x86\xe0\x32\xb8\x90\x9d\xf0\xf2\xde\xc8\x6a\x53\x82\x47\xd1\xef\xe9\x6d\x5a\x4e\x18\x5d\xf0\xa1\x20\x69\xae\xf4\xef\x31\x5a\x88\xcf\xaf\x23\x14\xfd\x74\xf6\xf6\x6f\x11\x8a\x4e\x8e\x4f\xff\x12\xa1\xe8\xf8\xfd\xcf\xe2\xef\xbb\x0f\xaf\xdf\x1f\x89\x8f\xaf\xcf\xc5\x7f\xef\xce\x3e\xbc\x8f\xc6\x68\x2e\xea\x1c\xbd\xff\xe9\xe8\x6d\x34\x46\xb7\xe2\xe1\x86\x91\x99\xa0\xa3\xd8\x44\x50\x87\xe9\xe4\xd3\x35\x2b\x96\xc0\xc0\xa4\x30\x98\x68\x8c\xae\x45\x39\x51\x60\x6c\x25\x40\xf7\xc4\x3d\x97\xa0\xfa\x27\x46\xd1\xc3\x1d\xd6\xeb\xca\x2b\xa8\xef\x10\xf2\xf0\x70\x4f\xe2\x85\xb8\x4f\x93\x6e\xf7\x9e\xc4\xb7\x70\x76\x4d\xad\x4b\xaf\xd6\x86\x0d\x2a\x1b\xdf\x93\x78\x2e\xaa\x41\xad\x6b\x51\xc8\xa9\x76\xe7\x57\x53\x7d\x3f\x3c\xa8\xe6\x9c\x70\xba\xa4\x6a\xcb\xa9\x7d\x0c\xe5\x00\x0d\x37\x03\x34\xcb\xe7\xd8\x0a\x3e\x72\x13\x1a\xb2\x43\xe1\xd2\x0c\xb2\xeb\x43\x93\x5b\xb5\xc0\x77\xca\x4e\xe4\x8a\xc4\x54\x70\x21\x5f\x3c\x2e\x64\x52\x64\xef\x0a\xf6\xf1\xc3\x89\xf2\xc7\xb9\x27\xf1\x94\xa0\x54\xf7\x17\x2d\xf3\x32\x9d\x91\x61\xb4\xa5\xb5\xb5\x02\x36\xa2\x9d\x43\xe7\xd3\xb0\x70\xa2\xfd\x12\x8f\xe6\x02\x96\x38\xed\xa8\xbb\x77\x83\x24\xb9\x38\xdd\x38\x5a\xb0\x62\x11\xb9\xf1\x2a\x78\x8f\x17\x27\xc5\x9d\x9e\x41\xa7\x84\xe2\x82\x5a\x93\x65\x51\x8e\x4b\x49\x89\xa5\x9c\x33\xf1\xc8\x35\x2d\x24\x0b\xa8\x2c\x17\x51\xc9\xef\x33\x02\x2c\xa1\xdf\xe2\xc3\x03\x78\xd9\x2b\x78\xa1\x02\xe7\x28\x4e\xf1\x39\x19\x51\x1f\x76\xe3\xa4\xdb\x4d\x47\x85\x5f\x79\x2c\xf6\x89\xe9\x3c\x41\x5f\x4c\xd2\xa9\xe9\x30\x47\x02\xe9\x0c\xd9\x0a\x6e\xe3\x73\x82\xbf\x1c\x9f\xfe\xf2\xf1\x62\x28\x78\xa8\xf9\x70\xb3\x8f\xd2\xa5\x80\x33\x63\x82\x93\xda\xec\x23\xc1\x93\x0c\x37\xfb\x2b\x74\x7e\x74\x72\xf4\xc6\x96\x5b\xa1\xb3\x5f\x2e\x8e\xcf\x4e\x9d\x17\x17\x47\xff\x75\xf1\xfa\xc3\xd1\x6b\xe7\xd5\xc9\xeb\x9f\x8e\x4e\x9c\xe7\x77\xc7\x47\x27\x6f\xcf\x8f\xdc\x66\x4e\x8e\x7e\x3e\x3a\x7d\xeb\xb6\x0b\xe2\x1d\xe7\xc5\x4f\x1f\x2f\x2e\xdc\x8e\x56\xf6\x64\xbd\x26\x55\xf9\x89\x86\x18\xc5\x5f\x94\x3c\x7e\x48\xc0\xe4\xd8\xb3\x3c\x66\x2b\xe9\xce\x55\xa3\xac\x4d\x7e\x45\x20\xff\x10\x55\xdc\x0e\x56\x1b\x05\xec\x83\xc0\xfa\xb5\xc4\x85\xcd\xe5\xa5\xe9\x16\x09\x70\xd0\xf3\x42\x03\x82\x7c\x19\x06\x88\x52\x75\xf4\x12\x87\xda\xf9\x20\x71\xba\x18\x56\xe8\x32\x8f\x23\x58\xa6\x48\xa2\x83\x48\x83\x1a\x9e\x93\x6e\x37\x02\x0d\x06\x18\x16\xaf\x6a\x4d\xbf\x6f\x6f\x3a\x92\x0b\xa9\x0c\xaf\x23\x41\x11\x4e\x38\x70\x61\xa1\xc6\xde\xaa\xc6\x9c\x57\x17\xea\x3a\x52\x13\xb6\xa7\xeb\x8c\x54\xdc\xba\xd5\xbc\xc1\x83\xf7\x17\x22\x58\x7f\xf0\x9f\x14\xbf\x60\x3b\x7e\x0a\xa4\x92\xb6\x0e\xf4\x64\xd5\x09\xa4\xcd\xfa\x24\xf1\xff\x9b\xc6\x0b\xfd\x9f\x48\x86\x79\x29\xe8\x1d\x21\xf5\xa9\xb8\x68\x35\x82\xdc\xac\xf2\x1f\xd6\xf3\x9e\x62\x19\x84\x1d\xcc\x95\xcc\x5e\xec\x90\xde\xe5\xa5\x77\xdb\x53\x90\x8d\xae\xda\x82\x4b\x8b\x3e\x49\x82\xaa\xe6\xe9\x10\x30\x5e\x1d\x04\x30\x53\x17\xbd\x74\x6c\xd2\xe8\x1a\x81\x40\x93\xa1\x4f\x89\xc4\x54\x9b\x97\x7c\x82\x1b\xbb\x21\x49\xd9\x1b\xb9\x0c\x17\xcd\x74\x55\x7b\xf8\x04\xc4\x9c\x10\xe3\xfa\x58\x89\x93\x8c\xf9\x37\xc6\x2f\xab\x2f\x8e\x5c\x0d\xae\xa3\x69\x4b\xd5\x2b\x47\x0a\xdc\x3a\x21\x9f\x0e\xb5\xed\x0e\x02\x6e\xce\x36\xe8\xfb\x50\xd7\x10\xef\xd8\x7e\xd4\x8d\xcc\x47\x81\xd6\xc7\xd8\x19\x0f\x41\x2a\x64\xbd\x72\x82\xa8\x2e\x50\xd2\x4e\xf7\x79\xc6\x58\x76\x1b\x38\xa1\x7b\x40\xbd\x63\x37\x1b\x3b\xe4\xd5\xd6\x04\xf7\x8e\x02\xe3\x4c\x86\xb5\xa2\x21\x60\x99\xdd\x82\x3e\xfc\x8f\x1f\x4a\x8f\x6c\xa9\xc0\xa4\xc0\x47\x02\x49\x53\x7b\x3e\xe4\x61\x04\x93\x44\x2b\xf5\x2c\xfd\x1c\x52\xa8\x80\x0c\x94\xf5\xbd\x50\x4d\xd3\xe6\x1e\xf3\x23\x12\x33\x94\x9b\x8e\xd4\xa9\xe7\x7e\x47\xb2\x41\xa7\x2f\xaa\x59\xa2\x0b\x92\xa0\x5f\xfe\x1f\x2c\x7f\x08\x2c\xdf\x90\x04\xbd\xff\x1f\x87\xa5\x62\xcf\x7c\xc4\xa3\x6e\x71\x74\x17\x7f\x1b\xba\xb1\x61\xd2\x51\x8e\xef\x20\xf4\xa5\x4e\xe5\xae\x90\x4b\x6e\xf7\xd3\xdb\x7f\x0d\x18\x18\x9c\xbc\x39\x90\xf9\xdb\x6b\x40\x31\x04\x09\x98\x9e\x7f\x0b\x12\xee\xe9\x26\x30\xe4\x22\x93\x00\xb0\x44\x24\xdc\x9c\xae\x67\x10\x79\x78\x30\x69\x43\x6c\x16\x40\x9b\x39\x0b\xa4\xd1\x2a\x0d\x60\x14\x0d\x43\x99\x40\x64\x19\x9b\x9b\x44\x0c\xf0\xf7\x46\x79\xb5\x17\xb0\xa6\xcc\x0a\x5e\x6a\x91\xf5\xc4\x1a\x64\x69\xb3\x0f\xa2\xcd\xb1\x74\xd4\x95\x85\x31\x5e\xc2\xf9\x8a\xf4\x58\x51\xf8\x89\xf8\xac\xe5\xc1\x37\xe6\xbe\xed\xfb\xc9\x7c\xb6\x06\x09\x92\xb6\x9a\x98\x81\x95\x66\x3e\xa2\x63\x3c\x73\x49\x42\x81\x0b\x40\x12\x62\xfe\x24\x10\x50\x32\xfe\x52\x92\x6c\x36\xe4\x2b\x99\x70\x58\xdc\x18\xa1\x60\x2a\x81\x2c\xbd\xfd\xe0\x48\xfb\xee\x48\xfb\x62\xa4\xcc\x19\x29\x17\x23\xcd\x71\xff\x20\x7f\x89\xf9\x41\xbe\xb5\x95\xb0\x51\x5e\x1b\x29\xab\x8e\x74\xd5\x69\x51\x09\x88\x59\x04\xb6\x9e\x40\x6d\xd9\xcc\x93\x8c\xc3\x3a\x8e\xfa\x63\xb5\x6e\x2a\x12\xce\x39\xc9\x66\x4d\xd6\x23\xd7\x84\xc7\xfd\x44\x17\x04\xb3\xb7\x46\x31\xa5\x34\x8c\x54\x65\xc1\xa2\xbd\xe9\x40\xc8\x92\x66\x68\x18\xe3\x99\xdc\x9d\x5c\xd5\x36\xf6\x7d\x4d\xe3\x32\x3b\x4e\x55\xb0\xd6\x72\x2d\xe6\x35\xaa\x84\xa8\x72\x45\xf3\x6a\x46\x57\xad\x8f\x51\x62\x48\x6e\xac\x0a\xeb\x0c\x80\x28\xd5\x47\xc4\x96\xaa\x02\xa6\xb1\xbd\x2a\x58\x1a\x0b\x06\x20\x40\x9c\x94\xb6\x2a\x7f\xaf\x2e\x1d\x9a\x3e\xb1\x06\x4b\xfa\x9b\x29\xef\x18\x55\xd6\x2b\xb8\x07\x5c\xc3\x37\x58\xc1\x07\xb0\x53\x0d\x44\xdb\x37\x34\x9b\x06\xca\xca\x1d\x6e\xb7\xa3\x4e\xbf\x5b\x43\x2e\x15\xd4\x52\x45\x2c\x49\x2d\x8e\x13\x01\x46\x96\xbc\xc2\x4e\xe3\x4a\x57\x6f\xb5\x4b\x1f\xd2\xfc\x9a\x28\x15\xd3\x4f\x1f\x7f\x1e\x6e\x4c\xa4\x9e\xe9\x9a\xf0\x8d\x7f\x93\x3a\xa6\x19\x2b\xe6\x1b\x60\xc7\x7a\xb0\x21\xeb\x63\x15\xfb\xd5\x6b\x33\x70\xb2\xc8\x58\x0c\xaa\x7e\xa3\xfc\x5f\x1d\x96\x37\x1e\x6c\xed\xdd\xe4\xe2\xfd\x2e\x99\xa2\xe3\x26\xc4\x6f\x2c\xe4\x65\x40\xc1\xa9\x8e\x84\x29\xdd\x03\xac\x23\x76\xad\x80\xe3\x98\x5d\x29\xe1\x07\x25\x6c\x6e\xc9\x2f\x67\x0b\x48\x35\x81\xcd\x21\x55\xfb\x52\x6b\x52\x5e\xc7\xa1\x1a\xea\x4b\xad\xc6\xd4\x84\x01\x78\xcc\xb3\xdc\x78\xe1\x84\x4e\x71\x6d\xa8\x2a\xac\x49\x12\x1c\xaf\xc9\xa4\x8f\x1c\xb7\x8a\x50\xb3\xb5\xf9\xf8\xcd\x56\x26\xe5\x36\xdb\x10\xd0\x34\x88\x81\x9a\x56\xd4\xef\xac\x69\x67\x84\x7a\xf5\x57\xb4\xb5\xd3\xca\xe2\x37\xf4\x19\xde\x4a\x15\x38\xaa\xe0\x0d\x75\xc4\xe6\x2c\xb2\x6e\x1f\x30\x15\x38\x45\x85\x23\xa8\x85\x57\x55\x3b\x12\x55\xd6\x53\x05\x58\x23\x81\x00\x6b\x90\x13\x1b\x62\xac\x59\x2f\xae\x3c\x59\x59\x3f\x93\xf0\x3a\xa3\x02\x87\x56\x18\xa5\xb8\x7f\x90\xbe\xa4\xba\xa3\x54\x77\x54\x62\x3a\x4a\xc7\x9d\x62\x94\x8e\x1d\x6f\x9c\xd2\x76\xa4\x1c\xe7\x1d\x48\x20\x95\xf9\x41\xb7\x95\x6d\x6d\x25\xcb\x51\x36\x96\x65\x8a\x7b\xc7\x1b\x66\x82\x5b\x77\x00\x9a\x35\x7c\xd7\x8b\x8a\x6e\x70\xff\xe0\xc6\x9a\xd9\xdf\xe8\x61\x4f\xf1\x6c\x74\x33\xee\x4c\x46\x37\xe3\x1e\x95\x95\xe2\xa9\x1d\xf4\x02\xaf\xb3\x0b\xd0\xbc\xb5\x58\x89\x6e\x71\xff\xe0\xf6\xa5\x8e\x27\x73\x70\xab\x7b\xbf\xc6\xf3\xd1\xed\xb8\xb3\x18\xdd\x8e\xb5\xf3\xd7\x75\xb2\xd2\x31\xfc\x5a\x2c\x3a\x34\x96\x90\xb1\xb7\x9d\xc0\xba\x0c\x93\x5a\xb4\x5d\x89\x97\x2f\x39\x4b\xf3\x32\x55\x6a\x40\x13\xb9\xb1\xda\x82\x26\xac\xab\x8d\x28\xdb\x6a\x16\x42\x4d\xac\x21\x51\x42\x53\x46\xb4\xb9\xca\x88\x76\x4d\xf8\xeb\x6a\xf7\x0d\x57\x7c\x75\x98\xaa\xfa\xdb\xb3\xf7\x4d\x35\xaa\x13\x10\x35\x40\x45\x5f\x33\x5a\xf1\x21\x43\xee\x36\x8e\x05\x5f\xd4\x8e\x6e\x9d\x2a\xce\xb9\x92\x64\x14\x6b\x47\xa9\x95\xaa\x1f\xb5\xd3\x9f\xac\xfa\x15\x68\xd3\x6d\xa8\x29\x7c\x74\xb5\xd9\xc7\xf1\x62\xa8\xd5\x4a\x70\x5f\x67\x9a\x8d\x18\xaf\x32\x4b\x55\x4e\x2d\x7c\x1d\xef\x39\x38\xcf\xa9\xd9\xb4\x73\xb5\x3b\x29\x24\x06\xb0\x4c\xee\xbb\xa2\xae\xc1\x55\x5b\x42\xe9\x46\xbe\x43\x79\x9f\xb4\x66\x01\x75\x86\x58\x4b\x05\xea\xee\x4a\x77\x2e\x36\xa7\x27\xe9\x1d\xe5\xb7\x94\x15\x39\xe8\xd0\x4f\x24\xa1\xf4\xae\x4d\x2b\x4f\x67\xf1\xa6\x91\xb0\xdf\xd1\x7c\x5a\xdc\x19\x25\x7c\x87\xe3\x2f\xd5\xf3\x02\xba\x85\x1b\x19\x37\xb1\x72\x30\x64\x56\x7e\x50\x3b\x58\x9f\x9c\x6f\x4a\xf7\x7e\x22\xb5\xd8\xd2\x1f\xda\x9d\xd1\x3b\x39\xa3\x3f\x1e\xe5\xf9\xe5\x8d\x54\x5b\xa5\xbd\xe0\x2a\xed\xb9\xab\xb4\x37\x1e\x6e\x0f\x50\x51\xaf\xbb\x1f\xac\xbb\xef\xd6\xdd\x17\x75\x15\xf5\xca\xd3\xc9\x27\x2d\x6f\xb8\x21\xe9\x42\xe3\xc3\x05\x2b\xae\x59\x3a\xd7\x62\x06\xf2\x99\x13\x96\x9b\x10\xb9\x8b\x09\xa6\x2a\xa8\x6e\x8a\x0b\x45\x72\x2d\x19\x83\xa8\x20\xe7\xf4\x0f\x82\xfb\xad\x5e\x1a\xda\xc3\xaa\x86\x9b\x9c\x48\x1b\xaa\x79\x4d\x98\x54\x3e\xc8\xe7\xd9\xc2\xfb\x3c\xd3\xf7\x17\x3c\x95\x8b\xed\x81\xa0\x3a\x16\xc5\xa2\xad\xb3\xd2\xab\x34\x5b\x6c\x0f\xcc\xcc\x9c\xf7\x92\x3d\x6f\xee\x4c\x7c\x1f\x00\x91\x03\xa1\xa8\xe6\x69\x96\xad\x3d\x43\x35\xc8\x96\x4a\xfe\x58\xa0\x2c\x8d\x25\x5f\x56\xf0\xa2\x89\xf9\x5f\x4c\xb6\xc8\x76\x7d\x6d\x3a\x7a\x09\x41\x06\x20\x76\x7e\x1d\x9d\xe9\x0e\x17\x13\xb3\xe0\x66\x8b\x88\xb9\xa6\xd3\x29\x53\x44\x9d\x5c\xd5\x8b\x6f\x1b\x85\xe8\xc7\x36\x52\x9b\xb7\xee\x96\xa5\xa2\x10\x58\xa1\xf0\x94\xd7\x6c\x31\x1d\x6c\x2a\x06\x8c\xdd\x1d\xdc\xa1\xb3\x78\x1b\x04\x7b\x89\x63\x23\xd1\xb9\x75\x92\xf3\xcb\x82\xbd\x02\xe2\xd9\xc4\x24\x01\xd9\x14\x72\xa2\x1e\xdb\x6d\xcd\x3c\x5e\x74\x31\xd9\x12\x27\xc2\xd6\x14\xa3\xd4\xfe\xdf\x67\xcb\xaa\x85\x8d\x23\x55\x58\x42\x90\xdb\xdc\x5c\x2e\xdc\x7f\x5b\x93\x15\xd3\xf2\x7d\x3a\xb9\xa1\x39\x39\xf4\x9a\x50\x2f\x63\x92\x0c\xbd\xf7\xe7\xf7\x25\x60\xb4\x6a\xe3\xaa\xbc\xb7\x54\x2a\xfb\x21\x01\xd5\xb6\x4a\x80\xb8\xff\x6c\xe8\xcd\xd3\x7a\x44\xca\x34\x84\xfb\xcf\xfd\xef\xea\x84\x99\xcf\x2f\x6a\xd5\xed\xe6\xd6\x85\x9e\xf6\xab\x6d\xd4\xcb\xec\xfb\x65\xe4\x9c\x7a\xc5\x62\xa0\xbe\xef\xbd\xa8\x7f\x0f\x1c\x14\xdd\xda\x8e\x57\x1a\xbc\xfa\xdc\xd6\x76\xf6\xbc\xef\xea\x02\xd0\x1f\xf7\x03\x1f\x2f\x74\x03\x2b\x17\xca\x0a\xfa\x95\x45\x4c\xcd\xf7\x98\x23\x82\x14\xbc\x15\xf1\xfb\xd3\x63\xe6\xcc\xe0\xfa\x16\x74\x22\x5d\xd3\x7f\x0d\xba\xf9\xf3\xb7\x77\xb3\xbe\xf7\x1b\xfa\xd8\x76\xef\x69\x49\xb7\x9b\x34\xc3\xa1\xcf\x0b\x4b\x1a\xdb\x97\x13\x70\x9e\x3c\x87\xbb\x0a\x32\x7b\xf5\xe0\xb7\x1f\xa8\xae\xe1\x33\xd8\xf6\x37\x7c\x5b\x38\xd9\x4f\xc4\xc8\xd4\x5d\x97\xdf\xea\x1b\x71\x5a\xcc\x65\xbc\x81\x2a\xdd\xee\x27\x81\x76\xe8\x79\xa2\xc8\x74\xc8\x69\x3f\x2b\xd8\xb1\xcc\xa4\x24\x23\x8d\x04\xed\x05\xc4\xa8\x44\x5b\xe2\x9d\x51\xe6\x70\xcf\xe4\xce\x32\x1e\xb5\x38\x87\x88\xad\xc0\xd6\xb6\x5c\xce\x9b\x2c\x38\xbd\x0e\x6a\xee\x7e\xd6\x9a\x23\xd0\xb8\x7c\x07\x4f\x17\x2c\x9d\x7c\x22\x82\x18\x43\xf9\xaa\xa3\x2d\x6e\x42\xa9\xc3\x6a\xa1\xc3\x1a\xe5\x98\x4e\x99\x15\xca\xe5\x52\x35\x15\xb6\xeb\xa8\x51\xb2\xa8\xb2\x28\x16\x4d\xb6\xf9\xce\xa6\x51\x0e\xd0\xb5\xd7\x6e\x43\xfe\xdc\x1b\x65\xdb\x55\x70\x40\xe4\x4c\x25\x65\x55\x8b\x27\xd5\x77\xa2\x24\xf0\x11\xe9\xd5\xb7\xb4\xf9\x6b\x53\x9b\x50\xf2\x84\x96\xcd\x46\xcc\xc1\xf6\x7e\xf6\xdb\x43\xa4\xd2\xa2\x2a\x1b\xb8\xc4\xd7\xd6\x1b\x75\xbb\xee\x93\xb6\x46\xa9\xaf\x5b\xc7\xb7\x55\x64\x10\x17\xaf\x12\x0a\x94\x24\x88\x3f\x3c\x00\xcb\x25\x8f\x9e\xf4\x1d\x8e\x49\xa2\x96\xf1\xf2\xb2\x58\x90\x5c\xef\xd3\x6a\x4f\x5a\xa6\x45\xd4\x1e\x69\x85\xff\x95\x6c\xa4\x07\xee\x9f\xf4\x0f\xe2\x66\x3b\xbb\xbc\x84\x44\x47\x8d\xfd\x88\x7d\x25\xfa\x70\x86\xe3\x76\x23\x3f\xd9\x26\xaa\xdf\x9c\x5c\x5c\x4d\xe4\x93\x6c\xd9\xfa\x4b\x74\x9a\x4e\x90\xa0\xdc\xed\x50\x42\xad\xfa\xa6\xe1\xf3\xaa\x2b\x06\xf2\x36\x9c\x68\xca\x4d\x0f\xd5\x34\x3e\x47\xfd\x5c\x1d\x91\x62\x67\x2f\xbd\x2c\x53\x02\x31\xa1\xaf\xbe\x01\xc4\x82\x1a\xf9\x92\x91\x56\xba\xf8\x9b\xa9\x30\xec\x72\x76\x54\xe0\xea\xdc\xc9\x6c\x05\x80\x69\x98\x8f\xa1\xcc\x04\x50\x6a\xd6\xcf\xf2\x76\xf3\x0c\xa0\xf3\xff\x8f\xbb\x37\x6d\x6f\xe3\xc6\x12\x46\xbf\xf3\x57\x50\x7c\x3b\xd5\x85\x26\x44\x93\xb2\x7b\xa3\x0c\xeb\xf5\x22\x27\x9e\x91\x97\x96\x94\x64\x32\x0c\x47\x5d\x22\x41\x11\x51\xb1\x8a\x41\xa1\x24\x2b\x22\xe7\xb7\xdf\x07\x07\x7b\x2d\x94\xec\xce\xcc\xbd\xcf\xfd\x22\xb1\xb0\xaf\x67\xc3\x59\x82\xf0\x57\x6d\xe7\xea\x96\xa5\xe9\xeb\x20\x4c\x16\x36\x94\x4e\x3d\xc5\x4d\xce\xde\xcb\x20\x56\x58\x23\xea\xa8\x5d\xcd\x83\xc6\xab\x79\xe0\x33\x7f\x07\x5a\x37\x5f\xef\x4d\x3d\xa0\x99\xc2\x1d\x6a\xc1\x76\x0f\xc3\xf9\x2a\xf0\xf6\x81\x9a\x00\x5e\x0a\xf1\xfc\x2a\xef\x72\xa7\x05\x2e\x99\x47\xfd\x6a\x60\xb4\x3a\x1f\x60\x1d\x77\xd5\x97\xd0\x2c\xd7\x8e\x7d\x0d\x50\x81\xf1\x5d\xf1\x87\xd8\x6a\x76\x05\xa7\xab\xce\x0c\x05\x14\x86\x93\x67\x67\xc1\xbe\xb5\x9d\x82\x4a\x65\x03\x30\x24\x60\x9b\xcf\x3d\x90\x57\xef\xd6\xc0\xa5\x1a\x68\x34\xf5\x3d\xc0\xd8\x7a\xcf\x4d\x23\x75\x40\xaa\x80\xa3\x4d\xdf\x69\x5b\x53\x6b\x45\x5b\xd6\xd8\x36\x3e\x3e\x02\xe4\x98\x46\x42\x78\xa6\x9a\xa8\xde\x95\xda\x09\x30\x95\xc3\xb8\x73\xb2\xaa\x0b\xf3\xd8\x0e\xec\x82\x61\xeb\x93\xef\x87\x87\x44\xfa\xbc\xb7\xb4\xe5\x81\xbb\x79\xbe\x32\xa0\xce\x2a\x21\x91\x2a\x88\x00\xf3\xab\x9a\x19\x92\xaf\x47\xe0\xc1\x18\x8e\x99\x24\x3d\x99\x3f\x82\x07\x0c\x9d\x56\x0d\x46\xbc\x16\xb1\xd7\x01\x96\x5a\x62\xd3\xf6\x5b\x9e\x5c\xb5\x00\xf4\xc0\x1a\x8b\x2d\xe2\x80\x46\xfd\x47\xd8\x8f\xc0\x9e\xd9\x5a\xd5\x2c\xf0\x4b\x07\xc8\x7d\x73\xf5\xff\xa8\x74\xe4\x6f\x97\x67\xb8\x17\x6c\x19\x98\x9c\x3f\xbc\x60\xce\x5c\xb0\xa1\x0f\x7f\x03\xa9\x77\xb4\xb4\xba\x6b\xad\x0b\xef\x54\x80\xbf\x63\x3a\x7f\x9d\x67\x42\x63\xe9\xf0\xdc\xe9\x4b\x27\xea\xad\xee\x3a\x6b\x65\x56\x6f\x77\xc7\xb1\x46\x0a\xff\x07\xcd\xef\xd8\xec\x60\x5d\x4d\xb9\x2f\x19\x7a\xed\x90\x36\xb4\x6b\xe0\x84\x3a\x42\xd5\x9d\x6d\xe9\x4b\x61\x9f\x70\xee\xad\x9b\xeb\x9f\x00\x0d\x1b\xab\xeb\xf6\x60\x5d\x0d\x04\xdc\x0c\x1f\xb4\x13\x6c\x07\x28\xce\x66\x30\x38\xa0\x4d\x2d\xfe\x0b\x60\xc5\xf5\xf2\x28\xa8\xb2\xd3\xba\xcc\xde\x91\xd0\xc8\xac\x4a\xa2\x61\x9f\x30\xf0\x94\xf4\x1a\x11\xae\x57\x4f\xeb\x46\x64\x0d\x31\x06\x9b\x87\x52\xd1\x7f\x77\xdd\x36\xf8\x0f\xaf\xb4\x50\x51\x51\x0d\x86\xaf\x1f\x78\x69\x76\x13\xbc\xa0\x80\x4f\x0c\xdf\x7f\x01\x04\xaa\x30\x3a\xaa\xa6\x0a\xc2\xf9\xce\xf7\x10\x1b\xcf\x6f\xc7\x5b\x48\x03\xe7\x69\x36\x7b\xbb\xc5\xaa\x1d\x6f\xb7\xbf\xb8\x2d\xaf\xae\xff\xd4\xf2\x81\xde\x6a\x7c\xf9\xaa\x64\xe9\x9c\x72\xf2\xbd\x7a\x9e\xf8\xf1\x21\x61\x90\x92\x15\x84\xee\xa7\xc2\x18\x78\xde\xe7\xdc\x91\x28\x45\x10\x58\x1a\xdc\x1a\xec\x7e\x0f\x98\x57\x5f\xd5\x02\x91\xae\xdf\x32\x58\xee\x44\x91\x79\xf8\x47\x4e\x69\x70\x78\x28\x9c\x3e\x80\xe8\xf7\x11\x9d\x08\xef\x69\x7d\x5b\x95\x7d\xec\xd0\x5e\x03\x91\xc0\x63\xbd\x61\xf9\xce\x92\x1e\xeb\x19\xcb\x73\xa8\xb4\x05\xf1\x71\x33\xf1\xd4\x00\x6a\x0c\xe7\xa3\x97\xb5\xdf\x07\x11\xfe\x2e\xc2\x49\x97\xdc\xdf\xd7\x3a\x1b\x2d\xd4\xde\x90\x10\xe2\x97\x37\x76\x12\x30\x3b\x13\xeb\x51\x1f\x01\x7a\xdb\x7d\x45\x1d\x2b\xae\x0e\x02\xbd\xed\x7e\x47\x15\xd4\x13\x3b\xa9\xd3\x2f\xe8\x89\xfa\x3d\x28\xe9\x7a\x48\x0c\xb7\x68\x9e\x98\x63\x58\x4b\xd9\x6c\x02\x35\x24\x9d\xea\xab\xa8\x18\x21\x40\xd0\xb2\x31\x99\xb1\x23\x93\x27\xb0\x46\x90\x68\xe9\xe7\xaf\xff\xaa\x6e\xf5\x17\x38\x9d\x69\xb8\x38\xb4\x9e\xed\x39\xc9\xc5\xff\xa9\xfe\x83\x22\xf4\x8f\x14\xe1\x1f\xfe\x17\x47\xcb\x69\xd1\xe4\x87\xb5\xf9\x96\x43\x44\xe9\xca\x2d\x6f\x08\xab\x48\xfd\xd7\x76\x31\xe1\x53\xc3\x7c\xea\x89\x76\x6a\x17\xf6\xeb\x41\x18\xce\xec\xb2\x7d\xbb\x43\xc4\xdd\x08\x3d\xc1\xab\x2f\x88\xed\x04\xde\x9d\xfd\x85\x80\x32\xac\x6e\x9c\xb8\x00\xb0\x68\xa0\x5e\xa8\x07\x11\xff\x47\x60\xa2\x1b\xc9\x92\x26\x73\x90\xaa\x7d\x11\x78\x74\xf5\x45\xc2\xd2\x18\x3d\x06\x54\xa2\xfb\x5d\x50\x70\x07\xdc\xab\x64\x56\x81\x95\xca\x6e\x83\x38\x2a\xb7\x0e\x2f\x64\x3a\xa0\x5e\xb9\x8f\x3f\x51\x72\xf0\x97\xbf\x3d\x7b\xfa\xe7\x67\x7f\xfe\x33\xfe\xf7\x76\x55\x50\x85\xee\xbe\x52\xf1\x5d\xc2\xde\xdc\xbc\x6b\x7c\xad\x9e\xff\x64\xaa\x88\xf1\x20\x64\xee\x2f\x85\x3e\x8f\x2d\xb2\x7e\xd0\x28\x76\x93\xf2\x35\x50\x94\xf6\x71\x2f\x2b\x57\x97\x94\x3b\xe3\x08\x11\x45\xb5\x34\x7e\xe4\x7a\xd6\x4a\xca\xe0\x24\xa2\xa9\xb2\x35\xc9\xa8\x57\x7a\xcb\xf3\x55\x2c\xf4\x4b\xa8\x4a\x9f\xa5\x79\x66\x35\x9e\x7f\x29\xbc\xc6\x15\x41\x29\x3f\x9b\x1e\x5c\x1d\xc0\x99\x4c\x71\x46\xe8\x61\xf6\x5c\xdb\x10\x78\x2f\xf7\x57\x54\xc4\x19\x72\x8f\x33\x20\x17\xcc\xd7\x8d\x04\xb1\x1e\x4e\xbe\xbe\xb3\xbe\x37\x6e\x39\xab\x29\x4c\x05\x56\xba\x16\x3c\x6a\xb3\x12\x67\x74\x6f\x9e\xb2\xf7\x86\x1d\xfd\x7a\x2b\xd4\xc3\x6d\xef\x32\xcf\x53\x9a\x64\xbd\x31\x7c\x39\xaf\x4a\x63\x5b\x01\x32\xf4\xc2\x8e\x25\x35\xf5\xcd\x68\x8f\x0c\x9d\x8f\x35\x35\xed\xf7\x89\x58\x0e\x92\xcb\xc2\x31\x18\x7b\x31\x7f\xf1\x13\x45\x1d\xed\xfe\xdf\x34\x38\xda\x6e\x63\x81\x90\x37\x49\x98\xd7\x69\x72\x1b\x53\xdc\xf0\xcc\x6c\x26\xa3\xc7\x6b\x06\xa2\xd7\xd0\xaf\x20\xc7\xf6\x7c\x68\x16\xc1\x1f\x90\xc4\x0e\x72\x2c\x35\x4f\x46\x59\x2e\xba\xc5\x8a\x39\xa7\x3e\x5e\xad\xe7\xcf\x9f\x6e\x9e\x6d\x41\x3f\xfc\x51\x55\xa9\xac\x00\x9e\xe6\x3a\xe1\xca\x9a\xfc\xa3\xd1\x68\xfc\x54\xe5\xa9\xb0\x95\x36\x6b\xf4\xf7\x4e\xf3\xf2\x77\x0f\xfe\x6a\xd7\xaf\x2d\xaa\x8a\x5a\x4f\xe7\x6f\x40\xb3\x81\xbf\x98\xeb\xdc\x31\x9f\x41\x60\xac\xda\xd2\xff\x77\xa6\x4c\x86\x4d\x52\xfb\xa1\xf4\x2a\xa9\x83\xd9\xe8\x2c\xdd\x0b\x56\x2d\x0b\x40\x79\x87\x5c\x9f\x0f\x8f\xf4\xb0\x26\xff\x2d\xa6\xe3\x26\xf5\x02\xad\x59\xf0\xd4\x1e\x1c\xf5\xac\x3e\x1a\x85\x47\xb3\x3b\xb2\x4f\xfa\x20\xa6\x56\x6f\xef\x46\x1d\xa1\x72\xfa\xba\x0d\x1d\xfd\x35\x32\x5d\x59\xdd\x01\xfa\xe2\xc5\x53\xad\x2f\xa0\x93\xf6\x63\x99\x86\x1e\xb3\x19\x54\xed\x88\xb2\xbb\x2d\x68\x9d\xc0\x56\x6b\x02\x79\x1e\xa4\xd1\x76\x03\xc3\x9d\x5c\xa3\x2a\xb4\x93\xd1\x53\xad\xa7\x34\x93\x83\xd1\x4c\x1d\xfe\xc3\x4e\xc5\x32\x5f\xd1\xc8\x32\x6f\x56\xb1\xab\x58\x13\xbe\xa5\x2a\xf0\x67\x8b\xd1\x88\x2c\xa7\xdc\x3b\x53\x3c\xc4\xfb\x23\xa4\x9f\x98\x45\xe8\x66\xcb\x37\xd9\xd2\xa5\x1b\xd4\xb2\x85\x3a\x60\x92\x1a\x04\xea\xac\xda\x8f\xc0\x43\x4c\x6d\x90\x95\xdd\xf6\x57\xeb\x6a\xc8\x36\x37\x51\xdd\x4b\x5f\xdb\x69\xac\xb5\xcd\x10\x3c\x0c\x64\xb3\x7c\x4e\xe7\xef\x56\x2b\x3a\x67\x55\xe3\xc1\x6a\x0b\xf2\x60\x37\x35\xf2\xa1\xf4\x15\x3a\x76\xf6\xac\xb5\x27\xc5\x60\x5e\xae\xeb\x2c\xed\x57\xe2\x78\xdd\xb8\xa7\xb5\x67\xb0\x89\xed\x58\xab\xd8\x37\x23\xa0\xa0\x8a\x30\x2a\x67\xbf\xdb\xf0\x46\x46\xeb\xca\x69\xc3\x99\x51\x85\xd6\x3b\xeb\x7d\x79\x24\xad\xc6\x1b\x6b\xa3\x03\x6b\xed\xec\xef\xab\x41\x53\x7a\xfd\xbb\x8d\x7a\xd8\xd9\xdd\x25\x6d\x34\x7d\xfa\xc2\x67\xf1\x90\xcc\xd2\xb7\xb1\xad\xe3\xbe\xea\xb2\xcd\xb7\xc4\x57\x3e\xf8\x99\x4e\x6b\x87\x96\xf7\x85\x3e\xe3\x15\x4a\xae\xe6\x4a\x4c\xeb\x4a\x02\xfd\x64\x0e\x10\x7c\x81\xb5\xe5\xe3\x2a\x86\x0a\x6f\x3a\x82\x70\x1b\xaa\x29\xd6\xfd\x11\xe6\x44\xec\xd3\x86\xb5\xf2\x9a\xe3\xba\xb9\x66\xe0\xac\x8a\x6b\xe0\x2c\x8b\x89\xbc\x32\xe0\x07\x46\xab\x97\x0e\xdb\x31\x21\x8f\xba\xff\xc7\x03\x8a\x4e\xda\x61\xd2\x20\x49\x6f\x93\xbb\xe2\x94\xde\x24\x29\x9b\x27\x60\x31\x6f\x77\x8d\x45\x11\x53\x1b\xb3\xe0\xc9\x8a\xb6\x68\x2a\x79\x3a\x49\x36\x7a\x05\x11\x5e\x5c\x0b\x23\xc4\xf5\x14\x90\xb4\xc1\x43\xa5\x6f\x92\xef\x22\xe8\xe9\x67\x3a\xab\xbb\x12\xf3\x94\x25\xdd\x20\xc1\x58\x45\xbf\x7e\x28\xa0\x72\xb8\xc7\x5d\xac\x82\xc3\xc0\x86\x1f\xaa\x85\x0a\x9c\x31\xea\x68\x0d\x90\xec\x28\xf3\x74\xe3\x24\xd7\x3e\xae\xf4\xa5\xdf\x4d\x81\x3a\xa9\x2a\xbc\x7a\xed\x2b\x8d\x3e\xfd\x7a\xd0\x08\x06\xfd\x26\xcd\x43\xb0\x10\xee\x25\x18\x08\x81\xda\x29\x52\xad\xab\x38\x1c\xc7\x9f\x67\x74\xad\x32\x71\xf3\x28\x77\x61\x7c\x28\xbc\x13\xe1\x7b\xcd\x19\xf5\x24\x4f\x98\x0b\x1a\x45\x2c\xbb\xfa\xe1\x3d\xf9\x87\x92\xe2\xfe\xc7\x2e\xa7\x2b\xca\xab\x95\x76\xa4\x65\x5c\xaf\x24\x8d\x61\x93\x0a\x91\x70\x41\x84\x09\x33\x4c\x38\x4e\x06\xbc\xcc\x04\x5b\x51\x92\xe1\x44\x47\x4c\x82\x67\xd8\x1e\x4e\x60\x2b\x95\x8c\x44\xf9\x7e\x34\xbf\xc1\x18\x95\xd3\x8c\xe4\x38\x71\x01\x97\x92\xaf\x72\x18\xf0\x28\xd9\x84\xea\xa3\xaa\xd7\x06\xda\x2b\x8f\x92\x55\x14\xa1\x84\x22\x7b\x9c\x84\xa2\x08\xe4\x12\x59\x73\xd0\x27\x0a\x37\x43\x5d\x5a\xbd\x2c\x86\x38\xc8\x76\x8b\x72\x0a\x5f\x70\x9d\x35\x1a\x9e\x18\x45\x6d\xb5\x45\x26\x2a\x94\x95\x84\xb9\xa6\x6c\x6c\xad\x7f\x6b\x39\x29\x4c\x05\xd7\x82\x88\x66\xca\xb6\xcd\x9c\x94\x82\x54\xdd\x3c\xab\x52\x36\x0c\x19\x9c\x09\xc1\xef\x7a\x58\x85\x3e\x29\x06\x17\x2a\x7c\x96\xd5\x7c\x3b\x4f\xae\xac\xdf\xe5\x20\xa8\x16\xc2\xcd\x5e\x24\x98\x39\x14\x39\x61\xf5\x43\x91\xcb\x49\x6a\x9d\x4a\xf6\x9b\xf2\x2e\x2a\x4f\x5b\x75\x59\xe4\x30\x34\xed\xac\x0d\xcd\x20\xa2\xec\x2c\x5f\x5d\xb2\x8c\x9e\x49\xf8\x8e\xc2\x9d\x91\xf7\x3f\x7f\xfc\x3e\x6a\x29\x6a\x5e\x85\x0a\xcd\x6f\x18\x1e\x75\x24\x68\x18\xe8\x0b\x9b\xb7\x2a\xd3\x72\x6e\x8b\x72\x81\x8d\x1a\x3e\xa7\x37\xb8\x70\x0f\x82\x58\x5b\x17\xea\xdd\xef\x30\x1b\x0f\x1e\xfc\x5b\x92\xef\x8d\x4a\x68\x5c\x42\xec\xf0\xcc\x70\x2f\xea\x1b\x21\x3c\x23\x6b\x61\xca\x08\x5c\xe2\x14\xe1\x85\x46\x3b\x27\x2c\xbb\xa6\x20\x83\xeb\xcc\x0c\x42\x88\x73\xc7\xcc\x73\x74\xcf\x35\x77\xf1\x07\xcb\x17\xc4\x42\x25\x21\xac\x57\x9c\x65\x57\x2a\x40\xac\x07\x6d\x17\x36\x57\xc5\xd2\xa3\x3b\x4b\x33\xb4\x35\xea\x3e\x12\xc0\x24\xee\x95\x9e\x14\x5b\xcc\xb6\xf1\x7f\x50\x84\xff\xf3\x61\x41\xac\xd2\xce\x37\xe8\x73\x95\xf0\x6b\x88\x0e\x27\xf4\xeb\xca\x3b\x78\x36\x25\x7b\x23\x9b\xf2\x86\xa6\x54\x50\x9b\xb2\x4a\xd6\x84\xca\xbf\x9e\xca\x2f\xcb\xae\xe4\xdd\xd0\x7b\xb6\x4b\x64\xab\x5e\x65\xc3\x77\x4a\x2f\xca\xb0\xe9\xc1\xec\xb4\x1a\xac\xd9\x6b\xd3\x17\x2e\x15\x7c\xd5\xe1\xe8\x4b\x02\xde\xbd\xb3\x2b\x27\x1a\x63\x47\x71\x4a\xf2\x09\x9b\xa2\x06\xb0\x36\xf6\x66\xae\xa3\xd5\x27\x83\x9b\xd5\xdb\x9c\xab\xc9\xcb\x71\x95\x48\x47\xaf\x87\xf8\x54\x70\xfa\xbc\xed\x5f\xba\xed\x67\xe8\x3e\x9f\xd0\x29\x59\x10\xe6\x82\xe9\x60\x81\x30\x6b\xdf\xca\xea\xc1\xb2\x85\xd5\x39\x58\xec\xac\xbc\x70\x77\x74\x8b\x70\xc5\x3f\xe9\x02\x7b\x3a\x7f\x66\x2b\x87\xda\xa4\x24\x09\xad\x1f\x65\xea\x2a\xbf\x79\xe0\xd1\x58\x6e\x46\x5e\x59\xfe\x84\xb0\x09\x9d\xe2\x82\xb0\x49\x36\x55\x0e\x62\x3a\xff\x16\x27\xb8\xb6\x0d\xd9\x51\xeb\xc2\x23\x9c\x6b\x07\x5a\x71\x22\x7f\x57\xbc\x2d\x17\x8a\x65\x54\x47\xaf\x85\x26\x96\x43\xe3\x44\x4c\xe8\xb4\xe3\x5b\x23\xc6\x08\xff\x67\xcc\x51\x78\x3c\x4d\x5f\x1c\x61\xd5\x68\x57\xd6\xab\x9d\x71\x58\xaa\x79\x9e\xd5\x6d\x8e\xd4\x49\x6c\x86\xb7\x71\xb8\xe2\x0a\x1f\xb8\x66\xcd\x53\x58\x85\x71\x0a\x30\x0e\x60\x12\x5c\xe0\x52\xcd\x30\x3d\x8c\xd3\x0a\xb6\xd1\x25\x2a\xd8\x26\x65\x85\xd8\xd7\x64\x48\x0a\x77\x33\x88\x65\x9f\x02\x62\x56\x81\xab\xe8\x9c\x64\x83\x77\x1f\xde\x9d\xbf\x7b\x79\x82\x53\x2f\x18\x57\xa9\x2f\x41\xfa\x05\xe8\xca\xdc\xe8\x14\x10\x9d\x8f\x4d\x50\x3c\x29\x21\xe4\xd7\x6c\x8a\x70\xfa\x3f\x83\xd4\x14\x2a\xd9\x8b\x1f\xcd\xe8\xa2\xcd\xc6\xff\xec\xd8\xf7\x2e\xbb\x34\x8a\x3b\xb0\x41\xc6\x24\xc2\x34\x51\xef\x8c\xfb\xb9\xdf\x0f\x8b\x86\x4c\x84\xed\xd5\x20\x3f\x7f\x60\x10\xfd\x87\x9b\xf1\x00\xcf\x12\x33\x14\xc0\x4b\x8d\x39\x13\x22\x40\x71\xa6\x20\x49\x83\x5f\xf7\xc4\xf7\x74\x1c\xe7\x35\xcb\x87\x02\xe7\x1e\x11\xa7\xb6\xa7\x04\x14\xf8\x9f\x8a\x0b\xc1\x05\xea\xa8\x80\x68\x26\x0e\xda\xd9\x5d\x36\x5b\xf2\x3c\x63\xbf\x51\x1e\xdf\x8b\x84\x4b\x3a\xbe\xc4\x76\x3a\x63\xbe\x45\x83\xe2\x2e\x9b\x59\x3d\xd5\xb0\xcf\xc0\x27\x7a\x81\xb6\xb4\x21\x6c\x68\x60\x8a\x2a\x17\x33\x84\xd3\x6d\xa0\x41\x2f\x09\x6f\xa0\x33\x34\x91\x80\x99\x24\x0b\xaa\x26\x29\x71\x06\x04\x82\xf5\x97\x5a\xb7\x10\x09\xdc\xb5\x6f\xed\x3d\x70\xe4\x83\x0a\x5b\x6b\x31\xb2\x10\x8f\xc0\xc8\xd6\xc7\x15\x35\x84\xd3\x77\x40\x47\x59\xc4\xac\x79\x1f\x42\xf5\x3b\xe2\x2e\x14\xdb\xcc\x12\xda\x16\x1e\x6b\x3a\xa8\x2b\x18\x5a\x2d\x5f\x17\xf6\x2d\xc0\xe8\x28\x98\x36\x55\x83\x5a\x23\x03\xf4\x2b\xc5\x2e\x42\xb0\x71\xa6\xfa\x8e\x55\x93\xeb\x6c\xa6\x06\xa6\x7c\xc7\xba\x7a\x1e\xc4\x3c\x49\x81\xb1\xe1\x15\x15\xc2\x85\x7b\x6f\xce\x05\xd9\x49\xbd\x70\xca\x2b\x96\x4b\x66\xc9\x1e\x0f\x8a\x42\x99\xdb\x7d\x55\x20\x31\xde\x1b\x6d\x51\x5d\x44\x22\x9c\x88\x84\x46\x11\xb5\xda\x71\x92\x9a\x0d\xec\x36\x31\x0b\x91\x35\xdc\xd9\x7f\xa8\x63\x59\xef\x4c\x6c\x91\x25\x6a\x98\xa1\xe2\x1f\xf9\x0c\xde\xc6\x6a\x3e\xf6\x59\xbc\xf8\xaa\xc7\xf0\xa2\xf2\x04\xbe\xf3\x9c\xf1\xfc\x16\xe2\xcd\x76\x8b\x65\x5e\xa6\xf3\x6e\x46\x6f\x28\xef\x2e\x41\x57\xa5\xa7\x08\x8c\xc7\xb1\x9d\x5a\x51\xc4\xf1\x90\x5a\x00\xa1\xa0\xc6\x29\x2d\xca\x54\x10\xae\xc2\xb1\x64\x6d\x27\x33\x78\x89\xf0\x8c\x39\xf2\x42\xbb\xce\x00\x70\x9b\x1b\xfd\xdb\x64\x25\x31\x36\xbd\xed\x16\xc2\xb3\xb4\x29\x20\x29\x15\xbb\xfc\x71\x54\x5e\x33\x7c\xcf\x6c\xeb\xfe\x28\x10\x20\xaa\x60\xec\x50\x41\x79\x75\xae\x0c\xa9\x96\xa5\x06\x51\x4d\x06\x27\x13\x54\xf8\x12\x7e\x7d\x0f\x25\x6d\xef\x4d\x9b\x76\x3c\xc4\x05\x9d\x03\xde\xd2\x11\x5a\x21\xee\xec\x7a\x3f\xe9\x8f\x3a\xb9\x6a\x0f\x02\x5f\x24\xce\xfd\x74\x49\x8a\x7d\xed\x18\xc2\x1b\xa4\x29\x5a\x9a\xd0\x50\xa9\x67\x6d\x55\xe0\x19\xe1\xa6\x87\x05\x29\xf7\x9f\xfe\x69\xd6\x71\x75\x16\x78\xa6\xfc\x61\x0e\x92\x1d\x46\x64\xae\xaf\x44\x68\x37\x16\x9c\x26\x69\x9a\xcf\x5a\x25\xb6\x20\x15\x84\x17\xd6\x61\x14\x69\xd9\x5e\x18\x95\x3f\x6c\xd9\xaa\xb8\xc2\xaa\x30\xc2\x07\x97\x49\x41\xfb\x14\xe7\x76\xf8\xfd\xcc\xc5\xdf\xcf\x5f\x90\xe1\x61\xbe\xbf\x8f\xd4\x2b\x47\x9c\xf7\x55\x05\x9c\xf7\x19\xea\xe8\xca\x84\xe2\xcc\xfe\x12\x72\xfb\x09\xdd\x82\x0f\x8e\xaa\xb8\xd9\x00\x32\xab\x8f\xe6\x4d\x59\xf5\x79\xb4\x14\xe3\x6a\x8e\x6e\x46\x22\x78\x57\x53\x9d\x29\x5d\x69\xa1\x2b\xa9\x44\x5b\xde\x7f\xf8\x62\xfa\x89\x41\x12\x8d\xd6\xc4\x48\xeb\x3a\xc1\x58\x25\x33\xdf\x82\xa5\x0a\xad\xe6\xe1\xd5\xe9\x08\x6f\xc1\x41\x3b\x72\x9d\xaf\xe1\xcd\x72\x97\x07\x8f\xa4\x4d\xc3\xd4\xa7\xf1\xce\x93\xab\x2b\x3a\x47\xf1\xa4\xba\x75\x6e\x8a\x53\x64\xb5\x57\xe5\xba\xef\x14\x6e\xea\xbb\x24\xcb\xd9\x4a\x8f\x78\x04\xad\xed\x4c\xbf\xb6\xec\xfd\xa7\x7f\xf2\x7b\x50\x89\xee\xc5\x94\x3d\x0e\x79\x42\xf8\xde\x1a\x90\x0a\xe0\x13\xf7\x77\x8b\x64\x5f\x10\xd6\xf7\x1e\x1a\xf0\x0f\x87\xa1\xb7\x5d\x5f\xb5\xf3\x66\x82\x5f\x6b\x22\x20\x7f\x00\xd4\xca\x95\x25\xc3\x60\x88\x43\xdc\x08\x84\x15\xe7\xe3\x3e\xb9\xf1\x62\xa4\x54\xdf\x54\xb8\xa3\x26\x68\xcb\x6a\xd0\x36\x7c\x64\xb4\x2a\x6d\x72\x28\xa2\x69\x28\x17\x0d\x21\xf6\x6b\x83\xe0\x83\xe3\xf7\x9f\xce\x7f\xba\x78\x79\x7a\xfa\xf2\xa7\x2d\x66\x4d\xd0\x96\x3d\xb2\x5f\x86\xe5\x55\x65\x47\xf1\x57\x76\x8f\xc6\xf1\x63\xd6\x4c\xd2\xc0\x55\x98\xea\x93\xe8\x12\x56\x71\xff\xe2\x1a\x00\xa8\x20\xa7\x55\x3c\x19\x6e\x36\xf4\x05\xe1\x47\x8b\x71\xa6\x1c\x78\x02\x27\xc0\x9a\x40\x98\x07\x54\x12\x0f\xa8\x28\xba\xdf\x8e\x0e\x6a\xaf\x39\x5d\xd3\xc0\x17\xa7\xc3\x92\x1a\x8e\x80\x62\xcd\x30\x60\xd5\x60\xd0\x59\x30\x68\xe6\x0f\xda\x2d\x39\xdf\xaf\xac\x7a\xd6\x17\xd6\xa1\x59\x2e\x41\xf7\x73\x71\x98\xf7\xfb\x88\x29\x17\x9c\x12\xaf\xe4\x08\xc2\x50\x76\x1e\x75\x22\xbf\x18\x9c\x79\x50\x53\xb6\x6d\x17\x78\xb3\x89\xbd\x64\xd2\x04\xef\xaa\x0b\x28\xc1\x88\x01\x58\x2e\x79\x67\x8f\xae\x58\x47\x85\xb7\xad\xe1\x4a\xdc\xba\xc6\x9d\x7a\x23\xc4\x7f\x6f\x8d\x39\xe6\xfd\xcc\x46\x58\xa3\x0e\xd0\x25\x3b\xb9\xaf\x7f\xed\x15\x39\xd0\x40\xf2\x40\xa5\x3f\xc8\xe0\x04\x3c\xa4\x68\x52\x15\xb2\xe0\xe0\xd6\xe1\xe1\x6e\x6d\x90\x1d\xd4\x8b\x1b\x91\xf6\x14\xda\x02\x92\xab\xa5\x07\xab\x64\xed\xc5\x07\xf8\xb8\xd8\xa1\x00\x50\xa9\x1a\xde\x6c\x08\x59\xab\x31\x9b\xef\x7b\xa6\x34\xd2\x25\x6b\x24\xbb\x4e\x78\x41\xdf\x81\xe1\xec\x68\xe8\xa8\x04\x09\x04\x32\x05\x04\xc4\x24\x73\x73\xf8\xb8\x68\x9a\x34\xb5\x78\x42\x9d\x82\xe2\xab\xd1\x44\xf5\xd6\xe9\x54\x08\x19\x10\x02\x45\x9d\x93\x88\x0f\xf5\xbc\xff\x51\xec\xd1\x06\xa5\xbf\x72\xa8\xcd\xa8\x45\x3f\x9c\x3e\x6a\x60\x19\xa0\x97\xcc\xa0\x97\xdf\x77\x7c\x16\xf7\x54\x37\x26\x37\xfd\xa9\x06\x59\xa5\x11\x40\x48\xe3\xa0\x88\xb7\x9f\xa6\x14\x43\x80\x1b\x96\x49\x93\x05\x31\x04\xab\xb2\xe4\x4a\x61\xa3\x56\x51\xa8\xd3\x7c\x2b\x1a\x44\x94\x6d\x8a\x31\x81\x88\xd2\x73\x18\xe1\x41\x43\x05\x26\x19\x89\xc5\x91\x1b\x87\xa2\x91\xf4\x0c\x90\x37\xaa\x8e\x19\x36\x20\x7b\x83\x3d\x95\xf3\xff\x87\xb0\x67\x59\xc5\x9e\xd0\x55\x23\x22\x5d\x51\x7e\xd5\x24\xa2\xdf\x85\x46\x55\x6b\xed\x78\x14\xe7\x26\x2e\x47\x47\x07\xab\x65\xc5\x5b\x9e\xff\x46\xb3\x98\xa3\x28\x02\x85\x67\x5d\x0f\xa2\x3b\x4d\xa6\xce\x59\xa8\x72\x51\x2a\x7c\xdf\xa4\xf9\x24\x99\x1e\xc2\x3a\x70\xbb\x3e\x05\x8a\xa2\x18\x5e\xda\xcb\x62\x19\x17\x48\x92\x04\x60\xf7\xe2\x43\xcb\x64\x8a\xd0\x36\x3c\xdb\x8f\x00\x0b\x0d\x47\x6f\x2b\x57\x4a\xe4\x67\x77\x99\x58\x52\xc1\x66\x1f\x02\xb7\x66\x3e\xe4\x52\x3a\x45\x23\xa4\x2a\xbc\x14\x2d\x25\x7b\xff\xb7\xd7\xa7\xbf\x23\x47\x53\xdb\x59\x6b\x82\x27\xe7\xb0\x13\xb3\xab\x7d\x6a\xa0\x26\xd4\x72\x04\x8b\xe1\x30\x4a\x65\x31\x02\x92\x42\x17\xde\xd9\xab\x2e\xd3\xd4\xaf\x59\x78\x6f\x14\x7e\xbf\x6a\x4d\x7f\x77\x1a\xe6\x21\x7a\xb6\x81\x86\xc9\x7c\x1a\x46\x60\xd1\xe7\x4d\x34\x4c\xb9\x93\x59\xab\xb3\x6a\x7a\xd9\x6b\xc4\x48\xc8\xaa\x59\x99\x8b\x1a\xd5\x2a\x59\x3b\x46\xa7\x45\x1b\xea\xcb\xc1\xe2\x4e\xed\x69\x05\x04\x78\x8d\x72\xc8\x88\x68\x81\x62\xd9\xd1\x62\xcc\x01\xfd\x67\x75\x12\xa6\xe2\x3b\x59\x03\xac\x86\xd6\x83\x07\x32\x15\xbc\xc1\xaa\xe8\x32\x09\x34\xb2\x09\x9d\xb0\xe9\x94\x88\x09\x9b\x5a\x4a\xc2\xac\xc2\xce\x3b\xb7\x4a\xd6\x3b\x0f\xd0\x2a\x59\x37\x9c\x9c\x00\x1a\x7a\x67\xcc\xab\x15\x0c\xba\xe3\xbc\x37\xcb\xc1\x8b\x60\xf0\x74\x22\x60\xf0\xd9\x84\x4d\xb7\x0d\xa7\x29\x7d\x80\x16\x62\x99\xa0\x3c\x4b\xd2\x1f\xe4\xbc\x7d\xe8\x66\x32\xce\x03\xb6\xa4\x15\x7d\x87\x54\x8a\xa2\xb0\xfe\x75\x3a\xa8\xb5\xbb\x76\x02\x29\x18\x77\x03\x9b\x5b\x99\xf0\xa3\x18\xed\x66\x5a\x48\x0d\x2e\x7f\x24\xdf\xfd\xaf\x8c\xcb\x50\x32\xcd\x7b\xd2\xb0\x85\xbf\x33\x59\x53\x03\x78\x0a\x6b\x67\xfe\x79\x66\x24\xf3\xaf\xb1\xf1\x3b\xe9\x27\xd6\x5c\x50\xe6\x04\xcc\x29\xe2\xa7\x7f\x62\x2a\xc2\xa0\xfd\xec\x8f\x64\x42\xe1\x25\x1c\x60\x81\x7c\xdf\x59\x84\x90\x42\x05\xf3\x98\x14\x38\xc1\xf9\xf4\x61\x2a\x67\xa6\xa9\x1c\x8f\xb8\x81\xeb\x5e\xec\x96\x15\xaa\x32\xbb\x2e\x7a\xb8\x03\x5f\x8f\x2c\xaa\x3b\x59\xc5\x17\x4f\xff\xd4\x88\x31\x66\x0f\xbf\x39\xaa\xb3\x4a\xfd\x49\x57\x4e\xab\x81\x89\xbb\xde\xc3\xbe\xfc\x44\xed\x64\x1f\xab\xc5\x7d\xd8\xaf\x03\xdf\x4f\xbc\x01\x4f\x9e\xfe\x49\xf4\x0f\xa6\xb8\x9a\x34\xaa\x25\x4d\xa7\x9a\x13\x5c\x28\xdb\x8c\x52\xec\x66\xb5\xc3\xcb\x86\x97\xaa\x56\xb2\xbb\x16\xc2\x73\x55\x8e\xd5\xca\x2d\x05\x5e\x08\x3c\x04\x57\xcf\xba\xc2\xb7\x67\x64\xae\xde\x8b\xd6\xbb\xf0\x7b\x45\x37\x4a\xbb\x89\xd5\x8a\xa8\xa1\x8f\x32\xa5\x2b\xad\x19\x9f\xb9\xf2\x0c\x01\xb1\x37\x5a\x94\xa8\x8b\x1d\x79\x0d\xda\x47\xf5\x42\xb3\x64\xb6\xa4\xdf\xf2\xbc\x5c\x17\xf5\xcc\x94\x15\x2a\x16\x4f\x5b\xef\x43\x0f\x62\x15\x23\xef\x43\xf8\x39\xc2\xcf\xb9\xf1\x73\x94\x7b\xe6\xa5\xe7\xb1\x56\xa6\xd4\x94\xc2\xfd\x02\x15\xfd\xf0\xa6\x75\x73\x8b\x12\x5a\x94\xd5\xd6\x53\x6b\x72\x19\xb5\x72\x7e\xa5\xd6\xc0\x78\xcf\x51\x76\xa3\x32\xe5\x37\x1a\xff\x41\xcb\x7d\x8c\x1e\x04\x0c\x94\xda\x17\xdb\xfb\x39\xbd\x2c\xaf\x94\xea\xd3\xb8\x81\x29\x48\x06\x5e\x81\x38\xf7\xbd\xa5\x42\x06\xa8\x74\x8c\x43\xd4\xa9\xeb\x68\x6d\x0f\x5b\x05\x0b\xb4\xdd\x2a\xed\x81\xbc\xe9\x4a\xe7\x83\x05\x15\xb3\x56\xab\x22\x6b\xed\x39\x61\x83\x53\x7a\xc5\x0a\x41\xf9\x84\x4e\xa7\xa0\x99\x91\xe6\xc9\xbc\x56\xb1\x52\xb0\xe2\xb7\x39\x86\x8a\xd0\xe5\x0f\x21\x3d\x17\x4a\xb0\x2a\xad\x98\xde\xaa\x75\x0c\x74\xab\x75\x2a\x2b\xb4\x7b\xd9\x56\x2a\x3d\x9e\x57\x5f\x28\xde\xe6\x26\x5b\x97\xb6\x3e\x7e\x65\xe1\x66\x95\x0b\x6d\x1e\x68\xb4\xf0\xf3\x16\xe7\xd2\xda\x18\x16\x9c\xf9\x42\x31\x35\xf1\xf3\xd6\x16\x4d\x7e\x50\xbc\xd5\x10\x0f\x38\x3e\xb0\x59\x63\x4a\xd3\xc5\x37\x50\xce\xac\x5a\xd9\xbd\x7a\x5d\x15\xca\xa7\x35\x5c\x83\x82\xfd\x46\x73\xc9\x29\x63\xf5\x32\x4d\xe3\x7b\x7d\x64\xc7\x02\xd3\xec\x66\x9c\x6d\xf1\x2f\x2a\xc8\x5a\xcc\x70\x89\x40\x19\xda\x29\x86\xad\x67\x24\x0d\x3d\x64\xcb\x96\xbe\x44\x2b\x32\x95\xa3\xae\x10\x86\x22\x50\xe2\x27\xf7\xcd\xef\x64\x8b\x2d\x2e\xda\x32\x40\x39\xab\x21\x2b\xd9\x6e\x71\xf1\xe0\x44\x17\x78\x88\x70\x82\x99\x9d\x68\x23\xb0\x6c\x9b\x11\xf8\xf0\xae\xf8\x0d\xcf\x11\x2e\x9a\xbc\xd6\xea\x97\xb8\x40\x40\xcc\x21\xc8\x0d\x44\xa5\x0a\x40\x12\xc4\x8e\xcc\x1b\x8d\x88\xf4\x6b\x9b\x5f\x7a\x5c\x03\x69\x31\xc2\x85\xcb\x29\x4c\x92\x9c\xca\xd8\xbb\xb2\xe6\xf9\x96\xa2\xad\xec\x0e\x02\x6a\xbc\xb6\x58\xa0\x76\x04\x3d\x04\xe1\x19\x8a\x9b\xe5\x8a\x91\x76\x6a\xa0\x86\x0e\x21\x1d\x9a\x1b\x53\x94\x15\xc4\x6f\x8e\x7b\xc7\x1f\xde\xf4\x90\x61\xec\x5c\x5b\x56\x71\xdc\xef\x13\xfc\xdc\xe6\x84\x1d\x79\x1a\x4a\x0c\x8d\x8d\x37\x06\x50\x3d\x50\x63\xc0\x05\x69\x50\xe6\x33\x1b\x58\x08\x48\x88\xe5\x01\x47\x58\xa9\xc5\x9d\xc6\x05\xa6\xa8\x53\x71\x34\x55\xe2\x1c\x61\xa1\xbd\xa1\x40\xfd\x4f\x71\x89\xbc\x24\x75\x67\x69\x26\x1a\xbd\xcb\x56\x4f\x8c\x75\xbb\x6e\x17\xde\xcc\x53\x23\xaf\x22\x46\x0d\xbe\x75\x61\xd6\xb2\xad\x7f\xd3\x9e\xab\xcc\x81\x53\xda\x32\x2a\x6d\x3d\x43\x58\xcb\xb3\xac\x4e\x9c\xef\x84\xec\x38\x03\xdc\x01\xe3\xd5\x9a\xcd\x0d\x86\x50\x01\xd9\x9a\x59\xa4\x99\x19\x2f\x32\x1d\xdf\x01\x95\x9e\xc5\x01\xb2\xee\xa7\x76\xcf\xc2\xd7\x12\x78\x68\x2a\x2c\x9c\x4a\x8e\x6b\xb7\xcf\x2e\xfc\x3b\x41\x57\x4d\xac\xa6\xa5\x59\x62\x34\x58\x25\x6b\x70\xd5\x85\xc3\xe5\xf0\x5a\xa9\x79\x1d\x7e\xdc\x16\x0e\xdb\xb6\xd0\xba\x32\x96\xeb\x97\x07\x98\x92\x52\x39\x24\xa7\x27\x6a\xc3\x11\x34\xc6\x12\x30\xea\xf2\x95\x95\x4a\xcc\xc9\xa5\x22\x2e\x1a\x76\x1e\xe7\x7a\xef\x43\xd2\x4d\x6d\x64\x89\x2a\x0b\x51\xc2\x42\x98\xcf\x3a\xaa\x0a\xed\x1a\xda\x88\x4a\x23\x73\x75\x2a\xed\x72\x75\x3f\xb3\xba\xe9\xa2\xbf\x58\x15\xf7\xa7\x8d\xed\x3a\x17\xd7\x35\x78\xd3\xa2\xc4\x6d\xfb\x0e\x37\xd6\xea\x2b\x32\x6b\xd0\x5e\x5d\x20\x43\xc8\xb8\x39\xb7\xac\x87\x1a\x45\x00\x09\x6c\x5b\x6d\xcf\x71\x95\xce\xac\x93\xee\xdc\x69\x30\xb6\xd4\x6c\x5a\x17\xaf\xba\x59\xd1\xb6\xea\x3e\x79\x2c\xcb\x17\xbb\x82\x30\x7a\x74\xb3\xd7\x85\x8f\x62\xda\x6a\xd6\x29\x6b\xaf\x01\x79\x3c\x60\x83\x6a\x4d\x34\x53\xeb\x1e\xf6\x52\x67\x4a\x63\x17\x99\xfb\xa6\x65\x30\xbe\x6f\xb5\x00\x25\x9a\x16\x3a\xbb\x87\xeb\x79\xd7\x56\x1d\x9d\xe6\xb9\xa8\x86\xb8\x74\xcf\xcd\xbf\xe8\x60\xaf\xbe\xc3\x88\x28\xe2\xd5\xf0\x98\xc1\x5c\x50\x33\x73\xc2\xc1\xdf\xbd\xea\xb4\x25\xa6\x66\xb5\x0a\x35\xc4\xed\xc3\x0b\x6a\x4e\xf5\x3a\x5f\xb7\x2d\x5d\xdb\x8a\x98\xaa\x0f\xb9\x27\xf3\x2e\x75\xcd\x03\xb0\x1e\xea\x03\x71\x62\xcd\x66\xeb\x62\xb1\xa6\x88\xb5\x0c\xf5\x6d\xce\x1f\x88\x1d\xeb\xd7\x87\x92\x06\x41\xb7\x5b\xfe\x3a\x4b\xdf\x96\x30\x30\x58\x44\x91\x92\x2c\xa1\xc3\xbd\x98\x3b\x3b\xb5\x18\x21\x30\x2e\x39\x44\x87\x56\x57\x13\x84\x14\x6a\xad\x3e\xd7\x55\xb1\x0d\x9d\x43\xb3\x1b\x1c\xc6\x67\x31\x68\xa5\xe1\x92\x57\xf0\xcb\x99\x7e\x51\xf3\xb8\x82\xaa\xe5\xb1\x27\x46\xdb\x23\x24\xb7\x12\x4a\x59\x36\x08\xe0\x12\x2b\xe9\x26\xc2\x94\xdc\xcb\x99\x8c\xf7\x46\x18\x66\x00\x5e\xb4\xb7\x46\x2e\x19\xd8\x99\xbb\xb2\x43\x53\x56\xa2\x48\xa1\x08\x5c\x0d\xa9\x99\x07\xd5\xd1\x56\x5f\x26\x79\x25\x9a\x8f\x5e\xe0\x6d\xa3\x89\x9a\xe5\xc4\x79\xd1\x38\xe4\x2f\xc8\xf0\x90\xef\xef\x07\x14\x8b\x15\x06\xc0\xde\xeb\xe8\xd4\xe0\x93\x03\x1c\x0e\xc4\x19\xae\xf2\xaa\x68\xb7\xce\x0d\x94\x7c\x84\xf7\x92\x42\x01\xd4\x80\x3f\x09\x19\x3c\x2d\x55\xb6\xcf\x53\x01\x76\xef\xed\xaa\x19\x86\xe7\xa1\xdb\x87\x47\x13\xd4\xb0\x3d\xae\x67\x8f\x98\xc8\x7a\xb6\x73\x16\xeb\x99\x37\x05\x9e\x3c\xa2\x41\x9e\xec\x6c\x90\x27\x5e\x83\x8b\xfa\x4b\x4b\xdd\x73\xc1\x62\xdd\xd2\xa0\x8d\x59\xe5\x1a\x2c\x1e\xd3\x60\xb1\xbb\xc1\xc2\x6f\x50\x5f\xd4\x9d\xad\x1a\x7b\x65\x5d\xd6\xd6\xa5\xd9\xcd\xa3\xea\xd1\xec\xc6\xb7\x87\x3f\xc9\x6f\x4f\xe8\x0d\x4d\x7f\x78\x4f\xd6\x4a\xb8\xb8\x6a\x15\x2e\xea\x81\xdf\xac\x9a\x03\xdc\x54\xc1\x91\xdf\xfb\xcd\x4a\x83\x33\xcf\xf9\xc3\xcd\xc3\x32\x67\x45\x40\x78\x8f\x25\xa7\x74\x41\x84\x1f\x7b\xea\x26\xe1\xe7\x8f\xb6\x40\x53\xf2\xc1\xba\xf5\x99\x00\xad\x05\x3e\xdd\x69\x24\xb3\x53\x03\xea\x8a\x8a\x1f\x12\x1e\x23\xa7\x46\x54\x17\x5b\x37\x96\x0f\x22\x91\xff\xd0\xa4\xb4\xac\x01\x8d\xbf\x04\xa6\x17\xcb\xd4\xc2\x3a\x55\x63\x95\xbb\xe5\x09\x4d\xd0\x60\xb6\xe0\xeb\x5a\x9f\x81\x37\xc7\x6f\x5f\x7e\x7f\x72\x7e\xf1\xfa\xe5\xa7\x97\xaf\xde\x9d\xbc\x3b\x7f\x77\x7c\x46\x0c\xfb\x7f\x92\xdc\xe5\xa5\x90\x90\x58\x27\x9c\x27\x57\xf2\x6b\xcd\xe9\x3a\xe1\xf4\x25\xbf\x2a\xe4\xa7\x5a\x71\xf3\x65\xfd\x03\x7f\x97\xe7\xd7\x12\xe2\x6b\xc4\x62\x3e\x03\xd1\x82\xad\xad\x68\x19\x99\xaf\x46\xaa\x4a\x9b\x5c\x88\x54\x99\xcd\x64\xf9\x6d\x87\x0e\xde\xbf\xfb\xf0\xee\xfd\xcb\x93\xdd\x83\x1e\x05\x83\x1e\x85\x83\x1e\x05\x83\x1e\x7d\xe1\xa0\x47\x3b\x07\x3d\xaa\x0d\x7a\xa4\x54\xf1\xae\x04\xe9\x7d\xd3\xbf\x1c\x0f\xbf\xe9\x75\xec\x91\xbf\x13\x81\x42\x47\x96\xcf\xa9\x12\x54\x12\x72\x25\xb6\x74\x70\x76\x7c\xfa\xee\xe5\xc9\xbb\xff\x7c\x79\xfe\xee\xe3\x87\x8b\xb7\xef\x4e\xcf\xce\x2f\x3e\x7c\x7c\x73\x7c\x71\x76\x7e\xfa\xee\xc3\xb7\xe4\x4a\x5d\x89\xcb\x16\x6b\x51\x1e\xfb\x46\xba\xc6\x37\x01\xab\xfa\x26\x08\x3d\x59\xb0\xec\x0a\x90\xeb\x1b\xba\x06\x2d\x16\x36\x98\x25\xd9\x5c\x79\x40\x01\x91\x3a\x1b\xb0\xec\x17\x3a\x13\x74\xfe\x71\xc5\x84\xa0\xca\x35\xe4\xde\x08\xb3\x81\x0d\xe5\xa2\x2b\xef\x8f\x30\x7b\x44\x38\xc8\x3f\x20\x7c\xf1\xb8\x29\xb0\x45\x5c\x1f\x3f\xce\xec\x0c\xca\x6c\x95\x88\xd9\x92\xce\xad\x9f\xeb\xc2\x0c\xfa\xd2\x8d\x6b\x88\xb3\xba\x1f\xbb\x53\xba\xbc\x9b\xab\xf8\x29\xdd\x5b\x26\x96\x5d\xcf\x7c\xaf\x0b\x4e\xee\xca\xf5\x3a\xe7\x82\xce\x7b\xc8\xd3\xce\x65\x06\x2d\xbe\x06\xc7\xd2\x86\x92\xf2\xe2\x01\x1c\xee\x69\xe7\x83\x24\xdf\x6c\x6e\x45\x9c\xa3\x28\xba\x93\xff\xd0\x21\xca\x49\xee\x7b\x9f\x76\x6f\xdc\x6e\xcd\x73\xcc\xbe\xce\x07\x48\x6b\x64\x0f\x5f\x49\xd9\x2e\x0a\x56\x51\x47\x2e\x55\x18\x13\xcf\x59\xe4\x70\xcc\x9d\xc4\xcc\x9f\x6a\x87\x45\x91\x37\xd0\x28\x8a\x33\x6f\xd8\x7e\x44\x84\xe0\x0c\xd1\x30\x80\x81\x69\xb7\x12\x66\x44\xc7\x8a\xa1\x09\x7f\xcf\x0a\xd8\xd3\x26\xbd\x31\x1b\x3b\x27\x1c\x97\xf2\xf6\xb8\x47\x88\x8d\xe4\xc5\x2b\x47\x13\xca\xbc\x20\xbc\xe1\xc8\x83\xcf\xdc\x43\x11\x45\xf1\xde\xad\x88\x05\xda\x6c\x8e\xe5\xbf\x3d\x42\x32\x74\x88\xac\x96\x08\x98\x88\x0b\xe5\x6e\xb0\x0b\x55\x8c\xdd\x4e\x43\x21\xee\xcf\x99\x08\x30\xaa\xf1\xef\xd4\x76\x47\x24\xa4\xba\x9d\x65\x6d\x9a\x95\x07\x63\x37\xcb\xca\x77\xbf\xaf\x30\x28\xce\xe0\x0a\xe9\x11\x78\x0d\x65\xe8\x56\xc4\x19\x8a\xa2\x38\xe6\x24\x73\xf0\x68\x00\x3b\x10\x3f\xf9\xaf\x6f\x7e\xee\x5f\x8e\xe3\x9f\xe7\x7d\xf4\xcd\x1f\x9e\x20\x14\x45\x7c\x32\x9a\x1e\x7d\x00\x5f\x94\xb1\xfc\x8d\x54\x08\x5c\x78\x85\x8d\xbd\x4e\x82\x15\xc9\x10\xa6\x55\x58\x61\xdc\x8f\x06\x7b\x1e\x6b\x5f\x8c\x6d\x91\xa0\xbe\x64\x6d\xaa\x3d\x56\x17\x67\x7f\xbf\x63\xec\xe4\xdc\xd2\x78\x91\xb6\x6e\x05\x28\x14\x1e\xcb\x7f\xbb\xa7\xc7\xeb\xd3\xdb\xdf\x6f\x9c\x1e\x47\x0d\x2b\x41\xaa\xdb\x18\x45\xad\x5d\x55\x2e\x53\x43\xb7\xdb\xf6\xe8\x28\x21\x28\x70\x93\x36\x0c\xe7\x66\xe3\x53\x79\x7e\x1b\x15\x53\xeb\xb6\x68\x22\x61\x07\xca\x99\x83\x8e\x54\x01\x5a\x1e\xde\xf5\xf4\xec\x3b\xc1\x9e\xcd\x59\x6e\x6a\xf1\x74\x25\x88\x4a\x16\x86\x77\x00\x47\x27\x2c\x2f\x0b\xbb\x14\x49\xe5\xc4\x75\x42\xbd\x75\x48\x65\x08\xeb\x0d\x4e\xa2\xe8\xa5\x88\x13\x64\xcd\x95\x1b\x57\x3b\xb1\xe5\xc3\x42\xda\x20\x39\xdc\xdb\xb0\x08\x42\x38\x6f\xa2\x9d\xfd\x85\xab\xad\xaa\xea\xb6\x51\x61\x56\x99\xd2\xca\x15\x02\xfe\xb5\x01\x87\x88\xc0\x66\x1e\x10\x2d\xce\x82\x4d\x68\xbb\x49\x3e\x60\xa0\x51\x74\x06\x21\x39\x3c\x26\x1a\xc0\xae\xdf\xe5\x21\x8f\xa2\xbd\x33\x79\x31\x0e\x11\x27\xbc\x69\x34\x8d\x71\x70\x9c\x46\x0a\x00\xc1\xd6\x40\x42\x6d\x07\x55\x1d\x21\xb6\x88\x9f\x82\xbe\xae\x04\x57\xe7\x77\x6b\x6b\x32\xc0\x1d\x00\x93\x5b\xa6\xa2\xe5\x59\x12\xcb\x3c\xd7\xbb\xad\x0e\x06\x8e\x01\x88\xc8\x8b\xdf\x40\xca\xff\x8d\x10\x42\x6d\x7f\x51\xd4\xfb\x66\xf3\x4d\xcf\xa6\x41\xfb\xdb\x58\xd2\x55\x2f\xe5\xa2\x58\xe5\xa5\x9d\xfd\x55\x20\x08\x7c\x06\x61\x56\x04\xdc\x19\xd5\xa2\x2f\x9d\xb0\x75\x3a\x95\xf6\x33\xff\x41\xc5\x85\xad\xb3\x81\x95\xc4\x97\x04\x1f\xd2\x41\x51\x82\x99\x54\x60\x19\x6e\x3a\xd8\xb2\xb7\xf0\x60\xef\xb8\x05\xf5\xc2\xbb\x02\xc1\x3c\x04\xbf\xa2\x08\x60\xf6\x51\xfc\x2f\x1e\x04\x34\x8e\x79\xe3\x15\x6f\x99\xb2\x1e\x68\x30\x11\xb4\x23\xc0\xe0\xae\xe3\x1d\x45\x9f\x15\xde\x09\x49\x38\x79\x33\x95\x0e\xd4\x3a\x99\xd1\xef\x4f\xdf\xc9\x0b\x60\x0f\x3e\x95\x8c\x1e\x68\x83\x13\x62\x83\x46\x06\x89\x03\x91\x7f\xbf\x5e\x53\xfe\x3a\x29\x24\xd3\x0a\xbe\x20\x83\x53\xda\x44\x48\x4f\xa6\x4a\xa9\x4c\x4d\xcc\x0b\xa7\x5f\x20\x7d\x5b\x60\x60\x7a\xc0\xbd\xf3\x57\x1f\xdf\xfc\xd4\x83\x9b\xa9\x7b\x0e\x7a\x68\x0d\x41\x18\xd2\xd3\x8d\xbc\x86\x31\x68\x09\x22\x3c\x9a\xf7\xc8\xea\x1e\x35\x1f\x38\xaf\x66\xc3\x89\x6b\x0e\xfb\x53\x77\x79\xd4\xb0\x4c\x72\x21\xac\x22\xd6\x47\x11\xc3\x43\x29\x5b\xc4\x39\xb2\x8a\x33\x37\xfa\x24\x4a\xe8\xa2\xbf\x08\x47\x8a\xe8\x66\x83\x62\x0d\x0f\xc8\xcc\x6a\xb7\xe5\x08\x8f\x5a\x66\xe1\x8f\xb3\xc6\x14\xed\x08\x38\xe4\x05\xb9\xdd\x35\x0f\x3b\xd9\x8f\x20\xe4\x44\x6a\x6e\x96\x49\xf1\xe7\xc1\x2a\xf3\xc8\xcc\x3c\x9c\x16\x27\xdb\x39\x0f\x33\xc8\x0a\x6f\xba\x2b\xfe\xe4\xe3\x67\x11\xaa\x41\x67\xbe\x1a\xb4\x93\xf0\xea\x78\x47\x1a\xa0\xba\x38\x4a\xd9\x84\x4d\xe1\xb2\xe9\x03\xd6\xc6\x64\x6e\x81\x17\x08\x27\xe6\x0f\xbc\x61\x66\xbb\xa2\xf7\x79\x24\xbd\x85\x09\xcd\x0c\x8f\x21\x4a\x9a\xe9\x10\x84\x79\x14\x35\x5e\x24\x5d\x3e\x08\xab\xe9\x0f\xbf\x3a\x3a\xcf\xf9\xa5\x56\xd8\x7f\xaf\x7c\xc2\x35\xf1\x97\x74\xf0\x6b\x49\xf9\xdd\x19\x4d\xe9\x4c\xe4\x3c\xfe\x63\x31\xe3\x6c\x2d\x26\x57\xe9\x8a\x93\xde\x1f\xfb\xa2\xff\xc7\xde\xf4\x8f\x9a\x0e\x34\x20\xbb\x53\x63\xcb\x5f\x27\x99\x64\xbe\x17\x2c\x9b\x77\x0b\xca\xd5\x43\xec\xbc\xab\x38\x46\xc9\x78\x75\xff\xc9\xb2\x7d\x8d\xa5\xfe\xd9\x7b\x54\xf8\xcd\xdf\x21\x0a\xa8\x79\x53\xb1\x6b\x00\xed\xc2\x69\xf3\x68\x33\x62\xf9\x8f\x26\x06\x1a\x83\xf4\xc0\x82\xfb\x1a\x54\xa4\x58\x72\xde\x81\x28\x60\x07\x71\xaa\xdd\x59\x24\x0f\x06\x0f\x4d\x20\x78\xe8\xce\x50\x98\x06\xc3\x78\x01\x71\xc2\xa2\x01\xc8\xac\x8c\xca\x62\x33\x8f\x88\xaf\x92\x26\x70\x22\xfd\xb0\x5b\x06\x33\x34\x3d\x9b\x70\xf3\x6c\x12\xac\xde\x97\x46\xf9\x72\x4f\x24\x66\x14\x0f\xb5\xe0\xfa\x3a\x6a\x40\x4c\xb6\x19\xf5\x9e\xd5\x2c\xeb\x6f\xa9\x42\x94\x06\x36\xdf\xc6\xdf\x53\xe4\xc4\x81\xb7\xa2\x95\xc6\xdc\xda\x42\xc7\xc2\xe7\x03\x9a\x58\xf4\x7d\x8f\x45\xf7\xde\x8d\x85\xc7\xaa\x0b\xcb\xaa\xbb\x86\x3f\xfb\xbd\x8f\x5a\x7a\x3f\x6b\x1f\xa2\x24\x83\xe5\xe5\xae\x51\xc2\xb6\xf2\xcb\xdd\x95\xbb\xed\x35\x3f\x8a\x6a\x78\x91\x9a\xbb\x7c\x8d\x08\xe8\x84\x4f\xd5\x35\xcc\x34\xad\x63\x4d\x07\xb6\x5b\x3a\x30\x52\x3e\x6a\x42\xba\x5d\x88\x2d\xc2\x34\xee\xfd\xdf\xab\x94\xad\x56\x94\x3f\x29\x05\x4b\x7b\x78\xd2\xa3\x9f\xd7\x39\x17\x45\x0f\xf7\xa8\x5c\xb2\xfd\xcb\xe4\x92\xa6\xbd\x29\x0e\x01\x49\xaf\x2c\x68\xb7\x10\x9c\xcd\x44\xaf\x43\x07\x49\x51\xf3\x59\x09\x57\x69\xaf\x1e\x38\x43\x6c\x36\x3d\x55\x5c\x4e\x70\x91\xb0\xb4\xe4\x14\x62\x61\xc9\x56\xd8\x55\xd6\xf2\x84\x39\x3a\x14\xcf\xab\x80\x0b\xc2\xb6\xe9\x05\x70\xa0\x4a\x4c\x7d\xd1\x4e\x14\x99\x68\x1b\xce\xe7\x22\x72\x78\x91\xc7\x99\x64\xb5\x87\x87\xf9\x73\x66\x5a\xcd\x4d\xab\x09\x61\x93\x7c\xda\xa1\x93\x64\x4a\xb2\x49\xe2\x5b\x0b\x61\x3a\x58\xb0\x34\xfd\x50\xa6\x69\xd1\x32\x62\x39\x67\x65\x88\x00\xf1\x2c\x61\xe7\x54\x84\x83\x09\x9f\x2a\xbf\x9c\xee\xfa\xd3\x01\xcd\x8a\x92\xd3\x6f\x4b\x36\x27\xb9\x53\x45\x65\xbf\xa9\x24\x86\x29\x18\x37\x91\x04\xd3\x41\x99\xdd\xf2\x64\x1d\x74\xeb\x85\x7a\xa9\xe1\x92\x63\x08\xb0\x4f\xe7\x5d\x20\x55\xba\x22\xef\x5e\xd2\xee\x9a\xd3\x82\x66\xc2\x8b\x5f\x02\x83\x80\xa2\xf5\x8d\x6c\x6b\x5b\x84\xd5\xbd\x60\x18\x75\x2e\xfb\x2b\xfd\x7f\xf5\xbc\x46\x7b\x3e\x5f\xad\x46\x00\xbe\x23\x7d\x23\x03\x42\x9d\x3a\xa2\xfe\x0d\x38\x89\x7a\x1a\x67\xc4\xd4\x38\x3b\x79\xf7\xfa\x98\xd0\xc1\x1b\x36\x13\x67\x54\xa6\x2b\x5d\x77\x35\x2e\x2d\x19\xd3\x06\xb6\xd7\xf4\xae\xd0\x92\xe7\xa1\x03\x5e\x2c\x78\xca\xb8\xb8\x92\x9b\xd5\xef\x67\xee\x0e\xe7\xf5\x02\x9b\x8d\xac\xe5\x8a\x24\x0e\x08\xeb\xbe\xcc\x83\x1e\x18\x26\x29\x13\xdd\x9d\x36\x69\xea\x68\xec\xf6\x7a\x97\xcc\xe7\x4d\x66\xb2\x55\x8f\xa4\xf4\xc8\xb6\x38\xa1\x53\x62\x54\x61\xe5\xa7\x9c\xca\x54\x3f\x4f\xb6\x38\x1f\x6d\x68\xce\x78\x13\xf5\x5a\x1d\xeb\x85\x88\xa2\x7a\xa6\xca\x99\xba\xd7\x3a\xbd\x35\x85\xf6\x6e\xb5\x73\x1d\x94\x5e\x80\x89\xd9\x67\xbc\xef\x59\xb3\xcd\x16\x6f\x60\xcd\x61\x42\xac\x3f\xc0\x40\xcd\xc1\xa8\x08\xf1\xe6\x70\x18\x55\x8d\x88\x30\xcc\x85\xb6\xf7\x6e\x40\xb8\xca\x37\x94\xb2\xe0\x71\x15\x26\x62\x7f\x34\x75\xaf\x12\x54\xe5\x53\xd9\xbb\xf6\x9b\xdf\xf0\x40\x6b\xbd\x4c\xf9\x7d\xee\xd6\xcb\x00\xa5\x89\x07\x9f\xf6\x2b\x3e\x92\x3a\xe6\xb2\x94\x1d\xef\x9a\xd5\x96\xd1\x39\x7e\x57\x74\x99\xf5\xfd\xae\x1f\x6c\x25\xf7\x44\xb7\xda\x27\xd9\xce\xcd\xd5\x2e\xab\x77\x9a\x5b\x51\xdf\xc2\xa2\x12\xbc\x57\x66\x42\x48\x87\x84\xa5\xad\x85\x64\xa6\x8a\x0e\x57\x71\xa9\xe5\xda\x20\xae\xa4\x3a\x5a\xcd\x61\x22\xd4\x81\x98\x4c\xc3\x88\x82\x4d\xe1\xf6\x84\x07\x20\xb4\x7a\xf0\x56\x3b\x89\x34\x4a\xd9\xcd\xa6\xf0\x32\x17\xdc\x09\xba\x56\x77\x69\x00\xc1\xe8\xbd\x07\x1b\x15\x03\x5a\x0b\x35\xb7\x38\x54\xd4\x6e\x90\xbf\x7e\x65\x08\x13\x1f\xd5\x99\xc8\x98\x0a\xc8\x58\x3d\xcf\x71\x2c\xe0\x64\x1c\xa9\x7f\xea\xd0\x68\xd0\xa3\xd6\x9c\x02\x8b\x46\x6f\x88\x2a\x81\xb5\xfe\x85\xc0\xea\x5b\xe6\x83\x5a\x81\x6a\xb2\xcd\x7e\x0e\x36\xcd\x6e\xc8\x51\x2c\x74\x4f\xb6\x71\xd3\xae\xf2\x86\x11\xf4\xef\xed\x3a\x55\xfe\xa2\x6b\x62\x6a\x8f\xc9\xa7\x37\x47\xd4\x9f\x0b\xfc\x0b\x1a\x54\x8e\xd9\xd5\xbf\x23\xf5\x4f\x4f\x05\xfe\x8d\xfd\xfe\xf4\x9c\x2d\x50\xf4\x50\x59\xaa\x7d\x13\x3f\xa4\x5b\xd2\x30\x8d\x9d\xa1\x23\xff\xc5\x33\x65\xae\xbe\x16\xb9\x82\x23\xca\xdf\xed\x72\xfe\xbf\x72\xdb\x0c\x58\x85\x51\x68\x48\xac\x6f\x8e\xdd\x15\x43\x77\xcc\x60\x53\x94\x83\xfc\x59\xac\x38\x67\x79\xa2\x3a\x21\xe1\xb1\x80\x62\x4b\x43\x61\x2c\x38\xa5\xbf\xd1\x78\x32\xf5\xcd\x20\x25\x49\xb3\xac\x10\xeb\x37\x2b\x9f\x54\x9f\x06\x71\xf3\x02\xd2\x1c\x36\x0a\xbc\x70\x2a\x63\x2f\x4d\xd8\x60\x2f\x45\x04\xb5\xe9\x84\x0e\xd6\x33\x32\x9c\x12\xd0\x70\x93\x9f\x3c\x21\xa3\x29\x01\xfd\x34\xf9\xb9\x58\x93\x83\x29\x01\xed\x32\xf9\x59\xac\xc9\xd3\x29\x01\xdd\x30\xf8\x1c\x92\x67\xf2\x73\xa8\x3f\x47\xe4\xcf\xf2\x73\xa4\x3e\xc5\x90\xfc\x65\x4a\x7a\x42\xe7\x8a\x11\xf9\xab\xfc\xd4\xb9\x37\x43\xf2\xb7\x29\xe9\xdd\x0c\x7b\x5b\xc9\x26\xc4\xfe\x20\xc9\xfd\x56\x69\x3d\x7a\xab\x70\xcb\x38\xdd\x5f\xe4\x7c\x95\x88\x2f\x5a\x0e\x4f\xcb\xc2\x6d\x6f\xc3\xf1\x80\x33\x36\x60\x85\xb6\x26\x46\x92\x97\x1c\x4e\x25\x1e\x96\x2c\x15\x2b\x08\x97\x74\x7a\xd1\x14\x5b\xdc\x9d\x1a\x55\x43\x0c\x5c\x24\xf3\xcd\xc6\x26\x7a\xd1\xc9\xbd\xd4\xd7\xf9\x6a\x9d\x67\x34\x13\x95\xf4\x73\x5e\x42\x60\xd9\x96\xe4\xb6\x6a\xf2\xf3\x6c\x9d\x26\xc2\x4b\x7b\x9f\xcf\xd9\x82\x51\xbe\x55\x33\xd0\xd0\xfa\x31\x13\xe0\x57\x0d\xe3\xe7\x57\xaa\xa1\xf7\xc9\xdd\x25\x3d\xc9\x67\x89\x04\x59\xac\xf8\x16\x28\x6a\x56\xbc\xf5\xc5\x98\x74\xf0\x71\x5d\xb8\x73\x28\x3f\xea\x47\x10\x1e\xc2\xe4\x21\x94\x3f\xd4\xe9\x50\x72\x18\x38\x8a\xea\xa7\x4a\x36\xcf\x23\xf2\x4c\xea\xdf\x2a\xc3\x4c\x11\x8e\xa7\xf9\x50\x59\xea\x41\x5d\x9e\xd3\x57\xca\x2f\xbc\x6e\x48\x2d\x1f\x9c\x58\xfb\xa5\x32\xf5\x44\x5d\x19\x79\x8c\xab\x89\xaa\xe8\x47\xef\xad\x43\x9e\x6e\xef\x5b\x15\x08\x56\x43\x1e\x78\x3f\x41\x8f\xc5\x97\x8d\xfe\x5d\x0e\xc7\x4b\x50\x45\xdc\x79\x22\x23\xb9\x50\xee\x3b\x18\xb1\x2a\x30\x72\xa3\x75\x25\x82\xf3\x42\x46\x07\xfe\xac\x5d\x29\x7b\x7a\xc8\x48\x2e\xa4\xfd\x54\xb9\x3f\x31\x9a\xce\xc9\x48\x2e\x25\xfc\x54\xa9\x9f\x12\x0e\x66\x94\x23\xb9\x92\xfa\x23\x1c\x15\xbf\x22\x23\x6f\x09\x5f\xf2\xab\x60\x56\x32\xfb\xaf\x6e\x52\x26\xd7\xbf\x00\x64\x24\x97\xce\x4f\x09\xcb\x54\x66\xf7\x77\xaf\x70\xc3\x2c\xdf\xd0\xcb\xf2\xea\x8a\x72\x72\x20\xd7\xd2\x7c\x99\xcd\x60\x34\x13\x67\x0c\x74\xc7\xb5\x43\xf0\x83\x11\x6c\x4a\x2d\x43\xd5\xf8\x3e\xbb\xce\xf2\xdb\x8c\x1c\xc8\x35\xd5\x1f\x2a\x47\xde\x88\x03\xb9\x8e\xdf\x52\x73\x4c\xdd\x95\x39\x90\xcb\xe8\xbe\x55\xfe\x77\x49\xa1\x8e\xeb\x81\x5c\x4c\xf3\x15\xe6\x7d\x4a\x78\xb2\x2a\xc8\xc1\x5f\xbc\x12\x2a\xcd\x8c\x47\xc7\x15\x25\x07\x7f\x85\x11\x99\x30\xa3\xaa\x15\x9a\xae\xe5\xcc\xe5\x7a\xaa\xdf\xe6\x7c\x64\xb3\x44\x90\x03\x38\x7f\xf0\xbb\xd7\x09\xd7\xe3\xf8\xf3\x9a\xd3\xa2\x60\x79\x46\x9e\x0e\x83\x05\x71\x39\x16\x96\xc3\x45\x07\x30\x6e\xd4\xb7\x62\x11\xdc\x05\x89\xf4\x2a\xb0\xc2\x3c\xe5\xca\xa2\xdf\x52\x5d\x42\xae\x21\x33\xce\x30\x62\xe1\xad\xa0\xca\xf7\x56\x34\x57\x18\xe3\x32\x99\x5d\x5f\x96\x3c\x93\x33\xfb\x4a\x09\xd7\x65\xc9\xd2\xf9\xa7\x34\x11\x12\xdf\x80\x80\x46\x87\x02\x0d\x45\x05\x05\x15\xe7\x6c\x45\xf3\x52\xe0\x30\x92\x48\x45\x60\xc0\x16\x71\xcf\xa4\x38\x5e\xf9\x13\xcf\x57\xac\xb0\x14\xab\xfe\x1c\x70\x5a\xe4\xe9\x8d\xe7\x12\xb8\x81\x3c\x1a\x88\x25\xcd\xc0\xea\xb4\xb9\xe9\xf7\xa5\x00\x1d\xbf\x8f\x97\x05\xe5\x37\xd4\x3e\x20\x0d\x31\x53\x66\xa3\x95\xfc\x98\x22\x9c\x93\x79\x3e\x2b\xd5\x0b\x48\xf8\x84\xde\x73\x62\x23\x36\xc8\x55\x95\x38\xc7\xf7\xb3\x65\xc2\x93\x99\xa0\xfc\x4d\x22\x92\xf1\xde\x70\x8b\x70\x7d\xac\x19\xe9\xf7\xb3\x6f\x0e\x70\x3e\x98\x27\x22\x21\xbd\x5e\x3f\xc3\x99\x15\xad\xd5\xcb\xf3\x98\xe2\x21\xda\x56\x24\x2a\x5a\xc6\xa6\x87\x71\xef\x16\xbe\x62\xe6\x6f\x6c\x90\x6d\xbe\xf6\x8e\x0a\xfc\x5d\xbd\x8a\xad\xe0\xe7\x2b\x4f\x4d\xf9\x6d\x03\x7b\xfc\x26\x11\x74\x90\xe5\xb7\x10\x77\x4b\x52\xf8\x72\x7b\x55\xe3\x1f\x80\xe0\xdf\x6e\x95\x24\xf1\xc9\xcf\xf3\xfe\x13\x5c\x90\xbf\xb8\x93\x50\x36\x84\x6c\xd6\x42\x19\x1b\xc8\x9a\x88\x28\xa2\x84\xd0\xcd\xc6\x49\x56\x64\x5a\x32\x10\xb4\x10\x81\x14\x29\x0d\x38\x90\x3c\x03\xf9\xd8\x66\x63\x7f\x9e\x43\xf8\x89\x28\xaa\x24\x4c\xec\xf7\x7b\x2a\x96\xf9\x7c\xea\x5a\x9c\x19\x07\x5a\x86\xe6\xcf\xc8\xfe\x08\x33\x32\xf4\x1c\x6e\x1f\xb2\xe7\xf9\x21\xeb\x93\x67\x88\x2d\x62\x3e\x61\x40\x1f\x45\x11\x9f\xb0\xfe\x08\x88\x04\x74\x9f\x11\xd6\xb9\xe4\x34\xb9\x76\x2e\xa2\x6c\x17\x8b\x96\x2e\x0e\x1a\xba\xf8\xcb\xce\x2e\xf6\x0f\x5a\x3b\x59\x56\xa5\xe8\x5f\xf9\x02\x36\xc4\x19\x99\x4c\xeb\x1e\xb1\x88\x30\x0f\xdf\x74\xc2\xfa\x4f\xfb\x7c\x8a\x13\x62\xc2\x7d\xc8\xa4\xa1\x4c\x5a\xc1\xf2\xc2\xf7\x08\x8a\xf0\xab\x02\xbe\x0e\xe4\x97\xb2\x24\xb7\x83\xc8\xa3\x48\x9b\xcb\xb0\xac\x9b\x1f\xe5\x4a\x04\x33\xee\xf5\xb6\xc6\x84\x38\x41\x0d\x33\x9d\x57\x66\x8a\x33\xbd\x5d\xc6\x05\xd6\x7e\x01\xab\x89\xe8\x0b\x22\x26\x9c\xb0\x7e\x9c\x91\x38\xdf\x67\xe8\x49\x81\xf6\xb3\x6f\x8a\xe9\x11\x23\xbc\x5f\x8c\x73\xc2\xad\x64\xf7\x05\xf8\xf9\x3a\x62\xfd\x62\xcc\xe0\x34\xaf\xdb\x2d\x26\xfe\x25\x41\xc1\xfd\x16\x7f\xf5\xde\xdc\x6f\xb5\x53\xe0\x5f\x4b\x5a\xd2\x57\x94\x65\x57\x80\x4a\xe8\xdc\x8a\x03\xd5\x86\xfc\x43\xe6\x2b\x2f\x06\xef\x8d\x37\x14\x78\xaa\xb7\xfe\x42\xa1\x05\x5b\x0b\xde\x53\x34\xdb\x9c\x43\x04\x05\xeb\x07\xe8\x2a\xcd\x2f\x93\xf4\xa3\x4e\xe4\xbb\xb8\x69\xd8\xbe\xb7\x39\xaf\x0a\xed\xe9\x73\xaf\x4f\xe3\xd2\x3d\x90\x58\x40\xce\xe4\xe9\x9f\x68\xff\x99\x63\x6e\x8f\x74\x8b\x63\xad\x46\x2b\x06\xf0\xe2\x5e\x17\x7b\x60\x6e\x9e\x6c\xf5\xd8\xc1\xeb\xd4\x25\x48\x78\x70\x4e\xb2\x41\xb2\x10\x94\x77\x6a\xeb\x63\x84\x6d\xd8\x4a\x13\xeb\x0b\xeb\xfc\x4b\xb6\xad\xbc\x97\x5e\x59\x5b\xad\x2e\x61\x02\x9a\xc6\xe6\x15\xb7\xa5\xa5\x0e\x5b\xc4\x89\x7d\x37\x30\x5e\x2b\xd3\xb8\xbe\x0d\xa8\xc3\x49\x61\x42\xfd\xdf\xe4\xd7\x60\x6c\xfc\x51\x01\xb8\xb1\x97\x6c\x75\xd9\x4b\xe2\x8e\xc0\x61\xf9\xdc\xf4\x72\x58\x6a\x98\xe6\x72\xfb\xe4\x99\x51\x84\x8c\x05\x49\x26\x65\x7f\x34\x45\x51\xc4\xe3\x64\x52\x4e\xb1\xc0\x32\xe5\x60\x8a\x0b\xf8\xf1\x74\x8a\xbc\xb3\xb5\xf7\xf0\x22\xd6\xa7\x32\x58\x95\x85\x00\xb2\x7a\x77\x6e\x6c\x75\x98\x46\x5b\x1f\x80\xe4\xc6\x1a\xbb\xb5\x57\xe7\x01\x4e\x9d\xff\xbd\x91\x0a\x08\x50\x3f\x93\x2f\x86\x3a\x15\xce\x59\xbc\x37\xd4\xa1\x45\x8a\x1f\x73\xde\x6a\x98\xdd\xda\xef\x8b\xa1\x8e\x00\x56\xe9\x43\x85\xf9\xcd\x66\x34\x6d\xd4\xfe\x54\x07\x14\x34\x3f\x15\x30\x35\x67\x5b\x1f\x31\xad\x6d\x10\x9c\x63\x88\x92\x8c\x3a\xc1\x69\xd3\x0f\x17\xc6\xa7\x72\x4e\x66\x5a\xc7\xc9\x3a\xf9\x79\xb1\x3f\x3a\x8a\xad\x2e\x4f\x8e\x9f\x21\xbc\x37\x44\xe3\xd8\x16\x6d\xdb\x4e\x84\x5e\xec\x8f\xa2\x28\xce\x26\xb9\x44\x4e\x20\xf9\xd1\x8b\x55\x79\x65\xc0\xa1\xf7\x12\x7f\x39\xd4\x23\x83\x2e\x80\xef\x21\x71\xac\xb4\x0e\x34\x4e\x31\xc8\x44\x6c\x4d\xcb\xdf\x67\xec\xd7\xf2\x81\x48\x75\xb5\x85\xa1\x66\x61\x08\x2c\x4c\xcc\x42\xb0\x18\x94\x07\x1f\xec\x98\x21\x17\x97\x4c\x2f\x2d\x5b\xc4\xb6\x11\xeb\x75\xa6\x75\x3a\xfb\xcf\x3a\xca\x9f\xbb\xc0\x09\x02\xd5\x21\x7d\x99\xbd\x1a\x9d\x62\x92\xf7\x0f\xa6\x84\x63\xf9\xe3\xe9\xd4\x46\x4d\x78\x78\x29\x2e\xae\xa8\x00\xf6\xed\x5d\xb6\xc8\x6b\xc0\xd6\xdc\x93\xa5\x0f\xb1\xf0\x33\xa4\x64\xdf\x12\x2c\x54\x16\x10\xdd\x7b\x26\x21\xc2\xb8\x20\x1a\x83\x98\x39\xbd\x03\x55\x15\x57\xd7\x83\x34\xb5\x7d\x80\xd0\x03\xfc\xee\x11\xcd\xcd\x40\xa1\x21\x47\xf7\x59\x9c\x63\x66\x03\x39\xac\x5a\xdf\x46\xfe\xa5\xd7\x55\x89\xe5\x1a\xd0\x75\x88\x97\x35\x8b\x03\x6b\xf6\xab\x42\x9f\xf7\x5b\xec\x3e\x3f\x24\x2b\xfa\xce\x47\xa1\x36\xb5\x00\xd1\x3a\xa7\xf3\x72\xe6\x49\x60\xe5\x3c\x9d\x7c\x89\x4f\xe1\xd4\xad\x63\x8e\xc5\x84\x4f\xb1\x50\xc2\x58\xd7\xd9\xce\x17\x9f\x62\xb6\xa4\xf3\x32\xad\x9f\x7c\xdf\x07\x92\xd7\xd8\x84\x4e\x83\x13\x9b\xd4\xdf\xcb\x7f\xca\xcb\x6e\x22\x04\x5d\xad\x05\x9d\x77\x45\xde\x35\x7d\x74\x93\xac\x9b\x68\x2e\x2e\xeb\x26\x5d\x68\xb1\x1b\xf7\xfa\xb4\xdf\x43\x5d\xb1\x4c\x44\x77\x9e\xd3\x22\xfb\xa3\xe8\xd2\xcf\xac\x10\x3d\xd4\xb1\x6f\xe7\xfc\x77\xeb\x67\x91\xf3\x6e\xd2\x55\xa7\xbe\xb9\x53\x1f\xa4\xd4\x36\x88\x1d\x25\x1e\xc0\xd0\x41\x9f\x73\x34\x4e\xb4\x30\x5c\x7f\x37\xd0\x14\x9e\x07\x59\xb9\xc4\x8f\x3f\x72\x51\xe4\x7f\x19\xe0\xe9\x0e\x89\x55\xe7\xa8\x0f\xf8\x79\x76\x08\x48\xb8\x5a\x65\xd2\x50\x76\x8a\xf7\x46\x84\x10\xe3\xe5\x58\xef\xb7\x98\x22\x83\xa7\x62\x04\x60\xa0\xa1\x6a\xbf\x8f\x8d\xae\x73\xb5\x7f\x87\x5b\x41\xcf\x91\x2d\x62\xa5\x24\xa4\x11\xe1\xc8\x43\xbe\x0f\xc3\x1f\xf7\x7a\x02\x48\xe4\x7e\x6b\x70\x56\x6d\x31\x8c\x52\xca\x21\xe2\xb5\xb9\xe7\x53\x2c\x82\x39\xf2\x29\xce\xe4\x3d\xaa\xf4\x0f\x4c\x7c\xbf\xdf\x71\x9a\x40\xea\xa5\xc2\x82\x8f\x9b\xf0\x41\x47\xb9\x05\x10\xda\x74\xf9\x70\x4f\xf9\x03\x57\xfe\x18\xb8\x0d\x3e\xe3\x4a\xc0\xbd\x0c\x9c\xab\x6c\xf1\x5d\xc3\x63\x86\xed\xef\xd2\x79\x6d\x80\xf9\x57\x4f\x90\xbc\x2e\xe0\x1a\x1f\x1d\xfa\x8b\x9d\x21\xae\x9f\x8c\x83\x63\xd5\xb1\xd8\x43\xf1\x8b\xc1\x21\x4b\x02\x3e\x03\x17\x86\xc5\x4e\x3a\x15\x01\x09\x29\x8e\x62\x4e\x72\xd9\xb6\x52\x0d\xb3\xdc\x97\x61\xb7\x8b\x28\x4a\xba\xc0\x86\x09\x22\x8b\xa2\x49\x32\x1d\x37\xc8\x58\x72\xc0\xa0\x23\x6c\x07\x9b\x23\x9c\xbd\x60\xc6\x71\x5c\xb6\xcf\x3a\xd4\xd3\x0a\x2a\x9d\x3d\x65\x4a\x86\x87\xe9\xf3\xf2\x30\xed\xf7\x11\x9d\xa4\x53\x6f\xec\x69\xdf\x79\x29\x9e\x70\x2c\x30\xf5\x18\xf4\x8b\x70\x3d\x31\x58\x8a\x1e\x10\x52\x5b\x58\x14\xae\x1c\x66\xe1\xea\x28\x73\x3c\xb7\x9e\x39\xb9\xd4\x28\x49\xcb\xe9\x6d\x69\xd4\xa1\x24\x97\x2d\x08\x92\x4f\x7c\xdd\x84\x38\x23\xf9\xe4\x60\x8a\x8e\x18\x19\x8e\x4b\x49\x49\x68\x97\x10\x9b\x4d\xcc\xc9\x1e\x50\x18\xd8\xa5\x9a\x19\x69\x0f\x9e\x2e\xaa\x05\xc3\xa3\x21\xc2\x7c\x0a\x67\xeb\x96\x0c\xf1\x31\x19\x62\x09\xb7\xce\xc8\x10\xbf\x24\x43\xfc\x91\x0c\xf1\x35\x19\xe2\xd7\x64\x88\xcf\xc9\x10\x9f\x92\x21\xfe\x44\x86\xf8\x3d\x19\xe2\x37\x64\x88\x3f\x90\x21\xfe\x85\x0c\xf1\x3b\x32\xc4\x27\x64\x88\xdf\x92\x21\xfe\x8d\x0c\xf1\x2b\x32\xc4\xdf\x91\x21\xfe\x7e\xd7\x4b\xa9\x33\x48\x50\xd8\xee\xcd\xf1\xab\xef\xbf\xb5\x81\x9d\xb5\xae\x86\x31\x72\x0e\x1c\x0a\xab\xa4\xb3\x40\xff\xe4\x82\xde\xd0\x4c\xbc\x4e\xd2\xf4\x32\x99\x5d\x17\xe4\x9e\x66\x73\x89\x71\xc1\x2b\xdc\x78\x32\xdd\x9a\xc7\x58\xb6\xa2\x46\xd6\xf4\x6e\x1e\xc4\x5c\x92\x39\x85\x6b\x30\x29\x45\xce\xcb\xcc\x8e\xc8\x24\x9c\x55\x82\x35\x05\x08\x38\x64\x5d\x37\x9b\xfb\x6d\x3d\x0e\xb1\x5f\xc6\x88\x36\x81\xf0\x53\xac\xd4\x85\x9f\x44\x5a\x0b\x8f\xdb\x0a\x7b\xc0\x6b\x68\xe6\x92\x67\xaf\xe4\x3a\x84\xad\xe9\xc4\xcd\xe6\xca\x96\x3a\xce\xe6\xd5\x32\xc7\xd9\xdc\x95\x80\x88\x83\xa7\x65\x76\xfc\x79\xcd\x38\x9d\x9f\xab\x25\x53\x79\xbc\x92\x0c\x0e\x53\x94\x2a\xb7\x5f\xfb\xa5\x5a\xc5\xe3\x2c\x78\x9f\xfe\xad\xdf\x57\x1c\x11\xb7\xeb\x0c\x36\x34\xfe\x2e\xf0\xa6\x2d\xe0\x83\x0b\x9a\xcd\x25\x93\xa4\x03\xd2\x54\x26\x79\x11\x48\x93\x37\x9b\x5c\x8b\x2e\xd6\x46\xbe\xac\xe3\x25\x57\x07\x87\x76\x29\x31\xc1\xa1\xf2\x87\x7f\xac\xed\x5e\xa9\x0b\x50\xaa\x24\x00\xa1\x32\xbd\x39\xcd\xba\xa5\x3d\xeb\x9a\xd8\x4c\xec\x28\xa6\x36\x62\x83\x62\xce\xf4\x88\x62\x84\xc6\xb1\x67\x2a\xfa\x5d\xbf\xdf\x70\x1b\x8c\x23\x26\x84\x5f\xf5\xfb\x98\x36\xf6\x0d\x50\x71\x55\x41\xcc\xa0\x63\x7d\x66\xda\xbc\x10\x9c\x5d\x5d\x51\x1e\xf7\x60\xa2\x3d\x2c\x89\x48\x14\x1e\x25\xa5\x3a\x0e\xea\x51\x34\xdc\xca\xcf\xb6\x19\xd8\x98\x11\x28\x70\x05\xc1\x71\xb5\xa2\xa3\x03\xeb\x7b\xf6\x6a\x78\x94\xdb\xf9\xdd\x9a\x5a\x0d\x7d\x75\xad\xbb\x92\x0f\xef\x5e\xd2\x6e\x62\x65\xd7\x3d\xe4\xbb\xec\xa8\x40\x81\x2a\x01\xca\xdb\x9a\x07\x03\x00\x39\xfa\x2e\x34\xd0\x05\xf2\xaf\x7b\x49\x67\x49\x29\x51\xa3\x22\xfb\xc0\x44\xdf\xd2\x7d\x56\x9f\x41\xce\x6e\xb1\x68\x37\x80\x6f\x1e\xd3\x1e\xdd\x6c\x1e\x3b\xae\xc5\xe2\x0b\x06\xa6\xee\xc0\xde\x08\x22\x9d\xa0\xd0\x2a\x85\xfb\x56\x29\x5a\xba\x2b\x20\xf2\xc8\xde\x10\x73\x6b\x16\x84\x47\x08\xb3\xfd\x7d\xa0\xa8\xf7\xb2\x47\x8c\x6d\x66\xf6\xc7\x92\xc8\xfe\x90\x20\x3c\x65\x19\xdc\x97\x97\xe6\xbe\xb4\x23\x3f\x2c\x08\x95\x00\x8c\x13\x2a\x91\x5f\x46\xe8\xe4\x20\xd4\x38\x91\x10\x27\x36\x76\x48\x7c\xf0\x4b\x1e\xde\xc9\x8f\xbf\x4b\x1f\xb2\x55\xaf\x93\x39\x5d\xd0\x2a\xc7\x89\xee\xaf\xfb\xfd\x8e\x13\xaa\x57\x09\x02\xfd\xec\xa3\x28\x91\xec\xc5\xd3\xa3\x6c\xff\xe9\x78\x88\x70\x4e\x9e\x1e\xe6\xcf\x33\x15\x77\x6d\x92\xef\x3f\xf5\x69\x91\x3c\x1c\x87\x61\x57\xf4\x4c\x80\x2b\x07\x84\xce\xa7\x83\x19\x3c\x18\xc6\x10\x2e\x88\x37\x31\x69\xe8\xfe\xb5\x37\xc0\x3a\x0f\x8a\xb9\x37\x40\xf1\x62\x74\x24\xf6\x47\x72\x80\x19\x19\x1d\x66\xcf\xc5\x61\x06\xa7\x25\xdb\x1f\xf9\x03\xcc\xa6\xfa\xc1\xb0\xb2\xba\x1c\x7c\x9c\x2a\xb2\x90\x29\x72\x90\x4d\x0e\xa6\x58\xcb\xfe\x00\xcb\x1f\x59\xce\xcc\xf0\xbb\xc1\x9a\x2b\xf5\x6c\x03\xb0\x62\x64\xe7\x14\x53\x1d\x98\x7e\x6f\x84\xcb\x60\xb6\x10\x05\xfc\x32\xad\xba\x48\x3b\x37\xfe\x08\x7e\x9f\xce\x01\xe3\xdc\xe0\x89\x90\xec\x8f\x8e\xd3\x0a\x27\xe2\xa3\x04\xac\xd5\x53\x71\xfa\xbf\x76\x2a\x64\xf7\x8f\x3f\x19\x95\xc1\xa2\xfb\x4f\xff\x7f\x3b\x1d\x43\x73\x3a\xec\x4b\x64\x83\xd8\xf4\xbd\xc1\x53\x69\x22\x28\xf7\x97\xcf\x01\x08\xd9\x08\x64\xfb\xf5\xdf\x58\xc0\x52\xd3\x89\xfb\x32\x48\xa3\xdf\x8b\x2c\x1f\x9f\x1d\x19\xb3\xc1\xf1\xd0\x89\x47\x87\x51\x54\xc6\xd9\x24\xdf\x07\x09\x78\xec\xd1\xef\xc6\x5d\xdd\x68\x88\x10\x9e\x68\xb6\x64\xba\xfd\xd2\x31\xd0\xc9\xd3\x0a\xd0\x83\x29\xc7\x46\x98\x26\x17\x41\xe2\x00\x21\x42\x53\x83\x0f\x1e\xd1\x73\xd1\xda\x29\x27\x42\x0b\x22\x64\xa7\x8c\x08\xd9\x69\x4e\xc4\xe4\xa9\x3c\x03\x62\xf2\x4c\x9e\x01\x27\x22\xda\x6c\x12\x5c\x92\x05\x44\x08\xf7\xe9\x72\x17\xb3\xa3\x44\x26\x14\x8d\x1a\xa6\x2c\x59\x1c\xdd\x8d\x19\xce\x11\x2e\x8c\x40\x1d\xe0\xb6\x1a\xbf\xe2\xb5\x6c\x54\x49\x68\x0e\x1e\x14\xb4\x22\x74\xd9\x7f\xd6\x09\xf2\xd2\xe9\x1e\x21\x77\xf6\xad\xc5\xa6\x12\xe6\xc5\xb7\x80\xab\x2f\x89\xc6\x59\xb0\x28\xbf\xfc\x5e\x8b\x52\xba\x73\x91\x44\x51\x82\xd3\x60\xfc\x78\xa6\xd7\x28\x75\x0b\x33\x6b\x58\x98\xd2\x2c\x4c\xd9\xba\x30\x4a\x2d\x32\xa4\x8a\xd5\x33\x7b\x3f\xc7\x6b\x32\xeb\x3f\xeb\xa4\x93\xb5\x24\x15\xee\xe0\xf8\xdd\x21\x4c\x49\x3a\x99\x99\x05\x5c\x91\x79\xbc\xd4\xe3\x98\xf5\x0b\x42\xc8\x0a\xa5\x93\xd9\x94\x2c\x31\xd4\x63\xae\x9b\x9b\x70\x0f\x66\xfd\x3f\x4f\x83\x95\x37\x14\xc8\x0a\x0f\xf1\x52\x52\x9d\x20\x5a\xbc\x41\xb8\xa9\xd0\x0c\x17\x68\x2b\xcf\xcc\xcc\x4c\x8d\x53\xa0\x86\xd3\xf4\xdc\x63\xf2\xe2\x70\xcf\x14\x55\xad\x19\x17\x6f\xdf\xde\x59\xaa\xd5\x6a\x23\xb8\x16\x5a\x38\xc4\x0a\x85\x2e\x9b\x5f\x26\x45\xbd\xed\x50\xaf\x56\x4d\xa2\xfa\x38\xa3\x19\x00\x37\xc4\xaa\x40\xeb\xa4\xdf\xc7\xc6\x34\xc8\xb0\x0f\x9d\x07\x35\x1a\x8e\xfc\x91\x9e\xc8\x63\x01\xc3\x8b\x29\x1a\xef\xc5\xc6\x5a\x4b\x72\x21\x9b\xcd\x1e\x55\xfc\x00\xfc\x52\x22\x4f\x14\x45\x3a\x51\x0f\x4a\x9b\x63\x84\x20\xb8\xae\xb9\x5f\x05\xd1\xb2\x4e\xb3\xb0\xce\xb7\xe5\xe8\x18\x79\x21\x60\x01\x3d\xc9\x7b\xbd\x30\xe3\x3a\x0f\x8e\x67\x79\x99\x09\xca\x75\xd0\x41\xf3\x85\xd5\x0a\x8f\x97\xc1\xf5\xc5\x05\x3e\x40\x38\xe0\x96\x74\xf8\x96\x0a\x7f\x64\xb1\x66\x9d\xbd\x02\x3f\xdc\x4d\xca\xcd\x22\x8a\x6a\xe2\x40\x3d\x8b\x2d\x82\x08\xe7\x17\x3b\x14\xe5\x2b\x03\xd0\x32\x2d\x27\xce\x26\xa2\x2e\xcf\xa6\xd9\x1c\xa8\x6e\x3a\x07\x4f\x62\x79\x29\xd9\x22\xc9\xab\x69\x06\x00\x33\xc9\x02\x08\x7e\x77\x9f\x11\x2d\x5c\x06\x05\x16\x96\x25\x69\x7a\x07\xf6\x82\x0c\xb1\x45\xcc\x24\xe5\xaf\xe4\x7e\x5e\x60\x97\x40\xf8\x5b\x95\xfc\xea\x1b\x6b\xb0\xae\x39\xfe\xb9\x7a\x61\xea\x7e\x89\xf4\xc6\x13\x66\x1b\xcf\xb4\x15\x7e\xd6\x39\xce\xae\x36\x69\x1d\x98\x58\x66\x15\xf4\x54\x25\xe5\xe5\x8b\x33\xc0\x82\x5f\x6d\x41\xc8\x20\x68\x22\xad\x62\x2b\xd1\xd0\xd3\x91\x63\x36\x54\x9d\xb1\x33\x12\x32\x42\x78\xf5\xc8\x14\x57\x5f\xab\x38\x54\xab\xbf\x73\x01\x41\xa8\x5f\xd4\x73\xf3\x96\x6e\x4e\x3f\xec\x63\x8c\x70\x86\xe4\xf6\x39\x93\xb2\xea\xb3\x15\x43\xf7\x59\xcc\xdc\x9e\x42\x65\xc9\x72\x9b\x8d\x68\xa9\xdd\x50\x1e\x46\x1a\x40\xb3\xfa\x9d\x76\x52\x99\x0a\xaa\xb0\x0a\x58\x16\x4e\x3e\x2c\x39\x53\x6b\x53\xa1\xac\x9a\x9e\x51\x9b\x09\x42\xe3\x3f\xb8\x8a\xaf\x32\x9c\x90\xdb\x7e\xdf\x88\xb6\x1b\x00\x2e\x0a\xd2\x80\x85\x97\x34\xa3\xea\x9a\x99\x09\x34\xa2\x91\x8e\xf7\x80\x3a\xd7\xae\x87\x1d\x75\xd2\x84\xa1\x0a\x3c\xc4\x0d\xad\x3f\x80\xa6\x12\x6f\x37\x1c\xc4\xde\x61\xaa\xdb\x30\xcd\x43\xd1\x27\x85\xd5\xa8\x30\xf8\x56\x4c\xfd\x70\xc7\x4d\x23\x16\xfb\x23\x5c\x20\x00\x08\xe2\x01\xac\x8a\xf7\x86\x56\x8c\x05\x23\xd6\xf7\xb0\xe5\xb4\x3f\x28\x9e\x01\xdf\x70\x3b\x9c\x68\x64\x13\x36\x55\x97\x59\x5f\xab\x50\x06\x59\x3b\xaf\x0f\x09\x7a\x7d\xd8\x13\xdc\xbb\x10\xbc\x05\xbd\x98\x5c\xb8\x35\x6a\x20\x8d\xe5\x1a\xdf\xf1\x42\xfa\x4d\x90\xa1\xe7\x16\xda\x2a\x39\xf8\xe2\x5c\xf3\x5e\x55\x39\xe5\x87\xe2\x39\x57\xfb\x0b\xef\x5c\x13\x31\x7d\xc1\x10\xa8\xe3\x75\x8c\x62\x9c\xe8\x3f\x83\x95\xcd\x25\x1d\x6b\x1e\x66\x65\x32\x70\x5a\xf2\xc7\xd3\x29\x4e\xe1\x87\xa1\xc0\x2a\x40\xcf\x31\x55\x19\x4e\x70\x89\x73\xc9\xf0\xa6\x68\xbb\xa5\xe6\xa8\x0c\xad\x5b\x86\xe6\xeb\xa2\xb6\xa9\xe9\xec\xd4\xf7\xaa\x9d\xe4\x6a\x6f\xba\x56\xc7\x6f\xd6\xf7\xa1\x56\x39\x09\x2d\x00\xcc\x34\xde\x54\x05\xb5\xbf\x1d\xa8\xb1\x3c\x30\x49\x09\x8e\xf6\x9a\xc1\xd1\x7d\xfd\x68\xa8\x17\x9f\xa6\x9d\xc7\x9c\xbc\x4f\xc4\x72\xb0\x4a\x3e\xc7\x43\x4c\xf7\x45\x00\x76\xdc\xc0\x2a\x75\x3d\x7d\xdc\x1d\x52\x7c\x8b\x26\xdb\x89\xbb\x9b\x9a\x2f\xc4\x8a\x40\xdb\xa0\x51\x6a\x17\x39\x80\xfc\xbb\x20\xba\x6e\xb7\xf9\x12\x1a\x1a\xa3\xfe\xbe\x81\xb4\x0c\xba\x5a\x34\x00\x97\x6f\x35\x4f\x56\x5f\x55\xfa\x59\x18\x11\xbd\x79\x30\x00\x5a\xa9\xc3\x8f\x94\xbb\x95\x71\x03\x56\x1b\xee\x34\xf0\x35\x64\x68\x8b\x91\xef\xbd\x7a\x90\x3a\xc6\x34\x9b\x8f\x3f\x63\x00\x88\xc5\x58\xa7\x9e\x41\xea\x70\x8b\x75\x5f\xc5\xf8\x5e\x75\x32\x1f\xbf\xc5\xb3\x7c\xb5\x4e\xa9\xfc\xfd\xdb\x16\x4b\x8a\xf8\x25\x96\x14\xcd\xf8\x23\x06\x11\xd4\xf8\x1a\x9b\x35\x18\xbf\xc6\x55\xb9\xd8\xf8\x1c\x5b\x41\xd5\xf8\x14\xfb\xa2\xa0\xf1\x27\xec\x69\x74\xbf\xc7\x80\x95\xc7\x6f\xb0\x61\xf9\xc7\x1f\xb0\x61\x74\xc7\xbf\x60\x9f\x7f\x1a\xbf\xd3\x9f\xe3\x13\x9c\xe6\xf9\xba\x18\xdf\x8b\x5c\x24\xe9\xf8\x15\xce\x68\x21\x47\xfa\xdd\x76\x6b\x9d\xa2\xf8\xa0\x6d\xa7\x05\x74\x00\x04\x9d\x09\xf4\xf7\x03\xf5\xc8\xb5\xc6\xdf\xd7\x4c\x04\x74\x8a\xa4\x42\xb4\xbd\xc2\x8f\xe4\xfb\x8e\x33\x1c\xf8\x51\x19\x27\xcc\x93\xab\x7d\x88\x8a\xfb\x28\x0b\xb6\x46\xbb\x83\x07\x02\xd6\x5e\xdc\x50\x2e\xd8\x4c\x2b\xbd\xf2\x26\x57\x54\xa1\x6f\x00\x43\xf3\x34\x7b\xf0\xe8\x19\x99\x41\xf7\x9f\xd7\xf4\xee\x9f\x5d\x56\x74\x39\xfd\xb5\x94\xb7\xb6\x17\x04\x33\xb2\xfd\x82\xc7\x9f\x64\x3e\xd7\x51\x4e\xc1\xf7\x17\x91\x68\x93\x2d\xe2\xda\x4b\x24\x47\x50\xf6\x78\x7e\x45\xe3\x1c\xab\x7a\x1c\x79\x1e\x67\x6f\x6c\x08\x73\xfb\x74\x90\xf4\xfb\x4d\xb5\x20\x3a\xb9\x72\x85\xd5\xd4\x53\xe6\xd5\x51\x35\x32\x84\x73\xaf\x27\xd5\x4b\xd6\xdc\x8b\xae\x21\xfb\x00\x75\x99\xca\x72\xca\x32\x45\xc3\x9a\xc2\xca\xc0\x5a\x58\x77\x65\x7e\x4d\x9a\x34\xc5\x16\xb4\x2b\x39\xb8\x4d\xd2\x6b\xed\xf3\xc2\x55\x12\xf9\xba\xc8\xb9\x68\x88\x1e\x92\xcc\x94\xb7\x02\x6d\xa0\x6a\xce\x8e\x71\x29\xbf\xf3\xd8\x84\x2a\xa2\x85\x0d\x52\xa9\x65\x60\xeb\x44\x2c\xfd\x6f\x4e\x0b\xd9\x34\xa4\x3c\x7c\xc4\x5a\x0f\xd7\x8a\x15\x05\xcb\xae\xba\xd7\xf4\xce\x73\x38\x2d\x21\xe2\x70\xe3\x0d\x0b\x67\x64\x78\x98\x3d\xe7\x20\xe9\x65\x8b\x58\x6b\x08\x4d\xb2\x29\x1a\x5c\xd3\xbb\x80\xa6\x0c\xe4\x88\x7a\x56\xbc\xaf\xf8\x80\x09\x9f\x92\x7b\x36\xff\x3c\xe6\x58\x02\x04\x8a\x6f\x92\xd4\x12\xf4\xca\xa5\xfa\x22\x55\xce\xd4\x8d\x14\x74\xdb\xb8\xd7\x15\x21\xbf\x42\x48\x4b\x3a\xbb\x96\xdf\x72\x48\x6e\x32\x30\x95\x96\x79\x88\x49\x06\x04\xf1\x80\xcd\x3f\xeb\x09\x74\x44\x30\x68\x39\x62\xc8\xc6\x74\x20\x71\xba\x04\xfd\x81\xf7\xb2\x24\xbd\xae\x9f\x04\x1d\x69\xc4\x13\xa9\x0f\x0d\x95\x5e\xf5\xa5\xa3\x70\xcf\x44\x4c\x3b\x5c\x76\xa0\x85\x41\x37\xac\x60\x22\xe6\xb8\xd7\xd3\xf1\xfe\xe1\x6c\x79\x3b\x8f\xab\xa7\x12\x66\x5f\x7f\x61\xa5\x7a\x7f\x1a\x04\x08\xb3\xbb\x59\x4a\xbb\x73\x2a\xc0\x5d\xcd\xb8\xdb\xeb\x8b\x7e\xaf\xfb\x7c\x5f\xfe\x80\x7b\x2c\x29\x16\xa7\x25\xbf\xcb\x2b\x92\x66\x33\x26\x74\xc2\xa7\xd3\xaf\xea\x11\xc6\xe9\xba\xdf\x1a\xc6\xc5\xc4\x6c\xf1\x56\x85\x5a\xb2\x53\x5e\x8a\x8a\x9a\x7a\x46\x9a\x7a\xd1\x1e\xdf\x2a\x2b\x29\xab\x07\xb0\x3f\xeb\x13\x33\x9c\x2d\xc2\x6e\xe0\x19\xda\x56\x8e\x21\x0c\xab\x46\xc5\xfa\x8e\x3b\xcc\x4d\xf6\xc6\x68\x92\xd4\x0e\xda\xc4\x8e\xe3\x0f\x86\x86\xec\xd3\x8b\x4b\x9f\x8b\x43\xaa\xdd\x07\x4e\xe8\x74\x20\x2f\x07\x91\xcc\x96\x3f\x16\x58\x95\xf6\xc7\xe7\x20\x14\x36\x4c\x99\x11\x6f\x18\xd0\x3b\x37\x71\xcf\xe4\x3d\x38\xb4\x80\xde\x08\x84\x86\x1b\xae\xe4\x30\x80\x4f\x5e\x90\xa1\xaf\xe9\x39\xc9\xa7\xca\x5e\x40\x0e\x0e\xcd\xf2\x4c\xb0\xac\xa4\x2e\x89\xec\x0d\x4d\xf4\xbd\x1c\x61\x41\x08\x49\xe0\x82\x2a\x7e\x45\xf7\xfc\xdf\xb9\xd9\xd2\xb2\x58\xbe\xcb\x66\xf9\x8a\x65\x57\xb1\x56\x59\xee\x7a\x41\x79\x74\xe1\xca\x76\xf8\xb5\x76\xb9\x4f\x50\x6b\xb1\x33\x16\x0f\xb8\xf6\xd2\xc0\x0d\xc6\xbf\xd9\x08\xeb\x2e\x7e\x27\xf6\xa8\xb8\x0e\x03\xff\xe7\xe6\x92\x3c\xcf\x9c\xfb\x30\xb5\xfc\xea\xae\x74\x44\xcc\xe4\x6a\x60\xf0\x6c\x69\xd5\x8f\xb3\xc7\xe1\x8a\x26\xc0\xdf\xe8\x5d\x67\xe2\x55\xeb\xf7\xa7\x64\xb8\xa1\x95\x05\x0c\xbd\xeb\x18\xdf\x36\x00\x8c\x26\xfb\xfb\x5e\x75\xed\x2a\x48\x51\x53\xbe\x49\xe7\x63\x29\xaa\x5b\x9e\xac\x3f\x24\x82\xdd\xd0\xb3\x72\x4d\x6b\x26\x3a\x20\x40\xf7\x62\xb1\x73\xa3\x3a\x6f\x97\x01\x34\x1f\x0d\xb7\xe1\xe6\x40\x42\x67\x4e\xde\xec\xf0\xbd\xf5\xbc\x99\xf3\xf1\xbd\x8e\xf9\x84\x69\x56\xae\x34\x69\xbc\x37\xc2\xb7\x9c\x09\xf5\x7b\x88\x67\x79\xb6\x60\x57\xa5\xce\x1b\x6e\xb7\x48\xbd\x24\xc6\x14\x67\x08\x8b\x38\xd3\xd0\x77\x26\x09\xff\xd7\x49\x9a\xbe\x0e\x81\x2f\xba\x1f\xaa\xf8\xb6\x5e\x2c\x05\x12\xea\x63\x0f\x3b\xb4\x75\xe8\x9a\x85\xe2\xca\xeb\x05\x7f\x60\x22\xf4\xa1\xa1\x3b\x9d\x21\xa1\x85\x92\xe0\xa5\xf7\x8a\xce\xcf\xe9\x4a\x32\x42\xf4\x04\xc2\x69\xa6\xb5\x71\x4a\xcc\xba\xd9\xc4\x82\x50\xe5\x93\x37\x1e\x22\xe7\x81\x6c\xc0\x93\x5b\x22\xc0\x4b\x8a\xcf\x07\xd5\x84\x3f\xaa\x7b\x11\x45\x59\xb0\x27\x02\x69\x8f\xa2\x1c\x72\x30\x0f\x7d\x9b\x29\xa7\x75\xe7\x4b\x56\xb8\xc8\x88\xca\x2f\xdb\x3a\x2f\x0a\x76\x99\xd2\xd7\x6e\x29\x4e\xa1\x62\x83\x7a\x51\xd5\x17\x9d\x1c\x85\x96\x0b\x6c\x36\x0d\x3a\xa5\xa2\x46\xc5\x30\x4d\xfe\xa9\x96\x20\x1c\x5c\x39\x13\xa5\x24\x6d\x6b\x1e\xa1\x86\x5b\xcd\x1f\xe8\xed\x54\xfe\x66\xd5\x7c\x3f\x2e\xf4\x23\xfa\xfb\x64\xed\x1f\xe5\x06\x87\x83\xa2\xc1\xe1\xa0\xa4\x43\x3a\xd9\xc0\x1d\x59\xe2\x7f\x6c\x36\x7b\x23\x08\x39\xe4\xf6\x5e\x42\xdd\x1e\x1c\x90\x1e\xcb\xba\x19\xc4\xcd\x30\xe7\x84\xec\x0d\x11\xd6\x63\x54\xb6\xe9\xc6\x2d\xae\x3c\xe0\x00\x8e\x32\xdf\x02\x38\x70\xba\xb6\xf5\x6e\xfe\x13\xb0\x64\x0a\xad\xbc\x35\x73\xd2\xc3\xbd\xff\xab\xca\xec\x33\xc9\x0c\x67\x49\x5a\x3c\xa1\xd9\x0d\xe3\x79\xa6\x4c\xf7\x7b\x59\x3e\xa7\xfb\xab\x5c\x32\xa1\x8d\xa5\x4b\xc1\xd2\xa2\x31\x47\x22\x99\x84\x81\x81\xb9\xc9\x65\x70\x18\x64\xcb\x60\x58\xdd\x58\x6d\x45\x45\xd2\x9a\x91\xba\x9c\x59\x92\x25\xfc\x6e\x7f\x41\x13\x51\x72\xea\x0d\x01\x42\x98\xf7\x70\x60\xe1\xde\x3c\xbc\x22\xf7\x27\x25\xc7\xcb\xf3\x34\xf5\xcb\xbb\xb4\x27\x29\xbb\xf4\x3e\x2f\x56\xec\x33\xf3\x26\xa0\xf9\x28\xf7\x4d\xf9\x0d\x9b\x79\xad\xeb\x43\x5e\xf9\x7e\x32\xcb\x57\xeb\xa4\x39\xb9\x14\x74\xde\x38\x72\x1d\xc6\xab\x31\x4f\xfb\x81\x31\x86\xfc\x4f\x6e\x28\x2f\xda\x56\xfa\x86\xd1\xdb\xe6\xad\xe3\x79\x29\x82\xe9\xf8\xc7\xe3\xb3\xa0\x99\x6c\x73\x5f\x47\xc1\x71\xa5\xa8\xa4\xc3\xdc\x27\x2f\xb3\x34\xcf\xd7\xcd\xad\xc8\xa2\xfb\x10\x63\xb6\xad\xa3\xfc\x36\xd8\xba\x64\xbd\x4e\xd9\xac\x72\x6e\xbc\xc4\x27\xca\x12\xb0\xd8\xd7\xae\x01\x9a\xab\x3e\x31\xef\x56\xde\xa8\xb3\x2b\x96\xd5\xbe\x1b\x0a\xae\xf3\xf4\x6e\xc1\xd2\x34\x38\x6b\x6b\x4e\x67\x89\xa0\x73\x77\x10\x43\xaf\x09\xc6\xec\x06\x14\x5e\x4a\x9c\xe2\x19\x5e\xe0\x25\x9e\xe3\x35\x5e\xe1\x1b\x7c\x85\xef\xf0\x25\xbe\xc0\xb7\xf8\x18\x7f\xc6\x67\xf8\x25\xfe\x88\xaf\xf1\x6b\x7c\x8e\x4f\xf1\x27\xfc\x1e\xbf\xc1\x1f\xf0\x2f\xf8\xdd\x63\x24\x1e\x27\xa4\x06\x49\xb9\x84\x36\x82\x7e\x16\x03\xb6\x82\xab\x3f\x38\x96\xc3\x8e\xa2\x96\x8c\xcd\xe6\x7e\xdb\x39\x19\xb0\xe2\x83\xf1\x27\x2f\x21\xd4\xc9\x40\xe4\x2a\x02\x59\x9d\xfa\xe8\x41\xbd\xde\xb6\x05\x52\x9d\xe0\xde\xf1\x87\x1f\x7a\x18\x02\xae\x03\x91\x70\xfc\xe1\x87\x10\xa7\x6f\xdb\xa0\xdc\x09\xee\xa5\x79\x7e\x5d\xae\xfd\xea\x27\x90\x02\x1e\x76\x01\xd9\xeb\xef\x6a\x8b\xef\x06\xc7\xef\x5f\x1d\x9f\x5e\x1c\xff\xc7\xf9\xf1\x87\x37\x17\x9f\x4e\x3f\x9e\x7f\x3c\xff\xe9\xd3\xf1\x59\x14\xb5\x0f\xb4\x5a\xb6\x87\xef\x43\xea\xa3\x59\x16\xc6\x07\xc7\x1f\x7e\x18\xd4\x6a\x4b\x10\x7c\x22\x87\xfc\x51\x9e\x63\x72\x6e\x7f\xe2\x13\x39\x70\x93\x5a\xb8\xd4\x97\xee\x98\x92\x53\xb3\xc3\xf8\x64\xf0\x46\xfd\x3a\xd5\xe7\x9a\x9c\x0c\xec\xcf\x4f\x5e\x31\xaf\xba\x15\x0a\xbf\xf7\xf2\x8f\xe1\x5c\x93\x37\xb5\x24\x5b\xfa\x83\x97\xa5\x1d\xcf\xfe\xa2\x7f\xe0\x93\xc1\x8a\xf2\x2b\x4a\x7e\x51\xff\x61\x6a\x19\x84\xf7\x56\xbe\x58\x83\x4f\x7c\x32\xf8\xf6\xfb\x77\x6f\x2e\xfe\xfd\xf8\x27\xc2\xec\x4f\x59\xa7\x64\xf3\xb7\x39\x97\xc5\xd5\x2f\x7c\x32\x60\x59\x01\x0e\x56\x99\xf9\x25\xfb\x4a\xae\xa9\x72\x67\xc6\xdc\x6f\x7c\x32\x98\x25\xd9\x3b\x65\x93\xc8\xdc\x6f\x79\x40\xf9\x9d\x4d\xb7\xbf\xf1\x09\x90\xb1\x84\xc1\x3f\x7c\x32\x28\xd5\x48\x4b\x35\xc2\xd7\x06\x3f\x91\xdc\xfd\xc6\x27\xda\xc1\x16\xbf\x23\xb9\xfd\xa9\xd6\x83\x72\x41\x66\xfa\x87\x6c\x3b\xe1\x19\x99\xc1\x3f\x7c\x32\x00\xac\x43\x66\xea\x3f\x7c\x6b\xc8\x00\x69\xfa\xb7\x9f\xfe\xb6\xcc\x66\x7e\x9e\xfc\xee\x9c\x0c\x78\x99\xbd\xcb\xde\xe8\xc6\xdc\x87\xdc\x2c\x30\xa2\xfc\x18\x1c\x0c\x59\xec\x9e\x6b\x8f\x60\x6f\x74\x53\x2c\xcf\xbe\x83\xe0\xdd\x7c\x3c\x1b\xb4\x67\x62\x93\xf5\x63\xc2\x1b\x2a\x78\xa9\x98\x15\xaf\x35\x42\x1a\x97\x03\xf7\xb1\x55\xbb\xa7\x51\x3a\x49\xbc\x0f\x79\xc8\xcb\xcb\x62\xc6\xd9\x25\x25\x89\xfb\x8d\x4f\x06\xef\x42\x22\x80\xdc\xbb\x5a\xe3\xa0\x09\x5b\x69\xec\x37\x50\x66\x7e\xba\xf7\x85\x81\xdd\x1f\x27\x8a\xed\x97\x63\xe3\x65\x46\xae\x07\x17\x1a\x31\x9c\x96\x99\x4a\x1b\x38\xca\x80\x5c\x7b\x1f\x26\x17\x8c\x06\xae\xd5\x7f\x93\xc6\xb2\xb9\x4c\x62\xd9\x5c\xa7\x68\xe5\x9f\x6b\xfd\x43\xa7\x5a\x4d\xb3\x6b\xfb\x53\xe7\x50\x68\x80\xda\xfa\xcb\xa4\x38\xd3\xc2\x7d\xf3\x18\x79\xdd\x90\xa8\x4b\x83\x4a\xc4\x35\xfc\xd3\x29\xea\x4d\xfe\x5a\xfd\xd7\x69\xe0\x55\xf1\x5a\xbd\x96\xa8\x94\x5c\x8d\x25\x77\xe3\xb0\x6a\xc7\xd7\xf6\x67\x25\xe7\xa3\xaa\xe3\x7f\xea\x12\x56\xb9\xf0\xda\xfe\x0c\x56\xc3\xce\xc3\xff\x6c\x83\xee\xb2\x1e\x36\x7e\xdc\x4f\xcb\xec\x04\x48\x05\x80\xf4\xd7\x12\x56\xbe\x0e\x72\xaa\x10\x1e\x30\xde\x5b\x52\xda\xdd\x35\x67\xb2\xc3\x16\xf1\xc9\xc0\xd0\x4f\xe4\x2d\x3e\x19\x5c\xcc\xa9\x0a\x38\x90\x73\x52\x0e\x32\xe0\x6a\xdf\xd0\x62\xf6\x86\xce\x72\x9e\x08\x00\x42\x17\x02\x5c\xe2\xcf\x49\x39\xd0\xbf\xf0\xdb\x41\x92\xb2\xa4\x20\xa5\xfa\x0f\xd0\x67\xb6\xa4\x6f\xa1\x15\x39\x40\xf9\x35\x07\xef\xe4\x0a\x90\x99\x21\xd8\x18\x1b\x65\x2d\xa9\x1d\xd5\x5d\x14\x54\x98\xd2\x76\x60\x7a\x3d\xea\x38\xa7\x94\x78\x03\x38\x39\xe6\xa6\xa1\x30\xce\x45\x43\x0e\x69\x2c\x0f\x30\x5d\x24\xa4\x80\x7f\x0a\x59\xa9\xa9\xa9\xdf\x3f\x32\xb1\xd4\xb8\x47\x25\x7b\x09\xb2\xa3\x2b\x2a\x3e\x25\x62\x09\x9b\xa0\x7e\x2a\xd4\xa6\x7a\x53\x50\xf9\x0c\x3e\xd5\x0f\x7c\x32\x78\x7b\xfc\xf2\xfc\xfb\xd3\xe3\x33\x12\x0f\xb1\x41\x2d\x28\xbe\x67\xc5\x71\x26\xb7\x76\x3e\x4e\x07\xf6\xf7\x16\xa7\xb6\x3c\x4c\x0c\x16\x9c\xb0\x01\xfc\xc7\x27\x83\x3c\x23\xe5\x20\x97\x17\x22\x99\x83\xdf\x4f\x89\x81\xe4\x76\xb9\x2f\x79\x3c\xc1\x25\xa9\x97\x1d\x26\xc0\x90\xb3\xf9\xf1\x8d\x84\x60\xa5\xfb\x8d\x4f\xe4\x6d\x34\xa5\xe4\x29\xf0\x3f\x31\x10\x49\x79\x46\x49\xa9\x7f\x40\x8a\x62\x36\x4b\xf3\x0b\xd2\x5e\xa5\x49\x76\x0d\x69\xf0\x0b\xd2\x3e\x29\x47\xe3\x90\xaa\x7f\xe3\x93\x41\x96\x0b\xb6\xb8\x33\x87\xe2\xf5\x32\xc9\xae\x64\xfb\x4d\xc9\x72\xf6\x37\x94\x73\x36\xa7\xaf\x97\x09\xcb\xe4\xf8\xc2\x04\x7c\xa2\x00\x58\x58\x4f\x96\x6b\x4a\xc6\x27\x12\x34\xd5\xcb\xd6\x13\xe5\x35\x80\x5f\x3a\x9d\x41\xb9\x6a\x12\x3e\x19\x58\xc3\xad\xfb\xf0\xb0\x8f\xf7\x86\x78\x99\x14\xe6\xf3\xe5\x6c\x46\x8b\x22\xe7\xc5\x78\x6f\xb8\x05\xfc\xe8\x17\x26\x65\x25\x01\xf0\xae\x98\x2d\xff\x9d\xca\x3c\xf3\x53\xe2\xf6\xcc\x4b\x77\x1f\xf6\x00\xc0\xaa\xfc\x08\xc1\x5a\xdc\x21\xf0\x13\xe1\x84\xc9\x6f\x70\x76\x5a\x0e\xec\x6f\x7c\x32\x58\xb0\x8c\x15\x4b\xbb\xd2\xfe\xa7\x19\x90\xbe\x09\xf6\xb7\x1b\x92\xce\xf1\xbe\x4c\x1d\x53\x1e\xce\x04\x0c\x43\xd2\xd8\xa5\xf7\xe1\x5a\x71\x2d\xc0\x22\x41\xc0\x7b\x52\x68\xaf\x1d\xef\xd5\xfd\x4d\xd9\x25\x4f\xb8\xda\x11\xfb\x5b\xdd\xe5\x60\xb7\x82\x6f\x75\x67\x83\xfc\xa2\x92\x4f\x3f\xaf\x13\x7b\x10\x54\x91\x6a\x92\xba\x84\xc6\x53\x9a\xba\x84\xe6\xcb\xee\x81\x97\x1d\x26\xc8\xda\x12\xc6\x2a\x6f\x5b\x06\xe2\xaa\x2f\x79\xd4\x5d\xbd\xdc\xd5\x00\x0e\x9c\x94\xea\x3f\x3e\x19\xbc\xd7\xdf\xf0\xbf\x1d\xd0\xe6\x99\x66\x53\x01\xb4\xbe\x06\xb2\x5c\x25\x01\x57\xf1\x1a\x28\x72\x9d\xf0\x68\x46\x45\xd0\x42\x31\xcc\xd0\xe8\x6c\xc0\x8a\x73\x95\x02\x6d\xce\x40\xb5\x43\x27\x54\xdb\x3c\x19\x5c\xbc\x72\xf4\xc8\xc2\x92\x77\xef\x06\x27\x1f\xbf\xfd\xf6\xf8\x34\x8a\xe2\x93\xc1\x49\x0e\x2a\x5b\x4b\x93\x2b\xab\xbd\x24\x17\x83\x97\xf8\x64\xa0\x59\xb3\xfb\x34\x9f\x8d\x57\x83\x34\x9f\xe1\xdb\xf1\x6a\x70\x8b\xe7\x49\xb1\xa4\x9c\xfd\x46\xc7\xab\x81\xfd\x8d\xe7\x74\x96\xac\x68\xaa\x93\xed\x07\xf6\x52\x5d\x1a\x20\x8c\xc5\x9d\x4c\xd3\x3f\x71\x99\xcd\x29\x2f\x66\x39\x97\x25\xdd\x07\x9e\x25\x6b\x26\x12\xdb\x82\xf9\x90\x57\x5a\xad\x1a\xb9\xd0\x3f\xe4\x8c\x0d\x61\xfd\x89\xe7\x9f\xef\xd4\xc6\x5d\x0c\xea\x89\x70\x27\x0d\x69\x1e\x94\x6d\x48\xc5\x0a\xed\x27\x9c\x92\x0b\xf3\x0b\xd2\xd6\x77\x90\xb0\x56\xf0\xf8\xf8\xd7\x32\x49\xc9\x85\xf9\xa5\x31\xe6\x5b\x9e\xac\xe8\x6d\xce\xaf\x95\x78\xf4\x62\x50\x4b\x03\x5a\xf7\x97\x20\x12\x04\xba\xdf\xda\xd4\x81\x96\xf8\x90\x1b\x9d\xe0\x72\x9c\xd4\x88\xcc\x5d\xa6\x62\x6f\x2e\x06\x86\xb5\x79\x0d\x23\x06\xc9\xdf\x85\xf7\x01\x5c\x9a\x95\x27\x5e\x78\x1f\xa6\x0d\x58\x01\xd3\x10\x7c\xd8\x35\x37\x59\xde\x97\xac\x35\xf3\xb8\x00\x59\xd1\xff\x86\x91\x70\x6a\xf7\xcc\x7d\xe0\x93\x81\x7a\x11\x30\x23\xf7\xbe\xa0\xd6\xfa\xce\x8e\x5e\xfd\x94\x97\xb2\x04\x61\x66\x30\x85\x5a\x9a\x2b\x67\x9a\xf6\x3f\xf1\xc9\x40\x79\xe5\x53\xe3\x3c\x53\x52\x27\x72\xd1\x94\x2a\x57\x4b\x62\x6f\x3a\x97\x4b\xa5\x7e\xe1\x93\x81\xf6\x1a\x19\x9c\xa0\x5a\x1a\xac\x9a\xdc\x45\x3d\x4c\xf7\x21\x49\x19\x90\x0e\x93\x0b\xfd\x03\x4e\x92\x19\xac\xfe\xd5\x78\xd2\xf3\xec\x24\x4f\xe6\xe4\x54\xff\x50\xe4\xb2\xfc\xf5\x5d\x9e\x5f\x17\xe4\x34\xf8\xd4\x4c\xa9\x3d\x2b\x8e\xd3\x73\xc9\x6a\xf8\x6b\x2f\xef\xcc\x1e\x3c\x97\x76\x11\x4c\xf5\x22\x98\xe4\xe9\xd9\x0f\x9f\xe4\x6d\x3b\xfb\xe1\x13\x6c\xa9\x91\xf4\x5c\xb8\xdf\xb2\x05\xe5\x6c\x85\x5c\x0d\xd4\x0f\x45\x47\xaf\x69\x36\xa7\x99\xf8\x77\x7a\x07\x27\x54\x90\xbb\x41\x3d\x11\xbf\x1d\x50\x20\x84\x2e\xd5\x7f\xfc\x56\xd2\x30\xc7\x3a\xc9\xfc\x84\xd4\x8c\x42\x4a\x46\x55\x19\x95\x8d\xdf\x0e\x2e\xf3\x3c\x25\x97\xf0\x0f\xbf\x55\xf1\x8c\xc8\xa5\xfa\x2f\x5b\x87\x2b\x7c\xa9\xfe\xe3\xb7\x83\x2b\x59\xf1\x4a\xc0\x2f\x0a\x3f\x65\x7b\xa9\x4c\x4d\x05\xfc\xa2\xf0\x53\xa6\xe6\x19\xfd\x31\x91\xe3\x50\x3f\xf0\xdb\x01\xa7\xc9\xbc\xa8\x26\x7c\xcc\x52\x59\xc8\xfc\xc4\x6f\x2d\xa3\xce\xb2\xab\x97\xc0\x17\x5c\xd6\x92\x24\xcb\x90\xcd\xc9\xa5\xfc\x2b\xbb\xe2\xb2\x55\x8e\xdf\x0e\x8a\x72\x45\x2e\xe5\x5f\x39\x19\x96\xc9\xa9\xb0\x0c\x26\xf6\x19\xa6\xf5\x19\x7e\xaf\xe1\xf7\x5a\x96\x97\x07\xfc\x12\xfe\xc9\x2f\x2a\xde\xb0\xc5\x42\x26\xa8\x5f\xaa\xf4\xab\x3b\x55\xfe\x95\x1c\xdd\x82\xa5\x92\x1f\xbc\xd4\x3f\x6c\x0a\x14\x32\x3f\xf1\xdb\x41\x99\xb1\x5f\xc9\x25\xfc\xd3\x5f\x50\x42\xfd\x50\x29\x79\xa6\x12\x72\x39\x42\x10\xc7\x16\xf2\x50\x5f\xba\xdf\xf8\xed\x60\x26\x0f\x23\xa4\xea\x5f\xed\xb8\x51\x05\xa8\x3f\xeb\xc1\xbb\x98\xf7\xec\xa5\xe4\x69\x2b\x60\x1e\x14\x0e\x2b\x00\x5b\xae\x00\x20\xeb\x94\x5d\x48\xf7\xd5\xc7\x8f\xe7\xc7\x6f\x1a\xda\xad\x4b\xed\x4a\x5f\xa6\x79\x46\x13\x3e\x5b\xbe\x61\x05\xb0\x19\xd0\x27\xd0\x3c\x2d\x05\x00\x47\x3b\x2f\xd7\xb7\xee\x37\xbe\xd5\x8e\x82\x07\x4b\xe5\x2f\xf8\x56\xff\xc0\x27\xc6\x83\xb0\x29\x21\x9b\x58\xd2\xd9\xf5\x65\xfe\x59\xb6\xa0\x7f\x4a\xd0\x46\x3f\x8b\xb7\xe0\x31\xfa\xd6\xfd\xd6\xe9\x2f\x39\x4d\x74\xb2\xfc\x89\x4f\x20\xc6\x81\x3f\x94\xe0\xdb\x30\x7f\xe6\xfb\x7d\x92\x25\x57\x30\x86\x86\x54\x59\x78\x56\x49\x7b\x9d\xac\x93\x4b\x96\x32\xa0\xf1\x6e\x25\x16\xb7\x9f\xba\x6d\xe3\x33\x3c\x68\xba\x92\x28\x8b\xae\xc2\x24\xdd\xb0\x6e\xd7\x64\x7a\xa9\x72\xc1\x00\xff\x5c\x26\xbc\x20\xf7\x42\x3f\x79\x8e\x6f\x07\xe6\x27\xfe\x5e\xb0\xb4\x18\xdf\xd3\x62\x96\xac\x3d\x5f\xca\xe3\xdb\x41\x35\x69\x2b\xb1\xf2\x77\xe7\xef\x4f\x5e\xb5\x35\xb6\xc5\x2d\x42\x5b\x4d\x4c\x45\x51\xac\x7e\x78\x8f\xef\x4b\xb1\x4a\xcf\x92\x05\xad\xcb\xc0\xe3\x21\xbe\xb5\xd9\x48\x07\x45\x44\x96\x32\x73\x35\x5d\x29\x97\xc9\x0a\x39\x52\x9d\xed\x3e\xda\x4f\xfd\xf9\xf1\xfb\x4f\x27\x2f\xcf\x41\x3c\x2d\x8f\xf6\xad\xa4\x60\xcd\x1b\xb1\xba\x41\xb7\x8a\xde\x34\x49\x3b\xaf\x07\x0c\xf4\x87\xe3\xd3\xb3\x77\x1f\x3f\x90\x63\x8f\xfa\xfc\xb7\x7f\x7c\x7f\x7c\xfa\xd3\xc5\xbb\x0f\xe7\xc7\xdf\x9e\xbe\x3c\x7f\xf7\xf1\x43\x14\xed\x7d\x1e\xfc\xf2\x8f\x92\xf2\x3b\x73\x37\x76\x88\xd3\xff\xd0\x2a\xbc\x30\x8d\x6c\xab\xef\xe0\xc1\xc8\x86\x6a\x64\x8c\xde\xc2\xce\x93\x7b\x56\x9c\xb1\xd5\x3a\xa5\xaf\x53\x36\xbb\x1e\x7f\x1e\x04\xdf\xf2\x96\x6b\x0f\xd9\xb2\xca\xf8\xf3\x20\x4c\x90\xf9\xf2\xbf\x4e\x52\xf9\x5e\x82\xc9\x57\x31\x0d\x5d\xb6\xfa\x36\xb9\xca\x99\xf7\x29\x9d\x09\xaf\x88\x97\x18\xb4\xc2\xb2\x2b\x97\x55\x69\x31\xc8\x93\xb5\x4e\xf3\x1c\x72\x75\xbb\xf6\x53\xe6\x41\xd8\x6e\x2f\xd3\x7d\x63\x56\x9c\xe9\x40\x98\x20\x4b\x7d\x6b\x42\xa7\x8f\xe5\x59\x6a\xce\xda\x6a\xe0\x62\xe8\xa8\xcf\xfe\x97\x0f\xe9\xd4\xd3\x0a\xf9\x5c\x4d\x31\x34\xd6\x1b\x56\xac\x35\x3f\xfd\xb9\x9a\x22\x41\x55\xae\x9f\x32\xce\xec\x4f\x49\x7b\x96\x22\xf7\x72\xfc\x4f\x80\x01\xc5\xd2\xcb\xf5\x3f\x65\x2e\x2b\x44\xce\xef\xfc\x02\x61\x8a\x24\x67\xf2\x8c\x7a\x05\xfc\x4f\xe0\x05\x0c\x19\xf5\x36\xe7\xe4\x2c\xfc\xf6\x9e\x34\x1c\xb9\xf5\x36\x99\xc9\x1e\xc8\x59\x7b\x5e\x63\xbd\xc6\x0a\x92\xf8\xca\x4b\x41\xf9\x9b\xb3\x13\x72\xe6\x7e\xdb\x74\x9b\x68\x52\x4c\x02\x8e\x87\x38\xa4\x15\x51\xac\x9e\xde\xfc\x67\x9f\x1e\x3e\xf5\x19\xc4\x37\x89\x48\x5e\xce\x93\xb5\x6c\xf8\xa5\xff\xe5\x3f\x7e\xc0\x1b\x82\x2b\xd5\x98\xae\xd4\xe8\x97\x89\xec\x54\x29\x13\x19\x40\xba\x2f\x51\x08\x4b\x29\xef\xa1\x28\x82\x52\xa6\xff\x1d\x25\x9b\x9a\x53\xec\xb3\x8e\x66\xfe\x1b\x69\x69\x4a\x97\xea\xc8\x13\x5c\x08\xf2\x1b\xfc\xc3\xea\x6b\x60\x26\xf1\xdb\xc0\x4d\x13\x32\xfe\xf1\x7d\xc6\x84\xcb\xf5\x3f\x95\xf0\xa3\x5c\xbf\xcd\xb9\xe6\xcf\xc9\x6f\xd5\x94\x6d\xeb\xda\x6b\xd5\xee\x57\xe4\xc4\x7b\x91\x7d\x85\xb3\xc1\xbb\xb3\x8b\x0f\x1f\xdf\x1c\x1f\x65\x03\xa5\x39\x31\xd0\x9a\x17\xe4\x64\xec\x5e\x5e\x75\x9a\x7a\x79\x25\x4d\xe9\xe4\xc4\x57\xe3\xb0\x4f\xf9\x5f\xa7\x14\xef\x12\x7a\x4f\x07\xa3\x83\xc1\xb0\xa7\x1a\x0f\x14\x3c\xda\x9a\x56\x1a\x33\xb5\xf7\x65\x55\x2d\x8a\x1a\x94\x74\xf4\xc4\xb5\xa2\x49\x47\x1c\xc5\xf6\x83\x84\x79\x98\xea\x55\xd2\xe9\x98\x9a\xf5\x23\x02\x8d\xbd\x6a\x60\x1a\x66\x0b\xeb\x2f\x57\x54\x4d\x87\xcb\xeb\xb2\xcf\xe9\x2c\xbf\xca\xd8\x6f\x61\x74\x83\x2f\xb7\x21\x08\x54\xbe\xfc\x20\x39\xd6\xc8\x46\xc5\x23\x74\xfa\x56\x17\x17\x26\x8e\x8b\x0e\xe3\x27\x93\x30\xdd\x2a\x0d\xa1\xaa\xda\x95\xd3\x1a\xd7\x2e\xc9\x56\x1a\xa2\x6a\x6f\xda\xb2\x8d\x2b\x88\x92\x0b\x3e\xce\x3d\xed\xf6\x76\x55\x52\x53\x47\x07\x8d\xe7\x10\xbb\xf9\xe5\x7c\x0e\x80\x24\x8a\x62\x4a\xc2\xa4\xd8\xef\xd8\xf8\x13\xa6\xc6\x8f\x94\x49\x4f\xe6\x73\x4f\x1f\x97\x22\xad\xbc\x05\xe6\x9b\xce\x66\xb3\xc1\x9b\x27\xb8\x82\x5a\x26\x37\xca\x83\xa7\x31\x93\x60\x59\x57\x2c\xa9\xf5\x0e\xd5\x5d\x27\x45\xa1\x1c\x7e\xfe\x53\xe4\xff\xec\x69\x83\x29\xaf\x73\x40\x7a\xfe\x08\x70\x65\x89\xd0\x76\xab\x0d\x2d\xea\x8a\xde\x39\x04\xe6\xe6\xd6\x44\x59\xb6\xc5\x69\xe6\x52\xd4\xac\x09\xf5\x62\x52\xe4\x15\xcb\x63\xdb\x2a\xc3\x89\x71\xb6\x4d\xfb\xe0\x5d\x70\x2f\x41\x5e\x0c\xce\x2c\x56\x41\xbd\x3b\x49\x9c\xeb\x9f\xbe\x9e\x56\x52\xf7\xee\x3f\xac\xbb\xcf\xef\xa3\xac\x4f\xe8\x84\x4d\x7d\xd5\x64\x6d\x37\x78\x2f\x93\xc6\x82\x08\x78\x15\x15\x10\xae\x75\xa9\xdf\x6f\xf9\xb6\x43\x8d\x1a\xef\x96\xed\xb0\x66\x09\x96\x66\x42\xa7\x44\x6c\x71\xa5\x3c\x2c\x79\x8b\xd9\xaf\x8a\x2d\xcd\x5c\xa4\x7d\xbd\xa4\xb2\xa5\xa4\xa3\x56\x47\xae\x60\x82\x33\xd4\xc9\xa2\x28\x33\xe0\xed\x58\x32\x91\x92\x70\xac\xa6\xc4\x02\x17\x08\xf3\xb8\x40\xde\x26\x14\x41\xfc\x86\x62\x9d\x32\x11\xf7\x9e\xf4\x94\x81\x7f\x8a\xe0\x41\x14\x12\xb6\xca\x9f\xe4\x93\x6f\x36\x3f\x3f\x79\x72\xd5\x69\x09\x00\xa1\x96\xf1\xf9\xd3\xcd\x66\x5f\x39\x2c\x35\xf1\xe8\x7b\xdf\xf4\xd0\x11\x1d\xcf\xe9\x2c\x9f\xd3\xef\x4f\xdf\x59\x92\x27\xa6\x68\xc0\xe9\x3a\x4d\x66\x34\x2e\x31\xcd\xaa\xf9\xaa\xe3\x19\x79\xf2\x4d\x7c\x34\x3e\x88\x8f\xc6\xcf\x36\x7f\xd9\xbc\xda\xbc\x46\x9b\xa7\xf1\xd1\xf8\xd5\xe6\xcd\xe6\x25\xda\x3c\x1b\x22\x7f\x4c\x0b\x7f\x4c\xb5\x16\xfd\x1e\x67\xb8\x3e\x22\xd5\xe3\x92\x3c\x89\x7f\x7e\xb2\xf9\x79\xb0\xf9\xf9\x4f\x9b\x9f\xfb\x9b\x9f\x8f\x36\x3f\x6f\x36\x3f\xc7\x9b\x9f\xd1\xe6\xe7\xc9\xe6\xe7\xe9\xe6\xe7\xfb\xcd\xcf\xdb\xcd\xcf\x3f\xa3\x27\x57\x78\x4e\x82\xb8\x5d\x78\x6d\x00\x9b\xc7\xde\x24\xc5\xc7\x5b\xfb\x2c\xe4\x06\xbb\xaa\xe9\x69\x5a\x27\x70\x74\xb3\x31\x76\x84\x3b\xae\xbe\xbc\xd9\xf2\xea\xab\xda\xdd\xa4\x80\x8b\x5f\xd0\x59\x9e\xcd\x1d\x3c\x90\x17\xdf\x10\x4c\xff\x1c\x28\x27\xc1\x7b\x6b\xed\x0d\x1a\x0b\xb4\xab\x03\x9e\xdf\xb0\x39\xed\xae\x13\x9e\xac\xba\xff\x04\x73\x85\x7f\xd6\x1b\xd4\x6e\x02\x27\x62\x8a\x33\x52\xb7\xb0\x3a\xe2\xe3\x5e\xaf\xcf\xad\xb7\xd5\x87\x61\x9a\xe9\x37\x09\x7b\x1e\x38\x67\xc3\xd9\x56\x39\x53\x99\x4c\x3b\x37\x93\xe1\xb4\x55\x0b\x5d\x80\x16\x3a\xe8\x81\xe2\x06\x8b\x6a\xad\xdf\x9f\x0d\x66\xcb\x84\xbf\xce\xe7\xf4\xa5\x88\x19\xea\x48\x9a\x61\x5d\x8a\x18\x4c\x7e\xf7\x46\xd6\x2e\x9d\x6f\xf1\xcd\x64\x54\xed\xcd\x7a\x18\x90\x55\x9e\xfd\x15\xef\x0d\x95\x0f\xf6\x9b\xc9\xc1\xce\xa2\xfb\x23\x68\x5e\x15\x7d\xd6\x56\x54\x81\xde\x2b\x39\xd3\xab\x70\xa6\xde\xed\x83\x09\xda\xb3\xbd\xc4\xbd\x9f\x7f\xfe\xc3\xa8\x87\xb6\xf8\x2a\x18\xae\x55\x2d\x8b\x27\xff\xf5\x64\xda\x47\x3d\x59\xe0\xa0\xb1\xc0\x40\xe7\x3e\x6b\xca\xed\xa9\x41\xdd\xc9\x41\xdd\xed\x1e\xd4\x16\xdf\xd5\x57\x4c\xed\xcd\x2a\x16\x58\x97\xb2\xfb\xfa\x7a\x70\xfc\xe1\xf5\xc7\x37\xc7\x17\x2f\x3f\xbc\xb9\x78\x73\x0c\x3f\x3f\xbd\x3c\xff\xee\xe2\xec\xf8\xdb\xf7\xc7\x1f\xce\xcf\x8e\x16\x31\x47\x63\x2e\x9b\x6d\x5b\x5d\xbf\x5d\x59\x6e\xd7\x14\x2e\x2b\xfe\x83\xef\xb7\x08\x5f\xec\xf2\x29\x7c\x6b\xe9\x0b\xcf\x7a\xfe\xd9\x5f\x01\x57\x7b\x87\x68\x28\x89\x76\x0f\x8f\x8c\x10\xf2\x1c\xa1\x09\x0f\xde\x62\x46\xac\x47\x07\xe3\x25\xa9\x6e\x08\xa8\xb0\x22\x2e\x21\x30\x38\x9e\x91\x61\x67\x74\x10\xc5\x05\x39\x78\xfe\x3c\x9e\x91\x5e\x8f\x10\x52\x1e\x3d\x1b\xff\xf9\x6f\xf2\x47\x38\x90\xa3\xd1\xf8\xd9\x41\x43\xf2\xc1\x78\x88\xe4\x28\x4b\x52\x6a\xed\xf6\x11\xc2\x31\x23\x6c\xb3\x99\x4c\x91\xc2\x74\x25\xc2\x71\x4e\x72\x2f\x65\xb8\x47\xe2\x67\x51\x81\x10\xc2\xa3\x67\x51\x11\x45\x7c\x32\x9b\xf6\xfb\x58\xa3\xc6\x7b\x79\xe9\xc7\x33\xac\x54\xf3\xd3\xb8\x44\x5b\x73\x7b\xee\xb3\x64\x45\x8b\x31\xdb\x6c\x2e\x70\xb1\xcc\xcb\x14\x94\x31\xe6\xb4\x18\xe7\x9b\xcd\x85\x87\xc6\x8f\x2b\xe4\x01\x85\x81\xeb\xe0\x44\x83\x4c\x51\x6d\x44\x07\x40\xf9\xdc\xec\xfb\x5e\x1b\xbb\x08\xe7\x91\x96\xcd\x0d\xe5\x07\xad\x69\x17\xa3\xba\xb5\xcc\x7c\x7d\x16\x67\xaa\x16\x3b\x12\x63\x2f\x8c\x70\x22\x04\xe5\x19\xe9\xf5\xac\x03\x8b\x2b\xfa\xd9\xec\x17\x24\x69\x32\xa1\x08\x12\xe5\x6a\x98\x14\x0f\xf7\x9e\x05\xe7\xd5\xcc\xe9\x48\x4d\x74\x0f\x26\xba\x0f\xb1\x31\x20\x61\xec\x16\xc0\x62\x57\x99\xe0\x85\xfc\xaf\x82\xbd\x89\x84\xc4\x92\xf6\xb1\x74\x4f\xf6\x9c\x81\xd1\x9f\x8d\x1c\x94\x4d\x3b\x9a\x35\x9a\x25\x22\xce\x15\x41\x18\x0b\xe4\x01\xbb\xcf\x81\xc1\x97\x9c\x70\x9b\xb9\x32\xe4\x6e\x36\xb1\xbf\x38\x12\xb0\x9f\xd2\xab\xe3\xcf\xeb\xd8\x5f\x43\x84\xfc\x25\xdc\x62\xbf\x93\x2b\xba\xc3\x8e\xcb\x6d\x8e\x17\x70\x1f\x8c\x7a\xc1\x62\xd7\xa3\xf9\x0e\x33\x67\xab\x9b\x85\x56\x47\xfa\x50\x4c\xf8\x24\x9b\x82\xd9\xd6\x71\xcc\x30\x60\x41\x63\xef\xb0\xf5\xdc\x52\x07\x35\x74\xf1\x3c\x28\x9e\x6f\xc3\x19\xac\x4b\xd1\xec\xfd\x03\xc6\xac\x1a\x04\x7b\x1e\xaf\x8d\xac\x53\x1b\x9f\x45\x73\xb0\x8a\x9f\x63\x86\x99\xb1\xe0\x54\x8d\x62\x36\x31\x29\x53\x92\x69\xaf\x58\x95\x65\x3a\xaa\x9e\xe9\x6c\xc0\xe6\x63\x4d\xe9\xbb\x64\x54\x2d\xa7\xad\xbd\x06\x6c\xae\x43\x12\x7b\x4d\x4c\x2a\x09\x58\x16\x9b\xe2\x2c\x5c\x05\xf5\xaa\xd4\xe2\xeb\x29\xdc\xc7\x3d\x63\x72\x32\x99\x76\xcc\xd9\xed\xc0\x9e\x8a\xea\x9e\x8a\x07\xf6\x54\xc0\x9e\x9e\xc9\x0d\x45\x92\x39\x83\x69\x30\xd4\xb6\xa1\x42\x96\xcd\xfd\xb2\xb9\x77\xf6\x61\x30\x1f\xeb\x0c\x4f\x68\xc9\xf8\x6b\x49\xf9\x9d\x8e\x87\x48\x37\x9b\xfb\xad\x77\xc9\xaf\xed\xbc\x3b\x94\x38\xe4\xfc\xe4\xe7\xfe\x93\xab\x15\xee\x7d\x73\x30\x94\xbc\x18\xbf\xbb\x17\xa4\x91\x38\xd6\x3e\x8e\x24\xaa\x21\xbd\xde\xd6\xd2\x03\x1f\xbd\x85\x56\x8e\x48\x34\x09\x5a\x4d\xc6\x41\xc9\xe6\x82\xb5\x72\x60\x3e\x57\x2d\x26\x13\x61\x41\x5e\xd7\x4c\x3e\x01\xa8\x4b\x6e\x4f\xfb\x83\x84\x08\x1f\xea\xd0\x52\x3c\xc4\x92\xc6\x19\x4a\x12\xaa\x03\x51\x5c\x05\x6e\x80\xcc\x3c\xcf\xd5\x81\x20\x62\xdb\x79\xbd\x93\xb1\xf2\x22\x8d\x91\xb0\x2e\x66\xa4\xf7\x5f\x3d\x9c\x93\xc9\x10\x0f\x31\x38\xd7\x74\x2e\x3b\xad\x11\x2f\x06\xd7\x75\x25\xd9\x1b\xe2\x94\x0c\x25\x1e\x3d\x9c\x39\xde\x70\x26\xcf\x95\xe9\x62\x41\xe8\x64\x36\xc5\x4b\x72\x1b\x17\x78\xa1\x38\xe3\x1c\xe1\x39\x59\xaa\x39\xe3\x35\x59\x0e\x02\x3c\x76\x98\x3e\xb7\x86\xab\xa9\x39\xa2\x2b\x52\x4c\xd2\x69\xe7\xd9\x1e\x21\x2b\x40\x07\x80\x71\xf7\x46\x38\x23\x99\x25\x18\x81\xc8\xc4\xac\x4f\x7a\x4f\x7a\x38\x23\x37\x13\x55\x74\x1a\xaf\x70\x06\xe9\x57\x2e\x05\xa1\x6d\x32\x99\x4d\xc9\xbd\xe1\x4b\x17\x06\xf5\x60\x85\x60\xe7\x15\xec\xba\xde\x6e\x4b\x70\x70\xdc\xdc\x1f\xc2\x99\xc3\x5d\x09\xce\x2c\xae\x63\xfd\xde\x1f\x7a\x38\xd3\x38\x2c\xc7\xbb\x8c\xc9\xa2\x48\x0c\x92\x42\xb9\x30\x1b\x24\x92\xd9\x34\xee\x4f\x60\x4c\x60\xf6\x5e\xd0\x2b\x70\xfd\x38\x2e\x0c\x4b\x5d\x8c\x93\x2d\xda\xe2\xd7\x01\xaf\xa4\x72\xaa\xb1\xcb\x7c\xf8\x01\x2d\x6a\x17\xd2\x0d\x46\xd6\xe7\x4b\xca\x69\x97\x15\xdd\x2c\xef\x02\x0f\xde\x95\x35\xe6\xdd\x5e\x9f\xfa\x46\xf1\x9e\x43\x57\xdb\xab\x3d\x26\x06\xe0\x54\x32\x02\xc8\x63\x33\x01\x95\x4e\xb2\x29\x61\x1e\x9f\x10\x4e\xaa\x50\x22\xe7\x3a\x99\xbc\xb7\x17\xcc\x29\xac\x67\x98\xac\x1d\x38\x51\xd7\x93\x7c\x57\x0f\x16\xa4\x21\xf0\xcb\xa3\x16\x84\x11\x3e\x30\x3b\x64\x82\x81\x98\x59\xe7\x66\xd6\x09\x61\x93\x5c\x1d\xe6\xc4\x1c\xe6\x4c\x9f\xda\x3e\xb9\x9b\x24\xfa\x90\x26\xd8\xd1\x11\xbd\x27\xbd\x3d\xa2\x39\x2c\x43\x18\x67\xb2\x4a\x3f\x43\x18\x0e\x8e\x07\x44\x55\x7b\x1a\x4b\xaa\xc9\xc3\x7b\x96\x7a\xd1\x8b\x83\xb2\x08\x49\xb4\xd3\xb4\x5e\x5e\x95\x86\x43\x34\x99\x62\x6e\x28\xfc\x6b\x7a\x57\xc4\x92\xfb\x00\x85\x80\xd8\xa7\xd1\xdb\xa8\x08\xb9\xd3\x18\x42\x2f\x4e\x1d\x1d\x62\x43\xff\x34\x08\x1d\x18\x52\xf8\x2c\x77\xf8\xac\x20\xc3\xc3\xe2\x79\x6e\x5a\x2f\x4c\xeb\xa5\xbc\x74\x93\x29\xe9\xf5\x1b\xda\xc9\x27\xc5\x14\x75\x84\x21\xcc\x95\x65\x78\xd2\x27\xbd\x96\xe2\x48\x87\xea\x8a\x13\x64\xc3\x9d\xfa\x32\xc5\xa3\x5e\x6f\xdc\x3b\xea\xf5\x85\x16\xf5\x44\xbd\xca\x5d\x04\x27\xbb\x6d\x6b\xe9\x85\x71\x31\xcc\x4c\xd4\x43\x98\x93\xfb\x2d\xde\x81\xae\x27\xd9\xd4\x14\x27\x3d\x84\x73\x72\x1d\xb3\xc9\x70\x8a\x70\x42\xcc\x72\xe0\x42\x82\x47\xe3\xfb\xb5\x23\xe9\x5d\x73\x12\x8f\x4a\xd2\x13\xbc\xa4\xbd\x71\x9c\xbc\x38\x88\xa2\xde\x64\x2a\x39\x9f\x5c\xf3\x2f\xc9\xfe\x81\x3c\x5d\x05\xb8\x72\x9f\xe4\x36\x7d\x88\x65\xce\x74\xb3\x89\xf9\x24\x9f\x92\xc9\x14\x21\x5c\x82\xef\xe5\x23\xd9\xfd\x68\x8a\xc6\xbd\x1e\xc2\xc5\x91\xcc\x36\xeb\x3b\x86\xb2\x65\xcb\x95\xb6\x52\xf0\xa6\x18\x88\x9a\x4a\xb2\xb8\x69\x6a\x62\xef\xec\x8d\xe4\xc9\x71\xa2\xb1\xff\xd3\x43\x87\x40\xe8\xe7\x20\x3c\xa6\x86\x5b\x1c\xe2\x1c\x99\x10\x85\x5e\xf1\xa3\x9e\xf6\x74\x2b\xef\x9f\x39\x31\xb6\x52\xd2\x1f\x61\x8b\xe8\x3a\x41\x6b\x09\x72\xfe\x0f\xc2\x3d\x95\x07\x49\xdd\x50\x1a\xdc\x50\x0a\x37\x94\x22\xed\x1f\x98\x76\x1e\x66\xcc\x29\x91\x57\x69\x1c\x53\x47\xce\xc4\x14\xe1\xd4\xfb\x4c\xf5\xac\x66\x96\x2f\xe9\xcc\x5e\x8c\xa2\xa8\xf7\xa4\x47\xbc\x11\xcc\xf6\x47\xa8\xba\x20\x32\x0d\xa7\x24\x75\x29\xa9\xf5\x61\x20\x79\xe8\xbd\xa1\xbb\xbc\x0b\x32\x3c\x5c\x58\xb4\x0e\x58\xe9\x65\xcc\x31\xf5\x19\xe0\x05\x42\xc8\x1c\xd0\x45\xbf\x8f\x0e\x4d\xe5\xa5\x04\x10\x73\x32\x3c\x9c\xbb\xeb\x3f\x07\xff\xde\xf3\xa9\x05\xf9\x51\xb4\xd4\x81\x26\x26\xf3\x29\xea\xf0\x66\x01\x08\xc0\x94\x26\xd8\x4d\x15\x52\xdd\x6c\x0c\xb1\x92\x11\xae\xe2\xe4\xf0\xc9\x48\x42\x17\x3e\x39\x00\x2f\xc8\xd5\x72\x05\x49\x64\xb9\x92\x24\xb2\x5c\x4a\x92\xc9\x81\xf5\x72\x97\x5a\x9e\x64\x1f\x3c\xa7\xe6\x20\x5a\xcc\xf6\x08\x29\x4c\x4e\xb1\x0f\x7c\x08\xdb\x23\xa4\x34\x69\xe5\xbe\x45\x5b\x90\x7e\xc4\xf6\xcb\x31\xd4\x3a\x2a\xf6\xb3\xf1\x70\x8b\xb6\xf1\x52\x6d\xdb\x9a\x2c\x27\x43\xeb\x27\x7b\x1d\x45\x6b\x6f\x41\x62\x26\xbf\x35\xf1\x10\x45\x20\x41\xfa\x83\xdc\x56\x9b\xa8\x6f\xe3\xfe\x9f\xe5\xe6\xa6\x9a\xf8\x68\x61\x97\x88\x23\x05\x80\x8b\x05\x66\x51\xf9\xdf\xd8\x63\x9b\x4d\x10\x92\x41\xa3\x39\x20\x2a\x21\xe8\x02\x73\x16\xf3\x3d\x13\x3f\x50\x68\x06\x97\x49\x50\x33\xc2\xca\x39\xd5\xc7\x98\xa3\x8e\xa5\xe9\x8d\xc0\xc5\x8b\xd5\x39\x3c\x2c\x9d\x1c\xa6\x34\x70\x2c\x25\xd9\xa4\x9c\xe2\x19\x49\x35\x29\xb8\x90\xe7\xd2\x27\xba\xf0\x92\x5c\xe2\xb9\x0e\x41\x31\xdb\x23\xe4\x22\x8a\x16\xf2\x9f\x45\x01\x6b\x32\x3c\x5c\x3f\x9f\x99\xb6\xd7\xb2\xed\x39\xd9\x1b\x6a\x7f\xd2\xb3\xc9\x7a\x8a\x6f\x20\xac\xe6\x24\xe9\xf7\xa7\x9d\x25\x21\xe4\x32\x8a\xe2\x25\xb9\xdf\x22\xfc\xe0\x6d\x8c\xa2\xc5\x64\x3d\x3d\x5a\x4e\x56\x53\x72\x13\x45\x0d\x0c\xc6\x0d\x1a\xab\xdc\x6d\x31\x29\x3d\x72\x32\xb5\xe4\x24\xc8\x5e\x8b\xf1\x12\xb3\x42\x07\xce\x1f\xcf\x2d\x26\x29\xb6\xf1\x1a\xa7\x18\xd8\x79\x09\x1a\x8d\x9e\x4b\x6f\x38\x78\x3a\x78\xd6\x7b\x78\x84\x12\x48\xbf\x1e\x7c\xc8\xf9\x0a\x76\x8a\x93\xfb\xcc\xfc\x3e\x53\x74\xc8\x38\xc5\x36\xe9\x53\x22\x96\xe3\x42\xbf\x12\xc8\x0f\x53\x66\x11\xc2\xe5\x55\xb2\x6e\xa4\x96\xe0\x49\xa5\x43\xe3\x3c\xee\xf5\x30\xaf\x3c\x6f\xb9\xb0\xe1\x5d\x6a\x5d\xbe\x5b\x0c\x97\x13\xae\xdf\x72\x70\x11\xd0\x0d\xb9\xc4\x22\xf2\x84\x14\x0d\x27\xa4\x50\x27\x44\xe8\x43\x8f\x3a\x49\x3c\xc3\x29\xce\x27\xe9\x54\x1d\xc9\x05\xe1\xee\x69\x27\x9d\x76\x16\x47\x34\x9e\xe1\x05\xf4\x3d\xce\x94\x78\x9e\xe1\x19\xda\x6e\x63\x49\xb1\x04\xef\xab\xe2\x48\xf9\x31\xc4\x54\x73\xe8\xca\xdb\x99\x0a\xf0\xa4\x83\x00\x9d\x93\xd7\xde\xd3\xeb\xb9\xf7\x84\xcb\x2f\x7e\x29\x42\x9f\x05\x0d\x56\xd8\x81\x67\x93\x1e\x2f\x6e\xd6\xf2\x5f\xf5\x05\xb8\xc9\x20\xbb\xf6\xfc\x9b\xe6\x57\x2f\x2f\x73\x2e\xc8\x2d\xa6\x83\x77\xda\x08\x1d\x08\x62\x70\x84\x4d\x07\xe7\x3c\xc9\x0a\x26\x5b\x51\x86\x98\x7e\x8a\x62\x0c\xe9\x40\xa9\x4c\x7d\x7a\x79\xfa\xf2\xfd\xd9\xc5\xd9\x4f\xef\x5f\x7d\x3c\x21\x74\x50\xfd\x3e\x3b\x7f\x79\x7e\xec\x3e\x4d\x67\xae\x39\xd2\xf8\x1a\x9d\xb7\xb8\x9b\xb1\xc7\x07\xc6\xa5\xf6\x04\xd6\xdd\xbc\xcd\x41\xb4\xe6\x9e\x6b\x1e\xe6\x49\xe7\x5a\x4a\xb8\xa2\x45\x91\x5c\x51\xf0\xb5\xd1\x50\xc6\x34\xba\x16\x25\x57\xce\x9e\xcf\x79\x32\xa3\x47\x2d\xe9\xe1\x8e\x2b\x07\x69\x5c\xfd\x6f\xf0\x83\x53\x71\xa9\xa2\xda\xb4\xb9\x28\x74\x9d\xe5\x3c\x89\x10\xaa\x1c\xf0\x24\x2d\xa2\x82\xe2\xf1\xcf\x5b\x65\x85\x65\x87\x87\x69\x54\xe8\x55\xc4\x1c\x50\x3c\x84\x11\x9c\xf0\x69\x35\xb0\xbc\xa1\xa4\x68\x14\x51\x2f\x5a\x1f\x8f\x22\xee\x3c\x5d\xd1\x09\xdf\x1f\x01\xfe\x6b\x42\xbf\x51\x54\x98\x47\xae\x9e\xc7\x36\xf4\xd0\x36\xce\xac\xec\x4d\x90\xcc\xe7\x29\xf0\x24\x31\x75\x86\x98\x4b\xca\x42\x4c\x5d\xec\x38\x49\xeb\x87\xf1\xea\x3d\x3a\x58\x4e\x8f\x5a\x04\x3f\x11\x30\x2e\xe7\x87\xde\xba\x1b\x94\x59\x04\xde\xc3\x4c\xcc\xc1\xe0\x01\xb1\x22\xca\x94\x24\x41\x55\x84\x0b\xbc\xa6\x6c\x61\x92\x4d\xb7\xdb\xf0\xed\x13\x3c\x9e\xa5\xf9\x95\x4f\xa0\xff\x5e\xd1\x4c\x74\xb0\x3f\x1e\x38\x6e\x65\x8a\x72\xc9\x81\x72\x51\x97\x3d\xf6\x0e\x7b\xf7\xff\xf4\xfa\xac\xdf\x1b\x77\x7b\xfd\xdc\x93\xc4\x25\x50\x4b\x17\x97\xfc\x49\x10\x3d\xdf\x3e\xd2\x54\x9f\x12\xe9\x66\x43\xbb\xc6\x7b\x44\xbe\xe8\x2a\x1a\x76\xb3\xa9\x2d\x73\xb5\xe0\x07\xc8\x6f\x0f\x5c\x5f\xf3\x56\x15\x45\x2a\x32\x19\x9c\x50\x04\x9e\x68\x0e\x5d\xf5\xb5\x87\x5a\x24\x6d\x9f\xa4\xe9\xf8\x7e\x8b\x95\xa9\xde\x1c\x02\xcb\x83\x11\x96\xfc\xb9\xed\x94\x71\x36\x48\xd2\x54\x02\x0d\xb5\x62\x7b\x23\xe5\x74\x4c\x1e\x19\x79\x88\xf0\x2c\x16\x08\x53\x64\xcf\x2b\xdc\x0d\xef\xa6\x6c\x36\xca\x4b\x7d\xa6\x8d\xbb\xe6\xe0\x95\x4f\x8e\x0c\xb9\x96\x04\x62\x0b\xbf\x92\x13\xf5\x73\x15\x51\x43\x49\xb0\x57\x71\x8e\xa2\x68\x15\x27\x08\x81\x73\x4c\x35\x67\xe0\xe8\xf5\xbe\x66\xda\xe6\x70\x6e\x2e\x27\x90\xd7\xa1\x47\xcc\x94\x0c\xf1\xc2\xb2\x6c\x87\xe9\xf3\x05\x88\xbc\x72\x15\x38\x24\x99\xa4\x53\xf0\xb8\xd3\xd4\x90\xf6\x78\x29\x87\x25\x57\x78\xc2\x77\x14\xb5\x94\xe9\x51\xa6\xdd\x24\x6e\xfd\xe7\x73\x7b\xd9\xc3\x2b\x44\x3d\x68\x72\xe3\x1d\x27\xa5\x00\x38\x06\xf7\x76\xea\x51\xb5\x77\x71\xa1\x50\xc6\xc5\xfe\xc1\x5f\x46\x7f\xff\xdb\x5f\x86\xc3\xe1\xe8\xe9\xb3\x3f\xff\xfd\x60\xb8\xff\xf4\xe9\xc1\xc1\xed\x53\x89\xc0\x02\xac\x72\xa5\x9f\x3e\x7b\x17\x06\x1b\x99\xba\x07\x4f\x0f\xfe\xfe\xf7\x83\xbf\x3d\x1d\x1e\x0c\x9f\xee\x1f\x3c\x7d\x7a\x00\x95\x43\x14\x75\xa7\x5f\x1d\x7b\x17\x17\xff\xf8\xe4\xaa\x3e\xfd\xfb\xc1\xdf\xff\x76\xf0\xec\x6f\xcf\x9e\xed\x3f\x3d\xd0\x15\x9b\x30\xde\x25\x54\xbf\x68\x8f\x29\x69\x08\x68\x25\x19\xf7\xa3\x94\x9a\xe7\xca\xa7\x8d\x51\x73\x9f\xfa\x81\x9a\x9f\x9a\x18\xcc\x7e\x58\x53\x53\xff\x59\x63\xfd\x67\x7e\xfd\x67\x36\x86\xb3\xf1\x62\xb8\xe0\xf9\xca\xf3\x3f\x2e\xf2\xe0\x95\x8c\x15\x1a\x27\x5a\x77\xf9\xac\x78\x39\x13\xec\x06\x7c\xa4\x40\x42\xc9\x53\x6d\xc1\xd8\x2b\xd7\xf3\x44\xd0\x9e\x75\x25\x98\xa7\x37\xb5\x70\xd0\x06\x9e\x83\xad\x89\x6b\xd4\xa3\x03\xf6\x6c\xdf\xaf\x93\xb2\xa0\xf3\x57\x77\x30\x06\x96\x5d\xf9\x85\x46\xd5\x42\xda\x19\xd7\xce\x32\xa6\xa1\x53\x25\xf1\x6f\x28\x7b\x71\xc3\xc0\x85\xd7\x3f\xbc\xe7\x03\x1d\xe2\x7a\x72\x35\x25\x7c\xb3\xa1\x4a\x46\x6e\x02\x46\x08\x9a\x09\x23\x3c\x57\x34\x9c\x11\x9e\xcf\x13\x91\x28\xf9\xab\xfc\x05\xd1\x36\xfd\x85\x99\xbf\xcf\xe7\x34\x75\xad\x5f\x4e\x6d\x2c\xed\xb5\xb2\xd2\x0a\x76\x02\x6c\x33\xfd\x94\xc9\x9d\xab\xc0\x0d\xc9\xe6\xe2\xbf\x28\xe5\xae\x0f\x92\x0a\xf2\x9b\x59\xb3\x9b\x5c\x18\x2b\x38\x3f\xa3\xa0\xbf\x96\x34\x9b\x51\xb2\x3f\xc2\x79\xe0\x85\xdf\x8c\x26\x33\xd6\x63\x03\x4e\x25\xa1\x21\xa9\x6c\xd9\x42\xec\x8d\x2f\x77\x91\x22\x76\x6f\xdf\x5e\xf2\x88\xfd\xdb\x4b\xa2\x28\x4e\x76\x95\xd9\x6c\x20\x2e\x93\x1d\x3d\xfa\x82\x1d\x97\xad\xf7\xf4\xdb\x4f\x0f\x5a\xb1\x47\x39\x8a\xe2\xbd\x64\xe7\x0c\x36\x9b\xa6\xfc\x5a\x2f\xc8\xe8\x3b\xca\xdd\xe2\x03\xc5\xb7\xd9\xfd\xe6\x01\x81\x53\xdd\x49\xee\x7d\x68\xe5\x32\x3f\xc9\xd0\x5e\x85\x91\xe7\x7b\x3b\xee\x97\x9b\x14\xfb\xa3\x29\x90\xc3\xa8\xc2\x3e\x17\x87\xfd\x7e\x69\xb8\xa2\xa0\x4a\xa9\x44\xf8\xe9\x80\x15\xda\xeb\xce\x5c\x3b\xc5\xac\x1f\xa2\x54\x55\xdc\x86\xa7\x88\x1a\x27\xec\x67\x3a\xc5\x44\x30\x32\xa7\x89\x9b\x7b\x10\xd7\x5f\xae\x99\x83\x3b\x47\xb5\x53\xb7\x37\xc2\x37\x01\x1d\x93\xa8\x92\xdd\xfd\xae\x2a\xd1\x43\x92\x4b\x73\xb5\x54\x2f\xa0\xcc\x03\x4c\xd8\x40\xbd\xde\x35\x10\xa6\xb5\xbe\x98\xbe\xd2\x03\x61\xbb\x7b\xc3\xe6\x4a\xaa\x41\x31\x44\xae\xbb\x89\x7b\x6a\x25\xba\x30\xe2\x1e\xf2\x23\xcd\x34\x5d\x1d\x35\x1c\x0d\x50\x90\x77\x95\x77\x05\xb7\x17\x4b\xda\x1a\x1d\xc6\xef\x09\x0a\xea\xfc\x2d\x16\x6a\xaa\x2d\xea\x4b\x7e\x35\xb5\x24\x32\x1b\xc2\xbd\xab\x20\x2c\x8f\xa8\xa7\x4b\xda\x9a\xb0\x17\xb5\x97\x48\x9e\xab\x98\x1a\xfa\x29\x52\xbd\x42\x6a\x15\x5c\xb5\xc0\x3a\x7c\x74\xf8\x0f\x79\xf3\xd7\x0f\xc4\x12\x5b\xc9\x01\x4a\xa4\xe5\x27\x78\x78\x6a\xe8\xc3\x62\xf5\xef\x47\x96\xa6\xca\x93\x43\x6c\xfc\xf3\xfa\xd9\x6f\xd8\x3c\xcc\x95\x33\x31\x63\xae\x4d\xc6\x76\xb5\xd9\xc4\x8b\x60\x0e\xc1\x0d\xa8\x42\x61\x49\x69\xbb\x53\xd4\xbd\x4d\x0a\x73\x70\x7b\x08\x5b\xb4\xed\x21\x15\xf7\x84\xe7\xa7\xc5\xde\xd7\x60\xcd\x69\x95\x1d\xf7\x27\x07\x78\x0a\xd5\x10\xf9\xb0\x8a\xc8\x47\xc1\x92\x24\x90\xea\x01\x4a\xbd\x19\xb0\x28\x74\xce\x78\x60\x0d\x4e\x6b\x5b\xbc\x73\xf9\xa9\x6e\x46\xf0\xbb\xda\xc2\xc2\x72\xd8\xd7\x6a\xbf\x15\xb7\x6e\x12\x05\xc8\xa9\xfb\xcb\x00\x6f\xd8\x5e\x88\x07\xb3\x64\x1e\x34\x37\x21\xc3\xe2\x30\x03\xc2\x33\x08\x9d\xd7\x24\x28\xae\x10\x38\xd4\x9e\x8e\xa2\x12\x56\x58\x8d\xb9\x46\x91\x0d\x1b\x29\xb2\xe1\x34\x8a\x82\x20\xec\x75\x46\xf0\xc5\xe8\xc8\x8f\xcb\x6e\x88\x3e\x5e\x2f\x78\xe0\x15\x3c\xb0\x05\xeb\x11\x3d\x5f\x3c\x6d\x24\x23\x59\x03\x19\xd9\x48\x2f\xaa\xe3\xac\xa3\x59\x39\x89\x92\x5c\x8c\x5a\x6c\x9d\xff\xad\xf5\xe8\xd4\xd9\x50\xd0\xed\xa3\x58\x9e\x6a\xff\x49\xb9\xc6\x68\x67\x1e\xa3\xcd\x5f\x1c\x1c\xf1\xfd\x03\xc9\x68\x33\x72\x70\xc8\x9e\x73\x13\xd3\x67\xff\xc0\x67\xb4\x99\x8e\x46\x63\x4f\x25\x4c\x1b\x8c\xc0\x0c\x3c\xf7\xf1\xb3\x79\xe1\xaa\x51\xc3\xfd\x11\x02\x5d\xa1\x4c\x01\xdb\x3c\x4d\xf3\xdb\x53\x7d\xb3\x8a\x96\x90\x26\xaa\xcf\x4e\x3b\xec\xb6\xd5\x7c\xed\xb5\xea\x5d\x3e\xaa\x27\x55\xfb\x8f\x43\xe4\x09\x68\x50\xa0\xad\xda\xe8\x76\x8f\x88\x1e\x3e\x8e\x0d\x08\xec\xf6\xfa\x01\x48\xec\xf7\x50\x4f\x36\x93\xe6\x95\x07\xcb\x1d\x50\xd4\xc6\x2c\xf0\xd5\x3c\x9d\x79\x42\x4c\x4d\x35\xea\xea\xf4\x8c\x83\x75\x05\x61\x07\x3d\xe5\x30\x3d\x0f\xf4\x18\xed\xc8\xab\xba\x13\x34\x8a\x02\x01\xc5\x85\x04\x1f\x3e\x83\xb2\x6d\x94\x5e\x5e\x74\x94\xce\xa3\xec\xe9\x47\x9a\x5c\x07\xce\x74\xcf\x62\x2b\x7f\xaa\x9f\xec\xc6\x3b\x31\x9a\x86\x07\x1e\xde\x6e\xeb\x97\xbf\xb1\xee\x41\x70\x9f\x5c\xcc\x68\x1a\x46\x08\x64\xd8\xbe\x8d\x33\xa0\x0f\x71\x41\x98\x21\x51\x4b\xf3\x53\x05\x60\x4f\x09\x33\x96\x0b\x78\x46\x34\x59\x24\x69\xc4\xcf\xe0\x13\x9b\xa1\x28\xd2\x36\x12\x0b\x02\xe6\x9a\x31\x43\x78\x49\x5e\xc6\x8b\x8a\x73\x69\x25\x3c\xbb\xbf\xa2\xa2\xbb\xa2\x22\x91\x9c\x91\xa3\xfb\x3e\xc6\x60\xd0\xc2\x16\xb1\x16\x65\xb2\xe2\x2d\xcf\x7f\xa3\x59\xcc\xd1\x66\xc3\x2b\xf2\xcc\xb8\x67\x5a\xe8\x59\xa1\x61\xa8\x1e\x0c\x06\x75\xd6\xdf\xd6\x16\x0c\x39\x0c\xaa\x08\xf2\x20\xfc\x46\x3c\xc3\x0b\x84\x9d\x59\xd3\x67\xf0\xab\xcd\xf0\x12\xe1\x25\xd0\x66\x73\x72\xbf\x60\xd9\xdc\x19\xf7\xba\x47\x31\xcc\xc8\x64\xda\x79\xea\xbd\xe1\x43\x34\xd2\xca\x8a\x53\xcf\x1a\x58\xb9\x0e\xdf\x7a\xca\xc7\x39\x19\x1e\x1a\x41\xd7\x8b\x5c\x85\x58\x5e\xc4\x99\x5e\x4f\x3a\xc9\x25\xb5\xa8\x84\x48\x12\xf6\xe6\x92\xfe\xb4\x3a\xf7\x58\xae\xa8\xdc\x44\xb7\x9a\x89\x4a\x74\xbb\xe8\x79\x52\x53\x59\x4d\x3b\xa0\xf7\x16\xd9\xca\x12\xba\x19\x05\x0d\x0a\x81\x7e\xcd\x02\xd9\xe8\x82\x42\xb9\x03\x57\x03\x15\xba\x2a\xbc\xa0\xf8\x35\xfb\x8f\xad\x99\xe6\xb3\x24\xfd\xa0\xe6\xe2\x81\x40\x39\x3b\xa3\xa1\xe0\xd9\x1b\xd0\x89\x73\x99\x3f\xf5\xa6\xec\x4d\xb7\x50\xc9\x1e\xb3\xe5\x39\x32\xdd\x6e\x2d\xf1\x10\x45\xf1\x9c\xbc\x8c\xe7\x38\x45\x08\x9b\xed\x9f\x23\x3c\xdf\xa2\x50\xa3\x37\x3c\xc8\x89\x10\x9c\x5d\x96\x82\x36\x37\x5b\x3d\xcb\x14\x6d\x36\x55\xd9\x7c\xdc\x73\x8d\xf4\xd0\xd1\xee\x63\x4c\xe5\x31\x1e\x07\xa9\x32\xc9\x0d\xf1\xa3\xcf\xd3\x00\x45\x44\x3d\x40\x41\x55\x38\x22\xfb\xcc\xf3\x5e\x9f\x82\xa3\xb6\x0c\x89\x12\xca\x34\x85\x3b\x70\xbd\x4b\xc0\x65\xc3\xda\x5c\xc0\x19\xfa\xd4\x20\xc6\x50\x39\xc4\xd7\xdf\xf6\x65\x2c\x1e\xc3\x69\xe9\x52\x78\xc9\x11\x5e\xe9\x0f\x4a\xb1\xb1\x22\x73\xc9\x4c\x48\xc0\x35\xcf\x67\xb4\x50\x7a\x5d\x71\x86\x76\xb1\x55\x57\xe0\xc7\xc1\x0f\x67\xdb\xc8\x0b\x3a\x96\xcd\x00\x41\xa4\x88\x40\x65\x6a\xde\xe0\x1d\xa1\xeb\xcd\x0d\x94\x4f\x81\xea\x85\x76\x5a\x55\xc6\x3a\xbb\x7b\xf6\x97\x14\x29\x3e\xaf\x01\xe7\x73\x15\x6d\xe5\x6d\xce\x81\xde\x57\x8c\x59\xb5\xb8\x57\x9a\x97\xd9\x2b\xba\xc8\x39\x85\x75\xf8\x2e\xcf\xaf\xe3\xdd\x15\xaa\xcd\xab\x38\x73\x3b\x2a\x98\x35\x6e\x6a\xf7\x0b\xc7\x4d\xc3\x81\xbf\x5c\x08\xca\xbd\x71\x4b\x62\x61\x57\x95\x4b\x3a\xcb\x57\xd4\x9c\x2f\x5d\x5e\xee\x4c\x98\xd1\xb4\x41\x46\x49\xc7\x6e\x79\x2c\x50\xc7\x06\x92\x2b\x44\x52\x2c\x4f\x7d\xb1\x9e\x8a\x04\x43\x25\x63\x2f\xff\x80\xf0\x4f\xfe\x98\xd8\x13\x3d\x25\x99\x8d\x91\x65\x63\xbb\xaa\xc3\x75\x18\xf7\xf4\xaf\x1e\x53\x27\x69\xb3\xd9\x93\x28\x36\xe6\x44\x18\xad\x09\x0d\x32\x97\xac\x40\x5a\xa1\xf6\x75\x9d\x8c\x02\xac\x5e\xb9\x38\x26\x74\x39\x94\xf3\x62\x1b\x58\xf8\x90\x47\x91\x82\x7d\x09\xce\x11\x4e\xe0\xa4\x83\x06\x05\x04\xc5\x98\xd1\x39\x6d\x08\xdf\xa4\x75\x26\x8d\x09\x31\x35\x73\xa9\x4c\xcd\x91\x22\x72\x68\x86\x53\x93\xbf\x37\x9b\xea\xa4\xa3\x68\xcf\xc4\x1c\xaa\x02\xcb\xb5\x7e\x2f\x8c\xa2\xbd\x5a\x64\x85\x3d\xba\x47\xac\xea\xba\x52\xf3\xf0\xc7\x17\x3c\x7a\x52\x04\xaf\x72\x95\xe6\x39\x8a\x22\xef\x0d\xc4\x35\x65\x1a\xd9\xc6\xde\xf5\xc6\x54\xff\x40\x75\xda\x56\x0e\x09\x5e\xd2\xe0\xad\x34\xbf\x72\x8a\xb7\xea\xe1\x4d\xc1\x11\x25\x36\x6f\xd3\x43\xed\xd2\xc1\x85\xf1\x0f\x0f\xc2\xbd\xca\xce\x2a\x80\x0a\x8c\x6c\xfd\x32\xd7\x75\xe0\xdc\x0e\x68\xfe\x45\x0e\xcd\xf0\x75\x7b\x43\xdc\xbb\x65\x69\xaa\xcf\x32\x34\xd3\xc3\x7e\x47\x3e\x7b\xef\xe1\x14\x97\x38\xb8\x74\x23\x50\x86\x56\x8d\x59\x31\x45\x08\x1f\xc7\x42\x19\x63\x01\x10\xc1\x0d\x80\x0f\xe9\x69\x85\x57\xbd\xf1\x86\x32\x13\x77\x57\x2e\x4d\xc0\x28\xb5\x5d\xcf\x86\xd1\x37\x4f\x29\xb1\xbd\xbb\x50\xd0\xd5\x9c\x58\x99\x8f\x73\x72\x1c\x33\xc2\x91\xa2\x6b\x58\xc3\x9c\x78\x2b\xac\xa4\x95\xa7\x81\x49\x3e\x55\xf0\x29\x00\x8d\xcd\x52\xb9\x7a\x3f\x34\x46\xad\x3d\x89\xad\x86\xdb\xf2\x6e\xd7\x56\xa7\x76\x80\x2b\x2f\x16\xd5\x04\x05\xdd\xaa\x83\xf7\x20\x9d\x00\x3e\x97\x8a\xd9\xb2\x72\xc8\x1b\x58\x5c\xe5\x08\xc6\x5a\xe8\x2b\xb9\x75\x60\xd1\x14\xe0\x77\x25\x50\x0a\xd2\x1a\xf5\x3e\x7d\x04\x5b\x43\xa7\x0d\xf2\x59\x6a\x83\xd3\xc4\x82\x50\x14\x45\x4d\x3a\xf6\x4d\x61\x5a\x60\xc9\x8f\xea\x28\x9b\xd4\x52\x76\x60\x2a\x0f\x22\x00\x93\xe0\xdf\x74\x2d\x8e\x1b\xeb\xd0\xdf\x61\x51\xf3\x14\x8b\xe3\x21\xe6\x2d\x31\x40\xa1\x99\xb6\x18\x97\x41\x6c\x5a\x28\x79\xe4\xfd\x56\x0a\x2e\x6e\x27\x63\xb4\x05\xdf\x4b\x35\x71\xe0\x85\x81\x4a\x26\xbe\xa6\x3f\xf1\xdd\xf1\x35\xfd\x92\x47\xf5\xa4\x71\x5c\x1b\x03\xae\x97\xda\x3d\x2e\xb3\x25\x5e\xfc\xce\x26\xf5\xa7\xeb\xaa\x61\x0d\xf5\x48\x5e\x11\x7b\x51\x2e\xb4\x11\xa8\x61\x2d\xe5\x15\xf1\x34\x92\xa0\x5c\x8e\x14\x2e\x43\x86\xe2\x65\x38\xa4\x76\x87\xd8\x62\x49\x92\xe0\x62\x6b\xd9\x54\x1e\x46\x6b\x42\x00\x69\xb0\x08\x43\xbe\x35\x50\x96\x66\x55\xa3\x48\x54\xee\xa6\x84\xb9\xbb\xae\xab\x4f\xe8\x36\x41\x65\x50\x65\xc3\x62\x1b\x5f\x23\x7c\xfe\xe0\xf2\x68\x21\x83\x59\x9c\xe4\x31\x8b\x73\xbf\xc5\x89\x5b\xa8\xe4\x4b\x16\xa3\x4e\xd3\x87\x46\x2a\xaa\x55\x49\xbc\xd1\xc9\xe5\x34\x8a\xe2\x32\x16\xee\xe5\x55\x61\x72\x2c\x42\xfb\xb1\xc9\xe5\xd4\xd8\xd2\x7b\xb4\x93\x31\x0f\xee\xd8\x7b\x3b\xa7\x96\x40\x3c\x62\x24\xf8\x86\x81\x8e\xf9\x60\xa5\xd1\x88\xcc\x5e\x79\x88\x83\x45\xd1\x31\xc8\x51\x62\xd3\x6c\xd3\xd2\x33\xbb\xee\xa7\x0f\xac\xbb\xd6\x31\x31\xab\x9e\xd7\x57\xdd\xae\xb9\x39\x75\x0c\xe7\x8e\xc0\xe5\x24\xf7\x20\xf2\x99\x4d\x8e\x39\xc2\xf9\xb6\x6d\x27\x3a\xc6\x8a\xba\xc6\x6c\x65\x0d\x1b\xe3\x0e\x69\x03\xd6\xe5\x8a\x6e\xaa\x24\x84\x14\x94\x5a\x16\x96\x5d\x19\xbf\x04\xf3\x2e\xac\x69\x2f\xd4\xa2\x33\x3d\x07\x6a\x82\x5b\x9c\x35\x71\x70\x0d\x87\x45\x91\xcd\x3c\x24\x64\xe9\x66\x13\x53\xc2\xcd\x8c\xef\x41\x6c\xb5\xf4\xa2\xc3\x65\x13\x31\x19\x4e\xa7\x92\x33\xb5\x6f\xe2\x6e\x75\x83\x17\x76\x97\xac\x46\xa8\xbc\xfc\x60\x15\xea\xb2\x91\x4a\xf1\x48\x10\x5b\x19\xd5\xd0\x9b\xc7\xae\x98\xd6\x46\xbe\xeb\x1a\x6b\xfa\x61\x55\xc7\x9f\x5c\xb0\xf9\x1f\x9e\x0c\x04\x2d\x44\xcc\xd0\x51\x36\x61\x2a\xc6\xe8\x58\xfd\xc2\xd9\x56\x9f\x3f\x98\xf6\xa7\x86\x65\xfb\x6a\xf9\x66\x47\xb4\xa9\x50\x6c\xf1\xfb\xdd\x41\x07\x1b\xd4\x1f\x7e\xad\xeb\x6f\x38\xd8\xb2\x4b\x24\xa0\xa5\xea\x27\xc9\x65\x23\x08\xe9\xf5\x4c\xd1\x79\x5c\xe9\x1b\xd7\x51\x79\xaf\xa7\x4c\xf0\x62\xd1\x27\xbd\x41\x0f\x61\xd1\x27\x8a\xf5\xc1\xe0\xea\xef\x26\xee\xfd\x11\x1c\x68\xfc\x11\x54\x9f\xd0\x63\xc4\x04\x06\x80\x3d\xa6\xff\x2e\x9f\x50\x0d\xd4\xa9\x27\x8d\x50\x9d\x8b\x8a\x8a\x4e\x27\xd0\x4e\xb2\xec\x4e\x03\x69\xe9\x49\x6f\xbc\xd5\x8a\x7b\x67\x22\xe1\xc2\x7b\xe5\xec\x19\x0a\xb4\xc4\x6d\x55\x34\xfe\x53\xd6\x6f\xb2\x7c\xfd\x71\x5e\x4d\x9d\xf9\x33\x4d\x48\x38\xf8\x17\x56\xf5\xf1\x88\x5b\x61\xe0\x38\x2c\xd3\x34\x1d\x78\xdd\x90\xbc\xf3\x9b\x98\x62\xbf\x87\x49\xa2\x9f\x72\x94\x98\x75\xdb\x34\x74\xfd\xec\xaf\x1c\xab\x23\xef\x85\x22\xd9\x25\x45\xa2\x2a\x58\x68\xd0\x12\x78\x46\xed\xb2\x45\x57\xf1\xd9\x5d\x13\xa9\xb4\x79\x3d\x8c\x2d\x89\x52\x3b\xac\x4c\x46\x9e\xa1\x6a\xf3\x7a\xa0\x89\xd1\x4f\xb0\x03\x2d\x9a\x97\x77\x12\x2e\xdc\xd4\x23\x53\xc0\x46\xa5\xbd\x68\xbf\x2f\x81\xc4\x9e\x67\x2a\xa2\x1e\x0a\x2c\x00\x00\xa7\x48\xe6\x15\xd9\xff\x1d\x5b\x89\x81\x04\xcd\x46\x82\x1d\x87\xe7\xa7\x3a\xb1\xea\xe1\xd9\x7a\x1a\xce\x9e\x47\x97\xe0\x98\x93\x60\xaa\xe6\xd4\xb0\xf1\xce\x05\x30\x9b\x97\x60\xa1\x47\x54\x34\x8f\xe8\x93\xe4\x43\xe8\x5c\x8e\xc5\xc6\xda\xae\x3e\xd1\xbf\x87\x8b\xf6\xa6\x2d\x24\xb8\x52\xa4\x0a\x98\x7b\x2d\xfc\xbc\x4d\xec\x23\x3e\xf7\xac\xb5\x49\xb6\xed\xd4\x35\xf5\xdf\x40\x2f\x1f\x76\x52\x09\x1a\x01\x7c\xbd\x2e\xe2\x64\xfa\xf5\x7a\x88\xf7\x5b\x5c\xd4\xeb\xfe\xd9\x2b\xf4\x67\xfb\xce\xab\x89\x18\x56\x21\x62\x0a\x47\x36\xd6\x35\x21\xcc\x03\xb7\x92\x1f\x73\xb9\x55\xbe\xda\x52\x86\xed\x8b\x56\x41\x72\xcc\x02\x8c\x91\x60\xf6\x55\x24\x4e\xb2\x5e\xa7\x77\xe7\xb9\x1a\x40\x13\x00\x4f\x63\x8f\xd0\x36\x1e\x3e\x7c\xba\xa2\x40\x68\x02\x56\x67\x81\x16\x85\x35\xeb\xf0\xad\xb0\x63\x0e\xe6\x99\x8c\x64\x93\xcc\xbd\x80\x98\x12\x01\xb3\xab\xc7\xa5\xe7\x5e\xc4\x14\x28\x73\xd0\x9c\x90\x64\x50\x25\xbb\xd1\x6f\x0b\x50\x93\x38\xd1\xe6\x59\xef\x71\x1a\x90\x43\xf6\xb5\x1b\x81\x65\x8d\x33\x0b\x50\x70\xd3\x5b\x78\x50\xa1\xcf\xc9\x10\x60\xb8\xb1\x62\x7e\x9e\x1c\xf6\xfb\xb9\x0a\x7b\x9e\xdb\x29\x18\xd9\xa1\x5f\x3d\x94\x85\xa1\xfb\x19\xc9\x3b\xa0\x99\xb6\x55\xed\x0a\x17\x3e\x39\x7f\x41\x86\x87\xfb\xfb\xb9\x79\x97\x94\x4d\xe3\x25\x71\x46\xf9\x73\x03\x9f\xd4\xa5\xcf\xa7\x78\x0d\x92\x28\x39\xee\x35\x59\x28\x0b\x32\xab\xba\x70\x94\xbf\x20\x33\xc5\x90\x2a\xbe\x1a\xce\x8a\x1e\x96\x6c\x21\x5e\x62\x5d\x07\xa7\xd8\x38\xe8\xb8\xa2\xc2\x2b\xf2\x36\xe7\xda\x5e\x4b\x1b\x49\x85\x75\x30\xc7\xb9\xae\xf7\xa8\x2e\xe4\xbe\xac\xc9\xba\x2a\xd8\x06\xc8\xb4\xb6\x1c\x9c\xb6\x5b\x9b\x47\xd1\xdc\x52\xaf\xd5\xc9\x79\x37\xd6\x16\x8a\xa2\xb5\x27\xc5\x5d\x45\x51\xbc\x36\x24\x14\xb4\x65\x78\x25\x57\x6a\xa5\x5d\x7f\xcd\x0f\x63\xb9\x58\x9b\xcd\xba\x2a\x39\x8e\xe7\xe0\xd8\x68\x46\xde\x27\x62\x39\x58\xb1\x2c\xce\xf1\x0c\xe1\x1b\xb2\x46\x38\x8b\xa2\x3d\x16\x45\xf1\x0d\xb9\x69\x9c\xd1\x8d\x9d\x11\xc2\x3e\xdd\x33\x28\xb3\x62\xc9\x16\x22\xbe\x81\xd8\xec\xa9\x0b\xbb\x5e\x33\x44\x7c\x9f\x73\xda\xd5\xad\x68\xdf\x6c\x45\xf7\x96\x72\x6a\x5d\x31\x2e\x13\xf0\xd1\xc8\x69\x37\xe1\xb4\x3b\x57\x9b\xd5\x35\xe6\xf7\xdd\x45\xce\xc1\x93\x9b\x92\x86\x74\x7b\x7d\x27\x3f\xcf\xb4\xac\x9a\x65\x37\x49\xca\xe6\x89\xa0\xaf\xb5\x0d\x59\x1c\x50\x69\x33\x84\xcb\xb8\xa8\x6b\x7e\x7a\x09\x92\x46\x43\xb8\x90\x57\xb3\xde\xda\x03\x0e\xd5\xbc\xb0\xde\xfd\x3e\x57\x66\x27\x13\xee\xe3\x70\x43\xf6\x83\xf5\x41\x6e\xde\xfe\x13\xf7\xf6\x5f\x18\x14\x59\xd1\x02\xe8\x80\x4d\x90\x5c\xce\xf3\xe0\xa9\x21\xc7\xa5\x04\x0c\x10\x89\x3e\x7b\xe8\xc4\x37\x00\x17\x27\x22\x80\x20\xdb\x2e\x6a\x3e\x70\x54\x09\xe1\x13\x47\xd4\x4d\x51\xc0\xe6\xb4\x5c\x13\x83\x51\x3b\x3a\x38\xbc\x32\x6f\x61\x8b\x18\xe8\x0f\x40\x08\x84\x50\xe7\xe5\x07\xfc\x55\x28\x0a\xaf\x8a\x47\x42\x57\x40\x05\x69\x29\x16\x02\x92\x4e\x42\x0a\x30\x72\x52\x47\xcd\x86\x04\xa7\xb7\xdd\xd3\x60\xe9\xe4\x40\x13\x80\xc1\xcd\x33\x69\x20\x12\x9c\x5b\x88\xfb\x2d\x76\x00\x0f\x27\x64\x32\x3d\xcc\xf7\xf7\x0f\x8d\x9f\xce\x2c\x8a\x28\x38\xf5\x93\xf3\x95\xf3\xf6\x18\x80\x32\x5c\x54\x09\xcd\xe5\xb0\x97\x71\x89\x8e\xd8\x24\x55\x46\x4c\x6a\xed\xc6\xb5\xe7\x97\x54\x97\x29\x26\xe9\x74\x9c\x28\x6b\xeb\x14\xee\x5e\xb2\xe3\xee\xfd\x94\x97\xdd\x39\x9b\x67\x7f\x74\x4e\x04\x69\x96\x97\x57\xcb\xae\x52\xe2\x7a\x02\x6e\xd0\xd9\x4c\xbd\xde\x53\x41\x79\xd1\x15\x79\xb7\x48\x04\x2b\x16\x77\xdd\x24\x4d\xbb\xf9\x02\x2e\x5f\xe3\xad\x54\xee\x33\x7a\x7d\xda\xef\x0d\xba\xef\x59\x51\x80\x54\x40\xd9\xc9\x76\x7b\xfd\xc4\xdd\xd3\xda\xf9\x95\x4b\xab\x05\x2b\x9f\x10\xfe\xe5\x5f\xb3\x38\xfc\x3e\xb3\xd8\x7a\xfe\xfd\xe9\xc9\xb1\x0a\xbb\x04\x05\x7c\xa3\xc3\x4a\xb1\xff\x6f\x9b\x1c\xbe\x7b\x0c\x15\xd9\x46\xa4\x39\x39\x53\xc9\x53\x45\x87\xb5\x13\x6b\x5f\x22\xe8\x6b\x21\xb6\xac\xcc\x5f\xeb\xf8\xbd\xc7\xac\x8d\x98\xb2\x3f\xad\x5e\xa8\x36\x63\xf7\x4e\xef\x2f\x5e\x9e\x7a\x79\xdd\x1b\x49\xda\x45\x27\x56\xbc\xb6\x4a\x68\x0b\xfa\x62\x59\x02\x21\xde\xd8\x65\x4a\x5f\xdd\x7d\x7f\x7a\x12\xb4\x98\x78\x01\xe5\xe5\x75\x16\x64\x88\xb9\x75\xa5\x71\x28\x9e\xf3\xc3\x7e\x5f\x18\xcd\x7c\x36\x11\xca\xa2\xdd\xd0\x2d\x0b\x32\x09\x35\x11\x03\xfa\x50\x3f\x8c\xcc\x24\x9e\x5d\x3c\x86\x8c\x9c\xa1\x89\x50\x06\x02\x85\x9a\xe2\xb2\x01\xc6\xcf\xf0\x02\xa7\x16\xe5\xcf\xc9\x52\x73\x76\xf3\xa3\x22\x9e\xa3\xf1\x32\x7c\xeb\x58\x36\x3c\x74\x14\xc6\x53\x41\x00\x2b\xc5\xb4\x93\x6f\x36\xcb\x1a\x9d\xb0\x46\x47\xb1\xe6\x70\x83\xd2\x64\x89\xc6\xd5\xa4\xb5\x39\xf1\x65\x1c\x9a\x8c\x06\x44\x3d\xf8\xa4\x81\x2b\xee\xf6\xec\xc4\xbe\x1a\x53\x67\x6d\x67\xc5\x63\xf6\xdd\xb7\xdd\x18\x11\x70\xac\x46\xb1\xed\xcf\xc5\xb6\xbf\xb7\xde\x2b\x75\x14\xb9\x57\xea\x61\x47\x27\x89\xcd\x26\xc8\x18\x69\xa9\x73\xe8\x14\x07\x67\x41\x82\x92\xec\x71\x37\x83\xac\x75\x06\x8c\x0c\x71\xee\xec\x56\xd9\xf3\xfc\xb0\xdf\x67\xc8\x5a\x7e\x2a\xcf\x39\x74\x92\xa8\xd9\x24\x6e\x36\x5b\x3b\x9b\x1b\x70\x56\xdf\xa2\x06\x64\xde\x59\xd2\xa4\x10\x0d\x36\x54\x9a\x63\xf5\x35\x82\xf2\x74\x7e\x56\x4b\x6c\x51\x42\xd7\x5e\x22\x75\x90\x54\x27\xf5\x0b\x34\x8c\xb4\xb9\xa2\xdf\x7b\x43\x6d\x63\x97\x62\x4c\xd3\xd2\xfc\xca\x32\xdd\xf6\x9e\x28\xe7\x04\x36\x3e\x88\xce\x2d\xa8\x88\x95\x5a\x11\x6f\x92\x21\xf2\x8a\xab\x03\x23\xa4\x74\xb7\x6f\x95\xac\x63\x8a\x5b\xe9\x38\x8b\x97\x71\x46\xf6\x86\x87\xfc\x05\x19\x46\x51\xf6\xff\xf0\xf6\x6e\x5b\x6e\xdb\xca\xda\xe8\xbd\x9e\xa2\xa5\x91\xc9\x45\x44\x90\x2c\x39\x33\xf3\x9f\x8b\xdd\x68\x0d\x1f\x13\x27\xf1\x21\xb6\x73\x94\xb5\x3c\xd8\x24\xd4\x42\x4c\x11\x9a\x20\xd4\xed\x4e\x53\x63\xec\xbb\x7d\xb1\xdf\x60\x5f\xed\x67\xd9\x8f\xf2\x3f\xc9\x3f\x50\x38\x10\x20\xa9\xb6\xe7\x5c\x07\x5f\xb8\x45\x10\xc4\x19\x85\xaa\x42\xd5\x57\xa7\x93\x49\xe3\x41\x68\x59\x37\x2b\xec\x51\x0d\x55\x8e\x6f\xd3\x2a\xe1\x07\xb5\x40\x34\x70\x0b\x03\x74\xb4\xba\x1e\x05\x0f\x1a\xb7\xc6\xc7\xe7\x99\xfc\x0d\x1d\x0e\xe8\x80\xc5\x5d\x88\x58\x27\xed\x7e\x38\x62\x43\xe1\x53\x6f\xb3\x79\x33\xd7\xe5\x60\x1a\x3d\x63\xe3\x85\xc8\x84\xe7\x72\xd7\x38\x64\x94\x8a\xe8\x0f\xa5\x51\x78\xb7\x57\x45\xc0\x0a\xb6\x5f\x1a\x6a\xad\x66\xf0\xbd\x3e\x8b\xfa\x9d\x4b\x78\xd7\x2b\x71\x16\x76\xc6\x78\x9a\xb0\x12\x54\xe9\x4d\x33\x6d\x1b\x7d\xee\x3e\x24\x40\x1c\x61\xbe\xbc\x58\xb5\x3c\xd9\xa1\x38\xc9\x5f\x9b\x30\x5b\xf0\x61\xcc\x71\xe9\x5f\xf3\x7a\x3e\x13\xaa\x10\xe7\x49\xc4\x43\x4f\x9f\x9e\x49\x62\xd3\xf7\xfa\x4e\xf8\xa7\xd7\x3f\xc4\x1c\x00\x29\xa7\x39\xcb\x9b\x81\x89\x59\x77\x07\xa9\x4c\x92\xbb\x96\xf8\x3d\x1a\xce\x90\x55\x8d\x36\xf3\xc2\xc1\x75\x42\x8b\x65\x81\x33\x56\xc6\xb7\xbb\x82\x82\x36\x0e\x73\xb5\x28\xba\xbe\x1b\x6d\x44\x76\x71\x13\xac\xaf\x4b\x2a\xdf\x76\xfd\x3d\xc0\x1e\xcc\xc1\x2e\x7a\xac\x9c\x99\x5b\x6a\x67\xd7\xba\x12\xa1\x83\xaa\xfd\x0e\x30\x28\x58\x19\xcf\x2c\x1f\x65\xaf\x77\x2c\x50\xd9\x0b\x7a\x0d\x54\xc9\x10\x57\x03\xf9\xed\xae\x6d\x84\xd1\x02\xbd\x89\x7d\xbf\xb9\x70\xd9\x34\x1c\xa7\xaf\x9f\x09\x5a\xf5\xa0\xcc\x21\x52\xde\x7f\x6d\xe3\x3a\x4a\xe1\xd1\x4f\xaf\x7f\xd0\xac\x31\xf8\x1d\x95\x5c\x9e\x34\xdc\xe7\xc8\x9a\xa1\x79\xa3\x29\x9b\x61\x1c\xb8\x65\xd5\xb6\x25\xd1\xa6\x1b\xad\x11\x60\xcb\x8b\x95\x5a\x32\xfd\xd6\xb9\x40\x26\xda\xbd\x08\x49\x65\xb3\x1a\x42\x0e\x2f\x6e\x8e\x0f\x50\x5b\x65\x06\x14\xd7\x37\x5c\x38\xe8\xe2\x7b\xd6\xcf\x1d\x36\x7d\x98\x11\x03\xf5\xd7\xa6\x20\x8a\xc2\x2e\x7a\xdf\x2c\x2f\x57\x89\xd7\x9e\x94\xb4\xda\xca\xb1\x44\xb8\x22\xbb\x38\x20\x2e\x38\x0d\x97\x07\x5b\xc7\x3f\xc4\xa9\x3f\x7a\xdc\x7b\x40\xc0\x27\x54\x16\x4c\xac\xad\x23\xf0\xf6\x73\x65\x8c\x10\xec\x98\xef\xfb\x28\x9a\x83\x4b\xeb\xed\x50\x5d\x1f\xa5\x93\x4a\xae\x73\xbc\xe8\x27\xa9\x69\x2f\x6d\x2b\x70\x8a\xac\x5f\x87\xdc\xef\x1e\x19\x9d\x61\x9c\x1e\xa1\x78\x05\xea\xe7\x02\x1c\xe2\x1b\x09\x76\x7e\x8a\xef\x62\x1d\x10\xee\x98\x08\xfe\x67\x98\x3d\xa7\x50\xb1\x06\x8c\xf6\x77\x68\x71\xf8\x54\x67\xb2\x0e\xbf\xcd\x6f\xd4\xc3\x51\xdd\xb1\x08\xa2\x28\x16\x3d\xd3\x89\xfa\x0f\x11\xe1\x06\xba\x3d\x0a\x47\x4e\xd0\xe6\xfe\x45\x1c\xf9\x90\x08\x2c\x3c\xa7\xdd\x4f\x9d\x3e\xa5\x3b\x27\xbd\x05\x2a\xc0\x8d\xc7\x9e\x16\x6f\xa8\x94\x05\xf5\x9d\x21\x4d\xa1\x27\xd7\x1b\x5a\xfa\xe9\xac\x3a\xb1\xa5\xe5\xea\x40\x61\x46\xc5\xa6\x83\x83\x3f\xf9\xc8\x20\x54\x91\xd3\x6a\xa7\xd8\x76\xe2\x18\x3b\x91\x42\xb4\x0d\x45\x25\x72\xde\xcb\xa2\x34\x06\x63\xff\xe2\x3d\x36\xc0\x7b\xff\x8b\x7e\x3a\x00\x32\xe7\x6b\x65\xb8\x31\x2b\x70\xdf\xb2\x28\x62\x1d\x63\xd8\x00\x41\x27\x8a\x62\xc5\xdf\x83\xe6\x26\x94\x7e\x9c\xcf\x85\xf3\xb8\xc2\xa3\x9f\x14\xa3\xc0\xca\x4b\xed\x1a\x71\x62\xcd\x6a\x0d\xbe\x61\x43\xe1\x7c\x4f\x74\x7d\x36\xbd\xd0\x25\xa4\xcb\xd4\xbb\x7a\x00\x45\xa2\xd9\x8b\xcb\x15\x36\xb0\x32\x2d\x08\xc1\x19\x5a\xc4\xb6\xfe\x07\x52\xd2\xed\x0e\x5a\xa0\x8e\x28\x6f\xea\x25\x87\x0b\x71\xdc\x3a\x09\x51\xd2\xf7\xed\xd1\xef\x5e\x74\x98\x03\x8e\x5a\xa4\xaa\xc7\xb5\x14\x1c\xf3\x44\xcf\x42\xee\xe1\x5c\x8e\x78\xa0\x59\x5d\x2b\xa8\xad\xc0\x24\xa5\x3a\xe1\xe5\x49\x0e\xc1\xb5\x20\x6c\x99\x56\x58\x9d\xda\x05\x1e\x76\xa3\x09\xdd\x21\xfd\xa1\x0f\x6d\x46\x7c\x4a\x0a\xca\x11\xea\xb9\xcd\xc7\xbd\x93\x47\xfa\xe5\xa7\xee\x35\xf2\x75\x4c\x91\x1a\x6c\x2d\x51\x35\xfc\xa4\x36\x6b\xef\xfa\x0e\xdf\x29\xaf\x75\x1c\x25\x7b\x5a\x30\x9c\xe1\x51\xc0\xa5\x8e\xf0\xd2\x78\xc7\xb7\xb8\xd7\xfe\x02\x1c\x41\xd4\x84\x90\x62\xd9\xe6\x61\x9b\x93\xa6\xa1\x07\x14\x61\xb3\x9c\xfc\xc9\x7b\xfb\xfa\xc1\x8b\x37\xcf\xde\x3e\x7b\xf9\xe2\xe4\xd1\xcb\xe7\xaf\x7e\x78\xf2\xf6\xc9\x74\x84\x70\xb0\x37\xad\x97\x94\x66\x43\x52\x2d\xd3\xc7\xa9\xef\x38\xc8\x51\xa3\x69\x0f\x3c\x43\x07\xa1\xc1\xb5\x89\xcc\x9e\x62\xea\x41\xc7\x37\x55\x60\x6a\x3d\xa3\x0f\x5a\x87\x94\x02\x9b\x13\xcc\x7f\x3f\x7b\xd3\x98\x44\xef\x52\x21\x61\xf4\x60\xc0\x2a\x9f\x97\x32\xa8\x10\xfa\xb4\xe3\x53\xfa\x91\x49\x9a\xfb\x87\x9e\x18\x8f\x91\x8e\xea\x15\x33\x97\x41\x9d\x67\xba\x79\xee\xda\xde\x27\x52\x1e\xc5\x6a\x2e\xec\x5e\x2b\xc1\x59\x11\xb0\x30\x45\x8d\x81\x6f\x8c\xcd\xa0\x0a\x95\x4f\xfd\x8d\x25\x0a\xc8\x91\xd3\x16\x34\x5d\x18\x78\x8a\x05\xea\x6b\xe9\xbb\x7a\x02\x3e\xdd\x97\x46\x3d\xe0\xd0\xff\x60\x17\x7b\x23\x00\xf2\x7d\x7b\x00\x5c\xeb\x60\x0c\x20\x4b\x33\x04\x1e\x71\xff\x9c\xee\xce\xb1\x0c\xc7\x5c\x6f\xaf\xdc\x4c\x66\xbb\xea\x66\xdd\x9a\x98\x51\x2f\xc5\x4f\xfa\x83\x58\xf1\x0a\xe1\xc7\x4b\xb1\xc2\xdd\x0a\xa8\xfe\xf0\x9f\x2c\xd9\x7c\x05\x45\xce\x1a\xf1\x6b\x8f\x6e\xf5\x3a\xf4\x86\x3d\x3d\xa6\x98\x09\x18\x9b\xfd\xc1\x23\x4a\x9f\x2f\x5f\xab\xcd\x19\x88\xcf\x86\x3a\xf7\x1e\xf1\x6d\x12\x6d\x5d\x74\xfa\xb4\x42\x52\x63\x7f\x75\x48\x14\x0d\x49\x47\x80\x51\xe7\x2a\x1a\xe1\xa5\xb4\xc8\x58\xd8\x94\x64\x31\xc0\x2c\xe1\x3a\xae\x8a\x82\x2e\xf4\x0e\xfd\x71\x7d\x89\xb9\x93\x4b\x89\x6c\xae\x71\x1b\xe5\x33\x03\x12\x24\x82\xb5\x08\x33\x08\x3b\x49\xfd\x88\x4b\xb8\x63\x2d\x9b\x53\xc2\x53\x4a\x73\x6d\xd9\xd3\x18\x20\x7b\xc5\x98\x44\xd7\x75\x55\x62\x3b\x2d\x0e\x76\x30\x10\x27\x95\x0d\x7e\xc4\x29\xbe\xbb\xea\xe6\xc2\x62\x5f\x29\x99\xce\xdd\x03\x34\x8e\xa2\x6c\x21\x5b\xe6\xf4\xbd\x2a\xe6\x44\x0d\x04\x1e\xce\xd4\xf0\xb6\x88\xde\x1d\x34\x92\x76\x6c\xcb\x9a\xc7\x8a\xdc\x86\x5b\x4c\xb1\x78\x9a\x08\xc2\x2f\x3d\x7d\xea\xa7\x23\x2d\xea\x01\x48\x44\xb2\x5c\x1d\xf0\xde\x82\xca\x69\xcc\xc0\xb4\x37\xec\x4b\x41\xf8\xb2\x5c\xe1\x8c\xa4\xcb\x72\x35\x28\xa2\xc8\xa0\xea\x10\x42\x32\xfd\xab\xae\x63\x01\x8c\xbf\x58\xc4\x95\xdb\xd1\x30\x60\x19\xc2\x45\x14\x55\x96\x76\xdb\xeb\xf0\x02\xa1\x64\x5f\xd7\x85\x9d\xab\xa1\x2a\xcb\xfc\x5e\xc4\x7b\x6d\x71\xde\xa2\x3d\xa6\x3c\x94\x54\x1e\xa5\xb4\x17\x7c\xba\x13\xb6\x03\x98\x35\x20\x73\xb6\x2f\x9d\x36\xa8\x5e\x39\x86\xcb\xe8\x4e\x49\xa7\x56\x43\x8a\xb1\xc9\x30\x15\xf4\x8a\x8a\x0a\x52\xd4\x44\x36\xfc\x47\xaf\x4d\x0d\x6d\x10\x3a\x40\x0f\xee\x07\x19\x0c\xa6\xb2\x6d\x29\x03\xec\x2a\x07\x5b\x73\xd2\xa4\x9f\xa6\xda\x6e\xc4\xc5\x3b\x2c\x97\xe9\x6a\xb0\x8f\x39\x6e\xcc\xc3\xad\x7d\x6d\xe7\x9a\x07\xfc\x83\xb4\x6b\x8d\x6e\x0a\x0f\x0d\xc9\xfb\xf0\xc5\xea\x3a\xb0\x36\x37\xb8\xde\x6d\x5d\xab\xd5\x9a\x80\xdb\x3e\xce\x08\xbd\x0b\x16\x0b\xaf\x89\x8f\x6c\x25\xa2\x68\x48\xef\x84\xb3\xc2\x1b\x42\xdb\x62\x66\x88\x8e\x25\x70\xde\x2e\xb3\xaf\xc8\x0e\x02\xd6\x20\xab\xeb\x75\x5d\x6f\xea\x3a\x5f\x98\x3e\x41\x0e\xc5\x4d\x16\xe6\xfa\xb2\xe1\x2f\x0b\x30\x22\x10\x47\x0f\x83\x0e\x06\x92\x9b\x6a\x8d\xb3\x28\xdb\xd2\x51\x89\x34\x8e\x0e\x21\x80\x70\x1f\x45\x26\x40\xa9\x7a\x30\x7a\x2f\x7b\x99\x16\x9e\x01\x40\xf8\x8f\x35\x43\x11\x7f\xcc\xb0\x58\xe9\x70\x1a\xe2\x08\x6c\x9c\xef\xdb\x0f\xab\x6c\x06\xb6\x15\x36\x78\x18\x00\x70\x39\xb4\x78\xa6\x96\x19\x5f\xee\xa7\x1f\xe8\xcd\x8a\xec\x4d\x64\x3c\x61\xe0\x2e\xf7\x53\x53\xc3\xb1\xea\x5a\x1f\x3a\x1b\x4a\xad\x84\x0d\xf5\x04\xc7\x6d\x8b\xbb\xd2\xde\xc6\x80\x2c\x59\xbe\x5a\xdc\xc9\x69\xdb\x83\xaf\x7d\xfd\x13\xac\x70\x98\x60\x5b\x64\x0b\x1f\xc2\x97\x76\x69\x14\xf9\xd6\x20\x4e\xe3\x8a\xdb\x0e\xf1\xbd\x75\x22\x50\x43\x52\x03\x70\xe8\x6f\x7c\x1d\xc1\xf1\xa0\x07\xa6\xaf\x11\xba\xa6\x7f\x15\x6d\xe3\x13\x5d\x60\xbd\x5d\x00\x17\x13\x5c\xaa\x06\x4b\x4e\x02\x39\xc0\x6b\x6e\xbf\xe2\xe3\xf8\xc9\x86\x8f\x09\xf1\x2d\x52\x2e\xc8\x4c\x43\xab\xc6\x8c\xa4\x8a\xe1\x8b\xc3\x43\x71\x29\x56\x48\x1d\xe7\xc6\x72\x86\x6b\x85\x17\x30\x91\xdc\xb7\x0e\xee\xee\xa3\x14\x5b\x9f\xd2\x40\xb4\x93\xab\x23\xaa\x3f\x8b\xcf\x15\x7e\x11\xa7\x38\x38\xa3\x35\x0b\xa8\x4f\x93\x36\x8c\x14\xf4\x35\x8a\xf2\x7e\x09\xd8\x9e\x35\xde\x19\xd3\x55\xbe\x5b\xb3\xe5\x8e\x73\x8a\xef\x1e\x6a\xc4\x14\xfd\x37\x46\xc6\xa6\xfe\xe8\x8d\xa6\x31\xd5\x05\x83\x84\x3b\x6f\x31\xf5\x25\x9c\x9a\xd9\xf0\xc0\x73\x3e\x05\x77\xc4\x84\x30\xf2\xb2\xa7\xdb\x8a\x29\xb2\xd8\x57\xc6\xe3\xd3\xbf\x92\x79\xcb\x8f\x44\x0e\xf9\xaf\x02\x26\x3e\x86\xb1\xb3\x88\x4d\x60\xaf\xde\x36\x3b\x6d\xcd\x70\x8e\xcc\x11\x11\xf6\x09\xd0\xed\x04\xe0\x7f\x89\x2d\xcd\x59\x2a\xbd\x13\xe7\x7f\xa8\x53\x27\xbd\xed\xd2\x41\x43\xd5\xda\x5c\x0b\x5a\x1d\x8d\xb4\xd6\xb9\x6a\x10\x44\x2e\x64\xeb\x5a\xa1\x6c\x41\x40\x3a\x05\x1e\xcc\x78\xb9\x9c\x39\x15\x81\xd5\x89\x81\x03\x06\x2b\x2f\x4f\xd2\x13\xd3\x80\xc0\x1b\xc3\x5e\xf4\xf4\x71\x41\x9e\xba\x8c\x61\x8a\xad\x1f\x4d\x8f\x08\x53\xd7\xe1\x35\x97\x25\x32\x3d\xaa\x34\xee\x63\xb3\xc9\x90\xa1\x90\x3e\x40\x5b\xea\x00\xda\x7c\x74\xb6\x54\x8f\x24\x7c\xf2\x0b\x93\x9b\xa3\x77\xd2\x47\x56\xbc\xab\x2e\xb8\x77\xfa\x6f\x5e\x1d\x8d\xa9\x45\x01\xbe\x72\x84\x2d\x21\xe6\x19\x5b\xce\x57\xc6\x7a\xba\xad\x96\xe4\xe8\xae\xab\x2e\x9c\x29\xe6\x61\x4d\x66\x78\x43\xaa\xae\xef\xc2\xe9\xfa\x6c\x73\x3a\x1e\xaf\xd1\xed\x3e\xce\x02\xc3\xd8\xe5\x7a\xe5\x79\x80\x35\xe1\x23\xb3\x96\xad\xfb\x51\x56\x93\xe2\x0c\x46\x0e\x1a\x77\xfc\x22\xad\xb7\x4f\xd2\x05\xb6\xf9\xcc\xab\x88\xe5\xe5\xca\xa8\xf7\xb5\x56\xc7\x59\x53\x04\x43\x53\x6a\x9b\x75\xe1\x54\x90\x3d\xcd\x0a\x5d\x1b\x4a\xbf\x54\x08\x66\xe4\xed\x29\x88\x63\xde\xb9\x02\xd2\x7c\x7f\x8f\x6e\xbb\xcb\x96\xfb\x86\x54\x15\x82\xf0\xaf\x6a\x01\x30\x52\xb8\xd0\x75\x67\x2c\x8a\xd2\x65\xe6\x6e\x8c\xe8\xe9\x78\x9c\xa1\x53\xb6\x8e\x33\x42\x5c\xbe\xb0\xf6\xb5\x3e\x29\x06\x6b\x5f\x79\x9b\x3a\x48\xb9\x6c\x6c\x43\xee\x78\x09\xc6\x76\xeb\x87\xd8\x9b\x8e\xaa\x99\x8e\x8e\x13\xc0\x1a\x17\xb8\x32\x21\x91\x03\x37\x32\x9f\x9f\xd3\x91\xcb\xea\x7a\x68\x1b\x78\xa2\xc3\x0d\xe6\xe4\xf6\x30\xd8\xc7\x39\x16\xd6\xbe\x3c\x90\x74\xdc\x2e\xb8\x52\x7c\xf9\x16\x6d\xdb\x7c\xf9\x15\x8a\xa2\xbc\x2f\x31\xce\x97\x57\x2b\xb2\x5d\x5e\x35\x72\xe3\x26\x8a\x86\x3b\xa8\xca\x9f\xf8\xff\xe6\x6d\xdc\x6c\xe1\x80\xde\x87\xcb\x2e\xa6\x18\x76\x37\x44\xaa\xd2\x47\x6b\x0b\x0a\xf1\xbf\xa5\x6d\x9f\xaf\x55\x9f\x63\x7d\x56\x1a\x57\x24\x1b\x60\xe3\x4f\x13\x73\x04\x62\x87\xf8\xe1\x46\x4a\x9e\xd3\xc9\x96\xe7\xfb\x82\xb6\x22\x8d\xb4\xe3\x89\xb4\x62\x89\x38\x4d\x54\xc0\x46\xbd\x37\x37\x7b\x8f\x52\x8d\x0e\xda\x5c\x61\xd4\x75\xdc\x9b\x01\x62\xe8\xc8\x03\x9d\xa6\x55\xba\x23\x3f\x62\x3a\x4d\x8b\x82\xbc\xd2\x7f\xf5\xcd\x61\x4e\x1e\x2b\x6e\x30\xcd\x28\x79\x81\x01\xbc\x65\x43\x9e\x99\x1f\x36\xc7\x53\xc0\xa3\x00\x1d\x13\xf9\x13\x43\xc7\xa9\x20\x0f\xe1\x97\xea\x23\x5b\xdf\x90\xb7\x18\x8c\x5d\xd7\xec\x72\x2f\x28\x51\x1c\x26\x2f\xc9\x8e\xaa\xbf\xeb\x35\xd9\xd2\x06\xd2\x82\xfc\x82\xed\xcd\x08\xf9\x07\xd6\xa1\x6c\x7e\xc2\x74\xba\x66\x85\xa4\x82\xfc\xa6\x5a\x57\xdd\x94\x4a\x28\x87\xe9\x78\x0b\xa8\xaf\x84\x4e\x1d\xd0\xc0\x34\x4b\x2b\xd9\x1f\xe1\x84\x91\xdb\x2d\xfb\xc8\xca\xa4\x17\xfa\x85\x1b\x22\xca\x4b\xd3\x2e\xfd\xb4\x5e\x63\x77\x89\x40\xfc\xe5\x80\xfb\xc6\xd4\xd0\x00\x7a\xc0\xdc\xaf\xc6\x86\xb8\x77\x28\x16\x2e\xc8\xbd\x1f\xbb\xf1\xed\xcd\x8e\x1a\x13\x6e\x5b\xa2\x0e\x05\x7f\x41\x4f\xd2\x13\xf7\xad\xbd\xb0\x2a\x0d\x26\x11\x23\x02\x22\x41\x42\x80\x04\xf5\x93\x2c\x57\x08\x4f\x74\xcc\x38\x1b\x37\x4d\x82\x54\x61\xb4\x7e\x07\xcc\xd7\xeb\xa4\xf7\x7c\xd1\x65\x0e\x1a\x4b\x04\x5d\x24\x98\xc0\x35\x65\xb9\x80\x6d\xcc\x84\x59\x8d\x39\x9e\x1b\x38\x66\xd3\x82\x03\x36\xe3\x94\xb4\x57\xb3\x61\x8d\x74\x4d\x26\x86\x25\x43\x3e\x36\x5f\x2b\xec\x62\x3c\xc3\x6c\xc9\x57\x08\x50\x00\x0f\x87\x41\x38\xf7\xcc\x98\x9f\xdd\x32\xb0\xa6\x86\x80\x48\xc3\xf9\xc1\x77\x12\xb5\xe3\x7f\xdf\x17\x27\xc3\xd3\xe0\x84\xab\x96\xa8\xff\x88\x3c\xb0\x29\xac\x93\x98\x23\x73\x40\x2d\x57\xad\x90\x2e\xaa\x1f\x6a\x80\x4d\x9c\x60\x08\xeb\x9d\x50\xbc\x4b\x6f\x0a\x9e\xe6\x09\x20\x71\xc8\xe9\xfb\xcb\x3d\xcb\xbf\xa7\x37\x98\xe5\xea\x89\xe5\x98\xaa\x86\xbf\xd0\x99\x73\x2a\x53\x56\xa8\x17\x82\x56\xfb\x42\x62\xc0\xf1\x7b\x96\x27\x42\x89\xb2\x2a\x77\xa1\xe8\x81\xca\x00\x3f\xb0\x64\x5b\xfa\x46\xa6\xdb\x5d\xf2\x58\x89\x5a\x25\xbf\x8e\x11\x86\x3b\xad\x84\x2f\x47\x4d\xf7\x27\xd7\x4c\x6e\x26\x60\xa1\x3e\x5a\x2d\x1a\xc7\x00\x5b\x90\x01\x99\x3b\xa0\x28\xaa\xa8\x7c\xcb\xb6\x94\xef\xa5\x6f\x6f\x64\xe7\x82\x92\xd9\x29\x6d\x22\x3b\x51\xab\x43\x95\x04\xe2\x6d\x0a\x22\xa7\xa6\xc7\x03\x31\x55\x7d\x25\x62\xfa\x81\xde\x8c\xc5\x94\xe5\xd8\x44\x76\xfa\xc6\x4f\x36\x3d\xc4\x42\xfb\x5e\x82\x86\xc5\x5a\xd4\x43\x8a\x7e\x42\x98\xbb\x7b\x3b\x69\x00\x98\x6c\x4d\xe8\xd0\xc4\x1f\x3e\xe0\xaf\x67\x61\xd0\x1c\x6b\x76\xd2\x83\x22\x03\xd6\xe2\xbe\xc9\xbd\xf6\x79\xb3\xf3\x4f\x07\x0d\x87\xa5\xd2\xe3\x0c\x4b\x77\x20\x6d\xc1\xb0\x02\x0b\x3f\xee\x0d\xba\x3d\x68\xfe\xc1\xec\xf9\x0d\x99\xe3\x9c\xdc\x6f\x16\xca\xae\x89\x92\x1f\x56\x1b\x34\x23\x8a\x54\xd2\x93\x56\xe3\x1c\x3d\x24\xa4\x58\xb4\x2e\x5a\xa6\xef\xb5\x84\x4b\xc8\x66\x71\x09\x5a\x21\xb3\x80\x50\xe2\xbd\xcb\x17\x6a\xbe\xad\x8f\x2a\x58\x84\xdc\x04\x99\x51\x72\x11\xdb\xbb\xc4\xe6\xc4\x81\x48\xcb\x84\x08\x28\x59\xa0\x64\x6b\x44\xc0\x1e\x24\x09\x83\x45\x8e\x0e\xf0\x37\xe9\x81\xe8\x11\x8b\xf6\xde\xe7\x9a\x7c\x77\xbc\xce\x21\x2c\x04\xeb\x73\xd4\x15\x37\xb7\xd4\xc5\x73\xc1\xa5\xbd\x1b\x63\x8d\x15\xe6\xe1\x10\x0b\x2c\x83\x2e\x94\x75\x1d\xeb\xf0\x16\xdd\xbe\xb4\x3a\xe3\xb2\xea\xee\xa8\x13\xdc\x6e\x93\xc1\xb0\x8c\x22\x06\xa1\x5a\xcd\x7b\x70\x50\xa7\xba\xc7\xaa\xc4\x4b\x3d\x04\x6e\xca\xb7\xcd\x0a\x54\xcb\x0b\xe9\xf7\x2e\xc8\x11\x33\x03\x13\x97\x44\x22\x13\xaf\x5c\x71\xcd\x76\xad\xea\x2b\x5d\xff\x94\x20\xcc\x2f\x43\x13\x69\xb8\x47\x55\x7b\x4f\x6e\x68\x69\x86\x83\x87\xf8\x1e\xaa\xad\x1c\x1d\xec\x0a\x84\x85\x5a\x62\xd6\x8a\x08\x43\xdd\xfa\x50\xab\xcf\xfe\x8e\xa9\x5b\x22\xf8\x7d\x10\x46\xe6\xd2\xa2\x54\xb9\x45\xb6\x56\xf2\xb1\xcd\x4e\x24\x76\xaf\x36\x18\xc4\xe7\xe9\xfb\x6a\x7f\x51\x65\x82\x5d\x34\xf1\x83\x17\x7c\xda\x90\xaa\x28\xda\xab\x53\xb1\x58\xb3\xa2\xa0\xf9\x08\x53\x94\xd8\x25\xf2\x1e\x53\xdf\xcf\xfc\xe6\x58\xe5\xfa\x31\xc7\x7e\x3b\x6c\x19\x57\x61\x19\x17\xed\x9b\xbe\xb0\x81\xe0\x99\x67\x1c\x6a\x69\x6b\xef\xb0\x65\xba\x22\x52\xfd\x19\x6f\x56\x44\xc0\x8f\x7c\x45\x4a\xe8\x67\x0a\xe3\x67\xd4\x61\x7e\xfb\x9b\xaa\xdf\x07\xcc\x9a\x5f\xa9\x20\xf6\x5b\x08\x58\xd9\x1a\x1c\x01\xdb\xdc\x1b\xa2\x64\xa4\xd9\x23\x3d\x5a\x78\xe6\x5b\xd6\x35\x3a\x7a\xcc\xc0\x54\xd2\x9e\x2c\x3a\xd6\xae\x6c\x62\xed\x92\xaf\x50\x49\xe4\xb2\x5a\x61\xa6\xfe\x8c\xc5\x0a\x97\x8b\xeb\x58\x2b\x33\x53\x94\xb0\x38\x55\x5c\x6c\xcf\xf4\x91\x99\x17\xa7\xea\xba\x23\x04\xe2\x94\xf4\x11\x02\x5c\x11\xed\x7a\x91\x22\xb5\x7a\x19\x11\x71\xe9\x5d\x73\x57\x3a\x2a\xec\x5e\x73\x10\x8c\x94\x03\x4b\xc9\x86\x84\xac\x81\xb1\x21\x44\x2e\x6e\x62\x89\x5b\x8c\xd2\x03\x6b\xd2\x56\x9d\x64\x96\x67\xca\xd2\x52\x1b\xde\x1a\x61\x22\x95\x27\x55\xba\xa5\x36\xe7\x74\x84\x50\x32\x84\xd3\x1b\x4a\xe4\x28\x49\x17\xdb\x58\x62\x86\x12\x4b\x55\xdd\x43\x1e\x45\x37\xf0\x84\x02\x4c\x6b\x3f\x4a\xa7\xd6\xde\xb8\x19\x2c\x55\x11\x51\x34\xa4\x75\x5d\xea\x02\x9c\x93\xc9\x49\x67\xe9\x67\x9b\x94\x95\x36\x56\x9e\x0e\x9a\x01\xff\x6b\xc1\x23\x58\x82\x9e\xed\xb0\x96\x41\x9a\xd3\x22\xce\xb0\x70\xca\x21\x33\xe7\x7d\x8b\xa9\x55\x1d\x53\xf2\x0f\x21\x6b\x74\xd1\x68\xa3\x7c\x4a\x53\x11\xe8\xcb\x82\x26\x72\xd0\x21\xdc\x8e\xe0\x5c\xc7\x6a\xcd\x54\x38\x55\x47\x81\xa3\xc9\x57\x00\xd1\x7d\xc4\x75\x25\x44\xb0\xb5\x86\x3c\x8f\x02\x77\x38\x6d\x4d\x63\x51\xe3\x20\x8a\x45\xe6\x0c\xf7\xdf\x83\x9d\xce\xcb\xf2\xb5\x96\x14\x0c\x46\xc3\x7b\x56\xfd\x54\xb1\xf2\x52\x0b\xba\x5a\x1c\x20\x84\x7c\xe8\xbc\x35\x5a\xf4\x06\x5e\x4f\x1d\xb3\x36\x57\xc9\xa4\x16\xe0\x8d\xdd\x9d\xe5\x17\xef\x84\xb7\x85\xcf\xfa\x2f\x7b\xcc\xbe\xa9\x6b\x83\xec\x6f\xb6\x91\x6d\xb3\xa0\xdb\x94\x95\xac\xbc\xf4\x52\x80\x8a\x79\xa8\xf9\xb6\xd7\x14\x1c\x37\xb5\x39\x3a\x80\xf1\xb9\x84\x23\x62\xb0\x57\xa1\xb5\x6c\x37\x43\x0a\xf1\xa9\x45\x40\x4c\xad\x1c\x6c\xea\x4a\xb3\xcd\x93\x52\x8a\x9b\x98\x2e\xcb\x15\x2e\xe1\x8e\xc7\x2a\x2a\x69\xf6\xe1\xe9\xbe\x00\x92\x04\xbe\xf5\xba\x35\x9d\x74\x7f\xfe\xd9\x3a\x9e\x11\x07\x77\x67\x3b\x1d\xc0\x12\xda\x95\x6b\xa0\xa7\x6c\x4b\x29\x6a\x0d\x8c\xbe\xa3\x51\x14\x02\x64\xd0\xe7\xe9\xcd\x05\x7d\xbb\xa1\x65\x7a\x51\x74\xaf\x2d\xfd\x3d\xda\xb3\xd2\x9c\x5f\x4c\x77\x79\xf8\x34\x6d\x38\x1b\x68\xba\x45\xfd\x53\x77\x8f\x6e\x53\x4b\xb9\xe0\x78\x37\x8c\x5c\x43\xba\x50\xfb\x1c\x31\xc4\x42\x0b\xcf\x0f\xa4\x3b\xc0\xb0\x6c\x0e\x30\x2c\x1a\x96\xa1\x47\x64\x64\xa8\x5d\xc8\x46\x7d\xed\x7f\x75\x64\x3b\xb8\x7b\x76\x7a\x7d\x52\xc6\x19\x1a\x00\x15\x4c\x17\x37\x71\xa5\xa8\x60\xbc\x8b\x2b\xac\x98\x1c\xd3\xca\x6b\x66\x15\x01\x0f\x64\x0c\xae\x0a\x41\xc8\x9d\xf0\xbd\x2e\xb3\x87\x4d\x94\x06\x57\x51\xf1\x21\x47\x3f\xf6\xd1\x20\x6d\x44\x9d\x66\x09\x76\x26\xd5\x60\x27\xf6\xb2\xf9\x0b\x7f\x74\x82\xb5\x61\xb9\x36\x97\xe1\x35\x0c\xb7\x37\x80\xde\xaa\xca\x1f\x1c\x55\x75\x06\x1b\x69\xc0\x42\x8e\xa4\x87\x3e\x69\xef\xf0\x7c\x71\x13\x33\x55\x7d\xdc\xad\xdf\x96\x8f\x8f\x6e\x30\xe4\xda\x66\x3f\xea\x0c\x4a\x6b\x6b\x4d\x26\xc1\xb6\x59\xca\x15\x11\x50\x86\x3f\xf2\x77\x6c\x97\x81\xe2\x96\xda\xe2\x81\x6f\x7e\xde\xb3\x00\x0f\x9f\xcc\x99\xdb\x9c\x9d\x68\x13\x6f\x3e\xbf\x1f\xfa\x94\xbe\x85\x61\x4f\x7c\xf6\x11\x2e\xe4\x13\x71\x48\xec\xbb\x86\x57\x12\x34\xad\x78\x99\x08\x0d\x49\xf6\x80\x80\x4a\xee\xfd\x68\xdc\x88\xd2\xe3\xd1\x64\x84\x5f\x1a\x74\xae\x63\xe8\xeb\x5e\x0b\x59\x4e\x5e\xda\x58\x5b\x5a\x62\x70\x24\xbc\xeb\x7b\x69\x89\x57\x90\xe6\x71\x57\x64\xb9\xc2\xdd\xe3\x1a\x9c\xc8\xcd\x71\x8d\x70\x66\x20\xce\xfa\xd4\x48\x51\x14\xdc\xce\xf6\xa8\x94\x7e\xe3\x7b\xad\x4d\xda\xa5\x55\x05\xd7\x56\xb0\xe3\xc4\x49\xa3\x28\xa9\xc0\xe9\x7f\xcd\x44\x25\x4f\xec\xb9\x77\x22\x39\xa4\x5a\xcf\x01\x8f\xed\x18\xa1\x83\x81\x04\xf5\x8d\x71\xe9\xa2\xef\x18\x1c\xce\x81\x80\xca\x90\x42\x18\x53\x2b\xbc\xb5\xb2\x57\xef\x5b\x2b\x99\x59\x86\xb1\x44\xb7\x37\x1a\x87\xff\x60\x71\x01\x92\x4f\xf5\xfe\x69\xca\x0a\x9a\xab\xce\xb8\x0e\x9c\xfc\x9b\x21\x8b\xff\x96\x9c\xbc\x2a\x68\x5a\xd1\x93\x3d\x90\x27\x7a\xf2\x6f\x25\xbd\xfe\xb7\x13\xbe\x53\x67\x2b\x17\x18\x48\x96\x41\x31\xf1\x07\xc0\x72\x9a\x17\x14\x98\x4f\x9a\xab\x21\x6c\x34\x75\x53\x18\xa0\xbb\xf9\x06\x7b\x38\xf4\xdf\x5e\x2a\xb6\x6b\x2d\xa9\xf0\xd9\x2e\xe9\x49\x6d\x8d\x9a\xc4\xda\x36\x83\x84\xaf\xc5\xd7\xc3\x67\xc5\x25\x03\x73\x3e\xab\xb6\x3c\x1a\x95\x2c\xb8\x52\xf5\x46\xc0\x5e\x3b\x77\x59\x7e\x43\x87\x43\xef\x15\xd1\xc5\x0a\xbb\x13\x3d\x59\x1c\xfc\x35\xf1\xd9\x5f\xeb\x15\xa0\x3e\x36\xc4\xde\xc4\x6a\xeb\x86\xb8\x79\xe4\x0f\xc8\xad\xca\xd6\xac\x24\x20\xf8\x4e\x3d\xec\xab\x20\x3c\x09\xe8\xad\xbf\xc8\x7b\x54\x68\x9f\x0a\x88\x34\x9e\x23\xcc\x34\x0f\x31\x3b\xe5\x00\x47\xe0\x62\xc5\x34\x37\x11\x7c\x65\xd0\x12\x6e\x8d\x13\xe2\x10\x84\xce\xce\xe1\x97\x22\x80\x06\x09\xd5\x4d\x1f\x50\x13\xba\x56\x33\x31\xa9\xcf\xc4\x14\x3e\x57\xf0\x41\x71\x05\x4e\xbf\x53\xe1\x02\xe1\xca\x0a\x65\xc3\xf9\x80\x45\xd1\xd0\x1a\x9e\xa7\xe4\x51\xac\x64\x45\x74\x28\x97\x7c\x45\xd2\x83\x36\xae\x6a\x97\x52\x2e\xc5\xaa\x65\xf4\x43\x17\x37\xf1\x1e\x3b\x08\x65\x10\xed\xb6\xf1\x5e\x9d\x8d\xc3\xe6\xa9\x9f\xa3\xa5\xbd\x17\x3a\x93\x79\xef\x55\x0e\xf5\x6c\x08\xc4\x21\x6e\x58\x79\x94\x84\xc1\x72\x25\x6a\x55\x19\xfa\x89\x43\x48\x20\xda\x58\x63\x36\x35\x97\xc8\x4c\x5c\xa9\xa3\xc8\xa8\x91\xa0\x6a\xba\xec\xc7\x29\x99\x9d\xa6\x8d\xe4\x9d\x42\xe3\xe4\x32\x5d\xad\x08\x5b\xa6\x5e\xa0\x16\xbf\x7d\x8a\xda\x25\x7a\x44\x0e\x98\x2d\xba\x6c\x88\xf9\xe6\xc3\x14\x16\xe5\xf1\x58\x0f\xaf\xdd\x27\x07\x74\x88\xf7\xb8\x34\x08\xf3\x28\x79\xed\x3f\x1d\x9a\x2b\xe0\xf7\xef\x81\x4a\xbd\x7f\x4f\xa8\xaf\xee\x7c\x1d\x6a\xe4\xcc\x55\x71\x5c\x36\xc6\xea\x4c\x13\x65\xe6\x64\x40\xda\x7c\xfd\x2a\x20\x3b\xba\xd5\x40\x6b\x9a\x7b\x9b\x0f\xf8\x83\xbe\xb9\x29\x30\xbc\xef\xa7\x58\xed\x10\xc7\xa0\xdc\xfe\x68\xef\xc3\xc1\x76\xde\xf2\x65\x89\xb9\x3f\x76\xc0\x93\xde\x61\x60\x4d\x99\xc1\x65\xc8\x5c\xb0\x18\x02\x7e\xcd\xe4\xe6\x24\x2d\x4f\x52\x55\xc3\x08\x01\x41\xfc\xa0\xaf\xc0\x8e\xdd\xc7\x37\xda\x62\xb5\x47\xdb\x4d\x44\x6e\x37\x89\xb6\xee\xc2\x79\x02\xa5\x19\xfd\x44\x3b\x10\x16\x03\x2f\x22\x7a\x47\x72\x73\xce\x93\x6a\xf5\x5f\x18\x3c\x11\x4b\x22\x97\xe5\x0a\xdd\xc1\xc9\x6d\x8d\xd7\x60\xcf\xab\x1b\xfd\x0a\x35\x8b\x54\x0d\x86\x91\x99\x0b\xf8\xfd\x47\x18\xa4\xf0\xd8\xd0\x04\x05\x62\x28\xa7\xc1\x97\xb1\xf7\x24\xe4\x41\x90\x0c\xa1\x38\x9f\x00\x3b\xf6\xfc\x13\xb8\x38\x2d\x32\x6d\x3d\xab\x87\x73\x07\x8a\xf3\x49\xbc\x9b\x43\xfc\xd1\x3b\x18\x1e\x7f\x7a\xdd\x3d\x8f\x3f\xc0\x89\xe9\x56\xdc\x87\x4f\x2f\x37\x73\x6b\xfa\x19\xab\xce\xb5\xe4\x45\x6b\xf3\x00\x26\x11\xec\x9e\xe7\xfe\x10\xfa\x92\xc1\x1b\x18\xb3\x3f\xee\x18\x33\xa7\x75\x8f\x3f\xdb\xf6\x12\xd5\x75\xcb\x85\xf2\xf3\x02\x1f\x0e\x8e\xcc\x4d\x89\x99\x9d\x9a\x7f\x05\x00\xb2\x4f\xe3\x12\x70\xda\xce\x5a\x35\xd4\x9a\x94\xc7\xb4\x26\x0d\x96\x51\x0b\x02\x86\x39\x93\x75\xe7\xe4\x65\x44\xbf\xb6\x06\x87\x05\x64\x9f\x07\x7b\x34\x3d\x63\x9a\xfa\x13\xba\x94\x60\xe9\x6e\xed\xbe\x1a\x4d\x8b\xc0\xf2\x93\x6a\x96\x70\x99\x3e\x6b\x2f\x0e\xbb\xe7\x71\xe7\x54\xa0\x8e\x79\x20\x84\x50\xff\xd2\xc1\x72\x6c\xfd\x57\xd1\x76\xf5\x6e\xd2\x6a\x73\x6c\xdd\x9a\xa2\x02\xe4\xaf\x3f\x5a\xdb\xe3\xa0\x19\xe1\x1f\xfe\x27\x76\xf2\x1f\xde\x10\x3d\xfd\xef\x1f\x22\xcf\x1e\xe2\x9f\x19\xa1\x1f\x60\x84\xc0\x89\xcc\x1b\x24\xd7\xf0\x3f\x35\xa0\x8d\xaa\xaf\xff\x9a\x56\xbf\xa3\x07\x84\xbd\xb3\xf6\x61\xc3\xac\xdf\x9a\xae\xba\x98\xa6\x40\x9d\x6c\xe0\x8a\x0e\x10\xb7\x61\xdd\x42\x5e\xad\x41\xc9\x06\xf3\x73\xa3\x6f\x3d\xe8\x71\xfe\xe1\x6e\x02\xf4\xed\x27\x81\xf3\x8f\x4d\xf6\x0c\xb3\x66\xba\xff\x6b\xa8\x43\x80\xae\x7a\x54\x2b\xcb\x3b\x5a\x59\x7e\x4c\x2b\xcb\xad\xb6\x66\x9b\xee\x9e\x96\x84\x1d\xa3\x36\xc7\x55\x36\x6a\xb9\xab\xf5\x06\x57\x22\x6d\x5a\xe0\x95\xad\xe8\x02\x32\x18\xb2\x8e\xd9\x6a\xeb\x00\x73\x2c\x31\x83\x2c\x9e\x92\xed\x53\xca\xa0\x90\x98\xfc\x14\x86\xbb\xee\x53\x33\x2c\x8e\x9d\x71\xdb\x74\x77\x42\x3f\xee\x00\xe6\x33\x0d\x54\x0a\xe9\x49\x45\x33\x5e\xe6\x4e\xa3\x30\x42\x8a\xd3\xf7\x37\x62\x27\x50\x8f\x09\x76\xd5\xe1\xa5\x7a\x77\x9f\xaa\xfa\xee\xf3\xd4\xdf\x74\xdf\x6a\xb2\xa4\xea\xec\xd9\x73\xbf\xdc\x41\x2c\x9a\x5c\xff\xe8\xe4\xd2\x88\xe0\x2a\x93\x5a\x5f\x3f\xab\xc3\xe7\x9b\x63\xab\x1f\xb5\x60\x57\xda\xf7\x0c\xff\x99\x65\xff\x2f\xa8\xe0\xc3\xe8\xd7\xf6\xea\xb7\x47\x2f\x6f\x8c\xb0\xfa\xb0\x28\xe8\x90\x90\x9f\x0f\xe8\x33\x35\xf7\x9f\xb7\x29\x6e\x3b\x0b\x76\x60\x0d\x4d\x9d\x36\xbe\xbd\x49\x1a\x27\x71\xee\x1c\xe6\x5b\x7b\x24\x85\x3d\xc2\x6d\x08\xc3\x66\xc3\x59\x94\xe6\x23\xdb\x47\xd4\x75\xdc\x6e\xd1\xcf\xfa\x40\xfe\xd6\xdb\x43\xbf\xfd\x27\xf6\x90\x1e\x5f\xb7\x8d\xfe\x47\x37\x91\xa9\xfb\xf3\xf7\xd1\x37\x7d\xfb\x48\x4d\xd0\xf7\xf8\x0b\x32\x6b\x06\xe4\x47\xbd\x57\x32\xba\xfc\x62\x45\x28\x56\x7f\xc7\xf3\x15\x91\xf8\x3e\x21\x24\xfe\x62\x4c\xee\xa3\x28\x2a\xa9\x81\x79\xfb\x95\x8c\xf6\x65\x4e\xd7\x70\x4b\xe9\x86\xec\x9a\x95\x39\xbf\x5e\xe8\x3f\xf6\x34\xfb\x8e\xfc\x0a\x00\xab\xbf\x93\xef\xa6\xcf\xf7\x12\xa0\x1e\x5e\x5e\x54\x54\x5c\x51\x51\xd7\xdf\x4d\x7f\xa1\x17\xdf\x33\xd9\x7e\x83\x29\xf5\xab\x70\x9a\x93\x8a\x16\xeb\x28\xea\xab\xdc\x04\xbc\x8a\xa2\xd1\xd2\x68\x00\x4d\xca\x6a\x44\x08\xb9\x3d\xb8\x58\xcd\xfa\x10\x33\x2f\x11\x96\xb4\xb7\x2f\x3f\xb1\x52\xfe\xfd\x51\x91\x6e\x77\x34\x87\x29\xe9\xaf\x95\x6d\x77\x5c\xc8\x37\x99\x60\x3b\x59\xf5\x67\x79\xae\x41\x4e\x1f\x6d\xd2\xb2\xa4\x1e\x3c\xa6\xf0\x22\xd3\x76\x55\x6a\x3e\x2b\x41\xf1\x1c\x69\x7d\x78\x49\x31\xa3\x98\x53\x9c\x52\x5c\x51\xbc\xa7\xb8\x50\x73\xe5\x1d\x77\x73\xfa\x95\xb7\xcc\xd7\xb4\x63\x26\xf6\xc5\x29\x55\x93\x79\x1b\xcf\xd4\x24\xd3\x15\x8a\xd5\x9f\xf1\x7c\x85\xf4\xb3\x55\x7d\x9b\x54\xeb\x83\xf3\x05\x99\x1d\x28\x5d\xc4\x7b\x4a\xcc\xd0\x4d\x4b\xfa\x51\xbe\x65\xd9\x07\x5c\x34\x69\x57\x54\x54\x8c\x97\xd5\xb4\xe4\x39\x9d\x6e\x61\x9b\xdf\xfb\x8f\x78\x91\xc4\xef\xf2\x31\x7a\x37\x45\x8b\xe0\xf7\xbb\x2f\x6b\xf5\xfb\x8b\x7b\x08\x87\xeb\xbf\x80\x08\x63\x33\x35\x75\x05\x5d\xce\x57\x51\x34\x9a\xdb\xa7\xfb\x10\xa3\x88\x92\x8a\xca\x67\x5b\xe3\xec\x82\x70\xd9\x17\x74\x74\x4f\xe3\xb5\x12\x8c\x93\xdf\x17\x31\xa7\x64\x86\x53\x3d\x56\xbf\xab\x64\x5c\x51\x92\xf3\x0c\xf6\xa9\x01\x82\x7d\x4b\x3f\xca\x17\x3c\xa7\xf1\x68\x84\x70\x4a\xa7\x5c\x2f\xc7\xb8\xa2\xf8\x36\xdb\xa4\x22\xcd\x24\x15\x8f\x53\x99\x26\xe0\xdc\xd4\x5b\x67\x45\x75\x94\x16\x4e\xc9\x78\xcc\xe9\x5f\xee\x1f\x50\x22\xe9\x22\x8e\x99\xf1\x76\x0a\xd6\x03\x9a\xaa\x05\x34\x9f\xf2\xd2\x82\xe1\xae\x69\x7f\xb9\x8c\x42\xd6\xfb\xd3\x1d\xaf\xa4\x29\x24\x9e\xa9\xce\x95\xf6\x0e\x83\x10\xf2\xeb\x91\x20\x6c\x82\xfe\x63\xcf\x84\xa7\xf4\xd7\x1a\x22\xbd\x2e\x9e\xda\xc4\x91\xa7\x72\x1e\x21\x70\x0a\x83\xcf\xe2\xd1\x15\x15\xf2\xe3\xa8\x1b\x1b\x33\xfe\x9e\xd0\xa9\xd8\x97\x2f\xcb\x1f\x38\xdf\xd5\xb5\x79\x30\x8e\xcc\xc8\xaf\xef\x7b\x98\x8b\x44\xad\xfb\x0e\x58\x19\x24\x1e\x62\x04\x6f\xad\x5d\x10\xf9\x11\x1b\xc5\x7a\x9f\x9f\x8b\xb7\x43\x28\x9e\xa1\x83\xb6\xf6\xa7\xe4\x97\x81\x31\x2e\xde\x68\x5b\xc1\xfc\x48\x18\x30\x6b\x2a\x01\xec\x80\x67\x0e\xa8\xb6\x0c\x9f\x72\x13\x04\x20\xe6\xbe\x69\x41\x63\x41\x66\x72\xad\xd7\x7d\xd9\x00\x51\x4b\x77\x21\xa7\xf8\x38\xa9\xec\x51\x0d\xeb\x17\xd3\xf7\xef\x5f\xbd\x7e\xf9\xfc\xd9\x9b\x27\xef\x9f\xbd\x78\xf3\xf6\xf5\x4f\xcf\x9f\xbc\x78\xfb\xe0\xed\xb3\x97\x2f\xde\xbf\xd7\x67\xfe\x15\x25\x9f\xce\xea\xe4\xdc\x4b\x7a\xc2\xca\x93\x34\xf6\xac\x4f\x47\x80\x01\x73\x45\xd1\x55\x27\xdc\xe7\xa5\xda\x7c\x3b\x1a\x5f\x52\x7c\x45\x97\x97\x74\xa5\x89\xfe\x0d\x25\xb7\x69\x95\xee\x92\x1f\xb1\x1a\xdf\x64\x43\xb1\x0d\x41\xf7\x01\x7b\xa6\xbe\x09\xc3\x69\x51\x24\xaf\x70\xa3\x48\x49\x1e\x63\x91\x66\x34\x79\x81\x95\x0c\x96\x3c\xc3\x9e\x28\x96\x3c\xc5\xc6\x30\x3d\xf9\x13\x83\x59\x7a\xf2\x10\x3b\xa3\xf4\xe4\x2d\x76\x26\xe9\x49\x8a\x79\x99\xec\x28\x98\x45\x6f\x29\xb6\x72\xd3\x2f\x56\x64\xfa\x07\xde\xa6\xbb\xe4\x27\x0c\x43\x9f\xe4\x14\xeb\xe3\x32\xf9\xed\xe0\x99\xfa\xdf\x28\x49\x4c\xc6\xda\x96\x5f\xdf\x8d\x79\x8b\x54\xcf\x54\x3c\xfa\x03\x7c\x37\x46\x78\xb9\xf2\xdf\x06\x16\xfe\xe6\x36\xc2\x94\x9b\xa8\xa3\x69\xfa\x07\xb8\x85\xe1\xf7\xef\x69\xf5\x1c\x9c\x06\x14\xa1\x38\x40\x25\x4f\x54\x7d\xd3\x47\x7c\xbb\xe3\xa5\xa2\x38\x82\xf2\x1d\x2d\xe3\xdb\x2f\x92\x16\x2b\x00\xec\x0b\x2d\xa8\x9a\x25\x67\xf6\xba\xd0\x25\xc7\xc6\xe2\xc6\xbe\x4e\x4c\x72\x90\x78\x38\xa0\xa3\x8d\xd6\xad\x78\xbf\xe5\x39\x5b\x33\x2a\x9e\xa7\x65\x7a\x49\xc5\xa3\x74\x97\x5e\xb0\x42\x32\x5a\x91\x3b\x73\x30\xc8\xd2\xc7\x5a\x42\xf4\xaf\xd1\x57\xd3\xf9\x57\x23\x84\x6f\x0f\x87\x43\xcb\x91\x94\xad\xe3\xae\x11\x80\x76\xb3\xe8\xd9\x06\xda\xe3\x02\xe9\x3f\x53\x93\x8f\xd0\xd8\x98\x3d\x05\x16\x17\xee\x23\x3d\x77\x51\xa4\xff\x4e\xd3\x6d\x6e\x87\xcf\xcc\xea\x72\x85\x29\x3a\x85\xc1\xaa\x6b\xbd\x7d\xd0\xf4\x11\xcf\xe9\x73\xa6\x63\xcc\x00\x11\x3a\x36\x74\x9a\x56\x96\xe9\x15\xbb\x4c\x25\x17\xd3\x7d\x45\xc5\x83\x4b\x5a\x4a\x2c\xbd\xd4\x5d\x91\xca\x35\x17\x5b\x2c\xc8\xbd\x4b\x9a\x7d\xe0\xef\xee\xbd\xcb\xef\x31\x1d\x41\x0c\x90\x8a\xef\x3d\x7f\xf3\xec\xc9\xc9\xbb\xfc\x9e\x4b\x63\xe4\xde\x5b\xc1\x72\x5a\xca\x77\xf7\xe2\x45\xb2\xfc\x5f\x93\x7f\x5f\xd5\xef\xf2\xdb\xfb\xf8\x80\xde\x4d\xa7\x5f\x8a\x2b\x7d\x66\xde\x9b\xd2\x8f\x34\x53\x5f\x80\x17\x17\xc3\x29\xe1\x51\x14\x97\x0b\x77\x8c\xd9\x1f\xcf\x79\x4e\xeb\xfa\x6f\x09\xf8\xe1\xe0\x8a\xdc\xd3\x6c\xd6\xbb\x7b\x4d\xa5\x7b\x52\x45\xd1\xbd\x1f\xa5\x6a\xdf\xf8\xdd\xf4\x5d\x3e\x6e\xde\x15\xe4\xde\xa3\x8d\xe0\x5b\xea\x7f\x90\x91\x7b\x2f\x77\x54\xa4\x7e\xda\x9a\xdc\x7b\xb0\xdb\x15\xf4\x44\xad\xeb\xbd\xa4\xc2\xbc\x6a\xc6\xe3\x8a\x96\x39\x17\x08\x6f\xc8\xbd\xe7\x69\x76\xf2\xf2\xcd\xc9\xaf\x27\xf3\x77\xf9\xbb\xc7\xf1\xf2\xef\xba\x9b\xef\x72\xf4\xee\x71\x53\x64\x4e\xee\xbd\xda\xa4\xa5\xe4\xdb\xef\xde\x34\xa9\x3b\x53\x91\xee\x87\x4b\x8f\xa2\x7b\xcf\xf9\x05\x2b\xe8\xbb\x7b\xef\xae\xbd\x0e\x6c\xc9\xae\xae\xef\x3d\x28\x73\xc1\x59\x5e\x5f\xd3\x8b\x97\x6f\xea\x87\x45\x9a\x7d\x78\x48\x85\xb8\xa9\xa1\x1f\x27\xcf\x59\xc9\xec\x4f\x7e\xc1\xea\x67\x4f\x74\x59\xde\x6c\x5d\x41\x39\xcf\xd3\xcc\x14\x2d\x11\xbe\x24\xf7\xde\x5d\x3c\x12\x2f\xdf\xbc\xbb\x68\xea\xbb\x21\xf7\xae\x59\x69\x3f\x94\x08\x5f\x90\x2c\x8a\x1c\x07\xf4\xb3\x66\x8b\xde\xdd\x8b\xdf\xe5\x5f\xaa\xb1\xfe\x12\xdd\x43\x83\x8b\x28\x8a\x2f\xc8\x8b\xbd\xda\x70\xf1\x85\x9a\x29\x84\x2f\xa2\xe8\xe2\x9c\xcc\xbf\x86\x98\x20\xc3\x39\x18\x64\x6a\x59\xf2\x3d\xb9\x52\x7c\x4f\x5d\x67\x6a\xca\x41\xf9\x75\x51\xd7\x17\x67\xf3\xfb\xd3\xf9\x1c\x21\x7c\x4d\x44\x5d\xf3\x28\x4a\xcf\xc9\xbf\xe3\x27\xea\xdb\x8f\x00\xb4\x12\x18\x6e\x18\x58\xae\xb6\x31\xc0\x9b\x26\x48\x1f\xbd\x36\x39\xb5\xc2\x85\xef\xd4\xc7\x15\x91\x44\x2e\xae\x79\x2c\x51\x72\x7b\xc0\xd7\x3c\xfe\x55\x68\x39\x0c\x3f\x8b\x65\x03\xcd\x06\x86\x1d\x83\x91\x8e\x5f\xe0\xd9\x95\x6a\x14\x10\x7a\x7d\x72\xc5\x94\x00\x08\x71\x1e\x4d\x04\xb4\x69\xc1\x4a\xfa\x86\xee\x52\xb8\xc3\x47\xce\xfb\x39\x23\x16\x52\x16\x9a\x34\x65\xe5\x6e\x2f\xdf\xc8\x9b\x82\x56\x4b\xe9\x3d\xad\x9c\x7b\x8d\xfe\x90\x55\xbb\x22\xbd\xd1\x1c\x31\xf8\x1f\x97\x68\xc0\xa6\xd7\x22\xdd\xed\x80\xfc\xba\xcd\x0e\xe2\xfc\x73\xf3\xf5\x6b\xf3\x57\x37\xe7\x17\x95\x1b\x64\xee\xd8\x2f\xd4\x95\x92\x15\x69\x55\xbd\x48\xb7\x74\x4c\x46\x27\x4d\x91\x13\xf5\x7e\xa4\x0a\x49\xf7\x92\xaf\x79\xb6\xaf\xa2\x68\xb8\x8d\x22\xa6\xdb\x3b\x85\xa4\x18\xe1\x87\x71\x63\x42\x6a\xfc\xe0\x6f\x3f\xd0\x9b\xe7\xe9\xae\x4a\x96\x2b\xcc\xaf\xa8\x28\xd2\x1b\xf8\xad\x46\xea\x1b\x5a\x26\x33\x48\xbd\x16\x4c\xd2\x64\x38\xc7\x39\x2d\xd2\x1b\x56\x5e\x3e\x2c\xf6\xda\xe1\x4d\x25\x42\xf1\x34\x57\x3f\xab\xfd\x6e\x27\x68\x55\x3d\xc9\x99\xac\x54\xc2\x2e\xad\x24\x7d\x56\x66\x7c\xcb\xca\x4b\x95\x90\xed\xa5\xff\x58\xd1\x82\x66\x00\x81\x42\x3f\x42\x61\xb9\x48\x2f\x2f\xbd\xe7\x0d\xbb\xdc\x14\xec\x72\x23\x13\x35\xb4\x05\xc7\x1f\xe8\xcd\x1b\xfa\x0f\xf0\x51\xc1\xd5\x8e\x66\x2c\x2d\x1e\x6d\x52\x51\x69\xaf\x95\x41\x03\xd2\xea\xb8\x90\x42\x31\x21\x6a\x85\x9e\xcd\xe7\xc7\x7c\x5a\xf6\x6e\xb0\xf5\x90\x09\x83\x88\x86\x0e\xf8\xfe\xac\x1f\x9a\xc0\x7c\x30\xf8\x86\xc5\x72\x5a\x65\x82\x17\x05\x15\x78\xb4\xe5\x6a\x30\xf8\x75\x39\xc2\xdf\x2b\x16\x71\xaf\x16\x57\x2b\x4f\x7e\x51\x64\x05\xcb\x3e\x8c\xb0\x69\xd6\x02\xb2\xfa\x57\xb4\x80\x43\xcf\xb5\x69\x8b\xb9\x32\xab\x84\x8b\x1e\x29\xa2\x68\x98\xe9\xc7\x28\x1a\xa6\x22\x76\xcd\x81\xfc\x0f\x99\xdd\x1d\x25\xa1\xd3\x35\x2b\xf3\x5f\xb8\xc8\x1f\xc8\x58\xa0\xc1\xb7\x54\x65\xe6\x19\x2e\xa7\x69\x99\x6d\xb8\xc0\xe5\x74\x43\xd3\x1c\x1d\x0e\x07\xcf\x50\x46\xa2\x5b\x53\x7d\x5d\x43\x71\x07\x34\xb8\xae\xeb\x56\x47\x0c\x8a\xd1\x96\x96\xfb\x51\xd0\xfc\xd7\xc2\xb8\x7f\x0c\x0c\x0a\x06\xb9\xa5\x65\x9e\xcc\x3c\x8e\x97\x81\xb5\x8a\xf1\x3e\xe6\xfb\x6c\x03\xbb\xf5\x88\x2e\xdb\xcf\xa7\x15\x45\x58\x89\x9c\x38\x2e\x49\xf0\x0e\x4d\x69\x99\x93\x31\x84\x12\x54\xf2\x59\x10\x63\xcf\xd0\x21\x4d\xc4\xe4\xb4\xa0\x6b\x19\xc6\xcb\x17\x26\x75\x42\xe1\x0f\x56\x85\x4b\xbe\x9b\x50\xf5\xbf\xbb\xe5\xfc\x52\x8c\xcb\x2f\xcb\xf3\xbf\xce\x66\x87\xd6\x70\x48\xd5\x84\x4a\xa6\x42\x7a\xa3\xc1\xbc\xc9\x64\x61\xa4\x7c\x78\x33\x1f\x12\x55\xfe\x3e\xdb\xd0\xaa\xd7\x07\x59\x36\xef\x9b\x00\xa1\x4a\xb6\x4a\x73\xb6\xaf\x7e\x3d\x23\x73\x88\x2c\x0c\x4f\xbf\x9d\x91\xf9\x21\x66\x08\xdd\x66\x05\x4d\x85\x1d\x4a\x61\x63\x66\xb8\x91\x19\x84\x43\x7a\x0b\xad\x4e\x38\x06\xdc\x34\xd8\xb9\x82\x5e\x25\x7c\x52\xaa\x01\x3d\x23\x5f\xcd\x66\x8b\x32\x31\x03\x4f\x08\x6b\x35\x18\x02\x19\x7b\xe5\xc1\xf0\x35\xb9\x96\xb3\xd5\x74\x97\x5e\xd2\x5f\x71\x98\x4b\xf2\x5d\x37\xd3\x6f\xc0\x48\xf6\x8d\xac\x6a\xdb\x08\x1f\x5b\x16\x9d\x36\x40\x57\xd4\x39\x76\xa4\x38\x5a\xe6\xa3\xc0\x7c\xc8\xaa\x4e\xbd\x42\x06\x3a\x56\x91\xda\x62\x12\x0b\x64\xb5\xa1\x25\x74\x30\x8a\x86\xa5\xae\x25\x8a\xec\xb8\x4e\xca\x29\x0c\xe5\xd9\x57\xb3\x99\x0b\xd6\x06\x3e\x5d\x5c\xe4\x95\xa2\x54\x61\x2b\xf1\x48\xf5\x79\x84\x06\x9c\x0c\xcb\xa9\x1a\xf4\xba\xae\xe2\x12\xeb\xdf\xfa\x2a\xf9\x31\x8d\x53\x9c\xa2\xc4\x64\xe8\xe4\x32\x59\x83\x9d\x9e\xa2\xc4\x7c\x9a\xd3\x38\x85\xe3\x05\xcf\x10\xfe\xc1\xee\x7e\x97\x3a\x9e\xe3\x19\x42\x08\x80\x37\xe5\x1b\x4d\x8e\x79\x19\x73\x4b\x1d\xb8\xa6\x0e\x98\x36\xc7\x08\x8b\x05\x3a\xb0\xf8\xd8\xb8\x66\xea\x74\x2f\x46\x98\x75\x5e\xeb\x5f\xad\x29\xb4\xaf\xa7\x59\xc1\x68\x29\xbf\xa5\x8a\xda\x47\x51\xbc\x03\x12\xd2\xbc\xd6\x3f\xde\xf2\x1d\xc2\xdb\xde\x57\x3f\xa8\x2d\xab\xa4\xcb\x1f\x59\x4c\x9b\xca\x28\xea\x69\x28\x50\xe9\xeb\x0d\xa5\x45\x48\xb7\x2e\x2c\xdd\x6a\x7f\xf0\xf8\xe5\xf3\xe7\xea\x9b\x37\xed\x2e\x74\x3f\x32\xc7\xf5\x91\xee\xda\xc3\xdc\x75\x87\xb4\xd3\x54\x3f\x88\x0e\x0c\xab\x4e\x43\xab\x25\xa9\x14\x09\x95\xbe\xc7\xac\x4f\xa3\x7f\x61\xda\x73\xf7\xea\x58\x86\xb8\xcf\x0a\xc3\x3b\x52\x86\x16\xb6\xde\x9c\x1b\x2d\x15\xd5\x63\xf3\xf8\x54\xa4\x3a\x60\x1e\x1a\x08\x69\x18\x1d\xec\x4e\x1f\x68\xf0\xa3\xbd\xa8\xb8\x50\x82\x59\x4f\x32\x79\xcd\xe3\x51\xce\xae\x46\x9a\x0f\x1b\x79\x6c\x4c\x06\x19\x2a\x9f\xb3\x51\xdf\x99\xe4\x91\x5f\x0d\x30\x6f\xbb\x34\xa3\x53\x56\x56\x54\xc8\x87\x74\xcd\x05\xed\xad\xd0\xfb\x4a\x97\xf4\x98\x5d\x21\x34\x78\xce\xfb\x73\x97\xc6\x61\x11\xc3\x80\xa2\x03\xd6\x84\xd1\x1f\xd2\xd6\x48\xb2\x75\xac\xa4\xa1\x21\x35\x18\x47\x3e\x07\x53\xd7\x8e\xe0\x4e\xd6\xe2\x6c\x3e\x9b\x39\x8e\x17\x54\x59\x50\x09\x44\x7a\xb1\xd3\xd4\x3e\xcb\xcd\x9c\x28\xf9\x1c\xf4\x7b\x80\xd3\xb1\xa6\x80\x3b\xfb\x38\x95\x69\x3c\x52\xf5\x8c\x30\xd5\xd1\xc1\xed\xf6\x45\xb0\x7a\xfc\xfc\x74\xbd\xa6\x99\x7c\x50\x14\xfc\x9a\xe6\x64\x94\xf1\xdd\xcd\x73\xa0\xa7\x3d\xe5\x8a\xf4\xf2\xd9\x36\xbd\xa4\xea\xb0\xb2\x4b\x45\xcd\x1b\xdb\x5e\x9a\x79\xd3\x93\xb7\xe3\x1a\x32\x24\x39\x59\xb3\x8f\x34\x3f\x3d\x51\x54\x31\x39\x99\x9d\x9e\x48\xbe\x53\x7f\x47\x68\x20\xa6\x95\xc8\xc8\x48\xd5\x91\x30\x55\xe8\xbd\x4b\xb6\x3e\xbd\x48\x2b\xfa\xb7\xbf\xe2\xd7\xb3\xe2\x9b\x97\x8f\x8b\xcd\x83\x1f\x1f\x3c\x7c\xa0\xfe\x3d\xfa\xf6\xeb\x87\x0f\x9e\x7c\xff\xe0\xc1\x93\x07\x3f\x40\x82\x4a\x7f\xf2\xe0\xc1\x83\x67\x8f\xde\x3e\x78\xf2\xe0\xe5\x35\x21\x23\x9c\x81\x67\xf0\x35\xcb\xe5\x86\x88\xe9\x06\x08\x06\x99\x7b\x13\x6d\xf7\x93\xfa\xbf\xcc\x21\x60\x5f\x2c\x10\x16\xd3\xf7\xea\xc4\x11\x53\xbe\x5e\x2b\x3e\x43\x91\x92\x3b\x7a\x1f\x0b\x3c\x53\x34\x33\x8b\x22\x00\xb1\xa4\x25\x28\x69\x0d\xb8\xa8\x2d\xf5\x70\x40\x7a\xf7\xe3\x5c\xf0\x5d\x02\x8c\xdc\x46\x20\x5c\xd0\xf4\x8a\xf6\x6f\xc5\x5c\xc4\x14\x1d\x1c\xaf\x6a\x58\xce\x4b\x2a\x9f\x32\x5a\xe4\x31\x52\x2c\xe5\x1e\x8f\x3e\xd0\x9b\xfd\x2e\xa4\x34\x2f\x4d\xbc\xb3\x86\xdc\xe8\x7c\x1e\xbf\xf9\xc0\xf0\x9b\xfa\x05\x70\xe3\xe6\xcd\x87\xe6\x0d\x90\xf2\x11\x7e\xc2\xe3\x47\x02\xa2\xde\xeb\xe4\x8b\x62\x2f\x20\xf5\x2d\xa4\x1e\x8c\xbc\x10\x5e\x12\x3e\xe4\x76\x51\x7e\xc3\x62\xad\xcd\xc0\x23\x41\x2b\xf6\x67\x78\x38\x6b\x36\x4b\x63\x24\xf5\x73\x75\x54\x3b\xbd\xfc\xc9\x63\x2e\xd0\x01\xc3\xee\xd0\xbd\xb2\xc5\xea\x06\x79\x9f\xfc\xa9\xda\xa6\x32\x3d\x84\x7b\x3e\xd0\x8d\x1c\x62\x84\xbf\x95\xbe\x6c\x93\xed\xc5\xcb\xdd\x74\xcd\x45\x46\x35\x9a\x2b\x19\xce\xf0\x7b\xa6\xaf\x52\x45\x47\x52\xaa\xeb\xfd\x74\x93\x56\x4f\xf5\xf9\xb6\xf0\x1a\xab\x07\x48\x97\x7c\x7f\x86\x92\xb7\xc2\x54\xf3\x9d\x40\xdf\x89\x6e\x3c\xbe\x28\xfa\x4e\x2c\x8b\x95\xb1\x55\x58\x16\x2b\x4c\x4b\x34\xf8\xd9\x49\x79\x6b\x56\xb2\x6a\xf3\xac\xd4\x80\x65\xcd\x93\xc1\x55\xb0\x12\xcb\x86\xcc\x4e\x37\x67\xdc\x1a\x16\x9d\x8e\xc7\x1b\xc4\xcb\xe5\xc6\x08\x9d\x83\x9f\x6c\x6f\x2b\x55\x4c\x28\x3a\x8e\x94\xe8\xbc\x65\x7f\xd2\x82\x5e\x32\x50\x9d\xdd\x8c\x08\xb9\xa4\xd2\xa8\x4a\x72\x10\x5f\x63\x06\x9f\x29\x5a\x38\x55\x1c\xfc\x6b\x5a\xe6\x54\x68\xd9\xd3\xbd\x9a\x56\x2a\x6b\xf8\x9e\x8c\xd4\xd0\x8d\x3c\xc6\xfa\x01\xdc\x69\x86\xe1\x84\x60\x16\x60\x59\x43\x7c\x5f\x7d\xae\x5d\xa4\xe2\x29\x53\xa7\xe9\x1d\x67\x80\xcb\x39\x01\xa7\x0d\x31\x42\xdd\xcf\xd5\x26\x7d\x20\xa5\x60\x17\x7b\x49\xe3\x51\xb6\x9d\x94\x5c\x4e\x40\x14\x29\xe5\x08\x8f\xa4\xd8\x53\xf8\xee\x72\x2f\x25\xfd\x74\x9d\x3a\x9b\x5f\xa1\xff\xe1\x67\xd7\x66\x06\xed\xae\x03\x8e\xe7\x3a\x6b\x65\xe9\x74\x37\x7f\x9b\xb0\x0a\x5a\xa4\x8a\x59\x3c\x3d\xf9\x73\x02\x08\x1b\xc9\xc9\x1c\xca\x70\x87\xd9\xa7\x4f\x54\xc8\xbf\xa5\x69\xb5\x17\xf4\x8e\xdc\x26\x87\xeb\xcc\xf3\x7f\xfa\x0b\x38\x92\x9b\xfc\x4b\x57\x6b\x58\x62\x6b\x04\xfc\xce\x34\xe3\xb8\xba\x63\x28\xf8\x5e\xaa\x5c\xc9\x49\xc9\x4b\x5d\xbb\xa2\xc8\xde\x1c\x2f\xfd\x36\xb8\x96\xad\x82\xc6\xab\xe4\x6a\x84\x8e\xd7\xa3\xa7\x0a\xc2\x8f\x05\x5d\x52\x55\x85\x45\x41\xa6\x26\xfb\x2f\x70\x32\x99\xb8\xe4\xfa\x78\x7a\xaa\x68\x51\x7b\x11\xb6\x2b\x4e\x2f\x2a\x5e\x40\x30\x02\xfd\x51\x72\x32\x1a\x33\x3e\x1e\xed\x3e\x9e\x9e\xc0\x69\x97\x9c\xcc\x77\x1f\x4f\xbd\x25\x5a\x7d\x72\x59\x57\x6e\x72\xbe\x81\x67\xdb\x2c\xcb\xd9\x06\x5d\x83\xd6\xb7\xda\xdc\xd4\xb5\xea\xd9\xa9\xde\xfe\xec\x6c\x15\x99\x5e\x40\xd8\xf6\x11\x1e\x4d\xf4\x9a\x35\xe7\x72\x58\x67\xb8\xb9\x5b\xbb\xcf\x2b\x3d\xa8\x7e\x84\xb4\xea\xe4\xef\x40\xaf\x4c\x03\x0d\xbd\xfa\x53\x07\x98\x9f\xcc\x83\xa6\xc1\xab\x5d\x9a\xe7\xac\xbc\x7c\x0d\x1c\xc3\x0c\xe1\xaa\xae\x45\x14\x6d\xeb\x3a\xf6\xb2\x02\x03\x07\xde\xa2\x4a\x98\x80\x03\xcc\xe7\x24\x16\xc1\x53\xec\x7a\x85\x12\xea\x3d\xa8\xee\x5e\x31\x7a\xfd\x54\xf0\x2d\xd1\x3f\xdf\x72\xa2\x68\xbe\xa8\x24\x66\x53\x41\x77\x80\xbf\xfd\x73\x93\xc7\x4f\x0a\xf2\xaa\x8f\xc9\x72\x05\x5f\x29\x32\xac\xb3\xd8\x99\xa4\x1f\x35\xaa\xbd\xd9\x5c\xb9\x4d\x57\x5f\xbd\x04\x46\x87\xcc\xd4\x12\x48\x2b\xa9\x4e\x09\x2d\x5f\x91\x26\x41\xaf\xd6\xd9\x80\x19\xf8\xdf\x1f\x58\x49\xb5\x72\xb8\xb2\x45\x95\xb0\x1f\x1e\xa6\x66\x65\xb3\xe9\x45\x2a\x5c\x39\x17\x36\x79\xe6\x93\xea\xea\x51\xc1\x76\x3b\x25\x7f\xcf\xcd\xfa\x7b\xb1\xdf\xda\xcf\xcd\xe3\xb3\xb2\xa4\xa2\x95\x06\xba\x3c\x5b\x6f\x5a\xb0\xcb\xf2\x17\x96\x5f\x52\x59\xe9\x82\xb2\x34\xdb\xd0\x5c\x65\xb2\xdf\xe9\x14\xc5\x04\xbb\x16\xe9\xa4\x57\x7a\xae\xbf\xb5\x85\x6d\xd3\x8f\xaa\x6b\xad\xc7\x1f\x0c\x6c\x41\x93\xa2\x01\x50\x4d\xc3\x41\x44\x7c\xfc\x2b\xb1\xbf\x7e\xb3\xbf\x00\xe1\xf1\xd7\xe0\xe9\x37\xb7\xb7\x36\x6c\x2d\xf5\xf7\x15\x2d\x9e\x72\x61\xae\xa5\x9f\xd3\x72\xef\xba\xd6\xd2\x67\x41\x88\x69\x26\x63\xe6\x9d\xac\x2f\x35\x0c\x47\xce\x33\xd0\x5c\x93\x37\x8a\x47\x7c\xce\x73\x25\xe8\x18\x05\x39\x6e\x5e\xbf\x84\x14\x84\x3f\x04\xa8\x1c\x1f\x9a\x32\x58\xdb\x3c\xcb\x48\x2c\x0f\xd6\x80\x4e\x1f\xfb\x8f\x1a\x3b\x1b\x53\xbd\x6f\x2a\xf3\x56\xfd\x34\xa8\xda\xc8\xd4\xbc\x16\xbc\x94\x8c\x0a\x62\x1e\x61\xc9\x72\xc5\x6e\x2a\x76\x0e\x5b\xa1\xc8\xe8\x93\xc7\x63\x4c\x35\x77\x16\x45\xbf\xcb\xa0\xa1\x8f\x1a\xdd\xea\x1f\xb2\x91\x81\x10\x20\x60\x98\xde\x06\xac\x0e\x2e\x89\x88\x22\x1d\xbf\x3c\xfd\x18\x7f\xed\xf1\xff\x2d\x95\x02\x2c\x95\x7b\xcf\xfc\x52\x27\x5f\x39\x9b\x82\x96\xa2\xee\xdb\xd2\x68\x48\x98\x13\xd5\x66\x46\x79\x36\xd3\xd8\xfc\xd7\x7a\x41\xa2\xd0\x89\xc7\xa5\xfb\xce\x3c\x2e\x71\x99\xae\x0c\x55\x8d\xa2\x98\x8f\x49\xcf\x8b\xc6\x8d\x62\xc1\xc7\x31\xf4\x2b\xa3\xac\x88\xd9\xd4\x8b\x46\x71\xaf\x44\x75\x3d\x47\x5f\xca\x84\x8f\x65\xe8\x68\xe6\x69\xa6\x79\x86\x05\x51\x03\x3a\x90\xdd\x59\xd7\xb9\x04\xbc\x1d\x12\xea\x9a\xf5\x86\x59\xc4\x1e\xdf\xaf\x07\x16\xcf\xb1\x7b\x08\x72\xc7\x3b\x8b\x17\x1a\xdf\x7b\x57\x7d\x99\x6d\x27\xd5\xe4\xdd\x9b\xf1\xbd\x4b\x3c\x1a\xa1\x71\x33\xa1\x72\x43\xfd\xac\xf1\x7f\xd4\xef\x2a\xf4\xae\xfa\x52\x65\x3c\x81\xaf\x46\x08\xbf\x09\x57\xca\x2b\xd5\xaa\xe7\x31\x45\x18\x96\x10\xee\x17\x2e\xfe\x01\xc1\x30\xef\xfb\x08\x50\xcf\x7b\xd4\xf7\xf6\xec\x08\x96\x99\x49\x1b\xbc\xe2\xb1\x44\x81\x67\x4d\x79\x26\x1a\xa6\xbc\x6c\x30\xd0\xca\x15\x84\x00\xf7\x0f\x86\x4f\x9d\xcc\xea\x70\x47\x68\xd0\x66\x49\x4a\x4d\x7a\x47\xda\x8d\x2e\x54\x79\x98\x23\x9c\x63\x6e\xce\x33\x2d\x03\xb7\x72\x59\x42\xab\x16\x8a\x62\x1e\x46\xe8\x20\x4d\x7e\x77\x4d\xb5\x18\x8d\x92\x11\x70\x4f\xf8\x71\x30\xb8\x8f\xef\x18\x23\x23\x37\x43\xe1\x03\x6f\xb7\x01\x00\xa7\xae\x60\x9b\x8a\x4b\x56\x82\x06\x4b\x42\xdd\x81\xa7\x8a\x35\x32\xb5\x8b\xae\xd9\x60\xce\x85\x0f\xe6\xc1\x5b\xf0\xb8\x24\xf4\x54\x92\x3f\xca\xb8\x44\xa7\xe8\xb6\x24\x31\x83\x93\xb1\xcc\x63\x00\xcc\x44\x80\x2b\xae\xf5\x9b\x42\xed\x2b\x78\xcc\x36\x13\x36\x95\x7c\x9a\x6d\x4c\xb0\x04\x55\xc6\x33\x53\x86\x91\x53\xbc\x42\x06\x62\x42\x4a\xbf\xd6\x89\x2b\x47\x15\x1a\x97\xa0\xa5\x86\x4a\x50\x2b\x9b\xae\xc4\x39\x40\xb9\xde\xfe\xd1\x33\x8e\xd8\x50\xc9\x81\x74\x87\xd1\x35\x8b\x85\x0e\xa2\x52\x49\x25\x20\x86\xa7\xd2\x8b\xd8\xa5\x78\x2f\xdd\x01\x05\x26\xc0\x7d\xdb\x5b\x10\x35\xd8\x03\x71\xde\x2a\x10\x54\xe4\x61\x15\xa2\x29\x97\xd0\x60\xf3\x3f\x6b\x7a\x70\xc9\x63\xea\x36\xca\xb1\x05\x8b\x4e\x27\x73\xf0\x40\xa7\x76\x15\xaa\xe4\x85\xfb\x90\xb8\x5f\xd3\x8c\x97\x59\x2a\xe3\xe5\xb1\xa2\x56\x28\x91\xe7\x93\x39\x44\x4b\xf0\xca\x82\xfd\xd0\x2d\xcd\x60\xaf\xaa\xc3\xc6\x25\x69\xd8\x41\x89\xe7\x3e\x32\xcf\x0f\xfd\x73\x22\xfb\xd6\x37\x2e\x09\x90\x60\xc1\xf7\x65\xae\x4f\x04\xb3\x68\xc7\x85\x7f\x90\x58\xaa\x7d\xeb\x6b\xaf\x93\x23\x5a\x6d\xac\x78\x32\x97\xa5\x21\x99\x5e\x0e\xfd\x1d\x34\x21\xe9\x68\xb8\x75\xcb\xbc\x43\xad\x5b\x91\xce\xa2\xea\xb1\x19\xc2\x6a\xf4\xfb\x8b\x54\xa8\x3d\x9a\x34\x24\x0f\x14\x78\x9a\xbe\x2c\x44\x32\xc3\x39\xcf\x4c\x43\x4b\xd3\x26\xfb\x38\x5e\x2b\xaa\x3b\x96\x0d\x13\x88\x43\xfe\x30\x91\x2d\x86\x11\xeb\xf1\xd5\x2f\xc5\xa1\x15\x86\xdb\x41\x26\x64\x5b\x77\xf7\x0e\xcf\x57\x54\xc8\x3e\x91\xce\x93\x9d\xb6\xac\x9c\x34\x92\x91\x12\xe6\xfc\x25\x75\xe5\xb8\xd1\x91\xbb\xa8\xdf\x70\xc1\xfe\xfc\x44\xa9\x56\xfa\x9a\xcf\x66\x7f\x39\x3d\x51\x75\xb8\x94\x6e\x25\x1b\xaf\x92\x01\x8d\x4b\x84\x69\xac\x6f\x3e\xca\xde\x1b\x80\xb2\x75\xcf\x21\xe3\xb2\xb9\x0b\xc0\x60\xf0\xc8\xb2\xb4\x18\x19\x4d\x18\xeb\x2d\x84\xf9\xb3\xa9\xca\x60\xfe\x1d\xc8\x08\x3a\xc9\x4b\x69\x8a\xd1\xa3\xbb\xa1\xd9\x07\x9a\xff\x4e\x05\xd7\xac\xf3\x70\xde\x88\x50\xcd\xd0\x58\x3a\xce\x4a\xc3\x4e\xbb\xa9\x68\xde\xe8\xef\x47\xf3\xbf\xc3\xd9\xe2\x79\x24\xa1\xdb\x96\xa7\x51\x9b\x25\x53\x82\x41\x70\xaa\x35\xc9\x53\xb8\xb0\x8c\x51\x87\x8d\x83\x97\x69\x9e\x3f\x52\x9c\x45\x14\x3d\xf3\x15\xf7\xf6\xaa\xe5\xce\x6f\x50\x7f\x99\xc6\xc0\xc3\x25\x28\xc6\xba\x58\x36\x3b\xc2\xbd\x30\xf6\x1e\x81\x2a\xb7\xc3\xf7\x04\xf7\x10\xb2\xaf\x42\x2d\xd0\xea\x3b\xa2\xc0\x4c\xc0\xd7\x88\x1a\x76\xd9\x98\x54\x1c\xb3\x56\xa0\x2d\x6b\x05\x73\x33\x77\xc0\x70\xd7\x29\x3f\x4f\x65\xe5\xc3\x69\x00\x8c\xb0\xb7\x6a\x08\x11\x0b\x7d\xc9\x86\x92\x9d\xb9\xdd\xd2\x91\x0d\xef\x9c\x9b\x1f\xfe\xf9\xb9\x69\x16\xcc\xb7\xc6\x4b\x13\x10\x89\x15\xa9\xb6\xf6\x3d\x4d\x01\x56\xd4\x04\x7f\x7b\x2f\x51\x2f\xd5\xc1\x4f\xfa\x32\xcb\x8b\xb1\x7f\xca\xce\xfe\x1a\x45\x62\xd8\x53\x46\x5d\x97\xc3\xbe\x52\x4e\xd9\x78\x8c\x7a\xbf\x50\x27\x5b\x9f\x20\x12\x45\xbf\x2b\x36\x54\xd5\x0e\xcd\xc6\x9f\xdf\xe4\x43\xe8\x5d\xd5\x44\x52\xb2\xa7\x53\x49\x84\x3f\x6c\x5a\x42\x57\x4c\xa9\x08\xd8\xae\x40\xaf\x11\x8b\x46\x26\x2f\xa7\x02\x18\x2d\xe0\xc5\x70\xef\x47\x0f\xb9\x94\x7c\x6b\xbe\x32\x9b\xbe\x9c\x5e\x40\xaa\xfb\xce\xd7\x08\x99\xcf\x2f\xb8\xc8\xa9\x30\x5f\xdb\x0f\x54\xfe\x93\x8a\x17\x2c\xd7\x01\x0f\xf4\xb5\xc9\x08\x9b\x76\x44\x91\xcd\xb8\x88\x45\x57\xaf\x1b\xf0\xa8\xa3\x8b\x82\x67\x1f\xa0\xd1\xbd\xf9\x36\x61\x53\x5d\x0f\x7b\x33\x5f\xfb\xa3\xa1\x99\xe2\xe4\x93\x0d\x50\xcd\xd6\x85\xfb\x53\x9f\xf1\x2b\x2a\xf4\x49\xf9\x82\x7e\x94\x6f\xf9\x1b\x5b\x8a\x9f\xcb\x3f\x4f\x63\xd1\xd2\x28\x1f\xe9\x67\x4f\xa6\x23\x9d\xec\xc9\xa9\x7b\x68\x79\x19\x98\x7d\xd7\xcf\xbb\x6a\x1f\xb5\xdc\xdb\x1a\xef\x6f\x61\xad\x1d\xc4\x54\xf2\xdd\xc2\x49\xda\x33\x88\xd7\xb3\x43\x09\xed\xb9\x9c\x1f\x18\xbe\x69\x5d\x70\xc5\x78\x4f\xf6\xd2\xed\x64\xe6\x97\x68\x56\x81\xfd\x91\x94\x63\xda\xcf\x10\x71\xf2\x92\x41\x28\x58\x9c\xea\x5f\xcc\x5a\x40\x89\x29\x2d\xab\xbd\x70\xb8\x65\xf6\xd9\x93\x08\xf6\x4d\xa2\xe1\xdf\x07\xd5\x19\x5f\xc4\x9c\x54\xb6\xb8\x0f\x2c\xbe\x56\x7f\x2b\x84\x8e\x34\x01\xa1\x44\xf7\x9d\x95\xf1\x1e\x4b\x50\x9c\x29\x7e\x39\x46\xe8\x9c\xa4\x10\xe8\x37\x28\x69\x8f\xd0\xe4\x48\x49\x38\x25\x7b\x0b\x81\x71\xab\x9a\x99\x70\x2c\x79\xe2\x86\x36\xc5\x7c\x3c\x47\x87\xc0\x97\xb0\x9f\x65\x55\x1c\x9e\xbe\x15\xf6\x95\x64\x75\xdd\x30\xb3\x20\x53\x80\x28\x7a\x64\x5d\xfa\xf1\xd9\x7e\x8b\x25\x9a\xf4\x5a\x54\x8c\x35\xef\xeb\xb1\x17\xec\x08\xc7\xcc\x49\xa9\xd7\xa7\x56\x88\x88\x40\x11\xb2\x8e\x87\x02\x74\x1d\x2c\xcf\x69\xa9\x8e\xb0\x9e\x16\x45\x11\xe4\xb9\x34\x0f\xb1\xf7\x64\x96\x2d\xd8\x15\x39\xe0\x6d\x78\x0f\xfd\x4f\x2f\x0a\x80\xd7\x6c\xb4\x32\x7b\x32\x3b\xdd\x37\xe8\xd4\xfb\xf1\x18\x55\xcb\xfd\x2a\x28\xe7\x70\xa4\x15\xb1\x6c\xa9\x94\x21\x7b\x39\x66\x46\x9c\x6e\xe6\xe7\x67\xeb\x47\x17\x1e\x0d\x46\x60\xe9\xda\x71\x69\xd5\xcc\x37\x9e\x02\xcf\xa8\x79\xc7\x12\x68\xb3\x86\xaa\x69\x8c\x0b\xd5\x4a\x77\x41\xd2\xcb\x40\x49\xea\xa0\xd2\xed\x25\x4b\xbf\xf6\xa1\xe1\x70\x05\xea\x5e\x80\x68\x89\xeb\xa4\x7b\x1b\x46\x0b\x39\x42\x10\x35\xc5\x5b\x48\xc1\x74\xa7\x84\xf9\xcf\x13\xde\x38\x9a\x36\xba\x8a\x80\x38\x01\x41\xed\xea\x7e\xdd\xea\xe7\x38\xf8\xd4\x2f\x3c\x45\xe3\x79\xf3\xb1\x3d\xdb\x3a\x65\x8d\x53\x5c\xb6\x34\xc9\xdd\x4c\x0b\x3b\xa2\xc9\x64\x8e\x8f\x36\x36\xac\x4c\x2f\xec\xc7\xea\x9c\x1f\xce\x0e\x2e\x72\xbc\x5b\x07\xdf\x04\x3e\x3e\xda\xe3\x2f\xf6\x85\xd7\xa7\x5c\x6c\x53\x55\x49\xac\x76\x14\x0c\x69\xa3\x68\xf7\x85\xd4\xdf\x82\xb0\x03\x6e\x43\x5e\x52\xf9\x50\x89\xa2\xac\xbc\x7c\x04\x14\xe5\x35\xcd\x64\x8c\xac\xb9\x62\x65\x02\xc6\x1c\xcf\xd4\xd4\xf0\x7d\x48\xe6\x9b\xc5\xa6\x59\x7d\x46\xaf\x77\x5c\x48\x22\xb1\x79\x86\x08\x77\xe4\x97\xb8\xd4\x2a\x5f\x6c\x43\x83\xd1\x9c\x49\x2e\x9e\x55\xdf\xc2\x96\x26\xc3\xd2\xd1\x3c\x7f\x99\x40\x56\xf3\xc2\x71\x17\xbd\x94\xde\xcf\x69\x67\xb8\x4f\x78\x95\x26\xb6\xd7\x63\xdd\x6c\x9d\x75\x23\x5d\x08\x2b\xb8\xf7\xb7\x60\x7b\x39\xdb\x56\x44\x52\xf7\x12\x20\xf6\x2b\xb2\x5c\x35\xe3\xf1\xc5\x31\xd6\x4b\x2b\x6b\x80\xc8\x86\x7d\xb5\x7a\x2b\x29\x60\x41\xcc\xc1\x7e\x4a\xea\x8a\xa3\x48\xda\x31\x83\x83\xe8\x9c\x08\x77\x11\xe4\xbf\x93\xfc\xcc\xbc\x79\xcb\x9d\x65\xbd\xe8\xde\xc1\xd4\x75\x4f\xe2\xb9\xfb\x14\xa9\x73\x30\xb8\x16\x32\xaf\xa2\x68\x46\x08\x13\x0d\xc6\xd0\x70\x3e\xf8\x19\x5c\x17\x62\xdd\x6c\xe9\x8d\x8d\x8b\x48\x65\x88\x51\x09\x0b\x0a\xf3\x66\x6f\x86\x9d\x9a\x34\xe4\xce\xae\x97\xe7\xa0\xf9\xc3\xa5\xd5\x65\xa5\xc4\x1d\x9a\x0c\xfb\xdd\x1e\x1f\xfb\x56\x31\xb5\x76\xa4\xce\x78\x14\xf1\x89\xf7\x7c\x7f\x06\x07\xad\x6b\x8f\xa9\x07\x37\x59\x14\xe3\x6d\x06\xe5\x3c\x55\xa3\xa2\x7f\x4f\x52\xfd\x6d\xd0\x1e\x37\x7a\x08\x7f\x84\x72\xff\xb4\x5a\x7f\xae\x5a\xfe\xd0\x3e\xa5\x66\x64\xf6\x84\x0f\xbd\x79\xac\xeb\x74\xe8\x66\x40\x4d\x50\x78\xb9\x36\x6c\x4c\xfa\x74\x82\x9f\x05\x96\xab\x97\x03\x9e\x4f\xe3\xd0\xcd\xbd\xbb\x37\x67\x84\x94\x50\xa1\x83\xa6\x90\xe7\x26\x05\x9a\x70\x66\x1e\x54\xf3\x16\xb1\xfe\x4d\xbe\x33\xd8\xa1\x08\x37\x2f\x89\x44\x49\xdc\x3c\x9e\xcb\x45\x98\xb9\x79\x85\xac\x9e\x4e\x27\xa1\xa4\x79\x75\x26\xd5\x92\xd5\xdf\x99\x66\x69\x2d\x9c\xd0\xc2\x22\x0a\x6b\xc4\xb6\xa1\x67\x62\x11\x7e\x65\x6a\x80\xba\x6d\x26\x2c\x90\xad\xeb\x2d\x3f\x17\x47\x6a\x9a\x61\xa8\x4b\x20\x84\xd0\xc0\xe6\x26\x02\xac\xb1\x38\x4e\xed\x62\x30\x37\xa0\x9a\x37\x33\xe7\xaf\xbf\x64\x1a\xa1\x0c\xee\xf5\xad\xc9\x0b\x98\x89\x35\xdf\x03\xf9\x37\x01\x61\x61\x4f\xc1\x8e\xdf\xc3\x1e\x2b\xa2\xa8\xd9\xfb\xc7\xf6\xe2\xbf\xbe\xbf\x43\x1e\x22\x23\x2f\x78\xec\x6e\x8a\x8a\xf3\xbf\x82\x29\x5c\x68\xaf\xe3\x58\x7b\x63\x1d\xf1\x89\xa5\x85\x19\xe9\x65\x5e\x14\x3f\x67\x4b\x86\x70\x5d\x0d\x1f\xe0\x87\x3b\xf1\xa0\xac\x4b\xfa\x51\xbe\x61\x17\x05\x2b\x2f\x5d\xa8\xe1\x28\xba\x52\xec\xa7\x67\x82\xa9\x04\xc2\x5f\x36\x94\x16\x26\x42\x0b\x91\x8b\xf6\xf5\x84\x6e\x79\x22\x8f\x59\xdd\x49\x08\xb6\x61\xdd\x3b\xcc\xba\xc0\x99\xb7\x05\xf0\x9a\xcc\x4e\xd7\x67\x2e\xf8\xd7\xda\x06\x27\xd9\x90\x62\xb9\x06\xbc\xc4\x8d\xe5\x45\x4f\x2d\x2e\xf2\x06\xdc\xc7\xa3\x48\xff\xf5\x2a\x27\x84\x6b\x66\xf9\x34\x1d\x12\xfd\xf6\x14\xa5\x64\x1f\xa7\xc8\x04\xe1\x62\x56\xb2\x91\x51\x24\xcf\x48\xa6\x0a\x69\xc6\x72\xb0\x31\x11\xca\xab\x28\x8a\x2f\x79\xec\x1e\xf1\x48\xb3\x5b\x23\x04\xea\xee\x38\x27\xc3\x39\xc2\x82\xc6\x14\x6f\x70\xa6\x16\x37\xce\xa3\x28\x7e\xa5\x3e\x69\x8a\x43\xd8\x7f\x0a\xd8\xbe\x63\x8e\xe5\x3e\xc7\x99\xa9\x2d\x83\x53\xd3\x11\x7f\xd6\x0e\x0e\xdc\x7d\x47\x8a\xa6\x11\x03\x1e\xaa\xb7\x76\x38\x45\x87\x6c\x4c\x36\x70\x4a\x1c\xf4\xc0\xd8\x01\x39\xa8\x4d\xd9\x5d\xd1\xe6\xb8\x41\xf8\x13\x6b\x76\x84\x70\x6b\x0f\x09\x33\xbb\x51\xa4\x96\xfe\x50\x8d\x6d\x66\x38\x0c\xab\x43\xcd\x9c\x6d\xfa\x2b\x1e\x0b\xcf\xce\x57\x3f\xfb\xc6\x46\xc8\x49\xcf\x55\x28\x62\x87\xba\x91\x46\xff\x39\xc3\x7b\xdd\xde\xd0\x7e\xa2\x45\xe1\x71\x8b\xc0\xb7\xe8\xbb\xbe\x11\xff\xeb\x6c\x06\x87\xd4\x11\x3b\x8b\xe1\xec\xd0\xc6\xc5\x68\x40\x26\xa5\x3b\x2c\x71\x49\x86\xb3\xd3\xb8\x3c\xae\x8e\x92\x6d\xee\x68\xa8\xd9\xa3\xba\x8e\x43\x99\x1e\x3c\x6e\x6e\x25\xdf\x35\x02\xee\xf1\x9b\x8e\x49\x0e\x2c\x96\x96\xfd\x41\xcd\xd8\xb0\x86\x0d\x31\x31\x24\x16\xe1\x61\xdc\xe6\x83\x1a\x2a\x70\x8c\x1f\x0a\x73\x28\xe2\x87\xa2\x48\xb3\x67\xa7\xa5\xda\x1a\xb7\xbf\xc7\xd4\xf2\x2a\x3f\xa8\x9f\x14\xda\xf4\x2d\xb8\xd6\xe0\xef\x34\xc2\xa4\x92\xa4\x2e\xcb\xb4\x88\x29\x1e\xe9\xa1\x1e\x85\xba\x4b\x77\x30\x79\x15\xb6\xed\x71\x7c\xa2\x65\xce\x96\x23\xb9\xd5\xf1\x1b\xfb\x75\xda\x89\xb2\x21\xaa\x69\x4f\xd5\xb8\xd3\x55\x7c\xbc\x2d\x3d\x23\x77\x24\xf7\x5b\xde\x1d\xc3\x66\x51\xfd\xda\x06\x60\xfc\xde\x59\xff\x7f\xa1\x8f\x52\x18\x5f\xfc\x23\x3c\x98\xab\x98\xd6\x30\x97\x7a\x98\x4b\xa4\x83\x83\xb3\x6a\x13\xfb\xf2\xf0\x77\x36\x0e\x4b\xef\xe5\x70\x73\xa9\x30\x75\xf7\x4b\x5a\xb2\x6a\x3e\xe8\xd1\x34\x4a\x70\x92\x38\xfa\x45\xef\x76\xf6\xf3\xf7\x28\x5e\xcd\x25\x56\x78\x43\xfd\x7b\x1b\x4c\xd6\x57\xb8\x58\x7a\xe5\x6c\xc7\xb1\xb6\x07\x90\x3e\x57\x06\x00\x9b\x26\x30\x40\x65\xf6\xec\xb2\xd4\xf0\xbc\x95\xd3\x7d\x68\x8f\x81\xf4\xec\xef\x36\xe4\xb8\xc1\x2d\x71\x45\x8f\x83\x04\xa3\xdd\x66\x64\x3f\x11\x58\x98\x30\x28\xb7\xfa\xe8\x33\x19\x8f\x08\x7e\x03\x46\x0a\xa3\x60\x9b\x14\x6a\x18\x0f\x9a\x87\xd0\x04\xc3\x0c\xd5\x84\x81\x59\xcb\xd9\x7d\x88\x3a\xfd\x87\x8c\x25\x42\x38\xce\xce\xa7\xb3\xd9\xbc\xae\xb3\xb3\x89\xfa\xa1\xc4\x86\x37\x2c\xd6\x1f\xaa\xbd\x46\xa9\x79\x80\x20\xfc\xb4\x92\xc8\x69\x5e\xf4\xd1\xab\x53\xfd\xf3\x17\x3e\x51\x89\xcb\xf5\x2a\x40\x49\xa6\xd4\x68\x51\x68\xc7\xb6\x46\x92\xd9\xa9\x3c\xa3\x6d\xdb\x9a\xf1\x58\x22\x97\xb8\x94\xd6\x84\x86\x04\x69\xad\x43\x3c\x18\xcd\xa6\x72\x90\x7f\x8e\xcc\x3a\x20\xfb\xde\x1e\x02\x8d\x97\x96\x44\x41\x11\xc6\x49\x9f\xb6\x0d\xd4\x5f\xfc\x94\x13\xee\x1f\xad\x78\x3c\x4e\x91\x58\x76\x6c\x4c\x00\xeb\x97\x9b\xb6\x81\xbe\x8d\x7b\x55\x8c\x19\x2e\x8f\x7e\xe3\xc9\xc4\xf6\x12\x1a\xb4\x58\xaf\x78\x95\xfc\x06\x2e\xe3\x90\xfd\x2d\x97\xa9\xbb\x50\xee\xd3\xdb\xe9\x34\xb8\x0f\x16\xc1\x55\x6d\x89\xfd\x33\xac\xff\x2a\xd9\x9b\x46\xe1\xc5\x6e\x09\xef\x60\xa4\xe5\x77\xec\xfc\x31\xbb\x4d\xd4\x10\x9a\x77\x4b\xb6\x1a\x8c\x24\xfd\x28\x47\x84\xf0\x05\xa7\x26\x6e\x98\x61\x90\x54\x5a\xd5\x54\x90\x8c\xc0\xd0\x08\x92\x53\x1a\xab\x8c\x7a\xe6\x47\x10\x78\x70\x4f\x8d\x51\xfa\xc1\x15\xaf\xbd\x46\x5d\x63\x4b\x1a\xe8\x59\x4a\xe0\xf2\xb4\xe5\x09\x5c\x50\x42\xc2\xe7\x99\x66\x83\x67\x12\x58\x85\x34\x8b\x4d\x1d\x1f\xad\x24\x6b\xe5\xa4\x19\x35\x5d\x83\xf9\x50\x15\x00\xab\xd5\x67\xe5\xec\x2b\x77\x49\x6b\xf2\x04\x46\xae\xf7\x91\xfd\xb6\xe9\x1a\xa3\xbd\x0a\x8d\x8e\xa1\xa8\xb3\x37\x83\xd8\xf8\xac\xa4\xc4\x90\xb9\x45\x7c\xfc\x23\x13\xa7\xc4\x99\x93\x0b\x67\xe2\x2d\xa6\x17\x7b\x56\x48\x94\x70\xd6\x02\xc4\xe3\x34\x0c\x79\x03\x03\xe3\x0c\xc5\x70\x49\x4c\x8b\x07\xfa\x95\x6a\x86\x66\xc4\x63\xfd\x83\x80\x9b\xa3\xe2\x38\xee\x1c\x52\xc8\x65\x32\xd9\xcc\xfa\x53\x5c\x4e\x2f\x2e\xe1\xbe\x51\x09\xde\xe6\x67\x5d\x6b\x93\x1f\x97\xee\x1e\x16\xb1\xcb\x44\xdc\x97\xd8\xcb\x40\xbc\x2f\x31\x2c\x3f\x94\x68\xb5\x71\xd8\x35\x22\xbc\x51\x48\x61\xc5\xf5\x98\xe2\x51\x5b\xc5\xc2\xfd\x1a\x8f\x4e\x46\x63\xa3\x3f\x6c\xda\x3b\x1a\xa1\x24\x4c\x03\xe5\x94\xaa\xb8\x85\x08\xa0\xf2\x5c\xa4\xd9\x87\x4b\x30\x5f\x81\x05\xda\x3c\x22\xb9\xf0\x1f\xbd\xe6\xca\x24\x0e\xde\x1c\x11\xbf\x82\xc2\x82\xa2\xb5\x71\x68\x13\x68\xa6\x61\x36\x80\x8b\xf0\x73\xb6\xae\xcc\xc3\xad\x26\x91\x35\x8a\x82\x1a\xb5\x93\x95\xaa\x0a\x3a\xaf\xc8\x90\x1e\x30\x28\x37\xb0\x47\x0c\x33\x24\x7a\x6f\x0c\xdb\x3b\xdb\xfb\x64\x64\x22\xa6\x4a\x93\xc7\xce\x84\xfb\x1d\xcc\x85\x4b\x0d\x66\xc3\xa5\x0e\x68\x7b\x05\x48\x95\xd1\xf3\x42\xa7\x01\x8e\xa1\x6c\xee\x3a\xf4\x52\x0f\xc5\x5c\xf3\x56\x2d\xe6\xcb\xc6\x7a\xbf\x79\x7c\xe8\x86\xf3\xee\x02\x1e\x7a\xd3\xd5\x4d\x73\x85\x42\x5f\xf4\x5b\x7d\x39\x6f\x6f\x18\xe0\xc6\xb9\xe7\xc3\x4f\xfa\xd4\x34\xf3\x7d\x32\x1a\x77\x2b\xc0\x23\xed\x30\x08\xe3\xdb\x77\x73\x5a\x4e\xdd\x89\x36\x29\xa7\xed\xf3\x0c\x05\xae\x11\xa3\x71\x37\x87\xbe\xaf\xc1\xac\x65\x9e\xd1\xe9\x89\xa5\x1a\x07\x87\xff\xda\xb4\xf4\x79\x2a\x3e\x50\x01\x5b\xad\x57\x4f\x52\xd7\x1c\xdd\xda\x41\xd2\xf6\xc0\x6e\xba\x3e\x39\x40\xe6\x44\x1d\xfd\x57\x8c\xc4\x48\x7b\x92\xb6\x6c\x43\x2a\x2a\x7f\x2a\x69\xce\x24\xc4\x38\x4a\x3b\x83\x91\x7a\x14\xb3\x3d\x3f\x51\x14\xa7\x21\xea\x48\xdf\x2c\x22\xdc\x7f\xfb\x05\xb0\x30\xfc\xb8\x91\x1f\x88\x4d\x4d\x7e\x92\xf6\x5f\x60\xf9\xaa\x0b\x81\xfe\xb9\x1b\xac\x66\x58\xed\x98\x29\x36\xe7\x78\x93\x5a\x0b\xaa\x63\x57\xeb\xdd\x34\xc1\x80\x23\x84\xb9\xe3\x55\x75\x18\xc5\x0e\xb7\xd6\xf0\xac\x95\xe5\xf7\xbb\x1c\x5d\xb5\xc2\x05\xe1\x6d\x87\xc2\x3d\x52\x03\xb8\x5f\x0d\x8a\x28\x3a\x32\x3a\xcb\x62\xd5\xb7\xae\xee\xe8\xfc\xbe\xdd\xcb\xd2\xb7\x19\x30\xaf\x47\x28\xe0\xd0\xf7\xb4\x89\x56\xeb\xee\x5b\x35\xe0\x82\x7d\x32\xa4\xbf\xb9\x52\x36\xf4\xa8\xa1\xe2\xa7\xe5\x69\x49\x58\x73\x6d\xe9\xab\x0b\xdb\x33\xe2\x98\xb9\xb2\x59\x7f\x51\xd4\x43\xe2\x4a\x74\xc8\x6c\xe3\xbc\x58\xbf\xb4\x1d\x94\xcb\xb2\x18\x0e\x3d\x03\xb8\x03\xc3\x5f\x30\x60\x12\x98\x3d\x55\xa1\x63\x96\x01\x70\xa9\x6a\xe7\x38\x42\xef\x0e\x7b\x9b\xc9\xfd\x46\x9a\x21\xc0\x1e\xa5\xc7\x99\x65\x47\xb1\x6c\xf1\x6a\xae\xed\xea\x34\x58\xc3\x83\x16\xb1\x34\xd0\x35\x02\x54\xed\x4a\xa2\xd0\x06\x5d\x06\xb2\x95\x92\x39\xcd\xa7\x20\x5d\x95\x2b\x83\x89\xee\x0d\xc8\x9a\xfa\x28\xd7\x70\xf2\xb4\x45\x2d\xae\x48\x18\x04\x8a\x9c\x81\xec\x6a\xde\x9f\xa6\x67\xde\x12\x4e\x9d\xc8\xba\x4c\xd5\x92\x6d\xd6\xe1\x1e\x7a\xd6\xbd\x61\x36\x33\x89\x06\xfb\xe9\x26\x2d\xf3\x82\x02\x8c\x02\x80\x07\x55\x75\x5d\x74\x6d\xd5\xd8\x65\xc9\x05\x9d\xe8\x8b\xba\xc6\xc1\x72\x43\xe3\x3d\x2e\xda\x78\x03\x7d\x34\xae\x40\x98\x45\xd1\x7e\x9a\x5e\xf0\x2b\xba\x68\xe9\x2e\x0b\xa7\xff\xab\x6b\xa1\x09\x5f\xc2\x83\xad\x55\x20\xfc\x1d\x78\x43\x0b\x9a\x8b\xf4\x3a\xb8\xee\xdf\x84\xc7\xb7\x62\x26\xbe\xd5\xe6\x3f\xe8\x36\x16\xcd\x66\xa8\x6b\xff\x89\x2c\x57\x08\xd9\xe8\xea\xee\xa6\xcd\x97\xad\x06\x32\x30\x34\x70\xb4\xde\xaa\x3a\x3c\x9b\xa3\xba\x8e\xd9\x84\x74\x8f\x00\x2c\x43\xb3\xae\x1f\x74\x49\x47\x4e\x44\x19\xdc\x75\x6b\xbb\x86\x43\x50\x0f\xac\xf0\x40\xd6\xf8\xba\xa9\xc2\xc8\x40\x64\xe4\x64\x20\xec\x8d\x85\xd6\x87\xb5\xfd\x01\x7a\x8e\x2d\x4b\x69\x9e\x36\x68\xd5\xe4\x9a\xc7\xb7\x5a\x6b\x97\xf4\xb1\xca\x9e\x21\xf4\x39\xf5\x05\xd1\xf1\x1c\xec\xee\x7c\x5b\x65\x97\xc1\xe8\x7c\xe6\x70\xa7\x1b\xda\x26\x83\x85\x85\x31\x40\xf6\xac\x5c\xdb\xc6\x59\xed\xf7\x5a\xa9\x42\xe4\x42\x9b\xbc\x24\xa3\xd9\xc8\x4c\x2c\x9d\x36\x46\xde\x93\x58\x2e\xca\xc4\x86\x6c\x80\xcf\x3d\x63\x8a\x40\x5f\xe5\x59\x57\x85\x9d\x98\xb4\x3a\xc1\x8c\xd6\xaa\x01\xa2\xee\x6b\xb6\xdf\xe2\x63\x55\xaa\x36\x6b\x26\xbd\x63\xfe\xdb\xdb\x7d\x3f\x83\xd0\x3a\x73\xaf\xfb\xdd\x3c\xb0\x96\x15\xcf\x0f\xe7\x4e\x73\x85\xc6\xcd\x18\x69\xcb\x0e\x97\x61\x12\x0b\x6f\xb0\x74\x41\x9d\xa6\xeb\xf5\x1a\x2c\x83\x49\xb8\x0c\x78\x7b\x78\x7a\xfb\x15\x34\xf7\x48\x2d\x6a\x7c\xcc\xe5\x5b\xaf\x05\x35\x04\x65\xf7\xa6\xe6\x7c\x16\x45\xf1\x8c\x90\xd2\xa0\x87\xff\x69\x33\x7e\x9b\x66\x1f\xe2\xa3\x66\xd8\x33\x84\x6f\x61\x38\x13\xe8\x3f\x36\x06\x71\xb0\x72\x0e\x07\x5c\x51\xf9\xc6\xd9\x5e\x05\x5b\xc2\xef\x9d\xcb\x31\x04\xc4\x85\xde\x57\xc4\xda\x40\xe4\xac\x52\x64\xe9\x5b\xf5\xde\xb4\x55\x87\xc0\x74\xad\x7a\x98\x0a\xaf\x8c\xee\x57\xc8\x6b\xd7\x5b\xbe\xeb\x36\x4b\xaf\x49\xfb\xde\x6b\x54\xf8\xa2\xdd\xa4\x9f\xa9\x90\x9f\x68\x91\x2a\xa0\xf3\x0d\x3a\xe0\x60\xb4\xfd\x80\x7f\x1a\x3f\xf3\x2a\x8a\x86\x9b\xc5\x68\x7e\x1f\x96\x2b\x98\xae\x0f\x3a\xcb\x63\xd3\x6f\xf2\x6e\x16\x5d\x77\x85\xef\x38\x2b\x25\xd5\x48\x78\x55\xe7\xb3\xf0\xad\xf1\xb6\xea\x0c\x25\x31\xb8\x76\xed\x2e\x99\xf4\x03\xee\x0e\x44\x12\x02\xd0\xd0\xfe\xfa\x00\xa7\x41\x1b\x83\xc7\x73\xfa\x15\x6e\xf4\x74\x71\x73\x07\x7c\x4c\x71\xec\xee\x11\x0d\xb8\xeb\x53\xc1\xb7\xaf\x54\xf9\xb1\x86\xbe\x02\x6b\x2c\xa3\x59\x9e\xa3\x21\xa1\x8b\x23\xad\xb0\x37\xb9\xb6\x15\x3a\xb6\x27\xd8\xfa\x77\x27\xc9\x1b\xe0\x46\xf5\x30\x68\xc9\xb4\x2e\x8f\xe2\x03\x3a\x6f\xae\x60\x35\x1c\xb0\x77\xa4\x20\xfc\xe7\x27\xce\x17\x17\xe2\xcf\xec\xbd\x19\xd6\x1b\xf2\x8e\xfd\x87\x6e\x8f\x6d\x01\xf5\xa6\xd3\xbf\xc3\xc1\x6f\x04\xc2\x6d\xbf\x03\x72\xab\x8f\xa5\xe4\x29\x88\x8a\xc9\x9f\x07\xfc\xbd\x17\x3e\x45\x5f\x2e\xb5\x01\xa5\xb9\x01\x00\xf4\x0c\x9b\x34\x97\xe1\x61\x42\x07\xc5\xe8\x0b\x9b\xbe\x40\x84\x1a\xa4\xdd\x2f\xc8\xb0\x7c\x74\x3c\x46\x3f\x32\x1b\xd0\xcd\xc5\x28\xd6\x99\x96\x74\x65\x00\xb0\xc1\x3b\xf9\x15\xaf\x48\x07\x1b\xa9\x8b\xfa\x99\xd3\x00\xf6\x33\xa7\x1e\xee\x27\xa8\x21\xa9\x25\x95\x44\x1e\xf0\x4e\x95\x9c\x6d\x77\xdd\xc2\x9d\xf2\x56\x7d\x34\xd1\x7c\x73\x5d\xd3\x69\xb6\x99\xc8\x69\xb6\xf1\xa0\x06\xb7\xbe\xb2\x17\xdc\xa7\x81\xc7\x56\x59\x3d\x1e\xd9\x04\xf2\xb0\xf9\x76\xfa\xf1\x6c\xb6\x90\x89\xc7\xb1\x5f\x1e\xcb\x45\x13\xef\x56\xe1\x86\x7a\x0e\xd6\xd6\x9d\x23\x80\xc4\x0a\xa1\x39\x1f\x81\xa1\x16\xa8\x1f\x2e\xb4\x28\xd5\xb4\xfe\x3d\xed\x46\xa8\xd1\xa6\x69\xde\x35\x9b\x75\x39\x2f\xeb\x3a\x2e\x09\x9f\x56\xb4\xb0\xda\x08\xdb\x8a\x00\x8b\xb3\xae\x47\xf0\x3c\x22\x84\xe1\x4a\x7d\xb0\x2b\x18\x98\x24\x56\x4a\x7a\xd1\x7e\xea\x10\x92\x3f\x8a\xca\xa9\xf0\xb5\xf7\xe7\x73\xc4\xd6\xf1\x05\x8d\xa2\x0b\xa3\xee\xfa\x83\xb3\x32\x1e\xbd\x2b\x47\x88\x10\x83\xb1\x18\x7e\xf2\x97\x8b\xc0\xa9\x93\x90\x19\xba\xdd\x93\x65\x13\x08\xb1\x20\xb3\xd3\xe2\x2c\xcc\x75\x5a\x8c\xc7\x68\xaf\x57\x74\xd0\x3e\x93\x6d\x59\xac\x94\x94\x0a\x27\xbd\x0b\xd1\x43\x5a\x35\x47\x51\xbc\x27\x37\x3c\xae\x7a\x02\xd8\x2d\xe9\xea\x80\xb4\xc8\x5a\xb4\xbf\x9b\xcc\x4f\x8b\x73\xd5\xa8\xc9\x44\x8f\x79\xe6\x72\x28\x91\x7b\x4d\xc0\xf5\x7d\x1b\x23\xbc\x21\xd9\x54\xf2\x18\x0d\xb2\x29\xdd\xee\xe4\x4d\x8c\xa2\x08\xcc\xd3\xcf\x67\x8b\x35\xc9\x69\xbc\xd6\xab\x6d\xad\x16\xa6\x00\xab\x79\x98\x0e\x07\xac\x1a\x45\xc3\x74\xb1\x51\x39\xb5\x59\x07\x76\x97\xf1\xd7\x2c\xe6\xc6\xd6\x23\xf0\x3b\xc5\x9b\x69\xb6\x19\x6f\x79\x5c\x21\x8b\x18\x89\x12\x33\x21\x60\x0a\xc0\xaa\x63\xb3\x13\x45\xf1\x9a\x6c\xbc\x66\xcd\x10\xb2\x46\x2c\xc6\x35\xdf\xd8\x27\x3c\x53\x0b\x14\xef\x88\xb6\x53\x5f\x63\xc9\x93\x0d\x56\x05\x26\xfb\xc5\x7e\x59\xfc\x65\x6f\xaa\x5e\x25\x15\xe6\x82\x5d\xb2\x32\x61\x75\x1d\xa7\x0b\xb3\xb0\x5c\x47\x3d\xc8\xd7\xc5\x28\xdb\xcb\x51\x32\x1a\xc3\xea\x1f\xa1\xc3\xe0\x99\x30\x56\x59\x3b\x10\xbb\x28\x1e\xc1\xab\xd7\x34\xcd\x47\x98\xe2\x1d\x3a\x48\x35\x3e\x51\xf4\x44\x6f\x34\xfc\x0f\xa1\x35\xc1\x9d\xa6\x92\xdc\xa5\xca\x9b\x1d\x2b\x2f\xc9\x70\x86\x7b\xd7\x3e\xe9\x69\x19\xf1\xad\x79\xaf\x5b\x37\x28\x59\xc1\x76\x17\x3c\x15\xf9\xe3\x54\xa6\x86\xed\x6b\x12\xd4\x21\xaa\xa1\xd8\xd4\xe8\xdc\xdb\x15\x29\x2b\xb5\x2e\x4e\x38\x1c\x75\x80\x68\xa4\xa5\x7c\xac\x51\xdb\x15\x37\x38\x65\x95\xea\xe5\xcb\xb2\xb8\x89\x51\x5d\x4b\xa7\x13\x32\x4c\x00\x74\xaa\xae\x7f\x93\xb1\xf4\x5d\xc4\xde\x43\x94\x69\x3c\xb3\xd7\x51\x30\xd6\xe8\x80\x02\xf3\x11\x33\x58\xb7\x81\xce\x12\xac\x60\x04\xcb\xc0\x30\xda\xb7\x1e\xa9\xb6\xa9\x90\x4a\xc6\x2b\x1b\x45\x83\x05\x74\xa8\x68\x01\x4e\x48\xed\xcd\x51\xaa\xcd\x51\xda\xcd\xc1\x5c\x0e\x7b\xdb\x1d\x33\xc0\x8d\x9c\x66\x9b\xf3\xf9\x6c\x56\xd7\x25\xd8\xc6\x99\x2c\x93\xf9\x4a\xbf\xd5\xb7\x4e\xac\x79\x40\x0d\x81\x33\x58\x17\x0f\xa4\x29\x0a\xe1\x94\x68\x53\x5b\x1e\x76\xa5\x39\xc5\xb4\x06\xae\xf5\xda\x52\x93\x4a\xbb\x21\xc8\x29\xc0\x28\xbd\xec\x14\x33\xcd\x36\xa9\x78\x20\xe3\x0a\xa1\xf3\xc9\x1c\xdd\xa6\xe4\x1b\x11\x53\xec\x35\x0e\x8f\x60\xa4\x46\x68\x70\x21\x68\xfa\xc1\x90\x9e\xa6\x18\x98\xb1\x28\x6a\x25\x68\x6c\x6e\x67\x7d\xe8\x77\x56\xef\x4f\x6b\xcf\xe8\x46\x0c\x21\xb0\x57\x3d\x5a\x3d\x1a\xa4\x51\xa4\x37\x4b\x50\x93\xda\x30\x7e\xf1\xbe\x06\xef\x63\xeb\x9a\x7b\xb9\xc2\x42\xfd\xa7\x15\x4a\x6e\xae\xc3\x79\xf6\xcc\x19\x48\x3b\xcb\xb2\xf4\xe6\x10\x73\x72\xab\xf1\x42\x93\x9c\xc6\x0c\xcf\x10\x56\xef\xe0\x01\x00\x46\x0f\x03\x61\x08\xb9\x5a\xf9\xf0\x0b\x66\xf8\xb5\x2a\xab\x03\x36\xea\x5c\x64\x80\xdc\x48\xac\x6b\x0c\x5c\x87\xdf\xd8\x03\x36\x50\x1f\x29\x9e\x37\xe3\x42\xd0\x4c\x8e\xf0\x88\xaf\xd7\x23\x03\x6c\xda\xce\x93\xee\x98\x4c\x0b\x80\xac\x3b\x92\xad\xda\xd1\xa2\x00\x69\x6d\x84\x47\xeb\xb4\xa8\x68\x00\x7a\x46\x9d\xa8\x93\x6d\x2d\xc3\xa2\xf6\xb8\x26\x45\x56\xbe\xdc\xf1\xa2\x60\xe5\xe5\xd3\xb4\x92\x2e\xe2\x94\x49\x0b\xf8\x7e\x56\xa6\x59\xb6\x17\xa9\xa4\x0e\xc2\xd1\xe5\xdf\xa4\x55\x37\x31\xe3\xdb\x1d\xaf\xa0\x98\xe0\x5a\xfb\x25\x75\xcc\xf4\x6b\xae\x09\x52\x2a\x68\xfa\x49\xc0\x29\xa3\x34\x02\xec\x46\x0f\x6a\xca\x01\x51\xcd\xe9\xb6\x0b\xbb\xe5\x7b\x67\x53\x8b\xa3\xa5\x8e\xb5\x75\xc1\xaf\x93\x13\x6d\xee\x72\x7a\xd2\x87\xe0\x65\xea\xf8\xca\xaf\x63\x06\xd8\x56\xce\x72\xd4\x49\x14\x46\x1a\x9f\xcf\x66\x33\x25\xbc\xb5\x27\x0a\xd0\xcf\xed\x2c\xee\x1a\xa4\x1a\xe3\xa0\x48\x46\x73\xe7\x92\x78\x51\xa4\xd9\x87\x11\xc2\x6f\xb4\x3f\x80\x87\x92\xd3\x37\x9d\x45\x5a\xc9\x07\xb0\x2e\xc1\x06\xb4\x95\x66\x0c\x8b\x5d\x2a\xa0\x07\x86\x19\x21\xc9\xe4\x6b\x58\xe7\xbe\xf9\xbf\x14\x69\x46\x5f\x51\xc1\x78\x1e\x1c\x44\x8f\x82\x83\xe8\x4a\x3a\xfd\xb0\x81\x6c\xad\x6b\x61\xad\x8a\x2c\x47\xad\xd8\x36\x2d\xdd\x39\x92\x63\x3e\xc1\x8c\xec\x64\xac\xd8\x48\x9b\xc0\xc9\x23\x16\x83\x67\x1d\x5c\x15\x8c\x06\x1c\x08\x4f\x9a\xc6\x1c\x2b\x16\x1a\xfd\xe5\xfe\x62\x04\xa2\xd0\x28\xd1\x39\xac\xe7\xd5\xb5\xa2\xca\xdb\x74\x07\xd9\x70\xda\xcc\x9a\xb1\x2c\x21\xe6\x33\x42\xd4\x5a\x2d\x8a\x74\x57\xd1\x85\x12\xea\xf3\xa4\xd2\x00\xc9\xb8\xf2\xd0\x6b\x42\x9e\x5a\xdf\xd3\x5e\xa4\xb9\x06\xe0\xf2\xf0\x68\x68\x60\xc3\x0c\xda\x2b\xdf\x2c\xcf\x42\x1a\x6a\xb9\xa3\xec\xbe\x99\x66\x4a\x52\x54\xb3\x54\x2d\xc5\xca\x89\x21\xaa\x7e\x38\xd3\x5f\xf1\x2a\xce\x7d\x1c\x59\xe3\x43\x30\x47\x48\x87\x5e\xd5\xf3\x28\xc8\x4c\xd3\x7e\x0d\x2e\x22\x4f\x4f\x4b\x52\x7a\x22\xab\x6e\x40\x59\xd7\x65\x5f\xeb\xfc\x99\x02\x56\xd9\x37\x1b\x29\x03\xb3\xe3\xee\xc7\xfa\xe4\x09\xcd\x6b\xc2\xe6\xf6\xd8\xd8\x84\x19\x96\x6c\xa5\x4f\x51\x6d\xf4\xe2\x96\xce\x2b\xaa\xa6\x5d\x49\xe8\x1e\xd6\x0e\x6d\x5b\x8d\xc3\x91\xe5\x59\x3b\x31\x62\xfd\x5f\xea\x7a\xf8\x98\x43\xd0\x6f\x6f\x5c\x73\x1a\x3f\x60\x46\xe0\x42\xea\x5c\x50\xc3\xa8\xe7\xad\x04\x83\xb3\xe1\x0c\x4b\x52\x86\x13\xa3\x06\x18\x0f\xa5\xc7\x0c\x08\x5a\xc9\xc5\x96\xc7\xfa\x97\xbd\x78\x1f\xb4\xeb\xe1\x08\x73\x9f\x51\x46\x98\x69\xa1\x2a\x25\x5f\x59\xb3\x92\xb7\x37\x3b\xba\x90\x26\x80\x00\x91\xc0\xfe\xa7\x75\x3d\x1f\x82\x29\x92\x6d\x85\x73\xb3\xf8\x6a\x48\x02\x15\xaa\x2d\x42\xb1\xba\xc1\x1b\xac\xc3\x4d\xa4\x90\xe3\xe7\xb4\xd8\x53\xc7\x9b\x9f\x56\xde\xac\x0e\x49\x79\x8a\x2a\xe2\x27\x0d\xec\xb5\xa0\xb5\xa5\x29\xc8\x5e\xed\xae\xaa\x11\x02\xb3\xb8\x63\x59\x35\x99\x9f\xb2\xb3\xb8\x58\x58\x23\xf7\x64\x86\x60\xd2\x9b\x0b\x1d\x76\x36\x5b\x40\x41\x49\xb1\x64\x2b\xe3\x97\xc9\x1b\xbf\x4c\xf2\x95\xf5\x9d\xe5\xcb\x74\x7c\x1f\x96\x45\x45\x88\xac\xeb\x8a\x10\x61\xe5\x9e\x07\x2c\x56\x05\xe9\x21\x4f\xf4\x0c\x2c\xd9\x0a\xe1\xb5\xfa\x6c\x35\x2e\xcd\x34\xc4\xe5\xd9\xac\xae\xab\x21\x91\x08\xa4\x0c\x55\x66\x5c\x2e\xe6\xc9\x0c\xad\x10\xce\x69\x9c\xe1\xb5\xe2\x49\xb4\x8d\x60\x16\xa7\xb8\xc2\x02\x16\xc3\xda\x5b\x30\x6b\xcc\x7c\x20\xd4\x2a\x30\xa2\xcb\x49\xba\xe8\x0e\xf0\x44\x24\xb3\xd3\xcd\xe9\x86\x6c\xfc\xcc\xfa\x4a\x8d\x64\xb1\x12\x97\xbc\x69\x9a\xb5\x96\xa7\x2f\x9e\xe5\x6a\xc1\x0c\xf2\x31\xd9\xe8\x0b\x3d\x0d\x99\x60\xaa\x39\x68\xc3\x78\x7d\xce\x33\xbe\xaf\xec\xe5\xa5\x6a\x6d\x4e\xc4\xe9\xee\x74\x47\x76\xed\xb7\xae\x19\x3b\xbc\xf3\x9b\xa1\x68\xca\xb1\x76\x8c\xef\x6e\x87\x87\x68\x45\xbd\xd0\xd6\x9a\x4b\x6a\x98\x11\xb6\xd5\xf7\x36\xde\x39\xf7\xd8\xcf\xaf\x79\x2e\xa7\xd7\xa4\x69\xee\x67\x7d\x11\xca\x40\x4b\xb9\x1a\xd0\x69\xc5\x85\x8c\x7b\xb5\x30\x3b\x45\x35\x8d\x44\x2c\xcd\x0f\xb0\x12\x07\xf0\x20\x35\xcf\xcd\x15\xe6\xfc\xb4\x15\x92\xde\xb2\x98\x1a\x46\x8b\x82\x80\xa0\xd6\xc5\x4e\xb1\x86\x4a\xb6\xc6\xcc\x16\x79\x4e\x0c\xac\x7e\x4a\x80\x71\x34\x55\xba\xf7\xb8\x22\x57\xde\x57\xea\x0f\xc2\x7b\xc2\xad\x6c\xbe\xb0\x39\xad\xd8\x91\x70\x97\xa0\xb9\xcf\x41\x79\xa6\xc4\xe4\xc9\x44\x2a\x9e\x50\x03\x09\x4d\x26\x25\xbe\x8f\x0d\xa0\xfe\x7e\x51\x25\x29\xde\x2f\xd2\xa4\x42\xe8\x70\xf0\x54\x59\xcf\xdb\xa1\x60\xff\x08\x0f\x36\x93\x67\x69\x0a\xa2\x58\xd6\x35\x45\x2b\xec\x83\x94\x3d\x0b\x3f\x71\xf7\x42\xe6\x26\xbd\x51\x0e\xa8\xe6\x69\x6f\x3d\x6a\x5d\x87\x7d\xac\xa3\x46\x02\xd4\xa7\xfd\x99\xc9\x8d\x7c\x35\x98\x2e\x72\xd6\x20\x6d\x84\x05\x36\xb7\xe5\xaa\x84\x73\xb1\xc8\x69\x2c\xb0\xe2\x2b\x20\x9e\xa8\x47\x67\x93\x3e\x74\x79\x3a\xcd\x36\x03\xef\xb4\x23\x44\x31\x2c\xe7\x72\xd1\xa8\xe0\x24\x4a\xc4\xd9\xcc\x4b\x98\xa1\x84\x1e\x62\xa9\x2b\x91\x5d\xd5\x87\xd7\xc5\xa7\x2d\xae\xe1\xdc\xb6\x3f\x8a\xe4\x59\xd8\x15\x0f\xa4\x86\xb6\x3d\x2b\x9c\x10\x14\x5c\xa8\x8b\x65\xb9\x22\x7a\x10\x97\xe5\xaa\xc1\xe6\xf3\x00\x6e\xda\x77\xc1\x19\x38\x0d\x64\xdb\x50\x29\x57\xd7\x14\x8c\x28\xcb\xbc\x41\x1e\xd3\x3b\x6f\xa0\x03\xd9\x6a\x52\xbd\x53\x23\xcb\xd0\xd9\x6c\xc0\x87\xea\xa1\x84\x87\x45\xcc\x88\xc0\x82\x94\x28\xd1\xc9\xaa\xb6\xb3\x99\x8e\x6b\x84\xfc\xa5\xf7\x58\x89\x5d\xa2\x9d\x54\xd6\xb5\x08\x0c\x23\xbe\xf5\x1a\xfd\x8d\xfa\x6d\x97\x24\xf4\x86\x82\x7c\xa7\x28\x47\x2a\x6e\xd4\x46\x06\x9f\xf1\x19\xc2\xa5\x57\xc4\x4f\x8e\x25\x68\x76\xf4\x72\x85\x2d\x2b\xd2\x15\x22\xd5\x99\x54\x2e\xd9\x8a\x78\x75\x08\x6b\xf2\x8b\xd5\x51\x82\xb5\xed\x08\x34\xe8\x05\x05\x47\x63\xdb\x10\x20\x61\x28\xe8\xc3\x2f\x1d\xe3\x8e\xa0\x56\x0b\x07\x36\x60\x10\x16\x18\xdb\x52\x59\xb7\x54\xbf\x5b\xff\x68\x8f\xcc\x1f\xa0\x68\x09\x33\xfd\xdc\x61\x87\x36\xac\x92\x5c\xdc\x4c\x73\x5e\x52\xcc\xc8\x96\xc7\x25\x1a\xb0\x28\x62\xa6\x39\x8b\xb8\x5c\x96\x4e\x6d\xb2\x22\x12\xff\x66\xcb\x40\xc9\x37\x5d\xcb\x15\x97\x74\xeb\xf2\xb5\x1c\xf8\xfc\x6e\x9b\xda\x31\x57\xcc\x54\x39\xd5\x6a\xb8\x81\x20\x06\xde\xf5\x0d\x2d\x5e\xee\xc0\x0c\xab\x79\x86\x2c\x60\x24\x1d\xeb\xc4\xe7\x3c\x7f\xcb\xb6\xd4\xfb\x46\x3d\xda\x4f\x5c\xfe\xba\x3e\xd6\x0c\x69\x35\x27\x33\xbb\x4d\x46\x5f\x8e\x08\x61\x75\x3d\x1a\x6b\x18\xc3\x96\xfa\xa8\x47\x49\x2b\xa6\x15\xdf\x52\xb9\x61\xe5\xa5\x16\x76\x69\xae\x28\x72\xd9\x97\xec\x05\x5b\x69\xc6\xdf\x6b\xfa\x19\x81\xcd\xb8\x80\xbd\x68\x75\x5c\x26\xdf\x13\xad\x84\x2b\xd2\x9b\xe4\xeb\xd9\x0c\x9c\xd5\x38\xde\xf2\x98\xc1\x04\x22\xc5\xbb\x2e\xf4\xef\xa5\xfe\xe3\x4f\x5d\xf2\x18\xf0\x47\x74\xd6\x41\x30\x5c\x4d\x60\x1d\xdc\x1e\x6a\xee\xa5\xec\x88\xc0\x65\x14\x0d\xe7\x43\x6d\xd9\x44\x53\xf1\x9a\xe6\x3c\x8a\x5e\xb1\x98\x4d\xf7\x25\x94\x7c\xb0\xbb\x04\x37\xdd\xd0\x7a\x4d\x96\x27\x2f\xd2\x17\xc1\x7a\x71\xab\xe4\x36\x86\xfb\xa0\xd1\x05\xd8\xb9\x38\x8d\x81\x71\x42\x42\x70\x31\xb2\x8d\x22\x95\x69\x9a\x6d\x8f\xe6\x03\xff\x70\xd2\xef\x32\x7a\x6b\xf4\x30\xd2\xcc\x1e\x6e\xdf\xa3\xb5\x38\x11\x4f\xbf\x2f\xc8\xec\x54\x34\x14\x56\x8c\xc7\xc8\xcb\xb9\x14\x2b\x62\x28\x96\x21\xb9\x62\x65\x88\xa4\x0e\x59\xa3\x53\x8c\x6e\xc8\x6a\x9b\xc1\x6e\x5d\xff\x3e\x58\xfa\xac\x43\xbf\xf4\xf7\x0d\x53\x6d\x3b\xa4\x86\x41\xe5\xbb\x63\x18\x20\x97\xca\x6d\x17\xaa\x12\x02\xcc\x86\x56\x04\xca\x0e\x40\xe7\xd2\x00\x25\xf2\x60\xb7\xf7\xc0\xc1\xe8\x88\xe9\x05\x4b\xab\xba\x56\x0c\x8d\x6c\xe8\x2b\x74\xa8\x4d\x74\x75\x2f\xcf\x66\x8b\xc9\x3c\x99\xa3\xc1\xf7\xaa\xf7\x3f\x1a\xfb\x31\x00\xbc\x54\x72\xc6\x70\x4e\x88\x43\x86\xaa\xeb\xa1\x6a\x6e\x5d\xff\x43\x40\xa7\xbc\xd5\xf1\xbd\xe5\xf7\xa6\xf4\x1f\xfb\xb4\xa8\x62\xa8\x0c\xc1\x45\x54\x45\x0b\x22\xcd\x70\xc4\xde\x22\xf3\x55\xea\x5e\x72\x15\x0e\x11\xc0\x4f\x4a\xbd\x98\x90\x55\xdd\x6b\xc7\xcb\x07\x99\x64\x57\x4c\xde\xe8\xd0\x3b\x0d\xcc\x02\xe8\x58\x9a\xfe\xe8\x25\xae\x3d\x1f\x03\xd6\xe5\xc7\x3e\x3f\x12\xcc\xc9\xec\x94\x9f\xc9\xd6\xd9\xc2\x2d\xf7\x98\xba\x09\x5a\xf2\x15\xd8\xaf\xb5\x48\x4e\xcf\xc9\xa4\x8e\x6b\xef\x30\xe2\x2b\xbc\x27\xdf\xa9\xca\x53\xab\x8f\xac\xa2\xc8\xf2\xc9\xda\xf2\xac\xb0\x19\x60\xea\xe0\x35\xfc\x52\x2f\x4f\x63\x56\xd7\xfb\x21\xb1\x5f\xd7\x75\xa1\x1e\x60\x3e\x15\xb5\xad\x6b\xc0\x2e\x0d\x8f\x29\xcc\x11\xc2\x6c\xc9\xdd\x06\xd8\xe3\xc2\xe9\x3f\x4f\xd8\x02\x0e\x2e\xe9\x1d\x5a\xfe\x2d\xe3\xaf\x3d\x37\x83\x3e\xe3\xa4\xc5\xfc\x6d\x2a\x3e\xd0\xfc\xcd\x2e\x2d\xdb\x98\xc5\xc1\xbb\x8e\x91\x5f\x45\x82\xf7\xcb\x54\x8d\x4f\xa5\x93\x80\x79\x31\x4e\xed\x15\x30\xd0\x75\x1d\xef\xa7\xac\xcc\x8a\x7d\xc5\xae\xe8\x0f\x74\x2d\x17\xfa\xc5\x19\x1c\x10\x89\x79\x90\x56\xbf\x6d\xbf\x95\x3c\xfc\x12\x30\xcc\x16\x2a\xfd\xdc\x7e\x28\xf9\xb9\xfe\x0c\x18\x2d\x16\x45\xf1\x8f\x3a\x5c\x09\xec\x5d\x1d\xb8\xe7\x49\x09\x6e\xd4\x78\x3f\xa5\x1f\x15\xcf\xce\x64\x71\xf3\x48\xd1\x57\x9a\xeb\xcf\xc2\x71\xb8\x9d\x4c\xd2\x41\xc6\x4b\xc9\xca\x3d\x3d\x68\xa5\x0a\xb8\xf4\x4f\x53\xc9\xb7\x2c\x43\xf6\x9d\xb1\x0f\x83\x3b\x4a\x9c\x91\xbd\x46\x8d\x2d\xcf\x66\x8b\x79\x32\x99\x23\x3d\x0c\x20\x66\x87\x3d\x48\x5a\x83\x81\x20\xb2\xe6\xef\x6a\xc2\x32\x3c\x29\x31\x78\x31\x07\x4e\x37\x1c\x54\x12\x08\x75\x5f\x45\x51\x5c\x28\xe6\x0f\x1c\xc2\xd5\xd0\x9d\xcd\x16\xc5\xd9\x2c\x29\xce\x1b\x59\xf6\x57\x5d\xb2\x84\xa5\x60\x44\x6c\xaf\xb1\x9a\x98\x34\x72\xfa\xa2\xd5\xbc\xa4\xdd\x7e\x2d\xc2\x43\x7b\xd7\xb8\xc4\xeb\x23\x6d\x5d\x2f\x7e\xd5\x59\x74\xc5\x3a\x42\x9c\x5d\xbd\xde\x4a\xfd\xae\x67\xa5\x96\x75\x3d\xc7\x29\x71\x8b\x98\x63\x86\xea\x7a\xc8\xa2\xc8\x4b\x1a\xce\x50\x5d\xbb\xe7\x49\x4f\x9e\x09\xd7\x10\xbe\xba\xce\x14\x68\x5b\x96\x96\xf2\x49\xce\xa4\x22\x52\x81\xa0\xe3\x91\x99\xdf\x3d\x32\x63\xb9\x7b\xc5\x5a\xcf\x08\xac\xbb\x85\x11\x7a\xcc\xb7\x0b\x38\x86\x72\x6a\xa4\x29\x25\x6c\x41\x67\x13\x71\x3e\x8b\x22\xf5\x01\x21\x8a\xdd\xf6\xb7\x5f\x20\xb8\x2c\x42\x31\xcc\xc9\x58\x0b\x57\x26\x5c\x94\xe8\x42\x8d\x5d\x84\xb5\x05\x9e\x66\x9b\xb1\x7f\xe8\x83\x3b\x6e\x07\x05\xb2\xda\xf0\xeb\x26\x02\x54\xfb\xed\x4e\xd0\x5d\xea\x9d\x74\xb1\x3f\x16\x52\xb6\xa5\x22\x13\x23\x52\x7b\x3f\x96\xc6\xa5\xbe\xfa\x74\x54\x30\x40\x8d\x70\x67\xc5\x67\xe4\xb7\x60\x61\x5d\xb9\xc1\xe2\x86\x29\x66\x49\x1a\xc8\x95\x90\x81\x77\xc0\x6f\x1e\x15\x4f\xcd\xfd\x63\x65\xc4\x7a\x3d\x8b\x1d\xb7\xe8\xba\xae\x40\x39\x60\x27\xa5\xed\x60\x8d\x1a\xdf\x5c\xa3\x39\x38\x8d\xf7\x8a\x89\x72\x97\xa6\x1b\x7e\xad\x49\xcf\x2f\x1b\x5a\xbe\xb1\x71\x4c\x51\x14\x41\x5c\x34\x73\x2e\x30\x84\xf7\x75\x5d\x42\x0a\xe6\x9e\xb6\xc0\x73\x9b\x94\x21\x97\xf5\x5a\x3f\xb7\x1d\x0f\x3d\x1f\x8b\x8a\x95\x97\x85\xa1\x7b\xda\xf4\xf0\x15\x15\x3f\x18\x15\xbf\xe8\xf7\x13\x18\xfd\xff\xff\xdf\xa8\x27\x36\xcc\x08\x21\x0d\x6a\x1f\x98\x1f\x17\xd6\x5e\x13\x33\xcf\x05\xbb\x54\xff\x87\xc9\x5d\xe3\x55\x67\x15\x06\xb9\xd1\x97\x1e\x6e\xa2\xd7\x5e\x5d\x4a\x39\xe5\x72\x43\x85\xa5\x07\xff\x5c\xcb\x7d\x8f\x8f\x8a\x66\xbc\xcc\x53\x71\xd3\x74\x8a\x77\x2d\x3e\x79\xd8\x49\xa8\xdb\xeb\x2a\x0f\xba\xaa\xdf\xba\x0e\xf3\xb0\xc3\xd3\xbf\x7f\xfd\x65\x6c\x33\xb9\x0e\xbb\x6f\x8c\x89\xae\xe7\x6d\x2a\xef\x02\x5f\x01\xdc\xa1\xcf\xda\x2a\x59\x10\x19\xa1\x22\xa9\x8e\x53\xba\xf7\x71\x91\x9a\x10\x34\x18\x50\x1f\x26\x26\xc9\xf3\x31\x46\x93\x54\x5b\xf0\x36\xfa\xe5\xa2\x21\x86\x12\x14\x0c\x10\x1f\x45\xfa\x20\xd8\x12\x85\xa0\xd8\x25\xc2\xfc\x33\x11\xef\x2b\x23\xbc\x8d\xfa\x6f\x1f\xad\x9f\x0a\xd5\x9e\x29\x10\x3c\x6e\x34\x96\x2d\x3f\x15\x8b\xa1\xb3\xd8\x4f\x68\x22\x8c\xf3\x57\x13\x29\x27\x2e\x27\x06\xe7\xd4\xa7\x6c\x4e\x6f\x7e\xa5\x43\x71\xe2\x4c\x71\x48\x0c\x4b\x04\x36\x3c\x1e\x81\x6e\xc6\x62\x13\xfb\x87\xc2\x5b\x69\x08\x3f\x78\x1f\x41\xff\x32\xdc\x28\x5f\xba\x52\x31\xc0\x01\xba\x5b\x1e\xa8\x7f\x54\x48\x31\xf2\x91\x69\x87\x73\xc3\xd0\xd2\x86\xed\xe2\x96\x93\xa5\x4b\xbe\x3a\x8d\x53\xcd\x30\x89\x28\x4a\x81\x03\xaa\x6b\x49\x88\x79\x22\x5a\xc7\x5e\xc6\x0d\x72\x24\xe4\x56\xdd\x72\x0a\x42\x95\x51\xb5\x79\x4e\x60\x9d\x5c\xd1\x62\x31\x12\xb2\x18\x25\xba\x35\x98\x41\x6c\x54\x56\xd7\x7e\x1b\x0f\xf1\x23\x16\x67\x08\x8b\xba\xd6\x26\x26\x84\x94\x8b\x75\x52\x86\x4a\x08\x73\x86\x67\x38\xc7\x3b\xbc\x25\x1b\xc5\xfc\x9b\xfb\x41\xb6\x8e\x15\x9f\x80\x32\xb2\xc5\x39\xd9\x91\x2d\x2c\x51\x17\x3f\x3f\x23\x9b\x58\x4e\xe6\xd8\xdc\x0f\x22\x0c\x4d\x22\xd6\x2f\xe8\x8a\x6c\x07\x5b\x92\xe1\x8c\x5c\x1d\x72\xf3\x2d\xde\x91\x4c\x2f\xd7\x83\x59\x01\x70\x48\x53\xc0\xcb\xa9\x10\xce\x20\x46\xef\x56\xfd\x7f\xfe\x95\xe2\x95\xe2\x1c\xc3\x93\x5e\x87\x5b\x8b\x65\x8b\x73\x52\xb9\xa7\xb3\x4c\x03\xa0\xe8\xcc\x3a\x4d\xe7\x87\x17\x08\xd9\xce\x47\x91\x24\x64\x1d\x45\xf1\x8e\xec\x11\x8e\x87\xbc\xae\xa1\xf0\x33\xae\xfe\x37\x0f\x84\x70\x5d\x9c\x6e\x31\xdc\xb1\x68\x9e\x8f\x93\xad\xfa\x2a\xad\xeb\xcc\xd4\x72\x9e\x9a\x1f\x4d\x92\x9a\x20\x0b\x34\x6b\xba\x7a\x6e\x76\xa8\x36\x05\xc9\x10\xce\xcf\xaa\xf1\xdc\x76\x59\xb5\x1a\xda\x89\x77\x13\xf5\xcb\xf4\xf0\x80\xb0\x0b\xe4\x4b\xcb\x3c\x49\xed\x65\x8b\x6c\x8c\xd5\xa4\x36\x56\x63\xeb\xd8\xf2\x74\xc6\xc0\x2c\xf3\x6f\x20\xc0\xc2\x4c\x3b\xf2\xde\x6a\xe3\x30\xd8\x35\x6b\x73\x8f\xb7\xd3\x8f\xe6\x4b\xbc\x25\x4f\xcb\x38\x47\x44\xfd\xd9\x21\x7c\x45\xc2\xb2\xb6\x8b\xdc\xdf\x68\xe3\xb9\xe6\x1e\xa7\xb4\xcc\xf1\x25\xc9\xac\xd9\xdb\x76\x31\xd3\xb7\x72\x50\xb7\xbe\x25\x1e\x28\xe1\xf4\x0a\xc6\xfb\x12\xa6\xf9\xfe\x22\x2e\xe2\x2b\x3d\x36\xf8\xaa\x99\xe5\x2b\x37\xcb\x45\x5c\x61\xc8\x8b\x2f\xf5\xf2\xb9\xb4\xaf\x50\xd2\xfe\x54\xe7\x98\x34\x89\x36\xa7\xfb\xa9\xab\x55\xeb\xa4\x72\x69\xba\xc6\x4b\x0d\x84\x13\x9e\x5a\x3e\xdc\x0a\x93\x0e\xd6\x22\x30\x03\xed\x86\x10\x07\x45\xd0\x33\x25\xc1\x5c\xa5\x45\x2c\xa7\x17\x05\x2b\x3f\x50\x61\xd5\xf2\xc3\xd9\x40\x36\xa0\x46\xe6\x24\x02\xdc\x1c\x08\xef\xa7\xce\xb6\xf6\x31\xfb\x50\x95\xf0\x3a\x95\xf4\x7c\xb6\x70\xe5\x91\x8a\x4a\x57\x8b\x67\x52\x76\x67\xe1\xb1\x20\x43\x81\x20\x5e\x88\xb6\x34\x18\x1d\x8e\xd7\x86\x92\xa3\xaf\xf4\xa1\x72\x67\x37\x4c\xf9\xfe\xfd\x33\x97\x0e\x50\xc6\x84\x39\xd2\xeb\xe2\x8d\x1a\x50\xc0\xe8\xf1\x62\x10\x9d\xb5\x99\x3c\x10\xf0\x61\xe8\x5d\x18\x79\x30\x44\x97\xf8\x09\x8f\x53\x19\xea\x27\x52\xd9\x8a\xa1\xa3\x91\x1f\x5d\xe1\xd2\x5e\x2e\x78\x89\xf6\x02\x58\xc3\x1d\xd9\xd4\x2e\xb7\xe9\x62\xb8\x3b\x35\xa1\x87\x82\x78\xcd\xc5\x87\xb7\x0c\x80\x10\xaa\x32\x96\xd0\x4b\x5c\x69\x5b\x0f\x5b\x24\x52\xe4\x7a\xb9\xb2\xf1\x7c\x9a\x17\xde\x7d\x50\x00\x24\xdb\x01\x18\x1a\x7f\x3d\xf3\x03\xd9\x73\x73\x35\x74\xac\xcd\xc0\x03\x9b\xf3\xc8\x30\x3f\x15\xd8\x09\x7b\x1b\xf9\xbc\xe9\xc3\x36\xfd\xf8\xad\x1d\x62\x1d\x59\x04\xef\xc9\xef\x25\xa8\x57\xab\x45\xd3\xad\x12\x25\xa0\xc5\xb2\xfc\x59\x45\xf6\xe6\x87\x41\xd7\x33\xe9\xe0\x4a\x49\x2b\x90\xb8\x33\xfd\x7b\x90\x2d\xc2\x97\x24\x4b\x0a\x45\x61\xc3\xc4\xd0\x0d\x75\x4d\x14\xe9\x4d\x1d\x84\xae\xad\xd6\x5d\xef\x17\x00\x28\x16\x0f\x8b\xba\x1e\x66\x75\x5d\x34\x40\x11\x59\x03\xbc\x50\xf8\x40\x11\x99\xef\xeb\xb9\x21\xb3\xd3\xe1\x3a\x8a\x36\x67\xa9\x1f\xac\x73\x4d\xd2\xe5\x66\xd5\x54\xb7\xdc\xac\x06\xeb\x28\x62\xc6\x09\xb0\x99\x56\x60\x2c\x5d\xd0\xad\x6a\x51\x26\xfe\x58\x59\x03\x43\x6f\xcc\xcf\xc8\x5d\x83\x1e\x45\x52\xc9\x9f\xfa\x0b\x5c\xb6\x8a\x6f\xea\xfd\xcb\xd7\x84\xcc\x5a\xd3\x62\xcc\x51\xc6\x63\x6f\x71\xb9\xe5\x7a\xee\x4c\x59\x61\x47\x86\x8b\x17\xf4\xe9\x60\x80\x0a\xb1\x06\x4d\x4b\x7e\x53\x19\x7b\x5c\x0d\x34\xa4\x8f\xcd\x77\x2a\xc7\x63\x44\xc1\xd2\x71\x29\x57\x58\x03\xc0\xa0\x83\x4f\x03\xaa\x2e\xf3\xcc\x33\xcd\x38\x37\x28\xc9\x10\x89\x3d\xa0\x0e\x61\x68\x7f\xde\xd1\x69\xbb\xdb\x2b\xcc\xb0\x31\xa8\xc7\x29\x11\x8b\xc9\x3c\x91\x93\xd8\x23\x38\xac\x2c\x29\x78\x69\x2c\xe6\xf4\xab\x04\xc2\x9a\x55\x44\x9e\x56\xe7\xe9\xe9\x64\x52\xc1\x3e\xaa\xce\x2c\x3e\xa2\x1b\x26\xfd\x68\x2c\x3b\xc0\x90\xbb\x32\xfa\xa2\x7d\x18\x76\x6d\x28\xea\x5a\x7f\xef\xf6\xba\x35\xa6\x32\x7b\x22\xe3\xf1\xde\xcc\xa8\x3a\x78\xbc\xe8\x59\xe9\xc5\x1b\xf6\x27\x45\xa7\x86\x35\x56\xbc\xdc\x79\x01\xca\x46\x52\x4d\xe6\xb8\x24\x45\xa3\x4a\xb4\x7a\x69\x9c\x12\x7e\x5e\x5a\x62\x76\xcd\xe2\x12\xf3\xc9\x1c\x79\x8d\x72\xba\x14\x92\xaa\x35\xa2\x47\x16\xa7\x28\xd9\xdb\x07\x84\x4b\x4d\x88\x38\x96\x41\x08\x7d\x58\x7e\xda\xaf\x16\xa7\xd6\x58\x4c\xb1\xab\x93\x79\x5d\x73\x58\x76\x75\xcd\xcf\x09\xf3\x30\xe0\xf8\x99\x8d\x8f\x38\x10\xe1\x6e\x08\x2a\x87\xbe\x8f\xc7\xfc\x00\x1a\xf0\xb8\x6c\x88\x30\x47\x38\xf5\x7c\xd5\x65\x80\xec\xe3\xa2\x7f\x36\xf0\x5a\x9e\x9f\x78\x98\x57\x43\x80\xfa\x38\x51\x93\x6e\x01\x6d\x00\xa9\xac\x39\xe6\xc3\xc0\x83\x8d\xf1\x77\x98\x6e\xe0\x46\x20\x02\xb9\x35\xf8\x51\xa2\xd3\x4e\xd0\x11\x1e\x29\xf1\x05\x0b\xa2\x23\x20\x4f\xdb\x71\x7b\x17\x47\xd2\x63\x89\x12\x69\xd1\x35\x21\x05\x97\xe4\x16\xe4\xaa\x5d\x2a\x2a\xfa\xac\x94\xb1\xf0\x5d\x83\x91\x71\x71\xea\xbe\xd5\xea\x3f\x77\xa3\xc2\xaa\x17\xe9\x0b\xe3\xf5\x85\xea\xda\x3e\x6a\xe6\xd4\x28\xdb\xc2\x70\x8b\x08\x7b\xda\x8d\xb5\x3f\xc2\x8c\x4f\x9a\x53\x26\xf4\xc3\xf5\x7c\xac\xc3\x39\xb9\x2b\xa6\xdf\x04\x4a\x9f\x74\xa3\x6d\x34\xa5\xe5\x9f\x55\x9a\x99\xec\x9e\xe2\xda\xb3\xbd\x93\x9e\xc3\x3e\xb5\x5a\x51\x33\xd5\xb7\xdb\x74\x97\xb8\x49\x05\xfb\x48\x18\x1c\x2f\x0d\x9e\x0f\xad\x98\x72\xb4\xe3\xcf\x0f\x85\x1b\x6f\xfe\xbb\xca\xaf\x96\xe5\xaa\xbf\x0e\xf5\x46\xd7\x73\x47\x1d\x60\x9a\x67\xaa\x41\x8e\xc6\xff\xb3\xd5\x60\xad\x88\x4f\x86\x33\x8f\x6a\x6f\x65\x47\xbd\x7a\xa3\x92\x2e\x35\x47\x07\x2f\x3c\xdf\x2b\xd9\x98\xab\x1c\x41\x8a\xec\x70\x77\xa8\x33\xab\x60\xdd\x68\x20\x88\x57\x9d\xe8\x31\x77\xe0\x5f\xc9\x73\xa2\x21\xb0\x5e\xa8\x8a\xcc\xcf\xb1\x86\x04\x5d\x88\x04\x62\xf5\x7b\xee\x15\xa6\x0f\x86\xa7\x7b\xc0\xb4\x6a\x04\xfa\x20\xd0\xa0\x8c\xa2\xa1\x06\x88\x5a\x94\x44\xab\x73\xa3\xa8\xf4\x10\x60\x01\x28\xad\xc4\x02\x6b\xec\x6d\xe7\xb6\x12\x06\x2c\x47\xc6\x97\xab\xcf\xb2\x46\x55\xa9\x84\x2d\x89\x82\x70\x01\x3d\x68\x5d\xf4\xfa\xe4\x57\x69\xed\x80\xa1\x75\xba\x73\x26\xd4\x16\x23\xa5\x86\xed\x22\x80\xda\x55\xa2\x06\xc4\x1f\x00\x32\x34\x32\xc6\x73\xde\x0a\x31\xd8\x04\x72\x06\x60\xae\xf2\xa0\x51\x9f\x4d\x91\x3b\x19\x97\xba\x32\xb3\x9e\xc0\x70\x50\x47\x3f\x4b\x4a\x2c\x68\x66\xcc\x2f\xd5\x3a\x63\xde\x36\x31\xa1\x5b\xed\x7a\x62\x53\xfd\x03\x6f\xd2\x4a\xef\xc3\x2a\x19\xce\xbd\x35\x76\x23\xfd\x5b\x05\x69\xb2\x83\x75\x8c\x3a\x6b\xe1\xf4\xc1\x7b\x22\xc6\x71\x09\x78\x4d\x8d\x3d\x13\xd4\xd3\x85\x5b\x59\x54\xc4\xbc\x5b\xee\x57\x49\x2c\xa7\xaa\xad\x00\x67\xa0\x7e\x18\x40\x47\xcd\x8e\x1d\xf1\x9c\x45\x58\x4e\x9b\xe6\xd6\xf5\x51\x60\xef\xde\x90\xa6\x8c\x94\x51\x04\x04\xd0\x40\xca\xdb\xbd\xb6\xb1\xe5\x95\x51\xd4\xa4\x5e\x6b\x70\x57\xd6\x60\xe9\xb5\xf2\x2b\x91\x41\x5b\x19\xb5\x3e\x22\x6c\xd0\x5c\x05\xca\xb6\x51\x2f\x1c\x2f\xae\x53\x55\xac\x18\x9e\xd9\x69\xe5\x78\xdc\xc9\x1c\xbc\x69\x8c\x86\x3c\xd5\xe8\x35\xe9\xb2\x1a\xcf\x57\x03\x90\x47\xd2\x8b\x2a\xde\x37\xc8\x93\x46\xaa\x3e\xbf\x1f\x45\x5c\xb3\xc0\xee\xed\x18\x70\x29\xd1\xbd\xfb\x13\x03\x2c\x7b\x30\x39\x9c\x5e\xd5\xa6\x83\x3c\x04\x50\xc0\x7a\x36\xc2\x91\x86\x0d\x13\x57\xe4\x88\x91\x0a\x06\x93\x75\x09\x6b\x0d\x2e\x72\x2d\xe8\x26\x2e\x88\x35\x48\xcf\x08\x18\xa8\xe3\xb5\x67\xb3\xae\x46\xef\x2b\x42\xf6\xce\xec\xb7\xe1\x1b\x75\x90\xfe\xbf\x9e\x6e\xd4\x48\x00\x06\x72\x11\x45\x6f\xb9\xb9\xb4\x31\x38\x60\xc6\xa5\x48\x03\x6b\x40\x94\xe0\x71\x81\xd0\x29\x9a\x4c\x0a\x98\x80\xd3\xe0\x55\x76\x66\x1e\x9f\x94\xf9\x67\x95\x95\xa9\xb2\xc6\x63\x10\x55\x01\x27\xf0\xdf\x2d\x24\x79\xa6\x2d\xef\x75\x59\x13\xff\x23\xc4\xc8\xde\x47\x76\x3b\xe6\x02\x6e\x41\xdc\xf8\x31\xa0\x61\x64\x34\x43\x1f\x38\x20\xb3\x64\xa8\xb3\x6c\x06\x8c\xe4\xf6\xfa\x2b\x5f\x3a\x97\x80\x72\x91\xbb\x85\x94\xcc\x56\xc9\x7b\xa9\x05\x1d\x16\x16\xd5\xd7\xaa\xba\x7e\x2f\xf5\x85\x85\xe2\x47\xea\x9a\x69\x46\xa4\xae\x55\xaf\xb5\x71\xfc\x20\x23\x05\x2e\x26\x64\x8e\xd7\xd6\x0b\xe1\x00\x63\x33\x9f\x03\x63\xdc\xf5\x50\x36\x3c\x55\x95\x09\x4a\xcb\xba\x36\x37\xd3\xf0\x34\x2d\xf8\x25\xcb\xd2\xe2\xd7\xc7\xaf\x9e\xd5\x75\x37\xcd\xe5\xcb\xe9\x15\xcb\xa8\xce\x36\xf4\x5d\x4d\xd5\xf6\x03\xc4\xe5\x1f\xdd\x81\xf5\x23\xf7\x58\x40\x60\xfd\xaa\x5d\x5a\x36\xbc\xdf\x51\xe2\x82\x4b\x35\x42\x12\xcf\xf0\xfc\xe8\x08\x39\x4b\x18\x13\x2c\x41\x6d\x45\x7d\xcd\x31\x31\x4c\xdc\xf9\xfc\xd0\x44\x85\x38\x91\xe6\x9c\xec\xf6\xed\x5e\xa7\x6b\xb8\x6c\x65\xfb\xad\x93\x4d\xa5\x38\xb2\xaf\xd8\x4f\x09\x95\x7e\x29\x0c\xbf\x29\xf5\x84\x7d\x29\xb0\xe4\xbb\x44\xaa\xbd\xfd\x65\xe9\x30\x2f\xcc\x9e\xff\xb2\x54\xdb\xbd\x41\xe6\xb7\xa7\x0d\xd2\x12\xf1\x6d\x01\x50\x1b\x6b\x52\x12\xa7\x46\x6e\x83\xd8\x37\x68\xd8\x71\x4e\xf6\x9d\x95\x89\x9c\x2f\xf3\x5d\x0b\x73\x7f\x6c\x90\x0f\xde\x7e\x1b\x16\x4a\x88\x63\x75\x3d\xd4\x8b\x32\x8a\x86\x66\x55\x1a\xad\xcf\xae\xb3\xdf\x82\xa6\x2c\x67\xab\x01\x23\xbb\x85\xe1\xd6\xb5\xce\xd2\x30\xe7\xfa\x7a\x2a\x88\x5c\x0d\xe3\xb6\x03\xed\xa5\x19\xb5\x9d\x19\xb5\x83\xda\x48\x96\x3a\x6d\x21\x64\xed\x6e\xa2\x69\x25\x64\xbf\x22\xcc\xd2\x54\x2f\xf5\x92\xc4\xdb\xf1\x15\xba\x77\x1f\xdf\xd8\xf3\xad\x75\x88\x60\x4d\xe9\x6e\xdc\xd0\x44\xd1\x30\xbe\x3c\xbb\x59\x6e\x56\x08\xa8\xdf\x29\xb8\xad\x93\xcd\xe2\x66\xb9\x99\xcc\x57\xc9\x0c\xbf\x27\xea\x2d\xbe\x36\x22\x48\xec\x46\x78\xbd\x30\x63\x93\xe8\xc1\x42\xb6\x29\x5e\xaf\x63\x7d\x95\xa0\x33\xc3\xf7\x76\x3c\x83\xcc\x6a\x1c\x2e\xec\x18\xbc\x3f\x0c\x3a\x24\x21\xbe\x9e\x5e\xf0\xcb\x3d\x1c\x0d\x83\xcf\xb8\x3d\x85\x2f\x84\xe4\x3b\xb2\xc5\xd7\x53\x61\x54\xf3\x57\x6e\x47\x5d\x1f\xdc\xa1\x82\x74\xc9\xc0\x19\x58\x76\x81\x54\x08\x61\xdd\xdf\xca\xef\x4e\x65\x94\xcb\xaa\xbd\x6c\x51\x41\x0d\x60\xd4\xe2\x26\x10\x52\xcd\xef\xca\x4e\xe6\xe1\x01\x6d\xa1\x56\xb0\x92\xc9\x1e\x4c\x24\xb9\x61\x95\x22\x1a\xda\x79\x0d\x9b\xe0\xa9\x06\x5d\x8a\xbc\xa4\xb1\x8b\x7d\x6a\xbd\x01\x6d\x98\x97\x56\x2c\x87\xca\xc5\xb2\xe2\xb1\xc0\x54\x9b\xcd\xf4\x1a\x66\xa2\x0b\x4a\x6e\xad\xa3\x79\x32\x9c\x6b\xb7\x70\x88\x3f\xe4\xec\x0b\x20\x1e\xa5\xec\xf3\x6c\x04\x0d\x6a\xe8\x2b\x79\xcc\x01\x92\x4d\xaf\xd2\x62\x4f\x49\xd7\x95\x1d\x5f\xf1\x98\x21\xe4\xee\x95\x86\x22\xdc\xfe\xac\xa2\x8f\xf8\xee\xe6\xd1\xde\xca\x4e\xc6\x1a\xef\x23\x8d\x05\x1a\x84\xed\x9f\xe9\xf6\x6b\x96\xf7\x80\xc1\x47\x1d\xc0\x80\x6f\x76\x74\x21\xa6\x55\xd0\xab\xc6\xf6\x4f\x71\xb0\x29\x47\x49\xbb\x37\xb6\xd1\xe5\x91\x36\x1f\x82\x0a\x20\xb8\x40\x8f\x3b\xfa\x0c\x1d\x0e\xb4\x3f\xbc\x68\x89\x9b\x17\x1e\x48\x2a\x38\x3f\xb2\x16\x84\x11\xa0\x7d\xe9\x38\xb2\xda\xe7\xde\x57\xc9\x29\x12\x76\x4e\xfe\x5d\xb1\x94\xbe\x97\x29\x4c\x50\xe0\x76\x6a\x11\x42\x77\xbc\x28\xe2\x26\x32\xad\x76\x3e\x0f\x90\x15\xcc\xda\xa9\x6b\xf0\xa1\x17\x10\x73\xa0\xd7\x07\x5f\x8d\xfa\x74\x9d\x56\xf2\x15\x94\xd9\x14\xaa\x06\x07\x57\xee\x89\xef\x6e\xec\x63\x13\x0e\xab\x5b\x75\x89\x6e\x53\x01\x12\x4c\x5d\x43\x1b\xca\x4f\x55\xad\x91\x37\x4c\xbd\x9e\x9a\x07\x8f\xf4\x6d\x35\x30\x85\x5e\x0d\xd2\xd4\x20\x51\x5d\x3f\x54\x22\x5f\xd3\x62\xed\x8c\x0b\xeb\xa3\xf5\x91\x75\xc6\x85\xbd\xa1\x69\x4e\x3c\x5a\x0b\xbe\x1d\xa1\x81\x6c\xbc\x78\xc1\x82\xc8\x3e\xe8\x05\xe6\xe2\xe1\x7a\x6f\x88\xb9\xdd\xa3\xda\x23\x3a\x11\x60\xd3\xf6\x96\x7e\x04\xc9\xd3\xaf\x42\xf2\x11\xc2\xb7\x0e\x3a\x31\x09\xec\x27\x6c\x71\xa3\x03\x3a\xf4\x75\x82\x96\x79\xd0\x85\xa0\xa1\xb1\x5d\x05\xf8\xf3\x9a\x0c\x4b\xe7\x80\x0e\xb8\x6d\x80\x74\x04\xfe\x27\xdb\xe2\x9e\x90\xe9\x8a\xac\x59\xb1\xc8\x53\x80\xf3\x2b\x6d\xa8\xfa\x0b\x93\x1b\xdd\x75\x6b\x94\xfe\x5a\x0f\x49\xd7\xb4\x56\x5f\xe1\x23\x00\x6f\xb7\x9b\xe8\x18\xbb\x95\x7a\xb8\xff\xc7\xd8\x2d\xb5\xcb\xdf\xf2\x9d\x6f\x03\xe3\x5d\xc9\xf4\x05\x3a\x9b\xcc\x67\xe0\x99\xb4\x1b\xa7\x70\x44\x73\x7b\xe1\x3c\x95\x60\x8b\xf7\x59\x45\x69\xfd\x17\x94\x04\x3c\x82\xb6\x04\x99\x98\x8b\xe7\xc6\x0f\xe4\x80\x03\xb3\xb0\x23\xe7\x87\xe7\xb5\x32\x78\xce\xfd\x6b\x3a\xad\x9c\xa8\xb8\xa8\x10\x86\x37\x7e\x30\x15\x6d\xc3\xab\x1f\xf5\x85\xb9\x46\x5a\x7e\x0b\xa1\x45\xfc\x73\xc8\xb3\xad\x31\x19\xb4\x5d\x4d\x4f\x1e\x03\x1b\xa7\xc7\xc2\x04\x5c\xc4\x82\x56\x34\x3c\xfc\x40\x3e\xd6\xae\xf0\xa5\xa2\xb3\xcf\x69\xb9\x7f\x45\x61\x7e\x4c\xcf\xd4\x49\xed\xd6\x14\x23\xa5\xbd\xd3\xeb\x75\x2a\x30\x96\xeb\x3e\x21\x37\xda\x6b\xd6\x72\x8a\xd9\x93\x58\x92\x2f\x78\x14\xc5\x9e\x05\xd9\x24\x34\x37\x03\xc8\x8b\x58\x90\x32\x38\x12\x7d\xb6\x93\x7e\x85\xd0\x62\x34\x19\x25\xa2\xae\xdb\xb9\x06\xc1\x69\x6d\x4e\x93\x3d\x2e\xdb\xc1\xa1\xaf\x78\x1c\xe4\xd4\x58\xf1\x40\xd0\xe3\x2e\x74\xc0\xde\x5c\x27\x29\x3e\xa7\xd5\xd7\xbe\xfa\x46\xa3\x3b\x4b\xd3\xf6\x9f\x83\xa3\xe8\x05\xf2\x70\xc0\x97\x54\x3e\x65\xb4\xc8\xbb\x40\x5b\x27\x41\x8d\x07\x5c\xed\x77\x3b\x2e\x64\xf5\x96\xef\xb3\x4d\x37\xfb\x70\x7e\xc0\xd0\x6b\xff\x15\x5b\xc7\xa3\x92\x1b\x8b\xaf\xa1\x5b\xc6\x96\x36\x08\x83\xad\xa2\x98\xf3\x6d\x5d\xeb\xd8\x41\xe1\x70\x21\x29\x6e\x6e\xc3\xbe\xdb\x48\xda\x59\x2a\xb3\x4d\xfc\x0d\x07\xe4\xae\x8b\x62\x1f\x80\x79\x85\x9f\xa8\xb7\xb1\x5d\xa2\xaf\xac\x75\x53\x3b\x7b\x77\x1f\x1c\x5b\xfa\x33\x55\x54\x46\xd9\x15\xcd\x9f\xb6\xfb\x0c\xdf\x54\x05\xbf\xd6\x87\xe6\x01\xdb\xdf\xfd\xc4\x74\x40\x7d\x04\x8a\xba\x76\x8f\xfa\x16\xbc\x35\x62\xea\x9d\x35\x0f\x08\x83\x92\x1b\x82\x0f\xde\x00\xad\x35\x48\xfd\xe6\xa0\x03\xb6\x27\x7a\xb7\x41\x8a\x4d\xd4\xad\x92\x21\x2e\xc6\x0c\xcb\xa0\x5d\xf7\x67\x21\x56\x9d\x3d\x70\xea\x9a\x2e\x62\xd9\xc1\xd4\xf0\x1a\x80\x92\x98\x76\xcb\xfb\xdb\x0c\x0b\xa4\x8f\xa0\xa3\x23\xa5\x8f\x9d\x60\x62\x2d\x4f\xed\xb6\x09\xd8\x03\xf4\x53\x1c\x70\xc1\x68\x61\x7d\x7d\xcf\x63\x89\xa2\x68\x28\xa2\x68\x18\x62\x76\xa8\x89\x08\xc1\x7f\xe8\x11\xf0\x1f\x5b\xe8\x07\x7a\xf3\x86\xfe\x23\x0c\x05\x57\x2a\x71\x4d\x6d\x55\xa0\x69\x60\x15\xa5\x1a\xd1\x43\xda\xdc\x67\x46\x6a\xd5\x2c\x5f\x67\x4b\x13\x52\xd6\xf5\x55\x14\xdd\x5b\xbe\xdb\xaf\xff\xd7\x6c\x36\x51\x7f\xd6\xeb\xd5\x3d\x8d\x60\x53\xa2\xae\xc2\x5d\x9b\x16\xc3\xca\x8f\x6d\x20\x4c\x07\x14\xe3\xc3\x17\x54\xb4\x78\xca\xc5\xa3\x66\xe0\x1a\x18\xe8\x6c\x93\x8a\x47\x1a\xe8\x47\x43\x03\xfc\xfd\xfe\xec\xab\x21\x61\x75\x2d\x80\x86\x8e\xfe\xf7\xff\xf5\xff\x8c\x10\xfe\xfb\xdf\xfe\xf6\x37\x42\x18\xf2\x09\x88\xad\xd8\xae\x64\xfa\x91\x66\x8f\xf8\x76\x9b\x96\x79\x3c\xda\x97\x39\x1f\xa1\x83\x87\x0d\xe4\xec\x24\x59\xe9\xa2\xea\x62\xeb\x9c\x87\x4e\xab\xb3\x7d\x14\x09\xbf\x3d\x15\xb8\xa0\x05\x09\xa7\x68\x3c\xb6\xf7\xb2\xb0\x98\x4d\x7b\xda\xb7\xdd\x00\xda\x56\x1a\x2f\x8f\x0a\x61\x5b\xdf\xc4\x08\x0e\x45\xb3\x1c\x16\xa3\x2f\xf5\x6f\x3a\xd2\x86\x51\xae\x4d\xea\x98\x50\xc7\x83\x45\x2c\x02\x29\xe2\x7c\x32\x5f\x98\x99\x27\x45\x70\x60\x25\xfe\x63\xe9\x57\x11\x45\x71\x71\x94\x5b\xeb\xbc\x21\xb4\xe1\x2b\xfd\x97\x5a\x4d\x4a\xff\x15\x3e\xd3\x00\x54\x61\x1d\x8c\x5b\xed\x56\x9a\x77\x08\x9b\xb7\xb3\xcd\xfa\xd4\x1b\xdf\x1e\x40\xe1\xce\x47\x07\xcc\xcb\xef\xe9\xcd\x2b\x41\xab\x80\x48\x7e\xf2\xd8\x32\x61\x62\x9d\xec\xa1\x0a\xf2\x96\xe6\x1d\x32\xb6\x16\xb0\x85\x67\xbd\x2b\x1b\x7a\xb1\x27\x95\x00\xe1\x07\x17\xa4\xec\x0b\x8d\xce\xd6\xf1\x3e\x8a\x86\x19\xba\x15\xde\x31\xe5\x8b\x97\x2f\xfd\x76\x44\xd1\x64\x4e\x54\x65\x06\x77\x49\x91\x9d\x94\x95\x15\xc0\xc2\x7f\x2f\x63\x81\xbf\xa1\x28\x86\xf7\xf8\x0f\x1a\xef\x91\x92\x46\x07\xda\xea\xc5\x8a\x81\x59\x55\xa9\x69\xc4\x5e\x40\xba\xf0\xcd\xe0\x48\x3a\xe9\x31\xd4\x1d\x19\x9c\xb8\x4f\x32\xce\xbe\x49\xf9\x1d\xe5\x35\x30\x40\x33\xdf\x94\x57\x3f\x19\x23\xe0\xd8\x62\xec\xfe\x36\xc9\x81\x5b\xfe\xda\x18\xfe\x7a\xf1\x12\x74\x86\x5f\x27\xb9\xe6\x81\x6d\x8e\x3f\x27\xb0\x6f\x92\x93\xf9\x6c\x36\x3b\x3d\x69\x62\x51\xc0\x67\x7c\x31\x12\x97\x17\x69\x7c\xff\xeb\xaf\xf1\x49\xf3\xdf\x74\xf6\x35\x1a\x25\x23\x29\xd2\xb2\xd2\x4a\xbb\x11\x1a\x8f\x5a\xd8\x47\xa7\x27\x1a\x5b\x68\x62\xda\x3f\xeb\xbc\xef\xa2\x20\xf1\x5d\x9a\x31\x79\x93\xa8\x1a\x4e\x4f\xd6\xac\x90\x54\x24\x27\x69\xb1\xdb\xa4\xb1\x79\x47\xbe\x46\xa7\x4a\xd6\xd5\x4a\xc3\x46\x2b\xcd\x8b\xe2\x37\xcd\xb8\x86\xa0\x91\x55\x14\x05\x99\xde\x72\x8d\xd0\xb9\x03\xf3\x8c\x80\x34\xf7\xaa\x71\xea\x3a\xb6\xba\x8a\x40\x85\x71\x32\xd2\x22\x5c\xfb\x94\x53\x47\x6b\xd9\x25\xe5\xcd\x12\xd5\xb8\xa7\x6f\xd9\x96\xf2\xbd\x8c\xcb\x69\x4e\xa5\xf6\x8a\xd0\x75\x3e\x50\x7b\xcf\xed\xce\xab\x18\xe1\x6b\x74\xfb\x0b\xb3\x21\xfd\xb6\x3e\x30\xe9\x17\x2c\xd6\x7d\xc3\xa3\x2d\xdf\x57\x74\xbf\x1b\xe1\x2d\xc2\x15\x95\xb6\xf8\x4b\x7c\x7f\x86\x0e\x83\x6f\x7a\x33\x1a\x54\x48\x3f\xf7\xd7\x3e\xca\xc2\x55\xec\x69\xe6\x59\x23\xc5\xe8\x1b\x12\x27\xb4\xf7\x0c\x1a\xe6\xfa\x44\x1a\xc7\x74\x61\x46\x2f\x19\x8d\xd0\xc0\x8e\xe4\xe8\x7f\xff\xdf\xff\x6f\xa3\x03\xe2\xd8\x1f\x59\x0a\x66\x94\xea\x6b\xdc\xae\x93\xcc\xfd\xa4\x27\x65\x4e\x78\x73\x42\xdd\x31\xe4\xde\x6d\xe8\x65\x6c\x6c\xfa\xfa\x66\x4e\x31\x4a\xfd\x1b\x7d\x83\xdb\x5b\x75\x8d\xad\x6e\xbb\x6c\x60\x6a\xab\xa9\x0f\x77\x1b\xf7\x11\x38\x52\x58\x21\xb0\x3b\xa2\x60\x38\xad\x8b\x45\x30\xf7\x03\x03\x3b\x8b\x2b\x7f\xda\xfb\xfa\xda\x74\x56\xc7\xb4\x6e\x95\x1d\x45\xe1\xc0\x9d\xcf\xa2\x08\xc6\x98\xf8\xab\x7a\x01\x04\xb3\xb0\xbe\x49\x6a\x29\xc6\x02\x25\x74\x3c\x3e\x9b\xcf\x16\x7d\x4b\x95\x78\xab\xa7\xc2\x5f\xcf\x66\x28\x69\xed\xaa\xc3\xe0\xd3\xdf\xdd\x9f\xcd\xd0\xe1\xa0\x58\x7a\xcd\xed\x19\xef\xd9\xe0\x8c\xa1\x75\xed\xb3\x33\x00\x2c\xdc\xc4\x33\x48\x2e\x38\x2e\x29\xcd\x2b\x83\x02\xe3\xa0\xcf\x12\x25\x16\xf9\x5a\x62\x84\x3f\xfc\x93\x3a\x63\xa3\x30\x9e\xe6\xec\xca\xc4\x4e\x7a\xcc\xae\x1a\x8d\x30\xfb\xaf\xd7\x08\xb7\x74\x9f\xc2\x86\xf0\x6a\xc4\xdf\x91\xf5\x1f\x51\x39\xff\x59\x05\xaf\xbc\x4b\xc1\x2b\xfb\x14\xbc\xe0\x44\xbe\xa3\x22\x85\xca\x7d\xd1\xb3\xa5\xf8\x75\x5e\xef\x33\x75\xce\xe2\x4f\xb6\xfc\x00\xb7\x44\x1d\xf0\xd0\xe1\x0e\xf5\xa0\x81\xb6\x21\x45\x81\x90\x02\xa8\x68\xf7\x5d\xd5\x03\x37\x8a\xbb\x1a\x72\xcf\x7a\xbf\xb4\xd7\x00\x81\xe2\x5f\x04\x26\x1d\xda\xc4\xad\xa5\x67\xee\xcb\xe2\x6b\x9c\x8f\xeb\xe7\x8d\xd1\xa5\x73\x6a\x4a\x33\xc9\xae\xe8\x13\x8d\x26\x3e\x00\x45\xb8\x4f\xcc\x83\x71\xef\xd6\x19\x46\x7c\xc1\xdc\xc9\xe9\x40\xd5\x0f\x87\x37\x54\x25\x7f\xc3\xe2\xf2\xb3\x94\xd2\x07\x9b\xf7\x0e\xcd\x2d\xf5\xcc\x4d\x53\x99\x0e\x0c\x65\x6d\x34\xb1\xb4\x48\x9a\x83\x4f\x65\x49\x4a\x0c\x85\x3c\x86\xdf\x87\x06\x20\xa3\x61\xe1\x1a\x2d\x12\xd7\x2a\xe1\x1f\x58\x49\xe3\x00\x12\xd4\xf2\xfa\x25\xf6\xd4\x80\x0e\x1a\x74\xe2\xc4\x15\x34\xe0\x10\x33\x9a\x9f\x11\xf7\x56\x5b\xd8\x37\xfc\x3a\x2d\xc8\x1f\x80\x2d\xe5\xa3\x88\x72\xc0\xe2\x0a\x52\xc6\x4d\xa9\x56\x23\x1c\x0e\x8e\x0d\xa3\xeb\x8f\x8e\x5f\x93\xea\xbe\x19\xa8\xbe\xcf\x43\x85\x32\x6d\x22\x01\xba\x12\x06\x02\x40\x08\xa0\x1c\x22\xa6\x6e\x1c\xeb\xfa\xde\xbb\xfd\xfd\xd9\xec\xc2\x08\xa1\x3a\x8b\x56\xed\x7b\x95\x1e\x5f\x4b\x3a\xe6\x4c\x5e\xd7\x52\x63\x98\x3f\x6a\x5a\x15\x8b\x50\x53\x4d\x44\x38\x7e\x46\x75\xad\x96\x58\xb3\x62\x24\xdf\x67\x9b\xae\x96\xdf\x04\x80\xf7\x4a\x7f\x52\xe6\x71\xf3\x59\xf7\xee\x45\xfa\xfa\x80\xa1\x08\x14\x02\x51\xa4\x35\x18\x86\xe2\x2b\x4e\xed\x37\x19\x03\xb5\xf6\x4a\xf8\x5d\xc6\x80\xa6\xdf\x0c\xf8\xee\x66\x84\x99\x7b\x54\x15\xb2\xcf\x53\xbc\x3b\x65\x10\x1e\x3a\x37\xf1\x13\xa3\xcb\x70\x9a\xb5\x40\xbf\x81\xe9\x71\xcd\x32\x38\x6c\x18\x09\xce\x83\x43\xf2\xc0\x09\xa3\x28\x8e\x4d\x51\x75\xed\x20\xec\x55\x79\xaf\xf4\x0e\xf1\xb4\xa1\xd8\xbd\x7b\xbe\x2f\x24\xdb\x15\xd4\x23\xca\x14\x21\xdd\x8e\xf6\x77\xdd\x4e\x36\x96\xb3\x41\xe1\x8d\xfe\xbb\xb3\x47\x4b\xf2\x9a\xba\x81\xa1\x06\xd5\xe1\x85\x0e\xdb\x99\x7a\x20\xa0\x8a\xb2\x06\x39\xd7\x16\x0b\xd4\xfe\x36\xf9\x06\x16\x16\x72\x7a\x91\xe6\x75\x3d\x64\x75\xcd\xf4\xcf\x19\xa0\x3b\x5d\x6a\xdc\xa7\x06\x40\xcd\xbe\xb8\x72\x2f\x00\xd0\xcc\xda\x7b\x3d\x6a\x2a\x75\x9f\xe0\x34\x4c\x86\x0f\x40\xf3\x53\xd7\x0e\xd8\xa1\x6f\x6a\xf0\x9e\x50\x7d\xc4\x3d\xe2\xfb\x52\x46\x51\x03\xd0\xeb\x54\x33\xda\x6b\x64\x68\xca\x29\x48\xb5\x6c\xa0\x4f\x56\xce\x4e\x23\x23\x05\x18\x8d\x2e\xf4\x9f\xa5\xfe\xd3\x64\x4c\x20\x61\x90\x92\xdb\x92\xe7\x34\xc9\x96\x59\xf3\x0e\x6b\x23\x6b\x3f\xf1\xfe\x6a\xe2\x3d\x7d\xb5\x3a\x58\xe0\x65\xf3\x7d\xb5\x9c\xad\x7c\x63\xd5\xe5\x7d\x57\xca\xec\x30\x90\xe2\xe6\x56\xcb\xc4\x1f\xb8\xc1\xbc\xc4\x36\xde\x2e\x4e\x9b\x1f\xea\x45\xa0\xf7\x5d\x83\x6d\x7e\xb3\x8c\x83\xe5\xbf\x50\x07\xbb\xb1\x11\x6b\x97\x8a\xf0\xda\xbd\xcb\xeb\x9a\x4e\xd3\x3c\xd7\x38\xc7\x6b\xd0\x50\x9a\xd3\xec\x41\x51\x40\x6a\x05\x47\xbc\x9f\x07\xef\x75\x94\x76\xc5\xa2\x34\x8b\x6e\xe1\x65\xda\x43\xbc\x51\xbd\x31\x14\x2d\xfa\xa6\xc1\x8f\x05\x13\x44\xcd\x4d\x6e\xe9\xf6\x82\x0a\x6f\xb5\x2b\x46\xb4\x9d\xff\x88\xe6\x38\x90\xe4\xda\x18\xb5\xa8\x8b\x5a\xdb\x4f\x7f\x69\x0b\xd9\xd6\xbf\x30\x32\x9c\xb0\xa2\x76\x06\xa9\xa9\x87\x09\xbb\x1b\x80\xe6\x80\x0e\x20\x04\xe2\x7e\xea\x10\x30\xbe\xcf\x79\xdc\x5e\xf5\x47\x2f\xb9\x5a\xf9\x8e\x5e\x79\x29\xb6\xbe\x35\xc8\x9f\x49\x77\x06\x7d\x08\xc3\x01\x89\xe9\x87\x1b\x0e\x09\x0f\xee\x41\x1f\xf6\xa9\x4f\x2f\x12\x71\x40\x92\x94\xac\x61\x1a\xf5\xac\x7c\x92\x33\xc9\x7b\xc2\xb2\xf4\xf7\x00\xe4\x02\x8f\x60\x84\xda\x69\x49\x5a\xe4\x43\x1d\x77\x5b\x5e\x3e\x28\x33\x5a\x49\x2d\xe0\xa5\xac\x6c\x9c\x4d\x1e\x9b\x71\xcf\xd9\x15\x96\xa8\xe7\xbe\xe7\xf3\x2e\x7b\x6c\x19\x0d\x87\xd8\x7b\x7b\xa3\x72\xd8\x8b\x9b\x4f\x5d\x53\xe5\xec\xea\xd3\x37\x54\x77\xdd\xda\x78\xdb\x4a\x6f\xd9\xf6\x90\xc7\x68\xe1\x14\x9c\xde\x10\x27\xbf\x35\xe7\xf2\x3f\xb1\x27\x02\x98\xe9\xcf\xbf\xe9\x39\x91\xb6\xec\xd6\x15\x4f\x4c\xdb\x0d\xc3\xe1\x45\x12\x3d\x5a\xb6\xd4\xf7\x2e\xed\x66\x7e\xee\x12\x73\x8c\x48\xb3\x2f\x86\x6d\x1c\x6e\x95\x08\x44\xd6\xdb\x17\x9d\x4c\x3a\x59\x65\x73\x9b\x63\xd8\x03\xdd\xed\x32\x74\x8a\x79\xea\x6f\x99\x60\x34\x5a\x57\x92\xad\xab\x1e\x7b\xf7\xe3\x91\x41\x4b\xb7\x3b\x74\xf0\x33\x19\x95\xc1\x31\xea\x6e\x0c\x39\x15\x27\x72\x37\xb7\x52\xda\x3c\x47\xf9\x14\x11\x45\x25\x78\xf0\x05\xa1\x27\xbe\xa1\xb1\xb4\xda\x66\x30\xa2\x56\x72\x70\x2c\x34\x07\x03\x3c\x0d\xb2\x3e\xbe\xfd\x6b\x13\xfc\xfa\xb0\xc7\xd9\x76\x16\x42\xd3\x4d\x50\x4f\x58\x3d\x3b\xe8\x28\x3a\xfc\x19\xc8\xb3\xda\xaf\x9d\x03\x3a\x89\xd5\x3c\x03\xa6\x8b\x70\xce\x23\x75\xcd\x0d\x80\x69\x83\xe7\xed\xdf\x89\x31\xe3\xc6\xe3\x7f\x31\x23\x24\xa6\x44\x08\x00\xfc\xd3\x68\x3e\x48\x5b\xcb\x3f\x60\xb1\xce\xa8\xd8\x0e\xed\xff\x5e\x91\x26\xa5\x84\x90\x55\x8a\x3f\xf1\xb3\xd2\x4e\x56\xaa\x38\x26\x08\x67\xea\xc7\x41\xd5\x16\xf5\x50\x2d\x6f\x30\xbc\xf6\xb6\x6d\x0d\xce\x9c\xe6\xbf\x9a\x0e\xe1\xcc\x78\xb0\x3c\x66\x57\xb0\x62\xb5\x8c\x0f\x0d\x29\xbc\x86\xec\xc7\x73\xd3\x14\xf3\x4d\x93\x0a\x8d\xe9\xc3\x36\xb6\x18\x02\x30\x03\x4d\x18\x9e\xb6\xa9\x7d\x83\xec\x34\x1a\x41\xac\x0e\x5c\x99\xa8\x11\x20\xc8\x2b\x21\x24\x05\x62\xd7\x28\x98\xf6\xb1\x36\xc1\x9e\xfb\xe0\xdc\x8d\x78\x78\xd9\x8e\x0d\xaa\xbd\x43\x07\x4e\x73\x6b\x3d\x96\x46\x23\x2d\xbd\xd9\xe8\xf2\x16\x30\xd9\xa8\x68\x62\x2b\x44\x5e\xe2\xd1\x08\x21\x7c\xc5\x59\x1e\xf3\x31\x31\x1e\xf6\x05\xce\xfa\x2a\xd3\x40\x67\xba\xba\x0c\x19\x26\x12\x82\x68\xe5\xcf\x53\xf1\x01\x90\xe2\x4b\x3c\xd3\xe2\x34\x80\x37\xe1\x78\x47\xc6\x59\x4f\xa4\xa1\x13\x3a\x65\x39\x21\xbb\x03\x72\x44\x0d\xda\xb0\x6e\xe4\xa1\x82\xac\xd5\xf2\x01\xc4\x2e\x40\xf9\xe2\x63\xf2\xc4\x22\xf8\x17\x1a\xdd\xa3\x98\x4a\x8e\xb4\x92\xa5\x52\xa2\x3a\x5b\xc7\x26\x34\x05\xe9\x76\x40\x0f\x81\xd5\x22\x8e\xec\xed\xed\x20\xf4\x5f\xe8\xc1\x3c\x07\x9b\xde\x7d\xec\xbf\x01\x53\xdf\x7b\xff\x11\xef\x04\xad\x73\x76\x55\xef\xd0\x17\xf7\x98\x96\xc8\xf5\xbc\xbd\x48\xb7\x54\x43\x55\xa8\x5d\x6e\x5d\x07\xbe\xea\x4e\x6b\x6e\x52\x7e\xb6\x37\xd7\xc3\xdc\x36\x2c\xd5\x9d\xae\x60\xed\x20\xcc\xc7\x24\xd7\x90\xdb\x70\x87\x7b\xaa\xd6\x0a\x96\x43\x22\x4e\x11\x04\xee\xf5\x76\x8d\xf5\xb9\x3d\xc4\x12\x57\x38\xc3\x29\x2e\x10\xc2\x1b\x35\x7e\x9a\x60\xe5\x34\x4e\xcd\x4c\x15\xf8\xda\xa6\x16\x21\xb2\x30\x3a\x5d\xbb\x7b\xd7\x28\xda\xb8\xdf\xa7\x88\xad\xe3\x2d\x8f\xd7\x88\x90\x2d\x8f\x37\x08\xad\xa7\x3b\xbe\x8b\x11\xde\x98\xbf\xc5\x64\xe2\xf4\x94\x6a\x16\x87\x64\xb3\x9c\xad\xfe\x0f\x6d\x6f\xda\xdd\xc6\x8d\x85\x09\x7f\xe7\xaf\x10\xeb\x64\x6a\x0a\x21\x48\x93\x4e\x67\xa6\xa7\x24\x88\xc7\xf1\xde\xf1\xd6\x91\x13\x27\xa1\xd9\x3e\x25\x12\x14\x2b\x2e\xa2\xd8\x28\x50\xb2\x22\xf2\xcf\xbc\xbf\xf4\x3d\xb8\x17\x5b\x2d\x94\xd3\x3d\x67\xf2\x21\xa6\x00\x14\xf6\xe5\xe2\xe2\xde\xe7\x31\xee\x08\x2b\xc4\x01\x86\xe4\xf6\x57\x36\x18\xb8\x87\xe9\x25\x1b\xd3\x2d\x1b\xd3\x0d\x4c\x00\x7a\x0d\xdf\xd2\x2b\xff\x54\xbd\xb1\x0f\x01\xd7\xee\xa9\x7a\x79\x76\x15\xc7\x9b\xf0\x65\x7a\x49\x18\xbb\xae\x07\x9c\x92\xc1\x60\xe9\x86\xfb\x96\x41\x13\xe8\x25\xb6\x81\x7e\xf2\x05\x38\xcb\x6e\xbd\x0e\x57\xce\x61\x23\x1d\x13\x7a\x19\x46\xad\xc3\x28\x72\xba\x3d\xfb\x14\xc7\xb7\x61\x99\x2e\xa3\xed\x70\x42\x18\xbb\x0c\xe3\x2e\xc3\x38\x5d\xb5\x6d\x6f\x35\x5b\x05\xf0\xaa\xb7\x0e\x12\xd1\x67\x43\xa8\xee\x13\x5c\x19\x18\xbb\xc4\x25\x7b\xc3\x60\x48\x97\x84\x3e\x65\x30\xa8\xae\x6e\xd0\x3a\x97\x41\xea\x91\xe1\xfc\xe0\xee\xf7\x3a\xc3\xfd\x7e\xcb\x93\x1b\xfa\x94\x4c\x93\x17\xd2\xcc\x88\x15\xbd\xa1\x4f\xa9\xa3\xa7\xa2\xfd\x31\xb1\xce\x7f\xf7\x3f\x5d\x77\x6b\x7f\x9a\x66\x6b\xf7\x27\xee\x08\x6e\x7d\xda\x12\x2c\xbc\x0e\xce\x68\xba\xec\xb3\x77\x4b\xdb\x55\x4f\x4e\x68\xf7\xe7\x60\x3e\x53\x97\x90\x69\x53\xa6\x26\x07\xda\xcc\xbd\xcd\x00\xba\xd8\xd4\x54\x5a\xd3\x1f\xbd\x2c\xfb\xbb\x22\xf6\x37\x49\x51\x81\x07\x50\x1e\x99\xca\xfa\x8c\x7b\xe5\x1f\xbc\x72\xdb\x8f\x3e\x71\x12\x68\x58\x74\x5a\x3a\xc6\xcb\x58\xeb\xc1\xa4\xa6\xfa\x1d\x99\x8d\xf0\xa9\x89\x65\x66\xc7\xec\xb6\x1e\x80\x2f\xda\x5c\x5d\x1d\x0d\xda\xef\x8f\x54\xee\x42\x49\xdd\x9f\x7a\xc3\x7e\x6c\xa6\x7f\x62\x6f\xf3\x76\x3d\x4c\xc1\xa4\x47\xff\x4a\x7d\x20\xa1\x63\x72\xff\x43\x91\x1b\x88\x66\x9b\xb0\xcc\x9a\x3d\x1c\x6f\x99\x35\x5c\x96\x0d\x1b\xb5\xe3\x0f\x4b\xe3\x43\xed\x29\x89\xd0\x0b\x7c\xf9\xba\x40\xcc\x8e\x3b\x6b\xf3\x90\x3e\xe2\xb4\x71\xd0\xa4\x9f\xf9\x81\xbe\x0e\xdf\xa1\xee\x8c\xc4\x76\xec\x7e\x65\x80\xfb\xea\xac\x05\xf3\x03\x45\xc8\xda\xa6\xd1\x27\x67\x20\x21\x7a\x74\x07\x78\x64\x71\xdf\xf5\x59\x3d\x1f\x2d\xd2\xd7\x60\x05\x4d\x82\x5a\x98\x97\x06\xeb\x20\x15\xed\x94\x00\x57\x61\xe5\x93\xb0\xf2\x73\xf0\xc3\x75\x7f\xe9\x5a\xa1\xea\x4e\x5a\xfc\x58\x61\x11\x8d\xad\x52\x4f\xa2\x3d\xb2\x30\xb8\xc6\xce\xd4\xd1\xdf\x28\x97\x9c\x6f\x1f\x97\xdb\x5a\xcf\x79\xc6\xce\xd9\x9c\xde\x5b\x4d\x3e\x53\x0e\x55\x76\x63\x54\x82\xae\x82\x0e\x5e\xb9\x1d\x83\xd5\xe9\xb5\x78\x0d\x6a\xfd\xaa\x17\x5d\xf3\x19\xb0\xbb\x9a\x8e\x58\xb4\x5e\x43\x6e\xd0\x1d\xc3\xc2\xf9\xdc\x82\x2d\xfa\xe1\xf5\x16\xa0\xd6\xfe\xa5\xa1\x69\x06\xff\x5c\xc6\x49\x13\x6b\xba\x5d\xa4\xb4\x63\x27\x58\x1d\x7c\xda\x70\x4d\x28\x2a\x02\x9a\x89\x38\xde\xa2\x0d\x17\x68\x50\xcf\xd8\x98\x38\x0e\x00\xfc\x31\x9c\x1c\x0e\xf4\x49\x6d\xa6\x23\x55\x62\x6b\x9a\x5f\x99\x3e\x36\x33\xc1\xf1\x6d\x90\x03\x55\x65\x47\xfa\xeb\xe3\xe9\xa1\x7f\x8e\xad\xa4\x80\x53\x2f\xf8\xde\x60\xc8\xfa\x14\x8b\x75\x3d\x7e\xb1\x3e\x20\x8b\xeb\xa5\xa2\x9f\x94\xf1\xd9\x72\x1c\xb8\xe0\xb8\xe4\x68\xa9\xc7\x01\xad\xea\x8d\xea\xc4\x52\xa1\x99\x71\x17\xe6\x9e\x7a\xcf\x32\xcd\xec\x18\x47\x6f\x61\x8e\xde\xc2\xf9\x2a\x51\x67\xbb\x69\x92\xb3\x31\x2d\xd9\xc4\x31\x51\x91\x54\x9d\x15\xd3\x92\x25\x39\x53\xc3\x1d\x19\x4c\xd2\xa4\xd2\x1b\xa8\x55\x02\x03\x18\x5e\x11\xc7\x3a\x9b\xef\xe6\xe7\x0a\x31\x4f\x92\x92\x15\xc3\x9d\xbe\xd9\xa8\x73\x1d\x9b\x64\xce\x41\xd0\x59\x26\xa0\xdd\x07\x94\xff\x70\x4e\x77\x90\x8b\x64\x0c\x8c\x6b\x2a\x2e\x01\x1f\x71\x8a\x95\x48\xed\xc7\x90\x93\x24\xd4\x3a\xa6\x21\x00\x5d\x4e\xd0\x83\x17\x6a\x31\x7c\x38\x67\x3a\xd3\xe1\x77\x73\xfc\x7b\x32\x0f\x32\x3c\x25\xba\xc4\x87\x83\xa4\x1a\xb2\xef\xc8\xdc\x13\x6e\x69\x09\xde\xfa\xc6\xc9\x38\xce\x19\x34\x00\xf3\x3d\xf3\xcd\xb5\x0d\x85\x22\x06\x7f\x9b\xc7\x71\x5f\xff\xf8\xbe\x5d\x46\x02\x7d\xad\x9b\xe6\xda\x6e\xd9\x0a\x8d\x57\x26\xe8\xcc\xcd\x53\x65\x9a\x03\x4e\x5c\x49\xad\xbe\x3a\xcd\xa8\xf7\x14\x4e\x77\xd4\x7a\x10\xa7\xa1\xa1\xc9\x53\x8f\x78\x62\xd4\xee\xa0\x24\xaa\xe1\x42\xb0\xbb\x03\xe5\x2d\x77\x74\x83\x5f\x03\x1c\x4e\xa4\xbe\xd7\xd6\xf1\x29\x60\xff\x6a\x22\x4d\xa8\x39\xbb\x0b\x29\x0d\x1b\x28\xb8\x0d\xf0\x03\x2c\xec\xdd\x11\xe8\x02\xd2\x6b\x16\xdf\xc5\xa1\xa5\xab\xf1\x54\x35\xf8\xc0\x66\x6a\x1e\x58\x12\x5d\x40\x2d\xa0\x2e\x01\xe6\x16\x62\xa2\xe8\xf3\xff\x83\x61\xac\xaf\xc7\xbc\xe7\x5f\x8c\x37\x48\x2b\xca\x03\xa9\xd4\xc1\x7e\x42\xaf\xd6\x1a\x93\xf0\x26\xfb\xa2\x2f\xe4\x81\x9a\x85\xd6\x9b\xfc\x66\x07\x92\x48\xd5\xe0\x0a\x7c\xa4\xfc\xf6\x61\x74\x4e\xdb\xec\x8a\xff\x6a\x95\x65\x89\x7b\xbc\xb7\x3f\xcc\xf3\xfd\x7e\xef\x62\x2e\xcb\xe5\x2d\x09\x38\xe6\x03\x26\xc2\xee\xdc\x7f\xfb\x6f\x73\xaf\xe1\xf6\x7c\x56\x35\xb8\x4d\x35\xba\xc9\x97\x57\x5c\x79\x7c\x73\x64\x23\x71\xe1\x1e\x9b\x2b\x27\x61\xfa\x59\x3e\x1f\x65\x97\xe5\x35\xb7\x9a\x8b\x5f\x44\x2d\x92\xf4\x10\x03\x96\x95\xd4\xe2\x11\x0c\x58\x09\xf7\x6e\xdd\xb1\x51\xc0\x9e\x26\x7b\x08\xd7\x11\x15\xe5\x22\x2b\x22\x4b\xbe\xfc\x39\x4f\xf0\xdd\xcf\x84\x33\x26\xa6\xd9\x80\xed\x42\x97\xde\x34\x1b\x36\x20\x4f\x8c\x7a\x3f\xd2\x3d\x16\x81\x5d\x76\x84\x7d\x08\x25\x9a\x47\x3c\xde\x61\x28\x71\xcc\x20\x33\x1b\x00\xd4\xfa\x76\x90\x04\x19\x4d\xc7\xa9\x1e\x25\xd2\xb3\x48\xc7\xe0\x49\xd4\x48\xf1\x08\x52\x18\xa0\x5c\xb6\xa3\x12\xdd\x59\x07\x6c\x67\x7d\x8c\x4c\x17\x65\x41\x17\x65\x34\x20\xca\x79\x1c\x42\xe6\x80\xf7\x15\x73\x8a\x1b\xe3\x7e\x2e\x98\x71\xea\x05\x83\x5a\x34\x95\xb5\x8d\x97\x44\x0c\x99\xae\x05\xcd\x87\xec\x6d\x88\x4c\xe0\xba\x54\xee\xf7\x7d\xd9\x26\xbb\x43\xd8\xdb\xa3\x8e\x5b\x03\x56\x9a\x42\x07\x08\xdf\x69\x98\xe2\xfe\x93\x7e\x0d\x3d\xdd\xc5\x30\xf3\x9e\xc9\xf9\x10\x9c\xbb\x82\xed\xea\x7d\x0d\xac\xc4\x4a\x57\x30\x67\x9a\x4c\x8d\x84\xc2\x04\x17\x74\x83\xff\x00\xc9\x62\x5e\x67\xc1\xf9\x29\xc8\x8e\x96\xe4\xce\xe3\x18\x26\x8a\xba\x87\x5e\x40\x48\xc9\xa9\xa2\x59\x83\xc8\x91\x96\x1e\x32\x7d\x8a\x23\xcf\x8c\xa7\xb2\xf5\x58\x36\x13\xc2\xd6\xa5\xaa\x15\x5f\x85\x70\x34\x3b\x94\x7f\x25\xa2\xcc\xfe\x8f\x87\x4e\x71\xcf\xd8\xef\x65\x22\x49\x1c\xab\x38\x36\xb1\x67\xbb\x99\xd2\x87\x23\x02\xd2\x26\x9c\xf1\x2c\xd1\x39\x0c\x87\x6a\x4e\x86\x89\xcb\x63\x3a\x4e\x27\x84\x0a\xbd\x9d\xa5\x9c\x41\x2a\x9d\xcf\xd9\x2e\x70\x43\x0f\xb2\x1c\xd8\x2c\xf5\x51\x04\xa5\xb2\xdd\x6c\x30\xd0\x79\xba\x2c\x75\x6e\x3a\xcf\x38\x06\x65\xaf\x2a\xe3\x98\x9f\x4b\x10\xf9\xa6\x59\xc2\x87\x13\x92\x66\xe0\x42\x7a\x10\xcc\x40\xb9\xd7\xf9\x33\x81\xc1\x01\xc0\x7f\x84\x5b\x35\xc8\xa0\x59\x00\x66\x3c\xe8\xb3\x76\x76\x6a\x67\x89\xa1\x60\x5f\xb0\x2a\x29\x68\x96\x21\xb7\x43\xc8\x88\xd5\x67\xbf\x96\x71\x9c\x2c\x10\x3a\x1a\x92\xfd\x5a\x12\x42\x17\x01\x03\x63\x0d\x6b\x68\xdc\x53\xc0\x4a\x85\xf5\x0a\xdd\xda\x1b\xc7\x83\x64\x35\xd4\x80\x6f\x81\x40\xe1\x38\x31\xe8\x67\xdd\x8a\x41\x6d\x57\xaa\xcd\x6d\x0b\xdf\x80\xb0\x0d\xb9\xf3\x5c\x1f\x08\x73\xb6\x87\xa4\x74\xaa\xc9\x10\x64\x29\xfe\x2d\x0c\xd8\xe8\xcb\x4f\xbc\x60\x02\x70\xdc\xf2\x51\xb9\x53\x55\xbe\x44\xc8\xa3\x3c\xe0\xaa\xeb\x82\xfd\x03\xbe\x05\x39\xe8\xdc\x2e\xc9\x99\x13\xd1\x5f\xab\x44\x58\xcc\x7f\xda\x1f\x53\x8b\x06\x94\xb3\xb7\x79\x22\xa8\xc4\x07\x03\xc4\xcb\x14\x96\xec\x2c\x5f\x25\xf9\x79\xd9\xce\xc2\xa5\xa0\x08\x96\x57\xa7\x62\xef\x8f\xe9\x84\xf4\x3c\x66\x76\x80\xab\x03\xc9\x73\x72\x7a\x6a\x57\xe3\x1b\xdd\xa4\x0c\xd6\xa3\x24\x74\xc7\x5e\x8a\x24\xd3\x73\x67\x17\xc7\x86\xab\x61\x6c\xf9\x31\xfb\xbb\xfd\xbe\x9f\x54\xa3\xc5\xfa\x1c\x95\xbf\xa3\xc5\x7a\xbf\xaf\x40\x76\x77\x01\x71\x5c\x41\x57\x06\x3c\x10\x55\x2f\x67\x8f\xf2\x24\x63\xc5\x48\x95\x96\x06\xda\xf5\xe9\x1b\xd5\x56\xd6\xe7\x43\x38\xa3\xac\xc6\xfe\xe1\xb7\xbe\x6f\x3b\x5c\x4e\xe9\x8e\x19\xf4\xab\x10\x3b\x5c\xd4\xdc\x6e\x97\xe6\x79\x08\xcf\x48\xaa\xe8\xce\xef\x35\xac\x3f\xa6\xe5\xb9\x05\xa2\x30\x00\x0f\xc3\x2a\x2d\xcf\xc0\x25\xd6\x04\x0c\xaa\x34\xc9\x10\x00\x00\xfc\x59\x0f\xb8\x8c\x1e\x43\x45\x57\x16\xb0\xc8\x92\xe1\x33\x95\xe9\xf0\x25\x93\xf0\xef\x96\x15\xc9\x9a\xd0\x0d\xcb\xe8\x35\x2b\x92\x25\xa1\x57\x0c\xec\xf7\xc4\xf9\x75\x30\xba\x92\x2e\xe9\x95\x1e\x3b\x90\xb6\x4f\xe1\x74\x5a\x4c\x97\x8c\xad\xf7\xfb\x25\x63\x3b\xbd\x8f\xae\xe9\x84\xa4\xcb\xe1\xfa\x8c\x4d\xfc\x25\xe7\x96\x89\xb3\xed\x7e\x2f\x86\xdb\x33\x76\x3d\x14\xd3\x75\xba\xa4\x97\x4c\x0c\x93\x5b\xc6\xd6\xd3\x6d\x7a\x4d\x4e\x01\xba\x27\x44\xed\xb9\x45\xa0\x9e\xdb\x5e\x58\xfe\x2d\x85\x2f\x36\xe9\x15\xbd\x3c\x1b\x4e\xa6\xc3\x49\x7a\x79\x3e\x01\xc2\x4c\x68\xb0\x51\xd1\x2e\x78\x5e\x24\xab\x07\x0f\x09\xbd\x61\xeb\xc1\x27\xf3\x1c\x71\xc3\xd6\x6e\xaa\x3d\x65\xe3\xd3\xa7\x67\x9f\x4e\x07\x83\xa7\xe4\x06\x6b\x7e\x43\x27\x98\xc9\x17\x56\x24\x37\xa4\xf7\xe5\x5c\x4c\x93\x25\xbb\xa1\xd7\xec\x0b\x4d\xae\x58\xa6\x2f\x35\xd7\x03\x36\xe1\xdf\xe9\x1e\xfd\x44\xd2\x64\xcd\x6e\xe8\x96\x7d\x81\x8e\x5b\x0d\xd9\xa7\x70\xe2\xfc\xa1\x6a\x58\x36\xbc\x25\xc6\x36\xc1\x0e\x7d\x8c\x7d\xad\x61\xec\x52\x91\xbb\x4b\x24\x8d\xde\x4a\x1e\x35\x45\xf0\xbf\xfd\x9f\xd3\xc1\x40\x91\x4b\x55\x43\x54\x6e\xc0\xe2\xeb\x7c\xdf\x94\x4b\x9e\x20\x58\x4e\x23\xb1\xce\xfa\x12\xf0\xff\xff\x93\x5c\x0e\x35\x28\xc6\x4b\x65\x5f\x52\x2f\x55\x0d\xf2\xf1\xc1\xf7\x63\x07\x19\x07\x40\xe3\xed\xb6\xea\x4b\xe2\xbb\x20\x33\xc0\x51\x0f\xf8\x9c\x5f\x76\x77\xa3\xbb\x27\x34\x7b\xd1\x45\x18\x9b\x8a\x10\x2b\xc8\xfd\x17\x11\x2a\x5d\xa7\x52\x7d\x3b\xe9\xd5\x1a\x24\x89\x93\xb1\x8e\x39\xba\xe7\xcc\x42\x3a\x5a\x90\xa0\x07\x13\xd7\xd8\xfc\xfc\x61\xd0\x58\x7f\xa7\xc9\xe1\x44\x9c\x8c\x61\x9a\xbd\x52\xf4\x99\xa2\x7f\x1a\x82\xe4\x1f\x14\x1b\xfb\xfd\xe1\x85\xb9\xa8\xc1\xbb\x30\xbb\x5b\x6c\x52\x0e\x58\x70\x56\xc5\xa9\xf7\x1d\x7d\xdf\xc4\x3e\x4c\xf1\xcd\x10\x8f\x15\x1a\x60\xe2\xe9\x74\x01\x39\x15\x42\xc8\xa9\x5b\x7d\xe0\xe9\x28\xc4\xd7\x7b\x7b\xf9\x47\x85\x31\x75\x32\xaa\x17\xa0\xde\x96\x9d\x71\x8f\x33\xd0\xe9\x8f\xdb\x76\x0a\xae\xc4\xd7\x78\xc7\x82\xaa\xba\xcb\x8e\xe1\x10\xb6\xd7\x93\xfa\x9f\xef\x4a\x53\x16\x1a\xb2\xe8\xbd\x6c\x99\x0e\x06\x3f\xa8\x03\xfd\x53\x4d\xff\x54\xa3\x72\x5b\x59\x22\x7c\xe8\x18\x92\x5a\x1c\xc0\xf2\x46\x54\xcf\x65\xb9\xdb\xb2\x3f\x15\xbb\x2b\xb7\x55\x3a\x33\x51\x73\xba\xe4\x45\x76\xcb\x97\xba\xca\x97\xd9\xe2\x73\x95\xce\xe6\xc1\x32\xfd\xb9\x86\x61\xdd\xc8\x0d\x94\x2d\xe0\xf3\x9c\xb4\x3d\x02\xf8\xa8\x99\x33\xd5\xd2\xc6\xb2\x44\x68\xb3\x26\x77\xdb\x4c\xce\x47\x8b\xac\x28\x92\x3a\xdc\xb2\x85\x9a\x2c\x9d\xb9\x5f\x8d\xdf\x55\x87\xcf\xc4\x1c\xdf\xdc\xbb\xc7\x07\x75\x1f\xcd\x58\x1c\xa1\xb3\x63\x1f\xd9\xb2\xc8\xb1\x04\xb3\xee\x0c\x07\x83\xa0\x15\x34\x07\xee\xb4\xc3\xcd\x3a\x2f\x78\xe2\x1b\x4c\x0e\x24\x51\xe4\xb0\xca\x45\x56\x14\xb7\x77\x66\x8a\xb7\x98\xed\x82\x26\x43\x0f\x41\x5b\x75\x2f\x19\x5b\x1d\xf8\xea\xb4\xd6\xf3\x7e\xfb\x83\x9e\xa1\x1d\x24\x79\x1f\x54\xa2\xfb\xba\xa5\xdc\x0c\xd3\x08\xa6\x93\x50\x61\x98\xdb\x96\x4f\x0c\xe5\x89\x18\x6d\x76\x95\xc2\xb5\x13\xc7\xdf\x24\x02\xbc\x3d\x4c\x2a\xb3\x27\xdc\x97\xef\xbf\xff\x42\xd9\xbf\xfc\x85\x34\xcf\x4d\x1a\xec\xc7\x80\xc7\xb3\x3e\x59\x6b\x16\x1f\xa7\xdd\x53\xd4\x40\x54\xf4\x55\xe0\x97\xf4\xb8\xc8\xb7\x5b\xbe\x8c\x63\xe5\x5d\x92\x70\xdb\x86\x6d\x0a\x2c\x52\xea\x58\xb3\xac\x3b\xe5\x50\x75\x82\xcc\x52\x65\xf6\xa2\x67\x7a\x2b\x92\x75\x22\x18\x40\x8c\x35\x50\x16\xe6\xbe\x89\xf1\x9b\x4c\x5e\xe5\xe2\x07\xc4\x90\x1a\x36\x6b\xd0\xf5\x05\xba\x14\x02\xfa\x2e\xd6\xb2\x9e\x77\xb3\xbd\x68\x4e\xa3\xe5\x1d\x3e\xaa\xed\x51\x71\xfc\x07\x86\xfa\xd1\x67\x7c\x14\xec\xb7\x68\xe5\xe4\xb6\x55\x04\xbc\x83\x87\x37\xbb\x93\x81\xe3\xb9\xdf\xc7\x60\xf7\x0f\xfe\x46\xf1\xb3\x65\x64\x53\x4f\x63\xa4\xcf\x73\x67\xa3\x42\xf6\x7b\xd9\xd0\x55\xe9\x31\xeb\xc4\xc1\xb4\x4d\x62\xbc\x36\x87\x05\xbf\x39\xf9\x11\x2c\x97\xc2\xd0\x3b\x7d\x25\x09\x6a\x6f\x5e\x6a\xd3\x5a\x7d\x0e\xb4\xd6\xe8\x90\xf8\xf5\x9e\x69\xd8\xe3\x8d\x45\x15\xc7\xbf\x63\xe7\x5e\x66\xd2\xea\x19\x5f\xe9\x90\x76\xd3\xfa\xdd\x6d\x83\xce\xcc\x96\x7f\xec\x2a\x1c\xe6\xf7\x25\xdb\xa8\x44\xf9\x0c\xfc\xaf\x9a\x75\x02\xca\xc5\xdf\x51\x55\x57\x6f\x58\xf5\x62\x2d\xc7\x5a\xfd\x4c\x2f\x60\x42\xe7\x53\x22\xbb\xe7\xba\x6c\x71\x05\x0d\x1a\x79\x0f\x56\x2a\x51\x64\xa0\x5a\x98\xcb\x30\xe5\xb2\x2f\x17\xee\x78\x0c\x71\x6c\xbe\x9e\xef\x70\xad\xf3\x25\x84\x26\xcd\x3e\x87\x99\xd5\x38\x99\x09\x9a\x25\xa2\x67\xc3\xd2\xfb\x77\xcb\x63\x6c\x67\xc6\xc0\x2d\x24\x7c\xf8\xa5\x31\xf0\x3d\xbb\x0e\x6a\xf5\x82\xfd\xa3\xae\x51\x32\x2b\x3c\x17\x9d\x9d\x8f\x2b\xb6\xd1\x17\x67\xc6\x7a\xca\x05\xc4\xf1\x46\x26\x21\x9b\x77\x1b\x9a\xda\x27\x6e\xe6\x06\x86\x09\xc1\x4c\x68\x6a\x80\x27\x01\xa1\xb7\x6e\x75\x1c\x5b\x5f\x0e\xf6\xa6\x04\x7f\xfa\xbe\x13\x88\xd7\x59\xf5\x0c\xfd\x30\x5a\x41\x09\x21\xbd\x8e\x4e\xd6\xab\xf6\x7e\xe6\xb9\xd6\x27\xfa\xba\xdb\x3d\xae\x5e\xee\xeb\x1b\x0b\x33\xdc\x59\x49\x1c\xbf\x80\x95\xee\x27\xb2\xdf\xe9\xfc\x6a\xfc\x47\x47\x9a\xe6\x5c\x89\xe3\x5c\x81\xed\x50\x1b\xbb\x24\x10\x27\xdb\xad\x42\x77\x4c\xf0\x12\x04\x83\x09\x19\xc7\xb7\xbc\xc9\xb0\xfa\xfc\x9e\xdd\xc3\x9a\x2d\xe2\x13\x75\xb3\xea\xff\x84\xaa\x9b\xd3\xd8\xb0\x0d\xc9\xd1\xcd\x9a\xf3\x02\x5e\x5f\x7e\xb5\x48\xa4\xc1\xd6\xe6\xfd\x02\xc2\x99\xd4\xaf\xed\x74\xe0\x1b\x15\x64\x53\xcb\xf4\x37\x83\x80\xd0\xca\x59\x6f\xce\x1d\x1e\xbd\xf5\xc2\xfb\x66\x0f\xbd\x30\xbc\xb3\xce\x0b\xf8\x18\x00\x56\x2b\x4f\x83\x80\xd5\xda\x7d\x30\x9c\x06\xa5\x11\x70\x5a\xff\x8a\xf7\xb1\x4e\x47\x3b\x2b\x5e\x4b\xd1\xee\xb4\x8e\xe6\xc2\x96\xd5\xee\xd9\xee\x06\x1f\xc5\xe9\x6a\x65\x8b\xa2\xc5\x91\xed\x36\x2c\xed\x68\x83\x75\x64\xad\xe0\x8e\x26\xbf\x42\x4e\xbb\x60\xcb\xf8\x37\x80\x83\xd7\x66\x86\x95\xc3\xdb\x18\xc9\x8e\xeb\x2a\x11\xa1\x0a\x0b\x5f\x51\xbe\x07\x06\x77\xa3\x2d\xea\x4f\x68\x66\x28\x0a\xc1\x98\x35\x8e\x65\x9f\xa9\x29\xc2\xad\x91\x34\xa3\x3b\xf6\xb3\x4c\x78\xc8\x42\x06\x4a\x64\xd4\x25\x37\xd8\xc9\xb6\x14\x1e\x25\xc8\x30\x70\x76\xec\x4c\x0f\xe1\x86\x7c\xc9\x22\x64\x92\x01\xe8\x5d\x79\xb0\xb1\xea\xc3\x7f\x51\x0b\xd1\x5d\xe1\xcd\x45\x77\xe1\x64\x4e\xb6\xba\x9e\xbb\x70\x9e\x38\xc0\xdc\x46\xa6\xc3\x82\x9c\x4f\x80\xcc\x0b\x08\x98\xeb\x99\xe1\x4c\x49\x36\x61\x6e\xaf\x7c\xdd\x9b\xd9\xe9\xa8\xe1\xa2\x96\x5f\xbf\x44\x53\x41\xfb\xa0\x92\x1d\x12\x45\x5f\x19\x1e\xfc\x86\xd8\x45\xba\x22\x54\xd9\x18\x69\x23\x7e\xea\xed\x3b\x0c\xcd\x2b\xc4\x6d\x01\x59\xb9\xbe\x17\xb6\x50\x91\x39\xb0\x89\xe3\xd7\xf8\xd5\x4b\xa1\xca\x5f\x72\x7e\xe3\x4d\x49\xaf\xeb\x08\xfb\xf0\x04\x70\xef\xa3\x0b\xcd\xf1\xf2\x04\x8f\x3c\x03\xa0\x88\x3c\x1b\x4f\x73\xd6\x1f\x3b\xec\x5f\x0c\x3d\x37\xa0\x0e\x48\xbe\x82\xbb\x43\x70\x42\x35\x9e\x0c\x6b\x9b\x08\x9a\x02\xf4\x27\x81\x99\x70\x1e\xc7\xfd\xa5\x9d\xc1\x9e\x58\x12\x80\x18\xd0\x63\xbb\x0b\x9c\xc4\x22\x90\x40\x65\x87\x32\xd0\x34\x0f\x6b\x8a\xf2\x36\x13\xa1\xf2\x38\xbb\xba\x9d\x28\xc8\x4b\x4f\x27\xd1\x80\x30\x51\x8e\x85\xd2\x21\xa2\x3c\xdc\x7e\x39\x8d\xf4\xf0\xb5\x9f\xa2\xea\x74\x63\xb4\x34\x23\x6c\x47\x27\xc9\x9b\xcf\xbf\x6d\x17\xea\x92\x1c\xf4\x14\x33\x44\xc1\x25\xe0\xfd\xdc\x5e\xf2\x17\x00\x55\xf2\x1a\xcc\x9e\x2b\x9a\xd9\xe0\x9f\xc5\x3a\x8c\x40\x3f\xc0\x00\x56\xe9\xb4\x3a\x2b\xfd\x03\x6b\x45\xca\x59\x85\x26\xe6\x9e\x65\xe9\x9f\x79\xa2\x43\x69\xb4\xce\x97\x1c\x2d\xaa\x33\xc8\xa2\x8e\x2b\x0f\x9f\x67\xcd\xcf\x81\xad\x1d\x40\xe6\xa3\x9d\x30\x19\x48\xa7\x9b\x0e\x35\x74\x40\x0b\xe3\xcf\x80\xa3\x32\x15\x2c\x76\x3e\xf2\x1a\x23\x28\x42\xd1\xc8\x70\x34\x44\x54\xd5\xa2\xbd\xe4\xe1\x85\x86\xd1\x2a\x17\x79\xb5\x4e\x42\x2e\x7e\x4f\x62\x61\x75\x3a\xf6\x95\x33\x21\x3d\xd0\x82\x81\x3b\xa2\x0f\x74\x5a\x05\x50\xdc\x04\x77\xe3\x1f\x4d\x56\x4d\x92\xc9\xce\xcc\xd1\xd6\x33\xe1\x34\x93\x57\xb0\x2c\xaa\xae\xd2\x3a\x52\x35\x8b\x0f\xc8\xda\x43\xda\x94\x7a\xe9\x68\xe7\x18\x56\x80\x9b\xac\x01\x55\xa2\x5e\x07\x30\xd5\x0b\xab\x71\x24\x6d\x58\x13\xf8\x26\xac\xcc\x3f\x8f\x54\xa6\x86\x5f\x89\x84\x09\xfb\xbd\xfa\xeb\x75\xfb\x8f\x2b\x56\xab\xd5\xaf\xee\x7d\x0a\xbd\x84\x72\xc1\x99\xb2\xae\x97\x95\x62\x2d\x05\x06\x95\xf8\xd4\xa0\xd8\x4b\x1d\x78\x4a\x38\xd0\xc7\x89\x65\x32\xd1\xf2\x3c\xfa\xe2\x27\x08\x7a\x36\x9b\x13\x62\xb4\x83\xee\xed\x44\x1e\x40\x8a\x05\xe7\xa1\xfc\x4f\x83\x5b\xa7\x8b\x9a\x3e\xca\x93\x8d\x71\x9f\x43\xd3\x9a\xa1\x1c\x4c\xd2\x09\xa6\x15\xe5\x92\x7b\x64\x3b\xd4\xcf\xa2\x2d\x18\xac\x6a\xf6\x02\xf7\xfc\x80\xab\xbb\xcb\xac\x8b\xcd\xe6\xb4\x64\xea\xb4\x3c\x93\xa7\xa5\xb5\x41\xc8\xea\xfc\x22\xee\x5d\x51\x6f\x4b\xa4\x27\x58\x39\xc8\x90\x8c\xce\x10\x9f\x65\x01\x1b\x95\x2b\xee\x77\xd5\x94\x43\x80\x63\xcf\x1c\xe3\x86\x5e\xcf\x11\x7f\x26\x32\x8c\x18\x98\x93\x35\xff\x93\x5b\xba\x94\xb1\x7d\xe9\xab\xd1\x83\x89\x38\x96\x8e\x66\xca\xb1\xcf\xe7\x66\x2d\xbf\x42\x23\x99\x4b\x2e\xab\xfd\xbe\x23\xd0\xd8\x97\xb5\x23\x98\xf2\xec\x2d\x81\x86\x05\x8c\xa8\x2d\xc9\xd5\xfb\x92\x7c\x89\xe3\x3f\x85\x7b\xb4\x0d\xea\xa1\xa4\x1e\x5f\x6b\xcf\x20\xcf\x02\x5e\x2c\xfd\xd1\x0f\xf6\x23\x39\x10\xe4\xdc\xc7\x4d\xe1\xbb\x34\xf1\x21\x03\x26\xa8\xcd\x76\xc0\x84\xcf\x53\x9d\xd5\xb8\xb6\x64\x50\xab\x7a\xe1\xb5\x84\xe4\x2e\x29\x99\xd0\x12\x8d\xd4\x65\xd3\x09\x21\x53\x53\x9a\x49\x65\xcc\xf1\x4b\xc4\xab\x20\xd4\x7f\xcb\x50\xf1\xf3\xa6\x56\x9f\x14\x0a\x73\x8e\x21\x61\x35\xf0\x58\x3e\xb5\x05\x2a\xaa\xe8\xf0\x68\x79\x63\xda\x28\xf1\x7d\x69\xcb\x0b\xcb\xb0\xb3\x33\xc8\x90\x56\xf5\x06\xf5\xb2\x38\xae\x8e\x15\x92\x99\x42\x46\x8b\x52\x2c\x32\x95\xc0\x92\xc8\x4c\xbb\x2a\x53\x9e\x8b\xad\x7d\x5c\x99\x4f\x49\x57\xfb\xd1\x64\x20\x6f\x53\x11\xed\xf4\xcc\x3e\xdb\x61\xce\x53\xf3\xef\x80\x89\x54\xd9\xc0\xc1\x0e\xa6\x39\xcc\xc3\x36\xcd\x0f\xa0\xb1\x06\x04\xf1\xd2\x2e\xe1\xee\xd9\xd9\xbb\xee\xa2\xa1\x3e\xc6\x93\x94\xaf\x92\x1c\x38\x92\x72\xcf\x91\x64\x7e\x0e\x72\x5b\x2b\x71\xa4\x56\xb4\x9f\xa8\x33\x11\xa8\x09\xd5\x39\x13\x75\x5a\xcc\xd2\x04\x78\xea\x26\x27\xb9\xa1\x6b\xbd\x27\xa2\x34\x07\xf4\x7e\x9f\xb8\xdf\x7a\xaf\x3c\x1d\x4e\x18\xbb\x2a\x93\x8c\x4a\x12\xc7\x99\x61\x90\xa9\x6d\xd7\x30\x00\x77\x6d\x66\xa9\x16\x57\x67\xb8\xbf\x34\x58\x34\xf5\x26\xd8\x65\x79\xc0\x02\x6e\x28\xd3\x86\x4e\x26\x2b\xcf\x59\x65\xd9\x16\x13\xd5\x34\xfd\x82\xe5\xe7\x2d\x19\x1a\x6f\x0d\xf5\xb4\x14\xdf\x5b\x64\x83\xd5\x4b\x67\x2a\x67\x62\x8e\xfb\x62\x90\x57\x40\x48\x2e\x9b\x04\x39\x25\x33\x35\xa7\x59\xa3\x14\x38\x59\xbf\xec\xf7\x92\x1d\xdb\x7a\x8d\xa5\x08\xc2\xed\x95\x14\x66\x46\x2a\x3d\xcb\x19\x62\x6f\xb6\xdb\xa9\x25\x47\x60\x12\xda\x0d\x80\x45\x08\x72\x03\x87\xc7\x3e\xc3\x2e\x14\xe7\x63\xf8\xb7\x44\x0e\x6b\xe3\xfc\x58\xeb\x44\xb6\x1b\x64\xb3\x12\xbf\x1d\x2a\x5a\x0e\x06\x96\x4d\x66\x37\x54\x3d\x35\x60\x39\x95\x03\x96\xa3\x13\x99\xdb\x86\x25\x01\x4f\x32\x93\x77\x22\xce\xc6\xd3\x71\x1a\x14\x51\x2b\x43\x0e\x98\xf8\x36\x9b\x95\x43\x48\x37\x49\xc7\x04\x8b\xa3\x7a\x6d\x1f\x8e\xb4\x3e\x20\x02\x96\xcd\xd7\x9e\xda\x20\x4a\x36\x36\x03\xa9\x3a\x1e\xcd\x14\x3c\x98\x99\xc3\x5a\x9f\x4e\x7a\x41\x00\xc7\x88\x5b\x0b\x83\x81\x74\xb6\x78\x01\x75\xae\xec\x7a\x3a\x51\xe0\x1c\xfa\x41\x66\x5b\xf3\x62\xcd\xba\x41\xca\xf5\x15\xd1\xa6\x44\x35\x67\x2b\x21\x04\x7b\x0a\x8c\xe0\x65\x58\xb5\x1f\xc6\x55\xa7\x75\x6b\xe7\xbb\x06\xa2\x44\xa8\x8b\xfc\x4f\x9e\xd4\x08\x7a\xcd\xca\xf2\xab\xe1\xdf\x79\xa2\xc8\xa9\xec\x33\xc7\x87\x70\x2a\x99\x0c\xc8\x56\xc0\xc3\x40\xee\xf7\x80\xa3\x69\x1d\x11\xe3\x38\x52\x72\x07\xa6\x85\x6d\xa7\xcf\xfc\x4a\x94\x92\x0f\xc1\x01\xa8\x8a\xe0\xcd\xc2\x67\x07\xea\x21\x7d\xbf\x05\xad\x87\xe1\x8b\x74\xae\x0a\x81\x71\x5c\x73\x75\x35\xb8\x4a\xa5\xaf\x02\x34\xa1\x5d\x0d\x51\xaa\xa1\x71\xac\x89\xea\x73\xf1\xda\xf0\xd8\x57\x66\x37\xbe\xdf\x3e\x51\x0b\xb8\x25\x53\x0e\x22\xd3\x98\xf4\x65\x2e\xe8\xb7\x21\xa8\x60\x0c\xf0\x89\xbf\x71\x80\xa9\x30\x1c\x57\xb4\x60\x60\x8a\x55\xd2\x8c\x18\x51\x6a\xc2\x58\x01\x86\x47\x71\x9c\xec\xbc\x39\x59\x61\x20\xac\xb4\x9c\x69\x5d\xf0\x74\xca\xc5\xda\xd0\xc5\x03\x93\x29\xb5\x16\x7c\x1d\x44\xa6\x43\x1b\xd7\x2b\xc0\xad\x0f\x65\xe2\xa6\x9e\x0d\x40\x3c\x93\xa4\x1c\x2e\xc2\x6b\xb8\xb1\x5b\xa8\x99\xbd\x91\xe1\xc2\x63\xe1\x07\xa6\xcf\x3b\xd9\x81\x85\x17\x8e\x50\xc2\xcb\x44\x01\x64\x98\x34\xd0\x65\x00\xfc\x10\xc7\xf6\x81\xa1\x86\x07\x91\x10\x42\x10\x19\x6f\x9d\x03\x78\x3d\xfc\xfb\x23\xbf\xa5\x19\x22\xc2\x12\xd4\xca\xba\x6b\xe8\x52\x66\x57\x57\xe0\xb9\xd5\x9f\x1c\x85\xae\xea\x4a\x3d\x3e\xd0\xc9\x78\x4c\xbc\xd8\xd6\x5f\x48\xa8\xa8\xb5\x92\xab\xf0\xcf\x5e\x75\x93\xeb\x01\x35\x5a\x14\x8b\x18\xfa\x4b\x9e\xe8\xa4\x8b\xac\xe2\x27\x93\xd4\x2a\x81\x8c\xc2\x5c\x5c\xe9\xf5\x3a\xed\x0c\xd5\xe2\xa6\x98\xd6\x15\x87\xe4\xae\x9c\x06\x75\x7f\x5a\x26\xb7\x9c\x82\x17\x5b\xea\x19\x0d\x17\xbb\x0a\xde\x1c\x7a\xf6\x1e\xe1\x28\x85\x7b\xcf\x54\x1c\x3f\x53\x23\x95\x6f\xf8\x79\x3e\xfc\xdb\x78\x0c\x5e\x15\x5b\x9e\x3c\x53\xa3\x6d\x59\x51\x49\xa6\x82\x45\x4a\xe6\xdb\x82\x47\xe9\x2b\x15\xc7\xaf\xba\x52\xbf\x72\xa9\x13\xc1\xa2\x65\xb9\xbb\x2c\x78\x44\x9f\x29\x76\xa7\xd3\xa6\x39\xdd\x96\x55\x2a\x0f\x24\xd5\xd1\x48\xfe\x13\xd1\x57\xad\xe8\x9e\x9d\xec\xdc\xa3\x99\xb2\xeb\xa9\x1a\x6d\xb8\xca\x7e\xe4\xb7\xa9\x1a\x2d\x94\x2c\x7e\xe4\xb7\x81\xd1\xa5\x1e\x99\x27\xb2\xdc\xc6\xf1\x87\x12\xb4\xc5\x75\x14\x2f\x5b\x1c\xaa\x56\x77\x2c\xc0\xf0\x95\x84\x00\x7c\x5b\xb2\xe5\x09\xc4\x18\x67\xa4\xdd\x9c\x58\x4c\x03\x49\xce\xc6\x7a\xfe\x19\x0b\x3f\x4c\xbb\x03\x77\x24\x2a\xc9\xb9\x8b\x3b\x1b\x93\x69\x5b\xa5\xdb\xd8\x77\xe8\xce\xf7\x3c\x2d\xd8\x8f\x35\xb8\xea\x05\xb9\xab\x90\x3b\xa6\x6b\x82\x82\x6e\x11\xa6\x04\x84\x9a\x19\xa1\x67\xee\x37\xb9\x33\xac\x0a\xd0\x57\x0b\xa2\x23\xf2\x80\xac\x65\x29\x4b\x0c\x77\x1a\x51\xbf\x23\x2d\xec\x2f\x32\x68\xc5\xfe\xe6\x62\x7f\x23\x67\x93\x71\x1c\x27\x3f\xe4\xc9\x82\xd0\xbe\x88\x63\xd7\x9a\xe1\xc3\xf1\xf8\x6c\x17\xc7\x2f\xb8\x3b\xda\x69\x05\x58\xa3\xff\x87\xb1\x6c\xda\xbd\xba\x6a\x2e\x06\x6e\x79\xe4\x75\x80\x5d\x00\x17\x4a\x1b\x81\xe4\x40\x7a\xc7\x3b\x0b\x98\xa6\x3a\x3a\xab\xa0\x8d\xf4\x38\x6b\x3a\x02\x13\xd2\x7b\x7e\xac\x5b\x9f\x77\x77\xab\xe5\xa5\x5a\x90\xf4\x38\x26\x83\x9f\x09\x99\x31\xa5\x05\x12\x1b\x4b\x92\x49\x0b\x96\x99\x49\x6f\xe7\x62\x2f\x87\x47\x6c\xbb\x97\x4d\x93\x1d\x26\x09\x27\x31\xad\xd8\xee\x7c\x38\x99\x2e\x66\xbb\x79\x6a\x7c\x0d\x25\x95\x84\xa4\x49\x65\x52\x87\xcc\x19\x3e\x04\x9d\x08\xf5\x5e\x7b\x35\xf5\x65\x20\xb9\xa5\x5d\x6f\x59\xa1\xc3\x88\x60\x91\xe4\x0b\x15\x81\xfd\x75\xc5\xc2\x52\xa8\x64\xe6\xac\xed\x83\xe5\x2c\xdd\xb1\xe1\xc4\xfb\x07\x98\xcd\xc0\xf9\x4c\x58\xf8\x86\x0f\xa5\x5c\x3e\x52\x89\x24\xbd\xd0\x8b\x02\x2a\xb1\xdf\x67\x70\x91\x11\xcb\xe9\x0f\x3c\xc9\x68\x45\x57\xd6\x0d\x6f\x85\x3e\x78\xe9\xca\x5d\x63\xed\xe6\xe4\x0a\x58\xdb\xda\x2d\x79\x82\x7e\x77\x74\x0c\x1a\xfb\x8c\xba\x10\x40\x8a\x20\x7f\xa9\xe8\xb5\x2d\x7a\x6d\x8a\x5e\x1b\x5c\x63\x66\x12\x48\xd2\xcb\xa7\xfa\xee\xb3\xd3\xa3\x63\x31\xd2\xe8\x73\x1d\xfb\x86\x27\x0b\x7b\x43\x9d\x55\x73\x42\x77\x84\xde\xe1\xe4\x49\xfb\x13\x5a\xca\xfc\x2a\x17\x69\xf4\x2d\x4c\xb0\xe8\x40\x48\xba\x08\xe0\x0f\xf4\x80\x5a\x67\xcc\xc6\x46\x56\x9b\x13\xbe\x28\x7b\x77\xde\xb9\x7b\xb1\x0d\xdb\x0d\x26\x44\x1f\x0b\xf7\x16\x6f\x27\x20\x49\x3f\xe8\x2c\x77\xb4\xa2\x55\x49\xd2\x64\xc7\xc6\xd8\x1e\xe3\x88\x3a\xab\xe6\x3a\xab\xaa\xf4\x5f\x18\x58\x72\x64\xb4\xdd\xb2\xf2\xab\xbc\x3e\x9b\xd0\x3a\xf1\x3a\x51\x76\xb7\x1c\x0c\x36\x74\x11\xcc\x28\x9c\x77\x7a\x74\xd1\xe8\xd6\x39\xf5\x2e\xe8\x92\xf8\xbb\xb5\x3f\xe5\x6a\x6c\x51\x3a\x35\x9c\x50\x4b\xaa\xdc\x93\x49\xbe\x4a\x96\x4c\x05\x39\xdf\xf9\xc7\x36\x50\xb1\xb5\x84\x22\x0a\x62\xd3\x4d\xae\x2f\xb7\x81\x80\x45\xe5\x68\xb1\xa6\x25\xa1\x2b\x17\xad\xc2\x68\x65\xa2\xd7\x1e\xe7\x61\x41\x57\x84\x06\x0f\xb5\xf0\xf7\xa6\xc6\x89\xa0\x67\xac\xf5\x0a\xb8\xf6\x31\x1c\xee\x02\x00\x56\x1a\x3c\xc9\xd5\xd3\x93\xd3\xcd\x19\xbb\x3e\xdd\xd8\xab\xcb\x15\x83\x4a\x6d\x4c\x7d\x6e\xd9\xaa\x4c\xae\xa8\xae\x53\x6f\xcd\xd8\x76\x6a\x74\x82\x7e\xc1\x6c\xe8\x2d\x20\x74\xe8\x7f\x09\x49\xaf\xec\x6c\xbc\xd5\xfb\xe4\xd1\xb4\x90\xeb\x96\x96\x04\x00\x51\xdc\x8b\x43\xfd\x0b\xdc\x2c\xec\x5c\xb5\x1b\x5c\xc7\x94\xcd\x71\x99\x34\x66\x27\x75\xf3\xf6\xe0\x1f\xda\xdc\x83\x8b\x0a\x74\x4e\x97\xac\xa2\x9f\xd8\xa5\x5d\xb7\x37\x0c\x5e\x1f\xed\xf2\xe9\x33\x61\x9c\xa0\xfc\xc6\x84\xf6\xdb\xb5\x7d\x49\x19\xf1\x0e\xa3\x7c\xa3\x55\x6b\x47\x51\xb5\x1d\x65\xcb\x93\xa7\xb6\xe4\x4f\xe4\x7c\x3c\x4d\x6e\xd8\x53\x74\x32\xff\xc4\xae\x78\x72\x69\x25\x0b\x9b\x4a\x6f\xd3\x3a\x89\xfd\x86\x5d\xeb\x44\x20\x60\x3c\x35\x6e\xe0\x07\x9c\x9a\xcd\x2e\x23\xbd\x7c\xb6\x73\xde\xe5\x50\x9d\x4f\x84\xde\xf8\x3e\xce\x75\x3f\x56\xf0\xd0\xb4\xb0\xa4\x04\x1f\x12\x7d\x87\x38\x4d\x16\xc6\x32\x6c\x35\x52\xe5\x7e\x8f\x7f\x9d\xad\xf0\x79\x33\x8e\x83\x03\xfb\xc7\x06\xa9\xc6\x86\xb1\x3c\x8e\xaf\x91\x7b\x6d\xf2\xfd\x38\xe8\xf8\xb5\xbf\xd1\x9c\x01\x3b\xe6\x74\xf8\x70\x9c\xba\xb0\x73\x4b\x92\x39\x7d\x38\x4e\xc7\xbd\xf5\x5f\x28\x26\x29\x3b\x9e\x8d\x06\x6c\x4d\x75\xf9\xba\x02\x00\x3d\xec\xb6\x91\x5b\xbd\xe4\x79\x97\xec\xac\x25\xa5\x0d\x9b\x3c\x18\x53\x38\x71\x41\x83\x19\xc2\xf8\xb7\xa5\x28\x7d\xaf\x8c\xe8\x65\x57\x94\x96\x04\x3e\x11\x9a\x8d\xd6\x79\xa5\x4a\x79\x0b\x0b\xf3\x82\x17\x6f\x61\xc6\x32\x77\x6d\xbb\x6c\x88\x78\x9c\xdc\x81\xf0\x3f\xbd\xd6\xa2\xfc\x6d\xc2\x75\x0b\x3e\x61\xa2\x5b\x2f\xb4\xd4\x2b\xfe\x89\xb6\x45\x11\x57\xb7\x6e\x29\xe5\x93\x93\x46\x04\x5d\x90\x83\xbe\x8c\x50\x41\xd2\x7f\xeb\xb2\x01\xd9\xd7\x74\x69\x1c\xff\x00\xc0\xff\x86\xb2\x57\x5f\x48\x1e\xa6\x15\x18\x5b\x61\x4d\x74\xbb\x5e\xe7\xcb\x65\xc1\x9f\x94\x37\xc2\x0b\xaf\xe0\xbf\xf5\xc2\x22\x91\x89\xe3\xc8\xbf\x6d\x51\x8e\xb6\x8a\xfc\x2e\xbd\x99\xfe\x84\x37\xa6\x06\x06\x88\x91\xe1\x78\x91\xdd\xe6\xe2\xea\x87\x62\x27\x9f\x5e\x73\x01\x6c\x45\xc7\xa0\x2e\x8f\x7c\x82\xd6\x93\xc7\xb2\x9b\xd0\xf7\x12\x51\x6c\xf5\xbd\xee\xd0\x78\x63\x2a\x02\x45\x82\x05\x32\xcd\xfd\x75\x9e\xfa\xab\xfd\x6f\xcd\x1b\x7c\x7f\x72\x00\x87\x26\xdc\xc4\x57\x45\x59\xca\xc0\x67\xf8\x6a\xa7\x14\x97\xd5\xb1\x13\xd2\xf2\xd7\x3a\x5c\x0c\x01\xe3\xa5\xac\x57\xab\x17\x26\xb5\x94\xf7\x35\x8a\xbc\x7c\x95\x94\xe7\xd6\x6c\x63\xbf\xef\xcb\x12\x8c\x45\xac\x5a\xe3\x67\xc8\xb8\x1c\xa2\x87\xea\x30\x0b\x14\xab\x4e\x83\xb8\x63\xe3\xd3\xdd\x99\x3f\x1b\x6d\xfd\xdd\xbb\xf1\xce\x42\xd2\x66\x2e\x2e\x80\xaf\xda\x81\x4a\xb9\x88\xe3\xe2\xfe\x16\x9f\x5b\x2e\xf5\x05\x7b\x1b\x3c\x66\xad\x58\xab\x64\x9d\xa5\x65\x5a\xce\xe1\x59\x81\xd3\x05\x5d\x51\x45\x28\xb4\x27\x1c\xc5\x85\xac\x3d\xe6\x9a\x41\x8d\x30\xa7\xc7\x45\xbe\xf8\x1c\x69\xe1\x15\xd6\xed\x4a\x86\xb2\xc9\xba\xa1\xa7\x00\xf1\x41\xea\x4d\xa4\x6f\x14\x14\x71\xdc\xcf\xa4\xb7\x1e\x04\x4d\x00\x4c\x73\x5a\xc6\x71\xb2\x92\xc1\xc2\xb1\x44\xcf\x30\xdf\x41\x5a\xb6\xe0\xe6\xef\x65\x26\xaa\x15\xb0\x89\x16\x1c\x0a\x01\xd2\xaa\xda\x6d\x96\xa0\xea\x47\xb8\x47\x79\xa3\x5a\x78\x96\x17\x5c\xa7\xd2\x4b\x3a\x08\x0a\x3c\xb1\xed\x27\x34\x63\x8f\xa4\xcc\x6e\x01\xfa\x1d\x34\xc2\xc1\x6d\x45\x18\xf4\x44\xd7\xcf\x59\x51\x94\x37\xfa\x42\xa4\x73\x7b\x7f\xbb\xe5\xd5\x7e\x3f\x9c\xf4\xd9\x55\x99\xdc\x97\x88\x22\xaa\xbf\x7f\x59\xe0\x37\x27\xbe\x8a\xbd\x72\x54\x8a\xa2\xcc\x96\x7a\xe3\x53\x6d\x9a\xce\x72\x24\x79\xb5\x2b\xe0\xd0\x7e\x30\xfb\xf8\x65\x3c\x1e\x7e\xfc\x32\xfe\xfb\xc7\x2f\x63\x3e\xfc\xf8\x65\xb2\x9a\xdf\x3d\x3c\x58\x24\x72\x30\x41\x65\x51\x44\x68\x36\x13\x73\xc6\xe9\x60\x50\x31\x3b\x7f\x76\x06\x0b\x44\xb2\x57\x76\xab\x92\x84\xaa\x32\x95\x96\x8a\xa0\x01\xa6\x97\x21\xac\x9b\xea\xc2\xcb\x23\xc4\x89\xcb\x08\x6e\x7f\xe8\xbd\xb4\x88\x55\x3b\x42\x7f\xa9\xc1\x32\xbe\x93\xc9\xce\xc0\xb8\x97\x80\x8b\xfa\xa8\x32\x0a\x9c\xc3\x81\x16\x6c\x7c\x5a\x9c\xe5\xa7\x83\x41\x41\x76\x89\x98\x15\x73\x5a\x78\x8a\x05\xd5\x71\x73\x05\xb3\xc8\x26\x01\x91\x24\xe7\x5e\x0b\xdf\xf5\x95\x9e\x7f\x80\x9b\xd5\xbd\x57\x36\x2d\x2d\xc3\x4d\x1a\x54\x96\xf9\x2a\xc9\x9a\x73\xf3\xca\xd2\x1e\xbc\x07\x10\x40\x72\xbc\xc6\xfd\xe4\x7a\xca\xcd\xed\x31\xe5\x56\x6d\x83\xf8\x8d\x0b\xa0\xf4\xac\x6a\xac\x14\x7a\xb4\x7f\xab\x75\xa2\x96\x16\x17\x30\x85\xb1\xc7\x16\x7e\xa3\x29\x88\x43\x0b\x8b\x22\xba\x98\x15\x16\x4a\x07\x7f\x1b\x8a\x51\x99\x5d\x01\xc3\x6b\x8b\x23\x22\xa3\x51\x06\xfa\xcb\xc8\x32\x15\x84\x86\xbc\xf5\xee\x30\x5b\x3a\x27\x77\x87\x70\x3b\x59\x36\x5e\xb2\x74\x61\xd6\xae\x2b\xf9\x9a\xe9\x4f\xd7\x67\xa1\xc1\x90\x0f\x35\xf0\xf7\xae\xd8\xad\xd9\xc5\x8e\x1a\xc9\x29\x72\xf6\x10\x81\x29\xc2\x60\xa6\xa8\xdc\xef\x7f\x4d\x38\x05\x3b\x7d\x75\x08\x4b\x6b\x0b\x58\x7d\xa6\x6a\xad\xe8\x30\xed\x54\xed\x1c\xda\x16\xa2\x0a\xec\x75\x7f\x85\x8d\x50\xcb\x38\xa0\x35\xf5\x8d\xd9\xb8\x07\xd2\x44\x4e\x15\x6b\xd9\x0c\xa6\xc7\x6d\xf7\x74\x33\x09\x60\x0e\x79\xe3\xed\xe3\x4d\x42\xf3\xcf\x8e\xe8\xe0\x0d\x05\xda\x53\x2b\x84\x29\xfa\xef\x3a\xa0\x48\x87\xbd\xe7\x57\xba\x0a\xf3\xf9\x5a\x5f\x81\x71\xa9\x32\x72\xfe\xb5\x64\x63\x7a\x85\x23\xdf\x2b\xa7\x57\x92\x0d\x47\xdf\x7f\x97\x4a\xfd\x6b\xf2\x7d\x5a\x60\xc8\xff\x4e\x57\x71\x9c\xe8\x9f\x93\x07\xdf\xe1\xa9\x72\x2b\xdb\xe6\x2e\x8c\xa3\xdd\xf1\x13\x5e\xa8\xec\x57\x20\xf2\xf5\x7f\xff\x16\x7a\xc1\x83\xc5\x87\x96\x8e\x54\x96\x17\xfa\x57\xf6\x25\x07\xb4\x9f\x17\x6f\x7f\x7a\xf9\xfb\xdb\x37\xef\x1f\xbd\xfa\xf4\xe8\xd7\x97\x17\xd6\x2c\x04\xd2\x05\x36\x21\x5d\x9f\xfe\xf2\xf4\xa7\xf7\x2f\x1f\x9b\x0f\xa7\xd2\x7d\x96\xd6\x2d\x49\x7c\x8d\x08\xbd\xfb\x92\x2a\x7a\x9b\xca\x43\x00\x71\x74\x29\xbd\xf7\xbd\x60\xb7\x70\xf4\xea\x13\xed\x0b\x38\x90\xdf\x86\x6f\xa5\xa8\xde\xb2\xca\xb9\xc2\xd9\x87\xc2\x10\x9f\xef\x6a\x76\xbf\x2b\x17\x8b\xcf\x63\x2e\xda\xbb\xcc\xe6\x71\x5c\x80\x16\x73\x85\x8f\x94\x71\x7c\x1d\xc7\x15\xe1\xa9\xc7\xef\x54\x23\x95\xc9\x2b\xae\xe8\x92\xa1\xd0\x74\xba\xee\xb3\xdd\xe9\x9a\xad\xc3\x27\x30\x9b\x7e\xcb\xc6\xa7\xdb\xb3\xa5\xdd\xc9\xb6\xf8\x56\xbc\x9c\x6d\x11\xf9\x95\xb1\x75\xb8\xa9\x2c\x76\x52\xe7\xf0\x41\xf7\xcf\x7b\x28\x85\xad\x51\x72\x3e\xe1\x07\xac\x1e\x30\x5b\x2e\xd0\x24\xbd\xcf\xae\x1c\xa4\x87\xae\x73\x1c\x6f\xbd\x15\x70\xdd\x42\x3a\xb0\xb8\x1d\x94\xdf\x5e\x49\x5a\xef\x8a\x61\xbd\x2b\xf4\xe1\xb7\xf9\x5a\x56\xe0\x4f\x92\x87\x79\xe1\xb2\xab\x75\x3a\xf8\x96\x18\x16\xaa\x15\x31\xf2\x2c\x42\xc1\x66\x35\x7b\x79\x74\x69\xc4\x3e\x77\x6d\x83\x19\xb0\x61\x50\xe1\xab\x96\xd1\xf1\x2d\xbb\x1a\x64\x9d\xef\xa8\xbd\xcd\xd9\x78\x7a\x15\x9a\x8a\x5f\x0d\x36\xc3\xef\xc7\x24\xbd\x0d\xd5\x2b\x81\xc7\xeb\xed\x60\x33\xf8\x7e\x4c\xa8\xdb\x32\xaf\x2c\xda\xc2\xed\x81\x1c\xae\xe5\xd9\xc3\xb1\x33\x60\xaa\x55\x7c\xda\x68\x47\xd8\x3b\x34\xab\x39\x01\x04\x63\x60\x63\x9e\xfc\xca\x72\xf7\xfb\x37\x56\x1e\xb9\xe6\x38\xcb\x8c\x5a\x59\x56\x7e\x0a\x8b\x1c\xd6\x52\x50\x15\x16\x5a\x8b\xfb\x8d\x4a\xbd\x01\xb8\xb2\xe3\x58\x3d\x70\x7f\xec\xf7\xdc\x47\xfd\x1a\xc7\xdc\x45\xfd\xda\xab\x37\x37\x6b\xb9\x39\x00\xbe\xc4\x95\x64\xc9\x95\xfc\xf6\x5a\x0e\x24\x79\x90\x5c\xcb\xc1\x84\xd0\xc1\xe0\x5a\x6a\x71\xe8\xa1\x3e\x14\xd2\xc4\xe5\x38\x08\xbb\x60\xc0\x4a\x12\x5e\xf0\x3f\xc9\x10\xc6\xa6\x02\xc4\xc5\x88\x31\x2d\x6d\x96\xab\x13\x10\x3b\x14\x2b\xc4\x4c\xcd\x83\x7b\x53\x93\x2a\x35\x04\x11\xb5\x8f\x62\x4d\x3d\x30\xcd\x59\x7f\x02\x62\x50\xf3\x3d\xc9\x5d\x24\xab\xdd\x76\x2b\x79\x55\x3d\x5d\xe6\xaa\x02\xe0\x8c\xfa\xd9\x8f\xef\x90\xfd\x89\xde\xac\xb4\x30\xd6\x67\x65\xe9\x2c\x19\x9b\xc9\x04\x3d\x92\xed\xc4\x5b\xeb\x5d\x60\xaf\xc0\xa5\xf5\x5d\xfe\x85\x17\x55\xc7\x86\x7f\x2b\x03\x6b\x45\x35\xfa\xf2\x2d\xbb\x92\x54\x8d\x6e\xf1\x5f\x84\x98\xbb\x91\x20\x92\x17\xa5\xdf\x63\x9f\x76\xbc\x96\x87\xb4\xb7\xb0\x1b\x42\xaf\x2f\x45\xe2\x2e\xa5\x91\x01\x2c\x8d\x7a\x37\xc0\xd4\x95\x7c\x3f\xa6\x1d\xd7\x71\xcc\x02\x15\x3a\x8d\x30\x83\xaf\xd5\xc9\x65\x4b\x0e\x84\x2a\x96\x0f\xa2\x93\x68\xa0\x8c\x95\x74\xf3\xf5\xb3\xe9\xf4\xec\x32\x7f\x9d\x75\xba\x3f\xaf\x51\x50\xa8\x25\x9b\x89\xb9\xbe\x3a\x22\x6e\x39\x71\xdd\xed\x6c\x52\xed\x45\x87\x7f\x51\x32\xfb\x91\xdf\x56\x71\x6c\xb2\x69\xc5\x50\xa4\xb8\x6a\x44\x63\x39\x10\x87\x8a\x19\x61\x47\x28\xda\xec\x0a\x95\x47\x8c\x95\xed\xae\x51\x84\xba\xfe\x85\x04\xff\xd0\x77\xdc\xe8\x33\x37\x1e\xd5\xcb\x88\x62\x27\xf8\x64\x7d\x9d\xcc\xe4\xd9\x67\xe5\x7e\x9f\xfc\x90\x27\x92\xd0\x5c\xcf\x3f\x42\xf5\x79\x51\xc6\xf1\x83\x8f\xff\xf3\x1b\x73\x81\x52\x64\x6a\x92\xf4\xc7\x24\xed\xf7\xcb\x00\xd9\x4d\x86\x98\x37\x5b\xdd\xa2\xbe\x03\xf2\xed\xf7\x91\xa7\xc9\xbf\x19\xf5\xeb\xb5\x9f\xc2\x84\x8a\x2e\x74\xfc\x30\x1a\x48\xaa\x6a\x6a\x79\xd3\xb7\x9f\xac\x96\x9f\x1c\xc8\x7e\xff\x14\x4d\x03\x55\x53\x81\xdf\x5e\xe7\xd3\x07\xff\xba\x2a\x67\x8f\x86\xbf\xcf\x5d\x3b\x52\x35\xda\x94\xfa\x23\x52\xcb\x9b\x1c\x48\xda\x99\x6f\x33\x15\x0a\x5f\x17\x46\xee\xf2\xf8\x6c\x1d\x97\x7f\xd5\x7e\x72\xb0\x9a\x00\x24\xbe\x3d\x9b\x4c\xe2\xf8\xe1\xff\xd6\x22\x90\x41\x98\x85\xd1\xc5\x22\x01\x74\xbb\xe6\x1e\x68\xd2\xf4\x54\x63\x4f\x98\xfc\x2f\x40\xd5\xf2\x96\x0c\x66\xab\xfa\x62\xcc\x0b\x16\x71\x9c\xe8\x0a\x4f\x25\x82\x1c\xf4\x45\x1c\xff\xfd\xef\x48\x42\x0d\xdc\xf8\xfa\x06\x66\x5f\xf2\xfc\x15\x4c\xdf\x26\xbf\x42\x9b\x47\xe8\xe4\xef\x7d\x5d\xf6\x83\x8f\x97\x21\x99\xb0\x2c\xab\x6a\x9d\xe5\xf2\xa3\xa5\x02\x53\xb5\x9b\xce\x93\xfc\x7a\xe4\x68\x88\xc9\x7e\x7f\x8f\xfb\x78\x9b\xe7\x10\x3a\x5a\x17\x1b\x74\x9a\xbd\x40\xee\xf7\xc9\x4b\xdd\xc1\x51\x57\x65\xa2\x86\x8a\xf6\x33\xbf\xdd\x6d\x23\xbd\x2e\xda\x9a\xdb\xf2\x9a\xcb\x08\x98\xc8\x5f\xdd\x97\xdf\xf3\xee\xfc\xda\xda\x56\x9b\xdf\xa1\xee\x55\xff\x16\x1b\xf3\xbf\xea\x33\x00\x91\x83\xcd\x3d\xde\x9f\x0e\x1c\xad\xc6\x69\xe8\x0f\xfd\xb9\x63\xda\xf5\x93\x86\x92\x69\xbf\x77\x06\x32\x6e\x74\x61\x21\xda\x4e\xbb\xd6\x3d\x68\x26\x00\xb1\x2b\xd9\xd5\x08\x34\x4f\x16\xf7\x18\xde\xd6\x00\x84\xf3\xc2\xc9\x90\x66\x31\xa0\x12\x01\xd5\xb6\x60\xec\xa2\x8b\xbb\x59\xe7\x8b\xb5\x3e\x6e\xcd\xcf\xb3\xc9\x98\xec\xf7\x7d\x33\x35\x49\xd2\xdc\xa7\x4d\x96\xb8\x2b\xfc\xcf\x68\x20\x07\xd1\xff\x8c\xbe\xbe\x29\x1c\x08\xe8\xc9\x8e\xc3\x39\xc3\xe4\x27\x64\xbf\x6f\xde\xdf\x3d\xb0\x74\xdd\xa9\xe3\xb1\xbc\x57\xb7\xfc\x15\x45\x31\xa1\x35\x78\xe7\x0e\xee\x9b\xa4\xc5\x41\x9f\x80\x6e\x32\x82\xbf\x23\xca\xbd\x25\x87\x49\xc1\xfa\x63\xfa\x2a\x44\xc8\x34\x22\x6c\x6d\x76\x9a\xb4\x91\x33\x75\xd7\x83\x70\x94\xd8\x9d\x79\x03\x9a\x1a\x4a\x65\x9d\x8f\xb8\xaa\x3d\xc0\xd4\xce\xed\xae\x0f\xf4\x80\xd0\x87\x63\x42\x3a\xce\xeb\x80\x74\x27\x21\xf6\xbc\x09\x60\xf7\xee\xef\x74\xa8\x63\x93\xf0\x06\x7b\xed\xb2\xd8\xc9\xee\x4e\x9b\xd0\x97\x7f\xb9\xd3\x08\x92\x22\x5b\x4a\x9c\xe0\xb3\xcb\x22\x17\x9f\xb9\x3c\xf6\x82\xd1\x1e\xcc\x0e\xf9\xee\x00\xcf\x60\x21\x2c\xa0\x39\x3a\xb3\x40\xdb\x4f\x55\x6d\x43\xf4\xaa\xe8\x3e\xaa\xe2\xad\x26\xda\x0f\x62\x44\xe2\xb8\xa1\xa6\x0e\x22\xa9\x2e\x18\xf2\x81\x6d\x00\x52\x19\xce\xe1\x0d\x7c\x1c\x4e\x10\xbb\x24\x82\x0c\x12\x03\xe8\xf5\x4e\xb2\x0b\x63\xc5\xfa\x54\x2c\x59\x27\x6d\x86\xfe\x66\xba\xe4\x09\xf7\xa0\x13\x83\x1a\x30\xc2\x70\x42\x37\x7a\x30\x42\xa3\xc3\x41\x32\x01\x7a\x57\x9f\x6a\xca\x2d\x66\x5a\xaa\x45\x7e\x3e\x52\x65\x70\xcb\x7f\xed\x6d\xb6\x01\xf3\x19\xc9\xf4\x02\xcb\x69\xde\xf3\x51\xaa\x0c\xc1\xa0\xdf\xc9\x44\xf9\xe3\x14\xaa\x57\x43\x27\x1b\x82\xfb\x20\x44\x0c\x95\x6f\x03\x19\x4e\xcc\x1e\xe8\x49\x8e\x0c\x70\xb3\x4d\xae\x2f\x79\x03\x06\xf9\x8f\x16\x6b\x70\x25\x1c\x2d\xd6\xc4\xa2\xab\x05\x40\x79\x2d\xbb\xd8\xd9\x9c\x3a\xa1\x94\x17\x0d\x14\xec\x1a\x20\x8f\x8f\x9e\x89\x79\x4f\xd6\x1e\xcd\x5f\xcb\x24\x77\x10\xd4\x84\xc2\x9f\xa0\xde\xd4\x97\x72\x2b\xa2\xbe\xd1\xb5\xe1\x0d\xb3\x9e\x00\x70\x4e\x36\x76\x61\xdf\x4c\xfd\xef\xd4\xdb\xc9\x70\x6c\xe4\x62\x3d\x90\xba\x99\xa9\xb7\x97\x49\xb8\xed\x3e\xb4\x4b\xd0\x29\x83\x22\xfe\x90\x75\x9c\xc0\xbb\x45\x26\x16\xbc\x40\xf4\x26\x50\xc2\x63\xbf\x53\x55\xa6\xba\x13\x43\x2e\x60\xab\x57\x57\x23\xfc\x41\xf1\xdb\x36\xed\x82\xc9\x92\xf5\xc7\x87\x83\xf3\xc7\x02\xaf\x07\x03\x54\xe2\x0f\x13\x6b\x76\xa5\xec\xb1\xab\x0b\x07\xd0\x46\x0a\x3e\xde\x36\x58\x95\x18\x28\x09\x3c\x69\x26\x81\x8b\x96\x51\x9e\x8f\xfb\x78\x6f\x81\x18\xac\x20\xcb\xf5\xcd\xc4\xec\x4f\xc0\xd2\x8b\x4e\x1d\x11\x3c\xb3\xea\xae\xd9\x80\x2f\x23\x40\x11\x34\x53\x00\xfe\x0f\xa1\xc2\x35\x67\xaa\x0f\xb2\x14\x5f\x2a\x84\xeb\x24\xe1\x3a\x49\xd4\x3a\x49\x98\x3a\x04\x27\xda\xcb\xf0\x4e\x0c\xc8\x08\x48\x17\xed\x50\x8f\xec\x32\xf9\x11\x59\xc2\xe8\x4b\x49\xcc\x17\x3d\xf3\x45\xd7\xd5\xd3\x7c\x75\x00\xc9\x03\xb7\xa8\x5a\x53\x50\xea\xd8\xc4\xb1\x8e\x6b\xb7\x94\xa0\x7a\xf6\x0f\x77\x98\x3b\xeb\xd8\xa7\xa8\xb5\x6a\x4a\x08\x18\x69\x7d\x32\xf8\x28\x57\x5c\x5a\x6b\x0b\x67\xb4\xd5\xe4\x21\x18\x01\x3f\xd0\xf2\x62\x9b\x89\xaa\x85\x65\x1d\xc4\xf9\xa7\x03\xe5\xe5\xa0\x20\x7e\xa6\xe6\xf8\xa7\xec\xf5\xa5\x3b\xcd\xf7\x7b\x11\xc7\xe6\xbd\x4b\x50\xa9\x5b\x84\xfe\x6d\xde\x33\x50\xc2\x23\x4f\x5f\x74\xba\x8a\xe4\x6c\x86\xe3\xaa\xe0\xd5\xe9\x30\xa7\x25\x1b\x9f\x96\x67\xc2\x57\xc7\x3b\xf1\x66\x4c\xcc\xca\x39\xbc\xe5\x22\x0a\x25\xa1\xf8\xe0\x9a\x77\x3c\xb0\xe6\xe6\x35\xb5\xaf\x37\xc4\x42\xcf\x95\xca\x6e\x97\x40\xa9\x62\xb8\x8a\xc0\x2b\xfd\x7c\x4c\xec\x7b\xea\x6c\x47\x27\x73\xba\x62\x61\x0a\x74\x68\x5f\x33\x9f\x91\x2a\xc9\x69\xb2\xd2\x39\xf5\xb3\x51\x2e\x16\xc5\xae\xca\xaf\xb9\x01\x63\x58\x91\x38\x5e\x60\xdb\xb1\x6d\x85\x9b\xb3\x98\xd7\x81\xd0\x64\x7d\xde\xf8\xf8\x27\x74\x67\xe8\xaf\x9b\x5f\x57\x30\xcf\xcb\x54\x17\x7d\x20\x34\x87\xe7\xb8\x85\xf5\x03\xcd\xe9\x82\xd0\xdd\x80\x79\x6e\xd2\x83\x57\x87\xb8\x33\x02\xcf\x03\x30\x8b\xef\x78\xf1\x1c\x4e\x4e\xf3\x73\x36\x3e\x1d\x0e\x73\xf2\x4a\xcf\x46\xb3\xd4\x66\xf9\xdc\xaf\x36\xfd\x87\x5d\x70\xf9\x74\x16\x45\x73\x4b\x54\x6e\xcc\x80\x5e\x99\x7b\xa2\x5f\x76\xaf\xfc\x79\x35\xe9\xd7\xd1\x30\xf7\xfb\x28\xb2\x41\x40\x72\x83\x06\x6b\x61\x6d\xed\x2c\x34\xe7\x46\xef\x75\x6e\xf4\x2f\x7a\x29\x4d\x03\x76\xc1\x7c\x99\xbe\xc9\xde\x10\xfa\x83\x55\xd0\xbc\x45\xe9\xc1\xea\xad\x66\xf3\xde\x65\x5e\x33\x32\x81\x8d\xde\xbd\xd3\x0a\xca\xad\x99\x8a\x9e\xbf\x7f\xea\x6d\xc9\xfc\xad\x0f\x14\x61\xe1\xef\x6c\x1a\x57\x12\x88\xfe\xb6\xb0\x43\xd8\xf2\x67\xe1\x86\x03\xfb\xcc\x7e\xdf\x3f\xba\x8d\xd4\x1c\x58\x7d\xd9\x25\x1e\x7c\x34\x63\xd1\x4e\x2c\x4b\x7d\xb9\x9f\xe6\xa3\x65\x29\x78\x9a\x8f\x74\x88\xe0\xb4\xaa\xc5\x61\x60\x8a\x89\xcc\xda\xc8\x3c\x77\x97\x60\xd9\x6c\x37\xa7\x72\xda\x17\xe6\x34\xdd\xef\xc5\x08\xf9\x4b\x12\xe4\xa8\x49\x6d\x0c\x39\xdd\x0d\x06\xe4\x14\x9d\x9c\x6c\x1e\x58\xd3\x1c\x8c\x5e\x8c\x25\x4f\xde\x61\xd9\x73\xaa\x4b\x42\xce\x29\x62\xb2\x43\x17\xa6\x27\x79\x22\x68\x05\x87\x4b\xbf\x51\x30\x09\xf8\xc6\x4e\x9e\x03\xa3\x05\xbd\x03\x91\xf4\x27\xbe\x2c\xc1\xa4\xad\x57\x32\x71\xc0\xc5\x3d\x9b\xf7\x9e\xe4\x49\xa9\xf3\x32\xe8\x84\x77\xc6\xcd\x28\x2d\xe8\x15\x17\x86\xa2\x35\xcd\x47\xfe\x0f\x58\x3b\xfe\x4f\x26\x82\x3f\xf6\xfb\xc1\x20\x1f\x6d\xb2\x2f\xcf\x5d\x90\x81\x44\xfe\x2f\xb6\x75\xd8\xdc\x76\x4c\x58\xcf\x27\xbf\xca\x76\xb8\xca\x76\xd6\xcc\xd7\x25\x31\x7b\xd5\xca\x1e\x9f\x8a\x2e\xe2\xb8\x0f\x27\xc3\x4a\x8b\xb1\x61\xef\x24\x76\x34\xd8\x98\xf4\x0a\x6c\xfd\x4f\x30\xbf\xcd\x8c\x5f\xb3\xdd\x14\x16\xcd\x8a\xa4\x9b\x32\xc9\x48\xef\x07\xcc\x68\x4d\x1f\x0b\x4c\x47\xfb\x3b\xa4\xb3\x35\xa4\xb6\x0d\x53\x41\x43\x10\xe2\x16\xff\x3b\x99\xac\xc8\xc1\x1a\xb0\x76\xac\x27\xe4\x37\x31\xeb\x69\x79\xcf\x7a\x5a\x11\xba\x3c\xb2\x9e\x56\xb8\x9e\x6c\x15\xf5\x7a\x0a\x56\xd4\x9f\x7e\x2f\x19\xdb\x17\x45\x74\xf0\x63\x0a\x05\x3b\x66\x2c\x6f\x6f\xcb\x24\x14\x18\xbb\x68\xee\xbc\xad\x22\x0f\xc9\x47\x06\x9e\x90\xd2\x8a\xb0\xdc\x93\x95\x40\xac\x21\x26\x01\xc5\x6b\x53\x9c\x84\x8d\x89\x00\xe1\x39\x37\x04\xdb\xc6\x39\x13\xfe\x1d\x2a\x40\x23\x0e\x7c\x24\x3d\x77\x2f\x40\x92\x38\x77\x43\x71\x66\xc1\xe8\x40\x0a\xe6\x12\xf3\x13\xf6\x92\x13\x85\x5b\xcd\x0f\xb2\xc6\x31\x80\x83\x7a\x8f\x68\xf3\x83\x15\x6d\x28\x9a\x0b\x3b\x41\xfe\xcc\xd4\x93\x60\x57\xd7\x2f\x2f\xc7\xee\x07\x81\x87\x4f\x12\x84\x9f\x87\x96\xb8\xd6\x06\xc2\xc3\xf1\xd9\x92\x9c\xa1\x58\xa3\x2c\xd7\x63\x41\x49\x3d\xa8\x56\x4e\xa8\x32\x36\x2b\x78\xdb\x42\xf0\x6c\xb0\x59\x01\x43\x53\x53\xc9\x41\x4e\xdd\x4d\x04\x8e\xac\xd9\xc6\x62\x1d\x93\x79\x53\x9c\x3e\x38\x7c\x11\x5f\xe9\x9e\xcb\xea\x1c\xb0\xd5\x4c\xa1\x5e\x46\x5f\xf2\xa4\x04\x28\x81\x06\xd2\xb6\x2d\xcf\x9d\x6d\xed\xe2\x08\x55\xc6\xd8\x61\x09\xdc\x89\xb5\x43\x9a\x22\xb2\x82\x39\xf5\x70\x52\xb5\x3c\x9a\xae\x3d\xd4\x78\xe8\x13\x0d\x86\x76\x90\x55\x06\x17\x34\x5a\xb1\xfe\x84\xee\x8c\xeb\xf9\x71\x14\xf6\x1d\x7b\x94\x27\xcf\x44\x82\xc0\xe1\x96\x47\x94\x0a\x94\x30\x77\xc6\xa5\xbc\x43\xb8\x64\x2c\xb7\xa8\x6e\x0e\xd9\x9b\x81\x8f\xc3\x81\x90\x9e\xa8\x9b\xe3\x84\xad\x04\xa7\x22\x55\x26\x9c\xf4\xd6\xba\x50\x3d\x1f\x1f\x83\x06\xfe\x68\x25\x5d\x6d\xca\x8e\xfb\x2b\x6d\x2b\x52\xdf\x00\xb2\xc8\xb9\xab\xe0\x2b\x7b\x0c\xba\x10\xc6\x69\x23\x96\x29\x1f\x12\x80\x24\x54\xa0\xc3\x00\x75\x90\x45\x35\xa9\x83\x59\x02\x40\x52\x0f\xee\x26\x42\xe5\x5c\xfa\x37\x53\x1f\x66\x3b\x16\x0d\x3d\xfe\x36\x36\x08\x10\x45\x63\xfa\x27\xd8\xd9\xc3\xd2\x5e\xc0\x7b\x6a\xb4\xda\x15\xc5\xf4\x77\xf0\x6e\xc3\xe0\xbe\x31\x67\xdc\xef\xdb\x82\xd5\xca\xc1\xe6\x13\xf8\xc6\x94\xeb\x07\xb1\x20\x29\x38\xde\x9b\xf0\xc8\xb0\x95\x86\xe7\x9d\x05\x98\x21\x74\x55\x0b\x41\x4c\x9c\xd5\x7e\xbf\xb0\x8e\x24\xb8\x2c\x40\x40\xcd\x6a\x57\x56\x33\xc1\x53\x37\xd5\x5b\xcb\xa0\xb7\xb2\x0f\x36\x0b\x77\x39\x5c\x13\x7d\xf2\xb9\x4e\xf6\xd8\x36\xa0\x57\x6a\x06\x06\xb7\x8c\x35\x39\xdc\xa7\xed\x03\x83\x63\xdc\x00\x15\x15\x24\x5d\xe7\xe6\x95\x89\xfe\x06\x97\x5b\x9a\x95\xe1\xa6\xfa\x42\x86\x9e\x49\x5a\x6c\x86\x4b\x8d\x24\x74\xcb\xe1\x9e\x73\x36\x76\x96\x7b\x3d\xc1\x24\x95\xac\x3c\x74\x3d\xb6\x82\x25\x48\x60\x3f\xa7\x57\xf4\x4b\x2f\x62\x4b\x10\xad\x4d\xbf\xd9\x0e\xca\x0f\x81\xda\xe0\x67\x79\xbf\x8f\xd4\x1f\x75\x2e\x04\xc0\xf7\x97\x16\x5d\xa4\xb2\xe8\xca\xd6\x42\xc0\x76\xa1\x7b\xe1\x9e\xb6\x42\xd2\x2e\x7b\x72\xba\x63\x4b\xb0\x96\x2b\xd8\xdd\xa1\x97\x0f\xe5\xf9\x0e\xe0\xab\xe4\x60\x67\x27\x4e\x68\x1c\x30\x28\x54\x02\xf6\xa8\xf2\x2c\xa3\x6b\x96\x9f\x2f\x86\x80\x6c\x2f\xcf\x2a\x52\x04\x26\x52\xab\xe9\x38\x95\xee\x04\xc9\xcf\x2b\x7b\x7d\x5b\x06\xde\x1e\x34\x59\x4f\x17\x69\x4e\x86\x3b\xd2\x5b\xf6\x99\x5e\x83\x61\x1e\x4b\x54\xd2\x6d\xef\x6f\x2a\xd0\x65\xb5\x83\xda\x8d\x05\x2b\x84\x0d\x5b\xeb\xd6\xea\x83\xc8\x6e\x46\xab\xfc\x0b\x5f\x3e\x87\xe3\x77\x5a\x3a\xdb\xdd\x00\x96\x37\x1d\x13\x7a\xcd\xc4\x50\x9d\x6f\x1c\x77\x2e\xc8\xdc\x6a\xb0\x21\x54\x9d\x4d\xc6\xd3\x22\x34\x79\x1a\xa7\xea\x6c\x5b\x0f\x0a\xac\x2f\xd4\x30\xb9\x9e\x8e\xd3\xc9\x98\x90\x54\x9c\x6f\x06\xdb\xe1\x77\x41\xbb\x11\x46\x6f\x60\x93\x0c\x37\x84\x06\x5e\xc3\x1f\xdc\xe5\xc3\x59\x2d\x19\x6b\xa2\xfd\xfe\x17\x99\x70\x8b\x0c\xa7\x82\x85\x16\xe4\xeb\x59\x20\xdb\xfd\xd7\xb0\x3e\x6b\xa7\x21\x03\x65\xb3\x97\xad\xec\xf5\x70\x75\xe6\x8e\x13\xb1\x66\xab\x92\xb6\x52\x90\x41\x48\xec\xf2\x6f\xd0\x97\x43\x73\x42\x22\x7f\xb4\x09\x4c\x08\x95\x4c\x51\xc1\xd4\x7d\xcc\x23\x6a\xb4\x58\x4f\xbd\xbf\x8a\xfe\x73\x38\x21\xa9\xfe\xae\x1e\x0a\x7e\x61\xcd\xfa\xbc\x2b\x2b\x56\x5b\xc4\x88\x65\x97\xfa\x02\xf1\x11\x04\xed\xd7\x5e\x43\x24\xb5\xc8\x76\x69\x7f\x1c\xec\x36\xbf\xc8\x36\x1c\x7a\x50\x0c\x02\xa2\xdf\x75\x55\xc0\xb9\xda\x4b\x86\x04\x2c\x46\x57\x21\xec\x9f\x5a\xa0\xc8\x1b\x50\x87\x48\x92\x44\x45\x13\xea\x10\x08\x92\x80\x48\x70\x4b\x86\xca\x60\xf3\x85\x6e\x54\x60\x7b\x4e\x0d\x02\x7f\xcd\xc1\xca\x60\x1e\x0a\x87\x79\xa8\x3a\xa0\xfd\x9c\x53\x28\xac\xb1\x3c\x18\xd9\xa0\x2f\x9e\x77\x20\x7e\xa0\x1f\x68\x68\x11\x17\x65\xcb\x65\x44\x68\x54\x6d\x32\x69\x38\xe9\x92\x72\xb4\x29\x97\x1c\x60\x6d\x84\x9a\xe6\xac\x42\x6c\xb2\x54\xb2\x68\x2b\xf9\x75\xe4\x9d\x02\x9a\x9e\x6b\x15\xbb\xd1\x97\x49\x45\xe8\x8e\x2d\xca\x04\xd5\x9b\x78\x1b\xc9\x48\xaf\xc2\x3b\xfb\xa3\x95\xe2\xba\x98\xf0\x4f\x63\x83\x75\x6d\xc8\xb9\xf1\xc3\xd1\x06\xcc\x61\x1f\xfc\xeb\x63\xf5\xed\x03\x32\x1b\x23\x4c\xcc\x7e\xff\xe0\xe3\x85\x79\x12\xc6\x74\xc4\xbc\xdc\x07\x4d\x48\x0a\x56\x6b\x45\x92\x53\x93\x27\xfa\x33\x2d\x9c\x8c\x69\xb3\x60\xac\x2c\xf7\xfb\xe2\x1c\x9e\x57\x40\xd9\x60\xf5\x6c\x3d\xdb\xee\xc3\xc1\xb0\xab\x8f\xa9\x64\x91\x28\x55\xd4\xc3\x08\xc6\xe4\xb4\x60\xea\xbc\x44\x29\x7a\x8a\xfe\x79\x25\x55\xc3\x09\xa9\x75\x41\x3a\x4e\xa1\xc3\xf1\x83\xdd\xc0\xf7\x20\x56\xf3\x67\x91\xab\x34\xaa\x76\x97\x4a\x66\xe0\x2e\x08\xc9\x86\xdd\xc9\x04\x40\x52\xf9\x43\x52\x02\xa9\xf8\x6e\x20\xf5\xe1\x12\xec\x80\x85\x75\xc7\x8a\x22\xba\x66\x86\x3f\xb5\x9e\xe1\x87\x5c\xad\xdf\x67\x97\x5e\xad\xb9\x0c\xbd\x48\x8a\x07\x19\x39\x5d\x9e\x0e\x87\x4b\xb2\x1e\xb0\x8c\xae\x06\x2c\xfa\x88\x5c\x86\xeb\xb3\x22\x8e\x93\xd5\x80\x6d\xcb\xa4\x18\xae\x09\xa1\xab\x3e\x5b\x58\x09\xf6\x85\x4c\x4a\xba\x02\xbf\x35\x43\xc6\xad\xa8\xef\x79\xcf\xba\xdc\x9a\x09\xb4\x3f\x86\xfb\xdd\x92\x8d\x4f\x97\x67\x65\xc7\xa3\xc6\xd2\x3e\x6a\x6c\x59\x18\x3d\x5b\x22\xb7\x67\x8d\x19\x33\x8e\xb7\xf6\xba\xe9\x0c\xbb\xc9\xdd\x07\x7d\xed\x58\x52\x73\x83\x5d\xb3\x46\xed\xd6\x84\x58\x1e\xc5\x00\xf0\xaf\x65\xb9\xa4\xf4\x4d\xc1\x1a\xd8\x34\x47\x44\x4d\x4b\x00\xcb\xa0\x2f\xcd\x63\x40\x0a\x5c\x3d\x0e\xde\x2c\x47\x7d\x7c\x22\x92\x92\xe6\xc4\xe9\x11\xcc\x2d\x35\x07\xda\xa2\x60\xa7\xfe\xb1\xf5\xee\xe3\x5e\x5e\xed\x15\x5d\xb0\xd9\x9c\x22\x8a\xab\x03\x09\x02\x30\x57\xfb\x4d\xc9\x54\x22\x67\xf9\x9c\x9c\x7a\xc7\x8e\x2d\x4f\x4a\xbc\x51\x6c\xca\x44\x10\xf3\xe0\x75\xea\x20\xdf\x50\x01\x65\x5e\xc4\x32\x4c\x59\xba\x17\xb3\x3b\xfc\xc9\x30\xc2\xf6\x99\xd1\xf5\x95\xe4\xf0\x5b\xc3\xd9\xce\x6b\xce\x03\xad\xa9\x3a\x67\xe3\x53\x35\x1c\x92\x17\xd2\xc8\xdc\x51\x44\xc5\x4c\x19\xb5\x29\xfc\x52\x25\x8d\x06\x4b\x5e\x70\xa5\xa5\x67\x38\xb6\x42\xf9\xee\x9b\x0e\xf9\xce\x1c\x3d\x80\x7e\xb2\xa6\x15\x93\x14\xd1\x4b\x68\x59\x63\x33\xb2\xf6\xbe\xb4\x62\x49\x3e\xdd\x65\x69\x91\x11\x7d\x59\xa3\xd2\xb2\x33\xe1\x78\x55\x78\xff\x06\x09\xb6\x1c\x48\x62\xaf\xdf\xfb\xbd\x38\x67\xdc\xc1\x24\x55\xf9\x9f\x7c\xbf\x4f\x4a\x26\x68\xdf\xc0\xa5\x50\x41\x48\x60\x25\x98\xb1\x7c\x9a\xc8\xb3\xf1\x54\x66\xa9\xd2\x65\x91\x54\xff\xb5\x0b\xef\x1f\xe9\x18\xb7\x9b\x8c\x55\x3d\x87\x38\xa3\xf7\xb9\xc5\x3a\x93\xe0\x49\x5a\x84\xd4\x78\x8b\xb2\xd8\x6d\x84\x09\x07\x58\x02\x1b\x73\x53\xca\xa5\xe1\x14\xbc\x92\xe5\x6e\x0b\x69\xec\x28\x2c\x70\xbd\xad\x98\x8f\xa3\x6b\x16\x28\xb4\xae\xb8\x7a\xc1\x8b\x2d\x97\x89\xa2\x90\x15\x30\x4b\x46\x84\xea\xfb\xdc\x69\x5f\xb7\x82\xec\xf7\x45\xd2\x5f\x92\x53\x40\x22\x37\xab\x72\x57\xa3\x43\xca\xc8\x7e\x1f\x7d\x14\x11\xdd\xb0\x47\x65\xb2\xa5\x6b\x32\x8d\x6e\xa2\x74\x15\xc7\x3a\x94\xb1\xed\x34\x12\x51\xda\x5f\xe9\xcd\xbd\x32\x9b\xfb\x96\xe0\xf2\x88\xb6\xb0\xd5\xe8\xc8\xe5\x7e\xbf\xd9\xef\x93\x0d\x8b\x74\x0d\x16\x71\xbc\xe8\xb3\x0d\xb9\xb3\xc2\xfa\x84\x16\x89\x5b\xb6\xf9\x2a\xd9\xc4\x71\xb2\x60\x1b\x42\xe5\xf9\x38\x8e\xfb\x50\x49\x83\xbc\x0b\xd6\xef\xec\x1f\x1c\xd9\xab\x4a\x9a\x11\xaa\x68\x15\x58\x9d\x9d\x00\x3f\xf0\x35\xd9\xef\x93\xeb\xd1\x3a\x57\x17\x96\xb1\xec\x3a\xc0\xa9\x3c\x76\xc4\xc2\x8c\x2b\x0c\x14\xb1\x23\x75\xb4\xac\x60\xa1\x19\x70\x27\xf1\x96\x01\xc7\xfe\xef\x11\x71\x7b\x86\x56\x71\x20\xbf\x4d\xaa\x21\xcc\xb4\xc9\xe8\xfb\x74\xf4\x3d\xf9\xb6\x76\xcd\x41\x7f\x5a\x47\x6d\x89\x37\x91\xf3\xf1\xd4\x61\xf3\x7e\x97\x22\x18\xee\x77\x9e\x35\x0b\xbd\x9d\x9e\x18\x66\x33\xc3\x5d\x66\x39\xdd\xb0\x77\xf1\x86\x32\x9e\xe6\x67\x6c\x9c\xe6\xe7\xac\xb4\x18\xef\x77\xbb\xa0\x2b\xed\x38\x0d\xd8\xf7\xdf\x3a\x3c\xab\xdd\xe1\x22\xe4\x57\x5e\x94\xa2\x52\x72\xb7\x50\xa5\x4c\x2f\x0c\xb3\x4e\xb0\x97\x34\xd0\x6e\x0c\x5d\x7a\xa7\xa7\x51\xc5\xd5\x5b\x38\xf3\x1a\x6c\xd2\xd7\x9e\xda\xdb\x9c\x89\x54\x30\x39\xe3\xf3\x9e\xfe\x1f\x9c\x1e\x91\x16\x24\xa2\x3e\xd3\x8b\x1a\x02\x15\xfd\x87\x1c\xad\xb3\xea\xed\x8d\x78\x27\xcb\x2d\x97\xea\x16\xdc\xc3\x0c\x41\x3c\xfd\x87\x4e\x85\x04\xf1\x70\x35\x26\x07\x7a\xd5\x51\x7c\x9d\xcb\xd9\x94\x3e\xe3\x73\x48\xfd\xa4\x5c\x1c\x63\x7d\x5e\x96\x8b\x03\xcd\x96\xcb\x1f\xc1\xd4\xb3\xc9\x8e\x0d\x70\xa1\x35\x93\x53\x35\x8d\xf4\x66\x1c\xa5\xd1\x4e\x80\x21\x49\x34\x4f\x36\x02\x9d\x50\x51\xa5\xd0\xca\x29\xdc\xa6\xdb\x39\x36\x89\x6b\x06\x03\x09\x2c\xab\x33\x39\x67\xba\x97\x80\x2d\x48\x64\x1b\xce\x18\x0f\xbc\xc6\xe0\xb5\x2d\x91\x74\x42\x68\x7f\x0c\x2d\x78\x7b\xcd\x65\x91\xdd\xa6\xdf\xa8\xa4\x6b\x54\xf8\x48\x95\x9f\xb9\x98\xf2\xf4\x42\xef\x43\xaf\xcb\xa5\xe1\xc9\xb6\x23\x85\x56\x62\x12\x59\x05\x2e\x74\x15\x89\x5a\xcb\xf2\x06\xf4\xd2\x4f\xa5\x2c\x65\x12\x99\x32\xaa\x93\x4d\x76\x7b\x22\x4a\x75\x72\xc9\x4f\xa0\x35\xab\x5d\x31\x8a\x48\x2f\x68\x5e\x69\x92\x9a\x87\x10\x3d\xec\xa9\xa4\xfa\x9f\x8b\x2d\x5f\xa4\x9c\x96\xdb\xec\xdf\x3b\x9e\x2a\xe4\x31\xd1\xbf\x0f\x16\xa0\x15\x32\xd0\x49\x9f\x73\x31\x18\xd0\xdf\x2d\xac\x2d\x31\x5d\xdc\xd9\xd4\x23\xdd\x6c\xeb\xd1\xd5\xcf\x96\xcf\x5c\x77\xb1\xad\x19\x9c\x50\xd0\xf3\x2d\xcd\x09\x8f\x63\x71\xff\x50\x74\x56\x1f\x1e\x8f\x5c\x1b\x0e\x84\xa2\x9c\x08\x94\x58\x8d\xc1\xd2\xd7\x63\x5b\x6c\x3f\x50\xd8\x58\x69\xa8\x5f\x57\xe2\x98\x9b\xf4\x34\x1c\xc7\x11\x88\xee\x2f\xf1\xbe\x61\xe4\xf8\x14\x45\xeb\x54\x4d\x41\x62\x0e\xa4\x62\x42\x9f\x71\x67\xdf\x08\x1e\xb1\xcf\xa5\xb1\x6a\x84\xda\xb8\xda\x3a\x8b\xd3\xaf\x74\x7a\x43\x86\x92\x0c\x6c\x75\xee\xc7\xe7\x5b\x25\xb9\xa3\xae\xcf\xbd\xb4\x79\xae\x85\x70\x5b\x9d\x20\xdc\xf8\xdf\x4a\x16\x86\x09\x56\x2f\xdf\x3d\x80\xc4\xf1\xbf\x31\x0b\xf3\x2a\x60\x89\x1b\x2d\x9c\x43\xc6\x72\x04\x6d\xa8\x02\x7e\x17\xab\x15\xed\x05\x3a\x53\x04\x2a\xf6\x48\x1e\x46\x23\x9a\x64\xfa\xc2\x3e\x4e\x27\x84\x0c\x26\x81\xcb\x75\x75\xba\x3b\x93\xf0\xf4\x6f\x9b\xb0\xa3\xdc\x29\x57\xdb\x5d\xd5\x1b\x33\x80\xe8\x04\xec\x40\x87\xfe\x66\xc5\xca\x62\x26\xe6\xa6\xc6\xa3\xc5\x5a\x9f\xc0\x1f\x82\x71\x13\x56\xf2\x2e\x29\x24\x04\xd2\x7d\x54\x1e\x1e\x88\xde\x00\xdf\xeb\xa5\xff\x48\xa5\x5d\x76\x6c\x27\xbf\x0a\x37\xe2\xb8\xb9\xea\x06\xc2\x17\xd5\xfd\x1f\x2c\x79\xc2\x89\xb1\xf8\x74\xa5\xbc\xbf\xdd\xf2\x5a\x49\xe4\x8e\x83\x1f\xaf\x9f\x64\xa8\x1a\xa1\x92\xf1\x1c\x33\xba\xc9\x83\x68\xcb\xe2\x2b\xd8\x98\xe6\x2c\x91\x1e\x56\xf2\xc1\x43\x90\x09\x90\x2a\x56\x77\x17\x51\x4c\xce\x1e\xce\x51\x3c\x0b\xcf\xd4\x8c\x89\x41\x7e\x7e\x0e\xb4\xa4\x49\x36\x95\xb3\x87\xdf\x66\xc3\xc9\x3c\x1d\x93\x73\x56\x92\x9c\x65\xce\x6d\xb7\x9f\x40\xe4\x60\x32\x3f\x2b\x09\xb9\x83\x0c\xbf\xcd\x06\x0f\xe7\xe6\x44\x15\x2c\x1b\x4c\xf0\x29\xa6\xd2\x2b\x0d\x01\x6a\xdf\xae\x00\x68\xd0\xec\x2d\x27\x11\x49\x87\x13\x2b\xeb\x54\x67\xe3\xa9\x4a\xc7\x8c\x55\x28\x72\x29\x87\x94\x52\x0d\x27\xd8\x51\x7a\xf3\x6d\xf4\x51\x63\x09\xe9\xdd\xc3\x3b\x83\x80\xd4\xa2\x3f\x9a\x5e\xf8\xdf\x89\xc1\xcb\xf6\xc3\x9b\x70\x82\x9b\x0f\x81\xef\x53\x05\x85\xa1\xc4\xd9\x3d\x92\x36\x03\x4c\x83\xb4\xc4\xb3\xf1\x3c\xf8\xae\x39\x05\xac\x8d\x1c\x88\x2a\x99\x68\x9e\xdc\xce\xc3\xe4\x44\x1a\x3b\x87\x4c\xdf\x37\x68\xce\x6c\x51\xd8\x76\x63\x93\xdc\xda\x62\xf3\x99\x9a\x13\x31\xd3\xff\xcc\xe3\xd8\x9a\xd4\xe1\xdf\x5e\x0c\x87\x54\xfe\x16\x36\x3e\x2d\xcf\x74\x90\xdd\x60\x4a\xbb\xc1\x64\x0c\x3f\x9d\x95\xf3\x79\x2f\x73\xf9\x65\x16\x4b\x79\xb4\x86\x36\x22\xae\xa5\x98\x85\x7f\xcf\xa7\xbe\xf0\x30\x98\xa4\x3a\x40\x1f\x02\xb5\xfa\x61\x08\x0a\x76\xd6\x56\xe8\xd3\x55\x51\x5e\x66\x45\xab\x56\x15\x73\x71\xb3\x72\xde\xab\x46\x5b\xc9\x97\x49\x0e\xa3\x49\xe2\xd8\xa0\xf1\x4a\x5a\x8d\xae\xb3\x82\xb8\x52\xf0\x4f\x8f\x55\xaa\xc7\xe8\xc2\x5d\xf5\x8f\x4b\x62\xcb\x72\xe1\xa6\xa6\x91\xa9\x12\xce\x5e\x82\x21\x24\x6a\x3d\xa7\xd2\x5c\xb7\xa4\xe1\xea\x4d\xb9\xde\xcc\x60\x3b\x40\x75\xe1\xe3\xb2\x94\xcb\xee\xa9\xd0\xda\x75\x01\xae\xcc\x96\xf8\x93\x29\xd1\x97\xa4\xb7\xec\x34\x2a\x2f\xff\x40\x0c\x27\x7b\xb4\x4e\xeb\x5b\x44\x0a\x95\x82\xfd\x2e\x95\xb8\x3f\xab\xfd\x1e\xa5\x7f\x5d\x2b\x30\x26\xef\xa8\x93\x29\xf6\xbd\x29\xb6\x9e\x69\x3d\x0b\xf8\x5c\x5f\xc0\xba\xb3\x78\xe2\xfb\xea\xb1\x72\x1b\xa4\xcb\x00\x11\x33\x29\x07\xbd\xe4\x01\x70\x6b\x1f\x59\x0e\xce\xce\xfc\x7c\x36\x48\xb9\x46\x81\xc0\x62\x7c\x08\xf2\x04\x4d\xe7\xdb\x70\x2f\x1c\xd4\xa4\xf0\x80\xad\xf9\x40\xf1\x16\xf0\x08\xc5\x88\x8e\x81\x01\xbe\x6e\x58\x63\x4d\x4d\x0a\x77\xa7\xaf\x1d\x3a\x1c\x7d\x3f\x92\x48\xe9\xcc\xcf\xea\x09\xa6\xbc\xf1\x45\xca\xcf\xc1\x33\x8c\xe5\x48\x35\x4e\x25\xab\xed\xe4\x66\x99\x49\xe6\xb6\xb2\xcf\xa6\x0b\x24\x76\xc2\xf8\x48\x27\x0c\x12\x31\x75\x45\x61\x43\x87\x9f\xf3\x44\x92\x54\x9f\x34\x4b\xbe\xca\x76\x85\xf2\xf8\xb8\x1d\xb2\xfd\x1f\x2a\x09\xbb\xce\x7f\xe5\x70\x76\x3b\x3e\x7a\xd9\xfa\xa8\xe2\x0a\x5f\x57\x90\xbe\xa3\x4b\x5c\x33\xdf\xfe\x26\x83\x86\x3b\x93\x88\xd6\x03\xb0\x60\xdc\x3c\xd3\x18\x42\x10\x78\x41\xac\x85\xb0\xbb\x83\xa7\x39\x9f\xa9\x39\x93\xb4\x2f\xe3\xf8\x6d\x99\x08\xf4\x62\xac\xa7\x36\x38\xe1\xe3\x83\x96\xd5\xc0\x34\x09\x6b\xdc\x94\xd3\xae\x1b\x78\xad\x5a\x6c\x60\x66\xe1\xf7\x24\xbe\x62\xbb\xf4\xba\x5d\xf5\x72\xf4\x36\x54\x0b\x98\xe9\x0d\x30\x69\x07\x1a\xcf\x40\x99\xa8\xd0\x34\x84\xbe\x2d\x9b\x69\x49\xfb\x73\x03\xc5\x4e\x07\x03\x01\xcd\xd1\xab\xea\xa5\x58\x95\x69\xe3\x85\xbf\x6b\x4a\xeb\xf3\xa8\x2e\xcb\xb6\x90\x7f\x15\xe3\x06\x9f\xb6\x31\x4f\x6b\x49\x0f\x56\x34\xc0\x3d\x2b\x51\xec\x11\x00\xbf\xd6\xd2\x58\x7a\x77\xbd\xf8\x14\x45\x37\xbe\x94\xe3\x93\x29\xda\xce\xd3\x5a\xcb\xd2\xc6\xb0\x41\xca\xc7\x45\x56\x55\x26\x39\xfc\xa6\x97\x57\x36\xcc\xfc\xa2\x37\x32\xdb\xda\x30\xf7\x9b\xde\xe4\xcb\x2b\xae\x20\x0c\x7f\x1d\xe0\x38\xf8\x25\xe7\x37\xdb\x52\x76\x2c\x08\x63\x27\xd2\xdc\x4d\x9e\x59\xd3\xee\x66\xc4\xfb\xf2\x00\x97\xca\x0f\x90\xfd\x71\x64\x4c\x9a\x51\xc0\xbf\xa4\x0b\xba\x62\x61\x2e\x74\xcd\x12\xce\x7e\xea\xdc\x87\x09\xb1\x4f\x33\x4b\xc6\x9d\x6a\x47\x19\x6a\x40\xcb\x26\xc4\x22\xcb\x26\x04\x14\x9e\xf7\x63\x4d\x53\x84\x84\xee\x54\x5b\x54\x5c\xfd\x2c\xf8\x32\x57\xd9\x65\xc1\x81\x03\xdd\xf0\x2c\x85\x64\x40\x8a\xd0\x08\x9c\xc2\x18\x13\x64\x0d\xb7\xe5\xad\x57\xfb\x65\x97\xe5\x35\x37\x7a\x3f\xc1\x8d\xca\xd0\x28\xe7\xdc\xad\x61\xd5\xad\x79\x6a\x6c\x64\x1e\x34\x10\x3e\xc1\x9a\xd4\xe0\x0d\x02\xf0\x91\xd0\x03\xff\xb4\x56\x0d\x6e\xb5\x4a\x75\x9a\xed\xf3\x2d\xa8\xbe\x55\xb9\x3d\xaf\x47\x4c\x4d\x9b\x86\xf5\xe0\xf4\x48\x3e\x67\x6c\x1b\xc7\x89\xfe\xc6\xbc\x9d\xd1\xa5\x4b\x81\x98\x0c\x9b\x38\x4e\x96\x6c\x33\xac\x85\x92\x83\x1d\x45\x55\x6e\x99\x67\x6a\x85\xa0\x02\x30\x35\xcc\x1f\xf0\x5a\xc7\xa2\x88\x46\xf0\x2b\x62\x2c\x9f\x26\x4b\xd6\xd1\x21\xf5\x12\x68\x23\x83\xf1\xf6\x4b\x44\xd2\x24\xd2\x99\x43\x26\x4b\x36\x4e\xa3\x0d\x60\x9f\x45\xe8\x01\xb0\x64\x5d\xfd\xdc\xa8\xf8\x83\x87\xa4\x5e\xd1\x25\x54\x1e\x5d\x0e\x4a\xdc\x37\x33\xb6\xa4\x15\x5b\xd3\x1d\x6b\x74\x06\x2d\xd8\xba\xd1\x81\xe6\xb9\x39\x59\xb0\x9f\x65\xe2\x96\x09\x21\x21\x89\xda\x56\xc7\x2c\x9a\x5c\x7b\x7d\xd6\xa2\xba\xf4\xa9\x90\xeb\xee\x40\x95\xcc\xaf\xae\xb8\x7c\x2b\x7e\xe4\xb7\x4f\xca\x1b\xb8\x95\x3f\x92\xa4\x16\x0e\x4e\x74\x3a\xe2\x73\x23\xe2\xe7\x6d\xfa\x56\x52\xfe\x85\x2f\x1e\x97\x9b\x4d\x26\x96\xcd\xfd\xb5\x68\xc9\xf5\x7e\x37\x2d\xc4\x8c\x87\xc4\xcf\xa8\xd5\xb0\xf9\x3f\x2d\xf8\x42\xc9\x7c\xd1\x3c\x7d\x9e\x72\xe7\x2b\x49\xe8\x2a\x17\xcb\x77\x65\xf5\xa2\xb5\xad\x58\xc1\x64\xd2\x53\xa0\x85\xce\xd9\x70\x42\x15\x1b\x06\x16\x8a\x25\x1b\xd3\xac\x71\x9f\x3c\x2d\xcf\x00\x41\x20\x63\xdf\x04\xa7\x70\x46\x73\xc8\x93\x58\x35\x29\x58\xed\x9f\x3a\x9a\x38\xba\x29\xaf\xf9\x8b\x63\xea\x32\x70\xde\x94\x06\x52\xd6\xe3\x1d\xfd\x70\xeb\x53\x0b\x77\xf8\xcb\x26\x16\xad\x84\x05\x8f\x1f\x83\x35\x33\x6a\x37\xa6\xdf\xc8\x44\xe2\xd1\x8b\xce\x40\xd0\x6e\xef\x8c\xa8\x8a\xd7\xe5\x35\xff\x25\xaf\x76\x59\x51\xdc\x92\x94\x9f\x8d\xa7\xc2\x8a\xc1\x02\xc4\xe0\x03\xdd\x95\xba\x0f\xf1\xed\xe6\xde\xea\x3b\x28\x6e\x11\x5c\x04\x46\x55\xb9\xe1\x6a\x9d\x8b\x2b\x6c\x14\x5f\x26\x64\x2a\xee\xf1\x2b\x76\xaf\x44\xe9\x8f\x46\x8f\x11\x4a\x09\x38\x5e\xdf\xc8\x44\x50\xe9\x9b\xd4\x9f\x38\x09\x46\x37\x01\x0f\x9f\x1c\x7c\x29\x20\xd1\xc1\xb8\xcd\x98\x4f\x54\x99\xe6\x87\x43\x30\x33\x7e\x39\x3e\x33\x68\xc9\xc4\xf1\xd9\x91\xb1\x31\xad\x9a\xb3\x23\x3b\x53\xa7\x83\x41\x66\xb5\xed\xf6\x4c\xaa\x28\x30\xd9\x05\x4f\x52\xe5\xb4\x64\x3b\x58\xfd\x29\xfe\xc3\x4a\x9a\x54\xec\x9f\x4e\x7f\x93\x53\xe9\xa7\x53\x9d\x76\xb0\xc2\xf9\xf4\xcb\x7d\x03\x12\x0c\x84\xe5\x84\xea\x37\xa6\x0e\x9a\xa0\xc3\xbc\x89\x63\xb4\x54\xec\x18\x30\xa8\xf2\xbd\x73\x33\x43\xdc\x1b\x12\x8c\x42\x66\x27\x52\x06\x13\xc9\x98\x62\xfd\xa4\x12\x49\x33\x8b\xbc\x05\xfd\x61\x21\x4a\xae\xca\xac\x78\x0c\x2f\x61\x60\x60\x00\x1d\x12\x86\x12\xcb\x4c\x65\xe8\x26\x11\x04\x5e\x77\x97\xa4\xa8\x4d\xb2\x6f\xb9\xe6\xd1\x46\xc5\x71\xc6\x98\xa8\xdf\x14\xe3\xf8\x83\x34\x57\x51\xfa\x5e\x57\x66\x67\xea\x01\xa7\x15\x52\x5c\xd2\x1d\x4c\x7b\x6a\x3d\x6a\x02\xdf\x9b\xf1\x69\x76\x26\x3a\xde\xb4\xb3\xc1\x80\x84\xe1\xb3\x6c\x1e\x54\x9d\xe5\xb3\x6c\x6e\xe6\x1b\xe2\xc6\x76\x28\x63\x3a\xb4\x52\xc6\x88\x10\x94\x50\xd6\x05\x11\xed\x60\x82\x1b\x95\x7f\xe5\xe3\xb5\x57\xbe\xd3\x84\x1b\xc8\xf9\xfd\x5e\x80\x13\x1f\x36\x26\x8e\xe5\x74\x38\x94\xe9\x60\x20\x82\x6d\xce\x3d\xf7\x49\x42\x33\xf6\xa8\x84\x67\xed\x69\xc7\x83\xc7\xa3\x12\x2c\x90\x0f\xa9\x7f\xed\x2b\xbb\x12\xfa\x68\x4e\x0e\x1d\x2f\x27\xfd\x30\x41\x1c\xf7\x75\xbe\xe4\x70\x0a\xcf\x7d\x59\xe2\xab\x33\x9c\x10\x72\x4a\x86\x43\x43\xc8\xe6\x15\xbb\xb5\x64\x42\x27\xd2\x72\x7c\x87\x71\x3b\xba\x86\x19\x4b\x76\xd4\xde\xc2\x99\x56\x5e\x5d\x15\xa0\xdb\xbf\x91\xb9\xe2\xb5\x2a\x1a\xeb\xb9\x38\xe6\xac\xa9\xdc\x87\xc4\xfb\x7d\x92\x74\x85\xb3\x7e\x57\x28\x99\xbe\x2a\x6b\x57\x3d\x63\x15\xf5\x24\xbf\xae\xf9\x21\xbb\x0f\x22\x92\xbe\xfc\x4f\xbf\xa0\xff\x34\xda\xcd\xc8\x05\xbe\x87\x16\x46\x14\x1f\xb3\xba\x2a\xa6\x2f\xf6\x86\x40\xfa\xe8\x8b\x55\x4d\xb8\xbd\xe2\xea\x59\xce\x8b\x65\x42\x90\x9e\xfa\x40\x3d\xea\x4d\x3b\x87\x7e\xd2\xaf\xbd\x15\x78\xf7\xf7\xbe\x3b\x31\x16\x99\x50\x4f\x97\xb9\xd2\xd7\x5f\x23\x99\xb4\x37\x35\xa3\xcf\xb1\x36\x7c\x0a\x6c\xf8\x40\x14\xa0\x6e\xa8\x02\xb2\xc3\xd0\x92\xaf\x66\xe9\xd7\x4a\x82\x18\x75\xa8\xb5\xbe\x30\xfe\x1f\xe1\x05\xd0\x82\x25\xd5\xba\xc2\x5a\x4b\xf6\xec\xb5\x0c\xcd\x00\x03\xbb\xae\x26\xcb\xfd\xda\x4a\xbf\x35\xf4\xac\x95\x79\xa4\x19\xd6\x72\x77\xcc\xa3\x14\xf9\x45\x6b\xa4\xf0\xc7\xbf\x41\xc9\x30\xbc\x0a\xa4\x4b\x93\x96\x06\x72\x68\xba\x76\x2f\x43\xb4\xee\xf0\xd2\xee\x75\x77\x52\xf1\x69\xc2\x59\x78\xa7\x6b\xea\xdf\xdc\xc1\x0a\xb7\x55\x1a\x52\x03\xd6\x26\x40\xdb\x1a\x90\x90\xb6\x35\x14\x9f\xf2\xc0\xbd\xc1\x38\x36\x40\xce\xa9\x35\x9c\x5c\x01\x43\x9e\xab\x15\x77\x29\x08\xe8\xc8\x40\xcd\xa1\x4a\x93\x10\xd9\xee\x25\xf8\x14\xed\xf7\x63\x3b\x65\x02\xbf\x0a\x37\x9b\x3a\x26\xc8\xbb\xb2\x62\xdc\xbf\xe5\x48\x2d\x61\xc3\x8a\x0a\x6c\x01\x30\x27\xab\xa1\x6b\xda\x14\x9a\x78\x55\x6e\x31\x1a\x6c\x0b\x79\xcb\xb6\xd0\x24\x93\x86\x5d\x5b\x95\x2d\x1b\x43\x93\xc2\xdc\x66\x21\x89\xb5\x35\xe4\xce\xd6\x10\x17\xba\x35\x37\xac\x99\xf4\xca\x9a\xb9\x21\x80\x19\x5c\xe4\x7f\xb6\x9e\x05\x6b\x42\xa9\xb3\x98\x08\xf6\xee\xf6\x88\xed\xf7\x0f\xfe\xf5\x71\x39\xb0\x78\x41\x08\xc4\xa1\xc5\xf8\x29\x87\x8b\x4d\xca\x0f\x7e\xa1\xca\x96\xed\x04\x5e\x84\x60\xbe\x33\x78\xdd\x0e\xd6\xec\xb1\xd4\xb8\xa6\x18\xc0\x4c\x05\x52\x6d\x68\xe1\x1a\xc7\x5f\x2c\xad\x29\x1e\x98\xb2\xa5\x8e\xe8\xa1\xec\x0c\xfa\xa8\x9c\xca\x86\x56\xa2\xed\x48\x6c\x14\x20\x2d\x27\x62\x13\x6e\xe5\x01\x85\x88\x7d\x2e\x7c\xa6\xe6\x23\x51\xbe\xc0\x99\x4f\xee\xb8\x96\x41\x72\x1a\x61\x6c\x64\xed\x5e\x06\x83\xfc\xa0\xdb\x62\x71\x83\xe4\x82\xff\x8c\x2e\xeb\xfd\xb1\xde\xdf\x25\x8d\x24\x5f\x49\x5e\xad\x23\x6a\x9f\xa8\xf5\x8d\x29\x3b\x66\x9d\xf0\x9b\x72\xf7\x20\x6a\xbe\xac\x0d\x76\xe7\xf6\xd6\xe4\x03\xeb\xd9\xc7\xe4\x70\x75\x34\x2a\x77\x51\x4b\xe2\x66\x9f\xdf\x2d\x82\xbd\xb1\x1e\x06\x17\xd1\x27\xe6\x6b\xbb\xdf\xec\xf7\x1e\xd3\x73\xd8\x54\xae\x92\xf3\xd1\xf7\x24\x8e\xdf\x9b\x6f\xdc\xb9\xd7\xea\x9a\xea\x26\xdb\x3e\x29\x5b\x97\xc3\xfa\xdb\x97\x7f\xf6\x5a\x6c\x50\x99\xf8\x29\xb7\x9d\xd6\x68\x56\x37\x3c\x4a\xbd\xc5\xb5\x63\x20\xa4\xc8\x6f\x75\x1e\xce\x05\xdd\x79\xff\xb0\x2d\x30\x15\xb6\x27\x36\xa1\x0a\x4f\xa6\x97\xba\x40\x38\x77\xff\xd3\x53\x1a\xf4\x74\x1f\x70\xdd\x18\x73\xa3\xaf\x65\x61\x56\xd9\xc1\x1f\x89\x7f\xf9\x53\x7b\x30\xc2\xb7\xa8\x17\xfe\x8b\x5f\x1a\x5f\x82\xc3\x81\x8a\x32\xb9\xc0\xe5\xfa\xab\x64\x17\x23\xa3\x47\xaf\xd8\xdd\x81\xfe\x43\x07\xe0\x3a\x47\x68\x33\xd0\x5e\xfb\x1d\xea\xf7\xc0\xa6\xcb\x7f\x89\x56\x3f\x32\x8e\x13\xb0\xed\x61\x0d\x6a\x2c\x41\xee\x44\x9f\x71\x11\xc7\xc6\x9f\x99\x1c\x52\x89\xee\x14\x5c\xb0\x8b\xd1\x4b\x91\x2b\x76\xa7\x4a\xdc\xd2\xda\xed\x08\xc4\x31\x48\x1b\x1d\x0e\xbd\xdf\x65\x12\x5d\x67\xc5\x8e\x47\x34\x8a\x1a\x2e\xa2\xc0\x97\x07\xe0\x5e\x89\x96\x79\xfa\x63\x42\x75\x72\xb0\x53\xc2\x6b\x49\x33\xbd\x7d\xa0\x45\x23\x24\xa6\xe8\x5b\x2d\x29\xbb\x2f\xbd\x5d\x71\x44\x1f\xd2\xb7\x8d\x70\x6b\x1e\x0c\x40\x30\x10\x1e\x18\x6c\x44\x2e\xb1\xb1\x02\x8f\xe8\xdf\x6a\x5b\xde\xe7\x04\x17\x01\x27\x14\x3c\xaf\x7c\xa9\x35\xd8\xeb\xce\x8a\xc3\xf6\x17\x20\x64\x33\x15\x3e\xe8\x52\x11\x12\x54\xf6\xb8\xdf\x85\xbb\xac\x3d\x72\x36\xb6\x6f\xed\xa5\x05\x8b\xb1\x2f\xe3\xca\x58\xb2\x0d\x27\x8c\x95\xd6\x88\x8d\x95\x03\xe7\x15\x67\x1e\x34\x97\x3c\x11\xb4\x24\xe4\x20\x06\x83\x03\x09\xc0\x17\x64\x03\x01\x20\x0f\x6d\x59\x15\x95\xb3\x7c\x0e\x40\x2e\xb3\x7c\x6e\xee\x12\xfa\xd7\x62\xed\x4a\x40\x04\x6f\xe8\xdb\x2d\x5f\xe4\x59\x81\x37\x30\xfa\x60\xf6\x71\x37\x1e\x8f\xc7\x43\xfd\xcf\x64\xa5\xff\xff\xbf\xe1\xff\xd9\xf2\xe3\xee\xe1\x78\x7c\x39\x84\x7f\x56\xfa\xff\x0f\xff\x0e\xff\xff\x3f\x1f\x77\x2b\xbe\x5a\xcd\x1f\x5c\xd1\xe6\xcb\x8f\x03\x7e\x0c\xca\x00\x77\xdf\x9f\xf8\xd5\xd3\x2f\xdb\x44\x8d\xaa\x72\x27\x17\x1c\x48\xf0\xf5\x21\x1c\x7d\x54\x11\x99\x46\x51\x1a\xed\xf5\x2f\x1a\x5d\x45\x84\xca\xbe\x99\xd3\x71\xcc\x47\x66\xc7\x4c\x48\xbb\xfa\xef\x8a\x6c\xc1\xd7\x65\xb1\xec\x7a\x56\x52\x40\xcc\x5f\x6d\x33\x01\xcc\xfc\xff\x5f\x44\x41\x45\x2e\xae\xb3\x22\x5f\x82\x8d\x6b\x00\x2d\xa9\x72\x55\x70\x16\x7d\xfc\xb8\x8b\x06\x1e\x48\xec\x91\x4a\xc6\xfa\xce\x6d\x24\x85\xc9\xff\x22\x2d\xad\x7b\x26\xf3\x6c\x58\x64\x97\xbc\x88\xa8\xc9\x46\xef\x88\xb5\xda\x84\x6d\x70\x73\x93\x1b\xad\xa0\x19\x06\xbf\x20\xb6\x3b\x75\xa1\x65\x87\x88\x6e\xa6\x91\xa1\x6c\xb4\x9a\xfa\x28\x05\x1f\xc0\x4c\xf2\x2c\xa2\x35\x4c\x99\x86\x51\x9a\xcf\xe6\x64\x91\x09\x30\x4b\x4b\x6e\xb9\x22\x27\x97\xfc\x04\xbd\xf2\x96\x27\xb9\x38\xc9\x4e\xe4\x4e\x88\x5c\x5c\x9d\xe8\x12\x4a\x19\x05\x15\x6c\x68\xde\x22\xda\xbf\xc5\x88\x9b\x75\x59\x00\x67\x35\x9e\xac\x3f\x80\x4b\x7d\xb0\x4a\xd7\x7c\xa3\xf7\x14\xb3\xb5\xd5\x07\xe6\x27\xbd\x4a\xdf\xd5\x16\x29\xda\xfc\x75\x7f\x10\xfa\xd0\x6e\x04\x62\x25\x07\x93\x63\x23\x12\x49\x7a\x79\x1c\xe7\x00\xc6\xbc\x58\xfb\x5f\x60\x12\x4d\xc5\x28\x53\x18\x6e\x7f\x25\x9c\xe6\xfb\x3d\x22\x91\x9b\x81\xb0\x78\x97\xb8\x41\xf8\x9d\xc3\x0a\x68\x7a\x57\x6a\x8c\x67\x97\x1c\x37\x4d\xbe\x0a\x7c\xa6\xc3\xa2\x1a\x80\x36\x68\xe0\x51\x54\xdc\xe4\x02\xc9\x4e\xa3\xa8\x99\x02\xc3\xa1\x76\x69\xf2\x55\xa4\x30\x53\xca\x1f\x20\xa2\xbe\x77\xdb\xa2\xd9\x22\xbb\xb1\xc1\x5e\xc0\x90\x00\x63\x88\x1b\x18\x73\xdc\x45\x74\x36\xaf\x35\xff\xa5\x77\xef\x68\x8e\x65\xe0\x7b\xa7\x27\x44\xfb\x94\x68\xb0\x85\x84\x8f\x20\xd3\xdf\x02\xc3\x61\x94\xc7\xa3\xb1\xee\x8a\x8e\xc5\xb3\x28\xaf\xb9\x79\xd3\x7d\xc3\xbf\xa8\xf7\xe5\x85\x45\x22\x6f\x0d\xd6\x8b\x5a\x05\x1d\x62\xb9\x59\x62\x91\xc8\x54\x7e\xcd\xeb\x93\xf4\x07\xdd\x4f\x2f\xba\xe0\xd2\xdb\xb0\xf0\xbc\x29\x25\xfe\x05\x74\xf4\xa6\x77\x5e\xe3\xc4\x32\x54\xf0\xad\x96\xdc\xdb\xef\x12\x6d\xf0\xf0\xdb\x88\x4e\xe8\xbb\x8e\x3c\x9f\x95\x72\x93\xb5\x1f\xe1\xad\x42\xf4\x10\x7c\x54\xad\xcb\x1b\xf4\x80\xfb\xb0\xe6\xe2\xc2\xb2\xf8\x40\xa5\xb8\xf2\x9b\x84\x96\x2f\x9d\xba\xf5\xad\xa8\xa3\xba\x05\x15\xf8\x90\x57\xfc\x71\xb9\xbd\x7d\xbc\x0b\x0e\x74\xab\x6a\x69\x34\x55\xcf\x15\x0f\x4d\xc8\x98\x9a\x26\x00\xba\xd7\xc2\xea\xbb\x2c\x76\x32\xa9\x91\x0d\xe4\x95\xde\x26\x97\xac\x0f\x9c\xa1\xed\xe0\x49\x07\xde\x1f\xd6\xc1\x38\x91\x23\x15\x94\xae\x9c\xf9\x08\xc4\xda\x8e\x0a\xaa\x36\x26\x9d\x11\xb6\xfd\xb0\x58\x0a\xc6\xd6\x5a\xb0\x78\x33\xaa\xcf\xfa\x09\x92\xff\xe2\x9e\x46\x02\xc4\x80\x80\x40\xe1\x99\xf9\xb6\xa2\x39\x53\xd3\xe7\x79\xfa\x4d\xde\xcb\x3b\x90\xfa\x91\x28\x02\xac\x95\x23\x2a\xd0\x6c\x99\xd0\xe3\x29\xf5\xd1\xa2\x05\xa3\x11\xfc\xb8\x2f\x25\x82\x83\x0a\x50\xcb\xdd\x97\xae\xe0\x99\x5e\x4e\x62\x04\x3f\x8e\xa7\xd4\x9d\x22\x46\xfa\x5f\x2d\x97\x80\x30\xda\xe6\x5e\x09\x77\x64\x9c\x0d\x3f\x14\xb9\xf8\xfc\x53\xa6\x78\x44\xbf\xff\x6e\x1c\xc6\x84\xfa\x9a\x88\xd6\xa2\xf0\x86\xa8\x17\x45\x30\x73\x91\x41\xed\x71\x90\xe0\x1d\x97\x7a\x09\xc1\x60\x05\x09\x6f\x4a\xf9\x59\xef\x98\x11\x6c\x8f\x2e\xe8\x09\x2f\xb2\xdb\x20\x6c\x55\xe8\x95\x25\x00\x81\x0b\xb2\xf8\xec\x72\xc8\x96\xcb\xd7\xe5\x92\x83\x99\x02\xcc\x24\x1f\xb5\x45\xdd\x16\x20\x39\x06\x99\xed\xc4\xb2\x7c\xc2\xb7\x6a\x1d\xd1\x87\xe3\x8e\x6d\xb4\x5c\x38\xba\x2e\x97\x94\x29\x33\x71\x4d\x0c\xa0\x51\xda\x5a\x3e\xfc\xde\xe4\x7c\x6d\xcc\x21\x6c\x47\x4d\xc6\x5f\x17\x55\x36\xd9\x97\x17\xf9\xd5\xba\xd0\x9d\x84\xe8\x0b\x11\x9d\xf0\xbf\x05\xcd\xd8\x94\xd7\xb8\x50\xb4\x24\x8f\x7d\xda\xb1\xff\x1f\x5b\x32\xef\x8c\x75\x83\x13\xf1\x54\x76\x09\x82\xf3\xb1\xbb\xc6\x91\x7b\xe4\x48\x65\x97\x60\xdf\xcc\xd4\x7e\x1f\x45\x26\xb3\x6c\xa7\x4a\x83\x57\xea\x9d\x40\x95\xbe\x35\xe9\xfb\x0a\xdc\xd9\x24\xfc\x95\x6f\xf8\x6b\x13\xd2\x83\x9b\x59\x2e\x20\x80\xd5\xcb\xf7\x97\x36\xc8\x60\xbf\x8f\x74\xb6\x11\x28\x04\x92\x46\x24\xe3\x84\x66\xf2\x0a\x1c\x69\xac\xda\xe5\xfc\x21\xa0\x4d\x2f\xf9\x96\xeb\xfb\xcd\x22\xe7\x15\xd2\x18\x79\xbf\x14\xb4\x8e\xc5\x07\x65\xf7\x39\x7d\x48\x08\x55\x02\x6e\x8a\x07\xea\x2a\xf8\xf2\xf5\xd3\x46\x05\xa5\x4f\x23\x79\x55\x16\xd7\xcd\x56\x74\x03\x51\xf3\x38\x96\x5d\x6f\xdc\x9c\x41\x86\xce\xf0\x83\xc7\x71\xfb\x5b\xb0\xf5\xec\xcc\x00\x62\x88\x15\xc9\x75\x56\x68\x17\xda\x3b\x02\xc2\x70\xa7\x63\x81\xd5\x25\xe1\xec\x93\x41\xa2\x46\x0f\x03\x05\xff\x78\xb2\xd4\x8e\x16\x3c\xf8\xd7\xec\xe3\xcd\xc7\xe1\x7c\xf0\xf1\x81\xfd\x31\xf8\xb2\x29\xbe\x71\x8f\x38\x0e\x0f\x38\xec\x9b\x24\xca\xb6\xdb\x22\x5f\x80\x8a\xea\xc1\x97\x4d\xe1\xae\x06\xed\x32\xa6\x58\x41\x7e\x48\xf9\x7e\x8f\xbf\x71\x02\x1c\x74\x87\x1b\x63\xde\xc6\x88\x28\x56\x2f\xce\x01\x7c\x2a\x31\x53\xa6\x3b\x80\xc6\xdd\xd7\xce\xba\xa3\x18\xd4\x8f\x07\xdb\x22\xcb\x45\x64\x81\xd2\x0c\xd0\x5a\xbe\x4a\x44\xdb\xdc\x38\xec\xf1\x9c\x09\x5f\x84\x7b\x48\xd3\xa2\x7f\x4e\xf2\xe6\x97\x25\x01\x00\xca\xce\xd0\x59\xf4\x29\x1a\x94\x73\xc0\xf5\x23\x54\xff\x9f\xe5\xfa\xe7\x01\x9e\x5d\x83\xe1\xa1\xaa\x66\x41\xac\xf3\x73\x7f\xb2\x30\x4e\xdf\xa5\xf4\x1a\xd1\x05\x79\x55\x25\xd4\x2d\x8c\x80\xa2\x82\x80\x59\xe9\x78\xd2\x44\xb0\x0c\x60\x14\x61\x1c\x68\xdb\xd0\x0b\xbc\x7c\x9a\x7c\x7c\x9f\xf3\xed\xfb\xf2\xa9\x58\x26\xe8\x11\x10\x2e\xa8\x24\xec\x73\x8a\xd9\x9a\xae\xb7\xfb\xc6\xd3\x2f\x8a\x8b\x4a\x1f\xc9\xb8\x5d\xe0\xc3\x73\xc7\xd8\xdf\xe8\x29\xdc\x1e\x25\x4e\xa6\x42\x2f\xab\x14\xfe\xcf\xee\x0e\xc4\x37\xc6\xe5\xdd\xda\x79\xdc\x0e\xd1\xd8\x05\x9e\x94\x8b\x63\x1f\x5d\xe7\x47\xbf\x32\xba\x9a\xdf\xd1\x2c\xbd\x04\xfc\x3d\x1b\xa7\x85\x91\x17\x65\xf9\xb9\xb6\x6d\x94\x16\x61\x8f\x20\xf7\x42\xa6\x7b\x03\x47\xd4\x74\x83\xe4\x57\x79\xa5\xb8\xc4\xc7\xde\x16\xc3\x41\xdb\x38\x9e\x93\xfd\x3e\xc9\xa0\x0f\x2e\xa0\x23\x8c\x15\x78\x3a\x9b\x1f\x08\x85\x08\xb0\xf7\xc4\xdd\x0c\x33\x7f\x0e\x29\x3a\x8b\x40\xad\x5a\xbd\x16\x16\x3f\x06\x32\x73\x16\xe8\xe8\x82\xb5\x95\x7c\x99\x4a\x7a\x9d\x15\xa9\x38\x98\x56\x55\xba\x55\x8b\x72\x7b\x0b\x96\xe4\xac\xa5\x30\xea\x8f\x19\x63\xca\x39\x3b\x19\xdc\x51\x9b\xde\x99\x17\xf8\x20\xbf\xde\xef\x0e\x6e\x11\x0a\x98\xe8\x75\xa7\x9f\x93\x5c\x54\x2a\x13\x0b\xbd\xd1\xc0\x91\x00\x16\x1d\xb9\x23\x5d\x9e\x13\x42\xe5\x4c\xcc\x59\x1e\x98\xbc\xef\x74\x75\xbd\x83\x5a\xab\xcf\xcd\x2b\x27\x0f\xd2\x00\x0e\xbf\xfb\x2b\x01\xa7\xa6\x5e\xe0\x46\xd1\x68\x33\xbc\x69\x73\x1f\x7d\xea\xfd\xe7\x02\xcf\x0b\xf4\xd4\x94\xfb\xbd\xc4\xa3\x8f\x59\x67\x4d\xc5\x24\x6a\x85\x28\x67\x18\xe7\x6a\xbf\xdf\xa3\x13\x1c\xa7\x90\x20\x55\x07\x1c\x82\x02\x87\x00\x0c\xb1\x2a\x76\x87\x24\xa2\x8f\x8a\xa2\xb9\x86\x83\xbb\x47\xe2\x51\xc6\x8c\x33\xd2\xd8\xbe\xa6\x7b\x7c\x33\xf0\xff\xa1\x28\xfa\x79\xef\xad\x7b\x32\x0d\xa1\x4a\x22\x04\x9c\x83\x0b\x7c\x10\xba\xe6\xd9\x32\x32\x39\x7f\xce\x8b\xa2\x61\x7c\x4e\xee\xc0\xad\xde\x05\x28\x83\xb1\x66\x9d\xbb\x4c\x57\xde\x38\x2c\x28\xef\xc0\x55\x43\x2b\xf3\xba\x2a\x03\x35\x00\x40\x14\x41\xea\xb3\xb0\xa5\x53\x0b\x82\x66\xdf\x3c\x01\x27\xc5\x23\xe4\x4d\xe8\x98\x58\x8b\xa3\x63\x89\xf4\xac\x38\xd4\x4c\x65\xad\x7f\x98\x01\x3e\xd6\x3b\x27\x58\x91\x17\x5c\xf1\xaf\x37\x3b\xcc\x6a\x69\x11\x44\x13\xe2\x38\x88\x55\x99\xbe\xb2\x94\xfb\x06\x21\xce\xc4\x22\x1f\xb1\x2d\x0c\x41\xc0\x56\xea\x9e\xd2\x78\xab\x34\xde\x51\x9a\x0d\xb3\x19\xe3\x13\xc4\xf2\x2f\xe4\x1f\x78\x90\x7a\xb7\x0b\xd3\x77\x81\xa9\xce\xe0\xfb\x5e\x58\x0d\xbd\x25\x58\x07\x8b\x04\x1f\xe4\xc7\xf0\x0a\x2f\x0f\xe6\x23\xec\xd9\xa3\xb5\xfa\xa9\xe1\x4a\xf1\x5f\x57\x0b\xed\x74\x9a\x95\x69\x11\x5a\x84\xf6\x9c\x83\xc9\xb8\x51\xd9\xde\xb1\xb9\x21\xa0\xea\xfa\x62\xd2\x58\x5a\x3a\x28\x81\x57\xbe\x56\x94\x0e\x4a\xcc\x57\xc7\x56\x66\x2d\xce\xe6\x73\x2c\x71\x2d\x0e\xde\x98\xca\x27\xe5\x02\xc8\x9c\x1a\x29\x1b\x36\x63\x5d\x1b\x89\xfd\xfc\x69\xc3\x2e\xf4\xc8\xc7\x21\xa2\xa2\xfe\x52\xff\xfe\x0b\x25\xd7\xac\xd5\xbc\x97\x8c\xc8\x12\x5e\xdb\x16\x0e\x9e\x4f\x7c\x60\xd8\x93\xf3\xac\x4a\x27\x87\x7a\x61\x17\x9b\xff\xb6\xc4\xdc\x97\xf8\x17\x0a\xfb\x6a\xa7\x1c\x29\xa5\xdb\x41\xc7\x6f\x84\x06\x12\x40\xb2\x97\x22\x11\xe4\x94\xa0\x6b\x86\x58\x26\x13\x7d\xef\x34\xa0\x4f\x1e\x58\x29\x67\x8f\xf3\x44\x10\x5a\xb2\x7c\x9a\xcf\xc6\xf3\x51\xc1\xaf\x79\xf1\x3f\x1e\x4e\x55\x96\x08\x92\x4a\xf8\xbf\xe8\xda\x52\x1d\x01\x87\x9a\x3e\xd2\x59\xa4\x8a\x96\xc8\x47\xf0\xf5\x4e\x1f\x06\x1d\xd1\x5e\x9e\x5f\xed\x8a\xff\x68\x17\x39\xf9\xbf\x5f\xb3\x68\x2a\x6b\xea\xdb\xda\xe4\xfe\xdf\x57\xf7\x6b\xd5\xf9\x2f\xe6\xec\xff\xcd\x8e\xd7\xbd\xa3\x9d\x88\xd1\x62\x7d\x06\x87\x3c\xac\x62\x61\x4e\xe3\x8a\x67\x72\xb1\x4e\x1e\x7c\xbc\x78\x40\xa6\xe1\x1a\x49\x45\xad\x21\x3f\x6f\x1b\x2d\x00\x2b\xd8\x64\x38\xa1\x88\x84\xe1\x12\x82\x95\x7a\x57\xd2\x5a\xca\x77\xd9\xd5\x7d\x59\x5a\xe7\x3d\x4c\x78\x5f\x96\x3e\xa5\xee\x82\x8e\xd1\x07\xeb\x6f\xc8\x14\xdf\xc7\x6c\xd2\xae\x89\x8d\x69\xeb\x49\xc1\x8e\xf4\xfe\x7c\x11\x45\x26\x48\x7e\x7f\xde\x41\xf2\x0f\xa5\x5c\xde\x9b\x37\xe0\xd0\x40\xd2\xe7\xb2\xdc\x6d\xef\xcd\x18\xc1\x68\x7c\xe2\x7b\x33\x0e\x12\xeb\x4a\xdc\x9b\xb1\xad\xc4\x92\xc3\x0b\x25\x3e\x8e\x35\x12\x1b\x3b\xf5\x5a\x47\x9b\xf4\x4d\xbf\xd5\x30\x79\x3d\xb5\xae\xc9\x57\x73\x0f\x6a\x03\x26\xbd\xf7\xe7\x1e\xa4\x86\x4e\xf9\x6a\xf6\xae\x63\xec\x17\x5f\x29\xc0\xa5\xc7\x67\xff\x47\x3b\xd5\x14\x03\x1a\xc0\x0a\x16\x74\xcd\x7d\xf2\xba\x5d\xa1\xd6\x27\x80\x38\x67\x3f\x78\xc5\xab\xea\xab\x65\x38\xe4\x07\xfd\x55\xc5\xa5\x7a\x9f\x5d\xb6\xc4\x89\xa6\x33\xc0\xc7\x20\xfd\x45\xb9\x6a\x7d\xe3\x8d\xaf\x66\x73\x8a\x5c\x2e\x75\x96\x68\xd8\x92\x9a\x08\x77\x5d\xd8\x5a\x68\x51\x20\x2d\xc8\x3f\x00\x34\x2c\xca\xc4\x6f\x50\x0e\xaf\x16\x4c\xb0\x49\x4f\xe1\xed\x76\x5b\x26\x62\x98\xfd\x0f\x41\xc8\xa1\xdd\x80\x0a\x2c\x3b\xac\xdf\x68\xab\xbd\x5d\x2e\x11\xc7\xfa\x3a\xd5\x7b\xb4\x73\x9c\x49\x22\xd7\x87\x11\x38\xc1\x64\xa2\xda\x96\x15\x87\x87\xee\x5a\x29\xc7\x91\xbb\x3a\x3a\x2b\x20\xa1\x39\x86\x9a\x81\xbb\x7e\xe9\x45\x88\x3c\xb8\x46\x01\xff\x2a\x01\x5c\x0d\x7d\x77\x2a\x3d\xd8\x7e\x0e\x06\x0a\x4b\x9e\x60\x72\x9a\x23\xbc\x24\x81\x1f\xe7\x63\xd2\x15\x3f\x98\x10\xea\xfa\xf4\xa7\x4c\x5c\xe9\x41\x30\x66\xde\xe6\xfb\x41\x3d\xe0\x21\xdc\x46\xc3\x22\x1e\x12\x9a\xd3\x68\xe0\x3a\x28\x0a\x9c\xf9\x2d\x36\xb7\x33\x3e\xb1\xce\xfb\x8d\xb6\x59\x00\xc0\x5e\x86\xa6\x12\x5d\xf5\x19\x93\x01\xef\x62\x81\x1f\x64\x0e\x3d\xcb\xe3\x49\xf8\x4a\x0e\x27\xb4\x33\x9c\x4e\x48\xbd\xd6\x87\x3a\xcb\x4f\x4e\x73\x98\x70\xe1\x3d\xba\x4a\x24\xd1\x72\x92\xe0\x37\xe0\x15\x2e\x96\x68\xdb\xf3\x5f\x4f\x07\x67\x36\x83\x00\x36\xa7\xd2\xce\x04\xd1\x91\x78\x26\xe7\xbd\x46\xe7\x74\x76\x08\x15\x96\x9d\xc8\xb8\x22\x79\x04\x41\x3b\xf5\x8d\x3c\x10\xdc\x25\x07\x13\x6a\x10\x05\xc9\xc1\x62\xc6\xd1\x72\xcb\x45\xeb\x42\xdc\xb9\x89\x88\x88\x46\xf8\x5e\xf7\x15\x6b\x7f\x3e\x6a\xc4\xea\x1b\x22\x5d\x08\x76\x61\x50\x93\x6a\x56\x66\xab\xfa\x16\x84\xfe\xa9\xc8\x53\xb1\x2d\x72\x95\x3c\x18\x26\xd3\xfe\x37\xe4\x81\xde\x4a\x12\xce\xca\x59\xe9\x86\x7a\x4e\xc7\xe4\x34\x3b\xf3\x01\xe0\x37\x62\x50\x1a\xca\x59\x06\xaa\xea\x07\xff\x4a\x16\x9b\xe5\x7e\xc3\x55\xb6\xdf\x90\x6f\x1e\xe4\x06\x2f\x93\x90\x9c\xf5\xc7\x6e\x1e\x3f\xf8\x57\x96\x14\x8a\x4c\xc3\x04\xaa\x9e\x20\x59\xec\x17\x4a\x16\xfb\x45\x29\x94\x2c\x8b\x5a\x5e\xd2\x26\x05\xb5\xdb\x83\x7f\x55\xc9\x3a\x5f\xa9\x5a\x92\x96\xe5\xcb\xcf\x42\xf2\x45\x79\x25\xf2\x3f\xf9\xf2\x64\x53\x2e\xf3\x55\xce\xe5\x09\xe8\xe9\x4f\xa2\x41\x45\x7a\x02\x38\x97\xac\x36\x05\xec\xb3\xa3\x47\x85\x1a\x46\x03\x6e\x58\x6f\x59\xf4\x58\xc9\x02\x03\x72\x13\xb0\x59\xe2\xdf\x02\xff\xb6\x5c\xa0\x9c\x50\x7e\x58\x88\xd1\x65\x56\xe5\x0b\x76\x07\x62\x44\xe4\xe5\xab\x88\xa2\xb0\x10\x05\x72\x54\x44\x7f\xde\xea\x00\x94\x14\x23\x0a\x12\x5b\xe4\x05\xc2\x88\xea\x0b\x55\xe4\xee\x56\x11\x7d\x51\x6e\xb8\x0d\xf0\x37\xbb\x88\x1a\xc1\x30\xb2\x22\x22\x86\xd8\xfc\xec\xef\x88\x3e\x81\x13\x38\x8d\x42\x19\x23\xa2\x3f\x64\x8b\xcf\xd5\x36\x5b\xf8\x08\x6b\xc9\x63\x5a\xe7\x12\x44\xad\x14\xfa\xbc\x88\xfc\xd9\xe1\x3e\xd1\xbf\xd3\xc8\x9f\xee\xba\x2d\x5a\x22\x88\x9a\x0b\x3f\xa2\x2f\xe1\x90\x48\xa3\xc6\xac\x8e\xe8\xd3\x6a\x91\x46\x0d\x15\x5d\xa4\x67\xfa\x68\xbb\x78\x82\x45\xb2\x3b\x1c\xa1\x47\x51\x1a\x39\xdd\x60\x44\x31\xf0\x09\x56\xd7\xa8\xa4\x6c\xe8\xef\x80\x4e\xb6\x2c\x5d\x55\x5d\xa8\xe4\x10\x0a\x7f\xff\xd6\xf8\x5b\xf7\x7c\xa4\x3b\xd3\xaa\x0e\x6c\x84\x1e\x17\x13\x0e\x43\x84\xa1\x3f\x6f\xa3\x70\x64\x4d\x7d\xf4\x18\xd4\x07\x18\x23\x60\x82\xe8\x08\x27\x81\xda\x18\x9c\x27\x2e\xca\x4c\x1b\x98\xa5\xee\x23\x37\x19\x4c\x84\xff\xc6\xcd\x1b\xcc\xac\x31\x8c\x81\x64\xe7\x6a\x88\xde\x8c\x3e\xda\xcc\x10\x8c\xbd\xd0\x9d\x0c\x8f\xfa\xf8\xf7\xb3\x28\x8d\xf4\x35\xdc\xfe\xfd\xdc\xfc\xfd\x86\x7f\x51\xf5\xde\xb5\x31\xef\x24\xbf\xae\xc7\x3c\x83\x7e\x86\xcd\xb0\x1e\xf1\x93\x8f\x08\x86\x74\xe6\x26\x95\x16\xe7\x6c\xe8\xdc\x85\xbe\x0e\x1a\xf3\xb3\x19\x68\x3f\x77\x6a\x05\xfc\x6c\x46\x38\x8c\xd6\xdd\xd7\x11\xbe\xca\x8a\x42\x6f\x2f\xbb\xab\x75\x1a\xc1\x02\xc7\x69\xc8\x37\xd9\xa2\xba\xb5\x73\xf0\x59\xd4\x58\xdd\xa6\xd7\xa3\xfa\x3e\x80\xa1\xef\x3a\xe6\xc7\x9b\xe6\xe4\xd0\xd5\xc1\x5c\xdd\x6d\xc3\x84\xfe\xe0\x42\xc3\x4c\x1f\xb5\xe6\x03\x4e\xd1\xae\xc9\xf0\x4b\x54\xdf\x1a\xc2\xae\xf1\x71\xc1\xe4\x8d\x9a\xdb\x86\x59\x18\xed\x3d\x01\x6a\x68\xd2\xbb\xcb\x86\xad\x78\x7d\x0e\xfa\xbb\x8b\xcd\xef\xc7\x28\x8d\xac\xf2\xdc\x86\xbd\x8f\xd2\xa8\x2e\x3d\xda\x98\xb7\x51\x1a\xd9\x23\x16\xc7\x64\x93\x85\x7b\xc3\x66\xd9\xde\x1a\x36\xcb\x8e\x9d\x61\xb3\xec\xd8\x18\x4c\xa0\xdd\x07\x36\xcb\xda\xb6\xb0\x59\x76\xef\x0a\x9b\xa5\x5d\xfe\x8d\xd0\xf6\x56\xa1\xab\x62\x37\x05\x17\x5a\x5b\xdc\xe1\x8e\x50\x5f\xdc\xb5\x0d\x41\xe7\x54\xdb\x10\xec\xb4\xd8\x2c\x1b\xfb\x41\x6d\x16\x7d\x75\x43\x38\x96\x2a\x1c\xd2\xe3\x9b\xc6\x66\x59\xdb\x33\x36\xcb\xda\x96\xb1\x59\x1e\xd9\x31\x82\x08\xb3\x61\xc0\x38\x9a\xc5\xd0\xda\x2d\xda\x71\x7e\xa0\xdb\xfb\xc5\x66\xd9\xb1\x5d\x6c\x96\xad\x89\x59\x7f\x01\xb0\x83\x15\x34\xb5\xa9\x8d\xb7\x43\x7f\x7c\xd7\x31\xb1\xcd\x4d\x27\x3c\x30\x9a\xa7\x4b\x6b\x76\x84\x5b\xd1\xcc\xec\x45\x34\xc2\x8d\x28\x9a\xc3\x0a\x30\xa7\x31\xbb\x9e\xd6\x96\x43\x1a\x9e\x9b\xf4\x62\x24\x4a\xb9\xc9\x8a\xfc\x4f\x03\xc9\xd9\x41\xba\x1f\xbc\x51\xca\x93\x5c\x9c\x70\xf4\x11\x6a\xbc\xdb\x4a\x6f\xa9\xa6\xc5\x6b\x14\xe5\xb4\x94\xb5\x0f\xea\xba\x4f\x96\x7c\x9f\x29\xa2\xb2\xc5\x9a\x58\x1b\x0c\x49\x88\x96\xf5\x72\xb1\x03\xe4\x99\x68\x34\x1a\x21\x74\x08\x2e\xcd\x13\xc8\xcf\xa6\x38\x78\x0b\xf8\x5b\xf0\x13\x03\xe9\x35\x3a\x89\x08\x5d\x81\xae\x17\x70\xce\xda\x20\x67\xb4\xea\x95\x8c\xe5\x4e\x86\x9d\x26\x15\xcb\x47\x7f\x94\xb9\xc0\x8f\x33\x26\x48\x0a\x61\x16\x88\xae\x1c\x4c\x48\x2d\x01\x54\xcc\x3a\x70\xab\x59\x05\x8d\xdc\xc1\xeb\xdd\xae\xcf\xb2\xb6\xe4\xf9\x52\x2c\x4a\x51\xe5\x95\xe2\x42\x9d\x5c\xe6\x62\x99\x8b\xab\xea\x64\x55\x4a\x90\x3b\xd1\x6c\x45\xe7\xc3\xb2\x43\xd0\x54\xd7\xc2\x02\x1f\x84\xf9\xac\x98\x33\x35\x2b\x9c\x95\x03\xc7\x27\xd1\xb5\x96\xf4\x8b\xb2\xfc\xbc\xdb\xfe\xc8\x6f\x3b\x9e\xbd\xb1\x97\x12\x85\x86\xd2\x04\xac\x87\xa6\x0a\x8d\x88\x38\x15\x24\x55\x33\x63\x66\x32\x61\x8c\xe5\xc4\x7a\xc9\x95\x70\xcd\x8f\x82\xb1\xf0\x91\xc8\xbe\x6f\xd1\x00\xfa\x2c\x8f\x63\x99\xe4\xd6\x88\xc6\x51\xf5\x23\x54\x4d\x30\xf0\x68\x61\x34\x43\x44\x33\x7c\xca\x9e\x47\x7d\xf6\x16\xfe\x0e\xec\x9c\xac\x69\x3d\xd6\xb2\x9e\x85\x7d\x48\x5f\x0b\xa4\x4b\xf0\x51\xc8\x88\x55\xc7\xba\xab\x25\xe8\x00\xbd\x6b\xe7\x32\x2b\xe7\x8e\x5a\x2b\x23\x0e\x02\xe3\x70\xa0\x4b\xdd\xd5\x79\xf5\xda\x5c\x1e\xea\xdd\x6d\x97\x49\x87\x65\x10\x4f\xff\x51\xce\x1c\x25\xb9\x1d\x40\x58\xd2\x11\xf8\x03\xeb\x8d\xd3\xfc\x82\xcd\xc1\xfc\x7e\x5d\x2e\xf5\xaf\x03\xdd\x9a\xdb\xdc\x9b\x6c\xd3\x61\x77\xb0\x88\xe3\xef\xfe\xc6\xea\x94\xf2\xfa\x02\xef\x61\xbf\x51\x15\x5e\xab\x04\x15\x4c\xf6\x02\x94\xa6\x3e\x13\x96\x56\xfd\xb9\xcc\xb6\x6b\xa0\x59\x4f\x2c\xcd\x7a\x1c\x43\x15\x91\x12\x44\xd8\x7b\x91\x20\x34\xf9\x74\x84\x7e\x1f\x5b\xe7\x3e\x30\x17\x27\xfb\x85\x49\x97\x7a\xe6\x76\xfd\xc5\x66\x19\x7c\x00\x17\x2b\x41\x68\x1f\x9c\x3d\x00\xf0\x01\x2b\x82\x3d\xe4\x12\xda\x1b\x97\x20\x54\x90\xe0\xa6\xbb\x09\x5d\x3e\xdb\x63\xb2\x00\x23\x1b\x7e\xb8\x80\x3b\xfb\x7b\xfe\x45\x3d\x92\x3c\x6b\x77\x6e\xa2\x98\x9a\xde\x94\x89\x22\xe9\xdd\x81\x8c\xc0\x31\x8a\x71\xfc\x97\xf6\xd5\xc8\x9a\x24\x02\x92\x90\x31\x33\x04\x3b\x3e\x1b\xc1\x7c\xb8\x6e\xcc\x68\xeb\x7d\x53\xf4\x37\xb5\x3f\x93\x5a\x34\xab\xc5\x5a\xec\x7e\x35\x72\x86\x8b\xf6\x8d\xe3\x4d\x09\x6c\x67\x2e\x9c\x49\x30\x3a\xb4\x9e\xc2\x57\x75\xc7\x14\x67\xf6\x48\x80\x0a\xdf\x01\x7b\x5f\x96\xcb\xdb\x43\xe0\x30\x4b\xee\x4c\x33\x19\xc0\x34\xa0\xd7\x17\xd8\x75\xf1\xd1\xaa\x94\x9b\x38\x4e\x9e\xe7\xe6\x37\x8d\xaa\xdd\xe5\x26\x57\x11\x85\x11\x43\x23\xdf\x0b\x08\x7a\xcd\xd5\xba\x5c\x3e\x2a\x4a\xe1\x6d\xcf\xcc\x47\xa5\xde\x66\x21\x51\x4f\xc9\x5b\xb3\x20\x6d\x10\x0b\x34\x3e\x22\x01\xd6\x54\x0c\x2f\xdd\xcf\x30\x34\x3b\x1c\x16\xc0\xda\xf1\xbc\x24\x77\x87\x83\x1a\xad\x72\x91\x57\x6b\x70\x80\x0b\x5f\x85\xd4\x48\xcb\x1f\x4c\x50\x30\x10\x6d\x8f\x7b\x68\xf5\xae\x46\xaa\xec\x4a\x51\x0b\xcf\xab\x37\xd9\x1b\x2a\xc0\xdc\x7c\x9b\x49\x2e\xd4\x9b\x72\xc9\x0d\x65\x96\xc1\xcb\x1a\xb5\xfc\x18\x13\x82\x6c\xef\xb7\x85\x7b\xa8\x43\xff\x0e\xd3\xb3\xdf\x74\xf6\x6c\x64\x2b\x11\x5a\x58\xea\x54\xa6\x17\x90\x53\xd1\xff\xcd\x4a\x42\x0e\x87\x76\x41\xa2\x14\x3c\x32\xa0\x26\x17\xb5\x47\xb3\x5a\x1b\x50\x5f\x8b\x22\x60\xa2\x28\x1f\x09\xfe\x45\x5d\xe4\x97\x45\x2e\xae\xc8\xc1\x63\x96\x9c\x54\x78\x14\x5d\xeb\x6d\x0a\x37\xee\x0b\x25\x79\xb6\x69\x9a\x3b\xae\xf3\x6a\xb4\x2d\x2b\x87\x4a\x21\x15\x1b\x5b\x6c\x07\xfd\x15\xe3\xf8\x97\x51\x7a\xeb\x4d\xf0\xef\xd4\x61\x09\xe3\xbb\xd0\x3b\xfb\xbd\x0f\x82\xa9\x69\x73\x2a\xec\x7d\x87\x8d\x0f\xbd\x6b\x11\x82\xba\xf3\xb2\x38\xe6\xca\xb9\x2d\xab\x73\x16\xd4\xc4\x9c\x14\x07\x5a\xdd\xfb\x8d\x01\xd8\x70\x65\x1e\xe8\x96\xf3\xcf\xc7\x3e\x30\x59\x1b\xe5\xaa\xcd\x83\xec\xf7\x48\xc2\x7d\xa0\xba\x7f\xc3\x8f\xf5\xf1\x69\x52\x9d\xb5\x2b\x47\xbe\x9e\xf7\x60\x40\x0e\x94\x67\x47\xe1\x73\x8f\xd4\xa8\x13\x6e\x96\x13\x63\x9b\xca\x0c\xa2\x80\xfe\x0d\x33\x4e\x8b\x6f\x53\xfc\x47\xef\x93\x5c\x8b\x19\x80\x8f\x6e\x6a\x38\x18\xd8\x9c\xa9\x82\xea\x7c\x58\xe7\x05\xbf\x0f\xf5\x7d\x5b\x56\xa7\xf0\x83\x67\x2a\xe1\xe4\xd4\x41\x51\xb9\xc1\xc2\x8c\x00\xf9\x2d\xed\xd0\x0d\x73\x9f\xcf\x83\xd9\xc7\x0a\xfc\x16\xc7\x73\x23\x69\xde\xd7\x74\x40\x62\xb1\x7f\xf5\x9a\xa5\xf2\x03\x75\xf6\xa1\x2d\xee\xf6\x60\x66\xd7\xa7\x10\x7c\xf1\x95\x21\xb0\x0e\xa1\x66\x05\xd8\x51\x50\xe7\xc3\x09\x69\x4e\x3a\x05\x30\xf6\x97\xd9\xe2\x73\xe3\xf9\xd7\xa6\x18\x32\x7e\xa0\xf8\x46\x7a\x6c\x2e\xd6\x16\xd4\x99\x5f\x90\x16\x67\xa4\xb9\xba\x16\x65\xd8\x6d\xd4\x7f\x50\x5b\xb1\x1d\x8b\xb5\x19\x04\xd9\x91\xa3\xab\xda\xb8\xa6\x74\x7d\x34\x4c\xea\x8b\x6d\xda\x55\x27\x17\x5b\xab\x17\x82\xa1\xe2\x2d\xaf\x81\x37\xe0\xba\xa5\x91\x9b\x03\x6c\x73\x79\xfc\x5f\x97\x0f\xb4\x52\x69\x87\xbf\x4f\x0b\xc6\xde\x21\xa0\x86\x53\x04\x6f\x24\x6e\x7a\x18\x96\x2a\xee\xad\x13\xe2\x58\xe0\x3c\x3a\x1f\x5b\x82\x9f\x38\xee\x4f\xfa\xcc\xc3\xc7\xe8\x3d\x81\x09\xb4\x82\x41\xbe\x21\x81\xee\xe2\x39\xeb\xf0\xfc\x92\x7a\x55\x97\xaf\xca\x1b\x2e\x1f\x67\x15\x4f\x48\xca\x0f\x00\x41\x5f\x5b\x42\xd5\xee\xb2\x52\xd2\xe5\x4f\xb9\xf3\x2c\x66\x2c\xf7\xa6\xf5\x1d\x15\x71\x29\x61\x42\x2f\x76\x52\xde\xe3\x6d\xdf\xee\x85\x60\xfe\xe9\x0e\x39\xd0\x75\xbe\xe4\xcf\x72\x59\xa9\xe6\x9b\xa2\x3b\x7d\xdc\xf0\x0c\x18\x07\xa1\xc3\x96\x90\x90\xc3\x2a\x17\x59\x51\xdc\x36\x12\xea\xb5\x64\xac\x4f\xaf\x04\x1b\xd3\x5b\x7d\xc8\xe9\xd3\x1f\xd1\x49\xbb\x8e\x38\xfd\x6d\xc5\x66\x73\x33\x05\xc0\xc0\xdd\x21\x47\xd8\x33\x2e\x5f\xb2\xc1\xe0\x4a\x1c\x7a\xa2\x4c\x6e\x05\xa1\xb7\xc1\x51\x35\x02\x6c\x5a\x56\x3f\x09\x10\x75\x88\x7f\xd9\x16\xf9\x22\x57\xc5\xed\x63\x9d\x86\x2f\xeb\x28\x18\xe5\x02\x08\x32\x19\x47\x06\xe1\x9d\x7c\xbb\x85\x6d\x24\x8e\x5f\x80\x97\xa7\x2c\x0d\x5a\x03\x94\x10\x91\x1a\x06\x1e\x18\x51\x91\x9e\x04\x52\xcf\x30\x19\x45\x7c\x69\x2a\x47\xaa\x24\xee\x62\x8a\x54\xe1\x34\xc7\x7f\xcc\x75\xcb\xb5\x3f\xa4\xff\x37\xa2\x9d\x8f\xd4\x77\xac\x8a\x5d\x88\x24\x1b\x6d\x74\x37\x2e\xc1\x3d\x0a\xb1\x2f\x7a\xdc\x22\x2c\x2d\xca\xa2\xc8\xb6\x15\x5f\x4e\xc1\x58\xfb\x51\x9e\x64\xc4\x92\x9d\xa6\xe0\x43\x00\x12\x6e\x35\x52\x25\x3c\xd7\x42\x02\x8b\xbe\x52\x59\x98\x1d\x61\xc2\x09\xad\x15\xc6\x1e\x35\x4b\xaf\xac\x88\x6d\x3f\xad\x57\x22\x8e\xfb\x2f\x44\x00\x99\x48\xe2\x98\xc7\xf1\x45\x9e\x64\xb4\xc1\x6d\x83\xce\x30\xad\xaf\xbb\xdd\x83\x89\x87\x41\xbf\xa7\xf3\x76\xec\x99\x48\x6a\xfd\x47\x68\xc1\xde\x24\x3b\xd2\x2b\xce\xbd\xad\x57\x93\x28\xb7\x15\xc3\x76\xf4\x48\x6a\x56\xb4\x63\x3c\x81\x2e\x39\xb8\x4b\x62\x47\xd3\x80\xa4\x56\xd0\x7c\x60\x69\x3d\xc2\x46\x58\xc1\xac\x35\x73\x59\xdf\xc4\x64\xaa\xdc\xe4\x0b\x93\x6d\x08\xab\x65\x37\x8b\x30\x0c\x7c\x35\xe3\xf8\x1b\xf3\x56\xab\xe5\x68\x4b\x42\x0b\x83\x29\x4d\xee\x11\xc5\x85\x46\xa8\x8a\xe3\x9f\x61\xf2\xe3\x4e\x01\xf2\xad\x29\x0c\xff\xc0\xe5\x06\xef\xa6\xb5\x55\xa8\xd7\x43\xd3\x6b\x02\xad\x11\x7b\x0e\xd3\x2b\xba\x2c\xcb\xcf\xba\xe0\xc8\xc8\x82\x0a\xdd\x5b\x38\x9b\x84\x30\x0d\xe3\xd3\xbc\x73\x78\x3d\x63\x98\x1f\xdb\x7c\x4e\x33\xbd\x36\xca\x8e\xb5\xe1\x34\x2e\x99\x9d\xde\x12\x08\xe4\xa6\x65\xfa\x28\x4f\x4a\x3d\xc7\x11\x34\x6a\x38\x61\x8c\x07\x04\x03\xc1\x87\xb0\x5a\x44\xf3\x33\x55\x12\x5a\xfb\xc6\xc1\xd1\xc9\x38\x0e\x69\x32\x9b\xbd\x64\x60\x03\xc2\xdd\x2a\xd8\x91\x60\x4f\x19\x82\x65\x26\xf5\x90\xda\x7e\xaf\xd2\xab\x5d\xc6\xf1\x6f\x2a\x91\xb4\x91\x03\x3e\xd9\x0b\x4e\x61\x65\x73\x6b\xcb\xc2\xae\x75\x5a\x84\xcd\xd0\x2d\x79\x0a\x4c\xb5\x16\x77\xa8\xb2\xaa\x54\x3b\x77\xbb\x01\x89\xfc\x07\x4d\x16\x68\x0a\xab\x1c\x81\x47\x89\xa5\xa2\x55\x8e\x48\xca\xec\x64\xe6\xef\x9e\x72\x48\x4e\xd6\xdc\xb4\x62\xbf\xe8\x9b\xd4\x30\xeb\x55\xb0\x3b\x08\x30\x1a\x00\x4e\xdd\x0a\x6d\xb7\x6b\xbd\x87\xe8\x03\x50\x76\xc3\x11\xaf\xdf\x9a\x2f\xe1\x0a\xd9\xb4\x68\x30\x2c\x5d\x7c\x4f\x8d\x36\xd9\xed\x25\x7f\x91\x2f\x97\x5c\x38\x48\x72\x43\xed\xdf\x15\x89\x73\x6b\xbf\xb7\x91\x3f\x8b\x75\x18\x7d\x34\x22\x20\x6f\x46\xd4\xa2\xa0\xc6\xd6\x1f\xa8\xde\x5a\xc4\x60\xe8\x6a\x6d\xf0\xa9\x21\x09\xba\x2a\x83\x40\xca\x09\xd0\x37\xfd\x97\x7d\x72\xda\xd9\x6e\xdf\xb0\x17\xf7\x36\xeb\xd0\xd3\x27\xbf\x57\x2d\x5d\x8a\x26\xb7\x34\xe0\x8f\xae\xe1\x38\xee\x30\x62\xb6\x29\x13\xc1\x6e\xca\x44\x10\x62\xd2\x32\xa3\x9a\x2b\xd9\xac\x96\xa5\x5e\xff\xe5\x6c\xac\x8f\x48\x61\x30\xb8\xde\x04\x1c\x27\x97\x79\xc3\xa5\xa1\x02\x77\x3a\x9f\x90\x55\xa3\x45\x51\x0a\xae\x7f\x27\xfd\x31\x21\xb4\xc4\xe6\x40\x29\xaf\x90\x13\x12\xff\x95\x04\x4a\x24\x01\x19\xcf\xf8\x74\x77\x06\x8b\xed\x33\x5f\xfa\x8d\x6a\x87\xda\x7e\x0c\x9e\xed\xe6\xa3\xbc\x7a\x07\x9b\xa7\x25\x2b\xcd\xd8\xa6\x4c\x00\x6e\x57\xf0\x9b\x93\x4f\x02\xb8\xed\x0e\x41\xab\x8c\x3f\xd4\x06\x25\x13\x33\x30\xb6\xbb\x7e\x54\xc8\x3d\x79\x29\x48\xf8\x09\xf6\x8e\xce\xf0\x56\x00\x72\x27\xcd\xd8\x16\x1d\x93\x7a\xd8\xef\xba\x43\x69\x09\xf8\x40\xd9\xf9\x78\xbf\x1f\x33\x96\x19\xa1\xb7\xc4\x7d\xfd\xc3\x9a\x8b\xa7\x9b\xad\xba\xb5\x65\x95\xb0\x73\x58\xa3\x9b\xe5\x87\x1c\x8e\xca\xd2\x1f\x68\x7a\x17\x28\xc3\xfe\xf4\x80\x31\xb3\xfa\x77\xf3\x3a\xc0\x86\x01\x44\xd3\x2b\x1e\x34\xe0\xaf\xcb\x5d\xc5\xc1\xdf\xba\xda\xef\xc3\x1c\xff\x32\x44\xbb\x30\x4a\x18\x84\xb7\x4e\x6a\x79\xf8\x18\x66\x06\xd9\xb5\x00\x66\xe5\x2b\x54\x6d\xa3\x3d\x3c\x95\xb4\x24\xfb\xbd\x32\xe4\xf3\x12\xfe\x8d\x63\x48\x23\xc3\x34\x5d\xef\x17\xba\x9c\x5c\x5c\x9d\xb8\xfc\x4f\xf0\xa8\x3d\xd9\x66\x52\xe5\x5a\x68\x3e\x41\x7a\x1f\x90\x68\x4e\x32\x71\xc2\xbf\xe4\x15\x7c\x52\x0a\x1e\x91\xde\x17\xd6\x1f\x1f\xca\x51\xb6\x5c\xbe\x2f\x5f\xa0\x1b\x7a\x1c\xbf\xce\x1d\x8b\xba\x02\xbc\x63\x4b\x9f\x0e\x07\xb9\x16\xb1\x23\xd0\x5d\xf1\x82\xbe\xc9\xde\x18\x10\x5e\xba\xb3\xe4\x9a\x05\xb0\x45\xe2\xac\x02\xec\xa5\x9d\x69\xc8\xa0\x0e\x8f\x51\xc4\x71\x59\x93\xc3\x8a\x23\x70\x7b\xcf\x74\x72\xc6\x8a\xa6\x14\x14\xc7\x49\x05\x47\x46\x2d\x9b\x5d\xdf\x54\x04\x76\x79\x70\x1d\x6a\xfa\xa3\x87\xd2\x66\xed\xaf\x69\xed\x2f\xe7\xc6\xa7\xe6\x24\x9d\xa9\x39\x55\x18\x2b\x83\xc3\x41\x6f\xa5\x5a\xc6\xe2\x37\x27\x5f\xf4\xd2\xda\x31\x53\xfa\x54\x8d\x16\x6b\x40\x8f\xd4\x61\xd8\x01\x53\x69\xc3\x80\x1f\x62\x77\x68\x54\xdd\xf4\x97\xe9\xc7\x76\xa7\x29\x72\xf7\x02\x1b\x01\x6d\x53\x74\x4c\x30\x0b\xbd\x9c\xde\x0a\x30\xdd\x89\xe3\xe7\x79\x52\xd2\xe8\x12\xb4\x83\xe8\xf3\xf6\x54\xd4\x21\x44\xc8\x5d\xe9\x44\x2b\xfd\xbd\x47\x50\x4d\x9e\xea\x35\x96\x70\x87\x56\xb0\x2c\x85\xbd\x0c\xee\xf7\xbc\x06\x62\xe0\x22\x90\xa8\x56\xe7\x67\xa6\x50\x42\x1a\x0d\x4b\x4a\x7b\xad\xa2\xa5\x91\x2a\x61\xe0\x0a\x58\x0f\xc8\x3b\xdf\x7d\xea\xd7\x57\xcf\xef\x2a\x29\x68\xa3\x7b\xbc\x11\xa6\x6e\x54\x56\x55\x6f\xb2\x0d\xd7\xab\x1a\xb0\x9d\xf4\x0f\xe3\x39\x79\x8b\x7f\x71\xb1\x74\xbf\x17\x55\x15\x10\x9f\x62\xc6\xa7\x8b\x33\x33\x5c\xa7\x8b\xc1\x80\x70\x99\x14\x74\x61\x6f\x37\xbd\xd2\x09\xc5\xdf\xf0\xa4\x00\x41\x97\xfe\x23\x4f\x0a\x2b\xe4\x3e\x5a\x2e\xb5\x88\x5b\xd0\xd2\xb1\x1c\x95\x70\x8f\xff\x04\x3a\x58\x38\x5e\xee\xbf\xa4\x6e\xcc\x61\x67\x15\x4e\x88\x86\xca\x94\x7f\xe4\x05\x13\x4a\x1e\x72\x00\xf2\x99\x9c\x1b\x99\x19\xce\xd8\xe0\xb9\xe5\xa6\x86\x18\x03\x62\x9f\x2e\xbb\x0a\xbc\xa6\xf4\x12\x01\x9a\x86\xed\xbb\xb2\x6a\x3b\x44\x75\x42\xcf\x98\xd2\x42\xbe\xdd\xa7\x0d\x85\x21\x42\x58\x06\xd0\x95\xd6\xf3\x43\x2f\x25\xc1\x66\xd2\xb6\x4d\xf7\xe2\xbc\x77\x99\x27\xb5\x90\x5a\xb1\xde\x8f\xb9\x29\xbc\x4b\xdb\x61\x5d\x16\xd8\x36\x6e\x96\xcf\x4f\x0d\x25\x95\x9e\x81\x7a\xd4\x60\x52\x9a\x2e\x83\x55\xea\x33\x32\x72\x4e\x3e\x1c\xd2\x09\x21\x21\xdd\xf3\x17\xa7\x1c\x0a\x86\xca\x8e\x14\x90\x1e\x5b\xf5\x52\xc9\xa4\xff\xec\x22\x00\xaf\x23\xf7\x0c\x63\xe3\x81\x5e\xd8\x02\xbc\xf3\xb2\x08\x2a\xf3\x48\x34\xd8\x9f\x8d\xb5\x75\x90\xa5\x20\x7c\x26\xe6\x06\xf1\x14\x98\xf9\xbd\x08\xa5\x63\x9c\x8a\x2a\xa8\xec\x5b\x5f\x59\x35\x5a\xe9\xbd\xaa\x49\x41\x23\xd9\x33\xee\x18\xf1\x51\xfa\x8f\x63\x20\x35\x0e\x83\x6a\x97\x24\x61\x3f\x51\x65\xe3\x03\x1b\x10\x26\x47\xc7\xe4\x38\x76\x8c\xeb\x27\x81\xd3\x98\x29\x63\xb1\xa6\x25\x70\xda\xea\x5f\x19\x1b\x33\x90\x3f\x50\x1d\x82\xe4\xfc\x55\xcb\xb3\xba\xd6\xff\xc2\x98\xee\xf3\x8e\x4b\x1f\xc7\xbb\x9e\xb9\xe8\xc9\x00\x5d\x1f\x0a\xd8\xef\x93\x6c\x94\x8b\x45\xb1\xab\xf2\x6b\x30\x3c\x99\x62\xc4\x19\x53\xa9\xf9\xa5\x88\xde\x60\x60\x4e\x00\x65\x6c\x70\x1d\xcd\xec\x5d\xb4\x2f\xf7\xfb\xbe\x2d\x24\x10\x1b\x88\xe3\x58\x33\x85\x02\xf6\x70\x50\x24\x58\xb2\x4c\x75\xf8\x39\x94\xa8\xca\x73\x45\x4e\x13\x01\x44\xd4\x7e\x88\xcd\xa9\x94\x19\x72\x6e\x6a\xc8\xfc\x74\x7a\xe2\x5c\x85\x4f\xc4\x01\x60\x63\x33\x42\x77\xff\x4f\x7a\xec\x2f\x55\xfe\xaf\x75\xd6\x5f\xe9\xab\xbf\x3e\x40\xf7\x74\x98\xeb\x29\x9d\x74\xa8\xa8\x6f\x8b\xef\xc2\xa1\xaa\x77\xa2\x16\x77\x33\x42\x0b\x36\xd1\x32\x40\xe0\xb6\x48\x17\x5a\x04\xc7\x20\x6b\x08\x3f\x48\x8a\x69\x9e\x22\x97\xb8\x3f\x83\x56\x6c\x7c\xba\x3a\x0b\xd4\x10\xab\x00\x2f\x3b\x59\xb3\x6a\xb6\x9a\x03\x1d\x7b\xb2\x64\x17\x22\xd9\xd1\xb5\xe9\x10\x42\xa6\x45\x1c\x27\x6b\xbd\xf1\x60\xea\xa5\xab\xab\xfe\x35\x58\x90\x14\x22\xf3\x03\x18\xc5\xe8\x02\xb1\xb0\x5d\xad\x30\x30\x5c\xa1\x4b\xaf\x95\x48\xd6\x6c\x67\x0a\x35\xf9\x0f\xd8\xc2\xea\xe3\xd6\xa8\xd3\xc0\xca\x54\x41\x65\xf6\xfb\x04\xe3\xd8\x82\xea\x7a\xe9\x1b\x5d\x78\x7d\x5b\x1b\x1e\xd3\x13\x4c\x35\x38\x9a\xec\x50\x81\x90\xf7\x59\x24\x15\x21\x74\x07\xd2\x9d\x0e\xda\xe9\xa0\x1d\x41\xd9\x73\xcb\x8c\xb1\x4f\xbf\xc0\x16\x6c\xe8\x75\x7d\x04\x86\x0f\x75\xf4\xf5\xf9\x38\x8e\xab\xa0\xed\xb5\x8e\x36\x2a\xc6\xd9\x6a\x8e\x6d\x45\x5e\xf1\xd6\xdc\x80\x04\xd8\x4e\x7c\x8a\x40\x71\xae\xe7\x73\xbd\x86\xec\xb6\xf8\xd5\x86\xf4\xcc\xaf\x9d\x13\x08\xb6\x7e\xb3\xfd\x7c\xdf\x99\x39\x18\xa8\xf0\xcc\x34\x9c\x16\xd2\x28\x98\xa4\x59\x2f\x12\xaa\x0b\x17\x2b\x7b\x84\x35\xee\x57\x60\xa7\x81\x67\x9a\x82\x33\xed\xe0\x4e\x71\x2c\x69\xca\x11\xe6\xdc\x55\xeb\x71\x0d\xb1\xbb\x43\xd3\xc6\xd4\x0c\x2e\x5e\xd5\xa7\x68\xc0\x47\xf9\xb2\x01\x87\x03\xdb\xb5\x57\x47\x8f\x81\x29\x04\x1c\x81\x82\x41\x81\xf3\xc9\xb0\x6f\xfc\x91\x27\x52\x9f\x47\xee\x40\xca\x0f\x78\x19\x16\xcc\x9c\x47\x8d\x02\xe0\x4f\xe1\xd5\x68\x4d\xa1\xa0\xbd\x43\x49\xdc\xa1\xc4\x2c\x9f\x1b\x0d\x55\x46\x78\x6a\xbf\xab\xd8\xf8\xb4\x3a\xcb\xfc\x77\x95\x1f\x96\x1d\xcb\x66\xd5\x9c\x16\x6c\x7c\x5a\x38\x37\x8b\xd3\xc1\xa0\xd0\x57\xef\x72\x56\xcc\xdd\x39\xbd\xb3\x2b\xc0\x9a\xc3\x9d\xf0\x5e\xe9\x86\x1f\xd9\xfb\xf5\x51\x3c\xcb\xe7\x2c\x0b\x68\x30\x5d\xc7\xbf\x0f\x5e\x21\x79\xf3\x48\x0c\xcf\xfa\x36\x0f\x34\x12\x40\xe3\xf8\x7b\x75\x4e\xc2\x49\xaf\x7e\xe1\x81\x91\xf6\x25\xfe\x14\x1c\xf7\x7f\x39\xff\xda\xfd\xa7\x91\xbf\x0a\x32\x7f\x57\x97\x19\xeb\x3b\xf2\x70\x92\x8e\x7d\xd2\xd7\x47\x92\xe2\x69\x51\x4b\xfa\xa4\xc1\x09\x1e\xaa\x9d\x86\xaa\xf6\x27\x90\xec\xf6\x99\x6c\x12\xba\x72\xf3\xa6\x42\x41\x9e\xc0\x9f\xa5\x96\x20\xd0\x55\x88\x22\xb3\x32\xd9\xef\xa1\x05\xc3\x77\xc2\xc0\xa5\x58\x32\x9a\x61\x89\x78\x3a\xf8\x89\x2a\x69\xae\x77\xe5\xfd\x1e\x5a\x31\x7c\x0d\xc9\xad\x85\x9a\xbe\xdc\xe7\xcb\xa1\x5e\x26\xbe\x0d\x6f\x1a\x5e\xf4\x60\xa7\xd4\x18\x6f\xe1\xce\x85\x9c\x5a\x3e\xd6\xe0\xfd\x21\xc9\x11\xdc\xc9\x2d\x7a\x7f\xdf\xb2\xac\x7f\x53\x6c\x47\x0a\xb5\x33\x67\xe8\x13\xa1\x8f\x7b\x3b\x51\xcf\xc6\x40\x61\xc8\x5c\x40\x87\x44\xf8\x47\x38\x34\x50\xf1\xfe\x38\x90\xfb\x5f\xb6\xa3\x27\x41\xf4\xab\x36\xe1\x1e\x43\xd9\x8f\xd0\x4c\xb7\xbb\x6c\xb6\x3b\x23\xf7\xad\x4a\xbf\x22\xc1\xbe\xb3\xd5\x7a\x4c\x51\xb8\xb5\x88\xc3\x3b\x26\x74\xa1\x07\xab\x30\x0f\x66\x38\xb4\x6e\xbd\xea\x11\xce\x09\x5d\x61\x12\x55\x52\x81\x83\xe9\x13\xbc\xd6\x09\x90\x79\x71\x71\xce\xc6\x71\xbc\x3a\x63\xe3\xfd\x7e\x71\x06\xbf\xcf\x19\xf4\x23\xfe\xe5\x2b\x55\x9f\xc5\x71\x9c\x37\x96\x80\x2d\x4d\x92\x73\x36\x4e\x83\xbf\xc6\x64\xbf\xc7\x62\xfe\xc3\xcc\xa0\x75\x82\x9c\xd9\xec\xec\xdf\x63\xc7\xfd\xd8\x1f\x87\x37\x9a\x67\xf5\x03\xe8\x54\x31\x18\xed\x53\xc2\xed\xc2\x18\x7a\xf4\x06\x6f\xe1\xea\xbe\xff\xb3\xb6\x16\xed\xb8\x0a\xf6\x0c\x90\x7e\xed\x5c\x62\x4c\x4c\x55\x0a\x58\x0d\xfe\xd3\x1f\x82\x9d\xe7\xbc\x76\xe5\x74\x48\x4d\x21\xc6\x84\x3d\x03\x40\x03\x22\x82\x44\x5f\x05\x9d\xb0\xd5\x80\xf2\x07\x13\x5f\x83\x17\xb5\xca\x7f\x89\x63\xd5\x9c\x8a\xb2\x25\xfc\xd6\x8e\x96\x7c\x95\x24\x02\x4e\x96\xf6\x2a\x0c\x24\x37\xdc\x54\x5c\xff\xe3\xd9\x65\x3f\xf0\x8a\xc3\x38\x1e\xdb\xb4\x71\x2c\x5a\xc3\x8e\xaa\xc6\x9f\x2d\xc0\x7c\x30\x9c\xae\x41\x3f\x87\x82\x3b\x96\x0d\x4f\xc3\xe6\x62\x29\x6b\x4b\x02\x3a\xc8\xf6\x0d\x7c\x89\xb8\x09\xf4\x42\x18\x04\x85\xda\x15\x4e\x3a\xe9\x4e\x8b\x90\xf2\xd8\xac\xd4\xe5\x35\xe4\x5f\xdf\xf0\xe6\x7e\x56\xeb\xef\x70\x6f\xd3\x1d\xab\xb7\xe6\x20\xfa\xc8\x56\xd7\xcf\xbb\x3a\x32\xaf\x09\x47\xa6\x2b\x72\xb8\x8a\xe8\xff\x5b\x29\x4a\xaf\xd9\xbc\xb3\xa3\x01\x15\xab\xab\x85\xc4\x0d\x41\x1e\x0c\x81\x28\x93\x4f\x82\xd0\x4f\xff\xb5\xad\xc0\xd1\x97\xd8\x9e\xb7\x9c\x1a\x9f\x1a\x36\xe3\x86\xc6\x63\x30\xe0\x24\x0c\x07\x6e\x43\x54\xef\xf5\x1a\x06\x03\xe4\x70\xa8\x57\xb2\xe3\x29\xb5\x66\xd5\x64\xf4\x31\x30\x61\x80\x5b\x1f\xd6\xe4\x07\xc1\x2e\x46\xaf\x00\x25\x58\xf7\x79\xd7\xb5\x31\x58\x39\x27\xb9\x38\x91\x44\x36\x3d\x12\x80\x09\x58\x97\x32\x13\x73\x06\xd2\x5f\xaf\x69\x8b\x21\xca\x25\x67\x2a\xd0\x66\xfd\xdb\x15\xf1\x39\x4f\x14\x39\x4b\x8c\x2d\x05\x68\x20\xeb\x0c\x4c\x80\x5d\x5a\x83\x7a\x06\x96\x36\x8e\x52\xbb\x0c\x36\xa2\x5f\xec\x5b\x97\x35\xcc\x35\x6f\x8a\x4e\x18\x31\x6f\x8a\x56\x2c\x33\x0f\xa4\x30\x9c\x36\x11\x2e\xea\x27\x65\x52\x33\xdb\xa5\x1c\x9a\xe0\xac\x39\x22\xcb\x0b\x9b\x9e\x48\x5e\x00\x92\xf5\x69\xd4\xe3\xa3\x00\x1e\x5b\x9f\xc6\x03\x16\x21\xef\xce\x10\x40\x4f\x4e\x86\xd1\x40\xb5\xa0\xb8\x43\xd8\x98\x68\xfb\xe5\x14\x9c\x9e\x1d\x1b\x8c\xc9\x06\xc9\x9e\x4e\xc2\xef\xeb\xfc\xae\xb5\xef\x5f\xeb\x5b\xaa\x53\xb2\xf3\xac\xda\x49\x4e\x7f\x2a\x13\x00\x5b\xa1\x33\x6c\xcc\xdc\x76\x60\x70\x8d\x30\x6f\xad\x98\x20\xb4\x54\x0d\xd9\x44\xf5\x22\xf9\x20\x08\xfd\x70\xef\x22\xe9\x32\x9a\x71\x8f\x8b\x96\xf8\xc6\x3e\x55\x23\xef\x1a\x7b\x94\x27\x32\x78\x82\x17\x71\xac\xea\x2c\x0f\x79\x28\xca\xe6\x44\x69\xf9\x1b\x72\xd0\x5b\x7e\x4d\xdd\xd7\x53\x4e\xdb\x9d\xd8\x2d\xc5\x50\x3a\x9b\x47\xaf\x5f\x84\x21\xff\xb9\xc8\x13\xe9\x59\x94\xc6\xc0\x1d\x09\x0c\x5c\x25\xda\x3e\x34\xdd\xe3\x61\xee\x4a\x3a\x2c\x09\x05\xb3\x19\xe1\x99\x7a\x0e\x7a\x5d\x7e\xf8\xeb\x8f\xf7\x6b\xc3\xca\x5b\xeb\xa7\xa0\x4f\x7a\x41\x2a\xff\x02\x2e\x5c\xdd\x87\xbc\x27\xe2\x38\x81\x16\xd8\x6a\x0f\x04\x58\x64\xfc\xa6\x12\x55\x63\x2a\xe8\xa6\xe6\xf9\xb7\x48\xd0\x8d\xe5\x40\xcc\x9e\xf0\xdc\xee\x09\xad\xdd\x00\x35\xa2\xfc\x8b\x62\x9c\xfe\x84\x35\xa0\xd6\x94\xd0\xd4\x51\x4e\x0d\x57\x56\x3a\x09\x56\xfb\x6f\xc6\x91\x3e\x54\xd3\xc2\x0d\xc9\xaf\xdd\x1f\x9b\xaa\xd5\xd3\x00\xec\x10\x0d\xf1\x1e\x24\xd3\xf4\x5f\xfb\x8f\xd5\x80\x00\x4a\x42\x72\x99\x2d\x3e\x5f\xc9\x72\x27\x96\x43\x32\x4d\x3e\x5e\x0c\xc8\x03\x7b\xbb\x44\xfc\x43\xce\xb8\xf3\x32\x92\x68\xb8\x47\x06\x36\xc8\x04\x0c\x64\x60\xab\x67\x41\x5e\x67\x93\xf9\x34\x32\xa4\xd7\x86\xf9\x01\x7f\x1b\xb3\x14\x35\x13\xf3\xa9\xc2\xed\xee\xe1\x3c\x0d\x68\x36\x22\xa8\x63\x45\xa2\x81\x8e\x19\xe8\x3f\xbf\xd1\x7f\x12\x63\x18\xab\x77\xc7\xfd\x1e\xfe\x1d\xb0\xe8\x04\x93\xf9\x05\xe8\xfb\xe3\x9b\x90\x27\xe5\xb2\xc8\xc4\x67\x3d\x24\x7e\x2b\x73\x41\xe6\x42\x13\x20\x42\xda\x7e\x0b\x70\x25\x93\x80\x00\xf3\x04\xa1\x20\x7d\x0e\xd3\x66\x40\x62\x60\x23\x49\x6a\xec\xa6\x7d\xb5\xfe\x19\xf8\x3d\xd5\x17\xe6\x64\x8c\x1a\x7b\x01\xa0\xb5\xe3\x79\xa3\x78\x49\xa0\x10\xbb\xf8\xf8\x08\xa0\x61\xdd\x43\xb3\x42\x9b\x63\x63\x9d\xea\x1e\x5c\x5a\x4f\xa5\x3a\xb7\x93\x68\x80\x50\xc6\x83\xe8\x64\x95\xe5\x05\x5f\x9e\xa8\xf2\x24\x5b\x5e\x67\x62\xc1\x4f\x2a\x30\x8c\x1f\x45\xc1\xdc\xfa\x35\xac\xb4\x0d\xcc\x03\xac\xc2\x0a\x21\xe2\x8c\xbd\x23\x17\xcb\x74\x05\x86\x96\x95\x61\xf5\x19\x19\xcb\xc9\x84\x50\xbd\xa8\xd3\x12\x7d\x3f\x0c\x76\x26\x9f\x56\x60\xe9\x56\x2e\x39\x5d\x90\x74\x71\x80\x77\xa2\x92\x66\x78\xc4\xd0\x8a\x61\x64\x4f\xb1\x57\x3c\xc9\xa8\x25\x27\xa5\x85\x96\x87\x33\xf3\x0e\xa6\xef\x35\x95\xf2\x0f\xca\x52\xdf\x62\x74\xcb\xaf\x85\xbe\x4d\xf0\x2f\x8a\xb6\x40\x6b\x50\x5b\x25\x40\x8f\x36\x9b\xa3\x1e\x74\x85\xc6\xec\xa3\xc5\x9a\xc4\x71\x7f\x35\xe2\x65\x91\x90\x53\x62\x1a\xc7\xb0\x61\x25\xfb\xa7\x48\x2a\xba\xa2\x0b\x00\x56\xd8\xa1\x6a\x23\x07\x5b\x06\x67\xed\x3a\xdd\xa5\x79\x12\x74\xe3\x3f\x82\x0b\x20\xa8\x48\x8d\xc2\x56\x8e\x42\x08\x76\xb3\x44\x50\xdf\xe7\x6b\x1c\x26\xf1\xed\x1f\xd3\x05\xee\x06\xae\xa9\x5d\xad\xa4\xeb\x20\xa3\x10\xd3\x3d\x8e\x67\xfa\x6b\x04\x58\x8e\x90\xd4\xf5\x47\x91\x7c\xa3\x6f\xc6\x82\xd0\x92\x9c\xfa\x0e\xd0\x2b\x69\x85\x36\xe6\x2e\xaf\x36\xbe\xfa\x34\xa9\x58\x7f\x42\xb3\x38\x56\x39\xca\xe7\x14\x3e\x22\xf8\x8f\xe3\x49\xa5\x3b\xc3\x0a\xb2\x63\x3f\x8a\xe4\x9f\xba\xc0\x15\x15\x74\xad\x0b\xa5\x6b\xec\x99\x25\x5b\xeb\xbd\x45\xcf\xd4\xde\x12\xc6\x28\xda\x0c\xa3\x41\xb2\x9b\x2e\x07\x7a\xe9\xef\xd2\x25\xca\xe0\xfd\x6a\xbf\x5f\xf4\xd9\xce\x00\xbe\x16\x67\x66\xb0\x4e\x49\x9e\x14\xcc\x11\x05\xda\xf9\x59\x0c\xbe\xe7\x7f\x23\x74\x41\x7a\x0b\xb6\x3b\xd4\x06\xf6\xe0\x32\xd8\x96\xd5\x69\x9d\x14\x1e\x72\xd0\x83\x8f\xdf\xf7\xf2\x64\xab\x87\xbf\x60\xdb\x60\x7d\xff\xde\xf2\x6b\x9c\x59\x66\x21\x3d\x85\x9f\x73\x31\xa7\x25\xbb\x3b\xf4\x70\x32\xd8\x79\x69\x49\xa8\xa8\x6c\xd2\x3c\x99\x37\x2a\x2d\x71\xd2\x32\xf4\x1e\x44\xb6\x5c\x1e\x90\x8e\x16\xd9\x6d\x20\x0a\xbb\xe9\xd5\x4c\x32\xcb\xe6\x74\xc7\x26\x7a\xf6\xd4\x6a\x81\xc0\xef\x6d\xf0\x7b\xaf\x0a\xdb\x9d\x16\x67\x16\x43\x57\xb0\x7c\xb6\x9b\xf7\xc4\x39\x5c\x32\xfe\x7f\xf2\xde\x6e\xbb\x6d\x1c\x6b\x14\xbc\xd7\x53\x58\x5c\x5d\x1c\xa2\x05\xc9\x92\x9d\xc4\x31\x6d\x44\x93\x4a\x25\x55\xe9\x4e\xa5\xaa\x2b\xa9\xfe\xf9\x64\x75\x0e\x45\x42\x16\x2a\x14\xa1\x26\x41\x3b\x6e\x8b\x6b\x9d\xfb\x59\xb3\xd6\x79\x84\x73\x31\xd7\xf3\x10\xe7\x29\xe6\xfa\x7b\x92\x59\xd8\xf8\x21\x40\x49\x4e\xaa\xbe\x3e\x67\xad\xf9\xc6\x17\xb4\x08\xe2\x1f\x1b\x1b\x1b\xfb\x57\x93\x0e\x35\x9e\x60\x8a\xd9\xac\x1e\x4c\xe6\x12\x80\xea\x01\x39\xc1\xce\x0a\xc8\xfb\x6a\x03\x0c\x36\xb6\x8c\xaa\x11\xdf\x24\xff\xa8\x29\xb2\xc5\x4b\x5c\x0f\x4b\x4c\x21\xdc\x91\xee\xad\xa4\xd8\x10\xae\x49\x39\x38\x51\x8c\x72\x75\xc9\xbd\xac\x2f\xca\x01\x39\x31\x6c\x14\x36\x2b\x07\x93\x79\x4f\xfd\x23\x11\x9f\x72\x09\x20\x71\x10\xa0\x41\xa7\xae\xa6\x69\x05\xd2\xf7\x60\x74\x54\xc5\x0c\x83\xb8\x9c\x56\x31\x1f\xe9\x43\x0b\xc4\xe6\xe6\xd4\x9a\xea\xe0\x97\xed\x2a\x53\xe6\xc5\xc2\x50\xd6\x4b\xd5\x76\x6b\x7e\xcd\xc6\xf3\x3e\xe9\xac\xbb\x99\x36\xc0\x51\xcf\x19\xc4\x55\x64\x44\xc3\x8b\x77\x4d\x7c\x78\x83\x55\x45\xe4\xc0\x4b\x81\x62\x70\x9b\x05\x4d\x81\x21\x3b\x58\x8e\xa9\x6e\x10\xa6\x7f\x60\x36\xd2\x43\x9c\xea\x6f\x2f\xd4\x2b\xb1\x1f\x62\xff\x03\x98\xfa\x79\x39\x55\x40\x8b\x92\x10\x13\x59\xac\xe4\x85\x60\xca\x46\xd0\x7d\x1f\x0c\xac\x8b\x1a\xdd\x7a\x3b\x6f\x1a\x27\x38\xbb\xc3\x19\x0a\x7f\x08\x85\x01\xd8\x6b\x0d\x06\xc2\x01\x95\x14\xdb\xed\x18\x6b\xa4\xf5\xbb\x22\x62\xb8\x44\x17\x7d\x6e\xd0\xd5\x9f\x64\x0a\x97\xa7\x80\x57\x4a\xd2\xde\xdf\x16\x08\x7f\xeb\xd2\x98\x10\x67\x86\xef\x31\xb1\x7b\xce\xb4\x82\x9d\x62\xc0\x30\x72\xdf\xe0\x82\x79\xfe\x8a\x18\x6b\xdd\x6b\xab\x38\x9d\xd5\xef\x77\x9d\xf6\x3b\x22\x63\xe1\x61\xe0\x69\xc1\xe2\x92\x59\xca\x62\x46\xe7\x92\xde\x9e\xd1\x39\xb1\x4e\x97\xa2\xe3\xab\x77\x83\xe3\x6b\xd8\x15\xbf\x0b\x03\xe4\x9c\x28\x9c\xb9\x7c\x9b\x56\x09\xcc\xca\x63\x70\x35\x0d\x36\x49\x96\xb1\xe2\x7a\x08\xe1\x4e\xe3\xa3\xd1\x64\xf3\x29\x50\xba\x37\xb8\x20\xf7\x9b\x92\xc6\xb2\xe0\xa6\xa4\x01\x9e\x95\xbe\xbe\x98\x72\xe5\x88\x75\x2c\xaf\xb8\xc4\x29\xcf\xe3\x31\xde\xf0\x2a\x1e\xe3\x74\x1d\x53\x0c\x66\xed\x60\xe4\x54\xc5\x11\xdf\x6e\x2b\xd0\x81\xb9\xa6\x42\xb9\x68\xef\xc4\xa3\x42\x4d\x4f\x98\xfb\x94\x6b\xae\xaf\x28\x20\x12\x41\x58\x0d\x31\x55\xff\xf4\x6e\x88\xc7\xa8\x55\x65\x48\x70\x4d\x98\xfe\x3e\x63\xc3\xc9\x3c\x56\xa7\x7d\xaf\x00\x90\x18\xe3\x42\xa9\x70\x7d\xa4\x05\x49\x18\xfe\xb3\x1b\x71\x4a\xb7\x2b\x2f\xdb\x09\x79\xc1\xa2\x1a\xa9\xa8\x01\xb6\x40\xcd\x9c\x37\x0c\x8a\xfa\xa3\x75\xb2\x21\xb3\x39\x4e\x59\x54\xe3\x02\xc3\xbe\xaf\xb1\xe8\x3b\x51\x6e\xe8\x27\x41\xcb\x22\xc9\xbf\x57\xd5\x67\x61\xf8\x1c\xea\x46\xb8\xee\xee\x28\x3f\xc1\xe0\x1a\xe8\x84\xfe\x4d\x5e\xf1\x03\xb9\x70\xd1\xe2\xa6\x20\xd8\xa9\xbd\xc5\x56\x50\x9d\x7d\xdb\x53\xa1\xfd\x86\x9d\x7c\xaa\x52\x84\x81\xf1\xb6\x4e\x36\x56\x79\x55\xbd\xc1\x21\x34\xc6\x72\x7e\x35\x30\x8c\xe4\xe5\xb9\xc8\x94\xfd\xe8\x3f\xf6\xcd\xb3\xaa\x8d\x4d\x23\xbb\xe4\x30\x9b\x50\x21\x6e\xd3\x20\x1e\x2a\xb9\x6f\x50\x1c\xf9\x39\xb5\xf6\xab\x93\xe0\x0a\x21\x65\x02\xc2\x51\xa7\x1e\xbf\x8c\x4a\x72\x4a\xdd\x37\x8a\x60\xa8\x0c\x6f\xbc\x1d\x0e\x98\x72\xc9\xc1\x5c\x44\xc7\x57\x8b\x74\x3d\x14\xc9\xe2\x6a\xa1\x37\x72\xde\x2a\x54\xa1\xed\x36\x1f\xfd\xa3\xa6\xe5\x9d\xf2\x89\xc1\xcb\x30\xec\x24\x44\xc1\x48\x95\x0f\x34\x84\x99\x36\x6c\x25\x24\x50\x19\x20\xe2\xd9\x70\x95\xa4\x1f\x03\x7b\x87\xf9\x13\x58\x0a\x94\xb4\xc8\x4c\x54\x1f\x4b\xd2\x4a\x9c\x45\x91\xfa\xd7\x56\xb6\xbb\xe0\x9d\x0c\xbb\xeb\x8c\x8b\x16\x87\x24\xcc\xa1\x4a\x2b\x5c\x1b\x09\x98\x9a\x20\xed\x76\x4d\xed\x70\xd8\x78\x1a\x27\x1d\xdd\x9f\xe2\xe6\xf8\x1a\x57\x0c\xc5\x02\xa7\xa0\xea\xb8\x27\x84\x22\x5e\x92\xfe\x44\x5e\x50\x52\x63\x7d\x89\xee\xef\x5a\x93\xee\xb4\xa4\x89\xa0\xdf\xe8\xd7\x57\x65\x72\xad\x6c\x8f\x2d\x66\x58\xa9\xd0\x94\x29\xac\x8f\x0a\x91\xb3\xea\x29\xe2\x30\x05\xdf\x8d\x91\x40\x78\x43\xb2\x69\xa6\xae\xa3\xc3\x55\x6c\x65\xdd\x20\xf4\xda\x68\x49\x78\xb7\xcd\xf7\xf4\x13\x70\x66\xa2\x5c\xdf\x67\x57\x78\x35\xd8\x20\xd4\xe3\x61\x98\x5c\x9e\x4f\xef\x3c\x00\x77\xf4\x6b\xd7\x73\x84\x62\xff\xab\x0e\x81\xad\xb7\x09\xd5\x36\x66\x1b\x5e\x0d\x36\x18\xbe\xa5\x3c\x1f\x90\x8d\x4e\x23\x1b\xa0\x59\x33\x13\x4c\x73\x19\xad\x06\x64\x33\x98\xe0\xe0\x4a\x04\x84\x64\xb3\xf1\x5c\xf5\xf9\x46\x4d\x6a\xd7\xd1\xe6\x35\xb9\x19\x42\x95\x5f\xdd\x5c\x44\x6b\x72\xa8\xa3\x1b\x1e\x5d\x23\x1c\x58\x48\x44\x1d\x95\xde\x92\x43\x18\xb9\x4d\x49\x2b\x63\x73\x18\x20\xbc\xde\x55\xfc\x15\xca\xd9\xcd\x95\xf2\x26\x08\x43\xb9\x6e\x43\xd9\x5c\x95\xba\xcf\xdb\x6d\x70\x55\xd8\xfe\x3f\xd0\xb1\xb6\xc8\x34\xf8\xf7\xff\xf6\x7f\x06\x71\xf0\xef\xff\xed\xff\xda\x13\xe3\x72\xa7\xc7\xb6\x2f\xd0\x84\xe9\xcb\x04\xfa\x22\x1b\xf4\x66\x6b\x7f\xb0\xcd\x08\x8a\x7e\xa6\xe2\xdf\x0a\x01\xa6\x3b\xfb\x41\x61\xa2\x40\x01\x6c\x9e\x1b\xd5\x67\x5d\xc4\x7a\xf5\x96\x8b\xbe\xb3\x39\x5a\x40\x55\x02\xe6\x3d\x55\xdb\x4b\xd5\x9d\xe9\x7c\x18\x46\x4b\x50\x1a\xd5\x20\x67\x72\x80\xc4\x62\xbb\x2d\xb6\x5b\xb6\xdd\x2e\xb7\xdb\x5a\x41\xda\x82\x94\x12\x31\x00\x2f\x6c\x31\x20\x85\xf2\x1e\xb8\x18\x10\xad\xe1\xfe\xc1\x55\x30\xbf\x9b\xe3\x05\xae\x5b\xd3\xfa\x30\x8c\x3e\xe8\x30\xa4\x95\x9a\x86\xdd\x03\xe2\x03\x6a\xf6\x7f\xb8\x43\x0e\x59\x5d\x31\x5f\x09\x24\x38\x0a\xb0\xaf\x1d\x38\x3c\x51\x22\xf8\x01\x29\xbf\x3a\x99\x02\x8d\xff\x3f\xfe\x7b\x60\xad\xa0\x81\x25\xd4\xd6\x57\x33\x8f\x91\x6f\xe9\x3b\x7b\x03\xd7\xf8\x8e\xb0\x29\x1b\x04\x47\xe9\x7a\x08\xcc\xbd\xe1\x82\x97\x19\x2d\x83\x38\xe8\xa6\x58\xb4\x94\x93\x12\xe6\x3f\x25\xf9\xc0\xca\xa2\x2f\xda\xbe\x2b\x05\x18\xcb\x6b\x5d\x1a\xfa\x65\x45\xc4\x6c\x09\xf2\xda\xd5\x48\xf0\x67\x79\x18\xae\xb4\x3a\x56\xae\xd0\x41\x63\x3e\x91\xd4\xf2\xaa\x3a\xfd\xed\x41\x82\x65\xcc\xc9\xdc\xc3\x1c\x41\x06\x45\xf2\xe1\x1a\x61\xa5\xfd\x84\x0b\x62\x32\x9a\x6c\x39\x91\xbf\x5c\xc9\x67\xbe\x43\x94\xf7\x8b\x30\x74\xc5\x48\x3d\xa6\x84\xf2\xfb\x40\x0f\x33\x84\x65\x7e\xd8\x7c\x7e\x7c\xb3\x82\xd2\xac\x7a\xa1\x16\xdd\xee\xb6\x30\x8c\xd8\x76\x1b\x31\xb2\x1f\x1e\x3a\xc0\x6f\x9c\x51\x28\xd8\x43\xe0\xda\x76\x67\xef\x2a\x69\x4f\x80\xcb\x11\xcb\x90\x76\x7c\xb9\xdb\x9b\x8a\x8a\x9f\x0b\x13\x8e\x36\x62\x87\x20\x95\xa1\x76\xd3\xb4\x73\x94\x32\x3f\xa4\xab\x2f\x11\x64\x3a\x68\x32\xe6\x64\xec\xeb\x2b\xc0\x8a\xe1\x1c\xa7\x78\x89\x57\x38\xb3\x7e\x9d\xf0\x86\x8c\xf1\x9a\x44\xcf\xc9\x04\x07\x01\xc2\x37\xea\x98\x63\xcb\xe8\x86\x90\x0d\xba\xaf\x49\x4e\x52\xb2\x24\x15\x09\x02\xac\x02\xa8\xe2\x1b\x32\x39\x6e\xa5\x60\xd7\xf8\x4e\x12\xa6\x0b\x32\xbe\x58\xb8\xea\x10\x0b\xd5\xc5\x0f\xa4\x98\x2d\xe6\xf8\x96\x7c\x30\x8a\x88\xae\x2e\xe1\xad\xd6\x25\xfc\xa0\xa5\x83\x9b\x30\xbc\x75\xd6\x7b\x7a\xa7\x16\xfa\x16\xc5\x1f\x34\x78\x6e\xac\xf0\xf0\x03\x08\x0f\xe5\xf3\xd9\x66\xbb\xbd\x75\x45\x90\x1f\x40\xe4\xb9\x71\xea\x45\x53\x2d\x8a\xf8\x00\xf2\xc7\x0f\x20\x72\xdc\x84\xe1\xcd\x33\x95\x10\xdd\xc0\x17\x9c\x13\x39\x0b\xb7\x1e\x51\x53\x2b\x06\xaf\x93\x08\x39\x2a\xc5\x19\x8b\xaa\x69\x35\x08\x2e\xd4\x25\x1f\x92\xe5\xd7\x56\xc3\xdd\x1b\x5c\x94\x9a\xba\xda\x0c\x32\xbb\x51\x81\x37\x5d\xbf\x09\xc3\xe8\x7a\xbb\x8d\xae\x1d\x9a\xb1\xcd\x85\x3f\x80\x3a\xed\xad\x42\x76\x61\xd8\x5f\x02\x9a\xbd\x35\xc1\x93\xbd\xb9\x88\xfa\x2b\x50\x31\x31\xba\x80\xf8\x56\xab\x98\xac\xc8\x07\x64\xe6\xf5\x99\x9e\x0a\x6d\x29\x29\x27\x03\xa4\xb1\x12\x0b\x28\xbb\x5b\xb5\xbe\xc6\x55\xc3\xc5\x62\x40\x4e\xd0\xf5\x6c\x31\x98\xcc\x55\x6f\x73\x35\xb0\xeb\xd9\x62\xae\x78\xf7\xab\xed\x76\x65\x67\xbf\xad\xe1\xce\x85\x90\x1c\x4c\x26\xf0\x9d\x29\xb4\x02\x8d\x46\xa5\x2f\x3a\x46\x00\x80\x6c\x19\x41\xae\xc8\x28\x38\x0a\x3e\xcd\x06\x13\xd0\x9d\x44\xc3\x8d\x55\x71\xf4\x15\x20\x71\x9b\xdb\x58\x5d\xad\x0c\x4c\x44\x2b\xd2\x9f\xa0\x46\x0e\x6d\xf3\x8c\x18\xea\xc7\x80\xf3\xcb\x96\x49\x94\xe1\x1b\xa4\x37\x83\xb6\x97\xfb\x44\x36\x83\xb5\xa3\xc8\xd4\xd7\x0c\xc2\x77\xe4\xd3\xb3\x97\xd3\xb5\x45\x85\x2f\x87\x1b\x14\xaf\x7b\xc2\x5e\xe2\x22\x81\xdf\xe1\x64\x9a\x0c\xea\xb8\xc6\x29\xde\x0c\xde\x19\x93\x5f\x72\x33\xcd\xe3\x20\xc0\x4b\x5c\xc1\x6c\x7f\x7a\x46\x5e\xa2\xfb\x35\x31\x95\xc9\xaa\xf0\x86\xbc\xec\x29\xac\xbc\x21\x9f\x70\x4a\x82\xa0\x59\x5b\xc7\x6b\x1c\x73\x52\xce\x9e\x0f\x06\x73\x84\x13\xc2\x58\xa4\x5e\xb0\x70\xa8\x10\xa4\x0e\xfa\x23\x33\xca\xe7\x64\x72\xf1\xbc\xd5\x9c\x78\x2e\x57\xd3\xeb\x6d\xa7\xf2\x39\xc2\xba\xe2\x49\xa7\x62\x87\x09\xb0\xf4\x4f\xb9\x31\x69\x35\xc3\x41\x91\x42\xeb\x86\x87\x61\x10\x10\x47\xff\x56\x82\xa8\x44\x93\xdb\xad\x47\x37\xed\x8d\x91\xed\xb4\xb6\x62\x0f\xcb\x02\x8e\xca\x69\x09\xd1\xe1\x3c\x3d\x4a\x0e\x12\x3f\x86\xee\xa3\x5d\xf7\x6f\x0a\x77\x12\x81\xa9\xc3\xc5\x02\x1c\xee\x32\xb5\x80\x5f\xa1\xfd\x04\x55\xfa\x2b\xf0\xb8\x34\x27\x43\x4b\xac\xe1\x9c\x86\xcf\xf0\x4b\x7f\x05\x59\x19\x06\x0d\xbf\x12\x69\xf5\xf9\x62\x2a\x13\xe3\x49\x8f\xb5\x92\x6e\x6d\x29\xc5\x50\x83\x54\x87\x71\x01\x56\x2d\x14\x02\x18\x14\xd7\xea\x32\xe6\xcc\x46\xd2\x65\x91\x52\xcc\xc9\x6c\x0e\x9e\xbd\x25\xa1\xc2\x5b\x95\xd9\x6f\x8b\x28\x9f\x95\x73\xcc\xa2\x12\xe1\xa2\x15\x13\x28\xab\x98\x4a\x2f\x1a\x58\x8f\x01\x42\xd4\x5c\xd9\x54\xe9\xfc\x54\x5a\xc6\xb1\x54\xaf\xb5\x7e\x5d\xc9\x05\xcd\x91\x3c\x59\xa2\xdc\xf1\x79\xbe\x21\x2a\xc7\x50\x8b\x41\x5b\x1b\x06\x63\x95\x17\x8d\x71\x12\x8d\x71\x6e\x5d\x61\x60\xe3\x12\xca\x56\x24\xa7\x9b\xfd\x93\x0e\x6d\x1e\x6b\x60\xa4\x41\xce\x5c\xad\xdc\x8a\x86\x13\xd4\xe3\xd1\x12\x2f\x55\xf7\x33\x84\x37\xca\xc1\x3b\x54\xad\x25\xd5\x1b\x79\xd1\x30\x1c\x06\xdb\x23\xfd\x71\x8d\xec\xed\x22\x25\x44\x29\x7e\x4f\x08\xb1\xbd\xe0\x51\x8a\x53\xc5\x2f\x35\x1b\xbf\x1a\xa5\x2b\x34\x58\x0d\xbc\xe4\x5a\x26\xe2\x4c\xf5\x3a\x92\xbd\x9c\xb8\xbd\x44\xde\xd2\xec\x2f\x2b\xd7\x09\x1f\x6c\x2f\x9f\x8d\xe5\x72\x8e\x91\xf2\xb2\xee\x8c\x01\x88\x7d\x3b\x8a\x2f\xea\xbc\xac\x6c\xb0\xdc\xed\x83\xa9\xdf\x9b\xc0\xc1\x04\x6f\xd4\xb8\xee\xbf\xa4\x77\x72\x3d\x56\xfb\x2a\xcf\x50\x6f\x67\x5e\x7a\x9b\x67\x93\x9d\x15\x93\x0d\x0e\x27\x07\xc6\xf9\xd0\x06\xc9\x98\x75\xfb\xa3\x9c\x8e\x50\xd7\xc9\x01\xf1\xf4\xa3\x05\x19\x03\xb9\xdf\xd1\xfc\xa6\x33\xe1\xd9\x74\xe1\x72\x00\x6a\xe0\xd6\xc2\xdd\x15\x9f\xb7\x2d\x6f\xda\x96\x53\x49\xd9\x95\xb4\x20\xb4\xdb\xd6\x3e\x4b\x21\xc3\x99\x9e\x15\xf3\x9e\x18\x10\x36\x4a\x57\x75\xf1\x51\x5e\xbd\x23\x24\xdb\x66\x46\xeb\x80\x79\x96\x66\xca\xe1\x0b\x38\x05\xf3\x25\xfa\x3b\x03\x6e\x32\xe6\x3a\xfd\xb2\xd5\x1f\xf4\x84\xe4\xe8\xf1\x36\x58\xad\xcb\xeb\xa2\xf0\xe2\x95\x74\xb1\x50\x41\xe8\x40\x5c\x94\x97\x45\x6b\x4f\xc5\x5c\x17\x0e\xe5\xdc\x9d\xb7\x61\x3b\xa8\xbf\x81\xfe\xe7\x1f\x58\xc4\xb0\x76\x39\x1c\x78\x66\xf3\x5a\x54\xa3\x04\x52\x86\xde\xe9\xf8\xfb\x97\x1b\x4b\x12\xd5\xf9\x9d\xf1\x16\x05\x65\x6d\xd0\x91\xdd\xce\x5b\xed\x08\xad\x82\x61\x66\x4d\xc1\x8c\xdb\xbc\x86\x71\x8a\x8c\x51\xaa\x68\x7f\x75\xb3\x51\xc7\x6c\xbc\x13\x80\x43\x2e\x34\x44\xde\x70\x97\x10\x33\x41\xcb\xb7\x3b\x1d\x6b\xab\x90\x73\x4a\x61\x4e\xc1\xb7\x6c\xe9\x3a\x3c\xa1\x73\x57\x13\x11\x6f\x7e\xdd\x1a\x4b\xc0\x79\x68\x6d\x6d\xa6\xe1\x8e\x01\xa4\x07\xe2\x7b\xac\xe8\xbc\xef\x70\x02\x91\xc2\x85\x69\xd0\x7e\xb8\xb4\x2a\xc9\x96\x0e\x13\x98\x0d\x29\x38\x9c\x35\x3b\x0d\x4c\xf1\x9c\x3e\x46\x14\x73\x4f\x7d\x65\x48\x92\x61\x61\xb7\x07\x21\xdc\xf8\x47\xb1\xdd\x33\x92\x3e\xd0\x31\xc2\x85\xbb\x2d\x80\x5d\x1c\x89\x21\xe1\xc8\xea\x9f\x8c\x15\x12\xa5\x43\x65\xaf\xd3\xce\x82\xb8\x3c\x79\xbc\x53\xb9\x16\x9f\x4d\xb6\xdb\xbe\xff\x65\x36\x9e\x3b\x01\x4a\x33\x86\xac\xb1\xd4\x4c\xef\x03\x03\xc9\x51\xa5\x07\x64\x71\xc6\x0c\x62\xa8\xb0\xa8\x42\x73\xdc\xad\xd4\x83\x9e\x03\xdb\xc1\xb7\x69\x39\xb0\x58\x02\xf9\x55\x8b\x79\xdb\x23\xfa\x25\xfb\x46\x4e\x4a\xcb\xe6\xc1\xfe\x5e\xea\x6e\x82\xfd\x7d\x28\x3c\x34\x61\xbb\x02\x02\x6b\xb6\x0b\x30\x84\xc3\xc9\xcc\x46\x4e\xdf\x74\x97\x74\x88\x97\x2a\x0c\x99\x87\xbc\x9e\x3d\x1e\xb7\xf3\x91\x10\xff\xe3\x57\x27\x8f\x07\x27\x8f\x71\x45\x92\x8b\xea\xd2\xff\x74\x61\x94\xdd\xf5\x52\x30\x6f\x97\x57\xb8\x1a\x90\x93\xc7\x08\xf5\x98\x05\xc3\xda\x6a\x86\xed\x83\xbe\xc1\xa0\xc0\x63\x5c\x23\x5c\x7b\x0b\xa8\xab\x25\xac\x83\x6b\x12\x0d\x12\xe0\x88\xe3\xdd\x86\xe5\x79\x84\x1a\x75\x2f\xa0\x43\xc2\x9b\x06\xb7\x5f\x3a\xce\x11\xfb\x7b\x21\xf4\x92\x4c\xc6\xc8\xd5\x63\xeb\x65\x5c\xdb\xba\xc8\x11\xca\x93\x6b\xa7\xcf\xb4\x5b\xc9\xf0\x31\x7e\x8c\xb4\xea\x92\x1a\x05\x44\x3f\x52\x28\x02\xfe\x63\x6a\xe7\x43\xb8\xaa\x9b\x25\xb9\xe6\xb6\x90\xad\x16\x83\x01\x4b\x27\xd1\xee\xd7\xc1\x04\x8f\x25\xca\x07\x9a\x43\x81\xd2\x4e\x57\x51\xcf\xee\x67\xd9\xb6\xb3\x83\xb0\x98\x63\x4a\x8a\x46\xd8\xef\xc6\x6c\xfa\x76\xc5\xf2\x3d\x83\x7b\x36\x19\x3b\xbd\xf1\x26\xfe\xf3\x58\xfa\x5f\x07\xe3\xd6\x31\x98\x83\x14\xf9\x90\xc2\x57\x06\x3e\x0a\xde\x46\x14\x27\xb8\x44\x9e\x4e\xbb\xc6\x63\xc9\x3e\x3c\xc6\x8d\xaf\xb6\x35\x23\x63\x7c\xc3\xc8\xbb\xd1\x37\x3c\xdd\xe3\x15\xdb\x42\x8f\x1b\x5b\xf9\x86\xb5\x22\x65\x7a\x7b\x74\xd3\x5e\xc6\xb4\xda\x10\xa8\xcd\x92\x31\x92\xe7\x8f\x72\x4d\x2d\x29\x26\x83\xc3\x66\x9a\xda\x0d\x94\x88\x18\xcd\xd1\x5c\xc3\x36\xd8\xbf\x9b\x53\xd7\x6a\x0a\x13\xe7\x15\xdc\x78\x68\x7f\x58\xae\xab\x2b\x95\x90\xd3\xa4\xf8\x96\x16\xb4\x04\x41\x02\x99\x58\x4b\x70\xd0\x09\x20\xa5\xbe\x74\x65\x34\x2a\xf1\x58\xeb\x37\x57\x34\x27\xbf\x00\x2b\x4e\xa1\x2b\xe5\x33\x01\xe0\xea\x3d\x8b\xd4\x91\x20\xac\x27\xba\x35\xd3\xbb\x90\x67\x26\xfe\xb7\x70\x3c\x1a\xd2\x0d\x29\x8c\x1b\x2f\x41\x8b\x4c\x76\x6d\x5f\x9c\xfd\x48\x6b\x8e\x82\x58\x4b\xde\x73\x2b\x49\x26\xe0\x95\x56\x0f\x57\xde\x3e\x18\x16\x5c\x3e\xe8\x27\x11\xd3\x06\xe1\x6f\x95\x3f\x3f\xac\x7a\x9b\x70\xd4\xf4\xdc\xe8\xe4\xe4\x03\x8f\xdc\xf3\x1e\xdf\xa7\xbc\xa8\x44\x59\xa7\x82\x97\xf1\x0d\x03\x88\xdd\x01\xd8\x72\xaa\x06\xa7\xa0\x68\xd8\x2e\x03\x16\x43\x79\x4f\x8d\x9d\xcf\xee\x47\xfb\x73\x60\x31\x3f\x6e\xcf\x88\x83\x34\xe1\xb8\x1b\x83\x4c\xee\x86\x72\x60\xe2\x8f\xb5\xa4\xb4\x87\xcf\xbd\x6e\xe1\x12\x19\x1a\x65\x1f\x79\xe2\x51\x06\x5e\x41\xd4\x60\xe3\xa0\x79\x8f\x97\xd1\x4f\x7a\xee\x3f\x33\x48\x73\x63\x06\x2f\xf0\x74\x2a\x62\xa1\xbc\xde\xd3\xed\xd6\x05\x03\x13\x13\x0b\x35\xb8\x32\x6d\xfe\x49\x44\xbb\xcd\x66\xd4\x9d\xd6\x31\xc2\xd6\xc9\xa0\xd7\xec\x70\xd2\x7b\x5d\xba\xc0\x21\x74\xc0\xe9\x12\xdf\xea\x8e\x97\x5e\xbc\x6b\xa4\xe0\x66\x17\xca\xac\xf7\x18\xd3\xaf\x00\xcb\x2b\x79\xdc\x1f\x37\xe0\x7d\xcc\x81\x32\x81\x50\x83\xb0\x1b\xf8\x2b\xde\xc5\x10\xdf\xe9\x6e\x51\x0c\x8a\x91\x46\x9d\xb8\x24\xe5\xd4\xbc\x4a\x28\xc2\x85\x9a\xfe\x7d\xd5\x18\x1a\xf1\xa5\x1e\x89\x29\x47\x11\x6e\x6b\xf4\x26\xbe\x9c\x16\x71\xa1\x26\xbe\x3c\x38\xf1\x3a\xbc\xdf\x21\x8f\xb2\xfa\xf3\x77\xe0\x82\xc8\xf1\x0f\x2a\xc2\x50\x71\x3d\x6c\x0d\x2a\x4b\xdc\x71\xc5\xf5\xca\xf6\xd2\x20\x43\xb3\x12\xb4\x6d\xfc\x6d\xbd\x5e\x74\x42\x3a\xb6\x5a\x3d\x4e\x3e\xd5\xc4\x9f\x59\x55\x27\xf9\x6e\xa8\x63\x13\x6b\x00\x2a\xeb\x22\x92\xb6\x55\x84\xc1\x7e\xac\xc1\x72\x2e\x5e\xf0\xfa\x01\x27\xa1\x40\xe8\xdb\x20\xcd\x87\xb2\x41\x86\x06\x1b\x5b\xb0\x07\xb3\xb9\xb0\xda\x60\xed\xbe\x64\xdf\xc0\xdb\xd5\x85\xd1\x2b\x9f\x38\x07\xdd\xfe\xd2\xdc\x58\xbd\x44\xc8\x75\xc4\x0f\xae\xdb\x55\xf0\x78\xd8\x87\x10\x71\x2e\x36\x31\xe6\x55\x92\x7a\x89\x03\x5a\x40\xa6\xed\x36\x10\x5c\xfd\x30\xbb\x17\x62\xa4\xb7\x21\xc3\xb1\x1f\xfa\xee\xe0\xec\xd1\x7c\x54\x4a\x38\xae\x1a\xbc\x13\xe8\xf1\xa1\x42\x7b\xa2\x42\x02\x7e\xd0\x73\xe0\x21\x08\xb5\x31\xfe\x41\xfd\x2d\xb1\x0b\x03\x53\xa5\x17\xbe\xdd\x8e\x51\x4c\x91\x35\xa7\x41\xd8\x0d\x20\xf8\x25\x55\xbb\xbb\x6d\xbb\xa5\x48\xd5\xd2\x89\x1e\xbc\xaf\xa2\xef\x76\x2b\x12\x61\xe8\xe2\x82\x3d\x15\x55\xdd\x9a\xd0\xfd\xcf\xba\xc4\x3f\x9d\x7a\xf6\x95\xfc\xfa\xee\xf3\x65\xef\x8c\xcf\x61\xbb\x54\xb0\x3f\x44\x77\x62\x76\xba\x61\xdc\x6c\x18\x34\x7a\xbf\xc7\x6e\x9e\xba\x01\x34\xd9\xac\x98\x13\x1d\xbb\xd1\xce\x80\x3c\xcd\x14\xf4\xb5\x93\x4a\x4d\x88\x4d\x64\xc8\x24\x70\xdc\xe9\xe8\xa5\x5a\xf6\x17\xf6\x60\x5f\x05\x45\x68\x31\xf3\x5b\x1a\x31\x3d\xad\x0d\xc2\x49\xf6\xf0\xea\x38\xd7\xef\x76\x32\xcc\xad\x02\x88\x65\x27\xf8\xe4\x21\x58\xf0\x5b\x2f\x70\xe1\x70\x79\x61\x75\xaf\x5d\x60\xdb\x7b\xf1\x34\x07\x9b\xb3\x22\x8a\x14\x28\xf7\x84\x23\x35\x27\x41\x29\xe7\x4c\x07\x6d\x85\xdf\x72\xbf\xa2\x9e\x20\x62\x2a\x0c\xc3\x85\xa1\x98\x35\xbf\xf6\x50\xbe\xa6\x7b\xf7\xf9\x6e\xdc\xd9\x7f\x59\x9f\xc1\x25\x04\x08\x9e\x4d\x24\x9d\x43\xbd\x43\x18\x8c\x52\x98\xd5\x60\x6d\x70\x37\xf2\xe5\x03\xf7\x8e\xd9\x1c\x3b\x7e\x54\x9d\x25\x77\x1c\x32\x15\x33\x36\x27\xda\x2c\x69\x37\xb0\x6d\x21\xab\xdc\x6e\x6d\xf4\xce\xdd\xe6\xf7\xee\x9a\x4e\x17\x4c\xf3\x36\xc8\x90\xdf\x0d\x27\xb6\x8c\xf9\x34\xe3\xf3\x5e\x31\xe3\x73\xa2\x28\x9c\xc4\x4c\xa2\xe0\x71\x02\x93\x78\x80\xa4\x01\x2f\xbf\x9a\xaa\x29\x1b\x23\xc8\x08\x43\xc0\xfb\xe0\x6d\xe9\x33\x5d\xf5\x7d\x6f\x71\xc2\xb0\x52\x6b\xb7\x44\xaa\x13\xc1\x53\x28\xc5\xf5\xb7\x65\x54\x69\xdf\x04\x98\x83\x8f\xe1\x32\xfa\xb1\x8c\x2a\xd0\x80\x50\x37\x33\x70\xb8\x8c\x39\xc9\x71\x90\x80\x7d\x53\x40\x88\xde\x8f\x29\xa1\xce\xca\xc8\x1a\xc1\xd4\x3d\x55\x61\x53\x53\x83\x3a\x2e\xc7\xbd\x62\x96\x58\xec\xb2\x9c\xe6\x71\x8d\x97\xd3\x3a\xce\x35\x5b\xdf\xfd\x5a\xe3\xd6\xa5\x89\x4c\xfa\x5e\xee\x53\xda\x41\x22\x8d\x02\xd1\x02\x0b\xad\xcb\x4c\xda\x9d\x7c\xc1\x9f\xc9\x95\x1a\x0e\x91\xa1\x34\xc1\x9f\x41\xaf\x9a\xfe\x59\x6f\xfd\x4a\xdf\x06\xd2\x75\x18\xfe\x43\xb3\x1d\xd3\xb5\xdc\xfe\x75\x91\x71\x0f\x26\xd0\xfd\x2b\x5d\x89\x8a\x0e\xa7\x08\xc9\xc3\x99\x20\x3c\x9c\xa9\x69\x3f\x3e\xeb\x56\x09\x6e\x0f\x54\xad\x9f\x2d\xa0\xa2\xcf\xa9\x02\x15\x15\x2f\xe1\x44\x01\xa3\x20\x67\xe7\xbb\xf7\x36\x0a\x28\x62\x4f\x3e\xff\x50\x57\xb9\x1b\xac\x6f\x8d\x5d\xde\x6a\x27\xcc\x82\xce\x85\xbb\x6c\x7f\xc7\x79\x1f\x20\x14\x95\x22\x51\x87\x02\x90\xed\x76\x30\x50\xfc\x56\x53\xc2\x73\xf8\xa7\xcb\xa8\x34\xbf\x94\x89\x5d\x74\x0f\x0b\x24\xd4\x12\x94\x8d\xa4\xcf\x5a\xff\x80\x3b\x11\x1a\x3a\x77\x60\x37\x6d\xb4\x4e\x3e\xb5\x37\x6c\x70\xd6\x5f\x7e\x7c\x21\xef\xdd\x3b\xb5\x74\x6f\xe3\x9a\xd9\x21\xfb\xd6\xa6\x46\x72\x4d\x70\x37\x75\x1f\xd9\x48\x0d\xa3\xd5\xf4\x44\x52\xa5\x3f\x6c\xc8\x4e\xda\x3b\x9a\xef\x4b\xfe\x01\x10\x04\x71\x2e\xf4\xe6\xeb\xb5\x6d\xb7\xc1\xac\xea\x0c\x86\xfa\x0b\xbe\x5b\x86\x10\x8b\xc8\x3b\x23\x56\xc7\xcc\x9e\x49\xd6\x6b\x22\x97\x2b\x7e\xdd\x99\x5f\x99\xa8\x76\xc1\x9e\x8f\x2a\x19\x35\x40\x34\xee\x54\xec\x53\xce\x5f\xbe\x88\x3d\x01\xad\x92\xd7\x2a\x36\x76\x61\xcd\x2d\x91\x0d\xcd\x8c\x85\x6e\x5b\x65\xd2\xe0\xb7\x93\xad\x91\xd4\x08\x78\x44\xcf\x93\x6a\xef\x21\xa1\xe7\xf2\x6f\xf6\xd2\x18\x28\x03\x6a\x49\xd0\x4e\xcd\xef\x38\x00\x65\x9b\x00\x77\x87\x56\x10\xe5\xf8\x11\x32\xb7\xf6\x9c\x71\xd0\x1a\x91\xaa\x6f\xad\xd5\xe7\x6e\xf5\xe6\xcb\x6d\x99\x6c\xb4\x3d\xa8\x24\xf8\x66\xc5\x1c\x28\xbf\x5f\x78\x54\x6a\x3b\x4f\x48\x6b\xc3\x83\xd1\xd6\xdc\x53\x33\xd2\xc0\x76\xb4\x67\xe5\x2d\x0a\x1d\xad\xf9\x0d\xfd\xff\xde\x1c\x60\x2d\x6b\x64\xcb\xa8\xcf\xda\x31\xb7\x8e\x2b\xc0\x77\xa1\x12\x95\x5a\xf6\x2b\x07\x47\x35\x22\x5d\xa9\x59\x53\xba\x3f\xdc\x0f\xa8\x96\x10\xae\x6d\x74\x79\x6b\xa3\x0b\x73\xe9\x46\x0f\x34\x76\xbd\x91\xfe\x15\x86\x49\xdf\xea\xa9\x4d\x8d\x19\x95\x29\x90\x20\x65\xba\xd9\x78\x53\xaf\x61\x4f\x39\x41\x78\x60\xe2\x77\x79\x18\x5a\x17\x83\xde\x1e\xfd\x45\x59\x85\x43\x6c\x44\xf0\x9b\x6b\xf4\x23\xc2\x90\x79\xe6\xfc\xdc\x2a\xf6\x25\x39\xbb\x2e\xfe\xa2\x4d\xd3\xe5\x5e\xf9\x9b\x92\x40\x18\x73\x72\xcf\x61\xac\xb1\xbe\xd1\xa6\xec\x60\x28\x60\xcc\xda\x67\x73\xd4\xce\xb7\x91\x68\x3c\x17\x53\x1d\x1f\x9e\xa1\xb8\x34\x9c\x70\x7b\x67\x28\xdb\x3b\x83\x63\xfb\xde\x16\x46\x08\x8f\x31\x33\xb2\x10\x22\x30\x57\xf1\x19\x5a\xc5\x89\x82\x28\xdf\x0d\xb4\x65\xb8\xf6\xc0\x9b\xad\xe1\xd6\x0f\xfe\x5c\x80\x3e\x62\x01\x0e\x1b\xb4\x7a\xa7\x11\x72\x80\x43\xd8\x3d\x16\xe9\xce\xca\x60\xd6\x58\x0e\x91\xba\x2c\xb4\x7b\x44\xaf\x95\x2f\xb8\x35\xbe\x70\xb1\xf1\x6f\xbc\xcb\xb4\xd4\x1e\xbe\x8b\x07\xf8\x45\xb8\xc4\x25\xf8\x3f\xb9\xdb\xc8\x9b\x3f\x9c\x89\x81\xba\x6e\x7f\xad\x75\x10\xe3\x7d\xae\xd4\xee\x5d\xc7\xd5\xb1\xb0\x1a\x87\x02\xbc\x29\xbc\xbf\xdb\xd0\xa9\x59\xb2\x58\x20\xdc\xba\x3e\x8c\x81\x71\xd4\xbe\x63\xdf\xed\x5b\xdc\x9f\x60\xe5\xcf\x5c\x65\x54\xbf\xf1\x8e\x07\x6c\xf5\x75\x27\xb9\xe9\x75\x06\x4d\x89\x33\x6c\x09\xb3\xad\x6a\x25\x6a\xb0\x75\x2c\xfb\x7c\x5f\x50\x2b\xb8\xd9\x18\xbe\x51\xe4\xd6\x84\xf6\xbb\xff\x74\xdc\x87\xf8\xf7\x1f\x47\x98\x21\xef\x3a\x17\x16\x7a\x95\x1e\x1f\xd3\x8a\x9b\x54\x19\x32\xef\x78\x7e\x79\x66\xbe\x08\x0d\xe3\xc6\xcb\x8b\x92\xb9\xc8\x4c\xda\xcd\x8d\x73\x19\xb2\x63\xdb\x81\x0b\x6f\x4e\x5c\x76\x64\xcf\xa1\xf6\xa9\xe7\x85\xc8\xb2\xb7\x75\xe4\x04\x6d\xe5\xe2\xfa\x79\xb6\xf2\x97\x2f\x77\x8d\x55\x99\x0b\x83\x76\x8d\xa5\x14\xc3\x6a\xd0\x36\x65\x44\x77\x41\x05\xa0\x7c\x06\xc9\x0a\x9f\x11\x52\x6b\x2d\x4c\x50\x07\x93\x99\x4c\x7c\x42\xfb\x81\x58\x7f\xda\x2a\xe9\x19\x11\xa3\x74\xb5\xdd\x96\x61\xd8\x2f\x5b\x0f\x59\xdb\xad\xbe\xd9\xd7\xdd\x29\xb5\x59\x9a\xc1\x80\x35\x08\x17\x40\xa6\x3c\xcf\xf3\xce\x9c\x1a\xd1\xe0\x6c\xbe\x3b\x57\xfb\x50\xda\xaf\x01\x19\xed\x3b\xd1\xdc\x94\x21\xc2\xa3\xec\x2c\xa4\x98\xee\x21\x4c\x1b\xbc\xe1\xd5\xab\x92\xab\xeb\xcb\x2e\x24\x7b\xdc\x72\x5c\x90\x7d\xf7\x69\x73\xe4\x1c\x1e\x84\xd5\x3a\x60\x2e\x07\x7d\x00\x5e\x0d\xf9\x33\xeb\xae\x41\x10\x8a\xfb\xe3\x1e\x1d\x12\x8e\x07\x83\xb2\x69\xb1\x0d\xf0\xe1\x05\xd2\xb1\xb3\x3e\xc9\x0e\x77\x99\x9f\x6a\xe3\x75\xf6\x5a\xba\xea\x99\x70\x01\xda\x97\x10\x0c\x04\x94\x21\x57\x97\xe3\xd6\x9b\xcd\x4d\x1b\x7d\xe8\x4b\x47\xe7\xcc\x8b\x86\x6c\xef\xae\x33\xd0\xda\xe2\x66\xb0\x72\x38\xa2\xc1\x29\xdf\xec\xa3\x28\xb5\x98\xef\x4b\x65\x24\x5d\x19\xd9\x4e\x01\x3d\x88\x96\xe7\xbe\x5f\xda\xf7\x9e\x6f\xb0\x70\x25\x7f\xc2\x97\x04\xca\x8f\x34\x6f\x59\x0d\xc2\x11\xbb\xc1\x7d\xc1\xa3\x9c\xbf\xa1\x1b\xb1\x22\x3b\x04\x35\x24\x43\x4d\x86\xa4\x8e\x8c\x7c\xa0\x75\xa0\x0e\x93\xa3\xa2\x3a\x7c\xc3\x53\xff\xc0\xda\x6e\x23\x30\x1d\xec\x39\xd4\xb7\x1a\xeb\x7e\x59\x4e\xcf\xa8\x89\x1a\xd0\x87\x6d\xac\x98\x81\xd4\x51\x61\xee\x83\x7f\x0d\x88\x98\xca\x2f\x95\x48\x55\xfe\x34\xc8\xac\xbb\x26\xb8\x04\x03\x30\x9e\x99\xeb\x88\x3b\xff\xfb\xa7\x9d\xea\x53\x48\x8e\x13\x0c\xf8\xcc\xa5\xc1\x9d\x24\x84\xad\x82\xd1\x47\x9a\x49\x8a\xa5\x7d\x73\xad\x1a\x33\x9e\xc6\x05\x6e\x2b\x8c\xdd\xda\x25\x9e\xb1\x65\x20\x2b\x74\xda\x44\xc7\x88\xfb\xe3\x83\x25\xe7\x07\x3d\x01\x78\x4e\x31\x4b\x83\x72\x0b\x22\x8c\x7e\x91\x75\x25\xd9\xfa\x53\xd7\xae\x24\xc1\xad\x47\x9b\x26\x14\xcf\x66\x43\x21\x1c\x87\xe1\xf5\x40\x1c\x10\x8e\x13\xb0\x75\x04\x19\x44\xfb\x0b\xe8\x0a\xd4\x2b\xac\xf7\x2f\x98\x84\x0a\xe1\x56\xc9\xae\x69\x9a\xa8\xc0\xb7\xda\xc9\x0f\x20\xda\xba\x90\x73\xd0\x85\x20\x89\x03\x5c\xf9\xfa\x3b\x90\xeb\xa8\xb8\x4d\xd8\x99\x6d\xb4\x47\x8b\xa7\x1b\x80\x44\x78\x61\x62\x3e\xd2\x6c\x26\xe6\xe0\xc3\x8b\x38\x1a\x90\xb2\x84\x71\x41\x8b\x41\xa1\xd2\x76\x4c\x75\x16\xbf\x2c\x22\xdb\x71\xad\x7d\xae\x42\xda\x1a\x08\xf1\x41\x44\x1f\x02\x33\xe5\x7c\x76\x27\xf2\x4a\x69\x4c\x76\x58\x86\x94\x94\x91\xee\x17\xb4\xfb\x91\x0e\xc8\xbe\xcb\xb1\x02\x73\xff\x46\xbc\x93\x51\x25\x03\x87\x1c\xc4\xde\x6f\xcc\xce\xf5\x91\xf2\xc2\x17\xd8\x7d\xcf\xb3\x83\x32\x2e\xb9\x99\x14\x4f\x28\x63\xc2\x95\x57\xf9\xd9\xd2\x75\x83\x5b\xde\xe4\x41\x36\x82\xde\x88\x53\x6d\xd8\x1a\x79\xbb\x33\xfe\x1b\xb7\x52\x3c\x8b\xe9\x1f\x52\xcb\x7c\x47\x37\xca\xee\xb1\x69\x10\x76\x55\x02\x46\xd4\x84\x11\xf2\x52\xe5\x8c\xa8\x48\x7d\x8c\x04\xf2\xe5\x48\x51\xad\x47\x8a\x30\x3f\x92\x87\xc0\x91\x1d\xea\x91\xa3\x46\x10\x38\x11\xe4\xad\x3e\xd7\x1d\x3b\x62\xc5\x91\xdb\x02\xf2\x9a\xeb\x38\x9a\xbb\x63\x28\x0c\xaf\x79\x74\xcd\xf0\x1d\x43\x97\xe3\x30\x8c\xde\xb5\xb9\x67\x77\x6c\xbe\x2f\xc6\xe2\xee\xf0\xa9\x56\xee\x84\x69\x80\x50\x73\xe5\x35\x58\x6d\x55\xa8\x69\x22\xb7\x07\xb2\x4e\x84\x9c\xc0\x44\xd6\x8e\x2a\x6a\x9d\x69\x44\x60\xdd\xa6\x1c\xcf\x75\xf7\x9b\x62\x07\x17\x3b\x9b\xcd\x7a\x37\x31\x9f\x66\x09\xdc\xa0\xa1\x3f\x7d\xc2\x0c\x0d\xc8\xc3\xb0\x72\x50\x5a\x4f\xd2\x6a\xb5\xc4\xa4\x2a\x27\xae\x11\xa6\xfa\x67\x81\x6b\x08\x72\x80\x8c\x6b\x3c\xcf\xb9\xeb\x07\xe6\x44\x03\x48\xd7\xbb\x41\x68\xde\xaf\x58\x75\x64\xcc\xd7\x8e\x58\x75\x94\xe4\x25\x4d\xb2\x3b\xb9\x42\x75\x45\x47\x01\xea\x01\x5e\x21\x02\x2c\x39\x08\xc5\xef\x23\x8a\xf0\x0f\xf2\xb1\x3f\xf0\xde\x76\xfb\x8b\xff\x71\x0d\x5e\x00\xdd\xd3\xe5\xdf\x84\xe7\x04\xec\x96\x39\x61\xc1\x87\x44\xb3\xd6\xd1\xe5\x78\xbb\x15\x92\xe0\x07\x12\x61\x4f\xcf\x69\x49\x65\x8f\x0b\x7e\x24\xdb\x3f\x0a\x06\x91\x18\x98\xc2\x83\x00\xc2\xfb\xaf\xa8\x1d\xdc\xc8\x81\xc0\x92\xd0\x8b\xbe\x8a\x12\x52\x5d\x78\x74\xa7\x77\x41\xf9\x9c\xaa\x95\xb8\xe4\xe8\xbe\x24\x4c\x23\x3c\x31\x24\xdc\x3a\x85\xd6\xfa\xb5\x62\xee\x44\xd8\xe8\x98\xe3\x29\xb1\x87\xef\x9a\xf5\x33\x21\x64\xa8\x75\xd8\x0f\xc4\x58\x8f\x11\x1b\x72\x28\xe2\x84\x3b\x7e\xcf\xd2\x15\x78\x6a\xb1\xc4\xbf\xf3\x59\xa8\x8f\x9a\xde\xe7\x08\x1b\xba\xde\xf6\xf4\xd3\x4e\x4f\xbb\x1d\xf4\x5c\xfe\xb4\x01\x3e\x94\x91\x8e\x5f\xd9\x3b\xcf\xdd\x87\x18\x52\x47\x31\xd7\x25\xfa\xe9\x45\x71\x51\x10\xa3\x8c\x87\x8a\x56\x13\xd4\x09\x9a\xc1\x1c\x5f\x8f\xc4\x2a\xe4\xed\x75\x5c\xde\xea\xeb\xe1\x52\x85\x68\xb3\x21\xcf\x0a\x62\x74\xfa\x2e\x8a\x0b\x41\x0a\xec\xb4\xeb\x7a\xf7\x28\x5a\x08\x60\xf3\x3e\x11\xe0\x7e\xb0\x1c\x10\x2f\xdd\x83\x0a\xb3\xfc\x03\xa1\x95\x21\x6c\xd7\x7f\x60\xbe\xdb\x6b\xf8\xdc\xa3\x71\xc6\x3b\x4a\x80\x3b\x6a\x85\x9e\x7e\xff\x0e\x4c\xb6\x93\x09\xe0\x48\x09\xeb\xb5\xee\xcb\x01\x26\x95\xfa\xbf\xd3\xcb\xd6\x73\xb9\x52\x64\xec\x6b\x27\xdc\xc8\x93\x19\x74\x42\x2a\x16\xe6\x56\xab\xbf\x38\x0a\x58\xd0\x76\xa2\xd5\x06\xc5\x90\x24\xb6\x81\x81\x03\x07\x1f\x3b\x76\xd2\x63\x5c\xca\xfb\x0d\xa8\xa0\x20\xb3\x52\xf6\xee\xb7\xb7\x71\x46\x4a\xdb\xb8\x92\x99\x11\x6a\x9a\x6d\x4d\x1c\x6c\x24\x55\x4e\xcc\x2d\xf6\x82\x5f\x70\x12\x95\x84\x23\x77\x99\x55\x63\xfc\xf0\x7c\xcb\x2b\xbc\x33\xdf\x70\x85\x27\xa4\x6c\x9b\x4c\x4c\x93\x96\xdb\x60\x87\xfb\x82\xb9\xbe\xe0\xc1\xae\xcb\xd7\x47\x31\x04\xbc\x32\xf9\x4a\x13\xb3\x7b\xe4\xd5\xc1\xd6\xf2\xbe\xb5\x07\x01\xc2\xc5\x44\xbf\xd5\x74\x8c\xfb\xaa\xae\x2b\x93\xe3\x71\x1b\xe5\xf9\x7b\x9e\xbd\x67\x6b\xda\x06\x76\x7f\x47\x73\x48\x70\xf2\x18\xd9\x47\x2b\x0a\x69\x43\x34\x3b\x72\x10\x2f\x4f\x2b\x1a\xc1\xfa\xea\xe3\x4b\x6d\x3c\x79\x01\xa1\xdb\xad\xe3\xb5\xf9\x27\x6f\x1f\x28\xd1\xed\xda\xc4\x7e\x01\xe1\xed\x8f\x65\x24\xb4\xec\xf6\x65\x1b\x96\x46\x85\x85\xb1\x6c\xad\xb7\x0c\x18\xaf\x4e\xc8\x9a\x36\x1a\xcd\x60\x82\xf0\x0e\x4d\xf9\x99\x02\x8a\xcc\x74\x50\xcd\x8f\x16\x5c\x2f\x68\xab\xd1\xcd\x96\x51\x7f\x2d\xc9\x2d\x2d\x34\x33\xba\xb2\xa3\x0d\xdf\x44\xae\x57\x80\xef\xf7\x38\x8d\xd2\xd4\x66\x8f\xf9\xf2\x38\xa2\xee\xeb\x1c\x27\x64\x00\xc2\xd9\x44\x80\xed\x5b\xc4\xcc\x02\x91\x62\xbb\x65\xee\x6a\x10\x31\x52\x02\xec\x30\x6c\x7f\x45\xc1\x20\x68\xbf\x98\x10\xec\x63\x15\xdf\x6b\x0d\x6a\xed\x2d\x4c\x3c\x4b\x86\x9e\x05\xa5\xee\x1b\x30\x0f\xbf\xa1\x79\x72\xb7\xdd\x06\xbf\xdf\x5b\x1d\xb8\x87\xe1\x07\xbc\x0e\x4f\xa3\x1f\x8d\x54\x08\xe1\x35\x37\x3f\x51\xec\x49\x2d\xc3\xb0\xdf\x7e\xd3\x33\x39\x6d\x53\xfc\xcc\xcf\x26\x10\xda\x10\x84\x95\xde\x87\xe1\x89\x11\x5d\x4e\x8d\x20\x0a\x56\xc1\x6b\x57\xfb\xb2\x8c\x18\x76\x66\xb3\xb5\xa4\x58\xf3\x88\x6b\x21\x63\x85\x7a\xbb\x61\x88\xc0\x16\xb5\x4d\xab\x64\xda\x14\x02\x44\x01\x94\xc6\xb6\xb0\x3a\x00\x35\x70\x3b\x1a\xe7\xb5\x6c\x82\xa9\xde\x00\x7a\xad\xc3\xb0\xb6\x12\xd7\x6f\xe4\x64\x55\x34\xc7\x3a\x07\xe6\xe4\x5e\x57\x18\xcf\x74\x65\x73\xdc\x6e\xaf\x98\xf9\xd2\x47\x3d\x6a\x75\x8e\x5f\x30\x6f\xda\x58\x8b\x15\x2e\x90\xfe\x54\xad\xd8\x52\x44\x48\x17\x9c\x8d\x5b\xd9\xaf\x9f\xa1\x71\x6b\x06\xd3\x08\x67\x8b\x0f\x06\xcc\xdf\xe1\xd8\x83\x2c\xc2\x3c\x54\x93\xb4\x13\xcf\x5c\x24\x83\x3d\x80\x66\x1d\xdc\x62\xc0\x0e\x57\xdb\xad\xf2\x2d\xa4\x01\x54\x45\x68\x73\xa8\xc7\x6f\x3c\x7c\xb2\xe6\x10\xbb\x21\x0c\x4b\x3d\x32\xf9\x8b\xfe\xa3\x4e\xf2\x2a\xa2\x10\xa8\xd1\x44\x22\xb3\x15\xbc\xdd\xd9\xa9\xdd\xe8\x28\xe0\x21\x41\x53\x3e\x56\x6a\x62\x34\x40\x4a\x84\x1d\x8d\x2c\xc5\xba\x51\x34\x2b\x2e\x9c\xe0\x6b\xa5\xbc\xd5\x3a\x2c\xcf\x30\x8c\xb4\x4b\x89\x6e\x6b\xe4\xbe\x41\x68\xc6\xe7\xc4\xcb\x2f\xa9\x34\xee\xc6\x6b\xfb\xc5\x90\x42\x7d\xba\x9f\xfc\xc1\x87\x22\xcd\x69\xfe\xee\x8e\xbb\xf2\xa9\x90\x57\x0c\xd7\x7b\x2e\x42\x4a\xba\xa0\x23\x8e\x95\x6d\xc4\x31\x31\x35\x8c\x94\xa9\x00\xab\xe9\xd8\xf1\x62\xfb\x9a\xed\x31\x6f\xd8\x51\x86\xb3\xa7\x2c\xb7\x92\x44\x6e\xb0\xaa\x76\x20\x59\x4e\xbf\xa7\x5e\x98\x5b\xba\x79\xc1\x37\x77\xca\x46\x80\xa3\x98\xa3\x56\xb6\xa8\xce\x6a\xa5\x74\x05\x16\x52\xba\x0e\xbb\x9f\xaa\xa6\x1b\x8e\x35\x71\xe3\xb0\x2a\xd7\x51\x38\x25\xc9\xac\xd6\x97\x32\x55\x1e\x4e\xa8\x54\xe3\x04\x1e\xa7\x23\xc1\xd5\xe1\xa4\x0c\x58\x1b\x84\x5b\xa2\x71\x29\x6f\x1d\x29\x8a\x72\xb2\x34\xee\x8b\xff\xae\x16\x37\xba\xca\x06\xe8\x77\xc7\x48\xdd\x65\x05\x56\x8a\xbe\x51\x3e\x9b\xcc\x11\x7a\x36\x9c\x84\x61\xb4\xe6\x51\x85\x66\xcb\x39\x49\x67\xcb\x39\x56\x66\x8c\x47\xf2\xb7\xbc\xdf\xd9\xc0\x3a\x76\x96\xdf\x38\x70\x5b\x6a\x7a\x6d\xaa\xfe\x0d\x48\x11\x8b\x4b\x23\x35\xd0\x0c\x63\xb0\x55\x4f\x57\xc4\xbd\x1f\xbe\x62\x87\x1c\xfb\x3e\x10\x25\x4c\x99\x8b\xd8\xb5\xba\xe7\xa3\x94\x6f\x18\xb0\xfa\x22\x95\x89\x70\xbb\x56\x11\x42\xfa\x33\xe9\x8f\xdb\x05\x50\xf2\x0f\xde\x51\xf2\xaa\x06\x03\xf4\x86\xd9\xaa\x67\x95\xd1\x8a\xd4\x7d\xc4\x9d\x8f\xa0\xfe\xa4\x1d\x59\x03\x20\xc8\xea\x4d\xd5\x06\x31\xef\x46\x1f\xb1\xdf\x74\x14\x92\xf2\xb2\x76\x22\xdf\xa9\xdf\x24\xa3\x91\x93\x3a\x28\x70\x6d\xfc\x13\x20\x5c\xcb\x03\x00\x32\x18\x02\xa2\x80\x34\xf9\xd1\x9a\x9b\x8b\x4b\x62\xbf\xa3\xfb\x84\xf4\x27\x86\x31\x96\x6c\xb7\x91\x8d\xe9\x34\x56\xf1\xdd\x99\x5c\x17\x87\x7e\xf8\xa7\x7f\x6b\x72\xa8\x96\x82\x58\xba\x05\xee\x8f\x6e\xa0\xac\xa8\x18\x96\x68\x38\xe9\xbd\x32\x87\xb0\x0e\xdc\x82\x5f\xb5\x6a\x18\x3a\xa9\x29\x78\x74\xa3\x3d\x25\x7d\xcd\xc8\xbb\x11\xfd\xb0\x29\xa9\x3a\xfe\x97\x49\x9d\x0b\xd2\x31\x8f\xf5\x3e\x4e\xbb\x09\x91\x3c\xb5\x15\x90\x82\x95\x00\xe9\x4f\x1a\xfc\x9d\xaa\xb7\x12\x7c\xf3\x63\xc9\x37\xc9\xb5\x3a\x40\xfc\x8a\x3b\x5f\xa7\x3b\x29\x50\x75\x9a\x14\x29\xcd\xbf\xae\x17\x8b\x1c\xe4\xc5\x2d\x77\xe6\x67\xd7\x8f\x83\xe1\x83\x67\xaa\x57\x3f\xaa\x3e\xd2\x6c\xba\x9b\x14\x8f\x09\xf1\xba\x0c\x9a\x80\x7f\x69\xbb\xec\xf5\xf3\x6b\xd9\x0a\xfe\x0e\x94\xf0\x9d\x80\x06\xcc\x0b\x7b\x24\x92\xf2\x9a\x82\x38\xa6\x2a\x53\xed\x05\xc8\x09\x54\xe0\xdd\x08\x6e\x57\x2c\x5d\xed\xde\x08\x26\x21\x1d\x2d\x6a\x21\x78\x31\x15\x64\x12\x9f\xb8\xaf\xa7\xf1\x23\xfb\x0a\x97\x87\x13\x84\xf0\x0d\x90\x77\xa2\xcc\xff\x48\xef\xc2\x70\x62\xee\x15\xa7\xf2\x1a\x21\xdb\xfa\x56\x0e\xc8\x9b\x74\x47\x69\x39\xc9\x32\xa0\xf8\xde\xb0\x4a\xc8\xe3\x1c\xed\x26\xc1\x5d\xbf\xef\xc4\x69\x35\xc1\xd5\x21\x17\xf2\xde\xa2\x80\x17\xc1\x00\xbc\x7b\x3b\x26\x77\x74\xf4\x41\x89\xa7\x21\x34\xb8\xf3\x26\x4f\xba\x8b\xa8\x98\x89\xf9\x76\x0b\xff\x1c\xf1\x00\xb0\x62\xff\x26\xcf\x8c\x76\xb6\xff\xb8\xe3\xcf\xc8\x56\x25\x27\xc1\xbe\xcc\x84\xe5\x57\x94\x53\x08\x22\xae\x49\xa2\xf1\xd4\x38\x96\x42\xf1\xdf\x58\x5c\x6c\xb7\x7f\x63\x30\x49\xbf\x83\x49\x5a\x2e\xf7\xcf\x92\x62\x73\x76\x27\x6a\x4f\xea\x9e\xb9\x52\xb1\xbc\xcc\x5c\x39\x6f\x9d\xb9\x3a\x6a\x8f\x4a\x3d\xcc\xbe\xc2\x0a\x17\xcc\x75\x94\x04\x41\x6b\x40\x1d\x97\x94\xe8\xde\x5a\x3a\x32\x3c\xb1\x6c\x77\xfc\x27\x39\x98\x8a\x5d\x17\x49\xbe\x37\xf8\x9b\xa9\x5f\x85\x2f\x34\x72\x56\x87\x13\xf3\xbc\x2c\x93\x3b\xe7\xdc\x85\x29\x53\x87\xae\xe5\x99\xe2\x13\xb4\x2f\xa4\x4e\x39\x63\x73\xcd\x67\x55\xae\xbc\x50\x83\xff\xca\xb4\xc7\x04\xb3\x8e\x7f\x60\xfb\xba\x33\xf1\xbb\xa3\xd6\x18\xb3\x2f\xed\x4d\xef\x9f\x62\x5a\x90\x7f\x8a\x51\x26\x6f\x2f\x34\x7b\x91\xe4\xf9\x22\x49\x3f\x56\xf1\x5f\xd9\xb4\x20\x7f\x65\x71\x24\x9f\xf2\xca\x5c\x51\x21\x49\x53\x5e\x8b\xe8\xdf\x18\x1e\x3b\xf6\xf6\x4a\xf7\xb8\x74\x63\xd9\x68\xd6\x56\x12\x95\x33\x3e\x47\xbe\x17\x95\x7d\xdc\x66\xea\x0e\x9f\x79\x38\xfd\xdf\x98\x15\x92\xff\x95\xf5\xec\xb4\x1c\x0e\x1f\x48\x67\x62\xee\xfa\x62\xa7\xdc\xd7\x68\xd9\x31\x15\x54\x7b\xff\x1e\xdc\xd5\x0b\xec\x63\xe8\x1d\x85\xcb\x2e\x42\x94\x68\xb5\x41\x18\xc8\xed\x52\x92\xca\x60\x15\x08\x11\xa1\x7e\x66\x91\x00\xea\x39\xe5\x19\x5d\x83\x9b\xdd\xd7\x10\x59\xdd\xf1\x92\xcc\x5d\xec\xb6\x7f\x63\x8e\x52\x30\x5c\x79\x9e\x0a\x76\xc3\xc4\x9d\x8a\x8a\xe7\x30\x65\xb5\x6a\x90\x9f\xeb\x3b\x17\x77\x3c\x94\x41\x62\x8f\x7d\xe6\x82\x3a\x74\x70\x09\x6a\xf2\x48\x5e\x08\x60\x45\xe1\xad\xed\x7f\xc9\xbd\x9b\xac\x82\x4a\x64\x31\x47\x9b\xb1\xe0\xe6\x40\x34\x10\xd9\xc1\xae\xe8\xfe\x5b\x66\x35\x98\x50\x83\xbd\xac\x1d\x1c\x83\xee\x7f\xe7\xe6\x05\x64\xc4\x38\x39\x1d\x63\xce\xc9\xbb\xd1\x8f\x49\x55\x91\x7b\xc1\xdf\xe9\x90\x04\x5d\xa1\x86\xe3\xf6\x18\xf2\x06\x4d\x83\x13\x4e\xee\x95\xc8\x3b\x96\x67\x70\xc5\xc9\xbd\x31\xe1\xfb\xfd\x9a\xd7\x15\x0d\x1a\x5c\x3b\x89\x03\x89\xc6\x02\xe7\x50\xcb\xb9\x81\x10\x96\x29\xd7\x1f\x39\x77\xf7\x5f\x27\x62\x10\xba\x07\xc5\x25\xb3\xa3\x74\xc1\xd6\x08\xd6\xd9\x6d\x02\x53\xed\x95\x3a\x95\xa3\x4b\x79\x5d\x88\x17\x3c\xaf\xd7\xdd\xe3\x49\x45\x9b\xb3\xa7\xa2\x5c\x41\x75\x33\xa1\x49\x29\x89\xea\xd9\xdf\xaf\xaa\xab\x7a\x3c\x4e\xc6\x73\x20\xa9\xe1\xa3\xf1\xf7\xd3\x6e\x66\x70\xb6\x9d\x10\xb6\xdd\x8e\x4d\x60\x91\x8a\x50\xa5\x31\xf8\xc3\x32\x0a\xae\x44\xa0\xb5\xef\xab\xcb\xf1\x76\x5b\x3d\x6b\x43\x35\x27\x83\x48\x0c\x39\xea\x25\x03\x52\x0d\x39\x4e\x06\xa4\x1c\x26\x5f\x95\x98\x93\x6a\x30\x69\x1a\xbc\x94\x03\x58\xb2\x22\xdb\xdb\xff\xee\xcd\xc7\x36\xcf\xbb\xcd\x17\x08\x42\x5b\x73\xe0\xa9\x50\x2f\x24\x49\x42\xf8\x50\xe9\x94\x10\xd2\x46\x71\x67\x83\xc4\xe9\x66\x31\xb0\x97\xcf\x04\x8b\xa1\x8a\x71\xc7\x06\xb2\x24\x2e\x08\x1f\x4c\xb0\x7c\x2b\x87\xec\xab\x12\x3d\xf3\x02\x51\xe3\x15\x27\xb3\x20\x70\x8e\xd7\x0d\xb7\x1c\xaf\x15\xb7\x46\xff\xf4\x02\xad\xb4\x43\xa8\x35\x8f\x56\x1c\x0d\x40\x98\xa7\x2b\x5a\xf1\x19\x75\x44\x1c\xc0\x1a\xb3\xf4\xd0\xac\xb5\x50\x9a\x03\x64\xdf\xf0\x2e\xed\x07\x8a\xf8\x91\x4b\x52\x5d\xf3\x7d\x62\x7b\xef\x16\x0b\xea\xb7\xe5\xdc\x09\xac\x6d\x58\xab\x43\x87\xd1\x78\xb7\x53\xd1\x6c\xde\xf5\x9c\x53\x0c\x06\xa8\x9c\x15\x73\xa2\x94\x77\x71\xb1\x2f\x80\xe2\x42\xee\x07\x47\xa6\xc6\x9d\xd3\xcb\x64\xff\x61\xf1\x0b\x4d\x8d\xff\xc7\x69\x49\xbc\xf7\x88\xa2\x38\x5a\x38\x7b\x88\x50\x5c\x82\x20\x7b\xc1\xc1\xf6\xed\x96\x43\x48\x14\x97\xfd\x78\xcb\x77\x20\x09\x24\x5a\x70\x45\xbf\x6f\x10\xa6\xa8\xbf\x23\x2a\x2d\x90\x36\x55\x2c\x95\x4e\xe0\xce\x47\x40\x7a\xc4\x8b\x1d\xee\x10\xa8\x2f\x1d\x14\xfe\x45\xa7\xee\xc4\xd6\x72\x58\xdc\xaa\xb8\xc4\xa8\x69\x36\xd3\x03\xcb\xcf\x78\x01\x26\xac\x64\x8c\x9d\xa4\x97\x45\x46\xe8\xe8\x46\x12\xe6\xc6\x8b\x50\x0c\xbe\x17\xfd\x4a\x44\x79\xe7\xc2\x51\x0a\x97\x6e\x81\xee\x1b\xad\x5f\xf3\x89\x93\xe3\x99\x44\x15\xd9\xf2\xaa\x1e\x3f\x7e\x7a\x26\x9f\xe7\xe3\xa1\xfc\xb7\x7c\x74\x55\x8f\x9f\x8c\xe1\xe5\xc9\x72\x79\x55\x9f\x8e\x1f\xc9\x97\xd3\xf1\x39\xbc\x24\xea\x05\xbe\x3c\x82\x6c\x8f\xb2\xc5\xe3\xab\xfa\x11\x85\x97\xf3\x65\x9a\x5e\xd5\x49\x0a\x2f\xd9\x59\xb2\x9c\x1f\xe3\x77\x12\x2d\xb0\xea\x2f\xbc\xcc\x5e\xac\xdc\xd0\x58\x76\x5b\x1c\x5f\xdd\x5a\x47\xfb\xdb\x2d\x7d\x16\xfc\x8f\xff\x1a\xc0\x1d\x5d\xf0\x9f\x37\x1b\x5a\xbe\x48\x2a\x1a\x21\xa5\xcb\xf3\x86\xdf\x9a\x84\xed\xf6\x13\xb7\xfe\xf9\x9d\xed\xf2\x9c\x77\x18\xb0\xfd\x7e\x24\x46\x15\xaf\xcb\xd4\xc5\x34\x57\xb7\x81\xe2\x32\xbc\x93\x6b\x0c\x47\xb9\xae\x2c\x86\x14\x47\x4e\xc5\x3d\x31\x8d\x04\x3a\x70\x1b\xb4\x03\x6c\x02\x85\xa1\x24\x50\x5a\xf5\x6d\xab\xc3\x2b\x4b\x7e\xe4\xf8\x85\x9e\xfb\x53\x35\xc5\xa7\x4f\xe4\x12\x3c\x7a\x7a\x3a\x84\x7f\xe7\xb0\x12\x13\x58\x89\x45\x06\x4f\x58\xa2\x74\x02\xcf\x13\x78\x3e\x82\xe7\x63\x78\xca\xa5\x7b\x32\x51\xab\x35\x49\xe4\xf3\xd1\x02\x5e\x1e\x53\xf9\x3c\x1b\xcb\x67\xf6\x04\x92\xb2\x14\x9e\x14\x5e\x28\xac\x33\x85\xf2\xf4\x29\x3c\x13\xf5\x41\x36\x7b\x36\x91\x0d\x9e\x9d\x42\xc5\x67\x8f\x64\xc5\x67\x09\xd4\x72\xb6\x90\x55\x9e\x51\x68\xe5\x6c\x79\x7a\x55\x8f\x9f\x4e\xe0\xcb\xd3\xc9\x39\x3c\xe1\xcb\xd3\x13\xf8\x72\xf2\x58\xbd\x9c\xc1\xf3\x5c\xbd\xc8\x06\xce\xd5\xf0\xcf\xc7\x72\x48\xe7\xa7\xb2\x67\xe7\x8f\x60\xdc\xe7\x8f\x9e\xc2\x13\x72\x3d\x56\x49\x8f\xe5\x60\xcf\x9f\x40\xde\x27\xb2\xe2\xf3\xa7\xb2\x7f\xe7\x0b\x28\xb7\x90\x43\x3d\x4f\x55\x56\x98\x9d\xf3\x14\x4a\x67\xb2\xd9\x73\x0a\xc5\xa8\x2c\x96\x8c\x27\xf0\x94\x29\x09\x34\x9a\x3c\x82\x94\x47\x90\xf2\xe8\x0c\x9e\x4f\xe1\x09\xc3\x48\xa0\x1b\xc9\x63\xc8\x04\x93\x99\x9c\xa9\xdf\xb2\x47\x09\xf4\x22\x79\x0a\x85\xa1\x2f\x89\xea\x45\x02\xab\x93\xc0\xea\x24\x29\xd4\x07\x3d\x4a\xa0\x2f\x09\xf4\x65\x01\x7d\x59\x40\x2f\x16\xa7\x14\x9e\x72\xad\x17\x6a\x1a\x16\x8f\x1e\xc1\x53\x16\x5b\x3c\x7e\x02\x4f\x59\xdd\x02\x66\x61\x01\xb3\xb0\x80\x96\x17\x30\xfe\x45\x3a\x86\x27\xe4\x87\x81\xa7\xa7\xb0\xd2\xe9\xa3\x31\x3c\x9f\xa8\x97\xa7\xf0\x4c\xd4\x8b\xcc\x9c\xc2\xe4\xa6\xd0\x44\x0a\x95\xa7\x50\x79\x0a\x03\x4a\x01\xfe\x52\x80\xbc\x34\x85\x3c\x29\xa4\x43\x43\x69\x06\x65\x33\x48\x87\xb1\xa5\x30\xb6\x0c\xc6\x93\xa9\x91\x64\x30\x92\x0c\x1a\xcb\x60\x0c\x19\x34\x93\x41\x33\x59\x9a\xc0\x53\x36\x93\x65\x27\x50\x20\x83\x02\x50\x6b\x06\x28\x8a\x9e\x4e\xe0\xf9\x68\x08\xff\x64\x09\xfa\xe8\x0c\x5e\x1e\xc9\x96\xe8\x02\xbe\x2f\xd4\xf7\xc5\x39\x3c\x17\xf0\x94\x9d\xa5\xe9\x53\xf8\x00\x7d\x5e\x4e\x9e\xc2\x53\x66\x5a\x9e\x3e\x86\xe7\x19\x3c\x21\xe5\x0c\xfa\xbc\x3c\x93\xd5\x2e\x9f\x02\x90\x2e\x9f\x3e\x82\xe7\x13\x78\x42\x5e\x85\x2c\x97\xe7\xea\x05\xe0\x7a\x09\x4d\x2d\xe5\x1c\x4d\xc6\x27\xd9\x50\xfe\x3b\x1d\xc3\xf3\x44\xbd\x9c\xc1\xf3\x1c\x9e\x09\x3c\x33\x78\x52\xf9\x7c\xfc\x14\x9e\xf0\xf5\x31\x85\x02\x4f\xa0\x34\x74\x68\x32\x3e\x7b\x24\x9f\x72\xc1\x27\xe3\xa7\x8f\xe1\x09\x2d\x3d\x85\x3a\xce\xe5\xf3\xf4\xf1\xf2\xaa\x9e\x9c\x4d\xa0\xb9\xb3\x89\x2c\x70\xa6\xda\x3e\x3b\x85\x97\xc7\x27\xf0\x3c\x95\xcf\x33\xf8\x7d\x06\xbf\x17\x67\x90\x49\x22\x9c\xc9\x19\x0c\xe0\x2c\x3d\x87\xa4\x0c\xbe\x67\xf2\xc3\xd3\xb1\xdc\x11\x93\xa7\x63\x78\x49\x64\x47\xcf\x4f\xe4\x34\x4c\xce\x4f\x4e\xe0\x79\x06\x4f\x39\x8e\xf3\x53\x48\x39\x85\x4a\xce\x4f\x17\x57\xf5\x24\x99\x9c\xc1\x53\x7e\x4e\x24\xb0\x4d\x92\xc7\x72\x55\x26\x89\xc4\x54\x93\x04\x06\x9b\x48\xc0\x98\x24\x4f\x1e\xc3\x87\x27\xa9\x7c\x9e\x9d\xc2\xcb\x99\x7a\x91\x23\x5c\x00\xee\x98\x2c\xc6\xb2\x73\x0b\x18\xda\xe2\xf4\x09\x24\xc1\xbc\xc2\x9e\x9a\x2c\xe4\x9e\x9e\x2c\x9e\x40\xaf\x17\x30\xd0\xc5\xd3\x31\x3c\x27\xf2\x99\xc0\xcc\x2c\x92\xc7\xf0\x7c\x0a\x4f\x39\xa8\xf4\x24\x95\x1f\xd2\xd3\x53\x78\x3e\x81\xa7\xec\x7b\x9a\x41\xb3\x69\x76\x02\xcf\x47\xf0\x42\xc7\xf0\x3c\x51\x2f\x4f\xe1\x29\x27\x28\x4b\x21\x73\x46\x65\xf9\x6c\x09\xe0\x90\xc9\x43\xf3\x64\x3c\x4e\xe1\x99\xc9\x27\x54\x79\x32\x5e\x8e\xaf\xea\x93\x94\x2e\xe5\x4b\xba\x9c\x5c\xd5\x27\x19\x85\x2f\x99\x3a\x81\x4f\x12\x38\x74\x4f\xe0\xe5\xfc\x1c\x9e\xc9\x55\x9d\x3c\x79\x22\x8b\x24\x4f\xe4\x62\x26\x4f\xe4\x14\x25\x4f\xce\x32\xf9\x94\x35\x26\x4f\x64\x55\xc9\x53\x89\xee\x92\xa7\xe3\x27\xf0\x5c\xc8\xe7\xc9\x63\x78\x42\x8a\x44\x98\xc9\x53\x68\x2e\x79\x0a\x05\xce\x4f\xe4\x64\x26\xe7\x12\x51\x27\xe7\xb0\xcf\x92\xf3\xc7\xf0\x05\x36\x44\x72\x2e\xc1\x30\x39\x5f\x9c\xc2\x53\x65\x96\x9b\x2e\x01\x84\x9c\x24\x80\xe8\x93\xe4\x84\xca\xa7\xdc\xba\x49\x22\x01\x22\x49\xe4\x76\x4b\x12\x39\xa7\x49\xf2\xe8\x14\x9e\x50\x40\x9e\x29\x49\xb2\x38\x81\x62\x8b\x47\xf0\x3c\x83\xe7\x53\x78\x42\x45\x12\x13\x25\x89\x3c\x09\x93\x05\x7d\x0c\xcf\xa7\xf0\xcc\xae\xea\x4c\x13\x1c\x4b\x39\x5f\xcb\xc5\x84\x5e\xd5\x4b\x45\x90\x2c\xe9\x58\x26\xd1\x13\xf5\x22\xc7\xbc\x5c\x9e\x53\x78\x2e\xe7\xc7\x2d\xd1\xf0\xde\x23\xd3\x41\xb4\x2b\x2f\x92\x20\xde\x7d\x46\xce\x9e\x3c\x0d\xc3\x17\x96\xda\x70\x44\xf7\xbc\x2b\x29\x3b\xe0\xf8\x5c\xf9\x9a\x2a\x21\x3c\x6f\x1b\x3e\xa4\x04\x9b\xa0\x48\x87\x77\x1a\xa5\x55\xf5\x9e\x7e\x12\xa4\x40\xbb\x2e\x8f\x04\x62\x0f\x39\x58\xb7\xd1\x05\x04\x72\xf8\xed\xc8\xe7\xe2\x08\x2f\x22\xb1\x57\x9d\x00\x43\xe5\x5d\x91\xca\x8f\x3e\xed\x63\xb4\x6d\x64\x53\x56\x8e\x20\x9e\x8d\x2f\x86\x43\x61\x19\x80\xaa\x46\x2d\xf9\x83\x17\xb4\x27\xd0\xf6\xf7\x3e\x99\x06\x0d\xf9\x5d\x42\xcd\x47\xde\x9d\x4f\x70\x7e\x33\x3d\x64\x7f\xb6\x2f\x73\xab\x82\x04\x2e\xe7\x5f\x16\x59\x54\x6c\xb7\x54\xb9\xb7\xab\xa8\x00\x42\x5b\x45\xf9\x66\xcd\x01\xb7\x3a\x5e\x0c\x5c\x67\xc6\x4d\x03\x92\xe4\x2e\x46\x72\xec\xef\xb9\x5e\x71\xf9\x39\x72\x43\xc7\x1a\x4a\xfc\x5b\xde\xb2\xe6\xad\xb5\x79\xeb\x25\xb0\x3f\x86\x70\x45\xfc\x86\xca\x9e\x06\x12\x10\x93\x54\x80\x5b\x7c\xf3\x41\xf5\xd8\xfd\x24\x10\x2e\x14\x17\xe1\x1b\xc5\x45\x28\x44\xc2\x8a\xaa\xc3\x94\x60\xcb\xe8\xd4\xb5\xc2\x02\x26\x81\x70\xbb\xa8\x7d\xe9\xcb\xb2\x6d\x84\x4d\x93\x12\x09\xd4\xcb\x38\x78\xf1\x9d\xec\xa9\x66\xc5\x2b\x81\xb0\x20\x84\xb6\xee\x33\x95\x32\x55\xa7\x11\x87\x54\x7f\xcb\x3d\x13\x6f\x3b\xcd\x49\x2a\xd8\x8d\xd9\x3b\x17\x60\xe6\x53\x72\x2e\xcc\xff\xce\x77\x44\xc9\xbe\xf4\x3d\x30\xf7\x8b\xbb\xcb\xbd\x68\xa5\x7f\xdf\x5e\x5d\x55\x28\x18\x50\x1d\xaa\x54\xbe\x5d\x5d\x55\xbf\x0f\x50\x03\x91\x38\x26\x93\x30\x8c\xfc\xd8\x62\x72\xd1\x75\x55\xfb\x3b\xbe\xbb\xe0\x1e\x1c\x99\xfb\xd8\x6b\xb9\x64\xe5\x5a\x45\xfd\xd9\xc7\x9d\xf6\x42\x00\x91\x5f\x78\x24\x90\x0a\x99\xa3\x63\x04\xb7\x9a\x60\x8a\x93\x5f\x68\x6b\xd1\xc2\x8d\xe8\x4a\x5d\xb4\x63\xe5\xd9\x85\xb5\x1a\x65\xd3\x62\x36\x99\x0f\x58\x1c\x40\x4c\xed\x37\xb2\x53\x49\x96\x7d\x51\xaf\x7a\xaa\x4f\x80\x1d\x4b\xa4\xb8\x92\xe6\xdb\x80\x44\xa5\xb5\x3e\x15\xee\xe2\xbf\xda\xe1\x46\x50\x47\x37\x7a\x9f\x9b\x90\x72\x56\xcc\xc3\xb0\xff\x0b\x07\x2b\x27\x13\x4a\x16\x98\x5d\x26\x88\xec\xfe\x6b\xfc\x3f\xb9\xd6\x0c\xf0\x37\xf2\x35\x15\x7a\xa9\xaa\xaf\xef\x5e\xd8\xe8\x04\x2d\xb6\xfb\x92\xec\x91\xc3\x71\x0c\x10\x7e\xd8\xa6\x62\xd4\xe6\xed\x15\x61\x48\xa3\x42\x73\x38\xbf\xe6\x44\x5b\xfb\x7e\xc7\xf1\xcf\x1c\xff\x85\x77\x02\xad\xab\x78\x30\xbe\x61\x30\x25\x26\x96\xb5\x19\x74\x90\x95\xc9\xf5\x75\xb2\xc8\x69\x20\x6f\xa9\xdb\x2d\x24\x7c\x53\xf2\x0d\xbc\x37\x91\xa3\xc3\xfd\x0f\xee\x69\x8e\x7e\xc7\x0d\xa3\xc3\x09\xf1\xf3\xef\xff\xf5\xff\x08\x50\x0f\x50\xb5\x13\x39\x46\xe0\x43\xa7\x4f\xf0\x29\x40\x73\x84\xf0\xb8\x4f\x5c\xfc\xef\x85\xcd\x0e\xc3\xe8\x3b\x4e\x84\x1b\xef\xfb\x92\x4c\x40\x6d\xcb\xc9\xf5\xec\x24\x0c\xfb\x6a\xd4\x4f\x11\x6a\x14\x80\x7c\xc7\xa7\xdd\xce\xc5\x4e\xc2\xff\xf8\xef\x3a\x64\x5e\xa0\x2d\x8b\xe3\x23\x56\x80\xfb\xf4\x45\xce\xd3\x8f\x17\x47\x3a\x7a\xf8\x64\xf3\xe9\xe2\x48\x07\x24\xd7\xd1\xf4\x86\x93\xcd\xa7\xc0\x89\x0c\x7c\x28\x7a\x52\xe0\xb1\xa4\xfe\xcc\xbd\x40\xeb\x3f\x1b\xc3\xed\xa3\x9f\xb9\x36\x65\x82\xa9\x3b\x38\x5b\xcf\xff\x9f\xff\xfb\x79\x80\x24\xd0\x7c\xe4\x10\xca\x61\x82\x24\x94\x7d\xcd\x6b\xf0\x99\xf1\x02\x22\x9a\xff\x04\x7c\x1c\x15\xd0\x79\xbb\x95\x1b\x62\x29\x08\x29\x47\xa5\x13\xd3\x5d\x03\x44\xa1\xea\x99\xe0\x93\xc3\xf5\xd8\x1e\x92\x42\x55\x31\xd4\x55\x5d\x9e\x2a\xe9\x28\xc7\x7f\x93\x9b\xbf\xb5\xc1\x20\xa7\x7d\x12\x5c\x15\x57\xc5\xc2\x18\x2f\x1c\x5f\x15\xc7\x46\x10\x30\x75\x19\x3a\xbe\x2e\x2b\x70\x17\x2d\x67\x51\x5c\x92\xe2\xa2\x55\xfd\x6b\x39\x31\x85\x3c\xc0\x80\xe7\xcb\xc0\xb9\x8f\xcf\xf3\xe5\x56\xfd\x46\xe8\x90\x53\xd4\x68\xde\xb1\xe1\x04\x4d\xd9\x70\x12\x33\x84\xad\x91\xfc\x0f\x2a\x98\x95\xac\xb0\x4f\x92\x69\xa4\x65\x1b\xdc\x71\x03\x8b\xb0\x18\x90\x64\x30\x41\xb1\xfd\x2a\x4f\x2e\x36\x98\x38\x8a\xc0\x7b\x3d\x68\xd8\xf1\x97\x57\xc5\x74\x2b\x67\xa1\xc1\x7f\xe4\xe4\x96\x15\x19\xbf\x1d\xb9\x2e\x91\xa6\x5d\x96\x5c\x5b\x85\xc7\xe2\xeb\x13\x9f\xc3\xb7\x73\x68\xf4\x27\x8d\xdf\x17\x59\x99\x55\xa2\xbd\x2d\x68\x69\xc2\xae\xb5\xf5\xf8\xf4\x8f\x53\xa5\x31\x2a\x8f\xfa\x02\x34\xbf\xe0\x54\x36\x34\x2a\xea\x13\x8a\xc2\x70\xdc\x27\x62\x94\xf2\xb5\xfc\xf8\xb2\xc8\x7e\xe4\xac\x10\x55\x14\x40\x6f\xdf\xf3\x97\x45\x16\x80\x0c\xe7\x77\x9c\x04\xbc\x48\xf9\xe6\x2e\x60\x45\xf4\x2d\x6f\x71\x91\x3c\x01\xbe\xe5\x9d\x2d\xa4\xb3\xe2\x40\xf5\xe0\x22\x40\x38\x30\xa3\x6a\xa9\xdc\x6f\xf9\x48\x65\x44\xf8\x4f\xbc\x0d\xf4\xfe\x57\x8e\xff\x20\x61\xf2\x23\xbd\x93\x28\xb7\x22\xf7\xa7\x71\xf0\xb2\x00\xda\xe7\x69\x1c\x7c\x9d\xa4\x1f\xab\x4d\x92\xd2\x00\x9f\xc7\xc1\xfb\x64\x11\xe0\x49\x9b\x61\xf2\x24\x0e\xde\xad\xd8\x52\x04\x78\x72\x16\x07\x2f\x44\x99\x07\x78\xf2\x34\x0e\x9e\xe7\x32\xe9\x3c\x0e\x7e\x4c\xea\x8a\x06\xf8\x64\x1c\x07\x2f\x92\x4d\xf5\x86\xa7\x1f\x03\x7c\x72\x16\x07\x2f\xab\x34\xc0\xa7\x27\x71\xf0\x4e\xd5\x7e\x7a\x2a\x33\x5f\xd3\x9f\x37\x01\x3e\x7d\xa4\x7e\x7f\xc3\x6f\x8b\x00\x9f\x3e\x96\xed\x65\x01\x3e\x7d\x12\x07\xdf\xf1\xb5\xcc\x7c\x16\x07\x6f\xa8\x6c\xf6\xf4\x69\x1c\x40\x91\xf3\x38\xf8\x49\x6e\xb5\x00\x3f\x1a\xc7\x81\x2a\xf9\x48\xd6\x53\xb2\x42\xbc\x4b\x4b\xf9\xfa\x38\x0e\x5e\x83\x2d\x51\x80\x1f\x3d\x89\x83\x6f\x94\xef\x76\xfc\xf8\x3c\x0e\x2e\x02\xfc\x64\x12\x07\x24\xc0\xe7\x93\x38\xf8\x9e\x67\x01\x3e\x3f\x31\x3f\x4e\xf5\x8f\xc9\xf8\x49\x1c\xfc\x5e\xfe\x3f\x83\xac\x93\xf1\x79\x1c\x0c\x03\x3c\x99\x8c\xe3\x60\x24\xff\x4f\xe2\xe0\x38\xc0\x13\x39\x40\x53\xfb\xe4\xec\x54\x65\x7a\xfa\x04\x9a\x99\x3c\xd5\x85\x9f\x3e\x8d\x03\x2c\xff\xeb\x4a\xce\x75\x25\xe7\xba\x12\xd9\xfe\x7f\x09\xf0\x89\x9c\xc6\x59\x80\x4f\xe4\x1c\x5e\x5d\xc9\x1f\x93\x38\x98\xcb\xff\x27\x71\xf0\xbf\x05\xf8\xc9\xe9\x89\x9c\x47\x39\x0b\xf2\xe7\xa9\x19\xbd\x7c\x79\x64\xe6\x49\xbe\x3c\xb6\x53\xf4\xe4\xf4\xe4\xec\xa4\xed\xa2\x7c\x3d\x35\x73\x2b\x5f\xcc\x8c\xcb\xdf\x4f\xda\x75\x91\xaf\x67\xee\xd2\x3c\x39\x3d\x1d\x9f\xd8\x49\x75\x08\x90\x7f\xf3\xef\x7c\x39\xbd\xa1\xf9\x57\x27\x53\x3a\x12\x3c\x56\x56\xa4\x8e\x9c\x39\x39\x90\x17\x74\xe1\x64\x11\x47\xee\x9b\xb4\x42\x03\xd0\x79\x6f\x55\x04\xff\x8d\x47\x62\x36\x9e\xa3\xd8\x91\x9e\x96\x87\xb3\xd3\x24\x02\xf5\x4d\x14\x7b\xa6\xc6\x8e\xe4\x35\x71\x49\xb2\x5b\xa5\xe3\x94\xc2\x7d\x80\xbc\x2a\x24\x81\x58\xf4\xc1\x97\xb0\x20\xcf\x59\x54\x20\x13\x34\xe5\x85\x7c\xc1\x9c\xb0\x29\x53\x44\xa2\x1a\x4e\x99\x44\x05\x8a\x05\x3c\xc7\xa6\x1b\xf2\x52\x89\xb9\x73\xe9\x65\x5e\xa3\xaa\x0b\x3a\x8e\x49\xd1\xf6\xa1\xd4\x49\xba\x31\xe5\x16\x65\xbb\x1d\x13\xd2\x36\xe9\xfb\xaa\x07\xc7\x1b\x85\x8e\x6e\xa1\xc5\x9a\x57\xef\x8e\x91\x44\xee\xaa\x81\xd6\xb6\x47\x8c\xd2\xd5\x25\xe1\xea\x87\xd3\x53\xf5\x1d\x27\xd3\x71\xcc\x1d\x64\x6e\xfb\xce\x93\x8e\xc2\x8c\xed\x8b\x9d\x75\xd0\x2d\x2f\xfb\xa4\x08\x43\x71\xe9\x14\x4d\xf4\xb0\xff\xca\x7d\x2d\x85\xf2\x73\xc1\x27\xc0\xc9\x34\x78\x71\x10\x61\x08\x3e\x1b\x5a\xa9\x63\xfb\x91\x10\xa1\x3c\x3a\x10\x22\x1c\x9a\xa2\x34\x59\xa1\xe7\x4c\xf5\x15\x83\xd6\xaa\x9a\xc2\xa9\x2e\xdf\x07\xa7\x10\x61\x18\xfd\x95\x03\x5f\x01\xc5\x7b\x3e\x14\x08\x97\xa8\x57\x92\xa2\xd9\x33\x37\x55\xe2\x7b\xad\x2e\xac\xd9\xfe\xa0\x94\x37\x3f\x30\x3c\xd2\x57\xba\x67\xe3\x30\x7c\xcf\xb5\x81\x86\x39\x8f\x05\x42\xfb\xa8\xef\x3a\xe9\xde\xd3\x15\x98\xbb\x8e\x72\x8e\xf2\x36\x93\x23\xae\x4e\x12\xe5\xa8\x31\x21\x6c\xc6\xe7\xb8\x22\xba\x8f\x89\x05\xd9\x61\x19\xcb\x32\x3a\xd0\x54\xf5\x2c\xd1\x36\xe1\xd5\x65\xd2\x46\xaf\x3a\x02\x7f\x0a\x15\x21\x89\xf6\xaa\x01\x3f\xdb\xcf\xd0\x4c\x85\x08\xe1\xd3\x2a\x2e\x9f\x8d\x09\x89\xa0\xc5\x01\x29\xe7\xc8\x36\x25\x4b\x68\x9f\x7a\xd0\x77\x27\x8f\xa7\x6f\x5c\x11\xa8\xa2\xed\x23\x74\x5a\x96\xc6\xc3\x89\x5c\x18\xfd\x0e\xfa\xb3\x32\xc1\x0d\xe2\xb7\x33\x57\x72\xf2\x6d\x2c\xba\x0b\xb6\x77\xe2\x19\x42\x17\x88\x0d\xac\x27\xa5\x23\x76\x39\xde\x6e\xd9\x33\x0f\x6b\x4c\x41\x29\x99\x35\xae\x7b\xb7\xf6\xee\x3d\xbe\xa0\x97\x93\xf1\x05\x1d\x0c\xd0\x1f\xf8\x8c\x0e\x1e\x3d\x9d\x13\xf8\x71\xfe\x64\x4e\x94\xb2\x45\xa4\xf5\xf5\x29\x79\xf2\xf8\x82\x5e\x92\xf3\x36\xbb\xc9\x02\x63\x7a\xa1\x99\x67\x6d\xfe\x89\xcc\x3e\x39\x69\x6b\x9f\x4c\x26\xba\x7a\xc0\xf9\x73\x12\xbc\x0a\x06\xb4\x41\x91\x42\x50\x69\x42\x76\x9c\x68\x04\x0b\xf3\x27\x2a\x71\x5b\x2d\xbc\xbf\xaa\xaa\xc4\xed\xdb\xb7\x5f\x7d\xf5\xd5\x5b\xf8\xc3\x6f\xf1\xdb\x89\xfd\x53\x69\x6f\xdf\x1c\xfc\xfb\x92\xef\xba\xa1\xc5\xc1\x3f\x2c\x9b\x87\xf6\x55\x7d\x5f\x7d\x35\x99\xc0\xcf\xc9\x9b\x87\xaa\x7f\xa0\x59\xf5\x3d\xc0\x82\x04\xa5\xf3\x87\xcb\xb7\x6f\xd7\xf0\x57\xfe\x96\xbf\xb5\xf7\xa7\x13\x0b\xfb\xf7\x55\x51\xc8\x4c\xbf\xa9\xea\xff\x58\x57\xe0\x0f\x46\x16\x68\x77\x1d\x20\x2b\x3d\x28\x9b\x1e\x9f\xa9\x97\xa7\x49\x3a\x3f\xc6\x05\x39\x9e\x49\x20\x98\x1f\x63\x46\x8e\x67\x6f\x7e\x2a\xe7\xc7\x98\xcb\x5f\x8b\x49\x31\x3f\xc6\x09\x39\x9e\xc9\x1f\xed\xf9\x5f\x79\x91\x37\x60\xb3\x9a\xb0\x46\x80\x90\xb5\xcb\x07\xc1\x49\xd9\x74\x85\xfa\x2a\xbc\x72\xbf\x54\x3c\x88\xda\xf1\x71\x66\x43\x8b\xe2\x94\xd4\x26\x8e\xc7\x52\xde\x85\x56\x64\x7c\xb1\xba\x4c\x2f\x06\x83\x15\x5a\xaa\x7b\xc7\x1d\x89\x72\x52\xbb\xec\xe6\x15\x42\x97\xe4\xe4\xd1\xd9\xd4\xde\x72\x72\x14\x4f\x1e\x9d\x3c\xba\x24\x79\x18\xe6\x97\x64\xf2\xf8\xe4\xd1\x34\xf8\x29\x88\x27\x8f\x4f\x9f\xd8\xc4\xb3\xb3\xd3\xa9\x45\x07\xf9\x50\x7e\x43\xf1\xe4\xec\xcc\x16\x3b\x39\x39\x19\x4f\x83\x32\x88\x9f\x4e\xce\x4f\x4c\xe2\xd3\x93\xf1\xe9\x34\xb8\x0d\xe2\xa7\x27\xe3\x47\x84\xe4\xd3\x60\x11\xc4\xc1\x9b\x00\xf5\x56\xa4\x0d\x51\x99\x91\xe0\x4d\x60\x7b\x7e\x1f\xac\x03\x42\xa2\x3b\xb2\x9c\xad\xe6\x68\x2a\x9f\x24\x8b\x33\x72\xd7\xb8\x65\x36\x9d\x32\x13\xa7\x4c\x18\x06\xf2\x1a\xb7\x51\x65\x83\x22\x88\x99\x9a\xc6\x3b\x14\x86\xd1\x86\xdc\x61\xf8\x7e\x17\x86\x91\xca\xf1\x13\x04\xcb\xe7\x65\xb4\x22\x13\x9c\x91\xe5\x6c\x3c\x97\x55\x0f\x27\xba\xf2\x81\x5f\xb9\x6c\x2b\xd3\xff\x97\xb3\xd5\x60\x32\xd7\x2d\x4d\x02\x49\xcc\xf6\xc9\xdd\x76\x9b\xf5\xf5\xa7\xed\x36\x98\x04\x7d\xc8\x5f\xc8\xff\xdb\xad\x6a\x34\x43\x58\x8e\x49\xb5\xda\xae\x9b\x5c\xf5\x00\x3b\xed\x21\x55\xf5\xdb\xc0\x72\xdd\x83\xaf\x64\xe7\x5b\xdc\xba\x26\xab\xc1\xe4\x62\x7d\x99\x86\x21\x7c\x5a\xce\xd6\xf3\x8b\xc1\x60\x8d\x2e\x4c\x8e\x1b\xb2\x0a\xc3\xa0\xaf\xba\x3b\x94\x7d\x52\xb9\x27\x3a\xf7\x14\x7a\xfe\x36\xc0\xd7\x64\x75\x71\x7d\xb9\xbe\x18\x0c\xae\xd1\x72\x76\x3d\x27\x37\xbd\x15\x59\x0f\x27\x8d\xe9\x27\xee\xcc\x3b\x38\x17\x80\x8e\xf6\x82\x37\x01\xc4\x6f\x84\x5a\xef\xf4\x8c\xbc\xd9\x99\x7b\xb4\x33\x64\x30\xe7\x87\x3c\x6a\xc0\x30\x30\x67\x50\xf6\xe3\x7a\x8e\xd4\xb8\x6e\x20\x14\x31\x34\x18\xad\xa6\x6a\x4c\x00\x56\xf8\x83\x4e\x5d\x5f\xa6\x53\x59\x40\x01\x1b\xcc\x03\x59\x6c\xb7\x1f\xa6\xb2\x47\xc1\x4f\x0f\x8c\x54\xd6\x7d\x8b\x5f\x82\x16\xb4\xd3\x51\x04\xf6\x17\x6e\x2f\x41\xd5\x85\xac\x20\xd7\x60\xb0\x92\xb9\xc2\xd0\xcd\x02\x83\xbb\x78\xd9\x7a\x6f\xae\xa2\x31\xfe\x84\x57\xae\xad\xda\x3b\xb2\xc2\xcf\xc9\x4b\xe3\x22\xc8\xab\x2b\x78\x13\x00\x10\xcd\x55\x45\xf2\xdb\x35\x79\x77\x71\x7d\xb9\x82\xde\x24\xa6\xa9\x6b\xd9\x9b\x77\x97\xd7\x61\xf8\xd2\x28\x27\x3f\xc7\x63\xac\x5a\x9c\xe0\x77\xf8\x5a\x93\xe5\x3f\x90\x6b\xdd\xc2\xb5\xac\x25\x0c\xdd\x2a\x60\x26\x2e\xf6\xd4\x70\x82\x7f\x90\x35\xe0\x77\x3a\x9a\xf7\x60\x70\xdd\x7b\x27\x4b\x1f\x68\x4d\x8e\x4f\x63\xb3\x09\x21\x2f\x2d\xfd\x1b\x86\xd1\x2d\xa9\xad\x8d\xce\x55\x35\x50\x7a\x84\x90\x03\xf0\xe1\x6d\xcb\x4f\xc6\x2f\x47\x75\xa1\x2c\xe3\xcc\xcc\x8d\xb1\xf3\x1d\x21\x84\x27\x10\xa5\xf2\x25\xda\x57\xfd\x55\x35\x50\x96\x3f\x91\xca\x22\xf8\xb0\x53\xbd\xb7\x2a\xe9\xd0\xfd\x98\xca\xda\x4f\xfc\xbe\x77\xfb\x33\xc1\xf0\x55\x70\xf3\x1f\x21\xdc\xe6\xef\xfb\x3d\xf3\x5a\x6b\x73\xe1\x54\x36\x85\x5f\x36\x4d\xcb\x36\x7b\x37\xba\xa1\x65\xc5\x78\x41\x82\xc7\xa3\xc9\xe3\xd1\x49\x80\xdf\x35\xc8\x33\xab\x0d\x38\x68\xba\x39\x0e\xe6\x3f\x6d\x78\x29\xaa\x30\xdc\xf9\xb2\xe6\x59\x9d\xd3\x29\x8d\x4a\xfa\x8f\x9a\x95\x34\x0a\x46\xa3\xe3\xd1\xe8\x38\x67\x8b\xe3\x56\xaf\x38\x40\x28\xde\xc3\x2b\xc9\xe8\x12\xae\x42\xea\xff\x28\x59\x67\x53\xf5\x33\x9a\xed\xaf\x66\x8e\x29\x8a\x69\xd4\xb2\xa0\x51\xe3\x85\xd3\x08\xea\x8a\x1e\x55\xa2\x64\xa9\x08\x34\xfb\xd2\xe1\x6d\x0f\x73\x56\x08\x1d\xa3\xb9\x0a\xda\x53\xb4\xd4\xba\xbf\x56\xc0\x03\xae\xc8\xec\x9b\x2f\x13\x74\x6e\x91\x45\x24\x94\x4e\xab\xa2\xf4\x5b\x7f\x68\x7b\xc4\x6e\x9d\x20\xd2\x8a\xe3\xdd\xde\x47\x23\xa1\x2f\x2c\xae\x98\xc9\xde\xd5\xf9\xb2\xe5\xfb\xe3\x00\xf4\x7d\x41\xbf\x17\x33\xd4\x2b\xb4\xe4\x55\xf0\x8d\x7b\x09\x15\xa3\x14\x58\xa6\x7f\x1b\x16\x1e\x53\x7a\xf8\x18\x0d\x82\xcd\xa7\x00\x9b\x72\xc0\x8b\x35\xb9\xff\x3a\x78\x0c\x5f\x1d\xa9\x9e\x15\xb9\xec\x4c\xa4\xe0\x3c\x17\x6c\x23\xab\x72\x85\x9e\xe5\x28\xcd\x79\x41\x81\x3d\xdc\x1f\x23\x84\x7d\x11\x84\x9b\xb5\x00\x97\x22\xc5\xa1\xb1\x61\x39\x2d\xda\x0b\x96\xe9\x2e\xdf\x24\x29\x13\x77\xe0\xa8\xca\x4b\x21\x13\x84\x8b\x46\xae\x88\x33\xaf\x89\xa6\xbd\x45\x4f\x4d\x22\xd3\x2d\xf0\x5a\x04\x38\x81\x10\xf5\x51\x24\x5a\x0f\x02\x6a\xf1\xad\xb3\xc7\x4e\x93\xca\x84\xbd\xd3\xec\xd8\xb5\x3c\x70\x35\x26\x23\x81\x1a\xfc\x64\x0c\x51\x2f\x95\xc7\x61\xed\x95\xbc\xa2\xe2\x75\x21\x68\x79\x93\xe4\x51\x47\x42\x82\xda\xdb\x0c\xbb\xb8\xa0\xc4\x93\xbe\x82\xdd\x4a\x18\x4e\x26\x84\x50\x57\x74\x29\xb3\x29\xd1\x25\x25\xbe\xbc\xc7\x44\x3e\x56\x06\xa5\xf7\x49\xe4\xba\x71\xb2\x3e\x5a\x8f\x40\xd5\xdb\x76\xa9\x42\x0d\x7e\x34\x86\xa0\x57\xbc\xe8\xce\x98\xc3\x42\xf1\x48\x4f\x65\xd4\x6a\x5d\x17\x68\x03\x74\x4b\x7f\xaa\xe9\x71\x9c\x0b\xac\x92\xea\x5b\x70\x42\x6b\x02\x3d\xf1\x02\xfc\x5c\xfe\x70\x43\x1d\xfd\x4a\xd1\x89\xd2\xdb\x5a\xce\x19\xa3\x2c\xe1\x18\x65\xc1\x30\x8f\xaf\x16\xfb\x36\xfc\x50\xab\x67\x96\x4e\x08\x6f\x33\x3b\xad\x8d\x64\x79\x48\xe4\x80\x39\x89\x18\x6c\x95\x01\xd3\x52\x8b\xe3\x13\x9c\x10\xf0\x1a\xb6\x19\xb0\xd1\x82\x0b\xc1\xd7\x32\xb1\x06\xb1\x91\x75\xbc\x19\xd1\x51\xca\x79\x99\x55\xf2\x4a\x19\xdd\xcb\x2a\x62\x8e\x05\xdf\xc4\x49\x83\x03\xb5\xeb\x02\x84\x70\x2e\xe7\x2e\x25\xe3\x8b\xf4\xb2\x6e\xb9\x30\xa9\x1a\xf1\x92\xd4\xb3\x74\x3e\xfa\xf0\x21\x29\x0a\x2e\xc0\x7e\xae\xb7\x0c\xc3\x5c\x21\xfd\x25\x6a\x72\x6b\x83\x7f\xc8\x4d\xda\xfe\x29\xc3\x3b\x0a\x07\x86\x13\xff\xaa\x4c\xae\x15\x4b\x5d\xfb\xee\xa7\x7b\x9c\xf6\xd3\x19\x9f\xf7\x7c\x2d\x8c\x2a\x4a\x10\x6a\x20\x64\x23\x96\xd8\x19\xd4\x84\x91\x0e\xd2\x09\x2b\x7d\x9b\x30\xc1\x8a\xeb\x57\xbc\x24\x63\x2f\x2c\x73\x2b\x96\x85\x68\xcb\x23\xb9\x78\xbd\xb2\x05\x15\xb0\x89\x93\xa0\xaa\x5e\x23\xd1\x0d\xa9\x69\x6c\xab\xbd\xb0\x52\x3a\x6d\x56\xcc\x8d\x4f\xd9\x5e\x27\x9f\xdb\x8d\x04\xac\xbd\xc0\x07\x94\x1a\xe2\x83\x08\x1c\x57\x24\x31\xc7\x6a\xf2\x10\xaa\x54\x67\xce\x30\x18\x94\x98\x49\x94\x53\x91\xe4\x21\x55\x18\xbf\x15\x84\xbe\xa0\xea\x75\x2d\x71\x71\x4e\x03\x90\x5c\x82\xc3\x40\x5e\x44\x95\xd9\xbd\x37\xb4\xf4\xbd\x48\x2b\xf5\x90\x0a\x5c\x26\x37\xee\x7d\xb2\x35\xf7\xa9\xe8\x0d\x2d\x99\xb8\xeb\x29\xfd\xf4\x80\xaa\x93\x5c\x5f\x6c\x1f\x3e\xd9\xac\x14\xf2\xa1\x9e\xd3\xaa\x4a\xae\xe9\x10\x0c\xe6\xbe\x48\x33\x88\x8e\x74\x19\xe4\xc9\x30\x6b\xd7\x03\x69\x0b\x3b\x06\x0b\xe1\x82\x94\xe6\xf7\x76\x5b\x62\xbd\xcf\x9f\xdb\xbd\x54\xc9\x4d\x71\x2d\x4f\xc8\x7c\x03\x3e\x60\x7f\xe4\x40\x0e\x22\x1c\xc8\x7a\x02\xd4\x93\x8b\x56\x8e\x92\xea\xae\x48\xb7\x5b\xa6\x7e\x4c\xdd\xf3\xde\x61\x76\x39\x3d\xc0\x1c\xfc\x2a\xb4\x10\xef\x9f\x4c\x9c\x0c\x27\x18\x64\xc6\x91\x8d\x59\x9c\xa0\x46\xc8\x95\x73\x12\x70\x19\x41\xf7\xc0\x9e\x35\x72\xdd\x0f\xc8\x56\x77\xca\x63\xb7\x41\x65\x84\x52\x84\x61\xe9\xfa\x16\xa4\xe0\x47\xb2\x40\x38\x07\x5a\x05\x35\x10\x0c\xa2\x81\x4d\x5b\xa0\x58\xa6\x32\xbf\x4d\xf9\xdd\xb5\x93\xcb\x21\x7e\xf9\x3d\x37\x0c\x32\x6d\xd7\x07\xd8\xcf\x19\x7f\x4e\x6a\xbb\x0a\x29\xd9\x2f\x66\x05\x3f\xc4\x3b\xe6\x20\x96\xb9\x6d\xbc\x38\x1a\x53\xe9\x8b\x48\xcc\xd8\x1c\xac\x1e\x98\x6b\x5b\x5a\x38\xde\x81\xa3\x12\xe1\x25\x19\x5f\x2c\x2f\xd3\xb6\xce\xa5\xaa\x73\x05\x96\xf8\xf2\xac\x70\xe2\xfa\x28\x93\x28\x88\x55\xee\xa0\x9b\xcf\xa3\xc6\x35\x19\x5f\xac\x2f\x57\x6d\x23\x6b\xd5\xc8\x0d\x59\xcd\xd6\x73\x7c\x4d\x6e\xda\x5d\x74\xbd\xdd\x46\xd7\x76\x17\x61\x46\xae\x71\x66\x5e\x09\x89\x0a\x92\xa1\x69\x11\x33\x9c\x8f\x96\xbc\x5c\x27\x0e\x7c\x86\x61\x74\x43\x76\x93\xa3\x1b\x84\xb0\xd7\xe1\x4d\x07\x15\xcb\x0c\x37\xc0\x39\xaf\x0d\xca\xd3\x2e\xbd\x8c\x57\xed\xe8\x46\xf1\x70\x65\x2e\x7c\x6f\x37\x6b\xbc\x17\xcd\x0c\x83\xc1\x35\x76\x0f\xa1\xf8\xa6\x41\xa8\xa9\x7d\x14\x5d\x51\xa1\x5e\xbe\x07\xcc\x14\x2d\xb1\xc0\x49\xb4\xc1\x19\x5e\x59\xe7\x2f\xd8\x82\xc5\x48\x53\x91\x15\x42\x4d\x93\x8f\x78\xa1\xbc\x87\xbf\x61\x85\x84\x60\x79\xc6\x75\x92\xa2\x12\xa7\xd8\xa5\xc2\x53\x0f\x67\xb5\x27\x87\x08\xc3\xc8\x37\x62\x33\x74\x88\x24\xe2\x0c\x49\xb2\x9f\x78\xab\xc1\xf7\xa2\xc5\x20\xca\xfc\x74\xbb\x7d\x2c\xa9\xb9\x06\xac\xce\x59\xa1\x1d\xdf\x45\x0a\x47\xe0\xfe\xc4\xdb\x98\x38\x01\x7a\x2d\x01\x1f\xf6\x74\xf4\xba\x60\xb2\x3f\x5c\x42\x26\x04\x01\x2a\xf7\x20\x2a\x78\xf9\xa1\x78\x01\x5b\x39\x0c\x4b\x7f\x67\xa7\x40\x2c\x2f\x97\x11\x60\x2f\xf0\xcc\x47\x4b\x2b\xf8\xf6\x10\xbd\x5f\x79\x4b\x59\x21\xec\x4d\x88\x97\xcd\xce\x8d\xf6\x51\xe1\x7e\x44\xae\x2b\x89\x4a\xa1\x4f\x33\x7a\x15\x4b\xa0\x0a\x24\x09\x23\xe7\x00\xb6\x5d\xe5\x6e\xbb\x6a\xb6\x9c\x2b\x0b\xf6\x1c\xdc\x45\xa8\x5d\xe8\xd6\x0f\x66\x53\x2c\x2a\x71\x94\x91\x02\x39\x88\xea\x95\x9e\xd1\xe9\xbd\x8f\xb0\xe3\xac\x89\xa3\x2c\x0c\xfb\xe3\x3e\x01\x86\x57\x06\xe6\x53\x19\xc2\xb9\x0e\xb2\xb4\x3a\x3c\xa9\x85\x37\xa7\xe3\xbe\x93\xd7\x00\xa3\x3e\x3e\x3f\x3f\xd3\x2b\x7f\x7a\xeb\xa8\x54\x54\x7e\xd6\xc8\xd5\x52\x70\x02\x01\x64\x2a\x98\xac\x0d\x2d\xe5\x2e\x7e\x03\x10\xd3\x35\xdd\x6d\xe7\x23\x0c\x6b\xe5\x76\x15\x42\x1a\xfc\xe7\xbb\x99\xcb\x2b\xf5\x35\xab\x04\x2d\xf5\x91\xab\xf7\x50\xf0\x4b\xc5\x8b\x7d\xb1\x12\x66\xf3\x9e\xfc\x04\x80\xba\x49\xca\x8a\x82\xbf\x48\xf7\xc6\xdd\x06\x70\x18\xe5\x3c\xed\x95\xae\x9f\x17\x75\xa0\x33\xa5\xcd\xf5\x01\xb4\xa9\x26\xd8\xbc\xa6\x60\xea\x09\x3e\xca\x4c\xbe\x3c\x71\xb3\xc1\x9b\xc9\xa5\xe9\x8f\x58\x34\xa8\x01\x9d\x59\xbf\x5b\xf2\xce\xa7\x54\x55\x0a\xab\xa9\x72\x54\xfe\xff\x6d\x15\xef\x92\x75\x7e\x60\x15\xd5\x94\xc9\x0c\xa3\x9c\x27\x59\x3b\x5f\xcc\x9c\xf8\xca\xd9\xff\xbe\x05\x2c\xb4\xab\x94\xd1\xce\x92\xed\x7c\x31\xcb\xc4\x0c\xc1\xd8\xa0\xff\xa5\xab\x81\x83\xf4\x97\x2a\xf8\x57\xad\x89\x3b\x93\xa0\x43\x96\xac\xb3\x00\x35\xfe\x4a\xe1\x60\x93\x27\xac\x08\xbc\x15\xc3\x10\x89\x7b\xcd\x33\xfa\xf3\x4f\x6f\x40\xab\x55\xff\x26\xb2\x2d\xf9\xfb\xf8\xab\xb7\xc7\x5f\xbd\x1d\xc9\xde\x6a\xc2\xfe\xde\xd1\x2f\xf1\x78\x59\xaa\x70\x05\xbe\xa4\xa9\x24\x33\x68\x91\x32\x0a\x72\xe9\x56\xd0\x2e\xef\x57\xed\x85\x7a\x36\xd7\xb7\xc7\xc2\xd5\xdb\xd7\x15\xed\xd8\xb2\xce\xf8\x1c\x49\xf2\x5a\xd1\x73\xa0\xce\x0f\x02\x76\xc3\x91\x75\x9a\x50\x97\xb3\xbd\xbc\x81\x3d\xd6\xab\x63\x42\x86\x43\x49\x9c\x44\xa8\x69\xa2\x12\x33\xcf\xac\xdc\xc4\xa6\xf3\x7a\xa8\x17\xf8\x7b\x79\xed\x00\xc1\x7d\x22\x0f\x7e\x27\xb5\x6d\xdc\x78\x0c\x36\x06\x0f\x7d\xb3\xd4\x4c\x07\xfa\x2b\x92\x35\x35\x6e\xd9\x77\x46\xed\x84\xd1\x8e\x4c\xd8\xb8\xf2\x70\x26\xf0\xc5\xa1\x15\xfe\xf4\x2c\xd8\x45\x35\x61\xfc\x22\xb9\xa8\xd7\x58\xd9\x8d\x6b\xb0\x00\x95\x0c\x75\x7c\x1f\xba\xb9\x55\x69\xc9\x36\xf2\xb6\x53\x8d\xaa\x32\x25\x49\x4f\x39\x56\xb2\xd9\x3d\xe5\xe1\xf7\xc9\xb5\x52\x1d\x36\xa5\x66\xe3\x39\xce\x49\x09\x44\x39\x9f\xf7\xcc\xf5\x53\xee\x72\xef\xa8\x93\xa3\x3c\x28\xbe\xcf\xdb\x45\xa0\x28\x9f\xd1\x79\xa4\x8e\xc0\xda\x65\xc7\x2a\x3f\xd5\x5f\xd3\x25\x2f\x69\x54\xe1\x5a\x09\x3b\x60\xc7\x11\x22\xa6\x76\x6f\x26\x08\xf3\x48\x22\x46\xb9\x5d\x80\x00\xd1\x5f\x7e\xa9\xa2\x59\x32\xc7\x1c\xdc\x38\x24\xb5\xe0\x6f\x78\x92\xf9\x6b\xaa\x22\x89\xec\x5f\xb1\x12\x6d\xb7\x3e\x80\x94\xde\x59\x2e\x29\x60\x43\x1d\xc9\x0a\x02\x2c\x5c\x82\x09\x92\x90\x1c\xd7\x7f\xca\x53\xa1\xd5\x21\xb3\x26\x1b\xbb\x36\xed\x02\xed\xfa\x7e\xfe\xb9\x50\xbd\xc8\x8e\x80\x10\x3a\x0a\x06\x42\x39\x7c\xae\xd8\x7a\x93\xd3\x23\x35\x6f\x8d\xcb\xb5\xb7\xf5\xeb\xdd\x71\x1c\x4d\x63\x74\xac\xf1\x58\x10\x58\xf3\x09\xf7\xee\xab\xec\x25\xa6\x11\x1d\x31\x70\x76\xf2\x22\xa9\xd4\x75\x38\x60\x01\xc2\x54\xde\x21\xc0\xce\x1a\xc5\xb4\x55\x1a\xc1\x8e\xa5\x45\x04\xc6\xf8\x62\x1a\x04\x71\xf0\xf7\x00\x81\xb5\x05\x58\x5d\xa0\x00\x97\x9e\x74\x80\x4a\xaa\x24\xa2\xa3\x82\x7e\x02\xff\x51\x72\xdb\xa2\x30\x14\x10\x93\xd1\x4b\xc4\x3a\x0a\xe7\x35\xfd\x44\x4a\x70\x4e\x74\x4d\x3f\x21\x23\xbc\xff\x48\x7d\xf7\x5a\xbb\xfe\x01\x1d\xec\xd3\x42\x4f\x2b\x3f\xb0\x78\xe1\x6a\x74\x7c\x8d\x3d\xbf\xed\xfb\xee\xdf\xe5\x60\x80\x1c\xff\x80\x61\x08\xba\x5a\xbb\x95\x38\x9a\x52\x60\xea\xfe\x91\x16\xba\xcf\x59\x22\x12\x42\x3b\xcc\xe2\x5d\xc7\x3a\x46\x4f\xab\x18\x6d\x54\x88\xc5\x96\x88\xd3\x09\xc6\x77\xa5\x69\x69\x4c\x9c\x6f\x86\xe7\xd9\x96\xd7\x91\xfd\xca\xd1\x86\x57\x03\x3f\x92\x0b\x66\xaa\x87\x8d\xf2\xed\xce\xd3\x24\x37\x7e\xde\xe5\xef\x11\x2d\x32\x79\x3b\x50\xd2\x3d\x27\x11\x19\xf1\x8e\x93\xf6\x5e\x56\xa4\x82\xf2\x58\x67\x5f\xea\xab\xc9\xf5\x4e\x82\xb0\x62\x2a\x70\xc5\xf6\xef\xb5\x35\x48\x48\x56\x9d\x91\x33\xe0\x14\x40\x9d\xda\x64\x5b\xef\xd2\xa4\x08\xc3\xa8\x22\x9d\x34\x6d\x3f\x33\x4a\xeb\xb2\x84\x7b\x09\xc8\x22\x61\xe4\xea\x6e\x55\x8a\x41\xa5\x6d\x63\x30\x6f\x5a\x27\x89\x74\x56\xa8\xab\x86\xc4\xd7\xe3\x8b\xbc\xe5\x37\xe7\x86\xb3\x9b\x92\x7a\x96\xcf\xf1\x92\x44\xfd\x14\xd6\x72\x54\xf1\x7c\xbb\x2d\xe5\xbf\x08\xa1\x76\x9e\x52\x0d\xa9\x12\x00\x97\x30\x9d\x3a\xbf\x84\xee\xa9\x6e\x87\x38\x69\xb1\xfe\x2d\x81\x6b\x1a\x81\x0c\x27\x49\x3f\x6e\xb7\xe6\x97\xcb\xd0\x51\xa5\x11\xee\x54\x03\x1b\xc6\xd6\xc3\x37\x61\xa8\xcb\xda\x1f\x2e\x60\xa8\xa2\xe6\x03\xb8\x92\x45\x58\x17\x5e\x83\xb4\x27\x01\x29\x9e\x93\x84\x53\x03\xcb\x3a\x51\x4e\xa2\xbc\x94\x15\xfa\x97\x76\x66\xa6\xdf\xb4\x3b\xbb\x81\xd0\xef\x3f\x17\x4c\xd8\xa2\x19\xed\x16\x05\x67\xb6\x4b\xc3\x09\x39\x01\x37\xeb\x1a\x78\xb5\x42\x80\xba\x1f\x9f\x5c\xac\x2e\x4d\xb6\x8b\xd5\x60\x00\x5a\x1a\xb2\x22\x03\xfd\x8a\x3e\x06\xa7\x95\xf2\x13\x86\x3e\xc7\xba\xef\xa0\xb0\xd0\x38\x7c\xd8\x45\x92\x7e\xfc\x79\x13\x2d\x5b\x21\xf4\x30\x5a\xce\x40\xaf\x64\x62\x52\xe2\x31\xcc\x8d\xaa\x60\x3c\x37\x14\xb3\x4e\x09\x43\xfd\x03\x02\x17\x4f\xdb\x7c\xa6\xcd\x56\x21\x13\x96\x3a\x52\xa2\xbb\xc6\xe3\xf1\x6b\x8c\x4d\x49\xeb\xe7\x45\x79\x9e\xec\xd3\xed\xd6\x1c\x73\x96\x80\xa2\xdb\x6d\x5f\xec\x49\xef\xd8\x8c\x94\x8e\xd6\x4e\x71\xd8\xb7\x45\x81\x14\xea\xdc\xeb\x44\xa5\xcf\x95\xb3\x18\xe1\x87\x7b\x2c\x07\x83\xc6\xf7\xd5\x82\xf6\x14\x0f\xc3\x72\x38\x74\x50\x54\xe9\x0b\x14\x0a\xcc\xb0\x89\x12\xa1\xb4\x65\x37\xb4\xac\xc0\xbd\x5c\x6b\xdf\x5a\x03\x62\x33\xc9\x80\x0e\xaa\x8b\x3a\x0c\xfb\xd5\x45\x4d\x6a\x98\x51\x14\xb1\x51\xb5\xa1\xe9\x94\xeb\x1f\xb8\x86\x7f\x48\xde\x73\x24\xf9\x42\x6a\xf8\x8f\x00\x5f\xd4\x8a\x3e\xcc\x49\x35\x55\xf1\x1a\x74\x2e\x79\xe8\xe8\x38\x27\x91\xc0\xaa\x22\x84\x53\xc8\x06\xbb\x25\xa6\x0a\x7d\x40\x1f\xa2\x1c\xf5\xdc\xfe\xca\x0e\x69\x8c\xeb\xf7\x95\xdc\x43\x1b\x39\x96\xf5\xc5\xba\x7f\xaa\xbe\x14\xc3\xd6\xdf\x2d\xa3\x02\x02\xb5\xf8\x32\x35\xaf\xb6\x32\x5a\x64\x31\xd3\xb8\x39\x82\x1f\x08\x6b\x04\x68\xd2\x81\xdd\xc3\x54\xe8\xc1\x97\x4e\x46\xf0\xb5\x67\x90\x75\x9c\x84\x61\xa2\x00\x37\x99\x25\xad\x07\xa3\x38\x69\x5c\xe9\xc7\xde\x08\x91\x5e\x4c\x10\xd9\x3b\x70\x3e\xd8\x62\x72\xb5\xb3\x51\x07\x75\x3b\x9f\x22\x77\x90\x36\x36\xb4\x12\x32\x1b\xc4\xb0\xdd\xea\x4c\x12\xcd\x66\xbc\x10\xaf\x21\x59\xcd\xd3\x61\xb1\xde\x8e\xa5\x1e\x5b\x46\x02\xdc\x28\xb9\x46\xac\x06\x0f\xe2\xdd\xaa\xd1\xb3\xe1\xa4\x25\x14\x7e\x4c\xaa\x4a\xdf\x2a\x2c\xc6\xb2\xb1\x25\x2b\x22\xec\xd1\xd1\xa3\x31\x28\xf3\x5e\xb4\x9d\x51\xee\x77\x2d\xe7\xaf\x36\x87\x49\x4e\x2a\xed\x7c\x37\xf7\x71\x22\x2c\x9c\x97\xf6\x7a\xf9\x86\x15\xca\x38\xd8\x1c\x44\xb9\x3a\x61\xd4\x69\xa7\x6e\x34\x69\x18\xa6\xb3\xf1\x1c\xdd\x27\xc3\x21\x8e\x72\x4d\x49\xe5\x86\xbc\x8a\x64\x3f\xfd\xd4\x39\xc2\xcc\x06\x1a\x4d\x5d\x9b\x52\x27\xaa\x42\xd3\x28\xd9\xb8\x91\xe7\x5d\x8e\xa7\xe3\xd8\xcc\xc2\x2c\x99\x37\x96\xf1\xfb\x0e\x08\xd2\xbd\x17\x06\x95\x41\xef\x2d\xf7\xde\xde\xda\x4e\xd9\xc2\x91\x8a\x84\x29\x2f\x21\xd5\x9e\x1a\x4b\x09\x74\x22\xe2\x38\x80\xdd\x18\x98\xeb\xde\x7d\x83\x6b\xc2\x47\x6b\x2a\x92\xed\xf6\xbe\x01\xb6\xab\x45\x7f\xa9\xc4\x51\x5c\x42\x41\xda\x27\x75\x18\xf2\x2e\xb2\x4a\x51\xeb\xd7\x98\x24\xb3\x74\xae\xd4\x3a\xf9\x2c\x9d\xe3\x8c\x8c\x2f\xb2\x56\x9a\x91\x99\x15\xdc\x90\xd5\x2c\x9b\xf7\x96\xad\x8e\x51\x11\x6d\x30\x47\x08\x47\x1b\x0b\xbe\x1b\xbd\x86\xc8\xf0\x79\x1b\xa5\x39\x78\xdf\xe2\x92\x3d\xe1\x8f\x15\x82\xd0\x23\xc4\xfa\x68\x03\xdf\xd3\x18\x76\x83\xf3\x53\x55\xa1\x3c\x30\x42\x9b\x71\x3e\x9d\xcd\x63\x75\xc6\x40\xcc\xba\x4e\x23\x6d\x3c\x02\xd5\x8a\x96\xcc\xd9\x56\x84\x39\x4a\x75\x53\x42\x6d\xc0\x43\xad\x09\x4b\x07\x98\x5f\x36\xf6\x71\xd3\x13\xce\x0e\x07\x32\xcc\xc1\x6a\x74\x64\x3b\x17\x09\x07\x3b\x60\xb7\x10\x52\x9a\x25\x40\xc6\x28\xc6\x7c\xfa\x91\xe8\x14\xdb\x8e\x2b\xf0\x16\xbb\xa7\x85\x0a\xb5\x02\x27\x45\x79\x08\x3f\x17\xaa\x69\x40\xd2\x85\x8b\xa4\x0d\xa9\x44\xdc\x5e\x4d\xdd\x81\xc4\xee\x40\x74\x3d\x2d\x91\x26\x31\xfc\x6e\xab\x4d\xeb\x7a\x4d\x13\x28\x2c\x4a\xc0\x71\x41\x51\xd0\xd2\x8f\xb5\xe5\x59\x27\x29\x3c\xab\xfa\x4c\xdd\x49\x33\x47\x54\xdb\xaf\xa6\x31\x4b\x54\x45\x09\xae\x51\x23\x91\x44\x6d\xc1\xfc\x06\xc2\x1e\xa1\xba\xbb\x13\x6e\x40\x77\x6f\x76\x33\x27\xf5\xec\xa6\xb5\xb9\x5e\xff\xe7\xbc\x96\xd3\x91\xd1\x10\xf8\xc4\x8a\xeb\x0e\xee\x32\x1b\xe5\x4b\xfd\xc3\x79\x77\xdc\xd6\xdc\x66\x8f\xc7\x8f\x1d\x5b\x59\xf0\x8d\x6b\x8e\xca\x30\x64\xcf\x86\x93\x29\x1b\x98\x53\x26\x56\x9e\x7b\x39\x11\xfa\x7a\x33\x35\x96\xb3\x25\x8a\xdb\xeb\x11\x9f\x9a\x70\xd2\xe5\x20\x2a\xa6\x4e\x4c\xe9\x78\x8c\xe2\xe1\xa4\x69\xb1\xcb\x61\xd4\xc3\x6b\x41\x4b\x9f\xd6\x11\x1a\x2e\xc1\x09\xa9\xdd\xfd\x05\x2d\x1f\xc0\x32\xe5\x4e\x85\xce\x6e\xc7\xe5\x08\x52\xfd\x7a\xe5\xcd\xc1\xbe\xe9\x06\xbc\x34\xd0\x74\xb1\xb5\x78\x9f\xd4\x26\xd0\x49\xa8\x31\xbb\x6a\x87\x19\xc9\xdd\x42\x6d\xe0\x1b\x27\xb1\x97\xcb\x23\x11\x56\x0c\x08\xf0\x64\x94\xe6\xbc\xa2\x61\xc8\xf4\x35\xcf\x4c\xb6\x5b\xc8\x54\xe1\xa8\x72\xa9\x8b\xac\xa1\x6a\xa2\x25\xd1\x15\x4d\x8b\x28\xc7\xfa\x37\x66\xf2\x5e\x8a\x13\x25\x25\xf9\x86\xe6\x6c\xcd\x04\x2d\x2b\xb9\x58\x48\x52\x6f\x1b\x5e\x85\x61\x7f\xf7\xbb\xf5\x7b\xa2\xee\x9b\xba\x3a\x84\x1f\xe8\x94\x24\x26\x72\xb6\x7e\x27\xee\x72\x79\xbb\x73\xde\x06\xc1\x51\x30\xf0\x13\x86\x50\x5f\xd0\x5b\x2a\x6f\xfd\x66\x42\x48\x6e\x6d\xad\x97\x5a\xb5\xb9\x22\x89\x7b\x71\x67\xa6\x0b\xad\xb7\xc4\x6e\x15\x08\x2f\xed\xd0\x76\x46\x06\xd1\xc3\x0f\x8d\x01\xe1\x44\xbd\xe9\x41\x44\x95\xa4\xce\x75\xf7\xdb\x0f\xb1\xfb\x82\x70\xe5\x5c\xf2\x27\xc7\x63\xdc\xae\xaf\x56\x2c\x2b\x77\x15\xcb\xf0\x8a\x94\xb3\x74\xae\x57\x4e\xae\xd8\x6a\xc4\x37\xb4\x50\x0b\x86\xcc\xda\x98\x75\x58\x75\x87\xa1\x82\x33\xcb\xa5\x51\xe5\xba\x2b\xb3\x32\xef\xc4\xdb\x68\x2b\x73\x00\x2a\xc4\x3d\x35\x3f\x22\xae\xf6\x0b\x0e\x02\x14\x8f\x11\x5e\x79\x6b\xb9\xea\xae\xa5\x9f\x30\x94\x1d\x08\xc0\x68\x7e\x19\x86\xcb\xcb\x3a\x0c\xa3\x9a\x2c\x51\x53\xf7\xe5\x7c\xec\x5f\xde\x5a\x2f\x6f\x06\x0e\xf8\xcd\xca\xaa\x4d\x6b\x56\x76\x4f\x79\x84\x33\x7b\xea\xf8\xec\x2c\xa3\x49\xe8\xcc\xc2\x74\x77\x07\xc7\xa2\x75\xe9\xa3\xe7\xc0\xfc\x88\xf6\x96\x8d\x35\x26\xc1\x05\x8a\x15\x9d\xde\xe0\x45\x9e\x14\x1f\x25\xc5\xdc\x76\xc1\x11\x83\xba\x95\x14\xfb\x3a\x00\x37\x51\x5b\x87\xdc\xf7\xf6\x25\xda\x5b\x3c\x2e\x0c\x36\xf3\x3e\xa3\xe0\x4a\x1e\x63\x7e\x93\x06\x99\xf8\x35\x99\x3c\x0a\xca\x7d\x1f\xe9\x7b\xdc\x74\x6b\xb4\x55\xce\xf8\xbc\xa7\x1b\x49\x00\xcc\x76\xea\x4d\x4c\x97\x7c\x38\xd3\x0c\x9d\xdd\x39\x2e\x3c\x38\x93\x78\x14\x1c\x0f\x94\x2c\x7d\xb1\x4a\xca\x2a\x16\x23\xef\xfd\x73\xe4\x0a\x7c\x9e\xde\x1b\xda\x04\x5e\xb1\xa6\x5d\xba\x33\xdf\xc4\x36\x9f\xea\x83\x5a\x8e\x46\xfe\xfd\x0b\x29\x8f\x05\xbf\xa5\xe5\x87\x94\xaf\x37\xbc\x90\xe7\xb6\x43\x39\xec\x8a\x2b\xbf\xa8\x54\x92\x65\xbc\x50\x42\x43\x75\x5f\xf9\x0d\x84\xcc\xaf\xe8\x15\xfe\x95\x9d\xf9\x95\xe4\x90\x73\x53\x0b\x56\x62\x9d\x2b\x77\xe6\x8b\xa4\xac\x82\xfd\x17\xb7\x2e\xfd\x14\xb9\x6c\x94\x40\xd0\x4f\xe2\x58\xd6\x13\x20\x7c\x2f\x41\x34\x0e\xee\xef\x03\x0c\xbb\x20\x0e\x9a\x26\x30\xe0\xe0\x94\x71\x9a\x44\xb8\x83\x58\xe3\xfe\x18\x24\x5f\xb6\xa3\xaf\xbf\x7f\x19\xa9\x56\x3e\x0d\xdb\x82\x43\x41\xd7\x9b\x3c\x11\x34\xc0\xdd\x51\xfc\xab\xc5\xdc\x87\x81\x66\x34\xd2\xcb\xa1\x4c\xde\xf5\x3f\xe5\xcf\x7d\x6f\x3e\x9a\x31\x71\x0c\xc7\xc6\xa2\x4c\xd2\x8f\x54\x54\xbf\x8d\x26\xde\x81\x98\x07\x7b\x82\x1f\xec\xc0\x6f\x30\x2d\xa1\xa3\x8f\xf4\xee\xfb\x64\x33\xaa\xea\x45\xce\xd6\x94\xdc\x2f\x93\x3c\x17\xab\x92\xd7\xd7\xab\x38\xd0\xae\xf8\x83\x06\x83\xab\x29\xbe\x5e\x27\x45\x56\x81\x3f\x99\x1f\x79\x85\x59\x5b\x5e\xe7\x24\x6d\xca\x3a\x49\xb5\x87\x7f\x70\x71\x10\xbc\x58\x67\xc3\x40\x79\xfe\x18\x06\x3d\x5f\x5d\x19\xdd\x9b\x90\xe7\xd6\x75\x4b\xf5\xf5\x9d\x17\xd9\xde\xc8\x69\x46\xda\xab\x90\x12\xab\x6c\xb7\x62\x94\xf1\x54\x17\x96\x47\x39\x5d\x6f\xc4\x5d\x84\x7c\xd5\x56\x06\x04\x25\xbb\x1c\x43\xdc\x34\x88\x42\x6a\xeb\x33\xd1\xb3\x0b\xed\xb6\x60\x38\x41\xc6\xe7\x0d\x08\x3d\xe1\x30\xd1\x7e\x14\xe0\xc0\x79\x36\x0e\x43\x59\xc5\x33\xc2\x3b\x62\xfd\xdd\xca\x06\x13\x2f\x8e\x43\x82\x2b\x62\x38\x05\x35\xf4\x43\x92\x38\xc0\xa6\xe1\xd6\xb0\x8a\x8c\x2f\xea\x3e\xc9\x2f\xea\x01\x61\x38\x35\x1c\x8c\xa5\x0a\x0f\x04\x86\xe6\x97\xe3\x69\x3d\x9c\xc4\x35\xc2\x2b\x12\x7c\x08\x80\x58\xa0\x8e\x7b\xe7\x68\x89\xc0\xa0\x34\xe0\x01\xc8\xd5\x6e\x03\x42\x56\x61\xb8\xf4\x7d\x39\x13\x59\x2c\x5a\x91\xe0\x2f\x01\x32\x1c\x1a\x42\x2a\x14\xf0\xa0\x2f\xb3\x47\x15\x09\x58\x11\xe0\x84\x38\xd1\x83\x02\x10\xc4\x57\xa0\x13\xa8\x0d\x31\x65\xed\x49\x18\x06\x7f\x51\xad\xc0\x2c\xd7\xc3\x21\x86\x04\xf9\x41\x37\xcf\x9e\x8d\xd1\x7d\x42\x82\xdb\xc0\xf2\xac\x34\xbf\xca\xda\xea\x18\xcf\x11\x35\x6a\x22\x58\x58\xcc\x54\x30\xa5\x12\xc5\xe5\xe5\x78\xaa\x7c\x29\x44\x28\x66\x23\xc1\x41\xb0\x5e\xce\xc4\x2c\x78\x9e\x8b\x21\x38\x2f\x99\x93\xe0\x9a\xbf\xab\x17\xb7\xbc\xcc\x74\x82\xbb\x01\x92\x88\xe2\xe1\x04\x35\xd8\x96\x52\x5e\x4e\xdc\x62\x26\xa5\x5b\x4e\x16\x63\x61\x18\x89\x19\x40\x72\xdb\x9c\xe5\xf7\xbd\x5b\xb7\x3c\xae\x0a\x20\x5e\x82\xba\x6c\x65\x0f\xd8\xd7\x91\x89\xe3\x22\x46\xac\xfa\x89\x26\xd9\x0f\x45\x7e\xd7\x5e\x59\x34\x23\x53\x48\x5a\x41\x45\xb3\xdb\xef\x31\x40\x8c\x72\x56\xb5\x0e\x8f\xaa\x08\x59\x61\xa1\x52\x5d\x19\x4e\xb0\x0a\xfb\x4c\x2f\x12\x03\x4b\xd5\x9e\x62\xb3\x44\xc5\xad\x52\x4e\x15\x54\xec\xe4\x4b\xc2\x91\x09\x4e\x55\xe8\xb4\x41\x54\x4e\xc7\xf1\x04\xe1\x31\xea\x09\x23\x51\x55\x3e\x8e\xc0\x89\x54\xad\x9d\x7f\x0d\x94\x8e\x83\x9c\x9d\x00\x59\x32\x19\x36\x53\xad\x75\x9d\x74\x58\x68\x6c\x22\xa2\xc9\xe6\xe3\x1a\xab\xd0\x5a\x71\xdd\x20\xcc\x89\x6e\x74\xd2\x34\xa0\x94\xe0\xf4\x98\xc9\xd3\x41\x5d\xb2\x5f\x28\xc4\x24\x81\x53\x36\xf2\xbc\x16\x3c\xf0\x34\xbd\x3d\x87\xf5\x2a\x82\xb2\x44\x4a\xe0\xd2\xa4\xb3\xc5\x2f\x58\x67\x2f\x25\xae\xa3\x2b\x74\x81\x86\x43\x06\xfb\xf9\x82\xdb\x40\x6d\x87\x4a\x70\x99\x7f\x30\xe0\x9a\x50\x56\x9a\x60\x16\xc8\x19\xa8\x7f\xd9\x57\x8e\xb0\x84\xbf\x38\xd1\x84\xbd\xbc\x8e\x36\x00\xdf\xd5\x20\xf8\x79\x23\x81\x4d\x85\xcf\x90\xbd\x85\x77\x17\x44\x0d\x3a\xbf\xa6\xe2\x1d\xe4\x7a\x5d\x2c\xb9\x76\x58\x46\x47\x15\x5f\x53\xb1\x62\xc5\xb5\x9a\x3f\x9a\x45\xa8\x35\x55\x91\xad\x3f\xd7\xb6\x75\x91\x00\x6b\x20\x63\x4c\xa7\x12\x71\x00\x9c\x2a\x88\xb9\x7d\x4d\xc5\x0b\x38\x8b\x24\xa0\xb1\x82\x3e\x23\xa0\x31\xed\xad\x82\xda\x13\x3f\x6f\x02\xd4\xd0\x91\xea\xf3\x7b\xae\x1d\xee\xcb\xea\x87\x36\xe8\xd5\x7b\xfa\xc9\x34\x8c\xf4\xb6\xac\x06\xca\x29\x91\x37\x5c\x9d\xf2\x3f\x6d\xc0\x76\x84\x83\xc9\x9e\x31\x5e\x1e\x1c\x23\xf4\xeb\xc0\x28\x07\x0f\x8d\x52\xf9\xc2\x1a\x06\x03\x3e\x08\xde\xc0\x58\x37\x39\x6b\xa1\xfb\xeb\x3b\xd8\x37\xf3\x03\xf6\x06\x74\x67\xf7\x2a\x3f\x6f\x2a\xf0\x91\x15\xa6\xb0\xc1\xc0\xf1\x3d\x2b\x66\x6c\xae\xd1\xa7\x84\x7b\xf9\x26\x71\x28\xae\x88\x0a\xda\x76\x51\x5d\x92\x44\xfd\x1a\x0c\x2a\xa4\x7e\x3e\xe3\xda\xd5\x0f\xf8\x6a\x51\x3f\xc1\xab\x4a\xba\xda\x6e\x8d\x82\xa3\xde\xb0\x15\xd1\x35\x4d\x25\x54\x57\x58\x5e\x7e\xe5\x8e\xb6\x45\xa7\x89\x4c\x47\x8d\x84\x23\x7f\x2f\x97\x78\x8c\x1a\x6c\xa7\xe5\x7d\xb2\x90\x73\xa2\x51\x06\xad\xaa\x40\x4e\xda\xe8\x65\x95\x92\xa0\x62\xc5\x75\x4e\x6d\xd9\xf7\xfc\xd0\x4e\xd8\x41\x70\xe3\x79\xa7\xdd\x48\xd8\x30\x7e\xea\x94\x71\xe2\xd3\xe8\x75\xb2\xcb\x03\x65\xfe\x55\x8b\x72\xdf\xae\x48\xaf\x33\x89\x45\xc4\xf5\x22\x29\xac\x60\x26\x51\xa6\xcb\xe5\x6a\xa9\x8a\x06\xe0\xce\x9f\x46\x77\x12\xe1\xc4\xf9\xa3\xec\xbc\x52\x87\x87\xce\x9b\x41\x29\xaf\x6c\x30\xc7\x06\x4b\x3f\x5f\xaa\xa4\x3d\xb7\xc3\x3a\xa2\xb8\x3f\xd9\x03\xba\x7b\xaa\x51\x4a\x6d\x0f\xd4\x33\x6e\xa7\xf6\x9b\x76\x6a\xdf\xd2\x4f\xe2\x87\x54\x69\x82\xa4\x5e\x71\xc7\x30\xaa\xdd\x98\x81\x9c\x23\x30\x41\xf1\x52\x25\xde\xc7\xdc\x1a\x30\x69\xa2\xf6\x15\x2b\xb2\x57\x75\x9e\x4b\x04\x4d\x88\x22\x18\x2b\x0a\x2a\x47\x10\x6b\x2f\x5d\x03\xcd\x26\xc9\x44\x73\x5f\x57\x47\x86\x66\x2a\x4a\xb4\x6c\x2c\x2d\xfd\x53\x28\xd2\xfe\x83\xc0\x8d\x11\xe6\xa4\x3f\x6e\xbd\x16\x54\xaa\x6b\xea\x68\x94\x75\xe3\x9a\xf0\xa9\xeb\xef\xf6\xea\x6a\x11\x0c\xaa\x01\xfc\x47\x71\x85\x53\x55\xe2\x1d\x50\xfc\x7a\x48\x35\x66\xa8\x97\x82\x39\xe6\x5b\xd0\x48\x98\x8a\x51\x92\xb5\x64\x72\x94\x9a\x3d\x9d\x02\x7c\xa0\x38\xda\x5f\x8d\x84\x76\x50\x17\x87\xc3\x4e\x1e\xdf\x08\x39\xd5\x86\xe1\x67\xea\x6d\xb8\x24\x7e\x1e\x98\x58\x3b\xaf\x26\x94\x12\x09\x22\x74\xdf\xcc\xe6\x0e\xd5\xb3\xec\x60\x6e\x83\x66\xe1\x7a\x51\xa5\x49\xf1\x8a\x97\x5f\xab\xeb\x4c\x24\x24\xa9\xd6\x06\xe3\xbf\x70\xbc\x56\xee\xe4\x9c\xf8\x7e\xac\x14\x5f\x28\x5d\x11\x92\x9a\xa3\x38\xb5\xec\x7b\xa0\xfe\x07\x13\x87\xd2\xf2\x56\xb4\x50\x0a\x48\x6a\xf7\xa9\x9f\xe9\x0a\x22\x61\x02\xff\xb7\x3f\x41\xb8\x3f\xee\x09\x52\x44\xac\xcd\xc7\xda\x7c\xea\xc8\x76\x37\x89\x72\x5b\x68\x21\xfd\x5d\xca\x37\x3b\x58\x44\x05\x5d\xf1\x8f\x18\x95\xfd\x79\x9e\x07\x7b\x76\xde\xf7\x6d\x85\x5f\x53\x71\x4b\x69\xf1\xb5\xbd\x06\x7a\x7b\x47\xce\xcb\x32\x12\x1d\xc2\xd2\x6e\xc1\xef\x15\x11\xfb\x9e\xeb\xe2\x9d\xd2\x0f\x5f\xcb\x4a\xc7\x62\xd0\x5f\x92\x52\x21\x54\xb5\x2e\x0c\xdc\x59\xda\x7d\xa6\x26\x52\xe5\x40\x2d\x7b\x7c\xc3\x2b\x7b\xed\xda\x5f\xdb\xb0\x8d\xeb\xc3\xc3\x50\x62\x44\xbb\x00\xbc\x5d\x00\x79\x2e\xc9\xec\x8d\x86\xc3\x95\xb9\x7c\x2a\x12\x3c\x76\xd1\xa3\x03\x9a\xd9\x97\x11\xe4\x96\x88\x04\x34\xb3\x83\xf1\x13\x88\xe3\xa7\x23\xbd\x3a\xd1\x63\x4d\x84\x57\x1d\xd9\xb5\x5f\x9b\x7b\x6a\x7b\x82\xe4\xa4\xf6\x30\x7f\x0a\x61\x5a\xf5\x9b\x53\xdf\x70\x12\x86\x7c\x56\x0d\x26\x73\x37\x3b\x21\xe9\x05\x4a\x49\x3d\x1b\x0c\xaa\x79\x5b\xae\xa7\x94\xcd\xa2\x1c\xa7\xa8\x69\x0c\xbd\x3a\x65\xa4\x3f\x8e\xf5\x27\x1f\x2d\x08\x30\x16\x51\x2f\x08\x7f\xf6\xfa\x61\xb5\xe3\x93\xd6\xb6\x9a\x9c\x98\x5b\x46\x32\xe3\x73\x5c\xcb\x7f\x83\xc9\x1c\xe7\x44\x53\x05\x29\x29\xa2\x1a\xe1\xa5\x8b\x20\x73\x9c\x42\xa8\xc5\x72\xba\x1c\x55\xbc\x14\x11\x8a\xf5\x8f\x7d\x1a\xf2\x9d\xa8\x44\x3a\xf6\xac\x93\x62\x65\xb6\xe0\x41\x30\xa2\xa4\xc4\xe0\xd1\x9f\x5e\x8a\xe9\x70\x12\x53\x42\x84\xbc\xc5\xc0\x0d\xc2\xbb\xc3\x2c\xb1\x9c\x2a\x0c\x97\x00\xef\x60\xce\xd5\x39\x9c\x36\xa8\x61\x12\x59\xfa\x27\x2f\x55\x07\xb2\xdc\x54\x2b\x4b\xad\xdf\x26\x9b\x5d\x5a\x5d\x7c\x39\x8c\x95\xfb\x20\x4c\x5f\xeb\xbc\x55\x83\x3b\x9e\x05\xbc\x72\x0f\xe0\x95\xb3\x6a\x8e\x3b\x10\x36\x9c\xf8\x30\x66\x60\xa5\x25\x45\x6a\x4d\x1f\x99\xec\xf6\x3d\x5d\x59\xb2\xa4\x86\xcd\xd6\xe6\x80\xb7\x74\x25\x2f\x67\xe3\xbe\xa9\x5e\x52\x8b\x16\xe4\xb7\xdb\xe1\x30\xc5\xf9\x33\x3e\x65\x2d\x70\xc6\xac\x55\x79\x64\x33\xd6\xaa\x37\x91\x54\x1e\xac\x69\xf3\x59\x50\x1c\x5f\xd0\xd6\x02\x82\x5a\x28\x2c\x09\x9b\x51\x39\x63\x6c\x46\x25\x14\x56\xee\x95\x6f\xf7\x0a\x1b\xe0\x02\xa8\x51\xf9\x0f\xc8\x2c\x1c\x0c\xcc\x42\x4a\xda\xe2\x99\xbb\x41\xa6\x7b\x2e\xc0\x83\x0a\x8e\x5a\x77\x17\xe9\x0b\x71\x5b\x4d\xdc\x29\x27\x69\x80\x42\xb6\xcc\xa1\xe5\x6e\xf6\x9d\xab\x6f\x02\x9a\x16\xfa\xd6\x23\xf8\x9f\x19\xbd\x05\x66\x08\xd6\xf0\x67\x2f\x50\xba\x8a\xee\xf5\xe9\x5f\x06\x83\xed\x28\x07\x12\x04\x4b\xbb\x6c\x17\xc9\x33\x32\xbe\x48\x86\x43\x83\x0a\xca\x59\x22\x51\x41\xe5\x11\xb1\x39\xa9\x5c\x80\xec\x8d\xfb\x26\x83\x04\x98\xaa\x05\x98\x7a\x38\xc4\xf5\xa5\x05\x98\x1a\xe7\x0f\x00\x4c\x2e\x01\x26\xff\x3c\xc0\xd8\x32\x27\x17\x54\xf6\x96\x0e\x0f\xc1\x4c\xe2\xc3\x4c\x49\xc8\x83\x50\x00\x30\x34\x9c\x00\x0c\xa1\x07\x17\xfe\x73\xe0\xd6\xc9\x9e\x7c\x1e\x4e\x0e\x00\x05\x1f\x04\xc7\x12\x22\x04\xbf\xbe\xce\xa9\x24\x31\xa8\x51\xa2\xa3\x59\x87\x18\x91\xc8\xd5\xc9\x15\xdd\x6b\x21\x21\xb0\xf3\x4d\x6d\x7f\x90\xb5\xfd\xc2\x59\x01\xce\xc9\xff\x25\x97\x22\xff\xaa\x0a\xbe\xc4\x35\x09\x5a\xe9\x0b\x24\x68\x8d\xb5\x67\x62\x5b\x81\x3c\x13\xc5\x8c\xed\x9c\x89\xf5\x05\xaa\x89\x98\x0d\x06\xcc\x3d\x13\xcd\x95\x0b\x58\x9e\x71\x05\x1a\x9a\x96\xed\xd4\xe7\x06\xec\xc2\x30\x81\x3b\xd6\x83\x60\x24\x20\x8e\xa6\x3d\x06\x4b\xcf\xc5\x88\xcb\xf6\x2d\xd5\x59\x58\x69\x14\x2a\xe9\x97\xca\x43\xaf\x02\x57\x2e\x7a\x95\x7b\x03\x3a\x78\x91\x5f\x92\x6a\x44\x8b\xcc\x55\x6e\xcf\x87\xa2\x97\x13\x95\x1e\x86\x51\x42\x8a\x28\xc5\xd4\x02\x69\x6a\xb8\x80\x92\xce\xc5\xe9\x25\x75\xc0\x15\x82\xfa\xf9\x50\x78\x24\x61\x2a\x95\x40\x98\x0e\x26\xf8\xf8\xef\x57\xd5\xef\x8f\x95\xf6\x8a\x53\xa5\xac\xca\xf5\x2d\x86\x07\x03\x81\x1a\xe6\x9f\x19\xf5\x76\x9b\xa8\x93\x21\xd9\x73\x3f\x65\xea\x94\xdc\x21\x66\xe1\x1e\x98\xd5\x9b\x9c\xa5\x89\xbe\xa8\x76\x41\xf2\x33\x8b\xb0\x0b\x67\x86\x0d\xaa\x15\x4c\xdb\x18\x10\x6c\x1f\x6f\xa0\x9c\xf7\x5a\xd1\x41\x67\x7a\xda\x39\x60\xed\x59\x87\xcc\x56\x74\xd2\xe4\x9d\x2a\xde\x57\x58\xfd\x34\xcc\x6b\xac\x98\xd7\xf2\xbf\x4a\x68\x19\x48\xfe\xc6\x85\x8d\xf6\x1e\xb6\x6d\x99\x14\xd5\x86\x57\x14\x44\xb9\x8a\x1b\xf2\xea\x9c\x04\x92\x40\xda\xb7\x01\xb3\xce\x45\xfb\xd5\x39\x1c\x07\x26\xf7\xeb\xa2\xa2\x45\xc5\x04\xbb\xe9\x4e\x74\xe6\xdc\xf4\x47\xaf\x4e\x48\x50\xd0\x4f\xe2\x6b\xce\x3f\xae\x93\xf2\xe3\x01\x46\x8b\x77\x25\x34\x79\xab\x36\x88\xf2\x85\xdd\xe6\x8e\x8b\x13\x65\x13\x03\x7e\x4d\xe4\x25\x34\xd2\x41\x54\xac\x20\x45\x07\x5b\xc7\xdd\xdb\x99\xba\x6f\x17\xf2\xbe\xdd\x78\x80\xf4\xea\x44\x0e\x71\x53\xd2\x9b\x7f\x61\x77\x85\x75\x68\xa7\xcd\x1e\x8c\x85\xa9\x98\xb5\xa8\x67\xee\x8c\xa0\x3c\x70\xab\x2c\x55\xbf\x4b\xd9\xef\x9e\xae\xab\x69\x97\xe7\xa4\xc5\xcd\x07\x7a\xff\x19\x94\x7a\x68\x58\x60\x30\xbb\xff\xd3\xbe\xb0\xd4\x85\x8b\xb5\x18\x11\xb3\xc2\xb2\x0c\xb9\x7a\x03\x96\x61\xe2\x3a\x88\x02\x46\xb5\x26\x3d\x13\x97\xf4\x64\xcb\x28\x99\x55\xf3\x6e\xc3\xe8\x1e\x52\x8d\x27\x23\x5f\xf7\xba\x74\x75\xaf\xcb\x59\x3d\x27\x44\xe6\x0e\xc3\xd2\xf8\x51\x94\xa4\x80\x0d\x2a\xaf\x58\x8b\x9a\x0c\x28\x77\x3c\x83\x30\xcc\xf1\x7d\xa7\xf9\xb8\x3f\x56\x2e\x24\xfe\xb2\xa2\xc5\x4b\xb9\xe3\x81\xdd\xd7\x81\x26\x40\x4b\x6a\x59\x20\xb3\x9d\xb5\xdf\x08\x54\x07\x54\xdd\x21\x1a\x8d\x99\x09\xd1\x3a\x73\x6a\x05\x54\xaa\x0f\xfa\xa2\xff\x9b\x3a\x01\x07\xae\xdf\x93\x7d\xab\xee\xae\xb8\x06\xe7\x69\x87\x37\xa9\xf0\x95\x42\xef\x12\x87\x35\x92\x9e\xd1\xcb\x52\x0c\x87\x12\xb9\x97\x8e\x44\xe4\x00\x8b\x57\x8e\xea\x4f\x72\x50\xb7\xa5\x22\x5c\x2a\x25\x8c\xde\x10\x3e\x08\xfe\x78\xe4\x5c\xc9\xd7\x46\x34\xfc\x20\xf2\x2f\x1e\xa0\x50\x67\x73\x2d\xfc\xb2\xc6\xdb\x20\x03\x8b\x6a\x52\xcc\x92\x39\xb2\x18\x3f\xd2\xc7\x58\x82\xb0\x8e\x29\x1d\x04\x08\xc5\xfa\xb7\x76\x5e\xa4\xb0\xb8\xb9\x42\x61\x75\xb5\x41\x48\x92\x5d\x1a\xe5\x3b\x5d\xe0\x38\x48\x4a\x5e\x17\x59\x80\x83\x34\xa9\xa8\x91\x0b\x02\xbc\x27\x2d\xed\xd9\xa5\x94\x65\xcf\xd8\x2c\x99\xcf\xb5\x1c\x0e\xf4\x28\x15\xdf\x44\xdd\xad\x70\x85\x9e\x8d\x91\xa5\x03\x22\xa1\xef\x5c\xa8\x57\x11\xc5\xb3\xeb\x52\x8d\x65\x94\x2a\x16\x26\xd6\xdf\x53\x85\x3d\x1b\x47\x44\x76\xf3\x30\x9b\xb5\xd8\x65\xb3\xee\x72\x4f\x0b\x64\xa0\xc8\xe1\x9e\x32\x8f\x7b\x5a\x12\x0d\x43\x05\xb8\xc3\x6f\x5c\xb9\x58\x09\xd2\x30\xfc\x8f\x9a\x96\x77\xb1\xc7\x3a\x2d\xb4\x64\x8c\x39\x86\x2e\xd7\x2e\x3b\xe0\xc6\x44\xf6\x6b\x75\xd7\xa0\x1a\xcc\xb5\x80\xc8\x65\x85\x32\x2c\xa6\x12\x0f\xc7\x0a\x27\xa3\x8b\x48\x4c\xb9\xc3\x09\x8d\xd5\xcb\x8f\x25\xbd\x61\xbc\xae\x22\x24\x09\x02\x0f\x99\x5b\xba\x94\x1b\x96\xeb\xa1\x76\x0a\x13\x80\xcf\x32\x5d\x63\xea\xe8\x08\xb8\x64\x19\x42\x08\xff\xc7\x7b\x52\xc2\x74\x77\x77\x9f\x77\xfc\xa0\xa6\x11\xb3\x8d\xc4\x6f\x6d\xc4\x16\x25\x24\x90\x1d\x51\x31\x40\x24\xfa\x81\x2c\x7f\x74\x3e\xed\x93\x8c\xff\x06\xc2\x0c\xc3\x95\xd2\x40\x7f\x29\xa1\xbf\x1c\x0e\x51\x97\x26\x0d\x30\x20\x47\x2d\xa0\x29\xc0\x24\xa8\xa5\xe1\xe5\x3d\x49\x89\x35\x40\x2a\x79\xe8\xda\x03\x63\xf8\x59\x8e\xa1\xde\xc8\x5d\xf8\x5c\x83\x70\x67\x14\xeb\x88\xe2\xbd\x4a\x71\x1e\x4f\xc9\xab\x14\xa4\x42\x19\xbf\x2d\x7e\x5b\xb5\x4e\x04\x6d\xaf\x5a\x87\x57\x2c\xde\x29\x44\xfe\xfd\x2e\x31\xd0\x41\xf5\x32\x07\x2c\x79\x37\xd1\x1c\x2d\x78\xcf\x37\xf0\x8e\x67\x8f\x94\xc8\x63\xc7\xbb\x3d\x7a\xde\x9e\x3f\xef\xf9\xe1\x2e\xed\x3d\x83\x0e\x77\x4c\x1f\x31\x62\x07\x52\x7d\xb1\x80\x70\x7b\xf2\x97\x56\x96\x75\xb0\x27\x3b\x5e\xf4\xbc\x9e\xec\x49\xf4\x68\x37\x13\x23\xce\xeb\x03\x23\x10\xfa\xc1\x22\xba\x02\x33\x89\x81\xb5\x0c\x8f\xf5\x18\x29\x70\x41\x78\xd3\xa9\xfc\x8f\x2c\xcf\x69\xe6\xb2\x38\x0b\x90\xf8\xef\x32\x00\x30\x33\xc4\x07\x0c\xf3\xaf\x86\x73\xf3\x17\x26\x56\xff\x13\x26\xbc\x4b\x10\xfe\x87\x00\x45\xd1\xe7\xfa\x55\x78\x80\xf3\x37\x18\x87\xaa\xe7\x6f\x49\xd1\xed\xbf\xf2\x89\x4b\xf7\x4d\x1a\x44\x98\xec\x9c\xa8\xdd\x5e\xab\x9c\x9a\x07\xb2\x49\x2a\x89\x08\x24\x79\x01\x4d\x7f\xbb\x87\x6e\x6b\x3b\xf6\x02\x3a\xb6\xe2\xb7\xaf\x8b\x17\xb4\xd8\x15\x7a\x9a\x99\x55\x3a\x77\x2f\xc0\xf5\xa9\x92\xeb\x3b\x7a\x10\xbe\xc0\xdf\xaa\x4d\x58\x27\xaa\xc3\x1d\xcd\x04\x4f\xa5\xe2\xf8\xc4\xbf\x06\x4b\xa2\x48\x73\x8d\xad\xa4\xb9\xfa\x79\x73\x9b\x94\xbb\xdc\x99\xdf\x82\x71\xf7\x87\x43\x64\x10\x0e\xb1\xe7\x5c\x61\x9f\x79\xe7\x95\x5c\x08\x4f\x28\xe8\x5d\x77\xc1\xb5\x94\x61\xf7\xa2\xa6\xd9\x1d\x91\xe5\x43\xb6\x63\x92\x49\xff\xcb\x47\xd5\xe1\x7f\x3c\x34\xa8\xc1\xfe\x41\xc9\xdb\xc0\xa9\x1c\x8a\xdc\x47\x3f\x17\xd9\x0e\xd0\x5c\xbb\x37\x6e\xef\x12\xe1\x17\x33\x87\xf9\xbe\xe2\x9e\x66\x5a\x5b\xee\x79\x9e\xef\x6b\x51\xcd\x8b\x21\x7d\x3a\x21\x3c\xbb\xc4\x88\x50\x04\x91\xa4\xe4\x80\xfb\x26\x4f\x5e\x87\xd2\xb8\x40\x85\x4f\xea\x97\x86\xb0\x00\x62\xbf\xd4\xda\x76\xb8\x74\xd9\x6b\x97\x44\xb4\x3e\x2d\xe5\xf5\x4b\x7f\x4b\x57\xf6\x4b\xba\x0a\x43\x36\x18\xec\xe8\x7b\x68\x9c\xe7\xcf\xd4\x0c\x06\xcc\xf3\x2c\xe8\x7c\x98\xc3\x01\x5e\x98\x4f\xb0\x89\xc7\xc1\x9c\xe8\x9f\xbf\xb4\x9f\x9f\xe7\x79\xa0\xd8\x26\xaf\xcd\xec\xbd\x2e\xd2\x12\x3c\xfe\x24\x79\xb7\xde\x7d\x79\x7e\xa2\x37\xb4\xac\xa8\xae\xe5\x3b\x99\x43\xa3\xa2\x00\x8b\xd1\xab\x53\x55\xe0\x2d\xc4\xa1\x6c\x79\x0f\x76\xad\xe4\xf2\x06\x98\x8e\x0a\x5e\xae\x93\x9c\xfd\x93\xfe\x11\x94\x61\x23\x21\x67\x4f\xeb\xfd\x06\xae\xbe\xef\x6c\xee\x3a\xde\xf1\x34\x74\x35\x71\xac\x95\x88\xe2\x56\xad\xb7\x71\xea\xfa\xdf\xe9\x7a\x41\xcb\x61\x96\x88\xe4\x38\xc9\x92\x8d\xa0\xe5\xf1\x70\x53\xb2\x1b\x50\xa8\x9e\x05\x5a\x43\x1a\x42\xfe\x81\x0e\x73\x80\x03\x55\x84\x15\x4b\xb9\x1e\xbe\x7b\x2e\xed\x10\x7b\x47\x53\xb8\x20\x56\x17\x98\x15\x47\x62\x2a\x8c\x6e\x53\x2c\x30\x23\xc7\x57\xe5\xf4\xaa\x38\xd6\xe2\xdb\xe3\xab\xd9\xd5\xfc\x77\xc7\xae\x8a\xaf\x89\xf6\xc5\x59\x76\x34\xee\x13\x08\x86\xa6\x8c\xc7\xe1\x67\x49\x20\xa4\x27\xd9\xa3\x3e\x5d\x4e\xcb\x08\xc5\x25\xa6\x33\xe3\xdb\x65\x4e\x68\x91\x82\xb7\xa8\xd7\x2f\x8c\x5e\x7d\x24\xd0\x20\x20\xc1\x60\xcf\x97\x12\x19\xa7\xe5\xc6\xcd\x0c\x78\x3f\x88\x82\x25\x15\xe9\x2a\x70\xf4\x1b\x4d\x8a\x19\x5a\xaf\x22\x3b\x26\x77\x47\x75\xa3\x34\x3c\xd8\x32\x6a\x7b\x6b\xbd\x3a\x40\x0d\xbb\x7e\x81\x52\xf0\x37\x7a\x24\x01\xe4\x48\xac\xe8\xd1\x7f\x81\x7c\xff\x45\x2b\xa9\x1f\xf1\xd2\x4b\xbd\xce\xf9\x22\xc9\x47\x47\xdf\xb0\xec\xe8\x8e\xd7\x47\x6b\x9a\x14\x47\x82\x2b\x0f\x40\x79\xae\xf2\xaa\x35\xd4\x25\x40\x23\x7c\x1a\xa0\xbd\x3d\x86\x3c\x2a\xbe\x6d\x4e\x2a\x9c\x92\x97\xb2\xe8\xe8\x7b\xf6\x89\x99\x10\x95\xd1\xfd\xa2\x66\x79\xf6\xf3\x4f\x6f\x3a\xa1\xb7\x55\x6c\x80\xea\x96\x69\x7f\x80\x70\x93\x95\xc3\xf8\x89\xa6\xbc\xcc\x82\xd8\xf0\xeb\x56\xac\x1a\xd5\x65\xfe\x8a\x97\xaf\xec\xd7\x48\x60\x2a\xaf\x81\xb6\x90\xdc\x9d\x07\x4a\x3c\xcf\x95\x3b\x5e\x95\x19\x70\xd5\xbe\xac\x7f\x92\x1f\x22\x86\xa9\x9b\xf1\x70\x5f\xfe\xd4\x7e\x76\x0a\x29\xce\x55\xb1\xb7\x81\x57\xfa\xdb\x4e\xdf\xbf\x4b\xaa\x87\xca\xe8\xcf\x3b\xc5\xbe\xa6\x39\x2f\xae\xab\xf7\xfc\x50\x41\x9b\xc1\x2b\xaa\x23\x87\x1e\x1c\xd8\x0b\xe7\xbb\x33\x6f\x35\x78\x99\x3d\x5c\xec\x67\xe7\xbb\xd7\x9e\xa2\xaa\x0f\x17\xfc\xc6\xf9\x6e\x0a\x1a\x04\xe0\xe6\xfe\x60\xe0\x48\x79\x4b\x6f\xf0\x87\xbd\x80\xa5\x89\x74\x73\x18\x29\x80\xbc\xa6\x02\x3c\x86\xe2\x60\xc5\x2b\xa1\xf4\xb8\x74\x0f\x7e\x2c\xe9\x92\x7d\x6a\xa5\xfa\xca\xdb\x15\x7c\xdd\x24\x62\xf5\x8a\x97\xef\xef\x36\x34\xa2\x08\x81\x77\x19\xcd\x3a\x16\xf6\x65\x2f\xc2\x80\xd0\x09\x85\x65\xf0\x72\x79\x36\x2a\xc7\x30\x51\x70\x1c\x20\xdc\x67\x61\x58\x84\x61\x70\x1c\xf4\x09\x29\x8c\x1e\xd1\x18\x49\xd4\x45\x82\xe3\x60\x50\x20\x5c\x34\xb8\x0b\xf5\x9d\x81\xee\x9f\x1d\x81\x29\x72\x8b\x3e\xcf\xf3\x7d\x56\x59\xdd\x39\xb5\x65\x00\xb0\xbf\xac\x25\xbf\xcc\xaf\xe9\xa3\xd7\x43\x09\xdd\xbf\xa1\x98\xde\x17\xbf\x69\x52\xec\xd6\xf8\xd5\xa5\xdd\xed\xf1\xab\xe6\xd5\xdd\x20\xbf\xba\x55\x77\x93\xfc\xba\xc2\x0a\xbe\xf7\x6d\x91\x43\x7b\xa3\xd8\xf9\x50\x24\x6b\xaa\x98\x39\xea\x32\x6b\x20\xb7\xdc\x6e\xf5\xf9\x6a\x5d\xcc\xfd\xfd\xea\xf8\xea\x58\x47\x93\xa0\x68\xbb\x3d\x5e\x09\xb1\x89\x2a\x34\x8d\xbd\x0f\x53\x1a\x07\xc7\x01\x71\x42\x3d\x8f\xd1\x34\x08\x06\xe5\x80\xc6\x62\x20\x77\x00\xd5\x81\x4c\x67\x73\xab\x6f\x13\x86\xcc\x6e\xc0\xc2\xbe\x14\x08\xb3\x76\x6b\x35\xd8\xd9\xb5\xf1\x2e\x4d\xab\x86\xa6\x63\x19\xa6\xc9\x9a\x4a\x42\xca\x09\xc9\x5a\x8e\x36\x79\x5d\x02\x79\x25\xc1\x0d\xf4\x89\xbf\xd6\x93\x0a\xc7\x1a\x49\xc1\xe8\x4c\xd0\x72\xcd\x0a\xfa\x35\xcf\xee\x7e\x2c\xf9\x9a\x55\x94\xec\x5d\x16\x15\xa0\x31\x42\x23\xb1\xa2\xc5\x8e\x76\x5b\x41\x4a\xf0\xf9\x5a\x90\x3f\xbc\xfb\xe1\xad\x76\x92\x5b\x1a\xa7\xaf\xca\x54\xbd\x1f\x71\xd7\x41\xdf\xbb\xbb\x42\x24\x9f\xe0\xf0\x37\x5e\x02\x79\xcf\x2a\x2f\x8a\x44\xd4\x55\xaf\x4f\x47\xfc\xe3\x76\x7b\x32\x7e\xd4\x87\x90\xdb\x27\xe3\xc7\xea\x47\xf0\xdd\xcb\xe7\xdf\xc8\x95\x13\xa3\x35\x15\x2b\x9e\x4d\x53\x5e\x54\x3c\xa7\xa3\xdb\xa4\x2c\xa2\xe0\xfd\x8a\x55\x47\x25\xad\x36\xbc\xa8\xe8\xd1\x6d\x52\x1d\xd5\x45\xb2\xc8\xa9\x24\x11\x16\xf4\x08\xfa\x97\x1d\x25\xd5\xd1\x2f\x15\x2f\x46\x01\x2e\x51\x5c\x10\x45\x79\x59\x3b\x1b\xe5\xb2\x05\x28\x03\x92\x63\xaa\x06\xf5\x93\xae\xf3\x3b\x9a\x64\xb4\xac\xf6\x5c\x36\x7e\x00\x23\x3b\x43\x34\x28\x03\x58\xcf\x93\x9f\xe8\xb9\x97\x10\x15\xa6\x9b\x19\x29\x53\xb9\x57\xca\xc4\x49\x39\x2b\x80\x4d\x8f\x2b\xd2\x9f\x5c\x24\xad\xe2\x5c\xa2\x84\x48\x8f\x9f\x12\xa2\x8d\x9f\x74\x78\xbe\x04\xa1\xfb\x8a\xf4\xc7\x5a\x0a\x24\xbb\x30\xe9\x13\x52\x59\x35\xbb\x51\x55\x2f\x94\x9d\x33\x84\x1a\x1f\x89\x92\xc9\xcb\x4c\xee\x7d\x49\x06\x13\x6c\x2d\xb8\x74\x96\x5e\x0e\x26\x3e\xb5\xcf\xa2\x9b\x93\x1c\x8b\x59\x3d\x27\x39\x6a\x5a\x17\xfd\xc0\xfb\x28\x19\xc0\x21\x20\xd7\x1f\x93\x32\x59\xef\x9b\xb7\x76\x7f\x58\x9a\x98\x3a\xa6\xd6\xb8\xc2\xb5\x62\x40\xb1\x65\xa4\x1c\x58\xb0\x0a\xfe\x47\x85\xf2\x75\xc3\x60\x76\xac\x10\x83\x5d\x56\xa0\x32\xa1\x03\xa9\x95\x68\xaa\x82\x7e\x14\x33\x36\x47\x31\x8d\x4a\x79\x99\x1a\x44\x3b\x46\x91\xf2\xfb\x94\xc5\x41\x80\xe4\xa5\x4a\x65\xb7\x96\x5d\xbb\x78\x32\x98\xa9\x0a\x8e\xd4\xba\xcf\x25\x2e\xd0\x20\xd0\x3a\xd8\x10\xdc\x6e\x54\x49\xc3\xa1\xc6\xf4\xb9\x3e\x62\xc5\x51\x81\x4c\x6f\x6a\xdd\x64\x6d\x9a\xd4\x5d\x6e\x3b\xf0\x6b\x46\x0e\x3e\xc9\x66\x6c\x0e\x8e\x69\xd5\xaf\x9b\x24\xaf\xa9\x63\x90\x6d\xdb\xaf\x75\xab\xad\xa7\xc7\x20\xc0\x14\x69\x7c\x14\x06\xc8\x71\x3a\x7b\x32\x3e\xbe\xc6\xc1\x40\xe2\x28\x3d\x52\x75\xd1\xb2\x2e\x57\x28\x0e\x3e\x7c\xa0\xd5\xf7\x40\xb9\x07\xf8\x1e\x5a\x35\x96\xae\x0f\x5d\xca\xf4\x7f\xf7\x4e\x36\xc7\x07\xad\x33\x7f\x6d\xe3\xd8\x1a\x9b\xe8\xad\xde\x73\x51\xa9\xae\x4d\xa9\xf2\x46\xe6\x46\xf9\xce\x00\x6f\x19\x07\x43\x73\xbb\xc3\x2d\x75\xaf\x9c\x87\x68\xc2\x5d\xbd\x28\xe1\x4c\xfb\xd3\xcd\x78\x4d\x0b\x5a\x26\x82\xbe\xce\x5e\xf1\xd2\xfd\x60\x37\xc9\xfe\x43\xd1\xd9\x45\x40\x3c\xb8\xb4\xaf\xaa\xc0\x25\x6b\x55\x8a\x4b\xaf\xaa\x94\x94\x27\x39\xad\x52\xaa\x08\xb1\x7f\xd4\xb4\x12\x55\xdc\x1f\x63\x43\xec\xeb\x3e\x96\xbc\xde\xa8\x62\xd5\xe7\x08\x9b\x99\x98\x37\xb8\x5a\xf1\x3a\xcf\x7e\xa2\x39\x4f\x76\xe8\x3b\x93\xb1\x3f\xf1\xf3\xf9\xc4\x5c\x5b\x61\xdf\x46\x0e\xd7\xd9\xbf\x4e\xd2\x8f\xd7\x20\x24\xfc\x4c\x03\xe3\x43\x25\xbc\xa6\x9c\xec\x70\x24\x1a\x80\x10\x9f\x81\x4c\xaa\x39\x11\x0e\xaf\xc0\xcd\x56\x09\x5e\xd2\x96\xa7\xe0\x33\x0b\x0e\x79\xce\xd5\x9e\x6d\x15\x2c\x12\x15\x3a\x41\x90\xe0\xb9\x6a\xf2\xc8\x32\xfb\x8e\x96\x09\xcb\x69\x16\x68\xa7\xab\xac\xd2\x39\x94\x73\xfc\xfe\xb8\xe7\x52\x41\x90\xa8\xf0\x0c\xd0\x3c\x02\xf5\x20\xaa\xba\x8e\x3c\x90\x7e\x24\xda\xeb\x94\xf6\xe0\x4a\x95\x63\x67\xc6\x0b\x52\xba\x6f\x3a\xba\x2c\xcb\x29\x44\xf5\x29\xed\x4f\xf5\x21\x67\x05\x7d\x5b\xcb\x16\x75\xa0\x73\xf5\xa2\x3e\x6a\x67\xec\xa4\x34\xbf\x54\x72\xa1\x2a\x2a\x6c\x25\x85\xa9\xa0\x70\x0a\xcb\x5b\x08\x29\xe1\x9f\x1e\x30\xcc\x7d\x45\xe8\x76\x3b\xbb\x17\x4c\xe4\x34\xb6\x73\xf4\x52\x2d\x4b\x46\x45\xc2\xf2\x58\x34\xf3\xe6\x57\x23\x85\x83\x05\x54\xb3\xdf\x25\xd5\xea\x3d\x07\x74\x1b\xe0\x7b\x5a\xd4\x6b\x5a\x4a\x4a\x42\xee\x9b\x6b\x2a\x76\x21\xeb\x48\x8c\x76\x4a\x36\x9f\x6f\x07\xf2\xbd\xe7\xb2\xd0\xaf\x6c\xc7\x29\xd9\x00\x92\x7b\x47\xcb\x1b\x03\x1d\x74\xf4\x82\x17\xcb\x9c\xa5\xc2\xbc\xbf\xe5\xe2\x95\xdc\x1c\xe6\xfd\x15\x2f\x17\x2c\xcb\x68\x61\x12\x7e\x2e\x92\x5a\xac\x78\xc9\xfe\x49\x6d\xa6\xe7\x0b\x5e\xda\x1a\x74\x5c\x11\xf3\xfa\xba\xb8\x49\x72\x66\xb3\xee\x41\xb1\x92\x3a\xb4\x50\xcf\x9c\x3b\xc6\xae\x48\x2a\x6a\x77\xc3\xf4\xbe\x89\x05\x32\x20\x64\x8d\x1a\xe0\x2a\xbf\xeb\x6d\x54\x15\xf7\x7d\xb4\x50\x67\x1f\x94\xb8\xd8\x6e\x05\x6a\x1c\xfa\xd8\x1c\xcf\x1d\x92\x8d\xb6\x5f\x10\x2e\xf5\x81\x40\x98\x24\xd6\xcb\xa6\x1d\x5f\x81\x0f\x57\xe1\x6e\xc5\x43\x95\x69\x37\x7f\x3c\x2a\x71\xf0\x7e\x45\x8f\x34\xa6\x39\x2a\xe9\x2f\x60\x8c\x09\x2c\xac\x94\xaf\xd7\x4c\x1c\x2d\x68\x9a\x48\x14\xc2\x04\xd0\xb2\x4c\xcd\x38\xc8\x58\xbc\xd9\x4f\xb4\x5d\xf5\x4e\xa5\x2d\x2e\x11\x6c\x4d\xb3\x23\x5e\x0b\x28\xed\x2d\x65\xa5\x3d\xc1\x3f\x50\x5a\xb6\x9e\x48\x58\xa0\xaa\x75\x07\x2e\x6a\xed\x86\xf4\x81\xd2\x0c\xc8\x70\x0b\x5c\x50\xc3\x2e\xb4\xe5\xda\x32\xea\xe1\x8a\x96\x06\x6c\xa1\x96\x0e\x10\xa7\x3d\xed\x0d\xa0\x5b\x45\x2a\x0f\x88\x23\x8f\xcf\x58\x52\xe5\x08\x1c\xea\xf1\x37\xc7\x52\xdb\xc6\x3c\xd0\x13\x85\x9a\x8f\xb2\x1a\xae\x16\xc9\x51\xaa\x77\x1b\xd4\xe6\x6f\xbd\x95\x76\x40\xf4\x2b\x6a\xab\x60\x27\x1f\x99\x88\x6c\xfe\xd6\xce\x3e\x73\x64\x81\x2d\xd7\xe1\x23\x6b\x97\x11\xfe\x20\x49\xf6\x19\xfe\xf7\xbf\x0e\xed\x7a\x97\xd4\x2f\x46\x85\x5e\xa9\x07\xd1\xad\x25\xe2\xbe\xa8\xe6\xd2\xec\xf7\xe6\xb3\xc4\xab\xbc\x4a\x0e\x93\x0d\xfb\xfc\x94\x97\xb4\x12\xbf\x5e\xc4\xf0\xaf\x21\x77\x0b\x62\xc5\x12\x0f\xd2\xba\xed\x68\x92\x5f\x92\x4f\x2a\xa8\x41\x15\x77\x3b\x68\xb1\xb5\x92\x50\xdc\x83\xf8\x2b\xe5\x85\xa0\x85\x78\x2f\xf1\xa2\xf7\xb6\xdd\x06\xc9\x46\x29\x30\x33\x5e\x1c\xdf\x14\xd9\x28\xd9\xb0\x01\x44\x03\x32\x9d\x03\xee\x4f\x55\x43\x80\x3e\xec\x79\x11\x04\x89\x23\x2d\xab\xd1\xf3\x34\xa5\x1b\x41\xba\x09\x0f\xd5\x8e\x8b\xe6\x00\xf5\x3b\x69\xa9\xdf\x2e\x5b\xdf\x4a\x4a\x65\x9f\x5a\x86\x14\x78\x77\xca\x81\x14\x2a\x71\x81\x5b\x56\x79\x7b\x7b\x92\x05\xe4\xb4\x45\x0c\x07\xdf\xbe\x7c\x1f\xe0\x7b\xb9\xfe\xf1\xfd\x92\xe5\x82\x96\xf1\x3d\xcb\xe2\x52\x5f\xad\x70\xa0\xb4\xcc\x7e\x0d\xbb\x27\x4b\xaa\x15\x2d\x3d\x7e\x4f\x34\xc6\x0e\xc7\x07\x29\x0e\xe3\x21\x46\x5d\x1b\xeb\xe5\xbe\xe9\x39\x57\x8b\xf2\x15\x48\x41\xed\xf8\x50\xfb\xe9\x75\x21\x80\xc2\x88\x0a\x98\x9b\x7b\x56\xa4\x79\x9d\xd1\xd7\x19\x80\x5a\xef\xb3\x13\x35\x62\x19\x2e\xb1\xcf\x7c\xdf\x3f\x5f\x3f\x3e\x7f\xff\xe2\x3b\x33\x63\x45\x83\x7c\x3a\xbd\xf8\xcc\x26\x54\x5b\xeb\x33\x1b\xf0\xb7\x61\x42\xda\x0d\xd3\x63\xc1\xe4\x3f\xba\x4d\x81\xc7\xa4\xb7\x18\x59\xed\xdf\xb7\x46\x02\xf0\xd3\xbb\x3f\xff\x38\xd2\x9c\x3a\xcc\x49\x50\x9b\x70\x1a\xad\x80\xed\x17\x60\xb4\xe0\x64\xef\xc7\x42\xce\x73\x4b\x8d\x55\x3e\xb0\x73\xe0\xe2\x71\x42\x47\xca\xc3\x94\x61\x77\x69\xcf\xd2\x75\x85\xed\xae\x03\x30\xd2\x0c\xbe\xc4\xe2\x4b\x36\x52\xf4\x4b\x94\xd8\x48\x4c\x3c\x0c\x79\xe7\xd2\x32\xb5\xd9\x38\x8a\xb9\x1b\xe1\x53\xf5\xc6\xc4\xda\x56\x36\xca\x30\xf1\xef\x57\x25\xbf\x2d\x5c\x06\xa2\x62\x1d\x72\xe2\x65\x68\x7d\xf0\xe8\x40\x77\x01\x21\x3a\x40\xc4\x3b\x18\x00\xe2\x10\x85\xae\xf0\x48\x9f\xb6\x14\x10\x37\xdd\x32\xdb\xed\x18\x52\x2a\x53\xc3\x7e\x73\x4b\xc5\x89\x04\x87\x4f\x75\x99\x83\x5e\xa5\xd3\x33\x30\x90\xd2\x93\x58\x91\xcf\xdc\x64\xa2\x40\x63\x28\x4d\x12\xc4\x47\xc1\xa0\x04\x5f\x88\x0c\x9e\x11\xdf\x6e\x83\x00\x59\xa6\x9d\xaa\x37\x4e\x1a\xcb\x44\x53\x83\x6c\xe9\xb3\xa8\x42\x10\x12\x49\x33\x7f\x0e\x2c\xb3\x19\xa3\xd6\xef\x80\x65\x06\x87\x51\xce\x38\xdc\x55\xe7\x24\xb1\xcb\xec\x45\x0d\xf5\x3c\x3f\xd7\x55\x6c\x58\xba\xb8\x9d\xd5\x98\x3a\x53\x8c\x75\x73\x31\x38\xf4\x57\xbf\x5d\x2a\x3f\xfd\xd2\x2a\x55\xda\x7b\xfa\x49\xd8\x2a\x15\x6e\xdc\xc3\xbd\x45\x4a\x51\xeb\x79\x9e\x77\x3e\x44\xc8\x6d\xdb\x31\xc8\xbf\x6f\x1c\xf1\x1a\x1d\x2d\x79\xf9\x32\x49\x57\xae\xf9\x6d\xeb\x58\x1e\xfc\xb3\xd3\x06\x61\xd1\x56\xb5\xd2\x71\x5d\xa8\xbc\x29\x64\xb4\x10\x2c\xc9\x2b\x12\x54\xc9\x9a\x0e\x79\xc9\xae\x25\xc5\x43\xc1\x55\x3a\x92\xd0\x28\xcf\x0e\x90\x2d\x28\xd0\xda\x6e\x15\xdf\xdb\x49\x82\xda\x34\xca\xf9\x48\xef\xaa\x48\x97\x36\x2c\x5b\xab\xa8\x55\x97\xb9\xb5\xee\x0f\xa6\x01\x7a\x36\x9c\x4c\x83\x30\x88\x83\x69\xd0\x83\xaf\x03\x12\x04\x03\x31\x80\xc9\xda\xc7\xb2\x45\xa6\x6a\x25\xdc\x3f\xa2\x10\x7a\x5c\xf1\xfb\x15\xb3\x98\x2d\xef\x4c\x1e\x3b\x4b\x2a\x4a\xe2\x2e\xcd\xd1\xa1\xd8\xf0\x5e\x1a\x44\x21\xf3\x65\x52\x89\x05\xe7\x22\x56\x08\x30\xe5\xeb\x4d\x2d\x68\x16\xed\x12\x6b\x56\xdc\xf3\xc3\x6d\x41\x4b\x15\x5a\x71\x94\x73\xfe\xb1\xde\x44\x81\xa4\xa5\x59\x4a\x63\x53\x1d\x38\xce\xab\x2b\xfa\x4a\x22\xdf\x07\xea\x56\x76\x90\x7b\xab\x96\x57\x87\xfc\x86\xfe\x04\xe1\xf1\xb4\x62\x56\x20\x6f\x00\xec\x3a\xa6\xc5\x0d\x2b\x79\xb1\x86\xb8\xdf\x7a\x3a\xfa\xfd\x08\xc0\x06\x2a\x7b\xf9\xf6\xcf\x61\x08\x31\x86\xda\x84\xff\x97\xbb\x77\xed\x6e\xe3\xc6\x12\x45\xbf\xf3\x57\x90\x75\xfa\x70\x0a\x57\x30\x23\xf5\xf4\xac\x75\x2e\x9d\x6a\x2d\xc5\x8f\x8e\xa7\x63\x3b\x63\x3b\xc9\xe9\xc3\xe1\xd1\x94\x59\x90\x85\x36\x85\x52\xa3\x40\x3b\x6a\xb1\xfe\xfb\x5d\xd8\x78\xa3\x80\x22\xed\x38\xdd\x99\xfb\xc5\xa6\xaa\x50\x78\x6c\x6c\x6c\xec\xf7\x5e\x5c\xfe\xfb\x7f\xfc\xf0\xe4\xd5\x5f\x2e\x9f\xbd\x78\xf3\xe4\x4f\xaf\x2e\xde\x3c\x7b\xf9\x02\xed\xf7\xb3\x7a\x3e\x9f\xb5\x3d\xc2\x5d\xcb\x85\xb7\x25\x09\x3e\x21\x40\x05\xdf\x8d\x18\x74\xe7\x5f\xff\xde\x86\xde\x78\x29\xc6\xef\x7b\x48\x11\xa2\x22\xca\x4d\x8c\x1e\x04\xe7\xb1\x15\x5d\xb5\xeb\x75\x45\xd4\xff\x96\xb6\x8c\x33\x53\x49\x8e\xe3\x93\xd8\x29\xc3\x20\x18\xf3\x36\xb4\x56\x7e\x0d\xec\x20\x97\xd5\x4a\x6e\xea\x6a\x60\x30\xce\x4d\xc2\x74\x1b\x8c\x15\xcf\x0c\x14\xa3\x7a\x72\x90\x6c\xc2\xb3\xe5\x49\xa2\x49\xd9\x86\x54\x5c\xeb\xab\x60\x4e\x6d\x30\x27\x2a\xe7\xf4\xb7\x81\x41\xda\x31\x62\x87\x86\x06\xcf\x4a\xe5\xf2\xe1\xf1\xc4\x4a\xab\x17\x22\x85\x33\xfb\x47\x2f\x4a\x8e\xfc\x09\xb2\x60\x82\xdc\x4e\x70\x94\x5f\x3c\x7e\x9a\x7a\x0b\x7f\xbd\xc9\xfe\x03\xd9\x76\xda\x74\x4b\xde\x9b\x41\x53\xe6\x7a\x0f\x42\x92\xd3\x95\xc7\xc9\x0e\x67\x51\x25\x76\xd5\xd0\x0a\x4f\x3b\x45\x8a\x25\x73\x1d\x78\xd2\x04\x40\xe0\x6a\x56\x7a\x1a\x69\xcb\xff\x97\x9e\x88\xf3\xcd\xc9\x4c\x65\x93\x76\x23\x08\x85\x0c\xe0\x89\xf2\x62\xc6\xe1\xa3\xc7\x71\xe8\xee\x83\x5c\x5a\xe5\x23\x45\x94\xf0\x68\x7e\xff\xf2\xf5\x1b\x5f\xc6\xf8\x15\x65\x25\x23\x1c\x81\x08\x34\xb6\x50\x7a\x8c\x80\x24\xe7\xfe\x43\x38\xf5\x26\xe7\x52\xe1\xa6\x2e\xc7\x1e\xf6\x35\x02\x73\x39\x95\xc0\xdf\x09\xe1\xe2\xf1\x93\xef\x9e\xbc\x79\x22\xf7\xfc\x52\xde\xf7\xb7\xcf\x1e\x3f\xe5\xed\x4d\xd6\x6d\x09\x8f\x9d\x40\x40\x4e\x81\xb4\xf5\x1b\x5c\x89\xda\x2a\xc8\x50\x00\xec\xb2\x9b\x75\x43\x06\xde\x49\x2d\xaa\xaa\xaa\x3e\x0f\xf3\x1a\x14\xc5\xb2\xe4\x55\x8b\x59\x55\x9c\xd3\xa6\x2a\x4e\x6a\x9c\xf2\x41\xd4\x82\xb4\xb3\xd0\x12\xd6\x74\x3f\x51\x71\x7d\xfe\x40\x55\xed\x36\xac\x12\xc3\x36\x5f\x83\xb1\xaf\xa2\x25\xb7\xcd\x4b\x06\xe5\xd8\xc2\x39\x84\x96\x75\x9b\x92\xc6\x95\x23\x42\x28\x72\xf5\xb8\xa9\x7f\xfe\xe1\xd5\x77\xdf\xa9\xd2\x06\xbf\x3f\xfd\xc3\xff\x3a\xd2\x08\xa7\x24\x0f\xc9\xea\x3f\xaf\x6f\xb1\x22\xcf\x06\xee\x7e\x9f\x13\x31\x64\x55\x85\x4b\x21\x1e\xed\x27\xf4\x3d\x81\xe2\xa4\x25\x85\x54\x41\x1d\x11\x25\xc5\xab\x35\xc2\xca\x9b\x86\xea\xda\x6d\x02\xf5\x26\x0d\xac\xe7\xde\x92\x1c\xcb\xfb\xc3\x13\xf0\xaa\x53\x5c\xa7\x27\xb0\x3a\x5d\x23\x29\x27\xad\x1c\xdb\x91\x58\x84\x8b\x44\x18\x7a\xaf\x91\x05\x6d\x6c\x88\x3f\x9d\x18\xf0\x9f\xb4\x27\x02\x12\x32\x96\x72\xf4\x4e\x2d\x64\xb5\x46\x08\xb7\x27\x95\xd0\x6a\xa8\xce\xee\xd5\xa4\x5b\x31\x5d\x89\x95\x48\x8e\xb1\xeb\x51\x29\x30\xc5\xc5\x9c\x36\xdd\xff\xfc\xb7\x6f\xfe\xe7\xbf\x3d\xae\x0a\xeb\x20\x91\x9a\xa0\xad\xaf\x60\x3b\xe9\x11\x6e\x7b\x1c\x8a\x5e\xf1\x35\xa6\xb2\xf1\x6a\x83\xdf\xeb\xdd\x66\x43\x3a\x2d\xab\xbb\x1a\xb1\x13\xd7\x42\x9b\x01\xa2\x16\x4a\x08\xf4\x4d\x04\x25\xd7\x56\x23\x9b\xbe\x17\x0c\x71\xc6\x13\x1b\xda\x58\x69\x50\x75\x26\x4f\xa2\x6c\x64\x6c\xd7\xcd\x63\x90\x51\x49\xf3\x5c\x59\x66\xec\x84\x27\xda\x07\x96\x28\x1f\xd8\xe9\x1f\x4e\xcf\x96\xc1\x44\x06\xba\xfe\xb2\xc5\xb5\xf2\xae\x9c\xfe\xe1\xf4\x5f\xc3\xc6\xa1\x4a\x3f\x68\xf9\x87\xb0\x65\xa0\xb4\x0f\x1a\xfe\xbf\x61\xc3\x40\x1f\xaf\x1a\x1a\x07\x4d\x29\x93\xfd\xb1\xfa\xb7\xd3\xd3\x10\x74\x9e\xbe\x1d\xda\xf7\xc1\x5b\xfd\xb1\x7a\x83\xed\x36\x25\x73\xc7\xff\xb1\xfa\xfd\xe9\xe9\x7c\x4e\xbe\xfe\xd7\xd3\xd3\xfd\xfe\x5f\x4f\xff\x20\x19\x7f\xf9\x91\xde\x9d\xd4\x47\x7f\xf8\xfd\xef\x55\x2b\x49\xae\x43\x04\x61\x36\x3f\xa2\x3c\xf2\xf5\xc0\xd3\xcd\x08\x36\x05\xc2\x57\xd5\xfd\x8e\x6f\x97\x04\x2b\x89\x71\x29\x7a\x7c\x5d\xb5\x0b\x4f\xad\xab\x7b\x34\xe7\xac\x3e\x57\x5a\x58\x50\x4b\x69\xe6\xbe\xbc\x8e\x3d\xbf\x48\x24\x76\x81\x62\xea\x5a\x5e\x7b\xf7\xc6\xf1\x6a\x49\xf0\x6d\x7d\xb7\x6d\xeb\x46\xc9\xe0\x29\x6f\x33\x54\x12\x7c\x05\x67\x62\xd8\xbf\x91\x5d\x4d\x7f\x10\xc3\xaf\x7b\x54\x4e\xea\xed\x7b\x14\x9b\x12\x23\x2e\x70\x5b\x3a\x0e\x54\x2f\x14\x53\xd4\x97\x2d\xe6\x58\xe0\x2b\x34\x51\xae\x67\x29\x97\x6e\x05\x60\xbf\x83\xd6\x57\x84\x54\x0c\x2b\x7d\x15\x24\xa1\xd5\x1d\x2a\x77\x10\xd4\xa3\xa5\x44\x11\x1a\x25\xe6\xba\x5e\x74\x0a\x45\x82\x82\x62\x6e\xb2\xb9\x45\x6c\xb2\x8b\x90\xbf\xae\xd0\x44\x6d\x01\xdf\x69\xdf\x5c\x98\x05\x91\x4d\xf0\xb5\x9a\xb2\xdf\xf5\x51\x03\x0a\x34\x09\xd4\x3e\x15\xd7\x04\x43\x3b\xc2\x85\x94\x42\xd8\x3d\x7a\x43\x7e\x16\xae\xa2\x46\x49\x70\x6b\xe7\x4a\xf2\x73\x15\x30\xd7\x76\x71\x09\x8c\xc9\x35\xea\x71\xf1\xf8\xf5\x72\xfa\xea\xc9\xeb\x37\x5a\x41\xf6\x3f\xe4\x1b\x5d\x2c\x58\xb4\xd3\xe2\x84\x48\x46\x44\x3e\xd4\x18\x1a\x1c\x20\xa5\x02\x55\x6c\x0e\x34\x64\xb9\x96\x90\xbd\x72\x18\x8d\x00\xed\xa7\x4d\x4b\x3a\xb0\x16\x76\x84\xdc\x68\xdf\x41\x53\xbd\x98\xb2\xe9\x5d\xbb\xe3\xd3\xfa\xf6\xd6\x85\x21\xb4\x1f\x08\xe7\xb4\x01\x4b\xed\x07\x5a\x4f\xff\xab\x6e\x9a\x97\xfc\xa5\x7e\xfa\xba\x66\xcd\xdb\xf6\xe7\x3f\x41\xec\x42\xf7\x5f\x50\x67\xf2\x9a\x4c\x8d\x46\x42\x9b\xfb\xce\x0b\x34\x61\x6e\xe6\xfe\x29\x4c\x08\xfc\x70\xb0\x54\x48\x45\xa9\x83\x9c\xcc\x75\x59\x2a\x3d\x24\x31\x38\xfe\x4f\x08\xb6\xd0\x5b\x14\xcc\x3b\x4f\xaa\x52\x74\x87\xa0\x65\xfc\x81\x81\xd7\x82\x76\x4f\xeb\x4e\x7c\x03\xca\x1c\xfd\xad\xbf\xcf\xf2\x5b\xf5\x34\x7c\xd8\x8f\x9a\xb4\x8c\x23\x4d\xdd\x75\xf4\x1d\x2b\x23\xda\x89\x25\xb7\x28\x49\xa8\xe6\xeb\x87\x3e\xc6\x5a\xeb\xa8\x3c\x8c\x6d\x30\x0f\x3b\xe7\x46\xad\x19\xf5\xdf\x63\xfb\x06\x33\xc9\x5b\xea\x3f\xf6\xfb\xd2\x7d\xa2\x0c\x6b\x92\xe7\x9f\xcf\x41\xf2\x02\x26\x15\xbc\x0a\x6c\x34\x7f\xde\xd0\xf6\xd7\xae\x65\x0f\xa7\x9b\x6b\x79\x6e\x45\xb5\x13\x57\x0f\xfe\x57\x31\xb1\x9d\xaf\x0a\xfd\xe5\x03\xd9\x5f\xb1\xae\xa8\xbe\xe5\xca\xa1\x67\xb5\xb7\x57\xd7\x5a\x6c\x44\x11\x4f\xaa\x34\x80\x60\xfc\x2b\x94\xed\x8d\xa8\xa9\xfd\x2c\x2a\xa1\x95\x9b\x6e\x11\x04\x16\x01\x01\xb7\x50\x4c\x3a\xad\x4e\x34\x5d\x68\xa3\xe2\xc1\xc5\x39\xfd\xe3\xe2\x2d\xa4\xda\x7d\x4d\x58\x13\x04\x40\x87\x2a\x53\xa3\x70\x1e\xf2\x6f\x9e\x3a\x57\x72\xc1\x1a\x89\x94\x9a\xb8\xe4\xd8\x7e\xba\xe2\x6b\x55\xe3\xb1\x37\x60\x41\xf2\xf0\x55\x0e\xff\x24\x5f\xcb\xe5\x33\x84\xb9\x3e\x16\xa1\xec\x04\xb4\xe8\x28\x5c\x0f\x8d\x82\x89\xc6\x5c\x4d\x53\xc9\x37\x9b\x76\x0b\x81\x63\x07\x5b\x2b\xb7\x79\x89\xb6\x91\xf7\xbb\xa6\x28\xa0\x1f\x26\xe0\xcc\xfc\xd5\xff\xbd\x16\xe2\xb6\x8b\x9c\xe1\x91\xe0\x77\x16\x5c\x27\xc5\x57\x5f\x81\x1f\xbc\xb6\x16\x30\x74\x3f\x20\x43\x7f\x69\x77\xd3\x9a\x93\xe9\xae\xa3\xec\x9d\xe2\x23\xa6\x8f\x6b\x51\x4f\x3f\x52\x71\x3d\x65\xed\x54\x4e\x69\x48\x71\xd5\x8d\xb0\x98\x82\x97\xf7\x47\xba\xdd\x4e\x6b\x21\xc8\xcd\xad\x90\x44\x69\xd7\x11\x20\x48\xf0\x69\x7b\x05\xbf\x0d\xe8\xa6\x7a\xa9\x78\xfa\xf1\x9a\x6e\xae\xa7\x54\x51\x77\xa5\xb2\xdd\x71\xd2\x4c\xaf\x34\xe9\xd3\xe5\xb6\xbd\x5e\xc0\xa1\x5c\x01\x6a\xfa\xfd\x96\x48\x06\xb3\x23\xc2\x0e\xf5\xd3\x35\x15\x64\x4b\x3b\x31\xbd\xd5\x36\x3f\xe8\xcb\xcc\xd9\x53\x07\x2f\xfe\xda\x2d\xdc\x8c\x00\x12\xcb\x69\x71\xc2\x8c\xa7\x93\x73\x9f\x26\x3d\x1e\xde\xb5\x89\x3b\x80\x80\xd5\x4e\xf8\xbe\xf7\xc4\x18\x69\x38\xba\xf7\xbc\xb1\xd3\x8c\xfe\x90\x06\x5a\xe5\xe6\xc0\x3d\x9a\xcf\xe7\x46\x84\x38\x37\x3f\x96\x2b\x63\x93\x29\x8a\x13\x82\xb5\x65\xeb\xcd\x35\x99\xbe\xad\x37\xef\x09\x6b\xb4\x2b\x7e\x43\x1a\xb5\xb3\x35\xd3\x3e\x2d\xc6\xde\x55\x14\x27\xbc\x5f\xf7\x38\x27\x63\xe4\x94\x7c\x90\x71\x29\xa2\x5f\xfb\x7d\x01\x29\x8b\xa6\x8f\xf4\x63\x49\x33\x0a\xab\x30\xaa\xbc\x1a\x3e\x55\x55\xb5\x72\x3d\xa6\x4a\xf7\xbf\x9d\x9e\x17\xab\x97\x37\x54\x08\xd2\x4c\x95\xe8\x7c\x37\xfd\xf6\xcd\xf3\xef\xd6\xc5\x92\xe3\x55\xe1\x61\xa8\xb1\xcf\x15\x27\x25\xd3\xb6\x18\xb0\xcc\x31\x38\xe2\x27\xc5\x54\x8d\x47\x9a\x69\x2d\x99\x15\x5c\x7c\xaf\xf8\xd6\x69\x09\x61\xb5\xa8\xc0\x74\xad\x55\x00\xff\xc9\xe4\x45\xe9\x94\xd1\x89\x1d\xbe\x87\x62\x97\xc4\xd9\x1a\xb5\x72\x4b\xf9\x76\x9a\xbf\x2a\x8e\xdc\x5e\x07\x66\xf3\x43\xbe\x42\x1f\x08\xef\xa8\xa4\xd5\xff\x20\xc7\x6b\xf7\xa0\xf8\xd7\xc5\xd9\xef\x17\xa7\x45\x66\x82\x9b\x9a\xd5\xfc\xee\xc1\x15\xa9\xc5\x8e\x93\xee\x2b\xfd\x99\x7d\xf0\x4f\x98\xf1\xfd\xeb\x8b\xe7\xdf\x7f\xf7\xe4\xf2\xe9\x93\x8b\x37\x3f\xbc\x7a\x72\xf9\xf4\xbb\x8b\x3f\x29\xcf\xe9\x57\x4f\x1e\xbd\x7c\xf5\xf8\xf2\xf1\xc5\x9b\x8b\xcb\x27\xaf\x5e\xbd\x7c\xf5\x7a\xf8\xfc\xf5\x9b\x8b\x37\x4f\x74\x9d\xc9\xe3\x96\x7c\xc0\x8f\xeb\x20\x84\x8e\x76\x46\x36\xe7\xbe\x4c\x06\x19\xbf\xbe\xbb\x79\xdb\x6e\xe7\xf3\xa2\x83\x1f\xf1\x8b\x05\x15\xf2\xe4\xb6\xfc\x3c\x15\x4b\xa6\x2b\x51\xf5\x49\xd1\x78\x3e\x1f\x19\x0e\x6e\xfe\x4e\xf0\xdd\x46\xb4\xbc\xaa\x2a\xfb\x7c\x66\x7e\x3b\x2d\xde\xb9\x99\xdb\xd2\x0e\x88\x24\x25\xfc\x8c\xdd\x1f\x6c\x59\x15\x3e\x53\xdb\x5b\x91\x45\x02\x19\x2a\xb2\xd0\x7f\xbe\x0e\x3d\xaf\x1c\x31\xad\x4a\xcf\x37\xc3\xae\x19\xc8\x8b\xa4\x2e\x4f\x5e\xfc\x78\xee\x35\x58\xf2\xd2\x7f\x05\x11\x9c\x90\x19\xa4\x0a\xbe\xf0\xff\x58\xde\xf7\x49\x97\xdb\x59\x39\x63\x8b\x27\x2f\x2e\xbe\xf9\xee\xc9\xe5\xcb\xef\xdf\x3c\x7b\xf9\xe2\xe2\x3b\x33\xf9\xd7\xfb\xbd\xee\x16\x12\xad\xeb\x12\xad\x31\xb7\x6a\x4d\xb9\x98\xd9\x65\x82\x0b\xa6\x59\x72\xab\x3d\x5b\x69\xd9\xa6\xa0\x03\x6e\x8c\x09\xa0\x19\xdf\x55\xf9\xd9\x10\xd2\xf2\xab\x04\xfc\x8d\xcb\x6a\xfc\x11\x6c\x59\xfc\x8d\xda\xc7\x5d\xe6\xd8\x81\x72\x3a\x93\x16\x60\xc4\xd5\x7f\xf4\x30\xa6\x3e\x3d\xec\x41\x44\x16\xb5\x10\x81\xc4\xce\x52\x65\xdd\xce\x4b\x56\x11\x4c\x34\x8a\xa1\x25\xab\xd8\x7e\x7f\xdf\x6b\x73\xc3\x3d\x08\x2a\x04\xd3\xee\x42\x08\x4e\xdf\xee\x04\x78\x39\xbe\xa7\xac\x59\x16\xb5\x79\x54\xe0\x56\x8b\x41\xcc\x7a\x36\x44\xa6\xf0\xfb\xc0\x31\xd2\x5e\x41\x8a\xb1\xa5\x4c\x10\xce\xea\xed\x73\x09\xbc\x38\x7e\x2b\xf4\x86\x58\x70\xd0\x66\x4b\xfc\x7c\xda\x4a\x6a\xb3\xb8\xae\x61\x6e\x25\x07\xcf\x14\x82\xce\x81\x3b\xb5\xd3\xfd\x51\x9e\x47\x29\xc3\xa5\xb9\x93\x04\xcd\xb0\xa8\x09\x9f\x9e\x87\x7f\x2e\xa4\xd0\x70\xa7\xd4\x0d\xb6\xca\x31\x5a\x86\x8d\x7a\xc5\x1b\x33\x08\x3a\xed\x82\x85\x63\x95\x10\x9a\x27\xd0\x70\x3e\x4f\x40\x63\x71\xe9\x16\x6c\xd6\x55\x12\x34\xab\x2a\x11\x58\x53\x25\x43\xae\x63\x00\xa4\xe0\x0f\x7f\x13\x88\xd1\xe6\xe4\xa6\xfd\x20\x21\xa0\x6c\x57\x97\x37\x35\x7f\xaf\xb5\x85\x9a\xfb\xb8\xe8\x1e\x6d\x49\xcd\x4a\x77\xed\x27\xe6\xd1\x11\xf1\x98\x72\x71\x67\x01\xab\xe3\xce\x11\xd4\x96\x2f\x29\x84\x39\xbe\x35\x76\xbe\x94\x6f\x13\xa6\x93\x14\xfa\xf1\x8a\x60\x6a\xd1\xaf\xe4\x95\xc0\xb4\x22\x50\x26\x2d\xac\x0f\x4d\xe7\xf3\x92\x56\xcc\xa9\x99\x9f\x1b\x43\x50\x49\x6d\x1d\x39\x85\xb0\x14\xd3\xee\x15\xd9\x82\x68\xd7\x5d\xd3\x5b\x89\xb3\x06\x45\x79\xc5\xa1\x12\xbe\xc2\x61\x3b\xe3\x02\xb3\xfa\x86\x2c\x0b\x6d\xaa\x9c\xca\x27\xef\x89\x0a\x66\x3a\x1a\xa9\x47\xe0\xf7\x8e\x08\x97\x80\x20\x8d\x17\x47\x40\xdf\xeb\x02\x0b\xb3\xa3\xe3\x03\x99\x1d\x6a\x61\x87\xae\x95\x49\x38\xda\x9f\xe1\xbe\x40\x10\x91\x47\x17\xb0\xa8\x04\x80\x6d\xb0\x2d\x20\x76\xa7\xb7\x85\xd8\x24\xae\x86\x8e\x98\x4d\x10\x89\x0d\x52\x1b\xa2\x27\x68\xb6\xe3\xdb\xba\x9b\xaa\xbf\xbf\xf0\x66\x98\x34\x12\xe9\xad\x38\x48\x9d\xb8\xdd\x12\xdb\x91\xdc\x10\x1e\x75\x6d\x80\xcf\xbf\x5c\x94\xa3\xba\x61\x0e\xb0\x73\xf1\x35\x74\x7c\x98\xd9\xaf\xe8\x93\x2f\xef\x8b\xa3\x5d\xf1\x65\xe3\x51\x0f\x7c\xef\xe4\x1e\xd9\xa5\xfd\x62\xb4\x5f\x8b\x80\x47\xf6\xaa\xdb\x7f\xd1\x68\x01\x40\xb5\x7c\xac\x80\xda\xdd\xdf\xac\xb4\xe5\xbc\x1b\x92\x8c\xd0\xc8\x24\x7d\x85\x54\x98\x35\xc7\x52\x97\x31\x97\xa2\xa4\xc7\xbf\x7a\x43\x7e\x16\xbc\xde\x08\xd9\x75\xd3\x10\xed\x1a\xd6\xe9\xe0\x46\x15\xd5\xd8\x72\x82\x25\x93\xd4\x4b\x52\x03\x81\xb5\x1e\x7d\xca\x70\x0f\x76\xa9\x85\x8a\x5e\x80\xae\xae\xeb\xce\x3a\x20\xea\x81\x94\x9a\x18\x52\x40\x14\x0d\xc9\x7d\xf5\xd8\xbd\x89\xbf\x53\x8a\x69\x35\x31\xff\x0a\xe6\x46\x39\xed\x2f\x5d\xb2\xdd\x2e\x16\xf8\x90\x8b\x0f\x97\xdd\x5a\x23\x30\x6b\xed\xdc\xd5\xe0\xaf\x6f\xc9\x86\x5e\x51\xd2\x94\x0c\xa1\x04\x98\x6d\x15\x2e\xed\x31\xe0\xaf\xfe\x99\x5d\x81\xf3\x8c\xcb\x43\x87\xa9\x74\xd7\xf6\x98\x96\x4c\xd5\x34\xb2\x95\x34\x61\xf0\x77\x44\x3c\xaf\x6f\x6f\x49\xf3\x67\x72\x57\xc2\xdc\xb1\x52\xff\xa2\x49\x27\xc1\x29\x9f\x68\x90\x0e\xf7\x11\x4a\xad\x66\xde\xe9\xce\xf8\x42\x5e\x44\xd8\xdb\x5a\x84\x70\x7d\x5e\x8a\x55\xb7\xae\x6a\x88\x40\x58\xe8\x6b\x6c\x71\xdb\x6e\xef\x6e\x5a\x7e\x7b\x4d\x37\x7a\x48\xfb\xd5\xf7\xee\x95\xca\x98\xa3\x4c\xea\x4b\xe8\x06\xee\x31\xf0\x7f\x6d\x0d\xd7\x67\x3f\x34\x28\x1a\x5c\xf5\x10\xac\x88\x47\x1a\x65\xf6\xd6\x87\x26\x2c\x0f\x19\xc7\x8e\x31\x38\xd2\x63\xe0\x48\x3f\x07\x8e\x4c\xc2\x91\xae\x2b\xe6\x45\xa2\x27\x5d\xac\x14\xd7\x6a\x96\xf9\xb4\xe5\x84\xbe\x63\x72\xa6\xca\xad\x48\x76\x82\x7e\xe9\x46\x50\xbd\x11\xee\xa8\x8c\x3b\xe5\x7d\x81\x83\x32\x35\x5f\xe7\x4e\x49\xe0\x76\xf8\xcf\xd9\x23\x00\x8c\xe5\x14\x4b\x86\xc1\x73\x11\x38\x12\xe5\xf4\x7f\xe8\x14\x9f\x67\x30\xda\xe3\x94\x2c\xdd\x8a\xe0\x70\xc1\x1a\xb9\x49\xae\xaf\xc1\xf1\xd0\x9d\x5c\x74\x5e\x6b\x73\x42\xf0\x78\xb3\xb1\xab\x23\xa6\xac\x0a\x3e\x3e\x60\xc0\xfb\xd0\x00\x45\x9d\xa5\x89\x58\xb1\xb5\xbe\xae\x2e\x4a\x8a\x16\x37\xf5\x6d\xc2\xb5\xe1\x9e\x36\x4b\x02\xae\x6a\xc0\x04\x3b\x07\x36\x70\x06\xcd\xc2\x69\xf4\xa6\x1b\xc1\x0c\x76\x0c\x66\xb0\xcf\xc3\x0c\xb6\xb6\xe3\x2b\x15\xbb\xdd\x3c\x6f\x77\x61\x27\xb2\x0d\x22\x4e\xdb\xcf\x62\x63\xa0\x2b\x14\xa5\x62\x16\xb4\x5c\x42\x9f\x91\x8f\x53\x9d\xb0\xc4\x78\x4a\x69\x37\x73\x16\x94\x82\x51\x7a\x23\xb6\x6a\xd7\x50\xcd\x26\x4b\x68\x26\x87\x08\x4d\x8d\x05\xee\x10\xa6\xab\x76\x5d\x75\x46\x36\xa6\x3d\xce\x7d\x92\x30\x2f\xd0\xab\xd2\x63\x54\xd5\xc6\x50\xd6\xb8\xf2\x28\xe0\x36\x48\x19\x64\xc2\x7c\x0a\x8e\x55\x12\xfa\x8e\x23\xf1\x6f\xc0\xb6\xa2\x2a\xed\x81\x76\xa5\x82\x06\x63\xbe\xa4\x89\xdd\x6d\x31\xd5\x3b\xeb\xb3\x21\x68\x52\xcf\xe7\xca\x53\x73\xca\x56\xf5\xba\xef\x7b\x7c\x5d\x77\x66\x89\x17\xdb\x8f\xf5\x9d\x3e\x93\x09\xb3\x82\xf2\x05\x15\x82\x3b\x76\xc5\x32\x5f\xf3\x79\x51\xc3\xd7\x72\xf1\x62\x41\x74\x8f\xd0\x7d\x9a\x80\xe4\x06\xc8\xcc\x47\xc7\x27\x8c\x4c\x61\xbf\xe7\xf3\x79\xa1\xd4\x28\x9d\xda\x03\xbb\xf2\x70\x1e\xcf\x0e\xcd\x21\xbb\xc8\xb2\xa0\x8d\x5e\xa2\xed\x7b\xbf\x2f\x68\x13\x3d\x43\x83\x01\x43\x8a\xf7\x79\x03\x3f\xa8\x59\x03\x66\xab\xe4\x14\xec\xdb\xe1\x5c\xf2\x77\xd8\x27\x4d\x64\x56\x0a\x55\xb1\xd4\x8d\xeb\xb6\x1a\xa9\x35\xe7\x78\xdb\x7f\xc4\x76\x7b\xa8\xde\x63\xef\xb3\xdc\xd8\xa0\x4c\x83\x76\x45\x00\x6b\xb1\xca\xe5\x4b\x5b\xef\xf7\x62\x45\xd6\x92\xf0\xa5\x25\x8d\xd1\xf8\x02\xa7\x54\x20\xf5\xe6\x3a\x38\xaf\x5e\x2a\x8a\x16\xdd\x93\x51\x29\x81\x23\x89\x0f\x46\x7e\x85\x4c\x5e\xf2\xa8\xcf\xe7\x74\x20\xff\xb8\x24\x9a\x1c\x33\xdc\x22\x1c\x52\xa9\xfc\x87\x7e\x12\x4d\xf5\xa9\x14\x52\xd9\x70\xdd\xe9\x4b\xcc\xad\xdb\xf9\x11\x70\x5c\x48\xb1\x71\xc1\xbd\x75\x77\x0b\xf0\xd1\x02\xbf\x8d\xc2\xd0\x40\x97\xc7\xcc\x5d\x05\xd4\x5e\x05\xaa\xfa\x08\x0d\xaa\x8f\x80\xdc\x80\x77\x15\x5d\xd5\x6b\x6c\xdc\x28\x9c\xf5\xda\x6e\x91\x07\x70\xc9\x5f\xee\x10\xde\x54\x5b\x18\x1c\x5f\x55\x5b\x63\x18\x05\x6f\x41\x6e\xff\xaa\xdc\xcf\xfd\x7e\xb5\xc6\xee\x4f\xe5\xa3\xbb\x41\xf8\x0a\x95\x9d\xd7\x4c\xf9\x3b\x6b\x15\x72\x87\xaf\xd0\xa4\x5d\xd5\xeb\x4a\xf2\x07\x1b\xcb\x1f\x6c\xe0\x4e\x50\x59\x64\xaf\x2b\x13\x8c\xa4\xfd\xdd\xba\x31\x78\xe1\x6b\x10\x12\x72\x3b\xf6\x25\xb7\x02\xb6\xc1\xdc\x43\x47\x40\x94\xaa\xca\x72\x00\xd1\x9d\x94\xa2\x3e\x0b\xa2\x1d\xc2\x3b\x54\xb6\x39\x88\xb6\x78\x87\x74\xfa\x10\x1b\x72\xb3\xec\x2c\x60\x3b\x0d\xd8\xa3\x40\xb9\x05\x50\x8e\x2e\x2c\x1b\x31\x23\x87\x99\x88\xb4\x6c\x52\x32\xe3\x71\x65\xb3\x14\xc2\x85\x2d\xef\x6e\xe6\x39\x1c\x85\xb7\x3a\x43\x4e\xbd\x5a\x52\xb9\x77\xbb\xed\x16\x9c\x85\x23\x32\x03\x4a\x13\x17\x4c\xcf\xd3\x59\xc9\x5c\x9a\x30\x9d\xe2\x2b\x7c\xd0\xab\x62\x61\x2e\xaf\x43\x2e\xad\x98\xf5\x34\xa2\xdd\x8b\x96\x11\x30\x38\xcc\x20\xeb\xce\xa2\xde\x6e\xdb\x8f\x2f\xe4\x2c\x8d\xaf\xf3\x6e\xbb\x35\x15\xbd\xb4\xe2\x58\xaf\xb6\x78\xdb\xb6\x5b\x52\x33\xa0\xd5\xe7\x64\xe9\x34\xcc\x15\x3f\xff\xea\xff\x96\x82\xef\xc8\x5e\xec\xcf\xd0\xef\xbe\xa2\xc6\x47\x68\x59\xa8\x64\x4f\x5a\x81\x72\xa6\x1c\x9c\x0f\xa4\x3f\x3b\x38\xd7\x73\x39\xc9\xe5\x37\x6a\x3a\x4a\x7d\x8b\xe9\x41\x48\xd8\xab\xc3\x2c\x4b\x32\x7d\x6e\x0d\xc2\x77\xb7\xd0\x91\xb3\x27\xf6\x5e\x51\x81\x22\xf3\xb9\x49\xb9\xfd\xe0\xdf\x60\xd9\x25\x3f\xa9\xfe\x15\x4b\x32\xf7\x58\x25\x13\xea\xa0\xf4\xd3\x29\xe6\xe8\xa4\x58\x16\x27\xe6\x01\x47\x48\xf9\x08\xab\x66\xc6\x82\xe3\x41\x47\x9c\x7b\xaf\x97\x2a\x13\x38\x39\xd7\x1b\x9d\x84\x98\x33\xa9\xfb\x71\xf2\xb2\x87\xf9\x7c\x46\xbb\x17\xf5\x0b\xc8\x58\xba\x10\xed\xb3\xd7\x2f\xd5\x55\x58\x22\xe3\x8b\x30\xf1\x33\x2a\xb9\x9e\xaa\x8a\x28\x63\xfb\xd9\x57\xa7\xea\xc7\x83\xb3\xaf\x4e\x7b\xc5\xaa\x1f\x09\x60\x83\x2e\x10\xb8\xac\x8c\xcc\x72\x29\xb0\x67\x6d\x29\x2a\x95\x3b\xac\x24\x08\x9d\x8b\xd1\xe5\x7d\x66\x6f\xbd\xa4\x61\x87\xe7\x9a\x46\x36\xd5\xb1\x86\x96\xb2\x39\x7c\xfe\xc7\x2a\x0d\xab\x42\xd3\x37\xbc\x66\xdd\x55\xcb\x6f\x2a\x86\xc9\x42\xee\x92\x7b\x42\xb1\x0a\x0a\x8e\x09\x04\x78\x50\xaa\x05\xba\xc6\x35\x26\x9a\xb1\x71\xcf\x3a\x4c\x16\xee\x2f\x8e\x35\xb1\xfa\xb6\x76\xe6\xe0\x97\x81\x7c\x21\xe5\x0e\xe0\x67\xab\xec\xaa\xc0\x32\x89\x9d\xf1\xb8\x2b\x90\xca\x12\x0f\x2c\x2a\xda\xef\x83\x66\x01\x65\xfe\xe6\x4e\xf6\x1f\xb6\xff\x1c\xbb\xca\xe4\x80\xd6\xfa\x80\x71\xc5\x6b\xe9\x7e\x8e\x3b\xc8\x7c\x39\x23\xca\xa7\x99\x12\xc4\xe1\xc4\x43\xde\x6a\xd2\xb9\x87\xe2\x04\x43\x59\x60\x28\x3f\xdd\xcf\xf1\x55\xf8\x32\x49\x89\x68\xc5\x07\x49\x89\xdc\x15\xfe\xb8\xdd\x80\xb5\xfe\x5b\xb2\xbd\x25\x3c\xf6\x98\xf5\x9c\x6a\x14\xfe\x49\xec\x7a\x79\x65\x5c\x87\x91\x76\x2c\x8e\xf8\x9d\x57\x3a\xeb\x97\xea\xd3\xa6\x2d\x48\xa7\x59\x35\x5d\x79\xa5\x56\x1c\x1f\xab\x5e\x5a\x66\x56\x15\x5c\x09\x1e\xba\xaa\x2b\xac\x52\x2f\x56\x7c\x3d\x81\xf4\x10\xe3\xb3\x62\xa8\x37\xb3\xef\x13\x93\xb2\xac\x94\x5f\x8e\xd2\x4e\x4c\x6b\x58\x5c\xb3\x84\xaa\xc5\xbd\x54\x3a\x97\xf1\xe9\xd4\x68\xa2\xfd\x83\x3a\x9b\xb4\xba\x93\x53\xb4\x5c\x20\xf5\x3c\x57\xfd\x6e\x1c\x25\x78\x5c\x8b\x3a\xb1\x8f\x2e\xc9\xb4\xa4\x40\x2a\x7e\xd1\x68\x43\x9e\xf2\xf6\x46\x3b\x4f\x82\x76\x47\x31\x61\x38\x1a\xc2\x9f\x69\xe2\xce\xa0\x57\xa5\x38\xae\xdf\x22\xd3\xa0\xc0\x33\x4f\x77\x73\x29\x85\x35\xc3\xfe\x09\x94\xe2\x95\x5c\xe3\x1b\xd7\x30\x0c\x86\x4f\xa9\x81\x7c\x86\x91\x63\x82\x00\x01\x7a\x2c\xa1\xad\x27\x33\x62\xf1\xce\x9c\x19\x39\x30\x31\x29\xc7\x23\xb8\x8d\x7a\x00\x8f\xf7\xca\x91\xe7\x51\xec\xa5\xce\x1f\xf6\x6a\xd2\x68\x78\xca\x75\xcd\xfa\xab\xf8\x35\xeb\x8f\xe3\x12\x87\x60\x2d\x0d\xd9\xfb\xaa\xcb\xae\x1b\x33\x2f\x31\x8b\x32\x40\xab\x2f\x24\x77\x26\x05\x73\xa7\x1d\x8e\x31\x83\x2a\x85\x6b\x64\x9b\x8b\x54\x6c\x36\x8a\xc3\xef\x7b\x45\xd7\x52\x28\x58\x91\x75\xfc\x58\xcb\xd5\x7a\xfe\x19\xc1\xe3\x18\xda\xe5\xc2\x22\x06\x07\x33\x75\xa2\x2c\x9d\xc2\xff\x34\xf2\x95\x9c\x96\x4f\xc6\x06\xdb\xeb\x7f\x73\xf4\x0e\x07\xbc\x85\xd9\xe4\xb4\xf6\x85\xb8\x48\x3e\x9e\x52\xab\x92\x8c\x5a\xd5\x0f\xde\x89\x06\x5c\xb5\x6b\x43\x40\x87\x6f\x26\x80\x11\xc0\x6c\xc6\xcb\x2b\x6b\x90\x4b\x3c\x95\x4b\x94\xec\x2d\x76\x25\xca\x91\x2a\x25\xa8\xa2\x1e\x67\x1a\x24\x48\x6b\x79\x8a\xc5\xa2\xa3\xec\xdd\x6e\x5b\x73\xc8\x10\x57\x9e\xe2\x94\xeb\x0f\x92\x8c\x73\x6f\xe2\x36\xff\x4c\xee\x64\xd7\xf6\x6d\xae\x67\x2f\xf3\x1c\xf1\x89\x42\xb4\xb8\xf0\x6c\x86\xa1\xc7\x3f\xc8\xd9\x3d\x26\x9b\x6d\xcd\x49\xf3\xbc\xbe\xbd\x05\x96\x19\xfb\x9f\xa8\xca\x80\xc1\xd6\x1f\xd9\x47\xf0\x95\x75\x6d\xa2\x8d\x32\x65\xe9\xdd\x78\xd6\x68\xdf\x2c\x08\xf1\xf2\x9d\x0f\x8c\xf9\x11\x61\x37\x99\xe0\x53\x47\xa4\xb4\x37\x51\x80\xd5\x7e\xcb\x00\xdf\x95\x27\x5e\x98\x99\x41\x52\x45\xcb\xb9\xcb\x16\x3c\x80\x80\xc9\x80\x62\x7c\x1d\x9c\x77\x67\x96\x6f\x4f\x64\x0d\x3c\xe0\x29\x71\x4c\x07\xa3\x02\xf5\xb1\x64\x5e\x78\x17\x7e\x06\xe5\x4a\xe2\x67\x0a\x51\xcb\x17\xbd\x37\x7e\x0a\x02\xa1\x9a\x8c\x29\xc5\x8e\xb1\xe0\x5e\x6e\x6a\x66\xb5\xe7\x52\x10\x0f\xf0\x32\xa0\xe6\xd6\xa1\xb6\xad\x94\x57\x6e\xc9\xb5\x22\x4d\xfb\x44\x08\xb3\x53\xf2\xee\xa6\x5e\x12\x90\xb2\xc5\xcc\x28\x92\x4c\xae\xdf\x94\x01\xd0\x1a\xff\x6a\x9d\x45\xb3\xce\x98\x35\x63\x8b\x9e\x7f\xe7\xd4\xeb\xaa\xed\x3f\xdb\x71\x24\x84\x87\xb3\x64\x87\x0e\x1d\xb8\xad\xa8\x64\xfb\x94\x7e\x7e\x3e\x9f\x99\x9f\x4a\xe9\x4e\xbb\x17\xe4\xa3\xa2\x9b\xba\x68\x19\xdd\xef\x5b\x09\xda\xe0\x2c\xc4\x14\xd3\x02\x38\x09\x1d\x16\x40\x87\xc5\xd0\x09\x88\x2b\x0b\x1c\xcb\x02\x60\x69\xcf\x72\x53\xdb\x8c\xa2\x4e\xbb\x35\x8e\xe2\x1d\xf5\xf1\x8e\x36\x4b\xba\xa0\x4d\x3f\x89\x29\x7e\xbd\xd6\x2a\xcb\xae\xef\xfb\xcf\x74\x48\x50\x79\xeb\x5f\x47\x9f\x2a\x87\x09\x6f\x37\xac\x5d\x3f\xbc\x9d\xe8\xf1\x40\x6e\xc7\x81\xdc\x2a\x20\xe7\x6d\xcf\xed\x18\xf4\xad\xfb\x5d\x08\x7b\xc3\x74\xd4\x15\x5d\xa8\xfc\xa7\xa9\x1c\x02\xc4\xe1\x15\x49\xe1\x15\xa8\x70\x1c\xd7\xe2\x18\x16\x55\x12\xbf\xf6\x4b\xe2\xdf\x2b\x4d\x32\x5d\xed\xd6\x78\x33\x4e\x5b\xb6\xde\x1e\x4f\xba\xd5\x6e\xad\x11\x63\x23\x37\x7c\x2b\x37\xbc\x1f\x5e\xf1\xfe\x86\xdb\xfc\x27\xd4\xf3\xb2\x6b\x8f\x13\xd8\x8f\xd1\x53\x8c\xe6\x22\xcd\xca\xf3\x63\xee\xa3\x9f\xe6\x52\x8a\x19\xa4\x37\xf8\x35\x84\xfe\x3a\x08\x2d\x31\xda\xa3\x1b\xc2\xdf\x11\x29\x8a\x0e\x14\x02\xb7\x9c\xde\xd4\xfc\x4e\xf2\x37\x05\x6d\x0a\x0c\x2d\x1b\x3d\x3c\x25\xdd\x72\xa5\x2d\x7f\x6b\x1c\x5d\xa2\x63\x6c\x65\x56\xb5\xe5\x34\xfa\x92\xb9\xb4\x9d\x91\x26\x25\x4c\xe8\x74\x2d\x8e\x63\x5c\x91\xb5\x63\x3b\xa3\x4b\x02\x52\xde\x28\x37\xff\x89\x6c\x58\xb5\xbe\x9d\xb3\x94\x8f\x70\x6d\xef\x8e\x1e\x32\x48\xe2\x43\x22\x5b\x50\x85\x90\x1e\xa8\x42\x68\x3b\x73\x25\xd9\x4c\xb7\x99\xfb\x7a\xbc\x92\xe0\x98\x10\x38\xd6\x61\xb2\xe0\x61\x30\x39\x2f\x37\xe7\xa1\x8e\x32\x65\x04\x83\xee\x6c\x9b\x63\x3b\x4d\x96\x34\x0c\xba\xd4\x2d\x8e\xed\xf0\x40\x6f\xc7\x76\x95\xa8\xfe\x18\x6f\xc2\xe1\x4e\xf2\x15\x14\x6d\x5f\x7e\x95\xb8\x63\xba\xcc\x17\x49\x74\x4a\x04\xaf\xc9\x31\x5d\xe6\x0b\x36\x3a\xbe\xdf\x6b\x32\xde\x65\xef\x9d\xa4\x21\xf2\xa7\xf4\xb0\xc1\x40\xaf\x29\x7b\xe7\x72\x36\x65\x86\x38\x5a\x27\xf2\x25\x86\x88\x0e\xc9\xc1\xee\xe1\xfe\xfc\xa4\xde\x07\x67\xe6\xd7\x58\x42\x74\x8a\x7e\x85\x65\xfc\x8a\xdd\x07\x07\xee\x0b\xf7\x9d\x3a\x80\x87\x37\xa0\xfe\x70\x3c\xf8\x53\xe7\xf1\xcb\x8e\x90\x3a\x9e\x5f\x76\x04\xbf\xf1\x97\x46\xcf\xb0\x79\xf2\xda\x4d\x6b\x4b\xc3\x3c\x6a\xc0\x49\x41\xf5\xf3\x34\x26\xfc\xc2\x8e\xcf\x8e\xd1\xeb\x1a\x6e\x4e\xb1\x5f\x3a\x87\xe4\x6e\xbb\xc5\x46\x83\xbf\x5c\xad\x7b\x63\x07\xd0\x0a\x8b\xe7\x44\x98\xda\xd4\x52\xec\xe8\xa4\x10\x06\xa1\x51\x55\x87\x4c\x5f\xbb\x28\x8d\x5c\x09\x79\xe3\xb6\xd5\x4e\xf9\x8d\x6c\xaa\x9d\xf3\x1b\x51\xbe\x24\xd5\x16\x6f\xa0\x27\x6b\x3b\xd8\x28\x27\x65\xab\xa4\xbc\xf2\xd8\x7d\x6e\xd9\xfd\xeb\xea\x14\x37\x95\xad\x92\x78\xfd\x75\xf3\xf0\xda\xb0\xfc\xb7\xf8\xa6\xe2\xab\xeb\x35\xfe\x30\x9c\xce\x0d\xc2\xef\xaa\x0f\x6a\x3a\x77\xd5\x87\xc0\x8d\xe5\x0e\x95\xb7\x9e\x67\x4b\xe0\x99\x72\x8b\xef\xd0\xe4\x6a\x75\xbd\xae\xde\xf5\x7a\xe6\x57\x46\x89\x59\xe7\x15\x5d\x3a\x31\xa3\x14\x38\x7d\x2f\xb4\xa3\x94\x55\x08\xe7\xd4\xc2\x62\xb1\xa5\xec\x7d\x87\x8e\x56\x7b\xa9\xe6\xf8\x80\xaa\xcb\x53\xb0\xfc\x2a\xfa\x2d\x7c\x8c\x62\xcb\xd7\x6c\xd9\x49\xa6\x19\xf7\x55\x9c\xc9\xc6\x49\x06\x05\x5a\xbb\x82\x18\xed\x62\xd3\x12\xbe\x21\xcf\x1a\x04\xa6\x8a\xa3\x0c\x0a\x2e\x8b\xa6\x97\xeb\x7d\xc4\x88\xc0\x2b\x76\xd0\x80\x80\x3d\xb9\x80\xaf\x21\x5f\x28\x59\xc3\x6f\x29\xd7\xd2\x43\xa6\x82\x94\xc3\x4e\x64\x72\x1a\xb1\x25\x08\xd0\x6f\xd1\x46\x25\x0a\x69\xaa\x08\x30\xf2\x99\x0d\xf6\x4c\xd9\xac\x48\xa4\xac\x9b\xcf\x67\xa0\x3a\x3e\xd6\x9f\x00\x29\xef\x46\x71\x84\x69\x4f\xeb\xb5\xa5\xbc\xe3\xfc\xef\xe3\xf9\x1a\xa4\x75\x78\xe2\xc5\x89\x8c\x40\xd0\x27\xa5\x29\xe5\xbc\x42\xd5\xcf\xb7\x4a\x1c\x69\x84\x50\xf1\xe7\xbf\xc0\x16\xb1\xaa\xd7\x26\xac\x4a\x15\x7e\x84\x47\x93\x81\xbf\xba\xea\x0a\x75\x15\x4d\xf9\xb3\x9d\x5b\x0b\x45\x06\x7a\x25\x85\xcd\xc0\x3b\x7c\xff\x9e\xdc\x2d\x09\x36\x75\xb2\xbe\xad\xbb\xeb\xa5\x08\x28\x80\xbc\x22\x96\xb4\x87\xc4\xb8\x09\xc8\x9a\x9e\x9c\x79\xdd\x77\x75\xa5\xda\x63\x75\x16\xe0\xf7\x0e\x21\x79\xd9\x78\x77\xc0\xce\xde\x01\xc9\x05\x21\x73\x6f\x6c\xab\x53\xb8\x70\xf4\x0d\xb1\xfd\x7a\xf3\x70\x6b\x6e\x88\xab\x6a\xb7\xda\xae\x27\xdd\x6a\xeb\x99\x68\x0e\x00\xe0\xea\x13\x00\xd0\xdb\xc2\xaa\xca\x07\x54\xde\x55\xbb\xf4\x5d\x55\xed\x56\xd7\x72\x26\xd7\x39\x63\x91\x1e\xfe\x16\xf5\xad\x53\x38\xc9\x4f\x6f\x2c\xf2\x7c\x47\xd9\x7b\x8b\x34\x2a\xf9\x9f\x22\xf9\xf3\xb9\x67\xbb\x82\x27\xab\x1b\x8d\x35\x1f\xbc\x27\x0f\xcb\xb6\x6a\xf7\xfb\xfb\x1e\xa9\x47\xd5\x3d\x2c\x8a\x34\xcb\x0f\x7d\xdf\x1a\xeb\x66\xab\xed\x99\x9f\x64\x6c\xa2\x19\xd3\x52\xa0\xc8\x38\x70\xc6\x34\x29\x9e\x64\xf5\x91\x07\x8f\x1c\x99\x55\x55\xe9\x28\xf4\x31\x87\x0d\xf9\xb0\x53\xd4\x5a\x18\x6a\xad\x53\x6d\x4f\x85\xc9\xf6\x36\x7a\x03\x67\xd3\x62\xc7\xd7\x97\xf1\x57\x07\xd5\xb4\x75\x95\x9e\x52\x36\xa5\x88\x57\xc9\xb8\xa1\x16\x93\xe0\x56\x61\x72\x9e\xe3\x5e\x5a\x2d\x72\xc9\xf6\xe3\x0b\xab\x45\x08\x1f\xe9\xbc\x35\xec\x26\x8c\x52\x41\x08\x33\xe5\x18\x59\x2a\x13\xf1\x8a\x79\x70\x63\x6b\xa4\x42\x8c\xdc\x5a\x86\xe6\xa3\x44\xae\xba\xc8\xa5\x9f\xcf\xe7\x7c\x45\xe4\x9a\x4b\x51\xc9\x5f\x48\x45\x4d\x95\xa2\xd2\x11\x48\x83\x64\x07\x02\x92\x1d\x08\xa4\x1c\x47\x7c\x8b\x47\xb6\xda\x56\x6e\xf8\x99\xd8\xef\x67\x12\x29\xf6\x7b\x28\xa9\x2d\x7f\xfa\x81\x29\x97\x37\xbb\x4e\x7c\x7e\xf7\x72\xaa\x02\x56\xa7\xbc\x5c\xa3\xde\xd3\xc6\x82\x6c\x14\x29\x84\x29\xd9\xc4\xbb\xfe\x5e\x81\x51\x93\x07\x11\x4b\x7a\x7d\xca\xd1\x25\x5c\x46\x29\xd0\x7e\x9f\x30\x17\x09\x08\x5d\xb8\xa9\xd9\xdd\x9b\x56\x52\x6e\x49\xd2\xd9\x7e\xaf\x9f\x18\x22\xcf\x32\x06\xc3\xd4\x7d\x2a\xc9\xd8\x7c\x6e\x93\x9a\x3d\xf3\x62\xae\x68\x33\xa1\x40\x96\x46\x39\xc0\x8a\xda\x7c\x28\x59\xce\x4d\x80\x74\xb5\x18\x1a\x11\xc1\xea\x02\xe9\x68\x11\x1e\xa3\x2f\xd0\x41\xea\xc6\x3d\xf7\x7a\xf5\x23\x81\xa5\x3c\xb7\x4c\x5d\x7c\x5e\x7b\xdf\xf2\x43\x35\xd9\x1d\x94\x15\x48\x98\x39\x41\x40\x0b\x62\x67\xa1\x00\x2a\x3a\xd2\x4a\x9a\x37\x8c\xfa\xf6\x53\xfc\x0f\xb3\x81\xa6\x68\xd4\x27\x58\x46\xff\x11\xe6\x50\x2c\x59\x53\xb0\x6d\xfc\xaa\x36\xb5\x9c\x45\x13\x07\xcc\x12\x45\xe7\x62\xd5\xaa\x98\xe8\x25\xfc\xa2\xbf\x24\xc2\xfa\x1f\x65\xc6\x74\xe1\xc9\xb1\x3d\xf3\x9f\x64\xab\xc4\x0a\x76\x81\x1d\x37\x02\x91\xaf\x5c\xb2\xd2\x02\xb0\x7f\x31\x84\xe8\x55\xc9\x3d\x5e\x82\x83\xce\xc4\x01\x4e\xfe\xe5\x8a\x5b\xc0\xf5\xa8\x1e\x62\xe6\x24\x9b\x27\x2a\xbd\x66\xd0\x75\x32\xfe\x8c\x25\x32\x75\xb2\xf9\x9c\xe9\x04\x9d\x10\xbd\x02\x99\xa2\x07\x25\xa3\x51\x69\x1a\xe9\xf8\xfd\x71\xad\x82\x1c\x1f\x8b\x03\x4e\x75\x42\xd2\xb6\x43\x4e\x75\x62\x06\xa1\x05\x2e\x43\xf2\x4a\x58\x87\x3a\xf9\x1b\xdb\xa8\x56\x01\x62\xb2\x18\x63\xf6\xe2\x71\x23\x4e\xef\x97\x0d\x0d\x64\xf8\x08\x6f\x1b\x72\xac\x57\x8d\x6d\x28\x19\xf8\x4c\x03\x9f\xa8\x8e\xb1\x10\xa9\x52\x67\xf6\xdb\x65\x71\xe2\x89\xef\x61\x4a\xd0\xee\xb0\x91\x7a\x58\x4c\xf3\x17\x7b\x94\x67\x4d\xd3\x47\x1a\xaf\x7f\x1d\xfb\x74\xf6\x83\x54\x0c\xc6\x91\x0e\xfc\x34\x19\xc0\xd1\xe7\xad\xe1\x43\x17\x78\x85\x24\x59\x0a\x14\x65\xca\x4a\x61\x3e\x3a\x29\x20\xfb\xad\xaf\x1b\x86\xc3\x3f\x1a\xd5\x8a\x8d\xc4\xb9\x5a\x87\x9a\xe1\xba\x0a\x9c\x99\x71\x37\x2c\xeb\x84\xc2\x24\x5f\x37\xf5\x7b\xa2\x75\xb8\x89\xec\xda\x56\x2c\xda\x55\xd4\xd3\x6f\x07\x12\xb9\x84\x9d\x2e\x79\x50\xe3\x2e\xa3\x55\x7e\x58\xb6\xca\x65\x15\x7c\x9c\xb7\x08\x6f\x94\x98\xd2\xa6\xb5\xba\x1c\x6f\x74\x11\x96\x91\x41\x87\xba\x73\xab\x39\x6f\x71\x57\x31\x48\x84\x0d\xa2\xee\xf1\xaa\x30\x48\x8b\xe1\xe5\x6d\xdf\x1d\xa5\x10\x9b\x44\xfe\xe6\x3b\x04\xdc\x50\x0c\xfb\x9d\xda\x90\x1b\xd7\xcc\xf2\xc1\xb5\xa7\x0c\xef\x4c\xca\x8d\x83\xd6\x02\x8a\x5b\x5c\x1b\x65\x53\xce\x5a\xb0\xcb\x5a\x0b\x76\xf3\x79\xd9\x29\x53\xc1\xce\xf9\x01\x6d\x83\x1a\x85\x1c\xe1\x4d\x75\x0a\xb1\xba\x5a\x4d\xb2\xf9\xfa\xea\xe1\xc6\xa8\x49\xae\xab\xed\x6a\xb3\xc6\x4d\x75\x8d\x6f\xab\xd9\xd9\xa4\xb8\x94\x9c\xf3\xf5\x62\x73\x5d\xf3\x0b\x51\x9e\x4a\x40\xdc\x56\xb3\x53\xd9\x42\x57\x5d\x2a\xcf\xb4\x3a\xf3\x66\x1c\xb6\x4a\x61\x12\x41\xf6\x06\x19\x2d\xc9\xec\x56\x33\x17\xb4\xfb\x5e\x09\x17\x9a\x43\xba\xc1\x02\xe1\x77\x60\x68\x30\xce\x6e\xb3\xaa\x7a\x87\x24\x36\x7c\xd8\xef\x43\xd7\xeb\x77\xba\xbf\x3b\xfc\x16\x5f\xc6\xee\xd2\xda\x01\x1b\xdf\xe0\x77\xf8\x1a\xe1\x8f\xd5\xa5\x42\xec\x27\xd5\x65\x60\x9f\x78\x82\xca\xbb\xaa\x4b\x63\xf2\x1d\x7e\x02\xeb\xa8\xd1\xc7\x91\xea\x48\x1f\xe6\x73\xd0\xd9\x3a\x35\x2a\x14\x47\x92\x42\xc8\xe4\xc3\x7c\x3e\xa3\xf3\xf9\xac\x83\xc1\xf7\x7b\x71\xae\x7e\x55\x64\xd9\x45\x51\xbc\x04\xf5\x4e\x87\xf7\x01\xe9\x76\x1f\xed\xa3\x8f\xa8\x7c\x9b\x9b\xe8\x5b\xfc\x51\x1b\x78\xe4\x94\x7e\xc6\xaf\x63\x68\xa4\x0e\xfd\x3b\x7c\x8d\x85\x4a\xa7\x8f\x2f\xaa\xd7\x0a\x3c\x2f\xab\xd7\x0e\x3c\x7a\x0e\x17\xf8\xe5\x7c\x5e\xfe\x9c\x1b\xfc\x67\xfc\x12\xf5\x36\xad\x7a\xd7\xe3\x60\x53\x73\xc1\x0f\x01\xad\x93\x92\xc9\xe1\x28\x8c\x24\xd9\x74\xa5\x36\xa1\xe2\x47\x90\x28\x28\x87\x9d\x2c\x85\x9d\x14\x19\xd6\xd8\x9b\x1a\x55\xb9\xb7\x42\x52\xd0\xfa\x7e\x6d\x31\x25\x06\x35\x4c\x1e\x5b\x30\xad\x7c\x72\x01\x75\x5b\x24\x65\xa1\x26\x08\x9c\x7a\x64\x97\x7b\x64\x17\x82\xbc\x41\x09\x93\x09\xf3\x16\x78\x87\x7a\xd4\xf7\x5e\x28\xca\x2f\xf4\x60\x6f\xf3\x1e\xec\x09\x75\x43\x64\x4f\x1d\xf1\x4f\x3e\x4e\xec\x26\xab\x51\xe7\x42\x3f\xa3\x8b\x8e\x95\x08\xe5\xf3\x4f\x71\xb3\x9f\xe6\x12\x58\x1c\x23\xab\x0c\x85\x36\x1c\x24\x98\x8a\xe5\x40\x86\x95\xf9\x28\x4c\xa3\xd4\xc6\x29\xde\x02\x21\xb4\x95\x42\x28\xb5\x42\x28\x5d\x57\xe9\x19\xfb\xa8\xf9\x49\x26\x9c\xe1\x0a\xf8\xc2\xd7\xc9\xe3\x16\x1e\x84\x5a\xf9\x94\x14\x8c\xeb\xf1\xb5\x0f\xe4\x05\xbd\x03\xad\x27\x32\xd0\x55\xbd\x76\x32\x97\xad\x2b\x28\xce\xc1\xd2\xea\x85\x10\xe4\x0e\xb8\xec\x00\xf5\xcb\xc3\x98\xd8\x1b\xf7\xe5\xfa\xd3\x98\x77\xdf\x87\xf4\x1f\x94\x67\xd2\x17\x4d\xa2\xc4\x05\x43\x5e\x03\x38\x89\x28\x9f\x41\xce\x9c\x9e\x96\x60\xc4\x61\x20\x58\x49\xe8\xa8\x98\xe0\x8c\x17\xec\xaf\x02\x27\x5e\x09\x17\xa0\xed\x2d\x8a\x1f\x5e\xd4\x6f\x37\x7d\x68\x24\xe1\x1d\x23\x39\x7e\xd5\xf2\x86\x70\xd2\x3c\xe8\x88\xf8\xa4\x64\xea\xa1\x2b\x74\x4a\x2e\x8c\x00\xc1\x2b\xa8\x5d\x72\x5d\x77\x2f\x3f\x32\x0b\x08\x1b\x96\x8d\xce\xad\x00\xb6\x34\xb5\xce\x14\x2a\x3f\xf9\x40\x98\x20\x8d\xad\xb2\x07\xb7\xe8\xf7\xbc\xfd\xf9\xce\xa0\xb7\x7a\xae\x2b\xda\xc1\x1b\x5d\xd5\x5c\x32\xbf\x51\x6d\xf1\x05\x27\x75\xd3\x95\xa6\x68\x09\xf0\xc7\xda\xbf\xdd\x3f\x39\xc7\xf4\xef\xe5\x6c\xd8\x05\x07\xa5\xb3\xd9\x57\x6f\xd5\x37\x4b\xaf\x46\x9f\xee\xc6\x54\x2f\x57\x86\x6f\x14\x54\xef\xf7\xba\xaa\x3f\xa3\x2b\x09\xbc\x4d\xd5\xd9\xc3\x9f\x80\x82\x5f\x61\xbd\x07\x7f\x92\x90\xa5\xf2\x23\x89\x4c\xda\xa8\x4b\x7b\xf9\xbc\x16\xb5\x20\xd8\xbf\x08\x54\x12\x58\x79\x03\xa8\x32\xfa\xb5\xa0\xec\xdd\xb3\x54\xfe\x67\xba\x50\x83\x79\xf9\x90\x40\xe4\x85\xa4\xef\x51\x0d\x42\x8f\xf2\xa0\x20\x45\xc6\x95\x77\x31\x47\x41\xae\x26\x3f\x45\x39\xb4\xf3\xe8\x2d\x2f\x10\x5a\x91\xb5\xe5\x89\x7c\x5a\xaf\x64\x9e\xda\x42\x2e\x01\x97\x20\x80\x98\x88\xb2\xd0\xfb\x52\x28\xf5\x1d\x04\x4d\xd8\x81\xf4\x5a\x4b\xa2\xab\x37\xc7\xf5\x9a\xcb\xa8\xac\x32\x6e\x99\x7c\xd8\x32\xf8\x49\xd4\x6f\x79\xf7\x0b\x4e\xdf\xbd\x23\x5c\x3e\xd0\x3f\x65\x8b\xab\x2b\x68\x71\x75\x55\x20\x7c\x5d\x77\x4b\x65\xd9\x07\x6c\x6e\xaa\xaf\xfe\xef\x7f\x7e\x75\x2e\x8f\xea\x7f\x7e\x55\x7a\x11\x55\x61\x28\xde\x7f\x7e\x55\x2e\xfe\x1f\xf4\x15\xbe\x75\xcd\xbf\xc2\x37\x55\xf1\xb6\xee\x88\x57\x9d\xe4\x83\xc3\x08\x57\x68\xd6\xb0\x1f\xdf\x73\xd2\x41\xc1\x57\x34\x9f\x87\xf5\xef\x93\xf5\xbc\x5c\xe1\xfb\x98\x31\x26\x2b\xbe\x46\x98\x56\xa7\x0f\xa9\xcb\x4c\x48\x8d\x2c\xda\x56\x85\xce\xbe\x3f\xbd\x70\xf5\x13\xea\xaa\xf8\x4a\xd1\x23\xbb\xc4\xaf\x8a\x13\x3e\xe1\x55\x55\xdd\x80\x1a\xda\x7e\x65\xa2\xa7\xdd\x47\x12\xb0\x8a\x17\xbe\x57\x45\x93\x5a\x53\x10\x89\xad\xe8\x1a\x2b\xde\x66\x79\x7f\xdb\x42\x26\xf3\x65\xdd\xf7\x3a\x1c\xc0\x02\xe6\x5d\x50\x23\x68\x04\x30\x24\xc9\xf0\x83\x8c\xa1\x86\x91\x4d\xd4\xaf\x85\x1e\xcf\xa5\xbf\x09\x9f\x2f\x6e\xa0\xb2\x54\x83\x26\xfc\x9c\x57\x7c\xf5\xfb\xf5\x12\x92\xe1\x0c\xda\x75\xa4\xe6\x9b\xeb\xf2\x56\xe9\x62\x6e\x10\xf6\xac\xc2\x7c\x0d\x89\xa2\xe4\x0f\x2d\x5c\x2e\xd4\xd2\xf7\x7b\xb2\x00\x60\x20\xbd\x56\x90\x9f\xb3\xa4\xb7\xc5\xf7\x97\x9c\xbc\xa3\x9d\x20\xfc\x5b\xa8\xa8\xcb\x63\x67\x02\x45\x3c\x4c\x23\xd2\x98\x66\xd5\xfd\x5b\x22\xd9\x52\x53\x81\x95\x60\xf5\xf7\x8f\xf0\x97\xe8\x7b\xac\x14\xe3\xdf\xb8\xd2\x09\xc0\x9c\xe7\x29\x99\xd1\xc6\xab\x82\xcc\xf2\x2e\x85\x0e\x0e\xa8\x70\x35\x75\x48\x0e\xe6\x59\x85\xc1\xfc\x4e\xd0\x7e\x0f\x95\xe8\x4a\x82\x4d\x8e\x4d\x88\x06\x54\xf1\x24\x3d\xd6\x45\xc4\xba\xf8\xd6\xb9\xa9\x6f\xbf\xb9\x73\x94\x01\x17\xba\x61\x81\xb0\x7e\x76\x78\x5d\x76\xc0\x1e\xe1\x1d\x7b\xcf\x5a\x77\x8f\xe6\x82\x40\x2d\x00\x4a\x95\x10\x53\xbb\xa4\x28\x4f\x1e\x4b\x5c\x21\x1d\xd6\xad\xb8\x8b\x27\xcd\x5a\x51\x16\xaa\x31\xd0\xb2\xba\x79\xc9\xb6\x77\x25\xc2\x75\x93\x96\xbf\x63\x98\xea\x7e\x0b\x9d\x32\xf4\xb2\x6e\xb4\xe3\x23\xb7\x0e\x47\x89\xc6\x26\x75\xed\x10\x65\xf2\x6f\x16\x01\x2e\x95\x50\xf9\x72\x30\x49\x13\x19\x7b\x45\x59\xf3\x92\x2b\xd7\x6e\x5d\xe1\xac\xf3\xea\x42\xd4\x4d\xa3\xe8\x58\x57\x9a\x47\x3e\x1c\x53\xef\x59\x2b\xe8\xd5\x9d\xd9\x8d\x47\xd7\x35\x7b\x47\x74\xfd\xd0\xc4\x58\xd9\x4c\xae\x83\xb1\xf0\x90\x4a\x8a\xcf\x4e\xe9\xca\x17\x10\xa7\x73\x57\x5a\xe4\xc3\x35\x9a\xa8\x2c\xad\xfb\xfd\xbd\xa5\xa0\x50\x6f\x53\xd5\x7d\xab\xfb\x41\xfa\xd6\x00\xd5\xb2\x7b\xb8\xdf\x97\x66\xab\x4c\x15\x95\x5f\x63\xbf\x7f\x54\xbb\x2d\x01\x9d\x98\x1d\xbd\x2a\xf3\x58\x16\x9c\x13\x4e\xe4\x7e\x4a\xd0\x78\xb5\x79\xac\xee\x26\xc1\x42\x48\x1a\xe0\x21\xc1\x91\xc4\x64\xa1\x2c\x5b\xb6\xa6\x4c\x06\x6d\x46\x5e\xda\xe3\xd8\xf7\x78\xb3\x25\x35\xf7\xd5\x2b\x87\x77\x03\x3e\x29\x4d\xfd\x93\x5f\x06\xf0\xc1\xf0\x2e\xc7\xc8\xe4\x28\xc8\x1f\x09\x34\xcc\x25\xd3\x91\xaa\x3e\x0f\x7c\xb2\x2b\x85\x8f\xc5\xc2\xac\x2f\x5d\x04\x9f\xa4\x61\x0a\xdf\x0e\x2e\x38\x5b\xd6\x4c\x75\xba\xd8\xd4\xdb\xad\x32\xf4\xa9\x1c\xbf\x59\xae\x30\xa0\x15\xba\xb4\xe1\x69\xc0\xbe\xbe\x3d\x2a\xc4\x5f\x02\xe9\x52\x17\x59\x2b\x8b\xc7\x4f\xbe\xf9\xe1\x4f\x0f\x44\xf7\xe0\x2d\xaf\x59\x53\x78\xbd\x7d\x8c\xa9\xc8\xe9\x43\xfe\xb5\x48\x64\x0f\x91\x97\xfd\x84\x2d\x9c\xf5\xac\xf2\xff\xd8\xef\x67\x67\xa0\xa3\x56\xc5\x38\xe1\xfd\xec\x14\x17\x20\x9a\x16\x14\x8c\xdc\x25\x5b\x7c\xe4\x54\xe8\x77\x79\xc3\x1d\x78\xfc\x61\x86\x7a\xc7\x29\x3d\xb1\xb5\xab\xac\x17\x59\xf5\xb6\xe4\xda\x45\x4a\x72\x1d\xca\x71\xcc\xf3\xd0\x21\xda\x43\xa7\x94\xc2\xba\xa7\x7a\x2c\x39\x42\x98\x03\x7c\x7e\xae\x3c\xfc\xb3\x63\x49\xf0\x29\xb6\x03\xac\x1f\xca\x39\x67\x75\xb9\xd6\x12\xb5\xc6\x7e\x70\x88\x2e\x34\xdf\x7e\x79\xa9\x73\x49\xff\x99\xdc\x0d\x1f\x3e\xeb\x2e\xba\x3b\xb6\x91\xf0\xd0\x2f\xae\xeb\xee\x51\xbd\xdd\xec\xc0\x5f\xf3\x99\x6a\x55\xcd\xce\xb0\xd6\x48\x72\xc2\x84\x55\x27\x06\xc3\xc6\xef\x48\xfc\xa4\xd7\x4e\x78\xe0\xab\x48\x1c\x1a\x3a\x01\xca\x9f\x6a\x4a\x51\x33\x3b\xab\xaa\x6a\x64\x9e\xe6\x90\x6f\xcc\x0b\xfd\xdc\x2f\x8d\xe4\x8d\xd1\x63\x37\xa4\x01\xc4\xaf\x3d\xac\x1e\x07\x86\x8e\xdb\x27\x4b\x64\xb1\xc9\xe8\xc6\xe8\x3c\x67\xb8\xc5\x35\xee\xf0\x4e\xe7\x22\xa8\x2c\x8e\xe0\xb2\x75\x8e\xda\xba\xbe\x1f\xa4\xf3\xd5\xf3\xd9\xef\xcb\x5d\x25\xfc\x7c\xe3\x46\x85\x89\xa5\x6c\xb7\x3b\x2f\x79\xb5\x53\x39\xc6\x99\xde\xee\xaa\xaa\xca\xae\x2a\xeb\x6a\x87\x4c\xc7\xf3\xb9\x53\x88\xd6\x72\x7d\x68\xbf\xef\xa0\x74\x97\x52\xbf\x55\xb3\xb3\x04\xfc\x2b\x9e\xc1\x46\xd6\x63\x51\x11\x5c\xf2\x6a\x05\x3e\xd2\xc5\x7b\x72\x57\xe4\xf2\xd9\x99\x95\xca\x39\xf7\x3d\xd6\x1f\x50\xd6\x1c\xf1\x05\x65\x8d\xfd\x04\x92\x07\x8e\x7d\x02\xe7\xea\xdc\xfd\x5c\x96\xde\x71\x7b\x52\xda\x6e\x91\x77\x0c\x91\xed\x5e\x83\xe7\xf0\xa4\x74\x43\xfb\xa1\x84\xfd\xe1\xaf\x18\x14\x0f\x58\xa3\xf9\xfc\x63\x29\xdc\xd9\xc2\x1c\x61\x06\xcf\x30\x43\x98\xf4\xa5\x52\xfa\xbe\xae\xf2\x3c\xb9\xba\xec\xb4\xa8\x31\x19\x24\x6a\x54\x37\x5a\xda\x8f\x37\x6b\x87\x37\x29\x70\xc1\x49\xab\x84\x72\x34\x3a\xdb\xee\x6a\x8d\x30\x51\x99\x86\x91\x77\xe1\x91\x3e\x60\xcb\x2f\x46\xe6\x1b\x6a\xc3\x27\x6a\xfa\x56\xa2\x08\x72\xe0\x90\x7a\x73\xfd\x48\x77\x61\x89\xba\xe7\x79\xa9\xbd\xab\x16\x61\x25\x32\x79\x15\xbf\x27\x77\x95\x30\x85\xd9\x4b\x8e\x26\x36\x39\x5d\x57\x32\x58\x0e\xcc\x9d\x81\x68\x19\x4d\xfe\xe5\x41\x60\xeb\xdb\x46\x2b\xc4\x20\x93\x2f\x8e\xb3\xca\x7d\xc2\x42\xc0\x86\xc4\xa2\x55\xc0\x1d\xf7\x1e\x0e\x1d\x03\x6c\x81\x1f\x31\xd1\x16\x98\x48\x31\x3a\xc1\x01\x48\x84\xf8\x59\xde\xde\x25\x43\x7a\x87\xf0\xfb\x91\x95\x99\x5b\xdb\xa2\x12\x1e\xf2\x45\x01\x16\x29\x20\x00\x57\xe4\x2b\x5b\x84\x14\x15\x4e\x1f\xb2\xaf\x6d\x6c\x1e\x33\x17\x3f\x95\x17\xff\x8a\xad\xd7\x13\x85\x4d\x54\x69\xed\x9c\x93\x6e\xb0\x0f\x8e\xaf\x78\xe4\x19\xff\x48\x54\xcd\x4d\x6e\x65\xfc\x00\xf9\x25\x17\x55\x62\x58\x77\xfd\xbf\xf1\x3a\x7b\x04\x62\xb4\x6a\xef\xad\xcc\x35\x7e\x15\xa8\x40\xe5\xa7\x0a\x1a\x9e\x96\xf4\x7b\x93\xd1\x8a\x76\x50\x4c\xee\x5c\xae\x8d\x35\x65\xf1\x96\x6c\xda\x1b\x02\xcf\x0a\xb4\x34\x4f\x4d\x51\xf0\x9f\xea\xee\x15\xe9\x88\x84\x1f\x59\xf8\x91\xed\xc0\xf8\x75\xa5\xe2\xba\x9e\x57\xf7\x94\x51\x41\xeb\x2d\x68\x3a\x97\xc5\x8e\x6d\xda\x1b\x55\x97\xba\xc0\x7a\xc4\xe5\xec\x14\x7b\xcf\x97\xf7\x0d\x6d\x5e\x13\x61\x25\xf2\xef\xf1\xb6\xad\x1b\xca\xde\x49\x70\x84\x7e\x8b\xf1\x6c\x02\x56\x12\x0e\xbf\xe2\x4c\x1b\x2f\xee\x4f\x13\x03\xb9\x18\xde\x6e\xb7\xa4\xf9\xa6\xde\xbc\x2f\x90\xb2\x89\x93\x26\x1c\xe4\x40\x37\x60\x96\xa1\xb2\xe5\x9b\xb6\x2c\xe4\x34\x49\xb3\xe8\xea\x0f\xa4\x81\x4a\xd8\x0e\x82\xe1\xb4\x3f\xd2\xed\xf6\x11\xac\x37\x1a\x29\xec\x8f\xb2\xa7\x5b\xfa\xee\x5a\xc8\xbe\x94\xfe\x33\xe1\xd0\xe3\x28\x9e\x56\x5e\x63\x56\xd9\xcc\xdf\x13\x5e\x12\x93\xe8\xd1\xef\x01\x4a\xb1\xca\x5e\x2d\x00\x46\x27\x12\x2e\x0c\xcb\xd7\xa0\x3a\xfd\xae\x16\x84\xc7\x60\x0c\x75\x51\xe3\xeb\x83\x36\x85\x9e\xc8\xdb\xe1\x34\xcc\x63\x1f\xee\xc3\xe1\x49\xdd\xdc\x81\x1c\x67\x00\xb6\xbc\xa7\xdd\xeb\xfa\x03\x65\xef\x24\x6e\x0d\xd0\x29\xbb\x2f\x29\x0c\x90\xcf\x77\xcc\x03\xfe\xd3\xe4\xf6\xc9\x66\x0d\x6d\x8e\xd8\x55\x07\x45\x85\x84\x94\x7d\x68\xdf\x93\xef\xe8\x15\xd9\xdc\x6d\xb6\xe4\x51\xad\x96\xdc\x69\xd6\xb9\x91\xd3\x7c\xa3\xd2\xe4\x8d\x6c\xd7\x17\xdd\x8f\xc3\x73\xb3\xfd\xaa\xb2\xff\x63\xbd\xfa\x47\x7e\xb8\x79\x5e\x2f\x05\x26\x6a\x13\xd5\x4c\xef\x69\xa7\x14\x98\xb3\x33\xec\x67\xe3\x18\x1d\x4c\x35\x6c\x16\xc1\xa0\x7d\x8c\x02\xe1\xf9\x21\xa6\x02\x8f\x9c\x84\xd6\x2c\x3d\xe5\xed\x8d\xf3\xf9\x15\x70\x81\x21\xac\x68\xa5\xaa\x61\xaa\x5c\x9a\x4b\x13\x4c\xe2\x0b\xf5\x24\x0f\x75\x89\x26\x9f\x8c\x7e\x59\x72\x01\xf2\xb4\x3f\x6d\x73\x3c\xb2\x54\x24\x87\x40\x47\xf5\x74\x88\x0c\xe8\x73\x18\x68\x9f\x8f\xc6\x0c\xd8\xf8\x24\xb2\x8d\xe2\x7a\x00\x67\x85\x41\x5e\xc1\xf0\xc7\x91\x44\xaf\xfc\x96\x88\xd1\xdc\xbb\x24\xad\xf6\x8b\x17\x1e\x0b\xf2\xb8\xf4\x04\x61\x2f\x98\xef\xde\x79\x42\x51\xd5\x23\xaf\xc4\x8a\xae\x31\x5b\xd1\x75\xc5\x13\x2e\xec\xfc\x5c\xca\xda\x4b\x2b\xb1\xb3\xbe\x7c\x8e\xb0\x56\x4d\xfc\xb5\x7a\x51\xde\xdb\x63\xbe\xd4\x96\x2c\xb8\x1f\x5f\x90\x8f\x2a\xae\xe0\xaf\x0b\x7d\x2c\x16\x6e\x0b\xab\x63\x0e\xc2\x71\x34\xfb\xaf\xfe\x81\xf9\x55\x86\x00\x5e\xf6\x59\xb4\x52\xc5\x37\x34\x85\xaf\xd2\xf9\xee\xb8\xa1\x0e\xd2\x27\xdb\xe1\x53\x79\x86\xc2\x05\xfa\xe4\xa4\xfa\x0e\x3b\xe0\x0e\x5e\xc4\x60\x79\x1b\x03\xe5\x79\xb2\x49\xda\x05\x66\x70\xa0\xa2\x65\xc5\xfb\xe0\xe8\xc1\xe8\x3e\xe8\x63\xa9\x81\xb9\x18\xa7\xb7\x0d\x6d\xbe\x6b\xeb\xd4\x60\x11\x2b\x55\x05\x24\xe8\x99\x05\x91\x77\xb8\x8f\x99\x95\x5d\x9a\xec\x41\x11\xa2\x85\x7f\x9d\x56\x4f\xf1\xb3\xfc\xde\x7c\x06\xa9\x7f\x76\xf8\xa4\x7c\x11\x62\x37\x40\xee\xbf\x57\x3e\xb5\x50\x8e\x75\x3e\x99\x28\x45\xf5\xb8\xe4\xe7\xa1\xec\xc5\xd1\xf2\xbe\xc7\x02\x21\x2d\x19\x01\x9b\x5c\x71\x2c\x16\x9d\xfc\x05\x32\x12\xc3\x02\x89\xd8\xdd\x83\xa2\xf9\xbc\xf0\xbe\x29\x66\x55\x45\xe7\xf3\xc2\x7e\x66\x1e\xc4\xa4\x48\xa8\x7c\xcf\xaa\xc4\x22\xfc\x87\x05\x66\x27\xc5\xa2\x38\xa1\xc8\x8b\xb1\x28\xef\x8d\x2d\x6b\x76\x86\x69\xf7\x9d\x62\xc1\xdd\x1f\xa4\x51\xbf\x35\x0b\x2f\x7f\x1a\x96\x0b\x1e\xab\xdd\x51\x7f\x00\x19\x93\x3f\xf4\x85\x7e\x9a\xbc\x88\x06\x9c\xd6\x91\xac\x3e\x04\x30\xc1\x4c\xdd\x94\x4f\xd3\x32\x83\xbe\xef\x2f\x6f\x3d\x0f\x14\x28\x45\x31\xdc\x7b\xca\xde\x49\x74\x52\x68\x90\x10\x0a\x92\xd8\xa2\x49\xf7\x81\x33\x68\x2f\xca\xac\xc4\xf1\x49\xa8\x68\x8f\xf4\x08\x67\xac\x57\x24\x21\x64\x77\xf2\x14\x93\x9f\x07\x2c\x45\x08\x1a\x55\xc3\xe4\x1f\x34\x4d\x4c\x16\x92\x83\xde\x92\x9a\xc1\xe1\x2c\x0f\x30\x99\x63\x6c\x24\x66\xad\x78\xda\xee\xd8\x38\x03\x42\x94\x19\xa5\x37\xdb\xbc\x8c\xa4\x55\xb5\x14\x0f\xe1\x33\x68\x25\x31\x10\xda\x2e\xef\x3b\x22\x76\xb7\x47\xc9\x8f\xf3\x39\x59\x68\xdf\xaf\xc7\xb4\x81\x63\x54\x0e\x59\xd5\xef\xb3\x5c\x61\x92\x8d\x4c\x71\x59\xa9\x7b\xe1\x68\x19\xd4\x7c\xfd\xeb\xcb\xa2\xbf\x94\xc7\xcf\x93\x8e\x84\x5c\x26\x1f\x0f\x51\x04\xdd\xf7\xc6\xb1\xa8\x59\xfe\x15\xeb\xb5\x2f\x9f\x99\xc9\x0d\x10\x24\x50\x67\x78\x8c\x8d\x6e\x5e\xf8\x84\xf0\x34\xc0\x23\x4f\xf7\x91\x42\x99\xa4\x46\x25\xd4\x92\x7c\x8e\x12\xe1\x0b\x48\xd9\x9f\x86\x8f\x00\xfe\xe4\xc6\xca\x37\x5f\x48\xfd\x60\xc9\xc7\xc8\x15\x9d\x53\x0e\xfc\x73\x44\xfb\x5f\x4d\x7c\xfe\x4c\x69\xff\xa0\x4c\x65\xc8\x9b\x77\xdf\xa7\xd0\x56\x09\xd2\x52\x78\xd6\x06\xa3\x30\x8b\xd6\xe7\x0a\x79\x0d\x6d\xd4\x31\x92\x93\x49\x5d\x2c\x6a\x6f\x14\x04\x3e\x61\x0b\x47\x84\xee\x8c\x1e\xe2\xbf\x85\x1e\x21\x7f\xe0\x72\xb0\xf9\x2d\xeb\x05\xfa\xa3\x90\x06\xbc\xdb\x8d\xe4\x0c\x45\xe7\x52\x68\x02\xef\x25\x9a\x2c\x13\x6f\x55\x76\xc7\x23\x50\xac\x87\xe2\x87\xb8\xe0\x6d\x2b\x7c\xff\x81\x6f\x7e\xcb\xfe\x03\x72\xe4\x6f\x73\x46\x7e\xb8\xba\x8d\xb1\x15\x32\xfc\x55\xf7\xbd\xb5\xa0\x7a\x35\x05\x60\xe1\x91\x13\x73\x70\xc6\xd3\xb6\xa5\xf0\x83\x67\xcd\x58\xb3\x6b\x93\x41\xf5\xb8\x5e\x75\xf3\xf1\x3e\x03\x0b\x4b\x45\xd4\xc9\x7b\xa5\x13\xb5\x6b\x8f\x3a\xbb\x48\xf5\x0d\x6d\x2a\x55\x31\x5d\x39\xb2\x01\x9f\xa6\xaa\xdc\x42\x65\x85\xe0\x81\xfe\x42\x19\xe8\x2a\x9b\xf1\x05\x87\x16\xb5\xca\xcf\x4f\xa8\x2d\xf8\x31\x5b\x58\x91\xc5\xe0\x99\xb6\xa5\x8c\x7a\x32\xc8\xd9\x57\xb1\x43\x2c\xe8\xa6\xa2\xc5\xa1\xc0\xc2\xec\x95\x5e\x20\xeb\x89\xb8\xe6\xed\x47\x30\xbc\xe9\x78\x01\xe0\xc2\x0b\x00\xda\xf4\x5f\x8a\x13\xed\x8e\xcb\xba\x5b\xb2\x51\x26\x35\x9d\xe1\x1e\x9d\x14\xff\x32\xbd\xae\xbb\x29\x6b\xa7\xb6\xcb\xa9\xa4\x75\x8d\xfc\x8e\xc8\xd7\x0a\x35\x9b\x05\x68\xfa\xfc\x32\x15\x39\xf7\x4c\x95\x4e\xbd\xbc\xd7\x69\x17\xfd\x35\xc8\x1e\x86\xa0\x4b\x1a\x03\xd3\xa6\xce\xc0\xe0\x97\xde\x09\x28\x21\x04\xfc\xab\x39\xbf\x5f\x33\x77\x86\xa9\x3a\xc3\x44\x4a\xd1\x99\x0e\x56\x74\xad\x4b\x64\x7a\x06\x42\x4c\x5d\xe4\x59\xda\xfd\x02\xd3\x4a\x65\x0d\x6a\x6c\x46\x96\x00\x7b\x15\x0b\x0d\x79\x6b\xe6\x73\x6f\x8b\xfd\xd3\x15\x6e\xb2\xff\x46\x6e\x33\xbd\x2a\x67\x99\x6f\x83\x43\x97\xe9\x25\x68\x23\xfb\xd3\xa1\xe4\xa1\x11\xf2\x39\x11\xb5\xf5\xee\x70\x68\x0f\xf4\x43\x79\xd0\xce\xea\xfd\xde\xcb\x0b\x33\xab\x2a\xe5\x20\x81\xbe\x08\x1a\xda\x8e\xa7\xfe\xac\xb2\x38\xa9\x43\xd3\x5e\x29\x95\x9d\x32\x93\x4a\x9e\xa0\x44\x78\x57\x75\xf3\xb9\x0a\xcf\x75\x0e\x57\xbb\xf9\xbc\x8d\x36\x06\x72\x16\x28\xc7\x71\x88\x60\xf7\x82\xec\xd4\xd7\xaa\xf4\xee\x7c\x3e\xe3\x0b\x2b\x16\x94\xe8\x9c\x9e\x07\xd5\x8f\x25\x47\xb6\xe4\x1a\x61\x5f\xb3\xfa\xb6\xbb\x6e\x85\xae\x6e\x8a\x30\x3d\x4f\xee\x69\xc5\x96\x07\x76\xa9\x62\x98\x49\xec\xd3\xe4\x32\x8d\x7b\x06\xf3\xc0\xed\x90\x05\x28\xe2\xc8\x6c\x88\x16\xee\xb9\x41\xad\xe4\x77\x23\x88\x95\x6a\x61\xd0\x8a\xe6\x4f\x00\x6e\x2b\xfa\xc9\x28\xd7\xee\xf7\xd6\x2f\x6e\x66\x8a\x8c\x7f\x19\x84\xd3\xdd\x7e\x02\xba\xd5\x29\x74\x9b\xd8\x70\x25\x8d\x32\xbc\x5a\xad\xb1\xfa\x6b\x24\x30\x9e\x8e\x20\x23\x41\x13\xe1\x63\xdc\x7e\x5f\xb2\x73\x6e\x82\x15\x68\x23\xd1\x4d\x79\xc2\x0c\xb0\x0e\xa9\xac\x31\xe7\x89\xbd\xae\xf8\x72\x74\xff\x2a\x8e\xb9\x44\xb8\x20\xc3\x4e\x84\x76\x1e\x28\xa3\x4c\x3c\x2a\x89\x29\x1d\xa4\xca\x39\xd0\x41\x22\x11\x2a\x75\xb1\xca\x29\x37\x13\xbf\x87\x64\x19\xc3\x00\x99\xfc\x9c\x60\x7a\xeb\x62\xd7\x31\xd5\xd7\xb8\x63\x57\x88\xce\xef\x88\xd0\x9a\x10\xe7\xbd\xe5\xdd\x76\x83\xae\x3e\x78\x15\x08\xbd\x76\x5e\xc5\x22\x12\xb9\x64\xcb\xce\x27\x89\x4f\xd2\xb7\x63\x2e\x29\x92\x97\x50\x60\xc5\xd7\xbe\x73\x0d\xe6\xa8\xf7\x2e\xb9\xe3\x3d\xdc\x42\x40\x00\x98\x1f\x6d\xeb\xae\x53\x9e\x65\xdf\x24\x3c\xcb\xbe\x89\x3c\xcb\x7e\xa8\x06\x87\x01\x73\xc7\x92\x7b\x23\x66\x12\xa4\x2b\xb9\xab\xb7\x94\x9d\xe0\x52\x54\x0c\xb9\x81\x23\x20\x71\xf7\x06\x82\x9e\x9c\x73\x73\xcb\x3a\xc1\x77\x1b\xd1\xf2\x4a\x60\xb1\xb8\xbc\x84\x77\x97\x97\xe0\xf8\xa4\xbe\x4e\x30\x3b\x92\xec\xa8\x88\x36\xe6\x75\x56\x37\xcd\x4f\x54\x5c\x3f\x63\x0d\xf9\x39\x45\xab\x0d\xf4\x77\xb4\xb1\xf1\x0d\xca\x2b\x16\x42\xa5\x36\xe4\x35\x11\x26\x34\x7e\x4b\x3b\xa8\x1b\x3a\x53\x29\xa2\xf8\xda\x66\x5c\x96\xdb\x38\x3b\xc5\x0a\x6b\xc4\x39\x35\xd9\x31\x96\x74\xd1\xdd\x02\xeb\x22\xf0\x29\x36\x6e\xf4\x1d\xfd\x3b\x39\xa9\xce\x74\xfc\x1d\xeb\x4b\xee\xc9\x3e\x3f\x49\xf0\xbb\xba\x8c\x16\xbe\x9a\x7b\xc2\xdc\x8b\xb4\x10\x7f\x3c\x3b\x17\x0f\xce\x96\xa7\x72\xd6\x67\x0f\xd9\xd7\x02\x7c\xac\xf8\x8a\x3d\x38\x5b\xbb\x4f\x57\xcc\x1a\x68\x87\x60\x33\xbb\xa9\x3d\x82\xb9\xef\x21\xfd\x37\x1f\x50\x64\x71\x45\x59\xbd\xdd\xde\x05\x3e\x7c\x40\x05\xf9\xe2\xb2\xdb\xbd\xed\x36\x9c\xbe\x25\xdc\xcc\xb4\x3a\x45\xbd\xcb\xcf\xe9\x3a\xfd\xd1\x11\x8d\x59\x98\xa1\x54\x92\xd6\x4e\xf0\xf6\x4e\x8a\xab\x51\xf1\x68\xfb\x0e\xcc\x09\x9e\x55\xf2\x4f\x51\x8e\x8e\xbf\x95\x5e\x38\xaa\x0b\x43\xe5\xd9\x48\x4e\xd2\x23\x3c\x7c\xfa\x63\x19\xc6\xc0\xfe\x25\x16\x49\x4d\x95\x77\x8f\xb3\xc5\xb4\x7a\x5e\x8b\xeb\xc5\x0d\x55\xae\x7c\xd8\x26\x77\x3e\x7d\x58\x7f\x4d\x1f\xd6\x27\x27\x48\x8a\x13\xab\x7a\x6d\xf3\x36\xb7\x55\x3d\x79\xcb\x49\xfd\xbe\x37\x0e\xbe\xf3\xb9\x49\x97\xda\x56\xd4\xf0\x53\xa7\x78\x57\x9d\x7a\xd9\x65\x5a\x37\x95\x6d\x45\x1f\xb4\x78\x53\x9d\x3d\xdc\x7c\x5d\x51\xc8\x94\x03\x83\xf0\x07\x1b\x35\x0c\x7b\xb0\x59\xa3\xfb\x6d\xb5\x79\x70\xa6\x87\xea\x2a\xf6\x60\xfb\xa0\xc5\xbb\x8a\xcb\xff\x4d\x6e\xed\x2b\xca\x3b\xa1\x14\xec\x70\x5e\x96\x2d\xae\x9b\x86\x34\x8f\xda\x1d\x13\xcb\x4e\x47\xdb\xe8\x3f\x77\x4a\x12\xfe\x73\x32\xba\x5f\x3d\x7b\xbe\x03\xb9\x5a\x17\x1f\xc6\xf7\x91\xb7\xf0\xc0\x04\xc6\x42\x6d\x8a\x38\x94\x09\x41\x4b\x8b\xba\x8b\x2a\xf8\x0b\x64\x7f\x75\x6a\x35\x36\x6a\x67\x77\x65\x95\xf1\xe4\x6f\x70\xc8\xb7\xbf\x94\x97\xa0\xe9\xd9\x4b\x05\x51\x0d\x1f\xb9\x31\x36\x3b\xee\x8c\x8e\xab\xb5\x7a\x78\xb5\xdd\x75\xd7\x8f\x6a\xd6\x32\xba\xa9\x55\xa0\xc6\xc2\xd7\x7a\xab\x12\x0d\x35\xbb\xfb\x81\x69\xab\xc9\x00\x0d\x75\xe2\x55\xbf\xfb\xd1\x92\x69\x97\xf2\x98\xdc\xd4\x42\xdf\xad\x94\xbd\xdb\xef\x67\xc4\x02\xa5\x44\x3d\x5a\x9d\xae\x4d\xdc\x94\x19\x37\x88\x8a\x5e\x26\xa5\xbf\xd3\x87\xe4\xeb\xe1\x54\xb4\x40\x77\x72\x12\xde\x93\x7e\x1b\xcd\xcc\x8a\xf4\xd4\x84\x37\xb5\x80\x99\xad\x25\xce\x3c\x52\xa1\x4d\x3f\xd1\xed\xd6\x04\x22\xe1\x33\x7c\x8a\x86\x30\x37\x54\x96\x60\xe3\xae\x0e\x81\xd0\x3a\x32\x29\xd1\xde\x44\xa8\x0d\x06\x7b\x4c\x9b\x70\xac\xd9\x69\x6f\x82\x09\x7a\xac\x6c\xc0\x17\x22\x17\xdc\x98\x58\xb9\xcb\xc9\x6c\x17\x18\x30\x2a\x38\x44\x93\x48\x13\x67\x3b\xb0\xea\xa4\xd9\x29\xc2\x3f\xaa\xa8\x1f\x43\x99\xff\x52\x0e\x06\x97\x7c\xba\x26\x15\x7c\x11\x9f\x6b\x53\x78\x22\x03\xe4\xe1\x07\x98\x2f\xfc\xb3\x8f\xf9\xc2\xd1\x85\x14\xbc\x23\xf8\x06\xa7\x83\x18\x59\x7e\x0c\xf6\x9f\x3c\x85\xf9\xdc\x7f\xf0\xc7\x53\x93\xaa\x2b\x64\x8b\x6a\x76\xa7\x2b\xac\x80\x39\x48\xb6\x57\x90\x80\x18\xf9\xf7\xe4\xae\x90\x8c\xba\x3c\x1e\xb7\xdb\x7a\x93\x49\x97\x33\x81\xee\x4b\x36\xdc\x71\xbd\x32\x82\xc9\x89\x01\x0b\x74\xec\x7c\x90\x21\x66\xd5\x68\xf6\x4d\x3a\xd4\x68\x06\x98\x2d\x6e\xea\xdb\xd4\xf9\x7e\x04\xf9\xb6\x10\xc4\xaa\x66\x7a\xaf\x9b\x06\xb2\x78\x26\x3b\xe6\xe3\x1d\x5b\xfe\x84\x13\xc1\x29\xf9\x40\xbe\xab\x05\xe9\x44\x09\x86\x4a\xff\x49\x86\x87\x1e\xce\xe6\x1d\x11\x99\xb9\x58\x37\x79\x6d\xc7\x74\x2d\xbf\xb9\xfb\xf7\xae\x65\x17\xb7\xd4\x17\xbb\x08\xd0\x66\x9b\xac\x56\x94\x05\x24\xc9\xc0\xc4\x8f\xdb\x88\xe9\xad\xaa\xad\x73\x20\x61\x02\x4c\x49\x65\x92\x34\xb9\x11\x9e\x1b\x34\x51\xf7\x8d\x6b\x16\x60\x53\xe1\xef\xb0\x82\x2f\xa4\x5e\xaa\x3f\x64\xaa\x9c\x63\x51\x15\x8f\x5f\x2f\xa7\xb6\xfb\xff\x21\xdb\x4e\x8d\x54\xec\x9c\xeb\x81\xdb\x47\x36\xe7\x39\x30\x32\x26\xd2\x6f\xa1\x34\xf8\xca\x42\x26\xa7\x30\xc2\xd6\x68\xe5\x7a\x62\x4c\xdd\xc4\x3e\x2d\x3c\x69\x39\x4e\xee\xc1\x7b\x14\xe7\x88\x18\xd0\xbe\x78\x05\x1a\x9e\x89\xb4\xed\x7a\x6d\x92\x67\xf2\xfb\x2c\xb9\xa7\x67\x20\x61\xec\x87\x64\xa5\x15\x77\x51\x32\x84\x59\x10\xb6\xf8\x3b\xff\xf6\x9b\xcf\x89\x29\x76\xa0\x7f\x2c\x74\xf5\x02\xe0\x54\xfe\x63\x4c\x67\xef\x70\x51\xc7\xe6\x85\xa4\xa3\x12\xd8\x93\x00\xc1\x91\xcc\x8f\xa0\xf3\x1e\x3f\xd2\x01\x99\x0a\x30\x09\x15\xb3\x58\x5c\x9a\x1c\x55\xa1\x67\x98\x00\xd2\x20\xc8\x1b\x29\x2a\x0d\xf7\xf3\x77\x36\x7a\x59\x1f\x0b\x84\xce\x0b\xb9\xca\x02\x8a\x5f\xf6\xba\xb8\x4f\x35\xc0\x3d\xc5\xcf\x54\xf1\xd7\x13\xd7\x2f\xa4\xa0\xd4\x90\x2b\x89\x29\x07\x61\x80\x07\xf9\xf1\x55\x56\x9a\x4f\xee\x1c\xd4\x60\xea\xe8\x0e\xfd\xa7\xf4\x0b\x18\x51\x1d\x63\xd2\x2b\x79\xd4\xee\xce\xff\xfe\xad\x1b\x82\xfe\xfd\xb0\xd4\x6c\x65\x39\xcc\x87\xd2\x1c\xf3\x6b\x5a\x99\x4c\x23\x1c\x52\x8c\x80\x0f\xac\x93\xe1\xe8\xda\xa5\x91\x21\x10\xfa\xab\x99\x62\x82\x21\xe9\xdc\x5a\x2e\x6f\x53\xcb\x43\xa2\x45\x71\xa4\x0b\xec\xc4\xb7\xa0\x33\x9d\xf4\xbf\x8e\x94\xee\x47\x36\x56\x6c\x78\x04\xc0\x26\x94\xd5\x64\x34\x3d\xee\x46\x8f\x42\x41\x1b\xc2\x04\x15\x77\x85\x6c\x29\xc9\xc3\x70\x13\x82\x5c\xd8\x29\x81\x30\xa6\x9b\xde\xb5\xa0\xef\x24\x9b\xe0\x52\x8e\x02\x98\x92\x9b\x73\x08\x5f\x6b\x10\x3b\x4f\xbc\xf4\x38\xbf\xa5\xf2\x09\xeb\x16\xf2\xce\xf1\xbb\x76\x52\x9e\x81\x48\xc0\x1a\xab\xd9\xb9\x42\xae\x8a\x2e\x80\x66\xc7\xb6\xf7\x2d\x50\x4a\x07\xfb\x03\x93\x98\x3d\x15\xed\xf4\x8a\x88\xcd\xf5\x54\x91\xac\xa9\x3c\x87\x77\xb7\xf2\x16\xb2\xbd\x9c\x14\xd3\x8f\x54\x5c\xb7\x3b\x31\xad\xd9\x54\x45\x95\x74\xfa\x6a\x1c\x12\x00\xf8\x0c\xa0\xe3\x4e\x3d\x39\x27\x26\xcd\x10\x52\xba\x4d\xf5\xbb\xc7\xb4\x62\xb8\x6c\x8d\x86\xef\x92\x8e\xab\xf7\x42\xd0\xd1\x46\x29\xb3\xfe\x77\x49\x3d\x65\x56\x8b\x70\x0d\xcf\x70\x2d\x2f\x87\xf2\x3f\x94\xc4\xfc\x7f\x0e\x9d\x4b\x9b\x11\x0c\x12\xf9\x98\xa3\xd5\xea\xa3\xa5\x6f\x7e\xcc\xed\x51\x7a\x4f\xee\x2a\x8a\xdb\x45\xd2\x2e\x50\x31\xdc\xaa\xc3\xc6\x86\xf9\x06\xd5\x34\xb5\x5b\x2a\x24\x24\x54\x55\x0f\xaf\x08\x27\x6c\xe3\x5e\x05\x52\x58\xc5\x71\xfb\xab\x9e\xce\xd4\xb9\xa4\xd1\xb9\x3c\x9e\xc4\x2b\x15\xbb\xfa\x5f\x55\x16\x93\x74\x47\xff\x05\x74\x9d\xa6\xaf\xbd\xa1\xf2\x58\xde\xa2\xf2\x98\x84\xd9\xb8\x20\x14\x5f\xf6\xf2\xe5\x8e\x7b\x14\xf9\x4f\xa6\x94\x75\xa2\x66\x1b\x79\x37\x5d\x90\x73\xb2\x8c\x08\x01\x16\xe9\xcd\x97\xfc\xa8\xe5\x3a\x5f\xd9\x35\x94\x8f\x74\x52\x00\x98\xf6\x80\x7e\x78\xa7\x27\xb1\xfd\xda\x32\x93\x80\xba\xa9\x85\x22\x61\xeb\x34\x73\x79\x9b\x85\x6e\x39\x51\xc5\x07\x78\x42\xde\xe6\x81\x38\xea\xd5\x90\x93\xf3\x0e\x0f\x7d\xc4\x3b\xa7\x26\x9e\xdc\x39\xe0\x8c\xe9\x80\x86\x24\x77\x2f\xdb\x73\x2a\x49\x9b\xee\x3c\x9b\xa4\xcd\x50\x26\x28\xcd\x64\x89\x03\x21\xbf\x16\x75\x48\x98\x70\xfe\x7f\x43\x1b\x3e\xf1\xfc\x06\x82\x9f\x39\xbd\xe9\x6b\xdd\xb7\xc3\x0c\x09\xcc\x08\x5f\xef\x31\xc0\x5d\x21\xfb\xa7\x4d\x77\xb8\x63\xec\xa7\x8c\x23\xc6\x3c\x28\xb9\x2a\x20\x58\x19\x19\x99\xc8\x0b\x08\x2a\x11\x7e\x79\x2a\x54\x91\xc9\x80\x3d\x86\x65\x5b\xd3\x25\xd1\xc7\xd8\xa4\xbb\xcd\x0a\xf2\x11\xd1\xf2\x54\xf0\x22\x85\x9d\x26\x02\x5c\x69\x5a\xba\x12\x6a\x79\x0c\x58\x16\xbb\x97\xc9\x2e\x60\x73\x91\xca\xc9\x61\x74\xb1\xc9\x4d\xb0\xd5\xa4\x42\xa9\x30\xd5\x29\x64\x5d\xb9\x08\x9f\x29\xa5\x82\x56\x02\xa4\x26\x72\x03\xc9\x40\xbb\x85\x68\x15\x43\x8d\x16\xe4\x03\xe1\x77\x41\x56\x03\x3d\x85\x53\x48\xe6\x92\xa5\xbc\xa3\x04\x15\xc8\xa5\xfa\xeb\x19\x70\xa2\x57\x94\xf0\x12\xa1\x40\xcd\x9a\x24\xfa\x21\xa3\x6b\x5b\x67\x18\xc5\x50\x0f\x01\x60\x5e\x1e\x45\x97\xf3\xfb\x77\x90\x1e\xe7\xbb\x51\x8d\x93\x3d\x29\xca\x6a\xc9\x27\x64\x93\xba\xf7\x2e\x92\xaa\x22\xfb\x7d\x01\xf9\x73\xce\x21\x19\xf4\xa0\x16\x9b\xbc\x6e\x8b\x0e\xf2\x0a\x05\x0f\x17\xa2\x55\x79\x88\x4a\xb4\x2c\x8a\x13\x2f\xbc\x90\x93\xdf\xba\x68\xc8\xc8\xa1\x4c\x40\xce\x9f\xcd\x72\xee\x6f\x5a\x45\xe2\xf3\x1e\x78\xf0\x55\x67\x8d\x0c\x97\x52\x72\x86\x8c\xf7\x80\x1a\x07\xfd\xdb\xde\xf9\x01\x69\x64\x20\x7b\xe9\xf1\xa1\x94\x9d\xc1\xb5\xeb\xba\x4b\x7c\x62\x6a\xc2\xf9\xdf\x28\x27\x01\x91\xf2\x2d\x08\xda\x55\x40\x44\xeb\xa6\x89\x5b\x1a\xcd\xb4\xd7\x5a\xac\x2b\x12\xae\xdd\x4a\x66\xfa\x42\xf9\x10\x7b\x43\x98\xe2\x82\x83\x9e\xfc\xa2\xb6\xa6\x33\xca\x1a\xf2\xf3\xcb\xab\x92\xa0\x87\x90\xb3\xd2\xe8\x56\xcd\x7b\x6d\x59\xe0\xf8\x4c\x79\xcb\xb5\x4c\xd4\x94\xa5\x20\x02\x9f\x67\xfa\x86\x4f\xb7\xa4\xe6\xb9\xeb\x49\x7d\x31\x89\xf6\x78\xe2\x0c\xc1\xa7\x0f\xc5\xd7\xd6\xe2\x22\x24\x7a\x93\x95\x58\x07\x21\x80\x25\xea\x53\x38\x11\xf9\x55\x18\x25\xfd\x98\x3b\x81\x9e\xbf\x6a\x6a\xdd\x10\xd4\xd3\x63\xbe\x74\x9f\xe8\x99\x1c\xf8\x48\xb7\xb2\x49\xe1\xec\x02\x12\xe7\x00\x29\x31\x90\x93\x84\x53\x83\x7c\x68\xbc\x1a\x30\xcd\x1d\x40\x83\x92\x37\xf5\x6d\x6a\x80\x31\xdd\x9d\x51\x84\x67\x2e\x7f\xe8\x73\x45\x2c\x77\x11\xd9\x6e\xfc\x26\xa0\xf8\x61\x44\x25\xe2\xed\x4d\xa2\xb8\xb4\xef\xa5\xfd\x2e\xf2\xb8\x24\xe0\x5b\x39\xa0\x7b\x64\x25\x69\xde\xda\xa4\x9e\xeb\x95\x56\x0d\xb7\x2a\xa3\xcb\x4f\xa4\x7e\xff\xbc\xbe\xc5\x35\xa9\xce\x1c\xd1\xee\x88\x5b\x49\x4b\x74\xf2\xd0\xcc\x32\x64\x2f\x3b\xc8\x0a\xd8\x12\x9d\x79\x54\x20\x93\x98\x75\x77\x88\xec\x05\x5a\xd6\x4b\xa3\xcb\x79\x5e\xdf\x86\xb9\xd0\x18\xf9\xb8\xbd\x53\x7e\xe6\x4d\xf8\xc6\xff\x44\x4e\x85\x92\xd4\x27\xea\xcd\xd8\x5e\xaa\xe2\x58\x55\xd2\xc8\x53\x69\x6b\xbc\x50\x17\x96\x20\x2a\xc9\xa5\x12\x4e\x08\x79\x0f\xe5\xd2\x19\xe6\x16\x44\xf4\xbc\x04\x4a\xf9\x7a\x73\x4d\x9a\xdd\x96\x34\xda\x5d\xa1\x44\xf3\x39\x5d\x6c\xa4\x5c\xb9\xb5\x8f\x30\xd5\x7a\x91\xb7\x3b\xba\x55\x3d\x81\x94\xcd\x91\x44\x04\xd5\xff\xc8\xbc\xbc\xa2\xa7\xc6\x0c\x15\xac\x1d\xc8\x9d\x49\xf7\xa7\x32\x34\x21\x3c\x63\xf3\xb9\x70\x1f\xc0\x39\x7d\x5e\xdf\x7a\xad\x84\xaa\x6b\x06\x0c\xce\x37\x77\xaf\x06\xdc\xbe\xc5\x0f\x7f\x0e\x64\xb1\xd9\x52\xc9\x44\x35\x1e\x86\x67\x26\xa3\x6a\x17\x29\xdc\xb2\x9f\xc9\x41\x35\xac\x5d\x0f\xba\x6e\x99\xfa\x02\x83\xfb\x78\xf0\x05\x1c\x98\xce\x88\xad\x59\x60\x85\xdb\x05\x25\x88\x9c\x6f\x17\x43\x03\x25\xd9\xa3\x9a\xb1\x56\x4c\x3b\x22\xa6\xe2\x9a\x4c\x69\x33\x2d\x4e\xc4\x49\x31\x95\x4c\xcd\x35\x31\x3a\x33\x70\x42\x5c\x16\x27\xfc\xa4\x98\xd6\x9d\x7c\xc3\xc9\x94\x82\xef\x62\xb7\x73\xaa\x35\xaa\x3e\xda\xd4\x9b\x6b\x62\x3c\x15\xa5\x68\x05\xfe\xc8\xcc\xcb\x0f\xe5\xa6\x44\xd5\xa5\x0b\xc6\xe2\x7b\x6f\xf2\x90\x07\xa9\xc5\x42\x27\xad\xf5\xf7\x8e\x85\x3e\x75\x42\xd7\xe3\x1b\xd9\x86\xe0\x0b\x9d\x0b\x95\x01\xfd\x94\xdf\x3f\x6b\x4a\x21\x29\x86\xf0\x86\x4e\xfa\x4d\xe5\xb1\xc8\xaf\xc9\x9b\x3b\x12\x25\x5f\x34\xea\xaf\xd7\x77\x6c\x53\x4a\x3a\xa6\x98\x1c\x2e\x87\x86\x63\x11\xed\xa9\x29\x4b\x8a\x62\xb8\xc8\x39\x19\x5b\xb7\xd8\xef\xd9\x7e\x5f\xb2\xaa\x50\xc8\xf2\x80\x36\x4b\xad\xda\x64\xe4\xe3\x23\x8d\x40\x25\xb2\xbb\x41\x3e\x4e\x6f\x54\x95\x4b\x47\x9b\x30\x43\x5e\x15\xc5\x03\xc7\xab\x6e\x9a\x92\x5a\x90\x47\xf0\x50\x2f\x05\x54\xf4\x17\xfe\x0c\x12\x42\x41\x4d\x4e\x4e\x8c\x11\x28\x7f\xbf\x04\x03\x78\x1b\x89\xb9\x0a\xb2\x60\x95\x3b\x27\x13\xc9\xca\x98\x1d\x36\x37\xe4\xf8\x01\x1d\x62\x06\x81\xaa\x34\xc2\x1f\x78\x8c\x7f\xb4\x94\xd9\xde\x94\xc0\xfc\x88\xcc\x90\xf9\xae\xfc\xe6\x71\x5f\xd1\x4d\x49\xbc\x90\x1b\x93\xe6\xcf\x9f\x89\xbe\x06\x97\xa9\x1d\x32\x57\x64\x64\x77\xda\xfe\xe6\xa5\x8b\x4d\x3a\x22\xe3\x2a\xfd\xf8\x3a\xf9\xd8\xad\xb7\xf1\x45\xb6\x6b\x02\xec\x7f\x09\xff\x57\xca\xb7\x46\x94\xc5\xa2\x40\x8a\x35\xba\x25\xd5\x19\xbe\xc9\x5e\xf3\xe6\xb0\xa6\x65\x1c\xda\x54\xfe\x59\x33\x99\x24\x0d\xce\x56\xcc\xc4\x4a\x65\x4c\xad\x97\x9e\x93\x60\xf0\x82\xaa\x00\xc0\xb0\xf1\x2d\x61\x0d\x65\xef\xbc\xf0\xdf\xe7\x35\xab\xdf\x11\xfe\x74\xbb\xeb\xae\x87\x1d\x07\xfe\x49\x51\xf7\xaf\x88\x0e\x59\x0f\x3f\x6b\xda\x17\xad\xd0\x53\x8a\xbe\x70\x1e\x8b\xd1\xac\xfc\xcc\x00\xc1\x1b\xb5\xe8\xf0\x59\x17\x91\xcf\xf0\xad\x73\xf5\x0d\x9f\x5f\x36\xe4\x8a\x70\x4e\x9a\x37\x2a\xfe\x2e\x7e\xcd\xbd\x88\xe8\x78\x0e\x5a\xfb\x38\x78\x1e\xe8\x26\xa3\x69\x18\x5d\xc5\x23\x79\xdd\x8d\x88\xaf\x9c\x48\xf1\x89\x38\x27\x8b\xc3\x1f\x38\x0d\x8f\xae\x2e\xd2\x7d\xe2\x37\x3f\x1f\x1a\x24\x70\x50\xf2\xd7\x45\x86\x28\xe5\x23\xa6\x75\x15\xd4\xe5\xc7\xff\xf4\xc3\xb3\xc7\x97\x7f\x7e\xf2\x97\x75\x75\x4b\x4e\x4e\x4e\xac\xc3\xc8\x03\xd8\xa5\x22\xb5\xfd\x5e\x1c\xa0\xde\x7c\xe0\xae\x86\xb8\x6e\x5c\x0d\x0d\x9e\x9b\xbf\x0f\xe1\xb8\x6d\x37\xc4\x6f\xfb\x6a\x80\x62\x6e\x56\x9c\x74\xce\x3a\x30\xc4\x39\x6f\xfa\x43\x8c\xf3\x5f\x06\xf8\x16\x2c\xda\x62\xdb\x00\x14\x0e\xd7\x02\xdd\x06\x85\xba\x63\x03\x86\xbe\x5d\xd0\xee\x5b\xda\x34\x84\x3d\xe5\xed\x8d\x1f\xf1\x3f\xbc\x6d\xb5\xf2\x42\x67\x39\x01\x1f\xe6\x19\x5b\xbc\x7a\xf2\xe8\xe5\xab\xc7\x97\x8f\x2f\xde\x5c\x5c\xbe\x7e\x73\xf1\xe6\xc9\x7e\x6f\xda\xe9\x5c\x1f\x25\x42\x60\xdb\x4a\xb4\x35\x17\x8f\x36\xfe\x3e\xdd\x6d\xb7\x77\x36\x52\x64\x09\x21\xae\x8b\x30\x4d\x91\xc9\x4d\x1c\xba\x90\x99\xb4\x33\xb9\x5d\xd3\xe1\xcd\x49\xbe\x4a\xbf\xf3\xd0\x66\xbf\x27\xda\xe6\xd1\xe3\x36\x3d\xbb\x14\x74\x12\xeb\x9b\xcf\xcb\x59\x39\xf3\xb7\x07\x34\xfd\x3a\x1c\x86\xb6\xec\x91\x09\x35\x36\x50\x3b\xd0\xac\x44\x00\xf6\x59\x99\x68\xfc\x82\x7c\x74\x79\xdf\xe3\x4e\x48\x93\x7c\xf7\x82\x7c\x2c\xd1\xd8\x57\x30\xe0\xa7\x6f\x04\x42\x12\x74\x06\x72\xcf\xd8\x0f\xdd\x88\xf1\x02\x02\x44\x9c\xe1\x62\x56\x12\xed\x3a\x16\xba\xb6\xc7\x4f\xb5\x53\x3b\x8c\x03\x28\x99\xd3\x1a\x07\x53\xd4\x6d\xd5\x67\x1a\x43\x8f\xfc\x50\xb7\x76\x9f\xa6\xf0\x20\xfb\x25\x69\x7a\x65\xec\x82\x98\xf9\x74\xe4\x68\xb6\x8b\xe1\x67\x6a\x16\x2a\x95\xc4\x91\xb3\x50\x8d\xd5\x87\x59\x3c\x9e\x26\xd1\x38\x8f\x20\xe7\x63\xb8\xb3\x4c\x4d\x43\xbf\x55\xf3\x78\x41\x3e\xfe\x82\x39\xbc\x20\x1f\x53\xe3\x03\x56\x27\xc7\x7e\x41\x3e\xaa\x71\xa3\x14\x62\xaa\xc8\x44\x38\xec\x93\x57\xaf\x5e\xbe\x7a\x8d\x46\x00\x0a\x9d\xc8\xfe\x6c\xf2\x95\xa3\x76\xc2\xb6\x96\x9f\x5a\x3b\x72\x1c\x40\x1d\xd0\x83\xf9\x7c\x96\x21\x6d\x81\xa4\xa3\x44\x31\x5e\xdd\xc3\x8f\xa5\xc0\xa1\x49\x06\x40\x82\xfd\xb9\x0c\x81\x84\xf5\x5d\xb9\xf4\x2f\x4e\xac\x23\xce\xbd\x37\x70\xcb\xf7\x81\xb3\xb6\x9a\x77\x41\x1b\xc9\xa4\x13\xcb\xec\x13\x15\xe7\x67\xc4\x4d\xe6\x3c\x52\x9f\x35\x25\x53\xec\x31\xad\x44\x94\x46\xf8\xb1\x64\xe5\x21\x29\x43\x22\x10\xce\x0b\xea\xa0\xc8\xc8\x1b\x2d\xae\x63\x45\x5f\x57\x9d\x3e\xec\xbe\xae\x8d\x08\xd2\x19\x11\x64\x57\xd5\xab\x6e\x8d\xb7\x15\x5d\xed\xd6\x13\xbb\x80\xad\xaa\x34\xe5\xd5\x2e\xd8\x42\x8c\xe6\xf9\x3b\x52\x92\xd5\x6e\x8d\x96\x77\xfa\x07\x96\xff\x56\xad\x91\x2b\xaa\x01\x12\x5e\xca\xc9\xab\x8d\x55\x02\x99\x0e\xd6\x2f\x6d\x35\x12\x1d\x61\xce\xf1\xc6\x54\xad\xe8\x4c\x1d\x7a\x8e\xe3\xc2\xf4\x08\x85\xfc\x8e\xd0\x0c\xc5\xd3\x7a\x23\x5a\x7e\x97\x8a\x15\xb4\x39\xde\x4c\x82\x76\xc5\x61\x3c\x8e\x18\x0e\xe7\xbe\xe0\x0f\x20\x31\xd3\xe3\x62\xaa\x41\x84\x89\xc7\x77\x0d\x79\x7d\xc3\x23\x29\x4e\xd0\xb5\x09\x58\xc6\xbf\x2f\x88\x21\xc4\x8d\x87\xd2\x83\xe4\x7b\x81\x31\x34\xcb\x95\x25\x25\x0b\xcb\xab\x99\x43\x14\x5c\x9b\x46\x99\x52\x5a\xf1\xd1\x8b\xc8\x4f\x73\xc3\xe9\xa4\xef\x24\xd7\x7c\x25\xd6\x66\x90\xf9\xfc\x98\x56\x25\xd2\xe9\x53\xa6\x63\xad\xfb\xd4\x84\x43\x61\x62\x2c\x3b\x3d\xc9\x09\x14\x60\x36\x8a\x7b\x5a\x89\xf5\xc4\xcd\x69\xf0\x0e\xab\x90\xf2\x28\x4a\x69\x3e\xe7\x56\x4b\x10\xa1\x2e\x9c\x8e\xd0\x00\x93\x65\x9a\xd3\x79\xa8\xda\x4c\x96\x46\x74\x7f\xdc\xb5\x21\x09\xcf\x08\x53\xe4\xbf\x2e\x67\xa7\x36\x54\x83\x35\x26\xf9\x97\x29\xf3\x27\xa7\x22\x99\xa1\x84\xde\x49\x39\x90\xcb\xc3\x68\x1c\xd6\x85\x2a\xc1\xe8\x79\x38\x00\xeb\xef\xa9\xfe\x1c\x05\x5f\x18\xd9\xe2\x75\xfd\x41\x87\xfa\x72\x4c\x10\xe6\x26\x12\x0b\x46\x16\x35\x17\xa4\x71\xa7\x2e\x3e\xa3\xc1\x89\xd4\xe7\xc3\x4b\x3c\x62\x69\x4e\x70\x28\x70\xe1\x7d\x56\xa8\x68\x80\x16\x1c\x48\x7e\xaa\x35\x1b\x03\x86\xfd\x6c\x50\xb4\xc2\xb1\xfb\x7e\xc2\xc1\x66\x39\xdc\xfb\xdb\x5d\x77\x0d\xbe\x5e\x50\xe3\x57\xa9\x37\x52\x95\x7e\x71\x70\x1d\x28\x97\xfa\x76\x21\x2f\x85\xee\xfa\xe8\x65\x9f\x7d\xe6\xb2\xcf\x90\xa2\x80\x03\x5b\xbf\xde\xa4\x10\xf4\x3a\x1a\xd8\xd6\xd9\xf4\x76\x5f\x75\x31\x6d\xaf\x34\x0a\x4c\xbc\xc0\xdb\x61\x09\xd0\x20\xdc\x59\x98\x3c\xf1\x5e\xba\xba\x02\xdf\x6b\xc7\x98\x25\xc7\x3a\xb5\xdd\x92\x48\xd0\xe4\x63\x35\x45\x9c\xd8\x10\x8b\x1e\x87\x6b\xe2\xed\x47\xd5\x4c\xb5\x20\xe0\x7d\x38\x5c\xc5\xa6\xbd\xb9\x95\x07\x00\x4f\xd5\xc9\x9c\x5e\x6d\xeb\x77\x5d\x81\x92\x41\xae\xc3\xad\x92\x23\xa7\xcf\x34\x40\x3b\x48\xcc\x3a\xdc\x55\x4f\x3c\x2b\xbd\x23\xe9\x7f\x65\xc2\x4b\x12\xf7\x49\xe9\x2c\x26\x49\xe9\xdd\xde\x0d\x03\xb1\x5e\xed\x12\xdf\xb1\xc5\xdb\x7a\xf3\xfe\xed\x8e\x33\x89\x3f\xba\x95\x24\x09\xd0\x4c\xe9\x29\x70\x71\xb9\xb9\x26\x9b\xf7\x4f\x5b\xfe\x92\xdf\x5e\xd7\x2c\x8a\x13\xec\x20\x56\x4a\x89\x01\xb1\x24\x9a\x15\xb8\x07\x53\x92\x1d\x04\xc6\xb1\xe1\xf5\x1c\x5e\x83\x79\x6d\xdd\xec\x0c\xbb\xf5\xa9\x3e\x33\x70\x40\x63\x6a\x0f\x45\x94\xad\x69\x62\x38\x9f\xc1\xc8\x9a\xf0\xc6\x36\x3e\xd5\x7a\x1c\x86\x25\xc2\x43\x94\x18\x68\x0f\xf5\x23\x7b\xb1\x82\x28\x3f\xde\xf1\x11\xd3\x3e\x4a\xfd\xe3\x4d\x4c\x8e\x7a\x20\x8b\x84\x4f\xfd\x9d\x92\x28\x97\x50\xa2\x55\x65\x0f\xbf\x49\xa6\xf1\x51\x3a\x64\x97\xba\x24\x71\xb3\x84\x5f\x0f\xe3\xc6\x14\xc1\x86\x8e\x22\x7a\xe2\xa2\xc5\x3f\x90\x92\x62\x82\x23\x8e\x5d\x7e\x03\x9e\x00\xf8\xf8\x4f\x8c\x01\x17\x69\x49\x28\xbd\xac\xc0\x7a\x76\x99\xf3\x78\x76\x59\x08\x5c\x9a\xcf\x23\xb3\xb3\x18\x23\xb5\x49\xed\xc2\xc2\xf2\x4e\xb8\x76\xb5\xa0\xda\xfd\xbe\xc5\x5d\x05\x8e\x1a\x04\x2b\x31\x8b\xe2\x5c\xb5\x64\x25\x70\xd9\xf1\x96\x0c\x6c\xb3\x20\x35\xd5\x46\x12\x01\x8b\x5f\x53\x8b\xfa\x7c\x2c\x8d\x8a\x6a\xa2\x7c\xd9\xc0\x2f\x39\x5c\x9f\x24\x28\x4f\x6b\xba\x25\x90\xe5\xf6\x42\x08\xc9\x5b\xa3\x88\xb1\x4f\xb2\x93\x3a\xd7\xcd\xd6\xab\xa9\xe9\xc1\x14\xbc\xa2\x22\x16\xe5\x52\x91\x70\xbf\x8e\xb6\x04\xad\x97\x4d\x09\x13\x6c\x43\xe1\xb6\xb6\x30\xea\xee\x7c\x37\x08\xe5\xc0\x51\x35\xea\x65\xe7\x52\x79\x7c\x12\x60\x12\x41\x22\x6d\xe0\x0f\x18\x63\x54\x14\x20\x7c\x86\x7c\x3f\xa7\x4f\xc7\x20\x96\xc4\x4e\xe3\xf9\xe7\x50\x2c\xe6\xa0\x4d\x46\x2c\x53\x1c\xd9\x1f\x7e\x2c\xbe\x93\x21\x5c\x57\xb3\x19\x0b\x27\x39\x9f\x47\x0f\x62\xc6\xbc\x44\x13\x5a\xfd\xd9\xc6\x2b\x6a\x35\x81\xc3\x7d\xc7\x87\xa9\x39\xdc\x68\x70\x97\x5c\xf9\x21\x60\xb7\xbe\x65\xbc\x60\x0c\x05\xca\x99\x2a\xc4\xa6\xce\x47\x10\xf9\xbf\xe4\xf6\x58\xdd\xba\xa7\x38\xc8\x69\xdb\xda\x40\xe7\x38\xef\x41\x8d\x13\xaa\x0c\x97\x09\x41\xd8\x84\x81\x03\x00\x57\x34\x96\x70\x93\xc2\x0f\x59\x7b\xf2\x61\xa6\xc5\x50\x4e\x3b\xf0\x01\x58\xb1\xdb\x05\x84\x0f\xc1\x3a\xbe\x4d\x64\xc0\x0a\xfc\xe6\x15\x0f\x59\x57\xc9\x43\xeb\x0c\x39\x9e\xbf\x54\xbd\xdf\x97\x75\x15\xd3\xf8\x2c\xe6\x28\xe3\x21\x16\x98\x66\x39\x46\x36\x88\x66\x56\x7e\x0e\x65\x61\x00\x0e\x92\x01\x66\x7d\xdc\x85\xf0\x29\x7e\x8b\x09\x8e\xe8\x14\x16\x83\x4b\xe2\xe0\x27\xea\x62\x45\xfd\x41\xe3\x96\xdc\xeb\x1a\xd7\xe6\x32\x49\x81\x7a\xec\x2a\xf1\x0e\xeb\x2f\xb8\x48\xe2\xbb\xa3\x75\x77\x07\xdd\xef\xa9\xd9\xd9\xc0\x55\x99\xe0\x16\x54\x5a\xad\xae\xc8\xf6\x65\x49\x7b\xa7\x46\x1c\xe0\xa0\x72\xc6\xc2\xf5\xb1\xf4\xdd\xa8\xc5\x7c\xea\xde\x59\xea\x5e\x3b\xc2\x5d\x03\x9b\x92\xec\x65\xcc\xe7\x28\xaf\xf0\x00\x75\x1f\xb2\x6a\x3a\xbe\xd0\x83\x4a\x72\xd7\xf9\x95\xfa\xb1\x7d\x65\x31\xd6\xd6\xf5\xb7\xc2\x33\x9a\x90\x6d\x47\x34\x9b\x14\x14\x2a\x3d\xbf\x5e\x6e\x26\x07\xe6\x52\x51\xa7\x59\x8b\xe9\x4a\x4e\x5f\x63\x45\xc9\x63\x50\x72\xe4\xc0\x4b\xe4\xb0\x11\x48\x93\x10\x74\x69\x4c\x9e\x0c\x2e\x88\x32\xbe\x21\x3a\x68\x3f\xc0\xb0\x72\x76\x26\x61\x38\x68\xfb\xfa\xba\xdd\x6d\x9b\xa7\x2d\xdf\x10\x25\xd8\x95\xb3\x53\xeb\x1a\xf4\x99\xa7\xa6\x4d\x9d\x09\x64\x8e\x4a\x0a\x71\x29\x66\xb8\x1d\x20\x6e\xf6\x1c\x9c\x7f\x32\x62\xd7\x3d\x5a\xd6\x6e\xe3\x8e\x63\x4c\xbf\xc0\xd6\xf9\xfc\xec\x7f\xab\xcd\x1b\x70\x8e\x0c\xd3\x2f\xb5\x41\x69\xce\xb2\xed\xd1\xb2\xf5\x24\x4f\x67\xc1\x0e\x8b\xd6\xa4\x64\xe2\xf3\xa4\xb6\x78\x39\x14\x19\x9b\xa1\x84\x1d\xab\xa3\x03\x9f\x95\xd9\x69\x52\x99\x9c\x62\x0f\x46\x94\xc9\x19\xed\x6c\x46\x4d\x9c\x69\xdd\x23\xdc\x91\xd2\xed\xaa\x75\x4f\x93\x8f\x50\xc2\x33\x68\x76\x6a\xc4\xd5\x5c\xca\xc4\x11\x59\x35\xce\x9e\xd8\x7a\x55\x76\xb3\x1e\x6b\x5e\x1f\x5e\x4d\x5e\xa2\x34\xab\x44\xec\x6e\x07\xe5\x87\x7c\xb7\xf1\x94\x52\x91\x44\x0a\x3f\xed\xfd\x39\x48\xb8\xac\x4d\x00\x97\x41\x25\x71\x4a\xa0\x02\x27\xb4\x70\x99\xd9\x4b\xc3\x50\xd8\x25\xfe\x18\xc6\x28\xc5\x6e\x78\xe1\x89\x96\x5f\xb9\x25\x81\x15\x37\x7d\x0d\xe4\xfa\x88\xbe\x2a\x09\x86\x62\xe7\x41\x8f\x39\xfa\x74\xa8\x4f\xff\xc0\xde\x0d\x7a\xcd\xa1\x01\xbd\x2a\x2d\xe6\x1b\x2f\x81\x4c\x1a\x53\x4d\x90\x48\x33\x15\x2d\xf8\x08\x9b\x74\xa4\xa2\x95\x3f\x85\xfc\xa9\x3d\x85\xb5\x7f\x81\xf3\x18\x06\x3c\x9d\x98\xc1\x06\x1b\x50\x12\xe4\x39\xfd\xa6\x56\x17\xe2\xe4\x24\xc3\xfa\xd1\x4e\xb6\x53\x25\x50\x88\xc6\x17\xad\xee\x0f\x12\xee\x17\xf8\x9e\x49\x21\x9e\xd8\xf2\x19\xdc\xf1\x3c\x02\x94\x72\x41\x02\xd3\x5c\x5d\xd9\x6f\x5d\xf2\xce\x76\xe1\x55\x74\x49\xe8\x99\x61\x16\x5e\x93\xc2\xfb\x2a\xae\xcd\x35\xf8\x86\xe8\x8c\x42\xf2\x03\x53\x6d\x24\xd3\xdc\xbc\x56\x8d\x53\x95\xbf\x82\xe6\xae\x41\x61\xb4\x99\x83\x12\x33\x09\x75\xa6\x41\x1a\xeb\x17\x64\xac\xda\x9e\xee\x3d\xe5\x8c\x92\xae\x60\x03\x00\x3f\x3c\xea\xf4\x88\x41\xcf\xef\xfb\x81\x34\x9b\xcc\x84\x8e\x5b\x93\x7b\xfd\x27\x5b\xcb\x20\x67\x1b\x85\x4e\x5c\xc9\x83\x32\x30\x24\xb9\xe7\x85\xdf\xab\x29\xc5\x93\x81\x7b\x50\x14\x77\xdc\x44\x26\x3f\xc8\xf3\x2a\xbe\x21\xd6\x7a\x9e\x83\x03\xab\xbe\x87\xd9\x75\xcd\x9a\x2d\x69\x9e\x7c\x20\x4c\x94\x1c\x43\xc5\x08\xd9\x42\x87\x71\xc3\x18\xa9\xd4\x60\x43\x24\xce\x91\x5e\x45\x79\x35\x51\x53\x69\xc5\x88\xc1\x55\xf7\x42\x6d\x7c\xec\x1b\x11\xd1\xf8\x28\x98\x28\x56\xb0\x08\xe5\xd2\x1d\x49\xb4\x79\xf0\xb9\x49\x58\xf2\x98\x98\x46\xbc\xb8\x32\xb1\xba\xe8\x7b\x73\x3b\xe9\x46\x23\x73\xf0\x00\x61\xc8\xcf\x67\x4e\x21\xfc\xbc\x24\x63\x83\x4e\x46\xe1\x68\x90\x23\xab\xec\x00\x52\xed\x57\x61\xca\xe6\x4b\x2c\xd1\x24\x33\xc8\x7c\xce\x0f\xab\x61\x72\x33\x0c\x95\x32\x83\xd7\xfe\xce\x02\xea\x1f\x03\x52\x32\x9f\x17\xe0\x37\x54\xcc\x20\x24\xd7\xdc\x45\x46\xd9\x98\x06\xb3\xfe\x04\x61\xf5\xb9\xbe\x26\x3f\xb5\x0b\xf3\x19\x0a\xfa\xf1\xfd\x01\xfd\x1e\xb3\xd6\x72\x53\x7a\x64\xdc\x97\x43\x11\x3d\x70\x29\x7f\x6c\xbe\x50\x1d\x0c\x2b\x34\x8d\xfb\xf2\x41\x4f\xa9\xb2\x4e\x93\x38\xb3\x99\x76\x2f\xb2\x01\xea\x03\x43\xa5\xa3\x7d\x7e\x3d\xa5\xc8\xab\x43\x25\x3b\x00\x17\x1f\x9b\xc4\x30\xcf\xe0\x29\x22\xe3\xd7\x7c\x49\x25\xb6\x00\xf1\xa5\x4d\x5d\xe1\x57\xda\xd3\x1f\xfe\xaf\x20\x08\x60\x75\xba\x46\xbd\x27\xb1\x06\xfe\x54\x5d\x55\x3b\xbf\xc8\x93\xe2\xc1\x1f\x8b\x13\x32\x69\xda\xfb\x7a\x41\x7e\xa6\x62\x3e\x57\xff\x6b\xa6\xbc\xae\x6a\xbf\x16\x63\xff\xf1\x9a\x6e\x49\x39\xab\x57\xed\x5a\x9d\xce\x5d\xb5\x21\xab\x0e\x8e\xda\x0e\x89\x6a\xa7\xd8\xe4\x0e\xf3\x6a\xb7\x20\xf2\x88\x75\xb8\x96\x4f\x81\xb2\x83\x9e\x43\x54\xab\x35\xe6\xd5\xca\xe8\xf9\x61\xc6\x10\x23\xcb\xaa\x53\x4c\xab\xad\xad\x34\xff\x35\x85\x4c\xc8\x65\x5d\xd5\xab\xed\x8a\xad\xd7\x48\x75\x39\x9f\xeb\x14\xed\x35\xc2\xb5\x1a\x50\x52\x54\xfd\x68\x02\x13\xaa\x54\xed\xb9\x6e\x29\xb0\x9a\xc6\x92\x63\x98\xc4\xb2\xee\x7b\x37\x18\x8f\x07\xe3\x2b\xb6\x56\xa3\x28\x08\xc0\xc4\x06\x40\xac\xea\xa3\xed\xf8\xfe\x67\x05\xe4\x37\x82\x81\x45\x3c\xb0\x90\x03\xc3\x9c\xf5\xc0\xa3\x67\x28\xba\x11\x33\x6a\xac\x90\xdb\x55\x1f\x4c\x89\xfc\x60\xfa\x5f\xc0\xeb\xfe\xd7\xb4\x30\x59\xa6\x4e\xaa\xa2\x65\xd3\xe2\x44\x87\xea\xc3\x1c\x4e\x8a\x29\x6c\xf8\x94\xb2\x29\x00\x6f\x5a\x60\x76\x52\x11\x1f\x7f\x16\xd3\x02\x3b\x4d\xd8\x7c\x5e\xca\x9e\x1e\xd5\xf2\x70\x40\x0a\xaa\x69\x5c\x31\x80\xa3\x93\x62\x51\x20\x1c\xb3\xe6\x4c\x9f\x03\x57\x69\x28\x1d\x47\x3b\x48\xbf\x26\xbc\xf4\x6b\x36\x98\x96\x40\x7c\x8f\x58\x71\x3f\xfd\x1a\x5f\x4f\xce\xac\xc5\x3d\xf6\x74\xd7\x59\xff\xcd\xd1\xd7\x8a\x07\xb5\x01\xe1\x65\x01\xb0\x81\x5d\xc8\xf8\xb0\x45\x7e\x9c\x31\x77\x10\xc7\x04\xc7\x33\xc1\xa1\x40\x89\xe5\xe5\xa5\x47\xd2\xd8\x43\x62\xec\xd1\xba\x7a\x02\x59\xc2\x4d\xa2\x65\xdc\xa2\x9e\xd8\xd4\xc9\xbd\xd2\x1e\x8d\x95\x24\xcb\x84\x63\x81\xb7\xfc\xec\x2c\xe1\x37\x75\xa0\xc2\x99\x22\x6d\xb7\x4a\x65\x35\x22\x3a\x63\x70\xd0\x09\x7d\x25\x87\xca\x08\x6b\x4a\xf6\x73\x8a\x33\x34\x11\xbe\xd8\x7e\xa3\x94\x43\x36\xe4\x8a\x21\xc5\x58\xdb\x59\x9d\x97\x3c\x48\xe1\xd3\x41\xea\xf3\xe0\x09\x54\x7b\x8a\x9e\xad\xd8\xba\x12\x8b\xcb\x5b\xe3\xfc\xe2\x19\xc2\x19\xa6\x08\x2d\x4b\xee\x95\xf1\x81\x3e\xbd\xca\x02\xaa\x43\xaf\xbe\x10\x5b\x57\xd4\xb7\x20\x0c\x15\x07\x5c\x61\x58\x62\xc0\x2c\x1b\x8d\xfd\xb0\xe0\x34\x38\xb4\x49\xc0\x0b\xb9\xb8\x6f\x6a\x51\x2f\x7d\xb5\x33\x53\x3e\xa6\x22\x97\x9f\x86\x2f\x2e\x37\xad\xdc\x6e\xf1\xfd\x70\x72\x6f\xda\x7f\x7f\xfd\xf2\x45\x49\xb0\x5c\x9e\x16\x62\x0e\xb6\x16\xb2\xb5\x72\x88\x38\xd0\x34\xa9\x4e\x18\x66\x22\xd9\xef\x0b\xb6\x93\x58\xe2\x27\x22\xb9\x57\xc6\x44\x4c\x9b\x25\xe9\x97\xea\xaf\x72\x98\x78\xeb\x3c\x7e\xb0\x24\xc8\x53\x33\xd2\x66\xc9\x17\xb4\x51\x55\x8e\x39\xf8\x09\x0d\x68\xf4\x50\x5c\x02\x62\xc2\x07\xd1\x3d\x26\xdd\x92\xcd\x99\x6c\x49\x0b\x78\x23\x27\x8e\x0b\x31\xe9\x29\x68\xa3\xb5\x7d\x4d\x45\xb0\x98\xcf\xb5\xfb\x31\x09\xc8\x97\x17\x5d\x1d\xab\x4b\x49\x18\xb3\x07\xe9\x97\x8f\x90\x8f\x06\x4c\xa1\x96\xd1\x8d\xaf\xd6\x90\x79\x55\x4e\xb7\x24\x0a\x7c\x1a\xfa\xff\x05\x83\x75\x56\xcd\x21\x59\xa4\x7b\xe3\x03\x3e\x3b\x0d\x3d\xbf\x49\x6f\x39\x4a\xcb\xa6\x0d\x80\x1f\x7b\xfd\xc6\xc1\x57\x9f\x3a\x87\xb3\x70\x0e\x60\xdc\x8f\x84\xe6\x58\x12\x37\xb0\x88\xf8\xc9\x49\x46\x7b\x68\x0b\xec\x0d\xf5\x3f\x46\x48\xcf\x4b\x4d\x98\x1c\xa1\x53\x54\xd3\x6d\xfc\x5a\x86\x6f\xda\x9c\x7a\x2d\xca\xf4\xe4\x49\x0a\xb8\x00\xe0\x76\x05\x5a\x5c\xd6\x4d\x63\x55\xad\x07\x4a\x3f\x06\x80\x39\xae\x77\x13\xc9\xac\xd4\x2c\x83\x3a\x8c\xfe\xa6\x1f\xd7\xa1\x0d\x1a\x6e\x5d\xdd\xc9\x83\x91\x1f\x2a\x04\x23\xa1\x12\x7a\x47\x84\xea\x62\x18\xfe\x61\x5f\x95\xf7\x3d\xb2\x62\xc1\xf2\xa8\x59\xbe\xf3\x12\xb2\xa3\x3f\x9e\x86\x48\xa6\xcb\x60\xd6\x29\x75\x68\x32\x72\x44\x67\x4b\x54\xd9\x07\x13\x41\x1d\xe1\x74\x21\x8e\x81\x4f\x21\x74\x82\xc4\x05\xd7\xb9\x61\x93\xf2\x48\x54\x72\x4c\x56\x7c\x6d\xac\x39\x1f\x22\x5c\x0e\xcb\xaa\x22\x0c\x06\x69\x0d\x9e\xf9\xbc\xa4\xd5\xea\x5e\x50\xb1\x25\xcb\x42\xb7\x99\xea\xba\xae\x8d\x94\xc2\xb7\xcb\xa2\xc0\xca\x81\x60\x79\x7f\xdb\x02\xbd\x5e\x16\x5f\x41\x96\x9a\xbe\x5f\x27\x2e\x56\x55\x44\x13\xea\xa5\x4b\x36\x83\x34\xe5\x7d\x2f\xaf\x1d\x29\x93\x4c\x07\xf3\xd2\x62\xe0\x71\xdd\xa8\x4e\x74\x9a\x41\x09\xb5\x36\x03\xb5\xf6\x08\xa8\xb5\x98\x80\x70\x35\x02\xaa\x23\x26\xe5\xab\x16\xd4\x76\xc6\xba\x05\x2d\x28\x4f\xf2\x08\xa0\x12\x80\x8e\xa2\xf3\x7e\x6f\x52\x58\xa9\xa1\xf4\x1c\xfd\x11\x4b\xe2\x2b\x8f\x12\x0d\x86\x54\xd2\x57\x45\xd0\xe1\x07\x46\x2f\xe7\x4e\x42\xe6\xe6\xc9\x6e\xa8\xef\x58\x7c\x14\x30\xa5\x60\xa2\x93\x98\x25\x52\x19\x7f\xad\xb3\x53\xd8\xcb\x15\x32\x8b\xe8\xdb\xf9\xa4\xf8\x63\xa1\x48\xa2\x8e\x83\x8d\xbd\x0e\x02\x45\xa8\x8b\xa4\xd5\x6e\x06\x33\x2b\xcc\xbd\x32\xaa\xce\x89\x67\x7f\x04\x2f\x01\x55\x4d\xe8\xff\x78\xa6\x35\xe5\x52\xc3\xb0\x40\x01\x67\x47\x20\x0d\xa1\x6c\x4c\x48\xb2\xb5\x0d\x7d\xf0\x66\x51\x71\xeb\x00\x17\x67\xa1\x72\x8c\xe6\x11\xf9\xa4\xa0\x9d\x4b\x0e\xe5\xc2\x8f\x3d\x7e\xc5\xba\x77\x85\xf0\x44\xe8\xf8\x2a\x5a\x7e\xd9\x2c\xec\x17\x21\xb3\x81\xc8\xb9\xcf\x03\x7f\xec\xe8\x9b\x48\x97\xe9\x05\x35\x93\x8f\xd3\x7f\x8f\x61\x19\x85\x98\xd8\xd6\xae\xa0\x99\x57\x61\x21\x9e\x8d\xcb\x24\xa3\xfa\xf0\xda\x06\xca\x2d\x2d\xa0\xfa\x19\xf8\x41\x70\x88\xf8\x3c\x8d\x86\x11\xb7\x17\x9b\xc1\xad\x95\x9a\x60\x12\x7a\x91\x78\x2f\x7b\xdc\x91\xb0\x6a\xca\xa0\x49\x35\x58\xa3\x62\x4b\x8e\x82\x79\xf0\x85\x85\x78\x14\x75\x4e\x3e\x4e\x7f\x40\xa9\x80\x74\x6f\xbb\x0d\xf6\x1e\xb9\xd3\xa6\xb9\xb7\xc9\x36\x9e\x3d\x95\xbb\x6c\x10\xf5\xee\xd6\x1c\x8b\xf2\xc7\xad\x3b\xfe\xca\xad\x7d\x10\x8e\xbf\xb2\x77\xdb\xe0\x9d\x9d\x85\x1f\xa7\x3c\x5e\x70\xce\x73\x0c\x37\x1f\x5b\x6e\x38\xf3\xe9\x2c\x60\x19\x54\x1a\xb7\xed\x20\x8d\x1b\x55\x0f\x31\x45\x51\x52\x96\x0f\xc4\xf7\x30\xa4\x57\x65\x36\xbe\xcc\xf3\x57\x11\x6b\xcc\x33\xee\x22\x67\x48\xf6\xc3\xf3\x8e\x27\xa7\x8a\x01\x69\xab\xb1\x08\x36\xad\x04\x6b\xe7\xf3\x90\xb6\x72\x10\x85\xe7\xf3\xb2\x35\x7e\x5c\x81\x77\xc5\x7c\xde\x46\xfe\x5e\x2a\x1f\x45\x1b\xb9\x7a\x25\xd2\xc8\x2a\x4c\x42\xd8\xfa\x82\x8e\x2c\xe1\x0c\xa9\xe5\xfb\xe2\xf0\xb3\xee\xb5\xa8\xb7\x44\x39\xd6\xb8\x8c\x9a\xef\x48\x90\xed\x56\x4a\xf0\x77\xc4\xab\x80\x76\x47\x4c\x34\x2f\x41\x1e\x2a\xca\x9b\x86\x80\xeb\xa4\x95\x33\xe5\x2d\x3c\x9f\xeb\x18\x77\xb3\x3e\x47\x37\xce\x1f\x95\x42\x3b\x36\xdb\xb4\xb5\x44\xc5\xce\xbe\x25\x5a\x43\xa3\x2c\x96\x4e\xee\x80\x8d\xb8\x24\xf8\x23\xc1\x4f\x6c\x1b\x95\xba\xb6\x29\x23\x45\x69\x42\xef\x10\x71\xcc\x51\xb9\xc4\xa8\x70\x52\x8f\x16\x9c\xd4\x2a\xb9\x14\xc2\x3f\x0f\x87\x53\x3c\xf6\xc2\x24\x52\xcc\x59\x87\x61\xf9\x61\x5b\xf4\xc7\xd3\xa8\xfb\xd7\x71\x32\x09\xc5\x70\x9f\xff\x4c\x96\x4f\xc8\xe4\x32\x9d\x6a\xe2\xc8\xf5\x1b\x9a\xaf\x6b\x92\xb8\x94\x6d\x2e\xe2\x9d\x04\x21\xee\x9f\x00\x26\xdf\xa4\x13\xac\x68\xf9\x44\xee\xd2\xaf\x34\xed\x17\xe4\xe3\x39\xb1\x51\xf1\x9f\x36\x5d\x30\x62\xc5\x53\x05\xbc\xba\x20\xc9\x22\x76\x2d\xbe\xff\xf4\x92\x74\x69\xa1\xcf\x4e\x10\x38\xd2\x57\xe4\x6f\x3b\xd2\x09\xa0\xc8\x3d\xd6\x32\xf6\x0b\x22\x3e\xb6\xfc\xbd\x4e\xc4\x3c\x18\x34\x67\x57\xfb\x51\x31\xf6\x3d\xd6\xc9\x20\x24\xf8\xad\x87\x80\xfb\x83\x34\xf2\xf7\x30\xf5\xc2\x72\x6c\x4f\x16\xda\x39\x24\x81\xe2\x5e\xf1\xa4\xe4\x17\xa8\x47\xd8\x64\x69\x50\xb3\xd0\xd8\xb2\xbc\x94\x7f\xbc\x20\x1f\x97\x1f\xe5\x0f\x98\xfe\xf2\x35\xc1\x97\x37\x35\x7f\xff\x2c\x80\xcf\x45\x07\x0a\x8f\x65\x36\x2a\xf6\x20\x74\x4d\x1e\xbc\x04\x80\xc1\x2e\x6d\xb3\x17\xa8\x29\x5a\x25\x8d\xe7\x4f\x21\xff\x0c\xb2\x0c\xe8\x58\xef\x38\x1d\x01\xe8\x88\x54\x0c\x82\xf2\x26\x84\x73\x1f\x83\x37\x69\x6b\xc4\xa2\xba\x33\x5c\x02\xd2\xc5\xf2\x38\x79\x47\x3b\x41\xf8\xb7\x60\x78\xe1\x9d\xff\x25\x49\xcb\x76\x3d\xce\xb6\x31\x48\x92\x46\x4f\x53\xb5\x9a\xda\x13\x47\xaf\x4a\x1a\x08\x73\xbc\xf2\xfe\x2e\x11\x72\x89\x0a\xaa\x77\x25\x47\x51\xb6\x82\x36\x99\xad\x40\x28\x3d\x0f\x64\x2b\x68\x57\xf2\xbf\xb5\xe7\x72\x14\x10\xc5\x94\xe4\xb6\x8c\xfc\x26\xd2\x2b\xd1\x5a\xe3\x81\x92\xa7\x44\x5e\x2a\xdd\x77\xca\xd6\x13\x38\x37\xda\xda\x3b\x66\xca\x54\x4e\x19\x7a\x1b\xd3\x53\xac\xe8\x1a\x8b\x95\xfc\x0f\x4c\xf2\x23\x6d\xa3\xc2\x7e\xf1\x0d\x11\xaa\xc1\x12\x2b\x18\x50\x84\xe8\x63\xab\x94\x1a\x68\x18\xb1\x2d\xb5\x9c\xad\x82\x16\x93\xce\xa8\x7a\xb5\x57\xac\x19\x32\xf0\x81\x3e\x3d\x57\x03\x31\x55\x63\x3c\xaa\x05\x5d\x3c\x68\xc8\x55\xbd\xdb\x0a\xa8\x11\x76\xcc\x0c\x5c\xd6\x56\x37\x15\x0e\x1e\x64\x12\x6d\xee\xd4\x3a\x1b\x0a\xcc\x8f\xfd\xe3\x07\x50\x71\xda\x3f\x95\x1f\x80\xfd\x53\x11\x24\xf5\x67\x70\x94\xfc\x47\x1e\x14\x9d\xd5\xde\x40\x95\x35\xcb\x11\x17\xc5\x08\x0c\xf2\x38\xaa\xcd\xf5\xed\xf5\xc7\xee\x88\xff\x0d\xec\x81\x1f\xbe\x3f\xbc\xa1\xc2\x8f\xfd\xb6\x25\x7c\x0b\x5c\x68\xa2\x9c\x9b\x3f\x83\xf0\x2b\xed\xbf\x50\x6b\x45\xaa\x1f\xaa\x3c\x18\x7e\x18\xcd\x1a\x4d\x28\x4a\x5a\x8d\x07\x6a\xe6\x0c\x6e\x4d\xde\x92\x32\x61\xd8\xcd\x9a\x36\x39\x58\x35\xb1\x48\xdf\x9e\x2a\x58\x73\xe0\x1b\x77\x64\x8d\xed\xa4\x4f\xdd\xd0\x53\xe4\xd0\xde\xa4\x7c\x4b\x32\x4c\x84\xd6\x7e\xe4\xee\x49\x00\x64\x78\x6e\x8e\x5d\x4a\x74\xd8\xe4\x09\x57\x1a\xab\x27\x92\x13\xea\x68\xcb\x8e\xeb\xc9\xcc\x71\x50\xb8\x29\x2a\x8b\x98\x2c\x98\xd1\x0d\x4a\x0f\x26\xcf\x51\x9d\x2a\xa4\xe1\x26\xd5\xc3\xa6\x26\x8a\x3e\x9a\x12\x6c\xde\x90\xa9\x9a\x1b\xce\x16\x46\x8c\x96\x50\xa7\xbb\x81\xe0\xca\xfb\xf0\xd9\x32\x6e\xd4\x23\x7c\xdc\x3a\x74\x7d\xac\x7c\xfd\x46\xae\x56\xa2\x8d\xf7\x19\xd8\x69\x4f\xb5\xc2\xbc\xf5\xaa\xeb\xf9\xc9\x4b\xc7\xcb\xce\x3d\x90\x82\x70\x75\xe6\x17\x9e\x0b\xcb\x87\xd3\xf5\x44\xf8\xec\x2e\xd3\x79\xe6\xaf\xeb\xae\x24\xd6\xcb\x75\x84\x2b\xee\x71\x2d\x04\xf7\x71\xa8\xc7\x56\x58\x3e\x96\x04\xfa\x5a\xd0\x30\x8e\x02\xf5\x58\x6b\x2a\x3f\xaf\x2f\x17\x34\x23\x8f\x50\x43\xde\xee\xde\x3d\x63\x57\xed\xb0\x8c\xe7\xaa\xa0\x4d\xb1\xc6\xa2\xba\xef\x95\x1b\x92\x32\x12\xa6\xab\xfc\x0b\x4f\x98\xd6\xfe\x21\xbd\x29\xe0\xb2\x52\xee\xd7\x85\x3b\xf5\x05\xbe\x75\xd4\x8f\x60\xf2\xf3\x6d\xcd\x9a\xe5\xec\xb4\x5f\x07\xfa\xb6\x41\x28\xbd\x77\x01\xb9\xb0\xcb\x15\x05\xe5\x83\x49\x07\xa5\xaa\x8a\x97\xde\x0b\xc9\x1b\x33\x35\x2b\x35\x13\xba\x90\xff\xf9\x73\x68\xbd\x39\x20\xa4\x5d\xa9\x4b\x95\xb9\xc5\x54\xc6\x0b\xfb\x28\x9e\x42\x0a\x0d\xbf\x93\x95\x17\x65\x59\x0c\xa5\x8f\x42\xca\x65\x4a\x48\x28\x7c\x89\xd2\x79\xd3\x19\xc1\x0d\x5b\x51\x67\xdd\x23\x88\x9b\x01\x4a\x0e\xdb\x74\x4f\xd9\x66\xbb\x6b\xc8\x4b\x71\x4d\xb8\x77\x87\xcc\x4e\xf1\x3b\xde\xee\x6e\xbb\x25\x93\x6b\x91\x84\xec\x83\xa7\x52\x58\xf2\xbe\xef\x71\xd2\xb9\x75\xa8\xa8\xcc\x38\xa0\xf6\x38\xde\x90\x14\x9b\xe7\x15\x5c\xca\xe5\x42\xf0\xd5\x4b\x4f\x5b\x9e\xc2\xe3\x48\xda\xf5\x3a\xc5\x45\xe0\x6f\xf2\xcd\xdd\x8b\xfa\x86\x68\x13\x20\x94\x9e\xb0\xf1\x28\xd9\xf3\xe1\x4f\xd1\x0f\x5f\xc1\x59\x96\x0e\x19\xd8\xf9\x6e\xcf\x9f\x08\xb8\x51\xe6\x38\x86\x5a\x14\x95\xd3\xa3\x49\x3a\x53\xf2\x85\x97\x1b\x14\x17\xaa\xf8\xc4\xbd\x9f\x81\x59\x8a\x74\x69\xd5\xa6\x96\x7f\x16\x97\xf2\xab\x5e\x9f\xd6\x97\xa4\x1a\x7c\x1e\x2b\xb3\x35\x45\x06\x77\x44\x93\x8a\x3c\x7d\x19\xda\x14\xeb\xe3\xda\xd5\xa3\x6e\xd5\xde\xe9\x46\xdf\x07\xca\xbb\xfe\x18\xc8\xd0\xa6\xc0\x2f\x09\xc2\x17\x64\xc1\x49\x7b\x4b\x18\x58\x3e\xca\x7b\xda\x29\x89\x76\x76\xea\x67\x7b\x00\x17\x88\xbb\x5b\x12\x65\x4c\x5a\xa6\xcc\x51\xb1\x6b\xec\x18\x76\x7a\xc9\xe2\xc5\x20\x44\xdf\xa2\xee\xf3\xfa\x76\x44\x94\xd6\x5d\xa4\x4a\x79\xa0\x34\xf2\xe7\xe7\xea\x06\x2c\x54\xd1\xbc\x15\x59\x23\x2f\xac\x20\x88\x77\xbc\xa2\xac\x79\x16\x9c\x16\xe4\x87\x20\x54\x0c\xb3\x1e\x47\xad\x92\xb3\x80\xee\x12\xe0\x55\x5d\x2a\x5b\x9e\xaf\x73\x85\x49\x60\x53\x62\x55\x99\x6d\x86\xee\x5a\xbb\xaa\x33\x11\xdc\x5e\x91\x81\x9d\x39\xe0\xb1\x16\xd7\xbd\x60\xae\x11\xa6\x55\xd9\x7a\x50\x1a\x25\x36\x0c\x21\xb8\x5f\x70\x5d\xb5\x76\x64\x30\x70\xeb\x02\xa5\xa6\xb2\xdf\x73\x5b\xfc\x40\x39\xf2\x5a\x3c\x26\x51\xe9\xbd\x8a\x82\x9d\xb8\x1e\x99\x81\xda\xa7\x59\x6d\x96\xd3\xea\x48\xf1\x5a\xed\xaa\x9f\x24\x7f\x57\x01\xcb\xb3\xa0\x9d\x62\x7d\x3a\x74\xde\x2d\xae\xe8\x56\x10\x3e\x28\xca\x26\x2a\x3e\x84\x29\xdc\x92\xc8\x2e\x4d\xab\x7b\x85\x01\x96\x65\x1f\xed\x93\xfd\x9e\x55\xde\x9f\xbd\xce\x7a\xa2\xa7\xba\x9b\xcf\xd5\xbd\xaa\xd9\xa6\x16\xef\x10\x16\x0b\xe0\xa4\x36\xf2\x34\xce\xe7\xa4\xf4\xff\x06\xd8\xb4\x08\xb7\xbd\x4b\xa5\x26\x57\x7f\x0a\xf9\x1d\x75\xd1\xfd\x18\x51\x36\xd5\x76\xb0\x48\x61\x4c\xc3\xc3\x45\x8a\xe4\x22\xa7\x04\xdc\xfb\xec\x3a\xc0\x1b\x76\xe3\x9c\x2e\xb6\xd5\x06\x61\x56\x6d\x57\xa7\x6b\xc5\x4a\x50\xf5\x5b\xa3\x03\xfc\xd6\x3d\x6a\xa5\x8f\xf2\xa2\xe3\x18\x78\x07\x86\x65\xc3\x25\xb5\x89\xc0\xea\xbe\x8f\xb2\xa6\xbd\x0e\xfe\x96\x1b\x7a\x58\xbd\x76\x6f\xf8\xc2\xd5\xda\x63\x38\x57\xeb\x7e\xc0\x54\x3d\xd2\x7d\x58\x30\x38\x50\x61\x8e\xee\x79\xe4\x0a\x3a\x9f\x93\x95\xb2\xf0\xac\x1d\x73\x87\x49\x8f\xb0\x2e\x4d\xf8\xe6\xee\x96\x74\xcb\x0b\x9c\x38\x2c\xcb\xf7\xe1\x53\x45\xb7\x96\x2f\xf1\x15\x25\xdb\xe6\xf0\xa2\x24\xeb\xfe\xbc\xbe\xfd\xa5\x4b\x38\x27\xba\x5e\x88\x5a\x07\x5a\x72\x1d\x3e\x08\x97\xac\x94\x7f\xd4\xeb\xc2\xfa\x9e\x16\x7a\x8d\xbe\xaa\xee\x00\xff\x73\xdc\x55\x30\xf0\xd7\x85\xe4\x4f\xa6\xd8\x26\xd4\xd9\xe9\x7d\x5e\x4b\x81\x37\x1a\xca\x89\x3b\xc9\x41\xf5\x96\x40\xf1\xf9\xd3\x87\xcc\x29\xfa\xac\x0f\x34\xad\xf8\x8a\xad\x27\x76\x58\x70\x2c\x6d\x88\x20\xfc\x86\xb2\xc0\x3d\x39\x31\xba\xc9\x47\x09\x35\x1a\xe4\xff\x12\xef\x75\x20\xba\xc7\x50\x71\xef\x8a\xa0\xe7\xa1\xc5\x50\xf1\xe6\xd1\x43\x76\x5e\xb4\x8c\xbc\x69\x5f\x32\x52\x2c\x8b\x9b\x9a\xdd\x99\xdf\xc9\x66\x20\xc7\x98\x76\xfa\x8f\x64\xc3\x17\xad\xd7\x21\xfc\xa1\x84\xb4\xb4\x59\xe0\x4b\xe2\xa0\x87\x62\x25\x07\x5a\x51\x09\x6c\x71\x11\x25\x70\x0c\x94\x5f\x57\x2d\xbf\x09\xd4\x34\x9f\x3b\xc5\x94\xa8\xa6\xe6\x26\x09\x92\xc3\x7b\xc3\x83\x24\x51\x3e\xc7\xb9\xc6\xa8\xe7\x40\xfa\x69\x68\xfe\x26\xb1\xe4\x03\x43\x25\xa1\x74\xfc\xa8\x46\xe5\x33\xe4\x49\x95\xaf\xce\xd2\x04\x63\xb8\x11\xed\xcd\x5a\x20\xc3\x2c\x3f\x22\x55\xf1\x84\x4a\x41\x4c\x15\x0f\x9f\xb6\x7c\x5a\x4f\x8d\xef\xc8\x94\x76\x53\x4e\xfe\xb6\xa3\x9c\x34\xd3\xba\x93\x4d\x8c\x92\x60\x51\xe0\x37\x07\x2a\x87\xad\x2e\xd7\x51\x65\x0c\xa8\x20\x12\x3c\xfa\x48\xb7\x5b\xa5\xf6\xb5\x91\x76\x5d\xb2\x24\x88\x7d\xad\x5a\x77\xa9\x9e\xc9\x58\xa7\x71\xfd\x85\x41\x87\xab\xf5\x58\xf1\xb1\x4b\x79\x33\x69\x76\x37\x1f\x7e\xaf\x1d\x75\xbc\xb6\xa6\x9c\x8e\xc9\xd9\x17\x0d\x3b\x9e\x43\x8f\x5e\x95\xe5\xf8\xa4\x47\xdf\x4a\x56\x0c\x69\xe9\x5f\xf7\x8e\x67\xa7\xb6\xe8\x61\x0a\x4c\x46\xe9\x99\x06\xe1\xe9\xc4\xcb\x14\x66\x16\xeb\x52\x53\x4e\xda\xc5\x5f\x5b\x1a\x28\xc7\x5a\x2f\x5d\x65\x77\xc7\x36\x41\xd0\x48\x81\x29\xa6\x8b\xcb\xab\xed\xae\xbb\xfe\x3e\xbd\x04\x89\xea\xbd\x55\x08\x67\x7c\x09\xfd\x38\x28\x93\x76\xe2\x52\xe7\x9d\x08\xab\x89\xb1\xf9\x9c\x25\xfa\x2a\xd5\x1e\x8d\x4d\x24\xce\xd7\x7e\x76\x00\x8c\x7e\xd0\x4f\x66\x7b\x26\x87\xf0\x71\x1c\x9d\x3d\x03\x59\xb4\x68\x13\x17\xe5\xca\x1f\x55\x7f\x30\xf0\x21\x2b\xbe\xc6\x54\xfe\x77\x72\xa6\x6b\x86\xe2\x16\xfe\xfc\xbd\x64\xdb\xe5\x8f\x7f\x5d\x4b\x19\xc5\x40\x0e\xc4\x16\x34\xe9\xe6\xf3\x2e\x15\x1e\x5d\xd6\xa8\x87\x1d\x72\x94\x33\x48\x9f\x7e\xf0\xac\x64\xbe\xd3\xe7\x26\x9f\x97\xfd\x60\xc7\x23\x29\xdd\x55\xdf\xee\x9a\x3f\x2a\xe4\xc6\x74\x7c\xe3\x4e\xb6\x21\x0f\xef\x35\xfc\x47\x87\x5c\x89\x35\xb2\x39\xf1\xfe\x4c\xee\xfc\x2d\xd3\x95\x04\xc3\xbc\x73\xff\x94\x89\x99\x64\x7d\xc3\xc9\x1d\x08\x09\xf7\x6a\xbe\xcd\x5e\x11\xc5\x1a\xc4\x05\xfb\x1e\x11\xe3\x22\x3e\x7e\x4c\xe9\x7c\x4e\xd3\x9a\x28\xe6\x4d\x25\x17\xa6\x7f\xec\x4c\xf4\x04\xd2\x84\xd9\x76\xe3\xc6\xcb\x47\xe4\xff\x4a\x6b\x8f\x43\xf8\xfd\xc9\xa4\x83\xc8\xc3\x3b\xe4\xe8\x81\xbc\xce\xf4\x20\xce\xcd\x33\x95\x39\xed\xd0\x3a\x13\xc7\x31\xe8\x50\xf7\x73\xa8\x28\xa4\xff\xbd\x1f\xde\xe4\xbe\xce\x54\x79\x39\x72\x9a\xc7\xdc\x18\xb6\xc2\x8e\xbc\x39\x82\xe1\xd4\xa5\xd1\xd0\x6e\xd3\x32\x46\x36\xc3\x52\x1a\x5f\x6e\x12\x30\x78\x32\xd5\xd4\xb0\x14\xde\x2b\xe2\xdb\xb6\x67\xe5\x8c\xcc\xe7\x33\xe1\xf9\x05\x7e\xef\xb9\x65\xe2\xd6\x33\x7a\xb0\x96\xdf\xd4\x2a\x6d\x75\x77\xdb\xb2\xce\xea\x76\x70\xeb\x7d\xfe\x9c\x44\xf9\xf3\x3c\x5f\x81\x41\xfd\x59\x28\x97\x57\xc5\xee\x04\xdc\xd6\x10\x55\xef\xef\xc9\xcf\x82\xd7\x1b\xb1\x8c\x61\x67\x4d\x6b\x7d\xe0\xf9\xf8\x38\x5a\x81\x9c\x88\xd1\x38\x5d\x94\x34\x17\xcc\x48\x62\xc3\x69\xab\x75\x9a\x50\x28\x40\x5e\x79\x4e\x9f\x89\xf0\xae\x22\x8b\x2b\xca\x1a\x55\x3e\x1d\x77\x98\xe1\x1a\xe1\xad\x4a\xb0\xae\xdc\x7c\xa6\x17\xca\x96\xf8\x3f\x4c\xbb\x69\x7b\x35\xfd\x17\x28\x34\xfa\x2f\x85\x2b\x4f\x52\x55\xd5\x6e\x58\xbb\x54\xdb\x21\xed\x18\x53\x35\x4b\xd2\x4c\x77\x4c\xe9\x81\x1b\x0c\x27\x68\xfa\xb1\xee\xa6\x1f\x08\xbf\x9b\x6e\xe9\x7b\xb2\xbd\x9b\xd6\xd3\x1b\xda\x89\xfa\x3d\xb1\x3e\x9a\xe5\xae\xfa\x53\xb9\xc3\x02\x6f\x51\x6c\x9f\xb4\xc4\xe0\x7b\x52\x3e\x97\x3b\x0a\x3e\xbb\x6a\x3d\x70\xf9\x17\x66\x02\x9e\xc7\xe7\xe2\x12\x98\x46\x8a\x7a\xdd\x46\xae\xf9\x89\xda\xa4\xe9\x6d\x7d\xe7\xf2\xca\x73\x0f\x33\x5e\x90\x88\x00\x69\x75\x67\xd9\x56\x02\x32\xe5\x62\x2f\x28\x58\x58\x46\x57\x15\x58\x15\x7e\xa0\xea\x74\x48\xd1\xc8\x82\x36\x9a\x7e\xaa\x2a\xb3\x13\x32\x88\xed\x25\xc3\xd8\x5e\xeb\x10\x1c\xbc\xf1\x27\x62\x47\xc8\x0e\x6d\x46\x85\xa3\xf9\x13\xaf\x6f\x6f\x09\xc7\x6d\xa5\x64\x61\x5c\x57\x9e\xca\x12\x77\x15\xcd\xf0\x15\x65\xad\x33\x6d\x76\x26\xfb\x32\x1d\xbb\x96\x19\x5a\x75\x6b\xd0\xf5\x81\x96\xc1\x44\xf0\x3a\xf6\x61\xd9\x29\x15\xdc\xae\xef\x7b\x77\x59\x95\x1c\x0b\x50\xc7\x7a\x79\x9e\xbb\xaa\x5e\xb8\xef\xf0\xae\x52\x5d\xe2\x6d\xd5\xae\xba\xf5\x7c\x2e\xff\x85\xfd\x99\xf8\x01\x24\xbb\xf9\xdc\xa2\xef\x76\xbf\x2f\x65\x2b\xf8\x60\xbf\xbf\xef\xb1\xfd\x26\xcd\x86\x43\xba\x05\xd8\x57\xee\x01\xa7\xae\xee\x69\xb3\xa4\x2a\xd3\x6f\xdb\x07\xc3\x89\x73\x49\x28\x3c\x89\xa5\x46\x4b\xf5\xe4\xbe\xc7\x41\xd5\x1a\x79\x0e\x5d\xc1\xd7\xbe\xdc\xe2\x1d\x16\x08\xf5\x3d\x90\x2b\x22\x85\x9c\x60\x98\x1e\x87\x4a\xe4\x16\x9d\xb7\x40\x22\x6a\xb4\xac\xcb\x16\xa1\x89\xb6\xf7\xaa\xf0\xe8\x7b\x1d\xf5\xab\x3e\xe7\xd9\xa2\x10\x25\xad\xee\x7b\x4c\x57\x50\xe6\x73\x5d\xa9\x8f\x3b\x88\x33\xeb\xbd\x43\xf1\xd7\xf8\x50\x44\x64\xa6\xd5\x9c\xf6\xc5\x76\xab\x1c\xf3\xda\x45\xe4\x14\x52\x32\x49\x9c\x86\x05\x1b\xac\x7f\x79\xd6\x25\x41\x11\xb0\x0b\xa5\x1c\x53\x27\xb9\x46\xbd\x25\x1a\x5d\xf5\xa7\xb2\xc3\x02\xe7\x28\xda\xc5\x76\xab\x0e\x39\xcd\x51\x95\x3a\xa6\x2a\x34\xa0\x2a\x17\xdb\xed\x90\xa8\xd4\x48\x8a\x5a\xd6\xdb\x4b\xaf\xbb\x3d\x40\x69\xcc\x7c\x7e\x77\x6f\xf7\xa3\x2f\x3c\x30\x3f\xf3\xca\xa1\x27\x2b\xa7\x1a\x65\xa3\x0a\xd7\x83\x64\x11\x52\x14\xb2\xb3\x73\x5d\x7d\xf7\x9b\xaf\x25\xfb\x74\xb4\x96\xab\x97\xce\x81\x83\x2b\xe8\xbd\x4d\x3e\xd0\x69\x94\x4a\xd4\x6e\x54\x89\xca\xb5\x06\x45\xe7\x91\x20\x61\x50\xaa\x29\xe6\x74\x77\x4b\xbc\xef\x25\x89\x32\xb5\x56\x42\xdf\x9a\x8a\x47\x0f\x74\x80\x92\xb2\xfe\x4b\x02\xa1\x7e\xd9\x42\x91\xcc\xb9\x8e\x5b\x0d\xcc\xc2\xcd\x39\x1d\x5a\x63\xe5\x70\xdb\xf0\x3c\xfa\x7b\x59\xc6\xab\x1f\x2c\x7c\x71\x29\xef\x53\xe7\x51\x15\xc3\x0b\xc5\xe1\x70\x07\x63\xd3\x00\x4c\x36\x04\x0e\x60\x36\x1c\x15\xc0\x0b\x5d\x49\xfa\xb5\x46\xf3\xf9\x77\x83\xf0\x1a\xa6\x1e\x4a\xb2\x26\x19\x3d\xfc\x77\xe3\xfc\x0e\x5d\x40\x68\xcb\x2f\x72\x80\x57\x7e\x82\x41\x64\x8b\x31\xe7\xcb\xbf\x94\x8a\xc0\x96\xbd\xd0\xa5\x07\x83\xbf\x00\xd1\xf5\x13\x38\xd4\x7e\xb1\x0a\xa5\x99\x73\x3f\xb5\xca\x41\xcd\x6b\xa7\x5b\x6b\x8a\xa6\xeb\x79\x70\x72\xbb\xad\x37\x24\x5c\x46\xc4\x3d\xbd\x81\xf2\xee\xdd\x6e\x2b\x24\x75\xa8\xa7\x1d\xe1\x1f\x08\x9f\xfe\x6d\x27\xf9\xa4\xf2\xaa\xe5\xd3\x7a\xbb\x9d\x0e\x83\x35\xa7\x12\xac\x1d\x9a\xd2\x6e\x4a\x6f\x6e\x76\x70\xf2\x16\xd3\x37\xed\xf4\xa6\x6d\xe8\xd5\xdd\x54\xaf\xba\xc3\xd3\x5d\x47\xa6\xa2\x55\x57\x06\x2a\x24\x02\x80\xdf\x79\xe4\x7e\xef\x54\xaa\x39\x9f\x7b\xdb\xe2\xdc\x01\x21\x1b\xfc\xa8\x33\x0c\xf8\xda\x6b\xe5\xf3\x76\x21\x1e\xe9\x64\xd7\x43\xbb\x67\xac\xe6\xb5\x11\x3c\x0b\xf3\xad\xa7\x11\x80\x84\x74\x5e\xd4\x6d\x8f\x55\x62\x81\xa1\xf3\x94\xd1\x40\x0e\x13\x67\x99\x4d\x2e\x10\x1a\x26\xef\x76\xdb\x39\x71\xa8\xe5\x7d\x83\x4d\x98\x96\x71\x3f\x56\xe3\x97\xc9\x4a\x3e\x24\x8d\x23\x38\x59\x8f\x73\x58\xa6\xd3\x14\xef\x1c\xce\xe1\xcc\xdd\x83\xe9\xc9\x4b\x92\xd6\xe3\xcb\x21\x70\x86\x75\x4d\xec\x25\x1b\xec\x25\xbe\xd7\x4e\x8d\xb3\xd3\x1e\xf5\x18\x2e\xbf\xb0\xe6\x4b\xb0\x95\xf9\x4d\x94\x1f\xaa\x7b\x41\x65\xd9\xd1\xf9\x11\x3e\xab\x2f\xf5\xa9\xdf\x5b\xe8\xe8\x19\x85\x39\xc0\x6d\xec\xa5\x9c\xf0\x0b\x8a\xf9\x8c\x51\x8a\x3b\xa9\x0d\x44\x28\xfb\xd0\xbe\x27\x65\x21\xbf\x95\x97\x48\x9e\x5d\xf1\x79\x80\xc1\xa8\xba\x91\xf7\xdc\xf1\x16\xf5\xc0\x85\x13\x4a\x76\x5d\x36\xb4\xeb\xda\x0d\xad\x05\xe4\xa4\x78\xf9\x91\xa9\xaf\xbb\x0c\xb2\x0b\x17\x23\x63\x21\x96\xaf\x65\x27\xa2\xa0\xd4\x89\x2a\x1a\x02\x2e\x71\xe0\x6d\x27\xd1\x87\x99\xc0\x10\x39\x01\x9d\x09\x66\x40\x9f\x6f\x74\x86\x18\xd7\xda\x5b\xa5\xc9\x13\xf3\x91\x6e\x4d\xb1\xa2\x21\x81\x4f\x8e\x63\xaf\xb1\x1c\x18\x4a\xaf\xfa\x63\x84\x2a\x3a\xba\x31\x7e\x6d\x42\xe8\x4e\xed\x0d\x39\xe6\x44\x9a\xf5\x6e\x0e\x93\xd2\x3e\xd5\x75\xe6\x1c\xf8\x25\x4f\x51\x20\xe5\xde\xe9\x5f\xcc\x89\x73\x98\xc7\xf5\x63\xb5\x00\x60\x62\x40\xf8\x1b\x52\xfd\x9d\x98\x9b\x34\x7d\x8f\x26\x6e\xc9\x10\x5b\xf6\x7b\xa3\x84\x40\x47\x00\x48\xb5\x80\x2b\xab\x72\x3f\xfd\x0b\x72\x4b\xd9\x7b\xcd\xad\xc0\x4f\xf5\xee\x4b\xdc\x90\x90\xff\x2d\xbe\x1c\xa3\x6b\xb1\x40\x49\x02\xa8\x0e\x4c\x0c\x77\x20\x85\xf2\x78\x0f\xde\xc0\x88\x85\x17\x16\x78\x09\x4f\x06\xc1\xeb\x58\x23\xfa\x65\x47\x44\x96\xb8\x85\xa1\x38\x6e\xb3\x3b\x22\x1c\x55\xb3\x3c\x4d\x98\xd3\xc7\xd4\x6b\x39\xc5\xee\x2a\x58\xce\xce\x54\xed\x98\x67\x92\xf1\x92\xbf\x10\x06\x50\xab\x07\xf0\xd3\x26\xef\x32\xe7\xf4\xb2\x36\xe7\xe9\x27\x2a\xae\xfd\xb3\xaa\x73\x02\xd8\x64\x43\x90\xc7\x47\x8e\x5b\x20\x93\x36\x90\xef\xd8\xa2\x65\x1b\x62\xad\xc0\xe0\x2f\x5e\x60\xd7\x52\x62\xe3\xb7\x24\x59\xfc\x0d\xff\x70\xc0\xe6\xaa\xf9\x2d\xe2\x65\x28\x88\x92\xc4\x9f\x0d\x0a\x85\x39\xd3\xe8\x96\x7e\x08\x93\x5b\xe5\x4b\xf6\x6b\xab\xd5\x48\x0b\xcd\xfb\x7f\xdf\xde\xee\xc0\x9d\x23\xe8\x78\xdc\xd8\x1a\xa5\xca\x1a\xa6\xfb\x08\x5c\x2b\x5d\x4a\x2d\xe2\xe9\xae\x6d\xcd\xc8\x4f\xfc\x3a\xfd\x32\x95\x9e\xcb\x21\x2f\x38\xb4\x91\x43\xa5\xfd\x81\x9d\x39\x54\xfd\xff\x34\x48\x15\xae\x5b\x83\xf3\x56\xc9\x21\x43\xc7\x4a\xac\x7d\xbb\x2e\x9a\xcf\xbf\x25\x9e\x91\xb5\x86\x59\x76\xba\x26\xa0\xea\x05\xec\x9a\xca\x8e\x1a\xd8\x38\xc3\x53\xf6\xb4\xe5\xd6\xcd\xaf\xca\xb9\xea\xac\xd6\xda\x1d\x47\x24\xdc\x71\xc4\x8a\xad\x27\xf4\xf0\x1a\xcf\x30\xcd\xd6\xfe\x2f\x91\x4d\xf9\x49\x55\x8c\xb9\x31\x37\xc7\xc8\xb9\x22\xeb\x49\xab\x7d\x6d\x15\x95\xfa\x2e\x6c\x51\xb6\x90\x39\xda\x4b\xcf\xea\x6f\xa2\xb3\x9e\x9e\x3e\x14\xce\x56\x2a\xe4\x72\xdc\x7a\x21\x21\x01\xab\x78\x20\xb7\x49\x6a\xdc\x09\x1d\x80\xc8\xfc\x00\x44\xb6\xa2\xeb\x45\x92\x41\x2b\x21\x3f\x52\xdc\x8f\x09\x02\xec\x4b\xee\x99\xa0\x73\x29\x6e\x0d\x36\xd8\xa9\x4f\xa9\xe1\x5e\xc7\x8e\x23\x41\x1e\x1a\x1c\xdc\xfa\x52\x60\xb9\x68\x98\x4e\x12\xac\xe9\x34\xff\xa3\x08\xb3\x5a\x6b\x60\x09\x1f\x58\x2e\xfa\x61\x0d\x7a\xaf\x3c\x4a\xe0\xae\x6a\x43\xc8\x4d\xea\xfd\xde\x16\xdf\x2f\xd1\x7e\x6f\xa2\x5b\x20\x1d\x23\xa0\x4f\x8b\x30\x64\x5f\x2a\x09\x42\xb8\x06\x5d\x8b\x7b\x6e\xd9\x34\xd4\xfb\x08\x42\x16\x09\x3e\xbd\xe4\x68\xc2\xc2\x46\xc9\x1d\x66\x56\xb3\x66\xba\xdc\xef\xcd\x77\xe8\x8f\xa7\xbd\x09\x27\x5c\x5c\x76\x77\x6c\x33\x0e\xd5\x04\x11\x50\x98\x18\xea\x32\x39\xc2\xb4\x9a\xb1\xfd\x1e\xb4\x3d\x26\x5a\xa8\xad\xa2\xe2\x1b\x40\xa8\x9e\xd7\xb7\x20\x71\xa2\xc0\x3b\xb7\xb5\x4c\x1d\xaa\xaa\x20\xdd\xa6\x7d\xae\xaa\xc4\xed\xf7\xb3\x1a\xdd\x33\x1b\xbd\x7d\x34\x36\xf1\xa8\x60\x99\x5b\x8e\x53\xcb\x19\x95\xcc\x07\xda\xd1\xb7\xdb\x08\xb0\xdf\x40\xc8\xb7\x9c\xf8\x4e\x62\xd2\xb6\x3a\x7d\xb8\xfd\xda\x28\xa9\x1e\x6e\x0d\x26\x6d\xaa\x6e\xb5\x5d\xe3\xab\x6a\x13\xa1\xca\x4c\x52\xcf\x2b\x1b\xfd\x54\x5e\x69\xac\xc0\x3b\x85\x10\x1b\x84\xfa\x9d\xf5\x8c\x4d\xa3\xc0\x4e\x93\x4f\x5f\x6f\x99\x2d\x0e\x92\xa2\x54\x22\x48\x1b\x8c\x07\xd2\x28\x96\xcc\x46\xf0\x59\xec\xe3\x70\x68\x04\xc8\x80\xae\x99\xce\x21\x7e\xc9\x63\xed\x55\x9f\xe2\x47\x00\x9c\xa0\x89\x1e\xcf\x4f\x3c\x64\x18\x1d\x5b\xdc\x3d\x31\x97\x4a\x78\xb5\x29\xc4\xe8\x28\x55\x9a\x26\x8f\x20\x30\x41\x3a\xa5\x54\x87\x8f\xb9\x8f\x60\xf7\x8f\xbd\x6f\xbc\xec\x57\xc3\x45\x27\x8f\xe8\xdf\x89\x95\x3d\x5d\xf4\x05\xb1\xa5\xc9\x8c\x3c\x20\xe0\xce\xc6\x83\xa2\x87\x3e\x57\xaa\xd9\x4b\x78\xed\xb4\x13\xe1\x81\x17\x68\x3e\xff\x9b\x3e\x55\xde\x2c\x2f\xf2\xbc\x56\xce\x3b\x20\xdd\x3f\x47\xe7\x7f\x23\x25\xc7\xb4\xfa\x26\xbd\x30\xe0\xdd\x97\x62\xb0\x40\x9e\x58\x9c\xbf\x20\x7c\x98\xff\x66\x31\xff\xcd\x2c\xff\x8d\x96\x9f\x3c\xa1\x03\xf3\xe9\x8f\x61\x53\x0d\x5e\x60\x0a\xb7\x61\x4a\x3c\x3f\x82\x31\x4c\x3b\x1e\x53\xd6\x90\x9f\x5f\xca\x33\x2b\x1b\x3d\x38\x9b\x55\x95\x8d\x19\x21\x8b\xee\x16\x6a\x51\x72\x7c\x86\xf0\xec\xd4\x78\x21\x9c\xf5\xe5\xe1\x49\x63\x82\xc2\xfb\x63\x70\x40\xc5\x7a\xc2\xe7\x73\xa2\x0c\x04\x01\x6d\x4e\x34\x55\x74\x2f\x27\xf1\x44\x67\xe2\x6f\xc4\x5e\x72\x9e\xbe\x22\x53\xc1\x6a\x58\xac\x2a\x1e\x3e\xad\x7e\x71\x82\x64\x62\xba\x5e\x09\xad\xa3\x76\xd8\x0c\xf0\x13\x19\x96\x76\x86\xaa\x54\x22\x55\x87\x2b\x21\x57\x9d\xe2\x43\x7c\xb8\x07\x91\x81\xd7\xc6\x4f\x20\xc1\x11\x6f\xf6\xf6\xd5\xdf\x86\xf6\x28\xf0\x58\x37\xf6\xa8\xaf\x99\xb2\x49\x91\x15\x5f\x47\xec\xa5\xbc\xe7\x04\xea\x5d\x5f\x3f\xfe\xe6\x6d\x5b\x7f\x1a\xb5\x6d\xa9\x48\x23\xa3\x56\xf4\xfc\xd5\x02\x77\xe0\xf7\x94\x35\xc1\x03\x2f\x69\x9d\xff\xf8\x86\x48\x5a\x11\xba\x12\x6f\x6a\xd6\x32\xba\xa9\xb7\xcf\x13\x2f\x87\x0e\xcc\xef\xc9\x5d\xf0\xb7\xb3\xb3\x87\x8f\x13\xb3\x0c\x0a\xd4\x46\xd3\x0d\x2b\xe0\x65\x46\x78\xda\xf2\x67\x37\x92\x4e\x50\x11\x2d\x2b\xfa\xe4\xd2\x38\xf7\x0d\x3a\xbb\x14\xe4\xe6\xd6\x49\x7d\xc1\x5a\xe3\x04\x6c\x56\x4d\xc0\x87\xb9\xc9\x82\x2f\xaf\xeb\xa0\x74\x39\x31\xc1\x74\x71\xa3\x0b\x76\xe7\x3b\x48\x0c\xb6\x27\x1c\x07\x38\xfd\xb8\x8b\x41\x06\x35\x3b\x49\x79\x73\x04\xad\xe5\xe9\x7b\x3d\xd8\x83\x10\x89\xa8\x87\x3f\x2a\xca\x46\xfb\x8f\xf0\x41\x55\xee\x64\x41\xe1\x49\x8c\x6d\x2c\x44\x34\xc8\x68\x98\xc1\x33\xef\x5d\xe0\xcd\x2e\x31\x8c\xcb\x7f\x7d\xc5\xa0\x87\x66\x22\x85\x61\xa6\x5a\x78\x16\xd1\x66\x55\x55\xcf\xe7\x75\x06\xdf\xf8\x18\xaa\x25\x10\xe7\xc4\xcc\xd4\x43\x40\xcf\xcc\x97\x45\xbf\x14\x26\x79\xa9\xba\xd3\x58\xe4\x35\x48\x61\x50\x1a\x4b\x15\xf6\xcc\x4e\x9d\xad\x19\xf2\x8f\x0c\x74\x4f\x34\x76\x84\x4d\xd4\x12\x9b\x25\x50\xa7\xc7\xfe\x97\xaf\xd3\x1f\x96\xb3\x08\xac\x3a\xdb\x4a\xd8\x15\x82\xbe\xae\xeb\xee\xf5\xee\xf6\xb6\xe5\xc2\x83\x7d\xbe\x82\x43\xe0\x78\x37\xab\x20\xd3\x7d\xea\x23\x97\x30\x23\xd3\x60\x38\xf8\x27\x0d\xca\x73\x83\xf1\x78\x10\x77\x4a\x1e\xd3\x26\xd8\xe9\x34\xbb\x60\x2a\x65\x38\xe8\x4d\x4c\xc8\xf6\x55\xcb\x2f\xb6\xe6\x20\x79\x71\x33\xe0\x7c\x49\xc6\x96\x53\x72\xe4\x72\xee\x72\x0c\x59\xa5\x78\x58\x0b\x55\xa0\x70\xf2\xca\x6f\x96\x9a\x1a\x18\x66\x11\x52\x70\x74\x4b\x9a\x55\x55\xa2\xcd\x7e\x6f\x03\x32\xe3\x35\x97\xfe\xd7\xe0\x41\x84\x69\xb8\xae\x8c\xa0\x94\x52\xf8\xe8\x5b\xdd\xa3\x3c\xa0\xb0\x4a\xdd\xf2\x71\x1b\x15\x1d\xa0\xd5\x00\x3b\xda\x28\x57\xb4\x89\x58\xd1\xf5\x7e\x5f\xca\xff\xe4\x3d\x4f\x4a\x86\x50\xef\x72\x8a\x9d\x3e\x6c\xbf\x4e\x52\xb5\x60\xdc\xd6\x8c\x6b\x4a\x15\xa5\x1a\xaf\xda\xb5\xf5\x76\x32\x13\xa8\xe5\x04\x3a\x35\x81\x4e\x4f\xa0\x86\x44\xc1\x34\x07\xcf\x00\x5a\x33\x9f\x42\xee\xf7\x10\x33\xa6\x73\x12\x9e\x1b\xff\xf8\x9b\xf6\x83\xb7\x53\xda\x4e\x66\x6d\x09\xea\xfd\x23\x33\xe1\x7c\xc3\x41\xea\x4e\xa5\xa0\x9a\x9d\x22\x5d\x21\x43\x65\xfe\x4c\x52\x36\xd9\x4a\x2e\x49\x69\xdd\x80\x58\x0e\x54\xd7\x40\x5a\x89\x6c\x05\xaa\xc3\x74\xd9\x9c\xc1\xae\x3e\x74\x35\xaa\x1e\x5a\x29\x65\x75\xba\x9e\x24\x17\x2f\x59\x46\xc7\x20\xe6\xb7\xea\x21\x8f\x7b\x65\x15\x8f\x7a\x4d\x80\xac\x64\x6a\xe7\x54\x83\x8b\xad\xf7\xaa\xd3\xe0\x4c\xd4\x20\x4c\x67\x44\x35\x76\x48\xb3\x58\x9b\x54\xcd\xeb\x3e\x31\x85\xec\x38\x83\x75\xea\x0e\xd5\x28\xa0\xf2\xb2\xdd\x41\xdd\x22\x7f\x2c\xaf\xff\x8c\xe2\x66\x42\x86\x02\x8d\x17\xbd\x32\xdc\x09\x65\x46\xa6\x92\x91\x4f\xf7\x1e\xea\x0a\x73\xfd\x87\xdf\xc3\x57\xae\x90\x93\xa4\xa2\x27\x27\x76\x9c\x14\xb8\xb2\xe6\x80\x28\xcc\xe8\xc4\x15\x4a\x17\xca\xdd\x25\xdd\x61\x09\x51\x48\xfc\x44\xe8\x43\x31\xd2\x6a\x64\x5a\xc3\xd3\x31\xd8\x3e\xab\x13\x4e\xbf\xd6\x7a\x40\x83\x62\xbb\xdb\x44\x69\x23\x50\x1f\xe7\xb7\x1f\x7b\xa7\x3a\xc1\x8e\x98\x33\x9d\xeb\x3d\x70\x88\xb6\xb5\x6d\xed\x15\xe7\x17\x6e\x18\xb9\xc5\x84\x71\xc4\x99\xbc\x2a\x45\xcc\xbb\xa1\x1c\x78\x23\x66\x55\x97\x36\xc8\x0c\x98\x64\x41\xbc\x81\xad\x4f\x44\x92\xab\xc0\x92\x32\xe4\x79\xca\xf5\x84\xed\xf7\xe5\x81\x36\x2a\x99\x7d\x9c\x7f\x1d\xb8\xce\x7b\x93\x85\xe0\x1e\xd8\xf3\xa5\x4f\xef\xfb\x1e\x92\xdd\xb3\xa3\xa1\xe0\x0e\xf4\x97\x3d\x0a\x79\x82\x18\x9d\x86\xf1\x86\x68\x74\x7e\x47\x9f\x09\xa3\xc7\x3f\xfa\x66\x73\x9b\x72\x60\x39\x5e\x89\xb0\x92\x98\xba\x50\x47\xe0\x92\x9c\x53\x8e\x2b\x1d\xc3\x8b\xcf\xfb\x6a\x04\xca\x31\x46\x1c\xa2\xfe\x01\x71\xad\xc2\x20\xf5\xe0\x76\x92\x90\x17\x96\x1a\xdd\x38\x22\xf4\x13\x15\xd7\xcf\x58\x43\x7e\x56\x8a\x5d\x78\xad\x22\xb3\x5e\xe9\xaa\x02\x6e\x55\xaa\x5c\xad\x6b\x37\x4e\x17\x34\x87\xec\x6d\x5e\x8e\x42\x8c\x00\xe0\xf8\x3d\x14\x80\x57\x9f\xb1\x1d\x12\x28\x9f\xf1\xd9\x2f\xa0\x09\x81\xd8\x8c\xc0\x29\xfd\xd3\x91\x68\x1c\x6e\xe8\xd8\xdb\x21\xbe\xf7\x53\x7c\x5f\xfe\xf0\x7e\xea\x99\xfd\x6f\x7a\x54\xc7\x00\x9d\x02\xa2\xb7\xb8\x64\x0d\xe7\xb1\x83\x63\x54\xe8\xa2\x7a\x65\x72\xaa\x79\xc7\xc5\x54\x75\x4e\x03\x7f\xe4\x42\x19\x34\xce\x6f\xb4\xf3\x23\x1c\x23\xf7\xff\x98\x35\x8e\xdc\x0e\x9f\x76\x7b\x66\x57\x3d\xb8\xa4\xec\xf2\x8f\xe2\xbc\x1f\xb5\x37\xb7\xb2\xfd\xf6\x2e\x09\x90\xd8\xa3\x79\xc0\x64\x8d\x89\xd2\xd1\x0a\xb1\x37\xfb\xb8\x4a\xa5\x93\x97\xc7\x95\x0e\x0c\x79\xb1\x55\x52\xa6\x9e\xcf\xcb\x57\x25\xc3\x24\xa0\xc9\xa9\xa5\x49\x90\x4b\xc2\xaf\xe4\x70\xd4\x4f\x02\x9c\x31\xbc\x3f\x43\x69\x1d\xe3\xa0\x81\x15\x89\x55\x73\xe3\x8c\x92\x81\xeb\x67\xed\x5c\x12\x9f\xc3\xed\xcc\xb8\xbb\xf8\x02\xec\x24\x54\xe1\x06\xc9\x0f\xa0\xc4\xf0\x80\xfb\x02\x6b\x88\x16\xf2\x6d\xc5\x60\x55\xa4\x2c\x50\xc9\x66\xc4\xbe\xf6\xf6\xce\x4b\x41\x9e\x30\x31\xc7\x57\x78\x29\x56\x6c\x9d\x58\xdc\xa0\xba\x6d\xb0\x12\xc3\x0b\xb8\x95\xf9\x96\x06\xe3\x1b\xef\x63\x0f\x84\x6a\x2b\x9f\x60\x4f\x59\xf0\x1d\x65\xef\x87\x7b\x03\x3a\x70\xe2\x5a\x45\x02\xb0\x36\x1a\xa7\x8a\x69\x8d\xdc\x57\x26\x3a\x04\x22\x20\x4c\x72\x7e\xb5\xad\xe1\x43\x7f\xd1\xf2\xed\x28\x43\x13\x37\xce\x4e\x21\x59\x31\x3d\xd5\x8e\xb8\x6e\xd2\x7a\xe4\x54\x47\xe9\x96\xa6\xab\x84\x0a\x62\xd8\x4b\x4a\xa7\x9d\xee\x40\xe9\xa4\x0f\x74\xa0\x1a\x99\x0e\x06\x55\x71\x12\x9b\x37\x68\xe2\x41\x62\x68\x2f\x49\x41\x61\xd8\x0a\xba\xb8\x0d\x5c\xd3\x3c\xd5\xc3\xec\x0c\x33\x79\x26\x41\xdb\x7a\x43\x44\x1d\x78\xe5\x3d\x27\x52\x72\xd1\xb6\x7d\x4f\x57\xdc\xc8\xfb\xc2\x95\x07\x55\x8d\x95\x98\xa3\xa2\x85\x85\xf2\x57\x99\x42\xba\x15\x53\x41\x49\x93\xac\xf9\x7c\x36\xb2\xf9\xe8\x9e\x1b\x4f\x4a\x5a\x05\x51\xa6\xd7\xda\xbc\x73\xbe\x5a\xab\xcc\x7e\xf1\xd8\x14\x0b\xd4\xc3\x42\xc0\xf7\x00\xca\xbb\xcb\x1f\x0b\x9d\x94\xcc\x78\xad\xf9\x70\xeb\x3e\x52\xb1\xb9\x2e\x4d\x52\x6a\x74\xbf\xa9\x3b\x62\x92\x55\x2f\x8d\xb9\x7a\x02\x4f\x75\xfd\x5a\xfd\xf4\xfe\x9a\x93\xab\x25\xe9\x7b\x2f\xa0\xad\x2f\xe3\x21\x27\xed\x7c\xde\x2e\x64\x53\xf3\xbf\x09\x7a\x93\xed\x20\x84\x3e\x84\xa2\x24\x07\xa5\x6a\x89\x60\x35\xde\xb1\xce\x14\x1d\x32\x9a\x59\x9d\x74\x52\x6d\xc1\x7e\x1f\x7a\x87\xe8\x4d\x9b\xcf\x4f\x6d\x13\x4d\x13\x27\xc7\x12\x8e\x91\xda\x46\x87\xf5\xa3\x67\xe3\x5a\x56\xad\xc2\x90\x08\x63\xfd\xd4\x46\x34\x87\x33\x81\x4c\x80\x74\x74\xc9\xc7\x76\xbc\x20\xf4\x3b\x9d\x98\xc4\x77\x65\x87\x22\x6c\xae\x02\x9b\x95\x49\xd4\xd5\xba\x6d\x37\xf5\x16\xc8\xf8\x80\x04\x28\xda\xe7\xb0\x31\x7e\x93\xf0\x44\x88\x03\x13\x75\xfa\xe5\x91\xc8\x44\x6f\x59\xfa\x7e\x74\x35\xcd\x3c\x43\x5d\xaa\x58\x9d\x63\x5a\xae\x63\xbb\x9e\xcd\xe2\xa6\x93\x93\x66\x78\xac\x01\x85\x93\xdf\xaa\x5c\xa3\x3c\x5d\x1d\x10\x4d\xc8\xb1\xe9\x4c\xe3\x31\xfb\xe1\x34\xab\xb8\xe4\x9d\xf7\x4e\x45\x60\xfe\x98\x8a\xc0\xfc\xd1\x8b\xc0\x74\x4e\x1b\x7f\xf9\xcd\x7b\x53\xfc\x39\xe1\xb8\x8e\xb9\x5b\x01\x2b\xe3\x34\x1a\xc6\x85\xb5\xae\x4c\xc6\x39\xb0\xbd\xd9\x56\x8a\x57\x44\x8e\x65\x02\x4c\x36\x56\xdd\x3a\xa8\xe2\xe4\x9e\xa6\x72\x58\x79\x6f\x0f\xe4\x78\xab\x7d\x37\x8b\x3a\x1e\x7a\xb5\x8e\x87\x85\x27\xc9\x21\x67\x67\x63\xc3\xa9\x08\x79\x18\x4c\x81\xb1\xee\xb9\x3c\x5c\xa2\x62\xc8\xa1\x44\x24\x27\x70\xf7\x06\x61\x0f\x73\xfc\x7c\xd8\x95\xc0\x62\x71\x79\x09\xef\x2e\x2f\x2b\x3e\xf1\xd3\x63\xb0\xa1\x15\x3a\xa7\x11\x4f\x29\x97\x92\xfa\x3d\xd0\x32\xd9\xbb\x96\x9f\x87\x2d\x55\xe9\x27\xeb\x62\x76\x8a\x8d\xe6\x31\x6a\xa1\x13\xa5\x62\x3f\x1c\x3b\x3d\xb1\x10\x55\x24\x67\xda\x1d\xb6\xcc\x09\x74\xef\xf7\x9c\x69\xef\x77\x1d\x8a\x2d\x9a\xcb\x50\xe4\xd8\x6e\xa6\xa1\xf0\x30\x87\x4f\x57\xcd\x45\x6b\xcd\x2e\x11\x47\x41\xf6\x0a\x7e\x7e\x69\x2d\xed\xf8\x8d\x87\x6f\x02\xc8\xfb\xda\xbe\x30\xb3\x9a\x02\xe3\xf1\xc2\xb4\x97\x94\x87\x4f\xc6\x70\x63\x3e\x2f\xa3\x0c\x3d\xa9\xdd\x77\x0e\x8a\x08\xb3\x3f\x3e\x38\xd3\xe0\x4e\x63\x11\xc3\x67\x21\x9e\x1c\x9a\x76\x0a\x63\x3e\xd5\x64\x37\x1c\x6f\xfc\x5b\x37\x66\x4e\x40\x0e\xcc\x7d\xe9\x95\xc6\x7e\x62\xe1\x66\xff\x82\x29\x79\x9b\x9d\x17\xbb\x45\x6a\xd5\x83\xf6\xc1\x99\x99\xa4\xec\xb8\xf1\x16\x3f\x54\x0e\xa8\xa3\x7b\x0c\xce\xa8\xa3\x7a\x47\x01\x8b\x18\x97\xee\x45\x6a\x26\x38\x75\x80\x12\x89\xbe\xc3\xd2\x82\x52\xb2\x7f\x70\xa6\xf3\x75\xab\x95\x10\xd4\x83\xd7\xba\xa4\xbe\x9b\x5a\x94\x3c\x71\xfe\x20\x7d\xad\x83\x61\x38\xdd\x01\x8e\x24\x4f\xa6\xdb\xab\x43\xe7\x71\xb8\x5b\x87\x8e\x82\xce\x08\xc6\x8d\x56\x26\x28\xd7\x17\x6d\x98\x65\x73\x53\xf4\x85\xd9\xfd\xca\x53\x97\xa3\x85\xf2\x71\x58\xe4\x24\x7f\xe2\x25\x23\x21\x50\x64\x7c\xb5\x0e\xa2\xff\xe3\x13\x68\x5c\xfa\x87\xf6\x73\xf0\x8f\x03\x11\x13\x1d\xf0\x84\x15\xca\xae\xab\x02\xae\x4c\x18\x02\x44\x33\x24\xad\xe3\xcc\x5a\x89\xfd\x4a\x29\x62\xd4\xc6\x05\x31\x41\x66\x1a\xb4\x3a\xc5\xad\x9b\x06\xfd\xba\x75\xe1\x4d\x75\x45\xa0\x1c\xcf\xb8\x5d\xaf\x46\x26\x7f\x4a\xd2\x44\x59\xab\xd4\xd6\x20\xcc\x3c\x63\x54\xd0\x9c\x45\xd2\xa5\x26\x8d\xe4\x36\x34\x9f\x93\xf9\x5c\xc9\xdd\x9a\x54\x8d\x06\xc0\xb9\xe0\xb7\x91\x8b\x84\x8f\x1b\xd6\x79\xa4\x01\xf4\x9f\x65\x8d\xed\xf2\x26\x48\xd0\x87\x8c\x9a\xce\xe6\xe7\xe8\x1d\x2e\xc7\x8c\x40\x46\xbb\xe8\x09\x7b\xe4\x08\xf1\xce\xf3\xe9\xc7\x44\x8a\x77\x24\x25\xde\xe1\xe4\x11\xf9\xcc\x19\x84\xc7\xec\xe8\x09\xbc\x23\x22\x16\x1d\xd5\xa0\xf7\x61\x12\xfd\xb4\xe6\x44\x9e\x51\x95\xd7\x6b\x48\x56\xb2\x01\xf5\x90\x4e\xa4\x6b\x77\x7c\x43\x9e\x35\x84\x09\x7a\x45\x41\x3f\x6f\xec\x5f\x5a\x4b\xa1\xd5\x1a\xd5\xbd\xd6\x6b\x2c\xed\x4b\x1b\x60\x4d\xf4\x0c\x54\x52\x21\xf3\x48\x5e\xab\x81\x0f\x9e\x72\x08\x24\x72\xb9\x29\x61\xd9\xa9\xa6\x5c\xfe\x12\xda\xbd\x68\x19\x04\xfc\x71\x2d\x49\xa8\x60\x28\xee\x55\xd6\xb2\x67\x23\x52\xfc\x12\x5f\xf1\xcb\x57\x6c\x1d\x6f\x60\xb8\x7d\x51\xaa\xcb\x15\x5b\x2b\x01\x17\x7e\xd1\x06\xf5\xda\x21\x20\x79\x9a\x4b\xae\x79\xf1\x31\x95\x2d\x44\x8b\xd2\x8a\xe1\xb2\x35\x72\x7f\xbd\xdd\x3e\xf3\xfd\x0d\xbb\x0b\x4e\x4c\x25\xa7\x48\x90\xf7\x70\x30\xd8\x5f\x4e\x9a\xdd\x86\x94\xc9\xf0\x4e\xb2\xdf\x0b\x17\x6e\xd9\xe3\xd9\x99\x4d\x8d\x49\x34\xd3\x60\x74\xd8\x40\xe6\x53\x6c\xc4\x81\xfe\x67\xf1\x00\x08\xcf\x88\x92\xc9\xff\x42\x4a\xea\xc9\xe4\x2d\xc4\x73\xca\x87\xb8\x46\x98\xf5\xe5\x9f\x88\x27\x95\xff\xee\x37\x2f\x95\xff\xc7\xaf\x26\x95\x0f\x5c\x4e\xb3\x52\x73\x5a\xb4\xf6\x44\xdf\x44\x5f\x5a\x3e\x8e\x7a\xfa\x0d\x49\xcd\x36\x49\xec\xc0\x52\x40\xac\x3b\x5a\xe0\x5d\xb7\xf4\x55\x46\xbe\x33\x6f\x92\xcd\x2d\xd3\xad\x8f\xb1\xf2\x1f\xad\xfc\x4c\x7a\x8f\x9e\x21\x7d\xfb\x1f\xf2\xf8\x21\xe3\x5e\x77\x49\x31\x3f\x58\x6c\xd6\x1f\x26\xfc\x66\xdc\x2c\xeb\x93\xb6\x83\x33\xb6\x1c\xec\x98\x73\xde\x4d\xe2\xd9\x10\x3f\x53\x8c\x03\x39\xec\xdd\xa7\x15\x05\xe3\xfa\x96\x83\xda\x96\x2f\x0b\xd9\x98\xfd\xf9\x44\x1d\xcc\x2f\x40\x49\x8b\x72\xc7\x29\x71\x3e\x59\x87\x33\x76\x84\xd2\x69\xaf\x7f\x35\xc9\x38\x09\x6a\x70\x88\x4d\xed\x4c\xe5\x27\xc2\x1b\xe0\x9e\xf7\x59\x86\x70\x8e\xad\x30\xbb\xc4\x84\x2f\xc3\xa1\x55\xea\x4f\x06\x82\x6c\x7a\x5a\xe3\x02\xfb\x28\x79\x1c\x3c\x77\x52\xf9\x2c\x01\xbf\x73\x11\xd9\xf0\x97\x19\x70\x19\xe3\x56\x7c\x98\x72\xd0\x4d\xe9\x13\x46\x81\x7d\x9c\xf8\x3f\xaa\x40\x1c\xf5\xec\xfb\x32\xf7\x49\x62\xa1\x31\x15\x18\x3d\xfc\x87\x51\x6d\x4c\x77\x91\x5c\xe0\x01\x0c\xff\x44\x5d\xc7\xd1\xf3\x3c\x18\x23\x90\xd4\xba\x1d\xa1\xff\xfb\x8c\x93\xea\x64\xbc\x6c\x39\x80\x9c\x94\x37\x2a\x34\xa4\x87\x3b\x5a\xea\xfb\x04\x2d\xf1\xf8\x4d\x36\x42\xfb\x7e\xf1\x9d\x72\xfa\xf9\x2a\xe2\x7f\xb6\x82\xd8\x41\x61\x4c\xc6\x86\x4a\xc3\x81\x94\x9d\x20\x05\x46\x3a\x1a\x92\xcf\x8c\x1c\x6d\x92\xe5\x67\x3e\xd3\xc4\x25\x2f\xcf\xfb\x17\x97\x16\xc5\xc5\x98\x28\xee\x7c\x34\xa0\x25\x68\x03\x48\x28\xa1\x8b\x81\x84\x2e\x52\x12\xba\x38\x42\x42\x8f\xc4\x73\x30\xa6\xa8\x09\xeb\xe0\x41\xcf\xbe\x72\xa4\xc4\xad\xc5\x6d\x29\x6b\x23\x3c\x10\xb6\x53\x8c\x18\x77\xd1\x59\xe9\xd7\x5f\x46\xdc\x1e\xec\x9d\x91\xa1\x4b\xbf\x8c\xb9\x95\x82\x75\x4e\xe0\xdf\xa5\xa4\xdf\xdf\x85\xd2\xaf\x1c\xe4\x7f\x1f\xca\x0d\xe7\x05\x26\x9b\x52\x59\x89\x92\x5c\x3e\x64\xa3\x60\x69\x80\x1f\xfd\x3b\x69\xc2\x98\xd0\xa3\x1a\xe5\x13\xc5\x05\x03\xbe\x97\x44\xcf\x7f\x12\xb4\xaa\x86\x5f\xe8\xbf\xc6\xd2\xc9\x5d\xd7\xa9\xb8\x55\x1b\xc7\x9b\x9e\xf0\x8a\xac\x7b\x6c\x35\xc6\xb9\x4c\x3c\xb9\xaf\xc3\xe4\x16\xa9\xa2\x6e\xe8\x9e\x94\x1c\x0b\x88\xe8\x80\x84\x19\xef\x88\xf8\xd4\x51\x30\xaf\x84\x4e\xfd\x33\xe3\x41\x4c\xa7\xe7\xb0\x4a\x0f\x9d\x9d\x6c\x0d\x82\xf8\x3b\x97\xa7\x18\x06\x55\xe7\x72\x45\xd6\xd9\x02\x34\x3c\x1c\x2a\x53\x18\xc1\xcf\xb1\xcf\x10\xd4\x0c\x48\x7d\x96\xae\x8a\x14\x7d\xad\x37\xdd\xf7\xf9\x52\xb5\x1d\xcf\x19\xf9\x38\xfd\x33\x81\x4c\xf8\x04\x73\xdc\xa2\xa5\x7c\xf2\x1f\xfe\x93\xbe\xa4\x3e\xb2\x61\x86\x21\x3f\x98\xcd\x09\x14\x7a\x7f\xfc\xfb\x6f\x5e\xcf\xf4\x7f\x48\x75\x86\x7d\xac\x4a\x25\xd4\x30\x8c\x9e\x4d\x02\x61\x7c\xc1\x1b\x93\x5a\xc0\x70\x1c\x26\x2d\x40\x70\x5e\x75\x86\x83\x4b\x02\xe5\xd4\xa2\xb4\x13\x3c\x4b\x26\x2e\xd3\x61\x00\x51\x82\x0c\x97\x89\x25\xf8\x16\xc4\x8c\xf0\xd1\xdb\xab\xee\x59\xd4\xca\xab\x2c\x36\xc8\x86\xf1\x74\x4b\xdf\x5d\x8b\x8b\x5c\x83\x26\x4e\x45\x61\xab\x44\x35\x26\xa5\x4d\x34\x21\x5d\x09\x3f\xf9\x98\xb6\xec\x51\x7b\x73\x43\x07\xef\x23\xf8\x04\x19\x13\x92\xd0\xf1\xb8\xb0\xc4\x1e\x24\x53\x7a\x2a\x58\xd9\x3f\x15\x9c\x6c\xfa\x85\x8e\x88\x12\xd9\x9c\x08\x14\xcc\x58\x03\x02\xda\xa6\x19\x93\x61\x82\x83\x7b\xaa\x19\x09\x53\x3d\x23\xc4\x2c\x6c\x10\x69\x19\xa0\x55\xdf\x63\x55\x54\x39\xcb\x22\x84\xa5\xd6\xe5\x82\x6c\x16\xba\x70\x79\xc3\x6a\x56\x92\x01\x70\xfc\xc3\xe5\x06\x9e\x36\x7f\x96\x54\x99\x78\x25\xeb\x10\x0a\x6b\x8c\xa8\xd6\xe0\x85\x1a\x34\x1b\xa2\x96\x29\xf6\xae\xb8\x1c\x35\xaa\x57\xcf\xb3\x94\x2c\x6f\x94\x14\x41\x63\x14\x11\xbb\xdb\x38\x22\x03\x98\x16\x2b\x65\x35\x50\xa1\x5e\xb1\x31\x5c\x42\x49\x0a\xcf\x0a\x95\x06\x42\x7a\x0a\xa9\xd5\x0b\x37\x57\x1c\x3f\xd0\x0c\x6d\x2b\x6f\xc8\xc1\xd4\x0f\xd5\x5b\x08\x80\x30\xcc\xe5\xe4\xbd\x46\x36\x4e\x5c\x8e\x75\x09\x4e\x16\xaa\xfc\xa2\x3f\x06\x5b\xbc\x7a\xf2\xe8\xe5\xab\xc7\x97\x8f\x2f\xde\x5c\x5c\x3e\x79\xf5\xea\xe5\xab\xd7\x06\x58\x8a\xba\xd8\x5d\x4f\x10\x9b\x84\x30\x15\x54\x78\x8c\x50\xd1\xa2\xa9\x8f\x89\x52\xc8\x00\x64\x1f\x4e\xce\x00\xe0\xe0\x1c\xf7\xfb\xd5\x5a\xf6\x42\x87\xbe\x9d\x1e\x10\xab\x24\x10\xc3\x37\xc3\x0d\x8d\x5b\x48\xfc\x94\x63\xa9\xd8\x0a\xc5\x55\x26\x10\xc3\x12\x27\xe3\x24\x9c\x38\x26\x6a\xca\xa6\x61\xc6\x73\xd4\x75\x25\x9b\x4b\x8e\x7a\xf8\x05\x19\x0e\x4b\x70\x70\x72\xf5\xd9\xb2\x94\x91\x5d\x51\x7e\x43\x9a\x12\x1d\x33\x39\x4b\x4b\x8f\x98\xa6\x47\x77\x65\x0f\x40\xed\x86\xe0\x89\x8f\xc3\xc8\x25\xe1\xbf\x6e\x42\x6d\x41\x88\x92\x80\xe6\xc3\x03\x9e\x49\xe1\x31\xc4\xdf\x43\x3c\x99\x57\x22\x9f\x57\x21\xa7\x79\xa8\x5a\x36\xb8\xb6\x07\xfd\xaf\xe8\xda\x38\xb5\x0f\xdf\xe8\x22\x89\xc1\x63\xf0\xb5\xa5\xc8\x64\x53\xed\x81\x80\xe7\x08\xe0\x48\x86\x8a\x4d\x82\x58\x8a\x60\x39\xc4\x06\x60\xf9\x54\x8c\x55\xa7\x92\xa9\xb5\x2b\xfc\x9a\xba\x55\xb6\x90\xf4\x11\x0a\x99\xb6\xeb\x49\xbd\x3a\x5d\x57\x55\x55\xaf\xce\xd6\x36\xd1\x1d\x5f\xb5\x6b\x98\xf1\x60\xf8\x91\xa9\xaa\xab\x40\x0c\xe7\x62\xa6\x37\xc4\x16\xcc\xaa\xe0\x4a\xb9\xef\xb1\x4e\x30\x93\x92\x84\xda\x60\xdd\x0c\xe1\xba\x3a\x85\xac\xb7\x7a\x91\xf5\xd7\xdd\xc3\xda\x2c\x72\x57\xb5\xab\x7a\x3d\xa1\xab\xdd\xba\x5a\x91\xd5\x6e\x8d\xd9\x6a\xb7\x5e\x1b\x4e\x95\xaa\xf3\x22\x2f\xc6\xfc\x09\x79\x41\x3e\xc2\xa1\x68\xb7\xdb\xb7\xf5\xe6\x7d\x1a\x0a\x00\x81\xf8\xfa\xb5\xd4\xc4\xe5\x61\x4a\x5c\x7b\xa0\x78\x18\xde\x0a\xc3\xbb\x34\x3a\x7e\xd6\xc5\x53\x6b\x92\xfd\x40\x57\x4f\xbb\x1d\x5e\x9c\x56\xf3\x94\x20\x76\x96\x45\xb0\x4d\x46\x0f\xb6\x77\x39\x8d\x50\x24\x4c\x00\xe7\x07\x44\x6c\x40\x5e\x0e\x4c\x1c\x48\x5b\x43\x9b\xf8\x52\x1f\x52\x51\x7b\xf7\x65\x09\x67\x8a\xdd\xf4\x01\xa3\xa0\xa0\x9d\xaf\xc0\x4d\x1f\x3c\xb2\x3e\x97\x3b\x09\x08\x96\x5f\x9d\x33\xba\x69\xc9\xf0\x9a\xc5\x43\xf6\x46\x4a\xee\x0e\x13\x74\xd1\xa1\x20\x15\xba\xcf\xba\xb9\x9a\xfc\x39\xae\x2d\x4b\xc4\xad\xda\xf9\x00\x1e\xe4\xf9\xb9\x4f\xc2\x13\x60\xdb\x46\x2a\xb6\xc6\x6c\xcf\xeb\x37\x17\x6f\x9e\xe8\x4d\x48\xb0\x34\x7e\xe7\x47\x71\x34\x9a\xa1\xd1\xbe\x44\xa9\xec\x5d\x39\x02\x4f\x90\x51\x73\x2a\x2c\xed\x88\x78\x4c\xb9\xb8\x1b\x76\x15\xe7\xab\x4e\xf5\x35\xe1\xd6\xb7\x36\xca\x46\xd3\x81\xd7\x68\x2b\x1f\xbe\x69\x53\x9d\xbb\x4a\xb0\xc9\x49\xc6\x9d\x41\x65\xd8\xd6\x3b\x78\xe9\x09\x8f\xf4\x38\xc8\xe6\xa3\x67\xb8\x81\x53\xf5\x53\xdd\xbd\x22\x92\xac\x91\x26\x09\x83\x21\xcd\x1b\x22\x1a\xa4\x7c\x75\xd9\x93\x90\xf3\x24\x1c\x5c\x30\x2a\xb9\x16\xf7\x73\x68\x59\x8f\x4a\xba\x92\x97\xd9\x7a\x3e\x2f\xf5\xaf\xec\x65\xa4\x5e\x9b\x92\xc7\x39\xcc\x4f\x73\xb7\xa5\x88\xf9\x6e\x6b\x5e\xfe\x92\x3c\xb7\x35\x7d\x7c\x09\x24\x4d\x75\x76\x60\xd7\x03\xdf\x11\xbd\xe3\xa6\x3b\x0b\xa8\x64\x77\x6e\xb7\x20\xf5\x35\x16\x55\x55\x95\xc4\xe5\xe6\x1f\x82\xfb\x3c\xbb\x4f\x64\xbd\x74\x54\x6c\x45\xd6\x28\x4a\xd0\x1b\x8c\xa5\x21\x27\x3f\x4f\x01\xcd\x9b\x42\x1d\x0f\x1d\xf4\xb3\xfc\x42\x93\xd5\x92\xe4\x27\xcd\x67\xbf\x1f\x1d\x3c\x78\x6d\xe4\x9d\x1d\xdb\xb6\x75\x93\x91\x77\x3c\x2d\x88\x2d\xbf\xa7\xe3\xe6\xa2\xbb\x37\x50\x82\x64\xf4\x3c\xb6\x8b\x81\x02\x28\x55\x9e\xc5\xcb\xff\xab\x87\xd4\xf9\x7f\x0b\xb8\x2f\xd8\xee\xf6\x25\xbf\xbd\xae\x19\xf1\x49\x56\x81\xd4\x19\x18\x69\x92\x2b\x08\x51\x6f\xb7\xaf\x88\x97\xd3\x58\x51\x2b\xa0\x2e\x69\x51\x23\xf0\xf4\x3d\x39\x11\x48\x8a\x03\x2b\xb1\x8e\x2b\x5b\x23\x93\x70\xda\x18\x28\x4e\xfb\x92\x20\x34\xd2\x91\xef\x32\xcc\xc3\x4d\xe0\x5e\x56\xe3\xff\x8f\xbd\x37\xef\x6e\xe3\xc6\x12\x47\xff\xe7\xa7\x20\xeb\xf7\x7e\x4c\x61\x04\xd2\x92\x93\x59\x9a\x72\x59\xe3\x45\xe9\xf6\x4c\x12\xfb\xc5\xee\x4e\xe7\xb1\x79\x74\x4a\x24\x28\xa1\x5d\x42\xb1\x51\xa0\x64\x45\xac\xef\xfe\x0e\x2e\xf6\x2a\x14\x49\xc9\x4b\xd2\x33\x99\x33\x1d\x8b\x85\x1d\xb8\xb8\x1b\xee\xd2\xb1\x99\x46\x0f\xd1\x15\x6a\xb9\x71\x65\xdb\x66\xdc\x9e\x29\xa1\x68\x87\x80\x0e\x63\x3a\x47\x90\x57\x33\x8b\xf7\xfe\xc4\xb5\x23\x03\x79\x24\x4f\x9c\x55\x67\x07\x5b\xbd\xf7\x40\x67\x0b\xca\xc9\x5c\x14\xb7\xed\x13\x6f\x83\xc7\x74\xd6\xdb\x82\x39\xdb\x41\xb5\x3d\xcf\xa1\x20\xee\x02\x84\xc3\x8c\x06\xff\xeb\x91\x8c\x18\x27\x0b\x86\xa9\xdc\x6a\xc5\x13\x47\x61\xb2\xed\x04\x02\x51\x1b\xc0\xd4\xff\xff\x23\x07\x07\x60\x70\xab\xcd\xef\x85\x7b\x7e\xd5\xea\x4a\xd6\x8e\x34\x08\x6f\x0b\x97\x74\x29\x52\xd4\x13\x26\x4c\x7b\xcf\x45\xa4\xa4\xdb\xf6\x2b\x05\xf1\xea\x38\x7f\x52\x3a\x08\xb6\xb9\x92\x41\xb4\xaa\xfa\x94\x55\x22\x67\x73\x70\xe8\x1e\x0e\xcd\x54\x9e\xb0\xe1\xd0\xcc\xb3\x42\xd8\xcd\x10\xd5\x5e\xc6\x03\x09\x15\x12\x85\x01\xed\xd8\x1a\x31\x35\x82\x8c\xad\x73\x96\x2d\x8e\x62\xde\x7b\x90\x90\xf8\x38\x70\x58\x94\x51\x0d\xf1\x2f\x40\x1a\x35\x99\x5b\xdb\xef\x50\x77\xb5\x4b\x68\x3e\xc8\x32\xdf\x09\xa3\x01\xc2\xac\xad\xd0\xc0\x34\x63\x1e\x7b\x1f\x6a\x34\x20\x09\x32\xdb\xa6\xf3\x80\xbc\xc8\x11\x40\xc6\x55\x53\x5b\xb0\xce\x0e\x8f\xd7\x2e\x37\xc8\xda\x48\xcc\x45\x56\x49\x31\x79\x9e\x91\x69\x01\x3a\x90\x84\x2e\x92\x41\x96\x15\xaa\x78\x99\x95\xd3\x62\xb6\xd9\xd0\x69\x31\xc3\x97\xc6\x3e\x5c\xbb\xf5\xdb\x35\x2f\x4f\x96\xf0\x94\x04\x81\x03\xb4\x93\xbf\x5d\x54\x62\x1f\x90\x43\x8e\x21\x2d\xf0\x1c\xf5\xce\x39\xc9\xdf\xab\x00\x00\xe7\x86\x35\x69\xb4\x70\x11\x67\x65\x0b\x9c\x5e\x66\x60\x10\x90\x16\x08\xed\xb0\xb9\xb8\xdc\x62\xc4\xe7\x8f\x6c\xde\xc4\xc2\x71\x35\x7b\xfc\x39\x46\x5d\x90\x65\xbe\x2e\xc4\x44\x4c\x8b\x59\x36\xaf\x95\x73\xbe\x91\xfd\xe6\xc1\x85\xd9\x2e\x27\x6f\x73\x28\x72\x82\xfd\x3e\x48\x8e\x6f\x33\x99\x4b\x11\x1e\xe8\x8e\xad\xb8\x52\x87\xc9\x4a\xa3\xef\x32\x3d\x23\x6d\x76\x3f\xda\xec\xf1\x1c\x1c\xbc\x15\xee\x37\x4b\xe6\x66\xa9\xf5\x11\x6d\x3e\xe7\xe3\x68\xa9\x90\x9c\xb0\xda\x02\xf2\x09\xb7\x80\xc4\x33\x3b\x08\x91\xaa\xdc\x53\x4a\xde\x02\xf2\xf7\x92\x6a\xdc\x14\xd3\x6c\x83\x4e\x43\xbf\x2a\x38\xfd\x40\x04\x7d\x4d\x95\xe6\x53\xb3\x29\xca\x6a\x1e\xec\xc8\x5b\x08\xc4\x20\x0f\x5c\x64\x5b\xd4\x5b\x40\x6a\x8a\xe1\x30\xcd\x5b\xb8\x15\xd9\x7c\xa8\x5a\x2d\xd1\x6d\xf9\xb0\x5d\x55\x61\x74\xb9\x6b\x50\x6f\xd2\x8c\x4c\xcb\xac\x9a\xb2\xd9\x4c\x9d\x7f\x61\x82\x48\x0d\xb2\x2c\x9f\x96\x33\x93\x7c\x92\x56\xa7\xff\x58\xe7\x45\x2a\x45\x3e\x4c\xd1\x66\x23\xac\xa6\xd6\xbf\x71\xa2\x7c\x0b\xa1\x48\xda\x3c\x4b\xf2\xa4\x9d\x1a\x72\xa2\x3f\xd1\xc5\x41\xf2\x34\x69\x06\x9d\xf0\x56\xdf\x15\x7a\xa2\xfb\xd5\xa3\xfd\x5e\x14\xd3\x90\x46\x9e\xde\x6a\x5c\x91\x30\xa9\x68\xbb\x27\xe2\x62\x5b\x04\x60\xbf\xdf\x34\x1b\xaa\xb1\x34\xf6\x19\xfc\x87\xfe\x6a\x42\x32\x45\x5f\x76\xdd\x1c\xe4\x81\xef\x37\xf4\x42\x19\x6f\xf9\xaf\x0d\xdb\x76\x45\x89\x46\x1d\xfb\xa1\x2c\xb8\xbc\x28\x1f\xb1\x4b\x1a\x8b\xf7\xd1\x78\x90\x8a\x35\x33\x1c\x67\x2c\xe9\x7e\x23\xd2\x46\x14\x35\x10\xdc\x8a\xc8\x11\x0d\x4b\xef\x85\x28\x69\xde\x93\xfd\x36\x34\xf6\x9c\x96\x76\x96\x6d\xdd\xec\x76\xf5\xce\xad\x8f\xf4\xac\x7d\x9a\xfe\xab\x15\x67\x84\xaa\x8f\x98\x36\xe3\x8c\x48\xb4\x88\xee\xc8\x96\x90\xf9\xf0\xcc\x1c\xe6\x1f\x50\x2a\xf8\x6d\xe6\xb0\xfa\x6d\x7a\xb7\x59\x64\x8a\x94\x8d\x00\x57\x5e\xb8\x0a\xcd\x9c\x3d\xb7\x62\x6f\x3a\x4d\x58\xc9\xaf\x60\x26\x0d\x98\x4a\xaa\x5b\x36\x6f\x7e\x93\xbc\x5d\x75\x49\x16\xc9\xcc\x5b\x24\x13\x01\xe5\x59\xa7\xa4\x91\x27\xba\xe5\x71\x38\x57\x09\xcc\x11\x16\x6a\x7a\x54\xc4\x73\xa6\x96\x22\xd3\x4e\x80\xa7\x3f\xfc\x05\x1f\x21\x9c\x9b\x8a\x6f\x09\xbf\xa6\xf3\x1d\x59\x7f\x77\xa7\xf0\x3d\x73\x83\x65\x5c\x18\xb5\xc2\xbc\x91\xfc\x52\x79\x30\x93\xf4\xce\xe5\xa5\xaa\x1b\xd9\x54\xdf\xe6\xd7\x10\xbd\x44\x7d\x54\x31\x70\xf2\xb9\x28\xf9\xed\x8b\x7c\x7e\x19\xbd\x64\x31\xde\xe7\x25\x59\xee\xaa\x1f\x30\xe3\xbb\x2a\x47\x67\xa7\x14\xe4\x0d\x23\x3f\x5b\x2a\x29\x0e\x59\x84\x09\xdf\x5a\x6d\xbb\x8a\xf5\x78\xdf\x12\x31\xbf\x84\x5d\xfb\x3e\x5f\x99\x79\x2b\x07\xc8\x5d\x33\xae\xcc\xc5\xd8\x55\x33\xb4\xa3\x21\x37\xfd\x77\xc4\x44\x63\xf0\x4e\x75\xa2\x7c\xdc\xd4\xd8\x93\x64\xf4\xf7\xaa\x64\xa3\x7c\x45\x13\xac\x59\x5c\xed\x97\xa9\x93\x8f\x69\x6f\xf8\x45\x9a\xe8\x26\x09\x6e\x49\xe8\xcd\x2c\xc9\xa6\x66\x88\x35\xf5\x57\x95\xf6\xae\x46\xd8\xcf\x49\x37\xe9\xd2\xc0\xdb\x5c\x26\x62\xfc\xf7\x92\xc6\x32\xad\x73\x1f\x64\x5b\x95\x14\x23\x7a\x2e\xd9\x21\xda\x7a\xc3\x14\x28\xb4\xd8\xa5\x63\xba\x90\x98\x46\xfe\x9b\xf1\xf1\xd9\x05\x61\x84\xe7\x82\xbc\x5a\x80\x5a\x00\x61\xaa\x1f\x7a\xa0\xa2\x4e\xa7\x53\x91\x94\xa3\xf1\xf9\x9a\x16\x50\x0b\x4a\xac\xb1\x51\x01\x66\xb4\x4a\xa7\xab\x5f\xc7\xbc\x55\xc3\x37\x77\xfd\xa9\xe4\x15\xe5\x61\xb9\x71\x3b\xf7\x25\xdc\x4d\x33\x20\x64\x6d\x77\xad\xc1\xbc\x50\x76\x7d\x12\xfd\xaa\x4e\x4b\x76\x3c\x51\x3a\x2b\xdf\xf6\x22\x20\x00\x24\x30\xcb\x48\x51\x8d\x7d\xb5\x65\xa3\xaa\x5f\x24\xab\x2e\xa5\x98\x19\xe7\xc8\xe5\x42\x64\xb1\xae\xac\xd2\xad\xb9\x0f\x93\xe6\xd3\x49\x70\x9a\x02\xd2\x68\xda\xfc\xa0\x68\x5c\x94\xe5\xfb\xf5\x4a\x1e\x02\x0e\x68\x36\xcf\xf8\x66\x23\x8f\x5b\xb3\xc0\xaa\xf3\x6f\x4b\xae\xcf\xf5\x84\x09\x93\x07\xd4\xcd\xa5\x94\x54\x0c\xb2\xf7\xbf\x95\xd7\xea\xff\xb8\xa2\x7e\x72\xc0\x0e\x92\xfe\x0d\x15\x97\x7d\xba\x98\xf4\x13\x1b\xec\x1c\xda\x3f\xbf\x0d\x50\x01\x74\x54\xe3\xb3\x8e\x55\xa9\xf0\xb6\x63\x0e\xd1\x0d\x51\xc0\x3c\x18\xc5\x22\xa0\x0e\xa8\xdb\x33\xf9\xf6\x1a\x59\xdf\xc1\x52\xa2\x05\x15\x9e\x65\x45\xcf\x9a\xfc\xa8\x88\x8a\x2a\x98\xa2\x0f\x05\x1c\x9d\x74\x8d\x3a\x51\x01\x0b\x81\x0a\x5d\xf0\x72\xcd\x74\xf3\x13\x75\x77\x7e\x7c\xfb\x97\x37\xe3\x37\xbc\xbc\xa2\x95\xa4\xc0\x55\x59\x5c\x43\x00\xe6\x34\x6d\x37\xd9\x6c\xcc\x0c\x9e\x37\x4a\xc2\xb9\x20\xfb\x74\xdb\x9a\x0d\xde\x3a\xaa\xd9\xe9\xc6\x21\xc4\xc1\xcf\x45\x80\x93\xdc\x53\x76\x57\x2b\xef\x5d\x98\xcf\x70\x48\xcc\x9f\xea\x0d\xc5\xfc\x42\x38\x80\x16\x50\x13\x84\x07\x0e\xb3\xec\x82\x1c\xe2\x0b\x22\x3e\x0c\xc1\xdb\xb1\x9e\x7d\xbb\xd3\xf8\x02\x3c\xf3\xfa\xee\xd3\x93\x95\xbe\x2b\x73\x49\x84\x52\x74\x42\xc6\x67\x2b\xb5\x6b\x6f\x78\xf9\xe1\x76\xb2\x75\x37\xd5\x5d\x7c\x7e\xfb\x6a\xd1\x4c\x5b\xef\x14\x66\x2e\xe2\x80\xb0\x81\x83\xec\x15\x6d\xa5\x49\xe6\x53\xaa\x1f\xf6\xbc\xab\xc6\x20\x06\xb0\x05\xd2\x22\xf5\x26\x95\x17\x85\x44\xaf\xc0\x3d\xe9\x6c\x98\x70\xb9\x9b\x1b\x0c\x93\xec\x97\x4b\x7d\x39\xe7\x5a\xd9\x90\x28\x88\x90\xbb\xb1\x85\xd0\xf8\x49\x2e\x23\x29\xa0\x1b\xfe\xeb\x19\x6d\xde\xbf\x12\xe1\x2a\xa3\x9e\xda\x70\x9d\x6d\xd9\x57\xd4\xe0\x05\xbd\xe3\xf4\x36\x45\x8d\x9a\x23\x9b\x3c\x35\x5d\x67\x7f\x4c\xd7\x58\xa8\x95\xff\x29\x67\x8b\x82\xf4\x35\xad\xf6\x61\xac\x5c\xf6\xbf\x4a\x0e\xaa\x83\xe4\x2b\x07\x5e\x5f\xc1\xae\x7c\x95\xa0\xe6\xd8\xd4\x58\x1a\xbd\x21\xe9\xf7\x90\x2e\x1b\x4b\x46\x10\xec\x67\x19\x30\xb7\xba\x5b\x8f\x96\x2b\x86\x48\x8a\xe0\x38\x14\x12\x78\x79\xd3\x87\xd0\xb8\xdf\xca\x7b\x9d\x02\xb9\x34\xf0\x39\x1c\xd2\x06\x61\xc0\xa4\x56\x4b\x39\xfd\x20\x78\x3e\x17\xfd\x55\x7e\x2b\xcb\xbd\x05\x24\x48\xe7\x08\xf5\xd0\x9a\xf6\xa1\xc0\x9e\x63\x0c\x56\x74\x23\x04\xfe\xef\x73\x76\xbb\x07\xd0\x12\x0f\x68\xb7\x84\xc7\x68\x5e\xac\x29\x9b\xe1\xa6\xe1\x46\x70\xd8\x0a\x6e\x9b\x93\x6a\xa3\xfe\xc6\x7d\x74\x49\x53\x83\xcf\x16\xf1\xd3\x05\x04\x09\x72\x90\x46\x7d\x48\x5b\x90\x25\xe1\x69\x02\x43\x51\x76\xa1\xee\xc2\x57\x3e\x96\x01\xfd\xf4\x1d\x0d\x50\x0b\xc1\x1a\x32\xf9\x84\x62\x93\x68\x40\xd4\x58\x02\xba\x9e\x44\x8f\x00\x27\x43\xd9\x85\x09\xf1\xe3\x02\x67\xfa\x0c\xee\xb8\xa2\xbf\x90\xe1\x90\x8a\xed\xc9\x43\xc1\x4d\xf5\x59\x51\xbc\xf1\x9a\x92\x4a\x91\xb7\x2a\xd2\xad\x0b\x8a\x70\x99\x57\x29\x83\x0c\xe9\x15\x11\x29\xc3\x90\x87\x18\x38\x4f\x66\x6d\xf8\x70\x5e\xe3\xf8\x08\x2d\x71\x28\x78\xda\x0b\xbf\x50\x76\x61\xdf\x4b\x83\x25\x1a\x5d\x9f\xa6\x01\x5e\xe6\x70\x28\xff\xb6\xe4\xef\x24\x60\xfa\x2f\x3f\x41\x7b\xad\xe5\x04\xbc\xd4\xd1\xb8\x13\x6e\x61\x0b\x59\xc6\xfd\x0b\x01\x66\x78\x83\x01\x03\xe4\x21\xa1\x1e\x54\xa9\x65\x5e\x90\x6a\x4e\xbe\x85\x0b\xfc\x8f\x35\xa9\x44\xe5\xc5\x75\xc2\xb9\x77\x05\x00\x7b\xc5\x84\x8a\x35\x54\xfa\x89\xe4\xef\xa5\xcc\xa2\x52\x95\x97\x7e\x8e\x72\x62\x72\x94\x07\x00\xd5\xcb\xa7\xc5\x2c\x5b\xe2\x35\x9c\xd1\x12\xcf\x4d\x76\x49\x84\xab\xe9\x72\x4c\x17\xb3\x6c\xee\xb2\xb8\x5e\x3a\xbd\x26\x1f\xfb\x98\x3a\x25\x61\xb7\x98\xd8\x7e\x7a\x16\x99\x72\x8b\x55\x85\x97\x65\x76\xd1\xdc\xb7\xd8\xea\x94\xe5\x25\xe9\xb0\xbc\x24\xca\xf2\xb2\x9a\x96\x72\xc2\x60\xe2\xa2\xfe\xcc\x4a\x9c\xa3\xbc\x3d\x7e\xe9\xf2\x8c\x99\xcc\xee\x78\xee\x0c\x3b\x8b\x27\x73\xb7\x73\xcb\x4c\x4c\x8b\x59\x8f\xab\xdd\xd8\x6c\x74\xee\xf6\xa5\x9f\xba\x7d\x95\xae\xbd\x15\xad\xf6\x4b\x9b\xab\x5e\x13\x21\x05\x4f\x99\x55\x53\x0a\x73\x87\x80\xcb\xde\x7c\xe5\x56\xa4\x62\xb3\x01\xf5\x07\xe7\x25\x4f\x93\xd3\x0f\x2b\x30\x02\x02\x4a\x41\x25\xce\x10\x65\xff\x9c\xf4\x57\x9c\x54\x84\x09\x65\xb5\x40\xfa\x1a\xea\xfa\x2b\x5e\x5e\xd3\x05\x59\x18\x94\x8d\xfb\xe7\x6b\xd1\xa7\xa2\x7f\x93\x57\x7d\x56\x8a\xfe\x52\x12\x80\xb1\x24\xbe\x35\x5d\x4a\x22\x63\x26\x7e\x15\xc2\xdd\x75\x76\x78\x7c\xfd\xa4\x3c\xbe\x3e\x38\x40\x57\xd3\xeb\x59\x96\x4f\xaf\x67\x4d\xea\xba\x86\xfb\xfd\x0c\xb9\x27\xd1\x8b\x8c\x8d\x25\xf3\xb8\xd2\xfe\x8a\xdf\x96\xfc\x5b\x0d\xfc\x8a\x83\xbc\x42\xf8\x36\x3b\xc4\xe7\xd9\x85\xd9\xa2\xdb\x27\xe7\xc7\xb7\x72\x8b\x4c\x1f\x67\xd9\xc5\xf4\x76\x86\x6f\xe0\x1f\x73\x2d\x4e\xbd\xe9\xdd\x20\xfc\x21\xfc\xf9\x36\x3b\x3c\x7e\xfb\xe4\xe6\xf8\xad\xd9\xea\x67\xd9\xd9\xf4\xed\x6c\x7c\x16\x82\xff\x87\xe9\xdb\x59\xf6\x0c\x9f\xc2\x3f\x63\xba\x90\x5b\x70\xf3\xf4\x08\x05\xda\x9f\x97\x24\x65\x98\x63\x81\x4f\x31\xc1\xeb\x26\x59\x16\xe8\x6e\x01\x49\xee\x6b\x34\x9e\xe7\xa2\xf1\xb2\xa0\x80\x41\xca\x8a\xe9\x07\x17\x56\x5c\x32\xe9\xa7\x36\x20\xda\x65\x5a\x4d\x3f\x4c\x0f\x67\x12\x02\x50\xad\x9f\xab\xcc\xda\x5f\x67\x87\xc7\xaf\x9f\x94\xc7\xaf\x0f\x0e\x90\x24\x66\xaf\x67\xa8\xc6\x20\x87\x2e\x09\x27\x6c\xde\x44\x40\x0a\xe4\x80\xa7\x63\x4a\xec\xb2\x18\xb9\x21\x7b\x49\x9e\x05\xae\x97\xd6\x19\xd9\x1e\x6b\xbc\x22\xe4\xfd\x16\x1e\x2c\xd6\x7b\x4c\x60\xe3\x98\xa1\x93\xee\x61\x3d\x65\x9a\x16\x6a\xcf\x38\x89\x8a\xaa\x18\x82\x6c\xd0\x45\xaf\xcd\x03\xb6\x79\x8e\xde\x0e\xc9\xac\xc6\xe1\x34\x77\x2e\x11\x53\x27\xb7\xca\x9d\x51\x2b\x0b\xe4\xd6\xc1\x40\x65\xe7\xd4\xb9\xe6\xa5\x28\xcd\x3b\x47\xe8\x38\x0f\x82\xd5\x68\xad\xcd\x51\xac\xfd\x27\x66\x92\xba\x04\xa2\xbd\xb9\x25\xd9\x81\x7e\xc3\x9d\xb4\xfd\x30\xf7\x60\xcd\x79\x94\x35\x17\x2e\x04\x37\x1d\xab\x30\x4d\xeb\x4c\x71\xdb\xe6\xc5\x58\xe0\x1c\xf2\x71\xe3\x22\xeb\xe2\xaf\x75\x55\xcd\x9f\x72\x5f\x90\xfb\xaa\xaf\x30\x27\x74\x2e\x19\x57\xc7\xb3\xff\xc3\xf2\xed\x05\xc2\x3f\xa5\x7f\x91\xd2\x6d\xf3\xba\xb3\x36\x17\x6e\xe6\x29\x70\xa5\xc1\x42\x71\xe3\x7a\x12\x09\xea\xfd\x20\x2b\x96\x92\x53\x57\x8c\x53\x9e\x39\xce\xdc\x6c\x75\xae\x5c\xdb\x4b\xf8\x47\xf2\x45\x4e\x74\x8a\x73\xdd\xad\x55\xe9\x77\xf6\x70\x75\x11\xb6\xdc\xd7\x36\x60\xa3\x57\x82\x63\xd3\x32\xad\x9e\xf8\xf3\xdb\xff\xaa\x4a\xf6\x6c\x45\x8d\x0f\x5e\xe4\x9c\x9d\xf5\x28\x38\x03\x13\xd4\x06\x1c\x43\x75\x4d\x04\xce\xb2\x99\x96\x17\xcb\x55\x47\xd2\x57\x80\x1f\x42\xb7\xc3\x3b\x5e\x67\x65\x67\xee\x0c\x5c\xa8\xc2\x88\x15\x01\x9e\xb7\x86\x83\x8b\x80\x97\x59\xd9\xce\x62\xd1\xdb\x92\x93\x61\x38\x4c\x97\x9b\xcd\x7a\xb3\xc9\x37\x9b\x41\x35\x1c\x0e\xe6\x08\x35\xd5\x65\x0e\x68\x1b\x8d\x61\xff\xda\x4f\x0d\x4a\x6d\x76\xb7\xc8\x45\x3e\xe9\x0c\x7d\xf8\x42\x1b\xa0\xc6\xa3\x1f\xda\x48\x10\x5e\xd2\x0b\x1d\x3f\x81\xe9\x44\xae\x36\x78\x82\x9c\xd2\x4f\xb9\x46\x5b\x6d\x17\x67\xe5\xd5\x8b\x89\x7e\x8a\xbf\xcc\x0a\xb9\x4a\xbc\xc8\xd6\x9b\xcd\x7c\x38\xec\xc8\xd2\x10\x64\x68\x78\x7a\x08\x90\xb1\x1c\x0e\x07\x72\x06\x97\x9b\xcd\x42\xa7\x3f\x58\x99\x54\x0e\x1d\xab\xa4\x0d\x6a\x0d\xd3\x53\x0b\x56\xf1\x76\x9b\x7b\x0d\x1b\xbd\x92\x70\x4c\x97\x29\xcc\x54\x0e\x76\xa7\x98\x99\x4f\x38\x56\x5b\x7a\x4d\xaf\xe4\xa8\x5b\x61\x1f\x74\xc5\x62\x8f\xab\xe5\x7b\xe0\x83\xad\x9a\x19\x9b\x98\x9d\x05\xc7\xd2\xed\xeb\x11\x3b\xd6\x03\x1e\x02\xa0\x8c\x31\xe6\x3f\x5f\x08\x89\x7b\x09\xae\x77\xa3\x71\x5b\x59\x69\x8b\x02\x8c\xd7\x97\x32\xb2\xea\xfd\xb3\x61\x70\x3b\x7e\xe2\xbd\x13\xc8\x6d\x3f\x49\x3d\x94\x8e\x1d\x32\x37\x8c\xcc\x56\xdc\xdd\xbd\x90\x7b\x23\x6b\x09\x7f\x76\x92\xdf\x51\xf6\xfe\x5b\x5e\x5e\x6d\x41\xd7\x3e\x24\xc5\x71\xda\x89\xbd\x4d\xfe\x49\xdd\x07\x77\x91\xe1\x70\x1b\x7e\x72\xba\xa9\x3d\x70\x8f\xc2\x83\xac\xb6\xa1\x68\xc8\x89\xfc\x63\xd2\x78\x89\x9d\x44\xae\x1c\xb0\x51\x46\xc5\x6c\x96\xb2\x0f\x49\xdb\x45\xc7\x9c\x8b\x10\xd5\x97\xd0\xda\x44\x76\x5d\x38\x85\x18\xd5\x6b\xde\x3f\x17\xf9\xc3\x97\xd9\x3d\xa8\x9f\xc4\xf4\x1e\x23\x0c\x6a\x6c\xe4\x30\xac\xaf\x26\xeb\x52\xac\xd2\xf0\x64\x65\x8f\x97\xe1\x5b\xcb\x76\xa0\xb7\xe7\x08\x27\xb4\x90\x04\x0b\xe6\x86\x57\x9a\x66\xe9\x24\x4f\x57\x99\xb3\xe7\xd3\x39\x87\x82\x14\x44\x56\xb9\xac\xd6\xb7\x18\x0e\x07\xab\x93\xc1\x95\x75\x85\xd6\xe8\x97\x06\x4f\x2b\x06\x44\x82\x45\xa0\xc9\x55\xac\x0e\x80\xd1\x24\x26\xa4\xd0\xf6\xe5\xea\xda\x9e\xdd\x5d\xc7\x9e\xb9\x28\x60\x8f\x7f\xac\x09\x6f\xb2\xee\x96\xff\xa8\x7b\xf0\x3e\xa9\x11\x91\x36\xcf\x05\x06\x22\xfc\x94\x35\xeb\x98\x9b\x71\xee\x3d\x75\xaa\x99\xc0\x78\x29\xc5\x42\x61\x47\x40\x60\xb1\x39\x78\x78\xaa\x48\xb7\xd1\x1e\x8f\xca\x70\xd4\xa3\x19\xdd\x6c\x44\xc4\xfe\x41\x53\x28\x4d\x57\xde\x94\xab\xb5\x67\x97\xad\x38\x17\x0b\x2f\xd5\x03\x1f\x03\xd4\xda\x34\x45\xc3\xa5\xf7\x12\x50\x65\x7f\x4c\xab\x8e\x97\x00\x68\xa5\x29\x42\x8b\x4c\x95\xc6\x30\xdc\x91\x29\x2e\x29\x54\x8e\x4b\x4d\x5e\xa0\x79\x22\x49\xab\x21\x40\x95\xdd\x72\x7a\x42\xc1\x99\x32\x34\x75\x48\xd7\xb8\x42\x13\x9a\x3d\x7c\x9b\xb0\xec\x01\xd3\x1d\x14\x4e\x2d\x4c\xae\x2a\x42\xd0\x1a\x64\xcc\x40\xe2\x5e\xcf\xc8\x8d\xbe\x20\x6a\x8f\x8b\x7c\x16\x07\xd9\x72\x27\xc8\xe2\x75\x04\xce\xac\x5f\xb7\x0f\x65\x38\xff\x18\x00\xb1\xcf\x45\x25\x56\xae\x0b\x2e\xbc\xf2\x1f\xd3\x7c\x1b\x90\xb8\xf7\xa2\x18\xa8\x58\x39\xac\x01\x2a\xa5\x65\x66\xbc\x4e\xda\xaf\x43\x14\xed\x73\x9c\xf6\x59\x94\xdb\x78\x45\x98\xc9\x41\x22\x8c\x80\x59\xf6\x09\x69\x2b\x79\x90\xd6\x1d\x3c\x2b\x9a\x2f\xa5\x4e\xf3\xd2\x6b\x23\xfc\x67\x45\x91\xea\x38\x40\x2b\x42\xde\xc3\x4f\xa4\xde\x92\x4c\x79\x1b\x76\xc2\x54\x39\x77\xb5\xc9\x71\x11\xb1\xca\x00\xc7\xc8\xf0\x69\x5f\x9d\x74\x45\x44\x2a\x70\x42\x2b\xc8\xd6\x44\xd9\x45\x82\x07\x87\x08\x17\xe9\xdf\x49\xca\x0c\x28\x73\x64\xf0\x9e\x18\x9f\x35\x38\x62\xde\xf1\xa4\xff\xcc\x04\x19\xa4\xe8\x24\xbd\xdf\x58\xfa\x9d\x9f\xb7\xdf\xf9\x83\x07\xd9\x26\x7c\x0a\x84\x26\x69\xda\x6e\xd5\xfd\xd4\xef\xcd\x11\x0d\x87\xdb\x67\xd9\x98\x23\xde\x35\x15\x79\x74\x0b\xba\x50\x49\xb0\xc2\xe3\x0b\xe2\xc6\x05\x48\x2a\x68\x01\xcf\xde\x1a\x1a\x22\x02\x54\x0b\x92\x22\xfd\x15\xd4\x78\xdc\xc2\x67\xf5\x48\x63\x4c\x66\xe2\xdd\x1a\xbd\x5d\xcf\x4f\x4c\x47\x90\x30\xaf\x45\x2a\xbe\xbf\x07\xcc\xa6\x84\xa3\x5a\x82\x7e\x21\x08\xf7\x5f\xb7\x6a\x6c\xc8\xff\xdb\xfc\xba\xc9\x90\x5a\xa6\xba\x29\x67\x71\xa4\x34\x13\x67\xc6\xad\xeb\xdb\x75\x51\xdc\x6a\xa7\x7d\xc7\x75\x09\x87\x9c\x54\xb8\x73\xfd\x44\xa8\x81\xff\x27\x1b\xd8\x27\x8d\x18\xdd\xa9\xa7\x8e\xbb\x4a\x8f\x39\x61\xee\xf5\x51\xd4\x08\x7b\x4f\x87\xaf\xd9\x7c\xcb\xf3\xe1\x1b\xd7\x25\xd2\xef\x7d\xde\xa7\x8e\x98\x85\xc1\x44\x2a\x48\x2c\x63\xfc\x88\x43\xbb\x40\x2f\x25\xef\x21\xe6\xee\xa5\x45\x3c\xe1\x2e\xa9\x08\x05\x0f\x41\x5c\x66\x74\x6c\x96\x03\x8f\xa6\x66\x41\xc0\x6c\x87\x1c\xbc\xa4\xab\x0d\x3c\x11\x44\x40\x29\x8c\xbf\x0e\x5d\xa6\x11\x67\x7a\x54\x64\x36\x9c\xc4\x49\xe2\x1b\xd0\x25\x93\xca\xc5\xbc\x91\x85\xbe\xc1\x56\x32\x49\xfc\x0c\x0c\x89\x82\x26\xba\x4c\x13\x5e\x96\x42\xdb\x76\x2d\xc6\x55\x7e\x4d\x16\x49\x96\x65\xcd\x14\x3c\xf2\xbf\x30\xbf\xbb\xdc\x1d\x7d\x6f\x5e\x32\x41\xd9\x9a\xd4\x9f\x66\x52\xb5\xeb\xbb\x12\x52\xdc\x96\xe7\x5d\xe0\x12\x49\x08\x5f\xd0\x85\x3c\x99\xee\xf7\x83\x9e\x8e\x8c\xa5\xa4\x22\x6c\x81\xf1\xa5\x89\x47\x01\xfa\x65\x75\x59\x7f\xca\xab\x57\xec\x3a\x2f\x68\x9b\x33\x88\x79\x8d\x9f\xf8\x9d\xe9\x86\x90\xb7\x18\x73\x34\xe9\x2a\xf3\x07\x83\x47\xb6\xd6\xcb\x83\x6b\xa7\x1e\xe1\x20\xdf\x94\x0b\x3d\xd1\x9a\x9a\x55\xed\xfb\xf1\x29\x54\x59\x8d\xcf\x24\x6a\x89\xa3\x2b\xad\x86\xe0\x36\x40\x05\x66\x2d\x93\x39\x48\x02\x47\x33\x20\x00\xac\x91\xa5\x49\x49\x72\x1e\xb9\x21\x62\xbd\xd2\x21\xf8\x31\x3d\xe9\x42\x82\xda\xbe\x9b\x2e\xb4\xff\x3c\xd3\xc2\x43\x67\x55\x2b\xb5\x4b\x0e\x8c\xd5\xd8\x70\x48\x1d\x5a\xac\xd0\xa4\x38\x34\x83\x94\xc8\x31\xaf\xaa\x13\xfd\xef\x44\xd4\xb8\x59\xbb\x03\xb5\x63\x9e\xad\x85\x17\xdc\xbd\x6d\xb7\x8c\x05\x20\x49\x2d\xb1\x71\xa4\xcc\x5e\x9c\x29\xb9\x7e\x51\xfd\xa1\xec\x43\x53\x78\x12\x85\xe7\xd0\xfe\xb2\xe4\xfd\xaf\x92\x03\x01\x1a\xf4\x9e\x8b\xc4\x78\x76\x99\x57\xdf\x77\x2f\xd6\xa7\x38\x3a\x66\xd9\xee\x29\xd6\x58\xa2\xd9\xce\xad\xd3\xa9\xa1\x4c\xb7\xa1\xca\x55\xa0\x13\xb1\x23\x3f\x8e\x15\x15\x8d\x5b\x82\xd2\xa0\x88\xf0\x85\xe9\x6c\xcb\x1c\x42\x6e\x6c\x87\x01\x2f\xf0\xce\x19\x19\x53\x36\x2f\xd6\x0b\x02\xfa\x73\x0a\x4e\x9b\xea\x21\x9c\xb6\xb3\x66\xc1\xd8\x0d\x09\x15\x92\x68\xd1\x65\x1a\xd5\x30\xa3\x3b\xd6\xc8\x02\xac\x58\x75\xf7\x0a\xc6\xd4\x03\xb4\x0a\x8d\xa9\xc6\x29\xa7\x7c\x96\x45\x07\x53\x5d\xf9\x69\xbb\xca\x3a\x74\xe5\xd0\x6a\x1e\xbd\x71\x9d\x5d\x28\x8b\xe0\x56\x69\xc3\xe6\x36\x88\x11\x0b\x5b\x2a\x11\x82\xe2\x65\x24\x65\x54\x7c\x77\x0c\x71\x62\x06\x19\x6e\xe5\xf2\x45\x20\x66\x6b\xcf\x57\x6b\x7c\x0e\x8a\x57\x9d\x94\x98\x65\x2e\xc5\x6d\x50\x21\xc9\x57\xab\x82\xce\x41\x0f\x24\x81\x7c\xec\x8d\xae\x60\x96\x01\x66\x94\xbf\x6d\x72\xab\x6e\x59\xdd\x18\xc6\x9a\x07\x0f\xee\x35\xdf\x43\xc9\x6c\x9a\x3b\xad\xa3\xd6\x71\x36\x93\xf6\x7e\xdb\xc0\xcf\x38\x0c\x40\x6b\x85\x35\xd2\x78\xc4\x04\xc3\xa3\x6d\x59\x7c\x01\x37\x77\x38\x0b\x77\xde\xce\xb6\x3f\x83\x8e\x8b\xeb\x0c\x56\x03\x53\x70\x6f\x7a\x36\x50\x97\xce\x2f\xec\xf9\xb2\xa1\x9e\x88\xdb\xc1\xc4\xbc\x26\xb9\xdb\x43\x09\xe2\xa4\xee\xf6\xb5\x80\x38\x21\x9e\x37\x5e\xcb\x7d\x63\x8f\x15\x47\x3d\x3e\xf6\x5e\x74\x4f\x6c\x49\xaa\xac\x96\x9c\x20\xa5\x8a\xdb\xe6\x61\xd2\x5a\x48\x97\xee\x75\x12\x41\x8c\x96\xa2\x5e\x10\xf1\xfc\xd6\x7f\x16\x69\xf7\x13\x21\xee\xdd\xcf\xf7\x8a\xbc\xfb\x5c\x95\xa4\xbd\x5d\x1d\xc0\xf2\x9a\x95\x61\x97\xe0\x6a\xb4\xdc\x44\x50\x8d\x23\xb5\xbb\x6f\x94\xc4\x86\x44\xa4\xee\xb9\x80\x6f\x69\xe7\x3d\x2d\xc6\x17\x86\x6a\x6c\x7d\xad\xb6\x5a\x4c\xb4\x11\x0d\xb7\xaa\x1b\x5f\x5f\x67\x99\x14\xdb\xad\xca\x81\x8f\x19\xb9\x79\x61\x02\xb6\xb6\x55\x29\xa5\x38\x38\xf0\xf8\x35\xc5\x86\xec\x25\x3a\x36\x59\x97\xf6\x79\x57\x4d\xb8\x6f\x1e\x35\xcc\xff\xfb\x7c\xa5\xfd\x62\xb0\x13\x0d\xba\x79\x94\xb6\xff\x10\x66\x19\x9f\x0a\xb8\x30\xcc\xc8\x69\x4c\xe3\x73\x7b\x39\x5e\xdf\x30\xc2\x9b\x82\xe6\x20\xcb\x52\x20\xa1\xea\x64\x12\xeb\x19\x74\x20\xe5\xe9\x96\xda\x82\xe1\x04\x00\x28\xd1\x16\x8e\x72\xd4\x8c\x29\x2a\xe2\x77\xa8\x9c\xcc\x34\x29\xd8\x6c\xda\xfd\x07\x94\x62\xff\x81\x82\x7e\x61\x60\xad\x52\x93\x5b\x22\x11\x40\xdb\xfb\xc8\x9f\x56\x79\xc2\xc1\xbd\x38\xb6\xde\x12\x4d\x54\xd5\x40\x77\xd2\x35\x8f\x69\x09\xeb\x46\x13\xb9\xd8\xa9\xe7\x47\x15\xed\xdd\x15\x1b\x0f\x86\xad\x7d\xfb\xdd\xc1\x28\x52\x36\xf0\xe0\x7f\x17\x68\x34\x7c\xc6\x3e\x1d\x74\xb8\x8e\x3f\x1b\x80\x78\x43\x7c\x0e\x18\x09\xd5\xc6\xb9\x47\x3a\x4a\x9c\x68\x17\xb8\xb7\x76\x0a\x71\x28\xca\x4f\xf8\x34\x9f\x75\x4c\x3a\x39\xc8\xef\x07\x48\x79\x08\x48\x7a\x0e\x49\x57\xff\xb6\xc2\x9e\x90\x64\xfb\xd3\x80\x74\x43\x8b\x42\x1b\x39\x3f\xc4\x3f\x34\xea\x0d\xe9\x68\x6b\x04\x49\xda\x10\x46\x31\xbf\x47\x8f\x2a\x37\x1d\x1d\x5d\x91\x55\x9d\x81\x58\x61\xd4\x06\x8e\x86\x83\xa8\xda\x25\x69\x1c\x59\x53\xf5\x98\x9b\xa7\x49\x93\x6b\x3c\x8e\xb6\x88\x22\x22\x28\x75\x16\xee\x11\xb7\x60\xc8\xf6\x07\x4a\xa9\x3f\x47\xc6\x54\x3c\x7d\x67\xb1\x7f\x2a\xcd\xd8\xad\xb1\x25\xe0\x0e\x25\x15\x04\xc3\x0a\x53\x42\xa5\xa8\x67\xaa\x65\x87\x76\x2b\xbb\x25\x8b\xd6\xde\x85\xe7\xee\x36\x6f\x97\xc9\x7f\xb0\xda\xb0\x93\xe6\x5e\x84\xa5\x7b\x6c\x46\xd8\x60\xeb\x6e\x9c\x09\x4e\x2f\x2e\x08\x7f\x49\x96\x84\x73\xb2\x78\xa7\x7e\x56\xe1\xbe\xd4\x9e\x2b\x77\x25\x42\xc3\xb4\x32\x63\x4d\x9d\x5e\x9e\x31\xcf\x23\x23\xb0\x54\xc9\xd1\x43\x7d\x81\xa6\x7c\x96\x82\xe9\x08\xaa\x11\x2e\x32\xfd\x04\x93\x23\x3c\xcf\x82\x27\x95\x9c\x2d\xfa\x2a\x5c\x61\x3f\x3f\x2f\xd7\xa2\x9f\x1c\x70\xe7\x00\x25\x57\x00\x0f\x3c\x65\xcc\x9e\x65\xae\xec\x59\xca\xb6\x3d\x4b\x60\xf4\xb3\x43\x3a\xa7\x38\xc7\x6b\x88\xbf\x9a\xc2\x6b\x51\x01\x26\x2f\x04\xb3\x31\x5d\x48\x26\xcf\x8a\xed\xc3\x61\xba\xce\xa8\xfd\x89\x40\x59\xaa\xf4\x75\x62\x1c\x68\xf8\xd2\x52\x5b\x69\xe4\x35\xc2\xeb\xe1\xd0\xbc\x2a\x69\xd3\x0d\x89\x17\x4c\x2f\x93\x75\x2d\x77\xa8\x0c\x9d\x91\xe8\x12\x82\x16\xda\xb0\x57\x74\xac\x95\x73\xa0\x9e\x31\xec\x65\x31\x26\x6a\x17\x75\xec\x53\x37\x6f\xd4\x13\xe3\xa6\xb2\x30\x2d\x31\xc7\x44\x4b\xc0\x5e\xb1\xd2\xf8\x94\x58\x0a\x22\xa0\x0c\x22\x35\x9e\x7b\xb6\xfb\x6b\xd1\x10\x29\xa7\x5c\x65\x39\x51\x76\x21\x29\xcb\x0a\x01\x22\x17\xda\x6c\x52\x16\x8d\xc3\xd9\xa0\xd1\xc0\x14\xf3\xf1\xd2\xe9\xbe\x92\x2b\xfa\x81\x32\x20\xc9\x98\x66\x4c\x45\xd3\xc9\xab\x4a\x69\x4a\x34\xe0\x3e\xb3\xc1\x01\x28\xea\x95\x63\x4e\xca\x15\x61\x2f\x64\xb5\xf4\xee\xec\x8c\x56\xdf\x43\x1f\x83\x43\x7c\x76\xa6\xba\xa3\x35\xc2\x92\xc7\xbd\xa0\x95\x20\x72\x10\xc0\x0f\xc9\x81\xc0\x2e\xfe\x4a\xa1\x42\x1d\xd4\x6a\x05\x78\xe0\xf8\x8b\x75\x51\x68\x16\xc3\x4e\xc6\x5d\x93\xe1\x90\x8e\x2f\xf3\xea\xf5\x0d\xb3\x19\x3f\x12\x5b\x28\xa5\xb5\xd4\xab\x9c\x71\x04\xc9\x65\x32\x66\x75\x28\x6e\x7b\x8b\x30\xd6\x42\x6b\xab\xc2\x6d\x32\x2b\x40\x35\x19\x6f\x79\x96\xce\x9e\x13\x4c\xc6\x3a\x74\xfe\x2d\x26\xe3\x00\xc7\x64\x10\x0a\xd8\xea\x2f\xb2\xff\x96\xbf\xa0\xe0\x99\x2c\x78\xcd\x17\x84\x93\xc5\x5b\x22\xb2\x3f\x63\x62\xee\xbc\xaa\x9a\xbb\x0f\xae\xfd\xa5\xfb\xa8\xc4\xd5\xac\xc2\x64\xec\x4f\xe7\x17\x12\x7e\x30\x61\x18\xfe\xec\xbe\xab\x54\x48\x02\x7e\x7b\xb9\xab\xfe\x08\x35\xca\x52\xa9\x73\xb3\x5f\x30\x19\x9b\xf7\x9e\xec\x4f\xde\x0f\x7f\xb4\x6f\x65\x1b\xf0\xad\xcc\x72\xd9\xe1\xd9\x39\x65\x8b\xec\x27\xf9\xd7\xc5\x3a\xe7\x8b\xec\x1f\xf2\xcf\x12\xa6\xfa\xaa\x7a\x56\xd0\x6b\x92\xfd\x05\x93\xf1\xbc\x24\x60\x98\x95\x09\xd9\xc1\x82\x2e\x97\xaa\xbf\x9f\x31\x19\xab\x70\xab\xf0\x1b\x42\xe3\x5e\x66\x17\xf6\xab\xfc\xf9\x4e\xa5\x3f\xcf\xae\x31\x19\xc3\x20\xd6\x33\x4b\x4d\xe4\x8f\x98\x38\xa9\xee\x7b\x0b\x19\xe7\x98\x84\x19\xb3\xb2\x17\x8d\x24\x15\xb0\x6e\x59\xf0\x63\x33\x7b\x85\xfc\xf8\xae\x33\xfd\x4c\x72\x76\x46\xaa\xef\x4b\x49\xd1\x12\x7c\x07\x09\x6c\x26\x83\x43\x40\x36\xaa\x6e\x9a\xfc\x27\xc4\x10\x1c\x49\xa4\xf4\x08\xb8\xaf\x47\x94\x2d\xc8\x87\x04\x4f\x13\xf2\x61\x55\x72\x51\x25\x38\x52\x69\xb4\xe2\xf4\x3a\x17\x24\x99\xe1\xf0\xb2\x27\xeb\x8a\xf4\x2b\xc1\xe9\x5c\x24\xbd\xfb\xce\xab\x7b\x21\x86\x01\xc4\x77\x2e\x51\x8f\xbc\xe6\xf1\x48\x33\x42\x9d\x7c\xbd\xad\xc7\xf6\x41\xec\xdd\x79\xbb\x69\xbd\x63\x4f\xaf\x09\xaf\xa4\x00\xe0\xed\xea\x2c\x40\xf6\x1f\xb7\x6d\x64\xac\xf7\xc7\xa6\x52\xb7\x1f\x92\xaf\xc7\x47\x8f\xc7\x87\x49\x64\x7a\x12\xe4\x72\x51\xf2\xea\x91\xa4\xb4\x25\x23\x4c\x6c\x3b\x7c\x57\x7d\x2d\x68\x21\x1b\x15\x45\xbe\xaa\xc8\x08\x82\xe6\x6c\xa9\x68\x3f\x34\x80\x45\x92\x93\x60\xdd\x2e\xf6\x4c\x80\x0e\x1b\x44\xb1\xa1\xfa\xb6\x22\x15\xa9\x53\x82\x36\x9b\x18\xed\x81\xb8\x96\x83\x43\x78\x1e\xc2\xa5\xd9\x24\xc1\x6f\x2d\x3b\x96\xe3\x2a\x23\xd3\xb7\xb7\x57\xe7\x65\x31\xa6\x82\xc0\x7c\x67\x29\x3a\x1e\xa4\x2c\x4b\xf3\xac\x1a\x33\xf2\x41\xa4\x08\x8d\x17\x25\x53\x59\xf1\x14\xe3\x98\x8f\xe1\x1c\x10\x1e\x88\xcd\xc6\x84\xc5\x1c\x64\x99\x40\xc7\x72\x48\x74\x5c\x2b\xe7\xa7\x35\xba\xa3\x72\x0a\x65\xb6\xae\x97\x94\xe5\x45\x71\x7b\x27\x27\xc0\x8c\x7d\x9d\x14\x3b\xe4\x3a\x36\x1b\xf3\x57\x8a\x6c\x4d\x20\x81\x8a\x32\x97\xb5\xcb\x80\x05\x6b\xf4\x96\x6c\x3c\x98\x21\x70\xca\xed\x8a\xe8\x87\x1c\x4d\xfc\xfb\xb9\x10\xe4\x6a\x25\xfa\xa2\xec\x83\x3c\xb3\x9e\x8b\x35\x27\x7d\x56\xb2\x11\x2c\xf9\xbc\x70\x0c\x47\x82\xea\xd4\x63\x00\xa8\xc7\x4e\xed\x3a\x8f\xbb\xf0\xe1\x39\xe2\x83\xe3\x07\xab\x15\xe0\x7f\x23\x66\x3a\x54\xad\x59\x5a\xf3\x30\x61\xa8\xc6\xf9\xf4\x29\xeb\xab\xbb\x02\x95\x93\xa9\x42\xe7\xfd\x67\x46\xde\x9b\x25\x59\x66\x14\xc6\x2e\xf3\xa4\x89\xb4\xa6\xb2\x4b\x3a\x00\x52\x0b\x59\xf2\xf2\x2a\x25\xa8\x31\xfe\xfe\x3b\x5b\xad\x38\xc9\x17\xdb\x36\xf5\x01\xd7\xbb\xc8\x6f\xcb\xb5\xc8\xc8\x58\xe4\x17\x2a\x29\x98\x0b\xdf\xf9\x9c\xc2\xab\x7f\x95\x11\xc5\xa2\xc8\xf2\xd8\xb7\xe0\x87\xdf\x81\xb9\x0f\x8a\xc3\x4a\x0f\xb1\x14\x77\xf5\x95\xfd\x89\x8a\xcb\x37\x39\xcf\xaf\x2a\x14\xe8\xd6\x9d\x8f\x8b\x15\xae\x8d\x5f\xc3\xd7\x7e\x1c\x3c\x53\x38\xfd\x7a\x76\xe2\xff\x98\xa8\x00\x80\xe9\x21\x16\x06\x55\x21\xc9\x13\x0e\x48\x8b\xa5\x6a\x2d\x34\x41\x2e\x3f\x4a\xab\xb0\x17\xdb\x99\x10\x44\x4b\x74\x52\x1a\xcb\x89\xc9\x74\x56\xeb\x88\x08\xd3\xc3\xd9\x49\x92\x98\x18\xba\x1c\x27\x93\x04\x99\x5f\xb2\x10\x4d\x6c\xe6\xab\xc8\x18\x1a\x1b\x20\xac\xb2\xc3\x35\xb2\xc7\x21\xcc\x6a\xe4\x4f\x2d\x2b\xb5\xc3\xd3\x6f\x6e\xbb\x5b\x30\xe4\x6f\x77\xab\xb0\x17\x03\xba\xbd\xb6\xdb\xba\xc1\x74\x6f\xba\x12\xd5\xe4\xa7\x60\xef\x5b\x03\xee\xb3\xf7\x4e\x18\x76\x98\xac\xbd\xf7\x3f\x92\x7f\xac\x29\x27\x8b\xd6\x19\x18\x0b\xf8\x70\x07\xb9\xc3\x2a\x08\x43\x60\x74\xff\x8b\xde\x35\xef\xd3\x94\xcc\x7a\x6c\xbc\x66\x10\x29\x59\x6b\xa8\x18\xa6\x69\xe9\xa5\x35\x0c\x6a\x67\x0c\xf3\x1a\x04\x36\xef\xea\xe6\x3d\xe5\xa1\x5d\x79\x87\x55\x25\xa8\x17\xdc\xf5\x75\x4f\xc7\xd9\x8d\x9e\x68\xf4\xd8\x94\xa8\x33\x97\x4d\x22\x77\x2e\x7a\xb1\xe6\x3d\xe5\x0b\x7e\x8f\x9d\xf4\xc8\x32\x4b\x05\x3e\x42\xd3\x43\xe7\xc9\xe3\x63\x69\x8d\xe9\x38\x04\xd9\xd0\xbf\x60\x1a\xa6\x64\xd9\xb3\x88\x31\xaa\x60\x69\x5e\x15\x2c\x7c\x5a\x84\xb0\x7a\x05\x27\xea\xb5\x5d\x8a\x66\xee\xc6\xf0\x59\x3b\x88\x8a\x7d\xba\xeb\x98\xb0\x9e\x8a\x9c\x6f\xbd\x95\xdb\x52\x5c\x91\xe1\xa0\x1f\xc1\x41\x8c\x96\x94\x14\x8b\xd1\x82\x54\x73\x4e\x57\x92\x57\xda\x8f\x55\xb4\x60\x2d\x3c\xb0\x16\x59\x62\xbe\x27\x59\x26\x27\x57\x2e\xfb\x8a\x76\x0e\x87\x49\x05\x7f\x34\x0b\x2c\x51\x3d\x89\x29\x50\x54\x4d\x52\xc7\x5e\x81\xc8\x70\xb8\x65\x38\x08\x4a\xae\x78\x8d\x92\x67\x59\x66\xbf\x0f\xcc\xdf\x6e\x0b\x4f\xcc\xdc\x26\x76\x40\x89\xa5\x1c\x17\xc2\x7f\xe7\x0b\x7f\x63\x7c\xa1\xe7\xdf\x24\x0f\xe7\x6b\x50\xdd\x4c\x0f\x67\xb8\xcc\xd8\xf4\x68\x86\xf3\x8c\x4d\x1f\xdb\xeb\xf2\x35\xd8\x8c\x98\xf0\x10\x89\x62\xd7\x24\x8f\x26\x52\x8a\x94\x0b\xc9\x20\xcb\xa8\x04\x52\xe0\xd0\x1c\x38\x95\xc3\x61\x1a\xd4\xcf\x5d\xfd\x7c\x38\x4c\x9c\xe0\x96\x50\xd6\x97\x5f\x7c\x2a\x00\xdf\x36\x1b\xfb\x0c\x9f\x3f\x88\x09\xa3\xd5\xb7\xf2\x92\xbe\xb4\x77\x34\x63\xf0\xd5\xfb\x10\xb9\x1e\xac\xc5\xc8\xea\x48\x21\x29\x09\x91\xdf\x51\xb8\x39\xed\x2b\x25\x86\xc3\xc4\xde\x15\xb9\x24\x31\x1c\x0e\xc4\xf8\xec\x8c\x56\x2f\x74\x84\xc3\x97\x06\xcb\x48\x98\xdf\x07\x0b\x35\x85\xb8\xcf\x2d\x9f\x06\x7d\xb6\x97\x18\x60\x0b\x85\x18\x1a\x28\x44\x7d\x4c\xf7\x5a\x9c\x13\x3c\xf7\x12\x68\x77\x61\xe4\x4f\xab\xea\x20\x31\xae\x2f\x06\x40\x11\xda\xc6\xdb\xb4\x8d\x79\xb4\x8d\x9b\xb8\x65\x1c\x02\x96\xb1\x29\xf5\x69\x1b\x35\x10\x07\xbc\x8c\x0f\xbe\x28\x65\xe8\x84\x68\xbe\x44\x27\xf3\x64\x28\xf6\x7a\x21\xda\x13\x08\xc2\xa8\xd9\xc0\x69\x2e\x62\x5a\x64\x02\xfd\xc6\x58\xdc\x70\x7e\x53\x36\x43\x90\xc7\x90\x6c\x63\x2a\xf6\xdc\xac\xdd\x73\x55\x11\x21\x84\x0b\x05\xe1\xe6\xca\xda\x8c\xc0\xd6\x9e\x59\xf7\x2e\x74\x1d\x43\x73\x17\x98\xdd\x05\xae\x76\xa1\x05\xe9\x8f\x4a\xa5\x9d\x1d\x55\x24\xa2\xb1\xf9\x84\x17\x57\x87\xda\x37\x74\xb1\x23\x71\x35\xba\x6b\x70\x77\x74\x99\x0e\xc2\xb7\x0b\x81\x50\x94\x02\xbd\xc8\x19\x2b\x45\x5f\x0a\xe2\xfd\xbc\x0f\xf7\xae\x9f\x57\xfd\xdc\xee\x76\x82\x6a\xa4\x63\x7c\x22\x93\x84\x45\x45\xd8\x77\xe2\x40\x2b\x1a\xbd\x67\xe8\x23\x9b\x48\x30\x72\x6c\x1a\xb4\x6f\xc5\xae\x57\x51\x82\xe6\xe4\x2d\x89\x5b\x98\x41\xa5\x82\x56\xc2\x46\xc5\xad\xe8\x2f\x24\x3b\x0c\xfb\xce\x17\xf1\x1c\x64\xc2\xc4\x82\xbf\x58\xd3\x85\xb5\x72\x6b\x0e\x6c\xac\x81\x20\x9d\x8b\x8e\x9f\x22\xa5\x3a\x36\xe5\x33\x29\xd8\x48\x16\xd5\x66\xcb\x91\xa3\x53\xf3\x76\xa9\xe6\x17\xce\x45\xd9\xa9\x7f\xaa\xe9\xc8\x23\x95\x94\x53\x4e\x02\xdd\xe9\x14\x58\xf2\x87\xd6\x1a\xd0\x31\xc0\xe1\xeb\xa5\x67\x5f\x58\x3e\x1d\x1d\x0d\x87\x74\x5c\xad\x40\xf8\x2b\xb1\xc9\x0c\xa1\x27\xaf\xaf\xcc\xe0\x50\x9f\xe5\xe0\x28\x5c\x41\x77\xca\x5e\x1b\xb9\x4d\xf6\x14\x36\xba\xcc\x43\xbc\x40\x97\x69\x50\xdb\x65\x52\x52\xb0\xdd\xdc\x08\xbb\xf1\xa6\x91\xb7\x23\x53\x31\x0b\x07\xd3\x56\x87\xad\x01\x07\xfe\x80\xbe\x95\xa0\xd9\xcb\xc7\x59\xd6\xc2\x1d\x68\x4b\xe2\x7a\xa2\x74\x55\x0e\x7b\x1c\xcd\xe0\x35\x49\x87\x4e\x32\x2d\x35\x22\xf3\x43\xdb\x90\x54\x48\x6c\x5a\x87\x13\x17\xfa\xa5\x22\xa2\xdd\x36\xd3\x34\x22\x7b\xe3\xf6\x94\xab\xdb\x76\x7a\x23\x46\x6e\x52\x0d\x98\x1e\xa9\x76\xc1\xae\x20\xfa\x16\xd9\xef\x92\x79\x95\x10\x69\xec\x7e\xec\x44\x1c\x16\x85\xeb\x09\x35\xf4\xf2\x20\xa0\x3a\x00\x9b\x3d\x0d\x29\x4c\x92\x3a\xf5\x59\x12\xd1\xc6\xaf\x9c\xb0\x05\xe1\xa3\xab\x72\x01\xce\xf9\xd5\x23\xf7\xd7\x82\x2e\x46\x94\x55\x84\x8b\x8f\x90\xd0\x1e\x2c\xba\xfc\xd3\x68\x41\xf7\x94\x23\x3e\xfe\xa5\xc3\x7f\x5c\x3e\xab\x88\xf8\x5e\x9f\x94\x7e\x5d\x6c\x9b\x25\xdc\xcd\xf3\x55\x7e\x4e\x0b\x2a\x28\xa9\x74\x80\x84\xb3\xab\xb0\xd5\x0b\xaf\x4a\x9a\x7c\x3d\x3e\xfa\x3a\x31\xb1\xbe\x4d\xff\xa1\xa7\x1a\xac\xaa\x28\xda\x85\x81\xee\x4e\xa4\x6c\xbc\x2a\x2b\x30\x25\xce\x0b\x74\x9c\x1e\x62\x50\x2c\xa6\x1c\x53\x7d\xdd\x8e\x10\x66\x63\x96\x5f\x91\x05\xaa\xb1\xb2\x0d\x89\x8f\xa8\x0d\x92\xa2\x85\xb5\x33\x24\xf8\x82\xe4\x19\x14\x9c\xe6\x74\xf8\xbd\x2f\x95\x5a\xec\xef\x97\xea\xf7\x4b\x15\x74\x4c\x0a\x22\xf7\x5b\xf9\x48\x6f\xbd\x68\xe0\x91\xa6\xab\x67\xa2\xfb\xf6\x10\xdf\x7b\x54\xd7\x97\xbc\x4e\xca\xe3\x97\x93\xf9\x97\x93\xdb\xcb\xf9\x3f\xea\x02\xde\xd0\xa2\x18\xd9\x14\x99\xbf\x5f\xc1\xdf\xaf\xe0\x67\xbd\x82\x5b\x09\xd8\xa7\xb9\x9f\xbf\xb1\x2b\x78\x5e\x94\xf3\xf7\xa3\xaa\x28\x85\x67\x6d\x51\x3d\x72\x9f\x43\x15\x95\x5f\x5d\xc2\x5e\x91\x0b\xd2\xd9\x30\xa8\x0d\x56\x6f\xd5\x23\xf8\xd1\x28\xf2\x9a\xdf\x82\x6e\x0b\x9a\x37\x6d\x32\x24\xbb\xf2\x89\xad\x51\x7c\x23\xfd\x17\x66\x12\x36\xc9\x8f\x7a\x37\x99\xd8\x67\x35\xac\xdf\x77\x26\x49\x82\xcf\xe4\x69\xb6\xb2\xb8\x30\x30\xd6\xe9\x90\x5d\x64\xa1\xdc\x78\xba\x78\x05\x6c\xfa\xa9\x86\xde\x96\xd0\xa2\x0c\x7b\x95\x68\xc0\x48\xce\x49\x25\x5e\x2f\xe5\xc1\xa7\xdc\xbe\xf0\x81\xdc\x2b\x54\x30\x01\x65\x41\x48\x74\x2e\x5a\x98\x99\x17\x4e\xe0\x2c\x9f\x0b\xd0\x1e\xbe\x2d\x4a\xe1\x57\xc1\xb0\x09\x5e\x84\x08\x48\x2f\x23\xb7\x5e\x90\x85\xdd\x8d\xc4\xa4\xc6\xa0\xb1\x09\xb1\x60\x42\x14\xdd\x35\xbb\x3b\x83\x03\x7d\x0b\xe0\x40\x4d\x38\x49\xe7\x15\x40\x71\x02\x93\x49\x90\xb5\x85\x96\x3f\x7b\xcd\x6e\x68\xf5\x2e\xe7\x17\x44\xc8\x8e\x7e\x96\x3d\x42\x10\x8b\xd2\x04\xe7\x0c\x3b\x04\xd0\x52\x9a\xb8\x04\xf5\xca\xe1\xd0\xe4\xa1\x79\xa3\x22\x2e\x83\x8a\x3e\xef\xc8\xfb\xa8\xea\xb6\x61\x6a\xe5\xde\x82\x8d\x6b\x80\x39\xf7\x31\x27\xf9\xe2\x35\x2b\x6e\x53\x6f\xb9\x63\x7f\x1a\x63\xaf\x31\x42\xb5\x14\x7a\x3d\x47\x81\x08\x20\x28\xb1\xb0\x71\x14\x26\xdb\x7f\xe3\xf3\xf8\x6c\x41\xba\xce\xb8\x0e\xee\x3d\xdd\x7d\xef\xbd\xfb\x77\xbf\x7b\xef\x37\xec\xbe\xf7\x3b\xec\xac\x3e\xcd\x8d\x66\x5f\xf8\x46\xfb\x27\xdd\xea\x60\xa5\xe0\xb0\xab\x0b\x55\x2c\x3b\x59\xe5\x9c\x30\xf1\x17\x4a\x6e\x9a\x7d\x74\x8d\xde\x81\x1a\x6a\x84\x69\xf5\x4c\x02\x44\x7b\x39\xde\x28\xe3\x33\x38\x92\xf1\x74\x96\x98\x4b\x18\x99\x64\x33\xfb\x54\xbb\x83\xc4\xda\xa0\x57\x69\xab\xb6\xba\xdb\x10\x4e\xdb\x83\x43\xd6\x01\x87\x97\xa4\x58\x49\xa6\x4f\x7d\x33\x3b\xf7\x70\xa6\x4f\xe7\x34\x49\x6d\x38\x92\x07\xf1\x3f\xde\xe9\x66\x62\x3b\x3f\xf4\x27\x58\xc0\x58\xad\x23\x15\xfb\xd0\xdc\x88\x5d\xe3\x9e\xb7\xe7\xb3\xdc\x1d\x88\xf2\xa1\x3e\xef\x31\xf9\x90\xa6\x7f\x21\x13\x52\x5f\x3d\x0a\x56\xf5\x46\x57\x77\xa7\x00\x72\xf7\xf5\x31\x70\x21\xaf\x4a\x40\x1e\x03\x2b\x82\x16\x30\x1b\x70\xcf\x17\x0b\xcb\xfe\xd7\xb8\x81\x7d\xf7\xeb\x42\x25\x53\xf4\x7b\xf1\x09\x79\xcc\x98\xa1\xb3\x2b\x7b\xf9\x9a\xd8\x5e\x74\x1c\xda\x4e\xb6\xed\x57\x38\xc7\x3f\xbd\xfb\xfe\xbb\xe7\x39\xaf\xc6\x66\x72\xe9\x1d\x5d\x4c\x92\xd3\xe7\xff\x76\xfd\xd3\xea\x97\x2a\xc1\x30\xbf\xc9\x57\x77\xda\x10\xa3\x4a\x26\xd3\x64\x68\x9d\xef\x70\x02\x61\x74\x40\xf8\x4a\x26\xd3\xe9\x37\x38\xa1\xcb\x04\x4f\xa7\x8f\xbf\xc1\xd3\x38\xf3\x30\x9b\xcd\x54\x0c\xb5\xbb\x46\xdb\x43\x9c\xf4\xfb\xc9\x0c\x4f\x8f\xbe\xc1\x47\xa6\x8b\xd5\x61\x32\x9b\x61\xfd\xf7\x91\xf7\xf7\x63\xef\xef\xaf\xbd\xbf\xbf\xf1\xfe\xfe\x57\xef\xef\x7f\xf3\xfe\xfe\x77\xef\xef\xff\xf0\xfe\xfe\x83\x9c\xdc\x0c\xcb\x99\xfc\xed\x6f\x4c\x16\x28\x2a\x42\x04\xe1\x72\x8a\x33\x15\xfd\x4d\x7e\xbf\xcc\xab\xd3\xeb\xbc\x48\x26\xcb\xbc\xa8\x48\xfd\x15\xbe\x22\x22\x9f\xdc\x5d\xc1\xfe\x2b\xca\x76\x8f\xa3\x1f\x5f\x9e\x57\xc9\x47\x00\x51\x9c\x79\xf8\xb5\x81\xe8\xeb\x7f\x7f\x27\xc8\x7f\xad\x8a\x0e\x20\xd2\xb9\x50\x13\x7c\x0f\x78\x52\xd4\x75\x3f\x18\x7a\xbc\xfd\x24\xb7\x82\xdf\xd6\xa6\x9f\xea\xfc\xdd\xa9\xed\x38\x7f\x65\x9d\x70\x9e\x57\x74\x3e\x5a\xf0\x72\xb5\x28\x6f\x58\x00\x48\x41\xc9\x68\x5e\x32\x01\x02\xc4\x76\x13\x87\xb9\x93\x34\xe2\x23\xc4\x81\xb6\x63\xac\x78\x17\xda\xa4\x24\x2f\xe6\xe0\x8c\x34\x32\xe2\xfa\xf6\xfa\xd5\x9c\x97\x45\x31\xd2\x5c\x49\x44\x1e\xc5\xb4\x01\xcf\x20\xde\xe0\x1c\x57\x78\x8d\x0b\x3c\x77\x5c\xc9\xd2\x33\x82\x5b\xfe\x4f\x35\x82\xbb\xfc\xdd\x14\xff\x93\x99\xe2\xdb\x4d\x6d\xa5\x5b\x6a\x3d\xc1\xfa\x9e\x8f\x6c\xec\xec\xcd\x32\xff\xc7\x66\x33\x38\xc2\x2d\x0b\x64\x9c\x00\x6e\x4d\x28\xeb\x2b\x0b\xe5\x1b\x4e\x85\xb5\x4e\xee\xc2\xce\x4c\x67\x19\xa8\x5b\x29\x94\xf4\x13\xb5\xd8\x6c\x8c\x49\xdc\x20\xcb\x96\xa9\x40\x3e\x10\x0e\xac\xd9\xd8\x49\xe3\xe8\xfc\xe0\x8c\x76\x27\x6d\x96\x1b\xbd\x9d\x92\xfd\xe9\x5f\xe6\x15\xfb\x4a\xf4\xcf\x09\x61\x7d\x08\x81\x93\x17\xb4\x22\x8b\xfe\xa8\x0f\x3e\xf6\x29\x0a\x6a\xc8\x33\x24\x5e\x1c\x55\xd0\xf2\x4e\x84\x9b\xfe\x55\x18\x53\x25\xbd\xca\x92\x35\x53\xeb\x5e\xb8\xf9\xfe\x48\x96\x05\x99\x8b\xe1\x50\xff\x21\xb9\xb1\x13\xef\xef\x8e\x28\x47\x21\xcf\x2e\x0f\xf2\x78\xd0\x82\xb7\xd0\xd8\x5d\x43\x1d\x16\xce\x96\x30\x25\xd9\xb5\x84\xc3\x63\x74\xec\xad\xc2\x04\x4c\x33\x0f\x79\xba\x5f\xe5\xa1\x69\x7a\x73\x76\x54\x29\xf3\x52\xc5\x40\x64\xea\x13\xf8\xaf\x1a\x8f\xa3\x09\x55\xc6\xa1\xb5\xbc\xd9\x72\x0d\x9b\x8d\x7f\xc1\xaf\x3d\x2c\x76\x6d\xc6\xaa\x88\x78\x63\x96\xf1\x7a\x79\xe2\x66\xe0\x7d\x8d\x22\xa6\xf1\xd9\x19\xac\xff\xec\x6c\xb3\x89\xb6\x82\xbc\x07\x01\x86\xb9\xf0\xc1\x2c\xbd\x88\x4f\xa1\x69\x51\xdb\x1e\x4f\x8a\x71\x6a\x85\x5e\xdf\xb7\xed\x48\xc2\x2e\x50\xb1\x1e\xe8\x3d\xb9\xad\x52\x86\x22\x41\x9d\xd0\x5d\x09\x56\xf1\x53\x32\xab\x11\x2e\xfd\x6b\x38\x18\xf8\x3f\x71\xd9\xb8\x84\x83\xf0\x03\x4e\xdd\x9d\x2c\x37\x9b\x72\x6c\xc0\xfb\x17\xc2\x11\x04\x47\x0e\xee\x68\x99\x71\x23\xdc\x8e\x39\x01\x4e\x06\xfe\x5a\xac\xe7\xa4\xe1\x24\xe0\xcc\x3e\x01\x3a\x37\x1b\x5e\xe3\x12\x92\xc9\x5b\x37\x8d\x60\x34\x18\x0c\xe6\x12\x7e\x3f\x09\x7e\x29\xd0\xa1\x26\x28\x07\x0e\x0a\x35\x97\xa6\x55\x8d\xf2\x66\x37\x47\xe8\xc2\x31\x42\x4e\xad\xcc\x94\xf9\x45\xe9\x4e\xe9\x5c\x6e\x35\xdc\x21\x32\x1c\xa6\x03\xed\x2d\xf0\x1d\xad\xc4\x66\xe3\xff\x92\x7b\x2a\x72\xca\xaa\x38\xdb\x62\x19\x06\x79\xa1\x48\x46\xc6\x4a\xad\xa1\x35\x71\x0e\x4f\xd8\x71\xcf\x14\x2c\xdd\x50\xb6\x28\x6f\xc6\x5c\x65\xfd\x7b\xc6\xe8\x15\x78\xbc\x7e\x2b\x19\xb3\x56\x60\xbd\x4c\xd7\xbe\x20\xc2\x98\xc1\xbe\x15\xb7\x05\xd1\xd1\x8b\x13\x56\x32\x22\x11\x24\x1f\xe7\xa6\x23\xe5\xbd\x9d\xf0\x35\x63\xca\xca\xd8\x2f\x7c\x53\xe4\xb7\xe0\x70\xab\x22\x5c\x2e\x4e\xaf\x09\x13\x72\xb1\x84\x11\x9e\x26\xb6\x1e\x61\x0b\xa7\xca\xe9\xf3\x54\x56\x57\x02\xe7\xd6\x16\x1c\x61\x01\xd9\x68\x94\x0f\x3e\xfc\xf9\x69\x18\xf4\x9b\x2c\x05\xf7\x2d\xa1\x5d\x11\x90\xa7\xad\xc2\xb9\x2a\xd1\x9a\x38\x94\x26\x09\xc2\x26\xaa\xbb\x53\x5c\x2d\x48\x25\x28\xd3\xc1\x6a\x6c\xd8\x07\x57\x2e\xca\x55\x82\x93\x82\x2c\x25\x0f\xc8\xe9\xc5\xa5\xfc\xf7\x86\x2e\xc4\x65\x82\x93\x4b\xa2\x3f\x94\xe2\x92\x70\x38\x83\x2a\x41\xb8\x4c\x8b\x2c\x4f\xd3\xdb\x34\x9d\x77\x1a\x10\x02\x8b\x82\xf9\xf1\x97\x79\xa5\xe9\x39\x7b\xa9\x96\x01\x27\x0d\xa2\x25\xe2\x32\x3b\x3c\x2e\x9f\xb0\xe3\xf2\xe0\x00\xd1\x69\xe9\x1b\x70\x96\xd6\x8e\x96\x67\x2b\xd5\x75\x2a\x14\xf5\x80\xdb\x6a\x22\xd0\xe0\xa9\x2c\x9b\x59\xaf\x26\x84\x10\x1a\xd3\xea\x5d\xb9\x9e\x5f\xbe\x24\xd7\x74\x4e\xb2\xe7\x65\x59\x90\x9c\xa5\x83\x81\x82\xe5\xe1\x30\x29\x99\x90\x15\x2a\x91\x73\x21\x91\x94\x2a\x40\x98\x8f\x21\xd4\xe6\x35\x59\x64\x83\x23\xec\x81\x2d\x04\x41\xc8\x92\x04\xf3\xb1\xe0\x39\x53\x9c\x37\x65\x17\xaf\x4c\x49\xf4\x82\x8e\x82\xba\x23\xca\xc2\xf6\x64\xb1\x77\x73\xb2\x68\xb5\xa6\xec\xe2\xf5\x5a\xdc\x63\xf8\x72\x2d\x64\x0f\x4a\x22\x90\xc8\xf7\x19\x9b\x93\x4a\xca\x2f\xd9\x74\x86\x79\xad\xc1\x04\x97\xb1\x14\xc7\x00\x2e\x31\xfe\xc7\x12\x77\x11\x87\x9d\xb7\x92\x97\xe9\x93\x0f\x2b\x4e\xaa\x0a\xf8\x94\x75\x25\xfa\x84\x4a\x28\xee\x9f\x13\x88\x02\xd1\x2f\x79\x00\x4c\x3d\xcf\x28\xae\x61\xcb\x26\x86\x43\x8f\xe5\xc0\x77\x1e\xeb\x3f\xd1\x77\x98\x60\x43\x5d\x26\x83\x43\xec\xd3\x25\x79\xbd\x6b\x84\xc5\x70\x78\x61\x63\x52\x34\xd4\xec\x08\x8b\x8c\xe0\x94\x67\xd3\xbb\xf7\xe4\x76\x92\x48\x4c\x9f\x60\xd5\xb1\x77\xbf\xae\xd2\xeb\x94\xf8\xfe\x69\xba\xa2\x8a\xd8\xb6\x25\x3a\x92\x39\x9c\x57\x8b\x8e\x43\xd3\x48\x7d\x64\x5f\x5b\x82\x66\xe3\x35\xa3\xff\x58\x93\x57\x0b\xdd\x9d\x05\xd0\x53\x26\x17\xb8\x30\xcf\x2b\x10\xe6\x2c\x00\x5e\x35\xb7\x28\xf4\xa2\xba\xc6\x6a\xb5\x10\xba\xb7\xb5\xdc\x66\x72\xa8\x45\x39\x87\x35\xa9\xfc\x02\x6f\x89\xe4\x1d\xe5\x51\x4f\x17\xb9\xc8\x47\xe4\x7c\x31\xa2\x8b\x6c\xc7\xfc\x71\x32\xd2\x91\x76\x66\x09\xd2\x21\xb6\x2f\x21\x07\xc1\x8f\x65\x29\xbe\x2f\xd7\x15\x79\x59\xde\x78\x8c\x27\x43\x77\xc2\xde\xce\xcd\x86\x38\xe2\xc8\xc6\x02\x54\x63\x92\x1b\x18\x0e\x79\xa4\xe0\x44\xa8\x1d\x31\xcd\x13\x3c\x38\x42\x93\x81\x87\x24\x83\xac\x0f\x0d\x7e\xf4\x3c\xed\x5c\x70\xce\x69\x3e\x2a\x6f\x58\xe5\x96\xcb\x9c\x23\x5f\x35\xa6\x0b\xc5\x7c\xe0\x44\xae\xd2\x71\xad\xc3\x21\x8d\x55\x93\xa4\x72\xb3\x21\x29\xc5\x1c\x39\xb3\x5d\xbb\x0e\x2c\x3c\xf0\x91\x8b\xb2\xbb\xaa\xe3\x29\x8d\xe7\x45\x59\x91\x94\xe1\xc1\x21\x9a\xc4\xd6\x5c\x63\xbb\x94\x16\xed\x55\xc1\xb9\xca\x52\xc0\x67\x9b\xa2\x38\x76\x2a\x10\x79\x5f\x33\x06\x6d\x1a\xce\x49\x45\x7f\xd1\x71\xc6\xc6\x7c\xcd\x8a\xb2\x5c\x3d\xbb\xc9\x39\xf9\x91\x18\x9d\xc5\x96\xd6\x25\xa7\x84\x09\x80\xdb\x39\x04\x86\xde\xd1\x91\x50\x49\x99\x3d\x84\x3f\x1c\xa6\xdd\xab\x4c\x3c\xc4\xaf\x6f\x84\xfc\xf0\x56\x7e\x50\x39\x30\x38\xac\x6e\x57\x0f\xc0\x6d\x6c\xdb\x1f\x63\x8d\x2d\xcf\x20\x82\x72\x75\xe3\x0b\x22\xde\xb6\x0b\x53\x6e\x9a\xe7\x8b\x85\x2a\x87\xb9\x51\x76\x01\x1a\x72\x7d\x5b\x05\xc9\xb9\x3c\xfe\x08\x7e\xd2\x91\xd6\x24\xbf\xf4\xc7\xa2\x3c\xcf\x0b\x58\x43\x65\x22\xac\xa9\x92\x46\xcf\x66\xc6\x71\xfa\x60\x37\x24\xc6\x85\xdd\x17\x76\xb6\x1f\x5a\x94\xcf\xbb\xef\xb9\x75\x77\xb2\xfb\xe8\xec\x0e\x2b\x14\x4a\x5e\xb5\xb7\x38\x8c\x20\xd7\x81\x8b\x25\xc3\xed\x1f\x4a\x07\x5e\x8e\xb1\x04\xea\x81\x3d\x98\xc5\xeb\x75\x9b\x12\x11\xcb\xdd\x41\x90\xe6\xd8\x34\x82\x40\xc5\xca\x4a\xed\x95\x64\xc3\xe7\xe4\xa4\x21\x32\x84\xbf\x26\x8d\x52\x08\xb0\x3d\x2f\x4a\x46\x7e\x28\x17\x24\x1d\x1c\xa2\x1e\x1d\x4b\x44\x9f\x38\x97\x72\x2a\xf1\xfa\x08\x2a\x25\x48\x32\x6c\xd4\x49\x33\xe6\xc1\xc8\x72\x6e\x3a\x43\x7a\x8c\x22\x81\x57\x83\x48\x93\xbe\xc4\x9a\x92\x1a\x07\xfd\xe4\x8b\x85\xee\x84\x47\x3b\x31\x6c\x51\xd8\x0b\x93\x6d\x08\x5b\xbc\xb8\xa4\xc5\x22\xa5\xfe\xfd\xdc\x9f\x52\xe2\xb3\x94\xfa\x47\xca\xf4\xa2\x4c\xa7\x35\xd8\x46\x79\xc4\xf4\xfb\xb5\xc2\x65\xaf\xcf\x2b\xc2\xaf\x09\xdf\x07\x90\xae\x1a\x6d\x80\x69\x6e\x76\x14\xc8\xed\x29\x99\x1e\xce\xe4\xbe\x90\x85\x3c\x1c\xc3\x6f\x6f\x36\xf0\x5d\x4d\x31\x28\x41\x92\x8d\x8a\xa3\x54\x78\x51\x8c\xce\x63\x5c\xaa\x3f\x52\xc9\x77\xc9\x05\xcb\xe3\x90\x3c\x56\xb5\x3e\x17\x9c\xe8\xe8\x47\x4d\xec\xb4\x73\x07\x34\xb6\x6a\x8d\xb6\xa0\xd5\xbc\x64\x8c\xcc\x6d\x9a\x90\xf6\xc6\x28\xa3\x39\x3d\x60\x13\x21\x44\x46\xda\x85\xd6\xe5\x46\xf9\xf8\x45\x92\x4e\x0f\xbd\x84\x63\x79\x85\x5d\x8b\x72\xe2\xc4\xe1\x3e\xa8\x69\xdf\xe1\xe3\x27\x17\x99\x84\xe2\x6e\xf9\x9a\xa9\x68\x0f\x21\x2f\x66\xb8\x06\xee\xc8\xa9\x1b\xa1\x45\x3b\x22\xbd\x5b\x4d\x42\x64\x3d\xf7\xe1\x02\xa2\x1d\xdc\x93\x11\xb0\x33\x8f\x93\xd4\xee\x7b\xa7\x82\x77\x10\xcf\x41\x28\x3d\xc4\xcc\x51\xe6\x37\x80\x04\x51\x6a\xd0\xa1\xbc\x46\xe8\x98\x0f\x87\xc9\xf3\xd7\x2f\x7f\x56\xba\x0f\x2d\xf8\x8f\x45\xf9\xe7\xd5\x8a\xf0\x17\x79\x45\x52\x34\x1c\x26\x7f\x7a\xf7\xfd\x77\x5b\x6a\x1c\x23\xa1\x9c\xcc\x38\xc2\x5d\xc3\x72\x7f\x58\x1b\xc1\xdf\xd1\x86\x26\x83\x10\x5b\xa8\xf1\x2f\x33\x0e\x3e\x72\xa3\x55\x2b\xb3\x09\xce\x7e\x4c\x85\x46\x74\x4c\xb4\x70\xdc\xb5\xe4\x4f\xed\xcf\x3b\xbb\x57\xa0\x7d\x7d\x76\x9d\x53\xd8\x71\xdd\xaf\x6d\x87\xc1\xfd\xcd\x54\x53\xa5\x2f\x49\x21\xf2\x0a\xa5\x02\xd4\x63\xe3\x85\xfc\xf9\x57\x88\x92\x09\x7f\xfe\xdc\x2b\x9f\x70\xfd\xf5\x07\x72\x91\x0b\x7a\x4d\x4e\xd2\x32\x6b\x7e\x83\xdc\x42\xb0\x98\x97\x4a\x11\x93\x22\x34\x29\x9f\x9a\x6a\x6f\x00\x34\xc2\xa6\xe6\x5b\xb4\x69\x6e\x46\xfd\xd9\x8d\x9a\x67\xcd\x6f\xf1\xa6\x66\xd4\x9f\xcd\x08\xc3\xa1\xd7\x76\xdb\xb0\x2e\xe4\xc9\x1b\x55\x04\x71\x30\xcb\xcd\x26\x47\xc3\x21\xec\xdb\x82\x56\x5a\x54\x30\x9b\x5b\xe2\x1c\x7b\x1b\x6c\x22\x4e\x36\xfb\xae\x7b\x5b\xf0\xdd\xcd\x25\x21\x45\x82\x05\xbe\x9b\xe7\x2b\xb1\xe6\x20\x2d\xaf\xf2\xaa\xa2\xd7\x64\x32\x38\xaa\xb7\xb0\x8a\x59\x0c\xa3\x46\x2f\xf1\xce\x41\x6a\x3d\xf7\x80\xd9\xdd\xcd\xac\x66\xad\x12\xd5\xa6\x81\xbf\x76\x5c\x0d\x74\xd7\xbe\x47\x9d\xc8\xce\xd9\xb5\xf6\x3a\x85\x17\xc5\x3b\xef\x23\xb1\x44\xb8\xec\x88\x31\xa7\xe4\x19\xbb\x47\x21\x9d\xb8\xb0\x89\xc7\xef\xbd\xb4\xe8\x61\x7e\x8e\xd5\x6d\x1d\x68\x9f\x05\x36\xd9\xdd\x24\x1e\x58\x30\x11\xa4\x82\x97\xbc\x58\x34\x73\x13\x6d\x57\x59\x2f\x71\xe8\x2e\xd5\x31\x2e\x26\x84\x5d\x53\x5e\xb2\x2b\xd0\xb4\x8f\xbd\x5f\x76\x0a\x9e\x5e\x57\xf3\xca\x1d\x93\xe8\xdb\xcb\x72\x41\x0c\x5b\xfd\xfc\xf6\x95\x36\x7a\xf6\xba\xf1\x34\x32\xe2\xb6\x20\xad\xee\xd4\x81\x25\x09\xb6\x2e\x99\x2b\x13\xd9\xbd\x20\x4b\x61\xfc\x8d\x41\x87\x6c\x3c\x8d\x41\x91\x8c\x75\x8c\x73\xa5\x4d\xc6\xb9\xfa\xe5\xa9\x94\x0d\x85\xc9\x87\x43\xff\xbd\x28\x8f\xbc\x17\x09\x74\x47\x0e\x3c\xf6\x5f\xe0\x64\xd2\x77\x01\xa6\xf2\xa9\x98\xe1\xe4\x38\x41\x4a\xe3\x96\xca\xba\xa2\x5c\x4d\xfa\x7e\x83\xe3\x04\x21\xcc\x75\xa9\x9c\xba\x57\xcc\x75\x31\xd3\xc5\xb0\x1a\xaf\x9c\xe9\x72\xaa\xcb\x61\x81\x5e\x39\xd5\xe5\xa5\x2e\x57\x6b\xf6\x2a\x94\xc8\x58\x41\xeb\x77\xf2\x4b\x71\x55\xbc\xcd\x97\x90\x95\xa3\x9e\xa1\xe1\x70\x91\xfa\xca\x46\x0e\x7d\x41\x2a\x4d\x04\x7e\xae\xc8\x2b\x8c\x00\xe2\x34\x54\xf0\xcf\xf0\xae\x97\xcd\xf9\xd6\xfe\x10\x9e\xfb\x1a\xc7\xdb\xb0\x7a\x0c\x08\xa7\xd5\x3d\xc7\x8c\x74\xb2\x7d\x54\x0d\x9e\xd3\xf5\x3d\x07\x52\xed\x76\xf4\xad\x94\x91\x7a\x17\xcf\x14\xb7\x7a\xdf\x71\xa0\x8f\xed\xe3\x38\x35\xca\x47\x0d\x65\xbb\xd9\x3e\x9a\xa7\x52\xf8\xa8\xe1\x5c\x3f\x7b\x8d\x07\xca\x83\x4f\x31\xa0\xec\x68\x8f\x73\x6b\x4b\x7d\x1f\x7f\x8e\xad\x3e\xf7\x3b\xd7\x4f\x3c\x95\xce\x6e\x77\xcc\xa6\x2d\x9d\x7e\xdc\x34\x5a\xfd\xed\x31\x7e\x20\xb1\x7e\xfc\xf0\x7e\x77\xdb\x47\xef\x12\x58\x3f\x6a\x0e\x1d\x9d\x36\x66\x52\x64\x73\x84\x36\x9b\x02\xfe\xe7\x59\x05\xde\x3c\xdc\x2a\x50\xbf\x5c\x7c\x11\xab\x40\x33\xd6\x0e\xaf\x13\xd0\xf1\x61\xea\xac\xf5\x4a\xcf\xce\xa5\xfc\x9f\x6a\xad\x97\xff\x53\x18\x96\x55\x5b\x0c\xcb\xca\xdf\xbe\x61\xd9\xda\x83\xa4\xf5\xaf\x61\x31\x55\x04\x16\x53\xc5\x27\xb5\x98\x9a\xff\x6e\x31\xf5\xdb\xb5\x98\xfa\x34\x96\x3b\xcb\x2e\xb3\x9d\x94\xb5\xcd\x76\xd2\x74\x9e\xa6\xf4\x7f\xac\x29\x4d\x65\x4d\x69\xd6\xfb\x99\xd2\x10\xf3\xa0\x97\x25\xf3\x82\xce\xdf\x83\x05\x89\x28\x57\xf2\x34\xf2\x0b\x95\x3f\x6b\x70\xe4\x59\x8f\xb0\xff\x05\xd6\x23\xc5\xbe\xd6\x23\xea\x81\xd1\x3e\x2e\xc6\x74\xb3\xa1\x4a\x7e\x41\x2b\x10\xf6\x36\x9b\xe4\x4a\xb6\x02\x81\xc2\x68\x6e\xed\x59\x0c\x87\x40\x07\xc6\xe7\x6b\x21\x4a\x49\x9b\x84\x4e\xdb\xe8\x1f\x8b\x24\xb5\x8d\x4f\x36\xc1\x96\xfc\xfe\x8e\x7c\x10\xca\x94\x81\x96\xec\xcf\x4c\xd0\x02\xe6\xb9\x5e\x99\x5a\xa2\xbc\xb8\x28\xc8\xab\xea\x39\xa1\xec\x42\xb1\x79\x8b\xe7\xb7\xf0\x66\xab\x34\x49\x27\xfb\x55\xcb\x06\x47\x93\xf8\xc3\x83\x6a\x2a\x01\xd1\xea\x3b\xd4\x8e\xbd\x50\xa0\xd6\xde\xad\x98\x49\xb3\x51\xaa\x98\x7d\x80\xa0\x8b\x2a\x33\xc8\x66\x33\x08\x46\xde\x6c\x3a\xb7\x5b\x41\xf7\x27\xdf\xea\x2f\xb9\x89\xcd\x5d\xfc\x6f\x72\x7b\x5f\xa8\x4b\x8f\x54\x14\xd9\xf7\xe4\xf6\x45\xb9\x20\x27\x3b\x86\x9c\x7c\xfd\x38\xa8\x0e\x36\x51\xa1\x0e\x1a\xef\x9a\xf5\xe4\xf1\xbf\xfb\x7d\x68\x0b\xa6\x0e\xd3\x96\x36\xa8\xbc\xb3\x72\xd0\xc7\x3d\xf7\x9d\x35\x25\x9a\xe8\x40\xa7\x6c\xd1\xb9\x9d\x7b\x9c\xe1\x21\x26\x12\x56\x9a\xfa\xfe\x6e\xb0\x4c\x83\x57\xc4\x66\xbd\xd6\x66\xe2\xc6\xa3\xe3\xd1\x3d\x1f\x1d\xdb\x9b\x80\x89\x7e\x66\x18\x2f\xcb\xf9\xba\x4a\x11\xae\x88\x78\x47\xaf\x48\xb9\x16\x4d\x63\x61\x08\xbe\x67\xea\x23\xc1\x6f\xef\x52\xe1\x8c\xc5\x14\x0a\x86\x09\xa4\x09\xa0\x1a\xad\x8f\x86\x04\x60\x54\xb8\x4f\xa9\x21\x35\x83\x43\xf9\xff\xda\x38\x53\x87\x74\x96\xbb\x0d\xa4\x2f\xa8\xea\x82\x36\xdb\xf9\x2e\x68\xb5\x92\x2d\x54\x3d\x21\x8f\xf3\x10\xe1\x36\x80\xc6\xdf\x3c\xf5\xfa\x63\xda\xf2\x1d\x38\xe8\xa3\x77\x7c\x7b\x07\x57\x0a\x49\x27\x36\xb7\x3b\xfc\xf4\x1e\x89\xdd\x7a\x1a\x85\xdb\xee\xc7\xc3\x86\x72\x53\x3d\x2f\x17\xb7\x9e\xe1\xba\xea\xae\xc3\x6c\x5d\x90\x0f\x62\x54\x01\xe5\x19\x19\x48\x4f\xbc\x59\x7f\xfe\xb7\xf5\x2d\x77\x7d\x3b\x69\xbc\x1f\x8a\x79\xf8\xfe\xe5\x8b\xc5\x3d\x37\x6f\x86\x86\xc3\xbc\xa9\xad\x66\xf0\x0d\xb3\x88\xb6\xba\xc5\x99\xdc\x57\x13\x43\xb7\xf5\x86\x30\xf5\x55\x30\xf3\x58\x6d\x4d\xe3\x3f\xc1\xb8\xaa\xa7\x7d\xc6\xb4\x14\xf1\x13\x8c\x6a\xfa\xda\x67\x5c\x9f\x48\x7d\x82\xa1\xbd\xee\xf6\x1e\x1d\x28\xd7\xa7\x1a\x5b\x76\xb6\x7d\xe4\x38\x2e\xfd\xa8\xf1\xa3\x5d\x6e\x9f\x45\x0b\x03\x7e\xd4\x04\x9a\xbd\xed\x18\xfb\xe3\x35\xae\x3b\xfa\x6b\x8c\xcf\x32\x8a\xd0\x66\xc3\xe4\xff\x3c\x3d\xe7\xf2\xc1\x7a\xce\x50\xbf\xf9\x50\x0d\xe6\x0e\x7f\x66\xfd\x38\x36\x5a\xe6\x45\x71\x9e\xcf\xdf\x8f\xe8\x72\xe4\x08\xec\xfd\x7d\xa1\xb9\x8a\x62\xfe\xe5\x22\x6f\xe9\x7e\xf2\xaa\xa2\x17\x2c\xf4\xe4\xf5\xfc\x83\x8f\xc5\x93\xb4\x29\xc3\x3f\xc9\x8e\x4e\x0e\x27\xcd\xaf\xa3\x23\x04\xbe\xc2\x26\x9c\xf4\xc1\xd1\x93\xa3\xcd\xa6\xdd\x56\x1c\x1c\x9d\xa8\x89\xb8\x2e\xa6\xe2\xe0\x08\xcc\x99\x38\x72\xaa\x03\x5f\x8b\x65\x83\xd7\x33\xa3\x24\xa5\x66\xa8\x32\x63\x53\x3a\xeb\x91\x69\x39\xcb\xf8\xb4\x9c\xd9\x8c\x17\xa4\xc6\x65\x36\xdd\xcb\x3b\x69\x66\xd3\x65\xdf\x2f\x6e\x51\x60\x96\x3a\xd1\xf9\x6e\xb4\x92\x66\x70\x84\xf0\x35\xe1\x82\xce\xf3\xe2\x8d\x3e\xe7\x46\x95\x24\x5f\x8b\x32\x41\xf8\xb2\xe4\xf4\x97\x92\x89\x9d\x15\x03\x53\xe5\x66\x1d\x27\x78\x23\x7c\x25\x39\x48\x9d\x03\xf8\x27\x78\x5f\x6e\x4f\x4e\x6b\xe8\xed\x8a\x9b\xfd\x35\xaf\x8c\x56\xe8\x23\xac\x5d\x3d\xf6\x6d\x68\xdd\xfd\xb0\x05\xfc\x8e\x65\xba\x88\x66\xd8\x25\x2d\x9a\x4c\xa3\x77\x29\x99\x61\x51\xae\x54\xca\x5c\x78\x80\x87\xbf\xd4\x5b\x3b\xfc\xa9\x9e\xd5\xe1\x4f\xfd\x82\x0e\x7f\x7b\x36\x03\x13\x88\xd1\x4b\xdb\xc1\xbf\x20\xdb\x7e\x70\xb6\x09\x1a\x0e\x13\x2b\x65\x43\xb9\x4d\x3e\x64\x62\x9c\xb9\x88\x69\xa6\x08\x27\x0b\x7a\x9d\x58\xe5\xc5\x96\x0c\xe4\xcd\x1e\x56\xeb\xf3\x82\xce\x9f\xbd\x79\x95\xe0\xbb\xba\x5d\xec\xfb\xd2\xc9\x0a\x3d\x2f\x79\xb4\x0a\xaf\x08\xbe\x8a\xe9\x9d\x71\x5b\x99\x84\x11\xcd\xc1\x7a\x04\xd3\xea\xf5\x8a\xb0\x89\x5b\x92\x56\x76\x16\xb7\xf2\xbb\xe4\xcf\xe0\x81\xc1\xb0\x6b\x5e\x45\xc7\xc1\x41\x0d\x2d\xcf\x4d\xee\x4a\xdb\x9f\xfc\x6b\x7c\x4e\xd9\x42\x8f\x05\x62\xb0\x2a\x82\x3f\xfd\x32\x25\x06\x4e\x3c\x61\xd4\x2f\x75\x56\x9e\x13\x6d\x3c\x65\x7e\x7b\xb5\xea\x5a\xfb\xe2\x78\x7e\x4a\x8d\xdf\x9b\xcd\x9e\x8e\x4b\xc4\x39\x2b\xf5\xbc\x28\xed\xb0\xf0\x92\xbd\x62\x54\x24\xa8\x27\x86\x43\x15\x3c\x68\x41\x17\x3f\x92\x39\xa1\xd7\xe4\x99\x10\xbc\xba\x57\xe2\x79\x7d\x6c\x03\xa5\xec\x39\x2b\x8b\xc5\x4b\xbd\xb1\x58\x98\xaf\x8d\xfd\xee\xb5\xaa\x66\x02\x8b\xe1\x70\x40\x4e\x22\x36\xb3\x5a\x89\xa1\x6a\xa2\xc9\x40\x0c\x87\xc4\x80\x6b\xa4\x22\x01\x8b\x8d\x8f\xc8\xa4\xef\xc3\xa1\xbe\x44\x2a\xae\x92\x84\x64\xd4\x23\xc3\xa1\x8e\xea\xae\x22\x7d\x6a\x93\x8d\x66\xd0\xa8\xbb\x8e\x14\xab\x30\xfa\x05\x11\x2f\x5d\xd3\x57\x8b\x14\xd5\x52\xb4\x9f\x44\x5f\x51\xac\x22\x5f\x9c\x74\xb5\x9e\x88\xba\x46\x0e\x82\x15\xb3\xf8\x6d\x39\x5f\x57\x1d\xb6\xee\x06\x10\xa0\x8e\x81\x04\x57\xe0\x6e\x2e\xc2\xe0\xf3\x02\x77\xa2\x69\xd5\xea\xdd\x39\xa7\xf5\x33\x39\xf5\xfc\x71\xbc\xee\x74\xd8\x49\x03\x0b\x90\xe6\x47\x5d\x61\x4b\x73\xbd\xe9\xc9\xef\x09\xea\xf1\xe1\x70\x70\x94\x65\x19\x4f\x05\x26\x48\x2b\x62\x02\x14\xa1\xb1\x80\xb2\x81\xaf\xf5\x45\x6d\x3f\x13\x6c\x9d\x31\xdf\x32\x63\xee\xcd\x98\x07\x13\x66\xc1\x84\x5f\xc8\x81\x75\x9b\x94\xe9\x69\xb3\x94\xbb\x69\xb7\x47\x37\x8a\x26\xf5\xa4\x26\x39\x21\x4a\xaa\xf4\xee\xd2\xd2\x17\x40\xf9\xd7\xe1\xcf\x07\x91\x8d\x15\x27\xd7\xb4\x5c\x57\x7f\x69\x52\xf4\xa0\xf4\x4f\x6d\x42\x0e\xa6\xfe\x9a\x04\x44\xf7\x1d\x2c\x56\x11\x32\x5e\x7b\xf7\x73\x52\xe4\x5d\x8e\x89\xe0\xaa\x27\xf2\xf3\x57\x6c\x41\x3e\xe8\x94\x1b\x5a\x13\x56\xcb\x63\xd6\x38\xb7\xa5\x0c\x0c\x8f\x50\x1f\x57\x82\x4e\x1c\xe6\x86\x57\x56\x83\xe2\x01\x05\x7a\x18\x3a\x6a\x9c\x19\x85\x0b\x12\x80\x82\xa7\x6f\x8b\x9a\x18\x3a\xf7\xc1\x7b\xfb\x71\x92\xce\x2d\x5a\xa6\x62\x38\xe4\xed\xb8\xa9\x31\x93\xb4\xa6\xa5\xa3\x2e\xd8\x6c\xb6\xce\x5b\x21\x6f\xdf\x7d\x1e\xa1\x5e\x08\xfa\x1e\xdc\x26\x6d\x3e\x30\xc1\x49\x93\x87\x4c\x70\xd2\xe2\xee\x12\x9c\x74\x83\xa0\x57\xd8\x84\x5e\x90\x3b\x02\x36\xa7\xc7\xec\x66\x2b\xc3\x5a\x2f\xfc\x2c\xac\xa6\xc5\xc3\x25\x28\xe5\x58\x74\x6d\x10\x66\xce\xf8\x1f\x6c\xa5\x25\xd9\xf0\x9c\x76\x64\x53\x0a\x88\xa7\x51\xd2\x11\xd0\xc5\xbb\xdb\x7c\xdc\xde\x2f\xef\xae\xf3\x71\x73\xe7\x02\xde\xcf\x43\x3d\x7e\x60\x82\x1a\xa4\x90\x31\xd8\xf9\x0d\x87\xa9\x7d\x6b\xd6\x9f\xc6\xa2\x5c\x81\x4d\x85\x28\x57\x9e\x09\xa9\x57\x8a\x93\xd5\x87\x04\x99\x37\x64\xaf\xa5\xc4\x36\x27\x29\x83\x7f\x23\x4d\xc1\xfe\x15\xda\x62\xa6\x0c\x60\x33\x85\xbc\x9a\xfd\x40\x19\xa4\x14\xf4\x7e\x9b\xa7\x6b\xf3\xb0\x1d\xa9\x6f\x7a\x6d\x0f\xad\xcc\x6d\xcd\xd8\x30\x3f\xf5\x92\xdd\xea\x0b\x90\xa3\xb2\x29\x91\x7f\x45\xfa\x52\xd6\xba\x5d\x7b\xa0\x30\x2a\x74\xa0\xfe\x8c\xf4\xa0\x4d\x7c\x75\x17\x81\x10\xa8\x6a\xc4\x0d\x1a\x46\x47\xfa\xbd\xde\x24\x1c\x1a\x0e\xd9\x94\xcc\xdc\xe0\x53\x02\xf9\x92\x7c\xa3\xe1\x29\x99\x79\xa5\xa8\x46\x58\x65\x57\xf4\xb9\xfc\x72\x95\x38\xe4\x3c\x9d\xd9\xa7\xed\x5c\x25\x76\x55\x33\x6a\x2e\x74\x9a\xcb\xb1\x12\xb6\x96\x98\xc5\xd9\x12\xb9\xd2\x13\x9d\xa5\xc9\x2d\x3f\x0f\xad\x90\x5d\x55\xbd\x13\x93\xfd\x5b\x48\x24\x03\x66\x26\xcf\x8c\xab\x76\x6a\x0c\x5e\x4d\xf6\xdc\xe3\xc4\x25\x97\x65\xe3\x6e\xdc\x91\x45\x2f\x99\x6b\xd1\x44\x28\x59\xe4\xd6\x45\x28\x34\x43\x98\xd5\x46\xb0\xd8\x97\x68\x18\x8a\x31\x1c\x92\xc6\xeb\x5a\x8c\xbc\x5a\xa9\x05\x18\x1b\xac\x58\xdb\x16\x33\xdb\xd1\xe4\xa8\xb6\x89\x56\xa0\x2c\xc2\x0a\x6e\x91\xd8\x68\x7a\x57\xe3\x2e\x8e\x10\x61\xde\xc9\x1f\x9b\xe0\x6a\xc3\x21\x4f\x05\xc2\xa2\xc6\x2d\x86\xb5\xbd\x59\x1f\xe7\x18\x00\xc1\x70\xc0\xc7\x00\x1e\x33\xbd\xb2\xe1\xd0\x7b\x30\xb2\x20\xfc\x6d\x5e\x89\xe7\x65\x29\x5c\x24\xac\x2e\xf1\x7c\x38\xec\x2c\xf2\xe9\x44\x97\x58\x76\x53\xf2\xab\xcb\xb2\x20\x8d\x98\x88\xf9\x83\xb5\x82\x46\x0f\x31\x22\xd6\xcc\xfc\xcb\x87\xc9\x6c\xab\x97\x5a\xe9\x93\x27\x53\x73\x59\x93\x05\xe5\xc9\xec\x13\x85\x84\x7c\x14\x0d\x09\xf9\x50\xe5\xe8\xa3\xfd\x82\x3e\x7e\x6a\x25\xe9\x27\x0d\x18\x19\x33\x39\xfd\x3d\x76\xe2\xa7\x8a\x9d\x98\xff\x4a\xc1\xc2\xaa\xdf\x83\x85\x3d\x1c\x4d\xad\x1f\xa4\x05\x0f\x02\x62\x4c\xee\x11\xb6\xca\xbc\x84\x4f\x06\x47\x38\x8c\x65\x20\xbb\x8d\x05\x32\x98\xec\x1d\xb0\x2a\x12\x9b\x62\x77\x63\x1d\xae\x2a\x1a\x95\x61\xbf\xa1\x21\x58\xd5\x99\x06\xda\x77\x7a\x8f\x1a\xfa\x71\xa5\x14\x6e\xfa\x49\xed\x0c\x9d\xfe\x39\x5c\x01\x11\x6e\x8b\x6c\xad\xc4\x05\xbe\x00\x1b\x49\x53\x70\x5f\x09\xb8\x46\x18\x08\x5c\x6b\x9c\xfb\xc7\x91\xc3\x5b\x7c\x0b\x1b\xb2\xf5\x43\x82\xd4\xf1\x4c\x80\x48\xc7\x32\xa1\xe4\x33\x9a\x09\x2d\x2d\x95\x99\xd0\xb2\x4e\x9e\x09\x23\xb3\x54\x99\x08\x7c\x12\xe9\x32\xad\x42\x7f\xc4\xea\xfe\xfe\x88\x95\xe7\x8f\xc8\xa3\xfe\x88\x4d\x87\xc3\x86\x3f\x62\xd3\xdf\xb0\xe9\x8f\xd8\xf4\x37\x6c\xfa\x23\x96\xba\x3c\xef\xf2\x47\xcc\x91\x44\x27\x8a\xe4\x3d\x3d\x44\x41\xd0\xfc\x88\x87\x22\x8a\x3f\xba\x6c\x7d\x1f\x11\x1d\x61\x6f\xb2\xae\x82\xe0\x7d\x21\x1a\x76\x27\x8b\x7f\x8e\x37\xf4\x9e\xaf\xb3\xe8\xd7\x56\x33\xf0\x20\x0f\x9a\xf8\x5f\xbc\xea\x2d\x9d\xb9\xe5\x93\xb5\xb2\xbf\x23\xb0\x51\xf3\xb9\xe3\xfe\xaf\x1b\x9e\x8c\xd2\x76\xda\xdc\x19\x91\x4d\x89\xc7\x11\x1c\x9d\x98\x20\x50\x71\x3f\xa7\xac\x3b\xcc\x07\xe9\x08\xed\xb1\x47\xbe\x9e\xdd\xd0\x73\x66\x1c\xe0\xd2\x4f\xf3\x6a\xe3\x29\x90\x8a\xc5\x4b\x7b\x66\x9b\x8d\x14\xfe\xa2\xc7\xe9\x49\x7e\x3b\x31\x53\x43\x2d\x87\xa5\x64\x2d\x51\x11\xcd\xb8\x42\x45\x65\xc6\x35\x2a\xca\xe5\x5f\x7e\xf5\x63\xc9\x6e\x29\x59\x79\xb3\xd1\x1a\x0d\xa6\x2c\xd6\xb3\x2c\xa3\xf6\xaf\x52\x2b\xd9\x73\x88\xaa\xa3\x1a\x78\xaf\x48\xd5\xfc\x92\x48\xbe\xe1\x35\x9b\x93\x34\xc9\x97\x82\xf0\x1f\x61\x18\x05\x00\xd8\x2a\x81\xd1\xc4\x89\xe6\xf6\x4d\x42\xc3\x4f\x20\xa0\x57\xcd\xdd\xc2\x02\x35\x1f\x48\xda\x3a\x80\xe6\x7d\xd0\x3a\xdc\x53\x93\x51\xae\xfd\xcd\xd3\xca\x7e\x94\x8a\x38\xbc\x63\x66\xc0\x7d\x35\xd5\xad\xc7\xc3\xe0\xf5\x3e\x41\x5b\x82\x5c\x88\x3d\xc2\x90\xe9\xd7\x10\x8f\xf5\x92\x97\xf6\x37\x11\x42\xae\xd7\x7e\x8e\x82\xd7\xb2\x57\xfa\x45\x2a\xb6\xad\x91\xd1\xe0\xbd\x82\xfa\x3c\x87\x7b\xd9\xe3\xca\x95\xa1\xa9\x4d\xb7\x43\x81\xbb\x6f\x8f\xdd\x6f\x2c\x60\xde\x22\x83\x31\x7f\x30\x1a\x0c\xa6\xac\x7f\x99\x20\x3c\x81\x47\x97\x3d\x87\x03\x5b\x0d\x02\xcd\x62\x03\x52\x7f\xc0\xb2\x3d\xe0\x77\x24\xbf\x26\x2a\xbf\xda\x7d\x06\x2c\xa0\x59\x6c\xc0\xd2\x1f\x30\x0f\x06\xb4\xf6\x82\xbd\x7c\xef\xd1\xde\x93\x5b\x75\xbf\x23\x43\xe5\x7a\x28\x1c\xc3\xf6\xdb\x82\xf9\x99\x49\xc5\x02\x0f\xba\xb0\x83\xb1\xb0\x81\xed\x68\x84\x66\x18\x09\xfb\xca\x11\x9a\xb2\x8b\x97\xe5\x95\x71\x8e\xb6\x4d\x3b\xa9\xe3\x3d\xf1\xa4\x75\x7b\x47\xad\x27\x56\x43\x72\x1c\x7d\xda\x87\x30\x3b\xb7\xf6\x34\x76\x28\x1d\xb8\x0b\x5e\x23\x71\xe4\xde\xb6\x5f\x02\x3b\x8c\xf7\xcd\xa1\x5b\xb1\x9d\xb8\x40\x4b\x11\x54\xac\x67\x1b\x7e\x8c\x34\x3e\x11\x0d\x0f\x80\xae\x30\xa7\x79\x33\xcc\x69\xfe\x6b\x87\x39\x25\x36\xcc\x69\x83\x00\x9c\xc4\x68\x58\xd3\x31\x44\xc5\x3c\x6d\x2c\xbe\xc6\x0d\x48\x8e\x44\x2f\xfb\x95\x03\x98\xd6\xb8\xfb\xf2\x74\xc4\xe8\x81\xee\xee\x19\x24\x50\xa0\xbb\x54\x74\x04\x09\x14\xdd\x41\x02\xbb\x22\xf0\xec\x11\x24\x30\x06\xed\xdb\xe2\x06\xe2\x76\xc8\xb9\xdf\x6c\xac\x39\x5c\x89\x72\xb5\xf3\xc8\xa2\xfb\x63\x5c\xc8\x1e\x1a\xee\x10\xd5\xd8\xe2\xc0\x0e\xf8\xa8\xe2\x7b\xef\x55\x26\x71\x79\x84\x34\x85\x11\xab\xf2\x51\xf9\x0f\xb1\x43\x96\xb1\x10\xa4\x98\x05\x2f\x32\x01\xe3\xfd\x99\x63\x8d\xb6\xe8\x6d\x5c\xa0\x3a\xde\x11\x92\xb4\x4c\xf3\xfd\x43\x8f\x96\x69\xc7\x70\x46\xd3\x95\xa0\x07\x47\x20\xcd\x11\xae\x76\x46\x1a\xc5\x2d\xbe\xf3\x53\x86\xba\xc4\xcd\xaf\x9f\x3b\xb8\x25\xf6\x05\xfb\x2e\xa3\xb1\x06\x50\x83\xf1\x49\x9c\x86\xc2\x3b\xdc\x9e\xc1\x0a\x1d\xe9\xe9\x0e\x56\x48\x3e\x32\x58\x61\xc4\xf3\x6c\xdf\x60\x85\xb1\xa6\x7b\x06\x2b\x8c\x36\xdd\x33\x58\x61\xa4\x2d\x6e\x3b\x2f\xee\x15\xac\xd0\xdb\x60\xa5\x6d\x6f\xf7\x5d\xe3\x38\x4f\xda\x46\x72\x2a\x62\x67\x84\x1f\x42\xee\x51\x29\x1e\x4c\x33\xc6\x43\xf9\x51\x3d\x85\x17\xd5\x53\xec\x8c\xea\xd9\x51\xe3\x18\x11\x65\x62\x00\xee\xe0\x1d\x13\x89\x45\xf5\x24\xc0\xae\x84\x1c\xb6\xbf\x7a\x17\xc3\x53\xbd\x87\xfb\x81\x3c\x13\x74\x92\x1a\x1e\xfd\x8d\x5f\xa0\xdc\x1f\xf7\x0c\xa5\xd8\x6e\x89\x26\x69\xc8\xfa\x3f\x3c\x36\xa3\x25\xf1\xdd\x2b\x84\x0d\x68\x4f\x62\x4f\xb4\x66\x82\x4d\x36\x95\x84\xdd\xc1\x27\x71\xd7\xb2\xf7\x77\x92\x7c\xc0\xa0\x8d\xbd\xfc\xe7\x0d\x32\x89\xdb\x87\xfc\xcf\x1e\x56\x12\x5b\xf1\xf1\xf3\x86\xd3\xd7\x62\x73\x07\x17\x99\x46\x2c\xc0\xbb\x94\x5e\xb1\xa5\xee\x13\x7e\x7f\x97\xde\xeb\x37\x10\x85\xdf\xb7\xd8\x58\xd7\xa8\xf7\x40\x8b\x8d\x68\xb8\xae\x07\x5b\x6c\xd8\xde\x3e\xc2\x62\xe3\x0b\xa5\x90\xdf\xf9\x74\xec\x6c\x37\x68\x2b\x4d\xb3\x7d\x4f\x24\x5d\x79\xdf\x25\x04\x11\x74\x92\x08\xbe\x26\x89\x36\xd0\xae\x95\xa6\x6d\xef\xe7\xef\xf0\xcd\x9b\xed\xf6\x57\xf2\x02\xa2\xf1\xb2\x68\xbd\x09\xab\x38\x1d\x09\xc2\x39\xa7\xf9\x8f\x65\xeb\x75\x74\xcc\x49\xbe\x78\xcd\x8a\x5b\x79\xa3\x20\x04\xa5\xc8\xcf\xc1\xd8\x71\x72\x88\x6d\xd4\x8f\x89\xe7\x04\x86\x1b\x91\x3d\x26\x83\x23\x37\x4b\xcf\xd8\x88\x2a\x51\x47\x33\xf0\x89\xb5\xaf\x35\x1f\xae\xc3\x0f\x33\x1c\xb3\x58\xb2\xb3\x86\xc9\xd9\xf8\x9a\x89\x90\x97\x1e\x27\xd6\x0d\xc9\x53\xbf\xcb\x52\x6d\x9f\x3e\x31\x6b\x49\x70\xe2\xf4\x27\x13\xab\xbe\x49\x30\x0c\xf0\x5d\x7e\x4e\x0a\xf5\xb5\x90\x7f\xfa\x9f\x21\x66\x85\x57\x56\x90\xc5\xf9\xad\xae\xa0\x3c\x53\xcf\x5d\x8d\x85\xf9\x60\xab\x8c\xf2\xb5\x28\xe5\x5e\x17\x44\x10\xfb\x0d\x32\x0d\xcb\xca\x84\x2d\x72\x30\x76\x52\xcd\x8d\x37\x8e\xfe\x4d\x3e\xac\x72\xb6\x70\xbf\x2f\xf3\x6a\x55\xae\xd6\x2b\xf3\x9b\x2a\x43\x1a\xf3\x13\x62\x02\xb9\xda\xda\xf1\x13\xf6\x83\x8a\x82\x24\xb3\xd6\xfb\x68\x53\x87\xb2\xf3\x75\x2a\xfe\xfe\xa4\x1a\x9b\xb3\xf0\x5f\x9c\x23\xef\x1f\x49\x3b\xf1\x53\xe3\xf7\xde\x0e\x55\xa2\xf9\xe4\xd8\x72\x09\xce\xe2\x9f\x5b\x8f\xaa\x0d\x4f\xe6\xfd\xe3\x79\xdb\x90\x06\xe4\x0b\xc4\x83\x58\xd0\xc5\x2b\x56\x11\x2e\x1e\xfe\x58\x99\x2f\x16\xdf\xe7\x6c\x91\x8b\x92\xdf\x1a\x9f\x71\x4f\x9b\xfd\x7a\x25\xbb\x73\xee\xe4\x29\xfa\xf8\x47\xd2\x5f\x3b\xfe\x47\xdd\xbc\x5d\x13\xea\x80\x77\xec\x36\xb8\x79\xe9\x82\x6a\xc6\x5f\xa5\x71\xf3\x64\x1d\xf9\x41\x9b\xb4\xd9\x72\x73\x15\x4d\xf9\x1b\xfd\x1b\x35\xef\xa6\xa9\xf0\xa3\xf9\x00\xf8\x57\x21\xaf\x96\xb9\x4c\x6b\xce\x80\xe9\x34\x82\xdb\xf2\xd0\x69\x2b\x19\xc9\x0a\x5e\x67\x89\xef\xfd\x14\xd9\x0f\xe3\x4c\x4d\x36\x9b\xc3\x1a\x39\x3a\x81\xb0\x8f\xd9\x5b\xb3\x0c\xf5\x5c\xfe\xb4\x8c\x8c\x1a\x53\x87\x69\xe3\x8e\xad\x14\x6e\x34\xa2\x6c\xb4\x82\xfa\x35\xc2\x21\x3d\x69\x4d\xe3\xd2\xb9\xa2\x6c\xd9\x19\x57\x4b\xf9\x0e\xed\x37\x0d\xf7\xbe\x8b\x6a\x84\xaf\xb7\x4f\xe4\x7a\xaf\x89\x5c\x7f\x82\x89\x34\x7c\x0d\xe3\x4f\x30\x5b\xb0\x78\xe8\x06\x18\xf3\xfd\xf3\x02\x9a\xc8\xda\xe9\x80\x6f\x36\x83\xa3\x81\xf1\x02\x44\xc3\x61\x24\x4a\x1b\xb4\x25\x8e\x53\x07\x40\x38\x1c\xb8\x20\x62\x7a\xad\xbd\x00\x3e\x1a\x4c\x46\x82\xb6\xc4\x14\xfb\x34\xd1\xdb\x90\xe7\xdb\x99\xee\xd7\x24\x1b\x1c\xa1\x9e\x68\x87\x9d\xaa\x6b\xf3\x16\x06\xa1\x58\xee\x71\x00\x02\x2c\x1d\x9c\x63\x63\x23\x0c\x5b\x74\x2f\x1f\xb6\x69\x5f\x76\x3f\x70\x18\x2c\xe5\x61\xc1\xc2\xb6\xb1\x20\x2a\xe2\x64\x47\x30\x31\x07\xd4\x9e\xcf\xa9\xd1\xd6\xc6\x00\xdd\x05\x75\x01\xb7\xad\xc0\xd7\xd5\x80\x6b\x6c\x9d\xcd\xf7\xb6\xdf\xc3\x8d\xed\x0c\x37\x66\x61\x43\xdb\x03\x7c\x3a\x6c\xe5\x0c\x0c\x9a\xce\xca\xad\xa8\x7e\x0f\x8c\xe4\xb7\x57\xf4\xbe\x58\xc4\xbe\x1a\xb7\x8e\xfa\xf3\x86\xf3\xc2\x5b\x71\xe4\x6f\x2f\x7e\x17\x8e\x31\xaa\xdb\x44\x97\x0e\xed\x0d\x94\x91\x4e\x7b\x12\x5f\x7d\x73\xef\xa7\x22\x12\xdb\x68\x8d\x5d\x77\x0c\x19\x18\xe8\xa7\x7e\x74\xe6\x8a\x30\xc9\xbd\x34\xe2\x54\x09\x54\xa3\x9d\x3d\x7b\x22\xfa\xce\xae\xbd\x40\x67\x62\x8f\x49\x6b\x84\x10\x98\x16\x47\xdd\xe6\xc3\x51\x74\x48\xb3\x7d\x46\xd8\x66\xd9\x13\x76\x6a\x63\x96\x09\xa4\x95\xc7\x4d\xa9\x65\x3f\xa3\x3f\x2c\xba\x0d\xae\x8c\x79\xc9\x8e\xcd\x6e\x1a\x5a\x71\xa7\x0f\x4a\x09\xe6\xc6\xee\x29\xc2\x44\x19\x43\x2b\xbe\xdf\x40\xdd\x06\x56\xbb\xec\xd5\x3c\x63\xb5\xee\x31\x80\xb6\xdc\xd7\x42\xed\x79\xb1\xf6\x6d\xd3\xba\x7b\x3f\x97\x15\xef\x69\x8d\xe6\xcc\xfa\xca\xfd\x66\xdf\x61\xce\xb7\xc5\xfe\xcc\x33\xe7\xcb\xf7\x1b\xa3\xcb\x8c\x2f\xf7\x07\xa9\x9a\x34\xe8\xcf\xab\x04\xf5\xaa\x9d\x23\xbc\x27\xb7\x12\xb5\x46\xba\xaf\x74\xf7\xa1\xfe\xb7\xdc\xe5\xb1\xb7\x4f\x32\x85\x88\xef\xde\x17\x73\x59\xfc\xd3\xbb\xef\xbf\x7b\x9e\xf3\x6a\x6c\x26\x9a\xde\xd1\xc5\x24\xb9\xfc\x43\x75\x94\xff\xd7\xdf\x69\x82\xcf\x8b\x72\xfe\x7e\xf2\xd5\x9d\x4e\x7a\x50\x25\x93\x69\x62\xe3\x26\x78\x7f\xfd\xa7\x1e\xc4\x28\x16\xff\xb3\x21\x82\x26\xff\xe9\xc9\x60\xc9\x7f\x5e\xfa\x3f\x16\x94\x27\x38\x19\xe6\x42\x70\x68\xea\x05\x69\x1b\xea\x6e\xa1\x8d\xb8\x2a\xde\xe5\x17\xc9\x0c\x27\x95\xc8\x05\x8c\x2c\xe7\x33\xfd\x06\x27\x74\x99\xe0\xe9\xf4\xf1\xd7\xf8\x0f\x78\x9a\x68\x3d\xc1\x6c\x36\x03\x97\x6f\x7c\xd7\xa8\x7f\x88\x93\x7e\x3f\x99\xe1\xe9\xbf\xab\x18\x4e\x58\xf0\x35\x99\xe1\xe9\xd1\x21\x4e\xe6\x7a\xfe\x5b\x95\x5f\xc6\x7d\x75\x54\x72\x7a\x41\x99\xec\xea\x3f\x66\x58\xf6\xfb\xb7\xbf\xc1\x2f\x7f\x46\xdf\xe0\x69\xe7\x4c\x5c\xbd\x6f\xf0\x34\x29\xaf\x09\x2f\xf2\xdb\x1d\x13\x57\xff\xf7\x90\xe9\xdb\xfe\xd5\x74\xff\xe0\x4d\x79\x86\x93\x55\xce\xf3\x2b\x22\x08\x97\x43\xcd\x6a\x98\x81\x5a\x4a\x41\x04\xcc\xf1\x3f\x70\xe2\x65\x0f\x51\x1f\x3c\x87\x5b\xf8\x5d\x72\xbd\xec\xa3\x23\xb9\x6e\x35\x43\xb5\x9c\x99\xfd\x67\x3a\xb5\x51\xb4\x66\xfb\xb4\xdb\x77\x43\xfe\x0d\xcb\x1e\x1e\x43\x07\xd3\xe9\xd1\x63\x9c\xd0\x45\x02\xdf\x0e\xf1\xd4\x53\x3e\xc3\x0e\x43\xb9\xde\xaf\xe9\x63\x09\x37\xdb\xce\xbc\xbf\x15\x20\x46\x6a\x94\x7f\x53\x53\xdf\xab\xee\xbf\xea\xba\x6e\x7e\x0d\x73\x1b\x39\x45\xb9\x33\x21\x20\xed\xec\xdd\xaa\x67\xf4\xe6\xd9\x21\xbe\x06\x38\x34\x0b\x37\x39\xb2\xf4\xd8\xea\xa7\x2d\x85\x1b\x29\xcb\xfe\x5d\x01\xef\xf4\xe8\x6b\x2c\x41\xe6\x6b\x59\xb4\x18\x51\x50\x80\xea\x69\x41\x73\xc8\x68\xa5\x7a\x8f\xd5\x91\xbb\xab\x39\x70\x70\x7f\xb0\x5e\xbf\xdd\x4d\x6c\xb7\xad\x94\x46\xdb\xdb\xb8\x14\x54\xb6\xde\x0d\x2d\x8a\xd1\x42\x71\x48\x5e\xcd\xce\x9c\x49\xbb\x1a\x7a\x49\xa7\xf6\x1d\x23\xd1\x5b\x3f\x9d\xc1\x21\x46\xe0\xf8\x6f\x7f\x63\xfd\xbe\x0f\xcc\x47\xdf\xe0\xa3\x43\x7b\x45\x5d\x49\xfb\xaa\x6e\xb9\xc7\x8f\xcd\x45\x8e\x5c\xf0\x18\x32\x62\xc1\x7d\xd6\xf7\xa6\x1d\x31\x47\xad\x25\xb9\x58\xc3\xc3\x07\x93\x22\x0d\x3d\x87\x6c\x96\x33\x3c\x4d\xfe\xef\x7c\xcd\xab\x92\x4f\x0e\xff\x6f\x62\x06\xff\x1d\xf1\x7d\x01\xc4\x77\xf4\x3b\xe2\xfb\x1d\xf1\xfd\x8e\xf8\xa0\xf0\x68\x0b\xe2\xeb\xf8\xae\x7a\x53\x73\xd8\x81\x22\xf6\xe6\x28\x8f\xcc\x4d\x7c\x8c\xc3\x6b\x78\x0f\x6e\x13\xa0\xfa\xb2\x2c\x16\x60\x5f\x00\xed\x5c\x0c\x91\x6a\x55\xe4\xb7\x93\x3e\x2b\x19\x39\xde\x0f\xbf\xc9\x4f\x97\x79\x75\x7a\x9d\x17\xc9\x64\x99\x17\x15\xa9\xbf\xc2\x57\x44\xe4\x93\xbb\x2b\x10\x1f\x94\xe7\xff\xc7\x8a\x33\xe3\xcb\xf3\xaa\x11\xde\x65\x67\x7c\x93\xfb\xa4\x9e\xfb\x0d\x49\x4b\x37\x6f\x5f\xff\xa1\xf8\x79\xc5\x76\x49\x4b\x2d\x19\xa9\x5b\x24\x6a\x49\x4f\xbe\x4c\x64\x04\xa5\x7d\x85\xa3\x07\x91\xb1\x3f\x3c\x8c\x8a\x45\x9a\xed\x96\xc3\xda\xe4\x6b\x37\x79\x72\x70\x10\xd0\x8a\x7f\xdd\x46\x2b\xda\x6f\x98\x86\x56\xc4\x08\x8e\xde\x30\x36\xcf\x41\x36\xdf\xd1\xa5\x22\x1b\x9e\xb0\x37\x8b\xf7\xfd\xf5\x83\xfb\xfe\x3a\xd2\xb7\xa1\x71\x8f\x03\x1a\xa7\xed\x74\xb4\xd9\x91\xfe\xe8\x5e\xa9\x61\xf0\x35\x2b\x08\x6c\xb1\xa6\xdf\x2e\x0c\xad\xdc\xbf\x43\x77\xe8\x8a\x2e\xfa\xa6\x3d\x70\x2a\xa6\x99\xb1\xfe\x80\x66\xce\x0e\xca\x34\xf4\xcc\x7c\x76\xf3\x1a\x8e\x9b\xf0\xbb\x0d\xfb\x72\xf6\x38\xe1\xbe\xfe\x9b\x2f\xf8\x63\x65\xfe\x15\xae\xa1\x61\xde\xd3\x6e\x1e\xec\x40\xb3\x83\xaf\xf1\xbf\x6f\x25\x78\xd1\x44\x00\x96\x4a\x42\x5a\x51\x5f\x39\x6c\x9a\x35\x35\xc1\x8d\x16\x5a\xe7\x1b\xd6\x56\x1a\xdd\x46\x4d\xab\xbb\x0d\xeb\x1a\x45\x6d\xa3\xb6\xaf\x73\x0f\x1b\x78\x69\x1c\x62\x6d\x40\x69\x1e\x69\x71\xca\x16\x7b\x93\x7a\x4d\xe4\xff\xc3\xa3\xf1\x1f\x41\xdd\x3f\x27\x2d\xd3\xe0\xfc\x99\x68\xd9\x6f\x89\x86\xfd\xf4\xcb\xbf\x95\x7f\xf8\xcb\xe3\xf7\x71\x1a\x66\x29\x4d\x8b\xbc\x48\x66\x4d\xd3\x80\xcb\xbc\xba\x54\x02\x9f\xa4\x10\xf6\x02\x63\x73\x2d\x71\xe2\xdb\xd6\x59\xa6\xd8\x99\xae\x1a\x45\xe8\xcc\xc8\x85\x5e\xd8\xbd\x00\xcf\xb4\x4b\xdd\xcd\x6f\x97\xf9\xd7\xba\x5d\x6a\x26\xe2\x90\xb2\x4f\x21\x65\xed\x66\x28\x7d\x23\xfd\x7a\x24\xd9\xa7\xdd\x46\xe7\xdf\x0c\xf3\xe0\x19\x5b\x5a\xb2\xc9\x49\xbe\x28\x59\x71\x9b\xb4\x57\x3c\x0b\xe9\x47\xab\xa6\x1b\xb2\x51\x53\x2d\xc8\x61\x26\x75\x47\x6c\xe0\xeb\x64\x7b\xb7\xe1\x9c\x77\x4d\xe2\xba\x3d\x89\x59\xf7\x46\x36\x53\x0b\xec\xd8\xc8\xe6\xf6\x85\xae\x25\xb8\x61\x7c\xee\x6f\x2f\x0e\xa3\x1a\x3d\x20\x3c\xd0\xe7\x3c\xa0\x8f\xdc\xf3\x70\x1b\x76\xf6\x1d\x6c\xd2\x03\xce\xb3\xa3\xa6\xbf\xc1\xbb\xea\xca\xed\xdf\x55\x07\x0e\x67\xe7\x62\x54\x3e\x8f\x1d\xb5\xd4\xc1\xee\x3c\x1e\xb2\x57\x67\x01\x50\x78\x30\xae\x69\x9d\x47\xa0\x3e\x23\x1d\xfa\x4c\xf4\x27\x16\x35\xf2\xd7\xa6\x43\x97\xbf\xbc\xfc\xae\xf8\xee\xfb\x17\xf7\xa5\x43\xa1\x42\xd1\xc3\x28\xbf\xa5\xc7\xa0\xee\xcb\xfe\x4f\xaa\x20\xdd\x15\x84\xd5\x30\x03\x2e\x67\x0a\x28\x8c\xcd\x5c\x82\x50\xa8\x66\xad\x8d\xf8\x7a\x8e\x6a\x37\xf4\x27\xa1\x04\xb5\x55\x85\x99\xe8\x1e\xe6\x46\xbf\x98\xd8\x4f\x81\x48\x6e\x4b\xfe\x63\xeb\x91\xed\x00\x08\x2b\x5d\xf6\xa3\xe2\x65\x93\x36\xdc\x67\x25\x4a\x14\xec\xa0\x2e\xa1\x4c\x18\x0e\x78\xfd\xd1\x03\xc6\x48\x7d\x30\xe0\x37\x31\x4d\xae\xdb\x80\x6f\x3c\x65\xab\xd9\x7b\xaa\x55\x8e\x3b\xa0\x59\xf2\x98\x7b\x40\xe4\x83\x9e\x38\xbe\xf9\x5f\xfd\xc0\xf1\xfb\xfd\xfd\xfd\xfe\xfe\x96\xef\xef\xef\x9a\xfa\xcf\xc8\x55\x3e\xfa\xbc\x9a\xfa\x98\x87\xeb\xaf\xcd\x5d\xfe\xf1\xf6\xfd\xe1\xe3\x5f\x7e\x29\x1f\xa2\xe5\xf8\xdc\xa7\xf1\x11\xba\xa6\xee\xa0\xea\x7b\x6d\xbd\xf5\xb7\x15\x2e\x2b\xa5\x09\x5a\x41\x33\x16\x4b\x12\x51\x66\xac\x9d\x0b\x22\xcf\xd8\xb8\x95\xbd\x06\x57\xd9\xb6\x1c\x14\x78\x9d\x75\x27\x9c\xc0\x85\x09\xde\xbd\xca\x2f\xc8\x5f\x5f\x2f\x97\x15\x11\x78\xee\x7f\xfc\x59\x7f\x5c\x66\x60\x0b\xfb\xbc\x5c\x83\xdb\xea\x8b\x82\x12\x26\x7e\x54\x71\x8b\x2e\xb3\xa5\x0a\xab\xb9\xc8\x96\x10\x67\x73\x95\x2d\x75\x7c\xdf\xab\x6c\x69\xe2\xfb\x5e\x67\xa2\xb3\x87\x8b\xec\xda\x54\xbb\xcd\xae\x75\xdb\xf3\xac\x69\x69\x2d\x5b\xc0\xa2\x37\x1b\x3d\x45\xca\x98\xd9\x87\xb3\xec\xae\xc6\x37\x19\xf7\x82\x6c\xe0\xd3\xce\xe0\xe4\x37\x68\x6c\x4e\xf1\x38\xe1\xa4\x80\xc0\x29\x10\x1f\x7a\x38\x4c\xf2\xf3\xaa\x2c\xd6\xc2\xfe\x36\xd1\x41\x6e\xba\x62\x7f\xdc\x64\x37\xf7\x1e\x16\x82\xa3\xdb\x91\xb3\x2c\x3b\xdd\x6c\xdc\xc8\xf2\xb7\x32\xec\xfd\x90\xdd\x74\xed\x5b\xef\x72\x94\x7d\xd0\x5b\x2f\xff\x92\x7b\x7f\x33\x2e\xe1\xc4\x54\xd0\x91\xe1\x30\xbd\x1c\x65\xe1\x37\x1d\x9d\xe0\x3b\xdd\x2c\x5a\xf8\xae\x5c\xa1\xfa\x36\xcb\x4f\x56\x93\x5b\x88\x5d\x7c\xa6\x93\xd6\xdc\x2a\x03\xd0\xb7\xd9\xe5\x41\x01\x2b\x80\xe4\x9a\x59\x96\x51\x39\xfb\xb5\x28\x47\xa0\x69\x90\x1f\xd4\xf4\x9f\x65\xdf\xe7\xe2\x72\x7c\x45\x59\x7a\x8e\x2f\x0f\x6e\xd1\x48\xfd\xce\x3f\xa4\x87\xf8\x12\xe1\xd7\x61\xf9\x2a\x2c\x3f\x58\x8d\x6e\x51\x8f\x66\xb7\x4f\x9f\x0d\x87\xaf\x9f\x3e\x3b\xd1\x3a\x8a\xc9\xed\xd3\xd7\xc3\xe1\xb3\xa7\xaf\x4f\x94\x66\x63\x52\x6d\x36\xea\x2f\x15\x69\xc6\xcc\x6c\xa4\xaa\xbb\xe9\xbc\xdf\x31\x9d\x17\x7b\x4e\xe7\xc5\x70\xf8\xfe\xe9\x0b\x33\xfa\xed\xd3\xf7\xc3\xe1\x8b\xa7\xef\xed\xf4\xe4\x74\xd4\x9f\x75\xe2\xa6\x70\x72\xa6\xd3\x08\x9d\x8f\xd2\xb7\x07\x2b\x34\x39\xd3\x09\x8d\xe6\xca\xc8\x1a\xea\xbc\x3d\x48\xe5\x28\x8f\x1e\x4f\xde\xc2\x56\xbf\xcb\x16\x2d\x50\xe9\x02\xaf\xe0\xc2\x20\x2f\x56\xee\xed\x5f\x24\x62\x4f\x13\x8b\xb9\xd0\x66\x93\xbe\x3b\xc8\xe6\x08\x27\xf9\x79\xa9\x7a\x2d\xd1\x19\xa4\x66\x7a\x37\xba\xe8\xd9\x5d\x3c\x27\x45\x79\x13\x94\x1e\x5c\x41\x29\x6c\xe7\x8f\xf2\xe7\xc1\xc5\x93\xf9\x81\x7f\x21\xff\xa4\xae\xf2\x9b\x6c\xf1\xf4\xa2\x57\x66\xae\x8f\xf5\x70\x38\xf8\x71\x38\x7c\x73\xa2\x07\x9d\xb8\xc1\x65\xd1\x9b\xe1\xf0\xc7\x13\x5d\x7b\xb2\xde\x6c\x52\xf7\x4b\x57\x44\xd8\x4c\xc2\x9f\xd9\xc9\xd5\x64\x74\x61\xa2\x0a\xde\x45\x12\xc2\xd2\x76\x32\xd9\x52\xc7\x51\x3f\xab\x6b\x2f\x89\x80\xc5\xcf\x80\x9b\x01\x0d\x47\xb0\x73\x1e\xc3\xce\x55\x76\x57\x07\x37\xa2\x54\xbd\xac\xbb\x31\x67\x8f\x76\xe3\x44\x38\xfb\x18\x7e\x3e\x68\xa1\xbe\x5e\x15\x99\x64\xb6\x06\xd8\x3a\xa0\xea\xe2\x3e\x2d\x2c\x6c\x36\xef\x89\x03\x3e\x3d\xe3\x79\xf7\x8c\x35\x6a\x5e\x76\xcf\x5b\xd5\xe8\x55\x2a\xa1\x52\x76\x07\xf1\xd4\xd3\xf9\x68\x89\x1e\x3d\xae\xbb\x2e\xa7\x1e\xf8\x72\x0b\x91\x59\x6c\xd9\xaa\xe8\xfa\x2f\xd5\x5d\x7b\xba\x50\x33\x8a\x2d\xdf\x5d\xcd\x72\x38\x4c\xa3\xbd\xe8\x2a\xc6\xa9\xd8\xc1\x6b\x7e\x92\x56\x2d\x20\xc8\x72\x4c\x25\x26\xec\xa6\x74\x76\x5f\x44\xb9\x9a\x8c\xa8\xa6\x7a\x35\x9a\x44\x3a\xd3\x10\x8e\xab\x8f\x49\x50\xe1\xc5\x1c\x61\x98\xe2\xd2\x79\x0d\x84\x71\xaf\x4f\x8c\x6b\xbb\xe2\xf6\x3c\xe7\xf6\x89\xe8\x2a\xa9\x31\x19\x5b\xae\xe8\x27\xad\xa7\x5b\xd8\xf9\x0b\xbf\x58\x0f\xe3\x72\x5d\xa9\xc0\x83\x7e\x84\xac\xac\xed\x15\xd7\x9d\x5b\x04\xf3\x2c\xa0\x96\xc2\x12\x56\xcc\xb2\x47\xa9\x84\xaf\x8d\xa2\x65\xe8\x11\x5c\xcb\x25\xfd\x00\xb9\x98\xbc\x9a\xa8\x99\x84\x41\xa2\xcd\x9e\x63\xcd\xc8\x31\xcd\x68\x18\xa4\xf0\x18\xd1\x65\xda\x3d\x2f\x8a\x30\x38\x0c\x03\x7f\x4b\xe7\x2a\x60\x98\x1d\x6e\x38\x64\x63\x41\x2a\x91\x8a\x71\x79\x4d\xf8\xb2\x28\x6f\x0e\xdc\x9f\x3f\x7b\x7f\xff\xd5\xe6\x9e\xa1\xbd\xd8\x24\xeb\x3d\x59\xd6\x1d\x39\x84\x3e\xb7\xe4\xe0\xf7\x19\x8f\x33\xd3\x91\xae\x96\x34\xf2\xd2\x42\xb8\x9c\x66\x5e\x5a\x7e\x42\x26\xbc\x06\x9f\x91\x7d\x36\xa3\x91\xe4\xe8\xb3\x2d\xbe\x11\x44\xb0\x05\xd5\x34\x23\x2e\xa0\xa0\x5d\x0c\x3d\x39\x9c\x50\x5c\x99\xb2\x9f\xf1\xda\x95\x55\x27\x87\x93\x0a\x17\xa6\xec\x7b\xc9\x63\xce\x5d\x71\x71\x22\x26\xc0\x8c\xcd\x25\xb8\xa1\xbb\xb9\xdc\x9b\xe1\x30\xcd\xff\x25\x63\x78\xfd\x2f\x19\x53\xc4\x64\x99\x95\x29\xea\xe5\xff\x92\x2d\xe5\xc7\xa5\x21\x97\x6a\x2a\x93\x1c\xab\x71\x27\xeb\xba\xf6\x17\xf1\x1d\x65\x44\xd1\xf3\xac\x54\xdf\x1b\x81\x14\xb3\x30\xdd\x2d\xf8\x82\x49\x54\x93\xdd\x85\xb1\x10\x27\x87\x38\x8c\x70\x68\x3e\xfc\xdc\xac\xf1\xb3\xab\x51\xc3\x6d\x3c\xf6\xa3\x3d\x9a\x30\x8f\xc7\x88\x67\x44\xb3\xab\x40\x06\x47\xc4\x17\x11\x30\xb3\xa5\x6a\xfa\xb6\x58\x73\x27\xb4\x11\xab\xf1\x20\x1b\x11\x9f\x35\xa6\x8d\x80\x8c\x07\x19\x8f\x56\xf8\x39\xd2\xc1\xbb\x72\x65\x8b\x5d\x7b\x16\x94\xbb\x7c\x4c\x52\x66\xb0\xe1\x93\xe5\xe6\x37\xc3\x29\x66\xcd\x74\x5c\x9e\xfc\x88\xcb\x2c\x8c\xf5\xac\x92\x75\x29\x6f\x33\x8b\xaa\x4d\x82\x91\x6f\x86\x43\x9b\x6e\xd1\x16\x4e\xbf\x99\x9d\xf8\x3f\x26\xd3\x99\x76\x25\xbb\xd3\x9a\xca\x09\xc3\x6e\xe1\x93\x43\x6c\x57\x21\x4f\x48\x39\x84\xb1\xe0\x28\x98\x7f\x14\x3a\x3b\x12\x0b\x8f\x83\x05\xc7\xa1\xd9\x9d\x26\xcc\x8c\x58\x20\xad\x84\xf0\x53\x45\x4a\x7f\x6e\x37\x95\x9b\xdd\x80\xab\xb5\x5f\xa8\x56\x30\xef\xc4\xe9\x0c\xf5\x92\x4b\xba\x58\x10\x26\xd1\xf9\xdc\xe1\x68\x79\xc5\xbc\x09\x64\xfe\x6c\x0e\x04\x16\x4f\x8b\x66\x9c\x4f\x31\xca\x9a\xdf\x26\xe2\x49\xd1\x8c\x24\xea\x55\xb3\xcb\x11\xd9\x61\xc7\x3c\x7e\xf6\xe6\xf1\xae\x5c\x65\xde\xd2\x0e\x38\xe6\x66\x16\x76\xf5\x27\xdc\x76\xef\x76\x84\x9b\x59\xb8\xc8\xa2\x5e\x35\x3b\x0b\x2e\x67\x41\x97\x29\x1b\x40\x2e\x8c\x54\x6c\x36\xdc\x92\x2a\x0d\x7e\xbe\x24\x4c\x71\x69\xc2\x77\x40\x6e\xcd\x9e\x65\x3e\xbc\xaf\xb5\x05\x6b\x9c\x67\x87\xc7\xf9\x93\xd2\xa4\x80\xcb\x0f\x0e\x50\x4a\xb3\x52\xd6\xb2\x6e\x85\xde\x8e\xd3\xf0\x3e\x86\x35\xe4\x5e\x50\xef\x98\x31\x19\x7f\xf7\xea\x87\xd3\xb7\x67\x6f\x4e\x7f\x3c\x7b\xf3\xec\x8f\xa7\x19\x19\xbf\x7c\xfd\xfd\xd9\xcb\xd3\xef\xde\x3d\x6b\x7f\x90\x75\xc3\x1a\xaf\xfe\x7a\xfa\x5d\xa8\x0c\x3b\xec\xb5\x2b\x88\x5e\xab\x97\x23\xed\x21\xfb\xb8\xd7\x1a\x91\x6b\x9f\xd6\xaf\x7b\xad\xd9\x31\xed\x8f\xca\xd6\x45\xe1\xe7\xdb\x53\xe1\x1d\xa8\x71\xfb\x6d\x06\x3f\x50\x7b\x90\x26\x74\xc9\xf3\x2b\x02\xa9\x3f\x2b\x3e\xcf\x92\xff\x93\x60\xa2\xb3\xc4\xda\x6c\x32\x8e\x83\xb2\x65\xd7\xb4\xa2\xe7\xb4\xa0\xe2\x36\x33\xd0\x66\xcb\x74\xde\xda\xc3\xd5\x07\xf7\xcd\xa4\xa2\x0d\x3e\x9e\x97\x7c\x41\x78\xa6\x72\xbf\x35\x1c\xe6\xfd\x70\xc8\xc4\x44\xdc\x22\x63\xad\x2c\xfd\x49\x5d\x42\xd3\xa4\x27\x54\xa6\x6c\x84\xc5\xf8\x86\x53\x41\xd2\xe4\xc9\x60\x51\xce\xc5\xed\x8a\xf4\x2f\xc5\x55\xf1\xf4\x89\xfe\x2f\xc9\x17\x4f\x9f\x3c\x52\xff\xc8\x71\x9e\x3e\xa9\x56\x39\x7b\xfa\xd7\x27\x8f\xe0\xdf\x27\x8f\xd4\xc7\x47\x50\x3d\x91\xfd\x99\xec\x2a\x52\x08\x83\x99\x2d\x29\xaf\x0c\x9f\x07\xf3\xd3\x9a\x11\x4d\x30\xc2\x65\xf8\x81\x99\x89\x4d\x07\x4b\xdb\xbc\x88\x8a\x2d\x5e\x11\x31\x82\xf0\x49\x2a\xd6\xe3\x23\xcd\x85\x3c\xb2\xa5\xb1\x40\x85\x5e\xe1\xb6\xce\xda\xa5\x9a\xe3\xa1\xd5\x48\x25\x3e\xdc\x56\x63\xc5\xcb\x2b\x5a\x91\x7d\x92\x3e\x3e\x80\x19\xb2\x03\x66\xb9\xf6\x80\x6e\x33\x7b\xad\x7c\xf9\xad\xc4\x91\x06\xc1\xf4\x76\xa4\x7a\x44\xd1\x1e\xd5\xe5\x9b\xce\x30\xcb\x06\x87\x98\x66\x83\x23\x5c\x9a\x7b\x2c\xf8\xad\xa5\xa5\xb9\x64\xbf\xa6\x8d\xfe\x67\x29\x3a\x1e\xa4\x2c\x4b\xf3\xac\x1a\x33\xf2\x41\xa4\x08\x8d\x17\x25\x23\x08\xd2\x48\x43\xcc\xdf\x5c\xa5\x38\x40\x78\x20\xf1\xa1\x46\x5e\xc0\x8b\x1d\xcb\x21\xd1\xb1\x8e\x2b\xb2\x46\x77\x54\x4e\xa1\xcc\xd6\x36\x96\x88\x9c\xc0\x80\x0d\x87\xd5\x58\xcd\xdd\xfd\x95\xba\x80\x23\x74\x99\x52\xa4\xf2\x4c\x96\x75\x6d\x53\x61\xc2\xf2\x7a\xfb\xe6\x9f\x04\x9b\xda\xf5\x5c\xac\x39\xe9\x4c\x42\x59\xa7\xa8\x17\x66\xa1\x54\x8c\x40\x99\x12\xfc\x18\xe1\x2a\xcb\xa7\x87\x33\xbc\xce\xf2\xe9\xd1\x0c\x17\x6d\xfe\xe2\x28\xca\x5f\x1c\xf9\xfc\xc5\xd1\x6c\x72\x57\x6b\x3a\x00\x71\x92\x6d\x1c\xc7\x35\x3a\x51\xd1\xa4\xcd\x87\x0a\x9d\x54\x63\x71\x49\x58\x1a\x11\x24\xe4\x82\x6d\x48\xc9\x94\xe0\x30\x26\xe4\x1a\xe1\x35\x2e\x50\x8d\x26\x61\xbd\x2a\x5e\x6f\xf2\x11\x03\xaf\xf1\x5d\x1d\x1f\xca\x94\x38\x81\x48\xbf\x9e\xc0\xe5\x1f\x2b\x1c\x90\xe6\x68\x4f\x9c\x61\xcc\xcb\xbb\xf1\x44\x50\x5d\xdd\xf0\x1b\x9e\xaf\xf6\xaa\xa8\x6c\x18\x47\x57\xeb\x42\xd0\x55\x41\xf6\x45\x30\xdd\xe8\xe3\x33\x88\x91\x86\xe6\xb5\xe0\xee\x30\x0a\x77\x87\x3e\xdc\x1d\x7a\x70\xe7\x10\x84\x65\x95\xe9\xf8\x3d\xb9\xc5\x79\x46\xc7\x8c\xdc\x80\xb6\x14\x57\x19\x1d\x97\xc5\x42\xfd\x58\x67\xd4\x20\x33\x5c\xc8\xbf\x15\xbd\xc2\xf3\x8c\x4c\x4b\x88\x4d\xae\xce\x96\x56\xa7\x57\x2b\x71\x9b\xce\x0d\x32\x1a\x1c\xfa\x85\x0a\xa5\xd9\xc2\x10\x18\xe7\xf8\xee\x3d\xb9\x9d\x94\xd8\x4c\x61\x92\x63\x33\x81\x49\x85\xf5\xf0\x93\x35\xd6\x83\x4f\x8a\xda\x88\x76\x73\x88\xb8\x5e\x01\x30\x47\x2f\xd7\x12\x9d\x2c\x15\x48\x5b\x08\x45\x93\xe9\x72\x56\xef\x4b\xb1\xd4\x89\x5f\x10\x31\xba\x22\x55\x95\x5f\x90\x2a\x06\x8a\xb2\x5c\x25\xce\xdc\x0b\xe8\x5c\x57\xfb\x80\x32\x15\x97\x23\x3d\xf7\x58\x92\xe2\xdf\x1e\xc0\xe9\x10\x88\x7f\xaf\xc6\x84\x09\x4e\x49\x85\x45\x36\x48\xf7\xc6\x9a\x68\xb3\xf1\x7f\xe2\x2a\xb3\xc0\xa2\xe3\xa8\x19\xb0\x7a\xc3\x49\x25\xb9\xbe\xdc\x92\xc0\x3c\xc8\x49\xfb\x2c\xa5\x92\x3c\x8e\x97\x94\x2d\x62\x38\x8d\x64\x59\x56\xd6\xa8\xd7\xec\x6f\x2d\xa9\x5c\x95\x85\xa0\xa4\x57\xa5\xb6\x30\x5d\x23\x1b\xd7\xb7\x72\x0c\x7e\x9e\x55\xb8\xaa\x35\x07\xeb\x25\xf1\x84\xdc\x9f\xba\xfe\x58\xbd\xeb\xbe\xe1\x64\x49\x3f\x1c\x24\x8f\xfc\x13\x77\x80\x91\xab\xbc\x4b\xf7\x01\xd2\xad\xa8\x6c\x0b\xfa\xdc\x85\xd5\xba\xde\x75\xf9\xc7\xc2\xc9\x74\x86\x85\x3d\x29\x82\xc6\x9c\x00\x43\xd3\x3e\xa8\xe4\x5c\x25\x08\x86\xf7\x41\xa8\x2f\x39\xe1\xd7\xcb\x54\xb2\x23\xa4\xb6\xdb\x7f\x98\x79\x99\x6e\x53\x81\x13\x35\x9d\x04\x6d\x36\xe2\x53\x69\x93\x8d\x36\x8b\x01\xe6\x2c\x33\xe6\x30\x67\x9e\x31\x87\x39\xab\x8c\x59\xcc\xb9\x96\x7f\x6b\xcc\x59\xb8\x15\x8f\xaf\xf2\x55\x14\x2c\x53\x8a\x35\x5e\x43\x35\x42\x0e\x91\x3e\x4b\x0b\x34\xce\xd9\xad\x87\xcc\xc2\xd4\xa9\x3f\xbe\xfd\xcb\x9b\x71\x5e\x14\xb2\x1e\x60\x3d\x6e\xf7\x86\xa7\x45\x44\x65\xb8\x1f\x96\x6a\x03\x8f\xae\x5d\x72\xaf\xda\x56\xa8\xb9\xef\xee\x6b\xd9\x51\x2d\x2b\xaf\x2a\x7a\xc1\xd2\xbb\x1a\xbb\x85\xf7\x9a\xec\x85\xae\xc4\xf1\xdd\x79\x91\xb3\xf7\x2e\xf0\xf6\x78\xa5\xae\x35\xd6\xff\x7a\x25\x50\x13\x5f\x10\xa1\xe2\x3d\x43\xb0\xa9\x6f\x4b\xde\x8e\x32\xf5\x40\x08\x4f\x92\x5e\x2c\xb5\xed\x3c\x5f\x51\x91\x17\xf4\x17\x92\x06\xdf\x17\x79\x75\x49\xb8\xfc\x4c\x4c\x3e\x9d\x47\xd3\xb3\xd1\xec\xd1\x05\x52\xd9\x4e\x21\xbb\x4e\x5d\xef\xcb\x3a\xa9\x73\x74\x5f\x46\x44\xb2\xc9\x9f\x82\x82\x05\x04\xf1\xf3\x85\x78\x8f\x5d\x3c\x7b\xc1\x7f\xa2\xe2\xd2\x44\xec\x73\x51\xd6\x93\xe8\xb4\xc7\x3c\xbf\x79\xbd\x16\xab\xb5\x48\xf0\xe0\x08\xe1\x32\x0b\x79\x10\x84\xf3\xac\x1c\xb7\x00\x41\x67\x73\x67\x63\xbd\x56\x73\xdb\xec\x07\xab\x06\x94\x08\x09\xee\xb9\xca\x0e\x57\x98\x1b\xff\x41\x84\x3a\xeb\xbb\x5a\x2b\xad\x6d\x97\x77\x9a\x95\xb1\x5d\xc2\xb3\x8d\x5e\x78\x0b\xe3\x2d\x91\x79\x34\x5c\xa6\x04\x38\x9f\xb9\xbd\xe2\x97\xb5\xd5\x33\x2d\x4b\x7e\x95\x8b\xef\x55\x8f\xe9\x12\x87\xf7\x68\xe1\x16\x39\xc9\x6b\x3c\x47\x2a\x96\xfd\xc2\x43\x9e\x25\xae\x5c\x72\xbb\x93\x74\xde\xba\x89\x73\xdc\xe8\x06\x99\x33\x5c\x63\x39\xd7\x49\x85\xf5\x82\x26\x0b\xac\xb7\x62\x32\xaf\xd1\xa4\x39\xb9\xc5\xee\xc9\xdd\x0b\xdc\x43\x7e\xe9\xcb\x3d\xf6\x7c\x34\x97\x8e\xc5\x47\x4b\x96\xfd\x60\x2b\x5b\xc8\x13\x61\x72\xdf\xcd\x04\x39\xea\x4b\x3e\x98\xb5\xa4\x06\xd2\xa0\x71\x92\x55\xe8\x35\xbe\x4c\xc9\x6c\xef\x85\x79\xa4\x0b\x10\x1e\xbf\xca\x9b\x56\x6d\xfb\x60\xc0\x08\x56\x6d\xd1\xc6\x2f\x81\x19\x3f\xbd\x70\x08\x0f\xe6\x38\x57\x1d\x57\x0a\x51\xea\x35\x11\x94\x26\xe1\xa6\x51\x4c\x70\x8e\x99\x0d\x3f\x0e\x0f\x77\x9b\x4d\x7a\xe8\x91\xea\x94\xe1\x0a\xed\x2d\x71\x79\xe7\x43\x3e\xcc\x8b\x75\xf5\xbf\xfa\x70\xc8\xb8\xa0\x95\x18\x0e\x53\x32\xa6\x2c\x53\xbf\x50\xec\xc8\x8c\x44\xdf\x3c\x2e\x6f\x0f\xe5\x59\x81\xed\x7d\x78\x5c\x65\xfb\xb8\xca\x07\x1d\x97\xc2\xeb\xff\x6b\xcf\x0a\xb3\x6c\x10\x6a\x43\x3c\x09\x50\xa2\xb1\xb6\x1a\x06\x97\xea\x59\x83\x39\xad\x89\xd2\x3c\x36\x4f\xd1\x6c\x6d\x69\x8e\x90\x06\x47\x98\x37\x8f\x90\xe2\xfc\x41\x47\x48\xd9\xef\x37\xee\x63\x6f\x9c\xb7\x87\x9f\xfb\xc6\xdd\x53\x37\xea\xb5\x54\xb2\x10\x78\x40\xef\xd9\x42\xcb\xd2\x7b\xd7\x67\x6b\x59\x6f\xff\xfa\x06\xc4\x1f\x00\xaa\x0f\xa0\x27\x0f\x62\x11\x62\x8f\x45\x4a\x52\xff\x58\x48\xee\x6c\x60\xe0\xea\x8d\x3d\xaf\x3b\xc2\xd6\x57\xea\x0d\x63\x32\x38\xc4\x71\x4b\x22\x0b\x5b\xf5\x3e\x9d\x7f\xa7\x8f\x76\xaf\xae\xf9\xbd\xba\xfe\x41\x43\xc1\x5e\x5d\xb3\x7b\x75\xfd\xad\x06\x98\xbd\xba\xa6\xf7\xea\xfa\x95\x83\xad\xbd\x7a\x2f\xef\xd5\xfb\xe9\x87\xfb\xf5\x9e\xdf\xab\xf7\x17\x01\x7f\xb6\xd7\x00\x95\x37\xc0\xfd\x91\x90\x41\x0c\x9f\x8a\x60\xdc\x43\xb8\xdb\x4d\x62\x7e\x8b\xfa\x71\xc7\x73\x93\x86\x1a\x82\xe0\xbb\x75\x45\x9e\x13\x71\x43\x08\xd3\x02\xb2\x9a\x85\x0b\x44\x1e\x10\x1e\xe6\x13\x1e\x73\x10\x96\xea\xf0\xed\x54\x87\x3f\x90\xea\x18\xcc\xfe\xfb\x81\xef\x7d\xe0\xc7\x69\xe4\xa8\xf3\xa2\x28\x6f\x94\xea\x4f\xde\x4d\xf8\xf9\x43\xc9\x54\xee\x54\x34\x86\xdf\xcf\x8b\x9c\xbd\x07\x66\xc4\x16\x67\x83\xc3\x36\x3f\xb2\x05\x2c\xcc\x71\x7d\x6e\xb0\x70\x2c\xc5\x3f\x27\xeb\xa8\x55\x71\xcc\x18\x49\x78\xaf\x0e\xe2\x76\x45\xca\x65\x9f\x9c\x90\xec\xce\x2c\x73\x42\xea\x09\xf1\x8e\x9f\x8c\x4b\x36\x1c\xa6\x49\x05\x07\xea\x35\x1a\x97\xec\x84\x65\x53\xf9\xef\x6c\xd2\x30\xf2\x18\x83\x7d\x74\xca\xa0\xb5\xdc\xf1\x82\x08\x02\x4d\xa2\xd2\x82\x7e\x14\x90\x32\x03\x1b\x0e\x07\x6c\x5c\x95\x57\x24\xf6\x84\x50\x4d\xc9\x6c\xb3\x71\xa6\xb4\x53\x32\x1b\x0e\xd7\x53\x32\xab\x51\x28\x6a\x14\x2d\xf6\xd5\x1d\x63\x5b\xd8\x68\x6f\x49\x01\x56\xdf\xe1\x8a\x8b\x93\x62\x62\xfa\x01\x3f\x83\x02\xb4\x97\x27\xea\x9f\x2c\x01\xad\x7b\x32\xd1\xff\xda\xf2\xe1\x30\x35\x35\x4c\x5b\x84\x9b\x62\x4d\x81\xb6\xc2\xe6\xa3\xd1\x8a\xd3\xeb\x5c\x10\x6d\x62\xf4\x99\x74\x57\xbd\x36\xf8\xf4\x49\x2a\xd0\x5d\xda\xb2\xea\x19\xa4\xce\xd4\xa4\x5c\xf6\x05\x42\x51\xcb\x95\x17\x39\x63\xa5\xe8\xcf\xf3\xa2\xe8\xe7\x7d\xf0\x0b\xee\xe7\x55\x3f\xb7\xc7\x9f\xa0\x5a\x25\xf5\xc6\x44\x67\xdc\x80\xe9\x64\x62\xaf\xdd\x20\xfc\x73\x79\xcc\x76\x6c\x85\xbc\xa1\xbf\xc2\x66\xd8\x1f\x1a\xa3\x64\x7c\xdb\xf6\xb4\xcc\xd1\x46\x17\xe4\x73\xc5\xad\xd1\x26\x7f\xbf\xdb\x81\xfd\xc6\xed\xc0\xd4\x76\x79\xc7\xe4\x41\x35\xec\xa7\xd9\x2f\x9e\x1d\x1e\xf3\x27\xc2\x18\xed\xf2\x83\x03\x43\x3f\xc4\x94\xcf\x7a\x6c\xec\x38\xef\xcc\xff\xb1\xd9\x0c\x8e\x30\xbc\x0e\x2d\xe9\xc5\x5a\x95\x0f\x0e\x81\x7f\x5f\x93\x84\xb2\xbe\xa4\x22\x0c\xec\x3e\x75\x59\x37\xd3\xaf\x1e\xa1\x19\xb2\xbb\xe2\xbb\x8e\x48\x4e\xc8\x6c\xd6\x70\x48\x52\x31\x5e\xf1\x52\x94\xf0\x52\xc5\x11\x66\xf0\x0d\x33\x84\x85\x5d\x38\xcb\x6c\xa0\x8d\x04\x53\xf9\x43\xdd\x8c\x04\x97\x1d\x5b\xf2\xa5\x6e\x79\xf3\xfa\xd8\xb1\x88\xd7\xf9\x8f\x64\x49\xb8\xa4\x5d\x7a\x04\xd9\xb6\x7f\x99\x57\xec\x2b\xd1\x3f\x27\x84\xf5\x29\xa3\x82\xe6\x05\xad\xc8\xa2\x3f\xea\x43\x6a\xd3\x14\x05\x35\xe4\x6c\xc8\xc2\xa5\xd3\x14\x9b\x4d\xa2\xad\x49\x07\x86\xbe\x89\xe1\xd0\x3d\xd0\xb9\xaf\x27\x64\x22\x6a\x35\xdf\x94\x8c\xcf\xce\x60\xb7\xcf\xce\x36\x1b\x7d\x7a\xca\x2f\x55\x1d\x00\xd8\x2e\xa0\x78\x5a\x55\x4b\xf9\x85\x67\x47\x0a\x74\x58\xb4\x8e\xd9\x6c\x43\x6c\x3e\xc3\xa1\x6c\x04\x17\x31\xba\xff\x6f\xe5\xf2\xfb\xe4\x03\x64\x34\x95\xa7\x79\xb5\xae\x44\x9f\x50\x71\x49\x78\xff\x9c\xf4\x65\xeb\x7e\xc9\xbd\x03\xc1\x7d\x79\x60\xc9\x81\x19\x41\x22\x7f\x0b\x53\xc6\xde\x45\x19\x64\xa7\x62\x38\xf4\x01\xee\x6e\x5e\x32\x75\x01\x4b\x3e\xd1\x68\x91\x60\x5f\x38\x3d\xc2\x06\xe4\x25\x33\xec\x5f\x0f\x89\x3f\x6b\x84\xc5\x70\x68\x34\xaa\x55\xb0\x95\x27\xd1\xaf\xb0\x37\x13\xef\x20\x32\x01\x36\xf7\x81\x31\xa2\x49\xd6\xad\xb3\xbe\xe6\xc2\x24\xd1\x2e\x75\xf4\xf2\xd4\xbd\x27\x8f\x93\x03\x86\x83\x9f\x14\x37\x33\xbb\x71\xa2\x7d\xbc\x52\x54\x43\x62\x2f\x9e\x12\x3c\x05\xfb\xb6\x44\x97\x24\x58\xad\xbe\xc9\x77\xf2\x4c\x28\x73\x53\x96\xf1\xe9\xe1\x0c\xd3\x8c\x4f\x8f\xc0\xc4\x4e\x1e\x84\x49\x13\x69\x87\xd7\x59\x87\x2a\x22\xbc\x29\x26\x70\x9d\x83\x7a\xc8\x4f\x63\xee\x26\x7f\x41\x44\x4a\x51\x5d\xcf\x10\x26\xf2\xf6\x6f\xcb\x3e\xb4\x8d\x60\xee\xb2\xe1\x76\xc6\x45\x6e\x92\x9f\xd4\x50\xc4\xb7\xb6\x7e\x2b\x2f\x4a\x1b\x83\xff\x4e\x68\x7f\x8b\x84\xd6\x12\x11\x4f\xf2\xe2\xea\x06\xd0\x8c\xc9\x1b\x50\x66\x4c\xdf\x80\x86\x14\x10\x39\x00\x4f\xd1\x57\x81\xf9\x02\x41\xf5\x0e\x0b\x64\xb6\x45\xd7\xf5\xd1\x9e\x0a\x31\xb8\xff\x95\xec\x89\x1d\x11\x29\xb5\x65\xe2\xef\x77\xe3\x9f\xe5\x6e\x94\xe6\x6e\x94\x19\x55\x77\x23\xcf\x4a\x79\x37\xaa\xac\x9c\x1e\x81\x4f\xc2\xc7\x3b\x23\x78\x5a\xa9\x1c\x9d\xe4\x93\xd0\xee\x35\x47\x27\x6f\x14\x74\x8e\x39\xa9\xca\xe2\x9a\xa4\x39\xda\xdb\x4d\xa0\xc2\x77\x35\x98\x31\x36\xdc\x04\x72\x5b\xb2\xfd\x92\x96\xa8\x46\xbd\xae\x4b\xba\xfb\xf9\xab\xad\x0f\xd8\x21\x23\x77\x5c\x51\x65\x44\xd3\x59\x6c\x1c\xbb\x1f\x51\xb6\x2c\x72\x11\x1b\xa6\x59\xb1\x1a\x49\xa0\xb8\xdd\xe5\xaa\x64\x1b\xa8\x7a\x23\x51\x8e\x72\x79\x25\x77\x37\x10\x3c\x67\xd5\xb2\xe4\x57\xdd\x78\x87\xcd\x8b\xf5\x22\x66\x86\x7e\x4f\xec\xb5\xbf\xbb\x55\x57\x95\x2b\xc2\x2f\xc8\x88\x91\x4a\x40\x1c\xef\x78\x25\xbd\x05\x37\x54\x5c\x42\xbe\xc6\x8e\x6a\x92\x2d\x51\x3d\xc9\x61\x01\x41\x76\xd6\x15\xf9\xfb\xee\x49\x19\x96\xd0\xf4\x56\x9e\xff\xdd\xd6\x5d\x10\xb2\x1a\xb5\x99\x19\xff\x4d\x10\xaf\x71\x81\xe7\x78\x89\x2f\xf1\x02\xaf\xf0\x15\xbe\xc6\x17\x5d\xb6\xd4\xb7\xda\xf4\xa9\x85\x76\x2d\x66\x14\xd9\x21\xe6\x99\x51\x1b\xaa\xbb\x8e\x8e\xc5\x13\xf3\xf7\xb1\x38\x38\x40\x7c\x2a\x66\x19\x99\x8a\x99\xb5\xfa\x35\x98\x4a\x75\xbc\xe4\xe5\x55\x4a\xd0\x43\x6c\xa1\x1d\x15\x79\x03\x54\xe4\x3c\xb0\x6f\x3f\xf3\x05\xc7\x1b\x5f\x70\x3c\xcd\x92\x33\xa3\xd6\xfd\x90\x25\x67\x56\xa7\x9b\xe0\xb7\x59\x72\x56\x82\xa1\x5f\x95\xe0\x67\x59\x72\xc6\xd7\x8c\x51\x76\xf1\x17\xdf\x70\xfd\x75\x96\x9c\x93\x65\xc9\x89\xfb\x9a\xe0\xf7\x59\x92\x2f\x05\xe1\xfe\xb7\x17\xfa\xdb\x8f\xa5\x0a\xfa\x90\xe0\x77\x6d\x42\x37\x38\xac\xf1\x8f\xd9\x5d\xf5\x9e\xae\xfe\x62\x18\xfe\xc1\x51\xed\x0e\xe2\x8d\x41\xb8\x6f\x1e\x8a\x59\xdf\xe1\x97\xed\xa6\x8f\xa3\x4d\x1f\xfb\x4d\x1f\x83\x0d\xc9\x0f\xed\xb6\x5f\x47\xdb\x7e\xed\xb7\xfd\x1a\xda\xfe\x3d\xbb\x3b\x3b\xb3\xe7\x74\x76\x36\x29\xc6\x2f\xfe\xf4\xec\x87\x3f\x9e\xbe\x3d\x7d\x87\xcd\xf1\xc8\x8a\xa6\x12\xfc\xad\x0e\x07\xfe\xb4\x67\x33\x79\x87\xcd\xc9\x4c\x7e\xc4\x91\x73\x81\xea\xe7\x39\x27\x2f\x74\x4f\xe9\x21\xae\x1c\xcd\xb8\xc1\x31\xb3\x76\x45\xa2\x6b\x64\x5d\x7a\xd2\x43\x9c\xef\xd9\x08\xac\x76\xf5\x54\xc3\x66\xa7\x91\x66\x46\xc0\xd4\xd6\xb8\x4e\x1f\xa8\x3e\xe9\x1f\x75\x0d\x99\xad\xd5\x6c\x1a\xbe\x70\x3b\x56\x00\x33\x69\x34\xf9\x98\x89\x20\xbc\xc8\x45\x3e\x09\xc3\x84\x8c\x39\xc9\x17\xaf\x59\x71\x9b\x9e\x21\x4c\x2b\xd8\x7e\x39\x66\xe9\x8d\x29\x0b\xde\x70\x5a\x09\xca\x48\xa3\xec\x46\x96\x69\x26\xa4\xd9\x33\x2b\x21\xc1\x33\x74\x99\x20\x37\x90\x6c\xf2\x92\x72\x71\xdb\xd1\xc0\x0c\xd5\x68\xc3\xa8\x68\xda\xcc\x0b\x9d\xc1\x7b\x7c\x06\x6a\x16\xa3\xea\xf0\xf4\x1c\x58\x4c\xcf\x66\x19\xc1\x62\x7a\x33\xcb\xee\x6a\x2c\xa6\xa7\xfa\xdf\x0f\xb3\xec\x0d\x16\xd3\xb7\xb3\x86\x0b\xce\x8f\xf8\x07\xd9\xea\x99\xac\x56\xe3\x35\x7b\xcf\xca\x1b\x66\xd0\xd7\x24\x72\x60\x2a\x9b\x39\xec\xbd\xb2\xe6\x86\x00\x2b\x7f\xee\x6c\xe8\x58\x55\xcf\x8d\xe4\x92\x56\xf8\xad\xe7\x85\x21\x3f\x72\x9c\xf8\x38\x24\x41\x46\x82\x69\xb4\x93\x07\xe7\x7d\x63\xd8\xd9\xae\xaa\xb9\x55\x2e\x58\x59\x0a\x6a\x02\xa2\xd5\x03\xc2\xf9\xc0\x51\x93\x63\xfb\x4c\xb9\xf8\xb8\x7b\x98\x0e\x0e\x71\xd8\xaa\x56\xa6\xdc\x65\x64\x22\x79\x60\xde\xfd\x90\x89\xe4\x76\x22\x86\x34\xfe\x37\xb9\x55\x29\x8c\xb1\x28\xf5\x4b\x66\x0b\xe7\x3a\xf5\xc4\x24\x39\x08\x0f\xb4\x3d\xc9\xbb\x1a\x8d\x4d\x57\x29\xaa\xf1\x8a\x93\x55\xce\x63\xda\x12\xd2\x6c\x9d\xf8\x08\x29\x41\xe8\x38\x3d\xc4\xd7\x6e\xac\x44\x77\xb5\x30\x35\x30\x37\x4a\xcf\xf3\x94\x4b\x78\x5e\xac\xe7\xfe\x63\x9a\xa7\x3f\x25\x53\x36\xcb\x42\x06\x96\x4f\x19\xe8\x4e\xe4\x8c\x43\x73\xe4\xca\x4c\xe8\xc6\x68\x63\x6a\x4c\x3e\x90\xf9\x5a\x10\x7f\x73\x02\x78\x52\x0b\xb0\x17\xd2\xb8\xb8\xf9\x45\x70\x2d\x0d\xa0\x91\xc8\xf9\x8a\xe6\xb7\x1b\xd4\x3b\x4f\x05\x1a\x2f\x4b\x7e\x9a\xcf\x2f\xdd\xd2\x6c\x54\xa1\xf4\x10\x5f\xf8\x4f\xd2\x1c\x8b\x29\x9f\x69\x51\xaa\xb6\xfe\xfd\x6a\x0d\x55\x7e\xdd\x3e\x07\x75\xcd\x71\xeb\xc2\x9c\x21\x6c\x2e\x03\x38\x25\x19\xd1\x41\x16\xc2\x5d\x52\x39\xb3\xd5\xb6\xa4\x08\xfb\x1e\x0f\x5a\xbd\xc8\xc7\x72\x44\xc4\x32\xf5\x47\x4a\x90\x8b\xcf\xd7\xae\x1d\xde\x4d\x48\xc1\xde\xf2\x18\x71\x45\x3d\x0a\xaf\xae\xe0\x1e\x58\xb7\x5d\xa8\xcc\x6c\x59\xb7\xa0\x23\xc6\x5c\x33\x1a\xa9\x04\x03\x54\x63\xe0\x61\x23\x1b\xd4\xda\x99\x5e\xf4\xe8\x1d\x6a\xf5\x4f\x9f\x84\x45\xbe\x36\xaf\x17\xc5\x54\x37\x6e\xe3\x55\xfb\x9b\x10\x05\x41\xa5\x53\x84\xcb\xa0\xd2\xa9\x44\x0f\x12\xc0\xbf\x4f\x05\x6e\x54\xfe\x80\x10\x06\x33\xf0\x85\x03\x95\xf3\x94\x21\x4c\x11\x5e\xb7\xbe\x97\x08\x73\x84\xe1\x59\xf9\xd2\x73\x2d\xc7\x25\xc2\xf3\xc6\xc7\xb5\x33\x8b\xec\xe7\x12\xf9\x17\x38\x97\xb4\x60\x8e\xf3\xf1\x19\x2b\x05\x5d\xde\xfe\x85\x72\xb1\xce\x0b\x8d\x99\x28\xa9\x52\x84\xf3\x1a\x9b\xad\x6f\x3b\x6a\xc1\x8c\x45\x46\xc6\x67\xa6\xce\x7f\x93\xdb\x2a\xed\xbe\xa2\x77\x35\xc2\x8d\x8f\xa7\xf0\x91\x74\xcf\x41\xc8\x52\x1d\x59\x37\x7d\x61\xee\xb8\x19\xd0\x90\xdc\xce\xab\x72\xde\x3c\xfd\x53\xa7\xf3\x27\x27\xea\x66\x74\x8e\x3d\x25\x33\x83\x84\x95\xb5\x80\x44\xc1\xa7\x98\x20\xcc\xc7\x20\x0f\xc3\xd3\xc2\xd3\xd1\x91\x56\x10\x7b\xb5\x6e\x30\x41\x68\xb2\xa3\xff\x8e\xdd\xe0\x6d\x2c\x42\xd0\x9d\x68\x76\x5f\xa3\xe6\x6e\xec\x26\xcf\x61\x0f\xf1\xb5\xa9\x3e\xad\x8e\x3e\xbe\xb5\xf2\x5e\x1d\x66\x59\x76\x9e\xbe\x44\x46\x42\xda\x72\xb7\xd7\x45\x81\x7c\x27\xf5\x1f\x4a\x46\x40\xe4\x52\xf7\x0a\x7a\xe9\xf0\xd0\x14\x2d\x0a\x18\x70\x19\xa8\x49\x12\xac\x5f\x26\xdf\x86\x6d\xa2\xa4\xb5\xc9\xc1\x20\x54\xe3\x7c\xb1\x00\x1d\x53\x84\x73\xb1\xd6\x2b\x4c\x5e\xb6\xb9\xbb\x6c\x02\x9d\xc8\xfb\x6d\x75\x3d\xa9\xd0\x3c\xa9\xf0\x18\x51\xa5\xa5\x71\x75\x1a\x70\x2a\x0f\x02\xf5\x9a\x48\x55\x83\xb0\xd3\x27\xad\x7c\x83\x0d\x62\x9f\x24\x14\xc4\x19\x78\x50\x54\x58\x32\xb0\xdd\x85\x72\xbc\x1a\xaf\xd6\xd5\xe5\xa9\xe2\xfc\x77\x22\xd7\x53\x89\xfd\x04\x18\xbf\x84\x2b\x51\x39\x07\x66\xa0\x5b\xf6\x16\x8c\x5b\x8c\x12\x41\xbd\x41\xe8\x80\x44\x51\xdb\xe3\x9c\x82\xd5\x8e\x6f\x68\x30\xa5\x33\x64\x83\x28\xe6\xe1\x20\x55\x4b\xa8\xc3\x6b\x2d\xca\x57\x4f\x8f\x4e\xaa\xd1\xd1\xe4\x50\xe2\xcc\xa3\xe3\xe2\x49\x75\x5c\x1c\x1c\xa0\xf5\xb4\x18\x1d\xcd\x3c\x71\xaf\x98\xf5\x68\x36\x9d\x99\x00\x52\xb7\x69\x8e\xf0\x6d\xba\x46\x48\x87\xf1\x0a\x57\x5b\x3a\x93\x9d\xf0\x3c\x04\x26\x78\xfe\x31\xe7\xa1\x05\x9a\xd2\x17\x65\x68\x5d\xe3\x8a\xe5\xab\xea\xb2\x6c\x89\x01\x2d\x46\xe5\x26\xc2\xa8\x58\xe0\xb9\x33\x92\xe1\xb9\xf2\x07\x0f\x39\x32\x3f\x1c\xa2\xe4\x53\x32\x62\x99\x15\x09\x27\x77\xb5\x95\x10\x81\xed\x69\x33\x74\x3c\x78\xa1\xb7\xbc\x1d\x9f\x65\x7a\x59\xac\x2d\xa7\xf9\x07\x59\x6b\x7e\xaf\xae\x31\x27\x95\x28\x23\x7c\x29\xcb\xac\xaa\x04\xd3\x8c\x8c\xd5\x84\x9a\xac\xa8\xd9\xad\xb1\x55\x93\x30\x30\x75\x8a\xd6\x31\xda\x13\x8a\x74\x2c\x21\x49\x7c\xe3\xab\xf3\x97\x14\xb2\xab\x6c\xca\x2d\xbb\x8a\xf3\xec\x3c\xa5\xb1\x2e\x2c\x12\xa1\x9e\x0e\x89\x4c\xc5\xac\x01\x5f\x66\x9f\xfc\xcd\xd9\xc9\x0c\x97\x11\xd2\x92\x1b\x7c\xdf\x4d\x8e\x14\xea\x9f\xe7\x55\x04\xb6\x3e\x3e\xf0\x80\xcf\x2c\x47\x5c\x0f\x87\x43\x49\x50\x48\x83\x9a\x78\xdc\x97\x84\x34\xcb\x70\x3d\x93\x72\xc4\x92\x16\x82\x70\x0f\x6a\x3d\x66\x7b\xed\x33\xdb\x02\xd5\x12\x1d\xa5\x87\xf8\xca\xbf\xa0\xac\x7b\x07\xa9\xd9\x0d\x2d\x28\xe4\x22\x10\xb8\xba\x90\xe2\x33\x64\xf9\xf3\x67\xa9\x9c\xb0\xcf\x6d\x04\x93\xe2\x98\xa0\x49\xc3\x89\x89\x23\xa7\x19\x92\x44\x29\x2a\x2e\xc3\x38\xfb\x48\xbf\xb8\xcc\x42\x32\x07\x5a\x53\xea\x44\x02\xc3\x56\xbd\x96\x95\xd3\x43\xbc\x74\xb3\x2b\x03\xf6\x17\x44\xd6\x57\xde\x46\xa4\x04\xd4\x39\x65\x83\x65\xf7\xac\x60\xa2\x4d\x8e\x24\x73\x63\x46\x7d\xaf\x18\xa9\xb6\xa0\xcd\xda\x72\x36\xd2\xbe\x5a\x1d\xa2\x79\xd9\x6a\x11\x08\xdc\xc1\x88\x79\x8d\x5b\x1d\xc4\xf7\x59\x19\xfc\x64\x86\x78\xd3\x0c\x6c\x78\xc9\x66\xd3\x86\xdc\x23\x0f\x72\x87\x43\x55\x6f\x7a\x38\xeb\x75\x30\x5f\xa7\x92\x6f\xa7\x27\x6c\x02\x05\x86\xc5\x48\xb9\x41\xf9\x2c\xd0\x5e\xd5\x3e\x54\x4c\x9a\xb6\xb9\x51\x5d\xc8\x87\x88\x20\xa2\x84\xa1\x88\x38\xc7\xcc\xb3\x17\x33\xda\x08\x1b\x1d\xc8\x53\x48\x70\xab\x4a\x6c\xca\x53\xfa\xb9\x07\xd9\xa0\x41\xd4\xee\xff\xa0\x49\xcc\x4b\xb4\xd9\x94\xb5\x53\x10\xfb\xba\x90\x98\xe2\x41\x9f\x01\xb1\x67\x40\x5c\xd8\x8f\x16\x3f\x71\xe3\xc2\xcb\x9c\xfe\x63\x9d\x17\x29\xc5\x0c\x9d\xc0\x9b\x69\x19\x63\xd1\x39\x44\xe5\xf2\x48\x76\x89\x39\x6e\xe0\x72\xb4\x8d\x48\xdf\x6c\x2b\x84\xcb\xdc\xb8\x04\xfb\xe8\xbf\x9e\x85\x52\xa5\xc4\x13\x9b\xcd\x61\x4f\x6c\x36\x47\x83\x2c\x63\x27\xa1\x22\x81\x63\x82\xc5\x09\x3b\x38\x9a\xb0\xd1\x11\x9a\x68\xab\x66\x3e\x25\x33\x05\x34\xc0\xcb\xee\xc6\x5b\x37\xa8\xad\x57\x38\x45\x31\x34\x23\x81\x88\x8f\x2f\xf3\xea\xb5\x53\xeb\x79\x6f\xd1\x72\x64\x75\x58\x3d\x13\x3d\xb6\xa1\x93\x93\xd8\xa7\xbb\xbd\x70\xed\xe9\x32\x1d\x1d\x81\xb5\xb7\x11\xb6\x92\xb1\xd1\x34\xe4\x19\xd1\x51\x3b\xe4\x37\x29\x33\xd3\x2c\xc7\xe1\x93\x0e\x45\x27\x74\xe2\x3d\xc6\x50\x24\x85\x68\x49\x95\x70\x91\x55\xe3\xaa\xa0\x73\x92\x1e\xc5\x27\xb4\x46\x26\x52\xbd\x98\xae\xbd\x09\x0d\xe6\x66\xa2\x73\x1d\x17\xcb\xad\x6e\x8e\x0b\x1d\x3a\x44\x4e\x53\xd6\x5e\xda\x17\x7a\xfb\x8c\x5d\xd6\xb8\x8b\x00\x77\x89\x5a\x64\xb3\x49\x89\x46\x7d\xa1\xa4\x8d\x70\x4a\x36\x9b\xe9\x2c\xa2\x77\xf2\x05\xa8\x0e\x06\x13\xf0\x8a\xdf\xe1\xc7\x31\x94\x2e\x42\x80\xc7\x3a\x4b\xe6\x52\x72\xcf\x40\x0a\x11\x1a\xaf\x19\xfd\x47\x2a\xc7\xb5\xf7\x30\xb2\xea\x07\xbe\x06\x25\x49\x1b\x86\x09\xea\xb5\x80\x55\xa0\xe1\xd0\xde\x13\x31\xeb\x6d\x61\xc2\x0f\x92\x71\x72\x20\xb6\xf3\xe9\x75\xe8\xe9\xe5\x3f\x61\xf8\x70\xfb\x74\x74\x74\x02\xdd\x34\x74\xe9\x29\x41\x13\x4d\x63\x7d\xe5\x7d\x68\xa7\xd8\x08\x56\x0e\xc8\x63\xfb\x28\x6d\xdd\xbb\x32\xd2\xdb\x3d\x54\x23\xc0\x85\x7e\x7a\xd4\xd6\x7b\xea\x1b\xe4\xa3\x25\x0b\xfc\x77\xa5\x01\xff\xbe\x61\x99\xaf\xd0\xda\x83\xdf\xf4\xd8\x47\xbc\xe9\xd1\x87\xbf\xe9\xb5\x9c\x40\x3e\x83\x8d\xad\x95\xed\xdf\xd8\x40\xda\xc6\x88\x13\xd5\x9e\x61\xe0\xf7\x5b\xcc\xa5\x24\xd5\xd6\xce\xb2\x17\x09\x9e\xce\x7c\xc3\xc8\x9d\xcd\x8c\x19\xc7\xfd\x5a\x79\x6e\x43\x9c\x54\xeb\x42\x3c\xb4\x87\x92\x8f\x64\xab\x7b\x34\x0f\x6d\x42\xbe\x60\x84\x19\xa3\x5f\x68\x4b\x3e\x58\x18\xdb\x00\x49\x34\x0f\x8f\xf9\x13\x02\x26\xe9\x20\x27\x3b\xa0\x72\x62\xaf\x1f\x1c\x26\xcc\x74\x31\xbd\xab\x2d\xb2\x14\x5b\xa3\xef\x74\x5a\xbf\xec\x65\x10\xda\xb0\x1a\xe9\xb4\xa8\xf8\x7c\xae\x5e\x0f\xc6\xea\x31\xc4\xda\x40\x51\x36\xd7\x03\xc1\x0d\x0a\xd6\x62\x82\x89\x61\x11\xf9\x9a\xbd\x62\x2f\xc9\xf9\xfa\x22\xf5\xda\x30\x29\xab\xc7\x68\xa9\xcf\x6d\x44\x2a\xa8\xbd\x93\x8c\xc4\x13\x63\x10\x37\x3a\x42\x5c\xf3\x18\x87\x58\x1c\x1c\x21\xc7\x1b\xd4\xc8\x8a\x34\x92\xe9\xa6\x68\x5c\x95\x5c\xa4\x5b\xdf\xc5\x9a\x1e\x8d\x0c\x8b\x94\x4e\xd9\x0c\x35\x75\x01\x65\xed\xbf\x17\xd7\xfa\xd9\xcd\x33\x20\xb9\x07\x8c\x35\x0d\xa7\x7e\xfd\x6c\x1e\xc1\x09\x7b\xa1\x08\x23\xfa\x53\xa3\x97\x8e\xec\x87\x78\xd8\x7e\x68\xa3\x28\x22\x65\x8b\x2f\xb9\x19\x9e\xba\xa9\xb5\x1d\xbc\x09\xf2\x2d\x96\x9d\x44\x64\x41\x17\xab\x50\xc4\x15\x5c\x1e\x7f\xe1\x3f\x91\x31\x2c\x50\x10\xf8\x91\xc2\x83\xf4\xe0\x10\x7d\xf2\x5d\x76\xd6\x77\xf7\xc1\x70\x9f\xda\xde\xbd\xdb\x73\xf5\x53\xa2\xb3\x18\xdb\xd2\xc5\xf2\x0c\x87\xfe\xaf\x7d\x11\x61\x4c\xf7\x6e\x24\xb6\xb4\x6c\x3f\xbe\x28\x16\x8e\xa5\xe5\x94\xcc\x5c\x70\xba\xe1\xb0\xe1\xbe\x8c\x4e\xc2\xc0\x67\xa0\x3e\xa8\xa5\x60\x1d\x28\x64\x20\x87\x4e\x1b\x40\xf8\xc3\x00\xc4\xb3\xb6\xfc\x6d\xdc\xc1\xdd\x37\x70\xff\xdb\x36\x15\xb3\x8c\xa7\x6c\x2a\xac\x0a\xb9\x7e\xd0\x75\x72\x06\xa7\x5f\x12\x69\x3b\x0b\x4a\x17\x40\x0e\xf3\x4c\x8c\xcd\x74\x36\x1b\x97\x69\x27\xc2\xe8\x63\xaa\x59\x2b\xf6\xf4\xe8\x84\xa9\xb7\x9a\x32\x3b\x3a\x2e\x9f\xb0\xe3\xf2\xe0\x00\xd1\x69\x19\xbe\xd5\x94\xce\xfc\x52\x73\x56\x04\xd3\x3d\xf8\xa8\xd0\xdc\xf6\x57\xa3\x6b\xda\xec\x20\x30\x25\x4c\x24\x86\x15\xb5\xcd\x5b\x61\xed\x0a\xb3\xe4\xec\xcc\xfe\x38\x3b\x4b\xf6\x59\xe4\xaf\x47\xb9\x8d\x2b\x5f\x3b\x8e\xf0\x66\x93\x58\x1b\xfc\x76\xe9\x5e\x67\x67\x6d\x9c\x7f\x6b\xb4\xc1\x32\x6b\x1e\x96\x24\x68\x38\x6c\xd7\x19\x0c\x52\x32\x1c\x12\xd0\xa0\xcb\x7f\xc1\x67\x42\xfe\xa1\xbd\x20\x7c\xc7\xc7\xd6\x2e\x41\x2b\xb4\xbd\x0a\x74\xb8\xa3\x8e\x1e\x0b\xa1\x7a\xaf\x9d\x0f\x4d\xc7\x77\xef\x7d\xcc\x3c\xfc\xb3\x9f\x82\x2f\xba\x41\xa4\xb8\x6e\x24\x23\x91\xcb\xa1\x8f\x5c\xe2\xa8\x85\xb6\x39\x7e\xef\xa5\x43\xa2\xf4\xad\x66\x5f\x22\x34\xfb\x82\xe7\x41\x08\xfe\x43\x1e\x42\x06\x9b\x96\xf9\xbf\x06\x7a\x6f\x2b\x77\x30\xd3\x7b\xca\x9f\x1e\x9d\x70\x85\xb8\x69\x76\x74\x4c\x9f\xf0\x63\x7a\x70\x80\xd8\x94\x86\x88\x9b\xda\xdd\x65\x2d\x82\xe8\xbb\x53\x03\xc5\xec\x7c\xe7\x1b\xa9\x87\x17\xa3\x01\x13\x68\xb3\x19\xb0\xb6\xbe\xaf\xde\xaa\x20\xe5\x53\x32\xcb\x18\x04\xec\xc0\x5c\x91\xdc\x07\x10\xdc\xa8\x2b\xc4\x97\xe4\x4f\x5c\xd8\x66\xd1\x0a\xdb\x1a\x97\x76\x23\x70\x6d\xa5\x75\x5f\xe0\xed\x09\xab\xf9\x30\x47\xf1\x5c\x05\x27\x71\x32\x56\x8d\x30\x6d\x9d\x13\x09\x64\x34\x77\x4e\xfc\x40\x89\xc1\xed\xf1\x1d\x27\x64\xe2\xb3\x4c\x05\x9c\x8b\x2f\x7f\x1b\xa9\x7a\x74\x14\xeb\xc1\xdf\x09\x66\xeb\xf2\x40\x02\xef\xd9\xde\xa9\xec\x5d\x3d\xe2\x63\xf6\x90\x73\x57\x6e\x2d\xff\x1b\x42\x1f\x4f\x67\x98\x67\x77\xb5\xb5\xbc\x61\x7d\xca\xfa\x04\xc1\x1b\x8d\xb0\x67\x0b\x41\x76\xf8\x94\xcd\x32\x32\x65\x4e\x76\xd8\x1a\x1c\x64\x8b\x0f\xd0\x97\xe5\xf0\x05\x58\x15\x7c\x11\xfd\xcf\x3e\xa0\x56\xd0\x51\xbe\x5a\x8d\xae\x09\xaf\x68\xc9\x1e\x99\x90\x0a\xbf\x10\x3e\x5a\xe6\x73\x51\xf2\x2f\x8c\x62\x8c\x7c\x33\x38\x6a\x29\xcb\x75\x70\xd5\xe1\x90\x0c\x87\x3c\x54\xbe\x99\x48\xfc\x85\x94\x12\x97\xb7\x12\x39\x89\x31\x27\x17\xb4\x92\xc8\x82\x42\x80\x8c\x6c\x70\x58\xd7\x66\x4f\x54\xb3\x82\x9e\xf3\x9c\x53\xb2\x7b\x5f\x14\xf8\x70\x72\x41\x3e\x7c\xae\x08\xda\x3d\x32\xd6\xa3\xfd\x48\x2e\x4e\x3f\xac\xb2\x47\x7f\x5b\x1c\x4c\xc7\x33\xfb\xdf\x47\xd8\xd6\x38\x85\xa7\x12\xb2\xe8\xa8\x39\x9a\xe6\xa3\x5f\x66\xff\x92\xaa\x5f\xe8\x44\xb6\xac\x2e\x73\x53\x5b\x96\xfe\x6d\x31\xbb\xfb\x8f\xfa\xff\x79\x14\x5d\xf9\xb2\xc8\xab\x4b\x90\x86\x4b\x26\xaf\xe6\x23\xf8\x60\x52\x04\x44\xd9\x32\xdb\x4a\x90\xab\x55\x91\x0b\x52\x75\xb7\xff\x7c\xa9\x25\xac\x83\x4b\xce\x16\xf6\x65\xd9\x7e\x3c\x2f\xcb\xc2\x2a\xaa\x5a\x6e\x39\xf6\x19\xd9\xf7\x92\xb1\x6e\x16\x7c\xcd\xc0\x59\x19\x57\xde\x87\xb9\x14\x30\x8a\x56\xee\x8a\x17\x66\xe1\x36\x20\x45\x91\xdf\x96\x6b\x2f\x55\x05\xce\xe7\x90\x8a\x72\x70\x64\xc2\xea\x43\x9a\xce\x49\x72\x5e\x96\xa2\x12\x10\xa6\x1d\x80\xf9\x87\xfc\x8a\x54\x93\x69\xd2\xdc\x40\x5b\xf8\x9c\x42\x7e\x6e\x59\x27\x2f\x08\x17\xef\x6e\x57\x24\xc1\x89\xea\x5f\x1e\xcf\x07\x2a\x28\xbb\x48\x66\x38\x17\x3a\x1f\xab\xdf\x84\xd3\x7c\x54\xe4\xe7\xa4\x90\x6d\xe4\x0f\x15\xaf\xff\x9c\x2c\xce\x6f\x13\x9c\xf0\xb2\x90\xa3\x55\x97\xe5\xcd\x1b\x5e\x5e\x70\x52\x55\x13\x9a\xaa\xd9\x8c\xfd\xaf\x09\xc2\xac\x14\xa7\x6a\xb0\x49\x99\xda\x71\x51\xd0\xf8\x79\xce\x27\x3c\x4d\x82\x96\x38\x71\x2d\x13\x84\x75\x43\x37\x8c\xeb\xe9\x32\xaf\x9e\x17\xe5\xfc\xfd\x84\xa5\x89\x01\xb3\xd0\x75\xc9\x6e\x41\xc3\xe1\xc9\xf4\x25\x60\x77\x9a\xf9\x9a\x1b\x0f\xd1\x41\x26\x0a\x30\x3f\xf1\x1b\x27\x09\xc2\x22\x53\x9b\xdd\x87\xff\x8e\x4c\x5a\x90\x64\x59\xae\x99\x76\x60\xf4\x55\x98\xed\x0e\xfd\x43\x87\x2e\x87\xc3\xd4\x74\x3a\x3a\x2f\x3f\xf4\x13\x84\x93\xe4\x40\x1c\x10\x49\xd3\x60\xf8\xcf\xbe\xaa\x78\x6e\x13\x87\x51\x81\xba\xd2\xc5\x2b\x56\x11\x6e\x32\x4c\xc6\x2d\xf6\x7b\x3b\x5f\x80\x35\x16\xce\xd5\x77\xaf\x13\x67\x24\x47\x1c\x10\x83\xee\xb7\xd7\xb0\x9f\x4b\x56\x04\xc0\xf8\x2d\x11\x09\x68\x88\x57\x1a\xa0\x5e\xae\xb9\xb2\x6a\x8a\x6f\x56\x08\x7b\xcd\x4d\x93\x14\xa6\x69\x7c\x14\x83\x76\x13\x76\x4f\x65\x45\xdd\x67\x9b\xe9\x15\x01\x61\xea\x30\xbe\xd1\x97\xe2\xaa\x78\x9b\x2f\x49\x9a\x80\xee\x11\x52\x9b\x8e\x16\x66\x29\xfd\xe4\x80\x1c\x24\x57\x55\x02\xa7\x30\x2f\x68\xe8\x2c\xb1\x73\x74\x88\x54\x50\xde\xbe\x66\x2f\x64\x53\xd8\x51\x67\xad\x04\x45\xdf\xca\x7a\x26\x89\x07\xaa\xf1\x55\xb9\xae\xc8\x29\x13\x24\x92\x3e\x27\xba\x41\x49\x3b\xf1\x16\xe4\x73\x1a\xaf\x38\xb9\x26\x0c\x6e\xb8\xed\xf8\x3b\x12\x78\x1f\x3d\xa4\xe3\x41\xa0\xde\xb2\x48\x42\x8e\x08\xb1\x35\xcd\x78\x37\xb4\x28\x5e\xaa\x35\xfa\x03\xee\x04\x51\xbc\x65\x7b\x70\xd5\xf2\xf8\xf1\xa0\x11\x29\xe3\x93\x56\xbb\xfb\x5f\x4e\xc8\x6e\xd3\x03\x1d\x8e\xee\xcf\x3b\xa1\x1c\xfa\xaa\x26\x77\x90\x03\xb6\xbd\xb6\xf8\xc1\x46\x63\x02\x5b\xe2\xad\xfe\xdb\xd6\xe8\xb5\xc9\x7c\xa8\x30\xff\x6c\x2a\x97\xdd\x06\x22\x77\xf2\xe8\xdf\xd1\x2b\xc2\x27\xe0\x15\x60\xe8\xc7\xe0\x08\xd3\x4a\x02\x81\x89\x41\xe5\x58\xdb\x85\xac\xae\x6a\x9f\x5d\xac\x95\x17\xae\x18\xcb\xbf\xbe\x2d\x39\x4a\x0d\x76\xde\xee\x15\xbb\x1b\x80\x9a\x20\x52\x09\x3a\x7f\x7f\x9b\xa0\xcd\x46\xdb\xc6\xca\x49\xbf\xcb\xab\xf7\xa9\x01\xb6\x8a\x88\x57\xe1\x2c\x53\x09\x4c\xe1\xd9\xb7\x27\xa1\xd8\x10\xd8\x03\x1d\xf9\xad\x7d\x95\x60\x97\xf2\xea\xfd\x2b\x1b\x9a\xa4\x47\x4e\xd2\x26\x2b\x93\x5a\x8f\x1d\x41\x72\xbe\x28\x6f\x58\x8a\xb4\x41\x8f\xdd\x66\x35\xe3\x1a\x36\x3a\x32\xa5\xb6\x2b\x9c\x39\x04\x45\xe5\x22\x7d\xe1\xc0\x84\x36\x59\xd0\xc5\xa9\xeb\x1b\xae\x53\xc7\x25\x8e\x2f\xb5\x64\xba\x6a\xa2\xee\x8e\xdd\xde\x60\x9f\x22\xdf\x22\x9b\x84\xf7\xb0\x9b\xf2\x10\x5c\x7b\x23\xaa\xd8\x46\xc8\x6b\x5d\x63\x8b\xa6\xf6\x6e\x75\x68\x67\x7d\x49\xe6\xef\x5f\x2d\xdf\x5e\x96\xeb\x62\x61\x30\x9d\x85\xa7\x4e\x3f\xba\xe6\x4e\x19\xa2\xa4\x0c\x14\x43\x63\x51\x09\x14\x92\xc1\xe2\xbe\x3a\x87\x8c\xbd\x53\x87\x31\xdb\x74\xd9\x4e\xc3\xee\x22\xe6\xa8\x56\xf0\xf2\x6e\xfb\x14\x7b\x31\xf2\x4b\x2b\x7d\x9c\x64\x91\xa0\xf6\x06\x19\xcc\x2f\x77\xa7\x17\x35\x3c\x4d\x88\x96\x96\xde\xdd\x7f\xb9\xde\x3d\x88\x2e\xb6\x05\x31\x72\xad\xe0\xd7\xda\xbc\x46\xb5\x36\xd5\x6d\x60\xa1\xd6\x3e\xa4\x8c\xdc\xf4\x5f\xe6\x82\x20\xb9\x02\x85\x03\x5a\xc3\x36\x70\x59\x82\x89\xa4\x39\x17\x44\x9c\x16\xf9\xaa\x6a\x77\xad\x15\xc5\x91\xae\x47\xad\xed\x6e\x74\x2d\x3b\xf6\x2e\xc9\xa7\x4b\xa6\x17\x81\x93\xd6\xd1\x49\x39\xde\x18\x07\x78\x58\x4a\xc0\xa4\x9a\x77\xa0\x8d\x18\xc3\x0d\x49\xd1\xd3\xee\x1b\x10\x30\x14\x21\xbe\x36\x58\x2b\x86\x3f\x82\xeb\x20\x67\x65\x0e\x7c\x4f\xe6\xe6\x2d\xe1\xd7\x74\x4e\xc6\xff\x58\x93\x35\xd1\xf8\x4a\xa7\x65\xd7\x31\xb8\x64\x65\x3d\x98\xa6\x03\x31\x84\xf9\x32\x20\x11\x49\x3c\xab\xa0\x25\xde\x95\x1a\xb5\x21\x97\xc7\xf3\x8a\x76\xf0\x06\x1d\x0c\x41\x57\x50\x9f\x46\xb5\x60\xdc\x91\x89\x1a\xf3\x39\x83\xbf\x6b\x66\x5b\x6f\xb7\x0d\x14\xa9\xbc\x62\x9a\xe1\x31\xc0\xfc\x26\x4d\xe0\x50\xc6\x26\x0e\xff\x61\xc0\x0e\x00\xe3\x50\x35\x1b\x5e\xe5\xab\xe7\xb7\xba\x61\x82\x13\xa8\xd4\x90\x50\x39\xcf\xd9\x05\x59\xfc\xbf\xb2\x4a\xb3\x39\xd8\x68\x99\xd6\x1d\xa6\xb8\x2b\x4e\x4b\x4e\xc5\xed\x13\x61\xff\x3c\x39\x9a\xb8\xef\x4f\xbd\xef\xa3\xa3\xc9\x61\xfd\x91\x5c\x8c\xe5\x4c\x34\x7f\x6a\x9c\xb8\x14\xc8\xda\x47\x78\xe5\xc7\xfa\xc9\xb0\x83\xb3\x95\x55\xe3\x13\x06\xc3\x19\x6f\x67\x72\x13\xb0\xb5\xc4\xfa\x29\xcf\x0b\x92\x73\xfd\x79\xb7\xb1\x79\x62\xae\x9d\xa3\x3b\xce\x71\xd8\xee\x38\xf4\x69\x5d\xd7\x8c\x56\x51\xca\xe3\x91\x11\x80\x8c\x69\x74\xfb\xc0\xb5\xdb\x2d\xdd\xfa\x78\x41\xc6\x67\xfe\x54\xe0\x09\x4a\x4f\x71\x45\xc8\xfb\x6f\x29\xaf\x62\xc9\x41\xa2\x3b\x30\x5e\xca\xda\xea\x76\x49\x84\x2f\x3b\xf8\x2e\xbf\x47\xfb\x22\xf7\x9b\x5f\x10\x01\xc7\xa3\xbe\xc4\xf2\xd9\xc8\x53\x34\x83\x80\xad\x7e\xe3\x44\x3f\x21\x1c\xf9\x0e\x26\x1d\x62\x96\x1e\xf4\xa5\xcd\x4b\x71\x67\x5c\xf9\xb8\x9f\xd4\x69\x9a\x80\xa1\x71\x22\x69\xa4\x5c\x18\x2d\xd9\xb7\xa0\x22\xa7\xf0\x51\xb3\x81\x2f\xd7\xab\x82\xce\x73\x41\xaa\x64\xe6\xe2\x32\xb8\xb4\x8d\x14\xdf\xf9\x98\x1f\x98\xeb\xda\xf3\x35\x56\x2f\x1e\x3a\x5b\x9f\x2f\xe3\xe6\x08\xaf\x33\x4b\xd7\x5e\x03\xce\x7c\xcd\x5f\xba\x08\x7c\x3e\x9b\x50\xe2\x1c\xaf\x5d\xc4\x0f\xb3\x0c\x63\x09\x5e\x6a\x76\xa1\xd1\xcb\x76\xdf\xa1\xfb\xec\x5e\xd3\xbd\xc8\x68\xc8\xd6\x4c\x21\xef\x45\xcb\x52\x40\xa0\x13\x36\x11\x35\x8e\xf5\xd9\x54\xe5\x74\xdf\xeb\xd7\x37\x8c\xf0\xff\x9f\xbd\x3f\xff\x6e\x1b\xc7\x12\xc5\xf1\xdf\xfd\x57\xc8\x3c\xfd\x54\xc4\x08\x96\xe5\x64\xde\xf7\xcd\xc8\x61\xf9\xa5\xb2\x4c\x65\x3a\x95\x64\x92\x54\xd7\xb7\x9f\x5a\xed\xa6\x25\xc8\x42\x87\x02\xd4\x20\x68\xc7\x65\xf1\x7f\xff\x1c\xac\x04\x48\x50\x8b\x63\xbb\x92\x2a\x9f\x93\x13\x8b\xd8\x97\x8b\x8b\x7b\x2f\xee\xa2\xee\x4c\x63\x88\xff\x5e\x9e\x12\x25\x48\xd1\xf1\x0e\xcf\x87\x88\x5c\x60\x46\xc9\x42\x85\x25\xe0\xe1\x49\xa2\x35\x33\x0c\xc6\xa7\x97\x67\xd0\xc5\x95\xbb\xb3\xfc\xc1\xbe\xac\xce\x93\x03\x1c\x2c\x89\x74\xbf\x51\x2f\x2c\xb2\x6b\x92\xab\x0c\xa2\x11\x1f\x83\x92\x2b\xe7\xc6\x0e\x22\x8b\xd7\x8c\x4b\x77\xf3\x51\x01\x7f\x85\x9d\xa4\x6d\x8f\xd3\x48\x9b\x71\x91\xf8\x6f\x84\xc6\x89\xab\xb9\xf0\x45\x0a\x8e\xd2\x08\xa3\x7e\xae\x02\x86\xb6\x8e\xe1\x31\x86\xd7\x26\x7e\x2d\x53\x01\x6d\x91\x40\x97\xfd\x74\x3a\x95\x8e\x93\xe1\xe9\x3c\xcd\xed\xd1\x0d\xa9\x50\xd6\x11\x9f\x22\x00\x22\x60\xf5\xce\xa4\x9d\x8e\xb9\xa8\xbc\x16\x02\x0e\x62\xf4\x9a\xbe\x6b\xe0\x0c\xd0\xb4\x9e\x43\x96\x90\xb0\x66\xb5\xde\x68\x63\x1b\x37\xbc\x5c\x87\xa4\x23\x20\x7d\xab\x5a\xd7\xae\xeb\x49\xc4\x2d\x9e\x71\xee\xfc\x5d\x50\xfb\xbe\x70\xd7\xe3\xc7\x8f\x3f\xbd\xfe\x21\x65\x79\xdf\x8c\x2f\xbe\xc6\xd3\x61\xf4\xee\xcf\xcb\xd9\xff\x7b\x3c\x59\x44\xf0\x4c\x3e\x10\x7c\x77\x1d\xe5\xd2\xeb\x6c\x1e\x0d\x47\x51\xd7\x1c\x94\xb1\x20\xea\x53\x2e\x45\xd7\x22\x67\xf4\xef\x30\xc2\xb3\x08\x8e\x46\x8f\xfe\x37\x3c\x1a\x8f\x55\x7c\x94\xeb\x5a\xa1\x01\x8c\x3a\x9d\x68\x0c\x47\x47\xff\x0e\x8f\x44\xd9\xc7\x70\x00\x47\xe3\x31\x1c\x3d\xfa\x77\xa8\x9f\x66\x22\xf9\xf9\x1f\x4a\x66\x2d\xe3\x2d\x56\xc5\x22\x29\xa0\x8b\x54\xeb\x63\x51\x70\x00\xa3\xbf\xfd\x8d\x88\x3a\xd1\x32\x65\xe9\x02\x71\xc4\x44\x57\xe3\x72\x4d\xe7\x5e\x77\xf6\x09\x41\x34\x32\x4b\xb3\x1c\x39\xcd\x42\x67\x5e\xa2\x4a\xed\x05\x26\x1a\xaf\x9d\xa9\xea\xee\xff\xc0\x68\x8a\x2f\x22\xc8\x59\x21\x9a\x3e\x1a\x88\x69\xa4\xf2\xb9\x46\xbd\x52\x18\x71\xbb\x28\xfc\x1f\xb6\xf3\x4e\x67\xe7\x06\xe4\x88\xe0\xe8\xe8\x48\x6c\x8e\x7c\x0f\x19\x3d\x7a\x24\xae\x53\x5f\x9c\x2f\x57\x58\x74\xf4\x9f\x5e\x67\x91\x97\x12\x5c\x52\xb5\xec\x8d\x74\x91\x34\x4f\xf3\x17\x17\x69\x16\x0d\xe5\x12\x96\xdf\xc1\x05\xe2\xe9\xf0\x7a\x21\xc1\xf2\x4d\xba\x40\xc3\x1b\x1c\x8c\xfe\xfc\x2c\x8f\x4a\x2f\x96\x0a\x5f\x73\xd2\x6a\x92\xd4\x3b\x3b\x55\xe9\x74\x7a\xdb\xc6\x47\xae\x2a\xb2\xbd\x9c\xc3\xef\x50\xea\xfe\x49\xb8\xaf\x06\x1e\x30\x50\x96\x1e\x98\xf1\xcc\x06\xba\xaa\xd3\x09\xac\xb2\x03\xae\x7b\xa7\x90\x0e\x1b\xc4\x38\xd2\x49\xd8\xd4\xc5\xa1\x9e\x7b\xbc\x14\x18\xb0\xd2\x10\x33\x1a\x55\x9a\x0d\x22\xf2\x4d\x09\x19\xa9\xf0\x56\x76\x23\xa1\x99\x87\x44\x1a\x3e\x96\x56\x1d\xc4\xdc\x71\x94\x27\x71\xf3\x46\x90\x09\x33\xd1\xbf\x85\xa6\x31\x8f\xaf\xb5\x20\x65\xf8\x18\x3d\x86\x35\x79\xdb\x70\x00\x0d\x47\x3a\x3c\x1a\x0c\xa0\x92\xab\x0c\xf7\x8f\xfc\x77\xe5\xfd\x23\x75\x31\x47\x98\xcc\x68\x24\x7f\xe7\xc3\x51\x94\x17\x93\x89\x7a\x26\x56\xe9\xd1\x65\xca\x88\x14\xf8\x45\x53\xc1\x49\x33\x83\x50\x22\x18\xe5\x68\x42\xc9\x34\x65\x57\xd1\x18\x36\x69\xf4\xe1\x28\x62\x54\x86\x6c\x10\x54\x20\x67\x34\xcb\x64\xed\x0b\x8c\x2e\x65\x9a\x3e\xce\xd1\x18\x36\x68\xf9\xe1\xfe\x51\x09\x11\xf0\xd5\x47\x14\xf1\x61\x9c\x35\x48\xcd\xd5\x8d\x9b\xa6\x05\x24\x1a\x4a\xef\x77\xb7\xd4\xd8\x1d\xf5\x2a\xe6\xd0\x93\x44\xfa\xdf\x69\x3c\xb5\x49\x5d\x2b\x79\xf2\x49\xc5\x4e\x6c\x86\x4d\x3d\x4d\x4a\xb2\xfb\xd4\x1f\xfa\x96\x35\xd7\xea\x6e\xd1\x37\x08\xd6\xfe\xd0\x6b\x9a\xdc\x50\x1b\x30\xc3\x07\x73\x94\x4e\xdd\x9b\x5b\x7c\x1f\x28\xf5\x9c\x36\xf1\xa7\xac\x12\xbc\xf6\xdd\xca\x77\xfb\x02\xda\x54\x29\xe2\xe9\xb9\x22\x50\x22\xd8\xd0\x2e\xca\xa5\x4c\xfc\x23\x4a\xd9\x73\x7a\x49\xde\x92\x57\x04\xf3\xe1\xfe\x00\x8a\xf1\x1a\xcd\x8d\x76\x96\xba\xce\x44\xb8\x3c\x75\x46\xe9\xa7\x62\x19\x47\x5a\x82\x3c\x3c\x98\xd2\x49\xa1\xb8\xe8\xbe\x68\xbd\xbc\x95\x87\xd2\xc0\xf0\x23\xab\xb0\xc0\x75\xfa\x8f\x28\x9d\xc6\x46\xe4\x6e\x12\xea\xba\x1c\xaa\x0a\xce\x5f\xa6\x39\x3f\xa3\x94\xc7\xd6\xe3\xaa\x19\x78\xff\x5f\x05\x62\x57\x1f\x50\x86\xc4\x35\x11\x7f\x27\x28\xc0\x11\x49\x17\x28\xa9\x81\xc0\x41\xce\x53\xc6\xa3\xf1\x77\x00\xf2\x1b\xd4\x46\x64\x2a\xea\x0a\xd2\x06\x75\xbb\x5e\xe4\x31\x24\x35\xcb\x3e\xe0\xb3\x0c\x93\xf3\x63\xd6\xed\x32\x81\x34\x8e\x81\xed\x44\x34\xa0\x5f\x05\x9e\xcd\x71\x36\x8d\x99\xa0\xcc\xbc\x6a\x7b\xed\x85\x11\x80\xed\x99\x1c\x94\x82\xfb\xad\x56\x28\xe0\xf1\xb7\x12\xda\xd8\x70\x54\xa2\xf4\x0f\x94\x86\x43\x0c\x9b\x33\x63\x9f\x19\xe4\x02\x4c\x53\x9e\xde\x3d\xde\x0a\xcb\xf9\xd7\x8d\x72\xe3\xc9\xfe\x8a\xf8\xdc\x1e\xed\xd1\xcb\x8f\x8b\x59\x90\xcf\x0d\x72\xb7\xe4\x00\xa9\x03\x6f\xb9\x41\x07\x09\x48\x4e\x70\x34\x8a\xa4\x74\x01\x46\x0e\x38\x09\xb6\x2a\xfa\x5f\x93\x82\xe5\x94\x0d\x07\xff\x2b\x32\x4c\x54\x2b\x7b\xfa\x7f\x04\x47\x2a\x36\xd8\xe1\xf7\xc4\x39\x68\x60\x52\x73\x8c\x34\x4b\x68\xa2\x0c\x44\x91\xc3\xde\x1d\x29\x16\x50\x16\x37\x25\x2a\x36\x77\xfb\xae\xe4\x99\x5b\xd7\xd1\x16\x5c\xe3\x4e\x2c\xe2\x56\x00\xb5\x35\x7f\xa8\x22\xb1\x1e\x98\xe0\x45\x55\xf0\x13\x29\xc4\xf5\xb3\x7f\x13\xba\xbf\xc1\xc7\x41\x02\x71\x12\x93\xe4\x08\xd6\xe4\x5f\xad\x01\x88\xca\x98\x25\x1c\xac\x56\x21\xc9\xf3\x57\x1c\x60\x88\xac\x56\x2a\x8e\x9b\x89\x2d\xb4\x5a\xed\x10\x65\x88\x41\xe2\x4e\x59\xdc\x91\xb7\x17\x71\x28\x06\x00\xd2\x04\x3b\xbe\xe1\x3c\xf1\x30\xce\x05\x6e\x91\xaa\x86\x54\x2c\x08\x4d\x68\x5f\x41\x12\x80\x48\x7c\xad\x56\x51\x14\x8c\xca\xdb\x84\x48\x1b\x56\x2b\x5d\x62\x2e\x75\x06\xda\x68\xa8\x9d\x40\xf9\xae\x48\x29\xd4\xaf\x06\xea\x22\x5d\x96\xf8\x26\x74\xbe\x38\xdd\x56\x11\x07\xd6\x69\x80\x79\xe2\x0f\x3f\xce\x11\x73\x0f\x37\xd9\x65\x29\x33\x7a\x89\xd8\x24\x6d\x31\x3c\x6d\xd6\x53\xdc\x81\x53\xeb\x76\x16\xfd\x36\xfd\xb4\xa0\xbe\x1d\x9e\xbb\xea\xa4\xf6\xc0\x56\x6d\xc0\x9e\x5b\x83\x78\x1e\x8a\xeb\x31\xdf\x9c\x65\xc6\xbb\x2c\x33\x67\x05\x99\xd4\x9c\xdb\xac\x41\x9b\x26\xa3\xc3\x3d\x29\xd2\xf6\x48\x0e\xfd\xd1\x50\x9c\x98\xe3\x1d\xa2\xb8\xd2\xee\x08\xf3\x23\x6e\x3e\xae\x45\xdc\xb4\x8b\x9a\x24\x09\x3e\x39\xfa\xf7\xc1\x10\xc3\x34\x61\xa3\x47\x63\x98\x57\x39\xe9\x6a\x95\xc2\x22\xc9\x4f\xe8\xc1\xe3\x21\xdd\x84\x37\x75\x90\x77\x62\xf1\x26\xe9\x76\x89\x61\x6d\x8b\x93\xfc\x24\x8a\x8c\xc7\x25\xd2\xcf\x8b\x33\x55\x2c\x1e\xc0\x02\xc0\xa8\xdf\xef\x47\x60\x58\x4f\x1f\x92\x9b\x44\x71\x32\x50\x9c\xb0\x30\x35\x79\x5b\xc8\xa9\x81\x64\x76\x3e\x34\x56\x05\x8d\x27\x01\xf7\xa0\x0a\xba\xbb\x5d\x4d\xcc\xd6\x33\x2c\xd8\x9f\x84\x64\x8f\x3a\x2e\x7f\x19\xf4\x7b\xe2\xdb\xa6\xd7\xba\x43\x7d\x27\x8c\x6d\x92\x24\x36\x7d\xdf\xfc\xae\x42\xde\x9e\x98\xb1\x0d\x6d\x87\xe0\x86\xb1\xb7\x6e\x5b\xc4\x12\x45\x52\x5e\xae\xe3\xf6\x5b\x16\x0d\x85\x7d\xc8\xbd\xf8\xbc\x44\x13\x8e\xa6\x9d\xb4\xa3\x6a\xc0\xce\x39\xe5\x9d\xb4\x63\x61\x56\xc6\x7d\xac\x9c\x0a\xf7\x39\x7d\x2d\x76\xfe\x59\x9a\x4b\x05\xf2\xad\xe1\x85\x63\x9e\xa1\x1a\x4d\xf0\x00\x2e\x7f\x2c\x70\xe9\x33\xb4\xcc\xd2\x09\x8a\x0f\xe3\x93\xe1\xdf\x57\x7f\xcb\x57\x07\xab\xbf\x1d\x82\xbf\x7d\x38\x3c\x0f\x87\xe4\xe2\xf4\xe7\xe5\xd2\x02\xdb\x4e\xe0\xc6\xf0\xb6\xee\x7a\x1e\x40\xed\x77\x02\x6a\x0c\x2f\x76\x42\x49\x85\x80\xad\x87\x2b\xec\x8f\x07\x28\x1e\x56\x69\xc2\x0b\xcd\x32\xf5\x58\xe8\x8a\x6c\xea\x79\x41\x8e\x6c\xab\x9a\x56\x24\x14\xaa\xa7\x7d\x08\x4d\x11\xe1\xd8\x8d\x6d\x5a\x2f\x41\x10\x9a\xe6\x07\x0c\x19\x1f\x06\xb7\xaf\x2e\x5d\x8b\x27\xdd\x41\xd6\x83\xec\x75\xed\x15\xfd\x76\x5d\xd6\x82\x2a\x1e\xcd\x1c\xe7\xfd\x4f\xe8\x2a\xe1\xea\xe7\x1c\x4f\xa7\x88\x08\xde\x48\x7e\x62\x8e\x16\x09\xd3\xbf\xc9\x14\x7d\x4e\x88\xfa\x90\x8a\x23\x09\x2e\xdd\x50\xcb\xe0\xba\x11\x8c\x78\x0b\xc3\xec\xf0\xeb\xc5\x59\x31\x9b\x21\xa6\x49\x6b\x63\x83\x83\xb2\xec\xb5\xac\xee\xa7\xb3\xf4\xf2\x15\x47\x8b\xdc\x4f\xc5\xcd\xa4\x7c\xc2\x68\x96\xbd\x46\x33\x1e\x4a\xff\x48\x97\xb5\xfe\x32\x8c\x08\xff\x05\x4f\xf9\x3c\x94\xf1\x23\xc2\xe7\xf3\x5a\x4b\x5a\xe8\xf9\xa1\x92\x77\xa8\x0c\x9d\xae\xa5\xc0\xcd\x69\xe5\x95\x5a\xb7\x93\xfa\x53\xba\x34\xbe\x24\xb4\x1a\xa9\x0c\xba\xe4\x9a\x48\x59\xf3\x33\x99\x76\x8e\xf8\x53\xce\x59\x1c\xa9\xe5\x8b\xc0\x9e\xb7\x9a\x95\x86\x87\x39\xee\x27\x68\xf8\xbf\x9b\x8b\x33\x58\xf9\xad\xa9\xac\x83\x0c\xcd\x78\x65\xa0\x65\xd7\xac\xa5\x34\xa7\x4b\x5b\xd8\x5d\xc9\x7a\x71\x94\x73\xbc\x48\x39\x9a\x1e\x5c\x8a\xfc\x5a\x1d\xbd\xc8\xed\x95\xe6\xb2\x40\x6d\x58\xca\x8f\x77\x12\x1c\x97\x89\x6c\x20\x75\xa0\xd1\x34\x7f\x8f\x9a\x61\x18\x0c\x14\xe2\xfc\xbf\x32\xbc\x58\x20\xf6\x28\x06\x27\x5a\x87\x93\x21\x32\x15\xeb\x5e\x0b\xf3\x2d\x5f\xeb\x4a\x38\xc5\xd3\xf7\x68\x82\xf0\x05\x12\x9d\xe6\x2d\xcf\x72\x66\x97\x8b\xa5\xe8\x57\x02\xaf\x9f\xf4\x41\x8e\xf5\x1d\x55\x66\xc9\x35\xab\xda\x80\x29\xb8\x03\xf2\xe6\xd5\x4e\x7e\xe8\x97\x27\x29\x1f\x79\x7b\x96\x23\x76\x81\xd8\xc6\x02\x0a\x39\x5c\x8b\x1e\xd5\x42\x0e\xa9\x98\x97\xfe\x1d\xd5\x97\x2d\x2a\x41\x09\x9d\x99\x04\xcc\x25\xab\x83\xeb\x6f\x89\xc8\x30\x8f\x3e\x61\x40\x96\x83\x74\xf5\x30\xcd\x61\xdf\x4f\x12\xf4\x9b\xcf\xbb\x8e\x80\xd0\x5e\xdd\x51\xa2\x3a\x80\x39\xe2\x71\xa4\x3a\x8e\x20\x07\x90\x77\xbb\x52\x13\xb6\x3e\xbe\x46\xda\x0d\xb6\xc2\xec\x85\x0f\x42\xb5\x67\xda\xe6\x61\x71\xd5\xc6\x5a\x4e\xfe\x9e\xa5\x2b\x50\xb7\x1b\xa3\x64\x99\xb2\x1c\xbd\x22\x3c\x46\xf0\x68\x00\x1a\x68\x44\x95\x73\xe6\x5f\x65\x45\x10\x01\x63\x3b\xd8\x8e\x3c\xaa\xfe\xb8\xf4\xd6\x60\xfb\xe3\x8d\xfe\x3e\xd2\xa5\x2a\xd6\xe8\xee\x23\x5d\x8a\x25\xaf\xd6\xe5\x59\x85\xa2\xc3\x4a\x73\x2e\xbc\xf6\x1d\x84\x1e\x37\x70\x59\x00\x53\xb9\x83\xae\xdf\x08\x82\x78\x94\x38\x2e\x09\x64\xaa\x1c\x51\x44\x61\xb4\x60\x19\x95\xb5\x5a\x39\xb3\x74\xb2\x95\x51\xa2\x80\x95\xf7\x12\x47\x35\x0e\xa2\x5e\x00\x71\xdf\xf8\xe8\xc6\x59\x93\xd8\x1e\x66\x59\x2e\x08\x37\x12\x90\xc3\x16\x3e\x3a\x13\x46\xda\x88\xcb\xdc\x40\xce\x92\x5a\xb9\x28\xaa\xec\xfc\xea\xb9\x09\xd2\xe0\x01\x89\x09\x06\x9f\x78\xf7\x22\xcc\x82\x37\xe3\xa4\xb9\x83\x92\x6c\x79\xca\xe3\x3a\x78\xd6\xe1\xa7\x79\x55\x85\xb6\x17\xce\x42\x30\x52\x90\x5b\x6b\x7f\x9e\xb8\xcb\x38\x4d\x7e\x4a\xf9\xbc\xbf\xc0\x24\x9e\x40\xf7\x2e\x07\x7b\x93\x83\x64\x0a\x67\x3d\xf1\x5f\x55\x68\xd6\x73\x0b\x39\x7a\x1e\xf3\x6a\x47\x0e\x26\x6a\x6d\x97\xc9\x68\x2c\x35\x7d\x78\x32\x38\xe6\x4f\x66\x32\x02\x3e\x4d\x26\x3d\x0e\xd3\xda\x4b\xc1\xbc\xaf\xb4\xa1\x9e\xf2\x98\x02\x00\x8b\x6e\x37\xce\x93\x62\x94\x8e\x01\xcc\x4f\x62\xd2\x5c\x92\x19\x65\x8b\x94\x0b\xa4\x28\x3d\xae\xc4\x74\xcb\xd9\x57\xe6\x13\xb9\x55\x4e\x26\xb5\x64\x45\xa2\x4a\x93\x6e\x3f\xe3\x13\xba\x8a\x60\x5a\x4b\xd4\xc1\x11\x28\x80\xd9\x28\x1d\x27\x39\x18\x2e\x95\xb4\x9e\x02\x67\xf2\x0e\x25\xa6\x21\x50\xae\x86\xa0\xba\xb3\x51\x9c\x3b\x13\xcc\x47\x7c\x0c\x04\xc5\x3c\x16\xb9\x4b\x13\xd9\xec\x9a\x26\xcb\xfe\x92\x2e\x35\x3d\xb6\x48\xbc\x25\xdb\xab\x2f\xe8\x42\xc6\x59\xbc\xcf\x55\xdb\xb0\x38\x7e\x32\x47\x8b\x08\x2e\xd6\xac\xbb\x5a\x4b\x65\x77\x1d\x2e\x34\x08\x0f\x2b\x52\x28\x6c\xd8\x19\x1c\x77\xa6\x38\x5f\x66\xe9\xd5\xb0\x43\x28\x41\xc7\x91\xbb\x1f\x4b\x77\x17\xc4\xda\x8e\xb8\x52\x7e\xbe\xd8\xb0\xb0\x17\xb7\xba\xb0\xb9\x8c\xdb\x87\xe3\x14\x5e\x40\x2a\x96\x54\xcd\xdb\x25\xdc\x5d\x13\x8f\x5c\x1b\xfa\x58\xe2\x3d\x53\x9a\x3e\x86\x88\x6c\x6a\xfa\x68\x75\x29\x45\x53\xbe\xa1\x53\xe4\x78\x19\x71\x6f\xe7\x9a\x9d\x58\xf3\xfa\x36\x01\x62\xc8\xf4\xa9\x2a\x57\x23\x77\xa1\x0c\x14\x83\xec\xad\x52\xe1\xa9\x6e\x97\xd7\x52\x3f\xd2\xe5\x6a\x15\xd7\x2d\xe0\x6b\xd7\x77\x3d\x16\x61\xed\xbe\x35\x61\x09\x7d\xfa\x44\x5a\x6c\xab\x25\x16\x77\xcd\x9a\xb9\xb9\x1c\x43\x45\x47\xf8\x4c\x41\x92\xf0\xd0\x38\x9d\xaa\xe1\x81\xba\x8d\xac\x1f\x6b\x50\xd9\x6a\x57\x01\xc4\xd7\xa3\xcc\xb4\xfc\x9f\xf7\xbf\x4c\xfe\x27\xc5\x61\xa3\x1d\x01\xb4\x11\x5c\x6f\xbb\xa3\xa6\x49\x52\x8e\x2f\xd0\x81\xda\x70\xe5\x29\x43\xc5\x87\x1d\x19\xad\x9f\x83\x5c\xd2\x23\x1e\xfd\x08\x5d\xe2\xce\x7c\x3c\xd3\xe0\x19\xd5\xa1\x22\x1a\x1b\xf5\x29\x8f\xc4\xb1\x46\x40\x2e\x38\xd6\x13\x05\x0c\xae\x33\x0f\xf2\xba\xd6\x56\x42\xeb\x8c\x89\x1a\x23\x33\x76\x45\xeb\x94\xb3\x5c\x5b\x9c\xff\x50\x16\x42\x28\x9d\xcc\xa3\x6a\x5a\x02\x7d\xb4\x9b\x06\xd5\xcd\x79\xfe\xc3\xb1\xd6\x79\x0c\x8f\xe0\x48\x7f\x8e\x8d\x99\xce\xd1\xbf\xc3\x47\x6a\xe0\x22\x53\xe2\x70\xb9\x08\xfa\x5b\xa2\xfa\xb1\x2c\xfd\x9f\x0d\xf5\xab\x23\xa3\x7f\x75\x07\x5a\x5a\xbb\x9d\x97\xed\x74\xb5\xd6\xb4\x19\x00\xce\xb5\x52\x44\xf3\x96\x91\x92\x7c\xbd\xc0\x50\x2e\xb7\xf1\x03\x8c\x51\xd3\x7b\xc2\x6d\x08\x03\xb5\x8e\x86\xec\xcb\xd4\x01\x71\x44\x2f\x10\x9b\x65\xf4\x52\x31\x75\xd2\xef\xd6\x16\x4e\x10\xc3\xa2\x35\x4f\x18\x13\x14\xb6\x04\x24\x42\x4d\xa9\x8f\x4e\x49\x09\x5e\x48\x73\xb1\x97\x02\x4e\x6a\x72\x35\x25\xeb\xd8\x42\x2a\xe2\xca\xcd\x6a\x22\x02\x17\xa1\x34\x99\xcc\x75\xfc\x6a\x63\xcc\xed\xac\x66\xb9\xd6\xd1\x5e\x48\x84\x27\xd3\xb4\xa6\xa7\xb2\xe6\xd7\x39\x52\xcb\x57\x75\x2d\x95\xaf\x15\xc5\x01\x9c\x14\x8f\xdb\xd2\xe2\xd4\x2b\x32\x51\x7b\xfb\x92\xd1\x85\x1c\x9f\xc9\xe1\x29\xe3\x1f\x34\xc2\x42\x93\x4f\x7a\x39\x7f\x5e\x06\x25\x56\xbb\xb4\xbf\x95\x4c\x49\x79\x60\xf1\xfa\x5f\x23\xd1\x2c\x61\x35\x65\xb7\x29\xa2\xa3\xf2\x9b\xf5\x92\xe0\xdd\x37\x40\x9d\xe8\xad\x88\x60\xb3\xd0\x88\x8c\x93\x88\xd3\x62\x32\x8f\x8c\x5b\xac\x96\x36\xd2\x82\xd3\x08\x4a\xbd\x32\x7b\x98\x81\xd7\x2d\x1c\x40\x23\x36\xf0\x1b\x59\x6a\x21\x49\x12\xa5\x67\x39\xcd\xa4\xc5\x52\xa0\x58\xe6\x9c\x04\x3f\x87\x57\x07\xc2\xcf\x38\xa3\x9c\xd3\x45\x38\x8f\xa9\xc3\xa6\xd7\xac\x45\x2c\x11\x58\xeb\xc6\xa0\x19\xca\x52\xe5\xb7\xb1\xbd\xb4\x92\x3b\xb4\x48\x1d\x7a\xd1\xf2\xf3\xba\xca\x5a\x22\xd1\x26\x8f\x90\xd5\x4b\xd8\x84\xb1\xe6\x39\x17\x53\xc5\x68\xfa\xc1\x15\xda\xf8\x87\xd4\xca\x04\xea\x45\xeb\x05\xeb\xa7\xfb\xfb\x64\x60\xbd\x9d\x99\xd1\xb7\xd5\x35\x01\x60\xfd\x4e\xb4\xd0\xaa\x49\x20\x87\x46\x54\x21\x9f\x36\x9e\x5f\x24\xb4\x0e\x2a\x58\x5d\x50\xc7\xf5\xf3\xde\xe2\xf0\xc4\x79\x27\x95\x8e\xac\xbd\x03\xca\x7c\x75\x2d\x70\x7d\x89\xc9\x94\x5e\xf6\x19\xfa\x57\x81\x72\xfe\xd4\x43\xd9\x27\xa8\x81\xc4\x83\xe5\x62\xc1\x3f\x34\x8a\xe6\xca\xad\x15\x2d\xa4\x54\xee\xff\x07\x4a\x89\x58\x1a\x58\x23\x00\x09\x5e\x3b\xdd\x6e\xbc\x76\x8c\xaa\xc1\xfa\x80\x02\x0d\x81\xa1\x74\x1e\x63\xc7\x14\x2a\xb2\xee\xe6\x12\x3b\xb0\x69\xf1\x2d\x3e\x91\x1e\xf5\xab\xcd\x67\xf6\x53\x80\xa7\xf4\xa8\x5d\xb1\x56\x0d\xe0\xe9\x76\x59\x38\x53\xb1\x5f\x52\x49\xb1\x15\xee\x42\x39\x02\xce\x99\x79\x52\x44\x7d\x97\xb7\xa5\xf6\x5b\x5d\xf1\x30\x15\x83\xc3\x95\x8c\xb1\x2a\xdb\xed\xd2\x5a\xf2\x8f\x5a\xe8\x18\xa7\xd5\x90\x5c\x1a\x02\x87\x68\x08\x0a\x60\x4c\x56\xab\x14\xb8\xce\xc4\xa4\xb3\x74\x5e\x73\x40\x4b\xac\xd0\xb6\xce\xbb\x1a\xde\x40\x90\x56\x30\x0d\x14\x6b\x50\xe6\x10\x43\xaa\x74\x58\xd6\x91\x8c\xea\xc1\x21\x3f\x3c\x67\xb8\x16\xf1\x44\xe5\x1c\x9c\x61\x72\xb0\x4c\x27\x9f\x10\x3b\x9c\xe1\xcf\x68\x7a\xa0\x4a\xae\x27\x0c\xcf\x11\x51\x0a\x07\x77\x45\x18\xba\xa6\xe4\xd5\x83\xb1\xe4\x99\x2b\xcb\xa6\xc1\x31\x7b\x62\x84\xa8\xd2\x86\x5c\x9b\x9a\xf2\x11\x1b\xef\x91\x3e\x22\xc5\x42\x69\x77\x26\xee\xc7\x6a\xb5\x7f\x04\x49\x5f\xb9\x6a\x29\x54\xfe\xfe\x00\x46\x72\x0c\x11\x26\x1d\xd2\xed\xc6\xa4\x7f\xc9\x94\x63\xc4\x64\x7f\x00\x60\xdb\x2c\x88\x0a\xef\x0d\xac\x6e\x6a\x65\xb3\x00\xdd\x20\x20\xac\xdb\x45\x31\xaf\x94\x25\xa4\xcb\x78\x99\x06\x09\x80\xbc\x2c\x63\x00\x71\xcb\xa4\x65\x3b\xf7\xf9\x42\xae\xa5\xd2\x1a\xfc\xcf\x30\x49\xfc\x90\xe2\x5c\x39\x7b\xa9\x2c\x76\xc5\xa0\x46\x32\x5e\x5a\xe4\x49\xe8\xd5\xae\x36\xb5\x4e\xae\xe5\x45\x3c\x44\x50\xcb\xc7\x4c\x3f\xfa\x8a\x95\xde\x43\x4a\x15\x11\x3f\xd2\x12\xed\x66\x63\xd0\x5f\x61\xdb\xc6\x05\xce\xf1\x59\x86\x3e\x88\xab\x05\x93\xf3\x57\xa2\xbe\xde\x0d\xdb\xa8\x21\x27\xc2\xed\x36\xdb\x34\xe5\x65\xae\x6d\x45\xce\x22\xd4\x44\xb3\x01\x5d\x54\x0d\x06\x55\x4d\xa8\x09\x6f\xd7\x86\x29\xdb\x68\x44\x8a\xe4\xb7\x5f\x20\xf5\x2e\xfe\x17\xb5\x4c\xbf\x60\x3e\xc7\x1a\x5a\xa5\x27\x6c\xd3\x68\x4d\x8a\x18\x6c\xbe\x8a\xd7\x22\xda\xae\x16\x55\x67\x42\xaa\x32\xf4\xe4\x4d\x6a\xaa\x52\xcd\x74\x74\xf2\x9e\x13\x25\x54\xf5\xfd\x0e\x7f\x46\x99\xec\x1c\xc4\x18\x52\x98\x82\xb2\x94\x31\xe5\xe2\x0d\x7a\xf9\x4d\xe4\xb7\x70\x10\xdb\x7a\x14\x98\xcf\x51\x36\x3b\x90\x2c\xce\x03\x0e\xfc\x03\xe3\x40\x8d\xc7\x8c\x3a\x50\x13\x09\xfe\x8e\xf1\x9f\x13\x29\x32\x88\x01\x95\xc3\xdd\x07\x1c\xf8\x6d\xe1\xc0\x25\x62\x13\x44\x78\x7a\x8e\x44\x6e\xb1\x20\xf9\x03\x2e\xfc\x56\x71\xe1\xfd\xe9\x4c\xee\x35\x83\xdb\x35\x1c\x1d\x59\x0f\x1a\x34\x19\x8d\x61\x9a\x0c\x60\x9e\x0c\x8e\xf3\x27\xec\x38\xef\xf5\x00\x55\x2f\xd0\x1a\xe7\x91\x51\x3a\x36\x68\x0f\x43\x0d\x93\x32\xb5\x04\xb0\xd7\x4b\xbf\x4f\x8c\xa9\x53\xb7\x1b\xa7\xc9\x40\xab\x54\x98\x73\x95\x27\xb4\x0d\x21\x53\x78\x34\x18\xdc\x19\x4a\x96\x6d\xdf\x3a\x52\x3e\x1a\x0c\x6e\x0d\x2d\x8b\xb6\x7e\xaf\x88\x59\xae\xd3\x6d\xa2\x66\xb5\xf0\x06\x39\x5b\xe8\x1a\xa1\x71\x5f\xc3\x64\x00\x45\xeb\x4a\xb9\xd2\x40\x99\x65\x94\xb2\x18\xf7\x3f\x1f\x1e\x0d\x06\xff\xc6\x43\xc8\xdb\x62\x5c\x8d\xc1\xaf\x3f\x0f\x73\x78\x35\xc4\xfd\xab\xf2\x66\xb8\xbc\xae\xcc\x7d\xdf\xee\x9d\xac\x8e\x32\xa9\x8c\x1b\xd1\x89\xe3\xc1\x63\xa8\x22\x37\x26\x46\xd7\x3e\x49\x12\xb2\x5a\x39\xce\xd6\xc8\x89\x71\x4b\x6d\x3c\x93\x39\x71\xbc\x8d\xff\xab\xdf\x8d\x01\xc4\xe6\xbd\x6c\xa8\xdd\xdf\xeb\x9e\x22\x57\x1b\xa3\x8f\xf3\xe7\x98\xf1\x2b\x71\xf9\xf9\x19\xf4\x92\xe8\x5f\x48\x9d\x4e\x74\xd9\xcf\x27\x73\x24\xba\x71\x74\x08\xbc\x4a\x10\x39\x1e\xe7\x60\x64\x54\x89\x31\x39\xef\x5c\xe0\xb4\x53\xd7\xe5\x5c\x6f\x36\xd1\x42\x6a\xec\xf6\xd6\x79\xdb\x76\xff\x75\x0a\xad\x25\x96\xa9\xc5\xea\x43\xf3\xde\x72\xcc\xe9\x72\x38\x38\xce\xd0\x8c\x0f\x07\xc7\x91\x0d\xd2\xdb\x4b\xfc\x07\x9d\x67\x1f\x3e\x80\x18\xf5\x3f\x43\xd4\xbf\x02\x10\xf7\x12\x85\xd4\x87\x51\x8f\xf5\xa2\xe5\xe7\x63\x7d\x55\x45\x3d\x22\x3f\xa3\xb2\x1a\x94\x8f\x79\xee\x77\x64\xff\xab\x39\xb0\x6d\xf7\xd6\x79\x6f\xbe\xb3\x73\xe0\xbd\x36\x87\xdc\x8e\xe0\x18\xa9\x08\x2a\xa8\x3f\xc9\xf3\x8d\x25\x07\xd6\x6d\xdf\x28\xba\x44\x67\x9f\xb0\x20\x96\x7f\x31\x3f\x16\x02\x34\x7f\xa2\xbf\x46\x30\x7a\x1b\x8d\x21\x4b\x46\xd1\x81\x2a\x75\x10\xc1\xe8\x60\x91\xab\x3f\xf4\x57\xf9\x97\x1e\x44\x63\x48\x92\x90\x4b\x24\xe3\x63\xa9\xdb\xb5\xde\x96\xcc\x0f\xfd\x7e\xd5\x9e\xa3\xe6\x5c\x3d\xa3\x60\x19\x63\xfe\x5a\x91\x6c\xf8\xa4\xe6\x90\x62\x81\x32\xfc\x2b\x8a\x11\x18\xa2\x3d\x3c\x8b\x69\x47\x90\xc0\xd6\xd9\x40\xe5\x4a\x3c\x69\x71\x64\x11\x53\xa0\x09\x40\x4b\x8b\xe7\x86\x16\x2f\x12\x3e\xca\xc7\xbd\x54\x34\x5c\x78\x0d\xe3\x13\x26\x72\xd0\xb0\x08\x39\x07\x59\xa3\xc1\xb0\x05\x0e\xd8\xa0\xcc\xf0\xe5\x30\xe5\x1e\x8c\xc4\xf9\x4c\x50\x3f\x2f\x96\x72\x74\x8f\x9e\x3b\x1f\x8f\x9f\x9b\x8b\xd4\x29\x6c\xb4\xd7\x93\xd4\x4d\xfd\x28\x7e\x88\x53\xfd\xe8\x79\x92\x07\x33\x1e\x3f\x4f\x8a\x50\x3b\x62\x2c\x59\x4b\x53\x22\x6f\xd2\xd2\x9a\xc8\x9b\xb9\x9e\x4b\x9c\x53\x00\x74\x00\x39\x51\x32\x02\x90\xa8\x02\x75\x05\x0e\xb7\x08\xf6\xa7\xbd\xbf\x1f\xac\xb1\x44\x2c\x5f\x22\x19\x90\xef\x2d\xc3\xe7\x98\x44\x40\xbe\xe3\x38\xab\xb7\xbf\x4f\x2a\x08\x4e\x0d\x41\x8c\xdc\xe7\x6a\xf5\x38\x6b\xce\xb8\x7c\xa8\x66\xea\xbd\xd6\x56\xcc\x6b\x15\x47\x64\x9c\xcc\x63\x29\xd2\xb0\x65\x8a\x40\x99\x69\xad\x4c\xe6\xb2\x41\x91\x44\x98\x32\x88\xde\xf2\xb3\xc4\xa1\x51\x8f\x6b\xd4\x67\x6b\x4c\x3c\xc6\x89\xf5\xa2\x61\xd4\x9b\xcb\xb4\x5e\xe4\x96\x9b\x05\xca\x4d\x03\xe5\xe6\xde\x08\x16\x29\x67\xf8\x73\x7c\x04\x3b\x03\xf9\xef\x08\xaa\xa0\x7e\xe2\x0f\xef\x45\xc0\xa9\x38\x0d\x54\x7c\x3c\xad\xaa\xda\x06\x9a\x9f\x6e\x93\x2a\x19\x44\xa5\x0b\xef\xf8\xa4\x18\xd2\x93\x7c\x98\xd6\x0f\x05\x3e\x99\x0d\xe9\xc9\x64\x98\x05\xce\xf6\x62\x49\x73\xc1\x59\x07\x5c\xc9\x64\x34\x2f\x18\x3a\xb0\x9a\x6a\xf7\xaf\x5d\x78\x7a\x9a\xd1\x74\x8a\x18\x64\xc9\xf5\xd3\x67\x1f\x5f\xbd\x7d\x23\x43\xbb\x95\x7b\x7a\xf8\x73\xbe\xc8\xce\x52\x96\x1f\x7e\x42\x57\x97\x94\x4d\xf3\xfa\xa0\x31\xe9\x98\x60\xc1\xec\xea\x84\x25\x5c\xbe\xfa\x62\x66\x17\x60\x63\x0b\xc0\x68\x97\x31\x5a\x70\x69\x75\xbc\x53\x9f\xdd\x6e\x1c\xe8\x75\xeb\xb6\x80\x11\xc1\xb0\xbe\x9a\xff\x7a\xf7\x1e\xeb\x76\x53\x39\x06\x5a\x14\x19\xc7\x07\x29\x63\xe9\xd5\x6e\xde\xc5\x7c\x73\x69\x3c\x8b\x6b\xb4\xbf\xb8\x4f\xac\xff\xf9\xd5\x2a\x1a\x29\xdd\xe9\xce\x53\x63\x0b\x3c\x16\x1c\x88\x06\x0f\x4b\xb6\x5b\x32\xb5\x3f\x49\xb3\xcc\xf1\xab\xa3\xfc\xed\xcc\x18\x5d\xdc\x96\x19\x73\xdd\xb9\xb3\x76\x9c\x62\x34\xd8\xb4\xb7\xcc\x46\xa0\x03\x06\x89\xd7\xc6\x26\x87\x67\x62\xf2\x3c\x66\x77\xe9\x20\x07\x3a\x91\xe9\x9b\x91\x11\xb4\xee\xb1\xdc\xe2\x3c\x82\xd8\xf7\xca\x5d\x5f\x85\x6a\x16\x27\x95\x29\xd9\x10\x95\xa0\xe9\xba\xd3\xb8\xd9\x03\xa5\xe2\xf7\xf3\xe7\xd6\x3c\x4c\x15\xa5\xc6\x94\x4c\x77\xde\x1f\x8d\x23\xd8\x50\xc7\x60\x48\x2f\xb5\xec\xf8\xcf\xe8\x2a\xd7\x96\x0c\xcc\x8b\x2c\xe2\xcd\x02\xd8\xa0\x10\xb5\x2c\x51\xdd\x09\x22\x2a\x23\x3e\xc5\xc4\xcc\xa5\x06\x2f\xfe\x34\xe0\x68\x0c\x86\xdb\x94\x43\xda\xb5\xa9\x26\x1a\x36\x01\x83\x15\x89\xf2\x64\x00\x99\x94\x93\xe9\x3c\x63\xc1\x71\xcc\x9f\x20\xd7\xea\x80\x8d\xf8\x38\x41\x23\x3e\x76\xfc\xdb\xc6\x2c\xc1\x5f\x02\x49\xf9\x92\xa1\x74\xba\xce\x91\x1c\x28\x01\xd4\x73\x6c\xdf\x48\x5d\x20\xb8\x93\x76\x23\x63\x19\x1a\xa5\xb9\xaf\x5b\xc7\x2a\xb4\xbb\xdc\x02\x00\x6a\x97\x57\xab\xd1\x18\x62\xed\x66\x9e\x09\x12\x85\xf4\x67\x38\xf3\xe2\xfa\x59\xf0\x96\x8e\x84\xb1\x75\x24\x8c\x40\x09\xf6\xe8\xba\x98\x4b\xd5\xf9\x91\xd2\xab\x22\xcb\x64\xd0\xa5\x6d\xab\xb0\x98\x03\x28\x63\xc4\x04\x0f\xa2\x9c\x01\xc4\x52\x5f\x44\x53\x77\xcd\x31\x47\xa7\xa7\x0a\x31\x5b\x5f\x07\x75\x61\x4d\x90\x51\xdf\x88\xf3\x05\xbb\x2f\xb2\xd3\xab\x9c\xa7\x93\x4f\xf7\xef\x55\xf2\x0b\x3d\x48\xf0\xbd\xf5\x88\x5b\x82\x68\x23\x24\xb4\x9a\xb5\x84\xdc\xc8\x4c\x5d\x7d\x29\x77\xfa\x1e\x40\x87\x83\x4b\xaa\x26\x22\x00\x59\x23\xcb\xb4\x18\x04\x5a\xdd\x41\xe5\xa4\xc2\x3c\x01\x7a\xf1\xda\xda\x6e\x1c\x59\x36\x89\x59\xf2\x78\x07\x4f\x9b\x3c\xf9\xc3\xb9\xa1\x13\x3c\xc1\x9d\x7a\xda\xc4\x09\x19\x0d\xc6\x02\xcf\x8c\x8e\xc6\x30\x4d\xc8\xe8\x51\xcd\xef\xa6\xb9\x71\x52\x20\x1f\x4c\xa8\x28\x2b\xad\x43\xeb\x48\x40\x43\x12\xc4\xcd\x2c\x0b\x49\xbe\xcd\x9c\x07\x49\x95\xdd\x5c\xf0\x3a\xde\x16\x8d\x6f\xc0\xe1\xa5\x15\xa6\x38\xc5\xb6\xc2\x38\xe6\x6f\xba\x5c\x22\x32\x0d\x8b\x05\x6e\x42\x9a\xae\x15\x15\x38\x7a\xa7\x01\xb7\xb5\x77\x7b\x3b\xfb\x87\xed\xde\xe9\x61\xbf\xff\x5b\xa4\x0a\x2a\x46\x75\x63\x1c\x19\x67\xe9\x04\x0e\x1c\x1c\x93\x27\xe8\x98\xc8\x58\x32\xc4\x8d\x25\x43\xc6\x5a\x51\x34\xe6\x09\x17\x77\x38\x68\xa1\x48\x2b\xcf\x8a\x08\x46\x02\x53\x83\x7a\x10\x18\x1b\x4c\xd3\x23\xc8\x58\x8c\x81\xa9\x39\xaa\xdf\x39\xda\x46\xd3\xd2\x0d\x0d\x64\xeb\x20\x6f\xd2\x08\xe0\x62\x00\x87\x83\x13\xde\xe7\x54\x7d\x80\xe1\x88\x8f\xab\x28\x71\x28\x11\x53\x52\xfd\xeb\x81\x21\x39\x26\x50\x8e\xc1\x8d\x58\x17\x75\x8a\x12\x12\xe6\x8d\x71\xcd\xa3\xed\x26\x47\xa9\x6b\x4e\xab\x98\xce\xee\xec\xdf\x17\xde\xe6\xa3\x71\x3d\xb2\x0f\xd2\xcc\xcc\x0d\x57\x4b\xcc\x22\xe1\xe1\xc5\x62\x41\x2f\x99\xdc\x5d\x32\xb6\xcb\x92\x4d\xe6\x05\xf9\xf4\xe0\x58\xf6\x1b\x75\x2c\x7b\x03\xe8\x92\x1b\x9e\xe0\x36\xe8\x52\xee\x10\xd2\xcf\x90\xa8\x9f\x13\x84\x33\x5f\xd4\xcf\xcd\x83\x4f\xcd\x87\x09\x4d\x58\x8c\xe1\x00\xc0\x34\x19\xec\xd9\x28\x82\x15\xc2\x91\x04\x85\x73\xe7\x57\x5e\x15\x00\xdc\x4f\x57\x2b\xfa\xe4\x48\x83\x8a\xf6\xad\xa0\xa2\x8a\x0e\x60\x91\x1c\x1c\xc1\xcc\x41\xcf\x24\x4e\x0f\x29\x00\xc7\xf9\x93\xf4\x18\x64\xa3\x5e\xaf\x18\x27\x5c\x1f\xb9\x1c\xe6\xbd\x84\x5a\xac\x97\x95\xea\x59\x62\x37\x42\xbb\x58\x44\x9a\xcd\xa9\xf3\x89\xe1\xc8\xbc\x0a\xef\xd8\x4e\x71\x23\x82\xa2\x68\x11\x40\xa4\x38\xd4\x16\xb1\x8c\xf4\x08\xfc\xa8\xe6\x11\x78\xad\x30\x24\x48\x7d\xc9\xc1\x93\xfb\xa1\xae\x1c\xa4\x43\x77\x42\x3a\x3b\x05\x94\x7a\x40\x3b\xbf\x03\xb4\xb3\xf9\x2a\xdb\x28\xb7\x94\x07\xe4\x08\x34\x62\x05\x98\x3d\x67\xe0\xa4\xe1\xd1\x40\x9f\x13\xb6\xe6\x3c\x00\x1b\xc3\x7a\xc4\xc6\xd5\xe9\xa8\x87\x3b\xd7\x82\x19\xd3\x62\x2d\xf4\xd8\xf6\x92\xa7\x5d\x0e\x15\x6b\x46\xda\x5a\x7f\xa8\x8a\x1b\x39\x89\xff\x2d\x78\x0d\x72\x0f\x14\xff\x2e\x6c\x94\x8f\x2d\x6e\x3c\xba\x5d\x1d\xc2\xff\x16\xbc\x96\x7b\x9b\x1b\x9d\x56\xb1\x54\x8e\x78\x40\x5f\xa6\x47\xd5\x95\xe6\x73\x28\xd2\x97\xd1\x8d\xa8\x0f\x05\xa4\x6d\xf4\x07\x0d\x52\xb7\xf8\x0b\x2e\x1a\xc2\x53\x5c\xd7\x4d\xfe\x62\x39\x63\x7b\x0b\x5a\xa5\x4e\x47\x59\xde\xa4\xbd\xec\x82\x41\x75\xb3\xf9\x5e\x79\x0c\x72\xe2\x92\x7e\xa8\x53\x62\xda\x15\xce\x7e\x80\xd8\xaa\x3f\x87\x18\x6b\x42\x1d\xa5\xd9\x10\x5f\x27\x28\xa0\x92\xcb\x5c\x85\x36\x12\x33\x19\x5f\x74\x7f\x00\x86\x6a\xa0\x37\xdc\x7a\xb5\x17\xed\x7b\xef\xb3\x81\x37\xdf\xf5\x29\x9a\x3c\x90\x16\xdf\x28\x69\xe1\x23\xef\x35\x84\xb1\xc3\x61\x28\x91\x25\x16\x6b\x84\x13\x62\xb5\x49\x05\x42\x7b\x23\x55\x45\x63\x0c\xe0\x3e\xce\xdf\xa4\x6f\x62\x6c\x77\xcf\xaa\x9c\x4a\x85\xfc\xe4\x08\x40\x7c\x70\xa3\xc0\x16\x53\x34\xb9\xdd\x98\x16\x6b\x20\x9b\xd1\xe5\x03\x68\x7f\xa3\xa0\xfd\x1b\x52\xcd\xbb\xb3\x95\x58\x93\x00\x04\x94\x50\xa6\x3e\xdb\x44\xdf\x06\xf9\xe5\xcd\x04\xee\xf6\xc0\xaf\x28\xf0\x83\xb3\xab\x2d\x6f\x73\x7d\x17\xe7\x07\xe8\x5f\x45\x9a\x6d\x2f\x7a\x7f\x38\x2d\xbf\x9f\xd3\x42\x76\x3b\x2d\x5c\x10\xc2\x2a\x2c\x13\x57\xa7\x85\xab\xb0\x4c\xbc\x7a\x29\xab\xd1\x5a\xd4\x12\x56\x26\x05\xab\x48\x75\x18\x62\x7b\x11\xb5\x9c\x33\xda\xcc\x39\xbb\x7a\x97\xf2\x79\xcd\x07\xa5\xca\x52\x16\x64\x95\xcc\x27\x28\xdb\x51\xf5\xdb\x4f\xa9\x69\xdf\xb4\xb6\x51\xb6\xa5\x2b\x84\x9e\x8c\x55\x13\xa0\x79\x15\x23\x00\xb6\xd4\x57\xd9\x43\x59\x8e\x14\x0f\xb2\x67\xf6\xaa\x8a\xe7\xcd\xc0\x49\xc0\x9a\xc2\xb1\xca\x70\x34\x1b\x5d\x99\x1b\x44\x00\x38\xe6\x19\xc4\xa1\xac\x1b\x91\xf3\xcc\x3b\x09\x64\x6e\x95\x06\x69\x6d\xda\x2d\xbd\x08\x6f\x61\xe9\x40\xff\xff\xa2\x74\x32\xef\x57\xaf\x3f\x00\x12\xa3\xd2\xb3\x7e\x45\xa4\x3e\xc5\x9d\x88\x12\x76\x22\x33\xd4\x6c\x1e\x08\x8d\x3f\x34\xea\xbc\x27\x42\xa3\x9e\x33\x49\xb3\xec\x4c\x6a\x0f\x6c\x10\x62\xeb\x72\x6b\x4e\x89\x6d\x69\x23\x92\xb3\x45\x6f\x09\x99\xf1\xb5\xf8\x21\x82\x68\x3b\x74\xc0\xef\x0c\x1d\xec\x48\x78\x91\x69\x8d\xec\x7a\xc0\x07\x0f\xf8\x60\x1b\x7c\x10\x88\x70\xc9\x1a\x4a\x47\x5f\x13\x5d\xb4\x35\x3d\xb4\x57\xc7\x12\xb7\xaa\xa2\x5b\x7f\x92\x6c\xa3\x2b\x5a\xc8\xb8\x16\x8d\xd4\xb5\x54\x5c\x4d\x87\x81\x83\xbe\x38\xf7\x3f\x48\xe5\x0f\x50\xee\xa4\x5d\x7b\x77\x98\x28\x13\xd0\xbf\xad\xe9\xc6\x03\x26\xfa\xda\x30\x51\xf0\x69\xa6\xa1\xb7\x1f\x92\x48\x3b\x4e\x22\x0c\xf8\xb3\x58\x7a\x7d\x14\x47\x0a\xdd\x04\xc7\x69\x60\xda\x52\x76\xb7\x09\xdf\x91\xb6\xe7\xc9\x06\x76\x23\x00\xb2\x3b\x96\xab\xec\x44\xed\x9f\x33\x5a\x2c\x1f\xee\xf7\x6f\xf7\x54\xdd\xd6\xfd\xbe\xad\x9e\x4b\xc0\xe0\xa1\x21\x25\xf0\x23\xcc\x38\xd1\x0d\x1b\xe6\x07\xf6\xfc\xb8\xcf\x53\xdc\x37\x90\x61\x15\x03\x5d\x49\x59\x56\xab\x18\x3b\xb1\xdf\xd8\xc8\x89\x64\x0d\xc6\x89\x14\x62\xca\xdd\x97\x7a\x37\xac\x84\x3b\x9e\xe8\xdb\xe2\x68\x1a\xa4\xcb\x3d\x11\x28\x68\x2b\x8a\x64\x5b\x4a\x83\x81\xed\x28\x17\x63\x68\xf2\x9b\x0b\x31\xe6\x69\x7e\x20\xd0\xc1\x96\xd2\x62\xf3\x57\x55\xb9\x87\x37\xe2\xb0\x5c\x3a\x10\x19\xd3\x7b\xf3\x65\x46\xfb\xae\xa1\xac\xfa\x28\xa8\xac\xfa\x68\xdc\xed\xba\x5f\x50\x3f\xb3\x8a\x69\x02\xe9\xc0\x01\x9b\xc3\xb9\xef\x47\xe5\xa3\x10\x41\xec\x08\x37\x8d\x50\x8e\xde\x08\xe1\xcc\xd3\xfc\x0d\xfa\xcc\xd7\x3e\xfe\xb2\xdb\x78\xfc\x15\xdb\xbe\x64\xe8\x02\xd3\x62\xdb\x67\x7f\xf3\xb7\xaa\xf6\xbb\xdf\x7e\x33\xd5\x7b\x06\x81\x77\xba\xdb\xbb\x07\x03\x4c\x1e\x74\x00\xbe\x55\x7a\xe6\x37\xd5\x01\xe8\xdd\x48\x07\x00\x93\x7b\xd3\x01\xc0\x84\x23\x96\xa3\xc9\xb6\x17\xdb\x97\x5a\x25\xdd\x16\x75\x19\x7a\x7c\xb1\xf2\x51\x3b\xa9\x1b\x8b\x06\x30\xb9\xa0\x9f\xee\x54\xfb\xb1\xed\xc4\x7f\x33\xc6\x52\x77\xc7\x4e\xa8\xc5\x6f\x33\xf0\x31\x3c\xc1\xfb\x0f\x7f\x79\xd7\x4f\xb3\x6c\xcf\x57\x7f\xb4\xdc\x73\x50\x03\x11\xa6\x09\xd5\xd1\x01\x83\xf2\x82\x14\x9c\x34\xcd\x72\xd7\xbb\x08\xe0\xec\xea\x95\x1c\x70\x8c\xb4\xd7\x7b\xab\x9d\x2a\x96\xb7\x19\x6a\xae\x51\x2f\x55\xf5\x4a\xf7\x2d\xd0\x3f\xdf\x37\x37\x62\xfa\x27\xc5\x0f\x02\xae\x6f\xf5\xea\xfa\x6a\x9f\xde\xcc\xf6\x93\xea\x86\x8c\x60\xd4\xaa\x99\x20\x99\x67\x19\x73\xe2\x2b\x52\x00\x5a\xa4\x0f\x62\xaa\x87\xb3\xf1\xc7\x12\xe2\xdc\xe3\x2b\x93\xb8\x34\x7f\xb8\x72\xde\xa8\xbf\x8a\x27\x9f\x45\xfa\xa0\xf1\xfa\x70\xe2\xbf\x62\x45\x94\x4d\x67\xfe\x66\x6a\x28\xf7\x7c\xee\xbf\xb6\x53\xbf\x83\xe0\x56\xc9\xd3\xce\x11\x3f\xd0\x21\xb9\xbf\x58\x78\xb7\x8b\xd5\x0e\x33\xfc\xcb\x4d\x05\x72\x75\xef\x07\x0c\x22\xe5\x4b\xdc\x7d\xfd\xa8\x02\xd0\x1f\xed\xe1\x59\xbc\x5f\x97\x7a\x58\xb7\xa7\x49\x92\x50\xeb\x13\xfb\x69\xcc\x40\x15\xf1\x1b\xf7\x8e\x6e\x74\x22\xc5\x56\xac\x75\xdd\xc0\x6e\xc3\x75\x83\x1a\xe6\x41\xfa\x60\x14\xfc\xad\x22\xfb\xba\x0a\x7d\xc0\x05\x80\x5d\xfe\xba\xef\x00\x47\xe9\xc4\xc2\xeb\xcd\xbc\x24\x9a\xea\x3b\xbf\xea\x87\x5d\x01\x18\x94\x12\xe4\x6d\x42\xaa\xc7\x12\xd1\xaa\x5a\xcd\x5b\x43\xbf\x9f\xde\x9e\x1b\x00\x3d\xbc\x80\x52\x54\xfd\x5e\xbb\x37\x47\x00\x3b\xc9\x32\x95\x37\xa8\x34\x7b\x38\xf4\xbf\x83\x43\xdf\x66\xa6\x1f\x54\xe1\x67\xc1\xe8\x09\xe5\x8d\x8e\xbc\x06\xa2\xfb\x12\xc0\x2f\xf1\x32\xe4\x43\x78\x9b\x07\x46\xbc\x44\xdb\xd1\x27\xbe\xd3\xdc\x5b\x0e\x82\xd4\xb6\x4c\xbc\x2f\x06\xb8\x67\xef\xf3\x6e\x37\x26\x23\xfb\x35\x16\xd0\xba\x77\x17\x12\x4f\xb5\x2c\xbb\xd9\x74\x2d\x19\x5d\xe0\x7c\x43\x18\x06\xef\x4a\x62\x61\x2b\x10\xa9\x6f\xc6\xe7\x88\xc4\x0c\x0c\x99\x67\x1f\xff\xc5\x7e\x1e\x2b\xcf\x50\xce\x09\xac\x7c\x28\x34\x7c\x90\x11\xc7\xa5\x82\xd4\x80\x19\x1c\xe3\x27\xfc\x18\xf7\x7a\x80\x8c\xb0\xeb\x83\x0c\x8f\x2b\x8d\x9a\x80\xb2\x1c\xc4\xf6\x4c\x0d\x92\x24\xc1\x27\xdc\xb7\xdf\x27\x72\xaa\xd2\xaa\xdb\xc4\xee\xbd\xb9\xd8\xff\xa5\xee\x58\x9e\x3f\xb1\x97\xed\xd4\xe2\x2d\xc3\xcd\x6e\xcf\xfc\xbf\x4b\x46\x61\x2d\x3b\xa0\xf6\xbe\x85\x1d\x38\xb8\x19\x3b\x60\x16\xfd\xee\x59\x82\x7f\x15\xa8\xb8\x73\xbc\x70\x97\x27\x9c\xad\x3f\xe1\xcc\x9c\x70\xb6\xfb\x09\x67\x8d\x13\xce\x1a\x27\xdc\x2d\xbe\x09\xf7\x05\xa8\xda\x7a\x7b\x25\x18\x36\xd3\x94\x72\xf8\x17\x21\x11\xb9\xcd\xf7\x75\x77\x33\x15\xeb\x7a\x07\x98\x92\xbe\xaa\x18\xce\x1b\xd7\xf0\x83\x05\xf1\xb7\x42\x9b\x12\xcf\xcf\x0d\x7c\xdc\xe2\x08\x37\x4d\xa2\x33\x4a\x33\x94\x0a\x42\x55\xc3\x9d\xa0\x57\xdf\xce\xa4\x3b\xdc\x74\x4f\x39\xa4\x1b\x49\xbd\x13\xfc\x84\x02\xb3\xfe\x45\x92\x9e\xf0\x7e\xc6\xd1\x50\xfc\x0f\xb3\x04\x1f\x17\x71\x06\x29\x38\xce\x7a\x3d\x90\xab\xb5\xce\x24\xaa\xc6\xdf\x57\xd5\x26\xb2\xda\xb9\xac\x76\xce\xe1\x2c\xc1\xc7\x93\x78\x26\xaa\xcd\x0e\x0e\x4c\xb5\x59\xe5\x82\x27\x49\x12\xda\xed\xa6\xdd\xae\xce\xa2\x00\xe6\x37\x39\x70\xf2\x0c\xdc\xd7\x1d\xad\x50\xd7\x03\x7f\xf7\x8d\x9e\xa1\x6f\xc7\x74\x2c\x20\xae\xdf\xc6\xae\x0c\x13\xcc\x71\x9a\xfd\x65\x1b\x1b\xb2\x5d\x4c\x4e\x6b\x0d\x37\x44\xff\x2d\x81\x03\xaa\x17\x80\x80\xa5\x96\xd7\x64\xc0\x52\x95\xdf\xc4\xec\x3e\x09\x2b\x80\x87\x45\x5d\xae\x8a\xbe\x91\x66\x19\xea\x44\x46\x34\xda\xce\xae\x95\x7c\x1d\x76\xad\x0c\x49\x99\xf3\x83\x43\x91\x07\x54\xf6\xe0\x50\xe4\xc1\xa1\x88\xef\xf7\x63\x2b\x87\x22\xfb\x37\xf1\x28\xe2\xb7\xfb\x87\x70\x28\xc2\xd0\x12\x3d\x3c\xed\x7d\xb3\xa8\x73\x6b\x85\x7c\x2d\xf0\xd7\x01\x9a\xf7\x6b\x5c\x14\x01\x27\x23\x3c\x1e\xaa\x9d\x53\x92\x04\x31\x69\x78\xad\x96\x6b\x48\xca\x5a\x24\x85\x2a\x34\x6a\x79\x23\xfc\xad\xc0\xee\xde\x64\x0b\xe8\x02\xb1\xfc\x81\xd7\xf9\x56\xa1\xfc\xdb\xf5\x6a\x2d\x25\xbb\x26\x7e\x5e\x5f\xc3\x61\x0c\xc0\x70\xc4\xc6\x5f\x8d\xf6\x6e\x3e\x2f\x66\xb3\xec\xe1\x78\x7c\xab\xc7\xa3\xce\xd1\xc8\x70\xc4\x26\x66\xe3\x85\x0a\x77\xe8\x19\x6d\x3b\x4e\x86\x65\x3c\x07\x3f\x12\xbf\x7f\x35\x70\xd0\xed\xf2\xd5\x4a\x86\x9c\x60\x29\x99\xd2\xc5\x31\xfe\xfe\xe8\x18\xe8\x80\x14\xb3\x8c\x8a\x06\x62\xf0\x6f\xf8\xe0\x40\x5c\x3a\x68\x84\xc7\x50\xfc\x97\xa0\x11\x13\xbf\xd8\x38\x21\x56\x60\x7e\x93\xa3\xac\xc1\xf3\x56\xbd\x41\x3c\xaa\x49\x1a\xf7\xea\x66\x67\xb4\x85\xb0\xaf\x78\x81\xd6\xc3\x4f\x01\x64\x31\x85\xd8\xf5\x5f\x4f\xc7\x77\xed\x55\x62\x7b\x77\xf4\x12\x34\x1e\x0e\xfb\x37\x7a\xd8\xbf\x1d\xb9\x5f\x75\x1c\xa8\x71\x59\x2b\xb8\x9e\xaf\xe6\xd6\xa3\xac\x2e\x61\x7a\x38\x08\x0f\x07\x61\xd3\x41\xb0\x11\xc4\xc4\x59\x50\xe6\x8f\x10\x27\x3c\x66\x1e\xa9\x18\xb7\x5f\xa8\x18\xac\x56\x75\x29\x92\xdc\xb4\x24\xa0\xea\x5e\x39\x26\xaa\xe7\x08\xf0\x15\xb3\xce\xd7\xc7\x50\x29\xa1\x2d\xd8\x7e\xd6\x9c\xb6\x36\x0a\x89\xaa\xb2\x4d\x55\x78\x23\x1e\xdb\x28\x0b\x82\x01\x59\xcf\x4d\x9c\xa2\xf4\xc5\x68\x5c\x0d\xf9\x9b\x28\xd9\x7b\x6d\xb8\xf3\xfb\x2a\xf4\xed\x79\x7a\x23\xdb\xe9\x07\x1c\xf5\x07\xc6\x51\x5f\xe6\x58\x5e\xaa\x8f\x7c\x2d\xb7\x34\xa7\xe7\xe7\xd9\x0d\x95\x3a\x55\xdd\xaf\x5a\xad\x53\x0d\xf1\xfe\x15\x3b\xcd\xd2\x3c\xf8\x64\xb8\x23\x09\x6c\x80\x54\xd6\xc7\xeb\x11\x08\x28\xa6\xd5\xef\x5a\xac\x15\x08\x9b\xfe\x7d\xcc\xeb\x15\x75\x02\xce\x43\x37\xc4\x7b\x85\xf9\x65\x60\x7a\xbe\x5a\xf1\x9e\xf8\x81\x4e\x06\x43\xde\x3b\x2a\x9d\xb7\x10\x5a\xc9\x01\x20\x07\x4d\x0c\x81\x21\x81\x54\xc6\x5e\x0b\x66\xed\xa3\x9b\xe9\x95\x29\xe0\xbb\x2f\xe1\x6f\x41\xb6\xc7\x1c\xdf\x84\x47\x16\x39\xa1\x1b\x23\xd4\x4b\xcc\xe7\xb4\xb8\xa9\x8b\x9a\xdf\x26\xee\xd6\x17\x45\xd1\xe2\x0d\x25\x4d\x0e\x49\x00\x8d\x6d\x17\xe6\x4b\xbe\x1f\x9e\xf0\x21\xaf\x1c\x1a\x96\x8e\x75\xa7\x34\x94\xd2\x4b\x2c\x30\xd2\x4d\x8e\x87\xae\x7e\x77\x41\x99\xb5\x92\xf5\x4e\x77\xa9\x09\xb7\xbe\x75\xa8\xe7\xad\x03\x1c\xef\x10\x94\x74\x87\x50\x8b\xbb\x44\xa0\xdb\x32\x6e\xd9\xb6\x41\xa0\x76\x8a\x97\xb3\x7d\xc8\x87\x1d\xbc\xc1\xef\xe0\xae\x79\x17\x27\xb4\xbb\x78\x76\xdc\xd5\x1d\xe0\x96\x7e\xe3\x76\x72\xc2\xb5\xbd\x6b\xaa\x6d\x7d\xff\x6c\xef\x09\x65\x4b\xf7\x09\x5f\xee\xf5\x32\x60\xa6\xbb\x8b\x75\xdf\x8e\x46\x55\x5f\x6e\x49\xd5\x34\x11\xd9\xda\xde\x60\x6b\x25\xf2\xed\x95\x5f\x77\x52\x45\xdb\x5e\x9b\x62\x87\x27\xe9\x1d\x9e\xe7\xb6\x16\xed\xef\x20\xfc\xdc\x56\x00\xb1\x33\xa7\x76\x1b\xec\x59\x8d\x84\xdb\x9e\xb8\x69\xba\xee\x84\x18\x52\x98\xc2\x1c\x16\x30\x83\x13\x38\x83\x73\x38\x85\x4b\xb8\x80\x17\xf0\x1c\x5e\xc1\x33\x78\x0a\x2f\xe1\x0b\xf8\x19\x7e\x80\x4f\xe1\x5b\xf8\x09\x3e\x83\x1f\xe1\x7b\xf8\x0e\xfe\x04\x9f\xc3\x37\xf0\x9f\xf0\x15\x7c\x0d\x5f\xc2\x5f\xe1\x0f\xf0\xc7\x2f\x25\xfa\x5a\x2b\x3c\x95\x97\xec\x8f\x9a\xa6\xba\x46\xa4\x58\x28\x9e\x63\xb8\x3f\x80\xe7\x88\x07\xfc\x9f\x59\x42\xa0\x5c\xdb\xb0\xb8\x93\x77\x6a\x97\x6d\xd5\xee\x33\x71\x85\xef\xd4\x2e\xd9\xae\x5d\x75\xe3\xef\xd4\x32\xde\xba\xe5\x82\xa3\x9d\x5a\xa6\x5b\xb6\xac\xe8\x89\x9d\x9a\x4e\xb7\x6a\xfa\x39\x9a\xec\xd4\x6a\xbe\x5d\xab\x8c\x2e\x77\x6a\xb6\xd8\xaa\xd9\x97\x92\x5e\xf9\x61\x37\x70\xcb\x76\x68\x7a\xa7\x86\x27\x5b\x36\x4c\xa6\x3b\x8e\x78\xb6\x5d\xc3\x8a\xce\xda\xa9\xe5\xf9\x56\x2d\xff\x97\x20\xcb\x76\x1c\xf3\x74\xab\x96\x7f\x54\x0e\xa1\x77\x6a\x79\xb9\x6d\xcb\xc6\xcf\xf0\x4e\xad\x2f\xb6\x6a\xfd\x15\xd9\xed\x94\x5c\x6c\xd9\xaa\xa6\x27\x77\x6a\xfb\x7c\xcb\xb6\x05\xf9\xb9\x53\xc3\x57\x5b\x35\xfc\xdf\x14\xef\x06\x73\x67\x5b\x35\xfb\x53\xba\x2b\xc4\x9d\x6e\xdb\xee\x4e\xad\x5e\x6e\xd5\xea\xce\x40\xfc\x62\xab\x66\xdf\x6a\x3b\xdd\x9d\x9a\xfe\xbc\x5d\xd3\x9a\x2c\xdf\xa9\xe9\x0f\x5b\x35\xfd\x0e\x2f\xd1\x53\x59\x73\xa7\xc6\x9f\x6e\xdd\xf8\x4e\xcd\xbe\xdd\xae\xd9\x9b\xe0\x8a\x4f\x5b\x35\xfd\x3f\x82\xa3\xd8\xa9\xdd\x67\x5b\xb5\xfb\x5e\x30\x20\x3b\xb5\xfb\xd1\x69\xb7\x9d\x94\x7c\x2f\xf9\x95\x9d\x1a\x7e\xbf\xdd\x80\x25\x7b\xb3\xe3\xa9\x7e\xb7\x65\xd3\x82\x19\xda\xa9\xe1\x9f\xb6\x6c\x58\xf2\x4e\x3b\xb5\xfc\x7c\xab\x96\x3f\x28\x56\x6b\xa7\x96\xdf\x6c\xd7\xb2\xe0\xcc\x76\x6a\xf7\x9f\xdb\xb5\x4b\xd9\xae\xbb\xf7\x6a\xab\x86\x3f\xa6\x3b\xde\x4c\xaf\xb7\x6b\x56\x32\x7d\x37\xc0\x44\x2f\x77\x68\x7e\xa7\x86\x7f\xdd\xaa\xe1\x9f\xc9\xae\x03\xfe\x61\xab\x76\x7f\x51\x1c\xeb\x4e\x2d\xff\xe8\xb4\xbc\x8d\xbc\xb7\x61\x2e\xbf\xdd\xb3\xdf\x0d\x44\xd7\x19\x47\xc1\x97\xa8\x0e\x7a\x92\xf0\x52\x16\x68\xcb\x97\xd9\xe7\xad\xf5\xbf\x4f\x74\x81\xb6\x7c\xb9\xcc\x5b\x2e\x85\xe3\x69\xe4\xd6\xcd\x0b\xbf\xe0\x09\xc8\x69\x55\x06\x1b\x51\xd2\x7e\xb6\x47\xa4\x63\x68\xf3\xc0\x80\x54\xf8\xbf\x80\x13\xf5\x9a\x0b\x09\xd9\x48\x09\x80\x8e\xdf\xe1\xd4\x37\x2f\x87\x36\xba\x48\x87\x7e\x9f\x0c\x4e\xe8\x90\x14\x59\xb6\xc3\x3a\xda\x57\x9d\x3b\x03\xa8\xe6\xd2\xb8\x6e\x7a\x64\x74\x07\x39\x82\xd5\x4a\x06\x9f\x93\x0c\x38\xdc\xe4\xdd\xe3\xfb\xa3\x13\x76\x70\x34\x94\x21\x28\x8e\x5c\x2f\x1f\x07\x47\x61\x3f\x1f\xc6\x47\x0f\xd2\xf6\xb1\xdb\x2e\x8f\x01\x98\x7b\x5c\x1e\xe7\x4c\xdc\xd0\x9d\xcd\xc9\x7f\x7f\x78\xfb\xa6\x9f\xcb\x97\x75\x3c\xbb\x8a\x11\x48\x92\xa4\x96\xc6\xcd\x7b\x17\xce\x5f\x88\x19\x6a\x45\x1a\x3f\x4d\xda\xd0\xed\xb4\x5a\x4a\x86\x7d\xbf\xd0\xa4\x0d\xa3\x74\xd7\x75\x65\x3d\xa9\x8e\x60\x1f\xfc\x9b\xb9\xbb\xcd\xcf\xb8\xc0\xd9\x11\xeb\xe8\xb1\xdd\x3d\xda\x69\xf3\x45\xd3\xed\x36\x54\x15\x6e\xe8\x95\xe7\xba\x0c\xb8\x9e\xab\x2d\xaa\xf4\x7b\x03\xba\xdd\x75\x45\xa4\x52\x98\xd4\xed\x08\xef\x40\xc1\xd1\xf4\x20\xe7\x57\x19\x3a\xf4\x3f\xef\x08\xb8\xf6\x14\x42\xd2\xd5\x3e\xa1\xab\xbc\x61\x67\x5e\xf9\x1e\xba\x2e\x21\x49\x06\xc7\xe4\x09\xd7\x8b\x77\x4c\x7a\x3d\xc0\x46\x7c\x44\xc6\x63\x3f\xd8\xde\x88\x8c\xab\x10\x18\xa5\x52\x8f\xb8\x4e\x09\x5e\xa4\xa2\xe9\x57\x52\x7f\x06\x53\xf2\x8c\x16\x84\x0b\x82\xe1\x8c\x7e\x7e\x99\xa1\xcf\xce\x4f\x29\x27\xd2\xdf\x6f\xd9\x14\x93\x34\xb3\x49\x13\x9a\x15\x8b\xaa\xf2\x4c\xd7\x9c\xa9\x6a\x97\xe6\xf7\x3b\x9a\x63\x8e\x2f\x90\xf9\xfe\x30\x67\x98\x7c\x32\x5f\x6f\xd0\x79\xea\xe6\xbe\x65\x53\xc4\x24\xf1\xc2\xf0\xf4\xbd\x6a\x45\xfc\x7c\x26\x3b\x93\xa5\x28\xe1\xbf\x20\x7c\x3e\x97\xbd\x66\x98\xa0\x67\x59\xba\x58\x9a\x8f\x1f\x6d\x16\x5d\xa6\x13\xcc\xaf\xe4\x4f\xd3\x2a\x65\xcb\x79\x4a\x72\xf1\x93\xa7\x67\x1f\xf0\xaf\xb2\xe3\x4b\x3c\xa5\x97\x32\xf1\xd7\x57\xe2\x72\x93\xbf\x28\x5d\xc8\xee\x70\x96\xbd\xad\x5a\xca\x39\x5d\x7a\x9f\x8c\x7e\x42\xcf\xd3\x7c\x4e\x67\xb3\x1c\xf1\x2a\xad\x51\xe8\x17\x3c\xe5\x73\xb1\xdd\xfa\x1d\x7e\x14\xfd\x82\xce\x3e\x61\x1e\xc1\x68\x21\x4e\xf2\x4f\xf4\xd7\x08\x46\x6f\xa3\x71\xb5\xf7\xd4\xd1\x98\xe2\xe2\xea\xf5\xac\x28\xad\x82\xa5\x7f\xb0\x43\xee\x23\xf4\xa9\x89\xb4\x82\x08\xb7\xbe\x67\x64\xdc\x24\x81\x7c\x07\x4a\xd9\x87\xf4\xe7\x69\xfe\xf6\x92\x54\x40\x0b\xba\x5d\x32\x42\xe3\x93\x28\xea\xf1\x61\x1c\x29\x2c\x5e\xe9\xdd\x72\xa9\x7b\xcc\xfb\x9c\xe1\x45\x0c\x00\x64\xbd\x68\xf9\x39\x02\xa5\xc0\xdf\x23\x3e\x6e\x04\x77\x51\x43\x62\xe0\x44\x10\x0b\xfa\x1a\xd0\x7a\x58\xd3\x34\x9f\x23\x86\x7f\x45\x31\x07\xbd\x68\x18\xf5\x58\x09\x8c\xbd\x74\x13\xcb\x74\x44\x03\xfb\x49\x82\x4a\xa0\x02\x5a\x44\xc7\x11\x28\x79\x4c\x40\x30\x14\x25\x6e\xa6\x72\x70\x4d\x46\x61\x7a\xb0\xc7\xfb\x93\x79\xca\x9e\xf2\x78\x00\xfa\x9c\xfe\xbc\x5c\x22\xf6\x2c\xcd\x51\x0c\x7a\xbc\x9f\x17\x67\x6a\x15\xe2\x23\x35\x4f\x30\x4e\xc4\x12\x49\x45\x45\xa9\xce\xba\x87\xac\xbe\xcd\x07\x81\x36\x92\x38\x4d\x9a\x7a\x96\xa3\xf1\x9e\xdc\xd4\xd0\xc0\xb4\x7e\x2b\x8d\xe5\x22\x9a\x86\x49\xc2\xaa\xb9\xee\xd9\x37\x11\x8d\x43\x8f\xba\xdd\xe8\x38\xda\x4f\x12\x62\x06\x6f\xb2\x0e\x8e\x40\xb7\x1b\x93\x5e\x22\xea\x41\x6f\xd1\xe7\x7c\x91\x7d\x48\x67\x48\x6a\xa2\x38\x78\xda\xe0\x9b\x26\xae\x86\x3c\x31\x4a\x33\x1a\x11\x21\x89\x81\x04\xb6\x71\x70\x37\x19\x07\x0d\xe0\x03\x46\xc0\xa9\xa6\x8f\xa4\x46\xe9\x88\xa9\xbf\x1c\x8c\x9d\xf8\x3d\xb8\xbf\xd4\x00\xa9\xcb\x62\xc8\x41\x0b\xfb\xe2\x20\xef\xb5\x54\x7a\x3b\x92\xbf\xab\xab\x92\xfb\x50\x11\x18\x3d\x99\x14\x8c\x21\x32\xb9\x3a\x3c\x38\x2b\x66\x33\xc4\x0e\x96\x34\xc3\x93\x6d\xcd\x4c\x6e\x78\xef\xd4\xc9\xe3\x63\xd4\x4f\x27\x02\x29\x7f\x4c\xf3\x4f\xaf\x34\xf9\x62\xb6\xff\x09\xea\x2f\xd2\xcf\xcf\xaa\xa1\x1e\x1b\x9d\x42\xed\xf2\x6d\xea\xd7\xca\xe7\x78\xc6\x63\xe5\xcf\x90\x83\x33\x86\xd2\x4f\x7b\xe1\xf6\x25\xc4\x73\x50\x96\x7b\xbe\x56\xa4\x39\x94\xb5\x7e\x0f\xc2\xfd\x69\x88\x5f\x37\x85\x12\xf5\x11\x91\x75\x45\x6e\xfe\x4e\x2e\x71\x72\xcd\xd0\xbf\x0a\xcc\x50\xfe\x33\x39\xa3\x05\x99\xa2\xa9\xd3\x99\x44\xe3\x93\x39\x12\x4b\xe8\xa9\x4c\x4b\x7f\xd6\x82\xd3\x7e\x83\x3e\xf3\x77\x88\xcd\x28\x5b\x7c\xe0\x29\x2f\xf2\x90\x23\x5c\x31\x9f\xef\x07\x27\x51\x5e\x4c\x26\x08\x4d\xa3\x61\xa4\x07\x12\x95\x82\x3f\x9d\x32\xba\xfc\x1f\x3b\x27\x3b\xb0\x89\x18\x7c\xf6\x1e\xa5\x39\x25\xc3\x08\xf3\xce\x19\xca\x28\x39\xcf\x3b\x9c\x76\xd2\xce\x77\xa2\xd6\x77\x1d\x51\xa3\xc3\xe7\x29\xef\x5c\xa6\x79\x27\xcd\x18\x4a\xa7\x57\x1d\x56\x10\x22\xf0\x75\xfb\xe0\x21\xea\xe7\xcb\x0c\x4f\xfc\x95\x92\x87\xb0\xef\x76\x0c\x83\xcb\x0d\x07\xe1\x74\xbd\xd2\x5f\xb4\x34\x52\x1f\x4a\xae\x8b\x1a\xc7\x5b\x72\x4e\x31\x39\xdf\x65\x69\x18\xca\x79\xca\xb8\x20\x8c\xeb\x2b\xd4\x5f\xaa\x11\xc5\x00\x4d\x3b\xe9\x79\x8a\x49\xcb\x22\x19\xe0\x0e\xc0\x13\x64\x61\xa0\xdf\xe3\x12\x98\x0d\x5e\x83\x9b\xb4\x9d\x1d\xa6\x74\x00\x99\x41\xaf\x66\x0d\x8f\xf9\x13\xf3\xfb\x98\x2b\x52\x6f\x9c\x88\x7b\xa1\x22\xed\xc2\xaa\xcb\x4c\xdc\xc7\xba\x66\x62\xd4\x63\xa5\xdd\xed\x22\xfd\x2c\xa9\x74\x7b\x58\xfc\xa3\x05\xf6\xb6\x05\x0a\x0e\x95\xbe\xff\xcd\x77\x59\x35\x77\x6a\x15\x7a\xec\x41\xf8\xa1\xe0\x7f\x46\x68\xf9\x3a\xe5\x28\xe7\x5b\xee\xf7\x27\x5b\xe1\x2b\x3d\x10\x07\x47\xa0\x0c\xf1\x1c\x0e\xe2\x57\x7d\x48\x5e\x4e\x73\x7c\x86\xa7\x0b\xdf\x64\x4e\x55\x9e\xe6\x9f\x0e\x2c\xbf\x19\x2a\x22\xb9\xc2\x3b\x30\x50\x98\xa7\xf9\x3c\x41\x7d\x96\x4e\x90\x38\x2a\x59\xf6\x01\x71\x9e\xa1\xa9\xfa\xf0\x15\xb4\x19\x3a\x47\x44\xa9\xee\xbf\x2f\x08\xc7\x0b\x01\x7e\xec\x53\x4c\x01\xc4\x49\xae\x89\x57\x19\x53\xf0\x9d\x9a\x3f\x8c\xd2\x2c\x8b\x60\x0a\xc2\x94\x71\xa0\xbd\x4b\x56\x23\x94\xe5\xb5\x76\x0c\xf2\x4b\xcc\x27\xf3\x58\xc5\xc9\x4d\x74\xb4\xe4\xeb\x49\x9a\xa3\xce\x60\x58\x89\x6b\xce\x58\xb1\xe4\x71\xa4\xa9\x66\x88\xc0\x9e\x2c\x72\x34\x14\x7f\x22\x44\xa6\x51\x55\x58\x30\x04\x31\x28\x4b\x48\xa0\x00\x11\x50\xaa\x19\xd7\x8e\xbc\x20\xaf\xed\x81\x36\x17\xda\x9e\x39\xf6\x9a\x8c\x32\x87\xbc\xd7\xd3\xe2\xbb\x34\x41\x82\x8e\x12\x57\x67\xba\x5a\xed\xa7\x23\xd6\xbf\xc2\x28\x9b\x0a\xe0\x50\x46\x10\x63\x1b\x21\x44\x9c\x78\xe5\xc8\x72\xff\x08\x16\x09\x6a\x84\x4a\xd4\xa4\xbf\xa1\x46\x4c\x08\xf7\xeb\x19\x19\x52\x98\xb2\xf3\x7c\x28\x69\xd8\xfe\xa9\x44\x99\x55\x58\xc6\xa3\xfd\x24\x61\xfd\x53\x41\xba\x64\x48\x34\x26\x4e\x37\xea\x76\xe3\x3c\xd9\x1f\x00\xc8\x2a\x2a\x2d\x3f\xc1\x71\x01\x86\x45\x5b\x94\x46\xa4\xac\xb5\x4a\x20\x8e\xb8\x03\x23\xee\x9e\xcb\xbd\xd6\x19\x62\xcb\xa1\x06\xaa\x30\x5c\x88\x2c\x5d\x4a\x42\xa0\xdf\x92\x48\x8a\x60\x60\x20\x0e\xa3\x1d\xe2\xaa\xcc\x70\x47\x5c\xd1\xf4\x16\xea\x52\xcf\xa7\xbd\x4d\xce\x8d\xc8\xb5\xae\x15\x8e\xd5\xaa\xd3\x44\xfc\x84\xa9\x1b\x2e\x73\x8a\x66\x88\xc5\x60\x0f\x8d\xd8\x38\xc6\x40\x79\xeb\x4d\xfb\x0c\xe5\x34\xbb\x40\x50\xfc\xfa\xa7\x0c\x9b\xea\xec\xa9\x43\x3a\xe7\xab\x95\x5c\x7f\x48\x83\xdc\x8e\xd8\x9e\xca\xd4\x44\xb0\x69\x66\xdb\x4f\xcc\x6d\x1a\x83\x61\xc8\x8c\xb2\x7f\x7a\x8a\x26\xa7\x1a\x29\x9f\x76\xbb\xb5\x84\x58\xf0\x22\xa0\x84\x59\x92\xf6\x35\x76\xea\x6b\x33\xb9\xb8\xb0\x80\x90\xf9\x95\x92\x02\x66\x9b\xb0\x1e\x22\x93\x74\x99\x17\x59\x2a\xc8\x70\x81\xc7\x76\x44\x76\x77\x47\xb3\x9b\xf3\x62\x0c\xe7\x4e\x17\xe9\x27\xf4\x4a\xdb\x1e\x0d\x1b\xa2\x2d\x79\x4f\x9c\x23\x1e\x47\x9a\xc0\xa8\x38\x35\xe4\x32\x3a\xb2\x9c\x38\x76\xa0\x84\xba\xa4\x12\xa0\x87\xb8\x1a\x67\xda\x81\xbb\xe0\x76\xc5\x9c\x62\x5d\xd5\x83\xd2\x33\x65\xd6\x96\xd4\xb5\x21\xed\xdb\x82\xf2\x80\xc1\x6c\x4c\x57\x9f\xd9\x67\x05\xe9\x9f\x61\x32\x55\xce\xa0\x9c\x85\xc2\xb3\x18\xfb\x02\x3a\x0d\x7d\x58\x30\xbb\xeb\x58\x4f\x56\xb1\x9e\x69\x32\x38\x4e\x9f\xa0\xe3\x54\x52\x44\xa9\xcb\x7a\xa6\x12\x65\x92\x6e\x97\x68\xf3\xd0\x6b\x75\x88\x98\x89\x37\xab\x58\x8d\x4a\x54\x96\x43\x53\xd2\xda\x2a\x89\xa1\x58\x5e\xf3\x37\xa2\xdf\x28\x30\x66\x22\x0c\x80\xb2\x0c\x0a\x2b\x1d\xc8\x30\x2c\xf2\xc1\x82\x4e\xf1\x0c\x23\x96\x1f\x2c\xf0\x67\xdc\x62\xbd\xe4\x54\x34\xa4\x10\x0b\x67\xfb\x9c\xe8\xed\xd3\x0e\x66\xdc\x3f\x99\x61\x6b\x72\x41\x3a\xfa\x92\xe8\xf0\x83\x19\xa0\xf7\xc8\x25\xf7\x02\xf5\x4f\x05\xc0\x4a\xa1\xe4\xbb\x94\xcf\xad\x43\x68\x25\x03\xad\xe7\x56\x42\x93\x53\x3b\xeb\xb2\xae\x0c\x6b\xaf\x46\x35\x73\x45\x7b\x0e\x51\xff\xd4\xfd\x86\x3e\xc9\x2c\xb2\xfd\x94\x12\x94\x7b\xa1\xc9\x5d\x7b\xcd\x0c\x59\x80\x17\x85\xb5\xa6\x86\x47\x87\x03\xe8\xcf\x44\xe2\x0a\x78\x3a\x4f\xf3\x9f\x73\x34\x35\xad\x0f\xf7\x8f\x64\xda\x07\xc4\x7f\x70\x3b\xd1\xc9\x2f\x88\xa0\x1c\xa6\x2f\x2e\xc4\x31\x11\x89\x0e\x7f\x14\xd2\xb6\x55\x98\x8a\xb5\xf2\x5f\xe2\x22\x57\x83\x5f\x57\xbb\x39\x3f\x50\x42\x41\xe1\xaf\xab\x14\x64\x85\x41\x09\x2b\x0a\x7f\x53\xed\x00\xff\x00\xca\xfa\xae\x05\x88\x03\x89\x98\xeb\x0b\x2b\xae\x5a\x95\xe1\x37\x90\x20\x88\x65\xa7\x40\x66\x97\x50\xda\xbb\xb4\x37\xeb\xed\x61\xa3\x32\x12\x1b\x83\xa6\x21\x45\x6d\x33\x28\x6f\x0b\xcd\xa8\x4a\x38\x45\x67\xc5\x79\x6b\x3d\x99\x6b\x0b\x97\x2d\x76\x72\xe2\xf2\x6f\xc2\x8e\xa8\x86\x82\xeb\x51\x3b\x10\x09\x87\x58\xb1\x4f\xf5\x35\x4a\x92\xa3\xc3\x81\xa0\x48\x1a\x39\x47\x00\x3a\x74\x14\x8e\xc1\xf5\x06\x1c\xe7\xa0\xaa\xbb\x94\x88\x0d\xac\x13\x53\xdd\x80\xb9\xfc\xb3\x34\x37\x4c\x2e\x9a\xaa\x33\x28\x92\x3e\x88\x53\xe4\x26\xbc\x57\x6c\xa6\x53\x42\x30\xbc\x79\x3e\x2b\xb2\x2a\xed\x99\x22\xa9\x51\x95\x22\xed\x89\xdd\x76\x9e\xc9\x93\xe7\xa6\xbc\x22\x13\xaf\x9a\xa6\x1d\xd4\x33\xcc\x00\x4a\xd1\xd5\x8f\x29\x99\x66\xe8\x65\x91\xcd\x70\xa6\xfb\x73\xd2\x95\xd2\x96\x4a\xc6\x04\x7b\x07\x49\xc1\x4b\x5e\x2c\x11\x73\x89\x15\x7b\xb7\x02\x4d\xb7\x34\x65\x21\xc9\x68\xac\xf2\x02\xcc\x6f\x32\x1a\x97\x50\x21\x91\xa7\x59\x16\x90\xae\x8c\xc6\x7b\xb2\x6e\x88\xf1\x46\xad\x5d\xc2\x41\x6b\x96\x95\x55\xeb\x01\xaf\x69\x38\xcc\xc4\xb7\x65\x39\x0d\x0b\x5e\xa1\x84\x81\x96\x87\x4d\xf3\x91\x8a\x44\xa0\x09\x3b\xa6\x4f\x58\x8f\x1c\xf7\x7a\xd4\xb0\x79\x7c\x44\xc7\x7b\xa9\xe0\x61\x34\x24\xad\x56\xa9\x24\xc4\xfa\x53\x34\x61\x48\x2c\xbd\x05\xde\x88\x14\x0b\x85\x19\x23\x00\x53\x43\xcd\x23\x00\x71\xb7\x8b\x8d\x5b\x0c\x51\x17\x94\x5c\xcf\x3b\x96\xba\x1c\x61\x91\x47\xdd\xa3\x83\x07\xe1\x82\xf7\x55\x4b\x81\x49\x63\x1c\x2e\xe4\x45\x86\x72\x0c\x15\x74\x07\xdc\xba\xae\x72\xe0\xa6\xb7\xd3\x59\x56\xe4\x73\x59\x29\x8f\x41\x09\xdd\xef\x61\xf0\x95\x42\x40\x5f\x32\x38\xe6\x4f\x36\x40\xc4\x71\xaf\xc7\x01\xd2\xb2\xe6\x96\xa2\x82\xf4\x93\x0b\xb8\xd7\x0a\xec\x61\x8d\x92\xd1\x18\xb2\x64\x00\x89\x65\xf5\x8f\xd9\x13\xb1\xcf\xcc\x50\xcc\x82\xdb\xdb\xdb\x3f\xb2\x2f\xd2\xca\x58\x3f\xc2\xf9\x4b\x4c\x70\x3e\x17\x2b\xd4\xed\x2a\xe1\x61\x8c\x2d\x2d\xca\xcb\xd6\xa1\xea\xf5\x72\xf1\x70\xdf\x6c\xb3\xba\x5a\xf6\xaa\x97\x63\x75\xe2\x55\xf0\xa9\x8d\xab\x64\x79\xd7\xd6\x55\xc2\xe3\x3d\xea\x81\x6c\xac\xb1\x87\xf8\x76\x8b\xc6\x14\x40\x96\x50\x49\xeb\xc9\x57\x2d\x0d\x9e\xcc\x18\x5d\xfb\xd0\xa7\xdb\x73\x3c\x13\xf9\xf9\xef\x8d\x08\x8f\x55\x93\x53\xdc\xc0\x86\x43\x7b\xdc\xeb\xa5\xde\xde\x07\x8a\x8e\x52\xb3\xf7\x62\x6f\x9b\xc1\x83\xab\xcb\x28\xda\x84\x7c\x04\xdc\x36\xd6\x22\x80\xfc\x14\xcd\x92\xa8\xf3\x23\x9d\x79\xac\x3d\x41\xac\xe5\x88\x99\x65\x91\x37\xb0\x96\xe1\xf4\x4f\x29\x79\x29\xd8\x73\xfc\x2b\xf2\x5e\xde\x5a\x3a\xb1\x6d\x68\x51\x1d\x6a\xc8\x7d\xf6\x9c\x15\x51\xdb\x61\x6e\x31\x89\x2b\x04\x68\x93\x93\x46\x99\xea\xf6\x13\xa5\x86\xf1\xa3\x70\x31\x7d\xfd\xc9\x32\x8f\x45\x11\x0f\x40\x74\x77\xfa\x46\x94\xdd\x35\x72\xab\xdb\x51\x3a\x74\x82\x15\x27\x4a\x89\x8c\x65\xc0\x3d\xdc\x02\x24\x53\xe5\xd1\x43\xe0\x9a\xf7\x7a\xce\xa1\x69\x3f\xce\x54\x1d\x67\xda\x3f\xcd\x11\x22\x52\x71\xe0\x09\xef\x76\x63\x37\x41\x12\x45\x54\x70\x6f\x0e\x95\x53\xd3\x42\xab\xd6\x5d\x42\x81\xdd\x6b\xd9\xb1\x94\x24\x48\xa2\x32\x02\xc7\xe4\x18\x54\x33\x26\xd0\xdd\x31\x71\x21\xd5\xf3\x34\xc8\x88\x73\x44\x12\xe2\x35\x55\xae\xf7\xff\x50\x17\xb3\xa8\x5a\x1b\xf8\x48\x25\x5b\x6e\x97\xd5\xe4\x5c\x3a\xc5\x50\x2c\xe9\x4e\x0c\x6c\xd3\x20\xb3\xcd\xf1\x03\xb6\x3a\x10\xfb\x35\x01\x18\x00\x41\xd7\x2d\xcf\x52\x42\x28\xef\x4c\xd2\x2c\xeb\xa4\x9d\x49\x96\xe6\x79\x27\xcd\x3b\xa9\x15\xe2\x45\x37\xf2\xc2\xf0\xd1\xd2\xf9\xba\x78\xe2\xa4\x19\x71\xb8\x9b\x14\xa2\x36\xad\x15\x25\xbc\xc6\xb9\x2d\x2a\x75\x57\xb4\xef\x9a\x26\xc5\x1f\x3d\xa9\x0a\x46\x3d\x85\x90\xcd\xba\xbe\x49\x17\xa8\x17\x7d\x1f\x95\xf0\xb4\x82\x9c\xb7\xec\x8d\x81\x94\x5a\x94\xdc\xbe\x58\x1f\x17\xc4\x3c\x34\x84\x73\x43\xe3\xd6\x6a\x9d\x51\x9a\xc5\x51\xb8\x07\x59\x4f\x77\xb6\x7f\x54\x1a\xe5\xd2\xd0\x7a\x35\xd7\xc8\x66\x51\x7b\xfd\x76\x50\x0c\xae\x15\x0f\x05\x11\x28\xa1\x7c\xd4\xd2\xa1\xf0\xf2\x1c\x9f\x13\x10\xd3\xca\xe5\x0f\x24\x4d\x76\x7c\x83\xb4\xad\xf6\xa2\xb2\xcd\x01\xb8\x6d\x49\xe4\xbb\x17\xef\x5f\xbe\x7d\xff\xd3\xe9\xc7\xbf\xbe\x7b\x71\xfa\xfa\xd5\x9b\x3f\xbf\x78\x9e\xd4\x52\x7f\x7e\x13\x4e\x7f\xfe\xe2\xe5\xd3\x9f\x5f\x7f\xac\xe4\x29\xe7\xc8\xdc\x9e\xe6\x3e\x4a\x02\xfa\x18\xa3\xd4\xbe\x56\x8d\xe5\x6b\x1c\x9e\x2a\xac\x9b\xe4\xa2\x0d\x9a\xcc\xa0\x7a\x62\x69\x28\xb5\x34\x63\x5f\x7e\x7f\x14\xd4\xec\x3b\x72\x35\xfb\x8e\x1c\xcd\xbe\xad\xe3\xed\xed\x16\x6b\x6f\xa6\xbc\x3c\x49\x40\x21\x50\x46\xc8\x2c\xb5\x32\x54\x24\x00\x4c\xcd\x4f\x6a\xc3\x45\x12\xef\x06\xd7\x31\x0a\xa5\x46\x10\xb7\xee\x47\x14\x4c\x8e\x20\xad\xd7\x08\x96\x37\xa5\x53\xc1\x1f\xb9\xaf\x0d\x15\xc7\xde\xed\xa2\x3e\x49\x17\x28\x49\x12\x56\x5d\x31\x45\xc8\xd3\x96\xde\xa1\xbd\xba\x44\xe1\x43\x71\x96\x4f\x18\x3e\x43\x53\xc1\xd4\xc7\xdc\x91\x60\x9f\x1a\x95\x53\x00\x46\x68\x6c\x9f\xb3\x2b\x6e\xb0\x94\x4f\x4e\x59\x72\x6d\x7c\x71\x69\xb1\xd4\x14\xe7\x4b\x9a\x23\xf3\x59\xa3\x21\x86\x03\x28\xce\x95\xca\x54\x2f\x4f\x63\xe8\x0f\x45\x4a\xac\x58\x41\x5e\x53\x2a\x11\x9e\x12\x61\xb4\xca\xb1\xbc\x67\x61\xd5\xa7\xe6\x4e\x04\xaa\x1f\x12\x78\x8a\x3e\x2f\xd1\x84\xe7\xaf\x31\xf9\x84\xa6\x7f\xc5\x28\x93\x5d\xa8\x83\x26\x2b\x20\x71\x1f\x68\xa6\x38\x77\xb8\xf5\xfd\x23\x88\x73\x79\x59\xa8\x9f\x96\x23\xaf\xa1\xbd\x94\x4c\xe3\xc8\x64\x2b\x74\xe9\x92\xf5\xd0\xc9\x12\x0d\x55\x74\xb3\x6a\xd6\x94\x54\x5f\x2d\xa8\x95\x50\x1e\xfb\xad\xca\x3b\xb5\x19\xdd\x3c\x7f\xce\xe8\x72\x29\xee\xfe\xda\x90\xaa\x6e\xfd\xf1\xad\x8d\x09\xa5\xa3\x54\xd9\x46\xc1\x89\xd4\xcd\x10\x3f\x87\xcd\x52\x55\x77\xe0\x44\xbf\xee\x87\x0b\x56\xd3\x38\x89\x66\xe6\x77\xa3\x9c\x33\x62\x70\x12\x99\xe7\xfb\x61\x74\x99\x62\x2e\x7e\x95\x62\x69\xf5\xc8\x02\x0b\xd1\x36\xf9\x6d\xe6\xeb\xcc\xa4\xdb\xdd\x5f\x37\xb0\x12\xc0\x53\xa9\x6c\x36\x3c\xd2\x34\x7f\x9b\x2c\xce\xe5\x97\x14\x63\x5d\x75\x73\x22\x12\x86\x0d\xc7\xe0\xee\xb0\xf7\x07\x86\x43\x36\x5c\xde\x3b\x46\x27\x08\x4d\x63\xde\xff\xeb\xab\x17\xaf\x9f\x3f\xfd\xe1\xf5\x8b\xd3\x67\x6f\xdf\x7c\x7c\xf5\xe6\xe7\x17\x26\x7e\xa7\xae\xc2\x19\x3e\x3f\x47\x4c\x1e\x9b\x38\xca\x4d\x9b\x95\x04\x12\x94\x41\xca\x42\x72\xd8\x46\x92\x91\x44\x9a\xac\x50\xdc\x8a\x7e\xc1\x90\x64\x72\x54\xe9\xd4\x44\x30\x46\x09\xb6\xc1\x0b\x20\x4f\x0e\x8e\x40\x2f\x26\xab\x55\x14\x81\x9e\xf1\x82\xcb\x7b\x0c\x18\xc1\x50\xf3\x25\xed\x86\x4a\xe2\x91\x7d\xe0\x94\x8a\x1f\xe8\xf3\x32\xc3\x13\xcc\xb3\x2b\x49\xe4\xa1\x69\xa4\x54\xd1\x6a\x6b\x1f\xd8\x60\x17\x42\x9b\x72\x12\x0f\xb4\x8c\xa3\xc5\x66\xe8\x23\x29\x13\xf1\x28\xb0\x08\xac\x56\xd1\x93\x82\x7c\x22\xf4\x92\x7c\x1f\xed\x35\x58\x4c\x07\x97\x45\x30\x72\x99\xc7\xce\x77\x51\x8f\xf5\xa2\xef\xe4\xc4\xcc\xd1\xea\x9c\xa1\x49\x2a\x68\x8c\xa8\x87\x7a\x51\xbf\xf3\x92\xb2\xce\x82\x32\x41\xfd\x8a\xbd\x90\x77\x1a\xec\xe4\x08\x0d\x3b\x73\xce\x97\xc3\xc3\xc3\x06\xe5\x22\x4e\xcc\xe1\x94\x4e\xf2\x43\x49\xef\x4c\xaa\xcb\x50\x3e\x37\x1a\xb1\x4d\x05\x88\x27\x96\xb0\x14\xb0\xf7\x81\x52\xe2\xc3\xdf\xd3\x37\xcf\x5e\xbc\x86\x02\x99\x82\xa1\x16\xe8\x18\x2e\x54\x62\xd8\xc7\xa0\x2c\x05\x4e\x9f\xd9\x2b\x42\xdf\x34\xf5\x13\xdc\x2e\xd1\x9e\x21\x16\x78\x4f\xb7\x42\xfa\xab\x33\xf4\x5e\x3d\x1e\x3d\xf7\x72\x64\x39\xf3\x74\x2d\x8e\x6d\xa3\x68\x53\x1c\x2a\xeb\x74\xbb\xea\xa3\xa9\x07\x21\xfd\x24\x86\xf2\x4e\xdc\x2e\xf5\x53\x96\x12\x3c\xa8\xc7\xc6\xa1\x9f\x2f\x3d\x58\xca\x24\x79\x17\x01\x71\x1a\xe7\x88\x0c\x8b\x38\x12\x7f\x23\x00\xa5\xdd\x82\xf8\x96\x3f\x22\x00\xf5\xd3\xbb\x48\xd2\x3f\x23\x00\xed\x5a\x0f\x7d\x42\x54\x7b\x0d\x15\xe4\x8a\x12\x6c\x29\x94\xd5\xeb\xc1\xe6\x61\x88\x49\xf2\x18\x62\x69\xf6\xa4\x18\xa5\x86\xfa\x13\x80\xb1\xf3\xb8\x60\xac\x77\x5e\xbc\xf9\x4b\xff\xf9\x8b\x1f\x7e\xfe\xaf\xd3\x8f\x4f\x3f\xfc\xf9\x03\xe8\x76\x27\x94\xe4\x34\x43\xfd\x8c\x9e\x87\x1a\xc1\x8a\x7c\x61\x10\x4b\x84\x62\xc9\x52\x85\x94\xea\x67\xa3\xbe\xc2\x41\xdf\xd6\xa7\x0c\xe5\x45\x26\x83\x64\x69\x79\x44\x03\xa5\xba\x37\xbc\x42\xaa\xad\x31\xd4\xc0\xf0\x51\x5b\x1b\x72\x65\xc2\xd5\x91\xca\x12\xd5\x9b\x82\x0c\xbf\x44\x33\x74\xa5\x73\x2d\x57\xf8\x5e\x93\x54\x16\x90\x59\x61\x25\x3b\xcf\x74\x70\xc9\x3c\x76\x0b\x0b\x10\x31\x25\x14\xa5\xa4\x24\xa9\xf5\x4a\xfa\x00\x56\x82\x22\x5f\x23\xce\x3b\xbd\xb6\x92\x15\xf6\x35\x72\x92\xd1\xd8\x0a\x71\xeb\x79\x35\x21\x6f\xe3\x28\xad\x9b\x59\x09\x83\x19\x43\x5f\xaf\x60\xd3\xf1\x6f\x0c\xc9\x95\x21\x8b\x6b\xaa\x6d\xe4\x5a\x00\x84\x9e\xf0\xe3\x5e\x0f\x81\x96\x62\x23\x34\x8e\xb5\xd4\x38\xb0\x32\x52\xbd\xc3\x19\xe1\xc7\x39\xa3\x97\x3f\x93\xb9\x7c\x95\x91\x62\x48\x09\x51\xaf\x53\x2e\x46\x5c\xc2\xcd\xa5\xc2\xea\x27\x7b\x01\xda\x7e\xb5\x7a\xb4\xdf\x82\xa6\xcc\xd9\x65\x05\xa9\x64\xc7\x8e\x0a\x47\x3a\xf9\x74\x56\x30\x82\x98\x92\x97\x8a\x3b\x2c\x1f\x6d\xc8\xaf\x18\x48\x97\xd2\x42\x8d\x41\xe5\x31\xd2\xd8\xce\x8c\x42\x62\x73\x8d\x0c\x4d\x5e\x29\x16\x23\x0c\xd3\xee\x0a\x18\xed\xbe\xd0\x24\xb5\x96\xdf\xd1\x30\x48\x0a\x29\x6d\x54\x4b\x0c\xed\x29\x35\x75\x59\xe3\x51\xb0\x06\x32\x92\x4a\x79\x64\xeb\x97\xbe\x3a\xdb\xc0\x6b\xe7\x71\xb0\x1d\x4b\x1f\x87\x1b\xf2\x68\x01\xa0\x2e\x4d\x85\x07\x82\x70\x6f\xd8\x2e\x4f\x17\xc9\xa6\xee\xf9\x9f\xea\x39\x00\x49\xdd\xc5\x53\x9c\xff\x97\xd1\xa1\x7c\x4e\x09\x6a\x51\x6b\x3a\xb5\x8a\x96\x4a\x16\xac\x45\x4e\xcf\xdf\xbe\x79\x11\x25\x49\x82\x56\xab\xe8\xc5\xfb\xf7\x6f\xdf\xbf\x78\x2e\x3f\xc5\x91\x45\x79\xb1\x40\xb6\xed\xda\x8d\xc4\xd9\xd5\x75\x5a\xc9\xe3\x0d\x0d\x65\xfa\xe2\x46\xcb\x2a\x06\x23\x3e\x8e\x91\x39\x59\x76\x14\x32\x62\x6e\xc2\xd4\x75\x0a\x99\xf4\x0e\x7f\x12\x1a\x69\xa2\xc6\x38\x0c\xe7\xfd\xf8\xf4\xc3\xe9\x4f\x6f\xdf\xbf\x38\xfd\xcb\xd3\xd7\x3f\xbf\xf8\x10\x69\xa7\xf1\xc4\x60\xbf\x5a\x7f\x04\x86\x9b\x31\x53\xaf\x3c\xcc\xcb\x62\x4d\xce\xb3\xdb\x8d\x43\x0d\x1b\xfc\xe7\xa7\xf6\x5d\x4e\x36\x49\x12\xba\x5a\x99\x2b\xf5\x32\x65\x24\x8e\xfe\x4a\x8b\xce\xd2\x3c\xd8\x75\xd2\x4e\x3f\x93\x3d\xc5\xa0\x23\x2e\xd4\x8e\x76\x6a\xd7\xc1\x8b\x05\x9a\xe2\x94\xa3\xec\xaa\x23\x95\x48\x31\x39\x3f\x54\x1b\x88\xc9\x79\x07\xf3\x7e\xe7\xe3\x1c\xe7\x1d\x9c\x77\x14\x59\x28\x28\xe6\x82\xe4\xc5\x72\x49\x05\xc9\xd7\x89\xcf\x0a\xde\x59\xe0\xf3\x39\xef\x9c\xa1\x4e\x95\x8e\x49\x67\x56\x48\x3f\xd7\x17\x88\xe5\x52\x39\x77\xd6\x69\x90\x98\xa0\x6f\xa8\xc8\xc0\x82\x24\xfb\x47\x00\xa6\x4a\x3b\x4b\x40\xa3\xb3\xf5\x6d\x7c\x94\x11\x38\x98\x8b\xc8\x7c\x27\x06\xbf\x56\x3a\x7a\x31\x30\x6f\x98\x3a\x41\x62\xd6\xb0\x0e\x9f\xdb\xc5\x8c\x38\x4f\xe0\xd2\x3e\x1c\x7d\xe6\x9e\xde\xde\x69\x3a\xbd\x10\x27\x54\x19\x0d\xd6\xb4\xc4\x1c\x12\x4b\x1c\x06\xad\xa8\xdb\xeb\x39\xe9\x25\x74\x49\xe8\x00\xb9\xc6\x5c\x7c\xee\x76\xe6\xb6\xee\x50\x04\xaf\x29\x5d\x9e\x54\xa8\x59\xda\x8a\x39\xb3\x0b\xe0\xf9\x48\x79\x5c\xcc\x23\xc8\x20\xb3\x14\xbd\x92\x90\x81\x61\x8e\xf8\x47\xbc\x40\xb4\xe0\x01\x4a\xbc\x2a\x2e\x07\x5c\xc2\x23\x50\x42\x9d\x32\xac\x2b\x89\xb5\xdc\x3c\x81\x99\x21\x60\x0e\x82\xc7\x5e\x40\x26\xdf\xd3\x7c\xae\x77\xd3\x92\x35\xfa\xd3\x8c\x9f\x59\x2b\xf7\xea\xd3\x50\xff\x5e\xaf\x62\xad\xdc\xfe\x86\x82\xee\x4a\xec\xbc\x6c\x43\xdb\xb8\xa3\x1b\xea\xed\x05\xa8\x40\xa5\x8e\x43\x5b\x26\x6a\xb1\x72\x08\x59\x9d\x18\x0a\x41\xe9\x83\x48\x42\x69\xfa\x5e\x8e\x0f\x4d\x25\xda\x51\x13\x09\x15\x7b\x46\x09\xc7\xa4\x40\x55\x31\x31\xb8\x35\x4d\x0d\x7d\xa5\x3d\x7d\x4b\x9b\x1b\x39\x24\xb7\x18\x36\x72\xde\xbf\xf8\xf8\xf3\xfb\x37\x75\x5e\x92\xc1\x23\xef\x8e\x75\x6b\x7c\xfc\xf1\xfd\xdb\x5f\x9a\x15\x1e\xb5\x56\x50\x4c\xeb\x70\x13\x9f\x0f\xdb\xf9\x59\x7f\x8d\x87\xd1\x0f\x2f\x5e\x8a\x5b\xe5\xd9\xfb\x17\x4f\x3f\xbe\x88\x60\x0d\xb1\x5b\x0d\xbe\xd6\xc5\xad\x2d\x9c\x7e\x92\xdd\x23\x62\x53\x1b\x03\xb7\x3e\xcd\xd7\x0c\x9d\x24\xcd\x35\x6d\xf0\x17\xda\x6c\xd3\x41\x30\xfa\x30\xd5\xee\x72\xa9\x54\x02\x03\x07\x58\x86\xb5\xb6\xb7\xe1\xfe\x16\x10\x28\x2f\x01\x03\x78\x0d\x89\x41\xe8\x56\x84\x8f\x1c\xa8\x73\xab\x37\xe5\x56\x4a\x6a\x15\x6a\x64\x0f\x9f\x60\x5f\x49\xfe\x7d\x7a\x29\x73\xfc\x43\xfd\x0b\xe6\xf3\x0f\x58\x1c\x30\x35\x42\x6c\xf8\xf7\xd8\xcc\x7e\xfa\x5c\x13\x55\x31\xf6\x55\xdf\x01\xc4\x23\xde\x30\xda\x38\x31\x8b\x7b\x41\x3f\xa9\xd1\x8b\xcc\x18\x07\x55\xf2\xb1\xb4\x0d\x38\x89\x51\x82\xa1\x42\x6e\x62\x1f\xab\xdd\x81\xca\xe5\x81\x6f\x70\xd1\x37\x28\x86\xc0\xa0\x60\x10\xb9\xd6\xbe\x6b\x2a\xc8\x53\x24\x4a\x03\xb3\x2d\x6d\x6b\xb2\xb9\x40\x85\xc2\x6a\x79\x4d\x86\xd3\x0c\xc6\x9d\x66\xeb\x3c\xdc\xf5\xaf\x5f\xc2\x21\x13\x07\x57\xef\xa2\x9d\x3a\xe6\x27\xae\x1c\x28\x06\x92\x52\x1e\x22\x49\x2c\xfb\xfb\xe6\x0f\x9f\x5d\x99\x50\x5f\x81\x8d\x77\xd1\xbb\xba\xbb\xf7\x9a\x20\xc4\x40\x45\x80\x8a\xee\x5c\x8e\x21\x4c\x64\xd4\x9f\x44\xcc\x0c\x83\xc2\x48\x4d\xc8\x04\x03\xb5\x87\xa4\x95\x7b\xa2\x9b\x6e\x57\x9a\xf8\x8b\x71\x74\xbb\xac\x62\x9a\x49\xf3\x69\x0e\xeb\xa7\x39\xf2\xfd\xd1\x09\x51\x8e\x72\x68\x72\x74\x4c\x9f\x90\x63\xda\xeb\x01\x3c\xa2\xbe\xa3\x1c\x3a\xde\xb3\x6d\xdb\x27\xa6\x11\x93\x1e\x00\xd0\xd8\x68\xc0\xff\x46\x2a\xf8\x18\x08\xae\xab\x2c\xf7\xb2\xc0\x6e\x26\x4d\xfc\xac\xd4\xa5\xac\x5f\xa4\xc0\x03\x1b\x6d\xd3\xc9\x51\xcb\x49\x9b\x1a\x37\x4a\x86\x85\xec\xa1\x60\xe1\xa3\x40\x0d\x56\x7a\xb4\xb6\xbc\x3a\xd1\x54\x73\xd6\x46\x3a\xd5\xda\xba\x23\xc9\x2d\x41\xcd\x88\x83\x7a\xbc\xc9\x7e\x92\xe0\x40\xb2\x68\xbf\x09\x8f\x68\x2d\x30\xd2\x7a\xae\x86\x41\xd6\xed\xf2\xfd\x24\x11\x7f\xfa\x38\x7f\x8e\x72\xce\xe8\x95\x94\x57\x7a\x75\xed\xfb\x59\x04\x8c\x82\x65\xf4\x8f\xa8\xa7\x15\x14\x6b\xea\x10\xff\x88\x60\x2e\xb3\x69\x4b\xf6\x9e\xc7\x6e\x7d\xd7\xe0\x6c\x3a\x53\xc4\xd1\x84\x4b\xde\x6b\x49\x39\x22\x1c\x0b\xee\xaf\x33\x4f\x7f\x4d\xd9\x94\x16\x79\x27\xca\x51\x36\xd3\x52\xf5\x4e\x46\xe9\x32\xea\x9c\x21\x7e\x89\x10\xe9\x2c\x53\x41\x4a\x2a\x4e\xed\xbb\x5e\xda\x8b\x3a\x29\x99\x76\x26\x73\x9c\x4d\x55\x62\xd4\xcb\x7b\x51\xbf\xf3\x6a\xd6\xb9\xa2\x45\xe7\x32\x25\xbc\x91\xdb\xe1\x54\x70\x64\xf6\x3d\xe0\x72\x5e\x6b\x38\x92\x0d\xe3\xea\xc9\x00\x76\x96\x19\x12\xf4\xcf\x44\xc6\xe5\xea\xfc\xa3\x7a\xb8\xf9\x87\x68\xed\x1f\x96\x87\x74\x32\x36\x0f\xe2\x13\x42\x4b\x63\x60\xdb\x49\x67\x1c\xb1\x4d\xc3\xd0\xfd\x63\xae\x7a\x2d\x48\xa0\xdf\x08\x94\x25\xb5\x6f\x3a\xa5\x7e\xb7\x9f\x04\x35\x66\x32\x47\x97\x6b\xe6\xf2\x04\x5b\x7b\xb3\x3a\x71\x3f\x1c\xb5\x84\x89\x31\x0a\xd1\x1d\xa6\x52\xbd\x24\xbe\x96\xcf\xd7\x08\xce\xc8\x90\x43\x0d\xae\xf2\x1e\x2c\x21\x03\x95\x2d\xa5\xa3\x6e\x35\xd9\x42\xe1\xc4\x80\xe0\x2d\x18\xfc\x7e\xa9\xea\xd5\x8e\x8a\x5e\x4d\x33\xbe\xb0\x33\xfd\x2f\x57\x8b\xf9\x98\xe6\x9f\x6a\xca\x55\x5a\xcf\xe5\xd8\xc5\xaa\x8e\xa6\x50\xcd\x8f\xd2\xe0\x98\x55\x2e\x94\x58\xaf\x67\x1f\x48\x46\x6c\xbc\x47\xfa\x95\x2b\xc5\xc4\xfd\x58\xad\xf6\x8f\x20\x11\x98\x69\x86\xcf\x0b\x95\xbf\x3f\x30\xef\x05\x98\x74\x48\xb7\x1b\x93\xfe\x25\xc3\x5c\xe7\xb5\xbb\x6f\x24\xfd\x4f\xe8\x4a\x3a\x85\x2b\x41\xec\x9b\x99\xde\xbe\x12\x9b\xaf\x3f\x72\x7f\x57\xa8\x68\x50\x47\x4d\x48\x02\xd4\x98\xba\x4a\xbb\xdd\x28\x97\x3f\xea\x19\x56\x66\x73\x12\x32\xa9\xd1\x04\x5d\x19\xb2\xb7\x41\x41\x0b\x43\xd3\x9d\xf4\xf7\xa7\x22\xb4\x51\x96\x24\x89\x4d\xdf\x37\xbf\x2b\xb5\xb1\x13\x33\xb6\xa1\xed\x10\xce\xc3\xe6\x21\xa7\x95\x5e\x8b\xaf\x80\x22\x53\x14\x72\x53\x55\x3c\xe3\x8d\xb0\x4a\xfb\x3a\xc7\x3b\x0a\x7c\x91\x84\x5b\x01\xb0\x0e\x0e\x63\xe3\xbd\x86\xc9\x91\xbd\x91\x3f\xcc\x53\x26\xe8\x6a\x23\x62\xa8\xc6\xa8\x53\xdc\x31\x2a\x83\x43\x73\xb8\xd6\x6b\x28\xc6\x45\x72\x3d\xd3\xba\x37\x06\x0f\xea\x87\x25\x15\xee\xd1\xbc\x33\x09\x5c\x71\xf5\x54\x60\xcd\xe6\xa2\xe4\x61\xa3\x14\x4b\xe7\xae\xb3\x4b\x71\x7c\xf0\xe9\xe2\x33\x02\x1a\xa1\xf1\xde\x5e\x12\xc4\x3c\x81\x1e\x80\x3c\x41\x27\xa8\x4f\x45\xce\x2b\x22\xda\x90\xbd\x0a\xdc\x5f\x2d\xa0\x79\x97\x7c\x99\x0a\x80\xb9\x4a\x68\xdd\x2c\x58\xaf\xe8\x8c\x80\x32\x1e\x40\xdc\x3f\x9d\x64\x28\x25\xc5\xf2\x2d\xd1\x64\x0a\x68\x8a\x11\x8d\x7c\xff\x69\x96\x45\xf0\x9a\x69\xa7\x16\x7c\x8e\x3a\x3a\x82\x21\xe6\x9d\x0c\x5f\xa0\xbc\x43\x89\x7c\xf2\x9f\xaa\xa6\xd0\xb4\x43\x59\xa7\x20\x0c\x91\x29\x62\x68\x1a\xc9\xf7\x11\xb9\xb0\x61\x48\xd2\x32\xa2\x8c\x12\xf9\x7e\xd8\x6e\x57\xcb\x8d\x4b\x27\xae\x9d\xca\xd5\x5d\x3a\x55\x96\x62\x76\x1f\x93\x91\x25\xd2\x73\xf3\xf6\x62\xf2\x56\xab\xd1\x18\xc0\x5c\x7a\x22\x41\x25\x54\x7b\xdd\x7c\x5c\x90\x6a\x9b\x4d\xdd\x44\xa0\xdd\x06\x21\x07\xeb\x69\x8c\xf7\x57\x5a\x08\x32\xa2\x43\x89\xd6\xeb\x70\xc4\xde\x02\xf3\x48\xb1\x37\x26\x9d\x54\x92\x1e\xfd\xca\x06\x7b\x6e\x8d\x3b\xd5\x59\x95\xfb\xe0\x9d\x55\x1e\xd2\xcc\xab\x1d\x5e\xe9\xc3\xc0\x50\x2b\xc1\x20\x0c\x3b\xf6\x62\x54\x03\xd5\x4e\x66\xb5\x27\x18\x1b\x80\xc1\xf1\xd9\xa0\xc1\xcd\x23\x3a\x2c\x74\x9d\x52\x86\xcf\xb1\x2e\xa4\x3f\xea\x06\xa4\x15\x70\xdb\xb4\x4a\xbe\xca\x74\xb6\xfd\x86\x1e\x5d\x5c\xb1\xfa\x36\xa9\x6c\x51\x1e\x72\xd5\x92\xd7\x69\x24\x07\x4e\xd9\xd0\x5a\xe4\xee\x88\x28\x59\xd8\x43\x59\x2b\x38\x7b\xc8\x50\xa3\x48\xc1\x07\x85\xd4\x3d\x35\x2f\x04\xfd\xe2\x9e\xa8\xae\xb2\x90\xaf\x1d\x87\x93\x35\x47\x45\x1c\x13\x04\xc0\x10\x41\x6d\x72\x13\x5a\x91\x10\x00\x48\x0a\x14\x87\xe1\x40\x22\x35\x3f\xc9\x81\x47\xa5\x53\xc9\x2b\x2d\x8e\x80\x72\x65\x58\xc0\xe0\x01\x98\x0f\xd8\x8e\x3f\x10\x26\x05\x95\x81\xd3\x24\x49\xa4\xe0\x3b\x90\x91\xaf\xea\xd1\xd6\xb8\xbc\x8a\x0d\xa8\x29\xc1\xb1\xea\x41\x83\x02\x48\xcb\x12\x66\x09\xee\xbf\x7a\xf3\x97\xb7\x7f\x7e\x01\x27\x01\x1d\x67\x25\x65\x52\xc3\x0e\x5f\x28\x25\xcc\x3a\x98\x74\x8a\x93\x30\xf5\x26\x48\x1a\x4d\x90\x4e\xa0\xef\x76\xdb\xa5\x0d\xa5\x77\x49\x4d\x0b\x4a\xca\x75\x58\x8c\xb2\x71\x32\x81\x05\x00\x70\x99\xd4\xc8\x58\xad\xf3\x6e\x49\xb5\x85\x4f\x32\xe3\x59\xcc\x80\x6f\xf1\xc4\x5c\xd3\x26\xe3\xe6\x60\x94\x8e\x61\x91\x08\xda\x59\x5c\x7b\xa7\x0e\x81\xae\x05\xa6\xec\x34\xea\x9d\xf7\x7a\x7b\x7c\x54\x8c\x93\x8b\x58\x35\x0f\x51\xcc\x61\x2e\xc1\x1b\x16\xae\xc1\xca\x85\x79\xc3\x09\x6b\x14\x93\x4a\x61\x18\x81\x3d\x76\xd2\x7c\x64\x7a\x4b\x26\xc6\xf5\x85\xd6\x44\x1f\x55\xcf\x4e\x04\x72\x7b\x28\x14\xe5\x58\x85\xe8\x95\x5a\x82\x4a\x73\xbb\xda\x18\x00\x86\xa4\x72\xce\x40\x3c\x6d\xe4\xda\x7a\x2e\x7d\x43\x81\xd4\x33\x14\xc0\x35\x43\x81\xa5\x63\x28\x70\x9d\x23\xee\x99\x71\xdb\x97\x16\x31\x98\x0f\x82\x0c\xf9\x20\x4a\xe8\x97\x2a\x3f\x71\x9d\xe1\x6c\xd0\x34\xda\x3c\x83\x35\x8d\xaf\xeb\x6f\xbd\x1f\xe7\xa8\x23\xf8\x26\x3a\xeb\xf8\x0d\xc5\xc0\x3e\xf4\xa6\x9d\x7c\x89\x26\x82\x89\xd3\xfc\xb9\x61\xe9\x04\xeb\x3d\x45\x4b\x86\x26\xa9\x94\x56\x90\x69\xe7\x92\x92\xef\x36\x3d\xe7\xe6\xc1\xf7\xdc\x7e\xe7\x9d\x12\x21\xa8\xce\xae\xf4\x4d\xeb\x74\x46\x72\x8e\xd2\x29\xec\xa0\xfe\x79\xbf\xf3\x8f\xa8\xc7\x7b\xd1\x50\x96\x89\xfb\xfd\x3e\x30\x5e\x01\x62\x50\xf3\x3d\x16\x9b\x3b\xc2\x4f\xee\x45\xe0\x1f\x11\x80\x0b\xfd\xc8\x91\x4e\xa7\xaf\x71\xce\x11\x41\x0c\x6a\xd2\x55\x1a\xcf\x4b\xe5\x13\xc8\xa1\x75\xbe\x02\xf7\x8f\xd6\xd6\x52\x08\xe5\x85\x57\xd7\xa1\xca\x6a\xb5\xdf\xea\xd0\xe5\xa6\xb6\x25\x6e\xfd\x2e\x07\xa0\x84\xee\x7b\xae\x8f\x76\xaa\x81\x26\xb5\x6f\x41\x2e\xd5\x27\xe3\x79\x92\xab\xcd\xb3\x06\x5d\x46\x95\xf6\x6d\x6b\xd7\xf5\xd9\x26\xc1\xd4\x6a\x18\xf5\x9c\xc6\x60\x1a\xcb\xd7\x18\x92\x25\xff\xef\x92\xc7\x31\x9d\x24\x5c\xf7\x1a\xa0\x17\x1a\x34\xe4\x53\xd2\x04\x6b\x05\xc4\x86\x3c\x91\x44\xb7\xe0\xac\x73\xc4\x05\x0d\x8e\x79\x6e\x48\xf3\x0b\x9c\x76\xbe\xf3\xef\x84\xef\xfa\x9d\x0f\x08\xd9\x23\x86\x25\xd1\xae\xb4\x2b\x66\x94\x75\xa6\x88\xa7\x38\xcb\xfb\x91\x64\xab\x36\x20\xa0\x90\xa5\x92\x94\x7b\x9d\x27\x83\x2d\x04\x48\x9e\xbc\xe7\x2e\x1d\x25\xd4\x8d\x20\x32\x9c\xe6\x4e\x40\x61\x95\xfd\x93\x18\x87\x25\x5d\x5a\xad\x1b\xce\xb9\x6f\x6e\x36\x70\x8c\xc5\xc2\x45\x8d\x81\xa3\x2c\xf9\x6a\x9a\x85\x2c\x21\x2a\xeb\x35\xd3\x58\x40\xf9\x7f\xdf\x5e\x61\xae\xf0\xb8\xdb\xf5\xd2\x8d\x09\x5b\xd9\x6e\x76\xb1\x55\x67\x9d\x60\x67\x8e\x6d\x43\xa8\xd3\x93\x48\x19\x2b\x47\xc3\x08\x4f\x33\x14\x95\xa0\x46\x91\x6b\x66\x5b\x91\x65\xf2\x83\x48\x42\x5d\x59\xf1\x38\xef\x39\xd0\x01\x97\x21\xaf\x99\x0e\x67\x69\xce\x65\x9d\x8a\xb2\x72\x4d\xb2\x81\xe7\xdc\xa2\x59\xce\x6f\xa8\x72\x94\xd1\x2c\x59\xb9\x18\x00\x75\xff\x18\x81\xee\x2b\x65\x5d\xe0\x7b\xce\x68\x96\xb5\xe6\xc8\xc0\xf3\xa8\xd1\x2c\x68\x8c\x8d\x81\xef\x68\x23\xd0\xa2\xd1\xd1\x03\x75\x07\x1c\xcd\xb2\x8e\xfd\x31\xf0\x5d\x73\xf8\x65\x6b\xbe\x13\xaa\x3d\x18\x0e\xa0\x05\xec\xe1\x00\x56\x96\xc4\xc3\xc1\x5a\x0f\x1a\x68\xb5\xba\x2e\x21\x4b\x78\x5f\xc9\x11\xe4\x5b\x3f\x43\x39\xe2\x5a\x55\x2f\x61\xab\x95\x31\x8d\x78\x9a\xb5\x5a\x47\x08\x34\xc7\xe7\x48\x7a\xcf\x8c\x1a\x54\x76\x55\x9d\x01\x48\xac\xc2\xae\xed\x26\x06\xc6\x03\xce\x96\x7a\xfc\x1e\xfb\x69\xa8\x29\x4d\xfb\x9b\x67\xc9\xba\x0f\x27\x01\xfa\x15\x9f\xaa\xe0\xbe\x1a\x42\x43\x7d\x3f\x47\xc6\xc6\x1d\xa3\x5c\x79\x70\x59\xe7\xa7\xa5\xee\xc9\x25\xe4\xed\xe5\x7e\x7c\xb9\x48\xdb\xf4\xf5\xc8\xfe\x32\xc5\xfc\x60\x46\xd9\x2d\x58\xa6\x5a\x4a\x99\x55\xd2\x67\x57\xf0\xf2\x1e\xcd\x90\x68\xcc\xc8\x9c\xc5\xda\x76\xe6\x69\xae\x08\x48\x44\x3a\x98\x60\x8e\xd3\x0c\xe7\x68\xda\x39\xe8\x48\x51\x5d\x0c\xbc\x12\xda\xfe\xc6\xf0\x87\xfb\x7c\xb5\x32\x52\xbb\x7d\xc7\x9f\x7c\x25\xb6\xad\x52\x4f\xd0\x90\x97\x75\xb7\x45\xde\xfb\xbe\xdb\x82\x76\x0d\xcf\xc3\xd2\x72\x49\xa9\x0b\xc8\x67\x28\x97\xfa\x8a\x8b\x22\xe7\x1d\x84\xf9\x1c\x31\x41\x0b\x8b\xda\x1d\xca\x1c\xf1\x39\x94\x44\x40\xd4\x33\x3d\x00\xe5\xd8\x4b\xdd\xd5\x26\x6c\x83\xbe\xdf\xe4\x53\xb9\xc3\x49\x38\x72\xe6\xa1\xbe\x3f\x91\xc7\x30\x1e\xb9\x0c\x62\x9d\x79\x14\xa4\x02\xef\x76\xcd\xab\x93\x82\x65\xd5\xf4\xdb\xd9\x49\x30\x55\x69\x6e\xa1\xfe\xe9\xa9\x1c\xc5\xe9\x69\xc2\x41\xf9\xd5\x19\xc8\x0b\xc8\x7d\x49\x99\x44\x74\x81\x18\x22\x72\x14\xb9\xf4\xad\x6d\xcb\x4a\x2a\x33\x1c\xac\x46\x94\x2e\xb4\x3a\x9d\x2d\x6f\xd9\xc0\xba\x2e\xa2\x53\x29\xd3\x69\xa5\xb6\x44\xff\xe6\x5e\x8e\xea\x3c\x39\xf7\x3c\x91\xb2\x6e\x17\xc5\x2e\x38\x2a\xb4\x2d\x38\x7d\x02\x20\x2f\xcb\x18\xc0\xb4\x65\xd2\xae\x61\xbd\xd1\x67\x88\x11\x1c\x5d\x7f\x42\x57\x43\x65\x91\xa4\xed\x67\xeb\xf2\x5c\x7d\xbe\x63\x2d\xd8\xb5\x6a\x13\x1f\xa9\x76\xdc\xaa\x64\xe1\x40\x79\x3d\xb5\xd1\x91\x5c\x46\x7e\x0c\x20\x12\x83\xcb\x5b\x06\xc7\x9d\xd1\x19\xb7\xc2\xea\x3b\x76\x20\x7f\xb5\xd2\x0b\x78\x5e\x3b\x21\x00\x54\xf6\xe0\xc0\x71\x0a\x68\x0d\x18\x12\x0e\x49\x69\xbd\xca\x21\x98\x02\x58\x4d\xbe\xa1\x09\x52\x5f\x07\xa9\x0e\x12\x50\xb6\x95\xf7\x91\xed\xc3\xb7\x8c\xd8\xa0\xdd\xa1\x35\x30\xaa\x95\x29\xda\x56\x46\x6c\xbf\xbf\x36\xf4\x16\xd6\x86\x6a\x66\x25\xe1\x90\x56\x2c\x68\x42\x20\xfd\xc2\x65\xaa\x44\x48\x10\xbb\x53\x2a\x21\x4d\xf6\x8f\x5c\xe8\x24\xe0\x9a\x8a\x13\x83\x63\xed\x35\x72\xed\x7a\x81\x50\xac\x20\x83\xc0\xc5\x3e\x50\xfd\x90\x3f\x55\x32\x4d\x23\x18\x38\x89\xd7\xe5\xd6\x58\x70\x31\x61\x6f\xd4\xc4\x54\x64\x68\x41\x2f\x90\x5f\x97\x78\x15\x4b\xa3\x3f\xa8\x6b\x50\x82\x02\xad\x3b\x6d\xd3\xd5\xca\x36\x4f\x67\xb3\x46\x73\x15\x6c\x64\xeb\x60\x43\x41\xc4\x0d\x15\x22\x7e\xa0\x34\x43\x29\xd9\xf3\x01\x2c\xbd\x05\x00\x4b\x2b\x00\x4b\x05\x76\x4b\x08\x4c\xfb\x4b\x86\xa6\x78\x92\x72\x6b\x44\x15\x7a\x42\xa6\x27\x34\xf8\x00\x9c\x24\x09\x2d\x61\x7a\x47\xf0\xe9\x06\x37\x11\x94\xaa\xd9\x1a\x85\x9b\xe5\xc3\x15\x69\x8e\x3f\xc6\xc0\xba\xff\xde\x04\xc2\x18\xc0\xfd\x41\x29\x5f\xc0\x70\x6c\xab\xd5\xa0\xd3\x48\xa4\x14\xe8\xc8\x5b\x41\x3e\xa1\x7a\x90\x53\x83\x4a\x5b\x87\xb8\x15\x4a\x0b\x3f\x6b\x69\x4e\x13\x5f\x4c\xb1\x02\x07\xd2\x33\xfb\x06\x2d\x15\xe3\xb2\xf8\xb6\x3d\xa3\xa8\x21\x28\x5f\xc5\x09\x31\xee\x3c\x04\xf7\xf2\x5d\x35\xba\xef\x3a\x1c\x2d\x96\x59\xca\x51\x47\x8d\x43\xf2\x3d\x4a\x85\x73\x1a\xd5\x5c\x3f\x69\x15\xeb\xd1\xc0\xc8\x97\xf6\x89\x38\x74\x96\xed\x51\x0e\x66\x1a\x1e\x92\x81\x31\xe4\x52\xcb\xe1\x0a\x10\x47\xc4\xbe\xec\xb2\x72\xec\x2a\x02\x29\xd0\x51\xed\xf4\xd5\xd0\x62\xb2\xdd\xda\x5b\x49\xe3\x6d\x2c\xbc\x47\xf8\x33\x2f\x88\x5b\x68\xa2\xb6\xef\xea\x97\xa8\x76\x13\x1a\x50\x37\xa0\x37\x90\xc1\xf5\x6b\xc3\xb6\x5b\x9b\xba\xef\xf0\xbb\x89\x01\x18\x1a\x60\x83\x29\x87\x2c\x89\x79\x82\xa0\xaf\x69\xc3\xc1\x09\x1f\x3a\x3a\x32\x1c\x00\x48\x94\x2f\x6d\x1c\xf0\xa5\x4d\xf4\x1b\xa1\x7d\xef\xf8\xed\x34\x61\xa5\x33\xfc\xf6\x1d\x58\x13\x6d\x69\x7b\x27\x61\x95\xea\xdb\x97\xe8\xbb\x69\x7f\x65\xbb\x86\xd7\x58\xcf\x62\x7f\xa1\xcb\x32\x88\x21\x85\x29\xcc\xbf\x1c\x08\x67\x94\xa1\x0b\xc4\x92\x26\xa7\x53\xe3\x95\x6a\x6c\x16\xea\x73\x65\x95\x54\x45\xea\xd0\x71\x3b\x2a\x0f\x4f\xad\xc1\x3b\xb4\x7f\xcf\x80\xcb\xa7\x2c\x14\xeb\x41\x21\x8f\x97\xa4\x3f\xc5\xf9\x32\x4b\xa5\xec\x31\x41\xbd\xa8\x13\x4b\xef\x8a\x11\x64\xf2\xa9\xce\x7b\xd0\xd6\x55\xbc\xa7\xec\xda\x4b\x73\x4d\x85\x61\x8d\xfe\x42\x3c\x80\x79\xc3\x7f\x38\xd0\x7a\x3a\x10\x57\x6e\xc5\xea\x82\x54\x64\x1f\xc6\xd7\xbc\x8a\x37\x9f\xc4\x4b\x27\x5c\x99\x99\x49\x82\x60\x98\x45\xe7\x7a\xfa\x66\xe3\x2a\x0e\x4d\x70\x65\x7a\xa9\x95\x63\xb8\x2d\xd7\xdb\x99\xd0\xd7\xb8\xa6\x3b\xae\x0e\x6e\x7a\x7d\xf3\x97\x48\x5e\xf6\x85\x46\xc3\xa7\x39\xe2\xcf\xb2\x34\xcf\xf1\xe4\x39\x9a\x50\x6d\x17\xea\xe4\x69\x29\xa4\xcd\xac\xee\xbc\xac\x5a\x56\x9b\xc6\x63\x97\x85\xb6\x44\xb1\x1c\xa6\x7c\xf2\x55\x3f\x94\xfd\x53\x4d\xce\x89\x80\xff\xd0\xed\xf0\xb4\x66\xfa\x45\xcc\xc5\x0c\xd4\xd9\xa2\xe2\x7f\x3f\x1a\x0a\x75\x3e\x3c\xe7\x6b\xa4\xfa\x6d\xe2\x9d\x48\xff\xab\x73\x13\x23\x85\xca\x3f\xb0\x3a\xe6\xdc\xfc\xaa\x0b\x5c\x52\xef\xb3\x2e\x62\x49\xbd\xcf\x80\x40\x25\xad\xa7\x38\x48\x89\x9b\x5f\x6b\x6f\x6b\x23\x2c\xfc\x55\x5c\xd9\x8d\xec\x0d\x97\xc8\x1d\xdd\xe9\xd7\xf2\xc1\x24\xd0\x1d\xac\x46\xeb\xca\x3a\x36\x84\x34\xd1\x37\xdd\x56\x94\x88\x03\x7b\xbe\x8c\x8a\x77\x30\xe9\xa0\x16\x1d\x14\x51\x54\x4f\x85\xed\xa4\x83\x22\xee\x7b\x41\x6f\x95\x75\xa1\x2f\x37\xc6\xcd\x89\x7e\xe0\x56\x7e\x76\xf8\x4d\xa8\x3b\x9c\xbf\x50\xee\xec\x55\xdd\x90\x90\x0f\x75\xbb\x41\x0b\x2d\xc1\x0b\x07\xd5\x77\x91\x60\x7c\x57\xab\x60\x4e\x9d\x55\x6f\x69\x20\xc0\x98\x4b\xa1\xe1\x53\x73\x52\x25\x21\xda\x50\xdf\x6c\x08\x11\xb7\xb2\x80\x7a\x7c\x42\x0e\x1e\x2b\x0b\xa8\xc7\x9e\x05\xd4\xe3\x9a\x05\x94\x94\xb6\xf7\x2f\x71\x96\x19\x75\x51\xb5\x44\xcd\x8c\xbe\x51\xeb\x91\xdc\x63\x9e\xa3\xfc\xd4\xa8\x85\xb2\xfc\xf4\xd4\x06\x8e\x72\xeb\xc0\x3c\x19\x8d\xf7\xbc\xa4\x24\xf0\x1c\xaf\x08\x46\xeb\xeb\x84\x3f\x61\x92\x44\xcc\x47\x7c\x1c\x83\xbd\x34\x24\xa8\x83\xbb\x8c\x2d\xc9\xcb\x5d\x8a\x2b\xc7\x10\xee\x73\xce\x88\x55\x4e\x08\x31\x50\x71\xa4\x0c\xae\x6b\xde\x93\x1a\x05\x33\xe5\xc5\x68\x51\x8f\x1e\x55\xb5\xcc\xc0\xb5\xa1\xe8\x59\x41\xfa\x99\xf4\xbf\xc2\xa4\xd5\xe3\x5e\x65\xb4\xed\x45\x34\x0a\x1a\xd5\x6b\xe5\x34\x0e\x4a\xc8\xc4\xd0\x8c\x35\x69\x52\x48\x0c\x7d\xd9\x26\xe7\x2e\xb4\x9c\x9b\xa5\x97\x1f\x03\xb3\xb1\x01\x80\xaf\x4b\x48\xa1\x2b\xe9\xad\x49\x27\xc2\x66\xe7\xdc\x91\x33\xa4\x90\xf4\xb5\x7b\x24\xd1\x23\x08\x38\xdd\xbc\xc4\x64\x4a\x2f\xfb\x02\xfe\xd9\x2b\xc2\x11\xbb\x48\xb3\x18\xcb\xa7\x28\x88\x02\xb2\xdc\xc0\xc2\x07\xc2\x5c\xd9\xab\xdf\x04\x8d\xf2\x97\x13\x8d\xe8\x38\xbe\x0e\x18\xb8\xab\x9b\x38\x49\xd2\xd5\x8a\x25\x49\x7e\xc2\xad\x1f\x2d\x02\x86\xdc\xf8\x89\x21\xa0\x2c\xe1\x00\x40\xdb\x7c\x09\x99\xa3\x46\xa6\xab\x24\x0d\x33\x53\xd7\xb1\x97\xef\xa5\x0b\xc9\xe0\x2d\xae\x7e\x46\xe2\x19\xfe\xac\x56\x35\x36\x8c\x14\x59\x96\x24\x68\xfd\x1b\x0a\x25\x17\x88\xf1\x4e\x41\x14\x1e\x95\x6a\xdc\xf2\xb5\x89\x53\xad\x57\x12\x81\x3d\xf3\xa0\x14\xa3\xca\xbd\x39\x4f\x8e\x8e\xf9\x93\x3a\xa2\x91\xa7\xb3\x6e\xe0\x24\x58\x39\x3d\x9e\xfd\xa4\x52\x17\x24\xe2\x22\x61\x40\x4f\xa2\x5a\x1b\x3f\xdc\xb3\x12\xcc\x89\x45\xef\x76\x63\x34\x22\xe3\x84\x8d\xc8\xd8\xca\xff\x91\x58\x14\xa5\x55\x99\x44\xa7\xda\x0e\xf6\x54\x59\x47\x9c\x9e\x46\x4e\x3c\xbb\x91\xbe\x10\xcf\x33\xbc\x58\x20\x66\xb9\x73\xa5\xf6\x67\x2f\x75\x46\x0b\x8e\xc9\xf9\xc1\x9c\x2f\xb2\xb3\x94\xe5\x87\x9f\xd0\xd5\x25\x65\xd3\xfc\x70\xa2\x04\x0e\x07\xe1\x0a\xad\xe5\xc6\xda\x1d\xac\x89\x7c\x2c\xbd\xc2\x8a\xe5\x18\xe1\x31\x36\x3e\x1e\x4f\x4f\x33\x9a\x4e\xe5\x6e\x9f\xe3\x9c\xb3\x2b\x70\x6d\xa7\xd5\x28\x21\x63\xc2\xca\xfa\x40\x97\x51\x0e\x04\x4a\xe3\xba\xb8\x26\x44\x94\x7a\x97\x93\x53\x9b\x7a\x7a\x1a\x41\x81\x8e\x9b\x02\xbe\x24\x22\xe8\x33\x8f\x60\x9e\xc4\xa8\x6e\xa0\x99\x44\x12\x90\x22\x88\x1a\x06\xfb\x89\x89\x4b\x08\xf6\x50\xc3\x52\x33\xd1\xb2\x27\x51\xf1\xd4\xd0\xbd\x96\x6e\x53\x93\xab\x27\xef\x39\xc4\x5b\x0d\xc7\x80\x6b\xd7\x3b\x7a\x61\x0f\x8e\xbc\xe8\x13\x14\x22\x80\x96\x57\x87\xe2\xbf\x30\x09\xa7\x33\xc5\xba\xdc\x59\xc4\x36\xa7\x55\xa2\xde\x88\xed\x1b\x73\xa2\xc9\xf2\x24\x49\xd0\x49\x64\x8f\x61\x34\x64\x31\x02\x60\xb5\x52\x87\xd8\xfa\x6a\xe9\x20\x79\xfd\xd6\x25\x2c\x82\x03\x30\xd6\x1f\xca\xf6\x53\xd4\xb6\x52\x5d\x31\xc1\x98\x34\x50\x6b\x07\xc5\x5a\x04\xd0\x3e\x28\x52\x1b\x14\x71\x06\x45\x4c\x0f\x44\x87\x04\xd4\xd7\x5b\x61\xb4\x86\x55\x54\xb5\xb8\x48\x68\x5f\x4a\x62\xde\xce\x44\xfd\xef\x93\x01\xb0\x7e\x9d\x0b\x89\x1a\xfc\xf9\x10\x20\xc7\x93\x27\x44\x8b\x9e\x00\xc4\x12\x6b\x14\x15\x25\x70\x70\x50\x7c\x9f\x0c\x8e\x41\x3e\x2a\xc6\x09\x8a\xc5\x1f\x3d\x95\x12\x65\x39\xea\xe0\x59\xdc\x58\x12\x02\x80\x68\x53\xae\x86\x2a\xbb\x67\xca\x12\xf7\xdd\xf9\x79\xca\x91\x28\x89\x2e\xe5\xcf\x58\xfa\xa9\x17\xd7\x58\x0c\x54\x8d\xeb\x3c\xb9\x56\xfc\x9e\x8d\x23\x2a\x86\x27\xb5\xb3\xc9\x76\x08\x8d\xc0\x0c\x74\xbb\xd1\xe9\xa9\x58\xee\xcc\x09\xe0\x3e\x80\x8f\x04\xa6\xcb\x47\xd9\x38\xc1\x27\xe2\x98\x67\x66\x66\x43\xf1\x1b\x94\x58\x3a\xf4\x97\x94\x08\x91\x3e\x8a\xc4\x2f\xe7\xd9\x22\x2f\x05\x9c\x41\x72\x32\x1a\x6b\xad\x2b\xf3\x0b\x58\x07\xd3\xbf\x17\xab\xb7\xf6\xd3\x2e\x0f\xf4\x3d\x09\x5d\x7d\x6d\x42\xd1\x7b\x7b\xdc\xc4\xe5\x5a\xa9\xa4\x45\x55\x5b\xe0\xa7\x2f\x0f\x74\xd7\x5a\x41\x8d\xe1\xda\x67\xe0\xce\x51\xd0\x85\xb0\x59\x8b\x72\x5d\x83\xcf\xec\x8e\x6c\xd5\x28\x73\x1a\x6d\xac\xe1\x34\xe5\xe9\xe1\xc1\x92\xe1\x0b\xe9\x6e\xd3\x5d\xc6\xff\xeb\x94\xc8\x39\x65\xc8\x29\xd7\xcc\xb4\xab\x2c\x93\xb4\x6e\x79\xad\xe0\x82\x4e\x51\x16\x14\x9d\xd6\x16\x9f\x25\xac\xdb\x65\xb5\xb3\x1e\x47\x7a\x1e\x11\x38\xb1\x73\x1a\x32\x48\x12\x19\x0a\xb2\xbd\x30\xb1\x85\x09\xc4\x89\x0c\xa3\xd4\x5e\x18\xdb\xc2\x58\x3f\xae\x2b\xb0\x94\xea\xcf\xcb\x74\x82\x2c\x68\xfe\xe5\xc5\xfb\x0f\xaf\xde\xbe\x19\x12\xa5\x89\x19\x3d\xff\x10\x95\x40\xbb\xfb\xcd\xf0\x19\x4b\x19\x46\xb9\x71\x5d\x60\x13\x34\x51\x82\xd8\x33\xca\xd0\x6b\x99\x7a\x15\x47\xb2\x90\x40\x90\x69\x04\x69\x5f\xb7\x6c\x1e\x5f\x55\x0b\x22\xf3\xe9\x34\x5d\x72\xc4\xac\x3d\xea\x39\xe2\x2f\x71\xc6\x11\xcb\x9b\xfb\x3e\xd2\xf2\x0e\x9c\xbf\x41\x97\x11\x9c\xa2\x7c\x32\x8c\xc4\xcf\x12\xda\x1c\xad\x7c\x3c\x35\xd9\xf6\xdb\x29\xf3\x4c\x70\xca\xa6\x80\xfa\x28\xc7\x25\x54\xd7\x40\x10\x47\xed\x27\x6a\x91\xed\xe5\x59\xc2\x09\xcd\x8a\x05\x11\x6b\xf8\x91\x3e\x17\x2d\x05\xea\xa9\x69\x2a\x0b\xb3\xfe\x24\x5d\x62\x2e\x45\x32\xb1\x97\x2e\xee\x4f\x96\x4f\x28\x13\x34\x7c\x9f\xa1\x65\x96\x4e\x50\x7c\x78\x7a\x78\x0e\xa3\x4e\x04\xfa\x9c\xe1\x45\x0c\x6c\x8f\xf9\x4b\xca\xa4\xd9\x52\x93\x8b\xe1\x2a\x2c\x8f\x5d\x26\xbb\x08\xaf\xa6\x51\x39\x86\x24\x19\x68\xb7\x42\x7b\x0d\x07\xe2\x08\x46\x29\xe7\x0c\x9f\x15\x1c\xe5\x11\x08\x84\xe8\xd5\xe6\x3c\xa4\xd7\xfb\x1e\xf7\x6d\xd9\xd7\x78\x81\xb9\xbe\xae\xf7\x8f\xf4\xee\xf2\x7e\x7d\x71\x62\x6a\x63\x98\xaa\xc1\x51\x35\xb2\x54\x9e\x5f\x26\xa3\xb1\xbf\x47\x13\x41\x1f\xd7\x4c\x58\xf0\x2c\xae\x33\x11\x4f\x1e\x19\x16\x02\x69\x79\xf7\x33\x4a\x78\x8a\x09\x62\x7f\x46\x57\x7b\xd2\xe6\xc8\xc6\xd4\x5c\x48\xbf\x34\xea\x9c\x0e\xe3\xfe\xbf\x81\x43\xb0\xa7\x95\xed\x48\xb7\x1b\xf3\x84\x8c\x8e\xc6\x95\x56\x52\xa5\xc8\xac\x50\x00\xe8\x2f\x11\xfa\xf4\x34\x53\x3c\xb2\x1d\xe5\x33\x39\x3f\xc9\x2a\xe7\xed\x1b\x31\x80\x24\xb9\xc6\xd3\xa1\xb7\xcc\x78\x1a\x55\x92\x55\xd4\x47\xe9\x64\xfe\xd4\xac\x66\xb5\xdc\xca\x2f\x09\xeb\xf5\xbe\xe7\xad\x8b\x2d\x43\x47\xb8\x6d\x63\xb1\x98\xc4\x19\xe6\x9f\x35\xcf\x11\x8c\x5f\x67\xfd\x97\x3c\x8d\x47\x62\x54\x63\xb0\x71\x54\x4e\x04\x73\xe3\x18\x57\x6c\x5f\x13\x5a\x1c\x71\x60\x3d\x72\x2d\x82\x0c\x88\x5a\xdc\x19\xa7\x3a\xf1\x81\xe5\x54\x8d\x5c\xcb\x03\x3f\x44\x46\xc3\x5c\x1c\x79\x00\xab\xb3\x6e\x72\xe6\x69\xfe\x1c\x33\x7e\xf5\xd4\x81\xe4\x6e\x77\xbf\x51\x4f\x1e\xf9\xe1\xfe\x9a\x5a\xa5\xbf\xd7\x94\x05\x56\x30\x3a\xcb\xd2\xc9\xa7\xa8\x5a\x34\xb7\x97\x13\x9e\x44\xe7\x0c\x21\x12\xad\x1f\x5c\x2c\xdb\x29\x50\x24\x17\x44\x1b\x85\xa8\x7e\x83\x9e\x02\xcd\x8e\x01\x48\xfc\xdd\x83\x06\x2b\x86\x3a\x1a\x0b\xc6\x6b\xe3\x9e\x92\x6a\x4f\x1d\x8f\x6a\x7b\xa4\xb9\xbd\x56\x27\xc7\x15\xda\xc4\x58\x46\x58\x51\x83\x17\xfc\x45\xb9\xd7\xb0\x42\x92\x94\x27\x15\x20\x53\x97\x94\x69\x99\x94\xaf\xed\xa1\x4a\xbb\x2f\x31\xee\x9d\x10\x8c\x23\x6e\x76\x23\x96\xea\x45\x25\x68\xa7\x7a\xf4\xcd\xf3\x8e\x2e\x95\xf3\x0f\x35\x70\xc9\x62\x6c\x4d\xdb\xac\x69\x63\x2d\xbd\x23\xa5\x2c\xf9\xd6\xdd\xa8\xe2\x6b\x5b\x94\x82\x2f\x92\x66\x3f\x49\x82\x64\xdb\x86\xbd\x5a\x6b\xdb\xff\x29\x25\x57\xbb\xad\x8d\xad\xb1\xb6\x5d\x2d\x93\xdb\xad\x69\xb7\xd2\x36\xad\xef\x3e\xf8\x7a\xc5\x6d\x7a\x51\xf9\xbb\x76\xa1\x6a\xad\x6d\xff\x26\x90\xb9\x2d\x24\x3a\xe5\x7e\x4a\x49\x7a\x8e\xd8\x4d\xba\xd0\x55\xb7\xe8\x49\x11\x84\x3b\xf5\x20\xaa\x6c\x68\x59\x85\x7e\xc8\xe7\x78\xb9\x43\xdb\x55\xa5\xf5\xad\x53\xca\xb5\xeb\xfe\x6d\x9b\x36\x35\xd6\xb6\xfb\x81\xa4\xcb\x7c\x4e\xb7\x07\x18\x53\x61\xab\x56\x6f\x02\x33\x81\xba\x6b\xfb\x9a\x50\xc4\x26\xe8\xd5\x74\xeb\x0e\x4c\x85\xb5\xad\x12\xca\x16\x92\x4c\x96\x48\x49\x5a\x80\x6d\xdb\x7e\xb3\xea\xda\x9e\x98\x05\xaf\x97\x74\x7b\xb0\xf7\x6a\x6d\x68\xbf\x02\x31\x09\x0f\xbb\x75\xd3\xac\xbc\x75\x6f\xf9\x4d\x7b\xca\x75\x2f\xa8\xff\x41\xd0\xbf\xf2\x65\xf1\xf9\x87\x84\x8a\x3f\x82\xd2\xd6\x17\x5e\x92\xaa\xe7\x52\xa5\x4e\x12\xf0\x56\xa0\xae\xf3\x97\x2f\x9e\x7e\xfc\xf9\xfd\x8b\x0f\x55\xd1\x56\x5d\x83\xf6\x79\xb5\x48\x27\xc2\x7c\x7f\xaa\xc6\xd7\xce\xf6\x9b\x02\xb7\x2b\xcb\x6d\xad\x60\xb8\xf0\xdd\x85\x25\x6b\xe7\x97\x1f\x22\x4d\x41\x6c\x98\xa7\x2a\x77\x5f\xb3\x7d\x7a\x46\x19\xd7\x31\x46\xb6\xa5\xa0\x6c\x95\xb5\xc0\xad\xe1\x6e\xc7\xb6\x9d\x4a\x1b\xc4\x4f\x64\x96\xe1\xc9\x8e\x43\xf7\x6a\xad\x6d\xff\x25\x65\x67\x78\x3a\x45\x64\xb7\x0e\xfc\x6a\x1b\xc8\xbf\x8b\x34\xc3\xd3\xdd\xda\x77\x2b\xad\x6d\xfd\x0d\xe5\x2f\x69\x41\x76\x6c\xde\xab\xb5\xfe\xd2\x92\xe4\xfe\x6e\xad\x3b\x75\xd6\xb6\xad\xdf\x97\x77\x6b\xdc\xad\xb4\xb6\xf5\x9f\x49\x5a\xf0\x39\x65\xf8\x57\xb4\xe3\xea\x34\x6a\xae\xed\x47\x1d\x77\x79\x25\x7f\xa4\x3f\xa6\xf9\x7c\xeb\x7e\x1a\x35\xb7\xe8\x47\x14\xfb\x48\x77\x23\x1e\x1a\x35\x37\xe3\xb0\x7f\xe6\x94\x1c\xa4\x4b\xbc\x19\x8b\xd9\x92\xdf\x3a\xda\x66\x28\xe7\x9b\xa7\x2b\x4b\x7d\xab\x53\xe5\x7c\xcd\xf5\x1b\x92\x97\x7f\x35\x53\x13\x43\x6f\x9d\x57\xe0\x55\x66\xc3\x8b\x81\xf3\xb6\xa0\x52\x31\x99\x65\x68\xc2\x1d\xcd\x6c\x55\x15\xf1\x62\x79\x30\x31\x32\x4c\x3f\xb3\x52\xe4\x3b\x90\x5d\x1c\xe4\x88\x5d\xe0\x49\xe3\xc1\x02\x31\xad\x9c\x78\xc8\x59\x4a\x72\x6d\xf0\xd0\x52\xa4\xe5\xd5\xc3\x12\x4f\xeb\xcf\xe0\x1a\x98\x5d\x47\x83\xb4\x8d\xa6\x7d\x98\x2d\x3d\xd6\x4a\xb4\xe7\x06\x86\xd4\xfe\x5e\xa3\x54\xdd\xa1\x76\xfc\x09\xe7\x70\x0a\x97\x70\x01\x2f\x6a\xd0\x89\x67\xf1\x17\xbc\x07\x6a\xba\x57\x51\xc7\xfa\x4d\xc4\x88\xa8\xff\x7e\xf4\xb7\x7e\x3c\x1a\x1c\xfc\xe7\x78\x75\x34\x1a\x1c\x3c\x1a\x83\xbf\xf5\x0f\x5d\x13\x67\x1d\xaf\x4e\x29\xe8\x54\xcf\x2b\x1d\xad\xf1\x91\x77\x52\xde\xc9\x50\x9a\x73\x55\xb2\x73\xd4\x3f\x7a\xdc\x1f\xc0\xce\x59\xc1\xa5\x17\xe4\x79\x7a\x81\x3a\x51\xcf\xeb\xbc\x17\x59\xb7\x48\xc5\xf2\x9c\xa5\x53\x24\x8a\x32\x37\x30\x8e\x2c\x0f\x3b\x7c\x8e\x88\x2d\x53\xf5\x2e\x1d\x15\xf6\x9f\x7f\xd0\xfc\x42\xe5\xff\x4e\x26\xba\x82\x9a\x84\x79\x9f\x5e\x01\xad\x70\xc9\xfc\x6f\xaf\x88\x15\xc5\x54\xa5\x6c\x92\x2a\x28\x99\xbe\xe4\xc2\x1f\x81\xe5\xc5\x13\x56\xfd\x56\x59\xe2\xb8\x27\x17\xf2\x8f\x4a\x50\x62\xb6\x44\xaf\x71\xae\x12\x3d\x11\x59\xc2\xfc\x6f\x55\xc4\xf0\xcd\x09\xb3\x3f\x55\x86\xe1\x96\x0a\x7f\x4c\x2e\x5d\x9a\xcc\xfc\x3c\x97\x26\x4b\x66\xde\xa7\x2a\xe0\x92\x26\xc9\xcc\xfb\xd4\xad\x5b\x8a\x3a\x99\x39\x1f\x2a\xb3\x41\x75\x24\xb3\x66\x9a\x2a\xea\x53\x9f\xc9\xac\x96\xa0\x0a\x79\x34\x5e\x32\xf3\xbf\x55\x11\x8f\x4c\x4e\x66\xfe\xb7\x5e\xc0\x8a\x96\x4b\x66\xee\x97\xca\x6e\x90\x16\xc9\xac\x99\xe6\x16\x75\xa8\x1d\x5b\xd4\x49\xb3\x9d\x6a\x44\x91\xcc\xfd\x3d\xf0\x38\x5d\xe6\x7d\x6a\xa0\xaa\x04\x24\x02\xac\xaa\x2f\x6f\x7f\x43\x52\xe1\x84\xad\xcb\xd5\x70\xec\x40\x7a\x0d\xc4\x9b\x22\x37\xbf\x7f\x9d\xa8\x0b\xbf\xf8\xf0\xd1\xcc\x62\xe2\xcf\xf0\x87\x02\x67\xd3\x9f\xdf\xbf\x96\x9a\x09\x49\xe1\x7f\xef\xd9\xda\xce\x12\x2d\xfc\x06\xfe\xfb\xc3\xdb\x37\x4e\xee\xb2\x99\xfb\xf4\xdd\x2b\xd3\x79\x16\xcc\x75\xaa\x4f\xfd\x02\x1f\xcd\x0d\x96\xa4\xb5\x8d\x49\x39\xaa\x32\x73\xff\x5b\xef\xaa\x7c\x54\x75\x0b\xd5\x52\x34\xdc\x16\x02\x83\xb9\xc5\x6a\x29\x7a\x9d\x94\xf1\xb0\x5b\xae\x9e\xa4\x51\xc7\xe2\x0c\x4d\xa7\x66\x33\x73\xb5\xae\x8b\x60\xb2\xaa\x70\x86\x32\x4a\xce\xf3\x8f\x34\xb9\xa8\x7e\xab\xac\x79\x9a\x8b\x6d\x4f\x2e\xcc\x2f\xb3\xf7\x95\x98\x46\xee\x7a\xf5\xa9\x0a\x9c\x4a\x42\xc2\xbe\x85\x26\xd8\x5f\xbc\xd3\x8a\x94\x90\xb8\xfa\x83\x22\x24\x2a\xc7\xc0\x2d\x84\x94\xa8\xbc\x95\x54\xae\xd2\xd8\x3f\xaa\x69\xf3\x9b\xb0\xe5\x41\x09\x9d\xf1\x12\x26\xfa\x71\x1c\x71\x9d\xb7\x91\x61\x6d\xf4\xd0\x5d\xeb\xf2\xb8\x6d\xc6\xa8\x9f\x51\xfa\xa9\x58\x9e\xa0\xa1\x54\x51\x52\x4b\x0e\x74\x6a\x1c\xe9\x51\x0d\xf5\x2b\x72\x53\x11\xc9\xa1\x46\xbe\x4d\x62\x79\x13\x1f\xe0\x49\x15\xbf\x92\x39\xda\x83\xb6\xf5\x2c\x6d\x8d\xb5\x5c\xb3\x3e\xa7\x5b\xb7\xaa\xcb\xb7\xae\x9d\x4b\x1c\xb7\x32\x1c\x55\x99\x6f\x14\x42\xaa\x19\x28\x83\x2a\x81\x28\x0f\x94\x74\x3d\x6f\x7a\x02\x5c\x4f\xe5\x7f\xa5\x4b\x10\xc2\xff\x5b\xad\xc7\x66\xd1\x48\x88\x4f\xfa\x4a\x57\x61\x17\x40\x50\x1c\xdd\x96\x93\xfe\x3d\x4c\x78\xbd\x44\xe8\x1b\x81\xf3\xcd\x13\xae\x89\x38\x9a\xca\xad\x75\x91\x49\x48\xb8\x72\x7f\x72\x82\x9b\x0b\x3d\x42\x62\x96\x75\xf2\x86\xbb\x21\x50\xb2\x04\xc1\xcc\x2a\x66\xc6\x91\x18\xda\x81\x1e\xf5\x70\x91\x0a\xd4\xca\x3d\xc6\x06\x78\x34\x13\x72\xaa\x5a\x79\xd2\xf0\x4c\x91\xbe\x11\x2c\x1a\x54\xb0\x18\x47\xa8\xca\x54\x6e\x66\xe1\x53\xea\x6d\x85\x89\x24\xc1\x45\xf1\x1a\x31\xde\x56\x41\xe9\xc4\x8b\x0a\x35\x22\x1f\x94\x31\xf2\x67\xa4\x7d\x4e\xf6\xb1\x8c\x97\xb1\x5a\x99\x5f\x98\x92\x3d\xae\x74\xee\xe5\x8b\x36\xe1\x8c\x66\x99\x94\x4a\x19\xa8\xab\xd1\x72\xb0\x2a\xce\x68\x21\x61\x75\x73\x49\x77\xfd\xdb\x2b\xb4\x8e\xda\x4c\xfe\xed\x52\x92\x54\x5a\x05\x54\xcc\x82\x7a\x29\xce\x54\x5c\x1a\xe2\x3a\xc7\xe4\x3c\x43\x9c\x92\xe1\xfe\x51\xe9\x8e\xcb\x0e\xa9\x5e\xc4\x5d\xf0\xaa\xa9\xe1\x81\xc5\x0c\x96\xbb\x68\x2f\xab\x4e\x07\x0d\x17\x34\xc0\xa8\x4b\xe5\x1b\x4a\x55\x07\x31\xdd\xdc\x71\x55\x98\x54\x85\x0b\x71\x24\x92\xda\x92\xc3\xb8\x10\xd4\xd8\x89\xfc\x3f\xce\xc0\x50\xfe\x78\xaf\xac\xac\x24\xfd\x1a\x67\x00\x88\x85\xf6\x7a\x72\x5b\xb0\x8a\xdb\x8a\x91\x29\x60\x26\xb6\x51\x99\x7f\xb4\xd0\xfd\xba\xe6\x7a\x59\xf2\x37\x8a\xea\x1d\xf1\xf3\x16\x97\x5a\x55\xfa\x1b\x9d\xae\x35\x0b\xb8\x6b\xf6\x53\x1b\x12\x55\x09\xd1\xe3\xfe\xd1\xa3\xfe\x20\x6a\x8e\x0b\xa1\xe5\x41\x8e\x78\xf3\xc9\x62\x4b\x7b\x7e\x1b\x02\xa5\x0a\x50\xa4\x84\xc6\xd6\x1f\xda\x6a\x15\x59\x9f\x36\xcd\xdc\x9b\xd8\xde\x07\x6c\xe1\x5c\x9f\x16\xd6\x64\xf9\x15\x91\xb7\x56\xec\x19\xfc\x41\xd6\xcf\x97\x19\xe6\x71\xd4\x8f\x40\x9f\xa1\x69\x31\x71\x35\x5c\x21\x53\xd1\x28\x5c\xdb\x83\x73\xc4\x7f\xc1\x7c\xfe\x5c\x75\x2b\xcb\x88\x86\xf2\x84\x8e\x70\xef\x68\xdc\xed\xf2\x38\x05\x27\xe9\xd0\x7c\xee\xcb\xef\xeb\x72\x48\xf6\x3c\x37\x1b\x49\x92\xe4\x27\x71\xdd\x88\x2b\x66\xc0\xb5\xf9\xdf\xaf\x8c\xf9\x73\xc4\x7f\x26\x9f\x08\xad\xca\x9e\xc4\x68\xc4\xc6\x49\x0e\x83\xc6\xff\x84\x72\x3c\xbb\x32\x65\x9f\xc9\xe8\x83\xdd\x6e\x38\x3d\x66\x00\x0c\x43\x5d\xc4\x0c\xe6\x00\xe6\xc0\x09\x15\x2d\x26\x2c\xad\xe1\x01\x24\x4d\x2c\x85\x32\xb4\x40\x84\x6b\x3f\x43\xd6\x16\xd6\xa4\xdf\xad\x87\xf6\xe6\x31\x6c\x98\x04\x34\x5c\x48\xb9\xe6\x8f\x35\x8b\xb4\x0e\x26\x1d\x6b\x9f\x0c\x82\x2d\x2a\xdd\xea\xd1\x18\x12\xe9\xad\x31\xd9\x3f\x82\xd4\x1c\x38\xce\xae\xac\xbb\x81\x14\xe6\x09\x1a\xd5\xda\x1f\xc7\xe0\x78\x3f\x26\x49\x9c\x26\x79\x9f\xa0\xcf\x3c\x06\xa0\x3f\xa5\x04\x81\x6e\x37\xd6\x8a\xce\xa9\x8e\x74\x0a\xf7\xf9\x6a\x65\x22\xa0\x48\x7f\xbf\xc7\xa2\x4b\x70\xac\xe3\xe7\x16\xe0\x1a\xcb\x90\xab\x49\x51\xca\x68\xd2\xd9\x95\x8c\xcf\xbb\x4f\xba\xdd\xbc\xaf\xc6\x5e\xfd\x8a\x81\x2d\x84\x67\x31\xd6\x4f\x45\xd4\x1a\x33\xb0\x52\x4e\x6f\x2f\x68\xe1\xad\x5f\x16\x3a\x29\xe7\x68\xb1\x94\xe1\x2c\xa5\x2b\x83\x62\x22\x43\x69\x10\x4a\x0e\xe4\x0c\xcf\xb2\xca\xe9\x6e\x04\xca\xd2\x0d\xfb\xc7\xc4\xe9\x6b\x71\x31\x66\x0c\x7a\xea\xa1\xd1\x36\xc7\x45\x93\x25\x78\x7a\x2e\x1d\x30\x31\x13\x5d\x67\xb1\xa4\xc4\xf8\xf0\x64\x25\xd4\xfe\x6b\x1a\x7a\xf9\x2c\x11\xb0\x7d\x04\x46\x03\x69\x39\xca\x4c\x38\x79\xdd\x9e\xe7\x93\xd0\x6b\x54\x94\x8e\x34\x41\x69\xcf\xab\x35\x24\x91\x3e\xfa\xcc\x18\x3b\xcb\x34\xcf\xd1\x54\x2c\x99\x48\xfe\x87\x3e\x15\xff\x30\xee\xfa\xa4\x77\xe6\x33\xd4\x49\x3b\xba\x3d\x09\x44\xa4\x97\x44\x9d\xf8\x8a\x16\xa6\xfa\x3f\xa2\x1e\xeb\x45\xff\x00\x91\xde\x7c\x0c\xae\xcb\x7a\xc8\x07\x02\x3c\xcb\x94\x6a\x55\xa2\x83\xe9\x15\x49\x17\x78\x62\xcf\xa4\x99\xa9\x37\xab\x93\xc0\xea\x35\xaa\x1e\xa4\x19\x8f\x86\xdb\x94\x8c\x42\xf7\xe0\x39\xe2\x07\x4a\xde\x1b\x7a\x24\x9f\x50\x92\x17\xd9\x41\x81\x0f\x75\x19\x44\x2e\x30\xa3\x44\x36\xf7\xed\x5d\xfa\x73\x86\x66\x07\x9c\x5a\x94\xa8\xbf\xbf\xe0\x96\xed\xd4\xfc\x32\x6c\x72\x8f\x27\x80\x63\x77\x17\x79\xa5\xbc\xb5\x6b\x5d\xad\xc3\x94\xab\x55\x34\xd2\x91\x43\xac\xa3\x99\xb1\x00\xb2\x86\xfd\xb2\x89\xa1\xa6\x99\x0a\x8b\x63\x6b\xee\xf8\xbc\xfe\xdd\xe0\x26\xeb\x91\x52\xbe\x64\x28\x9d\xb6\xe2\xa3\x18\xf8\x2e\x81\xec\x89\xad\x05\x50\x44\x4d\xd9\xbc\x71\xcd\x10\x39\x9e\x0b\x75\xb8\x7d\xf4\xf3\xfb\xd7\xd6\x7d\x21\x0f\xfb\x49\x44\x09\x32\xf6\xe7\xa0\x9f\xcf\xf1\x8c\x4b\xab\x1c\x34\x32\x5b\x71\x70\x34\xde\xe3\xca\x92\x53\x46\xc5\x60\x57\xef\x52\x96\x2e\xf2\x13\xd4\x5f\xd2\x65\x0c\xd4\x9d\x90\x57\x21\x7b\x47\x32\x4a\xcf\xb8\x14\xf7\xf8\x8d\x88\x28\x01\x8c\x1f\xa9\xe7\x97\x52\xdf\x62\xee\x9a\xd4\x10\x74\x13\x93\x3a\x6e\xca\x79\x7f\xa9\xc6\xac\xdd\xe5\x9a\x6f\x30\x64\xd6\xd5\x76\x09\x1c\xaa\x94\xb4\x9f\x98\x1b\x9f\x94\xaf\xd7\x97\xf9\x97\xd3\xf3\x6a\x4e\xce\xb9\x70\xbc\x2f\x38\xfe\x72\x6e\xe8\xfc\x98\xf5\x79\xca\xce\x11\x3f\x8e\x1b\x24\xd4\x2d\x3a\xd3\x07\x06\x14\xd4\x5d\x2d\xce\x0d\x56\xe1\x84\x4c\x30\x40\x1d\xe5\x48\xb9\x7f\x36\x77\xba\x1a\x9a\x76\x83\x8b\x13\x27\xad\x32\x79\xcc\x25\x4c\xab\xb0\xa6\x05\xcb\x94\x15\xae\x5c\x4f\xe9\xcd\x44\x4a\xd2\xaa\xe0\x7d\x08\xc6\x24\xd1\xee\xde\x17\xe9\xd5\x19\xfa\x51\x06\x8f\x0b\x78\x7d\x57\x71\x36\xe6\xb4\xc8\xa6\xaa\x4c\x0c\xb4\x57\x9d\xb9\xfe\x2c\x4b\xa8\x1a\x72\x4b\x05\x5a\x72\xaf\x67\x9c\xff\x4c\xb4\x5b\xcd\xe9\x6b\x34\xe3\xcf\x32\x3c\xf9\x64\x5b\xc6\xf9\x1b\xca\x5f\x9d\x13\xca\xd0\xd4\xe9\x2e\x7f\x43\x3f\xca\x59\xff\x90\xa5\xe4\x93\x9f\xf1\x54\xf6\xa2\x0e\xac\x9f\xf3\x9c\x5e\x92\x8c\xa6\x53\xbf\xf5\xd7\x98\x7c\x7a\x66\xae\x70\x9b\xc5\xd0\x84\x9e\x13\xfc\x2b\xfa\x99\x65\xce\xc4\xe6\x6b\x17\xe7\xf4\x1c\xf1\xf7\xb4\xe0\xa2\xe3\xbe\x64\xd3\xb1\xc8\xfe\x48\x63\x63\x23\xfb\x33\xcb\x7e\x51\x11\xdc\xde\x53\x2a\xa8\x5e\x67\x8f\xfb\x4b\x26\xff\x1a\xfe\xaa\xea\x35\xb8\x46\x6d\x7e\xf9\x9d\x70\x63\xc6\xbd\x71\x6c\xc1\x1e\xf5\x2f\xe7\x78\x32\xef\x76\x8f\xaa\x8f\xd5\x0a\xf5\x27\x9c\x65\x7f\x46\x57\xe2\xe7\x02\xf1\xf4\xcf\xe8\xca\x9d\xb3\xbf\xdc\xeb\x3b\x6e\x42\xa3\x4a\x31\x63\x41\xab\x55\x74\x7a\x26\xdb\x91\x43\x50\x80\x59\xcd\xb4\xda\xef\x56\xc0\xd9\x0f\x77\x34\x52\x12\x43\x8d\x33\x0f\xb0\x6c\x25\x1a\xfb\xf3\x70\xa1\xe3\x86\x1d\x28\x14\x6d\x5c\x11\xf9\xcd\x1b\x10\xdb\xb5\xe9\xfe\x54\x57\xf4\x57\xc2\x83\xcd\xd6\x75\xdf\x3f\x82\xdc\x5b\x7c\x3c\x15\x94\xb9\x65\xd2\xda\x30\x8c\xbd\xdd\x0f\x2e\x30\xba\x3c\x30\x7e\x92\x94\xac\x1b\x08\x52\x08\x49\x0f\x0c\x2e\xce\x53\xd7\xa1\x37\xae\xd2\xec\xac\x1d\xbb\x7b\x78\xd6\x43\x4b\xc1\x32\xc8\x93\xfd\x23\x31\x5e\xe4\x8d\xd7\x3d\x4b\x90\xb8\x69\x94\xcb\x33\x09\x71\x22\x5d\xfc\x38\x7e\x70\x4c\x50\xd5\xc0\x41\x83\x69\xc2\xfa\xa7\x52\xf8\x6c\xff\xfe\x84\x27\x8c\x66\xf8\x4c\xb0\x97\x26\x4b\xfd\xd9\xe3\x02\x6b\xa6\x15\x16\x60\xd5\xcf\x98\x56\xfc\x85\x9d\x71\xa3\xc7\x6d\xa6\xdd\x9c\x53\x65\x18\xad\xbc\xd7\xc4\xdc\xd2\x45\xd5\x79\xac\x56\x66\x03\x6a\x5d\xb7\xe5\x86\xa0\x53\xf3\x8d\xea\xad\xcb\xf1\xac\x9f\x83\x87\xec\xa4\xb9\x36\x13\xd5\xde\xbf\xb6\xb4\x61\x74\xa8\x8e\xf8\x64\x9e\xb2\xa7\x3c\xae\x68\x3c\xe9\x77\xac\x97\x44\x87\x11\x80\xa8\x2c\xc7\x02\xe9\xc6\xcc\x0d\x8c\x07\x20\x96\x69\x10\x2b\x67\xf5\x0e\xb5\xc4\x1a\xee\xa9\xad\x8e\x70\xbb\x1b\x98\xaa\x48\x86\xcf\x0e\xf3\xab\x9c\xa3\x45\x4b\x26\xfa\xcc\x0f\x35\x0f\x7a\x47\xce\xab\xde\x17\x19\xca\x05\x25\x8c\xc9\x79\x91\xa5\x0c\xff\x2a\xe8\xe2\x65\x56\x30\x29\xe1\x35\x1a\xaf\xbc\xff\xca\x0c\xcc\xaf\xc9\xbd\xcf\x16\x92\x4b\xa9\xa0\x46\xaf\x2a\xfd\xe9\xeb\x30\xeb\xa6\x4e\xb4\x0d\x19\xaa\xd5\x64\xab\xbe\xfd\x80\xa2\x56\xf5\xb5\x8a\x29\x36\xec\xe0\x85\x58\xed\x4e\x55\x45\x06\xe7\xfe\xae\xb6\xba\xdf\x1d\x47\x70\xff\x08\x5e\xe3\xe9\xb0\xbe\xf0\xfd\xf3\x8c\x9e\xa5\x59\x1e\xc1\x82\x70\x9c\x0d\xa3\xc7\xfd\x81\x12\xd3\x3a\x8b\x20\x40\xb4\x1e\x38\xa9\x8d\xe0\x74\xbd\x85\xc0\xc8\x59\xe8\x5d\x97\x41\xb3\x69\x4e\x0b\x31\xd8\x7e\x45\xae\x3b\x4e\xc5\x4e\x79\xab\xeb\xe2\xb4\x7c\xf3\x95\xb1\x40\x77\xc3\x75\xb1\xf5\x77\x5b\x15\x5b\xed\x96\xd7\xc4\xb6\x1b\x5e\x91\x0a\x89\x38\x60\x05\xdd\xa3\xe7\x34\x01\xfd\x03\xea\x2d\x78\xfd\x2c\xfb\x27\xb2\xc1\xce\xb5\x22\x18\x38\x5a\x83\x9f\x42\x58\xc8\xc7\x41\xc7\xf1\xfe\xc0\x3e\x25\xbc\x78\xf3\x97\xfe\x8b\xff\xff\xc7\x17\x6f\x9e\x9f\xbe\x7b\xff\xf6\xe3\xdb\x8f\x7f\x7d\xf7\xe2\x83\x71\x90\x1d\xcc\xd4\x9b\x08\xaa\xc8\x63\x35\x58\x31\x9b\x6c\xf1\xf2\x4d\xe0\xa5\xde\xc8\xd7\x05\x33\x8d\x09\xc4\x03\x17\x20\x74\x0c\xab\x72\x97\x13\xd6\x5c\xb5\x1b\xe1\x9f\xc6\xba\x7d\x75\x38\x28\xbc\x76\x4e\x6f\x6b\x57\xaf\x29\x27\xf4\x0f\x81\x0d\x83\x52\x81\xdc\x9a\x7b\xbd\xe5\x32\x97\xee\xb9\x0f\x17\xe9\x27\x13\xff\x61\x93\xc3\x37\x2b\x4a\xb8\xe7\xc8\x1b\x5f\x20\x15\x89\x07\xce\x7b\xba\xf7\x84\x67\xe2\x17\x11\x74\x19\xbf\xd4\xe9\x0e\x40\x9d\x61\x62\x8c\xcb\x95\xbe\xfc\x88\x14\x59\x66\xe3\xb4\x8b\x15\x00\x95\x0f\xc4\x47\x49\x92\x60\x3d\xb5\x6e\x17\x6b\xcf\x54\x3a\x1e\xb9\x0a\x66\xc9\x46\x91\xfe\x3e\x98\xc8\x98\xa7\x63\x1f\x2b\xfb\x96\xec\xc4\x44\x1b\xd9\x0a\x0c\xbc\x33\x74\x0f\x80\x70\x07\x1b\xe2\x45\xdd\xf1\x8e\x09\x1a\x0d\xc6\x9b\x97\xc2\x90\xad\xdb\x91\xb7\x87\x9b\x96\xc4\xbf\x65\xb6\x69\x4a\xc6\xf2\x6f\x2a\x66\xdd\x3a\x61\x5c\xdd\xc7\x75\x22\xd9\xde\xda\x15\x91\x6c\x3c\x92\xda\x81\x4b\x69\xbf\x4d\x8f\x89\xab\xfb\x52\xd5\xaf\xac\xae\xfc\x3e\x58\xed\x9e\xaf\xc6\xc2\x3c\xda\xc0\x1b\xb2\xed\x63\xab\x1d\xf4\x96\xf3\xce\x95\x20\xae\xd5\xa8\xf3\xe1\x68\x74\xf8\xa7\x43\x18\x89\x7e\x46\x87\xf9\x9f\x0e\xb1\xf9\xfd\xf7\x38\xfd\xbc\xe2\x28\xe7\x00\xab\xe4\x3f\x1d\x21\x95\x13\xd3\x09\xa7\xcb\xd5\x05\x66\xa0\x30\x59\xb8\x9e\x83\xfd\x0c\x19\x1d\x7c\x95\xf3\x94\x17\xf9\xea\x8c\x92\x22\x07\xb5\x46\xcf\x0a\x60\x1a\xcb\xab\xb4\xd9\x2c\xcd\x56\x9c\x2e\x52\x0e\xa8\xce\xa5\x26\x77\xc4\xf1\x18\x14\x0b\x9d\x9c\x3a\x89\xa9\x97\x96\xeb\x09\xd8\x66\x4f\x86\xf1\xe8\xef\xb3\x31\x98\xa1\x55\x3c\xca\xd8\x18\xcc\xcc\x60\xfe\xf4\xe8\xc2\x14\x9a\xe3\x0b\x64\x92\x4d\x87\x7f\x4f\x11\xa6\xc5\xd5\x78\xf5\xaf\x02\x5c\x99\x09\x9a\x0a\x9f\x57\x93\xf9\x2a\xcf\x57\xf9\xbc\x3e\xb5\x45\xca\xd9\xea\x02\x31\xbe\xc2\x64\x0a\xe2\x93\x21\xfe\xbc\x42\x9f\x4d\x29\x3c\x41\x66\xc5\x17\xab\x0c\xd0\x22\x47\x55\x8e\x93\x81\x27\xcd\x74\x6a\x5b\x41\xc4\x26\x21\x62\x12\x55\xf7\xff\x2a\xf0\xaf\x26\xe5\x57\xd1\xd7\x18\x1a\x68\x16\xdb\xaf\x16\x47\x15\xcd\x73\xbf\x2a\x01\xe8\xd2\xee\xfe\x65\x1e\x58\xe2\x62\xa1\x12\xe3\x14\x90\x34\xbb\x5a\xc5\x67\x20\x5d\xc5\x53\x80\xd3\x73\x42\x57\xf1\x12\xa4\x0c\x11\x3e\x47\xe2\x27\xa3\x32\x2d\x07\x57\x84\x2e\x57\x31\x07\x73\x04\xe2\x1c\xe7\xab\x1c\xd9\x7e\x73\xac\x7b\xf9\x7b\x2a\xda\x6b\xcf\x97\x3b\x78\x81\xcc\xe8\x66\xc8\xd9\xb6\xdc\x9b\x04\x6f\x26\xc9\x5d\x77\x2a\x07\xf6\x17\xdb\xdc\x2b\xbd\x36\x00\xb1\x2a\x51\xfe\xd6\xdb\x0b\xe8\x45\x95\x21\x7e\x37\x00\x02\x79\xdd\xd7\xf7\x53\x6c\xb9\x01\xf8\x1c\xc4\x28\x07\x27\xde\x68\x69\xad\x7e\x9c\xcf\x69\x7d\x46\x13\x86\x73\x75\x5c\x63\x9c\xaf\xaa\xf5\xc2\xf6\x34\x83\xcf\x23\x8c\xc6\xa6\xd6\x67\xdc\x38\xcc\x71\x91\xaf\xb0\xa9\x57\xe4\xad\x07\xb7\x31\x40\x09\x87\x88\xb8\xc3\xb1\xd0\x2e\xa0\xdb\x2c\xd9\xe7\xea\x38\xb8\xe9\xf8\xb3\x03\xa7\xbf\xd6\xa6\x3a\x4d\x79\x7a\x96\xe6\xee\x74\xc7\x10\x33\x86\x24\xfc\xbe\x4b\x31\x13\x38\x2c\x12\xd4\x80\xd4\x4c\x5e\x22\xba\x94\x1e\x7c\x47\xd1\x22\x15\x09\x0b\x75\x32\xa2\xc9\x1c\x67\xd3\x08\xaa\xbf\x4c\x27\xe6\xe8\xb3\x54\x1e\xfd\xac\xf6\x32\x5a\xd0\x0b\x24\xea\x50\x8d\x06\xa2\x09\xbd\x8c\x60\xf4\x09\x13\xd5\xe4\xaf\x74\x71\x86\x45\x09\xf5\x43\x9e\xa5\x82\x48\xb2\x46\x92\xb0\xa3\x08\xfd\xab\xc0\x4b\xa5\xda\x13\x61\x32\xa3\x6c\x21\x45\x6d\x11\x8c\x98\x32\x36\x5f\x50\x82\xae\x44\xa7\x4b\x34\x11\x2d\x28\x05\x53\xf9\x63\x86\xf3\xb9\xf8\x9e\x23\xb4\x8c\x60\xf4\x4f\x94\x8a\xab\x20\x5a\xd2\x4c\x9e\xf8\xa6\x76\xd1\xa6\x1b\xfe\x2e\x95\x8b\x0e\xff\xfe\xb7\xfc\xdf\xfe\x74\x08\x59\x72\x18\x8f\xfe\x76\x79\x78\x30\xee\x8d\x4e\x0f\xff\x96\x1f\x8c\x41\x3c\x4a\x0f\x7e\xfd\xdb\x74\xdc\xfb\x13\x38\x84\x44\xe7\x8b\x9c\x1e\x88\x47\x4f\x0f\xfe\xdf\x58\xe7\xff\x9b\xc8\xc7\xc9\xa1\x9f\x76\x58\x91\xdb\xb4\xf1\x64\x29\x63\xdb\x9b\x27\xcb\x27\x44\x3e\x5b\xa2\xbe\xb3\x05\x23\x19\x29\x84\xd3\xd7\xf4\x12\xb1\x67\x69\x8e\x62\x30\x4e\xf6\x07\xd5\xdb\x76\x5a\x6f\xd3\x10\x9e\xca\xa9\xab\x69\x9c\x3c\xc1\xc7\x44\x90\xea\x09\x1f\x91\x31\x44\x7d\x0b\x73\x23\x36\x1a\x34\x7a\x60\xa3\xa3\x7a\xa1\xa3\x8d\x85\x5e\x91\x0b\xc4\x72\xd4\x52\x76\xd0\x52\x36\xd4\xf9\x60\x5c\x4d\x30\x57\x76\x75\x09\x5a\xad\xae\x4b\xe0\xae\x4d\xe2\xad\xd4\x6a\x55\xc8\x68\xba\xfe\x61\x4a\xea\x09\xb2\xd8\x5e\xe5\x8e\xb5\xcf\x24\x71\x63\x09\x08\x43\x0c\xe5\xab\xd5\xc8\xb9\x58\x2a\xfa\x49\xa6\xdb\x36\x87\xa2\xd3\xfa\xac\x64\xa2\x7b\x8e\x8a\x18\x94\x7b\x34\x16\x64\x98\x93\x0c\x60\x2a\x93\xfc\x01\x9a\xd7\x32\xe9\x17\xeb\x59\x3a\x99\xa3\x18\x94\x78\x16\xef\x6b\xc0\x56\x3e\x99\xbb\x5d\xff\x5b\x46\xc9\x00\x35\x6d\x43\x50\xd7\x1a\x8a\x3e\xce\x71\xde\x39\x63\xf4\x32\x47\xac\x33\xa5\x28\x97\xe1\xe0\xf3\x62\x29\xb9\xe8\x40\x8b\xb0\xb3\x54\x4c\xf7\x92\x66\x57\x33\x9c\x75\x04\xef\xd3\x41\xf9\xff\x3e\xc8\xe7\xe9\x62\xd8\x99\x73\xbe\x1c\x1e\x1e\x9e\x63\xde\xc7\xf4\xf0\xea\x87\x9f\x1f\xb1\xf3\xc8\x0b\xb4\x60\xe4\xe9\x81\xc6\xab\x97\x80\xd3\x29\x9e\xf0\x44\x7a\x9d\x9f\xa2\x0c\x71\x64\xd2\x20\x2a\x73\x27\x40\xfd\xb5\xb3\x2c\x8d\x97\xc9\x65\xc1\xce\xcd\x8a\xa9\x45\x74\x69\xde\x26\x8b\xa2\x1e\x10\x4e\x27\xa2\xc6\xcf\x39\x9a\x26\xfb\x03\xa8\xb5\xd0\x64\x2b\x23\x34\x5e\xad\xe2\x5a\x8a\x7e\x17\x70\xe5\x14\x08\x80\x52\x55\xac\xe8\xe8\x90\x1e\xe1\x0d\xdf\xea\xaf\xcb\xbd\xe6\x40\xb5\xe2\xc6\x48\x72\x27\x7d\x97\x41\xb5\x4c\xb8\xaa\xb4\x54\x03\x27\xd5\x54\x6c\x8a\x9e\x4a\x25\xaa\x52\x2c\x22\x28\x4b\x58\x2d\x65\xf3\xfd\xd7\x19\xc6\x91\xb7\x5e\x49\x61\xd6\x5d\xf7\x21\x12\x4a\x38\xc5\x79\xfb\x9e\x99\xaa\x72\xeb\xbd\xba\x55\xca\x56\xbb\xe8\x6f\x48\xfb\x7e\xd4\xaa\xd5\xd9\xf6\x9a\xce\xa1\x58\x0a\x59\xa2\xa6\x05\x53\x5b\x09\xfd\x9e\xde\x04\x40\x89\x5c\x0c\x46\x51\xd2\x04\xb1\x65\x35\x8c\x07\xca\x0a\xd1\x7c\x49\x3f\xa6\x91\x75\x1d\xb9\x68\xc9\x5d\xcc\x2d\x7a\xd2\x2f\xfc\xb2\x2f\x38\x42\xcd\xb6\x2b\xac\xb8\xf3\x2c\x52\xaf\x6d\x31\xf4\xb1\x68\xd1\x6e\x4f\xdb\xf3\xdf\xc6\x0d\x84\xa7\x81\x36\x6e\xe5\x50\xd6\xd5\xbd\xb9\xd2\xa9\xd4\xf4\x4a\x8c\x02\x10\xe0\x26\xd9\xc5\x02\xc3\xf8\x68\x3f\x49\x96\x29\xcb\xd1\xcb\x8c\xa6\x5c\x06\x66\x89\xf5\xf5\x64\x9a\xe3\x5b\x37\x07\x6a\x08\xe1\x84\x0f\x51\x2f\xea\x44\x3d\xee\xc0\x99\xbf\x1c\x1b\xce\xd2\xe9\x36\xb5\x82\xf3\x36\x15\x83\x23\xd5\xb7\xa5\x00\x1c\x55\xd7\xdd\x20\x19\x5d\x46\x86\x87\x81\x05\xb4\x91\x5b\x27\xe6\xc7\xcc\xfc\x98\x9b\x1f\x53\xf3\x63\xe9\x84\x91\xc9\x93\x7d\xb4\x5a\xf1\xbe\xe0\x24\x62\x04\x60\x91\x60\xfb\x3b\xf7\x94\xc3\x67\x49\x0d\xa0\x61\x3c\x4f\x58\x1f\x7d\x46\x13\xa9\xa1\x48\xcc\x4f\xb1\x37\xd3\x64\x3e\x7a\x54\xa3\x5b\xbc\x93\xe8\x52\x70\xb3\xf1\x6a\xd5\x92\x35\x1d\x57\x63\x10\x14\xdc\xb2\x83\x49\x27\x05\x62\x38\xda\xfb\xcf\xb2\x17\xfd\x29\xb2\x9a\x93\x93\x24\x1d\x2d\xc7\xb0\xe8\x76\xd3\xd1\x74\xdc\xed\xc6\x93\xa4\x2d\x94\xc0\x04\xc0\x65\x6b\xe6\x12\x28\x1b\x29\x15\x52\x40\xd0\x07\xef\xd1\xf9\x8b\xcf\xcb\x78\x09\x23\x1c\x01\x38\xa9\xe2\x75\x2d\x12\x6a\x68\xc8\xc5\xf7\x83\x6e\x77\x3f\x5e\x26\x71\x96\xd0\xd1\xe2\xe0\x68\x0c\x46\x83\x31\x30\x0b\x7a\xbc\x38\x38\x00\xc7\x7a\xa4\xb2\x50\x26\x68\x25\x51\x06\x4e\x92\x4c\x11\x8b\xa6\xcf\x25\x9c\x08\xe4\x5a\x49\x70\x36\x3d\x28\xd5\x04\x79\x3b\x8b\x07\x6f\xfb\x99\x7b\xc3\xbb\x36\x0a\xdf\x3d\x92\x14\xd2\x98\x23\x76\xbc\x22\x55\x82\x3d\xd0\x90\x24\xd7\xa3\x14\x6e\xba\x0e\x9b\x6d\xf6\x6b\x07\x7a\xc3\x52\x37\xc5\xc8\xf7\xea\x43\x03\xcf\x62\x57\x1f\x15\x78\x6f\x47\x7e\x9c\x72\x04\xf6\xaa\xd2\x1f\x7f\x7a\xfd\x43\xca\xf2\x5a\x79\x9d\xda\x17\xd3\xf9\x81\x16\x64\xfa\xa3\xad\xea\x17\x94\x4a\x6f\x67\xe1\xa2\xcd\x15\xcb\x68\x3a\x3d\xf0\x42\xbf\x06\xd4\x32\xb4\x03\xae\xed\x83\xd6\x9b\x4b\x29\x76\x64\xbe\x20\x46\x50\x85\x63\x12\xff\xed\x0f\xe4\x94\xf7\x59\x83\xb6\x17\x38\x5e\x1a\x18\xa8\xfe\x3b\x29\xe9\x38\xe3\xeb\x47\x60\xcf\x84\xbe\xd0\x0d\x57\xca\xcd\x24\x5d\xa0\xd5\x2a\x56\x3f\xac\xf6\x32\xea\x67\x69\xce\x5f\x69\xc5\xa3\xe8\x30\x02\xbd\x23\x00\x20\x29\xdd\xe7\xa3\x4a\x25\xf8\x40\x69\xdb\x19\x45\x25\xc1\xd8\x68\x55\x18\xc3\x84\xde\x96\xfd\x97\xc3\xee\xe2\x84\xf7\x22\x3f\x04\x6f\x04\xa9\x4e\x54\xda\x40\x07\xb5\xdc\x34\x11\x7c\x9d\xf8\xaf\x30\x3c\xc9\x27\x74\x95\xc7\x39\xca\x66\x26\x48\xde\x3f\xf3\xfe\x29\x4a\x3f\x9d\xe6\x08\x11\x00\xb3\x64\x70\x9c\x3d\x29\x0c\x1a\xcc\x8c\x6a\xf1\x24\x29\x46\xd9\x78\x4f\xdc\xfd\x13\x6f\xad\x30\x1c\x80\x13\x12\x4f\x60\x74\x20\x70\x63\x04\x56\x2b\x1d\x6e\x6b\x02\x86\xcd\xe2\x14\x0e\xc4\xa5\xe2\x57\xc8\x4d\x05\x50\xc6\xe1\xb9\x93\x64\x70\x4c\x2a\x8d\x67\x22\x45\x07\xce\x64\x63\x16\x0b\x5e\x1f\x80\x52\x80\x50\x0a\xe0\x4e\xcd\xa8\xc5\x7b\x15\x6a\x2e\x46\x30\x0f\x1c\x89\x45\xca\xe7\x07\xd6\xfc\xc1\x44\x49\x3c\xbb\x59\xe0\xe0\xad\x8d\x20\xcc\xfd\x59\xb7\x63\xf8\x26\xcc\xb7\x88\x89\x89\x67\x2c\xb7\xc4\xbe\xef\x64\xc3\x75\x23\xd3\x89\x6d\xec\xb9\x6a\xf6\x13\x4d\x23\x2a\x3d\x8e\x9f\x52\x3e\xef\xa7\x67\x79\xcc\x6e\x74\xbc\xd3\xb3\x7c\x4b\xb3\x04\x8d\xf2\xd9\x7a\xa3\x82\x30\x10\x4e\xe8\x03\x14\xfe\x01\xa0\x70\x42\x6f\x0c\x86\x13\x7a\x4f\x70\x38\x7f\x00\xc4\x3f\x04\x20\xce\xbf\x00\x12\xe7\xf7\x00\x8a\xd3\xe9\x97\x98\x26\xa2\x80\x31\x7d\x05\xa4\xca\x4b\x4b\x8c\x40\x4f\xff\xe2\xa0\xbc\xd9\x62\x4c\xa7\x09\x6f\xb3\x8d\x0a\x2d\x05\xaf\x29\x51\x6f\xb5\x14\x39\xde\xd6\x4d\xc3\xc3\xa1\xfc\x86\x0f\x65\x8e\xc9\x4d\xcf\x64\x8e\xc9\x3d\x1c\xc9\x1c\x93\x87\xdb\xe1\x8f\x01\x88\x37\xbe\x1d\x44\xdd\x7b\x00\x45\x9e\x3e\xa0\xc4\x3f\x00\x24\xf2\xf4\xc6\x28\x91\xa7\xf7\x81\x12\x79\x4a\x1e\x3d\x00\xe2\xef\x0c\x10\x1f\x01\x48\x94\x42\x08\x96\x3a\x24\x0d\x98\x7c\x14\x13\x88\x6f\x0c\x96\x8f\xee\x07\x2e\x1f\xae\xea\xdf\x1b\x5c\x86\x11\xe4\x8d\xaf\x6a\x51\xf7\xee\x41\x71\x72\xc6\xb6\x75\xbb\xf5\x00\x89\xdf\x2e\x24\x8a\x6d\xbe\x21\x20\x8a\xaa\xf7\x00\x87\x08\x67\x0f\x70\xf8\xfb\x87\x43\x84\xb3\x9b\xc2\x21\xc2\xd9\x3d\xc0\x61\xf6\xeb\xe3\x07\x92\xf1\x0f\x00\x88\x62\x9f\x6f\x0a\x89\xa2\xee\x3d\x80\xe2\xc3\xab\xd3\x1f\x01\x10\x6f\xfc\xe8\x74\x2f\x6f\x4e\x0f\x4f\x4e\x7f\x14\x28\xbc\x29\xa3\x72\x3f\x0f\x4e\x53\x7c\x71\x0f\x0f\x4e\x87\x5f\xf8\xe0\x34\xc5\x17\x77\xff\xe0\x84\x3e\x2f\x1f\x4e\xe4\xef\xfe\x44\xa2\xcf\xcb\x1b\x1e\x48\xf4\x79\x79\xf7\xe7\x11\x7d\x5e\x2e\x8e\x1e\xc0\xf0\x8f\x00\x86\x8b\xa3\x9b\x03\xe2\xe2\xe8\xee\x41\x71\x96\xd1\xad\xad\x3b\x1f\x40\xf1\xff\x63\xef\xdf\xfa\xdc\x38\xaa\x85\x71\xf8\x7e\x3e\x85\xd4\x1b\x94\xae\x4c\x49\x23\xd9\x0e\x01\xd9\x9d\xd9\x8e\x63\xef\xf8\x21\x8e\xfd\xc6\x93\xf0\xb0\x65\xe1\xdd\x23\x95\x46\x85\x7b\xaa\x45\x75\xc9\xf6\x30\xd2\xf3\xe3\x90\x84\x43\x80\x0d\x31\x10\x0e\xb1\x81\x10\x20\xe1\x6c\x20\xe0\x03\x90\x0b\x9f\xf7\x45\xf6\x67\x98\xb9\xf4\xcd\xfb\x15\xfe\xbf\x3a\x76\xf5\x49\xd2\x8c\x3d\x4e\x00\xfb\xc2\xb3\x54\x5d\x87\x55\x55\xab\x56\xad\x5a\xb5\x6a\xad\x7f\x5c\x52\x14\xf3\xbc\x4d\x52\x14\x65\x1f\x00\x29\xd2\x70\x48\xb6\x63\x19\xf3\x90\x16\xff\xc1\x68\x51\x4c\xf4\x76\x89\x51\x14\xde\x79\x6a\x5c\xe9\x3c\x24\xc5\x7f\x1e\x52\x24\xfa\xf2\x13\x7b\xa4\x55\x6f\x9b\xd1\xf4\x3c\x0f\x2f\xd6\x9b\x18\xfa\x1e\x69\x35\xda\x30\x8a\xd3\xfd\xc5\x7a\xd3\x87\x43\xcf\x18\x59\x87\x00\x06\xf1\xaf\xc8\xbc\x61\xe1\x99\x87\x8b\x81\x78\x5c\x10\x2c\x0e\x9b\xd4\x6d\x05\x70\xf8\xe1\xa0\xbd\x2d\xfa\x5e\xe9\xdc\x23\x71\xcf\xcd\x40\xdc\xfd\xb5\x41\xb8\x9d\x9b\xab\x87\xe1\x11\x76\x20\x3c\x82\x19\x54\x41\x5b\x62\x6a\xd4\xeb\x33\x9e\x00\x45\x84\x9c\x6d\x05\x1e\xe0\x35\xed\x3c\xa3\xc4\xab\xc3\x87\x97\x4f\xff\x3c\x9c\x72\x06\x33\x11\x3e\xe3\xdb\xb6\x12\xe1\x85\x77\x9e\x28\x83\x4e\xae\x1b\xbb\xc2\x9d\x7e\xe6\x57\x82\x0f\xc9\xf6\x03\x45\xb6\x24\xde\xe0\xe9\xb6\x36\x78\x7b\x13\x0f\x47\x23\x19\x3a\xae\xde\x8c\x37\xfd\x47\x23\xb0\x20\x9e\x84\xae\x74\xba\xc0\x6d\x85\x30\xda\xde\xbe\x1e\x74\x56\x3d\x92\x4f\xf6\x38\x97\xec\x89\x4d\xf6\x78\x46\xb2\x0f\x57\xaa\xb3\x46\xdd\x7f\xc8\x8c\x3f\xb0\x54\x3d\xf5\x04\x15\x84\x2b\xdb\x3c\x3e\x05\xe1\xca\xc1\x07\xc0\x7e\xc3\x95\x46\xfd\x21\x1d\xfe\x2b\xd0\x61\xa3\xbe\x7d\x4a\x6c\xd4\x1f\x0c\x29\x3e\xbc\xf2\xf9\xd7\x20\xc5\xed\x5e\xfa\x88\xb2\x0f\x84\x14\x1f\x5a\x47\xfd\x4b\x50\xe2\x76\x8d\xa3\x78\xd1\x9d\xa7\xc3\x55\xff\x5e\x02\x50\x3f\xd4\xfd\xec\x98\xee\x67\xd5\x3f\x7b\x5f\x34\x3f\xab\xfe\xd9\x07\x40\x45\xdb\x7a\xb9\xfb\x90\x8a\x76\x9e\x8a\x30\xb9\x3f\x54\xf4\x20\x1e\xde\xae\x86\x0f\xe2\x2d\xfc\x87\xef\xd1\x34\x69\x35\x7c\x00\x6f\xe1\x57\x45\x34\xe4\x1d\x1f\x8b\x47\xef\x75\x2c\x44\x78\xa3\x9d\x1e\x8c\x41\x78\x66\xe7\xc6\x42\x2c\x93\x41\x78\x46\x24\x6e\x6f\x14\x06\xe1\x99\x9d\x1f\x04\xea\x93\x6e\xb8\xfa\x50\x64\xfc\xa7\x10\x19\x15\x5a\xd4\x73\x74\xba\xe3\xe9\x90\xf6\x72\xe8\x2a\x15\x27\x12\x40\xfa\x83\x19\xd3\x45\x7b\x36\x55\x47\x54\x4e\x34\xce\xf3\x0e\x8a\x2a\x95\x09\xcd\xa1\x5a\x27\x24\xb2\x2b\x21\xf5\x3c\xcf\xa4\x97\x35\x1c\x6f\x78\x8b\x1a\xb7\xa6\x69\x10\x6c\x33\xae\x90\x24\x6b\x2f\x2a\xda\x5b\xf4\x2e\x06\xb1\xa7\xc5\x22\x18\x7a\xbb\xea\xd0\xf7\xd6\xbb\xa8\x83\x57\xfd\x20\x6a\xd6\xc7\x31\xc5\x47\x5a\x24\x8f\x3c\x37\xe3\x53\xb6\x91\xeb\x53\xb6\x61\xfb\x94\x6d\xb4\x9b\x3e\xa8\xe9\xaa\xe7\x70\xcf\x75\xa4\x10\xc0\x77\x7e\x2a\x5c\xc2\x96\xe5\x9a\xce\x2e\x1c\xad\x50\x16\x0e\xf8\x74\x15\x8b\x31\xd8\xf4\x0d\x08\xe7\x45\x77\x64\xf7\x5d\x50\x63\xe1\x21\x7c\x16\x75\x5d\xec\xd6\x21\x71\x43\x18\x01\x20\x1c\x0c\xa2\x4a\xa5\x21\x02\x8f\x2a\x41\x47\x74\x6d\x98\x39\x6d\xcc\xbb\x89\xea\x1e\x1d\xe6\xd7\x38\x96\x35\xee\xca\xd4\x18\xe8\x9b\x9e\x8e\x17\xb4\xea\x6d\xd8\x13\x7e\x42\x85\x3f\xd6\x7d\x1d\x99\xa5\xef\xb5\x7a\xb0\xd3\x9e\xeb\x78\x7d\x99\xa3\xdf\x6a\xb4\xc7\xba\xf9\x4e\xb2\x3f\x8f\xba\xbd\x6a\x07\x14\x20\xa1\xca\x4c\x1f\x80\xb1\xec\x6c\x1e\x0b\x8d\x6c\x16\x3a\x9c\x91\x85\x6e\xd7\xa6\x88\x9a\x35\x64\x2e\x0c\xa8\xb8\x1f\x98\xa7\x8b\xb2\x17\xc2\x88\x05\x81\xa6\x4b\xbd\x79\x0a\x25\x1f\xf2\x5c\xe4\xcd\x73\x46\x8a\xa3\x67\xfd\x67\xa5\x40\x49\xc4\x7e\xeb\x94\xf5\xea\xa3\xa3\x11\xfd\x70\xa3\xec\xd5\x17\x9f\xf5\x9f\x6d\xa2\x7d\xf5\xc5\x2a\x73\xab\xbc\xc5\xa6\x88\x5f\xaf\x25\x4b\x17\xd4\xa2\x41\x80\x99\xeb\x20\x07\x40\xc4\xab\xb6\x1a\x9e\x77\x1c\x1d\x47\x0b\xf1\xb9\xe1\x99\xe2\x84\x46\x7b\x71\x9e\xff\x5f\xa5\xcd\x2a\x05\x62\x52\xf2\x2a\x9d\xad\x92\x79\xda\x14\xc1\xef\x13\xf7\x60\x54\x6c\x27\xea\x7f\x43\xe2\x7a\x55\xa8\xfa\xaa\xd6\x97\x39\x91\x11\x9d\x1d\xa4\xf2\xc8\xb4\xb1\xbd\x35\xab\xa1\x15\x31\xab\xb6\xc3\x5f\x1e\x8c\x85\x50\x84\x57\x1e\x3a\xea\xf8\xe7\xd8\x9b\x27\xa9\x73\xf8\x34\x6f\x53\x9d\xc3\x8b\x3e\x08\x3a\x7c\x48\x86\xff\x0a\x64\xb8\x7d\x2a\x7c\x10\x44\xf8\x99\x87\xae\x10\xfe\x15\xa8\xf0\x33\xdb\x76\x85\xc0\x8b\x3e\x00\x3a\x1c\x2e\x3f\x00\x1d\x4a\xf5\x1e\x75\x28\xd1\x70\x79\xe7\xb5\x07\x0f\xfd\x88\xfd\x2b\xac\xc8\xed\xbb\x11\x7b\x20\x5e\xc4\x1e\x3a\x6b\xfa\x57\xa1\xc2\xed\x3e\x81\x7e\x30\xae\x9a\x18\x1d\x92\xce\x43\x42\xfc\xe7\x27\x44\x3e\xcf\xdb\xa5\x44\x5e\xf6\xbe\x92\xe2\xc0\x5f\x41\x55\x86\x59\x80\xe2\x8b\x0d\x93\xb4\x2d\x39\x45\x22\x11\x21\x26\x83\x6d\x39\xaa\x26\x5b\x6b\x74\x4f\xa1\x3e\x8a\x25\x11\x74\x96\x21\xd2\x75\xd7\x79\x07\x96\x78\xab\xcf\xe0\x88\x35\x95\x5a\x94\x88\x06\x23\x44\x4f\xe3\x0e\x72\x01\xec\x23\xbf\xfb\x94\xcf\xfc\xa2\xef\x98\x60\x96\x13\x8f\x6e\xc8\xc7\x14\x40\x59\x68\xc5\x74\x32\xd1\xa4\x03\x54\x64\x78\xdc\x55\xb5\xaf\x0c\x71\xf7\x50\x48\x45\x66\x2e\x90\xc1\x4e\xb8\x3a\x18\xb2\x44\xcc\x31\xaa\xcd\x84\xa7\xd4\x0d\xb5\x31\xae\x1f\x89\x83\xff\xfa\x18\x52\xf3\xd2\x07\xd7\x70\xd7\xcb\x69\x13\xe2\x9a\x98\x07\x0f\xd5\x3e\x1d\x62\xe2\x3a\x0e\x80\x44\x62\x89\x75\x6f\xe8\x90\xd4\xa2\x4e\x1f\xf1\xc1\x3f\x4a\x3a\xc8\x75\xfc\x1e\x43\xf4\x39\x44\xba\x88\x3a\x99\x2e\xeb\x01\x74\x00\x64\x90\x00\xe8\x38\x63\x28\x16\x4b\xb8\x66\x8f\xdb\x69\x11\xde\x71\x5a\x9f\x68\x1e\xd2\x73\x5c\xd6\x5d\x0d\x4f\x23\x4e\xc4\xa9\xb1\x39\x7a\x86\x20\x95\xad\x16\x84\xe1\xa9\xe1\xc0\x75\x68\x38\x64\x88\x36\x57\x7d\x4c\xc4\x30\xb9\xa4\x76\x52\xa6\x1d\xc1\x1d\x1a\x06\x78\x79\x34\x22\x35\x99\x22\xc3\x85\xfa\x1d\x86\x4f\xa3\x25\xea\x93\x08\x73\x7c\x61\x98\xc1\x34\xee\xe6\x1c\x5e\xc4\xb5\x01\x0d\x57\x71\x84\x6a\x8a\xdf\xb8\x56\x4f\xc3\x1a\x8e\x9e\x92\x03\x80\xba\xa3\xd1\x4c\x83\x1a\x42\x06\x11\x18\x83\xe6\x56\x72\x8f\x27\x8b\xda\xd6\x92\x56\xe4\x6c\xaf\xe9\x6a\xc0\x47\x3c\xe7\xe5\x41\x27\x1c\xac\xdd\xf7\x38\x58\x13\x16\xed\x71\x89\x9b\x59\xb5\xb3\x2c\x38\x8b\xab\x84\xa7\x10\x89\x34\x55\xee\x77\x41\x36\x8b\xdc\x61\x1c\x58\xd7\x61\x27\x25\x31\x1d\x3c\x8b\x23\x86\xc9\x8a\x20\xbf\x25\x7f\x45\x04\xa1\x94\x68\x1e\x47\x03\x5f\xec\x67\x4d\xa7\x34\x2a\x39\x3a\xf9\x18\x45\x03\x44\xba\xcd\x72\x5d\xa7\x3c\x27\xe3\x94\x35\x65\x14\x4a\x81\x8a\x84\x85\x55\xc3\x12\x4f\x78\x4a\xe6\x8c\x12\x77\x5e\xd2\x5a\x24\x4d\x62\xe9\xd6\xed\xf5\x90\xce\xa4\x70\xe1\xcb\xb7\x28\x8b\x42\xce\x01\x73\x72\xbf\x44\xb5\x48\xd7\x5c\xa9\xb8\xd6\x2f\x8f\x01\xa8\xb3\x0c\x64\xbd\x95\x0a\x4f\x28\x7b\x32\xa7\x4a\xf4\x68\x9c\x4f\x45\x68\xd3\xf9\x88\xc8\xa7\x12\x3d\x22\x82\xf5\xf5\x11\xc5\xec\x10\x0d\x57\x8f\x51\x74\x1a\x87\xc3\xbc\x21\x10\x75\x8b\x8f\x73\xac\x52\x71\xa7\x22\x1a\xc3\x39\x28\x5b\x98\x32\x0d\x01\x30\x86\x9c\xbd\x65\xda\xa6\x32\x70\xa2\x9c\x34\xbe\x8c\xbb\x4f\xae\xb9\x0e\xee\xf2\x1d\x0a\x77\xe5\x1d\x80\x79\x91\x69\xe5\xd4\x91\xab\xa8\xe0\x2c\x75\xc8\x6a\x7c\xc1\x00\xd7\xca\x03\x60\xe8\xd1\xb8\x63\xe6\xc0\xae\x53\xbc\x10\x22\x21\x1d\x79\x54\xfc\x81\x2a\x32\x62\x66\xc0\x5c\xa4\x48\x36\x4b\x4e\xfc\x13\x16\x17\x24\x1d\xe4\x12\xd8\x80\x08\x40\xb1\xb8\xa6\x2d\x10\xac\x2e\xae\xfc\x44\xaf\x64\x2c\xaf\xaa\x94\x52\x7c\x3d\x94\x12\x5b\x1f\xfa\x12\x5b\x34\x09\xd1\x49\x98\xce\xa9\x1b\xcf\xfc\xd1\x9a\x53\x41\xac\xd0\xf4\xd5\x1d\x4d\x58\xde\xe9\x55\xa0\xd2\xc1\x7c\x03\x8c\xa1\x5c\xf2\x5b\x21\x02\xf1\xac\x4c\x4e\x0f\xb6\x67\x93\x53\x3a\x89\x07\x07\x03\x88\x2b\x15\x17\xcb\x11\x22\x00\xc6\x59\x55\x71\x11\xa2\x56\x8c\x80\xde\x54\xf6\xbb\x05\x23\x01\xe6\x42\xb5\xd3\x29\x33\x2f\x3a\x7d\x48\xc2\x6d\x0c\x49\x95\x0f\xc9\x69\x1c\xe1\xe5\x00\x2d\x49\xae\x25\xb3\x2a\x71\xa4\xeb\x9a\x66\xd6\x57\x50\x82\x1b\x6b\xf1\x3f\xbb\x95\xab\x12\x00\x32\x0f\x2d\xea\xfb\xdb\x66\x1d\xf2\xc3\xc4\x5e\x56\xad\xee\xd5\xab\x49\x18\xbe\xe1\x9e\x4b\x34\xbf\x00\xeb\xb4\x36\x24\x51\x1f\xf7\x98\x4b\xc0\xdc\x32\x45\xfe\xa9\xb1\x9d\x14\xcb\xef\x63\x00\xa3\x90\x32\xd4\x2d\x40\x3b\xd1\xa9\x2c\xf6\xf9\x98\x27\x0b\x71\xa6\x5b\xae\x43\xc2\xcf\x40\xd8\xcc\x58\x8b\xb4\xf9\xb2\x6e\xb5\xe3\xe5\xdc\x0b\xe9\x41\xbf\xd3\x77\x53\xa7\x2d\xf1\xf0\x9f\x30\x10\x9a\x0e\x20\x30\x87\x82\x08\x95\xc4\x47\xcd\x97\xd6\x39\x6f\xa3\xfc\x78\x25\x5b\x92\x6b\x80\x00\xb9\x58\x7c\xf1\x36\x4c\xac\x44\x17\xd9\x0b\x07\x01\x60\xf1\x43\x3f\xc1\x0f\xad\x06\xc7\xa2\x41\x3a\x1a\xb9\x56\x67\x4c\x13\x5a\xe4\xe3\x12\x07\x0c\xf5\x35\x2a\x9e\xa8\x51\x44\x3a\x1b\x03\x63\xd8\x6a\x03\x11\xda\x4d\x8b\xf2\xb3\x51\x88\x3d\x73\x82\x4e\x5a\x6d\x28\xa3\xdb\xa3\x74\x74\xfb\x75\xf9\xda\x0c\xb5\x68\x7b\x4e\x89\xac\x95\x8a\xcb\x94\xa4\x2a\x13\x00\xa4\xf3\x8d\x7d\xa4\x52\x31\xc9\xf1\x60\x18\x92\x61\x46\xce\x1d\xc3\x82\x8d\xdf\x46\x1e\xf7\xdc\xb2\x14\x12\xfa\x7e\x74\xc8\x8f\xd8\x72\x18\xf2\x43\x6c\xdc\xa9\x6e\xd8\x11\xb6\x18\xbc\x5f\x07\x03\x24\xcc\x32\x9e\x5c\x5b\xf2\x57\x9e\xf5\x57\x91\xab\x4e\x39\xbc\x73\xf5\xb4\xd5\xa7\xe2\x38\xd2\xee\xb3\x36\xf0\x29\x22\xec\xd9\xb0\xab\x85\xdb\x03\x7d\x1c\x08\x57\x13\x63\x68\x37\x9e\x0d\x69\x5c\x2e\x4f\x94\x7e\x95\xac\xd7\xec\xa9\x0a\x9c\xe9\x82\x62\x78\x06\xd1\x6a\x84\x02\xd4\x61\xd5\x33\x98\xf5\xab\x32\xfc\xfa\x02\x5f\x57\x21\xe1\x3d\x5c\x48\xe4\x59\x1d\x06\x0c\x0f\x02\x64\x67\xce\x13\x25\xb7\x5c\x71\xa2\xbe\x69\x95\xf0\xa3\x79\xe0\x33\x14\xcd\x54\x5d\x52\xa2\xe5\xa7\xac\x1d\x90\x69\x89\x15\xab\x55\xcb\xb3\x81\xbf\x16\x0e\x59\xd3\x04\xd4\x84\x02\xc5\xe3\x02\xc3\x03\x1a\x71\x4e\x3c\x4d\x27\x77\x90\x1d\x28\x13\x8e\xd2\x03\xa2\x27\xb9\xf1\xa9\xf9\x41\x24\x60\x88\xba\x79\x96\x55\xb5\x93\x27\x71\x74\x7c\xb8\xb2\x82\x22\xfe\xe9\xe4\xc9\xb1\x54\x46\xc8\x48\xd4\x7c\x7d\x3a\x21\x51\xc3\x04\x5c\x5a\x3b\x79\x52\xf4\xf3\xe4\x49\xc8\x40\x33\x91\xa7\xef\x93\x15\x9e\x47\x58\x23\x8e\xa7\x68\x14\xee\x69\xf2\xb7\x40\x4c\x5b\xa3\x83\xbc\xea\x54\x2c\xdb\x15\x1a\x0e\x07\x55\x01\x3f\x28\x72\x91\x2b\xd9\x90\x81\x21\x1a\x26\xf9\x49\xd3\x71\xa0\xa2\x1f\x43\x58\x50\x84\x7c\x46\x34\xa6\xa8\x23\x32\x01\x46\x72\x8a\x51\xf7\xe8\x80\x23\x6e\x6a\x4d\x11\x96\x3d\x76\xa6\x48\x35\x14\x65\x9c\x19\xa9\xd3\x99\xa4\x17\x29\x8a\xb1\x2e\x9b\x90\x6a\xc8\xcc\xce\xad\x3e\xd6\x5a\x6d\x07\x66\x76\x6c\x8b\x08\x65\x36\xc7\x68\x3a\xb8\xac\xc1\xfa\x88\xa8\x3f\x79\x0b\x40\xef\xe1\x08\xd4\x58\x28\x95\xa0\xf1\x51\x3b\x99\x6c\x12\xf9\xce\x18\xf5\xc3\x61\xd0\x3d\xde\x0f\xcf\xc8\x95\x27\x87\xb5\x99\xb7\x3d\x96\x63\x0c\x23\x93\xff\x13\x7d\x44\x1c\xa0\xc2\x7a\xe7\x7e\x93\x0b\x09\xfa\xdd\xee\x84\x16\x44\xf1\x7c\x5c\x44\x86\x4a\xc5\x75\x96\x43\xc6\xc2\x55\xc7\xf3\xbc\xbc\xc6\x8e\x85\x52\xad\xe1\x80\x45\xb5\x57\x8a\x5c\xcb\x43\x1c\x74\x63\xbe\x70\x28\xa4\x4b\x88\xae\x72\x11\xa3\xc9\x8c\x2c\x31\x25\x27\x18\xc3\x08\xf9\xb4\xd3\xdf\x4f\x74\x86\x5c\x06\xc5\xab\x49\x86\x52\x7e\xee\xf8\x0b\xc7\x6a\x14\x45\x61\x70\x1a\xb9\x99\x09\x16\xf3\xe1\x00\x90\x9a\x54\x22\xb6\xe8\xba\x6d\x21\xa8\x2a\x25\xea\x81\x3a\x55\x9d\x17\x48\xc5\x64\x82\x17\x73\x5a\xc5\x02\xc3\x74\x1b\xcc\x0a\x92\xad\x08\x43\x06\xda\x8f\xc9\x84\x8b\xf9\xa9\x49\x13\x55\x41\x36\x06\x4d\x97\x1f\x1c\x14\x3b\xd6\xe4\x44\x00\x3f\x51\xe4\x15\x22\x00\x12\xa1\x0a\x9c\xc0\xe5\x39\xfb\x41\x95\x4a\x96\x91\xe7\x73\x70\x64\x73\x70\x48\x8b\x79\x38\xa4\x60\x0c\x25\xa6\x39\x93\x46\x20\x4e\x4c\x1b\xb1\x69\x4b\x0c\xef\x21\x8c\x82\xae\x03\x16\x73\x05\x46\x5c\x53\x8c\xca\x8d\xe5\x40\x04\x71\x4e\x79\xc0\x17\x41\xee\xb2\xb2\x2a\x91\x2b\xc5\xad\x43\x3d\xb6\x72\x04\x23\xe0\xa2\xd1\xa8\xd5\x16\xba\xc7\x31\xcc\x27\xd4\x1c\x7b\xe3\xf5\xf4\x50\x36\xcb\x75\x68\x86\xad\x89\x20\x43\x67\x59\x33\x8f\xf8\x9f\xf1\x97\x51\x20\xa2\x7d\xa7\x5b\x13\x5f\x72\x94\x1c\xf1\xb0\xa5\x0a\xc4\xe4\xc9\x16\xb9\xd4\xde\x7c\x64\x7f\xb7\x5b\x72\x1e\x31\x86\x8d\xf0\x11\xa7\x56\xab\x3d\xb2\xa3\x7b\x6d\xce\x1e\xb0\x53\x9b\x6f\xb6\xa9\x07\xa8\x67\xdc\xd2\x26\xbb\x5d\x89\x79\x8b\xb2\xc8\x4e\x07\xcc\xb7\x86\x41\xab\x1b\x4d\xa8\x7b\x8d\xaa\xb8\x9e\x70\x86\xc3\xa5\x95\xfd\x07\x17\xce\x3a\x70\x39\x08\x3b\xa7\x9a\x8f\xac\x2b\x2b\xfa\xc8\x69\xb6\x1c\x4d\x18\x0e\x43\x74\xd5\x81\x4e\x45\x35\xe0\xb4\xa1\x13\x31\x9f\xc9\x63\x90\xd3\x6c\xb5\xf6\x40\xc7\xf4\xdc\x81\xad\xd6\xae\x3d\xb0\xe5\x14\xc9\x14\x4e\xbb\xdd\x86\xad\x96\x54\x6e\xab\xf5\x7c\x20\x2e\xed\xf8\x41\x10\x9e\x39\x10\x20\x9f\xf2\x1f\x14\xfb\x4f\xa1\xa8\x43\xf1\x32\xea\x3e\xb9\xa6\x52\xd4\x4d\x9d\xfa\x25\x56\xa0\x0d\x07\x2a\xeb\x32\xea\x85\x14\xe5\x34\x21\x57\xa4\x40\x4d\xf6\xb0\xe3\x07\x9d\x61\x60\x6f\x9a\xd0\xe9\x04\x7e\x14\x89\xbf\x61\x84\x8e\x92\xe3\x4a\x04\xd2\x8a\xd6\xa7\xf1\x4a\x3f\xc0\x2b\x7d\x86\xba\x22\x91\x9f\x2e\x7d\x55\xb4\x8b\xa9\xf8\x3f\xf2\x97\x03\xf9\x99\x86\x83\x6e\x78\x86\x1c\x50\x75\xa2\xb3\x8c\xfa\x0e\x74\x84\xf0\x69\x63\xd6\xd7\xb5\x1e\x25\x4f\x87\xa7\x11\xaf\xa6\x1f\x52\xfc\xd9\x90\x30\x3f\xb0\x90\x53\xb1\xdc\x83\xb5\xa3\x03\x44\x44\x13\x41\xe8\x77\x31\x59\x39\x82\xa2\xc8\x5f\xe1\x12\xaf\xe0\xa1\x4b\x14\xaf\xac\x20\xfa\x09\xdc\x65\x7d\x9d\x26\x6a\x25\xa1\x14\x20\xa3\xb8\x40\x48\x96\x83\x21\x15\x80\xda\x2f\x04\xc8\xbb\x2f\xa0\x5e\xd8\x19\x46\x02\xc2\x64\x30\x64\x02\x3a\x85\xd6\x78\xbf\x04\x1c\x0e\x90\x00\x94\xb0\x66\x20\xbb\x7f\x42\xf5\xd3\x0f\x03\x71\xa3\x61\xff\x4a\x64\xa2\xe8\x34\x22\xec\x78\x87\x86\x01\x9f\x58\x8a\x56\x70\xc4\x10\xdd\x7f\xec\xb0\xf8\x45\xba\x88\x1e\x26\xc7\x84\x9e\x1b\x3a\x91\xc8\xb6\x14\x72\x50\xee\xff\x1a\x38\x48\xf4\xf8\xdb\x3b\x8f\xfe\x15\x77\x3c\xf1\xdb\x46\x44\x7e\x38\x96\xc0\x59\xae\x68\x55\xab\x04\x0f\x33\xb4\x6a\x17\x63\xfe\xb2\x50\x18\x73\x50\x8e\xbf\x9e\x77\xfd\xd3\xce\x2c\x93\x0e\x77\x63\xf8\xb9\x90\x2f\x6e\x87\xad\x0d\xd0\xfe\x3e\xf2\xbb\x47\xcc\xac\x9d\x46\x94\xe1\x8e\x45\x09\x6d\xbd\xda\xf2\x57\x13\x5f\x69\xf2\x73\xbc\xa8\xe2\xb4\xd4\xda\x4a\x7c\xd0\x4b\x2c\x91\x28\x57\x5a\x36\x29\x48\x96\x2f\x58\x77\xf1\xf7\xe4\xf2\x33\xe9\xd9\x55\x18\x7f\x12\x03\x68\xfd\xb4\xd7\xa4\x49\xce\x59\x9a\xd6\xb7\x78\x85\xc6\x89\x98\xda\x3f\xd4\x7a\x8d\x53\x12\xcb\xd6\x24\xcb\xd5\x6b\x7e\xa6\x16\xb1\x49\xcf\xac\xe5\xf8\x4b\x76\x49\x9b\x6f\xe9\x95\x6d\x3e\xa4\x16\xb8\x49\xcf\xae\xf3\xe4\x27\xbb\xe1\xcc\xaa\x37\x5f\xd4\xe2\x17\xbf\x3f\x0a\x1d\x5f\x71\xc6\x56\x6b\xd7\x6e\x58\x87\x2d\x93\x2f\x29\xb0\x0a\x5e\x4e\x86\x41\x10\x57\x23\xf9\x85\x55\xaf\x64\x1b\x56\x82\xe4\x1e\x56\x82\x66\x22\x56\x92\xe0\x25\xf1\x6f\xfb\x78\x90\x4e\xcd\x19\x79\x9b\xcb\xe4\x25\xe6\x15\x49\xf0\x1c\x93\x6c\xb3\x1e\x2b\xd1\xe6\x40\xf1\xd0\x68\x46\x34\xc3\x20\x26\x0f\x4f\x99\x61\x4c\xf2\xaf\x54\x39\xc9\xc6\x52\x89\x99\x09\x2d\x60\x6a\xa9\xef\xc7\xf2\x46\xca\xb0\xb8\x4c\x4a\x92\xd3\x99\xcf\x86\xe1\xc5\x29\x36\xdf\xcb\xa4\xe6\xd4\x60\xb8\x60\x3a\x49\x30\xc3\x38\x31\xcd\x13\xcd\x97\x2c\x6b\xe4\x83\xba\x9e\x95\x54\x70\x4f\xcd\x48\x03\xb6\x9c\xf4\x81\xc0\xcc\x44\xa6\x64\x1d\x3a\xa5\x52\xa9\xc4\x39\x6e\x43\x4e\x6f\x56\xe4\x29\xd2\xc5\x68\x91\x27\x29\x51\xb5\x0d\x1a\xa2\x13\xbb\xe1\x2e\x0e\xf1\xac\x3d\x3f\x88\x50\x1b\xf2\x36\x4f\x9c\x10\xeb\xc0\x19\xf8\xd4\x5f\x45\x0c\x51\x8e\x4c\x7b\x3c\x11\xbd\x3d\x70\x77\x41\xd5\x93\xaa\xcc\x24\x35\xe0\xae\xf6\x58\x92\x65\x1b\x3a\x7d\x3f\x3a\x78\xda\x0f\x9c\xa6\x40\x6e\xfc\x08\x5c\x45\xcc\x6f\xae\xaf\x0a\x51\x54\x4a\xd4\xf7\x53\x4c\xae\xf5\x97\x23\x27\x79\x02\x62\x3b\x24\x91\x4f\x3c\x0b\xbd\xdf\x22\xfa\xb1\xe0\x54\xe3\xd4\xd3\x87\xf6\xe7\x8a\xe8\x19\x41\xbc\x91\x60\x8d\x82\xd0\xce\x8a\x55\x96\x43\x51\x0f\x78\x42\x33\xa3\xbc\xe5\x19\x9e\x7a\x33\x31\xed\x0c\x3b\x03\xc2\x71\x55\xc5\x1a\x63\xad\xbe\xac\xf6\xfc\x20\x58\xf6\x3b\xa7\xaa\xb8\x57\x1d\x12\x89\x78\xda\x57\xe7\x07\x4a\x89\x9c\xe6\xbf\x4d\xa1\x59\x51\x5f\x81\x9b\x7f\x15\xb1\xa0\x4a\x39\x00\xe6\x0b\x76\xa9\x5a\x38\xc3\x00\x50\x2a\x33\x10\xf1\x19\xea\x2e\x59\x9b\x41\xf6\xce\x39\x21\x21\x67\x94\xc0\xad\x3c\x22\x34\x57\x51\x1a\x35\x73\x41\x1b\x6b\x5d\x12\xf5\x82\x4a\x05\x59\x3a\xd0\x9c\x0c\x7c\x9c\xe5\xa5\x61\xc9\x11\x6a\x60\xb5\xe3\xa5\xf1\x4d\x5f\x2e\xcb\x76\x39\x47\x8e\x50\x5a\x09\xaa\x55\x68\xc2\x64\x85\x2d\xb6\xda\x4d\x36\x1e\x03\x6d\xfe\xd7\x5d\xf2\x97\x0f\xf3\x5d\x33\x3b\x24\xf1\xf9\x21\x7d\x90\xc9\x1e\x20\x32\xb8\x4c\x99\xc5\x84\xb6\x38\x53\x1d\xa8\x54\xca\x8d\xb2\x97\x51\xfa\x69\x0c\xc0\xa2\x53\x6d\x38\x96\x6e\xd1\xe0\xca\x07\x4d\x0a\x3c\x51\x73\xbd\xef\x93\x6e\x80\xb8\x04\x5b\xa8\x17\xd6\xaa\x49\x21\xe9\x49\xcb\x1b\xde\xb6\x7c\xd1\x0e\x99\xb6\x57\x2e\x37\xe6\x44\x6e\x21\x45\x1e\xe6\x92\xa3\x8b\xc0\x18\xca\x06\x0e\xf1\xc4\xa9\x2d\x48\x01\x14\xcc\xd1\x4a\x85\x2a\x85\x6d\x61\x8d\x1f\x97\xa2\xe8\xd4\x3a\xb5\xc8\x6a\x74\x79\x49\xe4\x17\x5d\x56\x8b\x58\x38\xe0\xeb\xdb\x5f\xf1\xe5\xfc\xc0\x72\x03\x34\x1b\xbb\xf9\x04\xd4\x4e\xa1\xb5\x03\x61\x57\xa8\x77\x71\xc4\xc7\x29\xbf\x84\xf5\x76\xbf\x1f\x1f\x6a\x16\x51\x4d\x93\x67\xa5\x52\x6d\x94\xa5\xf1\x94\x4c\x30\xa6\x4a\x89\x12\x60\xd1\x45\x35\x35\x3b\x35\x21\xa1\xbb\x4c\xe2\x63\xa7\xf7\x43\xfe\x21\x51\x10\xe6\x64\xb3\x8a\x83\xa6\xc4\x50\x6b\x45\xf5\x99\x2e\x35\x7e\xfa\x22\x9d\x7a\xbc\x97\x0a\xd3\xd1\xa8\xd5\x06\xca\x06\xa9\x0e\x20\xf1\xaa\x0d\x88\xbd\xfa\x5e\xbc\x4f\xdb\x87\xef\xc5\xf3\xf3\x00\xf7\x5c\xed\xdb\xe0\xe0\x67\x86\x7e\xe0\xd2\x16\x6e\x43\x04\xc0\x3a\xf1\xb0\x36\x1b\x51\x0b\xed\x89\x6a\x63\x91\x5a\xf6\x51\xa0\x49\x8d\x95\x11\x1d\x8f\x61\x3c\xe5\xcd\xb4\xfd\x86\x56\xdb\x9a\x9b\xfe\xcf\x0c\x11\x5d\x93\x1d\x0a\xa9\xeb\xfc\x5b\x0e\x1b\x52\xab\x27\x66\x47\xe2\x64\x53\x8d\xdf\xac\xd7\x86\x04\x7f\x66\x88\x0e\x77\x01\x98\x63\x95\x0a\x93\x34\xe7\x82\xf1\x56\x54\xbb\x53\xf7\x2a\xb3\xb4\xef\xdf\xf6\x67\xaa\x7c\x20\xaa\xda\x33\x98\x74\xc3\x33\x95\x8a\xfc\x5b\x23\xfe\x69\xbc\x22\xdc\x89\xa4\x13\x6a\xc3\x08\xd1\xfd\x2b\xe2\x76\xd3\x11\xa6\x5a\x9a\xda\x9d\x23\xc7\x0f\x1f\x2c\x39\xe0\x89\x6a\x63\x34\xb2\x92\x97\x28\xee\x22\xc2\x16\xc4\x17\x88\xbd\x72\x59\x37\xe6\x84\x84\x85\xc3\x4e\x3f\x62\x3e\x65\x0e\x26\x25\xf9\xc1\x18\x01\x6f\x71\x67\x45\x67\xd9\x11\xe4\x47\x43\x8a\x68\x91\x51\xf9\xc9\xc0\x8f\xd8\x61\xb1\xda\x9b\xe5\x06\xec\xe2\xee\x61\x12\x21\xaa\x0d\x4a\xb2\x26\x4b\xe2\x1e\x66\xea\x15\xeb\x5c\xfa\xbe\x41\x5d\xd6\x82\x39\x65\xb8\x37\x18\xb2\x3c\x03\x96\x27\xd7\x0e\x77\x73\x05\xe9\x69\x64\xcd\x6c\xb2\xb6\x58\xa3\xc8\xa6\xe7\x6c\x05\x09\xad\x2f\xdf\xd0\x8e\xb3\xb5\x40\x5d\xf6\x89\x2c\x40\x58\xcb\x5a\xd8\x1d\x0a\x09\xf3\xe8\x62\xec\xec\x81\xd6\x7a\x21\x61\xa2\x1c\xe4\xfb\x71\x32\xfd\x05\x9f\x62\x9f\xb0\x9c\x2f\x9f\x40\x9c\x6b\xe5\x7c\x38\x8e\x3f\x8b\xa0\xb3\x60\x27\x07\x98\xa0\xa7\x8b\xf2\x1f\xf2\x57\x71\xb0\xa6\x10\x95\xf2\xd6\x56\x46\xd0\x8c\x9c\x52\x51\xe4\x8f\x1d\x0c\x3d\xfb\xfa\x51\x8d\x64\x8d\xf9\x74\x05\x89\x66\xf6\x33\x46\xf1\xf2\x90\x21\xd7\xe9\xfa\xcc\xaf\x6a\xce\x59\x55\x3b\xae\x32\x57\xcd\xdb\x38\x84\x29\xec\x69\x44\x98\x32\xc8\x74\xb5\x0d\x3d\x4a\xd2\x08\xc4\xd6\xde\xa1\xec\x0f\x89\x49\x80\x14\xcc\x91\xf4\xfe\x80\xc1\x78\x3c\x87\x2b\x15\x52\xf3\xbb\xdd\x83\xbc\x8d\x67\x70\xc4\x10\x41\xd4\x75\xac\x15\x05\x43\x00\xf3\xb2\xac\x86\xc3\x08\x49\x9d\x71\x08\xc6\x7c\x15\x3c\x87\x3a\x08\x9f\x46\xbc\xb7\x51\xfe\x22\x50\xbb\xae\xde\x60\x1c\x30\x1a\xad\x8f\xa1\xa2\xf9\x28\xf9\x0d\x66\x17\x02\xe7\xb5\x72\x97\xad\x54\xca\xcc\x80\x85\x56\xf7\x1d\xa5\xc0\x96\x06\xde\xa6\xff\x52\x12\x82\xc2\xaa\x4c\xad\x91\x23\x6a\xa2\xc5\x9e\x22\xe8\x35\x23\xcc\x49\x24\x6a\xeb\xb2\xf4\x12\x3a\xcb\xd4\xee\x66\x44\x4c\xf5\x7b\x3c\xd1\x04\xc2\x2c\x6a\xb3\x1f\x4e\x40\x3c\xde\xac\x29\x1a\x28\x7d\x88\x78\xd7\x6b\xa4\x06\x2e\x53\x58\x37\xb4\xf1\x8c\x1b\x73\x51\xbd\x21\xd6\x13\xa2\xb5\x59\xaf\xf2\x72\x3c\x16\x03\x2d\xfe\xe7\x80\xda\x19\xdc\x65\x7d\x51\xad\xee\x34\x4c\x16\x37\xf6\xab\xca\x4b\x61\x9f\xad\x06\xc7\xfd\x1e\x72\x1d\x51\xb4\x59\x8a\x57\xcc\xfc\xae\xc7\xa0\x33\x38\xeb\xc4\xe6\x7d\x93\x4b\x36\xea\xf5\x0f\xef\x15\xe2\xe8\xaa\xbf\xb6\x8c\x2c\x0d\x57\x66\x6e\x06\x39\x9a\xfd\x5a\x6a\x5a\x12\xb3\x82\x7b\x6e\x99\x4c\x98\x1c\x63\x7c\xb5\x95\x91\x5e\x74\x6c\x81\xda\xc6\x09\x8c\x46\x0e\x3f\x22\xc7\x82\x75\x48\xb2\xe2\x4b\x9a\xff\xab\x3c\x8e\x90\x39\x84\x50\x2a\x5d\x47\x66\xf1\x35\x64\xc2\x85\x70\x21\x05\x87\x24\x2b\x01\xa7\x5b\x50\x3b\x3d\x46\x11\x6f\xeb\xe3\xe6\x06\xc8\xf0\x14\xce\xc5\xcc\x07\x48\x3c\x3d\xa6\x29\x21\x3f\x7e\x92\x98\x2b\x2b\xf3\xdc\x1f\x15\x36\x1f\x4a\x58\x56\x86\xb6\xd9\xbc\x5a\x3e\x7c\x32\xf0\xc9\x29\x17\x69\x0e\x2a\x5f\x1c\x6a\xab\xd2\x98\xab\xb5\x48\x7a\x8e\xab\xd2\xaf\x14\x16\x2d\x10\x6b\xc1\xf3\x5c\x6e\xfa\x26\xdf\x5c\x5c\x00\x17\x43\x69\xe3\xe1\x44\x82\x18\x63\x17\x66\x18\x90\x14\xdf\x70\xb1\x34\x08\x5e\x97\x46\xe1\x05\x56\x15\x73\x99\x62\x31\xed\x60\x18\x02\x30\x26\x99\x49\x1b\x0b\xbb\x5f\xd7\x8c\xd3\x13\xde\x9e\x8f\xf2\x83\x85\xfa\xb9\xcf\xfb\x58\x7d\x34\xda\xbd\x2b\x31\x94\xfc\x7b\x66\x20\xc7\x63\x98\xdc\x0a\xf2\xcf\xb3\xa8\x26\xbd\x8f\xed\x67\x8b\x31\xe8\x32\x6d\x46\x25\x4d\x3e\xd2\xa6\x82\x61\x26\xf2\xd3\x2c\x32\xee\xbd\x8b\xb4\xf7\xa0\xc8\x99\xa5\xa4\xde\xe0\xe3\x8b\xd5\x99\x0c\x0d\xe3\x67\x57\xa4\x33\xa4\x14\x91\x4e\xfa\xf5\x15\xa4\x90\x40\x3e\xe3\x3b\x21\x72\xfb\xda\x5f\xac\x7c\x45\x98\x74\x41\x6b\x39\xb6\xdd\xcb\xf6\x65\x1c\xd6\xed\xf3\x1a\x8b\xf5\x66\x3a\xb5\xda\x00\xb6\xb9\x33\x9b\x6f\xec\x6b\x8c\x46\xd9\xb2\x6c\xbe\xb1\x28\x11\x89\xab\x68\xb1\x79\xb9\xfe\xa8\xb1\xb8\x26\x1a\xc1\x53\x68\x2d\x92\xaf\x6e\xf8\xc1\x90\xd8\x07\x43\xb5\x90\x48\x0b\xb7\xe7\x50\x2b\x6c\x7b\xb4\x15\xb6\xcd\xab\x5f\x94\xf4\xbf\x67\x91\x2f\x8b\x75\x41\x49\xa5\x8f\xc9\x3f\x4c\xd8\xd1\x2a\xfb\xaf\x45\x64\x19\x0c\xa2\xb1\xf4\x50\xb7\xae\xe6\xbf\xd9\x6a\x43\x8a\x22\xf1\xe4\x2b\x06\x0f\x84\x43\xc2\x9a\xf5\x58\x97\x24\x7b\x0e\xad\xf3\xb5\x4e\x8a\x37\x4a\x79\xbc\x88\xd8\x71\x91\x82\xba\x26\x4d\x5e\xff\xf1\x93\x03\x8e\xf6\x8b\xa7\x8b\x1c\x3e\x89\xce\x0e\xb0\x78\x93\x7c\x3c\x51\xc5\x49\x8a\x06\xc8\x67\x98\xac\x1c\xe8\xfb\xb4\xe9\x38\x63\xd8\x29\x3c\xd9\x64\x8f\x33\xf1\x51\x27\xa1\xff\x49\xa9\xfa\xca\x75\x00\x33\xd7\x8f\x39\x79\x12\x97\x6b\xe9\xef\x0d\x60\x8c\x5b\x93\x5f\x70\xca\xd4\x15\xc0\xe4\x15\x68\x5a\x7b\xf9\x8c\xfc\x5a\xd2\x46\xa5\xb5\x9a\x03\x60\xfa\xc6\x33\x5d\xe8\xd9\xb0\xa4\x66\xab\xd4\x13\xbe\xf8\x00\x4c\xdc\x9c\xa5\xf3\x2f\xad\x0d\x90\xf0\x80\xac\x4c\x0d\x61\xe2\x2a\x3a\xa7\xef\xd9\x3b\xe9\xa2\x6e\x5a\x59\x00\x4c\x5f\x74\x15\x15\x5a\x4a\xe5\x03\x30\x7d\xed\x9c\x83\x53\xae\xb1\x40\xae\x1a\x77\x26\x8d\x6f\x42\xe3\xb8\x20\x8b\x54\x8d\xcd\x2e\x4c\xdf\xd3\x4e\x2c\x1d\x17\x4b\x5e\xab\x4f\x2c\x94\x38\x7c\x89\x72\x4e\xac\xc1\x4d\xdc\x59\xe6\x76\x72\x2b\x6a\x71\x4b\x1b\x9e\x7f\xc3\x3a\xb1\xb0\x2c\x52\x5d\x55\x97\xb5\x00\xe6\x5d\x4a\x4f\xee\xaa\x2d\x1e\xa6\xb5\x6e\xc9\x82\x79\xaf\x02\xc6\x00\x9e\x54\x3d\x50\xaf\x57\xd2\xad\x75\xf1\x69\x07\xc0\x93\x9d\x90\x30\x44\xd8\xc4\x4c\x83\xe1\x72\x80\x3b\xfb\x8f\x1d\x6e\x06\x19\xcb\xf0\xad\x68\x30\xd4\x0b\x5d\x53\xdd\x7e\x29\xe0\x78\xea\xcc\x94\x7e\xaa\xa3\x8e\xb0\xe6\xbd\x35\x17\xbc\x12\x0e\xd9\xd3\xdb\x4e\xc2\x3f\x3b\x03\x90\x78\xf5\xbd\x64\x1f\xdb\x4b\x84\x57\x76\xd2\xb6\xfc\xae\x92\xb6\x2d\xc3\x93\xae\x42\x18\x99\x0b\x73\xa7\x6d\x34\x05\x80\x0b\x4c\x66\xb5\xe5\xbd\x86\xda\x29\x54\x4c\xa3\x49\x6c\x14\xc9\x3f\x48\x4c\x94\x90\x95\x44\x43\x2a\x0a\x1e\x24\x1a\xb2\xc5\xf4\x68\x28\x7b\x8c\x1d\x44\x24\xff\x24\xae\x10\x53\x5b\x7b\x2b\xf9\x8c\x1f\x41\x89\xbd\x65\xb8\x96\x24\xa9\x31\x3c\x83\x83\xe0\xa9\xac\x33\x85\x59\xd7\x91\x7e\x4c\x1a\x21\x7a\x1a\xd1\xe8\x30\x51\xec\xdb\x2d\xcc\x70\x5c\xb1\x4a\xa5\x25\xb2\x8f\xb6\xb6\x01\x0c\x98\x43\x95\x0a\x92\x4c\x73\x0c\x31\x59\x12\x26\x55\x2b\xe9\x63\x75\xf6\x46\x8a\xa1\x48\xf8\x2a\xce\x7d\xc2\xa6\xec\xf2\x9f\x13\x0d\x51\x79\x14\x71\x3a\x21\xe9\xe1\x95\x26\x22\xa7\x31\x0d\xc9\xaa\xb8\x9a\xaa\x59\xbf\xb6\x7c\x43\x27\x6e\xe1\x8a\x2f\xe9\xca\x6c\x34\x62\xc6\xab\x4b\xd8\x53\x33\x2b\xa5\xd0\x63\x34\x3c\xbb\x36\x1a\x95\xad\xa7\x8d\xd0\x61\xe2\x2d\xc7\xe2\x54\x5d\x8c\x98\x23\x31\x9e\xc3\x41\xd7\x67\xc8\x70\xeb\xe4\x3b\xab\x93\xf6\x57\xd4\x5d\xf2\xa3\x53\x0e\xa8\x0d\x10\xed\x85\x74\xd5\x15\x8f\x0c\xc6\x66\x2b\xdd\xfe\xa5\xa4\xe5\x37\x98\xf1\x53\xf8\x22\x6b\xba\x4c\xab\xc2\x92\x3d\xcb\xe0\xa6\xc8\x28\x83\x5a\xb1\xfb\x8a\xa2\x31\x50\x35\x89\xab\x38\x10\xf7\xcb\x12\x75\x88\xb5\xd9\x98\xb3\x55\x56\x20\x34\x52\xd2\xd1\x49\x15\x64\x0d\x29\x27\x88\x4f\x45\x17\xd7\x68\xda\xd5\xb5\x63\xf6\xaf\x9a\x16\xd0\x67\xbd\xcf\x9e\x70\x8d\x9d\x53\x69\x7c\x99\x3d\x49\x7b\x5f\xf5\x55\x6e\x28\x8e\x3f\x45\xd7\xde\xe3\x64\x8f\x9f\xb2\x2d\x1e\x73\xba\x9c\x36\x64\xde\x7e\x9f\x75\x4d\xf7\xa5\xd3\xba\xb2\xc2\x5e\x27\xf1\x16\xdd\x5e\x1d\x46\xec\x78\x3f\x3c\x73\x3c\x21\xee\x67\x54\x84\x06\x95\x75\x75\xfa\xb0\xce\x6a\x89\x83\xde\x38\x6b\x80\x6c\x4c\x8c\x27\x28\x76\x4d\x03\x46\x7d\x58\x46\x35\xd5\x54\xa5\x22\x1f\x3d\x65\x74\xc7\x95\x4a\xb9\x9c\xd6\x20\x89\xbb\xfb\x4c\xaa\x46\x01\xe8\xba\x12\x28\xc7\xa3\xf0\x6c\xa8\x72\x66\xe7\xdc\x74\xca\x1e\x8b\xd4\x09\x35\x31\x12\xfa\x9c\x36\x59\xa3\x3d\x4b\xc7\xed\x5a\x2b\x15\x37\xa7\xcf\xa3\x11\xaa\xa5\x91\xd1\xae\xf5\xeb\x09\x9b\x04\x6b\x27\x2b\xbc\xfd\xf5\xdd\xf5\x31\xcc\x45\x11\x22\x30\x67\xae\x02\x64\x3e\xa3\x65\x2f\x90\x5f\xd5\x76\x1b\x25\x34\xa6\xeb\xb1\xd0\xcc\x34\x3b\x3f\xdc\xcd\x35\xb5\x9a\x74\x79\x34\x4e\xdc\xbc\xe5\xec\xd4\xc2\xd8\x81\x33\x57\x18\x92\x6d\xdb\x61\xe4\x8f\x44\xc2\x36\xa3\x52\x71\xad\x5b\x98\x01\x22\x98\xac\x88\x1b\x1f\x87\x73\x77\x47\xdb\x49\x94\x3d\x8f\xd5\x38\x1f\x1e\x8d\x76\x7f\xb4\x9c\xb0\x80\xd8\x53\xb7\x7f\x8f\x46\xd9\xab\x2b\x35\x90\x14\x45\xc8\x3e\x24\xbb\x42\x5f\x7d\x20\x48\xc8\x9a\x05\xbd\x93\x56\xc9\xdb\xe9\x5e\x51\xef\xd4\xd1\xd1\xda\xd8\x99\x30\xda\xcb\x2a\x77\xc6\x02\xcf\x02\xbd\x3d\xa4\x5e\x52\x61\x0d\x49\x02\x71\x69\x2c\x0d\xd4\xab\xbc\xec\xca\x21\xaa\x37\x2e\xf3\x88\x4b\x21\x86\x08\x80\xd1\x08\xa7\xb5\xc8\x19\x05\x35\x5b\x64\x4d\x0a\x72\xcf\x2f\x48\xbc\x3b\xb4\x95\xb9\xb1\x69\xbc\xbe\x46\x28\xec\x32\x1a\xe7\x9c\x43\x72\x27\xc5\xee\x45\xca\xc2\x23\xbe\x24\x49\xde\x5b\x24\x1e\x32\x52\xf1\x36\x30\x7d\x44\x34\x3e\xe8\xcc\x75\x80\x92\x64\x4e\x0a\xf2\x91\x6c\xc2\xb5\x25\x2f\xcd\x49\x54\x36\x25\xd7\xa8\x8c\x48\xe5\xd4\xc9\x87\xe4\x0b\x4f\x94\x73\xca\x11\x9d\xe4\xe7\x53\x9b\x4d\x19\x21\x99\x33\x60\x61\x02\xd2\x09\x30\x22\xec\x93\x8a\xb0\x6c\x9a\xca\x49\x8a\x73\x9b\x88\xcf\x85\x79\xaa\x06\x02\xfb\x76\x81\xc9\xe3\xad\x8d\x96\xb6\x70\xd5\x81\x20\x97\xb7\x80\xc5\x1d\x93\x8f\x30\xc0\xa2\x4b\xf3\x4d\x8c\xd4\x2a\xe0\x8b\x40\x09\x54\xdb\xb5\xb2\x72\xcb\x74\x34\x12\xf6\x69\x13\x16\xaf\xd8\x27\x6a\x1d\x46\x83\x8f\xa3\x35\x71\xe1\xbb\x8a\x98\x2f\x60\x97\x25\xef\x48\x58\xf2\x8e\x44\xce\x34\x8e\x9e\x1d\xae\x0e\xfc\xee\xc7\xd1\x9a\x18\x5f\x97\x01\xa9\xb2\xce\xc8\x50\x4b\x6b\x03\x4c\x56\xb2\xf2\xb0\xb8\x6b\x31\x75\x2f\x6a\xd7\x22\xca\xbe\xec\xf8\xc0\xef\xf0\xb1\x51\x84\x25\x3c\xd2\xa9\x01\x71\x99\x78\x5b\x3d\xcb\x25\x5c\xfe\xf0\x30\x35\x3c\xac\x60\x78\x10\x1f\x9e\x9c\x76\x51\xee\x71\x59\x6e\x8e\xda\xf0\xa1\x52\xc9\x41\xc2\xae\xdc\x9e\x3b\x73\xb6\xd5\x46\x0a\xb1\x66\x3f\x73\xf0\x0e\xad\x83\x37\x79\xa2\xb1\x48\xaa\x8d\x66\x1d\x40\xdf\x6b\xec\xf5\xf7\x91\xbd\xfe\xfc\x3c\x08\x5b\x7e\xb5\x61\x1f\xc1\xfd\xb6\x45\xc3\x89\xd3\x36\x82\xcc\x9c\xa7\x43\xe5\xf6\x2a\xda\x92\xf5\xc6\x44\xa3\x0d\xde\x9d\x48\x87\xbc\x71\xeb\x10\x6b\x5b\x23\x79\x02\x01\x2e\xd3\x42\x0b\x97\x18\x70\xcf\x15\xf6\x79\x43\x1d\xd2\x26\x4a\xda\x95\xed\x0f\x02\xd7\x69\x09\xe3\x0e\xd9\xaa\x34\xed\x68\x3b\xa0\x86\x19\x5a\x75\x87\xa2\x8a\x40\x96\xee\x78\x41\x2d\xec\xf5\x22\xc4\x96\xc2\x41\x35\x8a\x61\xd8\xf3\x3a\xf3\xfa\x9b\xb4\x69\x99\xeb\x3d\x11\x25\x12\xe6\xa3\x9a\x9e\x93\xc1\xa2\x05\x7b\xbd\x6a\x32\x63\xb3\xb3\xcf\xfa\x5c\xa9\xb8\x76\xe6\x0e\x18\xf3\x7f\xf1\x4a\xce\xb3\xc0\x54\x3b\x26\xe9\xca\x13\xe0\x69\xf1\x3e\x3d\x23\xae\xa4\xec\x32\x8b\x96\x33\x6f\x2b\xdd\xc8\xa4\x26\x58\x6e\x13\x9c\xb7\x16\x2e\x09\xab\x3b\x4f\x06\xc3\xf4\xa3\x78\x69\xb7\x60\xe9\x1a\x15\x9f\x90\xad\x77\xd1\xc4\x2e\x8a\x37\x55\x33\xf4\x30\xd5\xee\x96\x5b\x65\x79\xad\x4e\xe9\xb4\xae\xc2\x56\x1c\xcc\x76\x92\x77\x22\xc4\x0e\x9b\xe3\x5e\xb9\x2e\x7c\x28\xde\xb7\xea\x1a\x5c\x68\xcd\x70\x58\x7e\xa6\x0f\x6b\xcc\x8f\x4e\x01\x97\xa2\x15\x44\xa4\xef\xe1\xe7\x86\x84\xe1\x55\x54\x5b\xf5\xe9\x29\xa3\x78\x2a\x21\x63\x4f\x05\x09\xf4\x61\x04\x87\x30\x80\x1d\xc3\x31\xb2\xc5\xcf\x50\x7f\xe0\xa6\x2f\x41\xf7\xee\x05\xd1\x19\xcc\xb8\x14\x20\x44\x52\x4f\xfa\xef\x03\xeb\x1d\x3f\x42\xa5\x7a\x53\x57\xe7\x35\x12\x32\x9b\x3d\xce\xbe\x47\x6a\xc9\x9b\x38\x18\xc5\x3b\x03\x2c\xdc\x70\xf8\xb2\xab\x7a\x7b\x3e\x0a\x60\xe0\x29\x3b\x97\x1e\x0d\x57\x79\x05\xbc\xa0\x1b\x01\xe8\x0e\xbd\xc0\xf3\x32\xf5\x2f\x06\x4d\x52\xcb\xbb\x14\x9c\x0f\x80\x09\x39\xb6\xe8\x52\xaf\x0e\x7d\xcf\x71\x40\xd3\xf7\x02\x48\x8c\x4d\x14\x49\xd8\x19\xd3\xf9\x5c\x16\x47\x6a\x8a\x45\xc2\x44\x76\xd0\x2c\xdb\x15\x69\x19\x6e\x96\x5a\x74\x5e\xd0\xe4\x88\x65\x25\xcc\xdc\x5b\xce\xa2\x7e\xa6\xef\x3e\xfd\xb1\x65\x48\xed\x76\xe4\x54\xf5\x30\xe9\x7e\x02\xb3\xfe\x51\xc1\xfa\x2c\x64\x86\x90\x72\x92\x06\xc2\xe3\x9f\xb6\xcd\x8e\x8d\x2e\x4c\x7f\xdd\x0e\x97\x86\x2c\x73\x0d\xc5\x24\x45\x3a\x68\x66\xac\x48\x44\xb2\x76\x01\xd9\xd8\x03\x25\x3d\xe3\x55\x14\x0e\x19\x70\x1b\x68\x37\x98\x13\x74\xd5\xd8\xd3\x9c\xb1\xff\xb9\xb7\xbc\xba\x96\xc7\x9a\xfc\xaf\x83\x48\xd7\x69\x26\xcc\x6c\x84\x99\x87\x24\x3d\x30\x06\x42\xfd\xca\x7c\xca\x78\xdd\x2e\x80\x39\x6a\xc8\x6d\xae\xbc\x1d\x5a\x6d\x6a\x00\x77\x41\x26\x3b\xba\xab\x49\x85\x82\x84\xb0\x5c\x25\xab\x4b\xd5\x80\xec\xb9\xa7\xf1\xb0\x54\x9f\x1f\xac\xe1\xc8\xd1\x59\x0b\x41\x4a\xa8\xac\x95\xa8\x97\xe8\x82\xcb\x94\xf0\x2e\xef\xf7\x1c\x90\x77\x86\x35\xb6\x06\x2a\x98\x28\x6f\x7f\x97\xa6\xdd\xc7\xf4\xd0\x3f\x96\x3b\xf4\xba\x1d\x3d\xf0\x8f\x37\x13\xae\x50\xbd\xc7\x27\xb5\xd7\x10\xed\xf5\x30\xc1\x51\xdf\x7d\x5c\xd3\x72\x7d\x86\xb9\x83\xad\xd6\x2e\x08\x1f\x87\x8d\x7a\xbb\x9d\x33\x8f\x52\xfa\xde\x1f\xad\x91\x8e\x5a\x41\xdb\x98\x4a\xe3\xa5\x1b\x86\x3b\x46\xdd\xe2\x63\x1e\x0b\x4c\xcd\x89\x98\x8a\x3d\x90\x6a\xea\x26\x7a\x2a\x42\x6f\xe8\x92\xbc\x49\xd5\xf6\x29\x21\x3c\x49\x7d\xa5\xf5\x7c\x4e\xa5\x91\xac\xc9\x49\x52\xa5\xd7\x14\x1c\xbc\xc3\x41\xe3\x82\x87\x00\x98\x98\xb8\x02\x25\x8d\xe1\x79\xbb\xe5\x6b\x0d\x33\xa9\xaa\xb3\x8d\x3a\x44\x35\x56\xf7\x50\x4d\x86\x00\xa8\xe7\x52\x64\x16\x3d\xbb\x6d\x55\xe7\xee\xd4\x38\x36\x76\xc3\x9c\xf0\xa2\xb4\xd6\xe1\x0b\x26\xa8\x54\x34\xe4\x5a\x54\xd7\x30\x8c\xf8\x23\xb3\x91\x5d\x1d\x36\xea\xb0\xb1\x1b\x36\x3e\x92\x4b\x79\x96\x70\x93\x95\xf0\x12\x7d\x34\x66\x3d\x42\x87\x52\xe8\xa1\x89\x66\x4e\x50\x4f\xec\xca\x8d\x21\xba\xab\x5d\xa9\xd8\xbf\xf4\x29\x91\xcf\x64\x81\x37\x25\x96\xf2\xc8\xa5\x2f\x4c\x80\x72\x1a\x65\xef\x99\x99\x7b\xa5\xfc\xe3\xdd\x13\xbb\x73\x91\xdb\x9d\x40\x6e\x77\x0a\x39\xa2\x2e\x74\xe2\xd6\xf2\x70\xcc\xbf\xfd\xe1\xc8\x0a\xb7\x50\x09\x7e\x94\x1d\xfb\x49\xf7\xa4\xa8\x52\x71\xc5\xe3\x2c\xbf\xdb\xd5\x19\x84\x7f\x64\xeb\xb7\xeb\xb4\xda\xf6\xd5\x56\x72\xab\xd8\x4f\xba\x6a\x71\xe9\x5b\xd7\x50\x96\x53\xc8\x46\x9e\x76\xf3\x5c\x54\x4e\xc4\x45\x87\xa9\xfd\x6c\x96\x6e\xc4\xb7\xb9\x30\x1d\x15\x76\x71\xbb\xbd\xd2\x75\x8a\x8a\xd2\x3d\xd2\x1f\xd3\x5d\x4a\x14\x12\x1e\xe6\x50\xe2\x69\xa1\x25\x29\x5b\x06\xd3\xd9\x85\x61\x6e\x7a\x11\xcc\xa8\x1a\xd3\xfc\x26\x63\x83\x02\x67\x51\x57\xe4\x38\x0e\x01\x73\x28\x2f\x14\x32\x5d\xa4\x2e\x03\x4d\x3a\x45\xf3\x2b\x70\x2b\x9a\xd9\xb4\x86\xa5\x9c\xf6\x99\x9b\x36\x6d\xd1\x9a\xe2\xa1\x2b\x75\x0a\x59\xe5\x25\x50\xbd\x4c\x20\xa4\x6f\x8b\xa9\xb1\x4d\xa4\x53\x99\x3a\x4d\x32\x75\x69\xb2\x5c\x30\x84\x89\x97\xc8\x5a\xdf\xca\xac\xdb\x2a\xb0\x48\x9b\x4a\xda\x16\x6a\x53\x0a\x13\x5f\xe7\xf2\x90\xa6\x66\x4b\xca\xa0\x3f\xeb\x4e\x34\x8e\xdf\x78\x14\x5d\x1c\x8c\xd3\x92\xae\xf4\x4f\x99\x55\x23\xe7\x4c\x4a\x91\x1a\xdc\x90\xe9\x50\xf8\x58\x16\xae\x87\x8d\xca\x79\xd2\xc3\x16\x7b\x1d\xa8\x4e\xcf\xc5\x5f\x73\x45\x17\x07\xa8\xad\x6b\x7f\x10\xb8\x93\x76\x7b\x34\x83\x69\xe9\xb4\xe1\x45\xa9\xe1\x85\x49\x6d\x78\x91\x96\x52\x4d\xfa\xc4\x7e\x8a\x6b\xb5\x42\xe4\x99\x8d\x3c\xca\xe2\x8e\xa6\xa2\xce\x40\xb1\x60\x12\xf7\x23\x3d\x45\x39\x8a\x4e\x63\xef\x49\x73\x68\xd6\xc6\x72\x0c\x20\xf1\x64\x84\x66\xe1\xef\x3c\x7e\xc0\xca\xeb\x21\xda\xbc\x02\x4c\x9f\x60\xad\x51\x46\x90\x24\x9e\x0e\x70\xf9\x6e\xc2\xa0\x85\xdb\x19\xa7\x70\xd2\x38\x49\xb7\xe2\x39\xfd\xce\x36\x24\xc9\xde\x52\x2d\xe7\x45\x7d\xdf\x9d\x78\xd6\x31\x1a\xed\xa9\xdb\xbf\xd3\xfa\xf2\xe7\x07\x4f\x49\x15\xb5\x7c\x3b\x5d\x98\xef\x20\x91\x37\x33\xcd\x8f\x4d\xca\xb5\xe4\x2f\xf3\x3c\xbb\x1e\x9f\x58\xd5\xf1\x03\x3c\x93\x7e\xdb\x9c\xc6\x65\x22\xa1\xd8\xfc\x91\xb3\x6a\xc5\x8a\xc0\x3a\xca\xdc\x6b\xc2\x9c\x37\x18\x4a\x89\x98\x1a\x92\x46\xb3\xda\x80\x44\xaa\x51\xfc\xee\x69\xbe\xf2\x25\xe3\xe2\x42\x66\x56\xf3\xcc\x12\x4f\xb8\xa9\x75\x73\x6d\xe9\x2f\x08\xe4\xdb\x75\x56\x7f\x41\xd4\x84\xb3\xec\xeb\xa0\xd4\x60\x6f\x67\x1c\x2c\x61\x30\x81\xa5\x89\xba\x9d\x7e\x6e\x98\xec\x0b\x02\xb0\xdc\xb0\x11\x11\xb7\x29\xe9\x0d\xb5\xe5\x2c\x1d\xfc\xbf\x4b\xfb\x9f\x3b\xb8\xdf\x81\xce\xe1\x67\x8f\x3d\xbf\xe4\xb4\x6b\x98\x74\x82\x61\x17\x45\xf1\x03\x21\x12\x76\x85\xa3\x13\xeb\xc2\x77\x52\x2f\x0c\x86\x93\x7b\xb2\xe8\xe6\xcc\xf4\x2c\xdd\xca\x23\xb8\x25\x7f\x39\x2b\xf2\x65\x98\x69\xf2\xda\x2d\x35\x53\xc7\x0f\x6c\xaf\x86\x22\xf1\x38\x6b\x92\x98\x92\x6c\xb5\x49\x40\x3a\xbd\x96\xac\xf1\x5e\xe5\x67\x39\x58\xb9\x98\xea\x4d\xbd\x18\xd5\xe3\x46\xdc\x74\xf3\x3f\xcc\x86\xec\x6c\x62\x71\x8c\x69\x5a\xd5\x9b\xc7\x1d\xad\x77\x5c\x1f\xfb\x48\xe2\x1d\x57\xa3\xfe\x98\x39\x10\xb0\xa4\xbb\xe0\x64\x74\xa1\x38\x28\x48\x3c\xc7\x70\xa2\x6d\x4b\x52\x1c\x4e\x99\x92\x18\x0f\x17\x54\x1b\x22\x5a\x0f\xbb\x3a\xdb\x72\x5e\x90\x7e\x25\x70\xcf\xef\xbc\xd2\x15\x7e\x50\x7d\xcc\x42\x7f\xc8\x42\x71\x2d\x25\x22\x4a\x4d\xf0\x01\x20\x89\x69\xaa\xb9\xaf\x98\x30\x53\xa9\xa3\xef\x77\x2d\xef\x26\x20\x61\x51\x7c\x8f\x2d\xa5\xdc\xc1\xcc\xf0\x8a\x3a\x5e\x34\xf9\x6f\x4f\xed\x67\xd5\xd6\x3b\xd7\xd9\xae\xc0\x3f\x6e\xae\xc0\xf9\x39\x4a\xbf\x75\x8d\xf9\x79\x52\x64\x50\x63\x93\x8f\x87\x61\x7d\xf9\x7e\x42\xf4\x9d\x5c\xd2\x9d\x42\xd2\x4b\xc8\x23\xb5\x9c\xeb\x64\xf5\xe6\x43\x14\x6c\xf9\x14\xfb\xd5\x4e\x48\x18\x0d\x83\xc8\x8b\x9d\x3e\xc7\x78\x05\x38\x62\xcb\xe1\xd9\xc3\x5d\x07\xc0\x47\x9c\xf6\x23\x5a\x41\x2b\xca\xdb\xc3\xcd\x97\x03\xb5\xdc\x2a\x40\x47\x39\x68\xad\x6f\x29\xf6\x47\xe1\x82\xba\x7f\x4b\xf3\x41\xae\x49\x48\xa6\xfb\xf8\x98\x73\xe2\x47\x9e\xe6\x60\x7f\xc8\x8f\xd8\x93\x61\xc8\x2a\x15\x37\x3e\xf6\x97\xd5\x57\x57\x3b\x29\xa9\xa9\xe5\x53\x1b\xd0\x90\x85\xfc\x23\x50\xce\xca\x23\x11\xec\x54\xc1\x1e\xad\xad\x46\xea\xe1\x99\xa6\x8e\xd1\x88\xd6\x56\xc3\xcf\xe6\xa4\x9e\x41\xcb\xa7\x30\x4b\x7d\x00\x30\x8b\x46\x89\x4a\x2a\x8d\x98\x68\x4c\xc1\x5e\xfe\xeb\x4d\x4e\x19\x7b\x59\xa5\x22\x16\x85\x90\x75\x96\xd6\x06\x68\xaf\x10\x90\x98\x46\xd4\x7a\x85\xcd\xf8\x71\xdc\x8a\x50\x33\xb6\x0d\xe7\x95\xa7\x0f\x5c\xc8\xf2\x70\xb4\xc4\x47\xfa\x29\x24\xc2\xd0\x90\x1c\x0f\x29\x9a\x27\x0e\x03\x07\xfa\xda\xb3\xc5\x93\x98\xf0\x73\x65\xd4\x6c\x39\x54\x7a\xbd\x4d\xac\x10\xa7\x0d\x79\x72\x53\xaf\x0a\x67\x56\xaf\x29\x5a\x49\x32\x91\xab\x49\xcf\xad\x4e\x42\x27\x25\xb0\x30\xce\x0f\x62\xff\x1c\xb1\x82\x93\x6a\xf1\x51\x0d\x7f\x81\x01\x87\x38\xfc\x55\x2a\x65\x62\xe5\x13\x7d\xd3\xb6\x74\x1e\xa3\x43\xd4\x76\xac\x07\xea\x39\x2e\x3f\xec\x4a\x1d\x30\xc7\x5c\x54\x3b\x29\xd3\x0e\xd1\x70\x55\xb8\x0f\x73\xb1\xd0\xce\x8e\x4d\x9f\x91\x22\xd1\x02\xdf\x1b\xc3\x81\x65\x96\x6b\x3d\x07\x70\x13\xae\x41\x52\xf2\xaa\xd4\x00\xdb\x1b\x41\xc6\xbb\xad\xde\x79\xa6\x34\x2f\xbd\x5a\x6f\x01\x81\xf8\xb1\x53\x06\x87\x04\xd1\x19\x04\x4e\xfa\xdd\xae\x48\x17\xcd\x47\xee\xf4\x89\xa6\xb9\xbe\x1c\xb2\x47\x23\x9a\x38\xb1\x8c\xc7\xe3\x34\xb9\x16\x79\xff\xd0\xf6\x43\x79\xee\xda\x26\xd8\xf0\x3b\xd9\xed\x21\x5d\xa1\x30\x65\x4f\xf5\x38\x7f\x4d\xc0\x98\x9c\x4b\xcc\xe5\xe7\xd1\xbe\x1f\x1d\x09\x4f\xa3\xae\x57\xae\x43\xa4\xe7\x8d\x4b\x9c\x7a\x0a\x55\xe8\xac\x1c\x1f\x2f\x3c\xdd\x81\x0c\x8c\xe7\xa6\xcc\xb9\xed\x11\xc6\x42\x0b\x4d\x2b\x62\x1a\x50\xf3\x3d\x25\x3b\x22\xf6\xd8\x66\xbd\xe9\x4c\x5f\xab\x14\x08\xbe\x98\x73\x46\xd7\xc3\x04\xec\x11\x6b\x98\xe8\x6e\x65\x3a\xdb\x0a\x27\x32\x4a\xc9\x94\x15\x3e\x79\x11\xe6\x2d\x7f\xa2\x1e\xd1\x8c\x61\xfa\x53\x33\x7f\x63\x40\xc2\x43\x1a\x73\x9d\x5a\x4a\x0b\x6e\xde\xde\xb6\x06\x3e\x8d\xd0\x61\xc2\x5c\xd6\xaa\xb7\x61\xa3\x0e\xda\x90\x78\x8d\xbd\x64\x9f\xb6\xad\x97\xcf\xe2\x3c\xaa\xf5\x78\x76\x09\x22\x4b\xcc\x59\xf1\xfb\x2c\x69\x04\x6f\x4f\x1a\x49\xb8\x6a\xb9\x67\x89\x24\xe1\x20\xfa\xfd\x3c\x29\x4c\x78\x79\x7f\x3f\x64\xb8\x9c\x87\xd1\xf7\x61\xf0\xb2\x95\x7e\x50\xc7\x10\xea\xa5\x98\x62\xcc\x35\x8a\xfc\x6e\xe4\xca\x7d\xa1\x16\x5b\xb7\xcb\x47\xe7\xa2\xf0\xa4\x02\x26\x97\x03\xee\xc7\x2c\xa5\x5e\x85\xdf\xfb\x0c\xa5\x2a\xfc\xa0\xce\xce\xfd\x18\xbb\xfb\xe6\xfb\xf0\xc1\xba\x3c\xdc\x0e\x2d\x9b\xc3\x71\x27\x40\x3e\xcd\xbc\x61\xca\xf3\x02\x37\xe9\xd4\x2d\xac\xd2\xe4\x2b\x16\x7b\x97\x16\xe7\x65\x71\xb0\xd1\x87\xe8\xf1\x96\x8e\x93\x7d\x11\x8e\x3f\x5a\xc8\x11\x6b\x70\x34\x23\x0f\x9a\x16\x99\x2f\x35\x29\x46\xac\xa1\x09\x47\x2f\xa9\x01\x12\x3a\x3a\xeb\x2e\xdc\x78\x9f\x1a\x0b\xef\x58\x79\x86\x16\x2d\xbe\xed\x95\xeb\x10\x7b\xe5\x06\x0c\xf5\x0c\x32\xba\x66\x76\x53\x1f\x46\x1e\x6a\x1d\x17\x1e\xb9\x6b\x98\x49\x4b\xa0\xb6\x0b\xf6\x96\x5d\xe2\xb9\xbe\x17\x09\xdb\x17\x17\x80\x5a\x37\x24\x08\x88\x63\x9b\x78\xc5\xe8\x2b\xf7\x54\xb0\xcc\xf8\x11\x50\xee\xaa\x5c\x40\x05\x7b\x79\x93\x60\xef\x58\x5a\xc3\x0c\xc1\x3a\xe6\x28\x84\xde\x70\xac\xc2\xce\xaf\x73\x04\xc8\x68\x24\xfd\x0a\x47\x35\xd9\x8f\xd1\x48\x43\x2e\x30\x39\x85\x53\x2b\xd6\xa7\xe1\x99\x52\x38\x8e\x03\xea\x8a\x3e\x5a\x5d\x06\xeb\x32\x0f\x41\x67\x4a\xfc\x90\x78\x90\xd2\x90\xba\x8e\x8a\x01\x52\xf2\x19\x5f\x3d\xac\xc4\xc2\x92\x88\xf1\x3f\xec\xb0\x21\x45\x25\xc2\xc5\x16\xde\xe5\xe5\x00\x19\x33\x34\x07\x8c\x5d\xcb\x95\x8e\x51\xdb\x10\xe1\x19\x57\x86\x9a\x36\xa6\x1e\xac\x86\xa3\xff\xe0\xb3\x0c\x5c\x02\xc6\xdb\x58\x5b\x82\x76\x8e\xc5\x81\x86\x0e\xcb\xea\x3c\x92\xbf\xee\xf4\xf1\xf5\x69\x41\xa3\x35\x49\xaa\x2e\xd9\x82\x78\x32\x99\xba\x4d\xe0\x84\xd9\x1c\xc8\x5b\xe2\xf8\x43\xba\xfd\x60\xd1\x2d\xb5\x82\x85\xbb\x08\xee\x12\x81\xc1\xb9\x2c\x8c\x3d\xda\x92\xde\xaa\x64\x37\x70\xac\x6b\xb4\x3c\x15\xcb\xb9\xc2\x96\x57\x92\xd0\xab\xef\x0d\xf7\x61\x2d\x3e\x87\x79\x9e\x8d\x71\x2b\x6c\x43\x62\xb4\x97\xda\xf3\x62\xb9\x91\x74\x7c\xa8\xb3\x13\x88\xef\xd3\xa2\x31\x37\x15\x74\xb2\xb7\xf9\xe4\xba\xa1\x5b\xf0\x61\x3c\x61\xdd\xf0\x43\x52\x55\x3e\x4f\xac\xe2\x5e\x75\x40\x51\x24\x63\x6a\x3c\x5c\x42\xff\xf8\x4b\x48\x07\xaf\x66\x9a\xf9\x57\x2a\x0e\x9f\x70\xe7\x7e\x10\xee\x12\x1d\x22\xf9\x3a\xe2\x70\xef\x98\x24\x9b\x9d\xa3\xe0\xad\xc4\x8e\xf8\xe0\x84\x0f\x99\xa7\x67\x8e\x3e\xcd\x0e\xd5\xa7\x44\xf8\x33\xbe\x12\xb3\x29\x26\xea\x1f\x74\x2a\x98\x9c\x46\x34\x42\xb9\x01\x00\x55\x58\x9d\xc7\xe0\x47\x8a\x22\xe8\xec\x81\xa9\x68\xc2\x22\x57\xab\xe5\xa4\x3c\x52\x65\x02\xa1\x3d\x8c\x14\x98\x17\x29\xf0\x5e\xc2\x02\x0a\x4f\x95\x79\x01\x02\xff\x79\xc2\x02\x52\xf4\x99\x21\xa6\x32\x4e\xdf\x7d\x8a\x10\x78\x4f\x81\x00\x0d\x6d\x8b\x4e\x70\x56\xcb\x53\x31\x0b\xd0\x96\xc3\x04\x16\x47\x01\x4c\xaf\xa4\xc9\xc1\xb4\xfe\x51\x62\x06\xe6\x87\x52\xcb\x84\x11\x4c\x44\x50\xfb\x67\x8b\x25\x78\xdf\x23\x06\xda\xb1\xd3\x26\x84\x10\x9c\x2d\x62\xa0\x0a\xfd\x27\xd9\x43\x3b\x37\x18\x60\xc1\x24\x5a\x81\x5c\x9c\x74\x28\x41\x2b\x50\xe0\xc4\xd2\xda\x08\x20\x2e\x3f\x31\xfb\x51\x11\x5b\x30\xd9\x96\xbe\xa1\x7e\x50\xb1\x05\x27\x45\x07\x4c\xc6\x1c\x4c\x22\x5a\x10\x7a\xd0\x30\xbb\x82\x60\x84\x7b\x2c\xff\x85\xf7\x3d\xc6\xe0\xfd\x89\x21\x98\x8e\x8a\x64\x47\x17\x4c\x31\xb3\x98\x83\xc6\x79\x04\x23\xb5\x2a\xcb\x77\xe2\x65\x06\x3f\x1b\xbb\x2f\x27\x36\xa1\x88\xd9\x17\xc7\x36\x34\x39\xe3\x68\x87\xed\x49\x01\x0c\x67\x8b\x48\x98\x0c\xdc\xf7\x98\x24\x87\xdd\x26\x70\xdf\x9e\x69\x81\xfb\x76\xc3\x3d\x53\xc3\x01\x7e\x64\x6b\x81\xff\x72\xea\x7b\x28\xbb\x3d\x94\xdd\x1e\xca\x6e\x0f\x65\xb7\x87\xb2\xdb\x43\xd9\xed\xa1\xec\xe6\x50\xe4\x77\x43\x12\xac\x19\xe9\xe1\xa1\xcc\xf6\x2f\x2f\xb3\x6d\x21\xd8\x72\x32\xb2\x72\x8e\x38\xb6\xad\xd8\xbc\x5b\x50\x51\x6e\x3d\xf6\xee\x36\x62\x07\x7e\x80\xd4\xa0\x0b\xfb\xfb\xc7\xba\x1f\x7d\x2c\x2c\x54\x83\x72\xf9\xab\x7b\xd6\x56\x77\x66\x74\x9c\x8f\x43\x61\xba\x2a\x6c\xba\x60\xab\xd1\xe0\x25\x1c\xd8\xda\xf5\x31\x38\x39\x46\xad\x71\x27\x96\x58\x53\x0e\x74\x8c\x0d\x9f\xa2\xc9\x46\x3d\x16\x47\x67\xa8\x90\x53\xdf\x47\x2d\x22\x83\x5c\x48\x47\x3e\x97\x90\x5a\xa9\x96\xac\x85\x3d\x3d\xba\xf9\xe3\xd0\x09\x70\xa2\x9f\x0a\xa9\x59\xbb\x5a\x72\xe4\x7a\x4d\x04\x5a\xb7\x37\xd5\x19\xea\xa8\x56\xe3\x02\x6a\xa1\xb4\xf3\xfa\x3b\x24\x01\x12\xb8\xa5\x7a\x6c\x35\x37\xb9\xc7\x56\xaf\xa3\x81\x4f\xe2\x7e\xd7\xa1\xb6\x48\x5e\x1e\x32\x26\x05\x35\x9e\x28\x2c\xfc\x02\x75\x18\x91\x06\x92\x25\x65\x9c\xe8\x6c\x61\x12\x65\xc9\xea\x32\x93\x15\x37\x60\x6e\x88\x3f\x8b\x9d\xd8\x9d\x2f\x99\x7f\xd7\x5e\xb3\x7e\xf2\x9a\x3e\x36\x39\x6c\xbc\xda\x97\x62\x7d\xfd\x24\x2e\x3f\xdb\xc8\x15\x47\xc3\x2f\xac\xb6\xd5\x32\x67\xa3\xf4\x85\x83\xe0\xd8\x79\x3b\xac\x16\xb6\x12\x82\x42\x22\x97\x62\xc1\xc5\x19\x2c\x0a\x31\xd9\xee\x2d\xdc\x7e\x71\xc8\xfd\x64\x5b\x93\xcf\xdf\xd0\x5e\x7e\x93\x26\x50\xee\x1b\x39\x67\x73\x35\x99\x5c\x74\x22\x5d\xd3\xd7\x8c\xb8\xf3\x51\x7e\x48\xb4\x27\x28\x29\x4d\xe8\x21\xb1\xff\x14\xf7\xbc\x68\xd5\x4c\xa0\xfe\xa4\xd9\xa5\x20\x68\x4e\x3d\xbb\x92\x87\xc8\x78\x42\x66\x21\xe6\xdc\xf1\x4c\xd3\x77\x5e\x3f\xa7\xf0\x40\x75\x20\x9e\xad\x63\xf9\x21\x53\x0d\xcb\x18\xb2\x90\x2f\x8f\x00\x31\x71\xec\xee\xf5\x92\x5f\x28\x55\x97\x6f\xa9\x0f\xfe\x00\x33\x3f\xc0\x9f\x4d\x15\x8a\x06\x28\x08\x3a\x7d\xd4\x39\xe5\x40\x47\x0c\x95\x33\xcb\x86\x54\x14\xd6\x75\xea\xb6\xd4\x80\x8e\xd8\x7e\x33\x39\xe3\x67\xef\x8e\xc9\x99\xb4\x87\x97\x93\x1b\x3f\x69\xd2\xb9\x22\xb6\x26\xee\x49\xf9\xd7\xc2\x50\x9a\x26\x77\xd2\xf6\x97\x97\x49\x47\x76\x34\x59\x63\x6d\xcc\xa4\x0d\x41\x64\x35\x3a\x8f\xc2\x23\x87\x0e\xa4\x68\x16\x84\x2a\xa7\xb4\x26\x02\x13\xe5\x9d\xd2\x89\xbf\x4a\x8d\x8b\xfa\xf8\xa4\x3e\x66\xf1\x6f\xb1\x4a\x41\x76\x3c\x96\x49\x75\x59\xa3\x7b\x99\x80\x53\xea\xc4\xa4\x88\x82\x49\xa5\x84\x3e\x30\xc8\xc5\x35\xdb\x66\xf0\xb1\xc4\xa6\xba\xc5\x25\xcd\x97\xd0\x30\xaa\xe2\x8e\xdc\x21\x73\x5a\xdd\x69\x59\x56\xcb\x9b\x3b\x20\xd3\x7e\x90\x44\xd8\xfe\xd3\x9f\x3d\xb2\xd6\x3b\xf8\xc9\x7c\x11\xd6\x44\x53\xb0\x76\x54\x86\xe8\xaa\xfc\x1d\xff\x98\xf5\x36\x7f\xd9\x8f\x70\x27\x8e\xd1\x60\xd4\xbd\x82\x12\xf8\xa4\x45\x45\x6a\xcc\x3c\x25\x6b\x52\x6f\x9a\x55\x74\xe6\x69\x33\xd3\x1a\x43\xe5\xe9\x5d\x40\x47\xa5\x5a\x72\xb2\x12\x31\x73\x94\xb3\x99\x40\x91\x94\x61\xf5\x6f\x9a\x24\x91\xab\xd6\x99\x49\x91\x95\x57\x5b\x52\x2d\x35\xb9\xe5\xac\xd2\x68\x72\xfe\x3c\x15\xd1\xe4\x12\x69\xad\xc7\x54\xed\x8c\x9e\x9d\x19\x32\xa6\x54\x38\x05\xf9\x12\x0a\x95\x89\xb8\xa6\xd5\x2b\x93\x73\xe7\x1d\xf0\x27\x16\xc8\x9c\x24\x0a\x14\x02\xf1\x99\x24\x29\x09\x7f\x14\x3a\x55\x3f\x8a\x10\x65\x55\xbc\x3a\x08\x70\x07\xb3\xaa\xc9\x51\x95\x86\x48\x55\xfd\x28\xd1\x3a\x30\x19\x73\x74\x7e\x5e\x3a\x3b\x10\x92\x74\xe9\xbf\xf4\x8a\xac\xa9\xcf\xff\x55\x62\x61\x69\x19\x95\xfc\x92\x70\xe8\x78\x96\x0d\xfd\xa0\x64\xaa\x2f\x2d\x0f\x99\x0c\x6b\x58\xf2\x4b\xd2\xc4\xae\x56\x7a\x0a\x77\x4b\x6b\xe1\xb0\xb4\x8a\x7c\x52\xfa\x2f\x37\xce\x9c\xae\x1b\xfc\xd7\x62\xc9\x3d\xf1\xc8\x76\x18\x27\xe7\xc5\x27\x1e\x29\xfd\x7b\xe9\x99\xc6\xe3\xcd\x03\x8f\x81\x92\xb5\x5b\x99\x97\x9e\xb1\x5a\xfd\x9e\xee\x7f\x78\xc2\x73\xf1\x85\x81\x56\xcb\x77\x52\x97\x30\xa2\x22\x5b\x7f\x2f\x76\xd2\xa7\xf4\x4d\xc7\x21\x73\x13\xf2\xa4\xbc\x31\x49\xea\x90\xf2\x28\x23\xa9\x97\x9f\x4c\x45\x59\xe5\xfe\xe4\xfc\x59\x5d\xfd\xf4\xfc\xb1\x0a\x7f\x7a\x5e\xad\xd9\x9f\x31\x67\x30\x13\x12\x96\x46\x73\x72\x46\xad\xf9\x9b\x9c\xab\x38\x12\xd3\xd4\xa2\xd3\x0f\x8b\x69\xfd\x5f\x22\x67\x48\xe3\x9a\x6c\xbd\xa5\x15\xbc\x7e\x06\x46\x97\x0c\x76\xb0\x85\x12\x69\x8d\xfa\xb4\xfc\x52\xc8\x9c\xdc\x55\x4b\xff\x59\xc8\xc5\x32\xbc\x6b\x92\x8e\x35\x71\x81\x9b\xb9\x6a\xd5\xab\x2e\x16\xfd\x73\xae\x33\x73\x56\x9d\x16\xb9\x67\xbc\x56\x4c\x86\x1f\x9f\x7c\x2b\x98\xd2\x85\xa5\xb4\x12\x45\x8b\x3c\x71\x91\x36\x79\x8c\xd3\x77\x5a\xf7\x85\x46\x4d\x88\xa0\xa9\x39\x33\x37\x46\x33\x10\xd0\xcc\x94\x96\x25\xb1\x19\x0e\x4c\x45\xc2\x45\xe2\xdc\x36\x73\xde\xac\x66\x6a\x22\x26\xb9\xcb\x2e\x47\x1d\x94\xab\x02\x99\x98\x5b\xdf\xb3\x4c\xc1\xdc\xf8\xd7\x99\x4d\x25\x55\xa4\x7e\x9b\x70\xff\x10\xdb\x77\xc8\xbe\xef\x31\x37\x10\x8f\x4d\xbb\x81\xd8\x03\x1f\x2b\x56\xa0\x68\x6c\x77\x40\xaa\xd1\x6e\xa7\x0b\xa4\x1a\xf5\x79\x47\xa4\x1a\x55\xf7\x7d\x91\x6a\x1e\x7b\x2c\x2b\xd5\xa4\x42\xe6\x1a\x11\x24\xbe\xe0\x4f\x65\x28\x3c\x0b\x4c\x08\xc8\x37\x0b\x59\x4c\x54\xca\x16\xde\xd5\x4b\xa6\x4e\xf0\xaa\x38\x83\xc4\x6c\x34\x8f\x93\xc7\x5c\x7a\x12\x03\xce\x61\xef\x33\x31\xf5\x62\x83\x8d\x6d\xb0\xef\x74\x87\x76\x98\x2b\xcf\xcc\x15\x77\x8c\x69\xdd\x77\x46\xbf\xe3\xfc\xbb\xa0\x7f\xc7\xb6\xd2\xcc\xfd\x63\xb6\xd9\xeb\x80\xb4\x3a\x39\x37\x70\xe4\x0c\xd7\x25\x53\x2e\x4b\xf2\x82\x89\xeb\x75\x99\xb5\x69\x9a\x7c\x59\x92\xbe\xfb\xdf\xf2\xe8\x6d\xf3\x5a\x24\x7f\xa0\xe2\xd8\x92\xc5\xa3\x64\xbf\x20\x79\x7c\xd6\x9b\xa7\x3d\xf0\xf1\x7b\xc1\x2f\xc7\x3e\x66\xe6\xcb\x42\xfb\x2a\x78\xb2\x86\xd4\xba\xae\xb5\x2e\x15\xb5\x43\xa3\x82\x7b\xbd\x9c\x8b\xd8\x59\x5a\x29\x15\x7e\xa9\x56\x49\x58\x55\x4e\x9f\x2c\xc7\x00\x36\x4a\x4a\x71\x58\x80\x51\x4c\xbf\xbb\x72\x4c\x0d\xd3\xd4\x92\x2c\xf5\xb1\x4c\x7a\x5e\xea\x96\xee\x78\x66\x9b\xec\xec\x3a\xcb\x31\x0e\x6a\x1b\xc5\x66\xda\x66\xf3\xb0\x32\x00\xcc\x9c\x5c\x84\x32\x61\xa2\x55\x64\xc6\x3d\x52\x8e\x19\x68\xbc\x8a\x27\xd1\xcd\x8c\x1b\x95\x53\x94\x71\xf2\xb9\xe0\x1e\x0e\x1c\x96\x6f\x49\x47\x79\x9e\x9d\xb5\xf6\xd9\xf7\x82\xcc\x38\x4e\x2b\x90\xb1\xc2\xdb\x06\xef\x9b\x81\xf1\x28\x91\x7b\x97\x11\xb9\x77\x4f\x13\xb9\x77\xc1\xdd\x09\xd1\xba\x88\xe4\xa7\xde\x10\x17\xee\x21\x45\x36\xa1\x6a\x0b\x51\x12\x94\x22\x9c\xa2\xad\x63\xf6\xad\x34\x45\x81\x33\x6e\x19\xb9\x0b\xba\x61\x7d\xd8\xa1\xfb\xa2\x1d\xb8\x1e\x9a\xe0\xc4\xf4\xfd\xbe\x2d\xda\x75\xf4\xf1\xc1\xf2\xd3\x87\xfe\x23\xf7\xb6\x68\xc2\xf3\xcd\xad\x5e\x97\xab\x7d\xaa\x8b\x4f\xcf\x7c\x61\x98\xb8\xa1\x8c\xf9\x7f\xe1\xb5\xfb\x83\xb9\x3d\x8f\xb7\xc1\x4e\xb8\xba\x1c\xaa\xad\x79\xa6\xbe\x58\x97\xfd\x3b\x70\x55\x9e\xbd\xfc\xce\xb7\xe0\x4c\x5d\x69\xef\xb2\xce\x1d\xf7\x7c\x71\xbd\x83\x17\xd3\xb3\x5b\x2d\xed\x1c\x6b\x48\xad\xe3\x9d\xe0\x14\x1f\x40\x16\xf1\x4c\x7f\xe1\x79\xfa\xfc\xf3\x2f\x4c\xb4\x89\x54\x02\x90\xb9\x53\x2e\x36\x8f\xcc\x33\x29\x8b\x45\xa7\x59\x04\xff\x09\xc2\xca\x16\xec\x15\xef\x55\x4c\x56\x18\xcc\x24\x23\x2b\x69\x38\x8d\xf4\x3d\xda\x2f\x59\x46\x7a\x09\x73\xce\xd8\xd0\x7d\xea\x50\x7e\x34\xb7\xf3\x96\xff\xa5\xb4\xb5\x5c\x71\x8d\x59\x31\x23\x47\xc2\x6a\xa9\x54\x5b\x53\x33\x41\xce\xd8\x96\xa5\xde\xac\x52\xc8\xbd\x9d\x03\x62\xa1\xde\x74\x24\x71\x14\xc8\x11\xf5\x33\x72\xbd\x3e\x43\xe8\x0d\x25\x56\x03\xe6\x0e\x44\x66\x62\xb7\x36\x22\x52\x5b\x98\x9c\x1d\xcb\x1a\x5f\xcb\xa8\x4e\x6d\x8a\x5a\x67\xcb\xa2\xf9\x16\x25\xed\xcc\x81\x45\x53\xcc\xa4\x33\xf3\x2c\xa2\xf8\x1e\x98\x78\x33\x39\xb3\xe5\xe5\xee\x69\x4b\x70\x76\x3b\xd0\x6d\xf2\x21\xc7\x96\x04\x2c\xe7\x51\xbb\x3e\x36\x71\x11\x5b\x39\x0b\x4c\x4e\x73\x4c\xbe\xdb\x49\xb9\xc3\x36\x94\xcb\x6f\xa8\xd0\x2f\x4f\x8e\x49\x77\xd2\x42\x4e\x0a\x36\x43\x4a\x65\xfe\xb8\x37\x9f\x99\x84\x71\x3f\xf1\x5a\x2b\x8d\x74\xd6\x57\xaa\xae\x78\x57\x62\x85\x26\x5e\x60\xcc\xaa\xdf\x48\x12\xd2\x14\x13\xde\xd9\x2c\xad\xa7\xbc\xf9\xd8\x29\x49\x66\x07\x45\x98\x02\x0f\xac\xef\xb7\x18\xf3\xf1\xe8\xb9\xe7\x9e\xeb\x1f\xf9\xcc\x76\x4e\x3a\x79\x9a\xec\x89\xe7\x9c\x0f\x80\xb1\xf3\x4e\x51\x8e\x85\xd4\x8e\x50\xcf\x44\x4f\xb4\xef\x37\x11\xed\x3e\x30\xbf\xfa\xcc\x67\xcf\x9c\xcd\x97\x85\x27\xbe\x09\x9a\x9d\xe7\x6b\x57\xb9\xf7\x89\x09\x17\x18\xa7\xcd\xc0\xf2\xb6\x41\xcc\xd2\x17\x27\x11\xd7\x96\x09\x5a\x8e\x5d\xe1\xe6\x51\xb2\x61\xad\x8d\xc4\x7d\xca\xc7\x76\x94\x90\x33\x78\xef\x04\x3d\x17\xfb\xec\x7d\xbf\x69\xf9\xa9\xb5\x8f\xa0\x68\xe1\xf0\xc1\xd9\x18\xe2\xce\x5d\x65\xec\xc0\xd9\x2c\xe3\xd7\x78\x96\xed\xdd\xba\xb6\x48\x5d\x8b\x65\xee\x2c\xd2\xdb\xfa\x0e\x53\x6a\xb2\x3b\x3b\x41\xa5\x1f\xc0\xa7\x98\xa7\xff\xe3\xf1\x67\x9e\x3e\xfa\xe9\xc6\x56\x59\x6d\x81\x7e\x61\xfa\xd3\xc6\xfb\xf1\xd6\xed\x03\xf5\xce\x6d\x8a\x9c\xff\x40\x1e\xbe\x6d\xe7\xa5\x88\x79\xda\xc8\xd0\xaa\xd9\x45\xf6\x70\x71\xbb\xb8\x4f\x79\x62\xf8\x14\xc1\x1b\x16\x3f\x88\x4b\x7b\xc5\xc8\xbc\x87\x2b\x7a\x3d\x3a\xdb\x9b\xb8\x6d\x0c\x8a\x70\xe5\x6d\xbf\x02\x0d\x49\x6c\x63\x5a\xac\x6c\xed\xc8\x3e\xa4\xde\x25\xd9\xb1\x36\x66\x2e\xaa\x98\xe5\xb5\xd7\xb6\xa0\x87\x9d\x89\x48\x26\xae\x99\x42\xbb\x90\x56\x4a\x2a\x2f\x10\xd5\x67\x22\xde\x7f\xa0\xd7\x4c\xdb\x7f\xc4\x24\x7d\xa5\x6b\x4f\x0c\xd5\x9e\x1f\x04\xcb\x7e\xe7\x14\x97\x16\xe3\x28\x57\x3b\xce\xff\x73\xe2\x18\xa6\x42\xe1\xac\xaf\xa0\x44\xb0\x26\xe3\x82\x17\x26\x62\xc9\x8b\x40\x4b\xea\x9b\xdc\x54\x3c\xcf\xa3\x8b\xa8\x49\xc7\x63\x30\xde\xd2\x50\xe8\x87\xf7\xc6\x6b\xd2\x83\x1b\x04\xcb\x15\x71\x36\x22\x90\x65\x96\x8c\x60\x2a\x54\x4f\x1c\x8e\x45\x35\x8d\x51\xc4\x1b\xb7\x4b\x49\x5f\xd4\x48\xf8\xa2\xae\x59\x1f\x74\xc0\x15\x5c\xa9\x10\xcf\xf3\xd8\x62\x2e\x3e\xc4\x8a\x46\x8c\x20\x16\xc1\x63\x9a\x05\x39\x91\x8a\x2c\x33\xcb\xb0\xdb\xde\xfa\xb7\xee\xbb\x39\xf6\x14\x8c\x2a\x95\x72\xd9\x46\xd1\x3a\x62\x80\xcc\x37\x13\xb2\x26\xd7\x75\xb7\xf6\xa0\x6d\xfc\x41\x97\x90\x4b\x64\xc8\x75\x02\xac\xf0\x66\x73\xda\xa7\x33\xf6\xea\x7b\xf1\xbe\x44\xb8\x66\xe9\x9e\xd9\x01\x7b\xf1\xfc\x3c\x50\x11\x98\x49\x2d\x14\x54\xb2\x9f\x2d\xc6\xa0\x8b\x41\x93\xb4\x70\x7b\x8e\xb9\x21\x58\x44\xd6\x30\x87\x16\x9e\xa0\x49\xe7\xe7\xc7\x63\x17\x01\x48\x13\x6e\xf2\xe3\x00\x63\x79\x58\x63\x89\x35\xce\xc5\x5a\xfa\x16\x8f\xdb\xc3\x16\xd6\xa1\xc6\xda\xf7\x70\x8c\x75\x0c\xba\x21\x68\xe2\x56\x28\x3c\x9a\x33\xd7\x57\xb1\x8a\x22\xcf\xc6\xdf\xb7\xf1\xe7\x19\xa3\x27\xaa\x0d\x8d\x49\x24\xa2\x05\x73\xec\x7c\xbe\x52\x0d\x82\x73\x84\xf7\x53\xfe\xaa\x36\x78\x87\xe3\xee\xe2\xa9\xdd\x85\xa1\xea\xf0\x68\x44\xf7\xd5\x55\xa5\xeb\x26\x9a\x4b\xb9\xa1\xa2\xc3\xeb\x90\xb9\x66\x2c\x7c\xaf\x0e\x23\x2f\x7f\x2c\xc8\x3e\x8f\x56\x2a\xfe\xbe\x68\xaf\x6c\x7b\x58\x30\x24\x3e\x1f\x12\x5f\x0d\xc9\x50\x0d\x49\x90\x18\x92\xa1\x35\x24\x30\x1c\x8d\x6c\xb2\x1c\x5a\x02\x84\x1c\xaf\x40\x8f\x4a\x60\x06\x8b\x58\x83\x15\xf7\x6b\x52\x4d\xba\xc7\xc3\xb1\x18\x5a\x5f\x92\x11\x2c\x37\xc0\x68\x34\x61\x64\xe2\x51\x0f\x6d\xff\xe6\xeb\x71\xa4\x1b\x14\xc7\xb3\x31\x31\xf7\xd9\x78\xce\x84\xa3\xed\xfb\xd1\xd1\x33\xc4\xb0\x42\x0b\x25\xe1\xd3\xdc\x44\xbb\x42\x06\x4c\xd0\xb6\xcf\x9b\xe5\xf3\x19\x4f\x11\x5f\xa2\x30\xf2\x8e\xf8\xac\x5f\x5b\xc5\xc4\x95\x80\x7f\xd6\x95\x2c\x67\x3e\x84\x75\x00\xfd\x6a\x03\xc0\xa1\xc7\x69\x25\x02\x30\xf0\x86\xa6\x7a\xd8\xf1\x86\x2a\xf0\xd4\xde\x4e\xa5\x12\xa8\xe9\xec\xc9\xbc\xf3\x5e\x08\xe6\x02\xaf\x67\x67\xef\xa9\xec\xda\x0f\x7a\x67\x3b\xee\xc7\x55\xac\x0a\x8f\x41\x94\x88\x9e\x2e\x7c\x8e\x0b\x9d\xf4\xd1\x9e\x4c\x12\xf1\x27\x64\x8b\xfb\x99\xd0\x4b\x7b\x18\xa2\x5a\x0f\x13\x15\xbd\xf8\x13\x98\xf5\x8f\xf6\x7a\x11\x4a\x6c\x1a\x14\x12\x88\x15\x8f\x81\x3e\x8c\x3c\x13\xab\x50\x39\x89\x7f\x62\x8f\x15\x74\xda\x7c\x6c\xed\x69\x57\x2a\xf6\x2f\x38\xf4\xea\x30\xf0\x32\x9b\x6d\xb9\xec\x8f\x73\x16\x5b\x07\xf6\xe2\xc9\xe9\x5b\x6b\xa7\x13\xaf\x1d\xd8\xf5\xea\x7b\xbb\xfb\xfa\x7b\xbb\x9a\x9f\x0c\xbc\x4e\xbc\x78\x62\xd0\xed\x82\x66\xa7\xd5\x6d\xc3\x55\xcf\xa6\xe4\x81\x4d\xc9\x22\x56\x6b\x34\x1a\x95\x57\x65\x30\x4a\x77\x00\x64\x08\x1b\x37\x51\x20\x5e\x60\xbd\xd1\x68\x15\xc0\xc0\xd5\x8e\xfb\x65\x80\x72\xe2\x0e\x20\x05\x4f\x78\xf5\x45\x77\xb8\x0f\x2f\x86\xa3\x91\x1b\x7a\x03\xd0\xf4\xbd\x01\x1c\xce\xcf\x83\xe6\x70\x7e\x5e\xac\xbe\xb8\x9c\x5e\x31\xd0\x1f\x8d\xc2\xb1\x98\x92\x20\xb6\x99\xf2\xac\x41\xb1\xe6\xc2\xcf\xce\xc3\xee\xdc\x79\xd8\x9d\x98\x87\xdd\xed\x39\xc9\x4a\x65\xa7\xf6\xab\xd8\xee\x43\x6b\x80\x69\x3c\xc0\x86\x81\x05\x5e\x7d\x6f\xb0\x6f\xb8\x37\xd0\x03\xdd\xf1\x68\x3c\xd0\x31\xe8\x06\xa0\x49\x5b\x81\xe0\x52\x65\x7f\x34\x2a\x27\xe6\xcd\x62\x40\x62\x84\x3b\x40\xaf\x11\x7b\x90\x3b\xf6\x20\x13\x88\xa1\x0f\xe6\xe2\xaf\xbd\x18\xbb\x27\xea\x95\x4a\x24\xa3\x17\x84\x82\x5e\x54\x8c\x78\xec\x76\x20\xe1\x53\x60\x3e\x77\xc0\xd8\x6c\x0c\xb1\x68\x64\x79\xe2\xf3\xb2\x01\x7d\x91\x09\x5c\x4f\x3d\x94\x88\x8b\x8e\x3d\x54\xd3\xa7\x41\x18\x7a\x74\x34\xc2\xbc\xbf\x46\x30\x0c\x47\xa3\x6a\xc3\xf3\x3c\x2e\x37\x86\x26\xac\x83\xcf\x7f\xc1\x86\x89\x5c\x2d\x66\xba\x20\x6c\xbe\xe7\x8b\x28\xfc\x14\x0f\x9e\xc2\x7e\x87\x62\x86\x3b\x91\x37\x8c\x31\x97\x76\xae\x34\x5f\xb6\x1b\xba\x08\xd4\x58\xf8\xfc\x60\x80\xe8\x01\x3f\x42\x2e\xd0\x7c\xc0\x1d\xba\x2c\xf5\x09\x58\xe3\xb1\xb4\x36\x40\xfb\xfb\xc8\xef\x6e\xb5\x7a\x71\xba\x8b\x38\xfb\xc8\x6b\x61\xb1\xd1\xac\x36\xc6\x8a\xec\xd6\x9d\xcd\x57\xff\xec\x34\x9d\xfd\x0e\x74\xfe\xff\x7f\xfd\x89\x82\xae\x7d\x4e\x03\x9f\xd7\xc0\x17\x14\xb0\x71\xe5\xe7\x06\x7a\xd3\x40\xbf\x34\xd0\x5b\xba\xc0\x17\x15\x70\x5d\xd7\x75\x3d\xae\xe2\xf7\x06\xfa\xad\x81\xfe\x64\xa0\x3f\x28\xe8\xb6\x6e\xe9\xd6\x8f\x75\xa5\x2f\xea\x94\x0b\x26\xf7\x1b\xfa\xdb\x4b\xfa\xdb\x15\x0d\x7c\x5d\x57\xa4\x51\xb8\x1d\xa3\xf0\x63\x03\xfd\xda\x40\x7a\x20\x36\x2e\x19\x9c\x75\x83\xb7\x75\xa5\x9b\x17\x7f\xa7\xa0\xbb\xaf\x0b\x44\x45\xdb\x2f\x73\xe8\x20\x6f\xf3\xaf\x06\x7a\x43\x43\x77\x5f\x17\x7d\x3b\x2a\x40\xd1\xc6\xf3\x02\xbc\xc4\xc1\x17\x04\x78\x25\x06\x45\x05\x9f\xe4\x2d\xbd\xfa\x17\xa7\xe9\x3c\x29\x26\xe6\x0d\x05\x6d\x5c\xfa\x82\x81\x5e\x34\xd0\xcb\x0a\xba\xf3\x45\x05\xdc\xd4\xb9\x6e\x7e\x5e\x01\x9b\xaf\xf2\xd6\x0e\x88\xca\x7e\xaa\xa0\xeb\x2f\x6b\xe0\xcb\x1a\xf8\xaa\x06\xbe\xa6\x80\x6b\x5f\x52\xc0\xc6\x25\x9d\xe9\xa6\x4e\xba\x7d\x55\x01\x77\x5f\xff\xbb\x82\x36\x5f\xbd\xec\x34\x9d\xa7\x44\x33\x6f\x2a\x68\xe3\xd2\x57\x15\x74\xfd\x1b\x26\xe9\x6b\x06\xfa\xa6\x81\x5e\x35\x90\xce\x77\x5d\x7f\xbc\xf9\x8a\x06\x74\x5d\x37\xbf\xa2\x80\xbb\xe7\x75\x93\xb7\x2e\x72\xe0\x3f\x39\xf4\xa2\x81\xf8\x1c\x3d\xf5\x59\x0e\xbd\xa4\xa1\xcd\x57\xf9\x70\x1f\x14\x48\xfe\x4c\x41\xd7\xbe\xac\x81\xaf\x68\xe0\xab\x0a\xd8\xb8\xfa\x39\x0d\x5d\xf9\xbb\x49\x7b\xd1\x40\x5f\x30\x5f\xff\xaa\xa0\xeb\xaf\xea\xa4\x4b\xdf\x36\xd0\x77\xf5\x47\x9d\x74\x5d\xa7\x5c\x7b\xc5\xd4\xa0\x11\xbb\xfe\x03\x05\xdc\xd6\xed\xdc\x7e\xd9\x64\xba\x64\x9a\xd6\x69\xb7\xdf\x32\xcd\xbc\xae\x6b\xf8\x9e\x49\x8a\x21\x5d\xeb\xcd\x6f\x6a\xe0\x1b\x0a\xd8\x7c\x95\x4f\xe6\x21\x31\x26\x3f\x57\xd0\xc6\xa5\x0b\x0a\xba\xf9\x2d\x05\xdc\x3d\xaf\xb3\x6d\xbe\xca\x7b\xfb\x1f\xa2\xc0\x2f\x14\x74\xeb\x4f\x0a\xb8\xfe\xba\x02\x36\x2e\xfd\x58\x27\x5d\xd0\x80\x4e\xb9\xf5\x73\x9d\xf2\x86\x4e\x79\x53\x01\x37\xcf\x29\xe0\xee\x05\x9d\xfb\xee\xf9\xbf\x19\xe8\xef\x0a\xda\x7c\x95\xa7\x3d\x2d\x70\x78\x4b\x41\xd7\xdf\x54\xc0\xc6\xa5\x37\x0c\xf4\x73\x05\xdd\xbe\x60\x92\xe2\x6c\x6f\x19\xe8\x97\xba\x0e\x9d\x7f\xf3\xe2\x2f\x0c\xf4\x8e\x82\xee\x5e\xf8\xba\x4e\x7b\x95\x23\x72\x58\x34\xff\xb6\x82\xae\x7d\x4d\x03\x5f\xd7\xc0\x37\x14\x70\xfd\x2d\x0d\xfc\x52\x03\xbf\xd6\xc0\xef\x75\xe6\xff\x56\xc0\xc6\xa5\xdf\x6a\xe8\xea\x97\x15\x74\x4b\x7f\xbc\xad\x53\x6e\x7f\xd5\x64\xd2\xd0\x75\x53\xee\x92\xae\xfd\xe6\x6b\x0a\xd8\x7c\xf5\x5d\xa7\xe9\xfc\x1f\x81\xf0\x2f\x15\x74\xfd\x4f\x0a\xb8\xf3\x65\x05\x6c\x9e\xe3\xf4\xfe\x71\x91\xeb\x57\x0a\xda\xb8\xf4\x7b\x05\xdd\x7a\xcb\x24\xfd\x41\x41\xd7\xff\x6c\x92\xfe\xa4\xa0\x9b\xdf\x53\xc0\xe6\xc5\xb7\x15\x74\xf7\xfc\xe7\x0c\xf4\x05\x03\xbd\xa8\xa1\x0b\x6f\xe8\x12\xe7\x38\xcf\x7a\x46\x34\xff\x6b\x05\x5d\x7f\x57\x03\x97\x35\xf0\x37\x05\x6c\x5c\xfa\xb3\x81\x2e\xe9\x8f\x57\x4d\xd2\x5f\x0d\x74\x45\x41\x37\x74\xf5\xb7\x75\x15\x9b\x17\xdf\x30\xd0\x8f\x15\x74\xf7\xfc\x97\x0d\xf4\xb2\x86\x2e\x7c\x4e\x41\xb7\x38\x0b\x7c\x86\x0f\xd6\x2d\x91\xed\xd3\x02\x6f\xde\xab\x23\x02\xef\xdf\x28\x68\xe3\xd2\xdf\x35\x74\xf9\x73\x06\xd2\xf9\x36\x2f\xfe\x56\x41\x37\x5f\xd7\x49\xe7\x38\x0b\x7f\x56\x54\xf2\x5b\x05\xdd\xba\xa4\x80\x1b\xfa\xdb\xb5\x6f\x29\x60\xe3\xf2\x8b\xfa\xdb\x97\x4c\xd2\xcb\x3a\xe9\x25\x93\xf4\x55\x03\x7d\x59\x41\xb7\x7f\xac\x80\x9b\xe7\x15\x70\xf7\xc2\x37\x0d\xf4\xa6\x6e\x5a\x14\x14\xfd\xe4\x3c\xea\x59\xd9\x4f\xde\xe6\x51\x81\xe2\xef\x14\x74\xed\x55\x0d\x9c\xd3\xc0\xb7\x15\xb0\x71\xf5\x55\x03\x7d\xd3\x40\xdf\x35\x90\xce\x77\xed\x3b\x3a\xe9\xf2\xd7\x14\x74\xfb\xd7\x26\xe9\x1b\x0a\xba\xf1\x35\x93\x64\x2a\xbb\xac\x1b\xb8\xa1\x73\xdd\xfe\xad\x06\x7e\xaf\x6b\xd7\x0d\xde\xfe\xa5\x69\xd9\xd4\xa9\x6b\xba\xf5\x2d\x9d\xc9\x60\xa0\xf3\xdc\xfc\xb1\x29\xf6\xba\x81\x7e\x60\xa0\xf8\xeb\x05\x03\xbd\x61\x20\x83\xf3\xd5\xef\xe9\x96\x34\x16\xb7\x74\x17\xaf\x99\x4f\x7f\xd7\x4d\xbe\xac\x81\x1f\x29\xe0\xee\xf9\xaf\x1a\x48\xd7\x79\x53\x34\x73\x58\xa4\x09\x64\x05\xda\x22\xf1\x79\x31\x59\x9c\x08\x8e\x89\xc9\xfa\xbd\x82\x36\x2e\x7f\xdb\x40\xdf\x55\xd0\xcd\x37\x15\xb0\x79\xf1\xa7\x0a\xba\x7b\xfe\x9b\x06\x7a\xd5\x40\xba\xe8\xe6\x39\x8e\xde\xff\x4f\x54\x7c\x51\x41\x77\xcf\x7f\xd7\x40\xdf\x53\xd0\x9d\xaf\x2a\x60\xf3\x1c\xa7\xd0\xe7\x44\x81\x3f\x28\xe8\xc6\xb7\x15\xb0\x71\xf9\x7b\x3a\x49\x03\xb7\xbf\xa9\x81\x57\x4d\xa6\x1f\x18\xe8\x75\x9d\xfd\xbb\x26\xe9\x82\x82\xee\x7c\x4d\x01\x9b\x17\xdf\x54\xd0\xdd\xf3\xba\xe4\xdd\x0b\x3f\x37\xd0\x17\x74\xbe\x73\x7c\x51\x1c\x17\x98\xfd\x51\x41\x1b\x57\x2e\x28\xe8\xc6\x0f\x74\xd2\xe5\x37\x75\xd2\xeb\x26\xe9\xc7\x3a\xe9\xc7\x26\xe9\xe7\x06\x7a\xc3\x40\x6f\x29\xe8\xf6\xf7\x74\x7e\x5d\xfd\xe6\xc5\xbf\x2b\xe8\xee\x85\xb7\x0c\xf4\xa2\xfe\x7a\x8e\x4b\x23\x4b\x02\xb5\x3f\x29\x68\xe3\xf2\x2f\x15\x74\xe3\x4d\x93\xf4\x6b\x05\xdd\xfe\x81\xfe\xf6\x86\xf9\xf6\x7b\x03\xfd\x56\x7f\xfc\xb9\x02\x6e\xea\x72\x37\xf5\xa7\xdb\x7f\x57\xc0\xdd\x0b\x2f\x6b\xe8\x75\x8e\xd8\xd2\x7f\x0a\x7c\xf8\x74\x3e\x2f\xf0\x79\x47\x41\xd7\xbe\xaf\x81\x1f\x68\xe0\x87\x0a\xb8\xf1\x96\x02\x36\x2e\x5f\xd2\x49\xbf\x34\x49\x57\x74\xd2\xaf\x75\xb9\xd7\x15\x70\x4b\x57\x70\xeb\x35\x0d\x7c\x47\x03\xba\xb5\x8d\xab\x3f\xd7\xe5\x7f\xab\x81\xdf\xeb\x4c\xe7\x14\x70\xfb\xdb\x1a\xf8\xae\x02\x6e\xfe\xce\x94\x37\x98\x5c\x35\x68\x5e\xfd\xad\x81\x7e\x6d\xa0\xdf\x1b\xe8\x4d\x83\xfb\x1f\x74\x93\x7f\x30\x49\x7f\x36\xd0\x9f\x14\x74\xe7\x45\x05\x6c\x9e\xe3\xdc\xf3\x05\x31\x6c\x7f\x56\xd0\xc6\xe5\xbf\x1a\xe8\xef\x0a\xba\xf9\x07\x05\xdc\x3d\x7f\x41\x41\x77\x5e\x32\x49\x9c\xc4\x5e\x10\x07\x83\x73\x9c\xc4\x3f\x21\xaa\xfb\x8b\x82\x36\xae\x7c\xce\x40\x5f\x50\xd0\x8d\x3f\x99\xa4\x97\x0d\xf4\xa2\x81\xbe\xac\xa0\xcd\x8b\x7f\xd0\xd0\x39\x2e\xb4\xfc\x5f\x51\xf1\x25\x05\x6d\x5c\xf9\xaa\x81\xbe\xa6\xa0\xcd\x73\x9c\xd5\x7c\x52\xe4\xbb\xac\xa0\x8d\xab\x7f\x50\xd0\xb5\xf3\x0a\xb8\xf1\x67\xf3\xed\x92\x82\x6e\xeb\x4c\x1b\x57\x74\x15\x37\x2e\x99\x5c\x71\xfe\x3f\x29\xe8\xe6\x1f\x15\x70\xe7\x1b\xe6\xdb\xdf\x15\xb4\x79\x8e\xcb\x43\xff\x29\xb0\xb8\xa2\xa0\x1b\x97\x15\xb0\x71\xe5\x9b\x3a\xe9\xaa\x06\xfe\x66\xbe\xbd\x6a\xa0\x6f\x2b\xe8\xe6\x3b\x0a\xb8\xfd\xa6\x02\x36\x2f\xbe\x6b\xa0\x5f\x29\xe8\xee\xf9\x37\x74\xda\x39\x5e\xbf\xcf\x1b\xff\xdb\xe7\x15\xb4\x71\xe5\x07\x0a\xba\xf6\x63\x0d\xfc\x44\x03\x6f\x98\x4c\xbf\x30\xd0\xcf\x0c\xf4\x2b\x03\xbd\xad\x0b\xfc\x54\x01\xd7\x75\xf5\xd7\xbf\x68\x32\x5d\x34\xd0\xef\x0c\xf4\x8e\x81\xfe\xa8\xa0\xdb\xba\xa5\x5b\x06\x8b\x37\x75\xca\x8f\x4c\x6e\xdd\xce\x35\x8d\xcd\xad\xab\x1a\xf8\x86\xae\x48\xa3\x70\x3b\x46\xe1\x27\x06\xfa\x8d\x81\xfe\xa2\xa1\x4b\x06\xe7\x97\x14\xb0\x79\x51\x57\x7f\x47\x0f\xdc\xdd\xd7\x05\xa2\xa2\x6d\xbe\x96\x7d\xc4\xdb\xfc\x9b\x81\x7e\xaa\xa1\xbb\xaf\x8b\xbe\x85\x02\x14\x6d\x0c\x05\xc8\xe7\xda\x3f\x2d\xc0\xab\x31\x28\x2a\x58\x13\x53\xc4\xf7\xf3\x65\x31\x45\x5f\x50\xd0\xc6\xa5\x2f\x1a\xe8\x25\x03\x7d\x49\x41\x37\x3f\xa7\x01\x9d\xeb\xce\x39\x05\x6c\x9e\xe3\x34\xd3\x11\x95\x7d\x51\x41\xd7\xbf\xa4\x81\xaf\x68\xe0\x15\x0d\x7c\x5d\x01\xd7\x7e\xa1\x80\x8d\x4b\x3a\xd3\xcd\x2f\x2b\xe0\xf6\x5f\x15\x70\xf7\xf5\x77\x15\xb4\xf9\xf2\x8b\x1a\x3a\xc7\x9b\xee\x8a\x06\x5f\x54\xd0\xc6\xa5\x57\x14\x74\xfd\xbf\x4d\xd2\xd7\x0d\xf4\x2d\x03\x9d\x33\x90\xce\x77\x5d\x7f\xbc\xf9\x35\x05\xdc\xf9\xae\x06\x5e\x53\xc0\xdd\xf3\x57\x14\x74\x8b\xcf\x4c\x57\x9c\x9a\x5f\xd6\xd0\xe6\x39\xbe\x56\x90\x40\xe8\x25\x05\x5d\x7b\x4b\x03\x6f\x6b\xe0\x97\x0a\xd8\xb8\xfa\x79\x0d\x5d\x79\xd7\xa4\xbd\x64\xa0\x2f\x9a\xaf\x7f\x53\xd0\xf5\x73\x3a\xe9\xd2\x77\x0c\xf4\x9a\xfe\xa8\x93\xae\xeb\x94\x6b\xbf\x32\x35\x5c\xd5\xdf\x7e\xa8\x80\xdb\xba\x9d\xdb\x5f\x32\x99\x2e\x9b\xa6\x75\xda\xed\xb7\x4d\x33\xe7\x75\x0d\xdf\x37\x49\x31\xa4\x6b\xbd\xa3\x0b\xde\xd1\x29\xb7\x74\xb9\xcd\x73\x1c\xbf\x9e\x18\x9c\x97\x15\xb4\x71\xe9\x47\x0a\xba\xf9\xaa\x02\xee\x9e\xff\xab\x82\x36\xcf\xf1\xe1\x5f\x11\x05\xbe\xa4\xa0\x5b\xef\x28\xe0\xfa\x79\x05\x6c\x5c\xfa\x89\x4e\xfa\x91\x06\x74\xca\xad\x5f\xe8\x94\x9f\xea\x94\x9f\x29\xe0\xce\x8f\x15\x70\xf7\x82\xce\xbd\xf1\xce\x65\x9d\x76\xfe\x5d\x05\x6d\x9e\xe3\x63\xd9\x17\x38\x7c\x59\x41\xd7\x7f\xa6\x80\x8d\x4b\x3f\x35\xd0\x2f\x14\x74\xfb\x47\x26\x29\xce\xf6\xb6\x81\x7e\xa5\xa1\x2b\xdf\xd5\xb5\xe9\x92\x9b\x17\xdf\x32\xd0\x9f\x15\x74\x47\xd7\x71\x93\x8f\x5d\xff\xb4\xc0\x88\x0b\x48\x58\x60\xf4\x15\x05\x5d\xfb\xb5\x06\x7e\xa3\x81\xdf\x2a\xe0\xfa\xdb\x1a\xf8\x95\x06\x4c\x9e\xdf\x29\x60\xe3\x92\x81\xae\xea\x2a\x6f\x7d\x53\x01\xb7\x75\xca\xed\x57\x4c\x26\x0d\x5d\x8f\x6b\xd0\x95\xde\x79\x4b\x7f\xbb\xa8\x80\xcd\x73\x9c\x4c\x3e\x2d\x10\xfe\xaa\x82\xae\xbf\xa3\x80\x5b\xbf\x57\xc0\x9d\xaf\x28\x60\xf3\x1c\xdf\x21\x4e\x89\xec\xaf\x28\x68\xe3\xd2\x45\x05\xdd\x7a\xdb\x24\xfd\x51\x41\xd7\xff\x62\x92\xde\x51\xd0\xcd\xef\x2b\x60\xf3\xe2\x2f\x15\x74\xf7\xfc\xe7\x0d\xf4\x45\x03\xbd\xa4\xa1\x0b\x3f\xd5\x25\xce\x71\xc2\x0d\x44\xf3\x5f\x53\xd0\x8d\xcf\x29\xe0\xfa\x15\x0d\xfc\x5d\x01\x1b\x97\xfe\x62\xa0\xcb\xfa\xe3\x5f\x4d\xd2\xdf\x0c\x74\x55\xd7\xf5\xae\x06\xbe\xa0\x80\x9b\x3f\x50\xc0\x9d\x5f\x29\x60\xf3\xe2\x4f\x14\x74\xf7\xfc\x57\x34\x74\xe1\xf3\x26\xed\x4b\x0a\xba\x25\x3e\xca\x41\xe3\x72\xe1\xaa\xc0\xfa\xeb\x0a\xda\xb8\xf4\xae\x86\x2e\x7f\xde\x40\x5f\x54\xd0\x9d\x8b\x1a\xf8\x9d\x02\x36\xcf\xf1\x25\x45\x44\x1d\xdf\x50\xd0\xad\xcb\x0a\xb8\xf1\xa2\x02\xae\x5d\x54\xc0\xc6\xe5\x97\xf4\xb7\x2f\x9b\xa4\x2f\xe9\xa4\x97\x4d\xd2\x2b\x06\xfa\x8a\x82\x6e\x5e\x50\xc0\x9d\x3f\xe8\xec\xfa\xd3\xdd\x0b\xdf\x32\xd0\xcf\x34\x0e\x7c\x1a\x88\xec\x25\x2f\x19\x0a\x0c\xff\x5b\x41\xd7\xfe\xa0\x81\x3f\x6a\xe0\x4f\x0a\xd8\xb8\x7a\xce\x40\xdf\x32\xd0\x6b\x06\xfa\x8e\x2e\xf0\x8e\x4e\xba\xfc\x75\x05\xdd\xfe\x8d\x49\xd2\x0d\xdd\xf8\xba\x49\x32\x95\x5d\xd6\x0d\xdc\xd0\xb9\x6e\xff\x4e\x03\x17\x75\xed\x7f\xd6\x29\xbf\x32\x2d\x9b\x3a\x75\x4d\xb7\x5e\xd5\x99\x0c\x06\x3a\xcf\xcd\x9f\x98\x62\xe7\x0d\xf4\x43\x03\xc5\x5f\x7f\x64\xa0\x9f\x1a\xc8\xe0\x7c\xf5\xfb\xba\x25\x8d\xc5\x2d\xdd\xc5\x6b\x97\x74\xca\xbb\x0a\xb8\xf3\x6d\x05\xdc\x3d\xff\x8a\x81\x74\x55\x77\xf4\x68\xdd\x14\xcd\x08\xce\x20\x20\x21\x70\x9c\x17\x68\x87\x62\xb2\x38\x42\x03\x31\x59\xdf\x54\xd0\xc6\xe5\xef\x18\xe8\x35\x05\xdd\xfc\x99\x4e\x7a\xe7\x6f\x0a\xba\x7b\xfe\x5b\x06\x3a\x67\x20\x5d\x74\xf3\x1c\x67\xdd\x9f\x11\x15\x7f\x4b\x41\x77\x5e\x51\xc0\xdd\xf3\xaf\x19\xe8\xfb\x0a\xda\x3c\xc7\x07\x89\x8a\x02\xaf\x2a\xe8\xc6\x77\x14\xb0\x71\xf9\xfb\x3a\x49\x03\xb7\xbf\xa5\x81\x73\x26\xd3\x0f\x0d\x74\x5e\x67\x7f\xcd\x24\xfd\x48\x41\x77\xbe\xae\x81\xbf\x29\xe0\xee\x79\x5d\xf0\xee\x85\x5f\x18\xe8\x8b\x0a\xda\x3c\xc7\x25\xde\x48\x20\x76\x4e\x41\xd7\x7e\xa4\x80\x1b\x3f\x54\xc0\xc6\xe5\x9f\xe9\xa4\xf3\x26\xe9\x27\x3a\xe9\x27\x26\xe9\x17\x06\xfa\xa9\x81\xde\x56\xd0\xed\xef\xeb\xfc\xba\xfa\xdb\xef\x2a\xe0\xee\x85\xb7\x0d\xf4\x92\x2e\x78\x45\x37\xbe\x79\x8e\x57\xc6\x04\x8a\xdf\x56\xd0\xc6\xe5\x5f\x69\xe8\xca\x6b\x0a\xba\xf1\x33\xf3\xf1\x37\x0a\xba\xfd\x43\xfd\xed\xa7\xe6\xdb\x45\x03\xfd\x4e\x7f\xfc\x85\x02\x6e\xea\x72\xff\xf3\x65\x05\x6c\x5e\xfc\xb9\x82\xee\x5e\xf8\x92\x86\x5e\xe7\xd8\x32\x29\x6c\x71\x49\x7d\x28\x50\xfb\x8e\x82\xae\x5d\xd6\xc0\x15\x0d\x5c\x55\xc0\x8d\xb7\x15\xb0\x71\x59\x67\xba\xf1\x2b\x93\x64\x72\xfd\x46\x97\xfb\xab\x02\x6e\xbd\xae\x81\xef\x69\xe0\xbb\x1a\xf8\x81\x2e\x7f\xf5\x17\xba\xfc\xef\x34\x70\x51\x67\xfa\xb6\x02\x6e\x6b\x24\x6f\xbf\xa6\x80\x9b\xbf\x37\xe5\x0d\x26\x57\x0d\x9a\x57\x7f\x67\xa0\xdf\x18\xe8\xa2\x81\x7e\x66\x70\xff\xa3\x6e\xf2\x8f\x26\xe9\x2f\x06\x7a\x47\x41\xff\xf3\x15\x05\x6c\x9e\xe3\x25\x4f\x8b\x61\xfb\xae\x82\x36\x2e\xff\xcd\x40\xef\x2a\xe8\x7f\x5e\x51\xc0\xdd\xf3\x3f\xd2\x49\x5f\x33\x49\x9c\xec\x4e\xcb\x13\x04\x9f\xa4\x33\xa2\xba\xd7\x14\xb4\x71\xe5\xf3\x06\xfa\xa2\x82\x6e\xbc\x63\x92\xbe\x64\xa0\x97\x0c\xf4\x3d\x03\x7d\x45\x41\x9b\x17\xff\xa8\xa1\x73\x7c\x74\xcf\x8a\x26\xbe\xa7\xa0\x8d\x2b\xaf\x18\xe8\xeb\x0a\xda\x3c\xc7\x65\x8f\x35\x91\xef\xfb\x0a\xda\xb8\xfa\x47\x05\x5d\xfb\x9b\x02\x6e\xfc\xc5\x7c\xbb\xac\xa0\xdb\x3a\xd3\xc6\x95\xff\xd6\xd9\xdf\x35\xb9\x4c\xfe\x2b\x71\xad\xef\x28\xe8\xe6\x9f\x14\x70\xe7\xbf\xcd\x37\x5d\x72\xf3\x1c\x9f\xcb\xcf\x0a\x7c\x7e\xa0\xa0\x1b\x57\x14\xb0\x71\xe5\x5b\x3a\xe9\xaf\x1a\xf8\xbb\xf9\x76\xce\x40\xdf\x51\xd0\xcd\x3f\x2b\xe0\xf6\xcf\x14\x70\xe7\x73\x0a\xd8\xbc\xf8\x6b\x05\xdd\x3d\xff\x53\x05\xbd\xc7\x37\xe0\xf7\xbe\xc5\x21\xbe\x9c\xde\xfb\x0e\x87\xf8\xd0\xbe\xf7\x1a\x87\xb8\x1c\xf6\xde\xf7\x39\xf4\x4b\x03\xf1\xc9\x7d\xef\x47\x1c\xe2\xbb\xff\x7b\x3f\xe3\xd0\xaf\x0c\xc4\xbb\xf7\xde\xdb\x1c\xe2\x8d\xbd\x77\x91\x43\x9c\x2c\xdf\x7b\x87\x43\x5c\xda\x7c\xef\x2f\x1c\xe2\x44\xfb\xde\x65\x07\x3a\xff\xfb\x55\x0d\xbd\xf7\x4d\x93\x26\xda\x78\x97\x43\x7c\xd2\xfe\xf7\x25\x0e\xbd\xa2\xa1\xf7\x7e\x6f\xd2\x38\xa6\xff\xfb\x15\x0e\x71\x29\xe9\x7f\xbf\xe8\x8c\x63\x23\xc7\x61\x6c\xe4\xe8\x38\x35\xf9\x68\xdb\x45\xa0\x46\x91\x30\x6d\x76\x17\x5a\x9f\x3a\x31\xac\xd7\xeb\xf5\x2a\xff\xf3\xf8\xc1\xf6\xc2\x0a\xcc\xb1\xaa\x8d\x5a\xa8\x3d\x1a\xa1\x3c\xa3\x4c\xe5\x7e\xb9\x2a\x6d\x91\x17\xf4\x2b\x59\x63\x8a\x69\xe2\x6a\x26\x8c\x32\x21\xdb\x19\x2b\x60\x69\x66\x96\xb1\x9c\x69\xe4\x5a\xce\x34\xda\x8b\xf6\x8f\xa6\x8e\xe0\xe8\x08\x1b\x3c\x5d\x7f\xad\xef\x47\x2e\xd2\x66\x1e\x6e\x1d\x9a\x2f\xc0\x45\xa0\x45\xdb\x79\x63\x12\x85\xc1\x69\x44\x17\x7a\xc8\x67\x43\x8a\x22\x07\xb6\xda\xb6\xd1\x6d\x71\x89\x9c\xf1\x4b\xe5\xd0\x40\xb4\x20\x4c\xca\x71\xe7\x3e\x0f\x6c\x61\x01\x13\xc4\x61\x1d\x91\xe1\x2a\xa2\xfe\x72\xc0\x8b\xc0\x7c\x13\x6b\x33\x4a\xe3\x31\x28\xee\xae\x06\xfe\xf5\x7a\x6c\x3a\xb3\xd0\x09\x09\xf3\x31\x41\xb4\xda\x45\xcb\xc3\x95\xaa\xdf\xf5\x07\x6c\xab\x43\xb2\xa0\xdd\xc6\x4f\x18\x18\xdb\x58\x19\xb2\xd8\x16\x96\xd5\x84\xb1\xba\x4b\xd0\x99\xd2\x73\x68\xe5\xe0\xd9\x81\xeb\x7c\x6a\x61\xd1\x99\xa7\xf3\xce\x82\x5b\x9b\x07\x0b\xce\x3c\x9a\x77\x3e\xa4\xec\x4a\xc9\x30\x08\xca\x9e\x17\xdb\x32\xb7\x1a\xed\xed\x58\x36\xea\xf5\x2b\x6d\xbf\x0e\xe8\x51\x78\x8a\x0f\xc2\x7e\x39\x06\x35\x74\x96\x21\xd2\x75\xd7\x4f\x4a\xf6\xf2\x9c\x88\xcf\x40\xd7\x9a\xe2\x41\x0c\x26\x38\x31\x0f\xc2\x88\xfd\x64\x34\x1c\x20\x5a\xf3\x07\x83\x60\xcd\xe5\x29\xd0\xac\x71\x00\x65\x8e\x64\x5d\xa3\x91\x9b\x97\xec\xf1\xd1\x60\xb5\x23\x89\x44\x30\x86\x1d\x9f\x1c\xf0\x99\x1f\x84\x2b\x07\x09\xa3\x18\x45\x4f\xae\x2d\xad\x0d\x50\x33\xcb\x35\x9d\xd5\xb0\x8b\x02\xc7\xf3\x3c\x34\x1a\x4d\xc5\x8d\xd7\x3c\xa5\x5a\x6d\xac\xc7\xbc\x3c\x84\x6b\xf1\x6b\x90\xc8\x05\x90\xc4\x16\x80\x10\xcb\x02\x84\x7f\x1a\xf8\x1d\xa4\xb2\x1e\xa3\xa8\x87\xcf\xc2\xd0\xab\x43\xdf\x63\x8a\x57\xee\x0d\xf7\xf9\xb1\xfd\x76\xe4\x31\x65\xa6\x5d\x6d\x94\x3d\x2f\x32\x96\x66\x08\x68\x6b\x66\x4e\x4c\x11\x4c\x35\x30\x08\xbb\x47\xac\x36\x46\x23\x0c\xe6\x86\xa3\x91\x3b\xf4\xa2\x5a\x34\x08\x30\x73\xd1\xbc\x13\x2d\x38\xa0\x36\x08\x07\x2e\x00\x90\xd4\xfc\x6e\x57\x12\x91\x3b\x04\xda\x84\xbb\x44\xb6\xb8\x96\xa6\xb3\x4f\xf5\x5c\x83\xe7\xaf\xf6\xfc\x0e\x0b\xe9\x5a\x51\xa6\x55\xff\x14\xaa\x76\xb1\x18\x7f\x9f\xae\xa5\x16\x17\x5f\x3f\xf7\xba\x85\x25\xa9\x4b\xbd\x67\x84\xf1\x0b\x14\xb9\x73\x7e\x3a\xaa\x21\x49\x14\x95\x8a\x9b\x49\xb3\x72\x9d\x44\xfe\xa9\x93\x11\x42\x44\x1a\x7d\x12\x2f\xd3\x82\xb5\x5a\x2c\xb3\x53\x06\xd6\xdd\x24\xdf\xc0\x3d\xb7\xec\xa2\x12\x26\x11\xf3\x49\x07\x85\xbd\x12\x03\x80\xf5\x69\x78\xa6\xc4\xd7\x05\x27\xcd\x83\x94\x86\xd4\x75\x0e\xf8\x84\x84\xac\xd4\xf1\x83\xa0\xe4\x97\xc4\xb8\x96\xfc\xa8\xe4\x1b\x5b\x5f\x07\x8c\x81\x24\x76\xa4\x17\xa0\xc6\x9c\x8d\x46\x99\xee\x8c\x8d\x05\xf8\x80\x86\x2c\x64\x6b\x03\x64\x53\x76\xd6\xbe\xb8\xa4\xc6\xfd\x14\x5a\x8b\xdc\x44\xfd\xc2\xf6\x31\xae\xa5\xef\x47\x79\x2f\x86\x78\x2f\x4b\x89\x72\xc9\x62\x2b\x28\xf7\xa1\x91\x42\xdc\x45\xbc\x95\xb1\x32\xb3\xc5\x6a\xd1\x29\x94\x34\xf7\x52\x74\x75\x94\xf5\x11\x6d\x66\xc5\x15\xd1\x78\x0f\x13\xb5\x64\x78\x3f\x5d\x24\x58\x6d\xcc\xa2\x25\x7e\x67\x19\xf5\x3b\xec\x29\xc9\x38\x0f\x0a\x12\x77\x29\x94\x79\x0d\xd5\x10\x6b\xa2\xd4\x24\x95\x0e\x6a\xaf\xe7\x2c\x2c\xf1\x96\x9a\xa5\x47\x9c\x79\x54\xeb\x0d\x83\x80\x37\x37\xef\x3c\x52\x3a\x83\x59\x1f\x13\x9e\x4e\xf9\xcf\xe5\x21\x2b\xad\x84\xac\xf4\x88\x79\xcf\xf5\x48\xec\xef\xbc\x17\xd2\x15\xc4\x78\x65\x8f\xc8\x85\x56\x52\xcc\x3c\x5d\xcd\xa2\x63\xec\x61\x45\x17\xa2\x7e\x38\x0c\xba\x9f\xa0\xfe\xe0\xb0\x74\x2e\x7e\x48\x2e\x41\x97\x40\x04\x2a\x15\x97\x78\x49\x01\x8b\x70\xd6\x30\x1e\xc3\x81\x4f\x23\xf9\xd0\xcd\x1e\x3e\x4e\xa5\xbc\xc7\xa8\x26\xbe\x77\x79\x06\xbd\x2b\x21\xf5\x2c\x58\xad\x29\xaa\x01\xa2\x01\x61\xe5\x2b\x58\x91\xf3\xef\xd2\x3a\x7c\x97\xe7\x79\x58\xb1\x41\xfd\xe8\x06\xb7\xea\x6d\x9d\xad\x19\x67\x0b\x75\x36\x61\x0f\xdc\x6a\xb4\xd5\xef\x45\x97\x7a\x61\xab\xde\x86\xc4\x73\xfe\xdd\x99\xc7\xad\x46\x1b\x34\x5d\x26\xb2\x40\xf3\x49\x24\xcf\x89\x47\x19\xea\x91\x0c\xaf\xc1\x6a\x85\x89\x76\x21\xf5\x7c\x59\xc0\xe7\x5b\xac\xa3\xdf\xf3\xf1\x2d\x85\x56\x2a\xbc\x69\x56\x0b\xfc\x48\x1a\xfb\x1f\xed\xb9\x8e\xf5\xce\xcf\x81\x75\x39\xa0\x89\xc4\x79\x02\x99\xc7\x6a\x51\x80\x3b\xc8\x6d\x34\xb4\x45\x35\xf5\x5c\x6b\x38\x9a\x0e\x00\x31\xa2\xca\xb0\x97\x40\xdb\x86\x5c\xac\x67\xc7\xf0\x7b\x33\xcb\xeb\xf1\x44\x70\x41\x49\xd3\x57\x13\xc1\x81\xd8\x08\x9a\x4c\x6d\x85\xf2\xa7\xbb\xce\x97\x58\x93\x8e\x01\x94\x80\x29\xf1\x09\xcc\xfa\xe1\x50\x98\x2c\x37\x23\xc8\x1b\x6a\x12\x48\xc3\x90\x35\x87\x50\x2d\xa7\x23\x88\xf5\x43\xd9\x94\xa3\x92\x9c\x79\x89\xe2\x71\xe9\x9f\x5f\xee\x0a\xbd\x35\x97\x02\x4e\x43\xc1\x90\x0a\xd7\x8c\x5d\x5e\x6b\x24\x65\x88\x3c\xb9\x82\xf3\xfd\xa5\x50\xd6\x91\xff\x48\x6d\xc2\x76\x3a\xcf\xe7\x9d\xcd\x3b\x4d\x67\x0c\x8b\xa8\x3d\x2b\x3c\x96\x1b\xe3\x49\xe2\x8c\xab\x38\xa7\x6c\xe8\x49\x3f\x42\xdd\xe7\xd4\x5e\xe5\x95\xeb\x5b\x16\x6b\x88\x66\xc4\x24\xa4\xab\x62\x48\x0e\xf8\x9d\x3e\xe2\x6b\x8f\xc6\x6b\x4f\x65\x4a\x0d\x9b\x97\x97\x38\x1a\xcd\x52\x94\x9f\x3f\x7b\x78\x45\x63\x96\xff\x95\xd3\x2b\xff\xeb\x68\x1c\xbb\x68\x40\x51\xc7\x67\xa8\x7b\x2c\x29\x54\x78\x7c\xd0\x4c\x0f\x72\x04\xb0\x52\x5e\x27\xc5\x49\xd6\x2d\xf8\xe2\xa5\xd2\xb9\x98\x33\xd6\xf4\x96\xe1\xdc\x4a\x0e\x33\xbc\x49\x3c\xaf\xf3\x58\x2d\x43\x9f\x86\xe9\xa8\x55\xe2\x98\xbd\xd1\xf3\x38\xdd\xf3\xed\xb5\x8f\xa3\x16\x6d\x8b\x15\xab\x60\x97\x71\xe6\x37\x0c\x02\xcf\x23\x26\xbd\x66\xef\x25\x32\xc7\x18\x9e\xcc\x1f\x05\xfd\xce\x21\xc9\xbe\x98\x39\x14\x9b\xfd\xa7\x55\x6f\x6b\xcc\xe2\x47\xd3\x9c\xc9\x8c\x46\x8e\x8c\xaa\xa1\x7f\xe5\xb1\x20\xce\xbb\x70\x1e\x07\x02\x8b\x94\xaf\x83\x79\x91\xc3\x68\x1c\x4e\x2e\xac\x40\xa7\xea\x80\xa6\xfc\x98\x58\xb0\x5d\x3f\xea\x23\xca\x07\x3e\x59\xe6\x44\x8d\x17\x5a\x70\x80\x79\xe7\x81\xac\xf5\x5c\x38\xf5\x29\x0a\xb3\xa6\x3e\xfb\xc5\xe3\x02\xa9\x03\xc6\x70\x10\x76\xc5\x02\x7b\x26\x0c\x4f\x0d\x07\x9c\x0f\x49\x72\x4b\x71\x02\x35\x74\xb5\x1c\x86\xa5\xc7\xd2\x1e\x2c\x56\xe3\x13\xcd\xe5\x37\x8f\xc6\xfd\xfa\x54\x3c\x5c\x27\x16\x16\xa0\xe3\x00\x00\xd1\xbc\xb3\x20\x8f\x5e\xce\xbc\x2c\x15\xe3\x14\x0b\x08\x45\xc4\x38\x41\x04\x9f\xc0\xb4\x12\x7b\x74\xd1\x00\xb8\x0c\x22\x6b\x7c\xcc\x0b\xfa\xe8\x30\x39\x3e\x5c\xee\xe2\xac\x68\x73\x6f\x38\x71\x5a\x9d\xf7\x1c\xeb\xf1\xba\x03\x93\xf4\x89\xc4\xf0\x8c\x46\xf6\x38\x2e\xd4\x18\x8a\x98\x8b\xf2\x26\xc6\xbc\xd5\x99\xa5\x9f\x6a\xa1\x1d\x24\x2b\x98\xe4\xaf\xab\x9c\x16\xe6\x9d\x05\x24\x0a\x48\x1d\x52\xde\x31\xad\xef\x47\x7c\xdd\x26\x58\x54\xae\x60\xc7\x62\x24\x9e\x0b\x87\x0c\x1d\xf1\x07\xb3\xa2\xc1\xd9\xd0\xbc\xb3\x40\x79\xb1\x68\x32\x2a\x14\xcc\x22\x63\x1a\x29\x8e\x0b\x63\x0a\xa9\x25\x45\xde\x45\xd3\x9e\xe0\x54\x28\xae\x41\x70\x34\x56\xa9\xb8\xfa\xe8\xbf\x74\xf0\xc8\xb1\x67\xf6\x2f\x1d\x3c\xde\xca\xed\x4c\x1b\x40\x36\x86\xab\x3e\x26\x05\xe4\x8f\x7b\xae\xc3\x3f\x4b\x92\xc8\x9b\x77\xeb\x4c\x21\xf7\xe8\x05\x2e\xfd\xca\xb5\xa5\x9f\x5c\xe5\xd7\x9d\x57\x32\xc9\x41\x5c\x59\x11\x50\x95\xe6\x34\x3f\xd6\xc2\xcf\xd4\xf5\x51\xb8\x26\x4d\x96\x96\x6c\x6d\xde\x91\x99\x9c\xb6\x18\xc7\x29\x79\xe4\x00\x9a\x0e\x4a\x82\x3f\xe6\x33\x86\x28\x89\x9a\x29\x5f\x01\x19\xd9\xa4\x95\x58\x2d\xf1\x38\xc1\x44\x7a\x96\x1d\x28\x91\x25\x31\x6f\x32\x2d\x33\xe4\xed\x31\xa8\x51\xe4\x77\x8f\x92\x60\xcd\x05\x30\x79\x16\x4a\x31\x5e\xad\x05\x89\x9d\x16\xb8\x4e\x51\xdf\x84\xd7\x02\x23\xef\xd7\x61\xe8\x51\xad\xe6\xc0\xfb\xc2\xf8\x71\xbd\xef\xd1\x16\x6e\xd7\xf8\x21\x56\x1f\x55\xf9\xa2\xf1\x2b\x15\xd7\x97\xcd\x74\xfa\x61\x18\x21\xeb\x80\xe6\x43\x04\x00\xf4\x2b\x95\xc2\x95\xe5\x4b\xf9\xdb\x07\x50\x0b\xbd\x27\x83\x70\x45\x22\xc8\xcf\x3b\xd0\x07\x30\x56\xa2\x8d\xc7\x30\xdd\x46\x0e\xbd\x24\x76\x4b\x7e\x32\xa3\x51\x27\xa4\xfa\xb8\x88\xca\x62\x61\x15\x62\xc4\x8f\x58\x93\x78\x52\xee\x01\x7f\xff\xea\x32\x5e\x19\x86\xc3\xa8\x24\x0b\x95\x04\x9d\xc9\x03\x24\x3f\x28\xfa\xa4\xcb\x61\x36\xef\x3c\xa2\x04\x8c\xe2\xe6\xe3\xc3\xd9\x8c\xdc\x71\x4e\xce\x34\xb2\x44\x81\x85\xaa\xdb\xfa\xd4\x42\xfb\x51\xf0\xa1\x05\xe8\x2c\x9c\xfc\x50\x23\x75\xc4\xcc\x67\x72\x8b\x54\x3f\x4d\x87\x81\x98\x01\x19\xe7\x52\x3e\x5a\x9f\x41\xb0\x4b\x34\x91\x3a\xab\x33\x58\xae\x83\x31\x8c\x67\xb7\x99\xd6\x13\xe1\x9e\x7a\xff\x7a\xf0\xd9\x17\x6a\xcf\x1c\xfd\x8f\x93\x47\x8e\x3e\xf5\xfc\x33\x07\x4f\x3e\x77\xf0\xf8\xd1\x67\x5e\x38\xf8\xdc\x68\xc4\x6a\xfc\x70\x23\xbe\xe9\x44\xcd\x97\xe3\xf3\xea\xa2\xd3\xda\x7c\xfd\x5c\xdb\x69\x3a\xad\x52\xdb\x99\x23\x96\xf8\xa1\x85\xba\x8f\xd4\x17\x9d\x9a\xd3\xe4\x73\xb8\x9f\x52\x7f\xcd\xfd\x48\xbd\x9a\xc9\x05\x6a\x9f\x0e\x31\x71\x9d\x9a\x03\x20\x1d\x8d\x5c\xb5\x94\x32\x03\x23\xe4\xcb\x4e\x48\xa2\x30\x40\x95\x8a\x02\x6a\x98\xf4\xc2\xe4\x2f\x17\xc3\xb8\x0d\x48\xa0\x38\x6e\x9d\x22\xe1\x19\x72\x28\xa4\xf7\xaa\xc6\x4c\x9f\x2c\xe4\x3a\x66\x05\xeb\x98\xb5\x70\x1b\xaa\x43\x0a\xa3\x3e\x89\xf8\x0e\xb5\x14\x1a\xed\xf2\xa1\x61\x10\x10\x31\xa5\xd0\x07\x73\x11\x5f\xa1\xad\xa8\xed\xf1\x09\x34\x2b\x11\x4e\x2a\x98\x2f\x06\x66\x8e\xb4\x68\x2c\x1c\xa6\xf0\x4d\x01\x62\x4f\x6c\x0d\x02\x6b\x2d\x28\x13\x20\x74\xae\xfa\x27\x16\x2b\x47\x28\x13\x2a\x15\x5f\x1e\xec\x45\xff\xaa\x5a\x21\x51\xa9\x18\xc1\x9d\x28\x60\xde\x28\x2b\xf4\xb2\x92\xe2\xb6\x3a\xde\x87\xf3\x3a\x23\xef\xaa\x3c\xc5\xd3\xdc\x0d\x4c\xec\x5d\x9a\xc2\xa5\x5a\x41\x23\x16\x01\xab\x61\x7d\x9f\xb6\x98\x6c\x48\x27\x03\xb3\xc4\x72\xa5\x88\x9c\x65\x66\x94\x68\xd2\xc3\x95\xf8\xaf\x5c\x8f\x17\x1b\x6f\x5b\x4d\xbd\xdc\xe7\x0c\x21\x40\x36\x1e\x83\x39\x5c\xa3\x28\x1c\x20\x79\xb8\x76\xd7\x73\x8e\xc7\xe9\xcb\x06\x5c\xac\x4d\xce\xd5\x0c\x3f\x78\x17\x46\xeb\x1d\x8a\x12\x52\x95\x51\x3b\xe4\x1c\x1b\x91\xd2\x31\x2e\x6a\xc0\x65\xa0\x89\xc6\xe3\x09\x77\x92\xf9\xba\xed\x07\xd7\x51\x39\xf7\xc8\x53\x75\xc9\xde\x8a\x4b\x25\x10\x7b\xff\x38\xc9\x51\xf3\x04\x3d\x74\x51\x80\x18\xd2\x69\x10\xf1\x79\x4f\x76\x8d\x0b\xfc\xd5\x33\x3e\x66\x88\x46\x0b\x22\x1e\xaa\xfa\x95\x77\x11\x60\x67\xce\x4d\x5c\x20\x61\x38\xb0\x53\x76\x40\xef\x9f\x37\xfb\xc6\x23\x0d\xe7\xdd\x86\xe3\xb9\x28\xe7\xce\x3d\x81\x6e\xe1\x95\x47\x22\x97\xfc\x5b\x5d\xf5\x89\x2f\x5c\x33\xe6\xe5\xb1\xfb\x9c\x9b\x21\x39\xb6\x45\xcd\x54\x7b\x21\xad\x0e\x68\xb8\x8a\xa3\xf4\xa5\xbf\x76\x36\xb2\x43\xf7\xb5\x3a\x7c\xfb\xcc\x17\xb6\xba\xc0\x78\x52\xad\x43\xb2\xe5\x7a\xe3\x22\x13\x6b\x5e\x41\xec\x13\x9a\x12\x67\xac\x39\x2e\x32\xb1\xe6\x93\x14\x45\x68\xf6\x8b\x6b\x99\x7d\x1a\xae\xc7\x10\xe9\x62\xb2\x22\xdb\x3f\xce\x7c\x86\xb6\x82\x76\xb6\xf4\xc4\xf6\xfa\x7e\x94\x28\x31\xfb\x10\x65\x4a\x4e\x6c\x67\x09\x45\x6a\x44\x67\x6c\x80\x5a\xd7\xfc\xc5\xd5\x8a\xa5\xb2\xa5\x7a\xc9\x4c\xf5\xf2\x05\x76\x28\xa4\xc7\xd4\xf2\x9a\xad\x6a\x3c\xc9\x32\x61\x32\xef\xdb\xba\x53\xb5\xe4\x19\xad\xbe\x97\xee\x33\xb2\x1a\xd5\x72\x1a\xf1\x58\x8b\xb6\xe7\x48\x2d\xc6\xde\xb3\x7f\x8c\x46\xe5\x06\x24\x4a\x23\x3c\x94\xdf\xcb\x75\x1d\xe6\x08\x93\x92\x50\x88\xd6\xce\x50\xcc\xd4\xb7\xe2\x21\x23\xb5\x53\x68\x0d\x12\x30\xbe\x17\x1b\x05\xcb\xd3\x2c\xfd\x60\x5c\xa2\x72\x59\xd4\x63\x63\x81\x11\x67\xaa\x7a\xf7\xa0\x1e\x82\x2e\xf1\x5a\xeb\xa7\xd0\x5a\xd3\x59\x46\x2b\x98\xec\x8f\xd6\x48\xc7\x81\xb2\x63\x39\x2b\xa6\x8f\xa3\xf1\x18\xca\x02\x88\x74\x8b\xb2\x9b\x3c\x9c\x34\x9e\x27\x0c\x07\x85\x75\x96\xeb\x26\xb3\xb0\x69\x39\x4c\x7a\x61\x61\xe6\x56\x7b\x3c\x6e\x73\x31\xd3\xa5\xf1\xb5\x2b\x24\x00\x62\x91\x06\x31\x90\x17\xac\xf1\x6c\xd0\xc9\x44\x5c\x40\xbf\xb3\xec\x8b\x33\xdb\xcf\x98\xd1\x4b\x29\xa2\xc4\xa1\xab\x86\x23\x79\xf8\x42\xc0\x3e\xee\xd4\x21\xf5\xe2\x83\x99\x39\x8c\xed\x65\xfb\x34\xbc\x97\xcd\xcf\x03\xda\x62\x6d\x0f\xb5\x58\xdb\x4c\xa9\xf0\xdc\x37\x1a\xa5\x9a\x3a\x2e\x1c\x18\xd7\x38\xfe\x3e\x0b\x69\x09\xeb\xab\x70\x91\xd9\x69\x49\x9f\x4d\xa5\xfd\xda\xc4\xa4\xed\x78\x9e\x96\xba\xe2\xeb\x6d\x16\xea\xcb\x32\x3f\x08\xac\x23\xba\xec\x48\x8f\x86\xab\x5c\x04\x49\xb6\x0f\xd6\x73\xa9\xf8\x30\x39\xed\x07\xb8\x5b\xf2\x19\x43\xab\x03\x71\x3d\x1c\x0d\x28\xf2\xbb\x25\x12\x92\xaa\xc0\x73\x39\x88\xd7\x83\x03\xc6\x2e\x48\x7a\x23\xfc\x27\x67\x1d\xd8\xab\xcf\x59\x8e\xf1\x62\xfe\x3c\x3f\x3f\x96\xc7\xd7\x02\xd6\xc2\x65\xce\x07\xc9\x5c\x70\xf4\x9c\x92\x5f\x50\xd7\x2b\x37\x54\x22\x43\xab\x91\x20\xe0\x23\xfe\xc0\x66\x42\x0a\x46\x67\xd9\x52\x78\x0a\x11\x8f\x8e\x46\xa1\xe8\x0f\x86\x3e\x8c\x8c\x83\x50\xce\x98\x7c\xcd\x98\x62\x91\x2a\xc3\x15\x32\x18\x8c\x46\xae\xb0\x0a\xd0\x65\x24\xb2\xb9\xa8\xd6\x81\x61\x3c\x13\x59\x9f\x3c\x82\x64\xec\x44\xeb\xb9\x76\xa2\x75\xdb\x4e\xb4\xde\x6e\x26\xbb\xeb\x02\xc8\x72\x2c\x4e\x93\xa6\xa5\x8a\x08\xb4\xd6\x4b\xf7\x44\x5f\x94\x8a\xa1\xd5\x3a\xb2\x8c\xf5\x46\xdc\x13\x31\x89\xa8\x5b\xea\x85\xb4\x14\x9b\xf3\x42\x47\x58\x6b\x60\x56\xc2\x51\xc9\x0f\xf8\x8a\x5b\x2b\x0d\xa4\x08\x54\x73\x00\x50\xdb\x96\xa9\x31\xa1\xcb\x92\x4d\x47\xc2\xb1\xe9\xfa\x0a\x62\xa5\x88\xf9\x9d\x53\xb6\xb8\x23\x12\xc6\x30\xf0\x97\x51\xd0\x64\x9c\xb6\xa7\xef\x16\xca\x38\x63\x86\xce\xe9\x2a\x66\xe8\x9a\xa0\x62\x19\xe0\x27\x48\x76\xd0\x6a\x47\x1e\x17\xc5\xb1\x69\xe6\xed\x4a\xea\x3c\xac\xd1\xc0\x9f\x45\x5b\xd8\xc0\x4a\xd4\xb5\x0a\x8b\x4c\x91\x0b\x80\xdc\xd5\x88\x8b\xad\x5d\xcd\x07\x30\x12\x69\x30\xca\xec\x6a\xfe\x94\x5d\x6d\x6d\x80\xe2\xd3\xde\x64\x73\xe2\xc9\x67\xb2\x69\x7b\x62\xf1\xd9\x77\xe7\x8c\xb6\x99\x87\xe6\xcc\x09\x98\x8d\xe7\xa4\xf5\xa5\x3e\x04\x3b\x0a\x75\x8d\xd5\x14\x29\x36\x7d\xd8\xdd\x29\xdd\x86\x5e\xc6\x89\xde\x30\xb9\x98\x04\x6f\x14\x17\x89\xc8\x3a\x0e\xa6\x72\x6a\x62\x15\x99\x45\xd6\xf8\x7c\x97\x63\xe9\x86\x3c\x66\xc8\x0b\x3e\x14\x3c\xee\x49\xf0\x10\x4c\x11\xf1\x21\x97\x87\x5f\x7b\xb8\x59\x4d\xf8\xab\x77\xf5\x8c\x64\x8f\xae\xc2\xfb\x6a\xe6\xa0\xe9\x11\x65\x74\xa6\x36\x49\x5b\x62\xd4\x7b\xce\xba\xe2\x5b\xcd\x3a\x54\xe4\xda\x5c\x1f\x1b\x07\xa9\xac\xd6\x0b\xe9\x41\xbf\xd3\x77\x6d\xf5\x9f\x60\xa5\x35\xc3\xc7\x5c\x00\xd6\x51\x4d\xd5\x33\x3f\x3f\xa7\x4d\x11\x0c\xa7\x12\x6c\x45\xd5\xde\x62\x82\xb8\xda\x7c\x57\xe6\x62\x39\x67\x3b\x96\xcc\x65\xf1\x30\xa0\xab\x7c\xa2\x3e\x56\x17\xb3\x28\x62\x95\x4a\x0c\x1b\x82\x97\xfd\xcd\x5e\x15\x96\x89\x0b\x72\x8f\x98\x67\x59\x75\x15\xf9\xd1\x90\x22\xba\x10\x21\x7a\x1a\x77\x10\xe7\x33\x56\xf2\xfb\x12\x2d\xe4\xb8\x44\xc5\x18\x6a\x6e\xd3\xa2\xbc\xe3\x93\xd3\x7e\xe4\x75\xc3\x8e\x48\x56\x3a\xcd\x83\x81\x88\x4d\xe0\x3a\xf2\xb3\x36\x68\xea\xb0\xb3\x9e\x55\x8a\xd3\xd7\x81\x90\xf0\xb1\x70\x9d\x5d\x5d\x07\x8c\xe1\x19\xdc\x65\xfd\x1c\x6d\xf9\x36\x9f\xb5\x08\xaf\xdd\xb1\x46\xdd\xd5\x58\xd4\x7a\x21\x61\x1e\x8b\xd1\xaa\xa9\xb9\x58\xe2\xb8\x20\x50\x13\x78\x8c\x61\x80\x09\x8a\x72\xaf\x3d\x32\x08\xed\xca\x45\x68\x97\x8d\xd0\x2e\x8d\x50\x06\x13\x1a\xbb\xa3\x25\xc6\x6a\x69\xe1\x04\x59\x00\x10\x7b\xe6\x2a\x43\xba\x1d\x27\xc6\x5a\x3d\xbe\xfa\x21\xca\x52\xdd\x71\x78\xeb\x31\xff\x8b\x3c\x5f\x9b\x40\x95\x1c\xa0\xdc\x14\xd7\xf7\x06\xfb\x34\xda\xd5\x86\xed\xf7\x36\x77\x34\xa2\x56\xd0\x9e\xe7\xc5\xe5\xa0\xec\x75\x87\xf3\x5e\x07\x3c\xc1\x87\x13\xcf\xcf\xc3\xa1\xd7\x01\x63\xe9\xe9\xb6\xb0\xb8\x5d\xb4\x67\x17\xed\xc5\xe6\xee\x78\x0c\x7b\x98\xf1\x22\xc7\x93\x76\x4d\xf7\x65\xcc\xa1\xb2\xf1\x10\x78\x08\x67\xe8\xfa\x65\x80\x9e\x03\xf5\x10\x64\xe1\x44\x77\x7e\x01\xc4\x56\x61\x25\xe1\x2a\xbb\x17\x84\x21\x75\xc5\xa5\xe8\xa1\x20\xf4\x99\x8b\xc1\xa3\x6c\x81\x9f\x8e\x26\x07\x8e\x60\x74\xc8\xfa\x55\x69\x47\x16\x2d\xe8\xbf\x32\x42\x4a\x56\x10\x49\x64\x96\x77\x15\x32\xad\x13\x92\xd3\x88\xb2\xad\x1c\xd1\xad\xb3\x24\xe4\x24\xa5\xcf\x92\xfb\x88\x38\x4f\x72\xb6\xda\xf0\xbc\x94\xc9\x31\x6a\xd1\x76\x7c\x51\xcd\xcf\x9a\x06\x46\x86\x60\xb6\xf5\xe0\xc5\x27\x5d\xb1\x6f\x24\x1f\xbe\x3c\x2d\xfa\x5a\x93\x5d\x76\x69\x0e\xf7\xcc\x1d\x3f\xf4\x99\xa1\x1f\xdc\x43\xcc\x83\x12\x6a\xd5\xdb\x9e\xe7\xa1\x6d\xbe\xde\x11\xed\x0b\xaf\xe4\x93\xba\xc3\x66\xed\xce\x0a\xdb\xb9\x0d\x60\x85\x79\x54\xb1\xfd\xac\x4c\x95\x39\x55\x67\x04\x29\xdb\x66\x61\x92\xe8\x03\x72\x6b\x94\xf4\xd7\x6a\x43\xe2\x95\xeb\x10\xf3\xd3\x74\xa8\xb7\x22\x46\xd7\x62\xff\xf4\x30\xf2\x50\x2b\x55\x7f\xdb\x05\x7b\xcb\x2e\xf1\x5c\xdf\x93\x27\x4e\x17\x80\x5a\x37\x24\x48\x3a\xc1\x17\xbe\xaf\x7d\x29\x12\x02\x58\x66\xa3\x91\x36\x6f\x29\x7b\x1e\x03\x7b\x79\x93\x60\xef\xb8\x23\x16\xf5\x10\xac\x63\x8e\x42\xe8\x0d\xc7\x3d\x4c\xfc\x20\x58\x5b\xe7\x08\x94\x49\xa5\xc2\x4f\xa4\x1c\xf7\x18\x72\x81\xc9\x84\x7b\x2e\x56\xe7\xb6\xd0\x70\x2a\x3a\x16\xdd\x9b\x9b\x55\x1e\xeb\xa2\x88\xd1\x61\x87\x0d\x29\x2a\x14\xca\xb8\x54\x96\x78\xa3\x16\x3f\x7f\x70\x11\xdc\x25\xb6\x81\x56\xbd\x0d\x43\x8f\xb4\x1a\xb1\x90\xca\x45\xa6\x0e\x7a\x76\xc8\xa9\xab\x52\x71\x1d\x22\x20\xa7\xac\xef\x48\x31\xe7\xb4\x9e\xfc\xee\x62\x00\x60\x26\x47\x58\xa9\xb8\xa1\xce\x11\x02\x00\x20\x7e\x22\x1c\xdf\xa7\x85\xba\xc2\x76\x30\x50\xdf\x0a\x17\x45\x1f\xd2\xf6\x43\xda\xde\x12\x6d\x7b\xf7\x8d\xb8\x71\x54\xf5\x39\x2d\x6d\x6b\x23\x4a\x1e\x50\xe3\xa3\xe8\x3e\x2a\x8e\xa3\x7a\x7b\x96\x08\x1a\xa2\x6d\x31\xb3\x3d\x97\x1b\x73\xe6\xbe\x61\x5b\xa1\x35\x44\x95\xf7\x6f\x13\xc3\x51\x95\xd3\xc4\x4e\x59\x53\x3c\x5c\xe7\xff\x18\xeb\x7c\x32\x35\xe5\xbc\xff\x73\x11\x6c\xd8\xe2\xb6\xa6\xf8\x83\x9c\x98\xc4\x62\xdc\x02\x01\x6e\x41\x2e\xdc\xd6\x9a\x39\x28\x04\xbf\x87\x9b\xce\x3f\x08\x31\x26\x4f\x44\x31\xc1\xed\x92\x01\xdd\xea\x22\xa0\x9b\xb5\xe5\x18\xda\xe3\xd3\xec\x12\x88\xc1\xfd\xda\x2b\x82\x1d\x14\xf1\x83\x87\x22\xfe\x3f\x24\x45\xbe\x9f\x62\xd0\xbe\xfb\x26\x05\x05\x3b\x29\xe2\x07\x0f\x45\xfc\x87\xb4\xbd\x65\xda\xbe\x7f\x22\x3e\x09\xd9\x96\x84\x8a\x42\x65\x53\x79\xfb\xca\x26\x12\x32\xb1\x1f\xc9\x2e\xdc\x3f\x81\x5d\xc6\x61\x7e\xdf\x95\x90\xf5\x89\x4a\xc8\x7b\x3c\xe5\x90\x90\xdd\x3f\xad\x63\x98\x6f\x51\xf5\x81\x1a\xaf\xfb\xab\xb4\x0d\xe9\xfd\x1b\xbd\xb3\x0f\x60\xf8\x72\xdd\x94\xb5\xea\x6d\x50\xce\x8e\x59\xa3\x0d\xb6\x33\x24\x67\xef\xc7\x98\xe4\x75\xf3\x81\xbe\xb6\x50\x56\x07\xfa\x7e\x53\x85\xf6\xc5\xd1\x12\x47\x69\x4d\x3e\x65\x73\x96\xc3\x30\x40\xbe\xfd\x4e\x3f\x7e\x9a\x96\x12\x98\xf5\x86\xbb\x58\x2f\x7b\x5e\xa2\x4e\x1d\xcf\xb0\x59\x2e\xa3\xac\x31\xbf\xd8\x6b\xf8\x6e\x19\x2d\x74\xc2\x20\x40\xd2\x24\x2b\x87\x4c\xac\x8c\x72\xf0\x54\x02\x0e\x49\x15\xf1\x9d\xeb\x01\x18\x6b\xc4\x7b\x5a\x22\x9e\xa4\x85\xb8\x8c\xb3\x29\xfc\xd0\x54\x2a\xe5\xf4\xe0\xe4\x7a\xd1\xb3\x8b\x43\xde\xc4\x9c\x56\xfd\x10\x3d\x3b\xd3\x6a\x88\x30\x59\x19\x06\x3e\x55\xe5\x63\x2b\xd4\x89\xa3\x4d\x7a\x98\xae\xfa\x1f\xec\xf1\x86\x44\x8e\x38\x4e\x8e\xb8\x1e\xe9\x44\xa2\x1f\x04\xe1\x99\x27\x03\x9f\x9c\x72\x40\x3c\x72\x52\x8b\x60\x46\xae\x2c\xcc\xd0\xca\xc9\x73\x1e\x82\x76\xf8\x69\x0c\x0a\x27\xca\x1e\xb2\xd9\x87\xba\xeb\xb3\x5c\xb3\xa3\xe9\x43\x0c\x73\xdd\x4c\x3e\x90\x27\x39\xea\xe1\x66\x39\xc7\x9f\xd2\x91\x70\x15\x11\xf6\x7f\x8e\x97\x70\xa4\x1d\x41\x09\xd7\x4a\x1c\x07\xd6\x47\xa5\xa7\x7c\x86\x4a\xa6\x73\x35\x47\xaa\xee\xc2\x78\x0a\x3f\x81\x59\x5f\x3d\x8e\xe3\x13\x27\xfa\x7a\x28\xe4\x23\xeb\x40\xe7\xc8\x91\x23\xa5\xa7\x42\x58\xfa\xe4\x27\x3f\xf9\x49\x07\x40\x3f\x2e\x66\x85\x67\xa7\xb0\xe5\xf4\x74\x89\x01\x45\x1d\x1c\x89\x49\xb1\x89\xa0\x0d\x60\xe4\xf9\x35\x99\x0d\x0e\x3d\xbf\x66\x32\xc2\xc0\xf3\x6b\x71\x56\xd8\x29\x6c\x64\x19\xf5\x42\x8a\x1c\x4e\x72\x47\xe9\x93\xfa\x87\xdf\x93\x6f\x80\x78\xe2\x7e\x01\xb7\x01\xec\x79\x9d\x9a\xcc\x0e\xfb\x5e\xa7\x16\x17\x80\x5d\xaf\x53\x13\x45\xe0\x40\x7d\x10\x85\xe0\xaa\x17\x5b\x46\x06\x53\x48\x36\x02\xeb\xab\x32\xd8\xb2\x78\x23\xc8\x47\xf4\xb4\x0a\xd4\x5c\xc3\xd1\x0b\x7c\xb4\x5d\xc9\x3a\x4e\xe7\x53\xaf\xa4\x42\xc3\x60\x56\xe3\x52\xf9\xf9\xcf\xd0\x90\xac\xf0\xa9\xd4\x33\xc3\x8b\xaa\x10\xb4\x3d\xb7\xec\x0a\x6c\x00\x98\x56\x4d\xb2\xd9\x5e\xa5\xe2\xf6\x3c\xec\xf6\x60\x04\xa0\xc0\x41\x0e\x91\xdb\x83\x43\xb3\xec\xd4\xa6\x12\xc9\x65\xad\x67\xa0\xa7\x66\x92\xcb\xf8\x30\xd5\x88\xce\xa3\x9b\xe9\x57\x2a\x6e\xdf\xc3\x6e\xdf\x34\x73\xdc\x5f\x45\x7a\x3e\xdc\x7e\x61\x63\xf6\x2c\xf7\x27\x34\x68\xe7\xd3\x8d\x76\x2b\x15\xb7\xeb\x61\xb7\x6b\x1a\x15\xb3\xec\x76\x0b\x5b\x53\x64\xd4\x9d\xd0\x90\xca\xa2\xdb\x18\x54\x2a\xee\xc0\xc3\xee\x20\xd5\x31\xd9\xd2\x60\x62\xbf\x24\xa1\xc2\xc1\x94\x6e\xed\xb7\x5a\x34\xec\x0d\x2a\x27\x63\x9c\x1e\x3c\xac\xfc\xeb\x25\xdf\x26\x3b\xab\x82\x2d\x38\xd6\x31\x10\x6f\xcb\x74\xc3\x0e\xe8\xbc\xcb\xb8\xe6\x21\xe1\x19\xe5\x4c\x32\xbd\x4c\x16\x89\x0b\x9a\x3a\xf1\xd9\x90\x20\x97\xf1\x34\xce\xb0\x38\xba\x9c\x48\x9b\x9a\x51\x4e\xe6\xd3\x91\x66\xbb\x79\x1e\x14\x13\x1c\x78\xbb\xbb\xe4\x0e\xf1\x6a\x06\x43\xe8\x17\xf2\x6b\x31\x36\xd5\xa7\x7c\xe6\x17\x72\xec\xe3\x32\x6f\x96\x6b\x47\x1e\x76\x7d\x00\x87\x5e\x54\x1b\xf8\xac\x0f\x03\x2f\x12\xcf\x02\x2c\x8e\xe9\x86\x70\x08\x12\xbb\xaa\x98\x84\x0e\xa8\x54\x3a\xb6\x85\x3e\xa9\x89\x36\xa2\x4a\xa5\x23\xec\xa1\x03\x8b\x63\xd8\x74\xd4\x8d\x1c\xf9\x16\x9a\x59\xdb\x72\xa7\x26\x86\x33\x3a\x14\x52\x37\x00\xd0\x09\xfc\x88\xa9\xb1\x5b\x45\x51\xe4\xaf\x20\x07\x24\xe9\x95\xf3\x72\x9f\xf5\xf7\x93\xee\xc7\xd1\x9a\x4d\xb3\x36\xc1\xcb\x59\xec\xfa\xcc\x4f\xd1\x6d\xc6\x7f\x94\xf0\x16\xe0\x31\xe9\xb1\x33\x36\x58\x14\x5a\x1c\xb9\x83\x45\x0e\x80\xeb\x7c\x90\x9a\xcc\xf2\x30\x70\x0a\xad\x35\x69\xce\x8b\x64\x8b\x72\xd0\xd9\x4e\x30\x8c\x3e\xc8\x72\x58\x8e\x14\x46\xa0\x83\x89\x03\x60\x98\xbb\x75\x12\xd8\x72\xa8\x4f\x56\x50\x66\x4b\xf6\xbd\xb0\x26\xbe\x70\x8a\x09\xad\x4d\x78\xca\xfe\x87\x2b\x15\xe1\x84\x15\xdb\x4e\x58\x73\x77\x1c\x6b\x38\x39\xe6\xca\x95\xc9\x2e\xcf\xf3\xfc\x84\x7b\xc3\xc8\xa3\xae\x0f\x77\x09\xe2\x6e\xd5\xdb\x9c\xb4\x5b\x8d\xb6\xa1\x6c\x7e\xe4\x11\xad\x98\x4b\x58\x95\x32\x34\xd2\x65\x61\x96\x40\xb4\xda\xa9\x54\x86\xfb\xf8\x19\x0b\xed\xf3\x82\x99\x70\x1d\x1b\x02\xce\x3e\xb6\x7b\xa8\xf2\xfc\x00\xaa\x3c\x27\x2d\x6b\x2d\x9f\x7e\x10\xd6\x34\x45\xe2\x80\x78\xf0\xec\x80\xa2\x88\xd3\x5b\xa4\x1d\xab\xe4\xae\x77\xac\x1d\x80\xe6\xad\x6d\xcc\xd7\x36\x5a\x41\x67\x1d\xe8\x70\x7a\x77\x38\x27\x38\x8d\x68\x54\xb0\xd8\x79\x56\x18\x79\xa1\x58\x1c\x70\xe8\x85\x35\x95\x1d\x06\x9e\x11\x00\x86\x95\xca\x70\x2b\x1c\x21\xaa\x54\xca\x7e\xa5\x42\x5a\x51\x5b\xb8\x29\xe2\x00\x98\x73\xd0\xaa\x8f\x85\xd3\xe9\x48\xa4\x7a\x1e\xa9\x89\x24\xf1\x2b\xab\xff\x50\x5f\x6b\x51\x38\xa4\x1d\x04\x69\x6e\x7f\x11\x6c\xc9\x6e\x3d\x1b\x92\xa5\xa0\xeb\x40\x67\x15\x73\xe0\x19\xa9\xd8\x68\x03\x88\x3d\x5a\xb3\x72\x08\x47\x4b\x76\x9e\xb9\xc4\xc6\x18\x82\xd1\x28\xab\xc5\x1e\x8d\x84\x87\x0f\xed\xe9\xc7\x69\xf9\xd5\xcf\xd6\xab\x1f\x6b\xbb\x8b\x4d\x05\x56\xdb\x8f\xea\x44\xb0\xf8\x21\x07\x9a\x2c\xeb\xce\x7c\x38\xef\xc0\x71\x61\x56\x00\xe6\xb0\xf2\x20\x62\xea\xff\xf7\x38\x77\x51\x1b\x27\x4e\xd4\x80\x03\x67\xcc\xb9\x08\xe2\x0d\xb8\x64\xf9\x52\x67\xd0\xc1\x0e\x18\x0b\xdd\x7d\x2c\x92\x62\xa8\x49\xc8\x97\x6e\xd5\xcb\x94\x13\xb0\x30\xc0\x75\xc0\x68\xe4\x67\xe6\x5e\x19\xe7\xfa\x00\x94\xbd\x02\x6e\x1a\x8d\x46\x9c\x12\xf9\x5a\xe2\xec\x14\x5b\xf2\x80\x62\xa7\xca\xd9\x97\x4f\x0e\x93\xd3\xe1\x29\x24\x34\xac\x39\x4b\x63\x5d\x50\x45\x73\xe1\x53\xaa\x87\xe5\x7f\xfb\xd0\x87\x2b\x8f\x3c\x3a\x7f\x62\xc1\x5b\xfc\xd4\xc9\xff\x5a\x1f\x8d\xff\x5f\xb5\x3d\xef\x2e\x36\x4f\xd4\x26\xe6\x00\x8f\xce\x32\x76\x35\x30\x3f\x6d\xb2\x17\x30\x1c\xf4\x43\x82\x9a\x0b\x9f\x72\x5b\x27\xe6\xdb\x8b\x8d\x13\xd1\xa3\xad\xea\x89\x85\x13\xb5\xf6\xe2\x89\xe8\x51\xb0\xe8\x9e\x70\xdd\x13\xdd\xf5\xdd\x63\x70\x02\x8c\x14\x04\x92\x99\xf4\xf7\x4c\xe2\x1e\x91\xe8\xba\xad\xb3\xff\xb7\x3d\x6a\xa1\x83\x6d\x0e\xb4\xd8\x52\x7b\xb1\xc5\x73\x8d\xc4\xfb\x00\x3e\x32\x22\x5b\xeb\xdf\x1e\x3d\xd1\x6d\xcf\x03\xf0\xe8\x87\x16\xe0\x90\x06\xcd\x05\x77\xb1\xe9\xb6\xf6\x57\xff\xd3\xaf\x7e\xb6\x3d\x0f\x9a\x1c\x99\x85\xf5\x3a\xdc\x3d\x06\xbc\x0b\xfb\xab\xff\xc9\x7b\xa1\xc0\x2a\x87\x1f\x75\x4f\xd4\x5a\x27\xce\xf0\x11\x9a\x77\x5b\x27\xce\xd4\xe0\xbf\x2f\x7e\xca\xfb\x70\xc5\x5f\x1d\xec\x6d\x9e\x58\xf8\x7f\xf3\xff\x56\x5d\x1f\xb7\x1f\x6d\x9d\x38\x13\xa7\x9b\x64\xb0\xb8\xb8\x30\x51\x9c\xc2\xe4\xa1\x38\x35\x9b\x38\xe5\xcd\x22\x4e\x59\xc3\xf9\xfe\x8a\x53\xe5\xce\x68\x34\x7c\x02\x8d\x46\xe8\x89\x02\x69\x2a\x85\xea\x43\x69\xea\x9f\x48\x9a\x9a\x10\xdb\x60\x82\x6e\xf4\xde\x97\xaf\x42\x01\xe5\x04\xda\xc9\x3d\x4b\x5a\x28\x3b\xf3\xc8\x7e\xd4\x93\x56\x80\x40\xec\x49\x2a\x23\x4f\x34\x16\x49\xb5\xd1\xac\xf3\xe5\xdf\xd8\x1b\xee\x23\xe2\x61\x0f\x6e\x85\xd5\x46\xdb\x52\x8d\x84\xd6\xb5\xb9\x7c\x8f\xa5\x9d\xe3\x81\xac\x5b\x28\x0b\x0f\x75\x03\xf3\x41\xe5\x86\xd9\x4b\x95\x94\x0e\x56\x8b\x56\x29\xee\x07\x39\x2e\x4f\x22\x76\x06\x21\x72\x44\xe9\x00\xa0\x83\x23\x29\xa0\xf1\xff\xfd\xb3\x52\x3a\x23\x46\x3a\x43\x66\xf9\x71\xde\x37\x1a\x61\xe8\xeb\xaf\x52\x13\x1c\x79\xa4\x96\xa9\x16\x0e\x3d\x52\xc3\x11\x0c\x3c\xc2\xe5\x3a\xd8\xe1\x7f\xfd\xb3\xf1\x0d\x84\x92\xec\x62\x1e\x5b\x0e\x85\x53\xf0\x24\x73\x32\x92\x09\xd5\x5c\xb4\x98\x45\xcb\xe7\x54\xb9\x17\x69\x59\x55\x0b\x67\xa1\xc3\xb2\xe7\xf5\x26\x68\x72\x95\xb4\x6a\x5a\x8f\xac\xfb\x29\x51\x49\x00\xd2\x29\x1d\xce\x67\x7a\xfb\x82\xd1\xa8\xf7\x44\xa7\x60\x77\x58\x96\x03\x65\x29\x96\x33\x95\x06\x4f\x14\xe0\xc5\xc2\xf0\x78\x3f\xa4\xac\xa8\xb0\xd0\x20\xed\x2b\x2e\xfc\x4c\x48\x56\xb6\x72\x0f\xa3\x14\x45\xd1\xce\xdf\xb4\xae\x9f\x14\xd2\x6d\x73\xe1\xc4\xba\x7b\xe2\xcc\x3c\x38\x31\x5e\x58\xd1\xae\x76\x6d\xd7\x9b\xce\x52\x1f\x47\xa5\x1e\x46\xfc\x58\xb1\x82\xec\x6f\x87\x42\x3a\x83\xcb\x86\xd9\xde\x40\xae\x8f\x93\xd7\xb5\x8a\xa0\xba\x71\x6b\x5c\xe6\x4e\xc7\x37\xc8\xe2\xeb\x80\x31\xc7\x52\xad\x8a\x04\x86\xf7\xfa\x4c\x33\x46\x51\xfa\x18\x15\x67\x67\xd5\x90\x9b\xc2\x0c\x01\xc8\xc0\x18\x26\xf2\xdc\x4f\x4c\x20\xf5\xb4\x17\xf3\xe4\xfa\xa6\xfc\xe4\x16\x89\x77\xdb\xf1\xc9\x8d\x8a\xdd\x38\x13\x1d\x42\x2f\x77\x00\x60\xec\xf2\x3c\x9d\x49\x92\x89\x63\x3f\x67\xe7\xec\x30\x33\x59\x42\x75\x0d\xc6\xd0\xef\x74\xd0\x80\xa1\x6e\xd3\x59\xb7\x26\x6f\x5c\x5a\x1d\x46\xac\xb4\x8c\x4a\xfa\xbb\x03\xc5\xbd\x41\x61\x36\xfe\xb1\xb4\x2e\xfe\x8c\x1d\x28\x6f\x4f\x8a\x32\xcb\xaf\xa5\x75\xf9\x97\x67\xe7\x8c\x32\x9d\xbb\xe3\x93\x47\x64\x76\xc9\x9b\xe3\x4b\xed\x42\x24\x4a\xf6\xc5\xb7\x7d\xb7\x9a\x2e\xd1\x0d\x51\xc4\x6b\x17\x27\xc0\xd2\x7a\x48\xc6\x0e\xe4\x5b\x72\x71\xcd\x52\x00\x51\x57\x4f\xe2\x2c\x37\x25\xab\xc8\x54\xf2\xbb\x5d\x7e\x06\xe4\x65\x06\x6c\xad\xb0\x8b\xea\x95\x83\x30\x0b\x5b\x0a\x8b\xaa\x16\x9f\xb9\xf0\xb3\x8e\xa3\xb1\x03\xd1\x69\x54\x38\x14\xfc\x9b\x03\x8d\x2e\x30\x9d\x4d\x28\xed\x23\x44\x4f\xf3\x89\x5d\x11\xaf\xab\xe9\x52\xdf\x2f\xac\x4e\x65\x29\xb1\xbe\x4f\x4a\xeb\x2b\x6c\x9c\x28\x75\x94\x1e\x9c\x8c\x78\xa2\x78\x48\xad\x8e\xac\x30\x3e\xff\x46\xca\xce\xc1\x93\x84\xac\x24\xbe\x77\x51\x57\x46\x16\x42\xa5\x00\x47\x8c\x97\x12\x23\x9d\x53\xc6\x6c\x8c\x01\x8a\xa2\x49\xfd\xe2\xdf\x55\xa7\x02\xde\x29\x9d\x7f\x6a\x8f\xe2\x82\x89\xee\x04\xa2\x3b\x24\x64\xfb\xc9\x61\xc2\xd0\xca\x84\x05\x43\x4a\x58\xe6\x90\xf9\xa5\xb5\x61\x31\x51\x29\xed\x0e\x0c\xbb\x85\x4b\x35\xec\x76\x1d\x68\xee\xdb\x0a\x73\x09\x94\xd5\x7a\x35\xb9\xc7\xb2\xe4\x93\x13\xd7\xad\x2c\xaa\x57\x6f\x9c\x9f\x17\x66\xfd\xc9\x14\x24\x32\xa8\xa1\x16\x1b\xdc\xd8\x51\x0a\x88\x29\xeb\x48\x64\x32\xdd\x1f\x84\x11\x66\xf8\x74\x61\x29\xfd\xdd\x81\xab\xc3\x80\xe1\x41\x80\x8e\xf6\x8a\x5b\xd0\x79\x4a\x61\xaf\xb4\x1e\x17\xe0\xa8\xf1\xe5\x41\x58\x21\x07\x93\x2c\x49\x5b\xc9\x14\xae\xeb\x24\x47\x52\x02\x46\x0e\xc1\xb2\x30\x2c\x05\x21\x59\x29\xb9\xab\xfe\x59\xbc\x3a\x5c\xe5\x89\xeb\xab\xfe\xd9\x71\xa9\xd3\xf7\xa9\xdf\x61\x88\x46\x40\xd4\x20\xe4\x9b\x82\x2a\x22\xfe\xad\xe4\xae\x62\x12\xd7\x81\x49\xaa\x0e\x25\x5f\x15\x33\x67\xf1\x59\x95\xf4\x49\x37\x83\x87\x23\x74\x34\x53\xa6\x6d\x48\x03\x07\xa6\x2e\xfc\x8b\xca\xa8\x55\x2d\x77\x5f\x31\x17\x12\x1c\xab\x1a\xa4\xa0\x99\xd7\xe7\x3e\x2a\x89\x1c\x25\xb9\x1f\x97\x5c\x19\x21\x88\x57\xca\x79\x64\xa2\xe3\x13\x05\x39\x4d\x5f\xf7\xfd\x40\x93\x34\x60\xce\x51\x83\x8b\x78\x63\xd0\xf7\xb4\xc3\x41\x7e\xdc\xf0\x3c\x0f\x55\x2a\x7e\xd9\xf3\xc2\xc5\xf4\x91\x50\xf2\x25\x07\x62\x48\x41\xd3\x09\x98\xce\xfc\x44\x36\xaf\xe6\x66\x71\x66\x64\x72\x17\x66\x36\xac\x4f\x97\x5a\x31\x4d\xec\xcb\x36\x61\xed\x02\x71\x7e\xd3\xca\xbe\x49\xf9\x33\x0d\x99\xb5\xab\x4b\xd7\xd3\xa5\xe3\xd5\x2d\x4b\x70\x8e\xa7\x32\x7f\x78\x97\xe7\x65\xf2\x0b\x8e\x28\xb3\x8a\x0d\xd1\xe4\x2d\x67\xf3\xca\x1d\x53\x64\x2e\xbb\x4e\xcc\x0c\x54\xa1\x32\x71\xfd\x85\x10\x80\xcc\x21\xcc\xca\x29\x4a\x27\x1c\xf0\x19\x4f\xd3\x8a\xbe\x62\x3f\xd3\x95\x0a\x8e\x0e\x61\x82\x85\x35\x41\xa5\x62\x39\x84\x10\xca\x2a\x74\x2f\x1e\xf2\xf2\xae\x5d\x94\x35\xbb\x20\x35\x3b\xc0\x1f\x06\x30\x2a\xbc\x93\x49\x1c\x8d\x33\x67\x66\xe9\x6e\x48\xdc\xd5\xc8\x8d\xac\x2d\x6f\xf5\xad\xb3\x6f\xa0\x7f\x8a\x83\x72\x27\x3e\x28\x07\xa3\x51\x00\x7b\xfa\xab\xac\x09\xf6\x45\x3c\x4c\x51\x97\xba\xec\x2c\x38\x0b\x0b\x7d\xe3\x70\x8a\x3e\xb2\xe0\x63\x6a\xfa\xe2\xbd\x57\x29\xf8\x71\xcf\xd5\x02\xb9\x3d\x5b\xe5\x82\x43\x63\x5e\xf9\xb2\x7d\x72\x28\x26\x80\x32\x8e\x9e\xf5\x9f\x15\x4e\x99\xc2\x2d\x60\xd7\x17\xc4\x38\xa9\x84\x96\x3d\x54\x19\xad\x2f\xea\x7a\xf5\xbd\xdd\x7d\x5a\xc5\xba\xb7\xab\x5d\xb4\x0c\x3c\xbf\xd5\x6d\xc3\x55\x8f\xba\x03\x88\x61\x98\xb4\xd4\x35\xa7\x92\x55\xad\x8f\x5c\x1d\xcf\x74\x36\x96\x5b\x68\xe7\x1e\xed\x14\x33\x39\x87\xe4\x0c\xf5\x07\xd5\x01\x0d\xcf\xee\x44\x04\xd1\x99\x74\xeb\x29\x3d\x7a\xdc\x53\x07\xaf\x90\x90\x22\xa3\x4b\x0f\x3d\x5c\xd3\x5f\x39\x8f\xaf\x59\xdf\x61\x94\x32\x77\x42\x7c\xf9\xf8\x8b\x9a\x6e\x8f\x49\x11\xc4\x8d\x40\xb3\x9c\xa4\xe5\x28\xb6\x09\x0e\x2b\x95\xf2\xb0\x40\x8f\x22\xd7\xad\xd6\xb0\x0b\xfb\xdf\xb0\x52\x29\xc8\xad\x04\x1e\x95\x7f\xa6\x09\x96\xf3\x81\xa3\x3c\x3f\x78\x0f\xca\xb9\x7f\xd9\x2d\xa3\xd1\xa8\x2c\x94\x0f\xac\x8f\x88\x03\xc0\x38\xe1\x91\xca\xdc\xcc\x4d\xef\x49\x82\xb2\xb6\xff\x36\x47\xa1\x94\xf4\x25\x6a\x87\x31\x3d\xc6\x1b\x18\x8d\x72\xbe\x0b\xe5\xad\xf8\x0c\xb6\xf5\x90\x20\x3d\x4e\x25\xe4\xc6\x67\x7f\xe6\x52\xb0\x88\xdc\x94\x9d\x39\x61\xc2\xc2\x0e\x34\xe9\x58\xbc\x46\x16\xad\xe7\x38\x1d\x9a\x61\xc5\x3e\xb8\xd9\x97\x8e\xef\x4d\x80\x07\x19\x20\x44\x79\x93\x64\xb0\x23\xbd\x7f\x35\x29\x54\xea\xb9\x26\x49\x58\x4b\xe1\xd3\x6b\xd5\x4e\xd8\x45\xab\x98\xe3\x6d\x85\x43\x5b\x48\x7e\xd9\xf9\x1e\xe9\x48\xdd\x0a\x01\xe3\x36\x8d\xf9\x2b\x32\x0c\x27\xef\x87\x4f\x91\xef\x40\x8e\xd6\x11\x81\x96\x36\x4c\x24\xa2\x59\xe5\xfc\xcd\x05\xb0\x8b\xbb\x87\x49\x84\x28\x53\x7e\xd2\xb6\x13\xc9\x3b\x6e\xc5\x0a\x06\x15\x27\x3a\x40\xf8\x11\x5c\x42\x67\xd9\x7e\x8a\x7c\x37\xce\x83\x64\x9b\x87\xbb\xda\x2b\x9b\x9d\xea\x00\x95\x18\x21\x36\x1c\x1c\x30\xd5\x1d\x3c\x8d\x08\x7b\xda\x27\xdd\x00\x51\xd7\xe9\xf4\xe5\x75\xa4\xc0\x4c\x66\xef\xf4\x11\x1f\xbe\x17\xf8\xd8\x3d\x3f\xe8\xfa\x0c\x75\xf7\x8b\x2e\x81\x31\xef\xee\x73\x88\x74\x11\xdd\x46\x3f\x87\xa2\xae\x18\x91\xa3\xe2\x48\x11\xb9\x05\x9f\x45\xfb\x2e\x18\x43\x1c\xbd\x80\x23\xbc\x1c\xa0\xa7\x70\xf7\x80\x40\x57\x4d\x46\xb8\x2c\x94\x29\xd4\x75\x4c\x16\x07\x66\xf0\x3a\xe3\xeb\x8f\x65\xcf\x1a\xdf\xb8\x88\xb9\xb7\xa4\x43\x62\x7a\x7f\x94\x74\x90\xeb\x50\xd1\x57\x7b\x74\x58\xb8\xb2\x12\x20\x51\x14\x07\x98\xad\x81\x31\x80\xc5\x23\x96\xf2\x7d\x16\x37\x13\xf2\xea\xad\x31\x47\xa4\x9b\x2d\x2d\x8d\x1f\xd5\x38\x40\x24\x94\xa5\x13\x26\x33\x13\xaf\xc9\xbe\x8d\xe1\x8d\x2e\x63\xd2\x15\x2a\xc8\xb9\x34\xdd\xd5\xd4\x96\x2b\xb1\xe1\x62\x9f\x73\x06\x07\xc1\x53\x28\x62\x34\x5c\x53\xa4\xad\x86\x21\x33\xc0\x76\x35\xbd\x9e\xa8\x67\x2c\x30\xcd\xeb\x93\x4d\x37\x5a\x44\xca\xea\xc3\x21\xf3\xf4\xc5\x2d\x94\x2e\xb4\x91\x78\x36\xc7\x5a\xd4\xbe\x48\xa3\xed\x39\x33\x7c\xb2\x7a\x9b\xfe\x5a\xd2\x5b\xb6\x6a\xde\x69\x6b\x77\xbc\x5b\x74\x39\xba\x75\x77\xa3\x0a\x48\xb9\x00\x65\x00\x80\x31\x4c\xd3\x4f\xf6\x6e\x20\x97\x44\xe7\x72\x68\x19\x69\xdf\x83\x56\xb2\x87\x20\xd2\xd1\xd1\xac\x79\xa1\xa8\x47\x51\xd4\x77\x39\x06\xf9\xcb\x30\x45\xa9\x99\x1a\x56\x10\x93\x19\x5d\x04\xec\xf8\x6c\x56\x96\x28\xce\x22\x48\xb5\x60\xbd\x4f\xea\x71\x28\xb3\x38\x60\x0e\x55\x2a\xf6\x81\x09\x81\x5c\x97\xa2\x13\xf8\x8a\xcb\xa0\x70\xb2\x33\x16\x54\x9b\x83\xce\x0b\xf9\xde\xb4\x63\x64\xa4\xaf\x75\x30\x67\xf8\x46\x6a\x3c\xd4\xc2\xcc\x1f\x09\xf9\x11\x8d\x46\x8e\xf4\x85\x99\x5e\x4c\xf7\xb6\x4f\xd4\x58\x68\xb6\x03\x9b\xf5\x27\x36\x8d\xd8\x5f\xef\x61\x25\xf2\xe4\x6f\x1d\x40\x07\x27\x4a\xb7\x92\x8c\xb3\x91\xda\xc0\x8d\xff\x53\x9e\x56\xcd\xee\xdd\xd0\xb1\xf6\xf4\x9d\xba\x7d\xbe\xaf\xfe\x4f\x4f\x6a\xc9\x30\xca\x8b\xea\x34\x86\xf6\x26\xdc\xcc\xbd\xe8\x49\x78\x45\x37\x83\x8e\x62\x91\x3f\xb9\x91\x53\xbe\x1c\x75\xa3\xe9\x5b\x38\xbb\xca\x18\xb3\x16\x6a\x8f\x61\xba\x85\x09\xd1\xbd\x13\x25\x3d\x06\xd9\x18\x46\x78\x85\xf8\x41\xaa\x03\x33\x59\x37\xec\x5a\x24\xd5\x5d\xd2\xba\x61\x57\xc2\xba\x61\x57\xca\xba\x21\xee\xaf\x6c\x4c\x8f\xba\x4e\x86\x2d\x04\xe9\xfb\xcd\x8f\xb1\xe0\xc7\xd9\x45\x92\x98\x85\xc4\xca\x48\xcc\x42\x62\x6d\x04\xfe\x5a\x38\x64\xd5\x65\x4c\xaa\x03\xbf\x73\x0a\xd1\x85\x65\x9c\x32\x5b\xcb\x66\x41\x84\xd1\xb5\xad\xc4\xa3\x89\xdd\x9e\x7a\x6c\x34\x52\x01\xd3\xd5\x61\xe2\xff\x23\xef\x5d\xbb\x23\xb9\xb1\x03\xc1\xef\xfc\x15\xc9\x58\x39\x05\x28\xc1\x60\x26\xeb\x21\x29\x59\x51\x9c\x52\xa9\xaa\x5b\x63\xa9\xaa\xac\x2a\xb9\xdd\x93\x0c\xd1\x60\x26\x32\x13\x62\x10\x91\x42\x20\x8b\x45\x31\xf2\x1c\xb7\xbc\x6e\x8f\xc7\xde\xb5\x77\xc7\xdb\x3b\x6b\xf7\xb8\xd7\x33\xf6\x78\x7d\xce\x7a\xdc\x63\xbb\x67\xdb\xfd\x90\x3f\x68\xfa\x3b\xeb\x2f\xcc\x69\xb5\xbd\xdf\xf6\x27\xec\xc1\x05\x10\x81\x78\x24\xc9\x92\xd4\xe3\x9d\x9d\x73\xea\x14\x23\xf1\xbc\x00\x2e\x2e\x2e\x2e\xee\x23\xf2\xfc\x21\xb7\x06\xf6\x58\xe3\x74\xfa\x9d\x65\xa6\xde\x3a\x5e\x58\xa2\xd4\x09\x7a\xec\x8b\xc5\x89\x50\x84\x19\x3d\x36\x68\x3f\xaa\x9f\x2a\x0e\x82\x77\x8b\x22\x28\x78\x44\x25\x3d\x66\x8a\xc9\x42\x34\x7d\xc2\xd5\x9c\x8b\x61\x67\xd4\x07\x51\x38\x84\xe8\xc4\xe0\x42\xff\x84\x66\x1a\x48\x7d\xbc\xf8\x5e\xb8\x8d\xaf\xee\x3b\x2a\x6a\xdd\x09\x1a\x1b\xaa\xe5\x8d\x48\x33\x15\x91\x74\xe2\xcd\x54\x68\x1e\xda\x2b\x32\x4d\x96\xd9\x5c\xe7\xc3\x47\x2d\x73\xce\xf8\x6c\xae\x74\xae\xf9\xaa\x65\xf3\xec\x2b\x92\x4f\x22\x60\x4c\xf5\x57\x2d\xdb\x60\x6b\x8b\x16\x9b\xbf\xa0\xb6\x54\x15\xee\x63\xfa\xec\xae\xc9\x7e\x38\x9d\x56\xdc\x7d\xd7\xc3\x38\x1a\xb8\xbc\x90\x9f\x20\xeb\x3c\xa6\xcf\x90\xdc\x52\xa4\x5f\x9b\xbf\xa7\x86\x7b\x78\xac\xa8\x54\x5c\xcc\xde\x12\x13\xf6\x4c\x83\xdf\x96\x5e\x1b\x8c\x11\xb1\x59\xf6\xe3\x6b\xb0\x70\xba\x66\x4b\x72\xeb\x1c\xde\x51\xa6\xb3\x75\xa4\xcf\xce\xc6\x88\xc5\xb6\x42\x15\x70\xd8\x0d\x2f\xd0\x86\x71\x06\x7d\xe1\xce\x35\xdb\xf2\x1f\xe1\x5e\xed\xad\x5b\x64\x43\x0c\xdb\xcd\xee\x62\x14\x5b\xa4\x3d\x7b\x36\x94\xe4\xb4\x76\xbf\x6e\x0e\x64\xca\x9f\xb1\xc9\xd6\x4c\xe3\xdf\x25\x94\x48\x13\xab\xab\xbf\xa7\xc0\xdd\xc2\x86\xd9\x36\x74\xe3\x6b\x3e\x98\x2e\xf1\xab\x76\x8f\x10\xef\xf8\x7d\x69\x9c\x0a\xa3\x41\x08\x22\xf7\x2f\x42\x68\x24\xf1\xe2\x2c\xd5\x0e\xec\xf2\xfc\x29\x4a\x60\xbf\x78\x0b\x34\x65\x50\xce\x4a\x41\x43\x05\xbc\x9d\xba\xaa\x64\xdb\x8d\xde\x44\x3c\xe4\x3f\x2d\x6c\x97\x6b\x69\x51\x15\xf5\x31\xce\xf3\x01\xbe\x3d\xa8\xb6\xd7\xba\x0f\xeb\xd7\x3a\x16\x99\xbd\xcc\x21\xc5\x44\xa7\xae\x92\x05\xb8\xe4\x61\x6b\x29\xe7\x41\xa2\xd6\x42\xd2\xe2\x22\xdb\x82\x5d\xd9\xa6\xba\xf4\x2b\xa2\x0a\x73\x1b\x01\x68\x22\xb7\x91\xe5\x42\x8b\x6d\x83\xb4\x63\x23\xe9\xd5\xc0\x25\x36\x9e\xb5\xa1\x91\x08\xbb\x58\xb9\x75\x60\xc9\xd2\xb4\x37\x66\x3c\x41\x72\x3b\xc3\xaf\xa4\x1b\xa2\xdb\x45\xcb\x5e\x94\x9a\xf9\x49\x22\xba\xc5\x1b\x34\xb2\x98\xe0\x25\x49\x30\x50\x4b\x79\x29\xd1\xa9\x31\x5e\xfe\xd6\xa8\x56\x5f\x43\xf8\xda\xeb\x7f\xd5\x12\x3d\xd9\x76\x7a\xad\xa5\xfe\x6e\x5e\x76\x21\x18\xaf\xcc\x73\x76\x5b\xe2\x6e\xb7\x3c\x98\xe1\xfd\xf3\x6a\x08\xc2\x7c\x04\x39\x7b\x36\x64\xbf\x20\x5e\x69\x2b\x95\xf7\xc9\xe9\xb0\x82\x3f\x02\xbf\xd2\xb2\x2a\x10\xd3\xa6\x39\x1f\x51\x8d\x0d\x6c\x58\xd6\xb0\xf6\xb8\x50\xa6\x76\x67\xc2\x16\x4c\x4c\xb2\x4e\x6a\x5f\xb5\xb9\xcc\x54\xc7\x31\xa5\x9d\x74\xda\x79\xea\x10\x74\xa2\xe6\xc8\xb4\x8d\x03\xe7\x8c\xb4\x32\x69\x2e\x86\x71\xe1\x24\xc5\x45\xcc\xab\xa2\xc7\x45\x9b\x9b\x0c\x4a\x1b\x1a\x19\xc9\xdb\xfd\x3d\x39\x1c\x90\x12\x15\xd5\xb6\x6c\x9d\x9b\x3e\xbe\x98\xa4\x67\x73\x96\x4c\xb7\x60\x70\x57\xa1\xe9\x57\xe3\x3a\x5b\x9e\x70\xfc\xd7\xd4\x52\x1c\xd0\x42\xc2\x89\x0b\xbc\x70\xe0\x90\xf2\x9e\x50\x92\xb3\x2c\x1a\x7d\x2e\x3f\x45\x8e\xba\x0b\x22\x5e\x8c\xba\x8b\xab\x52\x77\x71\x31\xf9\xd6\x77\xbd\x4d\xb0\xf5\x74\xb7\x7e\x58\x5a\x27\x6a\x81\xf3\x40\x2f\xb0\x77\x3c\x7b\xca\xe1\x35\x4c\xb2\xb2\x2b\xe5\x5c\x3e\xd9\x9d\xad\x57\xe0\x8e\x42\x12\x17\x3b\x39\x7c\x76\xbb\x5f\x3e\xa3\x3a\x87\x59\xab\x0a\xb0\x2d\xdb\xe4\xf3\x01\x7b\x35\x94\x2f\x1c\x58\x11\x11\xf5\x5d\xb8\xf2\xad\xc1\x6e\x7a\x3b\xea\x77\xbb\x9b\x88\xdf\x76\x01\xd7\x8b\x01\xa5\xd8\x1b\xd1\x29\xde\x4d\xb7\xb6\xb0\xb8\x25\x2d\xe4\xdd\x2e\x12\x91\xfb\x61\x6c\xed\xca\xc2\x45\x78\xb5\x9e\xa8\x8e\xba\x76\x00\x57\x43\xdb\xd7\x91\x6e\xa3\x88\xf1\x0d\xb2\x31\xc7\x68\x33\x5c\x6d\xf3\x6a\x27\x96\xba\xf2\x9c\x2a\xbc\x71\xb5\xe3\xad\x1a\xe1\xbf\x05\x0c\xc4\xa1\xef\x2a\xb8\x6e\x7e\x1b\xb3\x20\x5c\xe0\x8b\x02\xdf\x52\x0f\xe2\x0d\x76\x3b\xe2\xdd\xae\x89\x39\x57\x10\x7e\x8c\xb8\xa3\xfc\x94\x64\x64\x49\x12\x32\x6e\x9f\x4c\x77\xff\x9f\x46\x7d\x32\x8f\xe0\x71\x9f\xdd\x1a\xe3\xca\x10\x6a\x55\x46\x2c\x06\xbc\xd1\xa8\x34\xde\x43\x34\xea\x93\x2c\xea\xe3\x21\xa2\xd1\x78\x6b\x40\xe6\x11\x12\xed\x7d\x8d\x68\xec\x6f\x86\x9e\x30\x43\x20\xd3\x48\x58\x84\x01\x85\xfe\x12\x5f\x08\xed\xf5\x30\x49\x22\xba\x9b\xdc\x62\x3d\x2f\xf2\xc9\xa4\x8d\x11\x48\x30\x59\x44\x4d\x3a\x9d\x60\xcd\x0c\x2c\x7a\xf3\xdb\xe9\x1e\xaa\xb6\xdf\x2b\xfa\x5d\x9a\xe1\x93\x69\x34\xc1\xc3\x65\x34\x27\x93\xdb\xc6\xf9\xc9\x04\x93\x75\xa3\x49\xe2\xa8\x1a\xfe\x7a\x4a\x16\x64\x49\x32\x4c\xe6\xd1\xb2\xb7\xf0\x62\xf4\x57\xd6\xf9\x72\xbc\x2c\xd6\x9d\xa4\xc4\xcc\x6e\x75\xfd\x6d\x54\x98\x8d\x24\x62\xb7\xfb\xdd\x2e\xbb\x95\xed\x55\xb7\x28\xf3\x77\xe8\xb0\xdc\xe5\xe3\x88\xed\x8e\x6f\x65\xbb\x63\x43\xa8\x96\x51\x14\x21\x5e\x2e\x97\xab\x3e\xf6\x76\x38\x0e\x4f\xf3\x1c\x2d\x23\x1e\x9e\x6e\x25\x44\x76\xbb\x9b\xc6\x83\xa3\x9b\x39\x8c\xc9\xf2\x96\xc2\xb4\xd7\xdb\x60\x49\xc6\xc0\xa9\x85\xc4\x87\x92\xd1\xa3\x0d\x09\xe1\x18\x7b\xe5\x89\x9a\x92\xa2\x5a\x6f\xa0\x17\xd7\xcd\x11\xad\xce\x51\x1b\xeb\x53\x3a\xa8\xac\x90\x34\xf7\xe0\x1e\x45\x91\xd0\x0c\x90\xc0\x2d\x9b\x41\x10\x7d\x33\xb8\xf2\x4e\x97\xee\xb4\x6b\x99\xcf\x2a\xa0\x57\xe2\xe4\x61\x4b\x45\xfd\x92\xe8\x1a\x82\xae\xba\xdd\x17\x21\x3e\xe4\xca\x17\x82\x42\xca\xe7\x08\x87\x95\x12\x14\x84\xa3\x40\x24\x1a\xa5\x24\x8b\xf8\xee\xae\x99\xdb\x65\x94\x6d\x53\x4d\x01\x84\x46\x0c\x5a\xf6\x57\xe1\x84\x96\x98\xa4\x5b\x83\xd2\x73\x0d\xb5\x1c\x76\x75\xca\x28\x26\xe3\x28\x29\xa6\xcd\xb4\x4a\x09\xca\xa2\x71\x78\xda\x4b\x1c\x1a\xdc\xb6\x4e\x14\x77\xb3\xdb\xf0\xd2\xa1\xcb\x6c\x0d\x36\xa3\xad\x2d\x8a\x77\x71\x16\xa1\x71\x84\x9a\x4d\x57\xd0\xb3\x68\xac\x30\x67\x5e\xe9\x19\x8f\xa2\x28\x73\x6d\xdf\x8a\xd8\xae\x46\x51\xf2\xf9\x1a\xa4\xce\x92\x6e\x6b\xb0\xb2\x9e\xed\x0f\x0e\xe0\xe9\xfe\x80\x2e\x55\x7a\xc0\x8f\x35\x83\x76\x70\x50\x21\xdd\x9e\x58\xcf\x8b\x14\x2b\x08\xd5\xdb\x79\xd4\x8f\xc9\x32\x52\xa3\x41\x4c\x92\x48\x8d\x76\x62\x4b\x7f\x47\xf1\xee\xb4\x08\xf5\xb4\x3b\xed\xf5\x30\x8d\xb2\xd1\x34\x26\x7c\x44\xe3\x6e\x77\x6e\xac\x08\xf5\x8f\x51\x3f\xc6\x90\x1a\x99\xed\x2d\x3a\x5c\x74\x96\xb8\x11\xb9\x6e\x4e\xb3\x87\x27\xc2\xb1\x65\x26\x7e\xdd\x92\xc0\x2e\x61\x23\x11\x47\xcb\x91\x88\x0d\xca\x8c\xbb\xdd\x31\x52\x78\x77\xee\xba\xc7\xf3\x30\x9b\xf3\xa9\x42\xb8\x74\xa1\x92\x02\x04\x56\xd2\x9b\x92\x24\xcf\x47\x31\x26\xd2\x8f\x8d\x2b\xfd\x37\x3f\xa2\xa2\xfe\xae\xba\x95\xfa\xb2\x5b\xcf\x6b\x66\x3a\x52\xd6\xd8\x32\x8b\x06\xbb\xd9\x2d\x67\x12\xb9\x9b\x39\x4a\xbf\x8c\xe4\x28\x8b\x37\xfa\x9b\x51\xc4\x47\xcb\x18\x50\x64\x73\x80\x57\xfa\x7e\x97\x82\xb7\x97\x31\x43\x6a\x6b\x8b\x0c\xf4\x0e\xa1\x88\x86\x19\x78\x0a\xc7\xce\x9e\xb4\xc3\x56\x86\x6e\x9c\xad\x08\x8f\xce\xfa\xc3\xfe\x8a\xa4\xd1\x28\x2e\xb9\x5f\x6a\xc3\xd6\x89\x91\x8a\x1d\x52\xeb\xef\xd0\x32\xde\x2e\x24\xe9\x48\xc5\xd1\x19\x1f\x2a\x92\x0c\x37\x07\xc4\x66\xfa\x01\xf1\x98\xae\x04\x33\x2c\x5d\x5d\x22\x49\xf9\x4d\x31\x91\x61\xa2\x47\x5b\xa4\xad\x68\x78\x1c\x31\x42\xc3\x71\x24\x08\x0d\x27\x0d\xe2\x41\xc3\x14\xf8\xef\x3c\x5f\xc7\x67\xab\xb6\xb8\xea\x12\xec\x4f\xc2\x6a\x0c\xc7\x60\x29\x4c\xed\x49\x79\xdf\x32\x46\xac\xdd\xae\x35\x66\x75\x81\x0e\x9f\xd0\x59\xf1\x34\xd7\xe8\xb1\x59\xd6\xf1\xf7\x81\xe5\xf7\x2f\x0c\xf7\xdf\x7e\x2d\xd0\xe0\xd6\x25\x9d\x7c\x8a\x06\x5d\xcd\x52\xea\x95\x65\x18\x93\xd7\xba\xaa\x62\xe2\x7b\x5d\xe7\x06\x46\x2e\x5c\xd1\xff\xd3\xff\xc2\xb2\xa7\xb2\x92\x59\xcb\x96\x97\x1f\xb0\xf1\x0b\x25\x92\xeb\x40\x97\x85\x8d\x55\x23\x92\xbd\x19\x05\x5b\x61\xb2\x03\x00\xd5\x8d\x8e\x18\x2e\xf6\xbf\xde\xa6\x0c\xd3\x70\x82\x24\x11\xc4\x7f\xe5\xf4\xc5\xd8\xe6\x11\xdf\xc4\x41\xf3\xee\x98\x7a\x8e\x44\xbb\x63\x50\x7f\xb4\x7b\x4d\x69\x43\x71\xe7\x5a\xb5\x84\x84\x65\x05\x06\x6b\xb8\x14\x09\x68\x00\x37\x3e\xdd\x5d\xda\x2e\x6c\xbf\x12\x9d\x31\x0f\xc4\x34\x5c\x44\x41\x60\xdd\x53\x9d\x70\x31\x49\x4f\xc2\x13\x76\xa8\x2f\xaa\xff\x34\x4b\xc5\xa2\x85\x92\x5e\xb1\x98\x26\x3e\xc6\xd7\x95\xa6\x49\x30\x65\x19\xde\x30\x3f\x23\xcd\x4b\x66\x61\x06\xf4\xa1\x3c\x13\xab\xc1\xf4\x80\xa1\xb4\x11\xef\x36\x0c\x83\xb4\xac\x52\x3a\x34\xda\x79\x8d\xec\x58\x12\x87\xce\x76\x5e\x6b\xa8\x5f\x48\xf4\x1a\x84\x18\x33\xfb\x39\x92\x68\xe7\x75\xbc\x22\x3b\xaf\xb7\xeb\x69\x68\x9e\x6e\xa3\x6d\x1f\xba\x78\x8c\xc6\x56\x5c\xf3\x64\x45\x84\xc6\x0f\x97\x4c\x9e\x3e\x66\x09\xd3\x77\xdc\x3b\x49\x82\x02\xa3\xa9\x1f\x60\x3c\x12\xa5\xc3\xe0\x30\x93\xe3\xc2\x74\x6d\x7b\x7f\x7b\xf4\xfe\x76\xfc\xca\x4b\xdb\x24\xd8\x0e\xb0\x0f\x21\xe2\xd1\x01\xa3\xfc\x60\x42\x52\xf3\x21\x89\x9d\x6e\x98\xe1\x3b\x4b\x95\xbe\x05\xf3\xfb\xe6\xa9\xa0\xc7\x7c\xdc\x26\x70\x4f\x51\x60\xda\x38\x15\x07\xf0\x98\x44\x38\x0a\x0e\x69\xc6\x6e\x5e\xdf\xfa\x20\xab\x87\xfc\x75\xe8\x8b\xae\xf5\xf1\x0a\xeb\xa2\xe3\x84\x2f\x0e\x53\x2a\x27\xeb\x8b\x0e\x6c\xd1\x69\x02\x5e\x79\xd6\x94\xda\xb1\xa5\xc4\x4c\xd2\xc5\x3c\x84\xff\xd7\x97\xbe\xae\x4b\x83\x9e\x34\x47\xc1\x29\x9d\x4c\xe8\xda\xb2\x83\x6b\x78\x85\xf1\x8a\xbc\xe6\xef\x17\x3b\x4f\x66\xd6\x22\x6b\xca\x4e\xfc\xd4\x49\x64\x56\x76\xb5\xc2\xbb\xe8\x4b\x47\x76\x6c\x71\x52\x33\x0c\xa3\x0b\x45\x3b\xe6\xc8\x93\x68\x07\x6f\x94\x2b\xbf\x86\x3d\x29\xc9\xc8\xde\xa8\x78\xae\x65\x78\x38\x8a\x4b\xc7\x69\x5c\x1c\x40\xec\xa4\x48\x84\xe3\xa5\x94\xa7\x9a\xd5\x04\x1a\x11\x32\x3a\x9e\x7b\xa9\x69\x99\x7a\x40\xb3\x53\x31\xf6\xf2\xa8\xc9\xb3\x66\x3b\x5e\x46\x56\xc9\x68\xd4\x5b\x9a\x6c\x8d\x09\x8a\x09\x2f\x83\x9b\x0c\xa3\xae\xe7\xa5\x27\x26\x5d\x4f\xd6\x01\x4d\x12\x2f\x67\x6c\x9b\xe2\x95\xd4\xa9\x4b\x15\x93\x5a\xf9\x79\x99\xe3\xa5\x4e\x4c\x6a\x42\x33\xbf\xd7\x85\x49\x15\xf4\x88\xf9\x85\x8f\x0d\x2d\xad\x3e\xae\x54\x5c\x87\xef\xca\xf2\x71\xdb\xca\x90\xd8\x48\xc6\x9e\xa4\x66\xb3\xbf\xaa\xba\xbb\x5b\xa3\x09\x5f\x86\x33\x96\xf4\xf4\x6a\xa1\x8c\x57\xa5\xfa\xbe\xbe\xd8\x5b\x11\x51\xf1\xf0\x5e\x3b\x38\xb9\xf1\xcf\x4d\x84\xfe\xb2\xd4\xd5\x93\x82\x2a\x24\x1d\x02\x09\xec\xf1\x84\x69\x6d\xcc\x44\x44\xfd\x5d\x51\x8e\x5a\xf4\x7a\x18\x42\xbd\x8c\x44\x5c\xea\x48\x77\xe4\xca\x63\xd2\xca\xdb\x94\x8c\x64\x9e\x8b\x50\xa4\xe9\x82\x6c\xd6\x21\x95\xc8\xc9\x69\xfa\x1b\x9b\x9e\x84\x13\x9f\xe9\xe6\x79\x4c\xb8\x77\xea\x92\xb4\x94\xc7\xef\x49\xa4\xf0\xb0\xd7\xe3\xb7\x8b\xd1\xef\x49\x73\x06\xa7\xd8\x04\xc5\x37\x11\x83\x7d\x66\x37\xab\x2b\x56\xe8\x6b\x16\x8f\xfa\xbb\xbc\x1c\x1c\xef\xf5\xb0\x30\x3b\x57\x5a\x10\x3c\xdf\x4b\x65\x5b\xcb\xaa\x0b\x65\x85\xf0\x86\x1e\x75\x65\x9f\x0b\x7d\xe0\xe8\x8f\x9a\x1c\xbd\xe0\x70\x74\xc2\x06\x2f\x50\xdf\xea\x59\x94\xcb\x6f\x38\x66\xb3\xf8\x85\x36\x07\x19\x60\x4c\xcc\xe0\x2e\x6e\x58\x98\xf9\xe0\xba\x64\x01\x77\xe2\x96\xc6\x9b\x85\xd6\x39\x88\xa4\xbe\x89\x8f\x78\xdc\x36\xfa\xb1\x95\x41\x47\xca\xa3\x42\x0a\xa8\x50\x75\xab\x28\x7f\xab\x30\x33\xaf\x6a\x24\xcb\x46\x3d\x1d\x89\x69\x13\x34\x8d\x77\x12\x10\xce\xd5\x6d\xab\x38\xbf\xe2\xba\x16\x0b\xda\xed\xda\x25\x5e\x37\xbe\xc9\x15\xb6\x00\x9f\xa2\x62\x0f\xe0\x33\x19\xe9\xcf\x0d\x90\xa5\xac\x9a\x3b\x62\x51\x09\x59\xe1\x47\x0e\x28\x8a\x1c\x97\x45\x7c\xca\xbe\x2a\x76\x2b\xbc\xd2\x5c\xe9\x20\x19\xdc\x00\x61\x2e\xea\xb7\x1f\x28\xd5\x97\x29\xa3\xc7\xc8\xb3\x83\x84\x8a\xd9\x92\xce\x98\xbe\xf3\x18\xd1\x03\x3f\x94\x54\x9e\xb6\xf1\x14\x32\x4c\xd2\x31\x4d\x78\xc6\x0e\x6c\x29\x70\x0a\xab\x8b\x58\xf5\xbe\x46\x81\xb6\x66\x38\x52\xe1\x41\xa6\xd8\x22\xc3\x70\x0a\x55\x34\x09\x35\x73\x5d\x56\x82\xcb\x38\x59\x7a\x55\x45\xbd\x4e\xa1\x08\xdf\x11\x51\x8a\x4a\x10\x91\xc2\x44\xd8\xa7\x0c\x2e\x58\xd1\xd4\x0a\x9b\xa8\xe5\xd6\x87\x76\xdb\x04\x79\xde\xd6\x82\xf7\xb7\xf3\xed\x97\x02\x12\xcc\x02\x4d\x52\xbd\x9c\xed\xf7\xd1\xde\x70\xff\x7d\xbc\xb7\xed\x79\x2f\x75\xa4\x1b\xe1\x82\xcf\x93\x24\x08\xca\x5f\x82\x04\x50\x6f\x3f\xc3\xaf\x80\x3a\xcd\xfe\x7e\xd6\x0b\xf0\x6a\xa3\x32\x7b\x25\x54\x86\x9c\x16\x86\x63\xb0\x8b\xea\xfe\x68\x5f\xfe\x45\x76\x7a\x92\xca\x49\x27\x78\xb9\x27\x7b\x2f\x07\x9d\x39\x35\x86\xe3\x87\x8c\x89\x8e\x92\x54\x64\x09\x55\x60\x3f\xae\xd2\xce\xcb\xba\xd7\x30\x28\x81\x1e\xc9\x78\xb5\x5a\xad\xd7\xad\x68\x41\x26\xa7\xa3\xd9\x20\x5d\x9a\x72\xf9\xea\x52\xf8\xcc\x3f\x55\x95\xa7\xa2\x57\x6b\x4b\x44\x0d\x8a\x57\x57\x80\xdb\x82\xa0\x76\x84\x37\x4b\xf6\x9b\x65\x77\xf0\x46\xa1\x63\x48\x38\x26\xa2\xdb\xd5\xd4\xd3\xee\xab\x33\x7d\x30\x0d\x15\x11\x29\x95\xb3\xac\x4d\xdd\xaf\xe5\x0a\xa6\xab\x13\x60\x7c\x0e\xa0\xba\x3d\x79\x14\x36\x89\x73\x99\x0a\xfe\x11\x1b\x4a\xc2\xb3\x03\x57\xbd\xad\x69\xd6\xed\x16\x5c\xc0\x7d\x9b\x0d\x8c\xc0\xd9\xaa\x79\xf4\x13\xe0\x51\x86\xde\x79\x28\xd7\x4e\xd8\x4e\xb1\xa6\x2d\xec\x72\x31\x19\xa2\xa0\x32\xb5\xfa\x18\xeb\x01\x72\x30\x17\x6a\xde\xa1\xdc\x25\xd5\x35\x23\xf1\x0a\x3c\x4c\x55\xf0\xa6\x9d\x91\x2d\xea\x5a\xfe\xf9\x51\x9a\x9c\x6a\xf6\x2e\xcf\x91\xde\x9d\x0b\xc9\xc6\x15\x7f\x50\xf8\xcc\xb8\xc7\x56\xf3\x2c\x1a\xc5\x84\x85\xe3\x39\x4f\x26\x92\x09\xa8\xe0\x7e\x44\xa3\xf8\x02\x11\x46\x92\xd2\x09\x9b\x34\xc4\x00\x33\xa6\xda\x6e\xd7\x61\xb2\xba\x48\x1e\xc2\xaf\xde\x10\x07\xe2\x52\x1f\x69\x34\xd0\x14\xe7\x62\x3a\xbe\x8b\xfc\x45\xd6\x6c\x44\xeb\xc6\x2b\xb6\x13\x2b\xbb\x2d\x9c\xb0\x48\xcf\x21\x8b\xf2\xbe\x85\xcf\x9b\x16\xac\x68\xcb\x1d\xd7\x5c\x74\x7c\xae\xf0\xa2\xd2\x8b\x39\x15\x2a\x75\x06\x91\x67\x33\xa6\x0e\xc6\xa9\x50\x94\x8b\xaa\x5d\x4a\x41\xbc\xf1\x9e\xe9\x60\x98\x22\xbc\x67\x6b\x0f\x19\xc2\x7b\xca\x70\x6f\xfd\x95\xde\x3c\x22\x9d\xb0\x21\xd3\x5f\x87\x32\x3d\xc9\x98\x1c\x72\xfd\xc3\x95\x4f\xf5\x8f\x23\x2a\x8f\x69\xb3\x8f\xf5\x63\xf2\x66\xc3\xdd\x06\x4d\x23\x07\x07\xab\xd5\x6a\x85\xcd\x66\x00\x7d\x64\x89\x76\xfa\x98\x48\x34\xe8\x63\xb8\x9a\xbf\x10\x6d\xec\xb0\x42\x1f\x7e\xf1\xe4\xfe\x7b\x5f\x9d\xab\x57\xaf\x5d\x9b\xbf\x73\xf3\x64\x2a\xe4\xf2\x2b\x6f\xcf\xee\x2c\x6f\xbe\xf7\xe1\xd3\xd3\x57\xdf\xf9\xe5\x45\x71\xe4\x2e\x0a\x83\xca\xe8\xcc\x9e\xa3\xc7\x4c\xce\xbc\x2d\xe1\x69\x13\x77\xbb\xea\xd2\x96\xf7\xca\x36\x90\xf2\x9a\xc7\x43\x7d\x6a\x58\xf5\x73\x2f\x39\x3c\xb0\x65\xdd\x31\x7e\x50\xeb\xdf\x0f\xaf\x6b\xe4\x63\xb5\x26\xea\xca\xbe\x3a\xbb\xd2\x96\x6e\xfb\xea\x1b\xc0\x93\xc5\x44\x12\x5d\xf7\x39\x1a\xc4\xa3\x33\xc0\x90\xc6\xe2\x9f\x4d\xb3\xa1\x44\xaf\x62\x02\x3e\xc3\x25\x1a\x0c\x30\x59\xc8\x74\xcc\xb2\x6c\xa8\x56\x2b\xe2\x10\x68\x4d\xc5\xeb\xd7\x8a\x9a\xd7\xaf\x97\x35\x25\xba\x7e\x43\x83\xbe\x06\xe3\x4c\xdd\x9d\x41\x51\x77\x67\xa7\x52\xf7\xa6\xa6\x93\x04\x19\xd6\x21\xc5\x61\x89\xc8\x08\xef\xf1\xb0\xf8\x1e\x8a\xb0\x44\x78\x04\xcc\xaa\x43\x73\x28\x68\xbf\x4c\x31\x3d\x7e\x48\x35\x1f\xc3\xb3\x15\xae\x61\xf0\xa0\x8f\x7d\xbc\xd5\x24\xf5\x6a\x5c\x64\xdf\x30\x91\x3b\x98\xa4\x00\x72\xe3\xcc\x17\x08\x97\xc6\x3e\x8d\xd8\x32\x76\xf9\x07\x51\xd4\x50\x60\xdf\x2b\x6a\x21\x46\xce\x56\x78\xb8\xd3\x52\xa8\xdb\xe5\xa1\x77\x7e\x22\x89\x6b\xd5\x88\xc4\x43\xcd\x82\x13\xe9\x0e\x75\x67\x57\x62\x4d\xa6\xa2\xea\x59\x59\x50\x66\x60\xfd\xcf\x16\x54\x29\x26\xc5\x50\x11\x3d\x5b\x87\x74\x7c\x34\x94\x2b\xd3\xc4\xaa\x1e\x15\xd1\x48\x53\x11\xab\x73\x9c\x20\x52\x3c\x13\xf4\x58\x53\xa9\x09\x55\x74\xa8\x56\x70\x31\x93\x6d\x1b\x96\x15\x42\x0b\xd4\x72\x28\x7a\x0c\x25\x1c\x79\x1a\x38\x1c\x2a\x96\x29\x08\x3b\xe7\x04\x2e\x6d\x55\xcd\xf9\xad\x87\xa0\x59\x5a\x6f\x87\x9c\xf1\x86\x06\x7d\x29\x16\x5c\x91\x87\x0f\x0e\x1e\xdf\xbd\xf7\xe0\xce\xbb\x6f\x3d\x1c\x06\x07\x07\xde\xcf\x83\x83\x00\x72\x9f\xdc\x7b\xe4\x72\x9e\xdc\x7b\x64\x53\xef\xfd\xca\xbd\xbb\xef\x3d\xb9\x67\x33\xec\x2f\x9b\xf7\xe6\xbd\xfb\x6f\x3d\x70\x59\xe6\xc7\xc1\x41\x50\x63\x2a\x61\x76\x35\x96\x44\x1e\xa8\xab\x8d\xca\xc9\xd4\x08\xb5\x90\x31\xf5\x84\x1f\xb3\x74\xa9\xaa\x5c\xad\xa3\xf2\xb8\x7a\x56\x35\xea\x8f\x13\x46\xe5\x55\x5b\xa0\xf6\x46\xad\xa2\x28\x2a\x3b\x76\xd7\xeb\x32\x05\x31\xd2\x87\xd7\x08\x28\xc9\xf3\x7c\x53\xe1\x6e\xb7\x59\x43\x79\xad\x90\x7a\x75\x25\x4f\x4b\xdb\x64\x9d\x62\x1d\x8b\x4a\x7c\xe6\x67\x99\x5d\x0d\x9c\x66\xb5\x50\xb5\x00\x6c\x7b\x28\xb0\x5a\x6d\x7a\xcb\xae\x9b\x52\x51\xe0\x52\xca\x17\x98\x12\x9c\xbd\xf2\x73\xc8\x6d\xfb\x4c\x5f\xf3\xf9\x0a\x00\x69\xab\xed\x4f\xeb\x9e\xff\x63\x98\x96\x2d\xc8\x28\x85\x28\x96\xf0\xae\x40\x96\x9a\x97\x4b\xa2\xcd\x01\x19\x47\x5b\x83\x0d\x4f\x00\x80\xcf\x92\x6e\x37\xeb\x76\x11\xe4\x16\xe4\x62\x19\x65\x8e\x55\x5d\xe2\xa1\xae\x44\x96\x05\x95\x00\x13\x3a\x4f\x16\x60\xe4\x6d\x49\xe1\xd7\x0f\x4d\xf1\x46\x12\x6d\xf6\x3d\x8d\xb0\x65\xf1\xc2\xb9\x6b\x4e\xb3\x2c\x5a\x02\x54\xbb\xbd\xde\xf8\x96\xda\xc5\x59\xb7\x9b\x8d\xc6\x71\x28\x97\x9a\xc6\x41\x87\x65\xad\x55\x16\xc1\x22\x00\x8c\x35\x09\x8c\x8c\xa2\xc8\x9f\x04\xb7\xfe\x7e\x1a\x08\x7d\xa6\x08\xca\xa6\x79\xbe\x29\x71\xb7\xdb\x56\x47\x56\x5a\x22\xf5\x26\x60\x45\xf4\xc5\xc0\xcc\xb2\xaa\x20\x8b\xf4\x91\xc5\x2b\x52\xcd\x36\xa8\x02\xec\xbb\xfe\xbf\x2e\xfe\x30\x0a\x0e\x4b\xe1\x54\xdf\x8d\x50\x59\xf9\x52\x0d\x7c\xb6\x12\xe0\x3f\xf7\x09\x1f\x1f\xb5\x79\x81\x67\x27\x46\xbe\x89\x5a\xee\x70\xf0\x8a\xd7\xf0\x24\x88\x4b\x09\xd2\x60\x57\xde\xaa\x17\x70\x46\xa7\x55\xff\xad\x32\xde\x58\x1a\xba\xae\x7b\x34\xf0\x63\x32\xd8\x8c\x8a\x55\xcb\xf3\x24\xcf\x29\x9a\xe3\x15\x99\x78\xf7\x54\xb9\x14\x3e\x4f\xed\x86\x6c\x2f\x37\xe6\x5a\x57\x8c\x1d\xb4\xc0\x14\x57\x09\x8b\x02\x7b\x3e\x07\x44\x84\xf6\x53\x33\x71\x22\x64\xe2\xa9\x66\xdd\x44\x48\xe5\xec\x29\xb8\x27\x0e\x9f\x32\x99\xf1\x54\x44\x41\x50\xfe\xc8\x4c\xa1\x54\x44\x0b\x5d\x76\x32\x79\x9b\x67\x8a\x09\x26\xe1\x77\x2a\xc6\xcc\x7c\x4c\xa7\xf0\x57\xb2\xe3\xf4\x29\xab\x94\x31\x49\x77\x92\xc4\xa5\x66\x90\xcc\x8e\xb9\x82\x8f\x85\x04\xfd\xdb\x4a\x1d\x9b\xf6\x50\x8c\xab\x6d\x25\x45\x13\x8d\x73\x62\x14\x6b\x38\x0f\xb9\x98\x70\x31\xab\x4e\x55\x8d\xc0\x5a\x56\xc7\x95\x75\x3e\xeb\xb2\xe5\x42\x53\x78\xa0\xaf\xfa\xca\x79\x32\x69\x76\x12\x6c\x07\x90\x37\x9f\x70\x79\xa5\x3e\xa0\xe4\x9a\x1e\x96\xc7\x34\x3b\x6a\x51\xe2\xee\xb7\x70\x9d\xa8\xf5\x99\xa5\x29\xf5\xf7\x02\x86\x6e\x0d\x76\xc5\xed\xa8\xbf\x2b\xb6\xb6\x9c\xf4\x17\x44\x7f\x41\xa8\x6f\xee\x7c\xcf\x89\x6d\x91\x20\x03\x3c\x0c\x42\x9b\x8c\x2a\xe9\x44\x63\xf1\x50\x76\xbb\xf5\xe4\xad\x2d\xbc\xd2\xe7\x0e\xec\x82\x5d\xb9\xb5\xb5\x2b\x31\x0b\x97\xc2\x28\x77\xe8\xd6\xda\x24\xa0\xe5\x13\xbc\xe6\x31\x12\xc5\x24\xf6\x78\x0e\xfd\x1b\x29\xec\x89\x66\xc1\x6b\x76\x43\xa2\xe9\xc4\x99\x84\xe1\x6e\x57\x3a\x09\xa9\x88\x3d\x11\xbf\x0a\x25\xcb\xd2\xe4\x69\xe5\x8e\x5e\x12\xd6\x20\x70\x8e\xb8\x9b\xdb\x7d\x37\xbd\x1d\x6d\x0d\xba\xdd\x4d\x0e\x5a\xa8\x30\x75\x34\x4a\x6f\x47\xfd\x3d\xdf\x52\x71\xc8\x34\x8a\xa0\x8a\xff\xa1\xe2\x02\x47\xdb\x15\xce\xef\xb8\xfa\x1d\x95\x76\x34\xf3\xed\xa0\x2c\xcc\xd7\x4c\x43\x59\x80\x37\x28\x44\x6b\xa0\xbd\x60\x3b\xe8\x29\xc2\xa3\x60\x3b\x00\x7f\xeb\xe3\x39\x95\x77\x14\xea\x17\xba\x28\x88\xef\x05\xdb\xc1\x30\x08\x70\x0f\xa9\x48\x22\x81\x94\x0b\x58\xb4\x5d\x71\x2b\x5a\xf8\x3b\xd9\x64\x2b\x4c\x36\x39\xb6\x21\x8a\xb6\x03\x8c\xf3\x3c\x08\x83\x15\x51\xa1\x48\xe5\x31\x4d\xf8\x47\x4d\x67\xd7\x69\xa4\x42\x9e\xdd\x39\xcc\xd2\x64\x09\x4e\xb0\x08\xb5\x40\x71\xc4\x88\x26\x93\x16\x1e\x06\x40\xb0\x2b\x01\x91\x56\x81\x48\xf3\x1c\xb1\x08\x82\x26\xb1\x6e\x57\x4f\x01\xeb\x45\xd0\x02\x4a\x8b\x51\x32\x0d\x67\x09\x49\x8b\xe0\xc6\x80\xc5\xca\xb9\xd2\x35\x74\x3f\x57\x94\x07\x36\xa4\x75\x9e\xbc\xb4\x98\x20\x3d\xc6\xfa\xb1\xda\xa2\xa4\x71\x45\x44\xd0\xd0\xb5\x60\x41\xb1\x85\xfc\x79\xd2\xa3\x91\x2c\xa1\x8a\xfb\xf8\x6d\xde\x16\xbc\x9d\x56\xb1\x7e\xf5\x6c\x5d\xbb\xdd\x00\xa6\x67\xa4\x62\x50\x9d\xda\x2d\xf7\x9b\x47\x3b\x24\x28\x6b\xdb\x92\x32\xd6\x5b\x1c\xef\xba\x59\xb8\x2d\xf7\x46\x7a\x07\x98\xb7\x3a\x45\xe4\x96\xea\x0d\xf0\x8a\x45\xc5\xbe\xd3\x77\x90\x6c\x79\x98\x29\x89\x06\x26\x6a\x96\xcb\x90\x5e\x46\xb1\xd5\x79\x54\xc5\x18\xb8\xcb\x21\x59\x49\xf1\x74\x07\xb9\xd3\x30\x76\x3a\x60\x10\xe7\x91\x2c\xa3\xfe\xee\xf2\x16\xdd\x5d\x9a\x67\x0f\x3e\x5a\xc6\x9b\x51\x94\x8e\x96\x31\x3e\xcb\xa2\xa5\x7d\xf5\x30\x2a\x1b\xf6\x09\x68\x19\x65\xbb\xcb\x5b\xae\x3d\xa8\x99\xd8\x88\x5e\x1e\x0d\x43\x49\x94\x38\xce\x2e\xb5\xa3\xce\x30\xf6\x16\x45\xaf\x49\xc6\x16\x1a\x59\xc1\x66\x3b\xe1\xc7\x5c\x31\x19\x05\x43\xf8\xcd\xa5\xbe\x7c\x35\x0c\x55\x1a\xe8\x62\x31\x3e\xc0\xa4\xe5\xc1\x34\x08\x03\x8f\x39\x34\xe8\x7d\x37\x9d\x30\x40\x71\x22\xa3\xeb\xaf\x46\x51\xa4\x88\xd0\x6c\xa0\xf5\xf4\xcf\x2a\x64\x6d\xb0\xbb\xb5\x95\xea\x99\x81\x92\xa8\xd6\x46\x8a\xb1\xe1\x49\x39\x3e\x13\x51\x6a\x67\xcb\x86\x7b\x8c\x8a\x20\xdc\x10\x33\x42\xec\x49\xb3\x1f\xc3\x40\x9f\x0e\x26\x49\x27\x38\x9c\xe8\x83\x2e\xba\x0a\x0f\x69\xc6\x6a\x43\x2f\x5f\x2d\x2a\x42\xaa\xf5\x73\xb1\x61\xef\x61\x70\xbc\xd9\xb1\xc1\x44\x28\x7f\x7c\x4a\x1f\x76\x5b\x5b\xaa\x18\x5f\x65\x70\xaa\x1c\x9b\x8c\x54\x6f\xe0\x8f\x6e\xcb\x46\xda\x45\x70\x26\x08\x9d\x8d\xab\x83\x0d\xca\x81\x81\x92\xbd\x67\x1c\xab\xf4\x11\x64\x11\x7a\x6b\xf0\x8a\x7b\x48\xc4\x11\xc8\x33\x91\x8c\x8a\xdc\x3e\x71\x9a\x88\x5b\x45\x29\x4c\xa4\x9e\x25\xf6\x4c\x35\xf0\xe3\xa2\x09\x29\xb1\x60\x6b\x50\x9d\x17\x92\x46\x7d\x42\xfd\x79\xa1\x66\x5e\xa8\x0b\xd1\x51\x99\x16\x0a\xe7\xd7\xf5\x57\x37\xa3\x28\xc3\xf5\x79\xa0\xbd\x01\x26\xd7\x6f\xea\xab\xe5\x1e\xe4\xa9\x3d\x15\xd1\xa1\xe6\x56\x8d\xbe\xf6\x00\x0f\x21\x20\x9b\x82\x5f\xfa\x08\x28\x62\x83\xc2\x3c\xd3\x72\x9e\xbd\xe9\x54\x79\x6e\x7a\xca\xf3\xbe\xb9\x5a\x58\x4f\x67\xfa\x6a\x2a\xf4\xd1\xab\x3f\x64\x6f\xe0\x4f\xbb\xd2\xd3\x6e\xdf\xe0\x83\x43\x4d\x95\x02\x7a\x18\x94\x13\x8f\xf7\xd6\xca\xff\x6d\x19\x78\x00\x58\xf7\x4a\xa0\x6e\xf5\xe1\xbc\x75\xf3\xd6\x53\x98\x54\x6b\x5e\x2c\xad\x6a\x93\x4f\x79\x32\x83\xbb\x73\x2e\x58\xc6\x86\x12\x5d\x7f\x15\x93\x7b\x62\x96\xf0\x0c\x24\x6f\xd7\x30\xb9\x2f\x99\x18\x83\x08\xef\x35\x4c\xbe\xc2\xe4\x31\x15\xfa\xc7\xeb\x98\xbc\xb9\x54\x90\x71\xa3\x8f\xc9\x83\x54\x9e\xb0\x19\x87\xbc\x1b\x03\x4c\x1e\x71\x49\x95\x6e\xf0\xc6\x0e\x26\xef\x1d\x49\xca\x85\xcd\xbc\x86\xc9\xa3\xd4\xb6\x7f\xe3\x3a\x26\x8f\x17\x54\xd8\x5f\x37\x30\x79\x77\x99\x65\xb6\xe0\x4d\x5d\x50\xaa\xe5\x6c\x69\x40\xbb\xf1\x2a\x76\x0e\xea\x2d\x68\x6f\xdb\x97\xd6\xa1\xa6\xd5\x57\x7b\xd4\x3d\xfb\x3a\x9d\x4c\xe8\x50\xa2\x6b\x37\x31\x01\x17\x43\x6f\x2c\xb3\xa1\x44\xaf\x63\xf2\x96\x50\x4c\x2e\x24\x53\x4c\xea\x06\xaf\x63\x72\xd7\x39\xfe\x42\x37\x30\x79\xdb\x3c\xbf\x0e\xcd\xb3\xf0\x9b\x1c\x7a\xb2\x09\xaf\x62\x72\x9f\x51\xb5\x94\xec\x3e\x4f\xd8\x63\x46\xa5\x99\xb1\x1d\x4c\x2a\x09\x83\xd7\x31\x79\x94\x50\x35\x4d\xe5\xb1\xce\xc7\xc4\xbe\x4f\x1a\xa7\xe2\x12\x0d\x76\x30\xb1\xc1\xd6\x99\xd4\x70\xdd\x78\x0d\x13\x08\x6b\x0a\xbf\x6e\x5e\xc7\x64\x91\x2c\x67\x5c\xc0\xaf\x9b\x98\x64\x73\x7e\x0c\xdf\x98\x18\xc5\xce\xa6\xaf\x87\x52\x32\x16\xc2\xe0\xfd\x3b\xd9\x15\xd9\x8b\xaa\x34\x4c\x5c\xf1\xf9\xfc\xda\xab\x46\xf2\x79\x03\x83\xcc\xf9\x75\x7d\x44\x82\x38\x34\xbb\x48\x49\xcb\xa8\xbd\x16\x34\x35\x0d\x9d\xec\x0d\x8c\x40\xe0\xa5\xdd\xd7\xc2\x28\x18\x36\x1b\x07\xa5\xa2\x5c\xe1\xef\x32\xc5\x16\x3d\x64\x0b\xe9\x9d\x1b\x74\x6e\x6d\x6d\x75\x82\x1e\x0b\x25\xa3\x59\x2a\xf0\xca\xfa\x38\x01\x05\xb7\xac\x5d\xf0\x58\xa8\x98\x58\xe3\x40\x2b\x23\xbd\x20\x02\x8b\x1e\x4c\xab\xcc\xd1\x64\x2f\x43\x49\xc5\xd1\xc1\x31\x1d\xcb\x14\x7c\x01\xb9\xa6\xbc\x08\x9e\x91\x0c\x4f\xb8\x10\x4c\x12\xb9\x02\x7a\x28\x41\x00\x8a\x12\xdc\x0c\xa4\xfa\x78\xcc\x04\x95\x3c\xed\x8c\xa9\x30\x82\x39\x70\x0b\x6e\xf0\x7a\xb2\x2f\x82\x9e\x2c\xa0\x19\x3b\xfe\x60\x5f\x04\x85\xba\x41\x51\x3a\xaa\xeb\xe0\xa8\x08\x84\x02\x1c\xbb\x67\x10\x4c\xa4\x91\x22\xa7\xa1\x27\xf2\x24\x67\x99\x85\x61\xc8\xc8\x58\x3d\x1b\xfa\xcf\x25\x2b\x17\xb2\x75\x0a\x14\x73\x83\x3a\x59\xb0\xd1\x7f\x43\x59\x41\x46\xa7\x17\x9f\xc8\xf6\x41\x6f\x59\xc2\x0b\xfa\x0f\x48\x99\xb0\x4a\x1b\xa5\x82\xd3\x30\x0b\xfd\xd7\x64\x83\xf7\xd2\xe9\x07\x54\xab\x57\xbc\x74\x92\xe2\x48\xaa\x8e\x5b\xe0\x8d\xca\xb8\x9f\xdc\x7b\x44\xce\x74\x6d\x3b\xde\xac\x39\x5e\x83\xb7\xf5\xa5\x06\x49\xd4\x81\x59\x5a\x84\x37\x54\xb4\x24\xde\x78\x10\x23\x59\x9e\x9f\xad\x08\x75\x4b\xe3\x55\x6f\x7b\x0d\xb6\x8a\x23\x64\x8e\x4c\xf4\x09\xe8\x79\xde\x8e\xc7\x46\x7b\x10\x8d\xe2\xf6\xb0\x0e\xcc\x31\x93\x06\xd3\x0e\xc6\xe9\xf1\x82\x2a\x7e\x98\x30\x07\xbe\xc2\xa0\xf6\x71\x45\x4a\x70\x7d\x60\x28\x81\x26\x94\xe9\x7a\x85\x1a\xbd\xf9\x59\x9e\xc3\x6c\xdb\xa7\x83\x14\x4c\x4d\x4b\xfd\x1a\x23\x63\x5e\xeb\xba\xb1\x93\x36\x1f\x17\x18\x3e\xa3\x45\xb9\xca\xcb\x84\x17\x6f\x11\xcc\xce\x48\x66\x84\x8f\xe1\x8c\x29\x33\x50\xc4\x5b\xf6\xd8\x9b\xcb\x45\xc2\xc7\x54\xb1\x0e\x94\x19\x76\x46\x41\x8f\xf7\x82\x38\xc0\x1b\xaa\x14\x9e\xe9\x36\x61\x90\x54\x4c\x10\xc7\xd0\xbe\x24\x19\x76\x98\x57\xf4\xd1\xea\xdc\xc3\xec\xf0\xb6\xd7\xca\x90\x67\x07\x7c\xc2\x84\xe2\x53\xce\x26\x07\x87\xa7\x88\xc1\x53\x89\x11\xb9\xb5\xae\xd6\xfa\x1e\xaa\x8f\x28\xaa\x22\x03\x17\x07\x1e\x2e\xbe\xc8\x6a\xaf\x5d\x5d\xb3\xa4\xdb\xe8\xfd\x7c\xf4\xfe\xfe\xfe\xfe\x7e\x8c\xf7\x51\xf8\xca\xde\x3e\xde\x9e\x11\x59\x4d\x1f\xe9\xf4\x78\x7b\x46\x78\x35\xfd\x4c\xa7\xaf\xb6\x67\x24\xad\xa6\xef\x87\xdb\x33\x42\xa3\xed\xd1\xfb\xfb\x27\xfb\x99\xae\x98\xf9\xaa\x45\xcc\xbe\xb0\x29\x96\x35\x8d\x4d\x55\x64\x32\x7c\xae\xd9\x1c\x05\x19\x53\x08\x6c\x02\xcc\x8a\xc9\x74\xb9\xc8\xda\x9f\x70\x23\x01\x88\x9a\x85\xec\x19\xd3\x07\xcf\xae\xdc\x75\x52\x2d\xe9\x54\x46\x0b\xfe\xba\xc0\x13\x6e\xea\xcc\x92\xf4\x90\x26\xdd\x6e\x51\x7b\xd5\x0a\x86\x53\x06\x46\x05\x41\x60\x15\x47\x39\xc5\xea\x65\xa0\xa5\x6b\x0c\xf3\xfa\xfe\x39\x75\xc2\xd5\x3c\x5d\xaa\x03\xe6\x45\x92\x6c\xab\x6e\x82\x8d\x16\x2a\x56\x8a\x04\x2f\x0d\x82\x8a\x02\x56\xe5\x37\xaf\xfd\x4e\x6b\xbf\x29\x01\x57\x71\x00\x02\xf8\x9b\x6f\xc7\x48\x58\xa0\x42\xdd\x0b\x6e\x48\xe5\xcf\x15\xa9\xe4\xb7\xca\x3e\x7b\x0e\xf2\x5e\xb0\x1d\xbc\x00\xba\x1a\xda\x74\xd3\xd0\xa6\xc1\x6b\x6d\xe8\x6b\x95\x10\xf4\xe5\x20\x78\x29\xb0\x8a\xc1\x9a\x38\x03\x96\x71\xe4\x2b\xb8\xa1\xbd\xa1\x8f\x99\x41\x4f\xf5\x02\xb4\xbf\x7f\xd2\xc3\x46\xeb\x0d\x57\x71\x53\xe7\x41\x19\x53\xa4\x95\xcb\xf1\x68\xf3\xb8\x49\xe1\x84\x25\x5b\x4e\x61\x1d\x89\x16\xaa\x75\x97\xcb\xf1\x32\xa1\xb2\xf3\xa6\x26\xa1\x60\xf7\x07\x94\x4b\x5a\x26\x80\x74\x02\x6c\x88\x98\x41\xdb\x29\x12\x9e\x5d\x37\x8b\x3c\x74\xe8\x89\x9a\x36\xac\xcf\x6a\x51\xbb\x4f\x34\x1a\x7b\x4f\x52\xc5\x21\x2e\x22\x39\x62\xf1\x9e\xfe\xcf\x3d\xcf\x0e\x03\x14\xf6\x70\xe0\xfa\x5a\x20\x81\xf7\x96\x8e\x74\x0a\x50\x92\xb7\x5a\x9c\xb8\xa8\x22\x2a\x7a\xab\xde\xc9\xd5\xa2\x30\xb8\xfd\xfe\xfe\x76\xbe\xbf\xfd\xd2\xf6\x0c\x10\xd1\x7f\x9f\x29\xe5\x7d\x1a\xa0\x76\x45\x53\xea\xa8\x43\xab\x92\x69\xa7\x94\x0c\x65\x18\xbb\x93\x55\x93\x83\xda\xb3\x77\x83\x87\x5c\x20\x85\xf7\xc6\x48\x5d\x5e\x69\xa2\x4b\x7a\x35\x25\x18\xdd\x15\xf7\x04\x3c\xf4\xf2\x8e\x91\xe6\xad\x46\x31\xd6\x27\xf4\xf0\xa9\x3d\xa9\x0b\xc8\x9f\x56\x20\xc7\x60\x15\x80\x52\x32\x03\x8d\xd3\xa2\xd4\x6c\xcd\x83\x7a\x2f\xc8\x03\x6c\xa8\x54\x10\xe0\xe2\x12\xbf\x5a\x7b\x36\x73\x40\x4d\x3d\xd1\x17\x9d\xa3\x8a\xc9\x63\x40\x46\x66\x30\xd0\x44\xff\xd4\xf3\xd3\xac\x75\x0f\xd0\x02\x42\x33\xea\x6a\x99\xe3\x74\xf5\xd6\xf6\xae\x4e\x8d\xd6\x36\x5b\x67\xb6\x8d\x8f\xd2\x1b\xcc\xae\x48\x7f\xcd\x22\xf6\x54\x39\x76\x70\xb8\x17\x45\xd1\x0c\x29\xbc\x42\x7d\xd2\x06\xf4\xd7\x20\xa8\x88\xb1\x82\xef\xa4\x53\x0f\xd0\xce\x34\x95\x3e\xb0\xc5\x1e\x50\x38\xcf\x79\x9e\x23\x1e\xc1\x1a\x12\x8d\x9f\x51\xa1\x6d\x31\xd7\xec\xb7\x37\x5c\x81\xb8\x25\x91\xed\xea\x4e\xd6\x88\x20\x3c\x58\x48\x36\xe5\xcf\x10\x2e\x3c\x7f\xba\x84\x16\x8a\x61\x26\x16\x5a\xea\x4c\xdc\x85\x97\xb3\x0c\xbc\xd8\x75\x26\x7c\x3a\x65\x92\x09\xd5\x31\x4d\x30\x4f\x20\x6c\x95\xa2\x4a\x35\xa8\x39\x2f\x75\xa2\xe4\x05\x3a\x51\xc5\x2e\xa9\xf1\x70\x7a\xf2\x97\x4e\xf1\x98\x11\x55\x68\x76\xac\x2a\x17\x31\x3b\x9a\x36\xd7\x43\xee\xfc\xa1\xe3\xf9\x7a\x2d\x2c\x89\x41\x5c\x5c\x7a\x57\xb5\x54\xa8\xf5\x32\x32\xf7\x18\x86\x05\x92\x78\xaf\x58\x9d\x04\x49\x22\x60\xd5\xbc\x25\x3a\xd6\x03\x1f\x16\x65\x64\x23\xef\x45\x75\x86\x2b\x2e\x31\x8b\x37\xea\x2b\x9e\x7a\x37\x4d\xd4\xc9\x05\x55\x73\x92\x46\x22\x9c\x66\xf6\x76\xbe\xb6\x27\x38\xfc\xb6\xc3\x57\xb6\xd7\x4c\xa4\xd5\x75\xcf\x14\x2a\x3d\xda\xb2\x42\x8b\x9d\x67\x6d\x9c\x0a\xf5\xf6\x1a\x5d\x4f\x32\xdd\x6d\x44\x63\x54\xc9\xb6\x02\x61\xab\xc7\xcd\xf5\xc8\x36\x12\xe6\xee\x0d\x75\xf5\x79\xa4\x2f\xb9\xa2\xad\xe8\x12\xbc\xf0\xba\x86\x13\xbc\x22\xad\x1c\x4a\xb5\xd8\xf8\x05\x21\x07\x2e\x7d\xd9\x6a\x59\x18\xb2\x67\x3c\x53\xd9\x63\x7d\x05\x66\x78\x8f\xa2\x34\x94\x8c\x4e\x26\x5c\xda\xa4\x16\x11\x42\xd9\x0b\x37\x27\x38\x58\x9e\xe2\x21\xd5\xbc\x52\xd2\x16\xda\x60\x6c\xd4\x9f\xdb\x21\xc8\x14\x55\xb6\xb3\x90\x67\x6f\x72\x09\x96\x97\xa7\xa0\x8f\xdc\x3e\xbb\x76\x2d\xda\x20\xf2\x83\xab\xe3\xe2\xf4\xc4\x75\x04\x2f\x8e\x1b\x2f\xda\x01\x6a\xd5\xad\x71\x16\xdb\x41\x06\x1f\xf5\x8c\x22\x1e\xf1\x5e\x1b\x5f\x69\xc5\xd3\xab\x75\xaa\xe3\xeb\xbb\x83\xf5\x2b\x3c\x2d\x45\x51\x91\xbe\xe9\xbe\x4b\xd9\xd9\x9e\x83\x6d\x58\x74\x88\xf5\xa8\x01\x3f\x37\xda\x22\x3b\x03\xdd\x42\x56\x03\x05\xcc\xbb\xd8\x49\xa1\xbf\x8e\x02\xaf\x54\x80\x11\x2e\xb5\x80\x4a\xdb\xef\x08\x79\xea\xb9\x51\x55\x3d\x77\xcf\xcb\x1a\x2a\x6b\x97\x89\x4d\x24\x48\xfb\x63\xe5\x99\xf0\x36\xc9\x46\xab\xb2\x74\x83\x96\xb0\x08\x14\x34\x7d\x13\x05\x1f\xff\x8b\xe7\x36\xef\x61\xb2\x78\xff\xdd\xdf\x0f\xfc\x77\x43\x6c\x9d\x16\xd4\xf5\x48\x8c\x1b\x5b\x79\x6a\x58\xed\xc2\x37\xac\xa1\x9d\x46\x0b\x14\x05\xdb\x87\x34\x63\xdb\x01\xa8\x17\xbb\xdb\x11\x9d\xd8\x7c\x1b\x59\xa0\xa8\x84\x2d\xe8\xbe\x1f\xee\xba\x0e\xb3\xe6\x8c\x58\x66\xef\x8d\x45\xcd\x10\x84\xb1\xef\x49\x5e\x71\xdc\x5d\x01\x33\xa4\x93\xc9\x7d\x9e\x30\x52\x49\xc5\xab\x0d\xdf\xef\xd7\x99\x87\x58\x43\x41\x4e\x52\x79\xc4\xc5\xac\xd8\x76\xc3\x60\x3b\x20\x25\x51\x58\xeb\x3e\xb9\xe8\xd3\x94\x85\x0d\xee\x51\x8e\xcb\xeb\xcd\x98\xb2\xee\x54\xa0\xae\xa3\x02\x2d\x15\xcf\x3c\xaa\xd0\x22\x5c\xae\x36\xeb\x53\x10\x86\xad\x69\xbf\xd1\x2a\x35\x00\x82\x58\xbc\xda\x91\xd5\xbc\x08\x96\x6a\xfa\x5a\x00\xf1\xc1\x1b\x1c\x89\x89\x45\x6b\x96\xd6\xb5\x80\x70\x27\x9b\xf3\x63\x08\xc1\xe9\xab\xb1\xf8\x11\x02\x75\x93\x1d\x26\xc6\xe9\x84\x8b\x59\x68\xe3\x13\xd7\x21\xd6\x0d\xb6\xf2\xa9\x3a\xa3\x6c\x1e\x66\xda\xb8\x13\xae\x49\x0b\x34\xba\x15\xa0\x81\x26\x98\xbb\x4a\xd5\x10\xda\x18\x62\x9c\xad\x56\x1b\x7c\x1d\x4a\x70\x62\xb1\x68\xe8\xb3\x70\x32\x52\xc8\x39\xea\x81\x46\x46\x32\x8e\x78\xf8\xe4\xeb\x8f\xee\x1d\xdc\x7f\xeb\xed\x7b\x1b\xce\x8e\xc5\x3e\xe8\x22\x17\x10\x81\x4e\x26\xe5\x82\x08\xbc\x22\x7e\xc2\x95\xbb\x78\xf3\xad\x77\xef\xdd\x7d\xf2\xf0\xdd\xaf\xb7\xf5\x23\x8c\xb5\x44\x7b\x77\x66\x76\x5b\x09\x70\xa4\x40\x5e\x69\x78\x2d\x8b\xc4\xb6\x19\xd3\x3f\x8b\xa3\xc8\x1f\xa4\x6e\xad\x05\xf6\xcf\xdb\x64\x31\xa8\x95\xdd\x70\x97\x35\x09\x4d\xd4\x7c\x3f\xc0\xe6\x29\xf7\xd2\xb0\xc6\x77\x6f\x5a\xdb\xc0\x72\x52\x64\x0b\x9e\x3d\x48\x55\x87\x76\x26\xc5\xd0\x3a\x41\x4f\x7a\xbe\x16\x95\xe7\xa6\x03\x28\x56\x09\x0d\x76\xda\x49\x6d\xa2\x3c\xb3\x2e\xe5\x5a\x29\x7d\x59\x91\x36\x78\x40\x78\x4c\x17\x6d\xb5\x58\xf1\x32\x0e\x5a\xd3\xab\x15\xf1\x56\x20\xea\x93\xfa\xe4\x45\x83\x56\xeb\x3f\x23\x75\xaa\x11\x37\xe7\x4e\xb7\x9e\xfe\xc8\x70\xc6\x91\x1b\x97\xfe\x71\x5f\xa6\xc7\x6f\x50\x63\x7b\x08\xe9\x1a\xac\xf7\x24\x77\xba\x94\xf6\xe7\x85\x55\x19\x5e\x6d\xa4\xeb\x36\x5a\x4a\x6a\xc5\x87\x6d\xac\x7e\xf0\xbe\x79\x28\xb2\xf2\x84\xd1\xd6\xfe\xf6\xfe\xfe\xfb\x2f\xbd\xd2\xdb\x0b\x11\xce\x47\xfb\xf1\xd9\x2a\xde\x9e\x91\x60\x7f\xff\xa5\x6e\xf5\x16\x64\xd9\x20\x09\x6e\x41\x8a\xc3\xa3\x15\xc7\x1a\x8b\x58\x23\xda\xd5\xb1\x16\x6c\x55\xdb\x42\xb2\xca\x11\x6c\xc5\x36\xcd\x36\xda\xd7\xa1\x0c\x2c\x71\xb8\xe4\xc9\xe4\x3d\xc9\x87\x35\xc5\x10\xbb\x1d\x36\x2f\x5a\x46\x07\x5f\x13\xcf\x1f\x51\x35\x2f\x23\xf1\x76\x6c\xfd\x2a\xe2\x97\xc4\xb5\x36\x80\x35\xbd\x55\xb0\xc1\x51\x5e\xda\xbc\x9f\x94\x7c\x83\xef\x00\x66\x0d\x6e\xd0\xe2\xa8\x6a\x89\xdd\x5d\xe3\x0b\xdc\x54\x99\xb8\x2e\x7a\xb4\xbf\xf2\xce\xdb\x5f\x55\x6a\xf1\x2e\xfb\x70\xc9\xb2\xc2\xaf\x96\x0c\xd3\x05\x13\x28\x98\x31\x15\x10\x45\x36\x07\xc5\x2b\x9a\x89\xc2\x9d\x2d\x52\x91\xb1\x27\xec\x99\x5a\xad\x08\xbc\x23\xd4\x6c\x02\x5f\x8c\x39\x3b\x5b\x01\x7b\xa9\xb9\xb4\xc1\xc0\xe3\x21\x5b\x8e\x56\xd6\x61\xe2\x29\x97\xa9\x00\xbf\xb2\x8d\xe3\x54\xcd\x19\xa8\x82\x75\x8e\xc1\xdf\x0e\xe9\x70\xf5\x72\xd6\x59\xc8\xf4\x90\x1e\x26\xa7\x1d\x23\x82\xd1\xeb\x68\xd5\x78\xf9\xf4\x34\x0c\x40\x09\xb3\x64\xb0\x4b\x5d\x91\x92\x1d\xcc\xf3\xd6\x7c\x4b\xad\xda\x78\x80\x0a\x1c\x1d\x76\xbc\x4c\xa8\x11\xe7\x39\x90\xad\xc9\x5c\x87\x3b\xef\xff\x90\x9f\x75\xd2\x69\xc7\x3e\xef\x4e\x0a\xc1\x4f\x56\xd1\x04\x6d\x9b\xea\x76\xd3\x70\xff\x9e\x6c\x9e\x7b\x02\xab\x37\x11\x90\xb3\xa9\x51\x06\x18\x06\xa3\xfb\xd3\xd8\x7c\x07\xa4\x78\x16\x0d\xd0\xde\x70\xf4\x38\x8b\xed\xef\xdc\xfb\xee\x8c\x1e\xa6\xf1\x52\x25\x5c\x30\xac\x19\x40\xaa\x47\x90\x99\x1a\xf7\x58\x6c\x7f\xe7\xa3\xaf\x9d\xc4\x73\x26\x75\x99\x05\x03\x2d\x61\x53\xe4\xd1\x22\x36\x3f\xf3\xd1\x13\x15\xa7\x93\x14\x07\x24\x15\xc9\xa9\xc9\x7d\x98\xc6\x22\x39\xc5\x01\x39\xa4\xe3\xa3\x99\x4c\x97\x62\x32\x0c\x46\x6f\x1c\xc6\xc5\xcf\x80\xcc\x38\x04\x01\xd7\xc5\xbf\x32\x8b\xf5\x0f\xe8\x8c\xab\x79\x3e\xba\x43\x63\x31\xc9\x75\x85\xa5\xca\x01\x9c\x31\x5b\x28\x1c\x90\x93\xb9\xab\x03\x70\x89\x7c\xf4\x16\x8f\xa7\xd5\x0a\x38\x20\xaa\x28\xf6\x44\x99\x62\xba\x8d\x05\x1b\xab\x46\x51\x63\xcc\x3e\x1c\x05\x00\x4f\x40\x02\xdd\x45\x60\x43\xf2\xc5\x75\x97\x0d\xeb\xd4\x5a\x94\xe4\xc7\xed\x94\xd6\x93\x0c\x67\xbd\x7c\x3f\xeb\x39\xd9\x30\x91\x57\xa8\xe4\x97\xe7\x19\x04\x5f\x6c\xa9\xa1\xdb\x7e\xe5\xa5\xed\x59\x49\xa8\x79\xf6\x20\x55\xeb\x8a\x3b\x1e\x01\xf2\x4d\x71\x31\x71\xb8\xdb\x42\x7f\xb6\xdf\x47\xfb\xd9\x2b\x78\xdb\xbd\x19\x79\x0a\x5f\x6a\xd4\x8f\x0b\x75\xfd\xfe\x8b\x3e\x84\xec\x98\x77\x90\x9d\xeb\x46\x5f\x63\xb0\x56\x53\xc3\x99\x1f\x65\xd1\x99\xf3\x79\x30\xa4\x85\x37\xe2\x84\x4d\xd5\x23\x3d\x5f\xf3\x34\x99\x30\x79\x77\x4e\xe5\x30\x18\x05\x44\xf2\xd9\xbc\x99\x11\x07\x2b\xb2\x8c\x10\x33\x6e\xbd\x3c\x2f\x0a\x7b\x65\xdb\x6c\x35\x64\x79\x9e\xe1\xd0\xa5\xe4\x79\x56\x7c\x93\x04\x94\xa3\x1a\x7d\x42\x99\x66\x32\x19\x47\x2c\x6c\x03\x45\x97\x6f\x4b\x27\xd3\xaa\x13\x83\xfd\xfd\xec\x95\xa0\xb7\x2c\x9d\x23\x04\x76\xd3\x07\xb8\x17\x0c\x75\x2e\x0a\x5f\xc1\x01\x09\x78\x80\xc9\xfc\xb2\xba\x8e\x36\xb4\x55\x9e\x5c\x56\xb9\xdc\xce\x6d\xd5\x17\x97\x55\x77\x54\x06\x2a\xdb\x4a\xc7\xd5\x4a\xba\xb9\x97\x6c\xd6\xd3\x66\x7b\xff\x5d\x80\xc9\xac\x25\xf9\xec\x1a\x59\x05\x98\x9c\xd6\x1a\xd3\x79\xf8\xa5\x00\x93\xc3\xea\x33\x18\x54\x1a\xed\xef\xe7\xff\xf9\xf7\xbf\x19\xef\x6d\xe9\xda\x38\xc0\xe4\xa0\xd9\xf2\x3f\x41\xa3\xf7\xa3\xd8\x34\x72\xb2\x3e\x3b\x32\x70\x7b\xc2\x89\x7b\x5e\xf8\x55\x42\x23\xd1\x1b\xc0\xf1\xc8\xa7\x88\x47\xc5\x46\x2d\x0d\x87\x36\x21\x6e\xb0\x33\x02\x80\x87\x84\xe8\x69\xad\x98\x49\x3d\x70\xdb\xb0\xb0\x54\x0b\xe7\x10\xbb\x0e\x05\x77\x84\x48\xcd\x2e\x0e\xc8\xd9\x11\x3b\x1d\xa6\xa1\xa6\x31\x88\x8f\x06\x31\x26\x85\x33\x40\x62\x74\x1d\x79\x74\xf2\xc5\x9a\x2a\x92\x76\x62\x5c\x36\x3a\x5d\xdf\xe8\x7d\x77\x40\xe9\x56\x8a\x0a\xf3\xf5\x15\x9c\x8e\x51\xad\xc6\x64\x7d\x8d\x37\xbc\x13\xa6\x52\x67\xb1\xbe\xce\x3d\x87\x96\x45\xe1\xd3\x0b\x3a\x30\xb1\x69\xf9\xa8\x5f\xb6\x7d\xb8\xbe\xf8\x9b\x54\x1f\xd3\x15\x48\x8e\xd7\x97\xd6\xcc\x58\x51\xda\x33\x13\x03\xce\x44\x85\x36\x28\x68\x14\x00\x83\xd2\xd1\x3c\xbe\x66\x83\xf4\x19\xde\x09\x7a\xb4\xf7\x32\xe9\x04\x2f\xf7\x58\xef\xe5\x20\xdc\x17\x0f\x25\x9f\x71\x41\x93\x0e\xc4\x38\x35\x41\x7f\x5e\xee\x15\x8d\x10\xb5\x5a\xd9\x3b\x8c\xcc\x58\x2d\xf0\x76\xa1\x0f\xa6\x11\xfe\x31\x91\x75\xbb\xb9\xc6\x7b\xe4\xf6\xbe\xdc\x17\xf9\xbe\xd8\xc6\xa0\x12\x6c\xde\x54\xee\x61\xc2\xbb\x5d\x8e\x94\xa5\xe9\x08\xe3\x3c\x2f\x7f\x18\xce\xf9\x59\x53\x2b\xe7\x6c\xe5\x0b\xb4\x98\xac\x59\x05\x83\x97\x19\x7b\xab\xf4\xe2\xb3\xf9\xec\xa9\x68\x3a\x66\x6a\x51\x37\xc4\x2d\x2e\x6c\x6c\xac\x2a\x70\x13\xe9\xab\xba\x54\x94\x9b\xf4\x3d\x9b\x8d\x54\xa8\xd2\xb7\xd3\x13\x26\xef\xea\xab\x1f\x6e\xfa\x76\x51\xbd\x40\x5f\x3e\x96\x82\x01\xeb\xc1\x26\x1d\xaa\xe0\x7e\xd5\x51\xfc\x98\x15\xcc\xe0\x99\x59\xfd\x61\xb3\x45\x7d\x9e\x3e\x6e\x58\x6a\x10\x73\x23\xb0\xbc\xff\x1d\xeb\xd9\xe6\x19\x3a\x03\x0d\x52\x6e\x1c\x77\x41\x08\x65\xf7\x83\x16\x9b\xb9\x76\xe5\x14\xde\xfc\x55\xa9\xbb\xbe\x2a\x28\x9a\xcd\x11\x48\x00\x88\x0a\x61\xcb\x6b\x6e\xc8\x32\x9c\xde\x9a\x08\x4f\x78\xa1\x41\x79\x88\x04\x91\x70\xa3\xb8\x83\x57\x25\x33\x9a\xfa\xdc\x20\x5d\x79\xb4\x32\xd5\x8d\x94\x78\x87\xca\x66\xcc\x08\x25\xc6\xa1\xe9\x89\x70\x23\xba\xa5\x51\x6a\xc4\x4d\x66\xee\x1a\xa6\xec\x2a\x52\x61\xf1\xab\xc5\xbc\xbc\xaa\xf3\x2c\xcc\xf3\x02\xc3\x6e\x23\x9a\xec\x3c\xf7\xde\xfb\x0c\xd6\xfa\x8b\x01\x58\xd0\xbc\x35\xdc\xe9\xd8\x29\x32\x46\x2c\xee\x86\x90\x0a\xd6\x49\x65\xe7\x38\x95\xac\xe3\xa6\xc4\xb7\x6b\x29\xb7\xc5\x8a\xdc\x69\x5a\xe7\x9c\x59\x5d\x2e\x58\x94\xda\x86\xe0\x53\xcd\x28\x6e\x3b\xcb\xf3\x26\x48\x6f\x09\xd0\xf5\xec\x78\x78\x00\xf1\xbf\x36\x9a\x28\x57\x6c\xac\xe6\x78\x8b\xab\xcb\x8a\x3c\x6c\x75\xa9\x4e\xa3\x51\x4c\xc0\xed\xcb\x12\x16\xf0\x2e\x49\x2a\xa8\x59\xc5\x3d\x6a\x14\x93\xec\x21\xa2\x30\x5e\x5d\x11\x69\x93\x75\x48\x4b\x20\xe8\xf0\x05\xb8\x5b\xa0\x62\x53\xf0\x62\x36\xd1\x13\x70\x87\x28\xc9\xb8\x58\x97\xcc\xaa\xd9\xe1\x72\xbb\xad\x7c\x3c\x6e\x7d\x8c\x33\xc3\x3f\x42\x8a\x8c\xcb\x7a\xcb\xd5\x0a\xdb\x30\x01\x1b\x97\xe0\x63\xf2\xb9\xf0\xb1\xae\x67\x00\x88\xd1\x8f\xa2\xc8\x59\xf4\xb5\xc8\x9b\x2d\xa6\x3a\x55\xe4\x75\x58\xba\x42\x98\x9c\x81\x19\xed\x90\x79\x0b\x93\x0d\x4b\x6a\x4e\x26\xcc\xf8\x4d\xd5\x0b\x46\x8b\xa9\xce\x86\x02\x65\x97\xb8\x42\x28\x30\x1f\x97\x7a\x67\xc6\xcf\x23\x82\x87\xbc\xa3\xd6\x37\x71\xb0\x88\x1c\xc5\xd6\x85\xbf\x8f\x67\xcb\xb5\x88\xf4\xb4\x44\x81\x99\x4f\x80\x96\xa6\xe1\xf2\xc8\x41\xc1\x04\x0e\xee\x04\x42\x5e\xd5\xf0\xb4\xa2\x2e\x05\xd5\x7c\x84\x34\x15\x03\xea\x31\x50\x1e\xd3\x4d\xfc\x3e\x00\x5d\x35\x8e\xf8\x89\x36\xf8\xfd\x1c\xfc\xc7\x87\xde\xcd\x0c\x29\xdc\xf0\xe7\xd7\x84\x78\xd1\xd6\xc5\x74\x5d\x17\x7e\xaa\x0f\xf1\xd3\x6a\x56\x01\x3f\x99\x61\x72\x8c\x14\x01\x45\xee\x86\xd2\xd5\x04\xb5\xe6\xce\xdd\x61\x63\x1d\x02\xfa\x6a\x51\x3a\xd9\x19\xe3\xa1\x63\x24\x3c\x3d\x71\xd3\x0c\x2c\x32\xae\x5a\xb0\xb7\x4c\x78\xdb\xa8\x97\xad\xa3\x36\x58\x81\xc9\x04\x55\xb5\xac\xec\xa3\x50\x1a\x96\x77\x67\x10\xe6\x57\xd7\x80\xe1\x5b\xb4\x8d\xc0\x16\x25\x0c\xbb\xa5\x09\xfb\x48\x96\x4e\x03\xa3\xca\xaf\x9e\xea\xa5\x21\x5c\xff\x51\x61\x5a\x43\x71\x55\x75\xaa\xa2\x6b\x7c\x0a\x4a\x99\xe5\x81\xe6\x6b\x4f\x5d\xad\xe0\x69\x49\x0e\xe4\x5a\x72\x50\x32\xcf\x6b\x28\x82\x62\x0b\x4d\x0d\x2e\x21\x5f\xd9\x17\x21\x5f\x7a\x04\x67\x46\x26\x23\xf5\xe6\xbf\xdb\x3c\x0b\x61\xaf\x37\x69\x68\x55\x3d\xdb\xb8\x6e\x41\xaa\x00\xc2\x64\x5f\x09\x08\xdb\xff\x08\x18\xb0\x27\x6b\x02\xb1\x51\x77\xd4\x81\x6b\x8c\x51\x4c\xc6\x10\xe0\xc4\x27\x44\x93\xb5\x84\xe8\xa4\x24\x44\x27\xa5\xf0\xed\xde\x4a\x5f\xe0\xab\x2a\x99\xce\xb1\x65\xdb\x46\x5f\xae\x27\x4d\x0b\x57\xed\xca\xa4\x89\x78\xd7\x73\x32\x6d\x6c\xa6\xe3\x6a\xa2\xdd\x4c\x33\x7d\xa4\xad\xa7\x52\xc7\xeb\x80\x3f\x6c\xeb\xe2\xe9\xba\x2e\xa6\x6b\xa8\xd4\x49\x35\xab\x1c\x4a\x2d\xa3\x18\x18\xb9\x87\xc9\x41\x93\x40\x3d\x35\x60\x6a\xd4\x6b\xc9\x9d\x39\xb6\xa3\x41\xbe\xf4\xa6\x4a\x4a\xf2\x75\x80\x92\x26\xf9\x4a\xaa\xe4\xeb\x10\xb5\x2e\x4a\xdb\x74\x4c\x5a\xa7\xc3\x91\xaf\x53\x9f\x7c\x1d\xbc\x00\xf9\x1a\x5f\x8d\x7c\x2d\x47\x4b\x8f\x7c\x55\x7e\xb5\x91\xaf\xb1\x8f\x7c\x27\x35\x82\xf0\x18\x61\x70\x91\x61\x93\x57\x9e\x90\xa4\x52\xc6\xa8\x38\xbf\x8b\xe6\x5e\x91\xc7\x25\xe1\x5a\xae\x25\x5c\x85\x2d\xd2\x17\x21\x5b\xd3\xcf\x45\xb6\x1e\x23\x17\x02\xb0\x95\x41\x92\xed\x0c\x52\x46\x0c\x89\x29\xf9\x27\x30\x1b\xf3\x9c\xe6\x94\x6f\x46\x7b\xb4\x50\x50\xc6\x43\xb1\x5a\x91\x77\x5b\xec\x0a\x46\xb1\x66\x34\x8b\x39\xbc\x53\xb2\x44\x15\x12\xa4\x91\xcd\x57\xa9\xa8\x9e\xa4\x16\xc5\x2c\x4a\xae\x48\x9d\x6b\x97\x55\x86\xc3\xdf\x8a\xcb\x2b\xb0\x1d\x66\xeb\xcf\xdd\x7c\x0d\x36\x54\x74\x88\xe4\x7a\x9b\x35\x15\x19\x32\x6a\xe9\x1b\xc3\x20\xe9\x1d\x8a\x8a\xb8\xba\x8e\xdf\xc5\xbc\x89\x5e\x69\xc3\x3a\x20\x6a\xe5\xb1\x94\x6d\x9c\xdf\xfa\x79\x20\xb4\xfd\x3a\x51\xe5\x7e\xf4\xb1\xd0\x1c\xec\xd3\x56\x16\xe4\x69\xc1\x55\x9e\xf9\xb8\x42\xc9\x94\xb3\x64\x92\x0d\x4f\x91\x22\xe0\x16\x8e\xcc\xf4\xcd\xc3\x2e\x69\xd5\x65\x52\x73\xb6\x27\x6d\xb3\x7d\x8c\x6b\x4e\x82\xea\x70\x9a\xba\x8b\xf6\xba\x5f\x1c\xf8\xc6\x89\x04\xfe\x47\xc1\x6a\x04\x54\xc2\x75\x95\xca\x81\xb1\x66\x64\x8d\x39\x78\xda\xc0\x5e\x53\xb6\x8d\x1d\xac\x91\xce\x75\x38\x7c\xb0\x8e\xe9\x3d\xa8\xeb\xab\x3b\x73\x9b\xca\x30\x36\xf4\xd9\xd7\x94\x28\x71\x7d\xc7\x66\xcf\x54\x2f\x00\x4c\x7d\x16\xc4\x51\xc1\x0b\xc6\xc4\xcb\xcd\x14\x95\x2a\x4c\xb8\x60\xba\x08\x6b\xc9\x1b\xa7\xc9\xf2\x58\xe8\x5c\x05\x2f\x0d\x3d\xe5\x23\x7f\xbc\xaa\x1c\x4d\xbe\x25\xc7\x21\x28\x32\x5b\xea\xd9\x50\x78\x2e\x7d\xa2\x8f\x44\x0c\x3d\x12\x6a\xbe\xbd\xd6\x49\x16\xb5\xf1\xac\x1b\x5f\x2e\xcb\xcc\xe3\x08\xe9\xff\x4d\x38\x06\xa7\x50\xab\x91\x49\xfa\x67\xa8\x77\x0d\x64\x66\x56\x1f\x4e\x51\xf0\x9f\x7f\xff\x9b\x01\xbe\x1d\xf5\xf7\xe0\x6b\x18\xe4\x01\xf1\xbd\x69\x48\x03\xad\xef\x64\x55\x6d\x46\x11\x5f\x7b\xaa\xbc\x25\xc6\xa9\x94\x6c\xac\x3c\x75\x7a\xb3\xd4\xe0\x46\xd3\x30\x15\x1d\x45\x0f\x13\x16\x76\xee\x39\x19\x1f\x18\xd8\x40\x9c\xf5\x29\x70\xd2\x41\xaf\xe8\xa1\x08\xd0\xe8\x9f\xdc\x55\xb6\xf5\x04\x61\xc2\xc2\x82\x9b\xf5\xcf\xd4\xe2\x1c\x54\x6b\x21\x76\x92\x6c\x03\x54\xfb\x69\x38\x67\x74\x62\x7d\xaa\x5c\x7a\x21\xb8\x4a\x7b\x32\x3d\xc9\x82\xda\x99\x5e\xc8\xac\x0a\x41\xf1\xe7\x95\xc7\x16\x1e\x59\xf4\x94\x2b\x0c\x81\x1b\xc0\xeb\x35\x26\xcc\x67\x12\x7c\xf1\x0b\xec\xc3\x0b\xb4\x98\x1f\x5a\x05\xe6\xe2\x40\x28\xda\x79\x58\x73\x23\x65\xdd\xa5\x82\xcf\x16\xeb\x03\xdc\x7b\x01\xda\xdf\x0f\x7a\x09\x78\x01\x7f\x25\xe8\x49\xf3\xa1\xd3\xc6\xc6\xe3\x78\xb1\x5d\x46\x32\xf6\xcd\x9f\xcb\xf7\xd3\x2f\xe9\x22\x55\xb5\x1a\xa8\xa0\x92\xbc\x60\x1e\x2c\xbf\xf2\x10\x29\x4b\xc0\x08\x33\xae\xd2\x70\x85\x83\xb9\x87\x54\xe8\xfd\x2e\xf9\x19\xe6\x27\x57\xd9\x9b\xc7\x48\x81\xf3\xf6\x22\x05\x5b\x7e\xe7\xb1\xdf\x99\x71\x23\xbf\xf2\x4f\xe6\xcb\x1e\x90\x2f\xb2\xf6\x94\xe8\x26\x0e\xa7\x99\x91\x87\x23\x89\x76\x6e\x60\x5c\x98\x63\x36\x5e\x39\x64\x41\xf4\xaa\x3a\x9e\x8c\x18\xb5\x50\xf0\xbb\x63\xaa\x21\x5e\xea\xc6\x75\xbb\x12\xa5\x38\xcf\xd3\x2b\xbf\x75\x0f\x76\xcc\x63\xf7\x75\xfb\xd8\x7d\x13\x37\xcc\x1f\x6c\xa4\xac\x35\xde\xf8\x38\x01\x77\x44\xc5\x4b\xb4\x28\x1e\xbe\xb3\x88\x19\x08\xad\x46\x77\x8a\x24\x26\xcb\x08\x74\xc9\x8d\x27\xe7\x3c\x57\x61\xc5\xb5\x33\xc2\x1b\x75\xf1\x15\x6d\x35\x64\x1e\x23\x8b\x0d\xc4\x6c\x96\x9a\xe8\xa9\x70\x65\xbe\x8b\xe6\x48\x44\x15\x14\x21\x81\x55\x15\x09\xf0\xde\x32\x7c\x66\xd0\xe0\x90\x0d\xe7\x48\x90\x20\x15\xc9\x29\xa4\xbb\xe4\x50\xa7\xe4\xf9\x32\x9c\xba\x14\xfd\x63\x52\xd4\x2a\x4b\x62\xdf\xcd\x14\x3e\x93\xa8\x0a\xd7\xd4\xc3\xfd\xb9\x5e\xc7\x0a\x14\x5c\x0d\x21\xb1\xe8\x9f\xab\xb2\x67\xae\xf4\x1f\xce\xd5\x50\xa7\x37\x24\x57\xa5\x80\xb8\x78\xfc\x0d\x7a\x95\x68\x05\xbd\xc0\x3e\x5a\x97\x7e\x9c\x0c\xed\xe0\x53\x64\xf5\xd3\x38\x2e\xa3\xcd\xd8\x0d\x38\x2d\x3d\x79\x64\x75\xe9\x78\xeb\xa2\x24\xc8\x62\xb2\x35\xbc\x2f\xdf\x63\xb2\x61\x42\x8a\x29\x1b\x13\x6e\xc3\xfc\x34\xbc\xbc\x4c\xab\xbb\x19\xd7\x3c\x77\x49\xe3\xd5\x45\x11\x63\xe9\xcd\xd5\xc1\x0b\xb7\x52\x36\x62\xec\x30\x56\x84\xd4\x4c\x56\x2a\xdb\x44\x85\x87\xa7\x8a\xbd\x6d\x82\x0c\x37\x37\xc0\xd2\x68\xb9\x41\x48\x47\x01\x21\x1d\xdd\x56\xbc\xf6\x0a\x92\x3d\x81\xb7\xaf\x6f\x89\x15\x51\xa1\x4a\xdf\x38\x55\x0c\x8e\x99\x56\xd5\x91\xd4\x34\x45\xa3\x54\x37\x95\x45\xa9\x89\x0e\x69\x6c\x6a\xaf\xbd\x82\x68\x2f\xd3\x6d\x65\xd8\xca\x71\xb2\xdb\xfd\x3d\xba\x75\x7d\x48\x61\x45\x4d\x6c\x94\xe9\xae\xec\x45\xd7\xb1\x8a\xc4\xa8\xe2\x3b\x48\xe2\xf8\xd6\xad\xc1\x6b\x79\x3d\xb9\x37\x80\x8c\x9d\x66\xc6\x8e\xce\xb8\xd9\x4c\xbf\x86\x63\x92\x8c\xc6\xbd\x5e\x1c\xa9\xdb\xb7\x07\x37\xbb\x3b\x37\x6e\x78\x09\xaf\xf9\xbf\x77\x6e\xdc\xe8\x16\xca\x7e\x3b\x51\x14\x65\xe0\xb8\xa7\x0d\xb6\x16\x08\x06\x38\xbe\x7d\xfb\x7a\xa5\x2d\x4c\x06\x17\xb6\x32\xe8\xaf\x19\xe1\xf5\xd6\x01\xde\xbe\xbd\x73\x21\xe8\x98\x24\x7a\xe1\xa6\x32\x3d\x6e\x5f\xba\xc2\x5e\xce\xf3\xe5\xa8\x39\xba\x5f\xb8\x06\x21\x26\x9d\xe4\x7f\x8b\xef\xd2\x5b\xd9\x2e\xed\x45\x83\x9b\xd7\x5e\xbb\x86\x6d\x68\x39\x4d\xdd\x28\xa1\x3d\x48\xbc\x9d\xed\x65\x43\xfb\x5d\x1e\xc0\x03\xe3\xe7\x51\x45\x6c\x24\xb6\x06\x31\xb1\x35\xe5\x48\xdd\xbe\xbd\x13\xf7\xe4\x48\xdd\xba\x75\xbd\x7b\xf3\x5a\xdc\x0b\xa2\x28\xc0\xc6\xeb\x35\x87\xf9\x41\xba\xca\x4e\x7c\xeb\xd6\x6b\xb8\xd7\x52\x7b\xd0\x87\xea\xb7\x6f\x9b\xea\xd0\xd2\x8e\x6d\x09\x7c\xba\x59\x86\x20\xc0\xab\xba\x93\xc7\x51\x4c\x78\xd4\xe6\x0b\xff\x3d\x2e\xd4\x6b\x30\x4b\x7b\xe5\xe7\x10\xfe\x27\x69\x14\xdc\x79\xe3\xee\x9b\xf7\xee\x7f\xe5\xab\x6f\xfd\xd3\x5f\x7c\xfb\x9d\x07\x0f\x1f\xfd\xd2\xbb\x8f\x9f\xbc\xf7\xcb\x5f\xfb\x95\xaf\xff\x33\x7a\x38\x9e\xb0\xe9\x6c\xce\x3f\x38\x4a\x8e\x45\xba\xf8\x50\x66\x6a\xf9\xf4\xe4\xd9\xe9\x47\xfd\xc1\xce\xb5\xeb\x37\x6e\xbe\xfa\xda\xeb\xbd\xed\xc0\xce\x67\x11\x4c\x54\x4f\x6a\xaf\x47\xb1\x1c\xd1\x38\x4a\x47\x34\x26\x62\x94\x56\x5d\x66\xc5\x11\xad\x5c\xa5\x8b\x50\x67\xb6\x0d\xcd\x61\xaa\x5f\xb8\x7e\xbb\xbf\xfe\x4d\xd2\xf8\xf6\x0a\x3b\x86\x02\x14\x8e\xff\x68\xe7\x78\x99\x28\xae\x19\xec\x74\xda\xb9\x6e\x6d\xc5\x2b\xec\x7e\x14\x54\x7c\x93\x49\xb0\x37\x52\x98\x8c\x24\x91\xe0\xa2\xab\x3f\xbc\xbe\x25\x7f\xe1\x7a\x5c\x8f\xa5\x24\x4a\xd4\x32\x31\xa0\xe1\xd9\x52\xed\x66\xb7\xc4\x6e\xd6\x8b\xae\x61\xae\x97\x37\xd3\x18\x7f\xb3\x3b\xb8\xf9\xea\x60\x70\xf3\xb5\x3e\xee\xe9\xb4\xde\x40\x2f\x79\xf7\xe6\x8d\x1d\x48\xd1\x78\xac\x53\x77\x62\x4c\xa8\x5b\x7e\x94\x46\x1c\xdf\xbe\x3d\x78\xcd\x2e\x7d\x7a\xfb\xf6\x60\xa7\xfc\xbe\x69\x3f\x6f\x5e\xeb\xa6\xa5\xa3\x4e\x5a\x22\x84\x18\x05\x5b\x41\xd5\xa5\x5d\x1c\xdd\xdc\x21\x62\x14\x1c\x34\xd3\xaf\x5d\xe2\x22\xd5\x46\x43\x82\xc8\x88\xc5\x3c\x50\xcf\x0a\x8e\xfe\xff\xcc\x0a\x2e\xbd\xe8\x4d\xb4\x94\x2c\x79\xce\xcb\xa5\x75\x6b\xa0\xaf\xbc\x85\x4e\x8e\xbe\xfe\xfa\x11\x6a\xcd\xed\x38\x3a\xe3\x43\x71\x41\x84\x5a\x61\x23\xd4\xf2\x22\x2a\x2d\x27\xe5\xb7\xc4\x84\x9b\x08\xb5\x45\x5a\x11\x79\x0a\x02\xd5\xca\x70\x1c\x29\x22\xeb\x81\x6a\xf5\xf5\xf0\xf3\x05\xaa\x15\xe0\xda\xfe\xbf\xae\x40\xb5\xf2\xa2\x40\xb5\xf2\x2a\x81\x6a\xc1\x15\xd6\x25\x51\x6a\xc5\xba\x28\xb5\x32\xd4\xf8\xb0\x06\x6e\xf1\x65\x44\xa9\xb5\xac\xa1\x0c\x27\x48\x54\xe2\xe5\x95\xbb\xa4\x16\xa5\xb6\x12\xd1\x8e\xc8\x9f\x6f\x94\x5a\x59\x8b\x52\x2b\xbf\x84\x28\xb5\x12\xa2\xd4\x12\x89\x64\x98\x45\x7d\xbc\x42\x57\x89\xaf\x79\x25\xba\x14\x51\x54\xa3\x49\xb8\x8d\x28\x69\x8c\xf8\x2f\x46\x90\xa8\x51\xaa\x5e\x13\xfa\xa7\x25\x3e\x65\x25\xe8\x9e\xbd\x6e\xa8\x91\x8c\x37\x44\x58\x22\x59\xe4\xff\xc8\xf3\xcd\x81\x09\x07\x35\xe5\xb3\xa5\xc9\xdf\xec\x93\x00\xb0\x30\xe0\xa2\x23\xba\x5d\x24\xc2\x13\xc9\x95\xcd\x5b\xbf\x15\x05\xc8\xb5\x45\x11\x61\xab\xb3\xe6\x49\x55\x76\xbb\x36\x24\x8d\x19\xb0\x0d\xe3\x61\x5c\x52\x12\xb5\x5a\x41\x0c\xfc\x04\x49\x34\x00\xcf\x33\xfa\xeb\x1a\xd6\x37\x52\xfd\x75\x1d\xe3\x56\x77\x7a\x9d\x3a\xe2\xb2\xe1\x99\x73\xbe\xc8\x56\xa0\xed\x35\x5e\x33\x93\x80\x38\x9b\x0d\x5a\xb1\x89\x58\xc7\xb9\xf2\x4b\xa7\x9d\x8a\x46\x94\xe7\x7a\xd8\x3a\x9d\xd0\x58\xda\xa1\x9d\x71\x42\xb3\xac\x43\xb3\x0e\x2d\x86\x1f\xe0\x95\x73\xb8\xbf\x51\xb3\x17\x2e\xba\xf2\x15\xc0\xde\x65\xe0\xa5\x62\xec\x3a\x00\x55\xbf\x39\xcd\xc4\xcb\x36\x6c\x05\x38\xc3\x81\x2b\xe3\xa4\xb3\xd5\xc9\x96\x0b\x7d\x1f\xaf\x94\xd0\xc0\xb0\x49\xc1\xd8\x6c\xaa\x3c\x77\x64\x6d\x53\xa3\xba\xc2\x3e\xba\x16\xb4\x45\xed\xb1\xa1\xb2\xc0\x22\x3d\x99\xb0\x46\x07\x07\xc5\x69\x31\x63\xea\x91\x5b\xb6\x87\x53\x63\xe6\xef\x7c\x78\x7a\xb4\xc5\x19\x51\x3f\x04\xa1\x4d\x86\xf4\x02\x5b\x57\xf3\x77\x13\x3e\x3e\x82\xb8\x7c\x0d\x2c\x29\xec\x69\x5b\x00\xeb\x76\x35\x01\xab\xd9\xd8\x7a\x8b\xf0\x58\x4f\x42\xa7\xf4\x12\x65\x18\x40\xc6\xc1\xa2\xf6\x90\x75\x74\xed\x4e\x2a\xbd\x55\x21\x60\x78\x13\xf4\xf4\x64\xe0\x0d\xe6\x59\x54\x55\x09\xba\x09\xb6\x54\xe0\x6a\xc5\xdc\xca\x9e\x37\x8c\xf8\x24\x7c\x40\xdc\x6e\xd1\xe4\xdc\xdf\x59\xfa\x60\x5a\x61\xa2\x4f\x20\xdb\x47\x56\x99\xcf\xbd\xd6\x54\x98\x97\xa1\xb7\x1a\x91\xc2\x2b\xc4\x48\xe6\xc8\x30\x26\x1c\x31\x32\x02\xf5\xea\xa0\x3a\xf3\x81\x3d\x4e\x1a\xba\x0f\x8d\xe8\x0b\x7d\x2f\x38\x56\xe9\x95\xbd\x1f\xef\xf9\x3f\x86\x4e\x7d\x90\x42\x6b\x6d\x94\x95\xd9\xbc\x3d\xf7\x31\x74\x9e\x76\x34\xa8\x77\xcc\xd4\x1b\xc7\x58\x54\xce\x58\xab\xef\x04\x66\xf3\xf6\xdc\x47\xa5\x8d\x27\x90\x64\xdb\x60\xcf\xd6\xb5\xc0\x9e\x41\x7d\xf6\xac\x56\x9b\x3d\x53\x85\x41\xbe\x91\x65\x45\xde\x89\x2f\x90\x27\xf5\xc2\x7b\xde\x8f\x61\x11\xe9\xfb\x30\x9d\x9c\xae\x56\x46\x9d\x3d\xf0\xb0\xba\x31\xd9\x15\xcb\xbb\x8d\xc2\xab\x08\x04\x5f\x40\x7d\xb2\x2c\x16\x50\xf3\x31\x63\xd3\x44\x1b\x23\x1c\xa6\x76\xdb\x18\x97\x14\xb6\xe7\xf4\xb2\x5e\xf5\x39\x9d\xb0\x19\x55\xcc\x4c\x59\x9e\x33\x08\x77\xcc\x84\x9d\x43\xeb\x29\xc0\x45\xf9\x36\x8b\xa3\xaf\xa5\x2d\xc9\x10\xf9\xc4\x5a\xb4\x36\xb2\xd8\x49\x27\x75\x83\x41\x67\xfe\xba\x53\xc7\x92\x10\x7f\x25\xcd\x37\xa4\x16\xeb\xa3\xbf\xac\x8b\x20\x3b\xe1\xd5\x55\x22\x4a\xf2\xd9\x4c\x27\x13\x76\xcc\x95\xb2\x05\xbc\x09\xa9\xe0\x58\xdb\xb4\x38\x82\x83\x02\x6a\xcb\xb0\x46\x6d\x33\x33\xeb\x27\x75\x8a\x02\x65\x8b\x98\x68\x2e\x05\x07\xd9\x1e\x09\xde\xc4\x3c\xab\x76\x61\xb4\x54\x2e\x00\xcf\x3c\x41\x56\x80\xcb\x94\x4c\x4f\x5b\xb6\x73\x05\xab\x42\x5b\x0e\xb5\x2f\xd4\x9a\xa5\xbd\xa4\x96\x59\xf9\xd5\x2a\x76\x24\x86\x67\x8f\x8b\xb8\x1b\x5f\x32\x7d\x19\x05\xe3\x74\x71\x1a\x90\x60\xbc\x54\x41\x4c\x54\xe4\xd8\xdf\x72\x67\xef\x8d\x58\x3c\x64\x44\x46\x9b\x9b\xd5\x19\xbf\x9b\x1e\x1f\x53\x31\x29\x60\x2b\x23\x0c\x38\xa7\x17\x95\xc9\xd6\x17\xfd\xcb\x9a\x80\x0d\x47\xe4\x6a\x15\x63\xc2\x56\xbe\xcc\x7b\x5a\xb1\xb5\x9e\x50\x45\xb7\x8a\x69\xdb\x0a\x7a\x70\x9b\x50\x9a\x91\xbd\xa3\x94\xe4\x87\x4b\xc5\x90\xf4\x0c\x35\x66\x4c\xf9\x19\x9e\x5b\x93\xf1\x55\x9e\x03\x08\xff\xaf\x9d\xa9\x4d\xff\x5b\x64\x6a\xb3\x08\x99\x68\xff\x10\xda\xcf\x63\x55\x45\xc9\xaa\x8a\x8a\xc7\xa5\x2a\x9b\xfa\x5f\x88\x49\x2d\x5c\x75\xfa\x2c\x9c\xf3\x66\xa0\x79\x4f\x43\xdb\x00\x3e\x37\x2b\xe9\x3f\x12\x07\xe2\xb8\x8c\xfa\x91\xce\xfc\x83\x03\xde\x37\xcd\x99\x11\x31\xf7\x55\x61\x42\x1c\xa3\xe1\x71\x15\x86\x77\xb0\x09\xe6\xe8\xd1\x69\xe6\xcb\x24\x67\x30\x0f\x6c\xf2\x04\xb8\x90\xa0\xa0\xd6\x95\x39\x5a\x47\xb3\x81\x41\xf1\x9a\xb9\x4f\x8f\x18\xc2\xfe\xf9\x68\x1d\x80\x98\x6c\x73\x2e\xa1\xf2\x48\x28\x6b\xad\x9d\x62\xf3\x7c\x12\x05\x52\x69\x62\x50\x90\x3a\xf7\x71\xcf\x98\x9a\x57\x89\x51\x30\xe1\x32\xb0\x8f\x9d\x26\xd0\x94\x01\xcc\x9a\x30\xd1\x23\xf6\x55\x78\x43\x96\x77\x6d\xe0\xc1\x36\xd3\x8e\x4a\xcd\x55\xa3\x6a\x54\x5d\xac\x90\x4e\x26\xe0\xd8\xde\x45\xa6\x42\x8e\x19\x5a\xd7\x27\xce\x73\x17\x37\x55\xe7\xea\x81\x94\xc3\x33\x7c\xbb\x1d\x9c\x39\x4b\xa9\x64\x34\xc0\xd5\x0a\x61\xa6\x4e\x13\x16\x4e\x53\xa1\x1e\xf3\x8f\x58\x14\x0c\x76\x16\x2a\x68\x2d\x73\x98\xca\x89\x66\x13\xfb\xed\xd9\x0b\x3a\x81\x10\x59\xeb\xf2\x8f\xa9\x9c\x71\xb1\xbe\x7a\x9a\x71\xc3\x4d\x53\x1b\x80\xa7\xb5\xdc\x48\xed\x05\x60\xe6\x1b\x0c\x83\x84\x4d\x55\x10\x47\xc1\xd6\xeb\xaf\xbf\xfe\xfa\xe2\x99\xf3\xee\x6a\x1d\x42\x2d\xe8\x8c\x7d\xfd\xe1\x74\x9a\x69\x96\x6f\xed\xaa\x67\x63\x99\x26\xc9\x93\x74\xb1\xd1\x06\x94\x4a\x17\x91\xec\x05\x8b\x67\x0d\x58\x2a\xc8\x22\x19\x9d\xc0\x4b\x28\x09\x1a\xf3\x0b\x48\x19\x15\xb8\x4e\xea\x8b\xbe\x58\x30\x31\xb9\x3b\xe7\x89\xf1\xb3\x54\x54\xc4\x2d\x9b\x0b\xf5\xbd\xeb\x4e\x6b\x71\xcd\x37\xe8\xa2\xde\x0e\x29\x91\x70\xdd\x1e\xf4\x50\xab\xe0\x8d\x0a\x00\x4d\xf5\x17\x44\xcc\x26\xae\x97\x91\xe4\xda\x36\x8f\xc7\x55\xbb\x01\xad\x83\x64\xfd\x54\x15\x7b\xc0\x72\x6a\x15\x0a\xb1\x86\xa1\xb5\x33\x70\xd9\x2c\x1b\x4a\xb4\x7e\x8e\x5d\xd2\x5a\x1a\x64\x48\xba\x75\xe9\x51\x20\x23\x7b\xc6\xc6\x96\xd9\x42\x1e\x39\xf7\x6c\x55\x59\xb4\x69\x9d\xb4\x1a\x9d\x95\x77\x59\xa6\x2f\x17\x1e\x4f\xec\xa7\xb7\xb1\xd3\x3e\xd9\x87\xbf\x48\x73\x21\xcb\xf1\x98\x65\x59\x30\x0c\x8c\xb2\x18\x69\xb9\xad\x78\x97\x12\x7f\x7a\xca\x0b\x88\x77\x24\x98\xe0\x8c\x05\xb1\xb7\x77\x96\x4a\x9a\xef\x4a\xcc\x9b\xb8\x4a\x99\xb5\x87\x84\xe9\xc5\x9e\x04\xf6\x57\x38\x4d\xc7\xcb\x0c\x61\x62\xf7\xfb\x8c\xf9\x27\x72\x19\x1e\xf0\x5d\x2a\x66\x2c\x43\x57\xbe\x45\x54\x88\xb6\xab\xe3\x6e\x4a\x59\x35\xd8\xf9\x17\x3a\xc3\x0d\x93\x0f\x2c\xb2\xee\xf7\xc0\x9d\xe5\xc4\x64\x14\x8e\x5e\xa9\xbd\xb5\xc0\x6d\xa0\x96\xda\x78\x09\x7c\xd9\xbd\x04\x3a\x90\x3b\x30\x4a\x02\x6e\x76\xad\x20\xc8\xb4\xdf\x49\xf5\xd7\x52\x05\x2f\x1b\x17\x58\xeb\x7c\xc3\xd9\x9e\x8a\xa9\x70\xf7\xbe\xca\x54\x18\xf7\x42\xc5\xa0\x99\x15\xe7\x55\xe4\x6d\x36\x3b\x8a\x22\x56\xf1\x71\xc8\x11\xc3\x38\xcf\x07\xba\x1e\x84\x71\xd6\x0c\xdb\x05\x03\xb3\x00\xf8\x03\xa3\x1d\x93\x67\xa9\xfa\xcb\x26\x7a\x1e\x0c\x33\xb2\x13\xe6\x66\x91\x55\xaf\x23\xc1\x84\x67\x9a\xfb\x9d\x04\x4d\x4b\xcf\x66\x97\xd4\xd5\x0b\x3b\x8f\x12\x46\x33\x06\xbd\x97\xf4\x1f\x78\x50\x46\x27\x9d\x74\xda\x29\x5b\x2e\xab\x39\xc0\x96\xaa\x01\x17\xaa\x03\x56\x34\x8a\xf3\xfc\x02\xa0\x5f\x0c\xea\xaf\xa7\xcb\xce\x98\x8a\xfd\x97\x55\x67\xbc\x54\x1d\xbd\xc5\x3b\x53\x99\x1e\x77\x98\x99\x39\xeb\x22\xd8\x1b\x91\xc6\x92\x96\x91\x64\x2f\x5b\xee\xe8\xc0\xf1\x8e\xab\x8b\xb1\xc8\x14\x2b\xef\x90\xe5\x5d\x6f\x59\x75\x0a\x73\x81\x52\x1a\x4c\xde\xe3\x7b\x6f\xdf\xbb\xfb\xc4\x04\xe2\xd3\xd8\xf2\x80\x1e\x33\xcc\x0a\x6a\xa0\x59\x56\xc0\x8c\x22\x66\x54\xf0\xd6\x83\x47\xef\xd5\x2a\xe4\x79\xf0\xe4\xde\xaf\x3c\xb9\xf3\xee\xbd\x3b\xb5\x96\x0a\x45\xd8\x75\xab\xb1\x21\xf5\x7a\x5c\xc4\x00\x30\x4b\x30\x91\xf9\x2c\xc9\x12\x90\x22\xd4\x27\x16\xc2\x22\xc6\x1c\xb4\x68\x09\x56\x5b\x97\xe5\xa0\x20\xae\xd8\x59\x1d\xb8\xb1\xf1\x5e\xc7\x26\xe6\x26\x17\x60\x8d\xe6\x76\x42\xac\xac\xbd\x95\x48\x12\x5e\xe7\x17\x0d\x84\x78\x83\xdb\x21\x3c\x48\x27\xcc\xfa\xc6\xcb\x10\xc3\x7e\xd8\x55\x47\x57\x4d\xf8\x56\x53\x91\x6b\x50\x85\xef\xfd\xbf\x50\xce\x5c\xeb\x41\x16\x9f\xad\x94\xef\xc8\xab\x66\xa1\x5c\xa8\xc6\x99\xed\xc2\xf2\xdc\x90\x4b\x16\x9d\xad\x8a\x30\x7a\x62\xc4\xe2\x3c\x87\x3f\xd1\x28\xc6\xd8\x6a\xd4\x4f\x21\xba\xb9\x7a\x56\x06\x36\x27\x69\x25\xc4\x52\xa3\xfd\x6a\x0c\x6e\x88\x3f\x0b\x3e\x1c\x88\xb2\xd1\x97\x24\x29\x15\x6c\xdd\xe0\x78\x78\xe0\x5c\xe3\x19\x97\x0f\x44\xe2\x15\x88\xe7\x86\xad\x0a\x38\xd1\x28\x6e\x0f\xd8\x04\x11\x0d\x11\x6a\x19\x28\x86\x01\x8e\x62\x6c\x63\x52\x60\x22\xa2\x3e\xe1\x85\xb2\xf1\xae\xb8\xc5\x21\x86\xa9\x1c\x89\x38\x9c\xba\xf8\xbd\xf0\x6b\xac\x9e\x11\x55\xf1\x79\xb9\x22\xe9\x74\xda\xea\x2f\xaf\xa5\x6b\x62\x1c\xff\x13\x1e\x8d\x62\xbd\x01\x45\xb7\xab\x8a\xc7\x57\x13\x15\xce\x19\x9d\xee\xa6\xb7\xe8\x6e\xda\xeb\x61\x31\x4a\x35\x14\x46\x2d\xdc\xfe\x08\x0f\xcc\x4f\x6e\x6d\xc0\x47\x9e\xbe\x86\xd3\xe9\x86\xe8\x02\x11\x1f\x5a\xbf\x11\xd0\x2f\x00\xbc\x22\x25\x59\x50\x4d\xd9\x90\xd3\x0e\xbd\x61\x94\x43\x6f\xae\x73\x86\x6d\xed\xfb\x37\x59\xb7\xbb\xa9\xba\xdd\x4d\xd9\xd4\xa4\x79\x87\x67\xe0\x06\xa4\x70\x38\x56\x2c\x8f\x75\x3f\x2a\x42\x23\x8c\x43\xeb\x84\x0c\x8f\xd9\x38\x15\x65\x3d\x4f\x09\xc7\xec\x8a\xa2\x9d\xa9\xa8\xba\x93\xf4\xda\x78\x32\xe7\xb2\xb5\x89\xfb\x85\xa0\x02\xd6\x02\xe8\x96\xe7\xfc\x64\x8d\xea\x33\x6b\x5e\x2e\x75\x36\x39\xb3\xbc\x90\x4f\xb5\x59\x2b\xcb\x6f\x62\xd5\xad\x6c\xbb\x65\xdf\xba\xc0\xe5\xfd\xd7\xf5\xd5\xad\x28\xd2\xbd\x69\x57\xc9\x7f\x2b\xa8\xab\x76\x60\x5f\xa8\xe1\xb5\xe3\x6a\x8c\xcc\xae\xf0\xa5\xe3\xe2\xa8\xf2\x1c\x42\xac\x45\x9e\x6b\xab\x75\x69\xef\x73\x99\xa9\xf5\xd8\x41\x3a\x5f\x7d\xf2\xce\xdb\x96\x91\x31\x3f\xee\x1a\xa5\x73\x78\xad\x4b\x65\xe7\x81\x9d\xf6\xa0\xee\x33\x1e\x9f\x29\x58\x93\x36\xf5\xf5\x92\x35\xeb\x76\x2b\xa2\x32\xaf\x37\x13\x6f\xb3\xe4\xc1\x4c\xdc\x5e\xd3\x59\x4b\x84\xb4\x86\xc2\x82\x23\xfb\x76\xf6\x8b\xdd\xed\xf7\x8d\x82\x91\xe1\x08\x8b\x61\xc4\xfa\x00\x96\x79\x5e\x64\x54\x87\x6c\xb2\x71\xb7\x1b\x18\x12\x11\x70\x10\xc8\x22\x3f\x8e\x69\x9e\x2b\xbb\x11\x46\xfd\xd8\xc4\xb1\xcd\x6a\xd1\x66\xca\x18\xbe\x0d\x51\x7a\x9e\x57\x26\xc4\x8c\x01\x74\x29\xdb\x7c\xce\x17\x60\xba\x9d\x08\x00\x5e\x3a\x17\x2d\xfa\xed\x8e\x68\xbd\x8a\xfd\x53\xc7\x5a\x45\x13\x5e\x44\x88\xb6\xb4\x1c\xc4\x58\xe5\xe1\xb3\xb1\x7e\x6b\x4b\x42\xf5\x91\x75\xf5\xcd\x6d\x2a\xac\xbc\x08\xf8\xa9\x85\x83\x37\x95\xbe\x34\xf6\xd7\x9e\xd4\x20\xa4\xae\x13\x1d\x62\x52\xcf\xd6\x34\xdf\x6e\x48\x4d\x44\xd6\x91\x66\x22\x48\x5a\xcc\x72\xeb\x93\x6a\x6d\xa0\x7b\xdc\x0f\x89\x58\x4e\xcd\xb0\xa5\xb6\x2e\x5c\x6a\x00\xb9\x5d\x8b\xd7\x34\x80\x9a\x58\x02\xfa\x52\xed\x8f\x5b\x77\x60\x85\x71\x23\x28\xe3\x31\x5d\xb4\x11\xa2\x82\x76\x94\xa3\x5e\x61\x5c\x63\x90\xc0\xa1\x76\x53\xb1\xac\xd8\xa9\x9b\x4e\x80\xe5\x77\xa7\xc6\x73\x96\xb9\x27\xba\x46\x81\x0d\xe5\x8a\x44\xc5\x97\x1b\x82\xde\x41\xc7\xe9\x47\xef\xb4\xa4\x66\x2d\x89\x69\x4b\xda\x09\x3b\x3c\xe2\xaa\x96\xb1\x66\xb1\x0d\x33\xb4\xcb\xba\xdd\xd7\x2b\xb7\xbe\xdd\x9a\xe6\x83\xb7\xf8\x16\x60\xcd\xd9\xda\x4f\x7d\x00\x17\x4a\x68\xcc\x18\x6f\x30\x01\x2c\xeb\x4a\xdf\x33\x56\xa4\xa2\xc3\x06\xca\x1e\x55\xa5\xb6\xbd\x12\xba\x14\xe1\x21\x02\x75\xe1\xe2\x96\x8a\xda\x9e\x97\x90\x8c\x52\xbc\x27\xdd\x9e\x24\x02\x0f\x25\xce\x73\x54\xb6\xc4\x31\xae\xc5\x74\xbd\x86\x21\x48\xcf\x5a\x02\x70\xed\x5a\x9d\x02\x38\x12\x8b\x20\x76\xc7\xd9\x0a\x97\x91\x9f\x21\xa2\x3a\xe1\xb0\x84\xcf\xde\x64\x0b\x08\x03\x52\xda\x86\x79\x0f\x25\x94\x64\x64\x89\xcf\x96\xd1\x32\xcf\x07\x15\x07\xd4\x14\x37\x1f\x03\x13\xd3\xe7\x38\xa2\xa3\x24\x26\xd3\x48\x85\x19\x9d\xb2\x6e\xd7\x20\x35\xcf\xe0\x2f\x1a\x63\x32\xbf\x8c\xd8\x8d\xc1\xf5\xa1\xfe\xb3\x88\xb2\xbd\xac\x27\x7b\xc9\x30\x01\x96\x67\xda\xed\x6e\x4e\xfc\x33\xc0\xb4\x04\x14\x74\xee\x9d\x00\xd0\x97\x49\xc5\x85\xc2\x24\x40\x3e\xc6\xa5\x83\x80\xcd\x72\x0a\xf2\x7c\x79\x8b\x97\xd8\x80\xc6\x64\x41\x96\xbd\x01\xde\x48\x47\x8b\x38\x1a\xaf\xc0\x8d\x1a\x49\x3d\x6c\xe4\x84\x3b\xf7\x38\xf0\xbd\x14\xee\x57\x5d\x23\xca\xa8\xab\x22\x08\xf4\xd0\xb2\x12\x69\x24\xc3\xf4\x29\x93\x27\x92\x2b\xf3\xe4\x46\xf5\x72\x68\x36\x02\x42\x01\x35\xc6\xba\x79\xe9\x69\x51\xe2\xb5\x2a\xf1\x22\x2b\x1f\xdf\x1f\x80\xfd\xa4\x77\xc0\xf2\xec\x01\x7d\x00\xbd\x6d\x19\x29\x4a\xa1\xd5\x1d\x06\x38\xcf\x65\x68\x40\x00\xb5\xa6\xaa\xb6\xa1\xf1\x47\x8e\xc3\x2c\x95\x0a\xb5\xaa\x25\xb2\x7a\x6c\xe9\x55\x0b\xf2\x78\x3a\xe0\xcb\x48\x58\x0b\x51\x8e\x49\x12\x65\x68\x19\x66\x73\x3e\x55\x08\x63\x32\xd6\x3f\xf5\x11\x4d\xa6\x11\xdd\x2d\xd8\x82\xb1\x0d\xb9\x77\x29\x66\x4d\x47\x49\xac\x91\xeb\x05\xf0\x07\xf0\x2e\x35\x78\x57\x74\x08\xed\x98\xf1\xed\x22\xc8\xcc\x73\x5d\x48\x1f\x03\x36\xb7\xdb\x85\xde\xa2\xc0\x18\xab\x96\x14\x78\xec\xcd\xe7\xd9\x6a\x38\x82\xc1\xe8\xa2\x64\xe9\x89\xff\xd0\xba\x91\xe3\x15\x34\xcb\x40\x3d\xda\xf0\xb5\x74\x75\x15\x01\x88\x53\x2a\x03\xfd\x2f\xe6\x14\xc1\x2a\x8f\xcf\xad\xcf\xd4\x95\x12\x21\xcf\xde\x58\x4e\xa7\x4c\xd6\x9e\xad\x8b\xf4\x76\x4e\xa5\x1d\xa2\x60\x29\xf8\x87\x4b\xf6\x36\x17\x47\x6f\x4d\x02\x2e\x90\x75\x37\xa8\xe7\x4e\xb7\x9d\x26\x2c\x3c\xa1\x52\xa0\x40\xcc\x24\x5d\xcc\x43\xf8\x7f\xd8\x79\xac\xa8\x54\xfa\x8a\x05\x82\xa7\xa7\x4c\x82\xa6\x5a\x3f\x1c\x5c\xef\xfc\xaa\xdf\xe4\xaf\x76\x78\xd6\x99\xb0\x85\x64\x63\xaa\xd8\x24\xdc\x17\xef\x65\xac\xf3\xab\x60\xc9\x00\x4d\xfd\x6a\x27\x5d\x18\x9a\x69\xa4\x6e\xfb\x22\x00\x37\x21\x24\x78\x90\x2a\x36\xec\xa8\x39\x93\x4c\x37\x42\x93\x2c\xed\x8c\xe7\x54\xcc\x34\xa7\xd7\xb1\xb2\xfd\xce\x21\x9b\xd3\xa7\x3c\x95\xc3\xce\x7d\x0d\x89\x48\x4f\x3a\x7a\xdb\xd3\xf1\xbc\x03\xed\xef\x0b\x9e\x75\xf4\x48\xf8\x84\xe9\x9b\xa0\x4a\x41\x87\x0e\xbc\xfd\x97\x50\x74\x0e\x4f\x8b\x16\x11\x54\x66\x93\x19\x33\xae\x0a\xf5\x60\x70\x08\x22\xa1\xb2\x42\xc4\x42\x7f\x98\xb8\x3c\x71\xfc\x52\x20\x11\xf4\x2a\x6d\x0e\x6c\x6c\xe5\x36\x9d\x87\x8a\xae\xde\x5e\x8b\x2a\xf6\xf0\x6c\x45\xa4\xf1\xad\x73\xb6\xb2\x36\x59\xfd\x92\x94\x6b\x32\xb0\x57\x67\x3f\x5a\x70\x09\x97\x3a\x09\x55\x02\x42\x44\xd4\xdf\x15\xb7\x0a\x71\x44\xaf\x27\x30\x9f\x22\x8d\xe6\x72\x24\xe2\xd8\xb3\xd6\x6b\x68\x13\x81\xaf\xd6\xb5\xbd\x59\x53\x65\xd7\x98\xdf\x12\x99\x54\x66\xac\x11\xa9\xdd\x9c\xaf\xc6\x27\x05\xe1\x51\x52\x8f\xfd\x20\x8c\x0b\xd1\x3c\x37\x86\xca\xf8\x8c\xe7\x39\x4a\x46\x22\x8e\xfa\xd8\x46\x45\x08\xfe\x49\xd0\xeb\xf4\x7a\x3a\x71\x03\x9a\xea\xa5\x44\xf5\xd2\x42\xf4\xa3\xef\x76\x59\x19\xa4\x76\x5d\x18\x78\xbf\x98\x81\x07\xaf\xc8\x42\xaf\xc7\x71\x74\x44\x9e\x46\x47\x64\x16\x1d\x91\xd3\xe8\x88\x1c\x46\x67\x74\x32\xd1\x3c\xcc\xf0\x1e\xa1\x93\x89\xc6\x91\x61\xdd\x7c\x61\x86\x5c\xb0\xc7\x67\x88\xe1\x3c\xbf\x07\xa7\x5b\xf4\x0c\x8e\x80\x7b\x7a\x39\xb2\xc8\xb9\xa7\x28\xf5\xd0\x41\xec\x92\x61\x42\x11\x27\x19\x26\xcc\x88\x63\x28\x4a\xf5\xaf\x63\x94\x91\x80\x4e\x26\x01\xf8\xc2\x21\xd9\x8a\x98\x8b\x02\xf4\x7f\xc7\xfe\x00\xb0\x1e\x93\x19\x03\x26\x6b\xf8\xcc\x7d\x65\x77\xd3\xa5\x68\x13\xfd\x8e\x41\x26\xac\xdb\x58\x5b\xc4\xa1\x4c\x59\xb2\x45\xdd\xec\x99\xef\x27\x7b\x0f\xdc\x3a\x1c\x65\x43\x8d\xd9\x2b\x62\x0f\x23\x80\x68\xee\x7e\xe9\x86\x98\x99\x46\x6f\xf2\x64\xe9\x9c\x01\x5a\x34\x01\x06\xb9\x69\xae\x95\x7a\x3a\x17\xc2\x1d\xb1\x57\x6f\xa7\xb0\x3f\x88\xfa\xbb\xfc\x16\x2b\x31\xdf\xde\xdc\xd2\x88\x8d\x78\x6c\x3c\x3a\x68\x4a\xf7\xd6\xc4\x98\x55\x09\xa4\x46\x69\xa8\xd2\xb7\x26\x31\x49\x3d\x6c\x5e\x21\x0b\x08\xd1\xd7\xa4\x06\xd8\x57\xeb\x0e\xbc\xdc\x95\xbd\xed\x99\x8e\x86\x2e\xcd\xb2\x25\x23\x7a\x51\xd7\x2b\x7f\x12\x9b\x8b\x41\xc4\x85\xfb\x55\x45\x7d\x22\x4a\xb9\xa4\xba\x25\x76\x7b\x3d\x85\x19\xb2\xc1\xf9\x0e\xd9\x8c\x8b\xf7\x16\x13\xaa\xd8\x70\x46\x98\x98\xd8\xef\x53\xf3\x86\xe8\x63\xc8\x0c\x61\x52\x55\x57\x7b\x8c\x58\xc8\x27\xfa\xd0\x84\x00\x67\x73\x9a\x01\x8c\x0f\xf5\x57\x89\x92\x26\xcd\x73\x97\x70\x88\x49\xe3\xd1\xee\x30\x4c\xc5\xc6\x61\xc5\x5d\x40\xe9\xe0\x23\xf4\xa0\x8c\x66\xd1\x5d\x72\x18\x16\x90\x46\xa7\xd1\x13\x72\x1c\x1d\x90\xa7\xd1\x09\x81\x06\x18\x61\xf6\x3e\x70\xe8\x4b\x87\x57\x08\x93\xc3\x92\x81\xb3\x5e\xa5\x16\x56\x36\xad\xe7\x7b\xc8\x88\x39\x95\xf4\xdd\x67\xa8\x56\x75\xa7\x4f\x65\x69\x7d\x41\xba\xa0\xf4\x3d\x63\x82\x5f\x3c\xc1\xe9\xb3\x64\xbd\x91\xa0\x6e\xac\x53\x84\xa2\x96\x01\xde\x98\x15\xef\x04\xfe\x4e\x13\x7b\x48\x84\x13\xaa\x68\x24\xc9\x53\x24\x48\xb0\x84\x09\x08\x30\x5c\x95\x8c\x89\x3c\x68\x78\x8d\x7b\x3d\x53\x00\x08\x08\x26\x6a\xc4\xe2\x48\x00\x21\xf1\xc2\xbd\x3e\xf3\x95\x79\x2b\x41\x5b\x1f\x97\x42\x25\xb7\x2f\x37\xdd\xce\xdb\x1c\x78\xd0\x49\x83\xa6\x80\xc6\xf8\xcc\xfe\x82\xf7\xfe\x8d\xea\xfe\x10\xfe\xfe\xb8\x83\xc4\x88\xc7\x05\xcd\xb6\xc2\x65\x0d\x02\x19\x6f\x6d\x91\xa7\x48\x12\xab\x25\x61\xa9\xdf\x66\xbf\x84\xed\x0e\x72\x8f\x99\x25\x40\x86\x28\x71\x18\x3c\xbc\xdf\xde\xea\x57\xa0\x25\x12\x58\x60\x88\xc0\x3c\xf0\x66\xd6\xee\x42\x43\xab\x19\x6c\xcd\x72\xb2\xc1\x10\x96\x83\xae\x1d\x0c\x0b\xe3\xdb\x51\xbf\xdb\xb5\xbf\xfc\x06\x49\x5a\x94\x4d\x2b\x65\xd3\x96\xb2\xc7\x88\x5d\x30\xba\x87\xde\x6d\x93\x88\x72\xf6\x45\x9e\x6f\x3a\x38\x3c\xce\xd3\xb3\xde\x76\x70\x15\xf3\x5c\x5c\x95\x6c\xce\x48\x02\xf1\xe3\x25\x39\x62\x9a\xd6\xea\x41\x47\x51\x54\xe8\x0b\xf3\x95\xd7\x7e\x09\xd8\x11\xc2\x67\xe5\xaf\xbb\x08\x9f\x4d\x7b\xd1\xa0\x4c\x79\x82\xf0\x59\x3f\x8a\xd0\x74\x2b\x1a\xe0\x6e\x77\xe1\xf3\xde\x87\xe1\x94\x4b\x86\x02\xb3\x5b\x26\xe0\x8f\xc9\x15\x88\xfa\x2e\xc8\x0c\xdc\xbc\x6f\x34\x6f\xde\x10\xf6\x09\x3b\x53\x58\xa3\xc1\x6a\xef\x53\xa5\xe6\xaa\xbb\x60\x59\x5b\x16\x3d\x77\xee\x7e\xe4\xcf\xd1\xae\xec\x45\x03\x0c\xc6\x90\x32\x86\x4d\xe9\x4e\xbd\xc2\xd6\xb6\x26\x73\xb3\x4a\x08\x7c\xe2\x02\x25\x95\x28\x6e\x7e\xc3\x7e\xf4\x9c\x2a\x50\x53\x8b\x99\x82\x7b\xf6\xaf\xf3\xae\x37\xb4\xbf\xa3\x91\xf2\xf6\x5b\xc9\xb1\x58\x05\x20\xb3\x42\xcc\x85\xea\x7e\x6b\xe2\xde\xb3\xec\xee\x77\x30\x79\xbb\x79\x59\xbb\x25\x96\x6f\x7e\xbd\xe0\xff\xf9\xce\xff\xf4\x5b\x9d\xa0\xa7\xfc\x87\xc0\xab\xdc\x71\x36\x6b\x2c\x68\x9b\x43\x68\x90\x00\xf2\xe9\xa9\x1f\x3e\x78\x4a\x93\xec\xb4\x63\x2f\x7f\x34\xeb\xb0\xa7\xf0\x94\x9d\x2d\x8d\xb4\xa7\x74\x23\xa1\xa2\x51\x00\x7e\x1a\x35\x82\x04\x24\x48\xa7\xd3\x20\x26\x35\x05\x5b\x8d\xca\x9a\xdd\xac\xb3\x8b\x86\xfb\x6c\x7a\xcb\x33\xbd\x38\x78\x0e\x99\xe9\x1e\xa2\xfc\x93\x4e\xc6\xc5\x98\x75\xb8\xea\xd0\x44\x32\x3a\x39\xed\xcc\x29\x04\xdf\x81\x26\x3b\x2f\x07\x3d\xdd\x6a\x2f\x78\x39\x00\x11\x85\xa5\x2c\x4d\x06\xa8\xcd\xba\xd2\xba\xbd\xf0\xdf\x4b\xad\xe0\xb8\xdd\x7a\xa8\xa9\x2c\x12\x8c\xad\x02\x96\xbe\xad\x14\x6e\xd5\xcd\x35\xc7\xd7\x89\xb5\xcc\x30\xa8\x1b\x3b\x4d\xd7\x3c\x47\x26\x25\xd2\x57\x60\x6b\xad\x7f\xe6\x1a\x1c\x0a\x78\x77\xe5\xe0\x58\xa8\xfa\xda\x08\x68\xe7\x9f\x54\x05\x8f\xd5\x3a\x4c\x62\x94\xc8\xf5\xdc\xaf\x1b\x56\x41\xd0\x65\x6c\x1e\xfd\xcb\xb3\x40\xa7\x91\x34\xea\xef\xa6\xb7\x78\xb9\xbe\x29\xe6\xa3\xd4\xd8\x16\x83\xfa\x59\x14\x09\x4d\x9a\x2c\xd9\x4c\x35\xcd\x2e\xec\x38\x89\x46\x95\x4a\x5c\x38\xa7\x7b\xae\x2c\x85\xdb\xe4\xa5\x18\xb2\xa1\x0a\x34\xe8\x76\x91\x88\x1a\xfe\x9a\x16\xed\xcf\xbf\x25\xa6\xb6\xc0\x6c\xdf\x03\x34\xe8\x1b\xb4\x00\xde\x72\x1e\x14\x9e\x79\x45\x71\xc8\x31\x78\xd2\xf2\x5e\x09\x52\x01\x4e\xdc\x09\x0b\xd3\xe9\x54\x7f\x4e\xa7\x84\x01\xa1\x8c\x14\xfc\x21\xec\xca\x3e\x78\xae\x9b\x67\xd6\x1b\xd6\x07\xcf\xba\xb8\xfb\xee\xb5\x15\xe4\xa0\xfe\x13\x4b\xf9\xae\x66\xe3\x4d\x13\x17\xef\x90\x0b\xc5\xe4\x42\x32\x17\x20\x54\x14\x1a\xd7\xce\x5b\x56\x9b\x50\xa4\x5e\xb5\x28\xec\x62\xff\x59\xe5\xdb\x53\x3a\x99\xd0\xa6\x31\xb8\x69\x44\xa3\x62\x7d\xf9\x40\x33\x19\xfc\x54\xd4\x73\xc0\x2d\x5b\x76\x50\xaa\xc1\xe3\xbd\xb2\x0b\xc4\xc8\xd9\x8a\x28\x3c\x44\x0d\xc8\x80\x03\xd3\xc8\xcd\xec\xbd\xbf\x51\xa2\xf8\x46\x8c\x80\x83\x2c\x8e\x43\x17\x7f\xdb\x7e\xe8\xfb\x36\x76\x1a\xc5\x72\x69\x55\x23\xa0\x6b\x47\xc2\x1f\xd7\xde\xbf\x8a\x87\x95\xaf\xeb\x52\x9d\x9d\x70\x10\xf6\x3b\x77\xd3\xc5\x29\x28\xd3\x76\x76\xfa\x83\x7e\xe7\xb1\x62\x8b\x39\x13\x9d\xbb\x92\x65\xd9\x09\x4b\x92\xce\x76\xe7\x9e\x60\x72\xc6\x3f\x62\x93\xce\xd7\x52\x79\xd4\x79\x5b\x4d\x82\x2b\xfb\x6a\xba\xf6\x9a\xc1\x93\x6b\xaf\x1b\x44\xb9\xde\x6f\x3a\x6b\x6a\x75\x7d\x9f\x45\xa3\xd8\xf7\x84\x51\x59\x23\xb7\x02\xbe\x1f\x0a\xcf\xc7\x57\xb9\xef\xb2\x51\x3f\x0e\xb3\x71\x2a\x59\xc8\x3e\x5c\xd2\x24\x43\xd9\x68\x60\x53\x2a\x0e\x98\x6a\x1e\xc2\x20\x48\xf4\xbc\xf4\x79\x36\x71\xb1\x6e\x49\xa7\xc5\x4b\x77\xc1\x12\x98\x9e\xc6\xe9\xf1\x82\x4a\x86\x58\xa3\x9f\x79\xc5\x4b\x7b\x0d\xae\x7e\x13\xae\x49\xa5\xfc\x31\x1d\xcb\xd4\x3f\x4f\x61\x9d\x1d\x36\xb5\xdc\x61\x96\x08\xef\x81\xe7\xe5\x21\x23\x50\x6c\xb8\x39\x20\x92\xd1\x2c\x15\xc3\xe0\x3d\xf7\xb2\x04\x6b\x1e\xac\x86\xc9\x45\xa5\xef\x1c\x1f\xf2\xd9\x32\x5d\x66\x50\xba\x83\x6c\xe8\xbe\xac\x33\x0a\x7a\x63\x7d\xde\xc7\x1d\x2a\x59\x87\x26\x49\x07\x06\x94\x9c\x76\x66\x69\x3a\xd1\x27\xe2\x04\xc0\xcb\x70\xb0\x1a\xd6\x9a\xef\x93\x13\x2e\x0a\xfb\x36\xf3\x0d\x6c\x42\xa9\x3b\x7a\x60\x52\x6b\x51\x22\x96\x6d\x21\xef\xab\x03\xf2\xe3\xf2\xf3\x29\x4a\xda\x6a\x54\x07\x55\xd4\x08\x3b\x2d\xa3\x83\x07\xa7\x62\x6c\x7a\x67\x78\xc1\xe7\xaa\xf0\x13\xef\x67\xcb\xaa\xc0\x4a\xc3\x5a\xd6\x9f\xee\xb3\x48\x5d\xe4\x5d\x0e\xea\x0c\x15\x01\x2c\x19\x9a\xbb\xd7\xc8\x50\x48\xe3\x8c\xf2\x29\x13\xd9\x5c\x31\x2e\x0e\x32\x3e\x13\xe0\xc5\x0a\x61\x4c\x8c\x47\x26\xbd\xb3\x62\xf0\x0d\x67\x04\xfd\xa0\xa2\x00\x26\xbf\x9f\x27\x74\xbd\x11\xda\x39\x04\x5c\x3a\xb6\xf1\x74\xc1\xa2\xe0\xed\x12\x90\x37\xb9\x21\xf8\x8f\x35\xc8\x8e\x2a\x94\x36\xa0\x76\xa7\xb4\xd1\x73\xab\xec\xb6\x55\x76\xe1\xdc\xf3\xc1\x7e\x69\x8b\x91\xbe\xc9\x9c\x76\xb0\x06\x23\x8a\x18\x7c\xd8\x34\xa3\x83\x1f\x15\x4a\x74\x75\x69\x40\xc5\x21\x52\xc1\xc7\xdb\x50\x13\xf0\xee\x25\x7a\x83\xfa\xd9\x1c\x09\x50\x75\x92\xa3\x34\xf6\x0a\x72\x57\xb0\x52\xc8\xd5\xa4\x51\x7f\x97\xde\x8a\xf8\x2e\xb5\x35\x47\x34\x8e\xfa\xcd\xf2\x90\xd5\x8f\xa3\x14\xb2\x6a\xb5\xfa\x50\x8b\xae\x50\x45\xaa\x01\xd1\x3d\xbd\x7b\x95\xb0\xa3\xee\xd7\x6e\xc6\x05\x9b\xcb\x3d\xb8\x4c\xe7\x85\x50\x49\x83\xa0\xdb\xd3\x43\x8b\x22\xa5\x2f\xcf\x72\x94\xf6\x06\xf1\x88\xf7\xc0\xfb\x7e\x1a\x8f\xb8\xe1\xb5\x2c\x53\x62\x92\x7a\x83\xb8\x37\x20\x59\xe4\x0a\xeb\x5f\x4b\x57\xbc\x37\xd8\xf0\x1b\x79\x87\xaa\x79\x78\xcc\x05\x5a\x12\x4a\x32\xbc\x72\xf0\xca\x91\x03\x23\x1e\x39\x58\xe3\x55\xe3\x02\x71\x25\x44\xf5\x16\x1f\x62\xd3\x65\xfc\x30\x31\x9a\x5b\x7b\x83\x61\xdf\x47\xdb\xc7\xf4\x98\xbd\xcd\x0f\x25\x95\xa7\x06\x5d\xc9\x65\x38\x5a\xb6\xbd\xc5\x7e\x1e\x38\x7a\xf5\xe0\x7f\x6b\xdc\x38\x1a\xcd\x7d\x3d\x98\x2c\x12\x45\x10\x64\x33\xdc\x77\x96\x89\xe2\x97\x0d\xb4\xbc\x34\xf5\x77\xd5\x2d\xaf\xb9\x42\xb6\xe7\x2c\x11\xad\xde\xa0\xc9\x1d\xa9\xb8\x7e\x0a\xea\x34\xec\x47\x64\xeb\x48\xc7\xa7\xf6\x3f\xf7\xac\xf5\x9d\x06\x75\xd1\x19\xbe\xf2\xa4\x59\x27\x92\x7d\xc3\x97\xdc\xb0\x01\x13\x6f\x62\x8d\xbb\xe8\xf5\xf5\xec\x09\x59\x92\x84\x8c\xf1\x19\x8b\x16\xee\xb6\x36\x75\x81\xea\x5d\xf8\x62\x4c\xe6\xf6\xb5\x58\x84\xe0\x35\xf0\x00\x7c\x85\x6b\x26\xcf\xd0\x43\xe4\xbb\xee\xf0\x4f\xf9\x71\x78\x9c\x4e\xc0\x46\x54\x8c\x83\x28\x8a\xcc\xef\xa1\xdc\x8c\x22\xbf\xa9\x6e\xd7\x49\x57\x37\x23\xcf\x29\x77\xc5\x37\x74\xe5\xe5\xc1\xba\x59\x64\xd8\xe7\x1f\xc6\xd1\xb8\x8c\x0d\x96\x18\xd4\x8f\xac\x8c\x81\x67\x07\x85\x78\x70\x72\x70\x78\x1a\x35\x0f\xa4\x8e\x5e\x8a\x05\x52\xee\xc4\x1b\x53\x71\x50\x70\xae\x6d\xfb\x65\x5a\x8d\x7b\x1c\xb6\x15\x26\x94\x58\x35\x84\x85\x15\x2f\x5a\xa6\x61\xe5\x38\xdf\xa5\xfb\xa0\x78\xc3\xb7\x02\x2d\x5e\x7b\xfa\x1b\x1c\xa9\x32\xbc\x6f\x5b\xb0\x1c\xd5\xaa\xd3\xa4\x7c\x55\x20\xeb\x51\x17\x09\x22\x7a\xc5\x81\xb0\x35\x28\x7c\x28\x4b\x0c\x87\xa9\x6d\xda\x38\x87\x44\x8d\x57\x53\x24\xf1\x0a\xd4\x01\xa7\xe1\x4c\xa6\xcb\x05\x5c\x47\x4a\x30\xec\x4d\xbd\xa0\xd8\x09\x52\xf6\xa6\xbd\x31\x37\x91\x85\xb3\xf0\xe1\x83\x83\x7b\xbf\x72\xef\xee\x7b\x4f\xee\x11\xc7\x3f\xe9\x7b\xf5\x22\xb4\x22\x04\xce\x32\x17\x07\x7b\x38\xf5\x96\x97\x50\x39\xcb\xf4\xf5\x1b\x4c\x8e\xd2\x48\x84\x5c\x3c\x4d\x8f\x18\x92\xa4\x52\x77\x82\x38\xde\xe3\x43\xee\x06\x96\x60\xcf\xf8\x48\xb3\x4e\x15\xe0\x6c\xe4\xbc\xa6\xcb\x92\x06\x0a\x2f\x64\x7a\xcc\x33\xe6\x61\x31\xf8\xa5\x51\x73\x26\x56\x28\xc5\x7b\x29\x7c\x82\x0e\xa9\x86\x54\xf7\x1b\x9a\x7e\x13\x3c\x04\xa0\x92\x6e\x37\x41\x78\x68\xa4\x04\x45\xf0\xb8\x92\x88\xb7\xf2\x0d\x10\x2e\xdd\x30\x82\x07\x5c\xa0\xc4\x55\x2b\xd3\xda\xaa\x25\x9a\xaa\xb8\x9d\xd0\xc6\x48\xb5\xf9\x40\x0b\x4f\xb8\x9a\xa7\x4b\x75\x50\x7a\x5b\xc9\x0a\xfe\x6f\xfd\xfd\xab\xc3\x56\xc4\x5f\xdd\x37\xef\xdd\x7f\xeb\x81\x5e\x5c\xd7\xd7\x90\xb5\x2e\xe8\xaa\xed\x5d\xbe\xfd\x76\xfe\x3a\xf6\x9d\x25\x79\x01\xb4\xdd\x6b\x3f\x62\x64\x3b\x7c\x65\x3f\x44\x7b\x43\xeb\xef\x34\xcf\x16\x6c\x0c\xff\xf1\x29\x1f\x83\x1b\x52\xfc\xd2\x36\x5e\x6d\x70\x4f\x33\x1f\xb8\x4d\x4f\x0f\x9b\x5f\x0c\xd0\x2e\xba\x44\xe0\x67\x78\x96\x70\x9c\x70\x26\xdc\x26\x38\x5b\x6d\x38\xf7\xc3\xaf\x96\x1c\x76\x68\x02\xfc\x3f\x3e\x15\xe3\xc8\xff\x61\xe2\x1f\xea\x5f\xc4\xf8\x1d\x9e\x70\x69\x0b\x79\xbf\xf2\xbc\xed\xf8\x06\x6f\x11\x9a\x26\xae\x0d\xde\x1e\x84\x81\xd1\x59\x0d\x42\xf3\xb5\xb2\x9a\xa5\x54\xd9\x4e\xdc\x67\x5b\x0f\x67\x3c\x2b\x62\x9d\xb7\x19\xc5\x84\x5e\xbe\x3d\xba\xd4\x0a\x5d\x55\x75\xec\xcb\x9d\x68\x22\x5c\xbc\x71\x51\x8f\x37\x5e\x48\xe7\xe1\x0e\x1c\x99\x3f\xde\x78\xd7\xaa\x78\xeb\x72\x75\x01\x97\x0a\x33\xb6\xa0\xc6\x03\xc3\x0a\x6c\x49\x12\xaa\xf8\x53\x16\x95\x9f\xfe\x54\xfa\x0a\xec\x3d\xaf\x6e\x4f\xae\x88\xf8\x47\x9c\xab\x42\x8f\x48\xec\x89\xa1\xe7\x96\x3d\x1c\x9f\x4c\x5a\x76\xbc\x6a\xc4\xbe\x7f\x21\xf0\xaf\x1a\x31\x5e\xa2\x9d\x42\x6e\x79\x36\x3e\x99\xb4\x79\xa5\x6b\x42\xb2\xfa\x62\xa1\xd3\xef\xce\xb9\x60\x19\x6b\x0f\x9d\x9e\x7f\xf6\x2f\xbe\xf3\x0f\xbf\xfe\xe3\x17\x8e\xa0\x9e\x7f\xf6\xed\x1f\xfc\xec\x7f\xfb\xcb\xfc\xb3\xdf\xfa\xb3\x9f\x7d\xfb\xff\xcc\xd1\xde\xb0\x92\x80\xf7\x3e\xfb\x93\x3f\xfb\xfb\x1f\xfc\xd5\x55\x02\xad\xe7\x3f\xfd\xe4\xb7\x3f\xfb\x8b\xdf\xcb\xff\xfe\x4f\x7e\xf0\xd3\x4f\x7e\x3b\xff\xe9\xf7\x3f\xd1\x7f\x7e\xf6\xbf\xff\x5f\x3f\xfd\xe4\xb7\x2f\x0d\xc2\x9e\x7f\xf6\xc9\x6f\x7c\xf6\xef\xff\x00\xfe\x7c\xc3\xfc\xf9\x17\x7f\x94\xff\xec\x0f\x3e\xfe\xec\x1b\xdf\xd6\x7f\xfe\xfe\x47\xff\xb2\x25\x4e\x7b\xfe\xd3\x1f\xfe\xc6\x4f\x7f\xf8\x1b\x7b\x17\xc5\x6b\xcf\xff\xe1\xd7\x7f\xc7\x0c\xe8\x7f\xf8\xd9\xef\xfe\xde\xe7\x89\xde\x9e\x7f\xf6\x8d\xdf\xfc\xec\xdf\x7d\xac\xff\xfc\xc3\xbf\xff\x04\x7e\x69\x48\xff\xf6\x3f\xfe\xf4\xfb\xbf\x9f\xff\xc3\xaf\xfd\x8e\xfe\xf3\xd9\xef\xfd\xce\xcf\xfe\xd7\xff\x98\xff\xf4\xc7\xdf\xfc\xd9\xbf\xfa\xcb\x2b\x86\x7b\xcf\x3f\xfb\xf1\xbf\xcc\x3f\xfb\x77\x1f\xff\xec\x8f\xbe\x7d\x49\x6b\x57\x8d\x0a\x9f\xff\xdf\x1f\xff\xdb\x9f\xfe\xed\x3f\xcf\x7f\xf6\xed\xef\xfc\xec\xdb\x7f\x78\x49\xa3\x2f\x12\x3f\xfe\x05\x51\xf5\xbe\x64\x62\x5c\x09\xf2\xaf\x61\xbf\x3f\x8d\x53\xd3\xa0\xa0\x09\x57\x9f\xfe\x39\x6e\x43\xd7\x4f\xff\xdc\xe2\xeb\xa3\x45\x9c\x50\xd1\x19\xbd\x39\x89\x97\x1d\x3f\xab\x15\x19\x99\x45\xc6\xe2\x3b\xd7\x38\x32\x5a\x7e\xfa\xb7\x71\x1d\xf9\xee\xb1\x58\x74\x40\x01\x55\xb1\xdc\xfc\x1a\xa7\x4b\x99\x39\x5c\xac\x20\xda\xe3\x2c\x66\x4b\xa3\xde\x1d\xd7\xd0\x4c\x67\xdf\x1d\xc7\xa9\x50\xec\x99\x62\xb8\x82\x5a\x8f\xb3\x38\xe5\x2a\x1f\x7d\xfa\x5b\x9f\xfe\xf9\x3d\x16\x2b\x2a\x54\x67\x92\x0a\xf1\xe9\x9f\x6b\x20\x5b\x52\xdb\x12\x5b\x4b\xc2\x8a\x3f\x65\x63\x80\x5c\xe5\xa3\x77\x8e\x63\xca\x33\x48\xd5\x43\x9a\x48\x56\x41\xbf\x5f\xfa\x30\x5e\x52\x8d\x20\x6f\x27\x71\x2a\xb3\x0f\x97\x2f\x97\x9f\x0c\x88\x02\xaf\xb6\x54\x41\xb7\x3b\x34\x4e\x52\x59\x69\xbd\x51\xfa\x42\x3c\x22\x41\x96\x72\x15\x90\x80\xe9\x21\xe8\x11\x30\x96\x55\x7f\x56\x7e\x05\x24\xf8\x50\xc3\x1b\x90\x20\x31\x30\x06\x24\xa0\xfa\x33\x88\xc9\x8c\xa9\x8e\x6e\xae\x66\xef\x0a\xfd\x82\x4e\x53\xc7\xef\xe5\x4a\xa5\xae\x52\x68\x7d\x19\x00\xb5\x96\xad\x47\x6f\x72\xed\x00\xd6\xe6\xc3\xb0\x6a\xb9\xc0\xb5\x7f\xa1\xbd\xf7\x15\x26\x8f\xa9\x68\xd9\x7b\x4b\x71\xa4\x1b\x84\xad\xf7\x27\x2a\xf7\xce\x0e\xbd\xba\xd9\x82\x1d\xa9\x7c\xf4\xde\x32\xce\xd8\x98\x66\x26\x51\x9c\x30\x31\x59\x8a\x59\x36\xa5\x49\xd2\xb6\x5b\x3f\xf2\x0e\x17\xfb\x8d\x3a\xb3\xfc\x2b\x58\x2e\xc5\x44\xf2\x2c\xcb\x35\x91\x65\xd9\x78\xce\xe6\x02\xb0\xa5\xba\x73\xdf\x38\x8c\x19\xcf\x16\x9c\x25\x6c\xaf\xbe\x4d\xed\xc1\xa0\xb7\xf1\x74\xca\x44\x65\x57\x3e\x10\xf1\x52\x02\x26\x72\xf1\x11\x9f\xb5\x6c\xcc\xaf\xcc\x62\x0d\x43\x42\x67\x2c\x1f\x7d\x75\x1e\xc3\x1d\x78\xa6\x93\x00\x58\xa6\x96\x8b\x7c\xf4\xcb\x4f\xe3\x54\xd2\x65\x36\x63\x19\x53\x1f\xa9\xea\x16\xd6\xe3\x9f\x31\x91\x1e\x1f\x6b\x82\xab\x87\x31\x63\x87\x4c\xa0\x4e\xc6\x38\x62\x02\xef\xe1\x3d\xd8\x05\xdc\x4c\x9b\x6e\xf8\x0e\x8d\x0f\x99\x84\xbf\xcb\x4f\xbf\xc3\x64\xfd\x20\x60\x42\xc0\xbc\xd3\x24\xc9\x6a\x95\x2a\xdb\xee\xcd\x49\x4c\x6d\xd1\x34\x99\x25\x7c\x3c\x2f\xdb\x6c\xd6\xfb\x39\x12\xf2\x37\x97\xaa\x95\x8e\x3b\xc4\x01\xb4\x1a\x3b\xb4\x62\xdc\x9c\x9a\x7c\xc6\x44\x36\x9e\xd3\x45\x2b\x81\x77\x28\xf3\x95\x59\xce\x9e\xd2\xa4\x81\x13\x7a\x51\x52\x79\xc8\x58\x32\x61\x62\x2d\x56\xbc\x73\x1c\xa7\x4c\x75\x44\x3a\xab\x20\x86\x26\x58\x09\x03\x6c\xa9\x63\xc4\x1d\x1a\x8f\xe7\x80\x04\xa9\x98\x34\xa8\xb5\x62\x89\x5b\xe4\xa7\x4c\xa0\xbd\xe1\xfe\x7e\x36\xa1\x4a\xaf\xb1\x3e\x21\x0c\xbd\xa3\xd5\x15\xd5\x9d\x19\xfe\x87\x6a\x5a\x22\x1b\x45\x6b\x2b\x0a\x08\xc7\xe4\xd3\x34\xd1\x13\xd4\x28\xfd\x73\x5c\xc7\x07\xa9\x3c\x61\x33\x5e\xa5\x0b\xba\x7f\x0d\xc8\x11\x5d\xf8\xeb\xe4\x2d\x92\xbf\x34\xba\xf4\x51\x06\x47\xab\xf4\xd6\x04\x4e\xa3\xa7\xfa\x28\x95\x6e\x1d\x80\xfd\x92\xac\x85\x27\x3b\xd2\x1b\x50\x34\x78\x30\x65\x8e\x13\x36\x81\xcd\x3e\x33\x3f\x84\x41\x74\xa1\xa8\x52\x95\x59\x7f\x20\xe2\x4f\xff\x54\x56\x8a\x56\xa6\xfa\x71\x16\x7f\xfa\xa7\x80\x9a\xd3\x54\x6a\xc8\xea\x45\x2f\x39\xb0\x66\x5c\xe9\x03\x4b\x7c\xfa\xa7\x52\x1f\x5f\x9f\xfe\xa9\x3d\x79\x74\xfa\xda\xa3\xc0\x14\x5f\x47\xea\xa1\x95\x2f\x9d\xd2\x3f\xe2\x92\x2a\x56\xdf\x9d\x4f\x54\x4c\x35\xf7\xf3\xf5\xd3\x98\x4a\xd1\xd8\x81\x77\x68\x3c\xd1\x93\x02\xdb\x57\x73\x29\x52\x71\x56\xd9\x83\x8e\x9f\xcf\x94\xbf\xcc\x6f\x1c\xc6\x92\xcf\xfc\x25\x4e\xe8\xf8\x08\xf8\xb2\x45\xaa\x6a\x6b\x7d\x87\xc6\x53\xe5\x62\x9b\x37\x18\x6e\xcd\x69\x5f\xcc\x71\xb7\x30\xd0\x63\xd6\xc6\x42\xb7\xf0\xc6\x63\xb6\x8e\x3b\xbe\xca\xd2\x6b\xe8\x6c\xf2\x98\xd9\x8c\x31\x2b\x30\x40\x67\xaf\x67\x07\x4c\xad\xb5\xe7\xbd\x6a\xcb\xfe\xe2\x68\xf0\xde\x91\xa4\x5c\xf0\xe6\x99\x7f\xfe\x27\xcf\xff\xfb\xf8\xf9\xaf\x9f\xff\xf8\xfc\x07\xcf\xbf\xf9\xfc\x5b\xcf\x7f\x37\xaf\x27\x9d\x7f\x72\xfe\xe3\xf3\xef\x9e\xff\x30\x1f\x9d\x7f\xe7\xfc\xef\xe2\xf3\x4f\x9e\x7f\xfc\xfc\xd7\xce\xbf\x77\xfe\x1f\xce\xbf\x9b\x8f\xce\x7f\xef\xfc\xbb\xf1\xf3\x6f\x9c\xff\xdd\xf9\xf7\xce\x7f\xf0\xfc\xe3\x7c\x74\xfe\x47\xe7\x9f\xe8\x84\x4f\xce\xff\xc3\xf9\x0f\xcf\xbf\x7f\xfe\x57\xcf\xbf\xf5\xfc\x1b\xcf\x3f\x7e\xfe\x3b\xf9\xe8\xfc\x7f\x3e\xff\xab\xf8\xfc\x87\xe7\xdf\xd5\x09\x7e\x56\x03\xff\xce\xff\xf8\xf9\x37\xe2\xe7\xdf\x3c\xff\x9e\xee\xf9\xf9\xaf\x3d\xff\xd6\xf9\xdf\xe6\xa3\xf3\xff\xe3\xf9\x3f\x8f\xcf\xbf\x0b\xed\x7e\x72\xfe\xe3\x2a\x3a\x02\x68\xcf\x7f\xed\xfc\xfb\xe7\x3f\xd0\x3d\x9c\xff\xcd\xf9\xf7\x6b\x67\xc2\xf9\xbf\x3e\xff\x71\x7c\xfe\x3d\x0d\x29\x80\xaf\x7b\xff\x35\xe8\xe1\xfb\xd0\xfa\x9f\x3d\xff\x4d\x9d\xfd\x83\xf3\xef\x3e\xff\x1f\x9f\xff\xa6\x49\x6c\xdc\x40\x8b\x63\x64\x74\xfe\x6f\x9e\x7f\x1c\x3f\xff\xd6\xf9\x0f\x9f\xff\xce\xf9\x0f\x74\x67\x15\xdc\x3e\xff\x83\xf3\x1f\xc4\x1a\xca\xe7\x1f\xc3\xc4\x7c\xe3\xf9\xc7\x15\x1c\x3f\xff\xfd\xf3\xbf\xd1\x63\xf9\xf1\xf9\x27\x79\x09\x7b\xee\x80\x7c\xfe\x1b\xe7\xdf\x05\xa0\xbe\xf9\xfc\x5b\x71\x6e\xfa\x2a\x66\xfb\xfc\x87\xe7\xdf\xab\xe0\xfe\xf9\x5f\x3e\xff\xdd\xf8\xfc\x07\xcf\x7f\x0b\x1a\x83\x96\xbf\x97\x17\x20\xfc\x10\xda\xbd\xa0\xa1\x72\x6f\x98\xec\x4f\xce\xff\xe6\xf9\xb7\x2e\xae\xf2\x73\x3c\x84\x1e\xa5\x09\xcf\x1a\xdc\xc4\xd7\x4e\xe2\x9f\x7c\x4c\x7f\xf2\x87\x63\x7e\x92\xfe\xe4\x0f\xff\xd3\x6f\x5a\xa6\xe2\x68\xfc\x01\xf5\x19\xd3\x47\x8b\x38\x55\xf2\x23\x76\x48\x3b\x7a\x37\xf3\x8f\x04\xcb\xd2\x13\xba\x9e\xc3\x58\x66\x1f\x19\xb6\x94\x1e\x26\xa9\xe8\x54\x32\x68\x15\xc3\x1e\x2d\x62\xf9\xd1\xe9\xd1\x4f\x3e\xa6\x93\xd3\x1a\x6a\x3d\x4c\xe3\xf1\x47\xec\x68\xf9\xc1\x7f\xfa\x8d\xf1\x69\xae\xcf\x1e\xce\x3e\x3a\x61\xf2\x74\xca\x8f\xd2\x13\x2a\x4e\x9b\xe8\xf3\x44\xc5\xa7\xc9\x51\x5a\x43\x9b\x7f\xf6\x51\x4c\x7f\xf2\x71\xfa\x93\x1f\x31\xc1\x69\x05\x61\x74\x0e\xf4\x4d\x75\x27\x86\x1f\x30\x5f\x0f\xd3\x58\xd2\x8f\x80\xee\xc1\x54\x24\xd5\xab\xdd\x3f\xfd\x20\x66\x3f\xf9\x11\x4b\x78\x6e\x3e\xff\x50\x7f\x7d\x65\x16\x4f\x4e\xf3\xd1\x2f\x1e\xc5\x9c\xe9\x8f\xd6\x36\x94\x4f\x5c\xd5\xfa\x72\x97\x90\xcb\x8f\xe8\x51\xa2\xc1\xa6\xe3\x80\x04\xc7\xf6\xef\x07\xec\x23\x96\x70\xf8\xc8\xe0\xef\x4c\x4f\x6a\x70\xa4\xc1\xd1\x2d\xe8\xee\x2c\x3d\x2d\xeb\xaf\xa7\xa9\xc7\x17\x67\x9b\xde\xd6\x92\x5c\x80\x61\x6d\xee\x6c\x72\xba\x36\x0f\xe0\x5d\x9b\x0b\xa3\xf8\xd2\x29\xf9\xe3\x05\x15\x2d\x3b\xc4\x30\xd9\x86\xc7\x9e\xd0\x49\x3e\xba\x3b\x8e\xa9\xa4\x63\xc5\xe4\xa7\x7f\x91\x29\x3e\x6e\xee\x82\x7b\x2c\xce\x0a\x46\x5b\x17\xcf\x5a\xa5\x26\x1f\x68\x76\x2e\x35\x9c\xa8\xf9\xf6\xd9\x6d\x47\x23\x35\x73\x57\x60\xf7\xe3\xf8\xd3\xbf\x4e\xea\xc8\x0d\x92\x9d\x49\x5a\xe7\xa9\x19\x35\x77\x2d\xcd\xf9\x6a\x06\x58\xf3\xed\xf0\x97\xba\xdf\x99\x4b\xc8\x2a\x98\x7d\x77\x0c\x42\x8b\xd4\xc9\x27\x7e\xe9\xc3\x78\x59\xc5\x5b\xcd\x3a\xab\x54\x8c\xd9\x55\x24\x10\x8c\x9a\xff\x05\x04\xd9\xd5\x70\xea\x3f\xd4\xfe\xca\xec\xcf\x0c\x9c\x40\x53\x18\x47\x90\x69\xcc\x65\xb6\x0b\x27\x7a\x60\x74\x3d\x22\xea\xe6\xd7\xe7\xea\x7e\x2e\xcc\xbd\xa0\x65\x80\xf1\xe2\xca\x17\x64\x9b\x11\xad\x45\xe4\x6c\xfd\xee\x70\xa3\xff\xd2\xd1\xfc\xdd\x65\x96\x5d\xc6\xae\x9c\x7f\xbf\xc1\xae\x9c\x7f\xdf\x63\x57\x34\x17\x71\xfe\x57\xe7\x9f\x9c\xff\x2d\x70\x1c\x7f\x75\xfe\x49\x65\x0f\x9c\xff\x71\xc9\x62\xe8\xf3\xde\xc7\xfd\xf3\xef\x40\xda\x8f\x34\xb3\xf0\xfc\xb7\xf7\x6a\x04\x5f\x33\xa6\x8b\x06\x51\x3f\xff\x37\xfa\xb8\x05\x7e\xe0\x93\xe6\xcd\xd2\x9d\xf2\xdf\x3b\xff\x9b\xe7\xbf\x0d\xf0\x7c\xa2\xbb\x80\x11\x34\xb9\x05\xdc\xc2\x2e\x7c\x72\xfe\x77\xcf\x7f\xdd\xf2\x4e\x3f\xca\xdb\x78\x88\x5f\x2f\x58\xad\x7f\x75\xfe\x7d\x7d\x78\xff\xeb\xf8\xfc\x13\x6c\xee\xa9\x86\x4d\xc0\x7b\x15\xce\xe1\x7f\x39\xff\x9e\x66\xd6\x0c\x8f\x60\xa1\xf8\xeb\xf3\xbf\x81\xf3\xfe\xa2\x26\x1a\x3c\x43\x5e\x30\x0f\x57\xa9\xfe\x73\xe5\x1f\xa4\x5a\xce\x96\xb5\x37\x90\x16\x0a\xc9\x7c\x12\x39\xfa\xf4\x2f\x78\xdc\x4e\x25\xef\x8e\x63\x26\x46\xf4\xd3\x3f\x8e\x2f\xa1\x93\xcf\x3c\x3a\xf9\x6c\x1d\x9d\xac\x91\xc9\xd1\xa7\x7f\x9d\xc6\x4d\x3a\xb9\x6c\xa3\x93\x1f\x58\x42\xf9\x01\x3d\xbe\x9c\x52\x02\x14\x86\x4d\xc8\xda\x44\xbd\x86\x6a\x32\x4b\x35\x6b\xa5\x6b\x14\x74\x44\x3f\xfd\xb7\x71\x5a\x2b\x73\x29\x39\xfd\x80\xda\x3f\xc7\x97\x12\xd4\x0f\x0b\x82\xca\x0c\x41\xa5\x69\x41\x4d\x3f\xb8\x90\x9c\x7e\x40\x8f\xff\xbf\x48\x4f\x3f\xbc\x84\x9e\xae\xbf\xfe\xc1\xe0\x3f\x17\x31\x2d\x77\xc2\x19\xd8\x6f\x4a\x74\xe3\x75\x4c\xb8\x50\x6c\xc6\xe4\x50\xa2\x9b\x7d\x4c\xa6\x49\x4a\x95\xfe\x1e\x60\x92\xf0\x0c\x3e\x77\x30\x31\x51\x61\x24\xba\x79\x0d\x93\x05\xcd\xb2\x03\x35\x97\xe9\x72\x36\x1f\x4a\x34\x78\xed\xf3\x6b\xa4\x46\x6f\x52\xc5\x8a\x80\xae\x55\xdf\x18\x12\xef\x29\xe4\x69\xff\x3a\x47\xf0\x46\x4f\xc8\x29\xff\x76\x54\xda\xa1\x1d\x67\xe3\xa8\x8c\x2e\x90\xae\xa5\x5b\x36\x4a\x3f\x9f\x17\x36\x00\xeb\x2d\xa1\xbe\x08\x64\xa2\x63\xa7\xd7\x83\x4e\x7e\x51\x98\xee\xeb\x35\xfa\x42\xf3\x05\xab\xfc\x85\x41\x72\x18\x58\x28\x60\x81\x0f\x91\xed\x7d\xb1\x8d\xaf\xac\xfa\xd2\x37\x6a\x7d\x3b\x10\x1c\x7a\x7b\xb4\x9f\xef\x2f\x77\x6e\xf4\x6f\xc6\xdb\x84\x46\xdb\xef\x97\xbf\xf3\xf2\xf3\xa5\xed\x19\xc9\x20\xb3\x48\xda\xdb\x3a\xbb\x46\x56\xdb\x17\x4f\x1e\x04\x86\xf6\x60\x24\x49\x84\x64\x54\x78\xfc\x20\x02\xc9\x22\xca\x39\x25\x41\x80\x6d\xe1\x14\xb7\x68\xa4\x95\x4a\x23\xe0\x73\x99\x87\x26\xd2\xb9\xde\x4e\x45\x58\xff\x21\x0f\xbd\x5f\xa0\x31\x52\x44\xfa\xc6\x64\x1c\xcd\x8d\x7f\x91\xba\x17\x87\xb9\xe7\xc4\x6e\x82\xf0\xc6\xa2\x11\xe4\xc2\x15\x6a\x68\xc8\xbf\x49\xb3\x39\xcb\x40\xb5\x7f\x29\x0a\xeb\x30\xaa\x80\x4a\x74\x14\x3f\x66\x01\xde\x98\x20\x4c\xa0\x4d\x32\x8d\x04\x32\xea\x66\x02\x2d\x6d\xb4\xe5\x31\x26\x76\x41\xa7\xad\xa3\x2e\xa3\x47\xd6\x62\xc4\x8f\x64\x1c\xd5\x22\xbd\x97\x71\xde\xcb\x71\x97\x7a\x2a\xa0\x59\xd8\x6a\x6b\x91\x15\x8a\x87\x9e\xd2\x25\x3e\x9b\x5a\x8b\x35\xdf\x8c\x7a\xe1\x05\xb8\x09\x13\x9a\x29\x84\x37\x04\x62\x6b\x17\xb2\x16\x51\xba\xd4\x42\x4c\x34\xe8\xe0\xee\x3d\x35\xdf\xde\xd2\x11\x1a\x71\x17\xcb\x3e\xcc\x96\x87\x99\x92\xba\x31\x63\x2b\xcb\xb3\x07\xa9\x7a\x23\xa1\xe2\x08\x62\x2e\xd6\xd7\xfc\x56\xda\x66\xd5\x5d\x94\xe8\x18\x6f\xde\x78\x03\x82\x6b\x82\x8b\x19\xe3\x34\xd4\x6a\xf7\x51\xe3\xea\xf0\xca\x84\xfd\xb1\x62\x8b\x47\x10\x11\x5d\x53\xeb\x1b\x98\xdc\x37\x0c\x4e\x91\xb6\x53\xa6\xdd\xe7\x89\x97\x7e\xf3\x05\xf6\x6c\xdb\x46\x73\x56\xfa\xdb\xa3\xf7\xf7\xb3\x78\x7b\x4d\xd4\xf9\xc2\x9b\x83\x55\xe4\xb2\xb6\x3b\xd2\x37\xaa\x16\x88\xe3\x3c\xe7\xab\x16\xd3\xca\xc2\x3f\x40\x8d\xda\x10\xd9\xa6\xf0\xaa\x40\x81\x51\xa3\x92\x7a\xa1\x49\x1c\xd3\x6c\x61\x26\xf0\x55\x4c\x8e\xd3\xf1\x9c\x0e\xcf\x1e\x5b\x96\xef\x6d\xf6\x94\x25\x8f\x92\xe5\x8c\x0b\x5d\xe0\x35\x4c\xf4\x94\xd7\x52\x5f\xc7\x56\x6e\x40\xb3\x63\xde\x78\xf9\x85\x16\x2f\x83\x67\xb7\xe6\xdb\x09\x6c\x6b\x9d\x92\x53\xe1\x87\x0c\x02\xfe\x6f\x80\xfb\xa5\x31\xcb\xb2\xa8\xf8\xca\xf3\x35\x0a\x45\xa2\x4d\xa1\xe8\x22\xba\x09\x6c\xf4\x35\x1c\x82\x15\xef\x1b\xcb\x6c\x83\xb5\xdb\xbe\x01\xbb\xe7\xd7\x97\xa4\xf0\x73\x61\x4c\x48\x8c\x02\xa9\x07\x92\x82\xc5\x09\xb9\x98\xa6\xc6\x53\x71\xa9\x6f\x6d\xf4\x2d\x45\xf8\xf0\xc1\xc1\xe3\x27\xf7\x1e\x55\x54\x69\xe5\x0a\x93\x34\x94\x54\x1c\x1d\x80\x8d\x4d\xa6\x51\xc9\x37\x3f\x42\xb8\x62\x92\xa7\x01\x31\x8a\x80\x35\x6b\x42\x55\xf7\xc0\x50\x28\xf6\x02\xc0\x2c\x94\x4b\xe1\xdc\xa8\xb6\x68\x7e\x11\x89\x76\xfa\x97\xa9\xaf\xd5\x4f\xba\xeb\xd6\x02\xf3\x55\x6f\x13\x41\x6c\x9a\x0a\x9e\x5b\xbf\x4c\x76\x07\x80\x45\x10\xa9\xc4\x86\xc9\x73\x08\x7f\x72\x50\x24\x20\x08\xed\xee\xec\x70\x35\x73\x10\xfa\xd1\xf5\xa3\xca\xcf\x88\x56\x32\x49\x91\xe9\x95\x2b\xcb\xe8\x7c\x77\xe3\xd1\x05\xdc\x77\x0d\x59\x44\x6b\xc4\x7e\x34\xd0\xf3\xea\x8c\x33\x69\xe8\x22\xea\xc3\x17\x68\x61\x63\xc4\x42\xc5\x55\xc2\x88\xef\x74\xd1\xda\xba\x83\xed\xf1\xea\x2a\x44\xf0\xbf\xf1\x79\xa6\xe1\x84\x65\x63\xc9\x0f\x99\x37\x9d\x0a\x9b\x78\xc2\x70\x13\x6b\x65\x28\x37\x07\x1b\x57\x59\xb7\x6a\xd5\x62\x15\x51\x6d\xcd\x8c\x99\x78\x61\x32\xc2\xc2\xec\x88\x2f\x34\x11\xd6\x7f\x11\xde\x90\xd1\x66\x9f\x28\xe3\xd5\x93\x61\x24\x30\xd1\x10\xac\x6a\x5e\x98\x6c\x07\xb4\xb5\x07\xab\x82\x5f\xeb\x63\xcf\x75\x31\xe4\x2d\xdd\xd4\xdd\x74\x3a\x9f\x0e\x88\x87\x53\xca\x93\x3c\xe7\x18\x56\x32\xda\x1c\x10\x8e\x0c\xba\x61\x64\xa7\x6f\xb5\x8a\x63\xbc\xf1\xff\x06\x00\x00\xff\xff\xc4\x44\x11\x65\xb0\x75\x15\x00") +var _web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x8b\x6f\xa3\x38\xb7\xff\x57\x72\x35\x5a\xed\x8c\x26\x34\xe4\xd5\x34\xa0\xb9\x5a\xf2\x68\x27\x7d\xa4\x4d\xfa\xee\xd5\x5e\xc9\x80\x01\x6f\x00\x33\xc6\x84\xb4\x51\xfe\xf7\x4f\x36\x8f\x40\x70\xd2\xce\x7c\xbb\xfa\x3e\x55\x6d\xca\xf1\xf1\xf1\xf1\xcf\xc7\xe7\x45\x8e\x86\xd8\x84\x57\x88\x10\x4c\xd6\x16\xf6\xa9\x64\x01\x0f\xb9\xaf\x8a\x87\x7d\x1c\x06\xc0\x80\xaa\x03\x91\xed\x50\xa5\x2d\xcb\xc1\x4a\x35\xb0\x8b\x89\xf2\x49\x96\xe5\x4d\x61\xa6\xe4\x22\x1f\x86\xeb\x00\x98\x26\xf2\x6d\xa5\x13\xac\x6a\xa5\xf1\x5a\x40\x60\x3e\x2a\xd7\x3a\xc1\xaa\x34\xdb\x8e\x28\x85\x44\xb2\x90\xeb\x42\x52\x2f\x8e\x84\x06\xc1\xae\xab\x83\x6c\x70\xad\x03\x63\x61\x13\x1c\xf9\xa6\x94\xaa\x62\x59\x96\x40\x58\xb8\xd6\x31\x31\x21\x91\x08\x57\xbe\x19\xac\x6a\x21\x76\x91\x59\xfb\x64\x9a\xa6\x2a\x90\xd2\x63\x3f\x6a\xec\x20\x0a\x25\xbe\x6f\xc5\xc7\x31\x01\x41\x65\x9b\x7e\xe4\xe9\x90\x14\x76\xd3\x66\xbb\xad\x75\x83\x95\xea\x21\x5f\x8a\x91\x49\x1d\xa5\xc5\xb0\xa2\x70\x45\x25\xe0\x22\xdb\x57\xb8\x16\x19\x78\xfd\x7e\xff\xbd\x85\x92\x4d\x78\x80\x2c\x20\x59\xef\xc1\xbc\xc8\x23\x85\x91\x4e\x5d\xb8\xde\xae\x50\x62\x35\x22\x12\x62\x92\x41\xe2\x42\xab\x84\x88\x2c\xcb\x6a\x09\x2d\x1f\xfb\x50\x4d\x36\x52\x3e\x46\x13\x2d\x4b\xa7\x03\x0d\xec\x9b\x80\xbc\x1e\x94\x1f\x22\x77\x09\xc9\xe6\xc8\xf0\x24\x0b\xd0\x54\x97\x9a\x40\xbd\x64\x45\x10\x51\x9c\xaa\xa3\xc8\xff\x83\xbc\x00\x13\x0a\x7c\x5a\x38\x33\xe5\x53\x0f\xf6\x76\xe5\xed\xa8\x96\x50\xc3\xf5\x9b\x84\x7c\x13\xae\x94\x26\xe7\x07\x3e\xf2\x00\x85\x85\x79\xa2\x45\x55\x29\x86\xfa\x02\xd1\x94\x1d\x61\x5f\xd1\x5d\xe4\x2f\x6a\xcd\x23\xf9\x38\xac\x85\x14\x06\xe1\xe7\xe6\x97\x1a\xf2\x2d\xe4\x23\x0a\xd5\x8f\xf2\x55\xcd\x8e\x6d\xe4\x8f\x6c\xb9\x05\x7c\xb5\x08\xf0\x60\x58\xe3\x62\xd6\x5d\xf9\xb7\xaa\xbd\x53\x02\xfc\x30\x00\x04\xfa\x74\xb3\xf9\xe3\xe7\xa7\x30\x18\x28\xd0\xd7\x26\x0a\x03\x17\xbc\x2a\xc8\x67\x46\x2d\xe9\x2e\x36\x16\x89\xc5\x9a\xd0\xc0\x24\xd9\x0e\xf2\x1d\x48\x10\x2d\xd9\x12\x89\xf8\x3d\x14\x9b\x92\x61\x18\x6a\x80\x43\xc4\x67\x03\x3d\xc4\x6e\x44\x21\x5f\x33\x94\x4c\x68\x81\xc8\xa5\x35\xf6\xe4\x40\x60\x16\x2d\xdb\x12\xf0\xfc\x88\x30\xcd\x2d\x5a\xee\xcb\x9c\xc5\x87\x36\xa0\x68\x99\xd3\xcd\x4e\x87\xd3\x93\x45\xb7\xf4\x56\xbf\xb5\xd9\x2e\x54\xe7\xd2\x29\xc1\xbe\x9d\x38\xb9\x38\xf1\x69\x3d\x39\x91\x0a\xbd\x84\x1c\xd2\x57\x17\x2a\x88\x02\x17\x19\x7c\x80\x83\xba\x8b\x4a\xe4\x9b\x90\x30\xd4\x36\xa9\x58\xb4\x80\xd4\x21\x38\xb2\x9d\x0a\x2f\x07\x37\x1d\x14\xec\x71\x01\x5f\x63\x4c\xcc\x4c\xeb\x9e\x7c\x22\x60\x02\x14\x7b\xf9\xbe\x9a\x7d\x01\x47\xea\x93\x52\x9e\xe6\x71\x47\xc0\x63\x42\xeb\x30\xde\x4b\x40\x10\xd0\x5d\x28\xb5\x72\xbe\x2e\x38\xc4\xd7\xce\xf9\x4e\xba\x02\x3e\x03\x7b\x1e\xf4\x69\xc6\x04\xba\xb2\x80\x89\xa1\xe7\xdb\x39\x4f\xb3\xb9\x97\x67\xab\x96\x25\x94\xe4\x41\x0a\xea\x22\x2b\x02\x2e\xb2\xd0\x16\x9d\x6e\x57\xa4\xac\x1e\x21\x97\x22\x3f\x63\x6a\xcb\xa2\x9d\xeb\x04\x18\x0b\x48\xb7\x5e\xb6\x27\x60\xa2\x20\xdf\x4e\xb3\x27\x52\x14\x50\x4a\x90\x1e\x15\x6c\x5b\x36\x44\x57\x84\x94\xbc\x79\x65\x9c\x9b\xe6\x8e\x04\xe4\x2f\x81\x8b\x4c\xc3\x01\x44\x00\x05\xe4\x41\x3e\x99\x42\xa0\x59\x8e\x10\xd8\x63\x57\xc8\xb7\xb3\x9b\xad\x63\x4a\xb1\xa7\xb4\xb2\xbb\xbd\x29\x3b\xd8\x5a\x18\x00\xbf\x28\xc0\x03\xd4\x70\x90\x6f\xef\x60\x24\x5b\xf2\x7b\x33\x7d\xec\xef\x99\x6c\xb5\x5a\x1b\xd1\x1a\x0c\xe2\x42\x38\x20\xb6\x0e\x3e\xb7\xba\xdd\x7a\xb3\x2b\xd7\xe5\xfa\x51\xfb\x4b\x69\x16\x30\x98\x63\x48\xbc\x5c\x3e\xa9\x38\xff\x13\x3c\xb1\x5a\xe5\x2c\x62\x9d\x3b\x31\x02\x5d\xee\x70\x54\xbc\x84\xc4\x72\x71\xac\x38\xc8\x34\xa1\x5f\x8a\x47\xbb\x39\x48\x92\xb6\xac\xf3\x29\xc9\x73\x21\x98\x79\x80\xd8\xc8\xcf\x40\x96\xda\x2c\x5d\x48\x69\x49\x08\x4e\x48\x69\x92\x91\xf1\x71\x5a\x9a\x8e\x35\x65\xf9\x37\x15\x47\x94\xed\x4b\x91\xd5\x8a\xbe\x65\x7d\xd0\x1b\x14\xed\xa9\x14\xf5\x99\xf4\xd4\x8f\x17\x23\xc6\xc7\x12\x35\x27\xcf\xd4\x0e\xe6\x6f\xa5\xc1\x65\x3e\xba\xae\xc4\x0c\x35\x0b\xdc\xc7\x6a\x16\xa9\x58\x56\xb2\xd9\x33\x3f\xd9\x81\xac\x52\x1c\x28\x72\x7e\x54\xd2\x2a\x3b\xac\x9c\xf2\x9a\x9e\xc5\x46\xac\xfc\x3a\x45\x5a\x56\x79\x64\x93\x8b\x13\x77\x45\xad\x44\xa2\x2a\x09\x6b\xa6\x59\x26\x78\x3f\x9e\xeb\x74\xc9\x03\x9c\xa1\x00\xa8\x74\x56\xb2\x73\x96\x81\x16\x0d\x24\x43\xb1\x2d\x10\xb6\x2e\xe7\xa0\xc4\x03\x6e\xc9\xb8\x84\x19\xc2\x12\x12\x8a\x0c\xe0\xa6\x79\x2d\xc5\x81\xc8\x96\x45\x9b\x64\x39\x6e\x00\x0f\x1d\x75\xa7\x78\xa7\xe4\x5a\x29\xf9\x4b\x52\x33\x66\x02\x05\x6a\x96\x38\x45\x21\xcb\x80\xa1\x0b\x8d\x34\x77\x95\x3c\xfc\x26\xa2\x86\x55\xe2\x2e\x41\xa4\x7a\xc1\x6d\x54\xb5\x4f\x80\xcf\xed\x26\xdf\x8c\x48\x10\x74\xa9\x40\x42\x92\x89\x2a\xa9\xab\xde\x23\x21\xa9\xb0\x52\x56\x96\x65\x94\xce\xba\x0c\x39\x2f\xb7\xb2\xbb\x0d\x4c\x14\x85\x4a\x9e\xe1\xa7\x69\xfd\x0e\xd4\x6a\xb1\xf4\x4b\xb3\xbe\x84\xc6\x5c\x47\x4e\x49\x8e\x5a\x91\x4b\xe5\x4b\x40\xa0\xca\x92\x18\x7e\xc2\x99\x21\x71\x93\x49\xb5\xcb\x66\x27\x5e\x3d\x7b\xca\xb6\xd9\xaa\xfa\xae\xad\xaf\x5d\xa2\x10\xe9\x2e\xcc\x4f\x9a\x82\x40\x72\x90\xed\xb8\x4c\x70\x35\xbd\xcd\xf9\xb8\xea\x3c\x51\xf1\xa9\xe4\x22\x1b\xd0\x88\xc0\x30\x39\xf1\x03\x63\x25\xc4\xd9\x76\x38\x92\xdb\xcd\xe9\x04\x82\x85\xc4\x9e\x77\x11\xe0\xe3\x09\x0c\x9c\x29\xc5\xa1\x72\x84\x07\x4d\x29\xbd\xca\x65\x67\x56\xb1\xac\x6a\xe5\x1d\x23\xd3\x86\x54\xe0\xdf\xb7\x18\xe7\x88\xb2\x4a\x67\x27\xf2\x9b\x70\x9d\x07\x12\x81\xd5\xd6\x05\x7e\xa8\x2e\xae\x8a\x05\xbe\xbf\x5e\x8d\x43\xd9\x21\xe9\x78\xc5\x28\xac\x8a\x36\xb0\x4f\xa1\xcf\x49\xaa\x98\x5c\x4e\x04\x20\x08\x23\x02\x05\x10\x26\xe6\xcd\xfd\x57\x6a\x7d\x72\x25\x72\x73\xa3\x42\x2e\xa2\x99\x4f\x17\xd5\xca\x82\x2a\xa6\xaa\x40\xd2\xd7\xc8\x38\x43\x0a\x28\x32\x36\x7b\x2a\xd1\xca\xaa\x02\xbb\x17\xbb\x6b\x0b\x1b\x51\x08\xcd\x3d\x25\x6e\x7d\x87\x6c\x12\x60\x0b\xd6\x4c\x6f\x52\x39\x58\x71\xb7\x07\xcb\xc9\x90\xd9\x67\x3f\x42\x05\xde\x9f\xdb\x33\x3b\x56\xd9\x86\x0c\x82\xc3\xd0\x01\x88\x64\xbe\x2b\x27\x54\xcc\x58\x51\xb8\xdf\x4e\x24\x23\xec\x57\x8c\xec\x7f\x59\xea\xf8\x31\x2e\x21\xeb\x7b\xba\x26\x4a\xbc\xbb\xfe\xc7\x96\xfe\xc9\x55\xff\x13\x5b\x67\x15\x02\x04\x84\xe7\xd4\xeb\x72\x3e\x0b\x54\x51\x82\xcd\x7e\xe5\xfa\x51\xe7\x4b\xd2\x7d\xc1\xc4\x80\x52\x12\x57\xb2\x7e\x58\x9a\x4b\x1e\xb1\x88\xf4\x87\x07\x4d\x04\x6a\x01\x41\x3e\x5d\x1f\x68\x23\xed\xbd\x21\x79\xb7\x82\x7b\x57\xc9\x01\xc6\x42\x01\x16\xe5\xb5\x1c\x77\x0c\xca\xef\xbf\x6f\x76\xcb\x89\xcc\x30\x59\x8c\x5c\x97\xa3\xdc\x2e\xec\x54\x4a\xba\x67\x61\xda\x05\x6a\x1e\xef\xa4\x2e\x9c\x87\x62\xec\x52\x14\x08\x5b\x8f\x66\x96\x99\xec\x69\xa7\x25\xc1\xb7\x53\x6a\x9c\xaa\xe2\x36\xeb\x36\xda\x36\xe5\x80\x56\x9c\x56\xd6\x6f\x64\x05\x59\x97\x95\x06\x99\xf3\xb0\xd0\x0a\x56\xc2\x91\x38\x3c\xe5\xcd\x30\x59\x56\x3d\xb0\x4a\x73\x81\x63\xde\xd8\xc5\x01\x30\x18\xf2\xb2\xca\xe3\x69\x22\x3b\x25\xd6\x8e\x3a\x61\x92\x53\xed\x1b\xcb\xc2\xf3\x9e\x61\xbc\x77\xc4\x0b\xf7\x0c\x89\xcf\x2a\xa9\x61\x77\xed\x3e\x1d\x8b\x01\xf1\xcb\x96\x2c\xe5\x28\xb1\xd0\x5a\x4b\x42\x69\xb1\x0d\x47\x60\x00\x01\x55\x92\x0f\x49\x70\xf8\xdb\x45\x8b\x62\x91\x07\x6c\xa8\x44\xc4\xfd\x6c\x02\x0a\x14\xfe\xd8\x08\x7c\x5b\xd5\x41\x08\x8f\x3b\x75\xf4\x30\xb8\x9e\xc7\xf2\xc5\x99\x8d\x35\x4d\xd3\xa6\xb7\xf7\xce\xf8\xde\x66\xff\xce\xd8\x9f\xd1\x50\x7b\xd6\x34\x6d\x28\xf7\x2f\x7a\x67\x8c\xa0\x3d\x4d\x6f\xe7\xf2\x44\x23\x61\xc7\x38\xe6\x2c\x2f\xe8\x56\x36\xc7\xda\xcd\x89\xd6\x88\x47\x0d\x7c\xd9\xf2\x17\x31\xa3\xbb\xf1\xed\xa9\xfb\xa6\x69\xda\xe5\x38\xd6\xb4\xe1\xea\x6a\xa0\x9d\xff\x30\x12\x21\xa6\x7c\x7b\xdf\x3c\x1d\xf4\xc3\xf3\x51\xdc\x31\xae\x87\x8f\xcd\xc6\xc5\x84\x0b\x33\xc7\x0f\xcf\xe6\x78\xba\xd4\x1f\x9b\xae\xee\xcf\xb4\x59\xfb\xdc\x7d\x7e\x9a\xbb\x2f\xc3\x41\x1b\x3c\xcd\xf1\x64\x6c\x9e\xdf\x3d\x0c\x9e\xec\x59\xe7\x89\x4d\xf8\x3e\x76\xc7\xb3\x87\xd9\xa4\xd9\x9a\xda\xf6\xe4\xb2\x31\xd2\xde\x1a\x67\xa6\xd6\x6d\xac\x16\xcf\x8d\x1f\x37\x17\x57\x23\x2d\xd6\xb4\xd1\xe5\x4b\x6c\x75\xc9\xd2\xfb\x7a\xc9\x75\x1e\x9c\xcf\xef\xbb\x63\xb2\x38\xb7\x6d\xfb\xdb\xb7\x2f\x7b\xc0\x14\x9c\xd2\x7f\x3b\x9c\xa7\xce\xec\x69\xac\x3b\x77\x76\xef\xf9\x97\xe0\xbc\x5a\xe4\x70\x2e\xec\xc9\x64\x79\xde\x9e\x3d\x5d\xfd\xa5\xc5\xe6\x68\xfa\xf5\x1a\x8c\xf5\xd7\x70\xa4\x75\xae\x6e\xb4\x78\x3a\x9a\xc6\x57\xc3\x18\x5d\x7f\xbf\x1c\x9a\xcd\xb7\x27\xb9\x87\x8f\x17\x83\x87\xb3\xd9\x58\xbb\x18\x68\x53\x8a\xf5\x70\x31\xbd\xe2\xda\xdd\xde\x3f\x5c\xcf\x2f\xba\xc3\xe7\xc9\x64\x1f\xd4\xac\xe0\xd8\x7f\x5d\x58\x2d\x70\xe0\xc2\x18\xd0\xa7\x90\xd4\x92\x0f\xc1\x95\xf1\x71\xfa\x5f\x56\xbe\x04\x18\x71\x56\x61\xd9\x98\xd5\x29\xc7\xc1\x4a\xdd\xfa\xda\xdd\x6a\xd2\x43\xa6\xe9\xc2\x77\x7a\x19\xc9\x06\x60\x18\x02\x1b\xee\xdd\x5f\x3a\x9c\x6d\x30\x0b\x4e\x49\xbb\xfa\x24\x58\xa9\xa2\x2d\x53\x1c\xd4\x18\xc7\xa1\xdd\xfe\x34\xd2\x45\x45\xff\x16\x9b\x1f\xf0\xe3\x9f\x0d\x35\x6e\x07\xf8\x72\xd6\xbf\xe3\x57\xd6\x1d\x5c\x3d\x8c\x1f\x7b\x9a\x36\x64\xbf\xab\xf4\xb3\xc7\xb9\xb5\x61\x47\xd3\x86\x5d\x4d\x1b\x35\x1a\x8d\xaf\x8c\x76\x6f\x1a\x6e\xc0\x2f\xad\x3f\xbf\xbd\x73\xaf\x9e\xfc\xeb\xf9\x2d\x8a\x87\x17\xf2\xcb\xc5\x2d\xa3\xdf\xdd\x33\x9b\x9d\x77\x5a\xde\xe3\xcd\xf5\xac\xa7\xcd\x34\x7b\x14\xcd\x2e\x57\x8d\xb7\x13\x23\x7c\x9e\x7b\x37\xf3\xc9\xe9\x24\x9e\x9f\xf9\x38\x9c\x93\x00\x78\xcb\xc5\x05\x92\x4f\xef\x26\xe8\x4a\xbb\x9d\xb7\x1d\xe7\xe2\xf1\xab\xa3\x4d\x8f\x1b\x74\xf2\xe8\x44\xfd\x9b\xd1\x23\xba\x3b\x9b\x8e\x17\x77\x74\x72\x1d\x19\x5a\xf7\xfa\x95\xf4\x8d\xc5\x8d\xad\x3d\x7a\xf2\xd9\xcd\x00\xdb\xc7\xcb\xce\x4f\xd8\x75\x7a\xb0\xef\x9f\xfc\x3f\x88\xf8\x94\x23\xfe\xd4\x88\xe2\xd1\x92\xc4\x23\xf6\xb9\xef\xf7\x98\xf2\x4f\xee\xac\x22\x12\x8f\x5a\x74\x36\xea\x45\xda\xe8\x6b\xc4\xbd\x18\xe7\x71\x3c\x78\x37\xe7\x4f\xdf\xf9\x89\x9c\x9f\x78\xd3\xe6\xf8\xd9\xd0\x3d\x84\x56\xb6\x36\xf4\x7a\x8f\x7a\xc4\xc6\x1f\x16\xe9\xc9\xf8\xed\x9b\xfb\xd9\x0f\x6d\x32\x18\x9c\xde\xdf\x37\x2f\x2f\x8d\x76\xd4\xf8\xcb\xd4\xaf\xcf\xf1\x63\xf3\x46\x3e\x19\x69\xfd\x33\x1d\x9c\x7c\x7d\x7e\x3c\x3f\xb6\xa7\xe7\x78\xfa\x3c\x19\xbc\x69\x5a\xcb\x70\x06\xd4\xe9\x2e\x2e\xbd\xb3\xfe\xf3\x3d\x3e\x93\xa7\xdf\xb5\xfb\xf8\xf4\x29\xbe\xee\x5f\x46\x83\xd9\x65\xd3\x46\xc3\x99\x7e\x62\x0f\xfb\xd7\x04\xb7\x96\x41\x97\xf8\xc6\x70\xf2\x7c\x72\x79\x12\x8d\x57\xdd\x97\xc5\x4f\x9c\x92\x17\xb1\xc4\xc9\x85\x7f\x8f\xaf\x37\xb8\x99\x27\xa7\x30\x7a\xfb\xeb\xc2\x72\xb8\x65\x3f\xb0\x53\xb8\xd7\x52\x3b\x6f\x2c\x7b\xfd\x66\x67\xf1\xfa\x3d\x89\x03\x1c\x49\x6d\x76\xad\x3f\xbf\x30\x19\xc3\xe9\xf9\x7c\x7c\x7a\x0f\xa7\xb8\x89\xf0\xf8\x5c\xd3\xb4\x49\xec\xbd\x35\xbe\xf7\x65\x74\x7a\x7a\x7b\x76\x6e\x9f\x5e\xc1\xb6\x0d\x2e\x5f\x64\x6c\x7e\xed\x37\xb4\xd9\x8b\xac\x8d\x70\xa8\x3f\x13\xc0\xe5\x8d\xdd\xd3\xbb\xc5\x6d\x34\xf3\x86\xc3\x2f\x07\x7d\xa2\xc8\xbd\xf0\xcc\x38\xcb\x41\xaa\x75\x2a\xfb\x7f\x73\x04\x59\x19\x9d\xa5\x9c\x12\xc3\x64\x5d\xec\x7f\x6e\x8b\xda\xac\x8f\x23\xa8\x53\x13\x19\x01\x0e\x58\x0e\x59\x2f\x8b\x5c\x97\xbb\x75\x4d\x96\xfa\xe5\xd9\x1b\x8e\x0c\x47\x32\x80\xeb\xe2\x28\x6b\x99\xfd\x03\x1d\x36\x35\x8d\x14\x12\x5c\x42\x9f\x86\x19\x6d\x5f\x57\xb0\x55\xcc\x8c\x59\x26\x2d\x6a\x55\x95\xf3\xed\x76\x29\x9f\x3d\x90\x9c\x42\x10\x42\x09\x47\xb4\x9e\xa0\x92\x3f\x8b\x72\xe0\xbd\xbc\x55\xf9\x92\x19\xa5\xaf\xff\x8e\x5a\xa1\xba\x87\xbe\xa9\x1c\xcc\x2a\xff\xf2\x40\xa1\xf7\xaf\x1c\x07\xab\x5a\xb3\xf0\xd5\x0b\xcb\xb2\x4a\xef\x1e\xda\xa0\x6d\x74\x7a\xc9\xab\xdb\xd0\x01\x26\x8e\x15\x89\x55\x23\xfc\x8f\x5c\xe3\xb5\x9b\x5c\xe7\x2f\x46\x5a\x5f\x54\x41\xcf\xb7\x48\x42\x3e\xa2\x08\xb8\x3b\x36\x54\xf8\x06\x82\xe8\xab\x13\x96\x95\x2b\xcb\x14\xad\xf1\x2f\x3f\x54\xeb\x22\xc3\x30\x76\xe4\xfe\x1f\x20\x08\x48\x49\x81\xf3\xcd\x02\x6e\x08\xff\x5c\xef\x18\x07\x7f\x31\x9f\x66\x18\xa9\x72\x7b\xec\x95\x73\x8a\xec\x35\x19\xd8\xb5\xd7\x94\x1a\x56\x89\xbb\x84\x1d\xa5\x25\x40\x08\x8e\x77\xae\x55\x42\x5c\x67\x97\x32\xbf\xa5\x55\xb3\x4e\x5b\xa8\xdd\x2d\x44\x5d\xf1\x6b\x97\xd2\xa2\x3b\xab\x41\xcb\x82\x06\x95\xd8\xcd\xa9\x1f\x64\x0c\x9d\x8a\xaa\xef\x8b\x12\x33\x32\x51\xeb\xec\x56\x35\x77\x4f\x72\x25\x05\x2e\x30\xa0\x07\x7d\xfa\xff\xdf\x28\x0e\xfe\xac\x7d\x00\xb5\xfd\xb3\xca\xb0\x96\x5e\x49\x6e\x3b\xd8\xe9\x0b\x07\x06\x25\x4f\xec\x0c\xe0\x1a\x9f\xbb\xf2\x6f\x35\x89\x55\xc8\x5f\xb2\x17\x13\xe9\x9b\x91\x92\xdf\x93\x37\xff\x96\x26\x14\x07\x99\xf5\x27\xd7\xef\xd7\xe0\x10\x88\x13\x5c\x92\x92\x2c\x1e\x44\x7e\x01\xdc\xf2\x3c\xe1\xa6\x18\x86\x39\xb8\x1c\x50\x0e\x2d\x83\x6f\x0f\xb2\x59\xa3\x3a\x7d\x4c\xda\xd7\x07\x91\xfd\x80\x1a\xa4\xd0\xda\xff\x08\xba\x07\x10\x11\x8a\x7c\x0f\xe1\xc4\x42\x7e\x01\xe2\x9d\x89\x7b\x0d\x27\x83\x98\x01\xfb\xae\xf1\xe6\xdd\xff\xa2\x31\x1f\x84\xf8\x23\x6a\xa4\x37\xe9\xe3\x20\x1f\x02\x45\x2c\xf4\x3d\x98\xd9\xa6\x7f\x01\xe4\xd2\xb4\x03\xf6\x93\x81\x9c\xbe\x4d\x7f\xc7\x90\xd3\x17\x2f\x65\xb3\x3e\x88\xf2\xfb\x7a\xf0\xeb\xf4\x71\x84\xf7\xe3\x21\x12\xc8\xd0\xfd\x57\x00\x00\x00\xff\xff\x4c\xb1\x8d\xea\xba\x29\x00\x00") -func web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8JsBytes() ([]byte, error) { +func web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCssBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8Js, - "web_ui/assets/vendor-5b94eb6a11bff93d1247a342ee40dbf8.js", + _web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCss, + "web_ui/assets/vendor-992465b8b230f89d4adce5f016543c4d.css", ) } -func web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8Js() (*asset, error) { - bytes, err := web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8JsBytes() +func web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCss() (*asset, error) { + bytes, err := web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCssBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/vendor-5b94eb6a11bff93d1247a342ee40dbf8.js", size: 1406384, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/vendor-992465b8b230f89d4adce5f016543c4d.css", size: 10682, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\xfb\x72\xe2\xb8\xd2\x7f\x15\xbe\x9a\xda\xda\x9d\x9a\x10\xcc\x2d\x04\xbb\xf6\xab\x15\x97\x64\x20\x84\x04\x12\x92\x90\xff\x64\x5b\xd8\x5a\xdb\x92\x47\x96\x31\x09\x95\x77\x3f\x25\xf9\x12\x0c\x22\x99\x39\xb5\xa7\xce\xa9\xa9\x0c\xd0\x6a\xb5\xba\x7f\xdd\xea\x8b\x4e\xfb\xd4\x46\xd7\x98\x31\xca\xb6\x2b\x4a\x78\x75\x05\x03\xec\xbf\xe8\x01\x25\x34\x0a\xa1\x85\x0c\x17\x61\xc7\xe5\x7a\x53\xd3\xc2\x8d\x61\x51\x9f\x32\xfd\x8b\xa6\x69\x6f\x3b\x3b\xab\x3e\x26\x28\xda\x86\xd0\xb6\x31\x71\xf4\x56\xb8\xa9\x94\xd6\x2b\x21\x43\xc5\xaa\x56\x69\x85\x9b\xd2\x6e\x27\xe6\x1c\xb1\xea\x0a\xfb\x3e\x62\x27\xbb\x2b\x91\xc5\xa8\xef\x9b\x30\x5f\xdc\x9a\xd0\xf2\x1c\x46\x63\x62\x57\x33\x55\x56\xab\x95\x42\x58\xb4\x35\x29\xb3\x11\xab\x32\xa9\x7c\x3d\xdc\x54\x22\xea\x63\xbb\xf2\xc5\xb6\x6d\x43\x21\xa5\x23\xfe\x19\x89\x8b\x39\xaa\x4a\xbb\x75\x42\x13\x06\xc3\x03\x33\x49\x1c\x98\x88\xed\x58\xd3\x14\xd6\x56\xda\xe1\xc6\x08\x30\xa9\x26\xd8\xe6\xae\xde\x10\x58\x71\xb4\xe1\x55\xe8\x63\x87\xe8\x52\x8b\x1c\xbc\x6e\xb7\xfb\xd9\x41\xa9\x11\x01\x64\x1e\x62\xdb\x23\x98\xef\xf2\x54\xa3\xd8\xe4\x3e\xda\xbe\x9f\x50\x62\xb5\x62\x16\x51\x96\x43\xe2\xa3\x55\x09\x11\x4d\xd3\x8c\x12\x5a\x84\x12\x64\xa4\x86\x94\xdd\x68\xe3\x75\xc9\x3b\xc8\xa2\xc4\x86\xec\xe5\x43\xf9\x11\xf6\xd7\x88\xbd\x9d\x5a\x41\x75\x05\x79\xa6\x4b\x45\xa1\x5e\x7a\x22\x8c\x39\xcd\xd4\xd1\xb5\xff\xc3\x41\x48\x19\x87\x84\xef\xf8\x4c\xff\xd2\x41\x9d\x7d\x79\x7b\xaa\xa5\xd4\x68\xfb\x5a\xc5\xc4\x46\x1b\xbd\x2e\xf9\x21\xc1\x01\xe4\x68\x67\x9f\xea\x50\xa3\x9a\x20\xd3\xc3\x3c\x63\xc7\x94\xe8\xa6\x8f\x89\x57\xa9\x9f\x6a\x67\x51\x25\xe2\x28\x8c\xfe\xa8\x7f\xad\x60\xb2\xc2\x04\x73\x64\xfc\x2c\xdf\x61\xd8\x09\x43\xfe\xca\x8f\xf3\xd0\xcb\x8a\xc1\x00\x45\x15\x29\x66\xdb\xd6\x7e\x3b\x8c\x77\xce\x20\x89\x42\xc8\x10\xe1\x6f\x6f\x7f\xfd\xfa\x16\x01\x03\x87\xe6\xd6\xc6\x51\xe8\xc3\x17\x1d\x13\x11\xd4\x55\xd3\xa7\x96\x97\x46\xac\x8d\x2c\xca\x52\x73\x30\x71\x11\xc3\xbc\x14\x4b\x2c\x96\xf7\x50\x1d\x4a\x96\x65\x19\x21\x8d\xb0\xdc\x0d\xcd\x88\xfa\x31\x47\xf2\xcc\xa8\x6a\xa3\x15\x8c\x7d\x5e\x11\xbf\x5c\x04\xed\xdd\xc8\x5e\x29\x78\x7e\xc4\x94\x17\x11\xad\x75\x35\xc9\x42\x90\x03\x39\x5e\x17\x74\xbb\xd5\x92\xf4\xf4\xd0\x77\x7a\xa3\xdb\x78\x7b\x3f\xe8\x44\x4a\xe7\x8c\x12\x27\x4d\x72\x49\x9a\xd3\x3a\x5a\x2a\x15\x05\x29\x39\xe2\x2f\x3e\xd2\x31\x87\x3e\xb6\xe4\x82\x04\x75\x1f\x95\x98\xd8\x88\x09\xd4\xde\x32\xb1\xd8\x43\xdc\x65\x34\x76\xdc\x03\x5e\x09\x6e\xb6\xa8\xb0\xd1\x43\x2f\x09\x65\x76\xae\x75\x47\x3b\x57\x30\x41\x4e\x83\xc2\xae\x7a\x57\xc1\x91\xe5\xa4\x8c\xa7\x7e\xd6\x52\xf0\xd8\x68\xf5\x31\xde\x6b\xc8\x30\x34\x7d\x54\x6d\x14\x7c\x6d\xf8\x11\x5f\xb3\xe0\x3b\x6f\x2b\xf8\x2c\x1a\x04\x88\xf0\x9c\x09\xb6\x35\x05\x93\x40\x8f\x38\x05\x4f\xbd\x7e\x94\xe7\x5d\xad\x95\x52\x52\x80\x38\x3c\x51\x45\x11\xf4\xf1\x0a\xbf\xa3\xd3\x6e\xab\x94\x35\x63\xec\x73\x4c\x72\xa6\xa6\xa6\xb2\xdc\x64\xd0\xf2\x10\x7f\xcf\xb2\x1d\x05\x13\x87\x85\x39\xf5\x8e\x4a\x51\xc8\x39\xc3\x66\xbc\x13\xdb\x9a\xa5\xba\x22\xac\x94\xcd\x0f\xd6\x65\x68\xee\x49\xc0\x64\x0d\x7d\x6c\x5b\x2e\x64\x0a\x28\x90\x2c\xf2\xe9\x16\x86\xec\x72\x85\xa0\x81\xb8\x42\xc4\xc9\x6f\xb6\x49\x39\xa7\x81\xde\xc8\xef\xf6\x5b\x39\xc1\x56\xa2\x10\x92\x5d\x01\x01\xe4\x96\x8b\x89\xb3\x87\x91\xb6\xd2\x3e\xdb\x49\x28\x39\xb2\x79\xd5\x68\xbc\xa9\xce\x10\x10\xef\x94\x03\xe6\x98\xf0\x8f\x46\xbb\x7d\x52\x6f\x6b\x27\xda\xc9\x69\xf3\x6b\x69\x17\xb4\x44\x62\x48\xb3\x5c\xb1\x69\x77\xff\x17\x74\xbe\x6a\x94\xbb\x88\x6d\x91\xc4\x18\xf2\x65\xc2\x31\xe8\x1a\xb1\x95\x4f\x13\xdd\xc5\xb6\x8d\x48\xa9\x1e\xed\xf7\x20\x69\xdb\xb2\x2d\xb6\xa4\xbf\x77\x8a\x59\x00\x99\x83\x49\x0e\x72\xb5\x29\xda\x85\x8c\x96\x96\xe0\x94\x94\x35\x19\x39\x9f\xa4\x65\xed\x58\x5d\xd3\x7e\x33\x68\xcc\x85\x5d\xba\x66\x1c\xe8\x5b\xd6\x07\xbf\x22\x95\x4d\xa5\xaa\x2f\xa4\x67\x79\x7c\xb7\x62\xfc\x5c\xa3\xe6\x16\x9d\xda\x87\xfd\x5b\x69\x71\x5d\xac\x6e\x0f\x6a\x86\x91\x17\xee\x33\x23\xaf\x54\xa2\x2b\x79\x3b\xb2\x3f\xb5\x40\x33\x38\x0d\x75\xad\x70\x55\x75\x93\x3b\xab\xa0\xbc\x64\xbe\x78\x53\x2b\xbf\xcd\x90\xd6\x0c\x59\xd9\xb4\xdd\x8d\xfb\xa2\x36\x2a\x51\x07\x0d\x6b\xae\x59\x2e\xf8\x38\x9e\xdb\xec\xc8\x0f\x38\x23\x05\x50\xd9\xae\xd4\x72\xd1\x81\xee\x06\x48\x8e\x62\x53\x21\x6c\x5b\xee\x41\x59\x00\xfd\x52\x70\x29\x3b\x84\x35\x62\x1c\x5b\xd0\xcf\xfa\x5a\x4e\x43\x55\x2c\xab\x8c\x14\x3d\x6e\x88\x3e\x72\x75\x6b\xf7\x4e\x69\x95\x52\xf3\x97\xb6\x66\x22\x04\x76\xa8\x79\xe3\x14\x47\xa2\x03\x46\x3e\xb2\xb2\xde\xb5\x1a\xd0\x57\x15\x35\x3a\x24\xee\x13\x54\xaa\xef\xa4\x8d\x43\xed\x53\xe0\x8b\xb8\x29\x8c\x51\x09\x42\x3e\x57\x48\x48\x3b\x51\x3d\x4b\xd5\x47\x24\xa4\x13\x56\xc6\x2a\xba\x8c\x92\xaf\xcb\x90\xcb\x71\x2b\xbf\xdb\xd0\xc6\x71\xa4\x17\x1d\x7e\xd6\xd6\xef\x41\x6d\xec\x8e\x7e\x59\xd7\x97\xd2\x44\xea\x28\x28\xa9\xab\x75\xad\x34\xbe\x84\x0c\x19\xa2\x89\x91\x1e\xce\x03\x49\x86\x4c\xa6\x5d\xbe\x3b\xcd\xea\xf9\xaf\xdc\xcc\xc6\x61\xee\x7a\xcf\xb5\x6b\x1c\x61\xd3\x47\x85\xa7\x39\x0c\xab\x2e\x76\x5c\x5f\x08\x3e\x6c\x6f\x0b\x3e\xa9\xba\x6c\x54\x08\xaf\xfa\xd8\x81\x3c\x66\x28\x4a\x3d\xfe\xc1\x5a\x09\x71\x61\x8e\x44\xf2\xdd\x38\x93\x21\xe8\x55\xc5\xef\x7d\x04\xe4\x7a\x0a\x83\x64\xca\x70\x38\x70\xe1\x87\xa1\x94\x5d\xe5\x72\x32\x3b\x88\xac\xc3\xc9\x3b\xc1\xb6\x83\xb8\x22\xbf\xbf\x63\x5c\x20\x2a\x26\x9d\xbd\xca\x6f\xa3\x6d\x51\x48\x14\x51\x7b\xa2\xc8\x43\x27\xea\xa9\x58\x91\xfb\x4f\x0e\xeb\x50\xee\x24\x93\x6e\x04\x45\x4c\xd1\x16\x25\x1c\x11\x49\x32\xd4\xe4\x72\x23\x80\x60\x14\x33\xa4\x80\x30\x0d\x6f\x99\xbf\xb2\xe8\xd3\x0e\x2a\xb7\x0c\x2a\xec\x63\x9e\xe7\x74\xd5\xac\xac\x98\x62\x0e\x15\x48\xdf\x35\x72\xce\x88\x43\x8e\xad\xb7\x23\x93\xe8\xc1\xa9\x8a\xb8\x57\xa7\xeb\x15\xb5\xe2\x08\xd9\x47\x46\xdc\x93\x3d\xb2\xcd\xa0\xa3\x38\x33\xbb\x49\xe5\x62\x25\xd3\x1e\x2a\x37\x43\x76\x57\xfc\x53\x2a\xf0\xf9\xde\x8e\xdd\x5a\x95\x63\xc8\x62\x34\x8a\x5c\x88\x59\x9e\xbb\x0a\xc2\x41\x18\xeb\xba\xcc\xdb\xa9\x64\x4c\xc9\x41\x90\xfd\xbf\x68\x1d\x7f\x8e\x4b\xc9\xfa\x99\xae\xa9\x12\x9f\x9e\xff\x73\x47\xff\xe2\xa9\xff\x0d\xd3\xc5\x84\x80\x20\x93\x3d\xf5\xb6\xdc\xcf\x42\x43\xd5\x60\x8b\x3f\xed\xe4\xb4\xf5\x35\x7d\x7d\xa1\xcc\x42\xd5\xb4\xae\xe4\xef\x61\x59\x2f\x79\x2a\x2a\xd2\x5f\x01\xb2\x31\xac\x84\x0c\x13\xbe\xfd\xe0\x19\xe9\xe8\x0d\x29\x5e\x2b\x64\x76\xad\xba\xd0\xf2\x74\xb8\xe2\x72\x96\x93\x89\x41\xff\xfd\xf7\xb7\xfd\x71\x22\x0f\x4c\x51\x23\xb7\xe5\x2a\xb7\x0f\x3b\xaf\xa6\xaf\x67\x51\xf6\x0a\x54\x3f\xdb\x6b\x5d\x24\x0f\xa7\xd4\xe7\x38\x54\x3e\x3d\xda\x79\x67\x72\xe4\x39\x2d\x2d\xbe\xad\xd2\xc3\xa9\xa1\x7e\x66\x7d\xaf\xb6\x75\x2d\xe4\x07\x49\x2b\x7f\x6f\x14\x03\x59\x5b\x8c\x06\x79\xf2\x58\xe1\x0d\x3a\x28\x47\xea\xf2\x54\x3c\x86\x69\x9a\x11\xc0\x4d\xd6\x0b\x9c\xc9\x87\x5d\x1a\x42\x4b\x20\xaf\x19\xb2\x9e\xa6\xb2\x33\x62\xe5\xb4\x15\xa5\x3d\xd5\xb1\xb5\xbc\x3c\x1f\x59\xa6\x47\x57\x82\xe8\xc8\x92\xda\x57\xe9\x0c\xbb\x1f\xf7\xd9\x5a\x02\x19\x29\x47\x72\xb5\x40\x49\x94\xd6\x4a\x5a\x4a\x77\x9f\xe1\x18\x0a\x11\xe4\x7a\xfa\x51\x55\x38\xff\xfd\xd0\x5d\xb1\x38\x80\x0e\xd2\x63\xe6\xff\x61\x43\x0e\x75\xf9\xb3\x16\x12\xc7\x30\x61\x84\xce\x5a\x27\xf8\xa1\x77\x33\x4f\xb4\xab\x4b\x87\x02\x00\xc0\xf4\x6e\xe1\x0e\x17\x8e\xf8\x3a\x13\xff\x0d\xfa\x60\x09\x00\xe8\x6b\xdd\xab\xce\xa5\x20\x80\xa7\xe9\xdd\x5c\x1b\x01\x16\xb5\xac\x33\xc9\xf2\x8c\xef\x34\x7b\x08\x6e\xcf\x41\x2d\x19\xd4\xe8\xa4\x41\xbc\x44\xd0\xfd\xe4\xee\xc2\x7f\x05\x00\x4c\x86\x09\x00\xfd\xcd\x75\x0f\x8c\x7f\x58\xa9\x10\x5b\xbb\x5b\xd4\x2f\x7a\xdd\x68\x3c\x48\x5a\xd6\x4d\xff\xb1\x5e\xbb\x1a\x49\x61\xf6\xf0\x61\x69\x0f\xa7\x6b\xf3\xb1\xee\x9b\x64\x06\x66\xcd\xb1\xbf\x7c\x9a\xfb\xcf\xfd\x5e\x13\x3e\xcd\xe9\x68\x68\x8f\xef\x1f\x7a\x4f\xce\xac\xf5\x24\x36\x7c\x1f\xfa\xc3\xd9\xc3\x6c\x54\x6f\x4c\x1d\x67\x34\xa9\x0d\xc0\x6b\xed\xd2\x06\xed\xda\xc6\x5b\xd6\x7e\xdc\x5e\x5d\x0f\x40\x02\xc0\x60\xf2\x9c\xac\xda\x6c\x1d\x7c\x9b\x48\x9d\x7b\xe3\xf9\xa2\x3d\x64\xde\xd8\x71\x9c\x3f\xff\xfc\x7a\x04\x4c\x85\x97\xfe\xd7\xe1\xbc\x70\x67\x4f\x43\xd3\xbd\x77\x3a\xcb\x7f\x0b\xce\x6b\xaf\x80\xd3\x73\x46\xa3\xf5\xb8\x39\x7b\xba\xfe\x1b\x24\xf6\x60\xfa\xed\x06\x0e\xcd\x97\x68\x00\x5a\xd7\xb7\x20\x99\x0e\xa6\xc9\x75\x3f\xc1\x37\xdf\x27\x7d\xbb\xfe\xfa\xa4\x75\xe8\x99\xd7\x7b\xb8\x9c\x0d\xc1\x55\x0f\x4c\x39\x35\x23\x6f\x7a\x2d\xb5\xbb\x5b\x3c\xdc\xcc\xaf\xda\xfd\xe5\x68\x74\x0c\x6a\x31\x70\x1c\xbf\x2e\x62\x16\xf8\xe0\xc2\x58\x88\x70\xc4\x2a\xe9\x87\xe2\xca\x10\x9a\x7d\xcb\xc7\x97\x90\x62\xc9\xaa\x1c\x1b\xf3\x39\xe5\x2c\xdc\x18\xef\xb9\x76\x7f\x9a\x0c\xb0\x6d\xfb\xe8\x93\xb7\x8c\xd4\x00\x14\x45\xd0\x41\x47\xed\xcb\x96\x73\x03\xf3\xe2\x94\x3e\x57\x9f\x87\x1b\x43\x65\x32\xa7\x61\x45\x70\x7c\x64\xed\x2f\x23\xbd\xab\xe8\x3f\x12\xf3\x3d\xe9\xfe\x59\x1f\xc8\x38\xa0\x93\x59\xf7\x5e\x5e\x59\xbf\x77\xfd\x30\x7c\xec\x00\xd0\x17\x7f\x9b\xec\xb3\x23\xb9\x41\xbf\x05\x40\xbf\x0d\xc0\xa0\x56\xab\x7d\x13\xb4\x85\x6d\xf9\xa1\xbc\xb4\x64\x7e\x77\xef\x5f\x3f\x91\x9b\xf9\x1d\x4e\xfa\x57\xda\xf3\xd5\x9d\xa0\xdf\x2f\x44\xcc\xce\x5b\x8d\xe0\xf1\xf6\x66\xd6\x01\x33\xe0\x0c\xe2\xd9\x64\x53\x7b\x3d\xb7\xa2\xe5\x3c\xb8\x9d\x8f\x2e\x46\xc9\xfc\x92\xd0\x68\xce\x42\x18\xac\xbd\x2b\xac\x5d\xdc\x8f\xf0\x35\xb8\x9b\x37\x5d\xf7\xea\xf1\x9b\x0b\xa6\x67\x35\x3e\x7a\x74\xe3\xee\xed\xe0\x11\xdf\x5f\x4e\x87\xde\x3d\x1f\xdd\xc4\x16\x68\xdf\xbc\xb0\xae\xe5\xdd\x3a\xe0\x31\xd0\x2e\x6f\x7b\xd4\x39\x5b\xb7\x7e\x21\xae\x33\xc7\x7e\xee\xf9\xff\x20\xe2\x53\x89\xf8\x53\x2d\x4e\x06\x6b\x96\x0c\xc4\xe7\xb1\xbf\x33\x2e\x3f\x65\xb2\x8a\x59\x32\x68\xf0\xd9\xa0\x13\x83\xc1\xb7\x58\x66\x31\xc9\xe3\x06\xe8\x7e\x2e\x7f\x7d\x97\x1e\x19\x9f\x07\xd3\xfa\x70\x69\x99\x01\xc6\x1b\x07\xf4\x83\xce\xa3\x19\x8b\xf5\x07\x2f\xf3\x0c\x69\xde\x2e\x66\x3f\xc0\xa8\xd7\xbb\x58\x2c\xea\x93\x89\xd5\x8c\x6b\x7f\xdb\xe6\xcd\x98\x3e\xd6\x6f\xb5\xf3\x01\xe8\x5e\x9a\xf0\xfc\xdb\xf2\x71\x7c\xe6\x4c\xc7\x74\xba\x1c\xf5\x5e\x01\x68\x58\x6e\x8f\xbb\x6d\x6f\x12\x5c\x76\x97\x0b\x7a\xa9\x4d\xbf\x83\x45\x72\xf1\x94\xdc\x74\x27\x71\x6f\x36\xa9\x3b\xb8\x3f\x33\xcf\x9d\x7e\xf7\x86\xd1\xc6\x3a\x6c\x33\x62\xf5\x47\xcb\xf3\xc9\x79\x3c\xdc\xb4\x9f\xbd\x5f\xf0\x52\x10\x8b\xc6\xc9\x47\xff\x4c\xae\xb7\x64\x98\xa7\x5e\x18\xbc\xfe\x7d\xb5\x72\x65\x64\x3f\x08\x2f\x2c\x40\x16\xe7\xb5\x75\xa7\x5b\x6f\x79\x2f\xdf\xd3\x3a\x20\x91\x04\xb3\x1b\x73\xf9\x2c\x64\xf4\xa7\xe3\xf9\xf0\x62\x81\xa6\xb4\x8e\xe9\x70\x0c\x00\x18\x25\xc1\x6b\xed\x7b\x57\xc3\x17\x17\x77\x97\x63\xe7\xe2\x1a\x35\x1d\x38\x79\xd6\xa8\xfd\xad\x5b\x03\xb3\x67\x0d\x0c\x68\x64\x2e\x19\x94\xf2\x86\xfe\xc5\xbd\x77\x17\xcf\x82\x7e\xff\xeb\x87\x39\x51\x95\x5e\x64\x67\x9c\xf7\x20\x87\x73\xaa\xf8\xfe\xf6\xaf\x00\x00\x00\xff\xff\xbc\x9b\xbb\xfd\x8e\x1f\x00\x00") +var _web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\xfd\xd9\x76\xdb\x48\x97\x28\x08\xdf\xeb\x29\x48\x9c\xfa\xf1\x45\x98\x5b\x30\x22\x38\x80\x0c\x29\xc4\xe3\xb4\xe5\x2c\xd7\x97\x69\xbb\x64\x67\x66\x65\xf1\xe3\x61\x41\x64\x90\x42\x9a\x02\x98\x00\x48\x59\x49\xb2\x56\x9e\xbf\xfb\xf4\xb8\x56\x3f\x40\xdf\xf4\xb9\xed\xab\x7e\x87\x7a\x93\x93\xfd\x22\xbd\x62\xc0\x44\x82\xb2\x2b\xbb\x75\x21\x02\x81\x98\x87\x3d\xef\x1d\x0f\x41\x38\x8b\x1e\x9c\xeb\xfb\x5b\x11\x5f\xbf\xfd\x91\xcf\xd7\xe1\x34\x0d\xa2\x10\x09\x48\xf1\x76\x1e\xc5\x68\xe3\xc7\x8d\xb8\x11\x84\x8d\x14\x8b\x51\x3c\xe6\xe9\x28\x1e\x9f\xc5\x22\x5d\xc7\x61\x43\xec\xd1\x41\x05\xbb\xdd\x76\x0f\xdb\xd7\xd7\x2f\x3e\xfe\x70\x73\xfd\x81\x6d\xf7\x70\xfd\x4f\x1f\xaf\xdf\xbe\x9a\xbc\xbf\x79\xf7\xf1\xdd\xc7\x9f\xdf\xcb\xc4\x57\x7e\x2a\x58\x93\xec\x61\xf2\xe2\xfd\xfb\xef\xde\xbc\x7c\xf1\xf1\xcd\xbb\xb7\x93\x8f\xd7\xdf\xbf\xff\xee\xc5\xc7\xeb\xc9\x4f\x37\x2f\xde\xbf\xbf\xbe\x61\x4d\x02\x93\x57\xd7\xaf\x5f\xfc\xf0\xdd\xc7\xc9\x8b\x0f\x3f\xbf\x7d\x39\x79\xf7\xcd\x87\xeb\x9b\x1f\xaf\x6f\x3e\xb0\xa6\x0b\x93\x7f\xf8\xc7\x1f\xae\x6f\x7e\x9e\xbc\x79\xfb\xf1\xfa\xdb\x1b\x55\x87\x2a\x92\xd7\xf3\xee\xed\x77\x3f\x4f\xbe\xfd\xee\xcd\xf7\xdf\x5f\xdf\x4c\x5e\xbe\xfb\xfe\xfd\xbb\xb7\xd7\x6f\x3f\xca\xb2\x7b\x7c\x26\x87\xb5\x8c\xfc\x99\x88\x61\x26\xe6\x41\x28\x20\x16\xbf\xae\x83\x58\x7c\x1f\xcd\xd6\xcb\xfc\x2d\xfb\xfd\x25\x81\x78\x1d\x86\x41\xb8\xf8\x28\x92\x34\xe1\x4d\x72\x81\x8a\xb9\xc2\x5b\x6b\x9d\x88\x46\x92\xc6\xc1\x34\xb5\xce\xb2\x0f\x8d\x14\xe1\xad\x6c\x48\xf0\x77\xb7\xbf\x88\x69\xea\x4c\x63\xe1\xa7\x02\x85\xeb\xe5\x12\xe7\x93\xe8\x4c\x26\x7c\x13\x05\xb3\x86\x0b\x33\xb1\x14\xa9\x50\x49\x20\xf6\x6a\xea\xf9\x56\x77\x93\x55\x7a\xcb\xea\x3a\xcd\x6a\x87\xc0\x8e\x86\xc2\xf2\xa7\xfd\x59\xfe\xc8\xcd\x13\xaf\x54\xc2\xcb\x83\xcc\xb6\x43\xca\x47\x63\x88\xf9\x14\x09\xb0\x90\xc9\x8e\x2d\x48\x31\x84\x3c\x75\x96\x22\x5c\xa4\x77\xe7\xe4\x22\xbc\xe2\xee\x45\x78\x7e\x8e\xd3\x51\x38\x76\xc4\xe7\x55\x14\xa7\x09\xca\xc7\x1d\x3b\xf7\xaa\x89\xec\xcb\x1e\xf4\x08\xf9\x36\x8c\x5e\x46\xe1\x7c\x19\x4c\x53\x96\x37\x9f\xea\x99\x0c\x21\x38\x93\xdd\x08\xf5\x8e\x4c\x9d\x3b\x3f\x79\xf7\x10\xbe\x8f\xa3\x95\x88\xd3\x47\x14\x62\xdb\x8e\xeb\x12\x51\xc0\x65\x37\x40\x8c\x82\x31\x17\xfa\x29\x1c\xf3\x78\x14\x8e\xf1\x1e\xee\xfd\x4f\xe2\x95\x98\xfb\xeb\x65\x7a\xad\x7a\x23\x37\x89\xda\x23\x21\x4f\x11\x86\x80\x23\xf9\xe3\xe2\x62\x6d\x23\x39\x23\xe9\x5d\x1c\x3d\x34\x42\xf1\xd0\xb8\x8e\xe3\x28\x46\x96\x1f\x36\xd6\x61\xb2\x5e\xc9\x3a\xc4\xac\xa1\x47\xd8\x78\xf0\x93\x86\x5e\xb0\x19\x34\xc4\xe7\x95\x98\xca\x8f\xff\xa2\x93\x50\x30\x83\xc6\x4c\xac\x12\x30\xd9\xf1\xbf\x34\x82\x30\x49\x85\x3f\x6b\x2c\xa2\x94\x35\xfe\xc5\x6a\x89\x96\xf5\x2f\x0d\x3f\x5e\xac\xef\x45\x98\x26\x8d\x34\x32\xd5\xfd\x8b\x85\xd5\x2e\xf1\xf9\xc8\x32\x0b\x61\x81\x65\x26\xd4\x02\x4b\x57\x68\x8d\x8b\x6e\x27\xf2\x64\x43\x0c\xa1\xec\x7c\x90\x38\xeb\x75\x30\xe3\x41\xab\x05\xea\x2d\x98\x71\xa1\x9f\x64\x87\x78\x33\x5b\x4d\x39\xa9\xfa\x69\xe8\xb3\x54\xe7\xd0\x75\xf3\xad\x69\x8d\x6d\xf7\x7b\xfd\x61\xea\x2f\x97\xb7\xfe\xf4\x13\x8f\xf5\xfb\x9d\x9f\xe8\x49\x4d\x5e\x24\xaf\xc4\x8a\x37\x89\x69\x2c\x79\xb1\x0c\xfc\x84\x87\xfa\x35\x16\xc1\x3c\x10\x33\x2e\x67\xf3\x45\x1c\xfb\x8f\x28\x6b\x1d\xeb\x0c\x49\xea\xa7\x82\x5b\xa1\x78\xb0\xf6\xf9\x78\xd6\x08\x6f\x8b\xb7\xa5\x5e\x14\x33\x92\x22\x7d\xaa\x47\x5d\x6c\xe1\x80\x87\x23\x31\xde\xed\xc2\x91\x68\x59\xcf\x83\x70\x26\x3e\x5b\xe3\x8b\xc0\xb6\x83\xac\x5b\x17\x58\xe6\x09\x9c\x60\xa6\xb2\xc9\x87\x22\x67\xb6\x87\x83\xdd\xae\x0a\x31\x8f\x36\xc4\xcb\x68\xbd\x9c\x35\xc2\x28\x6d\xcc\x83\x30\xdf\x10\xd9\x92\x06\xf7\x66\xa3\xcc\xe3\xe8\x5e\xa6\xa6\x2d\x4b\xae\xa9\xaa\x0c\x62\xdb\xb6\x56\x22\x9c\x05\xe1\xc2\x6a\x72\x1e\xe8\x19\xb0\x6d\x6b\x1e\x84\xfe\x32\xf8\x4d\xcc\x2a\xc9\x28\x70\x64\x1b\xaf\xc4\x2a\x41\x31\x86\xd8\x59\xad\x93\x3b\x14\x60\x0c\x41\x31\x13\x73\xdd\xcf\x60\x8e\x2c\x47\x96\x16\xce\xf4\xce\x8f\x5f\xa4\xc8\xc5\x38\x03\x48\x67\x39\xdc\xe7\xc2\x49\x56\xcb\x20\x45\xd6\x73\x4b\x9f\xee\xe2\xd5\x49\x96\xc1\x54\x20\x17\xce\x89\x3c\x20\x2e\x44\x3c\xdb\x24\x17\xc1\x65\x74\x11\xb4\x5a\xfa\xcc\xfa\x3c\x1e\x05\xe3\x33\xd5\xa4\x63\x71\xce\x7d\xd5\xbe\xcb\x39\x0f\xb3\x15\x3e\x9e\x37\x3f\x94\x93\xe6\x4f\xa7\x22\x49\x1a\x2b\x3f\x16\x61\x9a\xcd\x5e\x34\x6f\xc4\x51\x94\x5a\xf8\x2c\x74\x56\xd1\x0a\xe1\xbd\x58\x26\xc2\x8c\x49\xd5\x3f\x8d\xc2\x34\x08\xd7\x42\x66\x90\x93\xe0\xe3\xfd\xde\x8c\x2e\x74\x7e\x89\x82\x50\x8d\xa0\x98\x95\x99\xdc\x37\x3a\x43\x13\x35\xe5\xd6\xb0\xed\x66\x65\x6f\xe0\x7d\xe2\xac\xe2\x28\x8d\xd2\xc7\x95\x70\x8e\xe0\x45\x01\x27\x33\x88\x5f\x3a\x23\x19\x84\x3b\x93\x70\x9f\x73\x2e\x76\x3b\x2b\x52\x08\xc1\x6a\x72\x59\x5f\x34\x6f\xa8\x65\x35\x75\x94\x52\x77\x3b\x8d\x19\xd4\x4a\xcd\x74\x8b\xbb\x5d\xd3\xa0\x93\x20\xb9\xfe\x9c\x8a\x30\x09\x6e\x97\x02\x09\xbc\xdb\xa1\x3c\x13\x17\x78\x0f\xe5\x2e\x9b\x3e\x94\x3b\x2a\x27\xac\xd8\x4a\x9c\xf3\xe2\x98\xed\x76\x96\x3c\x8f\x8f\x72\xeb\x55\x3e\x64\x9b\xa4\x6e\x78\x1a\x7e\x3b\x0f\xb1\xbf\xd2\xd8\x23\xb1\x6d\x54\x05\x09\xc7\x59\x90\x39\xae\x55\xd8\x81\x71\x01\x14\x1e\x91\x46\xd7\x66\x4e\xb3\x2c\x8e\xbf\x5a\x2d\x1f\x55\xf1\x0a\x00\xc9\x11\x4c\x39\xd1\xec\x33\xee\x56\x40\x49\x31\xf8\x5a\x48\x65\xdb\x7a\xf2\xf5\x92\xa1\x9a\x21\x73\x81\x0d\xd6\x3a\xde\x12\xb6\xad\x0b\x1c\xa6\x23\x0c\x35\x35\x55\x17\x6b\x1d\x26\x42\x94\x97\xea\x10\x00\x9e\x04\xc1\xd5\x7a\xd4\xf4\x1d\x2e\xb9\x99\x12\x79\xfa\x4b\xeb\x5a\x69\x22\x5f\xfb\xb3\x34\x7e\xdc\x56\xc0\xb3\x7a\x99\x98\x75\x81\xc3\x42\xb2\xde\xbd\x9a\xd6\xe5\xe3\xf6\xc4\x16\xca\x36\x85\x29\x26\xe4\x81\x17\x33\x0b\x1f\x76\x7e\x72\xd4\xfb\x0c\x2e\x99\x9d\x90\xad\xad\x06\x44\x18\x52\xee\x5e\xa4\x97\x22\x03\x42\x69\x06\x80\x62\x2e\x46\xe9\xf8\x4c\xfe\xe3\x71\x36\xe1\xc3\xfc\x89\x1d\x52\x22\x08\xef\x73\x02\xb7\xd2\xa3\x0c\xbc\x56\xa8\x22\x39\xa5\x72\x49\xf8\xe9\xe9\xcc\x80\xf8\x59\x41\x41\xe5\x48\x16\x62\xee\x5e\xc4\x97\x19\xae\xbb\x88\xb3\x5e\x87\x8a\xd4\x86\xa0\x32\x56\x49\x81\xe7\xcb\x6d\x88\x46\xdd\x79\xf3\xb6\x3f\xcb\xd1\xbf\x84\xaf\x43\x54\x8f\x82\x5d\x08\xf2\x3d\x5c\xb3\x1b\x31\xcb\xc9\x09\x55\xcb\x61\x66\xff\x93\xb8\xd1\xdf\x11\x66\x19\x95\x51\x9b\x53\xf7\x2d\xc8\xb6\xea\x14\xcd\x51\x98\xd1\x1a\x38\x7b\x00\x71\xb4\xf8\xa5\x26\x4e\xc0\x56\x09\x32\x78\x99\x3e\xcc\xe8\x4a\xd3\xb1\x39\x4a\x41\x60\xbc\xcf\xc1\x41\x0e\x1a\x53\x48\x4d\x7f\xde\x28\x7a\x47\x4e\x4f\x5d\x4d\xb3\xbc\x0e\x48\xf7\x80\x34\xc9\x55\x61\x91\x24\x49\x51\x90\x13\x67\x81\x6d\xab\xad\x50\x60\xe5\xdd\x0e\xe5\x64\x9b\x59\xe1\x4b\x6a\xdb\xd1\x51\x2a\x06\x45\xf3\x48\xea\x43\xd3\x3e\x12\x9a\xc7\xb2\xab\x7c\x34\xc6\x20\xab\xe7\xb1\xa2\x0b\xfd\x70\x2a\x51\xc3\x72\x28\xb1\x65\x82\x62\x35\x11\x10\x43\xd3\xc5\x4c\x27\x69\x0a\xaf\x49\x30\xde\xe3\x63\xb8\xaf\xf0\xbf\x3e\x16\xba\xd3\x73\xd4\x8c\x77\xbb\x6c\x0f\xc7\x15\x38\x8f\x62\x9e\xd5\x39\x1a\xc3\x1a\x14\xe7\x82\x0f\xa1\x60\x0a\x71\x0d\x48\xd5\x7d\x86\x78\x6f\x78\x16\xc7\x57\xe4\x5e\xb5\x23\x66\xaa\xa9\x44\xdb\x07\x53\x32\x34\xf4\x71\x0a\xb2\x0b\x92\xb4\xd3\x03\x94\x4f\xfb\x82\x9b\x71\x44\x98\xc6\x81\xc8\x19\x98\x5f\x12\x67\x22\xfc\x4f\x93\x44\x88\x90\x87\xa5\x7c\x72\x95\x67\xa5\xf7\x03\x20\x2b\xf0\x56\x73\x34\x2a\x1d\x5b\x72\x02\x75\x1e\x54\x69\x6e\xba\x14\x7e\x5c\xde\x93\x5f\xd9\x13\xc5\x48\xa4\xb2\x2e\x33\x2e\x6b\x1e\x45\x16\xa0\x52\x4d\x7b\x8c\xcb\x1f\x9f\xdf\xfa\xb1\x25\xe7\xfd\xa9\x3c\x7e\x32\x9b\x5b\x30\xca\x0e\x61\x99\xfa\xcf\x8e\x70\xb9\x02\xb3\x69\x15\x8f\x54\x34\x22\xb9\xa6\xd2\xdb\x71\x3f\x7e\x53\xfd\x28\xaf\xa3\xee\xfe\x41\xc6\x5f\xd7\xbf\x59\x4f\xe5\x2a\x27\x82\x29\xf1\xd9\xaa\x1b\xb4\xc9\xe2\xe8\x2a\x2d\x47\xf7\xc1\x72\xcc\x78\x55\x42\x2c\x7f\x9d\xe7\x32\xe7\xd3\x73\x74\xef\x07\xa1\xa9\x53\x15\x3b\x95\x3b\x47\x00\x2a\x67\x3e\x91\xdb\x3d\xce\xd6\xbf\xfa\xe5\x20\x59\x35\x93\xa7\x99\xbd\x53\xcc\xea\xe1\x1e\x42\x18\x32\x32\x90\xe7\x04\x9f\xae\xd9\xb6\x8f\xbe\xe8\xf5\xb5\xed\xea\xd1\xb3\x6d\x74\x70\x16\xb7\x87\x6c\x7f\x45\x60\xb0\xc7\x7b\xac\x50\x02\x86\x9c\xf8\x95\x27\x4c\x31\x84\x79\x4a\x80\x7c\x48\x14\x66\x6b\xc6\x23\x7f\xac\x9f\x52\xf5\x24\x01\xc7\x9a\x17\xa4\x6a\xde\x3f\xd3\x9c\x6d\x9b\x07\x05\x57\x12\xdb\x5e\x67\x14\xe3\x1a\xf9\x12\x46\xc9\xf4\x28\x4b\x8b\x4c\x9a\x92\xc6\xf0\x63\xf2\xbf\xcc\x33\xfd\xc5\x6a\xf9\x2d\xeb\x2f\x16\x3e\xd3\xcc\xc2\xd2\x99\x46\x33\xc1\xad\xef\xdf\xbd\xfa\xe1\xbb\xeb\xc9\xdb\x77\x1f\x27\xaf\xdf\xfd\xf0\xf6\x95\x05\x4b\xc5\x13\x4f\xb9\xec\x7b\x85\x38\x3a\x93\x63\x18\xb9\x63\x45\x43\xa2\x69\x36\x67\x50\x11\xe5\x64\xac\x1d\x52\x99\xc9\x58\xf1\x89\x02\xef\x31\x4c\xa1\x28\x92\x71\xd1\x19\xa5\x20\xdb\xca\x69\xb9\x0c\xcd\x47\x5f\x33\x51\xe0\x73\xf7\xc2\xbf\xcc\x58\xa1\x0b\xbf\xd5\xc2\x01\x0a\xe5\x6c\xe7\x6c\xe6\x1e\x6d\x09\x1b\x9d\x14\x38\x09\x44\xf5\x1c\xa6\x10\x73\x94\x72\x81\x48\x17\x63\xdb\x4e\x9d\xc9\x44\x24\x9a\xd0\x1e\xa6\x6c\x6b\x10\x20\x4b\xf7\x67\x71\x86\x0d\x9d\xc9\xad\x7f\x2b\x96\xef\xa3\xe5\xe3\x3c\x58\x2e\x6d\xdb\x5a\x87\x46\x56\x51\xf0\x21\xd3\x28\x4c\x22\xb9\xfb\xcc\x83\xf3\xe0\xc7\x61\xf5\x0d\x59\xff\x51\x55\xf4\x7c\x65\x6a\x6a\x04\x89\x96\xb0\xc9\x15\x8c\x45\x23\xbd\xf3\xc3\x46\x14\x4e\x45\x23\xd2\xb4\x79\x63\xe5\x2f\x84\xd3\xf8\x28\x1f\xe5\x5b\x1c\xdd\xfa\xb7\xcb\x47\xc5\x2c\xcf\x44\x12\xc4\xfe\xed\x52\x3c\x0f\xc2\x54\x84\xb2\x12\x5f\x6e\x05\xff\xb1\x71\xe7\x6f\x84\xea\x90\xf8\x75\x2d\xc2\xa9\x48\x1a\xc1\xbc\x31\x0b\xe6\x73\xa1\x78\xc4\x8d\x88\x93\x20\x0a\x13\xc9\x25\xa6\x77\xa2\x91\x75\x27\x69\xf8\xb1\x68\x48\x9e\x21\x10\xb3\x86\x2e\x9c\x06\x92\x4e\x75\x1a\x6f\xe6\x8d\xc7\x68\xdd\x98\x45\x8d\x50\x88\x59\x23\x8d\x54\xc7\x2b\xc5\x0f\xc6\x00\x0d\x39\xff\x07\x23\x7e\x5e\x08\xae\x72\x09\x4e\x1a\x35\x6e\x1f\x57\x7e\x92\xa8\xda\xe4\x44\x05\xe1\xc2\x91\xc0\xe0\xc4\x02\xf0\xa6\xbb\x87\x2d\xe9\x32\xd2\x05\xca\xe8\x7e\x0c\xf4\xc9\x95\x6f\x63\x10\xa8\x2b\xff\x75\xe4\x3f\x42\xd4\x7f\x57\xfd\x57\xdf\x08\x55\xff\xd5\x57\x4f\xfe\xeb\xcb\x7f\x3d\xf9\x6f\x20\xff\xb5\xdd\x9e\xfe\xf1\xb0\x6c\xd8\x65\xc4\x05\x42\x18\x21\x40\x28\x23\x14\x48\x9b\x91\x36\x90\x0e\x23\x1d\x68\xb3\x36\xb4\xdd\x1e\x6b\xbb\x3d\x68\xbb\x1e\x6b\xbb\x1e\x74\x58\x07\xba\xac\x0b\x3d\xd6\x03\x8f\x79\xd0\x67\x7d\x18\xb0\xc1\x7e\x0c\xed\x72\xc7\x25\xb2\x17\x88\x7a\xaa\x75\xaa\xbb\x43\x49\x4f\xff\x74\xf5\x8f\xfe\x46\x5d\xfd\x63\x12\x07\xfa\xc7\xd3\x89\xe6\x47\x97\xa3\x54\xff\xb4\xf5\x0f\xd1\x39\xcd\x9b\x6e\x81\x9a\x3a\x55\x2d\xa4\xaf\xe7\xa5\xaf\xa7\xa4\xaf\x0b\xb4\xcd\x8f\x6e\xd6\x35\xb5\x98\x1f\xdd\x82\x6b\x7e\x74\xd5\xae\xae\xda\xed\x62\x79\xf2\xf4\xf4\x51\x57\xf7\xcc\xd5\xed\xb9\xa6\xd7\xa6\x3d\xbd\x34\xfd\xae\xfe\xe9\xe9\x1f\x4f\xff\xf4\xf5\x8f\xee\xe0\x40\x17\x18\xe8\x55\x1c\xe8\x7e\x0e\xf4\x3a\x0e\x74\x2d\x03\x5d\xcb\x40\xd7\x32\xd0\xb5\x0c\x74\x2d\x03\xdd\xac\xab\x87\xd2\xd3\x33\xe8\xe9\x37\x4f\x77\xb0\xa7\x3b\xd8\x33\x59\xf4\x30\x7b\x7a\x0c\x1e\x51\x23\xf2\xf4\x30\xbb\x3a\xb1\xab\xcb\x75\x75\xb9\xae\x6e\xa1\xa7\x27\xa4\xa7\x73\xf6\xf4\x84\xf4\x4c\x0b\x3a\x8b\xa7\xb3\x78\xfa\x9b\x67\xfa\xa2\x7b\xad\xdf\x88\xee\x12\xc9\x12\xf5\x14\xe8\x1d\x42\x74\xd5\x44\x77\x90\xf4\x4c\xa2\x29\xa7\x13\x3d\x93\x45\xcf\x99\x6e\x9d\x74\x4d\x9d\x7a\xea\xba\x6a\x8d\x88\x67\xb2\xe8\x16\x74\xe7\x89\x1e\x34\xe9\xea\x69\xed\x9a\x37\x9d\x45\x8f\x96\xe8\xce\x13\x33\xbe\x8e\x1e\x5f\xc7\xcc\x84\x49\xd4\xa3\xed\xea\xf9\xec\xea\xf9\xec\xea\xb1\x77\xf5\xf4\xb4\xcd\x76\x33\xd3\xaa\x67\x42\xaf\x34\xd5\x2b\x4d\xf5\xd8\xa9\xde\x9f\x54\x6f\x14\xaa\xb7\x06\xed\x9b\x6f\xba\x78\xbf\xa7\xd6\x48\x6f\x29\xaa\x37\x11\x35\x3b\x59\xef\x6b\xda\x36\xcd\xea\x2c\x6d\x5d\x59\x5b\xaf\x66\xdb\x8c\x41\x37\xd4\xd6\x2d\xb4\x75\x0b\x1d\x5d\x4b\x47\xd7\xd2\xd1\xb5\x74\xcc\x30\x75\xf1\x4e\x17\x43\x5a\x48\x3f\x50\x97\x2a\xa0\xd1\xed\x30\xd2\xed\x00\xe9\x4a\xb0\xd5\x05\xd2\xed\x31\xd2\xed\x01\xe9\x7a\x8c\x74\x3d\x20\xdd\x3e\x23\xdd\x3e\x90\xee\x80\x91\xee\x00\x48\xcf\x65\xa4\xe7\x02\xe9\x11\x46\x7a\x04\x48\x8f\x32\xd2\xa3\x40\x7a\x6d\x46\x7a\x6d\x20\xbd\x0e\x23\xbd\x0e\x90\x5e\x97\x91\x5e\x17\x48\xaf\xc7\x48\xaf\x07\xa4\xe7\x31\xd2\xf3\x80\xf4\xfa\x8c\xf4\xfa\x40\x7a\x03\x46\x7a\x03\x20\x9e\xcb\x88\xe7\x02\xf1\x08\x23\x1e\x01\xe2\x51\x46\x3c\x0a\xc4\x6b\x33\xe2\xb5\x81\x78\x1d\x46\xbc\x0e\x10\xaf\xcb\x88\xd7\x05\xe2\xf5\x18\xf1\x7a\x40\x3c\x8f\x11\xcf\x03\xe2\xf5\x19\xf1\xfa\x40\xbc\x01\x23\xde\x00\x48\xdf\x65\xa4\xef\x02\xe9\x13\x46\xfa\x04\x48\x9f\x32\xd2\xa7\x40\xfa\x6d\x46\xfa\x6d\x20\xfd\x0e\x23\xfd\x0e\x90\x7e\x97\x91\x7e\x17\x48\xbf\xc7\x48\xbf\x07\xa4\xef\x31\xd2\xf7\x80\xf4\xfb\x8c\xf4\xfb\x40\xfa\x03\x46\xfa\x03\x20\x03\x97\x91\x81\x0b\x64\x40\x18\x19\x10\x20\x03\xca\xc8\x80\x02\x19\xb4\x19\x19\xb4\x81\x0c\x3a\x8c\x0c\x3a\x40\x06\x5d\x46\x06\x5d\x20\x83\x1e\x23\x83\x1e\x90\x81\xc7\xc8\xc0\x03\x32\xe8\x33\x32\xe8\x03\x19\x0c\x18\x19\x0c\x80\xba\x2e\xa3\xae\x0b\xd4\x25\x8c\xba\x04\xa8\x4b\x19\x75\x29\x50\xb7\xcd\xa8\xdb\x06\xea\x76\x18\x75\x3b\x40\xdd\x2e\xa3\x6e\x17\xa8\xdb\x63\xd4\xed\x01\x75\x3d\x46\x5d\x0f\xa8\xdb\x67\xd4\xed\x03\x75\x07\x8c\xba\x03\xa0\xc4\x65\x94\xb8\x40\x09\x61\x94\x10\xa0\x84\x32\x4a\x28\x50\xd2\x66\x94\xb4\x81\x92\x0e\xa3\xa4\x03\x94\x74\x19\x95\x78\x89\xf4\x18\x25\x3d\xa0\xc4\x63\x94\x78\x40\x49\x9f\x51\xd2\x07\x4a\x06\x8c\x92\x01\x50\xea\x32\x4a\x5d\xa0\x94\x30\x4a\x09\x50\x4a\x19\xa5\x14\x28\x6d\x33\x4a\xdb\x40\x69\x87\x51\xda\x01\x4a\xbb\x8c\xd2\x2e\x50\xda\x63\x94\xf6\x80\x52\x8f\x51\xea\x01\xa5\x7d\x46\x69\x1f\x28\x1d\x30\x4a\x07\x40\xdb\x2e\xa3\x6d\x17\x68\x9b\x30\xda\x26\x40\xdb\x94\xd1\x36\x05\xda\x6e\x33\xda\x6e\x03\x6d\x77\x18\x6d\x77\x80\xb6\xbb\x8c\xb6\xbb\x40\xdb\x3d\x46\xdb\x3d\xa0\x6d\x8f\xd1\xb6\x07\xb4\xdd\x67\xb4\xdd\x07\xda\x1e\x30\xda\x1e\x00\xed\xb8\x8c\x76\x5c\xa0\x1d\xc2\x68\x87\x00\xed\x50\x46\x3b\x14\x68\xa7\xcd\x68\xa7\x0d\xb4\xd3\x61\xb4\xd3\x01\xda\xe9\x32\xda\xe9\x02\xed\xf4\x18\xed\xf4\x80\x76\x3c\x46\x3b\x1e\xd0\x4e\x9f\xd1\x4e\x1f\x68\x67\xc0\x68\x67\x00\xb4\xeb\x32\xda\x75\x81\x76\x09\xa3\x5d\x02\xb4\x4b\x19\xed\x52\xa0\xdd\x36\xa3\xdd\x36\xd0\x6e\x87\xd1\x6e\x07\x68\xb7\xcb\x68\xb7\x0b\xb4\xdb\x63\xb4\xdb\x03\xda\xf5\x18\xed\x7a\x40\xbb\x7d\x46\xbb\x7d\xa0\xdd\x01\xa3\xdd\x01\xd0\x9e\xcb\x68\xcf\x05\xda\x23\x8c\xf6\x08\xd0\x1e\x65\xb4\x47\x81\xf6\xda\x8c\xf6\xda\x40\x7b\x1d\x46\x7b\x1d\xa0\xbd\x2e\xa3\xbd\x2e\xd0\x5e\x8f\xd1\x5e\x0f\x68\xcf\x63\xb4\xe7\x01\xed\xf5\x19\xed\xf5\x81\xf6\x06\x8c\xf6\x06\x40\x3d\x97\x51\xcf\x05\xea\x11\x46\x3d\x02\xd4\xa3\x8c\x7a\x14\xa8\xd7\x66\xd4\x6b\x03\xf5\x3a\x8c\x7a\x1d\xa0\x5e\x97\x51\xaf\x0b\xd4\xeb\x31\xea\xf5\x80\x7a\x1e\xa3\x9e\x07\xd4\xeb\x33\xea\xf5\x81\x7a\x03\x46\xbd\x01\xd0\xbe\xcb\x68\xdf\x05\xda\x27\x8c\xf6\x09\xd0\x3e\x65\xb4\x4f\x81\xf6\xdb\x8c\xf6\xdb\x40\xfb\x1d\x46\xfb\x1d\xa0\xfd\x2e\xa3\xfd\x2e\xd0\x7e\x8f\xd1\x7e\x0f\x68\xdf\x63\xb4\xef\x01\xed\xf7\x19\xed\xf7\x81\xf6\x07\x8c\xf6\x07\x40\x07\x2e\xa3\x03\x17\xe8\x80\x30\x3a\x20\xd0\xa5\xac\x2b\x29\x9f\x4e\x0d\x01\x21\x71\xe2\x01\x04\x72\xb4\xe8\x64\xbe\xf4\xd3\xef\xfd\xd5\x1e\xb6\x74\x40\x19\x1d\xd0\xbc\x9e\x6e\x5d\x3d\xed\x53\xf5\x04\xe1\x74\xb9\x9e\x89\x44\x55\xd4\x66\x74\xd0\xce\x2b\xea\xd5\x55\xd4\x39\xae\xc8\xc8\xe7\x8d\x3c\x40\x55\xd4\x61\x74\xd0\xc9\x2b\xf2\xea\x2a\x3a\x86\xad\x59\x45\x0b\x91\x96\x14\x9a\xaf\x44\x32\x8d\x83\x55\x1a\xc5\xba\xea\x2e\xa3\x83\x6e\x5e\x75\xbf\xae\xea\xde\xc9\xaa\x37\xfe\x72\x6d\xba\xd8\x63\x74\xd0\xcb\xeb\x19\x1c\xd6\x73\xc8\x72\x68\xb4\x46\x25\x05\x72\x58\xf7\xfb\x38\xba\x0f\x12\x25\x30\x95\x14\xb6\xac\x3d\x3b\xb2\x03\x8f\xd1\x81\x97\xb7\x42\xdc\xba\xee\xf6\x8f\xab\xfc\x90\xc6\x92\x72\x5e\xf9\xb3\xeb\x70\xa6\xba\xdb\x67\x74\xd0\x2f\x2a\x22\x75\x15\x0d\x9e\xaa\xe8\x43\xea\xc7\xa9\xaa\x6a\xc0\xe8\x60\x50\x54\x45\x8f\xab\x6a\x4b\xba\xf0\x44\x55\x69\x1c\xdc\xdf\x04\x8b\x3b\x59\x57\xdb\x25\xac\xed\x16\x5b\x98\xd4\x10\xc1\x6d\x49\x9f\x3d\x51\xd7\x77\x62\xae\xab\x72\x59\xdb\x75\x8b\xaa\x6a\x8e\x43\xdb\x3d\x38\x0e\xa4\x4b\xb0\x33\x47\x96\x9f\x3c\x86\xd3\x37\xa9\x88\xfd\x34\x8a\x2d\x8d\xa4\x09\x23\x5d\x02\x6d\x97\xb2\xb6\xab\x2a\xac\x39\x17\xed\xc3\xfa\xfa\xd8\x59\x2c\xa3\x5b\x7f\x29\xab\x90\x68\x0d\xda\x94\xb5\x55\xf1\xa3\xd3\x90\xd6\x48\x1b\x8d\x9a\xe9\x58\xb5\x65\x74\x7e\x1f\x1f\x57\x42\x33\xfd\xa2\x65\x49\x3e\x50\xa9\xfd\x1a\x59\x81\xa6\x55\x18\x4a\xec\xf7\xb0\x95\xed\x1e\x1d\x1e\x23\xe4\x47\xb4\x8f\xcf\x4e\xf6\xa1\x19\x23\x81\x9f\x6c\x34\x6c\x68\xa1\xcb\x61\x9b\x12\x1b\xf5\x65\xc3\x47\x47\x4b\x37\x5c\x34\xb9\x35\xdc\x27\xb3\xa8\xd3\x73\x08\xb1\xf6\x67\x56\xb8\xbe\xbf\x15\x71\xc1\xff\x4f\x26\xc2\xb6\xd1\x64\x22\x78\x8c\xcd\x80\x8e\x8e\x5a\x36\x20\xd2\xab\x1f\x10\xa4\x10\xaa\x41\xc9\x31\x41\xae\xa5\x4a\x0b\x15\x6e\xf2\x10\xa4\xd3\x3b\x14\xe2\xed\xd4\x4f\x44\x83\x30\xf3\x25\xaf\x23\xce\x25\x1d\x42\x8b\x43\x52\x88\xf1\xfe\x4c\xe5\xa6\xc7\xb9\x65\x7b\x47\xf9\x21\xcc\x4a\xb4\xeb\x4a\x40\x50\x5b\x06\x82\x42\x1b\x5b\x11\xa3\x9a\x9c\x46\xaf\x07\xb9\x3c\x58\x29\x07\xb6\x44\xd2\x80\x92\x1d\x3e\x82\x18\xc5\x0c\x35\x25\x58\xc2\x08\x1d\x57\xeb\x35\x33\x1b\x1c\x2d\xdc\xc8\x8d\x43\xb6\x7b\xb0\x7c\x0b\xb6\x0b\x51\xb2\x36\x29\x8a\xed\xf7\xd8\xf1\xf7\x18\x2b\x10\xc6\x68\x5b\x76\xe0\x08\xd2\x94\xf6\x1f\x84\xf2\xb7\x83\x9d\x59\x34\x55\xbd\x87\x80\xc7\xda\x2c\x05\x85\xc6\xfe\xe7\x7a\x29\xe4\x97\x53\x7b\x35\x13\xfa\x0c\x0f\xf2\x23\x81\xb5\x86\x6f\x2b\xc9\x27\x89\x5d\xf5\xb6\xa4\x47\xe0\x2a\xef\x4f\x47\xf7\x47\x32\xd6\x81\xfc\x1d\x60\x88\x64\x7a\x0f\x83\x2f\x7f\xbb\x18\x0e\xb6\xd5\x5a\x97\x5e\xc2\x14\xe6\x30\xe3\xc2\x4e\x9c\xd7\x70\xa7\x7e\xbf\x85\x95\xfa\xfd\x00\xf7\xea\xf7\x3d\x6c\xd4\xef\x37\xf0\xa8\x7e\x7f\x82\x05\xbf\x1b\x86\x2c\x1c\xa5\xe3\xdd\x0e\xc9\x1f\xbe\xdd\x63\xb8\xe5\x8b\x42\xb1\x03\x13\x7e\x37\x8c\xd9\x6a\x18\x8f\xd2\x31\x43\xb1\xca\xbb\xdd\xe3\x22\x87\x52\x92\x2d\x1b\x41\xd8\xb8\xb3\x6d\xb4\xe6\x29\x86\x35\x46\x53\xde\x9c\xd9\xf6\x24\x53\xc9\x36\x39\x9f\x8c\x96\x63\x6c\xdb\x3e\x5a\xc0\x12\xef\x76\x68\xce\xa7\x43\x99\xc6\xd6\xa3\xe5\x18\x16\xa3\xe5\x98\xdf\xd5\x2a\xd5\x65\xa6\xa1\xcc\xc4\x36\xb6\x3d\x1d\x06\x68\x0e\x31\x66\x8f\xb6\x2d\x3f\x70\x3e\x1f\x96\x17\x43\x6b\xeb\x0a\xe5\x90\x96\x94\x06\x73\x25\x44\x2d\xeb\x63\x04\xde\x9a\x33\x77\xa4\xda\xd1\x47\xd0\xcd\x8e\x48\x28\x1e\x1a\xe2\xac\x7a\x2c\x55\x1a\x4a\xf1\xc1\xf9\x33\xc9\xf2\x64\x1e\xa6\x94\x64\x8f\xa2\xac\x0a\x2f\x9d\x9a\x42\xf3\x95\x4f\x2e\x17\xa5\xa5\x48\xf7\x68\x8e\xd9\x7d\x79\x92\x72\x28\x35\x1f\x06\xe8\xb5\x49\x55\x67\x17\xe6\x98\xcd\xe1\xde\xb6\x11\x5a\x38\x9b\x20\x4e\xd7\xfe\x72\xb7\x2b\x9e\xe5\x52\x63\x39\x81\x73\x90\x9b\xe1\xc6\xb6\x6f\x6d\xbb\x79\x3b\x5a\x8e\x6d\x3b\x42\xb7\x20\x2b\xc0\x78\x7f\x96\x38\xaf\x39\x81\xc4\xf9\x96\x53\x48\x9c\x0f\xbc\x03\x89\xf3\x9e\xf7\x21\x71\xbe\xe1\xa4\x07\x89\xf3\x13\x6f\xcb\x2f\x3f\xf0\x9e\xfc\x74\xc3\x09\xed\x97\x30\x52\x92\xa3\x21\x22\x79\x21\x30\x47\x41\xd2\xd5\x20\xb9\x08\x05\x21\x8e\x70\x6e\xfd\x41\x4b\xe3\xc7\xcc\xe8\xa3\x29\x10\xde\x4f\x7d\xb9\x7c\xb9\x52\xaa\xe9\xee\x0d\xc6\xa1\x47\x98\xf7\x10\xf0\xd7\x09\x4d\xb5\x69\xa4\x6d\x1b\x13\xc9\xef\xfd\xf4\x8e\x73\xf9\x7f\xa8\x53\x58\x5d\xa1\x44\x2c\xe7\xb6\x2d\xff\x97\x0b\xc8\x77\x96\x2d\x07\xb2\x4a\x06\x0e\x16\x46\xb8\x0e\xc7\x2c\x14\x8e\x59\xe4\x38\x86\x1e\xe1\x7a\x63\x5d\xb8\x3f\xb0\x96\x3b\x81\x6f\x0a\xf5\xaa\x86\xe4\x32\x29\x9b\x9d\x23\x3a\x20\x87\x3f\x03\x0d\x7f\xda\x6e\x19\xd6\x09\x44\x5d\x3c\xac\x40\x9d\xa0\x54\xfd\x5c\xa3\x37\x44\x20\xc0\x78\xcf\x8e\x34\x57\x66\xcf\x2b\x65\x3e\x68\xfc\x2c\xb9\x61\x90\xbc\xe2\x00\xda\x92\x66\x92\x9d\x3a\x22\x12\xaa\x58\xc2\xc5\xb6\xfd\x27\xb0\x85\x40\x94\x60\x64\xcd\x82\x8d\x85\xbf\x1a\x6f\xe8\xee\x49\xd6\x1a\x72\x1c\x72\x44\x4a\x3c\x85\x0b\x8e\xd5\x44\xc3\x70\xbd\x5c\x36\x39\x17\xac\xe6\xec\x66\x84\x12\x3d\xa0\x2b\x32\x6d\xb5\x42\x09\x9e\x46\x09\xd4\xd3\x28\xa1\x4d\x24\x4a\xa8\x1d\xf4\x59\xec\xcc\xcd\xa2\xd5\x7e\x3f\x5a\xa2\x60\x8e\x64\xe7\x21\xe5\x11\x4a\xa1\xe9\x62\x90\xe4\x06\x04\xb8\x38\x70\x0d\xdf\x64\x36\x87\x2e\xc1\xdb\xbd\xa4\x13\x17\x22\xb5\x82\xb0\x11\xef\x76\x56\x62\x1e\x8f\x48\x36\xeb\x85\x32\x0a\x8b\x62\x4d\xb6\xe5\xd6\x96\x05\xd9\x66\x29\xa6\x46\x95\xb6\x6d\x64\xec\x3e\x54\x1a\xd6\x3b\x86\x78\x8c\x78\x60\x16\x46\xf2\xb8\xd0\x26\xac\x4d\xf6\x63\xb9\x7f\xbe\x62\x61\x8a\xf3\xb0\x15\xe1\xfa\x5e\x28\x55\x05\x6b\x22\x62\x0b\x0c\xd3\x28\x9c\x07\x8b\x75\x96\x46\x65\xda\x43\x1c\xa4\xe6\xbd\x23\xdf\x55\x67\x58\x9a\x01\x98\xf6\x53\x24\xc5\xc9\x13\x99\x13\xb5\x39\xd5\x97\x99\xc8\x4a\xfc\x54\x07\xd6\x51\xc8\x85\x93\x46\x9a\xd7\x90\x27\x20\x46\x01\x0f\xcd\x89\xc6\x79\x45\xaa\x82\x13\xa5\x55\xcf\xdf\xcd\xbf\x50\xb8\xf9\xff\xae\xf9\xa3\x25\x7f\xe9\x87\x7f\x49\x1b\xd3\x28\xdc\x88\x38\x35\x64\x7a\x23\x8d\x1a\xab\x38\xb8\x0f\xd2\x60\x23\x1a\x7a\xc9\x71\x99\x5e\x6f\x1f\x68\x4e\x34\x2e\x17\x88\x52\x7c\x96\xa2\xd4\xf9\x16\xb6\x9a\xb5\x61\x8a\x54\xda\xab\xc3\x4a\x19\xa5\x1a\xab\xc8\x1a\xda\xc7\x27\x28\x47\xb0\xa3\xce\x78\x44\x7a\x4a\x9f\xa8\xf1\x6f\x5c\x46\xbe\x05\xc1\xda\x3e\x81\x3d\x04\xea\x3c\xbd\xb8\x19\x58\xaf\x18\x09\xbe\xcd\xd2\x6a\xd9\x99\x34\x3b\x02\x2d\xb5\xcf\x3b\x7d\xd6\x51\x33\x71\x02\xfa\x4b\x7e\x91\x62\x64\xad\xc3\x64\x1a\xad\xe4\x06\x4d\x94\x9d\xa7\x16\x84\x14\x24\x99\x36\x5c\x0c\x47\xf1\xd8\xb6\x05\xf2\x28\x46\x21\xc4\x4a\x2f\x5e\x0f\xb6\x64\xce\x91\x18\x73\x89\x42\x25\xe7\x49\x19\xe9\x52\xf0\x28\xf3\x24\xe3\xd8\x3e\x42\x18\x15\xd1\x42\xde\x35\x3a\xc0\xa8\xe9\x3e\xc5\x01\x65\x88\xb0\x85\xc2\x61\xac\xaa\x32\x34\x17\x23\x6a\x27\x10\x3a\x60\x84\x2a\x5d\xd4\x13\xf8\xa0\xba\xc2\x86\xbe\x6b\x22\x51\x26\xef\x52\x5c\x32\xc5\x0c\x6d\x5b\x19\xa0\x1f\xf3\xb0\x71\xcb\x62\x8d\x20\x9c\x46\x71\x2c\x94\x16\x70\x13\x4d\xfd\x13\x7c\x6c\xbb\xff\xa5\xcd\xe5\x3d\xb1\xb9\x14\x04\xeb\x13\xd6\x57\x50\xeb\x69\x61\x4d\x3e\xa3\x1d\x6a\x18\x82\xb6\x01\xff\xa4\x43\xca\xf3\x3b\x1a\x3b\xd3\x68\xf5\xf8\x53\x90\xde\x05\xe1\xa1\x6d\xb3\xd6\x68\xc7\xc6\x7c\xc0\xe7\x01\x8a\x72\xe3\xa5\x84\xcb\x4c\x3e\x86\x35\x97\x44\xb2\x8f\x61\x79\x64\xcf\x73\x45\x87\xc5\xf0\xe8\x38\x33\x5f\x9b\x2a\x12\xc7\xb9\x0f\x42\x84\x72\x4e\x76\x39\xf4\x59\x88\x96\xe0\x63\x7c\xbe\x06\xff\x3c\xc1\x30\xe7\x44\xb1\x06\xeb\xcb\xc4\xb6\x93\xcb\x75\x6b\x6a\xdb\x68\xce\xcf\x09\xac\x5b\x7c\x7a\x4e\x20\x51\x3f\xf8\x62\x7a\x7e\xde\xb8\x72\x2f\xf0\x5a\x2e\x51\x34\x8c\x46\xc9\x98\x47\xa3\xf5\x98\x19\xef\x0a\x99\x20\x33\xcf\x65\xc1\x79\xb6\x2a\x91\xda\x2f\x6d\x8f\x91\xb6\x07\xa4\x43\x18\xe9\x10\x20\x1d\xca\x48\x47\x89\x22\x8f\xf0\xc2\x9f\x9b\xe1\x7a\x7f\x8a\x6c\x52\x23\x1e\x94\xac\xde\xfd\xa3\x29\x54\xf3\xec\x5f\x91\xd2\x44\x92\x7c\x22\x23\x39\xfb\xfe\x89\x59\x5e\xf2\x7c\x6e\xd7\xc3\x88\x85\x68\x0d\x11\xbe\x58\x5e\x25\x17\x38\x1d\x25\xad\xd6\x98\x8b\x9c\x5d\xf8\xc2\x4c\x9c\xc4\x55\xa4\xe3\x9a\xc1\x77\x88\x19\x7c\xdb\xfb\x02\x97\x5b\xe2\xac\x22\xf0\x75\x5d\x09\xac\xe5\x8c\xc8\x3d\x14\xa2\x75\x3e\x1d\x53\x1e\x20\x1f\x96\xca\x82\x44\xd8\x76\xd4\xe4\x91\x9e\xc3\x8b\xe5\xd5\xf4\x02\x07\x73\x84\x12\xbe\x1e\x4d\x5b\xad\x31\x6e\xf2\x04\xe7\x54\xbc\x58\x26\xa2\x91\x67\x9c\xb6\x5a\x2a\xaf\xd8\xed\xa6\x72\x87\xac\xb1\x6d\xaf\x47\xd3\x31\xe7\x3c\xb7\x4b\x91\xdf\x76\x3b\xd7\xcc\x48\x53\xd8\xf6\x39\xd9\x57\xa7\xc5\x65\xa4\xe3\x66\xd3\x23\xa7\xe5\x24\x17\xde\x35\x5c\xb8\x97\xef\x08\xaa\x69\x2e\x35\x4d\x92\x0f\xef\x74\x4f\xe3\x01\x35\x21\x9c\x70\x2e\x60\xcd\xa9\xfc\x59\xf2\xb6\xfc\x99\xf2\x8e\xfc\x99\xf3\x9e\xfc\x99\xf1\xae\xb2\x52\x9e\xc3\x1d\x4f\x77\x3b\xff\xec\x78\x7e\x7d\x58\x15\x7b\xee\x1e\x36\xf0\x28\x77\x1b\x86\x05\x0f\xd1\xa3\x64\xd3\x63\xe4\xc3\x0a\xda\x18\x26\x3c\x42\x8b\x7c\xde\x1f\xb8\x0b\xd7\x3c\x19\xde\xa1\x14\x26\x98\xad\xd5\x83\x8b\xcd\xce\xba\x98\x5c\x3d\x5c\x3c\x98\x39\x9d\xed\x76\x0f\x72\x4e\x25\x72\x47\x1b\x7e\x8b\xee\xf9\x62\xf4\x30\x86\x07\x78\xc4\x20\xb0\xcc\x93\xe0\xeb\xd1\xc3\x98\x6f\xce\xd4\xaa\x04\x73\xb4\xc1\x86\x6f\x16\x86\x51\xce\x64\x49\x4d\x57\x73\xc3\xdd\x8c\x1b\xbe\xd7\xef\xbd\xec\xfd\x21\xe3\x96\xaf\xb5\x95\xff\xbd\x76\x04\x90\x95\x4e\xb3\xd5\x27\xf9\x44\x0c\xcf\x09\x5b\xee\x76\xd3\xe1\x94\x5d\xeb\xb5\xac\x6e\x6d\xe8\x74\x59\xa7\x0b\xdd\x0e\xeb\x76\xc0\xf3\x98\xe7\xc9\x55\x3d\x62\x25\xb3\x55\x6d\xb7\xb3\xbd\x4e\xf5\xb2\x7a\x5e\xb1\xaa\xa7\x50\x96\x0f\x09\xac\xf1\x56\xe1\x69\x63\xf3\x24\x09\x65\xb9\xb3\x97\x12\xc2\x45\x68\x99\x4f\xfb\x8c\xaf\x87\xf3\x73\xc2\x5c\xb8\xe3\x6b\xd9\x79\x22\x37\xbe\x7f\x49\xb1\xda\xca\x17\x0a\x4b\xcd\xe4\x6c\x4f\xf1\x36\xe1\xd3\xd1\x6c\x0c\xb3\x16\xbf\x3b\xbb\x8d\x85\xff\x49\x52\xd3\xf2\x0d\xd6\xc3\xd9\xa5\xcb\xe6\x97\x7c\x76\x4c\x48\xdf\x88\xd9\x7a\xaa\xfc\x29\xc4\xfd\x2a\x7d\x6c\xf8\x12\xed\x37\x1e\x82\xf4\xae\x11\x46\x8d\x20\x0c\xd2\xc0\x5f\xe6\x94\x95\x6a\x76\x3d\x9c\x5d\x71\x97\xcd\xaf\x66\x17\xb2\x7a\xac\x3b\x60\xdb\x28\xe1\x29\x4a\x40\xf7\x02\x96\x38\xc7\x76\x49\xdd\x54\xb7\xdb\xac\xdd\x2e\x26\xf9\x24\x81\xd4\x27\xe6\xe8\x0c\xcc\xd1\x51\xd4\x4a\xb2\x12\xd3\x40\x52\x2a\x27\x40\x8b\x82\xa9\x59\xfb\x32\xc5\xb6\x6b\x24\xd0\x28\xe5\xc2\x99\x46\x61\x92\xc6\xeb\x69\x1a\xc5\x78\xb7\x4b\x9b\x5c\x93\x3e\xb6\xdd\x0c\x51\x49\x6c\x82\x77\x3b\x94\x1a\x08\x8a\x41\x2e\x9f\x6d\x1b\x67\x0e\x94\xf2\x74\x14\x8c\x65\x1b\x79\x8e\xb2\x48\x76\xa8\x2a\x64\x69\x85\x10\x1a\x30\x6f\x90\x23\xef\xce\x49\xe2\xac\xd3\x39\x0d\x17\x0a\x79\x90\x12\x02\x63\xa4\xf9\xf1\x4e\x87\x75\x24\xe5\xda\xf9\x3a\x1a\x2b\xdb\xc5\x7d\x03\xb0\xbd\x9e\xdc\xc4\xa3\xb1\xb6\xa9\x07\x9f\x6f\xf7\x87\x12\xc2\xd8\x90\x47\x92\xba\x69\xf8\xb8\x00\x29\x21\x1f\x8d\x21\xe0\xee\x45\x70\x99\x2a\xef\x9f\x70\x14\x8c\xb9\xe5\x8f\xac\x56\xd0\xb2\xc6\xd6\x99\x2f\x19\xb1\x42\x8a\xf1\x1a\x7c\x65\xa4\x9a\xcb\xb5\x5e\x23\xab\x95\xb9\xe7\x80\x85\x5b\x16\xb6\x72\x19\x97\x2c\x8b\x84\x12\x51\x17\x33\x92\x0b\xa8\x6e\x83\x70\x56\x26\x57\x32\x5a\xbf\x20\x56\x22\xcd\x65\xe4\xa8\x11\x88\xc4\x96\x07\x96\xe5\x31\xf7\xe5\x8e\x98\xfa\x29\x3a\xcc\x8f\x2b\x6e\x25\x65\xca\x70\x3d\x4c\x50\x0a\x99\xeb\x13\xc4\x98\x05\x4a\x3e\x27\x0a\x01\x5c\x75\x2f\xd9\x36\x5a\x97\x24\x72\xe5\x4f\xb0\x96\x6b\x68\x4e\x47\x8f\x79\xbd\x62\x93\x9c\x54\x7a\x74\x8c\xd0\x59\x9f\x8d\x8c\xbb\xfa\xe8\x2f\x2c\xb9\xa4\xd6\x8b\x6c\x04\x16\xe7\x71\x8d\xa8\x23\x1f\xe1\x1e\xe1\x27\x0f\x94\xc4\xcf\xd9\x80\x0a\xbf\x98\xa1\xf5\x43\x2e\xc4\x62\x99\x7f\xd3\xd0\x7a\xbb\x5e\x2e\x2d\x66\x25\xaa\x2f\x05\xff\x17\x1d\x6c\xe2\x92\x40\x40\x72\xe9\x46\x18\x10\xe3\xed\x7e\x8f\x52\x23\x8d\x90\x00\x32\xc4\x78\x18\xb1\x60\x28\x4f\x1e\xb3\xde\x65\xd2\x10\xe4\x2b\x3a\x01\xd7\x4a\x30\x53\xb5\x82\x42\x0c\x4b\x53\xc0\xfc\xf2\x31\xcc\xb8\xa3\xce\x09\xbd\xce\x76\x9f\x33\xab\x4f\x13\x31\x99\x4c\x2c\xf3\x89\xeb\xc3\x39\xc9\xa4\x63\x9d\xaf\x23\xcd\x07\x03\xec\xcc\xd5\x3a\x0e\x32\x61\x3d\x31\x08\x45\xd2\x0f\x92\x4a\x90\x14\x65\xc2\x05\xea\xf5\xe5\xd6\x15\xa8\xdf\x95\x14\x92\x40\x7d\x4f\x62\x10\xc9\x2f\xb5\x25\x0e\x11\xa8\xdb\x97\xd8\x43\xa0\x41\x07\x3b\x73\x3f\x49\xff\x2a\x1e\xe1\x4e\x61\xa6\x01\x86\x15\x9f\x0f\xad\x49\x22\x17\x27\xf8\x4d\x58\x70\x5f\xe7\x19\x00\x21\x9f\x49\x1c\x25\x99\xd0\xd7\x96\xe4\x78\x70\xe1\xad\x1c\x8c\xc2\xb1\xa2\xc4\x63\x2e\x9c\xc9\xfc\x22\xbe\x88\x79\xec\x84\x12\xb9\xc7\xce\xa7\x92\x16\x2a\x2e\x9f\xd5\xed\x42\xa4\x2f\x0b\x68\x5b\x15\x1a\xad\x61\xa9\x5b\x96\xe3\x28\x1b\xab\x4b\x96\x08\x09\x98\x42\x0a\xd6\x24\xb0\x30\x08\x67\x92\xf2\x54\xfe\x04\x3c\xd4\x8e\xd4\xf2\x65\x9e\x79\x50\x0b\x67\xb2\xcc\x9f\x47\xab\x31\x77\x41\x8b\xca\x62\xdb\x4e\x50\x0c\x6b\x10\xa3\xe5\x58\x1e\xce\xe2\x44\x07\x68\x5a\x92\x8a\x6f\x95\x71\x36\xab\x75\x3b\xba\x33\xee\x66\x18\xd4\xd8\x03\xb9\x60\x72\x0a\xc2\x8b\x90\x87\x4e\x88\x43\x27\xe6\x4d\x17\x42\x67\x65\xdb\x28\x74\x56\x3c\x74\x56\x4e\x98\x23\x0e\xc3\x80\xc4\xa3\xd0\x09\xc6\x67\xaa\xdb\xc7\xfd\xdd\x9b\x6c\xec\xf0\x04\xc6\xa5\xe6\x43\x7e\x8f\x24\x88\x91\x2b\x14\xe6\x3e\x28\x4e\x08\x91\x6c\xf2\x2c\x6b\x48\x2d\x96\x13\x8c\xc1\x74\x2c\xb2\x6d\x14\x39\x21\x0f\x30\x04\xca\x61\x74\xc5\x23\x0c\xb1\xec\x88\x64\x6a\x91\x7a\x0a\x54\xca\x32\x4f\x59\xaa\x3c\xa3\xd5\xf8\xfc\x7c\x9f\x89\xcb\xc3\x3d\xcc\xa3\xf8\xda\x9f\xde\x55\xba\x99\x77\xb0\x70\x21\x85\x90\x47\x92\x35\x3c\x64\x06\xeb\x79\x98\x36\x96\x9b\x69\x18\x3b\x21\xd3\x8e\x66\xf3\x0b\x45\xee\x84\x28\x76\x36\x10\x3b\x9f\x94\xcb\x10\xbe\x88\x6d\x3b\x76\xe2\x0b\x2c\x77\xde\x6a\x0f\x77\x7e\xc2\x8e\xcf\x65\xb3\x79\x8f\x8a\x29\x13\x78\xbf\xc7\x30\xb7\xed\xb8\xb2\xdc\xe6\x18\x9c\x90\xe3\xe6\xc5\x47\xab\xb1\x2c\x3e\x55\xde\x1b\x47\x12\x4f\x23\x77\x83\x88\xdf\xab\x53\x94\x33\x95\xc3\xc8\xd9\xf0\x98\x21\xb5\xcc\x11\xdf\x06\x2c\x90\x27\x4b\x09\x45\x3f\xb1\x14\x36\x2c\x86\x15\x53\xbb\x68\x09\x61\x36\x0b\xb1\x8a\x8e\x20\xf7\x87\x72\xe9\x9c\xcc\xe5\x0a\x84\x6a\x4b\x85\xf2\x51\x6e\x94\x56\x0b\xf4\xd1\x94\x0b\xa9\x4e\x65\x30\xe6\x11\xc6\x20\xf6\xb0\x10\xe9\x75\x98\xc6\x8f\xec\x1e\x12\x91\x7e\x48\xe3\x28\x5c\x1c\xf5\x79\xad\x1e\x0e\x0e\x9b\x9e\xf4\x94\xdf\x69\x0f\x64\xfd\x9a\x7b\x72\xe7\x5b\x75\x8f\x2b\x1e\x14\x07\x7e\x79\x93\x4f\x60\x1c\xdc\x26\xcb\x8b\xd4\xb6\x53\xb9\x52\xa9\x44\x74\x15\xd7\xcc\x49\x9a\x79\x02\x4e\x96\x3c\xe5\xe9\x30\xcd\x57\x3d\x75\x26\x73\x3c\x5c\x22\x17\xac\x4f\xe2\x51\xa2\x2e\x31\x4c\x9d\x4f\x4c\x0b\x76\xb3\xf7\x0d\x1b\xa5\x72\x47\x38\x9b\x31\x66\x28\xeb\x7a\xc6\xf0\x22\xe5\xff\x04\xf1\xd0\x32\x66\x38\x56\x5e\x1c\x9a\xca\x5d\x0a\xa6\x8a\x68\x92\x18\x81\x78\x8c\x10\x0f\x08\x6d\x33\x42\xdb\x40\x3a\x03\x46\x3a\x03\x68\x7b\xac\xed\x19\x96\xa0\xdb\x67\xdd\x3e\xf4\xfa\xac\xd7\x87\x7e\x97\xf5\xbb\xd0\xf7\x58\xdf\x83\x41\x87\x0d\x3a\x30\xe8\xb3\x41\x1f\x06\x03\x36\x18\xec\xc7\xd0\xfd\x4a\x69\x81\x04\xf1\xa1\x81\xd4\x0b\x91\xfe\x24\xfc\x4f\x0a\xf6\xb7\xfb\x1a\xf4\xf7\x49\x3d\xe8\x97\x3c\x87\x04\xfd\x1e\x31\xa0\x5f\x42\xf6\x39\x5f\xa3\xae\xe2\x1b\x50\x0f\xc3\x1d\x77\x25\xac\x3f\x46\x56\x72\xab\xe9\x6d\xa5\x3d\x2e\xee\xf1\xbe\x8c\x04\xcc\x1e\xf0\xf9\x68\xbc\x87\x4d\x3d\xd1\x39\x47\xc2\xf1\x6b\xbd\x26\xc4\xc8\x95\x8c\x74\xba\xc7\x78\x7f\x76\x5f\xa2\x72\xaa\xe7\x2b\x27\xd0\x36\xfa\x7c\x69\x40\x96\x23\x8e\x74\x44\xc6\xa7\x0f\x75\x5e\x66\x2f\x77\x37\xab\xc3\xdc\x45\xb5\xf1\x30\x1e\x91\x31\x4f\xf5\xc6\xf2\x35\xa3\x38\x12\x90\x8e\xf1\x49\x40\x9b\xca\x23\xaa\xb2\x97\xc6\x58\x8c\x3e\xd5\x63\x14\x05\x06\xf9\xd7\xcc\xd9\xd7\x57\xfe\xf1\x53\x81\x52\x49\x5f\x36\x9b\xff\x2a\xc9\xfe\xaf\xc4\x81\x41\xa6\x7b\x9f\xd7\xe3\xc0\x79\x2d\x0e\xbc\x6b\xb5\x2a\x38\xaf\x82\xec\x02\x10\xa3\xf5\x01\xb2\x8b\xd1\xbc\x8c\xec\x6a\xa6\x40\x52\xf7\x51\xa1\x56\x68\x12\xb3\x5f\xe5\xc7\x4c\x22\x22\x69\xbf\x78\xb8\x42\xd3\x0c\x3e\x62\x47\xd7\x84\x04\x66\xb1\x6d\x2f\x51\x06\x32\x02\x6c\xdb\x39\xde\x33\x49\x35\x8b\xfb\x27\x1b\xbd\xf3\x93\x9a\x16\x15\xa0\x3f\x0d\xa9\x23\x1e\x22\x25\xf9\x68\xba\x95\xba\xa3\xe1\x4a\xd1\x70\x22\x55\x2a\x77\x16\x8d\xe4\x14\x6b\x35\x23\xac\xe7\x49\x1a\xc5\x82\xad\x2a\xf0\xa2\x02\x27\xda\x7d\xd6\xee\x43\x87\xb2\x0e\x35\x70\xc2\x23\xcc\x23\x9a\x86\xd7\x70\x42\xc2\x86\x23\xf9\x59\x2d\x6c\xf0\x8c\x2c\xad\x47\x33\x72\xd0\xc0\x04\x05\x34\x7c\x0d\x34\x2a\x40\x41\x02\x89\xa5\x01\x1a\x12\x28\xf4\x3a\x9a\x1c\xec\xf7\x34\x39\x48\x68\x07\x2b\x3a\xd0\x3b\x29\x6e\x82\x15\x28\xc1\x90\x9e\xa7\x05\x8f\x47\x62\x0c\xb7\x7c\x01\x13\xbe\x19\x2a\x8d\x1c\xb3\xfc\xd9\xcc\x82\x07\x7e\x6b\xdb\xb7\xa5\x8d\x74\x2d\x39\xc5\x77\xc7\x5c\x03\x7f\x50\x3e\xa6\xe8\x01\x04\x58\x7a\x1f\x58\x3a\x02\xc2\x9d\xaf\xe1\x78\xcd\x11\x47\x92\x01\x57\x2a\x21\x89\x3c\xb4\xe5\x90\x5c\x71\xcd\x71\xb8\x4c\xe0\x3d\x53\xaa\xc2\xfa\xf2\x8d\xac\xf8\x50\x1f\x0a\x76\xb2\x0e\x39\x96\x13\x75\xd4\x97\x51\x5b\xac\xa2\x94\x8e\x9f\x2e\x01\xb1\x29\x83\xf7\xf5\x4a\xb5\xc6\xad\x6d\xa3\xc7\xdd\xee\xc1\x31\x04\x95\x6d\x37\xa7\x15\x9d\x34\x92\x50\xfa\x16\x67\xd6\xa4\x08\x3b\xa1\xf8\x9c\x22\x79\xa8\xb1\x9e\xe5\x0f\x0a\x90\xdf\xc2\x67\xfe\x61\x34\x19\xa3\xc7\xe1\x76\xcf\xce\x5d\x20\xb8\xc9\x3f\xc0\x0b\x5e\xad\xee\x83\x3a\x34\x44\x39\x79\x7e\xe2\x73\x54\x01\xe3\xaa\x1e\xa4\x00\x06\xbc\xe7\xcd\x47\xdb\xae\x16\x2e\x30\xbd\x6e\x31\xe5\xdd\x8b\xf4\xfc\xfc\x02\x0b\xd9\x70\x5a\x90\x3e\x4d\xa1\x9a\x39\x77\x15\xec\xf9\xb4\xdb\x21\x74\xcb\xd3\x52\x5d\x86\x06\x49\xe1\x56\x82\x69\x2d\x3f\xb8\x53\x43\x5d\x40\x0a\xb7\x39\xbc\xaa\x00\xb4\x0d\x84\xa3\xc9\x18\x42\x0c\xa1\x1c\x7d\x09\xbf\x3c\xc0\x43\x59\x98\xc3\x6f\x31\xa0\x17\xbb\xdd\x7b\xc9\x6d\xbf\x43\xd9\xce\xc3\xf0\x0e\xa9\x8d\x87\x61\x63\xdb\xef\xb4\xbe\x19\x63\x40\xef\x77\xbb\xcf\x58\xa6\x4c\x30\x3c\xda\xf6\x83\xf6\xd0\xcc\x21\x97\x79\xd7\xe2\xc5\x5b\x7e\xef\x54\x01\x39\x4a\x41\xc0\x06\x26\x18\x22\x54\x3e\x14\x2b\x0c\xbe\xf3\xf6\xfa\xfa\x15\x6f\x66\xb2\xe4\xc6\x0c\xc9\x01\xc3\xf5\x48\x8c\xf9\x2d\x84\x28\x74\xbe\x6d\x85\xce\x4f\xad\xd0\x79\xfd\x0c\xdd\x36\xf9\x02\xc3\x35\x86\xc7\xdd\xee\xde\xc9\x69\x37\x59\x04\x36\x18\x6e\x2b\xb0\x87\xf4\x19\x21\x7d\x20\xb4\xc3\x08\xed\x18\x18\xd4\xa3\xac\x47\xa1\xd7\x61\xbd\x4e\x06\x83\x5c\xe6\xb9\xe0\x75\x99\xd7\x35\x90\xa8\xdf\x63\xfd\x5e\x01\x8f\xe8\x97\xd4\x50\xfd\x27\xd4\x50\x7d\x46\x24\x0b\xdd\x3d\x92\x93\x9e\xe2\x72\xb5\xac\xe2\x09\xc3\xc6\x00\x6f\x95\x68\x49\x0c\x0b\x5b\x10\x17\x02\x8c\x99\x52\xe4\x07\x7a\x0e\x7a\x8c\x90\x5e\x41\x6f\x75\xbe\x34\x86\xc1\x13\x63\x50\x86\x44\x4a\xe8\x22\xab\x3a\x92\xc6\xd5\x8e\xa4\xa7\x84\xfa\xaf\xfc\xb4\x64\x50\x25\x77\xc5\xc7\xe0\x5e\x40\x70\xf8\x21\x8d\xde\x7c\x78\xa7\x25\x09\x10\xd5\x12\x65\x57\x83\xa1\x60\x96\x6b\xb5\x44\x99\x69\x8e\x6b\x8c\x53\x2c\xb7\xdd\xef\x9e\xbb\xde\x39\xed\x7e\x74\x3d\xe6\xf6\x58\x7b\xe0\x0c\x06\x83\x7f\xb6\x9a\x3c\xd0\x20\x48\x9e\x22\xd9\x03\x74\xde\x75\x4b\x7f\x8a\x20\xc6\xbb\x5d\xb3\x5a\xed\x61\xa1\xb7\xfe\x5b\x95\x71\x58\xce\x33\x47\xcd\x20\x79\x1d\x84\x41\x2a\x50\x58\x00\x3a\x9c\xa9\xa0\x6f\xfc\x70\x91\x89\x95\xdf\x84\x1b\x7f\x19\xcc\x1a\x69\x70\x9f\xeb\xe5\x4b\x11\x5c\x20\xe5\x6a\xaa\x7e\xf8\xf8\xf2\xf5\x7a\xb9\xfc\x59\xbb\x42\xc7\x79\xe2\xf7\xc1\x72\x19\x24\x62\x1a\x85\xb3\x44\xc5\xde\x4a\x2f\xdd\xa1\x75\x6e\xb1\xf4\x6a\x30\x18\x0c\x86\x56\xcb\x62\x96\x95\x33\xef\x2d\x64\xa9\xd1\x59\x2d\xa5\x47\xf4\x6f\x13\x24\x29\x03\x2d\x89\x09\x86\xe7\x3d\x76\xde\xc1\x2d\xeb\xdc\x6a\x45\x28\x6f\x22\x0a\xd3\x3b\x84\x5b\xe4\xf0\x83\x9a\x00\x8c\x5b\xd6\xc7\x72\xea\xdf\x47\xeb\x38\x51\xc9\xac\x52\x4b\x10\xae\x53\x51\xf3\xe1\x43\xd6\x79\xdc\xb2\x1c\xab\x85\xe2\xab\xc1\x60\x18\xab\xe5\x8d\x50\x2c\x53\xff\xd9\xda\xb3\x60\x0f\x5b\x75\x50\xe5\xae\xfb\x4a\x71\x6d\x26\xeb\xeb\xb4\x9f\xb0\x74\xce\xc4\x6e\x4d\xce\x85\x6d\x17\x56\x04\xea\xcd\x78\x9d\xaa\xd7\x63\x8d\xc0\x9b\x5c\x75\x7d\x17\x84\x69\xa1\xb3\x0e\x51\x26\x4a\x2d\xaa\x13\x5a\xc5\xde\x69\x33\xd2\x69\x6b\xe2\x47\x8e\xe4\xab\x14\xed\xda\x48\x48\x89\x0b\x6b\x7a\x61\xac\x3d\xfc\xe5\xb2\x71\x2f\xd2\xbb\x68\xd6\x88\xc2\x46\xc3\x6a\x89\x23\x1d\x7a\xf7\x4b\x3a\x74\xea\x9e\x3e\xf8\xda\xfe\x27\x5f\x82\x1a\x6b\xa9\x6a\x55\xe4\x89\xaa\x94\x75\x97\x06\xb5\x99\xc8\xb6\xf7\x84\x29\x91\x55\xc2\x55\x50\x35\xc0\x83\x20\x79\x9f\x01\x8e\x77\x73\x58\x99\xe4\x37\xc9\x75\x6e\x69\x04\x69\xf4\x5d\x34\xf5\x97\xc2\x80\x94\x4c\x4a\x09\xc6\x38\xc7\xca\xc2\x74\x81\x65\xcc\xff\x7a\xa7\x95\xb6\xae\xe1\x41\x89\xdb\x31\x94\xa6\x7b\xd2\x8c\x3e\x93\xaa\x0b\xac\x04\x4d\x73\xed\xcc\x9f\x11\x05\x3e\x24\x5c\xd2\xf0\xb0\xe6\x81\x33\x87\x25\x77\x2f\x72\x71\xcf\xf2\x02\xaf\x33\xcb\x41\x9f\x27\xa3\x65\xab\x35\x56\xd4\x9d\x89\xcf\x55\x55\x3e\xbb\x1d\x46\xdc\x0e\x10\xd7\x63\xc4\xf5\x80\xb8\x7d\x46\x5c\xb9\xbb\x7a\x27\xb5\xac\x19\xbd\xdc\xcd\xd4\x71\x99\x92\x55\xd2\xcd\xbe\x11\xa3\x3e\x69\xec\x6c\xcc\x9c\x5f\x1b\x33\xe7\x6f\x8d\x99\xf3\x07\x63\xe6\xfc\xde\x98\x39\x7f\x03\x0b\xbe\x1a\xc6\xec\x7e\xa8\x8d\x97\x95\x0d\x33\xdf\xee\x71\xad\x35\x33\xdc\xf2\x55\x8d\x4d\xf4\x84\x97\xe8\x84\xdd\xae\x4c\x35\xc8\xef\x85\x0d\xf4\xaa\xb0\x81\x9e\x73\x84\xa6\xbc\x79\x67\xdb\x8b\x92\x19\xf4\x62\xb4\x1c\xe3\xe1\x82\xad\xf1\x68\x39\x86\x19\x97\x24\xdb\xd0\xd7\x36\xcd\x9b\x13\xa6\xbd\x7e\x9d\x69\xef\xc2\xb6\x23\xb4\x80\x25\x68\x03\xde\x1f\x30\xdc\x8e\x96\xe3\x26\x9f\xdb\x76\xa0\xec\x77\x67\x8a\x68\x9a\x64\x89\x48\x99\x4b\xcf\xf1\xfe\x2c\x76\xa6\x51\x2c\x78\x08\xff\x5f\xd8\xf6\x1a\xaa\x46\x39\xbd\x64\xca\x58\x4d\xc1\x18\xeb\xa1\xde\x49\x95\xac\xd6\x80\xdc\xfb\xe9\xf4\xee\x69\xdd\x20\x7f\xee\x3c\x57\x91\xad\xac\xe7\xce\x73\x6b\x24\xc6\x28\xcd\x0c\x11\xc3\x8a\x52\x22\x1d\xc5\x63\xde\x24\xd0\x3c\xce\x18\xe0\x6d\xe6\xc5\x50\xb1\x72\x92\x3d\xfc\x12\x35\x42\xdb\x4f\x40\x12\x63\x21\xda\x7b\x9a\x0e\xd1\x7e\xc8\x25\x49\x92\xc1\x0c\x9e\xd9\xfe\x92\x3e\x51\xca\x03\xc3\x2c\xca\xb9\x51\xdc\x22\xa1\xae\xb2\x13\x29\xa9\x51\x61\xc9\x9b\x41\x85\x24\xd0\xc8\x5a\xce\x52\x2e\x34\x12\x9f\xc5\xf4\x38\x12\xd3\xa8\x88\x05\xeb\x2c\xe2\x68\xbd\x4a\xf8\xd6\x67\x96\x67\xed\x25\xcf\x6c\x79\x12\xcd\x58\x96\x13\x8b\xd5\xd2\x9f\x0a\x24\xc0\xfa\xbb\x4b\xff\x4a\x47\x98\xa9\xa9\xee\x39\x1a\x32\xfc\x5c\x11\x08\xb2\xbd\xb3\xe3\x66\x73\x5e\xeb\x84\xc9\xbb\x9e\x10\xcb\xbf\xcd\x60\x60\x81\x33\xa8\x8a\x6e\x94\x05\xb4\xb4\x7c\x15\xed\x68\xe4\x8e\x6d\xdb\xba\xd5\xcf\x64\xbc\x47\x27\xe9\xd2\xb9\xee\xe4\x8c\xfb\x12\xc4\xdd\xd5\x4d\x59\xca\xb7\x85\xd1\xfd\x68\x36\xae\xe9\xb8\xb7\x07\xaf\xc9\xad\x6c\x2f\x61\x0c\x2b\x7e\x37\xac\xad\xab\x49\x20\xe6\xcf\xfd\xe7\x45\xc0\xd4\x53\x93\xa1\x74\x0e\xeb\xe5\x72\x0f\x96\x1a\xb4\x1c\x8d\x50\xc2\xfb\x32\x4b\xb4\xdd\x43\x25\x61\xb4\xae\xeb\x60\xbc\xc7\x10\x8f\x66\x63\x64\x59\x18\x9a\xe9\x1e\x67\x86\x1e\xca\xac\xf3\x6e\xb7\x6b\xae\x54\x70\x40\xb5\xa0\xa6\xa1\xe6\x72\xb7\xab\xb4\xdc\x9c\xea\x41\xdc\xcb\x3d\x34\x9a\x8d\x61\xc3\xe7\x28\x82\x19\xa8\x81\x1f\x86\x23\xaa\x78\x0a\xa5\x7a\x94\x9c\x27\x43\xc9\x0a\x07\xc3\xed\x2c\x0a\x05\x6b\xba\xc6\x66\xf6\xbe\xe2\x7d\xc4\x0e\xbe\x1a\x3f\xa3\x58\x99\x07\xe6\x5f\xc9\x5e\x4e\xf4\x23\xdf\x8c\xdc\x31\x2c\xf8\x66\x44\xc6\x67\x31\xca\x1c\x01\x73\x50\x2d\xe0\x11\x43\x88\x6e\xc4\xe2\xfa\xf3\xaa\x94\x3e\x03\xca\x79\x3a\xac\x15\x85\x2e\x72\x73\x78\x2d\x92\xda\xd7\x88\x2c\xab\x99\xf0\x3e\x93\x39\x67\xfc\x9b\xcb\x08\x75\x21\xd3\x4a\x66\xce\xc5\x5d\x8f\x75\x3d\xc3\xc9\xe5\xb0\xef\xab\xc9\xc4\xba\x5d\x9c\x9d\xb2\x8c\x94\x4b\x79\x41\x46\x0b\xe3\xe5\x67\xdb\x28\x6d\x71\x6b\xa1\xc4\x8c\xc1\x22\x8c\x62\xf1\xd2\x4f\x84\x49\xd6\xd2\xc7\xfb\xf5\x32\x0d\x96\x41\x98\xa5\xde\xab\xd4\x75\x18\x4c\xa3\x59\x96\xb6\x56\x69\x49\x1a\x4c\x3f\x3d\x9a\xa4\x47\x0b\x83\x42\xef\x19\xa9\xd8\x3b\x22\x15\xeb\x25\x61\x83\xaa\x8d\x82\x32\x9b\x2a\x2b\x46\x35\xdc\x0f\x92\x97\x4a\x75\xff\x61\x15\x0b\x7f\x26\xc9\xa4\x5a\x24\xa0\xbc\x67\x12\x58\x43\x8e\xf5\x0b\xa9\x86\x92\x7e\xf1\x29\x3c\x72\x17\x16\xbc\xd9\x9c\x49\x94\x38\x83\x3b\x68\xe3\x8b\xc7\xcb\xa5\x36\xb9\x79\xd4\x46\x63\xf2\x71\xc5\x17\xc3\x05\x5a\x8f\x1e\xc7\xf0\x08\x09\x66\xea\xe9\x5e\x1e\xdc\x10\xad\xb0\x6d\xa3\x7b\x9e\xe3\x69\x74\xcf\x57\x23\x7f\x8c\x87\xcd\xe6\x3d\x8b\xd1\x0a\x63\xb8\xb7\xed\xf9\x95\x8b\x37\x5c\x77\x69\x05\x01\x5a\xe5\xe6\x3f\x1b\x98\x9f\x13\x7c\x4e\xce\xb2\xd8\xa6\x9b\x2b\x3e\x70\x5d\x8f\x0c\x06\xb4\xdb\xf1\x3a\xee\x60\x40\x8e\x28\x67\x7c\x96\x8e\x36\x63\xbe\xda\x6f\x5a\xad\xfd\x63\xab\x95\x59\x4f\x6c\x2a\x46\x38\x66\xa3\x19\xe4\x5a\xb1\x45\xe9\xd5\xd0\xd3\x99\xcb\x40\xd7\xd0\x87\xfd\xb6\x9e\x7e\xcf\x10\x56\x92\x29\x49\xb2\x75\x59\xab\xf5\x68\x4b\x9c\xb2\xdd\xc3\x94\x6f\xf7\x17\xa8\xec\x28\x73\x70\xf2\xe7\x30\xd3\x0d\xdc\x65\xa2\x47\x3e\x1b\x1e\x03\x25\xb1\x67\x6b\x09\x75\x17\x3c\x44\xb2\x50\x3a\xa4\x8c\x60\xb8\xe5\xee\x59\xbd\x77\xe9\xe3\x53\x8e\x9e\x41\xaa\xc9\xe8\xa6\xa5\xa3\x51\xa1\x47\x63\xc5\x72\xc7\x13\x94\x85\x8f\xc4\x17\x77\x57\xb7\x17\xb7\xc6\xb0\x6d\xc3\xd3\xe1\x02\xf9\x68\xc5\xc5\xe8\x76\x8c\x25\x1c\x59\x8d\xc8\x18\xb3\x05\x52\x09\x98\x73\xbe\xdc\xed\x36\x9c\xf3\xcc\xf4\xac\xb1\x29\x0c\x0f\xef\xf9\x63\x66\x22\x70\xd1\x44\x2b\x7e\x6f\x44\x78\xd8\x91\x00\xea\xc2\x34\x11\xa0\x7b\x58\xc0\x4a\x9b\xd8\x43\x7a\xa2\x52\xec\x7c\x73\x73\xfd\xe2\xaf\x7c\x09\xb1\x73\x73\xfd\xf1\x87\x9b\xb7\x7c\x5a\x59\xdd\x36\x23\x5d\xc3\x8f\x65\x6b\xdc\x67\x5e\x1f\xfa\x6d\xd6\x57\x94\xc5\x91\x45\x42\xc5\xe1\x97\xf6\x30\xb2\x42\x3f\x0d\x36\xe2\x3c\xcb\x76\x9e\x46\xe7\x86\xa9\x84\x9c\x74\xcc\x0d\xf9\x95\xa1\x75\x8f\x11\xe5\x7c\xe5\xb9\x5f\x22\x7e\x3a\x4f\x10\x3f\xc6\xee\xde\x23\x5f\xaa\xa4\xfb\x44\x25\x5d\x46\xbb\xb2\x92\x2f\x09\xb6\xe8\x53\xc6\xfb\x46\xc2\xa4\x7c\xca\x8c\xee\x2f\x93\x36\x79\x27\x29\x50\xcf\x2d\x1c\x3f\xcb\x62\x1c\xdb\x8e\xf3\x74\xe3\xcd\xb9\x87\xad\xa2\x6b\x65\x7d\x5f\xa4\x17\x9f\x30\x04\xd7\xee\x2b\xba\x83\xdd\x01\xeb\x0e\x72\x86\xd6\x3b\x69\x57\x96\x99\xd5\x11\x4a\x95\xba\xe3\x09\x51\x9c\xd2\x97\x80\xcf\xd3\x32\xe5\x90\x21\x0d\x5f\xab\x9f\x6b\x78\x0c\xdf\xb6\x51\xc4\xfd\x92\x69\x93\x8a\x89\x99\xbf\xda\x76\x8c\x22\x6c\xdb\xa1\x6d\xcb\xa6\xa2\xcc\x2f\x87\x52\x46\x28\xcd\xc1\x91\xf7\x55\x2e\xe6\x65\x30\x95\x5b\x26\xc5\x99\x0b\x74\x7a\xca\x0d\x73\x28\x10\xce\x09\x06\x7c\xe8\x90\x39\x14\x28\x1d\xb9\x63\x5c\x22\x29\xe4\xeb\xa1\x83\xa6\xc9\x06\xa9\x82\x06\x95\xbc\x3a\xed\xc0\x3f\xba\x52\x00\xd2\x11\xad\x2d\xa5\x3f\xe8\xa2\x9d\xd3\x45\x21\x1d\xb5\x4f\x97\xd7\x5f\x0f\x9d\x44\xe3\xc2\x71\xcf\x7b\xca\xa6\xac\xb4\x27\x8c\x1d\x96\xf5\x9b\xa5\x18\xdb\x23\x71\x04\xca\x3d\xc3\x6a\x88\x1f\xeb\x43\x66\x03\x16\x23\x81\x87\x79\x40\x71\x0b\xb3\xdc\xbe\xab\xec\xaa\xe2\x9d\x30\xc6\x12\xa8\x5f\x31\x74\x0b\xf2\xd8\x06\x10\x1c\xf9\xab\x3c\x69\xad\x55\x44\xd4\x56\x24\xb2\x2a\xab\x43\x3c\x07\xa3\x50\x69\x76\x71\xd9\x4a\xac\xdf\x67\x7d\xd5\xb1\x93\x5e\xfa\xd5\xd9\xaa\xc4\x71\xad\x1a\x25\x9a\x19\x51\x5f\xcc\x84\x94\x87\xde\x3f\x12\x18\x55\x0f\xac\x92\x6f\xce\x97\x51\x14\x3f\x39\x40\xe5\x13\x66\xdb\xb9\xb8\x56\xbe\xc8\xcf\x4a\x67\xbd\x87\x6d\x76\xb8\xfa\x5f\x04\xb2\x4f\x08\xfe\x33\x1f\xab\xfe\x49\x81\x4c\x06\x64\x3a\xfd\xb2\xed\xee\x57\x70\xe7\x85\xa6\x5a\xd9\x4a\x16\x14\x54\xca\xc5\x28\x50\x14\x54\xca\x2c\x4d\xa5\x5b\x5c\x69\x88\xf1\x91\x59\x5f\x0e\x42\xfa\xa7\x2d\xb8\x4f\x7a\x5f\x69\x86\xa4\x24\x07\x08\x86\x29\x8a\x51\xa8\xf0\x7e\xa8\x4e\x7a\x8a\xc2\x4c\x12\xe0\x67\x5a\x65\xe1\xe8\xec\xc6\x7d\x2d\xef\x78\xa4\xa0\x5d\xee\xe6\x06\xfe\xbe\x4c\x05\xf7\x8f\xac\x9f\xeb\x55\x27\xfd\x42\x75\xa2\xe7\x93\x2a\x16\x7f\xbb\x3f\xd3\x1e\x59\x11\xd4\x1c\x8d\x1a\x83\x4f\xad\x8d\xac\xf7\xdc\x82\x14\x7c\xbc\x2d\x69\x2e\x78\x8c\x22\xd8\x4a\x62\x85\x85\x88\x80\x8f\xf7\x18\x02\x99\xaf\x65\x35\x4a\xd1\x45\x4a\x08\x33\x53\x47\x55\x9c\xbe\xb4\x79\x8c\x1c\xec\xd7\x69\x57\xfa\x83\x13\xca\x6f\x8f\x6a\x9a\xb3\x6f\x68\xce\x7e\xc7\x90\x9c\x72\x32\x96\x4a\x78\xd9\x35\x26\x31\x87\x53\x31\xe7\x4d\x34\x1a\x3b\x9f\xc4\x63\xa2\xc2\x34\x7f\x4e\xad\x20\x34\x09\x08\x63\x98\xd5\x71\xd6\x72\xae\x4e\x6d\x92\xbb\x42\x5b\x9e\xa0\x3b\x48\x61\xa5\xe5\x31\x0b\xb8\x85\x09\x3c\x1c\xc5\x1f\x99\xdb\xb6\x90\xbc\xc3\xe7\x8c\x96\xfb\x3c\x12\xe3\xb3\xaa\xf3\x83\x36\x77\x62\xea\xd1\x18\x2b\x1d\x45\xd6\x28\xdb\x7e\x67\x06\x6a\xe2\xa9\x90\x1a\x07\xf9\xe0\x9a\x57\x96\x0f\xde\xf1\xc2\xae\xea\x1e\x3e\x48\xfe\xe5\x73\x25\x50\xc0\x0b\xfe\x79\x34\x1d\xef\x76\x9f\x47\xd6\x7f\xfc\x8f\xf9\x94\x8e\x77\xbb\x7b\xdb\xfe\x3c\xba\x1f\xc3\x27\xfe\x62\xb7\x7b\x40\xf7\x18\xde\xf3\xfb\xe1\xbb\xe1\x03\xca\x8d\xae\x30\xfb\x94\x99\xb5\xdd\xf0\x1c\xf4\xa5\xb6\xfd\x39\x53\x68\xef\x76\x2f\x24\x19\x7e\x63\xdb\x68\xc2\x97\xe8\xa6\x50\x47\x09\x8c\x25\xdd\x60\xbc\x8e\x4b\xc4\xc3\x44\xd1\xcf\xb6\x8d\xd6\x68\x02\xd7\xca\x96\x2b\xde\xed\x6a\xe8\x90\x89\xea\x77\x84\x26\x30\x85\x19\xc6\xf0\xce\xb6\x5f\xd8\x76\x36\xdc\x26\xe7\x2f\x9c\xd0\xbf\x97\x88\xe0\x03\x6f\xba\xf0\xa9\x66\x0f\xbc\x28\x69\xbb\xf6\xea\x52\x8e\xe6\xe3\x6e\x27\x57\xb3\xf9\x41\x0e\x5f\x37\xf0\x19\xa6\xf0\x09\x83\x32\x71\xff\x04\xfe\xe8\x7a\xcc\x67\x70\x2f\x09\xfb\x05\xdf\xea\xe6\xd8\xbb\xe1\x27\xf6\x80\xb2\xc6\x31\xc8\xb5\x66\x1b\x9d\xa8\xd6\x1d\x83\x99\x12\xf6\x7e\x0f\x8f\x4a\xae\x7e\xab\xdd\x69\xd4\xcf\xe7\xdd\x2e\x40\x9f\xe1\x16\x16\x92\xe5\xd0\x0e\x34\x21\x0a\x9d\xf7\x5a\x79\x3c\xdf\xed\x3e\x60\x48\x61\x91\x4b\xbc\x16\x5a\x98\xde\x65\xc4\xed\x1e\xe9\x8b\xb3\x03\xaa\x35\xc6\xfa\x98\xf6\x3b\xac\xdf\xd1\x18\x0f\xfa\x03\xd6\x97\xd4\x6e\xff\xa4\x7b\xff\xd1\x11\x0b\x79\x93\x28\xb9\xaa\xb6\x47\x1d\x79\xe3\x51\x3c\x46\xf8\x2c\x30\x80\xb1\x3c\xbb\xa1\x0a\x74\x6a\x22\x77\xc5\xd1\x3d\x0a\x2a\xc0\x4a\x83\x50\xba\xc7\x19\x94\x8d\xf0\x76\xff\x94\x23\x74\x6a\xdb\xcd\xb0\x6a\x3d\x14\x94\xbb\xe3\xcb\xee\x40\xc2\x7d\xdd\xa5\x44\xed\xa0\xe3\xe5\xd6\x12\xa3\x40\x7b\xae\xca\xbc\x35\x3b\x22\xd9\x83\x40\x7e\xb9\x63\x19\x9a\xa8\xca\x81\xfb\x5f\xe9\x73\x9a\xb7\x6d\xbc\xc2\x41\x4b\xad\x9a\x22\x73\x0f\xef\x3f\x11\x2d\x60\x9b\xe5\x79\x82\xab\x6b\x12\x9d\x67\x70\x82\xc0\x50\x84\x85\xf8\xbc\xba\x27\x25\x58\xd7\x8c\x77\xbb\x18\x11\x17\x5f\x51\xea\xd2\xae\xd3\xe9\x75\xbd\x41\xa7\xef\xf6\x3c\xd2\x37\x5f\x2e\xeb\xbe\x9c\x53\x71\x4e\xbc\x26\x8f\x91\x7e\xc2\x75\xd6\x35\x2e\xe7\x48\xf0\x96\x24\x08\x99\xb8\x3a\x27\xe2\xbc\x67\xdb\xe2\x52\xfe\x0e\x45\x4b\x3c\x13\xcf\x29\xcb\x7a\x85\x04\x3e\x27\x7b\x16\x9b\x31\x9c\xd4\x64\x0d\xda\x39\x91\xb4\x8a\x1e\x20\xe0\x21\xa2\x70\xde\x55\x7a\x20\xf5\x48\xdb\x12\x79\xc8\x47\x42\x3d\xfc\x0c\xd1\xf3\x48\x7b\xae\x52\x38\x97\x6c\x6f\x69\xf0\x9a\xd4\x8a\xa3\x75\xad\x5f\x09\x84\xb0\xe6\xb9\xb6\x59\x48\xcc\x13\x97\x04\xcd\xeb\xcb\x64\xb8\x7c\x86\xd6\xcf\x93\xe7\x51\x8b\x3c\x0f\xce\xc9\xf3\x00\x3f\x4b\x9e\x45\x0c\x85\x92\x8a\x41\xa4\x15\xc9\x94\x35\x3e\x47\xe9\xf9\x1a\xe3\x2b\x7f\xb7\x0b\x9b\x3c\x94\xa5\xc8\x73\x17\xb3\xe5\xb3\x50\x2e\xeb\xa0\xcd\x06\x92\x63\x1f\x1c\x11\x59\x07\x3d\x5d\x46\x0b\xb2\xaa\xa3\x35\xf5\x24\xab\x09\xee\x9b\x09\xee\x0f\xc5\x79\x69\x82\x97\xd1\x02\x91\x96\xc8\x78\x82\xc1\x13\xb1\x53\x54\xfe\x24\x58\x84\x75\x2d\x15\x4b\xba\xdb\x89\x26\x17\x72\x61\x2f\x5d\xe5\xb7\x96\x55\x7d\xd2\xcd\x8b\x74\x3c\x49\x1a\x8a\xd4\xb7\x0e\xdc\x91\x8c\xa4\x4f\x7b\x47\xf8\xdc\x85\x8c\x1b\xa9\xdc\x7d\x53\xea\x4f\x29\x78\x0b\xac\x79\x53\x29\x42\xea\x22\x7c\x24\x28\xc7\x2a\x62\x23\xb9\x72\x5d\x59\x14\x26\x68\xbb\x57\xe6\x0f\xb0\xac\x60\xf0\x08\x09\x88\xc1\x1c\xd1\x6d\xc0\xac\x77\x56\xab\xd1\x6a\xf9\xf0\xa0\x82\x32\xe1\x3d\x4c\xcb\x81\xc0\xfe\x7a\xfd\x33\x8b\xe1\xed\xf5\xf5\x2b\xd6\x24\x60\xbc\x30\xd8\x31\xd8\x0a\x0b\x9b\x47\x2b\x79\xbc\xbf\x8d\x96\xe5\x28\x1f\x82\xa1\x43\x1f\x9a\x86\x18\x5a\x1f\x2c\x66\xbd\xb7\x70\x4b\x07\x59\x0f\x94\x15\x9a\xae\x2e\x29\x55\xf7\xda\xd2\x91\x18\xb2\xf7\x6b\xeb\x4c\x5d\x9d\x90\x9b\xea\xc6\x63\x27\x50\xc6\xe2\x3f\x09\xff\x53\x4d\xdf\x4e\x54\xdc\x74\x2b\xf5\x36\xc9\x71\xb5\x0f\x7b\x88\xc2\xd7\xb1\x10\xbf\x89\x3a\x79\xf8\xda\xb6\xa7\xca\x2e\xca\xb6\x13\x45\xe4\x9b\xa6\x6c\x5b\xd6\x04\xc2\xb8\x67\x7a\x8c\x74\x72\x09\x78\xd9\x92\xd2\xc8\x61\x06\x27\x05\x1c\x99\x32\x98\xb4\x7b\x4a\xc0\x01\x01\x8f\x9d\xef\xd7\xa9\x72\xc5\x7f\x77\x9b\x88\x78\x23\x24\x78\x73\x7e\x12\xb7\x7f\x0d\xd2\xc3\x2f\xea\x2a\xab\x55\x1c\x4d\x45\x92\x80\xcf\xe3\x2c\x9e\x21\x24\xdc\x32\xc9\x16\xd7\xac\x0d\x8a\x9e\x12\xb5\x6b\xd7\x96\x23\x37\x33\x08\x95\x82\x37\x91\xfc\x27\x8f\x9c\x59\x74\xef\x07\xfa\xe6\x3a\xf1\x39\x48\x11\xbe\x10\x17\x12\x41\x0a\x67\x1e\x82\xe0\x42\xa1\x2a\x85\xc8\x42\x54\x52\x3f\x6a\x14\x29\x86\x6b\x84\x59\x6e\xf6\x1e\xec\xf7\xf9\xb3\x12\x3b\x89\x30\x15\x31\xd2\xd6\x87\x09\xae\xb8\xbc\x45\xaa\xe2\x8f\xc1\xf4\x13\x5a\xe2\x7d\xee\x90\xdb\x0c\xe4\xcc\x84\xfe\x26\x58\x48\xbc\x2e\x2b\xc9\x5f\x9c\x24\xf5\xc3\x99\xbf\x8c\x42\x21\x69\x1b\xdf\xb6\x7d\x27\x16\x49\xb4\xdc\x88\xcc\x81\x27\x4f\x30\x9c\x1b\x3e\xab\x34\x3a\x75\xd2\x3b\x11\xca\x06\xb5\x78\xb4\xf2\x31\xcc\x24\x19\x59\x7f\x8c\x41\x74\xd3\x85\x19\xcf\x04\x68\x26\x2a\xda\x47\xf1\x39\x7d\x1b\xcd\x04\xb2\x2c\x7c\x26\xa9\xc5\x00\x2d\xb1\x13\xe9\x25\x44\x33\xd8\x4e\xef\xfc\xd8\x9f\xa6\x22\x7e\xe5\xa7\xbe\xba\xf5\xb1\xea\xf1\x37\x73\x66\x7e\xea\xf3\x39\x6f\xce\x8f\x89\xe7\x5c\xa0\xb4\x9d\x87\x2c\x06\xc5\x01\x65\x37\xec\x28\xbf\x05\x4d\x3f\x84\x18\xc4\x6e\x87\x04\x0f\x61\x2d\x99\x88\x94\x87\xc6\x4f\xbc\xc7\x48\xbb\x67\x78\xd1\x4c\xd0\x37\xf8\x6a\xa7\xcc\xe2\xc2\xbe\x32\xd6\x39\x53\x06\xce\x2b\xbd\x19\xb9\x0e\x05\x76\x60\x29\x1e\xcc\x0b\x86\x39\x2d\x87\xac\x38\xb6\xb2\xf9\xc6\x9f\x35\xcc\xc6\x6e\x94\x84\x7b\x92\x39\xe7\x02\x42\x1e\xef\x8b\x5b\xb8\xd4\x82\x6a\xa7\x7c\x93\x22\x81\xa7\x8a\x6c\x57\x50\x65\xce\xbc\x4e\xdc\x22\xbb\x19\x1a\x49\x47\x66\x64\x37\xf8\x3a\xcd\x4f\x37\xe3\x79\xdd\xcc\x75\xde\x35\x6a\x6d\xe2\x1a\xe5\x83\x72\xbf\x4e\x8c\xfb\xf5\x3a\x43\x0e\x7e\x22\xd1\x54\x99\x98\x59\xef\x76\xc7\xb8\x40\xab\xc3\xb6\x7b\x48\x95\x72\x94\x7f\x50\x00\x18\xc9\x46\x2d\xff\x76\x3a\x13\xf3\xc5\x5d\xf0\xcb\xa7\xe5\x7d\x18\xad\x7e\x8d\x93\xb4\xd0\x96\x49\xc2\xd0\x83\xb0\x10\x66\x65\xd6\xbb\x55\x73\xda\x74\x24\xc6\xca\x51\x00\xbc\x26\x5f\xa3\xed\x1e\x04\x1e\xc5\xe3\xdd\xce\xf4\x53\xf1\x9e\x2a\x3d\xc5\xd8\x78\xbe\x5a\xb8\xc9\xc3\x8a\xf9\x5d\x25\x54\x84\xaf\x0d\x6c\x8e\x22\x43\x2c\x39\x81\xa9\xb2\xbb\x99\xf3\xc8\x99\x5f\xac\xaf\x96\x17\xb9\x65\xce\x0c\xee\x78\x52\x38\xb3\x6a\xeb\x1b\x58\xf1\xe9\x30\x44\x77\x38\xf3\x79\x9d\xa2\x3b\x8c\x99\x4c\x81\x7b\x9e\x69\xa2\x60\xc3\xdd\x8b\xfb\xab\xcd\x05\x9e\xf1\xd5\x68\xd3\x6a\x8d\x15\x0b\x34\xd7\x27\xf5\x0e\x66\xca\x37\x7a\x34\x1b\xf3\xbb\xd1\x6c\x5c\xb2\xe3\x61\xeb\xd3\x96\x3c\xb9\x23\xb8\x71\xaa\xd1\x20\xde\xb8\x83\x0f\x4e\x4a\x00\x73\xf3\x37\xd7\x35\x56\x0e\xae\xd9\x0e\xb4\x8b\x91\xf5\xe6\x5a\x5f\x33\x6b\xc9\xad\x51\x5a\xe6\x8a\x0b\x73\x76\x98\xd4\xfe\x1a\x48\xfe\x65\x1e\xfb\xf7\x42\x11\x1e\x81\x19\xb3\xf6\x6e\x74\x92\xf4\x71\x29\x9c\x59\x90\xac\x96\xfe\x23\xb7\xc2\x28\x14\x16\x08\xe4\xb5\xb1\xe3\xaf\x56\x22\x9c\xbd\xbc\x0b\x96\x33\x7d\xd7\x62\x12\x4f\xb9\xf5\x8b\xbf\xf1\x75\x68\x5e\x66\x01\x4a\xb9\x52\xb7\xa7\x22\x4c\x7f\xd2\x21\xe0\x32\x08\x86\x9d\x68\x25\x42\x84\x21\x75\x1e\xe2\x20\x15\xc8\xba\xd4\xc5\xae\x72\x18\xf7\xda\x6c\xe5\xcb\xbf\x3d\x37\x9f\x2c\x99\x7d\xba\x8c\x12\x81\xe4\x8e\x4f\x9d\xd7\x17\xe1\xf9\xf9\x05\x36\x26\xca\xa5\xcb\xb3\x46\xc1\x28\x1c\xe7\x86\x19\x09\xaa\xf8\x4c\x57\x6e\xa2\xad\x0b\xf1\x12\x54\x2d\xaf\xb9\x18\x22\xbf\x22\x10\x12\x72\xee\xe5\xa9\xf6\xa1\xfc\x41\x66\x87\x60\x14\x8d\xb9\xc0\x2c\xe0\x09\xaa\x78\xc1\x07\x2c\x44\x81\x11\x3d\x13\xd7\x65\xc4\x75\x81\xd0\x2e\x23\xb4\x9b\xa9\xaa\xb4\xf2\xc2\x65\x3d\x17\xbc\x36\xf3\x14\x9c\xf8\xa2\x4d\xde\x53\x76\xbd\xc6\x32\xd1\x04\x86\xd3\x8d\xa8\xfd\xe6\x75\x98\xd7\x51\xc1\x87\x4f\x4a\x5c\x33\x4b\xe5\x76\x26\xbd\x74\xbd\x6a\x0c\xbb\x6e\xbf\x3e\x1c\x9a\xe4\xde\xab\x55\x2a\x17\x96\xfc\x4a\x18\x15\x38\x27\x95\x2b\xe8\x67\x27\x6c\xcd\xdd\x8b\xe4\x6a\x7d\x81\xb5\xc1\x73\xc4\xfd\xd1\x5a\x9e\xb3\x74\x14\x8d\xab\x16\x8f\xd9\x31\x2a\x0f\x26\xa3\x86\x88\x5b\x23\xcf\xcd\xc3\xbd\xb9\xb9\x57\x71\x2f\x0b\x53\xe1\x66\x10\xb4\x6d\x20\xa8\x51\xdf\x7a\x4a\x94\xf6\x85\xc8\xd3\x26\x28\x9c\x9c\x85\xe5\x31\xe9\x28\xb4\x1d\xa0\x84\x56\xda\xd7\x71\x5d\x8e\xfd\x66\xa2\x07\x16\xce\xde\x92\x34\x51\x69\x79\x04\x30\xd4\x0c\x9d\x79\x11\x69\x10\xc4\x28\x1d\x9b\xbd\x63\x00\x48\x26\x6e\xcc\x03\xb1\xe8\xc5\x36\x0b\xac\xa8\xc5\x62\x99\x4f\x0a\xa9\x8b\x90\x35\x6e\x5b\xb2\x18\x41\xd9\xe9\x1b\x22\x7e\x14\x79\xaf\x1a\xd4\xd1\xb6\x6b\xa7\xe9\xad\x7f\x2f\x92\xe1\xe9\x4f\xe6\xd6\x6c\xcc\x46\xe3\xb3\x2f\x60\xcf\xc8\xb6\xad\x91\x89\x77\xa6\xa1\xc8\xd8\xe2\x99\x9d\xb7\xa8\x22\x89\xd2\x14\x2b\x84\x7b\x10\xcf\xb2\x11\x65\x37\x25\xee\xf7\x48\x48\x40\x1f\xe7\xa2\x73\xb7\xcd\x88\xdb\xce\x66\x53\xcd\x59\x4d\xe8\xb3\x62\x37\xf5\x72\xf8\x9b\x21\x0f\x4b\x6f\x66\x0b\xac\x1c\x24\x58\x58\xed\x92\xd3\xf3\x50\xcb\x47\xca\xd6\x02\xd3\xab\x1e\x23\x6e\x4f\xc3\x04\xd5\xa7\x1a\x45\xe9\xc9\x16\x34\x32\x4f\x4c\x88\x65\xf7\x34\xaf\x40\x0e\x02\xb9\x1c\x21\x93\xe8\x48\x02\x79\x0c\x4f\x17\x22\x2d\x59\xed\xd6\x0e\x4c\xe8\x60\x2f\xb1\x1a\xdf\x50\x8c\x82\x71\x6d\xf0\xc6\xb2\xa2\x55\x4b\x8c\x8b\x18\xb3\xe5\x6f\xc3\xca\x5b\xd1\x37\x56\x29\xa2\xbb\x37\x8c\x54\x6c\x06\xad\x62\xd5\x40\x37\xc3\xc0\xea\xa8\xa8\x19\x3a\x29\xe7\x2b\x66\xc8\xa0\xdd\x0e\xc1\xa8\x49\xea\x51\xef\x93\x81\x8c\x7c\x1d\x28\x4c\xc2\x19\x17\x96\x7c\xa4\xe3\x08\xf8\x8d\x20\x6c\x24\xd8\x6f\x6a\x4d\x49\x02\xbe\xe4\x04\x73\xcb\x60\x15\x77\x26\xd3\xe2\x2a\x30\x29\xb3\xf0\x54\x01\x49\x6c\xdb\xe8\x5f\x03\x15\x29\x6c\xb7\xcb\xcb\xe4\x50\xf3\x60\xc8\x1a\x56\x74\x08\xeb\x90\xd2\xc0\x4f\xaa\x41\xd5\x3e\x0f\xf5\x3e\x3f\x5e\x72\x49\xbc\xd5\x2e\xb4\x5c\xe1\xf0\xc4\x0e\xae\xb1\xaf\x91\x3b\x78\xbb\xaf\xd5\xac\x66\x9b\xf7\xa4\xea\xb1\x47\xab\x56\xcf\xbd\x27\x22\xc6\x68\x25\x15\x0a\x4d\xe4\x7f\x65\xa8\xac\x2e\x37\xd3\xef\x23\x31\x56\xf1\x5e\xce\x7c\x49\xb4\xa6\x28\x92\x5b\x35\x76\x3e\xb4\x62\xe7\xf5\xb3\xaa\x7d\x62\x64\xdc\xc7\xb2\x48\x1c\xe0\xab\xd1\x6a\x9b\xdd\x92\x07\x92\x0a\xcb\x7f\x12\xc5\x1e\x53\xf7\x1d\xb7\xa0\xee\x9d\xf9\xd7\x06\x0e\x2b\xa8\x63\xb9\xbd\x14\x72\x5d\xf3\x10\x25\x12\x8b\x65\xd1\xc3\x60\xca\x5d\x98\xf3\xd1\x58\xc7\x0a\xf3\x4d\x9c\x30\x45\xca\x1a\xcd\x5c\xa2\xb6\xd0\x5c\x6f\x21\x31\x1c\xf9\x90\x8c\xfc\xf1\x98\x25\xe5\x9b\xd8\xe6\xfb\x32\x1a\x2e\xa8\x59\xbd\xb1\x14\xf2\x51\x83\x7e\xc2\xdc\xbe\x7d\x60\x6e\x9f\xf9\x7a\x7b\x2e\x76\x6e\xc4\x7c\x29\xa6\x65\x7b\x8c\xc8\xb6\x23\x27\x7a\x08\xff\x7a\xb4\xd9\x8c\x2d\xbe\x33\x47\x81\xd2\x2a\x6a\x83\xfc\x3c\xf0\x40\x9a\x47\xb2\x51\x17\x67\xa6\x15\x30\x6f\xa8\x72\x4d\x46\x64\xdc\x29\x39\xbe\xf7\xa0\x6c\xd7\xb2\xf2\xe3\x44\xbc\x5e\x46\x7e\x6a\x44\x2b\x1d\xac\x6e\x2b\x28\x75\x96\x3c\x8f\x91\xfc\xd2\xc5\x2d\xeb\xdc\x95\x8c\xcc\x39\x79\xee\xd6\xc4\xd3\x0e\x8d\xf1\xa5\x04\x05\x6d\xac\x42\xa4\x17\x41\x13\x24\xc1\x18\xd8\xb6\x75\x2e\x81\x62\x71\x3d\xf9\xf0\xdc\x65\x81\x16\x03\x93\x76\x87\x91\x76\x07\x48\xbb\xcb\x48\xbb\x5b\x1a\xc1\x93\x96\x39\x6a\x04\x6f\xc2\x83\xfe\x9b\x40\x75\x5d\x39\x83\xcf\xff\xd3\xe8\xbc\x35\x1e\xba\xa3\xcf\xff\x34\x7e\x5e\x1a\x58\xbf\xc9\x79\x8c\x82\x96\xe5\xf6\x2d\xbc\xdb\x51\x9a\xbf\x7f\x26\x3d\x0b\x0f\x6b\xa8\xe8\x83\x31\x16\x4a\xed\x00\xd2\xab\xab\x2b\x77\xb7\x43\x91\x93\x8a\x24\x45\x01\x1e\x4a\x62\xc6\xc5\xf8\x4b\xa3\x3b\x12\xa0\x7e\x29\xae\xf5\x56\xb0\x26\x81\x0d\x53\x38\xff\x80\x1c\xd8\x6a\xb3\x59\x15\x84\xd6\xc0\x99\xe3\x0b\x21\x0e\x39\xaf\x4c\x30\x3b\x38\xe9\xbf\x57\x5c\x4b\x10\xaa\x30\x59\x15\xc3\x21\x65\x5c\x91\x71\x88\x67\x1a\x20\x05\x92\xe8\xcd\xe6\x07\xb9\x10\xe5\x02\x25\x79\x92\xa3\x4c\xdc\x91\xab\xcc\x33\x21\x60\x8f\x0d\x7a\xaa\xd3\xbd\x2f\xf0\x08\xed\x27\x5c\x80\xb2\x70\xd1\xe4\xf4\xa5\x12\x84\x3c\x61\x27\x50\xc0\x9e\x40\x22\xb1\x14\x2b\xec\x0e\xe9\x28\x18\x43\x78\x40\xbb\x6b\xfd\x9b\x6a\xec\x24\x87\x9b\x09\x2e\x33\x33\xfe\x4c\x00\xae\x25\xe4\x49\x3c\xb5\x34\xd1\xde\x1b\x48\x9a\x1d\x59\x56\xcb\xc7\x99\x10\x22\x23\x5b\x2d\x7c\xa6\xaf\x14\x09\xc2\x64\x25\xa6\xe9\x87\x68\x1d\x4f\x45\x1d\x0c\xf5\x33\x32\x72\x0f\xe8\x64\xc4\xba\xcc\x49\xa6\xee\x2e\x4b\xff\x6c\x69\xdb\x28\x40\x3e\x58\xa1\x62\xa2\x77\xbb\x30\x7f\x91\xf4\xbc\x22\xdc\x9b\x9c\xfb\xb6\x8d\xb2\xac\x91\xc9\x15\xa9\x8f\x43\xcb\x6a\xc9\x5f\x96\x68\xf9\x87\x39\x34\x29\xc6\xb2\xb4\xf2\xf8\x57\x7e\x9f\x3e\x5b\xab\x87\xec\x2d\xb3\x56\x60\xc8\x30\xc0\x32\x1d\xb2\x54\x8c\xf7\xb8\x70\x72\x29\x45\x7b\xc9\x27\xa9\xc6\x34\xa2\x2e\x88\xd4\x5d\x90\xe8\xd8\x0e\xa3\x68\xbc\xdb\xf9\x15\x5d\x30\x2e\x49\xa9\x0d\xee\x1b\xb0\xde\x20\xf3\x57\xd1\x3c\x88\xb1\xdc\x26\xc7\x97\x7c\xd4\x8a\xbc\x3a\xca\x1b\xeb\xd0\x04\x5d\x7b\x43\x3c\x85\xd8\x83\xcc\x65\xa2\xde\xc9\x3c\xb3\xe4\xcb\x39\x07\x30\xd1\x9d\x0c\x7f\x93\x1b\xce\x46\x46\x4e\x28\xf9\xfb\x4a\xa4\x40\xd9\xa1\x86\x6c\x21\x73\xc9\xd3\x73\x26\x66\x8d\x24\x92\x29\x41\xb8\x68\x44\xe9\x9d\x88\xf5\x25\x99\x7e\x68\x48\xcf\x46\x14\x2b\x49\x42\xe1\x4b\x18\xa9\x48\xdf\xc6\x7e\xa7\xc9\xcb\x81\x8c\x6b\x5b\xfd\x0f\xaa\x55\x15\xcc\x4b\x39\x02\x06\xe1\x34\xba\x5f\xf9\x69\x70\xbb\x14\x8d\x58\x4c\x45\xb0\x11\x71\xc9\x55\xb1\x1a\xa0\xbe\xe3\xb1\x8e\xa7\x2e\xf5\xf9\x8a\x98\x2c\x10\x6a\x2a\x4a\xf1\xc8\xb5\x8b\x00\x3e\x3f\xf4\x1b\xc8\xbc\x5b\x20\xe1\x11\xac\x39\x52\x4e\x1b\x10\xf2\xe7\xb7\xcf\x9e\x2f\x20\xca\x44\xda\x96\x2f\x59\x09\x63\xdc\xa0\xdf\xdc\xa6\xf2\x48\xf1\x93\xf4\x4d\x38\x13\x9f\x77\x3b\x25\xa9\x2d\x12\x70\x1e\xb6\xb5\xc9\xf9\x73\x84\x87\xc3\xe7\xaa\x13\xc8\xb2\xf0\x88\x8c\x2f\xd0\x7a\xb7\x5b\x62\x15\x7c\xf1\x58\x47\x29\x07\x93\xc0\x54\xb9\xdc\xe6\xe4\xb0\xd2\x38\xc8\x59\xd6\x83\x43\xd6\x7f\xb2\x5a\x53\x27\x51\x10\xa2\x65\xfd\x1d\x1a\x36\xff\xf6\xb7\x04\x5b\x60\xb6\xc9\x54\x1e\xc2\xb5\x0a\x6d\x38\x2d\x77\x2b\xcc\xe2\xe9\x4d\x41\xa8\x0c\xa1\x6d\xa3\x52\x0e\x3e\x35\xee\x04\xc3\xd0\x09\x64\x42\x2b\x94\x20\xd8\xc4\x66\x4e\x31\x2c\xb5\xe9\x67\x1e\x0c\xca\xb6\xcd\xd1\x92\xf9\x20\x3e\x8a\x2e\x94\x70\x72\x91\x5c\x1e\x0a\x3d\xcf\xe9\x45\xd2\x6a\xe1\x5c\xcc\x54\x80\xfd\x64\x6c\xdb\x28\x1c\x25\xe3\x2c\xf6\x96\x24\x57\xc3\x4a\xbc\x6a\xc9\x19\xf6\x7a\xac\xa7\x90\xc8\xf1\x9d\x2e\x47\xe4\x7e\x90\x1c\x4a\xcb\x72\xbe\x8e\xf3\x74\xa8\x0c\x0a\x77\x3b\xf2\x5c\x70\x4e\x9e\xa7\x4c\x34\xb9\xb0\xed\xb4\xc9\xd3\x0c\xbb\x9e\xbe\xa7\x25\x33\x95\xd3\xc2\xa6\x23\x6c\xaa\x38\xa6\x66\x11\x75\xb2\xc9\x79\x7a\x1c\xf9\xbb\x65\xb1\xc6\x54\x39\xce\x26\x22\x6d\xf8\xea\x42\x5d\xbd\x41\x9b\x56\x45\x02\xb8\x4d\x44\x6a\x6c\x2f\x9d\xe4\x80\x6d\x45\xd6\x64\xa2\xca\x4d\x26\x56\x10\x6e\xf7\x05\x65\x63\x22\x63\x4b\xda\x02\x19\x6f\x80\x03\x2f\x42\x49\xd3\xaa\xcb\xa7\x0e\xb9\x65\x28\x55\xaa\xd5\x71\x14\x63\x94\xc2\x68\x8c\x21\xe6\x3a\x92\x64\xce\xb0\x2a\x8b\x90\x92\x6d\x45\xcc\x9b\xee\x91\x76\xa6\x3c\xfd\x81\x96\x10\x49\x7e\x38\x6f\x86\xa7\x1a\x3f\x28\x5d\x22\xda\xee\xa1\x49\x32\x37\x26\x0c\xd3\x3b\x31\xfd\xc4\xb4\xad\x86\x4b\x18\x71\x49\xc5\x58\x3e\x33\x1c\x24\xc7\xd7\x88\x3c\x19\xa8\x65\x60\x62\x94\x76\xb3\x38\x2d\x5f\x1f\xab\x54\xc5\x59\x39\x0b\x6c\x3b\xb5\xed\x66\x3a\x8a\xc6\xf2\x68\xcc\x55\x48\xe4\x6d\xf5\x36\x01\x17\xea\xe3\x94\x29\x43\xb5\x7d\xc5\x0c\xd2\x48\xc2\x14\x2e\xca\x65\x84\xa7\x6e\x32\x29\x07\x20\xf4\x48\xd9\x60\xb3\x12\x50\xf2\x14\x1d\x14\xe1\xad\x50\x31\x53\x05\x8f\x86\x82\x95\x6d\xc7\x02\x75\xf5\x91\x24\x8a\x8e\x86\x92\x5d\x82\x50\xe9\xb6\x46\x9b\x45\x87\x4f\x47\xae\x57\x8e\x0a\xc6\x6e\x2a\x34\x34\xd2\x17\xe2\x34\x2a\x76\x17\xc9\x9f\x92\xd9\xa8\x76\x5d\x00\x83\xc9\x55\xa3\x27\x45\x21\x5d\xc3\x6f\x7b\x4a\x12\x12\x8e\xac\xc9\x64\x1a\xc5\xe2\xfc\x97\x64\x92\xdc\xf9\xb1\x98\x4d\x26\x96\x76\xf4\xad\xfd\xc2\xb7\x7b\x7c\x71\x82\xd4\x2a\x36\xb4\xee\xa5\xfc\x29\xa0\x7f\x3a\x4c\xd9\x56\xdd\xde\x6e\x65\x37\x5c\x5b\xf2\x00\x69\x76\x35\xbf\x77\x2c\x76\xcc\x13\xdc\x47\x33\xc1\x94\x25\xe5\xd0\x5a\xad\x63\x61\x31\x4b\x83\x64\x0b\xa6\xd1\xea\x31\x0e\x16\x77\x29\xb3\xfe\xed\xff\x6c\x50\x97\x0c\x1a\xaf\x44\x18\x24\x8d\xf7\xeb\xe4\xee\x93\x1f\x8b\x4d\x03\xfd\xb6\x8c\x82\x38\x9a\x7e\x72\xe2\x35\xb6\xd4\xcd\x08\x9a\xc2\x31\x2e\xee\xc6\x36\x8c\x1c\x5f\xb3\x72\xc8\x31\xb4\xdb\x5f\x1f\xba\x37\x97\x52\x80\xaf\xa8\x82\x3a\x9f\x83\x02\xd8\xef\x76\x3a\x80\x00\x8a\x78\x8c\x7c\xac\x4c\x83\xe5\xb9\x8f\x2a\xfb\x49\x07\x53\xcd\x8c\x6d\xc9\xf1\xc5\x2b\xa7\xc2\x7b\x7c\x21\xf2\x6e\xb3\xa9\x9c\x18\x2a\x36\x6b\x43\x63\x89\xaf\x54\x21\xe5\x2f\x7b\x0c\x24\xb7\xd3\x57\x41\x2b\xf7\x7a\xf3\xe5\x62\x92\xc3\xbb\x5a\x4a\xfb\xbc\x6d\x54\x11\xdd\x7f\x47\x2c\xf5\xc2\x73\x03\x12\x43\xb0\x20\xc9\x8f\x61\x15\x5a\x3d\x90\x84\x45\x86\x44\x0b\xab\x25\x77\xb7\x5b\x5f\xf1\xe5\x50\x0c\x2d\xcb\x40\x4b\x86\x22\x9e\x28\x1e\xfc\x65\x34\x13\x2f\x52\xb4\xc6\xf8\xb2\xdb\xa5\x83\xde\x6e\x17\x5d\x75\x7b\x6d\x32\xd8\xed\xd6\x2d\xa2\x3d\x95\x90\x7f\x90\xb9\x45\x64\xf6\x5e\x9b\xba\xbb\x9d\x7f\xd5\xf5\xda\x9d\xf6\x50\x0c\x93\x8c\xa9\x5f\x63\x16\x31\xf9\xae\xe5\xd2\x6b\x58\xb7\x28\x66\xfe\xb9\x2a\xd1\x42\xd1\xb9\x6a\xe9\xf2\x92\xb8\xb8\xd5\xeb\x76\xdb\x3d\xa3\x5b\x1f\x30\xd2\x1e\x68\x07\x49\x75\xc5\xe2\x69\xbb\x79\xfa\xf4\xd4\x69\x1f\x17\xc5\xb0\xa6\xc7\x97\x69\x18\xd7\x85\xff\xa0\xe2\x17\x37\x66\x91\x48\x24\x76\xf5\xa7\x53\xb1\x4a\x1b\xb1\x58\x88\xcf\xa5\x5b\x1d\xf2\x49\x36\x60\x45\xbb\x6f\xf6\x29\xeb\xeb\x6b\x20\x4f\x4a\x84\x32\x11\x5e\xcf\xc8\x83\xba\x2a\xec\xeb\x73\xeb\xf9\xa2\xac\xc5\xcc\xaf\xa6\xd0\xb6\x8c\xa6\x35\x2d\xf9\x49\xb8\x75\x69\xb5\x32\xbb\x79\x4b\xd1\xd4\x92\x28\x6c\x71\xab\x61\xb5\xe2\xd6\x5f\xb8\xf5\x97\x56\xd6\x3f\x9c\x3b\x63\x47\x60\xd9\xbf\xae\xa3\xf4\xc2\xc2\xad\xbf\x58\x7f\xc1\x90\xb4\xac\x2b\xab\xe5\xb7\xac\xcb\xe7\x56\x2b\x95\x2f\xa7\x6c\x9f\x33\x9e\x63\xbb\x3f\x0b\xb4\xb4\xd0\xd7\xd2\xc2\xf7\x4a\x5a\x18\xd6\x78\x33\x6b\x97\x67\xd9\x4e\xae\x22\x96\x60\xcd\x49\xa3\xef\xa2\x07\x11\xbf\xf4\x13\x81\xf0\x6e\x97\x1a\x6e\x56\x66\xcc\xa8\xc3\xb6\x92\x35\x66\x7c\x5b\x50\x9a\xde\x03\x59\x63\xfb\x09\x3d\x4f\x26\xc3\xce\xe0\xd1\x13\x5b\xa2\xb8\x88\xa0\x3a\xcf\x6b\x5e\xd2\xb6\xe7\x70\x28\x1a\x5a\x0d\x8b\x99\x8c\x11\x86\xa9\x16\x66\x05\x73\x34\xbd\xe4\xeb\xdd\xce\xb2\x38\x5f\x66\x42\x8f\xe4\x4c\x1b\xb4\x4c\xcf\xd7\x30\xcb\xae\xbe\x59\x82\xb2\xac\x9b\x8a\x60\x89\xe6\xcf\xf3\x08\xf0\xf9\x44\xcd\xb2\x89\x98\xdb\x36\x9a\xf1\x99\x39\x2e\x2e\xcc\x31\x06\x7f\x38\x6b\x25\x2c\x69\xcd\xf4\xd1\x68\x33\xd2\x6e\xe7\xb7\x36\x14\x47\xe4\xeb\x68\x99\xaf\x80\x35\x7a\x35\x0b\x90\xa2\x82\x00\x41\xc0\x2d\x0b\x22\x6d\x05\x19\xcc\x51\x24\x61\x49\x24\x09\x61\xb7\x26\x3e\xd0\xcb\x68\x1d\xa6\x86\x56\xbd\x15\x8d\x50\x2c\x94\xb7\xa1\x65\x44\xfd\xd1\x95\x7b\x81\xa2\xab\xab\x2b\x4e\xb0\x76\x1d\x4e\x31\x26\x76\x64\xdb\x28\x90\xcf\x67\x15\x6b\xdb\x23\x60\x70\x92\xc2\xe9\x15\xc0\xa0\x12\x22\x41\xc9\xfe\x7c\x6e\x8d\xac\x56\xd4\xb2\xc6\x16\x24\xbc\xc4\x1d\xf9\xf2\x40\x3c\xb3\xe4\xea\x9b\x54\x9d\xf2\x77\x56\xd5\x42\x50\x4b\x83\xf4\xe9\x54\x16\x07\x41\x8d\xd9\x61\xb3\x19\xc9\x53\x80\x77\x3b\xeb\x8f\xdf\xff\xd7\x7f\xfb\x2f\x56\x93\x9b\x07\x95\xbc\x57\x9b\x4c\xc9\xdf\x93\x61\x8a\xa6\x2a\x04\xe1\xf8\x4c\x32\x57\xfe\x28\x1c\xf3\x75\xf9\x90\x25\xc5\x91\xf0\x95\xf5\xe1\x52\x89\x33\xeb\x69\x0a\xc1\xcb\xf0\x09\x88\xa4\x34\x91\xe0\x39\xef\x8a\x12\xb0\x2c\x8c\x81\x1e\x7d\x58\xeb\x0f\x95\xb0\x54\xea\x2e\x58\x23\x9d\xac\x3f\x88\x47\x54\x5b\x29\xf4\xcd\xdf\xd2\xbf\x85\x7f\xdb\xfc\x6d\xfe\xb7\xb8\xf1\x6f\xff\xf5\xbf\xfd\xef\xbf\xff\xb7\xff\xfa\xbf\xfd\xf1\xfb\xef\x7f\xfc\xfe\x9f\xff\xf8\xfd\xff\xff\xc7\xef\xff\xdd\x1f\xbf\xff\xf7\x7f\xfc\xfe\x5f\xfe\xf8\xfd\x7f\xf8\xe3\xf7\xff\xf1\x8f\xdf\xff\xa7\x3f\x7e\xff\x9f\xff\xf8\xfd\x7f\xf9\xe3\xf7\xff\xeb\x8f\xff\xfc\x7f\xfc\xdf\xbf\xff\xfe\xb7\x35\x75\x69\x5f\xfd\x1f\xfc\x6d\x3d\x17\xf3\xb9\x65\xd8\xab\xe3\x5b\x85\x72\x96\xbe\xe2\x2d\xee\xf5\x8c\xba\xbb\xad\xd5\xdd\xdd\x81\x89\xa5\x2a\x59\x03\xbe\xcc\xed\xfe\xe6\x7c\x29\x79\x95\x37\xf7\xf7\x62\x16\xf8\xa9\x80\x19\x5f\xea\x30\x70\x45\xd2\x1d\x5f\x3a\xdf\x8b\x24\xf1\x17\xe2\xe5\x9d\x1f\x86\x62\x09\x2b\xbe\x74\x5e\x05\xc9\x4a\xf2\x2f\x70\xcf\x5d\xd8\xc8\xed\xf0\x78\xec\x85\xdf\x52\x8c\x79\x30\x47\x9b\x83\x1b\xf8\xe4\x0a\x65\xe1\x51\xe5\xf2\x1b\xf9\x96\x7c\x86\x14\x49\xe8\xb7\xa8\x9c\xc8\xcc\xb5\x58\x99\xb3\xe1\xfd\xd9\xdc\xb6\x67\xea\x3e\xcc\x7a\x03\xa2\xd1\x18\x42\x4e\x2e\x8e\x02\x32\x87\x17\x38\x8b\xc6\x93\xb3\xd1\x61\xab\x55\xe8\x3e\x36\xa3\x56\xeb\xbe\x62\x0f\xef\xd7\x89\x9a\xc4\x50\x14\x57\x15\x0a\x0c\x29\xde\x43\x8c\xee\x31\xdc\xef\xcb\x3e\x36\x02\x6f\x4b\x03\xdb\xc3\x91\x61\xe5\x14\x0f\xe3\x4a\xf6\x69\x61\xae\x18\xa1\x47\x10\x40\x30\xde\xb3\x95\x6d\xaf\x9c\x30\x7a\x38\xc8\xac\xd2\xca\xf9\xee\x86\x28\xe0\x28\x54\xc2\x8f\x3b\xec\xc8\xbd\x48\x21\x54\xbf\xc4\x89\xc2\x7b\xbd\x8a\x7c\x01\x31\x8f\x50\xe0\xac\xa2\x24\x35\x2b\x0b\x81\xac\x81\x2d\x1d\x7f\x36\xbb\xde\x88\x30\xfd\x2e\x48\x52\x11\x8a\xb8\xd6\xf3\xb5\x54\xd0\xb6\x9b\x4b\x27\xb8\x97\x4d\x7c\x50\x66\x13\xc9\x10\x55\x7b\xb9\x2c\xb7\x83\x44\xcb\xb2\x40\xc2\x9a\x3d\x1c\x37\x86\x2c\xd3\x45\x0b\x16\x92\x9d\xc5\x2c\xe6\x56\x14\xc6\xc2\x9f\x3d\x26\xa9\x9f\x8a\xe9\x9d\x04\xb1\x56\x10\x36\xd6\xc8\xd2\x66\x1a\x56\xd5\x3e\x20\xa9\x98\x2d\x95\x72\x61\xe7\xb8\xa2\xf2\x3a\x27\x4e\x2c\xee\xa3\x8d\xd0\x05\x75\xf0\x88\xdc\xa1\x7d\x5f\x0d\x79\x91\xe8\x18\x78\xd1\x3a\xcd\x67\x1f\x5c\x5c\x91\xbc\x28\x01\xc4\x1c\x74\x9c\xf5\x59\xee\x01\x99\xc5\x59\x56\x76\x40\x46\x86\xda\x66\x9e\xb9\x09\x41\x1d\xf1\xd3\x42\x7a\x8d\xb8\xf4\x4d\x52\xfe\x67\x08\xf2\x4b\xa5\xbe\x40\xc6\x23\x6d\xd1\x84\x2f\xdd\x61\x88\x44\x4b\x5d\x6c\x13\xe4\xc2\x43\x83\x5d\x54\xdb\x27\x65\xf6\x39\xd2\x7c\xe2\xaa\xa7\xdc\x2c\xb3\xac\x01\x71\xcf\x4a\xf1\xb4\x02\x1e\x1a\xb2\x41\xd2\x45\x41\x0d\xda\xfc\x29\x8e\xc2\x45\x43\x9f\xd6\x12\xe1\x59\x41\x83\xc5\x7d\x44\xe4\xf8\x4e\xb0\x92\xb3\x87\xa4\x35\xbe\xde\xa3\xb4\x11\x24\x6f\xfd\xb7\xc6\x61\xc3\x65\x48\x5c\xb9\xc3\x90\xc5\x18\xe5\x6e\x03\xe4\xf8\x7e\xac\x5c\x3e\xe2\x7d\x25\xfb\x12\x1f\x12\xcf\x99\x41\x20\x79\xe2\xca\xa9\xf2\xba\x9f\x58\xec\x52\x90\x45\xb9\xc8\x6a\xb6\x8f\x22\x69\x30\xf7\x60\xbd\x9f\xb8\xcf\xe9\x4b\x03\x31\x7e\xcd\x71\x65\x34\xaa\xce\x2f\x5d\x27\xd8\x7e\x22\xc4\x9c\xba\xa1\xb2\x90\x4e\x1d\x5f\x9a\x53\xa1\xe8\x82\x39\x52\xa2\xa8\x12\x2f\x34\x28\x8b\x2e\x0a\xf2\xa7\x47\x33\x3b\xb0\x5e\x16\xc7\xa3\x6b\x30\xa3\xf1\xa9\x6c\x67\x17\x4c\x90\x9e\x8e\x28\xec\x51\x13\x51\x98\x78\x3a\xa2\xb0\x5a\x86\x55\x46\x67\xdf\xab\x94\x3e\x86\x4d\x76\x11\xda\x63\x66\x67\xb6\x30\xf2\xa5\x5b\xa3\xea\x98\x18\xe9\xe7\x43\x66\x80\x73\x6d\x02\x8b\xbc\x33\x2e\xaf\x1f\x32\x9f\xce\xcf\x85\x91\xd6\x8b\x2c\xc6\xc8\x27\x23\xf5\x81\xf7\x59\x84\xab\x1b\x13\x1c\xfd\xa3\xb6\x52\x81\x97\x4a\x50\xe4\x61\xf8\x5e\xdd\xa6\xde\xc1\xf0\x8b\xf1\x1e\x7d\x63\x22\x23\xbf\xca\x6e\xce\x78\x2b\x8b\xb8\x18\xbe\x93\x23\x1e\x60\x78\x6d\x64\x7a\xbf\x71\x2d\xd8\x84\x6f\xf8\x6b\x67\x0e\x3f\xf0\xdf\x9c\x39\xfc\x3d\x0f\x9d\xe2\x6c\xc2\x8f\x3c\x74\x72\xbe\x11\x7e\xe5\xa1\xf3\x43\x10\xa6\x7d\x25\xcb\x84\x9f\x0e\xdd\xd3\xe1\x5b\x9e\x68\xb7\xf3\x6f\xd6\xf3\xb9\x88\xe1\x67\x9e\x38\xaf\xfc\xd4\xff\x31\x10\x0f\xf0\x57\x7e\x83\x5c\x0c\x7f\xc7\x6f\x10\xc5\xf0\x8f\xfc\x06\xb5\x31\xfc\x13\xbf\x41\x1d\x0c\xff\xc0\x6f\x50\x17\xc3\x3f\xf3\x1b\xd4\xc3\x20\x04\xff\x88\x9a\x2e\x86\x54\x3d\x10\x0c\xb1\xe0\xdf\xeb\xf0\x21\x09\x84\xf2\xf9\x93\x78\x4c\x20\x90\x4f\xc6\xb3\x10\x22\xc1\x7f\x2a\x04\xf5\xef\xe6\xe0\xcb\x84\x58\xdd\x04\x05\x49\xf1\x7c\x13\x2c\xee\x52\x58\xcb\x84\x5f\xa2\x20\x84\xa5\x7c\x4a\xa2\x38\x85\xa9\x7a\x52\xf7\x03\xcd\xe5\x63\x6e\x2e\x37\xd3\x6f\x95\xd0\x84\x77\x82\xbf\xaf\xf8\x08\xae\x54\x42\xf5\x9a\x9a\x7b\xc1\x3f\x21\x4b\x4e\xcd\x6c\x52\xb1\x44\x87\x8d\xfa\x32\x13\xf3\x83\xf4\x47\xc1\x7d\xe7\xe5\xbb\xb7\x1f\x3e\xde\xc0\x42\x3e\x7f\xfc\xf9\xfd\xf5\x2b\xb8\x95\x8f\x3f\xbe\xb9\xfe\x09\x26\x82\xdf\x20\x52\x8d\x34\x95\x1f\xd0\xcf\x02\xbd\x44\x02\xc4\x68\x23\xc6\x8a\x40\xc1\x18\x1e\x44\x2d\xc5\xde\x20\x9c\x2b\x9a\xe1\x57\xe5\x91\x2a\x97\x95\xf4\xd4\xda\xa1\x11\x19\x63\xe7\x56\xad\x20\x1e\xb9\x63\x59\xc9\xb5\xe0\xcd\xe6\xaf\xb6\xdd\x6c\xfe\x5a\xd2\x0f\x25\x22\xb5\xed\x6a\xe5\xba\x46\xa2\x83\x8d\x2b\xb9\x1e\x86\x77\xa2\xee\x2a\x16\x7e\x67\x78\xaa\x58\xf2\x54\xf1\xff\x2f\x93\xfc\xff\x7d\x86\x10\xa2\xf9\x3c\x11\x69\x09\x21\xc4\x7b\xf8\x20\x0e\xb1\xcf\x44\xf9\xd9\x2c\x84\xbe\xb6\x32\x03\x88\xc6\x53\xfd\xc7\x72\x74\x1c\xbf\xa1\x16\x42\x5f\x06\xd6\x94\xc4\xc8\xe7\xc3\x8e\x05\x73\xd4\x94\x15\xee\x76\x4d\x74\x6f\xaa\xc4\x59\x55\xd6\x9b\xb4\xb6\xaa\xb2\x8f\x41\xa9\xb7\xd9\xcd\xe7\x7b\x78\x71\xd8\x8c\xc9\xf1\xe9\x70\xb5\xe0\xd3\x61\xce\xfc\xb6\x11\xee\x42\xc8\x33\x5b\x31\x08\xf8\x67\xa1\x6c\xb1\x2e\xc2\xab\xf8\x02\x07\xa3\x78\xcc\xd3\x51\xdc\x6a\x8d\x0b\xe4\x09\xef\xc5\x51\x28\x91\x6f\xd4\xc3\x89\x2b\x41\x74\x90\xf9\xd9\x28\x1e\x2b\xaf\xaf\x1b\x71\x42\xf7\x16\x80\x96\xbe\x3d\x68\x07\xc1\x23\x83\xfd\x29\x5f\x9e\xb8\x04\x65\x5e\x88\x7d\xa7\x30\xe3\x2f\x50\xa2\xef\x79\x51\xaa\x9f\x99\x6d\x37\xaf\xd1\xcc\x44\x2c\xf2\xf9\xcc\x58\x2f\x49\xe0\x3e\x1a\x43\xca\xdd\x8b\xa6\x0a\xbd\x52\x89\x30\x94\xb6\x5a\x38\xd4\xd4\x7d\x64\x6e\x42\x3e\x4b\x78\xa8\xee\x74\x9b\xdb\xf6\xf2\x8a\xda\x36\x9a\xf2\x35\x9a\x42\xf9\xf6\x48\xa0\xca\xa7\xc5\x85\x98\xaf\x50\x7e\x9f\xbd\x9e\x57\xe5\x4f\x1e\xe3\x8b\xf8\x2a\x55\xd5\x07\xa3\x74\xcc\xe7\xc3\x29\x4a\x46\xe9\x18\x52\xcc\xe4\x6f\x69\x9e\x3f\x56\x48\xca\x22\x90\xb8\x0b\xe9\xf1\xe4\xc4\x79\x0b\x29\xbe\x48\xaf\xc4\x05\x56\x42\xfb\xa2\x6f\xa2\xb4\x88\xf1\x1e\x5e\x9a\x83\x57\x3d\x65\x33\x51\xf8\x92\xff\xaa\xef\x03\xc1\xf0\xbd\xa8\x71\xe9\x9d\x65\xe1\x51\x5e\x8a\xe1\xd4\x94\xfa\x20\x8c\x74\x83\x65\x4f\x15\x84\xfc\x8b\xe0\xdb\xe2\xb2\x54\x56\xbb\x75\xbf\xab\xd6\x04\xca\x38\xe1\xab\xae\x45\xc5\x7b\x10\x1b\x11\x3f\xd6\xb9\xcf\xfd\x53\xb9\xc2\xaf\xbb\x58\x07\xef\x61\x1e\x2c\x97\x35\xdb\xf9\xad\x19\x78\xed\x18\xe7\xc1\x32\x15\x71\x5d\x1f\x5e\x98\xe5\xf9\xbb\x3f\xd1\x17\x55\x71\x38\xab\xab\xf6\x1f\xfe\xe4\xd0\xc2\x99\x42\x67\x75\x55\xfe\xf3\x9f\xab\xb2\xe6\x76\xa3\xbf\xfe\xa9\x9a\x02\x8d\x67\xeb\xba\x96\x8a\x3f\x59\xe3\x74\xb9\x9e\x89\xba\xdb\x51\x1a\xe2\xcf\x55\x29\x51\x7c\xcd\xe6\x58\x8b\xa7\x76\x47\x89\x8a\xa8\x29\x1b\x3d\x59\xf6\xde\x5f\xd5\x75\x7f\xf2\xe7\xba\xaf\x49\x96\x9a\x4e\xf8\x4f\x76\xa2\x44\xe9\xd4\x94\x4d\xbe\x50\x76\x23\xe2\x44\xd4\xde\x13\x06\x29\xcf\xca\x14\x00\xad\xe0\xb5\x50\xfa\x5c\x89\x22\xdd\x8b\xf0\x32\xbe\xc0\x3a\x2a\xfa\x28\x1c\x83\xfe\x6d\xb5\xc6\x3a\xe5\xfc\x3c\x35\x69\x69\xf9\x7a\xde\xbb\x20\xd9\x43\x12\xdd\xd7\xba\xd6\xfe\xe3\x9f\x9a\x3f\x49\xd7\xd5\xd5\xb6\x14\x87\x00\x4c\x66\x5e\xdf\x2a\x84\x5e\x7b\xf3\x4e\x9e\x33\xcc\x63\xad\x42\xc0\x37\x0a\x0b\x97\x50\x3e\x7a\x89\x62\x88\x15\x46\xc7\x28\x36\x54\x14\xc4\xce\xed\x63\x2a\xde\x29\x82\xa6\x15\x3c\x8b\x9d\x6f\x7e\xfe\x78\xfd\x61\xf2\xfe\xfa\x66\x72\xfd\xdd\xf5\xf7\xd7\x6f\x3f\xc2\xaa\x74\x49\x74\x3a\x0c\xd9\x06\xa5\x10\x62\x7c\x1e\x28\x56\xeb\xcd\x09\x12\x22\x83\x56\x87\xa0\x1d\x94\xd3\xc9\x1e\x5e\x55\x91\x78\xf6\xd9\xf0\xe7\xef\x04\x2a\x4f\x1b\x48\x42\x5b\xdf\x6f\x65\x06\x18\x6a\x24\x1f\xf0\x15\x0a\x73\x24\x19\xe9\xe0\x84\x41\x2b\xbd\x8a\x0f\x69\xb6\x82\x89\xd7\x12\xef\xcb\xe0\x02\xeb\x85\x6e\x45\x63\x1e\x8e\xa2\x56\x6b\xbc\x87\xb7\x82\x6f\xb3\x80\x20\xc7\xdb\x33\x38\x44\x53\x7b\x1d\x50\xe4\x38\x67\x78\x9c\xd3\x44\x24\x39\xce\x1b\x1f\xe5\xdd\xc3\x77\x27\x66\x55\xd3\x94\x62\xb4\x10\x63\xdb\xce\xbc\xd7\x73\x4b\xb2\xd4\xb6\xf5\x3d\x0e\xb6\x6d\x64\xcf\xad\x14\x73\x9e\xdb\xf7\xed\xe1\xf5\x89\x7a\xbf\x93\x44\x5b\xca\x1f\xb5\xef\x10\x1e\x4e\x11\xd5\x0e\x40\xec\x07\x2d\x99\x81\xdf\x8e\x69\x36\x23\x60\x47\x07\x85\x6d\x7b\x82\x62\x49\xf9\xa2\x18\x2c\x73\x17\x01\xde\xed\xd4\xab\xba\xfc\xc3\x3c\x27\xfa\x59\x79\xec\xe5\x46\x0a\xe6\xdb\x43\x1c\xa4\x3a\x9e\xa8\x6d\x37\x63\x27\x7b\x35\x5f\x45\x6e\xad\x6f\xbe\x17\x09\xc3\x6f\x4c\xef\x18\x52\x56\x8b\xb1\x09\xed\x28\xf0\xfe\xec\x51\xec\x76\xe8\x37\x67\xce\x5f\x0b\x78\xed\xcc\xf9\x6f\x02\x43\x84\x22\xe7\x43\x2b\x72\x5e\x3f\x6b\x3e\x8a\xc2\xba\x7e\x7b\xca\x09\x8b\xbd\x16\x50\x71\x3e\x7b\x64\xbf\x09\x15\xa1\xa9\x62\x3f\x65\x96\x54\xb3\x19\xb6\x8d\xe6\x82\xcf\xea\x88\xa0\xb5\xa8\x98\x37\xaa\xdd\xff\x8d\xe0\x33\xb4\x95\xd4\x0e\x3e\x9b\xa1\x6f\x04\xbc\x15\x18\xe6\xf2\xe1\x4e\x3e\x1b\x66\x13\x83\xfa\xb6\x55\x5c\x21\x7b\x23\xd4\xc5\x5c\xaf\x04\x4c\xeb\x2e\xbb\xc2\xdb\x7d\x1e\xb1\x9e\xcd\x0f\x83\xd9\xb3\xef\xe5\x08\xde\x0b\x59\x9f\xa5\xe1\x82\x05\xd6\xad\x55\xa4\xe5\x20\xc2\x02\x2b\xaa\xa6\x7f\x97\xf9\x20\x2d\x8b\xf4\xdc\x2f\x49\x58\x18\xbe\x91\x49\x2b\xf1\x14\x6d\x2f\xb7\xf3\x7e\x7f\x32\x3e\x56\x92\x19\xc4\x4e\xb9\x68\x21\xb4\xe6\xcd\xe6\x1a\x0f\xad\x97\x4b\xff\x7e\x25\x66\x16\xb3\x2c\xdc\x32\x61\x8e\x60\xc6\xd5\x1e\x6b\x09\xb8\xe3\x6a\x87\xb5\x04\x6c\x78\x38\x9a\x8e\xe1\x91\x6f\x76\xbb\xed\x1e\x16\x7c\x63\xdb\x1f\xd0\x06\xc3\x03\x6f\x6e\x76\xbb\xa6\xef\xbc\xf8\xe6\x47\x7d\x9d\xd2\x0b\xf9\x6d\x53\x92\x1b\x7c\x2a\x77\xc5\xf0\x29\xf1\xa9\xb1\x54\xb3\x1a\xd7\x2d\x67\x32\x2b\xec\x24\x37\xa3\xd9\x18\xc5\xcf\xd2\x56\xe8\x44\xf0\x20\xf0\x3e\xa3\xe9\x0f\x2f\x56\xab\xad\x13\xc2\xc2\xf2\x74\x32\x3b\x5b\xdb\x36\x0a\x39\x32\xb2\x38\x15\x39\x05\x85\x4a\xae\xea\xb2\xf0\x8a\x76\xbb\x43\xda\xed\x32\xda\xed\xda\x21\x86\xc0\xd9\x8c\xee\x74\xdb\x81\x13\x41\x58\x6e\x5d\xe1\x98\xe2\x0c\x29\xc7\xfd\xfd\xd9\xc3\x10\x6d\x78\x52\xf5\x76\xd7\x61\xda\x96\x48\xc0\x06\xa6\x60\x4d\x66\xe6\x9a\x91\x48\xdf\xb3\x0d\x33\xee\xc2\x9d\x86\xc2\x12\x08\x98\x7b\x8b\xe3\xb2\xb5\xd9\xb7\xbb\x9d\x55\x92\xc4\x58\x9c\xa3\x35\xbf\x95\x99\x77\x3b\xeb\x83\xb2\xdb\xa9\x7e\x5e\xe7\x3e\x8a\x9a\x97\x8e\x87\x9f\x04\xda\xc8\x23\x7e\x63\x4e\x8f\x7c\x39\x8b\x78\x0c\x77\x12\x71\x84\x60\xae\xfa\x7e\xe4\x1a\xbb\xe9\x2d\x7a\x56\x16\x08\x6b\x13\x84\xc7\x63\xd6\xbe\x40\x13\xc1\x1c\x21\x9f\x3f\x9e\xdf\xe1\x4b\xf7\x64\xae\xfc\xf6\x73\xe4\xf3\x15\x0a\xf0\xb3\x14\xb7\xee\xae\x1e\x4f\xd7\x9a\x70\xff\x79\xaa\x4b\x25\xfc\x1e\xc5\xca\x89\x44\x3c\x34\xbe\x45\x3e\x4f\x9e\x99\x5b\x3c\xe7\x48\xa8\xb9\x85\xed\x2d\x8b\x20\x62\x77\xb0\x64\x3e\x08\x96\xc0\x86\xc9\xcc\x3f\xa3\x08\xef\xf1\xc5\xec\x32\xb9\xc0\x9f\x90\x80\x59\xab\xa5\xf8\xac\x17\xbc\xb4\x75\xf9\x3b\xf4\x8d\x02\x1c\x2f\xa0\x7c\xf5\x85\x05\x1b\x8c\xd9\x41\xf0\x73\xed\x5c\x54\x27\x31\xd9\xa0\x73\xf3\xed\xcd\xf1\xb5\x55\x1b\xd0\x59\xf4\x9d\xb0\xfa\x99\x38\xdd\xec\x51\xe0\xbd\xba\xf0\x6d\xb7\x3b\xb5\x91\xd4\xd6\x39\x2b\xf9\xa8\x6e\x60\x8a\x41\xee\x9c\xe1\x97\xf6\x4c\xf4\xe4\x9e\x89\x86\x39\x3f\x1f\x0c\x65\x6f\x1e\x51\x0c\x66\x6f\x40\x90\x19\x26\x36\x39\x0f\x0f\xbf\x62\x66\x12\x30\x7b\x6a\xbb\x99\x5c\x72\x05\xd5\xd4\xff\x15\x2d\x9a\x9c\x1f\x9b\xbf\x0f\x3f\xa3\xc7\xdc\x61\xf3\x33\x5a\x60\xcc\x64\x4a\xf5\x26\x47\xd5\xce\x66\xb7\x9b\xa3\x0d\x08\x78\x1c\x89\xb1\xaa\xb3\xbc\x98\x2f\x20\xde\xed\xd0\x8b\x8a\x67\xc7\x06\xeb\x7d\xfe\x9e\xbf\x18\xdd\x89\x31\xdc\xf0\x66\xf3\xbd\x6d\xa3\x22\xb4\xdc\x7b\x15\x6a\x2d\xb3\xda\xd2\x6f\x18\x3e\xf2\x1c\x8b\x9c\xc9\x26\xef\x85\x72\x18\x96\x3b\x65\x21\xe4\x02\xc8\xa7\xdb\x22\x71\xa3\x6e\xc2\x42\xeb\xa1\x59\x61\x3c\x5a\x89\x31\xe7\x53\xb6\x52\x1d\x7f\x81\x77\xbb\x6f\xd0\x8b\x27\x60\xfc\x54\x02\xf7\xeb\xd1\x74\xcc\x37\x0a\xe1\x7e\xdb\x8a\x9c\x9f\x14\xd2\x45\x9b\x26\x7f\x54\xd7\x6f\x29\x44\x0c\x53\xd8\x1e\x11\xa0\x2c\xdd\x97\xf1\x74\x75\x8f\x3e\x3a\xd1\x3c\x5b\x15\xed\x21\x37\x85\xed\x3c\x8e\xee\xd9\x8d\x80\x68\xce\x3e\x4a\xd4\x66\x1d\xd5\x69\xc9\x7e\xcb\x09\x7f\x51\xf7\x51\x6e\x12\xd9\xe0\x7b\x98\x4a\x2c\x0c\xaf\xd0\xd4\x24\xa8\x1e\x5c\x0b\xd9\x88\xc6\xb7\xfb\xf2\x87\xe6\x0d\x4c\x15\xb6\x8e\x77\xbb\x17\xb9\x90\x96\xf3\xb9\x50\x6b\x97\x27\xcc\x45\xb9\x54\xdd\xa1\x23\x38\x77\x1c\xd6\x43\xca\xd0\x7c\xa5\x3d\x54\x27\x3e\x1d\x11\xa0\xe3\x03\x99\x30\xc2\x4d\xae\x2b\x56\x5f\xf1\xd1\x67\x7d\x49\x55\xb5\xba\x17\x07\xb9\xf4\x34\xeb\x0a\xf6\x58\x77\xab\x8e\x90\xf8\x45\x2e\xf4\xcd\xf0\x3d\xfb\x28\xe7\xe1\x46\xcf\xf2\x9d\x80\x8f\x59\xfc\x99\xda\xe0\x3d\x65\xdb\xe0\xc2\x69\x2e\x8b\xa3\x67\x3c\xcf\x0f\xef\x8c\xa5\x1e\x23\xd4\x53\x5a\x4a\xd2\xf6\x94\xc6\x90\xb4\xfb\x70\xa0\x9a\xcb\x1d\x6f\x33\x8f\x75\xd2\xe9\x32\xd2\xe9\x02\xe9\xf4\x18\xe9\xe4\x76\xa8\x79\x7c\xbe\x2c\xa0\x37\xe9\x75\x18\xe9\x65\xf7\xbc\xb5\x07\xac\x3d\x80\x8e\xcb\x72\x7f\x56\x7d\xef\xa4\x72\x77\xa8\xde\x58\x5b\xba\x11\xee\xc8\x33\x25\x0b\x0d\x5e\xba\x17\xae\x14\xfd\xef\xe0\x56\x5b\xd9\xd3\x23\xfd\xd5\x91\x1d\x51\x59\xc7\x94\xd9\x42\xf7\x07\x07\x3a\x26\x8f\x9a\xb8\x9d\xc4\x5c\x5a\xd9\xeb\x68\x1d\x53\xdb\xd3\x2a\x26\xa5\x51\x9a\x65\x1a\xa5\xbb\x4c\xa3\xb4\x2a\xb4\x40\xf7\xb9\xd1\xf2\xc6\x68\x6e\x1e\xb3\x40\xa0\x0b\x1e\x56\xf4\x2b\xb7\x3c\x2c\xf4\x2b\x13\x1e\x3a\x92\x46\x81\x87\xaa\x0e\xe7\x9a\x87\xce\x9b\x70\x1e\x84\x41\xfa\x08\xef\xf8\x02\x3e\xf0\x89\xe3\xdf\x26\xf0\x99\x4f\x54\x40\xb9\x17\x7c\xa2\xf9\x77\xf8\xc4\x27\xce\x32\x5a\xc0\x7b\x3e\x71\xbe\x7b\x4b\xe1\x86\x07\x43\x6b\x72\x6b\xb1\x9c\x60\xfd\xa8\x52\x96\x32\xa5\x44\x96\xbe\x54\xa9\x91\x49\x35\x44\x6c\x11\xea\xe7\x7b\x74\x78\x9d\x34\xf8\xea\xa4\x68\x7d\x43\x2c\xa7\xae\xff\x2c\x3e\x4f\xcf\x09\xac\x39\x22\x97\x97\x09\x3e\x27\xb0\xe4\xeb\xab\x2b\x02\x53\x4e\xdb\x8a\x29\xfe\xac\x62\xdd\x75\xf0\xb9\x7a\xf0\x3c\xcc\x5c\x98\x73\x57\xce\xe6\xa5\xbb\xdb\xb9\xfa\x8a\x0e\xf2\x5c\x5c\xba\x43\xc2\x5c\x85\xe4\x91\xe0\x1f\x90\xc0\xb8\xc9\xc5\x6e\x27\x38\xe7\xd7\x43\x14\x70\x15\xc7\x8d\x30\x17\x42\xbe\xc6\x0c\x85\xfc\x05\xfa\x84\x04\x7e\xfe\x1e\x83\x78\x86\x22\xae\x1a\x90\x44\x1e\x91\xc4\xdf\xf9\x39\x44\xcf\x38\xc5\x80\x44\x8b\x87\xad\xe5\x15\x27\xc3\xe9\xf3\x88\x4d\x9f\xc9\x7c\xe4\x7c\x89\xf1\xb3\xe8\x8a\x53\x99\xb7\xd5\x82\xe8\xb9\xcc\xab\xf2\xad\x65\x63\xa6\x15\x53\x10\x05\x1c\x89\x67\xd1\x39\xc1\xaa\x74\x2a\x73\xf2\x25\x66\xb2\x57\x2a\x65\x59\xfe\xc4\x5d\x8c\x2f\xd2\x2b\xde\xbf\xf0\x47\xf3\x56\x6b\xcc\x25\x9d\x19\x40\xf0\x9c\xd3\x6e\x0f\xd2\x73\xde\xc7\x17\xea\x1a\x71\x1e\x5e\x5e\xa6\xbb\x00\x92\x16\x4f\x2f\x92\x2b\xb7\x9c\x3f\x84\x50\xe7\x4f\x54\xfe\x4c\x82\x34\x3a\x3f\x9f\x8f\x77\x9c\xd0\xfe\xb3\x19\xf8\xfb\x7c\xb5\x7e\x39\x58\xad\x7c\x69\x22\xb5\x34\x81\x5c\x1a\x9f\x47\x72\x69\x12\x1e\x9c\x7b\xb0\xe6\xb1\x5a\x2d\x31\x5a\x9f\x9f\x8f\x61\xca\x09\xf5\xec\xa5\xbe\xea\xe9\xea\x8a\x7b\xaa\x3f\x53\xd9\x83\x67\xd3\x96\xba\xb8\x77\x7d\x7e\x6e\x3a\xa3\x3b\x3f\xb5\x65\xcd\xe7\x6a\xd5\xa7\x57\x57\xfc\x3c\x29\x06\x12\xaa\x82\xe1\x61\xc1\x60\x8e\x5c\x75\x7f\xc0\x94\x93\x73\x3f\xbf\x4c\x62\xca\x39\x8f\x32\x4a\x36\x1c\xbe\xf5\xdf\xb2\xe5\xf0\xfc\x9a\x5d\x9f\x85\x2d\x6e\x66\x75\x7a\xce\x7d\xe3\x79\x81\x96\x2a\x90\x1f\x7e\x16\xaa\x29\x9f\x9e\xa7\xb8\x98\x88\x37\x95\xfb\x9f\xdb\xe3\xcb\x4b\xda\xd9\x89\x11\x1d\x5f\x5e\x92\xde\x4e\x8c\xc8\xf8\xf2\xb2\xbf\x13\x23\x77\x5c\x94\x79\x55\x94\x19\xc9\xb9\x17\xa5\x6f\x6f\x0f\xbf\x81\xb8\xba\xea\xdb\xb4\xdb\x2d\x65\xfa\xee\x64\x26\xf9\x40\x7a\xd9\x13\xed\x1c\x14\x7c\x5d\xea\xad\x3c\x70\x5d\x0a\xfd\xd2\x60\x7e\x3b\xf8\x4c\xdb\xd0\x29\x7d\xce\x18\xfa\xed\x3d\x2a\x3b\x39\x3c\xa9\x2c\x32\x9a\xa2\xbc\x8e\x1f\xaa\xc6\xbc\x01\xbf\x43\xad\x18\x67\xb2\x22\x31\xfa\x38\x36\x14\xfb\x43\x46\xb1\x2b\x11\x72\x33\xe3\x6e\xb8\x18\xdd\x8c\x9d\xc9\x2d\xf8\x3c\x68\x89\xd1\xcb\x31\x24\x3c\x0b\xed\xe1\x83\xdf\x2a\x2c\x24\xc3\x61\xc2\x12\xc7\x48\x2a\x51\xa9\x0b\x7f\x8f\xf2\x8b\x77\x20\xca\xac\x16\xf3\x6e\xf8\x5f\xea\x46\x26\xe8\x4c\xf2\xae\xac\xb9\xaf\xbb\xb2\xe4\x21\x6a\x05\x12\x96\xbb\x17\xd3\xcb\xf4\x62\xda\x6a\xe1\x64\xb4\x6e\x4d\xc7\x7c\x39\x8a\x86\x53\x96\x9e\x4f\xcf\xc9\x78\x2f\x9b\x91\x9c\xae\x66\xca\x96\x15\x5c\xbf\xd0\x1c\xc0\x6e\x77\x90\xae\x2e\x87\x35\x2c\xc0\x6e\xb7\xac\xd3\xd6\xea\xfb\x63\x75\xc6\x9c\xf8\x5f\xa8\x2b\x2d\xa1\x42\xb4\x37\xf9\x42\x11\xa0\x92\x76\xc8\x05\xb7\x3f\xc2\xaf\x1c\x2d\xea\x4c\x3a\xcc\x95\xd3\x0b\x5d\xe1\x3b\x74\xa7\x6c\x3b\xca\x17\xd0\xbe\x2b\x6d\x87\x9f\xf8\x0a\xbd\xc3\xf0\x2d\x77\x2f\x7e\xca\x44\xaf\xdf\x5e\x60\xf4\x23\xff\x69\xf4\x6d\xab\x35\xc6\x41\xd8\x58\xec\x76\x09\x5a\xc0\x8f\xf0\x6e\xf4\xe3\x18\x9f\x45\xbb\x1d\xfa\xb5\x42\x50\x2f\xf0\x5e\xf6\xe9\x67\x7d\xd3\xae\xbe\x19\x17\x51\x49\xdd\x97\xef\x8e\x53\x26\x8a\x61\xda\x3f\xfb\x39\x7b\x42\x2e\x50\xd2\xf1\x3a\xfd\x76\xaf\xd3\xc7\x50\xa4\x93\x22\x7d\x80\xa1\xf9\xb3\xb3\xc8\x0a\x60\xdb\x2e\xde\x08\xde\xed\xd6\x95\x6b\x6c\xb7\xa6\x86\x03\x81\xef\x5f\x4b\xf7\x1d\x0b\x48\xe5\xb1\x97\xe7\x4d\x4b\x0f\x94\xfd\xc3\xd7\x16\xd8\x4b\xea\x5e\x93\x63\xd5\xd9\xcf\xa6\xbd\xba\x76\x99\x5c\x56\x69\xc6\xb5\x3a\xf6\x96\x6f\x0a\x55\x9f\x46\x97\x29\x06\x57\x47\xab\x1b\x7d\x1c\xf3\x74\x0f\xb7\x47\x32\x43\x53\xfd\x2d\x58\x19\x75\x60\x61\x98\x22\x21\x1b\x2c\x52\x32\xaa\x66\xf4\x71\x0c\x01\x9f\x1b\x2b\xad\x40\xe2\xd2\xe0\x2a\x3c\x3c\x24\x85\x3a\x5e\x1d\x68\x14\x97\xae\xa4\x18\x86\xe7\x01\x9b\x49\x2e\xed\xb8\x5c\xc1\x95\xab\x2e\xdf\x8c\xb9\xbe\x2e\x6a\xf4\x72\xcc\x83\x7c\x18\xf1\x1e\x02\xdb\x46\xdf\xa0\xc5\x81\xc0\x6b\xb2\x54\xd2\xad\xdb\x92\xcc\x6c\x72\x9b\x27\x9d\xc8\x59\x96\xa4\x4d\x22\x0b\x63\x38\x58\xf8\xc5\xd1\xc2\xe7\x27\xe2\x07\x3d\x77\x04\x04\x1e\xb9\xe3\x6c\x2d\x55\x38\xd1\xc3\xb5\x3f\x51\x46\xe5\x7d\x13\xa6\xa4\x57\x73\x03\xbf\xc9\x4a\xcb\x5a\x0c\x75\x9d\x86\x41\x48\xa9\x41\x2b\xea\x52\x0e\x89\x68\x24\xd0\xcf\x5b\xff\x33\x55\x36\xca\x55\x66\x7d\x6b\xd3\xba\x71\xbc\x41\xa6\xae\xce\x61\x5d\x38\xef\xc2\xbf\xbb\xe4\xd5\xd5\x95\xab\x4a\xab\x18\x1b\xf5\xc5\x7f\x39\x59\xdc\x20\xaa\xbc\x7c\xaf\xf3\x64\xf9\xfe\x51\x79\x8d\x07\xa1\xfe\xa8\xff\x7d\xbe\x70\xf0\x4a\x09\xe0\x4f\x9c\xf0\xba\x7c\x87\x2b\x5c\xca\x27\x97\xe2\x6d\x59\x25\x3e\x92\xdc\x5c\x56\xf9\xbf\xbf\xd4\xe1\x82\x95\x0a\xc9\x09\xfb\xee\x64\x53\xff\xfe\x52\xc7\x8b\x74\x50\xec\xb7\xd3\xc5\x2a\x6b\x53\x2a\x26\x17\xe5\xf5\x51\xb1\x3d\x3e\x7b\x44\x87\x10\x10\x1e\x51\x15\x6a\x25\x95\x83\x6b\x8c\xa0\x54\x5c\xfc\x32\x27\xc4\x17\x10\xe7\x9c\x10\xbf\x2d\x87\x84\xc9\xb9\x59\x13\x1d\xfe\x24\xf7\xaa\xb9\x54\xcd\x85\x6a\xfe\xb3\x12\xc4\xb1\xb8\xab\x33\xe3\x21\x73\xee\xf1\xc8\x40\x3f\x37\xdb\xa9\x18\x26\xe6\x37\xb7\x76\xd4\xdd\x95\x51\x66\x19\xa6\x94\x8e\x72\xa8\x32\x69\xa3\x87\xbd\xe6\x4d\xd4\xac\x30\x7b\xbb\x5d\xb3\x60\xf6\x54\x08\x20\x13\xfb\xc7\x7a\x93\x5b\xe4\x95\x8c\xf3\xd4\xa3\x11\xde\xeb\x94\x37\xb9\x85\x17\x94\xac\xbd\x40\xed\xad\x22\x39\x7b\x36\xfb\xa0\xf4\xd2\xeb\x68\xe9\x7f\xe9\x0e\xde\x8b\xe9\xe5\xe0\x02\xa3\x98\x87\xa3\xb9\x8a\x3b\x34\xc6\x43\x14\xa0\xb8\xbc\x62\x6a\xb1\xaa\x69\x89\xd2\x60\xb1\xa5\x0a\x63\x5f\x58\x4f\xbf\xf8\xe6\x47\xb6\x06\x6d\xfc\xc6\x96\xa0\x2c\xdf\x98\x0f\x72\xc5\x59\x52\x8e\x9c\x5c\xbd\x37\x55\xa6\xd6\x5a\xb4\xba\x99\x01\x6d\xec\xff\x3f\xc4\xfd\xfb\x7e\xdb\x38\x92\x3f\x80\xfe\xaf\xa7\x90\x78\x66\xb9\x40\x04\xd3\xa2\x24\xdf\xe8\x20\xda\xb4\xe3\xf4\x64\x26\xb1\xb3\xb6\xbb\x7b\x7b\x35\x1a\x2f\x2d\x41\x16\x27\x14\xa9\x21\x21\x3b\x6e\x4b\xe7\xd9\xcf\x07\x85\x0b\x41\x8a\xf2\xa5\xa7\xe7\x77\x7a\x77\x62\x11\x04\x71\x2d\x14\x0a\x85\xaa\x6f\x25\x93\x74\xbe\x25\x02\x66\x11\xcf\x47\x82\xa4\x3a\x5a\x8f\x58\xd8\x35\x0f\x1c\x27\x60\xc4\xc1\xd7\x0e\x41\xed\x76\xd6\x4e\xb0\xd1\x32\xa1\xde\x3e\x2e\x6c\x85\x9f\x82\x3f\x29\xb0\x86\xab\x01\xb4\x96\x39\xcb\xde\xdf\xb2\x84\xaf\x56\x8e\x63\x85\xcf\xf2\xfb\x5b\x7d\x27\x0f\xb7\x18\x64\x6b\x23\xb6\x0c\x8c\xd8\x98\x77\xcd\x6b\x7d\xea\x21\x1c\xf6\x06\xd4\x04\x69\x82\x77\x5c\x33\x63\xff\x5c\x46\x19\x9b\x58\xc6\x6c\xa5\xf8\x3a\xfe\xde\x76\x9b\xe8\x4a\xb0\xe2\xc3\x23\xed\x33\xee\x4b\x45\x09\x28\x36\x9e\xf4\xc0\x4a\x3c\x39\x11\xab\x15\xd2\x3f\x69\x34\x78\x5c\x07\x99\x79\xf1\xb8\xc6\x0d\xe7\xda\xa1\x94\x15\x28\x4a\xab\x15\xa8\x49\xf9\x6a\x15\x22\x4e\x98\x06\x34\x4f\x01\x84\x47\x7b\x62\xfb\x81\xbf\xe7\x93\x0d\x87\xdf\x62\x29\xef\xd5\x40\x4d\x4a\x40\x48\x7f\xaf\x8b\x4b\x41\x10\xc4\xaf\x27\x3d\xb8\xef\xbf\xd9\x0e\xdc\x92\x03\x74\xb0\xea\x04\x49\xeb\x60\x67\xa2\x7a\x1f\xea\x5a\x3f\xef\xd4\x75\x95\x43\x75\x3a\x88\x82\x04\x23\x45\xc0\x9e\xd3\x96\x22\x7c\xce\xd3\x8c\xd1\x6c\xd3\x13\xbc\x00\x5e\xda\xdb\x0a\x2b\xd5\x3f\xd8\x1a\x93\x0a\xcc\x8c\xcb\x90\xa1\x5d\x0c\x52\xb6\xca\xf5\x05\x70\x54\xea\x82\xa2\xb7\x0a\x1f\x01\x36\x4c\x46\xab\x15\xab\x06\x5e\x89\x86\x82\x74\x47\xa5\xb0\x47\x52\xf3\x07\x93\xa6\x63\x56\xf9\x7b\x25\x2b\x71\x4d\x3b\x60\xf4\xdd\xe0\x88\x7b\x5f\x89\xbe\xab\xb4\x6d\xd9\xc0\x00\x7a\x8d\x09\x43\xbd\x3d\x8c\x9c\xe2\x0d\x84\x13\xef\xed\x05\xbd\x3d\xa5\x80\x04\xe5\x22\x54\xb4\x57\xae\x68\x43\x2d\xa8\x6a\x05\xdc\xdd\x7e\x17\xa3\xbe\x6a\x40\x9b\x7b\x1f\xdf\xb4\x04\x31\x1c\x62\x34\x1c\x79\x60\xf5\x06\xcc\xd0\xb4\x6c\xab\x21\x5c\xa6\xcf\x12\x25\x51\x06\xcc\x32\x1f\xfd\xee\x61\xe0\x77\x0f\x95\x5a\xb4\x68\xe7\xfe\x8b\x07\x04\x0c\xe6\x40\xb3\x58\x0c\x85\x48\xb3\x06\x41\xee\x7f\x45\xe1\x07\xaf\x1c\x84\xee\x96\x41\x90\x76\x77\xe5\x51\xd8\x6e\x8b\xf7\x7b\x86\xe1\xf0\x95\x2d\x05\x20\x44\xc7\x18\xda\x39\x24\xa2\xad\x4e\x23\x69\x46\xc9\x70\xe4\xba\xf2\xc4\xe5\xe3\x61\x32\x2a\x9d\xca\x23\xda\xf2\x01\x45\xdc\x74\x32\xb2\x3b\xf4\x84\xd5\xde\x66\x9f\x9e\xb1\x61\x32\x73\x94\x58\xd3\x53\xe9\xf4\xd1\x2b\x3b\xbd\x07\x21\x6d\x3a\x0d\xe8\xb7\x53\xee\xaa\x27\xd2\xca\xea\x89\x8d\xce\x26\xe5\xce\xfe\xb1\xfd\x94\x8d\xda\xda\xd9\xfd\xce\x2b\x3b\xab\x81\x70\x35\x09\x4a\x03\x48\x41\x83\x36\x8d\xda\x5d\xaa\x31\x91\xfc\xfd\x14\xb9\xef\xbf\xa0\xbd\x7b\x7d\xd9\x5e\xed\xca\x6b\x30\x5b\xab\x31\x69\xe1\xd6\x00\x78\x6e\xaf\x88\x49\xdb\x28\xf0\x2c\x5b\xe0\xfc\x51\xbe\x44\xb6\x62\x11\x31\x09\x6f\x69\x7a\x9a\xa5\xf3\x8d\x03\x65\xa6\x23\x08\x4b\x44\xd3\x59\xdd\x46\x25\x46\x61\x20\xfe\x09\xa4\x80\xb8\xd8\xb4\x74\x9e\xd3\xc5\x16\x33\xf0\xbb\xc2\x0c\x7c\xae\x42\x12\x2f\xd1\x04\xf4\x0a\x77\x10\x5b\x98\xa3\x39\x59\xd4\x9b\x0f\x83\xe1\xb6\xbc\x68\xbd\x5d\xad\x66\x54\xba\xa0\x40\x84\x7f\x0c\xa8\xf0\xb1\x74\x84\x44\x19\x0d\xd1\xc4\x78\x9c\x1f\x67\xef\x1e\x8e\x1f\xda\x6d\x9c\xa3\x98\x3c\x90\xbb\xc1\x1c\x4d\x20\xba\x31\x0e\xc4\x5f\x15\x73\x0a\xac\x02\xa8\xba\x82\x9b\x08\x19\x1b\xca\x3a\x6e\xa1\x31\x9d\x96\xed\xce\xed\xb2\x22\x34\x25\x73\x32\x1c\x2b\x23\xa8\x87\x91\xa0\xad\x60\xac\xcd\xd1\xf5\xc5\xbb\x6a\x0c\x7d\x20\xb1\x22\x98\xea\xc5\x99\xba\x10\xdb\xeb\x05\xe2\x5f\xb8\xea\x52\x41\xac\x8a\x38\xb7\xf2\x32\x0b\x08\xab\xfb\x9a\x85\xa0\x90\x6d\x13\x3a\x1c\x79\xca\x72\x57\xb0\xba\x56\xe2\xba\xfe\xee\xd0\x37\x89\xc8\x27\x3b\x1d\xfc\xb6\x63\xad\x0d\x14\xad\x56\x9a\x87\x27\x36\xf9\x3c\x61\x01\x1c\x0d\x92\xfa\x48\xf6\xab\x55\x27\x78\xd1\x2a\x82\xbb\xbf\x62\x15\xf5\x9e\xde\xde\x2e\xad\x56\xc9\x08\x95\x01\x04\xd8\x86\x32\xd5\x20\x1e\x05\x07\x20\xe4\xed\xbf\x2c\x30\x61\x6f\x4f\x41\x43\x1e\x18\xa9\xc7\x00\x8c\x97\xc4\x9f\xc3\x3d\x8c\xe4\x32\xd0\x6d\xa8\x78\xe7\x48\x55\x1e\x57\xd8\xe1\xf0\x10\xd1\x8e\xfa\xf5\x8d\xf2\x75\x39\x9e\xa1\x74\x1f\x50\x1f\x11\xae\x7e\x7d\xd3\xb6\x99\xd7\x51\xbb\xad\x88\xaa\xc5\x56\xab\xec\x1d\xd5\xa1\x9d\x07\x48\xd7\xa4\x16\x4b\x82\x7c\x08\x7c\xd0\x21\x12\x4f\x88\x52\x3e\xc8\x82\xc2\x72\x81\x0f\xd8\x30\x1b\x05\xc3\x8c\x88\xbf\x23\x21\x0f\x14\x51\xdc\x22\xef\xbd\x9e\x1e\x1a\xc9\x93\x28\xc9\x0c\x30\x51\x66\xc5\x7b\xcb\xac\xa8\x78\x40\xd7\x12\x35\x56\xb2\xef\xc3\xbd\xe0\x70\x8f\x1c\x1e\x04\x87\x07\x85\xf8\xb6\xff\x1a\xa9\x4a\x61\x99\x0f\x47\xe0\xb0\x65\x13\x26\x38\x61\xb6\xa8\xc6\xfd\xad\x25\xd2\xb2\x05\xb8\x05\xc7\xad\xf0\xeb\x94\xc1\xac\x7d\xda\x23\x4e\xc0\x2a\xe4\xa8\xfb\xa4\x48\x49\x3b\x70\xee\xef\xbf\xbe\x1f\xea\x0e\xd8\x8a\xf8\x3e\x1c\x95\x1d\xd7\x68\xab\x95\xea\x65\x69\xbd\xa8\x5b\x9a\x61\xd1\xeb\xd4\xee\x75\xad\x09\xbb\x14\xc4\x43\x6c\x60\xd3\xb7\xad\x50\xe3\xbf\x2b\xc7\x06\xc0\x87\x8d\xfd\xef\x92\xe6\x3b\xbe\xc4\xb7\xde\xd8\xda\x5d\x17\x2d\x8d\xd3\x2a\x5a\x92\x04\x95\x75\x81\x98\x2c\xdf\x76\x20\x53\xde\x5e\xe2\xe3\xe5\x3b\xda\x39\x5e\xee\xec\xe0\x68\x8a\x96\x70\x7c\x73\x5d\x3e\x5c\x8e\x6c\x67\xe2\xa5\x68\x8f\xfc\xbd\xe3\x57\x26\xc5\xe8\x70\x34\x56\xbe\x64\xa8\x05\xd7\x78\xad\xdc\xea\x6f\x91\x5b\xe7\xe1\xa2\x2c\xb4\x6e\x31\xf3\xff\x3d\xf2\xc1\x6b\x24\x56\xb1\xd9\x03\xbb\x83\x06\x6e\x06\x7e\x31\x17\x61\x0c\x99\xe8\x7d\x2d\xc9\x9c\x8c\x09\x0f\xc3\x36\xf2\x7a\x59\x20\x48\xa7\xb5\x76\xff\xf5\xbe\x4c\x80\x39\x50\x87\x94\x50\x91\x0e\x30\x32\xbe\x4e\x28\x29\x8d\x0d\xb3\x61\x18\xb4\x85\x39\xe5\x24\x91\x23\x26\x37\xc2\x0a\x04\xc7\xfe\xab\x84\xdd\xde\x96\x09\xb5\x7d\x41\x4b\x13\x5b\xeb\x3a\xf1\x02\xb1\xb6\x34\xe3\x70\xed\x53\x9e\xf4\x5e\xd0\xef\x15\x93\x7e\xf0\x2a\x21\xf6\xe9\x4e\xd4\xb5\xff\x5f\x69\xba\xff\x4c\xd3\x5f\x22\xcf\xea\xa6\x1f\xf4\x2a\xb1\x92\x7b\x07\x7a\x13\x05\x85\xd0\x70\x24\xef\x77\xad\xfe\xd5\x44\xb6\x33\x20\x9a\x59\x99\x5a\xa5\xb9\x56\x9d\x02\x23\x45\x96\x1b\x83\x8c\x85\x28\x1d\x1f\xa2\x29\xe2\xd4\x72\xb4\xc8\x02\x4e\x4c\xf0\xd6\x1c\x97\xf1\x83\xf5\x85\x5e\x71\x31\xbc\xa4\x32\xa0\x1b\x89\x05\x4b\x14\x3f\xc6\x34\x45\xf1\xce\x12\x93\xa9\x65\xd1\x32\xc6\x64\x42\x3b\xc7\x93\xb7\xe3\xe3\x49\xbb\x8d\xa7\xc3\xc9\x88\x16\xf1\xc2\xe5\xda\x30\x58\x61\xed\x09\x0e\xe0\x1a\x6c\xd9\x9e\x8c\x2c\x3c\x76\x98\x03\x6d\x73\xa5\x38\x9b\xc4\x93\x28\x59\x3e\xa9\x88\x32\xfe\xc1\xab\xc4\xc1\x2e\x46\xdb\xa8\x2a\x4f\xe7\x15\x9a\xda\xe6\x93\xf3\x3b\xb8\xdd\x41\xef\x15\xad\xec\xf5\x2a\xa7\x21\xe9\xda\x0f\x6d\xcc\xb8\x20\x1f\x9f\x74\x49\x6f\x54\x92\x55\x4b\xa4\x13\x42\x4e\x54\x60\xa5\x6e\xd8\xdf\xa9\x1c\x1a\xbb\x6e\xcb\x76\xba\xcd\x8f\xc8\x92\x1a\x34\x02\xae\xf6\xad\x2c\x3f\x13\x05\x9a\x50\x96\x29\xa4\xdc\x2f\x91\xfc\x2a\x6c\xee\xa0\xa2\xe0\x92\xce\xfc\x48\xb5\x48\x16\x03\xf6\x79\x90\x79\xef\x59\xe9\xf8\x43\xc8\x99\x43\x1e\x93\xf4\x7e\xd3\x9a\x03\x2e\x97\x45\x06\x50\xe3\x5d\x45\x73\x80\x55\x37\x92\x33\xd4\xb0\x5d\xbd\x24\x37\xa6\x3d\x9b\x9a\x90\x28\xcc\xba\xcb\xe7\xe9\xa7\xcb\x73\x49\xff\x2d\x4a\x33\x6c\x9a\x63\xbd\x08\x32\xc9\xf3\xf7\x82\xbd\x3d\x8b\x5e\x5e\xb3\x83\x03\x9d\x24\x0a\x92\xe1\x69\x96\xa2\xb6\x1c\x09\x3a\xab\xbb\x0f\xe6\x14\x1e\x4f\xff\x72\x79\x7e\x86\xf0\x6a\xe5\xb7\x28\xdd\xe8\x89\x78\xa9\xfc\x4e\xec\xd6\x6f\x16\x0e\xc2\x0a\xb6\xfb\x2a\x3e\x0d\x36\x04\x7d\x2d\x65\x71\x38\x6f\x6b\xb0\xbb\x64\x39\xbf\x01\x73\x0e\xbd\xa7\xae\x56\x26\xf0\x3d\xc7\x83\xd2\x98\x22\xac\xa2\xa0\x48\xe9\xbb\x6c\x86\x59\xa5\xab\xc3\xfa\x89\xd4\xa0\xa8\x5f\xb3\x68\x1e\x49\xd4\x32\x92\x55\x7a\xdf\x00\xbf\xa7\x6c\xb5\x92\x81\xd9\x33\xc2\x09\x43\x7b\xfb\x18\xdb\xe8\xac\xfb\xc1\xde\x7e\x71\x37\x73\x70\x54\x57\x5d\xb9\x58\x71\xb0\x29\xc0\x16\x12\xca\x35\x15\x36\x4a\x13\xd3\x76\x9c\x16\x75\x3e\x25\x77\x61\x1c\x4d\x20\xd9\x71\x5d\x09\x63\x8f\xf8\x36\x00\x74\x39\xc4\x89\xe5\xff\xd3\x28\xd0\x8d\xd9\x20\xb3\x5e\x04\xe5\xb2\x15\x0c\x7a\x01\x6e\x7f\xd8\x79\x56\xc3\xaa\x2d\xd3\x1d\xf2\x78\x13\x25\x93\x80\xa1\xfe\xbe\x3c\x82\xf6\xf7\x83\xfe\x7e\x41\xd6\x87\x2f\xd9\x44\x0f\x7d\x45\xd6\x9d\x3d\x5b\x19\x3f\x0b\xf3\x4f\x4a\x80\x03\x7d\xfc\xa6\x39\x3c\xa8\x2f\x9b\x91\x98\x27\xb8\x6f\x41\x11\x49\xf4\x85\x48\xe5\x30\x50\x48\x6f\x2d\x5b\x7a\x5b\xad\x5a\xdc\x0a\x8c\xea\xcb\xc0\xa8\x48\x87\x69\x94\xd5\x18\x8f\x91\x52\x60\x1e\x40\xff\x02\xef\x3f\x89\x40\x74\x2c\x84\xfb\xf2\x87\x96\x78\xdf\xd2\xb2\x7d\x4b\xcb\xf6\xda\x1a\x59\xd1\x53\x39\x32\xaa\x7f\xd8\xad\x9f\x04\x69\x30\x9b\xd5\x0c\x06\x49\xe8\xee\xdf\xff\x96\xbf\x31\xa2\x31\x1a\xfe\xbd\x89\x46\x6f\xf0\x6e\x43\xc2\xf9\x6b\x92\xde\x3b\xc4\xae\xcb\x51\xa6\x51\xfe\x9f\x43\x28\x2e\xa2\x51\x20\xc7\x69\x4b\xa7\xd8\x39\xa0\x3b\x27\x78\xe8\x8f\x14\xd2\x73\x71\xbf\xe8\xac\x95\x54\x5b\x8e\x6e\x76\xf8\x32\x04\xc3\xbe\xc1\x62\x3a\xaa\x5c\xbe\xf8\x18\x39\x5f\xc2\x85\x53\xf6\x76\xa8\x3a\x36\x15\x96\x8c\x95\xf3\x9e\x3e\xbb\x75\x2c\x75\x5b\xa7\xa4\x96\x2d\x9b\x00\x5a\x11\x5a\x6e\x19\x3f\x4d\x78\xf6\xa0\x36\x39\x02\xcd\xc0\xa4\xd0\x79\x89\xe3\x9c\x77\x57\xf5\xba\xb2\x3c\x22\x33\x6f\xc2\xa6\x95\xcf\xe5\x76\xda\x09\x14\x56\x15\xdc\x16\x00\x5f\x3b\x0a\xfc\xfe\x11\xe9\x1f\x05\xfd\x23\xb2\xe7\x07\x7b\x70\x17\x79\xb8\xfd\x22\x08\x16\xcf\x51\xd7\xe0\x28\xe5\xff\xcc\xb8\x06\xd0\x0a\xc7\x69\x3e\xb3\x8e\x52\x2d\x14\xb9\xee\x81\xdf\xa1\xb6\x3b\x73\x84\xce\x80\x0b\x7b\x5f\xde\xff\xcf\xf5\xcf\xef\x3f\xff\x74\x2a\xdd\x77\xfc\xdd\x0e\x96\x18\x90\xa2\xcd\x7c\xe6\x90\x47\x28\xaf\x46\x42\x90\xd8\x52\x6f\x7d\xb0\x44\x65\xef\x8e\xfa\x47\x9d\xfd\xee\xfe\x9e\xb7\xdf\xed\x77\xf7\xfc\xbd\xfd\x81\x89\x55\xcd\x70\x1b\x7e\x7f\x3e\xeb\x06\x19\x62\x3b\x7e\x3b\x11\xff\xe2\x37\x09\x62\x6d\x1f\xdb\x1b\x32\x39\xea\x06\x47\x92\x8f\x6c\xdf\xf8\xb5\x67\x76\x98\x47\x49\xb9\xa7\x99\xeb\xfa\xbb\x19\xea\xe0\x77\x76\x07\x44\xb6\xc0\x3a\x3f\x5a\xb8\xcd\x66\xdf\xa1\x6d\x8e\x5d\xb7\xd3\xa2\x7c\xc0\xdf\x76\x06\x3b\x0c\xed\x70\x5c\x84\xdb\xe6\x6d\x33\xce\x88\xbf\xe1\xa2\xd5\x01\xaf\x08\x12\x87\x4f\x0a\x12\xb2\xc5\x3c\xac\x6f\x31\x68\x3f\xac\x26\x8b\x7c\x75\x52\x99\x1d\x84\xdd\x34\x0e\x82\x81\xef\x22\x7f\x87\x61\xbc\xdb\xad\xb6\xea\xe0\x19\x2a\xea\x19\x41\x4a\x55\x3e\xbe\xa9\x97\x08\x33\x59\xf3\x1b\x1d\xae\x1d\xd9\xe1\xd4\xfd\xdd\x5e\x79\x1e\x55\x1c\x74\xff\x70\xcb\xae\x6c\x09\x70\xba\xde\xf8\xb7\x5a\x13\x2a\xc4\xde\xbd\x7b\x47\x3b\x78\xd0\xf3\x77\x2c\x12\x2e\xc8\xab\xed\xed\xa9\x56\x7d\x3e\xff\xb1\x7b\x8a\x83\xde\xc6\x20\xd4\xee\xd5\xa5\xa9\x61\xdf\x17\xd5\xf6\x6c\xa1\x7b\x35\x0e\xed\x0c\xd5\x0e\xf8\xd1\xf6\xcd\x54\x0e\x78\xc7\x56\x74\xa0\xac\x65\xc5\xf2\x2f\x28\x00\x1e\x95\xe0\xa8\x46\xb4\x13\x1c\xc1\xd5\xf6\x91\xff\xd2\x11\x95\xd1\xf0\x03\x86\x8e\x7c\x5b\x5d\x7c\xe4\x07\x47\xc0\x61\x8e\xb6\x6c\x39\x36\xc5\xde\xe4\x95\x42\x67\x0f\x8b\xb4\xca\xf3\xf4\x21\x52\x02\x77\x76\x54\xd8\xf7\x8d\xd3\xf8\x92\x76\x8e\xc3\xb7\xf9\x31\x5e\xbe\x45\x09\xb5\xb4\x6c\xc3\xb0\xdd\x1e\x61\x3c\x40\x29\x4d\xdf\xa0\x88\x2e\x77\x13\xfc\x26\x6a\xfb\x64\x49\x13\x1c\xa4\x6d\x9a\xbc\xeb\x0c\x50\x44\x93\xdd\x25\x7e\x13\x05\x89\x01\xc0\xa6\xc0\xac\x06\xfe\x6e\x27\x58\xbe\x29\x96\x68\x5a\x15\xf2\x8f\xb6\x2b\xd9\x75\x4f\xa3\xf9\x32\x7e\x52\x03\xa5\x34\x75\x7b\x2d\x9a\xa1\x7e\xf7\xa8\x7f\xb4\x7f\xd0\x3d\xda\x23\x7b\x78\xb5\xea\xb6\x0c\x74\x02\xc8\xc5\x6a\xa8\x44\x91\xb5\x87\xf8\xb6\xd8\xbb\xdb\x82\x65\xef\xef\xed\xf5\xf6\xdc\x8c\xa4\xea\x97\xe9\x5a\x67\x15\xbd\x49\xdb\x08\xa9\x0c\xef\xde\xbd\xf3\xf7\xf1\x9b\xb4\x1d\xbd\x51\x49\x89\x4c\x92\x86\x94\xef\x3a\xa5\xd5\x67\x64\xe2\xa3\x67\x8c\x09\x8a\x69\x8d\xd3\x5b\xbf\x53\xb7\xec\x2d\x36\x6e\x16\x99\xdf\x39\xad\x0e\xf0\xf3\xe7\x34\xab\xa2\x45\x00\xdb\x57\x1d\xdf\x3f\x7a\xe6\xb6\xbf\x54\x50\xad\xc5\xa5\xd5\xe0\x5d\xbd\xef\x54\x5b\xbb\x9d\x29\x56\x2a\xc9\xa3\xdb\x24\x00\x2e\x59\xc7\xdc\x8e\xb6\x33\x37\xbd\xd6\xf5\x16\x6d\xf8\xcb\xd3\xd4\xd5\x65\x3b\xfe\x41\x8b\xb6\x24\x2d\x47\xc9\x0c\xc9\x24\x6c\xd3\x55\x69\x43\xab\xf6\x1c\x18\xb2\xda\x9a\x01\xd0\x70\x47\x33\xaa\x00\xc9\x7d\x77\x27\x41\x3b\xe2\x2f\x7e\x23\x99\xe8\xe9\x6e\x77\x93\x7a\x2c\x7e\xf3\x24\xf3\xac\xef\xa4\x69\xea\xc6\x46\x66\xf0\x33\x45\x13\x21\x8c\xdc\x8e\x25\x55\xa9\xe5\x1c\x44\xf2\xc7\x8e\x1f\x20\xbe\x13\xe1\x5d\xc0\x99\x6c\x27\xd0\x91\x75\x0d\x53\xec\x76\x9e\x39\xc2\x58\x2d\xca\x96\xc9\xb8\x7e\x9b\xe9\x0c\x8a\xfd\x25\x30\xa0\x9b\x12\x33\xd3\xa6\x9f\x6e\xe7\x25\x87\x9c\x83\x8e\xd2\x14\xfa\x65\x4d\xe1\xc1\x9e\x56\x14\xf6\x54\x64\xb0\xbe\x42\x71\x94\x5e\x72\x4b\xaa\xc3\xb2\x80\x9b\x9d\x94\xff\xc7\xa5\xf8\x77\x53\xca\x3d\x29\xc0\x91\x09\x9d\x92\x19\x9d\x5a\xa7\x82\x05\x75\xe4\x3b\x87\x8a\x73\x37\x3a\x3a\xc4\x68\x86\x31\x99\x53\x47\x7c\x2c\x4e\x05\xd5\x78\x48\xe4\xae\xc6\x5c\x2d\x45\x8c\xb4\x7c\x19\x73\x2a\xd7\x1a\x3e\x0b\x29\xc4\x80\x61\xd9\xb0\xcd\x21\x45\x9c\xce\x07\x1c\xda\x89\x70\x30\x46\x9c\xf4\x30\xb6\x43\x0c\x74\xa0\xc8\x7e\x4f\x06\x84\xe8\xef\x89\xbf\x70\x62\x3b\x3c\xa4\x94\xa2\x4c\x45\x10\x54\xb9\xbb\x18\xaf\x56\x7e\x17\x8c\xf1\xf5\xa9\xec\x2c\x3c\x33\x8e\xf3\xfd\x43\xf9\x7d\x7e\x1f\x41\xac\x3c\xfb\x5b\x1f\xe3\xc7\x71\x98\xb3\xe6\xfe\x7e\x00\x7f\x8f\x0e\x83\x84\x76\x49\x44\xfb\x47\x8d\x9b\x8c\x85\xdf\x1a\x90\x7c\x70\x24\x5f\xfb\xbe\x1f\x24\xf4\x90\x44\x74\x6f\x4f\xbd\x9f\xb0\x69\xb8\x8c\x79\x20\x6b\x6e\xf3\xb5\x71\xa4\x21\x4b\xca\x95\x0b\x4f\x17\x93\x18\x0c\x56\x75\xec\xca\xe3\xf8\xed\xf4\x38\x6e\xb7\xc5\x01\x11\xe5\x74\x69\x37\x2a\xc6\xf8\x6d\xff\x70\xb5\xca\xdf\x45\x56\x7f\xf4\x0a\xd0\x01\x0f\xd1\x12\xe2\x91\x9a\x6a\xe1\x98\x3a\x45\x4e\xb3\x93\xfa\x0e\x5e\xad\xc4\xef\xce\x0d\xfc\x9c\x22\xa7\xdd\xf9\xee\x3b\x18\x3f\x4e\x6b\xa6\xb1\xba\x0b\xbf\xf5\xe1\x04\x92\x95\xa2\x4c\x95\xbc\xe5\xa7\xae\x8b\x16\x83\xb0\xc4\x9e\x66\xf2\xce\xff\x7c\x6a\xa9\xab\x03\x4d\x67\x2d\x9a\xa0\x0c\xe3\x41\x04\xea\xb6\x09\xba\x83\xb0\x15\x19\x99\xe2\x40\xfc\x5c\x1b\x25\xf3\x03\xa0\x89\xee\x1d\xe2\x41\x8e\x26\x38\x70\xcc\xe9\x83\x7c\xf9\x74\xa6\x7e\x9d\x85\x67\xe4\xec\xf4\xc7\xf7\x57\x9f\x7e\x3e\xbd\xfe\x74\xf6\xf1\xd3\xd9\xa7\xab\x5f\xc9\xd7\xf3\xcb\x4f\xe5\x94\xd3\xaf\x97\x9f\x3e\x9f\x9f\x11\x2d\xc3\x93\x28\xff\x94\x70\x76\xcb\x32\x02\xd8\xb7\x24\xca\x2f\xc3\x29\xd3\x69\xa2\xaa\xcb\xf7\x1f\x45\x01\x57\xa7\x3f\x9e\x5e\x40\x8d\xa5\x04\x2b\x5a\xa6\x09\x3b\x69\xca\xb4\x6d\x83\xc9\x0d\xed\x1c\xdf\x6a\xf2\xbf\x39\xbe\x69\xb7\x71\x86\x26\xe4\x81\xde\x0e\x6f\x46\x80\x28\x83\xa6\xe4\x01\xbb\x6e\x2c\xfe\x92\xa5\x78\x87\x71\xc3\x5a\xa4\x74\x46\x66\x25\xd7\xa1\x29\x29\xf4\x3d\x6a\x54\xc9\x14\xd7\x3a\x35\x4b\xbd\x0d\x31\x31\x27\x95\x36\x4c\x01\x32\x6f\x1a\x76\x4b\xd7\xe1\xbd\xe0\x60\xaf\xe2\x1c\xdc\xed\x6c\x97\xff\x34\xd3\xd4\x6d\x79\x54\xc3\x1d\x18\xe9\xbf\x4b\x76\xf6\xec\x2d\x1c\x0a\x7c\x52\xcc\x92\x56\xa2\x7a\xbe\x36\x6a\xd0\x2f\x6a\x78\xb3\xd6\x19\x16\x88\xe5\x10\xa1\xa8\xb4\x15\x68\xd3\xcf\x6e\xe7\x79\x99\xc7\xaa\x53\xcd\x6f\xc0\xd0\x61\xc7\xde\xe3\x0f\x3b\xc1\xa1\x2c\xee\x79\xc9\xc6\x2a\x4e\x1c\x86\x6b\x76\x66\xd6\xa2\xac\xba\x87\x3c\xa3\x77\x3e\x2c\xb6\x55\x4b\x08\xb7\xaa\xb2\xa8\x7b\xcb\x71\x0d\xbb\xae\x48\x79\x4b\xab\xd8\xc9\xeb\xda\x8e\x3e\x2f\x14\x99\xda\xab\xab\x29\xd8\xa8\xa1\xdc\xd7\xe7\x0f\x81\x45\xd1\x95\x75\x19\xec\x3c\x53\xf6\x33\xe2\x89\xef\x77\x4b\x07\x2e\xa5\xf8\x28\x56\x7b\x0b\xd4\xf6\xa6\xfe\xe2\x85\x3a\x7e\xf9\x7e\x37\xf0\xfd\xe2\xa6\xa7\xeb\x3f\x73\xc2\xf3\xfd\xde\xd6\x1a\x3f\x25\xb5\xf5\x7d\x4a\x8a\xda\x7a\x81\xef\xf7\xac\xda\x5e\x73\x2b\x69\x80\xcd\x7b\x7d\x7d\x2d\x09\x66\x76\xbe\xe7\xf1\xf4\x63\xf4\x9d\x4d\x48\x68\xe9\x81\x48\x4e\x87\x1d\x62\xfe\x6f\x44\x96\x5a\x76\xd0\xd9\x03\x88\xdd\x98\x65\x6c\xcc\x9b\x51\x72\x97\x8e\x43\xd1\x8e\x96\x53\x09\xa4\x61\xe3\xb9\xee\xf8\x24\xa1\xfc\xb8\xdd\xce\xde\xee\x1f\xe3\xa4\x4d\xd9\x9b\x7c\x98\x8d\x88\xf8\x87\x26\xff\xe1\xb3\x03\x92\xd0\x10\x25\xbb\x3e\x3b\x80\x28\x18\x76\xef\x8a\xa0\x07\xfb\x24\xa3\x9d\xe3\x9d\x1d\xfe\x8e\x76\x8e\x71\xd6\xa6\x00\x52\x0a\xc0\x7a\x21\xca\x76\x99\xe8\x70\xf6\x1f\xec\x8d\xcf\x0e\xd6\x64\x5a\x0f\x54\xba\x4f\x38\x75\x9c\xe3\x9d\x1d\x06\x85\x08\x49\xc6\x69\x51\xca\x95\x4b\xbd\x8c\xde\x98\x0f\xd9\xc8\x60\xe1\xc9\x5b\x07\x48\x6a\x88\x6f\xf5\x55\x6a\x5b\x85\x57\x74\x3a\x0e\x39\xd8\xd1\x87\x3d\xdc\xce\x74\xa0\x3b\x5e\x0e\x95\x60\x23\x9c\x15\x17\xb2\xff\xd1\xa5\xd4\x1f\x4c\xc4\xeb\x1d\x9f\x64\x6f\x18\x0e\x26\x88\xbd\x61\x84\xef\x76\x49\x86\xd7\xf6\x45\x13\x58\xca\x20\xa7\xe3\x75\x3a\x1d\xd1\xe8\x43\xb6\xb3\xa7\x67\x05\xf5\xf0\x6a\xe5\xf8\x22\xd9\x3b\x32\x89\x1d\x48\xf4\xba\x7b\x22\x5d\xfc\x2d\xf2\x77\xe1\x55\xa7\xfc\x9f\xdf\x3d\x14\x39\x51\xe7\xfb\x84\x75\x6e\xf6\x6f\x7a\xe1\xc1\x7e\xbf\xd3\x39\xec\x60\xab\x48\x79\x6f\x58\x3d\xad\xa4\x36\x3e\x99\x4d\xcd\x9a\x6c\x36\xd6\x87\x84\xd6\x25\x33\x75\x5f\x4d\x96\x98\x2c\x24\x8c\xfe\x9c\x3a\x0e\xb9\xa3\x4e\x07\x20\xd0\x17\x6f\x3b\xab\xd5\xe2\x5d\xb7\x26\x0a\xcd\x12\x04\xc7\x59\x8b\xce\x94\xe0\xe4\x9c\x85\x67\xf0\xd1\xec\x2d\xdd\xf1\x59\xd7\x5f\xad\x66\xef\xa8\xf8\xa1\x25\x2b\x35\x9f\x33\xf9\x25\x18\xe8\xcc\xa9\xb3\xe3\x90\x19\xdd\x99\x61\x32\x7b\xe7\xb3\x9d\xae\x2f\x08\x23\x15\x82\x6b\x3d\x25\x76\xc4\xd2\x3a\xce\xde\xd1\x7e\xe7\x68\xff\x18\xf3\x36\xf5\xbb\x24\xdb\x85\x47\x79\x1f\x90\xbd\xa3\x5d\xf9\x42\xa4\x77\xcd\x71\x66\x8d\x66\x6f\x26\xa8\x4b\xf6\x8f\x88\x8f\xf1\xce\xfe\x11\x7e\xdb\x19\xc8\xa4\x1d\x4e\x7c\x1c\xcc\x76\xc5\x6f\xf1\x93\xa4\x6f\x68\x7f\xaf\xd3\xdb\x3b\x3a\xda\xef\x1e\xf4\x0e\x3a\xfd\xa3\x7d\x82\x38\xdd\xeb\xee\x70\xfc\xae\x23\xdb\x13\xa3\x0e\x49\xc5\xa1\x61\x71\x1c\xbe\xa3\x07\xc7\x38\x46\x62\x39\x75\x30\x09\x77\xe8\x81\xc4\x25\x40\x13\xe4\x77\x48\x28\x83\x38\x90\x90\xf2\x1d\x5f\x64\xee\xf6\x8e\xf1\x18\xf9\x6f\xdf\x76\x7b\x90\xbb\xdb\x6b\xc0\x63\x88\x49\x8c\x7c\x91\x7b\x2c\xe4\xd8\x3b\x3a\x45\xca\xaf\x57\x55\x16\x03\x80\x01\x17\x85\xc1\x4b\x7b\x25\x2c\x8a\x48\x23\x74\xf1\xae\x33\x98\xb7\x85\xb8\x7b\xa7\x57\xc7\x5b\xba\x18\x38\x1d\xcf\x29\x7d\xb2\x93\xe3\xf6\x5d\x70\x67\x22\x22\xe5\x3b\x0b\xdc\x76\x3c\xa7\xad\x93\x44\x02\x0e\xe6\xed\x3b\x6d\x28\xa0\x02\x24\x29\x93\xa8\x5e\x3f\xe8\xf5\x2b\x77\x7f\x5d\xff\x35\x26\x02\xe2\xbc\x55\xf0\x48\x60\x8d\x5f\x33\x36\x8e\xf2\x28\x2d\xd9\xe0\x65\x35\x07\x74\xb9\xe8\x54\x7f\x7c\x52\xba\x7e\x2f\xe7\x8f\xb6\x2f\x11\x53\x5b\xcd\xc9\x58\xdf\x18\xc8\xec\xff\x1f\x3b\xf3\x16\x56\x8c\x37\xe2\xec\xb1\x81\xaa\x9c\xe3\x40\xff\x22\x5a\x5a\xaa\x1f\xbf\xe7\x8c\x50\xc5\x88\x58\xf0\x86\x61\xae\x15\x23\x07\x25\xc5\xc8\x41\x70\x74\x00\xe5\x3d\x2f\x83\x99\xb2\xc6\x19\x0b\x39\x0b\xe0\xa0\x6a\x97\x25\x64\x55\x28\xeb\x39\x01\x4c\x9b\x79\xec\x1d\x62\xab\xd8\x12\xca\x62\xc4\xf2\x40\x9c\xaa\x95\x88\xe7\x77\x3a\x81\xdf\xe9\xd8\x70\x3b\x50\xd3\x73\xba\xa7\x17\xd4\xf4\x10\xa8\x23\xbb\x75\x23\xa6\x3a\xa4\xc5\x6e\x7f\x8b\xa0\xa5\x6f\x45\x8f\xfa\xd8\x4b\x93\x8f\x19\x63\xbf\xb1\x86\x68\xf5\x11\x46\xce\x14\x1e\x9f\xb9\x0a\x4b\x0a\x81\xd3\x75\x39\x4a\xf0\x80\xa1\x0c\x25\x18\x07\xc9\x5a\xdd\xfa\x76\x8e\x02\xbf\x73\xa4\x2f\x1f\xfb\xc1\x91\x9c\xff\x6d\x77\xe7\xfd\x8e\xbe\xa9\xf5\xb1\x37\x35\xad\xd9\x06\x6f\x59\x17\xa3\xdb\x86\x20\x4c\x6c\x0b\x1b\x88\x38\x8f\x4d\xc3\xf4\x31\x47\x36\x50\x59\x3e\x42\xe3\x8e\x36\x0c\x46\x6a\x1a\x71\x16\xce\x59\x5e\x5b\xbf\xc8\xdf\x85\x19\x91\x15\x75\x03\xbf\xd3\xd5\x15\x89\x0a\xba\x5b\x04\x3a\xb0\xba\xd0\xf7\xd4\x76\xdf\xad\x00\xbc\xcf\xf4\xb8\xd2\xdf\xa2\xb7\xea\x2e\xd8\xf4\x16\x4c\x1b\xa0\x31\x5b\xd4\xfb\x87\x7e\xd1\x84\x28\x3f\xfd\xce\x59\x92\x47\x37\xf1\x73\x24\x51\xe0\xac\xb6\x38\xc0\xaa\xa2\x16\x5b\xad\x18\xe0\xce\xd5\x90\x04\xb4\x60\xcb\xb1\xb0\xdc\x82\x8f\x59\xfa\x1b\x4b\x5e\x5c\xbb\xa8\x7c\xb5\x82\x10\x9c\xa2\xf2\xad\x75\x6f\x61\x44\xe5\xba\x2f\x59\x18\xb3\xc9\x1f\x5e\xf7\x2b\x98\x56\x04\xfc\xa4\xab\xee\x55\xfc\xae\x1f\xf8\xdd\xc2\x3c\xb7\xdb\xdd\xc2\xb3\x2c\x8a\x3a\x28\x3a\x04\x86\xe7\xbf\x93\x8e\x0e\x02\xbf\x73\x50\x4b\x47\x5b\x98\xd9\x93\x5c\x66\x91\xb1\x3b\x96\x70\x45\x5d\x10\xb1\xf6\xdf\xc3\x70\xba\xbf\x87\x07\xe6\x2c\x8c\xff\x6d\x0d\x7a\xfe\x88\x6a\x26\xbf\x1c\x82\x1b\x08\xa1\x0b\x71\x41\x14\x31\x74\x03\xbf\x6b\x9d\x17\xbb\x2f\xb1\xeb\xed\x1f\x88\x8e\x3f\xae\x1b\xd9\xb0\x36\x8e\xf3\x88\x3a\xbf\x39\x24\x93\xa6\x42\xc3\x54\x06\xea\xff\x6d\x54\x18\x0a\x6d\x86\xf0\xae\xb7\x1b\x52\x72\x8c\x2e\xc2\x69\x4b\xe3\x17\xdc\x76\x46\x8e\xc4\xdb\x2c\x8c\x83\x48\xc9\x53\x55\xf4\xa5\xf7\xec\xd9\x57\x8d\xd7\x8f\x52\x86\xaa\x1c\xb3\x5f\x70\xba\xee\x6d\xbf\xde\x2c\x9f\xae\xed\x1a\xf4\xb1\xfa\xd9\xd3\x74\xef\x59\x41\x91\x14\xf1\x07\x35\x06\xde\x41\x47\x79\xa6\xf5\xa5\x67\x5a\x5f\x23\xe0\x75\x25\x02\x9e\x20\xda\xa9\xb2\xea\x9c\x28\x44\xbc\x99\x78\xaf\xe1\xef\xba\x07\x3a\xc4\xd2\xbe\x8c\xa6\x7e\x27\x48\x7c\x0f\x23\x89\x80\x77\xb4\x2f\xc3\x2c\xf9\x7e\x5f\xc6\x59\xf2\xfb\x87\x32\xd0\x92\xef\xef\x61\x72\x4f\x43\x2b\x54\xd1\x29\x0d\x4d\xc0\xc3\x73\x7a\xea\xba\xa7\x3a\x80\x74\x4e\x2e\xe9\xb9\xeb\x9e\x7b\x77\x87\xab\x95\xe3\x90\xef\x34\xf4\xbe\x66\xe9\x3c\xca\x19\x79\x4f\xad\x68\x7d\x4b\x74\x8a\x6d\x64\x62\xfc\xb8\x26\x5f\x69\x46\x1f\xbc\x29\x80\x80\x56\x4c\x81\xe4\x0c\x7c\xf7\x32\x96\xa7\xf1\x1d\x43\xb0\x44\x11\x2f\xe9\x2f\x1f\xd7\x78\xb8\x11\x31\x7a\x44\xcb\xdb\xf6\x37\xf2\x0d\xaf\x35\x1c\xcc\xfb\xd5\xaa\xc6\xc0\x5e\xb5\xf7\x82\x09\xe2\x8c\xd2\x04\x02\xea\x61\xd7\xe5\x1e\x9f\xb1\x04\x7d\xb3\x2d\xfc\x33\x30\xd8\xa0\x97\xc6\xc1\xcb\xd9\xf7\xf6\x1d\xec\xba\x3b\x3e\xa5\xf4\xa6\x48\x3e\x99\x65\xe9\x9c\xed\xee\xef\x3b\x3a\x4a\x7d\x82\x1f\xd7\x6b\x84\xc9\xd5\xa6\xc2\x5c\x5b\x6d\xa1\xd6\x18\xa0\x06\x36\xed\xc8\x10\xa7\x0c\x9a\x83\x45\xc3\xd6\xe4\xa4\x06\xa6\x80\x79\xd7\x09\x7e\x14\xff\xd2\x56\x47\x9b\x3a\x79\xd7\xe3\xc6\x5d\xd9\xab\x41\x5f\x9c\x8b\x97\x77\xe2\x34\x42\xc5\xaf\x5c\xdd\xa2\x9b\x9c\x26\x34\xa6\x0c\x50\x13\x0d\xb8\x97\x7e\x0b\xb8\x37\x0d\xa3\x18\x2e\x22\xd4\xdc\x90\x18\x7e\x8b\xc1\x23\x63\xca\xbd\x49\x3a\x0f\xa3\xa4\x21\x66\x31\x1f\xa0\x68\xb5\x42\x5d\xa8\x60\xe6\xba\x9f\x84\xf8\x25\x7e\x52\x5f\xac\x7a\x4a\x69\x3e\xc8\x68\x12\xa0\xb1\xeb\x8e\x3d\x96\x70\x96\x21\x31\xd1\x39\x4a\x30\x19\xbb\x2e\x1a\x7b\xec\x7b\xc4\x91\x58\x12\xad\x0e\x16\xaf\x28\x05\x7e\x23\x26\x6c\x10\xa3\x7b\xe4\xa8\xd9\xdb\x19\xcf\xc2\x28\x69\x8e\x1f\xc6\x31\x73\x30\x0e\x50\x4a\xaf\xe0\x82\x40\xa9\x0d\x32\xb2\x24\x31\x0e\x96\x22\x2d\x88\x51\xa2\x67\x65\x8a\x1f\xc7\xae\xdb\x0a\xa1\x01\xb2\xae\x18\x4d\xf1\x7a\x7d\xac\x15\x2e\xef\xd2\x63\x1c\xa2\x0c\xd0\xf6\x71\x43\x0c\x28\x1d\x8e\x88\x1c\x66\x9f\x70\xd7\x6d\xc9\xce\x7d\x91\xfe\xa0\xeb\x35\xf9\x52\x9a\xe1\xb9\x6c\x40\xb8\x61\x49\xa9\x96\xbd\x9c\x86\x94\xfe\x43\x47\xc5\x75\x5d\xc4\xe9\x6d\x19\xd7\x74\x70\xea\xb1\x79\xc4\x91\xb3\x4c\x66\x61\x32\x89\xd9\xc4\x90\xab\x43\x22\xc2\x70\x80\x32\x1a\x7a\x69\x62\xde\x67\xfa\x3d\x1e\x64\xe8\x51\x0d\x59\xc0\x48\xc6\xc2\x3c\x4d\x82\x68\x0d\x50\x8d\x21\xac\xa8\x34\x06\xbd\xad\xc7\xc4\x6a\x37\x3f\x90\xf3\x93\x2e\xac\xa9\xbe\x6f\x66\x56\xad\x70\x3f\x0c\xb3\xf9\x7e\xb5\x12\xad\x1f\x74\x03\x1f\x52\x42\xed\x32\x97\x8a\x55\xc4\x94\x5a\x85\x7b\x77\xb0\x1d\xfe\xa3\x0e\x8c\xc1\x6f\x69\x22\x11\x64\x81\x44\x21\x00\xb9\x31\xd6\xb1\x31\xd6\xe4\xd3\x0b\x87\xb5\x51\x8c\x96\x69\xee\x9f\x65\x3f\x1c\x18\x29\x0e\x23\x65\xde\xa9\x3e\x82\xbd\xe2\xe6\x40\x89\xd9\x81\xf3\xf4\x9a\x7c\xa8\xb9\xea\x82\x1b\x2d\xee\x5d\x4f\x56\x2b\x24\xfe\xd0\x56\x87\x20\x4e\xb9\x77\x7d\xbf\x5a\x71\xec\x5d\xdf\x51\x46\xb8\x77\x9d\xd3\xae\xf8\x13\xca\x6c\xa1\xc8\x30\xd6\x78\xb9\x98\x9c\xa8\x38\x04\x6b\x72\x56\x17\x27\x8a\xea\x20\xb0\xad\xcc\xbb\x9e\xe0\xc7\x4c\x55\x94\xd1\x0c\xea\xc9\x60\xb5\x45\x53\x94\x81\x31\xa8\xc1\x0c\x53\x6b\xa3\x08\xa2\xac\x96\xec\xa4\x19\xf1\x9c\xc5\x53\x07\x1f\x23\x4e\xaf\x84\x70\x37\xb8\xdb\x88\xc6\x9d\xd0\xc7\xeb\xfb\x20\x23\xd7\x93\xa0\xe5\xaf\xa1\x0a\xae\x9c\x9e\x48\x8e\xce\x48\x42\x7c\x4c\x72\xf4\x01\x7e\xe8\xf5\x14\xe1\xc7\x0f\xca\x56\x1f\x62\x70\x8b\xa5\x98\xc9\x51\xc8\xc4\x28\xf8\xe4\x04\x65\x10\x99\xb4\x60\x8b\xea\x03\xbb\x36\x38\xa4\xad\x1b\x17\xab\x15\xfa\x5e\x8e\x06\x2b\x75\x15\xdf\x89\xee\x9c\x43\x9c\xeb\x99\x83\xc9\x14\xdc\x41\x6d\xd3\x64\xd1\x60\x86\x44\x4b\x25\xdc\x94\x6c\xac\xfa\xad\xab\xcf\x4c\xf5\x1a\xd5\x7e\x4d\x6c\xad\x9c\xf6\x37\x85\x45\x2f\x7f\x1a\xea\x96\x8f\xb9\x71\x3e\x9d\x00\x43\x80\x9f\x77\xe5\x3c\x33\x93\x47\xba\xff\x5b\xb7\x72\x12\xdd\x16\x7d\xb7\x01\xd5\x04\xa3\xaf\x35\xe2\xf9\x8a\x16\xaa\xff\x45\xdc\xef\xcc\x4b\xbf\xd1\x1a\xcb\x63\x71\xe4\x22\x19\xb0\xeb\x5a\xa7\x73\xd7\xe5\x24\x53\xdc\x9a\x8a\x25\x23\x7f\x06\xa5\x86\x8f\x65\x34\xb0\x4c\x7b\xda\x86\xae\xab\x7e\x54\x5e\xe4\xae\x7b\x22\x9b\x06\x11\x06\x35\x8f\x5e\x13\x18\xe6\xda\xb0\x46\xe2\x3b\xd8\x61\x55\x8d\xa0\x2d\x22\xc9\x66\x0c\xe4\x84\xdd\x37\x79\x43\x5b\x3d\x8b\x62\x15\xea\x9d\xde\x82\xa8\x98\x64\x88\x21\xab\x52\xc5\xca\xa6\x62\xb6\x45\xe2\x9a\x3c\x78\x53\xfa\xb5\x36\xd6\x27\xa5\xf4\xbb\x84\xb2\x95\x98\xeb\xe2\x65\x90\x49\x18\xf8\x18\xc5\xde\x8f\xed\xd8\xfb\xa5\x1d\x4b\xa0\xec\x47\x45\x72\xc1\x77\x80\x57\xf0\xbb\x7d\x8c\x2c\x42\x94\x69\x3d\x8c\xac\x94\x48\x01\xba\x68\x99\x48\x94\x79\xa9\xcb\x2b\x48\xf8\x51\x36\xb9\x46\x37\xf7\xb5\x64\x67\x8f\x3a\x44\xef\xb5\x58\xd2\xbb\x1e\x67\xd5\x5e\x59\x36\x4a\x57\xab\xd6\x05\x2e\x57\x00\x23\x55\x1b\x4d\x49\x6c\x39\xa2\x16\x18\x85\xef\x81\x74\x43\xc2\xe5\x22\x5b\xe8\x42\x88\xfd\x1b\x70\x08\xdf\x3d\xe9\x05\xe9\xc9\xe5\xf4\x4d\x69\x1e\x8b\x8a\x43\x3b\x9e\x58\x89\x6d\x12\x41\xcf\x5c\xc6\x00\xd2\xb2\x44\x04\xbf\x41\x96\x48\x2b\x7b\xa0\x5c\x01\xc3\x91\x92\x53\xfc\xc6\x0c\x8c\x45\xca\x67\x33\x30\x93\xa0\x69\xbb\x4d\x96\xb4\xe5\x37\x32\x49\xa5\x4a\x65\x4a\xc2\x76\x9b\x18\xb9\x45\x34\x1a\xc8\xaf\x54\xc0\x72\xb5\x42\x4b\xe0\xad\xc3\x7c\x44\x19\xd9\xd9\x09\x57\xab\x44\x42\xe6\xab\x2d\xcf\x24\xad\x8b\x45\x98\x7a\xcc\x75\x23\x94\x7a\x77\x25\xe2\xcf\xc2\x8a\xf7\xe0\xb6\xde\x43\x8f\xa3\x4a\x8f\xeb\x3a\xb8\xd9\xfc\x62\xf0\x12\xd8\xa6\x8a\x46\x45\xa2\x51\x09\x8a\xca\x8d\x52\x87\x94\x7e\xe0\xfb\x7d\xe2\xfb\x7b\x81\xef\xef\xd5\xc0\x94\x2b\x80\x37\x03\x57\xbe\x1f\xf8\xbd\x7d\x40\xe5\xf2\xfb\xc5\x21\x4d\x7a\x5b\x29\x98\x37\x0b\x5a\xc8\xc6\x5b\xd8\x3f\x0c\xf6\x0f\x35\x42\x94\x0d\x21\x2e\xd1\xa2\xf6\x82\xa3\x3d\x72\xb4\x1f\x1c\xed\xc3\x61\xe9\x99\xeb\x7c\xed\xc5\xd6\x03\xcb\x26\x24\xef\xf7\x2f\xd8\x34\x06\x9f\xf5\xc7\x35\x96\x6e\xd8\x24\x2d\x9c\x17\x20\xa1\xac\x4c\xad\xde\x2d\x95\xbd\xd8\xe4\x28\x12\x47\x15\x2b\x88\x58\x14\x51\xe2\xc8\x24\xd4\xc4\x06\x17\x4a\x4b\x9a\xa0\xb0\x18\xf8\x41\x84\x72\xc2\xc9\xd2\x38\xae\xc9\x27\xa5\x0d\x97\x63\x76\x18\xf4\x6a\x60\xd7\x61\x0c\x9e\xb3\xc2\x3f\x54\x63\xd0\x93\x0c\xa6\xa7\xf1\xd3\xfd\xb2\x71\x57\x7f\x5f\x34\xac\x6e\x8c\xcc\x31\x8a\xc4\x34\x7c\x81\xcf\xf3\xb2\x32\x3e\x44\x48\xc0\x9b\x9e\xcf\x63\xda\x2a\x97\x56\xfd\x0e\xa8\xd3\xba\xa6\x8e\x57\xab\x71\x69\xa0\x4d\xc3\x2a\xdb\x5f\x02\x91\xb3\x90\x8a\x92\x12\x6e\x5a\x18\xf5\x06\x2c\xb0\xfd\xe3\xbb\x23\x10\xa6\x85\x6c\x1f\x1b\xe7\x77\x35\x71\x10\xf6\xb8\x6c\xc1\xa5\x6e\x8f\xa4\xe9\x56\x27\xb0\x70\x82\x99\xb4\xd7\xf2\x4b\x69\x08\x00\x45\xe5\x9b\xee\xe6\x1b\xc2\x01\x31\x14\x5e\xf7\xb6\xbc\x26\x1c\xda\x08\x79\xfa\x4f\xe5\x21\x7c\xd8\x1b\x49\x94\xdf\x29\x1d\x26\xcb\x38\x2e\xfc\x5a\x81\xbd\x29\xe0\x81\x29\x60\x9c\xb3\x7b\x94\xab\x04\x46\xa6\x58\x7e\x37\x91\xe7\x77\x25\x5e\xcc\x68\x86\x52\x34\xc1\x83\x49\x50\x55\xe0\x60\xb2\xa8\xac\x1b\x2d\xf0\xcd\x48\x01\x18\x9d\xa2\x05\x1e\x2c\x82\xd9\x26\x39\x5b\x8e\x59\x25\x83\x20\xa5\xf8\xd2\xd7\x2b\xbd\x2d\xaa\xca\xa3\xa3\x32\x70\x4f\x4f\x3b\x3a\xf7\x4b\xb0\x3c\x9b\xeb\x57\x11\x90\x57\xbe\x16\x41\xdc\x9b\xa2\xc7\x35\xf1\xb5\xbb\x96\xbf\xc6\xc5\x43\x77\x5d\x5d\xe5\x95\x4b\x15\x8b\x02\x33\x92\x2a\x1a\xcc\x68\x84\x24\xe4\x56\x82\x52\x29\x63\x6a\x79\xc6\x9b\xaa\x9c\xa4\xd5\x51\xd2\x65\x68\xf4\xc1\xfe\x5a\x3b\x14\x4a\xd3\xa9\xcd\xe5\x6f\xee\x6a\x7a\xcf\x58\xe9\x28\x43\x4d\x35\x40\x5a\x53\x68\x77\x23\x66\xbc\xb6\x1b\x5c\x63\x89\xcb\x20\xea\xc5\x94\x82\xc3\x4e\x2b\x2a\x85\x35\xc3\xae\x2b\x4b\x6a\xb2\x21\x1f\x69\x7f\x32\x79\x63\x62\xb5\x1e\x5a\xfc\x1a\xbf\xd2\xde\x61\x49\xc8\x63\x05\xa2\x4b\x56\x42\x74\x51\xaa\xb1\x44\x23\xb6\xd0\xe1\x08\x6e\x9b\x65\xb8\x38\x1d\xa7\x96\xe3\x75\x83\xa1\xc3\x3e\x46\x49\xa1\x2d\xdd\xf0\x59\x2c\x70\x5f\x1a\x93\xf4\x51\xbb\xd0\x5d\x47\xef\x4c\x14\x60\xc5\x23\x14\x6d\x28\x89\x74\x92\x26\x10\x59\x6a\x7d\x3f\x8b\x62\x86\x5a\x08\x31\xca\x87\x06\x37\x06\x10\xba\x55\xe3\xcd\xae\xab\x4a\x60\xea\x63\x7f\xad\xc1\xbe\x4a\x73\xa4\x22\x57\xd5\x5a\x9e\x35\xb5\x20\xaa\xd6\x97\x45\x29\x87\xfd\xe0\x10\x54\xc7\xbd\x6d\x97\x67\x1d\x7f\x63\x09\xc9\x95\x63\xd7\xbe\x35\x52\x9c\x4d\xf2\xd8\x26\x6c\x49\xfb\xf8\x69\x2a\x78\xce\x2a\x4a\x7b\x5e\xd6\x52\x6d\xf9\x8a\xab\xde\xba\x2c\xb1\xdc\xbe\xd5\x6d\x56\xa5\x0d\xfd\x6d\xd7\x6a\x9d\xaa\xfb\xe7\x81\xaf\xbc\xe0\xbb\xe5\xcd\x53\x34\x2e\x42\xd1\x46\xe3\x6c\x6f\xae\x88\xe4\xb2\xe8\x25\x89\xc9\xb8\x6e\x33\x8a\x02\x7b\x2b\xd2\x8c\x33\x44\x11\xa6\x94\x8e\x07\xd1\x30\x1f\x05\x68\x49\x39\xb8\x93\xe6\x18\x0f\x12\xb4\x34\x91\x07\x07\x4b\xcf\x26\xc3\x16\xa5\x4b\xef\x96\xf1\x01\xfc\x2b\x19\xf2\x58\xc7\x83\x0a\x52\x14\xd3\x0c\x45\x18\x0f\x18\x8a\x49\x4e\xcc\x9b\xf2\x5c\xd5\x8c\x97\x32\xd3\x34\x77\x51\xfd\xe7\x9d\x7c\x8a\x11\x99\x85\x79\xbd\x13\xa2\x5c\x9e\x15\xc3\xc3\xfe\x93\x5e\x3f\x9a\x27\xa8\xdd\xc8\xbe\x69\xdc\xac\xd8\x7e\xbb\xcd\x06\x91\xb4\x12\x21\xa1\xd7\xac\x20\x68\xcc\xf3\xe8\x57\x45\x75\xe9\x7d\xf2\x57\xf6\x00\x37\x6f\xbe\xbe\x79\xf3\xfd\xc0\xf7\xad\x9b\xb7\xfe\x33\xf2\x5a\xa9\x77\x1b\xd7\x5d\x9b\x75\x6e\x64\x29\xf7\x13\xf0\xec\x8b\x7d\x27\x91\x16\x97\xc5\xa6\xc3\x37\x36\x9d\xea\x00\x3c\xe9\xe7\x28\xaf\x96\x1a\x99\xeb\x6e\x34\x2c\xdf\xb6\x46\x61\xfe\xbd\xf1\x8c\x8d\xbf\xc1\x83\xdd\xbe\x0c\xa2\xd7\x8b\xd4\xa2\x89\xc9\xe6\xbe\x58\xbd\xc1\xea\x6f\xd9\x05\xb5\x8c\x00\x2b\x3a\xd1\x2b\x3a\x52\x2b\x3a\x55\xdd\x00\x74\x3f\x5f\x85\x11\x12\xe3\xbf\x54\x17\xba\x32\x66\x57\xb9\x4f\xf6\xd2\x4e\xc5\x8a\x96\xb5\x4d\xc9\x84\xcc\x36\x17\x77\x7f\x90\x5a\x8b\xbb\x37\x22\x0b\x9a\x79\x53\x94\xa3\x14\x93\x18\x64\xcb\xd6\x02\x14\xf2\x4b\x34\xa1\x42\x48\x28\x3c\xbb\xd1\x04\xd0\x00\x67\xb8\xb1\xa0\x21\xea\xe0\x75\x34\x45\x11\x5a\x14\x21\x47\x41\x8f\xef\x53\x4a\x17\x56\xfc\xd0\xd6\x12\xcd\xca\xce\xe3\x53\xa8\x71\x46\x62\xf9\xc5\x54\xf0\x85\xd5\x6a\x2a\x06\x7a\xb5\x82\xef\xa7\xe6\xfb\xe2\xc3\xa9\xe4\x2a\x74\x4c\xb8\xfc\x9a\x4c\xb1\x8e\x6e\x25\x9f\x43\xd4\x21\x63\xb3\x93\xb5\x3a\xeb\x92\x95\x4f\x4b\x34\x2b\x67\xdc\x75\x11\xfc\x95\x9c\x68\x46\xc6\xd8\x42\xe8\xa9\xb0\x1b\x1d\x06\x6b\x0b\xdb\x29\x84\x9e\xfe\x96\xcb\x59\xe3\xd1\xa2\xd8\xb6\x74\x4d\x89\x0a\xd7\x15\xe0\xdd\x6a\xc6\xf7\x61\xc2\xb9\x77\xc1\x6e\x4f\xbf\x2f\xc8\x92\xe6\x24\xa6\x96\xab\x3c\x19\xd3\xdd\x70\xf7\x96\x4c\xe5\x9f\x09\x68\x96\x72\x34\xc6\x2d\x4a\xc7\x70\x2a\x90\x7e\xeb\xa8\x35\x59\xad\xb6\xe2\x5c\x4c\xcd\xad\x13\x38\xa8\x3b\x78\x44\x5b\x3e\x91\xc5\x8c\x57\xab\x1c\x4d\x31\xa5\xd3\xd5\xca\xd9\x0d\x77\x23\xa7\x45\x73\x34\x26\x4e\xe4\x80\x66\x04\x3f\x56\x01\xa6\xa5\xa6\x55\x48\x11\xb6\x3f\x44\x4e\x22\x09\x70\x37\xb6\xf0\x75\xf4\xbc\x24\xae\x1b\xb9\x2e\x2b\x5d\x86\x51\x9a\xbb\xee\x78\xc0\x82\x0c\x4d\x40\x93\xb5\x04\x91\x6e\x3c\x60\x5e\x9e\x2e\xb3\x31\x03\x0f\xf0\x60\x89\x50\x44\x4b\x08\x03\x39\xb6\xb3\x44\xa2\x90\x50\x43\x5b\x05\xe2\x44\x21\xb1\xa7\x62\x92\x5b\x4e\x15\xb3\xf2\x2d\x9b\x60\xf9\xb9\xe0\xb8\x39\x61\xcf\x7a\xfa\xeb\xc3\xd8\x90\x8d\x2a\xbe\xec\x1c\x3f\x8a\x54\x2a\xbd\x9c\x17\x34\x42\x4b\x4c\xe6\xb4\x73\xbc\xd0\x57\x31\xf3\x63\x3c\x43\x8b\xe1\x1c\xae\x62\xe2\xd2\x00\xe4\xc4\xc6\x44\x88\x2d\xdf\x06\x49\x0d\x8e\xe8\x80\x56\xd0\xa9\x24\x5c\x82\xb6\x57\xd7\xcf\x5a\x03\xa2\x21\x38\x2c\xef\x86\xfd\xfd\x60\x7f\x5f\xfb\x38\x80\x77\xc3\x61\x37\x38\xb4\xcc\xac\xfa\x2f\x81\x1f\xf3\xbb\x1d\xdc\x00\x36\x85\x1e\x79\x98\x89\xe1\x31\x6d\x84\x1e\x88\x41\x9b\xa6\xd9\x98\x4d\x02\xde\xa2\x74\xd7\xdb\xf5\xd8\x77\x36\x5e\x93\x47\xf1\x27\xd0\x57\xfe\x9d\xc0\xef\x76\x2c\x86\xb9\x61\xb2\x04\xb4\xec\xdc\x3a\x2d\x51\xc4\xad\x37\x8d\xc3\xdb\xdc\x75\x35\x8c\x85\xac\xd2\xbe\xbc\x87\x0c\x5b\xa0\x1a\x60\x71\xd9\xf6\x65\x30\x14\xa6\xe3\x7b\x2f\x81\xe0\x12\x7c\x38\xd3\x70\x55\x20\x08\xee\xab\xf3\x9d\x7f\x04\x23\xb2\x67\xd6\x14\x29\xa9\xbd\xe4\x15\xa4\x89\xe4\xb4\x71\x45\x49\x8b\x70\xe2\x12\xcd\x94\xab\x58\x9a\x01\x1f\xa6\xa3\x46\x95\x8b\x25\x03\x0d\x61\xa2\xa3\x62\xca\xb1\x40\x1c\x0f\xd3\x11\x52\x06\xbc\x19\xc6\x6b\x52\x65\x49\x29\xcd\x51\x48\xa4\xf6\x59\xde\xd6\x01\x82\x69\x01\x02\x08\x2c\xb6\x21\xd1\xad\xc0\xda\x2c\x36\xb1\xac\xf5\x27\xad\xa5\x77\x1b\xa7\x37\xa1\xd1\x4b\x44\x68\x29\x76\x8e\x3b\x08\x17\xbc\xf4\x96\x49\x34\x4e\x27\xac\xb1\x2c\xe0\x0a\x69\xc7\x2c\xbd\x29\x99\xd0\xe1\x88\xcc\x68\xe7\x58\x01\xee\xa0\x29\x95\x25\xe0\x63\xd9\xc8\x85\xae\x72\x0a\x5a\x8a\xc9\x70\x36\xa2\x0b\x02\x86\xe5\x0b\xd7\x45\x76\xb9\x09\x8a\x49\x66\xa7\x60\xb1\x01\x90\x59\xbb\xbd\xb6\x0c\xc9\x67\x03\x51\x55\x30\x59\x8f\x34\x8e\xcb\x51\xe0\xfb\x45\xb8\x87\xde\x7e\xd0\x33\x3c\x7e\x2f\xd8\xdf\x03\x92\x78\x89\x13\x41\x41\x12\x06\x6c\xc8\xd7\x5e\x04\x0a\xed\x5e\x10\x49\xa8\x88\x84\xe4\x0a\x0f\x31\xfc\x4e\x0a\x68\x44\x12\xdb\xfe\x05\x63\xba\xfb\xb7\x3f\xa1\xe1\x9f\xdc\xff\xfb\xcf\xd1\xea\x6f\x93\xbf\x4d\x06\xab\xb7\xc3\xbf\xbf\x1b\xbd\x79\x87\x25\xeb\xaf\xbc\xc5\xbb\xb7\x9a\xf6\x32\xb6\x88\xc3\x31\x73\x48\xb7\x44\x7d\x13\x32\x23\x8b\x1a\xea\xb3\x22\x26\x2b\xfa\x8b\x36\xe9\x6f\xb2\x49\x7f\x91\xb1\x95\x25\x89\xa0\xc0\x99\x0a\xa6\x2e\x27\x2d\xc1\x60\xc8\x6f\xd3\x9e\xae\x28\xa6\x0b\x34\x53\xd4\x47\x64\x14\xae\xb8\x44\x7f\xb1\x45\x7f\x63\x49\x7f\xd3\x12\xfd\x91\x49\xdd\x5d\x50\xd6\x98\xac\x56\xc8\xb8\x22\x64\x2a\x48\xeb\x1d\x1d\x2b\x4a\x05\x34\x61\xd9\x86\x07\x3a\x36\x14\x3a\xb6\x29\xd4\xb8\x29\xde\xd2\xe1\xe8\x58\x91\xe2\x0d\x0d\xd1\x98\x4c\xa1\xa9\x72\x68\xe8\x0d\x96\x6e\x8e\xd1\x14\xdd\xca\x33\xfc\x0d\x26\xad\x3b\x95\x0a\x54\xaa\xda\x71\x23\xc8\x17\xac\x00\x8a\x6a\x52\x34\x25\x89\x9d\x82\xc9\x03\xc6\xa6\xee\x6b\x72\x4f\x1d\x87\x9c\xd2\x0e\x39\xa7\x9d\xe3\xf3\xb7\xda\x67\xee\xf8\xbc\xdd\xc6\x8f\x37\xf4\x76\x78\x3e\x32\x6b\xe9\xb2\x54\x13\xf9\x4e\x73\xb4\x44\x11\x52\x66\x1c\x98\x4c\x0d\xe6\x5d\x07\x93\xf7\x62\xd9\x7d\xa3\xfe\xf1\xb7\xb7\x37\xba\xd0\x6f\xed\x36\x7e\x6f\xdf\x31\x50\x4a\xd1\x35\xbd\x19\x7e\x1b\xe1\xc1\x75\xa0\x4a\xbf\x36\x41\x6f\x6f\xbc\xdb\x2c\x5d\x2e\xe0\x2e\x77\x22\x47\xe8\x82\x0e\x2f\x47\x3a\x4a\xc6\x7b\xf2\x5d\x0c\x96\xa1\x94\xaf\xae\x7b\x21\x8b\xff\x2a\x8b\xb8\x32\x73\xa4\x94\x7c\x4a\x53\x71\x81\x95\x28\x77\x45\xe7\xe8\x92\x4c\xc9\x77\xf2\x9e\x7c\x15\x34\xf2\xfd\x1d\x3d\x75\x5d\x74\xdf\xa6\x53\x75\xdf\x7c\x4a\xbe\xe3\xf6\x15\x39\xa5\xdf\xdb\x97\xba\x83\x7a\xb5\xdf\xb7\x4d\x2e\xbc\x1e\x15\x41\x27\xe7\xa0\x3a\x55\xd1\x26\xb5\xe6\x3b\x69\xb3\x02\x66\x21\xd2\x3f\x27\x74\xba\x41\xf1\xa9\xeb\xa2\x94\x66\x42\x44\x9e\xd0\x31\x26\x33\x7d\x79\x3f\xb1\x16\x5a\xa6\x4b\x1e\x37\x94\x5e\x36\x2c\x22\x52\x48\xd5\xac\xf3\x27\x47\xa9\x4a\x9d\x3f\x39\xa0\x3b\x75\x5c\x9d\xa2\x34\xb5\xce\xff\x99\x04\x6e\x0c\xfe\x13\xa9\x68\x75\xfe\x73\xe3\x5d\xae\xde\xbc\x75\x82\x31\x4d\x87\xa1\x4a\xf6\xc9\x8e\x8f\x47\x15\x87\x5c\xa9\x82\x6d\x87\x0d\x15\x2e\x71\xaa\x97\x5d\x06\x42\xf9\x3b\x15\xf2\x7d\x42\x63\x34\xdd\xf5\x3b\x46\x5f\x2a\xf2\x4e\x06\x59\x30\x79\x4b\x97\x83\x22\x9e\xf7\x70\xb2\xe3\x8f\x06\xa6\x8f\x3e\x0e\x64\x52\xdb\x4e\xca\xd6\x63\x1a\x0d\xa7\x3b\xfe\x68\x5d\x35\xb9\x1f\x0f\x1c\x27\x18\xaf\x0b\xc3\x4c\xcd\x95\xb7\x84\x92\xad\xe7\xd2\x2f\xf1\x62\x30\x5c\xba\xab\xcf\x5c\xd6\x86\x9d\xb3\x30\xdb\xdc\xb1\x15\xa1\xfc\x9e\x1d\x3b\x7a\xdd\x8e\x1d\x3d\xbd\x63\x47\x34\x44\xa9\xbd\x63\x47\x25\x8e\x19\x59\x1c\x33\x97\x1c\x73\x59\xe6\x98\xe2\x04\x61\xb8\x4d\x23\x43\x31\x81\xf0\xe0\xb9\xcd\xfb\xf4\xe6\x2d\x24\xe0\x65\x71\x33\x6f\x67\x22\x71\xf5\xab\x58\x63\xaf\xd3\xf1\x60\xc7\x0f\xc6\x92\xeb\x6c\xec\xb1\xca\xce\xb7\x3a\x6f\x2f\x81\x7e\x3c\x2c\x29\x20\x94\x51\x60\xa4\xf6\x54\x0b\x38\xd4\x6c\xae\x52\x38\x85\xc3\xf2\x7e\x1f\xeb\x7d\x55\x6c\xb1\x63\x3a\x1c\x01\x27\x22\x53\xea\xc4\x2a\x4a\xdc\x84\xb6\x96\x15\x3d\x3c\xcc\x8a\x05\x55\xe2\x3c\xc0\xc1\xc7\x10\xcb\x22\x8e\x78\x75\x7f\x5d\xca\xfd\x55\xb4\x7a\xae\xc7\x6e\x4e\x9d\xb1\x43\xa9\x13\xde\xdc\x8c\xb5\x23\xf4\x2e\xba\xc1\x6f\x76\xf1\xd0\x1f\xad\x56\xfd\x16\x75\x38\xcb\x79\xf1\x6e\x10\xe0\x5d\xb1\x6a\x87\xd3\x11\xa0\xa3\x38\xe1\x8d\xfd\x32\x94\xdf\x4e\xd5\xb7\x5e\xf1\xce\x1b\x60\xf1\x3f\xf5\xd2\x7e\x83\x91\x4c\x7d\xe7\xaf\x56\x8e\x49\xf6\x06\x90\x38\xd8\xdc\x9f\x93\x0d\x59\xaf\xf0\x8f\x91\x86\x4d\x1a\x4f\x60\x38\x52\x20\x70\x05\xee\xdb\x4c\x9b\xcd\x88\xe2\xcc\x16\x05\xeb\x88\x2c\xc5\xde\x13\x53\xc4\xbc\xe8\x36\x49\x33\x76\x12\xe6\x6c\xe0\x44\x4e\xe0\x38\xb8\x8d\x98\x37\x5f\xc6\x3c\x8a\xa3\x84\x0d\x9c\xb9\x49\x54\xbb\xf4\xc0\x59\x9a\xa4\x9c\x47\xe3\x6f\x0f\x03\xe7\x01\x52\xc8\x84\x76\xc8\xc2\x8e\x3c\x58\x4c\x5c\x90\xbd\x7b\xf7\xae\x43\xe6\xd4\x5a\x6c\xfa\x9c\x48\xe2\xb6\x73\xeb\xe0\x63\x14\xd1\x5c\x36\x7a\x4e\xc0\x30\xb1\x85\x50\x4a\xe7\xd6\xde\xfc\x6e\x02\xf2\x26\xec\x60\x89\x62\xad\x13\x12\xa9\xfd\x15\x93\x08\x06\xd7\x75\x55\xca\xdb\x64\x38\x1d\xb9\xee\x58\xed\x6d\x4b\x12\x69\x76\x8c\x05\x99\x46\xc3\xce\x68\x38\x1d\x91\x09\x4d\xc9\x52\x7c\x49\x17\x42\xe6\xb5\x2a\x14\x6c\x55\x16\xe5\xba\x56\xb2\x81\x78\x6f\x4e\x28\xa5\xa2\x92\x41\x2b\x14\x39\x04\x05\x21\xc7\xc1\xab\x95\x6a\xa4\xe3\xe0\xa0\xda\x5e\x8c\x65\x6d\x8b\xc1\xd2\x6c\x28\x0b\x1c\x2c\xd7\x81\xd3\xd1\x44\xa1\xb6\xe1\x4e\x95\x30\x78\x0d\xb8\xa9\xa4\x04\x3e\x18\x8e\xb4\xe4\x67\xa0\x71\xd7\xc1\x8c\xbc\x56\xc0\x5c\x3e\x2f\x60\xce\x9f\x15\x30\xb9\xde\xd3\x17\x68\xae\x05\x4c\x4e\xe6\x2d\x4a\xa5\x1f\x63\x5e\x62\x9a\x79\xe9\x98\x93\x49\x3d\x45\x89\x69\x4e\x69\x82\x96\x44\xd2\x0d\x26\x77\xc5\xa9\x86\x3c\x50\xb4\xac\xa5\xe2\x65\x1d\x15\x2f\x37\xa9\x78\x22\xc9\xf7\xd6\x81\x08\xde\xec\xbe\x39\x45\x93\xc1\x32\x70\xfe\x8e\x06\x81\xd3\x5e\x2a\x1a\x6d\x3b\xd8\x21\x0f\x98\xdc\xd8\xf8\xc4\x16\x79\x73\x41\xde\x7a\x23\xbf\x29\xad\x4a\xd8\x5b\xcb\xd7\x42\x4d\xc5\xa8\x43\x74\x4b\xc6\x78\x30\x1c\x8f\x82\x61\x21\x46\x5e\xd3\x0e\xb9\xa7\x1d\x72\x2a\x04\xdf\xfb\xb7\xfa\xdb\x63\xfc\x78\x6b\x91\xe6\x64\x70\x1f\xc8\x4b\xad\x73\x72\x09\x25\x4d\x06\xe3\x40\x1b\x01\xde\x63\x5b\x46\xbe\x5c\xad\xd0\x39\x8d\x51\x8a\xac\x12\x44\xd7\x3b\xc1\x3d\xc6\xc4\xb4\x0e\x53\x4a\xaf\xf1\x3d\x8d\xd0\x98\xdc\x93\x3b\x6c\x22\x37\x9f\x4a\x1a\xd6\xa5\x5f\x13\xf1\xd9\xa9\xc6\x04\x2f\x7a\xdc\x3c\x35\xbd\xf8\x4e\xfd\xe3\xef\x6f\xa9\x16\x09\x77\xfc\xe3\xef\x12\x4d\x44\x95\x75\x39\xfc\x3e\xda\x56\xc6\x3d\xbd\xa6\xe7\x1a\x3a\xa4\x59\xad\x5c\x54\xbd\xb9\xad\x49\xf5\x85\x31\x30\xa9\x3b\x4a\x4a\xa5\x8b\xd8\xf2\xa4\xa2\x05\x36\xbe\xfe\x13\x1b\x1f\x43\xdd\xfe\x11\xde\x90\x5b\xf6\xf7\x55\x20\x35\xb8\x4f\xde\xf5\x76\x0b\x80\xd4\xb4\x64\xf0\xac\x94\x46\x9b\xaa\x91\xc2\xaf\x01\x0c\x35\xd7\x8d\x6d\xda\x41\x67\x37\xdc\xbd\x71\x5a\xda\x5d\xf3\x51\x69\xd6\x9c\xd0\x21\xa0\x5e\x09\x9c\x1b\x07\x2e\x9e\x07\xe9\x86\x75\x13\xa3\xbc\x64\xed\xe5\xec\x9a\xf0\x79\x86\xf5\x3a\xbb\x8e\x56\xd4\x44\x49\x93\x0d\x98\x54\xeb\x04\xad\xc4\x75\x4b\x7a\x3d\xd9\x07\x8d\xc9\xca\x70\x50\xf8\x8d\x06\x45\x77\x44\x43\x93\x70\xce\x5c\x37\xad\x53\x75\x46\x96\x3d\x65\x09\xc2\x15\xd4\x4d\xdd\xfe\x91\x9a\xa9\x0d\x25\x19\xcc\xd4\xde\x1f\x80\xc5\x79\xc9\xf8\xbf\x11\x8b\x33\x9c\xd4\x87\x5b\x2a\x01\x69\x8a\x26\x60\xc2\x68\x01\xa5\xc9\x00\x4a\x73\x3b\x8e\x66\xb7\x1a\x3f\xac\x42\xa4\x7e\x4f\x74\x2d\x4c\xc6\xb3\xb2\xfb\x62\x4d\xef\x78\xb5\x7b\x82\x92\x14\xa6\x2a\x37\x92\x7f\xcf\x0f\xfc\x9e\xac\xf9\xa9\xab\x78\x5d\xf3\x4d\x74\xfb\xca\x41\x95\x9f\x38\xe2\xff\xeb\x2a\x7d\x4a\xed\x69\x2a\x8d\xa3\xe4\xdb\xab\xab\x95\x1f\x6d\xad\xf8\x29\x37\x27\x53\x71\x1a\x3f\xe7\xb7\xb7\x59\xef\xf6\x3a\x5f\x15\x32\xcb\xef\x1e\x41\xa8\x20\x8d\x69\xac\xb9\xc8\xa3\xd8\xd3\xbe\xa6\x51\xc2\xdf\x3f\x19\x19\xc1\x80\x9c\x1f\x05\x7e\xb7\x08\xa4\xd7\x7d\x51\x1c\xac\x02\xc9\x5b\x1f\xdb\x7a\x10\x3c\xd5\x71\x3c\x96\x4c\xf2\x5f\x22\x3e\x2b\xe3\x7a\xf7\x30\x72\xf4\x1b\x07\x5b\xad\xd5\x89\xdb\x9d\xc7\x19\xb1\xbf\x4c\x37\xae\xcd\xb6\x44\xaf\x0a\x69\x66\x05\x43\xc9\x8b\xcd\x3a\x1d\x84\x81\x09\x7d\x02\x8a\x83\xd0\x3a\x99\x31\xdb\xd4\x4e\x8b\x3a\x4b\x92\xe3\xc0\x9c\xeb\x77\x34\x30\x16\xc9\xc5\x2e\xb9\xd4\x9e\xfd\x9d\xc0\xef\x55\x82\x9b\x90\xfd\x5e\xb0\xdf\x83\x61\x7d\xea\x34\xac\xe9\x69\x1a\x7d\x7f\xd6\x11\x74\x83\xa0\x38\x7f\x82\xa2\x9e\x3a\xcb\x99\x5a\xd3\x84\x8f\xd3\xf8\x77\x30\x0c\xf1\xa5\x43\x1c\xf5\x71\x1d\xd3\xd8\x7f\x7a\x4f\x2d\x1a\x90\x47\xcf\xfa\x83\x6f\xad\x5f\x7e\x5b\x5b\xfd\x73\xf7\xd1\x3d\x88\x9f\xa9\x10\xe4\xa6\x59\x3a\x3f\x51\xd8\x66\x24\x2a\xa5\xea\x35\x65\x9b\x18\xb6\x5a\x91\xeb\xfa\x2d\xa3\x9f\xb2\xc9\xba\xf4\x51\x89\xb6\x0d\x12\x07\x89\xa4\xc9\xf1\x66\x98\x0f\xda\x39\x4e\xdf\x85\xc7\x70\x03\xcb\x69\xbb\x0c\x2c\x4a\x32\xc4\x89\xef\xfb\x7d\xdf\xf7\xb1\x15\x35\xd6\x82\x16\xe1\x6d\xa7\x19\xe5\xcd\x24\xe5\xcd\xb0\x29\xa1\xd2\x05\x53\x68\x2e\x44\x63\x1c\xdc\x88\x94\x81\xd3\xdb\xfd\xbd\xbd\xde\xfe\x40\x8c\x6c\x90\xa0\xbd\xbd\xee\xd1\x7e\x1b\x21\xbe\x03\xe8\x9d\xfb\xf8\xdd\x3b\xbf\x83\x09\xff\x0f\xbf\xd3\xed\xb7\xf7\xf6\x7b\xdd\x0e\x36\xda\xbc\x08\x62\x3c\x21\x49\x74\x56\x00\x8c\x82\x8d\xbc\x2a\xe2\x52\xaf\x83\x37\xf9\x45\x94\x8c\xe3\xe5\x04\x22\x57\x15\x03\xab\x13\x6b\x58\x5b\xab\xf5\xff\x35\x91\x2e\xac\x8f\x8d\xe7\xdc\x6b\x62\x1c\x5a\x0b\xba\xba\x90\x5f\xb2\x0d\x46\x3c\x8c\xa3\xf1\x73\xfe\xc6\x1b\xf4\x1c\x3d\xb1\x92\x5f\x76\xff\x27\xf6\x04\xb8\x03\x3c\xdc\xc3\xea\x54\x56\x0c\x1e\xaa\x33\x8d\x33\x7c\xaf\xb0\x8f\xab\x8b\x73\x66\xa2\x9a\x15\x76\x73\x91\x89\x08\xf4\xce\x00\xc6\x0e\xea\xcd\xdc\x02\x24\x24\xd0\x8c\x24\xa6\x96\xb6\x89\x86\x46\x36\xec\xda\xb4\x40\xa8\xb6\x26\x88\x4c\x06\x63\xf0\x92\x3d\xf9\x05\xb2\x40\xbd\xe4\x33\xcb\xd8\xb4\x9e\x8b\x54\xa3\x00\x6d\xee\x82\x9d\xe2\x8a\x49\x1b\xdd\x18\x8a\xcd\xc2\xfb\x7a\x06\x20\x8e\xb7\x5e\x16\xde\xc3\xd9\xdb\xda\xab\x6a\x59\xc2\x70\x44\x72\xda\x39\x8e\xde\xe5\xc7\x58\x79\xc8\xe8\x63\xf1\x30\x07\xbc\x61\x92\xbf\x4d\x5d\xb7\xfc\xae\xa0\xee\x7c\x54\x58\xef\x87\xd5\xc5\xbb\x25\x2e\x57\xb7\x1a\x43\xa8\x6a\xcf\x64\x8b\x1d\x19\x5b\xb0\x90\x07\x12\xa4\xab\x84\x75\x53\x14\xf7\x92\x3d\x30\x9f\x87\xf1\x73\x7e\xf1\x1b\xf3\xa7\x3e\xda\xb6\x78\x5e\x15\xcd\xa6\x46\xa6\xc9\x79\x98\xf1\x2d\x52\x4d\xf1\xae\xc4\xa7\x8a\xe4\x27\x25\x9b\xd2\xd7\x29\x55\x40\xe0\x42\x32\x79\xa1\x98\x63\xc8\x06\x93\xf0\x49\x19\x26\x24\x69\x21\xc3\xa4\x24\x6d\x87\xfa\x4b\x4a\x69\xf8\x22\x19\xa6\x1a\xeb\xa6\x7e\xfe\x78\x16\x7d\x7b\x6e\x2b\xdf\x9c\x40\xf5\xd5\xd6\x19\x7c\x2a\x10\xa1\xa9\x7a\x79\xf3\xea\x7a\x97\x4f\xc8\xe3\xd5\x60\x3a\x5b\x2a\x7d\x6d\x48\x07\xf9\xc9\xd6\x4a\x9f\xdb\x5f\xfa\x18\x49\xe8\xdb\xd7\xd5\xda\x2b\xea\x02\xa8\x4d\xa8\xeb\x25\x9b\x4a\x15\xf9\x77\xef\xb0\x6c\xde\xea\xfb\x2a\xe6\xed\x51\x1f\x7b\x7f\x3d\xfd\x15\x94\xfd\xfb\x0a\x5c\xc0\xef\xee\x4b\x74\x01\xbf\xdb\x97\xf0\x02\x10\x64\x5d\x47\x6a\x07\x80\x01\x08\x3a\x3f\x83\x1f\x1d\x09\x31\xb0\xef\x4b\x84\x81\x83\x23\x0c\xe0\x02\xbd\x43\x09\x2d\x70\xe8\x2b\x68\x81\x7e\x57\x43\x0b\x74\x14\xb4\x40\xbf\x87\xc9\xbd\x36\xcd\x3b\x55\xae\x2c\xe7\x54\xa2\xe5\x90\x4b\x6d\xd6\xf7\x1d\x7e\xf4\x31\x79\xaf\x0c\xfe\xbe\x29\xf8\x12\xf2\x95\x5e\x02\x60\xc0\x7b\x6f\x4a\xae\xe8\xb9\x37\x25\x27\x94\xeb\x28\xf0\x5f\x28\xf7\xfe\x72\x79\x7e\x46\xfe\x41\xbf\xb8\xee\x17\x4f\x22\x08\x47\xd3\x07\xf2\x89\x4e\x91\x73\x3d\x8b\x26\x13\x96\x38\x98\x7c\x10\x8f\xe5\xe8\x3c\x67\xf4\x71\xed\x2d\x94\x45\xf4\xa7\xfc\x54\xda\x67\xdf\xc4\x8c\x7c\xa6\x4b\xe4\xe4\x50\xc3\x4e\xc6\x6e\xa3\x9c\x67\x0f\x0e\x26\x1f\x8b\x64\x21\xfb\xfc\x26\x1e\xd3\xc5\x4e\x91\xf2\x03\xdd\x80\xc7\xf8\xa9\xee\xf2\xfd\xc4\x75\x5b\xad\xef\xde\x94\xfc\x99\x72\xef\xbf\xe5\x37\xe4\x67\xda\xfa\xf3\x6a\xd5\xfa\x73\xf1\x71\xf9\x09\xe2\x4a\x9f\xcc\xa2\x78\x42\xfe\x49\x13\xd7\xcd\xeb\xb4\x37\x07\x2d\x7a\x8a\x2e\xd0\xe3\x1a\xb6\xce\xc7\x7a\x3b\xac\x8b\x62\x73\x55\x5b\xfc\xc1\x1a\x7b\x82\xd5\x88\x7f\x31\x2e\x69\xb3\x0b\x85\xf4\x57\xf4\x03\xe1\xb8\x91\x18\x27\x81\x1f\x86\x7c\x44\x2e\x54\x26\x92\xb8\x2e\x6b\x51\xfa\x83\xeb\x5e\x88\x8c\x24\xc1\xeb\xe0\x82\xfc\x52\xe3\x40\xfd\x71\xc8\x46\xf4\x14\x9d\x58\x4e\x28\x06\xcb\xce\xbb\xfe\x46\x19\xe1\x6b\xf2\x23\xfd\xc9\x75\xd5\x68\x5b\x23\xe7\xe9\x60\xf7\x83\xcd\x35\xb6\x91\x9b\xad\x6b\x51\x52\x6d\x9d\xd9\xc9\x9a\xfc\x5a\x06\x54\x4c\x4a\xae\xa2\x3f\xb8\xee\xaf\xe8\x37\x48\x26\x77\x20\x8c\xd1\x6b\xe9\xb9\x4d\xee\x50\x82\x49\x86\x3e\x12\x8e\x07\x28\xf1\x98\xa1\x1f\x00\x44\x27\x9f\xb0\xeb\xb2\xe1\xa7\xd1\x90\x8f\x5c\x17\xa9\x5f\x54\xc6\x10\x3e\x45\x89\x71\x08\xb8\x89\x59\x70\x8f\x3a\x10\x37\x10\x5c\xa7\xe1\xdb\xd5\x4a\x0c\xec\x27\x72\x8f\x7c\xf2\x08\x5e\xf7\xba\x80\x0e\x26\xff\x54\x0d\xc5\xc1\x85\xfa\xb5\x26\x7f\xad\x1a\x19\x8a\xdd\xc6\xc0\x65\x92\x84\x2e\x10\xa7\x37\x00\x99\x1c\xd1\x0e\x49\xa9\x0e\x17\x79\x9c\xbe\x8b\x8e\xf1\xaf\x48\x48\x92\xc9\x30\x12\x27\x19\x3e\xcc\x8a\xb0\x92\x6c\x4d\xfe\x54\x33\x89\x67\xf6\x3d\x06\xbd\x46\x10\xf2\xae\x70\x2e\x51\xce\xa5\x3f\xb8\xae\x18\x21\x26\xe1\x8a\x7f\x23\x0c\x83\xad\x25\xe2\x00\x64\xa7\x14\x1e\xf0\xfb\x23\xfc\x50\x69\x62\xec\x20\xa4\xdf\xa7\xd1\x90\x8d\xf0\x6a\xc5\xf1\x9a\xfc\xf7\x26\x00\x06\xa3\x37\xe5\x39\x01\x0a\x54\xe5\x71\x28\xef\x37\xc2\x71\x41\xc1\xcc\x72\x80\x49\x4a\xf9\x4a\x13\xb6\x5a\x95\x26\x14\x06\x3d\x59\xaf\xc9\xff\xd4\x63\x37\x92\x84\x5e\x21\xd1\x12\xac\xcf\x8e\x9d\xe3\xc4\xc2\x92\x80\x5a\x68\x22\xf1\x24\x56\x2b\x4e\xe9\x27\xf8\x37\x5c\xad\xf4\x91\xaf\x90\x0c\xd6\xe4\x2f\x5b\x6b\x01\x8a\x24\x11\xbd\x42\xc9\xe0\xb7\x40\xd6\x98\x8a\x1a\xc5\xd1\x54\x1f\x77\xc5\x09\x55\x76\x8c\x46\x32\xe4\xc5\x6a\x95\xc0\xf8\xff\x00\x7d\x4d\x65\x95\x1f\x87\xbc\x98\xe4\x74\xdd\xf8\x69\xb5\x42\x29\x42\x27\xb6\x33\xb6\x72\x9b\x29\x2d\x18\x75\xac\x35\x50\x31\xc8\x91\xbc\xb8\x38\xd9\x5a\x36\x9a\x2d\x47\xaa\xe6\x19\x1d\x6f\x0a\x4e\xf5\x5a\x5a\x62\xb9\xe2\x27\xf2\x38\x24\x09\x49\x59\x1f\xff\x46\x60\xd9\x19\x3a\x91\x3f\x87\x9f\x46\x40\x65\xa8\x20\x1b\x58\x6b\xff\xd4\x12\x9d\x58\x48\x09\x36\xc0\x30\xcd\xc4\x75\x7f\x76\xdd\x7f\xa2\x1f\xea\xec\x57\x73\xc6\x03\xbe\xc6\xe4\x17\x70\x0b\x7f\x29\xda\x91\x72\x0c\xfa\x26\x96\xeb\xa5\x37\xa5\xff\x4d\xde\x7b\x53\xfa\x2b\xd1\x86\xcb\x62\xf3\xa2\xff\x03\x8f\x87\xe2\xf1\x4f\xe4\xbb\x37\xa5\x7f\x11\x9c\xb3\x05\x30\x40\xae\x9b\xa2\x1f\x88\x53\xb7\x27\x39\xe4\x4f\x40\xe0\x13\x6f\x5a\xe7\xd5\xfe\x0b\x9a\x82\xa3\x0c\x26\x11\x8a\xbc\x1f\xdb\x91\xf7\x4b\x3b\xf2\x3e\xbe\x69\xfd\x44\x1e\xe5\xf4\x04\x27\xeb\x82\x1f\xfc\x2f\xb5\xa3\xa0\x91\x28\x3f\x81\x3b\x87\xcb\x45\xc6\xc2\x09\x6c\x81\x9a\xcd\x12\x30\xce\x24\xca\x4c\x8e\x48\xcb\x0f\xa2\xb0\x77\x08\xdc\x84\x12\x6b\x5b\x25\x16\x9a\x14\x59\x26\xf9\x38\x5d\x88\xe2\xf2\x12\xb0\x39\x63\xb4\x73\xfc\xbf\x9a\x0a\x18\x3b\xc6\x53\xf4\xbf\x43\x26\x83\xd9\x1a\x72\x67\xf4\x1b\x9a\x7a\x39\x4f\x33\x86\x49\x26\x3e\xe1\xfa\x64\xfa\x2e\x63\xc7\x78\x86\x38\x1b\x66\xf2\x23\xf0\xde\xd1\x1d\x56\xf4\xe8\x10\xb1\x74\xea\x35\xad\x9f\x09\x6b\x53\xc7\xc1\x83\xcf\x43\x36\x0a\xc4\x3f\xf4\x44\x4c\x35\xf9\xc6\x1e\x3e\x56\x3e\x8a\xa6\xa8\xf5\xa3\x18\xdc\x2a\xdd\x33\x5b\x9b\x23\xb7\x1e\x41\xee\xa6\x03\xcd\x28\x69\x7e\xc6\xd1\x14\x7d\x16\x7c\xdb\x8a\xc8\xcc\xd7\x64\x99\xb3\x4b\xc6\xb9\x8d\xa9\x8d\x1f\x7f\xa6\xad\x8e\x7c\x15\xcd\x17\xb6\xab\x0b\xbc\xf2\xd7\x6a\x76\x8b\x8e\x56\xc1\x2d\x9f\xbe\x85\xe6\x83\x53\xc4\x70\xf0\x57\x74\x2a\x1d\x01\xd7\xa4\xe2\xfd\xf8\x2b\xd9\x40\xb3\xfc\x2b\xd9\xea\x38\xf6\xdf\xa4\x06\x19\x31\xf8\x9f\x4a\xaa\x9c\x8b\x3c\xf8\xcb\x5a\x32\x82\x84\xd1\xb2\xe0\xf2\xdd\x9b\x22\xd8\xf9\xac\x49\x4c\x98\xd5\xb7\xfa\xf2\x6a\xa6\x55\x94\x74\xab\xdc\xc5\xc8\x17\xd7\x2d\xca\x43\xad\x9f\x56\xab\xbc\xe6\xf2\xed\x04\x99\x8b\x37\xe9\x66\xeb\xb4\xe8\x3f\x90\xdc\x72\x9c\xc7\x35\x3c\x3d\x86\x01\x5b\x5b\xcf\xb2\x61\x72\xb5\x61\x4c\x1c\x21\x7e\xc2\xb9\x52\x49\x9e\x5b\x94\x8a\x62\x0b\x1e\xb2\x11\x89\xa8\x7f\xbc\xc1\x09\xa3\x63\xed\xdc\x58\x70\xc4\x48\x52\xf6\x14\x65\x54\xec\x1d\xfe\x88\xa0\x07\x24\xf8\xb7\xb9\xf3\x87\x5d\xf5\x47\xcb\x9e\x64\x0e\xef\x4b\x08\xc3\x6a\xa3\xac\xb3\x00\x05\xd0\xa1\xac\x62\x8e\x80\x49\xeb\x47\x21\x24\x18\x52\xc5\x44\xd4\x4d\x39\xf9\x87\x32\xd1\xf8\x22\xd1\x34\x89\x25\xbe\x0d\x3f\x8c\x74\x4c\x4b\x2b\x95\x7c\xb0\xf3\xe8\xc8\x0e\x98\xc4\xe8\xc4\xac\x51\xf1\x24\x4e\xd6\x3a\x6e\x8a\x60\x71\x31\x52\x32\xbd\x1a\x5a\x85\x15\x67\xdc\x4c\x34\xb0\xa6\x32\xe2\xef\xf4\x03\xbf\xd3\x27\x05\x46\xe1\x61\xe0\x77\x0e\x8d\x1b\x4a\x61\xe4\xaf\xe1\x0d\xf6\x03\xbf\xbb\x6f\xc5\x3c\x2f\x87\xfb\xf4\xfb\x07\x81\xdf\x3f\x20\xfe\x5e\x27\xf0\xf7\x3a\xc4\xdf\xf3\x03\x7f\xcf\x2f\xe0\x0f\xec\xdb\x4f\x3f\xd8\xf7\x6b\x7c\x9f\x55\x30\x84\x6e\x70\xd0\x25\x07\x47\xc1\x81\x86\x01\x54\xf0\x07\xfd\xe0\xa8\x5f\x0d\x92\x50\x8d\xf3\xf9\x8c\x26\x64\x5f\xeb\xb5\xf6\xca\x78\x00\xa0\x37\x0f\xb5\xb2\x24\x57\x47\xb3\xa5\x0a\x8a\x00\xb1\x6f\x7f\x58\x4e\xa7\x2c\x53\x67\xbf\x03\x71\xf6\x4b\x4a\x2f\xa6\x34\xf1\x3e\x84\x3c\xfc\x39\x62\xf7\x64\x42\x33\xef\xfd\x0f\x3f\xbb\xee\xd2\x8b\x72\x48\x99\xd1\xb1\x35\xa9\xa0\xb5\x00\x77\xa8\x9f\x3f\x9d\xfe\x62\x00\xf3\x7e\x91\x8a\xf8\x65\x8b\xd2\x31\x26\x8f\x56\xf1\xc1\x78\xad\x7c\x63\x25\x30\x43\xe6\x9d\x9c\x9f\x5d\x5e\x5d\xa8\x50\xc1\x32\x13\xf8\xfc\x89\xda\xea\x96\xf9\xc4\x75\x27\x00\x99\x96\x43\xe8\x81\x85\x76\x3e\x24\x5a\x03\xf4\xd3\x93\xb1\x8f\x5a\x09\xbb\x6f\x8e\x51\x17\x1b\xb3\x4f\x25\x77\x78\x37\x0f\x9c\x7d\x2e\xa2\x6b\x95\xdb\x53\x17\x2a\xdb\x18\x7b\xb5\x28\x9d\xb9\x6e\xc1\x68\x2b\xf6\x5d\x91\xb2\x90\xb1\x05\x72\xaa\x12\xad\x5a\x49\x02\xc1\x70\x32\x31\x6f\x29\xaa\xc4\xd8\xce\x00\x70\x82\xdd\x23\xb5\x56\xc7\x18\xa3\x10\xe5\x3b\x09\xc6\xca\xa9\x69\xaa\x6a\x59\xa8\x27\xe5\x48\x93\xbc\xcd\x8f\x31\x38\x6f\xfd\x14\x25\xfc\x10\xcd\xdb\x6d\x32\xf1\x6e\xf5\x63\xd2\x6e\x17\xfa\xc7\xe5\x7a\x5d\x20\xda\xd8\xfd\xb7\xc2\x25\x5b\xf8\x20\xe5\xd0\xda\x7e\x7f\x2f\xf0\xfb\x7b\xc4\xef\xef\x07\x7e\x7f\x7f\x1b\xda\x45\xe1\x7c\xfa\x5c\x3c\xd8\x82\x90\x5a\x92\xe4\x05\x25\x92\x47\x4d\x9b\x81\x24\x7f\x43\xab\x4a\x63\x5a\x6e\x84\x51\x71\x56\x03\xc6\x8a\x8f\xfb\x18\x39\x00\x12\xd9\xeb\x3a\xa4\xff\x8c\x6a\x5a\x30\xf0\xaa\xea\x46\x26\x6a\xf5\x4d\xbf\x1f\xf8\x7d\x50\xdf\x54\x83\xac\x96\x2a\xdb\xef\x3b\xe4\xf0\x8f\xac\xac\x57\x5f\xd9\xa7\x84\xfb\xfb\x15\xbb\xcb\x7f\xb5\xaa\xcd\x98\xda\xba\xaa\x3f\x7c\x08\xf7\xb6\x56\x75\x58\x31\x3c\xfe\x57\x6b\xda\xaf\xaf\x49\xac\x8f\x3f\x7c\x00\x0f\xb6\xd7\xf5\x87\x8f\xe0\xe1\xf6\xba\xfe\xe8\x21\xdc\x84\xce\xfe\xc3\xaa\x32\xd1\x6b\x4d\x6d\xe5\xd0\x97\xf5\x46\x46\xd2\xdf\xbf\x23\x37\xc7\x7e\x17\xa3\xce\xa6\x4e\x14\xb6\xc7\xa3\x03\xb9\x3d\xee\x75\xa4\x3a\x54\x6c\x97\x63\x65\x9a\x24\xb5\xa1\xe2\xc7\x84\xb6\x12\xef\xfd\x58\x9c\x70\xfe\x47\xca\x7f\xae\xeb\x94\x9e\x9d\x28\x69\x26\x64\x46\x43\xc1\x5a\x7f\x61\xe1\x37\xb2\xa8\x73\x6e\x27\x73\xba\xf4\x96\x53\x38\xd5\x54\xc2\xa1\xfd\x61\x46\x4e\xe4\x81\x6e\x44\x1c\x8e\xa6\x28\x16\x82\xa2\x62\xb2\xb3\xe2\x2a\xa2\x25\xf7\x98\x39\x1a\x2b\xad\xa0\x68\x3c\x04\x12\x86\x60\xf6\xe0\x12\x3a\x30\x08\x18\x23\x83\x34\xb0\x3d\x26\xf1\x12\x4c\xa9\x36\x8a\x23\x2a\x1e\xf1\x2d\xdd\xb0\xf8\xd2\x79\xc8\x1d\x79\x20\x4b\xd2\xea\x88\x49\x6f\x4c\x5d\x77\xe2\xba\x28\x47\x28\x93\x68\x08\x27\x85\x5e\x01\xdd\x95\x1a\x5a\xc8\x9c\x0f\x98\x84\xde\xd9\xe9\xe9\x07\xda\xea\x90\x08\x0d\x1d\xa9\xab\x74\x88\x38\xf0\x3a\xc4\xb9\x65\x60\x98\xc0\xb8\x33\xda\x84\x11\xe3\xf4\xb6\x14\xf7\x9a\x0f\xd9\xa8\x91\x22\x4e\x98\x95\x97\x93\x48\x8d\x27\x17\xf2\xf7\x42\x48\xcb\xea\xd2\x76\x2a\x84\x6f\xf9\x0b\x36\xe1\x4c\x9e\x79\x52\x75\x2f\x3b\x1d\xb2\x11\x7c\xae\xcf\x1c\xa2\x19\x94\x32\xe9\x6e\x9b\xea\x2b\x7c\x2b\xd8\x3a\xe1\x12\x80\x4c\x9c\x34\x6c\xbc\x64\x6d\x82\xd6\x0d\xfa\x5d\xb2\xd7\x09\xf6\x3a\xd2\x10\xad\x8c\xbd\x23\xe5\x4c\x1d\x2c\xa1\x1a\xd0\xb5\x56\xc2\xdc\xd3\x40\xfc\x7d\xf0\xf6\x30\xb3\xf3\xff\x17\x9b\x3c\x00\xf7\x41\x99\x45\x48\xca\x2e\x4f\x3a\x9f\x13\x4e\x5a\x7e\x25\xb8\xb5\x35\x16\xd0\xe7\x57\x05\xec\x38\xd0\x42\x75\x57\x63\x10\x29\x78\x81\x9e\x0a\xa1\xd8\xdf\x33\xd7\xab\x20\x1d\x39\xe4\x71\x1a\x87\xfc\x4b\xb8\xa8\x89\x44\x93\x03\x42\x98\x6d\xdc\xd9\x4c\xa5\xb2\x32\x42\x4b\xcb\xfe\x29\x44\x4b\x22\x46\x1d\xe5\x64\x49\x96\x84\x93\x0e\xf1\x89\x65\x12\x31\xf4\x47\x98\xe4\x52\x32\xeb\xed\x61\xe4\xa8\x2a\xa5\x50\x56\x75\xf8\x91\xc8\x4c\x7b\x41\x6f\x8f\xf4\xf7\x82\xfe\x9e\x16\xc0\x0e\x82\x7d\x49\x05\xaf\xb9\x71\xed\xfb\xd2\x6a\xa1\xd2\xe7\x27\x4c\x3d\x8c\x15\xdb\x2b\x4c\x3a\x74\xbf\x0a\xcb\x90\x35\x79\x54\x5d\xf0\x03\xfb\xda\xfb\x89\x38\xb3\x0a\xb4\xbb\x53\x34\xd8\x86\x52\x67\x09\xcf\xa2\x6d\x0d\x36\x16\x77\x7e\x27\xf0\x7d\xcb\xbd\xfa\xe8\x39\x23\x25\x5f\x5f\x48\xf7\xd5\x4e\x03\x57\x59\x82\x62\xf6\x7a\x9b\x8d\xd8\xa6\x49\xc9\xb7\x68\x0c\x42\x92\xd3\x44\x7a\x27\x45\x10\xa5\x33\x43\xb9\xd8\x9c\x1e\xd7\x64\x4a\x3b\xc7\xb1\x1e\xd8\xe9\x31\x36\xc7\x10\x14\xd2\x25\xca\x09\xa7\xf1\x70\x0a\xc6\x07\xae\x9b\xa2\xb1\x84\x40\x53\x1d\x1e\x57\x60\x1b\x14\xb4\x89\x3e\x0f\xef\xf5\x82\x3d\xcb\x34\xe0\x89\x40\xb9\xd6\x90\xfb\x9b\xbd\x85\xe3\xfe\xab\x47\xfc\x35\xa8\x52\x7b\xca\x7f\x58\x6f\xf3\x70\x9a\x4d\x15\x9c\xb9\xb1\x07\x28\x61\x6e\x4e\xa3\x24\x8c\xe3\x87\x9a\x9b\xff\x48\x81\xc1\x6a\xd8\xce\xd5\x2a\xd1\x3f\xc5\xda\xaf\xd1\x9f\xb0\x86\xad\xf5\x05\x5c\xc6\xb0\xb8\x94\x2a\xb0\x94\x60\xff\x40\x78\x03\x79\xb2\x18\x0f\xc1\xe0\x03\x46\x5e\xf9\xb5\x54\x47\xaa\x8f\xcd\x80\x2a\x6c\x47\x75\x46\x93\xc8\x8c\x95\xc8\x85\xd5\x70\xc2\xcf\x58\x80\x19\x2f\x6d\x69\x49\xff\xb3\x44\x81\xff\xdb\xae\xdf\xf9\x9b\xf7\xb7\x49\x1b\xc1\xbf\x78\x80\x9a\x5f\xd2\x9b\x28\x66\x7f\xdb\xfd\xdb\x7d\x1b\x0f\x9a\x97\xe1\x34\xcc\xa2\xbf\xed\xee\x4a\x8f\x9b\xc4\xb6\x23\x8b\x2c\x7b\x8c\x45\x38\x39\x4d\xea\x4d\xb2\x5f\xc7\x4a\xe0\x02\x4d\x59\x4b\x74\x03\xbf\xd7\x35\xc8\x95\x05\x79\xbd\x4a\xc9\xf2\xff\xa0\xe7\x97\x3c\xdc\x16\x05\xff\x95\x7d\xef\x3c\xd3\xf7\x5e\x35\x74\xf1\x56\xf3\x85\xcf\x6c\xfa\xda\xbd\x1e\x06\x9e\xc0\xd7\xd0\x23\xa7\x6c\xce\xd0\x7b\x32\x90\xb1\x5d\xf7\x45\x74\x3b\x7b\x6d\xe5\xdd\xa2\xf2\xd3\x64\xb2\x51\xf5\xe6\x51\x7c\xaf\x83\x91\x13\xe6\x0f\xc9\xf8\x93\xba\xe4\x90\x1f\x49\x85\x1f\x7c\x54\xd9\x24\x0b\xcb\x30\x86\xfc\xfd\x7e\x11\x5b\x45\x79\xc6\xea\x90\xcb\xea\x90\x71\xa0\xb0\x69\x0e\x0f\x95\x83\xa5\xe0\x54\x4b\x9a\x23\x27\x32\x15\x92\x58\x3c\x97\x62\x6f\x90\x31\x0d\xa5\x26\x8e\x4c\xe9\xe3\xc9\xe5\xe5\xc5\x32\x66\x9f\xa3\x9c\x07\xad\x0e\x39\xb9\xbc\xbc\xe4\x0f\x31\xfb\xc0\xc6\x71\x98\x41\x4c\xae\xa0\xe5\x8b\xe4\x9f\x05\xa3\x95\xd9\x7c\x72\x12\x47\x2c\xe1\x17\x6c\xcc\x75\xca\x87\xf3\x2f\x95\x47\x59\xa5\x95\x70\x95\x7e\x63\x89\xae\xe8\x43\xc8\xc3\xab\x2c\x4c\xf2\x29\xcb\x3e\x71\x36\xd7\xf9\x3e\x46\xb1\xa9\xe5\xcf\x57\x5f\x3e\xbf\x8f\xe3\x93\x34\x8e\x25\x9e\xba\x4e\xdc\x4c\xf9\x98\x66\xf3\xd3\x98\x09\x7a\xd5\x49\x97\x4c\xe4\xb1\x12\xbf\xb0\x49\x14\xea\xfa\xbf\x44\x73\x76\xf5\xb0\x60\x30\x10\xe2\xed\x59\x38\x67\x93\xb3\x74\xc2\x84\x98\x25\x9e\xd3\x89\x19\x95\xaf\x61\x24\x7a\xfb\xcf\x25\xcb\x4d\x0f\xbf\xc6\xcb\xdb\x28\x29\x7e\x99\x82\x2e\x7f\xfe\x51\x2a\xda\x74\xce\xcb\x9f\x7f\x94\xf1\xcf\xac\x84\xaf\x21\x9f\x5d\xb2\x5b\x3b\x25\x8d\x12\x6e\x3d\x97\x87\xef\xf2\xe7\x1f\xe5\x68\xa5\x99\x19\xaa\x4b\xf0\xdb\x91\xaa\x33\x93\x26\x26\xef\x72\xc6\x18\xd7\x6d\xbf\x62\xdf\xf9\x55\x16\x8e\xbf\x9d\x14\xd3\x67\xd2\x4c\x42\xba\x1c\xeb\xf6\xae\xc9\x84\x66\x68\x8a\x01\x08\x64\xf6\x76\xa2\xef\xef\x67\xed\xb6\x02\x01\x21\x73\x3a\x19\xce\x46\xe2\x60\x39\x9c\x8f\xc8\x03\x8d\xc4\x9f\x5b\xfa\xe0\xba\x0f\xc5\xc1\x06\x60\x18\x5c\x17\xdd\x0e\x97\xa3\xd5\x2a\x45\xb7\x64\x49\xc6\x98\xdc\x0e\x63\xf5\x18\x93\x39\x26\xe1\x70\x3e\xa2\x63\x72\x87\xb1\xa0\x7e\xd0\xb2\x72\x7c\x3b\x5c\x8c\x56\xab\x04\xdd\x92\x05\xe1\xc3\xc5\x48\x09\xe2\x45\x80\xa0\x4a\x40\x17\x7f\xbf\x1f\xf8\x85\x5a\x1c\x14\xe2\x87\x87\xc1\xe1\x21\xac\xb2\xe7\xa4\xb9\xde\x7e\xa1\x08\xfc\x01\x60\xbb\x3e\xcd\xe7\x82\x56\x38\x0b\x00\x62\x8c\x8c\x63\x16\x66\x76\x22\x24\x28\x46\x28\xe1\x8b\x0b\x06\xb8\x45\x9a\xd3\x66\x54\xfb\x65\x76\x3f\x1c\x29\xe5\x76\x4a\x77\xbf\x5c\x7e\x3a\x6d\x7a\x7f\xf3\x0c\x47\xb7\x83\x66\xd4\x6b\x34\xb4\xc9\xc1\x06\xff\xee\x92\x94\xb6\x00\xcf\x49\x01\x22\xe8\x0c\xa4\x5b\x98\x5c\xa0\x64\x60\xf1\xbb\xba\xdb\x1b\x3e\xe0\xc1\xc7\xc2\x6e\x56\x61\x20\x4b\x8e\x98\xe2\x35\x68\x8c\xd7\x6b\xc0\x81\xfc\xb1\x9d\x79\x3f\x00\x8a\x6a\x0a\x83\x78\x15\xcd\x59\xba\xe4\x41\x88\xb8\x57\x3c\x62\x71\xa0\xff\x94\x70\x96\xdd\x85\xb1\x7e\xa7\x9f\x95\xdd\xa8\xbd\xa7\x18\x79\xa2\x57\x0e\x31\x4c\xc0\xa7\xae\xd7\xd9\x03\xb9\xbe\xd3\x97\x7f\x7a\x98\x94\x4e\xfd\x5d\x90\xf1\x3b\xbd\xa0\xd7\xe9\x01\x25\xf4\x3a\x7d\x98\xa2\x5e\x67\x4f\x4a\x2d\x50\xf2\x41\xb5\x64\xa9\x3b\x7f\x66\x0f\xdf\x30\xc2\xca\x28\xf7\x66\x61\x6e\x49\xdf\x24\xa9\x13\xe9\xe4\xa5\xd4\x40\x5d\x98\x3f\xae\x49\x44\x13\x63\x70\xb4\x5a\x39\xff\xf5\x5f\x86\x81\x83\x01\x4d\x69\x13\x81\xf7\xe5\x6d\x85\x84\x34\xf1\x2c\x1e\x0f\x59\x6c\x9e\x5f\xa0\x6d\xe4\xd2\x8c\x8a\x24\x1a\xc2\x00\x62\xdf\x9b\x2e\xd8\x16\x18\xe3\x01\x0f\xc6\x24\xd5\xdd\x94\x77\xbf\x28\xb2\x21\x7d\x43\x50\x3f\x9c\xa2\x64\xb5\x1a\x5a\x46\x1e\xde\x75\x94\xdc\xa5\xdf\xd8\x46\x04\x59\x49\xab\x4e\xbe\xcc\x17\x2c\x99\x30\x29\x97\x38\x8d\x2a\x5d\x47\x24\x95\xb7\x89\xec\x3b\x1b\x2f\xb9\x8c\xd5\x4f\x13\x75\x33\x0e\x55\x4a\x8b\x90\x1f\x59\x22\x87\xa0\x19\xe5\xcd\x30\xce\x58\x38\x79\x68\x66\xcb\x24\x11\x9f\xc8\x58\xff\xe3\x74\xbe\x88\x19\x67\x13\x59\x04\x14\x0b\xe5\x88\xe7\x48\x15\x99\xea\x26\x5c\x22\x09\xf8\x92\x79\x73\xc6\x67\xe9\x84\x46\x24\xf3\xc2\xec\x96\xa6\x1a\x76\x26\xa4\x99\x37\x61\x31\xbb\x0d\x39\x70\x38\x03\x59\x72\x83\x42\x05\x9c\x93\x43\x2d\x39\xa5\x34\xc6\xe3\x34\xe1\x51\xb2\x34\x42\x7c\xbe\x5e\x8b\x16\x24\xec\x3b\x17\x0d\xd0\xf5\x60\xc1\x67\x12\x4e\x33\xef\x5a\xfd\x0d\xb3\x5b\x70\xb9\x6d\x96\x1a\x6c\xf2\x43\x3f\x2a\xe3\x68\x8f\x11\xb5\x3a\x2e\xbb\xd0\xc8\xbc\x49\x94\x2f\x42\x3e\x9e\x9d\x7e\x1f\xb3\x85\x3c\x00\x88\x37\x12\xdf\xc5\x51\xca\x22\xab\x16\xd7\xcd\xbc\xf0\x26\x5b\x2e\x20\xde\x09\xbc\x95\x65\xe1\x46\x42\xad\xc9\xd1\xf8\x52\x6a\x9a\x61\xdc\x93\x34\x9b\x87\xb1\x03\x0e\xcf\x40\x2c\xa2\xc5\x89\x18\xbc\x34\x61\x03\xab\x75\x41\xd1\x8d\x5f\x23\x16\x4f\x1c\x32\x86\x11\xaf\x19\x3d\x65\x45\x08\xef\xa5\xb3\x80\x2c\x6e\xbd\x2e\x46\x48\xd6\xe6\xba\xa8\x3a\x04\x6a\x42\x55\x4e\x35\xad\x63\xd9\xff\xf5\x1a\xf0\x95\x43\x4c\xd2\xb5\x59\x2a\xba\x3b\x8f\x05\xe2\xe4\xa3\x28\x3b\xd0\x7d\x13\x42\x73\xc0\x0a\xf4\x90\x75\x15\x82\x52\x65\x57\x35\x8a\xdc\xc9\x7a\xbd\x66\xde\x7d\x16\x2e\x68\xde\x90\xb8\x4b\x8f\xeb\x62\x75\x8e\x11\x7e\x2c\x1a\x30\x2d\x3d\x4d\xc4\x93\x44\xc8\x7b\x5c\x37\x66\xc3\x68\x44\xeb\x2d\x83\xd6\x0d\x89\xd4\xa5\xd6\x6d\x19\xfd\x96\xcc\xe9\xc2\x75\x17\x68\x81\xce\xd1\x70\x84\x31\x6e\xcc\x5d\x77\xde\xa2\x82\x0f\x64\x1a\x71\x21\xc2\xae\x8b\x66\x74\xae\xb1\x9a\x26\x16\xfc\x9d\x75\x2b\x5b\xe1\x0c\x33\x5c\x74\xe4\x41\xb0\xcc\xa1\x24\x73\xa2\x07\x40\xd3\xd0\xc8\x9b\xa6\xd9\x69\x38\x9e\x59\xe7\x4c\xc1\xcd\x87\x7c\x54\xb7\xdd\x29\x95\x30\x70\x14\x1d\xf9\x15\x17\xe3\x72\x6b\x81\x1d\x36\xec\xbc\xb4\xcc\x4f\xcc\x07\x21\x2a\xc1\x21\x73\xab\x15\x09\x09\xf1\xa3\x79\x6c\xc2\x97\x12\x1f\x4e\xce\xd5\x12\xb1\x61\x34\x22\x8c\xa4\x92\xc8\x65\xc7\x5a\x94\xc6\x8a\xc6\xe5\x42\x88\x81\x40\xa7\x74\xac\xc0\x0c\x34\x7f\x73\x5d\x47\xc6\xa9\x2b\xb6\x82\xa9\x19\xf6\x29\x71\xae\xaf\xc3\xfb\x30\xe2\x0e\x1e\x14\xb1\x18\xa6\x9e\x4a\xad\x0b\x29\x91\x28\x4e\x22\x0e\x70\x24\xc7\x25\xbf\x1d\xf9\x5a\x0d\xbd\x7e\x8f\x03\xab\xe4\xba\x12\x55\x93\x29\x23\x21\x1a\x6f\x14\xa8\x87\x6d\xb3\xdc\x75\x8e\x62\xb9\x96\x30\x0c\x9a\x18\xc9\x75\xe1\x2e\x96\x00\xce\x8e\x54\x5e\x90\x10\x07\x21\xc2\xeb\x62\x0a\x6f\xec\x4d\x97\x99\x9d\x70\xc8\xd5\xa2\x1d\x95\xf0\x4e\x32\x69\x2f\x68\xb8\x30\xe0\x56\x90\x82\x03\x70\x9b\x47\x16\xa5\x79\xb2\x29\xae\x8b\xb8\xe1\x05\x9a\xa9\x71\x60\x06\xea\x8c\x2b\x5b\x53\x57\xa0\xc1\x42\x6b\xf0\x2a\x3b\x91\x25\x08\x7a\xb2\x0c\x16\xaf\x66\xac\xa9\xab\x6f\x4e\x52\x26\x8d\xb8\x16\x59\x7a\x17\x4d\x58\x33\x6c\xfe\x27\x7c\xfc\x9f\x4d\x59\x96\x63\x46\x2b\x5e\xcb\x8d\x72\x89\x32\x52\x74\x40\xd6\x61\x13\x9e\x60\xf8\x92\xf0\x8c\x26\xbb\xbe\x59\x40\x8f\xd5\x11\x8b\x1b\x52\x02\x48\xe4\xee\x50\x38\x8c\x00\x87\x46\x7c\xc8\x04\xa9\x2c\x63\x2e\x4e\x46\x23\xaa\xe0\x8c\x08\xf7\x04\xc9\x51\x06\x7f\x3e\xa7\x63\xb3\xac\x5b\xc5\x48\x95\x06\x59\x52\xa8\x3d\xc4\x78\xb3\x2d\x38\x88\x02\xf4\xb2\x51\x35\x23\x2a\x5b\x67\x6c\xe3\x92\xa6\x5a\x5c\x75\xc5\x17\xc4\x76\x5d\x08\xe5\x82\xb3\x7f\x4e\xc7\x01\x1b\x76\x46\xeb\x86\x0f\x16\x1e\xd0\x74\xe0\xe3\x9f\xd3\x31\x65\xa0\x15\xef\x16\x6f\x94\x66\x4f\xbe\xeb\x8e\x44\x0b\xa7\x9c\x65\xf2\xb9\x37\x52\xee\x6d\x3c\x7b\x38\x95\xaa\x60\x03\x25\x6f\xea\xbf\xb7\x0e\x05\x9e\xda\xa1\xa2\x34\x59\xad\x1e\xd7\x0d\x0e\xb3\x49\xcd\x06\xa3\x0c\xe0\x61\x18\x88\x9d\x9b\xf2\xa2\xc0\x53\xe3\xcd\x57\x54\x4b\x87\xba\x6f\x4e\x96\xa6\xdc\x59\x8f\x08\x33\x5c\xf7\x5a\x22\x56\x99\x38\x47\x8c\x23\x71\xbe\x32\x05\x9e\xab\x9b\xbc\xa2\x9d\xc3\x08\x96\x20\x2f\xe8\x4c\x41\x3f\x34\xea\x6d\xbe\x24\x71\x18\x70\x62\x00\x24\x8a\xf2\xb3\xf0\x0c\x31\xe3\xae\xa4\x84\xc1\x1d\xdf\x02\xca\x68\x72\x15\x45\xf0\xb8\xdd\x4e\xde\x32\x83\x76\x12\x4d\x91\x46\x9b\x20\x49\x61\x34\xa6\x79\xd5\x30\x11\x13\x21\xc8\x16\xc2\x64\x35\x2a\xef\x8d\xa7\x94\xcc\xd1\x21\x7c\x5d\x88\xaa\x40\xcc\xa9\x06\x18\x79\x14\x8f\xc1\xa5\xc5\x9b\x2e\xcd\x6e\xb1\x05\xc0\x5f\x33\x77\x6b\x5f\xbc\x2b\xc1\xc7\x4e\xc8\xa4\xf4\x3c\x25\x93\x61\x38\xa2\x53\x10\xc7\xe2\x10\x0c\x1a\x69\x21\xca\xea\xd3\x96\x23\x96\x7e\xbe\x91\x5c\x63\x22\x5f\x37\x01\x15\x10\x5f\x7d\x09\xdb\xe2\x60\x8d\x27\x41\x84\x37\xab\xa4\x94\x0a\xc6\x5a\xb4\x6b\xb5\xe2\x00\xe2\x81\xf1\x9a\x30\x6f\x1e\x66\xdf\xea\x76\x68\x25\x07\x94\x31\xbc\x07\xb5\xa9\x88\x91\x09\x0e\x10\xf3\xae\xaf\x61\xbc\xae\xaf\xe9\x84\x84\xb0\xbe\x56\x2b\xc4\xc4\xc0\xd4\xb4\x0b\xa2\x01\x6e\x93\x3b\xee\x30\x61\xa2\x75\x21\x88\x55\x9b\xcd\x7b\x54\x1b\x68\xc0\xd6\x6b\xf2\x80\x6e\xed\x03\x8c\xf5\x30\x4c\xb7\x0a\x54\x84\x79\xef\xed\x03\x17\x15\x8b\x11\x8e\x60\xb4\x6c\x5d\x40\x40\xd2\x28\x90\x06\x00\x9b\x50\xab\xf7\x55\x7c\x19\xc1\xcd\x6e\x51\xae\x3f\xc0\x42\x96\xd0\x0b\xa5\x6e\xc2\x51\x86\x07\x61\x10\x02\xa1\xa2\xba\x2d\xdb\x7c\x0c\x7c\x5b\x19\x40\x9a\x0f\xc0\x88\xe2\x41\x0c\xd2\x5d\x79\x70\x1d\x72\xf7\x84\x0c\x49\xee\xcc\x81\x72\x33\x8b\x09\xb7\x6b\x0a\x1b\x39\x62\x90\xbe\xb1\x87\xbc\x86\x3e\x2d\x3c\xa3\x4c\x46\xd8\xe0\x3a\xc4\x5b\xb1\x54\x33\x76\xc7\xb2\x9c\x21\x6c\xb0\xa3\x9a\x99\x66\x06\xbc\x80\x3d\x52\x98\xd6\xde\x22\x5d\x20\x09\x6b\x24\x4b\xd4\xfa\x6c\xb5\xe4\x13\x92\x19\x7e\x90\xad\xcd\x4b\xcd\x00\xb2\xb5\x68\xae\xbc\x3a\xa2\xe7\xe4\xd4\xa2\xad\x47\x6b\xd5\x04\xa7\x04\xd8\x63\xd5\xc4\x41\xc5\x8b\x63\x77\x3a\xf6\x1e\x30\x11\xf5\x1b\xce\x6f\x2a\x72\x9d\xf8\x69\x07\xbd\x33\x2c\x0a\x1e\x4a\x5b\x14\x24\x55\xb6\x4c\x91\x64\x09\x26\xd5\xad\x45\xf3\xf3\x7b\x4c\x5a\x0c\x97\xec\xc1\x81\xc1\x3b\x5c\x4a\x2f\x06\xe9\xd2\xc8\x9a\xf2\xce\x1f\xbb\xae\xe2\xca\x6d\x5e\xa0\xa1\x69\xdf\x06\x3e\xd2\xbb\xf5\x9a\xe4\x3c\x5d\x04\xa5\x3b\x21\xd3\x99\x8e\xf2\xbb\xa8\x34\x6e\xd8\x19\x59\xdb\x55\x59\x66\x61\x52\x66\x91\x27\x55\x66\x4b\x1f\x72\x47\xba\x0b\xe3\x35\xd9\x38\xab\xd6\x4e\x02\x40\x87\xa9\x82\x94\x56\x46\xa4\x37\x2c\x11\xde\x36\xfa\x09\xd5\xfe\xaa\x4f\x64\x30\xba\x46\xa4\xc9\x48\xf2\xac\xe0\xd2\x6a\x25\x06\x11\x36\xaa\x76\xba\xc0\xb7\x8a\xde\xd1\xce\xf1\xce\x4e\xa4\xa1\x9d\xab\xa3\x13\x8d\x48\x48\xd3\xea\x08\xc1\x56\x2d\xf8\x86\x27\x37\x6f\x5c\xc8\xdb\x2c\x99\x38\x0a\x15\x5a\xbe\x7b\x4b\x0d\x15\x9a\x70\x61\x72\x72\x53\xe2\x68\xf9\xc5\xc1\x64\x69\x25\x17\xc2\x8b\x2c\x2b\x77\xdd\x65\x99\xa0\xdf\xa6\x46\xf6\x29\x2a\x2f\xd2\xc0\x5e\xa6\x92\xbf\x28\xd4\xfe\xc2\x4a\x5d\x6b\x35\x46\xfe\xea\xba\xd6\x1a\x74\xac\xb5\xdc\x54\xfe\xf0\xec\xa1\x99\xf3\x90\x83\x7e\xbf\x79\x1f\xf1\x59\xba\xe4\x4d\xf8\xbc\x99\x66\x4d\xd5\x02\xe7\x77\x34\x78\xbd\x5e\x13\xa9\xf7\xa8\x58\x1e\x15\x01\x8e\xb7\xce\x7c\x22\x67\xbe\xd0\xaf\x55\x66\x3e\x19\x49\xa4\xd0\x8d\x59\x34\x8b\x33\x2a\x4f\x94\x0a\x8b\x09\x8d\x8f\xec\x66\x2a\xd2\x8a\x24\x94\xec\x7a\x2d\x76\x1b\x07\x7e\xc3\x22\x5b\xad\x1c\xad\x3e\x81\x67\xec\xba\x16\xed\xb8\x2e\x7f\x4b\xed\x5e\xc3\x56\x25\x38\x91\xde\xa7\xd2\x81\x4d\x9f\xc1\xe3\xba\x51\x5e\x44\x4c\x2d\x1f\x4e\xd2\x01\xda\xc6\xbd\xa4\x74\x65\x55\x23\x24\x7d\x78\xa3\x75\x33\x28\xc4\x6b\xa2\x1f\x36\x0d\x9f\x5f\xc0\x35\xac\x3e\x7b\xd2\x9d\xb5\xdc\x71\x48\x1c\x14\xcd\x81\x6f\x03\x4b\xdd\xa5\x72\x20\xc3\x7d\xa8\xe1\xbc\x4c\x9e\x9c\xec\xde\x99\x33\xa3\x29\x50\x2e\xce\xc0\x52\x79\x31\xa5\x84\xe2\x8a\x99\xca\x7c\x1c\x93\x78\x4d\xa6\x51\x12\xe5\xb3\x2d\x88\x10\x5b\xc9\x8a\x4b\xb2\x32\xa7\xe4\x2a\x59\x71\x20\xab\xcc\x3e\x9f\xd8\x9e\x40\xa5\x11\xcf\xac\x79\x25\x99\x39\xc0\x60\x72\x8f\x32\xd1\xc4\xba\xc8\xaa\x7f\x60\x13\x25\x0d\x42\xf3\xd4\x76\x9e\x6d\xdd\x2a\x12\x4b\xaf\xa2\x4f\xaa\xa2\x95\x06\x86\x66\xbd\xde\xe0\x0b\x51\x2c\xf6\xd5\x58\x71\x82\x90\x73\x36\x5f\xc0\x55\xb1\xde\x70\x41\xcd\x18\x54\x75\xd3\xf6\x50\x99\xad\xf9\x51\x1f\x36\x83\x73\x08\x53\x65\xce\xc3\x01\x27\xea\xfc\x1b\x64\x6b\x62\xf4\xb9\x16\xa5\xe8\xa9\xb7\x77\x0f\x31\xb6\x6c\x8d\x36\xb4\x40\x7c\x60\x6e\x2d\x82\xc7\xb5\x8e\x71\x73\xab\xa5\xab\x8b\x65\xc2\xa3\x39\xa3\x59\xa1\x60\x34\xd2\xa1\x93\x81\x62\xad\x9a\xb7\x49\x9b\x99\x83\x11\x04\x1d\x7e\x5c\x8f\xc4\x3f\x04\xce\xb2\xd6\x2e\xde\xd8\x7d\xd3\x6a\x34\xdf\x34\xff\x2b\xbd\x63\xd9\x5d\xc4\xee\x9b\xcd\xd3\xf9\x0d\xcb\x9a\x3b\xcd\xbf\x84\x77\xe1\x25\xd8\x0d\x35\xdf\x2f\x16\x71\x34\x86\x9b\xe0\xe6\xc7\x2c\x9c\xb3\xfb\x34\xfb\x06\x9f\x8d\xd3\xc5\x43\x16\xdd\xce\x78\xf3\xc4\xfc\xea\x76\x7c\x7f\xa7\xdb\xf1\x8f\x9a\x57\x51\x3c\x61\xcd\x4f\xc9\xd8\x6b\x86\xc9\xa4\x29\x96\x64\x16\xdd\x2c\x79\x9a\xe5\xe2\x6b\xeb\xbf\xaf\x69\x26\x4a\xcf\x4b\xc5\x74\xf6\x45\x31\x7e\xf3\x92\x67\xe9\x8d\x2c\xe7\x45\x9f\x1d\xca\xcf\x44\xab\x55\xed\xef\xe3\xb8\x09\xaf\xf3\xa6\x90\xe6\xb2\x3b\x36\x81\xa2\xfe\x4b\x48\x3c\x49\xce\x9a\xcd\xe6\x67\xf9\x6b\xd2\x5c\x26\x13\x96\x35\xbf\x7c\xba\x6a\xaa\x97\x95\x3a\x2f\x19\x6b\xce\x38\x5f\xe4\xc1\xee\x6e\x16\xde\x7b\xb7\x11\x9f\x2d\x6f\x04\xf9\xee\x32\x31\x74\xff\xc8\xe5\x5f\xef\x1f\xf9\xee\x3c\xcc\x39\xcb\x76\x3f\x7f\x3a\x39\x3d\xbb\x3c\x85\x1a\xef\xa4\x69\x47\xb3\xd9\xec\x79\xfe\xbe\x77\xd8\x68\xbe\xd9\x95\xf2\x93\xa0\xc1\xc6\x3c\x8c\x92\x93\x34\xe1\xc0\x2c\x84\x88\x66\x4d\x16\xac\x14\x12\x15\x92\x4d\x5a\x80\x03\x87\x94\x91\x9c\x26\xc3\x70\xd4\xc8\x57\x2b\x04\x3f\xdb\xd4\xd9\x05\xe0\x23\x67\x84\x15\x9a\x6a\x24\x32\xd8\xce\x24\x4b\x13\xbe\xb2\x21\xdf\xd2\xc7\x35\xc9\x57\xab\x32\x17\x56\x21\xd6\x07\xd6\x12\x3b\x49\x97\xf1\x04\xb4\x2e\xd3\x28\x99\x34\xe7\xe9\x64\x19\xb3\xa6\xd3\x66\x6d\xa7\x99\xb1\x7f\x2e\xa3\x8c\x4d\x9a\x37\x0f\x41\xd3\x69\x73\x09\xaa\xfd\xdc\x87\x18\x34\xf0\x85\xe3\x4a\x4c\xc5\x2a\x5c\xe4\x64\xac\x80\x80\x6f\xc2\xf1\x37\x22\xcd\x5d\xe1\xa6\x1d\xc5\xc6\xb6\x71\x42\x3b\xc7\x93\xb7\xfa\xf9\x78\xd2\x6e\x63\x47\xad\x26\xb1\x26\xe3\xe1\x64\x34\x98\x0e\x27\x23\xba\x14\x5c\x1f\x5a\x57\x4e\xe7\x01\xfc\x49\x91\x48\xb2\x4d\xd8\xec\xdb\xce\x29\x26\xcb\xb5\x23\x08\x64\x1a\x25\x70\x9d\xa4\x16\xef\x7d\x94\x4c\xd2\x7b\xd7\xb5\xde\x99\x48\xd9\x8b\x2c\x1d\xb3\x3c\x77\x5d\x73\x64\x52\x29\x23\xd1\x82\xc7\xb5\x39\x64\xc9\xad\x5f\xbd\xc4\x10\x32\x01\xb8\x07\x2c\x48\xeb\x27\x04\x59\x25\x85\x2e\xd4\x75\x51\x46\xcb\x49\xde\xf5\x75\x9c\x86\x13\x96\x0d\x50\x52\x39\x2a\xc3\xfe\x4e\xa2\xda\xd4\xfa\xdb\xba\x88\x8a\x8d\x7f\x80\x22\x98\x0d\xca\x49\x64\x66\x83\x66\x38\xd0\xe9\xc3\x91\xfd\x82\x63\x92\x0c\xd9\x88\x46\xe5\x80\xe7\xcc\xb2\x36\x63\x00\x50\x8e\xd7\xd8\x53\x10\xf8\x94\x13\xb8\x3c\xad\xcb\xfe\x43\x9a\xc6\x2c\x4c\x50\x22\x3d\x26\xad\xc7\x76\x41\xe4\x6b\xc2\xbd\x6b\x16\x7e\xbb\xce\x19\x4b\xe0\x00\xa8\xc7\x81\xaa\xf0\x9b\x10\x79\x1f\xa6\x3f\xe0\x44\xe3\x6d\x04\xc9\x1a\x07\x88\x59\xc3\xa6\x42\x7d\x12\x6e\xa7\xa9\x0f\xf1\x1a\x61\xc2\x90\xf3\x5f\xb0\xca\x77\x77\xa2\x84\xb3\x2c\x09\xe3\x7c\xf7\x26\x4b\xef\x73\x96\xed\xb0\xe4\x2e\xca\xd2\x44\xc8\xa4\xaa\x69\x64\x68\xa8\xb1\x62\x0b\x5e\xba\x53\x56\x73\x52\x89\x33\xca\x88\x73\x7d\xcd\xf2\x2f\xb0\x50\x0c\x8e\x46\xab\xb3\xc6\x84\x89\xe1\xfa\x70\xfe\x85\x32\x2f\xca\x3f\x46\x19\x9b\xa6\xdf\xe1\xf7\xc9\x2c\x4b\xe7\x8c\x32\x6f\x99\xb3\xec\xfd\xad\x38\x84\x32\x6f\x16\xe5\x3c\xcd\x1e\x28\xf3\xe2\x54\x72\x73\xca\x3c\x49\xba\x6a\x7b\x52\xe7\xa7\x8d\xcd\x29\x67\xf1\xd4\x75\x55\x44\x18\xf9\x20\xfe\xf5\x64\x83\x29\xa5\xc6\x53\xa1\x66\x01\xfc\xa2\x16\x07\x7c\x51\x8e\x2a\xa5\x5f\x6d\x54\x38\x49\xc7\x60\xaa\x60\x2a\x2d\x12\xa0\x18\xfd\x48\xed\x37\x1b\xa5\xe8\x6e\x9a\x52\x8a\x04\x28\xc5\x0c\x83\xfd\x66\xa3\x14\x35\x6c\xa6\x10\xf3\x0c\x65\xe8\x41\xb5\xd2\x37\x4a\x48\xc2\xbb\xe8\x56\xec\xcc\xa6\x0c\x2b\x05\x4a\x31\xcf\xb4\xf4\xce\x91\xae\xbe\x35\x25\x15\x13\xdb\x30\x44\xc0\x15\xea\x2d\x1f\x88\x32\x03\x51\x55\xc3\x4c\x70\xd6\x50\xa7\x96\x41\xa9\xeb\x3a\x97\x19\x8a\x44\x5d\x09\xa8\x7c\xaa\x53\x3a\x9b\xee\x6d\xa4\xbd\x0d\x06\xe5\xe6\x17\xcd\x0a\x9c\xcf\x0f\xc9\xf7\x26\x12\x3b\xd9\x3c\x9d\x30\xec\x34\x6c\x6a\x4c\xd5\x11\x43\xaa\x23\xf5\x72\xce\xbc\x31\x10\x2e\x60\x78\x78\x82\xfe\x43\xdc\xb0\xe8\x39\x54\x91\x14\xe0\xab\x3a\x5a\x03\x9c\x81\x38\xbe\xca\xa2\xdb\x5b\x96\x35\xec\x65\x91\x03\xb4\x49\xdd\xba\x15\x34\x99\xc6\x6c\x73\xad\x12\x9d\x79\xc2\x6e\x96\xb7\xf6\xe3\x22\x63\xe3\x90\xb3\xc9\xce\x94\x85\x7c\x99\xb1\xca\xba\x96\xcc\xf3\x5f\x5d\xdb\x9a\x2d\x5a\x6b\x33\x69\x64\xde\xe7\xf3\x1f\x7f\x3c\xbd\x80\xeb\xed\xc7\x38\xbd\x0d\x2a\x12\x82\xbe\x6b\x44\x8c\xaa\x8e\x61\x2f\x4e\x6f\x4d\xd8\x66\x63\x05\x84\xd7\xe4\x3e\xcc\x92\x97\x7c\x2f\xf2\xd5\x16\xc0\xc4\x9e\xfe\x92\x12\x20\x63\x6d\x11\x51\x32\x4d\x5f\x52\x82\xc8\x57\x5b\x00\x4c\xce\x46\x09\xc5\x1d\x80\x2a\xc1\x83\x7c\x03\xc4\x8b\x22\x21\x45\x6f\xf0\x56\x99\xc1\x8b\xea\x0d\xf3\x9c\x65\xfc\x25\x4d\x97\x39\xeb\x0a\x51\x50\x05\x11\x4d\x1a\xc5\x7c\x47\x4f\x51\x2a\x0f\xa3\x84\x65\x4f\xd0\xaa\x95\x3d\xbd\x4f\x58\x56\xfb\x66\xc9\xa3\x78\x3b\x7d\x2f\xd2\xf8\x61\x1a\xc5\x71\x0d\x55\x83\xbe\xfa\x5f\xa6\xec\x45\x16\xdd\x85\x3c\xfa\x8d\xd5\xa8\x8a\xd9\xb0\x33\x22\x09\xbd\x51\x87\xc5\xc4\x68\x68\x34\x63\xd2\xf8\x1e\x01\xc0\xe5\x45\x22\x7b\x48\xa3\xa1\x6f\x22\x15\x88\x4f\x29\xea\x90\xcc\x93\x1d\xc6\x28\x6d\x3b\x81\xd3\x0e\xdb\xce\x8e\xd3\xbe\x86\x7b\x8c\x8f\xef\x4f\xae\xce\x2f\x7e\xbd\xfe\x78\x7e\x41\x99\x77\xa2\xc7\x95\x32\xef\x42\x49\x05\xf6\xb2\x4b\x6d\x05\xb8\x11\xbf\x99\xba\xb3\x36\xee\xd3\x70\xb1\x22\x24\x31\x75\xad\xa6\x0a\x92\x11\x0f\x3c\x98\x0d\xca\xe5\xdf\xd5\xaa\x50\xf9\x8e\xc3\xf1\x8c\xc9\x06\x4f\x22\x28\x3a\xcc\x1e\x30\xdc\x41\x8e\x67\x4c\xe6\x54\x65\x4e\x43\xb1\x73\x3e\x7c\x09\x93\xf0\x96\x65\x27\xdb\x3e\xac\xc9\x56\x2a\x26\xca\x3f\xb0\x9c\x67\xe9\x03\x9b\x18\x5d\xb4\x49\x8b\x92\x5b\xda\xf2\xd5\xfd\xb3\x75\xe7\x62\xe0\x6c\xbc\x38\x4d\xbf\x2d\x17\x9b\xd0\x0f\xd5\xb2\x37\x15\x76\x27\x61\x02\xa2\xbf\x90\x13\x9b\xff\xa7\x0a\xfa\xbf\x26\xe8\x1f\x9a\x7c\xc6\x9a\x30\x38\xcd\x59\x98\x37\x6f\x18\x4b\x9a\x13\x5d\x94\x53\x78\x8e\x2b\xd5\xb5\x3d\xc4\x9e\xd4\xbb\x44\xbf\x31\x8d\x37\x92\x78\xea\x53\x5a\xd5\x59\x97\xfb\xd9\x21\x13\x05\x40\x4f\x12\xa9\x39\x89\x7e\x63\x1f\x36\x3f\x9d\x21\xeb\xc2\xb4\x34\x7c\x1d\xf1\x25\xdc\x11\x6c\x86\x1d\xb7\x32\xae\x56\x56\xb8\x96\x01\x52\xb5\x12\x55\x2e\xae\x09\xa4\x2e\x88\x11\x28\x40\xac\x04\x1d\x2c\xbd\x6e\x6a\x87\x7c\x44\xc4\x29\xc0\xe4\x19\x9b\x54\x3d\x0a\xae\x6b\x7e\x22\x8c\xd7\xcf\x0d\x21\x86\xe1\x80\xb9\xf8\x94\xfc\x83\x55\x6e\x1d\x37\x18\xdd\xe3\x1a\x0f\xb9\x77\xfe\xcb\xd9\xe9\xc5\x88\x16\xb4\x4e\x18\x0c\xaa\x6c\xf0\xc7\x34\xdb\x24\x98\x6d\x4b\xe7\x35\x34\x54\x94\xff\x42\x3a\xb2\x54\x53\xb5\x9d\x97\xb1\x73\x54\x48\x04\xd7\x6d\xc9\xeb\xcf\x7c\x11\x8e\x59\x71\x28\x33\x5f\xb2\xef\x8b\x30\x99\x7c\x4e\xc7\x61\xfc\x19\xa8\x19\x3a\x57\xd8\x89\x28\x67\x1f\xc2\x30\xe8\x7d\x2c\x03\xa9\xd0\x76\x65\x6d\xf9\x2d\x4a\x59\x51\xec\x2d\xe3\xe7\x0b\x75\xab\xe8\xe4\x51\x72\x1b\x33\x9e\x26\x8e\x75\x45\x9f\xbf\xf8\x73\x69\xd0\xc9\xa3\x90\x33\xbb\x00\x63\xdc\xb6\x79\x94\xd4\xb2\x22\x0c\x45\x56\x0c\x45\x56\x1a\x8a\xc4\xae\x71\x73\x1c\x44\xd9\x3a\xe8\x70\x4b\x1c\x4a\x4d\x37\xf4\xb9\x52\x53\x6a\x52\xd6\x49\x44\x26\x7c\xd6\xba\x6a\x16\x5a\xb1\x5c\x8d\x2d\x73\xc3\x22\xf4\x99\xfa\x1c\xc2\xa6\xd5\x5a\x9f\x8a\x8d\xc1\x0c\x49\xc3\x1a\x41\xab\x8d\xae\x0b\x29\x89\xeb\xca\x79\x72\x5d\x39\xe0\xd2\x4c\x30\xc1\x5a\xf7\x5e\xac\x36\x1a\xe9\xd3\x74\xe9\x36\xb7\xe0\x36\xae\x5b\x73\x4d\x9f\x16\x4b\x34\x2d\x96\x28\x49\xd7\x2f\x6b\x3d\x89\xec\x46\xdb\x7d\x49\x5c\x57\x0e\x7c\xb4\x5a\xc9\x2e\x6c\xf6\x41\x8f\x73\xd1\xf0\x7f\x75\xcc\xac\xf1\x6a\x95\x2b\x2b\xeb\x94\x5e\xd5\x1d\xd9\x8f\x64\xb5\x92\xfd\xd1\x55\x00\x2e\x8b\xe8\x57\x4d\x7f\xe2\x30\xcf\x1b\x9b\xac\xc3\xe8\x9e\x64\x87\x9b\x8a\x79\x38\x50\x44\x22\x23\x17\x15\x2b\x24\x2e\xb7\x74\x1b\xf3\x2d\x11\xef\x86\xbc\x62\xad\x11\x6d\x76\xc7\x71\x85\xde\x1f\xb5\x98\x21\xda\x3a\x87\x00\x77\x59\x01\x1f\xb8\x95\xeb\xd3\x94\xa4\x56\x73\xc7\x9b\x03\xab\x78\x77\xde\x30\xab\x23\x81\x83\x83\xfd\x0e\x16\x7c\x71\xa1\xd9\x39\x8e\xde\x9a\xdb\xf6\x48\x3b\x7c\xa4\x94\x0f\xa3\x11\xc9\x69\x6a\x70\x4c\x49\x4c\x53\x0f\xe0\xd9\xa6\x11\xcb\xc8\x58\x3c\x01\xa3\x68\x24\xc3\x7c\x44\xc7\x03\xc1\x60\x62\xa2\x83\xd4\x8c\xd7\x38\x80\x14\x2c\x04\xb3\xfc\xc3\x43\x12\xce\xa3\xb1\xe0\xa8\xc5\x13\x6d\x85\x90\xc3\x9e\x84\x69\x79\x47\xd4\x83\x49\x92\x92\x24\x38\xec\x8c\x36\x6c\xc8\x4b\xa3\xf1\x58\x74\x58\xdb\xef\x98\x6a\x83\x96\xbf\xde\x08\x73\xc5\x5d\x77\xac\x20\x2f\x89\x49\xcc\x64\x22\xa0\x98\x27\x40\x76\x82\xd5\x5e\x3d\x2c\x98\xd9\x27\x73\xc0\xea\x14\xc9\x56\x12\xb7\xcd\x55\x27\x15\x47\x2f\xc9\x41\x48\xa6\x75\x72\xdf\xd8\x83\xf8\x82\x24\x80\xa9\xa3\x61\xd5\x8f\x13\x3d\x17\x11\xe5\xc3\x6c\x98\x8c\x46\x8d\xa8\x60\x1e\x51\xc1\x3c\xac\xc1\x9b\x81\x23\xda\x36\x09\x53\x69\xfd\x5e\x26\x55\x4a\x65\x9d\x2d\x2b\xa7\xca\xca\x58\x10\xad\x42\x48\x68\x94\x25\xeb\x05\xe4\x98\x6f\x97\x9e\x25\x33\x57\x77\x53\x46\x06\xb7\xe5\x65\xa6\x64\x09\x99\x47\x2c\x6b\xca\x95\x2c\xbc\x8c\x63\x30\x9c\x52\x2f\xcd\x1e\x3e\x81\xd4\x44\xdd\xd9\x85\x13\x76\xa5\xcd\x58\x6c\x2b\x0a\x6b\x01\xa8\x64\x80\x2e\x2a\x44\x23\xbc\xd6\x34\xb7\x21\x02\x67\x4f\x58\xc6\x58\x28\x78\xd5\xfa\xf5\x7d\x50\xa9\x4d\xe5\xce\x17\xcc\x62\x1e\x7e\x33\x99\x50\xd1\xfb\x72\xdf\x31\xde\xec\xe5\x9a\x64\x8a\x9f\xd3\x3a\x7b\x89\xa2\xaa\x97\x49\x59\x92\x51\x8a\x37\xda\x31\x24\x7f\x81\x9c\xd5\x44\x0f\xe9\x52\xdf\xbc\xb1\x49\x93\xa7\xba\x24\xa7\x5d\xea\x41\xdb\xc1\x65\x99\xcc\x62\x5a\x15\x93\x5f\xb9\x90\xab\xdd\xa8\x9b\x7c\x0c\x3e\x33\x56\x49\x19\x4d\x49\x52\xe2\x3a\x55\x1a\x48\xe5\x74\x87\x34\x2b\xf1\x66\xe6\xba\x28\x14\x8b\x21\x12\xa7\xf8\xe8\x36\xc1\xe8\x71\x0d\xe2\x1c\x26\xad\x62\x56\xd4\x80\x6f\x0e\xe3\xc7\x30\x8a\x4b\xdd\x0f\x13\x33\x8e\xcd\x74\xda\xfc\x4f\x35\x1c\xe5\xf6\xb7\x9d\xff\xf4\x9a\x5f\xd2\x9c\x37\xe3\xe8\x1b\x8b\x1f\xe0\xab\xb9\x64\xbc\xf1\x43\x53\xa9\xbd\x9a\x50\x75\x33\xcd\x64\xa1\x32\xca\x87\xba\x4f\x91\x6a\x01\xcf\xc1\x8d\x3a\x8f\xae\xa2\xdd\xd7\x51\x12\xf1\x8f\x72\xfd\x0f\xb6\xa4\xcb\x23\x4a\x50\x1a\x14\xf3\x3b\x5c\xad\x6a\x06\x28\xc4\x98\xa0\x0e\x01\xd3\xbf\x73\x41\x22\x18\x85\xd6\xaa\x56\x21\x8b\x73\xba\x31\x82\xa8\xb8\x7a\x91\xcb\x51\xad\x45\x92\x4b\xf1\x99\xdc\xd1\xdd\xbf\x0f\xff\x1e\x8c\xda\x01\xfc\xfb\xa7\x5d\xf2\xb0\x8d\xbd\x58\x92\xad\x98\x46\x56\x9c\x2f\xa6\xfa\x9a\x82\x99\x9f\xf6\x81\x5c\xed\xd3\x72\xbb\x91\x3f\xcb\xaf\x61\x89\x86\x92\x70\x36\x18\x25\x2b\x67\x28\x1d\xbc\xaf\x79\x69\xab\xd8\xc6\x92\xb5\x0f\xc3\xcb\xf2\xc5\x85\xd0\x2d\x79\x77\xdd\xdd\x8e\xcc\x6a\xc8\xec\x29\x26\xaf\xf2\xaa\xae\xbf\x20\xe7\x34\x8c\xe2\x4b\xc6\x61\x23\xb8\x64\x8a\x3d\x5f\xa7\x8b\x17\xb4\x1d\x4c\x42\x9f\xcc\xb8\xd6\xbb\xe4\x06\x17\xe6\xd6\x9e\x51\xe7\xa2\xc0\xee\x9b\xa9\x89\x74\x45\xb8\x9a\x16\x96\x6d\xde\x72\x6d\x3d\x00\x95\x96\xa6\x38\x1b\x96\x3a\xec\xc9\x13\x37\x4a\x70\x0d\x61\x0c\x93\x11\xad\x0c\x85\x48\xca\x44\x4b\x96\x49\x4d\x5b\xb4\x02\x6c\x5b\xa5\x2f\x9a\x66\x6d\x2e\xbe\xd9\x1c\x3e\x2a\xbd\x2c\x4d\xef\xc6\x4b\xdd\x60\x3e\x22\xb5\x3d\xe6\x6a\x40\xa1\x88\x2a\x1c\xb8\x42\xc5\xba\xb5\xb4\x0c\x15\xfd\x4c\x49\x1c\x55\x57\x22\xa5\x85\x09\x42\xaa\x3e\x6b\xeb\x44\xac\x2b\x54\x9a\xd4\xcc\xd2\xa4\x1a\xae\x91\xac\xc1\xf4\x3f\x1f\x67\xd1\x0d\xab\x25\x0b\xab\x3a\xbd\xba\x95\x81\x95\x7e\x54\x7a\x29\x8d\x9b\x12\xa5\xc9\xe0\x99\xf7\x88\xe1\xa0\xae\x1f\x83\xd2\x93\x69\x97\xc8\xce\x44\x43\xcd\xb8\x7c\xd4\xc2\xcc\xef\x6c\xb1\x29\x68\xb0\x25\xfd\x85\x2d\xdc\x68\xd0\x66\x53\xb7\x3b\x68\x95\xb9\xcb\x90\x8d\x0c\x48\xd5\xc6\x9b\x0a\x95\x5b\xb5\x01\x65\xd9\xc2\x4f\x85\xbc\x5e\x31\x28\x76\x29\x83\xed\xaf\xa0\xdc\x97\x0c\xce\xe6\x47\xcc\x08\x82\x08\xda\x5d\xbe\xbd\x56\x5a\xae\x96\xd2\x69\xfd\x2c\x36\x68\xbb\xa7\xfa\x14\xad\xc5\x1f\xd7\x2d\xd4\x4e\x95\x65\xa3\x5f\x88\x53\x01\xe4\xb3\x14\x31\x4a\x51\xbd\x55\x57\x52\x3d\xd9\xb0\xe2\x20\x6a\x4e\x67\x19\x31\x05\x06\xc9\xba\xa4\x21\x2c\xad\x5d\x80\xca\x23\xdc\x53\x0c\xe2\x63\x9a\x89\xc3\x0f\xad\x9a\x8b\x54\x58\x3b\x4c\xb8\xf8\xcc\xe8\xa5\x6a\xbe\x2c\xf1\xbf\xca\xd7\x8d\x0d\xd9\x7a\x2b\xdf\xe0\xe5\x94\xcd\x2a\x01\xca\x9e\x5b\x9d\xa8\xe3\x5f\x5b\xb9\xb0\xe6\x8c\xd9\x46\x8f\x5e\xc2\xca\x4d\x08\xad\x82\xc1\x6e\x74\x2d\xdb\xda\xb5\x6c\x6b\xd7\xa0\x4f\x59\xa9\x3d\xdb\x7b\x65\x2a\x67\x65\xd5\x45\x66\x89\x75\xd9\x90\x8f\x8c\x45\xbd\x68\xa5\x56\x81\xd4\x1d\xb9\x51\x56\x33\x69\xc9\x08\x57\xca\x1b\x88\x7f\x5e\xb2\xce\x0a\xed\x25\x2c\x32\x85\x03\x48\xa4\x6b\x54\x8d\x42\x5a\x9b\xef\x95\x1b\x77\x8c\xea\x44\x2e\x9b\x2b\x6d\xbc\xa1\xc3\x11\xc6\xd2\x31\xe1\x51\xab\x39\x02\x4e\x8c\x92\x23\x00\xc0\x07\x5e\x9c\x1b\xb6\xb8\xb7\x57\xe6\x5d\x2a\x28\x77\x7c\x30\x0b\xd5\xa1\xe8\x44\x2b\x4b\xc6\x99\xa5\xd6\x28\xcd\x43\xc3\xb2\x20\xb6\xe9\x48\xf7\xad\x10\x11\x87\x51\xd1\xaf\x52\xea\xb3\x7d\x4a\x64\x9f\xbe\x25\xe9\x7d\x52\xb7\x2a\xad\xa8\x10\x24\xdd\x26\xcd\x85\x65\xe5\xc5\x86\xf8\x81\x21\x74\x59\xfe\x56\x47\x9c\x3a\xce\xb5\x36\x63\x49\xc3\x61\x3e\x6a\x2c\xcb\x93\xa7\x64\xf6\x74\xb8\x84\x38\x24\xeb\x1a\xae\xff\xc4\x9a\xb7\xfb\x02\x4b\xe3\x25\xbb\x85\xfd\x11\xc8\x1f\xdb\x5f\x43\x99\xd5\x33\x0f\x27\xa9\x62\x8e\x15\x56\x5f\xb7\x61\xde\x49\x7c\x0f\x29\x98\x96\x74\x45\x5b\x39\x62\x64\x53\xaa\x0e\xe7\x5d\x1d\x8c\xd2\x42\xb7\x17\x94\xa5\x8c\x62\x5a\xfe\x92\x6b\x1e\x71\x5a\x46\x80\xd6\x61\xa1\xb3\xc2\x79\x57\xb3\xba\xb2\xa6\xeb\x49\xe6\xfd\xe9\x5f\x6a\x6e\x45\xa5\xf6\x7b\x9b\xbc\x71\x2b\xf1\xfb\x85\x89\x8d\xa2\x06\xdb\x6e\x25\xd8\xa6\xac\x0e\x17\xd5\x7c\xd4\x48\x57\x2b\x24\x7f\xd6\x49\xef\xc6\x3f\x6c\xb5\xca\x48\x4e\xd3\xaa\xb1\x66\x6e\x42\xe4\x2b\x73\x4e\xf6\x44\xf3\x14\xd8\xad\x71\x73\x1c\x86\x23\xba\xdc\xba\xaf\x6f\x15\x37\x2c\x49\xe3\x45\x32\x52\xfd\x7d\x18\x7c\x59\xbd\x00\xbb\xad\x30\xcd\xb2\xbe\x67\xb5\x7a\xfa\xe6\x69\xeb\x85\x13\x4c\x02\x49\xc5\x34\x94\xce\x38\x95\x5b\xa6\x54\x0f\x66\x0a\xb7\x5c\xac\x38\xe3\xcc\xc2\x1c\x15\x97\x09\xcc\xa2\x08\x14\xd9\x43\xae\xa5\xa8\x04\x5b\xb6\x97\x91\xc9\x55\x3e\x0b\xda\x59\x06\x56\x65\xe1\x64\x82\x12\x21\x48\x56\x1b\x4b\x23\x12\xad\xd7\x96\x3d\xc2\x03\x4c\xfa\xcd\x36\x0e\x7c\x4d\x91\xe3\xb4\x21\x76\x60\x16\x26\x93\x74\x8e\x70\xfb\x43\xc8\x99\x97\xa4\xf7\x08\x8b\xb3\x13\xc4\x55\x41\x8e\x27\xa3\xce\x6d\xb3\x31\x79\xd2\x7a\xf1\x8f\xb4\x88\xb2\x1c\xb4\x2c\x17\x46\xd7\x65\x55\xb3\xc2\x81\xf6\xb8\x5d\xff\x0e\x53\x93\x5b\xc6\xab\x2b\xdf\xf2\x05\x93\x07\xb9\x35\x61\x5e\xbe\x99\x8f\xe1\x47\x9d\x83\x82\x7b\xe9\x2d\xe3\xa7\x67\x3f\xd7\x14\x04\xfe\xa1\xe2\x15\x78\xdc\x72\xe9\x62\x72\x1b\xa7\x37\x61\x6c\x9b\x91\x08\xaa\x4c\x10\x8a\x36\x0d\x2c\x65\x5e\xd7\x95\x7f\xb1\x85\xf0\x1f\x79\x49\x3a\x01\x98\xb2\x41\xa4\x91\x4c\x57\xab\x64\xd3\x81\xa0\x30\xcb\xac\x7f\xaf\x6d\x94\xe5\x5f\xbc\x5a\xd5\xd9\xcf\x59\xe6\xe7\xae\x6b\x3d\xac\x56\x09\xbb\x6f\x5a\x1e\x07\x85\xdc\xe2\x60\x84\x1b\xa6\xb7\xda\xae\xaf\x96\xcd\x5a\x3c\xfb\x31\x9a\x4b\x5f\x07\x46\xb4\xd7\x03\x23\x72\xac\x03\xb6\x0e\xcc\x6b\xee\xa9\x5f\xab\x55\x91\xd3\x78\x4a\x88\x44\xf5\x11\x57\x33\xb5\x5a\xb1\xf5\x1a\xa5\x24\x95\xc6\xd2\xa2\x69\x7a\x4a\xb4\xf5\xe0\xe3\xe9\xd9\xfb\x1f\x3e\x9f\x5e\x9f\x7f\xbd\xfa\x74\x7e\xf6\xfe\xf3\xf5\xc7\xd3\xf7\x57\x3f\x5d\x9c\x5e\x06\x2d\x9f\x9c\xfe\xcf\xd5\xe9\xd9\x87\xeb\xaf\x17\xe7\x57\xe7\x57\xbf\x7e\x3d\xbd\x0c\x1e\x15\xac\x5b\x87\xe8\xfe\x8b\xdf\xf2\xd4\x27\xa8\x8c\x7c\x3e\xff\xf1\xfa\xf2\xea\xfd\xc9\x5f\xaf\x2e\xde\x9f\x9c\x5e\x9f\x9f\x5d\x7f\x38\xfd\x7a\x71\x7a\xf2\x5e\x14\x2f\xf2\x8a\x0c\x3f\x9f\x5e\x5c\xaa\xc7\x8b\xf7\x9f\x2e\x37\xb3\xf9\xe4\xf2\xea\xe2\xa7\x13\xd1\x10\xa8\xfe\xe3\xa7\xcf\xa7\x22\xf5\xfa\xfd\xd7\xaf\x9f\x3f\xc9\x5c\xd7\x57\xa7\x5f\xbe\x7e\x7e\x7f\x75\x7a\xfd\xcb\xc5\xfb\xaf\x5f\x4f\x2f\x44\x71\x45\xe2\xf9\xd9\xe7\x5f\xaf\x7f\xfc\xfc\xe9\xcb\x97\xd3\x8b\xeb\x93\xf3\x2f\x5f\xcf\xcf\x4e\xcf\xae\xa0\x5b\xd7\x1f\x4e\x7f\xf8\xe9\xc7\xeb\x8b\xd3\xb3\x0f\xa7\x17\xd7\x57\x17\xa7\xb2\xec\xbf\xfc\xf7\x4f\xa7\x17\xbf\x5e\x7f\x3a\xbb\x3a\xfd\xf1\xc2\xb4\xf7\xfa\xc3\xe9\xc7\xf7\x3f\x7d\xbe\xba\x7e\x7f\xf9\xeb\xd9\xc9\xf5\xf9\x0f\x97\xa7\x17\xa2\xfd\xf0\xc9\xc5\xa9\x2a\xe4\xf3\xf9\xf9\xd7\xeb\xcf\x9f\xbe\x7c\xba\x0a\x7c\xd6\x23\xa7\x5f\x7e\x80\xc4\xf7\x1f\xae\xff\x7c\x7e\xfe\xd7\xcb\xe0\x71\x4d\xcc\xc0\x3e\xae\xd7\x0d\xb9\x42\xf4\xd6\xa5\xe6\xe7\xf4\xec\xe7\x42\x19\xb4\x74\x5d\x04\x6f\xce\x7e\xb6\xbc\x54\xe4\xdd\xc5\x06\x3d\x33\x73\x4c\xb2\x65\x54\xe9\x0a\x0c\xa8\x1f\x65\x18\x2e\x80\xd0\x76\x36\x66\xd7\x91\x37\x7d\x4e\xb5\xf5\x90\xae\x77\x26\x38\xa6\x01\x7a\x79\x32\xc8\x65\x68\x3d\x51\xad\x38\xcd\xb4\x7c\x75\xa7\x2a\xd3\x41\xd7\x2c\x8e\x4e\x6b\x2d\x0a\x6c\xd4\x58\xb9\xfa\xad\xeb\x5a\x64\xba\x16\xe1\x7c\xb3\x04\x4f\xe9\x45\xe4\x6d\xb8\x7a\x22\x99\xf7\xf1\xa7\xb3\x13\xa0\x12\x93\xf5\x1a\xbe\x15\x74\x77\x29\x9a\x58\x53\x94\xc1\x14\x50\x85\xe9\x67\x4c\xea\x72\xc3\x4a\xd0\x59\xe1\x01\x00\xaa\xd4\x0d\xb1\x4c\x6f\x3c\xd1\xe2\xf4\x5f\x6d\x65\xfa\x54\xbb\x52\x75\x83\xc3\xbc\xea\x6c\x36\xea\x46\x39\x34\xa3\x1c\x1a\xcf\xe9\xa5\xa0\x9f\x50\x4c\x4a\x58\xa5\x9f\x25\xd6\x10\x40\xe1\x70\x39\x6a\x40\x95\x5e\x94\x2b\x4f\x14\x2c\x5b\x5e\xa9\x57\x9c\x5e\x62\x6f\x1a\xc5\x9c\x65\x75\x1e\xfb\x75\xb0\x0d\x00\xc0\x2e\x41\x84\x98\xa7\x17\x50\x6d\x07\xc6\xa6\x03\x63\xd3\x81\xa9\xe8\xc0\x18\x8f\xab\xad\x9f\xca\x06\xea\xf2\x86\x53\x45\xac\xe3\xe1\x74\x84\x1b\x9d\xf5\x1a\x2d\x9f\x10\x09\xb2\x2c\xcd\x76\x66\x61\x32\x89\xa3\xe4\xf6\x75\x3e\x0d\xb0\x2a\x7f\x8f\x8d\xe8\x2d\xe3\xe7\x09\xd4\x5c\x07\x50\xa0\xb6\xec\x8d\x1c\x0c\x3f\x72\xb3\x59\x7f\x50\x0e\xe4\xe7\x77\x2c\xcb\xa2\x09\xab\x29\x28\x53\x05\x6d\xcf\x2a\x26\x4b\x96\x98\x26\x70\xa9\x77\x15\x66\xb7\xac\x64\x95\x9d\x91\x04\xe2\x20\x34\x53\xd9\x1c\xbb\x9d\x82\xef\x95\x3f\x4c\xb6\x8f\xb3\x0c\xde\x90\x26\x3b\xf9\x72\x21\x86\xf6\x65\x66\xbe\x9b\x9f\xc5\xd1\xcd\xee\x24\xe4\xe1\x75\x38\x09\x17\x7c\x8b\x0d\x70\xfd\x67\xe6\x4a\xe5\x1a\x44\x3c\x53\xc2\x1f\x6e\xdf\xbe\xf5\x83\x0f\x21\x0f\xdf\xeb\x76\xdb\xa1\x4b\x5b\x1d\x52\x1f\x65\x96\x6b\xd3\xe9\xf5\x53\xe5\x1a\xc3\x85\x0f\xa2\x63\xaf\xab\x21\xb3\x6a\x78\xc5\xf4\x3d\x35\xa0\x75\x93\xaa\xdc\x3d\xea\x66\x2b\x93\x4e\x9d\xff\xaf\xfc\x0c\x68\xa6\xa4\x70\x0f\x7a\x35\x41\x8f\xfa\xd8\x03\x47\x39\x32\x0e\x93\x93\x90\x87\x71\x7a\xab\x7c\x7b\x7f\x78\x10\x32\x6a\x0d\xc0\xb4\x33\x4f\x27\x2c\x76\xe4\xb5\xb1\xc3\xd9\x7c\x11\x87\x9c\xc1\x33\x78\x19\x3f\x5d\x86\x6c\x0c\x1c\x79\xde\x63\x94\x79\x67\xfa\x14\xe8\x9d\xbd\xff\x72\x7a\xf9\xf5\xfd\xc9\xe9\x25\x26\x91\xc9\x01\x37\xff\xec\xbe\x79\xc1\x6e\x4f\xbf\x2f\x10\xdc\x41\xc3\xfd\x72\x34\x7d\xc0\x88\xe1\xb6\xf3\xa7\xc2\x94\x38\xa9\x41\xa1\xb3\x84\x89\x64\xbb\x30\x91\x48\x57\x7a\x09\xd1\x6a\x3c\x30\xc5\x11\xd3\x81\xda\x00\x46\x47\x34\x49\x42\xde\x60\x14\x62\xd7\x55\x01\x58\xa1\x4d\x93\x30\x9f\xb1\x2c\xfa\x8d\x61\x94\x98\xa3\x59\x2a\x0e\x66\x10\x54\x10\x8b\xb3\x1f\xb6\x7c\x02\x5e\xc3\x34\x36\x57\xff\xab\xdc\x04\xb2\x65\x12\xa7\xe9\xa2\x36\xeb\x9c\xf1\x30\xfe\xd7\xe8\x55\x43\xe4\xfc\x1b\xa8\x36\xa4\x69\x95\x6a\xa3\x24\xe2\x1b\xb0\x25\xd7\xf9\x72\xc1\x32\xdb\xb3\xb3\xb8\x48\xd4\x37\xb9\x31\x0b\x73\xf6\x05\xdc\xb8\xe1\x66\x3a\x05\xea\x5a\x93\x71\x1d\x17\xd1\x16\x65\x21\x97\x0e\xce\xec\x73\x34\x8f\x78\xd0\x23\xe1\x78\xcc\x16\x5c\xf4\x80\x81\x2a\x50\x70\x98\x72\xd9\x81\x29\x5b\xb0\x9e\x8f\x20\x2a\xe4\x9b\x1c\xc8\x6a\xc1\xbd\xd8\xa7\xa0\x44\xb1\x5a\xf2\x5a\xcb\x71\xe8\x94\xd2\x60\xde\x32\x5e\xe4\x46\x6a\xb1\xc8\xc2\x1a\x0c\x25\xde\x3c\x5c\xa0\x8d\xf8\x34\x09\x65\xde\x37\xb0\x37\x4a\x69\x06\x68\x95\xa6\x0c\x94\x10\x26\x11\xa1\x0c\x62\x9c\xc2\xf2\xf1\xd2\x1b\x70\xae\x2e\xb2\xca\x8c\x10\xec\x31\x15\x82\x4d\xe5\x74\xd8\x64\x08\x3f\x46\xf5\xab\x50\x2b\x04\x00\xbf\x88\x64\x95\x29\xf1\x32\x36\x4f\xef\x98\x89\x90\xb9\x2e\xe3\xc7\x94\xf3\x8a\xd6\xa9\x9c\x21\x26\xe1\x9a\x5c\x8b\x56\x5d\xa5\x27\xa2\x83\x55\x50\x99\x0d\x9f\x3b\xa6\x07\x15\x16\xee\xad\x31\x68\x01\xbb\x14\xcb\xfc\x1c\x49\x4e\x17\x38\x6d\x86\x1b\x8c\x66\x80\xe6\x21\x6a\xd0\x1a\x49\xa6\xe6\xee\x82\x8d\xd3\x6c\x92\x57\xe0\x07\x88\x42\x8a\x09\x89\x34\x8b\x21\xcb\x62\x9e\x88\xc2\xa3\xb0\xdb\x8d\x18\x26\x63\x33\xc3\xaa\x4c\x14\x43\xe8\x3f\xcb\x76\x12\x3f\x66\x10\x65\x14\x44\xca\x09\x1d\x6f\x4e\xb7\xf6\xab\x90\x93\x98\xeb\x49\x94\x25\x22\x46\xa6\x58\x08\xdd\x82\x04\x74\x12\xcc\xc8\x8c\x3e\x4e\xa2\xc9\xc9\x2c\x4c\x6e\x4b\xa0\x1d\x19\x49\x49\x58\x30\xd1\x98\x66\xc7\xf1\xdb\xac\x1d\x1e\xc7\x5a\xe3\x3f\x16\x1d\x4b\x3c\x29\xce\xbe\xe7\x58\x1a\x85\x4e\x68\xa9\x92\x31\x6e\x6c\x69\xd1\x18\x5a\xc4\xd1\x70\x32\xc2\xeb\xd4\x75\x23\x94\x91\x54\xac\x8b\x28\x8e\xab\xcd\x29\x23\x5a\x69\x22\x81\xea\xc3\xc9\x04\x64\xf7\x73\x59\x78\x86\xd1\x18\xd6\x3e\x99\x95\x30\xb7\xf1\xe3\xf2\x25\xf4\x09\x45\x4a\x9a\xdc\x28\x15\x8a\xdc\x20\xca\x12\x01\x87\x78\x4d\x38\x9a\xd4\x72\x9f\x4d\xf2\x15\x3d\x55\xa6\x7b\xff\x32\x6f\x7b\x41\xe7\xd6\x64\xc2\x38\x1b\xd7\xc8\x45\x2d\x5f\x30\xc4\x78\x39\x37\x97\xab\x4f\x72\xae\x2a\x7b\xa8\x61\x5d\xf2\xae\x8b\xa4\xf5\xf4\x1e\x6e\xd0\x7b\x5a\xa2\xf7\x5c\x8c\x02\x92\x11\xc4\xca\x3c\x4b\xe4\x53\x8b\x60\xb9\x85\x70\xb9\xf4\x6d\x43\xc9\xbb\xce\x6a\x15\xbd\xeb\x88\x13\x93\xd8\xc2\xf3\xf1\x8c\x89\x0d\xe8\x3c\x19\x33\x8c\x9c\x50\x5e\x49\x48\xf4\x17\x92\xbf\x8c\xf0\x8e\xb7\x90\x9c\x34\x8a\x23\x4b\xbc\x71\x7b\x6f\x0d\xdf\x16\xc2\x0a\x49\x44\x96\x78\xbd\x26\xa5\x9e\x6e\xdd\x0e\xec\x51\xb3\x62\xd3\x3f\x26\x12\xca\x64\x9c\x2e\x13\x1e\x40\x6d\xb7\x8c\x63\x94\x11\x47\xde\xd4\x39\x58\x4f\xb1\x46\xed\xb1\xe7\x5b\xcc\x8a\x5c\xc8\x80\xad\x57\xda\x6b\x6a\x7c\x32\xe5\xec\x16\x0d\x42\x4e\xed\x7e\x5a\x88\x68\x0c\xb0\xab\x6a\x65\x4d\xc5\x6f\x1d\x3c\x10\x59\x9e\x78\x2f\xdb\x7d\x2d\x38\x37\xb4\x34\x3f\x4f\x8c\x18\x29\x36\x44\x66\x18\x2d\xc3\xdb\xd8\xe3\x23\x6c\x86\x01\xdf\x20\x49\x18\x3e\x06\x22\x5b\xa9\x9c\xed\x87\x7e\x38\xae\x70\xd8\xb6\xe4\x16\xab\x19\x88\xfa\x74\x4d\xb6\x34\x75\x63\x3c\xe5\x68\x72\x53\x6d\xba\x45\x3c\xce\xac\x1d\xdf\xb4\xa1\x16\x80\xb9\x24\xfa\x72\x0c\x20\xbb\x35\xa2\x2f\xd3\x3d\xe0\xc3\x64\x64\x5c\x61\xe0\x42\xd4\x16\x6c\x71\x23\x93\x2c\x3c\x95\x32\x6d\x06\x04\xb2\xb1\xfd\xd5\xc9\x38\x66\x23\xa8\x09\xa0\xf4\x68\x08\xce\xb6\x04\x14\x54\xf9\xb3\x84\xf3\x2b\x93\xfb\x89\xf5\x0a\xae\xba\x3c\x19\x5a\xfe\xaf\xec\xe1\x5e\x34\xa4\x92\x5d\x27\xcb\xac\x72\x1a\x6b\xcb\xfd\x68\xbd\x92\x99\xc7\x69\x9c\x56\x17\xdb\x89\x48\x83\xd7\x56\xe7\xed\x26\x6d\x8e\xc3\xe3\xda\xca\xaa\x9b\xf3\xe4\x70\xd5\xb6\xe9\x99\x82\xa1\x61\x35\x0c\x4b\xde\xd4\x95\xb6\xdc\x9a\x5c\x56\xca\xba\x7c\x52\x09\xb7\x9e\x54\x6e\xe3\x68\x3e\xaf\xf7\x5d\x86\xbc\x3b\x37\xe1\x0d\x8b\xeb\xdc\x90\xeb\x0e\x18\x86\x71\x88\xb7\xba\xe8\x74\x31\x4e\x27\x6c\x67\x9c\xce\x17\x51\xbc\x45\xef\xa1\x4f\x26\x2f\xf0\x8b\xb6\x8e\x42\xba\x86\x8c\x4d\x59\xc6\x92\x71\xfd\xf7\x95\xf3\x91\xb9\x25\x33\x5f\x3f\x51\xf7\x76\x6f\xed\xbb\x88\xdd\xd7\x0f\x42\x0d\xe4\x48\x91\x2f\x02\xa8\x0d\x91\x06\xb7\x90\xd6\xb1\x8d\x65\x77\x91\xec\x81\x6e\x98\xe8\x78\xbd\x96\xa8\xae\xe4\xba\xeb\xbe\x9a\x43\xa1\x2e\xfc\x3e\xca\xd8\xce\x34\xcd\xe6\xa1\x28\x23\xcb\xef\x4a\x23\x9a\xa4\x93\xfa\x01\xc9\x52\x19\x5b\xc0\xbc\x13\xd3\x9a\x26\x2c\xe1\xbb\x5a\x8d\xb0\x93\x26\xf1\x43\x91\x01\xb4\x6f\xdb\x8e\x9c\x24\x24\x39\x59\x92\x98\x8c\xc9\x94\x4c\xc8\x8c\x2c\xc8\x1c\xc2\x80\xde\x92\x1b\x72\x4d\xee\xc9\x29\x39\x27\x97\xe4\x3b\x79\x5f\xa3\xc2\xfc\x56\x08\x19\x5f\x0d\xfb\x85\x03\x01\x0f\x6f\x6f\xd9\xe4\x4a\x35\xe8\x33\xa0\x85\xc5\x9f\xd3\x34\x67\x18\x0d\x1d\xd3\xe4\x60\x47\x2d\x10\xa7\x88\x92\xf1\xb5\x46\x21\xc9\xd6\x84\x15\xfe\x3b\x17\xaf\xa9\xcb\x0c\x8a\x26\xff\x60\x1e\x46\x89\x55\xdf\xc5\xb3\xf5\x5d\xfd\xa1\xf5\x5d\x3d\x5b\xdf\xc9\xef\xa9\x2f\x30\x83\x9a\xef\xd6\x8c\xea\xc9\xb3\xb5\x7e\xf9\x5d\xb5\xee\x00\x36\x67\x51\xcf\x97\x67\xeb\xf9\xc7\x1f\x52\xcf\x3f\x9e\xad\xe7\xd3\x1f\x46\x91\x9f\x9e\xad\xeb\xc3\xbf\x61\xc6\x3e\x3c\x5b\xeb\xd9\xbf\xa1\xd6\xb3\x67\x6b\xfd\xfc\x87\xae\x86\xcf\xcf\xd6\xf7\xf1\x99\x9b\xa1\xdf\xa1\x25\xd3\xad\xa2\x3f\x11\xe6\xcd\x58\xbc\x60\x19\xfd\x91\x30\x8f\xe5\xe3\x70\xc1\x4e\xbf\x2f\x32\x96\xe7\x55\x4c\x71\x4b\x0b\xd2\xb2\xb4\x20\xd1\x14\x81\x79\x06\x4f\xff\x7c\xf5\xe5\x73\x61\x1f\x23\x9f\x15\x16\xf3\x32\x8e\x0b\xd4\x49\xc7\x91\xb6\x35\x3a\xaf\x36\x9d\xc6\x0d\x46\xcd\xef\x35\x98\x48\x73\x6d\x10\x57\x40\xc6\x5b\x06\x38\x52\x3f\x9a\x71\x92\x70\x80\xef\x98\xf1\x79\x7c\x19\x4e\x19\x8d\x38\x60\xa4\x43\xb0\x37\xf1\x9c\x8a\xe7\x6b\x80\x63\xb8\x60\xc9\x84\x65\x2c\xcb\xed\x71\xff\x6f\xed\xda\x4a\x3b\xa2\x9c\x0c\xf2\x5c\x32\xce\x63\x36\xb1\xf3\xc9\x7e\xd0\xff\xe5\xae\x8b\xfe\x97\xd3\x53\x2d\xde\x88\xbf\x2c\x43\x20\xaf\x83\x94\x77\xb2\xcc\x32\x96\xf0\x8b\x65\xf2\x39\x4d\x17\x18\xe1\xd5\x2a\xf7\x6e\xc2\xf1\xb7\x9b\x65\x96\xb0\xe2\xf4\x68\x1d\x1c\x41\x81\xfe\x17\x5e\xf8\x2c\xfc\x2f\x84\x5f\x9a\x47\xb9\xbe\xb8\xd2\x34\x56\x9d\x95\x28\xab\x4a\xe3\xc5\x78\x45\xd9\x90\x8d\xd4\x6d\x56\xcd\xf7\x96\x19\x06\xe4\xa4\x70\x85\x36\x0b\xf3\xda\xba\x4c\xce\xcd\xfa\x2a\x4d\xcc\x6b\xa8\x3a\xca\x2a\xed\x28\x5b\x0a\x46\xea\x3e\x2d\x67\x7c\xb9\x38\x4d\x6e\xa3\x84\x19\x23\x27\x3b\x1f\xab\x58\x99\xa3\xe2\xf6\x80\x3c\x5a\x4e\xe3\x41\xcb\x07\x5a\xd7\x3e\x35\xc8\x11\x02\x53\xb0\x93\x2e\x79\xcc\xb8\x43\x7e\x4c\xca\x6f\x0b\x4e\xab\x73\xfc\x02\x39\x8c\x81\x65\xb5\x00\xab\xde\xcd\x8f\x2b\x5f\x2a\xd9\x2a\xd8\x99\xa4\xf3\x9d\x31\x68\x05\x84\x6c\xa4\x51\xca\x20\x22\xb8\xc9\xa1\xd2\x9e\x2a\x82\x67\x4c\xb0\x14\x85\x9a\x26\xc5\xb8\x67\x0b\x33\x7d\x85\xf3\xbc\x41\xdb\xc1\xe8\x04\x61\x4c\x7e\xae\x8c\x87\x29\x43\x49\x64\x65\x69\x72\xc1\x9f\x2c\xf1\x4a\x94\xf8\xe7\xca\xf8\x55\x33\x5d\x88\x4c\x4e\x59\x94\xb4\x6b\x91\xac\x52\x94\x51\x9d\x71\xc9\xb2\x9e\x9b\x6f\x99\x2b\x88\xd3\xb1\x43\xe6\x59\xf9\x9d\xb5\xdf\x71\xf6\x9d\xef\x4c\x65\x84\xa9\x4b\xb6\x35\xdb\x78\xc6\xc6\xdf\x6e\xd2\xef\x0e\x39\xdd\x9a\x29\x8e\x92\x6f\x3b\x3c\x75\xc8\xc5\xd6\x2c\x51\xb2\x58\x8a\xf1\xcb\xb6\x50\x9f\xb5\x3b\xa9\xac\xff\x4c\xb6\x95\x25\x5a\x1e\x66\x2c\x74\xc8\x77\x08\x59\x70\x7a\xf6\xb3\xf7\xac\xdd\xcf\x6a\xf5\xc4\xbc\x7d\x15\x53\x72\x2d\x97\x33\x2c\x44\x0b\xe4\x75\xcb\x6a\xac\x23\xd1\x5a\x92\x71\xc2\xc5\x82\x25\x93\xf3\x05\x53\xf6\x8f\x65\x42\xad\x23\xea\xca\x12\xc8\x14\xef\x76\x80\x6a\xec\xcf\xeb\x2a\xdc\x42\xce\xa2\xa6\x9b\x65\x14\x4f\x80\x80\xa4\xa1\x6d\x49\x9d\x90\xdf\x47\x7c\x3c\x43\xcc\xbb\x49\x53\xed\x49\x21\x36\x0f\x51\xf7\x97\x74\xc2\xf0\xe3\x38\xcc\x99\x28\x30\x02\xb3\x58\x27\x50\x0c\xee\xdc\x33\x69\x3f\xc8\x0a\xbc\x9b\x28\x99\x48\x4b\xcc\x06\x7c\x94\xb1\xd9\xc3\x24\x13\x3c\x43\x7f\x34\xf5\x74\x5a\x94\x26\x35\x9f\xa9\x1d\xa6\xc8\x3e\x86\x08\xab\x9b\x39\xd7\x10\xc9\x7c\x2b\xc7\x30\x5d\x76\xac\x6e\x6d\x5d\x70\xf5\x83\x5e\x94\x51\x5b\xf4\x93\x1c\xe1\x1f\xc0\x11\xb6\x97\x2d\xc4\xdb\x2b\xc3\x50\xab\x5f\x7f\x41\x18\x97\xe7\xf3\xff\x47\xde\x9f\xb6\xb7\x71\x33\xf9\xc2\xf8\x7b\x7e\x0a\xa9\x4f\x2e\xde\x8d\xbf\x20\x86\x72\xee\x33\x33\x7f\x2a\x88\x6e\x59\x8b\xa3\xc4\x96\x1c\x49\x76\x16\x3e\x3c\x9c\x16\x09\x8a\x88\x5a\x68\x06\x0d\xca\x56\xc4\xfe\xee\xcf\x85\xc2\xda\x1b\x29\xdb\xc9\xcc\x99\xeb\xc9\x8b\x58\xec\x6e\xec\x85\x42\xa1\x96\x5f\xd9\xa2\xd0\x85\x08\x73\xd1\xf6\x9a\x71\x2a\x64\x84\x85\x40\x78\x61\x30\x11\x95\xb8\xf2\x7c\xb2\x5d\x2e\xa6\x89\xa4\xed\x64\x6b\xd9\x39\xea\xb4\xd2\x9b\xe3\xf8\x4d\xf4\x66\x23\x59\x2d\xaf\xee\x04\x91\xaa\xb3\xde\xf1\xc5\x1b\xad\x45\xce\x63\xa9\x93\xd5\xb7\x35\xd2\x70\x26\x7c\x62\x73\xb1\x9d\xa0\x03\x68\xf7\x5a\x50\x7a\x14\xd4\x37\xb8\xe8\x9d\x67\x53\xda\xf0\x06\xe9\xbe\x15\x5a\xca\xd2\xbd\x7b\x93\x4c\x44\x56\x3e\xe2\x2f\xb9\x56\xfc\x69\xfe\x02\x92\xf2\x4d\x4a\x4f\x33\x41\xde\x50\x4c\x7b\x93\x64\x91\xdc\xb0\x94\x49\x46\x6b\xd1\x57\x35\x48\x28\xed\x62\xe3\xa0\x17\x48\xf4\x4d\x6f\xef\x1b\xf0\x1f\xf0\x38\xb0\xb2\xa7\xd7\xee\xfb\x2c\xbb\x43\xf8\x09\x12\xb3\xbc\x66\x33\x7a\xf4\x38\x49\xe9\x91\xf1\x4d\xcf\x07\xfe\x73\xf7\xc5\xa4\xf4\x05\xc2\x80\x60\xa0\x53\x7f\xf8\xaf\xfd\x43\x84\x7d\x43\x03\x9d\x43\x24\xa7\xf2\xc8\x32\x6a\x03\xa1\xd1\x14\x7b\xd5\x11\xe4\xa6\xe7\x98\xf3\xf8\xcd\xe1\xf9\xe1\xab\x93\xcb\xf1\xd5\xf5\xe5\xd9\xf9\xab\xf1\xeb\x8b\x8b\x1f\xdf\xbd\x6d\x40\xfc\xa4\x07\xa1\x7e\xd6\xe9\x3b\xb5\xb3\x6b\x70\x44\xec\xde\xeb\xa6\xc1\xfc\x58\x0c\x9c\xf4\x3c\x15\xf1\x93\xb1\x51\x0e\x04\xb6\xca\x95\xc1\xf6\x1e\xd6\x99\x09\x5d\x05\x51\x81\xa5\x15\xee\xd6\x8c\xc7\x92\xd5\x5c\xc4\xde\x00\x2c\x01\x26\xcb\x56\xde\xed\x06\xb5\x42\xfa\x11\x0d\xbf\x6f\x6d\xa5\x2e\xa0\x0b\xe6\xee\x4d\x36\x85\x38\xa4\xe6\xa9\x6b\x18\x05\x6d\x18\xc5\xbd\xa9\x24\x1c\x44\xb5\xe2\x73\x8e\x69\xcf\x7e\x78\x14\x52\xe0\x0f\xa2\xb2\x8c\xeb\xe5\xe7\xdf\xb9\x06\x0a\xc1\x5a\xab\x5b\x9e\x31\x57\xf4\x98\xaf\x71\x71\x72\x5b\xfd\x99\xfe\x47\x21\x77\x58\xeb\xe4\xd4\xb0\x65\x3f\xa5\x89\x6a\xd9\xb5\x6d\xb1\xfc\xca\x9c\x82\xc0\x2e\x4f\x99\xc8\xe5\x39\x28\xf3\x9e\xd9\x60\x5b\x05\x6b\x5b\x6d\x61\x4c\xcf\x6c\xb4\x95\xb1\x69\x86\x7b\x01\x32\xfd\x7b\x46\x3f\x10\xda\x3b\x3b\x7f\x7f\xf1\xe3\x09\xa1\xbd\x77\x6a\xcb\xab\x7a\x2f\xad\xf2\x97\xd0\xde\xe1\x4d\x2e\x45\x32\xa9\xef\x15\xda\x1b\xd3\x8f\x0b\x2a\x18\x68\x5e\x53\xc3\x1d\x69\x0f\x32\x1c\xab\x4b\xe0\x03\xb5\x57\x53\x78\x4a\x85\x0c\x7e\x07\x7f\xaa\x0b\xad\x71\x9c\xa5\xbd\x13\x7f\x52\x11\xda\xfb\x5e\xdf\xe4\x69\xcf\xb5\x4e\x68\xef\x35\xe3\x77\xe1\xef\x6b\xfa\x51\x1e\x0a\x9a\x98\x3f\x4f\x95\xe0\xab\x8a\x18\xf1\x96\x78\xed\x00\xc4\x9c\x1c\x65\x4b\xd5\x43\xd5\xd5\xcb\xe0\x88\x0e\x1d\x6c\xfe\x24\x4f\x00\x25\xf4\x3d\x93\x83\x3e\x86\x3f\xdf\xb0\x3c\x1f\xf4\x8b\x4e\x5b\x65\x7f\x42\xc1\x97\xa4\x7a\xce\xbf\x8e\x51\x60\xb8\x7d\xe7\x19\x0b\x58\x91\x6c\x5d\x06\x81\x04\xe9\xd0\xd9\x00\x68\x08\xd7\xb3\xa0\x71\x02\xa8\x4b\x06\xc1\xcf\x23\x0c\xa0\xa7\x3f\x7b\xae\xab\x3b\x3b\x0e\x96\xcb\xb0\xd0\x97\xa8\xc3\x89\xcf\x6d\x8c\x9f\x40\x0f\x3f\xa0\x05\xc2\x90\xf9\x1b\xf2\xcd\xe9\x04\x36\xa6\x9e\xef\x99\xdc\xd9\xf1\x78\x03\xde\x9b\x6c\x3c\x66\x53\x22\x7b\x6c\x8a\xd5\xdf\xf7\x54\x26\x3a\x1d\x62\x82\x39\x58\x9e\xbf\x27\xef\xe2\x27\x36\x1d\x44\xf3\xdf\xe7\x1f\xdf\x65\x62\x19\xe1\x9b\x34\x9b\xdc\x0d\xfe\xf1\x14\xe5\x90\x09\x3a\x8f\x06\xc3\x11\x8e\x5c\x4e\x1b\xf5\x7b\xb8\x87\x87\x2f\xfe\x03\x07\x3c\x15\x0f\x87\x2f\xbe\xc1\x7d\x3c\x1c\x8d\x46\xa0\x4d\x18\xe1\x59\x92\xe6\x74\x34\xc2\xd1\x3c\xc9\x4f\x1e\x92\x34\x1a\xc0\x93\xe2\x1f\x58\xb5\x3f\x78\xd2\xb0\x30\xe0\x82\x14\x2d\x92\xc9\x5d\x72\x4b\xf3\xaf\xdb\x4d\x34\x29\xbb\x71\x3a\xf6\xfc\x6b\x25\xb1\xf5\xe6\x37\x79\xa4\x2d\x3d\x25\xea\xf8\x1e\xe6\xf3\xbd\x5a\xb6\xa4\xa7\x07\x81\xe2\xe8\xf2\x44\x9d\x74\xef\xae\x4f\xc6\xd7\x87\xaf\x0c\xbe\xcf\x1f\x24\xeb\xb9\xec\x11\x7f\x89\x9b\xd6\xf0\x3d\xe0\xbc\x2e\xcd\xe2\x5d\x27\xb7\x60\x0d\x13\x54\x4d\xd5\x52\xd2\x66\x83\xe9\x3e\xa8\x6e\x7e\xcf\x18\x47\x81\xf1\x33\xb0\xaa\x2d\x7b\x53\x26\xa4\x22\xba\xe1\xfb\x11\x38\x40\xc0\xb0\xcd\x9e\xfb\x03\xff\xd1\x63\xb9\xfe\x61\xc8\x93\x6c\xf7\xb5\xfd\x36\xa7\xd2\x8d\x10\x2c\xc4\x28\xfe\x43\x0f\xfe\xe7\x76\x90\x1a\x63\x55\x87\x1e\x5b\xec\xab\x7a\x03\xce\x89\xc8\xe3\xa0\xd4\x50\x9e\x9c\x9d\xcf\x8e\x3f\xac\xba\xa8\x86\xdf\xbd\xaa\x60\xa5\xfc\xac\xa4\x35\xf7\xf6\x57\xff\x16\x86\x66\x3c\xdd\xd5\x4e\x3c\xd0\x20\x02\x5a\x8f\xe6\xa4\x24\xaa\xbd\x2b\x7e\xac\x50\xc2\xbb\xb7\xc7\x87\xd7\x27\x11\xc2\x5f\x55\x5e\x68\xee\x0a\xb2\xb4\x61\xb4\x5f\xc1\x4c\xfd\x54\xf9\xee\x10\xa2\x05\x22\x84\x7f\x69\x99\x42\xf4\xd4\x34\x37\xb7\xb4\x31\xed\x00\xb5\xb3\xe6\x81\x61\x00\x56\xe8\x87\x72\xc8\xb3\xad\x5d\x18\xca\xb1\xb2\x73\xac\xe1\xda\x4c\xfe\x34\xb4\x5a\x69\x27\xb0\x34\xc9\xe5\x25\x7d\x60\xa0\x49\xd5\x40\x41\xf0\xec\xbd\xce\x44\x07\x0f\x0a\x37\x99\x4a\x52\x9a\x53\xc1\x64\x6e\x94\xc7\x42\x49\x12\x22\xe8\xbc\xce\x60\xd7\x48\xbd\x3d\x99\xdc\x1a\x3f\x8a\x52\xb3\xd6\xa9\xc2\x35\xdb\xa9\xc4\xb6\x82\x37\xcb\xb2\x07\x28\x51\x89\xa4\xc8\x40\x28\xc6\xd5\x72\x24\x24\x9a\xd8\xf8\x0c\x95\x06\x68\xeb\x59\xaa\x4a\xb4\x59\x5f\x14\xf1\x2f\x08\xff\xd6\x36\x89\x3e\xca\xd3\xce\x23\x0f\xe7\x11\x3a\xa2\x67\x92\xf2\x07\x22\x30\xef\x4d\xe6\x2c\x9d\x0a\xda\x9c\xbd\x82\x6f\x9e\xcb\x1a\x00\x5a\x20\xbf\x2d\x68\x4c\xf1\x76\x1f\x24\x45\xb1\x86\x64\x82\x88\x66\xdb\x9d\x16\x28\x8a\xb8\xfe\x19\x1c\x56\x86\xcc\x7a\x8c\x03\x1c\xae\x9e\x4b\xca\x1f\x34\x00\x85\x28\xe2\x65\x0f\x64\x10\x27\x57\x20\x4c\x69\x3b\x25\x3a\x32\x6f\x64\x89\x7a\x0a\xbf\x68\x6a\x60\x65\x59\x0e\x7d\x82\x9d\x1e\x2b\x19\x03\x96\x3a\x06\xe4\x11\x3c\xa3\xb1\x40\x07\x66\x6c\x02\x73\x34\x98\xba\x27\x4b\x1a\x8b\x21\x1f\xa1\x41\x3c\x57\xcf\xf0\xac\xf7\xee\xfc\xf8\xe4\xf4\xec\xfc\xe4\x78\x7c\x79\x72\x7a\x72\x79\x72\x7e\x74\x82\x74\x32\x18\xa1\xc1\xb3\x6d\xf8\xc4\xfa\x85\x08\x98\x94\x08\x36\xae\x28\xe2\x1f\x10\x96\xad\x13\xb6\x81\xea\x1c\xcd\x2d\x12\x41\xb9\x25\x7e\x90\x52\xb4\xb4\xf9\x23\x7d\x04\x5a\xb4\xbf\xaf\x93\xdb\xf0\xb8\x71\x52\xa1\x3e\x77\x30\x57\x5b\x93\x94\x3e\xc7\xbc\x68\x5b\x08\xe7\x66\xdf\x80\xaf\x6d\x0f\x83\x16\xff\xa9\xb0\xc3\x76\xdb\x07\x7d\xc6\xb0\x43\xd3\x9e\x92\x4e\xef\x9a\x8e\x38\x6d\xcf\x4a\xb5\x9f\x17\x40\x9e\x22\xbc\xbd\x87\xbc\x73\x64\x0a\x69\x3a\x96\xf7\xe0\xc3\x83\x61\xc8\xfa\xd6\x8b\xe2\x52\x63\x30\x42\x48\xbd\xca\x87\x3f\x96\x13\xb7\x43\x2d\x39\x34\x50\xed\x71\xad\xbf\x66\x2d\xa9\x99\x14\xf1\x8c\x05\xdd\x5f\xbb\x94\x5e\x4c\xaf\x2d\xa7\x03\x91\x57\x6c\x34\x23\xcf\x5d\x5c\xbf\x36\xd2\x7d\x97\xdd\xdf\x30\x4e\x51\x3c\x64\x38\x1b\xa1\xbf\x78\xa9\xc3\x85\x76\xc3\x71\xeb\x1f\xcc\x7f\xe3\xfa\xfb\x3d\xcb\x5c\xe6\x90\x4e\xc9\xb7\x99\xb0\x6e\xd7\x3a\xf8\x01\xba\xa2\xeb\x91\x7e\x58\x0e\x38\x23\x3e\x22\x91\xaf\x56\xa1\x6d\x92\xd8\xfc\x96\x38\x21\x1c\xe7\x9b\x28\x2f\x0b\x28\x2f\x59\x4f\x79\x79\x95\xf2\x70\x8e\x70\x56\x3c\x97\xd6\xdc\xa4\xb9\xa9\xd8\x44\x77\xbc\x9d\xee\x9c\x0a\xc7\xc2\xdd\x34\xd1\x9e\x2c\x53\x90\xe1\x0a\xa2\x37\x7e\x30\x9c\x45\x7c\x16\x85\xd4\x64\x81\xd0\xd1\x5d\xd7\x5d\x60\x6e\xa6\xa9\xac\xb1\xb7\x50\x0d\xfa\xab\x6e\x37\x0e\x85\x5b\x2b\x4c\x58\x24\x3e\x93\x48\x1b\x99\xc3\xbc\xd3\x78\xed\xe5\x3a\xc5\x2a\xfb\xbc\xa9\x0a\xce\x79\x4d\x5a\x1b\x38\xaa\x68\xda\x6d\x7a\xeb\x0a\x5f\xc3\x08\xb9\xfc\xbe\x9f\x72\xea\x81\x41\xb5\x7a\xe0\x79\xa5\xa9\xa1\x1a\xb0\x5f\x83\x40\xca\xf2\xb7\x22\xfb\xa8\x26\xce\x99\x5c\x67\xbd\xb7\x82\xdd\x33\x7d\xa3\xb7\xe4\x66\x24\x95\x5f\x01\xf3\x37\x3c\xb9\x40\x19\x1a\x1e\x73\x32\x53\xb2\x73\xc3\x49\x57\x6e\x4f\x1d\xc3\x75\x1e\xec\x86\x8f\xf5\x96\x4b\x6e\x4f\x33\x61\xf5\x24\x48\xab\x67\xae\xc5\x52\xce\x1f\x23\x84\xb0\x15\xd2\xfd\xee\x2b\x7f\x80\x06\xcf\x6d\x42\x8b\x7c\xbf\x6a\xa0\x36\x51\xc4\x33\x25\xc1\x4c\x99\x1a\x40\x92\x06\x72\x4c\xf6\x05\x5c\xdc\xf8\x29\x28\xe6\x9d\x88\xdb\xdc\x71\x6d\xc7\x2e\xbf\x80\x59\x03\x4d\x61\x36\xfa\x7c\x29\xb2\x46\x36\x12\x85\x49\xa9\x73\x33\x17\x8a\xf5\x42\xf4\xcb\x14\xce\x19\xcb\x85\x12\xc2\x1c\x6d\x05\xf2\x68\x9c\xe1\xa4\x46\x2f\x35\x09\x75\x93\x60\xa0\x27\xce\x9e\x09\x7e\xb2\x6c\x28\x90\x9a\x4d\xac\xe6\x31\xe8\xa6\xea\x9c\xee\x66\xd0\x35\x00\xfa\xb6\xdd\x74\x31\x1b\x8d\x9c\x9d\x12\x19\x27\x38\xaf\xb1\x72\x4f\x4c\x02\x4f\x40\x48\xd0\xf2\x5a\xf2\x05\x84\x61\x91\x73\xff\x1e\xd2\x90\xc3\xf7\x23\xfc\xe5\xf4\xf1\x85\x6b\x68\xc7\xf8\x5f\xbe\x8a\xee\xce\xf7\x29\xab\x99\x7f\xb1\xf4\x5d\xdb\xec\x46\x90\xd6\x0b\xf1\x8c\x45\x58\x3b\xb5\xbe\xb4\xdf\x1f\xc8\x65\x65\xcd\xdd\x2d\x62\xf9\x5f\x7f\xed\xaa\xdc\x47\xf7\x36\xdc\x46\xfd\xc7\xfe\x4a\x39\xa4\x23\x53\xb0\xe9\x2a\x99\x7e\xa1\x40\x03\x4d\x28\xb9\x05\xd6\xc3\x9c\xbb\x7f\x95\x94\x1b\x4a\x31\xd0\x90\x25\xd4\x42\x47\xa0\xb4\xa2\x8c\xea\x8f\xb5\xa2\xb7\xd0\x20\xd3\x7a\x6a\x8d\xc2\x4d\xe0\xe1\xd3\x1d\x7d\x1c\x7c\xd5\x16\x2c\xee\x67\xef\xab\x51\x51\x80\xf4\x10\xff\x10\xe8\xc5\x26\xb4\x9c\xe9\x5b\x10\x6a\xa0\xf8\x65\x08\xc5\x2f\x8c\xba\x19\x42\x20\x9c\x75\x32\xc8\x5b\x40\xeb\x10\xae\xb4\x21\x39\x60\xe0\xff\x37\xa5\x1b\x1c\x00\xdd\x97\x73\x50\x7b\xb9\x9f\x0b\x5a\x49\x61\x5c\x51\x4e\x6c\xf7\x11\x86\xfe\x1c\xe8\x1c\xae\xbf\x41\xa6\xd5\x81\xb9\xb4\x53\xb8\xc4\x53\x77\x89\xa7\x68\xb0\x4e\xb2\x31\x8a\xbe\x7b\x5a\x51\xd4\x1d\x9f\x5d\x5e\xff\xaa\xf5\xbd\xf8\xa1\xfa\xf2\xf0\xf2\xd5\x55\x84\xf0\x63\xf5\xf9\xd9\xd5\xf8\xf8\xec\xea\xed\xe1\xf5\xd1\xf7\x67\xe7\xaf\xc6\x87\xd7\xd7\x97\xea\xbb\xdb\xea\x77\xdf\x1f\x5e\x8d\x5f\xbe\xbe\x38\xfa\x31\x42\xf8\xa6\xfa\xf2\xe5\xc5\xbb\xf3\x63\x55\x6c\x4c\xc9\xbc\x77\x94\x09\xfa\x9e\xd1\x0f\x56\xb9\x3c\xef\x1d\xcd\x59\x3a\x55\x8f\xf2\x2b\x1d\x22\x8d\xe7\x3d\xf5\xf3\x4a\x26\x92\xfa\x47\x40\x40\x10\x41\x63\x9f\x65\x3d\x8d\xd9\x70\x08\xd3\xec\xbf\xac\xfe\x56\x95\xbd\x61\x1f\x19\xc7\x71\x7c\x47\x9e\x94\x64\x60\x3d\x77\xb6\xfb\xf8\x33\x95\xdb\x8f\x74\x64\x93\x73\x0d\xef\x69\x83\xa6\x5b\xbf\xba\xa1\x23\xa2\x63\x36\x04\xd5\xbe\x10\x61\x5b\x55\x89\x5f\xd5\x64\x25\x7e\xe8\x41\x8c\x8a\x02\x0d\xd3\xde\xdb\xcb\x8b\xb7\x27\x6a\x01\x8f\xcf\x8e\xc7\x47\xdf\x1f\x9e\xbf\x3a\x19\xb5\x40\xd9\xaa\x9e\x85\x91\x65\xc3\x07\x3a\xc2\x9c\x78\x80\xbe\x03\xc5\x98\x06\xd6\x6e\xe4\x32\xa3\x04\x70\xa0\xea\x0e\xd7\xed\xaa\xff\xc7\x2f\x08\x21\x6e\xe8\x66\x83\x1d\x40\x24\x9a\xd5\x50\x68\x7d\x0f\x2a\x0a\x0c\xd0\x80\x87\x52\x36\xe2\x7d\xbb\x98\x32\xc5\x17\xee\x7a\x82\x26\xd3\xe3\x8b\x37\xb5\xaf\x9d\x95\x69\xae\x3e\x56\x2b\x77\x92\x82\xad\xc5\x44\xf4\x62\x38\x8b\x48\x00\x38\xf7\xee\xf2\x8c\x10\x32\xeb\x5d\xbd\x7f\x35\x76\x61\x55\x3a\x8c\x7a\xe6\x31\xf3\xbc\xec\x0d\x0c\x3f\x23\x0c\xcc\xde\x70\x1e\x7b\x74\x7f\xc7\x13\x57\xab\x28\x91\x52\xa8\x2b\x74\x76\x20\xec\xb8\x20\x78\x3c\x4e\xd0\x40\x0c\x93\x91\x1a\xc5\x94\x4d\x2f\xe9\x84\xb2\x07\xaa\x5e\x97\x9c\x2d\xdd\x6b\xb5\xe6\xd5\x17\x1f\x58\x9a\x36\xbf\x99\xb2\x29\x08\x45\xcd\x15\xaa\x72\xef\x2a\x57\xc9\x4a\xb9\xca\x0b\xa4\xae\x8a\xde\xec\x38\xa6\x78\x4c\xd7\xa4\xc7\xa8\xc5\x72\x44\x85\x2a\x20\x68\xb6\xa0\x5c\x47\xd5\x85\xfb\xc7\x18\x40\xd4\x36\xf2\xd2\xce\xdb\x44\x24\xf7\xf9\x60\x38\x2a\x50\xab\xdd\x65\x6c\x4e\xa4\x0f\xd4\x19\xdd\x1e\x64\xfe\xe7\xbf\x5f\x9e\x3e\xcb\xe8\xf6\x37\x59\xd2\xe8\xfd\x42\x3e\x5a\x53\x1a\x3e\xa1\x64\x4c\x9d\x0d\x2c\x4d\x1e\xb3\xa5\x1c\x7c\xa0\x78\xe2\x18\xd1\x60\x68\x42\xa3\x9c\x4f\xe2\x08\xcb\xe4\x56\xb7\x6e\xbc\x06\x1d\xe8\xc0\x4b\xc6\xa7\x8c\xdf\xaa\x42\x8a\xf2\x22\x1c\x41\x29\x3a\x8d\x70\xc4\xf8\x94\x4a\x2a\xee\x19\xd7\x6e\xac\x53\x96\x2b\xa9\x58\xbd\x92\xc9\x8d\x89\xc8\x8a\x14\xc9\x47\x38\x4a\x96\x32\x9b\x65\x93\x65\x0e\x79\xe5\x75\x2e\xef\x08\x47\xb3\x4c\xdc\xab\xf6\xb5\xdf\x88\x73\x92\xb4\x55\x0d\xb6\xf7\x70\xa9\x19\xf5\x60\xca\xa6\x67\x3c\xa7\x42\x9a\x4d\xf6\x19\xf1\xca\x54\x97\xec\x95\xea\x26\xce\x39\x47\x1f\xe7\xc1\x2b\x54\xe0\x49\x2d\x1a\xb7\xac\x23\x0a\x66\xa6\xd4\x84\x79\x6a\x0c\x7e\xce\x50\x7e\x42\xf1\xc9\x27\xd1\xf4\xd7\x6e\x76\x0a\x20\xc2\x0b\x4a\x9c\xc3\x55\x83\x41\x43\x67\xd7\x55\x1f\x5e\x85\x14\x31\x07\xb3\xbd\x3d\x65\xd6\xd3\x47\xe0\xda\xfa\x3c\x0a\xd1\xc8\x14\x66\xb1\x55\xc7\x53\x2a\xed\xda\xe7\xc9\x83\xa6\x11\x61\x56\x3d\xb1\x9e\xc7\xea\x07\xe5\x13\x43\x5e\xea\xd7\x3d\x84\x91\x9b\x1f\x3c\xb3\xe6\x25\xf3\x40\xc2\xf1\x19\xe1\x68\x4e\xd9\xed\x5c\x02\x21\x2e\x96\x90\x10\x38\xc2\x51\x9a\x40\x74\x57\xca\x72\x70\xb2\xd6\x95\xde\x27\x8a\x12\xef\x99\x6a\xee\x7e\x99\x4a\xb6\x48\xa9\x27\xcd\x45\x22\xd5\x0e\x8b\x70\x94\xb3\x3f\xd5\x83\x5c\xd2\x45\x84\x23\x10\x1e\x23\x1c\x7d\x60\x53\x39\x8f\x46\x58\x07\x41\x44\x91\xa6\x56\xa3\x59\x04\x21\x74\x8a\xe2\xa7\x46\xc9\x30\x52\x73\x18\x15\x38\x0f\x5f\x06\x41\xd4\xfa\x7d\x1d\x66\x5d\x1f\x8c\x76\x7d\xad\x6e\xc8\x9b\x45\x3b\x6c\x16\xd3\x2d\xc6\xb7\x2e\x5c\x1c\xc4\x05\x1d\xd2\x91\x49\xb6\x6d\xbd\xf3\x0c\x45\x98\x7d\x12\x9b\xb5\x43\x1d\x29\x1e\x9f\xb4\x07\x15\xa1\xc5\x24\x91\x93\x79\x2c\xbc\xc9\xf3\x42\x83\xe9\xeb\xf7\x84\xd0\x02\x70\xee\x62\x41\xa4\x92\x6b\x0b\x84\xd5\x34\x69\xc8\x1e\x33\x75\xfa\xc7\x3d\xb3\x7f\x24\x1f\x35\x38\xab\xa2\x78\xef\x26\x72\x45\xf1\xd5\xa7\x91\x7c\x40\x81\x9a\xe8\x3f\xae\xa1\xe5\x36\x0a\x06\x1f\xe7\x11\xf6\xa4\xee\x48\xd9\x7b\x40\x37\x51\xb3\xc8\x20\x40\x72\x92\x41\xf4\xa6\xa1\x95\x9c\xa6\xda\xf1\xf3\x84\x4f\xc3\x9f\x57\x32\x11\x0d\x94\xff\x41\x24\x0b\x4f\x94\x9a\xf8\x35\x59\x8d\xb0\xaa\xdf\x00\x1f\x65\x69\x5e\x9e\x30\x70\xb1\xf9\x48\xf1\xc7\xcf\x98\x2f\x18\x91\x9e\xae\x43\x77\x50\xdd\xb2\xeb\xf3\x8f\x3b\xd9\xa2\xf1\xa0\x8a\xba\x2e\x92\xa9\xea\x27\xf2\x4f\x1c\xb1\x19\x38\x87\xfc\x6f\xbc\x67\x3c\x43\xf0\x53\xd5\x99\xe4\x9f\xf0\x2e\x5a\xa8\x33\x54\x31\x4d\x38\xed\x8a\xfa\x77\xd8\xf8\x98\x44\x29\xe3\x77\xd7\x4c\xa6\x34\x1a\x05\x7e\x26\x95\xf2\x7f\x97\xeb\x89\xf1\xb3\x77\x47\xe6\x9d\x4b\x7b\x32\x13\x94\xfe\x49\xe3\x27\x3b\xe7\x0d\x1b\xda\x99\x1f\xa1\xe8\xdb\x5a\xd1\x02\xe1\xcb\xa6\x23\xf8\x30\xa0\xbb\x24\xc2\x22\x5b\x4a\x3a\xb8\xa3\x58\xe3\xbb\xd8\x3f\x72\xf5\xd7\x1f\x4b\x2a\x1e\xd5\x1f\xd1\x44\x07\x02\xed\x7e\x98\x53\x1e\x69\x5a\x91\x6a\xd6\xf4\x9f\x82\xa6\xe6\x99\x39\x6d\xed\x2f\xc5\x1f\xf5\xdf\xda\x35\x4c\x63\xd2\x44\xfa\x47\x84\xd3\x2c\x51\x34\x6e\x9e\x9a\x5f\xfe\xcc\x35\xcf\xfd\x69\x6e\x42\xa5\xd4\xd1\xdb\xb4\x4f\xe6\x82\xce\x14\xab\x85\xe5\x54\x87\x7b\x5a\x16\x00\x0c\xbf\x1e\xf9\x23\xa6\x74\x64\xe8\x3e\xf9\x6e\x94\xc4\x08\x91\x70\x2d\xa0\x31\x7e\x7b\xc6\xab\x4f\x2e\x96\xaa\x5a\xfa\x40\xb9\xd4\x13\x3b\x49\xd9\xe4\x2e\xfa\xf4\xcb\x51\x27\xb0\x8f\xb9\xea\x74\x72\x06\xcd\xaf\x1d\xc0\xf5\x98\xf1\x87\xec\x0e\x00\x15\x4c\x28\xb1\x3a\x08\x1e\x8c\x43\x38\x8a\xa3\x5d\x1b\x61\x8c\xf0\xd8\x2c\xdf\x25\xac\x35\x9c\x17\x49\xca\x92\x1c\xc5\x91\x2d\xdc\x0b\x3f\x51\x8d\x56\x8b\x09\xb8\x4f\xae\x2f\x0c\x9f\xa8\x82\x7a\xa6\x37\x97\xd3\xdf\xb9\x62\xc2\xf7\xcf\x9f\x67\x11\x3c\x8d\x70\xd4\xd0\x9d\x08\xc7\xcd\xb6\x45\x28\xe3\x61\x36\x08\xb9\x33\xb9\x63\xca\x53\x41\x0b\x84\xf0\xd8\x10\x7c\xb5\x5d\x0d\xb0\x81\xf5\xbf\x79\x6b\x53\xf0\xda\xea\x37\xf5\xb7\xae\xe1\x6d\x68\x58\xdd\x17\xa5\xfe\x53\x82\x5c\x8f\xf0\x58\x6f\xad\x6a\x93\xf0\xb4\xb5\x25\x78\x5b\x19\xd4\x5b\x98\x2f\x11\x42\xf5\x6b\x04\x23\x27\xb8\x3e\x4b\x3c\xd8\xde\x6b\x12\x0d\x4a\xc6\x38\x96\x1f\x9b\x2a\x89\xc4\xdb\xdb\xd2\x40\xc8\x97\x36\xab\xe2\x44\x7a\x23\xd5\x86\x16\x30\x00\xb5\x96\x76\xbb\xd5\xcd\xa8\xdb\x3a\xa3\x8c\xf9\xc2\xb4\x12\x94\x86\xe9\x6b\x69\xa4\x91\x44\x34\xb9\xc1\x1f\x76\x29\xa3\xb1\x99\xe9\x60\xb7\x97\x58\x5c\xdb\x12\x34\x34\x60\xf3\xb8\x6e\xdb\xbe\x8e\x59\x7e\x08\xdd\x33\x58\x52\xea\xd6\xf9\x92\x1e\x7e\x52\x8f\x6b\x1b\xe8\x6f\x1f\x06\x76\xe9\x0d\xaa\x4d\x83\x88\x07\x88\xc1\x15\x7a\x30\xa3\x94\x30\x4a\xf7\xbb\x0a\x39\xa6\x5d\xac\x74\xff\xca\x49\x81\x74\x8b\xc3\x72\x97\x01\xc7\x3e\xba\xd1\x02\x66\x90\xd5\xcf\x35\x6e\xf2\x09\xb9\x2b\x12\xea\x48\x22\x0e\x5c\xba\xd4\xad\x08\x0d\x34\x46\x92\x9e\xaf\x91\xcb\xfe\x6a\x0c\x0c\x66\xf6\xb0\x49\x3c\xa2\xa7\xd0\x61\x32\x19\xce\x84\x13\xd2\xdf\x4f\xbc\x4e\x34\xd9\xd9\x41\x6c\x16\x83\xa7\x20\x8c\xf2\x34\x13\x30\x45\x31\xc7\x0c\xcb\x61\x32\xc2\x14\x0b\x97\xf4\xa8\xdf\xf1\xdb\xaa\x72\x74\xd4\x29\xc0\x9d\x3c\x21\xa1\x34\xee\x0c\x97\x77\x33\xfc\xb2\xdb\xad\x6c\x18\x2b\x72\x86\xed\xee\x32\x1e\xa9\x55\xaa\x9e\x5a\x5f\xd2\x1b\x9d\xb8\xb8\xd6\x9f\xd5\xaa\xd4\x1f\xd4\xd2\xa1\x6c\x29\x23\x4d\x37\x70\x8e\x55\xa9\x66\x1b\x74\x58\x2c\xbf\x62\x4a\x84\x3d\x52\xc7\x29\x0a\xb2\x4a\xf5\x03\x02\xea\xdd\x2c\x6f\x6e\x52\x9a\x7b\x6f\x11\x38\x39\x8f\xb5\x24\x69\xed\x4a\xf6\x16\xac\xc9\x1b\x33\xb2\xcd\x57\xab\x68\x9c\xd3\x74\x16\x11\x42\xc0\x83\x44\xa7\x7c\xee\x76\x59\xb7\x4b\x2b\xd5\xc4\x08\x03\x1a\xb6\x54\xaf\x72\x99\x2d\xde\x8a\x6c\x91\xdc\x26\x7a\x4a\x70\x95\x45\x7a\x42\x6f\xdd\x01\xaa\x3d\x56\xde\x10\x21\x11\x52\x8b\x07\x66\xe9\x35\x2f\xd1\xeb\xd2\xe6\xf3\x00\x89\x08\xa7\xe4\x09\x9e\x1b\xe5\x51\xae\xc5\x3a\x90\x45\xb2\x00\x18\xee\xbe\x37\x4b\x21\xce\xff\xcc\xa1\xa7\x20\x75\x19\x33\xbe\xfb\x19\xef\xb9\xd0\x4f\x93\x0e\x72\x7c\x4b\x39\x15\x89\xa4\xd7\x6e\xf5\xe2\xd4\xc2\x8d\x20\x35\x29\x80\xe8\x54\xfd\xa6\x0a\xff\xc7\x2d\x00\x60\x65\x9f\x35\x20\x83\xd1\x9e\x27\x14\x92\x05\x3f\xae\xb3\xd8\x56\x55\x14\x58\x09\x7b\x7f\x01\xff\x37\xa2\x70\x89\x85\x9a\xbf\xbe\x07\x71\x32\x24\x7c\xc5\x99\x92\xc8\x6e\x42\x53\xb4\x8d\xc9\x6d\x85\xcf\x54\x5d\xa1\x6c\x67\x96\x58\x96\x97\x58\x94\x96\x98\x37\x4f\x15\xef\xd9\xe9\x7e\x77\xf9\xda\x58\x46\x00\x80\xca\x34\x55\x9f\x94\xca\xf0\x0f\x05\x7d\x9d\x25\x53\x90\x6b\x43\x09\xbc\xfd\xb4\xd0\xd2\x94\x4b\xf6\x56\xad\x47\x27\x01\xf5\xc0\x08\xa5\x91\xfb\x33\xbb\x52\xaa\xde\xcf\x26\x41\xcb\x32\x6f\x5a\x9e\x29\x49\xfa\xfb\xf2\x5b\xeb\xa6\xbd\x2f\x2d\xfa\xa2\x20\x36\x67\xb9\xee\x92\x70\x1b\xac\xb0\x9c\x23\x98\x2a\xb5\x2a\x83\xe8\x7f\xa9\x1b\x47\x49\x11\xdd\xec\x5a\xef\x44\x9d\x9f\xe7\x94\x77\xc2\x7c\xb1\xf0\x36\xa7\x32\x0e\xae\x0c\x46\x43\xeb\x9d\x1a\x93\x7b\xc8\xf9\x2b\xbb\x5d\x48\xc0\x6d\xba\x8e\x9e\x24\x91\xbd\x3c\x65\x13\xeb\xc5\x35\xbc\xa5\x23\x6d\xa4\xd4\x55\xfa\x1b\x2a\x96\xbd\x7c\xce\x66\x32\x46\x2e\xa7\xf0\xd0\xd6\xb3\xbb\x37\xea\x00\x28\x27\xcb\x7f\xf2\x8c\xe0\xc0\x57\x63\x08\x5e\xf6\x16\xd9\x22\x46\xda\x1e\x99\x1b\xf4\xb8\xf0\x83\x3b\x8a\x30\x9c\x33\xce\x5a\xe1\xbe\x30\x74\x74\x47\xc3\x62\xe6\xa1\xef\x1a\xf6\xef\x8c\x04\x7d\x47\x6b\x0f\xf3\x08\x4b\x1d\x77\xf2\x54\x3f\x9a\x61\xf9\x4c\xf3\xdf\xf5\x2d\x74\x22\x1f\xf2\x60\xac\xeb\xd2\x0a\x74\xbb\xac\x3c\x0d\x36\x35\x35\x0c\xd1\x7a\x10\xe4\x98\xeb\xb9\x40\x85\x01\xf9\x2a\x87\x18\x5d\x52\x7c\xf9\x1c\xa5\x87\xd9\x9e\xfa\x32\x1f\x2a\xfe\x2f\x2b\x8a\xff\x9a\x8a\x5f\xab\x19\xf2\xc8\x44\x81\x5e\x57\x2d\x7f\x27\x87\x47\xdf\x8f\xcf\xce\x23\x84\x8f\xe8\x86\x08\x0b\x6d\xcd\x36\xee\xa7\x32\xb9\x25\x54\xbb\xd2\x2b\x7a\xba\xa6\x23\xb2\xdd\x5f\x97\x69\x76\xad\x17\x5e\xc5\x7e\x2d\x3f\xc1\x7e\x5d\x0e\xc9\x78\x43\x4b\xb7\x8a\x26\x1f\xe8\x35\x86\xe4\x6e\x97\xaa\x91\x14\xd6\x94\xfb\x0e\x6a\x5b\xad\xa2\x7f\xdd\xd1\xc7\x48\x9b\x7b\xbf\x77\xcf\xd8\x94\x72\xc9\xe4\x63\xa4\xcd\xb9\xbf\xb7\xce\x9f\xcb\xe8\x68\x80\x53\xcc\x14\xde\xd1\xc7\xd3\x4c\xd8\x14\xb7\x76\xe5\xc8\xda\x59\x64\xf9\xc9\xfd\x42\x3e\xd6\xe7\x11\xa4\xc0\xde\x3d\xbd\xcf\x4e\xb3\x46\xe3\x9e\x4e\x41\x4a\x3f\xca\x16\x4f\x59\xdd\x37\x7b\x5a\xe8\xbe\x39\x69\xc7\xf4\x4d\x6d\x1a\xf1\x9d\xe7\xc1\x4e\xeb\x6e\xf6\x16\x2c\xe0\x69\x26\x62\x81\xac\xe8\x6b\x7a\xa4\x9e\x64\x44\x82\x24\x2b\x50\x09\x6a\xd8\x56\xbe\xb3\x83\xc1\xed\x20\x33\xaa\x67\x8e\x55\xd9\x01\x33\x61\x37\xf8\x6c\x9d\xa3\x8c\xcb\x1d\x66\xe5\x10\x56\x72\x9b\x54\xef\xad\x53\x46\x02\xa9\x2e\x24\x66\x9b\x3d\x4e\x66\x22\xbb\x6f\xcc\x02\x69\x0f\x05\x3b\x10\xc8\xb7\x75\xf0\x92\x02\x85\xa8\x66\x00\xc6\x57\x3b\x2e\xa9\x4a\x4e\x35\x54\xa4\x62\xdb\x8d\xf5\x0d\x47\x1e\xab\x67\x1d\x9c\xac\x70\x41\xe1\x96\x07\xaa\xda\x63\x51\xf3\x91\xb2\x2b\xd1\xba\x89\x60\x16\x00\xef\x46\x14\xf1\xef\x14\xe1\xe3\xff\xa1\xd3\xfb\xac\x31\x83\x18\xe0\xe1\x92\xfd\x0c\x58\x17\x66\x35\x03\xe7\xeb\x67\xc0\x49\x97\x76\x0e\xb2\xd2\x1c\xa8\xf7\x76\x0e\xee\xe8\x63\x4e\x24\x36\xae\x63\x39\x11\x38\x6b\xf5\xfa\x31\xf3\x70\xc6\xa7\xf4\x63\x2b\x7d\x84\xa9\x21\x21\x83\xad\x08\xbc\xcc\x75\x8c\xa6\xb5\x9a\x50\x77\x17\x65\x64\x38\xc2\x19\xe9\xef\x67\xdf\xf2\xfd\xcc\x4a\x2f\x39\x5e\x12\x31\xcc\x46\x9d\x9c\xd0\xe1\x72\xa4\x3d\x53\x59\x7e\x2d\x92\xc9\x9d\x12\x2c\x63\xa4\xdd\x9c\x03\x47\xf2\x16\xff\x58\x25\x9a\xc7\xe5\x2c\x2e\x39\x5a\xad\x8c\xef\x2d\x24\x27\x32\x11\x6f\x39\xd2\x50\xc0\x9b\xea\xcc\x71\x34\x1c\x45\x08\x21\x6c\x00\xd1\xf3\x92\x43\x27\xac\xbc\xc0\x0c\xf3\x4f\xd8\x5a\x4e\xef\x89\xb9\x9a\x0f\x3b\x29\x38\x21\xdb\x7b\x6b\x37\x9d\xaa\x22\x4e\x48\xb2\x5a\xd9\xc9\xfe\x8e\xbc\x40\xdd\xae\x01\x66\x90\xae\x93\x14\xe1\x6c\x67\x47\xed\xc8\x3e\xf8\x22\xbc\xa4\x83\xe4\xc0\xf5\x57\x23\x27\x4a\x7d\x78\x9c\xd1\x58\xff\x2a\x36\x3a\xac\xaf\xdb\xbc\x9a\xac\x60\xf7\xf2\x75\x3c\xdf\xb2\xf2\x3c\xdc\xe8\xaf\xd7\x9c\x53\x58\xd8\xb3\xde\x00\x4e\xd8\xb3\x4a\xd0\x7c\x99\x4a\x7b\x56\x99\x93\x4b\xd4\x4e\x2e\xba\x66\x4f\x0f\xaf\x40\xe6\xd0\x55\xcb\x4c\x8c\x62\x4d\xc8\xea\x4c\x82\x38\x0b\x33\x70\x3f\x0f\xd3\x8c\x53\x35\x9b\x65\x1a\x63\xa8\xdb\x7d\x01\x79\xdd\x8c\xf0\x18\x90\x06\xb7\x13\x7d\x4a\xcd\xaf\xa2\xf3\xf9\xa7\xe9\x9a\xd3\xd2\xce\x8f\x3d\x2f\xf5\xfc\x54\xcf\x4b\x7b\xbd\xd2\xf3\x05\x92\x39\x0c\xaa\x76\x7e\xb2\xca\xf9\xa9\x16\xc2\xaa\x8b\xec\x09\x0a\xcf\x12\xc2\x81\x82\xda\xcf\xd0\x70\xb9\xa8\x9d\x5c\x38\x58\x13\x73\xb0\x32\x7d\xb0\x66\xf6\x60\x3d\xfd\x52\xcf\xcd\xcf\x0e\xca\x68\x13\x55\x7a\x2e\x28\xa3\x4e\xdc\xa1\xce\x18\x68\xfa\x35\x45\xf8\xcf\xff\x4b\x87\x30\xdc\xdb\xb4\x45\xed\x87\xfd\x91\x1b\xcc\x4b\x4a\x9e\x0c\x65\x36\x28\xd1\xfb\x05\x56\x8b\xda\x86\x3b\x5c\xe0\x77\x9b\xe5\x50\x41\x67\x81\x10\xfa\x36\x91\x73\xbb\xb3\xa1\x33\x1b\x82\x4a\x9c\xfc\x5f\xf1\xfe\xf6\xd7\x01\x57\x8d\x01\x8c\x6f\xdb\x7e\xc0\x09\xda\x1d\xb9\x05\x9d\xd9\x1d\x65\x2b\x54\x3b\x2a\x08\xcd\x2a\x85\x55\xf0\xc0\xdb\x3a\x88\xfe\xe0\x08\x72\x11\x83\x9b\xd3\x18\x32\x19\x72\x69\xbe\xaf\x04\x48\x09\xcc\x74\xa2\x63\x42\x48\x4c\x89\x92\x69\xec\x1d\x61\x3b\xb8\x23\x78\xc7\x52\xff\xb4\xce\xa6\x78\xf3\x51\xc8\xd1\xc1\x39\x2d\x9f\xf8\x31\x0f\xb9\x6a\xbc\xdd\x47\x68\x90\xf4\xbe\x3f\xbc\x1a\x9f\x1f\x5e\x9f\xbd\x3f\x19\x5f\xfd\xfa\xe6\xe5\xc5\xeb\x6e\xf7\x0f\xaa\x8a\xff\xa9\x8b\x57\x4a\x21\x34\x78\x4f\x83\xda\x83\x63\xb1\xfe\xe5\x33\x7a\xa0\xf8\x1f\xcc\xb3\xf3\x5e\x6d\x21\x60\xc5\x6d\x39\x8d\x0d\x1d\x43\x39\x3d\x9f\xef\x4b\xa5\x2b\x3b\x98\x9a\x8f\x62\x19\x94\x53\xdb\xe4\xd9\xcd\xa9\x8f\x83\xd6\xde\x84\x65\xdb\x1b\x73\xa5\xcc\x11\x56\xf2\x6b\xb4\x2e\xbf\xb4\xdb\x8d\x29\xd9\xde\x2b\x69\x57\xcc\x46\xe9\x18\xc8\x33\x69\xa0\xcd\xe0\x66\x68\x11\xc7\xe8\xc1\x2b\x3a\xf8\x89\xc6\xbf\x52\x83\x61\xf6\x2f\x6d\x16\xb6\xef\x7f\xa6\xf6\xb1\xbd\x3a\xda\x37\x3f\xd1\xf8\x47\x5a\x43\x30\xfb\x89\xc6\x5f\x51\x08\x83\x32\xac\xfa\xfb\xff\xf1\x7b\xdb\xef\x6c\x59\xd9\xd9\xa2\x1c\x33\x56\x09\x5d\x6c\x94\x17\x85\x91\x17\xed\xa6\x15\x0d\x1b\x56\x04\x92\x71\x70\x55\xb5\x9b\xc1\xf6\xb8\xbc\x79\x05\x3a\x38\xa3\xf6\x6e\xc5\xd1\xa0\x61\x23\x0b\x74\x70\x1c\x7e\xd2\xb6\x63\x05\x3a\x38\x0d\xbf\x7b\x4f\x83\xda\xc3\x5d\x0a\x6f\x5f\xd2\xff\xaf\x6d\xbc\x12\x5d\x54\x36\x99\xc5\x0f\xfc\x4b\xb6\x11\x75\xdb\xc8\xab\x8b\xde\x6f\x88\x17\xb0\xf7\x02\x1f\x28\xf0\xc7\x86\x12\x35\x29\xd7\x17\xfd\xb9\x1a\x63\x60\x00\x7c\x45\x00\x1a\xf2\x8a\x56\x24\x1c\xf7\xe6\xd7\xf2\x9b\x1f\xc1\x26\xea\xde\xfe\x48\x03\x38\x46\x0f\x38\xac\xd1\x17\x75\xc8\xb2\x63\x52\x7a\xf2\xf8\x52\x11\xb3\x7b\xea\x81\x85\xcb\x93\x07\x94\x7f\xbb\x64\x53\x13\xb9\x58\xf8\x36\xbf\x0a\xe3\x33\xdc\x7a\xca\xea\xf0\xc2\x48\x79\x58\x03\x57\xc1\x4f\x34\x48\x49\x51\xd4\xcc\x34\x25\x8b\x0e\x35\x3f\x71\x42\xa4\xba\xbd\x56\xc3\x34\x92\x83\x58\x3d\x27\x7d\x9c\xa1\x81\xfe\x73\x67\x27\xc1\xd9\x4e\x74\x43\x5f\xfc\xfb\xbf\xff\xfb\xff\xfe\xf7\xdd\x9b\x9b\x1b\xba\xfb\xcf\x7f\x7b\xd1\xdf\xfd\xff\xcf\x26\x37\xbb\x2f\xf6\xbe\xa1\xb3\x7f\x7e\xf3\xcd\x64\x92\xbc\x88\x76\x12\x54\x00\x3b\xfb\x65\x93\x16\x34\x37\x78\x52\xeb\x98\xdf\x1a\x85\x6e\xb4\x13\xd4\xa2\xf6\x83\xc6\x7e\x6e\x53\x8c\xda\x9a\x62\xab\xe9\x2c\x81\x5a\xfd\xa2\x59\xda\x0f\x14\xff\x46\x31\x95\xe4\x29\xea\x46\x83\xa8\x9b\xdc\x2f\xf6\x23\x1c\x7d\xab\xfe\x4e\xa5\xfa\xf3\x3b\xf5\xe7\xad\xfa\xf3\x1f\xd1\x3f\x06\x51\xf7\x8f\x65\x06\xcf\xff\xa1\x9e\xff\xaf\x8f\x2f\xfe\x5d\xfd\xf8\x4f\xfd\xe3\xdf\xfa\xea\x07\xd1\x3f\xbe\x39\xde\x8f\x0a\x2c\x25\xf9\x7a\xd8\xfd\xf6\xbb\xe8\x1f\xff\x49\x46\x5f\x63\x51\xfa\x79\x1b\xe4\x21\x97\xa1\x64\x2b\xd5\xad\xd3\xbd\x63\xb2\xa2\x84\x25\x84\x1e\x50\x12\x45\x83\x3a\x52\x36\x9c\xbf\x8e\x22\x11\x56\xbc\xe7\x17\x5a\x42\xd7\xc9\xaa\xd5\xb5\xeb\x74\x1b\x37\xb6\x9e\x76\x5f\x5f\x12\xd6\xf7\x1b\x5d\xad\xe2\xdf\x68\xab\x67\x69\xa2\xce\x9c\xdf\x68\x6f\xae\x0f\xdb\xdf\x0c\x11\x4c\xb2\xd4\x57\x08\x50\xdc\x86\xb8\xe1\x9e\x67\x08\xa0\x06\x4f\x08\xf1\x45\x3f\xd0\xde\x22\x11\xb9\x1a\xa3\xab\xcb\x1d\x6b\xf2\x20\x1a\x44\x03\xa9\x73\x2f\x49\xd2\xc7\xa9\xdc\xa4\xaa\x9f\x92\xa5\xb4\x97\x41\x13\x97\xbe\x8e\x60\x4b\xea\xf6\x06\x5d\x83\x22\x54\x93\xf5\x8a\x54\x5d\xcd\x1e\x1c\x44\x8f\x26\xe7\x3a\xe9\x6b\x06\x1f\x5d\xd2\xd9\x96\x21\x7f\x36\xf5\xe6\xb3\x40\x0c\x70\xc8\xe5\x3b\xd1\x56\x6c\xda\x9b\xa2\x08\x3c\x78\xfd\xab\x81\xad\x45\x77\x4d\x7b\xf4\xca\x40\xd1\x6d\x84\xa5\x89\x34\x34\x14\xe8\x08\x05\x5d\xd0\x44\xae\x56\x2d\x07\x9c\x3e\xfd\xe9\xce\x1e\x02\x78\x2b\x1d\xcf\x52\x04\xe9\xe0\x64\x89\x09\x4f\xa4\x56\x00\x42\x8c\xaa\x1a\xe5\x54\xfe\xdd\x41\x90\x61\xf0\xbb\x4e\xda\xdc\xb2\x6e\xb9\x4c\x26\x77\x70\xa7\x7c\xec\x5d\xa9\xbf\x11\x9e\xb7\x91\x8d\x63\x6d\xc9\xe4\x0e\x60\x77\xa6\xd2\xea\x11\x66\x79\x09\x34\x4e\x3f\xcd\x32\xa9\x1f\x5f\x51\xf3\x21\xcf\xa6\xb4\xf4\xe5\x3a\x6a\xbb\xa1\xb7\x8c\xd7\xe8\x08\x20\xe7\xb5\xf5\xa7\x31\x2a\xd8\xb7\x63\x40\xe5\xaa\x3e\x69\x12\x3f\xdd\x64\x4b\x3e\xcd\xad\xc3\xe8\x2c\x1f\x98\x4e\x3a\x75\xb9\xc6\x55\x86\x70\xb6\xd8\x5a\x0c\x29\x97\x54\x63\x0b\xc8\x26\x10\x88\xda\x37\xed\xf0\xf0\xae\x8b\xa7\x90\xb1\xc8\xe7\x0e\x90\xaa\x5c\x43\xa8\x51\x63\x29\x3d\x08\x2b\xb5\xd3\x8f\xcc\xcc\x4a\x90\xb4\xae\x8a\xde\xf1\xd8\xa3\x1f\x17\xe0\x92\xe9\x96\xcd\x18\xc8\x70\xf4\xf2\xdd\xab\xc1\xd6\x3d\xcb\x73\xc6\x6f\xb7\x04\x9d\x45\xc8\x6e\x65\x33\xd9\xd9\xfd\x3d\x93\x6b\x97\x23\x59\xc8\xa5\x68\x35\xde\x99\xd7\x97\x74\x96\xc7\x9e\x3e\xa0\x64\x9a\xdd\x5a\x78\x7f\x9d\x27\x00\x28\xac\x51\xf6\xb3\xf7\x01\x20\x42\x4b\xdc\x71\x35\x9d\x58\xb0\xcd\xdd\x94\x81\x6f\xd8\xba\x1c\xe1\x06\x67\x1e\x30\xd7\x14\x25\x76\xbb\xd1\xae\xcc\x16\xbb\x29\x7d\x30\x79\x75\x21\x54\x4d\xd5\x52\x49\x5e\xe6\xf7\x7a\x14\xed\xcc\xc0\xf3\x0b\xbf\xf8\xff\x49\xb4\xe3\x4a\x78\xaa\x06\x5d\x70\xe9\x33\x6b\x7e\x47\x58\x6a\x76\x12\xfd\x3f\x3c\x42\x9a\x97\xe6\x65\x8e\xcb\x66\x71\xdf\x3a\x3a\xe9\x19\xc8\xd9\x9f\x14\x92\x92\xef\x6f\x07\x4f\x8d\x5e\x28\x46\xfb\x28\x78\x0a\x26\x66\x55\x2f\x90\x69\x9d\x7a\xcd\x57\x16\x4f\x58\x02\x51\xd5\x56\xbc\x52\x97\x99\xde\x66\x6b\x4a\x85\xe0\xf4\xb6\x6c\xa4\x38\x48\x4e\x04\x15\x06\x7b\xaf\x0d\x25\x4c\x77\xc1\x38\xd8\x18\xbc\xca\x14\x00\x29\x3d\x5d\xeb\xcd\x2f\x10\x96\x07\xa5\x9d\x23\x91\x7e\x9f\x4c\xa7\xb1\x30\xde\x03\x40\x89\xe6\x49\x40\xc9\x8a\x54\x5b\xba\x80\x37\x19\xe3\xb8\xf3\x15\x80\xf1\xa2\x0e\x3b\x30\x56\x39\x57\xfd\x79\x36\xa5\x16\x56\x7b\x57\x75\x6f\x10\xed\xf0\x1e\x9b\x62\x86\xd0\x80\xf6\xa6\x34\xa5\x92\xc6\x1c\x99\x8c\x6e\xa5\x72\x8d\xba\xf3\xca\x38\x41\x6d\x0e\xa1\x91\xcc\x44\x59\x42\x8e\x59\x40\x35\x48\x88\xf0\x00\x08\x39\x11\x30\x27\xd6\x93\xcb\xb4\x63\xb9\x57\x2c\x5c\x5e\x54\xf3\xe6\x25\xb0\x1e\xf5\x7c\x42\x6a\x7b\x3b\x77\x19\x0f\xd9\x74\x40\x75\x5c\x10\xd7\xe9\xfb\x98\x3a\xc9\xf2\x41\xe6\x55\x73\xa6\x0b\x83\x04\x3b\xb8\xfe\x25\x36\xec\x39\xc5\x16\xe6\x6d\x30\x29\x82\xf1\x37\x26\xd2\xb0\xe7\x88\xad\x26\x40\x4c\x56\xfb\x68\x46\x85\xa0\xa2\xe7\x43\x24\xb4\xa3\x50\x50\xab\x1e\x53\x73\x04\xab\x27\x63\x6a\xd8\x6e\x85\x7a\xf5\x43\x97\x4d\xf1\x49\x43\x23\xd9\x50\x3c\xd9\x2b\xfd\x8e\x11\x9e\x59\x04\xde\x81\xec\xb9\xbf\x63\x84\xd3\xc4\x3d\xb6\x7f\xc6\x4e\xab\xb3\x68\x95\x1a\x5a\xe0\x3c\xb0\x08\x20\x06\xc0\x21\x4e\x7b\xd6\x11\xe3\xe3\xc7\x88\x18\x4e\x7b\x17\x3f\x9f\x9f\x5c\x8e\xbc\xbe\x1a\x60\x59\x09\xc3\xbc\xc7\xf2\x00\x4a\x97\x30\x87\x85\xdd\x00\x70\x5f\xfe\x16\x73\x8d\xe4\x9d\x3d\xd2\xa9\xf3\x62\xc9\xc9\x70\x84\x6b\xd3\xab\x04\x3c\x0f\x22\x1f\x4b\x92\x38\x61\x29\x9a\x65\xd9\x4d\x22\x06\x37\xc9\x9f\x4a\x90\xb6\x3f\xc1\xe9\x0d\x79\x59\xfa\x34\x13\xef\x2e\x5f\x93\x44\x76\x00\x3b\xb6\x84\xa7\x65\x84\xe7\x77\x97\xaf\xd1\x0f\x94\xbc\xbb\x7c\x8d\x6b\xe5\x72\x5d\xee\x29\x84\xb2\x35\xc5\x34\xb5\x84\x38\x5c\xdb\xe5\x57\x3d\x13\xb4\x89\xe4\x5c\x64\x1f\x40\x34\x3c\x11\x22\x13\x71\x74\x94\x2d\xd3\xe9\x16\xcf\xe4\xd6\x8c\xf1\xe9\x16\x44\xeb\xa9\x6e\x6c\x29\xf1\x5d\x51\xcc\x3d\x9d\xcc\x13\xce\xf2\xfb\xad\x59\x26\xe0\xcd\x55\xc2\x99\x34\x08\xcd\x11\xea\xfc\x40\x49\xb9\x91\x38\x5a\x8a\x14\x32\x02\xd4\x46\x50\x14\x3a\xd9\x79\x92\xe7\x54\xc8\xeb\xb9\x5a\x0c\x26\x75\xde\x84\xa9\xd6\x60\x9b\x54\x16\xc7\x27\x2f\xdf\xbd\x1a\x5f\x9e\x9c\x1f\x9f\x5c\x8e\xaf\x2f\x4f\x4e\xba\xdd\x98\xf7\x74\xc6\x7c\x7d\xf6\x5e\x0b\x4a\x81\xa1\xce\xe5\x3a\xac\xb5\xb5\x40\x1b\xde\xfe\xbe\xde\x82\x59\x19\x48\xb3\x3b\x0a\xef\xc9\xac\x09\xfa\xa8\xe9\x73\x16\x82\x27\x28\x0a\x0e\x00\xf1\x1b\x6d\x43\xc6\x11\x48\x7d\x6b\x13\x08\x9d\x29\x9e\x94\xa6\x16\xd5\xdc\x97\x0b\xcc\x9e\x21\xb1\x6b\x07\x5d\x2b\x6e\xb7\xd4\x12\x62\x73\x61\x51\x6a\x4f\x07\x7b\x7f\x61\x73\xe5\x4a\x1a\x5a\x9b\xb2\x69\x93\x50\x48\xed\x46\xd5\x78\x20\x35\x91\xbb\x9d\x6c\xa0\x67\x15\xba\xd1\xe5\xad\x7e\xb8\xc2\x73\xfa\x38\xec\x38\x7c\x19\x60\xa1\xa8\xd6\xeb\x22\x66\x70\xe6\x37\x30\x94\x4e\xdb\x0b\x75\x36\x7b\x54\x91\xfe\xbe\xf0\xde\xf3\x62\x67\x07\xc9\xa1\x18\xf9\x71\xc3\xb5\x91\x96\xd1\x6d\xee\x99\x0c\xfb\x36\x63\x3c\x49\xd3\xc7\xa7\xa6\x61\xed\x15\x9f\x38\x47\xba\xfa\x78\x2d\xa6\x4a\x54\x29\x14\x55\x31\x56\xd8\x2c\x6e\x6b\xb6\x1c\x1a\x51\xa9\xa8\x53\xe7\x54\x09\xff\x87\xdc\x4a\x26\x13\x9a\xe7\x5b\xf0\xf5\x96\x16\x49\xb6\xa4\xa0\x74\x2b\x5b\xca\x9c\x4d\xe9\x56\x36\xdb\x92\x73\xba\xc5\x78\xae\x0e\xc2\x4c\x6c\xc5\xf5\x96\xb7\x66\x69\x72\xbb\xc5\xf2\x2d\xeb\x7a\x8a\x22\x64\x81\x5f\x66\x21\xb0\x3a\xea\x94\x71\xd6\x17\x3a\x92\xe2\xbe\xfd\xe2\xb9\xee\x9e\xb8\x10\x54\x9d\xaf\x87\xe2\xb6\x29\x47\x96\x3d\xe6\xa7\x6c\x7a\x14\xaa\x67\xca\xe8\x0a\xc1\xb5\xeb\x35\xc4\x26\x36\xbc\x3e\xaa\xa1\x40\x37\x5d\x05\xdd\xe7\x7a\x4b\xb6\xd6\xd6\x84\xf1\x50\xd6\x3a\x3f\x04\xba\x26\x97\x8a\x17\xe4\xb8\x9d\x68\x10\xed\xd0\x9e\xbe\xb0\x14\xc5\x1a\x8c\xfc\x7b\x3d\xb3\x8f\x92\x3c\x4d\x1f\x79\x72\xcf\x26\xba\x43\x00\x19\xa0\x1f\x5c\x27\xb7\xea\x57\x30\x8b\xea\xa7\x26\x4b\xf8\xd5\x46\x68\x3e\xf0\x11\x92\x74\x6c\xef\x61\x13\xd8\x60\x7f\x1a\xd2\x4e\xd2\x94\x8a\xa0\xc1\xab\x49\xb6\x80\xcc\x01\x41\x86\x8f\xd6\x36\x74\x1d\x67\x56\x4e\xdc\xee\x17\xf8\xf6\x4b\xb5\x27\x9f\x85\xac\x54\xd7\x35\x04\xfe\x6e\x84\x9b\xc5\xd0\xf1\x4b\x19\x01\x99\xb3\x53\x7a\x4a\x32\xa8\x3f\x21\x4f\x39\x4d\x67\x83\xdf\x1c\x3e\x76\x6f\x92\x71\x29\x32\x35\x4b\x08\x87\xa2\x15\xc5\xc0\x78\xd8\x9f\x10\xab\x75\xdf\x1b\xfb\x44\xb3\x10\x5a\x8d\xec\xed\xa1\x67\x13\xa8\x3d\x48\xf0\x65\x59\xc7\x1d\x9e\x12\xf3\x35\x31\x19\xc9\x2d\x19\x61\x5a\x67\x55\xba\x87\xb6\x04\x7e\xd2\x90\x14\xb6\x35\x28\x6f\x5f\xea\x0b\x06\xc8\xf7\xb3\xde\xc9\x9b\xb7\xd7\xbf\x8e\x0f\x2f\x5f\x5d\x79\x11\x5f\x4b\x57\x5e\xce\x37\xc9\x49\xf4\xac\xe7\x01\x98\xda\x92\xe4\xdd\x6e\x6e\x52\x06\xfa\xbf\xb4\x60\x8a\x53\x0f\xb5\x56\x7a\xa1\x06\xbd\xec\x76\x97\xdb\x84\xa4\x7a\x55\x26\x24\xc5\x53\x32\xe9\xdd\x67\x4b\x2e\xdf\x66\x8c\xcb\x4e\xd2\xa3\x90\x06\x8f\x3c\xf9\x87\x83\xe9\xda\xa1\xeb\x02\x76\xe8\xfa\x97\x19\xfa\x74\xdd\x70\x27\xf5\x91\x16\xed\xcd\xd8\xfa\xc1\x85\x7d\xd7\xa7\xc1\x33\x4b\xe4\xe7\x56\xd8\xfb\x4a\x78\x7b\x0a\x49\xc8\x37\x2b\xdd\x65\xa8\x70\xfe\x71\x89\x41\xfd\xaa\xb2\xa5\x86\x1b\x54\x2f\xc9\xf5\x57\xce\xfa\xf9\x34\x4f\xf8\x34\xd5\xcd\x41\xea\xcd\x18\x61\xed\x21\x7e\x0d\xc9\x40\x64\x2f\xf8\x55\x98\x96\x8e\x1a\x53\x10\xb9\x9d\xfa\x28\xcd\x77\x57\x34\x9d\x35\x7b\xbe\xa8\xed\x62\x3e\xba\x4e\x1a\x8c\x25\x5b\x6d\xb4\x7e\x50\x43\x72\x1a\x2c\x7b\x47\x17\xe7\x57\xd7\x87\xe7\xd7\xe3\xeb\xc3\x57\x46\x30\x6a\xe6\xfb\xc6\x34\x69\xb7\x60\xbc\x56\x86\xa6\xbd\x60\xe3\xd6\x56\xd9\xb5\x01\x95\x62\x6a\x88\x4a\x89\x72\xcf\x2c\x66\xc9\xd0\x94\x7e\x5e\x19\xb3\x6b\x25\x42\x2d\xc0\xb5\x9f\x3d\x20\x63\xaf\xb5\x4d\x3c\x7f\x48\xae\xa0\xfe\x7c\xd3\x68\xec\xe7\xc8\xca\xb0\xcd\x87\x2a\x2c\xd5\xff\xec\xd5\xb9\xa5\xf2\xd8\x25\xbf\x6a\xda\x07\xad\x44\xfe\x64\x24\xd9\x50\x3c\x5c\xdf\x8b\x40\x43\x1c\xd3\xe7\x0f\xb8\x54\xec\x99\x0b\x58\x2e\x63\xa8\xa5\x28\x06\x06\x48\xad\x88\xef\x25\xc2\x37\x12\x2e\x9c\xb7\x12\x8f\xab\x8b\x5a\xc1\xd7\xbb\x91\x36\x7c\x07\x4e\x54\xe3\xc0\x62\x32\x72\x11\x19\x98\x60\x3e\x48\x2b\x35\x9e\xb4\x5a\xc1\x7c\x38\xa0\x51\xde\x07\x99\x7f\x74\xcd\x2e\x86\xc6\xaa\xd9\x0d\x72\xa6\xf6\xa9\x37\x9c\x41\x10\xe3\x17\x35\x4f\xf2\x9f\x45\xb2\x58\xd0\xa9\x95\x31\x99\xa9\x46\x49\xf7\x97\x74\x66\x32\x54\xb4\x3c\x52\x75\x97\x92\x5b\x80\x3b\x7b\x7f\x10\xa6\x81\x10\x01\x92\xb4\xc8\x32\x09\x35\x00\xd0\xa0\xc4\x74\xad\xa7\xcd\xb4\x7a\xfb\x2b\x79\x54\xb8\x81\x5a\xfd\x7a\x30\x19\xda\x21\xb5\x74\x09\xd5\xa1\x91\xec\xf6\x96\x8a\x38\x0a\xd6\xd8\x8c\x1b\xb4\x14\xa5\xf7\x47\x29\x4d\x84\xa6\x8b\xc8\x46\x8c\x35\x42\xc3\x51\xd4\x11\xda\xb3\x7c\xde\x9b\xa8\x42\xe6\x8d\xfa\x08\xc5\x02\x5c\xf1\xcc\x9b\x4a\x39\x54\xc8\xa6\xbb\x60\xa8\xcf\xb6\x2b\x16\x4e\x82\x85\x2c\x75\xab\xe9\xfc\x9b\xfc\xfa\x7e\x90\x55\xd9\xfc\xa2\x6c\xe1\xa3\x1a\xa1\x32\x30\x3c\x5f\x95\x3e\x00\x08\xba\x1c\x34\x57\xc3\xfe\x48\x91\xb2\x8d\x51\xc3\x7b\x41\x80\x1b\x3a\xd0\xf5\x0e\xfb\x23\x34\x30\xf0\x98\xb0\xa6\x1f\x25\x3e\x94\xf8\xae\xf9\xc0\x06\xaf\x97\x8b\x59\x1c\x0d\x22\x70\x89\xda\x85\x2a\xcd\x35\x70\x48\x31\xc5\xdb\xfd\x51\xc7\x86\x4c\xe4\xcb\x1b\x6d\x5b\x56\x03\x47\x80\x61\xef\x1f\xc9\x1d\x87\x45\x3b\x54\x5b\x63\x7b\x6f\x54\xe0\xb7\xb2\x26\xf6\x7a\x87\x0b\x3e\xec\x8f\x70\x42\xf8\x70\x6f\xd4\xe1\xc3\x17\x3a\x64\x9e\x4d\xd5\x50\x13\x13\x49\x50\x4a\x82\x90\xa1\x4e\xc9\xb8\x9f\x77\xbb\x71\x4e\xa4\x8d\x89\x3e\x9b\x22\x9c\x93\x75\xa8\x98\x39\xc2\xc0\x14\x58\x2f\x0f\xa1\xfc\x54\x9b\x38\xc7\xdb\x7d\xac\x53\x77\x82\x11\x9c\x64\x7e\x72\x7a\x11\xfa\x6e\x77\x0f\x4f\xc8\xf2\xe0\x4a\xc6\x02\x67\x36\x4a\xbf\x17\x21\x34\xb8\x80\x47\xa8\x73\xd3\x3b\x79\xf3\x32\x4c\xee\x3a\x3e\xbb\x1a\xbf\x3f\xbb\x3a\x7b\xf9\xfa\x04\x92\x06\x3e\xa6\x14\xc6\x16\x60\x2c\x7e\x54\xbc\x69\x02\xdb\xf0\xa3\x8c\x27\x18\xea\x8a\x58\xfe\x9e\xe5\xec\x26\xa5\x11\x52\x3c\x1e\x57\xfa\x9b\xe0\x09\xde\xde\x33\x9d\xc5\x97\x92\x30\x1d\xb2\xb9\x48\x93\xc7\xc1\x16\xcf\x38\xdd\x8f\x36\x75\x27\xfe\xd8\x7a\x13\xda\x18\x8c\x53\x03\x9f\x65\x3d\xd7\x63\x22\x30\x0b\x58\x1f\xc7\x6c\x1d\x3e\xbc\x04\x64\xf8\x67\xc4\xf1\x6c\x86\x66\xb6\xc0\xcc\x41\x94\x9f\x43\x6b\xb6\x9d\x2b\x01\xc6\xef\x85\x58\x10\x1a\x1d\xc2\x05\x12\xec\x44\x5b\x95\xf9\xb4\x94\x07\x4e\x21\x07\x4c\xc6\x02\x0d\x2c\xa2\xfd\xd6\xa5\x4b\x14\x93\x4c\xe6\x74\xea\xe1\x7d\x11\xde\xb0\x0a\x87\x92\xe8\xac\xc9\x69\x5a\x8b\x35\xb7\xf7\x43\x35\x86\x0e\xaf\x90\xac\xa6\x26\xed\x5c\x7c\x9f\x2c\x50\x5c\xa7\x9c\xa6\xe8\x2e\xa6\x3e\xbe\x52\x65\xc1\x85\x4f\x73\x09\x88\x7f\xb7\xe4\x54\x7a\x3f\xa8\x57\x01\xf0\x01\xf4\xe0\x52\x03\x22\x15\x36\xe8\xb3\xbe\xcf\x6d\xf7\x85\xdd\x2c\x83\x08\x10\x37\xf5\xa6\x67\xc3\xbd\x11\xce\x09\xb3\xdb\x1e\x30\x36\x51\x75\x94\x13\x1d\xd0\xbd\x6e\x4f\x27\xc8\x6d\xdc\x8e\x0b\xc4\x5d\xc2\x55\xaf\xbe\x7f\xd3\x83\x70\xeb\x0e\x86\x23\x3c\x25\xa9\xda\xd3\x12\x4f\x60\x23\x03\x93\x59\x92\xc0\xe7\x4b\x6d\xcd\x23\x19\x4f\x71\x7a\x30\x19\x4e\x7c\xe8\xee\x20\xd3\x61\x20\x6f\xd4\xbb\x04\xe7\x08\xb7\x74\x7e\xe9\x27\xb7\xc0\x47\xeb\x76\xdd\xb3\xa0\xb8\xed\x9e\xe3\xbd\x45\x22\xe7\x0e\x89\x5b\xef\x28\xde\xf4\x7a\x9a\xe4\x6a\x4b\xfd\x49\xa7\xe0\xaa\x0b\x42\xc3\x97\x42\x76\xb7\x6d\x39\xd8\x59\xe0\xe0\x5c\x52\xc0\xaa\xbe\x94\xa2\x49\xca\x7d\x5a\xad\xe2\x86\xa7\x8a\x69\x8c\xfd\x33\x14\x26\x6b\xa0\xab\x15\xb4\x72\xe0\x5c\xb8\xbc\x58\x58\xdf\x86\xf8\xcd\xa7\x30\x3b\xef\xf1\x27\x00\xa5\x4f\xe7\xb3\xf2\xb9\x0a\xc1\xd7\x5f\x3f\xdc\xc8\x17\x25\x24\x6f\x00\xa6\x38\x4b\xd2\xfc\xd1\x31\x44\xbd\x5e\x7f\x35\xe7\xb3\x1c\x4f\x37\x6b\x23\x1b\xa0\xe5\x4e\x39\x1a\x24\x46\x07\x72\x20\x5a\xe6\xcb\xcb\x2a\xbf\xcb\x50\x5a\x00\xb4\x5d\x5c\x4e\x37\xd5\x94\xfb\x8b\x35\x3d\xed\xf0\xe1\x03\x1d\x11\xe6\xb4\xeb\x3a\x6e\xd0\x69\xd7\x5d\xf8\xa0\x76\xbf\xc4\x39\xd1\x92\x51\x82\x20\x9c\x30\x19\x75\x1a\xbc\xec\x96\xdd\xee\x72\xf8\xd3\xe8\x40\xbd\x27\xcb\x41\x0e\x90\xc5\x31\xfc\x52\x9b\xf3\x58\xc6\x1a\xdf\x83\xa9\x27\x39\xe6\xf0\x99\x0b\xf8\xeb\x81\x68\xa5\x36\x09\x9c\xf9\x67\xb2\x96\x21\xf1\x34\x42\xf8\x78\xcd\x25\x40\x8b\xff\xc3\x79\xef\xcd\xbb\xeb\xc3\x97\xaf\x4f\xc6\x47\x27\xaf\x5f\x8f\xc8\xb6\x16\x0c\x87\x67\x72\x64\xaf\x03\x26\xc1\x4c\x53\x1a\xbc\x16\x8f\x20\x55\x7a\xf8\xe3\xc8\x85\xa0\xe3\xf3\xda\x0d\x07\x4e\xab\xa7\xc2\x63\x03\x6d\x31\xbe\x45\x91\x99\x7d\xdf\xc2\x3c\xc9\x2f\x3e\x70\xeb\xd5\x6e\x8d\xa4\x1c\x75\xbb\xd2\x71\x49\x8e\xbe\xed\xc3\xdc\xf1\x11\xa1\x80\x97\x6e\xfc\xe7\xb6\x49\xb3\x87\xa3\x69\xe5\x96\xca\xa0\x6e\xed\x9b\x9c\x5b\xe6\xdf\x87\xae\x39\x2a\x69\xfc\x36\xa6\x68\x9f\x7d\x6b\x51\x11\xf6\xd9\xce\x0e\x0a\x7a\x35\x64\x23\xd7\xb1\x21\x1b\x41\xdf\xd4\xbf\x8e\x15\x08\x6d\x26\x7c\x2d\x6b\xe9\x4b\xcf\x63\x84\xf0\xa9\x24\xc3\xd1\x7e\xdc\xc7\x13\x7d\xc1\x3c\x05\x5c\x41\x14\x9f\x9a\xc4\x66\x7f\xb6\xb0\x06\xfe\x25\x1a\x61\x6e\x35\xc2\x8c\xf0\xfa\x85\x8a\xb5\x68\xd1\xca\x9a\x32\xb5\x6a\xea\x8f\x92\x9a\x8c\x56\xd4\x64\x41\x16\xd6\x6a\xa8\x89\xda\xb3\xb0\x57\x35\x60\x22\x48\xeb\xfa\xcf\xf3\xe4\x9e\xea\xc8\xa6\xa9\x59\x11\x0a\x8e\xd7\xa5\x94\xac\x02\xb9\x5f\xdb\x90\xa0\x55\x6f\x59\x6f\xc9\x77\xba\xc2\x68\x87\xa3\x8e\x24\x99\xce\xbf\x2a\xfd\x27\xaf\x25\x72\xf6\xf1\xed\xd3\xd8\xe1\x4a\x6d\x89\x8e\x24\x4e\x78\x92\x31\x43\x6a\x20\xb7\x54\x1e\x87\x66\x86\xc6\xfb\x8a\xbf\x6b\x1a\xde\x16\x0c\xdf\xba\xad\xb8\x9b\x74\x45\x05\xd9\xaa\x06\xd9\xa4\xbc\x08\xbc\xf1\xb4\x5b\x90\x5d\x22\xde\xa2\xcc\xe4\xb5\x55\xd2\xfa\x47\x35\xf1\xeb\x87\xe5\xb9\x74\x4d\x21\x70\x00\xee\x28\x06\xad\x67\xb5\x8a\xa6\xec\x21\x32\x87\x1e\x6b\x57\x96\x86\xca\xd0\x30\xa3\xbb\x2a\xd4\x68\xfc\xb2\x28\xf2\x26\x2f\x8e\xea\x47\x1c\x8d\x41\x41\x3d\x1e\x47\x41\x16\x1d\xfd\xda\x69\x94\x95\x60\x09\x11\xb6\xf6\x5b\x9c\x91\x73\x19\x73\x3c\xf4\xa5\x47\xde\xc9\xc5\x81\x88\x0c\x4e\x25\x68\xaa\xa7\x35\x00\xc0\x0c\x3b\xbd\xbe\xf1\x9c\x4f\xe0\x50\x70\xf7\x73\x30\x7c\x6a\x6d\x48\xaf\x8a\x4a\xe2\x9d\x7f\x73\x2d\x2a\x84\x69\x7f\xec\x95\x39\x8c\x91\x2d\x65\x5e\x33\x1c\xce\xb0\xb1\xe5\x7e\xbc\x24\x4f\x05\x1a\xe6\xa3\x72\x35\x5e\x9d\x9e\x90\x65\xd9\x59\x34\xc1\x8d\x33\x64\xc0\x62\x00\x19\xac\x1a\xd7\xde\xed\xe6\x1e\x2d\xa6\x16\xbf\x9b\x92\x37\x89\x9c\xf7\xee\x19\x8f\x3d\x92\x46\xc3\x98\x3a\x09\x79\x2a\x9e\xd7\x17\x77\x6c\x4c\x48\x7f\x7f\xf2\x6d\xba\x3f\xb1\x47\xf0\x8c\xe4\xc3\xc9\xa8\x93\x0c\x67\x95\x11\x27\x32\x9e\xa0\xa2\xa8\xaf\xe2\xa3\x33\x64\x5c\x1e\xfe\x6a\x16\x34\x01\xd2\x6f\xb1\x7e\x61\x86\x33\x7b\xde\xf3\xde\x03\xa3\x1f\xb0\xba\xcb\x97\x17\x57\x9d\xfc\xd5\xae\xe3\x94\xfc\x2e\xe3\x25\xda\x8f\xab\xea\xf6\x80\x60\xd9\x34\x42\xa0\x2a\x71\xba\x01\xc8\xf9\x8c\x0a\x25\x57\xa5\x08\xa7\x36\xdb\x21\xa3\x1f\x48\x82\xd3\xe1\x2d\x1d\x91\x0c\xa7\x16\x37\x30\x30\x29\x79\x53\x48\xb7\x1b\xa7\x86\x85\x12\xff\xd4\x66\xed\xc9\xad\xb4\x93\x22\x3c\x23\x1b\x8c\x6e\x41\x9e\xe8\x97\xea\xee\xd1\xd1\x53\x40\x26\x58\x9f\xb8\x09\x80\x19\xcc\x7b\xc9\x74\xea\x12\x63\xa8\x85\x9c\x20\x3c\xf1\xda\xb1\x0a\xde\x93\xd1\x8e\x4d\x49\x14\x6d\x13\x32\xb1\xbc\xa2\x33\x5d\xad\x62\x5a\xf5\x04\x99\x94\x95\x6c\x56\xbf\x86\x27\xbd\x71\x09\xab\x0c\x10\x83\x03\xd5\xdc\xfa\x6a\x4a\x38\xf2\x91\x01\x78\x5a\x80\x2c\x76\x22\x63\x8a\x27\x78\x89\x67\x78\xea\x73\xb1\x84\x8b\xa6\x2f\x4c\x6a\xdd\x16\x5e\xc7\x69\xbf\x50\xa2\xa0\xfd\xa2\xa1\x1f\xd3\xf6\x11\xad\x63\xfb\x2d\x36\xb5\x85\xb5\xa9\x05\xeb\xf4\x3c\x73\xda\xa4\xd9\x86\x86\x17\x86\x4b\xb7\x9b\xaa\x8c\x4a\x56\x7d\xd7\xee\x6f\x60\xa2\xbb\x34\x0f\x0e\x8f\x43\xb8\x88\x98\x39\xc3\x19\x29\x1d\x68\xc0\x35\x4d\xf5\xfb\x40\x56\x79\x45\x73\xca\xb1\x34\xda\xd1\x9c\xca\x92\xd6\x54\x62\xae\x17\x71\x49\xb4\xb8\x5c\x42\x2b\xc6\x29\xe1\x3d\x8f\x13\x8e\x27\xe1\x4f\xfb\x91\xb5\xae\x5a\x0e\x15\x37\x69\x04\xfd\xa5\x60\x38\x02\x46\x60\x2f\xda\xfb\xbb\x7b\xdb\x84\xe4\xfb\x86\x15\x13\x39\xcc\x47\x38\x25\x77\x8a\x05\xa8\x1b\xfd\x70\x6f\xb4\x0f\x5a\x4b\x7f\xdf\x9f\x28\x12\xca\xb4\xf2\x76\x82\xf0\x5b\x70\xe6\xc5\x1c\xa7\x98\x21\x84\xf3\xdd\xdd\xc2\x6a\x3a\x03\x1d\x81\xe2\x18\xba\x8d\x29\x11\x9e\x6d\x1c\x04\x7f\x0f\xca\x91\x6a\x02\x75\x9a\x14\x89\xeb\x94\x15\xd3\x40\xd3\xb2\x5e\x33\xe4\x24\xaf\x43\xd9\xed\x56\xfb\xaa\x95\x3f\xa8\xdb\x3d\x94\x3d\xa3\x3d\x32\x43\x64\x8a\xc3\x49\xbc\xc4\x1c\xe7\x58\x04\x1a\x91\x29\xe1\xc1\xa0\x78\xeb\xa0\x38\xea\x88\xcf\x1f\xd4\x06\x75\x57\x69\x50\x41\xdf\xa5\xe9\xae\x5a\x17\xa3\x1d\xd6\x3c\xe3\x48\xc6\x0c\x04\x15\x97\x10\xb4\xde\x3d\xa3\x66\x59\xf8\x99\x4d\xbb\x5d\x7b\x1c\xaa\xbf\x9a\xd1\x8e\x3e\x5d\xd3\x44\x83\xc5\x43\x08\x4f\x14\xc7\xb1\xad\x4c\x9a\x5b\xb9\x96\xb1\xc4\x39\x60\xaa\x82\x27\xf6\xa7\x37\x6a\x40\x47\xd5\xe1\x10\x05\xf3\x1c\x25\x82\x25\x97\x59\x4a\x23\xc6\xb7\x78\xb7\x5b\xad\x59\xa8\x57\xf8\x42\x5d\x7f\xfd\xa7\x41\x79\xbe\x96\xcb\x67\x55\xee\xca\xd7\x72\x79\xc3\xb2\xd6\x9a\xc2\x1d\xa7\x82\x5c\x48\x12\x3f\xd3\x38\xfe\x29\xd6\x57\x2f\x67\x37\xca\xd8\xe0\xbb\x2e\x9a\x84\x6d\x79\xd0\xac\x9e\x1e\xde\xd3\xd1\x08\x0d\xe0\xdf\x12\x5b\xde\x20\xc3\x97\x3b\x5d\x99\xca\x58\x56\xa7\x9e\xf1\xe3\x8b\x37\x11\x08\x1a\xc1\xc1\x5e\x99\xe3\xca\x5b\x7b\xb8\xc1\xa0\x1b\xf4\x07\x4d\xf7\x25\x33\x05\xdc\xfc\xe1\x92\xd2\xb3\xf2\x69\xb1\xce\x03\xa8\xdb\x65\xed\x76\xf6\x60\x4d\xc5\x27\xc8\x3f\xef\xa4\x3a\x7c\x44\xb7\xbb\x5d\xc9\x7d\x6f\x92\x0b\x22\x7b\xf5\xfc\x5d\x2a\x96\x5b\xee\x3c\x69\x32\x70\xea\xac\x5c\x7d\x1d\x47\x65\x94\x0d\x8c\xe6\x71\xe6\xde\xed\x55\xa6\x33\x48\xb6\xd4\x30\xd5\xa1\x84\x55\xb0\x86\x05\x2d\x6d\x0e\x5d\x57\xb9\x9a\x50\x1e\xb1\xdb\x65\x8d\x3b\xc2\xdf\xb4\x39\x1a\x3c\x07\x3f\x8b\x7e\xeb\x33\xb7\x9e\x3e\xff\x5b\xfd\x13\xbc\x8f\x72\x31\xa0\x05\xe6\xe0\x36\xe0\x15\x9c\x2f\x4b\xf1\xc4\x3d\x4f\xb0\xc7\x54\x26\x2c\xcd\xe3\x27\xa6\xdd\xe1\x75\x1b\x83\xed\x7e\x11\x58\x6a\xdf\x7d\x6a\xe9\xbd\x42\x9b\x17\xbf\xaf\x3b\x55\xf6\x4b\x4e\x95\xfd\xb2\x53\x65\x3f\x74\xaa\xdc\xee\x57\xdd\x27\xfb\x65\xf7\xc9\x7e\xc5\x7d\xb2\xbf\xce\x7d\xd2\x7d\x5d\x72\x94\x7c\xaf\xfd\x2a\xfe\x94\xf8\x8f\x66\x13\xae\x0e\x18\x4a\xee\x9d\x27\x45\xf9\xe6\x66\x9d\x1e\xb4\xa6\xc4\xba\x3d\xb8\x68\x45\x5e\xf6\xbe\x78\x2f\x0d\x70\x34\x57\x67\x8d\x77\x1e\xc3\x09\xc9\x0e\xb2\x50\x9b\x62\x33\xd6\x69\x4f\x0e\xff\x9c\x24\xcd\x2d\x80\xd3\x05\x0b\x1d\x3f\xb4\xeb\x22\xc5\xe5\xfe\x0e\x24\x36\x4a\x9d\xc0\x0b\x8e\xe3\x50\x65\x32\xf8\x5e\x96\xb4\x3c\xea\x7a\xfb\x73\xbb\x61\xe1\x59\xe9\x3b\x43\x27\x91\xcf\x4b\xdb\xd9\xa0\x4a\x2c\xd9\x05\x4a\x0a\xb2\x92\xbb\x06\x6a\xd5\x94\x79\x15\x64\xb3\x7e\xab\xaa\x85\xdc\xe8\xe2\x5a\xf1\x13\xc9\x3e\xed\x7a\xcc\xdc\xf5\x98\x19\x37\x58\xb8\xe0\x32\x77\xc1\x4d\x9a\x2e\xb8\xac\xe5\x3a\xc8\x3e\xed\x82\xcb\x9e\x71\xc1\xcd\xfd\x05\x97\xe9\x8c\x3e\x19\x4e\x9e\xa5\x76\x6c\xb9\x7f\xe6\xcf\xb9\x7f\x36\xfb\x8e\xb2\x96\x0b\x68\x0e\xb6\x9e\x3f\x25\xc2\xaf\x36\x39\x74\xf7\xd7\x38\x74\x87\x39\x6b\xfe\x2e\xde\xf3\xeb\x26\xec\x01\xbf\x6b\xa8\xc1\x4f\x82\xb0\x70\x1f\xc5\xe9\xbc\xba\x8c\xeb\x0a\xef\x9d\x1e\x1e\x5d\x5f\x5c\xfe\x3a\x3e\xbd\xb8\x34\x41\xa4\x9d\x1a\x4f\x10\xbd\xd9\x32\x4d\x15\x45\x19\x24\xeb\xbd\x3e\x2a\x73\x80\x57\xb2\xca\x36\x84\x65\x1b\xda\x1a\xde\x60\xdd\x69\x10\x49\xbd\x46\xd6\x49\xc5\x20\x62\x82\x95\xe7\xc7\x8d\xe6\x26\xbd\x17\x0c\xdb\x0d\xbd\xc4\xe5\x3a\x27\xae\x49\x39\x2a\xb6\x14\x70\x65\xf2\x15\x83\x16\xae\x5a\x6b\x1d\x2c\xb9\x1c\x9b\x1d\x7c\x6a\x42\xd7\x5b\xa0\xf4\x6a\xbd\xc5\xc6\x35\x0a\x7f\xb5\xd1\xcd\x0e\x36\x94\x71\x09\x02\x7f\x08\x8b\x41\x11\x3a\x82\x9d\x4d\x51\x10\x71\xff\x60\x8f\x20\x91\x65\xb2\x02\x32\x69\xfd\xc9\x81\x02\xe6\xd9\x32\x9d\x5e\xd2\x59\xba\xcc\xe7\x36\x99\xab\xf7\x06\x73\x4f\x44\x2d\x53\xa7\x46\x92\x5b\x82\xc9\xc1\x9d\x58\x29\x59\x06\x5c\x73\xa2\x13\x90\xea\xb2\x6f\x12\xc6\x51\xec\x5e\x03\x3b\xbf\x15\xc9\x3d\x56\xf7\xdf\x0c\x27\xb1\xc4\x4f\x66\x2f\x0d\x18\x40\xf0\x5d\xb1\x9b\x94\xf1\x5b\x93\xcb\x0c\xa7\xa8\x33\xcd\x9e\x28\x99\x18\xd0\xc5\xe2\xc3\x5c\x35\xb3\x4d\x35\xe4\xa3\xd1\xfe\x05\xd8\x8c\x1a\xed\xb2\xa9\xef\x66\x51\xa6\x3d\x9b\x90\x36\x7e\x4a\xd2\x0f\xc9\xa3\x92\xac\x8d\x04\xae\xa5\x95\x62\x3d\x56\xf4\x3a\x58\x50\x98\x78\x42\x80\x2c\xd6\xbb\x10\x1a\x6c\x4b\xef\x3f\xe8\xf2\x4d\x04\xeb\xd0\xf7\x2b\x1b\xae\x1f\xb4\xe2\x3d\x21\x1b\x56\xd8\x8c\xde\x3c\x72\x5e\x3e\xdb\xb2\x1c\x8f\xd5\x11\xdd\xae\xb4\x61\x68\x26\xb2\xcb\x4b\x8f\x36\x8e\x0b\x3e\x72\x71\x58\x36\xbe\xf6\x27\x09\x71\x63\x96\x72\x7f\x09\xcc\xe6\x3f\x79\x63\x26\x45\x9d\x9f\x74\x86\x97\x09\x8d\x25\xde\x0b\x24\xc9\x1f\x9c\xcf\xe9\x6f\x06\xcc\x05\xa6\x47\x90\x7e\x27\xef\xdd\x24\x93\xbb\x9b\xa5\xe0\x54\xf4\x32\x1e\x47\xd0\xc5\xb6\xfc\x02\xfd\x7d\xfa\xed\x4f\xce\xa8\x4e\x77\x76\xd0\x4f\x72\x48\x47\xbd\xb1\x0d\xf7\xf3\x0b\x1c\x83\x52\xa2\x56\x3d\xe5\xd3\xe7\x57\xce\x66\xf1\xb6\x69\x80\xe5\xef\x55\xc5\x31\x02\xfb\x11\x15\xdf\x99\x83\xef\xf2\xc4\x1c\x7a\xaf\x2f\x2e\xde\x8e\x5f\x9f\xbd\x39\xbb\x36\x41\xaf\x6a\x78\x58\x97\x76\x13\x8d\x83\xf8\x32\xc6\x67\x4a\x7e\xa6\x26\xaa\x8c\xf1\xdb\x2d\xc6\x4d\xef\x75\x2e\x6e\x49\x27\x92\x4e\x5d\xf0\xf4\x16\x15\x3b\x3b\xe5\x11\x01\x2a\x02\x90\xc7\x0f\x12\x15\xd0\x62\x39\x16\xce\x20\xfb\xfc\x26\x2d\x45\xfe\x06\xe0\x09\x59\xfa\x40\x3b\x66\x2d\xda\x6a\xa4\xa8\x28\x60\x12\xf5\x29\x24\x36\x3b\x0b\x57\xbc\x48\xb6\xf7\x02\xc7\x12\xd6\xed\xc6\x8c\xcc\x7a\x93\x94\x51\x2e\x5f\x2e\x59\x3a\xa5\xc2\xe6\x64\x51\x54\x6f\x78\xd8\x58\x51\xbc\x0b\x64\x97\x31\xd5\x41\x2c\xf6\x4b\xc5\xc4\x2f\xe9\x2d\xcb\xa5\x78\xb4\x72\xf7\x58\x4d\x2f\xe3\x74\x7a\x9a\x89\xe3\x8b\x37\x56\x38\x1e\xd7\xb9\xdc\x58\x23\xaf\x0c\x47\xe6\x67\x9a\xe4\xd2\x5d\xb6\x77\xf7\x5c\x86\x98\x4b\xbb\x22\x97\xf0\xbd\x2f\x4e\xef\xb3\x07\x3a\xbd\x2c\xd7\x72\xa3\x07\x43\x58\x61\x35\xd7\x0d\x92\xac\x06\x6f\xb8\x80\x13\x02\xec\x32\xc1\x31\xe2\x24\xc9\x90\xd7\x78\x45\xc5\xe1\xdb\xb7\xaf\xcf\x8e\x0e\xaf\xcf\x2e\xce\xc7\xd7\x27\x6f\xde\xbe\x3e\xbc\x3e\x19\xff\x7c\x79\xf8\xf6\xed\xc9\xa5\xd5\x96\x57\xcd\x8b\x8f\x12\x3f\x95\xa5\x9e\xb2\x1c\x53\x00\x60\x30\xfd\x10\xff\x8d\x01\x63\xac\x49\xa6\x6f\xb6\x16\x3b\x77\xe0\x29\x7b\x88\xcc\xad\xfa\x79\x91\x38\xeb\x65\xfc\xe7\x06\xe4\xac\xb1\x31\x7b\x51\x62\xa3\xf1\x02\x3d\xc9\x66\x1d\x68\x59\xcf\x59\xfd\x88\x4d\xc1\xd5\xb1\x04\x13\xa7\x51\xd5\x6f\xa5\x07\x48\x51\x9c\x63\xac\xf6\x03\x08\x75\x98\x95\x90\xbd\xfd\x0b\x54\x38\xe9\x6f\xac\x69\xee\x98\x02\x9f\xd1\x7d\x84\x03\x7b\xb2\x14\xe2\x11\xc5\x0c\x61\x0e\x21\x16\xfa\xbb\xeb\xac\xd1\x01\x47\x55\xff\xab\x7c\x76\xa5\x6a\xa7\x42\xa5\xb5\x0f\x5b\xec\x3c\x26\xe5\xbf\x34\x04\xb9\xf5\xa3\xd4\xec\x67\xd6\x73\xc9\x33\xc7\x97\x27\xa7\x8a\xcd\x1e\x9d\x20\x9c\xc1\x47\x5f\xc9\x98\x7a\xde\xd1\xc0\x39\x30\xc7\x02\xb3\xf2\x06\xb5\x23\xd0\xfc\x56\x6d\xe2\x38\x83\xae\x5a\x29\xa1\x86\xe8\xd2\x7c\xac\x40\x09\xc5\x82\xe8\xa6\xbc\xee\x5a\x66\xeb\xd4\x59\xd7\x50\x8e\x08\x44\xf0\x2f\x79\x63\x55\x1a\xe2\x64\xab\xa1\x60\xbd\xfa\x91\xee\x90\xe2\x4c\x95\x08\xf6\xca\x55\xd0\xf0\x43\x9d\x6e\xd2\xc4\x5a\xd0\x84\x2f\x17\x6a\x2a\x34\x76\x52\x23\x43\x55\x57\xb9\x50\xfd\x55\x0d\x69\x80\x2b\x72\xa9\xa6\x2a\x23\xdb\xae\x30\x64\x64\x0f\x5d\x49\x02\xbe\xec\x52\x2b\x69\xd4\x19\x1b\x97\xbe\xbb\xbb\xef\xfc\x32\x86\x62\xd4\xe1\x5a\x30\x8b\x29\xe0\x12\x07\x67\xab\x13\x3e\x04\xde\x03\xac\x4a\xde\x24\x98\x55\xba\x62\xbd\x33\xc7\x75\x59\x6c\x0c\xc1\x14\x87\x69\x0a\xfc\x3e\x76\xe1\x48\xad\x80\x28\x74\x78\x43\x47\x7f\x17\xd2\x09\x2f\x83\xe8\xb5\xca\xa5\x6a\x43\x40\x32\x7f\x7d\xe0\x2c\xa8\x00\x71\x22\x8f\x51\x05\x85\x4f\x03\x41\x04\xbb\xa1\xd1\xc3\x2a\x58\x91\x8e\xcb\x9e\x01\xb1\x19\xc2\xd9\x87\x62\x03\xfd\xf3\x93\xb4\xd0\xfe\x08\x57\xb7\x5a\x1e\xc8\xa2\x71\xb5\xe5\xbc\x7e\xf1\x68\xa6\x0c\xb5\xd9\x5d\xca\xad\xe0\x30\x56\x37\x07\x51\x96\x6e\x9d\x95\x35\xc8\xe7\xd0\xdf\x67\xde\x25\x93\x59\x7f\x90\x8c\xc8\x21\x1b\x75\x32\x2f\x8e\x1f\x98\x1c\x05\x19\x1a\xb0\xef\x08\x5d\xad\x32\x23\x66\xc7\xa8\x68\x90\x1c\x42\x35\xfd\xb2\x77\xf4\xee\xf2\xf2\x44\x87\x51\x06\x82\x75\x20\x55\xeb\x7b\x8d\xed\xc7\x77\x54\xbb\xaa\xec\x3b\x1f\x41\xef\x38\x02\x58\x52\x60\x30\xb6\x42\x76\x82\x3a\x8e\xcc\x73\x25\x63\xbb\x74\x83\xa5\x5d\xd3\xed\xfe\x22\x3d\x7c\x44\xcb\x32\x54\xf0\xb3\xb6\x9b\xa5\x1f\xbb\x63\xea\x52\x51\xdf\x24\x4b\xdb\xde\xd3\x29\xc2\xab\x2b\x1e\x23\x4c\xc9\x76\xdf\xcd\x01\x75\x7b\xed\x99\xb3\x87\x7d\x32\x45\xa0\xea\xd2\x85\xc6\x26\xf2\x54\x2f\xec\xdc\xa2\x76\x09\xae\x80\x2d\x54\xde\xd2\xa4\xf1\x1a\x10\xd2\x5d\x53\x0a\x33\x3a\x94\x81\x44\x5f\xd4\x89\xd1\xa6\x29\xea\x57\x85\x4e\xda\xbc\x3a\xf5\x43\x26\xec\x58\x49\x3a\xb7\x9f\x5e\xf0\x89\x43\xc8\x8a\xc2\x84\xc3\xc2\xd5\xa1\xeb\x36\xd7\x96\x36\xf5\x46\xc8\x07\x9b\x29\x09\x40\xd8\x43\xc3\x55\x69\x89\x1a\xe4\x68\x4b\x71\x4d\x63\xb1\xab\x63\xae\x52\x26\x83\xda\x1a\x2e\x61\x20\x5b\xf5\x6a\x52\x41\xa4\xd0\x3a\x2f\xf1\x77\xc3\x44\x3e\x07\xc2\x47\x5d\xd6\xb1\xf6\x3d\x71\x62\x07\x2d\x1f\xd7\x78\x7b\x0f\xd3\x9e\x95\x3f\xca\xe9\x76\x6e\x9d\x33\x4a\x79\x8a\x2a\x30\x24\x87\x00\x40\xa2\x6e\x87\xff\xa9\x35\x04\xba\xcc\x7f\x6e\xb1\x1c\x60\x94\x92\x34\xcd\x3e\xd0\xe9\x16\xe3\x5b\x3c\xe3\xbb\xcc\xab\x77\xb7\x02\x53\x52\xbe\x15\xe7\xcb\xc9\x7c\x2b\xc9\xb7\x4e\x93\x5c\xbe\xcc\x32\x89\x7a\x91\x96\x32\x25\x18\x1e\xcf\x38\x15\xd2\x4d\xb4\xd0\x13\xcd\xff\xe7\x4c\x74\xff\x93\x26\x3a\xc4\xe2\x6b\x8a\xb5\x2c\x4d\x8c\x9b\x51\x37\x3d\x5c\x4f\x0f\x03\xff\x74\x38\x43\x44\x4d\xbc\x2d\xe9\x6a\x69\xc9\x48\x53\xb3\xce\x98\xb4\xef\xa2\x28\x70\xd2\x3a\xe5\xcf\x33\xba\x68\x94\x32\x89\xc5\xa7\x44\x5f\xac\xbf\x6e\xe9\xde\x7d\x39\xec\x81\x89\x6a\xce\xc5\xa7\x61\xae\x6c\x30\x0f\x6e\x40\x57\xa9\xaa\xe8\xf7\x36\xab\xe8\x97\xa2\xd9\xab\x7e\x29\xf4\xc5\x36\xfd\xd2\x5d\xf1\x99\xa6\xb0\x0d\x17\xd4\x5c\x14\x10\x22\xd0\xe6\xf7\x6c\xb0\x10\x9b\xbc\x65\x1b\x3c\x97\x97\xc2\x38\xba\x3e\x59\x0f\xe7\x81\x8e\xa7\x56\x37\xbc\xc7\x85\xb5\xd6\x18\xdf\x45\xf5\x24\x42\xc5\x3a\x73\x59\x90\x5d\xb6\xea\x08\x9b\x28\x61\x4d\x3b\xf2\xe7\x65\x9f\x48\x5d\x2f\x5e\x92\xcc\x5a\x8f\x9e\x26\x7a\x61\x03\x1f\x56\xd5\x9b\xdc\x65\x3f\x44\x38\x25\x4f\x94\x3f\x58\x88\xc5\xdc\x9b\x8f\x96\xc5\x17\x98\xad\xd2\x36\xb3\x55\xc4\xf8\x62\x29\xa3\x35\x7e\x93\x4b\x6f\xb6\x4a\x54\xff\xda\x90\x3d\xec\x86\x53\xfc\x4e\x10\xea\x80\x28\x43\x1d\xc0\x6f\x26\x5b\xdd\x7f\x0f\xec\xc7\x06\x7f\x8d\x8d\x7e\x1a\x8d\x68\x1b\x10\x06\x9d\x53\x40\x91\x74\xd8\x9b\x7a\xe9\xb1\x46\x9c\x75\xae\xf2\x9b\x1c\x46\xda\x1d\x78\xbe\x04\x27\xe3\xb9\x63\xfb\x1b\x7c\x41\x36\xfb\x80\xd8\x19\x2b\x3b\x83\xb8\xc7\xc0\x76\x13\x81\xf0\x44\x94\x90\xa8\x67\x22\x88\x5b\x7a\x6b\xf9\xcd\xc5\xcc\xeb\xf9\xa7\xa2\x0c\xd6\x0d\x6e\x78\x00\xa7\x80\x83\xbc\x0a\x73\x01\x3c\xd0\x5d\xe8\xe9\xbe\xd6\x39\xcb\x7d\xcb\x71\x26\xc2\x80\x00\x74\xc2\xa0\x1b\x11\xc6\xcb\xcc\x00\x85\x38\x04\x26\x03\x37\x49\x41\xb2\x9e\xe9\x24\xfd\x28\x29\x9f\xc6\x4f\x2c\x3f\x9a\xd3\xc9\xdd\x4d\xf6\xb1\x96\x9b\x58\x13\x4c\x3d\x09\x7a\x34\x31\x25\x7c\x56\xe8\xc7\x05\x2d\x10\x2a\x50\x67\x2a\xe2\xa7\x59\xa2\x96\xeb\xb1\x21\x1c\x18\x36\x5c\xaa\x71\xab\x41\xb0\x52\x8c\x71\xbb\x8f\xab\x7c\xa0\xc0\x0b\x81\xf0\x42\x3c\x23\x13\xad\x2b\xf4\xb5\xe6\x1a\x5a\x7c\xb8\x17\xe4\x55\x63\xc2\xca\x71\x2f\xcd\x26\xe6\x2c\xb1\x5a\x79\x84\xf0\x43\xab\x36\xde\xa3\x4f\x67\xe9\x83\x12\x3c\x36\xc0\xd6\xb7\x06\xd6\x04\xea\x19\x5b\x99\xfd\x43\xd1\x9d\x3a\x48\x8c\x70\x03\x39\xa5\x40\xb2\xf1\x8e\xef\x95\x9a\x63\x6e\x0d\xad\xad\x62\xc6\x27\xb6\xc4\x66\x71\x53\x2b\xbd\x92\x60\xd1\x90\x27\x4e\xf8\x4e\xd8\xac\x4d\xb6\x51\x27\xd6\x18\x69\xa6\x21\x45\x18\x33\x2e\x3f\x45\x49\xce\x61\x15\x39\x47\x9a\x18\xb1\xef\x69\xba\xa8\xa1\x95\x97\x6c\x88\x76\xb8\xe1\xf7\x86\x9b\xd8\x4a\xea\xf8\x97\x9b\xaa\xb1\x25\x2a\x15\xb9\x33\xb7\x45\x25\xbb\xb6\x4e\x57\xf8\x7b\x18\x7f\xa5\xea\xb7\x89\x90\x2c\x49\x9f\x5f\x9d\x29\x60\xaa\x01\x23\xe3\xe3\x27\x4a\x85\x7b\x5f\x24\x15\xae\xc5\xdc\x6b\x94\x0a\x3d\x5f\xbc\x15\xad\x81\x67\xbd\x24\x7f\xe4\x93\xd7\x6c\x46\x8f\x1e\x27\x29\xb4\xa6\x6e\xef\xb9\x67\x97\x37\x6b\x0a\xfb\x2e\xf8\xef\xc7\x6b\xbe\x9f\xba\xb3\x06\x36\xf9\x07\xd1\x6e\xd1\xf9\x5b\x03\x3e\x1b\x05\x3e\xa3\xb3\xc5\x8c\x48\x40\xec\xbe\xd5\xf8\x7f\xa1\x7c\x94\x93\x4c\xcb\x7a\x78\x49\x9e\x0a\x3c\x69\x3a\x31\x2d\x2a\x7a\x4f\x26\xb7\x80\xdf\x57\xca\x13\xf5\xf6\xf2\xe2\x97\x5f\x6d\x54\xd7\x53\x09\x0a\xd4\x86\xfa\x01\xfa\x50\x2c\x91\x3d\x8d\x72\x7b\x18\xb9\xeb\x51\x90\x55\xd5\x38\xd9\xfa\x54\xda\x6c\x16\x4b\x42\x48\xda\x3b\x7a\x77\x75\x7d\xf1\x46\x09\x49\xe3\xd3\x8b\x4b\xcb\x58\x26\x05\x9e\x27\xf9\xa0\x91\xee\x6d\xc3\x05\xce\x3e\xf0\x1f\xe9\x63\xde\xc0\x4f\xb4\x93\x61\x5e\xe0\x72\xec\xf0\x31\xcd\x27\x82\x2d\x64\x26\xea\x65\x9e\x28\x5f\xde\x6b\xf0\x5e\x20\xd4\x8c\xcf\xd8\xed\xd2\xfe\x2e\x8a\xa2\xd3\xc7\x4b\x38\xe9\x21\x7f\x5f\xbc\xc4\x33\x1d\x97\x67\x43\x9a\xa7\x6a\xfb\x53\xdb\x54\xbc\xc4\xd5\xc1\xe1\xa7\x72\xa5\x7b\x38\x6c\x72\xcf\x64\xc1\x9c\x14\x08\x9b\xee\x37\x87\x07\xb4\x35\x47\xf1\xfa\x21\x54\x11\x5d\xf5\xf1\x60\xe9\xa0\x71\xd9\xa4\xf1\x8d\x76\xcb\x56\x80\xdd\x9a\x6b\xd7\xa7\xe9\x60\x89\x83\x8b\x4d\x16\x86\xfc\xd9\x02\xc6\xbb\xc4\xd2\xb2\x63\x77\x71\xf5\xae\xa2\x23\x80\x30\x47\x78\xae\xfd\xe2\x44\xcc\xf0\x14\x67\x98\xe2\xe5\x97\x38\xc5\xcd\x3f\x3b\x28\x6b\xda\xe2\x13\x37\x6f\xf1\x9e\xff\x6c\x09\xba\xe3\xa3\xae\xdd\x86\xae\xc7\x69\xa9\x8e\x76\xa4\x9d\x79\x13\xb7\xa8\x98\x34\x90\x63\xb8\x10\xac\x69\x21\xf0\x8d\x88\x05\xea\x76\x85\x69\xd7\xaf\x04\xf7\x8e\xde\x6b\x02\x15\x5c\xcf\xca\xc1\x10\xb7\x4a\xc0\xec\x76\x03\xb8\x5a\x5f\xb1\x78\x86\xff\x78\x73\xb5\xfb\x4d\x22\xdb\xad\x36\x4d\x01\xa3\x2f\x90\x6f\xf6\x5d\x65\x3c\xc2\xba\x8f\x1f\x65\x5c\xd2\x8f\xcd\xaa\x97\x96\xe1\xc8\xa0\x9c\xaf\x68\xe3\x7d\xb2\x79\xd9\x2c\xd5\x3a\xe0\x55\x11\xd6\xce\x91\x8f\x3e\x69\xb9\xdc\x3c\xf8\x24\x4d\x6c\x16\xab\x13\xcb\xb5\x04\x71\xaa\x84\xb6\xdf\xdb\x9c\x5a\x42\xd1\xcc\xe7\x5e\x82\x84\xa2\x97\xe0\xfa\xe3\xa2\xef\x37\x45\x8f\x57\xa7\xd9\x73\x97\xb2\x37\x85\xc0\x4f\xcf\xc0\xe4\x5d\xad\x64\xeb\x81\xfe\x9c\x00\x1e\xdf\xfa\xb2\xc7\xf2\xa3\x8c\xe7\x52\xd1\x4f\xc3\xb5\x1d\x18\xde\xe6\xc8\xa4\x2f\xbd\xd1\x6e\x0a\xe5\xf8\xf2\xfa\x9f\x87\x15\xd1\x80\xbc\xfa\x5c\xe7\x6d\x50\x39\x22\x7c\xf2\x0c\xf7\x25\xe3\x92\xa7\x29\xe1\x59\x40\x87\x94\x3f\x58\x6f\xa3\x32\x9b\x23\xac\xc9\x59\x76\xbd\x9b\xa0\xdb\x9c\xb2\xe2\x51\xde\x19\x6b\x8e\xe2\x2a\x08\x4e\x27\x2b\x3d\x5f\x54\xf5\xcf\x98\x3f\x3b\x8a\xc1\x0d\x79\x43\x1c\xc3\x07\xe1\x84\xc0\x60\x1d\x82\xf9\xae\xc7\x2d\x3c\x2f\x36\x21\x08\x49\x28\x5d\xab\xb0\xed\x19\x28\xc6\xaf\xbe\xe4\x82\xf0\x37\x41\x75\xef\x7d\x2e\x54\xf7\xc7\x35\xb2\xfa\xdf\xad\x46\xfe\xbf\x06\xe2\xf8\x4a\xb4\xaa\x8b\xcb\x48\x1c\x70\x89\x70\x09\x6c\xd6\x82\x78\x6b\x0d\xf3\x53\x09\x2d\xbc\xf0\xc0\x23\x2d\xd2\x57\xd6\x26\x7d\xf1\x35\x82\x97\x76\xcb\xb5\xb4\xcb\x0a\x84\xb3\x92\x0a\xab\x49\xc9\xeb\xf3\x7d\xf6\xce\xdf\xbd\x7e\xed\x3d\x9b\xfe\x3e\x85\xee\x7f\x5f\x80\x9a\x83\xb3\xfd\x42\xad\xf2\xb3\xa3\x00\x3f\x11\xcb\xf9\x99\x10\xcb\x5f\xac\x39\x7e\x76\xff\x85\x39\xad\x0e\xd7\x9c\x56\x0d\x6c\xdd\xa7\xc9\x2b\x33\xec\x8f\x25\x1b\x60\x29\x9f\x06\xb5\xf9\x34\x80\x35\xd7\xb2\x68\x04\xaa\x1b\xc8\x53\x01\x67\xcc\x5d\x9b\x0e\xaa\x82\xa1\xd2\x0f\x33\x3e\xbe\x15\x21\x7f\xf1\x1f\x82\x5a\x0f\x3e\x06\xa5\x9e\xc1\x7c\x61\xc4\x83\xed\x19\x44\x46\x70\x1e\x3e\xe0\xdf\xed\x1d\xd4\x10\xf3\x54\xf9\x3d\xe4\x6c\x03\x40\x6c\x03\x80\x70\x54\x05\x5e\x34\x17\x78\x51\x2d\xc0\xbc\xb2\xe5\xb2\xa5\xb3\x96\x7f\x40\x8a\xd1\x33\xb8\x15\x42\xd7\x9d\x09\x6a\xaf\x1f\x78\xbb\x5f\x07\x2a\x9b\x92\xee\x99\xd6\x26\xca\xc1\xd5\x45\xbb\xee\xc3\x41\xb4\xab\x04\xef\xdd\x19\xa3\xe9\x34\xf2\xd5\x1e\x6d\x9c\x49\x07\xff\xef\x51\x20\x31\x27\x62\x28\x3c\xb0\x23\x70\xd2\xd2\xb4\x95\xe7\xb9\x3a\x65\x1c\x0d\x98\x76\x0d\x61\x16\x8d\x90\xa1\x41\x14\x74\xeb\x4d\x49\x41\xe5\x9f\xff\x2e\x2a\x71\x72\x38\x03\x18\x22\xfb\x81\x07\x22\x12\xc3\xaf\x46\x88\x11\x81\x33\xa2\xfe\xf4\xb0\x0e\x89\xfb\xa2\xe3\xd1\x8b\x48\x72\x10\x33\x22\x21\x95\x84\x76\x14\xc9\xd5\x05\xcb\xfc\x39\x14\x23\x34\x08\xdb\x00\xb0\x19\x46\x40\xf5\xe4\x2c\x0c\x8d\x7e\x3f\xee\x78\x75\x00\x44\x24\x48\x69\x8a\xb0\xce\x97\x43\x5d\xa2\x1c\x5f\x60\x28\x46\x36\x83\x85\x06\xd8\xb1\xf9\xdc\x24\x4e\x93\x1b\x9a\x0e\xa2\x7f\xdd\xa6\xec\xfe\x9e\x8a\xaf\x27\x69\x96\x2f\x05\xdd\xd5\xdd\x8d\x0a\x2f\xf2\xdf\xf7\x66\x69\x72\x7b\x4b\xa7\x67\x2e\x6e\x10\xc5\x91\x73\xe7\xc8\x78\x4f\x3b\x11\x9b\x92\x38\x69\xb0\x74\x6c\xe5\xe0\xbf\x6f\x84\x06\x13\x12\x32\x64\x38\x1b\xf5\x26\x19\x9f\x24\x32\xe6\xb1\x44\x08\x15\x16\x73\xea\xac\xf1\x40\x68\x32\x84\xe8\x84\xc3\x8d\x29\xbf\xa8\x33\x7b\x14\x31\x45\x07\x51\x34\x70\xb8\x95\x01\x23\x38\x2e\x2b\x32\xeb\x57\x7f\xc8\x1d\x79\x26\x4c\xe6\xd8\x28\x0a\x76\xd4\xb9\x70\xa2\x72\x90\x0a\x78\x4b\xdb\x36\x5e\x0b\xa2\xde\xfb\x96\x4e\x37\x6e\x94\x5a\xaa\xec\x92\xff\x57\x80\xff\x48\x87\xfd\x11\x68\x35\x4c\xc8\x1c\xc2\x59\x9d\x4e\x92\x80\x4e\x32\x84\x73\xd2\xdf\xcf\xbf\xcd\xf6\xf3\x9d\x1d\x94\x0c\xf3\x90\x4e\x72\xeb\x1d\xda\xb2\x0b\x0e\xd4\xff\xcc\xea\x69\xa8\x61\x58\xb4\x44\xb1\x2a\x70\xf5\xb0\x96\x20\x3c\x7c\x2d\xdc\x9a\x32\x9c\x94\xd2\x82\xff\x59\xb6\xdb\xe9\xa5\x93\xab\x15\xc0\xd0\xca\x83\xaa\xe4\x31\xa8\x21\x83\xc9\x10\x39\xd1\xe0\xcb\x1e\x68\xd4\xed\x12\x36\xb4\x03\xf7\x56\x13\xf7\xb2\xdd\x6f\x05\xb7\xa4\xe1\x73\x3e\x2b\x79\xb6\x14\x93\x20\xe5\xbe\x45\x78\xf5\x4f\x04\xe6\xe0\x0e\x1b\x80\xbc\x6a\x50\xd0\x20\xeb\x59\x65\x5c\xee\xb2\x02\xdf\x5d\x3b\x9c\x66\x38\x06\xe1\x30\x57\xa2\xaa\x16\x9b\xbc\x7c\xbc\x1e\xcf\x19\xb3\xd1\xa7\xe6\x7e\xf3\x2b\x51\xbb\xd7\xeb\x85\x0a\x8e\x23\xfa\x61\xcb\x88\x02\x6b\x33\xee\xac\x85\x4a\xb5\xb3\xe4\xf0\xa1\x4b\xb3\x64\x3d\x69\xed\x9c\x58\x6f\xda\xd2\x6c\x57\x8e\x86\x2d\xae\x73\x83\xc7\x92\xfc\x69\xc2\xac\x2b\x0b\x86\x39\xd2\x60\xcd\x5a\x66\x52\x93\x21\x03\x3c\xfe\xca\x42\x19\x29\xc5\x2f\x67\xa8\xb9\xc5\x7c\xf8\xe3\xa8\xc5\x3b\xa0\xa9\x69\xef\x05\xd2\x3a\x0c\x6c\xdc\xb9\x7e\xd0\x17\xa3\x77\xeb\x08\xf5\x99\xd8\xe0\x37\x22\xe1\x93\xf9\x7a\x9a\x5a\x07\x0e\xce\x7c\x0d\x23\xa4\x37\xfa\xb4\x15\x52\xf7\x33\x9c\xe8\xb0\xf4\x41\x45\x61\xea\xbf\x46\x0d\x13\x43\x07\x2c\xc0\xcd\xe5\x86\x0e\x19\x54\x52\x7c\x02\x4a\xaf\x1a\x85\xaf\x68\xee\xa0\x7a\x75\x2e\xd9\x10\xa8\xb7\x44\x2c\xf0\xd6\xcd\x07\xa6\x9a\x72\xa8\x27\x09\xbd\x76\x6e\xa1\xbe\x17\x65\x08\x50\xcf\xe1\xf7\x63\x49\x26\x19\xcf\xb3\x94\xa2\x5e\x9a\xdd\xda\xdb\xb3\x37\xe8\x68\x5e\xf5\x5e\x54\xb0\x70\xdf\xbc\xbb\x8e\x10\xfe\xa3\xfa\xf8\xea\xe2\xdd\xe5\xd1\x49\x14\xb4\xfd\xb3\xd0\xa1\x15\x81\x6c\xf8\x10\xe0\x07\x4f\x43\x4f\x9d\xab\xde\x4f\x4b\x2a\x1e\x35\x64\x63\x5c\xcb\xb6\xed\xba\xa4\xfb\xf4\x4a\x90\x61\x94\xa4\x32\xc2\x11\x64\x40\x88\x70\x74\x4f\x65\x12\xe1\x68\x22\x45\x1a\x8d\xf0\xaf\x82\x7c\xfd\x7f\x26\x29\x9b\xdc\xad\xee\xb3\x65\x4e\x57\x32\x5b\x4e\xe6\x5f\x77\xe6\xbd\x43\xe8\x9b\xc9\x6c\xe6\x62\x53\xe8\x54\x3f\xcf\xa1\x87\x3f\x36\xa9\x6c\xa9\x11\x9b\xce\x5c\xbf\x37\x56\x36\xd4\xa0\xbf\x05\xfe\x6a\x43\x85\x26\x84\xe5\x39\x15\x16\xf8\xa7\x8d\xea\x39\x9c\xe1\x04\xe7\x78\x69\x53\x92\x18\x87\x4e\x73\x03\xb2\xad\x3a\x25\x1d\xfc\x86\x18\x33\x11\x3e\x01\xaf\xb8\xaa\xc6\xce\x6a\xa9\xfc\x9a\x92\xcc\x30\xae\xfb\x45\xca\x26\x4c\x5e\x6b\xd8\x44\x83\xc2\x31\xcd\xee\x89\xf1\xb7\xa6\x0f\x94\x03\xe2\xac\xde\x00\xb7\x54\x9e\xd8\x27\x96\x25\x29\x1e\xb0\xdc\xe0\x84\xe1\x0a\xb5\xf9\x69\xbb\xbe\x6a\xaf\xb8\x8c\x47\x4e\x7e\x5f\xad\x22\x20\x8a\xc8\x38\x58\x1c\xfa\x81\x36\x8a\x37\x5e\x56\xa9\xcc\x8b\x45\xb0\x33\x4e\xef\xcd\x6f\xc1\x05\x9e\x2a\x22\xa8\xbc\x1f\xca\x51\xf5\xd8\xa0\xa6\x47\x66\xf6\x9a\x79\x46\x79\x8a\xed\xa1\xe5\xc6\xeb\xa7\x09\x40\x14\xb5\x78\x1d\xa1\x03\x69\xdc\x03\xcd\x6f\xdb\xf4\x20\xe0\x1a\xd2\xf8\x6a\x34\xd1\xa9\xd4\x99\xaa\x2b\xb4\x62\x0f\x43\xd7\x3a\xb6\x59\xaa\xa3\x9b\xe5\xcd\x4d\x4a\x73\x00\xf9\x37\x8f\x16\x02\x56\xff\x98\xce\x92\x65\x2a\x23\xa4\xe4\x40\xfd\xc6\xb8\x64\xff\x48\x1f\x73\xf0\x5d\xb4\xb4\xa1\xc7\x08\x61\xf4\x90\xa0\x81\x55\xef\x60\x35\xe3\xb5\x91\xdd\xe0\xef\x5f\x45\x4f\xd2\x5c\xc6\xda\x23\xce\x62\xa8\x82\xff\x32\xcb\xaf\xd4\x3c\xd2\x23\x45\x08\x3a\xe4\x8c\x44\x51\xa1\xd3\xd3\x58\x39\x2e\xe1\x8f\x11\xfa\x8e\xf4\x91\xbd\xf0\x55\x32\x81\xbe\x12\x61\x2a\x50\x36\x8b\xe9\xf0\x95\x18\x8a\xd1\x4e\xf4\x23\x7d\x8c\x46\x06\xa8\xcf\x57\x08\x2f\x6d\x37\xb6\xf7\xdc\x3d\xb2\x88\x29\x4e\x1c\x73\x5b\xad\x74\x32\x0a\x97\x9b\x4e\xa7\x69\x0d\xa7\x4e\x4d\xc8\x6a\x45\x7b\xb9\xcc\x16\x6f\x45\xb6\x48\x6e\x13\x4d\x27\x4a\xa6\xd0\x37\x1a\x14\xc7\x75\xf2\x29\x53\x3b\xc8\xeb\x4f\x70\xed\xa2\xd8\x5c\xc3\x96\x46\x89\xb7\x4c\xd3\xa2\xd3\x70\x73\x01\x99\xbb\xe9\xf9\x41\xcc\xb5\x86\x45\xe0\x65\x2f\xa7\x7c\x7a\xf0\x19\x37\x34\x5e\xba\xa1\xe9\x7a\xcc\x89\xb4\xc4\x43\x2f\xbf\x53\xb8\x90\x0d\xbe\xbc\x05\x55\xa7\xad\x1f\xfc\xc4\xfe\x82\x4a\x45\xb9\xc6\xbf\xa0\xc2\xf0\x8a\x03\x75\x16\x08\xe1\x14\xb5\xe0\x28\x7c\x25\x6c\xa4\x0c\xe8\xa0\x7e\x69\x3b\x28\xd6\x67\x42\xdd\xe4\x92\xac\x4e\x16\x9c\x96\x9c\x53\x26\x24\x35\xce\x29\x33\x92\x86\xb7\xc8\x29\x49\x15\x53\xef\xb0\x59\x3c\xb3\x31\x5c\x7b\x6a\xbf\x64\x64\x66\x34\x5a\xf1\x52\xff\xb9\x87\xd0\xf0\xab\x11\xca\xc9\x52\x2b\x35\x96\x21\xd8\x63\x27\x27\x4b\xc7\xad\xec\x56\x9c\x93\xe1\x08\x2f\xc8\x8b\xfd\xc5\xb7\xb6\xf2\xfd\xc5\xce\x0e\x9a\xeb\x80\x34\xa8\x75\x61\x42\xf2\xef\xb5\xb4\xb2\x5c\xb2\xa9\x12\x37\x1f\x80\xb5\xff\xa4\x2e\x10\xf7\x38\xc7\x73\x3c\xc1\x33\x9c\x61\x16\x00\xd2\x3e\x14\xd8\xe1\x52\x36\xdb\x41\xb3\x7b\x10\xa9\xcc\xf1\xaa\xe1\xf4\xec\x89\xfe\xa3\x8e\x10\x2d\x47\x2f\x0b\x1c\x29\xa9\x77\xb7\xbc\xe4\x51\x3d\xcc\xb9\xe9\xc3\xdd\x68\x87\x63\xed\x1a\xb8\x06\xe6\xaf\xac\x34\xdb\x43\x1d\x39\xfc\x6a\x04\xa0\x48\xc1\x31\xef\xc5\x29\x4c\x83\x63\x99\x56\xce\x64\x77\x24\xb5\x60\xd6\x80\x59\x55\x6e\xd6\x99\xd3\x6a\xde\xab\x1f\xca\x97\xee\x4a\x7a\xb6\xa7\x02\xe1\xe8\x9b\xde\xde\x37\x91\xb9\x4a\x51\xa2\x7f\x22\xfc\x64\x72\x02\x1f\x2e\x65\x76\x2d\x92\xc9\x1d\xe3\xb7\x83\x97\x59\x96\xd2\x84\xc7\xb2\xd7\xf0\xd6\xe8\x6e\x7e\x7b\x96\xc9\xcf\x3a\x03\xae\xb5\xf8\x19\xfb\x5c\xe9\xdb\x81\x46\x2e\x1f\xd0\xd0\x0a\x57\xd6\x2f\xf3\x03\xce\x07\x19\x2f\x30\xe5\xeb\xc5\xb7\x66\xa1\xcd\xf5\xc2\xaa\xad\xad\xa7\xa3\x08\x2c\xad\xdc\x4b\x51\xed\x57\xad\x2f\x37\xb6\xda\xb6\x9d\x50\xa0\x64\x0f\x57\x89\xf3\xa8\x2c\xdd\x24\x34\x47\x92\x6d\x63\xff\x0c\x8e\xe4\xad\x5e\xae\x7f\x8c\xc8\xf2\x1a\x56\x7c\xe8\x92\xe0\x63\x53\xa9\xeb\x2d\xc3\xee\xd4\x45\xb5\xf4\x2f\xbc\xe4\xaa\x00\xa1\xd4\xe1\x03\xf2\x83\x88\x0d\x89\x6a\xd4\x12\x0a\x48\x15\x38\xc1\x59\xdb\x26\x7a\xa8\x62\x91\x2a\x2e\x19\xdc\xf7\xfc\x25\xd8\xa8\x07\x46\x68\x13\x3f\xb2\x7c\xa8\x84\xef\x19\xcc\x0d\xf5\x0b\x97\x99\x06\x6d\x8e\x1e\x5e\xf1\x95\x6c\xd8\x47\xa0\x59\x58\x72\xa9\x7e\x97\x25\x0c\xa7\x6b\x61\xe5\x6c\xf5\x70\x29\x0e\x48\x00\xa1\x50\x5b\x0d\xf5\x7d\x49\x6d\x78\x7b\x0f\xed\x97\xee\xc6\x19\x4e\x50\xb1\x81\x3f\xba\xf9\x2e\xb9\xf7\xb8\x89\x61\x95\x89\x11\x7f\xc1\xc4\x58\xef\x2c\x37\x12\x1e\xdc\x67\x4b\xb3\x92\x6d\x9a\x95\x0d\x55\xd5\xa7\x84\x29\x0a\xfc\x14\x26\x8d\xc5\x5f\xb3\x45\x6b\x99\xd3\x5b\xed\xb5\x55\x23\x6c\x03\x91\xaf\xcb\x91\xde\x32\xb0\x4a\xfb\x30\x34\xae\x01\x34\x24\xc7\x99\xfe\x4b\x70\x9c\x70\x50\x88\xe3\xbc\x34\x6c\x29\x1e\x5d\x68\xfd\x34\x9b\x80\xd8\x56\x41\x04\x00\xf4\x15\x30\x74\xf8\x49\x48\xa6\x53\x38\x3e\x5f\xab\x5b\x3b\xa7\x22\x36\xb7\xcd\x26\xeb\x83\xd8\xd9\x29\x10\x7e\xca\x8c\x93\x03\xc2\x0d\x6a\x6e\xa8\xec\x40\x5f\x43\xe1\x6f\x5b\x21\x1a\xc4\xb4\xd6\x31\xfd\x01\xfc\x13\x21\xd4\x63\x9c\xc9\x52\x21\xbc\xdd\xc7\xdb\x7d\x04\x89\xe3\xf3\x45\x22\x27\x73\xfd\x9a\x36\x3e\x02\xd4\x82\x62\xa2\x9e\xc5\xdc\xa7\x7c\x2b\xd4\x44\x2e\xd7\x1c\x61\xe6\xf8\xd2\x58\x6a\xc6\x49\xd0\x01\x76\x55\x14\x11\xea\xcc\x92\xfe\xcc\xd2\x8e\x5a\x6b\x88\x4c\x53\xc0\xa9\xc8\xee\xab\x57\xf6\x12\x0e\x82\xd9\xe3\x36\xe6\xce\x5b\x28\x44\x4f\x4d\x37\x18\x4e\x17\x49\x9e\xb3\x87\x92\x93\x75\x87\x6f\x9b\x90\x17\xf5\x95\x12\x45\xec\xdf\xf6\x60\xad\x0c\x0a\x61\x66\x4b\x98\xea\x6c\x21\xf3\xd3\xb9\xf4\x54\xcb\x65\xb6\x9c\x69\xda\x96\x33\x3f\xad\x4a\xa5\x56\x8e\xaf\x56\x6c\xb5\xca\x0e\xcc\xc1\x9c\x2d\x40\x2b\x44\x34\x15\x71\x6c\x9a\x1d\x30\x6c\x2a\x1a\x64\xc5\xa0\xf4\xa5\xc1\x4c\x35\x06\xc3\x56\x13\x6b\x27\xb1\x1d\x74\xd2\xa1\xed\xa2\x17\x17\x93\xe6\x4e\x1a\x1c\xcc\x6a\xe5\x81\x11\x35\xb7\x95\x2f\x73\x2a\xde\x8a\xec\x81\x4d\xe9\xd4\xba\xff\xdb\x76\x9a\xde\x59\x4d\x52\x63\x93\x4b\x02\xd6\xec\x9c\x77\xbb\x7c\xb5\xda\xde\x73\xc0\x71\xe1\xd7\xea\xea\xb1\x44\x10\x97\x6a\x17\xc0\x54\xed\x88\xc9\xc9\xa5\xdb\x50\x55\xb7\x3b\xe3\xc6\xa5\x08\xa7\x98\x22\xac\xcb\xc4\x09\xb8\xd8\x76\x74\xa6\xa3\x52\x4d\x79\xcb\xed\xcc\xd4\xe3\xce\xe9\xf2\x74\xe2\x52\x25\x38\x5c\x35\x2b\x3d\xa5\x9c\xf4\xf1\x84\x93\xbe\x97\xa4\x67\x81\x38\x3b\xe1\x3b\x3b\x38\xe7\x07\xd4\x00\xdc\x94\x59\x91\xfe\x68\xe0\xf3\x38\x75\xbb\xdc\xd2\xdb\x9a\x22\xdb\x7d\x34\x68\x7d\x1b\x58\x1d\xa7\x41\x47\x52\xd7\x91\x1a\x43\xdc\xd0\x8b\xc6\xef\x75\x17\x9a\x5e\x69\x65\xf0\xbc\x95\x1b\x19\x5e\x74\xf5\xee\xed\xdb\x8b\xcb\xeb\xab\xf1\xc9\xfb\x93\xf3\xeb\xf1\xc5\xdb\xeb\xb3\x8b\xf3\x2b\x92\x9b\x5d\x5d\x82\x79\x35\x31\x60\xa2\x89\x01\x35\xdb\x0e\x44\x00\x08\x52\x4e\x6f\x5c\x0d\xa8\xe2\xa1\x30\x1a\x2a\xbf\x97\x1a\xd8\xac\xc0\x62\xcd\x7d\xcb\xe4\x72\xa6\x07\xe5\x03\x73\x60\xee\x61\xa2\x51\x36\x34\x90\x76\x70\x8b\xaa\xb0\xcf\x18\x61\xb5\x68\x8e\x1c\x83\x9b\x20\xa6\x9e\x10\xa9\xa3\x42\x4c\x2b\x1b\x6f\x0f\x7a\xdc\x20\x6c\x79\x2c\xbd\x16\xf1\xd4\xb7\x64\x6d\x9c\xd0\x96\x92\xbe\x4c\x6b\x9d\x86\xee\x96\xdb\xef\x76\x63\xb5\xa3\x8c\x6a\xe2\x2f\x18\x8b\x99\xfe\x8d\x62\xd2\x1a\x07\xa1\x49\xb6\x54\xeb\x9f\xb7\xf8\x08\x3d\x25\xd3\x69\x3e\x48\x39\xd6\xfb\x29\x1f\x4c\x78\xe1\x5c\x86\xfc\xa6\x5e\x94\x74\x2e\xc1\xf2\x6f\xeb\x44\x94\x76\x6e\x0f\x62\x66\x1d\x0c\x8d\xdd\x84\x22\xcc\x7a\x8c\x3f\x64\x77\xf4\x4a\x26\x92\x4d\x5e\xa6\xd9\xe4\x2e\x16\x0e\x4d\x05\xa1\x41\xf9\x83\x58\x20\x84\xb7\xfb\x40\xf4\xf7\x7c\x03\x14\xf9\x5f\x1a\x55\xf6\x19\x70\xc0\x0f\xfc\xbf\xcf\x11\x74\x73\x46\x3a\x9d\xcb\xbe\x9e\x15\x4f\x75\x86\x4d\x40\x4d\x1b\xa1\x20\xe7\x3d\x78\x58\x54\x5d\x47\xff\x9a\xd4\x74\xbd\x49\xc6\xa5\xc8\xd4\x44\x63\xe9\xb3\xd4\x89\x16\x7f\x54\xf1\x19\xfe\xa8\xf7\xfc\xf9\xfe\xa8\x06\x97\x52\x43\x8e\x40\x16\xab\x13\x98\x03\xbb\xb8\x31\x47\x1d\xd6\xbb\xc9\x32\x35\x0f\x5a\xc7\x08\xf6\x2b\xc2\x7a\x26\xde\xf8\x34\x53\xc2\xb4\x1b\x54\x79\x4e\x01\x76\xe7\xaa\x77\xab\x8e\x05\x88\x1a\xb1\x9f\x9d\xea\xc2\xea\x1a\x14\x95\x4a\xe8\x88\xd8\x20\xe1\xd4\x7d\x36\xa5\x29\x24\x9c\xaa\x60\x2a\x98\x17\x01\x38\x67\x8e\x12\xf2\xa4\xd7\x50\x09\x5a\xbe\x4f\x19\xb1\x1a\x17\x35\xbd\x34\x9d\x19\x0c\x88\x4c\x49\x0d\x15\x1f\x5b\x77\xe5\x4b\x49\xee\x85\xae\x8d\xf5\x3e\x41\x77\x06\x69\x51\x6f\x00\xde\x5c\xd2\xd9\x20\xaf\xb4\x55\x6c\x24\xac\xb8\xd5\xd5\x37\xb1\xae\xbe\xba\x5f\xcf\xf0\xf3\x0d\x40\xc7\xf5\x8c\x15\x3a\xf5\xc2\x7a\x4f\x62\x91\x2d\x25\xdd\xb5\x25\x2d\x54\x44\xb8\x64\x6b\x9a\xcc\xea\x4d\x22\x9c\xb4\xc1\x46\x38\x1e\xa1\x26\xb0\xc9\x91\xd8\xed\xe8\xf2\x39\xeb\xdd\xa2\xed\x4c\xeb\x68\x1d\xf7\x53\x5b\xe2\xd7\xcc\x72\xe0\x47\x00\x9a\x38\xa9\xe3\x7d\x6a\x6e\xc9\x08\xcb\xf5\xae\xc8\x65\x86\xa3\x0f\xd4\x20\xc7\x97\x8e\x57\xb2\xe4\xb3\x89\xaf\x34\x3a\x2e\x8b\xb5\xce\xca\x1c\xe1\xf5\x1f\xe8\x1b\x65\x80\xb0\x20\xbf\xc4\xad\x39\x7e\xb6\x5f\x70\x85\xed\x7d\x8a\x3f\x71\x9b\x43\xf4\x83\xcb\x89\xe2\x6a\x6e\x9a\x6f\x4b\x04\x9d\x50\xb2\x05\xa5\xbe\x65\x21\x98\x3f\x07\x97\x23\xae\x4f\xac\xcf\xaa\xd3\xfe\x2e\xe8\x1e\xfa\x22\x17\xec\xff\xaa\xb9\xb6\xce\xdb\x8f\xbc\x34\xdb\x25\x8d\xf9\x03\x6f\x08\x88\x29\xc2\xd8\xf2\x5a\x76\x89\xe1\x87\xde\xc5\x22\xef\x69\x6c\x00\x1c\xed\xde\x2b\x79\x2c\xc2\x72\xb5\x1a\x8e\xb0\x18\xf9\x03\xdd\x88\x1e\x3e\x38\xc8\x64\x6b\x18\x8e\xf4\xbf\x26\x3d\x96\xc9\x91\x65\xe4\xa3\x9b\xb5\x9a\xfb\xc0\x9e\x70\x49\x67\x56\xc7\x11\xa0\xcf\x87\xc1\x50\x80\x02\x07\xb7\x68\x8f\x57\x0e\xcf\x8e\xe9\x2c\x78\x24\x93\x5b\xad\x90\x5c\xa7\x15\xd1\xf9\xa4\x9b\x55\xf7\x00\xf8\x4a\xc2\x8e\x85\x4a\x7b\xf0\x26\x2f\x9b\xd5\x6b\xfe\x8d\xfc\xa0\xd2\x61\x42\xc2\x47\xc7\x74\x36\xb0\xc7\xfb\x3c\xc9\x0d\xc4\x98\xb6\x49\x9b\x53\x03\xd2\x02\x1f\xc4\xd5\x71\x57\x06\x1d\xe2\xe2\xaa\x63\xed\x91\x03\x9f\x41\xe5\xcf\x8c\x1b\x7a\xdc\x36\x61\x95\x79\xd5\x29\xda\x5a\xb3\x16\x34\xc2\xe6\x9a\xcb\xf6\x78\xd3\xad\x32\x4c\x60\x40\x1b\x0d\x2f\xc6\xde\xb2\xde\x9d\xa5\x0d\xcd\xed\xc4\x68\x1d\x74\xd6\x85\xda\x1a\x87\x0e\x2f\x95\xbc\x0b\x2d\x49\xc4\xc3\xcf\xcc\xdf\x6a\xaf\x31\x4e\xa8\xf6\x47\x9c\x32\x21\x1f\x8d\x87\x99\x3a\xcb\xcc\x44\x7c\xd8\xac\xec\xd3\x70\xad\x50\x73\x40\xfa\xba\x8d\x73\xb3\x1f\x64\x75\x8a\x9c\x81\x03\x08\xdc\x19\x39\x3e\x93\xd0\xcb\x5d\xf0\x8e\x8e\xc4\xc9\x6d\xf4\x40\xff\x39\x70\xa3\xaf\x99\x79\xa4\xfd\x44\x0e\xeb\x23\xb0\x75\x8e\x6a\xf4\xd4\xbe\x70\x30\x81\x27\xcf\x9d\x40\x3b\x71\x77\xf4\x31\x9c\xae\x8d\x0c\xa0\xd4\x19\xd9\x90\xce\xc3\xe0\x8f\x6c\x9e\xbf\x9a\x57\x52\xb7\x4b\x87\xb6\x4f\xa3\xaa\x19\xf7\x62\x23\xff\xd5\x13\xf8\x97\x31\xe0\xab\x4f\x9d\xc9\x80\xfb\x7e\x31\x2b\xad\xcc\x50\x08\xcf\x14\xc8\x09\x1a\x9e\xb3\xf4\xd6\x21\xeb\x48\x2d\x26\x14\x6b\x08\xc8\xcb\xc6\x25\x1a\x82\x4b\xd1\xc7\xcd\xa3\xd7\xf3\x1d\xec\x41\x6d\x16\x76\xec\x71\xea\xd1\x6c\xfc\x43\xc5\x32\x35\x1b\x73\x9a\x2a\x9b\x52\xdd\xce\x19\xd6\xf6\x92\x2b\x2d\x3f\xe8\x8c\xf1\x8f\xbd\x29\x9b\x48\xa4\xa6\x42\x8f\xab\x94\x68\xeb\x49\x26\xb7\x03\x11\x22\x18\x84\x49\x8a\x42\x17\x11\x03\x9c\xa7\xbf\xbf\x4f\x16\x03\x06\x8f\xf2\xc1\xd0\x48\x4e\x23\x2c\xac\x97\x72\x3e\x18\xf2\x11\xd6\xaa\x8c\xc1\x5e\x05\x4e\xc4\x85\x11\xe9\x62\x3a\xdf\x48\x19\xe6\xa4\xe1\x93\x03\x3e\x68\x39\x06\x34\x74\x47\x5d\x89\xa3\xef\x60\xdc\xe3\x67\x14\xbe\x47\x6d\x65\xf4\x20\xbd\xc3\x9c\x63\x50\xc1\x04\x55\xfc\x2a\x83\xfa\x3f\x83\x64\x9b\x64\xd8\x1a\xe9\x92\x80\x38\xc3\xb5\xaf\x51\x31\x09\x20\xc8\x4a\xea\xcc\x30\xce\xd4\x5b\xcb\x4b\x9f\x9e\xc6\x1c\xc0\xc7\x09\x8f\x85\xc9\x4f\xe1\xe2\x64\x85\x92\x1e\xb0\x49\xb9\x04\xca\x02\x4d\xc1\x03\x61\x48\xb9\x94\x81\xcd\x5f\x89\x45\x28\x7d\xea\xf5\x10\x76\x73\xc5\xe5\x9d\x00\xc3\x6d\xf1\x15\x24\x25\x1d\xad\x9a\x0d\x9f\x2c\xde\xcd\x8c\xf3\xd6\xdb\xf2\x21\xbf\xe0\xdb\xe7\x93\x81\x87\xc2\x30\xbc\xf2\x3f\x0b\x8b\xbd\xef\x76\x99\x4b\xe8\x5e\xd9\x91\x9d\xca\x66\x74\x09\xad\x82\x20\x9e\x40\x9d\x2b\x6b\x12\xd3\x58\x3a\x50\x7a\xb5\x05\x2d\xc0\x73\xb0\xe7\xe5\x67\x89\x42\x9e\xe1\x1f\x36\xea\xa3\x41\x22\x1b\xd2\x61\x7f\x04\x51\x49\x0d\x30\x1f\xd1\xbf\xa2\x1d\xaa\x6e\xe5\x74\xb8\x37\x1a\x79\xa3\xc1\x5d\xed\x00\xe1\x3e\x25\x52\x1b\xa8\x56\x29\x9b\x02\xef\x01\x6f\x10\x1e\x90\xcc\xce\x11\xd3\x5e\x1a\xb6\x14\xdc\x22\xd8\x24\x66\x78\x68\xd7\xf7\x60\x38\x1a\x48\x7c\xc8\x63\x81\xfc\x59\x33\x52\x87\x4d\x60\xd7\x78\xdb\x98\xa6\x3e\xfb\xc4\x6e\x66\xad\xdd\x4c\xba\xdd\x78\x93\xea\x7c\xd8\x1f\xa9\x4b\xe7\x70\x6f\x84\x35\xdf\x86\xde\xef\xee\x0d\x02\x87\x55\x93\x0f\xbd\x03\xf9\xac\xd5\xf5\xd3\xce\xa8\x18\xf2\x11\xb8\x33\x80\x1f\x73\x8f\xe5\xda\x9f\x99\x59\x32\x34\xe9\x16\xd9\xb0\x0f\x9f\x65\x84\x10\x7d\x88\xbf\xa2\x72\xb5\xf2\x3f\xdf\x24\x8f\x37\xf4\x75\x36\x49\x52\x3b\x09\x6c\xc8\x82\x58\xc9\x9c\x24\xc3\xc4\xff\xee\xa8\x76\x6b\xf2\x80\x49\xf1\x31\x64\x38\xd7\xe7\xfc\x48\x71\x37\xb5\x00\x59\x7d\xa9\x12\x3c\x74\xcb\x03\xb1\x44\x6a\x61\x54\xd3\x97\x9c\x0c\x47\x1d\xda\x1b\xd3\x8f\x0b\x2a\x98\xba\x71\x26\xe9\x9b\x64\x22\xb2\x9c\x5c\xea\x01\x5d\x73\x7c\xc4\xf1\x1b\x8e\x7f\xe7\x25\x20\xc7\x33\xbe\x09\xc8\xf1\x98\x6f\x82\x68\xfc\x9d\x6f\x84\x68\x3c\xe3\x55\x88\x46\x57\xff\x79\xc0\x92\x01\x0e\xd2\xb1\xf2\x6e\x17\xf2\x50\x69\xe4\xc4\x6e\x37\xb2\x4e\x29\x91\xe6\x36\x8f\x0b\x7a\x20\xad\x3e\xd4\x6a\xba\x5c\xb5\xaf\x43\x2c\x90\x0c\x86\x18\x04\xe8\x0f\xd4\xfe\xf3\x1f\x9f\x96\x42\xad\x9e\x74\x94\x90\x37\xca\xd1\x03\xaf\xbc\x8e\x76\xec\x0b\x7d\x2a\x2f\x92\x09\x1d\xc8\x30\x80\xae\xa2\xf4\x6d\x56\x05\x97\xbb\xe2\x4f\xaf\x40\xbd\xcb\xb1\x40\xab\x15\x4c\x56\x2c\x21\x51\x76\xc7\x6f\x06\x1e\xa4\x0c\x37\x89\xe5\x2d\x81\x1f\xf3\xd8\x3e\x09\x0a\x30\xb3\x1c\x4f\xbe\x61\x6e\x91\xa3\x99\x3e\x50\xb3\xb6\xbe\xba\xc1\xbb\xb2\xf9\xd7\xa5\x5e\x1b\x15\x7f\x43\x8f\xcb\xbc\x91\x77\xbb\xe6\xaf\x4c\x73\xc9\xa6\xde\x64\x45\x71\xd3\x7b\x7b\x78\x79\x7d\x76\xf8\xfa\xaa\xdb\x8d\xaf\xab\x48\x83\x35\x96\x20\xc8\x11\x8f\x25\x7e\xc3\x01\xd3\xd4\x35\x2a\x8a\x02\x1f\xd5\x17\x80\xcd\x62\x5f\xbf\xb6\x55\x5a\x5a\x05\xbe\x40\x91\x87\x51\x3f\x54\xa7\x05\xb8\x99\x47\x47\x19\x97\x09\xe3\x54\x6c\x7d\x48\x34\x78\xfa\x2c\x5b\xf2\xe9\xd6\x87\x39\xe5\x5b\x6a\x02\x18\xbf\xdd\x5a\x2e\xb6\x92\xad\x07\x46\x3f\xe4\x5b\x0e\x0d\x63\xeb\x7a\xce\xf2\x2d\x96\x6f\xdd\x67\xb9\xdc\x4a\xd9\x1d\x4d\x1f\xb7\xa6\x4b\xba\x25\xb3\xad\xfb\x84\x2f\x93\x34\x7d\xdc\xd2\xca\x5b\xc9\x12\xa9\xaa\x49\xf8\xd6\xc9\xfd\x0d\x15\xbd\xf7\x8c\x7e\xe8\x6d\x5d\x51\x3a\xd8\x9a\x4b\xb9\x18\x7c\xfd\xf5\x2d\x93\x3d\x96\x7d\x7d\xf2\xe3\xdb\x05\x3f\x0c\xb2\x7b\xd5\xcd\x2c\xd1\x8e\x44\xab\x55\xe3\x0b\x81\x8a\x02\xbf\xe1\x8d\x42\x91\x89\xd1\xfc\x1a\x7c\x79\xe4\x50\x86\x2c\xcc\xac\x77\xf8\x90\x44\xe3\x68\x47\x60\x69\x02\x6f\xbf\x8e\x50\xa1\xa5\xf3\x97\x9c\x3c\xb1\x59\x05\xdd\xce\xca\x53\xf5\xe8\xf8\x77\xc2\x03\x48\x69\x3f\x68\xa1\xbd\x24\xf4\xbf\x2f\x10\x2a\xb0\xf6\xd8\x6d\xaa\x12\x5b\xe3\xca\x14\x7c\x1e\x03\xa1\xd1\x23\x55\x7b\xa1\x19\x6b\xf6\x8e\x15\xcb\x06\x4e\xcd\x4c\x88\xee\x0b\x84\x27\x24\x09\xfd\xac\xf1\x8c\xf0\x4a\xf4\x08\x2f\x47\x8f\x0c\x32\x3c\x6d\xc2\xca\xc6\xbc\xe3\xb2\x74\xf4\xbb\xdd\xb8\x39\x19\x60\x9b\x84\xb0\xe5\x63\x51\x10\xf2\xbe\xfe\x05\xea\x50\x90\x1d\xc3\xeb\xad\xb5\xcf\x57\xee\xaa\x90\x8e\x2f\xe8\x80\x1c\xf6\x47\xda\x9f\xee\x16\xe2\x21\xe1\x14\x05\xe5\x7a\x58\x84\x1f\x34\x5d\xe3\x63\x01\x81\x06\x03\xb1\x5a\xf1\xd5\xea\x8d\x28\x62\x33\x2b\xd0\x66\x84\xba\x5d\x33\x2b\xe6\x37\xce\x91\x07\x9a\x6f\x70\xe4\x4a\x86\x5f\x8d\x0e\x7e\x17\x71\x82\x13\xac\xfe\xc6\x53\x3c\x81\xf0\x80\x20\xb2\x70\x86\xca\x36\x02\x14\x27\x48\x95\x71\x6e\xa9\xd8\xab\x35\x5c\xc8\x88\xae\xa8\xc9\x55\xbf\xdf\x10\xb7\x6d\x9e\xfc\x5e\x0a\xa5\xf5\x4e\x95\x50\xb0\x1c\x0f\xef\xad\xa7\x45\x11\xf6\x04\x27\xd0\x32\x1a\xfe\x04\xf9\xd5\x4d\x5e\x2a\xa1\x88\x56\x89\x17\xcd\x20\x8f\xcd\x84\x5a\x60\xbd\xdc\xcd\x65\x54\xcd\x39\x8d\x8f\xd5\x96\x73\x45\x50\x81\x67\xd5\x7d\x51\xfe\xfe\xb4\xfa\x7d\x1d\xee\xd2\x14\x78\xe9\x36\x62\xdd\x1d\x0a\xd7\x9d\x98\x10\x80\x58\xce\xdb\x06\x58\x81\x8b\x2f\x70\x9a\xdd\xae\xed\xe8\xf7\xd5\x8e\xde\x2f\xab\x1d\xf5\x3b\xbe\xda\x3f\xc5\xbf\x63\x41\xd4\xfd\x4a\x0c\xdf\x8b\x91\xbb\xcd\x98\x70\x6e\x23\xea\x98\xf1\x71\x47\xf7\x6c\xf8\x87\x18\x11\x8e\xd9\xf0\xab\x11\xe1\xc3\x1f\x47\x98\xa9\xe2\x6a\x25\x59\x81\xa3\x3f\x96\x54\x3c\xee\x2e\xc0\xa5\x20\x5a\xdb\xfb\x9f\xab\xbd\x17\x34\x99\x66\x3c\xad\x12\x80\xde\xb2\x4d\xdb\x5e\xf5\x64\xb5\xa2\x45\xc3\xec\x97\x5c\x64\x52\x4d\x5d\x4b\x7e\xa3\x4e\xa1\xe6\x4e\x2d\x69\xfb\x52\x06\x9e\xe8\x4b\x9e\xd2\xbc\x8a\x43\xfa\xc9\x9c\xfa\x85\xe3\xd8\xa8\x70\x92\xed\xda\xc9\x7a\x5b\x9d\xac\x68\x97\x26\x93\xf9\x2e\xe3\x6b\xca\x1d\x35\x0d\x06\xca\xb2\xf5\xad\x5d\xd6\x5b\x03\x10\xed\x5d\x40\xfe\x5e\x5b\xf4\xba\x5e\x94\x67\xe2\x3e\x49\xd9\x9f\xf4\x39\x03\x3d\xaa\x97\xbf\xa5\x72\xd7\xa8\xfc\x76\x1f\x12\x11\x0d\x66\x81\x4f\xc5\xfb\xc4\xdb\x6a\x1a\x97\x45\x83\x32\x36\xed\x00\xcc\x1c\x94\xa2\x6c\xb0\xe7\xfb\x24\x0a\x95\x8d\xd9\xe9\x63\xa6\x75\x54\x19\xe8\xb7\x9e\xad\xa7\xca\xfe\x76\x5d\x4f\x30\x97\x37\x3c\x86\xd4\x7c\x30\x85\x46\x97\xda\xc2\x1c\x68\x2f\xf4\xa6\x09\x4e\x45\x02\x5a\x9e\xb0\x2d\x3d\x80\x03\xe0\xd9\x3d\x38\x6a\x1c\x0a\x40\x1c\xdd\x27\x8c\x47\x68\xd0\x30\xd3\xea\xfb\x8f\x1c\x34\x0d\x1f\x94\xc8\x1d\x98\x13\xb0\x30\x06\x40\xe8\x68\x92\xe7\x54\xc8\x5d\x1b\xac\xba\xeb\x64\xde\xdd\x39\xdc\x03\x77\xed\xa1\x12\x0d\xee\x44\x81\xdf\x6d\x32\xb4\x68\xe7\x95\x9c\x0c\xf5\x99\x64\x32\x89\x66\x37\xbf\x5f\x67\x1a\x60\xbb\x74\xc3\x83\x97\x37\x4b\x96\xca\x33\xae\xef\x9d\x39\x79\xc9\x2b\xf8\x84\xfe\x72\x7e\x94\x4c\xe6\xba\x02\x57\xb8\xe9\x2b\x45\x9b\x36\x47\x95\x1e\x45\xed\x65\x90\x7f\x9c\xf5\xf4\x6d\xb4\x0c\x79\x6a\x25\x4e\xc6\x53\xc6\xa9\x8e\x42\xb8\x49\xb3\xc9\x5d\xde\x01\xd7\xf1\x38\xb2\xea\xf2\x0b\x40\x79\x80\x47\xc6\x82\x79\x6b\x9f\xbc\x61\x90\xdf\x28\xbe\x03\x23\x3c\x7c\x02\x45\x16\xf6\xb7\xfd\xe0\x2d\x47\x2e\x66\x95\x93\xfe\x3e\xff\xf6\xd2\x25\x4d\xe3\x3b\x3b\x00\x15\x71\xc9\x87\x7c\x84\x74\x8e\x0c\x40\x5f\xf5\x13\xc0\x52\x2a\xcc\x58\x5e\x27\x7f\x02\x8a\xa2\x7a\x04\xcb\xff\x60\xc2\x0c\x4d\x2e\x2d\xd4\xe8\x46\x59\x5a\x08\x1b\xaf\x90\x93\x27\x23\xd4\x3e\x19\x2b\x2f\xb8\xb0\xfc\x22\x30\x18\x79\x0d\x02\x5a\xf5\xf5\x1c\x2e\x3a\xc1\x17\x6b\x15\xa2\xcf\x05\x70\x0f\xf4\xdc\xed\xb0\xed\x95\x0b\x9d\xd0\xd7\x38\x28\x64\x51\xf7\x45\x13\x6c\xbc\x21\xcc\xd6\x16\x0d\x4d\x5b\x54\x1c\x1e\x3e\xb5\xc6\xcd\x35\xfa\xa4\x20\xd5\xa9\xd0\xf7\xcc\xb5\x94\xbb\xb3\x83\xb9\xea\xa4\xe9\x72\xa3\x64\x1e\xf4\x6a\x48\x47\x1b\x70\xf9\x37\x8e\x64\x5c\x03\xe9\x0f\x2f\xf3\xf6\xea\x1e\x0e\x9a\x97\x46\xc4\xcc\x88\x1a\xf7\xda\xce\x8e\xc3\xf9\x70\xe1\x25\xcf\xc6\xff\x6f\x98\xe3\x52\x0e\x80\x8d\x48\xfd\x95\xfb\x74\x30\x15\xe3\x3a\x5e\x7f\xa7\xa1\x69\x81\xaa\x9d\x9f\x57\xa9\x25\xd0\x51\xd7\xdd\x88\x8d\x3d\x3f\x60\x80\x65\xb8\xef\x6a\x3c\x65\x69\x99\x4c\x52\x4a\x9b\xbf\x39\xac\x24\xa7\x52\xcf\x00\x06\x3d\xf1\xf8\x79\xeb\x5f\x66\xb5\x43\x3a\x6a\xd3\x8a\x59\x9f\x40\x30\x01\x60\x8d\x32\x76\xca\x63\x30\x8a\x2d\x53\x0a\xbe\xba\xba\x9c\x46\x07\x08\x3d\xff\x34\x19\x0c\xa2\x1d\x86\x33\xb4\x5a\xb5\xbd\xac\x63\x55\x79\x15\xb4\xd6\x89\xf9\x2b\x19\xd5\xba\x19\xad\x4d\xa7\x5a\x81\xe4\xfe\xe8\xb1\x5c\x0f\xc8\x78\x10\x16\xea\x2e\xd6\x34\x05\x89\xf3\xf8\x6b\x6f\xda\xaf\x87\x8b\x91\x2c\x62\x81\x0e\x32\xea\x05\x4b\x83\x15\x53\x92\x9b\x06\x31\xed\x71\xfa\xc1\x38\x55\x25\x37\x40\x3a\x38\xf1\xa5\x4a\x5f\x23\x8b\x1f\x29\x2b\x74\xd8\xb8\x74\xd7\xf0\xcb\x98\x63\x62\xfb\x47\x28\x70\xb3\x9e\x29\x5f\x62\x3c\x9a\xd9\x8d\xd7\xee\xb6\x3a\x71\x38\xf6\x5f\x22\x0f\x30\x2a\x3d\x55\xc9\xa2\xbc\xb6\x56\x07\x3a\x88\x76\x68\x59\xdf\xea\x12\x64\x9d\xf3\x98\x19\xfd\x5f\xc0\x44\xc0\x33\x52\xed\x68\x86\xb3\x86\xf3\x09\x39\x39\x4b\xc0\x80\x00\xac\x50\x91\xe0\x69\x26\xce\xad\x9e\xb3\x49\x5f\x84\x05\xb1\xea\x50\x38\xca\x8d\xfa\x7d\x30\x70\xba\x29\xad\x7e\x37\xce\x81\x5a\xcf\xc2\x77\xd4\x6d\xc1\xfd\xec\x63\x8e\x10\xd6\x0e\x4d\x32\x50\xab\x8a\x22\x98\xdc\x67\x1f\x60\xe1\xfe\x61\x6e\x22\x33\x42\x71\xd2\xa4\x0b\x14\x06\x14\x6a\xb5\xd2\x16\x37\x68\xda\x2e\x83\x53\xe6\x96\xb8\xb5\x9d\x52\x3b\x65\xfa\x2b\x54\xc4\x6a\x6e\x4f\x79\x2c\xec\xbe\x45\x81\xf9\x2c\xa9\xf1\xad\x1c\x2f\xb5\xb0\x9e\x5b\x23\x46\xe2\x4f\xac\x83\x25\x49\x4c\x5a\xb3\x98\xa1\x41\xf0\xa6\x13\x46\xeb\xb4\x08\x70\xc0\x00\xf3\x32\x81\xa4\xb6\x03\x69\xc7\x34\xb7\x74\x5b\xde\x36\xd5\xed\xc6\xa5\x76\xb5\x2a\x6f\x42\x00\xb8\x61\xcc\x1c\x64\xc3\x95\x4c\x84\x44\x36\x89\xa8\x46\x7c\xaf\xf5\x24\xc2\xaf\x39\xce\x10\x9e\xb9\x2b\x49\xc3\x30\x8d\xeb\x9d\x4b\x4d\x7f\x71\xfe\xfa\xd7\xf1\xab\xd7\x67\x6f\xde\x9c\x5c\x8e\x8f\x2e\xde\xbc\xbd\x38\x3f\x39\xbf\xbe\xea\x76\xe3\x99\x41\x9f\x89\x33\xbc\xd4\x58\x12\x1f\x7b\x2c\xb7\x3e\xde\x17\x3c\xf5\xd0\xd6\x28\x0e\x9a\x30\x7b\xa1\x56\x03\x76\x63\x77\x9f\xea\x65\x9f\x92\x5a\x69\x3c\x27\x73\x11\x4f\x43\x32\x98\x77\xbb\x01\xe0\x2f\x21\x64\xae\xa1\x55\xa0\x8a\x05\x99\xdb\x6d\xdb\x99\x91\xb9\xb3\x62\xc0\x25\x23\x13\xf1\x22\x66\x08\x4f\xf1\x52\xc3\xb6\x5d\xa8\x1e\x05\x6d\x62\x78\x6d\xda\x59\x1e\x2c\x07\xcc\x2a\x71\xd5\x56\xe9\x2d\x04\x7b\x48\x24\x20\x6c\x1e\x2b\x46\xa7\xd6\xa9\x28\xca\x82\xd9\xcc\x0d\xf7\x0f\x59\xae\x7c\xb5\x2a\x39\x91\x57\x6b\x3c\x53\x35\x6a\xf3\x9f\x9a\xa3\x49\x8c\xd6\x5f\x15\xe0\x94\xcc\xf1\x0c\xe1\x99\x71\xef\xf9\x9e\x93\x27\xcd\x91\x07\xcd\x4e\xba\xce\x2d\x32\xe4\x4d\xef\xd4\xc9\x57\x66\x49\x4e\xee\x2e\x0a\xfc\x9e\x93\x77\xf1\x13\x9b\x0e\xa2\xc9\x7c\xf6\xd3\xe4\xfb\xff\xf8\x26\xc2\x70\x57\x18\xfc\xe3\x29\xd2\xce\xfa\x79\x34\x18\x46\x5d\xa3\xaf\x8f\x46\x58\xa3\xd3\x82\xb2\x2e\x1a\x0c\x87\x7b\xff\xc4\x7b\xa3\x11\x8e\xe6\x49\x7e\xf2\x90\xa4\xd1\x60\x96\xa4\x39\x2d\xfe\x81\xef\xa9\x4c\x06\x4f\x9e\x69\x0c\xa2\x45\x32\xb9\x4b\x6e\x69\xfe\xb5\x49\xbb\xb5\x6b\x97\x2f\xff\xda\x42\x71\xa6\xec\xe6\x6b\xab\x50\xcf\x7d\x5e\xae\xde\xfc\x26\x8f\x8a\x02\xe1\x3f\x5c\x7f\xcf\x7f\xfe\xed\xcf\xd7\x57\x67\x67\xcd\xfd\xb5\xf9\xc8\x22\x1c\x5d\xd3\x8f\xf2\x14\x60\x5b\x71\xf4\x2f\x9b\x36\x31\xc2\x51\x37\x91\x52\xe4\xf5\x01\xfd\x13\xeb\x9b\xce\x70\xf8\xe2\x3f\x70\x88\x3d\x3d\x0c\xf0\x60\x8d\x55\x11\x37\x7c\x13\xe0\xc4\x9a\xaf\x8c\xab\xd1\x53\xbd\x21\x36\x83\x76\xbe\xc1\x7d\x3c\x8c\x7c\x16\xb5\x68\xd4\x56\xe6\xdf\xb0\xfa\x7a\x0f\x0f\x47\x23\x3c\x1c\xee\x7d\x83\xff\x09\x7f\x44\xff\x32\x6a\xf3\x70\x88\x23\x5f\xb5\x4e\xcf\x18\xa9\x6f\x5f\x7c\x83\xbf\x51\xc5\xd5\x7f\x38\x02\xe5\x1b\x85\x50\xa2\xc1\x70\x54\xb4\xb4\xf7\xe2\xef\x6a\xaf\xf6\x68\x0f\xbf\x18\x15\x76\xd6\xfe\x16\x9a\x02\xe5\x94\xa3\xa7\x9f\x1d\x3d\xcd\x66\x87\xaf\xff\xed\xfb\xe3\xb4\x91\x9e\xea\x54\x8f\x87\x2f\x5e\x60\x7b\x91\x1e\x61\xe8\xe0\xdf\xd5\x65\xdd\x8a\xeb\xf3\xab\xe7\x01\x7b\x8c\x03\x8e\x60\xaf\xc9\xc2\xe5\x6c\x36\x62\x39\xe4\xa5\xad\xa5\x18\xe8\x04\xd7\x26\x41\x35\xbf\x1b\xf3\xf8\xc9\xf8\x33\xaa\x5b\x33\xe3\xd6\x34\x8c\x75\xa5\x83\x27\xa8\x6c\x20\x30\xe3\x32\xb3\xb6\x5c\xe3\x66\xa3\xd5\x3d\x26\xdc\x62\x57\x66\x8b\xdd\x94\x3e\xd0\x34\x0a\x7d\x6d\x4c\x09\xed\x65\x63\x7e\x78\xaf\x9c\xa2\x40\x9d\xd0\x4b\x5b\xd0\x99\x71\xe0\x2a\x57\x58\x6e\xb0\xd9\xab\xa7\xa1\xa5\xa2\xa0\x26\x9b\xa1\x9f\x5b\xde\x88\xbd\xeb\xe6\x9b\x7d\x79\xba\x65\x86\x21\x90\xae\x1a\xdc\x14\xdc\x24\x0f\xac\x14\xee\xf1\x2e\x71\x15\xb4\x90\xab\xbb\xd4\xa0\xe1\x43\x8e\x0a\xcc\x0a\x00\x4b\xa7\x3d\x41\xb3\x05\xe5\x1a\x71\x26\x1c\x4f\xa9\x36\xef\x0c\xd8\xd4\x29\x2b\x08\x8e\xcb\x51\x09\xd2\x91\x55\x29\x25\x00\xce\x88\x1c\x4e\x7b\x17\x3f\x9f\x9f\x5c\x8e\x3a\x25\x5f\x51\x81\x39\xce\x30\x8b\x33\xe4\x40\x55\x1b\x54\x2c\x00\x99\x4c\xf9\xf4\x3a\xab\x0b\xc8\x1d\x49\x6a\x44\xde\x9b\x27\xf9\xf1\xc5\x9b\x6e\xb7\xe6\x5b\x4e\x0f\x1c\x86\x01\xd8\x1c\xae\x68\x4a\xd5\x49\x1d\x53\x34\xa0\x1a\xd0\xcc\x26\x71\x47\xe5\x0c\xee\x7e\x68\x91\xee\xcc\x05\xd0\xd7\x7b\x46\x3f\xd8\x14\xef\x10\x07\x21\xa8\xfe\xb0\x8c\x1a\xc1\xd5\x29\x7e\x11\xf8\x6f\xd7\x7c\xa5\x05\x9d\x55\x30\xed\xeb\xf1\xdc\x2e\xe3\xba\x6f\x9b\xbc\xe2\xe0\xe6\x14\x47\x75\x1e\xa2\x18\xce\xd7\x70\x61\x50\xc7\x11\xfd\xb8\xc8\x84\xcc\x15\xa3\x6e\xfe\x52\xb1\x1a\xc0\xb4\x1c\xe1\x8a\xfb\x5a\xb4\xcc\xe9\x96\x9a\xca\x89\x8c\x3a\xcd\x89\xc3\x28\x8e\xc6\x63\x9a\xbf\x01\xee\x16\xe1\x27\xad\xaa\x06\x98\x89\xd6\x02\x3e\x76\xb5\x92\x72\xac\x05\xee\xbe\x67\x0b\x14\xeb\x6a\x7d\x03\xb0\x9c\xcf\xac\x51\x7d\xbc\xb6\xb6\xfb\x4f\xa9\xed\x7e\x53\x6d\x0b\x4a\xef\x3e\xa9\x7f\xb6\xc0\xda\x5a\x73\x2a\x3f\xa9\x52\xf3\xfd\xda\x3a\x9d\x6f\xde\xb3\x6b\x75\x25\x74\x7a\xb7\x35\x24\xe9\x08\xad\x44\x95\x1a\x79\xec\x26\xb9\x51\xcc\xbb\xa1\xe8\x52\xb2\x34\xa0\x5e\x08\xf8\x51\x3f\xed\x49\xe9\xbc\x0f\xaa\xf4\x6b\xed\xd3\x5f\x46\xc5\xd4\x4e\x1b\x99\x62\xea\xd6\x85\xcc\x15\x83\x34\x64\x49\x28\x50\x00\xa1\x40\x56\x84\xfa\x29\x09\x51\x30\x32\x9c\x58\x33\xa9\x67\x74\x41\x25\x99\x81\xb3\x00\x76\xec\xb0\x6e\x97\x5c\x77\x75\x1a\xa9\xfd\xef\x2b\xce\x0d\x12\xc5\x1e\x4e\x37\x18\x35\xc6\xa9\xc1\x31\xc8\xdf\x53\x91\xab\xcb\xbd\xd1\xc8\x8d\xcd\x59\x44\xa7\x27\x7c\x4a\xac\x9e\x6e\x3c\x4b\x13\xa9\xbe\x9f\xda\xcf\x8d\x31\x62\x6c\x1c\xde\xed\xc1\x0c\xcf\xa6\x2e\x25\x62\x5e\x7e\x71\xcf\x3e\x32\x5e\x79\x26\x93\xdb\xda\x83\xca\x27\xb3\x54\x3d\x32\xbf\xb4\xfa\xc0\x4a\x2e\x30\x69\x41\x90\x05\xe4\x19\x34\x41\x8b\x3e\xe0\x22\x78\xe8\xa7\x19\x57\x26\xc2\xd4\xb2\x0e\x7f\x21\xa7\xf2\x4c\x5d\xc6\x92\x94\xfd\x59\xc9\x1c\x1c\xf4\x74\x45\xfe\x03\x80\x09\xf8\xf3\x3e\xff\x3f\xfa\x73\x75\x19\x6b\xfe\x36\xd4\xe1\x8e\xe7\x49\x7e\x9a\x26\xb7\xf1\x7f\x20\x5d\xc8\x39\x11\x02\x95\xb5\x69\xd6\xf5\x34\x19\xd8\x13\x3d\x83\x46\xc3\x6d\xa6\x13\x9c\xd5\x45\xd3\x31\x63\x94\x57\xaa\x7a\xa3\x0a\xa4\xd3\xd8\xc8\x30\x76\x17\x04\x2f\x74\xaf\xae\xa0\x56\xf3\xf8\x39\xc3\xd1\x58\x0e\x39\x95\xeb\x4a\x96\xe6\x78\xaf\xa1\x25\x3a\xdd\xd8\xd0\x8b\xc6\x86\xca\x05\x4b\xed\xbc\xd0\xed\x94\x86\xb9\xb1\x95\x7f\xda\x56\x5a\x8b\x95\xda\xf8\xa7\xfa\xda\x16\x6e\x58\xc4\x38\xf8\xba\x4b\x91\x5d\xad\xf1\x2d\x95\x17\x42\xa7\x48\xbc\xf8\xc0\xdf\x24\x8b\x36\x02\x18\xd2\xd1\x6a\x15\x9b\xbf\xaa\x7e\x19\xcb\x34\x05\xdf\x89\x6a\x7d\x57\xcd\x31\x22\xf5\xfa\x20\x36\x83\x4a\x5d\xc7\x8c\xf1\xe9\x99\xe5\x21\xe5\x2e\x29\xe9\xc1\xe3\xd8\xaa\xd2\xfb\x16\x56\x62\xdf\xaa\x00\x45\x55\x85\x1f\xf8\x66\x37\xb8\xbd\x5a\x3f\xcb\x2d\x56\x08\x80\x55\x52\xdc\xa8\xb0\xd3\x79\xc6\x5d\x4f\xca\x83\xf9\xbc\x9e\x74\xbb\xdc\x26\xa8\x35\xbe\xf9\xfd\x4e\xd0\xaa\xf5\xd7\x57\xad\x7f\x10\xcc\x62\x1e\x36\xa1\x17\xe8\xf5\xac\x2d\x5f\x1c\x01\xf7\x8b\x60\x26\x05\x4d\xa6\x1b\xab\x50\x9f\x57\xda\x6b\x89\x1f\x1a\x7b\x84\xbf\xc0\x22\x00\xf0\x96\x9e\x11\xc7\x7d\x77\xef\xa8\xc0\x36\x22\x4c\x2b\x9d\x5a\xd7\xa7\xb0\x4b\x60\xbf\x9d\x27\x8c\xe7\xa7\x8d\x81\xe4\xed\x73\x91\xba\x92\x81\xe7\xe5\x16\xe3\x5b\x52\x11\x5f\x1b\x25\x63\x09\x06\x44\xdf\xd7\xe7\x75\xc0\x37\xd6\x12\x3d\x65\x6a\x05\x1b\xf7\x47\xd6\x10\x38\x5c\xdf\x3e\x71\x64\x8e\xbc\x08\x81\xad\x1c\x92\x1b\x28\x12\xaa\xd7\x50\x65\x23\x65\xd2\xf5\x15\xe9\x04\x09\x36\x8b\xef\x1b\x7d\xa0\x96\x2e\xa2\xd6\x75\x1c\xb7\x12\xb6\x3d\x88\x4b\xd1\xe2\x71\x10\xab\x28\x0f\xcc\x96\x1e\x48\xcc\x1b\x32\x06\x0b\xf4\xa4\x41\xbe\x05\x52\x2b\x01\x63\x13\x4a\xc8\x13\x80\x28\x88\x70\x65\x2f\x2a\x52\xa0\xc7\x81\x54\x50\xde\x89\x71\x4d\x6c\x30\xcc\xa5\x2c\x4a\x18\x2f\x09\x84\x9c\xa9\x10\x12\x1e\x50\x7a\xd7\x5c\x75\x79\x7d\xab\x7c\x29\x8e\xc2\xca\xa3\xc0\x91\x59\x12\x42\x72\x17\x8a\xa9\x29\xe9\x3e\x7b\x68\x19\x80\x59\xfc\xea\x10\x63\x8a\xf3\x70\xa5\xda\x0a\x3f\x6b\xb9\x82\x8e\x7e\xfe\x9a\x81\x06\x08\x56\x8d\xfb\x55\xe3\x08\x8b\x6d\x42\xf2\x6e\x97\x82\x3f\x79\xe3\xf2\x25\xd3\xe9\x75\xf6\xda\xc9\x49\x4d\xe2\xb4\x96\x32\x96\xf9\xdc\xe1\x63\x99\x97\x07\x7b\x83\x3e\x78\x10\xd9\x59\x3c\x15\xd9\x7d\x5b\x5d\xed\xf5\xe8\x63\x3b\x7c\xd1\x0c\x10\x6d\x67\x83\x41\x26\xa9\xed\x3d\x83\xe7\x42\xdc\x1a\x01\x43\xb0\xcd\x03\x26\xeb\x7d\x9c\x61\x6f\x75\x02\xf3\x59\xd2\xed\x26\xdf\xd6\xc5\xe1\x6e\x37\xce\xc0\x61\x7b\x42\xe3\x04\xef\xa1\x06\x89\x79\x77\x17\x27\x64\x77\x0f\x61\x00\x60\x4f\x50\xa6\x2d\xde\x4f\x80\x07\xe5\xc1\xce\x25\xbe\xa7\x72\x9e\x4d\x07\x02\xdf\x31\x3e\x85\x64\x9a\x7c\x32\x60\x45\x80\xc6\x99\x93\x6c\x98\x8c\x3a\x2f\xb4\x83\xc5\x0b\xb5\x4a\x3d\xf5\xf1\x41\xa9\x0f\x83\x58\x3f\x25\x1c\xe7\x3d\x55\x09\x61\xa8\x28\xb1\xdf\xfa\x5c\x57\xb8\x4d\x55\xb6\xdf\x26\x64\x69\xe5\x3b\x10\x92\x1c\xca\xa0\x92\x22\xbb\x5d\x98\xa2\xfa\xd0\x57\xab\xe5\xce\x8e\x1e\x77\xe3\xd4\x35\x5c\x2f\xfa\x35\x19\x7c\x38\x42\xd5\x67\xb0\x89\x6c\x17\x1b\x47\x63\x91\xf6\x6a\x23\xf9\x76\x89\x9e\xf4\x3d\xab\x14\x44\xdb\x69\x04\x08\xab\xb7\x51\x09\xb3\x95\xa8\x14\xb9\x58\xee\x25\xaa\x8e\x44\xfa\x95\x14\xd5\x8f\x3b\xf5\xb9\xd0\x4e\xeb\x76\x65\xfb\x0d\xa4\xd5\x44\x6e\xa4\x5f\xf5\xb2\x92\x25\x27\x2b\xa3\xb0\x1d\xf2\xd1\x3e\x2c\xcc\x3d\xa4\xaa\x02\x62\x84\x94\x37\x90\xc7\x81\xf5\x34\x31\x22\xe8\xc1\x92\x43\x4a\x93\x98\x35\xb5\xb7\xb3\x83\x8a\xa2\x68\xb9\x12\x2e\x8b\x12\x59\x95\x16\xf0\x3e\x91\x93\x39\xe3\xb7\x4d\x3b\xdf\xe7\x87\x81\x82\x1b\xd7\x41\xa0\xf2\x90\x45\xc3\x90\x75\xd8\x99\x1e\xe9\x36\x24\x43\x03\x69\x11\xb6\x4a\xb7\xbb\xe7\xfe\x5e\xad\xe2\x8a\xbb\x0a\x50\xa0\xde\xb5\xb5\x19\x02\x54\x52\x5d\x10\xa1\x20\x71\xb5\xe8\x65\x37\x39\x15\x0f\x54\x00\x46\x60\x3b\x34\xe8\x33\x68\xac\x9c\xe8\x41\x86\x79\x1e\xac\xb3\xc2\x50\x8c\x3a\x3a\x12\xc9\x0f\x87\x9b\xe1\xc0\x32\x73\x3d\xf0\xc0\x3f\x60\x32\x4f\xf8\x2d\x05\xac\xaa\x8a\xf0\xa7\xc6\x4b\xf5\x78\xb9\x1f\xd4\x7a\x9c\x39\xbd\x8d\x6a\x28\x73\xa1\xb4\xe9\x77\x9a\x6f\xcf\xee\xb5\x49\x98\x1d\xca\xe8\xef\xad\x22\x81\xba\x08\xc3\xd5\x4a\x42\x06\x41\x70\x79\x5b\x04\x01\x6d\xd4\x63\xd6\x19\xe5\x4a\x6a\xec\xe6\x8d\xb1\x75\x78\x16\x3a\x68\xfa\x48\xbb\xa9\xb9\x06\x78\x69\xc2\xbd\x9a\x7b\xe1\x61\x66\x9d\x9b\x9a\x85\xc2\x20\x2f\xc7\x24\xa6\x28\x3c\xbd\xc3\x02\xb1\xad\x48\x20\x1f\x7f\xab\xf9\xa9\x01\xd5\x33\xbf\x88\x40\x58\x76\x54\x65\x15\x37\x2d\x6d\xe6\xae\x0b\x37\x73\xd3\x37\xd3\x30\xa4\x83\xf3\x77\x7a\xdf\x4f\xdd\x47\x70\x65\x0f\x5c\xb5\xa6\xe0\x53\x83\x45\x80\x6a\x73\xef\xed\x45\x76\x6c\x8c\x50\x17\x81\xb4\xcf\xbe\x23\xfd\x7d\xb6\xbb\x6b\xfd\x5f\xe8\x90\xe9\xc8\x4d\x4d\x73\x7a\x1f\x65\x66\xe7\x10\x18\x5c\x66\xb6\x4f\x18\x9b\x6d\x3d\xe8\x76\xf7\x0a\xa3\x28\x5b\xac\xd5\x13\xa6\x4d\xba\xeb\x4d\x5a\x42\x93\x94\xe9\xf9\xea\xc3\xda\x87\x81\x1d\xc1\xbf\x17\x4b\x9e\x66\xd9\xa2\x59\xdf\xe8\xbe\x5a\x64\xe9\xe3\x8c\xa5\x61\x3b\x54\x88\x4c\xd8\x7e\x7f\xfd\xa0\xf9\xe6\x33\x74\xf0\x41\x47\x17\x82\x4e\x12\x49\xa7\xbb\x33\x9a\xc8\xa5\xa0\xcd\x2a\x7c\xb0\xb9\x35\xab\x3e\x6d\x72\x26\x9c\x42\xd2\x89\x29\x9e\x7f\xb9\x32\xd4\xb8\x8f\x4d\xc9\x31\xc5\x14\x02\x88\xcc\xef\xe6\x90\x17\x93\x30\xe1\xd8\x3a\x3c\x52\x8d\xf7\x37\x99\x53\x75\x41\x7b\x08\x7e\x4f\xdf\xab\x66\xd4\xd3\x47\xa3\x67\x75\x9f\x8d\x31\xed\x25\x29\x4b\xf2\xa6\x6b\xd4\xcf\xe0\x28\x7c\x0a\xb0\x55\xaf\xb5\xe1\xca\x4d\x9d\x1d\x52\x4d\xf6\x6c\x1b\xb8\xc4\x4f\x93\x8c\xcf\xd8\xed\xd2\xa9\xbd\x43\x25\xf8\x1e\xce\x2b\x20\x0f\xd7\x06\x3e\x03\x72\xa6\xb4\xa8\xc8\xdf\xda\x6f\x50\x51\x40\xff\xd4\xed\x11\x52\xec\x5d\x52\x3d\x01\xe4\xad\xf9\xe3\x67\x26\xe7\x26\xfd\x4e\x4b\xc8\xe8\x5b\xea\x7c\x5c\xeb\x28\x08\x0e\x82\x8d\x17\x5a\x6f\x4d\xae\x55\xc5\x52\x3c\x56\x75\x22\xaa\x42\xf3\xed\xb5\x35\x1b\x6f\xf7\xa1\x77\xda\x7d\xf1\x50\x92\x07\x0a\x46\xc3\x45\x5a\x76\x50\x73\x61\xf4\xae\x79\x88\x9b\xbb\xa7\xa8\x53\x0e\xfc\xa6\xe8\xe0\xd1\x9b\xa4\x07\xae\x2e\x03\xcd\x5b\xf8\xda\xcf\xf8\x79\x22\xd9\x03\x85\x72\xe4\x51\xb5\x9b\x4c\xa7\xf0\xeb\xc2\x9c\xb6\x6d\xbd\xbf\xb5\x2d\x7c\xc0\x80\x12\x6b\x11\x84\x3f\xad\xf0\x89\x1d\x3c\xc4\x94\x1d\x65\x5c\x52\x2e\x7f\x66\x69\x7a\x04\x87\x29\x99\xd3\xca\xbb\x63\x36\x35\xaf\x16\xea\x15\x4d\x26\xf3\xb7\x22\xfb\xf8\x08\xcd\x06\x05\x1b\xa6\x0d\xb8\xec\x3b\xe7\x49\xeb\xf5\x5b\xdd\x2e\xd3\x6d\xf8\xf2\xae\x58\x51\x6b\xc4\xf7\xe0\xb3\xda\x70\xc5\x4b\x4d\x24\x53\x27\xae\x90\x0f\x98\xaa\x2b\x64\xf3\x05\xce\x92\x23\x18\x2b\xac\x51\x04\x05\x07\x54\x40\x96\xdb\x7b\x2e\xe7\x67\x4d\x36\x8c\x65\xc5\x97\xd8\x76\xd2\x86\x57\x02\x45\x96\xdd\x1d\xfe\xc2\xd4\xc0\x3a\xa4\x75\x11\x23\x9c\x11\xe9\x93\x62\x80\xd5\xd6\xf5\x51\xe7\x36\xc0\xcc\x13\x97\x9b\xa3\x13\xd8\x66\x5c\xe3\x45\x93\x0b\xe0\x88\xe7\x19\x6f\xf4\x7b\x37\x4e\xd6\x05\x7c\x74\x72\xbf\x90\x8f\xe4\x7b\xcd\x43\x5f\xa6\x09\xbf\x23\xef\x69\x87\x82\x96\x9f\xe6\xaa\xb2\x7a\x0d\xdb\xef\xa9\xb1\xe4\xdf\xd0\x5b\xc6\x2d\xdb\xd2\xcb\x98\x93\x09\x00\x10\xc3\x0f\xf3\x8a\xd1\x9c\x4c\x81\x3c\xf9\xb4\xfa\xf5\x4c\x3d\xe7\x99\x64\xb3\xc7\xf2\x2b\x92\x52\x60\xa1\x21\x67\x24\x57\xba\xa3\x26\x23\x81\x57\x70\x90\x3f\x55\x2d\xb0\x77\xd5\xc3\x63\x3a\xc9\x44\xa2\x9e\xbf\x84\x3a\xec\x67\xa7\x99\xf0\xaf\xce\xab\xaf\x5c\x2b\xc7\xfa\x44\x51\x12\x28\x0b\xea\x7a\xad\x79\x59\xed\xf9\xa9\x39\x3d\xe6\x09\xe3\xd7\xc9\x6d\x7e\x9a\x89\x1f\xe9\x23\xf9\x60\x78\x69\x30\x09\x4d\xde\xac\x4f\x05\xe6\x9e\x20\x30\x23\x7b\x70\xff\xae\xd2\x54\xb7\x5b\x66\x6a\x00\xa5\xc9\x48\x3f\x2c\x3c\xdc\x1b\xe9\xbb\xd9\x3e\xfb\xd6\x45\xbe\xb0\x9d\x1d\x24\x86\x7c\xc8\x46\x23\xcd\xb4\xd5\x9f\x41\x04\xbd\x1e\x54\x6b\x27\x03\x74\x98\xd5\xca\xba\x94\xbb\x4c\x68\x81\x54\x6a\xc5\x3b\x5a\xca\xe2\xe1\x64\x55\xec\x60\x28\xee\xe8\xa3\xda\x6e\x98\x29\xa1\xae\xd2\x4f\xa2\x3a\x87\xe1\x24\x10\x58\x6d\x15\xb0\xe4\x4a\xe0\x3a\x1f\x17\x89\x23\x1f\xd5\xcf\x0b\x4d\x1f\x15\xeb\x91\x93\x52\x01\x2b\xa6\x85\x23\x28\x41\xbf\xc1\x64\x14\xd7\xd2\xd5\x69\x63\x75\xfd\x3b\x1c\xb6\x77\xd8\xcb\xd9\x9f\x54\xdd\xa6\x0f\x7b\x3a\xad\xa5\x6a\xed\xce\x3d\xbd\xf3\x4f\x0b\xc5\x0e\x74\x12\x51\xef\xe5\x61\xc6\x10\x61\x89\x5f\x51\x40\xfe\xd2\x1c\xd0\x9d\x1a\x6f\xb1\xce\x65\xf5\x90\x48\xea\x1e\x5e\x3b\x2e\xe0\x1e\x5d\x62\xda\x9b\xa5\xcb\x7c\x7e\x98\x3f\xf2\x89\x7d\x5c\xb9\xf7\x96\xaf\x62\x36\x95\x00\xcc\x97\xc1\xe5\x45\x71\xde\x3b\x7a\x77\x79\x79\xa2\x61\x60\x61\xe2\x8e\x02\x78\xa0\xce\x11\x91\xf8\xae\x41\xdf\x17\x64\x95\xad\xf0\x63\x8e\x3a\xa0\x1e\x6b\x9c\xf4\xd5\x8a\xd5\xad\x7d\xe8\xc0\x4d\x1b\x47\x03\xd9\xd8\x9a\xc1\xa1\xb7\x3d\x67\x26\x5f\xac\x01\xd7\x4b\x93\x5c\x5e\xd2\x07\xa6\x04\x5e\x17\x16\x19\x9a\xc3\xc4\xe3\xd3\x05\x44\x1b\x0e\xb9\xba\x7e\x27\x72\x3e\x32\x6e\xdd\x98\xa1\x62\xc6\x78\x92\xa6\x8f\x4f\xd2\x02\xf8\xe5\x1e\xc0\xef\x03\x8d\x6d\x11\x45\x9e\xa5\xa6\x4a\x13\xa9\xd3\x1c\x17\x45\x87\x1e\x54\x57\xdd\x64\xa4\x8f\x70\x86\x06\x59\xac\x44\x32\x48\x76\x87\x69\xef\xbe\xa6\xa9\xf7\xd8\x2c\xb5\xa3\x46\x84\x19\x3b\xbf\xdb\x3b\x90\xbb\x7b\x83\x3e\xc2\x9c\xec\xed\xf3\x6f\x25\xe8\x27\xc4\x90\xef\xee\x85\x87\x0e\x77\x4e\x50\x0f\x52\xdf\xc6\xa8\x16\xb8\xaa\x52\xca\x5f\x7c\xc8\x19\x88\x6b\x73\xd4\x75\x1a\x50\x03\x96\x07\x31\x23\x4b\x9c\x10\x89\x73\xb2\x9d\x59\xd0\xd6\xd3\xc3\x77\xaf\xaf\xc7\x87\x57\xbf\x9e\x1f\x8d\x2f\x5e\x5e\x9d\x5c\xbe\x3f\xb9\xbc\x42\x03\xf5\x6d\x6f\xc6\x71\x42\x96\x4a\xd6\xa6\x7c\x4a\xb9\xfc\x91\x3e\xe6\x38\x27\x4b\xd0\x4c\x7a\x55\x55\x4a\x86\x23\x3c\x69\x3a\x0f\x53\x1b\x21\x54\xe0\x19\xe9\xef\xcf\xbe\xb5\x98\x3e\xfb\x3b\x3b\x33\x74\x41\xe3\x64\x38\x1b\xe1\x09\xaa\x1c\xcb\x6e\x7b\xa9\x63\xf9\x49\x91\x42\x3e\x48\xb5\x4e\x35\x2f\xcc\x29\x0d\xbe\x78\xda\xf0\xf2\x20\xd5\xa1\xc2\x15\x07\xfc\x9b\x97\x56\x4f\x75\x86\x13\xf2\x67\x2c\x10\xce\x49\x62\x0d\x0b\x62\xd8\x1f\xe1\x25\x89\x93\xd5\x4a\x0c\xf7\x46\xb8\xee\x51\x07\xe9\x42\x6f\xa9\xbc\x30\x51\x32\x3e\xa9\x35\x00\x7c\x01\x3a\x8a\xf7\x4d\x30\x2e\xeb\x74\x27\x1a\x44\x3b\x71\xbe\x5a\x49\x84\x2d\xb4\x0e\x0b\xa2\x3c\xb2\x02\x15\xa8\xd3\x37\x61\x0d\xc7\x34\x7e\xd2\xd9\x37\xf3\x1a\x42\xc1\x95\x45\x01\xd4\x3e\xc7\x10\xa4\x69\xdb\x4b\x0e\xd2\x18\x46\x00\x7d\x17\xc3\x17\x23\x34\x48\x0b\x9d\x0f\x3a\x3c\xbd\x19\x75\x3e\x83\xd7\xe5\x37\x19\x75\x5f\xd7\x4f\xb9\x75\xe1\x52\x56\xca\x0c\x2c\x1f\xc0\xe0\xee\xcd\xd1\x32\x00\xad\xd3\x36\x6f\x60\x63\xce\x83\x30\x30\x97\xfa\x8c\x74\x79\x25\x13\x14\xed\xdd\x27\xe2\x4e\x1f\x94\x87\xf9\x31\x53\xbd\x4e\x60\x3c\x19\xcf\x97\xf7\x94\xfc\xd6\xa1\x3a\x59\x16\x9d\x92\xaf\xb0\xf9\x9b\xfc\x80\xa9\xcd\xc7\x45\xa4\x16\x91\x6c\xb2\x2e\x42\xcd\x2d\xa6\x39\xc6\xe7\x2b\x55\x70\x21\xb2\x09\xcd\x73\xea\xbf\xc9\xc9\x76\x1f\xff\x42\xfd\xce\x30\x51\x62\xd7\xd9\x15\x38\x34\x12\xa1\xc8\x79\xc6\x78\x4b\xb5\x3f\xd2\xd5\x4a\x06\x10\xff\x3f\x50\x30\x65\x56\x8a\xe4\xe4\x37\xd5\x39\xd3\xbc\xaf\x89\x4a\xff\xf4\x30\x4d\x83\xef\xa5\x74\xa7\xde\xba\x98\x25\xd8\xa3\xb7\x1a\xc7\x14\x8e\x7e\x93\x6d\xfa\x07\x3a\x94\x23\x35\x2e\xa3\xf3\xfe\xc5\xc7\x33\x51\x04\xd6\x95\x2d\xc6\xb7\x32\xa0\x75\xfa\xd1\x06\x45\x76\xbb\x94\x10\x52\x7d\x3a\x94\x23\x30\xce\xd4\x9e\x1a\x2a\x41\x5a\xc0\x76\xdd\xbc\xa2\x89\x98\xcc\x8f\x75\x3a\xb5\x26\x77\x8e\x1f\xa9\x91\xc5\x36\x16\x81\x09\x26\x56\xa7\xa1\x97\xe7\xfc\xf0\xcd\xc9\xd5\xdb\xc3\xa3\x93\xab\xf1\xcb\x5f\xc7\x67\xc7\x24\x7c\x44\x02\x5d\xc4\x9b\xa5\x04\xac\xe2\xfc\x8c\x1f\x2e\x65\x26\x0d\x9d\x5c\x8b\x84\xe7\xfa\x4c\x22\xb4\x27\x96\x7c\xdd\x6b\x20\x2e\x2a\x08\xed\x1d\xbd\xbb\xba\xbe\x78\xa3\x88\x77\x7c\x7a\x71\x49\x68\x4f\x23\x6c\x9f\x9d\xff\x70\x72\x74\x7d\x76\x71\x3e\x3e\x7d\x77\x7e\xa4\x93\xcf\x18\xdd\xc9\x1b\xad\x97\xa3\x3d\xcd\x17\x69\xaf\xcc\xd5\x09\xed\x1d\xd6\x9e\xbc\x66\x37\x22\x11\x4a\xe8\xa3\xbd\x34\xf8\xfb\xed\xe5\xc5\xdb\x93\xcb\xeb\x5f\xc7\xc7\x67\xc7\xe3\xa3\xef\x0f\xcf\x5f\x9d\xe8\xa7\xbf\xfc\x3a\x3e\xba\x38\xbf\x3e\x39\xbf\x56\x7d\x34\xaa\x21\xc7\x07\x68\x6f\x7c\x9b\x66\x37\x49\xea\xb5\x46\x81\x7f\xdc\xa2\x14\x5c\x7f\xdf\xac\xc9\x7d\xf0\xc4\xb6\x58\x1f\x8b\x6a\x03\xed\x17\xa5\x68\x53\x57\xd1\x63\x78\x17\x58\x34\x69\x7e\x7d\x40\xa9\xf1\x46\xf1\x85\x6f\xcb\x3a\x99\xfb\xf2\x3d\xdb\xa9\x44\x6c\x17\xee\x4d\x17\x38\x42\xfa\x0c\xab\x64\x34\xba\x09\xfb\x72\x5f\xeb\x4b\x08\x89\xd9\x77\x78\x98\xc6\x43\xa6\x3a\x78\x7e\xd0\x1f\x70\x5f\xf5\x38\x38\x70\xed\x28\xfd\xdb\x0f\x30\x0e\xa3\x29\x0c\x64\xd4\xa4\xdb\x8d\x13\x9d\x76\x6c\xb5\x6a\x48\xc4\xcc\x57\xab\x98\x11\x6e\x30\x02\x11\x2e\x31\xe5\x8a\x0d\x39\xd6\x0d\x40\x8e\x43\x48\x9b\xe8\x5a\x3f\xb1\xad\xdb\x6c\xbf\x49\xa7\x76\x18\xf0\x83\x38\x23\x4a\xd2\x60\x68\xa0\xfe\x52\xa7\x53\x42\x78\xb5\xc9\x06\x7b\x73\x2c\x71\xb9\xb9\x0b\x3f\xd8\x40\x63\x4f\x5c\x7c\x67\xe2\x8f\x99\xec\xa0\xa6\xd7\x18\x64\x1d\x0d\x00\xb2\x4d\x48\x72\x90\x34\x6a\x32\x6c\x24\x41\xa9\xf2\xd5\x0a\xfe\xb1\x59\x71\xdc\x45\xc7\x0a\x20\xb9\x7b\xb7\xfb\xcd\x7e\xfe\x1d\xe9\xef\xe7\xbb\xe4\x1b\xdd\xa5\x25\x61\xc3\x7c\x84\x53\xf5\xcf\xce\x9e\x92\xa3\xd4\x1f\x2f\x46\x9d\xb4\xdb\x8d\x27\xdd\xae\x9e\xc1\x25\x4e\x11\x5e\xae\x56\xf1\x92\x50\x84\x6b\xae\xef\xea\xdb\x94\x2c\x87\xe9\x08\xe1\xd4\xa5\x8d\xf6\x06\xa0\xed\x00\xdb\xef\x2a\x04\xcc\xd9\x71\xb6\x24\x30\x49\x7c\xdc\x24\x18\xe2\x43\x4b\xf1\x9d\x1a\x77\x39\x04\xba\xbd\x73\x1f\xb8\x16\xdf\x86\xab\xe2\x17\x40\xb1\x78\xf2\x11\x99\xf4\x71\x57\x8a\xd2\x15\xb1\x26\x9a\x96\xf6\x70\x86\x42\x6f\xd9\xd2\x75\xd3\x2c\x52\xde\xed\xc6\x79\xd5\x6b\x32\xa6\x68\xb5\xca\x2b\x0e\x98\x90\x0e\xfd\x1a\x6a\xcf\x02\x7a\xb9\x7c\x6e\xcf\xf0\x5f\xd7\x8b\x9a\xce\xd7\x31\x00\xc0\x39\xb3\x4e\x0e\x9c\xe8\x94\xa1\x07\x87\x83\x3b\x97\x0c\xbf\x2d\x6a\x99\x59\x56\x91\x69\x5f\xe3\xdd\x5d\xdc\x37\xe7\xea\x92\x4b\xb8\x1d\x9a\x0b\x9f\x44\x58\xd3\xaa\xba\x41\x77\xbb\xdc\xdf\x9f\x51\x51\x98\xf9\xc1\x27\x76\x19\x82\xa9\xba\xde\xd8\xdf\x26\x0d\xcc\xb6\x96\xe8\x0e\x07\x77\x5e\xb4\x9d\x27\x39\xcc\x8e\xb0\x2c\xd3\x38\x02\xe9\x84\x59\xfa\x26\x6f\x83\x86\xad\x83\x9e\xf5\x16\xd4\x03\xda\xd9\xf1\xd6\x78\x46\xa4\x45\xdd\x1b\x44\x48\xc9\xb0\x59\xfd\x46\x49\x31\x43\xa8\x63\xf9\xf2\x13\x54\x32\xd8\xc3\xea\x66\x31\x60\x18\x80\x7b\x70\x78\xd1\x1c\x84\x17\xcd\x0c\xe1\x7c\x99\xc3\x15\x68\x3a\xd8\xde\x2b\x50\x51\xd4\x0f\xd2\x3b\x98\x84\xa3\x30\x9b\xde\x9b\x18\x3d\x1d\x36\x5c\xae\xdb\x55\xab\x12\x75\xe0\x54\x69\xb9\xca\x37\xc9\xc0\x07\x87\x7e\x65\x07\xb4\xb1\x35\x73\x95\xa7\x3d\x37\x8a\x6e\xb7\x7a\xb1\xd7\xb8\xdc\xb4\x72\xb1\x57\xd7\xf8\xa0\x98\x12\x5c\x2f\x40\xb3\x3f\x04\x29\x32\xbc\xd5\x73\x7f\xab\xa7\xcd\xb7\x7a\x5b\x04\xd2\x84\xb7\xde\xea\xa9\x4e\x7c\x53\x6a\x75\xcf\x5e\xe0\xdd\xd4\xfe\x5e\x3e\x9c\x0f\x83\xcd\x51\x71\x30\x55\x9b\xd7\x2a\x48\x7c\x95\xc2\x24\xf2\x3e\x6b\x96\x40\x8e\x35\x5b\xb0\x35\x05\x07\x6f\xfd\xcc\xe0\x0d\x30\xa1\x5b\xac\xea\xc7\x56\x12\x2d\xce\x03\x0e\x7c\x56\x3b\xb0\x5f\x57\xf4\xc9\xdb\xe4\xff\xa5\xee\x5d\xfb\xdb\xc6\xb1\x3c\xe1\xf7\xfa\x14\x36\x67\x7e\x6c\x62\x05\x2b\x72\xcf\x3c\xb3\xbb\x72\x50\x5a\x57\x92\x9a\x4e\x77\x55\x25\x9d\xa4\xfa\xa6\xd6\x6a\x68\x09\xb2\xd0\xa1\x49\x15\x08\xda\x71\x5b\xfc\xee\xcf\x0f\x07\x77\x12\x92\xe5\x54\xd2\x3d\x5b\x2f\x2a\x16\x89\x3b\x81\x83\x73\xfd\x1f\x9a\xa6\xaf\xf5\xa9\xf1\x50\x57\xf5\x3e\x0a\x39\x22\x79\x9f\xbf\x8e\x98\xc0\xff\x9e\xed\x01\x00\xa6\xb3\x5f\x5b\x8d\xc5\xbf\x81\xcb\xbd\xd1\x89\x66\x11\x1d\x82\xa7\xa7\x74\xcf\xac\x2c\x27\x50\x24\x2a\x4b\x52\x89\xfe\x95\x6f\xeb\x94\x69\x9a\x38\xf3\x5b\xc2\x4a\xf9\x2e\xf1\x0d\x74\xf0\x6c\xb7\xf3\x2c\x61\x6e\x5a\xdf\x7a\x96\xfd\x1e\xd3\x4f\x5b\x33\xb1\xef\x00\x8c\x08\xbe\xf8\x4f\x7b\x22\x29\x4c\x9e\x74\x3b\x14\x9b\x66\xd6\x1f\x8b\x7d\xb8\x08\x74\x22\x9d\xb0\x08\x2a\x72\x3f\xfa\x60\x0f\xb2\x50\x4d\x45\xb3\x8d\x18\x76\xca\xbe\xf3\xa1\x8a\xe3\x04\xb0\x0c\x41\x73\xbe\xaa\xee\xfa\xc0\xac\x11\xb7\x46\xb9\xe9\x3a\x98\xdb\xbf\x09\x4c\xb7\xb1\x50\x1f\xa0\xb3\x3a\x40\xd0\x2d\xf4\x1f\xa2\xc8\x7b\x3c\x0c\x3c\x32\xfa\x05\x8e\xec\xca\xff\x6c\x9c\x49\x39\x2c\xc5\xcf\x44\xe1\x84\x2d\xe4\x91\x7b\x4f\x85\x1b\xd8\x1f\x7d\xb2\xe8\x6b\x3d\x7d\xa0\xec\x7f\x8b\x28\xef\x7d\x6d\x81\x90\x2c\x1c\x55\x2b\xab\xeb\xe6\x86\x89\xf0\x23\x9d\xa8\xf7\x9d\x71\x60\x0c\xa6\xc1\xe7\x06\x63\xef\x6f\xb2\x12\x12\xb5\x52\x31\xf9\x03\xfc\x69\x27\x57\x7b\x1b\x0c\xca\x68\x2d\x7c\x1d\x38\xac\x28\x75\xa6\xf9\x8d\x70\x09\x2b\xf1\x9f\xf8\xcf\x83\x47\x64\xc1\xff\xc4\x4f\x13\x2d\xff\x0c\x33\xfd\xdd\xe1\x0d\x0e\xe1\x38\xda\xb5\xd4\x41\xc9\x13\xeb\x94\xb2\x27\x54\x26\x5f\xad\xfa\x4e\xb2\xb2\x2d\xed\x08\xed\x35\x05\x8e\xe5\x9a\xf0\x77\xdc\xfa\xac\xa3\x1d\xd4\x94\x1c\x08\x8a\x2a\x6b\x24\x49\x3d\xdf\x5b\xd6\x76\xa5\x5d\x01\x67\xf3\x00\x17\x09\xca\x47\x54\xda\x5e\x1c\x2f\xa8\x5e\x04\xd8\x3f\xc2\x6b\x4a\xca\xfb\x07\x1c\xa5\xe4\x28\xf6\x24\xe3\x3c\x09\xc7\x1a\xc9\xc3\xf9\xaf\x5f\x50\xe5\x2b\xef\xf3\xbf\xcb\x9b\xcd\xfa\x90\x8d\xe7\x92\x49\x9c\x96\x90\xa8\x1b\xf8\x4d\x17\x02\x5d\xc1\x0b\xe5\xe2\x61\x90\x58\xe3\xbe\x1c\xbf\xcf\x66\xe0\x20\xe1\x37\xc2\x3c\x96\xd5\x16\xac\xe4\x04\xbd\xed\x9f\x23\x9c\xb7\xb6\x11\xff\xe6\xf9\xbd\xdc\x2e\xf2\xce\x19\x98\xeb\xe7\x5c\x5d\x3f\xbf\x96\x23\xe6\x53\xbe\x67\xc4\x9e\x9e\x20\x8f\x81\xe0\x32\x93\xf5\x21\x8c\x60\xec\xba\x76\xc4\x7c\xda\x30\x27\xcc\xa6\xb2\x31\x73\xf8\x0b\xc0\x21\xa5\xe9\x69\xa5\x78\x4e\x49\x70\xa7\x19\x25\xcc\x85\x5a\x23\x5c\x79\x64\x0e\xa1\x09\x25\x95\xa5\x97\x08\x67\x5d\xd7\x08\xc8\x24\x59\x82\x25\xf8\x8a\x72\x78\x2a\xb7\x98\x42\xe6\xad\x6d\x56\x7d\x8e\x99\xe4\x50\x93\xd9\x3c\x51\x71\x19\x5d\x07\x94\xdc\x0e\x36\x1c\x80\x01\x39\xe1\x34\x4d\xb9\xc2\x7b\x74\xfa\xa3\xdf\xc1\x7a\xff\x49\xa1\xc7\xd8\xaf\xf1\x5b\x77\x61\xfe\x49\x2b\xc1\x7f\x37\xf8\x13\xe1\x03\x60\xf5\x32\xc7\xc4\x8d\xf1\x9f\x88\xb0\xa8\x46\xe6\x84\x64\xde\x87\xfd\x8b\x97\x11\xf8\x4f\x69\xfa\x27\x13\x12\xe1\x68\x0e\xcd\xba\xf9\x66\xff\xe4\xde\x82\xcc\x61\x86\x32\xd0\xe3\xec\x8e\x42\x8e\x41\x91\x25\x93\x82\x8b\x2a\x05\xa4\x8d\x9d\x0c\x95\x64\x89\x77\xde\x18\x0d\x80\x8d\xb4\xe2\xd9\x24\x26\xf3\x36\x14\xe1\x3e\x57\x23\xc5\x1a\x9b\x12\x37\xb2\xef\xe8\xac\xa4\xf3\x29\xfc\x1f\xee\x1b\xd5\xcb\xa4\xa3\x6d\xb6\xa3\x50\xef\x3d\xe3\x5d\x97\x99\xb4\x7a\xee\x12\x05\x61\x46\xe0\xaf\xc0\x66\x42\x79\xe3\x19\xda\x57\x69\x99\x54\x91\xad\x58\x64\x8f\x43\xe5\x15\x73\x92\xbb\x81\xe4\xf4\x30\x53\xeb\xc6\x21\xfb\xf5\x23\x83\x32\xcf\xb9\xa4\xd2\x7b\x57\x67\xf7\xaa\x4c\xb2\xf4\xa0\x82\x1c\x7b\x41\x6c\x9d\x66\xda\xcc\xc4\x7c\x62\xd4\x80\x16\x51\x29\x6c\xaa\xf0\x92\xa2\x56\x06\x9f\x9f\x10\x52\xec\x76\xf9\xe8\x2a\x5f\x7e\xbc\x6a\x78\x49\xf9\x88\x96\x75\xc3\x5d\xae\x57\xd4\xf6\x14\xa5\xa5\xca\x75\x52\x77\xb7\x4a\x44\xa3\x09\x01\xb7\x31\x4d\x67\xad\xda\x68\xa8\x2f\xd0\x15\xb4\xa3\xcd\x7a\x4c\x32\xd0\xfb\x08\xf4\x09\x3d\x55\xc0\x6e\x57\x45\x94\x06\x92\x68\xb8\x6a\xfa\xa3\x55\x08\x37\xf4\x39\x19\xa7\xe9\x0f\x90\x0c\xf6\x84\x41\x32\xad\xec\xdf\x63\xfc\x10\x9d\xd5\x72\x6b\x62\x86\x26\xfa\x4f\xe4\x8b\x4e\x72\xcd\x1e\x1a\x3a\x1c\xba\x47\x6b\xf9\xe8\xec\xcc\x75\xe1\x25\x62\x87\x53\x2a\xeb\xf4\xce\xe6\x1a\x28\x8e\x73\xb2\xf5\x90\x49\x7a\xda\xda\x69\x26\xc8\x58\xd2\x1b\x72\x76\x8e\x26\x59\x47\x85\x70\x76\xee\x7d\x7b\xa5\x56\x3d\x3b\x47\x08\xbf\x91\x54\xf1\xff\x28\x08\xf0\x2b\xba\xae\x38\x4d\xf0\x4c\x77\x02\xd7\xab\xed\x7c\x4b\x0f\x28\x72\xa4\x4c\xd4\x1d\x4a\x49\x58\x67\x28\xb6\x5f\xdc\x89\x3a\x91\x43\x71\xa7\xae\xa3\x02\x92\x3d\x64\xec\xf9\x78\xb7\x2b\xe5\xff\xd8\x59\x79\x4a\xc6\x28\x4d\x61\xab\x24\xea\x8b\x24\x38\x47\xb8\x30\x24\x1e\xe7\x9d\x99\x69\xfd\x9b\x9a\x19\xa4\x26\xd1\x1c\xeb\xa2\xab\xee\xa9\x8d\xc6\x50\x79\x85\x4f\xc7\x93\x12\x17\xce\x99\x37\xcb\xe0\x39\x9b\x8e\x27\x0c\x9d\x35\x08\x2f\x89\x78\x3e\x9e\x16\x43\xa1\x6c\x68\xb5\x02\x33\x5e\x33\x5e\x0b\xc5\xa9\x26\x28\x4d\xe5\x44\x97\x66\xc0\xfe\x3b\x39\x6a\x5d\x45\x32\x5b\xa6\x06\x2a\xce\xce\x9f\x2f\x87\x8d\x9d\x63\xee\xd7\x70\x4e\xdd\x72\xa4\x37\xd4\x38\xa6\xac\x39\xa5\x7f\xa7\xd9\x6c\xee\x11\xe8\x5b\x1a\xf0\x1e\x3d\xc7\x42\x2a\xa9\x86\xf3\x55\x0c\xb8\x0a\xcf\xe9\x50\x32\x96\x6e\xf3\x19\x1d\xac\xfd\xeb\x39\xf9\x0f\xfa\xef\xc8\x98\xa5\xb4\x6e\x94\xe2\x99\xc0\x7c\x6e\x52\x03\x94\x48\x07\xea\x58\xeb\x15\xc4\x0f\x39\x87\xe9\x8e\x37\x0d\x34\xa9\x49\x40\xa9\x61\xf8\x18\x66\x43\xf9\x78\x10\xe9\x6a\xc8\xf0\xd8\x76\x56\x21\xd4\xb6\xdb\xde\x80\x3d\xcb\x03\x0d\x62\xa0\xa0\x17\x9e\xa6\x1c\x92\xe2\x2a\x07\xae\xdd\x2e\xe9\x78\x11\x26\x38\x57\x85\x56\xc6\xe9\xcf\x94\xb1\x5e\x80\x09\xae\x09\xb8\xfb\x05\x7e\x93\x36\x6f\x61\x19\x39\x6d\x40\x7a\xca\xc8\x66\x15\xb0\x3b\xd4\x19\x51\xfb\xa0\xd7\x6e\x12\x9c\xd0\xab\xee\x3d\xd8\x3d\x4a\xb8\x32\xaa\x77\x36\x65\xf1\x60\x4f\xa7\x7e\x0f\x8e\x45\x85\x3c\x7f\xc4\x88\x23\x55\x99\xa6\x31\xfb\x86\x0d\xcd\xc8\xc1\x30\x89\xb4\x1d\x13\xa2\xb4\xe4\x66\x38\x31\xef\x1b\xf5\x5e\x27\xd8\xae\x66\xcd\xfc\x22\xe0\xdf\x0a\x1c\xf1\x60\x69\x10\x42\xd8\x36\xd9\xcc\x3d\x4a\xb9\xa0\xdd\x88\xe5\xd9\x1c\x47\xc2\x7d\x54\x80\x9c\xde\x46\x1c\x83\x1a\x53\xcc\xca\xb9\x87\xd6\xeb\x99\x79\x3a\x8d\x02\x29\x94\x0d\xe7\x84\x82\x5f\x88\x16\x33\x0a\x72\x76\x7e\xa1\x83\x11\x97\x36\xa1\x84\x0f\x2f\xe8\xaf\xa0\xa4\x0c\xfe\xda\x91\x25\xba\xe2\x34\x57\xca\xce\x35\x29\x86\xe7\x2a\xc8\x8e\x10\x92\x15\xc4\x8b\x50\x19\x25\x78\x0d\x8c\x6e\x41\x1a\x84\x93\xff\x43\xf3\xe5\x46\x32\x57\x59\x49\x84\x3e\x30\x6b\x5c\xc8\x12\x80\xd2\x87\x1e\xa0\x31\xdc\x6f\x03\x7a\x5a\x11\xe3\x37\x22\xbb\x4b\xca\x46\xf2\xd3\xee\x53\xae\x76\xbb\x4e\x3e\xaa\x1c\xa5\xe9\xa9\x51\x3b\x5d\x8a\x84\x95\x27\x39\xd2\x43\xd7\x72\xe8\x0a\x3d\xe8\x68\x3e\x46\xb3\x5c\x73\xdf\x03\x28\xd2\x96\x8a\xc2\x16\x53\x3b\x56\x34\xf1\x87\x6d\x29\xc3\x86\x8c\x2f\x36\xcf\x57\x17\x1b\x13\xce\xb3\x25\xb7\xb2\xb5\x0d\x1a\x6c\xd3\xd4\xb5\xbf\x05\x5b\xcc\xde\xfe\x80\x56\x12\x78\x5e\x02\xc9\x67\xe4\x25\xfc\x8d\x75\x95\x1b\xff\x56\xda\xed\x8c\x92\xcd\xae\x00\x1b\xe5\x85\xf8\x1d\xbd\x07\x62\x08\xe0\x94\x6e\xb2\x9e\x0d\x2c\x27\xa5\xdc\xcb\x79\xd4\xe0\x97\x8f\x9a\xf2\x63\x59\xdd\x59\xa7\xd3\x69\x3e\x2b\xe7\x93\xde\xe3\xac\xf4\xa2\x1a\x6f\xc9\x95\x1d\x74\x57\xa7\x7c\x83\x6f\xb5\x80\x7a\x4f\x3c\x16\x33\x47\xf1\x58\xf2\xac\x44\xf8\x5a\xee\x8e\xe6\xaa\x16\x3c\x2b\x86\xe7\x08\xdf\x91\xfb\xd9\xf5\xdc\xd9\x5c\xef\xd2\x34\x53\xcf\x0e\x70\xc0\x76\xd5\xee\xcc\xfa\xe6\x64\x21\xbb\x95\xa2\x5a\x89\xda\x16\x4e\x37\x5b\x67\x39\xc9\x21\x01\xa4\x5b\xaf\xd6\x8a\xb7\x72\xd8\xaf\x28\x79\xf6\xd7\x11\xec\xdd\x7f\x7d\xe6\x25\x2a\xa5\x61\x36\x01\xbb\x61\x1f\x12\x34\xe0\xcf\xc7\x53\x91\x39\x3f\xf8\x57\x14\x27\x23\xf8\xd6\x13\x4f\x19\x13\x52\x77\x9c\xe3\x9a\x70\xd7\x4e\x9b\x20\xdc\x90\x31\x2e\x08\xd7\xab\x21\x19\xc6\x72\x78\x8e\x6b\x64\x6c\x1d\x38\x91\xf7\xbb\xff\xbe\x1e\x9e\xa3\x81\x18\x06\xcf\xc6\x72\x0f\xe5\xc4\xa0\xf4\x2b\x07\xd6\xe6\x79\x7e\x81\xb2\x8a\x2c\x83\x91\xa3\xe7\xe3\x29\xcb\x32\x31\x2c\x66\xcd\x70\x38\x1f\x2e\x51\x6c\x0e\xd4\x16\xc0\x4b\x5c\x61\x86\xda\x2c\x49\x30\x78\x94\x7a\x37\xd8\xfb\x43\xec\x58\x20\x6d\x18\xce\xea\xa5\xe5\x73\x9d\xdc\x90\x0f\x9a\x34\xcd\xad\xc6\x53\x97\x50\x9e\x4e\x2a\xd8\x85\x9c\x8e\x2f\x32\x4a\x08\x51\xa7\xdf\xea\xad\xd2\x34\x5b\x91\xd3\x73\x84\xbf\x97\x57\xfb\x34\x5b\x12\x55\xdb\x68\x17\xf6\x63\x23\x09\xbc\x94\xb2\x4b\xa9\x32\x43\x03\x5f\x5f\x10\x86\x9b\xdd\xee\x54\x52\x84\xd5\xf4\xf3\xa2\x4a\x56\xd8\x6c\x79\xf9\x42\x69\x62\x8a\x56\x32\xe8\x62\x0e\x66\xef\x82\x94\x07\xc6\x24\xf9\x93\x98\xb0\xb0\xdb\x65\x6b\x42\xf1\x47\xe0\xd2\xd6\x28\x4d\x3f\xc2\x1e\x5f\xa3\x98\x1d\x08\xed\x33\xcc\xac\x9f\x60\x98\x69\x11\xc2\x97\xb6\xbb\xcb\x7f\x40\x77\x08\xc7\x84\x70\xc9\xe6\xbc\x0c\x16\x2a\x4d\x23\x0f\x61\xf5\x0a\x95\xe7\xef\x93\x4a\xcc\x50\x8e\x20\xe6\x28\x3b\xa7\xff\x86\xe3\xa9\xa3\xbc\x0b\x48\x0e\xc0\x4b\x58\x49\x3d\x04\xf0\x1e\xfa\x9c\x8e\xa4\xfe\x64\x22\x32\xa0\xd3\x8f\x11\x21\xd4\x39\xd0\xf8\xea\x8a\xb7\x3e\x55\xc1\xcc\x36\x8b\x2b\xe2\x29\x27\x58\x47\x19\x46\x18\xae\x49\xb5\xdb\xe5\x86\x25\xb8\xa4\x99\x40\xd3\x7a\xfa\x4e\xeb\x25\xb4\x7b\xa2\xbb\x05\x32\x4e\xe4\xae\x43\x69\x5a\xc9\x3b\x12\xbc\xb2\x28\xf2\xaf\x79\x6f\x95\x3b\xa4\x1f\xa4\xb5\xde\x53\x29\x60\xe2\x3a\x4d\x29\xcd\xe4\x8d\xff\x97\x4c\x6b\x5e\x7a\x1a\x31\x1e\xd7\x88\x71\xc9\x06\x40\x2d\x6e\x94\x60\xba\x14\x44\xc2\xc8\x02\xee\xfd\x52\xc5\xe6\x24\x80\x6b\xe0\x5b\xf2\x7b\x4c\x15\xc5\x25\xe9\x7d\x25\x31\xb5\xd6\xe2\x51\x82\x26\x22\xe6\x29\xef\xfc\xf2\xf9\x6e\xc7\x47\xac\xb6\xf6\x56\xe3\xa4\xcd\xc9\x5b\x80\x37\x9c\xb1\x39\x6a\xfb\xbc\x98\x8d\xb6\x62\xc6\xf2\xea\xb7\x21\x1f\xc1\x57\x32\x3a\x9d\x17\xae\xb8\x05\x11\x83\x05\x50\x6e\x6f\xce\xa0\x83\x60\x8a\xd8\x01\x5e\x1b\xe7\xd3\x7c\x54\x53\xd1\x8b\xb1\xa9\xd3\xf4\x67\x38\xaa\xa0\xc8\x94\x94\x86\x63\x6e\x45\xde\x53\x42\xb2\x4a\x6d\x85\x08\xcf\x4c\x77\x3b\xb5\x33\xa2\xac\x02\x98\x58\x7e\xea\x70\x0b\xa6\x0b\x1d\x02\xab\x53\x5e\xa0\x49\xac\x30\xc8\x57\x10\x2c\x67\x17\xed\x05\xed\xc6\x36\xf9\x5f\x0a\x74\x52\x2a\x8a\x27\x27\xef\x94\x41\xdf\x19\x5e\x2d\x3a\xf8\x07\xc9\x42\x55\xda\x79\xe0\xb4\xf4\x72\x11\x16\x36\x17\xe1\xaf\xcc\x20\x4e\x6a\x2a\x4e\xd6\x39\x2b\xe8\x6a\x72\xa2\x16\x40\x4e\x59\xd2\xa6\x93\xe4\x57\x43\xa6\x93\xf2\x8d\x12\x34\xfc\x55\x72\xb2\xac\x9a\x62\x05\x99\x0b\xaf\xa8\x4a\x5e\x38\xfa\x15\x6a\xbb\x1e\x71\x1f\xa9\x67\xff\xa7\x19\x7a\x00\x2a\xf0\xb7\xd0\x91\xd2\xa9\x28\xad\x77\xf0\x05\x1c\x2c\xa7\x69\x56\x8e\xc1\x68\xb4\xb8\xad\x8a\x5c\xb0\x82\x92\xd3\x73\xcc\x47\x0b\x29\x17\xbd\x29\x8b\x7b\xfd\x73\x93\xd7\x2f\xe0\xd6\xd1\xbf\xaf\xa9\x10\xd4\x62\xca\xf3\xd1\xa2\xf6\x1f\x0c\xb4\x60\xd0\x49\x4c\x28\x59\xea\x88\x7e\x5d\xe5\xa2\x54\xb1\x5a\x3d\x03\x2e\x43\x0f\x61\xf7\x63\x83\xcc\xa1\x1d\xd0\xe3\x8d\x56\xc8\x0d\xb2\x72\x5c\x64\x4e\xaa\x81\x7b\x91\x4b\x02\xba\xdb\xfd\x40\xbd\x09\xc0\x0e\x6f\xdb\x20\x25\x5f\x49\x38\x1a\x2d\x4c\xba\x41\x2d\x27\x95\x9e\x4a\x9f\xb7\xfb\xe0\x58\x4d\x9a\xda\xbe\xa9\xab\xea\xda\x65\x2d\xab\xc6\xd6\x99\x67\x1a\x53\xc5\x3c\x18\x56\x53\x0e\x9f\x3a\xc8\x0c\xbb\x3e\x4e\x59\x70\x4d\x05\xe4\xa3\x90\x07\x36\xd0\xaa\x5a\xcc\x21\x58\x1b\xc3\xef\xeb\x9c\xbe\xea\xa5\x5e\x8b\x98\x9f\x4d\xee\x8f\xa4\x1f\x6e\xe7\x2b\x54\xf9\xb4\xf2\x36\xda\x84\xb7\xa8\x6d\x71\x35\xb2\x1b\xcd\x0f\xe3\x80\x6e\xdd\x16\x1c\xb7\x90\x7b\x58\x6f\xc1\x5e\x41\xb7\x39\xa1\xe0\xb6\x17\x99\x6b\x0a\x76\xbe\x59\x07\x50\x57\xd6\x5d\xc4\x2a\x5b\x73\x9f\x33\x22\xc8\x03\xe4\xec\x79\x21\xd8\x42\x57\x33\x0a\xb6\xb4\x37\x34\xe3\xcf\xc7\xbb\x5d\xf7\xe5\x73\x62\x01\x06\x7d\x4b\x9b\x5c\xcc\x98\xc1\x9f\xca\x41\x5e\xf7\x40\xc8\x6e\x2d\x3c\xc8\xc0\xa2\x98\x98\xe5\x43\x5d\xb0\x30\x41\xb9\xfa\x10\x10\xec\xab\x43\x0b\xc8\x6d\x46\x25\x8d\x63\x2e\x06\x58\x1b\xa4\x8c\xd9\xc8\x09\x58\x39\x56\x5e\xa5\x08\x31\x63\x88\xf2\x44\x33\xc3\x49\x03\x29\x74\x10\x27\x79\x23\xaa\x69\x43\x7e\x1b\x84\x92\x31\xc2\xfb\x43\x6a\x11\x9a\x08\x7a\x54\x39\xb7\x5b\x23\x8b\x65\x34\x27\x21\x27\xa8\xb4\x20\x91\xd2\x68\xd0\x38\xbd\x7a\x33\x2d\x26\x61\xbd\x59\x83\x8b\x39\x6a\x9d\x75\xa1\x63\x4d\xcb\x71\x83\xb0\x72\xde\xf5\xf9\xc9\x1c\x59\xe3\x99\x3c\xa4\x5a\x1d\xc5\xec\xf5\xfd\x97\x2c\xef\xf1\x2b\x2c\xce\xaf\x30\xcb\xaf\x30\xc3\xaf\xb0\x56\x35\x1e\x4b\x91\x11\x9e\x0d\x8d\xd3\xb8\x80\x9b\xe9\x9d\x7e\xf8\x8a\xf3\x4a\xe5\x0b\xc2\xa7\xfe\x51\x0f\xb6\xcc\xb2\xa8\xae\xae\x28\x7f\xaf\x7c\x7b\xf4\x1d\x77\x60\x8b\x99\x87\x5e\x05\xa0\xff\xa0\xc8\x5f\xd2\xcc\x2e\x82\x49\xb2\x54\xdb\x82\x7a\x37\xda\x4d\x78\xe8\xeb\x76\x96\x9f\xe1\x63\x3f\x73\xec\x2b\x31\xd4\xb1\x2f\xb8\x58\xf7\x2a\xb6\x66\x9d\xe3\x17\xbd\xee\x5f\xe4\xa5\xbc\xb5\xe5\x65\x2f\x3f\xc2\x59\x55\x16\xf7\x27\x86\xbc\xc8\x8b\x5e\xc8\xeb\xbd\x2a\x35\x0b\x30\x39\xf9\xd5\x50\x7d\xf4\xb2\xde\xd2\xa5\x00\x29\x55\x76\xef\xd6\x7f\x5f\xa8\xb9\x11\x7b\x9b\xa2\xc0\xf7\x9a\x05\x36\xbc\x20\xc2\xdc\xa7\xb2\x07\x5a\xf1\x37\x80\x3d\x64\x90\x2a\xa7\x82\xc7\x61\x3d\xc3\x2d\x39\xca\x61\xc8\x85\x14\x0c\x0c\x51\x50\xfe\x72\xa7\x63\x65\xc5\x61\x24\xde\x47\x89\x6b\xb7\xfc\xba\xca\x39\x6a\xd9\x3a\xcb\xd3\x14\x94\xbd\xd6\xbf\x4d\x9b\xfd\x02\x59\x3e\xb8\x42\xd5\x31\xd3\x16\xb3\x06\x97\xfa\x8c\xf4\xdd\x97\x9c\x12\xff\xb4\xb3\x99\x35\x1b\xb8\xc8\x44\x37\xba\x5d\x7b\x3c\x72\xc9\x7f\xb9\x1b\xd9\xb4\xdd\xbd\x94\x61\xe5\x24\xd9\xeb\x5f\x44\xf0\x54\xde\x56\xac\xcd\x7e\x42\x83\x48\x3c\xc3\xdf\x94\x21\xf0\xf5\x1e\x0e\x8e\x1f\x0b\x0f\x1f\xe3\x44\xb8\xe1\x44\x4a\xc2\x63\xc0\xe8\xb1\x9b\x56\xbf\xfc\x51\xdd\xde\xb6\x88\x4e\x34\xd2\xe2\x32\x7a\x91\x77\x6a\x99\x22\x5e\xad\xbd\xf7\xad\x09\xcd\xa3\x44\xd7\x46\xa3\xce\xf5\x4d\xbd\xd9\xda\xf6\x6e\xba\xf8\xb5\xca\xd2\xaf\xdb\x30\x73\x1c\xc7\x0c\x98\x42\xb9\xd0\xed\x76\x0f\xed\x24\xd3\x3f\x34\x40\x70\xd4\x3d\x87\x1b\xf7\x1c\x7d\x33\xed\xf3\xd0\x31\xb3\xd7\xc5\xda\x16\xab\x6a\x9e\xfb\x61\xcf\xf5\xc2\xd4\xf1\xfc\x02\x95\x6f\x0f\x6f\x33\x18\xc9\x1d\xcf\xb7\x0a\xd8\xe2\x7d\xb3\xa5\x1c\x65\xdf\xe9\xda\xbe\xe2\xe0\x25\xfd\xb2\xbe\x3f\xbe\xeb\x8f\xc2\x46\xf9\x1b\xd8\xd6\xf0\x6b\x77\x0a\x4b\x95\xa3\x5a\xcc\xce\xe5\xff\x7e\xed\x04\x55\x5b\x41\x40\x79\x10\x50\x7e\xa4\xe4\x25\x1d\x5d\xb1\x72\xa5\x50\x37\x07\x91\x30\x9e\x1f\xd5\x49\xf8\xfe\xff\x9d\x93\x50\x95\xf4\x8f\xf9\xa1\x3a\xaa\x40\x76\xf4\xae\xd5\xa6\x83\xee\xf7\x73\x10\x50\x76\xe3\x0e\xec\xbe\x6d\x8f\xd9\x2a\xf8\xbb\xbd\xab\x6a\xb8\x4a\x97\x11\x3c\x26\x27\x2a\xf5\x3f\x11\x38\x2e\xf3\x3c\xb6\xbe\xfb\x64\x9e\x63\x04\x1e\xb9\x6e\x7b\xc9\xfa\x91\xf4\xb9\xdc\xc7\x4b\x6b\xe6\x04\x3b\x5e\xa4\xc3\x91\x72\x0d\xbc\x60\x0c\x20\x2d\x32\xc2\x9d\xe2\x8d\x5d\x64\xb1\xcf\x39\xab\xc4\x7f\xd9\x41\xce\xe5\xce\x72\x2e\xba\xe9\x7d\x1c\x8b\xe1\xa3\x38\x42\xf8\x2f\x19\x83\x9b\xbe\x8c\x72\x83\x01\x1a\x8f\x6b\x19\x2e\xf7\xf8\x26\x17\x1a\x96\x9b\xfc\x9d\xc6\x77\xb4\x2d\xf0\xad\xda\x69\x3f\x79\x64\xe7\xef\x74\x3f\x5b\x94\x1c\x66\x8b\x7e\x95\x0c\xc5\x30\xf9\x95\xcf\x16\x25\x11\xb6\xc8\x39\x62\xd3\xfd\xbc\x90\xc7\x04\x29\x17\x6c\x1a\xf7\xba\xff\x8d\xe7\x11\xa6\x81\x54\x80\xc5\x75\x38\x18\x9e\xf1\xcf\x53\x52\x7a\xbe\xa1\xa7\xea\xd7\xa0\xe3\xf3\x15\x84\x20\x93\x10\x67\x49\x39\x75\xa2\x68\xdb\x16\xdd\xa6\x6c\xe3\x5d\x1b\x5f\xf9\xc0\x46\xca\xdd\x60\x3c\xa3\x65\xaf\x7f\xa6\xfb\xd7\x4e\x22\xf1\x11\x18\x8e\xeb\x94\x39\x3c\x6a\xe7\x94\xed\xe9\xa3\xd5\xea\x39\xd3\xa0\xaf\x97\x06\x8d\xc4\xb3\xbf\xbe\x7f\x36\x12\xb4\xb6\xaa\xe9\x9f\xe9\x61\x4f\xe1\x05\xa7\xd7\xac\x16\xfc\x9e\xcc\x74\x92\xe4\xc5\xb2\xe2\xf4\x7b\x76\xf5\xba\x5c\xd1\x4f\xe4\xa0\x73\xbb\xbc\x63\x55\x64\xe9\xfd\xb7\xf7\x3f\xe6\x37\x74\x4f\x60\x7e\xd8\x13\xe6\xce\x50\xad\xc1\x20\xc1\x12\x2e\x77\xc1\xac\x9c\x43\x86\xc1\x00\x07\x6f\x56\xce\x55\x26\x5a\x59\x3f\x82\x01\xa5\xbd\x63\x83\x4e\xcc\x47\xb1\x72\x78\x30\x4e\x65\x55\xe1\xa0\x5e\xea\x4f\x7a\x38\x34\x30\x9a\xb6\x35\xed\x30\x52\xe2\xb1\xce\xc1\x48\xb1\x46\x82\x9b\x88\x56\xe5\x7f\x35\xc3\x7b\xa1\x5a\x92\x9d\xf5\x04\x17\xc8\x12\xa3\x8a\x19\x5e\x5d\x56\x5d\xd1\x77\xfd\xb9\x75\x10\x36\x63\x73\x18\x70\x97\xac\xd5\x8d\xd5\x58\x36\xf8\xbe\x59\x08\x0c\x09\xe8\x35\x18\xa3\x0b\x0d\xfe\x59\x1d\xa9\x3f\xaa\x93\xfb\xb3\xa7\xe4\xfc\x4f\xea\x11\xa1\x0e\x08\xbf\xc9\x7e\xa7\x41\x58\xc0\x57\xcf\x85\x18\xff\x91\xe2\x3f\xd2\xd8\xda\x64\x09\x48\xdb\x09\x5e\x1a\x6a\xa5\x48\xfa\x9f\x69\x2f\xb7\x86\x14\x75\xde\x38\xb5\x32\xfe\x1d\xe8\x49\xff\x95\x92\x07\x29\xdc\x4c\xc6\x78\x11\x8d\xc0\x9f\x9c\x9e\x4b\x1e\xf1\x24\xfa\xb2\x8b\xa7\x1b\x2d\x04\x4e\xba\x7b\xea\x5b\x00\xf1\x9a\x8a\xe1\x10\x1f\x68\x45\xf2\x92\xf8\xf7\x30\xe6\x3f\x81\x62\x2b\x08\x2c\xff\x93\x5a\xf4\xdf\xd2\x18\x2e\xba\xfb\x02\x7f\xa1\xca\xb9\x7e\x1f\xdc\x80\xf5\x73\xa1\x58\xf4\x22\xed\x31\x8f\x43\x07\xf1\xc0\x20\xa2\x74\xb4\x5c\x43\x43\x66\x94\xe4\xa3\xe5\x26\xe7\x2f\xaa\x15\xbd\x14\xd9\x18\xa1\x6f\xc8\x7f\xfc\x7f\x69\x4a\x9f\x93\xff\x3d\x46\x1a\xed\x98\x49\x11\x30\x47\x03\xa5\x20\x28\x4d\xf0\x3d\xca\x6a\x9c\xa3\xd6\x53\xfc\x83\xb1\xec\x21\xeb\x58\xc7\x99\x4b\xb6\xaf\x09\x42\x4e\x84\xd3\xc8\xbb\xd0\xda\x13\x06\x10\x08\xf9\x9c\x70\x1c\x76\xc4\x71\x8e\x30\x97\xc4\xe3\xcf\x9a\x65\xe2\xb8\x46\xc6\x87\x8e\xcf\x6a\x98\x8d\x98\x55\x73\x52\xe3\x26\x4d\x9b\x91\x30\x10\x0c\x84\x70\xe1\xa9\x4c\x43\xcc\x83\x06\xa1\xb0\xa3\x06\x7b\x23\x53\x1a\xb8\x13\xb6\xce\xa0\x49\x0f\xa5\x00\xbe\x12\x03\xe9\xbc\x41\x48\x7e\x07\x56\x36\x74\xc0\xc0\x71\xba\x41\x58\x4e\xbc\x91\x0c\x95\x55\x73\x93\xaa\x45\xd9\x8c\xda\x71\x65\x68\x8e\x55\xbc\x24\xe4\x67\x70\x6a\x50\x61\xb5\xa3\xfb\x76\x81\x9c\x2a\x4d\xd3\x4c\xee\x16\xbc\x1f\x99\xe2\x1c\x61\xba\xdb\xfd\x3e\xa0\xd1\x7f\xa2\x38\x82\x5e\x2b\x45\xfc\x19\x9f\xa3\x01\xec\x5f\xef\x7b\x72\x37\x98\x70\xdd\x02\xc9\xcf\x0a\xf4\x74\xb7\xcb\x22\x38\x13\xa0\xb5\xfc\x9d\x5a\x33\x39\x3d\xec\x83\xaf\x76\x31\x28\x50\x17\x18\x95\x0e\x56\x95\xac\x99\xf1\x38\x88\x6c\xc6\x11\x22\x84\x18\x06\xdc\x11\x94\xdd\x8e\x13\xd2\x23\x33\x5d\x67\x9a\x7d\xa3\x78\x10\x24\xc9\xea\xe6\x0a\xf0\x3c\x4e\xaa\xf5\x09\x70\x51\x28\xd1\x6e\x28\xed\xdd\x46\x0a\xdd\xce\x17\xd5\x81\x0e\xef\x76\x49\xa6\xcd\xaa\x28\x69\x4d\x40\x41\xb0\xcb\x4c\xd4\x81\xef\x55\x57\xca\xb5\xfe\x3d\x68\xe6\x9d\x51\x49\xe8\x3b\x85\xdf\x1b\x17\x95\x99\x30\x21\x32\xc6\xb7\x98\x47\x6c\x3a\xdc\xb7\xf5\xb9\xa7\x28\x4d\xb9\xbf\x8d\xd3\x94\xb7\xcb\x5c\x2c\x37\x59\x89\x1e\xda\x36\x02\x8f\xf1\x5b\x45\xb8\x2a\xd1\xf5\xcb\xd0\x2e\x90\x21\x86\xa4\xa3\x64\xb9\xf0\xec\xeb\x11\x73\xb4\xe4\x64\xe4\x8e\x51\x61\xb0\x9b\x6a\x95\xa6\xf4\x94\x18\xb0\x0e\xf5\x43\x7d\x3a\xf5\xf7\x8f\xc0\x4c\xa9\xbf\xa1\x2b\xf5\xe7\xcb\x5c\x50\xf5\x97\x3a\x55\x6e\xe9\xea\x47\x06\xa0\x0c\x53\xd1\x37\x35\x55\xf1\x85\x8d\xc0\x85\x20\x0f\x1e\x02\xef\x52\x04\x6e\xae\xe2\x84\x69\xdf\xf5\x6a\x7d\xb2\x10\x53\x6a\x13\x48\x64\x02\x4d\x0b\x31\xc9\xa8\x4d\x4a\x01\x61\x8b\x46\xdd\xc2\x68\x8d\x26\x1e\xba\xc5\x5a\x74\x0d\xa6\x1c\xf2\xb8\x94\x33\xea\x02\xa2\x66\x74\x0e\x4e\xcc\x6c\x5a\x09\x45\x03\x19\x24\xd4\x40\x13\xf8\x3f\x66\x9e\xab\xb7\x69\x2f\x04\x4f\x38\x25\xa4\x9a\x89\x79\x98\x79\x3d\x57\x91\x09\x5d\x3f\xef\xdc\xa3\x99\x0a\x0e\x16\x40\x26\xc0\xc8\x1c\x73\xe3\xc8\xa7\xb0\xc5\xa5\x60\xac\xc8\xf5\xc4\xb3\xa2\x6f\xbc\xf1\x00\xba\x55\x81\x1e\xbe\xcf\x38\x9a\x66\x72\x3c\xdd\xc0\x49\x03\x6f\xa1\x33\x43\xff\x98\x69\x1b\x70\xd6\xf8\xeb\xfd\x37\xc9\xdd\x39\xe3\x82\x51\x05\xb9\xc9\x05\xfe\x72\x0a\x86\xa6\x26\x3f\x42\x8f\x08\xe1\x7a\xb7\xcb\x6a\x70\xcd\x13\x70\x12\x6d\xd1\x7a\xb7\x3b\xcd\xea\x4e\x4f\xe1\x92\x15\x78\x49\xbc\xd9\xda\xbe\xb1\x35\x06\xc1\x80\x0b\x62\x15\xb3\xd3\xc6\xfe\x15\x56\xac\x6d\x45\x6d\x26\x98\xd8\x3f\x27\xee\xf5\xf2\xd4\x9b\xe1\x6e\x57\xa8\x9f\xba\xc6\x83\x72\xe0\x0c\x19\x8b\xc6\xa5\x9d\xb7\x96\xc8\x25\x5e\x5b\xc3\x63\x81\xff\x98\xad\xf1\xdf\xa8\xe7\xf3\x20\xb7\x13\xe6\x38\xc7\x15\xa6\x08\xe7\x1e\x44\xcf\x24\xab\xd3\xb4\xb6\x2c\xa7\x40\xdf\x90\xf1\x6e\x97\x28\x0a\x40\xcb\xdc\x29\x59\x19\xad\x13\x8d\x81\x78\x43\xf9\x75\xef\xf9\xb4\x97\x1c\xc2\xe1\x1e\xcc\xc4\x7c\xb7\x03\xe4\x21\xed\x33\x71\x93\x7f\xa4\xda\x4e\x53\x21\xe3\x72\xdd\x7d\xc3\x9d\x0b\x6d\xde\xea\x36\x73\x34\x29\xd2\xb4\xf0\x07\x7c\x76\x7e\x54\xd7\xb0\xcf\xaa\xee\x01\xc9\xc6\xb8\xf1\xf3\x77\x56\x08\xcb\xfb\xd5\x81\xa6\x49\xc6\x05\xb8\x13\xde\xe1\x62\xb3\x02\x19\xff\x5c\x3e\x2b\xe6\x83\x5c\x64\x4b\x34\xcd\x00\x37\x2a\x9f\x15\x73\x02\x27\xb5\x00\x07\xbc\x87\x16\xa1\x09\x3c\x5c\x5a\xdc\x2b\x79\xe6\x46\x8b\xba\xd9\x52\x4e\xca\xd1\xbb\x37\x6f\x3e\x20\xec\x4f\x33\x17\xe0\x51\x93\x71\x62\x8f\x7c\x8e\x2b\x84\x70\xe5\x3e\x9f\xfa\x94\xbe\x83\xcd\x56\x74\x57\xc0\xdc\x7f\x1e\x5a\x1b\x47\xe6\x3b\x5c\x07\xe0\xaa\x1c\x75\x3c\xb6\x3d\x64\x94\xe9\xdb\xc9\x3b\xdc\x90\xf1\x45\xf3\xbc\x02\xc7\x30\x6b\xaf\x6d\x86\x43\x54\x67\x14\xeb\xc7\xb3\x46\xa7\x4b\x16\xb8\xd2\x08\x74\x7e\xa3\x39\x72\x78\x74\x6c\x7a\x37\x79\x85\x97\x64\x7c\xb1\x74\x90\x73\xcb\xe1\x10\x15\x19\xc5\xf9\x6c\x39\xb7\x18\x68\x76\x7e\x37\x1e\x39\x8d\x5d\x83\x69\x6a\x57\x40\x72\x49\x91\x22\xa5\x2d\x52\x82\xf8\xe6\x02\x1d\x84\xd3\x68\x69\x62\x46\x1e\x5a\xdc\xc8\xff\x15\xa1\x0d\x05\x2f\x95\x18\x10\x7c\x3e\xdc\xf7\x1c\x0d\xa8\x9d\xc2\xfe\x0e\xa0\xf0\xd1\x83\xf6\x3d\x97\xb7\x81\xf1\x43\x67\x33\x3a\x6f\x43\xd7\x65\xcb\xd2\x6d\x94\x98\x9d\x35\x64\x29\x24\x9f\x4c\xc4\x6c\x33\x47\xe8\x94\x90\x02\x12\x65\x34\x8a\x23\x2c\x14\x88\xd7\x1d\x2b\x8a\x1f\xe4\x59\x85\x6b\x2a\x4d\xbb\x4f\x32\x88\x3e\x59\x8b\x6c\xdf\x79\x97\x8c\xae\xca\x6e\x2f\x0b\xf5\x8e\xbd\x79\xdd\xa0\xa6\x7f\x38\x60\x7f\x83\xc9\xbf\x40\x78\x23\xb2\x0a\x17\xb8\x99\x15\x73\xbd\x32\x4b\xbc\x46\x68\xd0\xab\x97\x18\x26\x3a\x41\x10\x8e\x65\x79\x7d\xc7\xf6\x23\xe5\x19\x5c\x2b\x94\x48\x79\x8e\x68\x66\x7e\x78\xcb\x2e\x09\xef\x1d\x13\x1b\xc8\xf8\xef\xfe\xb6\x4e\x90\x2b\x84\xda\x4c\xe0\x02\x60\xd9\x29\xf6\x80\x12\x15\x06\xe2\xd2\xac\xf9\x5a\xad\x79\xe2\xe5\x33\x4c\x24\x6b\xc9\xc8\x72\xb6\x9e\x23\x29\x3e\x74\x26\xc1\x10\xdc\xcc\x39\xa9\x67\x6c\x8e\x2b\xd2\xc8\x7f\x56\xa3\xcb\xef\x5f\x5f\xbe\x5f\xfc\xf0\xea\xc3\x6f\xde\xbc\x84\x53\x70\x51\xa5\x69\xe5\x5f\x47\xf7\x42\xfb\xfc\x6f\x48\x23\x77\x63\x25\x07\x87\x06\x39\xd9\x00\x4e\x2f\xae\xc8\x46\x69\x34\xdb\xe8\x65\x5e\xd9\x44\x13\xa7\xea\x66\x67\x68\x0a\x07\x86\xa9\x83\x54\xa1\x89\xfe\x49\x61\x60\x08\x83\xfe\x8f\xc1\xc5\x50\xf8\x79\x28\xc2\xc1\xa6\x69\xd6\x74\xd5\xa4\xbe\x49\x53\xe8\x54\x03\x92\xf9\xc4\x52\x02\xad\xe6\xb8\x26\xe5\xac\x9a\xf7\xe4\x88\xdc\x5c\xec\xa7\x70\x1d\x7b\x9c\x3a\x83\x11\x57\x08\x4d\xb3\x1c\xfc\x25\xed\x0d\x65\x60\x1a\x70\x4d\xe8\xac\x92\x37\xfc\x83\x5c\x8d\x49\xae\x5d\x74\xeb\xb6\x55\xaa\x87\x7b\x81\xaf\x05\xbe\x12\x78\x21\xf6\x67\xe5\x36\xe9\x8e\x62\x70\xbf\x21\x43\xd5\x03\xd3\xf3\xbe\xb1\x87\xdf\x80\x94\x31\x28\x14\xd0\x07\x70\x63\xd4\xd5\x0d\xcd\x62\xee\xab\xb5\x80\x54\x6a\xe0\x39\xab\xd9\xc2\x87\xd6\xc5\xf1\x47\x93\x7f\xdd\xba\x3c\x24\xb5\xc8\x4a\x34\x65\x33\x3e\x27\xdf\x66\x25\x9a\xc0\x5f\x74\xc6\xe7\x2d\x78\x39\xb8\xef\x08\xac\xa9\x9c\xae\x4e\x02\x7a\x27\x2c\x0a\x00\x64\x2b\x78\xe1\xf6\x74\x88\x8e\xa1\x4f\x8b\x01\xc8\xe8\xa7\xa0\x46\x0f\x52\xaa\x19\x38\x73\x99\xb2\x14\x3c\x82\xe1\x89\x4c\x04\x8d\xc1\xee\x8c\x83\xb2\x9a\xcc\xd4\x1e\x8e\xe0\x4d\x3f\xe9\x9a\xfd\x38\x9d\x10\xa5\xd2\xc3\x1a\xf0\xe1\x8e\x83\xf4\x6d\x5d\x27\x68\xb7\x1f\x76\xbb\xd2\xa2\x3e\x22\x84\xcb\x76\x70\x40\x83\xaa\x32\x79\xc7\xf0\x62\x7f\xe9\x52\xb0\x75\x06\xd8\x77\xc6\x7a\x65\x9d\x54\x3c\x41\xc3\x60\xe8\xc0\x72\xf9\xdf\xcf\x2b\x33\xe8\x6e\x77\xbf\x9c\x5e\xd5\x19\x9b\x2b\xa2\xea\x3d\x34\xd9\xe0\x4c\x11\x87\x98\xed\x3f\xf6\xfe\x36\x6c\xdc\x1d\x24\x5c\x51\xc6\xba\x16\x0b\x65\x65\x8c\xc1\xce\xc2\x85\x3b\x93\xe5\xe6\xc8\x16\x7c\x9b\x73\xc1\xf2\xe2\x98\xf2\x2b\x2a\x02\x2c\xd9\x10\xc5\xf4\xd4\x43\xc3\x31\xbb\xc0\x61\xbe\xc9\xc5\xf4\x29\xaf\x55\x56\x77\x2f\xf1\x5e\x76\x05\xa3\xd7\x09\x80\xaf\xfc\x76\x4b\xd0\x14\xc9\x83\xe7\xc1\x05\x6a\xcf\x4b\x26\x69\xa5\x4a\x03\xc8\xd6\x99\x07\x44\xd4\xa1\x14\x1e\x0c\x86\xc9\xd1\x60\x99\xe1\xd3\xf3\xd6\x40\xcd\x68\x63\x61\x1f\x9f\x2a\x8c\xe7\x37\x39\x34\xb5\xb4\x6a\x40\x6a\xcc\x19\x8f\x6e\x5e\xb5\xa7\xf4\x6a\x63\xde\xdf\xcc\xa5\xb7\x99\xb9\x55\x48\x82\x26\xb2\x9c\x31\x7f\x33\xb3\xb9\x67\x71\x30\x9d\x96\x58\xc8\x31\x48\x72\x19\x31\xfd\x1e\xf8\x0a\x2a\x18\xd9\x7e\x85\xe3\xbf\x4e\xf8\x6d\xfc\x23\xe2\x22\x48\x03\x22\xee\x17\xc1\x15\x19\x5f\x54\xcf\x0d\x40\xe0\x45\x05\x91\x7f\xb2\x31\x26\xaf\x24\xa5\x4d\x14\x96\x25\x31\x7f\x1d\x46\x38\xe9\x7d\x5a\x29\xaa\x39\x0c\x21\xc3\xfa\xf4\x96\xc7\x2a\xa1\x4e\xa0\x17\x94\x74\xf1\x83\x80\xcc\x1b\x20\xa9\x34\x35\x16\xae\xdd\x6e\x8c\xb9\xe7\x6f\x28\xbe\x19\xa3\x87\x90\x28\x75\x13\x9b\xf9\xe9\xbd\x28\x50\x68\x49\xa8\x58\x47\x3b\xc2\x26\xb2\x8d\x85\xc8\x1c\x78\xb8\x13\x3e\x0d\xce\xe9\x42\xde\xcb\xbe\xa1\xd9\x43\xd2\xed\xf1\x1b\xf7\xa2\x0f\x64\xe3\x98\x0c\x42\x21\x03\x8e\x8f\xa6\x7a\x1d\x69\xa4\x5b\x22\x9a\x0b\x82\xde\x9d\xdc\x83\xb5\x4d\xb6\xb8\x1f\xbb\xf5\x4a\xec\xcd\x94\x04\x37\xe9\x71\x59\xfe\x55\x0a\xa4\x2f\x9c\xdd\x9f\x5a\xbc\xea\xd8\x04\x81\x2d\x50\xb0\xba\xdd\x32\xb2\x6b\xf9\x9a\x40\x7a\x81\x37\x7f\xfc\xf1\xd5\x3b\xdf\x07\x1d\xc0\xb0\x85\x0b\x8a\x81\x02\x80\xc5\xa0\x8a\xf2\xbd\x2b\xc2\xab\x46\xb0\xf2\xfa\xb8\x35\x31\x85\x0b\x76\xf5\x8c\x7e\x12\xcf\x96\x55\x29\x78\x55\x14\x94\x3f\x5a\xbc\xa8\x96\x00\xb7\xf4\x2c\xdf\xb2\xe3\x0b\x97\x55\x49\x17\xe6\xd7\xf1\xd5\x36\x79\xbd\xf9\x9c\x6a\xac\x16\x15\xbf\xff\x8c\x9a\x79\x23\xaa\xe3\xab\xd5\xf7\xb5\xa0\x37\xcf\xae\xa5\x2c\x9f\x0b\xba\x78\xc2\x32\xea\xaa\xae\xc6\x62\x5d\x1d\x5d\x6b\x55\xc7\xd3\x80\x45\x8a\xca\x47\xc7\x0f\x07\x4a\x1f\x5b\xf8\xe7\x86\xf2\xfb\xc5\x36\xe7\xf9\xcd\xe3\xbb\xac\xa6\xfc\x96\x2d\xa9\x7d\xf8\xb4\x0a\x4f\x58\xd0\x7c\xb9\xa1\xc7\x26\x04\xc3\x5b\x7c\xf3\x4b\x29\xc1\xde\x0a\xdf\xdb\x5d\xd4\x01\x62\x8a\xfb\xe0\x71\x63\xd2\x6d\x0f\x35\xfa\x63\x55\xd2\x27\x36\x5c\x1e\xd5\xf0\x6f\xf2\x7a\xf3\xc4\x86\xd9\x71\x0d\xab\xb3\xf8\xc4\xb6\xab\xa3\xda\xbe\x6c\x44\xf5\xc4\x86\xf3\xa3\x1a\x36\x27\xfa\x85\x77\xa0\x8f\x6a\xbe\xfe\xcc\xe6\xbf\xcb\xa5\x3c\x78\x7f\x74\x2f\x7b\x5b\x38\xd8\xaf\xa3\x36\xdf\x55\xc7\xce\xa8\x39\x6a\x46\xef\xe0\x90\xbe\x7c\xff\xfd\x91\xad\x16\x4f\x68\xf5\xc8\x26\x97\xc7\x37\x79\x64\x8b\xeb\xa3\x5a\xfc\xbd\x24\x83\x6f\x35\x15\x3c\xaa\xdd\xd5\xd1\x23\x65\xe5\xf5\x7b\x45\x07\x8f\x6c\x7a\xf3\x84\x75\x7d\x5a\xcb\xdb\xa3\x5a\xfe\xb6\x59\x7e\xd4\x29\x0d\x8f\x6c\xf7\xc6\x6b\xf7\x51\xe6\x26\xc6\xaf\x1c\xe6\x74\x20\xa5\xa6\x7b\xe3\x2a\x42\x5b\xde\xf5\x0b\x6c\xfd\xa3\xb7\x4c\x94\x99\xd4\xaa\xf1\x5f\xc8\x50\xea\x65\x70\x21\x8a\xfa\x81\xd6\x77\x64\x0f\x71\x85\xf1\x64\x96\xfc\xec\xed\xc0\x39\xf6\x7e\x41\xa8\x3e\x5e\xfc\xbc\x7d\x49\x0b\x7a\x9d\x0b\x6a\x1f\x28\xdc\x9b\x95\x9f\x08\x85\xbb\x3c\xec\x2e\xce\x7b\x36\x4f\xa4\x9c\xa9\x61\x95\xf8\x84\x6b\xac\x8f\x31\x2e\xd1\x45\x36\xc6\x74\xe4\xb5\xae\x3d\x45\xc1\xa5\x00\x29\x64\xe9\x16\x0b\x9e\x97\x35\x93\x7d\x7c\xa8\x60\xdf\x4d\x22\xb2\x2f\x25\xae\x1e\x28\xb5\x12\x95\x56\x35\x91\x62\x30\xe4\x1b\x09\xdb\xd8\xed\xc2\x87\x98\xf5\x85\xe5\xca\x13\xb2\x18\xc2\x39\x19\x5f\xe4\xcf\xd9\x45\x3e\x1c\xa2\x6a\x96\xfb\xc2\x72\x3e\xf7\xe0\x3c\xb5\xe3\x3e\xe8\x1f\xb7\x9c\xae\xd9\x27\xe8\x51\x8a\x40\x97\xfc\x5a\x0f\xaf\x92\x33\xd3\x20\x10\x9f\x3b\x29\xbf\xba\x9c\x8f\xfe\xfd\x47\x26\x36\xff\x8c\xe9\xb4\x26\xb4\xc9\x6e\xbc\x81\xdb\x93\xec\xa8\x93\x19\x8a\x06\x91\x73\xa9\xd2\xcf\xce\x43\x74\x81\x2f\x7b\x6e\xb4\xe2\xf0\x41\xe9\x4e\x27\x7d\xdd\x25\xc8\xe6\xec\x66\xab\x92\xf9\xc1\x78\x8d\xbb\x60\xf8\xb4\xf6\xec\xf8\x5c\xeb\x62\x2d\xe4\x90\x1f\x93\xd9\xa9\x36\x79\x68\x5b\x6f\xe9\xf6\xcb\xb0\xc7\x08\x20\x4f\x49\x02\x7c\xc5\xab\xbb\x9a\xf2\xb3\x68\x2a\xdf\xfd\x24\xb1\x97\x4d\x37\x4a\x03\x9b\x52\xb0\x9b\xb8\x68\x70\x74\x8e\xe1\xe8\x84\x65\xed\xc3\xfc\xfa\x17\x91\xd5\x35\x1b\x0a\x89\x67\xd7\xfa\x51\x5e\x6f\xe0\xf7\x2a\xbe\x8b\x8a\xfd\xe1\x1c\xca\x11\x4b\x3b\x0e\x09\x72\x30\xac\x03\x75\xf6\x15\x49\xe4\x37\x4e\xb0\x38\x1c\x8f\x50\xc5\xe2\x11\xaa\x9e\x02\x36\x48\x46\xce\xab\x4a\xfc\xf4\xee\x7b\x2c\x22\x3a\x7b\x3a\x32\x4b\x0e\xd4\xa7\xa9\x29\xbf\xbc\xa6\xa5\xc0\x25\xa1\x23\x2d\x30\x63\x46\xe8\x68\x55\x2d\x61\xfc\x3f\x54\x2b\x8a\x2b\x42\x47\x2a\xdc\x05\xe7\x92\x66\xe9\x0e\x6a\x92\x48\x89\x3e\xc1\x05\x39\x3d\x57\xee\x1b\x8d\x5c\xd2\xef\x9a\xa2\x90\x4b\x8a\xb4\x39\x06\x9e\xd7\xcd\x16\xb6\xb0\xfe\x04\x72\x8e\x26\x35\xde\x86\xac\xb3\x1c\x0b\x34\x58\x12\x42\x36\xd3\x9a\x24\x7a\x24\xc9\x24\x79\xf6\x2f\x09\x21\x64\x69\x50\x8f\xc6\xf8\xd7\x68\x9a\x95\x86\x4c\xbe\x17\xb9\xa0\x19\x64\x40\x9b\x6c\x5a\x9c\x24\x78\x83\xb0\x57\x1f\x90\x63\x4e\xc7\x18\x46\xa0\xeb\xe8\x91\xe1\x0d\x42\x16\xe9\x28\x1c\x61\x5e\x6f\xd4\xcd\xa8\x02\x21\x0c\x72\xd5\xca\x0d\x72\xbb\xdb\x25\xcf\x12\x85\x0c\x98\x3c\xfb\x17\xf8\x73\x0b\x03\xcf\xeb\x4d\x72\xa0\xd3\x2d\x82\x78\xc1\xa2\x97\xec\xb1\x6e\xb3\x07\xf3\x69\x26\x0a\xc1\xd9\x7c\x28\x3d\x19\xf5\xd4\x7c\x23\xfb\xe5\xd4\x63\xf7\x21\xf5\xc7\x99\x50\xec\x7f\x42\x55\x2a\xf8\xa8\xea\x83\xaa\x17\xea\xef\x16\x0d\x54\x70\x7e\x9a\x66\xc6\xb7\xce\x5c\x5a\xcb\xbc\x5c\xd2\xc2\xb0\x8c\xa2\xd9\x26\xf8\x74\x8c\xb0\xd0\x5b\x00\x39\xbd\x15\xeb\x26\x71\x33\xb9\xda\x12\x3b\xbf\x64\x28\x80\x6f\xd0\x3d\x70\x9c\xe8\x51\x27\x98\x3a\xb7\x3e\xdb\x75\x55\x2e\x39\x15\xf4\x75\x70\x80\x12\x1d\xf2\x79\xc7\x8a\xe2\x65\x37\x13\x67\x70\x1e\xe2\xf5\x07\x70\x05\x38\xd7\x6b\xcc\xdb\xac\x1a\x29\xb2\xe2\x29\x74\x97\x9e\x42\x2f\xaa\xae\x3f\xd0\xc5\x17\x52\xde\x43\xf6\x46\xc1\xef\x5f\x97\xb7\xd5\x47\x2a\x77\x11\xc5\xa5\x0f\x0d\xb2\x0e\x02\x82\x30\xb3\x07\xd1\x1c\x42\x95\xf2\xa3\x31\xe4\x0e\x1e\xe5\xf6\x11\x88\x2e\xea\xac\x7a\x29\xc9\x0c\x10\xb0\xda\xdc\x55\x78\x00\x39\xc9\x4a\xf7\xec\xdc\xa2\x6e\xfd\x4b\x82\xd0\xa8\xde\xb0\xb5\xc8\x10\x56\x27\x84\x81\x2b\xf4\xa5\xc8\x6c\x8a\x9f\x73\xe5\x5c\xc3\x5d\x75\x84\xd9\x90\xf0\x61\x6e\xd1\x1e\xd3\x34\x63\x43\x92\xfc\x4b\x32\x2c\xb5\xe7\xb0\x6c\x19\x4d\xd8\x90\xe4\xc3\x2a\xf0\xca\x0b\xb0\xc6\x70\x49\xd4\x62\x98\xb6\x8d\x02\xde\x4e\x27\x51\x56\x99\x2c\x79\x06\x7f\xcd\xc6\x73\xb0\x5e\x24\xcf\x92\x61\x89\x30\xd7\x9d\x22\xcc\x5b\x77\x1b\x14\xb8\xb0\xec\xb7\x39\x5e\xc9\xb3\x04\xb3\x92\x09\xa0\x40\x93\x65\x96\xd8\x1f\x09\x92\x32\x8e\x2c\xb3\xcc\x12\xf5\x57\x02\xf0\xf8\xfa\x51\x6d\x1e\x69\xd2\xa0\x1f\xbb\x5f\x09\xc2\x55\x09\x98\x6d\xe6\x9d\xf7\x33\x41\x78\x5d\xf1\x9b\xdc\xb4\x66\x7f\x24\x08\xdb\xf3\xc5\xfb\xc4\x83\x5b\xca\xa1\xcf\x3d\x1f\xdd\xb1\x72\x55\xdd\x79\x94\x84\x7b\x64\xa4\x77\xde\x55\x66\x97\x27\x71\x31\x1d\xbd\xed\x53\xb8\x98\xfd\xdc\x49\x8f\x07\xe1\x4d\x59\x54\xd5\xf6\xcb\xf0\x1a\x5f\x85\x11\xcd\xe3\x2c\x44\xf9\x8b\x59\x08\xb8\x6d\xf6\xb0\x10\xa5\x61\x21\x72\x52\xf6\x59\x88\x1c\x50\xe5\x7d\x82\x09\xa6\x4c\x8f\xea\xba\xef\xa6\xfc\x12\xcc\xef\xdd\x4e\xed\x1b\xbb\xc5\x4c\xac\x8c\x1c\x8c\x82\x3f\xfd\x4d\x5e\xae\x0a\x8b\xaa\xd3\xe2\xdc\x10\x9e\xbe\x41\x2d\x1b\x2b\x9c\x10\x4d\x96\xfc\x7b\x0f\xe9\x8a\x3f\xbd\xfb\x7e\x0f\x61\xd7\xf5\x32\xe4\x28\x09\x16\xc4\x42\x98\xc3\x09\x17\xea\x84\x0b\x79\xc2\x31\x95\x7f\xa9\x23\x4e\x55\x6e\x67\xc0\xcd\x09\x7a\x30\x36\x2f\x33\x8c\x91\x9c\x17\xa1\xb8\xb7\x3e\x79\x2d\xde\x53\x73\x69\xc9\x96\xdc\x09\x3e\xd0\x9a\xc1\x0c\x54\x63\x38\xa2\x55\xef\xec\xf7\x9b\x5d\xa8\x9c\x26\x90\x7a\xdd\xb8\x13\x66\xfb\x3f\x08\xdc\xce\x57\xac\x5c\xe9\xee\xb2\xce\xba\x0a\xbb\xae\x3f\xbd\xfb\x3e\xd3\x0e\x0c\x6e\x48\xa7\x96\x35\xd8\x3b\x66\x15\xcf\x08\xe8\x5d\x92\x56\xe8\xad\x92\xaf\x56\xe1\x10\x13\x37\xb6\x64\xdf\x68\x61\xf6\x96\xbc\x45\x0c\x6c\xb0\x84\xb2\xd0\x1e\x16\xe0\xc0\x0a\xc9\x5a\xb1\x37\xfd\xea\xbd\x61\xa5\xa9\x9e\x54\xac\xe1\x23\xe7\x55\xb6\x59\x69\x59\x0d\x47\x32\xf2\x27\x92\xd7\x9e\x7d\xeb\x2b\x51\xd8\xcf\x27\xa8\x5f\x85\x9c\x56\xe0\x26\x6c\x83\x22\x9c\x71\xfe\x93\xfe\xef\x0c\xfe\xf7\xef\xf2\x7f\xf7\xe6\xa7\xf9\x2f\xb1\x27\xf0\xd9\xec\xd3\xfd\xfc\xd9\x75\xa8\x86\xf0\xe9\xf1\x89\x20\xe7\xff\xf1\x3f\x7e\xc8\xc5\x66\xc4\xf3\x72\x55\xdd\x64\x68\x37\xc6\x59\xf2\x49\xb2\x35\x74\x2a\x26\xff\x96\x8a\xdd\xff\x42\x2e\xfa\xe8\xfc\x3f\x20\x0b\x97\xf2\xdb\xfd\x5a\x24\x5f\x4b\x36\x58\x18\x31\x0c\x28\xdb\x23\x77\x40\x1d\xbb\x03\xea\x83\x64\x99\xed\x27\xcb\x75\xef\xf2\xd0\xf1\x7c\xcd\x96\xf2\xf8\x74\x74\x2a\x1a\x23\x80\x8c\x40\x3d\xf9\x9e\x16\x74\x29\x2a\x9e\x25\x57\x79\x2d\xf9\x26\x41\x92\x64\x00\x44\x9a\x80\x6c\x7e\x29\x04\x67\x57\x8d\xa0\x59\xb2\xe1\x74\xad\x91\x0f\x03\xe2\x23\x6b\x02\xe5\x11\x11\x62\x1a\x5e\x61\x8f\xde\x60\xdb\x6a\x5b\x4b\x0e\xae\x7b\x7f\xa9\xf9\x02\x73\xb7\xe7\x26\xd2\x5f\xc5\xb6\xac\x7f\x5f\x74\x47\x64\xbf\x1e\x45\xd6\xb7\x0d\xba\x34\x20\x43\x96\xde\x65\x01\x25\x46\x03\x91\xa6\x2a\xe9\x3b\xa8\x60\xf5\x78\x39\xbd\x65\x55\x53\xcb\x4d\x10\x14\x9f\xe8\x78\x59\x4f\x46\x56\xdf\xed\xe0\x75\x6a\x79\x46\x11\xea\x11\xb4\x5e\x4c\xaf\x34\x68\x0a\xe4\x40\xca\xfc\x86\x0e\x04\x11\xee\x40\xfd\xf5\xd9\xbf\x3e\xc3\x09\x28\x36\x79\xff\xa9\x56\x2c\xba\x2b\x50\x0a\x42\xef\xe8\xf5\xab\x4f\xdb\x2c\xf9\xbf\xc9\x90\x0f\x93\x6c\x4a\x9e\xed\xfe\x15\x25\x48\x96\xdf\x57\x4e\xec\x2b\xf7\xec\xaf\xcf\xfe\xfa\xec\xd9\xb5\x94\x3b\x5c\x96\x8f\x21\xc9\xe8\xa8\x86\x64\xc6\xbb\x5d\x92\xa0\x61\xc8\x39\xc8\x45\x89\x70\x00\xde\x65\xa8\x3f\x99\xfa\x4c\x03\xda\xfd\x4c\x14\x61\xff\xd3\x50\x9d\xb1\x7c\xdb\xd4\x1b\xb5\xf0\x14\xfa\xd8\xc3\x1b\xfc\xe2\x7e\x82\x6f\xac\xba\xb2\x5d\x47\x7a\x52\x9a\x12\x8a\x9b\x86\xad\x26\x79\x86\xda\x41\xd0\xb7\x1b\xb5\x46\x69\xa2\xf6\x68\xec\xdb\x6a\xde\xe4\x3e\xb3\xd3\x60\x0a\x4f\xea\x77\x1f\x6b\xe4\x56\x75\xf0\x38\x97\xd4\x3d\xf4\x3e\x4b\x5c\xed\x76\x90\x1f\x43\xe9\xef\xa1\x5f\xc9\x03\x05\xc3\x42\x28\x4d\x69\xe6\x0a\xa0\x76\x3f\xd7\x63\xfa\x4a\xe2\x7d\xc3\xa4\xe2\x1c\x8f\xb7\x51\xe2\xc7\xd2\x97\x6f\xe9\x34\x7b\xc2\xb9\x44\x13\x25\xa8\x73\xe0\x94\xd5\xdf\x9a\x6b\x8e\x97\xc7\x7c\x28\x24\xe3\x55\x7f\x16\xe3\x15\x7f\x13\xc1\x40\x0c\xd7\xe6\x30\xdb\xf5\xf8\xc2\xee\x61\xb9\xea\xa7\xb1\x5c\x1d\x07\xa6\xaf\xc4\x6f\x45\x0c\x24\x5f\xc7\xbc\xa8\x49\xf2\x57\x62\x55\x94\x6e\xf8\x11\xce\x84\xc5\x38\x13\x16\x51\x70\xfb\x7b\xbf\x55\xdc\xc9\xfe\xab\x4c\x52\x9c\xce\x35\xe6\x98\xba\xd8\xc9\xa0\xc7\xde\x36\xb2\xeb\xc8\x85\xd1\xbd\xe8\xe5\x00\x94\x04\xc7\x0e\x4b\x70\x0a\x5d\xe7\x45\x5e\x14\x57\xf9\xf2\x23\xa1\xb2\xc2\x06\x76\xed\xb1\x5d\xe0\x48\x3b\x99\xea\xf9\x58\x5a\x12\x10\x0f\x05\x8c\x11\x3b\xf7\x70\xea\xf7\x1c\x24\x86\x99\xd5\x91\x01\xbd\x4f\x12\xec\xe9\xca\x9e\xaa\x3a\x02\x91\xc2\x3b\x5f\x87\xac\x85\x2e\xcc\xdf\xb7\x73\x58\x16\x65\x9f\x36\x60\x28\x82\x64\xf8\x3c\xc0\x38\x57\x1c\x83\x17\x48\xee\x7b\xc3\xdb\x30\x15\xd0\x0d\xa8\x08\xe5\x8d\x55\x90\xa2\x49\x92\x78\xd1\xe6\xfe\x98\x2a\xce\xae\x59\x39\x70\x41\xed\x99\x0d\x6e\x58\x56\xc5\x30\x79\xf6\x2c\x19\xd2\xd1\xa6\xaa\x85\x1c\x39\xa6\x23\x39\x79\xad\xb3\x98\xc8\x57\xf2\x37\x28\x2e\x3e\xcf\xfc\x05\x76\x2e\xa1\xfe\x06\xad\x2f\xe1\xce\x08\x46\x4a\xf5\xb7\xb1\xde\xc4\x5c\x5a\xe5\x0a\x0f\xe5\x4a\x0d\x4b\xd8\x62\xca\x01\x16\x66\x45\x18\x24\x25\xee\x9a\x50\xe2\x79\x14\x45\x9a\x26\x55\xe9\x09\xcb\x0c\x9e\xb9\xd8\x62\xba\xdb\xd1\x6f\xfe\x27\xf4\xd0\x31\x1c\x75\x1a\x64\xeb\x2c\x3b\xd3\x51\xef\xc6\x5f\xe1\xb2\x5c\x71\xd9\xd0\xaf\x47\x09\xda\xed\xf6\xbd\xfd\xf7\xd1\x38\x91\x97\x77\xf7\xfd\x0f\xd5\x15\x2b\xe8\xc9\xfb\x7c\x9d\x73\x96\x40\x01\x12\x14\x78\xb1\xe1\xd5\x0d\x8d\xbd\xf9\x23\x5c\x51\xf5\xc9\xdb\x0d\xd8\x44\x7a\x46\x1e\x1d\x89\x9f\xc9\xe9\x5b\x5e\x0b\xe6\x0e\x33\xf5\x6c\x45\x5d\x5f\x61\x7b\x1c\xe5\x7e\x1a\x0a\xd4\x1e\x75\x9c\x7a\xde\x93\x4f\xb9\xb0\xf6\x5c\x4b\xf6\xa7\x8a\xf6\x78\xb6\xd4\xf8\x77\xee\x45\x6d\x3c\x8a\x3e\xd7\x8b\xc6\x84\x6f\xc6\x4f\x79\xed\xef\x24\xcd\xae\x4c\xe9\x84\x9a\x03\x68\x01\x51\xac\xee\xff\x73\x4e\x4b\xe4\xa2\x6c\xfe\x09\xc0\x7e\x5d\x41\xdb\x63\x6d\x7d\xe8\x38\x59\x2c\xde\xb7\x01\x32\x82\x0d\x30\xaa\xca\x2c\x81\x3f\xfd\xc4\x58\x01\x65\x15\x23\xc1\xd9\xf5\xb5\x64\xaa\x7a\x05\x55\x58\x56\xbc\x41\x2f\x8b\xd6\xc1\xf6\xbc\x72\xd0\x1c\xa0\xe3\x79\x3e\x3c\xb1\x98\x98\x2f\x80\x08\x09\x36\x34\x4e\x6b\x7a\x73\x55\x50\x60\xdb\x01\xfe\x11\x85\xa0\xd3\x7a\x52\x8b\x55\xf5\xd3\xbb\xef\x3f\xd8\x51\x65\x89\x3f\xc2\x04\x43\x4d\x17\x01\x94\x8f\xe8\x27\xc1\xf3\xa5\x00\x6b\xc9\x25\xbf\xae\x91\x02\x0a\x2a\x47\xdc\x78\xd9\xe0\x8a\x94\xa3\x9b\x6a\x45\x8b\x1a\xd7\xa4\x1c\x79\xee\x59\xb8\x21\xdd\xde\xbd\xae\x19\x84\xa2\x9e\x8e\xad\x44\xdb\x8c\x16\x1f\x29\xdd\xbe\x54\xfb\xd3\xb9\x1d\xfe\x41\xee\x5e\x88\x81\x6f\x14\x58\x9e\xf5\x23\x8a\x44\xf9\x40\x87\xfe\xa4\xe2\x9b\x47\x07\x7e\x58\xe3\x54\x02\x9f\xab\xe1\xc5\x77\x15\x8f\x03\x96\x3d\x6a\xf2\xfc\xe6\x7c\xca\xcf\xce\x27\x63\xb9\x3e\xe7\xbe\xe9\xf3\xec\x3c\x6e\xfc\x14\xc1\xea\x20\xeb\xf3\x6a\x46\x8c\x67\xd4\xcf\x53\xd7\x02\x1c\xf5\xe5\x52\xb0\x5b\xfa\x35\xf6\xd2\x57\xfb\xea\xea\xdf\x1f\xd8\x92\x57\x05\xbb\x02\xcc\x84\xc6\xce\xe4\x35\x24\xf5\x50\xde\x08\xf6\x52\x51\xde\x29\x7e\xe0\x54\x8d\x2c\xfe\xbf\x09\x59\x2b\x4c\x34\xa1\xed\x68\xcb\xe9\x36\xe7\xd4\x73\x58\x75\x9b\x0c\xc3\xc4\xea\x4d\x5e\x14\xd5\xdd\xab\x9f\x9b\xbc\x40\x59\x8d\x1b\xa5\x94\xf0\x87\x8f\x34\x22\xe3\xb2\xba\x2e\xd9\xdf\x63\x52\x7f\x6d\x30\x1c\x35\x17\x18\x06\x31\xee\x99\xb6\x6b\x11\x72\xb3\x7b\x3d\x5c\x96\xab\xef\xab\x7c\xf5\xe5\x3b\xd2\x0d\x43\x7f\xe0\x02\x60\x31\xd5\xdc\x25\xd0\x80\x23\x07\x30\xb7\x7c\x04\xa2\x27\x5d\xe1\x87\x65\xc3\x39\x2d\x85\xf5\xa4\x9b\x80\xd6\xd4\xa0\x54\xa2\x2c\x31\x7d\x77\x0b\x26\x08\xeb\x47\x92\x3b\x7e\xa4\x56\xc7\xb4\xbb\xaf\xb4\x15\x4a\x91\x65\xbb\xf7\x15\x35\xbe\x16\x76\x14\xca\x77\xf1\x98\xd1\x27\xe8\x48\x46\xbe\x1f\xe8\xf1\x28\xeb\xb1\x97\x9f\xd8\x56\xc5\xfd\x9a\x15\xbe\x77\x99\x61\x31\xfe\x91\x46\x87\xaf\x78\xf9\xb3\xd8\xe5\x0f\x48\x68\xb0\xea\x51\x4e\x5c\xed\x78\xf8\x42\xa6\x9c\x96\xfa\xe2\xd7\x69\x37\x79\x8c\x57\x3f\xbc\x71\x34\x16\xbe\x61\x41\xd2\x94\xf5\xaf\x01\xcc\x64\x47\xa5\x14\x2f\x0b\xf6\x77\x9f\x96\xf4\x20\x26\x83\x8e\x22\xb4\xc7\x80\xb7\x33\x4b\xd9\x43\x79\xd5\x01\x55\x06\x83\x86\x28\xde\xee\xa9\x36\xc8\x2b\x5e\x44\xbf\x71\x65\x32\x48\x33\x15\x36\xe0\x8e\xb1\xd1\xeb\x1c\x6a\xc8\x1b\x8d\xfe\xaa\xcc\xbf\x67\x04\x9e\x3d\xf8\x0e\xd6\x55\x3b\x47\xa8\x95\x73\x30\x04\xfb\xbb\x8a\x77\x3f\x5d\x37\x65\x69\xb0\x30\xfb\xa8\x13\xd7\xca\x00\x0e\x19\x00\x01\x3e\xa6\x9a\x55\x2e\x39\x8d\x79\x8d\xeb\x8e\xc4\xe0\xa5\xfa\xe8\xe4\xce\x4c\xd3\x8c\x0f\x89\xc5\x0b\x75\xd7\xa0\x7c\xa2\x9b\x03\x0c\x06\x88\x40\xbd\x70\xf1\xb1\x1c\x57\x76\x5b\x18\xde\xfa\x9b\x1a\xd4\x84\x39\xf2\xae\x5d\x7d\x59\x71\x0c\x38\x9d\x4c\xd1\x55\x16\xa3\xab\x15\xa4\x4b\x51\x4a\x03\xe5\x15\xad\xdc\x69\x40\xd5\xe1\x91\x22\xbd\x4a\x5e\x11\x47\xbc\x0e\xd6\xf0\xcb\x74\xe8\x9d\xa1\xd8\x07\xaa\x45\x08\xb6\x94\xcd\x1e\xa9\x25\x8b\x1c\x4f\x27\xfd\x78\xb5\x23\xf5\x1d\x5f\xca\x3b\xda\xe7\x8e\x5c\xd4\xb7\x3e\xb1\x30\x22\x60\x8c\x7e\xc8\xb7\x87\x90\x6c\x37\x79\xbd\x97\x3e\x41\x23\x10\x0b\x4e\x21\xb0\xba\x16\x81\xb5\xb1\x0f\x42\xab\x2a\xa8\xfc\x70\xb1\x00\xf3\x1f\xf2\x2d\xf6\x0a\xaa\x8c\x1c\x25\x42\xca\x61\x30\x53\x94\xc4\x60\x77\xc6\x92\x8d\xa8\x1c\x0a\x6a\x44\x21\x22\x55\x6c\x04\x56\x0c\x53\xe1\xec\xd3\x52\xe7\x8b\x98\x70\x8b\x01\xfb\x34\x07\xef\x3d\xf1\x9e\x5f\xfd\xbb\x77\x57\xc2\x9d\x62\xed\x9a\xe9\x46\x34\x49\x86\xb0\x8c\x4f\x99\x0f\x44\xa2\xee\xf5\xf4\x8f\x5c\xe4\xbd\x7b\xfb\xab\x6c\xf1\xd2\x4f\x4e\xcf\x0e\x43\x17\xb6\x9d\x4b\xbe\x0f\x5e\xe3\x74\x53\x69\x9a\x51\xa2\x3c\x5d\x60\xcf\xd0\x4f\xdb\x82\x2d\x99\x50\xb8\xcf\xa7\xe7\x1a\x09\x24\x97\xd4\x40\x27\x66\x18\xd1\x12\x12\xba\x56\xf9\x8a\x95\xd7\xef\x9b\x2b\xe0\xa8\x6b\xe2\x69\x84\xc4\x9e\x32\x06\x47\x26\x17\xcb\x0d\xad\x2d\xd8\x74\xb5\x95\x83\xab\x89\x38\x74\x38\x79\x78\x07\x79\x1c\x40\x85\x1b\x98\x02\x2e\x48\xf2\x6c\xd1\x94\x4d\x4d\x57\x8b\x55\x73\x73\x73\xbf\xa0\x9c\x57\x7c\xb1\xcd\xc5\x46\x5d\x4b\x0b\xd0\x82\x3f\x9b\xc0\xf3\x04\x2e\x5e\x05\x33\xa8\x40\xba\x38\x9a\xb0\xac\x84\xdf\x5c\x36\x8a\x26\x15\xe1\xbb\xdd\x43\x7b\x68\xe2\x69\x9a\xd5\x1a\xe2\x7e\x98\x2c\x0a\xf5\x36\xc1\x0f\x52\x44\x17\x16\x4a\x73\x52\x8d\xc2\x07\x2d\xc2\x5e\x35\x35\xa0\x47\x2b\x61\xd0\x47\x17\x72\x43\x37\x06\x38\x2e\x37\xf8\xfa\xdd\xc2\x08\xaf\x35\x02\xc7\x32\x58\x67\x34\xa8\xb3\x35\x4e\xcc\x48\xe5\x38\xd6\x38\x31\x23\x30\x3d\xe0\x46\x81\x48\xae\xdd\x38\x71\x85\xd7\x96\x99\xc8\x8c\xcf\xb9\x7b\x0b\x04\x6b\xdb\x74\xe9\xa2\xcf\x28\x78\x79\xfe\x6c\x4e\x23\x3d\xac\x11\x2d\xaf\x59\x49\x5f\x97\xeb\xca\xc0\x10\x9b\x44\xcc\x7b\x8a\x8d\xd6\x4d\x51\xc8\xe9\xea\x1b\x7c\x78\x8e\x70\xad\x80\x4c\x2c\x1a\x9f\x14\x26\x8a\xef\x74\xb9\x49\xde\xe2\x7d\x5d\x0e\x98\xfc\x90\xa3\x9a\x72\x06\xac\x94\x06\x7c\x60\x28\xac\x91\xaf\x56\x70\x97\x7e\x57\xf1\x57\x50\x39\x13\xb8\x76\xde\xf7\xcc\xcb\x43\xa8\x52\x3d\x25\x90\xa6\x94\x95\xd7\x27\xf9\x09\xec\xc1\x13\xdb\x05\x3f\x91\x6c\x37\x3c\xb3\x20\xfc\x8d\xa8\xd9\x8a\x9e\xe4\xe5\x89\x6a\xfe\x84\xd5\x90\x89\x10\xc4\x58\xba\x92\xeb\x66\x6c\x1b\xca\x0e\x20\xff\x50\x10\x09\x00\xdf\xe9\x31\x54\x46\x5c\xee\x9c\xe9\x71\x78\x0a\x35\x4c\x11\xe4\x17\x6a\xc1\x3a\xac\xbe\xef\x1e\x73\x94\xae\x15\x08\xa6\x41\x07\xc6\x9a\x0f\x5c\xbc\x1e\x99\xde\x55\x60\x3c\xc1\x3e\x88\x49\x98\xc5\x8d\x3a\xd0\x61\xf2\x6f\x48\x64\x74\xc6\xe7\x68\x24\x2a\xf9\xc7\xf0\x7c\x8e\xe5\x3f\xbf\x9e\x23\x00\x04\xba\xa9\x9a\xd2\x87\xed\x81\x3d\x66\xe1\x3c\x01\x08\xf5\xa1\x35\x81\x27\xc1\x17\xe4\xb4\xae\x8a\x5b\x15\xa6\xf6\x43\xbe\xcd\x04\xc2\x0d\x11\x03\x36\xca\xe5\x51\x6e\x88\xfc\xc3\xa6\x1e\x36\xa7\xab\x01\x81\xb2\x7b\xba\x14\x0a\xbc\xc0\x06\xc8\xe4\xf5\x6a\x52\x0e\x87\x18\xc6\xf6\xb6\x62\xa5\x98\x2c\xb1\xd9\xa3\x93\x65\x8b\x57\x84\x81\x31\x67\xd0\xcb\xea\xbd\x82\x3c\xc6\xc9\xb3\x64\xd8\xa8\xbe\x37\xc7\xd0\xb2\x26\xa4\x65\x95\x09\xef\x38\x3d\xc7\x37\x64\xcf\x46\x1f\xdc\xa4\x69\xb6\x05\x4f\x80\x78\x01\xa2\x33\xb1\xdf\x5a\xe2\x11\x9e\x28\x57\x72\xb2\x0e\x8f\x13\x92\x94\xe5\x36\xa4\x2c\xb7\x1d\xca\xb2\x69\x11\x24\xd8\xca\xeb\x5a\xd1\x97\x5b\x84\x0b\x72\xeb\x91\x15\xbc\x35\x59\x10\x23\x63\xbb\x51\x3e\x69\xf7\x07\x4f\x79\x22\xe5\x1c\xa6\x95\x08\x2d\x5e\x3b\x52\xb3\xe7\x5a\x82\x65\xbb\x26\x8d\x4f\xbf\xaf\x88\xdf\x8c\x7b\xbe\x38\xd8\xf5\x15\x74\xa7\x49\xe2\x75\x8f\x9e\x77\x37\x51\xfb\x28\x75\xb9\xc6\x0b\x84\xd5\xd0\xf4\x3a\x76\x06\xa6\x9f\x1e\x31\x2c\x7c\xf4\xb0\xb0\xfd\x54\x47\x8c\xae\x7d\xa4\xcc\x12\xdf\xeb\x76\x80\xd2\xac\xf0\x12\x17\xa8\x0b\x36\x94\x77\xd8\xb9\x88\x8b\xac\xff\x51\xc1\xcc\xa5\xb8\x92\x36\xa3\x28\x4d\x4f\x01\xe6\x6c\x6a\x1e\x0e\x93\x51\x32\x14\x3e\x84\x72\xed\x69\x0d\x42\x14\xa8\x07\x1b\x28\xaa\x07\xd1\x3d\xe8\xfd\xd3\xca\xe1\x14\xcb\xda\xca\x89\x49\x9b\x60\x75\x76\x4a\xf5\x10\x33\x5c\x82\x95\x5b\x13\x7b\xe4\x45\x61\x54\x4f\xe1\x48\xd5\xee\xaf\x13\x3c\x9b\x07\x5e\xce\x4f\x69\x23\x0a\xe8\xf2\xa4\x38\xf3\xc7\x23\x5d\x7d\xdb\xb5\x9f\x33\x7f\xad\x70\x1c\xa4\xd0\xef\xf3\xe6\x57\x79\xcd\x96\x09\x52\xa4\x60\xc0\x09\x1f\xd1\x4f\x82\x96\xab\xec\xc1\x38\xa1\xf6\x63\xeb\x93\xcc\x4c\x64\xa5\xf0\xd6\x4f\x5c\x83\x28\x31\x11\xbf\x25\xe9\xc8\x00\x4e\xd2\xb7\x79\x37\x4a\xcc\xe5\xf7\xf2\xc6\x56\x7e\x96\x6d\x6d\x2f\x6c\x05\xd8\xa6\x23\x32\x0b\x47\x0f\x02\xfe\x89\x0e\x95\x43\xc0\xa2\x96\x64\x4a\x34\x18\x5b\x0d\x9a\x14\x62\x06\xc7\x7e\xee\x10\xc8\xe6\x1f\x25\x8a\xc7\xe6\x7b\x48\xd6\x60\xb5\xaf\x6c\x33\x17\xd2\xad\x32\xfe\xd0\x27\x49\x6d\x70\x21\x9e\xb1\x72\x5d\xfd\xa2\x63\xa2\xd1\x82\x22\x07\xc3\x57\xdc\x7e\xbe\x7b\xd4\xd7\x08\x47\x5e\xd1\x2d\xa7\x4b\x79\x24\xce\xd6\x34\x17\x0d\xa7\x75\x54\x11\x9d\x8b\x03\x71\x46\x9a\xc0\x61\xad\xff\x59\xfc\xed\x71\xfc\xa3\xce\xa8\x9e\x4e\x7f\x8e\x86\x34\xfa\x62\x1b\xf5\xbd\xa1\xc5\xe4\x16\x83\x2e\xe7\x65\xf7\x79\x44\xfb\x43\x1d\x09\x27\x84\xdc\xb6\xde\xbe\xa7\xa3\x77\x6f\x7e\xfa\xf0\xea\xdd\xe2\xd5\x1f\x5e\xfd\xf8\x61\xf1\xf2\xd5\xdb\x77\xaf\x5e\x5c\x2a\xa8\x37\xfd\x6e\xf1\xe2\xcd\x8f\x3f\xbe\xd2\xf0\x6f\x9e\x3c\x7f\x13\xcf\x8b\x75\x6b\x3d\x41\x4e\xad\xf1\xff\xf9\x39\x4a\x53\x6a\xe8\xe9\x43\x2b\x99\x19\x08\x6d\xb5\xa0\x9e\x5a\xa3\x3c\x1b\xcf\x07\x0c\x32\xb9\x4f\xf9\x8c\xcd\x2d\xe2\xac\x42\xae\x98\x3c\x5b\xb0\xd5\xbf\xea\xbc\x50\x0c\xe2\x16\xbb\x85\x12\xb6\x4a\x8c\x54\xc7\xed\x1b\x87\xcc\x81\xfc\x34\x6b\x27\xbc\x6d\x63\x93\xbc\x51\x28\xba\xf8\x3a\x6e\x65\xa8\x9e\xec\x8b\xa7\xb3\xd8\x48\x09\x1d\x1c\xf0\x78\xd7\xf6\x50\xb9\xd0\x80\x2a\x16\x1a\xb0\xa8\xa9\xd3\x7f\xf6\xdd\xd6\xac\x89\xd3\xe8\x37\x24\xc7\xee\xca\xbf\xc9\x62\x81\xc0\x58\x39\x28\x2f\x40\x0d\x08\xac\x42\xdf\x99\x47\x27\x39\x05\xcd\xb4\x9f\x2f\x5a\x3f\x22\x54\xff\x31\xe0\x16\x5a\x31\xe3\x24\xa3\x44\xc8\x0f\xae\x5f\xee\x76\xb3\xb9\x03\x54\x64\xde\xf7\x52\xae\x73\x8b\x9f\xb7\xa3\x9f\xb7\x35\xa4\xcd\xf7\x6c\xd3\x66\x6f\x68\x58\x0d\x9b\xe3\x67\x38\xcc\x15\xba\x06\x05\x8d\x39\xf0\x49\x7c\x96\xcf\x5d\x92\x1d\x32\xbe\xa8\x1d\x44\xe5\x70\x58\x9b\x2c\x3a\x6c\x56\xcf\x07\x09\x98\x80\x13\xc8\xa8\x50\x2f\xab\xad\x24\xea\x8d\x64\xba\x44\x4d\x2a\xd4\xb6\xb0\x28\x39\xe8\xce\x7f\xff\x56\x63\xb2\xc4\x12\x60\x59\x5b\x66\xa7\x6c\x46\x55\xb3\x36\x2b\x2b\xd8\x9e\x85\x5a\x6c\x70\x0c\x64\xe5\x75\xac\xe5\x6e\xbb\xbd\xb2\x19\x1d\x35\xbc\x80\xbc\x81\x18\x34\x5a\xf9\x4d\xdd\xb5\xfd\x1f\x11\xf8\x0d\xed\x4f\x92\x21\x45\x41\x02\x09\x03\xd1\xfa\xd0\xfa\x1a\xd8\x7d\x16\x5b\x35\x69\x67\xa8\x92\xdf\x6e\x5a\xce\x56\xa3\xf7\x1f\x2e\x3f\xbc\x5a\xbc\xff\xf3\x0f\xdf\xbe\xf9\x7e\x3e\x39\xd8\x86\x8a\xb5\xc8\x09\x0f\xf7\xab\x52\x80\x88\x20\x1d\x81\x9e\xed\x2c\x9f\x4b\x51\xf7\x2e\xb0\x7e\xf8\x36\xf7\x06\x8d\x38\x5d\x35\xcb\x00\x6e\xda\x73\x75\xa3\x33\x31\x27\xcd\x4c\xcc\x31\x68\xaf\x74\xc4\x81\x26\x8e\xee\x2e\xff\x1d\x8d\x22\xf5\xd2\x3d\xc5\x0f\x27\x47\x36\xb3\x8f\x54\x04\x36\x4a\x36\xba\xa2\x9f\xdd\x6c\xb4\xaa\x6d\x78\xa1\xa5\x9a\xef\x2a\x1e\x6d\xd8\x8b\x31\x0a\x0e\xa5\x67\x50\x1b\x25\x43\xbb\xf1\x74\x8a\xf1\x03\x05\xb7\xbc\xda\xa2\xdd\xee\xa1\x55\xb1\x08\x35\x15\x8e\xb1\xdc\xe3\xfb\x22\x4b\xd2\x4f\x91\x18\xa6\x15\x85\x6d\xa6\x64\x6a\xed\x25\xa3\xdd\x97\xdc\xab\xc4\xbc\xd2\x09\x3b\xff\xc0\xe8\x5d\xad\x7d\xdb\xcd\x8d\xfe\x8e\x76\x13\x5c\x06\xd4\xcc\x5d\xe9\x03\xee\x83\x27\x45\x49\x95\x12\xb8\x47\xac\x54\x47\xc0\x74\xdf\x99\xaa\x32\xb8\xc1\x28\x68\x29\xc2\xa9\xdf\x28\xf3\x88\x6c\x71\x36\xd7\xd5\xf7\x4e\xd4\x4d\x53\xed\x13\xf3\xdb\x6f\x50\xbe\xd9\xf7\xfc\x51\x77\xae\x2f\x04\x56\x9e\xd1\x8e\x6b\x50\xc4\xa1\x09\xe2\x76\x37\xfb\x31\x8f\x38\xd2\xf1\x6c\x82\xf2\x1b\xba\x62\xb9\xf0\x28\xcc\xd7\x1a\xbe\xbd\x94\x0e\x0e\x0c\x57\x84\xcd\xc6\x73\x9c\x13\xa6\x35\xba\xe7\xe8\xa2\x37\xe7\x7d\x23\xb7\xf3\x9f\x55\xd6\x6c\x9d\x23\x1d\xae\xb3\xe6\x34\x16\xf5\xf7\x98\xc7\x0c\x54\x33\x30\xc9\xf5\x3e\x17\xb3\xaf\xfe\x99\xbd\x7e\x9f\xf6\x95\x3b\x59\x7c\x3d\xd0\x0c\xd6\x3d\x95\xb2\xbe\xaf\x94\xd5\xde\x5c\x9d\x52\x52\x04\x66\xe0\x9c\xc7\xd6\x19\x27\x95\xae\xd1\x97\x6f\x33\x86\xf0\x69\xa7\xb2\x49\x04\x18\x39\xf1\x89\xbc\x72\x5c\xb6\x86\xa9\x2b\x52\xe3\x64\xeb\x5d\xf2\x75\x82\x26\xb3\xf9\x45\xe7\xe6\x11\x71\xf0\x6b\xff\xea\x85\x16\x57\x36\x95\xc2\x77\x15\x37\xbc\x83\xe2\x57\xbd\x6b\x3d\xd7\xd7\xb8\x4b\xbc\xa0\x59\x5a\x8d\xed\x1e\xa4\x45\xf3\xb4\x3d\xd7\x54\x84\x89\x5f\xed\x9b\x9a\x0a\x4d\xd5\x43\x79\x04\x99\xec\xc1\xc5\x68\x45\xb7\xb4\x5c\xd1\x52\xfc\x8e\xde\xbf\x00\x41\x0c\x65\x0f\xd7\x54\x4c\xa0\x5d\x48\x43\x0e\xed\xb4\x08\xb5\xca\xbf\x63\xb5\x32\x79\x76\xa0\x99\x21\xa0\xd6\x61\xaa\xb0\xe9\x34\x3b\x03\xe9\xfa\x11\x6a\x51\xc6\x71\xa3\xc9\x9e\xfb\x20\x84\xb7\xca\x38\x14\xff\x22\x6b\xb2\xd4\x94\x58\xa5\x98\xf0\xa9\xf6\x7a\x04\xa6\x86\x37\xb7\x94\x73\xb6\xa2\xb5\xfc\x0a\xb0\x25\x81\xd5\x85\xbb\x0a\x3e\x17\x0a\x7c\xf1\xb0\xe8\x72\x2f\x6a\xb3\xbd\x2e\xd7\x95\xd6\xa6\x6f\xf5\xde\xbf\x72\x88\x8a\xf8\x86\xc8\x7a\x6f\x2f\xdf\x5d\xfe\xf0\xde\x54\x1c\x2c\x47\xc1\xbe\x88\xec\x00\xeb\x30\xb7\x1c\xdd\xe4\xdb\x19\x9d\x0f\x84\xd1\x1b\xdc\xf8\x24\x69\x99\x17\xcb\xa6\x80\x60\x92\xe5\x86\xca\x2b\x38\xd3\x86\xc4\x0e\xd3\x24\x14\x0b\x8b\x4d\x33\x92\x62\x6d\x0d\xcf\xc7\xe4\x65\x34\x6a\xca\x15\x5d\x56\xa0\x7b\xd2\x62\x23\xb8\xa9\x86\xe0\x3f\x14\x57\x36\x2d\xf5\x2d\xb9\xd3\x96\xb1\xee\xd2\xb8\x3a\xbe\x6c\xc5\xf1\xad\xd6\xa5\xc2\xe1\xee\xdd\x86\xda\x5b\xd9\x03\x43\xb3\x4a\xd7\x7a\x53\x35\xc5\xea\x9d\xdc\x66\x3c\x4d\xf5\x8d\x2a\x7f\x7c\xa0\x37\x5b\x39\x7f\xf0\xcf\x52\x68\x44\xeb\xa2\xa9\x37\x97\xf5\x7d\xb9\xf4\x92\x39\xc9\xcd\x24\xaf\x7c\xbb\xbd\x62\x0e\x07\x9d\x24\xbb\xfe\x77\xdc\xbf\xde\x3c\xba\xde\x5c\xaf\x37\x37\xeb\x3d\x28\xd5\xfe\x52\x8b\x8d\x80\xff\xb9\xa2\xeb\x8a\xd3\x1f\xa4\xc0\xd1\xbb\xaf\xd7\x92\x9c\xc7\xde\x70\xba\x62\xbc\x13\x6f\xd5\xe2\xda\x48\x91\xd6\x67\xbb\xc7\x2e\x69\x97\x17\xd5\xa8\x3d\x4e\xf4\x93\x90\xb5\x6f\xc2\xae\x2c\xb6\xa4\x49\xf1\x14\x63\x75\x6e\xf2\xad\x97\xbc\xb4\x01\xc1\x1c\x81\x64\x1f\xe0\x5b\x4a\x51\x6a\xb7\xab\xd3\x14\x4a\x98\xa4\xa5\x05\x69\x94\xa9\x2d\x7b\xf6\x7f\xb3\xd1\xff\x40\x20\xbb\x2b\x3a\x75\x4a\x48\x01\xf6\xad\x62\x76\x2e\xaf\x54\x3a\x6b\xe6\x72\xbf\x9e\x8e\x5b\xd9\x3a\x83\x6f\x65\x72\x94\x75\x65\x01\xaa\x93\xca\x68\x23\x18\x58\xec\x9e\x9f\x9b\xe4\x06\x46\xb2\x3f\x70\x96\x67\x61\xdd\xb3\xf3\xb9\x5d\x27\xff\xe6\x5d\xb3\x72\x05\x4b\x99\x31\x9c\x77\x99\xf4\x3d\x81\x34\x60\x5e\x84\x3a\x6a\x83\x59\x19\x2d\xeb\x5c\x5e\x14\x69\xe6\xd0\xf6\xd2\x33\x56\xba\x0b\xb7\xfb\x69\x6a\x51\x71\x9a\x20\x04\x95\xed\xa5\xeb\xc3\x1f\xf6\x0e\x60\x37\x82\xc5\x64\x4b\xd2\x20\x22\xf6\xfc\x53\xac\xc5\x63\x3d\xbc\xe0\x76\x8d\x67\x9d\xe9\x2b\x16\x20\x2f\x76\x5f\xd8\xe4\x69\xca\x3b\x97\x3a\xe8\x53\xbb\x0f\x8d\x5e\x59\xc4\xfd\x61\x3c\x4f\x20\x15\x44\xdf\xbd\xde\x8f\x1c\xa6\xc3\xf3\xb2\x30\xba\x80\xe6\x85\xec\x69\x89\x4e\x19\xc7\xa5\x6b\x1c\xca\xcb\x9a\x84\xed\xe1\xde\xa6\x4f\x12\xad\x27\x5a\xe9\x26\x88\xa2\x44\xf9\x55\xe1\x7f\xbf\x72\xfa\x06\x68\xe3\x84\x5a\x8c\xc2\xee\xe2\xeb\x3c\x20\x70\xf2\x4a\xe3\x99\x50\xa5\x69\xe5\x76\xe4\x6e\x27\x54\x62\x10\x7d\x34\xd4\xa6\xac\xbb\x29\xbd\x72\xeb\xa7\xd5\x2d\x39\xcb\xe7\xe6\xf8\x40\xcb\x3e\x31\x52\x54\xcd\xa7\xe6\xfd\x58\x52\x78\x6d\x22\xd8\xe5\xdf\x51\xd6\xb0\x24\x90\xec\xab\xc3\xc8\x0e\xca\xdd\xae\x9f\xf0\x46\xce\x69\xca\x09\x9d\x64\x5a\xcc\x13\xba\xf3\x28\x3b\x29\x08\x45\xc6\x8a\xb6\x50\x07\xad\xc4\x5c\x72\x56\x37\xca\xcf\x0c\x74\x28\x60\x1d\x63\x70\x0f\x2d\x47\x55\xb9\xa4\x1d\x1e\x22\x59\xd4\x54\xbc\x69\x44\x41\x45\xad\x25\x36\x56\x2f\xab\xb2\xa4\x4b\xfd\x38\xb6\xa3\x00\x65\xa3\x9f\x0b\x7f\x2a\xe4\xe0\x21\x54\x11\xaa\x02\x48\xa4\xb2\x0e\x4a\x21\x77\xea\xff\xf0\x23\x44\x9f\x5d\xe3\x64\x94\x20\xbd\x6f\x10\xc2\x42\xa5\xab\xcc\x99\xc5\x8f\xea\x8e\x0a\x9c\xf5\xbc\xa4\x27\x07\x37\xa8\xef\x90\x09\x14\x55\x03\xe7\x95\x7e\x1a\xee\x72\xc6\x34\xd1\xdd\xd3\x1b\xdc\xd6\x07\x56\xc7\xc9\xe8\x57\xe6\xc0\xa6\x29\xe4\x12\x72\x5f\x0d\xa2\x47\xf5\x34\xbd\xd1\x7b\x5f\x2c\x36\x34\xed\xc9\x23\x47\x38\xa8\xf4\xda\x2a\xeb\x4e\x25\x25\xb8\x4a\x83\x2e\x02\x02\xe0\x03\x18\x3c\x26\x95\xca\x13\x86\xe5\xeb\x89\x2a\x85\x55\xc5\x89\x69\x01\x83\x27\x45\x05\x4a\x49\xec\x51\x2c\x93\x67\x4a\x6f\x3e\xf3\x1b\x28\xcc\xc4\x80\x9a\x1c\xb7\x9f\x50\xeb\xa9\x0e\x14\x86\xc8\xa1\xa0\xff\x88\x46\x24\x78\xd4\xf7\x8f\xf1\x16\x6e\xe0\x02\x6b\x5d\xe6\x9c\x6f\xc6\x69\x9a\x75\xd4\x17\xc7\x0e\x5d\xb2\x43\x0d\x2b\x56\x76\xdb\xfc\x40\x45\xbe\xca\x45\x1e\xf2\x39\x55\x14\xf8\xf1\xca\xd1\xf2\x9e\xc3\x6a\x68\x0b\x57\xe2\xdf\xa9\xc9\x71\xd5\x4d\xe4\x63\xf6\x41\xa9\xb2\x19\x82\x9b\xb5\xf2\xcb\x23\xc4\x26\xbf\x12\xb3\x72\xc8\x8d\xc4\xdb\x66\x20\xb6\x1c\xd2\x61\x7a\xcc\x05\x3e\x3b\x77\x21\x2f\x69\xaa\x79\x75\x67\xc4\x5f\x84\xae\xff\x9e\xad\xa8\x7b\xad\x80\x7b\x8e\x4b\x52\x54\x42\x72\xdf\x12\xb6\x5e\x9a\xaa\x7f\x23\x87\x1e\x37\xa4\x34\x1b\x72\x4d\x4a\xef\x6a\xc5\x85\x09\x7f\x92\x85\x1a\x47\x10\xa6\x59\x45\xa8\x47\x09\x73\x42\x3b\xa4\xb2\x42\x93\x9c\x54\x21\xfc\x84\xe9\xcf\x2e\xff\x3a\x4d\xb3\x35\x11\x53\xda\x13\xdc\x97\xf1\x8b\xbc\x42\x93\xbd\x6f\x76\xbb\x7e\x33\xde\x18\x11\xee\x51\xcb\xb5\x5a\xd0\x15\x59\x0f\xa4\x6c\x18\x6d\x77\x85\x5c\xc2\xc8\x62\x5a\x10\x1a\xdc\x52\x93\x35\x6c\x6c\xc3\x00\x15\xda\x8b\x09\x6f\xbd\xe6\xec\x29\x4e\x86\xb9\xfd\xce\x75\x9a\x66\x1b\x22\xb7\x28\x4a\xd3\x9a\x10\xb2\x09\x28\x94\x4d\xe1\x88\x35\x31\x59\x2a\x32\x52\x1b\x0a\xd2\x68\xd2\xe1\x53\x8d\xb5\x26\x10\x45\x97\x70\x9c\x12\xb2\x9d\x6e\xb3\x25\x9a\xd0\xd1\x42\x54\xdb\xef\xe9\x2d\x2d\xe4\x71\xb6\x82\xd2\xd2\x47\x23\xbd\x53\x9c\x3e\xf7\xc3\xc5\x24\x5f\xd3\x7d\xb0\xdb\x69\xbd\x3f\x23\x1d\x49\x47\x71\xdb\x61\xe9\x19\x73\x29\xb6\xfb\xaf\xec\x99\xab\x3a\xf2\x86\xad\x22\x3b\xf0\x2c\xe7\xbb\x5d\xd6\x7b\x46\x1e\x5a\x1c\xb0\xfe\xbd\x12\x38\xe8\x1a\xc9\x43\x1a\xd5\x85\xd7\x46\x82\x53\x07\xb4\xd7\x0e\x42\xfd\x67\x6d\x66\x8f\x3c\x86\x38\x8f\xc8\x34\xe5\x08\xeb\xd0\xfa\xe8\x4c\x59\x2a\x45\x70\xed\x8c\x50\x8d\x91\x8a\x20\x33\xf0\x92\x14\xa0\x22\x80\x04\xb5\x83\x7c\xa6\x7e\xcd\xc9\x72\x5a\x99\xbf\x27\xaf\x32\x9b\x91\x43\xc9\xe9\x86\xbf\xca\xdd\xe7\x7d\xe5\x59\x27\x82\x3c\xf5\x19\x45\x53\x80\x73\xbc\x44\x19\xd5\x1a\x4b\x84\x26\x1e\x25\x7a\x63\xad\x7c\xd4\xb2\x95\xce\xe5\xc5\x39\x00\x0e\x22\xce\x4b\x2a\xd1\xf5\x84\x2b\x27\x25\x2b\x36\xb5\xd7\x3a\x80\xe4\x45\x91\xd7\x75\xf6\xc0\x54\x24\x94\xf6\x27\x51\xa6\xec\x6b\x2f\x50\xba\xf6\xac\xd9\xa6\x6a\x56\x8d\x2e\x61\x80\x1a\x2d\x06\x57\x2e\xc6\xaf\x9b\x79\xf7\x60\x9e\x85\x87\x16\xfb\x54\x4c\xa7\x59\x00\x8b\xa4\xfa\x3b\xa4\x2f\xea\x19\x88\x56\x13\xf8\xa6\x26\xf4\x4d\xab\xba\x7a\x77\x65\x54\xa6\xe8\x30\x95\x3d\xa1\x5a\xdf\x22\xa5\xf1\xcc\xb2\xd8\x58\x0f\x52\x96\x9b\xf8\xbe\xe1\x46\x55\x11\xba\x1f\x29\xaa\x60\x59\x7a\x23\x23\x97\x92\xd4\xcb\x45\x57\x42\x61\xc6\x95\x21\xd3\x1f\x37\xd5\x6a\xb0\xbe\x9e\x0f\xc6\x46\x6d\x92\xe9\x16\xe1\xc5\xcf\xdb\xee\x22\x74\xd1\x29\xa9\x86\x3c\xc2\xf9\x51\xda\xda\x3a\x2e\x35\x35\xa4\x8e\x93\xea\x1c\xa9\x64\xd3\xfb\x6c\x4d\x09\xc2\xcb\x20\xda\xb6\xf0\xa2\x6d\x55\x06\xe8\x5b\xc8\x61\xec\xda\x68\x3a\x0d\x00\xc9\xa3\x11\x95\x48\x29\x4f\x36\x23\x0f\xfe\xe1\x9b\x9c\x8e\xb1\xdc\xb3\xf2\x5f\x30\xef\xca\x3f\xf2\x5a\xee\x69\x47\xee\xac\x82\x84\x76\xe5\x26\x83\x5b\x9e\x93\x87\xf6\x22\x20\x6b\x39\xa6\xb3\x6a\x8e\xf9\xac\x9a\x23\x5c\xce\xaa\x39\xc9\x31\x93\xff\x9c\x8e\x6d\xf6\xeb\x7a\x7f\xf6\xf5\x1a\xa5\xe9\x29\x9b\xd5\x73\x63\xe3\xee\xb6\xdf\x60\x3e\xab\xe7\x98\xca\x22\xb8\x9c\xd5\x73\xd2\xb4\x56\x7e\xce\x40\xe7\x65\x63\xef\x9c\x0c\xed\x93\xc7\x6c\x8d\x70\xa1\x7d\x2a\x96\xe0\x5f\x1c\xca\xcc\x35\xce\x11\xa6\x44\xdf\x97\x2b\x32\x9b\xe3\x1b\xb9\x82\xb7\x64\xe6\xae\x82\xfb\xfd\x6b\x73\x8f\xd2\x34\xd1\x99\x1c\xcd\xc3\xe4\x94\x90\xfb\x34\x4d\x14\x8a\x21\xfc\x32\x2e\xae\x74\x76\x3f\xc7\x57\xe4\x5a\x59\xd9\x25\x1b\xa3\xee\xeb\x85\x61\x96\xbc\x8d\x24\x09\xd5\x55\x9a\x66\x0b\xc8\xdb\x2a\xeb\xdf\x91\xeb\x51\x5e\xeb\xed\x19\xb7\xfc\x66\xf7\x08\xbf\x09\xf6\xcd\x3d\x1a\xbc\x21\xaf\xb2\x37\xaa\x89\xf7\xe4\x7a\x24\xb7\x02\x68\xcd\x2b\xf8\xf3\xcd\x1a\x65\x6f\x10\xfe\x44\xf6\x35\x9b\xbd\xc1\x77\xf8\x3d\xc2\x97\x24\x1f\x26\x93\x64\x78\x8f\x3f\x92\x87\x3d\xfa\xd8\x49\xd8\x35\x0e\xb6\xe1\x1b\x6c\x5b\x0f\x2b\x7d\xf2\x5e\x98\x27\xb0\x61\xdf\x63\x65\xbb\x9d\xdc\x61\x79\xaf\x4c\xee\x71\xdf\x3d\x61\x72\xd9\xa5\x86\x39\x56\xca\x03\x38\x78\xa0\xe9\x9c\x2c\x54\x9e\x69\x4d\x3d\xd5\x21\xb8\x6a\x07\x37\xb3\xfb\x39\xb9\x99\xdd\xc9\xff\x5d\xce\xc9\x47\xbc\x52\x52\xf2\x47\x84\x6f\xd5\x5f\xf7\xe6\xe6\x7a\xf8\x79\x5b\x4f\x56\xf8\x26\xdf\x4e\x6e\x70\xa0\x21\x9f\xdc\x62\xa5\xcd\x9f\x3c\x18\xc3\xea\xa4\x2f\x0a\x96\xe4\x66\x46\xe7\xca\x46\x6b\x7d\x22\xb4\xdb\xff\xa3\x95\x0c\xef\xd1\xab\x8b\x23\x3e\x1c\x25\xe8\xbf\x42\x33\xc2\xe7\xb6\xdd\xf7\xe3\x28\x25\x75\x6e\x11\xc2\x35\xf5\x89\xfe\x17\xc5\xd8\x38\x5e\x1b\xb5\xdb\x9d\x66\x63\x5c\x8f\x58\xfd\x81\xd6\x72\xa0\x28\xd3\xd4\xaa\xbc\xc8\xca\x8e\xb9\x4f\x8e\x58\xab\x1c\x61\x8d\x24\x55\x30\xde\x5b\x16\x6b\x5e\x9b\xe6\x72\x98\x16\xc0\x47\x78\xfa\xdc\x93\x00\xde\x02\x14\xe5\xba\xe0\xc4\x0f\xe3\xb5\x6a\xee\x49\x57\xe0\x3b\xe8\x49\x94\xa0\xd1\x4d\xbe\xc5\x55\x70\x37\x50\x64\x8c\xae\xfe\x53\x8e\x8c\x6f\x51\xe5\xfb\x16\x69\x43\x20\x9b\x55\xb3\x7c\x0e\x23\xaf\xb5\x86\xd4\xf6\x14\xf7\xaa\xc8\x6a\x84\x13\x6d\x97\x05\x81\x22\x41\x9d\x85\xf7\x03\x60\xad\xde\x4b\xd9\x71\xd1\xe0\x8a\xd3\xfc\xa3\xc9\x17\x7b\x3a\x6e\xf1\x9a\x95\x1d\x2a\xb2\x67\x41\xd8\x3a\xeb\xba\x96\xf7\xbd\xc0\x5c\x02\x66\x67\x07\x61\xb8\x22\x87\x34\xe5\xe6\x6e\x37\x9c\x70\x4d\xf2\xd1\x22\xe4\x83\xb3\x4a\x5e\xe2\xf2\xf1\x56\xe1\xaa\xd5\x90\x7f\xe4\x22\x6e\x6f\xcb\x71\xe5\xf4\x34\x4b\x32\xbe\x58\x3e\xaf\x25\xc3\xec\xd6\x7f\x69\xee\x6d\x78\x3e\x5b\xce\xf1\x96\xac\xd5\x90\xf0\x0d\xd9\xfa\xf2\xec\x2d\x59\x6b\xb7\x14\xb8\x5b\xd2\xd4\xfc\xc4\xf7\x26\x61\xd7\xb5\x27\x40\x37\x10\x37\x6a\xca\xa0\x69\x76\xef\xed\x9f\x1b\xbc\x56\x9e\x2b\xf8\x9a\x6c\xa3\x04\xfc\x1e\xdb\xe6\xd7\x40\xf3\x11\x9a\xdc\x4e\x5d\xde\x7e\x79\x31\xdd\xce\x51\x9a\x66\xf7\x64\x1b\xf7\xe7\xc9\xae\x23\x6d\x64\xd7\x64\x3d\x8a\xd3\x74\x7c\x4f\x5e\x65\xeb\x50\x06\x40\xf8\x66\x8f\x87\xca\x76\x9f\x7b\xca\xf5\x29\x09\xba\x50\x0d\x3d\x74\xc5\xba\x37\x65\x71\x9f\xa6\xa7\xe7\xa7\x84\xe8\x60\xb7\x2b\xb2\xdd\xb3\xd3\xd7\x48\x45\x6b\xe8\xae\xaf\xb0\x03\x23\x18\x2c\xa6\x8c\x9c\x8e\x27\x90\xbb\x64\x01\x56\x9e\xd3\x73\x6d\x16\xae\xfd\xa5\x96\x57\x5b\x01\x5c\x4e\x77\x6c\x44\xae\x53\x7c\x49\x08\x21\xd7\x69\x7a\xca\x0f\xc2\xee\xec\x76\x2a\x86\x2f\xd3\x2e\xb4\xd7\xf8\x96\xd5\x4c\x67\xbc\xfb\x48\xef\x27\xb7\xbb\x9d\xf9\x10\x2d\x6a\x4f\x41\x1d\xa0\xcf\xf8\x3e\xdb\x22\x66\x69\xca\x23\xd0\x0b\x6a\xfb\x1e\xb0\xef\x7a\xf2\xa1\xde\xc6\x8a\x4c\x0d\xf4\x4f\x6f\x47\xef\x73\x3d\xc2\x89\xfe\xa8\xe6\x93\xca\xab\xc3\x3f\x72\xa3\x65\x41\x73\x9e\xa9\x5b\x05\x1f\xf2\xe9\xbd\xc7\x4d\xf0\xf6\x3d\xa4\x87\x3e\x50\x9e\x3c\x54\xe5\xa4\xab\x58\x3c\x84\x2d\xdd\xb6\x4e\x94\xbb\xc7\x0f\xce\x04\x36\x89\x9a\xcc\x9c\x19\xea\x29\x26\x11\x65\x40\x71\xd6\x35\x8a\x26\x02\x2e\x54\xe0\xc8\x6a\x2a\xbe\xe3\xf9\x0d\xbd\xab\xf8\x47\x90\x44\x51\x76\x6d\x59\x37\xcf\xc7\xff\xfd\x93\x1d\xeb\x9f\x08\xda\xf6\x45\xdc\xe8\x9f\xe2\x2c\xaf\x23\xa9\x0e\x60\xb5\x3c\x39\x3f\xc7\x31\x29\xa5\x9f\xe4\x48\xff\xd4\x44\xc9\x4f\xcb\xaa\xbc\xd0\xc8\xb3\x5e\x18\xc0\xe7\x27\x1e\xf6\x9c\xda\xd1\xc3\x5b\x2d\xb2\xaa\x8d\xaa\x32\xb2\xbc\x2f\xaa\x3b\xcf\xcf\x8b\xdd\x38\x28\xe3\xb2\x12\x6c\x7d\x6f\x98\x6c\x75\x73\x67\x49\xc3\x0b\xe3\x30\x08\xba\xc6\x00\x12\x43\x7b\xfe\x39\x5c\x0d\xa4\xdc\x6f\x9c\x72\x3d\xf0\x0d\xc4\xc9\x8a\xad\x5c\xef\x09\x72\xba\x9d\x7b\xc3\x1a\x1c\xae\x7f\xc7\x8a\xc2\x6b\x00\x73\xaf\x89\xeb\x8e\x8f\xe6\x67\xc4\x2c\xe8\x7e\x40\x7d\x43\x2e\xe3\xa8\x00\x57\x44\xa9\xad\x3c\xa5\x50\xc1\x96\x14\x2f\xbe\x98\xef\xbd\x05\x6e\x52\x11\xf6\xa2\x87\x27\xd2\x79\x0e\x80\x8f\x91\xa2\xe6\x99\xe4\xf1\x01\x8e\x43\xaf\x88\xca\x42\x98\xe9\xa8\x20\x8f\x2a\x03\xc3\xfe\x9e\x0a\xf9\x50\x21\xb9\xac\x20\x9e\x3a\x78\x61\x02\x43\x55\xf4\x6d\xbd\xaf\x51\x17\x3f\xfa\xed\xbd\x1a\x4d\xbc\xa0\xbf\x9f\xcc\x80\xbd\x0d\x65\xe7\x00\xde\xaa\xbf\x6f\x68\x43\x57\xee\xf6\xa4\x82\x72\xb5\x51\x6b\xb9\x8b\xa3\x28\x49\x8f\x46\x2a\xb0\x92\xa9\xf5\xe2\xbf\x8d\x18\x98\x20\xf8\xe1\x3a\x92\x14\x00\x69\xaf\x3f\x95\x1c\xab\xec\x29\x8a\xe2\x2b\xe3\x81\x40\x96\xde\x2e\x69\xfc\x4c\xdb\x4f\xc5\x81\x6a\x70\xa9\x66\xb8\x24\x4d\x7f\x86\x4b\x39\xb2\x3e\x0e\x94\x46\x7d\xc0\x9c\x54\xb8\x24\x2c\xf2\xc1\x66\x62\x3e\x28\xc1\x42\xc5\x46\x8b\x6b\x2a\x5e\x05\x1f\x3e\x2b\x91\x94\xf0\x46\x41\xcc\xab\xc9\x18\xe4\xec\xf8\xb8\x71\xd6\xfd\x1c\x34\x80\xf5\x8c\x5a\x55\x7c\x63\x1e\x90\xd3\x31\x3e\xb5\x0a\x67\x1e\x28\x10\x55\x5b\x9d\xd0\x45\x17\x55\x98\xe3\xc2\x44\x31\x22\x14\x76\xd7\x02\x13\x1d\x84\xa2\x80\xd7\x68\x9a\x9e\x02\xb7\x1f\x89\x46\x42\x59\x83\x0e\xc2\x09\x2c\x9b\x5a\x54\x37\x0e\x4f\xe0\x44\x71\x58\x27\x55\xe9\xe1\x07\x28\x7c\x01\x8d\x22\xa0\x01\x68\x15\x8e\x80\x99\x78\x8b\xe1\xbb\xd8\x7e\x63\x3e\x20\xd1\x8f\x42\x95\xac\x6c\x0d\x7f\x5d\xf0\x84\xdd\x6e\xd3\x0b\xbd\x92\x9d\x35\x7d\x0c\x69\x11\x50\x5b\x5f\x5d\x4a\x35\x46\x75\x16\x64\xc5\x60\x38\xf1\x40\xe5\xa4\x20\x8c\x90\x6c\x3a\x20\xea\xc1\x3c\xf2\x2e\xeb\xc6\xc2\xc2\xb8\xf3\x1b\x70\x7e\x96\xa3\x90\xca\xf7\xec\xa7\x91\x56\xc3\x1a\xb8\xfb\xc0\xa2\x84\x2d\x43\x12\xdf\x47\x37\x33\x96\x09\x48\x73\x94\x31\x64\xdf\xc8\xba\xf0\x59\x1d\xa2\x69\x30\x55\x76\x18\xf8\xd4\xd4\x8e\xf8\xc2\x41\x65\xff\x6e\xd5\xd9\xc5\xe9\x48\x54\xc1\x7d\xea\x7f\xa1\x6e\x77\x7d\x5c\xd4\xa5\xe7\xcf\xfe\x92\x29\x42\x1e\x77\x02\xa3\xa3\xbb\xbc\xbe\xbc\x82\x3d\x2a\x25\x11\x66\x7e\x4c\xb3\x31\xbe\x19\x15\xd5\x35\xfc\x46\x99\x40\x93\xcc\x01\xb2\x9e\x9e\x5b\x98\x01\x3a\x82\x3f\xb0\xc0\x5a\x46\x40\x98\x8d\x16\xac\x86\x4e\x95\x59\x64\x95\xe9\x42\x68\x0a\xfe\xa0\x1a\x68\xdc\xc4\x22\x04\x73\xc8\x20\xae\x5b\x95\x96\x3d\xe6\xb2\xfb\xcc\x3d\x83\xd9\x2d\xf4\x38\xdc\x42\xbf\xd0\x41\x6b\x7d\xc7\x74\xd6\xad\xf0\x3d\xcd\x43\x7c\x4f\xbf\x60\x2c\xd9\x86\xb5\x3b\xd9\x77\x07\x0e\x8f\x2b\x74\xc4\x01\x02\x2d\x35\x2c\x82\x3d\xa2\x00\x26\xd9\xb4\x99\xcd\x6a\x8e\xf0\x32\x10\x37\x8c\x98\x01\xf7\x72\x83\xd7\xd6\xa0\x51\x0b\xde\x48\xca\x39\x5a\xd5\x85\x01\x73\xaf\x77\xbb\xd9\xf5\x1c\xaf\xac\x0b\x29\x2b\x56\x2f\xdf\x7f\x9f\xa1\xc1\xca\x20\x86\xf8\xba\x18\x87\x1b\x82\x3b\x88\x05\xa7\x63\x5c\x69\xd5\x22\xf8\xc7\xd7\x35\xe5\xe0\xee\x75\x3a\x6e\x83\xf0\x5f\xa7\x14\x1c\x5f\xd0\xe7\x6b\xa3\x2b\xa1\xc3\x21\x5a\x03\x0c\x5e\x5e\x14\x3a\x0e\x00\x21\x0c\xfe\xc4\xd9\x2a\x00\xb9\xc1\xde\x40\xf7\x80\xa2\x2c\x36\xb9\xe6\xe2\xbe\xcd\x6b\xba\x7a\xa7\x7c\xbb\x80\x9b\x55\xf7\x32\x8f\xdf\xcb\x8c\x3c\xc4\x11\x29\x26\x14\x77\x60\x4a\x26\x91\x88\xaa\xc8\xdd\x74\x76\x93\x6f\xc1\xcd\xaf\xc5\x3d\x24\x86\x4e\x6e\xf4\x18\x63\x34\xa3\x80\x1a\x13\x7f\x43\x38\x6a\x2d\x1a\xa1\xfc\xda\x36\xed\x3f\x30\x14\x98\x99\x94\x18\x87\xb9\xa3\x7e\x7e\x8c\x9f\x55\xe1\xb7\xa6\x80\x0a\x7f\xda\xb3\xa8\x51\xb6\xa8\xb7\xb4\xe0\xc6\x42\x43\x80\x59\xe1\x31\x50\x14\xfb\x1b\x6d\xb4\x58\xa8\x3b\x9c\xdf\x2f\x16\xc6\x35\x8f\x8f\x6e\xfa\xbd\xbb\x6b\xd3\xc2\x5d\x29\x8f\x51\x91\x73\x20\x96\xac\xbc\x7e\x9c\x71\x93\x6c\x1e\xcb\x0b\x40\x2e\xb5\xea\x66\x70\x3a\x55\xcc\x1f\xa8\x90\xc3\xb8\xf9\xfd\xbc\x9f\x97\x59\xe9\xd6\xcb\xc1\x63\x12\x2f\x64\xca\xe5\x57\xa1\x72\x01\xc9\x52\x2c\x85\xfe\xd5\x5a\x7f\x57\xd5\x75\x7c\x87\xeb\xe4\x33\x50\xee\x7b\xdd\x73\x86\x7a\xab\xda\x1d\x9a\x41\xee\xf5\x4a\xc4\xd2\xef\x22\x03\xf8\x12\xf0\xbf\xf2\xf4\xf8\x09\x27\xc2\x08\x10\xea\xcd\x10\x88\x17\x3e\x1d\xeb\x90\x5c\xeb\x38\xe5\xcf\xc5\xc6\xe3\xb2\x5a\x7b\x7c\xb1\xf2\x3a\x4d\x3b\xcf\xe8\xca\xd8\x67\x85\x49\x4a\x73\x8c\xff\x9e\xdc\xfe\x5a\x33\xec\xbc\x37\xc6\x17\x95\x8b\xbb\xad\x86\x43\xf4\x40\x09\x9f\x55\x5a\x45\x6c\x15\xb9\x39\xd9\xf4\xa3\xa8\x35\x6a\x1f\x36\xde\x2f\xda\x23\x22\x37\xcd\x35\xc6\x11\xaf\x20\x3f\x64\x0c\x0b\x9c\xcf\x9a\x39\x1a\x30\x52\x8c\x0a\xa6\x89\x46\x2d\x6f\x84\xbb\xf2\xbd\xf2\xb1\x02\xaf\x50\x30\x9d\x03\x76\x8a\xe7\x62\xa3\x3c\x99\x4e\x09\xe9\x17\x57\x2e\x36\xbb\x5d\x56\x7b\x2f\x51\x0b\x5e\xa4\x0e\x82\xb3\x26\x7f\x83\x31\x40\x1e\x4a\x52\xb7\x00\x83\x65\x8d\x28\xa2\xda\x16\xc6\xcb\x06\xf5\x1f\x8d\xec\xe7\x52\x59\x93\x18\x1a\x58\xab\xc8\x32\x4e\x35\xd7\x64\x19\x10\xbe\x5b\x46\xef\x26\x67\x6a\xac\x89\xf6\x22\x08\xfa\x20\x6b\x23\xf8\x18\x05\xc4\xe1\x11\x60\xe7\xb2\x74\xe6\x51\x89\x33\x03\xf3\x34\x81\x15\x43\x92\x5f\x7c\x01\xed\xbe\xab\x2a\xf0\x23\x8d\x4d\xb9\x55\x41\xd1\xf1\x44\x28\x06\xef\x4e\xa1\xa2\x3d\xfb\x97\x6c\x34\x44\xd3\x67\x68\x36\x9e\x87\xc8\xcf\x3d\x14\x77\xdb\x9c\xf1\x35\xef\x16\xd9\x1f\xaf\xd9\xd9\xd0\x33\x3a\xcf\x04\xe4\x00\xb7\xa4\xed\x5d\xc6\xb1\x76\x46\x3f\x2a\x08\xf2\x8b\x60\xda\xaf\x1f\xc7\xb4\x7f\x1a\x96\xfd\xfa\x89\xa8\xe6\x79\x88\x6a\xde\xfd\x00\x1d\x20\xfb\xfc\xc8\x60\xcb\xaf\x83\x28\x7f\xd1\xc1\x92\xb7\xa8\xc1\x8f\x05\x51\x76\x31\xe6\xf1\xdb\x47\x83\x20\x7f\x39\xce\x7e\x1d\x01\x95\xfb\x4a\x48\xfb\x8a\xf4\xee\x5d\x9d\x47\x10\xf7\x83\x6f\x6e\xf3\xdc\xba\xcc\x75\x95\xfa\xe8\x3d\x4c\x7e\x1a\x0d\x3b\xb5\x57\x86\xa9\xa0\xb3\xda\x85\xe0\xc2\x07\xe3\xd4\x7d\x8d\x54\x17\x94\xd8\xc8\x91\x35\x98\x95\xff\x79\x3b\x4e\x8b\x32\x7b\x93\x18\xd4\x8f\x83\x7f\x77\x17\x2c\x40\x01\xd7\xd1\xe1\x91\xac\x6c\x41\xa5\xd0\x5a\xec\x85\xfa\x4a\x71\xf6\x51\x6f\xef\x80\x66\x5b\x76\x24\xb8\x26\x6c\x7e\xfd\xc8\x1d\xe2\xc3\x1a\x1d\xb2\xef\x78\xd1\xee\x99\x49\x24\x6a\xc2\xfa\x02\x55\xa6\x65\x0f\x84\x72\xfd\xb1\x40\x89\xf0\x73\x26\xe6\x08\x24\x3e\xde\x94\x28\x93\x3f\x67\x7c\x8e\x13\x3d\x42\x75\xe4\x8e\x42\xe1\xe8\x70\xde\x92\xc9\x17\x71\xb5\xf9\x62\xcd\x7c\xb0\x73\x47\x5a\x8e\x87\xe6\x70\x16\xb7\x7c\xb5\xd2\x9f\x76\x6f\xb3\x7d\x7f\x7c\x8f\xf4\x64\x01\x64\x79\x74\x2a\xad\xcd\xee\xf2\xa8\xb2\xd6\x70\x8d\x8e\xb5\x7d\x62\x56\x51\xb6\x57\x04\xe9\x87\xa5\xa4\xa9\x05\x43\x65\x96\xcb\xb0\x29\x11\x42\x5c\x91\x53\x42\x2a\xa4\x59\xff\x68\x2e\xd8\xca\x63\x96\x72\xf2\x10\x66\xad\x9b\xd0\x76\x70\xa8\xf2\xd2\x48\x6f\x86\x39\xca\x11\x6a\x5b\x1d\x61\x28\xf9\x42\x1d\x12\xe4\x8f\x3d\x53\xf1\x6e\xdc\xc6\xbb\x99\x04\x0c\x58\x20\x1c\xc3\x22\xd6\xd9\xef\xd2\xd4\xfc\x95\xed\x29\x67\xd3\xd2\xca\xa2\xf6\x87\x91\xbf\x63\x8e\xc9\x7b\x39\x9c\xc1\x07\xe3\x94\x29\x02\xe3\x55\x89\x2b\x1d\x1b\xb9\xa2\x05\x15\xf4\x44\xcc\xe8\x1c\x8b\x59\xa5\xad\xd9\x73\xa2\x43\xba\xa2\x2e\x0c\x25\x36\xe5\xb4\xdb\x9a\x5e\x7b\x3f\x14\xdd\x78\x94\x0e\x04\x88\xcb\x71\xd4\x92\x12\x83\x33\xa7\xf1\x7c\x93\x34\xb2\xdd\x3f\xcd\xb8\x9a\x4c\xc5\xab\xd3\x29\x9d\x24\xb9\x24\xe4\xca\xa7\xf8\xb7\xef\xdf\xfc\x38\x52\x3b\x8e\xad\x25\xe3\x35\x49\x12\x95\xdd\x72\x8f\x6f\x77\xa7\xf1\x3d\xeb\x06\xca\xc8\x32\x4d\xb3\x70\xd9\x4a\xed\x75\xad\xd9\xa9\x3d\x5e\x1b\x5c\x65\xd9\x91\xcb\x56\x6a\xaf\x0d\x33\xdb\xc7\x61\x5b\x62\xf3\xbd\x52\x72\xb7\x9a\x71\x22\x78\x43\x21\x87\xf5\x24\x29\x9b\x9b\x2b\xe5\xb4\x28\xa6\x3f\xc2\xdf\x19\x45\x2a\xbe\xf8\xcd\x3a\x43\xc1\x4a\xc1\x17\xb8\x44\x19\xac\xd8\x36\xe7\xb5\xbc\x6a\xd0\x44\xad\xd5\x96\x37\x25\xdd\x97\x94\x68\x3f\x5b\xdd\x71\xed\xa1\x5e\x4c\xd5\x09\xe4\x45\xd3\x9e\x5e\x1c\x62\xd6\xcb\xf9\x80\xa5\x29\xdb\xef\xa9\x21\x66\xe5\x3c\x4d\xed\x92\x97\xf3\x56\xb3\xf9\x7b\xb5\xd1\x36\x23\x06\xae\x88\xf2\xaf\x5c\x43\xe6\x69\x65\xfe\x07\x3b\x16\x18\x46\xb2\xe8\x3d\x8e\x73\xf2\xa0\xd3\xd9\x2e\xb6\xbc\x5a\xd2\x5a\xb3\x1b\xae\x3f\x3f\x2a\xa0\x92\x42\x27\xe6\xa0\x52\x6c\x3c\x7f\x5c\xee\xa5\xbb\xed\xe6\xc7\x50\x75\x8c\xe2\xa4\x44\xc6\x16\x96\xb1\xbd\xac\x45\x8f\xdd\x64\x3e\x0a\x48\x37\x79\x45\xde\xce\x91\x27\xc5\xd4\x5a\x8a\xa9\xf5\x67\x7d\x6c\x52\x91\xf5\xec\xf8\x02\xee\xf5\xa9\x30\x1f\xf7\xa1\x35\xfe\x7b\x9e\x4f\x57\x1e\xd7\x24\x74\xdb\x98\xdd\x8c\x7e\xff\xd3\xab\x77\x7f\x5e\x74\xf0\x10\x02\x47\xe6\x1c\x55\xe0\x8a\x55\xa3\xdd\x2e\x63\xb3\x7a\x4e\xf2\x59\x3d\x37\x52\xef\xba\x29\x8a\xfb\xf7\xcb\x6a\xdb\xcb\x04\x62\x33\x83\xef\x2f\xc2\x3a\x1f\x93\x63\xa6\x02\xf1\x23\xdf\x72\x6f\x32\x96\x8f\x96\x86\x98\x31\x6d\xee\x57\x90\x0a\xa5\xac\x1b\x29\x4b\xfb\xd7\x70\x9d\x31\xcc\xfd\x0d\x61\x38\xa8\x58\x1c\x0a\x0b\xe2\x50\x10\x2e\xb5\x1f\xf2\xc1\xf3\xda\xad\x05\xd3\xb9\xa6\xe2\xf7\x6f\x7f\xa0\x7e\xf0\x9c\x27\x8b\x2b\xf5\x8c\x8b\x42\x0b\x94\x57\xe0\x7d\xa4\xa0\x12\xc2\x90\xa0\x58\x4b\x16\x28\x86\xce\xc4\xd9\xb9\xca\x51\x62\x43\x9d\xb5\x21\x5c\x0b\xc0\x2e\x20\xd9\x86\x08\x3b\xd0\x37\x29\x6e\x92\xd3\x31\x86\xb0\x9e\x82\xcc\xe6\x58\x79\xff\x09\x70\xf9\x63\x6b\x7b\x7e\xec\xc4\x32\x3a\x5b\xce\x91\x13\x04\xd6\x64\x7c\xb1\x7e\xce\x7c\x6f\xc1\xf5\x70\x88\x24\x0f\xf2\xf3\xb6\x9e\xad\xe7\xb8\x50\x4e\x5f\x15\x60\x53\xb8\x3d\x50\x63\x26\xc9\x95\x36\x0d\xe4\x44\xab\x52\x57\x04\xbc\x91\x0b\xf0\x46\xae\xad\x52\x38\xb7\x9c\xb3\x9b\x1d\x59\x21\xbc\x52\xac\x5e\x6c\xe7\xf5\xc4\x1f\x4b\x34\x71\xb0\x99\xfc\xcf\x58\x91\x31\x40\x09\x19\xdd\xda\xf3\xfc\x62\x38\xac\xe4\x42\x94\xbd\x85\x60\xb3\x6a\x8e\x90\x43\xb7\xb3\xfa\x34\xfd\x47\x41\xc6\x78\x29\x25\x7f\xb7\x32\xc5\xf3\xe5\xc5\x70\x58\xa0\xac\x21\x10\x34\x28\x57\xa8\x98\x23\x1b\x72\xc4\xd3\xb4\x86\x1f\xbb\x5d\x1d\x41\xab\xb3\x45\xfa\xaf\x64\x05\xe7\x74\x09\x85\xb4\x43\x65\x9a\x36\xa7\x84\xc4\xea\x00\x50\x63\xec\xc5\x9c\xf0\x59\x33\xc7\xfa\x86\x90\x7f\xab\x8d\x79\xe8\xbc\xed\xcb\xac\xa3\x9c\x7a\x08\x8d\xb9\xaf\xfa\x38\x1f\x0a\x1d\xb0\xf2\xd1\x01\x01\x2e\xa8\xbb\xea\x95\xa4\x49\x76\xd5\x1b\x22\xd7\x99\xfb\x6b\xdc\x3c\x2f\x20\xac\x0b\xbe\x19\xbc\x91\x73\xd1\x19\x94\x61\x95\x45\x9a\x96\x7a\x95\xcb\x3d\xab\x0c\x45\x62\xab\x5c\x7a\xab\x0c\x85\xf4\x2a\x33\x79\xc0\xe2\x6b\x2c\xf9\x99\xd8\x1a\x8b\x19\xb3\x6b\x2c\xff\xee\xaa\x27\xd7\x31\xd0\x93\x32\x0a\x7a\x52\x6a\xd0\x13\xaa\x7d\xef\xd0\x60\x5f\xa7\x06\xa7\x28\x5b\x62\xb5\x06\x2a\xee\xc8\x0b\x66\x53\xec\xe2\x72\x43\x57\x8d\xb5\x1e\xf5\xed\xc8\x46\xf2\x7a\xd4\xdf\x6a\x51\xf7\xdf\x11\x90\x03\x4d\x1f\x6f\x40\x1e\xd4\x8e\x61\xae\x64\xad\xfc\xae\x70\xa2\x9d\x74\xc2\x3e\x12\x0b\xe3\x16\x7d\xdd\x87\xcc\x7c\xc2\x5d\xab\xe0\xb7\x6c\x24\x8d\x2f\xaa\x86\xf5\xa3\x0f\x63\x97\x6f\x88\xd1\x33\x70\x7e\x66\x7e\xb2\x26\x85\x1b\x6d\xed\xce\x63\x87\x76\xef\x80\x6b\xf6\xaf\x77\x5f\xef\x10\x59\x78\xb8\x72\x8a\x91\x6a\xc4\x70\x6b\x91\x72\x87\xbe\x9d\x64\x98\x61\x28\x37\x39\xff\x08\xa6\xef\xcb\x5a\x1b\xbf\x23\x92\x79\xe0\x60\xe5\x4b\xe7\xa1\xd9\x7c\xbf\xfe\x26\x6c\xc0\x64\x49\x92\x2b\x51\xd0\xdc\x54\xef\x9a\xfd\xe3\xbd\xab\xb3\x66\xea\xf7\x7c\x7d\xa2\x17\x2d\x5c\xac\x1c\xd2\x17\x9b\x44\x0c\x00\xa4\xed\xe2\x30\x2d\x57\xd6\xd5\xb3\x54\x33\x31\xdf\xed\x32\xf9\x4f\xcc\x49\xca\x78\x11\x55\x4a\xc7\x02\x66\xc5\xbc\x0b\x77\xe6\x4b\xfd\x17\x59\x4e\x74\xac\xfe\x8b\x0d\x2b\x56\x1d\x4f\x25\x81\x1f\x4c\xb8\xe8\xe4\x74\xec\x67\x8a\x60\x2d\x42\xa3\xab\xaa\x82\x10\x10\xd5\x1b\xc9\x5d\xd0\x2a\xae\xda\x8c\xf5\x43\xfb\xef\xba\x29\xd2\xa8\xcd\xff\x71\xc1\xbf\x21\xe3\x8b\xb3\x33\x17\x0b\x39\xe3\x73\xa7\xfe\x0e\xb8\x0e\xa6\x11\xf4\x45\xc6\x70\x69\xb4\xee\x2d\x60\x88\xbd\x22\x0f\x77\xac\x28\xb4\x01\x54\xc7\x7a\x77\xee\x6c\xbd\x0f\x23\xe4\x48\x83\x55\x80\xa9\xb1\x57\xcd\xa1\x65\xc8\xaf\x35\x73\x43\x9f\x0f\xe4\xbc\xb2\xd0\x5e\x2d\x2f\x1a\xe7\x5e\x5f\x91\xf7\x19\x35\x4e\x1f\x28\x08\x91\x29\x63\xbb\x1e\x9c\xad\xf6\x6a\xc7\xa5\x68\x82\xf0\xe9\x79\xab\xbe\xf6\x1b\xbf\x69\x6d\xc3\xcc\x77\xbb\xec\x73\x5a\xce\x55\xcb\x60\xa2\x8c\x82\xb2\x60\x46\x66\xf3\x41\xb9\x4f\xe5\xd2\x7f\xa6\x0c\xb7\x1f\x36\xbc\xba\x2b\xa7\xc1\xaf\x09\x1d\x08\x29\x54\x02\x2b\x27\x10\xb8\xcc\x95\xa3\x1b\x5a\xd7\xf9\x35\xb5\x2f\xec\x13\xc8\x35\x26\xf2\xe5\x47\xef\x15\xfc\x8e\x20\x04\x94\xae\x0c\x42\x17\x19\x27\xcb\xaa\xac\xab\x82\x22\xd5\xbf\x96\xce\x40\x64\x90\x7c\x32\x2c\xd1\xc9\xdd\x86\x15\xf4\x44\x0b\x5e\xac\xbc\x56\xce\x68\x93\x93\x64\x68\x32\xe0\x81\x40\xda\x62\x4d\x43\x23\x41\x62\x3a\x4e\xb6\x7c\x64\x7f\x28\xd4\x2b\xb8\xdf\x83\xfd\x61\x53\x91\x04\x3b\x84\x1f\xd8\x08\xdd\x6d\xe0\x5a\x30\x67\x71\x9a\x1d\xa8\x9f\xc3\xc7\x9e\x88\xd1\x96\xdd\x56\xe2\x37\x2e\x07\x61\x8b\x50\xdb\x0e\xba\x01\xe4\xb7\x06\x9a\xb0\x0c\xc1\x2b\x58\x00\x2a\x51\x75\x61\x05\x86\xc9\xc2\xcb\x6b\xf0\x29\xe3\x0e\x64\x03\x33\xf5\x12\x57\x68\x5a\x05\xf9\xfb\xdf\xff\xa2\x2e\x71\x4e\xba\x51\xec\xd5\x54\x4c\x2a\x15\xc5\x1e\x1f\x4a\xb7\x02\x9b\x8a\x09\x53\x15\x70\x8e\xa6\x79\x30\xbc\x4f\xbd\xbc\x9e\xce\x0e\x50\x22\x18\x90\xfc\xad\xfc\x34\x72\x6d\x00\x74\x88\x12\x1c\x60\x2f\x7a\x25\x8c\xf7\xa7\x4b\x03\xca\xd2\xb4\x72\xbd\x5e\x06\xb2\xfe\xa9\x0a\xed\xb1\xf8\x27\xce\xfb\xb2\xb6\x8c\x46\xf2\x22\x2f\x7f\x25\x4e\x34\x0b\x70\xa2\xc2\xef\x4e\x7e\x95\x0c\xf9\x30\xf9\xd5\xc9\x15\x5d\xe6\x4d\x4d\x4f\xee\xab\x86\x9f\xe4\xdb\xed\xc9\x26\xaf\x65\xf1\x35\x2b\x59\xbd\xa1\xab\x13\xa7\xd3\x90\x07\x82\x95\xa2\x3a\x61\xa2\x3e\x59\x33\x5e\x0b\x75\x3e\x46\x27\x1f\x2a\xd7\x7c\x69\x7a\xa8\xca\x93\x15\x84\x18\xc2\xcc\x54\xd1\xfa\x64\xd5\x70\xe5\x0c\xea\xda\xc5\xb2\xf3\x93\x65\x5e\x9e\x2c\xf3\xa2\x38\xf9\x2f\xb0\x0f\x65\xe8\xbf\x64\x0b\x62\x43\x4f\xfe\xcb\x6d\xd8\xff\x3a\x51\xd4\xe5\x64\x9b\xd7\xb5\x1c\x5c\xa5\x4a\x80\x49\xf4\x99\x07\xc0\xf7\xcc\x21\xee\xfd\xd7\xc9\xa6\xaa\x3e\xd6\xa3\x04\xb5\x1d\x09\xf5\x1c\x37\xfe\xfd\xd3\xc8\xfb\xa7\x39\x3b\x93\x4c\x7e\x45\x32\x06\x48\x75\xda\x27\x4f\x52\x13\x1d\xb8\xe8\xfd\x39\xe3\x73\xf5\x19\x40\xf5\x6d\x35\x3e\xf6\x46\x82\x80\x97\x4c\x53\x66\x05\x5a\xc3\x5c\xd8\x4b\x84\x34\x97\x60\x44\x1e\x48\xe9\xb9\x55\xee\x12\xaf\xf4\x2d\x5e\xa0\xc2\x37\xd1\x74\xec\x80\x26\x9d\xd7\x69\x9e\xa6\xa7\x02\x45\xb7\xc1\x8f\x95\xd8\xc8\xa5\xd7\xec\x0b\x2c\x5c\xb8\x19\x46\x27\xaf\xd7\xf0\x2d\x56\x6c\xa5\x8b\x79\xa5\x30\xf0\x4e\x27\x30\x19\xf8\x5a\x57\xf4\x04\xf6\xce\xea\xe4\xea\xfe\x44\x4d\x58\xb6\x2f\x78\x43\x4f\xd6\xbc\xba\xf1\xf6\x82\xce\x6d\x0a\x0a\x21\x2f\x07\x0a\x86\x06\xa0\x92\x1b\x8c\xa8\x4e\xae\x9a\xab\xab\x82\x8e\xfc\x20\x87\x8f\x3d\x79\x9b\xd0\x3e\x93\x2c\x17\x48\x9b\x1b\x65\x61\xc7\x3d\x18\x41\xbc\xd4\xb2\x8c\x8e\x05\x65\xd1\x58\xd0\x7c\x3e\xa8\x47\xac\xd6\x2c\xc4\x6a\x5a\xcd\x6a\x60\xd9\xe6\xc4\x84\x21\x4d\xfc\x47\x56\xfb\x93\x59\x0c\x46\xe4\xa2\xee\xed\x0c\xde\xfa\x1c\xe0\xa3\x5e\x3a\xf2\x9b\x03\x87\xd3\xc9\x9a\xb0\xd0\x55\xdf\xe6\x42\x5e\x99\x92\x4f\x9c\x09\x2f\x29\x6d\xa9\xf0\x17\x54\x1e\xcd\x98\xd7\xd5\x45\x60\x0f\xf1\x13\xa7\x6a\x85\x5a\xef\xa5\xcb\xc5\x8a\xab\x78\x09\xb0\xa8\x68\xd8\xd4\xa6\x4f\xaa\x63\xa0\x0f\x3e\xa5\x45\x83\x26\x4d\xf3\xd1\xe5\xdb\xb7\x8b\x17\x1f\xde\x7d\xbf\xd0\x2e\xca\x6f\xdf\xbd\x79\xfb\x3e\x4d\xb3\x60\x90\xac\x3c\x69\x76\xbb\x78\x7c\x4a\xd3\x99\x4f\x17\xca\xc3\x62\x00\x3a\xa7\xba\x30\x71\x6c\xab\xa7\x17\x0b\xe7\x41\xdd\xe6\x51\x64\x81\x8e\x1b\x9d\xb7\xa0\xc7\x0f\xd1\xcb\x88\x7b\xf4\x38\xbd\x3a\x3e\x4c\xd0\x3b\xff\x62\xed\x48\xa5\x10\x2f\x12\xca\xa3\x34\x22\x6b\x06\x96\xfe\xdd\x4e\xc4\x02\x9c\xa4\xc0\xb7\x4f\x20\xdd\xf2\xea\x86\xd5\x94\xd0\xd1\x12\x50\x43\x83\x58\x4a\xf0\x7d\xeb\xfb\x40\x9b\xe0\x02\x3a\x10\x11\x41\x4d\x4a\x60\x08\x27\xee\xae\x50\x01\x08\x3e\x0d\xf9\xd0\xbd\xb1\x69\xcf\x0a\x22\x50\x08\xf0\xa1\xf9\xf8\x08\xc2\x47\x99\x55\x80\xe3\xa1\x14\x8e\xb3\x6a\xee\xaf\xf0\x0b\x07\xb7\xe3\x4c\xe1\x64\x46\xe7\x17\xdc\x02\x97\x5c\x18\x81\x82\x9b\x50\x7a\x83\xc9\x68\x5d\xdf\x08\x21\xc2\xe9\x57\xd5\x98\x0d\xe0\x57\x1d\x0e\x94\x21\xae\xf1\x0a\x3b\x43\xf9\x41\xab\xd3\xad\xa9\xe5\x41\x75\x30\x29\x35\x22\x55\x3d\x89\x05\xdb\xdc\xe5\xf5\x4f\x35\x5d\x4d\x4e\xcf\x8d\xb6\x34\x63\x1a\x90\x6c\x2a\x67\xa7\xfe\x44\x13\x01\xc8\x43\xc6\x49\xdb\x8c\x0d\x5b\x58\xb2\x0a\x4d\x28\xa9\xf0\x83\x73\xf3\x9b\x50\x6c\x5c\xf3\x26\x95\x37\xd0\xbf\x85\x62\x96\xec\xc4\x03\xff\x73\x38\xa0\xe0\xf0\xab\xfb\x19\xdd\xe4\xac\xb4\x33\x52\xe9\x0d\xb9\xcf\x15\x2a\xcc\x2d\xe5\x32\xd8\xda\x09\x3f\xb4\x2d\x16\xa8\x5d\x84\x00\x46\x37\x71\xaf\x65\x10\x16\x43\x9f\xf0\xac\xf7\xcc\xe6\x86\x0d\x5a\xf4\x4b\x4c\x7a\x75\x5a\x63\x3f\xf0\x1f\xea\xf4\x96\xea\x4d\x8b\x1d\xb1\x9f\x44\xa0\x24\x71\x09\xa8\x2b\x66\x05\x59\x2f\xff\xb8\x9f\xa4\x72\x38\x04\x50\x19\x29\x55\xcb\x7b\x45\xf2\x2e\xd6\xdd\xd8\xe2\x10\x38\x77\xd0\xf3\x8b\xca\xd5\x05\x77\x50\xf9\x4e\x10\x3a\xab\xd4\x2d\xe3\xa5\x46\xc5\x9c\x5c\x29\xcf\xf4\x12\xd9\x1d\x9e\xa6\xa7\x2c\xe3\x58\xa0\x0b\xe4\x76\x78\x09\xf3\x73\x98\x12\x1a\xac\xca\xe6\x7f\x71\x17\xe7\xe8\x6f\x15\x2b\xa1\x75\xc0\x28\x32\x51\xc6\xcc\x01\x44\x05\xe1\x2f\x93\x5b\x1c\xc6\xad\x4c\xee\xb1\x36\xf6\x83\x3f\xbe\x73\x59\xd8\xe4\xf5\x26\xc1\x0d\x2f\x54\x32\xf1\x03\xa0\x47\x87\x3c\x85\x3d\x67\x09\x87\x41\x8a\x6c\x54\x88\xb9\x6d\x01\xf2\x1c\xf7\xa2\x6e\xec\x74\x36\xfb\xc3\xb1\xd5\x75\xfa\x9a\x2c\xbc\x20\xe6\xd7\x4f\x0f\x62\x36\x31\xb2\x8f\x24\x09\x3b\x26\xe6\xf7\x1f\x95\x3a\xda\xf7\xd9\x34\x7b\x9b\x06\xba\x1b\x18\xac\x76\x00\xa7\x5e\x18\x0c\x27\xc2\xff\xf5\xdb\x5a\x05\x42\xf2\xd6\x7e\x18\x17\x7a\xba\xdf\xad\x0d\x8c\x0b\x36\xa7\x6f\xaf\xb9\x81\xf5\xcd\xd6\x9c\x7c\xcf\xd1\xad\xd4\x40\x89\xd8\x22\xe8\x9e\x9e\x83\x40\x9f\xa6\x3e\x26\x09\x73\x28\x56\x9e\x8a\x2e\xc0\xbf\x66\xa1\x8f\x9f\x37\xef\xa8\xc5\x5a\x76\x5d\x1b\x1e\x6d\x03\x88\x36\xaf\x7e\x6e\xf2\x02\x70\x9b\x02\x00\x3d\x0f\x7a\xa4\x93\x4e\xbd\x7c\xca\x1e\x13\x9e\xee\xfc\x73\x12\xd9\xe9\x60\xf2\x27\xa5\x76\xdc\x1f\x59\x7f\x20\x22\xfe\xd1\x08\xf1\x5f\xbe\x97\xbb\xee\xbb\x71\x38\x69\xc9\xf3\x18\x84\xbe\x40\x45\x24\x08\x60\x66\x77\x38\x8d\x10\xc5\x6c\x4a\x47\xdb\x6a\x9b\xa1\x51\x88\x7d\x67\x60\xe5\xec\xc5\x37\xa1\x16\x9e\x47\x79\x0b\x4f\x68\x00\x97\x27\xda\x16\x92\x41\xf6\x9c\x2d\xa2\xea\xea\x1e\x20\x43\xff\xd1\xac\xda\x8b\x2b\x23\xc7\xd2\xc1\x4d\xb5\x7b\xba\x27\xba\xc8\x61\x75\x80\x64\x22\x56\x17\x9d\x6b\xec\xbd\x2c\x48\x57\x5d\xf0\x57\x79\x2d\x46\x84\x22\x16\x11\xbb\x38\x5d\x56\xd7\x25\xfb\x3b\xe5\xda\xe1\x9d\xd7\x2a\xb7\x26\x56\xf1\x10\xc2\x5d\x9e\x8e\x20\x48\xa6\x0f\x20\x83\x54\xc3\xf5\xa0\x76\xb1\x05\x9c\xe4\x80\xd6\xa1\x32\xa6\xc9\x43\xa7\x51\x91\x5d\xe2\x35\x70\x3a\x69\x3b\x73\x20\x70\x10\xfb\xb6\x39\xd2\xf5\x6b\xea\x00\xe0\x86\xc9\xd6\x92\x04\x77\xe2\x38\xec\xb8\x1b\x88\xe5\xc0\x05\x91\x44\xa2\x41\x78\xe9\xa3\xcd\x4a\xbe\xa0\x48\xd3\x42\x32\x92\xa5\xc1\xe4\x19\x43\xd2\x34\x48\x88\xfd\x66\x9d\x15\x68\xda\x8c\xea\xe6\xaa\x16\x3c\x2b\x5c\xfe\xf2\x49\x33\x58\x2a\xa2\x05\xd7\x64\x39\x2b\xe6\x78\x6d\xe0\xe3\xfc\x17\xb8\x41\x03\x36\x24\xc9\x64\x02\x69\xa0\x27\xc9\x70\x69\x89\xf2\x90\x59\xac\xd9\x1c\x27\x67\x09\x92\x4b\x71\x18\xa7\x2e\xee\x3e\x4c\x1e\x5a\x1c\xe1\x7a\x1a\x60\x7a\xbc\x54\x80\x42\x76\xe0\xbb\xef\x93\x02\x64\x92\x6e\x0e\x9b\x88\xf7\x94\xca\x5b\xa8\x02\xd7\x79\xa8\x90\xcc\x49\xe5\x23\x69\x4a\x7a\xef\x41\xb8\xf7\x34\xd4\x4a\x05\x5c\x64\xcc\x0f\x9a\x2e\x9d\xbe\xe6\x2d\xaf\xae\x79\x7e\x73\x93\x0b\xb6\xf4\xb4\x65\xf5\xc9\xd5\xfd\xc9\x4f\xef\xbe\x3f\x59\xe6\x65\x59\x89\x93\x2b\x7a\x02\x3a\x98\x3b\x26\x36\xcc\x0b\xa4\x1e\x9d\xbc\x2d\x68\x5e\xc3\x5b\x50\xaf\xa8\xc0\xea\x52\xd9\xa2\x6b\x41\x73\x08\xaa\x66\x24\x07\x05\x27\x83\x70\x04\xc2\x5a\x7f\x89\xfc\x2b\x64\x1f\x42\x3b\x66\x64\x0c\x5b\x90\xef\x07\xfd\xe3\x48\xc9\x42\x31\xd6\xb3\x1c\x0e\x5b\x5b\x5d\x20\xd1\xaf\x9b\xa6\x6c\x38\xb4\xec\x3f\x21\x84\xb5\xda\xca\xf5\xec\xaf\xa3\x67\xd7\x8e\xff\xad\xfb\xc6\x25\x8f\x47\x2d\xe5\xf1\x50\x00\xe1\x3c\x02\x10\xce\x35\x55\x1e\x63\x36\x3c\x47\x8e\xfb\x74\x8a\x18\x73\x14\x2a\x84\x00\xbe\x6b\x50\x92\x2a\xa2\xe7\x69\xc2\x05\xa2\x81\x9c\x16\xb3\x53\x64\x2a\xa9\xf3\xac\x9c\x93\x87\x5c\x01\xee\xb5\xb8\x24\x1c\x19\x25\x6f\x19\x11\x3f\x35\xcd\x53\xeb\x50\xce\xaa\xf9\xa0\xd7\x74\x9e\xa6\x59\x0e\x4d\xe6\x2d\xe4\x69\x98\x55\xf3\xdd\xce\x74\xa1\x31\xfd\x34\xa0\x62\xab\x9c\x3c\x9d\x2b\x55\x8e\xb0\x2c\x4f\xb8\x27\xa1\x15\x5e\x76\xeb\x88\xa3\x70\x96\x80\x67\x23\xc4\xe6\xc8\x3f\x66\xe3\x39\x3a\x90\x15\x57\x41\xdf\x3c\xd3\x19\xf7\x0f\x73\x00\xa6\xb0\xc7\x79\x68\x33\xd3\x63\xa5\x6f\xd8\x27\x56\xd6\xcf\x6c\xb8\xe4\x96\x57\x9f\xee\x8f\xad\xb5\xac\x4a\x91\xb3\x92\xf2\x23\xab\x2d\xab\xed\x31\x85\x6e\x24\xdb\xf6\x68\x39\x56\x9f\x51\x79\xf0\x8e\x1d\xac\x72\x17\x3d\x7a\x66\x72\x10\x92\x32\x1d\xbb\xde\x0e\xc5\xf6\xc8\x0a\x30\x9e\x23\x17\x2e\xf8\xa6\x4f\xab\xb3\xac\x38\x5d\x3c\x6d\x33\x28\x45\xb3\xb6\xe3\x1f\x04\x66\x0a\x97\x6c\x7b\x7f\xd4\x82\xe9\xf2\xb4\x6c\x6e\xe8\x71\x4b\xac\x6b\x9c\x3d\x69\x73\x56\x00\x59\xf6\x94\xf6\x6f\xd4\x5d\xb4\x78\xfa\xc8\x94\x02\x6f\xa1\x17\x4e\xa3\x72\x1c\xbd\x10\x4a\x60\x3f\xb6\xb8\x56\x0d\x1e\xb9\x0b\xe8\x27\xf1\x8c\xd7\xb7\x7b\x30\xae\xbc\x82\x92\x4e\x9d\x55\xeb\xa3\x1a\xb4\x0e\xff\x4f\x40\x93\xc2\xb7\xf8\x1e\x5f\xe3\x2b\xbc\xc0\x77\xf8\x15\x7e\xf3\x4b\xe5\x89\xbd\x15\xde\xe8\xbd\xfe\xe0\x3e\xe3\xe4\x74\x8c\xa3\x8a\xe4\x13\x61\xf8\x89\xf6\x50\x93\x16\x40\xed\x89\x6d\x77\xea\x1d\xec\x43\x9b\x39\xef\xdf\xca\xcf\xfa\x83\xfc\xd4\x47\x76\xc3\x8f\x9a\xc2\x0b\x43\xaa\x9f\xdc\x7e\x79\x54\xfb\x8a\xb4\x1f\xd5\x20\x3b\xb2\x41\x7d\x0d\x1c\xd5\x66\x75\x54\x9b\xac\x7e\xa5\x6e\x8c\xa3\xda\xcc\x8f\x6a\xf3\x52\x5d\x2b\x47\xb5\x58\x1f\xd5\xe2\x8f\xb9\x94\x1d\x9f\xd6\xae\x57\xe7\xf0\x68\x8f\x6e\xf1\xf2\x60\x3b\x3f\x28\x52\xf9\xb4\x41\xfa\x95\x0e\xb6\xce\xe9\x4d\x75\x4b\x2f\x8f\x3d\x68\xf5\xc8\x54\x38\xd8\x6a\x53\xb2\x9f\xbf\x3d\x7e\xb4\xaa\xf8\x23\xfb\xe9\x69\x0b\xa0\xcb\x3f\x72\x50\x1d\xe7\x71\x54\xb3\xcd\x91\x9b\xca\xb2\x27\x47\xb5\x5a\x1c\xbf\xf9\xdf\xaa\x8b\xe8\xa8\x66\x97\x47\x35\xab\x5e\x3c\xa5\xdd\xf5\x91\x44\x90\xd3\x27\x91\xf0\xd5\x51\xcd\xf6\x20\x36\x8f\x6e\xbd\x57\xf3\xf0\x6a\x43\xfd\xdf\x18\xb6\xec\xa8\x3e\x36\x47\x2e\x8c\xe1\xdd\x8e\x6a\x74\x7b\x54\xa3\xaf\x3c\x36\xea\xa8\x66\x6f\x8e\x6a\x76\xf1\xe4\x1b\xec\xf6\xb8\x76\xc1\x37\xa1\x14\xdf\x55\xc7\xae\xed\xed\xc8\x55\x79\x64\x3f\x3b\x56\xf4\xa8\x96\xef\x8f\x1a\xb1\xa6\xa7\x4f\x5e\xe7\xeb\xa3\x5a\x57\x4a\x4f\xb5\xe7\xde\x1b\x8e\xf6\xa8\xf6\xaf\x8e\xdb\x1e\x86\xed\x3d\xaa\xcd\x85\xd7\xe6\x7e\x66\xf1\xad\xe2\x8d\x9f\xbc\x43\xee\x8e\x1a\xf1\xbb\xf7\x7f\x78\x7b\x64\x83\xaf\x8e\x6a\xb0\x2a\x41\x23\xaf\x63\x9d\x8e\x6e\x3a\xac\x76\xb0\x07\x15\x95\x7a\x64\xcb\x6f\x74\x10\x6b\xdb\xa2\x47\xd5\x12\x81\xa4\x7e\xbc\x72\xe2\x58\x29\xa3\x2f\x86\x7f\x45\xe3\x9a\x67\x44\xab\x70\xae\x62\x8a\x09\x21\xb9\x31\x57\x8e\x07\x9e\xf1\xc9\xc4\xf9\x02\xd4\x7b\xf0\x44\x61\x50\x26\xc6\x67\x3d\x21\x84\xd4\x69\x6a\xd9\x73\x13\x30\x5d\x21\xc8\x08\xe9\x01\xaa\xe9\x75\x74\x29\x01\x22\x2f\x61\x64\xbd\xf6\x9b\x48\xfb\x39\x4a\xd3\xfc\x40\xfb\x67\xe7\xff\x23\xfa\x5a\xe1\xd1\x2b\xaf\x3a\x96\x95\xb3\x7a\x8e\x4b\x85\x42\xa4\x14\x7c\x85\x19\x5f\x31\xa8\xef\x98\x58\x6e\xb2\x1a\x3d\x2c\xf3\x9a\xda\x10\xde\x09\xfc\xd2\x71\xbb\x13\xc3\xed\xab\x91\xc3\x2b\xad\x14\xf3\x5e\x29\x8c\x4f\xfa\xc2\x0c\x01\xe1\xb1\x2e\xab\xd4\x35\x13\x87\x8f\x6f\xa2\x94\xf0\xda\x82\x15\xe1\x15\xf9\x21\x17\x9b\xd1\x0d\x2b\xb3\x25\x5e\x23\xbc\x21\xe3\x8b\xcd\xf3\xd5\xc5\xc6\xe8\x2d\xb7\x84\x66\xd5\x6c\x33\xc7\xf9\x6c\xe3\xa6\xb2\x35\x53\xd9\xb6\x76\x28\xb2\xbe\xea\xd9\x2e\xf0\xa4\x2b\x61\xb9\x4f\x38\xad\x82\x0f\x33\x19\xab\xaa\xab\x5c\xd0\x60\x7a\xd7\x54\x7c\x60\x37\x34\x43\x38\x77\x7f\xa3\x81\x6e\xcf\x94\x1c\xb7\xad\x36\xed\x42\x1a\x14\xb9\x83\x57\x93\x31\xe4\x20\x9a\x9c\x63\xbd\xbc\x93\x5f\x63\xb5\xb4\x93\x7f\xc3\x6a\x21\x27\xff\x8e\x61\x95\x26\xff\x1f\x56\x0a\x9e\xc9\x7f\x60\x8b\x69\xf4\x3f\xad\x77\xfa\xe4\x7f\x61\x40\x36\x9d\xfc\x6f\x2c\xc7\x37\x39\x1f\xb7\x3d\x9f\x08\xad\x0f\x3e\xb3\x50\xc2\xfc\x9b\x31\x3a\xcb\xf8\xf3\xf1\x11\x2a\x4a\xa7\xda\x8b\x10\x82\x0e\x62\xf7\x97\x54\x5a\x5a\x8d\x53\x44\x0d\xf1\xe5\xa9\x83\x35\xaf\xc5\x72\xab\xea\x84\xf3\xce\xc3\x01\x8c\xe0\xdd\x24\x64\x69\x5a\x76\xb7\x12\x45\xce\x29\x42\xce\x27\x73\x56\x18\x8f\x2c\xc9\x29\x31\x0d\x77\xd0\xeb\x5e\xd8\xee\x1d\x74\xab\x52\x7c\x63\x95\x0f\x1e\x30\xbd\x98\xd5\xcf\x0b\x84\xbe\x21\x63\x4b\x6d\x66\xf5\x7c\xc0\xfd\x28\x03\xb6\xce\xc2\x81\x0b\x65\x9e\xc8\x89\x71\x47\x41\x98\x83\xdb\x56\xa5\xea\xe4\x08\x92\x61\x68\x9b\xc1\xd9\x59\xfd\x0d\x19\x5f\xa0\x7c\x56\xcf\x09\xcd\xe4\x3f\x7a\xf4\xad\x71\xc3\xed\xad\x82\x40\x48\xb6\x0e\x0b\xa0\xca\x62\x2e\xa9\xa4\x6e\xde\xfa\xef\x8a\x13\xb3\xbf\xab\xf5\xc9\xcb\x5c\x50\x94\x83\x83\x9e\xfc\x33\x13\xde\x09\xeb\x57\x57\x56\x3e\x30\x36\x40\x66\xee\x1c\x8c\x61\x5e\x29\x2c\x90\xde\x25\xce\x07\x22\xb4\x2b\x68\x70\x49\xdc\xa0\x34\x4d\x16\x8b\xe4\x94\x10\x63\xf3\x63\xe5\x75\x36\xc6\xbf\x46\x69\x9a\xe5\xb3\x66\x4e\xf8\x94\x66\x62\xd6\x98\x99\x4f\x04\x84\x73\xda\xe8\x1f\xd8\xa5\x62\x3a\x9b\x2b\x53\x83\xfd\xeb\xc8\xc3\x16\xe8\xe0\xf0\x2c\x52\xda\xcb\x2a\x7f\x8c\xcb\xc0\x11\xb0\xfa\x8f\x9f\xb1\x72\xf4\xdd\x4f\x3f\x02\xde\xdd\xe2\xed\xbb\x37\x1f\xde\x7c\xf8\xf3\xdb\x57\x8b\x57\x7f\xfa\xf0\xea\xc7\xf7\xaf\xdf\xfc\xf8\x3e\x4d\xe9\xe8\xd5\x8f\x7f\x18\xc1\x93\x97\xae\xc8\xfb\xd1\x77\xba\x5d\xeb\xfd\x11\x1c\x53\x46\xeb\xcc\x94\x70\x9f\x06\x3f\x98\x94\x49\x93\x87\x65\x55\xae\xd9\x75\x63\xb9\x1b\x9f\xd7\x39\xc7\x77\x9c\xd9\xf8\x2c\x75\xc0\x63\xaa\x3a\xe3\xe6\xa4\x5d\xaf\xb4\x7f\x4a\x14\x8e\x5d\x6d\x03\x0f\x22\x4b\x3b\x9a\xcf\xc4\x86\xd5\x73\x84\xda\x16\x2b\xdd\x33\xad\xbf\xcc\xd8\x74\x6b\xfc\x0b\x8d\xad\xfc\x42\xa3\x2a\xbf\xc8\x78\x8e\xe4\x35\x9d\x1e\xdb\xbf\x63\x42\xcd\xf6\xa1\x74\x0e\xc0\x31\x9f\x81\x49\x03\x82\x3b\xc3\x9d\xff\xf8\xe6\xf6\x2f\xcc\x7e\xf2\x5d\x13\x6c\xa2\xad\x8e\x60\xe3\xf5\xe2\xb8\x50\x87\xa2\xfb\xce\x23\x5e\xb1\xbe\x89\x52\x40\x4e\x67\x87\x16\x2e\x1c\x1c\x46\xfc\x46\x13\xf2\x46\xe3\x34\xaf\xab\x72\x71\xc7\xc4\x66\x01\xcd\x2f\xc0\x80\x5e\x2e\x16\xf6\x8e\xa3\xe1\x27\x6f\x01\xe1\x5e\x61\x15\x25\x3f\x95\xd6\xed\x63\xf5\xd3\xbb\xef\x5f\x99\xe8\x0c\x15\x97\xe9\xcd\xd1\x73\x26\xd6\xa8\xce\xfd\x62\xe6\x72\x33\xad\xf7\x02\x96\x5e\xb2\x7a\x9b\x8b\xe5\xc6\x64\x16\x43\xca\xcf\xf7\xd4\xe2\x9a\x0e\xe4\xb4\xdb\xcf\x49\xb9\x10\xca\x49\x84\xf5\xfc\xe9\xb0\x3c\xf7\xea\x24\xd0\x2c\xc9\xeb\xfb\x72\x99\x84\x3b\x01\x3d\xf0\xd1\x55\xbe\xfc\x78\xd5\xf0\x92\x72\x1b\x3d\x9d\x25\x3a\xc2\x25\x51\x89\x22\xa9\x02\x5c\xee\xb4\xb7\x86\x1c\x29\x81\xeb\x76\xbc\x35\x3e\x5a\xc8\x9d\x0c\x2b\x0d\xd0\x56\xba\x55\xdd\x66\x55\x9a\x18\x19\xcc\x90\x86\xc4\x13\x9e\x47\x5a\x75\xd4\x09\x72\xf6\x52\x77\x82\xe6\xe1\xe8\xbe\x1a\xcb\x44\xd3\x34\x8e\x12\xa5\x14\xf2\x8e\x05\xd2\x0f\x34\x1b\x42\xbb\xd7\x7d\x9a\xf6\x39\x00\xdf\xa7\x54\xdd\xfe\x92\x13\x72\xbf\xec\x16\x94\x8f\x8f\xbb\x5f\x3b\xf6\xc6\xc7\xbd\xef\x9e\xe8\x96\xd7\x49\x11\x63\x6f\xdf\xeb\x82\xdd\xdc\x48\x42\x46\xd7\x94\x53\x29\x82\x1c\xe7\x8c\x07\xcc\x5e\xe8\xe7\x61\x7d\xf8\xc3\x58\x09\xa5\xaf\x4a\x10\xce\x89\x07\x73\x35\x05\x39\x56\x8e\x17\x65\x14\x4d\x4a\x34\xe2\x34\x5f\x49\xda\xf0\x21\xbf\x76\x2b\x68\xc3\x8b\x73\x08\x69\xaf\x34\xaa\x38\xca\x72\xe5\x51\x29\xf2\xeb\xef\x2a\x8e\x32\x86\x10\x66\x9f\x73\x60\x9d\x3a\x8d\xd4\x71\xe7\xd7\x86\xf0\x11\x28\x76\x8c\x37\x7e\x96\xe5\xe4\x41\xd7\x53\xcc\x14\x2b\x99\x78\x52\x92\x26\x6c\xd2\x71\x81\xda\xc8\xa0\xbd\x59\x0f\x67\xb3\x30\xea\x31\x1d\x99\xdb\x11\x96\xa6\xc5\x1e\x0a\x61\xaf\x57\x15\xf4\xa1\xd7\x1c\x1f\x89\x29\xd8\x62\x56\x7f\xe0\x8d\xd8\xdc\x77\x1d\xb0\x5d\x53\x59\xff\x42\x36\xa8\x3b\x5d\x9f\x6c\xfb\xc9\x95\xaf\xf5\x8c\x8f\x5e\xfc\xf4\xfe\xc3\x9b\x1f\x16\x1f\x2e\xff\x73\xf1\xdd\x9b\x77\xf3\x88\x4b\xa3\xea\x17\x16\xf8\x03\x7c\xd3\x6e\x7a\x5c\x77\xa8\xc0\x2b\x69\xc3\xea\xa9\x98\xc0\x96\x58\x56\x37\x57\xac\xa4\x28\x9b\x09\x1b\x81\x67\x86\xf4\x62\x93\xb3\xf2\x43\x7e\x5d\x7f\x57\x71\xc0\xd5\x08\x46\x38\x4a\x86\x14\x21\xd4\xe2\x7c\xd4\xc9\x7f\x1a\x19\x61\xed\x30\xf9\x8c\xd0\xe3\xe3\xfa\x00\x5e\x3a\x24\x9a\xd8\xdb\x52\x70\x42\xc2\x6f\xcc\xd6\x19\x1b\xb1\xfa\xb5\x42\xf5\x66\x7f\x97\xcc\x3d\xda\xed\xe4\xb3\xb7\x86\xbd\x01\x58\x14\x28\xee\x77\x7f\x28\x99\x70\x89\x70\xa9\x89\xb7\x1a\xbd\x73\x5e\x76\x11\x22\x95\x2c\x2d\x07\x8f\x7c\x97\xe3\xe6\x29\x54\xab\xeb\xbd\xf1\x24\xdf\xe1\x28\x3b\xf4\x55\xdc\xd8\x39\x11\xe1\x49\x8e\x25\xb4\x36\xb7\xec\xbc\x93\x1c\x94\xfa\x5e\x6c\x5f\x0a\x6b\xd6\xe0\x95\xd8\x38\x56\xff\xd7\x8c\xce\x8d\x27\x1c\xa4\xc8\xeb\xbc\xf3\x8f\x72\xa9\x18\x18\x13\x9d\xae\x83\xcf\x9d\xaf\xa7\xda\xf5\xca\x65\x24\x41\x83\x3c\x4d\x73\x3f\x93\x68\x1e\xe4\x8f\xf3\xb7\x01\x7f\xd2\x36\x50\x96\xc9\xcf\xf5\x1c\xdf\x77\x45\x7d\x61\xcf\x9e\x43\xce\x5e\x8f\xc9\xb0\xff\x2c\x9f\x1f\xa3\xc3\x7e\xc4\xf9\x25\x72\x47\x2f\xf1\xfa\x73\x4e\x8f\xb2\x44\x93\x2d\x38\xe5\x2a\x43\x37\xb9\xc3\xd4\xe8\x67\xc8\x1b\xef\x84\xd1\xc0\xca\x4e\xa8\xef\x19\x40\xe8\xe8\xd2\x3f\x82\x2b\x83\x90\xb2\xe6\x94\xfe\x9d\x66\xb3\x39\xc2\x9b\x18\x28\x0c\xf5\x14\x86\x5b\x9d\x1a\x3c\xf4\xb3\xde\x18\xa0\xee\x77\x19\x44\x15\xeb\x9c\x5e\x15\x89\xb0\x7d\x7c\xca\x23\x71\x64\xee\x7c\xc8\xf6\x2d\x04\x19\x3d\x94\x4e\xb2\x02\xa1\x02\xf0\x69\x04\xe0\xe7\x01\xd6\x0d\xe0\x77\xe8\x30\x31\xe0\xa0\x3d\xe7\xd3\x1b\x3f\xb1\xf9\xaf\x09\xe9\x11\x0f\xeb\x47\x3b\xb5\xdd\xb9\xd4\x3d\x9c\x90\xc0\x67\x9b\xa2\xd6\xcd\x84\xc7\xae\x62\x5d\x94\x63\x1a\x44\x98\xde\x1a\x77\x75\xe7\x9b\x6e\xe1\xe5\x2a\x52\x5e\x54\xcf\x99\x8a\x29\x63\xeb\x8c\xab\x76\x94\xd6\xef\x12\xd6\xa7\x42\xb8\xc2\x4e\x73\x68\xbc\x6c\xcf\xce\xc3\xa4\x77\x5e\x24\x27\x74\xa8\x12\x0f\x95\xa0\x63\x37\x35\x00\xc5\x41\x7d\xcc\x49\xaf\x1f\x16\xa4\xc0\x0b\xf0\xac\xcf\xce\x4f\x09\xb4\x2a\x54\xab\x5c\xb6\xea\x4a\x5f\x75\x30\x61\x4c\x21\xbf\xdf\xdb\x0e\xe6\x87\xd7\xfa\xa9\x4d\xab\x14\x36\xbb\xf0\x22\x54\xc3\x0d\x38\x46\x83\x70\x1d\x6d\x1e\xea\xe7\x63\x59\x60\x48\x18\xc2\xb2\xc7\x32\x4d\xc5\x29\x11\xd3\xd8\x36\x3f\x25\xb4\x8d\x85\x38\x2a\xd1\x21\xc8\x08\x78\x67\xd6\x37\xe0\x8d\x25\x33\x9d\xa6\x59\x49\xce\x81\xab\x14\xc6\x6f\x1f\xa9\xd2\x78\x85\x30\x75\x6d\xbc\x0a\xdb\xe8\x57\x18\xe3\x59\x39\x0f\xf6\xef\x1b\x4f\x75\xa0\xe2\xac\x74\x70\xf1\x6b\x49\xaa\x6e\xad\x28\xa5\xe2\xa9\xba\x6a\xdc\xdd\xee\xd2\xd3\xb8\x9a\x08\xa7\x81\x15\xc8\x0b\x6b\xcb\x52\xf2\x97\x83\x58\xe5\x61\xe9\xd2\xc6\xdd\xeb\x65\x76\x68\xad\xce\x6f\xbb\x84\xc5\x70\x78\x37\x84\xfb\xd8\x25\x16\x89\x79\x8f\xea\xcd\x5d\x82\x8e\x14\x38\x22\x4d\x4e\xcf\xfd\x95\xfc\xd4\x8d\x47\xbd\xc9\xb7\x1e\xc1\xe0\x7d\x22\xc3\x75\x2e\x2b\x39\x88\xcb\x2e\x2b\x62\x3d\xd4\x70\x96\x2d\xc1\xf7\x9c\x8f\x5e\xfd\xf0\xed\xab\x77\x8b\xcb\x77\xef\x2e\xff\x0c\x29\xe5\x96\xfa\xa4\xd4\x97\xa2\xc7\x9f\x6a\xdc\x62\x3b\xee\x70\x34\x21\xc9\x73\xe7\x8d\xdb\xf4\x5a\xb3\x64\x36\x4f\xe6\xe4\x7d\x16\x0f\x7f\x57\x39\x28\x71\xed\xbf\xf3\xd1\x75\x75\xa0\xad\x8a\x18\x19\x2b\x89\xc3\x24\x72\xd0\x81\xb3\x2d\xc2\xcb\x11\x60\x94\xa8\x2b\x80\xbc\xcf\xfa\x32\x45\x67\x7c\xc0\xb7\x8c\xe5\x10\x41\x3c\x7c\x53\x16\xf7\x19\xe4\xd6\xc8\x9f\xdc\x8a\x37\xa4\xb3\xf3\x7e\x8b\xa0\x3a\x0c\x42\x7b\x7a\xf9\x73\xc6\xe1\x85\xe3\x35\x08\x2a\x7e\x0a\xa7\x9e\x12\x36\xa4\x08\x3b\x52\xb1\xdb\xf1\x6f\xd8\x94\x13\x36\xd1\x64\x81\xb0\x21\x47\x17\xf4\x39\xbf\x40\xe5\xac\xd4\x2d\xcc\x49\x6c\xcc\x74\x38\x74\x41\xd6\x2d\x5e\x1a\x7b\x4a\x1c\xe1\x78\xe1\xb0\x97\x4f\xcf\x21\xa9\x98\x5c\xa6\xd7\xfd\x2a\x01\x6e\x96\xb1\xa1\x64\xe1\x90\x49\x89\x60\xb0\xe5\xd9\x39\xc2\x96\xa0\x95\x7e\x68\x13\xbf\x60\xdf\x90\xf1\x05\x53\xf0\x2c\xb1\xf1\x33\xe4\x1b\xa8\x98\xa5\xc4\x72\x6c\xf9\x6a\x05\x34\xc2\xa4\x79\xee\x0c\xd0\xfb\x90\xdd\x92\x56\xc6\x51\x29\xf0\x34\x7f\x72\x5c\x5b\x91\xc2\x9d\xe6\x36\x79\x1d\xbc\xd6\x36\xf8\x12\x78\x9a\x97\xb4\x5e\xbe\xa4\xcb\x8a\xe7\xa2\xe2\x28\x7b\x44\xa9\xbd\x0f\x48\x02\x02\x6a\xbe\x67\xb5\xa0\x25\xa4\xb7\x56\xdc\xf9\xff\x51\x86\xd5\xa5\xca\x7b\x87\x00\x7d\xf9\x60\x49\x85\xad\xa3\x82\xb1\x97\x23\x78\xf6\x42\xc9\xb5\xd1\xa4\x7e\x3d\xba\x1f\xaf\xe1\x96\x43\xa7\x09\xf4\x8b\xc5\xf2\xfd\x1d\x6c\xd7\x56\xe8\x35\xab\x79\xac\x6e\x0c\x93\xd9\x84\x5a\x0d\xdd\x14\x85\xdb\x72\xdc\xdf\xb0\xb8\x24\xe3\x8b\xf2\x39\xbf\x28\x8d\xe1\x5d\x1f\x49\xb3\x07\xb3\x52\x0a\x32\xda\x7e\xc6\x70\xa9\x90\x9c\xdb\x80\x9e\x41\xd6\x4a\x18\xc6\x27\x49\x03\xf4\xdf\xb1\xdd\xa3\x28\x5c\x9f\x31\x0c\xa7\x5e\x6b\x26\x0d\xd8\x08\x98\xe6\x4d\xbe\x3d\x66\x8a\x6a\x7a\xef\xb2\x30\xb6\x38\xd2\x9d\x52\xc5\x19\x46\x63\xc6\xe6\xc4\xce\x51\xbd\x93\xdc\x27\xd7\x3d\x7f\x7b\x0f\xf3\x5a\xb3\x42\xd0\x6e\xb6\xc4\x2f\x31\x8c\x4e\xd7\x69\xca\x0d\xbe\x9b\x1d\x05\xa7\x40\xa5\xa3\x04\x2b\x36\x04\x45\xa7\xd5\x88\x23\x94\xfd\xd4\xe5\x5d\xf1\x44\x56\xb5\xd4\xaa\xd2\xb7\xf7\xfb\x32\xcf\xe8\x46\x6f\xf6\x5d\xfa\xc8\x8d\x77\x7f\x23\xea\xfd\x23\x8d\xac\x59\xd9\x4d\x96\x71\x68\xca\xf7\x0e\xa3\xd8\xd4\x8e\x0e\x40\x97\x3b\xdc\x37\xbd\xa5\xfc\xfe\x09\x9d\x5f\x85\x9d\xb3\xfa\x55\xd8\x80\x73\xb1\x3b\xa6\xf7\xbc\x7c\x4a\xdf\xd7\xdd\xbe\x2f\xcb\x58\xcf\xd7\xc7\xf4\xcc\xe9\xaa\x09\x6f\x70\x07\xff\xf7\xc8\x6e\x06\x2c\x16\x4e\x68\xc6\xb1\xb0\x74\x02\xb9\xfc\x55\xf2\xde\xbd\xad\x3e\xee\x49\x3d\x74\x58\x19\x24\xbe\x39\x9f\x0a\x5f\x19\x24\x1e\x49\x3c\xf4\xf8\xe1\x13\x5e\x08\x02\x1c\x37\xa5\x09\xe7\xf7\xaf\x61\x94\xa0\x8c\xc4\xa5\x92\x43\x2b\xc8\x9c\x5a\x29\x59\x7c\xcf\x96\xde\xc3\x2a\x9e\x50\x7d\xae\x40\x61\xb2\x8c\x25\x22\x8d\x9f\x55\x1a\xe4\x5c\x38\x25\xa6\x1d\x56\x2e\x8b\x66\xd5\x8b\x1e\xf7\x84\x3b\x9f\x83\x19\x43\x9d\xba\xe2\x9d\xc3\x78\x1b\xa6\x0b\x0b\xd6\x4a\x4f\x34\x43\x50\xcf\xe7\xc6\x43\xc1\x77\x7c\xc1\x5c\x38\xb2\x0d\x38\xcd\x09\x9d\xb1\x39\xae\x89\xcf\xb2\xe7\xd6\xe7\x4e\x0b\xe0\x39\xc2\x05\x01\xbd\xb3\xc9\x66\x9a\xd5\x10\x49\xbd\xce\x9c\xbb\x5a\x6b\xbd\xac\xd4\xd4\x9b\x92\xfd\x1c\x59\xbf\xad\xc9\x9c\xb5\x34\x0a\x97\xc8\x22\x6e\x8d\x02\x5c\xe5\x12\x16\x9b\xaa\xe9\xdb\x81\x61\xfa\x66\x81\x3d\x0f\x1f\x10\x0a\xb4\xf0\x46\x08\x9d\x46\x36\x91\x00\x68\xc9\x3d\x32\x28\x6d\x07\x91\x6f\x0d\xc7\x15\x21\xfc\xb1\x2b\xc5\x5c\x62\x1b\x1a\x80\x1f\x00\x0f\x6a\xd2\xfb\x74\x3e\xdf\x6c\x96\x49\x05\xa9\x76\x84\x08\x2a\x65\x57\x75\x4f\xb3\xb2\xa6\x5c\x5c\xee\x11\x3e\x5e\x39\x32\xa2\xcb\x1b\x9d\x55\xbc\xfc\x9d\x4f\x76\xe4\x09\x52\xa2\x44\x6c\x09\x5e\xf5\x84\x07\xf8\x10\xae\x52\xbd\x17\x9f\xc8\x4c\xc4\xaf\x3b\xc6\x16\x46\x68\x5b\x6d\xbb\xdd\xc6\x56\x88\xad\xb3\xb1\xcf\x44\x43\x9e\x48\x2b\x3d\xf7\x25\x86\xb3\xf3\x90\x7c\x98\x95\xc8\xe8\xd9\x39\x3e\x57\xe9\xf8\x36\x6c\x2d\xfa\x7d\xeb\x9e\xbc\xce\x7b\x7d\xd2\x68\x9f\xe3\x3d\x3d\x8e\x11\xa6\x2d\x6e\xca\x68\x7f\xbd\x25\x1e\xc3\xc2\x06\xa5\x1f\x5f\xdb\xb1\xbf\xa2\x5c\x5e\x7d\x35\xed\xd5\x3d\x66\x59\xbd\x73\xd2\xa1\x24\xba\xd5\xac\x3b\x49\xb7\x4b\xed\xae\xab\x69\x74\xe0\xa6\xaf\xce\xaa\x42\x3b\x70\x46\xb2\x20\xed\x6a\x78\x34\xba\x82\xb5\x3f\x5d\xb9\xce\x91\x75\x8d\xb2\xcb\xbb\x1d\x00\x39\x83\x9b\xdc\x43\xec\x2b\x72\xa4\x04\xdd\xf0\x1b\xf2\x0e\xc3\xec\x77\x1a\xce\x12\xda\xbc\xa2\xd7\xac\x0c\xc1\xef\x6a\x94\xf9\x1c\x7c\x17\x5c\x9a\x9f\x9d\x21\xaf\x4b\xd5\x32\xc0\x12\x78\x96\x2a\x31\xa2\xe5\xaa\xdf\xac\x5e\x88\x7c\xb5\xda\xbf\xbb\xba\x84\x51\x53\x19\x77\x80\x1d\xb0\x97\x6d\xa7\xee\x01\x7b\x05\xda\x95\x43\x33\xc5\x7b\x94\xc7\xd6\xad\xd7\x76\x92\x29\x57\x8b\xc7\x66\x07\xd6\x98\x40\xbf\xfe\x11\x36\xcb\xdb\x2e\xe9\xfd\x88\x6b\x47\x7a\xcd\xb7\xdd\xb7\x22\x33\x3a\x97\xdf\x12\x76\xd5\x24\x2e\xca\x75\xd5\x8b\xab\x50\xbd\xf8\xba\xf4\xb4\xfc\x81\x70\xe7\x8d\xdb\x37\x04\xbc\x85\x61\xbf\xc3\x1f\xc8\x2c\x51\x5b\x20\x99\x0f\xde\x2a\xd4\x25\x14\x5f\xb4\x8e\x7b\xd7\x8c\xce\xd3\xf4\x83\x51\xb3\x83\x61\x2a\xec\x81\x64\x6b\xf2\x16\x99\x3b\x52\x73\x8b\x6b\xfc\x41\x16\xbc\x24\xef\x70\xbe\xc7\x19\x10\xaa\x4f\xb3\xb7\xba\x46\xa7\x5b\x5d\x3b\x6a\xa4\xd8\xed\x66\xf3\x16\x4d\x0e\x15\xc8\x28\x99\xcd\x11\xbe\x74\xde\xb7\x53\x3a\x31\x5d\x51\xa4\xbc\xb0\x5f\x90\x4b\xcf\xe8\xf6\xe2\x29\x46\x37\x1f\x36\xe0\x18\xcb\xdb\x3f\xc7\xd0\xaa\x8d\x6e\x0a\x49\xe3\xb3\x0d\x8c\x3d\xf0\x87\xc8\x84\x0f\x79\xe4\x45\x57\xe0\xab\x61\xa6\x3d\x2c\x16\x6e\xc0\x0b\xe5\x29\x02\xe8\x58\xaf\x4b\xd9\x01\xab\xca\x3d\x7a\xd6\x51\x50\x71\x14\xd6\xc9\x00\xeb\xbc\xfa\xd8\x6c\x0f\x68\x62\xc3\x06\x34\xd6\xab\xe2\x77\x56\x7d\xc7\x11\xef\x7a\x0c\x2a\x0e\x28\x38\xdd\x08\x40\x5e\x09\xc1\xf8\xa8\x97\xcb\x52\x69\x3e\xb4\x63\x19\xca\x6c\x0e\x49\x4c\x71\xb2\x66\x65\x5e\xb0\xbf\xd3\x97\x36\xaf\x24\x0a\xfc\x51\xe4\x6c\x5c\x22\xe6\xf8\x8c\x3a\xa2\xe3\x83\xcd\xcb\x18\x4c\xd2\x4b\xe7\xac\xb3\x68\xb0\xae\xe3\x4e\xe9\x6f\x3c\xf6\xb4\x8d\x67\x82\x15\xff\x3b\x1f\xb1\xed\xfd\x2f\x3c\x5f\xbe\x45\xfa\xbf\xed\x44\x3f\x7f\x76\x26\xfa\xef\xbf\xed\xd4\x1e\x7c\x92\x10\x51\xac\xae\x56\x46\x17\x1c\xb9\x71\x71\x55\xee\xbb\xcb\x0f\xd5\x96\x92\xb6\x6e\x40\x03\xc6\x7f\x5d\x9f\x97\x0b\xad\x28\x2d\x57\x10\x8d\xe9\x1c\x96\x50\x8b\xab\xf5\xfa\xd0\x0c\x14\x8b\x78\x68\x09\x36\x79\x4c\x66\xd8\xa7\x48\xa7\xbf\xc4\xd9\x25\xe6\xc5\x71\x7c\x50\xe2\x71\x6e\x2b\xff\xd8\xfb\xaa\x43\x2d\x2d\x4e\xc9\x91\x48\x94\x87\x5d\x63\xfe\x9f\x71\x09\x0b\x8c\x36\x11\x57\x11\xab\x8c\xb9\x06\xef\x4d\xe3\x38\xe6\xdd\x8d\x07\x92\xda\xf3\x30\xa9\xbd\x32\x61\x50\x30\x61\xf0\x59\xe9\x1f\x94\xd2\xa5\xef\x1f\x05\x3d\x85\x4a\x50\x15\xd4\x60\xbc\x1e\x39\xa4\x45\x0d\x6d\xb4\xbc\x6f\xa0\xf0\xec\x5d\x75\x7c\x12\xb4\x5b\xc9\x15\xf2\x56\x20\x26\x03\xed\x31\x78\xed\x13\x97\xd4\xb1\xed\xcb\x3f\x7b\x9a\x39\x24\x06\xc6\x90\xd7\xf7\xcd\x28\x8e\xd2\xae\x27\xe6\x8b\x83\xca\x06\xd8\x21\x4a\x98\x75\x09\x6b\xdf\x96\x08\xa5\x3a\x92\xfa\x31\x8d\x85\x65\xe3\xed\x6d\xf2\xda\x14\x08\x99\xa6\x47\x09\xde\x30\xb1\xf6\x45\xd8\xc0\x7f\x64\x62\xa3\x63\x15\xf6\xef\x99\xb0\x5c\xb0\x7d\x58\xb9\xe4\x90\x2e\xda\x2c\x65\xb4\x95\x93\x8e\xe3\x8c\xf1\x54\xf1\x37\x63\x06\x29\x74\xbf\x2b\x2a\xe5\xbc\x1b\x1e\x36\xb4\xdb\x8d\xd1\x90\x03\xf7\xfa\xc5\x3a\xec\xf5\x22\x3b\x39\x93\x9d\x88\xea\xfa\xba\xa0\x91\x1e\xf6\x1e\xa5\xd3\xfe\x90\x5b\xbc\xcc\x97\x1b\x7a\xe0\x03\x5d\xeb\x94\x88\x2b\x48\xc8\x07\x6e\xec\xbf\xfc\x5a\xea\x40\x75\x3d\x89\xec\xaa\x80\x8f\x7f\xd4\x75\xd3\x25\xbc\x2a\x84\x48\x3b\xd4\xd7\x6f\x69\x09\xe9\x9c\x32\x15\x31\x63\xfd\xd1\x59\xfd\x9e\x0a\x51\x48\x36\x2e\x62\x1d\xec\x7a\xbc\xba\xd2\x5d\x8f\x0f\xfb\x26\xd2\xc3\x3b\xb0\xf1\x01\x3c\x1a\xab\xbf\x6b\x8a\x35\x2b\xf6\x74\xd8\xef\xcf\xd6\x35\x06\xfc\xe0\xad\x6b\xac\x3f\x1e\x53\x73\x72\x7a\x8e\xbd\x92\xf2\xa7\xfe\xa8\xdd\xa1\x76\x5d\x75\x1c\x66\x29\x0f\x30\x4b\x2d\x3e\xc5\xaf\xea\x13\xdd\xd4\xc9\x4d\x53\x03\x50\x69\x4d\x45\x72\xe0\xd2\x38\x39\x74\x93\xf8\x97\x02\xc5\x0f\x9d\x41\x07\x33\x6a\x11\xe6\x23\xb1\xa1\x65\xcc\x45\x0a\x82\x70\xb4\x84\x48\x57\xbb\x9d\xf7\x93\x95\xd7\x7a\x1d\xfb\xfd\x99\x10\x0c\x1e\x2e\x97\xdc\x72\xbc\x45\x38\xe8\x48\xa7\xa9\xf8\xac\x7e\xf4\xc6\xe4\xc1\x8c\x4c\x2f\xc9\x2b\x88\x8f\x3f\xf1\x97\x39\x41\xad\xd1\xa9\xb6\x20\xac\xd2\x72\xc2\xb2\x44\xfe\x9b\x20\x0c\xd9\x35\xe4\x6f\xf8\x23\x41\x18\x64\xe4\xe2\x5e\x3e\xd2\x7f\xca\xdd\xd1\x09\xff\xeb\x7e\x0e\x2f\xa6\x2d\xd8\x63\xfa\xfb\xba\x5c\x63\xdc\xb9\x8a\xf3\xc0\xcd\xfb\x33\x99\xba\x2e\x6c\xe7\x93\xe2\xef\xff\xa9\x0c\xed\xc3\x62\x61\x07\xaf\xd5\x31\x5c\xe5\x13\xf2\xf3\x7d\x1d\xd4\xaa\xb8\xfa\x23\x5d\x55\x6b\x55\xd4\x0b\xca\xe5\x47\x34\x7f\x27\x08\x37\xa5\xff\xc2\xfd\x4a\x10\xee\xa4\x19\x93\xef\x37\x79\x9d\x20\xdb\x14\x5d\xbd\xd9\x9a\x37\xd7\x54\xa8\x1f\xde\x7b\xf5\xa0\x96\xaf\x2b\xf5\x67\xa4\x72\x1d\xd4\xae\xfb\xd5\xbf\xab\xf8\x87\xfb\x2d\xf5\x5a\xd1\x4f\x62\x8d\x79\x85\x5d\x9b\xae\x3c\x03\x1d\x95\x7c\xcb\x8c\xb6\xea\xe8\x9d\x6c\x51\x20\x04\xe9\xad\x35\xf2\xa2\x1d\xbe\xc4\x16\xde\x03\x9d\x79\xf8\xae\xfc\xac\xf0\xf6\x7f\xd6\x4e\x57\x33\x54\x7b\x5c\x4d\xd3\xff\xfb\x85\xca\x88\x15\x79\xa4\xed\x28\xdd\x20\xb0\xa0\x4c\x78\x0f\xc6\xb3\x72\x84\x15\x82\xd4\x1c\x2e\x14\xd3\x78\x21\x76\x2a\xd3\x4e\xf0\x9f\xb5\x40\x78\xe5\x4c\x52\x2f\xad\xda\x94\xfc\x16\x2e\x5b\xcf\x6f\xc1\xe8\x32\x2e\x3b\x7a\x56\xda\xf3\xea\x7c\x68\x8d\x5b\x27\x85\xdc\x64\x3a\xb3\x5a\x45\x4a\x9d\x5f\x12\xe7\xf6\xa9\x9e\x10\x44\x6b\x11\x06\x17\x46\x64\xda\x09\xc2\x15\xa9\x76\xbb\xae\x11\xa9\x0c\x03\x23\x6d\x34\x0e\xc0\xbd\x3f\xc4\x96\x28\x1a\x51\x59\xf6\xd7\x87\xa5\x69\xc6\x0e\xad\x4f\x09\xe1\x91\xd6\x93\x14\x82\xc5\x17\x6a\x00\x2e\x98\x55\x3f\x18\x78\x56\x5f\x75\x8f\x79\xee\xac\x0a\xc0\xfa\xe0\xe7\xd6\x68\x77\xda\xd2\x86\x70\x95\xa6\x3a\xe1\x2a\xc4\xa8\x28\x10\xf6\x9a\x96\x2b\x54\x93\xac\x21\x15\xf2\x23\x91\x1a\x3c\x63\x56\x9c\xcd\x4d\x1a\xbd\x9a\x64\x05\xa9\x90\x7c\xa5\x8a\x15\x78\x16\x94\x62\xeb\xec\xf4\xfc\x94\x90\xda\xfa\x8c\x9b\x64\x1a\xe7\x21\x2f\x7d\x1c\x9d\x88\xc1\x25\xfb\xd4\x01\x2a\x9f\x5d\xe5\x57\x34\x1e\xc9\xb4\x3f\xc6\xe9\x17\x03\xd0\x74\x20\xa5\x9f\x1e\xc7\x8b\xf3\xaf\x42\x83\x6a\x95\xe3\x57\x8b\xdd\xc9\x42\x8e\xb3\xbc\xa6\x2b\xed\x07\x0a\x2a\x0f\xe7\x64\x9a\xe0\x95\x71\x0c\xdd\x53\xd6\x3a\x8e\x26\x2d\x6e\x42\xc7\x2b\x73\x9b\x78\x56\x13\x1a\x8f\x6b\x55\x5b\xb0\x05\x1e\x89\x95\x1b\xca\x99\xa8\xbf\xaf\xaa\x9a\xaa\x48\x1a\x9b\xbe\xcb\xda\xfa\x6c\x82\xcf\x11\x2b\x59\xe0\xf1\x14\xa4\xa9\x29\x99\xd8\x13\xd7\xab\xee\x2e\xed\xa6\xff\x92\x71\x71\x0f\xfe\xd7\x64\x1c\xbe\x21\x0a\x83\x05\x1e\x29\xd5\x10\x94\x25\xa7\xe3\xe0\xa1\xad\xd6\x59\x21\xbf\x7a\xe7\xd5\xeb\xfa\xa7\xed\x2a\x17\xac\xbc\x26\xa7\xe7\xf1\x22\x1f\xf2\xeb\x03\x0d\xbc\xa3\xb7\xac\x66\x55\xa9\xf3\x7f\xb3\x19\x1f\xbd\x7d\xf7\xe6\xed\xab\x77\x1f\xfe\xbc\x78\xf9\xfa\xe5\xe2\xc5\x6f\x2e\x7f\xfc\xcf\x57\xf3\x7e\x1a\x72\x4e\x6f\xf3\x82\xad\x40\x45\xaf\xea\x1d\x8a\xfa\xd5\x31\x1c\xb3\xb9\x01\xa8\xd7\x36\x61\xf9\x6b\x9a\xf5\x5b\x94\x02\x7c\xee\x42\x7d\x1f\x89\xef\xed\xcc\x49\xc7\xf9\x4e\x1e\x0f\x32\x6e\x31\x1b\x79\xe1\xd5\xb1\x59\x1a\x07\xf2\xee\x8e\x35\x2a\x19\x98\xbd\xf5\xae\x30\x5f\x2c\xaa\x03\xe0\x9e\x13\x46\x8f\xa6\x86\x5d\x24\x48\x8f\x4e\xdb\xdf\x49\x97\xaf\xf0\x1d\x45\x74\x1d\x13\xd0\xe4\x6a\xf5\x47\xa3\x12\xd1\xed\x8d\xe0\xb6\xae\x27\xaa\xa0\x3f\xb3\xae\x0f\x5a\xe4\x9b\x19\x8c\x28\x7f\xeb\xa7\x69\x16\x1e\x85\xd9\x1c\x61\xf0\xfe\xdb\x73\x76\xd2\x94\x7e\xb3\xef\x5d\x10\x3d\x7e\x68\xf1\x54\xd4\xb6\x4b\x54\x1a\xb4\xa7\xb5\xb3\x7e\x2b\xd8\xec\x47\x1b\xe9\xd1\xef\xfc\x82\x3d\x2f\xc1\xca\x11\xbc\x9f\xb1\x79\xe8\x87\x6e\x3e\x06\xd3\x97\x59\xb4\xeb\xf1\x60\x1f\xe5\x38\x3b\x6f\x03\x19\xc4\x74\x43\xe7\xf2\x63\x2c\x14\x1e\x42\x6c\x3f\xf6\x9d\x26\x63\x9f\x63\x3a\x9e\xc4\x06\x84\x8f\x58\x53\x5c\x12\x31\x8d\xae\xd9\xc4\x4c\xe7\x98\xd3\xa2\xc8\x50\x3c\x18\x01\xfc\xab\x4a\x43\x56\x59\xe9\xed\xad\x5e\x2d\x7b\x63\x84\x95\x74\xf4\xc8\xe1\xd3\xfa\x58\xa9\xfe\x5a\x3e\xbe\xe3\x68\x9a\x9e\x06\x0a\x87\x34\x55\x87\xbc\x1f\xcf\xa2\xf2\xa5\x61\x7b\x7f\x74\xc9\xbd\x3a\xf9\x47\xac\x66\x9f\x5e\x75\x9a\x02\x83\x3e\xdf\x1f\x06\xd3\xab\x60\x46\xa6\x56\xe9\xe0\xa5\xee\x77\xbe\xb7\x78\x34\x82\x44\x28\x35\xf8\xa1\x8d\xa0\x8a\x58\x24\x9a\x0a\x22\x92\xaa\x61\xe7\x3b\xf4\x87\x6f\xf7\xe4\xb0\x3c\x63\xe8\x22\x83\x30\xd0\x3d\x67\x4d\xfb\x86\xf5\x5f\x7c\x53\xa1\x2e\xd9\xf2\x4e\x68\x85\x0e\xdc\xe4\xf1\x1d\xaa\x66\x03\x8b\xe4\x36\x75\xff\xe3\xed\xe7\x23\xc2\xae\xf4\xee\x88\x35\x04\x79\xb0\x1f\xe1\x14\xa4\x74\x05\x9e\xda\xf1\x82\x1f\xf2\x6b\xd8\x36\xf9\xc8\x74\xb0\x67\xb1\x3f\xe4\xd7\x87\x79\x0a\xb4\xdb\x65\x01\x11\xea\x37\x30\x3d\xf2\xd4\x4e\xe2\x43\xf0\xd9\x1f\xb3\x56\xfb\x49\x64\xb6\xe7\xc0\x05\x4c\xd4\x9e\x32\x92\x8b\xfa\x25\x3c\x49\x82\xf6\x34\x6c\x19\x30\xb3\xe4\xcd\x81\xf5\x06\xf4\x12\xa5\x16\x06\xb6\x06\x10\xbd\x25\x77\x3b\x7b\xf8\x48\xef\x27\x66\xf7\x77\x43\xd1\xe2\xd7\x75\x6f\x6b\x1d\x4f\xec\x02\xae\x95\x4e\x03\x41\xd7\xdd\x0a\xb1\xcd\xdb\xb9\xde\xd4\xbb\xae\x42\xda\x24\xeb\x0b\x42\x16\xcf\xa8\x01\x57\x2d\xd1\x43\x09\x04\x41\x78\xf6\xd5\xb3\x12\x0c\xac\x86\xcb\xdf\xcb\xe2\x0c\x98\x21\xcc\xff\x3f\x77\xff\xda\xdd\x36\x8e\xec\x8b\xc3\xef\xf5\x29\x64\x9e\xde\x1a\x72\x04\x33\x76\xba\xe7\xa6\x84\xed\xe3\xc4\x4e\xb7\x4f\xdb\x71\xb6\xed\x74\x4f\x3f\x6a\x6d\x0f\x2d\x41\x36\x26\x14\xa1\x01\x41\x3b\x6e\x8b\xdf\xfd\x59\x28\x5c\x49\x82\xb2\x9c\xcb\xec\x59\xff\xb5\xb2\x62\x8a\x04\x0a\x77\xa0\xaa\x50\xf5\x2b\xe3\x08\x4d\xc4\x01\xa2\xed\x7a\xeb\xe7\x4e\x54\x55\x15\xf8\x47\x5b\x44\xc9\x1a\x6c\x0a\x2a\x6d\x58\x54\xd7\x6c\x13\x3d\x34\x3a\x4d\x32\xa3\x69\x46\xd2\xc2\x81\xd9\x89\x90\x77\xc3\x18\x35\x19\x36\x87\x85\x5c\xef\x6e\x27\x76\x9a\xad\xdd\x68\x53\xcc\x3b\x5f\x04\x9f\xa7\x48\xbe\xc6\x22\x6b\x93\xd8\x90\xeb\x83\x9d\x36\xe0\x40\x1e\xb3\xeb\xfb\x0c\x41\xfc\x91\x18\x44\x9d\x78\x7d\x16\x7a\xe3\xf3\x45\xea\x16\x2c\x7f\x8d\xbd\xc6\xe3\x9b\x89\x8a\x47\xe8\x91\xbd\xb3\xa4\x54\xfa\x3f\x2b\xa3\xca\x49\x88\xa6\xb0\x20\x48\x7c\xf9\x0b\x4e\x3f\x9c\x63\x8e\xe6\xf0\x42\xfc\x3a\x49\x97\x0a\x92\xc3\x79\x83\x6e\xa4\x6f\x4b\x71\xbf\xb8\xa2\x59\x14\x06\x6f\xce\xf6\x4f\x0e\x7f\x39\x3d\xfb\xe9\xf2\xf5\xf1\xfe\xf9\x79\x10\xd5\x61\x39\x5c\x6c\xbd\xc2\xc0\x79\x89\x75\x69\x90\xbb\x5c\xb6\x1b\x2b\xa5\x0d\xce\x53\xee\xe2\xee\xa0\x34\xc1\x71\x13\x8c\x07\x65\x89\x21\x92\x0f\x06\xb9\x89\xcc\x6a\x22\x25\x4a\x5c\xb0\xd4\x7e\x98\x27\x6e\x30\x57\x1e\xa1\x59\xb2\xf3\x62\xf6\x72\xae\x7d\x7d\x66\xda\xd7\xe7\x26\x99\x8f\x67\x13\xb4\x4c\xf8\xf8\x66\x82\x16\xa2\xfa\x65\x3c\xc3\xc5\x94\x91\x25\xa7\xac\x26\x1a\x62\x74\x83\x58\x84\x6e\x6d\xa1\x0b\x50\x38\xdd\x4a\x52\xf7\x89\x18\x9d\x5e\x26\x6a\xa8\xf1\x6e\x6f\xa2\xef\xb7\x77\x07\x83\x70\x99\xdc\xef\x41\x7f\x2e\xd2\x0f\xda\x54\xfa\xde\x20\x52\x2e\xa3\x51\xf3\xe3\x32\x8a\xd0\x54\x34\xa9\x4d\xa9\x16\x0d\xee\xa1\x42\xf7\x68\x19\x45\xd5\xed\xde\x02\x30\xbf\x44\x25\x97\xd1\xc8\x62\x9f\x58\xa8\x60\x0f\x28\xd5\x6a\x75\x03\xa1\x01\xf7\x60\x62\x2d\x47\xbe\x34\xa1\x20\x58\x49\x6d\x87\xe8\x4a\x16\x97\x39\xa0\x3e\xb8\x10\x55\x30\x83\xae\x13\x66\x00\x43\xc1\xa8\xab\x08\xeb\x53\xe0\xda\x4c\x81\xab\x64\xe7\xc5\xd5\xcb\x6b\x3d\x1e\x57\xc3\x61\x04\x5d\x0f\xc1\x4b\x53\x8e\x5d\x9e\xf8\x7a\x7c\x35\x89\xc1\x68\x4f\x3e\x16\xf7\xf9\x34\x7a\x01\xc9\x1d\xf3\x31\x8c\x02\x51\xc3\x40\xc7\xf7\xad\xff\x61\x12\x6e\x61\xd1\x11\xc0\x58\x1f\x70\x73\x71\x32\xc8\x23\xd1\x81\x29\x8f\x7a\xa6\x05\x78\x30\x08\xe7\xf1\x0c\x67\x98\xe3\x76\x3a\xc4\xe2\x37\xfb\xaf\x2f\x4e\xcf\x7e\xbd\x7c\x73\x7a\x06\xe3\xa1\xcd\x00\x50\x33\xb1\x5c\xa3\x35\x97\x8f\x17\xce\xe2\xe1\x51\xdc\xea\xe4\x0a\x8b\x33\x88\xf0\x37\xd2\xc4\xb5\xae\x0d\x73\x4b\xab\x0c\x20\x89\x47\xa3\x25\x77\x84\x64\x33\x43\x25\x5e\x37\x54\x52\x11\x3c\x5f\x30\x21\xed\x8e\x99\x6b\xa8\xc4\x26\xd6\x2d\xa2\x94\x5a\x31\xd8\x8b\x34\xec\x82\x71\xe1\x6a\xa9\xd4\xc4\xbb\x59\x5b\xcf\x22\x96\x96\x5e\x8e\xe2\x5b\x54\xc3\x3c\xeb\xeb\x0e\x4b\x5d\x93\x63\x03\x8d\xc9\x8d\xb7\x96\xa3\xc5\x59\xa7\xd5\x11\x9f\x38\x3d\x07\xc5\x7b\x5b\xca\xf3\x40\x09\x71\xe9\x1e\x24\x73\x1c\x7e\xe4\x38\x17\xcc\xda\x5e\x30\x0a\x86\xfe\x4f\x61\x34\x0a\x02\x8d\x59\xf2\x32\x18\x86\xb0\xe6\x55\x70\x5f\xd5\xb8\xd5\xaa\x3e\x83\xf4\x6c\xd4\xee\x2a\xee\xfc\xd1\x05\x84\x51\x04\x41\x5b\x25\xb9\x92\xcc\x8c\x05\x49\x34\xc4\xc3\xe0\xfb\xa0\x92\x01\x90\xb1\xeb\x8b\x6c\x26\xbc\x4f\xa1\xca\x36\x55\xa8\x3a\x66\x00\x0d\xb5\x2a\x43\x62\xb6\xa8\x6b\x03\x3d\xf7\x32\xed\xed\x10\x5b\x2c\x3b\x31\x45\x5c\xc5\x29\x84\x19\x96\x3c\xac\x37\xac\xa9\xd4\xc2\x68\xc0\xb4\xf1\x8d\x86\x46\x43\xa9\xb3\x78\x9d\x05\x9b\xee\xd1\x24\x95\xa6\xf3\xa3\xda\x2a\xa6\x06\x06\xd6\x84\x89\x8d\x94\x5d\x1e\x09\x35\x60\xb8\xfa\xdd\x33\x2e\x98\xcc\x5e\x81\xf0\x3d\x3c\xba\xf5\x77\x0f\xb8\xd7\x61\xcf\x4a\x73\x59\x5c\x31\x11\xcf\x24\x8b\x18\xa1\xcc\x21\xb4\xa6\x77\xe4\x12\xc2\x4e\xde\xf6\x90\x02\x09\xbb\xee\x01\xc9\x02\x00\xe0\xc3\xa9\xde\xb8\x70\x84\x66\x12\xba\x4a\x74\xd6\x60\x30\xb3\x9b\x47\xd9\x30\xfe\x6c\xd7\x07\x44\x0d\xdd\xb8\x06\x8b\xe2\x30\xa4\x9e\x3d\xc0\xd3\x10\xe9\x0c\xd3\x54\x21\xfa\x4e\x2f\x8b\x2e\x24\xb6\xab\x17\xf8\x85\x44\x77\x55\x22\xa4\xc5\x08\x82\x20\xde\xe5\x12\x33\x08\x3c\x60\xaf\x7f\x4c\x61\x47\x0a\xc4\xd5\xeb\xa7\xe3\x42\xbc\xea\x3a\x8a\x0d\xd9\x61\x04\x3c\x90\x90\xb6\xcb\x43\x31\x87\xd6\x31\x11\xdc\xb9\xd7\x64\xf1\xa5\xa0\xbd\x5a\x3d\x40\xcc\x6f\x9c\x4e\x6f\x5e\xab\xcb\x56\x1f\x6a\x64\x1b\xac\x41\x5e\xac\xb9\xa5\x2b\x63\xd6\x87\xaa\x76\x96\xd4\x66\x84\x71\xb2\x3a\x30\x35\x2c\xea\x90\x0e\xd0\xb3\xc4\x81\x3c\xd2\xf0\x83\x44\x57\x98\xf5\x1c\xc8\x07\x0a\xd0\xf1\x15\x52\xa7\xcd\xa3\x33\x52\x6c\xec\x7a\x56\x46\x0f\x80\x00\x13\xe2\x9a\xeb\xa3\x1d\xbf\x1e\x1f\x0c\xb8\xe9\xda\xda\xa4\xf5\x4c\x4d\xeb\x4d\x65\xae\x80\x3d\x42\x31\xd6\x42\xb1\xa3\x93\x6b\x49\xc6\x66\x1e\x17\xf1\x12\xe3\x0f\x27\x16\xa3\x33\x26\xc5\x39\x2d\xd9\x14\x9b\xcc\x61\xd3\x70\x2a\x12\x03\xda\x28\x03\xa0\xbf\x3f\xb9\x10\x79\xfe\xb7\x4b\x99\xe8\xb6\xd4\x3b\xa2\x55\x92\x1c\x88\x99\xb3\x43\x36\xef\x8e\xc5\x9e\x18\xe2\xa4\xb1\xfe\xa3\x48\xee\x9d\xaf\xed\xc1\x03\x43\x84\x66\x75\xee\x06\x9b\x06\xdb\xb1\xeb\xa8\x84\xe2\xcc\xa5\x31\xb3\xac\xf3\xe9\xbc\x5e\x29\xbc\x95\x24\x6d\xdc\x7d\xb1\xdf\x42\x6d\x41\xf2\xc6\x55\xe8\xc8\x20\xb7\x35\x36\x46\x9f\x95\x3e\x09\x43\x4d\xb1\x96\x90\xc1\x12\xf7\x78\xc0\x56\x96\xc8\xed\x07\x98\x8c\xe6\x03\x84\x71\x28\x92\x9d\x17\xc5\xcb\x26\xdf\xf4\xa2\x18\x0e\x0d\xaf\x5b\x26\xc5\xcb\x9d\xd5\xaa\x99\xe6\x65\x52\x68\xf4\x3b\xcb\x45\x15\x13\x94\xd5\x64\x17\x88\x07\x2f\x04\x1a\x1d\xd9\xfd\xc5\xf4\xe5\xfc\xc5\x54\xcb\x2f\xb3\x24\x1b\x4f\x27\xe8\x26\x29\xc7\xb3\x89\x8a\xb8\x81\x8d\xd0\x30\x13\x42\x83\x8e\x46\x93\x8a\x14\x37\xc9\xb2\x25\x88\x2c\x8d\x20\x72\xd3\x16\x44\x6e\xa2\x8a\xcc\xc3\x5c\x34\xdc\x43\x75\xa1\xa9\x36\x85\x92\x05\xba\x89\x2a\xf1\x2d\xb9\xb1\xa1\x27\x16\x96\xc3\x2a\x63\x98\x22\x17\xea\x37\x92\xc2\xa6\xe6\x85\x16\xca\x9c\x2e\x76\xa2\xe6\x45\x68\x11\x93\x42\x9e\x37\x5b\x3b\xf0\xe3\x04\xf3\x1b\x3a\x4b\xb6\x76\x7b\x52\xfe\x5a\x38\x0a\x98\xfb\xa7\xa8\x39\x9c\x00\xca\x5f\xe6\x7a\xbf\xa1\xb3\xd8\xe8\xe2\xdf\xab\x58\xf8\x2a\x77\xf4\xd4\xcf\xf6\x91\xcf\xb9\x47\x27\xfa\x1e\x5d\x9c\x12\x2d\xa9\x83\xb6\x98\x7e\x7d\x03\x62\x82\x43\x46\x1a\x03\x83\xae\xe1\xc3\x9b\xca\x3b\x31\x70\xca\xc2\xb6\xf6\x7e\x01\x5d\xf1\x8e\xe1\x39\xf9\x68\x4d\x20\xf1\x6a\x25\x15\x7c\x73\x92\xdb\x82\xc1\x75\xc0\x6c\x83\x21\x36\x7c\xa1\xc3\x97\x47\x60\x22\x24\x3f\xd4\x38\x6c\x03\xe0\x6d\x13\xcb\xfd\x10\x1a\x22\xaa\x07\x33\x16\x17\xad\xb6\x2f\x19\x9d\xe2\xa2\xf0\xb5\xdf\x23\x0c\x39\xb7\x35\xcd\x1c\xc8\x35\x49\x50\x59\xd5\xe1\x2c\x09\x92\xca\xa2\x0a\xba\x3a\x4a\x8a\xa8\x6b\xcc\x60\xab\x22\xd6\x17\x8d\xdf\xee\x9f\x1c\x9e\xbf\xdb\x7f\x7d\x78\x9e\x30\xe7\x47\xed\xcb\xe5\xab\x5f\x2f\x8f\x0e\x6a\xdf\xe5\x2b\x49\x5a\x34\x70\x3f\xcb\x12\xe6\xfc\xb0\xfd\x8e\x68\x7c\x75\x2f\x7e\x26\x8d\x11\x79\xca\xd2\xfd\xea\xca\xc9\x8d\x56\xf5\x93\x0c\x7d\x3e\x21\x2c\xba\x0f\x5c\xf8\x51\x75\xe4\xe7\xef\x1d\x8d\x20\xd2\x89\x1f\x17\x1f\x65\x35\xcd\xe1\xf4\x33\x77\x97\x6e\xa1\x52\xec\x31\x1e\x7e\x8e\x68\x1e\xe8\x12\xba\xc4\x84\x9b\xfe\x09\xdf\x77\xb0\x20\x1d\x42\x76\x2b\xd8\x00\x30\x02\xf3\x52\x4e\x5a\xcd\xe1\xe4\xf1\xe9\x2f\x6f\x0f\xcf\xfc\x94\x33\x87\x9a\xab\xf9\x72\xa2\x73\x49\x3e\x77\xd3\x2a\x00\xcb\x01\x53\xb2\x7d\x17\x92\xd5\x74\x3e\x82\x29\x22\x55\x98\xfa\x96\xfa\x14\xc1\x01\x6d\xf6\xa9\xa9\x3e\x60\xcd\xe1\x6a\x40\x23\xd4\xd8\x4c\xeb\xc0\x07\xcd\x99\x50\xfa\xde\x75\x0d\xbc\xc2\x99\x34\x62\x34\x31\x58\x75\x56\xb5\x61\x36\x52\x25\x8d\x4b\x8f\xaa\xa2\xc0\x8c\x5f\xdc\x38\x80\xf8\x78\x16\x85\x24\x42\xcc\xda\x31\xfe\x27\xce\x94\xe6\x50\xb4\xba\xb7\x74\xba\xb7\x8a\xa2\xde\xd3\xb6\xbb\x4f\xb1\x45\xfc\x6c\x8b\x43\x15\x92\xe4\xab\x06\xbc\x73\xb6\x15\xf2\xd5\x75\x53\xcc\xb7\x52\x08\x22\x4d\xa1\x52\xdd\xe3\xd9\x7b\xbe\x8d\xce\x27\x13\x6e\x74\x73\x67\x60\xcf\xf9\xf0\xc5\x7d\x5f\xa5\xb8\xd5\x54\xb8\x34\x62\x08\x06\xe2\x77\x60\x37\x30\xf7\x93\x89\x12\x19\xa8\x61\x62\xe3\x5c\xae\x66\x1c\x4d\x56\x2b\x8d\xb9\xdc\x73\x55\xa6\x09\xd9\xe3\xed\xe8\x83\x60\xac\x1c\x48\x51\x31\x1a\x39\x60\xcd\x44\x70\x5b\xae\x26\x06\xa2\x13\xed\x91\x44\x85\x22\x1a\xd5\xd5\x34\x9a\xb2\x48\x60\x03\x68\x7a\x02\xf8\x88\xe2\x20\x4c\xa6\x0d\x65\x45\x2a\xad\x31\x09\xc6\xb2\x02\x1a\x42\x7d\x12\x8c\x4c\x74\x51\x64\x3e\xbe\x05\xac\x69\xf1\x4d\xa1\x4e\xdb\x4f\x92\x67\x15\x9f\x94\xf9\xb6\xfd\xa4\x65\x59\xf1\xd1\x74\x8b\xfd\xbc\x5f\xdc\xe7\xd3\xc7\xd2\x08\x71\x4c\x7c\xd3\x86\xbf\xfa\x83\x68\x9a\x78\x0f\x0d\xb3\xaf\xcf\xf0\xf5\xe1\xc7\xa5\xf8\xc0\xf0\x35\xfe\xb8\x74\x3e\xc9\x59\x23\x3e\x99\x0d\xc0\x54\x94\x64\xe0\x57\x0f\x95\x20\x19\xce\x48\xc1\x83\x0a\xe5\x49\x2b\x3c\xa1\xe6\xd1\x3b\xd7\x02\x30\x4b\xcf\x40\x66\xf4\xae\x01\xcf\xa5\xef\x26\xee\xde\xce\x46\x60\xd4\x6f\x0f\x95\x05\x96\x82\xa0\x30\x63\x3c\x49\x76\x11\x8f\x84\x3c\xec\xa2\x7b\x31\x1b\x13\xcc\xb1\x1e\x6e\xe2\x14\x82\x2a\xc4\x4e\x47\x1b\x69\xd3\x17\x47\x2a\xfa\x94\x60\x43\xf2\x56\x35\x99\x43\x20\x85\x23\xd5\x65\xe7\xea\x65\x4b\x2b\x09\x46\x91\x06\xf3\x39\xc4\xa0\x6a\x9b\x11\x48\x95\x32\x9f\x3e\x52\x55\x49\xe9\x70\xac\xc2\x91\xc7\x97\x22\x9f\xb4\xfa\x95\xba\x60\xfd\x0e\x71\x41\xb5\x2c\xc9\x2c\xa1\x08\xc7\xd7\x38\xc7\x2c\xe5\xf8\x07\xf1\x62\xad\x0e\x52\x1e\x3c\x81\xd6\x3c\xf2\x21\x0d\xa3\x5e\x0e\xcb\x3b\x55\x37\x92\xcc\x6a\x3c\x45\x21\x4a\x82\x6a\xd7\x1b\x3c\x20\x42\x1c\x45\x56\x1a\xe3\x09\x04\xaf\x15\x2f\xdd\xd2\x44\x21\x48\x93\xe7\x91\x8d\xd2\xe9\xe6\x2c\x74\x4e\x83\xdd\xa5\xc6\xac\xc7\x13\xeb\x62\x91\xb0\xbd\xa0\xe0\x40\x71\x64\xa1\xe4\xc5\xdb\xbc\x54\x6f\xe5\x70\xe9\xb4\xf7\xea\x6d\x18\x0c\xf1\x30\x88\x02\x54\x98\x7a\x18\x13\x16\xd1\x4c\xb9\x14\x12\x86\x70\x7c\xc7\x5a\xe8\xbf\x64\x1e\x6e\x5d\xb9\x21\x58\x65\xd4\x56\x15\x50\x62\x30\xb8\xb2\x30\xf9\xfd\x0f\x21\x46\x1f\x42\x8e\xae\xed\xbe\xf5\x41\xf9\x9b\x41\xe8\x31\x0b\x51\x7d\x28\x5f\x18\x7f\xef\xe4\xa3\x34\x29\xb0\x29\xee\xe4\x0b\x9b\xe2\x1c\xaa\x5a\x2c\x7d\x6a\xf8\x26\xb2\x3e\x1e\x0c\x7c\x81\x2b\x6a\xe0\x79\xea\xf9\x28\xc4\x68\x07\x2a\x28\x5d\x4f\xac\xb2\x39\x79\x8b\x04\xfb\x97\x4b\x94\xd2\xe4\x58\x1c\x4a\x1a\xb3\xb4\x65\xcd\x4c\xe6\xe1\xb1\x1c\x62\x73\xea\x8f\xb9\xf6\xfe\x00\xdf\x73\xd0\xd0\x6b\x7d\x95\xff\x5c\xd3\xeb\x7f\x6c\xb0\x14\xde\x48\xf8\x2d\x30\x9e\xc5\x5a\xd6\xf7\x5d\x08\xfc\xae\xe6\x50\x25\xbb\xad\x91\x4c\x0c\xa4\x9c\xea\xbf\xdb\x39\x80\x70\x5b\x81\xd1\xc7\x21\xf7\xbb\xf6\x38\x71\x73\xed\x39\xcc\xbb\xcf\x61\xee\x39\x87\xbd\x51\x73\x2d\x60\x4b\x10\x28\x80\x09\xad\xbb\x04\x9c\x89\xfc\x7b\x85\xe5\x1e\xa0\x20\x42\xef\x43\x3e\xce\x27\xd1\x6a\x25\xde\x60\xf9\xc3\x59\xb5\xb5\x3b\x19\x5b\x77\xd3\x50\xd3\x08\xe7\x56\x52\xe7\x7e\xa5\x78\x7d\xe8\x19\x08\x63\xf5\xb1\x3d\x4e\xce\x4a\xf8\x97\xba\x1a\xe8\xb9\x57\x37\x3a\x44\x5a\x2d\xa3\xec\xfa\x7f\xa9\x0b\x04\x49\x1e\xc4\x9a\xf6\x5c\xd0\x93\x67\x30\xc0\xe3\x6f\x26\x8a\xe2\x2f\x84\xdf\x9c\xa4\xf9\x2c\xe5\x94\xdd\x9f\x63\xce\x31\x4b\x70\xcc\x71\xca\x66\xf4\x2e\x6f\x7f\x29\x30\x2f\x97\xed\xd7\x4e\x78\x86\x04\xc7\xe0\xca\x9f\xe0\xf8\xc7\xfd\xf3\xcb\xb7\xfb\x17\x47\x3f\x1f\x5e\xbe\x3b\x3b\xfd\xfb\xaf\xf5\x57\xe7\xbf\x9e\xbc\x3a\x3d\x4e\x70\x7c\x76\x7a\x7a\x21\xc4\xa1\x1b\x3c\xfd\xf0\x63\x5a\x9c\x97\x4b\xa0\xf9\xc3\xfb\xa3\x83\xcb\x9f\x0e\x45\x2e\x79\x43\xa9\x0f\x16\xe7\xd2\x46\x7e\x3b\x10\x87\x26\xcc\xcb\x1a\xf3\xbc\x63\x4f\x4a\x6a\x58\xe6\xe1\x90\xa8\x90\x50\xae\xc0\x5e\xc0\x2f\xf1\x54\x26\x2c\x14\xc7\x96\xdc\x63\x05\x67\x11\xe7\xf4\x2e\x84\x80\x60\xa6\x46\xa5\xb4\x35\x42\xd3\x64\x3c\xb1\x85\xcc\xed\xe9\x03\x34\xc4\xe6\x18\x96\x43\x88\x91\x3e\xcf\x28\x65\x21\x3c\xb2\x34\x9f\xd1\x45\x18\xfd\xd1\x21\x1e\x0d\x45\x7a\x33\x5f\xa6\x3a\x1a\x34\xe2\x95\x52\x71\xf7\x1a\x2d\x9d\xf5\xa4\xed\x8e\x11\xbf\xec\x9d\x82\xbf\xab\xf6\x1e\x4b\xd0\xb6\x31\x14\x5c\x85\xaa\x91\xab\x8f\xc7\x3e\x8c\x42\x16\x3d\x80\x35\xc4\x23\xa5\x84\x0a\x0f\x1e\xf1\xaa\xb7\x6e\x5c\x6f\x7a\x52\x63\xff\xec\xb7\x38\x94\xf0\x68\x2b\xb1\x84\x7e\x03\x49\x67\x05\x7b\x9f\x7c\x8e\x9e\xa1\x85\xe7\xa2\xc4\x2c\x42\x74\x9b\x2c\xe4\xea\xf3\x44\xed\x03\x29\x29\x8a\x0c\x5f\x11\x38\xef\x83\xe8\xfb\xed\x5d\x5f\x9c\x9a\x65\xcc\x71\xc1\xc3\x85\xe6\xf8\xdd\x28\x44\x06\x7d\x61\x47\x34\xaf\x3e\xa3\x6f\x95\x8a\xde\x9d\x77\xd7\x8d\x18\x50\x6e\x1d\x85\x4c\x6c\xe6\xd6\x95\x1d\x94\x7b\xb5\x1f\xb7\xae\xaf\x24\x33\x72\x1b\xe2\x08\xdd\x5b\xbe\x00\xf1\x4a\x2d\xb1\x6b\xf5\xfa\x1a\x6d\xed\x4a\x5e\xe5\xb2\x66\x01\x67\x0a\xbb\x93\xdb\xfa\xa5\xdd\xd0\xcd\xa7\x43\xa7\x23\x2e\xf5\xc1\x20\x48\x9d\xfa\x49\x9d\x4b\x52\x7c\x30\x38\xf5\x50\x73\x03\xc7\x9c\xba\xd4\xf6\x81\x1a\x37\xb6\x7a\x96\xa0\x3c\xf5\xeb\xc2\xb0\x83\xf0\x2a\xe7\x4a\xcf\x79\x4e\xb8\xf6\x69\xf5\xcb\xca\x35\x74\x59\x95\x85\x59\x0f\xda\x7d\xd8\x5a\x59\x84\xee\x42\x86\x0e\xc1\x42\xe2\x3c\x64\xe8\xa3\xb4\x95\xa8\x24\xfe\x68\xa7\x68\x80\xce\xd6\xce\xcd\x8b\xa4\x76\x68\xa1\xd7\xee\xbd\x17\x3a\x49\xfe\xdf\xf9\xe9\xdb\x58\x1e\x97\x64\x7e\x8f\xfe\x99\x3c\xfb\x9f\xf1\x6f\x77\xdf\x4c\x86\xdf\x3c\xb3\x3d\x72\x54\x8f\x35\xb5\xb5\xdb\x2b\xee\x08\x9f\xde\x84\xd6\xb9\x78\x9a\x16\xd8\x39\x2d\x47\xed\xf3\x13\x52\x28\x7e\x7f\xb4\x4e\x1a\xbe\x80\x1b\x6b\x92\x6c\xed\xf4\xae\x18\x4e\x3f\x48\x07\x5a\x73\xda\x27\xc9\xbb\xd5\xca\x4a\xcc\xf6\x74\x84\xc4\x36\x26\x8f\x73\x46\x42\xd1\xe6\x64\x1d\xb5\x92\x24\x49\x72\xb6\x27\xc3\x1a\xef\x05\x63\xdd\x9d\xa3\x60\x28\xdf\x0d\x03\x21\xa9\x8d\x1d\xd9\xb1\x4d\x5d\x71\x1c\x9a\xf6\x89\x58\x3d\xf2\x83\x64\x6b\x47\xf0\x43\x8b\xba\xf2\x97\x62\xfc\x46\x4a\xb2\x6e\xd7\x2b\x84\x6b\x41\xeb\x98\x1d\xe5\xcd\x49\x6b\x03\xee\xab\x9b\x7e\xed\xe9\xf7\x9a\xb0\x69\x99\xa5\x6c\x12\x18\x0f\x63\x75\x82\x23\xb2\xe7\xe1\xff\xf8\xf7\xdf\x99\xbc\x4a\x0a\xee\x59\x4b\xd2\x60\x1c\x20\x1f\x90\xbb\x28\x79\x98\x80\x53\xf4\x5e\xd0\x0f\x46\x01\xea\x07\x88\x7c\x9f\xec\xee\xec\x44\x0f\xf9\x30\x09\xe2\x38\xee\x07\xc3\xd0\xe2\x10\xef\xec\x44\xc3\xa0\xbf\xa0\x0c\xf7\x09\xc7\x8b\x22\x50\x63\x9c\x0f\x93\xa3\x10\x10\xe1\xc1\x89\x4e\xd7\x79\x98\x04\xfd\x49\x50\x89\xf9\x37\xdc\x45\x79\x34\x7a\xa4\xea\x5a\xea\x76\xeb\xfe\x20\xea\xfe\x5a\xb4\x9c\x26\x3b\x2f\xe8\x4b\xa2\x9b\x40\xeb\x4d\xa0\xb6\x09\xb4\xdd\x04\xe2\x6b\x82\x58\x44\xba\x05\xf2\xc8\x27\x63\x3a\xe9\xe5\xc3\xe4\x20\x4c\xa3\x61\x30\xea\x07\x43\xd1\xac\xd4\xd3\xac\xca\x69\x96\xdd\xaf\x0e\x9c\xfd\xea\x9f\xf2\x18\x00\x26\x5a\x4c\x28\x9b\xea\xad\x6b\x0c\x8c\x7b\x33\xaa\x5c\xde\x1f\x3b\x1a\x19\xe2\x75\x8d\xb9\x89\x5c\x9e\xf7\x58\x87\xcd\x00\x8b\xaa\xbb\x1b\x92\x61\xed\xb5\x62\xe5\x4c\xf0\x59\x35\x75\x3a\xae\x41\x78\xa8\x60\x04\xfe\xb0\xd0\x63\x3e\x81\xee\x7a\x53\xdf\x9c\x60\x17\xfd\xbd\x65\x32\xfd\xaa\x7b\xf3\xb3\x5b\xd4\xfb\x86\x82\x21\x49\x30\x14\xf1\xa3\xcf\xaa\x50\x2a\x01\x06\x03\x2b\x73\xd6\x3e\x00\xe8\x65\x9b\x8d\xfc\x11\x6a\xf3\xb3\x8f\x20\x70\xcd\x3d\x0f\x3b\xfa\x33\xe4\xf9\x57\x73\xd9\x8a\x97\xbf\x74\x58\xc9\xba\x1e\xa6\x19\x59\x10\x9e\x60\x15\xa6\xa5\xcc\xa7\x89\x74\x11\x8b\x0b\x4e\x19\x4e\x98\xfa\x41\x7e\xc7\xda\x57\x69\x41\xe0\x1e\x54\xfd\xba\x21\xdc\x3c\xab\x2c\xab\x95\xe2\x43\x2b\x15\xa8\xa0\x7d\x8f\x0c\x53\xc0\xc7\xd8\x5b\x3a\x6a\xbb\x51\xbe\xc3\xa2\x98\xe1\xd0\x29\x46\xeb\x04\x94\xdf\x90\xac\x94\x49\x21\x0f\x69\xdd\xa4\x50\x06\x05\x06\x2c\x20\x7f\x34\x13\xdb\x15\xdf\x9b\xf6\x6a\x0f\x31\xf1\x5c\x2f\xda\x65\x4b\x10\x8f\x97\x25\xbb\x6e\x3b\x7b\xc9\xa4\x0a\x0f\xbe\xdd\x8b\x6e\xbf\xe9\x1e\xad\xa4\x31\x8c\x96\x3d\x7e\x81\x41\xfc\x01\xfd\x8a\x7e\x42\xdf\x24\xf3\x30\x70\x04\x94\x40\x24\x73\x05\x96\x6f\x50\x87\x5c\xf3\x03\xea\x16\x85\x7e\xed\x96\x9f\x7e\xea\x54\x08\xde\x12\x7c\xb7\x4e\x21\xd8\x4a\xea\xa8\xc4\xff\xf9\xaf\x12\xb3\xfb\xcd\xd2\x76\xdf\xd2\xb6\x92\x82\x51\xf9\xe5\x8c\x14\xcb\x94\x4f\x6f\x3a\x6e\x7d\x6d\xae\x29\x5d\x2c\x69\x2e\xb2\x48\x9d\xc6\x23\xc9\x35\xca\x0c\xfe\xc8\x2d\xb8\xcc\xda\x1c\xf2\x09\xf4\xff\xe2\x71\x33\xfa\xa0\x40\xbf\x04\x13\x96\x0d\x8b\xd1\x19\x6f\x48\x36\x83\x82\x9e\x98\x51\xbc\xb8\x2c\x78\xca\xf1\xa7\xe4\x7b\x4a\x8e\x26\x34\xcf\xa3\xc3\x93\xf2\x67\x29\xe7\x6c\xc3\xf1\x57\xe4\x17\x69\x9e\x5e\x63\x0f\xe2\x5d\x3d\xaa\x2e\x9a\xa2\x39\x9a\xa1\x9b\xcf\xbd\x84\xe9\xcc\xf0\xcf\xff\x96\xb3\xfc\xc1\x0d\x1f\xb7\xe3\x37\x1a\xec\xf3\x58\x26\xaf\x1e\xa7\x78\x40\x0a\x41\x6b\xf6\x44\xca\x3a\xdb\xda\x12\xd2\xd9\xec\xb5\x98\x47\x3f\xc3\x7c\xdd\x88\x3e\xd8\xfd\x98\x4c\x6b\xa9\x93\xe2\x9c\x2c\x96\x19\x7e\x9d\x91\xe9\x87\x8d\xc9\xd7\x72\xad\xa5\x7f\x8d\xb9\xa8\xc3\x2b\x5a\xe6\xb3\x62\x63\xfa\xb5\x5c\x9b\xd0\x7f\x9d\x11\x70\xe8\x9c\xf2\x27\x17\xe2\x64\xdd\xb8\x25\x24\xbf\xb6\xd9\x3e\xa9\x55\x35\x0a\x8f\x95\x7b\x46\x29\xe4\x7c\x52\xdb\x4c\xa6\xc7\xa8\x9b\x89\xf2\x24\xf2\x36\xd7\x26\xbd\x76\xb4\xe9\xd2\x30\xbd\x74\xb4\x7e\x55\x5c\x63\x7e\x98\x01\x3e\xe9\x93\xd6\x45\x3d\xdb\x26\x35\x57\xc9\x9f\x5a\x7d\x95\x6d\x6d\x09\xc5\xa7\xb5\xa1\xd8\xbc\x0d\xc5\xa7\xb5\xa1\xd8\xbc\x0d\xc0\x46\x7d\x4a\x2b\x9a\x19\x1f\x2f\xe5\x53\x5a\xd2\xcc\xb8\xbe\x14\x6d\x82\x7d\xce\xef\x33\x7c\x80\x97\x0c\x4f\x01\x32\xf0\x04\x17\x45\x7a\x8d\x37\x2f\xf5\x11\x42\x6b\x6b\x01\xde\x76\x07\x0e\xc7\xb4\x51\xa1\xc6\x76\x62\x2d\xed\xd7\x9a\xbf\x3a\x56\xec\xd5\x46\xb4\xc9\x46\xb4\x2f\xf0\x47\x7e\xae\xd9\x88\x8d\xe8\xd2\x0d\xeb\xcc\xf0\x13\x66\x56\xba\x19\x51\xc1\xd2\x81\x39\xe4\xd3\xaa\x5c\x6c\x46\xdd\xec\x8d\x4f\xa3\x5e\x6e\x44\x5d\x10\x3e\x17\xbc\xe1\xd3\x88\x67\x1b\x13\x57\x0e\x0e\x1b\x51\x9d\x6e\x44\x55\x82\x03\x3e\xad\xbe\xf3\x8d\x28\x9f\xbc\xbf\xd8\x7f\x75\x7c\x78\xf9\xfa\xf0\xf8\x78\x43\xc2\xb3\xd8\xcd\xb4\x41\xbd\x4f\x14\xf7\xba\x19\xf9\x1b\xa7\xde\x8f\x88\x6a\x6d\x9e\x7a\xbd\xd4\x26\x05\xaf\x2f\x6e\xb1\xe4\x76\x47\x1d\xb2\x5f\xe2\xf4\x6a\x0f\xf5\x5a\x5f\x43\xb4\x2c\x37\x63\x37\x78\x76\xab\xb1\xf3\x34\xcb\xae\xd2\xe9\x87\x6d\xf1\x65\x5b\xc3\x8f\xfe\x2f\xb5\xde\x1b\xab\x00\x1a\x6e\x2d\x40\xa2\x50\x46\xed\xdd\x04\x2a\x7c\x9d\x34\xbb\x91\xa5\xda\xbf\x2d\x1c\x83\xa2\x24\x3d\x57\x65\xe4\x28\xa8\x6e\x33\x3e\x90\x0d\x63\x1e\x98\x34\xa3\x60\xe8\xe8\x8c\x9c\x90\x40\x39\xe0\xa0\x65\xe9\x3d\x2d\xd7\x11\xe2\x78\xb1\xcc\x52\x8e\x47\x86\x62\xf1\xac\x46\x52\x85\x52\xca\x25\xb4\xf3\x13\x7b\xbe\x43\xb8\xdd\x64\x7e\x6d\x8c\x38\xfb\x29\xa2\xf2\x4c\xb1\x02\x78\xb6\x3d\xc7\x29\x2f\x19\x6e\x4d\x68\x2d\x13\x7f\x95\x51\x4f\x93\x87\x02\xe7\x33\x6f\xdc\x99\x2f\x1d\x5e\x17\x14\x68\xca\x5d\x5c\xf9\x12\xaa\x5f\x63\x0c\x8e\x54\x54\x07\x83\xdd\x02\x0d\xbc\x7b\x7f\x96\x4b\xa0\xd1\x54\x69\xa8\x2b\x89\x7b\xd9\xf4\x41\x31\xb8\xae\xc5\x60\x50\xb8\xd8\xa6\x45\x0d\xbb\x58\xe2\xa0\x9e\x1f\xbe\x3d\xb8\xdc\x7f\x7d\x71\x74\xfa\x56\x61\xa4\x76\x28\x1c\x07\x03\x3e\x26\xb5\xad\x6d\x22\x5d\x41\x15\x42\x10\xe2\x55\x2f\x85\xd2\xe4\xe9\xe0\xb7\xb2\x6a\x60\xdf\x5a\xc0\x5a\x0f\xdc\x9b\x98\x23\x00\x9c\xd8\x72\xb3\xc1\xda\x6f\x66\x4b\xda\x5b\x69\x4f\x7f\xc7\xfa\x24\x6f\x0f\x1b\x71\x86\x2d\xff\x7e\x77\x2f\x97\xc3\x46\x93\xdd\x17\xf4\x65\x0e\x57\x1f\x64\x4c\xeb\xc3\x46\x27\x3d\x9f\xfd\xc9\x1e\xaf\x47\x41\x21\x91\x04\xb1\xab\x81\xfe\x86\x0f\x0a\xf9\x98\x37\x60\x8f\x49\x15\x55\x55\x25\x3d\xf4\x1a\xc0\xc9\x69\x0d\xcb\x67\xf3\x25\xed\x55\xa9\x3d\x29\xf6\xc2\xe3\x9a\xcd\xff\xad\xb8\x0c\x53\xc3\x36\xca\xf8\x03\x39\x84\x5c\x3c\xc0\xc5\xf4\x00\x4f\x29\x4b\x39\x65\x91\xd8\xa6\xf3\x39\xb9\x2e\x15\x17\xb2\x8b\x5c\x9e\x64\xb7\xd3\xff\xb5\x21\xb3\x6b\x5f\xa8\x2a\x42\xe9\x72\x89\x73\xa9\x2d\x6a\x86\x19\xad\xeb\x91\x3a\x82\x66\x74\x03\xfd\x6e\xa6\x48\xfd\x8f\x8d\x57\x54\xb7\x9d\x18\x4f\x00\x86\xb1\x15\x0a\xce\xe7\x02\x3b\x1a\x4b\xa3\x6b\x10\x30\x02\x64\x7f\xbc\x22\xa0\xf9\x11\x53\x8c\xe4\xa4\x11\x52\xc2\x18\x08\xf8\x2d\x09\x2a\x64\x69\x8e\x18\x6a\xd1\x1c\xb1\x4f\x1d\x96\xba\xfe\xfc\x53\x17\x93\xe6\x5e\xba\x8e\xc9\x8d\xcf\xbe\xaf\xe4\x91\xf9\xb0\xfb\xed\x28\x90\xe1\xad\xdf\xe2\xbb\x8c\xe4\x38\x40\xcf\xff\x32\x0a\xa6\x69\x3e\xc5\x59\x50\xa1\xb4\x39\xba\x2c\xbe\x80\x13\xa6\x26\xbd\xe8\xa2\x82\x00\x89\x8d\x9b\x5c\x95\xdc\x0e\xc1\x38\x48\x4b\x4e\xa7\xe9\x92\x70\x70\xa5\x09\x90\x7c\x41\x19\x93\x66\xe0\xe2\xd7\x9c\x4e\x4b\xd1\xb9\x33\xa3\x34\x0e\xe6\x94\x2d\x02\x14\x2c\xd2\x8f\x1a\x46\x2e\x58\x90\xdc\x3c\x03\x58\xda\x0d\xcd\x66\x70\x81\xc2\x70\x3a\xa3\x79\x76\x0f\x8f\xff\x2a\x09\x03\x12\x05\xce\x64\x20\x80\x03\xc2\xb0\xb6\x6d\x2f\x96\x38\xcb\xc0\x4e\x28\x10\xc7\xe5\x95\xba\x1b\x0a\x38\xe1\x99\xe0\x33\x1d\xc2\x12\xa3\x5e\xd7\x49\x6c\x25\xa6\x36\x2a\x52\xcc\x53\x27\xac\xbc\x42\xa3\x79\x18\x2c\xd3\x82\x63\x17\x32\xe6\x12\x2b\xc5\x8f\xe8\x4a\x0b\xa5\x66\x73\x4c\x4b\xfe\xa4\xf4\x24\x5f\x6e\x94\xa3\x42\x57\xe5\xd5\x55\x86\x0b\x88\x9b\x22\xe6\xee\x92\x61\xfe\x13\xbe\x97\x68\x4a\x1e\x23\x35\x3a\xc6\xf1\x07\x7c\xff\x9a\xce\x24\xd7\xb2\x86\x7a\x18\x21\xee\x5a\xea\x8e\xf9\x04\xac\x26\xfd\xa9\x47\x75\xe7\x53\x37\xcc\x51\x00\x53\x4c\x36\x27\x56\x99\x15\xf7\x51\xa1\x69\x3b\xde\xd6\xba\x3a\x01\xa2\xa9\x3b\xeb\x6b\x39\x8b\x30\xc0\xa2\x17\x54\xd7\xe1\x08\x15\xa1\x5a\x24\xdb\xb9\x5e\x25\xdc\x44\xc5\x87\xa5\xd2\x22\x50\x4c\xd3\x25\xde\x5e\x32\x5c\x14\x4e\x62\x98\xe6\x47\x79\x33\x35\xbc\xde\x26\x79\x33\xe5\x69\xc9\x9f\xd0\x26\x64\x28\x51\x33\xee\x82\xd4\x07\x7c\xff\x4e\xd4\xa3\x59\xea\x07\x7c\xdf\xaa\xe0\x07\x7c\xff\x7e\xd9\x2e\xb3\x3d\x2b\x54\x79\x82\x86\x10\xe2\x5c\x02\x07\xf4\xae\xd5\x42\x91\x6e\x46\xef\x9c\x16\xba\x91\x39\x0a\xd7\x9e\x8a\x3a\x51\x65\x58\x8b\x13\x34\x1f\x70\x84\xd2\x7a\x4a\x39\x41\x80\x4b\x26\x2e\x6b\x3b\x18\xb4\xec\x9f\x69\xf4\xc0\x3a\xf8\x35\xda\xe0\xd7\xc6\x29\xca\x27\x95\x44\xe6\xf1\x70\x83\x74\x30\xa0\x61\x2a\x98\x73\x3a\x18\x6c\xd5\xea\xa3\x56\x55\x10\x0d\x06\x79\x5c\x70\xba\x14\x1b\x75\x7a\x9d\xca\xf9\xed\x84\x0f\x49\x37\x3f\x96\x7c\x97\xa0\xff\xb9\x01\x45\x2f\x39\x4b\xf3\x82\x88\x52\x2f\xa8\x67\x1f\x91\xf3\x79\x5a\x32\x86\x73\x0e\xea\x3b\xc4\x3c\x2f\xb5\x9d\xa1\x78\x06\x41\xc9\xf9\x9d\x60\x04\xce\xaa\xf8\x23\x31\x7f\x95\x87\x3a\x8b\x61\x19\x0f\x06\xea\xc1\xb0\x77\x9f\x26\x38\xd7\xef\x91\xbf\xba\xd8\x7c\xc5\xe8\x5d\x81\xd9\xf6\x63\x91\x5f\x3e\xc7\x12\xa1\x69\xe0\xf0\x04\x51\xdc\xe3\xea\x6d\x96\x73\xd9\x30\xf7\xfd\x32\xd3\x2b\x4b\xba\x39\xcb\x16\xd7\x11\x4c\x50\x8e\x53\x86\x0b\x7e\x3a\x87\xa0\x41\x7e\xe9\x5e\x62\x04\xa5\x4c\xdd\xb7\xa0\x3c\xa9\x39\xf0\x29\xf9\xcc\xda\x07\x72\xc7\x0d\x54\x79\x14\x72\xd7\x18\xd9\xf7\xbd\x86\xd5\x57\xbd\xe0\x2f\x94\xef\x81\xf5\xb4\xe1\x3d\x21\x49\xdb\x6a\x54\x95\xae\xfc\x2f\x84\xdf\x78\x23\x01\x76\x36\x41\xd3\xc7\xe0\x92\xb6\xa6\x04\x86\x19\xce\x67\x6e\x40\xc8\x46\xb8\x29\x77\x05\xc6\x3a\xb5\x46\x77\x50\x67\x90\x84\x91\xfd\x62\x32\x99\x2c\x59\x96\x84\xdd\x8b\xc9\xa6\x64\xe6\xdb\x4d\x8c\x9a\x2c\x21\xf1\x4d\x5a\x1c\x9c\x9e\x78\x36\x7e\xbc\x37\xa3\x53\xe0\xc5\x62\x98\xfb\xe7\xc0\x21\x52\x16\xe2\x68\xa4\x6c\xb0\x4c\xf1\xba\xa8\x06\x94\xa0\x7c\xdd\x55\x79\x93\xc9\x94\x73\x45\x67\xf7\xb6\xc7\x8e\x66\x92\x73\xbc\x23\x59\x76\x04\x3c\x85\x6a\xe2\xa8\x44\x33\x32\x6b\xbe\x82\xa8\x26\x19\x4e\xd9\x99\x1c\xac\xd2\x17\x41\x7d\x43\xae\xb3\x3e\xa2\x3a\x82\xba\x1a\x50\x07\xa0\xb0\x56\xa1\xd6\x3b\x3b\x89\x2c\xd7\x56\x22\x9e\x82\x8f\xc4\x67\x71\xc5\xa6\x87\x56\xab\x20\xd0\x20\xdd\x8a\xf0\x6a\x15\xd6\xd3\xa8\xa3\xbf\x06\x8b\x12\x55\x48\xc2\xe7\x02\x8b\xb2\x2e\x94\x5a\xad\x27\x9c\x3c\x06\xb7\x38\xaa\xaa\x5e\x11\xff\xbf\xff\x7e\x7f\x78\xf6\xeb\xe5\xd1\xdb\x8b\xc3\x1f\xce\xf6\x25\x2f\x11\x66\xf1\x37\xde\xe0\x13\xaa\x6a\xc6\xb5\x6e\x0f\x60\x22\xa5\x51\x8b\x06\xd9\x37\x89\x46\xb5\x8f\xb5\x4f\x2a\x22\xd4\xb4\xa9\x1d\xaa\xa9\xda\xa7\x1b\x9c\x5b\x7e\x73\x23\xe7\xe4\xaa\x6d\xed\x5d\x9b\x39\x0f\xa3\x87\xcf\xd9\xc1\x39\x84\x95\xd5\xa1\xdc\x24\xb3\x55\x24\x0f\xd5\xe6\x0d\x68\xdb\xcb\xad\x3f\x7c\x1f\xc7\x79\x7e\x2c\x44\xe0\x46\xa2\x7c\xb3\xca\x5f\xde\xa6\xb0\x39\x72\x9b\xd3\xbf\x54\x7d\x66\x6f\xd9\x3f\x89\x77\x78\x22\x3f\xa0\xcd\xd5\xbe\x0a\x77\x39\x4b\x1e\x16\xb4\x2c\x30\xb0\x72\xa3\x00\x9e\xe9\xad\xe8\x16\x78\xcc\x70\x7a\x8b\xf5\xeb\x92\x07\x15\xba\x49\x68\xf3\x36\x07\x4b\x81\x56\x6a\xf1\x34\x6c\x18\xa7\xe5\xf4\xa6\xe0\x29\xe3\xa3\x00\x9e\xcf\xc5\x73\x80\xe0\x79\x41\x05\x55\x78\x3c\xa1\xb7\x58\xbd\x15\xfb\xbf\x7c\x79\x98\xcf\xd4\x3b\x25\x07\xca\xd7\xaf\xa5\xfe\x44\x48\x43\x42\xea\x19\x05\x4a\x2c\x82\x37\xe5\x12\x7e\xbf\x5f\xc2\x2f\x90\xc0\xe0\xc5\x3b\x29\x8b\x41\x13\x64\x2e\x78\x94\xf9\xe0\x51\xe4\x84\x07\x91\x57\x05\x59\x5b\xe0\xbc\x1c\x05\xea\xc7\x09\xce\xcb\x00\x4d\x33\x32\xfd\x30\x0a\xa6\xd2\x7c\x6d\x76\x95\xa9\x17\x33\x5a\x5e\x19\xab\x36\x90\x14\x49\x3e\x0a\x94\x4c\xaa\xde\xd0\x92\xab\x57\xa7\x42\x88\x2c\xca\xab\x05\xe1\xa3\x40\xfe\x0d\x10\xe8\x14\x46\x5a\xb5\xa0\xc4\xee\x60\xaa\xc3\x6a\xb1\xf4\x5a\xf5\xa4\x78\x54\x1d\x29\x1e\xe5\x0b\xf9\xac\x46\x50\x3c\x1e\x4a\x39\x5b\x3c\xaa\x01\x14\x8f\xc7\xe2\x51\xbe\x15\x23\x2c\x5f\x9e\xde\xca\x94\x74\x29\x7e\xd3\xa5\xa6\x35\xd3\x94\x66\x41\x85\xe6\xf1\xc9\xe9\xfb\xf3\xc3\xcb\xc3\xb7\x17\x87\x67\x97\xc7\x87\xfb\x3f\x1f\x5e\x9e\x9c\xfe\x7c\x78\x79\xf8\xf3\xe1\xdb\x8b\xf3\xbd\xf6\x14\x52\x35\x68\xcd\x21\x55\x07\x78\x96\x93\x00\x1e\x61\x12\x54\xa3\x87\x2a\x42\x8c\x52\x73\x50\x07\xe2\x90\x0f\xd6\x1d\x7c\x26\xc0\x01\xcc\xc1\x1f\x25\xca\x7b\xd1\xf0\x99\x87\x0b\x55\x40\xdc\x29\x97\x8d\xe3\xcb\x0d\x1c\x04\x71\x5a\xa5\x18\x9e\xd4\xe7\x72\x25\x11\x77\x9c\x8b\x14\x39\xe5\x21\x7e\x53\x4f\xfa\x20\xc8\x28\x2c\xc4\x55\xad\x38\x4d\x09\x10\x57\x88\x6a\x52\xbc\xae\x11\x73\xd3\xc9\xdb\xa8\xb9\xe7\x8c\x5c\xad\x8a\x86\x2d\x67\x14\x52\xe3\xfb\x6e\xb0\x55\xd3\xbd\x74\xd4\xc1\x8c\xa5\x51\x24\x91\xfa\x8e\x49\x01\x11\xce\x43\x05\x34\x23\xb8\x07\xa2\x36\x34\xeb\x7e\x2f\x51\x75\x0b\x73\x9c\x8a\xec\xe9\x6c\x06\xf6\x2c\xde\x9c\x68\x8b\xc6\xa4\x08\x83\xd8\xf3\x2d\xb2\x71\x8c\x85\xe0\x00\x20\x20\x61\xf0\x3e\x17\x0d\xe9\x73\xda\x4f\x67\xb3\xfe\x1f\x5a\xf9\xfe\xd0\x87\xfa\x8a\x04\xa2\x93\xfa\xea\x30\xef\x87\xc1\x10\xe2\x0d\xca\x86\xad\x56\x74\xbc\x33\xd1\x3c\x4d\x34\x0c\xa2\xb8\x7f\x92\x7e\xc0\xfd\xa2\x64\xb8\x7f\x4f\xcb\x7e\x81\x79\xdf\xe9\x65\x41\x8f\xdf\xe0\xbe\x98\x5e\x7d\xca\xfa\x69\x6e\x28\x0b\xf6\x5e\x7d\x89\x83\xc8\xf8\xf7\x94\xe2\x43\x1e\x81\xff\x93\xe3\xf3\x12\x96\x1a\xbb\x14\x26\x97\x9a\x7f\x21\x45\x25\xca\xc7\xe5\x44\x4f\x3a\xf5\xde\xe7\x55\x64\xbc\x5d\x9e\x30\xec\x6a\xd6\xfa\x66\x32\xf0\x3f\x75\xcb\xc3\x08\x9c\xb1\x92\xad\x1d\xe3\x4f\x03\xe0\x29\x79\x8d\x41\x63\xe0\xc9\x40\x2a\x44\xbc\x64\xc1\xd3\x62\x5f\x4b\x83\x61\x30\x4b\x79\xba\xad\x46\x4b\xdf\x36\x92\xc4\xd8\x14\xb5\x39\x93\x71\x0e\x1a\x4d\x60\x40\x8d\x42\x0a\xc7\x46\xc0\x2c\x50\x9a\x50\x75\xa9\xd8\x23\xe0\x8c\xac\x7a\x5e\x61\x72\x02\x08\xe7\x83\x14\x58\x69\x4c\x38\x5e\x84\x45\xd4\xdb\x49\x92\x24\x03\xe7\x39\xeb\xf9\xda\xaa\xdb\x76\x20\xd1\x69\x88\x46\xc6\x5c\x57\xcf\x4c\x2a\x3f\x27\x51\x54\x55\x64\x1e\x12\x2b\x13\x4e\x93\xad\x1d\x34\x4f\x76\x5e\xcc\xad\x6b\xd7\xdc\x42\x77\x92\xf1\x7c\xd2\x9b\x0d\x06\x33\x89\x6e\x0f\xae\xcd\x32\x54\xfd\x34\x99\xa9\xbe\x66\x80\x06\x31\x35\x0e\x5a\x53\x79\x63\xfc\xc8\xf6\x3a\x18\x98\x8b\xd9\xd9\x98\x6b\x8c\x6c\x78\x46\x37\x09\x47\x4d\x34\x0a\xa9\x34\x32\x7b\x80\xdc\x04\xe5\x30\x07\x27\xb0\x39\xdf\xca\x9d\xc6\xda\x58\xe7\x84\xdb\x2f\x21\x46\x5b\xbb\xe2\x1f\x8f\x05\x27\x83\x00\xe5\x27\x25\x19\xe2\x71\x31\x65\x18\xe7\x7f\x37\x4f\xbf\x22\x1e\x4f\xc1\xb6\xf8\xef\xe6\x09\xde\x71\x96\xfd\x84\xef\x11\x8f\xd3\x8c\xcb\x87\xe2\x86\xcc\xd5\xa3\xe0\x06\xe5\xd3\x55\xc9\x39\xcd\x81\x95\xcd\x04\x3f\x24\x2f\x41\xba\xac\xa4\x98\xb9\x87\xd7\x7c\x0d\xd7\xe1\x5c\x6b\xd6\x52\x10\xc5\x1b\x2d\x12\xcf\xc9\x30\xa6\xf5\x88\x85\x56\xe0\xc7\x9a\x14\x4b\x70\xbd\x3a\x2f\xf8\x60\x00\x01\xa6\xe2\x9c\xce\xb0\xd8\xbd\x54\x6c\x25\x31\xbe\xab\x15\x93\xc0\x6e\x5b\xe1\x0e\x9a\xc6\x0a\x8d\xb0\x88\x42\xb1\xc0\xa3\x17\x91\x77\x41\xf2\x68\x2f\x0f\x39\x5a\x86\x37\x08\x47\xd1\x88\x8b\x5d\x65\xfd\xea\x1a\x0c\x88\xcd\x80\xac\xd6\xe1\x2d\x9d\xe1\xaa\x87\xc5\xbe\x0c\x63\xa7\xa1\x40\x42\x8a\x16\x52\xb9\x0a\xd3\xe1\xd6\xdb\x17\x7c\xe2\x81\x9b\xd1\xfd\xd0\x9b\x51\xb1\x3f\x75\xd4\x5f\x62\x9e\x88\x5e\xc9\x01\x05\x5b\xc6\xd2\x04\xf2\x07\x2a\x48\x3d\x60\xe3\x34\xd5\xb3\xd6\xd5\x76\x4b\xba\xd5\x4a\xfe\xee\x15\xe8\x74\xa5\x6b\x6d\xa5\xcf\x1f\x2f\x48\x85\xdb\x53\x83\xc1\x46\x3d\x07\xd5\x24\xb2\x9a\xd2\x79\xb7\xd1\x7f\xd2\xef\xb0\x35\xca\x91\xb7\x63\x39\xba\x8d\x2a\x59\x47\x1c\xd3\x3c\xe4\x43\x75\xde\x05\x48\x1f\x7c\xd2\xdd\x27\x6c\xf7\xad\xbf\x33\x41\xab\x9a\x3b\x1b\x34\x87\xc8\xc8\xbc\xb1\x41\x87\x3b\xc8\xd8\x55\x02\xc0\x7d\x84\xe4\xc5\x6b\xb3\x16\xe3\x56\x2f\x4c\xbc\xb5\xc1\xb1\x92\xd7\xe5\x34\x77\x37\xe3\x5c\xec\xc0\x80\x91\x5a\x2b\xd2\x6c\xca\xd2\x49\x97\xd7\x9c\x74\x95\x29\x8e\xdc\x9b\x09\xf0\x31\x00\x76\x24\x91\x53\xe3\x2c\x2d\xf8\xd1\x9a\x3d\x1a\xed\x44\xda\x48\x67\xdd\xfe\x4c\xd5\xfe\xdc\x83\x18\x31\x8d\xad\x16\xe2\xc0\xd9\x80\x2d\xa9\xd8\xf7\x53\xb3\xf7\xe2\x08\xe5\x12\x8e\x22\x85\x88\x4f\x51\x54\xf9\xd4\x3e\x80\x15\x28\x6d\x67\xd6\x73\x69\xd8\x99\x2b\x7b\xbc\x8b\xe9\xd2\x6b\x65\xc3\xb3\xbd\x8e\x7d\xd5\x5e\xb4\x11\x56\xc8\xb1\xf5\x59\xc9\x7c\x6c\xf0\x98\x4d\x24\x37\x57\x63\xe3\x78\x14\xd3\xf9\x3c\xb4\xf3\xe5\x8f\x7f\x74\x50\x75\x1d\x06\x51\x96\xe3\xe7\xf4\x1e\x37\x21\xa8\x90\xf6\x9e\x6d\xeb\xf4\x82\xb0\x61\x79\x1e\x05\xf5\xfb\x83\x9b\xcd\xd5\x18\x5a\xf2\xff\xbc\x40\xef\x6b\xaf\x05\x36\x94\xd7\x1b\xf2\xb9\x44\xc9\xfc\x04\x29\xbd\x3e\x23\x12\xfd\x42\x49\xed\x26\x41\x42\x94\xb5\xc1\x56\xee\x9d\x5a\x5b\x72\x37\x3b\x7c\xfb\x73\x7c\xd9\xfe\xde\x6b\x95\x43\x91\x8f\xce\x60\xc0\x8c\xda\x37\xb4\x45\x27\x36\x1a\x39\x59\x40\xb7\xab\x4f\x68\x8b\x0e\x06\x64\x8f\xc8\xa5\x29\xb6\x4f\xd1\xe8\xe6\x6f\xb9\x03\x5c\xb0\x34\x2f\xe6\x98\x05\xd1\x68\x1c\x18\x21\x37\x40\x4a\xa8\x0d\x8c\x54\xab\x9e\x33\x29\x3c\x06\x5a\x82\x85\x47\x88\x1e\xa6\x64\xd6\x60\xe2\xc1\x73\xc1\xd1\x83\x2e\x7d\x4e\x3e\xfe\x48\xe9\x87\x62\x8c\x27\xc9\xc3\x92\xd1\x65\x21\x0a\x76\x6b\x32\x11\xdb\xc2\xc8\x6d\x68\xa3\xd7\x6d\x77\x25\x5b\x3b\xd1\x26\x56\xd7\x8f\x6a\x90\x3c\x33\xb7\x5b\x93\xf6\xd8\x44\x7e\xaa\xaa\xe9\xcb\x29\x95\x7c\x08\x4d\x4f\x50\x47\xaa\x8a\x3f\x49\x07\xb9\xae\xdd\x5e\x3c\xe5\x2e\x6d\xac\x1b\xbd\x3a\xd8\x02\xb8\x0f\x29\x4c\x0e\x06\xd8\x2a\xc7\xf7\x9c\x67\xa9\xed\x32\x8a\xf2\x4f\x83\x0e\xac\xf9\x36\x7a\x79\x31\xcd\x35\xaf\x56\x58\xb3\xcd\xe2\x51\x72\xd5\xe2\x49\x73\xda\x82\x6b\xbd\xbb\x21\xd3\x9b\xef\x77\x35\xd6\x96\x60\x4a\x01\xa3\xef\x31\x1f\x21\xcf\xd0\xfd\x41\xdd\xf8\xf5\x0b\x91\xa5\x6f\x59\x83\xfe\x22\xbd\xef\x93\x9c\x33\x3a\x2b\xa7\xb8\x3f\x65\xb4\x28\xb6\x0b\xc2\x71\x5f\xa2\x3f\x88\x3c\xb7\x65\x96\x0b\x66\x9c\x64\x84\x13\x5c\xbc\xe8\x2f\x33\x9c\x0a\x7e\x29\x07\x81\x9c\xdf\xa4\xbc\x0f\xfd\x50\xf4\xaf\xb0\xc8\x70\x45\xcb\x7c\xd6\x4f\x19\xee\x2f\xa1\xdf\xb2\xfb\xbe\xb4\xf4\x98\xc5\xfd\x37\x94\x29\x1c\x8f\x7c\x4e\xd9\x02\xea\x8d\xfa\x24\x9f\x66\x25\x54\xf0\x86\xde\x09\x71\x5e\x59\x13\xc1\x91\xd9\xbf\x4b\x59\x4e\xf2\x6b\xd4\x2f\x30\xee\xdf\x70\xbe\x2c\x46\xcf\x9e\xc1\xc4\xf8\x67\x11\x4f\xe9\xe2\x99\xb3\xfe\x8a\x67\xb7\xbb\xf1\xc7\x67\xff\x87\xd3\xe9\xe5\x95\x6c\xf4\x36\x34\x7a\xdb\x36\x3a\xee\x9f\xcb\x6e\x98\xcf\xf1\x94\xe3\xd9\xa8\x1f\xfc\x61\x88\x87\x7f\x08\xfe\xa0\x10\xe7\x8c\x03\xa4\x77\x10\x95\x7d\x79\x50\xf7\x41\x18\x2d\x52\x22\x8e\x52\x96\x58\x28\xbb\x7a\xa0\x3b\xff\x66\xa6\x54\x56\x63\x3c\xe9\x29\x21\x24\x77\xae\x20\xc5\x7e\x0d\x3c\x4e\x0e\x7b\x13\x53\x15\x94\x6e\x8e\x49\x2e\x7f\x39\xfc\xa7\x6f\xd9\x12\x85\xab\xb0\x5a\xc9\x70\xf1\xb8\xe1\x69\xe8\xcb\x43\x5b\x79\x8a\xae\x72\x00\x31\xb1\x06\xb1\x57\x74\x91\x17\x49\x69\x2d\x69\xd3\x97\xaf\x7e\x67\x64\x63\x22\x99\xb4\x5d\xf5\xa6\xf5\xb4\x35\x93\xd5\xd6\x28\x32\x63\x12\x63\xe2\x4b\xad\x1f\x55\x3d\xa0\xa5\x84\x09\x43\x32\xe2\x9e\x53\x42\x81\x70\xcd\xe2\xd5\x2b\xc3\x6b\xb8\xcc\x9e\x31\xf1\x66\x83\x41\xc8\x12\x80\xe0\xe9\x81\xc9\xac\xbc\xf1\x96\xab\x3c\x13\x2c\xa7\x53\x46\x69\x47\x4e\xba\x37\x27\x99\x7d\x73\x06\xf1\x9a\xa7\xf6\x85\xe3\x9c\xec\x1b\xe0\xa9\x68\xb3\xe8\x25\x9b\x2c\x8c\xaa\x46\x09\x35\x57\xe3\x75\x54\xda\xa9\x25\xb1\x05\xf0\x83\x1d\xf6\xf2\x73\x05\x54\xa6\xa7\x82\x92\xb5\xdb\x60\x9c\x16\xc9\xdb\x0a\xe4\x96\xc1\x55\x6f\x42\x6e\x60\x4e\x1d\x61\x50\x06\xa4\x92\xdd\xcc\x9c\xf7\xd1\x8b\x26\x00\xad\x91\xd7\x24\xa8\x21\xce\x4e\x54\xdd\x6b\xd0\x7d\x2e\x46\x1a\x6d\x61\xce\xa4\x7e\xac\xb1\xc2\xee\x1e\xe2\xfb\x39\x36\xb7\xf0\x16\x26\x15\xf1\xca\xb1\x0c\x71\x26\xcd\x78\x82\x72\x3b\x73\x6a\xd0\x6a\x3a\xe6\xe6\x63\xfb\xca\x56\xbe\x5a\xe5\xb1\x1b\xed\xa8\xf6\x1b\xcf\x56\xab\xc6\x2e\x63\xaa\x92\xb9\xc7\x7f\xcd\xe6\x40\x4e\xc1\x1a\xbe\xd0\xd4\xb6\x33\x93\x11\x09\x1b\x5a\xab\x33\x69\xeb\xd8\x73\xdd\x85\xe1\xfa\xe3\x15\x9e\x53\x86\x43\xc1\xd2\xb1\x42\x0e\x10\x92\xee\xca\xf9\x6c\x7f\x0e\x56\x49\x20\x71\xaa\x2f\xe0\x18\x30\x4f\x1c\x9c\x30\xa3\x2f\x57\x7b\xc3\x9e\xfa\xeb\xa0\xff\xa8\xb9\xb8\x5a\x75\x7e\x3a\x37\x0a\x68\x4f\x12\xfa\xfb\xc9\x06\xa9\x8a\x0d\x12\xd1\x0d\xd2\xdc\xe1\xab\x0f\x84\x37\x12\xaa\x10\x4b\x3d\x77\x76\xce\x37\x60\xc9\x5a\xd0\x25\x9b\x39\x93\x6d\x82\x87\x22\xad\xcd\xfe\x8d\x7e\x0f\x8d\xc0\x06\xfa\xd2\x92\xc7\x20\x82\xe2\x19\xe2\xb1\xd4\x2d\x28\xa9\x19\x3d\x90\x42\xec\x67\xa3\xad\x1d\xa4\x6c\xe3\x46\x06\x5c\xbe\x75\x15\x65\xac\x74\x1f\x37\x13\x91\x76\x75\xc1\x92\x61\x69\x74\x12\x78\xcc\x47\x6a\x26\x79\xb1\x49\x8a\xb6\x6a\x26\x34\xce\x5d\x8a\xba\x47\x79\x9d\xe6\x39\xe5\xca\xc6\x8a\x93\x94\xe3\x7e\xda\x37\xee\x6e\xfd\x3b\xc2\x6f\x68\xc9\xfb\x69\xdf\x2c\xc8\xfe\xbb\x36\x4f\x76\x4f\x4b\x60\xc2\x60\xed\x09\xde\x4a\x46\xbf\x1c\x06\x40\xa0\x9f\x2a\xee\xac\x6f\x42\xae\x3c\xd3\xa7\x5e\x1c\x44\x95\x63\xc2\xa2\xed\x55\x04\xd7\xb9\x00\x95\x20\x4f\x49\x56\xb7\x94\x35\x7b\x84\xc4\xea\x53\x66\x29\x06\x91\xce\xee\xef\x10\xd1\x41\x75\x4c\x2b\xd2\x03\xc2\xa0\xa3\x96\x61\xcc\x70\x85\x94\xf1\xe9\xa6\x5e\x67\xcc\xef\x75\x96\x27\xbb\x2f\xf2\x97\x1c\xa0\x75\xd9\x38\xaf\xbb\x2f\xe5\x93\xde\xa3\x43\xae\x36\x7f\xb0\xcc\x96\xb6\xdc\x1e\x65\x26\x89\x0c\xbf\xe5\x10\x61\x60\x6e\xe3\xeb\xab\x8e\xb8\xa5\x63\x3c\x51\x01\x45\xd5\x95\xa8\xb4\x02\xce\xdd\xa0\x8e\xa1\x9a\xd4\x2a\xd8\x2c\x2c\x19\x7d\x40\xb9\xf1\x12\x36\xde\x1b\xd4\x32\xde\x18\xfa\xc9\xcd\xf5\x6c\xc9\xf0\x25\x53\x6b\x60\xf3\x5c\x37\x69\xa1\x6d\xb4\x9f\x92\x8d\xe4\x97\x33\xba\x78\x4a\x8e\x99\x8d\xf1\xf7\xef\x74\x1a\xa9\xfb\x00\x3d\x98\xc5\x3f\xe2\xce\xee\x73\x70\x7a\x32\x32\xf8\x0b\x62\x9e\xe8\xab\x72\xbb\x45\xd9\xea\x8f\x2c\x9a\x42\x2d\x54\xd4\x13\x47\xf9\x99\xca\xe8\x1d\x6d\x19\xc4\xe1\xdf\x63\x07\xfd\xe0\xf5\x1f\x8b\x1e\xec\x76\x68\xba\x2a\x0c\x7e\xa5\x65\x7f\x9a\xe6\x7f\xe0\x7d\x51\x15\x27\x67\x9f\x96\xbc\x20\x33\xdc\x87\xf5\x83\xd5\x96\x28\xb6\x3b\x15\xd7\x2a\xe8\x32\x78\x73\x30\x71\xbd\x76\x9e\x5e\x75\x72\xe5\x44\x5c\x50\x63\xcb\x9e\xea\x3c\xd5\x35\x3d\x37\x0c\xc5\x20\xc7\xe8\x49\x2b\x40\x0e\xf8\xbf\x2f\x3c\x8c\x8e\x10\xa4\xed\x2d\xec\x1c\x7f\x7c\xd0\x99\x6f\xd0\x85\xa4\x50\x1f\xf5\xbc\x9f\xf6\x45\x2b\x95\xce\x61\x66\xa2\x85\x46\xfe\xd1\xdc\xa4\x00\x9d\x6f\x2d\xf5\x2a\x42\xcd\xd5\x4d\x3e\x6b\x3d\xd6\x76\xc2\xcd\xa6\xc0\x13\x16\xb9\xce\xc2\xca\x3c\xa3\xd4\xc1\xc5\xb3\xe7\xb9\x54\x5c\xfe\x3b\x37\xc7\xe6\xfc\xb0\xdb\xdd\x43\x7b\xec\x70\xf4\xe0\x88\x1e\xc6\xc6\x1a\xfb\xee\x7b\x9a\x69\xe1\xca\x03\xaf\x31\x79\x15\xac\xaa\xda\x06\xb0\x0a\xf0\x00\x1e\x34\x24\x9e\x67\xe9\xf5\x35\x9e\x1d\x99\x6e\x8a\xc2\x00\xba\x5d\x5e\x71\xc5\xc1\x90\x23\x69\x2b\x37\x62\x48\xf4\xfd\x08\x57\xa8\x8d\xe5\x0d\xb1\xb3\xfe\x49\x49\x1e\x85\x18\xc2\x29\x00\x47\x23\x81\x5d\x23\x69\xac\xdd\x98\x4d\xd4\x9d\x4d\x9b\x78\xbd\x78\x0f\xc8\x27\xb9\x5e\x7c\x89\x5d\xc6\x9d\xc6\xff\xe6\xb9\x54\xb3\xed\x22\x76\x2e\x49\x13\xb6\xce\xc9\x21\x2f\x23\xa5\xc6\xe8\x23\xe1\x5d\x09\xcb\xdc\x4d\xfa\xc5\x07\xcc\x65\x9f\x3e\x89\xff\x6a\x2d\x75\x3b\x9a\xff\x2e\xb9\xac\x39\x06\xdc\x46\x57\x23\x8d\xce\xca\xa3\x6e\x0e\xd5\xb9\x94\x7c\x76\x9d\xd1\xab\x34\x2b\xb6\x19\x2e\x68\x76\xdb\xec\x9c\xc7\x22\xaa\x7d\xaa\x6b\x91\x09\x0f\xf5\x34\xb1\xf8\x3a\x23\x8b\x85\xcb\xff\x3e\xd9\x26\xd8\x73\xdb\x98\x7d\xfe\xf0\xa0\x32\xfe\xe1\xf8\xf4\xd5\xfe\xf1\xf9\xe5\xd9\xe1\xf9\xe9\xf1\xcf\x87\x67\x83\x41\x98\x7d\xa5\x18\xb3\x88\x28\x3d\x4f\xe2\x75\xf5\x91\xdf\x6c\x74\x41\xc4\xa3\x4a\xa9\xcd\x3c\x61\x69\xd3\x56\x58\x5a\x29\x14\x2d\x53\x56\x40\x9c\x55\x09\xa8\x0b\x33\xaf\x05\xb7\x53\xa1\x34\xce\x29\x5b\x80\x2b\xb5\xff\x26\x66\x99\x11\x1e\x06\x23\xd0\xd8\xf3\xf1\xce\x04\xe5\x09\x1f\xef\x6a\xd5\xbd\x41\x99\x09\xb6\x92\x84\xed\xb1\x61\x30\x0a\x86\x42\x06\x03\xbf\xe7\xf0\x59\xf8\x5b\xbc\xba\x5c\x6d\x47\xf1\xb3\xeb\xfa\xf5\x9b\x6d\xed\x4d\xca\xf6\x79\xb8\x1b\xc5\x9c\xbe\x5f\x2e\x31\x7b\x9d\x16\x38\x14\x7b\xbe\x38\x27\xd2\x58\xcd\xeb\x76\xe5\xb4\x73\x9f\x69\x28\x58\x3a\x24\x4c\xe7\x90\x91\x95\xc5\x07\x37\x42\xc0\x38\x9f\x98\xb0\xf3\xe3\x7c\x12\x32\x69\x57\xa4\x44\x49\x95\xf5\x94\xdf\x60\x16\x32\xe8\x1e\x43\xbe\x13\xb2\xb9\xd1\xd5\x20\x98\x86\x1d\x5f\x92\xc6\x7b\x08\x3f\x81\x52\xe7\xcd\x86\xa3\x40\x60\x14\x50\x9a\x10\x54\x98\x68\xbf\x6e\x48\x61\x19\x0b\x3a\x42\x65\x92\xd6\x8d\x50\x9e\x05\x11\xca\x12\xb0\x51\x29\xf7\xd2\xb8\xc8\xc8\x14\x87\x3b\xa8\x8c\x40\x7d\x01\x42\x7b\x6d\x50\x07\x03\x99\x56\xd6\x66\x9a\xa4\xba\x36\xcf\x82\xa8\x97\x26\xd3\xf1\xd4\x60\xb7\x4b\x60\x9a\x79\x02\x91\xb0\xad\x8f\x7e\x14\x4e\x4d\x31\xdb\xbb\x11\x9c\xf2\x61\x10\x07\x51\xd4\x53\x75\xaf\x85\xce\x8d\xc2\x79\xa4\xa2\xa6\x04\x70\xad\x20\x01\xf0\x4f\xc4\xa3\x8c\xed\x0d\xc6\x1a\x64\x7e\x1f\x09\x99\x02\x60\x6c\x56\xab\x2d\xe6\xb7\xb5\x3d\xca\x6f\xd3\x8c\xcc\xfa\x3a\xb0\xe5\xa8\xff\x0f\x08\x7a\xf5\x0f\xd4\x5f\x94\x05\xef\x5f\x19\x89\x68\x4e\xd9\xa2\xff\x0f\xb1\xb6\x46\xa2\x03\xff\xd1\x37\xf7\x19\x0f\x26\x33\x46\xf0\x9d\x21\xfd\xe6\x17\xa9\x63\x02\xaf\x40\x82\x66\x84\x89\xac\xa3\x0c\xc1\x9f\x14\xcc\xba\x47\x05\x6a\x4d\xc9\x51\xa0\x5e\x05\xc3\x59\x25\x26\x40\x3d\xc2\x94\x17\xf4\xc6\x37\xe1\x5b\xcb\x30\x49\x12\x06\x01\x12\xf7\xcc\xbb\x7e\xca\xfb\xc1\x90\xc5\x9e\x2a\xdb\x85\xfa\x9b\x58\xa1\x62\x48\x47\x21\x17\x6b\x88\x52\x3e\x0c\xe2\x60\xd8\xec\x6f\xb0\x6a\x8a\x9a\xf9\x82\x08\xe2\x55\xe3\x0c\x66\x0c\x94\x2f\x56\xd9\x30\x69\x65\x87\x68\xa1\x11\x5c\x65\xa4\x10\xf3\xea\xa2\x15\x28\xdb\xdd\x1d\x9c\x58\x0d\x28\x8d\xcb\x02\x9f\xd1\x92\x63\xf6\x36\x5d\x34\xb3\x04\x57\x69\x41\xa6\x01\x58\xd7\x41\xa8\x09\xf9\x27\x09\x82\x91\x7a\x92\x7f\x9a\x55\xbf\x0c\x22\x67\x9b\xb9\x50\x7d\xe6\x5d\x85\x9b\x75\x60\xcf\xf0\xb3\x10\xbc\x4d\x53\x8c\x34\xc7\xdc\x78\x0b\x3d\x34\xc3\xd3\x74\x81\xe5\x5a\xe1\x91\x5b\xa1\xae\xcb\x4a\x98\x09\x8d\xfe\x08\x35\x5e\x43\x6d\x1b\xc3\x2e\xb9\xd7\x34\xe7\x8c\x66\x19\x66\x5f\x90\x28\x24\xff\x82\xf4\x4e\xc4\x4c\xf2\x8c\x40\x63\x32\xc9\xf1\x74\xfa\x5b\xed\x81\x18\x66\xaf\x9a\x62\x8a\xe4\x8f\x38\x5b\xae\x69\x73\x77\x5d\xe0\xd5\xc6\x75\x69\x2e\x17\x19\xab\x74\xb3\x2a\x8a\xfd\x6d\x93\x82\x36\xa0\xf8\x21\xa7\x77\xf9\x1b\xca\xc4\x0c\xed\xb0\xfb\x5d\x77\x64\x90\x56\xa1\x82\x97\x17\xfb\xaa\x8c\xc8\x19\x92\x61\xf0\x4d\x10\xa1\xa2\x83\xab\x40\x65\x52\xbf\xd1\x47\x59\xb2\xf3\x22\x7b\x59\x6a\xc3\xc9\x4c\x1b\x4e\x4e\x93\x72\x9c\x81\xa2\x38\x95\xd1\x38\xa6\x51\x54\x8c\x15\xfe\x55\x9a\x17\x62\x89\x5c\x50\xa3\xf9\x7e\x53\x66\x59\x0e\x1b\x1f\x9a\x46\x93\x64\x6b\x47\x5b\x94\x17\xa2\xd5\xeb\x72\x78\xef\x99\xdb\xad\xcc\x13\xee\x9c\x54\x7f\x64\x3a\x38\xa0\xb1\x13\x04\xfe\x46\x2e\xd9\xb4\x10\x8c\x9d\x58\xb1\xb9\x0c\x50\x9f\x2a\x07\xb1\x48\xbb\x5c\x66\xdd\x2e\x96\x2e\x07\xbf\x51\x38\x81\x86\x09\x90\x9b\x5f\x08\x3a\x59\xfa\xfb\xfd\x65\x46\xd3\x59\x77\x12\xd7\x92\xf1\x2b\x68\xb8\xd6\xa1\x3c\x9f\xca\xca\x6f\x88\xdc\xae\x33\x3c\x86\xbb\xfc\x34\xaa\xc5\x26\x54\x69\x7e\x0c\x7d\xb8\x21\x0a\xb1\x4c\xbe\x96\x22\x2b\x21\x0d\xd8\xdf\x6d\x4c\xd7\xcd\xb4\x96\x3a\x0c\xf9\xc6\xa0\xf8\x2c\x56\xe9\xd7\xd2\x34\x62\xf2\x93\x51\x91\xd7\x4d\x71\x15\xd2\xf8\xe9\x7a\xbb\x6e\x1f\xda\x27\x61\x5a\x38\x0a\x9b\xfc\x9a\xe4\xd8\xa9\xd2\x1a\x39\xb5\x53\x14\xfd\x2a\xfa\x81\x22\x31\x78\xcd\xc6\xc9\xd4\xe9\x45\x79\xbd\x38\x2d\x0b\x4e\x17\x0a\x4c\x09\xde\xb8\xae\x83\x9f\xe3\x31\xef\x14\x15\x5f\xde\xa5\x7c\x7a\x73\xa4\xfa\x48\x19\xeb\xab\xa3\x52\xe9\x78\x02\xd7\x36\x7a\x5b\x77\xa7\x34\x04\x92\xb8\x3c\x0f\xce\xc5\xec\x68\x6b\xb7\x8a\x2a\x74\x79\x45\x29\x3f\xbf\xcf\xa7\xbe\x4b\x51\x59\x4f\x91\x02\xcf\x56\xab\x10\xc3\x91\x53\x1a\x86\x01\x7c\xca\xce\xd4\xd5\x6b\x08\x21\xfd\x9d\xa6\xef\xc9\xda\xd9\x17\x49\xed\xf3\xa8\xf5\xb9\xd5\x66\xe7\x23\x84\x7c\x95\xaf\xc1\xbf\x91\x59\xff\xc6\x98\x01\x33\x83\x02\x9d\x20\x70\x12\x7b\x7a\x92\x95\xb9\xee\xc6\xa3\x9c\x70\x02\x12\x11\x2b\x54\x97\x9a\xe0\xc9\xe9\x94\x93\x5b\xec\x7a\xd5\x35\x6c\xc5\x8d\xcb\xa7\xec\x9f\x64\x6b\x47\x43\x48\xd4\xfa\xa5\x8d\xb6\xe4\x00\x86\x34\xba\x50\xd2\xbb\xd4\xb7\xd9\x97\x97\x80\xb9\x24\xdb\x27\x0d\x3d\xa7\x74\xb1\x2c\x39\x9e\x45\x5d\xc1\x17\x8d\x39\x98\xca\x25\xcd\xc0\xaa\x48\x48\x08\xe9\xec\x34\xcf\xee\xc3\x08\xcd\xc8\xec\xb5\xb4\x6b\x51\xf6\x82\x0d\x0d\x62\x0d\x1a\xc3\x1d\x86\xa8\x42\x60\x1b\x2d\xf8\xc7\x86\x45\xbd\x33\x14\xb1\x9b\xc6\x74\xd3\x8c\xcc\xce\xa1\xb5\x90\x46\xf0\x0a\xaa\xa3\x64\x45\x5b\xcb\xa3\x9e\xde\x48\xf0\x2d\x32\xa8\x56\xb2\xfd\x14\x5a\xc0\x88\xf7\x67\xc7\x9d\xd3\xbb\x96\xa3\x46\xcb\xe4\x05\x06\xd4\x37\x05\x5a\xee\x1a\x49\x6d\x08\x9a\xc8\x06\xda\xd2\x32\x6f\xe0\xa1\xba\xd3\x13\x05\xee\x7e\xa2\x79\xbf\x1a\x78\x6a\x23\x41\xfb\x52\x22\x47\xc4\x71\xa4\x80\x8a\x87\x14\xb5\xc6\x12\xe1\x4a\x9c\x21\xb5\xce\x69\x70\xe1\xb2\x23\x4a\x96\x55\xe8\x96\x14\x0d\x4d\xb3\x05\xa8\xe9\xb5\x7b\xb2\xe7\x7a\x34\x5f\x1a\x13\x8a\xcb\x4b\x6b\xaf\xe8\x1c\x13\xba\x67\xa4\xa9\x82\x5e\xd1\x34\xf1\x1d\x6f\x14\xa4\xf1\x22\x2e\x6e\x68\x99\xcd\xe4\xdd\xb4\x04\xe3\x90\xca\xe8\x73\xcc\x39\x38\x25\x47\x31\xbf\xc1\xb9\x77\xa1\x54\x51\x34\xe2\x15\x72\xf1\x75\x89\xb3\x81\x98\xde\x83\x46\xc9\x19\x80\x88\x33\x21\x40\x64\x14\x0f\x91\x2a\x84\xda\x73\xc9\x84\x65\xe6\x31\x5c\x45\x28\x2d\x88\xfa\x05\xea\x9c\x0b\x83\x9b\xb5\x7f\x45\x19\xc7\xb3\x40\x3a\x7c\x81\xa1\x37\x89\x2f\x65\xfb\x4f\xc8\x94\xd1\x8c\x5c\xc5\x72\x2b\xb2\x99\xac\xbd\xc6\x63\x29\x75\xe5\x70\xd4\x83\x5a\xac\x2b\x79\xcf\xda\xf1\xf0\x78\x21\x2d\xb2\x45\x2f\x45\x75\xf8\x98\xcf\x3d\xc7\xca\xdc\x73\x92\x55\x55\xd4\x2b\xea\x86\x22\x5d\x9b\xa8\x27\x5a\xfc\x43\x15\x21\x1e\x73\x7a\x68\x27\x94\xd8\x2e\xd4\x69\xc5\xc1\x37\xcd\x39\x25\x5b\xf3\xae\x99\x39\x8c\xda\x27\x65\x8d\x44\x81\xd9\x2d\x99\xe2\xd1\xb6\x36\x13\x14\x24\xf4\xb3\x27\x6f\xcd\x2a\x06\xd0\x67\xe4\xfa\x28\xbb\x62\xe2\x39\x4d\x94\x60\xca\x0f\x9a\x8a\xf6\x07\xd1\x6e\x2e\xf0\xb2\x76\x64\x81\x47\x75\x71\x70\x7a\xa2\x8a\x95\xab\x42\x88\xf0\x09\x76\x7f\x21\xc7\x3a\x95\x14\xaf\x24\xef\xb6\xa7\xe8\xa9\x9f\xc9\x2b\x19\xc1\x33\x74\x92\x28\x38\x64\x9b\xa6\x5e\x9e\x79\xaf\x77\x6c\x55\x63\x60\x84\x3c\xb5\xdd\xda\x45\x6a\xd3\x94\x33\x24\x09\x72\x9a\x0b\xa1\xd7\xa9\x5e\x6d\xa9\xcb\xbd\xc6\x79\xe3\x54\xd2\x7d\xad\xea\x59\x4b\xa9\x4f\x0b\xf7\xe5\xc6\xf5\x04\x26\x51\x0d\xb2\xac\x85\xfe\x95\xd8\x0f\xa3\xfa\x07\x9f\xa5\xa7\xa1\x61\xf2\x40\x99\x35\xee\x48\xc7\xfb\xeb\x64\x9f\x6a\xfd\xe3\xb0\x46\xf5\xbe\x74\x19\x21\x27\xbd\x6c\xaa\x4e\xad\x1a\xae\x5f\x47\xf5\x89\x51\x63\x86\x42\x4f\xc7\xb8\x53\xc4\x79\x1f\x19\xef\x72\x5c\x8b\x64\xe9\xac\xb3\xa4\x75\x7c\xb6\x4e\x32\xe7\x1c\x93\x93\x2c\xa9\x4f\xb2\x26\xbf\x96\xb4\x2b\x88\x6a\xb3\x3e\x69\x2e\x0a\x84\xf5\x89\x62\x8c\xf7\x70\x15\x46\x28\x4b\x0a\x47\x5b\x90\x75\x8b\x52\x4d\x51\xfe\x0b\x5d\xf7\x7d\xa6\xa7\x60\xed\x72\xb0\x65\x42\xd1\x2d\xce\x6d\xa0\xc7\xf8\x6c\xd4\x24\x26\x39\x43\x7f\xa1\x6d\x31\x50\xca\x87\x5e\x4a\x86\xaf\xf8\x4a\x97\x9b\x36\x3e\x1f\x5a\xa2\x05\xba\xed\xf2\xdb\xba\xaf\xcf\x60\x0e\x06\x18\x5a\xa5\x7c\x4c\xc4\x5c\xcc\xd4\x7d\xe3\x38\xd8\xbe\x2a\xa7\x1f\x30\xdf\x9e\xa6\xd3\x1b\x25\x9e\x4d\xcc\x3c\xbf\xf7\xf0\x3c\x30\x25\xbf\x8c\x44\x7b\x2d\xf6\xdb\xab\xe4\xa6\x25\xd6\x7a\xe0\x6e\x70\x83\xd9\xed\x90\x76\xd3\x92\x53\x21\x02\x81\xa1\xb2\xba\xfc\x16\x0b\x0b\x7e\x3b\x23\xab\x4f\xfc\xe2\xb3\x64\xe2\x6f\xf4\x76\xfd\x4d\x32\x35\x1b\xd6\x9d\x11\x32\x84\x90\x43\x72\x5c\x14\x07\x78\x8e\x19\x4b\xb3\x22\xd9\x6d\x88\x69\xfa\xb7\xaf\x6a\xda\xcd\x41\xf1\x2d\xaa\x65\x6a\xcf\x70\xda\x66\x36\xbd\x5a\x3a\x5d\x09\x27\xa1\x92\x1f\x2f\x97\x0c\x2f\x53\x86\xdf\x50\xf6\x83\xfd\xa8\x6b\xad\xf3\xab\xc4\x77\x29\xe1\x6f\x28\x3b\x38\x3d\x39\xc3\xe9\xec\x3e\x04\x04\x67\x92\xcd\x74\x2d\x7d\xa2\x8c\x87\x5d\xc0\xf1\x55\x5a\x60\xb5\xa9\xb9\x3c\x98\x7c\x35\x33\x53\x40\xa1\x13\x01\x6c\x73\x8d\x37\xf3\x80\x13\xfb\x3a\x4d\x05\xda\xae\x50\x93\xb7\xeb\x56\x29\x78\xc9\x38\x7e\x50\xfe\xfe\x6a\x4d\x17\x25\x03\x86\xce\x8f\xd5\x6a\xae\x9e\x22\x3d\xb7\x8d\x9c\x2e\x3a\xf1\xc0\x6c\x01\x86\x03\x05\x2d\x88\xff\x5b\x87\x80\x57\x1b\x8e\x30\x52\x76\xd8\x97\xb3\x56\xfe\xcb\x4b\x1d\xcd\xb8\x26\x03\x09\x46\xcc\xfd\x5d\xa1\xc6\x98\xbb\xe5\x6e\xe9\x79\x2f\xff\xc6\xa4\x80\x24\x52\xe4\x29\xa6\x37\x58\x2c\xfd\x28\x54\xe1\x36\x34\xda\x73\x30\xa3\x0b\x48\x17\x28\x3e\xe8\x9b\x50\xaa\x00\xee\x25\x94\xc6\x15\xc9\x67\x5a\xa0\xb4\x49\xa3\x0a\xe9\x1f\xad\xce\xae\xb9\xdd\xd8\x25\x75\x7e\x9f\x4f\x43\xb0\x68\x9b\x63\x76\xa6\x97\x5f\x7b\x65\xb7\x57\xe6\x70\x58\xa1\x74\x76\x2b\xfa\xe9\x49\xf9\xb6\xb7\xd1\x8e\xc6\x8f\xf4\x7c\x06\xfd\x50\x1a\xd3\x7c\x8a\x55\x03\x25\x4b\x46\x66\xaf\xf0\x94\x2e\xa0\xac\x7b\xb1\xa6\xc4\x9e\xe5\x73\xa1\x10\x1f\xde\x31\xba\x20\x05\x8e\x5a\x8a\x30\xf5\xa1\xc7\xd9\xfd\x43\xab\x13\xa6\x62\xf6\x8b\xc9\x5e\x75\xe5\xf3\x2a\xdc\x24\x30\x83\xbb\x4b\xd5\x66\x1b\xbc\x3b\x53\xd6\x44\x49\x16\x9f\x9d\xff\xfc\x2e\x86\xee\x36\x53\xcf\x29\x41\x46\xb8\xae\xd7\x11\x54\x5e\x8e\xaa\x2b\x42\xe1\x0e\x2a\x6b\x5a\x6d\x31\x81\x5c\x26\xc6\x51\x30\x36\xc7\xc8\x34\x94\x6b\xe3\x54\x21\x1b\xfd\x53\xa2\xe5\x22\x5e\x01\xfa\x6c\x51\x57\x4e\xbb\xcd\xf1\xae\x93\xde\x46\xfb\xb7\x6e\xa3\x65\xd2\xeb\x9d\xd3\x78\x2f\xb7\x7b\x89\xc5\x09\x86\x8c\x30\x1d\x5c\x85\x80\xd4\x1b\x94\x60\xe3\x18\x28\xa3\xcc\xe0\xd1\x0d\x03\x3d\xb2\xf6\xcc\x18\x83\xe6\xad\x42\xf5\xb9\x57\x9b\xe3\xec\x5e\xf6\x4d\x4f\x62\xdc\xd0\x98\x14\x17\xb8\x10\xec\x51\x14\x46\xab\x55\x08\xf7\xd3\xca\x20\x7c\x5f\xde\x76\xc3\xad\x60\x11\xc9\x6a\x80\x86\xc2\xbc\x3d\xc7\x29\x9b\xde\x58\x5c\xb6\xad\x9d\xa8\x71\xc6\x44\x21\x6e\x1f\x67\x7b\x6b\x06\x66\xe4\xdb\xf1\x22\x77\xda\x6b\x35\x34\x9c\x55\x00\xb6\xe3\x6a\xff\x7a\xed\x61\xd2\x17\xac\xae\x16\xdb\x6a\x51\x9b\x93\xcb\x9b\xdf\x99\x6d\x88\x35\x3b\xd5\x05\xa7\xfe\x74\xd5\xc5\xe3\x9d\xbb\xdb\xac\xfb\x93\xa7\x6a\xa9\x2f\x80\x6a\xe7\xb3\xdc\xdb\x06\x83\xd0\xff\x59\x9e\xf5\xd1\x1a\x36\xa6\x16\x32\xde\x9f\xc2\xeb\x7a\xe9\x80\x5b\x4b\xf4\x60\xb8\x41\x5a\x43\x45\x45\x94\x8f\xda\xea\x41\x7b\xa9\x0b\x0a\x42\x77\x3f\x14\xdd\xe0\x53\xce\x49\x8d\x21\x6b\x9d\xae\x46\xf3\x07\x19\x79\xb7\x5a\x2f\x8f\xa1\x16\x82\x83\x88\xa2\x58\x4e\xa3\xb0\xce\xc3\x30\x7a\x67\x97\x7c\xee\x2e\x79\x5c\x45\xca\xae\xd9\xb2\xf5\x97\xda\xa0\x56\x2b\x7e\x5c\xa5\x3a\xd2\x8c\x86\xe1\x33\x1a\x7a\x26\x8f\x3f\x36\x7a\x90\xcc\x56\x47\xbc\xa2\xb6\x39\x60\x43\xf1\x04\xe5\x8f\xa4\x61\x8d\x2e\xbf\x9e\xc2\xaf\x73\x46\xd3\xb8\x89\x74\x03\xae\xe0\xff\x94\x61\x53\x1a\x0d\x73\x6c\x0f\x90\x7b\x2a\x68\x2d\xad\x5b\x9e\xd6\x2f\x8c\xc4\x06\x23\xea\xb4\x5f\x72\x7a\x6c\x94\x0e\xde\xa4\x37\x69\x71\x23\x92\xfe\x98\x16\x37\x8f\x25\x25\x05\xa7\xec\x1e\x52\xcb\xc7\x47\x32\x80\xf2\x08\xcd\xe3\xb7\x34\xc7\xde\xa4\xe1\x0e\x5a\xc6\x4b\x46\x6e\x53\x0e\xb6\x02\xf7\x62\xdc\x3a\x87\x05\x8c\xd7\xe6\xf1\x2b\x90\xd8\xc0\x66\xb0\x39\x24\x5a\x17\x28\x7b\xd0\xce\x8a\x73\xf9\xbe\xd1\xcf\xcd\xd4\xc1\xa5\x79\xaa\x5f\xd8\x98\x39\x78\x17\x46\x0f\xd7\xab\x55\x78\x9d\x6c\xed\xa0\x5b\x2f\x32\x8e\x05\x44\xdf\x9a\x36\xe0\x61\x06\x83\x22\xce\xc8\x15\x4b\x19\xc1\xf6\xaa\xf0\x35\x65\xf8\x18\xde\xde\x87\x26\x40\x3c\xe0\xc6\x69\x70\xa6\x28\x96\x38\x31\x51\x54\x5d\xd5\xf5\xb2\xb0\x3a\xdb\x7a\xd9\xfa\x11\xbf\xce\x25\x51\x75\xac\x58\x5b\xa2\xcc\x85\xbc\x37\xd8\xb7\xd3\x4c\x13\x07\x03\x10\xac\x75\xa5\x87\xc9\x95\xa3\x8f\x39\x5c\xaf\x8f\x71\xb4\x16\x5f\x1e\x8f\xe9\x2b\xd8\xa6\x4b\xbb\x05\xaf\x4d\x0c\x01\x80\x8d\x31\x9e\x24\x39\x18\xb2\x8e\x27\x48\x3c\x48\xb7\x77\x1e\x21\x36\x18\xf0\x50\x42\x3b\xb8\xfc\x5c\x1b\x8c\x80\x80\xb5\x2b\x62\xf1\x1d\xc9\x67\xf4\x6e\x30\xf0\xf8\x71\xbe\xb6\xd2\xbd\x06\x52\x13\x0b\xc0\x79\x1d\x62\xf4\x20\x61\x18\x47\x5c\xda\x54\xe2\x2a\xea\x69\xa2\xb1\xde\x78\x64\x5a\x1a\x55\xa2\xae\x83\x01\xd4\x78\xed\x91\x13\x72\xc9\x2a\x61\x7d\xe4\x35\xfd\xa7\x0f\xdf\xfe\x1c\x1f\x9e\xbc\x3a\x3c\xbb\x3c\x3e\xdd\x3f\xb8\xfc\xf1\xf4\xf4\xa7\xf3\xd5\xea\xa1\x42\x24\x79\xa8\x10\x4d\x48\xcf\x66\xa5\x55\x14\xf5\xec\xec\x98\xa6\x62\x4b\x35\x2a\x9f\xcd\xec\x7b\xbc\x33\xe3\xab\x3a\x28\x90\xe2\x30\x97\x98\x4e\x6d\xd8\x0f\x98\x05\xda\xeb\x4f\xe2\x3d\x02\xae\x16\xdb\x63\xa3\xad\x2d\xd5\x3b\x6f\x21\x7c\xe3\xe9\x3b\xb1\x2b\xec\x1f\x5f\xbe\x39\xdc\xbf\x78\x7f\x76\x78\x2e\x3a\x55\xf6\xdc\xd9\xe9\xfb\x8b\xa3\xb7\x3f\x5c\x9e\x9c\x1e\x1c\x1e\x5f\xee\x9f\xfd\x90\xe8\x2f\x3f\x1c\x1f\x9d\x9c\x1c\x9e\x5d\x9e\x1f\x5e\x5c\xbe\x3e\x3d\x79\x77\xfa\xf6\xf0\xed\xc5\xe5\xc5\xe1\xc9\xbb\xe3\xfd\x8b\x43\x93\xec\xf5\xfb\xf3\x8b\xd3\x13\x27\xc5\xfe\xd9\x0f\x97\xef\xce\x4e\xff\xfe\xab\x49\x72\x72\x7a\xf0\xfe\xf8\xf0\xf2\xfd\xdb\xa3\x37\x47\xaf\x61\x83\x32\x9f\x8e\x4e\xde\x9d\x9d\xfe\x7c\x78\x70\x79\xf4\xf6\xfc\xe2\xec\xfd\xc9\xe1\xdb\x8b\x7a\x82\xe3\xa3\x57\x67\xfb\x67\x47\x87\xe7\x97\x47\xe7\x67\x87\x3f\x1c\x9d\x5f\x1c\x9e\x1d\x1e\x24\x38\xd6\x4d\x49\x70\x7c\x70\xf8\x66\xff\xfd\xf1\x85\x69\x5d\x7d\x9e\x3c\xac\x23\x34\xda\xda\x45\xeb\x6b\x62\x53\xb4\x9b\x61\xbf\x75\xf7\xc2\x68\x6b\x07\x6d\xd2\xa1\x36\x5d\x6b\x48\xc4\x6c\xe8\x79\x9a\x99\x5b\x0f\x45\xeb\xb1\x92\x23\x39\xf4\x3a\x95\xc3\xbb\x50\xbb\xba\xb6\xc2\x47\x66\x88\x04\xcb\xd9\x4a\x12\x1c\xad\x56\xb8\x72\xfa\x9b\x28\x3f\x07\x1a\x92\xb5\x63\x14\xf5\x1e\x19\xc3\x54\x1b\xd4\x18\x42\x5d\x63\x60\x49\x75\xce\x97\x42\xdd\x9e\x59\x62\xed\xe1\xb2\x64\x3c\x33\xb2\x54\x21\x67\x2c\x81\xee\x31\xb5\x84\xd6\xcc\xfe\x4c\x59\x18\x5a\x82\xeb\x27\x80\x25\xfa\xc8\xca\x9b\x2a\x0b\x7e\x4b\xb8\x35\x63\x2c\xad\xf6\xfa\x6e\xa0\x6c\x18\x28\x86\xcd\xf6\xc0\x0e\xab\xab\xaf\x66\x99\x68\x62\xf5\x6f\x6c\x44\x68\x72\xb4\xac\xdd\x6c\x53\xb5\xd9\xfd\xb6\x8c\x20\xb8\x59\x80\x8c\x2f\x0b\x40\x07\x3e\xe1\x0a\xe1\x49\x08\xf8\xb2\x42\xa7\x79\x76\x6f\x1a\xe0\x35\xb7\x77\xa3\x15\x71\x91\xd9\x9f\xd5\xd9\x02\xf9\xc6\x57\xca\x8f\x75\x94\x12\xfc\x16\xd0\x56\x70\x84\xc1\xfe\x1b\xbd\xa6\xbb\x40\x5d\xd7\x6b\xf3\xcb\x8b\xb5\x5e\x57\x23\x78\x73\xfc\xb4\x61\xfc\x66\x73\x75\xdd\x55\x54\xe3\x8e\xcb\x21\x2d\xe3\x56\xeb\x9f\x97\x10\x0b\xec\xeb\xb8\x9b\x4b\x21\xc0\xd3\x4b\x4c\x7d\xaa\x47\x1d\x1e\x07\xb6\x5a\xc1\x44\x23\x86\x03\x42\x88\xd3\xf9\x60\x1a\x2d\x1d\xd3\x2c\x87\x2d\xd9\x28\xaf\x7b\x7b\x27\x0c\x8d\xb1\x1a\x8d\x5e\xe8\xc0\x8c\x26\x25\x30\xfe\x51\x48\x54\xe0\x00\xe0\xb4\x3a\x7c\xc6\x1f\xeb\xd9\x2f\x17\x69\xf5\xb1\x20\xf9\x5f\x17\x23\x20\x8f\x8b\xfb\xc5\x15\xcd\xa2\x30\x80\xbd\x16\xcc\xb0\x5a\xa1\x54\x5b\x78\x3e\xd6\xd9\x43\xec\x69\x12\xdf\x5a\xde\x86\x09\xd1\x56\x85\x57\x02\xb7\x1d\x19\x0d\xd9\x5a\xfb\x3d\x74\x07\xd4\x1a\x93\x09\x58\xa7\x75\x07\x44\x1a\x93\x49\x22\x37\xc8\xee\x91\x83\x1b\xe3\xcd\x56\xda\xda\x9b\xe7\x86\xf7\xb5\x24\x2b\xe6\x82\xd1\x2d\xfa\x3e\x72\xa9\xf2\xf4\x7d\xba\x4b\x59\xee\x7b\x3f\x4d\x97\x82\x9b\xdf\x96\x37\xf9\xdb\x9c\x61\xfc\xf5\xac\x83\xbb\xad\xc9\x95\x44\xed\x80\x59\xaa\xf1\xde\xd8\x5c\x5b\x93\x50\xf9\xd6\x9a\x82\x1b\xe5\xf0\x86\xd4\x89\x55\x27\x3f\x66\xbc\xff\x54\xc2\x36\xcb\x7a\x73\x7b\xd5\xba\x5f\x52\xf6\xc4\x9e\xa1\x4f\xea\x19\x35\x1d\xa4\x49\xcf\x85\x98\x0c\x9b\x95\x92\x3a\xe6\xf2\x42\xf8\x14\xd3\xed\x68\xfe\xbe\x20\xf9\xb5\x38\xd7\x96\x4b\x3c\x7b\x23\xe5\xc6\x37\x59\x7a\x5d\xc8\x08\x14\x07\x62\x16\xbe\x51\xb4\x12\x30\xb1\x6c\xbe\x32\xd3\x5d\xbc\x4b\xb0\xbc\x82\x81\x44\xf0\x51\x24\x06\xb7\x72\xfd\xeb\x1c\xa7\x99\x9b\x4d\xbf\x4f\x70\x2c\xaa\x94\x88\x03\x64\x0e\xa1\x2a\x8a\x02\xb3\x86\x95\x7a\x0d\xfb\xa5\x04\xc3\x15\x95\x4c\x33\xba\xe2\x15\x10\xd0\x8c\xaa\x78\x01\x84\x35\x83\x29\xad\x5d\x44\x89\x73\x15\x90\x49\xbe\xd1\xf5\x99\xc1\xdb\x1b\x9b\x0e\x6a\x7c\x03\x6f\x97\xf6\xad\x6a\x95\x84\x15\x5c\xc0\x7b\xa7\xe9\x8b\x9e\x8c\x02\x20\x5e\xb7\x3a\xed\x16\x3e\xde\xc3\xc7\x56\x27\xdf\x2b\xf3\x05\xcf\x08\x1a\x44\xac\x26\xac\xd6\xf6\xee\xa4\xea\x35\x87\xe2\x7a\x93\x51\x96\xbd\xeb\xdb\x21\xbb\xb6\x9e\xfa\x9e\xa9\x18\x67\x38\x9a\xbe\x1e\x28\x51\x9b\x63\x84\x53\x03\x7f\x5c\xe2\x29\x78\xa0\x69\x53\x5b\x63\xaf\xa8\xea\x55\xdb\xba\x23\x14\xbc\x7a\xff\xc3\xa8\x0f\x0e\x4d\x7d\x52\xf4\x17\xa4\x28\x00\x72\x77\x6d\x2e\x39\xdc\x76\xbd\xc5\xaa\x57\xc2\xa8\xea\xea\x37\xe7\x08\xf8\x04\xdd\x4b\xed\x84\x6a\x13\x57\xe8\xfa\x5f\x9c\xab\x57\xbd\x71\x2a\x6d\xc4\xde\xe7\x9c\x64\xce\x66\x9f\x34\x13\x1c\xcd\xd6\x7d\xad\x7f\x6b\xec\x6f\x89\x97\xdf\x50\xa7\x58\x6d\x8d\xf7\xda\x79\x49\xab\xaa\x6e\x59\xbc\xf5\xb5\x5e\x4f\xf6\x78\x43\x73\xc5\xfd\xd5\xf6\x9a\x34\xa1\xdd\x08\x22\x9e\xb1\xf9\x7a\xc2\x17\xc9\x6f\xe9\x07\xec\xed\xd4\x1f\xf7\xdf\x1e\x1c\x1f\x9e\x9d\xd7\xc5\x24\xe8\x45\xf3\x89\x2b\x68\xaf\x47\x7a\x99\xf5\x1a\x21\x8f\x64\x32\x55\x78\xde\xd5\x7e\xc3\xde\x7c\xbd\xe6\xeb\x63\xde\x27\x86\x29\x68\xe3\x56\x0a\x1c\x3d\x70\x6b\xbe\xa9\x30\x2d\x78\xb2\xb5\xdb\xd5\x0e\xc9\x8b\x75\xe1\xc4\xff\x6f\xaf\xcd\xa7\x2c\xcb\xcd\x96\xde\x63\xd3\x41\xcd\x1a\xdf\xfa\xec\xae\x5a\x7b\xad\xd5\x2b\x97\x3f\x2e\x66\x79\xec\x18\xdb\xac\xfb\x17\xee\xeb\x26\x1c\x4b\x82\xe3\x77\xfb\x67\x17\x47\xfb\xc7\xe7\x56\x3d\x6c\xf4\x57\x47\xe7\x97\x3f\x1f\x9d\x1f\xbd\x3a\x3e\x4c\xf0\xfa\xa8\x52\x09\x8e\xdf\xbc\x7f\x0b\x91\xdc\x2f\xdf\x9d\x9d\x5e\x9c\x5e\xfc\xfa\xee\xf0\xf2\xf0\xef\x17\x87\x6f\xcf\x8f\x4e\xdf\x8a\xef\xfb\xef\xde\x5d\xbe\xbe\x38\x3b\x06\xfd\xd6\xe1\x99\x48\xf6\x0e\xde\x1f\x1f\xed\x9f\x5f\x9e\x1c\x5e\xfc\x78\x7a\x90\x60\xcf\xd5\x58\x82\x63\x5b\xa5\x93\xfd\xb7\xfb\x3f\x1c\x9e\x5d\x9e\x5f\x9c\x1d\xbd\xfd\xe1\xf2\xf8\xf4\xf4\xa7\xf7\xef\x12\x1c\x2b\xa2\xa6\x36\x27\x87\x67\x3f\x88\x5a\x1f\x9f\xfe\xf0\x03\x34\x53\xb6\x0d\x6a\x74\x60\xab\x28\x92\x3a\x51\xe8\x13\x03\x71\xeb\xbe\xdc\xda\xe9\x75\xe7\x87\x8f\xaa\x14\x78\x96\x25\xc3\x63\xbd\x52\xf0\xea\xb1\x96\x40\x22\x4f\x1f\xc0\xfb\x5a\x57\xc9\x37\xde\x4e\x85\x4f\xeb\xc7\x43\x56\x75\xed\x90\x3a\xcd\xf6\x4e\x09\xf8\x6e\x66\x0f\xfc\x6a\x4d\xaf\xad\x06\xfb\x65\xbc\x44\x5b\x12\xaa\xd7\xc6\x5a\x25\x17\xbb\x8f\x7c\xdc\x96\xb0\xb0\x9b\x58\x61\x3b\x9a\x97\xa7\xea\x22\x5c\x83\xe4\x59\x7a\xbd\xbd\x48\x97\x9f\x10\x97\x76\x3d\x9c\xd4\x53\xfc\x66\x5b\xa6\xd6\x2e\x97\xf5\x91\xe3\xbc\x20\x34\xdf\x36\x61\xef\x9f\x64\xc6\xfd\xa8\x4f\x6e\xdb\x82\xba\xcb\x7e\xfa\xf6\x8b\xd9\x4f\xdf\x76\xd9\x4f\xff\x47\xdb\x6a\xaf\xf3\xd5\x3f\x84\x61\x7e\xa7\x66\xef\x86\x7e\xe5\x8d\x7c\x8f\x09\xff\x9f\x54\x46\xd1\x2e\xa3\xc3\xe6\x9c\xc6\xc6\x88\x4a\x2b\x1c\x69\xac\xaf\xf9\xdf\x31\xfa\xf1\x1e\x34\x67\xe8\xe1\x13\x8d\xc2\x6b\x36\x09\x60\xcf\x4b\x1c\x73\xc7\xb3\x34\x97\x01\xea\x8b\x92\xd5\x5c\x7e\xdb\x25\x35\xb2\x69\x5b\xf3\xb6\xfd\xa4\x37\x79\xb2\xb5\xf3\x89\xb6\xda\x40\xae\x5d\xc1\xb0\x6e\xc5\x3d\xf7\x99\x6c\x77\xda\x63\xd4\x4c\x50\x1d\x9f\x62\x69\xa2\xe1\x3a\x21\xd7\xbb\x4f\x3a\xe4\x21\xa7\x6d\xeb\x5d\x98\x9d\x84\x50\x21\xd2\x76\xae\x7e\x8c\x40\x2b\x03\x10\x6a\xf4\xba\xdf\xd6\x44\xdb\x8d\xd6\xd2\x86\x81\x3b\x32\x6e\xd0\x39\x09\x9b\xe9\xd4\x59\x1a\x8b\xa9\xc2\xda\x5e\xe1\x1e\x13\xf8\x76\x51\xed\x6c\x1b\x15\xd9\xa0\xd4\xd0\xdf\x9a\x00\x6c\xd2\x5d\x38\x73\xdc\x85\x9d\xce\x03\xf0\x3a\x0f\x48\x8d\x13\xb8\x14\x22\xb8\xe1\x88\x4b\x8b\x11\x66\x76\x2f\x5e\x85\x79\xa4\x62\x41\x14\x06\x7a\x32\x4d\x76\x5e\xa4\x36\xb0\x68\x3a\x1c\x46\x2c\xc9\xc7\x64\x9c\x4e\x26\x88\x82\xa9\xbf\x84\x9c\x42\x0c\xb1\xf8\x0a\xc2\x1f\x20\x16\xa7\x73\x8e\x59\xd4\xa3\x31\xa7\xcb\x82\x32\x1e\xf2\xba\x25\xdd\x95\xad\xda\x83\xb1\x2e\x1b\xe1\x4a\xc3\xe6\xd8\x16\x62\x14\x68\x1b\xc9\x20\x5a\xad\xa6\xe6\x62\x42\x4f\x7a\xee\x18\x47\x5d\x3a\xcb\xca\x76\x78\x3d\xf6\x86\x74\xf8\x13\x5b\x08\x20\xcb\x80\x3d\x4a\xfb\x9d\x32\xba\x1c\xe3\x89\x36\xb9\x78\xa8\x7a\x4c\x7c\xa8\xc7\x70\xd6\x89\xb4\xd1\xab\xb5\x8c\x62\x51\xa5\x3e\x8e\xa5\x43\x2d\x28\xdd\xaf\x1b\xf0\xe7\xee\xdc\xf2\x44\x87\xf6\xad\x9e\xae\x84\x76\xe6\x5c\x36\x27\xbc\xfb\x33\xf0\x12\x95\x79\x7c\x33\xd7\xbc\xee\xd7\x89\x74\x6c\x34\xb5\x08\x21\xa9\xd9\xd5\xc3\x07\xcd\xb0\x8c\xae\x60\xc2\xf7\x5c\xe0\x97\x24\x13\xff\x23\xee\xd8\xd1\xb5\xec\x0c\x11\xf6\x78\xd2\xd6\x71\x0a\x94\xe3\x9e\x02\x56\x0a\x83\xa9\x73\x7f\x2c\xe4\xab\x0c\x73\x9a\x6b\xf7\xdd\x66\x62\x19\x51\xa2\x9d\xce\x56\xc9\xf2\x81\xda\xe4\xd2\x81\x68\xf5\x38\x08\x3b\x76\x7e\x92\x78\x00\x61\x2b\x74\x97\x04\xa8\x23\xf2\x52\xdd\x12\x53\xa1\xb7\x7e\x62\x6e\x5a\xc2\x0d\xcb\x25\xa7\xcb\x63\x7c\x8b\xb3\x9f\x09\xbe\xd3\xcc\x4d\x80\x0c\x04\xdd\x68\x9b\x96\x3c\xc3\xbc\x99\x1f\xe0\x80\xf5\xb7\x0d\x0c\x41\x9d\xac\x35\xae\x59\xc7\xc7\xad\x5b\x35\xae\xc9\xf0\x94\x92\xac\xf1\xe4\x95\xb5\xcb\x0c\xa4\x51\x7e\xc3\xb2\xb3\xab\x7b\xd6\x66\xbc\x5d\x93\xd1\x6f\xae\xe9\xf7\x0e\x37\xcc\xf7\x2c\x56\xe6\xf0\xeb\x8d\x42\x6d\x86\x60\x83\x62\xf4\xfa\xda\x9e\x53\xb6\x0d\xa2\xc5\x35\xc9\xaf\xf5\xda\xd1\x36\xf6\xec\xb1\x99\x6a\x24\x16\x49\x63\x3b\x9d\xa5\x4b\xc7\x14\xd8\x11\x3b\xd6\x15\xd8\x20\x0a\x71\x55\x1b\x94\x4c\x41\xa0\xd8\xdf\x97\x1f\xdd\xf7\xbe\x0a\xb4\x17\x64\x77\x5d\x6f\xe2\xd7\xbe\x22\x9a\x24\xd4\x16\xb1\x2d\x95\xe3\x2a\xef\xd2\x5a\x92\x1c\xc3\xfb\xa8\x0a\xb9\x6b\x9f\x2a\x39\x5d\x6b\x9a\x0a\xbe\x07\xc8\xec\x71\x70\x73\x7b\xe6\xfe\x52\x66\xab\x77\xc9\xb5\xa3\xc7\xb9\xeb\x90\x69\x7d\x60\x4c\x9f\xee\x3a\xdc\x12\x50\x1b\x82\x67\x37\x42\xb6\xc7\x9f\xb6\x53\x90\x5e\x23\xf6\x75\x89\x79\xe5\x53\x44\x2f\x63\x8d\x22\x86\x8c\x64\x7a\x98\xad\xf8\x55\x3e\x2a\xea\x65\x5f\x4c\xd4\xcb\xbe\xae\x5b\xee\x34\xc9\xe3\xa6\x41\x86\x47\x3e\xca\xed\x0c\x77\xa5\x26\x21\x21\x7c\xaa\x53\x6d\x3d\x7c\x24\xf0\xfe\x3d\xd7\xd3\x31\x2d\x70\x0f\x03\xf6\x13\x6f\x22\xd5\x98\x04\x09\x8e\x7a\x16\x0c\xa6\x2e\x6c\x34\xb9\x82\x79\x9a\x65\x57\xe9\xf4\xc3\x08\xd7\xd2\x55\xc6\x89\xd2\x75\x93\xe4\x36\xf6\x4e\xf8\x00\xf7\x53\xe0\x8d\x54\xb5\xfc\x6e\x9a\xde\x7c\x75\x74\x9a\x2e\x67\x3c\x83\x29\x54\xf3\xd7\xc1\x77\xfd\x5c\xfa\xd8\xa9\x57\x8e\xc1\x32\xb3\xe2\x6f\xc8\x1d\x1f\x28\x0c\xbe\x23\x51\xdb\xfd\xe7\x69\x00\x5b\x92\xbb\xcf\xa8\x16\xa9\x0f\xf0\x52\x70\x03\xf9\x94\x60\x23\x74\xb6\x40\xb7\xcc\x30\x3c\x82\x6c\xd5\x70\xb3\x7a\x1c\xac\xaa\x21\xa7\xb6\xc7\x67\x1d\x94\x8f\x2a\xef\xa9\x58\x57\x16\xb2\xde\x23\x79\xd5\xca\x06\x17\x43\xd3\xfe\xb5\x21\xa0\x25\xeb\x0a\xe1\x37\xe4\x36\xee\x91\xce\xfd\xb0\x32\x3d\xeb\xc2\x64\x51\x9d\x80\xc4\x28\x18\x62\x09\x75\xec\xc2\x1c\xd3\x7a\x84\x8e\x94\x8b\x4d\x8c\xe3\x59\x9f\xd3\xfe\x82\x96\x39\x07\x5c\x63\x49\xa1\xff\x07\x80\x3d\xfe\x03\xea\x5f\x95\xbc\x4f\x78\x9f\x14\xfd\x9c\xf2\xbe\x8d\x35\x2e\xc3\x5d\x11\x5e\xf4\xe5\x96\x1b\x07\x1a\x56\xa9\xe9\x24\xc5\x6b\x20\xb7\x0d\xc5\x0c\x98\x09\xcb\xe0\xee\x15\xea\x98\x5d\x7e\xe1\x5a\x46\x1f\x2f\x9a\xda\x24\xb5\x4f\xbc\x18\xd7\xfd\x91\x7c\x7c\xcc\xda\x3b\x64\x9f\x4b\x00\xab\x45\xed\x53\xa7\x36\x03\x49\x41\x42\xdb\xca\xf9\x92\xaa\xc4\x62\xd9\x99\xe8\x89\x6b\xa6\x63\x4f\x89\x6b\x6b\x40\x80\x3c\x9c\x92\xea\xed\x71\xdd\x3d\xaa\xc9\x2e\x66\x61\x14\xf9\x99\x73\x64\xb8\xf9\xd1\x76\x30\x0c\x59\x1d\x98\x64\x2f\x98\xd1\x45\x30\x0a\xc4\x84\x86\x6b\x78\x0f\xac\x50\xb3\xac\x32\x8c\xa2\x49\x8f\x35\x71\x59\x54\x3c\xf9\x6e\xc4\xb1\xa7\xf4\xb4\xea\x46\xe6\x41\x41\x32\xee\x80\x92\xd7\xb3\x72\x4e\xfd\xc6\xde\x07\xed\x55\xcb\x66\xd8\xe9\x47\xf3\x55\x55\xd4\x9b\x6e\x8e\x0c\xc5\x21\x3a\xb8\x47\x10\x7b\xbc\x82\x7e\x7e\x7f\x83\x86\x35\x46\xd5\x5b\xbe\x23\xd5\xd9\x29\x21\x86\xbf\xc5\x8d\x1b\x09\x76\x4d\x1e\x88\x0c\xbe\x61\x21\x7a\x76\x3d\xad\x18\x95\x2b\x32\x50\x55\xf3\x64\xea\xf0\xb1\x73\x2f\x1f\xeb\xb9\x6c\xd9\x24\x98\xcb\x17\xb7\x8f\x69\x6c\x57\x5e\xcb\xea\x31\x9b\xe8\xe0\xc0\xfe\xa4\xa2\x22\x22\x55\xc2\xab\x9e\x13\x7a\xd7\xd8\x7d\x1e\xbe\xfd\xe1\xe8\xed\xe1\xe5\xbb\xfd\xb3\xc3\xb7\x17\x41\xc3\xf8\x1c\x38\xec\xaf\x7e\x25\xeb\xbd\xb2\x06\x04\x37\x67\xa8\x1a\x66\xd5\x8d\xe0\x49\x4f\xf7\x85\xfa\xe2\xa3\x65\x6b\x04\x61\x81\x2f\xed\x6f\x88\xb0\x9a\xcc\xc4\x30\x95\x57\xc5\x94\x91\xab\x26\x6c\xb4\xd6\x71\x12\x44\x6d\x50\x86\x38\x88\x50\x9a\x8c\x27\xa8\x48\x76\x5e\x14\x2f\xa9\xd6\x65\x16\xc3\x61\x14\xfc\x31\x48\x92\x24\x24\x09\x1d\x17\x93\x68\x2f\x55\xfb\xe6\xf8\x7f\x7e\xfb\x2d\x9e\xfc\x31\x88\x46\xea\x0d\xd1\x00\x6d\xa9\x0a\x8e\xf0\xdb\x6f\xe2\xf4\x2d\x87\x49\x10\xfe\xf6\x5b\x1c\xff\x31\xda\x53\xb1\x4e\x92\x87\xa5\x38\xe6\x59\x3e\xc2\x88\xe1\x6b\xfc\x71\xe4\xe0\x72\x07\xff\x13\x0c\x4b\x89\xcd\x2d\xc3\x4b\x8e\x78\x65\x83\xc8\x42\x49\x59\x84\xf2\xe4\xa1\x42\x10\xab\xba\xcc\x7d\x2d\x75\x61\xc2\x77\x10\x49\x76\x5e\x90\x97\x1a\x09\xfb\x05\x81\xd8\x90\x64\xa2\xf8\x34\x9e\x90\xa8\xc7\xa0\x2b\x04\x5f\x80\x76\x25\xf9\x4a\x6a\x04\x70\xdd\x00\x5d\xd1\x48\x76\x4c\x9a\x56\xec\xa8\xc4\xe9\x7c\x56\xd4\xe3\xe0\x8d\x27\xbd\xfa\x57\x6d\x1e\xf3\x20\x97\x8c\x92\x06\x45\x77\xfb\x70\xd0\xb4\x1f\xa2\x72\x1d\x5c\x62\x06\x81\xd5\xf3\x29\x06\xbf\xbe\x90\x26\x24\xce\xe9\xdd\x6a\x45\xe2\x05\xfd\xfd\xad\x7c\x92\xf1\x65\xd5\x8f\x45\xa1\x1e\xe8\x5b\x7a\x17\xed\x51\x40\x35\x09\x49\x34\x3a\x48\x39\x16\x79\x23\x57\xf6\x5c\x17\xc0\xb2\x26\x34\x0a\x69\x16\xc2\x3e\x81\x21\x86\x68\x02\x00\xa2\x37\xac\x0b\x5f\x26\xdf\x0e\x06\x65\xc8\xa3\xbd\x30\x4d\x38\x2a\x92\x3c\x1a\x85\x34\xe1\x28\x4d\x72\x54\x24\x24\x02\x94\x12\x83\x58\x6e\xec\x4d\xc1\x5a\x5f\x49\x59\x59\x42\xa1\xad\x37\xc9\x2c\xc4\x9e\x18\x5c\xfd\x4c\xf0\x37\xea\xf9\x26\x49\x92\xf9\x9e\x21\x30\x9a\x86\x29\xba\x41\x19\x2a\xea\x91\x8c\xb5\xed\x3b\x67\xf7\x4e\x50\x17\x91\x27\xd7\xc0\x1d\x44\x63\x2b\xb0\x18\x7f\x9c\x62\x19\xde\x82\x20\x52\xcd\x49\x9e\x66\xd9\xfd\x03\x0f\xa3\xca\x12\x9d\x87\xd1\x83\xfd\x25\x6a\x4a\x10\x05\x25\xbb\xaf\x85\x73\x1d\x51\x5a\x45\x1c\x4d\x57\xab\x30\xf5\xcf\x66\x44\xc4\x32\xa5\xc9\xce\x0b\x6a\x27\x34\x1d\x0e\xa3\x90\x27\x6c\x4c\x27\x51\x0c\x2b\x4a\x22\xd1\xe3\x68\x30\x20\xca\xed\x55\x05\x6b\xb5\xd8\x00\x63\x3c\x81\x06\x08\x49\x0c\xfa\x3d\xf5\xd6\xaa\x44\x59\x42\x42\x1a\xa1\xa9\xf2\x28\x3d\xbf\x38\x7b\xff\xfa\xe2\xfd\xd9\x21\x58\x66\xbc\x39\x3a\x3e\xec\x4d\x07\x83\xb0\x4c\xf0\x30\x18\xf5\x83\x61\xa6\x4a\x42\x42\x90\xa1\x19\x8e\x39\x59\xe0\xb0\x8c\x22\x73\xbd\x32\x13\x4d\xb8\x49\x84\x7c\xb6\x4c\x76\x5e\x2c\x5f\xea\x92\x5f\x2c\x35\xa8\xfe\x22\x49\xc7\xcb\x49\x6f\x26\x2b\xbf\x50\xb7\x26\x21\x16\xa3\x67\x61\xf2\x5c\xbf\x1d\xb3\xdc\x05\x59\x96\xec\xbc\x60\x96\x2c\xd3\x64\xf3\x24\x1d\xb3\x49\xcf\x33\x9b\x73\x79\x1f\x23\xf8\x42\x78\x80\x49\x91\xa1\xd9\x98\x4d\xa2\x6a\x3a\x18\xb8\x8d\x39\xcc\x67\x61\x19\x55\x95\x6f\xed\xa7\xde\x1d\x21\x4d\x9a\x9e\xaf\x46\x26\x6e\xda\x7e\x2e\xe8\x8c\xcc\xc9\xa6\x2e\x3c\xff\x6e\x77\xb3\x02\xf3\x13\x55\xc1\x93\x34\x4f\xaf\x9f\x06\x5e\xdf\xc8\xfa\x98\x75\x7a\x7a\x45\x32\x4e\xf0\xa6\x98\xf3\x3c\xd6\x7d\xf7\x5a\xe6\x25\x22\x73\xcb\xcb\x4d\xce\x4e\xf0\xe1\x4a\x1f\x65\xb7\xba\x22\x88\x69\x6b\x65\x86\xe7\x98\xe1\x7c\xea\x75\xa4\xf8\x12\xec\x8a\x94\x37\xf9\x4f\x18\xdc\xbe\x52\x9e\x50\xe5\x52\xe3\x14\xc6\xcc\xc6\x9b\x10\xc1\xc9\xb5\x22\xc7\xd3\xc1\x20\x84\x2f\x2d\xf8\x48\x05\x1f\x8c\x52\xa3\xee\x7b\x43\x99\xae\x5b\xa4\xc3\x1a\x4b\xd4\x5f\x1e\x73\x96\x4e\x3f\xd4\x71\xb4\x71\x42\xe5\x4e\x49\x22\xbb\xef\x82\xbb\x4f\xb9\x9c\x41\x70\x98\x14\x49\x9d\x19\x68\xa6\x8a\x72\x81\xa3\xb0\x00\xec\x10\x44\xaa\x9a\xef\xad\xec\x32\x32\x0f\xb7\x64\xd0\x31\x1d\x20\x57\x07\x14\xa2\x2c\x0a\xc7\x90\x6a\x12\x45\x0f\x79\x82\x9b\xe6\xb5\xae\x13\x0f\x11\x34\x50\x1e\x55\x3d\xc7\xcc\xbb\xc0\x1c\x04\x22\x32\x3d\xc0\x53\xca\x52\x20\x49\x23\x44\x2b\x27\x97\xa8\x45\xb5\x2e\x79\xe7\x74\x2a\x39\xf6\xa3\x27\xa8\x34\xd2\xbf\x4b\xa6\x33\x0f\x97\x8b\x74\xca\xe8\x23\x89\x19\x9e\x95\x53\x7c\xd9\xcc\xf3\xc5\x3d\xea\x3b\x33\xe0\xc5\x92\xdf\x6f\xbc\x0e\x21\xf5\xda\xd5\x9d\x53\x7e\xf8\x24\x92\x3a\xc3\x23\x54\xf3\x4d\x9d\x58\x04\xc5\x1c\x3f\x56\xc7\xa7\x54\x6f\x2d\xad\x2b\x4a\xb3\x8d\x89\x89\xc4\x6b\xa9\x2d\x04\x4b\xb2\xf9\xae\x28\x52\xaf\xa5\x87\xff\x55\xa6\x9b\x57\x0f\x52\xaf\xa5\x77\xbd\x79\xc7\x5d\xaf\xef\xb7\x6b\xbe\xf9\x80\x5e\xf3\xf5\xe3\xb9\x71\x3c\x10\x1e\x67\xeb\x6b\x95\x3d\xa1\x56\xd9\x23\xb5\xa2\x39\xfe\x25\xdd\x7c\x1d\xc8\xe4\x8f\xf8\x8f\xc9\xa8\x05\x1b\xd3\xd4\x19\x1e\x09\xa9\xa2\xec\xad\xf3\xeb\xfd\x8c\xa4\x9b\x1f\xca\xcd\x8c\x6b\x4b\x49\xf3\x4d\x03\xc1\xf0\x38\xcd\xd7\x07\x81\xa1\x9b\xf3\x26\xf4\x91\x40\x3d\xe5\x62\x73\x13\xbf\x72\xb1\x7e\xed\x02\xa6\xd5\x66\xb4\x16\x24\x7f\x64\x1f\xf8\xb8\x39\xad\xf4\xe3\x23\xb4\x96\x4f\xa0\xb5\x5c\xdf\x5f\x60\x19\xbb\x69\x87\x51\xf6\xa8\xb1\xe5\x01\x99\xcf\x9f\x62\x64\x29\xd2\x3f\xd6\xda\x57\x9b\x2e\x10\x68\xef\xab\xf5\xab\x63\x4e\x32\xbe\x31\x2f\xcc\x62\x99\x7c\x03\x8a\x4f\xa8\xa4\xce\xb0\x96\x6a\x99\x93\x7f\x6d\x4c\x51\x24\x7e\x94\xda\x13\x6a\x28\x93\x3f\x46\x91\x6e\xbe\x3e\x20\xf5\x7a\xef\x5f\xc1\xc9\x17\x78\xba\xf9\x74\x34\x39\xaa\x2a\xea\x66\xa0\xa6\x34\xcb\x9e\x42\x55\xa5\xef\x12\x46\xba\x65\xbd\x86\x1d\xc2\x26\x71\xa6\xbe\x8a\x24\x22\xe1\x3a\x15\x26\x0d\x81\x2b\xdf\x5f\x70\xfa\xe1\x24\x5d\xd6\x79\x78\xae\x78\x78\x07\x10\xdf\xb9\xd0\xf4\x22\x68\xd5\x52\x48\xa4\x86\xc1\xc0\xf3\x32\x8c\x90\x8c\xdb\x7e\x7a\x97\x9b\x4a\x1b\x1c\xd1\x48\x8b\x40\xba\xae\xe0\xd2\x2b\x9f\x12\xba\xd7\x8c\x5a\x4d\xa3\xd1\x43\x65\xc1\x39\x54\xc2\x31\x9f\x24\x39\x6a\x22\x07\xc8\xdb\x3d\x10\xa0\xf4\x75\x7f\xfd\x9e\x57\xf4\xc6\x49\xba\x44\xe0\xe2\x2d\x85\x26\x1c\xe9\x0b\x7e\x50\xae\x87\x16\x96\xbf\x71\x65\x9a\x4b\x0d\x1c\x57\xa1\x94\x04\x81\x1c\xf1\x48\xa2\xc2\x9a\xae\x4d\x35\x7f\x0f\xdd\xdf\x53\x42\x52\xde\x29\x24\x71\xc4\x84\x90\x44\x94\x90\x94\xfa\x85\x24\x39\x60\xc4\x15\x92\x72\xbf\xd4\x93\x46\x28\xad\xea\xb9\x12\x16\xc3\x0c\x01\x61\xa9\x33\x9b\x77\xba\xaf\x17\x84\x3e\x41\x22\x5f\xaf\xfe\x30\xbd\xc8\x84\x90\xa9\x35\x41\xe3\x89\xfd\x40\x42\x1c\x3d\xa8\x1b\x41\x1c\x55\x5a\x99\xe4\x51\xb3\x3d\xc8\xee\x64\x63\x3a\x79\xa1\x5d\x87\xd3\x7c\xa6\xe6\x23\xc1\x85\x10\x78\x89\xd1\x50\xe5\x76\x08\x45\xcd\xf2\xb6\xe9\xad\x55\x5d\xe1\xa4\xa9\x2f\x45\x72\xa1\x01\x84\x49\x88\x23\xa5\xf6\xc3\x50\x11\x32\xa6\x13\x9b\x61\x4c\x27\x6a\xa0\x59\xb8\x83\x88\x90\xd8\x2d\x16\x46\x1d\x26\x25\xd5\xc8\x28\x63\x7f\x1d\x8c\x27\xb8\xd2\xa2\x61\xab\x3e\x23\x52\x0d\x60\x03\x2b\xa5\x63\x36\x91\x57\xfa\x79\x48\x22\x13\x64\xa7\x72\x64\x6e\x37\x31\x9e\x44\xd5\xc4\x6a\x67\x8b\xea\x53\x6c\x81\x40\xb8\xec\x72\xe4\xb6\xf0\x1f\x78\x18\xa8\x96\x04\x1e\x2d\xb1\xd6\x30\x08\x5a\x10\xbf\xd6\xad\xa8\x34\x4d\xa9\x10\x36\x52\xe7\xe7\x16\xb7\xb5\x71\x79\xb9\x2f\x08\x6d\xb3\xac\xee\x06\xbd\xa5\x39\x5e\xdf\x9e\x4f\x23\xbf\xd5\x22\xa9\x28\x0a\x59\xf5\xd3\x48\xf6\xb5\x1b\x6d\x67\x6d\x41\x70\xad\x29\xba\x36\x22\x2f\x97\x77\x8b\xaa\xbd\x44\x02\xdd\x78\xae\x4b\x01\x71\xf6\xe9\xa5\x78\xa7\x38\x8e\x92\x24\x61\x8a\xf0\x35\xff\x62\x54\xbf\xb7\x34\xf1\x97\x23\x6a\x6a\x9a\x7d\xb9\x9a\xbe\xb4\x34\xbf\x5c\x4d\x5f\x9a\x9a\x4a\xf1\xb7\x6b\xc2\xa5\x42\xbe\x8c\x42\x1c\xa9\x74\xa1\xc4\xf8\x54\xe2\xed\xe3\xb9\x6c\xbc\x3f\x09\x07\x55\x17\x5c\x37\x99\xe6\x7e\xd0\xa1\xf6\xe2\xa9\xa3\x0f\x31\x7b\x30\x68\xc5\xa3\x4e\x8a\xf2\x08\x09\x16\x17\x1a\xcf\x04\x73\x93\xcf\xea\xd8\x4a\x22\x8b\x17\x1f\x14\x10\x3d\x21\x3d\x51\x9a\xd2\x8e\xa4\x5b\x2a\x29\x65\x4d\xaf\xe9\x27\xe8\x22\x37\x60\x5e\x9f\x04\x5b\xf5\x38\x17\xeb\x9e\xde\x92\xef\x34\x5d\xc8\x1a\x3b\xf3\x78\x12\xb4\xb6\x88\x56\x94\x40\xbb\x45\xe4\x65\x96\x25\x49\x42\x56\xab\x40\xf6\x80\xbd\x81\x25\x7b\xf9\x88\xc4\xb2\x0f\x42\x8e\x94\x99\x58\x3d\x58\x64\xd5\xe0\x88\xb5\x76\x5e\x91\x7f\xf6\x7f\x71\x3a\xbd\x79\xa6\xaf\xe8\xf6\x68\x52\x0b\xc1\x0e\x5f\xe3\x3f\x7e\xf3\x0c\x05\x01\x5c\x8f\x62\x84\x87\x09\xb4\x21\x72\x1a\xd6\xc0\x3e\xc3\x06\xf0\x8c\xa3\x71\x8b\x77\x6d\xb4\x94\xd6\x14\xf5\xa4\x00\x06\x43\xac\x80\x3d\x78\xb1\x1f\x85\x44\x2a\xf5\xf5\x86\x3c\xd2\xef\xe1\xfc\xf6\x36\x35\xb5\x08\xbc\x24\x11\x7b\xf7\xd2\x8f\x5a\x2b\x47\xc3\xb9\xa3\xed\x6a\x12\xf1\xf1\x29\x4e\xb5\xf7\xa3\x90\xd7\x6b\xd9\x59\xb7\xa2\x71\xeb\x66\x58\x70\xbf\x40\x22\x18\x73\x96\x70\xc4\x93\xf1\x24\x42\x72\x0c\xfd\xa0\xef\xa2\x95\xcc\x4c\x81\xca\xbd\x39\xff\x3a\x05\x4a\x21\xdf\x5b\x66\xb6\x9e\x95\xe4\x75\x56\x52\x9a\x44\x60\xb0\x85\xe0\x63\xe2\xb2\x92\x44\xc3\xe6\xf6\xd3\xb0\x51\x0f\x6b\x21\x8c\x14\xa8\x9b\x98\x13\xca\x23\xee\xdc\xde\x3c\x61\x3f\x72\xb1\xe4\x50\x9d\xc9\x88\x30\x80\xe7\x39\x73\x30\x8d\x06\x83\xd4\x9f\x9b\x0a\xd9\x2f\xc4\xd1\x6a\x15\x52\x15\x40\x07\x11\xcd\xb3\x47\x12\x8b\x1e\x11\xf1\xf7\x13\xb8\xca\xa2\x5c\xf8\x8c\x9e\x48\xed\x80\x72\x65\x27\x3c\xe4\x55\x84\x76\xa4\x72\x50\xb1\x2b\x1f\x9f\x46\xe2\x24\xe5\x37\x22\x97\x0c\x70\x18\xa1\xed\xdd\x67\x3b\x52\xa9\x27\xe9\x35\x62\xe9\x6f\x48\x8f\xe4\x9a\x9e\x24\x07\x26\x81\x50\xbd\x65\x52\xc8\xbf\xaf\xee\xfd\xf2\x60\x01\x9b\xa5\xdc\x80\x82\xa1\x77\x0e\xda\xc1\x93\x85\x00\x69\x39\x2b\x93\xd2\x3c\x36\x0a\x10\x7b\xb3\x12\x5c\x93\xe7\x49\xd2\x9a\x9c\x7b\x8f\x96\xe3\xb1\x04\xaf\xa7\x48\x92\x24\x37\x76\x42\x65\xa3\x1d\x24\x92\x96\x42\xe4\x5f\x60\x2f\x25\xf5\x50\xde\x2e\xf8\xec\xb3\xa3\x3e\x9b\x89\xda\x51\x65\x89\x51\x48\x10\x77\xf7\xd2\xa8\xc9\x72\x18\xe5\x53\xb2\x99\x7c\xf8\xe5\x17\xb5\x67\xe7\x6e\x35\x78\x4d\x6b\xc9\x68\x3c\x11\xcb\x90\x26\x24\x5e\xd2\x65\x18\xe9\x1d\x2b\xec\xb0\xcd\x7a\xc1\xad\xe7\x2c\x17\x72\xa6\xf1\xc1\x4d\xb6\x76\x51\x9e\x90\x31\xd7\xe6\x2e\xb9\x2b\x87\x93\x79\x98\x0b\x09\x38\x49\xc4\x84\x48\xb6\x76\x7a\x57\x0c\xa7\x1f\x2a\x21\x8b\x02\xca\xb7\x12\x46\xb7\x76\x95\x30\x0a\xe0\x18\xbd\xfa\xf9\x41\xc5\x2a\x71\x74\x84\x91\xb2\x6f\x3c\x20\xf3\xf9\x53\xa6\x07\xdf\x7c\x9a\xc8\xd8\xc3\xee\x3b\xbe\x7e\xea\x98\x17\x34\xda\x23\xde\xde\x94\xb9\xb7\x45\xab\x69\x0c\x9a\xc4\xd3\xb9\x74\x98\x36\x53\x8d\xac\x9d\x75\x4a\x39\xf9\x6f\x9b\x73\x35\x7b\x79\x92\xf0\xc6\x94\xe3\x8e\x08\xe7\xac\xf0\x96\xfe\x2c\xdf\x13\x7c\xda\x28\x6f\x8f\x2b\x81\x71\xd5\x3a\x5a\x39\xaa\x94\xf1\x96\x11\x8e\x51\x52\xb2\xd5\x4a\xe2\xc4\xaa\xde\x0e\xb9\x38\x65\xcc\x91\xdc\xeb\x34\x82\x63\x7b\x73\x45\x6c\x34\x03\x29\x47\x6d\x34\x26\xe6\x8c\xf2\x55\xca\x2c\xb7\x3a\x6f\xf0\x06\x9e\xe3\xbe\xed\x88\xa3\x70\x6b\xc3\x08\x1a\xe2\x8e\xbf\xa3\x53\x62\x8a\x1d\x02\xa9\x41\xc5\x66\x31\xc5\xce\x5c\xfe\xec\x73\xe7\x31\x17\xf3\x38\xf8\xbf\xe2\x39\x10\x4b\x10\xa5\x5e\x8b\x61\xff\x5e\xc2\xad\xdd\xe9\x48\xb0\xb4\x09\x1f\xef\x4c\x50\x9e\xf0\xf1\xae\x9e\x30\x63\x86\xf2\x24\x5f\xad\x82\xb4\x98\x06\x62\x43\xa9\x42\xd0\x69\x51\x08\xbb\x34\xda\x6c\xf3\x2d\xa2\x3d\xd7\xac\xcd\xf0\xb6\x85\xee\xcb\xc8\x8b\xff\xaa\x93\xad\xe9\x72\x62\x17\x88\xdc\x9a\xb8\x47\x45\xc8\xc7\x74\x82\x8a\x24\x15\x8d\x2b\x93\x74\xbc\x3b\x41\x99\xe4\x99\xc0\xf4\x88\x49\x3d\x8d\x99\xe0\xc6\xb1\x4c\x46\xd6\x2e\x22\xd0\xab\x89\xc9\x99\xa9\xad\x2c\x98\xe1\x62\x2a\xba\xbb\xdc\xdb\xde\xfd\x63\x36\xca\xb4\x92\x51\xec\x6c\x51\x15\x16\x28\xed\x5c\xe6\x3d\x67\xff\x9a\x19\x55\xf1\x1b\xca\x1c\x65\x2d\x89\x20\xe4\x55\x28\x98\x28\x3d\x89\xa7\x75\x79\xd0\x5c\x3f\xac\xbd\xb1\x68\x47\x0c\x6d\xdf\x5f\x80\x4c\xb9\xc0\xec\x1a\x77\x7d\x94\xca\xfa\xae\xaf\x77\x38\xfd\x70\x59\xe0\x0e\x9f\xca\xaf\x66\x07\xa3\x2b\xb5\x21\x50\xad\x03\x94\xfa\x08\xc9\x77\xaa\x75\x1b\x93\x96\xd9\xd6\x52\xbe\xfc\x05\xa7\x1f\xce\xf1\xa6\xb7\x54\xa4\x8e\xeb\x0a\x83\xe3\xee\x62\x00\xd7\x7c\x78\xf6\xc3\xe1\x1e\xd3\x29\x47\x06\xc2\x4b\xa6\xa6\x5d\xd3\xc5\x1d\xd0\xcd\x8c\xfb\xcd\xc6\xc5\xeb\x1c\xc3\xee\x0b\xfe\xb2\x79\x26\x49\xce\x41\x72\x0d\xf6\xf8\xe1\x60\x4b\xcb\x22\x9d\x37\xd7\xb8\x14\x1f\xf0\x7d\x11\x32\x7d\x74\xe5\xae\x59\xb8\x8e\xe0\x22\xce\x2e\x2c\xf8\x0b\x36\xa6\x13\x7b\x4f\xf4\x29\x92\x85\x6c\x36\xe0\x49\x7a\xbc\x0f\x98\xae\x94\x4c\xb6\x5a\x71\xc7\x11\x81\xad\xeb\x4e\xb5\x78\x3a\xd5\x2e\x5f\x1d\xaa\x5f\x05\xc9\x51\xca\x12\xee\x51\x96\x70\x7d\x23\x80\x7b\x2e\x36\x8b\x3b\x0c\xdc\x3b\x0c\x80\x9f\x32\x41\xd2\x99\x64\xcc\x0c\x1f\x81\xab\x75\x3d\x62\xf6\x84\x7f\xb3\xff\x88\x87\x2f\x50\x2b\x6f\x4f\xfd\x75\x57\x9b\x99\xd8\xd8\x78\x1b\x0b\xd1\xcc\xb9\x51\xad\xf4\x29\x69\x50\xeb\x2d\x12\x48\x3a\x9b\xf9\x8e\x5a\x43\x07\x2e\x10\x31\xb2\xce\xaa\x5c\x05\x89\x5d\x9f\xcb\x09\x24\xcb\x85\x98\xbd\x3e\xb5\x94\xc3\x4d\x70\x82\x0e\xbf\x19\x15\x42\x7b\xf3\xcb\x6d\xd7\x7d\x86\x31\xca\xb6\x01\x04\xb3\x0b\x8b\x4d\xab\x10\xaf\xd2\xe9\x87\xab\x92\xe5\x5d\xb0\x6a\x5f\xc4\x39\xea\x75\xc9\x18\xce\xf9\x59\x99\x1f\x53\xba\xf4\x78\xb6\x53\x15\x4d\x0a\x04\xcc\x7f\x52\x21\xba\x23\x1c\x5f\xe1\x6b\x52\x83\x3e\x2d\xe5\x2b\xc9\x77\xe3\x7c\x56\xff\x06\x21\xf1\x80\x5b\x55\x71\x32\x3d\x05\x95\xe6\xa3\x52\x97\x95\x35\xbf\x5d\xb8\x20\x3f\x57\x29\x66\x17\x64\x81\x59\xe1\xa5\x72\x93\x16\xf2\xab\x92\x01\xd2\x7c\x8a\xb3\x76\xfa\xb2\xf6\x45\xa6\xcd\x52\x21\xed\xfb\x88\xc2\x97\x8e\x7a\xd1\x7c\x8a\x3f\x4d\xc4\x70\xef\x21\xc5\x6e\xe0\xec\xf1\x76\x6b\xe0\x71\x99\x17\x37\x64\xce\x1d\x93\x00\x64\x3b\xeb\x34\x9f\xda\x0e\xe3\xb5\x4e\x3e\x6d\x54\xac\xd5\xd1\xb5\xbc\xf5\x46\xe5\xf8\xe3\x27\xca\x4d\x1b\x36\x0a\xd4\x5b\xbb\xa2\x25\xf5\xbe\xe5\xce\xa8\xf9\x16\xab\x1e\x37\x15\x41\x65\x86\xaf\x68\xd9\xd5\x4e\xfd\xb1\xa3\x8d\xfc\x86\x51\xce\x3b\x26\xa3\xfe\xd8\x91\xf7\x8a\xe4\xb3\x04\x9b\xc8\xa9\x67\x65\x9e\xe0\xd8\xae\xd8\x04\xc7\xff\x2a\x71\x89\x0b\x91\x86\x15\xb7\x4b\x70\xc5\xfb\x6f\xf1\xaa\xce\x79\x88\x43\x46\x5d\x70\x87\x41\x30\x04\x4d\x17\x4b\xf3\x19\x5d\x84\xd1\x50\xbb\x2e\x85\xc0\xf2\x4a\x45\x7a\x10\x07\x28\x08\xc4\xee\xd4\xa4\xab\xc3\x2a\x8d\x6d\x08\x5a\xe5\xac\x7c\xc1\xd2\xbc\x20\xe6\x1d\x78\x76\x06\x28\x00\x7f\x90\x33\xfd\x4b\x87\xbf\x44\xe9\xa4\x67\x6a\xaf\xa3\x2b\x89\x11\x36\x6c\x54\x58\xa0\x07\xf5\x08\x25\x8f\x6c\x81\x34\x7f\x25\xb6\x81\x9a\x56\x8b\x26\xb8\x42\x34\x3f\xcc\x67\x0d\xb1\x84\x26\x1c\x01\x5b\x3f\xcf\xca\xe2\x66\xbf\xb8\xcf\xa7\xa7\x57\x05\x66\xb7\x98\x15\x82\xd1\x17\x99\x44\xf3\x2e\x64\x70\x0c\x16\xd7\x7e\xeb\xaf\x27\x98\xdf\xd0\xd9\x28\xa0\xb9\xc2\x32\x01\x6a\x8d\xa2\x74\xa3\xb7\xc0\xb2\x05\x6f\x25\x49\xba\x5a\xad\x29\x1b\x81\xd7\x93\xe3\x32\x96\xb9\x73\x83\x95\xb9\x6f\x5a\xd4\x26\x40\xa9\x05\x64\x69\x06\x03\x40\x5d\xae\xac\xec\x90\x13\xbb\xaa\x9f\x9e\x3b\xbd\xa6\x3d\x35\xeb\xbe\xde\xaa\xdc\x8c\x32\xab\x53\xce\x93\x9d\x17\xf9\x4b\xfc\x22\x07\xe7\xc3\xdc\xa5\x9c\x5b\xca\xf5\x2b\x10\xae\xaf\x40\x58\x14\x55\x0d\xd6\x47\x79\xbe\x7f\xa9\x48\x3f\x5f\x23\x38\xdf\x53\xc3\xf7\xa8\x26\x7d\xa9\xd8\x3d\x79\x77\xec\x9e\xa8\x97\x37\x40\xe6\x0a\x85\x33\xf5\x26\x9d\x72\xca\xee\x65\x1b\xba\xe2\xfa\xe4\x91\xbe\x7b\x75\xb8\x1f\xd2\x18\x1f\x08\xf1\xb4\x66\x78\x54\x02\xc1\xb8\xca\x47\x03\xec\xf1\x49\x61\x37\xbf\x62\x48\x9f\x8c\x4e\x93\x3b\x84\xe3\xbb\xe4\x10\x7a\x7a\x9a\x2e\x70\x46\x7e\xc7\xc9\xa9\xf8\x99\x16\x37\x98\x89\x5f\xe7\x70\x20\xa9\x4f\x1f\xc5\x0f\xb0\x07\x9b\xdf\x27\xfb\xa0\x14\x9b\x61\x56\x4c\x29\xc3\xc9\x07\x48\xb8\x24\x3c\x85\xa4\xef\xd6\x48\xb0\xd7\x98\xcb\x58\x59\x9b\xdb\x9b\xdb\x2c\xeb\x85\xe3\xe2\xe9\xa4\x0b\x97\xb4\x9a\x02\xcf\xc6\xfd\xcb\xc9\xb3\x6b\x75\x07\x96\xc7\x00\x90\x16\xee\xe2\x6f\xbd\x37\x78\xa7\xd2\xcc\x40\x9e\x51\x04\x05\xdb\xd2\x0d\x3e\x4d\x9e\x85\xbf\x6d\xaf\x7e\xbb\x5c\xfd\x16\xaf\x7e\x2b\xa2\x61\x18\x47\x7b\xcf\xae\x51\x91\x3c\x0b\xff\x67\xf5\xdb\xb3\x28\x1c\xef\x6f\xff\xff\x26\xd1\xb3\x6b\x54\x6e\x54\x8e\xbd\x51\x4e\xdb\x0b\x5b\x2f\xc3\x3d\x16\x73\xfa\x7e\xb9\xc4\xec\x75\x5a\xe0\x30\x1a\x05\x41\xe5\x1c\xa1\x45\x07\x65\x4e\x8f\xe9\x9d\xce\xa3\xae\xdd\xb2\xe4\xd9\xff\x88\x16\x5c\xaa\xaa\xa3\x69\xf2\x2c\x8c\x23\x6f\xa3\xe6\xaa\x51\xab\xdf\xe2\x28\x1c\xa7\xdb\xbf\x43\xbb\x66\xeb\xdb\x65\x15\x00\x9d\xad\x09\x2e\x83\xa1\xa7\x45\x88\x25\xed\x25\xa1\x87\x74\x18\xe6\x7b\x79\x2b\x4f\x54\xa1\xdc\x2a\x29\x9f\x05\x5e\x19\x55\x48\xa8\x20\xa6\x9a\x0e\xcb\x10\xb7\xbd\x37\x45\xcc\x89\xc3\x2d\x3d\xe2\x9f\x05\xf6\xfb\xbc\xb3\x77\x9d\xba\xa8\xde\xbd\x49\x9e\x41\x47\xfd\x36\x9b\xa8\x99\x30\x14\x5d\xb6\x4c\x9e\x89\xfe\x2d\x86\xcf\xae\xd1\xe2\x89\xd3\xe2\x06\x05\xdf\xec\x5e\x7e\xf3\xdc\xa9\xd1\x12\x05\x97\x41\xd4\x1a\x5e\x74\x6b\x27\xa1\xa8\x43\xb9\xb3\xf3\x7a\x67\xfb\xb7\x72\xe7\xf9\x77\x6f\x60\xe4\xee\x9f\x58\xf4\xed\x13\x5a\x7e\xdd\x6a\xb9\x28\xf1\xea\x89\x25\x5e\xdb\xc6\x36\x5b\x57\x8b\x5c\x6e\x43\x08\xef\xf4\x5a\x44\x9e\xfd\xd7\xff\x0d\xc7\x3b\xdb\x7f\x9b\x0c\x61\x16\x37\x54\xf0\xea\x3c\xd8\x5b\xa6\xac\xc0\x47\x39\x0f\x73\xb4\xbb\x13\x6d\xef\x8e\xd8\x70\x88\x68\x42\x8c\x8a\x78\x8f\x8f\xc9\x44\xeb\xcd\x94\x62\x57\xee\xff\x56\x7b\x40\xf7\xe8\x48\xa9\x55\xe8\x5e\x20\x99\xa2\x60\x64\x2e\x3e\xe8\x5e\x10\x8c\xe4\x46\x24\xdd\x11\xdd\xd0\xd7\xae\xa9\xd5\x56\xfd\x52\x83\x45\xab\x55\x93\x4d\xf9\xfe\x79\x04\xc6\x07\x9b\x1c\xb5\x68\x37\x8a\xd0\x65\x88\x8d\x6d\x9d\xac\x43\x04\x77\xf2\x70\xf9\x61\xea\x71\x58\x1b\x07\xb9\x90\x9e\x89\x99\xea\xa4\x39\x75\xd2\x5c\x81\x91\x34\x76\xbe\x9e\x3b\x5f\x69\xeb\xeb\xc7\x9a\xa8\xd3\xfc\xba\xef\x7c\x9d\xb5\xbe\x7e\x70\xbe\x2e\x5a\x5f\xdf\x39\x5f\xef\xf5\x57\x26\x63\xc1\x36\xe3\x11\xc4\xb2\x03\x06\x03\xdf\x29\x43\x70\x11\xca\xef\xb6\x5b\xd1\xc3\xdd\xe8\x61\x4a\xf3\x39\xb9\x2e\xcd\x69\xe3\x9e\x3d\xbb\xe8\x8e\x11\x8e\xf5\x27\x79\x0c\xb7\x8f\xa2\x43\x05\x39\x5d\xa1\x8c\x4e\x3f\x8f\xe2\x17\xe6\x8d\xef\xf4\x05\x51\x55\x21\xcd\x0c\x7c\x91\x26\x7f\x34\x4d\xb6\x0c\xc8\x17\x21\x7c\x6a\x09\x6b\x56\xe6\x8b\xd0\x3d\x37\x74\x2d\xeb\xf3\x45\x08\x7f\x30\x84\x35\x83\xf5\x45\xc8\xee\x5b\xb2\x86\x37\xfb\x22\x84\xdf\x69\xc2\xe0\xfc\xd2\x6b\xb1\xc8\x5e\x0e\xf8\xab\x69\x70\x2d\x0f\xd7\x88\xea\x83\x2b\xa9\xea\x6b\x7d\xb5\xdc\x42\x2d\x85\x57\x45\x3a\xc6\x93\xca\x44\x4b\xd2\x02\x81\x06\x0b\xc0\xf9\x94\x82\x12\xe1\xab\x35\xee\x48\xb9\xcc\x10\x9a\x1f\xca\xc2\x36\x0c\x74\xab\x62\x02\xcc\xe7\x98\x25\x58\x02\x8f\x89\xfd\xea\x1d\x2d\x92\x1d\x05\xa2\x28\x58\xf5\x9d\x75\xaa\x69\xd9\xbc\xf6\x05\x01\xfe\xfe\xf9\x9f\xfe\xe4\x20\xfe\x81\x3a\x22\x0c\x4e\x97\x22\x79\x5f\xd0\xe8\xd3\x5b\xcc\xfa\x7f\xdd\xbe\x22\xbc\x88\xfb\x3f\x50\xde\x07\x9c\xbf\x58\x83\xd0\xc9\x8a\x29\x53\xaf\x15\x6f\x1d\x62\xdb\xcf\x5f\xbe\xfc\x6b\x54\xaf\xb6\x9b\x51\x7b\x34\xd8\x5b\x88\xe4\xf9\x0b\xd6\xbe\x46\x72\x71\x42\xdc\xbd\x8d\xcc\xc3\x20\x2f\xc5\x9c\x75\x00\x43\x06\x83\xfc\xfb\xef\x9e\xff\xed\xbb\xbf\xfd\xf9\x2f\xcf\xff\xe6\x6d\x1f\x66\x69\x3e\x93\x6d\xfb\xf6\x79\xad\x71\x79\x47\xe3\x72\x09\x88\x2e\x3b\xbb\xdd\x82\x0a\xf1\x78\xd9\x34\x8a\x97\x9d\xbc\xbd\xab\x71\xdb\x65\x8e\x31\x1e\xee\x4e\xda\x95\xba\x60\xf7\x24\xbf\xee\x73\xda\x07\x3a\x7d\xaa\x2a\x49\xf2\xfe\x92\x2e\xcb\x2c\xe5\x78\xd6\x2f\x32\xca\x21\x8c\x32\x4e\x67\x7d\x3a\xef\xa7\x7d\x86\x41\xe7\x23\x3f\x35\x6a\x0e\x25\x25\xdc\xd4\xed\x17\xc2\x6f\x5a\x4c\xfa\x7f\x42\x0d\x51\xfd\xd5\xf3\x49\xc2\xcc\x15\x86\x67\xe1\xf0\xe6\xf2\xcd\xe8\xdd\x76\x86\x6f\x71\xf6\x15\x17\xf0\x39\x4f\xa7\x1f\x12\xf1\x97\xb2\xb4\x7e\xfd\xda\xb5\x7a\xd5\xe2\x4d\xc5\x31\x9d\x8c\x27\xb2\x95\xa0\x97\x5e\xbb\x5a\x9b\x17\x49\x0e\x1a\xad\xc8\x8c\x14\x84\x27\x90\x15\x0b\x80\xbb\xb8\x45\x26\xd9\x70\xd8\xc3\x59\x81\xd5\xa2\x61\x63\x3e\xe9\xd9\xf2\xf3\xca\xbd\x39\x02\x4a\x63\x3e\x11\xfb\x8b\xbc\x96\x62\x78\xde\x79\xcf\x24\x53\xe3\x09\xa4\x64\xee\x95\x0b\x76\x1b\x3c\xc6\x13\xa7\xce\xb6\x68\x1b\x39\x5b\xf7\xa4\x27\x5c\x5d\x7d\x0b\x6c\xf8\xf4\x8d\x75\xc0\x82\x5b\x3c\x4d\xf0\xba\x9e\x04\x7c\x50\xcf\x71\x21\x26\xb5\x8c\x7e\x20\x68\x18\xa3\x13\xd1\x22\x78\x7e\xc3\xa8\x63\x73\xca\xd7\xe7\xe3\x4e\x46\x27\x93\x23\x00\xfb\xb3\x21\x26\x33\x4e\xe9\xb2\x69\xf1\xa8\x93\x8a\x31\x31\xcf\xb2\xc7\xe1\x5c\x3f\x4b\xef\xba\x72\x60\xb5\xe0\xaf\x31\xaf\xa7\xaa\x0f\xa2\x25\xd8\x02\x52\x33\xf5\xd4\x78\x6a\x22\x55\x86\xf3\xae\x98\xe8\x36\xa9\x33\xb2\x62\xad\xb0\xe6\x32\xcd\xe9\x6c\x3d\x2c\xb8\xc1\xee\xe9\xf2\x34\xf8\x12\x4c\x06\x93\x50\xc2\xaf\x4a\x92\xcd\x30\xeb\xc0\xa8\x89\xe7\x94\x29\xd8\x61\x79\xbf\x20\x8d\x5d\x11\x8e\xdf\xd2\x19\x3e\x38\x3d\xb9\x60\x18\xbf\xa6\x76\x6f\xaa\xab\x37\x6b\xfa\x11\x3d\x97\x99\x33\x93\xb0\x63\x1f\xcf\xa3\xd5\x0a\x6e\x84\xa5\xa7\x58\x2e\x38\x5d\x5e\x28\x28\x6f\x86\xb0\xc5\xc9\x6d\x4d\xf1\x5c\xe2\x10\xbf\x2f\x70\x86\x0b\xed\x70\x5a\x8f\x6a\xa9\x43\x78\xb7\x3e\x36\x66\x84\x86\x69\xad\x27\x87\x4b\x2a\x28\x65\x9f\x73\x46\xae\xca\xba\xef\x10\x0c\x09\xae\x7d\x86\x89\x5d\x21\x56\x85\x2c\xf6\xf4\x93\x98\x1e\x5d\x5d\x98\xb7\x00\x94\x9c\xde\xd3\x16\x6f\xda\x92\x3d\x14\x6b\xde\x0b\x91\x2c\x7b\x33\x72\x86\x3a\xa3\xd3\x0f\x07\x78\x09\xe0\x80\xdc\xdb\xcd\xb9\xee\x66\x92\xe4\xed\x6e\x26\xf1\xe5\x25\x5d\xe2\x1c\x08\x35\x91\x9a\xd4\xd6\x8c\x65\x87\xc5\x3c\xbd\x7e\x9b\x2e\x30\x70\x26\x17\x47\x17\xc7\x87\xc1\x16\x38\x14\x07\xe7\xaf\xcf\x8e\xde\x5d\x98\x5f\x17\xbf\xaa\x4f\x5a\xb1\xa1\x00\xb1\x5b\x75\x1e\x0e\x35\x9a\x78\xba\x5c\xe2\x7c\xf6\x9a\x2e\x60\x64\x82\xff\x1a\x5e\x8d\x82\x21\x1b\x06\xff\x15\x44\x95\xb3\xff\xb9\x95\xb5\xd3\x2c\xaa\x90\x68\xc6\x34\xa3\x05\x7e\x62\x3b\xea\xb4\x2d\x05\x87\x38\x7a\x5a\x5b\xb7\xb7\xbb\x5a\xdb\xd5\xd6\x6d\xa7\xad\xb2\x25\x32\xc5\x8f\x17\x27\xc7\x49\xdb\x40\xf5\x91\x21\x49\x12\xb0\x61\x54\xd5\xd4\xbf\xa0\x9a\xe2\x87\x31\x8e\xa9\x35\xdc\x16\x58\x5b\xbc\x6a\xda\x74\xd4\xfb\x3a\x5b\xb0\xff\x0a\x22\x59\xf6\xfe\x2b\x5d\xc0\x83\x36\xdb\xd2\x56\xc1\xc1\x4b\x99\x88\x7e\xbf\xbd\x1b\x05\x5c\xb0\xb3\x89\x3a\x54\x42\x3a\xdc\x45\x74\xf8\x6d\x04\x5e\xe9\xc1\x4b\x7e\x45\x67\xf7\xdf\x07\x43\x3e\x0c\x5e\x3e\x53\x3f\xa2\x2a\x80\x1c\x7b\x1d\xd5\xe8\xff\x57\x10\x8d\x36\x6f\x4e\xfa\x58\x73\x9c\x93\x8d\xc5\xaf\x69\x3e\x65\x98\xe3\x57\xb4\xcc\x67\x12\xa1\x5d\xf7\x3d\x22\x28\x8d\xdc\xf1\xba\xa8\x5d\xcb\xeb\x09\x21\xa3\x2d\x78\x47\x0d\xa5\x49\x98\x27\xa1\x5c\x1f\x91\xa1\xab\x94\x70\x21\x49\x18\xf0\x15\xe7\xe4\x2a\x23\xf9\x75\xb4\x97\xc7\x59\x5a\x70\xc0\x47\x1f\x91\x78\xc9\xf0\x2d\xa1\x65\xa1\x3f\x6b\xbd\x9e\x99\x06\xb4\x36\x0d\xa8\x3b\x0d\xe8\x9e\xaf\xc3\x44\x03\x6a\x1d\x36\xda\xa0\xe7\xc3\x74\x30\xf8\x16\x2c\x5e\xc5\x19\x78\x71\xbf\xc4\x2a\x6c\x53\x3b\xfd\xea\xbf\x00\xdf\x78\x83\x82\xa1\x5f\x61\x35\x7a\x36\x7e\x6d\x5a\xaf\x42\x41\x99\x5e\xcd\x31\x9e\x15\x87\x1f\x39\x4b\x5f\x8b\x9c\x62\x4a\xad\xf9\x9c\x6c\xed\xd6\xea\xe2\x96\xe6\xac\xfe\x68\x93\x44\xa2\xb6\x62\x5f\x6a\x55\xd6\x9c\x8a\x7a\xda\x0f\x06\xc1\xc5\xab\xd3\x83\x5f\x83\xad\xc4\x3b\x25\xc4\xf7\x1f\x0f\xf7\x0f\xd6\x7d\x7f\x73\x7a\x7a\xd1\xfd\x5d\x36\xda\xa9\x4d\x18\xc0\x42\x0a\x9a\x48\xff\x24\xbf\x6e\xf7\x89\x92\xbb\xe1\xe2\x5d\xe7\x07\x4d\x70\xbd\x1f\x1c\xf2\xb5\x71\xab\x94\x6f\xd4\x19\x5e\x50\xcf\xb9\xac\xee\x41\xac\x31\xfd\x60\x10\xe6\x89\xbc\x7e\x77\xb6\x9a\x19\x5d\x80\x2f\x47\xfd\xb8\x0e\xa4\x01\x71\x10\xf5\x68\xfd\x54\x0e\xc4\xca\x0d\x10\x8b\x10\x89\x49\x5e\x60\xc6\x5f\x49\xe0\x4e\x8e\x28\xca\xeb\x15\x6f\x55\xce\xad\xbe\x44\xe1\x43\xb9\x38\xdf\xdf\xe2\x3b\x95\x42\x71\x53\x51\x93\xe5\xa3\xa0\x4a\x30\x51\x4f\xbc\xd7\xad\x2e\x72\x4a\x07\x43\x08\xa1\xe7\x9d\xdf\xb7\x0b\xf7\xd7\x1d\x61\x78\x1b\xe0\x76\xb9\xfb\xda\x28\x75\xec\xab\x25\xa3\xd7\x2c\x5d\x3c\x21\xdc\xcb\x27\xb0\x98\xaa\xb1\xc9\x25\xc2\xb1\x8e\xfb\xa2\x2e\xaf\xdb\x72\x1d\x62\x09\x8e\xc9\x4c\xfa\xf7\x60\x9e\x02\xf6\xf3\x95\x38\x0e\x51\x9a\xb0\xd5\x2a\x98\x66\x04\xe7\x7c\x3b\x18\xfe\x73\x38\x54\xbb\xd7\x03\x99\x8d\x52\x24\x52\x8f\x08\x92\xe3\xef\x5a\x8b\x28\x1c\x8d\x22\x61\xd2\xb0\xde\xc1\x56\x61\x88\x44\x23\x62\x04\xa4\xd5\x2a\xe4\xc9\xff\x3b\x3f\x7d\x1b\xc3\xe5\x48\x48\xa3\x08\x89\x2d\xfd\x28\xc4\x48\x16\x02\x35\x19\x71\x04\x68\x9a\x0c\xb3\x51\x51\x45\x55\xa5\xec\x96\xca\xeb\x16\x2f\x68\x8d\xef\x5b\x3a\xeb\xd4\xd1\x59\xd3\xef\xbf\xdd\xa3\xdb\xdf\x8e\x76\x22\x54\x24\xdf\xbe\x28\x5e\x52\x00\xb4\x4e\xc7\xc5\xf6\xb7\xae\xf6\xba\x98\x68\xf3\x9d\x32\xcb\x00\xcd\xa2\x94\x7a\x09\xe5\xbb\xc5\x70\x3a\xbd\x49\xaf\x32\x1c\x85\xc1\x89\x8a\xf4\xaf\xb4\x57\x27\x98\xa7\xb3\x94\xa7\xfd\x39\x65\xfd\x60\xc8\x34\x46\x31\xe4\x9c\x91\x29\x8f\x42\x1b\x7c\x27\xa6\xcb\xc2\x17\x55\x00\x99\x93\x3a\x1d\xe7\x93\x5e\x71\x47\xf8\xf4\x26\x64\xa0\xca\x8a\x1e\xa6\x69\x81\x03\x4e\x83\x51\x36\x66\x2a\x48\x1e\x1e\x52\xe9\xee\xd4\x83\x8f\xe4\xdb\xe7\xc1\x08\x9e\x24\xd4\xba\xfa\x01\xbd\xea\x66\xab\x65\x92\x01\xc6\xdd\xcf\x26\x60\x84\x8c\xd5\x1d\xd2\xc8\x4d\x5f\x70\x56\x4f\x6c\x14\xa1\x8d\x84\x32\x68\xdc\x76\x23\x3d\xdd\xab\xe7\x80\xfb\xad\x06\xfd\x6d\x10\xe9\x3b\x4a\x51\x43\x5a\x2b\xca\x9f\xde\x97\x12\xf0\x17\x9d\x84\x5b\x5b\xb5\xce\x58\x32\xb2\x20\x9c\xdc\xd6\xfa\xe3\x2e\xa4\x82\x53\x71\x92\xe9\x98\x0f\x6e\x2a\xa2\x22\xf5\x60\x36\xa6\x93\x5a\x83\x14\xdb\x29\x26\x4e\xbb\x4d\xce\xc7\x46\x55\xb3\xf4\xf7\xfb\x6d\x38\x1a\xd2\x9c\xb7\x32\x9e\xf2\x1b\xcc\x42\x2a\x51\x83\xc7\xa5\x8c\x2b\x99\x4d\xcc\x5a\x39\xaf\x2b\x08\x84\x6c\x86\xe3\x8c\x5e\xcb\xf9\xda\x90\x43\x25\x9b\x0c\x2c\xab\xe1\x69\xeb\xc6\xd9\x5d\x7e\xdc\x81\xd4\xd0\x26\xc1\x10\x4e\x10\xd0\x7b\x47\x91\xba\xe6\x16\x9c\xdb\xd0\x68\x7f\x82\x10\x58\xea\x28\x10\x35\x79\x77\xbc\xff\xfa\xf0\xc7\xd3\xe3\x83\xc3\xb3\xcb\x1f\xf7\xdf\x1e\x40\xb0\xf3\x5f\x98\xe0\x3d\x66\x5a\x56\xc6\xf1\xbb\x94\x09\x99\xf8\x40\x6c\x87\x60\x8f\x07\x1a\xb1\x99\x6c\x83\x4d\xd6\xfc\x7d\x98\x5e\x63\xd6\x7c\x79\x9c\xfe\x7e\xdf\x7c\xf7\x1a\xf6\x4e\xd1\xf7\xef\xe4\x56\x5d\x7b\x27\xe5\x16\xd5\x9f\xaf\xd5\x99\x92\xe0\x78\xff\xaa\xe0\x2c\x9d\x72\xe7\x95\x20\xee\xfc\x3c\x01\x28\x04\x91\xf4\xe2\xe2\xec\xfc\xf2\xd5\xf1\xe9\xeb\x9f\x5c\x91\xbd\x44\x59\xcf\xdb\x07\xdb\xbb\x28\xcc\x92\x72\xb5\x0a\xcb\xe4\xa1\x8a\xa2\x71\x16\x9f\x2e\x71\x6e\x02\xac\xe9\xe3\x7b\x67\x92\x04\xbe\x0f\x01\xca\xc6\x59\x7c\x40\x66\xaf\x6b\x52\xf8\xee\x24\x09\x9a\x2f\x4d\x52\xa9\x71\x38\x4e\xef\x69\xc9\x93\xe7\x32\xa5\xfb\x4e\x25\x84\xa0\x75\x98\x25\xdf\x8a\x14\xea\x47\xa0\x8c\xf6\x68\x7c\xba\x2c\x7a\xf5\xe6\x06\x83\x94\x73\x56\xc8\x24\x10\xc5\x7a\x63\x95\x9b\xb2\x59\x8f\xe9\x7c\x5e\x60\xae\xef\x21\x20\xcc\x61\x6d\x43\x55\x8c\x51\x99\x4f\x8b\x64\x3c\xd9\x5c\xc9\x69\x54\x58\x90\x55\xe1\xa2\x47\x4e\x29\x46\x9b\x28\x13\xe8\x6b\x83\x4a\x81\x7c\x90\xac\x63\x01\x8d\x9d\x6a\x83\x27\x9b\xa5\xc8\x24\x4c\x94\x21\x3a\xce\x27\x91\xd6\xf2\x54\xa1\x63\x7e\xb0\x74\x11\xbe\xf2\x04\x8f\x77\x27\xe2\xb8\x1e\x3f\x9f\x88\xc3\x7a\xfc\xed\xa4\xc7\x62\xfc\x71\xc9\x42\x12\x21\xba\x27\xbd\xf7\x60\x0a\x08\xee\x2b\xcc\x91\xd8\xab\x46\xed\xd7\x10\xe3\xcc\x8d\xff\xba\x78\x62\x39\xb3\xfb\x3c\x5d\x90\x69\xbd\x94\xfa\x4b\x5d\x86\x59\x00\x0d\x99\xbf\xd5\x6b\x6d\xf4\xb4\x5b\x07\x53\x4d\xe1\xa2\xe1\xbb\xfe\x7d\x64\xcd\x30\xd2\xd9\x2c\x0c\xc8\x3c\xf0\x9b\xf8\x8b\x43\x1b\xaf\x56\xbb\x00\x38\x67\x94\xd4\x8d\xab\x85\xf3\x5f\xdf\x5e\xec\xff\xbd\x7f\x78\x76\x76\x7a\x36\xea\xff\x1f\x32\xef\x33\xfc\xaf\x92\x30\x5c\xf4\xd3\xbe\x0c\x6a\xda\xd7\x5c\x81\x90\x93\xa5\xe9\xc7\xbd\xd8\x13\x8e\xe6\xe1\x43\xca\xae\x0b\xaf\xdb\x14\x74\x17\x1e\xef\x4c\x04\xdb\xcb\xa9\xc6\x35\x8a\xd0\x6e\x85\xc8\xfc\x82\xd5\x6f\x45\x05\x67\x7c\x4b\x3f\xe0\x73\x9e\x72\x32\x85\xcd\x26\x64\x82\x5d\x9f\xbf\x49\xb3\xa2\x96\x34\x1f\x0c\x7c\xa9\xf3\x48\xe3\x08\xca\x5e\x29\xf3\x0c\x17\xc5\x17\xec\x19\x49\xf0\x7f\xa5\x77\xba\x9b\xec\xeb\xa0\x8e\xbe\xac\xf5\xce\x1d\xa9\x63\x72\x7d\x66\xdf\x40\x80\xb1\xaf\xd0\x33\xb3\x72\x19\x36\x7b\xe8\xf9\xc6\xf3\x07\xed\x7e\xd6\x0c\x12\x0c\xae\xaf\x8f\x68\xf4\x40\x9d\xd6\x74\xb6\x45\x08\xd3\x1f\xf0\x3d\xc8\xd5\xe3\x9d\xc9\x78\x67\xb2\x47\x65\xf3\xf8\x78\x57\xfc\x8c\x46\x14\xf6\xdb\x77\x9a\xd1\x3a\xd3\xc0\xf9\x2a\x36\x33\x75\x7b\xe3\x79\x85\x84\x9c\xec\x16\x24\xb2\xf3\x23\x8e\xc1\x57\x35\x14\xe9\xff\x59\x2e\x96\xef\x61\xa2\x86\xc1\xe1\xf1\xf9\x61\x20\x5e\x8a\x32\xc0\x5a\x17\x92\x88\x3e\xb5\xfc\x59\x3c\x5f\xa2\x5d\xf1\x5a\x56\xfa\x82\x86\xc1\xd1\xc5\xe1\x19\xe4\xc3\x39\xc7\xec\x98\x14\x3c\x0c\x40\x27\x20\xde\x65\x42\x3e\x74\xd2\x40\xf0\x4b\x21\xe4\xbe\x3a\x3b\xdc\xff\xc9\x4d\x62\xb2\xf8\x46\xe6\x39\xd4\x8b\x2e\xc3\xe7\xba\xd6\x61\xf0\xe6\xe8\xed\xfe\xf1\x71\xad\x18\x4b\x14\x7f\x24\x1c\xaa\xa2\x32\xda\xf6\x74\x66\x56\xed\xcf\x07\x03\x5f\x1d\x9a\xa3\x4d\xf2\x6d\xac\x99\x81\x2f\xb7\x9b\x1a\xa2\x9f\xb7\x3a\xec\x15\xbd\xe3\x16\xee\x0b\x78\xe2\x20\x31\xca\x0b\x7a\xab\x9f\x0b\xb6\x92\x24\x1d\x0c\x82\xeb\x92\xcc\xe0\xf9\x29\xb5\x9f\x51\x2c\xa3\x0a\xf2\xf4\x03\xee\xa7\xfd\x7f\x04\x43\x36\xde\x99\x0c\x83\x7f\xf4\xa5\x68\x03\x8d\x80\xd9\x9a\x8f\xe9\xc4\x40\x3d\x7a\xd7\xf3\x77\xfe\x15\xdc\xd2\x7d\x84\x52\x63\xd2\xde\xcb\x10\xe0\x68\x34\xd2\xd6\x87\x73\x5b\x6c\x49\xdb\xea\x48\xde\xbe\x4d\xd9\x9a\xa3\x80\x1b\x9d\xb0\xe8\xdc\x54\xfa\xdc\x13\xcd\xdd\xbc\x4b\x59\xba\x28\xc2\x54\xe3\xea\x1c\x48\x9a\xe7\x53\xba\xc4\x50\xc3\x2b\x92\xcf\x6a\x2f\xe9\xfa\x7a\xd7\x09\x54\x38\x2b\x70\xbf\x63\xcf\xb6\xed\x71\x22\xad\x75\x35\xa3\x65\x31\x29\x7a\x5d\x6c\x75\x05\x10\x35\xec\xf1\x8f\x38\x5b\x62\x39\x26\xc0\xf4\x28\x95\xbb\x72\x2a\xc2\xb2\x0f\xb4\xa3\xff\xae\x18\x57\xd5\x8d\x86\x42\x48\x25\x7b\x93\x22\x8e\xb6\x54\x70\x88\x28\x42\xfc\xf1\xaa\x6a\x9b\x50\x3e\x18\x88\xce\xee\xf9\xaa\x4d\x06\x83\xbc\xa3\xce\x44\xd0\x00\x75\x9f\x56\xb2\xf6\xea\x23\x67\x6b\x6d\xdd\xcd\x3b\x2b\xcf\x44\xe5\xe1\x59\x6e\xb7\x80\x86\x82\x1e\x40\x45\x50\x8c\x30\x22\x79\x46\x72\x5c\x8c\x78\x55\x09\xfe\x5a\x6b\x87\x0a\xa9\x38\x92\x1f\x95\x49\x05\xbc\xd7\xd6\x14\xea\x53\xc2\xa4\xd5\xd3\xed\x7a\x1b\x85\xff\x0c\x56\x3e\x9d\xcd\x94\x16\xa7\x6d\x54\xb0\x50\x1f\x70\x17\xcf\xaf\x95\x78\x06\xe5\xc1\x2d\xd1\xf2\xb0\xe9\x9e\xe6\xfa\x15\xc5\xa8\x96\x79\x54\x97\x09\xd2\x49\x14\xda\x8f\x52\x32\x40\xf7\xff\x9f\xef\xcb\xfa\xb5\x0c\x86\xad\x68\xde\x34\x5a\xa6\x7a\x01\x80\x4e\x97\x05\x48\x6e\xf7\x74\xbc\x33\x49\x92\x64\x1a\xcb\xe5\x12\xb1\x84\x8a\x73\x22\x4f\xa8\x90\x64\x48\x42\x85\x24\x03\xa6\x29\x2a\xf1\x96\x48\xfc\x3e\xff\x90\xd3\xbb\xbc\x4d\xd1\x64\x27\xa0\x04\xac\x5a\x83\x2b\xad\xc0\xec\xf8\xaa\x9b\x15\x3d\xba\x4a\x17\xda\x1a\x74\xd9\x38\x03\x5e\x03\xd0\x44\xc5\x9e\x2d\x78\x54\x54\x2e\x58\x76\x2a\x09\x95\x49\x7b\x7e\xf8\x28\x95\x2e\xa5\xb2\x6a\xb6\x4a\x89\x98\x82\xe2\x75\x97\x10\x6e\x06\x7f\x6a\xd4\x18\xb2\xe4\x4c\x2a\x06\x38\x72\xbf\xce\x64\xef\x78\x2e\x2e\x5b\xe3\x6b\xb0\x01\xf4\xf5\x88\x26\x11\xb9\xf6\x00\xfa\x65\xaf\x5e\xca\xf6\xae\x1b\x51\x5b\x56\x45\xee\x3c\xb0\x5b\xc2\x31\x58\x0f\x52\x6d\xb2\xd6\x1a\x23\x61\xe2\xdc\x06\x45\x95\x84\x59\x91\x0a\x6d\xe5\xcf\x85\xd1\xf8\xe1\x03\xbe\x1f\x29\xfd\xe9\x05\xa8\xec\xba\xbc\x80\x9a\x35\xaa\xaa\x49\xa4\x4d\x52\xda\x8a\xa5\x6b\x68\xc8\xd5\x93\xbb\x1f\x54\xe5\xb3\xff\x88\xee\x97\x55\xb1\x87\x82\x33\x04\x70\x3c\xa8\x10\xd3\x24\xbf\x96\x8a\xa3\x4d\xc7\x45\x9a\x70\x7c\x81\xd1\x90\x15\x6c\x8e\x46\xd3\xb1\xc3\x32\x96\xf5\x4e\x9a\xd7\xe3\xdd\xe1\x64\x0e\xba\x87\x9b\x9e\x64\x47\xa6\xf1\x05\xfe\xc8\x9b\x88\x7b\x3c\xe6\xf8\x23\x0f\xc5\x9e\xe5\xb0\x2e\xd3\x58\xdd\xb0\xb6\x93\x4f\xd5\xd5\x6b\x3b\x87\x73\x8f\xe9\xc9\xe6\x7c\x0d\x6b\xf9\xde\x38\xf7\x82\xed\x7c\xb5\x5b\xc3\x5a\x3e\x1d\x83\xad\x99\x47\xf1\xdc\xb1\xbe\x83\x41\x3e\xdd\x10\xf0\x1d\x66\x10\xd5\x75\x81\xa6\x18\xe6\x88\x81\x75\x81\xba\x35\xf7\x70\xdd\x4a\x57\x2a\x7f\x4a\x3b\x58\x1d\xc3\x3b\xed\xeb\xe8\x6d\xa3\xbe\xdc\xd3\x8b\xfe\x22\xbd\x87\x6f\x57\xb8\x5f\x16\x18\x6c\x40\x21\x18\xb8\xe2\xd4\xe7\x94\x2d\xc0\xd4\xd3\x04\x7e\x0b\x53\x79\x82\x3a\xed\x95\x6c\xe6\x3e\xe7\x1d\x2d\xc6\x72\xdf\xc7\xf2\xd8\x00\x05\x18\x57\x2c\x19\xa8\xb7\x18\x22\x8a\xe7\xd3\x14\x0f\xac\xf2\xab\x49\x72\x11\x62\xb4\xb5\x2b\x81\x11\xdd\x39\x61\x55\x72\xcd\x1c\x4b\x5f\x8e\x0b\x56\x16\x00\x3b\xdc\x55\xc4\x4e\x47\x86\xc7\x8b\x6a\xe6\x3c\xb5\xd7\xc7\xdd\xfd\xd3\x13\xbd\xb3\x5a\x71\x21\x83\x9b\x22\xc0\xbe\x59\xa4\x86\x38\xfb\x70\x0f\x6d\xa4\x7b\x3d\xf3\x98\xaf\xe3\x0c\x85\x35\x03\xd2\x9c\x75\x78\xfc\xdd\x04\x30\xed\xf5\x55\xa7\x10\x52\xf4\x85\x9d\x76\x65\xda\x81\x30\x94\x5c\x31\xa5\x52\xb2\x78\xb0\x9b\xd5\x88\xa0\xa5\x10\x70\x30\xc7\xac\x18\xe5\xf1\xe1\xc9\xbb\x8b\x5f\x2f\xf7\xcf\xce\xf6\x7f\x95\x2c\x7d\x8b\x7d\x66\xa8\x94\x4c\x33\x15\x63\x54\x48\xde\xd9\x3b\xb4\x9f\xd2\x14\xb3\xd2\x4a\xcf\xa2\x92\x5b\xe9\x1b\xca\x2e\xd2\xeb\x90\xa1\x22\x42\x59\x52\xc6\xf2\xd2\x0e\x4d\x93\x32\x9e\x3a\x31\x0e\xd1\x5c\xbc\x30\x67\x8f\xb3\x06\xb3\xd5\x4a\x3d\x4d\x1f\x59\x8d\xa3\xfe\xeb\x34\x17\x8b\x6d\x4e\xf2\x59\xdf\x08\x36\xf6\x52\x73\xe6\xe9\xed\xd9\xa7\xf6\x36\x50\xbc\xa9\x8f\x67\x6f\xbe\x17\x4a\xc0\x0b\xd3\xad\xf6\x06\x28\xcc\x20\x6c\xb8\x23\x39\xda\x61\x9a\xa2\x39\x9a\x39\x03\x75\x33\x18\xdc\x44\xd1\x68\x33\x62\x2e\x99\x36\x11\x77\xb0\xd5\xad\xd4\x26\xdb\x88\x1d\xdc\x1e\xdf\x4c\x1b\xc8\xa5\xf6\x80\xc1\x3c\x04\xd5\x81\x57\xf9\xa7\x6b\xad\xea\x12\x12\xc4\x63\x7c\x9b\x66\xe7\x70\x54\x8a\x95\x98\x0b\x0a\x4b\xba\xd4\x42\x3b\x77\x54\x48\x35\xbd\xc1\x34\xfe\x95\xe0\x6c\xf6\x68\x73\x7a\x3c\xbe\x17\x09\x43\xd6\xd8\x07\xc5\x1e\x73\x2e\x06\x6f\xcd\xc6\x61\xf3\x8e\xeb\xc7\x9e\xbe\x4a\x5a\x9b\x77\xa6\x12\x85\xcd\x46\xb2\xc6\x11\x4a\x70\xce\xcf\xc9\x0c\x66\x46\x7b\x2f\x63\xea\x00\x16\x93\x5d\x82\x34\xba\xad\x00\xb3\xa7\xc7\x7b\x61\x4b\xf0\xe7\xa1\xa1\x73\x04\xb3\x1e\x3c\x1f\x59\x34\x18\xf0\xf8\xba\x4c\xd9\x0c\xcf\x24\xb9\x56\x5f\xc1\xf2\xd8\xf4\x00\x82\xbd\xe2\x3b\xb9\x57\xfc\xa9\xb1\xed\xd1\x08\xb6\x0b\x77\x1b\xcc\x92\x62\x30\x28\xc4\xa6\x30\x18\x94\x3d\x53\x43\xad\x7f\x14\x62\x43\x86\xa6\x51\x65\x22\xd2\x00\x7b\xe3\x28\x0e\xa4\x32\xa3\xf4\x5e\x39\xb6\x59\x8b\xa7\x9e\x01\xa2\x61\x8e\xce\xa4\x6c\x5d\x53\xb6\x8b\x98\x35\x52\xb8\x4a\xdc\x62\xa7\x4e\xac\x3d\x8f\xa2\x87\x46\x69\xee\xad\xa6\xb7\x30\x37\x81\xa7\x2c\x10\xc7\x55\xec\x15\x57\x03\xc9\xec\xa4\x1a\xd3\x89\x03\x51\x2a\xd9\x3d\xc2\xc3\x86\x67\xae\x1d\xf3\xef\xbf\xff\x56\xdb\x79\xfc\x65\xa0\x8c\x3c\xfa\x3b\x23\xed\xcb\x0e\x96\x00\xfd\xdd\x91\x0b\x6a\xf0\x16\x1c\x90\x42\x16\xc9\x8f\xcf\x47\x6d\xc4\x03\xf3\xf1\xdb\x91\x36\x22\x69\x90\xde\xda\xad\x93\xde\xda\x69\x50\x83\x3d\x5e\xd1\x90\xaf\x2a\xf8\xf5\x1d\xd8\x94\xf4\xff\xd4\x51\x25\x8d\x07\xd8\x61\x36\x03\xc1\x92\x9b\x37\xec\x57\x30\x1d\x0f\xbb\x45\x23\x58\xb8\x20\x4e\xa7\x24\x37\x6e\x69\x8a\xd5\xf9\xc1\x5d\x6f\x46\x4e\x4a\x4b\x4e\x68\x59\xd4\x3f\x32\x2b\x31\xb5\xe4\x24\xaf\xdb\x45\xc1\x67\x4d\x90\x64\x43\x41\xd4\x45\x72\xd4\x8f\x26\x2d\xb8\xde\x0e\xb6\x76\x9e\x9c\x63\x37\xaa\x14\xb4\x49\xc1\x9b\xda\x1a\xed\x08\x1a\x5f\x95\x24\x9b\x19\xa7\x01\x2b\x0e\x5e\x63\xae\xda\xee\x2b\x66\xaf\xbb\x23\x47\xdd\xdd\xa8\xd4\x52\xa7\x1b\x8d\x97\xb4\x83\x50\xa2\xac\x12\x85\xd5\x18\x29\x06\x87\x25\x4c\xab\x10\xc1\x01\x82\xfc\x2e\x0e\xa8\x35\x4a\x2b\x9b\xae\xe5\x47\x52\xf0\xd9\x31\xb9\x4a\x0e\xcd\x7a\x54\xa6\xa0\x8d\xdd\xda\xdf\x8b\x4e\x8d\xb5\x3a\xd3\x39\x2c\xb8\x4b\xa6\x61\xd1\x5e\x53\x07\xba\x64\xa4\x8e\xd4\xa5\xe2\x28\xf7\x7c\xea\x37\x55\x95\x4b\xad\xab\xb8\x92\xa6\x2a\x6f\x28\xd3\x8e\x3f\x72\x43\x69\x64\x73\xee\x4a\x9c\x8e\x8e\x6f\x70\xba\x44\x79\xc2\xe2\x45\x9a\x65\x74\x1a\x6a\xf8\x0a\xee\x41\xba\xe4\x63\xe2\x8d\x87\x4e\xf7\xa4\x4b\xe2\xbb\x2c\x9d\xe2\x1b\x2a\x6a\x13\xd2\x68\xa4\xfc\x14\xa9\xb9\xf5\x60\xb1\x60\xaa\x8a\x9b\x13\x59\x54\x8e\x70\x84\x72\xe5\xf1\xd3\xe4\x63\xbd\xc6\x13\xb5\x39\x11\x67\x94\x7e\x28\x97\x3e\x96\xcd\x85\x80\x56\x2c\x2d\xdb\x7b\x90\x0c\x31\x18\x93\x21\x97\x23\x56\x6f\xcc\x8e\x03\xbf\xab\x91\x5b\x98\xa9\x99\x32\x77\x63\x91\xaf\xda\xf2\x63\x97\xa7\x9c\xae\x37\x62\xd2\x3a\xcb\x0d\x3c\x2e\x41\x9f\x60\x3f\x35\x7d\xa5\x24\x0c\x49\x7d\xb5\x0a\x73\x99\x4d\x9d\x3c\x38\x8a\x90\x6e\x11\xae\x37\x87\xd5\xda\x52\x39\x35\xd5\xd2\xf7\x9a\xc9\xdd\xe8\x5d\x23\xaf\xeb\xd9\xad\xcd\xfe\x40\xea\xde\x9c\x8e\xbe\x5c\x41\x8f\x28\xd5\xb4\x2d\x5b\xb1\x5e\x89\xa3\x26\xaf\x49\xed\xea\xd5\x5a\xa6\x57\xa7\xa8\x69\x9f\xe5\x98\x59\x9d\x7f\x49\x65\x67\x4f\x2b\x46\xa4\xb9\xac\x58\x56\x52\x2f\x65\x60\xa4\x11\x49\x72\xeb\x61\xa1\xcc\x9f\x94\x03\x2a\xfc\x80\x6d\x43\x9e\x95\x09\xc0\xb4\x93\x3d\x15\x6b\xce\xa4\x1e\x91\xe1\xae\x3a\x1e\xac\xd2\x2b\x79\xb8\x49\x8b\xc3\xdb\x34\x1b\xb1\x58\x3d\x21\x55\xb6\x98\x03\x5f\x41\x0d\xe8\x68\xfd\x74\x17\x21\xee\x2a\x61\x41\xe1\x57\xdb\x9d\x7a\x2c\x2e\x78\xca\xf8\x71\x7a\x85\x25\x6f\x1e\xcf\xb1\x60\x3d\x5c\x3e\x6a\x37\x92\xc8\xd6\x66\x61\x5f\x48\x1b\xf9\x06\xb3\x85\x58\xbc\x6c\x1b\x08\x88\xd7\x52\x24\x12\x33\x2f\x9d\xb5\x29\xbb\xa6\x00\xea\x2e\xbe\xb3\x16\x9d\xec\x2b\x03\xf6\x55\xe9\x28\xec\xb5\x2c\x7b\x8c\x1b\x45\x4c\xc9\x38\xde\x01\x17\x72\x8f\xa8\x4c\x4d\x1f\x27\x1a\x52\xb3\x1c\x60\x9e\x3b\x51\xef\x3a\x14\x4c\xca\x55\xc8\xd5\xcd\xdd\xc8\x95\xb7\x3d\xda\xd9\x4e\x01\x1c\x35\x75\xb6\x23\x5c\x45\x15\x44\x76\x58\xd3\x75\x35\x8b\x8b\xb7\x07\x32\x1c\x51\x4d\x41\x69\x1b\xa6\xbf\xfb\x07\xac\xe0\x74\xa9\x27\x8c\xba\xd6\x64\x86\x67\xf6\xeb\x8f\xa9\xf1\xfb\x6c\x98\x8b\x9e\x03\x81\x8f\x8f\x62\x1b\x28\xe3\x4f\xdf\xb2\x91\xea\x3e\xff\xf1\xe4\x18\x21\x90\x84\x4b\x4d\x0e\x57\xaa\x50\x87\x70\xcf\xae\x33\xac\x6f\x83\xd2\x6e\xad\x8e\x3a\x73\xb0\x90\xe6\x8a\xba\x2e\x27\x4b\x0a\x57\x97\x93\xed\x85\x69\xa7\x1e\x03\x47\x28\xed\x50\x8a\x94\x48\xde\xf5\x02\xe7\xb1\xb5\x0b\xcc\x47\x34\xda\x8c\x96\x4b\xa5\x45\xa3\x52\x8c\xe0\xfe\xfa\xfb\x49\x98\x07\xbe\x0b\x4a\x0e\xb0\x94\x8f\x5d\x51\x42\x76\xdf\x25\xa5\xa4\x6b\x3c\x90\x25\x35\x5f\x42\x55\x8e\xdc\x68\x1f\x52\x3e\xc2\x48\xbe\x1a\xf1\x2a\xf2\x21\x29\xb8\x20\x63\x2e\x05\xed\x0a\x2f\x4b\x56\x40\x8e\x86\x97\xca\x6d\x70\x4c\x3e\xce\x27\xe0\x2d\x93\x72\x94\x26\x6c\x4c\x14\x85\xc9\x36\xed\x61\x59\x5c\x48\x51\x6a\x7a\xf0\xc3\xba\x73\xaa\x61\x0e\xa9\x6d\x63\x25\x32\x84\x7c\x56\xae\x27\x20\xcf\xa7\x1e\x08\x83\xd0\xf8\xb0\xcb\xaa\x4b\x87\x69\x09\x9d\x05\xcf\xa8\x71\x18\x56\x6a\x6f\x6f\x38\x98\x4b\x4b\x51\x25\x1f\xd9\xb8\x5d\x61\x1e\xc9\x60\x06\x52\xd2\xed\xad\x19\x4d\x31\x06\xb5\x9e\x56\xe2\x69\xd3\x7d\x43\x49\xab\x56\xf0\x75\x9a\xa9\xfe\x86\x18\xed\xb4\x44\x60\x7f\x32\xeb\xad\x3b\xde\x9d\x44\x75\xa9\x76\xa3\x3c\xce\x8f\xe7\x13\x2b\xe4\x7e\x2a\x05\xe7\xc7\xb7\x93\x08\x98\x38\xd1\x31\x27\xe9\xf4\x86\x34\xe2\x7e\x7e\x56\xff\xec\xee\x3c\xff\x6e\xb3\x2e\x12\x29\x3f\xa1\x97\x5a\xd9\x3e\xa5\xa3\xd6\x13\xf1\xf4\x55\x53\x04\x6a\xf0\x8f\xb6\x27\xc3\xe7\xdf\x45\xf5\xa9\xad\x67\xa9\x59\x42\xb5\x05\xa4\x30\x41\x34\x2f\x8c\xd9\x2d\x6e\x5b\x33\x78\x06\x7a\x7b\xd7\xcd\xf2\x0b\xe1\x37\x0a\xf3\xc5\xb7\x1d\x79\xf3\x5b\x06\x5c\x50\xf0\x4d\x84\x35\x7d\xa7\x8a\x07\xe5\x48\x53\x22\x86\x4d\xef\xcf\x7f\x45\x0d\x56\x45\x09\xdc\xa0\x41\x66\x78\x99\x32\x3c\xb3\x7b\xfd\xd6\xae\xd8\xe3\xb7\x76\xa4\x8c\xea\xf1\x7b\x76\x69\x3f\xff\xab\x93\xec\x3c\x9d\xe3\x35\x49\xff\xe6\x24\x3d\x50\x00\x00\x6f\x58\x7a\xdd\xf4\x26\xb5\x59\xbe\x75\x2b\xf1\xb6\xe6\xb8\x52\x4b\xb6\xeb\x24\xbb\x68\x40\x71\x3b\xc9\x9e\x43\x32\x40\x5e\xb7\x1c\x28\x4b\xf3\x42\x45\x35\xf7\xe6\xfa\xdb\xae\x23\x78\x3f\x21\x9b\x2c\xac\x69\x3e\xe7\x4f\xfc\xdd\x77\x32\x71\xdd\x52\xae\x23\xed\x9f\x0c\xe1\x0e\x9f\xce\x5a\xea\x5d\x4d\x79\x93\xc4\xb6\xce\x67\x94\xf2\x46\x25\xec\x1c\x96\xc3\xb9\x83\x30\xe2\x7b\xbb\xa3\x1d\x93\xe9\x67\xc2\x78\x99\x66\xbe\xbc\xb5\x9c\xbb\x08\x9b\x3c\xe0\x3b\xbd\xa6\xb9\xcf\x9f\xeb\x06\xac\x4b\xf4\xad\x4c\x24\xe7\xf2\x3e\x6b\x82\x7a\x99\x84\x7f\xf9\x9b\x2a\x5a\x89\xa8\x7a\x38\xbd\x3c\xdf\xce\x8a\xf7\x6c\xd6\xbf\xee\x22\xa6\x32\x6b\xff\x2f\x87\x7d\xd2\x21\xea\x3b\xca\xfd\xeb\x73\xd3\x64\x9f\xd8\xe1\x6f\xd5\x5f\x65\xab\x5c\x79\xe9\x1c\x67\xf3\xae\x22\xbe\x53\x45\x78\xe4\xab\xae\x2c\x7f\xf2\x64\x51\x9e\x40\x1d\x39\xfe\xac\x72\x00\x12\xc8\x1b\xca\x84\x30\xda\x95\xf6\x2f\x2a\x6d\x83\x99\x5c\x5b\xc0\xdf\x76\x54\xa6\xa6\xb4\xd5\x95\xfe\x5b\x9b\xbe\xe6\xc9\xd4\x91\xfc\x3b\x67\xea\xc1\x6d\x98\xb7\xeb\xf5\x01\xf2\xa7\xbf\xe8\xc9\xb7\x41\xda\xbf\x1a\xc2\xe7\x8b\x34\xcb\x36\xc8\xf1\x37\x33\xb5\x37\xcb\xf0\xe7\x1d\xa7\x3f\xd5\x62\x5b\x9b\xe1\xbb\xbf\x39\x19\xe0\x9a\xcf\x3f\xd3\xfe\x24\x77\x09\xe3\x73\xd0\x71\x8e\x7c\xeb\x50\x6b\x9d\x1b\x1e\x74\x5d\x9f\x57\xb9\x52\x6c\x76\xed\xc1\x5a\x3a\xf0\x98\x1d\xcb\x93\xbc\xbe\x6e\xeb\x32\x38\x28\x1d\x07\x03\x43\x64\xcd\x3a\x6d\x0a\xef\x90\xbe\xb9\xd2\xbc\x89\x7c\x1b\x9d\x37\x61\x81\xf9\xcf\x29\x23\xe0\x30\xe1\xbc\x33\xcb\xa6\xa5\x3f\x50\xb6\x84\x05\xe6\x62\xcd\xce\x74\xe6\xa2\x45\xdd\x26\x04\x15\x41\x3b\x01\xd4\x93\x2e\xc3\xda\x49\xdf\x58\x80\xde\x4c\xeb\x2f\xc1\x0c\x61\xed\x8a\xa0\x7f\xd7\x86\xa8\x65\xef\x6d\x78\xb0\x8e\x03\x34\x5c\xab\xa2\xaf\xb3\x77\x2e\x27\xe7\xde\xbf\xa2\xa6\xaa\xbf\x4b\x47\xdf\xd0\xfc\xd5\x6f\x49\xad\x86\xde\x90\x6b\x0a\xa0\x35\xf1\x53\x69\x39\xb0\x45\x1c\x7b\x47\x65\x36\x47\x17\xd6\x5a\x4c\x8e\x14\xa6\xe0\xfe\xf0\x5d\x7f\x5f\x65\xd3\x0a\x91\xf5\xb9\x20\xa4\xa6\x94\x24\x5d\xce\xd0\x9e\xaa\x25\x63\xc4\xbb\x38\x6b\xa7\xe1\x77\x4d\x1e\xc5\x64\x38\x02\xed\xeb\xb4\xe3\xbc\xfd\x8b\xdc\x09\xda\x8a\xb2\x0e\xc6\x4b\x96\xe3\x2a\xbf\x3a\x12\xca\x3d\xb4\x0b\x66\xc4\x49\xf8\x37\x7d\x9a\x6a\x5f\xa0\x8e\x2d\xeb\xcf\x90\xce\xb8\xf5\xb4\x07\x52\xf1\xdc\xe1\x9f\xbf\xab\xc9\xc8\x4a\x64\x0f\xd5\x8c\x2e\xd4\xb1\xa1\x7d\x72\x3a\x4a\x93\xac\x99\x72\x10\x5a\x53\xd6\x5f\x36\x29\xab\xb5\x0f\x74\xb1\x53\x36\xbd\xdc\x0e\x3a\xd2\x7d\x6b\xd3\x69\x92\x1d\x29\xbf\x6b\x50\xec\x48\xe6\x70\x0f\x8f\x10\xfc\xb3\x4d\xb9\x8e\xe0\x5f\x91\x09\x3c\xb5\x2e\x99\xe1\xe1\x20\x3a\x44\x47\xa2\x5d\xcd\x64\x66\x34\x9d\x75\xa5\xd1\x05\x82\xa2\xb3\x2b\x91\x2e\x6e\x56\x2e\xfd\x97\x22\x0d\x3f\x56\x77\xcf\x5c\x46\xa8\x43\x81\x23\x69\xff\x19\xe9\xcb\x97\x65\x03\xdb\xd0\x4f\x7b\xb7\x96\xfb\x2f\x86\x1f\x95\x8e\x6c\xff\x7f\xf6\xde\xad\xaf\x8d\x1c\x5b\x1c\x7d\xf7\xa7\x00\x9f\x19\xef\xaa\x41\x78\x6c\xc8\xd5\x44\x61\xd3\x09\xe9\x66\x0f\x21\x3d\x40\x7a\x76\x8f\xc7\x87\x29\x6c\x19\xd4\xb1\xab\x3c\x2a\x19\x9a\x0e\xfe\x7f\xf6\xf3\xd3\xd2\x5d\xa5\x2a\x3b\x49\xcf\x7f\xef\x87\xf3\x90\xe0\xaa\xd2\x5d\x4b\x4b\xeb\xbe\x6a\x21\xce\x30\xc4\x4f\x37\x01\xbc\xaa\xec\x3d\x0e\xee\xfd\x27\xaa\x77\x3a\x7d\xf8\xb8\xbf\x57\x53\xe8\xa9\x3d\x81\x75\xd0\xd1\x77\x4e\x57\xcd\xc9\xda\x73\x26\xda\x48\xf2\xec\xc9\x41\xfd\xb2\x9c\x47\x62\x45\x06\xcb\xf1\x74\x6f\x93\xe5\x10\x4d\x9d\x44\xa8\x6e\x7d\x9a\x9f\xee\x6f\xda\x8a\x14\x9a\x37\xb4\xb4\x11\x0e\x12\x2d\x1d\xff\x2b\xc6\x97\x55\x25\x10\xc9\x53\x71\x48\x1b\x1b\x95\xe0\x97\x95\x25\x61\xfc\xa2\x8e\x02\x4d\x9e\x3e\x33\x57\xc5\xf1\x7c\xc1\x1f\x7c\x1e\xcb\xbb\x1b\x24\xcd\x2c\x25\x57\xb5\xaa\x5e\x94\xe3\xe1\x08\x51\xdc\x6b\xf9\x29\x55\x79\xfa\x59\xe9\xc4\x3e\xcf\xc5\xf5\x06\x0a\xd0\xd9\xec\x3a\x83\xc0\x30\x30\x85\x41\xfb\xcd\xe9\xd1\xc7\x8b\xe3\xf6\x0e\xdd\xd9\x59\x59\x83\x0a\x00\xb1\x44\x6f\xa9\x9d\x90\xa5\x06\x25\x9c\x26\xc6\x00\xc3\x55\x57\xe5\x4a\x8d\x07\xe2\x9c\x78\xe2\x79\xa3\xbe\x95\x3b\x90\x90\x2e\x0c\x11\x32\xa1\x5d\x93\x99\x4c\x23\x60\x42\xd2\xe4\xc6\x41\xe6\xa0\x78\x8d\x7b\x07\xc5\xee\xae\x76\x16\xca\x87\x85\x8a\x8f\x2a\xe9\x87\x4c\x35\x60\x09\xb7\xbd\x14\x65\x5d\x3d\xf1\x24\x45\xbd\x6d\x8c\x0b\x45\xf6\x49\xef\x4f\x50\xac\xac\x9c\x46\x94\xaa\x45\x4d\xcd\xea\x55\xd4\xe2\xfc\x0a\xc2\x59\x20\x31\x26\x11\x9b\x10\x2b\xee\x96\x03\x53\x82\x47\x45\x2b\xe5\x5c\x50\x6c\x0f\x40\xcc\x39\x01\x6b\xd2\xcf\x2c\xe9\x7b\x16\x57\xe4\x30\xe1\xc1\xd2\x3b\x22\xa4\x24\x4d\x07\xae\x98\x46\xda\xcf\xb0\xa4\xe7\xb5\x11\xa7\x60\xa4\x09\x63\x03\xa5\x92\x58\x5b\xce\xef\x32\xe6\xb0\x08\xaa\x93\xfd\xa0\x93\xe8\x28\xb5\x04\x4b\x57\x7a\xb2\x49\xa5\x50\x96\xa5\x2b\x3f\xdd\xa4\xf2\x59\x31\x31\x69\x2e\xd4\x3d\x00\xc1\x8d\x9b\xd9\xf0\x97\x1e\x6b\xed\xcd\xb7\x1a\x75\xc1\xee\x6a\x55\xa1\x67\x08\x7f\xdf\x45\xba\x04\x17\x69\x09\x5d\xa1\xe6\xce\xbd\xc1\x7c\x46\xc0\x45\x0e\xe6\xa5\x95\xc9\x44\x5b\x59\x27\x85\xf4\xc1\x2b\x22\xa9\x08\x5b\x25\xc1\x12\xc6\x8c\x06\x6b\xe6\x05\x2b\x5a\xae\x21\x9a\x9f\xbd\xd4\xc4\x87\x3e\x14\x35\x78\xd0\xca\xc5\x80\x98\x69\x12\xe9\x3d\x6f\xb6\x9c\x58\x14\xcd\x36\x13\x5a\x2e\xac\x62\x9e\xaf\x56\x48\xd6\x53\x0c\xc9\x46\x75\x4b\xfa\x1b\x31\x15\xe5\x55\xb1\xc6\xf5\xc9\xb2\x23\x63\x99\x15\xd3\xb5\xd4\xa8\x84\xe9\xf9\x04\x7a\xa1\x1f\x7d\x3d\x9b\xd6\x75\xf1\x84\x1b\x47\x59\x1d\x71\x95\x62\x2f\x6c\x2d\xca\x0f\x73\xad\xd9\x56\x76\x17\x12\xbf\x0e\x7a\x26\x06\x6b\xa8\xcd\xc6\x39\xa2\x36\x12\x0a\x68\xae\x7e\x95\xc9\xb6\xe5\x51\xbc\xbc\xa5\xe5\x89\x31\x27\x9b\xa4\x09\x4d\x53\x24\xfd\xb7\x49\x59\xd2\x22\x37\x56\x25\xbe\x21\x85\xb1\x9a\xd0\x96\x12\x13\xe5\x2a\xe4\x45\x29\x31\x6e\x86\x75\x2e\x36\xc6\xb4\x22\x77\xbd\x00\x28\xe6\x95\x89\x74\xb3\x52\x5b\x9d\x4b\x07\x49\x94\x61\xe6\xdb\xeb\x24\x05\xca\xd3\x96\x52\x3d\x67\x87\xbc\x7b\x2b\x5f\x67\x8e\xbb\xef\x80\x1e\x5a\x7b\xa1\xec\xe1\x9a\x9c\x16\xe3\x6c\x96\x14\x60\x23\x7f\x13\x88\x2b\xc4\x0b\x13\x82\xae\x48\x03\x7f\x07\x41\x79\x87\xf3\xb2\x66\x68\xca\x96\xb9\x77\x90\x5b\x5f\xfd\x7c\x67\x27\xd5\xd6\xed\xc3\x7c\x94\xb6\x6c\x56\x3b\xad\xd5\x72\xbb\x90\xb3\xfa\xd2\xa5\x23\x32\x48\x00\x18\x51\x67\xd2\x8b\x87\x4e\x5d\xff\xec\x6d\x8c\xa9\x89\x58\x17\xac\x20\x15\x2b\x68\x7d\x26\xca\xb5\x9e\x12\x82\x02\x71\x1c\x97\xe4\x8a\x83\x23\x92\x5a\xfc\x12\x81\x9e\xd7\x84\x46\x5f\xe2\x62\xd8\x1b\xa1\x19\x2e\xac\xd7\x36\x87\xe3\xf3\xe0\x6b\xec\x33\xd0\xbf\xb8\xeb\xf1\x3d\x69\x72\x2e\x31\x26\xfa\xee\x2e\x32\x4b\x8e\x44\xf2\x56\xf9\x1b\x9c\x0f\xa9\x6f\x98\x6f\xe1\xa3\xc1\x34\x9f\x4e\x93\x26\x60\x4d\x4d\x3c\xf8\xde\xa8\xc5\x30\x33\x93\x46\x31\x30\xcc\x55\x60\x80\x10\x14\x83\x49\xb0\xfa\x49\xb0\x70\x12\x1f\x73\x19\x4a\xb1\x62\xd7\xef\x69\xa4\x23\xc1\x48\x24\xdb\xe5\x03\xa4\x62\x4a\xab\x96\xe3\x9a\x5d\xad\x3a\xf5\xe9\x3a\x32\xa0\x42\x7d\x4d\x15\x70\xc1\xd6\x5f\x41\x98\x05\x63\x03\x27\x51\x82\xfc\x8d\xa8\xb6\x73\xe5\xea\x07\xa2\x2b\x40\x6a\x41\x94\x69\xae\xa3\x4c\x17\x98\x57\x95\xf1\x32\xd0\x8a\x87\x8e\x7d\x87\x6b\x92\x1e\x2a\xca\x31\xc4\x86\xae\x41\xab\xc0\xbb\x03\x73\x93\x45\x56\x52\xd0\x29\x32\x1e\x4b\xa0\x96\x09\x4c\x3f\xcd\xfc\xba\xa5\x13\xe7\x8f\xa4\x8e\x06\xe6\xf9\x33\xc4\x80\x5d\x91\xed\x81\x3c\xdb\x9a\x91\x47\x29\xa5\x0b\x6b\x45\x97\x90\x4e\x87\xb8\x66\x75\x0e\xd5\x62\x2f\xe8\x24\x7c\xab\x26\xe0\x9f\xd1\x98\xac\x5b\x2e\xb4\xa6\x97\xbd\x03\x61\x9d\x80\xa2\x74\x93\x5a\x4e\x20\x91\xb8\x0a\xf7\x00\xfe\x3b\x96\xde\xeb\x19\x32\x7e\xc1\x12\x77\xe4\xc9\xf3\x3e\x0a\xd7\xcf\x8f\x29\x58\x23\xb5\xad\x90\x82\x77\x3d\xb3\xb2\xce\xaa\x79\xcb\x4a\xa7\x81\xdd\x6b\x4d\xa7\xde\xae\x3d\x79\x01\x31\xc1\xe0\x64\x4b\x82\x50\xc1\x88\x8c\xf8\xb3\x32\xe1\x72\xea\x57\x57\xc6\x4a\x45\x4b\xd9\xf7\x4c\x12\xb4\x46\x32\x52\x76\x3a\x49\xe9\x2a\x17\xfe\x5d\x54\xae\x8a\x76\xb7\xbd\x9d\x64\x8f\x8f\xe5\xe3\x23\x4f\xd1\x14\x43\xd0\x63\xf2\xf8\x48\x5c\x4a\xf7\xf1\x71\x3b\xd9\xce\x1f\x1f\x41\xf7\x31\xec\x8d\xf4\x05\x87\x26\xf8\xf3\x3c\xa3\xf9\x20\x43\x62\x41\x06\x25\x02\x3b\xc1\x01\x5f\xb5\x2a\x90\x20\xe6\x3d\x41\xc5\x37\x92\xd1\x9a\x20\x40\x63\x34\xf5\x48\xe9\xe5\x61\x32\xab\x1c\x91\xa5\x7f\x3e\x64\x01\x45\x46\x2f\xc5\xb3\x67\xbf\x26\xd8\xb9\xd9\x06\x14\xf9\xec\x5b\x28\xf2\x22\x6e\xd7\x16\xc2\x88\x82\x10\x34\x73\xb4\x4e\xb3\x4e\x27\x99\x39\xb1\x8c\xc7\x02\x63\xda\xf9\x89\xdb\x6b\xac\x0d\x6a\x83\x0d\x4c\x63\x7a\x93\x84\xb8\x1d\x21\x9e\xca\xc0\x12\xbf\x27\xcc\xc9\x68\x89\x78\xac\x69\xdc\x16\x51\x2c\x81\x18\x94\x8e\x24\xdd\x88\x40\xc4\xf8\x00\x81\x94\xe9\x06\xba\x36\xa2\x4d\xd1\x01\xf9\x29\x01\x43\x44\xf7\xa6\x87\xa1\x99\x6d\x55\xb2\x59\x1b\xa7\x60\x6f\x69\xab\xcb\x59\x44\xf1\x51\x65\x52\x9b\x2b\xef\x94\x5b\xea\x50\xc9\x54\xd6\x69\xf1\x26\x4a\xbe\x24\x97\x78\xd0\x43\x54\x5e\xc2\x83\xed\xfe\xca\x12\x1b\xb7\xb8\x77\x70\xfb\x6a\xaa\x89\x8d\x5b\x6d\xde\xb7\xc0\xd3\xe1\xad\x09\xce\xbb\xe8\x8e\x6f\x33\x76\xc4\x93\x5e\xaa\x22\xf4\x76\xda\x03\x51\x6c\x6e\x82\x08\xb7\x3b\xca\x0c\xaa\x8d\x31\x5e\xa4\x73\xbc\x6c\xc9\xf8\x47\xe2\x13\xcd\xef\x08\x2b\x89\xfe\x34\x33\xa1\x4a\xb4\x45\xf8\xb6\xf8\x50\xe7\x4d\xd5\x9a\x63\xb6\x9a\x1f\x5a\xa8\xf0\xaf\xc4\x64\x5e\x99\xec\xed\x4e\xdf\x4e\xb7\xb7\x02\xef\xd8\x9a\xca\x12\xa1\xae\xab\xef\x46\xac\xfd\xcf\xf6\x80\x4e\x93\xed\x2c\x95\xef\x64\x20\xa0\x4c\x10\xbc\x0f\x38\x13\x54\xea\x0d\x5e\xb4\x04\x14\xdf\xe0\x85\x21\x05\x53\x15\x18\xe3\xce\x98\xce\xdf\xa4\x07\x90\x23\xea\xda\x84\x8b\x17\x97\xde\xc3\xf0\x7a\xd4\x3c\x9c\xfe\x2a\x4d\x57\x2b\x33\x1d\xab\x9c\xd5\x9b\xb8\xd3\x47\xdb\xdb\xc9\xf2\xf1\x71\xf6\xf8\xc8\x1c\x59\xdd\x15\x9e\x58\x59\xdd\xd5\x6b\xdc\x3b\xb8\xd2\xb2\xba\x7b\x3c\x19\x5e\x8d\xd0\x31\xbe\x57\x27\xb2\x75\xdf\x55\x1d\x4a\xea\x48\xab\x48\x92\x63\x45\x06\xb9\x5a\xdf\x63\x25\xa0\x73\x31\x58\xc2\x6b\x4f\xd3\x37\x2a\x5f\xe3\x67\xf9\xcb\x95\xb1\xf5\xc8\x58\x60\xe3\xd0\x39\x3e\xea\x06\x85\x32\xcd\x63\xf9\x57\x75\xd6\xe9\x24\x99\x7b\x55\x6f\x10\x53\xd0\x12\x3d\xa5\xf5\x88\x0e\xc3\x02\x96\xb1\x30\x80\xc6\x53\x25\x14\x19\x26\x0d\x34\x9a\xa8\xb6\x46\xcc\x58\xbd\x18\xb6\x7b\xde\xdc\x51\xe9\x07\xe4\x5b\xad\xe0\x22\x7b\xf0\x0d\x30\x2a\x6e\x28\x8a\x00\x34\xfc\x3a\xda\xee\x5b\xc3\x04\x4d\x8c\x7a\xce\x73\xf2\xa5\x47\x02\xc0\x29\x6e\x50\xcd\x6b\x17\x70\x54\xf8\xae\xca\x75\x76\x5e\x1e\xb4\x55\xc8\x4f\xa3\x49\xe9\x19\xa7\xc6\x53\x7a\x6d\xfd\x0e\x13\x5e\xa5\x3f\xc3\x3b\xbd\xaa\xa9\x8f\x58\x3d\x2b\xf7\x1b\x8f\x80\xef\x5a\xbf\x06\xf0\xc7\x51\xa1\xdf\x0b\xfc\x3e\xe3\xb7\xdd\x39\xcd\x41\xaa\x04\x4c\x6a\x38\x9b\xc2\x99\xa1\xb5\x40\x4b\x2c\x4e\xc8\x70\xef\x20\x7b\x55\x1c\x64\x82\xc9\x8c\x5c\xe3\xd3\x05\xe2\xbb\x59\xc4\xd2\x83\x0d\xb3\x51\xba\xaa\xf0\x10\xeb\xb6\x4d\x59\x94\x88\xa1\xd9\x93\xdb\xb0\x77\x65\x7d\xee\xc9\x18\x37\xa5\xb8\x18\x19\x2c\x2c\x6e\xea\x3e\x1c\xe9\xcc\xae\x91\x34\x88\x64\xc8\x46\x2d\x48\xf6\x1a\x6f\x3e\x4f\x57\xf1\xee\x21\x34\x7b\x22\x99\x36\x45\xd3\x6c\x30\xe8\x4c\x31\x7f\xc0\x90\x68\x7e\xa1\xaa\xaf\x10\x03\xd6\x37\xb1\x0e\x00\xa8\xae\x61\x95\xa6\x71\x40\xfe\xd8\xc7\xb8\x77\x48\x5e\xef\xf6\x0f\x39\x26\x83\xa4\xc2\xb9\xc8\x92\x32\xb1\xed\x93\x74\x4d\x81\x7e\x18\x0b\x9f\xe6\x37\xed\x81\xaa\x62\x96\x1a\x31\xbc\x17\x46\x9d\x27\x59\x2e\x0a\xf6\x1e\x09\x62\x78\xdf\x0b\x94\x0f\x91\xd6\xc5\xc7\xbd\xf0\xd3\x52\xcb\x2f\xc4\xd7\x7d\xe7\xab\xe7\x67\xed\x4a\xa8\x4e\xf2\xbb\x6c\x46\x27\x5b\x66\xd5\xb6\x16\x59\x59\x92\x09\x24\x52\x74\x39\xf4\xb6\x74\xb2\x55\x41\xaa\x4b\xfa\x1b\x39\x99\xcf\xc9\x84\x66\x9c\x24\xfc\xd5\xab\xfd\x47\xc1\x6a\x3b\x6c\x5c\x7f\x1f\x32\x71\x14\x7e\xd1\xb8\x42\x9c\xbc\xc6\x36\x23\xe6\xe3\x23\x79\xd5\x3b\x8c\xaf\x29\x4f\x45\x4f\x4f\x07\x44\x73\x9e\x55\x01\x42\x84\xaf\x37\x0c\xa4\xc1\x44\x11\x67\x31\xdd\x62\xc4\xc5\xa5\xce\x36\x74\x2f\xe4\xa4\x6f\xb5\x77\x0e\xb4\x56\x73\x99\xd4\xb5\xf6\xb4\x91\x2f\x57\x6d\x46\x63\x3e\x06\x57\xaa\x97\x65\xaa\x31\x3e\x0c\xd1\x58\x46\x5f\x65\x14\xe7\x3a\x56\x4c\x81\x73\xdf\xbf\x28\xc3\x79\x24\x56\xcc\x36\xc6\xb4\xd3\x51\xbf\x8a\x4e\x27\x53\xe1\x42\x35\x9e\x28\x71\xef\xa0\xb4\x5e\x2f\xe5\x0e\xde\x4b\xf9\xb0\x1c\x0d\x7b\x23\xdc\xfe\xcf\xf6\x8e\xfa\xdd\x0a\x4d\xf2\x63\x9e\x46\xd4\xc3\x80\xa1\xe3\x92\x61\x64\x64\x58\x71\xb4\xdd\x47\xac\xd3\x61\x10\xb3\x52\x07\x31\xb0\x57\x89\x92\x38\x36\x2f\x5d\xcd\x4e\x20\xda\x24\x82\xe2\x29\x2a\xc2\xef\x99\xca\xa3\xee\x9c\x8f\x97\x4f\x8d\x67\x77\x51\x15\x6e\xd6\x59\xb2\x3c\x43\x3e\xe6\x80\xda\x3a\xdc\x49\xad\xe9\xf5\xcb\xe7\x15\xd8\xf2\x64\x66\xe1\x57\x8d\x84\xa1\x75\xee\xd9\xc7\xfb\x96\x44\xcf\xe2\xed\xea\x81\xc5\xe2\x7a\xd4\x19\x1b\xed\x37\x37\x35\x8f\xb9\x2b\x9b\xc0\x01\x9b\x89\xc8\xb6\x3d\x5b\x9a\x27\xbd\xfa\xe3\x1b\xbb\x41\x55\x24\xb6\x3a\x97\xee\xc8\xc0\x9d\xdd\xde\x7b\xae\x04\x91\x4e\x04\xfc\x0d\x61\xcf\x5c\x12\x54\xa7\xf1\xaa\x7c\xe4\xe9\xa0\xe7\x74\xb6\xff\x0c\xe5\x08\xe4\x4c\xec\xb0\x2f\xf8\x55\x3d\x7e\x1b\xe3\xeb\xdf\xd7\xf7\xf3\x58\xdf\x36\x2e\xda\xef\xdb\x71\xf5\xa4\x95\x26\xa0\x89\x33\xa6\xa7\x20\x12\x94\x43\xf1\x45\xe8\x55\x68\xdc\x88\x74\x96\x37\x9c\x14\x37\x39\x0a\x85\x3a\xd4\x1e\x3b\xb4\xb7\x71\xd4\xfd\xd5\xe0\x5c\x11\xeb\xd6\x43\x73\xb3\x40\x37\x8c\xd5\x5c\x67\xf3\xa7\x0e\x2c\x90\x88\xf6\xca\xd3\xec\x59\xe4\x98\x90\xae\xe0\xd8\xa4\x27\x78\x31\x79\x50\x76\x23\x9e\x51\x4d\x9d\x64\x47\xc7\x5d\x3f\x3e\x7b\x7b\x72\x76\x72\x79\x72\x74\xda\xd6\x79\x47\x79\xa2\xb6\x5a\x9a\xf3\xe4\x29\x62\x89\x6b\xc0\xe4\xc6\x3d\x57\x3c\x09\xe5\x7e\xcb\x41\x79\xb7\x93\xf8\xd2\xb9\xe6\x32\xfe\xb4\x03\xbb\x2f\x8b\x1f\x60\xda\x30\xff\x1c\x93\xae\x0c\xd0\x05\x69\xb5\x54\xf0\xfd\x56\x9c\xbd\x65\x15\xce\x95\xc7\x38\x57\x98\x42\x25\xcc\x3b\x0f\xc2\xbc\xd3\x4e\x87\x26\x9a\xb9\x74\xc2\xaf\xc5\x08\x6c\xe5\x30\xee\x92\x10\xda\x79\x9c\x54\xbd\xc0\x35\xe8\x79\x6f\x65\x3f\x4e\x00\xae\xb8\xa5\x49\x95\xb5\x86\x6e\xac\x6e\x5c\x49\x5c\x0f\x35\x2f\x27\x83\x74\x68\x94\x66\xc2\x8f\x87\x9a\x87\x6d\xa2\xb5\xee\xbd\x96\xe5\x5a\x7a\x07\xdc\x32\x2c\x5c\x33\x6b\x2a\x02\x3b\x1f\x39\x89\x43\x74\xd6\xe0\xc2\x3d\x7d\xa1\xf4\x82\xa6\x9f\x99\x2b\x66\x0d\x64\x62\x0c\xbc\xec\x1c\xb8\xae\x7c\x27\xb3\x92\x34\x7d\x07\xa9\x5e\x6a\xf4\x72\xce\x7e\x68\x1d\x60\xfa\xea\xd5\x93\x16\xed\x74\x92\xe2\x11\xbf\x00\xaf\x00\xf1\xeb\xb9\x4e\x95\xe9\x39\xf0\xab\x8c\x4d\x19\xb8\xa7\xb7\x2c\x8d\x06\x6e\xea\x4b\xdc\x3b\x58\xbe\x32\x49\xed\x97\xde\xe2\x94\xc3\xa5\xcb\xa6\x02\x26\xca\x14\xf5\xa2\x83\x8a\xc5\xe0\x48\x05\x0d\x72\x83\xfd\x91\x54\x6d\x60\xd5\x82\x85\x6b\x0b\x16\x4d\x92\x36\x9a\x94\x84\x80\xa3\x85\xcc\x75\xa2\x1a\xb0\x37\xe1\xab\xe4\x53\xda\x0a\x93\x40\xfd\x08\xab\x75\x5e\x67\x6d\xe2\x84\x5a\x6a\x48\xea\xdb\xac\x55\xcd\x63\x5a\xd5\xdc\x32\xfd\x5e\xdf\x6a\xd9\xc4\x47\x99\xb9\x8b\x68\xad\x69\xa8\x0d\xcb\xbd\x0b\xaa\xc6\x5e\xe8\x19\x14\xb4\xca\x99\x6f\xed\x2b\x6c\x25\xd2\x99\x4b\xa4\xc7\xaf\x10\xdd\x19\xf2\xea\x56\x65\x45\xe0\x94\x94\xdb\x2a\x75\x76\xd7\x8a\x1d\x2b\x54\xb3\x50\xa9\xa8\x54\x88\x0b\x10\x74\xa5\x95\x80\x8f\x1f\x05\x7c\x54\xf3\x7f\x9d\xc3\x36\x5e\xfe\xaf\x81\x11\x75\xab\x1e\x9a\xf0\x2d\x89\xca\x8e\x17\x6c\x1e\x6f\x84\x92\x0d\x00\xc3\xf2\xcf\xb6\xa7\xaf\x00\x91\x46\xa8\xd0\x24\x82\xe9\xe0\x00\x22\xde\xf0\xc3\x98\xe8\x30\xa9\x22\x04\xa7\xe6\x2a\x75\x2c\x0c\x5c\x81\xa3\xb3\xbb\x91\x94\x6f\x97\xb0\x03\x6f\xea\x0d\xce\x9c\xdc\x0c\xe2\x76\x2c\x55\x16\x37\x05\x42\x09\x13\x7c\x9f\xfc\xa0\x82\x78\x27\xd4\xb9\x4e\xac\x69\x9a\xcc\x86\xa5\xc0\x41\x51\x20\x35\x40\x81\x1c\x70\x70\xc2\xe7\xd4\x5d\xd8\xe7\xb2\x03\x05\xc6\x1f\x34\x18\x1b\xab\xb4\x37\x30\xc5\xf7\xee\xa6\x98\x19\xba\x61\x8e\x04\x4d\x67\xe2\xe6\x69\xe4\xce\x63\x11\x50\x04\xf1\x1b\x72\xd2\xde\xe5\xae\xab\x5b\x23\x1f\x95\x27\xc2\x6c\x97\x4e\x1b\xea\x08\x6a\x07\x9e\xd8\x16\xa9\xd0\x56\x7c\x65\x42\xb9\x54\x13\xfd\xbd\x87\xa9\xfd\x82\x65\x24\xa7\x93\xb5\x53\x8c\xc7\x4d\x3f\xf5\xe2\x39\xa9\xe8\x4e\x52\x9e\xa0\x0a\xc1\x54\xed\x9b\x7b\x19\x53\xe6\xd4\x96\xf4\xe3\x3e\x29\x22\x57\xd1\x3f\x26\x04\x94\xac\xac\x08\x1b\x6c\xa3\x34\x79\xe2\x18\xd7\x52\x4d\x5e\xa2\x10\x36\x77\x12\xa4\x5d\x5d\x69\x49\x77\x05\x71\xb0\x6e\x56\x56\x8f\x61\x35\x1e\xfd\xa1\xf3\x7b\xe0\xcd\x9c\xdc\x6f\xdd\x04\x44\x20\xe4\xa7\x77\x92\xb6\x56\x56\x0f\x7d\x36\x5b\xad\x74\x6c\x60\x3f\x19\x01\x93\x20\x16\xbb\xf8\x7c\xe8\x3e\xfc\xce\x63\xe9\x99\xb1\xfc\xcd\xdb\xb5\x9a\x11\x79\x5b\x7b\x58\x7d\x35\x88\x01\x00\xb9\xdf\xba\xf8\x1d\x16\x4c\x80\x79\x98\xac\x58\x67\x07\xf6\x92\x14\x37\x65\x24\x1e\x85\xf6\x63\xdf\x9a\x3a\x58\xe5\x02\x25\x5d\x9b\xfd\xf2\x7c\x99\x73\x3a\x77\xd2\x61\xfe\x8d\x51\x4e\x3e\xe4\xb3\x07\xfb\xea\x07\x92\x2d\x4c\xce\x4b\x6d\xa0\x46\xba\xee\x6f\xd5\x8c\xfb\xca\x34\xe4\xbd\x3c\x3e\x3d\xbd\xfa\xcb\xd9\x87\xbf\x9d\x5d\x39\x54\xed\xd5\x8f\x1f\x2e\x4e\x2e\x4f\x3e\x9c\xb9\xc1\xdc\x18\xfe\xbc\x6a\xad\xaf\xd1\x53\xf7\xae\x5a\x8e\x29\x23\xe4\x37\x02\x01\x70\x68\x0d\x0e\x31\xb1\x23\x05\x37\x5f\xe2\xe1\x48\xf9\x8f\x30\x96\x3d\x94\x78\x98\xab\x67\x2e\x5d\xf0\xf4\x67\x89\xc3\xec\xb3\xba\x25\x27\xe6\x85\x94\x70\xaf\x0b\x6f\x14\x51\xe3\x38\x32\x28\x35\x26\xa3\x19\x27\x36\x26\x16\xe8\x33\x06\x5e\x29\xa0\x9a\x48\x2a\x13\xb2\x38\x02\xc1\x1a\x7d\x8f\xcd\x8f\x6c\x72\x7b\xc5\x14\x40\x56\xe9\xa3\xe5\x1d\x43\x36\xf2\x63\x73\x59\x1d\x0f\x97\xbf\x43\xd6\x0d\x4c\xa4\x74\x27\x86\x89\x73\x26\x2a\x17\x7b\xcd\x3c\x55\x21\x6f\x9a\xb7\x8d\x61\x19\xd5\x26\xd5\xb7\x9b\x78\x7b\x27\x9b\x66\xa9\xb7\xc3\xb6\x3f\xe5\x12\x69\x45\xc7\x91\x6e\x21\xbd\xb5\x5c\x28\x3a\x7d\x90\xaa\xa0\xe8\x56\x3a\xf1\x93\xc4\x50\x58\x64\x2b\xb9\x9a\xa3\x84\xa4\xba\x39\x2a\x38\x5b\xb3\x76\xba\x94\xb7\x78\xbc\xf8\xb1\x28\x22\x18\xfc\xb3\x1a\x86\x37\x26\x24\x97\xdf\xdd\x0a\x75\x91\xab\x77\xea\x01\xa9\xae\xbc\x7e\x57\x4e\xd0\xb6\x0a\x1a\xa0\x8a\x19\x5e\x77\xc5\x9b\x80\xb1\x04\x79\x27\x96\x9b\x21\xba\x07\x97\xeb\x41\x7a\xc7\x95\x9b\x61\xfa\xa7\xd6\xdb\x71\x3f\xd7\xb1\xf5\xfb\x32\x86\x6a\xfa\x6c\x73\x33\xbf\x86\x23\x6e\xa2\x32\xd7\xb2\x2d\x6a\xf8\x43\x32\x52\x3e\xb2\x67\xd5\x1d\x77\xcb\xab\x4e\x6d\xf9\x8b\xb5\x87\x5d\x8b\x42\x8d\x86\x80\x39\xe7\x9f\x9b\xf3\xdf\x1c\xd3\xac\xc5\x86\xf9\xc8\x34\xa5\x42\x4d\x53\x1b\x02\x56\x8d\xa6\x3a\x8e\x0a\xb2\xd0\x63\xf7\x12\x8d\xd7\x41\xb8\xde\xa4\x21\x91\x06\xe7\x18\x63\x5f\xce\xac\xf6\x4d\x7c\xaf\x56\x09\x02\xcb\xaa\x1f\xae\xc2\x5a\x2f\x62\xdd\xc9\x56\xe5\x9c\xcc\xf5\xc1\xae\xa5\x06\xba\x2b\xf7\x5e\xa1\xa4\x36\x51\x26\x24\x5f\xe7\xf5\x62\x1c\x5b\x0c\xe8\x73\x94\x77\x3a\x09\x35\xb0\x9f\x1b\xd8\xa7\x1a\xf0\x73\x0d\xf8\xd4\x40\x7d\x6e\xa0\x9e\x5a\x90\xa7\x1b\xc1\x3b\x35\xc0\x9e\xeb\x5f\xa9\xb4\x37\xe7\x21\x83\x93\x6b\xae\x97\xe2\xbc\x7a\x10\xe8\x17\x02\x36\xfd\xc2\x83\x43\xff\x57\x1d\x04\xfa\x45\x07\x81\xfe\x6f\x39\x08\xf4\x9b\x0f\x42\xbe\x12\x5c\xb2\x4b\x0d\x66\x2d\x29\x93\x8c\x1e\x01\xa6\xb8\x4b\x9d\x2c\x2a\x01\xb5\x42\xbd\xb8\x25\x95\x92\x1d\x49\x77\x79\x97\xb1\x7c\x15\x05\x4c\x66\xc5\x31\x2c\x26\x8e\x59\x73\xa7\xcb\x49\xba\x5d\xad\x23\xc8\xbc\xb2\xce\x95\x9b\x6f\xb2\xbc\xd5\x26\x00\x46\x72\x93\xf5\xbf\xb6\x92\x5c\x9a\x21\xd9\xed\x8f\xd6\xcb\xca\x64\x61\x3d\xba\x15\x62\xab\x24\xb3\x02\x06\xbd\x79\xa5\xcc\x57\x5f\x77\x37\xab\x9b\xf9\x16\x38\x02\x25\xae\x93\x49\xdb\x7b\x56\x12\xc2\xeb\xd2\x7a\xd1\xdf\x6a\xf3\x79\xf5\x77\x92\xe4\xf9\xb3\x17\x1d\xd3\xbc\x98\xfd\xf5\x43\x36\x99\xb0\xc4\xe9\x26\x4d\x5f\xbf\x7e\x91\x1a\xb7\x45\x5a\x2a\xf1\x50\x6d\xb3\xbd\xbd\x27\x6b\xdb\x34\xcd\x09\x28\xa9\x6b\x69\xef\xe9\xd3\xcd\x1b\x2a\x16\xfd\x46\xc1\x77\x7d\x1b\x3b\x7d\xb7\x95\xbd\xaf\x6d\x65\xcf\x6d\x65\xff\x6b\x5b\xd9\x4f\x23\x59\xd5\x66\xbe\x43\xd5\x23\x79\xf5\x6a\x6f\x65\x78\xcb\xa5\x32\xbc\xaf\x85\x1f\x63\x9c\x67\xe3\xcb\x5b\xa6\x4a\xc3\x92\x4b\xc3\xe9\xa7\x71\xb6\xc8\xc6\x94\x3f\xe0\x7e\xef\xc9\x8b\xa7\xcf\x9f\x21\x47\xe8\x28\xe3\x38\x82\x8a\x0e\xd8\x36\xd0\xd1\xc9\xea\x2d\x0b\xb0\x02\xef\x7f\xa4\x39\xdf\xdf\x33\x86\x1e\x96\xd3\xd3\x59\x09\xd4\x10\xec\xd2\x28\x23\x43\x77\x44\x79\x30\xa2\x9e\xe3\xed\x12\xed\x49\x0d\xd9\xeb\xaf\x99\x4f\x5c\x84\x81\x53\x25\x96\xa0\xbf\x91\x37\xb7\xc4\xea\xb1\x45\x6f\x43\x77\xcb\x76\x46\x32\xed\xa6\x29\x19\x78\xb2\x82\x89\xa5\x3b\x78\x2d\xec\x5b\x24\xa6\x41\xd4\x73\x97\x22\x6d\x58\x41\x62\x0c\xad\xbd\x09\xc2\xba\x95\x84\x43\xc8\xd6\xf8\xee\xad\xbc\xb7\xbb\xbb\x8a\x26\x93\x40\x58\x8b\xc3\x60\xba\x92\x92\x2c\x23\x85\x0d\xe7\xa0\xca\xc9\x48\xc1\x32\x19\x42\x45\xd7\xc1\xa5\x45\x29\x30\x5e\x76\xb6\xa8\x87\x94\xed\x29\x71\xaf\x58\x8f\xfd\x95\xaf\x76\xf0\x3e\x82\xa5\x76\xf3\x20\xc4\x06\x03\x1d\x0d\xc9\x4e\x7f\x84\x67\x09\x47\xd2\x4b\xbc\x0c\xd2\x59\x78\x98\x1a\x46\xa2\x56\xa4\x71\x3d\x54\xd3\x9a\x2d\x88\x30\xc7\xe1\x54\x09\x9a\x25\x3d\xb4\x9f\xea\x59\xf2\x0d\x66\xc9\xf5\x80\x8b\x69\x75\xc8\x4a\xfa\x30\x2e\x16\x24\x2c\x12\x1f\xec\x4e\x7f\xf4\xfa\xf5\x1e\x2c\x1c\x23\xb5\xd7\xaf\x2d\xdc\x0a\x17\x31\x6e\x81\xf8\xc8\x5f\xbd\xda\xef\xad\x12\x8e\xfa\xc6\x0d\xdf\xc9\x61\xd1\x78\x96\xdc\x95\xd0\xe7\xa8\xe5\x9c\xaf\x11\xde\xeb\x3f\x79\xfe\xe4\xc5\xfe\xb3\x27\xca\x14\xc4\xc5\x5e\x72\x61\x87\x1c\x01\x3d\xa4\xc2\x4b\xff\xe8\xa2\x37\x17\x19\x2a\xc2\x54\xa7\xd8\x74\x8a\xa1\x88\x72\xdb\xf8\xde\xf2\x11\x92\x6e\xb5\x88\x62\x36\xd4\xab\x62\x0e\x41\x92\x23\x9a\xa4\x2a\x5c\x6e\xb6\xe0\x4b\x16\xac\xac\x1f\x55\xc8\x3d\xde\x5a\x9e\x19\x0c\xda\xac\x8a\x8f\x18\x48\xaa\x90\xad\x96\xfa\x6b\xd9\xbe\x05\x19\x04\x7b\x35\xb0\xdb\x86\x64\x0d\x57\xfe\x0f\x22\xc5\xb1\x72\x7e\x6a\x90\x03\x04\xe3\x16\xf8\x87\x56\x22\x2c\x89\xb7\xe3\xd0\x06\x4e\x93\x27\x80\xb7\x94\x3e\xe0\xaa\x90\x97\x94\xa8\xb0\xb4\xd3\x4a\x63\x8a\x11\x55\xb4\x0e\x98\x55\x53\xfa\xba\x20\x5e\x07\x55\xe1\x87\x16\xa6\x4e\x95\xeb\xd2\x7a\xed\xc6\x37\x4d\xe3\xf6\x61\xe2\x07\x24\xab\x28\xbf\xc6\x8e\x40\x4a\x06\xf8\x16\xff\x17\x90\xca\x13\x0c\xad\x7e\xf7\xb5\x08\x24\xcd\x13\x95\x09\xb0\x96\x4b\xd8\x48\x19\xeb\xd0\x9c\x11\x1e\x40\xd0\xb8\x53\x87\x74\x59\x68\x23\x2d\x37\xf5\xb2\xca\x02\x9f\x9a\xfe\xa4\xa3\x92\x28\x67\x0c\x2c\xf2\xca\xcd\xc7\xd2\x03\xfe\x8a\xc1\x19\xcd\x05\x82\x10\x27\xd4\xac\xe7\xca\x4a\xd8\x6f\x43\x2d\x00\xd3\x16\xcb\x5f\xad\x07\x10\x13\xf8\x56\x4d\xc0\x3c\xab\x09\x6d\x26\xe6\xf9\x60\x12\x4b\xd1\x52\xe5\x8c\x89\xe7\x93\xda\xc6\xf8\x5a\x14\xbb\xf6\x62\x6f\xa5\x9f\xe9\xce\x8e\x78\x0d\x3d\xe2\x4c\xfe\xa2\x13\x01\x90\xa5\x71\x85\xf2\xd2\x02\x79\xdd\xcf\x92\x1e\x74\x2e\xcb\x7d\x5c\x4c\x32\xc0\x22\x4d\x15\xfa\x6a\xb4\xc0\xc7\x44\x87\xda\xe5\xd9\x0d\xc6\x78\xe2\x94\xf3\x13\x13\xd9\xa2\xba\xd8\xb8\x98\x5f\xd3\x5c\xf4\x7b\x13\xcc\x3f\xf4\xa1\x00\x72\x53\x8b\xd0\x5f\xe5\xd6\x8f\x82\x82\x1f\x85\xe8\xbb\x45\xb7\x31\x9e\x74\x3a\xf2\x62\x72\x64\x07\xf3\x44\x2e\xb5\xea\xed\x42\x00\x5f\xe4\x52\x84\x8e\x88\x38\xe7\x13\xe5\xb4\x72\xa0\x6c\xb6\xd9\x81\x89\xba\x00\x1d\xe5\x5e\x47\x79\x0a\xf5\x72\xf2\x2b\x87\xc0\x43\xac\xae\xe3\x6f\x99\xe0\xda\xc9\xbd\xf9\x78\x7e\x7e\x7c\x76\x79\x75\x79\xf4\x3d\x26\xdd\x9f\x3e\x9c\x1e\x5d\x9e\x9c\x1e\xab\xc7\x37\x1f\xce\x2e\x2e\x8f\xcc\xd7\xe5\x02\x20\x85\x74\x27\x94\xf1\x07\x4c\xba\xef\x8b\xbc\x98\x17\x6c\x71\x4b\xc7\x97\xd9\xcd\xc9\x7c\x31\xc3\xa4\x7b\x74\x7a\xfa\xe1\x6f\x57\x6f\x7e\x7e\x73\x7a\x7c\x01\x6d\xbc\xff\xf1\xe3\xe5\xb1\xd3\x38\x26\x5d\x65\x04\xe8\x74\x21\x5e\xaa\xf0\x91\x17\x0f\xf9\xf8\x96\x15\x39\xfd\x8d\x88\x05\x32\x8e\x04\x26\xbc\xa4\x2e\x4a\x8b\xfc\x88\x71\x3a\xcd\xc6\xa0\xc1\x3a\xa5\x25\x3f\xe1\x64\xae\x15\x60\xd6\x6f\xc1\x69\xe4\x4d\x36\xbe\x15\x2f\xe0\xef\xc4\x16\x71\xd4\x5b\x39\x76\x9c\x3d\xb6\x75\xf6\x2d\x69\x68\x77\x28\xff\x0c\xaa\xd0\xd9\xbe\xba\x6a\xef\x90\x1d\xf0\x77\x9a\xce\x8a\x82\x25\xf0\x93\x65\xf9\xa4\x98\x27\xe9\x9f\xde\x66\x9c\x74\xf3\xe2\x3e\x49\xd3\x1d\x51\x76\xd5\x72\x26\xdf\x6b\xd9\x35\xe9\xb7\x9c\xa5\x7a\xd9\xeb\x3d\xef\xbf\x7c\xb9\xf7\xf4\xc9\xf3\x27\xbd\x97\x2f\xfb\x4a\xa8\xd7\x57\x72\xfa\x3c\x69\x5f\x1e\x7d\x7f\xa5\xd6\xb8\xed\x20\xd4\xcc\x1e\x44\x6a\x33\x1e\x96\x3e\x87\xf8\x1a\x93\x61\x31\x4a\xd2\x95\xdd\xa6\x42\x49\x19\x54\xcb\x97\x3f\xff\x28\x9a\x0d\x76\xd5\x59\xac\xd9\x1a\x79\x04\x23\x77\xb4\xa4\x45\x8e\xfb\x5a\xf1\x5f\x72\xa0\xed\xc8\xc4\x7d\xf5\x13\x20\x24\xf5\x82\x96\x80\x5a\x68\x7e\x83\xb7\x75\x0a\xa6\xe5\x35\xcf\x6e\x4a\xc7\x3c\x40\xbe\xa9\xbc\xf8\x0e\x08\x1a\xb9\xcb\xe6\xdb\x70\x39\x8a\x66\x99\x19\x16\xa3\x80\x09\x0b\xc7\x28\x63\xd4\x54\x46\xd5\xab\x4e\x86\xb6\x38\x7b\x70\xcd\x33\xd4\x90\x75\xb2\x26\xf9\x68\x74\x50\xe1\x60\x51\x8e\xfd\xc5\xd0\xc9\x6c\xf4\x02\x3a\x5e\x21\xdc\x78\x74\xc2\xee\xb5\x4a\x30\x09\xcf\x94\xaf\x5d\xf6\x6b\x92\xa1\x5c\x7b\x13\xd7\xac\x8a\x57\xb8\x4c\xd3\x95\x9b\x2b\x47\xe3\x18\x69\xb5\x48\x5c\xab\x45\x15\xf5\x81\x0c\x97\x23\xd9\xb7\xd3\xd0\x0c\x65\x26\x0a\x9e\xde\xd1\x6c\x35\xa5\x79\x36\x9b\x3d\x54\xd7\xb0\xaf\xd3\x65\x6d\x1b\xce\xd7\x7e\xd6\x86\x9f\xee\x0a\xef\xec\xd0\x34\x80\x18\x81\xc1\x14\x56\xf2\xef\x4c\x45\x9c\x8b\x55\x6d\xe5\xe2\xda\x38\x64\x2e\xc4\x0c\x12\x16\x5b\x19\x98\x12\xb2\x25\x01\x43\x4a\x64\xe7\x19\x6f\x59\xa8\xde\xd9\xa1\x86\x8c\x8a\x60\xc3\x99\x92\xb9\xcc\x64\x2b\x2d\xdd\x9a\xa6\xaf\x67\x6a\xf4\x2d\x3b\x0d\x9d\xd8\x19\x6e\xcf\xfd\xb4\x15\x60\x61\x4d\x9c\xe5\xe4\x3e\xa9\x53\xa2\xaf\x87\x74\x55\x20\xc4\x2e\x72\x2a\x69\x2b\xb8\x08\x6e\x5b\xd2\xdb\xfe\x77\xe9\x93\xea\x4e\x4c\xf5\xb9\x93\x5d\x85\xf8\x59\x55\x4c\xfa\xd5\x49\x90\x7e\x95\x0c\x7b\x23\xe3\x79\x67\x95\xe8\xb3\x64\xcf\xc9\xf8\xaa\x91\x06\x41\x1c\x92\x9d\x3a\x57\xdd\x42\xb9\xc4\x37\xda\x21\x08\x30\x3b\xd7\x3b\x6d\x11\x8d\x85\x6e\xb0\xb5\x6d\x10\x15\x49\x32\xab\xc6\x7a\x2b\xbb\xb1\x79\xdc\x6c\x3f\x36\xb3\x91\xea\xc4\x4d\xb0\xb8\x0d\x7c\x95\x44\xe2\x8f\x8f\x49\x58\xd4\xda\x30\x2f\x39\x49\x9c\xb3\x62\x26\x91\x25\xa9\x20\xbd\x65\xb4\x42\x4d\xf9\x85\xe2\x97\xca\xb4\x0d\x84\x57\x2e\x4d\x58\xc5\x87\x3a\x4e\xc1\x3a\xa1\x68\x95\x42\x1e\x55\xa9\x89\xb3\xc6\x61\x41\xf2\xae\x21\xc2\x31\x47\xb9\x20\x86\x17\x90\x96\x34\x5f\xcb\x4f\x04\x29\xf7\x96\xbc\x6e\xe1\x4d\x0f\x2d\xdb\xe4\x2d\x24\x0a\x15\x7d\xa5\x89\xa2\x8e\x93\x54\x4a\xe2\xef\x24\xb7\x7d\xb3\xe6\x9e\xf3\x81\x22\xb2\xf4\xf6\xb5\xcd\x9a\x3a\x31\xf7\x9b\x58\x02\x22\x61\xc2\x1b\x23\x26\x8d\xa2\x48\x42\x3e\xd5\x89\xaa\x9c\x5e\x0e\xfd\x11\x0e\x82\xef\x89\x8a\xe7\x1b\x03\x08\x3a\x4d\xb6\xc3\xe6\xd2\x78\x37\x89\x27\x9c\x33\x33\xa8\x01\x72\x22\x49\xef\x69\x52\x26\x0c\xf1\x54\xb7\x79\xdd\x8a\x02\x6d\xcb\xd1\xac\xd9\x1b\x92\x62\xb3\x57\x46\xb5\x89\x31\xce\x0f\xaf\x07\x49\xb0\x29\x14\x38\xe7\xba\x8c\xb5\xeb\xc6\x2d\xdb\xa8\x74\x16\x1b\x2a\xcc\x2b\x8d\x6c\x74\x0f\x71\xcb\x70\xfb\xd4\xe8\x8d\x8a\xbb\xd1\xce\x26\xd7\xfb\xd7\xcf\x5f\x90\xdd\xfd\xc9\xde\xde\xee\x13\xf2\xe4\x7a\xf7\xc5\xf3\xe7\xd9\xee\xb3\xfd\xfe\xf3\xf1\xde\xf8\xe9\xb8\xff\xe4\x69\xbb\x25\xe3\x64\x34\x83\x23\xcd\x73\x6b\x9d\x21\x80\x6b\x12\x93\xa4\x54\xf0\x93\xbf\xb3\x39\x61\xf6\xe8\xfb\x14\xf5\x55\x4b\x86\xe4\xf8\xba\x93\x8f\x14\x6a\x34\xed\xbd\x2b\x58\xc2\x52\x47\xc7\xce\x33\x41\x7d\x8b\xe3\x91\x77\x4b\x42\x72\xf9\xeb\x13\x79\xc0\x4c\xfc\x8f\x72\x19\xd9\xfd\x7a\xa6\xf0\x04\x99\x17\x98\xc3\x9f\xa0\x4d\x94\x7f\x95\x1e\xb2\x42\x54\x18\x72\x56\x8f\x4c\x61\x0d\x3d\x0c\x55\xe3\x27\x6f\x5a\x12\x0a\x61\xaa\x26\xf4\x73\x50\xe1\xbd\x3b\x64\x59\x5e\xcc\x02\x0c\x8d\xf3\x6e\x79\x5b\x2c\x67\x93\x73\x32\x2f\xee\x22\xfb\xb4\xed\x0d\x49\x19\x88\x93\xaa\xef\x80\xbb\x9c\x4a\x38\x09\x2b\x0a\xf8\x8d\x01\xdf\x24\x38\x50\x50\x39\x6a\x1e\xea\xbe\x39\x13\xb8\x06\x33\xcd\x92\x59\xec\x36\xcf\x16\x18\x6c\xae\xbd\x0c\x83\x33\x5a\xca\x1b\x5a\x74\x97\x7f\x22\x13\xd1\x51\x14\xf5\x99\x7d\x6d\xc4\x7c\xb4\x84\xe8\xb6\xd5\x35\x49\xfc\x71\xf9\x4b\xae\xb2\x01\x24\x69\xaa\x1b\x48\xe2\x59\x02\x14\x4a\x30\x26\xe6\x58\xc5\xa1\xf4\x1a\x3f\xac\x69\x7c\xe0\x95\x42\x91\x85\x22\x2a\xb2\x7e\x44\xc8\xb1\xbd\xad\x57\xd1\x2a\x0f\x6a\xc5\x7b\xb6\xd4\x7d\x56\x5e\x88\x4d\xad\x91\xd9\xcb\x82\x7a\x3a\x46\xc0\xc6\x3b\x1d\x0e\xc0\x60\x53\x76\x35\xb4\x60\x48\x13\xb1\x75\xb9\xbf\xb4\x90\x88\x93\x88\xa3\x39\x82\x6d\xbe\x97\x26\x28\xd6\x5a\x5a\x86\x20\xa1\x29\xa2\x12\x0d\x97\x84\xf1\xef\xc8\xb4\x60\x71\xca\xdd\xf4\x99\x3b\x7d\xd2\xa0\xcf\x02\x33\xbf\x4f\xea\xf4\x59\x78\x67\x35\xf7\xba\x4c\x0a\xc4\x53\x54\x80\x0a\xca\x3b\x59\xe1\x08\x44\xb7\x2d\xe2\xb5\xc4\xba\x0c\x8e\x23\x18\xac\xf8\xad\xda\xe4\xcd\x41\xab\x9a\x46\xa0\x25\x77\x6a\x4f\xc8\x8c\x70\xe2\xec\x24\x4c\x05\xcc\x0c\x95\x4c\xa8\x76\xe3\xa1\x25\x23\x39\x52\x99\x1a\x48\x36\xa9\x35\x46\x17\xe5\xa5\x84\xca\x60\xf4\x88\x0c\xe5\x18\x0e\xfd\x07\x54\x9b\xad\x39\x76\xec\x5b\x96\xfc\x3e\x36\x9e\xd9\x99\x69\x33\xea\xdb\x90\x07\x89\xe1\x9c\x0b\xd8\xd4\x44\x1c\xd7\x1e\x66\x5e\xb0\xc7\x47\xef\x3c\xe7\x10\xc3\x3c\xc8\x46\xce\x0f\x81\xd9\x23\x1a\xfc\x78\x5a\xbd\x82\x8d\x54\xe9\x02\x79\x3c\xde\x90\x74\x55\x34\x9e\xde\x08\xb7\xe5\xcf\x36\x12\xaf\x7f\x64\xcb\x9c\xe0\xfe\x08\xb7\xe1\x97\x7c\xf9\xb6\xc8\x09\xde\x1b\xe1\xb6\xf8\xd1\x5e\x25\x1f\x1e\x1f\x93\x0f\xf8\xf3\x4a\xf9\x17\x36\xe4\xc2\xd5\x58\x4e\x26\x03\x50\xce\xac\x6a\x0d\xb4\x86\x0d\x12\xaa\x72\x14\x2c\x6d\x88\x5b\x98\x5d\x10\xa5\x72\x91\xc1\xa0\x31\xd3\x7b\xdf\x64\xfe\xfc\x90\x8f\xe3\xea\xb0\x0f\x6a\x21\x0e\x0e\x52\xcd\xa5\x29\xf6\x4c\x7f\x19\xa8\xbd\x13\x9b\xa0\x82\x0d\xb9\xc1\x59\xb6\x3e\xc8\x35\x73\x8b\xc1\x8b\xb0\x94\x58\xbb\x81\x8b\xa4\x4c\x71\xf1\x25\x91\x4a\xb4\x6c\x72\x97\xe5\x63\x72\x59\xfc\x85\x34\x5a\x96\xa9\xc9\x6b\xac\x65\xe1\x2a\xc7\x5c\x4b\x68\xf3\x4e\x07\xa8\x8a\x6d\x8c\xc9\x41\xaa\x49\x8d\x1e\x84\x30\x32\xc7\xcb\xc6\x72\xce\xb5\x58\xc2\x2e\xac\x53\x2a\xd5\x47\x37\x8c\xe2\xe4\xc1\xb7\xbd\x17\xd6\x0e\x93\x68\xa8\xb6\x81\x90\xf3\xd4\x37\xba\xcb\x98\x59\x49\x6d\xee\xf7\x89\x3c\x54\x79\x46\x0e\xb4\x13\xc6\xf4\xd0\x2c\xe9\x39\x20\xb5\x24\x4f\x65\x2a\xf3\x84\xa6\xf6\xdb\xfb\x02\xcc\xd1\x06\xe6\xc5\x09\xe0\xb9\x24\x4f\x91\xde\x73\x3d\x59\xd9\x4c\xdd\xb5\x61\xa7\xc3\xbc\xe9\x1e\x24\x0c\xb3\x54\xd1\x40\x36\x4c\x86\x5a\x56\xee\x4a\xc5\x91\x73\x06\x14\x26\x4e\x00\x55\x22\xa6\x48\x2b\x06\x24\x93\x59\xfe\xf7\x21\xf2\xdd\x10\x28\x6c\x37\xc0\x59\x88\x1e\x0a\x0c\x39\xd2\x65\x7f\x69\xab\x70\x06\xcc\xf4\x9d\xab\x3e\x1e\x26\x0c\x2e\x13\x79\xb7\xe4\xea\xb7\x6c\x45\x8d\xb3\x90\xa4\x1d\x3f\x84\xdd\x00\x87\x42\xed\x4f\xe7\x02\x75\x42\xcd\x54\xe4\xb2\x6f\xbc\xb8\x6a\xf4\xb9\x3f\x57\x8a\x79\x78\x4f\xe5\x69\x4b\xdf\x5d\x09\x85\x31\x52\x35\x46\x2a\xc7\x98\x1f\xe6\x76\x8c\x26\x89\x96\xc4\x7c\x35\x77\x8c\xd9\x3c\x6f\x68\x0a\xf3\x20\x85\x02\xf4\xc4\x2a\x2d\xd5\xdc\x00\xee\xb4\x7c\x08\x72\x0e\x05\xd3\x87\x42\x62\x10\x4d\xd7\xb7\x62\xa3\x23\xee\x89\x0d\x28\xec\x24\x3d\x4c\x88\xbe\xa0\xf3\x14\xf1\xae\xbc\xa2\x13\x58\x8b\x34\x1d\x28\x02\xbb\x3a\x1d\xc0\xfe\x55\x33\x16\x00\xd9\x89\x44\x5d\xfe\xb5\x1b\x68\x39\x7e\xad\xe8\x22\xa5\x4a\x76\x73\x4d\x24\x8a\xea\x31\xed\xcb\xbb\xb9\xfb\x34\x2b\xee\x77\x67\xe4\x8e\x44\x34\x98\x2a\x74\xce\x37\xeb\x31\x19\x84\x4f\x7c\xef\xe3\x06\xb7\x03\x69\x8d\x7d\x6b\x78\x72\xef\xab\xab\x00\x5f\xf0\x24\x03\x49\xac\x6c\xb2\x39\xdc\xa1\x63\x98\x50\x74\x3a\x49\x21\xae\x60\x69\xf8\x8d\x4a\xd1\x19\x01\xaa\x5f\x87\x8a\x96\xa9\xde\x8d\xab\xb2\xb6\xc8\x45\x33\xfc\x36\x59\x22\x2a\x43\xf5\xa3\x31\x9e\x75\xe7\x59\x9e\xdd\x10\x86\xa6\x78\x26\xd3\xf9\x0b\xf8\xdb\xfe\x98\xbc\x4b\xc6\x10\xe5\xd4\x09\xe7\x94\x4c\xd3\x14\x8d\xd3\x48\xc8\xfa\x2c\xcf\x0b\xbe\x25\x1d\x75\xb7\x4c\xd0\x98\x72\xeb\x9e\xf2\xdb\x2d\x15\xbe\x66\x4b\x3a\xe5\x95\x5b\x59\xb9\x95\x6d\xb1\xa2\xe0\xb6\x64\xb7\x9d\xb6\x32\x0c\x1d\xaa\xb8\x94\x53\xb4\xd4\x31\x57\xd5\x1e\x7d\x22\x0f\x65\x52\xa4\x81\x25\xb9\xa1\x1f\x87\x04\x15\x43\x32\x1a\x09\x80\xbb\xc5\xc3\xf6\x3c\xa3\xb9\x00\xad\x59\x29\xc0\x45\x06\x3a\x1d\xa1\x05\x9e\xd4\x35\xd0\xfe\xcf\xf6\x0e\x19\xf6\x44\x03\x2d\x3f\x24\xb3\xbe\x7f\xe7\xb8\x77\x30\x7f\xb5\xff\xa7\x5b\xad\x38\x98\xef\xec\xa4\x70\x59\x99\x24\x7b\x10\x07\x58\x6d\x71\xf5\x0b\x9a\xc4\x93\xfe\x28\xea\x65\xd8\x1f\xb5\xbc\x4a\x1c\x1c\xfa\x4a\x88\x01\x22\xd3\x3a\x26\xea\x3b\x5a\xa0\x5b\xd4\x83\xe0\x8d\x5e\x0d\x59\x36\x78\x99\x05\xcf\xb3\x14\x29\xf0\x2b\x01\xfc\x4a\xc2\xdf\xaa\x70\x50\x6f\x54\x3a\x20\x0f\x33\x7f\x8f\x89\x84\xd2\xc6\x82\xa2\xdc\xdf\x44\xb9\x1b\xc2\x55\x2c\x98\x9f\xb2\xd0\x54\x4e\xfb\x9d\x4e\xfc\x78\xa1\xe0\xc3\x5e\x94\xe0\x96\x9b\xcd\xba\x19\x4f\x7a\xde\x49\x99\xf3\x84\xa1\x5c\x6b\xdc\x83\xac\x3d\x8e\x47\xef\x35\x22\x32\x8a\x7a\xd8\x6d\x60\xbd\xe3\x6e\x93\x68\xff\xca\x31\x3f\xf8\xdb\x2d\xe5\xa4\x5c\x64\xe3\x28\x97\x52\x90\x2e\x27\x25\x07\xd6\x84\x74\xf3\x82\xcd\x41\x0e\x66\xa2\xf9\x7c\x20\x62\x08\xe0\x6a\xab\x9d\xc4\xa3\x46\x0f\x3f\x10\x01\x0a\x2a\x31\x88\x8c\xc8\x6a\xc6\xc0\x88\x34\xa6\xa1\x45\xde\xd8\xc6\x0d\xaf\x6f\x83\x96\xc6\x06\x5c\xd4\x7b\x47\x99\x94\x85\xe0\x3b\x2e\x06\xa8\x4f\xf5\xc3\xbb\x59\x76\x53\xbe\x63\xc5\x1c\xbf\x43\x10\x36\xc5\x1c\xf8\x07\xfc\x1b\x22\xdd\x37\x4b\x56\x82\x66\xfa\x4d\x91\x8f\x19\xe1\xe4\xbb\x62\x99\x4f\x4a\x4c\xba\x17\xc7\xe7\x27\x47\xa7\x27\x7f\x3f\xba\x3c\xf9\x70\x76\xf5\xee\xe4\xfc\xe2\xf2\xea\xec\xc3\xdb\xe3\xab\x8b\xcb\xf3\x93\xb3\xef\x41\x37\xad\x8c\x82\xf4\x2c\x48\xf7\x8c\xdc\xab\x98\x5e\xf6\xdd\xdb\x0f\xef\x2f\x19\x91\x0e\x2d\x6c\x09\xd3\xc4\xa4\x7b\xf2\xf6\xc3\xfb\x37\xb7\x59\x7e\x43\xa0\xb3\x9f\xbe\xbf\x3a\x3b\x7a\x7f\x7c\xf1\xe3\xd1\x9b\x63\x59\xc7\x7e\x6c\x00\x08\xd2\x7d\x7f\x72\x76\xf2\xfe\xe8\xf4\xea\xcd\xd1\x8f\x47\xdf\x9d\x9c\x9e\x5c\x9e\x80\xf6\xfe\xed\xf1\xbb\xa3\x8f\xa7\x97\x95\xd7\x52\xf3\x72\x9c\xdf\x51\x56\xe4\x73\x79\xb1\xfa\x4f\x32\xc0\x11\x31\x21\x52\xbe\x87\x7a\x36\x44\x17\xbd\x5e\x82\x2d\xc1\x05\x9d\x2f\x66\x24\xf2\x41\xee\xd4\x39\x29\x97\x33\xd1\x9e\xd6\x0c\xfe\xf4\x1e\x93\xee\x69\x71\x7f\x2a\xae\x2f\x78\x78\x53\xe4\x13\x75\x24\x5c\x95\x7f\x24\x7e\x21\xe9\x7e\x3c\x7b\x7b\xfc\xee\xe4\xec\xf8\xed\xd5\xf9\xf1\xbb\xe3\xf3\xe3\x33\x58\xa6\xb3\x8f\xa7\xa7\xce\x0b\x47\xbd\x9d\x35\x2a\xbd\xe0\x9a\x27\xe2\xda\xcb\x38\x51\x66\xd6\x20\xfb\x9a\xd2\xd9\xec\x6c\x39\x9b\x95\x69\xf2\xf2\x45\xaa\xec\x96\x1a\xd9\xaf\x6c\x32\xc1\xa1\x29\x91\x39\x8e\xac\xd3\x49\x18\x6e\x97\x0f\xe5\x38\x9b\xcd\x4c\xb4\x25\xaf\xe3\x21\x19\xe1\xcf\xaa\xc4\xc0\x14\x15\x95\x91\x2e\x08\x66\x7e\x5c\xc6\xb4\x0b\x65\x2f\xd6\xe1\x70\x31\x90\xfd\x22\xb8\xe6\xd4\x83\xad\x78\x34\xe5\x95\xd8\x5a\x28\x4f\x3f\xe7\xdd\x72\x21\xe8\x29\x51\x09\x12\x08\xaa\x4e\xab\xb3\xb2\xa2\xfc\x60\x06\x6c\xd4\xca\xbb\x6a\xe4\x87\xb9\xf9\x0a\x87\x75\xe0\x3e\x4b\xd9\x34\xd2\xec\x7c\x8a\x7e\x37\x97\x16\x10\x4c\x48\x61\x66\x77\xc1\xc8\x9d\xfa\xbd\x81\x35\x9b\x0b\x24\x2a\xe6\x84\x96\xfe\x7f\xbf\xa4\x93\x54\xaa\xbc\xc4\x45\xb5\xac\x95\x9a\xbb\x21\x37\xac\xac\x7c\x53\x8b\x3a\x65\x96\x15\x43\xc7\xd6\x58\xf3\x70\x3a\x50\x54\x33\x39\x9c\x0c\x64\xc6\x84\xc3\xdb\xc1\x76\x1f\x7e\x2c\x06\x3a\x5a\x2b\xd6\x76\x2f\xe4\x50\x1a\x25\x92\x74\x20\x35\xac\xe0\xa1\xe2\xc7\xa9\x88\xb0\x04\x53\x10\x2e\xe7\x81\xde\x00\x02\x4c\x54\xcf\xe5\x32\x34\x25\xf9\xb6\x4d\x94\x64\x87\x6d\x7e\xc3\x3d\xac\x9b\x13\x07\x35\x58\x5b\xb6\x2a\x4e\x54\x20\x23\xf4\x7b\x0b\x44\x50\xf2\xe8\xc6\x0a\x6a\x63\x4f\xa3\x6b\xd1\xaa\x6f\x01\x4e\x11\x99\x99\xe0\x25\x5c\xa8\x80\x05\x5e\x0a\xea\xf4\xdf\x03\x4e\xd0\xf8\x54\x8d\x52\x25\xe1\x69\xc5\x31\xa8\x6b\xb4\x30\x56\xd4\x5d\x05\xab\x3a\x96\x0b\x5b\xe3\x64\xbb\x97\xa2\x85\xfe\xdd\x4f\xd1\xfc\x4b\x15\x5a\xa0\x32\xf8\x22\xe5\xbb\x67\xf1\x0e\xe9\xd5\xdd\xc5\xb7\x4a\x5f\x9d\x7c\x3d\x2a\x9d\x27\xae\x46\xac\x7a\xed\xcc\x43\xbb\x82\xca\x96\x00\xe4\x68\x50\x66\x51\x7d\xf8\x22\x63\xbc\xc4\x1c\x81\xd5\x20\x86\x64\x03\x9e\xc5\x63\x9a\x70\x0b\x23\x5f\xab\x11\xb7\xf2\x3d\xe3\x74\xa9\xcc\xdc\x61\x51\x60\x0c\x11\x7b\x77\xfb\x71\xc8\x47\x46\x21\x2a\x05\x4d\x02\xd6\xc9\x90\x8f\xf0\x43\xc2\x52\xc7\xe6\x59\xb6\xf2\xba\x77\x48\xba\xbf\x14\x34\x4f\xda\x6d\x1d\xa6\x4c\xa2\x08\xdf\xaa\xc0\xb1\x0c\x79\x70\xd8\x0e\xfd\xd2\x5a\xe4\x91\x2e\x2f\xa4\xc3\xe7\x61\xbb\x3d\xb8\x30\xc1\xb5\x33\xc8\xf8\xd4\xaf\xcb\x57\x56\x2c\xfa\x20\x5b\x93\x0c\x42\x01\xf1\x72\x02\x06\x50\xfa\x7e\x26\x2c\x4d\x08\xca\x65\x86\x6f\xb1\xe3\xb3\x22\x9b\x80\x82\xcf\x0f\xed\x88\x0a\x40\xeb\xb2\xdb\x67\xeb\xba\x65\x8e\x7e\x52\x1a\x13\x26\x4c\x34\xee\x32\x41\x4e\x7b\x4f\x36\x9a\x86\x1c\xa3\x68\x45\x72\x0a\x10\x69\x52\xb7\x8e\xdc\xf6\x9e\x7e\x41\x7b\x20\x06\x73\x9f\x8b\xe0\x39\xc3\xc5\xe1\x10\xd8\xee\x91\x0c\x8f\xe5\x0f\x40\x05\xda\x43\x99\xd3\xff\xcb\xb5\x0b\x64\x77\xc3\x3a\xf4\x32\x35\x16\xd5\xb8\x0d\x8d\xf4\x3e\x5b\x24\xe9\x30\x1f\xd9\xbc\x06\xb4\xd3\x01\xcf\x6d\x70\xef\x9c\x4d\x65\xe9\x24\x87\x4c\x60\xce\x1a\x53\x67\x4c\x7b\xbd\xe6\x31\x89\xbf\x7b\x2d\x12\xa4\xb2\x60\x68\x7b\xdb\x5d\xd9\xe7\xdf\x32\x31\x7f\x13\x9d\x61\xea\xd1\xdb\x7e\x5e\x6c\x06\xd8\xc1\x7a\xa9\xbd\x48\x5b\xf4\x30\x51\x59\x7d\xe9\x70\x6f\x94\x22\xf3\xd0\x77\x1f\x7a\xa3\x34\x1d\xe8\x82\x92\x29\xaf\x7d\x70\x77\xb7\x79\x6c\xdb\xdb\xf1\x31\xf9\xd0\x7f\x78\x3b\x58\x38\x6d\xf6\xbd\xdd\x49\x3f\xfb\x20\xe8\xaf\x9d\xbe\x0e\xdc\x12\x4c\xca\xbf\x6d\x82\x02\x85\x8f\xfc\x5e\x59\xd8\x6b\x05\x7f\xd8\x94\x8a\x7a\x3a\xd6\x5b\x1d\xb6\x91\x1d\xd0\xd7\xbd\x03\xba\xbb\x9b\x7e\xce\x87\x74\xb7\x3f\xf2\x07\xb2\xf2\x67\x49\xee\xb7\xee\xd4\xc6\x2a\x03\xa3\xf6\x9b\x8f\xe7\xe7\x27\xc7\x6f\xb7\xde\x7c\x78\xff\xe3\x87\xb3\xe3\xb3\xcb\x2d\xb8\x6a\x21\x9a\xce\xd6\x90\x4e\xf0\xb3\x69\xaf\x37\x25\xd7\x2f\x77\xb3\x1e\x99\xee\x3e\x79\xfa\xe4\xf9\xee\xcb\x97\x24\xdb\xcd\xc6\xfb\x7b\x2f\xa6\x2f\x7a\xd9\x98\x64\xa3\xb6\xc5\x9f\xd7\xce\xcd\x95\x6c\x93\xc7\xc7\x6d\x32\xbc\x19\x49\x3e\xa4\xd6\x82\xc4\x78\xba\x78\x57\x6e\xc6\x6e\x4a\xa5\x81\x1a\xde\x8c\xb0\x09\xfc\xed\x91\x28\xcb\xfc\x9e\x65\x8b\x8a\xad\x24\xf8\xdf\x79\xee\xb8\x2d\x5f\x57\x73\x70\x60\x20\x05\x54\x2f\x10\xcc\x95\x62\x26\x87\x00\x92\x5e\x71\xb5\xb8\xb2\x8f\x05\x23\xa0\x67\xca\x9d\x97\x02\x1a\xf2\x6c\x4e\x26\xdd\x39\x61\x37\x24\xc9\xe5\x53\x9a\xa2\xed\xeb\x84\x1a\x1b\x23\xda\xe2\x98\xae\x56\xa8\xc1\x1f\x5a\x0e\xb3\xe2\x9c\xeb\xaa\x71\x24\x07\x82\xcd\xe2\x08\x38\x3b\xf4\xc4\x33\x3a\x27\xaa\x26\x49\xc4\x6e\x1c\xb2\x1d\xed\x8d\x33\x60\x11\x17\xde\x7b\x87\x68\x3f\x16\xe5\xbd\x9b\xcd\x14\x3b\x76\xa3\xd3\x01\xa1\x49\x1e\x1f\x1b\xaf\x48\x5b\xf7\x83\x73\xa9\xaa\x7c\x07\x96\xd8\x37\xf1\xe6\x49\xa7\x63\xdb\xc3\x6e\x7b\x3f\x5c\xbe\x3f\xb5\xad\x5d\x6c\xdc\x5a\x85\xb1\xe8\xe6\xc5\x84\x5c\x3e\x2c\x88\x6d\xed\x57\xa7\x35\x95\xd1\xc1\x96\x5f\x35\x8a\x30\xa4\x45\xd2\x51\x83\x45\x12\x52\xd9\x46\x0b\x4d\x7d\x15\x51\xea\x4b\x8c\x0a\x73\x08\x3d\xac\xa9\x3a\x86\x0a\xcf\x96\xac\x80\xf4\xbe\xb8\xad\xc4\x73\xbb\x9c\xfc\xca\xdb\xe2\x6d\x76\x23\x5d\x3d\x54\x79\x63\x17\x06\x34\x1c\x10\x4b\x69\x52\x48\x0b\xb1\xa2\xd9\x2e\x89\xc6\xec\x92\x68\x84\xab\x6e\xb6\x5e\xe3\xd9\xcd\x81\xee\x1c\x8c\xfb\xd2\x84\x57\x8d\x13\xd3\xc7\xc7\xa4\x6a\xcc\xe6\x0e\x5a\x3b\x23\x6a\xfd\x97\x21\x97\xd3\x15\xa2\x31\x6b\xa9\x3b\x95\x14\xc4\xb7\xa1\x6b\x91\x6d\xc9\x12\x25\x1c\x6b\xf0\x16\x7b\x7e\x48\x2c\x94\xa7\xaa\x88\xd4\x3d\x16\x13\x09\x27\x8e\x81\xab\x63\xef\xaa\x6c\x34\xcb\x14\x7d\xfa\x37\xbb\xab\x35\x30\xd7\x60\xd6\x54\x61\x8b\x6b\x79\x08\xc0\x03\x30\xec\x79\x8a\x7e\xfc\x3a\xb6\x67\x13\x5b\x3e\x00\x0b\x0d\x07\x1e\x8f\xa3\xc1\x29\x32\x36\xb1\x19\x8f\x8f\xc7\xf0\xbf\xc9\x95\x62\x8f\xe0\xe3\x63\xf5\x18\xaf\x12\x9e\x1e\xf6\x07\x89\xd8\x8e\x4e\x47\x5c\x30\x87\xbd\xc1\x07\xf1\x72\x3f\xe2\x26\x03\x08\xa3\xd3\xe9\x83\xbc\xc1\x62\x00\x51\xfc\xc9\xe0\x42\xfc\x79\x3a\x50\x76\xe8\x2d\x45\x9d\xbd\x40\x31\x2d\x80\x7b\xb5\xea\x89\x21\x86\x8f\x45\x13\x16\x69\x72\x41\x5c\x10\x29\x4a\x2d\x93\x54\x67\x89\x97\xe7\x16\xb2\xcb\x33\x97\x10\x7c\xb9\x71\x57\x0a\x11\x7a\x7d\xf2\x2f\xe9\x6b\x7f\x6f\x6d\x5f\xe2\xf8\x98\xa9\x51\x7c\x9c\x30\x77\x6a\x4c\xd2\xe3\x75\x1d\x42\x52\x7f\x9a\xca\xd3\xaf\xfc\xea\xc4\x39\x7e\x7c\xd4\xa6\x87\x7f\xa3\x5c\xd2\x21\x47\x49\x81\x38\xa2\x2e\x21\xb7\xdf\xdb\x78\x25\x1a\x26\x6d\xb2\xf0\x73\xb7\xe9\xfe\xef\xd1\x34\x68\x70\xdd\x66\xf7\x82\xf5\xb4\x47\x24\xc8\x2b\xe5\x54\xd9\xaf\xab\x62\xf2\x3d\x39\x8c\xd8\x93\x86\xf6\xfd\xbc\x6e\x4e\xa5\xa7\xf5\x3d\xd4\xd5\xe9\xef\x35\x10\xd1\x3e\xd1\x1a\xf0\x14\x32\xea\x33\x73\xf7\xb1\xbf\xbf\x29\xb7\xc0\x5e\xbf\xde\xd7\x09\x9c\x9e\x77\x98\x71\xc0\xd0\x2c\x81\x67\xaa\xd3\xd7\xaf\x83\x11\xc8\xa0\x52\x82\xd6\x72\x4b\xef\xd5\x94\x36\xd1\x9a\xbc\xd2\xfb\xaa\xf4\x31\x64\xc3\x9f\xd8\x54\x48\xcc\x2b\xf6\x64\x00\x7f\x9e\xae\x1d\xc9\xca\x59\x8d\x27\x0d\xa0\xd7\x52\x3e\x92\x4b\x85\xea\x13\xae\x38\x7f\x77\x39\x9f\x6e\xd0\x80\xb4\xcb\xb7\x50\xec\xd6\x5f\xc3\xfd\x02\xa7\x09\xac\x1b\xa4\x90\x90\xc2\x06\x96\xee\xe6\x66\xdf\x21\xf7\x99\xdb\x62\x13\xdb\xd9\x72\x4f\x95\x8b\x7c\xfa\x4d\x4c\xa4\x92\x74\xf8\x15\x9a\x38\xbb\x96\x1a\xae\x57\xe3\xc9\x5a\xc8\xf3\xf6\x4b\xf3\x51\x2d\x52\xc9\x92\xe1\xc9\x43\x9e\x35\xc9\x75\x04\xbe\x80\x54\x15\xee\x40\x9e\xed\x85\xfc\xa3\x4c\x53\xe1\x0c\x75\xcd\x6a\xd4\x9f\x38\x37\x80\x94\x7f\xf0\x9e\x3c\xaf\xe1\x5a\x65\x2b\x8a\x0b\x76\x2b\x3c\x6b\x00\x2d\xb8\x09\x24\x8b\xcb\x0e\x15\x98\x31\x2f\x62\x38\xbc\x3b\x5b\xce\x66\xee\xc4\x9e\x36\xa1\x5a\xdb\xa6\xd2\x2b\x4b\x89\x0f\x37\xb2\x1e\xdd\xa3\x35\xb4\xa1\xa9\x87\xf5\x74\xe2\x0e\x90\xbd\xc8\x57\x7a\xc3\xb4\xf2\x0c\x95\x98\xba\xb9\x01\x97\xd8\xb0\xdf\x74\x9a\x2c\x5f\xf7\xd2\xcf\x19\xce\xba\x63\x81\x9f\x1d\x13\x82\x19\xee\x1d\xcc\x5e\x2d\x0f\x66\x3b\x3b\x69\xe6\x0a\xb3\xca\xe1\x6c\x84\x8a\x6e\xc6\x93\x59\x2a\x38\x6a\x77\x18\xee\x08\x32\xc8\xec\x29\x68\x7b\x17\x14\x9e\x36\xc2\x64\x28\x88\xa1\xd3\xc4\xbf\x3c\x69\x9a\x52\x7d\xa8\x3b\x1d\xd2\xbd\x29\x78\x01\x20\x3b\x2b\x89\x4a\x3a\x2e\xae\xd3\x3c\xf0\xef\x10\xb8\xb3\x50\x38\xc1\xa9\x86\x2a\xf7\xf0\x79\x52\x78\xe8\xea\x69\xa3\xf0\xef\x8b\x86\x2b\x6e\xfd\xaf\x18\xae\x53\x6d\x83\xe1\xae\x91\x2d\x6a\x31\x9a\x1a\x34\x74\x80\xc1\xa8\xd2\x74\xe2\x34\xd6\x74\x1c\x54\xe5\x75\xb4\xcd\xb9\xeb\x9d\x14\x9d\x2a\xf7\xb0\xfb\xb3\xfd\x78\x9f\x24\xbf\x03\xb3\x5c\x89\xe5\x99\xc6\xf2\xbc\x88\xa9\x00\x12\xe6\x5c\x1b\x4d\xa9\x2f\x36\xd5\x06\x48\x56\x33\x2b\x4b\xc2\x78\x5b\xe9\x04\xa4\xb7\x1c\xeb\x8e\xc1\x7f\x88\x6f\xa2\x0c\x88\x79\x3e\x99\x39\x6a\x16\xc6\xc6\xd4\x97\x2b\x8c\xb8\xcf\xd4\x44\x94\xba\xbe\x79\xa5\x18\x8f\xde\x16\x1d\xa0\x22\x4d\x5c\xef\xb2\x24\x85\x43\x20\xf3\x28\x1b\xf6\xad\x26\xf5\x83\xe3\x49\xb4\x26\x2c\xa7\xb2\x91\x66\x88\xaa\x05\xfb\x65\x39\x5f\xec\xd2\xe9\x6e\x5e\xf0\x5d\x95\xe1\x6c\xd2\x16\x5f\xc5\xf2\x21\xda\xc8\xea\xc6\x83\x6a\x7e\x39\x6f\x1e\x06\x4e\xba\x09\x0c\x35\x69\xd5\x35\xae\xb5\x4d\xba\xd9\xec\x3e\x7b\x28\xcf\xcd\x92\x75\x3a\x15\x16\x9e\xba\x98\x44\xb0\xe0\x13\x3a\x81\xf5\x7e\x68\x76\xe7\xf4\x26\xaa\x06\x65\x36\xa1\x26\x41\xc3\xc6\x80\xaa\xcd\xd4\x99\x16\x8f\xd0\x89\x5c\xfa\x07\x0d\xb7\xb9\xe7\xcc\xfc\x65\x3a\xac\x98\xe8\xc3\xb3\xb3\xd4\x2b\x60\xa1\xaa\x36\x1d\x83\xa9\x59\x19\x92\x7c\x0f\xc3\x9f\x49\x43\x4b\xb5\x88\xd7\xc4\x4d\x4e\xe0\xd8\x06\x68\x13\x69\xf9\x58\xaf\xfa\x77\x1b\x6a\xf4\x6d\x8a\x4d\x54\x39\xcd\x2c\xc8\xb8\x21\xe1\xc0\x35\x99\xed\xb4\xb7\x86\xed\x1d\x78\xbe\xba\x59\xd2\xc9\x4e\x7b\xd4\xf6\xb9\xe9\x26\x0a\x34\xc6\x6f\x01\x1f\x59\xa7\xbc\x70\x99\xa9\x35\x84\x68\xa5\xe1\x37\x32\xe9\xdf\x26\x6d\xef\x37\xdd\xdb\x7e\xdb\xc5\x82\xe4\xca\x74\x6a\xa3\x96\x9b\x38\x82\x26\x66\xd4\xed\xc7\x65\x43\x9f\xc4\x48\x2e\xc4\x36\x50\xa5\xc5\x3b\x8d\xdd\xea\x1c\x53\x3b\x28\x7d\x99\x97\xb5\x97\x39\xc7\xa5\x46\xe7\x91\x3b\x5c\x05\x7f\xf0\x3b\x29\xd2\x94\xe1\xa2\xda\xc9\x32\xde\x49\x91\xb6\x18\x5e\x36\x74\xb2\x04\x62\xcd\x59\x3e\x50\xa5\x91\x79\xc1\x89\x59\x44\x94\x21\x8f\x7f\xa8\x92\xed\x4e\xf5\x62\xe1\xd7\x76\xb7\xb4\x46\x5e\xe4\x70\x54\x8e\xfa\x96\xf7\x20\xee\x30\xe4\xf6\x91\xa6\x1a\xdd\xe9\x4c\x06\x62\x45\x35\x1a\x5f\xde\x93\x76\xc1\xa2\x80\x33\x26\xa8\xa6\xc7\xe3\x49\x7a\x6a\xa4\x4a\x4e\xdd\xf1\xac\x28\xed\x5c\x5a\xa0\xb0\xaa\x9a\xc0\x5a\xb8\x1f\xf6\x46\x82\xa0\x1a\xf6\x47\xc0\xf2\xdc\x75\xcb\xf1\x2d\x99\x2c\x67\x32\x8d\xfd\x6c\xa6\xae\x5e\x06\x41\xc3\xcc\x9d\x75\x43\xf8\x5b\x22\x8d\x07\x0b\x26\x88\x74\x2a\x2e\x91\x9c\xdc\xc3\xdb\x42\x26\xc7\x03\xe6\xd2\xd9\x86\x46\xdd\x68\xb3\xf6\x1c\x65\xb8\x30\x86\xd3\x25\x96\xb9\x2a\x09\x5a\x06\xa0\x3f\xf3\xd6\x02\xac\xad\xc7\xc6\xc8\x31\xbf\x41\x36\x4c\xc6\x87\x85\x72\x59\x2b\xd1\xa4\x6a\x1d\x7b\x2b\x18\x09\xc9\xba\x8f\x51\x89\x96\x68\x82\xa6\x69\xab\x61\xe3\xc5\x04\xcd\x4a\x65\xe8\x36\x55\x71\x2e\x32\xb1\x52\x97\xd9\x4d\x72\xeb\x93\x98\x97\xd9\x4d\x9a\x2c\x62\x12\xb4\x5f\x92\x05\x12\x0d\x18\x9a\xef\x97\x6f\xd7\x43\x48\x42\xc5\x2c\x20\x28\x21\x4c\xaa\x56\xab\x83\x90\x23\xd1\x24\x0e\x6b\x2b\xd5\x03\x98\x4b\x92\x49\x48\xd9\x14\xdf\x76\xe3\x86\x3e\xa1\x72\x6b\xb5\xbb\xa6\x1a\x82\x26\x6b\x40\x0f\x62\x29\x1c\x35\xa2\x50\x1d\x41\x51\x91\x3e\x3e\x26\x3e\x18\xcb\xb2\x66\x6f\x18\xe2\x4e\x34\x8b\xd8\xd4\xa8\xd1\x04\xa8\x7b\x6e\x7f\x13\x66\x04\xd8\xdd\x62\xb1\x1f\xc0\xb1\xa7\x9e\xcf\x6a\x3e\xe5\xa9\xe0\x6d\x0f\xeb\x44\x5a\xda\x1e\xc2\x39\xe4\xa5\xf8\xac\x93\xb5\x82\x95\x2b\x24\x56\x2e\x5d\x54\xd1\x28\x1f\xa2\x6a\xd4\x85\x1a\x75\xdd\xd0\x98\x18\x9a\x7f\xc6\x04\xdf\xad\x25\xc9\x33\x5c\xd4\x0c\xbb\x90\xc3\x46\x63\x1c\x0e\x3c\xb4\xcf\x4d\x32\xb4\x44\xdb\xdb\x14\xcd\x42\x2e\xac\x8c\x9d\x8f\x93\xa4\x44\x63\x7b\x3a\x4e\xd6\x53\xfb\x07\xb5\xe1\xf7\x6d\x7c\x10\x0a\x29\x1c\xa5\xbd\xb0\x25\xfc\x21\x5e\xe6\xae\x1a\x7e\x5b\x67\x77\x84\x70\x13\x86\x54\x17\x67\xab\x68\x62\x02\x0a\xc1\x04\xfc\x8e\x47\xc5\x0c\x54\x1f\x16\xab\xa9\xa3\xb5\x9a\x3a\xfa\x35\x9a\x3a\x9a\x22\xae\xd5\x74\x46\xe3\x83\xe0\x78\xd9\x33\x62\x96\xfc\xad\xb6\xca\xb5\xc6\x5a\x45\xf1\x69\xb9\x88\xe5\x08\x17\xe5\x80\x6e\x3d\xab\x37\x1d\x90\xb6\xc0\x55\xd5\x95\x93\x35\x41\xe2\x0a\xc2\x33\xed\xbf\x0a\xa6\x05\x79\x34\x18\x40\x5d\x54\x15\x47\xef\xfb\x2d\x31\x78\x3c\x25\xbe\x8d\x2b\xc2\x9c\x50\x1f\x74\x9a\x30\x30\xf9\x0c\x63\x7e\xd8\x21\x28\x7f\x33\x38\xf0\x74\x9a\x5c\x0b\x0a\x33\xc7\x0c\xa8\xa6\x2d\x3a\x4d\x2a\x9a\x6c\xc8\x9d\xfe\x39\xc7\x6f\xbd\x9c\x37\x0c\x31\xbb\x36\xc6\x7a\xce\xf1\xe5\x7b\x48\xf2\x30\xfe\x95\x5e\xc2\x70\x4d\x50\x5e\x09\x1d\xe0\x5a\xe6\xf2\x8a\xf7\x47\xe0\x57\x78\x53\xb6\x74\x88\x89\x4e\xe7\x5a\x2a\x68\xa5\x21\xf0\x95\xb2\xc6\x36\x61\x81\xd0\xe9\xba\xc8\x38\xb4\xe4\xae\x06\x33\x66\xcf\x48\xdc\x30\x11\xb1\x48\x6d\xd5\x6d\xb4\xf6\x8b\xc3\x91\xd9\x42\x5a\x72\x95\x38\x89\xbb\x89\x93\x94\xcd\xf9\x7d\xc2\x87\xcc\x18\x2d\xa6\x2d\x90\x3c\x69\x8b\x3b\xd5\xa7\x9b\x1f\x49\x7b\x8f\x4b\xa3\xc5\xad\xb6\x76\xe2\x33\x93\x7c\xe7\xe8\x74\x7a\xe2\x0e\x53\x14\x89\x4a\x6c\xd6\x1f\xf4\x52\xe7\xed\x65\x76\x73\xb8\xa7\x5e\x2d\x18\x59\x64\x0c\xf2\xde\x1e\x3e\x51\xef\x24\xed\x02\xaf\x5e\xa8\x57\x06\x6d\xfc\x50\x14\x9f\x0e\xfb\xcf\xd4\x6b\x85\xdc\xe0\xe5\xfe\x9e\xdf\x0b\x50\x43\x87\xcf\xfc\x46\xdf\x64\xb3\x19\x61\x87\xfd\x3d\xdd\xb0\x44\x10\xd0\xc0\xde\xd3\x67\x5e\x59\x20\x21\xf3\x31\x39\x7c\xda\x17\x4d\x5b\xe3\x8c\xdf\x5c\xaf\x9a\xed\xed\x84\x74\xb8\x36\xb6\x7c\xd6\xa4\x38\x75\x84\xd7\x4a\x74\xfd\x49\xd3\x69\x1e\x2f\xf6\xbc\x49\xe7\x28\x1b\x01\x06\x43\xb7\x22\xc0\xf1\xc7\xa0\x89\x8d\xad\x3e\x73\xc3\x77\xe9\x5f\x65\xe5\x36\xf5\x85\xfb\x40\xb7\x56\x7d\x05\x1b\xec\x42\xc5\x00\xcf\x92\x02\x2d\x51\x89\x32\x6f\x98\x4d\x2a\xbe\x40\x37\x52\x21\xaa\x29\xce\x0d\xe5\x55\xe0\x77\xd2\x44\xd0\xf3\x3f\x54\x5e\x18\xa2\x3b\xfc\x79\x62\xd0\xc2\x20\x47\xaa\xde\x80\xa2\xb1\x53\x61\x50\x28\x5f\x0f\x40\xb2\x2a\x6c\xb4\x44\xb8\x10\x2f\x1a\x7e\xca\x7b\x41\x1e\x7c\x5f\x27\xe2\x9a\x77\x3e\x8f\x92\x5d\xb9\x22\x59\xfa\x96\xcd\x45\x25\xce\x02\xe5\xfd\xb2\x71\x03\x0a\xc0\xc5\x75\x2c\x59\x5f\xb9\x6a\x56\x70\x6d\x29\x11\x6d\x6c\xe7\x04\x8f\x90\x42\x7e\x00\x08\x73\x75\x2d\x58\x61\x29\x96\xec\x21\xd6\x5d\xe6\x8c\x64\xe3\x5b\xd1\x77\x9a\xa4\xad\x1c\x97\xab\xac\x6a\x9e\xfb\x3c\x26\x32\x16\x97\xa0\xa3\x59\x55\x00\xd6\xba\x4e\x68\x7a\xc8\xb0\x14\x14\x0d\x38\x7e\x97\x24\x0c\x53\xbd\x97\x69\x65\x1b\xa9\xd9\x46\xa5\xe2\x74\xf7\x32\xd8\x41\x6e\xb6\x96\xad\xdf\xcb\x95\x3b\x01\x5f\xc7\x90\x83\xf3\x0a\xef\x4a\x53\x2e\xcd\x2d\x2e\xc5\x9a\x42\xbc\x9c\x54\xeb\x76\xa8\x95\x60\x00\x9b\x57\x91\x5a\x6c\x5f\x27\x59\xc3\x7a\x52\x9c\xa1\xa2\x6a\x8a\xfb\x7c\x63\x05\x69\xcc\x7c\xdb\x4f\x3b\x24\xa9\xf7\xfc\xf5\xeb\x27\xa8\xc4\x2f\x3a\x39\x5a\xe2\xe1\xa8\xf5\xa4\x93\x77\x3a\x4b\xd9\xb3\xf4\x7e\x4d\xd1\x9e\xfb\x0e\x5c\x61\x53\xd4\x77\xdf\x49\xbf\x58\x41\x46\x39\x3e\xa6\x14\x89\xa3\x9d\xa1\xed\xed\x32\x45\x54\x6b\xf6\xc0\xb1\xd4\x99\xd0\xf3\x0d\x34\xc6\xaa\x59\xe9\x9b\xcc\x3d\x63\xdf\xf5\x38\x11\x16\x5e\x45\x96\xb7\xc8\xd1\x15\x40\x3c\x5f\x63\x96\xeb\x9a\x0c\x7b\x7a\x67\x0f\x4f\xd2\xae\x05\xbf\x96\xd8\xdc\x4e\x27\xc9\x6a\xbc\xbb\x88\x53\x16\x73\x65\x17\x5a\x45\x5e\x0a\x51\x59\xad\x83\xe6\x75\xa9\xeb\x7c\x49\x49\x19\x45\x73\x45\x0a\xd1\xbd\x28\xca\x50\xa1\x18\x8b\x12\x67\xc0\xea\xe8\x2e\x66\xb8\x74\xbc\xb5\xc5\xdd\xfe\x5b\x42\xbd\x96\xd1\x93\x54\x0e\x7a\x8c\x0b\x99\x57\x56\x31\x4a\x25\x9a\xda\x37\x79\x36\x27\x25\x9a\xe0\xa5\x7b\x71\x27\x33\x24\x91\xd2\x24\xfd\x5c\x74\xc7\x33\x92\x31\x47\x85\x79\x8b\x7b\x07\xb7\xaf\xc6\x9a\x0c\xb9\xdd\xd9\x49\xd5\x31\x1e\x0f\x6f\x47\xb6\xdc\x02\x4f\x1c\xa3\x51\x34\xc7\x13\x69\xb5\x8a\xee\xb0\xc9\x70\xf2\x80\x7b\x07\x0f\xaf\xee\x0e\x1e\x6c\x23\x8b\xe1\x83\xd3\xc8\x8d\xe7\xfd\x3d\x4f\xd1\x15\xee\x1d\x5c\xbd\xba\xd1\xbd\x5f\xd9\x8a\xf3\xe1\xcd\xf0\x6a\x34\x4a\x5b\x85\x02\xe3\x1c\xdd\xa0\x29\xba\x43\xdb\xbd\x74\xa5\xca\x14\x12\x2d\x6e\xd9\x47\x0b\x90\x8d\x37\xac\xe5\x50\x7d\xb1\x8b\x14\x05\x59\x98\x00\x69\x90\xde\xa4\x25\x2e\xc2\xcd\x2e\x2b\x9b\x9d\x19\x64\x28\xc5\xf0\xad\xdf\x92\x25\x7a\xf6\x44\x00\xe1\xac\x22\x0a\x4a\x55\xd8\xd5\x7e\x87\xa1\xa9\x2d\xfe\x42\x94\x9e\x06\x4a\x44\xed\x3e\x6f\x4a\xf5\xf7\xa0\xdc\xc4\xf5\x21\x48\x95\xef\x52\xa9\x09\x17\xa9\x14\x54\x83\x42\x53\x34\x43\x13\xb4\xbd\x3d\x86\x55\x15\xaf\x4c\xcc\xd4\xd2\xca\x92\xa0\xf5\xbd\xa7\xcf\xd2\x4e\x67\x3b\x22\x56\x12\xc4\x68\xc0\x36\xff\x94\x2c\xd0\x2d\x2a\x91\x67\x63\xff\x62\x2d\xf1\xe0\x9f\xe1\xe8\x91\x83\xf3\xec\xcb\x03\x8b\xb4\x95\x45\xe4\x81\x9e\xf3\x46\x3f\x94\xc9\x5e\x93\x1b\x9a\x83\x10\xf8\x7b\x56\x2c\xa5\x41\x7e\x20\xe6\x95\x0e\xbe\xd2\xd6\xdf\x9d\xc6\x7e\xd8\x56\xad\xb0\x95\xdc\x6f\x7d\xe7\x0a\x49\xd6\x78\x5a\x7c\x83\x90\x64\x8d\x60\xa4\x51\x98\x58\x12\xee\x8a\x47\x4a\xb4\xbd\x9d\x0b\x02\x43\x01\xcf\x77\xcd\xb1\x66\x0d\xa5\x5f\x46\xa2\xe7\x8d\x67\x59\x59\x3a\x19\x6e\xb5\xa4\x6d\x6d\x4a\x5b\x67\x48\x11\x97\x5d\x29\x17\x56\x61\x3b\x38\x02\x24\xb7\xc8\xc6\x64\x90\x23\xce\x96\x25\xa7\xf9\xcd\x80\xad\x5a\x6d\xe8\xbe\x2d\x53\x7d\xb8\xe3\xd1\xd1\x17\x50\x30\x83\x21\x19\x61\x2a\x43\x35\x19\xf9\x6a\xe0\x9a\xef\x4f\x43\xe5\x69\x21\x88\xcb\x3c\x2d\x20\x4a\x8f\xc7\x76\xda\xa2\x3a\x67\x9f\xe9\xce\x73\x4d\x73\x46\xc1\x21\x23\x8b\x8e\xbd\x83\x59\xd7\x4c\x10\x65\x98\x75\xf5\x14\x05\x06\xb7\x53\xe4\xe0\x3e\x24\x40\xee\x34\x71\xe7\x9a\xa6\x48\x26\x21\x73\xe3\x6f\xaf\x95\x92\x71\x64\x34\x35\x70\x4b\x1d\x84\xba\x9c\xa8\xac\x8c\x42\x44\xee\x95\x18\x17\x74\x59\x37\xe5\x65\x38\x65\x90\x80\xa1\x19\x5e\xaa\x49\x8f\xf1\xd2\x99\xf4\x14\x2f\xcd\xa4\x41\x7e\xbe\x66\xf0\x2a\xe9\xda\xcc\xcc\x60\x8a\xc6\xe1\x0c\x66\xf1\x19\xcc\xd0\xc4\x3a\x00\xfa\x7b\x1d\xf2\xd0\x1f\x1d\x1f\x95\x3e\x5c\xd0\x04\xf5\x1d\xae\xf3\x07\x1b\xdd\x45\x89\xcd\xc1\xc4\xfe\x7a\xa6\x13\xd9\xbb\x29\x00\x81\x9d\xbb\x21\x3c\xe1\xe9\xc1\x6e\x7f\x1b\x62\xc0\xd0\x88\x4f\x5a\xb1\xd3\x47\x59\x8a\x98\x92\x76\x75\x3a\x89\xfe\x29\x60\x37\xd3\x6c\xed\xcb\xb5\x36\x6c\x55\x72\xc9\xb9\xe4\x32\x83\x6d\xfd\xeb\xae\x01\x8b\xb4\xca\xee\x84\x4e\xde\xc0\x25\xa3\xf5\x41\x99\x8f\x53\xc9\xaf\x0b\x32\xe6\x6f\x1c\x0d\x49\xd2\x7e\x1b\xd4\x91\x0e\xf5\xff\x8f\x96\x4a\xb6\x53\x89\x88\x34\xea\x5d\xeb\x54\x58\xbd\x41\x9c\x69\xf9\x97\x88\x9a\x56\xc0\x12\x9a\xab\xb3\xf0\xae\xae\xb5\xde\x87\xbf\x4b\xc7\x97\xd9\xcd\x59\x36\x27\x41\xdf\x51\xce\x22\x57\x24\x4b\xbf\x86\x64\x71\xb5\x57\xce\x48\xe2\xa2\x00\xd0\x64\x49\x52\x7a\x6c\xb4\x5d\xd3\x80\xba\x41\x13\x97\x26\xfd\x98\x4c\x51\x96\xa6\xb9\xd4\x39\xa9\xa0\x3e\x13\xb4\x54\x3a\x57\x41\xb5\x56\xed\x87\x15\x21\x0b\xe7\x24\x99\x36\x32\xad\x99\x13\x66\x46\xb5\x3e\x16\xb0\x30\x53\xac\xac\x3a\x43\x97\x50\x03\x99\xb7\x92\x6f\x74\x4d\xa3\x36\xf3\x3a\xac\xf5\x1b\xb5\x24\x48\x86\xdf\x25\x45\x83\xc8\xa2\xac\x11\x59\x14\x3e\xc3\x9b\x45\xd8\x5c\xea\xa7\xb9\xa2\xee\xe4\x42\xf9\x85\x25\x36\x98\xa7\x81\x79\xb1\x31\xaf\x94\x3b\x93\xb3\x3a\x7c\x0f\x80\x5b\x99\xce\x4b\x48\x51\xa6\x92\x0b\x16\x8e\xc9\xc4\x5a\x69\x95\xd7\x9a\x8f\xf5\x2a\xfe\xa8\xb9\xc9\xf8\x07\xa4\xbc\x9d\x51\x94\x5c\xca\x1d\x2b\x42\xa7\x97\x1c\x18\x1a\xaa\xba\xba\xcd\xca\xe3\xbb\x6c\xa6\xf1\x2e\x55\x38\xd2\xa3\x50\x02\x9f\x5f\x51\x5e\x8e\xa7\x70\x6d\x03\x2b\x34\x6b\xd5\x9b\xb2\x7a\xf8\x4d\xcb\xae\xb5\x84\xb4\x31\x10\x67\x53\xba\xfa\x65\xfc\x0c\x98\xb3\x12\x67\x6a\x01\x76\xfb\x07\xe5\x6b\xdc\x3b\x28\x77\x77\xf5\x3d\x99\x0d\xcb\x91\x60\x1c\x6a\x2e\x0e\xf1\x39\x85\x33\x2b\xdb\x14\x37\xc8\x12\x6d\xf7\xd5\x25\x32\x13\x97\x88\x63\x84\x3a\xdb\xe9\xa3\x71\x8a\x72\x7b\x7b\xe8\x9f\xc3\xe5\x08\x8f\xdd\x79\x7f\xe1\x05\x42\x83\x79\x2a\xfe\xb3\xf5\x43\xd2\xee\x48\x19\x84\x8e\xd1\x05\xd1\xce\x48\x8a\xc4\x17\x9a\xdf\x11\x06\xf1\xbb\x64\x18\x2f\xe7\x93\x4a\x91\xd0\x46\x2a\xd0\x97\xfc\xe4\x50\xf4\x6b\x5c\x9f\x43\x80\x56\x2a\xb9\x08\x86\x78\xf9\x15\x97\x4a\x8c\x2d\x09\xed\x3c\x14\xe3\xd0\x02\x13\x37\x19\x13\x48\x21\xb2\x02\x65\x4a\xb1\x65\xef\xcc\xa4\x40\x34\x62\x81\xf2\x2f\x10\xd6\x78\x32\xd8\x97\x15\xfb\x92\x71\x31\x9f\x53\xee\x32\x33\x9a\x76\xff\xa9\x49\x9b\x9f\x7f\xa1\x3e\xdf\x44\x73\x93\x1a\x7d\x25\xf1\xc8\x51\xe1\x31\xb1\x55\x0d\xbf\xa9\xd7\xfe\x56\x2d\xbe\xa7\x03\x33\xcd\xa2\xb8\x56\xdf\x1d\x54\xcb\x68\x16\x09\x62\xc6\xca\xee\x5f\xdf\x6e\xeb\xa0\x57\xa1\xba\x3e\xd7\x32\x8e\x96\xe3\x73\x49\x27\xbb\x6a\x45\x64\xa4\x3c\xed\x78\x19\x18\xf2\xfd\x3b\x2d\x1d\xec\x9a\x29\xf5\x9c\x1c\x65\x0b\x8c\x10\xa5\x79\x82\x82\x51\x08\x32\x68\x60\xf4\xa3\x52\xcb\xea\xe8\x2d\xae\x26\xf6\x6f\xf2\xd0\x08\xaa\xa2\x98\x91\x2e\xcd\xa7\x45\xd2\xfe\x58\x92\xad\x7f\x8e\x8b\x9c\x93\x5f\xf9\x3f\xd1\x56\x96\x4f\xb6\xfe\x29\x90\xd3\xab\x45\xc6\x6f\x5f\xa7\xff\xdc\xe2\xc5\x16\x44\x65\x02\x22\x7b\x8b\x93\xf9\x62\x96\x71\xd2\x6d\xa7\x88\x27\x6d\xf1\xae\x2d\x55\xb6\xdf\xe3\xbf\x01\x24\xff\xdc\xa0\xba\xd5\x8a\xdb\x52\x46\xee\x52\x1a\xb9\x62\x9c\xcd\x7c\x9e\xd4\x48\x9d\x28\xee\x1d\xd0\x57\xfa\xde\x39\xa0\x5a\xd3\x56\xe0\x7c\x48\x47\x28\xc3\x7c\x58\xec\xf6\x47\xc0\x67\x0b\x7a\x50\x62\xcf\x42\x85\x88\x96\x2d\x0f\xb3\x11\x2e\x57\x35\xf1\x6e\xea\x3d\x4a\x61\x8c\x26\x38\x38\xb4\x24\x91\xe7\x62\x46\x79\xd2\x16\x0b\x50\xf8\x8f\x19\x2e\x86\xbd\x91\x34\x43\x82\x70\x5c\x7d\xc1\xf0\x83\x51\x94\xbd\xb3\xb4\x01\xb4\x5c\x3a\x8c\x71\x76\xc8\x65\x19\x29\x07\x1a\xe4\xc3\x6c\x74\xc8\xb1\xf8\x33\x10\x54\x58\x66\xee\x90\xf6\x7f\xb6\xd3\x4e\x67\x29\xbf\x8b\x3f\x83\x84\x3b\x63\xb5\x6d\xa0\x12\xd3\x14\x09\xaa\x71\xb2\x1c\x93\x24\x40\x9a\x66\x21\x24\x17\xb3\x4a\x4d\x94\x2b\x65\xd8\xf2\x72\x23\xe9\x07\x5d\x23\x17\xaf\xc8\xcd\xe5\x97\x1c\x38\x28\x72\xbf\xf5\xb3\xf5\x51\x91\xf1\x38\xbf\x4f\xdc\x90\x1a\x9a\x23\x8c\x39\xb7\x65\x32\x62\xae\x29\xe4\x99\x93\xbd\xfc\x7a\xb3\x9c\x40\x92\x63\xb5\x38\x35\xbe\xa0\x4b\x5c\xc4\xb4\x78\x33\xf5\xda\x59\x8f\x5c\xde\xfd\x66\x15\x68\x8a\xa6\x82\x9a\x80\x2b\x5d\x05\x1a\x49\x4a\xb4\x4c\xd1\x04\x67\x26\x5b\xff\xd4\x8d\x43\x02\xe6\x67\x13\x8f\xe0\x5c\xe0\x89\xa6\x47\xe7\xf8\x56\xd3\x1c\xe8\xce\x21\x6b\x1e\x70\x48\xc4\xcd\xb5\xc8\x77\xbb\x9f\xa2\x1b\x7c\x17\x82\xe7\x03\xd0\x21\x52\x9d\x2b\xdf\xdd\x49\x5a\xda\xbe\x48\x53\xf4\x10\x90\x62\x37\xfa\x15\x6c\xdf\x9d\x2b\xd7\xd4\x67\xf9\x5a\x4b\x90\x95\x80\xf3\x2e\x0c\xb2\xa2\x65\xca\x63\x57\xa6\x0c\xbb\x77\x8f\xc7\xc3\xab\x11\x3a\xc6\xb3\xe1\xbd\x38\xee\x1f\xe4\xb0\xd5\x71\xbf\x4f\x5b\xd7\xc3\xe3\x11\xfe\xb0\xa2\xd3\xe4\xc6\xe4\x16\xbb\xc0\xbd\x83\x8b\x57\x7a\xba\x07\x17\xba\xb1\x5f\xf1\xc5\x4e\x1f\x1d\xe1\x9b\xe1\x7c\x78\x31\xd2\x71\x5d\xb6\x31\x3e\xea\x74\xe4\x1c\x92\x5f\xd1\x51\xba\x92\xbf\x9d\x01\x5e\x6b\x07\x20\xeb\x0e\x04\xf7\xcc\xc2\xdc\xe2\x7f\xd9\xc0\x1a\xdc\xb1\x3d\xb1\x71\xd6\x37\x33\x48\x70\x73\x72\xd8\xf0\xc7\x4e\x9e\x09\xe7\x10\x3f\xdb\xcc\xd9\xcb\x73\xc7\x92\xb7\x88\x4e\x7e\x00\xd9\x4d\xac\x74\x49\x9f\xdb\xbc\x1a\xd8\x1e\x10\xae\x89\x70\xea\xe8\xce\xff\x92\x64\x76\xa0\x9e\x1f\x4c\x13\x29\xa7\x7d\xec\x4e\x69\xe9\x9b\xb9\x3e\x7b\x1a\xf3\xb3\x83\x62\x6e\xa9\xb5\x61\x72\x3c\xfa\xd7\x09\x80\xae\xe5\x95\x36\xec\x7f\xae\x62\x55\x2b\xd3\x27\x3d\xb2\x13\x4e\xe6\x32\x64\x33\xa2\x4a\x91\xe1\x3a\x18\x01\x2c\xfc\x21\x26\x8f\x54\x84\xa7\xbe\xfa\x44\xdf\x17\xf4\x7a\x46\xf3\x1b\xcc\x21\x5d\xa3\x0c\xf2\xf9\x07\x68\xe1\xaf\x4d\x46\x50\xaa\xc1\x45\xc6\x48\x2e\xe3\x89\xaa\x36\xa7\x94\x95\x26\x92\xff\x2c\x2b\x39\x66\x8d\x09\x9e\xa0\x01\x25\xd4\xa9\x33\xfc\xb7\xbd\xc8\x9c\xe7\x3a\x84\x69\x4d\x71\x28\x20\x4a\x8a\xee\x9b\x0a\x8a\xef\x6e\xb4\x33\x37\xae\xe9\x5f\x61\x0d\xfe\x7b\x6d\x0c\x99\xea\x0a\xc8\xf0\x1a\xff\xb7\x27\x9d\xab\x82\xeb\xe6\x9c\xdb\xbc\xc8\x66\x3e\xff\x15\x72\xac\xc4\x1f\x22\x38\x50\x12\x3b\x06\x25\x00\xd1\x5d\x49\x11\x81\x0e\x71\x03\x8c\xab\x05\x2c\xb0\x2f\x8b\xe5\x26\x71\xbd\x2d\xb3\x56\x81\xb3\x95\x15\x89\xfe\xdd\xcf\x76\x50\x1d\x0e\x0b\x86\x93\xfb\xc3\xa1\x98\xe9\xe1\x08\xa6\x3e\x18\x8e\x4e\x51\x02\x3e\xf3\x90\xb1\xc5\xcd\x3b\x50\xb4\x28\x2e\x9c\xb1\x10\xe0\x05\x04\xed\x48\xa7\xc9\xb6\xc9\xd5\x0c\x41\x7b\xb6\x63\x07\x5d\x9b\x19\xa9\xd1\x9e\x5d\x24\x1c\xb5\xcb\xbb\x9b\x76\x0a\x09\x34\xf5\x62\x1c\x4d\x7e\xc9\xc6\x24\xe7\x10\x37\xa1\x7d\x0d\x4b\x03\x19\x38\xda\xaf\xc6\x94\x8d\x67\xe4\xf5\xab\x3f\xab\x1f\xed\x74\x35\xce\xf8\xf8\x56\xa0\x08\x93\x6e\x52\x8d\x43\xb0\xef\x4c\xba\x97\x8a\xc9\x6b\xe7\xd3\xc7\x47\x26\x17\x08\x26\x69\x65\xe4\x1f\xcf\x4f\x44\x05\xb2\x5a\x81\x2d\x84\x9d\x8d\x46\x3d\xde\xd8\x93\xf6\x84\xde\xb5\xa3\xe1\x34\x1c\x2e\xe8\xf7\x0a\x40\x62\xaf\x1e\xb9\x42\x62\x65\xc2\x28\xae\x82\xe3\x2a\x4c\x04\x1d\x41\xc0\x16\x8f\x8f\x3c\x9c\x5f\x7e\x48\x1a\x5a\x73\x63\x45\x42\x73\x83\x1a\xcd\x11\x28\x4e\xde\x7d\x38\x3f\x3e\xf9\xfe\xec\xc3\x77\xff\x75\xfc\xe6\x12\x74\x44\xe2\x06\x3d\xcb\xe6\xa4\xcb\x8b\x8f\x8b\x05\x61\x6f\xb2\x52\x5c\x50\x0a\xdc\xda\xaf\xca\xbb\x9b\xd7\xaf\x44\x47\xf4\x26\x97\x34\xc7\xeb\xf6\x0e\xdb\x69\xbf\xfa\xb3\xff\xf2\xd5\x9f\x45\xc9\x76\x8b\x4b\x33\x4d\x31\x40\x5c\xc0\x8d\xe8\xec\x9c\xfd\xb9\x32\x4e\x2a\x99\xea\x44\xb5\x5a\x6d\x25\x0b\x5a\x59\x55\x36\xd0\xb7\x65\xb0\x25\x11\xc5\x20\x86\x96\x69\x9e\x8b\x9a\x33\xcd\xc3\x03\x0d\xe2\x8e\x02\x89\x53\xec\xc4\x8c\xf9\x6b\xc2\x41\x78\xb0\x4a\x28\x12\xd0\xb6\x4a\xb8\xa0\xb5\x35\x67\xcd\x1c\x25\x88\xe2\xb8\x0d\x24\x75\x3a\x31\xea\x21\x0a\x9c\x70\xa2\xed\xdc\xdb\x30\x99\xb6\xc9\xc1\x54\x7f\xce\x4a\x32\x2e\xf2\x49\x3b\x45\x7b\x18\x63\x5e\x3d\x43\xa9\x56\xda\x68\x53\xd1\xde\x2a\x21\xe9\xe1\xd7\xb8\x10\x9a\xa0\xa4\x69\x77\x59\x92\x19\x29\x4b\xe5\x1c\x86\x4d\x80\x2e\xe5\x2c\xd6\x6e\x7f\x61\xe4\xcb\xe6\xb3\x22\xd1\x16\x1c\x94\x3c\x8d\x10\x79\x6b\xce\x86\xb6\x85\xc2\xdb\x7d\x54\x60\x76\xc8\xc0\x2f\x90\x16\xcb\x52\x81\xc2\x80\xab\x0c\xb6\x74\x36\x69\x15\x9d\x4e\xb1\x45\x95\x75\x65\x31\xdd\xba\x24\xbf\x4a\x6d\xe3\x76\x2f\x48\x89\x25\x35\x8f\xfe\x52\x20\x96\x6a\xaf\xfa\x2f\x1b\xa1\x36\x7a\xef\x74\x7c\xcc\x1e\xe9\x23\x45\x99\x02\xbd\x81\x24\x4b\x18\xc1\xed\x5b\xce\x17\x83\x3f\xff\xf9\xfe\xfe\xbe\x7b\xbf\xdf\x2d\xd8\xcd\x9f\xf7\x7a\xbd\x9e\x38\x56\xed\x56\x18\x71\x9c\xa9\xe4\x1b\x04\x7f\xf6\x0e\xf3\xa0\x8f\x26\xa4\x1c\x0f\xfa\x88\x53\x3e\x23\x83\xfe\x0a\x51\x12\x70\x1c\x60\xc0\x77\x30\x6c\x5f\xb7\x51\xfb\x9a\xde\x88\xff\x67\xc5\xf8\xd3\xbf\x96\x05\x27\xe2\xa1\x98\x3c\x88\x3f\xac\x8d\xda\x63\xa0\xf3\xc4\x8f\x62\x22\xbe\x4d\x04\xbc\x0a\x70\x47\xed\xc9\x4c\xfc\xc7\x21\x5b\x86\x4a\x99\x21\x3e\xde\xf6\xc5\x7f\x7b\xe2\xbf\x7d\xf1\xdf\x13\xf1\xdf\x53\xf1\xdf\x33\xf1\x1f\xc9\xa0\x90\x68\x92\x8a\x7f\x73\xd1\xfd\x8c\xc2\x7f\xa0\x2f\x35\x02\xd4\xf6\x9c\xf0\xac\x8d\xda\x79\x01\x23\x29\x44\x77\x0b\xf1\x8f\x89\x81\xb0\xe5\xb5\x18\x64\x29\xfe\xcd\xb3\x99\xf8\x58\x2e\x32\x51\xad\xe4\xac\x80\x66\x4a\xce\xe8\x27\x51\xb6\x5c\x5e\xc3\xff\xa2\x36\x88\xa5\xc5\x5f\x31\xf0\xa5\xf8\x27\xaa\xde\x65\xac\x3d\x8a\xa7\x42\xd0\x9b\x0a\x61\xbf\xfb\x9a\xaa\x2d\x08\xfe\xf3\xf0\x1f\x7c\xf7\x1f\x6c\xeb\x1f\xbf\x1e\xf5\xfe\xb1\xec\x3f\x7b\x21\xfe\x7f\xd1\x3b\xfe\xc7\x52\xec\xda\x2e\xfc\x39\x12\xff\xef\xbd\x80\xff\x5f\xc2\xff\xef\xc4\xff\x4f\xdf\xfd\x63\xb9\xdf\xeb\xf5\xfe\xb1\x7c\x77\xfc\xee\xdd\xe8\xcf\x28\x23\x6e\x26\x74\x63\x52\x39\x29\xc6\x70\x75\x49\xf3\x68\xfd\x24\xed\xaf\x08\x0a\xac\xb4\xab\x6c\x96\xae\xa0\x09\x42\xb0\x42\xfa\x28\xe1\xd0\xba\xf3\x35\x5b\x35\x84\x15\x2a\x3e\xc1\x4b\xff\xb3\xd7\x71\x14\x4f\xae\x50\xf0\x3e\x96\x91\x01\x41\x16\x6e\x7e\x08\x6e\x82\xee\xa5\x8a\x05\xd1\xf0\xf8\x08\x74\x8c\xb8\x03\x21\x38\xe4\x90\xeb\xab\x70\x94\x0e\x20\x7e\xbb\xfd\x2a\xd8\x7b\xd6\xe9\x6c\x4b\x04\x04\xdb\x58\x9b\x2f\x44\x0e\x6b\x2b\xdb\x6a\xef\x90\x9d\xb6\xc0\x20\x74\x42\xb6\xb2\x7c\xeb\xe2\xa7\xef\xb7\x94\x70\xb0\xed\x27\x25\x8d\x4f\xf5\xec\x22\x61\x04\x11\x5f\x31\x5f\xb3\x2a\x24\x6d\xcc\xd3\x27\x2e\x23\x12\xe0\x2c\xb8\xb8\x78\x03\xc6\x55\xf5\x34\xc6\xf5\x63\xc1\x57\xf0\xbc\xb5\x0a\xf4\xba\xc9\x21\xbd\x12\x5c\x9f\x04\xe5\xe2\xda\xd4\xe6\xa8\x10\x7e\x31\xc0\xbf\xc4\xc1\xbf\x36\x8e\x09\x4f\xc9\xba\xeb\x8f\x59\x22\x5e\xd6\xd6\xde\x1c\xdc\x45\xe1\xa2\x9a\x5a\xb1\xb4\xe9\x46\x05\x33\x29\xd5\x68\x65\x90\x2d\x87\x72\x89\x00\x6f\x2b\x58\x80\x4c\x2c\x40\xb6\x61\x67\x59\xd8\x19\x22\xde\x25\x90\xc9\xe5\x2b\x71\x71\xe8\xd1\x30\x03\x97\xea\x69\x79\x44\x0b\x41\xa5\x4a\xa6\x2b\xb7\xec\x72\x5d\xb2\xc2\x00\xc2\x2e\xfd\xb4\x85\xde\xbe\x6f\xda\x86\xf1\x1d\x57\x62\x95\x83\x8a\x34\x85\x7d\x63\x3c\xc0\xaf\x49\x1a\x1b\x1c\xb6\x78\x36\x92\xe6\xf3\x29\xf3\x92\xe4\x6b\x2d\xb7\x74\xb4\xe3\xbc\xd3\x49\xa4\xeb\x51\x8a\x04\x59\xef\xd6\x3b\xbb\x10\x87\x05\xb1\x74\xe0\xbf\x57\x27\x95\xad\x12\x29\x34\xa9\x64\x15\x61\x26\x83\x56\x8e\x39\x49\x32\x41\x9c\x0a\x1e\x52\xfe\x44\x0c\x5c\xa3\x63\xe9\x48\xf2\x55\x9a\x94\xe4\xf1\x31\x29\x89\x4d\x7d\x38\x23\x5f\x15\x56\xc2\xa1\x09\xcd\x8d\xc1\x91\x63\xc4\x25\x5d\xc2\xd8\x57\xed\x54\xc3\xf2\x42\xa8\xa6\xea\x6a\xe5\xea\xd8\xc4\xab\xc9\x38\xb7\xde\xf7\x44\x6e\xa4\x3a\xa6\x91\xa4\x19\xc6\x4d\xce\xcf\x20\x8a\x98\x7b\x0e\xdd\x7d\x72\x53\xbd\xcc\x24\xa1\x35\x26\xe2\xd7\x98\xa8\x6d\x1a\xab\x59\x4f\x09\x1e\x13\xb5\x5f\x63\x22\x36\xac\xe5\xe5\x82\x99\xca\xda\x13\x82\xcb\xe8\x46\xb6\xe2\xdb\x3b\x91\xd5\x6e\x09\x1e\xb6\x7f\xc9\xee\xb2\x72\xcc\xe8\x82\x0f\x04\xa5\x72\xad\x7f\x8f\xd0\x42\x7c\x3e\x6a\xa3\xf6\x77\x1f\xde\xfe\xdc\x46\xed\xd3\x93\xb3\xbf\xb4\x51\xfb\xe4\xfd\xf7\xe2\xff\x77\xe7\x47\xef\x8f\xc5\xc7\xa3\x0b\xf1\xe7\xdd\x87\xf3\xf7\xed\x11\x9a\x8b\x3a\xc7\xef\xbf\x3b\x7e\xdb\x1e\xa1\x3b\xf1\x70\xcb\xc8\x54\x90\x47\x6c\x2c\x88\xbe\x6c\xfc\xe9\x86\x15\x4b\xe0\x4b\x32\x18\x4c\x7b\x84\x1e\x44\x39\x51\x60\x64\x65\x35\x37\xc4\x3d\x6c\xa0\xbd\x27\x46\x45\xc3\x1d\x8e\xea\xda\x2b\xa8\x2f\x06\xf2\xf8\x78\x43\x92\x85\xb8\x24\xd3\x4e\xe7\x86\x24\x77\x70\x20\x4d\xad\x2b\xaf\xd6\x96\x8d\x6e\x9b\xdc\x90\x64\x2e\xaa\x41\xad\x07\x51\xc8\xa9\x76\xef\x57\x53\x7d\x3f\x3e\xaa\xe6\x9c\xb8\xbe\x24\xb4\xce\xd4\x5e\x85\x72\x80\x86\x49\x01\x42\xe4\x43\x62\x45\x14\xb9\x09\x48\xd9\xa2\x70\x13\x46\xb9\xf0\x81\x49\xd8\x5a\xe0\x7b\x65\xec\x71\x4d\x12\x2a\x98\x8b\xcf\x1e\x73\x31\x2e\x66\xef\x0a\xf6\xf1\xfc\x54\x39\xde\xdc\x90\xe4\x96\xa0\x4c\xf7\xd7\x5e\xe6\x65\x36\x25\x83\xf6\x8e\xd6\xb3\x8a\xb5\x11\xed\x1c\x3a\x9f\x06\x85\x13\x76\x98\x78\x84\x14\x70\xba\x59\x4b\x5d\xa8\x5b\x24\xcd\xc5\xe9\xc6\xed\x05\x2b\x16\x6d\x37\xaa\x05\xef\xf2\xe2\xb4\xb8\xd7\x33\x68\x95\x50\x5c\x90\x60\xb2\x2c\xca\x71\x29\xc9\xab\x8c\x73\x26\x1e\xb9\x26\x70\x64\x01\x95\x84\xa3\x5d\xf2\x87\x19\x01\x4e\xcf\x6f\xf1\xf1\x11\x5c\x8d\xd5\x7a\x09\xee\x1e\x25\x19\xbe\x20\x43\xea\xaf\xdd\x28\xed\x74\xb2\x61\xe1\x57\x1e\x09\x38\x31\x9d\xa7\xe8\xb3\x49\x75\x35\x19\xe4\x48\x20\x9d\x01\x5b\xc1\x15\x7b\x41\xf0\xe7\x93\xb3\x1f\x3f\x5e\x0e\x04\x6b\x34\x1f\x6c\xf7\x50\xb6\x14\xeb\xcc\x98\x60\x90\xb6\x7b\x48\xb0\x1a\x83\xed\xde\x0a\x5d\x1c\x9f\x1e\xbf\xb1\xe5\x56\xe8\xc3\x8f\x97\x27\x1f\xce\x9c\x17\x97\xc7\xff\x7d\x79\x74\x7e\x7c\xe4\xbc\x3a\x3d\xfa\xee\xf8\xd4\x79\x7e\x77\x72\x7c\xfa\xf6\xe2\xd8\x6d\xe6\xf4\xf8\xfb\xe3\xb3\xb7\x6e\xbb\x20\xb5\x71\x5e\x7c\xf7\xf1\xf2\xd2\xed\x68\x65\x4f\xd6\xaf\x24\x14\x8b\xe8\x15\xa3\xf8\xb3\x92\x9c\x0f\x08\x18\x11\x7b\xb6\xc4\x6c\x25\xfd\xb6\x2a\xe4\xb2\x86\xdc\x23\xa0\xe9\x10\x55\x2c\x0c\x56\x80\x02\x26\x3e\x60\xcf\x5a\xe2\xc2\x66\x10\xd3\xc4\x88\x5c\x70\xd0\xd0\x42\x03\x82\x26\x19\x44\x28\x4d\x75\xf4\x52\x87\x84\xb9\x94\x38\x5d\x0c\x2b\x76\x43\x27\x6d\xd8\xa6\xb6\x44\x07\x6d\xbd\xd4\xf0\x9c\x76\x3a\x6d\x50\x36\x80\xa9\xf0\xaa\xd2\xf4\xfb\xe6\xa6\xdb\x72\x23\x95\x29\x75\x5b\x90\x79\x63\x0e\xac\x55\xac\xb1\x5f\x54\x63\xce\xab\x73\x75\x1d\xa9\x09\xdb\xd3\x75\x44\x02\x47\x6e\x35\x6f\xf0\xd9\x7d\x43\x04\x47\x0f\xee\x92\xe2\x17\x80\xe3\xa7\x48\x7e\x6a\xeb\x4d\x4f\x56\xad\x48\xb2\xae\x4f\x12\xff\xff\x58\x7b\xa1\xff\x1b\x69\x2b\x2f\xaf\xbd\x23\x4e\x3e\x11\x17\xad\x46\x90\xdb\x21\x53\x61\xdd\xee\x29\x96\xd1\xe0\xc1\xd6\xc8\xc0\x62\x8b\x74\xaf\xae\xbc\xdb\x9e\x82\xc8\x73\x25\xae\xee\xba\xa8\xd6\xa2\x4f\x92\xa2\xd0\xe0\x1c\x22\xd7\xab\x83\x00\x86\xe7\xa2\x97\x96\xcd\x44\x5d\x21\x10\x68\x3a\xf0\x29\x91\x84\x6a\xc3\x90\x4f\x70\x63\xd7\xa4\x46\xfb\x51\x6e\xc3\x79\x3d\x5d\x65\x4e\xa9\xa6\xac\x72\x8f\xb2\x62\x4e\xac\x73\x7d\xac\xc4\x49\xc6\x1c\xe5\xbf\xd3\xe6\xc8\xdd\xe0\x3a\x8c\xb7\x54\x96\x72\xa4\x96\xdb\x64\x10\x55\x3a\x17\x77\x10\x70\x73\x36\xad\xbe\xbf\xea\x7a\xc5\x5b\xb6\x1f\x75\x23\xf3\x61\xa4\xf5\x11\x76\xc6\x43\x90\x8a\x9d\xaf\xdc\x1a\xc2\x0d\x4a\x9b\xe9\x3e\xcf\x8c\xca\x82\x81\x13\xda\x07\x14\x31\x16\xd8\xd8\x21\x0f\x5b\x13\x2c\x39\x8a\x8c\x33\x1d\x54\x8a\xc6\x16\xcb\x40\x0b\xba\xfc\x1f\x3f\x94\x1e\xd9\x12\xac\x49\x81\x8f\x05\x92\xa6\xf6\x7c\xc8\xc3\x08\x16\x85\x56\x98\x59\xfa\x29\xae\x50\x01\xc9\x2c\xab\xb0\x10\xe6\x91\x73\x8f\xf9\x31\x49\x18\xca\x4d\x47\xea\xd4\x73\xbf\x23\xd9\xa0\xd3\x17\xd5\x2c\xd1\x39\x49\xd1\x9b\xff\x7f\x2d\x7f\x97\xb5\xfc\x91\xa4\xe8\xfd\xff\xf8\x5a\x2a\xf6\xcc\x47\x3c\xea\x16\x47\xf7\xc9\xd7\xa1\x1b\x1b\x9a\x1d\xe5\xf8\x1e\x22\x67\xea\xfc\xf0\x0a\xb9\xe4\x16\x9e\x7e\xf9\xdf\xb1\x06\x06\x27\x6f\xf7\x65\x52\xf8\xca\xa2\x18\x82\x04\x2c\xc8\xbf\x06\x09\x77\x75\x13\x18\x52\xa5\xc9\x05\xb0\x44\x24\xdc\x9c\xae\xb7\x0f\x79\x7c\x34\xf9\x4b\x6c\x92\x42\x9b\xd8\x0b\x44\xcc\x2a\x4b\x61\xbb\x3d\x88\xa5\x24\x91\x65\x6c\x92\x14\x31\xc0\xb7\xb5\x42\x68\x2f\x44\x4d\x39\x2b\x78\xa9\xe5\xd0\x63\x6b\x43\xa5\x0d\x34\x88\xb6\xa0\xd2\x71\x56\x16\xc6\xde\x08\xe7\x2b\xd2\x65\x45\xc1\xc3\x93\xe4\xe7\xec\xec\x59\x0b\x2b\x2f\x5f\xd0\x4e\x3f\x45\xd2\x7c\x12\x33\x30\x9c\xcc\x87\x74\x84\xa7\x2e\xad\x27\x0e\x39\x88\x38\xcc\x7f\x29\x04\x96\x4c\x3e\x97\x64\x36\x1d\xf0\x95\x4c\x4a\x2c\xae\x02\x2f\x57\x61\x90\xc4\xd7\x19\x01\x73\x46\xc0\xc5\x08\x72\xdc\x3b\xc8\x5f\x61\x7e\x90\xef\xec\xa4\x6c\x98\x57\x46\xc0\xc2\x11\xac\x5a\x0d\x82\x79\x31\xba\x08\xac\x08\x5c\x34\x9b\x7a\xf2\x69\x58\xf8\x61\x6f\xa4\x16\x5a\x05\xab\xb9\x20\xb3\x69\x9d\x61\xc6\x0d\xe1\x49\x2f\xd5\x05\xc1\xb4\xac\x56\x58\x28\xed\x0f\x55\x59\xb0\x1f\xaf\x83\x60\x59\xd2\x0c\x0d\x63\x3c\x95\xe0\xc4\x55\x6d\x63\x43\x57\x37\x2e\x03\x22\xaa\x82\xb5\x48\x6b\xb0\x5c\x51\x25\x44\x95\x6b\x9a\x4f\x62\xb6\x48\xa5\x18\x19\x90\x83\xdc\x58\xee\x55\x29\x76\x51\xaa\x87\x88\x2d\x15\x2e\x4c\x6d\x7b\xe1\xb2\xd4\x16\x8c\xac\x00\x71\x32\xdf\xaa\x34\xbf\xba\x74\x6c\xfa\xc4\xda\x02\xe9\x6f\xa6\xbc\x63\xb8\x58\xad\xe0\x9e\x48\xbd\xbe\xd1\x0a\xfe\x02\x3b\xd5\x40\xc0\x7c\x4b\x67\x93\x48\x59\x09\xe1\x16\x1c\x75\x96\xde\x0a\x36\x08\x70\x41\x88\x09\xd2\x4a\xa8\x25\x02\x9c\x27\x79\x8d\x9d\xc6\x95\xce\xdc\xea\x78\xce\xb3\xfc\x86\x28\x45\xcf\x77\x1f\xbf\x1f\x6c\x8d\xa5\xb6\xe7\x86\xf0\xad\x3f\x48\x4d\xcf\x94\x15\xf3\x2d\xb0\x15\x3d\xd8\x92\xf5\xb1\x8a\xed\xea\xb5\x19\x39\x59\x64\x24\x06\x55\xbd\x02\xfe\xaf\x0e\xcb\x1b\x0f\xb6\xa6\x64\x72\xf3\xde\x4a\x2e\xe6\xac\x0e\x53\x1b\x63\x74\x19\x11\x70\xa2\x23\x5b\x4a\x4b\x7c\xeb\x0b\x5d\x29\xe0\xf8\x46\x07\x25\xfc\xa8\x82\xf5\x2d\xf9\xe5\x6c\x01\x29\xac\xb7\xd9\xa7\x2a\x5f\x2a\x4d\xca\xfb\x33\x56\x43\x7d\xa9\xd4\x98\x18\x87\xfc\x75\xce\xdd\xc6\xe7\x25\x76\x8a\x2b\x43\x55\x81\x46\xd2\xe8\x78\x4d\x1a\x7d\xe4\x78\x30\xc4\x9a\xad\xcc\xc7\x6f\x36\x98\x94\xdb\x6c\x4d\x80\xd2\x28\x06\xaa\xdb\x51\xbf\xb3\x3a\xc8\x88\xf5\xea\xef\x68\x63\xa7\xc1\xe6\xd7\xf4\x19\x07\xa5\x60\x1d\x55\x18\x85\x2a\x62\x73\x36\x59\xb7\x0f\x98\x0a\x1c\x90\xe2\x41\xce\xe2\xbb\xaa\x7d\x76\x82\xfd\x54\x31\xd0\x48\x24\x06\x1a\x64\xd9\x86\x30\x68\xd6\x67\x2a\x4f\x57\xd6\xa5\x23\xbe\xcf\x3a\x90\x67\xb0\xc3\x28\xc3\xbd\x83\xec\x15\xd5\x1d\x65\xba\xa3\x12\xd3\x61\x36\x6a\x15\xc3\x6c\xe4\x38\xbe\x94\xb6\x23\xe5\xbb\xee\xac\x04\x52\x49\x1f\x74\x5b\xb3\x9d\x9d\x74\x39\x9c\x8d\x64\x99\xe2\xc1\x71\x3c\x19\xe3\x46\x08\x40\xd3\x9a\xef\x7a\x53\xd1\x04\xf7\x0e\x26\xd6\x94\x7d\xa2\x87\x7d\x8b\xa7\xc3\xc9\xa8\x35\x1e\x4e\x46\x5d\x2a\x2b\x25\xb7\x76\xd0\x0b\xbc\x09\x14\xa0\x79\x63\xb1\x12\xdd\xe1\xde\xc1\xdd\x2b\x1d\xdd\xe5\xe0\x4e\xf7\xfe\x80\xe7\xc3\xbb\x51\x6b\x31\xbc\x1b\x69\x3f\xab\x87\x74\xa5\xc3\xec\x35\xd8\x55\x68\x2c\x21\x03\x6b\x3b\x51\x72\x19\x26\x95\xd0\xb9\x12\x2f\x5f\x71\x96\xe5\x65\xa6\xf4\x76\x26\xb8\x62\xd8\x82\xa6\x84\xc3\x46\x94\xd9\x32\x8b\xa1\x26\x56\x93\x19\xa1\x2e\x77\xda\x5c\xe5\x4e\xbb\x21\xfc\x28\xec\xbe\xe6\x8a\x0f\x87\xa9\xaa\xbf\xfd\xf0\xbe\xae\x46\x38\x01\x51\x03\x14\xe5\x15\xd3\x11\x7f\x65\xc8\xfd\xd6\x99\x60\x64\x9a\xd1\xad\x53\xc5\x39\x57\x92\x8c\x62\xcd\x28\x35\xa8\xfa\x51\xfb\xd7\xc9\xaa\x5f\x80\x36\xdd\x86\xea\xc2\x41\x87\xcd\xae\xc7\x8b\xb1\x56\x83\xe8\xbc\xce\x34\x6b\x31\x5e\x30\x4b\x55\x4e\x6d\x7c\x15\xef\x39\x38\xcf\xa9\x59\x07\xb9\xda\x75\x13\x02\xff\x5b\xae\xf4\x5d\x11\xaa\x5c\x05\xe3\xa7\x80\x22\xaa\x41\xff\x55\x3b\xc2\x35\x26\x07\x75\xfa\xaf\x64\x08\x75\x41\xce\x1d\xa8\x4d\xf5\x49\xba\xc7\xf9\x1d\x65\x45\x0e\x1a\xed\x53\x49\x05\xbd\x6b\xd2\x91\xd3\x69\xb2\x6d\xe4\xdd\xf7\x34\x9f\x14\xf7\x46\x25\xde\xe2\xf8\x73\x78\x18\x40\xd2\x3f\x91\x21\x0b\x03\xa8\x97\x29\xfc\x41\x09\x60\x7d\x5a\xbe\x2a\x37\xfc\xa9\xd4\x29\x4b\xf7\x62\x77\x46\xef\xe4\x8c\x7e\x5b\xc3\x81\x83\x57\xd9\xe7\x20\x6b\xf3\x6e\x5f\x25\x13\x12\xaf\x8a\x4e\x27\x29\xe0\x95\xc4\xa6\x3c\x1b\x7f\xd2\xbc\xfa\x2d\xc9\x16\x1a\x35\x2d\x58\x71\xc3\xb2\xb9\x66\xd1\xc9\xaf\x9c\xb0\xdc\x04\x94\x5d\x8c\xb1\x0a\xa3\xcb\x32\x5c\x28\xea\x67\xc9\x18\x04\xc9\xb8\xa0\xbf\x11\xdc\x6b\xf4\x45\xd0\x0e\x45\x15\x34\xe1\x04\x9d\x50\xcd\xbb\x03\x75\x3e\xc8\xe7\xe9\xc2\xfb\x3c\xd5\x57\x09\x3c\x95\x8b\xdd\xbe\x20\x00\x16\xc5\xa2\xa9\xb3\xd2\xab\x34\x5d\xec\xf6\xcd\xcc\x9c\xf7\x92\x53\xae\xef\x4c\x7c\xef\x03\xbd\x01\xd1\x99\xe6\xd9\x6c\xb6\xf1\x0c\xd5\x20\x1b\x2a\xf9\x63\x81\xb2\x34\x91\x2c\x52\xc1\x8b\x3a\x3e\x7c\x31\xde\x21\xbb\xd5\xbd\x69\xe9\x2d\x04\x76\x5c\xc0\x69\x15\xb3\xe8\x0e\x17\x63\xb3\xe1\x06\x44\xc4\x5c\xb3\xc9\x84\x29\xfa\x4a\xee\xea\xe5\xd7\x8d\x42\xf4\x63\x1b\xa9\xcc\x5b\x77\xcb\x32\x51\x08\x2c\x38\x78\xc6\x2b\xc6\x89\x0e\x62\x13\x03\xc6\x2e\x04\xb7\xe8\x34\xd9\x05\xa1\x58\xea\xd8\x17\xb4\xee\x9c\xbc\xfb\xb2\x60\xb7\x80\xf0\x2e\x09\x49\x41\xfc\x83\x9c\x18\xc1\x16\xac\x99\xc7\x16\x2e\xc6\x3b\xe2\x44\xd8\x9a\x62\x94\xda\xeb\xf9\xc3\x32\xb4\x4e\x71\x18\xfc\x25\x84\x84\xcd\x0d\x9e\xe7\xfe\xdb\x8a\x9c\x95\x96\xef\xb3\xf1\x2d\xcd\xc9\xa1\xd7\x84\x7a\x99\x90\x74\xe0\xbd\xbf\x78\x28\x01\xff\x84\x8d\xab\xf2\xde\x56\xa9\xec\x84\x04\xd4\xc2\x2a\x41\xe1\xd3\xe7\x03\x6f\x9e\xd6\x01\x50\xa6\x09\x7c\xfa\xc2\xff\xae\x4e\x98\xf9\xfc\xb2\x52\xdd\x02\xb7\x2e\xf4\xac\x17\xb6\x51\x2d\xf3\xd4\x2f\x23\xe7\xd4\x2d\x16\x7d\xf5\xfd\xc9\xcb\xea\xf7\xc8\x41\xd1\xad\xed\x79\xa5\xc1\x79\xcd\x6d\x6d\xef\x89\xf7\x5d\xa1\x6b\xfd\xf1\x69\xe4\xe3\xa5\x6e\x60\xe5\xae\xb2\x5a\xfd\x60\x13\x33\xf3\x3d\xe1\x88\x20\xb5\xde\x8a\x0e\xfd\x6e\x9d\x7d\x2f\x38\x78\x45\x5d\x26\x37\xf4\xd2\x82\x6e\x3e\x7e\x7d\x37\x9b\xfb\x78\xa1\x1f\x9a\x6e\x29\x2d\x25\x76\x93\x51\x38\xa4\x72\x61\xa9\x54\xfb\x72\x0c\x2e\x82\x17\x70\x57\x41\x52\xad\x2e\xfc\xf6\xc3\xb6\xd5\x7c\x06\x73\xf7\x9a\x6f\x0b\x27\xb7\x88\x18\x99\xba\xeb\xf2\x3b\x7d\x23\x4e\x8a\xb9\xf4\xb2\x0f\x49\xe8\x24\xad\xa1\xe0\x89\xa2\x98\x21\x33\xfd\xb4\x60\x27\x32\x69\x91\x0c\xb1\x11\xd5\xb5\x8b\x51\x89\xb6\xc4\x3b\xa3\x08\xe1\x9e\xb9\x9a\xe5\x01\x2a\xa1\xff\x10\x5b\x81\xf1\x69\xb9\x9c\x57\x6d\xee\xac\x80\xdc\x74\x50\x71\x6a\xb3\x96\x10\x91\xc6\xe5\x3b\x78\xba\x64\xd9\xf8\x13\x11\xa4\x13\xca\x57\x2d\x6d\xad\x12\x51\x91\x54\x23\x69\xd5\x8a\x14\x9d\x32\x2b\x94\xcb\xad\xaa\x2b\x6c\xf7\x51\xa3\x64\x51\x65\x51\x2c\xea\x8c\xd5\x1d\xa0\x51\xde\xbe\x95\xd7\x6e\x43\xfe\xdc\x6b\xc5\xcc\xe1\x72\x40\x40\x49\x25\xf0\x54\x9b\x27\x55\x5f\xa2\x24\x90\xf4\xd9\xf5\xd7\xb4\xf9\xb7\xba\x36\xa1\xe4\x29\x2d\xeb\xad\x7a\xa3\xed\x7d\xef\xb7\x87\x48\xd0\xa2\x2a\x1b\x42\xa8\xaf\xf5\xd8\xee\xa7\xee\xc5\x59\xdd\x92\x96\x6f\xc2\x07\xda\x9a\x30\xf4\x25\x49\x11\x7f\x7c\x04\xc6\x46\x9e\x2a\xe9\xfc\x9a\x90\x54\xed\xd0\xd5\x55\xb1\x20\xb9\x06\xc1\xb0\x27\x2d\x39\x22\x6a\xfb\x1b\x97\xf6\x5a\x36\xd2\x05\xff\x45\xfa\x1b\x71\x73\x86\x5d\x5d\x41\x7e\xa0\xda\x7e\x04\xc8\x88\x3e\x9c\xe1\xb8\xdd\xc8\x4f\xb6\x89\xf0\x9b\x93\xca\xaa\x8e\x32\x92\x2d\x5b\xdf\x80\x56\xdd\xe1\x10\x44\xb9\x1d\x4a\xac\x55\xdf\x0c\x7a\x1e\xba\x1d\x20\x0f\x96\x44\x53\x6e\x5e\xa5\xba\xf1\x39\x5a\xd9\x70\x44\x8a\x69\xbc\xf2\xd2\x33\x09\x9c\x83\xbe\x18\xb9\x8b\x0d\x35\x52\x1c\x23\x13\x74\x51\x33\x53\x61\xc8\xe5\xec\xa8\x40\xc3\xb9\x93\x12\x0a\x16\xa6\x66\x3e\x86\xe8\x12\x8b\x52\x31\x0a\x96\x17\x97\x67\x17\x9c\x7b\x59\xa3\xea\xe0\xea\x9e\xce\x66\x6f\xbc\xec\x52\x48\x13\x31\xd5\x37\x76\x72\xe6\xc8\x79\x69\xb6\xaa\x68\xdb\xd7\x76\x3a\x93\xbf\xba\xaa\xa6\xf8\x92\x95\xe4\x2a\xac\x6f\xbb\xb2\xb8\x44\xe7\xb2\x92\x17\xc5\xbf\xc4\x01\x6d\xd5\xe0\x11\xad\xc0\x0e\x13\x85\x55\xe9\x76\x13\x61\xaa\xba\x2e\x7a\x0d\x1a\x36\xcb\x43\xdd\x3a\xb0\xc2\x1f\x12\x63\xc5\xe4\x81\x4c\x95\x79\xf1\x28\x02\x2b\x0a\xce\xbd\xcd\xa8\xdb\xda\xa0\xb2\xc6\x02\x02\x5b\x4d\x26\x0e\x1e\xab\x76\xab\x91\x4d\x05\xdf\xe9\xfa\x0e\xb6\xab\x3d\xbc\xba\x91\x2a\x76\x94\x18\xcf\xbc\x6f\x74\x0e\xa9\xb4\xa2\x5c\x43\x4c\x1b\x1f\x36\xc0\x23\xba\x11\x1f\x49\xc9\x26\xc2\x03\x50\x81\x00\x5d\xd9\xcf\xc1\x26\xaa\xda\x04\x88\xf5\x18\xcc\x1b\xb6\x82\x7c\x37\x71\x62\xaa\xe0\xbd\xa6\x2d\x07\x87\x4d\x8a\xb9\xc6\x5f\xc6\xe0\x06\x87\xe7\x1e\xfc\x87\x2a\x7e\x34\xae\x0a\xde\x41\x1c\x0c\x51\x41\x2a\x52\x77\x04\x6b\x3c\x75\xe6\x11\x3f\x54\x73\x11\x57\xb1\x90\x5c\x62\xdd\xb6\x4e\xf7\x1f\xb5\x01\x70\xdc\x89\xe8\x34\xf1\x68\xca\xbf\xfa\xfd\x70\xe4\xf8\x5d\x85\x7e\x6d\x5f\x3a\x40\xe6\x7a\x5c\xff\x77\xd0\x91\xbb\x5d\x8e\xe7\x99\xb7\x65\xe0\x35\xbd\x7e\xc1\xac\xbf\x5b\xa4\x0f\x77\x03\x89\x03\x5a\xca\xb4\xb3\xd2\x85\x03\x15\x10\xb0\x97\x4c\xde\x14\x39\x57\x57\xaf\x0f\x77\xea\xd0\xf1\x6a\xab\x4d\xb0\xb6\xcc\xab\xed\x36\x80\x75\x2a\x2f\x75\xaf\xf9\x86\xcd\xf6\xd6\x55\x97\xfb\x92\xa1\x57\x80\x34\xd2\xae\xc6\x13\x12\x84\xc2\x9d\xad\xe9\x4b\xde\x3e\xfe\xdc\x6b\x37\xd7\x85\x00\x85\x1b\xc3\x75\x5b\x5b\x57\x21\x01\x3b\xc3\xb5\x8e\x6e\xf5\x08\xc5\x3a\xbd\x79\x00\x1a\x6b\xf1\x1b\xd0\x8a\xed\x65\x23\xac\xd2\xe8\x49\x65\xce\x88\xef\x50\x15\xd2\x5d\xc8\x25\x0c\x1c\x83\xb4\xe8\x85\xeb\xd4\x53\x66\x05\x79\x24\xb3\x5e\x7c\x28\x81\xad\xb7\xed\x36\x12\xfe\x3a\xe6\x75\x67\x15\xa4\xde\xf0\x95\x6e\x94\xe4\x77\x9e\xf2\x01\xc2\x3a\xb8\x2e\xf8\x90\x71\x41\xdb\x63\xea\x2a\x29\x2a\x1a\xb5\x0d\x3a\x91\x5d\x93\xa6\x21\xc2\x29\xea\xcd\x5e\xad\x90\x6c\xc7\xd9\xed\x2f\x6e\xcb\xa9\x6b\xda\xbb\xcd\x4a\x20\x9c\xca\xc6\xd6\x1c\x36\xa5\xa4\xbf\x91\xd7\x3d\x57\x11\x72\x46\xee\xd5\x7d\xfb\xdd\x92\xce\x26\x84\xe1\x1f\xa4\xf2\xe0\xa7\x75\xc2\x1f\x29\x1b\xf0\x83\x2a\xf9\x19\xe2\x9c\xc7\x89\x25\x71\x4a\x2f\x67\x33\x78\xf6\x37\xcb\xff\x27\xa1\x42\xcb\x13\xe1\xba\x2d\x83\x97\x4b\xa7\xa3\x75\xee\xa9\x8d\xcf\xd3\x3b\xe0\x56\x15\xcf\x77\x76\x52\x32\xe4\x8e\x56\x7b\x15\xca\x3a\x1a\x0c\xc7\x40\x04\xb0\x69\x8c\x27\x37\x04\xd0\xa6\xf1\x9e\x9c\x30\x41\x2b\x10\x17\xc7\x89\xaf\x08\xaa\xd2\xec\x90\x5a\xd6\x9d\x1d\x10\xd9\x37\x11\x5e\xaa\xe4\xee\xae\x32\x97\xa8\xa1\x16\x81\xa9\x77\xca\x6b\x9f\x02\x98\x9d\x4e\x87\xa8\x40\x80\xdc\x6f\x7d\x47\x2c\x7f\x2e\x01\x81\xdc\x6f\x7d\x24\x12\x6b\xf2\x46\xea\xf6\x0b\x7a\x22\x6e\x0f\x52\x9a\xee\x13\xd3\x35\x46\x1f\x1a\x0c\x2b\x6f\x1e\x1f\x3d\x0b\x20\xf5\xd6\xb5\x0e\xd1\x92\x01\xaf\x65\xed\x5e\x62\x46\x26\x20\xb0\x42\xd0\x28\x69\xe7\xbf\xbe\xd5\x0e\xf9\x0b\xe2\xae\x44\x0e\x0e\xa9\x7e\x76\x42\xc1\xa2\xbf\xcb\xbf\x60\x34\xfc\x13\x49\xd1\xdf\xfe\x2f\x8e\x96\x91\x32\x16\x6d\x34\x7e\xca\x21\x3b\x73\x70\xca\x23\x49\x07\x89\xab\xe8\xe6\x43\x36\xd2\xcc\xab\x9a\x68\xab\x72\x60\xbf\x1e\x85\xa1\xdc\x2c\xdb\xf7\x0d\x22\xed\x28\xf6\x84\xd8\xb5\x20\xa6\xe3\xa8\xf9\xf3\x17\x22\x4a\xbf\xba\x8e\x63\x02\xc8\x22\x16\xcb\x84\x38\x28\x31\xfd\xb7\x60\x45\x3b\x96\x5b\x92\x4d\x40\xd8\xf6\x45\x08\xd2\xd6\xe7\x19\x9d\x25\xe9\x26\xc8\x52\xa6\xee\xaf\xc3\x83\x0d\x98\x2f\xf8\x18\xa2\x2b\xf9\xb9\x0e\xe7\xc8\xaf\x55\x8c\x21\xde\xc3\xe5\x2b\x76\xf2\xe7\x46\x48\xb1\xd6\xf8\x9d\x4e\x42\x00\x8b\x16\x52\x23\xe1\xe8\xe8\xa5\xb0\x75\x38\x52\xd8\xd0\x4b\xf9\xfa\x4b\xa9\x20\xa6\x46\xfa\x0e\xe6\xb6\x76\x04\xae\xf3\xa2\x34\xcd\x6d\xe7\xcb\xf9\x35\x61\xd6\xd4\x9f\x77\x3a\x95\x77\xec\xd0\xf6\xac\x2c\x78\x21\xe4\x41\xac\xb2\x95\x56\x55\x2a\xbd\x63\xc5\x3c\xe1\x4a\x37\x29\xdf\x8f\x67\x45\x6e\xcc\x81\x7f\x29\x9d\xc6\x25\xc9\x28\x1e\x63\x2a\x50\x8b\x12\x86\x23\x94\x63\x72\x90\xbf\x52\x06\xf6\x8e\x2e\xfd\x86\xf0\x24\x4f\xad\xba\x04\xc4\x79\xc5\x22\x4a\xf2\xaa\xe1\x14\x8b\x07\x13\x1e\xe2\x9e\xd1\x8a\x35\x91\xe7\x73\x6a\x10\x98\x72\x92\xb0\x2e\xe4\x5a\xb9\xbc\xdd\x6b\x29\x7d\x2a\x97\xaa\xd4\xf6\x75\x51\xcc\x48\x96\xb7\x07\xf0\x64\x03\xff\x0c\x4c\x05\xf8\xa0\x16\x56\xeb\x18\xc9\x1f\xfb\x18\xf7\x3a\x9d\xed\xe4\x7d\xc6\x6f\xbb\xd9\x75\x99\x90\xf4\xf5\xde\xb3\x17\x4f\xf6\x9f\x3e\x79\xfa\x34\x6d\xa9\x10\xf4\xba\x95\xfe\x6a\x95\xf0\x34\x75\x66\x06\x93\x39\xcf\xee\x13\x82\x22\xda\x5e\x3d\x03\x35\xc8\xa0\x77\xb7\x82\x20\xc0\x5e\xf5\xe0\x6f\x7c\x28\x95\x00\x3b\x79\xc1\xb7\xca\x39\xb5\xb1\x66\x9c\x7a\xaf\x5e\xed\x3f\x3e\x59\x81\xc1\xf4\x97\xb4\x40\x44\x3d\x88\x84\xd6\xf2\x17\x55\x7f\x3f\xec\xf7\x07\xfb\xf2\x9b\x4c\xb2\x68\x3e\xf5\x5f\xb6\xe2\x2b\xbf\xb5\xf7\xdc\xac\x62\x5d\xae\x0f\xb9\xaa\xd6\x71\x5e\xf1\x78\xbf\x68\x73\xec\x96\x7e\xf4\x72\x36\x55\x36\xe0\xff\xe4\xd2\xf7\x55\xbf\xaa\x87\x47\xa7\x92\x84\xc9\x68\xbc\x6e\x27\xcf\xb2\x28\x00\xe5\xed\xcd\xf7\xaa\x77\xa8\x86\x35\xfc\x3f\x7c\x34\x88\xe9\xfa\x95\x9a\x7f\xdf\x80\x8f\xd4\x71\xf7\xfb\x3e\x54\x6e\xf5\x8d\x7e\x1d\x8c\x26\xa4\x22\x5c\xdb\x06\x04\x30\xb8\x15\xe9\xe8\x79\x47\x77\x65\x14\xf9\xe4\xf5\xeb\x7d\xa5\xbc\x57\xaf\x76\x13\xf1\x2e\xdd\x64\x33\x88\xdc\x11\xe9\x40\x5a\x92\x2a\xf5\x2b\xd7\x04\xbe\x39\x48\x46\xd9\xd3\xf7\x1a\x59\x42\x59\xa8\x91\xef\x92\xad\xcf\x48\x2e\x06\xa3\x38\x2e\xf4\x97\x46\x9b\x2c\xd7\xea\xc7\x70\x56\xc6\xca\xaa\x5c\x60\xb6\x22\x32\x45\x65\x8d\x33\x85\x28\x07\xf2\xef\x9f\x09\xea\xa1\xdd\x7e\xaa\xf4\xbd\xdc\x0f\x02\xe5\x86\x2e\x55\xa5\x23\xe6\xca\x5c\x02\x98\x20\xd5\x80\x74\x0a\xfb\xe1\xa8\x87\x88\x49\xf8\xd1\xec\x97\xb4\x08\xb3\x89\xd9\x89\xaa\x5e\x76\x94\xff\xc2\x42\xf9\xd2\x80\xd4\x3f\x1f\x17\x13\x32\x39\x99\xcf\xc9\x84\x86\x5e\x70\x61\x0b\x02\xb0\x63\x8d\x9c\x2d\x5d\xeb\x8a\xc6\x9e\xa5\x7f\x95\xb8\xf3\x97\xbe\xf3\x4c\x70\x13\xab\xf2\x9e\x85\x97\xba\x1c\x4c\x63\xca\x9c\x3c\x7e\x9f\x78\x55\xb8\xb6\xe9\x6a\xea\x52\x29\x53\x79\x68\x46\xa6\x7b\xf3\x3d\x50\x16\xbb\x02\x7c\x8c\xa9\x18\xad\x23\xa7\x2a\xed\xec\xee\xca\xc1\x10\xf2\x29\x26\x1f\x0b\x06\xe5\xdb\xb8\xb9\xcd\x90\x88\x4b\x8e\x13\x7e\x25\xa0\x5e\x14\xa0\x57\x5b\xdb\x91\xed\x84\x5e\x34\x11\xbd\x57\xac\x09\x05\xbe\x3b\x5c\x41\x43\x40\xee\x54\x42\x42\x29\x13\x3f\x20\x32\xf4\xb6\xc0\x13\xf8\xeb\x6d\x56\xd1\xb7\xd3\x52\x39\x61\xeb\x90\x72\xb9\xd8\xe9\x23\x86\xf9\x2e\x69\x35\x36\xc7\x54\x73\x71\x34\x26\x8b\x2b\x34\x26\x8a\xf1\x22\x18\xf0\x9a\xd1\xaa\xb5\x43\x66\x4c\xa9\x43\xa2\xfe\x61\x8d\x7d\x8e\x8a\x91\xd3\xcd\x66\xf7\xd9\x43\x79\x4e\xee\xb2\x19\x9d\x64\xe0\x24\x6d\x02\xc7\xd3\x4e\x87\xca\xdb\x6f\xca\xb2\x39\xa9\x31\xb0\x71\x4c\x69\x4c\x8e\x01\xcc\x9d\xec\x03\x5a\x96\xe9\xd8\xcd\x28\x93\xf9\xa0\x6f\x5c\x34\x51\xbd\xe4\x57\x32\xae\x46\x8f\x72\x4c\x15\xec\x20\xc1\xdd\x81\x4b\x25\x80\x3c\xaa\x07\xdb\xcc\x06\x94\x3f\xf0\xdc\xb6\xa1\x9a\x6f\x77\x98\xa4\x2d\x65\xdd\x90\x1f\xe6\x8e\x49\x97\x60\x3e\x07\x41\x5f\x4a\x7d\x08\xf7\x78\x68\xa7\xe9\xb4\x2f\x0d\xd1\x94\x10\x3d\x8a\x5c\xdc\x26\xb5\x3e\x54\x79\x14\xca\x6a\xe2\xca\xac\x40\x91\x6c\x5d\x66\x4b\x38\xfe\x75\x4c\x16\xf2\x23\x8a\x8f\xb2\xe9\x6e\x84\xc2\x8d\x57\xa3\xd3\x9c\xb6\xaa\x71\x64\x92\x60\x08\x43\xf3\x9b\x9f\xde\xe3\x3f\x48\x61\xe4\x5f\x9b\xe2\x6c\x18\x43\xe6\x8c\x6d\x65\x3a\xda\x46\x16\xcd\x71\x53\xf2\x8c\x09\x1e\x5b\x25\x8d\xc5\x0c\x65\x5d\xb6\xcc\x39\x9d\x13\x9c\xa3\x4c\xa5\xb7\x01\x81\x69\x1b\x65\xb0\x95\x92\xd5\x97\x31\xfc\xf4\x6f\x70\x67\x64\x24\xc7\x05\xca\x6c\x76\x9c\xec\xab\x7c\xc4\x37\x62\xb0\x65\x1f\xa1\x39\x16\x58\x66\x6c\xc4\x70\x97\x3e\x9b\x9d\x6f\xc6\x66\x97\x1e\x73\x9d\xc7\x33\xf4\x10\x38\x19\xf2\xd0\xaa\x65\xd1\xd7\x68\xde\x2c\x91\x28\x5d\xf9\x6b\x1e\x75\x5d\xd0\xf6\xc5\x72\x8b\x74\x0a\x1f\x23\xd0\xb1\x4d\x99\x44\x48\xff\x5d\x03\x29\x54\x66\x42\x82\x0c\x54\xd2\x3b\x4a\x43\x4a\x89\xc3\x80\xbd\xb2\x94\xc9\x19\x05\x30\xc1\xd9\x43\x1b\xc9\xfc\x14\x65\xf7\x4a\xfc\x81\x24\x9c\xf2\x00\x18\xcb\x2d\x48\x23\x9c\xa2\x78\xb4\x00\xaa\x21\xa1\xc0\xb4\x0a\x09\x85\x98\x99\xb2\xff\xa3\xbf\xc9\xd0\x90\x02\xc4\x9c\xb5\x80\x1e\xa5\x0d\x61\xaa\xd4\x52\x3c\xbb\x41\x72\x20\xc5\xfc\x9a\xe6\xe4\x42\x20\xf5\xd4\xdf\x0e\x71\xe8\x8b\xcd\x37\x4f\x49\x00\x8b\x10\x15\xc4\xe5\xef\xc8\x12\x24\x9c\xf8\xa9\x98\x90\xd6\xd3\xe8\x96\x0b\x53\x94\x71\xa4\x4d\xc6\x19\xb9\x43\xa5\x55\x86\x21\xe5\x94\xa6\xb6\xbc\x45\x4d\x52\x6f\x88\x63\x88\x7f\xd0\xe6\x8b\xc9\x12\xd2\x3f\xe7\x9a\xb8\x97\xcf\x69\x8a\xc6\xf8\x96\xeb\x32\x1c\x2d\xd1\x2c\x45\x53\x75\xd7\x9c\xd2\xfc\x13\x01\xe9\x51\x6b\xac\x6f\x81\xa4\x70\x92\x61\xb0\xf4\x33\x53\xd4\xf7\x5f\x0c\xdd\x9c\x70\xf9\x2a\x15\x3c\x86\x42\x4d\x32\xb9\xa7\x83\x63\xa7\xe6\xab\xcc\x78\x46\x1a\x4b\xcb\x74\xfb\x66\x01\x70\x66\x75\xd4\xb8\x5c\x21\xba\x4a\xfe\x4a\x52\xf4\x5f\xeb\xc5\x88\xd2\x96\x5c\xdf\x9a\xf3\x8c\x7d\x82\x0c\x5e\x5c\xe9\x06\x4e\x40\x69\x88\xb7\xfb\xe6\xcd\x5b\x32\x23\x9c\x98\x37\xf3\x6c\x81\x89\xf8\xdf\x31\x50\xa5\xf9\x8d\x38\x12\x6a\xd7\x9a\x04\x8e\x52\x27\xe9\x53\x66\x4e\x8e\x58\xdd\x83\xde\x6b\x39\x58\xbd\xdb\xba\x2f\xb4\x94\x68\x55\xe5\x14\x5f\x62\x08\xcf\x9c\xdf\x58\xb1\x11\x3d\x4c\x66\xb8\x18\xd2\x51\x1a\xc1\x66\x03\x67\xe6\x2a\xe5\x78\xd6\xbd\x9b\xbf\x2b\x98\x9c\xbc\x18\xd7\x32\x55\x29\xc8\x21\x79\x10\xc0\x9f\x03\x00\x13\x07\x00\x68\xfa\xb9\x18\x92\x11\x9e\x62\x6a\x53\x9c\x20\x9e\x22\x5a\xbf\x99\x21\x6c\x99\xc2\x12\x12\xa6\x8d\x95\xa7\xf6\x98\x0a\x90\x08\x62\x51\x4e\x91\x63\xc8\xa6\x37\xb3\xa7\x5c\x20\x32\xdf\x71\x4e\xbc\x9d\x17\x77\x6b\x94\xa6\x62\x3b\x8a\x60\x03\x32\x4c\x87\x64\x84\x4a\x4c\x87\xf9\x48\x06\x03\x69\xfd\x57\x92\xa1\xca\x46\xe4\x87\xb5\x4b\x9f\xa2\x42\x05\x4b\x4a\x32\xf1\x3b\x08\x97\x5b\x4a\xae\x4a\x02\x5f\x0d\x31\x2c\x86\xc6\x30\x1f\x92\x51\xcb\x75\x64\x4b\x52\xf4\xf7\x84\xa5\x3e\x80\xea\xbe\x58\x8a\x64\xa3\x5b\xa2\x5e\x05\xca\x61\xa9\x26\x45\x5e\xf5\x91\x91\xb0\x18\xc7\xb9\x89\xbf\xe2\xf2\x22\xb0\xcd\x6a\x55\xce\xdf\x1b\xae\x1a\xb8\x42\x50\x89\x96\x72\x86\xb3\x03\xc8\x90\xef\x5e\x33\xaa\x44\x70\xcd\xcc\x68\xc9\x77\x15\xfd\x31\x83\xd3\xe9\x65\x22\x9f\xc1\x8d\x2c\xb3\x0a\x91\x09\xce\xbb\x27\x67\x27\x97\x27\x47\xa7\x68\xe6\xa4\x4a\x5a\xaa\x63\x30\x5b\x77\x4f\xe9\x83\x3c\xeb\xda\x72\xf2\x1a\x49\x93\xe1\x12\xb2\x30\x8d\x47\x29\x9a\xfd\x3b\x6e\xb3\x2a\x83\xbb\xdd\x73\xf4\x79\x66\x8a\x30\x2a\x99\x5b\x48\x6e\x8b\x4d\xeb\xc4\xb3\x9b\x14\x89\xba\xbf\xef\xb5\xe8\xb3\x02\xa6\x3b\x7d\x9b\xb9\xa3\x83\x04\x2b\x7a\x84\x54\x0e\x80\xc1\xba\xd1\xd4\x43\x82\xea\x42\xcc\x30\x07\x5b\x90\x12\x67\x91\x58\xdb\x99\x1b\xa8\x36\x29\x2a\xc6\xf7\x25\x2a\x1c\x82\x4c\x2e\xfe\x12\x6e\xb6\xff\x92\x1c\x05\x2a\xd3\x96\x4c\x40\xa5\xf3\x4e\x5d\x3c\xe4\xe3\x5b\x56\xe4\xf4\x37\xc2\x92\xcf\x3c\x63\x82\x26\x5f\x22\x33\xa9\x01\x5b\xa5\xdd\xf2\x21\x1f\x1b\xd3\x4b\xbf\x4f\x2f\x4e\x75\x99\xae\x48\x24\x5f\xa3\xe7\xbb\x28\x96\xd4\x47\xbe\x75\xa7\x5d\x2d\x09\x8b\x90\x0f\xea\xee\x47\x54\xdc\xf6\xa1\x57\x44\x92\xc3\xbd\x6f\xc2\x5d\x56\x9d\x14\xbc\x10\xda\x2b\x03\xe5\x96\x2a\x90\xf9\x42\xcd\x35\xeb\x73\xd4\x35\xd7\xac\x09\x51\x44\x34\x3d\xf4\x03\x90\x47\xe6\xb6\x55\x7c\x0c\x26\x4a\xb1\xd5\x74\x6f\xc6\xd9\x3b\xd3\xc2\xa6\xde\x6b\xaa\x82\x26\xc1\x8a\x45\x69\x24\xe0\x5a\x6d\xae\xdb\x94\x0d\x2a\x23\x01\x30\x19\xe4\x4d\xf4\x5d\x74\xa6\x2a\x42\x5f\xf8\xba\xca\x32\x2a\xfc\xc8\x1b\xd6\xd5\x09\x00\xe5\x70\xfd\xda\x8d\x94\x07\xd4\x08\x73\xd4\xa0\x25\x6e\x24\x49\x18\x61\xa1\xf3\x8c\x06\xbb\xc4\x22\x9c\xc3\xcf\xa1\xc4\x60\xb0\xdd\x5f\x0d\x48\x5a\x95\x62\x30\x2b\xc5\xe0\x9d\x8e\x31\xdc\x12\x30\x48\x3d\x8f\xc0\xf0\x5a\x85\xa3\xf8\x07\x08\x13\x87\xaa\xdd\x89\x83\x67\x29\x50\x45\x73\x6f\xa8\x6e\xad\xe3\x06\x37\x55\xbf\x96\x5f\xa5\x74\x2d\x03\x55\x6b\x23\xf8\xb0\xe2\x1e\xf2\x77\x6e\x95\xb7\xc5\x72\x36\xd9\xca\xc9\x1d\x61\x5b\xb7\x60\x15\xd1\x96\xa4\xc0\x66\x9c\xa1\x32\x49\xb0\x6c\x9e\x92\x11\x48\x64\x70\x4e\xca\xe5\x8c\x63\x2e\x33\x5f\xb0\x3a\x80\xf3\xc4\xea\x8e\x2f\x41\x51\xaa\xf8\x08\x80\x45\xa9\xb6\x14\xcd\xe6\xe2\x6e\x25\xf7\x5b\x19\x77\x1c\x3d\x4a\x78\xb5\xe4\x4d\x41\x17\x02\xd1\xbc\x1b\x7e\x6b\xb1\xd3\xf7\x64\x7c\x32\xcb\x35\x54\x90\xb1\x76\x83\x21\x55\x3e\xc9\x41\x84\xaf\x21\x92\x00\xe1\x9e\xb8\x1a\x99\x94\xc8\xce\xb4\x49\xcb\xb9\x8f\xa0\x73\xb8\x8e\x54\xaa\x4b\x48\xe0\xb9\xd8\xcd\x76\xfa\xad\x42\xb6\x07\x39\x06\x32\x1b\x14\x78\x89\xcb\x5d\xe5\xfd\xef\x0c\x52\x17\x5d\xea\x3c\x3c\x33\xc7\xd9\xa7\x44\x63\xcc\x74\x0f\x53\xbc\xdc\xdd\xff\xd3\xb8\x65\xeb\x4c\xd1\x58\x46\x29\xec\x66\x0d\xee\x49\xb6\xaf\x8c\xab\x58\x05\x8c\x64\xb3\x59\x31\xae\x15\xaa\x82\xe0\x0e\xb4\x86\xbd\x4e\x47\x89\xdf\xfc\x74\xe7\x7e\xcb\xc6\x18\x13\x56\x85\x62\xd6\xbd\xce\x4a\xb2\x43\x50\x61\x86\xbf\x93\xdb\xc4\xe6\xc5\x6b\xdc\x3b\x28\x76\x77\x53\x29\xde\x4f\x8a\x1d\x59\x01\x15\x3b\x34\x6d\xa9\xca\x98\xa0\xdc\xfc\xe2\x62\xfb\x31\x59\x41\xa0\x85\x50\x22\xac\x51\xba\xb1\x7c\x72\xa6\x2c\xfb\x3c\x9c\xf2\x41\xf8\x45\x35\x23\xd0\xac\xad\x29\x61\x4a\x55\x1a\xab\x4a\xf2\xa5\x29\xef\x6a\x71\x72\x25\xaf\x17\x14\x8b\xf1\x70\x51\x56\x35\x30\x56\xc1\x7a\xd7\x5c\x3e\x32\x4d\xa6\x5a\x72\xad\xdf\x74\x16\x1c\xec\xf0\x16\xc5\x02\x14\x70\x4d\x91\x1c\xb2\x3a\x5b\x48\x97\x80\xbb\xcc\x6e\x6e\xc8\x24\x4d\x86\xe1\xd6\xd9\x29\x8e\x52\x63\x17\x29\xd6\x7d\xbd\x49\x64\x09\xfb\x63\x2a\x6d\xa0\xd1\xab\xec\xcc\x4e\x65\xd9\x77\xf6\xff\xe4\xf6\x20\x5f\x5a\xf5\x5f\xbe\xd9\x9d\x08\x69\x50\x2b\x48\xca\xc3\x4f\xcc\xdd\x2d\x9c\x7f\x41\x7a\xd4\xcf\xd0\x80\x0b\x1c\x3a\x5d\xaf\xed\xab\x02\x6f\x3a\x91\xb0\xba\xdb\xe9\x1a\x54\x2b\x56\x16\xf7\xbc\x21\xf6\x50\x14\x09\x03\x8f\xe2\x3c\x32\x1d\xaa\x46\x1a\x59\xc9\xcc\x32\x31\x6c\x4b\x2b\xd8\xd6\xd7\xae\x19\xe3\x29\x31\x14\x1e\x1b\xca\x55\x24\x65\x79\x65\x10\xac\x7b\xfc\xfe\xc7\xcb\x9f\xaf\x8e\xce\xcf\x8f\x7e\x5e\x21\x1a\xc3\xb6\x74\xc3\x7e\x29\x82\x38\x1b\x87\xc9\x57\x76\x9f\x0e\x92\x4d\xd6\x4c\x90\xb6\x21\x4e\x75\x29\x6f\x81\xab\x98\x7b\x70\x35\x02\x94\x98\xd3\x58\x51\xf4\x1e\x1f\xc9\x6b\xcc\x0e\xa7\x83\x5c\x46\x69\x04\x02\x9f\xc6\x50\x98\x83\x54\x0a\x07\xa9\x48\x72\xde\x8c\x0e\x6a\x2f\x18\x59\x10\x2f\xe0\xa2\xbd\x25\x15\x1e\xa1\xd3\x84\xbf\xee\x79\x7c\x18\x0c\x3a\xf7\x06\x4d\xdd\x41\xdb\x25\x67\xbb\xc1\xaa\xe7\x3b\xdc\x44\xad\x2a\x04\xea\x7e\xc5\x0f\x8a\x9d\x9d\x94\xca\x38\x8b\xe2\x5e\x29\x52\xc8\xf9\xd7\xda\x08\x22\xbf\x18\x9d\x39\x58\x53\xb4\x6d\x16\xf8\xf1\x31\x71\x5e\xe3\x18\xbe\x0b\x17\x50\xa0\x11\x8d\xb0\xec\xeb\xc6\x1e\x6d\xb1\x96\x4c\x0f\x5a\xb9\x2b\x51\xed\x1a\xb7\xaa\x8d\x60\x57\x25\x9a\x30\xc4\x76\x72\x93\xcc\x8a\x58\x44\x57\x34\x22\xba\xaa\xf6\x56\x5f\x3b\x28\xc4\x7f\x6e\xcf\xde\xb6\xae\x33\x85\x20\x49\x70\xb6\xbc\xa3\x84\x7a\xcd\xf6\x0a\x0d\x24\x89\x1d\x91\x8a\xf1\x58\x83\x67\xc3\xd2\xdd\x79\xb6\x70\x42\xb1\x7f\x98\x46\xa3\x56\x3a\x9b\x63\xab\xfa\xc7\x15\x92\x7e\xaa\xeb\xca\x0d\x55\xb2\xd4\x69\xfc\x8c\x8f\xe6\x22\x63\x25\x39\x01\xbf\xcd\x7e\xcf\x5e\xfd\xe2\x64\xe7\xf2\x64\xf3\x61\x6e\xe7\xf0\x61\x1a\x9b\x34\x31\xc8\x5f\x6e\x6d\xf6\xd5\xb8\x3f\x3c\x4a\xea\x2d\x44\x67\xf7\x31\x9d\xfa\x92\xf1\xb3\xea\xb7\x7f\xeb\x95\x50\x87\x7a\xbf\x72\xa8\xf1\xfb\x42\x29\x2c\x37\x1a\x58\x0e\x77\x46\xae\xef\x8c\xdf\x77\x7c\xe6\x42\x09\x37\xa6\xd0\xfd\xc9\x06\x69\xd0\x08\xdc\x32\x03\xaf\x88\xb3\x9f\xba\x14\x4d\x01\xe1\xdf\x66\x31\x07\x56\xc8\x0b\x64\x68\x90\xd2\x24\x08\x22\x50\xa7\x6a\x38\x12\x06\x17\xe8\xf9\xc1\x05\x1c\xd4\x25\x71\x1a\xc5\x09\x3f\xb4\xed\x4b\x82\x46\x8d\x2c\x75\x7a\x6b\xe9\xe1\xc0\xcd\xac\xaf\x3a\x19\x3f\x7d\xdd\x55\x57\x86\x57\x1d\x74\x15\xbd\xf5\xe6\x84\xdd\xc4\x24\xdf\x4d\x77\x9e\x6c\xad\xfe\xd2\x83\x84\xf4\x50\xa8\xa5\xd2\x78\xd2\xf2\x1d\x2b\x7e\x23\x79\xc2\xd2\x4e\x07\xb0\xab\xaa\x07\x48\x76\x38\xb2\xe1\x1b\x65\xd0\x48\xee\x46\x8b\x2c\x86\xd9\xe8\x00\xd6\x81\x99\xf5\x29\x53\x08\xcd\xa6\xcc\x66\xcb\x54\xdc\xdf\xe0\x0e\xe1\x62\xc1\x6c\x94\xa6\x2b\x1f\x66\x37\x38\xee\x11\x90\x5a\x89\x95\xe2\xc5\xc5\x43\xce\x6f\x09\xa7\xe3\x33\x2f\xba\x95\x8b\x91\xa4\x8d\x4e\x3f\x95\x15\x8e\x78\x4d\xc9\xf6\x7f\xb6\x77\xc8\xef\xc8\x7e\x54\x76\xd6\x78\x76\x89\x39\x34\x5e\xc3\x72\x9f\x22\x57\xbf\x5c\x0e\x6f\x31\xec\x4d\x11\x2c\x86\x77\xff\xab\xc2\x8d\xbd\xaa\x32\xb1\x7e\xf5\xc2\x3b\xa3\x70\xfb\x95\x6b\xfa\xbb\x13\x1c\xeb\x88\xcf\x08\xc1\x91\xbb\x04\x07\x47\x7c\x87\xc5\x08\x8e\x72\x0d\xc1\x11\xd2\x15\x6a\xd9\x2b\x44\x86\xcf\x57\x19\x01\x89\x1c\xd5\x3c\x5b\x58\xae\xa4\xc6\xba\xe8\xcb\xd1\x5d\xa3\xdd\xae\x44\x02\xac\x42\x11\xe4\x98\xd7\x60\xb1\xfc\x70\x3a\x60\x70\xad\xe7\x55\xd2\x24\x88\x66\xab\x10\x56\xa4\x75\x4f\xef\x24\xc3\xe4\x1b\xe3\x50\x2a\x90\x46\x3e\x24\x43\x3a\x1a\x61\x3e\xa4\x23\x43\x21\xe8\x55\x68\x3c\x73\xf3\x6c\xd1\x08\x40\xf3\x6c\x11\x81\x1c\x0f\x1b\x3a\x30\xe6\xd4\xf2\x06\xdd\xb2\xf1\x74\xc5\xe0\xb9\x37\x78\x32\xe4\x30\xf8\x7c\x48\x47\xab\x08\x34\x2d\xd7\xd0\x38\x34\xe7\x84\xe5\xd9\xec\x27\x31\x6f\x17\xbb\xe9\x0f\x97\x1e\x0f\x51\x7b\x2d\xfb\xd4\x87\xa4\x9c\xbe\x9d\xbe\xa9\xed\xae\x9e\xf0\xf1\xc6\x1d\xe1\x49\x83\x09\x6f\xc4\x15\xc7\x69\x1c\x39\xb8\x62\x43\x26\xf9\x5b\xc6\xa5\x29\x94\xf8\x9e\x44\xb6\xf0\x77\x22\x57\x6a\x11\x9e\xbc\xb5\x73\x17\x9e\x29\xce\xdd\x63\xac\xc3\x0f\xba\x2f\x2b\x91\x08\x0b\x0c\x86\xfc\xc9\xfe\x9f\xa8\x4c\xd2\x66\x1e\x77\xfa\xe2\x45\xe9\xbc\xd8\x43\x3c\x75\xe3\x2c\x61\x8c\x4b\x99\x5e\x61\x58\xa2\x0c\x15\xa3\xf5\x54\xce\x4c\x51\x39\x0e\x71\x03\xc7\xbd\x6c\x16\xec\xc9\x32\x4d\x07\xdd\xdf\x81\xaf\xbf\x2c\xc2\x9d\x0c\xef\x8b\xfd\x3f\x45\x6f\x8c\xd9\x7a\xbd\x9f\x84\x55\xe2\x4e\x3a\x80\x56\x8d\x13\x9b\x74\x52\x5f\x0e\x51\x8d\x6c\x61\x58\xdc\xc5\xfd\x2a\x21\xf8\xd0\x19\xf0\x70\xff\x4f\x7c\x67\x6f\x84\xc2\x57\xfd\xca\xab\xd1\x48\x71\x78\x63\xe9\x15\x50\xf2\x66\x16\xda\x3f\x6c\x68\x2a\x6b\x15\xcd\xb5\x52\x34\x91\xe5\xf2\x4a\xb9\x29\x47\x63\x8e\x7a\x10\x9f\x57\x55\xf8\xfe\x02\x4f\xa4\x72\xe7\xb6\xe9\x7e\x0f\x8c\x8e\x54\xb4\x50\x65\xd8\xe9\xc7\xb3\x92\xb6\xc7\x8a\xa1\x99\xc8\x80\x03\x90\x0d\xa1\xc6\x28\xb9\x6c\xf8\x16\xb1\xea\xa9\x16\x1a\x67\xe3\x5b\xf2\x3d\x2b\x96\x8b\xb2\xfa\x71\x46\x4b\x99\x1d\xa5\xae\xf7\x9e\x83\xb1\xca\xbe\xf3\xc0\xdd\x2f\xdc\xfd\x72\xe7\x7e\x91\x51\x7a\x6f\x9d\xc0\xa5\xe2\x4d\xc5\xc8\xda\x2d\x10\xd8\x5b\xc7\xd6\xcd\x2e\x8a\xef\xcb\x54\x59\x4f\x65\x21\xa5\xcd\xb4\xd9\x8d\x5a\x03\xee\x3a\x2b\x8a\x37\xbf\x91\xe4\x2f\x4a\x9e\xa3\x6d\x11\x60\xa0\xc4\xa8\x57\x3f\x4f\xc8\xf5\xf2\x46\x5a\x14\x0d\x22\x4c\x41\xd6\x75\x0a\x24\x85\x1b\x34\x13\x3e\x80\x59\xc5\xc0\xbf\x3a\x55\x1d\x65\x71\x61\xaa\x20\x9e\xae\x56\x52\x83\x5f\xc4\x8e\x74\xd1\x9d\x12\x3e\xae\xf5\x67\x31\x2e\x86\x43\xda\x3d\x27\x37\xb4\xe4\x84\x0d\xc9\x68\x04\xd6\x11\xb3\x22\x9b\x54\x2a\x06\x05\x5d\x1f\x0f\x65\x6e\xad\xba\xfc\xc9\xa7\xe7\x7c\xc9\x54\xd0\x8a\xee\x2d\xac\xa3\xb1\x5b\xa5\x53\x51\xa1\x3e\xd8\xb2\x74\x67\x72\x82\xbb\x42\xf1\xba\x68\xc9\xaa\xb4\x09\xf5\x2a\x0a\xc7\xcd\x1e\x94\x63\x9a\xb6\x6a\x2f\x6a\x62\x0c\x2b\x0f\x4c\x88\xe9\x0a\xc5\xe4\xc4\x2f\x6b\x5b\xd4\xdf\xbd\xe2\xb5\x2e\x60\xc0\xf1\x81\xb7\x14\x95\xd6\x26\xae\x57\x6c\x6e\xac\xb5\x3e\xab\xbc\x09\x32\xb4\x31\x1c\x83\x92\xfe\x46\x0a\xc1\x29\x23\xa9\x46\x26\xc9\x67\x05\xb2\x03\x8e\x48\x7e\x37\xc8\x57\xe8\xad\xcc\x53\x95\x50\xb4\x4c\xc1\xb8\xd8\x9a\x5e\x2d\xc6\x78\xe6\x07\x4a\x16\x2d\x7d\x89\xb5\xe1\x4c\x8c\x3a\x20\x0c\xb9\x67\x14\x8f\x3f\xc7\x95\x5a\xd3\x15\x2a\xeb\x3e\x80\x99\x54\xe4\x53\xb6\x5a\xa1\x72\xed\x44\xa7\xa8\x97\xa2\x0c\x51\x33\xd1\x28\xb2\xac\x9b\x11\x84\x72\x0e\xc2\x47\x17\x29\x2a\x63\xc1\x4b\xfd\x90\xf2\x3a\x65\x16\x97\x7b\x83\xb8\x87\x92\x20\xaa\x7c\x11\x75\xca\x51\xaa\x31\xb7\xf4\xa0\x82\xd2\x04\x9b\x69\xbf\x94\xfa\x95\x98\xca\xc0\x39\xb2\x5a\xd7\x4a\xd2\x95\xe8\x0e\x52\x1c\xbc\x31\xb7\x40\x05\x04\x9d\x0b\xc2\xf1\x4e\xd6\xcb\x95\xa4\xca\xd3\x5d\x0e\x1d\x82\xec\xc7\x1b\x93\x94\x15\xa4\xc0\x4d\xda\xc7\x67\x6f\xdb\xa9\x66\xec\x6c\x5b\xc6\x26\xdb\xed\x13\xc2\x9d\x16\x98\x1e\x3a\x56\x42\x34\x1d\x68\x17\x7d\xb0\x13\x90\x63\x40\x25\x8e\x98\xd5\xe9\x0d\x2c\x39\xbc\x48\x04\x80\xa7\x48\x9a\xa6\x5d\x26\x25\x22\x69\x2b\x88\x5f\xb4\x44\x45\x8a\xb8\x0a\x92\x01\xf5\xdf\x24\xcb\xd4\x79\x25\xcf\x2c\xc9\x79\xd4\x92\x27\x84\x18\x13\x7d\xdb\x2c\xbc\x9e\xa7\xba\xbc\xca\x24\x8d\x84\x58\x85\x59\x43\xe4\x2a\x15\x10\x49\x03\x9c\x34\x6d\x91\xef\x16\xe3\x14\x29\x79\x96\xb1\x4b\x73\x63\x5b\x1d\xe7\x70\x77\xc0\x78\x95\xc5\x70\xc4\xb1\xc8\x23\x5b\x73\x73\x69\xe6\x3a\xb8\x48\xcb\x8d\x6b\xa4\x66\xb1\x97\x9a\xa8\x46\xcd\xb3\x70\x55\xfa\xeb\xa6\x42\xfd\xa9\x14\xa8\x72\xfa\xcc\xc2\x9f\x70\x32\x8f\xb1\x9a\x86\x66\x49\xd2\xee\x3c\x5b\x40\x04\x28\xe4\x2f\x87\xd3\x4a\x25\xf8\xec\x66\x5b\xd8\xab\xdb\x42\x13\xd1\x56\xac\x5f\xe1\xdd\x94\x84\x88\x21\x59\x8b\x4d\x13\x95\x3e\x1a\x52\x5e\xdb\xa1\x07\x2b\x95\x69\xc8\xfd\x3b\x49\xca\xc8\xce\xa3\x42\xed\xbd\x4f\xba\xc9\x8d\x5c\xa6\xc1\x42\x2c\x61\x21\xf4\x63\xf5\xaa\xf2\x3d\x06\xea\x88\x4a\x2d\x73\xb5\xa6\xe2\x62\x75\x7f\xa5\x55\x57\x40\x77\xb1\x82\xa8\x9a\xd1\x76\x6d\xa4\xe3\x0a\xbe\xa9\xb1\x8d\x36\x7d\xfb\x1b\x6b\x6c\x06\xa9\x71\xa5\x0e\x17\x48\x13\x32\x76\xce\x35\xeb\x21\x47\xe1\x61\x02\xd3\x56\x9d\x9a\x2d\xe8\xcc\xc4\x6a\x2e\xac\x15\x61\x4d\xcd\xd8\xba\x38\xd5\xf5\x8a\xd6\x55\x77\xc9\x63\x51\xbe\x6c\x4a\x8b\xe7\xd0\xcd\x4e\x17\xee\x15\x53\x57\xb3\x4a\x59\x3b\x0d\x08\xf0\x80\x0d\xaa\x34\x11\xa7\xd6\x9d\xdb\x4b\xc2\x94\xba\x5d\xc4\xd7\xb7\x35\x83\x71\x43\x6e\x79\x57\xa2\x6e\xa1\xd5\x3c\x5c\x27\x12\xb3\xec\xe8\xbc\x28\x78\x98\x74\xd0\xfa\x61\xbe\x55\x69\x35\xdd\x50\x05\x9d\x0e\x0b\x13\x16\x7a\x73\x49\xe3\xcc\x09\x83\xb0\xe7\xb2\xd3\x9a\x2c\x87\x61\x15\xa2\x89\xdb\xf5\x0b\xaa\xa1\x7a\x51\x2c\xea\x96\xae\x6e\x45\x74\xd5\x75\x51\xab\x9c\x43\x5d\x09\x2c\xab\x86\xba\x26\x73\xa7\xde\x6c\x55\x2c\x51\x14\xb1\x92\xa1\xbe\x2b\xd8\x9a\x6c\x9e\x6e\x7d\x28\xa9\x2f\xe8\x7a\x4f\x5a\x9b\x37\xe4\xb6\x9a\x09\x04\xf1\x4e\x87\xab\x10\x4c\x9c\x3d\x80\x54\xfa\x60\x5b\x7b\x71\x0b\x22\x24\x49\x53\x70\xdc\x38\x48\x0f\x56\x10\x43\x67\xf6\xf0\xd9\x66\x71\x0d\x96\xe5\x00\xa4\xee\x32\x14\xde\x41\x9a\x3b\xa8\x6f\x65\x4c\x33\x41\xcc\x21\x57\xfb\xd7\xaa\x41\xb5\xa6\x94\x48\x7e\x87\xfc\x44\x1f\xfa\x62\x8a\xa0\x89\xe0\x86\xba\x50\x3a\x39\x87\xaf\x08\x7d\x81\x1d\x41\xdc\x36\xc6\x85\x91\x71\x8a\xb2\x5e\x26\x10\x6d\x13\x8c\x08\xfe\x2c\x96\x61\xb0\xdd\x47\x30\x83\x01\xa8\x1f\xb4\x64\xd3\xf3\xfc\xb6\x65\x7b\xba\x2c\xb9\xdf\xe2\x5c\x92\xc8\x0a\xd7\x53\x67\x71\xd2\x95\x3a\x8e\xe2\x50\xc5\x81\xd7\x8b\x14\x11\xa3\x87\x19\xb6\x11\x20\x0e\xd8\x6b\xdc\x3b\x60\xbb\xbb\x1e\xcd\x63\xc4\x09\x00\x3d\x2a\x45\x30\xc4\x93\x00\xbf\xfe\x24\x47\x21\xb7\x9b\x36\x9b\xd8\x40\xc9\x0d\x22\x6f\x94\x12\x25\x7b\x1c\x8e\xcf\x22\x2a\xb9\xb4\x51\x70\x79\xf4\x41\xbb\xa9\xa6\x9f\xe7\x85\xac\xd6\x8f\xc6\xab\x61\x7a\x5c\x8c\x37\x98\xc8\x62\xdc\x38\x8b\xc5\xd8\x99\x02\xcb\x36\x68\x90\x65\x8d\x0d\xb2\xcc\x69\x70\x5a\xd5\xd5\x54\x63\x09\x4c\x17\x35\x0d\x9a\xe4\x47\xb6\xc1\x72\x93\x06\xcb\xe6\x06\x4b\xb7\x41\x75\x50\x1b\x5b\xd5\x1e\xc4\xaa\xac\xa9\x4b\xf2\xbb\x8d\xea\x91\xfc\xce\xf5\x50\x3f\x2d\xee\x4f\xc9\x1d\x99\xfd\xf4\x1e\xdf\x4a\xf1\xe4\xa2\x56\x3c\xa9\x06\x7e\x37\x8f\x67\x4a\x09\xd1\x91\xdb\xfb\xdd\x5c\xe1\x42\x27\x1c\xc3\x7c\xbd\xd4\x5a\x92\x20\x8e\xba\xe5\x9c\x4c\x31\x77\xcd\x25\xee\x32\x76\xd9\xec\x1a\x26\xc5\x8a\x55\xb7\x30\x0e\xc6\x0e\x6c\xd4\xe8\xdf\xd2\x68\x10\x75\x43\xf8\x4f\x19\x4b\x52\x6b\x55\x54\x95\x76\x47\xcb\x7b\x29\xa5\x7f\x8a\x19\x26\x2b\xec\xe2\xce\x5b\xf7\x62\x78\x61\x58\x1c\x3f\xe9\x74\xd5\x81\x4c\xae\x0f\xe2\xd2\xc7\xcc\xa6\xcd\x7d\x7b\xfc\xee\xe8\xe3\xe9\xe5\xd5\x9b\xa3\x1f\x8f\xbe\x3b\x39\x3d\xb9\x3c\x39\xbe\xc0\x5a\x68\x70\x9a\x3d\x14\x4b\x2e\xb0\xaf\x7a\x71\x99\xdd\x88\xa7\x05\x23\x8b\x8c\x91\x23\x76\x53\x8a\x47\xb9\xde\xfa\xc9\x04\xab\xfd\xa1\x28\x3e\x09\x2c\xaf\x2e\x13\xfd\xe8\x09\x24\x4c\x6d\x49\x01\x89\xef\x72\xd8\xb2\xb4\xfe\x0a\x19\x07\xf3\xb1\x28\xbf\x6a\x91\xee\xfb\x93\xb3\x93\xf7\x47\xa7\xcd\x83\xee\x7b\x83\xee\xfb\x83\xee\x7b\x83\xee\x7f\xe1\xa0\xfb\x8d\x83\xee\x57\x06\xdd\x5f\xd9\x64\xf5\x77\xdc\x31\xe6\xf8\xe3\xce\xf5\xa0\xf7\x47\x30\x79\x83\x04\x42\x20\xd8\x5c\x91\xee\xc5\xf1\xf9\xc9\xd1\xe9\xc9\xdf\x8f\x2e\x4f\x3e\x9c\x5d\xbd\x3b\x39\xbf\xb8\xbc\x3a\xfb\xf0\xf6\xf8\xea\xe2\xf2\xfc\xe4\xec\x7b\xac\x2b\xc2\x09\x78\xe0\x8d\xa1\x24\x94\xb3\xac\x86\x0c\x1a\x06\x07\xf0\x43\x49\xd0\xfc\x06\xee\xd2\xb7\x64\x01\x66\x2f\xb4\x3b\xce\xf2\x89\x0c\x41\x02\x32\x78\xda\xa5\xf9\x2f\x90\x8c\xff\xc3\x9c\x72\x4e\x64\x80\xc1\xed\x3e\xa2\x5d\x93\x27\x44\x55\xde\xed\x23\xba\x41\xd2\xbf\x3f\xa4\xe8\x66\xb3\x29\xd0\x69\x52\x1d\x3f\xca\xcd\x0c\x96\xf9\x3c\xe3\xe3\x5b\x32\x31\xf1\x96\x4b\x3d\xe8\x6b\x3b\xae\x1e\xca\xab\x21\xd7\xce\xc9\xed\xc3\x44\x26\xe7\xd8\xba\xa7\xfc\x76\xcb\xf1\xb9\xdb\x82\x78\x6c\xcb\xc5\xa2\x60\x9c\x4c\xda\xa9\x63\x7b\x4b\xf5\x2d\xf8\x06\x02\x1c\x6b\xc2\xc9\x89\x4b\x7f\xb0\xad\x42\xe4\xe1\xe2\xf1\xf1\x9a\x27\x45\xda\xe9\xdc\x89\x3f\xe9\x41\x5a\xe0\xc2\x8d\x82\x6c\x95\xe2\x76\xcd\x0b\x44\xbf\x2e\x08\x47\x6d\x86\x89\xbb\x20\x81\x0d\x2c\x0a\x92\xd9\x2f\x1e\x64\x3a\x0d\x27\xa4\x61\x6f\xc0\xac\x88\xcd\x9d\x6a\x8b\x76\x3a\xce\x40\x3b\x9d\x24\x77\x86\xed\x46\xe6\xf7\x60\x88\xf8\x81\xf4\x75\xbb\x41\xba\x0b\x95\x88\x84\x64\xec\x3d\x2d\x61\x4f\x63\x86\x66\x26\x31\x8b\x3f\x2e\x19\x93\x70\x1b\x63\x93\x01\x8a\x05\xa0\x09\x65\x5e\x63\x16\x01\x79\x88\xbd\x7a\xc0\x3b\x9d\x64\xfb\x9a\x27\x3c\x7d\x7c\xbc\x12\x7f\xb6\x31\xce\xd3\x83\xd4\x98\x95\x80\xab\x36\x97\x91\xf1\xb6\xa0\x8a\xf6\xca\x89\x14\x62\xee\x9c\x31\x07\x97\x19\xf7\x4c\xad\x1a\xd2\xec\x54\x9d\x23\x2b\xd3\x0c\x34\xcc\x76\x96\xc1\xf3\xce\x4e\x4b\x3b\x7a\x99\xfe\x23\xab\x85\xc4\x09\xd3\x70\xcc\xb3\x9b\xb3\x6c\x4e\x5a\xd7\x1c\x0c\xf0\x12\xb0\x9c\x33\x98\xaa\x0b\x5b\x93\xfc\xf9\xff\xfd\xe3\x3f\x76\xae\x07\xc9\x3f\x26\x3b\xe9\x1f\xff\xf0\xe7\x34\xed\x74\xf2\x61\x7f\x74\x78\x06\x51\x15\x13\xf1\x3b\x05\x2a\x3f\x05\x7d\x6e\xe2\xf4\xef\x2d\x15\x4b\x11\x09\x91\x08\x4f\x07\xed\xcb\x93\xcb\xd3\xe3\xb6\x0c\xba\xd4\xbe\x78\x73\x7e\xf2\xe3\xa5\x79\xba\xfc\xd9\x7c\x92\x8b\xe4\x02\x0d\x64\x24\x6d\x4a\x54\xf4\x25\xab\x1b\x0e\x2d\x5c\xde\xdd\xdd\xc8\xf2\x3a\x89\xa0\xd4\x12\x5e\x89\x3f\x5f\xbc\x0e\xbb\xbb\x2a\x36\x41\x38\xbf\xc8\x92\xe1\x10\x10\x3a\x9d\xda\xae\x82\xe3\x18\xe9\x76\x55\x9f\xe7\xc3\x47\x26\x76\xd2\x9a\x43\x7d\x7c\x74\xc9\x42\xb7\x8d\xc0\xc3\xba\x2e\x2f\x86\xdf\x81\x0c\xcb\xa0\x72\x2e\x80\x61\x89\x73\xc0\x1d\xff\x4f\xf0\x77\xb3\x9e\x9d\x4a\x22\x1e\xa4\x03\xc9\xfd\x44\x05\x10\xb4\x84\x16\xcb\xd2\x2c\x45\xe6\xad\x53\xee\x0b\x83\xd4\x5b\x9a\x22\xb5\xc1\x59\xa7\xf3\x81\x27\x59\x6a\xbc\x94\xa3\xab\x9d\x99\xf2\x7e\xa1\x28\xec\xfa\x45\xd2\x14\x15\x31\x62\xdb\x5d\xb8\xca\xaa\xca\x6e\xa3\x36\xba\xd2\xd5\x56\xac\x10\x30\xbc\x91\x5b\x88\x7b\xae\xf2\x70\x55\xa3\xdc\xdb\x84\xba\x93\xe4\x22\x17\xd2\xe9\x1c\x43\x72\x09\x87\xeb\x06\xc4\xed\x76\x79\xc0\x3a\x9d\xed\x63\x71\x30\x0e\x52\x86\x59\x6c\x34\xd1\x8c\x2e\xd6\x08\x06\xd0\x68\x6d\x4a\x9c\x3a\x40\x95\x20\x44\xa7\xc9\x3e\x98\x08\x0b\xbc\x76\xf9\xb0\x30\xde\x07\x0e\xa6\x93\xbe\xd2\x89\xf3\x06\x6b\x0b\x01\xbb\xd5\xde\xc0\x11\x20\x11\x71\xf0\x23\x6c\xc0\x0b\x43\xf1\x89\xfe\x3a\x9d\xf6\x1f\x1f\x2b\x54\x60\x22\x28\xb3\x0f\x62\x51\x8c\xbd\x54\x63\x7f\x01\x06\x81\x47\x2f\x61\x08\x87\x33\x23\x5b\x74\xc5\x19\xa6\x4e\x2b\x68\x3f\x77\x75\x38\x36\xab\x9a\x49\x11\xc4\xbf\x24\x8d\x8e\x4a\xef\xe1\xcd\x24\xc0\x65\x28\x06\xd8\xa2\x37\x1f\xb0\x1b\x4e\x41\xb5\x70\x53\x4a\x93\x75\xf8\xab\xd3\x01\x9c\x7d\x98\x7c\x23\x20\xa4\x83\x84\xd5\x5c\x4f\xd1\x29\xab\x81\x7a\x13\x49\x1b\xf2\xdf\x35\x81\x77\xa7\x73\x2f\xef\x1d\x9f\x08\x14\x27\x53\x9a\x5d\x2d\xb2\x31\xf9\x78\x7e\x22\x0e\x80\x01\x7c\xa2\xef\x7d\x71\x97\xb4\x62\x2f\xbb\xbc\xf8\xb8\x58\x10\xf6\x26\x2b\x05\xc3\x0b\xe1\x1c\x3d\x28\x8d\x91\xe2\xc3\x91\xb4\x63\x93\x13\x73\x72\xaa\x97\xa9\x3a\x2d\x30\x30\x35\xe0\xf6\xe5\x77\x1f\xde\xfe\xdc\x86\x93\xa9\x7a\xf6\x7a\xa8\xcd\x90\xe7\x53\xe4\x51\x6e\x45\xfb\xc6\x78\x09\x08\xb5\x0a\xb4\x42\x42\x44\x01\xce\xa9\x19\x81\xb8\x78\x02\x9b\x6a\xf0\xa2\xc8\x32\x89\x85\x30\xb6\x5f\x17\x3c\x01\xdd\x2c\x9d\x26\x45\x6a\x6c\x75\xee\x14\x24\x0a\xec\xa2\x9e\x30\x53\x01\xd4\x69\xb7\x5c\x80\xce\x9a\x1a\x83\xba\x22\x45\xfd\x9a\x59\xb8\xe3\xac\xb0\x55\x0d\xa9\x73\x9c\xf4\xaa\x4d\xf3\x30\x93\xbd\x00\xa9\x68\x2a\xe7\x66\xd8\x1c\x77\x1e\x34\x98\x47\xae\xe7\x61\x0d\x47\x69\xe3\x3c\xf4\x20\x03\xee\xb6\x29\x3d\xe2\xe6\xb3\xf0\x2d\xaf\x73\xd7\xf2\xda\x8a\x84\x55\xe6\x1e\x85\x50\x6d\x46\xa0\x7c\x48\x47\x70\xd8\x14\x80\xd5\xb1\xa9\x2b\xe0\x26\xfc\x89\xb9\x03\x8f\xcc\xac\x29\x0f\x9d\xc3\x14\x18\x9c\x10\x67\x99\x34\x51\x12\xa7\x43\x52\xc4\x3a\x9d\xe8\x41\x52\xe5\xbd\xac\x8f\xee\xf0\xc3\xd1\x39\xf1\x2b\x95\x8f\xc0\x7b\x19\xdf\x2d\xc6\xa1\x92\xee\xbf\x96\x84\x3d\x5c\x90\x19\x19\xf3\x82\x25\xff\x51\x8e\x19\x5d\xf0\xe1\xcd\x6c\xce\x70\xfb\x3f\x76\xf8\xce\x7f\xb4\x47\xff\xa1\xe8\x40\x8d\xb2\x5b\x15\xc6\xfe\x4d\x96\x0b\xf6\x7d\x4a\xf3\xc9\x56\x49\x98\xd4\xfd\x4e\xb6\x24\xcf\x29\x58\xb7\xad\x7f\xd2\x7c\x57\xdd\x52\xff\x6c\x6f\x9c\x48\x32\x96\xa4\xb2\xe5\xc0\x92\x99\x1c\xcc\x09\xc0\xc8\x21\xba\xb0\x61\x2c\x62\xbc\x35\x02\xc1\x82\xc1\xe3\x15\x74\x47\x90\x60\xca\x3d\x29\x41\x03\xd5\xa9\xe2\x58\x64\x6b\xf3\x5b\x66\x90\xdf\xb2\x31\x5b\xa3\xbe\x3a\x9c\x9c\x2b\x7e\x51\x0f\x17\x06\xa3\x32\xd7\x94\x43\x9d\x87\x34\x07\x80\x9a\x9b\x19\x4a\xa3\xfc\x98\x02\x85\x69\x05\x8a\xb7\x7a\x5f\x9a\x88\xca\x2a\x4b\xf4\x28\xd6\xb5\x60\xfb\x3a\x8c\xdc\x38\xa6\x19\xa9\xd9\x8a\x4b\xfd\x6b\xaa\x60\x69\xcd\xcd\x56\xc9\x0f\x24\xb5\x42\xc3\x6b\x5e\x4b\x3c\xae\x4c\xa1\x2b\xee\x12\xf8\x31\x26\x7d\xd7\x61\xd2\x1d\x1d\x34\x77\x98\x75\x6e\x98\x75\xdb\xf0\xbd\xdb\x7b\xbf\xa6\xf7\xe3\xfa\x21\x0a\xfa\x56\x9c\xda\x0a\x89\x6b\x2a\x7f\x68\xae\xbc\x55\x5f\xf3\x82\x87\xf9\x31\x2a\x41\xdf\x15\x86\x27\x43\x36\x92\xc7\x30\x57\x44\x8c\x71\x43\x58\xad\x48\x57\x0b\x00\x89\xce\x1a\x76\xc3\x57\x82\xbb\x4e\xda\xff\x79\x33\xa3\xf3\x39\x61\x7f\x5e\x72\x3a\x6b\xa3\x61\x9b\xfc\xba\x28\x18\x2f\xdb\xa8\x4d\xc4\x9a\xed\x5e\x67\xd7\x64\xd6\x1e\x39\x41\x17\x61\x48\xed\x65\x49\xb6\x4a\xce\xe8\x98\xb7\xb5\x3b\xa3\xcc\xc1\xa0\xaf\xaa\x84\xa0\xf6\xd5\x15\x29\xdf\x17\x93\xe5\x8c\xb4\xd1\x67\xa9\xe4\xdc\xee\xad\x04\x1e\xcd\xca\x4a\x2c\x4a\x38\x7d\xdb\xa4\x22\xbe\xe4\x8f\x8f\x6d\x59\x5c\xac\xc9\x34\xa3\xb3\x25\x23\x90\xa1\x49\xb4\x42\x6f\xf2\x1a\xfd\x67\xff\x80\xbf\x32\x19\x8e\xdc\x64\x62\x6a\xcd\xcc\xb7\x21\x1f\x39\x32\x91\xbc\xd3\xd1\x69\x26\x6c\x24\xc5\xd4\xde\x91\x2c\xc9\x05\xdb\xdd\x3b\x28\x5e\x51\xdd\x6a\xa1\x5b\xcd\x30\x1d\x16\xa3\x16\x19\x66\x23\x9c\x0f\x33\xd7\x59\x09\x91\xee\x94\xce\x66\x67\xcb\xd9\xac\xac\x19\xb1\x98\xb3\xf4\x83\x80\x2c\x8d\xb0\xd9\x32\xb4\xff\x90\x8d\x64\xbc\x4d\x8b\x31\x48\x97\xe4\xe5\x92\x91\xef\x97\x74\x82\x0b\x6b\x09\x4b\x7f\x93\xaf\x28\x22\xe0\x5b\x85\x33\x44\xba\xcb\xfc\x9e\x65\x7e\xc0\x7a\x27\xbd\x49\xe5\x5e\x39\x86\x34\xef\x64\xb2\x05\x7b\xb6\xc5\x8b\xad\x6b\xb2\xb5\x60\xa4\x24\x39\x77\x12\x77\xc0\x20\xa0\x68\x75\x23\xeb\xda\xe6\x7e\x75\x27\x0b\x84\xcf\xca\xfb\xd1\x06\xdb\x4e\xb9\xb6\x67\x41\x27\x5b\x85\x28\x8f\xae\xdf\x02\x26\xd6\xc2\x51\xfd\x86\xab\x89\x38\x46\x6c\x58\xd7\xb8\x38\x3d\x79\x73\x8c\x49\xf7\x2d\x1d\xf3\x0b\x22\xde\x4b\xf3\x79\x39\x08\x25\xf9\x52\x40\xfe\x89\x3c\x94\xea\x2a\xec\x59\x1c\x46\x3d\x77\xd7\xab\x1b\xb1\x01\x3b\x3b\xb9\x3d\xca\x45\xb5\xc0\xe3\xa3\xa8\x65\x8b\x64\x16\x17\xab\xbe\x54\x7c\x00\xe9\xeb\x24\xbd\x7e\x1b\xdd\xdc\xe4\x76\x37\x07\xb3\xcb\x26\x93\x98\xe7\x6d\x18\x3b\x94\x1c\x9a\x16\x87\x64\x84\xb5\x75\xad\x78\x14\x53\x19\x29\x7d\x65\x4d\x98\xd0\x48\x73\x3a\xee\xa7\xd3\xea\x40\x2d\x44\xa7\x53\xfd\x28\xbf\x8c\xac\x2a\x4f\x6d\x4d\xa9\xa2\x5b\x35\xae\x83\x34\x14\xd0\xd9\xe1\x74\x50\x3d\xe3\x09\x5a\x13\x0d\x2c\x9e\xf3\xc2\x84\xf9\xf3\xec\x1e\xb4\xd5\x11\xf3\xf3\x40\x54\x43\x2e\x69\x9b\x3d\xf7\x95\x72\x21\x8f\xdc\xbb\x32\x36\x94\x74\x0a\xb2\x15\x86\x7c\xb7\x3f\x42\x4e\x38\x3c\xf8\x4e\x44\xef\x2a\xb4\x7d\x44\x79\x6b\xa2\x4c\xb9\x7d\x36\x1b\x6a\x80\x15\xc5\x5a\x5d\x7f\x10\x23\xa9\xa5\x0f\xcb\xb2\xe5\x1c\xb3\xca\x32\xda\xd8\xec\x92\x3c\x33\xe1\xd9\x95\x02\x57\x70\x47\x64\xa5\x62\x92\x35\x6e\xae\x0a\x30\xdd\xe8\xc1\x45\x5c\xa7\x8d\x20\xcd\xac\xf8\x08\x59\x17\x32\x3a\xab\x2d\x24\x3e\xca\x2c\x64\x41\x48\x2d\xdb\x06\xb6\x25\x25\x68\xc5\x33\x39\x48\x80\x18\x8e\xfc\xdc\x75\xd1\xc4\x6e\xdc\xc1\x10\xca\xe4\x78\xa5\xa3\x3f\x6a\x4b\xef\xb8\x7f\xbd\xf8\x0a\x01\x05\x6d\xbb\x4d\x46\x41\x30\x7e\x47\xa9\x23\xf3\x15\x2b\xb1\xe5\x0a\xf9\xd6\xdf\x01\x6a\x57\x7d\x06\xf1\x1d\xa4\x84\x42\xa7\x56\x94\xb8\xc3\x58\x84\x0e\x12\x0e\x1b\x7e\x28\xff\x48\x58\x50\x18\x45\x2e\x25\x01\xce\x8a\xdc\x61\x59\x02\x29\x3b\x0b\x8e\xe4\xb3\xf8\x0e\x96\x04\xb2\xc9\x3a\x4f\x3b\xd8\x0b\xb3\xce\x87\x09\x57\x3d\x99\xc6\x75\xbb\x32\x1e\x86\xd7\xbf\xb3\x99\x44\x06\x6c\xae\x48\x97\x1d\xde\x9c\xdc\x1d\x12\x77\x2e\xf0\xc7\x6b\x50\x46\x47\x97\x7f\x0e\xe5\x1f\x35\x15\xf8\x33\x70\xfb\x53\x73\x36\xb8\xce\xb9\xa1\x66\x2a\x38\xf0\x3a\x1b\x92\xc8\x34\x1a\x73\x0f\x7e\x23\xa0\xe8\x13\xad\x24\xa5\x10\x5f\xf2\x77\x3b\x73\xff\x43\x87\x48\xe3\x4b\x18\x87\x42\xb1\xea\x40\x98\x7d\xd1\x04\xc5\x18\xb6\x45\xc6\xa9\x1f\xc3\xfd\x2c\x65\x74\x2d\x9f\xa2\x98\x42\xb1\x89\x26\x1d\xa6\x8c\x90\xdf\x48\x32\x1c\xb9\x2e\x93\x82\x56\x99\x84\xc4\xf8\xdd\xdc\x25\xc5\x3d\xe2\x3b\x20\xbd\x61\xb3\xbe\x86\x00\xd7\xbe\x64\x8a\xc8\x71\xdf\x70\x2f\xa9\x1c\x19\x92\xee\x62\x8c\x7b\x23\x0c\xe6\x6f\xe2\x91\x65\xb8\x3f\xc2\x60\xbc\x26\x1e\xa7\x0b\xbc\x37\xc2\x60\x7a\x26\x1e\xcb\x05\xde\x1f\x61\x30\x1c\x83\xc7\x1e\x7e\x22\x1e\x7b\xea\xb1\x8f\x9f\x8a\xc7\xbe\x7c\xe4\x3d\xfc\x6c\x84\xdb\x5c\x7d\xe5\x7d\xfc\x5c\x3c\xaa\xaf\x77\x3d\xfc\x62\x84\xdb\x77\xbd\xf6\x4a\xb0\x01\x89\x3b\x48\xfc\x79\x95\xa6\xe1\xc2\xdd\x53\x46\x76\xa7\x05\x9b\x67\xfc\xcb\x56\xd0\xb1\xca\xb0\x30\x11\x01\x2a\x00\xcd\x2e\x2d\x95\xbb\x72\x2a\x18\xcc\xde\xff\xc7\xdd\xbb\x6e\xb7\x8d\x5c\x09\xa3\xff\xf9\x14\x10\xbf\x84\x01\xc2\x12\x4d\xca\x9e\x9e\x84\x72\x35\x3f\xd9\x92\xba\x35\xb1\x25\x45\x92\xbb\xa7\x87\xe6\x28\x10\x51\x14\xab\x05\xa2\xd8\x85\xa2\x64\x59\xe4\x79\xf6\xb3\x6a\xd7\x1d\x00\x25\x27\x93\xc9\x3a\xeb\xfc\x21\x81\x42\xdd\x2f\xbb\xf6\x7d\x4f\xe4\xad\xbc\xd9\xfc\x03\xab\x40\x4b\xcc\xe1\xaf\x29\x88\xb6\xdb\x9b\xaa\x09\xd1\x73\x21\xbb\xd7\x6b\x9b\xe8\x85\xe1\xf6\x52\xdf\xb3\xc5\x92\x15\xa4\x10\x95\xf4\x2b\xbe\x82\x08\xa8\x5b\x92\xb7\x15\x93\xaf\x97\xcb\x3c\x15\x5e\xda\x47\x96\xd1\x19\x25\x7c\xa3\x46\xa0\xc9\xa9\x6f\x19\x00\xbf\x6d\xe8\x3f\xbf\x55\x15\x7d\x4c\x1f\x6f\xc8\x07\x36\x4d\x25\x68\xa4\xe5\x0f\x80\x90\xd3\xf2\xd8\xe7\x72\x92\xde\xd9\xb2\x74\x5b\x57\xbe\xd4\x77\x2d\xc8\xc9\xe4\xbe\x95\x0f\x6a\x43\x29\x6e\x0e\xec\x5e\xf5\xa8\x92\x8d\xf4\x44\x6e\x63\xfd\xac\x3e\x98\x21\xc2\x8e\x36\x2f\xea\x93\x92\xb7\xcb\xad\xfd\x4e\x39\x80\xd7\x15\xa9\xe9\x83\x4d\x6e\xdf\xd4\x47\x3d\x50\x97\x47\xee\xfc\x6a\xa2\xca\x7a\xe6\x89\x42\xe4\x81\xf0\xde\x55\x86\x60\x36\xe4\x19\xf1\x13\x74\x5f\x7c\xd6\xe9\x9f\x65\x77\xbc\x04\x95\xc5\xed\x27\x3c\x90\x13\xe5\xde\x83\x1e\xab\x0c\x03\xd7\x5b\x97\x23\xd8\x2f\x78\xb0\xe7\x8f\xda\xe5\xb2\xbb\x07\x0f\xe4\x44\xda\x57\xf5\xf5\x17\x4a\xf2\x0c\x0f\xe4\x54\xc2\xa3\x4a\x3d\x4f\x39\x18\x76\x0e\xe4\x4c\xea\x97\xb0\x57\xfc\x16\x0f\xbc\x29\x3c\xe0\xb7\xc1\xa8\xe4\xe7\x7f\x77\x83\x32\x5f\xfd\x03\x80\x07\x72\xea\xfc\x94\x30\x4f\x65\x74\x7f\xf6\x32\x37\x8c\xf2\x90\xdc\xac\x6e\x6f\x09\xc7\x7b\x72\x2e\xcd\x9b\x59\x0c\x4a\x0a\x71\x49\x41\x17\x5d\xbb\x09\xdf\x1b\xc0\xa2\xd4\x3e\xa8\x12\x9f\x8a\xbb\x82\x3d\x14\x78\x4f\xce\xa9\x7e\x51\x5f\xe4\x89\xd8\x93\xf3\xf8\x03\x31\xdb\xd4\x1d\x99\x3d\x39\x8d\xee\x5d\x7d\xff\x51\xab\xdb\xe3\x3d\x39\x99\xe6\x2d\xfc\x76\x9e\xf2\x74\x51\xe2\xbd\xef\xbc\x1c\x2a\xcd\xf4\x47\xc7\xd8\xc4\x7b\xff\x0e\x3d\x32\x21\x37\x55\x2d\x24\x5f\xca\x91\xcb\xf9\x54\xcf\x66\x7f\x14\xd3\x54\xe0\x3d\xd8\x7f\xf0\xdc\x6e\x85\xf3\x71\xf4\x65\xc9\x49\x59\x52\x56\xe0\xd7\xfd\x60\x42\xdc\x17\x0b\xfe\xe1\xa0\x03\xe4\x37\xfa\x61\xb1\x08\xce\x82\xbc\x5a\x2b\xb0\xc2\x48\x7a\x65\xd6\x1f\x88\xce\x21\xe7\x90\x1a\xf7\x1c\xb1\xf0\x66\x50\x7d\xf7\x66\x94\xe9\x4b\xe6\x26\x9d\xde\xdd\xac\x78\x21\x87\xf6\x2f\xe3\x93\xdd\xac\x68\x9e\x9d\xe7\xa9\x90\x97\x1a\xb0\x79\x74\x24\xcd\x90\x39\x51\x12\x71\x45\x17\x84\xad\x04\x0a\xa3\x8c\x54\x58\x14\x74\x16\xb7\x4d\x8a\xa3\xce\xcf\x39\x5b\xd0\xd2\x22\xd3\xfa\xb5\xc7\x49\xc9\xf2\x7b\xcf\x09\x71\x03\xe6\xd6\x13\x73\x52\x80\xe9\x6c\x73\xd5\x1f\x57\x02\xf4\x0e\xcf\x6e\x4a\xc2\xef\x89\x15\x49\xf5\x11\x55\xb6\xaf\x95\xef\x31\x49\x10\xc3\x19\x9b\xae\x94\x4c\x25\x14\xca\xb7\x1d\xef\x87\xf6\x98\x2a\x12\x33\xf4\x34\x9d\xa7\x3c\x9d\x0a\xc2\x0f\x53\x91\xaa\xa9\xab\xf7\xb5\xc0\xdd\x6e\xf1\xfb\x3d\xc4\x7a\x59\x2a\x52\xdc\x6e\x77\x0b\x54\x58\x06\x5d\x3d\x3f\x8f\x09\xea\x27\x9b\x0a\x0f\x47\x73\xea\x74\x37\x9e\xdc\xc4\x0f\x1b\x95\x3c\x45\x10\xa5\x79\x4b\xf4\xf5\x8d\x9b\x4d\xa6\x94\xa2\x1b\x90\x64\x62\x3f\x82\x12\xf6\x26\x8e\x1b\x09\x33\xd7\x21\xe5\x00\x36\x49\x10\x10\xb1\x2f\xf5\xf2\x7f\xbd\x8f\x36\x93\xdf\x1d\xb9\x73\x92\x04\x15\xec\xa1\x81\xe9\x70\x98\x0a\xd2\x2b\xd8\x03\x04\x1c\x93\x04\x96\xdc\xc2\x6a\x34\xa7\x40\x6f\x6d\x36\x8a\xe7\xfa\xea\x73\xd6\x7d\xe5\x76\x7a\xd9\x10\xcc\x59\xb3\xb9\x6c\x88\x6b\x49\xb7\x12\x8c\xc9\x7a\xed\x78\x55\x32\x2d\xed\x09\x52\x8a\x80\x2f\xb7\x0a\x88\x3f\x56\x00\xc7\x71\xbd\xb6\x8f\x57\x10\xa7\xa3\xd3\xa9\x24\x8c\xed\xfb\x47\x22\xe6\x2c\x9b\xb8\x1a\x73\x23\x67\x73\x26\x52\xbb\x03\x44\x71\xdf\x73\x61\xbe\x4f\xdf\xb2\x7d\xda\xc5\x6f\x12\x3a\x8b\xf9\x98\x4e\x14\x2f\x94\x8f\x69\x77\x00\x78\x53\xf2\x54\x60\xda\xba\xe1\x24\xbd\x73\x7e\xbc\x6c\x13\xd3\x2d\x4d\xec\x35\x34\xf1\xdd\xb3\x4d\xec\xee\x6d\x6d\x64\xb6\x45\x5e\xd8\x77\x5a\xc4\x05\x1e\x4f\xea\xfe\xc8\xb0\x30\x3a\x00\x64\x4c\xbb\xaf\xbb\x7c\x82\x52\x6c\x02\x9e\xc8\xa4\xbe\x4c\x5a\xc0\xbc\xc1\xfb\x00\xb2\xf0\xdb\x12\xde\xf6\xe4\x9b\xb2\xe3\xb7\xd1\x1e\x58\xa7\xa3\x4d\x8d\x68\x11\xb1\x11\x53\xdc\xaa\x61\xbb\xbd\x31\x06\xdc\x69\xd2\x30\x84\xac\x22\x61\x41\x85\x5e\x07\xe3\x80\x6c\xf7\x3b\x98\xa6\x84\x7c\x8f\xc5\x98\x63\xda\x8d\x0b\x1c\xb3\x5d\x9a\xbc\xfa\x2e\xd9\x2d\x7e\xff\xdd\x64\x44\x31\xef\x7e\x37\x64\x98\x5b\xc6\xf6\xf7\xe0\x65\x6d\x44\xbb\xdf\x0d\x29\x6c\xd1\xf9\xf3\xce\xee\x2a\xcc\x94\xa7\x8d\x17\x2f\x5e\xcd\xa8\x4c\x52\xd4\xe9\x6f\x2b\xb2\x22\xef\x08\x2d\x6e\xe1\x92\x23\x99\xe5\x73\xaa\xe9\xfb\xab\xfc\xae\x3c\x3e\x7c\x34\x9e\x63\x40\xc7\xc0\xfa\x4c\x85\x1a\x6c\x29\x90\x17\x69\xc6\x01\x83\xd0\x10\xd6\x67\xd2\x6d\xce\x6e\xd2\xfc\x4c\x27\xf2\xe7\xf8\x09\x30\xd9\xc7\x8c\x57\x25\x0c\xe4\xad\xd7\xa6\x71\x1a\x1c\xf0\x6c\xe0\xcb\xf8\xf5\x1f\x49\xf7\x8d\x23\xef\x47\xba\xc6\xa1\xd6\x20\x16\x3d\x50\x15\xa8\x33\x7e\x10\x37\x06\x7f\xba\xef\xe0\xa1\xeb\x06\x18\x57\x88\xe1\xa2\x97\xce\x04\xe1\xad\xda\xfc\x18\x2e\x22\xb2\x6c\xd2\xfa\xc4\x3a\x5f\x9c\xdb\x66\xde\x4b\xaf\xcc\xad\x59\x40\x1d\x4c\x35\x36\x52\xea\x2d\x35\xb5\xe8\x2c\x4e\x75\x7b\xc6\xab\x68\x89\x57\x71\x7d\x19\x92\x16\xc7\xa5\x89\xc5\x7f\xcf\xee\xc0\x30\xfb\x4c\xc1\x99\xa1\x97\x6c\x0f\x60\x8e\xdd\x16\xd8\xcf\xdf\x9a\x56\xf6\x73\x0d\x5a\xdc\xd7\x2e\x7e\x63\x34\x38\x63\x81\xd3\x71\xde\x1d\x4c\x92\x4e\x87\xc7\xe9\x38\x9f\x20\x81\x64\xca\xde\x04\x95\xf0\xf0\x7a\x92\x78\x7b\x6b\xe7\xe5\x49\xac\x0f\xa5\xb7\x58\x95\x02\x10\xfe\xe7\xbf\xc6\x56\xf9\x6a\xb0\xf1\x8f\x3b\x8b\xb7\x9e\x89\x9a\xb7\x3c\xb5\xff\x77\x06\x2a\xd2\x41\x7d\x4f\x7e\xdf\xd7\xa9\xb0\xcf\xe2\x9d\xbe\x8e\x99\x52\xfe\xcc\xf8\x56\x23\xf6\xad\xed\x7e\xdf\xd7\x41\xc8\x2a\x6d\xa8\x10\xc3\xc5\x94\xe4\x8d\x6a\xab\x6a\x83\x82\xca\xaa\x02\x7d\x66\x6f\xeb\x2d\xa6\xb5\x29\x82\x7d\x0c\x61\x97\x93\x56\xb0\xdb\xb4\x44\xc6\xf8\x95\x66\x38\xd7\xca\x59\xd6\x21\xd2\xf7\xbb\x83\x51\x6c\x95\x90\x18\x7a\x93\xa0\x9d\x7e\x32\x8c\x6d\xd6\x6d\xcb\x99\x24\xdf\xef\x0e\x3a\x9d\xb8\x18\x33\x79\x47\x00\xe7\x4b\x4f\x56\x45\x7c\x82\x42\x4f\x2f\xfe\x74\x28\xe9\x89\xce\x80\x9e\x20\x71\xa8\xb4\x2a\xf4\x0d\x60\x40\xbf\xd8\x98\x9a\x3f\x15\xf4\xb7\xd5\x0b\xc1\xf2\x6a\x13\x43\xcc\xc4\x60\x98\x98\x98\x86\x60\x31\xc8\x0f\xce\xe5\x11\x4d\x5c\x94\x34\x3d\xb5\x74\xe6\x22\x11\x59\x0f\x3d\x5b\x87\xb3\xfb\xa6\xa5\x1c\xd5\x0b\x94\x26\xa0\xf3\xa4\x0f\xb3\x57\xa2\x55\x8e\x59\x77\x6f\x82\x39\x92\x0f\xaf\x27\x36\x1c\xc4\xcb\x53\x71\x7d\x4b\x04\x10\x96\x27\xc5\x8c\xd5\x80\xad\x39\x27\x33\x1f\x62\xa1\x37\x89\x62\xe9\x4b\xb0\xf0\x8c\xa6\xcf\x48\x18\x77\x4d\x43\xa1\x51\x40\x02\x8a\x58\xa2\x0e\x69\x6a\xeb\x00\x31\x15\xf8\xe3\x37\x54\x37\x05\x85\x0d\x96\x3c\x15\x31\x43\xd4\x46\xa8\x58\x3e\xc7\xe2\xae\x08\x83\xc7\x06\xf6\xfc\xa6\xee\xba\xa7\x8d\xf7\x7a\x9a\x2e\xc8\x89\x7f\xdf\xd9\xd4\x12\x24\x01\x9c\x64\xab\x29\x09\x90\x67\x0f\x3f\x07\x39\x3b\x79\x88\xe6\x31\x47\x62\xcc\x27\x48\x24\x88\x6c\x82\xe6\x9e\x95\x3c\x95\xd3\x39\x91\x64\x5c\xc3\x04\xa1\x70\xf3\xa8\xca\xc6\x64\x12\x6c\xb0\xb4\x2e\x8b\xff\x85\xad\xa2\x54\x08\xb2\x58\x0a\x92\x45\x82\x45\xa6\x8d\x28\x2d\xa2\x54\xd3\x76\x45\x94\x46\x50\x63\x14\xb7\xbb\xa4\xdb\x4e\x22\x31\x4f\x45\x94\x31\x52\x16\x7f\x10\x11\xf9\x42\x4b\xd1\x4e\x5a\x56\x2e\xcf\xff\x69\xed\xcc\x18\x8f\xd2\x48\x6d\xd2\xe6\x46\x7d\x08\x50\x5b\x22\x3a\x4a\xbd\xf3\xad\xe3\x43\xb3\x64\x98\x6a\xe6\xbd\x7e\x7f\x16\x05\x68\x55\x43\x13\x0e\x7c\xfc\xb3\xb2\x09\xac\x22\x48\xbd\x3b\x6f\x8b\x7d\xc0\x84\xab\x45\xc6\x0d\x79\x27\x68\x67\x80\xe1\xa2\xf4\x57\x93\x4f\x12\x73\x69\xc4\x09\x9c\xc9\x86\xa2\xdd\x2e\x32\x77\x50\xb5\x7d\x77\xd1\x81\xb6\x24\x9d\xc5\xe0\x25\xd2\xdc\x4a\x03\xef\x26\x7c\x19\x18\x38\x61\x0e\x40\xf4\xa7\x8d\xb9\x40\x6a\x93\x61\xd4\x59\xf6\x93\xfa\xd8\xd9\x04\x55\xc7\x88\x0a\x79\x4c\x2a\xed\x03\xe1\xde\xed\xb6\x9c\xda\x91\x12\x9b\xd8\xb3\xbc\x08\xe5\x4b\xca\x1b\x81\xd0\x16\xd3\xfb\x3b\xca\x91\xb9\xf2\x21\xc1\x6d\x88\x1b\x97\x03\x4e\xdd\x7d\xc0\xdb\x40\x8f\x0d\x92\x15\xdb\xde\xad\x73\x16\x01\xe3\xaf\xaa\x02\xc9\xc3\x00\xbe\xfa\x93\x7d\x7f\xb2\x8b\x84\x6b\xc1\xb4\xa7\x20\xd4\x9f\xb4\x2c\x28\x57\x34\x94\xff\x0d\xa5\xde\xeb\x60\x82\x4a\x43\x76\xa6\xad\x0a\x53\x04\x97\xa3\x98\x63\x26\xeb\x56\x7a\x68\x96\x70\x31\x24\x68\xd9\xe9\xa4\x11\x50\x30\x02\xcb\xac\xc9\x38\x9d\x0c\x1b\xf8\x2a\x0c\xae\xb3\x01\xb2\x9d\x65\x09\x2a\xbe\xa7\xc6\xe3\x5d\xb1\x4b\x5b\xc4\xd3\x27\x5a\x25\x1e\x42\xd8\xdf\xcf\xdf\xae\xf6\xf3\x6e\x37\x21\xe3\x7c\xe2\xf5\x3d\xef\x3a\xf7\xca\x63\x8e\x04\x22\x1e\xd1\x7a\x63\xe5\x70\xb7\x1a\x9e\x6b\xf6\xbb\xe3\x11\x20\x81\x89\x9c\x0f\x8e\x89\x9c\x87\x02\x93\xf1\xde\x44\xd3\x53\x16\x43\x29\x46\x46\xc3\x78\xd8\x07\xd5\x6f\x83\xf0\xa6\xb8\x18\xb3\xdd\xc1\xa4\x55\x2a\x5b\x23\xea\xe2\x61\x18\x77\x18\x83\x7e\x62\x88\xb8\xb1\x06\xab\x5e\x0f\xaf\xc3\x15\x47\x60\x53\xbb\x27\xa1\x6a\x65\xe9\x93\x70\x6d\x11\x0d\xd7\x4f\x19\x2e\xba\x15\x67\xdb\x47\xdc\x22\x98\xc9\x1a\x04\x66\x63\x5f\x47\x23\x2e\x30\x1b\xef\x4d\x92\x11\xc5\xfd\x61\x29\x11\x0f\xed\x2b\x63\xbd\x8e\x39\xde\x01\x84\x04\xb9\x54\x33\x26\xed\x1c\xd5\x0d\x9c\xca\x21\x23\x3e\x81\xdd\xff\x80\xfb\xe8\x08\xf7\xd1\x19\xee\xa3\x4b\xdc\x47\x12\x7e\x1e\xe0\x3e\xba\xc3\x7d\x74\x8e\xfb\xe8\x02\xf7\xd1\x15\xee\xa3\xf7\xb8\x8f\x3e\xe2\x3e\xfa\x15\xf7\xd1\x09\xee\xa3\x43\xdc\x47\xa7\xb8\x8f\x3e\xe0\x3e\x3a\xc6\x7d\xf4\x15\xf7\xd1\x3b\xdc\x47\x9f\x70\x1f\xfd\xf8\xec\xbd\x6b\x0d\x2f\x14\x05\x75\x78\xf4\xee\xd3\x0f\x36\x18\xb5\xd6\x59\x31\x96\xe0\x81\xaf\x66\x95\x74\x19\xe8\xe1\x5c\x93\x7b\x52\x88\xf7\x69\x9e\xdf\xa4\xd3\xbb\x12\x3f\x91\x22\x1b\x8e\x27\x08\x1c\xee\x0d\xc7\x93\x8d\x91\x5e\xd3\x05\x31\xfc\xa1\x93\x2c\x88\x3d\x25\xbf\x94\xae\xc2\x74\x25\x18\x5f\x15\xb6\x47\x26\xe1\xb2\x12\xb4\x2a\x40\x01\x42\x4a\x77\xbd\x7e\xda\xd4\x23\x27\xfb\x79\x0c\xc3\x15\xf0\x44\x45\x79\x5d\xfb\x49\x78\x6b\xe6\xe1\xb6\xcc\x1e\x78\xed\x9b\xb1\xb0\xe2\x9d\x9c\x87\xb0\x36\x9d\xb8\x5e\xdf\xdb\x5c\x47\x45\x56\xcd\x73\x54\x64\x2e\x07\x44\x5e\xbc\x58\x15\x47\x5f\x96\x94\x93\xec\x4a\x4d\x99\xfa\xc6\x2b\xc9\xe0\x49\x46\xa9\xac\xfb\xa5\x0f\xd4\x2c\x1e\x15\x81\x40\xff\x6b\xb7\xab\x08\x28\x6e\xe7\x19\x6c\x85\xfc\x55\xe0\x4d\x4b\xc0\x7b\xd7\xa4\xc8\x24\x4d\xa5\x63\xf8\x54\x06\x79\x1d\xf0\xb8\xd7\x6b\xa6\xe3\x3a\x2d\x0d\xd7\x5b\x47\x78\xae\x76\x2e\x79\x4e\x99\x0b\x36\x95\xdf\xfd\x23\x6d\x21\x4c\x5c\xfc\x55\xc5\x30\x08\x8d\x06\xcc\x6e\xd6\x35\xed\x58\xaf\xcf\x66\x60\xa3\x98\xd8\x60\x18\x8a\x96\xd3\x3d\x8a\x93\x64\x18\x7b\x26\xb1\x9f\xba\xdd\x86\xd3\x60\x7c\x5c\x25\xe8\x9d\xc4\x03\x1a\xdb\x06\xb8\xbd\xac\xa0\x0e\xa0\x72\x7e\x69\xea\xbc\x16\x9c\xde\xde\x12\x1e\xb7\x61\xa0\x6d\x24\xb1\xd8\x24\xdc\x4a\x4a\x93\x1e\xd4\xc4\x48\xb8\x94\x67\xb6\x1a\x58\x98\x01\x28\xb2\x05\xb1\x7f\xb5\x12\xa7\xbb\x78\x76\xec\xd1\xf0\x30\xc7\xab\xc7\x25\xb1\x96\x08\xea\x58\x47\x92\x6c\x8f\x6e\x48\x94\x5a\x8e\x7a\x3b\x08\xfd\x52\x81\x02\x55\x04\x98\x6f\xab\x1e\x0c\x1d\x64\xef\x23\xa8\x20\x02\xf4\x33\xba\x21\xd3\x74\x25\x2f\x6f\x85\x76\x82\x33\x03\x8b\x77\x5a\xfd\x0f\x39\xba\xd9\x6c\xbb\xab\x80\xe6\x3e\xed\x90\xf5\xfa\x5b\xfb\x35\x9b\xfd\x1d\x1d\x53\x67\x60\x67\x00\x41\x64\x92\xd0\xfa\x86\xfb\xd6\x37\x9a\x27\x2b\x20\xa8\xcb\x4e\x1f\x71\x6b\xfe\x84\x06\x09\xa2\xbb\xbb\x80\xd1\xef\x14\xdf\xd0\xb7\xa9\x59\x1f\x8b\xa2\xfb\x5d\x82\x30\x9d\xab\xe0\xbc\x7c\x31\xe7\xe5\xef\xbc\xee\x03\x74\x5f\x42\x9c\xd8\xd8\x5b\xf1\xde\xaf\x2c\x3c\x93\x07\xff\x94\x36\x64\xad\x5e\x23\x19\x99\x91\x2a\x81\x9a\x3c\xdd\x75\xbb\x1e\x4d\x50\x45\x08\xb4\x30\x4a\xe1\x4a\xc5\xf7\xaf\x47\xc5\xee\xeb\x61\x3f\x41\x0c\xbf\xde\x67\x6f\x0b\x15\x7f\x6e\xcc\x76\x5f\xfb\xd8\x12\x0b\xfb\x61\xc8\x25\x5f\x7c\x02\x17\x3a\x9f\xf4\xa6\x20\xf9\x8c\x21\xc2\x12\x6f\x22\x12\x93\xa7\x73\xaf\x83\xa2\xde\x41\xee\x75\x50\x7c\x3f\x18\x89\xdd\x81\xec\x60\x81\x07\xfb\xc5\x5b\xb1\x5f\xc0\x6e\x29\x76\x07\x7e\x07\x8b\x89\x96\x7c\x56\x66\x97\x83\xfb\x58\x85\xb8\x52\x85\xb0\x52\x89\xa8\xad\xb0\xbb\xe5\x47\x96\x32\xd4\x2c\xf6\x70\xce\x95\xea\xb9\x01\x58\x71\x62\xc7\x14\x13\x1d\x4a\x7f\x67\x80\x56\xc1\x68\x21\xc8\xf9\x4d\x5e\xd5\x27\xbc\xb0\x9e\x1b\xfe\x29\x8d\xc3\x8d\xb3\x40\x63\x21\x09\x34\x1d\xaf\x16\x76\xc4\x99\x04\xac\xd5\x5d\x71\xf5\x2f\xdb\x15\xb2\xf9\x6f\xdf\x19\x95\xce\x26\x4f\xef\xff\xff\xb6\x3b\xfa\x66\x77\x58\x71\x65\x03\x97\xf5\xa3\xb9\xa7\xf2\x54\x10\xbe\x45\x2e\x89\xb8\xfa\xec\x97\xff\xd5\x02\x96\x9b\xbf\x97\x56\x21\xe3\xd7\x15\xf8\x02\xb5\xc7\x86\xcd\x25\xdb\x93\xe0\x56\x88\x3c\xf0\x99\x75\xe2\xe1\x17\xd7\x5b\x1b\xe5\x58\xc8\x46\x0b\x2c\x64\xa3\x14\x0b\xd9\x28\xc3\x62\xfc\x5a\x4e\xb7\x18\xbf\x91\xd3\xed\xb8\x41\xeb\x75\x8a\x56\x78\x0a\x21\xf0\x7d\x14\xd8\x45\x1e\x59\x25\x26\xa0\x8e\xea\xa6\xcc\x59\x8e\x1e\x87\x14\xb1\x04\x95\x86\xd5\x0d\x20\x52\xf5\x5f\x91\x35\x36\x90\x25\x54\x37\x5e\x75\x07\x13\xad\x7b\xbd\xea\xbe\x69\x05\xdf\xf2\xc9\x0e\xc6\x8f\x56\x0a\x62\x53\x31\xf5\xa2\x74\xc0\x29\x93\xf8\xd9\x34\x98\x94\xc3\x7f\xf6\xa4\x28\x6f\x14\xa9\xd9\x8c\xba\x37\x28\xd7\x73\xb4\x72\x13\x93\xff\x63\x13\xa3\xf4\x3a\x43\x04\x54\xc9\xa0\xbb\x0c\xcd\x71\xde\x7d\xd3\x5a\x8d\xe7\xf2\x56\x7e\x04\x12\xf5\x31\x41\x04\xaf\x40\x56\xa2\x1c\xcb\xe1\x2c\x9e\xe9\x7e\xe4\xdd\xef\x30\xc6\xcb\x64\x25\x67\x6b\x86\xa0\x1c\x75\xcd\x2c\xc2\x35\xc8\xbb\xff\x36\x09\x66\xde\x5c\xf6\x4b\xd4\x47\x33\x89\xe0\x01\x17\x71\x91\xa0\xa6\x4c\x39\xfa\x2e\xd9\xc8\x3d\x93\x9b\xa1\x71\x02\x88\x67\x9e\x5f\x79\xf4\x54\x1c\xae\x99\x42\x60\x35\x8d\xe0\xad\xdb\xa9\x45\x10\xad\xb0\xde\xd5\xb0\x85\x18\xab\x20\xc3\xb2\xfa\x79\x5a\xd6\xeb\x0e\x75\x7e\xd5\x20\xaa\x62\x13\x8d\x6b\xbb\x2e\x56\xb9\x5b\x1f\xba\x5d\x64\x2c\x8c\x0c\xa6\xde\x7a\x51\xe4\x3f\xf2\x7b\xfa\x41\x6e\x0b\xe8\x5e\x4c\x92\xe1\x4e\x6c\x8c\xbe\x24\xc2\xbf\x5e\xef\x10\x85\x7a\xc3\x93\xe2\x6e\x26\x9d\x8e\x4e\xd4\x9d\xd2\x16\x20\x21\xb4\xab\x1b\x0b\x54\xa1\xa1\x2c\xd3\xcc\xb9\xf3\xcd\x47\x5a\x86\x79\x08\x00\x57\x0f\xf2\x49\x4f\xcc\xb0\x4e\xee\xa2\x29\x5b\x15\x82\x70\x1d\x3a\xd1\xbc\x21\x35\xc3\xc3\x59\x70\x7c\xd1\x77\x68\x2f\x41\x01\x61\xa2\x83\xd0\x54\x48\x11\x7b\x41\xd5\x29\x19\xf0\x26\xde\xa8\x78\x2d\x3a\x9d\x1a\x73\x50\x0f\x63\x03\xde\x42\x15\x45\xb8\x4d\x8d\xbf\xd2\x05\xcd\xe2\x72\xbc\x6b\x2c\xea\xcc\x6b\x52\x64\x80\xe2\x92\x0c\x1c\x9c\xb1\x95\xa4\x41\x24\x61\xa4\xb1\x6d\x44\x25\xbe\x2d\xf8\xe3\x53\x61\xd9\xa9\x24\xb1\xae\x6a\x25\x16\x4d\x13\x3a\x8b\xa9\x44\xb3\x15\x1b\xd0\x0b\x50\x13\xf0\x82\xab\x8c\x60\x7d\x66\xcd\x15\x67\x0e\x00\x53\xd2\x9f\xe8\xef\x61\x95\x78\xc2\x48\xc3\x85\xae\x10\x8f\xce\x01\x78\xb5\x4a\xeb\x15\xc5\x52\x86\xa0\xdd\x2a\xd1\x1c\x9f\x77\x00\xea\x48\x6a\x09\x42\x6c\x5c\x63\x44\x9e\xcb\x19\x23\x19\xaf\xb4\x34\x72\x98\xbd\x2a\x33\xf4\xd9\xef\xbe\x00\x28\xae\x4a\x92\x38\x14\xab\xcb\xa0\x00\xfb\xd2\xd2\x6e\x66\xe4\xdc\x66\xff\xc3\x3a\xc6\x09\x2a\x12\xb9\x7c\xce\x8e\xad\x2a\x52\xa2\xc9\x53\x11\x53\xb7\xa6\x50\x58\xd2\xb7\x66\x21\xb6\x94\x6e\xc8\x0f\x3d\x0d\xe0\x59\xfd\x54\x3b\x16\x48\xe5\xb2\xb0\xfa\x49\x16\x52\xbe\xcc\xa6\x52\x73\x53\x41\x63\x9a\x44\x9c\xcd\xd8\x97\xf1\x62\x5c\xbd\xb1\x0a\x94\xe2\x87\x6e\xd7\x70\xba\x1b\x40\x6e\x12\xa4\x01\xbd\x2c\x11\x34\xd5\x34\x35\x03\x68\xbc\x48\x5a\x9e\x70\x33\xd3\x0e\x90\x1d\x7e\xd2\x74\x47\x95\xa8\x8f\x1a\x6a\x7f\xe1\xa2\x4a\xbd\xd5\x70\x30\xfb\x19\x9b\xdf\x86\x61\xee\x0b\xad\xe5\x14\xdc\xb8\x62\xe2\x87\x63\x6e\xea\xb1\xd8\x1d\xa0\xef\x12\x00\x08\xe2\x85\x7b\x15\xed\xf4\x2d\xcf\x08\x7a\xac\xcf\xe1\x96\xdd\xfe\x22\x2f\x04\x9c\xf2\x3d\xe3\x99\xa3\x18\xd3\x89\x3a\xcc\xfa\x58\x85\x0c\xbf\xda\x7e\x7d\x89\xab\xea\xc3\x9e\xe0\xdc\x85\xe0\x2d\x68\xc5\x7c\x85\x53\xa3\x3a\xd2\x98\x2f\xe0\x31\x87\x11\x2d\xcd\x85\x24\x70\xdf\x73\x4e\x6d\x15\x10\x7c\xde\xa9\x11\x5f\x55\x76\xf9\xbe\x78\xcb\xd5\xfa\x82\xd8\x6b\x2c\x26\xdf\xd3\x04\x34\xd6\x5a\x46\xc5\x4c\x74\xdf\xc0\xcc\x32\x89\xc9\x1a\x61\x83\x4c\xde\x93\x98\xa5\x7c\x78\x2d\xe9\x1b\xf9\x60\x70\xb0\x0a\xd0\x73\x14\x4c\x01\xf4\x0b\xd3\xf4\xed\x86\x98\xad\xd2\xb7\x2e\x21\x9a\x8f\x8b\x5a\xa6\xa6\xbd\x53\x5f\xab\xed\x48\xd7\xf6\xaa\x6b\x65\xfc\x6a\x7d\xc7\x6c\x95\x9d\xb0\x05\x80\x99\xca\x9b\x8a\x24\xdb\x19\xf5\xaa\x2f\x2f\x0c\x52\x82\xa3\x9d\x66\x70\xf4\x54\xdf\x1a\x4a\xbc\xd2\xb4\xf2\x88\xe3\x8f\xa9\x98\xf7\x16\xe9\x97\xb8\x8f\xc8\xae\x08\xc0\x8e\xeb\x58\xa5\xac\xa7\x21\xfb\x0c\xcb\xdc\x5e\x93\xdb\xd1\xbb\xfb\x9a\x83\xc5\x0a\xf7\xd8\x5c\xa3\xc4\x4e\x72\x00\xf9\x9f\x83\xe8\xba\xde\xe6\x43\x68\x70\x8c\xba\x30\x21\xd1\x0c\xdf\x6a\xd6\x00\x5c\x1e\x6b\xaa\xac\x3e\xab\xe4\x8b\x30\xfc\x70\xc3\x9d\x07\x5c\xa9\xc5\x47\xca\xd5\xcb\xb0\xe1\x56\xeb\x3f\x6b\x55\x6c\x10\xd1\x2d\x96\xc5\x4f\x4a\xfa\x73\x84\x48\x91\x0d\xcf\x10\x00\xc4\x72\xa8\x53\x2f\x21\xb5\xbf\x41\xba\xad\x72\xf8\xa4\x1a\xc9\x86\xc7\x68\xca\x16\xcb\x9c\xc8\xe7\xaf\x1b\x24\x71\xe2\x2f\x48\x62\x34\xc3\x03\x04\xfc\x9e\xe1\x1d\x32\x73\x30\x3c\x47\x55\x26\xd4\xf0\x02\x59\xae\xd0\xf0\x0a\xf9\x7c\x97\xe1\x7b\xe4\x29\x75\x7f\x44\x70\x2b\x0f\x7f\x45\x86\xe8\x1f\x9e\x20\x43\xea\x0e\x0f\x91\x4f\x41\x0d\x4f\xf5\xeb\xf0\x03\xca\x19\x5b\x96\xc3\x27\xc1\x44\x9a\x0f\xdf\xa1\x82\x94\xb2\xa7\x9f\x36\x1b\xeb\x90\xc5\x07\x6d\xcf\x9a\x5d\x07\x40\xd0\xd9\x5d\xff\xd8\x53\x12\xa5\x39\xfa\xb1\x66\x25\xa0\x53\x24\x16\xa2\xad\x1c\x7e\xc2\x3f\xb6\x9c\xed\xc0\x4f\xda\xa4\x21\x4b\x6f\x77\x21\xbc\xef\xb7\x99\xca\xfd\x03\xf6\x0b\x0d\xd6\x0a\x2f\xc4\xea\xbd\xbe\x27\x5c\xd0\xa9\xd6\x61\xe5\x4d\x2e\xb1\x42\x1f\x06\x06\x4d\x6a\xf6\x1e\xd2\x36\x8c\x86\xe8\x6f\x77\xe4\xf1\x6f\x11\x2d\x23\x4e\x7e\x5b\xc9\x83\xde\x0e\xe2\x38\xd9\x76\xc1\x41\x51\x9a\x65\x3a\xc0\x2b\xf8\x20\xc3\xf2\xa6\xa5\xb3\xb8\x26\x29\xe4\x09\xe4\x3d\xca\x6e\x49\xcc\x90\x2a\xc7\x13\xcf\x77\xee\xbd\x8d\xde\x6e\x59\xfb\x69\xb7\xdb\x54\x0a\x02\xb3\x2b\x97\x5c\x4d\x2d\x15\x5e\x19\x55\xa2\x48\x10\xf3\x5a\x52\xad\x14\xcd\xad\xe8\x12\xb2\x0d\x50\xa7\xa9\x4c\xa7\xcc\x53\x36\xcc\x29\xcc\x0c\xcc\x85\x75\x9b\xe6\x97\x24\x69\x53\x58\x45\x3b\x93\xbd\x87\x34\xbf\xd3\xbe\x39\x5c\x21\xc1\x96\x25\xe3\xa2\x21\x70\x4a\x3a\x55\x5e\x15\xb4\xbd\xad\xd9\x3b\xc6\x17\xfe\xb3\xdb\x26\xd4\xf8\x2c\x6d\x7c\x4e\xcd\x38\x5b\xa6\x62\xee\xbf\x73\x52\xca\xaa\x21\xe5\xe5\x2d\xb6\x75\x73\x2d\x68\x59\xd2\xe2\x36\xba\x23\x8f\x9e\xeb\x6c\x09\x44\xfb\x6b\xaf\x5b\xa8\xc0\xfd\xfd\xe2\x2d\x07\x4e\x2c\x9d\xc5\x5a\x6d\x68\x5c\x4c\x92\xde\x1d\x79\x0c\xd0\xd0\x80\xf9\xa8\x47\xc5\xbb\x8a\x74\x18\xf3\x09\x7e\xa2\xd9\x97\x21\x47\x12\x86\x10\x74\x9f\xe6\x96\x06\x50\x7e\xe1\x67\xb9\xf2\x08\x6f\x54\x2c\x36\x8d\x6b\x5d\x61\xc2\xab\x3b\x6c\x4e\xa6\x77\xf2\x5d\x76\xc9\x0d\x06\x86\xb2\x65\x1c\x62\x5c\x00\x0e\xdd\xa3\xd9\x17\x3d\x80\x96\x08\x3a\x2d\x7b\x0c\x9f\x11\xe9\x49\x34\x40\xde\x16\x81\x17\xb5\x34\xbf\xab\xef\x04\x1d\x22\xc5\x63\x79\xf7\x0d\x62\x5f\xf5\xe3\xa3\xae\xab\xb1\x98\xb4\xb8\x6c\x40\x73\x90\xee\x69\x49\x45\xcc\x51\xbb\x9d\x6c\xdc\xde\xf2\x56\x1e\x55\x77\x25\x8c\xbe\x2e\x01\x25\x7a\x7d\x1a\x78\x0e\xd3\xc7\x69\x4e\xa2\x8c\x08\x70\x95\x33\x8c\xda\x5d\xd1\x6d\x47\x6f\x77\xe5\x03\x9c\x63\x89\xe4\x38\xa5\xf7\xe7\x9c\x38\x69\xca\x64\x4c\xc6\x7c\x32\xf9\x87\x5a\x84\x7e\xba\xe6\x37\x86\xd6\x31\xc1\x66\xbc\x59\x21\x16\x53\x95\x87\xa2\xa2\x75\x5e\xe0\xa6\x56\xb4\xe7\xb9\xca\x4c\xca\xe2\xe1\x6d\x51\x74\xb1\xe9\x0f\x98\xf5\xd8\xae\x17\xe0\xab\xda\x9f\x6f\xe8\x58\x0d\xf5\xf5\x5d\x8c\x98\xb3\xec\xf5\xd2\x24\xa9\x35\xb4\x89\x2d\x47\x54\xf4\x0d\xae\xa8\xa7\x97\xbc\x15\xfb\x44\x3b\x32\x1c\x93\x49\x4f\x1e\x0f\x2c\x29\x34\xbf\x2f\x30\x2f\xdb\xc5\xc3\x41\x1c\x70\x18\x34\xc5\x5e\x37\xa0\x75\x6e\x82\xbe\xc9\x93\xb0\x6f\x41\xbd\xe1\x22\xf5\xd7\x5c\x31\x6f\x94\xc6\x13\xee\xfb\xba\xa0\x63\x36\x51\x06\x00\xb2\x73\xc9\x94\x15\x82\x16\x2b\xe2\x92\xf0\x4e\xdf\x84\x1e\x64\x09\x12\x18\xe3\x14\x8e\xa8\x22\x72\x74\xcb\xff\x0f\x33\x8b\xba\x2a\xe7\x27\xc5\x94\x2d\x68\x71\x1b\x6b\x1d\xe4\xc8\x8b\x27\xa4\x33\x57\x96\xc3\x2f\xf5\x9c\x47\x08\x35\x17\xcf\x86\x11\x02\x5f\x64\x1a\xbc\x41\xff\xd7\x6b\x61\x5d\xdf\x3f\x7b\x7f\x54\x7c\x9d\xa1\x02\xbb\x63\xf2\xb6\x70\xfe\xce\xd4\xf4\xab\xd3\xd2\x12\x31\x95\xb3\x81\xc0\xc7\xa6\xd5\x27\x2e\xbe\xed\xb6\x68\x02\xfd\x8d\x7e\x80\xc6\x5e\xb1\x6e\x77\x82\xfb\x6b\x52\x99\xc0\xd0\x0f\x90\xf1\xc2\x03\xe0\x68\xbc\xbb\xeb\x15\xd7\x4e\x8d\x34\x0a\xe6\x5b\x8f\xfe\xef\xa1\x61\x0f\x3c\x5d\x9e\xa6\x82\xde\x93\xcb\xd5\x92\xd4\xcc\x74\x20\x8c\xbe\x17\xbb\x9e\x1a\xf5\x79\xcf\x2d\x42\xf2\xe4\xa2\x73\xd9\x61\xe3\xd0\x53\x95\x37\x21\xe8\xc9\xba\x0d\x65\x7c\xa8\x7b\xc3\x11\x29\x56\x0b\x8d\x82\xef\x0c\xd0\x03\xa7\x42\x3d\xf7\xd1\x94\x15\x33\x7a\xbb\xd2\xdf\xfa\x9b\x8d\xdc\xad\x4a\x2b\x9f\x27\x48\x40\x50\x08\x39\xe5\x53\x49\x60\xbc\x4f\xf3\xfc\x7d\x08\xb1\x93\xa7\xbe\x8a\x07\xec\x85\x92\xc0\xa1\x96\x77\xbf\x45\xb6\x76\x5d\x93\x6a\x5c\x79\xfe\xe0\x2f\x0c\x84\xbc\xd4\x75\xa7\x08\x24\x34\xf3\x13\x5c\x0c\xdf\x92\xec\x8a\x2c\x24\xc1\x45\x3e\x40\xf8\xd1\xbc\xd6\x4f\x79\x1d\xaf\xd7\xb1\xc0\x44\x39\x14\x8e\xfb\x89\x73\x99\xd6\xe3\xe9\x03\x16\xe0\x2b\xc6\xa7\xb7\x6a\x4c\x26\xd5\xbc\xe8\x74\x58\xb0\x26\x22\xd1\xee\x50\x39\x7c\x41\x3c\x74\xc6\xa6\xbc\xec\x5d\xcd\x69\xe9\x22\x49\x66\xe0\x3f\x6e\xc9\xca\x92\xde\xe4\xe4\xbd\x9b\x8a\x0b\x28\x88\x4b\x79\xb1\xc3\x4c\x42\x98\xbb\xd5\x54\xac\x24\xde\x5a\x73\x4b\xd5\x77\x5d\xae\x6f\xc1\xba\x0d\xae\x42\xa3\x28\xe6\x1a\x0b\xb7\xfc\x78\xae\xf4\xd5\x7a\xde\xa2\xb4\x04\xbe\x20\xb3\x1c\x16\xd3\xa4\xc6\xd4\x49\x18\x91\xe5\xc5\x4b\xc4\xbe\x49\x88\x6c\xc3\x1e\x5b\x47\xc7\xae\xb7\xc7\x8c\x9f\xcd\x80\x6e\x14\x8c\x2b\xd3\xf6\xea\x9a\x19\xf1\x05\xe8\xb3\xb6\x57\xd6\x32\xde\xe2\xee\x2a\x0a\xdf\x7a\xad\x45\x56\x63\xf5\xae\x03\xd0\x32\x3e\x81\x43\x18\xba\x16\x21\xc9\x7a\x1d\x57\x37\x86\xc2\x42\x35\xa2\xd5\x44\x24\x58\x34\x72\xa5\x3c\xb3\x06\xae\xeb\x7c\x14\x5c\x59\xe9\x1a\x13\x0d\xbd\xd3\xfe\x84\x76\x07\x49\xab\x7d\x66\xbc\x1f\xca\x6d\x42\xfc\x99\x06\xb9\x44\x90\xa2\x5d\xff\xca\xbe\x7c\x4c\x97\x50\x66\xbd\x6e\x5f\x12\x55\x3c\x09\xbc\xa6\xcc\x38\x5b\xc4\x5c\x65\x36\xde\x42\x4a\x5d\xe4\xd5\x7f\xc7\xa3\xe1\x27\xba\x3e\x49\x0a\x11\x8f\x86\x7f\x5a\x0f\xbe\x5b\xbf\xde\x4b\xe2\xd1\xf0\x7d\x9e\x2e\x96\x24\x4b\x46\x50\xc9\xef\x5e\x29\x03\x5d\x9e\x84\x23\xdd\x48\xe8\x95\x6c\xb7\x53\xff\xde\x5e\x25\x23\x13\x75\x6f\x33\xac\xc4\xea\x23\x63\xd1\xed\x4e\x36\x9b\x56\xa3\x3a\xd5\x49\x71\x9f\xe6\x34\x33\x36\x12\x91\x60\x91\x0e\x20\x1c\x15\xac\xd8\xa5\x9a\xb3\x10\x19\x89\x4d\xef\xf3\xe7\xe2\xa4\x88\x18\xcf\x08\xd7\x1e\x14\x4d\x1e\x04\x25\x52\x39\x9e\x48\x9d\x9d\x52\xe9\xcd\xcd\xd3\x7b\x12\xa5\x51\x6d\x7f\xc4\x89\xb6\xb0\xe8\xb5\x0d\x5f\x5c\x02\x88\x86\x7c\x89\x72\x35\xa5\x14\x3b\xb5\xbe\xa5\x30\x1b\x40\x39\x92\x56\x7b\xe0\x6c\x86\xec\xc6\xb8\x0d\xd3\x0b\x5c\x73\x80\xa9\xcf\x57\xa7\xd3\xa0\x8a\x5e\x3b\x7b\xc8\xda\x59\xb5\x7c\xdb\xf9\xba\x27\x53\xd1\xe0\xc9\x54\x52\x0c\xad\xa2\xe7\xee\x09\xec\xbf\xac\xd7\x3b\x03\x08\x70\xe6\x00\xae\xc4\x8e\xda\xb0\x80\x6d\x5a\x44\x05\xc4\xea\x31\xc0\x19\xef\xf4\x13\xb4\xed\xba\x2c\x00\x6d\x28\x7c\x0b\xff\xd4\x37\xf5\xde\xf8\x06\xe5\xce\xc2\xbe\x36\x37\xa2\xd3\x31\xfc\xd5\xf5\xba\x61\x7e\xc4\x48\x0c\x49\x60\x4e\x2e\x2b\xd3\x17\x8e\x24\x58\xbe\xb7\x44\x02\x98\xff\xda\x37\x8f\x04\xf3\xd4\x7b\x12\x4d\x84\x59\xb5\x9e\x09\x26\xe3\xc2\xea\xac\xf0\x8d\x8f\x58\xbc\x02\xd3\xc7\xd0\x5f\x85\x66\x7f\xb4\x51\xfb\xff\xaa\x3c\xbb\xb4\x10\x84\x17\x69\x5e\xbe\x22\xc5\x3d\xe5\xac\x50\x5e\x48\xda\x05\xcb\xc8\xee\x42\x23\x14\x0d\xb9\x57\x82\xe6\x65\xe3\x17\x89\xc4\xa6\x14\x5c\x65\x98\xaf\x14\x76\x87\xac\x19\x1c\x3e\x34\x16\x5b\x10\x91\x6e\xfd\x90\xbb\x2f\xd3\xb4\x48\xf9\xe3\xee\x8c\xa4\x62\xc5\x89\xd7\x85\x8c\xdc\xac\x6e\xdb\x28\xf0\xd5\xd1\xdc\xbd\x92\xf9\x83\x92\xfd\xe5\x2c\xcf\xfd\xfc\x2e\xed\x55\x4e\x6f\xbc\xd7\xeb\x05\xfd\x42\xbd\x01\x68\x20\xec\xde\x09\xbf\xa7\x53\xaf\x76\xbd\x63\x2a\xef\xaf\xa6\x6c\xb1\x4c\x9b\x93\x57\x82\x64\x8d\x3d\xd7\x11\x0e\x1b\xbf\x69\x27\x58\xc6\x25\xc9\xab\x7b\xc2\xcb\x6d\x33\x7d\x4f\xc9\x43\xf3\xd2\x71\xb6\x12\xc1\x70\xfc\xed\xf1\x45\x90\x42\xd6\xb9\xab\x23\x86\xb9\x5c\x44\x42\x49\xf7\xca\x57\x45\xce\xd8\xb2\xb9\x16\x99\x75\x17\x02\x78\x6f\x6b\x88\x3d\x04\x4b\x27\x2f\x6d\x3a\xad\xec\x1b\x2f\xf1\x95\x32\x1d\x2e\x77\xb5\xcb\x92\xe6\xa2\xaf\x0c\x68\xf6\x7a\x5d\xdc\xd2\xa2\xf6\xde\x90\x71\xc9\xf2\xc7\x19\xcd\xf3\x60\xaf\x2d\x39\x99\xa6\x82\x64\x0d\x1b\x71\x6a\xdc\x03\xbd\x12\x1a\xdf\xdb\x65\x45\xfe\x58\x75\x10\x63\x4c\x03\x41\xa8\xb4\x42\x39\x9a\xa2\x19\xca\xd0\x1c\x2d\xd1\x02\xdd\xa3\x47\x74\x8b\x6e\xd0\x35\x7a\x40\x47\xe8\x0c\x5d\xa2\x2f\xe8\x00\xdd\xa1\x73\x74\x81\xae\xd0\x7b\xf4\x11\xfd\x8a\x4e\xd0\x21\x3a\x45\x1f\xfe\x57\x18\xb5\xc7\xf5\x7b\x80\x4b\xd0\x2b\xe4\x0d\x43\x17\x00\x4f\x7a\x47\x72\xb8\x9d\xce\x96\x0f\xeb\xf5\xd3\xa6\x75\xdc\xa3\xe5\xa9\x09\xc7\x21\xc1\xf5\xf1\x33\x3e\x44\xda\x50\xae\xbd\xd9\x02\xb6\x8f\x51\xfb\xe8\xf4\xa7\x36\x7a\xba\x25\x62\x08\x7a\x34\x47\xa7\x3f\x85\x54\xc5\x66\x1b\xc8\x3f\x46\xed\x9c\xb1\xbb\xd5\xd2\x2f\xfe\x01\x52\xc0\x8f\x39\x68\x23\xea\xf7\x6a\x8d\xa7\xbd\xa3\x8f\xef\x8e\x2e\xae\x8f\xfe\xf3\xea\xe8\xf4\xf0\xfa\xfc\xe2\xec\xea\xec\xea\x97\xf3\xa3\xcb\x4e\x67\x7b\x47\xab\x79\xdb\xe8\x29\xa4\x7f\x9a\xb9\xfe\xbc\x77\x74\xfa\x53\xaf\x56\x5a\x92\x15\xc7\xb2\xcb\x67\xf2\x70\xe0\x0b\xfb\x88\x8e\x65\xc7\x4d\x6a\xe9\x52\x0f\xdc\xde\xc7\x57\x66\x85\xc3\x74\x2b\xd7\xfa\x68\xbf\x6f\x1d\xcf\x85\x3d\x5c\x4f\xcd\x1d\x7f\x6f\xea\xd8\x3c\xb7\x06\x87\x2a\xcf\x8b\xb5\x1d\xf7\x4c\x16\x35\xf2\x23\x38\x9b\xf8\x57\x6f\x20\x2a\xc9\x8e\xe1\xc4\xfb\xa4\x5d\x83\x1f\xea\x07\x74\xdc\x5b\x10\x7e\x4b\xf0\xa1\xfa\x87\x99\x2c\x00\x7d\x53\xde\xb2\x83\x57\x74\xdc\xfb\xe1\xd3\xc9\xe1\xf5\x5f\x8e\x7e\xc1\xd4\x3e\xca\x32\x2b\x9a\x1d\x33\x2e\xb3\xab\x27\x74\xdc\xa3\x45\x09\x2e\xb0\xa9\x79\x92\x6d\xa5\x77\x44\x79\xb1\xa4\xee\x19\x1d\xf7\xa6\x69\x71\xa2\x0c\xb1\xa9\x7b\x96\xe7\x81\x3f\xda\x74\xfb\x8c\x8e\x81\x6e\xc7\x14\xfe\xd0\x71\x6f\xa5\x7a\xba\x52\x3d\x7c\x6f\xee\x58\xcc\xdc\x33\x3a\xd6\x2e\x12\xf9\x23\x66\xf6\x51\xcd\x07\xe1\x02\x4f\xf5\x83\xac\x3b\xe5\x05\x9e\xc2\x1f\x3a\xee\xc1\xcd\x89\xa7\xea\x1f\xde\x35\x74\x83\x34\xfd\xdc\xf2\xd2\x8f\x57\xc5\xd4\xff\x26\xdf\xd1\x71\x8f\xaf\x8a\x93\xe2\x50\x57\xe6\x5e\xe4\x62\x81\xe5\xf8\x81\xb7\x46\x2a\xdb\x13\xd7\x3e\x1d\x0f\x75\x55\x94\x15\x3f\xca\xcb\x81\xf0\xe1\xb4\xb7\xfd\x23\x32\x9f\x7e\x4e\x79\x43\x01\x2f\x15\xd1\xf2\xbd\xbe\x54\x87\xab\x9e\x7b\xd9\xa8\xd5\xd3\x68\x09\x4e\xbd\x17\x79\xa6\x56\x37\xe5\x94\xd3\x1b\x82\x53\xf7\x8c\x8e\x7b\x27\x21\x22\x83\x9f\x5c\xa9\x61\x50\x85\x2d\x34\xf4\x2b\x58\x15\x7e\xba\xf7\x86\x80\x25\x3a\x4c\x15\x6b\x74\xa3\xe6\x12\xdf\xf5\xae\xf5\xe5\x76\xb1\x2a\x54\x5a\xcf\x61\x37\xf8\xce\x7b\x31\x5f\xc1\xf4\xe9\x4e\xfd\x9b\x34\x5a\x64\x32\x89\x16\x99\x4e\xd1\x7a\x95\x77\xfa\x41\xa7\x5a\x25\xde\x3b\xfb\xa8\xbf\x10\xa8\x80\xd8\xf2\xf3\xb4\xbc\xd4\x52\x53\xa3\xe5\x71\xd7\x90\xa8\x73\x83\xae\xd9\x1d\xfc\xe9\x14\xa5\xec\x74\xa7\xfe\x75\x1a\x38\xd3\xbd\x53\x62\x68\x95\xc2\x54\x5f\x98\xeb\x87\x35\x9e\xb8\xb3\x8f\x95\x2f\x67\xaa\x8c\xff\xaa\x73\x58\xbd\xed\x3b\xfb\x18\xcc\x86\x1d\x87\xff\xba\x0d\x90\xc9\x72\xc8\x04\xe7\xb8\x58\x15\x1f\x00\xdd\x01\x58\x76\x27\x41\xf3\xfb\xe0\x4b\xf5\x42\x81\x0b\xf6\x2b\x5e\xd9\xd5\x35\x7b\x52\x52\xc7\xc7\x3d\x83\x03\xe2\xaf\xe8\xb8\x77\x9d\x11\x15\x1e\x86\x71\xbc\xea\x15\xc0\xc6\x3b\x24\xe5\xf4\x90\x4c\x19\xd0\x7d\x32\x8f\x80\x38\x27\x19\x5e\xf5\xf4\x13\xfa\xda\x4b\x73\x9a\x96\x78\xa5\xfe\x01\xfa\x4c\xe7\xe4\x18\x6a\x91\x1d\x94\x6f\x19\x84\x9c\x50\x80\xcc\x74\xc1\x46\x44\x5a\xd5\x92\xb6\x43\xf5\xeb\x92\x08\x93\xdb\x76\x6c\x2b\x6c\x5f\xc9\x6b\x0a\x58\x57\xd4\x0d\x43\x81\xf9\xeb\x86\x2f\xb8\x31\x3f\xc0\x74\x91\xe2\x12\xfe\xd4\xdd\xa8\x86\xa6\x9e\x7f\xa6\x62\xae\x2f\x1b\x95\xec\x25\xc8\x86\x24\xd9\x9b\x8a\x39\x2c\x82\x7a\x54\x37\xa9\x6a\x4d\x41\xe5\x4b\x78\x55\x0f\xe8\xb8\x77\x7c\x74\x70\xf5\xe9\xe2\xe8\x12\xc7\x7d\x64\xae\x96\x24\x7e\xa2\xe5\x51\x21\x97\x36\x1b\xe6\x3d\xfb\xbc\x41\xb9\xcd\x0f\x03\x83\x09\xc7\xb4\x07\xff\xe8\xb8\xc7\x0a\xbc\xea\x31\x79\x20\xd2\x0c\xdc\x3d\xcb\x1b\x48\x2e\x97\x7b\x93\xdb\x13\x3c\x51\x7b\x9f\xc3\x04\xe8\x72\x91\x1d\xdd\x4b\x08\xb6\x72\xcf\xe8\x58\x9e\x46\x93\x4b\xee\x02\xff\x15\x01\x4e\xc6\x0a\x82\x57\xfa\x01\x52\x14\xd7\x6e\x65\x9e\x20\xed\x5d\x9e\x16\x77\x90\x06\x4f\x90\x76\xae\x42\x41\x40\xaa\x7e\x46\xc7\xbd\x82\x09\x3a\x7b\x34\x9b\xe2\xfd\x3c\x2d\x6e\x65\xfd\x4d\xc9\xe8\x58\x81\xa7\x30\x55\xf6\xb2\x29\x19\x1d\x4b\xc0\x53\xcf\x5b\x4f\x94\x9b\x1c\x9e\x74\x3a\x85\x7c\xd5\x24\x74\xdc\xb3\xc6\xa5\x4f\xe1\x56\x1e\xee\xf4\xd1\x3c\x2d\xcd\xeb\xc1\x74\x4a\xca\x92\xf1\x52\xa2\xc9\x70\x2b\xfa\x99\xf1\xaa\x92\x00\x39\x4a\xc1\x99\xfa\x04\x4f\xe8\xb8\x97\xd3\x1b\x9e\x72\xd5\x17\xfb\xac\xf6\x68\xd0\xcf\xe0\x5d\xed\xc5\xe0\x7b\x59\xf9\x4e\xbe\x2c\x53\x3b\x05\x2a\x4b\x35\x49\x6d\x2e\xe3\x5d\x51\x6d\x2e\xf3\x66\x37\x97\xf7\x39\x4c\x90\xa5\x25\xec\x50\x1e\xec\x0c\x24\x51\x6f\x72\x03\xbb\x72\xcc\x95\x00\xea\x18\xaf\xd4\x3f\x3a\xee\x7d\xd4\xef\xf0\xbf\x1d\x80\xb0\x42\x93\x90\x00\x32\xce\x01\xbb\x55\x49\x80\x9c\x9f\x03\x62\xab\x13\xbe\x19\xdf\x17\xa4\x54\xc4\x2c\x54\x3a\xed\xd1\xf2\x4a\xa5\x40\x9d\x53\xd0\x05\xd3\x09\xd5\x3a\x8f\x7b\xd7\xef\xdc\x3d\x3b\xb3\x68\xcb\x69\xef\xc3\xd9\x0f\x3f\x1c\x5d\x74\x3a\xf1\x71\xef\x03\x03\x1d\xcf\xcc\x7c\x95\xc5\x0e\xf0\x75\xef\x00\x1d\xf7\x34\x85\xf3\x94\xb3\xe9\x70\xd1\xcb\xd9\x14\x3d\x0c\x17\xbd\x07\x94\xa5\xe5\x9c\x70\xfa\x95\x0c\x17\x3d\xfb\x8c\x32\x32\x4d\x17\x24\xd7\xc9\xf6\x05\x79\xa9\x2e\x0d\x00\xe1\xec\x51\xa6\xe9\x47\xb4\x2a\x32\xc2\xcb\x29\xe3\x32\xa7\x7b\x41\xd3\x74\x49\x45\x6a\x6b\x30\x2f\x72\x33\xab\x59\xc3\xd7\xfa\x41\x8e\xd8\x20\x8c\xe7\x9c\x7d\x79\x54\x0b\x77\xdd\xab\x27\x02\x34\x33\x28\x67\x90\xb7\x21\x15\xa9\xeb\x2c\xe5\x04\x5f\x9b\x27\x48\x5b\x3e\x42\xc2\x52\xc1\x99\xa3\xdf\x56\x69\x8e\xaf\xcd\x93\xbe\x09\x8e\x79\xba\x20\x0f\x8c\xdf\x29\x39\xc7\x75\xaf\x96\x06\x38\xdc\xaf\x41\x0c\x9a\xe4\x69\x63\x53\x7b\x9a\x1b\x83\xef\x75\x82\xfb\xe2\x38\x3a\x78\xee\x3e\x2a\xb4\xfd\xba\x67\x50\xf6\xf7\xd0\x63\xe0\x26\x5e\x7b\x2f\x40\x7d\x58\x1e\xe5\xb5\xf7\x62\xea\x80\x19\x30\x15\xc1\x8b\x9d\x73\xf3\xc9\x7b\x93\xa5\xa6\x1e\x76\x2b\x0b\xfa\xef\xd0\x13\x4e\xec\x9a\xb9\x17\x74\xdc\x53\xa2\x3d\xd3\x73\xef\x0d\x4a\x2d\x1f\x6d\xef\xd5\xa3\x3c\x94\x2b\x60\x90\x06\x43\xa8\xa5\xb9\x7c\xa6\x6a\xff\x15\x1d\xf7\x94\xa7\x4b\xd5\xcf\x4b\xc5\x11\xc2\xd7\x4d\xa9\x72\xb6\xe4\xad\x44\x32\x39\x55\xea\x09\x1d\xf7\xb4\xa7\xd9\x60\x07\xd5\xd2\x60\xd6\xe4\x2a\xea\x6e\xba\x17\x79\x45\x03\xcb\x1a\x5f\xeb\x07\xd8\x49\xa6\xb3\xfa\xa9\x71\xa7\xb3\xe2\x03\x4b\x33\x7c\xa5\x1f\x14\x1a\x28\x9f\x7e\x64\xec\xae\xc4\x57\xc1\xab\x26\xb6\xec\x5e\x71\x14\x8c\x4b\x56\xdd\x5f\x7a\xdf\x2e\xed\xc6\x73\x69\xd7\xc1\x50\xaf\x83\x41\x5e\x5c\xfe\x74\x2e\x4f\xdb\xe5\x4f\xe7\xb0\xa4\x86\x61\x72\xed\x9e\x65\x0d\xca\x15\x13\x7e\xec\xa9\x07\x85\x1f\x2e\x49\x91\x91\x42\xfc\x85\x3c\xc2\x0e\x15\xf8\xb6\x57\x4f\x44\x5f\x7b\x04\x2e\xf8\x1b\xf5\x8f\xbe\xca\xbb\xf9\x48\x27\x99\x47\x48\x2d\x08\xa4\x14\x44\xe5\x51\x9f\xd1\xd7\xde\x0d\x63\x39\xbe\x81\x3f\xf4\x55\x05\x5f\xc3\x37\xea\x5f\xd6\x0e\x47\xf8\x46\xfd\xa3\xaf\xbd\x5b\x59\xf0\x56\xc0\x13\x81\x47\x59\x5f\x2e\x53\x73\x01\x4f\x04\x1e\x65\x2a\x2b\xc8\xcf\xa9\xec\x87\x7a\x40\x5f\x7b\x9c\xa4\x59\x59\x4d\x38\x2b\x72\x99\xc9\x3c\xa2\xaf\x96\x00\xa5\xc5\xed\x01\xe0\xbb\x37\xb5\x24\x89\x0a\x17\x19\xbe\x91\xbf\xb2\x29\x2e\x6b\xe5\xe8\x6b\xaf\x5c\x2d\xf0\x8d\xfc\x95\x83\xa1\x85\x1c\x0a\x2d\x60\x60\x5f\x60\x58\x5f\xe0\x79\x09\xcf\x4b\x99\x5f\x6e\xf0\x1b\xf8\x93\x6f\x44\x1c\xd2\xd9\x4c\x26\xa8\x27\x95\xfb\xdd\xa3\xca\xff\x4e\xf6\x6e\x46\x73\x49\xe7\xdc\xe8\x07\x9b\x02\x99\xcc\x23\xfa\xda\x5b\x15\xf4\x37\x7c\x03\x7f\xfa\x0d\x72\xa8\x07\x95\xc2\x0a\x95\xc0\x64\x0f\x81\x55\x5a\xca\x4d\x7d\xe3\x9e\xd1\xd7\xde\x54\x6e\x46\x48\xd5\x4f\xdb\xef\xc6\xcb\xab\x8b\x93\xd3\x1f\x2e\xdb\x20\xe0\xf6\xe4\xd7\x8a\x2d\xb5\x00\xa4\x58\xdd\x61\x25\xdc\x96\x0b\x00\xc8\x3a\xe5\xb9\x4b\xf7\xdd\xd9\xd9\xd5\xd1\x61\x43\xbd\x75\xe6\xd7\xca\x67\x0d\x5e\x92\x94\x4f\xe7\x87\xb4\x04\xf4\x19\xda\x04\x9c\x67\x4b\x06\xb8\xa3\x9d\x33\xfd\x07\xf7\x8c\x1e\xb4\x3f\xf2\xde\x5c\xb9\x25\x7f\xd0\x0f\xe8\xd8\x38\x2a\x37\x39\x64\x15\x73\x32\xbd\xbb\x61\x5f\x64\x0d\xfa\x51\x82\x36\xf2\x45\x1c\x83\x63\xfa\x07\xf7\xac\xd3\x0f\x38\x49\x75\xb2\x7c\x44\xc7\x10\xb2\xc5\xef\x4a\xf0\x6e\x88\x1a\xf3\xfe\x31\x2d\xd2\x5b\xe8\x43\x43\xaa\xcc\x3c\xad\xa4\xbd\x4f\x97\xe9\x0d\xcd\x29\xe0\x78\x0f\xf2\x16\xb7\xaf\xba\x6e\x13\x9a\x20\xa8\xba\x92\x28\xb3\x2e\xc2\xa4\x4a\xc5\xe6\xeb\xfb\x4a\x03\xb7\x5e\x37\x8d\xfa\x02\x7e\xe8\x35\x25\x57\xc7\xea\x65\x6f\x4a\x06\xca\x55\x3f\xcb\xf3\xec\xe6\xf0\x83\x0f\x35\xa7\xe9\x52\xac\x38\xb9\x90\x00\x8d\x5f\x71\x42\xf0\xb4\x57\x4b\x93\x8b\x0b\x77\xe5\x4d\xca\x4b\xfc\x64\xaa\x1d\x3e\xf4\xcc\x23\xfa\x24\x68\x5e\x0e\x9f\x48\x39\x4d\x97\x9e\x7b\xf9\xe1\x43\xaf\x9a\xb4\x91\x18\xc4\x8f\x57\x1f\x3f\xbc\xdb\x56\xd9\x06\x6d\xe1\xd3\x6a\xc4\xaf\xd3\x89\xb5\x90\xdd\xc9\xdd\xe7\x62\x91\x5f\xa6\x33\x52\x67\x7b\xc7\x7d\xf4\x60\x3f\x27\x3a\x8c\x6c\x62\xb1\x48\x57\xd2\xe5\x72\x1f\x69\x29\x7b\xaa\x3f\xbb\x97\xed\x27\xf4\xea\xe8\xe3\xf9\x87\x83\x2b\xe0\x48\xcb\x63\x08\x6b\x69\xd6\x44\x9d\xf6\x07\x85\x1b\x9b\xa4\x67\x8f\x32\x74\xf4\xa7\xa3\x8b\xcb\x93\xb3\x53\x7c\xe4\x61\xca\xff\xf1\xd7\x4f\x47\x17\xbf\x5c\x9f\x9c\x5e\x1d\xfd\x70\x71\x70\x75\x72\x76\xda\xe9\xec\x9c\xf5\x7e\xfd\xeb\x8a\xf0\x47\x73\x8e\x9f\xe1\xa0\xff\x6e\x2b\x03\xc1\x54\xb2\xa9\x2a\xdf\x04\x3d\xeb\xab\x9e\x51\xf2\x00\x2b\x8f\x9f\x68\x79\x49\x17\xcb\x9c\xbc\xcf\xe9\xf4\x6e\x78\xd6\x0b\xde\x25\x44\xd2\x41\x03\x64\x91\xe1\x59\x2f\x4c\x90\xdf\xe5\xbf\x4e\x52\xdf\xbd\x04\xf3\x5d\x05\x8b\x75\x9f\xd5\xbb\xf9\xaa\xe2\x1b\x5c\x90\xa9\xf0\xb2\x78\x89\x41\x2d\xb4\xb8\x75\x9f\x2a\x35\x06\xdf\x64\xa9\x0b\xc6\xe0\xab\xae\xd7\xbe\xca\x6f\xef\xe7\x34\xcf\xbc\x8f\xee\x1d\xd1\xf2\x52\x87\x0e\x06\x7e\xe6\x31\xe5\x2a\x88\xdb\x50\xee\xa5\xe6\x4f\x1b\x0d\x08\x0d\xce\x77\xe6\xbf\xf9\x50\x59\x49\x53\xf0\x59\x35\xc5\xe0\x83\x87\xb4\x5c\x42\xb8\x68\x8e\xcf\xaa\x29\x12\xac\x32\x2d\xbd\xb8\xb4\x8f\x12\x4f\x5e\x09\xe6\x7d\xf1\x5f\x01\x06\x94\x73\xef\xab\xff\x2a\xbf\xd2\x52\x30\xfe\xe8\x67\x08\x53\x24\xea\xc5\x0a\xe2\x65\xf0\x5f\x81\x6e\x31\x28\xdf\x31\xe3\xf8\x32\x7c\xf7\xc4\x0a\x0e\x35\x3c\x4e\xa7\xb2\x05\x7c\xb9\xfd\x5b\x63\xb9\xc6\x02\x12\x51\x64\x2b\x41\xf8\xe1\xe5\x07\x7c\xe9\x9e\x6d\xba\x4d\x34\x29\x26\x01\xc5\x7d\x14\xe2\xb5\x49\xac\xa4\x6d\xbe\x40\xa8\x8d\xae\x7c\x62\xf6\x30\x15\xe9\x41\x96\x2e\x65\xc5\x5f\xfc\x37\x5f\x00\x01\x7c\x7c\x97\xab\x31\x5d\xd9\x08\xcd\x53\xd9\xa8\xd2\x79\xb4\x82\x51\x79\xdd\xd1\x9c\xf0\x76\xd2\xe9\x40\x2e\xd3\xfe\x33\x39\x9b\xaa\x53\xa4\x7e\xa2\x34\x49\xde\xe1\x2d\x55\xe9\x5c\x2d\xb9\x83\x4b\x81\xdf\xc1\x1f\x52\x6f\x3d\x33\x88\x77\x3d\x37\x4c\xf8\xf0\xd7\x4f\x05\x15\xee\xab\xff\xaa\x18\x35\xab\xe5\x31\xe3\x9a\x97\x80\xdf\x55\x53\x36\x5b\xe7\x5e\x1b\xa1\x7c\xc2\xc7\x9e\xc5\xc3\x27\x54\xf4\x4e\x2e\xaf\x4f\xcf\x0e\x8f\x46\x45\x4f\x69\x60\xf4\xb4\x06\x07\x3e\x1e\x3a\x61\xab\x4e\x53\xc2\x56\xdc\x94\x8e\x8f\x03\x7d\x10\xab\x13\xf0\xaf\xb2\xf8\x71\x09\xed\xd7\xbd\xc1\x77\xbd\x3f\xb5\x75\x7f\x3c\xe5\x92\xba\x96\xca\x3f\xb9\x4f\x5a\xe5\x05\x13\x3d\x97\x98\x98\xe9\x0d\x0c\x93\xc0\x4f\x68\x4d\xe6\xad\x8a\x34\xaa\x3e\xe9\x95\xd1\xd5\xb7\x5c\xad\x05\xb2\x4d\x09\xaf\x7d\x8e\x8a\x51\xec\xbe\x60\xf5\xe0\x67\xc0\x61\x95\xc9\xd0\xcf\x0e\x46\xbb\x7e\x66\x65\x72\xa9\xe6\x93\xcb\x33\xbe\xcb\xc9\x94\xdd\x16\xf4\x6b\x18\xa4\xe6\x5f\x61\xd4\x15\xa8\xd3\x86\x8a\xc3\xda\x50\x52\x05\xb2\x75\xba\xac\xd7\xd7\x26\x82\x97\x8e\xff\x2a\x93\x10\xd9\x28\x45\xb0\xaa\x4a\xab\x33\xe3\xd1\x3e\x1c\x17\xfa\xe2\xd0\xd1\x0a\x64\x1d\xb7\x10\x65\x1d\x22\x3e\x78\xba\x8e\xdb\x35\xfb\x4d\x19\x88\xb3\xdf\xe9\x70\x08\xea\x7f\x90\x65\x00\x2f\xc1\x97\x70\x98\x14\xfb\x0d\x1b\x7f\xed\xc4\x38\xde\x33\xe9\x69\x96\x79\x06\x12\x24\xd1\x9a\x9b\x60\x82\xef\xec\xee\x1b\xdc\x2f\x7b\x3a\x80\x45\x64\xed\xd6\x68\x11\x89\x39\xb1\x4a\x8d\xd1\x32\x2d\x4b\xe5\xa1\xf9\x6f\x82\xfd\xad\xad\x8d\x5e\xbd\xc6\xe1\x6e\xf7\x7b\x80\x2a\x53\x94\x6c\x36\xda\xf2\xad\x6e\x79\x23\x87\x59\x62\x6e\xdd\x4c\xc8\xba\x38\x29\x5c\x8a\x1a\x35\x26\x9b\x8a\x72\x9f\xe7\x3d\xc2\xd6\x4a\x51\x6a\x82\x19\x90\x2e\xb8\x63\xdd\x49\x13\x2f\x78\x73\x11\x97\x50\xb0\x95\xc6\x4c\x3f\x56\xd4\xf1\xaa\x41\x4c\xfa\xf5\x60\x22\xdd\xa4\xe8\x62\x32\xa6\x13\xdf\x52\x44\xdb\x7e\x3f\xc9\xa4\xa1\xc0\x02\x04\xb0\x02\x62\x77\xcf\xb5\xa8\x98\x6f\x5a\xc4\x58\x55\x6c\xe8\x33\xe6\x85\xc1\xd4\x8c\xc9\x04\x8b\x0d\xaa\xe4\x87\x29\xdf\xe2\xba\x21\x05\xed\x3d\x1a\x1b\xf3\x64\x33\xa5\xb2\xa6\xb4\xa5\x66\x47\xce\x60\x8a\x8a\xa4\x55\x74\x3a\x85\x81\xe2\x47\x92\xae\x97\xf8\x71\x35\x25\x16\xa8\x4c\x10\x8f\xcb\x64\x53\x89\x7a\x63\xcf\x56\xb9\xcc\xa9\x88\xdb\xaf\xda\xca\x4d\x4b\x9e\x80\xec\x15\x12\x36\xca\x45\xf0\xab\xdf\xaf\x3f\xbf\x7a\x75\xeb\x2a\xc8\x83\x0a\xd4\x34\xbe\x7d\xbd\x5e\xef\xaa\xa8\xf8\x00\xa3\xcf\x66\x71\xfb\xf7\xed\x64\x44\x86\x19\x99\xb2\x8c\x7c\xba\x38\xb1\x98\x5d\x4c\x92\x1e\x27\xcb\x3c\x9d\x92\x78\x85\x48\x51\xfd\xae\x1a\x9e\xe2\x57\xbf\x8f\x47\xc3\xbd\x78\x34\x7c\xb3\xfe\x6e\xfd\x6e\xfd\x3e\x59\xbf\x8e\x47\xc3\x77\xeb\xc3\xf5\x41\xb2\x7e\xd3\x4f\xfc\x3e\xcd\xfc\x3e\xd5\x6a\xf4\x5b\x9c\xa2\x7a\x8f\x54\x8b\x19\x7e\x15\x7f\x7e\xb5\xfe\xdc\x5b\x7f\xfe\xe3\xfa\x73\x77\xfd\x79\xb4\xfe\xbc\x5e\x7f\x8e\xd7\x9f\x93\xf5\xe7\xf1\xfa\xf3\x64\xfd\xf9\x69\xfd\x79\xb3\xfe\xfc\x39\x79\x75\x8b\xe6\x38\xd0\xc3\x46\xcb\xba\xf6\xf4\x3c\x2d\xcf\x1e\xac\x8c\x2a\xf0\x70\x6d\xfc\x66\x5a\x5f\x42\x46\x2f\xdb\xe8\x7e\x37\x45\x5b\xb7\x47\x5f\x9e\x6c\x79\xf4\x55\xe9\x28\x2d\xe1\xe0\x97\x64\xca\x8a\xcc\xc1\x03\x79\xf0\x0d\x5e\xf8\xb7\x9e\xf2\xea\xbe\xb3\xd4\xaa\xdc\x48\x24\xcf\x35\xc0\xd9\x3d\xcd\x48\xb4\x4c\x79\xba\x88\xfe\x06\xf6\x63\x7f\xab\x57\xa8\xfd\xaa\x8e\xc5\x44\xde\x87\x35\x93\xd7\x11\x1f\xb6\xdb\x5d\x6e\x1d\x68\xbf\x0c\xd3\x4c\xbb\x69\xd8\x72\xcf\x0b\xe5\xae\xfd\x7b\x8f\x27\xad\xfb\x71\x7f\xb2\xd5\x28\x48\x80\x51\x10\xdc\x46\xa8\xc1\x2b\x86\x36\x12\x28\x7a\xd3\x79\xca\xdf\xb3\x8c\x1c\x88\x98\x26\x2d\x89\x1a\x2d\x57\x22\x06\xb7\x0d\x3b\x03\xeb\x5b\x84\x6f\xd0\xfd\x78\x50\x6d\xcd\x7a\x89\x91\x45\xde\xfc\x3b\xda\xe9\xab\x18\x17\xf7\xe3\xbd\x67\xb3\xee\x0e\xa0\x7a\x95\xf5\xcd\xb6\xac\x0a\xf4\x3e\xca\x91\x3e\x86\x23\xf5\x4e\x1f\x0c\xd0\xee\xed\x0c\xb5\x3f\x7f\xfe\xdd\xa0\x9d\x6c\xd0\x63\xd0\x5d\xab\x34\x17\x8f\xff\xfb\xd5\xa4\x9b\xb4\x65\x86\xbd\xc6\x0c\x3d\xfd\xf5\x4d\xd3\xd7\xb6\xea\xd4\xad\xec\xd4\xed\xf3\x9d\xda\xa0\xdb\xfa\x8c\xa9\xb5\x59\xc4\x12\xd7\x81\x5c\x76\x5d\xcf\x7b\x47\xa7\xef\xcf\x0e\x8f\xae\x0f\x4e\x0f\xaf\x0f\x8f\xe0\xf1\xfc\xe0\xea\xc7\xeb\xcb\xa3\x1f\x3e\x1e\x9d\x5e\x5d\x8e\x66\x31\x4f\x86\x5c\x56\xbb\x6d\x76\xfd\x7a\x65\xbe\xe7\x86\x70\x53\x71\x09\xff\xb4\x49\xd0\xf5\x73\x6e\xe2\x1f\x2c\x7e\xe1\x79\x40\x79\xf3\xef\x70\x57\x7b\x9b\xa8\xaf\x74\xb3\xed\x3d\x32\x48\x82\x18\x03\x1e\xbc\x45\x14\x5b\xaf\x3c\xc6\xd7\x5d\xdd\x32\x5b\xdd\x8a\x68\x85\x8b\x71\x3a\x41\x53\xdc\x6f\x0d\xf6\x3a\x71\x89\xf7\xde\xbe\x8d\xa7\xb8\xdd\xc6\x18\xaf\x46\x6f\x86\xff\xf6\x27\xf9\x10\x76\x64\x34\x18\xbe\xd9\x6b\x48\xde\x1b\xf6\x13\xd9\xcb\x15\x5e\x69\x7b\x8e\x41\x82\x62\x8a\xe9\x7a\x3d\x9e\x24\xea\xa6\x5b\x25\x28\x66\x98\x79\x29\xfd\x1d\x1c\xbf\xe9\x94\x49\x92\xa0\xc1\x9b\x4e\xd9\xe9\xf0\xf1\x74\xd2\xed\x22\x7d\x35\x3e\xc9\x43\x3f\x9c\x6a\x0b\x89\x3c\x5e\x25\x1b\x73\x7a\x9e\x8a\x74\x41\xca\x21\x5d\xaf\xaf\x51\x39\x67\xab\x1c\xf4\x3e\x32\x52\x0e\xd9\x7a\x7d\xed\x5d\xe3\x47\x15\xf4\x80\x40\xc7\x75\x0c\xb6\x5e\xa1\xb0\x36\xac\x03\x4c\x9d\x35\xc7\x16\xd1\xb6\x87\xc2\xb9\xf0\xa6\x99\xc1\xfc\xa0\x36\xed\x93\x59\xd7\x56\x98\xb7\x2f\xe2\x52\x95\xa2\x23\x31\xf4\xe2\xcf\xa7\x42\x10\x5e\xe0\x76\xdb\x3a\x21\xba\x25\x5f\xcc\x7a\x41\x92\x46\x13\xca\x20\x51\xce\x86\x49\xf1\xee\xde\xcb\x60\xbf\x9a\x31\x8d\xd4\x40\x77\x60\xa0\xbb\x10\x7b\x08\x12\x86\x6e\x02\xec\xed\x2a\x13\xdc\x8c\x7d\xa9\x82\xbd\xb1\x84\xc4\x12\xf7\xb1\x78\x4f\xf1\x96\x82\x01\x80\x8d\xa3\x56\x4c\x5a\x9a\x02\x9c\xa6\x22\x66\x0a\x21\x8c\x45\xe2\x01\xbb\xb3\xc0\xfe\x56\x0e\x78\x9b\xcb\x09\xf8\xba\x5e\xc7\xfe\xe4\x48\xc0\x7e\x41\x6e\x8f\xbe\x2c\x63\x7f\x0e\x93\xc4\x9f\xc2\x0d\xf2\x1b\xb9\x25\xcf\x98\xd5\xba\xc5\x31\xbe\xdd\x76\x30\x06\x2f\x0b\xe0\x20\xdb\xc3\xf9\xf6\x0b\xe7\x3c\xa1\x08\x8d\x40\xf5\xa6\x18\xf3\x71\x31\x01\x2b\xda\xa3\x98\x22\xb8\x05\x8d\x29\xe3\xc6\xf3\xe3\x1f\x94\xd0\xd9\x59\x90\x9d\x6d\xc2\x11\x2c\x57\xa2\xd9\x83\x13\xf4\x59\x55\x08\xb6\x92\x5e\x1d\x45\xab\xd6\x3f\x7b\xcd\xc1\x2c\x9e\xc5\x14\x51\x63\x52\xaf\x2a\x45\x74\x6c\x52\x26\xb8\xd0\xbe\x0d\x2b\xd3\x34\xaa\xee\xe9\xa2\x47\xb3\xa1\x36\xc6\x76\xc9\x49\x35\x9f\x36\xbe\xed\xd1\x4c\x07\xbd\xf7\xaa\x18\x57\x12\x90\xcc\x36\x41\x45\x38\x0b\x4a\xd0\xb7\xc5\x5f\x5f\xb8\x8e\x3b\x42\x4f\xc3\x78\xd2\x32\x7b\xb7\x05\x6b\x2a\xaa\x6b\x2a\x5e\x58\x53\x01\x6b\x7a\x29\x17\x34\x91\xc4\x19\x0c\x83\x26\xdb\x16\x54\xc8\xbc\xcc\xcf\xcb\xbc\xbd\x0f\x9d\x39\xa8\x13\x3c\xa1\x61\xf9\x6f\x2b\xc2\x1f\x75\x24\x5c\xb2\x5e\x3f\x6d\xbc\x43\x7e\x67\xc7\xdd\x22\xd8\x5d\xce\xaf\x3e\x77\x5f\xdd\x2e\x50\xfb\xf7\x7b\x7d\x49\x8b\xf1\xc7\x27\x81\x1b\x91\x63\xed\xa7\x4e\x5e\x35\xb8\xdd\xb6\xf1\x34\x37\x07\xde\x44\x2b\x67\x52\x1a\x05\xad\x26\xa3\x20\x67\x73\xc6\x5a\x3e\xb0\x66\xae\x66\x93\x89\x30\x21\xe7\x35\x0b\x7c\x00\xea\x92\xda\xd3\x0e\x74\xc7\x13\x24\xf4\xa6\x25\xa8\x8f\x24\x8e\xd3\x97\x28\x54\x0b\xe2\x77\x0b\xd4\x00\x99\x39\x63\x6a\x43\x60\xb1\x69\x9d\x3f\x4b\x58\x79\x71\x17\x71\x58\x16\x51\xdc\xfe\xef\x36\x62\x78\xdc\x47\x7d\x04\xde\x88\x9d\x11\x94\x35\x91\x42\xe0\x80\x74\x85\x77\xfa\x28\xc7\x7d\x79\x8f\xee\x4f\x1d\x6d\x38\x95\xfb\xca\x34\x31\xc3\x64\x3c\x9d\xa0\x0c\x3f\xc4\x25\x9a\x29\xca\x98\x25\x68\x8e\x33\x35\x66\xb4\xc4\x59\x2f\xb8\xc7\xf6\xf3\xb7\xa5\x0b\x97\xa7\xb7\xe8\x02\x97\xe3\x7c\xd2\x7a\xb3\x83\xf1\x02\xae\x03\xb8\x71\x77\x06\xa8\xc0\x85\x45\x18\x01\xc9\x44\xb4\x8b\xdb\xaf\xda\xa8\xc0\xf7\x63\x95\x75\x12\x2f\x50\x01\xe9\x8f\x2e\x25\x49\x36\xe9\x78\x3a\xc1\x4f\x86\x2e\x9d\x99\xab\x07\xa9\x0b\x76\x5e\xb9\x5d\x97\x9b\xcd\x0a\x3c\xc2\x37\xb7\x97\xa0\xc2\xdd\x5d\x29\x2a\xec\x5d\x47\xbb\xed\xdf\xb5\x51\xa1\xef\x30\x86\x9e\x33\x64\xeb\x74\x44\x2f\x2d\x95\x1b\xca\x5e\x2a\x89\x4d\xe3\xc2\x0a\xfa\x04\x7e\x48\x4a\x72\x0b\x16\x9c\xc3\xd2\x90\xd4\xe5\x30\xdd\x24\x1b\x74\x1e\xd0\x4a\xea\x4b\x35\x36\xa4\x0f\x3f\xa0\x46\xed\x73\xbf\xc1\xeb\xc5\xd5\x9c\x70\x12\xd1\x32\x2a\x58\x04\x34\x78\x24\x4b\x64\x51\xbb\x4b\xb6\x98\xc8\xd9\x56\xed\x36\x31\x00\xa7\xf2\x21\x80\x3c\xf6\x23\x5c\xa5\xe3\x62\x82\xa9\x47\x27\x84\x83\x2a\x15\x67\xbd\x8e\x26\xef\xec\x04\x63\x0a\xcb\x19\x22\xeb\x99\x3b\x51\x97\x93\x74\x57\x1b\x26\xa4\x21\x52\xd7\x37\x4d\x08\xc5\xbc\x67\x56\xc8\xc4\x77\x32\xa3\x66\x66\xd4\x29\xa6\x63\xa6\x36\x73\x6a\x36\x73\xa1\x77\x6d\x17\xdf\x8e\x53\xbd\x49\x53\xe4\xf0\x88\xf6\xab\xf6\x0e\xd6\x14\x96\x41\x8c\x0b\x59\xa4\x5b\x24\x08\x36\x8e\x07\x44\x55\x7d\xfa\x96\x54\x83\x07\xb1\x9d\x0e\x12\x1c\xe4\x4d\x12\x79\xed\x34\xcd\x97\x57\xa4\x61\x13\x8d\x27\xce\x92\xf5\x8e\x3c\x96\xb1\xa4\x3e\x40\x47\x23\xf6\x71\xf4\x6d\x58\x84\x5c\x69\x04\x81\x68\x27\x0e\x0f\xb1\xb1\xda\x1a\x98\x0e\x34\x51\xf7\x19\x73\xf7\x59\x89\xfb\xfb\xe5\x5b\x66\x6a\x2f\x4d\xed\x2b\x79\xe8\xc6\x13\xdc\xee\x36\xd4\xc3\xc6\xe5\x24\x69\x09\x83\x98\x2b\x13\xf5\xb4\x8b\xdb\x5b\xb2\x27\x3a\x14\x62\x9c\x26\x36\x6a\xb5\xcf\x53\x1c\xb5\xdb\xc3\xf6\xa8\xdd\x15\x9a\xd5\xd3\x69\x57\xce\x22\x44\x15\xda\x36\x97\x5e\x64\x2e\x43\xcc\x74\xda\x09\xe2\xf8\x69\x83\x9e\xb9\xae\xc7\xc5\xc4\x64\xc7\xed\x04\x31\x7c\x17\xd3\x71\x7f\x92\xa0\x14\x9b\xe9\x40\xa5\x04\x8f\x2b\xc3\x2d\x96\xf8\xae\xd9\x89\xa3\x15\x6e\x0b\xbe\x22\xed\x61\x9c\x7e\xbf\xd7\xe9\xb4\xc7\x13\x49\xf9\x30\x4d\xbf\xa4\xbb\x7b\x72\x77\x95\x10\xfb\x62\xcc\x6c\x7a\x1f\xc9\x2f\x93\xf5\x3a\xe6\x63\x36\xc1\xe3\x49\x92\xa0\x15\x38\xab\x1f\xc9\xe6\x07\x93\x64\xd8\x6e\x27\xa8\x1c\xc9\xcf\x66\x7e\x87\x90\x77\xb5\xe5\x48\x5b\xbe\x79\x53\x80\x39\x8d\x25\xd9\xbb\x69\x62\xc2\xa9\xed\x0c\xe4\xce\x71\xac\xb1\xff\xd3\x4e\xf6\x01\xd1\x67\xc0\x3c\x26\x86\x5a\xec\x23\x96\x98\x10\xb0\x5e\xf6\x51\x5b\xfb\x2b\x97\xe7\xcf\xec\x18\x5b\x28\xed\x0e\x90\xb3\x05\x0e\x6a\x4b\x13\xe7\x8e\x26\x5c\x53\xb9\x91\xd4\x09\x25\xc1\x09\x25\x70\x42\x49\xa2\xbd\xbc\x93\xd6\xcb\x84\x39\xc1\xf2\x28\x0d\x63\xe2\xd0\x99\x98\x24\x28\xf7\x5e\x73\x3d\xaa\xa9\xa5\x4b\x5a\xd3\xef\x07\x9d\x4e\xfb\x55\x1b\x7b\x3d\x98\xee\x0e\x92\xea\x84\xc8\x34\x94\xe3\xdc\xa5\xe4\xd6\xa5\x8c\xa4\xa1\x77\xbc\x20\xd2\x33\xdc\xdf\x9f\xd9\x6b\x1d\x6e\xa5\x2f\x31\x47\xc4\x27\x80\x67\x49\x92\x98\x0d\x3a\xeb\x76\x93\x7d\x53\x18\x02\x24\xcf\x71\x7f\x7f\xee\x8e\xff\x1c\x2c\xa7\xe7\x13\x0b\xf2\x3b\x9d\x4c\x47\xe6\x19\xcf\x27\x49\xab\xd1\x3b\x05\x51\x30\x25\x6e\x02\xde\x44\xdd\xaa\xeb\xb5\xc1\x56\x0a\xcc\x55\x64\x31\x3e\x1e\x48\xf0\xc2\xc7\x7b\xe0\xcc\xbe\x9a\xaf\xc4\xa9\xcc\xb7\xc2\xa9\xcc\x97\xe3\x74\xbc\x67\x5d\x95\xe6\x96\x28\xd9\x05\xf7\xd7\x0c\x78\x8b\xc5\x0e\xc6\xa5\xf9\x52\xee\x02\x21\x42\x77\x30\x5e\x59\x87\x08\xbb\xf6\xde\x82\xf4\x11\xdd\x5d\x0d\xa1\xd4\xa8\xdc\x2d\x86\xfd\x4d\x92\x6c\xe2\x2c\x31\xee\xea\xc7\x7d\x6b\x3b\xbe\xec\x74\x96\xde\x94\xc4\x54\xbe\x6b\xf4\xa1\xd3\x01\x1e\xd2\xef\xe4\xc2\xda\x44\x7d\x1e\x77\xff\x4d\x2e\x6f\xae\xd1\x8f\x2d\x04\x13\x76\xc8\x00\xd0\xb1\x40\x2e\x2a\x87\x48\x3b\x74\xbd\x0e\xa2\xd8\xe8\x8b\x0e\xd0\x4a\x88\x53\x43\x9d\x3f\x92\xb6\x89\xd0\x2a\x34\x89\x4b\x25\xb0\x19\x20\xe5\x2f\xf0\x20\xe6\x49\xcb\x62\xf5\x86\xe5\x62\x77\xd2\x0a\xf7\xf7\x57\x8e\x13\xb3\x32\x90\x2c\xc7\xc5\x78\x35\x41\x53\x9c\x6b\x64\x70\x26\x77\xa6\x8f\x76\xa1\x0c\xdf\xa0\xb9\x8e\xda\x33\xdd\xc1\xf8\xba\xd3\x99\xc9\x3f\x7b\x09\x2c\x71\x7f\x7f\xf9\x76\x6a\xea\x5e\xca\xba\xe7\x78\x47\xc9\xc7\x16\x78\x3a\x5e\x4e\xd0\x3d\x04\x2e\x1e\xa7\xdd\xee\xa4\x95\x61\x8c\x6f\x3a\x9d\x38\x83\xe8\xde\x2f\x9e\xc7\x4e\x67\x36\x5e\x4e\x46\xd9\x78\x31\xc1\xf7\x9d\x4e\x03\x89\x71\x9f\x0c\xd5\xd7\x4d\x39\x5e\x79\x08\x65\x6e\x11\x4a\xe0\xbe\x96\xc3\x0c\xd1\xf2\xf0\xb1\x48\x17\x74\x3a\x9c\xdb\xbb\xa4\xdc\xc4\x4b\x94\x23\x20\xe8\x25\x70\x34\x0a\x3d\xed\x7e\xef\x75\xef\x4d\xfb\xe5\x1e\x4a\x30\x7d\xde\x3b\x65\x7c\x01\x2b\xc5\xf1\x53\x61\x9e\x2f\x15\x26\x32\xcc\x91\x4d\x3a\x4f\xc5\x7c\x58\x6a\x39\x81\x7c\x31\x79\x66\x21\x64\x5e\xa4\xcb\x46\x7c\x09\x84\x2a\x2d\x12\xb3\xb8\xdd\x46\xbc\x22\xe0\x4a\x90\xe7\xf3\xc9\x72\x91\xcc\x4a\x31\xcc\xb5\x34\x07\x95\x01\xe6\xc0\xe4\x3d\x22\x77\x48\xd9\xb0\x43\x4a\xb5\x43\x84\xde\xf4\x49\x2b\x8d\xa7\x28\x47\x6c\x9c\x4f\xd4\x96\x9c\x61\xee\x84\x3b\xf9\xa4\x35\x1b\x91\x78\x8a\x66\xd0\xf6\xb0\x50\x0c\x7a\x8a\xa6\xc9\x66\x13\x4b\x9c\x25\x94\xc9\x8a\x91\x72\x47\x8b\x88\x26\xd2\x95\x07\x4a\x1d\x7b\x56\x7b\xf2\xb8\xc0\xe7\x9e\x40\xfd\xc2\x97\xfc\xf2\xeb\x5f\xcb\xd0\xcf\x43\x83\xe5\x7a\xe0\x6c\xaa\xcd\xcb\xfb\xa5\xfc\xab\x0a\x8e\x1b\x6d\xd4\xff\xe7\x52\xe3\x9c\xdd\x1e\xdc\x30\x2e\xf0\x03\x22\xbd\x13\x6d\xea\x0f\x78\x34\x44\x41\x20\xbd\x2b\x9e\x16\x25\x95\xcd\x2a\x53\x51\x3f\x45\xd1\x93\xa4\xa7\x14\xca\xce\x0f\x2e\x0e\x3e\x5e\x5e\x5f\xfe\xf2\xf1\xdd\xd9\x07\x4c\x7a\xd5\xf7\xcb\xab\x83\xab\x23\xf7\x6a\x1a\x73\xd5\xe1\x46\x21\x36\xdb\xe2\x34\xcc\xee\x39\xe8\x97\x5a\x48\xed\x28\xa8\x65\xd1\x76\xdc\x76\xd5\xc3\x38\x49\xa6\x99\x8b\x0b\x52\x96\xe9\x2d\x01\xf7\x20\x0d\x79\x4c\xa5\xa0\xce\x08\x9e\x81\xaf\x78\x3a\x25\xa3\x2d\xe9\xe1\x2e\x51\x8e\x2e\xb9\xfa\x6f\xf0\x66\x56\xf1\x72\xa5\xea\xb4\x5f\x93\xd0\x05\xa2\x73\xeb\x83\x89\x72\xa3\x96\x6e\xe1\x30\x94\xdf\x2e\x15\x5b\x55\x28\x7d\x90\x67\x27\xa5\x9e\x45\xc4\x01\x33\x80\x80\xb2\x63\x3e\x49\x36\xa1\x38\xd2\x20\x60\xa4\xd3\x21\x5e\xdc\x56\xde\xe9\x70\xe7\xb1\x90\x8c\xf9\xee\x00\x6e\xcd\xa6\x5b\xbb\xd3\x29\x8d\x6c\xac\xed\x51\x1b\xed\x64\x13\x17\x96\x65\x27\x70\xe1\x93\x22\x68\x9c\x9a\x32\x7d\xc4\x25\x42\x22\x26\x2e\x46\xa7\x24\x11\xbc\xb0\xa3\xd3\x00\x7d\x96\xc3\x23\x16\x2d\x18\x0b\xe8\x97\x0b\x42\x62\xdd\xc6\xca\x4f\x18\xc4\x68\x26\xfa\x6c\xe8\xff\x29\xe4\x80\x4a\x44\xa2\xca\xf9\x05\x12\x55\xd6\x30\x2e\x26\x1e\xb7\x7d\x66\x02\x00\xcb\x03\xe7\xe3\xf5\xff\xac\xa8\x51\x3a\xa8\x2a\x0f\x7c\x76\x53\x85\xef\x30\xc0\x77\x5a\xd0\x76\xec\x6d\xf6\xe8\xff\xb4\xbb\xb4\xdb\x1e\x46\xed\x2e\xf3\x18\x78\x29\x94\xd2\xd9\x25\x59\xe3\x86\x91\xb9\x35\xac\x7b\xb9\x5a\xaf\x9d\x9f\x25\x36\x8b\x14\xea\xbb\x5e\xd7\xa6\xb9\x9a\xf1\x14\xbe\xbb\x46\xe6\x2f\xf9\x1c\xec\x74\x54\x04\x48\xd8\xa1\x09\xf8\x29\xda\x77\xc5\x97\xde\x7d\x24\x49\x82\x34\xcf\x87\x4f\x1b\xa4\xcc\x0d\x33\xf9\xa8\xcc\xe9\xe4\xe3\xa6\xb5\x8a\x8b\x5e\x9a\xe7\xc6\x2d\x17\x44\x24\x01\xd7\x91\x72\xcb\xc8\x4d\x84\xa6\xb1\x48\x10\x49\xec\x7e\x85\xb3\xe1\x9d\x94\xf5\x5a\x05\x28\x29\xb4\x99\x5e\x06\xde\x55\x65\xcf\x12\x57\x93\x48\xe8\xcc\x2f\xe4\x24\x04\x5c\x85\x53\x52\x8c\xef\x45\xcc\x92\x4e\x67\x11\xa7\x49\x02\x4e\x8e\xd5\x98\x81\x11\xa0\xd7\xb5\xd0\x76\x93\x99\x39\x9c\x80\x95\x87\x9e\x8d\x73\xdc\x47\x33\x4b\xe9\xed\xe7\x6f\x67\xc0\x29\x63\x2a\x6a\x54\x3a\xce\x27\xe0\x8f\xa9\xa9\x22\xed\xb9\x58\x76\x4b\xce\xf0\x98\x3f\x93\xd5\xe2\xb3\xa3\x42\xbb\xbb\xdd\xf8\x52\x77\x7b\xd8\xab\x2e\xd4\x5c\xae\x7b\x6f\x3b\x29\xf5\xc8\x21\x78\x29\x55\xb2\xd8\xf6\xf5\xb5\xba\x32\xae\x77\xf7\xbe\x1b\xfc\xf9\x4f\xdf\xf5\xfb\xfd\xc1\xeb\x37\xff\xf6\xe7\xbd\xfe\xee\xeb\xd7\x7b\x7b\x0f\xaf\xdb\xad\xca\xad\xf2\xa8\x25\xa6\xed\x6b\x73\x1b\x99\xb2\x7b\xaf\xf7\xfe\xfc\xe7\xbd\x3f\xbd\xee\xef\xf5\x5f\xef\xee\xbd\x7e\xbd\x07\x85\xc3\x2b\xea\x56\x0b\x2b\xdb\xd7\xd7\x7f\x3d\x77\x45\x5f\xff\x79\xef\xcf\x7f\xda\x7b\xf3\xa7\x37\x6f\x76\x5f\xef\xe9\x82\x4d\x37\xde\x0d\x14\xbf\xde\x1e\xbb\x17\xf1\x6a\xc0\xf9\x20\xca\x26\x85\xd8\x55\xea\x35\x71\x51\x8b\x25\xd5\xca\x6c\x32\xdc\x2f\x33\xce\x16\x5e\xb0\x08\xc1\x02\x71\x18\x2d\xf5\x2d\x66\x63\x9b\xd0\xf2\x60\x2a\xe8\x3d\xb8\x79\x81\x84\x15\xcf\xb5\xf5\x68\x7b\xb5\xcc\x52\x41\xda\xd6\x85\x2b\xcb\xef\x6b\xa1\xfa\x0d\x04\x06\x3b\x1f\x57\xa9\x77\x73\xef\xd8\xb6\xdf\xa7\xab\x92\x64\xef\x1e\xa1\x0f\xb4\xb8\xf5\x33\x0d\xaa\x99\xb4\x47\xc3\x67\xf3\x98\x8a\x2e\x14\x6b\xbf\x21\xef\xf5\x3d\x05\x3f\x88\x7f\xf5\xe4\x04\x4f\x2a\x70\xf1\xf8\x71\x82\xf9\x7a\x4d\x14\x33\xdc\x44\xf7\x11\xa4\x10\x86\x4b\xae\xf0\x34\xc3\x25\xcf\x52\x91\x2a\x46\xab\x7c\x82\x38\xc4\xfe\xc4\x64\x1f\x59\x46\x72\x57\xfb\xcd\xc4\x3c\xca\x3b\x77\x41\x4b\x12\xac\x04\xd8\xc5\xfa\x29\xe3\x5b\x57\x80\x1b\x24\xcb\x85\xeb\x52\x5a\x5c\xa7\x12\x6f\xf1\xab\x59\xd2\x7b\x26\x8c\x05\xa2\xff\xa1\x24\xbf\xad\x48\x31\x25\x78\x77\x80\x68\x10\x32\xc5\xf4\xa6\x30\x96\x7b\x3d\x4e\x24\x6a\x20\xe9\x32\x59\x43\xec\xf5\x8f\xba\xb0\x3e\xcf\x2f\xdf\x0e\xfb\x86\xf5\xdb\x81\xfd\xfa\x5c\x9e\xf5\xba\xaf\xd8\x49\xba\xf7\xc9\xdf\xb1\xe2\xb2\xf6\xb6\x16\xf2\x28\xa6\x94\xdd\xca\x9d\x4e\xbc\xc3\x9e\x1d\xc1\x7a\xdd\xf4\xbd\xd6\x4a\x62\x14\x1b\xe5\x6a\xf1\x9e\x22\xcf\xec\x7a\xf3\x00\x25\xa9\xae\x24\xf7\x5e\xb4\x16\x99\x9f\x64\xb0\xa5\xd2\x30\xee\xbd\x15\xf7\xf3\x8d\xcb\xdd\xc1\x44\x7b\x71\x0c\xa9\xe4\x72\xbf\xdb\x5d\x19\xe2\x27\x28\xb2\x52\xbc\xfa\xbc\x47\x4b\xed\xa2\x27\xd3\xce\x88\xeb\x9b\x28\x57\x05\x37\xe1\x2e\x22\x26\x62\xc6\xa5\x4e\x31\x01\xe7\xcc\x6e\xe2\xe6\x1c\x78\xfc\x16\x0b\xe6\x53\x07\x78\x46\xb5\x6d\xb7\x33\x40\xf7\x01\xea\x91\xaa\x9c\xd1\x6e\xa4\x72\xb4\x13\x49\x8d\xb9\x52\xaa\x19\x79\xcb\x68\x5a\xab\xa7\x04\x75\x4d\xd8\x64\xad\xb5\x54\x9f\xea\x9e\xb0\x0d\x1e\xd2\x4c\xf1\x2f\x08\x4a\x13\x59\xe9\x7d\xdc\x56\xb3\x11\x41\xa7\xdb\x89\x1f\x1a\xac\xe9\xf8\xa8\x1e\x69\xa0\x92\x78\xc7\x79\x63\x38\xb4\xb5\x88\xd7\xa2\x27\xe6\x64\x6b\x38\x2f\xbf\x25\xc8\xa8\xbf\x6f\x90\x50\x83\xdd\xa2\xab\xe4\x17\x53\x93\x02\xbe\x36\x91\xe8\xe9\xa8\x59\xdf\x50\x4e\xe7\xb4\x25\x61\x39\x6a\x62\x47\xce\x54\x10\x24\x2d\x77\x54\x22\x47\xad\x6f\xab\x66\x58\x5f\x53\xe1\x5f\xe2\x8d\x5f\x4b\x83\xe5\x8d\x25\x3b\x28\x2f\x2e\x3f\xc1\xbb\xab\xfa\x3e\x3c\x56\x7f\x3f\xd3\x3c\x57\x3e\x24\x62\xe3\x1d\xdd\xff\x7c\x48\xb3\xf0\xab\x1c\x89\xe9\x73\x6d\x30\xb6\xa9\xf5\x3a\x9e\x05\x63\x08\x4e\x41\x15\x12\x4b\xfc\xd8\x6d\xa3\xe8\x21\x2d\xcd\xde\x6d\x9b\x4b\xda\x84\xcd\x51\x17\x8b\x93\xd7\xf9\x69\xb1\xf7\xd6\x5b\x72\x52\x25\xa2\xfd\xc1\xc1\x5d\x95\xd4\x2e\xf3\x7e\xf5\x32\x1f\x04\x53\x92\x42\xaa\x07\x2c\xf5\x62\xc0\xa4\x90\x8c\xf2\xc0\x1a\x9f\xd4\x96\xf8\xd9\xe9\x27\xba\x1a\xc1\x1f\x6b\x13\x0b\xd3\x61\x45\xd3\x7e\x2d\x6e\xde\xe4\x35\x20\x87\xee\x4f\x03\x08\xac\xbd\x98\x3c\x66\xca\x3c\x88\x6e\xa2\x3c\xc6\xe1\x07\x88\xa7\x23\xf4\xb7\x26\xae\x70\x05\xc9\x21\x76\x77\x94\x61\x88\x43\xc7\x47\xf1\xc3\xe5\xc5\x72\x6e\x8d\x62\xb5\x0e\xdc\xe7\xb2\xca\x6a\x9a\xc2\x88\x35\xd6\x51\xa7\x92\x94\x37\x51\x04\x9f\x3d\x41\x69\x8d\x0e\x2c\x3c\x3a\x90\x7f\xbf\x37\xe2\xbb\x7b\x92\x0e\xa4\x78\x6f\x9f\xbe\xe5\x26\xda\xd8\xee\x9e\x4f\x07\x52\x1d\x27\xcb\x4e\x3f\xf4\x12\x2c\xb8\x0c\xe0\xf2\x2f\x23\x23\xb7\xa9\xa1\x7e\xdd\x41\x02\x1a\x30\x85\x82\x2a\x2c\xcf\xd9\xc3\x85\xde\x42\xe5\x96\x60\x4b\xaa\xcd\xd6\x76\x20\xd5\x14\x94\x92\xd4\x76\xed\xa8\x9e\x54\xed\x40\x1c\xde\x14\x00\xf1\x05\x04\xb1\x94\x2b\xb3\xdd\x87\xa1\x77\xfb\xc4\xe6\xb4\x47\xed\x6e\x70\xfa\xbb\xed\xa4\x2d\xab\xc9\x59\x45\x10\xf7\x0c\xc0\xb0\xc1\x51\x7c\xf5\x45\xa7\x76\x1f\x13\x53\x8c\xb8\x32\x6d\x13\xc9\x41\x01\x93\x5e\x5b\xc5\x65\x60\x81\x7e\xde\x56\xe7\xb6\xa4\xd3\x09\x28\xe8\x6b\x79\x52\x7c\x7c\x7c\xd3\xc8\x5e\xbb\x6e\x29\x5d\x3e\xd9\xd2\xcf\x24\xbd\x0b\x7c\x01\x5f\xc6\x44\x69\xc7\xeb\x7e\xbb\x98\x91\x20\xda\x79\xda\x78\x24\x49\xa1\x62\xdf\xcb\x5d\x52\x89\x37\xea\xd1\x37\x14\xf0\x17\x54\x62\x6a\x50\xa8\x95\x79\x04\xdb\x71\x94\x63\x6a\x54\xe8\xd1\x14\x53\x35\x4b\x12\x87\x39\x03\xc7\xf7\x34\xe9\x74\xb4\xb2\xfe\x0c\x83\x79\xa4\x44\x5e\x33\xfc\x25\x9e\x55\x3c\xc8\x2b\x76\xcc\xd3\x2d\x11\xd1\x82\x88\x54\x62\xee\x0e\x2d\x39\x88\xc1\xb2\x42\x56\xab\x98\x63\xb4\x3c\xe6\xec\x2b\x29\x62\x49\xba\xf3\x0a\x87\x2c\x6e\x9b\x1a\xda\x96\x0d\x15\xea\xa9\x82\x01\x9b\xf5\x31\xb5\x81\x39\x33\x60\x2c\xf8\x06\x81\x79\xe2\x29\x9a\x25\xc8\xd9\xd7\x9c\x81\xf3\x7c\x8a\xb2\x04\x65\x80\x37\xcc\xf1\xd3\x8c\x16\x99\x33\xa6\x75\xb2\x19\x44\xf1\x78\xd2\x7a\xed\x09\x93\x81\x40\xac\x4e\x39\xf1\xcc\x6f\x55\x80\x80\x4d\xe2\xe9\xc1\x32\xdc\xdf\x37\xcc\x93\xef\x99\x0a\x8f\x3e\x8b\x0b\x3d\xa3\x64\xcc\x24\x2e\xa3\x18\x13\x12\xbe\x31\x44\x9d\xca\xdc\x06\xc9\x39\x95\xcb\xe8\xa1\x79\x2a\xd1\xad\xa3\xe7\x3f\x4c\x7d\x6a\x5a\x03\xbd\xba\x89\x2d\x2c\x41\x92\xd1\x15\x20\x63\xb6\x3b\xb0\xf2\x2e\xbb\xcb\x84\xf2\xfa\xaf\x3a\x2a\x74\x51\x60\xe5\xfb\x25\xbb\xdf\x5a\x32\x67\xd3\x34\x3f\x55\x63\xf1\xe0\x96\x1c\x9d\x11\x96\x7b\xaa\xef\x64\xec\x82\x69\x4c\xbc\x21\x7b\xc3\x2d\x55\xb2\x47\x0e\x78\xde\x42\x37\x1b\x7b\xb5\x75\x3a\xf1\x1c\x7f\x89\xe7\x28\x4f\x12\x64\x36\xc0\x3c\x41\x73\x09\xb2\x02\xed\xd2\x70\x2f\xa7\x42\x70\x7a\xb3\x12\xa4\xb9\xde\xea\x76\x26\x89\xa4\x73\xab\xdb\xd9\x55\xd2\x4e\x46\xcf\xef\x64\x22\x77\xf2\x30\x48\x95\x49\xae\x8b\x07\x3e\xce\x0d\x17\xb6\x8d\x2d\x0b\xa2\x6d\x08\x6f\x66\x65\x07\x1f\xf5\x36\x18\x6d\xfb\x20\xe1\xf8\x2a\xcf\xe1\x18\xdc\x3d\xcb\x35\x31\x31\xaf\xae\x61\x13\x9d\x37\x50\xda\xea\x0b\xf6\x75\x89\x7d\x36\x80\x47\x13\x59\xb4\x09\xc4\x03\xc2\xcb\x7d\xaa\x94\xec\x2a\x6c\x81\xc2\x84\x18\x5d\x72\x36\x25\xa5\xd2\x31\x8a\x8b\xe4\x39\xac\xff\x16\xdc\x3c\xf8\x01\xb2\x1b\x69\x15\x47\x51\x18\x38\x98\x28\x1c\x45\x59\x77\x37\x38\x24\x88\xbc\xb1\x81\x22\x24\x20\x65\x50\xcf\x56\xf5\xa5\xd6\xf3\x2d\xfb\x53\x9a\x28\x32\xa4\xe9\xa6\xe6\x2a\x16\xd3\x31\xe3\x80\x8f\x2a\xc2\x21\xa9\x15\xf0\xf2\xf3\x55\xf1\x8e\xcc\x18\x27\x30\x15\x3f\x32\x76\x17\xbf\x54\xa4\xda\x84\xb1\xa4\x7c\xa6\x88\x99\xea\xe6\xba\xff\xee\xfe\x93\x70\x00\x07\x33\x41\xb8\xd7\x7f\x44\x5e\x2a\x74\x43\xa6\x6c\x41\xcc\x66\x33\x25\xe4\x3a\x85\x5f\x9a\x96\xcb\xa8\x8f\xd8\x0d\x10\x8b\xa4\x65\xc3\x54\x96\x22\x2d\xe7\x17\x3e\x1f\x4a\x05\x8d\x22\x92\x0a\x95\x3f\xc0\xad\x92\x0f\x63\xbb\xbf\x27\xb8\xb0\xe1\xf4\x6c\xe4\x68\xb5\xd5\x5a\x3b\x71\x5b\x3f\xb6\xa9\xda\x58\x49\xa7\x43\xd7\xeb\x98\x63\x61\xa4\xf9\x1a\x82\xca\x6f\x5a\xd5\xf3\xbc\x8e\x08\xc1\x35\x5f\x39\x46\xa8\xf0\x8e\x91\x17\xd1\xc4\x42\x0b\xd6\xe9\x28\x50\x98\x22\x96\xa0\x14\xf6\x3d\x48\xf6\x21\x0e\xc9\x94\x64\xa4\x21\xd2\x9b\xd6\xe6\x33\xc6\xad\xc4\x8c\xa5\x3a\x34\xa7\xf2\x9f\x2e\x88\x21\x2b\xe4\xf3\x7a\x5d\x1d\x73\xa7\xb3\x63\xc2\x93\x55\x41\xe7\x52\x8b\xa4\x3a\x9d\x9d\x86\x80\x1f\x3b\xd8\x2a\x55\x2b\xf5\x03\xbf\x7f\x81\x5c\x8d\x24\x20\xf8\xa9\x54\xcf\x93\x4e\xc7\x63\xb3\xbb\xaa\x4c\x25\x9b\xd8\x3b\xec\x88\xe8\x87\xa4\x8e\x9d\xca\x2e\x81\xb0\x06\xc4\x71\xec\xd6\xa9\x84\x2a\xd9\x8e\x82\x2a\x8a\xcf\xbb\x4d\x43\x32\x22\xbd\x6b\xe3\xe8\x1d\xb8\x51\x95\x95\x55\xe0\x15\xa8\xae\xfa\xb9\xae\x6b\x67\xb9\x15\xd0\x34\x88\xec\x9a\x21\xa5\x76\xfa\xa8\xfd\x40\xf3\x5c\xef\x65\xa8\xa6\x8d\xfc\x86\x7c\x5a\xd4\xbb\x61\x5c\x62\xef\xc6\xf5\x40\x99\x00\x35\x7e\x8a\x49\x92\xa0\xa3\x58\x28\x33\x21\x80\x26\xa8\x01\x0c\x26\x7a\x58\xe1\x69\x6f\x3c\xa1\xd4\x44\xf5\x96\x53\x13\x10\x3b\xdb\x8e\x67\x43\xef\x9b\x87\x94\xda\xd6\x5d\xa0\xf9\xea\x97\x58\x19\x36\x73\x7c\x14\x53\xcc\x13\x85\xe6\xd0\x86\x31\xf1\xed\x30\x93\x54\x98\xd9\x63\x36\xd1\x10\x2a\x80\x90\xcd\x4c\xa4\x7a\x4b\x24\x7e\x06\x3e\x0b\x1d\x74\x49\xdd\x6b\xb5\x19\xaa\x6d\xe2\x0a\x9b\xbd\x9a\xa0\x20\x5c\xb5\xff\x1e\xb4\x13\x40\xaf\x12\x31\x9d\x57\x36\x7a\x03\xa9\xaa\xbc\xb1\x58\xfb\x71\xc5\x6c\x0d\xec\x6d\x82\x1b\x5f\x71\x40\x82\xb4\x46\xad\x44\xff\xca\xad\x5d\xb0\x0d\x0c\x45\x62\xc3\x52\xc5\x02\x93\xa4\xd3\x69\xd2\x00\x6f\x0a\x60\x02\x93\x3e\xaa\x5f\xe2\xb8\x96\xf2\xdc\x7d\xe5\x81\x05\x45\x39\xf8\xe7\x5d\x73\x90\x86\x44\x19\xaf\x84\x79\x8d\xcc\x0f\xc5\x7d\xc4\xb7\xc4\x19\x86\x6a\xb6\xc5\xd1\x0d\xe2\x5f\x43\xce\x91\xf7\xac\x34\x29\xdc\x5a\xc6\xc9\x06\x5c\x20\xd5\x38\x58\xd7\x06\x36\x99\x18\xbe\xfe\xd0\x9f\x8f\xe1\xeb\xe7\xd4\x97\x80\xdf\x20\xaa\xe7\x7a\xb6\x0f\x66\x01\xbc\x78\xc0\x4d\x3a\x35\x77\x55\x23\x0f\xe2\xa1\xbc\x22\xf6\xc2\x4f\x68\x83\x44\x43\x5d\xca\x03\xe1\xa9\xb9\x40\x3e\x96\xa8\x8e\x27\x06\xe3\xa5\x28\xc4\x76\xfb\xc8\xde\x8b\x38\x45\xe5\xc6\x52\xaa\x3c\x8c\xca\x96\x00\x6c\x41\x22\x8c\x06\xd9\x80\x59\x9a\x19\xec\x74\x44\xe5\x24\x4a\x28\xfb\xdc\xe1\xf4\x11\xdd\x26\x38\x0c\x2a\x55\x48\x6c\xe2\xbb\x04\x5d\xbc\x38\x3d\x9a\xcf\x60\x26\x27\xfd\x96\xc9\x79\xda\xa0\xd4\x4d\x54\xfa\xf7\x4c\x46\x1d\xa7\x0f\x0d\x26\x54\xad\x12\x5d\x23\xe3\x9b\x49\xa7\x13\xaf\x62\xe1\x84\x83\xea\xee\x46\x22\xb4\x65\x1a\xdf\x4c\x8c\x5d\xb7\x87\x2d\x19\x19\xb0\x0d\x1e\xd4\xcb\x88\x45\x09\x47\x14\x07\xef\xd0\xd1\x21\xef\x2d\xf4\xc5\x21\x3f\x2f\xbc\xab\x82\x76\x3a\x47\xc0\x4a\xf1\x44\xcb\xf5\xa9\xa7\x76\xde\xaf\x5e\x98\x77\xad\xb8\x60\x66\x9d\xd5\x67\xdd\xce\xb9\xd9\x75\x14\x31\x87\xd2\x72\xcc\x3c\xf8\x7b\x69\x93\x63\x9e\x20\xb6\xd9\xb6\x12\x2d\x63\xd1\x5b\x23\xb6\x8a\x86\x85\x11\x15\x26\x56\x70\xcf\x72\x85\x29\x55\x12\x42\x9c\x49\x4d\x0b\x2d\x6e\x8d\x8d\x7c\x16\xc1\x9c\xb6\x43\xd5\x2c\xd3\x72\xa0\x7b\xb6\x41\x45\x13\x05\xd7\xb0\x59\x14\xa2\xcc\x43\xd4\x95\x40\x80\x39\x6e\x46\xfc\x04\x9c\xab\xcc\x8b\x02\x59\x8c\xc5\xb8\x3f\x99\x48\xca\xd4\x8a\x6d\xdd\xec\x06\x42\x60\x97\xac\x7a\xa8\x3c\xd5\x20\x15\x07\xb7\x11\x2f\xf1\x90\x0e\x5b\x38\xa9\x5d\x66\x1e\x81\x62\x6a\x1b\xf8\x6e\x54\xac\x19\x82\x55\x62\x7e\x75\x4d\x33\x13\x24\x8e\x26\xa3\x62\x4c\x55\x00\xe2\xa1\x7a\x42\xc5\x46\xef\x3f\x18\xf6\xfb\x6d\x7c\x75\x90\xa3\x00\x2b\x52\x6c\x13\xdd\x6f\xd0\xc7\xe7\x83\x8c\x36\x88\xdd\x7f\xab\xeb\x0d\x38\x80\xf1\x1c\x9d\xaf\x19\xdc\x1f\xd2\x9b\x46\xb8\xd0\x6e\x9b\xac\xf3\xb8\xd2\x36\x6a\xb8\x8d\xdb\xed\x1d\x3d\xc4\x2e\x6e\xf7\xda\x09\x12\x5d\xac\x48\x18\xb4\xd3\x97\x37\xf3\x7d\xdc\xfe\x03\xf8\x68\xf8\x03\xa8\xc9\x24\xdf\x42\xfd\x1b\xb8\xf4\x4d\x3d\x88\xf8\x98\x68\x60\x4d\x3c\x2e\x83\x6e\x5e\x54\xd4\x43\x3c\x83\x5a\xc4\xb0\xa5\x5c\x1a\x70\x44\x8f\x2d\xe3\xcd\x58\xdc\xbe\x14\x29\x17\x9e\x74\xad\x6d\x50\xc9\x15\xda\x56\x44\x5f\x6c\xca\xc4\x4a\xe6\x6f\x10\x0b\xab\xd1\x53\x7f\xb0\x29\x0e\x7b\xff\xbd\xd5\x94\x1b\x71\xcb\xe7\x1b\x86\x79\x9a\xc6\x03\xc2\x06\x49\x07\xff\x1a\x13\xe4\xb7\x30\x4e\xb5\x68\x45\x71\x50\xcd\x16\x0d\x3b\xaf\x05\xce\xca\xa5\x7a\xe2\x09\x0c\xd2\xe7\x18\x44\x44\x85\x08\x0e\x6a\x02\x9f\xa8\x11\x9d\x45\x8a\x68\x8e\x4c\x7c\xe2\x2d\x33\x62\x4c\x16\x94\x9e\x5a\x65\x38\xa0\xcf\x5c\x6d\x40\x77\x35\x35\xb2\x71\xdb\xd5\xb2\x79\x86\xc7\xe1\xdc\x4d\x3c\x1c\x04\x6c\x21\xb6\x67\xed\x76\x25\x04\xd8\xf1\x2c\x12\x94\x20\xc0\x02\x28\xf0\xbe\x63\x24\x98\xfe\x73\x6c\x19\x00\x12\xee\x1a\xfe\x74\x1c\xee\xa1\xea\xc0\xaa\x1b\xc8\x8f\x01\xe8\xb9\x0e\x09\xb6\x3a\x0e\x86\x6a\x36\x0e\x1d\x3e\x3b\x01\x66\xf9\x52\x24\x74\x8f\xca\xe6\x1e\x9d\x4b\x92\x82\x64\xb2\x2f\x36\xca\x7e\x55\x3c\xfc\x11\x0e\xdb\xaf\x0d\xce\x8c\x84\x53\xe4\x09\x68\x75\xcd\xd9\x7c\x48\xad\x00\x99\x7b\x66\xc1\xb8\xd8\xb4\xea\xba\xdd\xbf\x42\x2b\x27\x7f\x37\x66\x1a\x55\x74\xd8\xc6\x93\x9a\xfe\x9a\x04\xda\x35\x04\x36\x75\xf8\x59\x5d\x22\xae\xd9\xbb\x9a\x51\xcb\x51\x45\x85\xa5\x70\x78\xad\x42\x7a\x7d\x28\xce\x50\xf9\x0f\xe1\x12\x10\x87\xf6\x8a\xa9\x0e\x34\x81\xd4\x3c\xf6\x30\x5a\xe3\xd6\xc1\xbf\xc0\xcb\x24\x19\x83\xa5\x51\x20\x4d\xb7\x6a\xfc\xbe\xe9\x6d\xcc\xc1\x26\x8f\xe2\x62\x5c\x38\x59\x83\xc9\x11\xd0\x90\xba\x5f\x7a\xec\x65\x4c\x60\x1d\x40\x82\x2e\xf1\x8d\xca\xe7\x66\x01\xb7\x44\xdb\x50\xaa\x2d\x72\x3e\xa2\x3c\xc0\x3b\xac\x30\x38\x01\x63\x0a\xa7\xd4\x2d\xaa\xba\x43\xa0\x00\xcd\x70\x1f\x40\xaa\x31\x5d\x7d\x9b\xee\x77\xbb\x2c\x91\xf9\xc7\xcc\x0e\xc1\xb0\xe5\xfc\xe2\x21\x9b\x29\x79\x9a\x62\xd6\x02\x2d\xa5\x8d\xaa\x57\xb8\x10\xe6\xec\x7b\xdc\xdf\xdf\xdd\x65\x46\x06\x28\xab\x46\x19\x76\x96\xd8\x73\x03\x2b\xd4\x01\x64\x13\xb4\x04\x26\x8f\xec\xf7\x12\xcf\x94\xd1\x90\x75\x20\x33\x62\xdf\xe3\xa9\xa2\x30\x15\xb1\x0a\x7b\x45\x77\x4b\xd6\x10\x67\x48\x97\x41\x39\x9a\x6b\x55\xfe\x5b\x22\xbc\x2c\xc7\x8c\x6b\x13\x1d\x6d\x17\x13\x96\x41\x1c\x31\x5d\xee\x9b\x9a\x90\xeb\xb2\xc4\xcb\x2a\xd3\x18\xa0\xc4\xd2\x92\x4a\xda\x54\x69\xde\xe9\xcc\x2d\x9a\x58\x1d\x9c\xc7\x52\xb2\x99\x3a\x9d\xa5\xc7\x20\x5d\x74\x3a\xf1\xd2\xa0\x35\x50\x97\x21\x4a\x5c\xae\x85\xf6\xf7\x34\xdf\x8f\xe5\x64\xad\xd7\xcb\x2a\x53\x36\x9e\x83\x37\x9b\x29\xfe\x98\x8a\x79\x6f\x41\x8b\x98\xa1\x69\x82\xee\xf1\x32\x41\x45\xa7\xb3\x23\xcf\xff\x3d\xbe\x6f\x1c\xd1\xbd\x1d\x51\x82\x7c\x4c\xa4\xb7\x2a\xca\x39\x9d\x89\xf8\x3e\xd9\xd0\x59\x9c\xdb\x41\xd5\x6d\xcf\x3e\x32\x4e\x22\x5d\x8b\x0d\xd2\xfb\x40\x38\xb1\xfe\xf7\xe6\x29\x38\xe6\xe3\x24\x4a\x39\x89\x32\xb5\x58\x91\xb1\xb9\x8e\x66\x8c\x83\xfb\x2e\xc5\x62\x88\xda\x5d\xc7\x9a\x2e\x34\x07\x80\xaa\x90\xc2\xa9\x20\xef\xb5\xd9\x50\x1c\xe0\x4d\xd3\x04\xad\xe2\xb2\xae\x05\xe8\x25\x48\xa4\x29\x41\xa5\x3c\x9a\xf5\xda\x5e\xf0\xa2\xe5\x85\xd6\xef\x76\xb9\x32\x1a\x18\x73\xff\x3e\x35\xf8\x35\xe8\x8e\x33\x23\x67\x4f\x9d\x9c\xbd\x34\xd7\x55\x45\xe2\xde\x02\x8b\x0e\xf0\x18\x13\x70\xf1\x19\x5a\x49\xc0\x90\x6c\x36\xb2\xc7\x2f\xec\xf8\x06\xe0\xe2\x68\x71\x3a\x8b\xb9\x5b\xbe\x27\x20\x5d\x52\xcc\xc7\x0e\xc7\x9a\x24\x01\x3d\xb1\xe5\x98\x98\xdb\xad\xc5\x7b\x4b\xb6\x8c\xb5\x71\x02\x9d\xc5\x80\x0b\xc0\x85\x80\x31\x71\xae\x5d\xc0\x49\x81\xc2\xb7\xaa\xf7\x48\xe8\xff\xa5\xc4\x5b\xb2\x85\x80\xa4\x95\xe2\x12\x4c\x54\xd4\x56\x33\xb8\x05\x04\x9f\x0e\xa6\x8e\xc0\x2d\x26\xa7\xad\x79\x24\x0d\x17\xb6\xf3\x05\xf0\xb4\x41\x0e\xe0\xa1\x14\x8f\x27\xfb\x6c\x77\x77\xdf\x38\x67\x2c\x3a\x1d\x02\x9e\xdc\xe4\x78\xe5\xb8\x3d\x8c\x7c\x15\x4e\xaa\x84\xe6\xb2\xdb\x59\xbc\x4a\x46\x74\x9c\x2b\x13\x14\x35\x77\xc3\x9a\x64\x23\xd7\x79\xca\x71\x3e\x19\xa6\xca\xc4\x36\x87\xb3\x97\x3e\x73\xf6\x7e\x61\xab\x28\xa3\x59\xf1\x07\xe7\x39\x8e\x14\x6c\x75\x3b\x8f\x94\x8e\xd3\x2b\x70\xf1\x4d\xa7\x4a\x4e\x4e\x04\xe1\x65\x24\x58\x54\xa6\x82\x96\xb3\xc7\x28\xcd\xf3\x88\xcd\xe0\xf0\x35\x9e\x4a\xe5\x33\xa1\xdd\x25\xdd\x76\x2f\xfa\x48\xcb\x12\xc8\x6f\x65\x1a\x19\xb5\xbb\xa9\x3b\xa7\xb5\xfd\x2b\xa7\x56\x73\x30\xde\x27\xe8\xf0\x7f\x66\x2f\xf6\xa9\xb0\xb7\x75\xf6\xe9\xe2\xc3\x91\x0a\x7f\x04\x19\x7c\x93\xb1\x4a\xb6\xff\x6f\x1b\x8c\x9d\x3e\x8b\xd1\x69\x78\x62\x58\x3a\xb4\x82\xa4\x39\x86\xce\x8a\xe7\x98\x03\xfa\xba\x0d\x59\xa3\x7f\x0f\x47\x6d\x0b\xb2\x65\x59\xe9\x5a\x05\xee\x23\xa2\xdb\x90\x29\xfb\x68\xf5\x03\xb5\xe5\xb2\xb7\x7b\x0f\xbd\x6f\x4a\xa8\xb9\x33\x40\xa9\xd5\x34\xac\xb8\xea\x94\xd0\x16\x94\xa9\x8a\x14\x82\x8c\xd1\x9b\x9c\xbc\x7b\xfc\x74\xf1\x21\xa8\xd1\x6d\x46\x02\x68\x8b\xc0\x7d\xc4\xad\xff\x84\x7d\xf1\x96\xef\x77\xbb\xc2\x68\x69\xd3\xb1\x50\x46\xcc\x06\x6f\x99\xe1\x71\xa8\xa8\x17\xe0\x87\x5a\xde\x30\x95\xf7\xec\xec\x5b\xd0\xc8\x69\x32\x16\x4a\x59\xbc\x54\x43\xcc\x1a\x60\xfc\x14\xcd\x50\x6e\xaf\xfc\x39\xce\x34\x95\x35\x1f\x95\xf1\x3c\x19\x66\xa1\x08\x21\x6b\x90\x1f\x94\xc6\x38\x3d\x80\x95\x62\xd2\x62\xeb\x75\x56\xc3\x13\x96\xc9\x28\xd6\xe4\x66\x90\x1b\x67\xc9\xb0\x9a\xb4\x34\x3b\x7e\x15\x87\x06\x7f\x34\xf0\x44\x82\x0a\x7d\xc4\xdd\x9a\x7d\xb0\x02\x59\xe2\x6c\xa5\x2c\x1f\xca\x8a\x54\xb7\x9b\x92\xc1\x1d\xab\xaf\xd8\xed\x92\x58\xdb\xde\xb1\x27\x00\xee\x74\x9c\x00\xb8\xdf\xd2\x49\x62\xbd\x0e\x3e\x0c\x34\x7b\x37\xf4\x84\x82\x8a\x20\x41\xb1\xd0\xb8\x1b\x41\xb1\x75\x04\x14\xf7\x11\x73\x56\x87\xf4\x2d\xdb\xef\x76\x69\x62\xed\xf6\x94\xbb\x14\x32\x4e\xd5\x68\x52\x37\x9a\x8d\x1d\xcd\x3d\x04\xb9\xdc\xa2\x6f\x63\x04\x1a\x79\x5a\x8a\x06\x7b\x1a\x4d\x3d\xfa\xaa\x37\x2c\xcf\x2e\x6b\x89\x5b\x94\x91\xb5\x6b\x40\x1d\x84\xd3\x71\xe2\x02\x55\x1e\x6d\x6c\xe6\xb7\xde\x50\xda\xd8\x28\x18\x33\xa5\x9c\xdd\x5a\x02\xd8\x9e\x13\x65\x8f\x6e\x63\x5f\xe8\xaf\x25\x11\xb1\xd2\xdf\xe1\x4d\x7c\x3d\x5e\xb1\x6e\x37\x8c\x43\x77\xfa\x16\xe9\x32\x26\x28\xde\x8a\xc8\xd9\x8b\x19\x15\x78\xa7\xbf\xcf\xbf\xc7\xfd\x4e\xa7\xd8\xdf\xdd\xe5\x8e\x37\xaa\x71\x37\x43\xed\x11\xe5\xa0\x1a\x3d\xa5\xe5\x90\x6d\xe4\x0e\x51\xee\x3a\x28\xf8\xc4\x5a\xaf\xdb\xc1\x8b\xf2\x56\xe2\x7b\x65\xd9\xfd\x2e\xd9\x80\x18\x97\x3f\xe7\x08\x29\xaa\x8e\xc4\x82\x1b\x02\x45\xbd\xe3\xe6\xad\x5d\x1d\x87\x71\x9c\x3f\x4b\x23\xce\x28\xf7\x0c\xb0\x9c\x6a\x7e\x21\xc1\xfe\x8e\xd0\xbc\xe5\xea\xbe\x08\x90\xc1\xea\x47\x0d\xaf\xe5\x1a\x5e\xab\xdb\xa8\xd9\xcc\x80\xd5\x6d\xd4\xfa\xe1\x60\xb4\xcd\x01\x2d\x80\x6b\xed\xba\x69\xfa\xe8\xe3\xf7\x21\x08\x62\x09\x62\xe3\x9b\x49\xc5\x12\x19\xaa\x13\xec\x42\x07\xbc\x82\x82\x31\x43\x85\xcf\x98\xf6\xb4\xe7\x65\x25\xd6\xa6\x84\x85\x36\x1f\x4d\x7c\x3a\xda\xbb\x56\xb2\xd6\x4f\x17\x1f\x62\x06\x8e\x08\x7b\x19\xcd\xdc\xcc\xc4\xb4\x7e\x88\x64\x26\xc1\x6c\x57\xfc\x21\xed\xf4\x13\xc3\xac\x74\x0b\xc3\x12\x44\xb4\x78\xbe\x62\x9b\x33\x65\x8b\x65\x4e\x80\x3b\x86\x98\xdc\x16\x75\x3d\xfe\xaa\x2b\x6e\xfe\x18\xec\xb0\x5b\x22\xae\xea\xba\xff\xa0\x73\x65\xfd\xed\x79\xe8\x9c\x5e\x5d\x62\xd6\xd7\x98\x95\x24\x1b\xd9\xfa\x33\x5e\x80\x60\x6f\x9c\x1a\x5c\xca\xc8\x52\x8c\x87\xaa\x53\xf2\x00\x90\x49\x03\x58\xed\xeb\xd9\xca\x48\xb8\xe6\x04\x5d\xc6\xbe\x1d\x55\xb8\x71\x1c\xd6\xe9\xf3\x68\x82\x5e\x1d\x14\x19\x44\xad\xfb\xe7\x76\xae\xc6\xa5\x6d\x7f\xba\xf8\xa0\xd0\x63\xb0\x41\x29\x98\x88\x1c\x06\xda\x36\x5a\x5e\xde\x6c\x0a\x37\x8d\x2d\xbb\xaf\x6a\x8a\x1a\x4a\x2d\xa2\x32\x05\x74\x7c\x33\x91\x9b\xa6\x59\x19\x56\x41\x99\xea\x38\x42\x80\xe9\xf6\x43\x88\xe7\xc5\xee\x12\x01\xe6\xd5\x54\xfb\x43\xf5\x75\x02\x36\xaa\xfa\x86\x1d\xf4\x8c\xd2\x1c\xa2\x58\x7b\x79\xab\x42\x11\x09\x66\x47\x8d\x5f\xc6\x8f\x93\xa1\xd7\x9f\x14\x57\xfa\xca\x90\x48\x50\x89\x97\x71\x00\x60\x50\x1a\x6e\x10\x3a\x8b\x3f\x18\x8b\x33\x35\x7d\xcc\x7b\x49\x00\x5b\x28\x8d\x1f\xa9\x2a\xa7\xc0\x3b\xd2\xa5\xe6\xac\x9a\x49\x5f\x35\x41\x35\xeb\x29\xab\x71\x40\xeb\xf5\x56\x58\x29\xa9\x3b\x8b\x91\xbe\x08\x51\x1b\xe1\x5b\x8e\xd2\xc4\x98\x3e\x88\xd5\xf2\xbd\xe6\x1c\xc6\xe9\x16\xa8\x97\x27\xcd\xb8\x80\x75\xf6\x85\x83\xb3\x9f\xa2\xe7\x10\x08\xe7\x3b\xe6\x9f\x82\xf2\x59\xb6\x8a\xd1\x10\x34\xcf\xa1\x4a\xdf\xb1\xca\x64\x4c\x40\xdd\x73\xd2\x80\x57\x3d\xb3\x09\x3a\x9d\x98\x37\x2c\x67\xd2\x7c\x91\x70\x3b\xd1\xd5\x59\xd8\x72\x8b\x3a\x89\x08\xdf\x52\x10\x73\xc4\x3d\x33\xce\x17\x6f\xa0\xc2\x5e\x96\xde\x0e\xe5\xa0\xcc\x6a\x6f\x8c\x4b\x22\x44\x4e\x7c\xe3\x38\x5d\x6d\xf4\x30\x27\x85\x9f\x4e\xcb\xc8\x54\x97\xc9\x4b\x85\x6a\x56\x9b\x0a\x42\x7d\xf4\x85\x42\x38\x1e\xcb\xdd\x4e\x91\x19\xc6\x36\xa4\x22\x85\x50\x0b\x12\x4e\x64\x6c\x2b\xa2\x52\x13\x1c\x07\x62\x09\x65\xd6\xb2\x33\xd0\xf2\x00\x49\x64\x8e\x85\xc7\x51\x61\x5a\xf6\x6e\xf9\xaa\xb4\xd3\xa1\x35\x1d\xd1\xc0\x77\x09\x08\x3a\x84\xe2\xba\x84\x94\x8b\xb3\x0c\x33\xa6\x44\xa8\xfd\x49\xde\xf0\xb4\xb8\x55\x06\x04\x91\xd1\x36\x6d\x39\xef\x00\x0a\x2e\xf9\x16\xc5\x8a\x22\x3e\x51\x35\xa4\xe3\xd4\x13\x1b\x00\x13\x50\x9f\xa0\xf1\x04\x69\x87\x1e\x15\x9f\x6f\xfd\x64\x14\x9b\xf6\x0f\x84\x20\x8b\x25\xf4\x40\x5e\x2d\xde\x72\x09\x06\xe2\x65\x4d\x7f\xdb\x1b\x2c\x19\x36\x95\xdd\x5a\xee\xa4\x72\xa9\x0b\x70\xb7\x17\x00\x98\x3a\x8a\x50\x80\xfd\x2b\x6f\xd8\x7d\x0d\x18\xc7\x16\xd3\x2a\xc3\x27\x05\x96\x13\xe8\x6d\x94\x11\x2b\xa2\x0c\x82\x3e\x41\x38\x2d\xc5\x6c\xda\x37\x9b\x32\x1c\x86\x8b\xb5\x20\xfc\xa9\x0f\x15\x2b\x7c\xf8\x07\x8c\x0d\xe2\x59\x3f\xc7\x8d\x8b\x87\x9b\x69\x9f\xba\x3c\xf6\x21\x26\x89\x9c\x6c\x45\x0d\x39\x44\x50\x69\x7b\xd7\xed\x3f\x9f\xa5\xb5\x6a\x36\x80\x0d\x3d\xd8\xe9\xa3\x76\x80\x5e\xb6\xd1\x58\x5b\x38\x57\xd0\xce\xe6\x0a\x2c\x18\x53\xe0\x8b\x20\x51\x45\x3e\xdd\xfd\xe0\xce\x30\x49\x90\xde\x4e\xfe\xe2\x5d\x5d\x1c\x9c\x5e\x9e\x5c\x9d\x9c\x9d\x46\xef\xcf\x3e\x9e\x7f\x38\xba\x3a\xea\xb5\x13\x14\x70\x3b\x8d\x2d\x91\x42\x1e\x52\x45\x8f\xc7\xa9\x6f\x11\xc7\x12\xc7\x25\x0f\x8c\x1e\x5b\xa1\x1e\xb2\x8e\x6e\x9e\x22\xe2\xf9\xfa\x76\x4d\x20\x62\xac\x5b\x37\x8a\xff\x93\x02\x72\x12\xac\x7f\x33\x52\xe2\x34\x85\x97\x29\x17\x30\x7b\x30\x61\xa5\x8f\x01\x69\xeb\x7e\x75\x47\xb1\x1e\xf9\x42\x05\xc9\xfc\xab\x8a\x77\xbb\x89\x0a\xc3\x14\x53\x9b\x41\xde\x42\xaa\x7b\x56\xfc\xed\x03\x29\x0f\x62\x39\x61\xdb\x85\x24\x7a\x25\x00\x0b\x53\xe4\x1c\xf8\x3a\xca\x14\x9a\x90\xf9\xe4\x7f\x2c\x92\x00\x1c\x59\x4a\xdf\x0d\xa1\xe5\x31\x05\x88\xcf\x61\xaf\xd3\xf8\xac\xb7\x2a\x34\x69\x6f\x9d\xb5\xc1\x29\xf6\x66\x00\x68\xf3\xea\x04\xd8\xde\xc1\x1c\x40\x16\x37\x05\x9e\xe0\xeb\x5b\x86\x3b\x40\x22\x9c\x73\x75\xbc\x32\xbd\x98\xd5\xa6\xdd\xbe\xd5\x41\x7e\xce\xf8\x27\x55\x20\x96\x37\x7c\x58\x58\x92\xf4\xf5\x06\x88\x2a\xf8\x77\xd6\xac\x4b\x41\x95\x7d\x47\x36\xad\x92\x27\xb5\x0f\xbd\x69\x4f\xb7\x31\x55\x02\x74\x64\xb5\xf1\x80\xd2\xb7\x53\xc6\xf2\x70\x06\x84\xaf\x86\xce\x8d\xd7\x72\x15\x44\x1b\xcb\x95\x26\x8e\x8e\x50\x5e\x97\x6a\x20\x8a\x84\xa0\x23\xf0\x0e\x66\x1b\x6a\xa3\xb1\x30\x3e\x89\x90\xae\xc9\x78\x5f\x32\x80\x6b\x3b\x1b\x09\x86\xd0\x38\xf5\xdb\x39\x1d\x5a\x9e\x96\x62\xe1\x44\xb0\x8e\x71\x4c\x01\x04\xf1\x60\x2f\xc2\x0a\xc2\x49\x92\x0f\x71\x01\xf2\xd1\xc2\xdd\x12\x1e\x43\x99\x29\x0d\x19\xa7\xa5\xeb\x55\xa3\x13\xed\xd0\x65\x8d\xd5\xb4\x38\x38\xc1\x00\x9c\x64\x36\x78\x88\x53\xf4\x7c\xd3\x4e\xd8\xb0\x2a\x25\x25\x66\x79\xf8\x9e\x52\xc7\x48\x54\x34\xcc\x1b\xd9\xc3\x43\x39\x11\x68\xa7\x2f\xa7\xb7\x02\xf4\x9e\x81\x91\xa4\xa6\xa6\xe5\x5e\x4b\xfc\x14\x1e\xb1\xe1\x78\x82\x14\x10\x84\x27\xb5\x7c\xf2\xd1\x82\x16\xf9\x02\x20\x62\x38\x9e\x6c\xd0\xca\xb8\xf3\x52\xde\xda\xd2\xc6\x38\x1d\x39\x66\xe3\x62\x82\xa6\x38\x1d\x17\x93\x56\xde\xe9\x68\xef\x28\x18\xe3\xa9\x7a\x02\xa3\x28\x79\x8f\xf1\x51\x5c\xda\x13\x0d\x13\x36\x4d\x50\xde\xe9\x94\x06\x76\x1b\x51\x76\x9e\x24\xc3\xd5\x7a\x9d\x9b\xb5\xda\x91\x75\xe9\xe7\x51\xbc\x52\x6a\xd9\x15\xd8\xa3\xeb\x4b\x86\xa5\x07\x29\x8d\x70\x4e\x0d\xc2\x0c\x00\x51\xe7\xde\xcb\x8c\xa5\xd6\x07\x39\x2a\x8b\x70\x69\xbe\x27\xae\xb5\xaa\x41\x31\xd2\x19\x7a\x9c\xdc\x13\x5e\x42\x8a\x5c\x48\x87\x7f\x34\xea\xc3\x10\xe7\x65\x01\x78\xd8\x7e\x54\xb8\x60\x29\xab\x5a\x2e\x80\xae\x32\x50\xc8\xc6\x2e\x7d\x3f\x55\x3a\x1f\x36\x40\x5d\x31\x4e\x27\xad\x55\xcc\x90\xd3\xa1\x36\x4a\xa8\x35\x11\x0d\x20\xf4\xca\xda\x44\x75\x85\x85\xda\xd6\x4d\x7e\xa2\xd6\xeb\x40\x25\x5b\x3b\x62\xae\x72\x49\x0d\xaf\x03\xcc\xdb\xd1\x14\x93\xe7\xdc\x1b\xa1\x19\xf6\x3d\x14\xf1\x4e\x67\x87\x3c\xeb\x96\x08\x65\x98\x54\x89\xc3\xd0\xcb\x11\x47\xf3\x6a\x9d\x4d\x55\xd6\x3c\x19\xb5\xa6\xeb\xf5\x6c\xbd\xce\xd6\xeb\xf9\x48\x8f\x09\x72\x48\x6c\x32\xd7\xa2\x47\x87\x5f\xe6\xa0\x00\xc0\xb7\x5e\x06\x35\xf2\xca\x2e\xb5\xf2\x70\x27\xaa\xd4\x51\x91\x28\x5f\x28\x92\x00\x1b\x17\x93\x4e\x47\x47\x94\x94\x2f\x9a\x5f\x65\x04\x61\xe1\x1d\x00\x80\x7f\x5b\x37\x24\xf0\x47\x14\xf1\x89\x8a\x7f\xc0\xb7\xb8\xff\xf2\x2d\xe0\x61\x97\xf5\x41\x2f\xc2\x44\x7b\x02\x47\x4a\xd6\xbd\x37\x95\xdb\x8c\x8d\x57\xbd\x3b\xf2\x38\xc1\x2b\x1d\xca\x8c\x6b\x47\x83\xab\x9e\x6e\x61\x5b\x73\x95\x82\x56\x17\x51\x31\x4f\x43\xea\x7e\xbb\xa6\x6e\x8d\xda\x53\x57\x33\x67\x0b\x83\x57\xf3\x67\x31\x6d\x73\xf1\x55\x45\x37\xc1\x0e\x87\x05\x36\x55\x56\xfc\x28\xf8\xd4\x2e\xe9\x74\x7c\x4d\x0e\xcb\x29\x45\x55\xab\xf1\xc6\x36\x13\xe0\x1e\x12\xed\xa8\xce\x3f\xf8\x2a\xe4\xde\x46\x4d\x4c\xbd\x13\xf2\xca\xf5\x7d\xe2\x39\x4f\x13\xcf\xf5\x8c\x36\xf6\x0c\xcc\x2b\x50\x21\xfb\x21\x18\x0e\xd0\x7b\xaf\x17\xcd\x3c\x88\xed\x17\x16\xda\x46\x9b\x57\x20\x34\xc7\x7d\xe5\xab\x32\xa6\x38\x95\x78\x5c\x1c\xde\x75\x63\x3e\x49\xe4\x2d\xad\x95\x59\x98\xe2\x3e\x01\x6e\xc8\x7c\xe5\xd9\xfa\xf1\x48\x91\xb1\xa0\x0c\x28\x36\x31\xd9\xc2\x87\x33\xae\x93\xc2\x12\x71\x8a\x82\xab\x57\x61\x76\xea\x92\xa8\x7a\xf8\x81\xb1\x76\x3a\xf3\x66\xc2\xd6\x5c\x21\xde\xd5\x51\x53\xc7\x16\x56\xad\xb7\x66\x99\xe1\x5b\x43\x6a\xf2\x43\xfd\xc7\x89\x51\x3c\xdf\x2a\x66\xd4\xba\xac\xa0\x25\xf0\xac\x68\x51\xc9\xc5\xe4\xda\x86\x37\x99\xd5\xbd\x7f\xc6\x3b\xbf\x26\x84\x3d\x46\x53\x4c\x12\xe3\x98\x48\x5b\x37\xfa\x32\x92\x2b\xb6\x25\x86\xc3\x3f\xcb\xd7\xeb\x36\xaf\x30\xa3\x58\x87\x58\x6a\xec\xb3\x95\xad\xec\x0c\x12\x0d\xfb\xc3\x31\x69\xd6\x0b\x50\x4c\x0b\x92\xd1\x54\x78\x57\xc9\xbf\x68\x50\x51\x63\xbf\x54\xf8\x46\xb9\x3b\x67\x9c\x94\x5b\x63\x5e\xd5\x38\xff\x1c\x8b\x91\xa8\x70\xf9\x8b\x8a\x8f\xbe\xd0\x67\x53\x31\xee\x5b\xda\xdf\x30\xbb\xc0\x4a\x81\x16\xb7\x51\x1a\xe9\x0e\x04\x26\x0b\x46\xf2\xd2\x84\xde\x78\x7c\x30\x8a\x08\x32\x06\x27\x0d\xb4\xc9\x7a\x1d\xca\x9d\x0c\x98\x69\xe0\x91\x31\xdf\x71\x96\x08\x31\x05\xe1\x7b\xcf\x4a\xad\xf7\x2c\xdf\x75\x56\xaa\x66\x12\x8a\xfc\x4c\xc5\x7c\xab\x98\x78\xcb\x8e\xb7\xcd\x05\x62\xa0\xff\xe5\xdd\xe1\xf4\x1f\x72\xb0\x14\xc3\x74\x0c\xd1\xa7\xe8\x78\x30\xd1\x2a\xcd\x55\x7e\x23\x60\x6a\xe5\x73\xd2\x27\x34\x93\x98\x41\x86\xfb\x68\x6e\x30\x7d\x5f\xc1\x7f\x3f\x7b\x3b\xdf\xef\x76\xb5\xbe\xe5\x32\xc8\x32\xce\x26\x68\x81\x97\x9e\x25\x54\xd2\x5a\xc5\x33\xb4\xb0\x77\xff\x2c\x40\x3e\xd3\xaa\x66\x82\xc3\x29\x09\x9a\xc1\x4c\x42\x47\xb7\xcb\xb9\x9a\x79\xaa\x36\xe4\xc8\x37\x4a\x0a\xc6\x8f\x13\xcd\x7b\x57\xec\x1b\xab\xf2\x10\x4c\x53\xa1\x14\xcb\xb9\xe5\x35\x36\x74\xcb\x23\x8f\xe5\x46\xf7\x6b\x85\x30\x33\xde\x19\x83\x08\xd3\x35\x09\x8d\x42\xf0\x1b\x98\xd8\x75\xfc\xdb\xd7\x76\x2a\x13\x08\xcc\x29\x37\x04\xc5\xb9\x0d\x2a\xf6\x96\x76\x3a\xe9\x78\x6a\x05\x3a\x64\xbf\xdb\x9d\x26\xfb\x74\x16\x4f\x31\xb6\xf9\xc2\xd6\x67\xea\xe6\x68\xcd\x7c\x2e\x6d\x6a\xdd\xa2\x4d\xbb\x26\x18\x8a\x97\xa0\x15\xac\x3e\xc4\xde\x72\x94\x6e\x39\x6a\x9a\xfa\x33\x94\xa3\x52\x07\xab\xf5\xaf\x5b\xbf\x4d\xa5\xb4\xc6\xd7\xeb\x9d\xcc\x88\x7f\xb3\x96\x76\x0e\xb5\x69\xad\xe2\x39\xe2\x46\x09\x3c\x20\x69\xec\xa9\xb8\x97\x08\xf8\x22\x59\x54\x11\xf0\xfb\xa4\xd3\x99\x37\x25\xc6\xf3\xf1\xfd\x04\x2f\xc6\xf7\x8e\x40\xcc\x3a\x9d\x9d\x25\x34\xe5\x2f\xfc\xff\xf2\xb1\x76\x47\x3a\x80\xff\xe1\xb6\x8b\x09\x82\xd3\x0e\x31\x84\xd4\x55\x5b\xf5\xbe\xf7\xbf\xd1\xb7\x6f\x67\x9f\x0f\x90\xba\x3b\xb5\xed\x8e\x89\x61\xf0\xd5\x44\x82\x80\x88\x0e\x7e\x10\x08\x3f\xe2\x43\x18\xd7\x81\x57\x22\x3a\x58\x26\x53\x80\x49\x5d\x6b\x41\xdb\xfb\x54\x39\x6f\x74\xd2\x89\xf5\x3a\x6e\xcc\xa0\x8c\x26\x37\xff\x40\x80\x88\xb4\x4c\x97\xf8\xaf\xf2\x21\xcf\xf1\x7b\xf5\xaf\x24\x7f\x19\xfe\x55\xa2\x90\xe9\x94\xe0\x13\x04\xfe\x4d\xe6\xf8\x54\x3f\x98\x1c\xc7\xe0\xae\x01\xf8\x4d\xf8\x2b\x82\xb9\x21\x1c\xbf\x83\xa7\x82\x65\x84\xce\x1e\xf1\x39\x02\xa5\xd5\x19\xbd\x5d\x71\x82\x25\x5a\xca\x0a\xbc\x24\xf2\x7f\x36\xc3\x0b\xe2\x3c\x3e\xe0\x9f\x90\x91\x92\xe0\xdf\x94\xef\x39\xfc\x23\x22\xbd\x19\xcd\x05\xe1\xf8\x17\xe8\xee\x63\x21\x09\x74\x58\xb1\x2b\x1d\x15\xbf\x67\x2d\xf3\x7b\xd3\xb4\x14\xcd\x71\x26\x28\x7e\x5a\xd0\x2f\xb4\x18\x36\x7a\x47\x61\x1a\xce\xb2\x42\xf7\x4b\xbd\xcd\x66\xc8\x0a\x14\xb0\xbf\x63\x50\xd3\x22\x68\x30\x41\x36\x88\xf9\xcd\x98\xf8\xe4\xd6\xc9\x83\x8d\x50\xee\x07\xde\xbb\x7a\x5c\x12\xad\x8a\x6d\x6a\x54\x71\xbc\x6f\x48\x94\xda\xe8\xfe\x56\x78\x55\x68\xb7\x3d\x14\x73\x08\xe3\x07\x6e\xea\xe5\x23\x88\x41\x77\x55\xc0\x2f\x13\xf4\x4a\x00\x29\xa2\x39\x80\x1b\xc4\x66\xb3\x61\xe3\x15\xa4\xea\x6c\x39\x5d\x02\x55\x25\x68\xb2\xb9\xba\x6c\xb4\x2d\xaa\x63\x64\xc6\x0c\x0d\xb4\x7b\x5d\xdd\x83\x0d\xd2\xf3\x34\xac\xc9\x6c\x15\x36\xa5\x5a\xd2\x01\x08\x69\xe2\x7b\xb3\xab\xc4\xcc\x8b\xfb\x88\x8e\xd9\x24\x01\xcf\x79\x9b\x4d\x2b\x5c\x7b\xaa\x95\xc8\x9e\x28\x68\x45\x43\x2c\x9b\x9d\xc1\xc6\x37\xbd\x34\xf3\xbf\xb7\x83\x6b\xc0\xc3\x06\x7b\x92\x3d\x91\x3f\x58\x6c\x68\x0f\xf6\x49\xcc\x12\x7d\x87\x8d\x27\x95\xc0\x1a\x72\x1c\x72\x82\x75\x90\x57\x88\xc9\x3c\x24\x68\x99\x3e\xe6\x2c\xcd\x86\xe0\xa6\x42\xf4\xae\x6f\x57\x34\xfb\x0b\x79\x44\x34\x93\x6f\x34\x43\x44\x76\xfc\x54\x65\xce\x88\x48\x69\x2e\x3f\x70\x52\xae\x72\x81\xc0\xf3\xdd\x49\x36\xe4\x92\xfe\x95\xb9\x73\x09\x3f\x64\x06\x78\x40\x82\x2e\xc8\xa5\x48\x17\xcb\xe1\xa1\xa4\xcf\x0a\xf6\x10\x27\x08\xe4\x5b\x43\x36\x6e\xbb\xe1\xef\x3e\x50\x31\xdf\x05\x4d\xf3\xf6\x64\xe4\x14\xfc\x4d\x45\xda\x2b\xdb\x26\xe9\x74\x4a\x22\xae\xe8\x82\xb0\x95\x08\x74\x86\xcc\x62\x10\xdc\xdf\x27\x2e\x2a\x0f\x31\x0c\x55\x81\x21\x5a\x22\xc7\xa2\xa7\x87\xdc\xe2\x3d\x39\x58\xcc\x7b\x77\xe4\xb1\xcb\x7b\x34\x43\x3a\x2a\xcf\x0f\x7e\xb2\x1e\x22\xe2\xca\xa0\x11\xd8\x2d\x46\x35\x1e\x52\xd4\x5b\x82\x98\x15\xe2\x09\xed\xa4\xc8\xb4\x94\x6c\x5c\xf4\xd8\x4d\x82\xfe\xad\x1f\x06\x2f\x31\xaa\x23\x0d\x6e\x56\x40\xef\xdb\x57\x9e\x57\xd6\x6b\x66\x07\x90\x96\x43\xc3\x64\x7a\x3c\x45\xc2\x5d\x9e\xa0\x1b\x81\xb8\x1f\x7f\x24\x79\x0a\xc2\x7f\x98\x78\xe6\x61\x0b\x41\x8b\x9d\x0e\x57\xd1\xa7\x82\x54\x0b\xfc\x30\xce\x47\xe1\xa9\x54\x56\xf7\xd7\x80\x74\x8d\x20\xee\x85\xd9\x2d\xc9\x70\xcf\xff\x26\x17\xd7\x18\x79\x82\xfa\xc6\x22\xc8\x9c\x0c\xef\x63\x23\x44\xf4\xae\x23\x08\x8a\x8b\x31\x87\xaa\x79\x32\xcc\x14\x8d\xe8\x93\xf7\x7e\x3c\x78\xed\x52\x6d\x03\x0f\xc3\x06\x97\x35\x7c\x54\x3d\xec\x4c\xc1\xeb\xba\xf9\x36\x38\xf7\xa7\x4d\xe6\xae\xfc\xf1\x89\xd8\x38\x1a\xa8\x30\x92\x31\xea\x94\x27\x37\x9b\x98\x23\x11\x8e\xa3\x58\xaf\x63\x15\xa5\xa0\x3e\xa0\xda\x88\x6c\x66\x35\xa6\x04\xee\x41\x7d\x38\x5a\x3b\x45\xa7\x43\x15\x57\x4a\x65\x50\xd6\xde\x44\x8d\x5b\xd6\xaa\x02\x90\x04\x41\x53\xcc\xb6\x93\x6b\x92\xa8\xef\x36\xc2\x0c\xd5\xd3\x13\x17\x58\x24\x3a\xc6\xb4\xc4\xa7\xcd\x06\x55\x52\x5d\xff\x72\xc0\xd4\xaf\x43\xc1\x66\x10\xa5\xca\x13\x27\xe6\xa4\xd0\x73\xc2\x42\x3f\x18\xb2\xb3\x2c\xd9\x98\xbd\xb8\xd1\x7a\x2f\x41\xe0\x95\xe4\x89\xd8\x9d\x22\xf7\xa1\x79\x8e\x89\xdd\x2c\x28\x8c\xe1\xb1\xac\xfa\x3e\xd6\x7b\x4e\x92\xd3\xa6\x0c\x16\xc8\x24\xe3\x01\x32\xb9\x56\x37\xe5\x94\xd3\x1b\x17\xf8\x75\xc4\x7a\x0e\x4c\x75\x3a\x2b\x79\x23\xe6\x33\x9a\xe7\x24\x6b\x23\x92\x0c\xcd\x6e\x79\x44\xc4\xb7\xdb\x5e\x3c\xdb\x03\xd5\xea\x1e\xf2\x3b\x63\x2a\x9a\x87\x15\xdd\x57\xc5\x7e\x61\x2f\xc1\xc4\x4e\x5b\xc6\x92\xca\x79\xa2\xe3\x74\x82\x85\xfc\xeb\x0e\x26\x98\xc3\xc3\xde\x04\x17\x30\xd8\x14\x66\x52\xf7\xc9\x1f\x84\x6b\xfa\x31\x40\xef\xfc\x46\xb9\x1d\x0f\x44\x1b\xac\xcc\xd0\x00\xb6\xb3\x37\x4f\xc3\xb6\xc2\x8f\xd4\x94\xa1\xbe\xaf\x1c\xe7\x18\xf6\x88\x82\xb6\xa3\xb9\x5a\x54\xa4\x54\xe1\x22\xa5\xe2\xd7\x49\x81\xc5\xb8\x9c\x80\x5a\x54\xd9\xe5\x13\x54\x8c\x6e\x63\xc5\x02\x4d\x93\x21\x8d\x53\x89\xe9\x36\xac\x21\xee\x7b\xe1\x82\x6e\x6b\x84\x22\x4a\x71\x13\x60\x40\x25\x56\x36\x14\x69\x22\xf7\x31\xc5\x3c\x2e\x3c\x99\x77\xa9\x62\x7a\xae\x14\x0a\x41\x71\xd1\xf2\x58\x86\x6a\x72\x00\xbd\xc1\x58\x8c\x16\xb1\x40\x15\x74\xe9\xc0\x28\xa6\x95\xd1\xd4\x60\x4e\xd3\xb4\x50\x2a\xb4\x9a\xea\x48\x45\x54\xa6\x0b\x62\x72\xf6\xda\x49\x32\xdc\x81\x3b\x1c\x6a\x64\xc9\x30\x1d\x65\xb1\x40\x34\x19\xca\x54\x09\x6e\xe1\x65\x4f\xb1\x8e\x16\xf0\xe6\x2d\xe8\x4d\x18\x66\x51\xb1\x7d\xec\x32\x0e\x14\x6b\x7b\x87\xac\xd7\x7b\xfa\x51\x58\x54\xa3\x7a\x08\xa6\xf3\x94\x16\x26\x6e\x99\x0a\x86\x00\xbf\x8a\x42\x09\xf6\xa1\xa7\x05\xac\x88\x15\x77\x8d\xc4\x53\xc4\x2d\x57\x49\x2f\x7c\xd3\x8e\xaa\x34\x47\x7d\xb7\xcf\xc9\xbd\xe3\x65\xf9\xd0\xa7\xc4\x30\xa0\x11\x19\x8a\x56\x1d\xa4\x5b\x28\x74\x1b\xcb\xed\x53\xa2\x14\xae\x09\x0b\xae\xef\x5f\x8c\x9a\x63\xfd\xbf\x1a\x0d\x9f\xf7\x81\x8d\x9b\x52\xb3\x31\x1e\xd6\x20\x44\xc1\xd4\xea\xe2\x5f\x83\x02\xcf\x59\x71\xa1\xc8\x06\xed\x04\xe1\x9a\x96\x9f\x4a\x5a\xdc\x2a\xc2\x58\xd1\x06\x18\xe3\xcb\xda\x57\xcd\x87\x77\xae\xe8\xe4\x35\x6c\x72\x15\x54\x28\x82\x5f\x2b\xe4\x19\xe4\xf1\x59\xe7\xb0\x50\xac\x59\x0a\xa4\xcf\xd0\x7a\xdd\x57\x6b\xab\x8f\x94\xe9\x33\x27\x8b\x94\x16\xb4\xb8\xf5\x52\x00\xa2\x79\x9e\xe2\xcd\xa8\x09\x58\x63\x2a\xfd\x72\x70\x5c\x67\x13\xb6\x90\xcd\x5e\x83\x46\x55\x5d\x4f\x29\x44\x1a\x76\x7a\x93\x16\x92\x19\xe2\x59\x37\x98\x4e\xe7\x47\x85\xe0\x8f\x31\x19\x17\x13\x54\x80\x04\xc8\x70\x3b\xc9\xf4\xee\x78\x95\x03\x8c\x02\xab\x79\xd5\xa5\x5a\xba\xbf\x09\xe8\x2c\xee\x63\xeb\x1d\xce\x8c\x3c\xf0\xe3\x67\x76\xf1\x32\x0e\xba\x4b\x92\xca\xec\x28\x51\x8f\x84\x14\x40\x95\x7e\x4c\x1f\x6f\xc8\xd5\x9c\x14\xe9\x4d\x5e\x17\x6a\xfa\xe7\xb5\x61\xbb\x59\x7b\x97\xfa\x1e\xf1\x81\xdc\x4e\xbf\xa5\x00\x19\xf1\x2f\xe4\x55\xf2\x94\x1a\x50\x06\x37\x3f\x60\x7b\x9e\x07\x65\x35\xb5\x49\xf5\x76\xd1\xd0\x43\xd1\xd4\x07\xc2\x5e\x6b\x48\xb8\x6b\x0d\x71\x87\x52\x34\x50\x92\x34\xa9\x56\x32\x90\xa5\xfd\x52\x5b\x0e\x86\x15\xc5\x93\x87\xa8\x88\xa7\x49\x0b\xc0\x62\x3a\x5a\xc4\xa5\x04\x8b\xf1\x2c\x2e\x91\xc4\x82\x74\x2f\x1f\xa8\xe1\x0f\x1c\x88\x18\xac\x10\x82\xc8\x2a\xe1\x77\x55\x67\x13\x3a\x29\x8c\x37\x42\x89\xa9\x6c\x2d\xee\x7b\x51\x34\xa1\x53\xdc\x4e\xac\xad\xad\xf6\x38\xd8\x88\xfd\x8f\xfc\xf9\x09\xb6\x88\xc1\xeb\x6c\x86\x0b\x98\x70\x6f\x0a\xbd\xcd\x95\x1d\x6c\x65\x93\x06\x87\xca\x09\x1e\xa8\x43\x57\x1a\x00\x56\xa7\x03\x37\xcc\x68\x11\x53\xd9\x87\xb8\xde\x09\xd3\x08\xda\x7a\xd8\x12\xdb\x41\x53\xa8\x36\x33\x95\x63\xb6\xbb\x1b\x1c\xa1\xb1\x98\x60\x0e\x75\xf8\xd3\xff\xcc\xd1\x69\x49\x54\xaa\x46\x4f\xf8\xea\xe5\x0d\x1b\x71\x93\xbc\x9c\x77\xcf\xe6\x6d\x0a\xba\xf0\xad\x63\x51\x37\xf8\x13\x4c\xfb\xd0\x47\x32\x15\xe7\x8b\x6f\x86\xe6\x9b\x43\xa6\x38\x49\x4b\x56\x0c\xb9\x72\x08\x76\x84\x81\xad\x77\xdd\xee\x3a\x62\xbb\xdb\xde\x6d\xa3\x33\xed\x17\xeb\x72\x9b\x15\xba\xeb\x21\xcd\xf0\x99\x89\xb0\xa4\xa8\x0b\x0b\xd7\xeb\x56\x96\x06\x98\x05\x69\x1e\xfa\x85\xc7\x13\x54\xbf\xca\xc1\x5c\x5c\x5f\xe5\x09\x9a\x6a\xff\x62\x4d\x8c\xa6\x4e\x27\x10\xfa\x36\x30\x9d\x7e\x61\x2b\xc5\x6f\x5a\xa6\x65\x09\xb2\x30\x38\x7a\x3c\x72\xac\x94\x12\xcc\xfb\x67\x94\x97\x22\x32\x97\x61\x24\x18\xa4\x1a\xdb\x00\x0f\x25\x69\x27\x1b\xed\x64\xd3\x57\xdd\x25\xa3\xa6\xbb\x71\x67\x00\x00\x55\x54\x80\x85\xd6\xcc\x42\x99\xa5\xd4\x9a\xbf\x5b\x4a\xce\x60\x95\x45\xf2\xb4\x50\xee\xed\x37\xc6\x0b\xc0\xf0\xa5\x19\x38\x4e\x69\x4e\x32\x39\x20\x3b\x88\xe8\x0f\x1a\x4a\xfe\x61\x18\x9d\xe7\x24\x2d\x49\xb4\x02\x58\x45\xa2\x3f\x14\xe4\xe1\x0f\x11\x5b\xca\x4b\x97\x71\x04\xf0\x4b\xfb\x2c\xf1\x27\xc1\x60\xa2\x37\x04\x90\x53\x92\xc9\x69\x74\xfc\xbc\x1e\x4c\xd2\xf3\x08\x85\xb9\x2b\x9a\xc5\xa2\x12\x23\x9b\x09\xc2\x03\x8c\x4c\x78\x54\x9e\x63\xa6\x18\x75\x68\xe0\x0d\x28\x7a\xd7\xb8\x06\x7e\x21\x1e\x15\xa8\x00\x1a\xf6\xe6\xd6\x68\x54\x81\xb4\xd6\x9b\x03\x23\xd1\xae\x53\x06\x1a\x2c\x57\xec\x54\x78\xdd\x51\xd7\xf3\x7e\x88\xf9\xa6\xb2\x37\xbe\xbd\x06\xb5\x13\x54\x05\xfa\x0e\xd0\xb1\xba\xea\x71\x5f\xbe\x54\x2d\x81\x9f\x36\x9e\xf1\x11\xa2\x1e\xa2\x56\x24\x48\xf1\x32\x0b\x15\x92\x63\xcc\x26\x98\x8c\x99\x93\x74\xa6\xb8\xbf\x9f\x3a\x9a\x2c\xed\x76\x93\x27\x3e\x16\xe3\x74\x32\xc1\x8a\xcc\xb4\x76\x54\x95\x08\x0d\x0e\xa7\x23\x8d\x22\x90\xdd\x41\xa3\xf0\x83\x78\x52\x78\xaf\xca\x3b\x7f\xb1\x9f\xe4\xd0\xdd\x39\xf1\xe3\xc5\x84\x4c\x19\x8f\x08\x3c\xf7\x8f\x71\x03\x17\xf1\xa5\xd8\x47\xdd\x41\x82\xa8\xc2\x9a\xe4\x7c\x71\xf0\x34\xa5\x0d\xde\x9d\xc0\x86\x4d\xb4\xe7\x87\x27\x6d\x4c\xb9\x03\x74\x77\xed\x9e\x4f\x13\x70\x73\x12\x72\xe1\x2e\x13\x17\x44\x55\xa1\x6d\xa9\x8f\xb6\xe5\x3e\x0a\x74\x29\x51\x20\xcb\xf3\x2a\x51\x9e\xa0\xd2\xd0\xa5\x3b\x83\x16\xed\x74\x76\x8c\x22\x7e\x8a\xef\x62\x0a\xe1\xe6\x0a\xb9\xbc\xe9\x46\x29\x9b\x55\x6b\x29\xc6\x7c\x52\xd1\xc4\x92\xf7\xfd\x0a\x59\x1f\xcb\x40\xd8\x66\xf1\x4a\x62\x00\x3b\xee\xed\x20\x76\x14\x47\x32\x0c\xc3\xac\x8a\x04\xb2\x7c\x71\x59\x24\xfc\x1b\xaa\x4a\x36\x88\x8e\xae\xe2\x15\x2a\xb4\xd7\xf5\x64\x78\xe1\xbf\x6d\x9c\x58\xf8\xfa\x1a\x00\xce\xf5\x35\x26\x3e\x77\xf3\x22\x64\xc8\x69\xf1\x71\x5c\x38\x4d\x75\xaa\xe0\x2b\xb5\x74\x1e\x71\xa5\xaf\x5c\x69\xfd\xf1\xb2\x07\x7b\xe7\x99\xf8\x0d\xae\xc5\x20\x6a\xca\xfb\x00\x14\xa9\x6a\x00\xfe\x38\x99\xcf\x25\xba\x54\x52\x9f\x1c\xc1\xf7\x66\x28\x56\x0d\x52\x3b\x0a\x6c\x13\x41\x07\xdf\xa0\x6e\x43\x2d\x9e\xb6\xbe\x20\xbd\x2b\xc2\xa8\x44\x83\xe9\x91\x16\xce\x68\xb0\xfe\x40\xc5\x3c\x4a\x8b\x28\x95\x2d\xb4\x13\x00\x92\x97\x4a\x7c\xb6\x4d\xdc\xef\xf8\xcc\x72\x6f\x57\xbb\x98\xd8\x5d\xc8\xab\x1c\x0f\x6b\x51\x94\x4e\xc9\x0b\xfd\x48\x10\x6f\x79\x31\xad\x9b\x09\x3d\x6b\x3f\x29\xe1\xc5\xbd\x76\x2c\x62\xc0\xe6\xb8\xb0\x76\x75\x8d\x08\x5c\x66\x0c\x07\x9b\x3e\x2e\xf4\xc7\xc4\x81\x1e\x39\x2b\x9a\xd6\xce\xe1\xf9\xd7\x30\x72\xdd\xb6\x39\x0a\x6a\x44\x50\x8f\x73\x36\x63\x84\x2d\xf8\x28\x48\x86\xf8\x8c\x2a\x70\xef\xc7\x17\x9c\xe4\x54\xe0\x9c\x31\xb1\xde\x19\x58\x0f\x39\x2f\x3a\xbf\xd9\xc4\xd7\xde\x6d\xf1\xeb\xcb\x1b\xf0\x63\x7c\x09\xd7\xa9\xdd\x7a\x97\x2f\xef\x3b\x2d\x7a\xfd\x86\xed\x67\x7b\x72\x52\x39\x45\xe0\xa0\x08\x8e\xd1\x47\x7f\x0a\x7d\x02\xe2\x01\xe6\xec\xf0\x45\x6f\xd1\x55\x5b\x02\xad\xd0\xd9\x4f\x50\xdd\x5d\x37\x35\xf3\xf8\x8f\xb8\x6e\x6c\x62\xab\x04\x98\xb3\xd5\x55\x0d\x59\x23\xc5\x36\xd6\x88\xf3\x42\x54\x71\xde\x42\xad\xc2\xba\x35\xf1\xd2\x34\x5d\x95\x4d\x43\x83\xdb\xdc\x79\xc4\xb4\x27\x2b\x7d\x4b\xe1\x66\x87\xa0\xf4\xa0\xec\x6e\x34\xc4\x1c\x3b\x85\x23\xf1\x22\x2f\x25\xdc\x58\xa7\xd5\xe5\x34\x27\x15\xd5\x21\x2c\xb1\x17\xa6\xa4\x89\x7c\xa9\x83\xc1\xc0\x9a\x45\xd0\x66\xc3\xcd\xd3\x72\xbe\x6d\xab\xe9\xaa\x02\xcf\x5d\x87\x95\x1d\xbd\xd1\xb8\xed\x87\x7f\xc5\xe9\x3b\xf4\x26\xe9\xf8\x5f\x30\x49\x9e\x26\xc4\xdf\x33\x47\x1f\x60\x8e\xc0\x94\xcc\x9f\x26\xdb\xf5\xaf\xca\x27\x8d\x6c\x70\x8b\x84\x56\x7d\x24\xa0\x80\xe2\xca\xbd\x73\x18\xf8\x93\x1e\xee\xd0\x68\x85\x02\x54\x31\x21\x1d\x6a\x1e\xae\x35\xce\x52\xd1\x54\x71\xde\xa7\x41\x11\x5d\x33\x58\x41\x18\x86\xc4\xe6\xc3\xf3\xa0\xe3\xd3\xb7\x82\x8e\xda\x92\xf7\x11\x75\x8b\xfe\xcf\x01\x15\x81\x93\xd4\xad\x7c\x58\x56\xe3\xc3\xb2\x6d\x7c\x58\x66\xd8\x31\x8b\x74\x79\x5c\x60\xba\x0d\xf4\x6c\xe7\xc9\x68\x4d\xf8\x02\x04\x22\x55\x98\xe0\xd5\x2d\xe1\x43\xa2\x5d\xc1\x5a\xd4\xab\xca\xeb\xdb\x43\x02\x51\xc8\xe2\xb1\xd2\x5e\xe2\xf6\x84\x40\xe5\xc7\x30\x7a\x71\x13\x0f\x61\xb4\xed\x76\x5a\xa4\xcb\x88\x7c\x59\x82\xb7\xce\x34\xe0\x17\xa4\x51\x49\xa6\xac\xc8\x2c\xbb\xa0\x9d\x48\x24\xd7\x3f\x8e\xf5\x50\x36\x3a\x1e\x54\x0d\x1f\x6a\x3c\x83\xb2\xed\xe7\xaf\x42\xff\xe8\x7d\x52\xe0\x49\x36\xda\x74\xf2\x7e\x7a\x06\x68\xb8\x5c\xbf\xd5\x72\x29\x3f\xdb\x32\x93\xdc\x61\x3f\xcb\xbb\xe8\x87\x6d\xfb\x3f\xa9\x78\x4e\xa9\xca\x16\xfe\x27\x1b\xff\x1f\xe0\xb8\x87\xe1\x8c\x8d\x10\xb8\x81\x0d\xaf\xb5\xb0\x1a\xdd\x49\x90\x1d\x8c\x7f\x96\x48\xde\xb7\xb1\xea\xbf\xed\x60\x3c\xd5\x36\x6d\xcb\xa8\xa3\x5a\xf6\x7b\xf5\xa0\x38\x9b\x71\x66\xed\xe7\x2b\xe7\x24\x85\x73\xc2\x4c\xd8\x3f\x77\xe8\x8c\xc3\xe5\x2d\x47\x88\xaf\xd7\x71\xb5\x47\x3f\xab\xcb\xf9\x93\x77\x8e\x7e\xf9\x1f\x9c\x23\x35\xc3\xf6\x28\xfd\x6b\x0f\x92\x6e\xfc\xdb\xcf\xd2\x0f\x8d\x67\x49\x2e\xd1\x5f\xd0\xef\x70\xdf\x4d\xc9\x5f\xd5\x79\x99\x92\xf1\xef\x26\x98\x20\xf9\xdf\x1d\x4c\xb0\x40\x7b\x18\xe3\xf8\x77\x5d\xbc\x97\x74\x3a\x05\xd1\x3e\xdb\xfe\x13\xb7\x57\x85\xd2\x60\xcc\xdc\xa4\x3d\xd0\x22\x63\x0f\x23\xf5\x67\x6e\xb5\xff\xc0\xff\x09\xde\x52\xff\x0b\xff\x47\xef\xe3\x4a\x80\xef\x87\xb3\x9b\x92\xf0\x7b\xc2\xd7\xeb\xff\xe8\xfd\x4c\x6e\xfe\x42\x45\xf5\x0b\x22\xc4\x6f\xc2\xb2\x0e\x4a\x92\xcf\x3a\x9d\xa6\xc6\x75\x50\xa8\x4e\xa7\x3d\xd6\x0c\x3e\x9d\x32\x69\x63\x8c\x9f\x36\x36\x2a\xb1\xba\xca\xf4\xc7\x04\x09\xd2\x38\x96\x4f\xb4\x10\x7f\x7a\x9f\xa7\x8b\x25\xc9\x60\x4d\x9a\x5b\xa5\x8b\x25\xe3\xe2\x72\xca\xe9\x52\x94\xcd\x59\x3e\x2a\x8f\xa5\xef\xe7\x69\x51\x10\xcf\xd7\x25\xf7\x02\xba\xd6\xb9\x65\x1e\x52\x31\x23\x68\x90\x28\x96\x77\x41\x10\x25\x88\x11\x94\x12\x54\x12\xb4\x22\x28\x97\x6b\xe5\x5d\x7a\x03\xf2\xda\xdb\xe8\x33\x52\x53\x15\xfb\xdd\x3e\x91\x8b\xf9\x14\xf7\xe5\x22\x93\x49\x12\xcb\xbf\xee\x60\x92\xa8\x77\xc3\xdd\xd6\xa9\xc6\x76\xe7\x77\xb8\xbf\x21\x64\x14\xaf\x08\xd6\x53\xd7\x2b\xc8\x17\x71\x45\xa7\x77\x28\x77\x69\xf7\x84\x97\x94\x15\x65\xaf\x60\x19\xe9\x2d\xe0\xa0\xbf\xfa\xef\x78\x34\x8c\x3f\x67\xdd\xe4\x73\x2f\x19\x05\xcf\x9f\xff\xb8\x96\xcf\xbf\x7b\x95\xa0\xf0\x00\xe4\x10\x85\xab\x2f\x97\x2e\x27\xe3\xc1\xa4\xd3\x69\x0f\xcc\xdb\x1e\x44\xf6\x21\xb8\x24\xe2\x64\xa1\x8d\x64\x12\x54\x34\x85\xea\x5c\x91\x78\x26\x29\xdb\xe1\x7f\x8d\x62\x46\x70\x1f\xa5\x6a\xae\xfe\x4b\x26\xa3\x92\xe0\x8c\x4d\xe1\xa4\x6a\xaf\xae\x57\xe4\x8b\x38\x65\x19\x89\xdb\xed\x04\xa5\xa4\xc7\xd4\x76\x8c\x4b\x82\x9e\xa6\xf3\x94\xa7\x53\x41\xf8\x61\x2a\x52\xa5\x99\xdb\xd8\x66\x49\x54\x18\x14\x46\x70\xb7\xcb\xc8\xef\xf7\x36\xc9\x50\x90\x51\x1c\x53\x6d\x25\x15\xec\x87\xa4\x27\x37\xd0\xa0\xc7\x0a\xe3\xd9\x76\x46\x9a\xeb\xa5\x04\xb2\xee\xf5\x96\xac\x14\xba\x92\xb8\x2f\x07\x57\x18\x31\x05\xc6\xf8\x3f\x9b\x03\x95\x8d\x7c\xc4\x94\x3f\xea\xab\xe3\xd8\x24\xb6\x3d\x3e\x72\x3b\x01\x33\xb2\xdf\x56\x94\x93\xb8\x7d\x4f\xb8\xf8\xd2\xae\xc7\x8e\x8c\xff\x82\x49\x8f\xaf\x8a\xb3\xe2\x03\x63\xcb\xf5\x5a\xbf\x68\x8b\xe6\xc4\x6f\xef\x2f\xb0\x06\x43\xb9\xdf\x6b\xbe\xc6\x20\x71\x13\x27\xf0\xd5\xe8\x04\xe1\xbf\x22\xcd\x2f\x6f\xb2\x8b\xf1\x4e\x06\x41\xfd\x64\xa3\xac\x01\x08\xfe\xa9\xa5\x35\x8b\x33\xa5\x26\x38\xdf\x12\x34\xcb\x28\x47\x00\x2a\xe0\x8e\xca\x52\x1e\x15\xd6\x63\xda\x93\x7f\xcc\x7c\x55\x02\xa7\xe7\xa4\x73\xcd\x66\x4d\xd9\xc0\x21\x96\x1a\xc2\x9c\xa0\xed\x20\xb2\x81\x27\xaa\x3e\xf4\xae\xaf\xcf\x2f\xce\x3e\x9e\x5c\x1e\x5d\x9f\x9c\x5e\x5e\x5d\x7c\xfa\x78\x74\x7a\x75\x70\x75\x72\x76\x7a\x7d\xad\xee\xfb\x7b\x82\x5f\xce\x6a\x49\xde\x47\x12\xd1\x22\x4a\x63\x4f\xf5\xb4\x0d\xce\x60\xee\x49\x72\x5f\x0b\x87\xf9\x28\x0f\xdd\x92\xc4\x8f\x04\xdd\x93\xf1\x23\x99\x28\x60\x7f\x4b\xf0\x53\x5a\xa6\xcb\xe1\x5f\x91\x9c\xdf\x61\x46\xd0\xb9\x61\x85\x20\x4f\xcf\x77\x48\x51\x9a\xe7\xc3\xf7\xc8\x31\x40\x86\xbf\x22\x9e\x4e\xc9\xf0\x04\x49\x32\x6c\x78\x8a\x3c\x6a\x6c\x78\x8c\xb4\x56\xfa\xf0\x2b\x02\x9d\xf4\xe1\x3b\x64\x35\xd2\x87\xe7\xc8\xea\xa3\x0f\x53\xc4\x8a\xe1\x92\x80\x4e\xf4\x82\x20\x43\x37\xfd\x64\x48\xa6\xdf\xd0\x22\x5d\x0e\x7f\x44\x30\xf5\xc3\x39\x41\xea\x9e\x1c\xfe\xb2\xf1\x4c\x01\x6e\x81\x14\x13\xb1\xd2\xfc\x57\x72\x2f\x7f\x7b\xb5\x5e\xfd\xf1\x8f\x3b\xad\xe8\x8f\xd1\xff\x9d\xd1\x9c\x9c\xdd\x13\x7e\x4f\xc9\x43\xf4\x17\x3a\xbd\x4b\xcb\x32\xca\xe9\x0d\x4f\xf9\x23\x48\x9e\x00\x56\x44\x69\x91\x45\x60\x85\x15\x2d\xd9\x72\x49\x78\x19\x15\x24\x05\xd7\xf6\x94\x47\x5c\x0e\x08\xa2\xdb\x93\x9c\x28\xc6\x3a\xd4\xad\x01\x64\x34\xe8\x0d\xbe\xeb\x0d\x20\x29\xa7\x53\x52\x94\x44\x3e\xbf\x67\xcb\x47\x4e\x6f\xe7\x22\x8a\xa7\x49\xb4\xd7\x1f\x7c\x17\x1d\x93\x8c\x70\x3a\x65\xd1\x7f\xd1\x7b\x96\x33\x68\x75\xca\x0a\x15\x51\x9a\xf1\xb2\x15\xfd\x51\x96\x3c\x27\x7c\x41\xcb\x52\x7b\xfa\x9a\x13\x4e\x6e\x1e\xa3\x5b\x9e\x16\x82\x64\x28\x9a\x71\x42\x22\x36\x8b\x24\x0c\xbb\x25\x48\x0e\x22\x2d\x1e\x23\xd9\x69\x26\xe9\x5f\xa1\x30\xa8\x28\x8d\xa6\x6c\xf9\x28\xeb\x03\x37\xe1\xb4\x8c\x4a\x36\x13\x0f\x29\x57\xa3\x4d\xcb\x92\x4d\x25\xb8\xcd\x22\x03\x38\x95\x2f\x27\x39\x63\x65\x14\x8b\x39\x89\xda\x97\xba\x44\x3b\x81\x76\x32\x92\xe6\xb2\x42\x88\xf5\x4a\x22\xf3\x15\x90\x16\xb6\x12\x11\x27\xca\xce\x82\xb2\x02\x45\xb4\x98\xe6\xab\x4c\xf6\xc4\x7c\xce\xe9\x82\xea\x46\x20\x66\x80\x9c\x1c\x39\x66\x59\xf5\xaa\x24\x08\x3a\x8c\xa2\x05\xcb\xe8\x4c\xfe\x13\x18\xdf\x72\x75\x93\xd3\x72\x8e\xa2\x8c\x96\x3a\xf6\x36\x8a\x4a\x99\x08\x53\x8d\xe4\x68\x5e\x31\x2e\xd1\x09\xe8\xdc\x94\x2d\x29\x29\x8d\x6f\x74\xd3\x47\xc8\x26\x1b\x5a\xca\xc9\x15\x7a\xba\xc0\xa3\xfa\xc3\x9c\x2d\xc2\xf1\x50\xe8\xd5\x6c\xc5\x0b\x5a\xce\x95\x84\x32\x63\x51\xc9\xa0\x5d\xc0\x47\xb4\x10\x76\xc6\xf2\x9c\x3d\xc8\x31\x4a\x5c\x11\x2c\xc2\xca\xa1\x5e\xc5\xab\x39\x84\xfb\xb9\x27\x30\x2c\xb5\x13\x0a\x26\xe8\x54\xcd\x3f\xac\xc8\xd2\xad\xb4\xfe\x54\xce\xd3\x3c\x97\xf8\xa0\x9a\x3e\x92\xc1\xa1\x0f\x47\xc6\x65\x37\x4a\x91\x16\x82\xa6\x79\x24\x2f\x12\xd9\x6e\x75\xc4\x3d\xd3\x8f\x1f\x8f\xa2\xcb\xb3\xe3\xab\x9f\x0f\x2e\x8e\xa2\x93\xcb\xe8\xfc\xe2\xec\xa7\x93\xc3\xa3\xc3\xa8\x7d\x70\x19\x9d\x5c\xb6\x51\xf4\xf3\xc9\xd5\x8f\x67\x9f\xae\xa2\x9f\x0f\x2e\x2e\x0e\x4e\xaf\x7e\x89\xce\x8e\xa3\x83\xd3\x5f\xa2\xbf\x9c\x9c\x1e\xa2\xe8\xe8\x3f\xcf\x2f\x8e\x2e\x2f\xa3\xb3\x0b\x59\xdb\xc9\xc7\xf3\x0f\x27\x47\x87\x28\x3a\x39\x7d\xff\xe1\xd3\xe1\xc9\xe9\x0f\xd1\xbb\x4f\x57\xd1\xe9\xd9\x55\xf4\xe1\xe4\xe3\xc9\xd5\xd1\x61\x74\x75\x06\x6d\xea\xda\x4e\x8e\x2e\x65\x7d\x1f\x8f\x2e\xde\xff\x78\x70\x7a\x75\xf0\xee\xe4\xc3\xc9\xd5\x2f\x48\xd6\x75\x7c\x72\x75\x2a\x6b\x3e\x3e\xbb\x88\x0e\xa2\xf3\x83\x8b\xab\x93\xf7\x9f\x3e\x1c\x5c\x44\xe7\x9f\x2e\xce\xcf\x2e\x8f\xa2\x83\xd3\xc3\xe8\xf4\xec\xf4\xe4\xf4\xf8\xe2\xe4\xf4\x87\x23\x09\x15\x7b\xd1\xc9\x69\x74\x7a\x16\x1d\xfd\x74\x74\x7a\x15\x5d\xfe\x78\xf0\xe1\x83\x6c\x4d\x56\x77\xf0\xe9\xea\xc7\xb3\x0b\xd9\xd1\xe8\xfd\xd9\xf9\x2f\x17\x27\x3f\xfc\x78\x15\xfd\x78\xf6\xe1\xf0\xe8\xe2\x32\x7a\x77\x14\x7d\x38\x39\x78\xf7\xe1\x48\xb5\x76\xfa\x4b\xf4\xfe\xc3\xc1\xc9\x47\x14\x1d\x1e\x7c\x3c\xf8\xe1\x08\x4a\x9d\x5d\xfd\x78\x04\x83\x94\x39\x55\x37\xa3\x9f\x7f\x3c\x92\xa9\xb2\xd5\x83\xd3\xe8\xe0\x3d\x78\xd2\x3a\x3b\x8e\xde\x9f\x9d\x5e\x5d\x1c\xbc\xbf\x42\xd1\xd5\xd9\xc5\x95\x2d\xfd\xf3\xc9\xe5\x11\x8a\x0e\x2e\x4e\x2e\xe5\xcc\x1c\x5f\x9c\x7d\x84\x91\xca\xd9\x3d\x3b\x96\xb9\x4e\x4e\x65\xd1\xd3\x23\x55\x91\x9c\xf9\x70\x81\xce\x2e\xe0\xfd\xd3\xe5\x91\xad\x33\x3a\x3c\x3a\xf8\x70\x72\xfa\xc3\xa5\x2c\xac\xc7\x6a\xf2\xcb\x45\x7e\xd5\xf2\x04\x3c\x60\xf1\x54\x53\xc6\x51\x96\x52\xcd\x38\xed\x02\xcc\x94\x46\xea\xaf\xa7\xb3\x62\x1e\x37\xaa\x9c\x83\x52\x7f\xba\xc8\x46\x24\xe6\xc9\x50\xf4\xce\x01\x5a\xca\xdc\x9b\x44\x11\xd6\x3e\xdb\x2c\x30\xbd\x52\x68\xca\xb3\x17\x69\xc3\x37\x03\x9b\x9a\xbf\x16\xe9\x3d\xbd\x05\x75\x00\xd1\x24\x0a\x15\x78\xdc\x3e\xca\x6e\x49\x1b\xb5\xaf\x38\xcd\xe0\xc6\x6c\x1f\x53\x4e\x66\xec\x4b\x7b\xa2\x5d\x0a\x38\x27\x55\x5d\x3c\x48\x94\x31\x83\xad\xb7\xb7\x2a\x09\x3f\xb8\x95\x58\xa5\xb5\xc7\x19\xf3\x49\xf2\x3d\xee\xff\xbf\xec\xbd\xeb\x96\xdb\x36\xba\x28\xf8\x5f\x4f\x51\xe2\xec\xe6\x21\x2c\x48\x96\x9c\x4e\x9f\xde\xac\x42\x69\x39\x8e\x93\xb8\x3b\xb6\xd3\xb1\xd3\xb9\xc8\x9a\x34\x8b\x82\x4a\x88\x29\x40\x0d\x42\x55\xae\x14\xb5\xd6\xfc\x9f\x97\x98\x67\x99\x47\x99\x27\x99\x85\x0f\x17\x02\x14\x55\x76\xef\xb3\xcf\x9a\x59\x33\xdb\x3f\x5c\x22\xee\xd7\x0f\xdf\xfd\x73\xe2\x22\x1f\xa7\x6d\x7a\xc8\x9c\xb1\x10\x4d\x53\xfb\xb2\xdb\xd7\x75\x7e\x2c\xb4\x6f\x03\xbc\x85\xf8\x1c\x18\x9c\x0d\xa7\x38\xae\xee\xa9\xce\x3e\x81\xba\x26\xbc\x35\xea\x85\x10\x3a\x1c\xf2\x6e\x47\xb2\xbf\x23\xaf\xc9\x71\x82\xe3\x29\x7d\xab\xa0\xe7\x71\xe8\x58\xce\x39\x3e\x44\x40\xa2\x39\x04\xb4\x9f\x46\x0b\x95\xb3\x99\x57\xe0\x9f\x81\x96\x9e\x46\x13\x34\x61\x6c\x57\x74\xb1\x74\xab\x38\x11\xb7\x9c\xca\x2f\x1d\x5e\x6f\x5f\xff\xbf\x33\x7a\x3b\xb9\xa6\xea\x99\xd8\xee\xf6\x8a\xae\xde\xa8\x3b\x50\x2a\x03\xd7\x01\x9e\xd5\x3a\x97\x0b\xb5\xcc\x03\x19\xab\x08\xbc\x13\x7c\xf3\xf6\xe5\xb7\xc6\x91\xa3\xee\xfb\x55\xb1\xa5\x73\x9a\x43\x88\x3e\xca\x81\x68\xd0\x48\xf0\x46\xd4\xaa\xad\x5e\x74\xc3\xa6\xfb\xa3\x39\xb9\x12\xab\xbb\x41\x7d\xcb\x34\x3a\xdc\xb6\x88\xee\xcb\xa2\xa6\xa6\xab\x1c\x7e\x7e\xf1\xfa\xcb\x9f\x93\xbc\x35\x81\x8b\x26\x07\x8d\x40\xb1\xff\xc5\x35\x1c\x94\xd5\xb9\x56\x67\x85\x65\xc6\xf9\xf1\x44\xdc\x50\xb9\xae\xc4\x2d\xe6\xc1\xc7\x4f\xb8\x0e\xbe\x7e\x76\xf1\x22\xb3\x62\xaf\x44\x53\x97\x52\x54\x55\xa3\x73\xab\xe2\x0e\xd9\x00\x92\x72\x54\x8f\x38\x9a\xd3\xbc\xc8\xf4\x1a\x75\x63\xd3\xb5\x5b\xad\x8f\xa1\xc5\x84\xf4\x1a\xcd\x3b\xdf\x39\xb5\x02\x79\x9a\xa6\xc3\x6c\x68\x4f\xf0\xcb\x37\x2f\xf8\x6e\xaf\x8c\xb5\xbc\x25\x29\x9a\x66\xe8\x17\xcf\xfd\x78\x29\x56\x14\xe1\x4a\x57\x7e\xfc\xf2\xcd\x8b\xe7\x67\xb3\xa9\x1d\x5f\xcf\x65\x0c\xc8\xe2\x32\x18\xe3\xcc\x28\xa2\xed\xf3\x19\xd8\x2d\xcc\x2b\xf0\x19\x15\x99\x0d\x9d\xda\x43\xf7\xe3\xb9\xc1\xf0\x06\x2d\x08\x29\xb3\xd9\x14\xcd\xa3\xcd\x06\x8b\x2e\xb0\x24\x10\xeb\x75\x4d\xd5\x77\x70\x6e\x8c\x13\x94\x73\x69\xfc\xa3\x52\xa0\xa9\x6d\x73\x6f\xd8\x55\xc5\xf8\xf5\x39\x92\x24\xa3\xa4\x2f\x0b\x45\x4d\x59\xa6\x23\x98\xa6\xb9\xf3\xe4\x59\x41\x69\x6a\x4e\x92\x09\xe5\x67\x0e\x98\xfe\x3d\x07\x33\xc1\x45\xf2\xf6\x1b\x0d\xef\xbe\xd4\xff\xe9\x07\x2f\x59\x7a\xd0\xd5\x36\xa6\x29\xf2\x5a\xe3\x62\x25\xf8\xc1\xcf\x24\x4e\x76\xc2\x79\x60\x98\xaf\x35\x70\x97\xb9\xde\xe1\xce\x0d\x8c\x57\x29\x3f\xb5\x7c\x91\xb1\x4e\x37\x40\x75\x78\xcf\xe6\xab\x2c\xfc\x44\x39\x8d\xcc\x67\x5c\x70\x08\x13\x44\xc4\xc1\x89\x34\x05\x9f\x26\x1e\x6c\x7c\x74\x33\x1d\x38\x29\xc5\x56\xf7\xe5\xa6\xf3\x9d\x70\x6e\x38\x51\xaa\x7b\x9f\x7c\xf9\xfa\x19\x90\x5e\xbf\x7e\xf7\xda\xf8\xcc\xfc\xf5\xab\xd7\xdf\x7e\xfb\xfa\xc7\x17\xaf\xbe\xc6\x9c\xc8\x39\xcd\x15\x66\x44\xce\x55\x4e\xb1\xe8\xf2\x1b\xbe\x37\xae\xe3\x06\x62\x52\x53\x05\x3e\x2e\x32\x8e\xa7\x08\x82\xf5\xaa\xe7\x7c\x95\x31\x3c\xb5\xee\x1f\x71\x8d\xf7\x44\xe8\xe1\x6c\x05\x7f\xca\x4b\x5a\x2b\x21\xf5\xdd\x28\x18\xa7\xa0\x12\x4d\x87\x84\xec\xd3\x54\xe9\x3f\x4d\xc3\xc1\xd5\x59\xc1\x78\x9d\x31\x37\x5b\x73\x06\x08\x21\x59\x4d\xb2\x82\xec\x51\xbb\xb7\x4d\xe3\x0f\x45\x9d\xa6\xeb\xac\x98\x80\x0a\xa1\x5d\x0d\x88\x9b\x85\x86\x84\x14\xf3\x75\xb6\x47\xf9\xde\x3a\xe9\xd2\x3b\xe5\xce\x58\x05\xc0\x6f\xbe\xc9\xcc\x0f\xac\x50\xae\x77\x63\x95\x29\x04\x09\xb1\xbd\x92\x7b\xd1\xba\x7a\x47\x97\xb3\x40\x19\xbb\x55\x2d\x9a\x2d\xe7\xe1\x47\x9e\x28\xb1\x4b\xb0\x24\xf0\x17\x94\x71\x12\x03\xa8\xde\x8a\x5d\x92\xdb\xdf\xdf\xd2\xb5\x4a\x40\xf9\xcb\xdf\x07\xb6\xce\xfc\x22\x70\x37\x67\x30\xab\xf0\xe6\x46\x0f\x9e\x5e\x70\x96\x17\x97\x30\x7d\x31\x7e\x6d\x8b\x34\x0d\xf3\x41\x11\x16\xd2\x6b\x88\x51\xfd\xbb\xe5\x23\x84\x2a\x14\x47\x6b\xf0\xa4\x77\x0d\x9e\x2c\xd3\x34\xfc\xc2\x9c\xec\x32\x85\x61\x09\x10\x66\xe6\xa3\xd2\x73\x46\x58\x10\x39\x1f\xcf\xf2\x59\xeb\x5a\x50\x89\xdd\x88\xf0\x47\x02\xeb\x87\x41\x29\xb1\x75\x5f\xba\xc6\x88\x30\xf8\x0d\x14\x87\xfd\xe8\xd8\x64\xb9\xc1\x26\x1f\xec\x7a\xc3\xea\xe6\x89\x5e\x70\xcc\x89\xf9\x34\x96\x50\xdf\xeb\x56\x92\x3c\xf9\x02\xfa\xf1\x01\x78\x77\x85\xac\xe9\x57\x95\x28\x54\x46\x17\xc9\x95\x90\x2b\x2a\x93\x91\x1c\x25\x3f\xb2\x95\xda\x24\x4b\x34\xea\x2f\xc1\xdb\x12\x91\xb1\x56\x47\x7f\xc9\x44\xc3\x2b\x3e\x64\x6a\x91\x18\xb8\x98\x8c\xe8\x12\xab\x85\x3d\x0d\xf0\x25\x17\x49\x59\x31\xfd\x4e\xda\xaf\xa0\xa4\x8c\x4a\x1a\x10\x0e\x23\x7a\xc1\x55\x16\x15\xb5\x23\xd5\xe9\x7c\x91\x6c\x0b\x79\xcd\x78\x32\xca\x92\x6f\x28\xcc\x1c\xde\x91\xc4\x9c\x44\x58\x16\xf4\x69\x35\xec\x7a\xe5\x76\x01\xd1\x12\xe5\xa1\xe9\xec\x75\x68\x9f\xa6\x9f\x14\x78\x4d\xba\x07\x94\x9b\xc7\x27\x4d\x8f\xb0\x1d\xef\xe0\xe1\x7e\x03\xbd\xe6\x77\xbe\x7f\xa7\xbe\x7e\xab\xd7\x59\xa7\x9b\x05\x77\xda\x5e\xf0\x46\x5f\x75\xd8\x69\x06\xc6\x86\x5a\xc3\xea\x84\xd4\xe2\x99\xd1\xae\xd5\x38\xdd\x59\x71\x56\x56\xa0\xbb\x5c\x47\x06\xf3\x07\xfc\x80\xf5\x51\xa8\xa7\xd8\xc1\xbe\x47\x5e\xe3\x7d\x21\x97\x03\x3e\xb1\xc2\xdd\xab\x8a\x92\xf0\xa3\x69\x86\x33\xcc\xbd\x87\x03\xc8\x1f\x4e\x71\x02\xba\xe6\x09\x83\x07\x32\xe3\x93\x5b\xc9\x94\xcd\x43\xf8\x94\x9f\x06\x3e\x79\x4f\xef\x60\x55\xba\x18\x72\x7c\x1e\x65\x9a\xd2\x2c\x10\x01\x62\x09\x3e\x40\x69\xa6\xc0\x50\xe0\x70\xc8\x10\xbe\x3d\xd2\xdf\x77\xa8\xa8\x26\xe1\xe9\xfc\xd4\x18\x94\x73\x10\x21\x71\x3b\xc9\x7c\x38\xc5\xe1\x0c\xf5\xb7\x9b\x11\xf0\xab\x73\x0a\x12\x3a\x4c\x0f\xf8\xb9\x53\xa8\x31\xbe\xda\x9a\x26\x12\x84\x7a\x3c\x66\x76\xae\x2e\xba\xd0\xe9\x5c\xb9\x55\x0f\x20\xd7\x42\xb5\x5a\xb3\xe0\x8a\x50\x22\xdb\x41\xab\x80\x10\x73\x1b\x0d\x8a\xaf\x17\x2c\x4d\x41\x7f\x8d\xc8\x05\x5f\x06\xaa\x8a\x2d\xba\xf6\x3a\xc0\x07\x9e\x83\x57\x39\x7c\x0f\x90\x2a\xb7\xd0\x8b\x4e\xe0\xe0\x62\x03\xd8\x72\x03\xec\xe8\xc4\x1c\xf3\x43\x70\x85\xde\x04\xda\x17\x07\x23\x9e\x5c\x67\x70\x5f\x34\x4d\x04\xd1\xe4\xbf\x10\x7b\xbe\x62\xfc\xfa\x19\x80\x89\xef\x69\xa9\x3c\x85\xb6\xcb\xa8\x83\xb6\xdc\x7c\x18\x68\x3b\x50\x06\xba\x4a\xac\x2c\x34\xe5\x58\x79\x28\xab\x53\x2d\x5c\xe5\x56\x6e\x79\xba\x27\xcb\x20\xdf\xa0\xfb\x83\xf5\x99\xa0\x1b\xcc\x4d\xbb\x58\x89\x5d\x0e\x7d\xd9\x8b\x6a\x1b\x1e\xdb\x6c\x7b\xad\x5d\xd7\x63\x28\x7a\xc0\x05\xe9\xa3\x5d\xae\xb3\xce\x43\x86\xf2\xfb\x03\xae\x49\x61\xd6\x52\x13\x33\x06\x52\xfe\x68\x3e\x85\x5d\xe3\x3d\x29\xec\xc2\xb6\x45\xbe\xb1\xdf\xc2\xe6\x68\x94\xdc\xe2\xa6\x50\x7b\x5c\xe3\xb5\x4f\x31\x85\xc7\x7b\xfd\x16\x57\x4d\xb3\x36\x1b\xb2\x02\x1a\x65\x50\x8d\xc9\x4d\xb6\xc2\xc9\x87\x04\xe1\xb5\xfd\x7d\xa7\xdf\x33\xd3\xfb\x98\x54\xd8\x75\x32\x26\x6b\x77\x58\x5e\x67\x22\xd8\xe4\x0f\xff\x39\x6f\x2b\x1c\x0b\x2c\xda\xc5\x53\x7e\xf1\x70\x4d\xf4\x49\xc2\x7b\xf2\x26\x53\x9a\x00\x29\xc0\x93\x3a\x61\xfa\x6b\x45\x82\x67\x6c\x3d\x31\xaf\xd8\x5b\xb1\x83\x95\x40\x78\xd3\x97\xad\x5f\x09\x93\x3f\x90\x69\x2a\xd2\x34\xdb\xeb\xbd\x23\xfe\x4d\x83\x4f\x8d\x19\xee\x61\xab\xc3\x0c\xd8\xfa\x29\x72\x91\xe1\x5e\x67\xf7\xfa\x98\xd4\xba\xc2\x18\xaa\x8d\x57\x18\x0e\x51\x0d\x45\xc7\xa6\xc6\x78\x63\xcf\x50\x6d\xf7\xd5\x1e\x9e\xda\xdf\x1a\x88\xe0\x3b\x31\x4f\xd5\x5b\xb1\x23\x53\xec\xbe\xf4\x68\xc9\x14\x0f\x79\x9a\x5a\x2d\xf0\x9b\x78\x52\xbe\x12\xc2\x77\x7d\x39\xba\x01\x34\xd8\xc1\xe0\xc8\x6a\x7c\x83\x77\xee\xc8\xda\x2f\x18\x21\xd9\x8c\xef\xf0\xce\x1e\x71\xfb\xd1\x0e\xe7\x26\x1e\xce\x9d\x53\x3d\xe3\x69\x3a\x94\x73\xd5\x62\xbf\x15\xca\x15\x21\xa4\x0a\x48\xa0\x2a\xa4\x69\xb2\x1d\xd9\x66\x3b\xac\x10\xc2\xbb\x8e\x16\xff\xbf\x88\xa2\x86\x47\x68\xb6\xc4\x3d\xcc\x88\xa3\xb7\xfa\x83\xf1\x28\xca\xda\x0d\x95\xe1\xb5\x73\x2c\x1d\xc6\x39\x95\xf6\x22\xc2\xa1\x3c\x2a\x6e\x6e\x55\x54\xde\xdd\xca\x29\x98\x1c\xcf\xa7\xf9\x2e\x93\x48\x93\xfa\xe6\xa7\xc7\x15\xf7\x04\x4e\x4c\x31\xe6\x00\xc6\x78\xbb\xc8\xf6\xdc\x8c\xb9\x01\x6b\x3c\x58\x70\x7b\x7a\x98\x3b\x37\xc2\x2b\xac\xbd\xce\xf6\x28\x32\x5d\x68\x91\x96\x5e\x34\x5c\x05\x68\xb8\x8a\x42\xbf\x24\x6b\xf6\x01\x84\xff\x1a\x36\x84\xc4\x66\x1b\xf2\xcf\x5c\x72\xd1\x92\x21\xc3\xa1\x4c\xd3\xf7\x99\x44\x91\xf1\x83\xa5\xe0\x9b\x66\xe8\x28\x47\x8f\xac\x97\xd9\xc7\x69\xc1\xd0\x9a\x23\xaa\x7e\xae\xd2\x34\xe1\x82\x53\x33\x48\x8d\x8c\xcb\x82\xd7\x6b\x21\xb7\x09\x3a\x47\x0a\xbc\xaf\x04\xe5\x03\x1f\x51\x1f\x27\x83\xbf\xef\xda\x2e\x1e\x1d\xc4\x3f\xf6\x1e\xc4\x3f\x46\x07\xf1\x8f\x4b\xb7\xc1\x53\xb3\x9d\xd3\x03\xae\x08\x9b\xeb\x55\x01\x02\xad\x86\x10\x03\x7a\xb9\x6f\x18\xbd\xdd\x09\xa9\x0c\x41\xb4\x27\x4f\xb3\x0a\xb3\xc0\xc4\xbc\x74\xae\x9a\x2c\x9e\x6c\xf8\x0e\x50\x7a\xde\x92\x96\x25\x29\x32\xa1\xdb\x6c\xa9\x4b\x88\x56\xfd\x91\xcb\x80\xf2\x92\x24\xe6\xf8\x9a\x16\x3f\xc6\x47\xe0\xd6\x7f\xdc\x87\xac\xc4\x30\x4e\x3d\x05\x47\xc3\x96\xbe\xef\xa6\x79\x9f\x55\x08\xed\xc9\xba\x9d\xc8\x8a\x1c\xbf\x7e\x78\x47\x56\xee\xf9\xda\x92\x95\x81\x8a\x83\xbd\x79\xd9\xd7\x00\xaa\x02\xc0\x86\xf7\x16\x62\x91\xdd\x08\x32\x2d\x60\xd6\x45\x01\x78\x85\xa0\x0e\xef\x0d\x10\x23\xdb\x91\xc9\x3d\xd8\x18\xdf\x09\xdf\x83\x2c\xd2\xb1\xca\x33\x49\xa4\xbe\xaf\x6d\xf8\x29\xd3\xe6\xcd\x5c\xe6\x12\x7e\x37\xcd\x14\xdb\x31\x99\x44\x25\x76\x26\xcd\x82\x49\x93\x2a\xed\xcd\xf7\xc3\x74\x19\xe6\x0b\x72\x22\x5b\x90\x40\xe1\x0d\x26\xfe\xc8\x63\x4f\xb1\x99\x47\xac\xa4\x79\x74\x20\x3f\xef\x3d\x90\x9f\x87\xc4\xfb\xe7\xcb\x1c\xbc\x4c\x80\xf7\x2b\xea\xd9\x4c\x49\xb1\x57\xc2\xdf\x6c\xeb\xe9\xa7\x20\xdf\x83\xbf\x0b\x81\x99\x06\x5c\x70\x8a\xef\x0d\xe0\x29\xe2\x67\x0b\x50\x9d\x71\x61\x10\x1e\x83\x1b\xfa\x82\x0e\x47\x82\xbf\xae\x82\x43\x62\x0e\x0e\x69\xec\x6f\xb7\x68\x71\x29\xf3\xe3\x60\x2e\xd1\xbd\x43\xc0\x60\xb3\x8b\x08\xff\xf2\x4d\x1f\xf0\x3e\xd2\x5b\xaf\x11\x44\xad\xec\x53\xce\x7b\x9e\x81\x43\x2a\x7a\xc0\xe0\xb6\xe9\xbe\x90\xb4\xc8\xdf\x66\xfa\x03\x1d\xd0\x01\xa1\x49\x2d\xa4\xca\xb2\x7e\xeb\xbf\x89\x2e\x3e\xa6\xf0\xe7\x80\x34\x42\xb2\xef\xd5\x04\x74\x30\xcc\x4c\x91\x13\xb7\xc9\x1e\x2c\x5d\x92\xe8\xf9\x49\x53\xde\xa6\x7c\x63\xf1\x02\x04\x71\x74\x7d\x44\xff\x6a\x31\x5d\xea\xe9\xe5\x7b\xfb\x03\x50\xbd\x7a\x57\x31\x95\x25\xe3\x04\x2d\x66\xde\xa2\xad\x1c\x65\xeb\x79\x32\x4e\x46\xeb\x3c\x49\x02\x00\xfd\x32\x36\x5e\x3e\x3a\x55\x9f\xf5\x9e\xaa\xcf\xc2\x53\xf5\xd9\xd2\xf0\x57\x19\xe1\xf3\xef\x32\x60\x3d\x29\x5c\x67\xb2\xb5\x69\xf9\x90\x49\xd0\x59\x3e\x84\xb6\x1f\xed\x92\xfc\x2b\x52\x03\x84\x65\x88\xd5\xa8\x16\x2c\xe8\xcb\x3b\xea\xc9\xfa\xc2\x5d\x3b\xa0\x1c\x8e\xf3\xbf\x35\x57\xbb\xb7\xee\xf7\xee\x15\x77\xd4\xbb\x39\x7a\x11\x82\x3d\xe2\xee\xf0\xc5\x58\xf6\x48\x1e\x22\x0b\x13\x4f\xfc\xc0\x21\x4e\xa4\x21\xfe\xcd\x7d\x31\xe8\x80\xbb\x0e\x86\xc1\xa6\x2f\x5c\x62\x52\x92\x43\xcb\x4b\xb2\xde\x67\xb3\xc7\x00\x92\x0c\xb0\xb1\x90\x45\x89\xdd\xe3\xeb\x5e\x2b\x23\xb5\xa0\xcb\x48\x91\xf7\x4b\x4f\xf3\x12\x19\x1e\x98\xe9\xd2\xb2\xb2\x7f\x33\x96\x1e\x76\xc2\x3c\xbe\x99\xdc\x5f\x60\x41\x2c\x13\xdb\x4e\xc7\x4c\x24\xe0\x60\x6b\xfc\x47\xcc\x61\x46\x6e\x96\xb5\x4e\xa8\x0c\x07\x0b\x66\xba\xd7\x09\xa6\xc5\x24\x4f\x6e\x0d\xfb\xa3\xd2\x89\xe6\x77\xee\x32\x7d\x1c\x47\xf0\x36\xb4\x28\x96\x23\xb5\xd8\x2f\x1f\x3f\x19\x73\xf8\x83\xd9\xa2\x5e\x12\x09\x4e\x6b\xd4\xa2\x5e\x8e\xf9\xa2\x5a\xe6\x6a\xf1\x22\xab\xd1\x32\x74\xf4\xf4\xaa\xc7\xf2\xa8\xa5\x95\xd7\x8c\xaf\xe6\xe6\x8f\x3e\xcd\xce\xbd\x62\xa6\xf4\xf2\xb4\x8d\x7c\x1b\xb3\x0d\x5a\x9f\xed\x12\x64\x53\xce\x69\x6a\x97\xc9\xc0\xd6\x59\x5f\x87\x2f\xf4\x82\x79\x08\xdc\x26\xf5\xab\x13\x2f\xd4\x52\x77\x74\x40\x4e\xdd\xf9\x55\x1c\x8f\xb7\xb7\xa4\x6f\xdc\x6d\x0e\x07\x9f\x5d\x09\x2f\xb6\x34\xc1\x52\x23\x0d\x6b\x21\x9f\x17\xe5\x26\xee\x94\x4e\xdc\x57\x9a\x96\x82\xd7\xa2\xa2\x93\xdb\x42\xf2\x2c\xf9\x07\xa8\x7e\x30\x2a\x7d\x89\x7f\x9c\xb1\xfa\x6c\x45\x77\x92\x96\x05\x68\xbf\xec\x6b\x7a\x16\x14\xe3\xff\x18\x7a\x0f\x8d\x6d\xbb\x9a\x9a\x5d\xf3\x01\x9d\x18\x87\x13\xab\x34\xe5\x99\xd4\xe4\x81\xb2\x37\xaa\x9e\x18\x35\x1f\xf2\xfa\x28\x09\xe1\x36\xc5\x8b\xb7\xa2\x72\x3e\x15\x61\x45\x24\x28\x89\x1b\xd7\x1a\x61\x5c\x6b\x83\xa5\xb6\x3e\x7c\x27\xac\xfe\x92\xd6\x4a\x8a\x3b\xba\x72\xda\xde\xf7\x8e\xdf\x96\x1b\xb7\xb7\x1a\x22\xd5\x9a\x72\x2f\xa4\x14\xb7\x6f\xda\x4f\x65\xf5\x5e\xe0\x6b\x5d\xb1\xdd\x8e\xae\xf2\xe1\x0c\xdb\x11\xe5\xf7\xe0\xa6\xf1\x78\xd4\x2f\x43\x07\xcd\x46\x51\x1c\xe6\xe8\x9c\x27\xdb\x72\xd6\x21\xfc\x0e\xd4\x48\x26\x0e\x35\xff\x4a\x23\xec\x10\x0a\x5f\xc3\x07\x50\x6e\x7f\x96\xc5\x25\x5d\x06\xee\xe9\xfc\x93\xfb\x73\x9b\x59\x4f\xf4\xcc\x26\x57\x62\xcf\x57\x85\x64\xb4\x76\x94\xd5\x43\xa5\x77\xc5\x6a\xc5\xf8\xb5\x1e\xa6\x90\xec\x9a\xf1\xa2\xfa\xce\x0f\x97\x46\x23\x8c\xe6\x45\x4e\x4f\x39\x98\x8c\x3d\x24\x36\xe4\xbd\x9d\x4b\xdf\x5c\x83\x9e\xd0\x51\x7d\xdf\xfc\x03\x9d\xce\x2d\x7d\x94\x27\xc5\x55\x2d\xaa\xbd\xa2\x09\xa6\xe4\x5b\xd3\xb1\x9f\xb3\xd7\xef\x77\x47\xea\x99\x71\x48\x31\x8f\x1a\x16\xdc\x84\x5f\xd2\x44\x41\xd6\x57\x1c\xfc\xf6\xc5\x35\x4c\x0e\x48\x7f\x23\xbb\xa8\x00\xac\xd1\x49\x2d\xb6\xf4\x18\x09\xd1\x17\x8f\x07\xf2\xc9\xe0\xd6\x81\x28\x34\x7a\x27\xbe\x88\x79\x92\x8b\xe1\x0c\x27\xdb\x3a\xc1\xc9\x8f\xf4\xea\x3d\xd3\x00\xff\xa5\xf8\x3d\xc1\xc9\xeb\xc4\xd0\xdc\x3e\x7e\xc0\x44\x89\x1f\xf4\x62\x3e\x2b\x6a\x9a\xa1\x91\x83\x87\x60\x7a\x3f\x3d\xe7\x2d\x1f\xd9\x87\x21\x62\x10\x24\x05\xa2\xd5\x26\xc9\x88\x8d\x64\x4e\xa3\xf8\x93\x91\x44\x77\x02\x97\x6f\x21\x96\xde\x6b\xd8\x21\x10\x5a\xb6\xe3\xff\x21\x8b\xfd\x34\x1c\xdd\x6d\xbd\xb6\xbf\x77\xb7\x2d\x01\xfd\x52\xb8\xd0\x10\xd5\x32\x38\x4e\x36\xcc\xd6\x53\x77\xc5\xb3\xe4\xc3\xd8\x9f\xa5\x04\x85\xb7\xc8\x8c\xb1\x3d\x4d\x49\xd2\x93\xab\xc4\xae\x3f\x03\x58\x4d\xbd\x39\x86\x9e\xe9\xcd\xb2\x74\x51\x6f\xde\xad\x8f\x88\xd1\x9b\xbf\xf8\x22\x0b\x09\xe8\x25\x49\x12\x1f\x02\xb1\xd6\xe7\x03\xb4\x4d\xbf\x65\xb5\xa2\x9c\xca\x3a\x43\xf1\x91\x34\xcb\xf2\x9a\xdb\x85\xb5\xd6\x23\xee\x42\x79\x81\xb1\x2d\x07\x32\xcd\x70\x59\x4d\x6b\x87\xd0\xda\xea\x04\x7e\xd8\x2a\x8c\x44\xa8\x62\x6e\xc8\xd7\x8e\xa9\x92\x15\x0a\xd8\x20\x3f\xc0\xf4\x25\x1c\xeb\xc6\x27\xc5\x6a\x15\xcd\x28\x4b\x24\xad\xd9\xef\xfa\x25\x0c\x8b\xe3\xfb\x5d\x51\xd7\xec\xc6\x70\xf1\xad\x7f\xb9\x22\x10\xbd\x06\xe2\x92\x0e\x85\xd6\x72\x59\x42\xe6\xa5\x98\xab\xd3\x08\x6f\xae\x06\xf5\xf1\xc8\x74\xab\xd1\x30\xb0\x68\x1a\x9a\x15\x59\x1d\x8a\xe2\x6d\xe7\xd8\xfa\x31\xae\xd1\x21\x63\xd8\x49\xd5\x3a\x93\x92\x93\x90\x8b\x50\x23\x9f\x60\x61\x38\x61\x58\x4e\xc0\x1b\x6f\xfd\xdc\x00\x07\x08\x29\x1f\x9a\x78\x85\xa1\x51\xe2\xa2\xce\x0e\xc8\x38\xf1\xf9\x7b\xf6\xc0\x63\x82\xbb\xef\x5d\x5d\x6e\xe8\x6a\x5f\x51\x03\x11\x43\x48\xf4\xa3\x0b\xd6\x8d\xd5\xe0\x54\xcf\x69\x9a\x95\xfa\x7d\xae\x9e\x72\xb6\x05\xc5\xd5\xaf\x64\xb1\x75\x61\x0f\xe2\xa6\xc3\x00\x2a\x19\x25\xdd\x41\x06\x41\x6e\xcc\x79\x31\x07\xf7\xc4\x91\x51\xe1\xea\x6a\x8c\x24\x5a\xde\x53\x68\x55\x6f\x93\x6e\xc3\xe2\x26\x01\x5f\x89\x8f\x31\x38\x46\x8b\x3b\x22\x8b\xa5\x4f\x72\x3b\x69\xcb\x75\x36\x73\x06\x5a\x62\x7e\x71\xbf\x0e\x74\xad\x12\xe3\x21\x6c\xc8\xea\x57\xc5\xab\x2c\x14\x0b\x23\x94\xa6\xac\xfe\x8a\x71\x06\x4f\xcf\x21\xb6\xe9\x42\xf7\x21\xbd\xad\xfa\x90\x49\x4f\x66\x26\xc9\xb9\xa5\x1b\x2c\xb6\xef\x30\x7c\x23\xe3\xc1\x9e\x9c\xb0\xf4\x4f\x0f\x5d\x91\xa6\x5f\x1b\xd5\x3e\x30\xa8\x4f\x76\x1f\x12\xfd\x92\x1b\x50\x26\x97\x20\x93\x1c\x71\x6f\x70\x05\x6a\x4a\x56\x93\xf0\x31\xfb\x14\x3d\xa5\x7f\x8b\x09\xe3\x93\x08\xb6\x0b\x60\x04\xd4\x39\x23\xc3\x21\x4f\xd3\xbe\xa7\xb7\x5b\x1e\xdc\xcb\xfa\x97\x57\xa3\x43\x2b\x2a\x2f\xb8\xf9\x7b\x30\x5c\xc1\x61\x0b\x4b\xfe\x91\x8c\xd4\x28\xf9\x47\x82\x0b\xf8\x2d\xf5\xef\x41\x84\x8d\x17\xa3\xe4\xcc\x3d\x61\x1a\x0b\xb7\x66\x24\xab\xb3\xab\xbb\xb3\x64\x24\xa2\x5c\x7e\x06\xdd\x80\x36\xb5\x90\xef\xf1\xd9\x15\x3d\xab\xf7\x92\xea\x04\xab\xc8\x7c\xc6\xd4\xd9\x15\x5d\x0b\x49\x4d\xed\x61\xd2\x71\x59\xf9\x37\xb2\x00\xc6\xd1\xb8\x56\x85\xd4\x7b\x05\x5c\x24\xf3\x67\x4c\xf9\xca\xec\xa5\xcf\x35\xfb\xaa\x53\x4c\x9e\xe1\x0c\xb9\x5c\xb7\xdf\x26\xd5\x94\xb0\xdc\x9f\xf0\xa3\x4d\x75\x15\x81\x07\x64\x8a\x18\xea\xd2\xa4\x98\xec\x25\xfe\x89\xfc\xcd\x62\x1e\xa1\x69\xd6\x5f\xfe\x33\x04\x0c\x3f\xf9\xc3\x08\x21\x9f\x7f\xb2\xfd\xc8\xd1\x0c\xe2\xd2\x96\x85\xca\x7e\xf2\x54\x60\xc0\x0c\x51\x73\xde\x46\x8a\xca\x39\xac\xe5\x2f\x24\xd1\xe8\x71\x02\xa6\x77\x65\x25\xca\xf7\xb7\xac\xd6\x70\x45\x7f\x8a\x3d\x57\x54\xb6\xa9\x91\x19\x5b\x87\x4d\xbd\x98\xe2\xe9\xf2\xa3\x54\x39\x47\xe0\xfe\xd6\xd0\xfd\x8f\xb3\x77\xa3\xe6\xdd\x18\x3d\x3e\xcd\x21\x03\x17\xff\x5b\x50\x59\x05\x29\xa5\x6b\xe7\x55\x56\xf4\x5d\x8a\xb1\x51\x13\xad\x69\x21\xcb\x4d\xf6\x18\x37\xef\xea\xc7\xa0\xee\x3a\x28\x16\xf5\x32\x4d\x81\xfd\xa8\x7f\xb6\x1c\x48\xac\xf1\xac\x98\xb8\x7c\x6d\x90\xf2\xb3\x9a\xee\x0a\x09\x76\x0f\x57\x77\x67\xb7\x1b\xa6\xe8\x59\xbd\x2b\x4a\x9a\xd5\xe8\xac\x90\xf4\x88\xda\x2c\xce\x4a\xb1\xdd\x16\x67\x19\x46\xa0\x20\x41\x8b\x95\x0b\x69\xbd\x27\x8f\xdf\xd5\x8f\xf0\xbb\xfa\x51\xf3\xae\x1e\x3d\xc6\x95\x59\xa7\x7a\xbe\x68\xa3\x9e\xd4\x7e\xf7\x16\x30\x44\xb3\x48\x7b\x4d\xfb\x2f\x11\xee\xa4\xcd\x96\x4b\x57\xda\xb5\x50\x8f\x66\x08\x2d\xf3\x45\xe1\x58\x6f\x59\x45\xaa\xee\xca\xb6\x1b\x66\x5c\xe1\xce\x87\x22\x17\xe8\x98\x09\x52\x04\xca\xc0\xfa\xbd\x58\xed\x4b\xda\xcf\x88\x4c\x40\xc4\xbc\xa0\x6d\x30\x19\xbd\xce\x70\x08\x46\x09\x4e\xc6\xc1\xee\x2b\x34\xcf\xa2\x92\x44\x81\xc7\x4e\x4c\x51\x5e\x74\xb2\x46\x26\x6f\xa6\xf3\xa8\x9b\xaa\x42\x07\x84\x17\xcb\xd3\xe7\xe5\xd8\x60\xd9\x29\x78\x59\xab\xc4\x2c\x9b\xe7\xef\xc6\xcd\xbb\x11\x9a\xbf\x5b\x3d\x7a\x37\xd1\xff\xa3\x6c\xf2\x08\x3d\x46\x58\x90\x11\x44\x35\x2a\x08\x5b\x3c\x31\x5e\xad\x44\xcb\x9a\xb6\x46\xda\xed\x19\x4c\xfe\x90\x20\xe7\x9f\xca\x8a\x48\xac\x6a\x6f\x61\x35\x7a\xff\xb0\x4b\xf2\x9a\xc8\xc1\x95\xa4\xc5\x7b\xa3\xb2\xfb\x07\xab\xe1\xfb\x07\x99\xe4\x16\xfd\xca\x6b\xc2\x5b\x99\x76\x8d\x16\x6a\xf9\x78\x36\x9d\x3e\x12\x07\x10\xcf\x6c\xf4\xfa\x16\x4d\x93\xdc\x80\x88\xa4\xf0\x6c\x1f\x97\x35\xf7\x62\xc1\x53\xd2\xa5\x4f\x91\x16\xe6\x9f\xda\xca\x03\x22\x4a\x64\xc7\xed\x29\xa3\x8c\x62\x66\xdc\x83\x02\xe3\xa3\x97\xcd\xa3\x4f\x12\xed\x7b\xb2\xf5\xee\x7d\x6d\xb8\x31\x6c\xa1\x96\x23\x22\x1f\x65\xc9\xd8\x9c\x36\x3e\x9e\x2d\x41\xd5\x0d\xd9\xa6\x31\xb3\xa6\xb2\xe4\xde\x13\x45\x9e\x89\x89\x23\x0a\x3a\xd7\x87\x2a\x44\x4a\x72\x8d\x61\xc6\x54\x04\xf0\x4c\x2c\xad\x1b\x7a\x27\x3c\x60\x47\x33\xc7\xa9\x9e\x82\xcb\xef\x21\x04\x6c\x7e\x0f\xcf\x5c\x3e\x9b\x4e\x31\x6d\x7b\x59\xf3\x23\xad\xfb\x98\xf9\x20\x89\x8a\x99\xa2\xa0\xb2\x1d\xf3\xd5\x8d\x09\xbe\x57\x5c\x34\xc0\x0a\x02\x81\xb4\x58\x64\x41\x98\xe3\x42\xd4\x0e\x24\xfb\x87\x4c\x3f\x88\x11\xa3\x74\x4f\xea\x98\x2f\x5a\xe9\x84\x0e\x0b\x14\x97\xe4\x1e\x1e\xb7\xfc\x36\xbb\x3f\xe0\x3d\x16\x8b\xfd\x12\x61\xca\x57\x61\xc2\x48\x2c\xaa\xe5\xb8\x58\x54\x4b\x14\x72\x9a\x2c\x7f\x04\xf4\x78\x0a\x5c\xc6\x3a\x3f\x07\xcb\x9e\x72\x8b\xf6\xe4\x81\x45\x0b\x7d\x36\x9b\x5a\x20\xd1\x68\x57\xb0\xbb\x26\x76\x15\x8a\x68\x79\x6a\xc2\x3b\xcb\xbc\x77\x57\xd8\x09\xe1\xc8\xd7\xd9\x48\xa2\xf9\x62\x24\xf1\x74\x99\x4b\x9a\x49\x2c\x70\x81\x6b\x64\xdf\x34\xe0\xf5\x66\xc2\x48\xe5\xf6\xba\x09\x61\x15\x18\xf6\x8b\xd9\x12\x39\x36\xfb\xa9\x62\x23\x57\xcc\xaa\xb2\x42\x21\x97\x01\xa5\x40\x4d\xc2\x16\xb2\x5b\x47\x40\x4d\xb7\xa7\xa0\x6d\x0d\x78\x57\xb0\xd0\x02\x42\xdd\x98\x55\x9d\x1e\xf0\x4e\xc2\x81\x7f\x6d\x95\xfd\xdd\x42\x7f\xf6\x89\x0b\x7d\xc4\x69\x6b\x9a\x75\x46\x27\x8e\x29\xe9\x28\xe9\x41\x90\xd4\xb2\x16\x01\xe1\xcc\x24\x59\x83\x5c\xc6\xe0\xb4\x31\xc5\x0f\x7b\xd6\x69\xcc\xe0\xd3\xb0\x83\x4a\xec\x6c\x00\x80\xb5\xc2\x35\x61\x0b\xbe\x1c\x30\xc7\xbe\x60\x9e\x5d\xa1\xd3\x49\x92\xd8\xe7\xf6\xfb\xe3\xf1\xe1\xbe\xe1\x41\xfc\x12\xe0\x0c\x62\xd9\x65\xfd\x21\xdb\x8d\x70\xbd\x14\xa6\x93\x1a\x87\x4b\x42\x9c\x5a\xb4\x9a\xec\x24\x13\x92\xa9\x3b\x08\x54\x1c\x1f\x7d\xbc\x22\xf7\x3b\xc9\xb6\x85\xbc\xeb\x31\xbc\x29\x17\xb4\x95\x97\x2d\xe8\xf2\x62\xbf\xa0\xcb\x34\x1d\xaa\x09\xad\xcb\x62\x07\xd1\x02\xbf\x77\x43\x86\xd5\xf4\xd0\x5a\x17\xc7\xba\x38\x42\xf8\xd6\xa8\xc9\x49\x74\xc0\xc6\x27\x45\x7f\x6f\xed\xd1\xa4\xf1\xb5\xe7\xa4\x5c\xc8\x68\x20\x97\x1f\x19\x08\xb7\x03\x61\x3c\xd3\x55\x61\x20\xe3\x2c\xec\xa0\x34\x02\x9c\xbc\xb4\x92\x1b\xe4\xc6\x69\x74\x4c\x5b\x3d\xf2\x5e\x52\xd5\x40\x48\x0b\xc0\x2c\x9a\x1d\x83\x2f\x8a\xe6\x89\x5d\xd8\x24\x4f\xfc\xb4\x93\x41\x69\xa0\x4d\x89\x57\x0b\xb5\xcc\x2c\xe7\xfd\x08\x22\x95\xfa\xa2\xb8\x7d\xcb\x7d\x1f\x32\xa2\x09\xed\xf5\x5b\x62\x7b\x54\xf2\xcf\xf1\xd1\x95\xc8\x63\xf5\x88\x03\x7e\x4f\xe9\xee\xad\xb8\xa6\x6a\x43\xa5\xbb\x70\x7f\xfc\xa4\xe7\xc0\x81\x2f\x08\xe3\x63\x4e\x0f\xc4\xf4\xf6\x67\x96\x85\x10\xaf\x03\xc8\xac\x96\xd0\xba\x12\x42\x43\x3d\xbb\x74\xf1\x3c\xfc\xe2\x81\x80\xbd\x98\xdb\xe9\xb6\xef\xe5\x5e\x27\xc6\x0f\x42\x71\x52\x26\x26\x17\xf5\xf2\x42\x64\x5c\x3f\x07\x10\xf9\x23\x5e\xe2\xc5\x7e\x49\x6c\xee\x58\xea\x77\x01\xeb\xa4\x4b\x9d\x54\x3f\x58\xa1\x5e\x82\x13\x2d\x2b\xe4\x70\x4b\xf8\xf9\xa7\xc0\x2c\xc0\xdd\xfe\x2d\x04\x01\x21\x8b\x55\x37\x97\xe0\x24\xdc\xa0\xae\x0e\x82\x5e\x6f\x6b\xc2\x0d\x1a\x26\x35\x18\xa8\xb5\xd6\x8d\xdc\x6a\x42\xf3\x1e\xc8\x05\x71\x02\xdf\xd0\x8a\x42\xf0\x07\x8e\xda\xa6\x0f\xce\xe1\xfb\xf0\xb8\x96\xd7\x5c\xe3\xbe\x7c\x4c\x95\xfc\xf8\xf4\xfb\x57\x2f\x5e\x7d\x9d\x9f\xfd\x03\x26\xe0\x86\xf7\x8f\xd6\x2f\xcc\x86\x55\xab\x33\xb1\x3e\x63\xaa\xb6\xc6\xe9\xce\x0c\x7d\x98\x20\x4c\x6d\x3c\xae\xd3\x47\xa7\x08\xce\x9e\x26\xb6\xec\xd9\xdb\x93\x22\x38\x7b\x55\xe7\x36\x9a\xa3\xd3\x1e\x29\x08\xfe\x59\x1d\x13\x14\x6b\x9d\x18\x68\xc7\xe3\x15\xe8\xd7\x7c\x2b\x6e\x1d\xab\x1e\x6f\x74\x91\xf0\xd4\xed\x74\xc2\x95\xd3\x8f\xb7\x77\x72\x4b\x7e\xcb\x38\x5a\x94\xcb\xc1\x7e\xb1\x5b\x8e\xb7\x17\xf5\x62\xb5\xec\x3b\x46\xab\xe5\x98\xe8\xbc\x71\x66\x0a\x22\x84\xf7\x8b\xd5\x72\xb4\xbd\xac\x17\xbb\x13\x35\xf4\x43\xaa\x8b\x8c\x75\x91\x1e\x70\xf1\xfa\xa8\x92\x79\xd2\x6e\x4c\xbd\xfd\xa2\x5c\x3e\x7e\x32\xde\x3e\x7e\x82\xef\x08\xeb\x79\x22\xf1\x75\xa8\x08\x70\xd7\x1a\x05\xac\x97\x08\x5f\x75\xf2\x9c\x29\xc4\xba\x35\x85\xc0\xbf\x92\x9b\x71\xdf\x4c\xaf\xc7\x57\xee\x3e\xfe\xda\x3e\x0e\x1e\x38\xd7\x8b\x72\x39\xde\xe2\x5f\x11\x06\xff\x8f\x70\x82\x3c\x9f\x2e\x98\x26\x64\x90\xec\x36\x03\x0f\xca\x2b\x0c\x0d\x48\x0d\xeb\xb2\x5f\x01\x70\x4b\xbc\xc1\x09\x78\x38\xd2\x80\x93\x3a\xd8\xb7\xf8\x30\x86\xaa\xcb\xc4\x88\x1d\xdd\x6d\xfd\xd3\x47\x6e\x2b\x5b\x67\xbf\x9f\xb8\xa6\x40\x5a\x84\xf7\x12\xfc\x6c\x58\x99\x66\x9a\x86\xd2\x46\x4d\xf3\x1f\x09\xf5\xba\xe1\xc3\xfe\x03\x18\x41\x0f\xe6\x73\x84\x23\xc4\xe8\x67\xe7\x46\x31\xf2\xc2\xf8\x9b\x3e\x51\x64\xb6\x6c\x9a\x44\x13\xdb\x8b\xa5\xa3\x1d\xd5\xe4\x8a\x6e\x8a\x1b\x26\xa4\x21\x22\xcf\x7e\xc9\x0b\xb2\xe0\x98\x2d\x03\x32\xf2\x8c\xd2\xbc\x20\x7f\xc9\x38\x0a\x13\x95\x4d\x04\xa7\x95\x26\xdd\x91\x98\x05\x69\xdb\x75\x88\x77\xd1\xf3\xe4\xd6\x78\x6f\x7c\x7c\x0d\x09\xa9\x9b\xc6\x45\x88\x25\x84\xec\x47\xb3\x76\x45\x3f\x3e\x67\x8b\x13\x1d\xa1\x41\x21\x66\xd4\x2e\xf9\x3a\x7c\xb4\x56\xc4\x63\xd8\x3c\x4d\xd7\x59\x65\xe4\x4e\xe8\x72\x9d\x95\x80\x87\xa1\xa6\x69\x31\x0c\x5b\x04\xd2\x2f\x74\x09\x53\xb8\x69\x1c\x66\x6d\x0b\x18\x30\x62\x1a\x51\x62\xa7\x0b\xb4\x58\xb5\x2d\xa3\xd3\xa1\x0d\x5b\x18\x6f\x48\xd8\xb6\x51\xc6\x43\x78\x47\xa2\x41\x59\xc5\x3b\x84\xb7\x24\x68\x04\x94\xf4\x10\xbe\x21\x71\xe7\xd2\xb7\x7d\x17\x4d\x73\xd3\x99\xd3\x2e\x9a\xc0\xb6\x3b\xda\x1b\x7c\xfd\x91\xa7\x9d\x6b\x78\x32\x1c\x2a\xb8\x31\x7f\x2f\x24\x03\xa9\x84\x26\x1f\xae\x8d\x45\xa7\xd1\xf8\x14\xd0\xb5\x4e\xa2\x7c\x65\x13\x76\x4d\x33\xec\x16\xda\xda\xb4\xb6\xd4\x8d\x06\x46\xc7\x1d\x7c\x71\x07\xa6\xbb\x5c\xf5\xf4\xb4\xeb\xf6\xb4\xe9\xe9\xe9\xe6\xa8\xa7\x2d\xc2\xb7\xe4\xaa\x69\x7e\x3d\xcf\x56\x4d\x73\xd7\x34\xb7\x06\x6d\xb0\xb0\x80\x0c\xa7\x18\x32\x0c\x43\xbe\x58\xec\xc1\xaf\xd5\xad\xa6\x94\xfa\x02\xce\xdb\x86\xe9\xdc\x76\x9b\xb7\xdd\xd3\x39\xe4\xe6\xf4\x90\x09\x14\x6b\x34\xf0\x51\x26\x40\x8d\x4d\xe4\x49\xd2\xf3\x32\x18\x13\x95\xee\x71\xff\xb2\x17\xe8\x3c\xac\x16\x80\x40\x9e\xdf\x0b\x14\x29\x36\xdc\x5a\x8b\xcc\x1e\xb0\xbb\xd3\xb9\xe5\xe2\x3e\x88\xa0\x7a\x4d\x5f\x1c\x6f\x59\x3e\x9c\xe1\x13\x9b\x98\x0f\x67\x07\x0c\x90\xd8\x41\xf4\xff\x1e\x42\xf4\xd9\x7f\x8c\xa3\xd1\xa2\x19\x8c\x70\xb7\x2c\x82\xf0\x88\x81\xf1\x30\x9a\x01\x3a\xed\xc0\xce\x75\x37\xe0\x48\x4e\x13\xe8\x6c\x45\x68\xc5\x92\x88\x85\x5c\x8e\xb3\x7a\x0e\x39\x1d\xac\x76\x99\x4f\xe3\x8d\x7f\x91\xf5\x68\x6a\x90\xd7\x1a\x77\xd6\xc8\xe9\x86\xad\xa8\x5b\x9b\x3f\x3f\x88\xde\x3f\x84\x93\xea\x56\x12\x9c\x74\xe8\xf4\x2e\x56\xaa\x7a\x81\xa7\x24\xaf\xfa\x5b\xed\x61\x90\x1e\xf5\x60\xcc\x83\x8a\x2d\x3d\x20\x14\xbc\x76\x10\x6c\xc9\x82\xaa\x0b\xab\x6f\x6c\xd4\x5e\x2f\xbd\x9e\x31\x68\xdf\x5e\xb6\xda\xc5\x56\xd7\xf6\xc2\x82\x49\x98\xaf\x89\x0a\xa8\x67\xd7\xce\xc4\x7c\x03\xdb\x77\xd2\x2a\x2c\x2d\x92\x0f\x63\xb1\x57\x63\xb1\x1e\xb7\xc3\x48\x34\x45\x0f\x58\x33\xb4\x36\x7b\xa0\xb5\xd9\x27\xb5\x36\x9c\x85\x6c\xa7\xd2\x68\x78\x82\xba\x85\xdf\xc3\xcf\x3f\x8d\x27\xf2\x01\x68\xb2\xbb\x90\xdf\xd4\x9e\xe4\x7f\x61\x43\x02\x85\x8f\x68\x2f\xae\x77\xfb\xa7\x65\x49\x2b\x2a\xe1\x4a\xb6\x71\xf7\x44\x57\x5c\xd1\x12\x06\x9d\x3a\xff\x38\x33\xc2\xee\xb3\xad\xb8\x31\xbe\x89\xfe\x11\xce\xf8\x1f\xad\x58\xae\xe0\xab\xb3\x5b\x56\x55\x67\x36\x1e\x4a\xbd\xdf\x69\x40\x61\x7c\x0a\xad\xf7\x6a\x2f\xe9\x99\x73\xf2\xa7\x29\x0c\xe3\xcc\x65\xf2\x5b\xed\x74\xea\x0a\xd2\x8e\x6f\x2e\x72\xd5\x1d\x3e\xae\x49\x1f\xc7\x08\x6c\xa9\x6a\x84\x2b\x72\xef\xb0\xaa\x9c\x79\x04\xeb\x80\xcb\x5e\xe7\xf3\x2d\xf8\xe0\x44\xba\x45\x67\x44\x06\x77\xc2\x52\xc1\x80\xb9\xe2\x22\xc4\x2e\xea\x3e\xef\x72\xf4\x80\xf7\x44\x64\xcc\xf0\x2a\xf4\x78\x44\xc6\xdd\x47\xf9\x11\x50\x14\xa9\x74\xad\x89\x95\x41\xb5\xe8\x91\x97\x17\x8c\x13\x84\x57\x44\xcd\xcb\xa6\x59\x37\xcd\xfe\x0f\x4f\x08\xa9\xfe\xf0\x64\x2e\xf2\x22\xaf\xf1\x86\xa8\xb9\xc8\x5d\x3c\x71\xa3\xaa\xbb\xca\xa0\xd0\x2c\x4d\x2b\xfb\x77\xb8\x4e\x53\x35\x37\x96\x39\xe3\x59\xce\x2d\x46\xa2\xc4\x2e\xdf\x64\xdc\xa0\x1c\x56\x97\x57\x7f\x3b\x5c\xc3\xe8\xfa\xae\x32\x6e\x51\x95\xc3\x21\xa3\x8e\x85\xbf\xa2\x37\xac\xa4\xdf\xb1\x0f\xb4\xfa\x5e\xef\xd5\xc5\x93\xa6\x19\xfe\x55\x8f\x34\x40\x39\xa4\x53\xa4\x75\x1c\x82\x4d\xc0\x45\xe2\x1e\xbc\x5a\x12\x6d\xd7\x65\xf0\x6d\x9d\x7f\xc9\x1b\xc7\x66\x65\xeb\xec\x26\xec\x60\x35\xf7\xe6\x40\x75\x6b\xae\x38\xae\x23\xd1\xc5\xc8\x61\x66\xf9\x78\x6f\xd9\x49\x6d\x12\xa0\x75\x78\x1b\x8c\x6b\xf3\x70\x9b\x46\x87\xda\x22\x8c\xba\xc5\xdb\x28\xc1\xe0\x9a\xb8\x48\xd3\x1d\xaa\x16\xbb\x25\x31\x33\xaa\x0a\x45\x3f\x5b\x65\xc9\x68\x3b\x4a\x76\x1f\xf0\x59\x32\xba\x31\x3f\xa6\x28\xc1\xd5\x62\xb5\x24\x53\x5c\x2d\x36\xf0\x27\xd2\x7c\x6a\xd7\xa3\x35\x49\xb9\x8b\x97\x60\x3c\xcb\x67\xf8\x3a\x9a\x01\x98\xf3\x43\xb3\x37\x8f\xee\x4c\xc3\xdb\x47\xd7\x71\xd3\xab\x51\xa2\xc7\xb1\xb1\x06\xdb\xf7\x91\x62\x58\x1e\x1c\xc5\x40\x99\xbb\x05\x95\x06\x73\xb9\x8a\xc0\xa7\x57\x68\xb0\xb9\x95\xff\xf6\xd4\xe3\x9b\x20\xbb\x43\x3f\xc6\x45\x00\x4f\xe9\x80\x03\x0d\x59\x3f\xb4\x87\xe9\xce\x9d\x9c\x03\x6e\xc1\xa1\x03\xc8\xff\xfe\x71\x9e\x19\x76\x71\x8c\xce\x7e\xee\xc5\xb7\xdc\xd0\xd5\x31\xb7\x06\x74\x07\xdb\x89\xe3\x50\x93\x44\x9e\x50\x4b\x1e\xea\x1b\x2e\x17\x74\x39\x57\x93\x9a\xaa\x56\x23\x8f\x62\x9d\x8a\x72\x75\xa4\xab\x47\x2d\xf7\x31\x24\xbc\xd3\x34\x0a\x6f\x10\xad\x99\xa5\xbb\xd2\xf4\xe7\x2c\xae\xd4\xb3\xb6\x82\x7f\x2b\x8a\x55\xde\x15\x7d\xb6\xea\x60\x2f\xc1\x81\x32\xc5\xb2\x4b\xba\x16\xe4\x59\x26\x03\x5c\x4d\xd8\x62\x1f\x55\xb4\x3d\x2a\xe2\xb4\x6b\x5b\xff\xf5\xd1\xc2\x44\x27\x12\x17\x08\xff\x9c\x29\xdc\x82\x7c\xf9\x51\x15\xd7\x03\x84\x15\xe9\x9e\x22\xeb\xa5\xf6\x70\xc0\x8c\x9e\x8c\xfa\xd6\x3a\x97\x07\x6f\xde\x9f\x6e\x1b\x3c\x0f\x3f\xf2\xfb\xc3\xe0\xca\x06\xa5\x41\x7d\x1a\x63\x3d\xbe\x5b\x25\xfd\xe7\x9e\xd6\xaa\xa3\x12\x26\xac\x32\x15\xb2\x51\x31\xcc\x17\x91\x59\xf0\x35\xb9\x02\x13\x80\x0d\xab\x51\xac\xed\xe8\xee\xdb\x97\x86\xae\xaf\xf5\x5a\x06\xea\x64\xf7\x81\x7e\xa9\xc6\xce\xbd\x22\xaf\xfe\x88\x14\xb6\xf2\xc5\xf2\xd0\x51\xb6\x26\xe0\x2b\xe7\x37\x60\x5f\xce\xd5\x62\xba\xcc\x55\xa8\xac\x49\x58\x9a\x32\x97\xcd\x74\x36\x3b\xa1\x70\x4d\xee\x0f\xd1\x3d\xea\x8c\x39\x40\x88\x8a\xf6\x77\xaf\x70\x58\x81\xdb\xd5\x6e\xfb\x0b\xb5\xec\xae\x43\x94\x09\x9e\xa7\x83\xa6\xe7\x45\x94\x9d\xdf\x1f\x8c\x56\x5b\xa4\x7a\x1b\xd9\x6c\xf5\xcf\xeb\x41\x43\x2e\x8d\xb7\xe5\xfa\x36\xf6\x8c\x17\xcc\xb9\x1e\x34\xe6\xb2\x5a\x58\x63\xe5\xb5\xb0\x3a\xc3\x3b\xa5\xc9\x17\xd8\x2d\xd0\x89\x81\x04\x08\x94\xba\xe0\x67\x26\x42\x9c\xc8\xe3\xa7\x5e\x09\x52\x27\x9a\xc0\xa7\xbe\x47\x73\x00\xad\xf7\x83\x3a\x56\x44\x8f\xa4\xe6\x83\xda\xaa\xda\x9a\x21\xf4\x2b\xe9\xf6\xa8\x4a\x12\x17\x2f\xe4\xec\xd7\x8c\xe2\x05\x58\xc0\x25\xa6\x57\x17\x06\xf2\xf8\x2a\x7d\xd5\x86\xa2\x40\x87\x03\x36\x95\x56\xe6\xa8\x9f\xae\xf5\x43\x5f\xad\xbe\xe1\x9e\x6e\xe2\x9f\xbd\x1d\xf7\xe9\x25\x9f\x6e\xe3\xc7\xa8\x8d\x25\x32\xb1\xeb\x5a\x07\xcf\x3f\x28\x56\xd5\x24\xfb\xb8\x73\xf5\xeb\x4a\x5c\x15\x15\xb2\xbe\x14\xa1\x1a\x66\xc1\xfb\x5e\x93\xbf\xe9\x6f\x77\x29\x08\x38\x0e\x3f\x20\x74\xc8\xfa\x81\xa3\x33\x2f\xe9\x9a\x05\x81\x3e\x91\x19\x74\xeb\xe7\xb8\xc5\x1d\xf6\x1c\x74\x1c\xb2\x64\xe7\xc8\x00\x8d\xd8\xc2\xd0\x5d\x38\xb2\x7d\x55\x61\xda\x8a\xf8\x27\xc5\x16\xd8\x34\x7a\xe2\xff\xcf\xfa\xdf\xfd\x6c\xf2\xd9\x7f\xb9\xdf\xfd\x2f\xf7\xbb\xff\xe5\x7e\xf7\xbf\xdc\xef\xfe\x7f\xc5\xfd\xae\xf7\xda\x1f\x80\xe3\x8f\xb9\xe4\x5d\x04\x85\x97\x10\x62\x7b\xf2\x56\x88\x4a\xb1\x9d\x46\x44\xed\x03\xd3\xe3\xa9\x97\x76\x5c\xf5\x52\x02\x8d\x76\x5c\xca\x27\x56\xec\x94\xa0\xb9\xf7\xc4\x9e\x3b\x16\xe6\xff\x0f\x1d\x7e\xc9\xff\xf7\xfb\xdd\xc2\x9c\xdc\x97\xce\xaf\xa4\xa6\x16\x56\xb4\x2a\xee\xf2\x29\xde\xa8\x6d\xa5\xbf\x03\xad\x4a\x63\x24\xce\x54\x45\xf3\x24\xc1\x8a\x6e\x77\x55\xa1\x68\xfe\xdf\x2e\x56\xec\xc6\x38\x7a\x23\x89\x32\xa7\x29\x39\x93\xa2\xa2\xed\xe7\x65\x4f\x19\x23\x39\x4e\x2e\x2f\x1e\xaf\xd8\x4d\x6f\x01\x23\x0a\x76\x05\xe0\xff\xff\x86\x6d\xe8\xe4\x3c\xd9\x08\x88\x85\x2d\xca\x7d\x9d\x78\x9d\x37\x6b\x19\x6b\xb5\x30\xf2\x64\x12\x75\x86\xcf\xdc\xf7\xaf\xbf\x5a\x75\x10\xe8\xa3\xa7\x3c\xa4\x87\xe5\xcd\x60\x0e\x98\xf5\x9e\x64\xeb\xb1\x38\xfb\x9f\xe9\x35\xcf\xde\x4a\x86\xb0\x08\x30\x4b\x30\x31\xbe\x3f\x60\x8e\x41\x5e\x61\x08\x35\xbd\xdb\x84\x2e\xa6\x4b\xd4\x25\xf6\x62\x73\x28\xa2\x2c\x1b\xf7\x48\xd3\x45\xb9\x18\xd5\x73\xff\xcb\xc9\x73\xce\x12\xf4\x40\xe8\x29\xcb\x34\x2d\x2b\x56\xbe\x4f\xb0\xd9\xa5\x04\x27\x66\x9f\x42\xfd\xad\x03\x42\xf9\x62\x69\xa3\x2c\xb2\xfa\xf5\x8e\xf2\x36\x42\x94\x01\x53\xaf\xed\x28\x7d\x24\xc9\x9a\xaa\x0e\xc1\x41\x71\x81\x95\x3f\xd0\x2a\x63\x8e\xb4\xf8\xd5\x20\x8e\x47\xe8\x79\x47\x43\xdc\x71\x43\x63\x57\xad\x96\xe1\x91\x25\x2b\x76\x93\xa0\x01\xb3\x5a\xd3\x6f\x5f\x7e\x4b\x94\x35\x4d\xb0\x6a\x35\x6c\x02\xfa\x37\xaf\xc4\x8a\xd6\x8b\xe9\x72\x20\x26\x6c\xe5\x4f\xf0\xaf\xc9\xc8\xf0\xa3\x0b\xbe\x12\xdb\x0c\x79\x97\xd7\xd9\x67\x7f\x42\x13\x40\x12\x64\xf6\x04\xcf\x9c\x13\xd8\x80\x73\x52\x48\x56\x8c\x37\x6c\xb5\xa2\x5c\xaf\x5e\x51\xd5\xd4\xf3\xdc\x59\x47\xd7\x28\x22\xd6\xa2\x03\xdd\x32\x66\x60\xf9\x8a\xd5\xea\xad\xbe\xbf\x56\xca\x97\x51\x60\x18\x15\x08\x0b\x4f\xe3\x74\xcb\x7c\x64\xfd\x06\x33\x6f\x6e\xa8\x4f\x73\xd3\xcc\xe2\x84\xb9\x4c\x53\x08\xb2\x42\xf9\xca\xda\x60\xa2\x3c\x63\x44\xa1\x4f\x76\x0c\xce\xd0\xfc\xd4\xe8\x95\x73\x1d\x0e\x23\xca\xe5\x9c\x87\x1b\x95\xf3\x89\xa2\x1f\x94\x2d\x4e\x54\x3b\xc7\x7a\xa3\xaf\x7e\x67\x62\xca\xc6\x39\x0b\x0f\x64\x9a\x0e\xc3\x4f\xc6\xaf\x51\xb0\xa0\x83\x4e\x69\x6f\x36\xfd\xab\xdd\x7f\x30\x93\x8c\x76\x20\xc8\xb0\x56\xb2\x37\xac\x66\x57\xac\x62\xea\x8e\x24\xf0\xbb\xa2\xc9\x71\x2b\x9f\x72\x3a\x42\xae\xcd\x0b\xc7\xee\x74\x74\x3d\x64\x5a\x6b\x52\x35\xb9\x8e\x5a\x03\x98\x9e\xa0\xa6\xe1\x13\xf8\x69\x2d\xc1\xc2\x99\xb6\xac\xb4\x89\xbd\x58\x7a\xbd\x26\xee\x11\xc0\x0c\xf3\x89\x7e\x32\xd0\xa0\xcb\x02\x84\xa1\xae\x68\x5d\x4a\x76\x45\x57\x57\x77\x09\xd6\x57\xc4\x1d\x65\xd3\xe2\x9a\xf1\x95\xf7\x6e\x9c\x79\x67\xc6\x54\x06\x51\x86\xed\x19\x80\x93\x94\x09\xcf\x00\xeb\x40\x0a\x03\x0a\x27\x51\x22\x0e\x4c\x03\x78\xc0\x15\xef\x6d\x21\xe0\x0c\x41\x5b\x0f\x16\xc1\xf7\x46\x47\xf1\xe3\x25\x5d\x70\xbb\x13\xd9\x96\x81\x7e\xef\x14\xab\xf8\x24\x7a\xc7\x0e\xc8\x3d\x70\xff\xe3\x3d\x59\xed\xf9\x7b\xdb\x20\xb7\x09\x26\xc8\xe1\xff\x60\xab\x9f\x56\xca\xf7\xe8\xfa\x3e\xa0\x03\xc2\xfc\x98\xdf\xec\x0c\xe1\x4f\xb6\xd7\x91\x6a\x93\xfb\x63\xed\x87\x9e\x66\x0f\xbd\x37\x05\xc2\x75\xe9\x53\x2d\xfa\xd6\x17\x1d\x5f\x49\x1b\x8b\xb4\x85\x2a\x46\x98\x7f\x8a\x1b\x14\x02\x8a\x79\xd6\xff\xea\x3d\x0c\x1d\xdc\x7d\xff\xd7\x80\x83\x92\x7b\x07\x1b\x50\x1e\x0f\x78\xc5\xea\x9d\xa8\xfb\xc6\xdc\x06\x9b\x8c\xaf\x9f\xe1\xe8\xf5\x73\x6c\x9d\x84\x5c\xa7\x81\x90\x1c\x0a\x0f\x02\x15\xbb\x5e\xfb\x63\x6e\xcc\x84\x70\xd8\x01\x98\x15\x77\x67\xe9\x4f\x83\x5e\xe7\xac\x1f\xda\x59\xd6\xe0\x89\xdc\x13\xae\x03\x7c\x18\xc9\x70\x49\x1f\xf2\x20\x10\x81\xf7\x9e\x83\x01\x71\x26\x50\xe7\x74\x44\x30\xae\xef\x55\xf5\xaa\x01\x5d\x54\x8c\xce\xe9\x11\x9a\x12\x23\x00\x14\xe5\x46\x49\x02\xf0\x3e\x15\x19\xe9\xd3\xe0\x69\x07\xe0\xd9\xdf\xb7\x8a\x1e\x69\x8a\x82\xc7\xb2\x8b\x73\xf5\xa3\x04\x9e\x54\x03\x1c\x55\xef\xa0\x20\x1a\xbd\xeb\xe7\x60\xbb\x60\x18\xd6\x62\xce\x60\x89\xb9\xf5\x24\x90\x6c\xc5\xbe\xa6\x94\x2b\x2a\xc1\x1b\x6c\x90\x58\xd1\xe2\x46\x23\x42\x81\x69\x9d\xc1\x2c\x7d\x5d\xf3\xd9\x56\xbb\xaa\xf6\x32\xae\x60\x50\x53\x5f\xc1\x7c\xb6\x15\xec\xf7\x01\xac\xcb\x4e\x1f\xf5\x80\x0e\x50\xe8\x7e\x38\x1d\x12\xc2\x03\x3c\x01\x7c\x09\xed\x6b\xba\xfa\xe2\xce\x51\xd8\xc3\x29\xc4\x59\xb5\xe2\xa3\x37\x1b\x71\xab\x11\xb0\x09\x50\x5c\x58\x82\x7d\xfc\x80\xfb\x3b\x06\x83\xb9\x87\x8f\x5c\x01\xef\x34\x67\x07\x90\x25\x76\xbd\x35\x28\xcc\xe0\x06\x89\x7f\x69\xb0\x9d\xd1\x69\x34\xcd\x8f\xed\x1b\x7d\xc3\xe2\xb1\xfd\xc7\x87\x86\xed\x8a\x9a\xa8\x17\x72\x52\x56\xa2\xa6\xaf\xf9\x33\x9d\xf8\x7a\xaf\x6a\xa6\xaf\xb6\x3f\xd8\xc7\x5e\x32\x60\xdf\x57\xe2\x96\x27\x38\x9a\x17\x5b\x67\xe1\x82\x3b\x00\xc4\xbb\xb7\xde\x7c\x0e\x68\xab\x6a\xaf\x26\x0a\x62\xd8\xa1\xa6\x91\xbd\xa9\x2c\x53\x7a\xff\xf1\x70\x0a\x66\x86\xed\x55\x08\xf6\xee\xe3\xb7\x60\xd0\x41\x1d\x89\x75\x61\xca\x8c\xc4\x4d\x23\xa1\x4d\xa3\x7c\xcc\x6b\xc0\x4a\x6d\xa4\x1d\x77\xdf\x4f\xc5\xde\xb1\x9e\x67\x4c\x1d\xf0\x2a\x7b\x40\xfa\x14\x1c\x8d\xf4\x9b\xbe\x37\xa9\x43\x02\xf5\x8f\x75\xe6\x70\x3e\x3d\x56\x0d\x72\xed\x58\xed\xc8\xca\x8a\x16\xd2\x8d\xed\x68\xfc\x08\x3f\x3c\x01\xd0\xea\x1a\x12\xc2\x5a\x44\x3b\xf6\xb6\xd3\x86\xb3\x88\xa1\x2d\x54\x0d\x41\x01\xd1\xd7\x4e\x03\x4a\xc4\xd6\xba\xb0\xee\xb0\x2d\x0f\x47\x29\xe3\x36\x2a\xae\xc5\x68\x07\xcc\xbe\x21\xb0\x6e\x1a\xb7\x0a\x16\xce\xe0\xcb\x0f\x53\x40\x30\x08\x2f\x3b\x3e\x7e\x12\xac\x3a\xe4\xf1\xa3\xf2\xe9\x64\x9b\xc5\xb4\xcd\x22\x07\x34\x4f\xc7\xd9\x95\x46\xb9\x3b\x14\xfe\x29\xdc\x3e\xaa\x07\xa9\xee\xe9\xea\xd2\x55\x1d\xcf\x24\xb4\xaf\xcb\x8e\x33\x1e\x68\x8f\xd0\x07\x29\x10\x63\x05\x13\x2f\x5b\x54\xdf\x3d\xf0\x9d\x46\x83\xcd\x39\x5a\x8f\x53\x97\x50\x3f\x86\xb2\x4b\x95\xb6\x09\x73\x65\x62\x15\xb5\xef\xba\x44\xb9\x9a\xd3\x80\x7a\x4c\x92\x9c\x46\xe4\x63\x92\x80\x0c\x8f\x1d\x32\x84\x05\xe9\xc7\x95\x8c\xec\x73\x23\x6e\x7b\xb4\x02\xa8\xbb\xac\x91\xfa\xaf\x9d\xab\x53\x0a\x00\x9d\xc6\xde\xba\x06\xe9\x39\x78\x07\x49\x1a\x71\xeb\x2f\x69\x33\x7d\x61\x25\xae\xaf\xab\x13\x65\x2d\x3a\x6a\x94\x29\x33\x94\x53\x18\x7d\x16\xeb\x28\x84\x0b\x1e\xbd\x23\x6d\x3b\xc7\x05\x21\xde\x7e\x3f\x4e\xd7\x73\x45\x49\xcc\x65\x0d\x94\x37\x26\x92\x6a\x02\x73\xe5\x17\xcd\x28\xa0\x7a\x83\x54\x5f\xc0\x84\x25\xf5\x8e\xa1\x69\x7c\xf3\x3c\x3c\x11\x46\x87\x3c\xca\x3c\x7e\xb6\x00\xa2\xb4\xcf\xcd\x19\xcf\xac\xef\xf3\x82\x88\x9e\x11\x89\x70\x44\xa2\x33\xa2\x4e\x67\x7d\x38\xb0\xed\x8f\x23\x1c\xbc\x47\x05\x6a\x1a\xda\x79\x93\x25\x66\xf6\x4d\x66\x1a\x6a\x21\xf3\x44\x79\xfd\x2e\xf6\x3f\x51\xe8\x6b\xe7\xf0\x3f\x24\xf5\xd5\xb0\xfb\xb4\xec\xa3\x9b\x63\x24\x1e\xa8\x23\xf8\xa0\x99\x75\x52\x0d\x3e\xc3\x8f\x84\x1d\x66\x64\x69\xea\x46\xb8\x5d\x79\x87\xdf\x90\x92\x2d\x96\x98\xa2\x73\x80\x34\x4d\x63\x5e\x29\x34\x79\x26\x56\xf4\x25\x93\x52\x48\x62\x62\x14\x7f\x24\x48\x61\x8f\x27\x1f\xac\x82\xd4\x5d\x55\xa8\xb5\x90\x5b\x2c\xc9\xe3\x6b\x5a\xbe\x17\xef\x1e\xbf\x5b\x39\x37\x40\xe0\xbd\xc5\x84\x30\x7b\xb7\x7a\xec\xd3\x18\x79\x6c\x63\x10\xbe\x7b\x9c\xcd\xf3\xc5\x7f\x1f\xff\xfb\xb2\x79\xb7\xba\x7f\x82\x0f\xe8\xdd\x64\xf2\x48\xde\x98\x58\xda\x8f\x27\xf4\x03\x2d\x75\x0d\x41\x78\xd3\x30\x5c\x10\x91\xa6\x19\x9f\xf7\x46\x4c\x6b\x9a\x3f\xe5\x0c\x8c\xc4\x6b\xf2\xd8\x84\x5f\x7f\xf7\xb8\xed\x74\x4f\xea\x34\x7d\xfc\x37\xa5\xc7\x37\x7a\x37\x79\xb7\x1a\xb5\x79\x15\x79\xfc\x6c\x23\xc5\x96\x86\x15\x4a\xf2\xf8\xf5\x8e\xca\x22\x4c\x5b\x93\xc7\x4f\x77\xbb\x8a\x9e\x59\xd7\xb9\xf2\x28\x2e\xdb\x0d\xe5\x2b\x21\x11\x5e\x91\xc7\x2f\x8b\xf2\xec\xf5\x9b\xb3\x9f\xce\x66\xef\x56\xef\xbe\xcc\x16\x7f\x36\xd3\x7c\xb7\x42\xef\xbe\x6c\x9b\xdc\x90\xc7\xdf\x6d\x0a\xae\xc4\xf6\x2f\x6f\xda\xd4\x9d\xed\xc8\xcc\xc3\xa7\xa7\xe9\xe3\x97\xe2\x8a\x55\xf4\xdd\xe3\x77\xb7\xc1\x04\xb6\x64\xd7\x34\x8f\x9f\xf2\x95\x14\x6c\xd5\xdc\xd2\xab\xd7\x6f\x9a\x2f\xaa\xa2\x7c\xff\x05\x95\xf2\xae\x81\x79\x9c\xbd\x64\x9c\xb9\x9f\xe2\x8a\x35\x2f\x9e\x9b\xb6\x82\xdd\xba\x81\x76\x5e\x16\xa5\x6d\x5a\x21\x7c\x47\x1e\xbf\xbb\x7a\x26\x5f\xbf\x79\x77\xd5\xf6\x77\x4d\x1e\xdf\x32\xee\x2a\x2a\x84\xaf\x48\xa9\x1f\x1a\xeb\x83\xe4\xef\x46\x1b\xe1\xdd\xe3\x0c\x5c\x90\xbc\x5b\x3d\x42\x8f\xd1\xe0\x2a\x4d\xb3\x2b\xf2\x0a\x7c\x83\x67\x57\x7a\xa7\x10\xbe\x4a\xd3\xab\x4b\x32\xfb\x1c\x5c\xa9\x0f\x67\xb8\x26\x43\x1b\x19\xec\x57\x72\x93\xa6\xd9\xbe\x69\x4a\xbd\xe5\xfb\xaa\x22\xe4\xaa\x69\xae\x2e\x66\x4f\x26\xb3\x19\x42\xf8\x96\xc8\xa6\x11\x69\x5a\x5c\x92\x7f\xc7\xcf\x75\xdd\xd7\x1a\x95\xf3\x70\xe0\x4d\x20\x98\x00\x09\x77\x20\x9b\x78\xe3\xcd\x0e\x38\xbd\xb5\x25\x07\xb1\xb4\x80\xa8\xf9\x73\x91\x99\xe8\x21\xcf\x45\xf6\x17\x89\x15\x1e\xce\x10\x7e\x95\x29\xe7\x64\x55\x4d\xe0\x49\x1e\x1c\x91\xb1\xc6\x1d\x80\x6e\xfa\x8e\x65\x12\xab\xc9\x56\xac\x4c\x4c\x46\xac\x26\x15\xe3\xf4\x8d\xf1\xbb\x23\xa4\xe3\x06\xac\x44\x49\xa4\xb5\xcb\x85\x21\x4d\x18\xdf\xed\x95\xd1\x81\x5c\xa8\xe0\x6b\x69\x65\x21\x06\x99\x85\xf7\xb1\x2a\xee\xa0\xd2\x07\xc3\xe5\x46\x03\x36\xb9\x95\x05\x08\x3f\x83\xdb\x0e\xd4\xea\x4b\x5b\xfb\xad\x93\xa8\xc0\x70\x7e\xd4\xa5\x2d\x25\x17\x34\xea\x5b\x01\x21\xcd\xab\x62\x4b\x47\x24\x39\x6b\x9b\x1c\xeb\xfc\x44\x37\x52\xec\x95\x00\x6a\x34\x4d\x87\xdb\x34\x65\x66\xbc\x13\x48\xca\x10\xfe\xc2\xf5\x16\xe8\xf1\xbd\xa7\x77\x2f\x8b\x5d\x9d\x6b\xea\xd9\xc4\x60\x84\xdf\x7a\xa5\xbe\xa6\x3c\x9f\x42\xea\xad\x64\x8a\x7a\x59\x1d\xe3\xd7\x5f\x54\x7b\x09\x0f\x0a\x58\xe6\xe8\xe6\xad\xe6\xdf\x7e\xb7\x93\xb4\xae\x9f\xaf\x98\x02\x6b\x9f\x5d\x51\x2b\xfa\x82\x97\x62\xcb\xf8\xb5\x4e\x28\xf7\x2a\xfc\xac\x01\xff\x64\xfc\xfa\x2d\xfd\x00\x8d\xad\x64\x71\x7d\x1d\x7c\x6f\xd8\xf5\xa6\x32\x1e\x99\xe9\xed\x59\x29\xf0\x7b\x7a\xf7\x86\xfe\xd3\xb8\xe3\xae\x77\xb4\x64\x45\xf5\x6c\x53\xc8\x1a\x52\x0e\xd6\x29\x03\xe0\x46\x4e\x70\x59\x81\x33\xb0\x34\x2d\x2e\x66\xb3\x34\x3d\x41\x1f\xec\xfd\x6a\x9b\x35\x93\xb4\xa6\x2a\x03\x72\x0c\x3f\x99\xc6\x8f\x8a\xb3\x90\xb1\x35\x06\x3f\xb3\xcc\xb9\xa4\xa3\x12\x87\xe4\xe3\xbf\xa9\x8c\xe2\x4a\x1f\xaf\x4e\x99\xd5\x55\x65\xe5\x55\x76\x60\x73\x28\xda\x25\x37\x87\x4a\xc0\xa5\x70\xa4\xe6\x5e\x9a\x3b\xc2\xd6\x99\x4c\xd3\xe1\xda\x7c\xa6\xe9\xb0\x96\x99\x1f\x0f\x94\xff\x81\xb9\x0b\xc2\x89\xf1\xb5\xfc\xa3\x90\xab\xa7\x2a\x93\x68\xf0\x03\xcd\x20\xb0\x17\xe6\x93\x82\x97\x1b\x21\x31\x9f\x6c\x68\xb1\x42\x87\xc3\x01\xa1\x3c\x1c\x83\xed\xbf\x69\xa0\xbd\x03\x1a\xdc\x36\x4d\x67\x2a\xa5\x09\xa0\xb9\xa5\x7c\xdf\xa1\x97\x9f\x99\xe1\x39\x17\xce\x12\x73\x72\x4f\xf9\x2a\x9f\x06\xc1\x97\x58\x06\x9c\xa0\x52\xb1\x1b\xfa\x56\xec\xcb\x0d\xdc\xd9\x13\x9b\x14\x15\x04\xa6\xd7\x01\xe1\x19\xfd\x0c\xe1\x8c\x93\x28\x13\x4d\x28\x5f\x91\x91\x3e\x33\x5f\x82\xd6\xa1\xef\xb0\xf6\xf0\xc8\x00\x33\x63\x6c\xd4\x0d\xf9\x61\x3d\xef\x1b\x1f\xa5\xc0\x5b\x04\xb7\x6e\xfa\x7f\xef\x8d\xe0\x91\x1c\xf1\x47\xfc\xf2\x8f\xd3\xe9\xa1\xb3\x24\x4a\x0f\xc1\xba\x6f\x6b\xc7\xcf\x82\x2d\x65\x7a\xd3\x3a\x88\xca\x6c\x48\x74\x07\xfb\x72\x43\x9d\x50\xbe\x8d\x57\xe2\xce\x9c\xcd\x5f\x4c\x97\xad\x06\xb4\x2c\x56\x6c\x5f\xff\x74\x41\x66\x9a\x72\x36\x5f\x3f\x5f\x90\xd9\x21\x63\x08\xdd\x47\x74\xb3\x74\x52\x44\xbf\x34\x83\x78\x51\xad\xe7\x1d\x81\xc1\x94\x07\xae\xb0\xa4\x37\xb9\x18\x73\xbd\xa2\x17\xe4\xb3\xe9\x74\xce\xcd\x5d\xc3\x33\x02\x4e\x53\xc2\x01\x03\x13\x2a\x68\xcf\xb8\x33\x61\xc1\xb0\x27\xbb\xe2\x9a\xfe\x84\xe3\x52\x4a\xec\x8e\x0b\xfd\x6c\x38\x62\x7d\x6b\xab\x07\x97\xe0\x93\x47\xe3\x68\x14\x30\x19\x62\x98\x2b\xbd\x0d\x02\x97\xb2\xc7\x8b\x63\xd4\x0c\x38\x44\x32\x97\x4d\xd3\x7c\x69\x6a\xa2\x87\x1a\xdb\x98\x34\x1d\x72\xd3\x4f\x9a\xba\xb5\x1d\xf3\x09\x2c\xe7\xc5\x67\xd3\xa9\xa5\x2f\xc0\xf7\x41\x29\x84\x5c\xd5\x1a\x6c\xc5\xe3\xc4\x89\x9e\x77\x82\x06\x82\x0c\x39\xc8\x1a\x9a\xa6\xce\x38\x36\xbf\xd1\x5c\xb7\xfb\x1b\xcd\x0a\x5c\xa0\xdc\x16\x38\x2a\x65\x8b\x46\x77\xbe\x40\xb9\xad\xba\xa1\x59\x01\x6f\x0d\x9e\x22\xfc\xad\x83\x03\x3e\x75\x34\xc3\x53\x04\xf6\x03\x35\x55\x86\x37\xa0\x97\x43\x38\x38\x21\x0c\x9c\xc0\xd4\xbf\x29\x3f\xb0\x4c\xa2\x03\xcb\x4e\xae\xac\xf1\x56\x9a\x60\x76\x94\xed\xdc\x80\xc6\xdb\xe8\xf2\x23\x7b\x9c\x34\xcd\xb6\x00\x4c\xda\x6c\x1f\x8f\x13\xe1\x9b\xde\x2c\x08\x8d\x32\x9c\x22\xfc\x13\x84\xf7\x71\xbd\x59\xff\x2c\x7d\x30\xfb\x76\x43\x69\xd5\x81\x61\xbf\x7a\x18\xd6\xad\xf2\xe5\xeb\x97\x2f\x75\xad\x37\x47\xd3\xe8\xa9\x66\x9f\xf0\x53\x93\x76\x2f\xbc\x9f\x14\xe9\xa6\x99\xa0\x58\xc6\x47\xaa\x7e\x23\x9d\x04\xbb\xd6\x20\x55\x51\xd9\x0f\xb5\xff\x09\x50\x1b\xde\xf0\xfe\x02\x59\x9f\xd9\x5b\xf0\xca\x0c\xa5\x63\x61\x99\xfb\xd0\xd1\x5a\x70\x0e\x7e\xbf\x92\xc5\x35\xa8\x2f\xa0\x81\xb4\x42\x7e\x7d\x48\xdc\x93\xaa\x07\xfc\x6c\x2f\x6b\x21\x9b\x26\xeb\x4b\x26\xcf\x84\xd1\x7c\x30\xd8\x59\x12\x20\x37\x25\x14\xa8\x43\x7c\x47\xd7\xb3\xc9\x49\xd8\x0d\xa0\x74\xbb\xa2\x04\xdb\x1b\x2a\xd5\x17\xe0\xdb\xb3\xb7\xc3\xa0\x96\x69\xe9\x4b\x76\x83\xd0\xe0\x37\xd1\x5f\xda\x84\x11\x50\x08\xc3\x82\xa2\x03\x36\x50\x32\x5c\xd2\x63\x45\x1c\x4d\x23\x0d\xa9\xd5\x4c\x0f\xf1\x9a\xa6\xf1\xd0\x77\xbc\x92\x17\xb3\xe9\xd4\xe3\xc1\xc0\xac\x82\x4e\x40\xd4\xef\xb6\xa9\xfb\xbc\x3b\xb6\xe2\x3a\x53\x93\x55\xa1\x8a\xb7\x60\xf2\xa5\x0f\x0b\x55\x5f\x16\xaa\xc8\x12\xdd\x4f\x82\x81\x37\xd7\xde\x63\x73\x7a\xc2\xf2\x74\xbd\xa6\xa5\x7a\x5a\x55\xe2\x96\xae\x48\x52\x8a\xdd\xdd\x4b\x80\xad\x3d\xed\xca\xe2\xfa\xc5\xb6\xb8\xa6\xfa\xe5\x72\x47\x45\xef\x1b\xdb\x5e\xdb\x7d\x33\x9b\xe7\xad\x6d\xce\xc0\xba\xe6\xfc\x0c\x4c\x0c\xcf\xa6\xe7\x67\x4a\xec\xf4\xdf\x04\x0d\xe4\xa4\x96\x25\x49\x74\x1f\x39\xd3\x8d\x3e\xbe\x66\xeb\xf3\xab\xa2\xa6\x7f\xfa\x23\xfe\x7e\x5a\x7d\xfd\xfa\xcb\x6a\xf3\xf4\x6f\x4f\xbf\x78\xaa\xff\x3d\xfb\xe6\xf3\x2f\x9e\x3e\xff\xeb\xd3\xa7\xcf\x9f\x7e\x0b\x09\x3a\xfd\xf9\xd3\xa7\x4f\x5f\x3c\x7b\xfb\xf4\xf9\xd3\xd7\xb7\x84\x24\x58\xd3\x27\xd2\x98\xd6\x11\x69\x8d\xf6\xc8\x2c\xd8\x68\x77\xa1\x42\xb1\x93\x44\x58\x4e\x7e\xd5\xcf\x8f\xb4\xa2\x61\x80\x28\x0f\xcc\x3e\x93\x78\xaa\x81\x67\x99\xa6\x27\xbd\x7e\x03\x93\xd7\x00\x00\xbc\x92\x62\x97\x03\x72\xb7\x91\x08\x03\x0b\xb9\xff\x2a\xee\x24\x08\xc1\x1c\x06\x6b\xf1\xd0\x6b\xaa\xbe\x62\xb4\x5a\x65\x48\xa3\x99\x7b\x9c\xbc\xa7\x77\xfb\x5d\x07\xda\xbc\x97\x56\x2d\xa5\x05\x39\xa6\x64\x80\x85\x3e\x95\x61\x06\x60\xe9\x36\xe7\xbb\x36\xc7\xea\xb6\xbd\x16\xd9\xf7\x52\x43\x4a\x9b\x0c\x12\x2d\x9d\xfa\x16\x52\x0f\x96\x8e\x88\xd9\xeb\x3f\x38\x17\x96\x7a\xa0\x86\xcd\x81\xbd\xf7\xe8\x10\xdc\x19\xbc\xcb\x48\x0e\x4f\x20\x7a\x46\xa2\x89\xbf\x10\x59\x01\x82\x06\xb8\x22\x76\x66\xae\x69\x33\xa8\xb0\xd6\x17\x7a\x80\x50\xec\x07\xe1\x44\x1f\xf4\xa0\x1f\x29\x15\x52\x3e\xe5\x5e\xbe\xde\x4d\xd6\x42\x96\xce\xa2\x6a\x38\xc5\xb7\xcc\xe8\xba\xc9\x23\x3a\xaa\x69\xf6\x93\x4d\x51\x7f\x65\x1e\xbc\x79\x30\x62\xb3\x4c\xa6\xe5\x27\x53\x94\xbf\x95\xb6\x9b\x5f\x24\xfa\x45\x76\x75\x55\x2b\x94\xa6\xbf\xc8\x45\x65\x28\x47\xac\x16\xd5\x12\x2b\x8e\x06\x3f\x7a\x1a\x70\xcd\x38\xab\x37\x2f\x38\x03\x09\x48\xfb\x65\x0a\x78\x7a\x66\x45\xa6\xe7\xab\x8b\x82\x3b\xc5\xcd\xd1\x68\x85\x0a\xbe\x58\x59\x92\x74\xf0\x8d\x9b\x6d\xad\x9b\x89\x09\xcb\x44\x13\xd6\x5b\xf6\x3b\xad\xe8\xb5\x15\xf3\x27\x84\x1c\xc5\x20\x62\x50\x4d\xc3\x44\xe0\x48\x7f\x4f\xf9\x8a\x4a\x43\x99\xfa\x2c\xe7\xdd\x3f\xcc\x27\x36\xce\x56\x27\x5a\x66\x9f\xe4\x07\x8e\x37\xe1\x98\xd9\x07\xee\xaa\x90\x5f\x31\xfd\xb2\x3e\xf0\x16\xf8\x92\xe3\x35\x14\x4d\xd0\x71\xf5\x8e\x6a\x42\xb9\x1d\x73\xa1\xc6\xa5\xe3\xde\x3b\xed\x04\x36\xb9\xde\x2b\x45\x3f\xde\xa7\x29\x16\x76\x18\x56\xfc\xe4\xde\xec\xa2\x3d\xf4\xd0\x89\x95\x29\x5a\x3b\x78\x7d\x5c\xbe\x0b\x60\x81\xef\xcb\x6e\xe8\xf9\xd9\xef\x63\xd0\x73\xcc\xcf\x66\xd0\x86\x7f\xd4\x3e\xfe\xb2\x42\xf9\x2d\x2d\xea\xbd\xa4\x0f\x94\xb6\x25\xfc\x64\x5e\xfe\xcb\x35\xe0\x69\x6e\xcb\x2f\x7c\xaf\x71\x8b\x9d\x15\x08\x27\xd3\xae\xe3\xf2\x81\xa5\x10\x7b\xa5\x4b\xe5\x67\x10\x39\x11\x66\xa7\x11\xa0\xa0\xe7\x70\x0c\x7e\x64\xcb\x68\xf0\x3a\xb9\x4e\xd0\xe9\x7e\xcc\x56\xb1\xdf\xa3\x86\x6d\x57\x71\x53\x50\xa8\x2d\x0e\xd6\xe0\x06\xbe\x31\xfb\x4c\x7d\xa5\x61\x51\xf7\x10\x76\x3b\x76\x26\xaa\xe7\x67\x36\x44\xd5\x59\x32\x12\x62\x94\xec\x3e\x9c\x9f\x19\xcf\x87\x67\xb3\xdd\x87\xf3\xe0\x88\xd6\x1f\x3d\xd6\xb5\xdf\x9c\xaf\xe1\xdb\x0d\xcb\x61\xb9\xd1\xd4\x60\xf4\x9d\x31\xb7\x7d\x2d\x7b\x6e\x6a\x70\x3f\x8f\xae\x8a\x2a\xae\x20\xfa\x53\x82\x93\xb1\x39\xb3\xf6\x7d\x8e\xfb\x8c\x2f\x77\xe7\xf6\x05\xad\x47\xdd\x27\xc8\xb0\x55\xfe\x0c\xf0\xca\x0e\xd0\xc2\xab\xdf\xa1\x57\x32\x9e\x45\x43\x33\x61\x4c\x8c\x6d\x31\x44\x44\x23\x53\x84\xeb\xa6\x91\xe0\x90\x28\x0b\x8a\x02\x22\xe7\x95\xfa\xe1\x15\x0b\x31\x8a\x79\xf4\x95\xf9\x59\xa1\x9c\x06\x1f\x7a\xba\x37\x8c\xde\x7e\x25\xc5\x96\x98\x9f\x6f\x05\xd1\x30\x5f\xd6\x0a\xb3\x89\xa4\xc6\x2b\xc6\xdf\xdb\x32\x61\x52\x54\x56\x57\x26\x8b\x25\xd4\xd2\x60\xd8\x14\x71\x3b\x49\x3f\x28\x2a\x79\x51\xd9\xcb\xb5\x72\xe9\xba\x96\x71\x3f\x4e\xa6\xfa\x08\x14\xb5\xd2\xaf\x84\x21\xb7\x48\x9b\x60\x4e\xeb\x74\xc0\xac\x68\xee\x5b\xc6\xa9\x61\x1d\xd7\xae\x29\x0e\xf7\xe1\x8b\xc2\x9e\x6c\x36\xb9\x2a\xa4\x6f\xe7\xca\x25\x4f\x43\x50\x5d\x3f\x73\x1e\x95\x66\xf6\xfc\xbd\xda\x6f\x5d\x75\xfb\xf9\xc2\x7b\x7c\x6e\xd3\x80\xd3\xe7\xfa\x2d\x2a\x76\xcd\x7f\x64\xab\x6b\xaa\x6a\xd3\x50\x59\x94\x1b\xba\xd2\x85\x5c\x3d\x93\xa2\x91\x61\x3f\x22\x93\xf4\x9d\xd9\xeb\x6f\x5c\x63\xdb\xe2\x83\x9e\x5a\xe7\xf3\x5b\xe3\x94\x6c\xda\xa6\x18\x4f\x08\x76\xe0\x40\x30\x7e\xf9\x13\x71\xbf\x7e\x76\xbf\xde\x68\xf2\xe0\xa7\xe8\xeb\x67\x7f\xb7\x36\x6c\xad\x4c\xfd\x9a\x56\x5f\x09\xf9\xcc\x30\xd0\x5e\x52\xbe\xf7\x53\xeb\xb0\xb9\x30\x9f\x30\x8d\x08\x30\xd4\x09\x21\x0c\xf4\x3b\xf0\xb5\xc9\x1b\x8d\x2b\xbe\x14\x2b\x4d\xf0\x78\xb3\x5b\x9f\x6d\xb4\x0a\x11\x7e\x1f\x45\xb5\x78\xdf\xb6\xc1\x8e\xb4\xeb\x2d\xe9\xf2\x74\xad\xa8\x84\x63\xde\x7e\x1a\x85\x33\xef\xf0\xc0\xe6\x82\x9f\x06\xc8\x31\x3e\x08\x74\xb3\x6b\x29\xb8\x62\x54\x12\xfb\x09\x87\x56\x68\xb4\x53\xe3\x74\xd8\x91\x47\x96\xdf\x3c\x1a\x61\x6a\xf0\xb3\x34\xa5\x32\x1a\xea\x77\x2d\xe7\xf5\x4b\xd5\x52\x43\xc8\xc4\x41\xb6\x02\xfc\x10\xd9\xc1\x9c\xc8\x34\xf5\x1e\x0a\x3f\x0f\x28\x81\x0e\x8f\x01\x0e\xcb\xe3\x57\x61\xab\xe3\xcf\x8e\xa2\xdf\x58\xfe\xdd\x37\xdc\x32\x4d\x98\x27\xda\xa6\x96\xa7\x06\xce\x46\xc0\xb5\x8b\x3e\x92\xc8\xe1\x6b\x05\x99\x9e\x17\x17\x3e\xdd\xa1\x6d\xc5\x68\x84\x7c\xe2\xa2\x58\x5a\xb8\x9a\xa6\x99\x18\x91\x9e\x0c\x3f\x20\x39\x17\x23\xe3\x70\xb1\xa4\xac\xca\x18\xa0\x60\xb6\xd5\xc7\x1c\x35\xcd\x0c\x3d\x52\xb9\x18\xa9\x43\x14\xec\x37\xe0\x5b\x8b\x12\x4b\xa2\x17\x74\xa0\x7a\xf6\xdd\x14\x93\x90\x3d\xf4\x41\x3c\xd3\xf4\x03\x73\x04\x46\x27\xb6\xeb\x31\x89\xe5\x25\x15\xe4\x81\xbc\x36\xce\xe3\xbb\xfa\x51\xb9\x1d\xd7\xe3\x77\x6f\x46\x8f\xaf\x71\x92\xa0\x51\xbb\xa5\x6a\x43\xc3\xa2\xd9\xff\xda\xbc\xab\xd1\xbb\xfa\x91\x2e\x78\x06\xb5\x12\x84\xdf\xa8\xe8\xac\x3c\xd3\xa3\x7a\x99\x51\x84\xe1\x10\xe1\x13\x54\xc6\x3f\xc1\x26\x44\xa3\xee\x51\xb0\xd0\x23\x06\xbf\x7b\x41\xa2\xa3\x66\xd3\x06\x2f\x85\x26\xd6\xbd\x91\x14\x44\xfe\x92\x2d\x6a\xee\x31\x5f\x69\x22\x7f\xc5\x5a\x8f\x1f\x7b\x9f\xcf\x92\x11\x43\x68\xd0\x45\x4c\x4c\x5c\xdf\x3a\x21\x84\xc1\xd5\x0b\x19\x20\xf6\x21\x17\x60\x70\x6f\x82\x62\x69\x50\xd8\x29\xe5\xc0\xad\x3e\x2c\x23\x88\x2c\x73\x50\xb6\xbc\x17\x65\xcd\x93\x24\x37\xd1\xa7\xf1\x6f\xd1\xf2\xfe\xf6\xc0\x1a\x85\x61\x43\x07\xc1\x8d\xd3\xb8\x83\xed\x20\x08\xab\xae\xa0\xef\x4e\x0c\x51\x13\xff\xc0\x9d\xbb\xf6\x92\x79\xfb\x35\xd8\x87\xe0\xd0\x63\x4e\xe8\xb9\x22\xaf\x78\xc6\xd1\x39\xba\xe7\x24\x63\xf0\x3e\xf2\x55\x36\xc5\xc3\x29\x42\x1a\x0a\x6d\x0d\xdb\x53\xea\xbb\x05\x9f\xe5\x66\xcc\x26\x4a\x4c\xca\xcd\x41\xb7\x6c\xda\xf8\xd6\xb6\xe1\xcc\x16\xda\x46\x06\x72\x4c\x78\xd8\xeb\xd8\xb7\xa3\x1b\xcd\x38\x30\xb0\xa1\x13\xd4\x29\x66\x3a\x71\xb7\x37\x8a\x50\x7a\xb4\x8e\xd8\x42\xca\x81\xf2\x4f\xd2\x73\x96\x49\x2c\x0d\xe8\xd4\x64\x62\xfc\x36\xbd\xc8\x7c\x4a\x90\xe9\x9f\xa9\x29\x96\x27\xae\xb8\x24\x2f\x20\xc6\xd7\x65\xa7\x45\x60\x9e\xc7\x7d\xc8\xb6\x61\x42\x63\x00\xf0\xaa\x9d\xc3\xb5\xc8\xa8\xbf\x2a\xa7\x8e\x2c\x3a\x1f\xcf\x40\x2d\x93\xba\x73\xa8\x93\xe7\xbe\x22\xf1\xbf\x7c\x8c\x92\x53\x4d\x2d\x51\xae\x2e\xc7\xb3\x34\x1d\x46\x6d\xc1\x8d\x38\x6e\xcd\x06\x3f\xd1\x4f\x8e\x4f\xda\x41\x9a\xc2\xb3\x70\x46\xdf\xf6\xef\x8a\xea\x3b\xe1\x98\x07\xee\xbf\xcc\xbb\xe0\xdc\x45\x55\xe1\x73\xe2\x83\xeb\x86\x4c\xed\xfc\x04\xb3\x1b\x6b\xdc\xcc\x17\x69\xc1\x66\x50\xc2\xd4\xfb\xd1\x06\x89\xee\x30\xbe\xcd\xc8\x82\xa7\xed\xb8\x23\x53\x44\xf7\xe3\x0a\xc4\xdd\x98\xfc\xab\x42\xea\x5b\x9a\xb7\x40\x0f\x18\x7a\x06\xc2\xcc\x65\x3e\xc5\x2b\x51\xda\x81\x72\x3b\x26\xf7\x39\x5a\x6b\x90\x3c\x52\x2d\x32\x88\x63\x3c\x31\x57\x1d\xc4\x11\x9b\xf5\x35\x99\x61\x60\xe1\xaf\x9c\x8e\x9d\xe1\xde\x6c\xbd\x84\x1e\xbe\x6f\xa8\x54\x7d\xa4\x5d\x40\x43\x6d\x19\x1f\xb7\x14\x92\x26\xea\xc2\x23\x75\xe3\xb1\xd2\xc4\x8b\xf3\x37\x42\xb2\xdf\x3f\xd2\xaa\xa3\xc2\x66\xd3\xe9\x1f\xce\xcf\x74\x1f\x3e\xe5\xb8\x93\x4d\xd0\xc9\x80\x66\x1c\x61\x9a\x19\x89\x08\xef\x97\x09\xf0\x8e\xfc\x43\x65\xbc\x95\x0e\xe0\x44\xcf\x9a\x95\x45\x95\x38\xae\x18\xeb\x6f\x86\xc5\xf1\xb6\x95\xa7\x64\x40\x3a\x92\xc0\x3c\x05\x57\xae\x21\xb3\xc2\x1b\x5a\xbe\xa7\xab\x5f\xa8\x14\x06\x8d\x1e\xce\x5a\x72\xaa\x5d\x1e\x07\xcd\x19\xb7\xa8\xb5\xdf\x8e\x36\xc7\xd4\x4f\x66\x7f\x86\x17\xc6\xef\xe8\xef\x19\xba\xef\x04\xe0\xec\x22\x67\x9a\x48\x88\xde\xb6\x36\xd9\x68\x02\x67\xe8\x08\xa1\x83\xcc\x62\xb5\x7a\xa6\x31\x8c\x34\xfd\x36\x64\xe6\x3b\x01\xcc\x83\x75\x50\x7f\x9b\x56\x15\xc4\x27\x68\x24\xbb\x5a\xb4\xb7\xc2\x67\x58\xcd\x90\x88\x37\x7b\x8c\x00\x45\xc2\x09\xd5\xd7\xa3\xa1\x6e\x8d\xe8\x08\xf7\xab\xa3\x7b\xf4\x7c\x62\xd5\x2f\x4e\x6a\x36\xd0\x8e\x66\x83\x95\xdc\x1d\x10\x9e\xda\x98\x7b\x9f\xc4\xc3\x3a\x20\xdc\x75\x2a\x10\x9c\x1e\x42\xe4\xdc\x88\xe1\x50\xbe\x75\xb2\x2f\x4c\x3f\xba\x47\x5f\xfd\xeb\x7b\x14\x46\x3e\x35\x86\x24\x4d\x93\x29\xa2\xc1\x76\x1b\x76\xd9\x35\xe0\xc8\x4f\xf0\x05\x1b\x24\x9a\x23\x3b\xf8\xc6\x08\xba\x1c\x66\xc1\xc8\xf4\x9c\x5d\xfc\x31\x4d\xe5\xb0\xa7\x8d\xa6\xe1\xc3\xbe\x56\xce\xd9\x68\x84\x7a\x6b\x80\x7f\xa4\x1e\xd2\x24\x4d\x7f\xd1\x68\xa9\xee\x1d\x86\x8d\x3f\x7d\xc8\x51\xfc\xd0\xd0\x53\xa5\x7b\xa9\x38\x91\xe1\xb2\x59\x5d\x68\x05\x22\x97\x00\x09\x8b\x78\x1d\x99\x6c\xe9\x74\xe7\xb9\x11\x30\x33\xdc\x5b\xc9\x84\x9b\xb7\xb5\xec\xe5\xf7\x2e\x20\x5d\xbd\x90\x4b\xe4\x43\xb7\xca\x15\x95\xb6\xb6\xab\xa0\xcb\x9f\xd5\xa2\x62\xab\x33\x70\x5c\x68\x44\x2a\x09\xb6\xe3\x48\x53\x57\x70\x9e\xc9\x63\x5e\x6f\x84\xb1\x26\x57\x95\x28\xdf\x27\xf8\x54\xb9\x4d\x3c\x54\x3f\xc3\xde\xc2\xb7\xe1\x6a\x18\x14\x39\xff\xe8\x00\x12\xec\x1a\x0f\xb7\xbe\x14\x37\x54\x9a\x57\xf3\x15\xfd\xa0\xde\x8a\x37\xae\x95\xb0\x54\xf8\xb6\x66\xb2\xc3\x65\x3e\x31\xcf\x9e\x42\x27\x26\xd9\x53\xd2\xcc\xd0\xe1\x35\xc6\x49\xa5\x9b\xe7\x43\xbd\x27\x47\x11\x68\x9d\xb6\x84\x74\x2a\x11\xe0\xc8\xb7\x0d\x17\xa6\x91\x50\x25\x76\xa0\xed\x7d\x24\xbf\x1f\xf0\xc0\x6b\x6a\xc6\xc7\x7b\xe5\x6f\x32\x0b\x5b\xb4\xa7\xc0\xfd\xc8\xf9\x88\xf6\x23\x47\x82\xbc\x67\xc6\x29\x46\x61\x7e\x31\xa7\x30\x25\x27\x94\xd7\x7b\x49\x5d\x30\x35\xf7\x1d\xd0\x07\xfb\x36\xd1\x62\xf3\x83\xfa\x42\xcc\x33\x41\x6a\xd7\xdc\x77\x2c\x7b\xae\xff\xd6\x08\x9d\x18\x02\x72\x41\xce\x18\xcf\xf6\x58\x01\x33\x4d\x23\xcf\x19\x42\x97\xa4\x00\x77\xe1\x51\x4b\x7b\x84\xc6\x27\x5a\xc2\x05\xd9\x3b\x45\xe7\x7b\x3d\xcc\x5c\x60\x25\xda\x18\x6a\x05\x16\xa3\x59\x18\x21\xfb\x9f\xa7\xd0\x57\x8d\xed\x19\x89\x71\xc8\x38\x6b\x9a\x16\xb1\x05\x0a\x03\x08\xd3\x13\xe7\xb2\xf5\x21\xc2\xc9\xcf\x99\x42\xe3\x5e\xa5\x8b\x91\xc1\x83\x03\x3c\x83\x9d\xc0\x9e\x05\xe1\xe6\x7c\x1a\x16\x89\x8c\x58\x23\xeb\x6c\x28\x81\xfb\x01\x76\xa5\xfa\x1d\xeb\x19\x51\x9a\x42\x99\x6b\xfb\x91\x05\x5f\x61\x90\x69\xe1\xbc\xcc\x41\x3e\xcc\xbf\xb8\x32\x66\xe7\x2d\x9f\x66\x4f\xa6\xe7\xfb\x0b\xcf\x9f\xd9\x8f\x46\xa8\x5e\xec\x97\x51\x3b\x87\x13\xa3\xc8\x54\x87\xcd\x0c\xc5\xf9\x88\x59\xe2\x3a\x0c\xf2\x6b\x3d\x74\xc7\x4f\x83\x25\x5e\x8e\x15\xbe\x0c\xb3\xe6\xeb\x80\xa9\x67\x59\xbf\x23\x05\xb0\x79\x3c\x43\xe1\x4b\x01\x27\xdd\x4e\x01\x54\x93\x02\xc6\xa9\x23\x6b\xb9\x13\xbc\xf4\xf3\x22\x5a\x6c\x57\xa2\x63\xa1\x88\xa1\xbe\xce\x8e\x25\x64\xb4\x52\x09\x42\x10\x48\xab\x3d\x48\xd1\x76\x17\x84\x85\xdf\x63\x31\xf0\x66\x65\x2d\xe7\x22\x02\x4e\x00\x50\x8f\xf9\xc1\xfe\xf4\x0b\x1c\x55\x0d\x1b\x2f\xd0\x68\xd6\x56\x76\x6f\xdb\x51\x5b\xa3\x02\xf3\x0e\x77\xf9\xb8\xd0\xdc\xad\x68\x3e\x9e\xe1\x93\x83\x8d\x3b\x33\x07\xfb\x37\xfd\xce\x0f\xa7\x07\xb7\xad\x51\x3c\xe2\xc0\x2d\xa3\x75\xd2\x11\x12\xb2\x5f\x09\xb9\x2d\x74\x27\x99\xbe\x51\xb0\xa4\x2d\xf3\x1d\xc5\xa1\x89\xc3\x88\xf8\xee\x42\x5e\x53\x05\x61\x94\x19\xbf\x7e\x06\x10\xe5\x7b\x5a\xaa\x0c\x39\xc5\x46\xf3\xae\x3f\x54\xa8\xed\xe1\xaf\x31\x98\x6f\x0f\x9b\x41\xf9\xad\xb7\x7f\x62\x4d\xc5\xac\x4f\x09\xf2\xf7\x8c\x1b\x26\xb0\x37\xde\xa2\x2b\xa6\x84\x7c\x51\x7f\x03\x57\x9a\x0c\xb9\x87\x79\xe1\x31\x81\xa2\x36\xc3\x63\x17\xbd\x90\x3e\x2c\xe9\x76\xb8\x8f\x90\x35\x2a\xe5\xd5\xea\x4b\x33\x6c\x53\x74\x05\x1a\xf4\x90\x05\xba\x00\x44\x3a\x53\xa7\x6d\x4d\xc0\x93\xae\x1d\xb4\x33\x26\x6a\xd7\xe3\xdf\x4e\xa1\x5e\x86\x75\x03\x40\x36\x9e\xab\xe3\x62\x49\xe0\x47\x0e\x67\xa0\x5b\xa5\x4c\xc7\x69\xaa\xdc\x9a\xc1\x43\x74\x49\xa4\x17\x0e\x85\x79\x4a\x5c\xd8\x9c\xb7\xc2\xeb\xe2\xcb\x63\xb9\x4c\xd3\xf4\x24\x5e\xfa\xaa\x48\xbf\x83\x91\xa8\xc8\x66\xa5\xe9\x94\x10\xb0\xed\x6e\xa1\xd0\x8f\x60\xec\x90\x99\x61\xab\x60\x6d\xdc\x03\xcd\x2d\x30\xe2\x70\xa0\x9c\x3b\x74\x7d\x37\xe3\x49\x8d\x5b\x70\xe7\xce\xcb\x4b\xe0\x03\x62\xee\x38\x5b\x45\x1b\xe2\x8d\xe1\x70\xda\xa3\x53\x75\x35\x52\xeb\x56\xea\x42\xa4\xa9\x18\x07\xdf\x4f\xa6\xf0\xd0\xfa\xf1\xd8\x7e\x70\x5b\x44\x23\xde\x76\x51\x2e\x0b\xbd\x2a\xe6\xf7\xb8\x30\x75\xa3\xf1\xf8\xd5\x43\xf8\x35\xb4\xfb\x85\x93\x03\x08\x3d\xf2\x1f\xdc\x57\x81\x5c\x1c\x5e\x31\x0c\xf6\xb1\x69\x8a\xa1\xdf\x01\xbd\x41\xb1\xc0\x6d\xd8\xea\xfb\xb9\x40\xa9\x32\x16\xc1\x05\x25\xe0\xfb\x3c\xeb\x37\x03\x6e\xef\xe6\x94\x10\x0e\x1d\x5a\xd8\xd5\x34\xea\xd2\xa6\xc0\x10\x2e\xec\x87\x1e\xde\x3c\x33\xbf\xc9\x2f\xca\x36\x87\xdb\x4c\xa2\x50\x9e\xb5\x9f\x97\x6a\x1e\x17\x6e\xb3\x7c\x5c\x61\x93\x84\xf2\x36\xeb\x42\x81\x47\x34\xa8\x67\x87\x65\x38\x72\xdc\x50\x8b\x28\xee\x11\xbb\x81\x5e\xc8\x79\x5c\xcb\xf6\x00\x7d\xbb\x42\x58\x22\xd7\xd7\x5b\x71\x29\x4f\xf4\x34\xc5\xd0\x97\x44\x08\xa1\x81\x2b\x4d\x24\x68\x6a\x81\x7b\x17\x19\x4a\x45\x0d\x6e\x66\xdf\xdf\xf0\xc8\xb4\x44\x19\xc8\xfa\x9d\x1a\x0c\xa8\x90\xb5\xf5\x01\xfc\xdb\xd8\x44\x70\xa7\xe0\xc6\xef\xe1\x8e\x55\x10\xe7\xd0\xde\xfd\x53\x77\xf1\x3f\x7e\xbf\x63\x1c\xa2\x24\x5f\x8a\xd6\x09\x6c\x75\xf9\x47\x50\x93\x8b\x75\x78\x3c\x6a\x6f\x35\x26\x3e\x72\xb4\x4c\x28\x8a\x63\xe4\x05\x22\xab\xd8\x96\x71\x41\x44\x80\x07\xb4\x0a\xff\xfb\xd0\x73\x07\xa7\x1f\xd4\x1b\x76\x55\x31\x7e\xed\x46\x58\xa7\xe9\x8d\x46\x3f\x03\xf5\x4c\x4d\x10\xfe\xb8\xa1\xb4\x32\xf6\x8d\x84\xa8\x79\x57\x58\x61\x46\x9e\xab\x93\x5e\x34\x10\x96\x07\x6f\x10\x62\xcf\x05\x2e\x83\x2b\x80\xd7\x64\x7a\xbe\xbe\xa8\x1c\xfa\xb7\x76\xee\xf0\x56\xa4\x5a\xac\x21\x18\xee\xca\xe1\xa2\xe7\x2e\xbc\xde\x0a\x0c\x7c\xd3\xd4\xfc\x0d\x3a\x27\x44\x18\x64\xf9\xbc\x18\x12\x93\x7b\x8e\x0a\xb2\xcf\x0a\x03\x1e\x36\x84\x39\xca\x46\xa5\xa9\xba\x20\xa5\x6e\xa4\x5d\xcb\xc1\x6a\x52\x02\x0b\x1f\xe2\x28\x89\xcc\x7f\xe2\xc4\xa0\x5b\x09\x02\xd6\x77\xb6\x21\xc3\x19\xc2\x10\x25\x7d\x85\x4b\x7d\xb8\xf1\x26\x4d\xb3\x97\xba\x4a\xdb\x1c\xc2\xe1\x57\x84\xf6\x75\x34\x7a\xdf\xd2\x0f\x30\x81\x2c\xc4\x38\x4b\x7d\x65\x70\x61\x27\x12\xee\xda\xc1\x47\x18\xd8\x91\xaa\x1d\xc4\x40\xc4\x5c\xae\x1d\x2e\xd0\xa1\x1c\x91\x15\xbc\x12\x07\xb3\x30\x6e\x41\x0e\xe0\xf8\xe1\xe8\x44\xdb\xe7\x06\xe1\x8f\x9c\xd9\x44\x5f\xdc\xe8\x0e\x49\xbb\xbb\x69\xaa\x8f\xfe\x50\xaf\x6d\x69\x31\x0c\xc7\x4e\x2d\xbd\x02\xfb\x4b\x91\xc9\x40\x07\xd8\x7c\x87\x0a\x48\xc8\x53\xcf\x75\x4c\x62\xc7\xbc\x91\x96\x0f\x3a\xc5\x7b\x33\xde\x58\xa7\xa2\x03\xe1\x71\x07\xc0\x77\xe0\xbb\x91\x91\xff\x71\x3a\x85\x47\xea\x84\xee\xc5\x70\xda\xe2\x24\x7f\xeb\x7a\xb6\x54\xfe\xb1\xc4\x9c\x0c\xa7\xe7\x19\x3f\xcd\x8e\x52\x5d\xec\x68\x68\xd0\xa3\xa6\xc9\x62\x9a\x1e\xac\x73\xee\x95\xd8\xb5\x04\xee\x69\xa9\xc7\x78\x03\x28\x96\xa1\xfd\x0f\xa8\x7d\xd3\xc9\xdf\x03\x75\x66\x0b\x62\x11\x1e\x66\x5d\x3c\xa8\x85\x02\xa7\xf0\xa1\xb8\x84\x06\x7e\x28\x4d\x0d\x7a\x76\xce\xf5\xd5\xb8\xff\x45\xc3\x5e\x83\xab\x7c\xab\x7f\x52\x18\xd3\x0f\x60\x83\x83\xff\x02\x7f\x0e\x9a\x92\xba\xe6\x45\x95\x51\xec\x1d\x84\x47\xbc\x4b\xff\x30\x05\x1d\x76\x75\x74\x42\xa0\x65\xdf\x96\x13\xa5\xf5\xf3\x9b\x85\x7d\xba\x8d\x32\x52\xbb\x04\xd3\x9e\xae\xf1\xd1\x54\xf1\xe9\xb1\xf4\xac\xdc\x89\xd2\x6f\xc5\xf1\x1a\xb6\x87\xea\xa7\x10\xd1\xe5\xf4\xd6\x50\x02\xf0\x96\xfd\x9b\x79\x4a\x61\x7d\xf1\xdf\xe0\xc3\x8a\x65\x3a\xcb\xcc\xcd\x32\x83\xa9\xb9\xd1\x69\xcd\x42\x7a\xf8\x2f\x2e\x30\x7b\xaf\xa8\xb8\x15\x2e\x4c\xbc\xac\xc9\x50\x56\x6d\x85\x1e\x4e\xa3\x02\x0b\x8a\x93\x35\x7a\xaf\x73\x58\xbe\x87\xf1\x6a\x05\x5a\xb1\xbc\xfa\x97\xd8\xaf\x6a\xcc\x70\x71\xf0\xca\xeb\x95\x63\xa3\x1d\xa0\x42\xac\xec\x9c\xbb\x77\x86\xe1\xda\xde\x59\x88\x3b\xbd\xce\x86\xb5\xe7\x7d\x18\x6b\x82\xe2\xe2\xcf\xa6\xe8\xde\x86\x99\x69\x9b\x1e\x45\x09\x96\xbb\xcd\xc8\x7e\x2c\xb1\x24\xfb\x16\x4a\x57\xae\xe6\x09\xc2\x6f\xc0\x88\x0b\x22\x38\x86\x08\x83\x07\x83\x43\x18\x80\x61\x97\x6a\xcc\x40\xd1\xe5\xe2\x49\x9a\x66\x8c\x7c\xa9\x32\x85\x10\xce\xca\xcb\xc9\x74\x3a\x6b\x9a\xf2\x62\xac\x7f\x68\xb2\xe1\x03\xcb\x4c\x45\x7d\xd7\x28\xb5\x1f\x08\xd7\x13\x49\x6b\x85\x3c\xe7\xc5\x3c\xbd\x26\x35\x7c\x7f\xa1\x8a\x4e\x5c\xac\x97\xe8\x10\x1c\x1a\x4a\x2d\x17\x85\x1e\x69\xdb\x28\x32\x3d\x57\x17\xb4\xab\x6d\x33\x1a\x29\xe4\x13\x17\xca\x29\xd5\x90\x28\xad\xf3\x88\x47\xab\xd9\x76\x0e\xf4\xcf\x89\x5d\xbf\x07\xff\xb6\x87\x88\xe3\x65\x28\x51\x60\x84\x09\xd2\xc7\x6d\x03\xf6\x97\x38\x17\x44\x84\x4f\x2b\x1e\x8d\x0a\x24\x17\x47\x1a\x27\x8b\x62\xb9\x24\xc2\x8e\x0d\xf8\x6d\x22\xe8\x62\xc4\x30\x3f\x59\x27\xa0\x89\x9d\x40\x1a\xb8\x58\xdf\x89\x3a\xff\x59\xe3\x48\xa6\xf8\x5b\xa1\x0a\x2f\x5c\xee\xe3\xdb\x99\x34\x90\x0d\xcb\x48\x6c\xcb\x71\xf8\x86\xf5\x8b\x95\x83\x6d\x04\xb4\xc5\x7a\x06\x8a\x65\x30\xca\xe1\x3b\x6e\xff\x98\xbb\x26\x7a\x09\x6d\xde\x82\x2d\x07\x89\xa2\x1f\x54\x02\xc1\xc0\x8c\x6f\xe7\xdc\x21\x48\x3a\xad\x6e\x3b\xc8\x13\x50\x3c\x82\xe4\x82\x66\xba\xa0\xd9\xf9\x04\x22\x9d\xed\xa9\x55\x54\x3f\xf8\xe6\x8d\x81\x69\xeb\x91\x83\x46\x7c\x16\x0e\x58\x9e\xd1\x43\x01\x41\x25\x24\x7c\x9a\xba\x36\x58\x2d\x81\x8e\x48\x7b\xd8\xf4\xf3\xd1\x49\x72\x5a\x4f\xd6\x43\x1a\xf4\x60\x2b\xea\x06\xe0\xb4\x46\x3e\xd4\x6c\x96\x17\xd6\xda\x32\x91\xe2\xeb\x13\xe4\xea\xb6\x53\x63\xb4\x97\xa1\x71\xa4\x3c\x3a\x68\x5d\x51\x1b\x74\x8c\x58\x30\x37\xcf\x4e\x57\x22\xd6\xe0\xde\xa9\x98\x4b\xaf\xf6\x2d\x27\x57\x7b\x56\x29\x94\x17\x56\xb3\xcc\x0f\x48\xd0\x38\x06\x1e\x2c\x8c\x57\x1c\xc3\x9c\xd8\x11\x0f\x4c\x96\xf3\xff\x0a\x7c\x58\xd8\x07\xb0\x85\xd4\x18\xc7\x83\x4b\x0a\xa5\x6c\x21\x57\xd8\x54\xc5\x7c\x72\x75\x0d\xf2\x46\x4d\x78\xdb\x9f\xe0\xae\x94\x7e\x50\x3e\xdd\x7f\xcc\x33\x5f\x88\xf8\x9a\x38\x28\x40\x82\x9a\x18\x8e\x1f\xca\x0d\xdb\x38\x9e\x1a\x91\xc1\x2a\x14\x70\xe2\x7a\x74\xf3\xa8\xeb\x62\xee\x7f\x8d\x92\xb3\x64\x64\xf9\x87\xed\x78\x93\x04\xe5\x71\x1a\x30\xa7\x74\xc7\x1d\x1f\x02\xba\xcc\x55\x51\xbe\xbf\x06\x55\x16\x38\xa0\xed\x27\x52\xf3\xf0\x33\x18\xae\xca\xb3\x28\xe7\x04\xf9\x15\x35\x16\x35\x6d\xf4\x45\x07\x8e\xa0\x0a\x90\x0d\xc0\x22\xc2\x92\x1d\xc9\x79\x7c\xd5\x14\x72\x2a\x52\xd0\xa3\x31\xc0\xd2\x5d\xc1\xe4\x35\x18\x32\x0b\x06\xed\x46\xfa\x89\x71\x81\xdc\xdc\x8d\x61\xf7\x66\x07\x55\x12\xeb\x16\x59\xd9\x32\x6e\x27\xfc\xef\x68\x2f\x7c\x6a\xb4\x1b\x3e\x75\x40\xbb\x27\x40\xe9\x82\x81\xbd\x7a\x00\x23\x81\xb1\x78\xdd\x8a\x1c\xf8\x11\x99\x6b\x73\xf5\x61\xbe\x6e\x35\xfa\xdb\xcf\x2f\xfc\x72\x3e\xdc\xc0\x17\xc1\x76\x1d\xa7\xf9\x46\x61\x2e\x26\xd7\x08\xe7\x9d\x84\x01\x24\xce\x3d\x15\x3f\x6a\x67\xd3\xee\xf7\x59\x32\x3a\xee\xc0\x44\x5f\xcd\xcd\xfa\xf6\x49\x4e\xf9\xc4\xbf\x68\x63\x3e\xe9\xbe\x67\x28\x32\x97\x48\x46\xc7\x25\x8c\xbc\x06\xb3\x8e\x96\xc6\xd1\x4c\x1c\xd4\x38\xb8\x37\x29\x18\xe9\xcb\x42\xbe\xa7\xb2\x36\x71\xc4\x7b\xf8\x24\x4d\x23\xd0\xbd\x5b\x24\xeb\x95\xd8\x6d\xd7\x47\x17\xc8\xbe\xa8\xc9\x7f\xc6\x4a\x24\xc8\x8c\x31\x56\x10\xa9\xa9\xfa\x81\xd3\x95\x09\x5d\x90\x15\x47\x8b\x51\x04\x10\xb3\xbb\x3f\x69\x9a\x15\xb1\x9f\x92\xbe\x5d\x44\xb8\x5f\xfa\x05\x8e\x64\xc4\x69\x85\x3f\x20\x9b\xda\xf2\xa4\xe8\x17\x60\x85\xac\x0b\x89\xfe\x35\x09\x56\xbb\xac\x6e\xcd\x34\x9a\x73\x7a\x48\x9d\x03\x75\xa4\x65\x1b\x48\x9a\x60\xc1\x11\xc2\xc2\xe3\xaa\x35\x99\x9e\xd7\x17\x47\xd8\x5a\x8b\xb3\xd6\x0e\xdf\x3f\xc6\xe8\xea\x25\xae\x88\xe8\x1a\x19\xee\x91\x5e\xc0\xfd\x72\x50\xa5\xe9\x89\xd5\x59\x54\xcb\xbe\x73\xf5\xc0\xe4\xf7\xdd\x59\xf2\x50\x67\xc0\x66\x27\x28\xc2\xd0\x2d\x3e\x25\xc1\x33\x83\x93\xb7\x1a\xbf\x0c\xee\xcb\x82\xfe\x56\xa4\x6c\xe1\x51\x0b\xc5\xcf\xf9\x39\x27\xac\x15\x5b\x86\xec\xc2\xee\x8e\x78\x64\x8e\xb7\xe7\x2f\x4d\x7b\x40\x1c\x47\x87\xd2\x0d\xae\x1d\x6f\x45\xbb\x4e\x2a\x1d\x8a\xe1\xdd\x6c\x00\x76\x60\xf1\x0b\x06\x48\x02\x73\xaf\x2a\x4c\xcc\x21\x00\x3e\x55\xdf\x1c\x0f\xe8\xfd\x63\xef\x0a\xf9\xdf\xc8\x20\x04\x38\x80\xf4\xb8\x74\xe8\x28\x56\x1d\x5c\xcd\x8f\x5d\xbf\x06\x6b\xf8\x30\x24\x96\xae\x39\x9c\xea\x0a\x40\x5c\xc5\x1a\xe9\x2a\xa2\xad\x34\xcd\x69\xab\x02\x75\xc5\x97\xa6\xf6\x2c\x58\x90\x35\x0d\xe3\x3b\xc2\xcb\xd3\x25\xb5\x84\x06\x61\x12\x69\xf2\x05\x68\x57\x9b\x7f\x5e\x5c\x04\x47\xb8\xf0\x24\xeb\xa2\xd0\x47\xb6\x3d\x87\x7b\x98\xd9\xb1\x84\xd9\xee\x24\x1a\xec\x27\x9b\x82\xaf\x2a\x0a\x6e\x16\xc0\xdd\x50\xdd\x34\xd5\xb1\xba\x1a\xbb\xe6\x42\xd2\xb1\x11\xd4\xb5\x46\x97\x2b\x9a\xed\x71\xd5\xf5\x45\xd0\x07\xe3\x2a\x84\x59\x9a\xee\x27\x10\x9c\x69\xde\xe1\x5d\x56\x9e\xff\xd7\x34\xd2\x00\xbe\x5c\x44\x57\xab\x42\xf8\x17\xb0\x93\x96\x74\x25\x8b\xdb\x48\xdc\xbf\x8a\x9f\x6f\x8d\x4c\x7c\x63\xd4\x7f\xd0\x7d\x26\xdb\xcb\xd0\x34\xe1\x17\x59\x2c\x11\x32\x5e\x6f\x55\x2b\x69\x0b\x69\xab\x81\x8a\x14\x0d\x3c\xac\x77\xac\x8e\x40\xe7\xa8\x69\x32\x36\x26\xc7\x4f\x00\x56\xb1\x5a\xd7\xb7\xa6\xa5\x13\x2f\xa2\x8a\x64\xdd\x46\xaf\xe1\x10\xf5\x03\x27\x3c\xa2\x35\x3e\x6f\xbb\xb0\x34\x10\x49\x3c\x0d\x84\x83\xb5\x30\xfc\xb0\xae\x75\x40\xcf\xb3\xe5\x20\xcd\x57\xad\x3f\x41\xf2\x5c\x64\xf7\x86\x6b\xd7\x1b\x21\x3e\x50\x8a\xbe\xa4\x51\x44\xde\x19\xe8\xdd\x85\x7a\xcb\xbe\x80\xe5\xf9\xcc\x40\xa6\x1b\xeb\x29\x83\x86\x85\x55\x46\x0e\xb4\x5d\xbb\xca\x59\xdd\x7c\xc3\x54\x21\x6a\x6e\x54\x5e\xf2\x64\x9a\xd8\x8d\xa5\x93\x56\xe1\x7b\x9c\xa9\x39\xcf\xa7\xd6\x0b\x1a\x54\x0f\x94\x29\x22\x7e\x55\xa0\x5d\x15\x4f\x62\xdc\x99\x04\xb3\x5c\x2b\xc0\xb1\x4f\x0e\x3b\x1c\xf1\xa9\x2e\xf5\x98\x0d\x92\x7e\xa4\x06\xdc\x3b\xfd\xb0\x80\x34\x3c\xf3\x60\xfa\xc7\x65\xe0\x2c\x6b\x9c\x1f\xde\x9d\x56\x84\x26\xec\x1a\x19\xcd\x0e\x5f\x60\x9c\xc9\x60\xb1\x4c\x43\x47\x43\x37\xe7\x35\x3a\x06\xe3\xf8\x18\x88\xee\xf2\xf4\xce\x2b\x1a\xee\x89\x5e\xf4\xfa\x58\xe1\x5b\xaf\x26\xb5\xa6\xf1\xc3\xad\xb9\x9c\xa6\x69\x36\x25\x84\xdb\x30\x06\xbf\xbb\x82\xdf\x14\xe5\xfb\xec\xa4\x3a\xf6\x14\xe1\x7b\x13\x3a\x1a\xe6\xef\xe2\x70\xc3\xc9\x39\x1c\x70\x4d\xd5\x1b\xaf\x7b\x15\x5d\x89\x70\x76\xbe\xc4\x90\xd0\x8e\x5e\x77\xeb\x70\xc6\xe9\x40\xd8\x38\x94\xdf\xe8\xfc\x28\x18\xa7\x1f\xd5\x17\x85\x0c\xda\x38\xae\x85\x82\x71\xbd\x15\xbb\xe3\x61\x99\x33\xe9\xf2\x83\x41\xc5\x19\xdd\x21\xfd\x9d\x4a\xf5\x91\x11\xe9\x06\x8e\xea\xa0\x03\x8e\x56\xfb\x38\x16\xc1\x4d\x9a\x0e\x57\xf3\x64\xf6\x04\x8e\x2b\xa8\xb0\x0f\x8e\x8e\xc7\xa6\x5f\xf5\xdd\x1e\xba\xe3\x13\xbe\x13\x8c\x2b\x6a\x7c\xe7\xd5\x47\xd5\xe2\x5c\x6b\x7b\x75\xb4\x94\xc4\x7a\xc2\xeb\x4e\xc9\xa6\x1f\xf0\xf1\x42\x74\x5c\xef\xd3\xfe\xfe\xc0\x77\x83\xd1\x07\xcf\x66\xf4\xb3\xc0\x1b\xad\xcc\x5a\x21\xf0\x29\xce\xb1\x17\x24\xda\x90\x22\x5f\x49\xb1\xfd\x4e\x77\x90\x19\x07\x59\xa0\x8e\x65\x59\xcb\x33\x34\x24\x74\x7e\x62\x18\x4e\x94\xeb\x86\x01\x2e\x3d\x0e\x18\xb4\xfe\xfb\x43\x46\xd8\x25\x6e\x99\x0f\x83\x9e\x18\x0a\x50\x46\x63\x02\x47\x39\x37\x70\x1e\x0e\x38\x78\x54\x10\xfe\xfd\x23\x2f\x8c\x63\x05\xde\xdb\xdb\x37\xb5\xb1\xef\x1f\xb8\x81\xe8\xfe\xd4\x25\xd0\x39\x47\xf3\x3b\x1c\xc2\x41\x20\xdc\xb5\x40\x20\xf7\xe6\x61\xca\xbf\x02\x62\x31\xff\xfd\x80\xff\x1a\xba\xd9\x05\xf1\x12\x89\x77\x9e\x0b\xeb\x31\x30\x50\x6d\x32\x78\x46\xeb\x8a\x37\x6e\xc6\x88\x6c\xa2\x10\x64\x16\xfd\xa3\x64\x7a\x4e\x2f\xc2\x86\x2c\xd2\x47\x47\x23\xf4\x13\x0b\x7d\xf5\x06\x85\x20\x46\xb1\x91\x81\x53\xf2\x66\xf2\x9d\xa8\xc9\x91\xe7\xa4\x63\x4f\xa1\x1b\x1a\xb9\x0a\xdd\xd0\xc0\x57\x28\x30\x22\xa9\x03\x96\x44\x1d\xf0\x4e\xb7\x5c\x6e\x77\xc7\x8d\x7b\xf6\xad\xae\x34\x36\x98\x73\xd3\xd0\x49\xb9\x19\xab\x49\xb9\x09\x1c\x13\x6e\x43\x76\xaf\xee\xcf\x60\xd9\xba\x68\x80\x25\xdf\xd0\xa8\xdd\x9d\xf9\xbc\x98\xce\x55\x1e\xe0\xec\x77\xa7\x4a\xd1\x3c\x90\x2b\x5c\xd3\xc0\xea\xda\x99\x75\x44\x0e\xb3\x62\x77\x9e\xdf\x83\xaa\x96\x89\xc5\x6f\x88\xa9\x76\xf4\xbf\xd2\xe3\xe8\xec\x46\x39\x2d\x10\xb4\x39\x43\x74\xde\x34\x19\x27\x62\x52\xd3\xca\xf1\x23\xdc\x28\x22\xff\x9d\x4d\x93\xc0\x77\x42\x08\xc3\xb5\xae\xb0\xab\x18\x28\x25\xd6\x9a\x7e\x31\xd6\xeb\x1a\x41\x28\xd2\x94\x4f\x64\xc8\xbf\xbf\x9c\x21\xb6\xce\xae\x68\x9a\x5e\x59\x86\xd7\x6f\x82\xf1\x2c\x79\xc7\x13\x44\x88\x8b\xad\x10\x55\xf9\xc3\x55\x64\xe4\x49\xc8\x14\xdd\xef\xc9\xa2\x0d\x48\x58\x91\xe9\x79\x75\x11\x97\x3a\xaf\x46\x23\xb4\x37\x27\x3a\x1a\x9f\x2d\xb6\xa8\x96\x9a\x4e\x85\xb7\xbe\xf6\x2d\x77\x7a\x4e\xd3\x6c\x4f\xae\x44\xd6\x89\x47\x69\x76\x6f\x41\x97\x07\x84\x0c\xd9\x5a\x75\x6b\x8e\x67\xe7\xd5\xa5\x1e\xd6\x78\x6c\x56\xbd\xf4\x25\x34\xd9\xbd\x26\x60\x10\xbf\xcd\x10\x5e\x91\x72\xa2\x44\x86\x06\xe5\x84\x6e\x77\xea\x2e\x03\x35\xbb\x34\x95\x97\xd3\xf9\x9a\x6c\x68\xb6\x36\xe7\x6d\xad\x8f\xa6\x04\xcd\x79\xd8\x10\xef\x8e\x35\x4d\x87\xc5\x7c\xa5\x4b\x1a\xd5\x0e\xec\x05\xf2\xcf\x59\x26\xac\xbe\x47\x64\x89\x8a\x57\x93\x72\x33\xba\x11\x99\x8f\xfa\x8f\x50\x6e\xb7\x04\xd4\x01\x58\x7d\x6a\x7f\xd2\x34\x5b\x93\x55\x30\xac\x29\x42\x4e\x91\xc5\x1a\xec\x5b\x1d\x85\x17\xfa\x88\xe2\x1d\x31\xba\xea\x6b\xac\x44\xbe\xc2\xba\xc1\x7c\x3f\xdf\x2f\xaa\x3f\xec\x6d\xd7\xcb\xbc\xc6\x42\xb2\x6b\xc6\x73\xd6\x34\x59\x31\xb7\x47\xcb\x4f\x34\x70\x14\x3b\x4f\xca\xbd\x4a\xf2\x64\x04\xe7\x3f\x41\x87\xc1\xb7\xd2\x6a\x66\xed\x80\xf4\xa2\x38\x81\xac\xef\x69\xb1\x4a\x30\xc5\x3b\x74\x50\x7a\x7d\xd2\xf4\xb9\xb9\x6a\xf8\x47\x69\xb8\xc1\x47\x43\x25\x1b\x9f\xaa\xee\x76\x26\x66\x06\xee\x3d\xfd\xa4\x67\x64\x24\xd4\xe8\xbd\xed\x48\x51\xca\x8a\xed\xae\x44\x21\x57\x5f\x16\xaa\xb0\xa8\x5f\x9b\xa0\xdf\x51\xe3\xaa\x4d\xaf\xce\xe3\x5d\x55\x30\x6e\xf8\x71\xce\xe5\xde\x19\x75\xe1\xa6\x6c\x9c\x6d\x8d\x11\x4e\x58\xad\x67\xf9\x9a\x57\x77\x19\x6a\x1a\xe5\xf9\x42\x16\x11\x80\x49\x35\xcd\x5f\x55\xa6\x22\x6b\xb1\x5f\x29\x38\xba\x9f\x3a\x99\x14\x2c\xb6\xf5\xe7\xde\x4e\xc1\x2e\xd7\x7d\xc4\xb9\x04\x5d\x18\xc9\x4a\x50\x8f\x0e\x75\x48\xea\x6d\x21\x95\xa6\xf4\x78\xcb\x6e\x70\x8e\x1e\x6a\x5a\x81\x29\x52\xf7\x7a\x70\x7d\x3d\xb8\xbb\x1e\xcc\x97\x70\x32\xef\x8c\x81\x8b\xc9\x49\xb9\xb9\x9c\x4d\xa7\x4d\xc3\x41\x43\xce\x16\x19\xcf\x96\x26\xd7\xc8\x9e\x58\xfb\x81\x5a\x20\x67\xbd\x60\x3c\x55\xb6\x29\x84\x0b\x62\x14\x6e\x45\x3c\x95\xf6\x25\x33\x7c\xb8\x4e\xb6\x83\x28\xb5\x31\x46\x50\x3e\x90\x64\xb7\x5c\xb9\x29\xe4\x53\x95\xd5\x08\x5d\x8e\x67\xe8\xbe\x20\x3f\xcb\x8c\xe2\x60\x70\x38\x81\x95\x72\x31\x81\x2c\xf8\x69\x9b\x81\x3d\x4b\xd3\x4e\x82\xf1\xe9\xed\x75\x10\xc3\xc9\x9a\x1b\xea\xb4\x1a\xfd\x8a\x21\x04\x5a\xab\x27\xbb\x47\x83\x22\x4d\xcd\x75\x89\x7a\xd2\x57\x26\x6c\x3e\xe4\xe3\xbd\xee\x08\xbb\x17\x4b\x2c\xf5\x7f\x86\xad\xe4\xf7\x3a\xde\xe7\x40\xa9\x81\x74\x8b\x2c\x78\xb0\x87\x58\x90\x7b\xe3\x5a\x34\xdf\xd0\x8c\xe1\x29\xc2\x3a\x0f\x3e\xc0\x17\xe9\x61\x20\x2d\x30\xd7\x67\x1f\x7e\xc1\x0e\x7f\xaf\xdb\x3a\xf2\x4b\xea\x0d\x65\x00\xe0\x28\x6c\x7a\x8c\x8c\x89\xdf\xb8\x47\x36\x0e\x60\xb6\x57\xa2\x14\x52\xd2\x52\x25\x38\x11\xeb\x75\x62\x7d\xa0\x76\xcb\x14\x3b\xa6\x8a\x0a\x5c\xda\x9d\x28\x56\xef\x68\x55\x01\xcd\xd6\xc6\x49\x0c\xdc\xa1\x51\x4f\xf0\x94\x5b\x1f\xbe\x44\xd2\x1b\x03\x8c\x1c\x95\xb9\x13\x55\xc5\xf8\xf5\x57\x45\xad\x7c\xac\x36\x9b\x16\x61\xff\x8c\x17\x65\xb9\x97\x85\xa2\xde\xc9\xa3\x2f\xbf\x29\xea\xe3\xc4\x52\x6c\x77\xa2\x86\x66\x22\xe1\xf6\xd3\x36\x5c\xc3\x33\x61\x40\x52\x21\x69\xf1\x51\x57\x54\x96\x75\x04\xde\x1d\x03\x27\x54\xde\x45\xd5\x8c\x6e\x8f\x1d\x72\x85\xf6\xda\xd4\x79\xd8\x12\x36\xa4\x5e\x7e\x66\x94\x5e\xce\xcf\xfa\x7c\x7b\xd9\x3e\x3e\x0b\xfb\x98\x82\xd7\x2b\xaf\x3f\xea\xc9\x0a\x4b\x93\xcf\xa6\xd3\xa9\x26\xe1\xba\x1b\x05\x5e\xd3\xdd\x2e\xee\x5a\x17\x36\xd6\x4c\x91\x24\x33\x6f\x98\x78\x55\x15\x10\xb0\xeb\x8d\xb1\x0a\x08\xfc\xe7\xf4\x6d\x67\x55\xd4\xea\x29\x9c\x4b\xd0\x04\xed\xa4\x59\xf5\x62\x9f\x0a\x7e\x05\xe3\x82\x90\x64\xcb\xb5\xe8\x73\xdf\xfe\x5f\xcb\xa2\xa4\xdf\x51\xc9\xc4\x2a\x7a\x8a\xbe\x8b\x9e\xa2\x1b\xe5\xb9\xc4\xd6\xa9\x6b\xd3\x48\xa7\x5b\xe4\xb0\x6a\x8d\xba\x19\x12\xcf\x83\x1c\x5b\x05\x33\xb2\x53\x99\x46\x25\x5d\x82\x20\xdf\xb3\x0c\xec\xeb\x40\x60\x90\x0c\x04\x00\x9e\xba\xc8\x04\xd6\x68\x34\xfa\xc3\x93\x79\x02\xe4\x50\x92\x9b\x12\xce\xfe\xea\x56\x43\xe5\x6d\xb1\x83\x62\xb8\x68\x77\xcd\xea\x97\x10\x5b\x8d\x10\x7d\x56\xab\xaa\xd8\xd5\x74\xae\x49\xfb\x55\x5e\x1b\x5f\xca\xb8\x0e\xbc\xda\xc4\x78\xb5\x91\xd6\x5e\x15\x2b\xe3\x9a\x2b\xf0\x52\x43\x23\x4d\x66\xe0\x61\x85\xca\x79\xce\xd9\xa1\xa1\x3d\xf8\x71\x4e\x18\x72\x57\x2e\x3d\x29\xa2\xfb\x87\x57\xfd\x3b\x51\x67\x9b\xd0\xd3\xac\xb5\x24\x98\x99\x78\x29\x03\xbb\x8f\x92\x4c\x0d\xec\x37\x0e\x47\xd4\xf9\x39\x27\x3c\x8c\x9d\x07\x03\xe0\x4d\xc3\xfb\x46\x17\xee\x14\xa0\xcb\xa1\xf2\x08\x8f\x94\x8f\x8f\x2b\x9b\x97\x27\x56\xb2\x89\x87\xdb\xa3\x69\x13\x17\x58\xb0\xa5\x79\x45\x8d\xea\x8b\x3f\x3a\xcf\xa8\xde\x76\x88\x6c\xd5\x7a\xe0\xa1\x5d\xdd\x71\x78\xb2\x02\x9d\x27\x46\x9c\x15\x4c\xd3\x0c\x5f\x88\x8c\xb7\x7e\x6d\xf5\xba\x6e\x68\xf6\x94\x59\xa2\x0b\xe9\x77\x41\x2f\xa3\xd9\x37\x0e\x6a\x67\xc3\x29\x56\x84\xc7\x1b\xa3\x17\x18\x0f\x55\x80\x0c\x48\x5a\xab\xf9\x8d\xc8\xcc\x2f\x27\x7e\x1f\x74\xfb\x11\x08\x8b\x10\x55\x86\xd0\x66\x86\x12\xfa\x2c\x0a\x2e\xac\x6c\xe0\x01\xa2\x80\x00\x28\x9a\x66\x36\x04\x85\x24\x37\x0a\x6f\x6c\xf1\xd9\x90\x44\x8c\xd4\x36\x34\x54\x56\x44\x39\xd8\x84\xa9\x28\xa0\xc4\xdf\x8b\x6a\x4f\x3d\x76\x7e\x5e\x07\xbb\x3a\x24\xfc\x1c\xd5\x24\x4c\x1a\x38\xe1\xa0\xd3\xa8\xa9\xc8\x5e\xdf\xae\xba\x25\x04\xcb\xec\x48\xbf\x6a\x3c\x3b\x67\x17\x59\x35\x77\xaa\xee\xf9\x14\xc1\xa6\xb7\x62\x1d\x76\x31\x9d\x43\x43\x79\xb5\x60\x4b\x6b\x9d\x29\x5a\xeb\x4c\xf2\x99\xb3\xa0\x15\x8b\x62\xf4\x04\x8e\x45\x4d\x88\x6a\x9a\x9a\x10\xe9\x28\x9f\xa7\x2c\xd3\x0d\x99\x25\xcf\xcd\x0e\x2c\xd8\x12\xe1\xb5\xae\xb6\x1c\x71\xbb\x0d\x19\xbf\x98\x36\x4d\x3d\x84\x10\xcd\x19\x64\x8e\x32\x3e\x9f\xe5\x53\xb4\xd4\xf8\x40\x56\xe2\xb5\xc6\x49\x8c\xa6\x60\x99\x15\xb8\xc6\x12\x0e\xc3\x3a\x38\x30\x6b\xcc\x42\x17\xa9\x75\xa4\x4a\xb7\x21\xc5\xfc\x78\x81\xc7\x32\x9f\x9e\xaf\xce\x57\x64\x15\x16\x36\x82\x35\x52\x66\x2b\xbc\x0a\xb7\x69\xda\x39\x9e\x21\x81\x06\x07\x66\xb0\x19\x91\x55\x18\xc1\xcb\x76\x73\x30\xea\xf1\xe6\x9d\x67\x62\x5f\x3b\x11\xa6\x1e\xed\x86\xc8\xf3\xdd\xf9\x8e\xec\xba\xb9\x7e\x18\x3b\xbc\x0b\x87\xa1\x61\xca\xa9\x71\x8c\x1e\x1e\x47\xe0\xe5\xca\x02\x4e\x13\x78\xcd\x68\xbb\x79\x64\x84\x6d\x8d\xf4\x26\x78\xe7\x7e\x0b\xcb\x1b\x9c\xcb\x73\x37\x69\xb1\x0a\x8b\xbe\x88\xa9\xa0\x85\x5a\x0e\xe8\xa4\x16\x32\x74\x4a\xd1\x65\x86\x38\xa2\x58\xd9\x1f\xc6\x2f\x05\x38\x14\xd2\x3b\xdd\x8a\x32\x67\x80\x73\xf6\x20\x99\xc6\xb9\x16\x05\x12\x41\x9f\x8c\x9d\x46\x0e\x35\x7d\x8d\x99\x6b\xf3\x92\x4c\x5d\x44\xad\x3b\x9d\x6b\xfb\xf4\xf9\xb8\x26\x37\x41\x2d\xfd\x07\xe1\x3d\x11\x8e\x3e\x9f\xbb\x92\x8e\xf0\xc8\x85\x4f\x30\xf8\xe7\x80\x5f\x68\x52\x79\x3c\x56\x1a\x2b\x34\xce\x85\xc6\x63\x8e\x9f\x60\xeb\x7d\x7f\x3f\xaf\xf3\x02\xef\xe7\x45\x5e\x23\x74\x38\x04\x0c\x2d\xbb\x21\x81\x6f\xa8\xf8\x69\xb3\x65\x16\xb6\x21\x8a\x55\xd3\x50\xb4\xc4\xa1\xeb\xb2\x57\x71\x15\x2f\x1f\xb2\x12\xf5\x96\x41\xa0\x87\x67\xac\xf6\xa8\x33\x21\x0e\xfd\x1f\xb5\x34\xa0\x79\xef\x2f\x6c\x69\x14\x32\xc3\x4c\x93\xd3\xd6\xe3\x46\xdc\x60\x2b\x35\xd7\x2d\x5c\xca\xf9\x86\x66\x12\x6b\xcc\x02\xcb\x88\x29\x81\xf2\x3e\x0f\xf4\x74\x52\x6e\x06\xc1\x7b\x47\x88\x46\x59\x2e\xd5\xbc\x65\xc4\x29\x94\xcb\x8b\x69\x90\x30\x45\x39\x3d\x64\xca\x74\xa2\x8e\xd9\x1f\xc1\x14\xbf\xea\xe0\x0d\x97\x6e\xfc\x69\xaa\x2e\xe2\xa9\x04\x4e\x6b\x68\xd7\xc2\xc2\x93\x41\x91\x60\x5d\x2e\xf8\x92\x98\x45\x5c\xf0\x65\xeb\xb5\x2f\x70\x78\xd3\x95\x09\x97\x60\x3c\x50\x6e\x63\xd6\x5c\xd3\x50\x50\xa6\xe4\xab\xd6\x1f\x99\xb9\x7b\xf0\xfc\xbb\x47\x6e\x07\x41\xda\xd0\xc5\x74\x20\x86\xfa\x83\xc3\xc7\x3c\x63\x44\x62\x49\x38\xca\x4d\xb2\xee\xed\x62\x6a\x22\x22\xa1\xf0\xe8\xfd\xa6\x09\x2f\xd9\x4d\xe2\x4d\x23\x23\x05\x89\x1f\x82\x41\x7f\xad\x7f\xbb\x23\x09\xb3\xa1\x40\xe1\x69\xd8\x51\x48\x08\x86\x0c\xb6\xe3\x53\x84\x79\xd0\xc4\x37\x1e\x29\x68\x6f\xf4\x62\x89\x1d\x32\x72\x4c\x46\xea\x57\x89\x2f\xd8\x92\x04\x7d\x48\xa7\xfa\x8b\xf5\x63\x82\x8d\x0e\x09\x0c\xe8\x05\x05\x83\x63\x37\x10\x00\x62\x28\x9a\xc3\xdf\x8f\x94\x3c\xa2\x5e\x9d\x8b\xb0\x01\x5b\xa8\x25\x91\xd8\xb5\xca\x8e\x5b\x0d\xa7\xf5\xcf\xee\xca\x7c\x09\xbc\x96\xb8\xd0\x8f\x47\x08\xd1\x86\xd5\x4a\xc8\xbb\xc9\x4a\x70\x8a\x19\xb9\x11\x19\x47\x03\x96\xa6\xcc\x0e\x67\x9e\xf1\x05\xf7\x8c\x93\x25\x51\xf8\x67\xd7\x06\xca\xbf\x3e\xd6\x60\xf1\x49\xf7\xbe\x5c\xc7\x90\x2f\x9c\xb6\xed\x1d\x0b\x8d\x4e\xf1\x89\x61\xc5\x0d\x24\xb1\xae\x5f\xdf\xd0\xea\xf5\x0e\xd4\xb1\xda\x6f\x28\x02\xca\xd2\x99\x49\x7c\x29\x56\x6f\xd9\x96\x06\x75\xf4\xa7\xab\xe2\xcb\x37\xcd\xa9\x61\x28\xc7\x3b\x99\xba\x6b\x92\x3c\x4a\x08\x61\x4d\x93\x8c\x8c\x73\xc3\x0e\x03\xa9\x87\x55\x2b\x27\xb5\xd8\x52\xb5\x61\xfc\xda\x90\xbb\x74\xa5\x21\x32\xef\x4b\x0e\x22\xb3\xb4\xeb\x1f\x0c\xfd\x82\xc0\x65\x9c\xc3\x5d\xf4\xe1\x47\x4d\xb9\xe7\x86\x11\x57\x15\x77\xf9\xe7\xd3\x29\x18\xad\x09\x7c\x23\x32\x06\x1b\x88\x34\xf6\x3a\x37\xbf\x17\xe6\x4f\xb8\x75\xf9\x0b\xf0\x43\x62\x8a\x0e\xa2\xe5\x6a\x23\xf1\xe0\xee\x52\x8b\x20\x65\x47\x24\xe6\x69\x0a\x31\x6c\xb9\xf1\x80\xf5\x3d\x5d\x89\x34\x7d\xc9\x32\x36\xd9\x73\x68\xf9\xe0\x6e\x09\x6e\xa7\x61\x78\x9b\x6c\x95\xbf\x2a\x5e\x45\xe7\xc5\x9f\x92\xfb\x0c\xa4\x42\xc9\x15\xe8\xbb\x78\x9e\x81\x35\x46\x82\x98\x90\x1a\x40\xe9\x42\x93\x72\x7b\xb2\x9c\x46\xde\x14\xe9\x37\x1d\xbd\xb7\x9c\x18\x65\x77\x0f\x77\xa5\x69\x1d\x5c\x24\xe0\xf2\x4b\x32\x3d\x97\x2d\x84\x95\xa3\x11\x0a\x4a\x2e\xe4\x92\x58\x88\x65\x41\xae\x5c\x5a\x20\x69\xe2\xdb\x98\x14\xcb\x1d\x72\x1c\x67\xd0\x5f\x37\xbf\x7d\x24\x4b\x13\x25\xa6\x7f\x6e\x98\x1a\x1d\x22\xbd\x0c\xba\xdc\x03\xcb\x00\xa5\x74\x69\x77\x50\x35\x19\x60\x2f\xb4\x06\x50\x6e\x01\x8e\x04\x07\x28\x57\x07\x77\xbd\x07\xde\x9d\x8e\x9c\x5c\xb1\xa2\x6e\x1a\x8d\xd0\xa8\x16\xbe\xc2\x84\xba\x40\xd7\xcc\xf2\x62\x3a\x1f\xcf\xf2\x19\x1a\xfc\x55\xcf\xfe\x6f\x56\x8f\x0c\xdc\x60\x6a\x4a\x63\x68\xe2\xd2\xd6\x56\xed\x66\xa8\x87\xdb\x34\x3f\x4a\x98\x54\x70\x3a\xfe\xea\x30\xbe\x09\xfd\xe7\xbe\xa8\xea\x0c\x3a\x43\x20\x8e\xaa\x69\x45\x94\x5d\x8e\x2c\x38\x64\x21\x5b\x3d\x48\xae\xe3\x25\x32\x4e\x29\xcd\x61\x42\x8e\x7d\x6f\x0c\x30\x9f\x96\x8a\xdd\x30\x75\x67\xa2\xf4\xb4\xee\x16\x80\xcb\xd2\xce\xc7\x1c\x71\x63\x01\x19\xa1\x2e\x7f\xeb\xb3\x27\xc1\x82\x4c\xcf\xc5\x85\xea\xbc\x2d\xc2\x61\x8f\x85\xdf\xa0\x85\x58\x82\x1e\x5b\x07\xe4\xf4\xbc\x4c\xfa\xb9\x0e\x1e\x23\xb1\xc4\x7b\xf2\x17\xdd\x79\xe1\x38\x92\x75\x9a\x3a\x4c\xd9\x68\xa0\x55\xae\x00\x6c\x1d\x64\xc3\x2f\x9d\x79\x9e\xb1\xa6\xd9\x0f\x89\xab\xdd\x34\x95\xfe\x80\xfd\xd4\xd0\xb6\x69\xc0\xa3\x69\xfc\x4c\x61\x81\x10\x66\x0b\xe1\x2f\xc0\x1e\x57\x9e\x03\x7a\xc6\xe6\xf0\x70\xa9\xe0\xd1\x0a\x65\x8d\x3f\xf5\xc8\x07\x43\xc4\xc9\x10\xfa\xdb\x42\xbe\xa7\xab\x37\xbb\x82\x77\xbd\x19\x47\x79\x47\xca\x7e\x35\x89\xf2\x17\x85\x5e\x9f\xda\x24\x01\xf2\x62\x8d\xdb\x6b\x40\xa0\x9b\x26\xdb\x4f\x18\x2f\xab\x7d\xcd\x6e\xe8\xb7\x74\xad\xe6\x26\xe3\x02\x1e\x88\xdc\x7e\x28\xc7\xe1\x76\x75\x95\x88\x6b\x82\x2f\xb3\xb9\x4e\xbf\x74\x15\x95\xb8\x34\xd5\x00\xd1\x62\x69\x9a\xfd\x64\x02\x9a\xc0\xdd\x35\xc1\x7d\x9e\xdb\xa8\xff\xfb\x09\xfd\xa0\x71\x76\xa6\xaa\xbb\x67\x1a\xbe\xd2\x95\xa9\x16\xaf\xc3\xfd\x78\x5c\x0c\x4a\xc1\x15\xe3\x7b\x7a\x30\x6c\x15\x30\xed\x9f\x14\x4a\x6c\x59\x89\x5c\x9e\xd5\x13\x03\x49\x25\x2e\xc9\xde\xf8\x92\xe5\x17\xd3\xf9\x2c\x1f\xcf\x90\x59\x06\x20\xb4\xe3\x19\xe4\x9d\xc5\x40\x10\x93\xf3\x17\xbd\x61\x25\x1e\x73\x0c\xd6\xcc\x91\xf1\x8d\x00\xa6\x04\x42\xc7\x59\x69\x9a\x55\x1a\xf9\x03\xc3\x70\xbd\x74\x17\xd3\x79\x75\x31\xcd\xab\xcb\x96\x9a\xfd\xc9\xb4\xac\xe0\x28\x58\x22\x3b\x18\xac\x01\x26\x2d\xa5\x3e\xef\x0c\x2f\xef\x8e\xdf\x10\xf1\x30\xde\x35\xe6\x78\x7d\x62\xac\xeb\xf9\x4f\xa6\x88\xe9\xd8\x84\x94\x73\xa7\x37\x38\xa9\x7f\xe9\x39\xa9\xbc\x69\x66\xb8\x20\xfe\x10\x0b\xcc\x50\xd3\x0c\x59\x9a\x06\x49\xc3\x29\x6a\x1a\xff\x3d\xee\x29\x33\x16\xc6\xb1\xaf\xe9\xb3\x00\xd8\x56\x16\x5c\x3d\x5f\x31\xa5\x81\x54\x44\xe8\x04\x60\xe6\x97\x00\xcc\x38\xec\x5e\xa3\xd6\x53\x02\xe7\x6e\x6e\x89\x1e\x5b\x77\x0e\xcf\xd0\x86\x5a\x6a\x4a\x13\x5b\x30\xd9\x5c\x5e\x4e\xd3\x54\x57\x20\x44\xa3\xdb\xe1\xf5\x8b\x08\x97\x79\x4c\x86\x79\x1a\x6b\xee\xdb\x04\x51\x89\x69\xd4\x6a\x47\x38\x9d\xe0\x49\xb9\x19\x85\x8f\x3e\x98\xe5\x1e\xb9\x84\xac\x37\xe2\xb6\x8d\x12\xd5\xcd\xdd\x49\xba\x2b\x82\x97\x2e\x0b\xd7\x42\xa9\x2e\x55\x64\x43\x4b\x1a\x2b\x48\x6e\x4d\xeb\xeb\x8f\x47\x0e\x03\xef\x11\xfe\xad\xf8\x84\xf2\xce\x69\xd8\x31\xdd\xe0\xfc\x87\x69\x64\x49\x59\xd7\x2b\x31\x02\xef\x1d\xc0\x05\x50\xbc\xb0\x12\xc8\xda\x92\xf5\x66\x17\x8f\xcc\xa3\x9b\xa6\x06\xe6\x80\xdb\x94\xae\xa1\x35\x6a\x6d\x74\x2d\xe7\xe0\x3c\xdb\x6b\x24\xca\x8b\x4d\x37\xe2\xd6\x80\x9e\x1f\x37\x94\xbf\x71\x11\x50\x51\x9a\x42\xec\x34\xfb\x2e\x30\x84\xf7\x4d\xc3\x21\x05\x8b\x80\x5b\x10\x98\x4f\xaa\x18\xcb\x7a\x6b\xbe\xbb\x06\x88\x81\xad\x45\xcd\xf8\x75\x65\xe1\x9e\x51\x41\xfc\x8e\xca\x6f\x2d\x93\x5f\xf6\xdb\x0b\x24\xff\xe7\xff\x91\xf4\xc4\x8d\x49\x10\x32\xee\xee\x23\x35\xe4\xca\xe9\x6d\x62\x16\x98\x62\x73\xfd\x7f\x9c\x7c\xac\xc4\xea\x95\xc3\xa0\x34\x7a\x14\xf8\x4f\x0c\xc6\x6b\x5a\xe1\x13\xa1\x36\x54\x3a\x78\xf0\xaf\x8d\x3c\xb4\xfc\xa8\x69\x29\xf8\xaa\x90\x77\xed\xa4\xc4\xb1\xe6\xa7\x88\x27\x09\x7d\x07\x53\x15\xd1\x54\x4d\xae\x9f\xb0\x88\x27\x3c\xf9\xf3\xe7\x8f\x32\x57\xc8\x4f\xd8\xd7\xb1\xaa\xba\x81\xd5\xa9\x7a\xc8\x09\x0b\xf8\x1f\xfa\xa4\xab\x52\x46\x31\x13\x6a\x52\x98\xc8\xa6\xfb\xd0\x3f\x52\x1b\x9e\x06\x83\xf7\x87\xb1\x4d\x0a\x6c\x8d\xd1\xb8\x30\x9a\xbc\x2d\x87\xb9\x6a\x81\xa1\x02\x06\x03\xc4\x4e\x51\xa1\x63\x6c\x85\x62\x47\xd9\x1c\x61\xf1\x89\x7e\xf0\x6b\x4b\xbc\x25\xfd\xf2\x47\x67\xaf\x42\x8d\x85\x0a\x04\x98\x4b\x46\xaa\x63\xaf\xe2\x7c\xe9\xcc\xf7\x63\x9a\x4b\x6b\x04\xd6\x46\xd1\xc9\xf8\xd8\xfa\x3b\x0d\x21\x9b\xe7\x9c\xdf\x98\xb8\x9d\xb8\xd4\x18\x12\xc3\x0a\x81\x1e\x4f\x00\xa0\xdb\xb5\x58\x65\xe1\xa3\xf0\xbd\xb2\x80\x1f\xac\x90\x60\x7e\x25\x6e\x99\x2f\xc7\x54\x31\xb8\x05\xf4\x72\x1e\xe8\x3f\xa9\x94\x4c\x42\x0f\xb5\xc3\x99\x45\x68\x69\x8b\x76\x09\x87\xc9\xd2\x85\x58\x9e\x67\x85\x41\x98\x64\x9a\x16\x80\x01\x35\x8d\x22\xc4\x7e\x11\xc3\x65\xe7\x59\xeb\x41\x12\x4a\xeb\x69\x79\x06\xa1\x2e\xa8\xc7\x3c\x23\x70\x4e\x6e\x68\x35\x4f\xa4\xaa\x92\xdc\x8c\x06\x33\x08\xa5\xca\x9a\x26\x1c\xe3\x21\xfb\x9e\x65\x25\xc2\xb2\x69\x8c\x96\x09\x21\x7c\xbe\xce\x39\x8e\x3d\x55\xd9\x47\xbc\xc4\x1b\xbc\xc3\x5b\xb2\xd2\xd8\xbf\x15\x11\xb2\x75\xa6\x11\x05\x54\x92\x2d\xde\x90\x1d\xd9\xc2\x19\xf5\xb1\xf7\x4b\xb2\xca\xd4\x78\x86\xad\x88\x10\x61\x18\x13\x71\x06\x42\x37\x64\x3b\xd8\x92\x12\x97\xe4\xe6\xb0\xb1\x75\xf1\x8e\x94\xe6\xbc\x1e\xec\x11\x80\x57\x9a\x82\xe3\x9c\x1a\xe1\x12\xc2\xfa\x6e\xf5\xff\x97\x9f\x69\x64\x29\xdb\x60\xf8\x32\x07\x71\xeb\x9c\xda\xe2\x0d\xa9\xfd\xd7\x45\x69\x3c\xa1\x98\xc2\x26\xcd\x94\x87\x0c\x84\xdc\xec\xd3\x54\x11\xb2\x4e\xd3\x6c\x47\xf6\x08\x67\x43\xd1\x34\xd0\xf8\x85\xd0\xff\xdb\x0f\x42\x84\x69\xce\x8c\x18\xc4\x2c\x06\xe9\x13\x64\xab\x6b\x15\x4d\x53\xda\x5e\x2e\x0b\xfb\xa3\x4d\xd2\x3b\xe4\x3c\xce\xda\xa9\x5e\xda\x2b\x6a\xb4\x41\x4a\x84\x37\x17\xf5\x68\xe6\xa6\xac\x47\x0d\xe3\xc4\xbb\xb1\xfe\x65\x67\x78\x40\x08\xfb\xd8\xbf\x94\xaf\xf2\xc2\x09\x5c\x54\xab\xb2\xa6\x8c\xca\x1a\x5b\x67\x0e\xab\xb3\x1a\x23\x65\x28\x85\x00\x3d\x33\x63\xd2\x7b\x6f\x54\xc4\xe0\xde\xac\xad\x2c\x6f\x67\x3e\x6d\x4d\xbc\x25\xbf\xf3\x6c\x83\x88\xfe\xb3\x43\xf8\x86\xc4\x6d\x6d\xe7\x9b\xf0\xaa\x8d\x66\x06\x7f\x9c\x50\xbe\xc2\x77\xa4\x74\xca\x6f\xdb\xf9\xd4\x48\xe6\xa0\x6f\x23\x29\x1e\x68\xf2\xf4\x06\x16\xfc\x0e\xf6\xf9\xc9\x3c\xab\xb2\x1b\xb3\x38\xf8\xa6\xdd\xe6\x1b\xbf\xcd\x55\x56\x63\x28\x8b\xef\xcc\xf9\xb9\x73\x59\x28\xef\x56\x35\x25\xc6\x6d\xa2\x2b\xe9\x7f\x9a\x6e\xf5\x41\xa9\x7d\x9a\xe9\xf1\xce\xb8\xc4\x89\xdf\xad\xd0\xf1\x0a\x53\xde\xc1\x45\xa4\x0e\x7a\x1c\x7c\x1c\x58\x41\x2f\x34\x0d\x73\x53\x54\x99\x9a\x5c\x55\x8c\xbf\xa7\xd2\x31\xe6\x87\xd3\x81\x6a\xdd\x1b\xd9\xb7\x08\x3c\xe8\x40\xf0\x3f\xfd\xba\x75\x1f\xda\x2f\x74\x0b\xdf\x17\x8a\x5e\x4e\xe7\xbe\x3d\x52\x53\xe5\x7b\x89\x83\xd7\x3e\xd0\x7a\x26\xc9\x50\x22\x08\x24\x62\xd4\x0d\x92\x03\x3a\xdd\x1f\xca\x4f\x66\x99\x87\xe5\xc1\x89\xd8\x0e\x42\x29\xb4\x50\xde\xb9\x8c\x0d\x83\x64\x4e\xc6\x1b\xbd\xa4\xe0\xaf\x27\x88\x50\x74\xd1\x45\xf4\x80\xc8\x87\xc5\xf7\x41\xe8\x41\x27\x5d\xe1\xd7\x22\x2b\x54\xcc\xa3\x28\x54\x27\xc2\x8e\xf1\x02\xe9\x1b\x57\x4e\xc0\x10\x24\x3a\x31\xb0\x71\x7d\xe4\x52\x8f\x31\x4e\x1f\xfe\xdd\xb3\x0a\x03\x8f\x88\xb7\x42\xbe\x7f\xcb\xc0\x29\xc2\x9e\x67\x0a\x66\x89\x6b\xa3\xf1\xe1\x9a\x44\x1a\x64\x2f\x96\x2e\xda\x4f\x9b\x11\xc8\x84\x22\xa7\xb2\x47\xce\x86\x46\x9f\x4f\xa7\xa1\x03\x78\x61\xe5\x43\xa7\x06\x0d\x88\xb0\x7d\x94\x2c\x06\x54\x83\xca\x70\x70\x97\x2f\xdb\x49\x6c\x8b\x0f\xdf\xb8\x35\x36\x31\x47\xf0\x9e\x50\x06\x3c\xd6\x7a\xde\xce\x8b\xa3\x1c\x58\x59\x0e\x49\xab\xc9\xde\xfe\x70\xae\xf6\xcc\x27\xd8\x55\xd2\x1a\xc8\xee\xd2\xfc\x1e\x94\xf3\x38\x93\x94\x79\xa5\xa1\x6c\x9c\x18\xdb\xa4\xae\x89\x06\xbf\x85\xf7\xa7\xeb\xba\xf5\x52\xfe\x0a\xbc\x8b\x65\xc3\xaa\x69\x86\x65\xd3\x54\xad\xd7\x88\xb2\xf5\xc2\x50\x85\x5e\x23\xca\xd0\xf0\x73\x45\xa6\xe7\xc3\x75\x9a\xae\x2e\x8a\x30\x9a\xe7\x9a\x14\x8b\xd5\xb2\xed\x6e\xb1\x5a\x0e\xd6\x69\xca\xac\x45\x60\xbb\xaf\x80\x5d\xfa\xa0\x5c\xf5\x9c\xe7\xe1\x5a\x39\x3d\xc3\x60\xcd\x2f\xc8\x43\x8b\x9e\xa6\x12\xd6\x1c\x6a\x60\xde\x69\xbe\xed\xf7\x0f\x9f\x13\x32\xed\x6c\x8b\xd5\x4a\x19\x8d\x82\xd3\xe5\xcf\xeb\xa5\xd7\x69\x85\x2b\x19\x9f\x5e\x60\xaa\x83\x1e\x2a\xc4\xc5\x73\x1c\xb6\xbf\xea\x92\x59\x8f\xdd\x81\xf1\xf0\xe3\x0a\x9e\xab\xd1\x08\x29\x50\x79\x5c\xa8\x25\x36\xfe\x60\xc0\x62\x24\xf0\xa1\x70\x8c\x44\x8b\xd2\x20\xd0\xad\xd7\x64\x08\xdf\x1e\x41\x08\xe7\x48\xd1\xc5\xf7\xea\xf2\xb6\xbd\x14\x0b\x33\x6c\xd5\xeb\x71\x41\xe4\x7c\x3c\xcb\xd5\x38\x0b\x80\x0e\xe3\x9c\x82\xcd\xc6\x7c\x46\x3f\xcb\x21\xf0\x59\x4d\xd4\x79\x7d\x59\x9c\x8f\xc7\x35\x5c\xa5\xfa\xc2\xf9\x4b\xf4\x2b\x65\x3e\xad\x8e\x07\x28\x75\xd7\x96\x6f\xb4\x8f\x23\xb3\x0d\x65\xd3\x98\xfa\xfe\xbe\x3b\xb5\x2a\x7b\x2d\xd6\x22\xdb\xdb\x4d\xd5\xcf\x4f\x10\x5d\xab\xb8\x7a\xc3\x7e\xa7\xe8\xdc\xa2\xc8\x1a\xa7\xbb\xac\x80\xe9\x48\xea\xf1\x0c\x73\x52\xb5\x2c\x45\xc7\x9f\xc6\x05\x11\x97\xdc\x01\xb4\xe7\x2c\xe3\x58\x8c\x67\x28\x18\x94\xe7\xa9\x90\x42\x1f\x13\xb3\xb2\xb8\x40\x79\xe5\x3e\x10\xe6\x06\x18\x09\xac\xe2\xc0\xfb\x70\x04\x8d\xa1\x2d\x2e\x9c\xde\x98\xc6\x5b\xc7\xb3\xa6\x11\x70\xf4\x9a\x46\x5c\x12\x16\x38\x85\x13\x17\x2e\x88\xe2\x40\xc6\x37\x22\xea\x1d\x26\x3f\x1a\x89\x83\xe1\x85\x67\xbc\x05\xc5\x02\xe1\x22\xb0\x5e\x57\x91\xaf\x1f\x1f\x23\xb4\x75\xb8\x15\x58\x8e\xc7\x65\x8d\x53\xd0\xd0\x73\xd4\xf8\xb8\x81\xae\x4b\xa9\xb2\x7d\xee\xe3\xf0\x84\xad\x2a\x78\x9c\x6e\x1d\x90\x40\xbc\x72\xa7\xfc\xa3\x89\xa8\x9d\xa4\x09\x4e\x34\x21\x83\x25\x31\x91\x92\x27\xdd\xe8\xbe\xf3\x13\xe9\x99\x42\xb9\x72\xfe\x36\x21\x05\x73\x72\x0f\x14\xd6\xae\x90\x35\x7d\xc1\x55\x26\x43\x63\x61\x64\x4d\x9e\x8e\x73\x0d\x23\xd0\xcb\x56\x58\xfd\xaa\x78\x65\xcd\xc0\x50\xd3\xb8\x4f\x83\xa5\x5a\xb6\x5b\x1c\x94\x11\xe1\x80\xcf\xb1\x0e\x57\x58\x88\x71\xfb\xd4\xc4\x96\xb9\x81\xd5\x75\xbc\x27\x0f\xc5\xfd\x1b\x43\xeb\xe3\xe3\xf8\x1b\x6d\x6b\x9b\x4f\x6a\xcd\x6e\x76\x4f\x73\xdd\xdd\xde\xa9\xc0\x84\x9f\x3a\xfe\xa8\xdd\xea\xfb\x6d\xb1\xcb\xfd\xa6\x82\xae\x24\x2c\x4e\x90\x06\xdf\x87\x4e\xcc\x39\x7a\x64\xe1\x0f\x8d\x5b\xfb\xfe\x87\xda\xaf\x17\x7c\xd9\xdf\x87\xce\x31\xfd\x3c\xd0\x07\xa8\xe9\xd9\x6e\x90\x07\xf4\xff\x6a\x37\xd8\xb0\xe4\xf3\xe1\x34\x80\xdb\x5b\x75\xc4\x68\xbd\xd6\x49\x77\x06\xaf\x83\x8c\xc0\x16\x4b\xb5\x8a\x2b\x27\x7c\x47\x1e\xe1\x78\xe8\x68\x57\x8d\x03\x3e\xe3\x94\x78\x79\x14\x4f\xe6\x01\x8f\x58\xea\x92\x18\xa7\x58\xaf\x74\x47\xf6\xe7\xc8\x38\x09\x9d\xcb\x1c\x22\xfb\x07\xa6\x16\x76\x0e\x16\xb3\x7b\xca\x0c\x93\x04\xe6\x20\xd1\x80\xa7\xe9\xd0\xb8\x8c\x9a\x73\x62\x18\xbb\x69\xca\x03\x9f\xb0\xe0\x3a\x8d\x63\x89\x8d\x37\x6e\x6f\xc4\x12\x87\x35\x47\xd6\xb6\xab\x4f\xc7\x46\x77\xa9\x89\x2e\x85\xa2\x00\x02\x3d\xfe\xbb\xe8\xed\xd9\x5f\x94\xd3\x09\x86\xd1\x99\xc9\xd9\x40\x5c\x8c\x70\xe3\xc8\x8b\x80\x1f\x2f\x8e\x5a\xb7\xfe\xe0\x32\xc3\xf8\xca\xf8\x4d\x74\x42\x10\xb6\xe1\x9e\xc1\x55\x17\x3f\x18\x3f\xd0\xb6\xc9\x9d\xca\xb8\xe9\xcc\x9e\x27\x50\x22\x34\xb1\xd1\x72\x8e\x25\x2d\xad\x2a\xa6\x3e\x67\x2c\xb8\x26\x36\xc0\xab\x3b\x4f\x6c\x62\x7e\xe0\x4d\x51\x9b\x7b\x58\xe7\xc3\x59\x70\xc6\xae\x55\x28\x5f\x50\xb6\x38\xe8\xc9\xe8\xd7\x16\x9e\x1f\xbc\x27\x72\x94\x71\xf0\xe0\xd4\x6a\x36\x41\x3f\xc7\x0e\x58\xe6\x35\xb1\x79\x8b\xfd\x32\xcf\xd4\x44\x8f\x15\x1c\x1c\xe8\x1f\xd6\xc5\xa3\xc1\xc9\x4e\x98\xd2\x22\xac\x26\xed\x70\x9b\xe6\xa4\xab\xef\xde\xb0\xa7\x8c\xf0\x34\x05\x00\x68\x9d\xcc\xbb\xbb\xb6\x71\xed\xf1\x34\x6d\x53\x6f\x8d\xbb\x57\xd6\x7a\xd7\xeb\x94\xd7\x84\x83\xd1\x37\xea\x54\x22\x6c\xd0\x0a\x05\x55\x57\xc1\x17\x9e\x17\x3f\xa9\x3a\xd3\x28\xcf\xf4\xbc\xf6\x88\xee\x78\x06\x96\x35\x96\x57\x5e\x18\x7f\x36\xc5\xa2\x1e\xcd\x96\x03\xa0\x4a\x8a\xab\x3a\xdb\xb7\xbe\x28\x2d\x75\x7d\xf9\x24\x4d\x85\xc1\x83\x7d\xee\x08\x3c\x55\xa2\xc7\x4f\xc6\xd6\xd5\xec\xc1\x96\xf0\x1c\x56\x97\x0e\x54\x11\x38\x07\x36\xbb\x11\xaf\x34\x5c\x98\xac\x26\x27\xd4\x55\x30\xa8\xaf\x2b\x38\x6b\x20\xd2\x75\x6e\x38\x71\x45\x9c\x72\x7a\x49\x40\x59\x1d\xaf\x03\xfd\x75\xbd\x7a\x9f\x11\xb2\xf7\x2a\xc0\x2d\xe6\x68\x42\xf9\xff\xf1\x7c\xa5\x57\x02\xbc\x22\x57\x69\xfa\x56\x58\xf1\x8d\xf5\x0c\x66\xcd\x8b\x8c\xab\x0d\x88\x25\x3c\xaa\x10\x3a\x47\xe3\x71\x05\x1b\x70\x1e\x65\x95\x17\xf6\xf3\x39\x5f\x7d\x52\x5b\xa5\x6e\x6b\x34\x02\x82\x15\x3c\x07\xfe\xbb\x73\x52\x5e\x1a\x2d\x7c\xd3\xd6\x38\xac\x84\x18\xd9\x87\xbe\xde\x4e\xd9\x84\x3b\xb7\x6e\xe2\x94\xeb\x61\x64\x39\x44\xdf\x09\xf0\xd5\x52\xa2\xa3\x63\x33\x60\x64\xe3\x04\x61\x9b\x85\x37\x0f\xe0\xf3\x8d\x3f\x48\xf9\x74\x99\xff\xaa\x0c\xb5\xc3\xe2\xa6\xfa\x46\xd5\x34\xbf\x2a\x23\xba\xd0\xf8\x48\xd3\x30\x83\x88\x34\x8d\x9e\xb5\x51\x94\x1f\x94\xa4\xc2\xd5\x98\xcc\xf0\xda\x59\x24\x1c\x60\x6d\x66\x33\x40\x8d\x8f\x2d\x96\x2d\x4e\x55\x97\x92\x52\xde\x34\x56\x46\x0d\x5f\x93\x4a\x5c\xb3\xb2\xa8\x7e\xfa\xf2\xbb\x17\x4d\x73\x9c\xe6\xcb\xad\xe8\x0d\x2b\xa9\x29\x36\x0c\x2d\x4f\xf5\xf5\x03\x1f\xcc\x3f\xf9\x07\xeb\x27\x11\xa0\x80\x80\xfa\xd5\xbb\x82\xb7\xb8\xdf\x49\xe0\x82\xb9\x5e\x21\x85\xa7\x78\x76\x72\x85\xbc\x4e\x8c\x0d\x9f\xa0\xaf\xa2\x11\x78\x8c\x2d\x12\x77\x39\x3b\xb4\x71\x22\xce\x94\x7d\x27\x8f\xe7\xf6\xf8\x68\x6a\x98\x77\x8a\xfd\x7c\x54\x4c\xa7\x78\xb0\xaf\xd1\x4f\x05\x9d\x3e\x92\x16\xdf\x54\x66\xc3\x1e\x49\xac\xc4\x2e\x57\xfa\x6e\x3f\xe2\xde\x0b\x86\xbd\xf3\x8f\xb8\xbe\xee\xad\xaf\x7e\xf7\xda\x20\x43\x16\xdf\x57\xe0\x7c\x63\x4d\x38\xf1\xfc\xe4\xae\x5b\xfb\xd6\x3f\x76\xb6\x21\xfb\xa3\x93\x89\xbc\x6d\xf3\x43\x07\x73\x7f\x6a\x91\x0f\xc1\x7d\x1b\x56\x9a\x8c\x63\x4d\x33\x34\x87\x32\x4d\x87\xf6\x54\x5a\xde\xcf\xee\xe8\xbe\x45\x43\x59\x4c\x97\x03\x46\x76\x73\x8b\xad\x1b\xde\xa5\x45\xce\x8d\xa0\x2a\x8a\x6e\x0d\xeb\xb6\x03\x2e\xa6\x5d\xb5\x9d\x5d\xb5\x83\xbe\x48\xba\xc3\x2d\x84\xb3\xdd\x8d\x0d\x9c\x84\xa2\x37\x84\x39\x78\x1a\xa4\xde\x91\x6c\x3b\xba\x41\x8f\x9f\xe0\x6b\xf7\xb6\x75\x1e\x10\x00\x52\x06\xd2\x5d\xfb\xa5\x49\xd3\x61\x76\x77\x71\xbd\x58\x2d\x11\x40\xbf\x73\x30\x63\x27\xab\xf9\xf5\x62\x35\x9e\x2d\xf3\x29\xfe\x95\xe8\x5c\x7c\x6b\x49\x90\xcc\xaf\xf0\x7a\x6e\xd7\x26\x37\x8b\x85\xdc\x70\x82\x59\x67\x46\xa6\x60\x0a\x43\x7d\xb7\x9e\x51\x61\xbd\x0e\x57\x6e\x0d\x7e\x3d\x0c\x8e\x40\x42\x76\x3b\xb9\x12\xd7\x7b\x78\x1a\x06\x9f\x20\x47\x85\x1a\x52\x89\x1d\xd9\xe2\xdb\x89\xb4\x3c\xfa\x1b\x7f\xa3\x6e\x0f\xfe\x51\x41\xa6\x65\xc0\x0c\x1c\xba\x40\x6a\x84\xb0\x99\x6f\x1d\x4e\xa7\xb6\x4c\x66\x3d\x5e\x36\xaf\xa1\x07\x50\x6f\xf1\x1b\x08\xa9\xf6\x77\xed\x36\xf3\xf0\x81\x76\xbc\x58\x30\xce\x54\x8f\x97\x24\xb5\x61\xb5\x06\x1a\xc6\x90\x0d\xdb\xd0\xaa\xd6\xdf\x14\x79\x4a\x33\x1f\x19\xd5\x59\x06\xba\xc0\x2f\x9d\xe8\x0e\xb5\x8b\x6e\xa5\x44\x26\x31\x35\x0a\x34\xbd\x2a\x9a\xe8\x8a\x92\x7b\x67\x76\x9e\x0f\x67\xc6\x48\x1c\x22\x12\x79\x4d\x83\x3a\x43\x07\xac\xfa\xac\x1c\x81\x8f\x1a\xdb\x4d\x9e\x32\x86\x64\x93\x9b\xa2\xda\x53\x72\x6c\xd8\x8e\xef\x44\xc6\x10\xf2\x02\xa6\xa1\x8c\xaf\x3f\xab\xe9\x33\xb1\xbb\x7b\xb6\x77\xb4\x93\xd5\xcb\x7b\x4d\x33\x89\x06\xf1\xf8\xa7\x66\xfc\x06\xe5\x3d\x60\xb0\x58\x07\xf7\xc0\x77\x3b\x3a\x97\x93\x3a\x9a\x55\xab\x05\x08\xc6\x44\x02\xe5\xdd\xd9\xb8\x41\xf3\x13\x63\x3e\x44\x1d\x40\xb8\x81\x1e\xe3\xf4\x29\x3a\x1c\x68\x7f\xdc\x51\x8e\xdb\x8c\xc0\x6d\x2a\x18\x42\xb2\x8e\x53\x23\xf0\xff\x65\x62\xcc\x1a\x0b\xfc\x88\x2d\xa7\x61\xd8\x25\xf9\x77\x8d\x53\x86\x26\xa7\xb0\x43\x91\x0d\xaa\x73\x1a\xba\x13\x55\x95\x05\x71\x6b\x8d\x2d\x7a\xec\x6b\xc1\x1e\x9f\xa6\x01\xa3\x7a\x09\x81\x08\x7a\x8d\xf2\xf5\xc2\x4f\xd6\x45\xad\xbe\x83\x56\x83\x66\xf5\x02\xe1\xda\x7f\x89\xdd\x9d\xfb\x6c\x83\x64\xf5\x74\xce\xd1\x7d\x2d\x81\x8c\x69\x1a\x18\x05\xff\x58\xe7\xc6\x1d\x87\xeb\x39\x60\xf6\xe0\xc4\x48\xaf\x01\x35\x0c\xfb\x50\xb6\x0f\x85\x9a\xe6\x07\x4d\xf9\x05\xa3\x36\x06\xba\x70\x4e\xba\xd5\x9c\x85\x2e\x5c\x12\x03\x7c\xb2\x64\x2d\xc5\x36\x41\x03\xd5\x9a\xf6\x82\x52\x91\xfb\x30\x27\xcd\x87\xcc\x0d\x72\x88\x15\xf7\x51\x63\x26\x9d\x4b\x50\x73\x7b\x4b\x3f\x00\x09\x1a\x76\xa1\x44\x82\xf0\xbd\xf7\xaa\x98\x47\x2a\x15\xae\xb9\xe4\x80\x0e\xbd\xd3\xa0\x7c\x15\x4f\x22\x1a\x6a\xe6\xce\x03\xfe\xb4\x41\xc3\x21\x02\x7f\x40\x5d\xb5\xa4\x13\xae\x81\xca\x2d\xee\x09\xaf\xae\x41\x9c\x23\x91\x02\x8e\xb8\xb8\x31\xea\xab\x3f\x32\xb5\x31\xb3\x77\xaa\xea\x6f\xcd\xaa\x1c\x2b\xdc\x1a\xc1\x3e\x02\xd7\xee\xee\x42\x9d\x42\xbd\x8a\x20\x2a\xc0\x29\xd4\x4b\xdf\xf8\xb7\x62\x17\x6a\xc6\x04\x42\x9a\xbe\x30\x68\xe3\xd9\x14\xec\x95\x76\xa3\x02\x9e\x6c\xe1\xa4\xd0\x13\x05\x1a\x7a\x9f\xd4\x94\xe1\x85\x41\x4b\x80\x2f\x18\xfd\x90\xb1\x95\x46\xb7\xd6\x21\x07\x1c\x29\x8b\x9d\x78\x4b\x02\x5b\x96\xc1\x6f\x22\x14\xdc\x19\x46\x45\x2d\x64\x8d\x30\xe4\x84\xa1\x56\x8c\x66\xaf\xf9\x34\x52\x74\xe3\x87\xf9\x2d\x04\x1e\x09\xdf\xa4\x40\xe3\xc6\x16\x30\xda\x36\x3d\x65\xac\x53\x39\xb3\x16\x36\x1c\x23\x96\xb4\xa6\xf1\x43\x08\x8f\x96\x31\x91\xe7\x1a\xe6\xbe\xa4\x7c\xff\x1d\x85\xfd\xb1\x33\xd3\xaf\xb6\x3f\x53\x8c\x70\x27\xe5\xeb\x35\x35\xb0\xfa\xec\x21\x50\xb7\xac\x6c\xd6\x31\x95\xd9\x93\x4c\x91\xbf\x89\x34\xcd\x02\xbd\xb2\x71\xac\x84\x06\xae\x30\x32\x49\x78\xf4\x3c\x86\x28\x28\xfd\x0c\xa1\x79\x32\x4e\x72\xd9\x34\xdd\x52\x83\xe8\xe5\xb6\x2f\xcb\x1e\xf3\x6e\x00\xe9\x3b\x91\x45\x25\x8d\x27\x79\x80\xed\xd9\xb1\x4b\x81\xbd\x95\x2f\x69\x9c\xa7\x33\xd7\xbe\xfe\x92\xe4\xc1\xd6\x8c\x56\xe8\xe0\xa4\x57\x03\x75\x38\xe0\x6b\xaa\xbe\x62\xb4\x5a\x1d\x3b\xe1\x3a\x8b\x7a\x3c\xe0\x7a\xbf\xdb\x09\xa9\xea\xb7\x62\x5f\x6e\x8e\x8b\x0f\x67\x07\x0c\xb3\x0e\xb3\xd8\x3a\x4b\xb8\xb0\x7a\x60\x43\x7f\x8c\x1d\x6c\x90\xd6\xeb\x8a\x46\xd4\xb7\x4d\x63\x22\x0b\xc5\xcb\x85\x94\xbc\xbb\x8f\xe7\xee\x82\x6d\x97\x85\x2a\x37\xd9\xcf\x02\xbc\x7a\x5d\x55\xfb\xc8\xd1\x57\x5c\x45\xe7\x66\xee\x88\x7e\xe7\x74\x9e\xba\xc5\x8f\xef\xc1\xa9\xa3\x3f\xd5\x4d\x95\x94\xdd\xd0\xd5\x57\xdd\x39\x43\x9d\xba\x12\xb7\xe6\xf5\x3c\x60\xf7\xbb\x1f\x98\x0e\x68\xe8\x99\xa2\x69\xfc\xa7\x91\x8b\x77\x56\x4c\xe7\x39\x95\x81\x4e\xe4\x72\x0b\xf2\xc1\x48\xa0\x73\x08\x69\x38\x1e\x0d\xe7\xdd\xe3\x7e\x3c\x24\x8d\x34\x9a\x71\xa9\xd8\x63\xc6\x14\xab\x68\x64\x4f\xa6\x1d\x5f\x76\xee\xd1\x69\x1a\x3a\xcf\xd4\x91\xbb\x8d\x60\x08\x28\xcf\xe8\x71\x83\x7f\x9a\x62\x89\xec\x33\x74\x72\xb5\xcc\xd3\x13\x6d\xae\xc3\xb1\xfd\x55\x01\x2d\x81\x7e\xa8\x03\xc6\x19\x1d\x5f\x60\xff\x26\x32\x85\xd2\x74\x28\xd3\x74\x18\xfb\xf3\xd0\x9b\x11\xbb\x06\xa2\x27\x5c\x03\xb9\x46\xdf\xd3\xbb\x37\xf4\x9f\x71\xb0\x38\xae\x49\x38\x7d\x5d\x01\xae\x81\xba\x94\x1e\x44\x0f\x78\xf3\xd5\x2c\x15\x6b\x30\xc0\xa3\x6b\x4d\x08\x6f\x9a\x9b\x34\x7d\xbc\x78\xb7\x5f\xff\xf7\xe9\x74\xac\xff\xac\xd7\xcb\xc7\xc6\xbb\x0d\x47\xc7\x0c\x78\xa3\x74\x0c\xa7\x3f\x73\xa1\x32\xbd\x13\x99\xd0\xb5\x41\x4d\xab\xaf\x84\x7c\xd6\x2e\x5c\xeb\x28\xba\xdc\x14\xf2\x99\x71\x02\x64\xdc\x06\xfc\xf9\xc9\xf4\xb3\x21\x61\x4d\x23\x01\x8e\x26\xff\xd7\xff\xf6\xbf\x27\x08\xff\xf9\x4f\x7f\xfa\x13\x21\x0c\x85\x40\xc4\x75\xec\x4e\x33\xfd\x40\xcb\x67\x62\xbb\x2d\xf8\x2a\x4b\xf6\x7c\x25\x12\x74\x08\xfc\x06\x79\x0d\x4a\xc6\x7d\xdc\x5d\xec\xcc\xf6\xd0\x79\x7d\xb1\x4f\x53\x19\x8e\xa7\x06\xe3\xb4\x28\xe1\x1c\x8d\x46\x4e\x52\x0b\xc7\xd9\x8e\xe7\x48\x02\x0e\x5e\xdd\xb8\x35\x00\xa9\x11\x76\x1d\x8e\x2d\x25\x51\xb5\xe7\x61\x9e\x3c\x32\xbf\x69\x62\x34\xa6\xfc\xa0\xf4\x5b\xa1\xdf\x08\xe7\xce\x08\xc8\x8a\xcb\xf1\x6c\x6e\xb7\x9e\x54\xff\x37\x6f\x6f\xb6\xdd\xc6\x91\xfc\x0d\xde\xe3\x29\x88\x3a\xfe\xea\xab\x34\x12\x10\x20\xb7\xff\x4b\x91\x49\x1c\xd9\xa2\x6c\xb7\xb5\xb5\x29\xd9\x56\x43\x68\x9d\x22\x90\x20\xca\x2a\x54\xa2\xb3\x12\xa4\x68\x02\xd7\xf3\x0e\x73\x39\x8f\x36\x4f\x32\x27\x23\x72\xab\x05\x94\xba\xff\x33\xa3\x0b\xb1\x90\xfb\x1a\x19\x19\x19\xf1\x8b\xda\xa9\x95\x86\x3f\xcb\xb0\x8a\x38\x4e\x8a\xa3\x3c\x5b\x2b\x86\x71\xcf\x5f\x86\x91\x28\x37\xe5\xff\x0e\xbf\x69\xe1\xab\x28\x3a\xec\xd6\x1b\x96\x2f\x5b\xe4\x2d\xd8\xdc\x66\x85\xe2\xde\xb7\xc7\x50\x7d\xf3\x93\x03\x15\xe5\xcf\xfc\xee\xb5\xe4\x55\x8d\x54\x7e\xf6\xf0\x32\xae\x64\xdd\x55\x44\x17\x14\x2c\xce\x07\x6e\xdd\x78\xe5\x96\x81\x66\xaf\xf2\x14\x63\xc7\x76\x12\xee\x42\xb4\x60\x65\x97\xfb\xf4\x7c\x95\xec\xe2\xb8\xbf\x20\xf7\x32\x38\xac\xc2\x0b\xe7\xab\xb0\x1d\x71\x3c\x9c\x30\x5d\x99\x41\x65\xd2\x84\x27\xcb\xcb\x0a\xa0\xe3\xbf\x52\x89\xa4\x3f\x70\x92\x40\x3c\x7d\xca\x93\x1d\xd1\xf7\xd3\x1e\x2a\xc3\xd8\x8b\xe1\xa2\xaa\xf4\x3c\x82\x46\x60\xfd\xc4\x31\x31\xbd\x23\xe1\xac\x43\x89\x37\x32\x38\x72\x9f\x65\x9f\x43\x75\xf3\x07\xca\xf3\x20\x41\xe3\x50\xcd\x17\x7f\x19\x05\xe1\xc4\xe2\xf0\xbe\x1b\xae\x81\x67\xfe\xd6\x28\x05\x07\x3e\x15\x30\xc1\xef\xc3\x35\x72\xc2\x36\xc5\x9f\x43\xd8\x38\xe9\xc9\x64\x3c\x1e\x9f\x9e\x78\x7f\x15\x90\x4d\x4c\x23\x79\x7d\x95\x25\x8f\xbf\xfd\x96\x9e\xf8\xff\x46\xe3\x6f\x49\x94\x46\x4a\x66\x65\x85\x62\xbc\x88\x0c\xa2\x06\x32\xd2\xe9\x09\x22\x0f\x0d\x4d\xfb\xc7\xad\xf8\x36\x46\x92\xd8\x66\x8b\x5c\xdd\xa5\xba\x86\xd3\x93\x55\x5e\x28\x2e\xd3\x93\xac\xd8\xae\xb3\xc4\xc4\xb1\x6f\xc9\xa9\xbe\xf9\xa2\x18\xd1\xcb\xa9\x45\x51\xbc\x43\xf6\xb5\x0e\x2b\x59\xc5\x71\x2d\xd1\x1b\x81\x18\x9e\x5b\x50\xd9\xa8\x11\xe7\x4e\xc1\xce\x7e\x9f\x58\xe9\x45\x4d\xa8\x71\x12\xe1\x4d\xae\x79\xce\xe9\xd3\xb5\x6c\x13\x73\xbf\x44\x11\x19\xf5\x4d\xbe\xe1\x62\xa7\x92\x72\xb4\xe4\x0a\x2d\x26\xb0\xce\x27\x7a\xef\xb9\xdd\x79\x93\x10\x7a\x4b\xee\xff\x99\x5b\xb7\x7f\x9b\x10\xba\xf4\x6f\x79\x82\x7d\xa3\xd1\x46\xec\x2a\xbe\xdb\x46\x74\x43\x68\xc5\x95\x2d\xfe\x8e\x3e\x1e\x93\x43\xef\x5d\x67\x42\x83\x1b\x19\xa6\xfe\x36\x44\x60\xb8\x49\x02\x59\x7d\xee\xef\x32\xf8\x66\xe2\x6e\xef\x1d\x83\x46\x05\x9e\x49\x83\x84\x4f\xcd\xe8\xa5\x51\x44\x7a\x76\x24\xa3\xff\xfb\xff\xf8\x3f\xbd\x54\x48\xd0\x70\x64\x39\xe8\x57\xea\xdc\xb4\x59\x27\x9b\x84\x41\x17\xe5\x92\x09\x7f\x46\x3d\x30\xe4\xc1\xfb\xe8\x5d\x62\x54\xfd\xba\x66\x4e\xf3\x4a\xdd\x1b\x7d\x49\x9b\x5b\x75\x45\xad\xb4\xbb\xf4\x40\xb6\xd5\x28\x04\xc4\x4d\xba\x08\x1c\x2b\xec\x55\xb0\x3d\xa2\xa0\x53\x8d\xc5\x12\x98\xfb\x9e\x01\xa6\xa5\x55\x38\xed\x5d\x7d\xf5\x9d\x85\xe7\xae\x66\xd9\x71\x5c\x1f\xb8\xf3\x71\x1c\xc3\x18\xb3\x70\x55\x4f\x81\x60\x2e\xac\xdd\x92\x5e\x8a\x89\x24\x29\x1f\x0c\xce\x26\xe3\x69\xd7\x52\x65\xc1\xea\xa9\xe8\xb7\xe3\x31\x49\x1b\xbb\xea\xd0\xfb\x7c\xbe\xc7\xe3\x31\x39\x1c\x34\x63\x8f\xfc\x9e\xb1\xac\xad\x9d\x31\x7c\xbf\x0f\x19\x1a\x80\x1e\xf6\x3e\x0f\xd2\x0f\x82\x96\x9c\x2f\x2b\x83\x11\xe3\x80\xd1\x52\x7d\x39\x0a\xe5\xc6\x84\x7e\xfc\x17\xa5\xc8\x46\x84\x3c\x5a\xe6\x37\xc6\xbf\xd2\xd3\xfc\xc6\xcb\x88\xf3\xff\xf7\x65\xc4\x0d\x69\xa8\xb4\x6e\xbe\xfc\x25\x38\xb2\xb6\x25\x3a\xe5\xbf\x2a\xf2\x55\x0f\x89\x7c\x55\x97\xc8\x17\x0c\xcc\xb7\x5c\x66\x50\x79\xc8\xc3\x35\x65\xc1\xce\x24\x7e\xac\x0f\x5a\xfa\xd9\xa6\x6b\xb6\x07\x15\xc5\xea\xf0\xa2\xfd\x2d\xe9\xc0\x0b\x6d\x82\x8e\x02\x29\x05\xd8\xd1\x76\x5c\xd5\x01\x48\x4a\xdb\x52\xf3\x40\xb3\xbf\xb4\x4f\x03\xb5\xc7\x00\x59\x53\xf3\x40\xb5\xb7\x86\xec\xb9\x2b\x49\x28\x85\x3e\x2e\xb3\x37\xaa\x98\xce\xe4\x29\x5b\xa8\xfc\x86\x5f\x20\xe4\x78\x0f\x84\xe3\x21\x39\xaf\x8f\x7c\xbb\xd2\xba\x63\x18\x2a\xdc\x85\x9d\x00\x65\x3f\x1c\x2e\xb9\x0e\x7f\x97\x27\xe5\x97\x09\xaa\x8d\x08\xb4\x7c\x58\x92\xcb\x03\x4d\xd4\x4c\x65\x3d\x43\x60\xbd\x64\x96\x17\xa9\x3f\xff\x74\x92\xb4\xa4\x50\xca\x53\xf8\x3e\x78\x0c\x0d\xcf\xc9\x79\x91\x92\x40\x11\xf1\xf3\xbc\xe4\x49\x0d\x37\xd4\xf2\xfc\x25\x0d\x64\x82\x0e\x3f\x74\xe8\xee\x2d\xa4\x27\xc0\xbd\xb4\x38\x63\x2e\x16\x15\xf0\x3d\xdf\xce\x0b\xf6\x14\x00\xa8\x42\xa8\x51\x01\x80\x5d\xb5\x90\x81\x2f\xd5\x49\x88\xeb\xc3\x63\x5d\xee\xd6\x07\x36\xa8\x4b\x0f\x80\x19\xaa\xce\x02\x1a\x22\x66\xee\x1d\x07\xba\x32\x7a\x12\xb0\x0a\xa0\x24\x26\x47\x6e\x2c\xf7\xfb\x47\xef\x77\x8f\xc7\xe3\x2b\x73\x23\xc5\x24\x28\xf2\x0f\xaa\x7d\x60\x51\xa1\x8f\x9a\xe5\x7e\xaf\x10\xf1\xfc\x7b\xdf\xae\x44\xd6\x85\xd7\x4c\xd6\x07\xd1\x4a\xb3\xf5\x5a\x0b\x56\x8e\x12\xbb\xc5\xba\x43\xfa\x6f\x7c\xc6\x07\x15\x5c\x94\xcb\x24\xc8\xd8\xf1\x3a\xa3\x42\x11\x41\x5f\xd6\x64\x04\x71\x8c\x52\x0d\x73\x04\x68\xd6\xed\x67\x95\x00\xf9\xae\x89\x6b\x64\x82\x10\xfc\xc1\xd0\x6f\xef\x22\x9a\xbb\x9f\xba\xd2\xfc\xcb\x44\xf2\x4e\x4c\x44\xfb\xce\xac\xfc\xc4\x48\x38\x9c\xcc\xad\x26\xf5\xa0\xfc\xb8\xcc\x19\x8c\x3b\xcc\xad\x2e\x80\x4f\x0a\xe0\x0c\xe3\x38\x49\x4c\x51\xfb\xbd\x03\xbe\xd7\xe5\xbd\xc6\xed\x12\xc8\x49\xa9\x8b\x7b\xb1\x2b\x54\xbe\x2d\x78\x40\xa7\x39\x21\xd8\x8e\x66\xbe\x76\x27\xbd\x7e\x6d\xad\x70\x2f\x19\x6f\x6d\xd8\x92\xbd\xe1\x6e\x60\xb8\x41\x81\x78\x89\xee\x3e\xb3\x00\x36\x54\xd3\xda\x5a\xca\x95\x45\x0f\xb5\xdf\x26\x5d\xcf\x02\x49\x8e\xae\xb2\xe5\x7e\xdf\xcf\xf7\xfb\x1c\x3f\xc7\x80\x06\x75\x87\x38\x51\x1e\x71\xcd\x46\xdc\xb8\x08\x00\x40\xb3\x5a\x61\xaf\x7d\xa5\x2e\x0b\xcd\xea\xc1\x90\x01\xe4\x41\xfb\xbd\x03\x82\xe8\x9a\x1a\xba\x63\x1c\x4f\xbd\xef\xc5\xae\x54\x71\xec\x21\x7d\x9d\xc0\x06\x0d\x4c\xfa\xa6\x9c\x82\x55\x33\x0f\x95\x32\x77\xda\x1c\x0b\x56\x80\x6a\xe9\x14\xff\xcc\xf0\x8f\x4f\x98\x42\x40\x2f\x63\xf7\xa5\x58\xf2\x74\x31\x5b\xf8\x38\x8a\xaa\xd8\x61\xe0\xe3\xf9\x30\xf8\xf5\xcd\xfc\x60\xa1\x9a\x4d\xfe\x6a\x36\x9e\x87\x2a\xad\xb3\xc7\xae\x94\xf1\xa1\xa7\xe4\xdd\x3d\xde\x93\x5f\x0b\x83\x92\x49\xad\x9f\x5e\x9a\xf9\x0f\x1d\x51\x93\x08\xaf\x40\x87\xdf\x2f\xe3\xda\xf2\x9f\xea\xa3\xde\x68\x92\x35\x4b\x25\x74\xe5\xe2\x96\xfb\x3d\x1f\x65\xcb\x25\x22\x23\xaf\x40\x70\x69\x8e\xb7\x27\x45\x01\xa1\x15\x1c\xfa\x61\x1a\xba\x43\xef\xee\x9a\x6d\xf1\x8b\x6e\x1a\x24\xda\x81\x9f\x52\xdc\x18\x9a\x22\xfd\xe0\x11\x67\x41\x51\x11\x39\xcc\x0d\xdf\x5c\x71\x19\xac\x76\xcd\x9c\x36\xd3\x1f\x91\x29\xd7\x6e\x77\x4d\x54\x5b\xd2\xc6\xb9\x3d\x42\x88\x79\x03\x0c\x37\x7c\x4b\x32\xec\xb1\xa6\x78\x06\xda\xa9\x8b\x33\x7b\x18\xb2\x06\x08\x20\x5c\x0e\x69\x37\x85\xa8\x31\xc4\x7f\x88\xa4\xb9\xf2\x8f\x3e\x81\x35\xd2\x1d\x7d\x10\xd3\xec\x7e\x63\xa0\xbf\x90\xf6\xf4\xba\x70\x89\x6b\x64\xa6\x1b\xa4\xb8\x4e\x7c\x68\x07\x66\x71\x48\x81\x3a\xf1\x8b\x6b\x64\x49\xdf\x41\x4c\xa3\x7e\x2a\x2f\x96\xb9\x12\x1d\x0e\x5d\xba\x7b\x00\xa6\xd1\x01\xd1\xa8\xcb\xad\x15\x6b\x90\x10\x7d\xea\x6d\x44\xf9\xa4\x5c\xf0\x4a\xe1\xc5\x2f\xcb\x4b\x6f\x98\xf2\x93\x19\xf7\x65\x7e\x43\x15\xe9\x78\x0d\xfa\xb2\xa7\x20\x5b\x86\x63\x1b\xbb\xdf\x76\x74\x0a\xfb\xac\xf3\xb9\x47\xac\x65\x7e\xf3\xf9\xf7\xab\x87\xde\x74\x82\xad\x85\xdb\xb6\x39\xe4\x09\x99\x3a\xc1\x67\x30\xc4\xe9\xcf\xfe\x6c\xfe\x97\xb6\x45\x0d\x9e\xfa\x5f\x78\x09\x3a\x51\xb6\xf4\xc6\x13\x50\xc2\x9b\x6d\xa3\xf5\x97\x26\x7e\xb4\x70\x65\x5e\x65\x9a\x2d\xfd\xd2\x65\xe6\x18\x12\xbf\x37\xfa\x4d\x04\x6f\x1d\x08\xc4\x36\xd8\x1b\xad\x44\x18\xac\x93\xb9\x0d\xd2\xef\x00\xfd\x76\x09\x5a\xc5\x3c\x0b\xb7\x4d\x6d\x38\x1a\x8f\x96\x8d\x87\x20\xfb\x32\x14\x50\x43\x4b\xbf\x5b\xe4\xf0\x0b\x19\x96\xde\x31\x2a\x6f\xd4\x3e\x35\x47\xf2\x30\xd7\x52\xda\x34\x47\xf9\x15\x19\xc7\x25\xd8\xfc\xd5\xdd\x56\xfc\xc0\x13\x65\x45\xd1\xa0\x73\xad\xef\xc8\x89\x44\x56\x06\x98\x1b\x62\x0d\x83\xbb\xd7\x27\x5a\x02\xd2\x80\xcd\x6d\x2d\x05\xdf\x51\x10\x5e\x58\x29\x3c\x48\x30\x5a\x9c\x1a\xdc\x75\xd1\x1e\x5e\x00\xae\x89\x95\x4b\x03\x1a\x8c\x74\xc6\x26\xfb\xbd\x30\xd0\xa7\x1e\x0b\x3c\x7c\x33\xcb\x8d\xd9\x4f\x98\x63\xcc\x58\xc2\x59\x29\x01\x2a\x10\x71\x80\x08\x6a\xd7\x3f\xc9\x13\x4c\xa8\x19\x10\xb4\x9b\xaf\x98\x0f\x29\xc1\xe5\x95\xe6\x54\xc2\xa4\xbc\x95\x94\x6b\xde\x09\x1c\xa2\x86\x9e\x54\x51\x03\x1f\xaa\x15\x1e\xfd\x6b\x67\xdb\xe6\x11\xea\x90\x13\xf3\x1d\xa2\x0b\x63\xf1\xf2\x34\xbf\x81\x35\x8b\xf7\x7f\x68\x48\x11\x34\x64\x37\x98\x98\xa6\x98\x3c\x3e\x14\x1a\xd3\x85\x8b\x6c\xb1\x07\x60\x06\xbc\x1b\x9f\xa6\x6a\xbe\xc7\x84\x8a\x22\xf0\xf3\x41\x2b\xe3\x71\x02\xee\xf8\xfa\x3a\x92\x01\xc9\xf3\xe2\xa7\x5d\x82\x2a\xdb\x93\x10\xd8\xdb\xdf\x18\xaf\x9b\xde\x45\xd1\xa0\xb4\xe7\xe4\xba\xd6\xc2\x29\x8a\xf0\x3e\x67\xfd\xd3\x5b\xb0\x65\x23\xbf\x49\xec\xbd\xf2\x9a\x46\x11\x21\xf4\x46\xe4\xcb\x44\x0c\x98\xb1\xcc\x2f\xe8\xa2\xab\x32\x84\x48\xc3\xea\x16\xc4\xb0\x93\xe0\x84\x6b\xf9\x22\x93\x1f\x01\x65\xbe\x44\x37\x19\xc6\x43\x06\x4d\xb6\x6c\xb0\xa0\x21\xf3\xe1\x88\x58\xbe\x64\x6c\x7b\x20\x8e\xac\x41\x1b\x56\xfe\x66\x54\xb0\x95\x5e\x3e\x80\xf5\x05\xf8\x60\x62\xc0\x5e\x59\xf4\xff\x02\x71\x41\x8a\x91\x12\x04\x05\x30\x15\x41\xd9\x93\x71\x6b\xc1\xda\x1d\xc0\x21\xb0\x32\xc6\xc8\xbe\xee\xf6\xea\xf6\x0e\x1d\x78\xe9\xa0\x03\xbc\x4b\xc2\x18\x50\x0d\x7e\xf4\x8f\x64\x2b\xf9\x7e\x99\xdf\xec\xb7\xe4\xab\x47\x39\x5e\xd2\x71\xde\x5e\x66\x1b\x8e\x18\x17\x7a\x9b\x5b\x53\x83\x6f\xda\xd3\xba\x36\x21\xbf\xda\x97\xed\xfe\xda\x36\x2c\xc3\x4e\x57\xb0\x76\x08\x15\x03\x66\xe0\xba\xe1\x8d\xf7\x54\xaf\x15\xaa\xfa\x4c\x9e\x12\x70\xfd\x1b\xec\x1a\x6b\x8e\x78\x48\x14\xad\xe8\x82\x66\xb4\x20\x84\x2e\xf5\xf8\x21\xc5\x5a\xf3\x24\x33\x33\x55\xd0\x0b\x1b\x5a\xd4\x31\x89\xc9\xe9\xca\x3d\xcb\xc6\xf1\xd2\x7d\x9f\x92\x7c\x95\xdc\x88\x64\x45\x18\xbb\x11\xc9\x92\x90\xd5\x68\x2b\xb6\x09\xa1\x4b\xf3\xb7\x18\x0e\x9d\x14\x53\xcf\x62\x9f\x2d\x67\xe3\xb9\x31\x5f\x58\x21\x82\x30\x24\xb7\x5f\xd9\x60\xe0\x1e\xae\xd7\x6c\x4c\xb7\x6c\x4c\x37\xb0\x00\xe8\x0d\xe4\xa5\x77\xfe\x29\x7b\x63\x9f\x09\x6e\xdc\x53\xf6\xfa\xec\x2e\x8e\x37\xe1\xcb\xf5\x5a\x37\xae\x1e\x70\x4a\x06\x83\xb5\x9b\xee\x6b\x06\x5d\xa0\x57\xd8\x07\xfa\xc1\x57\xe0\x34\xc1\xf5\x3e\x5c\x39\x03\x8f\x74\x4c\xe8\x55\x18\xb5\x0c\xa3\xc8\xe9\xf6\xec\x43\x1c\x5f\x87\x75\xba\x82\xb6\xc3\x09\x61\xec\x2a\x8c\xbb\x0a\xe3\x74\xd3\xb6\xbd\xd5\x6c\x15\x00\xb3\x5e\x3b\x30\x45\x5f\x0c\xa1\x7a\x4c\x70\x67\x60\xec\x1a\xb7\xec\x2d\x83\x29\x5d\x13\x7a\xc1\x60\x52\x5d\xdb\xa0\x77\xae\x80\xd4\x63\xca\xf9\xc9\xdd\xef\x75\x81\xfb\xfd\x96\x27\xb7\xf4\x82\x4c\x93\x1f\xa5\x59\x11\x2b\x7a\x4b\x2f\xa8\x73\x6e\x45\xfb\x63\x62\x8d\x05\x1f\x7e\xd8\xee\x16\x06\x35\x55\xdb\x1e\x4e\xdc\x11\xdc\xca\xda\x62\x2d\xbc\x60\xce\xc8\xbe\xec\xa3\x78\x4b\xfe\x55\x4f\x4e\x68\x77\x76\xd0\xaf\xa9\xf3\xc9\xb4\xc9\x59\x93\x03\x6d\x96\xde\xf6\x21\xba\xd8\xd4\xe4\x5b\xd3\xaf\x3c\x47\xcb\x25\xb1\xdf\x24\x45\x99\x1e\x00\x80\x64\x2a\xeb\x33\xee\xe5\x81\xf0\x06\x6e\x33\x7d\xe0\x24\x90\xb5\xe8\xb4\x74\x8c\x57\xb2\xd6\x73\x4a\xed\xe5\x65\x64\x08\xe1\x85\x89\x65\x86\x62\x76\xeb\x16\x40\x8e\xb6\xa7\xaf\x8e\x0e\xed\xf7\x47\x1a\x77\xa9\xa4\x1e\x4f\x4d\xb0\xbf\x37\xcb\x3f\xb1\xf7\x7a\xbb\x1f\xa6\xa0\xf2\xa3\xbf\x52\x1f\x48\xe8\x98\x3c\xfc\x8c\xe4\x26\xa2\xd9\x27\xac\xb3\xa6\x33\xc7\x5b\x4a\x0f\x1f\x44\x43\x8f\xed\xf8\xb3\xd3\xf8\x50\x7b\x68\x22\xf4\x12\xdf\xc5\x2e\x11\xe8\xe3\xde\x6a\x44\xa4\x9f\x38\x6d\x1c\x34\xe9\x47\x7e\xa0\x2f\xc2\x57\xaa\x7b\xc3\xb1\x1d\xbb\x65\x19\xc8\xbf\xba\xc7\x83\xf9\x81\x22\xd8\x6d\x53\x31\x94\x33\xe0\x10\x3d\x1e\x04\x3c\xc0\xb8\x7c\x7d\x56\x2f\x47\x33\xf5\x35\x40\x42\x93\xa0\x16\xe6\xb9\xc1\x3a\xae\x45\x3b\x25\x20\x5c\x58\xfe\x24\x6c\xfc\x1c\xec\x76\xdd\x2f\xdd\x2a\x14\xe2\x49\x8b\x3c\x5b\x5a\x2c\x64\x2b\xde\x93\xa8\xb3\x5c\x1a\x44\x64\xa7\x0e\xe9\xef\x95\x4b\xce\xb7\xdf\x8b\x6d\x6d\xe4\xbc\xc7\xcf\xd9\x9c\x3e\xd8\x4c\x3e\x53\x0e\x8f\x76\x63\x84\x83\xae\x81\x0e\x98\xb9\x1d\x83\xcd\xe9\xb5\x3c\x22\xd4\xc6\x55\x6f\xba\xe6\x23\x61\x77\x33\x9d\x63\xd2\x7a\x0b\xb9\xc1\x85\x0c\x2b\xe7\x73\x0b\xd3\xe8\xa7\xd7\x6b\x89\x5a\xed\x98\x86\xcc\x19\xec\x79\x19\x27\x4d\x94\xea\x76\x95\xd2\xce\x5d\xc9\xea\xb0\xd5\xc6\x4b\x85\xa2\x65\xe0\xa0\x22\x8e\xb7\xa8\xe2\x05\xb2\xd4\x33\x36\x26\xce\x7b\x00\x7e\x0c\x27\x87\x03\xfd\xa3\xb6\xd2\xd1\xd1\x62\x6b\x99\xdf\x99\x31\x36\x2b\xc1\xf9\xea\x20\x07\xaa\x44\x47\xfa\x9b\xe3\xe9\x61\x7c\x8e\xed\xa4\xc0\x1f\x5f\x90\xdf\xa0\xcf\xfa\x14\x8b\x75\x3d\x7e\xb1\x3e\xa0\x17\xd8\x2b\x45\x3f\x28\x63\xe3\xe5\x7c\xe8\x82\xa1\x93\x73\x6c\x3d\x0e\xdc\xb2\xde\xaa\x4e\xf4\x15\x9a\x19\xf3\x62\xee\xdd\xf6\x59\x2f\x35\x3b\xc6\xd1\xba\x98\xa3\x75\x71\xbe\x4a\xd4\xd9\x6e\x9a\xe4\x6c\x4c\x05\x9b\x38\x2f\x56\x24\x55\x67\xc5\x54\xb0\x24\x67\x6a\xb8\x23\x83\x49\x9a\x54\x9a\x80\x5a\x71\x30\xc0\xe8\x15\x71\xac\x8b\xf9\x66\x7e\xae\x10\x25\x25\x11\xac\x18\xee\xf4\xcd\x46\x9d\xeb\xd8\x24\x73\x06\x85\x4e\x6f\x01\xb5\x42\xa0\xfe\xc7\x73\xba\x83\x52\x24\x63\xa0\x7a\x53\x71\x09\xc8\x8a\x53\x6c\x44\x6a\x33\x43\x49\x92\x50\x6b\xc8\x86\xc8\x75\x39\x41\x8b\x5f\x68\xc5\xf0\xf1\x9c\xe9\x42\x87\xdf\xcc\xf1\xf7\x64\x1e\x14\x78\x4a\x74\x8d\x8f\x07\x49\x35\x64\xdf\x90\xb9\x77\xd6\xa5\x39\x78\x6b\x4b\x27\xe3\x38\x67\xd0\x01\x2c\xf7\xcc\x77\xd7\x76\x14\xaa\x18\xfc\x65\x1e\xc7\x7d\xfd\xf1\x6d\xbb\x8e\x04\xc6\x5a\x77\xcd\xf5\xdd\x7a\x3a\x34\x56\x9c\x20\x3d\x37\x2f\x98\x69\x0e\xf8\x72\x82\x5a\xc9\x75\x9a\x51\x6f\x59\x9c\xee\xa8\xb5\x38\x4e\x43\x35\x94\x0b\x8f\x90\x62\x04\xf0\x20\x27\xaa\xe1\x48\xb0\xfb\x03\xe5\x2d\xf3\x75\x83\x78\x03\xfe\x9f\x48\x9d\xd6\xd6\xf1\x2c\x80\x7e\x35\x91\x29\xd4\x9c\xdd\x87\xee\x10\x1b\xf8\xb9\x0d\xb0\x04\xac\xec\xc5\x11\xa8\x03\xd2\x6b\x56\xdf\xe5\x7f\x4b\x37\xe3\x42\x35\x7c\x89\xcd\xd4\x3c\xd0\x33\xba\x84\x56\x40\x5b\x02\xa4\x2e\xc4\x50\xd1\xe7\xff\x6f\xc6\xe7\x7d\x3d\xe6\x0d\xff\x64\x2c\x46\x5a\x51\x1e\x78\xa5\x0e\x0f\x14\x5a\xc1\xd6\x3c\x11\x6f\xb2\x4f\xfa\x42\x1e\xc8\x59\x68\xbd\xcb\x2f\x77\xc0\x89\x54\x0d\x3f\x83\x9f\x94\x27\x1f\x46\xea\xb4\xcd\xae\xf9\xef\x56\x5c\x96\xb8\x87\x7d\xfb\x61\x9e\xf6\xf7\x7b\x17\x73\x25\x96\x77\x24\xf0\x52\x1f\x78\x31\xec\x2e\xfd\xdd\xbf\x5b\x7a\x0d\xe7\xe7\xa3\xaa\x01\x75\xaa\xd1\x6d\xbe\xbc\xe6\xca\x23\xa3\xa3\x1f\x13\x17\xee\x01\xbd\x72\x12\xa6\x9f\xe5\xf3\x51\x76\x25\x6e\xb8\x95\x5c\xfc\x50\xd6\x22\x49\x0f\xd1\x63\x99\xa0\x16\xbf\x60\xc0\x04\xdc\xbb\xf5\xc0\x46\x81\xe7\x35\xd9\x43\x78\x8f\xa8\x10\x8b\xac\x88\xac\xf3\xe6\xd7\x79\x82\x2f\x80\x26\x9c\xb1\x72\x9a\x0d\xd8\x2e\x34\x01\x4e\xb3\x61\x03\x22\xc5\x08\xf9\x23\x3d\x62\x11\xe8\x6d\x47\x38\x86\x50\xa3\x79\xce\xe3\x1d\x3a\x14\xc7\xd4\x35\xb3\x01\x80\xb4\x6f\x07\x49\x50\xd0\x74\x9c\xea\x59\x22\x3d\x8b\x91\x0c\xd6\x46\x8d\x14\x9f\x20\x85\x81\xd8\x65\x3b\x2a\xd1\xfc\x75\xc0\x76\xd6\x0e\xc9\x0c\x51\x16\x0c\x51\x46\x03\x17\x3b\xaf\x43\x88\x1d\xb0\xd0\x62\x4e\x70\x63\xcc\xd5\x4b\x66\x8c\x80\x41\xdd\x16\x15\x69\x6d\xe7\x25\x29\x87\x4c\xb7\x82\xe6\x43\xf6\x24\x44\x32\x70\x43\x2a\xf7\xfb\xbe\x6c\x3b\xca\x43\xc0\xdc\xa3\xc6\x5d\x03\x26\x4c\xa5\x03\xc4\xfd\x34\x5e\xe6\xfe\x95\x71\x0d\x2d\xe3\xcb\x61\xe6\x2d\x99\xf3\x21\x18\x80\x05\xe4\xea\x97\x1a\xb8\x89\xe5\xae\x60\xcd\x34\xbd\x3c\x12\x0a\x0b\xbc\xa4\x1b\xfc\x03\x0e\x1a\xf3\xba\xff\x9c\x37\x41\x71\x54\x90\x7b\x8f\x7e\x98\x28\xea\x9e\x7c\x01\x51\x25\xa7\x8a\x66\x0d\x27\x90\x54\x78\xb0\xf5\x29\xce\x3c\x33\x96\xcd\xd6\xc2\xd9\x2c\x08\xdb\x96\xaa\x56\x7d\x15\xc2\xd7\xec\x90\xff\x95\x88\x4f\xfb\xbf\x1e\x3b\xd1\x3d\x63\x3c\x4b\x24\x89\x63\x15\xc7\x26\xf6\x6c\x37\x53\xfa\x70\x44\x28\xdb\x84\x33\x95\x25\xba\x84\xe1\x50\xcd\xc9\x30\x71\x65\x4c\xc7\xe9\x84\xd0\x52\x93\xb3\x54\xf3\x33\xa6\x9c\xb3\x5d\x60\xb6\x1e\x14\x39\xb0\x45\xea\xa3\x08\x6a\x65\xbb\xd9\x60\xa0\xcb\x74\x45\xea\xd2\x74\x99\x71\x0c\xc2\x5e\x25\xe2\x98\x9f\x4b\x60\xf9\xa6\x59\xc2\x87\x13\x92\x66\x60\x6d\x7a\x28\x99\x01\x81\xaf\xfb\xde\x04\xdf\x0f\x00\x16\x54\xba\x5d\x83\xde\x37\x0b\x40\x9b\x07\x79\xd6\xce\x2e\xed\x2c\x31\x2e\xdc\x17\xac\x4a\x0a\x5a\x65\xe8\x15\x22\xf4\xa5\xd5\x67\x7f\x15\x71\x9c\x2c\x10\x74\x1a\x92\xfd\x55\x10\x42\x17\x81\xf7\xc6\x1a\x36\xd1\xb8\xa7\xc0\x9f\x15\xb6\x2b\x34\x83\x6f\x1c\x0f\x92\xd5\x50\x06\xbe\x06\xd7\x0b\xc7\x9d\x8a\xbe\xd6\xbd\x18\xd4\xa8\x52\x6d\x6d\x5b\xb8\x07\x84\x79\xc8\x9d\xa5\xfb\xa0\x34\x67\x7b\xe8\xd0\x4e\x35\x7d\x0b\xad\xd1\x81\x89\x83\x20\x1b\x7d\xfa\x85\x17\xac\x04\xdc\xb7\x7c\x24\x76\xaa\xca\x97\x08\x91\x94\x07\x7e\xee\xba\x80\x02\xc1\x53\x83\x1c\x74\x92\x4b\x72\xe6\x58\xf4\x17\x2a\x29\xad\xb7\x00\xda\x1f\x53\x8b\x1e\x94\xb3\x8f\x79\x52\x52\x89\x0f\x06\x88\xb2\x59\x5a\x37\x69\xf9\x2a\xc9\xcf\x45\xbb\x08\x97\x82\x22\xbc\x5e\xdd\x91\x7b\x7f\x4c\x27\xa4\xe7\xd1\xb6\x03\x1c\x1e\x48\x9e\x93\xd3\x53\xbb\x1b\x7f\xd2\x5d\xca\x60\x3f\x4a\x42\x77\xec\x79\x99\x64\x7a\xed\xec\xe2\xd8\x78\x79\x18\x5b\xdf\x9a\xfd\xdd\x7e\xdf\x4f\xaa\xd1\x62\x7d\x8e\xc2\xdf\xd1\x62\xbd\xdf\x57\xc0\xbb\xbb\x80\x38\xae\x60\x28\x03\x0f\x12\x55\x2f\x67\x4f\xf2\x24\x63\xc5\x48\x09\xeb\x42\xda\x8d\xe9\x4f\xaa\x2d\xac\xcf\x87\x70\x46\x59\x89\xfd\xe3\xaf\xfd\xd8\x76\x98\xa5\xd2\x1d\x33\x68\x59\x21\xea\x78\x59\x33\xcd\x5d\x9b\xf7\x21\x3c\x23\xa9\xa2\x3b\x4f\x6b\x58\x7f\x4c\xc5\xb9\x05\xaf\x30\x80\x10\xc3\x2a\x15\x67\x60\x36\x6b\x02\x06\x55\x9a\x64\x08\x18\x00\x36\xaf\x07\xdc\x46\xbf\x40\x43\x57\x16\xe0\xc8\xba\xd2\x67\x32\xd3\xe1\x6b\x56\xc2\xdf\x2d\x2b\x92\x25\xa1\x1b\x96\xd1\x1b\x56\x24\x6b\x42\xef\x18\xa8\xf5\x95\xe7\x37\xc1\xec\x4a\xba\xa6\x77\x7a\xee\x80\xdb\x3e\x85\xd3\x69\x31\x5d\x33\xb6\xdc\xef\xf5\x20\x6b\x3a\xba\xa4\x13\x92\xae\x87\xcb\x33\x36\xf1\x97\x9c\x6b\x56\x9e\x6d\xf7\xfb\x72\xb8\x3d\x63\x37\xc3\x72\xba\x4c\xd7\xf4\x8a\x95\xc3\xe4\x9a\xb1\xe5\x74\x9b\xde\x90\x53\x80\xfa\x09\x51\x7e\xae\x11\xd8\xc7\x89\xaa\xa1\xfe\x6b\x0a\x39\x36\xe9\x1d\xbd\x3a\x1b\x4e\xa6\xc3\x49\x7a\x75\x3e\x01\x67\x9b\xd0\x61\x23\xa2\x5d\xf0\xbc\x48\x56\x8f\x1e\x13\x7a\xcb\x96\x83\x0f\xe6\x39\xe2\x96\x2d\xdd\x52\xbb\x60\xe3\xd3\x8b\xb3\x0f\xa7\x83\xc1\x05\xb9\xc5\x96\xdf\xd2\x09\x16\xf2\x8a\x15\xc9\x2d\xe9\xbd\x3a\x2f\xa7\xc9\x9a\xdd\xd2\x1b\xf6\x8a\x26\x77\x2c\xd3\x97\x9a\x9b\x01\x9b\xf0\x6f\xf4\x88\x7e\x20\x69\xb2\x64\xb7\x74\xcb\x5e\xc1\xc0\xad\x86\xec\x43\xb8\x70\x9e\xaa\x1a\xf6\x0d\x6f\xb1\xb1\x4d\x70\x44\x1f\x63\x5f\x6b\x18\xbb\x52\xe4\xfe\x0a\x1d\x4e\x6f\x25\x8f\x9a\x2c\xf8\x5f\xfe\xfb\x74\x30\x50\xe4\x4a\xd5\x90\x98\x1b\x80\xfa\xba\xdc\x97\x62\xc9\x13\x04\xd7\x69\x24\xd6\x45\x5f\x81\xe7\x80\x7f\xa5\x94\x43\x0d\xba\xf1\x4a\xd9\xb7\xd4\x2b\x55\x83\x88\x7c\xf4\xed\xd8\x41\xcc\x01\x42\x79\xbb\xaf\xfa\x92\xf8\x22\x28\x0c\x10\xd8\x03\x5f\xd0\x2f\xbb\x87\xd1\xdd\x13\x9a\xa3\xe8\x22\x8c\x66\x45\x88\x2d\xe4\xfe\x45\x84\x4a\x37\xa8\x54\xdf\x4e\x7a\xb5\x0e\x49\xe2\x78\xac\x63\xc6\xf0\x39\xb3\x10\x90\x16\x54\xe8\xd1\xc4\x75\x36\x3f\x7f\x1c\x74\xd6\xdf\x69\x72\x38\x11\x27\x63\x58\x66\xcf\x15\x7d\xa6\xe8\x9f\xc6\xb9\xf2\x77\x8a\x8d\x3d\x7d\x78\x6b\x2e\x6a\xf0\x30\xcc\xee\x17\x9b\x94\x03\x76\x9c\x15\x71\x6a\xba\xa3\xef\x9b\x38\x86\x29\xbe\x19\xe2\xb1\x42\x03\x0c\x3d\x9d\x2e\x70\x6b\x85\x90\x73\xea\x4e\x1f\x78\x3a\x0a\xf1\xf8\x5e\x5d\xfd\x51\x61\x4c\xdd\x8d\xd5\x8f\x20\xde\x96\x9d\x71\xdf\x67\x20\xd3\x1f\xb7\x35\x15\x5c\x8d\x2f\xf0\x8e\x05\x4d\x75\x97\x1d\xe3\x7f\xd8\x5e\x4f\xea\x3f\x5f\x0b\x53\x17\xaa\xb3\x68\x5a\xb6\x4c\x07\x83\xef\xd4\x81\xfe\xa9\xa6\x7f\xaa\x91\xd8\x56\xd6\x89\x3e\x0c\x0c\x49\x2d\x6e\xa0\xb8\x2d\xab\x1f\xa4\xd8\x6d\xd9\x9f\x8a\xdd\x8b\x6d\x95\xce\x4c\xd4\x9c\x2e\x79\x91\xdd\xf1\xa5\x6e\xf2\x55\xb6\xf8\x58\xa5\xb3\x79\xb0\x4d\x7f\xac\x21\x5f\x37\x4a\x03\x61\x0b\xd8\x45\xb7\xd4\x73\xe1\x16\xda\x28\x99\x6a\x6e\x63\x29\x10\x0a\xad\xe9\xf5\x6d\x26\xe7\xa3\x45\x56\x14\x49\x1d\xa3\xd9\x42\x53\x0a\xa7\xf8\x57\xf3\x0c\xab\xc3\x67\xe5\x1c\xdf\xdc\xbb\xe7\x07\x65\x1f\xcd\x58\x9c\xa1\xb3\x63\x99\x6c\x5d\xe4\x58\x82\x59\x77\x81\x83\x41\xd0\x0b\x9a\x83\xd7\xb5\xc3\xed\x3a\x2f\x78\xe2\x3b\x4c\x0e\x24\x51\xe4\xb0\xca\xcb\xac\x28\xee\xee\xcd\x12\x6f\xf9\xc4\x0b\xba\x0c\x23\x04\x7d\xd5\xa3\x64\x14\x76\x20\xd7\x69\x6d\xe4\x3d\xf9\x83\x91\xa1\x1d\xee\xf5\x7e\x55\x89\x1e\x6b\x1c\xe1\x8e\xf8\x7f\x7e\x26\xfe\xb7\xcf\xc4\xff\xf0\x99\xf8\x77\x26\x1e\xc7\x20\xf0\xde\x59\x5f\x68\x35\x6d\x8d\xd3\xee\xe5\x65\x20\x28\xfa\x2a\xb0\x38\xfa\xbe\xc8\xb7\x5b\xbe\x8c\x63\xe5\x8d\x8d\x90\xe4\x02\x89\x01\x75\x92\x3a\xae\x2c\xeb\x4e\x39\x54\x9d\x80\xb2\x54\x19\x3a\xf2\x4c\x93\x11\x59\x77\xff\x02\xe8\xb0\x06\xaa\xc2\xdc\x15\x31\x7e\x93\xc9\xeb\xbc\xfc\x0e\xf1\xa2\x86\xcd\x16\x74\xe5\x40\x63\x41\x40\xda\xc5\x56\xd6\xcb\x6e\xf6\x17\x75\x61\x34\xaf\xc2\x47\x35\xfa\x12\xc7\x4f\x31\x74\xb3\xab\x94\x41\x0e\xe5\xa3\x80\x56\xa2\x8e\x92\x23\x89\x08\x6e\x07\x8f\x66\x96\x0a\x81\x51\xb9\xa7\x41\x40\xb9\x83\xdf\xc8\x3a\xb6\x14\x64\xea\x69\x0c\xe7\x78\xee\xf4\x4b\xc8\x7e\x2f\x1b\x72\x26\x3d\x67\x9d\x98\x97\xb6\x4b\x2c\xec\x05\x7a\xfb\xfc\x19\xf4\x8e\xc2\xd0\x7b\x7d\x9d\x08\x5a\x6f\x5e\x59\xd3\x5a\x7b\x0e\xb4\xd6\xe9\xd0\xdd\xab\x39\x59\xb0\xc6\xe5\x53\xe3\x26\xa8\x5e\xc7\x57\xe8\x24\xd2\xa6\x0a\x1d\xc1\x3e\xb0\x8a\x7b\xcd\x52\xe3\xf8\xef\x38\x37\x57\x99\xb4\x22\xc6\xe7\x3a\xa4\x3d\x32\xfd\xee\xa1\x81\xb9\xc8\x96\x7f\xec\x2a\x5c\x25\x6f\x04\xdb\xa8\x44\xf9\x02\xfc\x57\x4d\x31\x01\x59\xe2\x6f\xa8\xaa\x4b\x36\xac\x64\xb1\x56\x62\xad\x7d\x66\x10\x31\xa1\xb3\x32\x91\xdd\x5b\x45\xb6\x1c\x0c\x0d\x1a\x65\x0f\x56\x2a\x51\x64\xa0\x5a\xf0\xcc\xb0\x62\xb3\x4f\x97\xee\x64\x0c\x61\x6e\x3e\x5f\xee\x70\xa9\xcb\x25\x84\x26\xcd\x31\x87\x85\xd9\x38\x94\x09\x2a\x25\xa2\x79\xc3\xd2\x1b\x7e\xcb\x63\x2e\xd2\x8c\x76\x5b\xe8\x21\xe2\x87\xc6\xc4\xf7\xec\x36\xaa\xb5\x0b\xc8\x4f\x5d\x98\x64\x08\x44\x5e\x76\x0e\x3e\x6e\xf8\xc6\x58\x9c\x19\xc5\x29\x17\x10\xc7\x37\x32\x09\x5d\x80\xb7\x51\xac\x7d\xe2\x66\x69\xa0\x93\x10\xac\x84\xa6\xf0\x77\x12\x78\x01\xd7\xbd\x8e\x63\x6b\xd0\xc1\x9e\x0a\x30\xb4\xef\x3b\x5e\x78\x9d\x55\xcf\xd0\x18\xa3\x15\x94\x10\xd2\xeb\x18\x64\xbd\xe9\x1f\x76\x57\xd7\xca\xa2\x6f\xba\xdd\xf3\xea\x59\xbe\xbe\x51\x2e\x43\xc2\x4c\xe2\xf8\x2d\x10\x0a\xbf\x90\x3d\xa1\xf4\xbb\xf1\xaf\x1d\x69\x9a\x6b\x25\x8e\x73\x05\x6a\x43\x6d\x64\x93\x80\x93\x6c\xf7\x0a\xed\x34\xc1\x7c\x10\x74\x25\x64\x1c\x5f\xf3\xa6\x5b\xd6\x77\x0f\x50\x0f\xab\xb1\x88\xaf\xd3\xcd\xa6\xff\x0d\x9a\x6e\xc8\x91\xf1\x50\x24\x47\xb7\x6b\xce\x0b\x78\x78\xf9\xdd\x82\x96\x06\x94\xd1\x1b\x07\x84\x2b\xa9\x5f\x23\x94\x60\x29\x15\x14\x53\x2b\xf4\x9d\x81\x46\x68\x95\xac\x69\x7b\x87\xa9\x6f\xbd\xf2\xbe\x21\xc1\x97\xc6\x59\xad\x33\x0f\x3e\x86\x8f\xd5\x2a\xd3\x00\x64\xb5\xa8\x0f\x86\xd3\xa0\x36\x02\xd6\xec\x9f\x31\x4b\xd6\xe9\x68\x67\xc3\x6b\x29\xda\x83\xd6\xd1\x5d\x20\x59\xed\x91\xed\xee\xf0\x51\x18\xaf\x56\xb1\xc8\x99\x1c\x21\xb7\x61\x6d\x47\x3b\xac\x23\x6b\x15\x77\x74\xf9\x39\x3a\xc2\x0b\x48\xc6\x3f\x01\x47\xbc\xb6\x32\x2c\x0b\xde\x86\x53\x76\xfe\xb1\x92\x32\x94\x5e\xe1\x03\xca\xb7\xe0\xf6\xdd\x08\x8a\xfa\x13\x9a\x19\xbf\x86\xa0\xc7\x1a\xc7\xb2\xcf\xd4\x14\xd1\xd8\x48\x9a\xd1\x1d\xfb\x55\x26\x3c\x74\x5d\x06\xf2\x63\x14\x23\x37\x5c\x9a\x6d\x29\xbc\x47\x90\x61\x60\xfe\xd8\x99\x1e\xc2\x8d\xbf\x26\x0b\xa6\x49\x06\x20\x72\xe5\x01\x61\xd5\xbc\xc3\xa2\x16\xa2\x87\xc2\x6b\x8a\xee\xc2\xc5\x9c\x6c\x74\x3b\x77\xe1\x3a\x71\xd8\xba\x8d\x42\x87\x05\x39\x9f\x80\x03\x30\xf0\xda\x5c\x2f\x0c\x57\x4a\x72\x13\x96\xf6\xdc\xb7\xbd\x59\x9c\x8e\x1a\x2e\x6a\xe5\xf5\x05\x6a\x09\xda\xb7\x94\xec\x90\x28\xfa\xdc\x38\xcf\x6f\x70\x6d\xa4\x2b\x42\x89\xc6\x4c\x1b\xee\x55\x93\xef\x30\x34\xaf\x10\xd1\x05\x58\xed\x3a\x2d\x6c\x01\x28\x2b\x70\x41\x8e\xb9\x31\xd7\x4f\xa5\x12\xbf\xe6\xfc\xd6\x6b\x91\xde\xd4\xc1\xf8\x41\xfa\xff\xe0\x7b\x0b\xcd\xf1\xde\x04\xef\x3b\x03\xf0\x2b\x79\x36\x9e\xe6\xac\x3f\x76\x30\xc1\x18\x7a\x6e\xd0\x1e\xd0\x53\x0b\x52\x87\xe0\x84\x6a\xbc\x16\xd6\x88\x08\x6a\x01\xf4\x27\x81\x86\x70\x1e\xc7\xfd\xb5\x5d\xc1\xde\x1b\x25\x20\x34\xa0\x25\x77\x17\x6a\x89\x85\x26\x81\xc6\x0e\x65\x20\x64\x1e\xd6\x64\xe4\x6d\xf7\x85\xca\xc3\xf2\xea\x7e\xe2\x3d\x40\x7a\xcf\x13\x0d\x6c\x13\xe5\x5c\x57\x3a\xa8\x94\xc7\xdb\x4f\xa7\x91\x9e\xbe\xf6\x2b\x54\xdd\x43\x19\x15\x66\x86\xed\xec\x24\x79\xf3\xe5\xb7\x6d\x58\x2d\xc8\x41\x2f\x31\xe3\x5d\x58\x00\x12\xd0\xdd\x15\xff\x11\x30\x4c\x5e\x80\xc6\x73\x45\x33\x1b\xfc\xb6\x5c\x87\x11\x68\x0c\x18\x20\x2e\x9d\x56\x67\xc2\xbf\xad\x56\x44\xcc\x2a\xd4\x2e\xf7\x5e\x99\x7e\xcf\x13\x1d\x4a\xa3\x75\xbe\xe4\xa8\x4c\x9d\x41\x11\x75\x08\x7a\xc8\x9e\x35\xb3\x83\x8b\x77\xc0\xa3\x8f\x76\xa5\x29\x40\x3a\xb1\x74\x28\x9c\x03\x0f\x32\xfe\x0c\x38\xca\x53\xc1\x66\xe7\x23\x2f\x2c\x82\x2a\x14\x8d\x8c\x3b\x87\x88\xaa\x5a\xb4\xe7\x3c\x3c\xd3\x30\x5a\xe5\x65\x5e\xad\x93\xd0\x45\xbb\xf7\x77\x61\xc5\x39\xf6\x81\x33\x21\x3d\x10\x80\x81\x4d\xa2\x0f\x74\x02\x05\x90\xd9\x04\x57\xeb\xaf\x4c\x51\x4d\xcf\x94\x9d\x85\xa3\x9a\x67\xc2\x69\x26\xaf\x61\x5b\x54\x5d\xb5\x75\xa4\x6a\x56\x1f\x38\x6e\x0f\x3d\xac\xd4\x6b\x47\x15\xc7\xb0\x01\xdc\x14\x0d\x70\x13\xf5\x36\x80\x96\x5e\xd8\x8c\x23\x69\xc3\x96\x40\x9e\xb0\x31\xbf\x1f\x69\x4c\x0d\xde\x12\x7d\x2b\xec\xf7\xea\xcb\xdb\xf6\x2f\x37\xac\xd6\xaa\xbf\xba\xa7\x29\x34\x11\xca\x4b\xce\x94\xb5\xbf\xac\x14\x6b\xc9\x3f\xa8\xc4\x57\x06\xc5\x9e\xeb\xc0\x53\xc2\xc1\xdf\x5c\xb9\x4c\x26\x9a\x9f\x47\xeb\xfc\x04\xf1\xd0\x66\x73\x42\x8c\x60\xd0\x3d\x9b\xc8\x03\x70\xb1\x60\x39\x94\xff\x69\x20\xed\x74\x55\xd3\x27\x79\x72\x63\xec\xe7\x50\xab\x66\x28\x07\x93\x74\x82\x69\x4b\xb1\xe4\x1e\xf4\x0e\x45\xb3\xa8\x06\x06\xbb\x9a\xfd\x88\x34\x3f\xf0\xa6\xdd\xa5\xd1\xc5\x66\x73\x2a\x98\x3a\x15\x67\xf2\x54\x58\xf5\x83\xac\xee\x8a\xc4\x3d\x29\x6a\xb2\x44\x7a\x25\x13\x83\x0c\xbd\xd7\x19\x47\x69\x59\xe0\xba\xca\x55\xc7\x65\x93\x0f\x01\xa7\x7c\xe6\x18\x37\xfe\xf8\x9c\xb3\xd0\x44\x86\x11\x03\x73\xb2\xe6\x7f\x72\xeb\x59\x65\x6c\x1f\xf9\x6a\xbe\xc4\xca\x38\x96\xce\x25\x95\x73\x59\x9f\x9b\xbd\xfc\x1c\xf5\x63\xae\xb8\xac\xf6\xfb\x8e\x40\xa3\x5a\xd6\x8e\x60\xca\x3b\x7a\x09\x04\x34\xa0\x3f\x6d\x1d\x62\xbd\x11\xe4\x55\x1c\x7f\x57\xba\xf7\xda\xa0\x1d\x52\xea\xf9\xb5\xaa\x0c\xf2\x2c\xf0\xa1\xa5\x33\xbd\xb5\x99\xe4\xa0\x24\xe7\x3e\x6e\x0a\xf9\xd2\xc4\x87\x0c\x58\x49\x6d\xb1\x03\x56\xfa\x32\xd5\x59\xcd\x2f\x97\x0c\x5a\x55\xaf\xbc\x96\x90\xdc\x27\x82\xe5\x7a\x62\xa4\xae\x9b\x4e\x08\x99\x9a\xda\x4c\x2a\xa3\x89\x2f\x10\xc1\x82\x50\x9f\x97\xa1\xdc\xe8\x65\xad\x3d\x29\x54\xe6\x6c\x42\xc2\x66\xe0\xb1\x7c\x6a\x2b\x54\x54\xd1\xe1\xd1\xfa\xc6\xb4\x51\xe3\x1b\x61\xeb\x0b\xeb\x30\xab\x33\x2c\x90\x56\xf5\x0e\xf5\xb2\x38\xae\x8e\x55\x92\x99\x4a\x46\x0b\x51\x2e\x32\x95\xc0\x96\xc8\x4c\xbf\x2a\x53\x9f\x8b\xad\x65\xae\x4c\x56\xd2\xd5\x7f\xd4\x16\xc8\xdb\x5e\x8b\x76\x7a\x65\x9f\xed\xb0\xe4\xa9\xf9\x3b\x60\x65\xaa\x6c\xe0\x60\x07\xcb\x1c\xd6\x61\xdb\x23\x10\x80\xb5\x06\x4e\xe0\xa5\xdd\xc2\xdd\xab\xb3\x77\xd3\xe5\xbb\xfa\x98\x4b\xa5\x7c\x95\xe4\xe0\x4e\x29\xf7\xee\x94\xcc\xe7\x20\xb7\xad\x2a\x8f\xb4\x8a\xf6\x13\x75\x56\x06\x52\x46\x75\xce\xca\xba\x1f\x4d\x61\x02\xbc\x97\x27\xc7\xb9\xa1\x7d\xbd\x77\x5c\x69\x0e\xe8\xfd\x3e\x71\xdf\x9a\x56\x9e\x0e\x27\x8c\x5d\x8b\x24\xa3\x92\xc4\x71\x66\x9c\xcd\xd4\xc8\x35\x4c\xc0\x7d\xdb\x09\x55\xcb\xb9\x67\x48\x5f\x1a\x6e\x37\x35\x11\xec\x52\x3a\x60\x81\x1b\x29\xd3\x87\x4e\xa7\x57\xde\xbd\x95\xf5\xce\x98\xa8\xa6\xd6\x17\x6c\x3f\xaf\xc4\xd0\x78\x66\xa8\xa7\xa5\xf8\xd4\x22\x1b\x0e\xc0\x74\xa1\x72\x56\xce\x91\x2e\x06\x65\x05\xee\x6c\x65\xd3\x97\x8e\x60\xa6\xe5\x34\x6b\xd4\x02\x27\xeb\xab\xfd\x5e\xb2\x63\xa4\xd7\x28\x89\x20\x0e\x9f\xa0\xb0\x32\x52\xe9\x1d\xa2\x21\x2c\x67\xbb\x9f\x9a\x73\x04\xa7\x43\xbb\x01\x38\x1c\x82\xd2\xc0\xd6\xb1\xcf\x70\x08\xcb\xf3\x31\xfc\x15\xe8\xf8\xda\xd8\x3d\xd6\x06\x91\xed\x06\xd9\x4c\x60\xde\xa1\xa2\x62\x30\xb0\x8e\x67\x76\x43\xd5\x53\x03\x96\x53\x39\x60\x39\xda\x8f\x39\x32\x2c\x09\x18\x91\x99\xb2\x93\xf2\x6c\x3c\x1d\xa7\x41\x15\xb5\x3a\xe4\x80\x95\x5f\x67\x33\x31\x84\x74\x93\x74\x4c\xb0\x3a\xaa\xf7\xf6\xe1\x48\xef\x03\xaf\xb7\xb2\xf9\xd0\x53\x9b\x44\xc9\xc6\x66\x22\x55\xc7\x7b\x99\x82\xb7\x32\x73\x58\xeb\xd3\x49\x6f\x08\x70\x47\xe2\xf6\xc2\x60\x20\x9d\x1a\x5e\xe0\x00\x57\x76\xbd\xbc\x28\xb0\x0b\xfd\x4d\x66\x5b\xf3\x58\xcd\xba\x31\xcc\xf5\x15\xd1\xa6\x44\x31\x67\x2b\x21\x04\x7b\x6f\x19\xc1\xa3\xb0\x6a\xbf\x89\xab\x4e\xc5\xd6\xce\x67\x11\x44\x8a\x50\x97\xf9\x9f\x3c\x09\x89\x9a\x41\xe8\xbf\xf7\xbb\xe1\xb7\x3c\x51\xe4\x54\xf6\x99\x73\x9d\x70\x2a\x99\x0c\xfc\xb2\x80\x71\x81\xdc\xef\x01\x60\xd3\xda\x20\xc6\x71\xa4\xe4\x0e\xb4\x0a\xdb\xf6\x9e\xf9\x75\x29\x24\x1f\x82\xed\x4f\x15\xc1\x93\x87\x2f\x0e\xc4\x43\xfa\x7e\x0b\x52\x0f\xe3\x5a\xd2\x59\x29\x04\xde\x2a\x9b\xbb\xab\xe1\xd8\x54\xfa\x26\x40\x17\xda\xcd\x28\x85\x1a\x1a\x9b\x9a\xa8\xbe\x16\x6f\x8c\xf3\xfb\xca\x50\xe3\x87\x55\x13\x35\x83\x2b\x98\x72\xd8\x99\x46\x9b\x2f\x73\x41\xef\x86\x20\x82\x31\xe8\x27\xfe\xc6\x01\x5a\xc2\x70\x5c\xd1\x82\x81\x16\x96\xa0\x19\x31\xac\xd4\x84\xb1\x02\x74\x8e\xe2\x38\xd9\x79\x4d\xb2\xc2\x80\x5a\x69\x3e\xd3\x5a\xdf\xe9\x94\x0b\x73\xf7\x5e\x80\xdb\x53\x6a\x95\xf7\x3a\xbc\x9e\x0e\x6d\x5c\xaf\x00\x8b\x3e\xe4\x89\x9b\x72\x36\x40\xf7\x4c\x12\x31\x5c\x84\xd7\x70\xa3\xb2\x50\xd3\x78\x23\xc3\x85\x87\xca\x0f\xb4\x9e\x0b\xd9\x01\x92\x17\xce\x50\xa2\x44\xa2\x00\x46\x4c\x1a\x44\x33\x40\x7e\x88\x63\xfb\xc0\x50\x03\x84\x48\x08\x21\x08\x99\xb7\xce\x01\xdb\x1e\xfe\xfe\xcc\xef\x68\x85\x50\xb1\x04\xa5\xb2\xee\x1a\xba\x94\xd9\xf5\x35\x18\x6d\xf5\x27\xc7\x81\xac\xba\x92\x8f\x0f\x84\x4e\xc6\x63\xe2\x19\xb7\xfe\x4a\x42\x53\xad\x8a\xdc\x0e\x7f\xf6\xaa\xdb\x5c\x4f\xa9\x91\xa3\x58\x30\xd1\x1f\xf2\x44\x27\x5d\x64\x15\x3f\x99\xa4\x56\x0c\x64\x44\xe6\xe5\xb5\xde\xb1\xd3\xce\x50\xcd\x70\x96\xd3\xba\xe8\x90\xdc\x8b\x69\xd0\xfa\x57\x22\xb9\xe6\x14\x4c\xd8\x52\xef\xfe\x70\xb1\xab\xe0\xd5\xa1\x67\x6f\x12\xce\x09\x71\xef\x99\x8a\xe3\x67\x6a\xa4\xf2\x0d\x3f\xcf\x87\x7f\x19\x8f\xc1\xa4\x62\xcb\x93\x67\x6a\xb4\x15\x15\x95\x64\x5a\xb2\x48\xc9\x7c\x5b\xf0\x28\x7d\xae\xe2\xf8\x79\x57\xea\xe7\x2e\x75\x52\xb2\x68\x29\x76\x57\x05\x8f\xe8\x33\xc5\xee\x75\xda\x34\xa7\x5b\x51\xa5\xf2\x40\x52\x1d\x8d\x9e\x82\x22\xfa\xbc\x15\xdd\xb3\xcb\x9d\x7b\xa0\x53\x76\x33\x55\xa3\x0d\x57\xd9\xcf\xfc\x2e\x55\xa3\x85\x92\xc5\xcf\xfc\x2e\xd0\xb8\xd4\x53\xf3\x54\x8a\x6d\x1c\xff\x53\x80\xbc\xb8\x8e\xe7\x65\xab\x43\xe1\xea\x8e\x05\xf0\xbe\x92\x10\x80\x74\x4b\xb6\x3c\x81\x18\x63\x89\xb4\x9b\x13\x0b\x68\x20\xc9\xd9\x58\xaf\x40\xa3\xde\x87\x69\x77\x60\x8b\x44\x25\x39\x77\x71\x67\x63\x32\x6d\x0b\x75\x1b\x94\x87\xee\xfc\xc8\xd3\x82\x7d\x55\xc7\xb2\x5e\x90\xfb\x0a\x3d\xcd\x74\xad\x51\x10\x2f\xc2\x9a\x80\x50\xb3\x24\xf4\xe2\xfd\x5b\xee\xd4\xaa\x02\x64\xd6\x82\xe8\x88\x3c\x70\xeb\xb2\x94\x02\xc3\x9d\x50\xd4\x13\xa5\x85\xfd\x22\x83\x56\xec\x3b\x17\xfb\x8e\x9c\x4d\xc6\x71\x9c\xbc\xcd\x93\x05\xa1\xfd\x32\x8e\x5d\x77\x86\x8f\xc7\xe3\xb3\x5d\x1c\xbf\xe5\xee\x74\xa7\x15\xe0\x90\xfe\x37\x63\xd9\xf4\xc8\x06\xab\x59\x18\xb8\x0d\x92\xd7\xd1\x77\x11\x62\x28\x6d\x84\x92\x03\x21\xbd\xe3\xe3\x05\xae\xa9\x3a\xc6\xab\xa0\x8d\xf4\xb8\x72\x3a\x02\x13\xd2\x7b\x77\x6c\x64\xdf\x75\x8f\xac\x75\x64\xb5\x20\xe9\x71\x50\x06\xbf\x1a\x32\xa3\x4b\x0b\xee\x6e\xac\x57\x4d\x5a\xb0\xcc\x2c\x7c\xbb\x1e\x7b\x39\x3c\x65\x5b\x8a\x36\x4d\x76\x98\x24\x5c\xc8\xb4\x62\xbb\xf3\xe1\x64\xba\x98\xed\xe6\xa9\x31\x36\x94\x54\x12\x92\x26\x95\x49\x1d\xba\xd7\xf0\x21\x68\x45\xa8\x29\xee\xdd\xd4\xd7\x81\xde\x30\xed\x9e\xcb\x0a\x1d\x46\x4a\x16\x49\xbe\x50\x11\x28\x60\x57\x2c\xac\x85\x4a\x66\x4e\xdc\x3e\xa8\xce\xd2\x1d\x1b\x4e\xbc\x81\x80\x21\x08\xce\x68\xc2\xe2\x37\xfc\x26\xe4\xf2\x89\x4a\x24\xe9\x85\x66\x14\xd0\x88\xfd\x3e\x83\xeb\x4c\xb9\x9c\x7e\xc7\x93\x8c\x56\x74\x65\xed\xf0\x56\x68\x84\x97\xae\xdc\x65\xd6\x12\x28\x57\xc1\xd2\xb6\x6e\xcd\x13\x34\xbc\xa3\x63\x90\xdb\x67\xd4\x85\x00\x54\x04\xf9\xa2\xaa\x97\xb6\xea\xa5\xa9\x7a\x69\x60\x8f\x99\x49\x20\x49\x2f\x9f\xea\x1b\xd0\x4e\xcf\x8e\x85\x4b\xa3\x3f\xe8\xd8\x9f\x78\xb2\xb0\xf7\xd4\x59\x35\x27\x74\x47\xe8\x3d\x2e\x9e\xb4\x3f\xa1\x42\xe6\xd7\x79\x99\x46\x5f\xc3\x02\x8b\x0e\x84\xa4\x8b\x00\xff\x40\x4f\xa8\xb5\xc6\x6c\x10\xb3\xda\x9a\xf0\x55\xd9\x1b\xf4\xce\xdd\x8e\x6d\xd8\x6e\x30\x21\xfa\x68\x78\xb0\x7a\xbb\x00\x49\xfa\xab\x2e\x72\x47\x2b\xba\x13\x24\x4d\x76\x6c\x8c\xfd\x31\x96\xa8\xb3\x6a\xae\x8b\xda\x09\x9f\xc3\xa0\x96\xa3\x0b\xdc\x2d\x13\x9f\x75\xfe\xb3\x09\xd5\x13\x6f\x12\x65\x29\xe6\x60\xb0\xa1\x8b\x60\x45\xe1\xba\xd3\xb3\x8b\x5a\xb7\xce\xaa\x77\x41\xd7\xc4\xdf\xb0\xfd\x49\xe7\xb1\x3f\xf0\x12\x83\xa9\xd7\x54\x01\x97\xb0\x66\x2a\x28\xf2\xde\xbf\xb5\x81\x84\xad\xc5\x13\x51\xe0\x9a\x2e\x72\x7d\xb7\x0d\xf8\x2b\x2a\x47\x8b\x35\x15\x84\xae\x5c\xb4\x0a\xa3\x95\x89\x5e\x7a\x84\x87\x05\x5d\x11\x1a\xbc\xd3\xc2\xef\x4d\xcd\x5b\x82\x5e\xaa\xd6\x1e\xe0\xc6\xc7\x70\xb8\x0a\x00\x7a\x69\xf0\x22\x57\x4f\x4f\x4e\x37\x67\xec\xe6\x74\x63\x6f\x2e\x77\x0c\x1a\xb5\x31\xed\xb9\x66\x6b\x91\xdc\xd1\x25\x15\xa4\xb7\x64\x6c\x3b\x35\x22\x41\xbf\x53\x36\xf4\x1a\xb0\x39\xf4\x5f\x42\xd2\x3b\xbb\x0c\xaf\x35\x81\x3c\x9a\x16\x4a\xdd\x52\x41\x00\x0a\xc5\x3d\x38\xd4\x73\x20\x95\xb0\x8b\xd4\x52\xb6\x8e\xb5\x9a\xe3\xfe\x68\x2c\x4b\xea\x16\xec\xc1\xbf\xb3\xb9\xf7\x16\x15\x88\x9c\xae\x58\x45\x3f\xb0\x2b\xbb\x61\x6f\x19\x3c\x3e\xda\x7d\xd3\x67\xa5\x31\x7f\xf2\x14\x09\x35\xb7\x6b\x04\x49\x19\xde\xee\x22\x20\x23\xaa\x45\x46\x54\x8d\x8c\x6c\x79\x72\x61\x6b\xfd\x40\xce\xc7\xd3\xe4\x96\x5d\xa0\x69\xf9\x07\x76\xc7\x93\x2b\xcb\x52\xd8\x54\x9a\x36\xeb\x24\x36\x0f\xbb\xd1\x89\x80\xb3\xb8\x30\xc6\xdf\x87\x24\x67\xcd\xb1\x22\x64\xb6\x73\xf6\xe4\xd0\x94\x0f\x84\xde\xfa\xb1\xcd\xf5\xf8\xed\xe0\x7d\x69\x61\x9d\x14\xfc\x9a\xe8\xab\xc3\x69\xb2\x30\xfa\x64\xab\x91\x12\xfb\x3d\xfe\x3a\x5b\xe1\xab\x66\x1c\x07\x87\xf4\x57\x4d\x37\x1b\x1b\xc6\xf2\x38\xbe\x31\x7e\xd9\x26\xdf\x8e\x83\x21\x5f\xfa\xab\xcc\x19\x78\xd0\x9c\x0e\x1f\x8f\x53\x17\x76\x6e\x1d\x69\x4e\x1f\x8f\xd3\x71\x6f\xf9\x25\x15\x25\xa2\xe3\xc1\x68\xc0\x96\x54\xb7\x00\x9a\x00\x50\xc4\x8e\x76\x5c\xeb\x7d\xce\xbb\x98\x66\xcd\x21\x6d\xd8\xe4\xd1\x98\xc2\x31\x0b\xc2\xcb\x10\xda\xbf\xcd\x3d\xe9\x2b\x65\x44\xaf\xba\xa2\xf4\xf1\xff\x81\xd0\x6c\xb4\xce\x2b\x25\xe4\x1d\x6c\xca\x4b\x5e\xbc\x82\xd5\xca\xdc\x8d\xed\xaa\xc9\xdb\x71\x72\x0f\x6c\xff\xf4\x46\x33\xf1\xd7\x09\x87\x3e\x7c\xc0\x64\xd7\x9e\x57\xa9\x37\xfd\x03\x6d\x73\x20\xae\x75\xdd\xcc\xc9\x07\xc7\x84\x94\x74\x41\x0e\xfa\x1e\x42\x4b\x92\xfe\xa6\x2b\x07\x90\x5f\x33\xaa\x71\xfc\x16\xdc\x01\x18\xd7\xbe\xfa\x2e\xf2\x38\xad\x40\xd3\x0a\x5b\xa2\x7b\xf6\x22\x5f\x2e\x0b\xfe\x54\xdc\x96\x9e\x6f\x05\xbb\xad\xb7\x16\x82\xac\x7c\x00\x04\xb8\x83\x89\xa3\xad\x4a\xbf\x49\x6f\xa7\xdf\xe3\x75\xa9\x81\xfe\x61\x98\x37\x5e\x64\x77\x79\x79\xfd\x5d\xb1\x93\x17\x37\xbc\x04\x4f\x46\x47\xe1\x2e\x8f\xe4\x41\xe5\xcb\x63\xe5\x4d\xe8\x1b\x09\x50\xb6\x78\xad\x3b\x34\x1e\x99\x16\x81\x24\xc1\xc2\x99\xe6\xfe\x3e\x4f\xfd\xdd\xfe\x5d\xf3\x0a\xdf\x9f\x1c\xc0\x98\x09\xc9\xf8\xaa\x10\x42\x06\xf6\xc2\xd7\x3b\xa5\xb8\xac\x8e\x1d\x8e\xd6\xd7\xad\xc3\xc4\x28\x61\xce\x94\xb5\x68\xf5\x7c\xa4\x66\xf0\x3e\xe7\x42\x2f\x5f\x25\xe2\xdc\xea\x6d\xec\xf7\xfd\x52\x80\xb6\x88\x95\x6b\xfc\x0a\x05\x8b\x21\x5a\xa7\x0e\xb3\x40\xb2\xea\x44\x88\x3b\x36\x3e\xdd\x9d\xf9\xd3\xd1\xb6\xdf\x3d\x1c\xef\x2c\x30\x6d\xe6\xe2\x02\xe8\xaa\x1d\xc8\x94\x8b\x38\x2e\x1e\xee\xf1\xb9\xf5\xbb\xbe\x60\x1f\x83\xd7\xac\x15\x6b\xd5\xac\x8b\xb4\x5e\x99\x73\x78\x57\xe0\x74\x41\x57\x54\x11\x0a\xfd\x09\x67\x71\x25\x6b\xaf\xb9\x66\x52\x23\x2c\xe9\xfb\x22\x5f\x7c\x8c\x34\xdf\x0a\xbb\x77\x29\x43\xb6\x64\xdd\x10\x54\x00\x48\x85\xd4\xa4\xa4\x6f\x24\x14\x71\xdc\xaf\xa4\x57\x1f\x04\x41\x00\x2c\x74\x2a\xe2\x38\x59\xca\x60\xf3\x18\x7d\x0d\x14\x10\x00\xa3\x6c\xf1\xce\xdf\xc8\xac\xac\x56\xe0\x79\xb4\xe0\x50\x09\x38\xb4\xaa\x5d\x66\x09\xca\x7e\x4a\xf7\x2a\x6f\x24\x0b\xcf\xf2\x82\xeb\x54\x7a\x5b\x07\x41\x81\x15\xb6\xcd\x42\x33\xf6\x44\xca\xec\x0e\x20\xe1\x41\x24\x1c\x5c\x54\x4a\x83\x9d\xe8\xc6\x39\x2b\x0a\x71\xab\xef\x42\xba\xb4\x37\x77\x5b\x5e\xed\xf7\xc3\x49\x9f\x5d\x8b\xe4\xa1\x44\x14\xf1\xfe\xfd\xd3\x02\xbf\x3d\xf1\x4d\xec\x89\x91\x28\x0b\x91\x2d\x35\xf1\x53\x1d\xae\x3c\xc5\x48\xf2\x6a\x57\xc0\xb9\xfd\x68\xf6\xfe\xd3\x78\x3c\x7c\xff\x69\xfc\x5f\xef\x3f\x8d\xf9\xf0\xfd\xa7\xc9\x6a\x7e\xff\xf8\x60\x91\xc9\x41\x09\x95\x45\x11\xa1\xd9\xac\x9c\x33\x4e\x07\x83\x8a\xd9\x05\xb4\x33\x40\x20\x92\x3d\xb7\xf4\x4a\x12\xaa\x44\x2a\xad\x97\x82\x06\x92\x5e\x86\x98\x6e\xaa\x0b\x2c\x8f\x10\xc7\x2a\x23\xe6\xfd\xa1\xf7\xdc\xc2\x55\xed\x08\xfd\xad\x06\xca\xf8\x42\x26\x3b\x0b\xed\x2e\x00\x1b\xf5\x49\x65\x24\x38\x87\x03\x2d\xd8\xf8\xb4\x38\xcb\x4f\x07\x83\x82\xec\x92\x72\x56\xcc\x69\xe1\xdd\x2f\xa8\x8e\x6b\x2b\x68\x46\x36\x9d\x13\x49\x72\xee\x05\xf1\x5d\xb9\xf4\x0a\x04\xd4\xac\x23\xf4\xb2\xa9\x6d\x59\x23\xd5\x20\xb7\xcc\x57\x49\xd6\x5c\x9f\xd7\xd6\x25\xc2\x1b\x00\x01\x24\xc7\xdb\xdc\x4f\x6e\xa6\xdc\x5c\x1e\x53\x6e\x25\x37\x88\xdf\xb8\x00\xb7\x9f\x55\xcd\x67\x85\x9e\xf0\x77\xb5\x71\xd4\x3c\xe3\x02\x96\x31\x8e\xd9\xc2\x13\x9b\x82\x38\xb4\xb0\x28\xa2\x8b\x59\x61\xa1\x74\xf0\xdb\xb8\x21\x95\xd9\x35\x38\x82\x6d\x39\x90\xc8\x68\x94\x81\x10\x33\xb2\x3e\x0c\x42\x6d\xde\xfa\x78\x18\xb2\xce\xc9\xfd\x21\x24\x29\xdb\xc6\x73\x96\xae\xcc\x2a\x77\x25\x9f\xd3\xff\xe9\xca\x16\x6a\x0d\xf9\x50\x03\x88\xef\xaa\xdd\x18\x4a\x76\x54\x53\x4e\x91\xb3\xc7\x08\x4c\x11\x06\x33\x45\xe5\x7e\xff\x7b\xc2\x29\xe8\xfa\xab\x43\x58\x5b\x9b\xd7\xea\x33\x55\xeb\x45\x87\x7e\xa7\x6a\x97\xd0\x56\x13\x55\xa0\xb4\xfb\x3b\x10\x43\xcd\xeb\x80\xe0\x34\xf0\x0e\xe4\x5e\x49\x13\x39\x55\xac\xa5\x38\x98\x1e\x57\xe0\xd3\xdd\x24\x80\x39\xe4\x35\xb8\x8f\x77\x09\x75\x40\x3b\xa2\x83\x87\x14\xe8\x4f\xad\x12\xa6\xe8\x3f\xeb\x80\x22\x1d\x4a\x9f\x9f\x19\x2a\x2c\xe7\x73\x63\x05\x1a\xa6\x9a\xb5\x85\x8b\x9b\x64\x63\x7a\x8d\x33\xdf\x13\xd3\x6b\xc9\x86\xa3\x6f\xbf\x49\xa5\xfe\x9a\x7c\x9b\x16\x18\xf2\x9f\xe9\x2a\x8e\x13\xfd\x39\x79\xf4\x0d\x9e\x2c\x57\xb2\xad\xf3\xc2\x38\x2a\x1f\x3f\xe5\x85\xca\x7e\x07\x67\xbf\xfe\xf7\xbb\xd0\x0a\x1e\xd4\x3e\x34\x8b\xa4\xb2\xbc\xd0\x5f\xd9\xa7\x1c\xd0\x7e\x7e\x7c\xf5\xcb\x4f\x7f\x7f\xf5\xf2\xcd\x93\xe7\x1f\x9e\xfc\xfe\xd3\xa5\xd5\x0d\x81\x74\x81\x62\x48\x57\xd6\x5f\x2f\x7e\x79\xf3\xd3\xf7\x26\xe3\x54\xba\x6c\x69\x5d\x9d\xc4\xb7\x88\xd0\xfb\x4f\xa9\xa2\x77\xa9\x3c\x04\x10\x47\x1f\xa4\xb7\xbe\x2f\xd9\x15\x1c\xbf\xfa\x54\xfb\x04\x06\xe4\x77\xe1\x83\x29\x4a\xb7\xac\x6c\xae\x70\x4a\xa2\x30\xc5\xe7\xbb\x9a\xf2\xef\xca\xc5\xe2\x1b\x99\x8b\xf6\x26\xb3\x79\x1c\x17\x20\xc7\x5c\xe1\x4b\x65\x1c\xdf\xc4\x71\x45\x78\xea\xf1\x3b\xd5\x48\x65\xf2\x9a\x2b\xba\x66\xc8\x38\x9d\x2e\xfb\x6c\x77\xba\x64\xcb\xf0\x1d\xcc\xa6\xdf\xb2\xf1\xe9\xf6\x6c\x6d\x29\xd9\x16\x1f\x8c\xd7\xb3\x2d\x22\xbf\x32\xb6\x0c\x89\xca\x62\x27\x75\x09\xbf\xe9\xf1\x79\x03\xb5\xb0\x25\xf2\xcf\x27\xfc\x80\xcd\x03\xcf\x97\x0b\xd4\x4b\xef\xb3\x6b\x07\xe9\xa1\xdb\x1c\xc7\x1b\xaf\x0a\x5c\x57\x93\x0e\xd4\x6e\x07\xe2\xeb\x6b\x49\xeb\x43\x31\xac\x0f\x85\x3e\xff\x6e\x3e\x57\x14\x18\x95\xe4\x61\x59\xb8\xed\x6a\x83\x0e\x06\x26\xc6\x47\xd5\x8a\x18\x9e\x16\xa1\x60\xb3\x9a\xd2\x3c\x9a\x34\xe2\x98\xbb\xbe\xc1\x0a\xd8\x30\x68\xf0\x5d\x4b\xf3\xf8\x9a\xdd\x0d\xb2\xce\xc7\xd4\xde\xe6\x6c\x3c\xbd\x0b\xf5\xc5\xef\x06\x9b\xe1\xb7\x63\x92\x5e\x87\x42\x96\xc0\xe2\xf5\x7a\xb0\x19\x7c\x3b\x26\xd4\x91\xcc\x3b\x8b\xb6\x70\x7d\x20\x87\x3b\x79\xf6\x78\xec\xb4\x98\x6a\x0d\x9f\x36\xfa\x11\x8e\x0e\xcd\x6a\x96\x00\xc1\x1c\xd8\x98\xa7\xbf\xb3\xdc\x7d\xbf\x63\xe2\xd8\x65\xc7\xe9\x67\xd4\x2a\xb3\x3c\x54\x58\xe7\xb0\x96\x82\xaa\xb0\xd6\x5a\xdc\x3b\x2a\x35\x05\x70\x95\xc7\xb1\x7a\xe4\x7e\xec\xf7\xdc\x47\xfd\x1e\xc7\xdc\x45\xfd\xde\xab\xf7\x37\x6b\x19\x3b\x00\xc0\xc4\xb5\x64\xc9\xb5\xfc\xfa\x4e\x0e\x24\x79\x94\xdc\xc9\xc1\x84\xd0\xc1\xe0\x4e\x6a\x2e\x09\x9c\x77\x91\x34\x71\x45\x0e\xc2\x41\x18\x30\x41\xc2\xcb\xfe\xad\x0c\x81\x6c\x2a\xc0\x5c\x8c\x18\xd3\x3c\xa7\x58\x9d\x00\xe3\xa1\xd8\xa2\x9c\xa9\x79\x70\x7b\x6a\x3a\x53\x0d\x61\x44\xed\xcb\x58\x53\x10\x4c\x73\xd6\x9f\x00\x23\xd4\x7c\x54\x72\xf7\xc9\x6a\xb7\xdd\x4a\x5e\x55\x17\xcb\x5c\x55\x00\x9d\x51\x3f\xfd\xf1\x39\xb2\x3f\xd1\xe4\x4a\x33\x64\x7d\x96\x09\xa7\xd0\xd8\x4c\x56\xd2\x23\xc5\x4e\xbc\xd2\xde\x25\x8e\x0a\xdc\x5d\x5f\xe7\x9f\x78\x51\x75\x90\xfc\x2b\x19\x28\x2d\xaa\xd1\xa7\xaf\xd9\xb5\xa4\x6a\x74\x87\x7f\x11\x64\xee\x42\x02\x63\xbe\x10\x9e\xca\xbe\xea\x78\x34\x0f\x1d\xe3\x02\x3d\x84\x51\xdf\x96\x89\xbb\x9a\x46\x06\xb2\x34\xea\x5d\x80\x23\xaf\xe4\xdb\x31\xed\xba\x96\x63\x19\x28\xde\x69\x84\x19\x88\xad\x4e\x77\xb7\x20\x29\x51\x2c\x1f\x44\x27\xd1\x40\x19\x75\xe9\xe6\x23\x68\xd3\xf0\xd9\x95\xfe\x22\xeb\x34\x81\x5e\x23\xb3\x50\x4b\x36\x2b\xe7\xfa\x0a\x89\xd8\xe5\xc4\x0d\xb8\x53\x4e\xb5\x17\x1e\xfe\x49\xc9\xec\x67\x7e\x57\xc5\xb1\x29\xa6\x15\x43\xd1\xff\x55\x23\x1a\xeb\x81\x38\x14\xd2\x94\x76\x8e\xa2\xcd\xae\x50\x79\xc4\x98\x68\x8f\x8d\x22\xd4\x8d\x30\x24\xf8\xbb\xbe\xeb\x46\x1f\xb9\xb1\xaa\x5e\x46\x14\x07\xc1\x27\xeb\xeb\x64\xa6\xcc\x3e\x13\xfb\x7d\xf2\x36\x4f\x24\xa1\xb9\x5e\x81\x84\xea\x33\x43\xc4\xf1\xa3\xf7\xff\xfb\x2b\x73\x8f\x52\x64\x6a\x92\xf4\xc7\x24\xed\xf7\x45\x80\xab\x26\x43\xdc\x9b\x8d\xee\x51\xdf\x81\xf9\xf6\xfb\xe8\xbd\xc9\x3f\x1b\xf5\xeb\xad\x9f\xc2\x92\x8a\x2e\x75\xfc\x30\x1a\x48\x1a\x5e\xf8\xfc\x75\xfc\xd6\x4a\xfa\xf5\x64\xef\xf7\xaf\x50\x4b\xb0\x91\xb6\x73\xb3\x4f\x1f\xfd\xe3\x5a\xcc\x9e\x0c\xff\x3e\x77\x5d\x49\xd5\x68\x23\x74\x26\x52\x2b\x5d\x17\x9d\x76\x97\xdc\x4a\x87\x6c\xd8\x27\xc3\x81\x79\x2c\xb5\x0e\x51\x80\x6a\xbf\x3d\x58\xb9\x00\x3a\xc8\x3d\x9b\x4c\xe2\xf8\xf1\x7f\x6a\x66\xc8\x60\xcd\xc2\x1c\x63\x9d\x00\xbf\x5d\xb3\x16\x34\x69\x7a\xaa\x41\x1b\x26\xff\x01\xf8\x5a\x5e\xb1\xc1\x90\xac\x4b\xa3\x6b\xb0\x88\xe3\x44\x37\x78\x2a\x11\xee\xa0\xdc\xef\xff\xeb\xbf\xfa\x3a\xcb\xdf\xc4\x7e\x8f\x57\x31\xfb\xa2\xe7\xef\x62\xfb\x7d\xc7\xdd\xa8\xee\x5c\x8f\xd0\x09\x96\xf3\xe8\xfd\x55\xe8\x74\x58\x8a\xaa\x5a\x67\xb9\x7c\x6f\xdd\x84\xa9\xda\x95\xe7\x69\x7e\x33\x72\xee\x8a\xc9\x7e\xff\x80\x2d\x7a\xdb\x1d\x22\x8c\xb3\xae\x36\x18\x33\x7b\x93\xdc\xef\x93\xe7\x7a\x7c\xa3\xae\xc6\x44\x0d\xa9\xed\x47\x7e\xb7\xdb\x46\x7a\x73\xb4\x85\xb9\xe2\x86\xcb\x08\x7c\x96\x3f\x7b\xa8\xbc\x77\xdd\xe5\xb5\xc5\xaf\xb6\xbc\x43\xdd\x44\xff\x23\x76\xe6\x3f\xea\x0b\x00\x21\x84\xcd\x95\xde\x1f\x12\x0a\x75\xc8\x69\x68\x1d\xfd\xba\x63\xd5\xf5\x93\x86\xc4\x69\xbf\x77\xea\x32\x6e\x76\x61\x37\xda\x41\xbb\xd1\x23\x68\x16\x00\xb1\xdb\xd9\xb5\x08\xc4\x50\x16\x00\x19\xde\xd8\x00\x8d\xf3\x93\x63\x26\xcd\x5e\x40\x79\x02\x4a\x71\x75\x33\x16\xba\xba\xdb\x75\xbe\x58\xeb\x53\xd7\x7c\x9e\x4d\xc6\x64\xbf\xef\x9b\x95\x49\x92\x26\xb1\x36\x45\x22\x69\xf8\xdf\xd1\x40\x0e\xa2\xff\x1d\x7d\x09\x65\x38\x10\x10\x9b\x1d\x47\x76\x86\xd5\x4f\x60\x55\xd7\xcf\x12\x8f\x31\x5d\x37\xf2\xf8\x45\x3e\x28\x6c\xfe\x8c\xe0\x98\xd0\x1a\xd2\x73\x87\x33\x9c\xa4\xe5\xae\x3e\x01\x51\x65\x04\xbf\x23\xca\xbd\x5a\x87\x49\xc1\xfa\x63\xfa\x2c\x04\xcb\x34\xdc\x6c\x6d\x7d\x9a\xb4\x91\x53\x7d\xd7\xd3\x70\xd4\x07\x3c\xf3\xea\x34\x35\xc0\xca\xba\xe3\xe2\xaa\xf6\x2e\x53\x3f\xc0\xbb\x72\xc0\x94\xd0\xc7\x63\x42\x3a\x4e\xee\xc0\x0f\x4f\x42\xec\xc1\x13\x80\xe6\x3d\x3c\xec\xd0\xca\xa6\x03\x1c\x1c\xb7\xab\x62\x27\xbb\x87\x6d\x42\x9f\x7f\xf1\xb0\x11\xf4\x9f\x6c\x5d\xe4\x04\xd9\xae\x8a\xbc\xfc\xc8\xe5\xd1\x67\x8d\xf6\x7c\x76\xf0\x7a\x07\x7c\x21\x0b\x3a\xfc\xbd\x39\x45\xab\xe0\x01\x80\xaa\x1a\x59\xf4\xd2\xe9\x3e\x4a\xe7\xad\x70\xda\x4f\x64\x44\xe2\xb8\x21\xb9\x0e\x22\xa9\xae\x19\xca\x01\x62\x00\xa9\x8c\x83\xe2\x0d\x64\x0e\x17\x89\xdd\x16\x41\x01\x89\xc1\xf7\x7a\x21\xd9\xa5\xd1\x6c\xbd\x28\x97\xac\xd3\x8b\x86\xce\x33\x5d\xf3\x84\x7b\x1c\x8b\x41\x0d\x2c\x61\x38\xa1\x37\x7a\x3a\x42\x45\xc4\x41\x32\x01\x5f\xb0\x3e\xd5\x94\x5b\x08\xb5\x54\xf3\xff\x7c\xa4\x44\x70\xe9\xff\xc3\xeb\x71\x03\x04\x34\x7a\xd9\x0b\xb4\xa9\x79\xcf\x47\x29\x11\x62\x43\xbf\x90\x89\xf2\x67\x2a\x34\xaf\x06\x56\x36\x04\x93\x42\x88\x18\x2a\xdf\x07\x32\x9c\x18\x4a\xe8\xbd\x1e\x19\x1c\x67\x9b\x5c\xdf\xf9\x06\x0c\xca\x1f\x2d\xd6\x60\x5e\x38\x5a\xac\x89\x05\x5b\x0b\x30\xde\x5a\xba\xb2\xb3\x39\x75\xfc\x29\x2f\x1a\xa0\xd8\x35\x7c\x1e\x1f\x3d\x2b\xe7\x3d\x59\x7b\x49\xff\x43\x26\xb9\x43\xa4\x26\x14\x7e\x82\xb4\x53\xdf\xd1\x2d\xb7\xfa\x93\x6e\x0d\x6f\x28\xf9\x04\x30\x62\xb2\x41\x8b\x7d\x37\xf5\xdf\xa9\xd7\x9a\xe1\xd8\xc9\xc5\x7a\x20\x75\x37\x53\xaf\x3d\x93\x70\x3b\x7c\xa8\xac\xa0\x53\x06\x55\xbc\x94\x75\xd8\xc0\xfb\x45\x56\x2e\x78\x81\x60\x4e\x20\x96\xc7\x71\xa7\x4a\xa4\x7a\x10\x43\xc7\xc1\x56\xd2\xae\x46\xf8\x41\x31\x6f\xdb\x0b\x83\x29\x92\xf5\xc7\x87\x83\xb3\xd1\x02\x4b\x08\x83\x7d\xe2\x4f\x14\xab\x84\xa5\xec\xe1\xab\x2b\x07\x0c\x47\x0a\x76\xdf\x36\x58\x09\x0c\x94\x04\x5e\x3a\x93\xc0\x6c\xcb\x48\xd3\xc7\x7d\xbc\xc3\x40\x0c\x36\x90\xe5\x7a\xcf\x1b\x0a\x05\x0e\x7d\xd1\xd0\x23\x82\xd7\x57\x3d\x34\x1b\xb0\x6f\x04\x78\x82\x66\x0a\x70\x0d\x4d\x68\xe9\xba\x33\xd5\x87\x59\x8a\x6f\x17\xa5\x1b\xa4\xd2\x0d\x52\x59\x1b\xa4\xd2\xb4\x21\x38\xd5\x9e\x87\x17\x64\x40\x4b\xb8\x47\x5f\x71\x16\x04\xc9\x6e\x93\xaf\xd0\x6f\x18\x7d\x2e\x89\xc9\xd1\x33\x39\xba\xee\xa1\x26\xd7\x01\xf8\x0f\x24\x51\xb5\xae\x20\xef\xb1\x89\x63\x1d\xd7\xee\x29\x41\x69\xed\x4b\x77\xa2\x3b\x7d\xd9\x0b\x14\x62\x35\xf9\x04\x8c\xb4\x76\x1a\x7c\x94\x2b\x2e\xad\x1a\x86\x53\xe1\x4a\x9a\x7e\x09\x46\xe0\x2f\x68\x79\xb9\xcd\xca\xaa\x85\x6d\x1d\xc4\xf9\xa7\x04\xe5\xd9\xa1\x20\x7e\xa6\xe6\xf8\x53\xf6\xfa\xd2\x1d\xe9\xfb\x7d\x19\xc7\xe6\x0d\xac\xa4\x52\x77\x09\x8d\xde\xbc\xb9\xa0\xc4\x77\x9f\x7e\xd9\x69\x40\x92\xb3\x19\xce\xac\x82\x97\xa8\xc3\x9c\x0a\x36\x3e\x15\x67\xa5\x6f\x8f\x37\xed\xcd\x58\x39\x13\x73\x78\xe0\x45\x58\x4a\x42\xf1\x15\x36\xef\x78\x75\xcd\xcd\x13\x6b\x5f\x93\xc4\x42\xaf\x96\xca\x12\x4c\xf0\xb1\x62\x9c\x17\x81\xad\xfa\xf9\x98\xd8\x47\xd6\xd9\x8e\x4e\xe6\x74\xc5\xc2\x14\x68\xe6\xbe\x64\xbe\x20\x25\xc8\x69\xb2\xd2\x25\xf5\xb3\x51\x5e\x2e\x8a\x5d\x95\xdf\x70\x03\xd1\xb0\xd2\xe7\x12\x76\x1e\xfb\x56\xb8\x55\x8b\x65\x1d\x08\x4d\x96\xe7\x8d\xcc\xbf\xa0\x91\x43\x7f\xd9\xcc\x5d\xc1\x4a\x17\xa9\xae\xfa\x40\x68\x0e\x4f\x74\x0b\x6b\x1d\x9a\xd3\x05\xa1\xbb\x01\xf3\x6e\x4b\x0f\x5e\x3a\xe2\x4e\x09\x3c\x11\x40\x59\xbe\xe3\x19\x74\x38\x39\xcd\xcf\xd9\xf8\x74\x38\xcc\xc9\x33\xbd\x1e\xcd\x66\x9b\xe5\x73\xbf\xdf\xf4\x0f\xbb\xe5\xf2\xe9\x2c\x8a\xe6\xd6\xaf\xb9\xd1\x0e\x7a\x66\xee\x8b\x7e\xe3\x3d\xf3\x27\xd6\xa4\x5f\x87\xc7\xdc\xef\xa3\xc8\x06\x81\xd7\x1b\x54\x49\x0b\x5b\x6b\x97\xa1\x39\x39\x7a\x7f\xe4\x46\x1c\xa3\x37\xd3\x34\xf0\x39\x98\x2f\xd3\x97\xd9\x4b\x42\xdf\x5a\x79\xcd\x47\xe4\x1f\xac\x18\x6b\x36\xef\x7d\xc8\xeb\xfa\x27\x40\xeb\xdd\xeb\x6d\x49\xb9\x55\x61\xd1\x2b\xf8\x3b\x4d\x99\xcc\x6f\x7d\xa6\x94\x16\x10\xcf\xa6\x71\x55\xc1\x1d\xc0\xd6\x76\xa8\x49\xe5\xfe\x0c\x89\x0e\xd0\x9a\xfd\xbe\x7f\x94\x94\xd4\x0c\x5b\x7d\xe5\x02\x0f\x3f\x9a\xb1\x68\x57\x2e\x85\xbe\xe8\x4f\xf3\xd1\x52\x94\x3c\xcd\x47\x3a\xa4\xe4\xb4\xaa\xc5\x61\x60\x8a\x89\xcc\xee\xc8\xbc\x3b\xaf\x92\x65\xb3\xdd\x9c\xca\x69\xbf\x34\x27\xea\x7e\x5f\x8e\xd0\xa5\x49\x82\x6e\x6b\x52\x1b\x43\x4e\x77\x83\x01\x39\x45\xe3\x27\x5b\x06\xb6\x34\x07\x7d\x18\xa3\xe6\x93\x77\xa8\xfd\x9c\xea\x9a\xd0\x0d\x15\x31\xc5\xa1\x69\xd3\x4f\x79\x52\xd2\x0a\x0e\x98\x7e\xa3\x62\x12\xb8\x20\x3b\xf9\x01\x9c\x5c\xd0\x7b\x60\x4c\x7f\xe1\x4b\x01\xba\x6e\x3d\xc1\xca\x03\x6e\xef\xd9\xbc\xf7\x53\x9e\x08\x5d\x96\x01\x2c\xbc\x37\xe6\x47\x69\x41\xaf\x79\x69\xdc\xb7\xa6\xf9\xc8\xff\x80\xdd\xe3\x7f\xb2\x32\xf8\xb1\xdf\x0f\x06\xf9\x68\x93\x7d\xfa\xc1\x05\x19\x94\xe4\x7f\x83\xb4\x03\x79\xdb\xb1\xd2\x5a\x44\xf9\x7d\xb6\xc3\x7d\xb6\xb3\x8a\xbf\x2e\x89\xa1\x56\x2b\x7b\x84\x2a\xba\x88\xe3\x3e\x9c\x0e\x2b\xcd\xca\x86\xa3\x93\xd8\xd9\x60\x63\xd2\x2b\xb0\xf7\xdf\xeb\x15\xbe\x32\x6b\x7e\xc9\x76\x53\xd8\x36\x2b\x92\xde\x88\x24\x23\xbd\xb7\x58\xd0\x92\xfe\x52\x62\x3a\xda\xdf\xa1\xab\x5b\xe3\xf0\xb6\xa1\x43\x68\x7c\x86\xb8\xed\xff\x42\x26\x2b\x72\xb0\x2a\xad\x5d\x3b\x0a\x7d\x9e\x98\x1d\xb5\x7e\x60\x47\xad\x08\x5d\x1f\xd9\x51\x2b\xdc\x51\xb6\x8d\xb0\xa3\x82\x3d\xf5\x9d\xa7\x27\x63\xfb\xcc\x88\xa6\x7f\x4c\x21\x7b\xc7\x8c\x36\xee\x95\x48\x42\xb6\xb1\x7e\x2c\x06\x2e\x64\x50\x97\x91\x87\x2e\x49\x06\xde\x51\xa5\xe5\x64\xb9\x77\x61\x02\xb1\xc6\x5d\x09\xca\x62\x9b\x6c\x25\x90\x27\x02\x3e\xd1\x0d\xc0\x9b\x35\xdc\x84\xbf\x43\x05\x20\xc5\x81\xfd\xa4\x77\xec\x0b\x70\x25\xce\x14\xb1\x3c\xb3\x38\x77\xc0\x0d\x2b\x53\x5e\x69\x2f\x3b\x51\x48\x6e\xde\xca\x9a\xeb\x01\x9c\xd8\x07\x58\x9c\xb7\x96\xc5\xa1\xa8\x44\xec\x18\xfa\x33\xd3\x4e\x82\x83\x5d\xbf\xc4\x1c\xbb\x27\x04\xb6\x3f\x49\x10\x7e\x1e\xaa\xe9\x5a\xd5\x08\x8f\xf4\x67\x6b\x72\x3a\x64\x8d\xba\xdc\x88\x05\x35\xf5\xa0\x59\x39\xa1\xca\x68\xb3\xe0\xad\x0b\x31\xb5\x41\x9b\x05\x34\x51\x4d\x23\x07\x39\x75\x37\x12\x38\xb8\x66\x37\x16\x02\x99\xcc\x9b\x6c\xf5\xc1\x61\x8f\xf8\x46\xf7\x5c\x51\xe7\x80\xbb\x66\x2a\xf5\xbc\xfa\x9a\x27\x02\x60\x06\x1a\x00\xdc\xb6\x3e\x77\xc2\xb5\xab\x23\x54\x19\x1d\x08\x70\x09\x58\x3f\xaa\x29\xa2\x2e\x98\xb3\x0f\x17\x55\xcb\xd6\xe9\xc6\x23\x90\x87\xf6\xd2\xa0\x83\x07\x45\x65\x70\x51\xa3\x15\xeb\x4f\xe8\xce\x98\xa5\x1f\x07\x67\xdf\xb1\x27\x79\xf2\x67\x99\x20\x9e\xb8\x75\x2f\x4a\x4b\xe4\x34\x77\xc6\xdc\xbc\x8b\xc9\x64\x2c\xb7\x90\x6f\x0e\xf1\x9b\x81\xe9\xc3\x81\x10\xd2\x2b\xeb\x9a\x3a\x61\x3f\xc1\xe0\x48\x8a\x84\x93\xde\x5a\x57\xab\x57\xe4\x6b\x10\xcb\x1f\x6d\xa6\x6b\x8f\xe8\xb8\xc9\xd2\x0e\x94\xcf\x9f\x00\x78\xe4\xdc\x35\xf1\xb9\x3d\x0d\x5d\x08\xe3\xb4\x11\xcb\x94\x0f\x09\x30\x14\x2a\x94\x67\x80\x78\xc8\xa2\x9e\xd4\xb1\x32\x01\x40\xa9\x07\xf7\x94\x52\xe5\x5c\xfa\xe7\x54\x1f\x66\x07\x17\x75\x40\xfe\x32\x36\x08\x11\x45\x63\x0b\x24\x38\xe0\x43\x61\x2f\xe3\x3d\x35\x5a\xed\x8a\x62\xca\x01\x6c\x01\x83\xfb\x46\xdb\x71\xbf\x6f\xb3\x58\x4b\x87\xa8\x4f\x20\x8f\xa9\xd7\x4f\x64\x41\x52\x15\x84\x47\xc6\x91\x69\x78\xee\x59\x00\x1a\x42\x57\xb5\x10\xc4\xcc\x59\xed\xf7\x0b\x6b\x62\x82\x5b\x03\x58\xd5\xac\x76\x7d\x35\x8b\x3c\x75\xcb\xbd\xb5\x15\x7a\x2b\xfb\x8e\xb3\x70\x17\xc5\x25\xd1\x27\xa0\x1b\x64\x8f\x7d\x03\x42\xa6\x66\x60\x70\xe1\x58\x92\xc3\x43\xd2\x3f\xd0\x4a\x46\x22\xa8\x68\x49\xd2\x75\x6e\x1e\x9f\xe8\x3b\xb8\xe8\xd2\x4a\x84\x84\xf5\x47\x19\xda\x2c\x69\x06\x1a\xee\x37\x92\xd0\x2d\x87\x2b\xcf\xd9\xd8\x29\xf6\xf5\x4a\x26\xa9\x64\xe2\xd0\xf5\x0a\x0b\x4a\x22\x81\x76\x9d\xde\xd5\xcf\x3d\xb3\x2d\x81\xc9\x36\xe3\x66\x07\x28\x3f\x04\x22\x84\x5f\xe5\xc3\xd6\x53\x4f\xeb\x6e\x12\x00\xfa\x5f\x5a\xf4\x91\xca\x02\x2f\x5b\xe5\x01\x3b\x84\xee\xed\x7b\xda\x0a\x49\xbb\xb4\xce\xe9\x8e\xad\x41\x95\xae\x60\xf7\x87\x5e\x3e\x94\xe7\x3b\x80\xb7\x92\x83\x9d\x5d\x38\xa1\xde\xc0\xa0\x50\x09\xa8\xab\xca\xb3\x8c\x2e\x59\x7e\xbe\x18\x02\xe8\xbd\x3c\xab\x48\x11\x68\x4f\xad\xa6\xe3\x54\xba\x53\x24\x3f\xaf\xec\x45\x6e\x1d\x98\x83\xd0\x64\x39\x5d\xa4\x39\x19\xee\x48\x6f\xdd\x67\x7a\x0f\x86\x65\xac\x51\x60\xb7\x7d\xb8\xab\xe0\x49\xab\x1d\xd4\xee\x2c\x28\x28\x6c\xd8\x52\xf7\x56\x1f\x46\x96\x1c\xad\xf2\x4f\x7c\xf9\x03\x1c\xc1\x53\xe1\x54\x7b\x03\xd4\xdf\x74\x4c\xe8\x0d\x2b\x87\xea\x7c\xe3\xdc\xea\x02\xef\xad\x06\x1b\x42\xd5\xd9\x64\x3c\x2d\x42\x6d\xa8\x71\xaa\xce\xb6\xf5\xa0\x40\x31\x43\x0d\x93\x9b\xe9\x38\x9d\x8c\x09\x49\xcb\xf3\xcd\x60\x3b\xfc\x26\xe8\x37\xc2\xec\x0d\x6c\x92\xe1\x86\xd0\xc0\xaa\xf8\x9f\xee\x12\xe2\x14\x9a\x8c\xa2\xd1\x7e\xff\x83\x26\x22\x06\x39\x4e\x05\x1b\x2d\x28\xd7\x3b\x88\x6c\x8f\x5f\x43\x31\xad\x9d\x86\x0c\x94\x2d\x5e\xb6\x8a\xd7\xd3\xd5\x59\x3a\x2e\xc4\x9a\x1a\x4b\xda\x4a\x41\x06\xa1\xcf\x97\xdf\x40\x7a\x0e\xdd\x09\x3d\xfd\xa3\xba\x60\x42\xa8\x64\x8a\x96\x4c\x3d\xe4\x94\x44\x8d\x16\xeb\xa9\x37\x6a\xd1\x3f\x87\x13\x92\xea\x7c\xf5\x50\xb0\x18\x6b\xb6\xe7\xb5\xa8\x58\x6d\x13\x23\xd6\x5d\xea\x2b\xc4\x47\x11\x54\x6d\x7b\x01\x91\xd4\x22\xdf\xa5\xfd\x71\x40\x6d\x7e\x90\x6d\xa4\xf4\xa0\x1a\xc4\x4a\xbf\xef\x6a\x80\x33\xc5\x97\x0c\x7d\xb3\x18\xa9\x45\x69\x7f\x6a\xa6\x22\x6f\x40\x21\xa2\xff\x24\x5a\x36\xa1\x10\xc1\x77\x12\xf8\x18\xdc\x92\xa1\x32\xd8\x7d\xa1\x9d\x15\xa8\xa6\x53\x03\xce\x5f\xb3\xc0\x32\x98\x88\xa5\xc3\x44\x54\x1d\xd0\x7f\xce\x5c\x14\xf6\x58\x1e\xcc\x6c\x30\x16\xef\x3a\x10\x41\xd0\x42\x34\x54\x96\x8b\xb2\xe5\x32\x22\x34\xaa\x36\x99\x34\xee\xea\x12\x31\xda\x88\x25\x07\xd8\x9b\x52\x4d\x73\x56\x21\x76\x59\x2a\x59\xb4\x95\xfc\x26\xf2\x36\x03\x4d\xd3\xb6\x8a\x5d\xe8\x4b\xa5\x22\x74\xc7\x56\x22\x41\x51\x27\x5e\x4a\x32\xd2\xab\xf0\xee\xfe\x64\xa5\xb8\xae\x26\xfc\x69\xd4\xb3\x6e\x8c\xdf\x6e\xcc\x38\xda\x80\xa6\xec\xa3\x7f\xbc\xaf\xbe\x7e\x44\x66\x63\x84\x91\xd9\xef\x1f\xbd\xbf\x34\x8f\xc4\x98\x8e\x98\xd7\xfc\xa0\x0b\x49\xc1\x6a\xbd\x48\x72\x6a\xca\x44\xbb\xa7\x85\xe3\x33\x6d\x11\x8c\x65\x62\xbf\x2f\xce\xe1\xa9\x05\x84\x0e\x56\xe2\xd6\xb3\xfd\x3e\x1c\x8c\xe3\xf5\x31\x95\x2c\x2a\x85\x8a\x7a\x18\xc1\x98\x9c\x16\x4c\x9d\x0b\xe4\xa4\xa7\x68\xc0\x27\xa8\x1a\x4e\x48\x6d\x08\xd2\x71\x0a\x03\x8e\x19\x76\x03\x3f\x82\xd8\xcc\xb7\x65\xae\xd2\xa8\xda\x5d\x29\x99\x81\x3d\x21\x24\x1b\x76\x27\x2b\x01\xb2\xca\x1f\x92\x12\xfc\x8d\xef\x06\x52\x1f\x2e\x01\x05\x2c\xac\xdd\x56\x14\xd1\x25\x33\xae\x55\xeb\x05\xfe\x96\xab\xf5\x9b\xec\xca\x4b\x38\xd7\xa1\x91\x49\xf1\x28\x23\xa7\xeb\xd3\xe1\x70\x4d\x96\x03\x96\xd1\xd5\x80\x45\xef\xd1\xcd\xe1\xf2\xac\x88\xe3\x64\x35\x60\x1b\x91\x14\xc3\x25\x21\x74\xd5\x67\x0b\xcb\xc4\xfe\x28\x13\x41\x57\x60\xdc\x66\xfc\x74\x2b\xea\x47\xde\x3b\x64\x6e\xad\x04\xda\x1f\xc3\x1d\x6f\xcd\xc6\xa7\xeb\x33\xd1\xf1\xc0\xb1\xb6\x0f\x1c\x5b\x16\x46\xcf\xd6\xe8\xf6\xb3\xe6\x34\x33\x8e\xb7\xf6\xce\xe9\x74\xbe\xc9\xfd\xaf\xfa\xea\xb1\xa6\xe6\x1a\xbb\x64\x8d\xd6\x2d\x09\xb1\x2e\x16\x03\x40\xc0\x96\x4a\x93\xd2\xb7\x05\xab\x77\xd3\x9c\x11\x35\x15\x00\xa6\x41\x5f\x9a\x87\x81\x14\xdc\xf8\x38\xf8\xb3\x1c\x65\xf3\x49\x99\x08\x9a\x13\x2b\x4f\xb0\x37\xd5\x1c\x3c\x1a\x05\x94\xfa\xab\xd6\x1b\x90\x7b\x89\xb5\x17\xf5\x92\xcd\xe6\x14\x51\x5e\x1d\x88\x10\x80\xbd\xda\x3c\x82\xa9\x44\xce\xf2\x39\x39\xf5\x76\x1f\x5b\x9e\x08\xbc\x53\xdc\x88\xa4\x24\xe6\xf1\xeb\xd4\x41\xc2\xa1\x20\xca\xbc\x8e\x65\x98\x52\xb8\xd7\xb3\x7b\xfc\x64\x18\x61\xc7\xcc\x08\xfd\x04\x39\xfc\xdc\xb4\xc9\xf3\x52\xf4\x40\x80\xaa\xce\xd9\xf8\x54\x0d\x87\xe4\x47\x69\x98\xee\x28\xa2\xe5\x4c\x19\x09\x2a\x7c\x29\x41\xa3\xc1\x92\x17\x5c\x69\xf6\x19\xce\xad\x43\xf8\x2c\xfa\xb7\x0e\x0e\xcf\x1c\x3e\x80\x8f\xb2\xa6\x15\x93\x14\xf1\x4d\xa8\xa8\xb9\x3a\xb2\xca\xc0\xb4\x62\x49\x3e\x2d\xb2\x74\x91\x11\x7d\x65\xa3\xd2\xba\x6e\xc2\x19\xab\xf0\x16\x0e\x3c\xac\x18\x48\x62\x2f\xe1\xfb\x7d\x79\xce\xb8\x03\x52\xaa\xf2\x3f\xf9\x7e\x9f\x08\x56\xd2\xbe\x01\x54\xa1\x25\x21\x81\x02\x61\xc6\xf2\x69\x22\xcf\xc6\xd3\x32\x4b\xa5\xae\x8b\xa4\xfa\xd7\x2e\xbc\x81\xa4\x63\x24\x38\x19\xab\x7a\x0e\x93\x46\x53\xba\xc5\x3a\x93\x60\x6c\x5a\x84\x7e\xf3\x16\xa2\xd8\x6d\x4a\x13\x0e\x90\x05\x36\xe6\x56\xc8\xa5\x71\x38\x78\x2d\xc5\x6e\x0b\x69\xec\x34\x2c\x70\xc7\xad\x98\x8f\xa3\x4b\x16\x88\xb6\xae\xb9\xfa\x91\x17\x5b\x2e\x13\x45\xa1\x28\x70\x3b\x19\x11\xba\x66\xfd\xf1\x69\x5f\xf7\x82\xec\xf7\x45\xd2\x5f\x93\xd3\xb5\xbe\xe0\x99\x7d\xb9\xab\xf9\x4a\xca\xc8\x7e\x1f\xbd\x2f\x23\xba\x61\x4f\x44\xb2\xa5\x4b\x32\x8d\x6e\xa3\x74\x15\xc7\x3a\x94\xb1\xed\x34\x2a\xa3\xb4\xbf\xd2\xe4\xbd\x32\xe4\x7d\x4b\x70\x83\x44\x5b\x20\x36\x3a\x72\xbd\xdf\x6f\xf6\xfb\x64\xc3\x22\xdd\x82\x45\x1c\x2f\xfa\x6c\x43\xee\x2d\xbb\x3e\xa1\x45\xe2\x36\x6e\xbe\x4a\x36\x71\x9c\x2c\xd8\x86\x50\x79\x3e\x8e\xe3\x3e\x34\xd2\x60\xf3\xea\x46\xde\xb0\xbf\x72\x74\x6d\x25\x68\x46\xa8\xa2\x55\xa0\x8e\x76\x02\xce\x83\x6f\xc8\x7e\x9f\xdc\x8c\xd6\xb9\xba\xb4\xee\xcc\x6e\x02\x24\xcb\x63\x87\x2c\xac\xb8\xc2\x80\x15\x3b\x8f\x8f\xd6\x65\x58\xa8\x23\xdc\xe9\x95\xcb\xc0\x67\xff\xfb\x98\xb9\x3d\xe3\x73\x71\x20\xbf\x4e\xaa\x21\xac\xb4\xc9\xe8\xdb\x74\xf4\x2d\xf9\xba\x76\xd1\x41\xc3\x5b\xe7\xf7\x12\xef\x22\xe7\xe3\xa9\x43\xef\xfd\x26\x45\xb8\xdc\x6f\xbc\x4b\x2d\xb4\x86\xfa\xc3\xb8\x3d\x33\x8e\xcd\xac\xc3\x37\x1c\x5d\xbc\xa3\x8c\xa7\xf9\x19\x1b\xa7\xf9\x39\x13\x16\x05\xfe\x7e\x17\x0c\xa5\x9d\xa7\x01\xfb\xf6\x6b\x87\x78\xb5\x3b\x5c\x86\xce\x97\x17\xa2\xac\x94\xdc\x2d\x94\x90\xe9\xa5\x71\xbb\x13\x10\x93\x06\x1a\x8e\xf1\xa5\xde\x65\x77\x43\x2b\xae\x5e\xc1\xa9\xd7\x70\x35\x7d\xe3\xfd\x7e\x9b\x53\x91\x96\x4c\xce\xf8\xbc\xa7\xff\x83\xf3\x23\xd2\xac\x44\xd4\x67\x7a\x53\x43\xa0\xa2\x7f\x97\xa3\x75\x56\xbd\xba\x2d\x5f\x4b\xb1\xe5\x52\xdd\x81\xf9\x98\xf1\x1e\x4f\xff\xae\x53\xa1\xf7\x78\xb8\x1c\x93\x03\xbd\xee\xa8\xbe\xee\xe8\xd9\xd4\x3e\xe3\x73\x48\xfd\x54\x2c\x8e\xb9\x84\x5e\x8a\xc5\x81\x66\xcb\xe5\xcf\xa0\x03\xda\x74\x9d\x0d\x80\xa2\x35\x5d\x54\x35\x8d\x34\x39\x8e\xd2\x68\x57\x82\x5e\x49\x34\x4f\x6e\x4a\xd0\xa2\x31\xe2\x85\x56\x49\x21\x9d\x6e\x97\xd8\xf4\x6a\x33\x18\x48\x70\xc1\x3a\x93\x73\xa6\x47\x09\x5c\x09\x95\xd9\x86\x33\xc6\x03\xa3\x32\x78\x79\x4b\x24\x9d\x10\xda\x1f\x43\x0f\x5e\xdd\x70\x59\x64\x77\xe9\xdf\x42\xc5\x98\x60\x5a\xf8\x48\x89\x8f\xbc\x9c\xf2\xf4\x52\x13\xa2\x17\x62\x69\xbc\x68\xdb\xa9\x42\xd5\x31\x89\x8e\x07\x2e\x75\x1b\x89\x5a\x4b\x71\x0b\xf2\xe9\x0b\x29\x85\x4c\x22\x53\x49\x75\xb2\xc9\xee\x4e\x4a\xa1\x4e\xae\xf8\x09\x74\x67\xb5\x2b\x46\x11\xe9\x05\xfd\x13\x26\xa9\x79\x13\xd1\xf3\x9e\x4a\xaa\xff\x5c\x6e\xf9\x22\xe5\x54\x6c\xb3\x7f\xee\x78\xaa\xd0\x53\x8a\xfe\x3e\x58\x0c\x57\x28\x40\x27\xfd\x81\x97\x83\x01\xd5\x04\x13\x90\x6f\x09\x31\x83\xdc\xdd\xd9\x23\x23\x6d\x5b\xd2\x35\xd4\xd6\xdf\xb9\x1e\x65\xdb\x36\x38\xa4\x60\xf0\x5b\xe2\x13\x1e\xc7\xe5\xc3\xb3\xd1\xd9\x01\x78\x49\x72\xbd\xd0\xdd\x40\x6e\x11\x7c\x66\x35\x27\x4c\xdf\x92\x6d\xc5\xfd\x40\x6e\x63\x99\xa2\x7e\x5d\x96\x63\x2e\xd4\xd3\x70\x2e\x47\xc0\xc1\xff\x84\xd7\x0e\xc3\xce\xa7\xc8\x61\xa7\x6a\x0a\x8c\x73\xc0\x1c\x13\xfa\x8c\x3b\xc5\x47\xb0\x9b\x7d\x27\x8d\xba\x23\xb4\xc6\xb7\xd7\xe9\xa2\x7e\x6e\xe0\x1b\xcc\x94\x64\xa0\xc0\xf3\x30\x90\xdf\x2a\xc9\x9d\x7b\xfb\xdc\xb3\x9d\xe7\x9a\x1b\xb7\x0d\x0a\xc2\x8d\x9d\xae\x64\x61\x58\xc9\xea\xf5\xbb\xd7\x90\x38\xfe\xcd\x0c\xbf\xb1\xe8\x44\xa6\x26\xb7\xe0\x0f\x19\xcb\x11\xe2\xa1\x0a\x1c\xc1\x58\xf1\x68\x2f\x10\x9e\x22\xa2\xb1\xc7\xfc\x30\xa2\xd1\x24\xd3\x37\xf7\x71\x3a\x21\x64\x30\x09\x4c\xb3\xab\xd3\xdd\x99\x04\x6d\x00\xdb\x85\x1d\xe5\x4e\xca\xda\x1e\xaa\xde\x98\x01\x96\x27\x80\x0c\x3a\x98\x38\xcb\x5f\x16\xb3\x72\x6e\x5a\x3c\x5a\xac\xf5\x41\xfc\x6b\x30\x73\xa5\x65\xc1\x05\x85\x84\xe0\x98\x1f\xa5\x88\x7a\x0a\xaf\xb9\x7a\xa3\x29\xc0\x13\x95\x76\x69\xb7\x9d\xfc\xb5\x74\x93\x8e\x44\x56\xf7\x10\x72\x54\x0f\x67\x58\xf3\x84\x13\xa3\x0c\xea\x6a\x79\x73\xb7\xe5\xb5\x9a\xc8\x3d\x07\x7b\x5f\xbf\xce\x50\x48\x42\x25\x53\x39\x16\x74\x91\x07\xd1\xd6\xd5\x6f\xc9\xc6\x34\x67\x89\xf4\x00\x94\x8f\x1e\x03\x6f\x80\xfe\x64\xf5\x78\x11\xc5\xe4\xec\xf1\x1c\xd9\xb4\xf0\x6c\xcd\x58\x39\xc8\xcf\xcf\xc1\x77\x69\x92\x4d\xe5\xec\xf1\xd7\xd9\x70\x32\x4f\xc7\xe4\x9c\x09\x92\xb3\xcc\x59\xf7\xf6\x13\x88\x1c\x4c\xe6\x67\x82\x90\x7b\x28\xf0\xeb\x6c\xf0\x78\x6e\x4e\xd6\x92\x65\x83\x09\x3e\xcc\x54\x7a\xb3\x21\x94\xed\xab\x15\x40\x12\x1a\x02\x73\x12\x91\x74\x38\xb1\x3c\x4f\x75\x36\x9e\xaa\x74\xcc\x58\x85\xac\x97\x72\xa0\x2a\xd5\x70\x82\x03\xa5\x69\x70\x63\x8c\x1a\x7b\x48\x93\x10\x6f\x2f\x02\xdc\x8b\xce\x34\xbd\xf4\xdf\x89\x41\xd6\xf6\xd3\x9b\x70\x82\x14\x88\x40\xfe\x54\x41\x65\xc8\x79\x76\xcf\xa4\x2d\x00\xd3\xa0\xef\xe2\xd9\x78\x1e\xe4\x6b\x2e\x01\xab\x39\x07\x2c\x4b\x55\x36\x4f\x70\x67\x84\x72\x22\x8d\xee\x43\xa5\x2f\x1e\x34\x67\xb6\x2a\xec\xbb\xd1\x57\x6e\xd1\xd9\x7c\xa6\xe6\xa4\x9c\xe9\x3f\xf3\x38\xb6\x8a\x76\xf8\xdb\xb3\xe3\x90\xca\xdf\xc7\xc6\xa7\xe2\x4c\x07\x59\x0a\x23\x2c\x85\xc9\x18\x66\x9d\x89\xf9\xbc\x97\xb9\xf2\x32\x8b\xba\x3c\x5a\x43\x1f\x11\x01\xb3\x9c\x85\xbf\xe7\x53\x5f\x79\x18\x4c\x52\x1d\xa0\x4f\x82\x5a\xfb\x30\x04\x19\x3c\xab\x3f\xf4\xe1\xba\x10\x57\x59\xd1\x6a\x55\xc5\x5c\xdc\x4c\xcc\x7b\xd5\x68\x2b\xf9\x32\xc9\x61\x36\x49\x1c\x1b\xdc\x5e\x49\xab\xd1\x4d\x56\x10\x57\x0b\xfe\xf4\xa8\xa6\x7a\x8e\x2e\xdd\xa5\xff\x38\x47\xb6\x14\x0b\xb7\x34\x0d\x6f\x95\x70\xf6\x12\xd4\x23\x51\xfe\x39\x95\xe6\xda\x25\x8d\x43\xdf\x94\x6b\x6a\x06\xe4\x00\x05\x87\xdf\x0b\x21\x97\xdd\x4b\xa1\x45\x76\x01\xd2\xcc\xd6\xf8\xc6\xd4\xe8\x6b\xd2\x34\x3b\x8d\xc4\xd5\x1f\x08\xf7\x64\xcf\xd7\x69\x9d\x44\xa4\xd0\x28\x20\x78\xa9\x44\x02\xad\xf6\x7b\xbc\x05\xe8\x56\x81\x9a\x79\x47\x9b\x4c\xb5\xbf\x98\x6a\xeb\x85\xd6\x8b\x80\xec\xfa\x22\xd6\x5d\xc4\x1f\x7e\xac\x5e\x2b\x47\x20\x5d\x01\x88\xad\x49\x39\x48\x28\x0f\x80\x70\xfb\xc4\x3a\xea\xec\x2c\xcf\x17\x83\xbe\xdd\x28\xb8\xba\x18\x1f\x82\x32\x41\xe6\xf9\x31\xa4\x85\x83\x1a\x37\x1e\xb8\x74\x3e\x50\xbc\x0d\x3c\x41\x56\xa2\x63\x62\xc0\xa9\x37\xec\xb1\xa6\x4c\x85\xbb\xe3\xd7\x4e\x1d\xce\xbe\x9f\x49\xf4\xfb\xcc\xcf\xea\x09\xa6\xbc\x91\x23\xe5\xe7\x60\x3b\xc6\x72\xf4\x47\x4e\x25\xab\x51\x72\xb3\xcd\x24\x73\xa4\xec\xa3\x19\x02\x89\x83\x30\x3e\x32\x08\x83\xa4\x9c\xba\xaa\xb0\xa3\xc3\xd7\x79\x22\x49\xaa\x4f\x9a\x25\x5f\x65\xbb\x42\x79\x24\xdd\x0e\x1e\xff\xa9\x4a\xc2\xa1\xf3\xb9\x1c\x22\x6f\x47\xa6\x97\xad\x4c\x15\x57\xf8\xce\x82\x8e\x3e\x3a\x59\x36\x93\xf9\x67\x19\xf4\xdc\x69\x48\xb4\x5f\x83\x4b\xc6\xcd\x93\x8d\x71\x1e\x02\xaf\x89\xb5\x10\x76\x7f\xf0\xde\xd0\x67\x6a\xce\x24\xed\xcb\x38\xfe\x28\x92\x12\x4d\x1d\xeb\xa9\x0d\xa6\xf8\xf8\x80\xea\x20\xa0\xb0\x84\xad\x6e\x71\x6b\x37\x0d\x78\x57\xcd\x3c\x30\xb3\xfb\x7b\x12\x9f\xb5\x7d\x06\xdd\xb9\x7a\x5d\x9a\x18\xd5\x02\x66\x9a\x0c\x26\xed\x40\x83\x65\x2c\x13\x15\xaa\x8b\xd0\x8f\xa2\x99\x96\xb4\xb3\x1b\xe8\x76\x3a\x18\x94\xa6\x4b\x7a\x77\xfd\x54\xae\x44\xda\x78\xf6\xef\x5a\xda\xfa\x5c\xaa\xb3\xb5\x2d\xac\x60\xc5\x38\xea\x65\xf2\xc6\x7a\xad\x25\x3d\x58\x16\x01\x69\x57\xa2\xd8\x13\x00\x8a\xad\xa5\xb1\xbe\xe0\xf5\x26\x54\x14\xed\xfd\x52\x8e\x8f\xa8\xdc\xc0\xbc\x85\x7d\x4b\x1b\x93\x07\x29\xbf\x2f\xb2\xaa\x32\xc9\xe1\x9b\x5e\x5d\xdb\x30\xf3\x45\x6f\x65\xb6\xb5\x61\xee\x9b\xde\xe6\xcb\x6b\xae\x20\x0c\xbf\x0e\x70\x2c\xfc\x9a\xf3\xdb\xad\x90\x1d\x1b\xc3\x68\x8f\x34\xa9\xca\x33\xab\xf8\xdd\x8c\x78\x23\x0e\x70\xc9\xfc\x0d\x8a\x3f\x8e\xa2\x49\x33\x0a\x58\x99\x74\x41\x57\x2c\x2c\x85\x2e\x59\xc2\xd9\x9b\x4e\x7a\x4c\x88\x7d\xac\x59\x33\xee\x44\x3d\xca\x38\x13\xb4\xfe\x87\x58\x64\xfd\x0f\x81\xcf\xd0\x87\xd1\xa9\x29\x82\x48\x77\x8a\x31\x2a\xae\xde\x96\x7c\x99\xab\xec\xaa\xe0\xe0\x30\xdd\x78\x66\x0a\xdd\x07\x29\x42\x23\x30\x1c\x63\xac\x24\x4b\xb8\x3c\x6f\xbd\x18\x30\xbb\x12\x37\xdc\xc8\x01\x4b\x6e\x44\x88\x46\x58\xe7\xae\x0f\xab\x6e\x49\x54\x83\xa0\x79\x9c\x41\xc8\x82\x2d\xa9\x61\x21\x04\x48\x25\xa1\xb9\xfe\x69\xad\x19\xdc\x4a\x99\xea\x3e\xb9\xcf\xb7\x20\x0c\x57\x62\x7b\x5e\x8f\x98\x9a\x3e\x0d\xeb\xc1\xe9\x91\x72\xce\xd8\x36\x8e\x13\x9d\xc7\xbc\xa6\xd1\xb5\x4b\x81\x00\x0e\x9b\x38\x4e\xd6\x6c\x33\xac\x85\x92\x83\x9d\x45\x25\xb6\x6c\xe9\x1c\xbe\x42\x50\x01\x00\x1c\xe6\x07\xbc\xdf\xb1\x28\xa2\x11\x7c\x45\x8c\xe5\xd3\x64\xcd\x3a\x06\xa4\x5e\x03\x6d\x14\x30\xde\x7e\x8a\x48\x9a\x44\xba\x70\x28\x64\xcd\xc6\x69\xb4\x01\xc0\xb4\x08\xed\x03\xd6\xac\x6b\x9c\x1b\x0d\x7f\xf4\x98\xd4\x1b\x8a\x7e\x6d\xd1\x20\x41\x20\xe9\xcc\xd8\x9a\x56\x6c\x49\x77\xac\x31\x18\xb4\x60\xcb\xc6\x00\x9a\x07\xe8\x64\xc1\x7e\x95\x89\xdb\x26\x84\x84\x6e\xd7\x36\x3a\x66\xd1\xf4\xce\xd7\x67\x2d\xe7\x98\x3e\x15\x7a\xc7\x3b\x50\x25\xf3\xeb\x6b\x2e\x5f\x95\x3f\xf3\xbb\xa7\xe2\x16\xee\xe7\x4f\x24\xa9\x85\x83\x99\x9d\x8e\x78\xdd\x88\x78\xbb\x4d\x3f\x4a\xca\x3f\xf1\xc5\xf7\x62\xb3\xc9\xca\x65\x93\xbe\x2e\x5a\xfc\xbd\xa7\xa6\x8b\x72\xc6\x43\x2f\xd1\x28\xe2\xb0\xe5\x5f\x14\x7c\xa1\x64\xbe\x68\x9d\x40\x17\xdc\x19\x54\x12\x42\x57\x79\xb9\x7c\x2d\xaa\x1f\x5b\x84\xc5\xb2\x28\x93\x9e\x02\xb9\x74\xce\x86\x13\xaa\xd8\x30\xd0\x5c\x14\x6c\x4c\xb3\xc6\xcd\xf2\x54\x9c\x01\xdc\x40\xc6\xfe\x16\x1c\xc7\x19\xcd\xa1\x4c\x62\x05\xa7\xa0\xd3\x7f\xea\x5c\xcb\xd1\x8d\xb8\xe1\x3f\x1e\x15\xa0\x81\x8d\xa7\x34\x08\xb4\x1e\x1f\xe9\xbb\xbb\x20\x79\xe9\xf8\x00\xd9\xc4\xae\x95\xb0\xe9\x31\x37\xe8\x3a\xa3\xa8\x63\xfa\x37\x99\x48\x3c\x81\xd1\x5c\x08\x7a\xee\x4d\x16\x55\xf1\x42\xdc\xf0\x5f\xf3\x6a\x97\x15\xc5\x1d\x49\xf9\xd9\x78\x5a\x5a\x96\xb8\x04\x96\xf8\x40\x68\x21\x60\x1c\xf1\x49\xe7\xe1\x2e\x38\x04\xef\x32\xb8\x17\x8c\x2a\xb1\xe1\x6a\x9d\x97\xd7\xd8\x31\xbe\x4c\xc8\xb4\x7c\xc0\x04\xd9\xbd\x1e\xa5\x5f\x19\xb9\x46\x8d\x5f\xc0\x59\xfb\x9b\x4c\x4a\x2a\x7d\xb7\xfa\x13\xc7\xcf\xe8\x6e\xe0\x21\x94\x83\xbd\x05\x24\x3a\x18\xe3\x1a\x93\x45\x89\x34\x3f\x98\xa3\xdf\xac\x90\x5f\x8f\xaf\x10\x2a\x58\x79\x7c\x95\x64\x6c\x4c\xab\xe6\x2a\xc9\xce\xd4\xe9\x60\x90\x59\x39\xbc\x3d\x9d\x2a\x0a\x5e\xf0\x82\xc7\x2a\x31\x15\x6c\x07\x74\x20\xc5\x3f\x4c\xd0\xa4\x62\xbf\x3b\x91\x4e\x4e\xa5\x5f\x56\x75\x97\x85\x15\xae\xab\x5f\x1f\x9c\x94\x60\x32\xac\x43\xa9\x7e\x63\x05\xa1\x9e\x3a\x2c\x9f\x38\x46\x45\xc6\x8e\x49\x83\x36\x3f\xbc\x46\x33\x04\xcc\x21\xc1\x4c\x64\x76\x41\x65\xb0\xa0\x8c\xa2\xd6\x1b\x95\x48\x9a\x59\xc8\x2e\x18\x11\x0b\x6d\x72\x2d\xb2\xe2\x7b\x78\x25\x03\xf5\x03\x18\x92\x30\x94\x58\xbf\x56\xc6\x59\x25\x02\xc8\xeb\x01\x93\x14\x25\x4c\xf6\xa5\xd7\x3c\xe8\xa8\x38\xce\x18\x2b\xeb\xb7\xc7\x38\xfe\xa7\x34\xd7\x53\xfa\x8b\x6e\xcc\xce\xb4\x03\x4e\x2e\x74\x90\x49\x77\xb8\xfc\xa9\x35\xbd\x09\x8c\x74\xc6\xa7\xd9\x59\xd9\xf1\xe4\x9d\x0d\x06\x24\x0c\x9f\x65\xf3\xa0\xed\x2c\x9f\x65\x73\xbb\xe6\x10\x78\xb6\x43\x44\xd3\x21\xab\x32\x4a\x86\x20\x9a\xb2\xe6\x8a\xa8\x27\x13\xdc\xb3\xfc\x1b\x20\xaf\xbd\x01\x9e\x26\xdc\x00\xd6\xef\xf7\x25\x18\xfc\x61\x6f\xe2\x58\x4e\x87\x43\x99\x0e\x06\x65\x40\xf2\xdc\x63\xa0\x24\x34\x63\x4f\x04\x3c\x7b\x4f\x3b\x9e\x43\x9e\x08\xd0\x52\x3e\xa4\xfe\x2d\x50\x74\x25\xf4\xd1\x9c\x1c\x3a\xde\x55\xfa\x61\x82\x38\xee\xeb\x72\xc9\xe1\x14\x1e\x03\xb3\xc4\x37\x67\x38\x21\xe4\x94\x0c\x87\xc6\xa1\x9b\x97\xf7\xd6\x92\x95\x3a\x91\xe6\xeb\x3b\x34\xe0\xd1\x8c\xcc\xa8\xbb\xa3\x50\x17\x4e\x38\x71\x7d\x5d\x80\xdc\xff\x56\xe6\x8a\xd7\x9a\x68\xb4\xeb\xe2\x98\xb3\xa6\xdc\x1f\x12\xef\xf7\x49\xd2\x15\xce\xfa\x5d\xa1\x64\xfa\x4c\xd4\x2e\x80\x46\x6b\xea\x69\x7e\x53\xb3\x5a\x76\x19\x22\x92\x3e\xff\x57\x73\xd0\xdf\x8d\xcc\x33\x72\x81\x6f\xa0\x87\x11\xc5\xa7\xae\xae\x86\xe9\xeb\xbe\x71\x40\x7d\xf4\x3d\xab\xc6\xea\x5e\x73\xf5\x2c\xe7\xc5\x32\x21\xe8\xde\xfa\x40\x3d\x5c\x4e\xbb\x84\x7e\xd2\xaf\x3d\x22\x78\x73\xf9\xbe\x3b\x38\x16\x59\xa9\x2e\x96\xb9\xd2\x97\x62\xc3\xa7\x74\x10\x36\x23\xe6\xb1\x4a\x7e\x0a\x94\xfc\x80\x33\xa0\x6e\xae\x02\x6f\x89\xa1\xaa\x5f\x4d\x15\xb0\x95\x04\xf1\xed\x8c\x34\xfb\xd2\x58\x8a\x84\x17\x42\x0b\xb4\x54\x1b\x0c\xab\x4f\xd9\xb3\xd7\x34\x54\x14\x0c\x34\xbf\x9a\x6e\xf6\xd7\x96\x1b\xae\x41\x6f\xad\x8c\x07\xc6\x61\xad\x74\xe7\xbb\x94\xa2\x87\xd2\x9a\x5b\xf9\xe3\x79\x90\x53\x0c\xaf\x06\xe9\xda\xa4\xa5\x01\x5f\x9a\x2e\x9d\xdb\x47\x5a\x37\x8d\xe9\x18\x77\x77\x60\xf1\x69\xc2\x59\x78\xc9\x6b\x0a\xe6\xdc\x09\x0b\xd7\x57\x1a\x7a\x17\xac\xad\x81\xb6\xc2\x20\x21\x6d\x85\x29\x3e\xe5\x81\x15\x84\xb1\x7f\x80\x92\x53\xab\x5b\xb9\x02\x27\x7b\xae\x55\xdc\xa5\x20\x20\x3c\x03\xe9\x87\x12\x26\x21\x3a\xcc\x97\x60\x7e\xb4\xdf\x8f\xed\xa2\x09\xcc\x2f\xdc\x7a\xea\x58\x22\xaf\x45\xc5\xb8\x7f\xe5\x91\x9a\xe5\x86\x4d\x15\x28\x0b\x60\x49\x56\x74\xd7\x54\x3b\x34\xf1\x4a\x6c\x31\x1a\xd4\x0f\x79\x4b\xfd\xd0\x24\x93\xc6\x41\xb7\x12\x2d\x35\x44\x93\xc2\x5c\x6f\x21\x89\x55\x47\xe4\x4e\x1d\x11\xf7\xba\xd5\x48\xac\x69\xfd\xca\x9a\x46\x22\x01\xf8\x83\xcb\xfc\xcf\xf6\xa3\x61\x8d\x49\x75\x4a\x15\x01\x01\x6f\xcf\xd9\x7e\xff\xe8\x1f\xef\x97\x03\x8b\x35\x84\xe8\x1d\x9a\xb3\x9f\x72\xb8\xeb\xa4\xfc\xe0\x37\xab\x6c\xa9\x57\xe0\xdd\x08\x96\x3c\x83\x07\xf0\x60\xdf\x1e\x4b\x8d\xdb\x8a\x01\x48\x55\xc0\xe4\x86\x6a\xb0\x71\xfc\xca\xfa\x46\xc5\x53\x53\xb6\x24\x14\x3d\x64\xa5\x41\x4a\x95\x53\xd9\x10\x54\x74\x58\x1e\x1b\xa1\x48\xcb\xea\xd8\x84\x5b\xb6\x40\x21\xe4\x9f\x0b\x9f\xa9\xf9\xa8\x14\x3f\xe2\xe2\x27\xf7\x4a\xf3\x22\x39\x8d\x30\x36\xb2\xba\x31\x83\x41\x0e\xef\xd2\x0e\x6f\x48\x2e\xf8\x5b\xb4\x72\xef\x8f\x35\x99\x97\x34\x92\x7c\x25\x79\xb5\x8e\xa8\x7b\xc6\xd6\xf7\xa8\xec\x98\x0e\xc3\xcf\xca\x5d\x8e\xa8\xc9\x5a\x9f\xf0\x4e\x2a\xd7\x74\x2c\xd6\xe3\x1d\x7b\xa4\xd1\xbc\x4b\x15\x26\x71\x6b\xd0\xd3\x8c\x80\x44\xd6\xc3\xe0\x7e\xfa\x87\xc9\x6d\xa9\xce\x7e\xef\x71\x41\x87\x4d\xd9\x2b\x39\x1f\x7d\x4b\xe2\xf8\x17\x93\xc7\x1d\x80\xed\xc1\xa9\x6e\xb3\xed\x53\xd1\xbe\x34\xd6\x1f\xc7\xfc\xbb\xd8\x62\x83\x72\xc6\xdb\xdc\x8e\x5b\xa3\x63\xdd\xc8\x2a\xf5\x3e\xd7\xce\x83\xd0\xdb\x7e\x6b\xf8\x70\x41\xe8\xe1\xfb\xbb\xed\x83\x69\xb1\x3d\xbc\x09\x55\xe6\x8c\xfa\x49\xd7\x08\x67\xf0\xbf\x7a\x62\x83\x04\xef\x37\xdc\x3e\x46\x31\xe9\x73\x45\x98\xcd\x76\xf0\x87\xe3\x17\x67\xb5\x47\x24\xe4\x45\xa9\xf1\x17\xe6\x34\x76\x07\x87\x03\xcd\x45\x72\x89\xbb\xf6\xaf\x92\x5d\x8e\x8c\xa4\xbd\x62\xf7\x07\xfa\x77\x1d\x80\xdb\x1d\xd1\xd1\x40\xba\xed\x09\x15\x0f\xee\x73\x3e\x27\xea\x07\xc9\x38\x4e\x40\x0b\x88\x35\x9c\x6c\x95\xe4\xbe\xec\x33\x55\xc6\xb1\x31\x82\x26\x87\x54\xa2\xe9\x85\x2a\xd9\xe5\xe8\xa7\x32\x57\xec\x5e\x09\xa4\x6c\xed\x7e\x04\xac\x19\xa4\x8d\x0e\x87\x1e\x2f\x93\xe8\x26\x2b\x76\x3c\xa2\x51\xd4\x34\x2b\x05\xe7\x7b\x00\x0d\x06\xfe\x16\x40\xff\x40\x67\x00\x9d\x26\xbc\xa6\xb4\x72\xd8\x57\x5c\xd4\x58\x62\x8a\x3e\x01\x65\x4b\x97\xd7\xeb\x21\x47\xf4\x31\x7d\xd2\x08\xb7\xea\xc4\x00\x22\x03\xe1\x81\x66\x47\xe4\x12\x1b\xad\xf1\x88\xfe\xa5\x4e\xfd\x3e\x26\xb8\x15\x38\xa1\x5c\xd6\xeb\xad\xc1\x68\x77\x37\x1e\x68\x61\x00\xb9\xcd\x54\xf8\xf2\x4b\xcb\xd0\xe7\x65\x8f\x7b\x9a\xdc\xa9\x18\x92\xb3\xb1\x7d\x95\x17\x16\x6c\xc6\xbe\xa1\x2b\xa3\xfb\x36\x9c\x30\x26\xac\xda\x1b\x13\x03\x67\x4b\x67\x9e\x3e\xd7\x3c\x29\xa9\x20\xe4\x50\x0e\x06\x07\x42\x02\xec\x06\xd9\x00\x10\xc8\x43\xfd\x57\x45\xe5\x2c\x9f\x03\x12\xcc\x2c\x9f\x9b\x0b\x86\xfe\x5a\xac\x5d\x15\x06\x14\x1c\x46\x78\xcb\x17\x79\x56\xe0\xbd\x8c\x3e\x9a\xbd\xdf\x8d\xc7\xe3\xf1\x50\xff\x99\xac\xf4\xff\xff\x09\xff\x67\xcb\xf7\xbb\xc7\xe3\xf1\xd5\x10\xfe\xac\xf4\xff\x8f\xff\x0b\xfe\xff\xef\xf7\xbb\x15\x5f\xad\xe6\x8f\xae\x69\xeb\x95\xc8\x01\x49\x06\x95\x80\xad\xf0\x2f\xfc\xfa\xe2\xd3\x36\x51\xa3\x4a\xec\xe4\x82\x83\x6f\x7d\x7d\x2c\x47\xef\x55\x44\xa6\x51\x94\x46\x7b\xfd\x45\xa3\xeb\x88\x50\xd9\x37\xcb\x3b\x8e\xf9\xc8\xd0\xcf\x84\x74\x74\xe0\x75\x91\x2d\xf8\x5a\x14\xcb\xce\x37\x28\x05\x1e\xff\xab\x6d\x56\x82\xcb\xff\xff\x2b\xa2\x20\x49\x2f\x6f\xb2\x22\x5f\x82\x6a\x6c\x00\x56\xa9\x72\x55\x70\x16\xbd\x7f\xbf\x8b\x06\x1e\x93\xec\x89\x4a\xc6\xfa\x3a\x6e\xb8\x87\xc9\x7f\x90\x96\x70\x3e\x93\x79\x36\x2c\xb2\x2b\x5e\x44\xd4\x14\x03\xf4\xb1\xde\x9e\x5a\x3f\xdc\x2a\xe5\x46\x7e\x68\x26\xc3\x6f\x8e\xed\x4e\x5d\x6a\x96\x22\xa2\x9b\x69\x64\xdc\x41\x5a\x99\x7e\x94\x82\xfd\x60\x26\x79\x16\xd5\xf4\xa5\x5b\xea\x6c\xbe\x9c\x93\x45\x56\x82\x42\x5b\x72\xc7\x15\x39\xb9\xe2\x27\x68\xd2\xb7\x3c\xc9\xcb\x93\xec\x44\xee\xca\x32\x2f\xaf\x4f\x74\x15\x42\x46\x61\x13\x1b\x12\xba\x88\xf6\xaf\x31\xe2\x76\x2d\x0a\xf0\x88\x8d\xc7\xed\x77\x60\x98\x1f\xec\xd9\x35\xdf\x68\x2a\x63\x88\x5d\x63\x7a\xde\xe8\x3d\xfb\x7d\x7d\xcb\xa2\xc6\xe0\x91\x2c\xa1\x21\xee\x4d\x89\x38\xcc\xc1\x32\xb9\x29\x13\x49\x7a\x79\x1c\xe7\x00\xf4\xbc\x58\xfb\x2f\xd0\xa8\xa6\xe5\x28\x53\x18\x6e\xbf\x12\x4e\xf3\xfd\x1e\x51\xce\xcd\xca\x72\x40\x9a\x48\x30\x3c\x25\xb1\xdc\x9b\xa6\x53\xcd\x79\xed\xe2\xf2\xa6\xc9\x67\xb1\xd4\x74\x58\x54\x83\xe7\x06\x91\x3d\x32\x92\x9b\xbc\x44\x7f\xaa\x51\xd4\x4c\x81\xe1\xd0\xbc\x34\xf9\x2c\xf4\x98\xa9\xe5\x29\x30\xb0\xbf\x38\x42\x69\x88\xe6\x11\xb0\xb1\xb7\x38\x2f\xe0\x95\xc4\x4f\x8f\x39\x08\x23\x3a\x9b\xd7\x87\xe0\xa5\xb7\x12\x69\xcd\x69\x60\xc3\xa7\x97\x46\xc7\xf9\xd1\xf0\x4a\x12\xbe\x9d\x4c\xdf\x05\xfa\xc7\xc8\xb3\x47\x63\x3d\x20\x5d\x5b\x69\x21\x6e\xb8\x79\x0f\x7e\xc9\x3f\xa9\x37\xe2\xd2\xc2\x9d\xb7\x27\xed\x6d\xbd\x91\x0e\x18\xdd\x6c\xb9\xa8\xcc\x54\x7e\xc3\x1b\x4b\xf6\x3b\x3d\x62\x6f\xbb\x60\xd9\xdb\xf0\xf3\xbc\xc9\x49\x7e\x01\x0a\x7b\xd3\xd4\xaf\x79\x9a\x19\xc7\xf3\xed\xde\x3c\x3c\xfe\x12\x55\xf9\x30\x77\x44\x27\xf4\xfb\x8e\x52\x9f\x09\xb9\xc9\x3a\x5e\xf2\xad\x0c\xf5\x40\x82\x6c\xd5\x5a\xdc\xa2\x4d\xdd\x6f\x6b\x5e\x5e\x5a\xd7\x41\xd0\x30\xae\x3c\xe1\xd0\x6c\xa8\x93\xd1\xbe\x2a\xeb\x98\x71\x41\x13\x7e\xcb\x2b\xfe\xbd\xd8\xde\x7d\xbf\x0b\x8e\x7c\x2b\x9c\x69\x76\x57\xaf\x1a\x8f\x7e\xc8\x98\x9a\x26\x80\xea\xd7\x02\x03\xbc\x2a\x76\x32\xa9\xb9\x36\xc8\x2b\x4d\x3d\x97\xac\x0f\x4e\x4a\xdb\xc1\x93\x0e\x40\x41\x6c\x84\x31\x4c\x37\x5e\xa8\x74\xf3\x4c\x2e\x60\x7f\xbb\x9a\xa8\xda\xa0\x77\x86\x2d\x0f\x26\xc7\xba\x7c\x6c\xef\x0c\x0b\x67\xa3\xfa\xac\x9f\xa0\xcf\x61\xa4\x74\x24\x00\x23\x08\x5c\x36\x3c\x33\x79\x2b\x9a\xeb\x6d\x93\xa7\x7f\xcb\x7b\x79\x87\x6f\x00\x74\x4d\x01\x1a\xd0\x11\x2d\x51\x15\x9a\xd0\xe3\x29\xf5\xa9\xa3\xb9\xa7\x11\x7c\x3c\x94\x12\x51\x48\x4b\x90\xe6\x3d\x94\xae\xe0\x99\xde\x59\xe5\x08\x3e\x8e\xa7\xd4\xa3\x52\x8e\xf4\x5f\xe0\x5c\x80\x71\x6d\xbb\x7c\x09\xe9\x34\x2e\x89\xef\x8a\xbc\xfc\xf8\x4b\xa6\x78\x44\xbf\xfd\x66\x1c\xc6\x84\x42\x9e\x88\xd6\xa2\xf0\x42\xa9\x37\x47\xb0\x7e\xd1\x75\xdb\xf7\x41\x82\xd7\x5c\xea\xad\x04\xd3\x15\x24\xbc\x15\xf2\xa3\x26\xa3\x11\x50\x4c\x17\xf4\x94\x17\xd9\x5d\x10\xb6\x2a\xf4\x0e\x2b\x01\xe4\x0b\x8a\xf8\xe8\x4a\xc8\x96\xcb\x17\x62\xc9\x41\xd9\x01\x56\x93\x8f\xda\xa2\x44\x0c\xf0\x22\x83\xc2\x76\xe5\x52\x3c\xe5\x5b\xb5\x8e\xe8\xe3\x71\x17\x59\x15\x0b\xe7\x2c\xcc\xa5\x65\xca\x2e\x5f\x13\x05\xa8\x97\xb6\x9d\x8f\xbf\x35\x65\xdf\x18\xb5\x0a\x3b\x54\x93\xf1\x97\xb0\x32\x9b\xec\xd3\x8f\xf9\xf5\xba\xd0\x03\x85\xd0\x0e\x11\x9d\xf0\xbf\x04\x5d\xd9\x88\x1b\xdc\x30\x9a\xeb\xc7\x71\xed\x3a\x13\x8e\x6d\x9d\xd7\x46\x51\xc2\x33\x82\x2a\xbb\x02\x16\xfb\xe8\xdd\xe4\xc8\xd5\x73\xa4\xb2\x2b\xd0\x9a\x66\x6a\xbf\x8f\x22\x5b\x5c\xb6\x53\xc2\xe0\xa3\x7a\x23\x53\xa9\x6f\x5a\xfa\x82\x03\xf7\xbc\x12\x7e\xe5\x1b\xfe\xc2\x84\xf4\xe0\x36\x97\x97\x10\xc0\xea\x0d\xf0\x17\x3d\x28\x60\xbf\x8f\x74\xb1\x11\xc8\x11\x92\x46\x24\xe3\x84\x66\xf2\x1a\xcc\x74\xac\xc0\xe6\xfc\x31\x80\x5c\x2f\xf9\x96\xeb\xfb\xd0\x22\xe7\x15\x7a\x51\xf2\x56\x2f\xa8\x73\x8b\xcf\xd3\x2e\x3b\x7d\x4c\x08\x95\x25\xdc\x2e\x0f\xd4\x35\xf0\xa7\x17\x17\x8d\x06\x96\x3e\x8d\xe4\x95\x28\x6e\x9a\xbd\xe8\x06\xbf\xe6\x71\x5c\x76\xbd\x98\x73\x06\x05\x3a\x35\x12\x1e\xc7\xed\xbc\xa0\x41\xda\x59\x00\xc4\x10\xcb\xb9\xeb\xa2\x50\xdb\xb4\x77\x04\xe4\xe1\x5e\xc7\x82\x43\x99\x84\xb3\x5b\x03\x7d\x8d\xc6\x0b\x0a\xfe\x78\x37\xad\x1d\x3d\x78\xf4\x8f\xd9\xfb\xdb\xf7\xc3\xf9\xe0\xfd\x23\xfb\x31\xf8\xb4\x29\xbe\x72\x8f\x40\xf6\xfd\xb0\x36\x36\x49\x94\x6d\xb7\x45\xbe\x00\xd1\xd6\xa3\x4f\x9b\xc2\xdd\x20\xda\x75\x4c\xb1\x81\xfc\x90\xf2\xfd\x1e\xbf\x71\x01\x1c\xf4\x80\x1b\x15\xe1\xc6\x8c\x28\x56\xaf\xce\x81\x89\xca\x72\xa6\xcc\x70\x80\x1b\x79\xdf\x3a\x6b\xeb\x62\x50\x45\x1e\x6d\x8b\x2c\x2f\x23\x0b\xc9\x66\x20\xdd\xf2\x55\x22\xda\x4a\xcc\xe1\x88\xe7\x4c\xf8\x2a\xdc\x43\x9c\xbe\x1d\xe4\x24\x6f\xe6\x14\x04\xc0\x2e\x3b\x43\x67\xd1\x87\x68\x20\xe6\x80\x20\x48\xa8\xfe\x9f\xe5\xfa\xf3\x00\x2f\xb7\xc1\xf4\x50\x55\xd3\x4b\xd6\xe5\xb9\x9f\x2c\x8c\xd3\x57\x2e\xbd\x47\x74\x45\x5e\xc8\x09\x6d\x0b\x23\xa0\xaa\x20\x60\x26\x9c\x9b\xb6\x32\xd8\x06\x30\x8b\x30\x0f\xb5\xbb\x93\x79\x3a\x01\x1b\xa2\xa6\x47\xc0\x8f\xf9\xf6\x8d\xb8\x28\x97\x89\xb1\x34\x08\xb7\x54\x12\x8e\x3a\xc5\x82\x71\xf0\x85\xa5\x1c\x17\x9f\x14\x2f\x2b\x7d\x3a\x23\xc1\xc0\xd7\xeb\x8e\xd9\xbf\xd0\x8b\xb8\x3d\x4f\x9c\x4c\x85\xde\x58\x29\xfc\xcf\xee\x0f\xc4\x77\xc7\x95\xdd\xa2\x3d\x8e\x46\x34\xe8\xc0\x53\xb1\x38\x96\xe9\x2e\x3f\x9a\xcb\x88\x77\x38\x62\xb5\x65\x80\xf5\x67\xe3\x34\x5f\xf2\xa3\x10\x1f\x6b\x84\x23\xb3\x60\x7e\x04\xdd\x3e\x54\x7a\x34\x70\x4e\xcd\x30\x48\x7e\x9d\x57\x8a\x4b\x7c\x2e\x6e\xb9\x56\x68\x2b\xdd\x73\xb2\xdf\x27\x15\x8c\xc1\x25\x0c\x84\xd1\x2e\x4f\x67\xf3\x03\xa1\x10\x01\x5a\xa4\x48\xcf\xb0\xf0\x1f\x20\x45\x67\x15\x28\x8b\xab\xb7\xc2\x22\xd4\x40\x61\x4e\xb3\x1d\x2d\xbc\xb6\x92\x2f\x53\x49\x6f\xb2\x22\x2d\x0f\xa6\x57\x3b\xdd\xab\x85\xd8\xde\x81\x86\x3a\x6b\xc9\x97\xfa\x63\xc6\x98\x72\x96\x54\x06\xe5\xd4\xa6\x77\x2a\x0a\x3e\xc8\xef\xf8\xfb\x83\xdb\x86\x25\x2c\xf5\xba\x35\xd1\x49\x5e\x56\x2a\x2b\x17\x9a\xd4\xc0\xa1\x00\x7a\x21\xb9\x73\xf8\x3c\xd7\x67\xc0\xac\x9c\xb3\x3c\x50\xa5\x2f\x74\x73\xbd\xfd\x5b\x6b\xcc\xcd\x3b\x29\x0f\xd2\x00\xf4\xbf\xfb\x95\x80\xbd\x54\x2f\x30\xcf\x68\xf4\x19\x5e\xc5\xb9\x8f\x3e\xf5\xe6\x79\x81\x45\x07\x5a\x82\xca\xfd\x5e\xe2\xe1\xc7\xac\x31\xa8\x62\x12\x05\x48\x94\x33\x8c\x73\xad\xdf\xef\xd1\xc6\x8e\x53\x48\x90\xaa\x03\x4e\xc1\x02\xa7\x00\x14\xbb\x2a\x76\x8f\x9e\x4c\x9f\x14\x45\x73\x13\x07\x77\x91\xc4\x63\x99\x19\x2b\xa7\xb1\x7d\x8f\xf7\x28\x6a\x60\x58\x44\x91\x09\xf4\x76\x61\x0f\x14\x1a\x82\xa1\x44\x88\x6b\x07\xf7\xfb\x20\x74\xcd\xb3\x65\x64\x4a\xfe\x98\x17\x45\x43\xa9\x9d\xdc\x83\xe1\x7e\xd3\xfb\x84\x72\x66\x63\x66\x2c\x2f\x1c\xdc\x94\x37\x0d\xab\x81\xa2\x79\xa9\x96\x41\x33\x00\xac\x8b\x20\xf5\x59\xd8\xd5\xa9\xc5\x5a\xb3\x6f\xa6\x00\xc5\xe2\x91\xf8\x26\x74\x4c\xac\xea\xd2\xb1\x44\x7a\x59\x1c\x6a\xba\xb7\xd6\xf2\xcc\xe0\x2c\x27\xc0\xc6\x1f\x8c\x0a\xd7\x17\x74\x3c\x2c\x6c\x6d\x01\x4b\x13\xe2\xbc\x21\x2b\x91\x3e\xb7\x4e\xff\x0d\x14\x9d\x89\x45\xcf\xc8\xae\x3a\xc4\x1a\x5b\xa9\x87\xea\xe3\xad\xfa\x78\x47\x7d\x36\xcc\x15\x8d\xcf\x17\xcb\x2f\xa9\x21\xb0\x53\xf5\x56\x1d\x66\x04\x03\xad\x9f\xc1\xb7\xbd\xb0\x21\x9a\x32\x58\xfb\x8d\x04\xdf\xf5\xc7\xf0\x98\x2f\x0f\x26\x13\x8e\xef\xf1\x76\xfd\xd2\x30\xd5\xf8\xf7\x1b\x86\x2a\x3f\xcd\xe6\xb4\xbc\x69\x84\x8a\xa2\x83\xc9\xb8\xd1\xdc\xde\xb1\x35\x52\x62\xe3\xf5\x5d\xa5\xb1\xc9\x74\x50\x02\x2f\x85\xad\x28\x1d\x94\x98\x5c\xc7\xf6\x68\x2d\xce\x96\x73\x2c\x71\x2d\x0e\xde\xa8\xc4\x53\xb1\x00\x97\x52\x8d\x94\x0d\x15\xb4\x2e\x92\x62\xb3\x5f\x34\x34\x4e\x8f\x64\x0e\x11\x1c\x75\x4e\xfd\xfd\x05\x35\xd7\x95\xdf\xbc\x21\x4e\x9e\x25\xbc\x46\x20\x0e\x81\x7b\xf3\x81\x71\xe7\x9c\x67\x55\x3a\x39\xd4\xab\xbb\xdc\xfc\xdb\x75\x0a\x5f\xe7\x97\x54\xf7\xd9\x81\x39\x56\x4f\xb7\x1d\x90\x27\x8b\x06\x81\x40\xb2\xe7\x65\x52\x92\x53\x82\xc6\x1f\xe5\x32\x99\xe8\xcb\xa8\x41\x99\xf2\x48\x4e\x39\xfb\x25\x4f\x4a\x42\x05\xcb\xa7\xf9\x6c\x3c\x1f\x15\xfc\x86\x17\xff\xeb\xf1\x54\x66\x49\x49\xd2\x12\xff\xef\x22\xb0\x6b\xeb\x01\x44\x4d\x9f\xe8\x22\x52\x45\x05\x3a\x43\xf8\x82\x81\x1f\x06\x43\xd1\xde\xa6\x9f\x1f\x8c\x7f\x89\x9e\x9c\xfc\xcf\xf7\xae\xd1\xc3\x35\x2d\x6e\x11\xbc\xff\x1f\x1a\xfc\xd9\x06\xfd\x3b\x6b\xf7\x7f\x42\xfd\xba\xa9\xdb\x49\x39\x5a\xac\xcf\xe0\xe4\x87\x0d\x5d\x9a\x13\xba\xe2\x99\x5c\xac\x93\x47\xef\x2f\x1f\x91\x69\xb8\x57\x34\x43\x19\x76\xe5\xed\xb6\xd1\x07\xd0\xb0\x4d\x86\x13\x8a\xf8\x1b\x2e\x21\xe8\xc2\x77\x25\xad\xa5\x7c\x9d\x5d\x3f\x54\xa4\x35\x15\xc4\x84\x0f\x15\xe9\x53\xea\x31\xe8\x58\x01\xa0\x61\x0e\x85\xe2\xf3\x9a\x4d\xda\xb5\xbc\x31\x6d\x3d\x29\x28\xa8\x3e\x5c\x2e\x62\xd7\x04\xc9\x1f\x2e\x3b\x48\xfe\x9b\x90\xcb\x07\xcb\x06\xf4\x1b\x48\xfa\x83\x14\xbb\xed\x83\x05\x23\x04\x8e\x4f\xfc\x60\xc1\x41\x62\xdd\x88\x07\x0b\xb6\x8d\x58\x72\x78\xe1\xc4\x67\xb5\x46\x62\xa3\x07\x5f\x1b\x68\x93\xbe\x69\x25\x1b\x26\xaf\xa7\xd6\x2d\xf9\x6c\xe9\x41\x6b\x40\x55\xf8\xe1\xd2\x83\xd4\x30\x28\x9f\x2d\xde\x0d\x8c\xcd\xf1\x99\x0a\x5c\x7a\x54\x1f\x78\xb2\x53\x4d\x96\xa0\x01\xe4\x60\xc1\xde\x5c\x96\x17\xed\x06\xb5\xb2\x00\xd2\x9d\xcd\xf0\x9c\x57\xd5\x67\xeb\x70\x50\x13\x3a\x57\xc5\xa5\x7a\x93\x5d\xb5\x58\x8b\xa6\xad\xc1\xfb\x20\xfd\xa5\x58\xb5\xf2\x78\x75\xae\xd9\x9c\xa2\x3f\x99\xba\xe3\x6a\xa0\x49\x4d\x64\xbd\x2e\x4c\x2f\xd4\x4a\x90\xd6\xcd\x00\xe0\x41\xac\x44\xe2\x29\x94\xc3\xc9\x05\xd5\x6e\xd2\x53\x78\xe7\xdd\x88\xa4\x1c\x66\xff\xab\x24\xe4\xd0\xee\x40\x95\xa8\xc0\x4a\xb5\xd5\xdf\x2e\x8b\x8b\x63\x63\x9d\x6a\x2a\xed\xcc\x73\x92\xc8\x8d\x61\x04\xa6\x36\x59\x59\x6d\x45\xc5\xe1\x91\xbc\x56\xcb\x03\x88\x61\x1d\xa3\x15\x78\xc2\x39\x86\xd2\x81\x74\x5f\x78\x56\x22\x0f\x2e\x57\x20\x45\x23\x80\xe3\xa1\x6f\x54\xc2\xa3\xfd\xe7\xa0\xe2\xb0\xe6\x09\x26\xa7\x39\xe2\x5a\x12\xf8\x38\x1f\x93\xae\xf8\xc1\x84\x50\x37\xa8\xbf\x64\xe5\xb5\x9e\x05\xa3\x3f\x6e\xf2\x0f\xea\x01\x8f\xe1\x92\x1a\x56\xf1\x98\xd0\x9c\x46\x03\x37\x42\x51\x80\x1d\x60\x81\xc1\x9d\x0a\x8b\xc5\x0a\x68\xf4\xcd\x22\x0f\xf6\x32\x54\xb6\xe8\x6a\xcf\x98\x0c\x78\x97\x73\xfa\x41\xe6\x40\xbb\x3c\x7c\x85\x6f\xe4\x70\x42\x3b\xc3\xe9\x84\xd4\x5b\x7d\xa8\xbb\x1a\xca\x69\x0e\x2b\x2e\xbc\x5e\x57\x09\x00\xb5\x1c\x68\xc9\x6f\xc1\x0a\xbd\x5c\xa2\x96\xd0\xbf\xbf\x20\x9c\xf6\x0d\xc2\xe6\x9c\x4a\xbb\x16\xca\x8e\xc4\x33\x39\xef\x35\x86\xa7\x73\x48\x68\x69\x9d\x24\x19\x7b\x27\x0f\x5e\x68\x57\xbf\xe1\x09\x82\xfb\xe5\x60\x42\x0d\x98\x21\x39\x38\xb4\x3a\x2a\xb6\xbc\x6c\x5d\x94\x3b\x09\x49\x19\xd1\x08\x1f\xf5\x3e\x63\x49\xc0\x47\x8d\x58\x7d\x69\xa4\xab\x92\x5d\x1a\xbc\xa6\x9a\xd6\xda\xb2\x4e\x86\xd0\x12\x16\x7d\x65\x6c\x8b\x5c\x25\x8f\x86\xc9\xb4\xff\x15\x79\xa4\xc9\x49\xc2\x99\x98\x09\x37\xdb\x73\x3a\x26\xa7\xd9\x99\x0f\x00\xa3\x14\x83\x0b\x21\x66\x19\x88\xb1\x1f\xfd\x23\x59\x6c\x96\xfb\x0d\x57\xd9\x7e\x43\xbe\x7a\x94\x1b\xac\x4e\x42\x72\xd6\x1f\xbb\xa5\xfc\xe8\x1f\x59\x52\x28\x32\x0d\x13\xa8\x7a\x82\x64\xb1\x5f\x28\x59\xec\x17\xa2\x54\x52\x14\xb5\xb2\xa4\x4d\x0a\x02\xb9\x47\xff\xa8\x92\x75\xbe\x52\xb5\x24\x2d\xc5\x99\xb7\xa5\xe4\x0b\x71\x5d\xe6\x7f\xf2\xe5\xc9\x46\x2c\xf3\x55\xce\xe5\x09\xc8\xf0\x4f\xa2\x41\x45\x7a\x25\xf8\x7e\xb2\x62\x16\x50\xfc\x8e\x9e\x14\x6a\x18\x0d\xb8\x71\xc5\xcb\xa2\xef\x95\x2c\x30\x20\x37\x01\x9b\x25\xfe\x2e\xf1\xb7\x75\x4f\xca\x09\xe5\x87\x55\x39\xba\xca\xaa\x7c\xc1\xee\x81\x95\x88\x3c\x8f\x15\x51\x64\x18\xa2\x80\x97\x8a\xe8\xdb\xad\x0e\x40\x6e\x31\xa2\xc0\xb5\x45\x9e\x29\x8c\xa8\xbe\x5c\x45\xee\x9e\x15\xd1\x1f\xc5\x86\xdb\x00\x7f\xcf\x8b\xa8\x61\x0e\x23\xcb\x26\x62\x88\x2d\xcf\x7e\x47\xf4\x29\x9c\xc2\x69\x14\xf2\x19\x11\xfd\x2e\x5b\x7c\xac\xb6\xd9\xc2\x47\x58\x3d\x20\xd3\x3b\x97\x20\x6a\xa5\xd0\x67\x46\xe4\xcf\x0f\x97\x45\x7f\xa7\x91\x3f\xe1\x75\x5f\x34\x57\x10\x35\xb7\x7e\x44\x7f\x82\x83\x22\x8d\x1a\xab\x3a\xa2\x17\xd5\x22\x8d\x1a\xc2\xbb\x48\xaf\xf4\xd1\x76\xf1\x14\xab\x64\xf7\x38\x43\x4f\xa2\x34\x72\x52\xc3\x88\x62\xe0\x53\x6c\xae\x11\x55\xd9\xd0\xbf\x03\x2e\xda\x52\xb8\xa6\xba\x50\xc9\x21\x14\x7e\xbf\x6b\xfc\xd6\x23\x1f\xe9\xc1\xb4\xa2\x04\x1b\xa1\xe7\xc5\x84\xc3\x14\x61\xe8\xdb\x6d\x14\xce\xac\x69\x8f\x9e\x83\xfa\x04\x63\x04\x2c\x10\x1d\xe1\xb8\x50\x1b\x83\xeb\xc4\x45\x99\x65\x03\xab\xd4\x65\x72\x8b\xc1\x44\xf8\x3c\x6e\xdd\x60\x61\x8d\x69\x0c\xb8\x3b\xd7\x42\x34\x98\xf4\xd1\x66\x85\x60\xec\xa5\x1e\x64\x78\xf9\xc7\xdf\xcf\xa2\x34\xd2\x37\x72\xfb\xfb\x07\xf3\xfb\x25\xff\xa4\xea\xa3\x6b\x63\x5e\x4b\x7e\x53\x8f\x79\x06\xe3\x0c\xc4\xb0\x1e\xf1\x8b\x8f\x08\xa6\x74\xe6\x16\x95\x66\xe9\x6c\xe8\xdc\x85\xbe\x08\x3a\xf3\xd6\x4c\xb4\x5f\x3b\xb5\x0a\xde\x9a\x19\x0e\xa3\xf5\xf0\x75\x84\xaf\xb2\xa2\xd0\xe4\x65\x77\xbd\x4e\x23\xd8\xe0\xb8\x0c\xf9\x26\x5b\x54\x77\x76\x0d\x3e\x8b\x1a\xbb\xdb\x8c\x7a\x54\xa7\x03\x18\xfa\xba\x63\x7d\xbc\x6c\x2e\x0e\xdd\x1c\x2c\xd5\xdd\x38\x4c\xe8\x77\x2e\x34\x2c\xf4\x49\x6b\x3d\xe0\x12\xed\x5a\x0c\xbf\x46\x75\xd2\x10\x0e\x8d\x8f\x0b\x16\x6f\xd4\x24\x1b\x66\x63\xb4\x69\x02\xb4\xd0\xa4\x77\x17\x0e\xdb\xf0\xfa\x1a\xf4\xf7\x17\x5b\xde\xcf\x51\x1a\x59\xb1\xba\x0d\x7b\x13\xa5\x51\x9d\x83\xb4\x31\xaf\xa2\x34\xb2\x47\x2c\xce\xc9\x26\x0b\x69\xc3\x66\xd9\x26\x0d\x9b\x65\x07\x65\xd8\x2c\x3b\x08\x83\x09\xb4\x74\x60\xb3\xac\x91\x85\xcd\xb2\x9b\x2a\x6c\x96\x76\xfb\x37\x42\xdb\xa4\x42\x37\xc5\x12\x05\x17\x5a\xdb\xdc\x21\x45\xa8\x6f\xee\x1a\x41\xd0\x25\xd5\x08\x82\x5d\x16\x9b\x65\x83\x1e\xd4\x56\xd1\x67\x09\xc2\xb1\x54\xe1\x94\x1e\x27\x1a\x9b\x65\x8d\x66\x6c\x96\x35\x92\xb1\x59\x1e\xa1\x18\x41\x84\x21\x18\x30\x8f\x66\x33\xb4\xa8\x45\x3b\xce\x4f\x74\x9b\x5e\x6c\x96\x1d\xe4\x62\xb3\x6c\x2d\xcc\xfa\xab\x80\x9d\xac\xa0\xab\x4d\xf9\xbc\x9d\xfa\xe3\x54\xc7\xc4\x36\x89\x4e\x78\x60\x34\x4f\x97\xd6\xea\x08\x49\xd1\xcc\xd0\x22\x1a\x21\x21\x8a\xe6\xb0\x03\xcc\x69\xcc\x6e\xa6\xb5\xed\x90\x86\xe7\x26\xbd\x1c\x95\x42\x6e\xb2\x22\xff\xd3\x80\x81\xb2\xb6\xe2\x75\xf0\x7a\x29\x4f\xf2\xf2\x84\xa3\xe5\x51\xe3\x45\x57\x7a\x75\x36\xcd\x5f\x23\x2b\xa7\xb9\xac\x7d\xd0\xd6\x7d\xb2\xe4\xfb\x4c\x11\x95\x2d\xd6\xc4\xea\x67\x48\x42\x34\xaf\x97\x97\x3b\xc0\xb8\x89\x46\xa3\x11\x82\x94\xe0\xd6\x3c\x81\xf2\x6c\x8a\x83\x57\xa4\xbf\x02\x03\x34\xe0\x5e\xa3\x93\x88\xd0\x25\x88\x7d\x01\x59\xad\x0d\xab\x46\xab\x9e\x60\x2c\x77\x3c\xec\x34\xa9\x58\x3e\xfa\x43\xe4\x25\x66\xce\x58\x49\x52\x08\xb3\xd0\x77\x62\x30\x21\xb5\x04\xd0\x30\x6b\x1e\xae\x66\x15\x74\x72\x07\xcf\x7a\xbb\x3e\xcb\xda\x9c\xe7\x4f\xe5\x42\x94\x55\x5e\x29\x5e\xaa\x93\xab\xbc\x5c\xe6\xe5\x75\x75\xb2\x12\x12\xf8\x4e\x54\x69\xd1\xe5\xb0\xec\x10\x74\xd5\xf5\xb0\xc0\xa7\x62\x3e\x2b\xe6\x4c\xcd\x0a\xa7\x01\xc1\xf1\xb1\x74\xad\x39\xfd\x42\x88\x8f\xbb\xed\xcf\xfc\xae\xe3\x41\x1c\x47\x29\x51\xa8\x63\x4d\x40\xb3\x68\xaa\x50\xc1\x88\xd3\x92\xa4\x6a\x66\x54\x50\x26\x8c\xb1\x9c\x58\xe3\x3b\x01\x57\xfd\x28\x98\x0b\x1f\xb9\xd9\x15\x2a\x8f\x2c\xda\x40\x9f\xe5\x71\x2c\x93\xdc\x2a\xd8\x44\x88\x26\xb4\x8c\x10\x14\x27\x98\x78\xd4\x3e\x9a\x21\x86\x1a\x3e\x72\xcf\xa3\x3e\x7b\x05\xbf\x03\x1d\x28\xab\x9d\x8f\xad\xac\x17\x61\x9f\xd8\xd7\x25\xba\x6a\xf0\x51\xe8\x91\xab\x8e\xae\x57\x4b\xd0\x01\xb3\xd7\x2e\x65\x26\xe6\xce\xb5\x57\x46\x1c\xd4\xc6\xe1\x40\xb7\x7a\xa8\xf3\xea\x85\xb9\x3c\xd4\x87\xdb\x6e\x93\x0e\xad\x21\x9e\xfe\x5d\xcc\x9c\x83\x74\x3b\x81\xb0\xa5\x23\x30\x35\xd6\x84\xd3\x7c\x01\x71\x30\xdf\x2f\xc4\x52\x7f\x1d\xe8\xc6\xdc\xe6\x5e\x66\x9b\x0e\x8d\x84\x45\x1c\x7f\xf3\x17\x56\x77\x70\xaf\xef\xf0\x1e\x70\x1c\xe5\xe1\xb5\x46\xd0\x92\xc9\x5e\x80\x07\xd5\x67\xa5\x75\xf2\xfe\x83\xcc\xb6\x6b\x70\xfa\x9e\x58\xa7\xef\x71\x0c\x4d\x44\x77\x24\xa5\xbd\x17\x95\x84\x26\x1f\xa6\xce\x17\x7c\xea\xdc\xc5\x93\x38\xc6\xde\xb9\x0c\xe6\xe2\x64\x73\x98\x74\xa9\xf7\x23\xaf\x73\x6c\x96\x41\x06\xb8\x58\x95\x84\xf6\xc1\x62\x04\xf0\x24\xb0\x21\x38\x42\x2e\xa1\xbd\x71\x95\x84\x96\x24\xb8\xe9\xde\x84\x96\xa4\xed\x39\x59\x81\xfa\x0d\x3f\x5c\xc2\xa5\xfd\x0d\xff\xa4\x9e\x48\x9e\xb5\x07\x37\x51\x4c\x4d\x2f\x44\xa2\x48\x7a\x7f\x20\x23\x30\xb4\x62\x1c\xff\xd2\xbe\x1a\x59\x85\x45\xc0\x2c\x32\x3a\x88\xa0\xe3\x67\x23\x98\x0f\xd7\x9d\x19\x6d\xbd\x7d\x8b\xce\x53\xfb\x99\xd4\xa2\x59\x2d\xd6\xfa\x0d\x50\x23\xa7\xd4\x68\x1f\x3a\x9e\x0a\xf0\xb6\xe6\xc2\x99\x04\x85\x44\x6b\x82\x7c\x5d\xb7\x6d\x71\x2a\x91\x04\x1c\xf3\x3b\x48\xf1\x2b\xb1\xbc\x3b\x04\x76\xb8\xe4\xde\x74\x93\x01\x04\x04\x1a\x91\x81\xce\x17\x1f\xad\x84\xdc\xc4\x71\xf2\x2e\x37\xdf\x34\xaa\x76\x57\x9b\x5c\x45\x14\x66\x0c\x35\x81\x2f\x21\xe8\x05\x57\x6b\xb1\x7c\x52\x88\xd2\xeb\xa5\x99\x4c\x42\x93\x59\x48\xd4\x53\xf2\xce\x6c\x48\x1b\xc4\x02\x91\x4f\x99\x80\xef\x56\x0c\x17\xee\x33\x0c\xcd\x0e\x87\x05\x78\x0c\x79\x27\xc8\xfd\xe1\xa0\x46\xab\xbc\xcc\xab\x35\x18\xd4\x85\x4f\x43\x6a\xa4\xf9\x0f\x56\x52\xd0\x1e\x6d\xcf\x7b\xa0\x20\x0f\x8e\x5f\xba\x52\xd4\xc2\xf3\xea\x65\xf6\x92\x96\xa0\x97\xbe\xcd\x24\x2f\xd5\x4b\xb1\xe4\xc6\x5d\x97\x41\xe6\x1a\xb5\xec\x22\x13\xf4\x7e\x08\x96\x11\xe6\xc5\x0e\x0d\x43\xcc\xc8\xfe\xad\x73\x64\x23\xdb\x88\x50\xfb\x52\xa7\x32\xa3\x80\x5e\x1d\xfd\x6f\x26\x08\x39\x1c\xda\x15\x95\xa2\xe4\x91\x81\x4c\xb9\xac\x3f\x9d\xd5\x3a\x81\x42\x5b\xe4\x01\x13\x45\xf9\xa8\xe4\x9f\xd4\x65\x7e\x55\xe4\xe5\x35\x39\x10\x8f\x89\x72\x52\xe1\x61\x74\xa7\x09\x15\x92\xee\x4b\x25\x79\xb6\x69\x2a\x43\xae\xf3\x6a\xb4\x15\x95\xc3\xbc\x90\x8a\x8d\x2d\x72\x84\xce\xc5\x38\xfe\x32\xa2\x6f\x4d\x06\xff\x8b\x3a\x00\x63\x7c\x1d\x7a\x6d\xf3\xfb\x20\x58\x9c\xb6\xa4\xc2\xde\x78\xd8\xf8\xd0\xbb\x2b\x43\x40\x79\x2e\x8a\x63\xc6\xa1\x5b\x51\x9d\xb3\xa0\x25\xe6\xac\x38\xd0\xea\xc1\x3c\x06\xbe\xc3\xd5\x79\xa0\x5b\xce\x3f\x1e\xcb\x60\x8a\x36\x12\x56\x5b\x06\xd9\xef\xd1\x1d\xf8\x81\xea\x01\x0e\x33\xeb\x03\xd4\xa4\x3a\x6b\x37\x8e\x7c\xbe\xec\xc1\x80\x1c\x28\xcf\x8e\x42\xf6\x1e\x69\x51\x27\xc4\x2d\x27\xc6\x62\x9f\x19\xb0\x02\xfd\x0d\x6b\x4e\x33\x70\x53\xfc\xa3\x29\x25\xd7\x8c\x06\x40\xb3\x9b\x16\x0e\x06\xb6\x64\xaa\xa0\x39\xbf\xad\xf3\x82\x3f\x84\x38\xbf\x15\xd5\x29\x7c\xf0\x4c\x25\x9c\x9c\x3a\xd0\x2b\x37\x59\x58\x10\xa0\xcc\xa5\x1d\xe2\x61\xee\xcb\x79\x34\x7b\x5f\x81\xfd\xe3\x78\x6e\x78\xcd\x87\xba\x0e\x38\x2f\xf6\x57\xaf\x59\x2b\x3f\x50\xa7\x3c\xda\xf2\x22\x1f\xac\xec\xfa\x12\x82\x1c\x9f\x99\x02\x6b\x5a\x6a\x76\x80\x9d\x05\x75\x3e\x9c\x90\xe6\xa2\x53\x00\xa1\x7f\x95\x2d\x3e\x36\x1e\x81\x6d\x8a\x21\xe3\x07\x8a\x2f\xa5\xc7\xd6\x62\x6d\x43\x9d\xf9\x0d\x69\x41\x4c\x9a\xbb\x6b\x25\xc2\x61\xa3\x3e\x43\x6d\xc7\x76\x6c\xd6\x66\x10\x14\x47\x8e\xee\x6a\x63\xc1\xd2\x95\x69\x98\xd4\x37\xdb\xb4\xab\x4d\x2e\xb6\xd6\x2e\x04\x60\xc5\x7b\x5e\x03\xc5\xc0\xeb\xa0\xd4\x4b\x73\xe0\x70\xae\x8c\xff\x71\xfd\xe0\xd4\x2a\xed\x30\x0b\x6a\xa1\xe7\x3b\xcc\xd5\x70\x89\xe0\x9d\xc4\x2d\x0f\xe3\x23\x8b\x7b\x25\x85\x38\x2e\x71\x1d\x9d\x8f\xad\x7b\xa1\x38\xee\x4f\xfa\xcc\x63\xd3\x68\x9a\xc0\x4a\x54\x89\x41\x6f\x47\x25\x1a\xa0\xe7\xac\xc3\x4c\x4c\xea\x5d\x2d\x9e\x8b\x5b\x2e\xbf\xcf\x2a\x9e\x90\x94\x1f\x00\xf7\xbe\xb6\x85\xaa\xdd\x55\xa5\xa4\x2b\x9f\x72\x67\xa2\xcc\x58\xee\x15\xef\x3b\x1a\xe2\x52\xc2\x82\x5e\xec\xa4\x7c\xc0\x7e\xbf\x3d\x0a\xc1\xfa\xd3\x03\x72\xa0\xeb\x7c\xc9\x9f\xe5\xb2\x52\xcd\x97\x45\x77\xfa\xb8\xe9\x19\x30\x0e\x6c\x87\xad\x21\x21\x87\x55\x5e\x66\x45\x71\xd7\x48\xa8\xf7\x92\xd1\x4c\xbd\x2e\xd9\x98\x5e\xe9\x43\x4e\x9f\xff\x88\x84\xda\x75\xc4\xe9\xbc\x15\x9b\xcd\xcd\x12\x00\xf5\x77\x07\x47\x61\xcf\xb8\x7c\xc9\x06\x83\xeb\xf2\xd0\xcb\x45\x72\x55\x12\x7a\x15\x1c\x55\x23\xc0\xc2\x65\xf5\x93\x00\x31\x8d\xf8\xa7\x6d\x91\x2f\x72\x55\xdc\x7d\xaf\xd3\xf0\x65\x1d\x5a\x43\x2c\xc0\x3d\x27\xe3\xe8\xc3\x78\x27\x5f\x6d\x81\x8c\xc4\xf1\x5b\x30\x10\x2d\x85\x01\x80\x80\x1a\x22\x52\x03\xda\x03\x8d\x2a\xd2\x93\xe0\x52\x34\x4c\x46\x11\xd3\x9a\xca\x91\x12\xc4\x5d\x4d\xd1\x61\x39\xcd\xf1\x8f\xb9\x70\xb9\xfe\x7b\xa7\x15\xc2\xde\xb6\x7c\xa4\xbe\x65\x55\xec\x53\x99\x64\xa3\x8d\x1e\xc6\x25\x18\x51\x21\xa0\x46\x8f\x5b\xfc\xa6\x85\x28\x8a\x6c\x5b\xf1\xe5\x14\x7c\xad\x3e\xc9\x93\x8c\x58\x57\xab\x29\x58\x18\x00\x8f\x5b\x8d\x94\x80\x37\x5b\x48\x60\x61\x5d\x2a\x8b\xe0\x53\x9a\x70\x42\x6b\x95\xb1\x27\xcd\xda\x2b\xcb\x64\xdb\xac\xf5\x46\xc4\x71\xff\xc7\x32\x00\x67\x24\x71\xcc\xe3\xf8\x53\x9e\x64\xb4\xe1\x57\x07\x4d\x65\x5a\xb9\xbb\x2d\x8b\x89\x87\x5e\x7f\x60\xf0\x76\xec\xcf\x32\xa9\x8d\x1f\xa1\x05\xfb\x29\xd9\x91\x5e\x71\xee\xd5\xbe\x9a\x7e\x7a\x5b\x31\x6c\x47\x8f\xa4\x66\x45\x3b\xc6\xfb\xef\x25\x07\x77\x4d\xec\xe8\x1a\xe8\xd9\x97\x34\x1f\x58\x7f\x22\x61\x27\x2c\x63\xd6\x5a\xb9\xac\x6f\x62\x32\x25\x36\xf9\xc2\x14\x1b\x82\x76\x59\x62\x11\x86\x81\x59\x67\x1c\x7f\x65\x9e\x6b\x35\x27\x6d\x5d\xe0\xc2\x64\x4a\x53\x7a\x44\x71\xa3\x11\xaa\xe2\xf8\x47\x58\xfc\x48\x29\x80\xc1\x35\x95\xe1\x0f\xdc\x6e\xf0\x72\x5a\xdb\x85\x7a\x3f\xb0\x4e\xd5\xc4\x9e\x03\x0c\x8b\xae\x84\xf8\xa8\x2b\x8e\x0c\x2f\xa8\xd0\xf8\x85\xb3\x49\x88\xf7\x30\x3e\xcd\x3b\xa7\xd7\x7b\x2b\xf3\x73\x9b\xcf\x69\xa6\xf7\x86\xe8\xd8\x1b\x4e\xe6\x92\xd9\xe5\x2d\xc1\x7d\xdd\x54\xa4\x4f\xf2\x44\xe8\x35\x8e\x78\x54\xc3\x09\x63\x3c\x70\x6a\x10\x64\x84\xdd\x52\x36\xb3\x29\x41\x68\x2d\x8f\x03\xbb\x93\x71\x1c\x3a\xe9\x6c\x8e\x92\xc1\x1d\x08\xa9\x55\x40\x91\x80\xa6\x0c\x41\x4d\x93\x7a\x04\x6f\x4f\xab\xf4\x6e\x97\x71\xfc\xb3\x4a\x24\x6d\xe2\x05\xe1\xb3\x7d\xc9\x29\x6c\x6d\x6e\x55\x5a\xd8\x8d\x4e\x8c\x08\x1c\xba\x2b\x17\xe0\x28\xd7\xe2\x19\x55\x56\x9a\x6a\x17\x6f\x37\xd0\x91\xcf\xd0\x74\x42\x4d\x61\x9b\x23\xc2\x29\xb1\x9e\x70\x95\xf3\x62\x65\x48\x99\xf9\xdd\x53\x0e\x23\xca\x2a\x9f\x56\xec\x07\x7d\x97\x1a\x66\xbd\x0a\xc8\x43\x09\x8a\x03\xe0\xd2\xb7\x32\x1a\xdd\xb5\xf1\x43\xf0\x02\xa8\xbc\x61\xa8\xd7\x6f\xad\x98\x70\x8f\x6c\x5a\xce\x37\xac\xcb\xfa\x9e\x1a\x6d\xb2\xbb\x2b\xfe\x63\xbe\x5c\xf2\xd2\x41\xa0\x0f\x27\x7d\x76\x2d\x92\xae\x48\x5c\x5d\xfb\xbd\x8d\x7c\x5b\xae\xc3\xe8\xa3\x11\x81\xf3\x68\x04\x43\x0a\x5a\x6c\xad\x85\xea\xbd\x45\x08\x87\xae\xde\x06\x59\x8d\x7f\xa2\x6b\x11\x04\x52\x4e\xc0\x79\xd4\xbf\x39\x26\xa7\x9d\xfd\xf6\x1d\xfb\xf1\xc1\x6e\x1d\x7a\xfa\xec\xf7\xe2\xa5\x0f\x65\xd3\xb7\x35\x40\x9c\xae\xe1\x40\xee\xd0\x69\xb6\x29\x93\x92\x5d\x88\xa4\x24\xc4\xa4\x65\x46\x3c\x27\xd8\xac\x56\xa4\xa6\x00\x62\x36\xd6\x87\x64\x69\xd0\xbd\x5e\x06\x9e\x55\x3e\xe4\x4d\x63\x87\x0a\xec\xed\x7c\x4a\x56\x8d\x16\x85\x28\xb9\xfe\x4e\xfa\x63\x42\xa8\xc0\xfe\x40\x35\xcf\xd1\x29\x25\xfe\x95\x04\xaa\x24\x81\x13\xa0\xf1\xe9\xee\x0c\xb6\xdb\x47\xbe\xf4\xb4\x6a\x87\x22\x7f\x0c\x9e\xed\xe6\xa3\xbc\x7a\x0d\xf4\xd3\x7a\x4b\xcd\xd8\x8d\x48\x10\xd8\xb7\xe4\xb7\x27\xb7\x25\xf8\xd6\x3b\x04\xfd\x32\xf6\x52\x1b\xe4\x4e\xcc\xd4\xd8\x01\xfb\x4a\xa1\xf7\xcb\x0f\x25\x09\xb3\xe0\xf8\xe8\x02\xaf\x4a\xc0\x06\xa5\x19\xdb\xa2\xe1\x52\x0f\x47\x5e\x0f\x29\x15\x80\x38\x94\x9d\x8f\xf7\xfb\x31\x63\x99\x61\x7c\x05\xd2\xf6\xdf\xd6\xbc\xbc\xd8\x6c\xd5\x9d\xad\x4b\x00\xf1\xb0\xaa\x37\xcb\xdf\x72\x38\x2e\x85\x3f\xd4\x34\x21\x10\xe1\x80\x7a\xe4\x99\x59\x3d\xdf\xbc\x8e\xcf\x61\xc0\xd6\xf4\xa6\x07\x39\xf8\x0b\xb1\xab\x38\xd8\x65\x57\xfb\x7d\x58\xe2\x17\x43\xc2\x97\x46\x12\x83\x70\xda\x49\xad\x0c\x1f\xc3\xcc\x2c\xbb\x1e\xc0\xba\x7c\x86\x02\x6e\x54\x90\xa7\x92\x0a\xb2\xdf\x2b\xe3\xfe\x5e\xc2\xdf\x38\x86\x34\x32\x4c\xd3\xf5\x8a\xa1\xeb\xc9\xcb\xeb\x13\x57\xfe\x09\x1e\xb7\x27\xdb\x4c\xaa\x5c\x33\xce\x27\xe8\x56\x08\xb8\x9a\x93\xac\x3c\xe1\x9f\xf2\x0a\xb2\x88\x92\x47\xa4\xf7\x8a\xf5\xc7\x07\x31\xca\x96\xcb\x37\xe2\x47\x34\x57\x8f\xe3\x3f\x72\xe7\xc7\x5d\x01\xae\xb2\x75\xe0\x0e\x87\xb9\x66\xb3\x23\x90\x60\xf1\x82\xbe\xcc\x5e\x1a\xa0\x5f\xba\xb3\xce\x3d\x0b\xf0\x56\x89\xab\x0a\xa0\x9c\x76\xa6\x23\x83\x06\xa4\x46\x11\xc7\xa2\xc6\x8c\x15\x47\xc0\xfc\xfe\xd4\xc9\x19\x2b\x9a\xac\x50\x1c\x27\x15\x1c\x1b\xb5\x62\x76\x7d\xd3\x12\xa0\xf4\x60\x56\xd4\xb4\x59\x0f\x59\xce\xda\xaf\x69\xed\x97\xb3\xf3\x53\x73\x92\xce\xd4\x9c\x2a\x8c\x95\xc1\xf9\xa0\xa9\xa9\x66\xb4\xf8\xed\xc9\xa5\xde\x5b\x3b\x66\x6a\x9f\xaa\xd1\x62\x0d\xe8\x94\x3a\x0c\x47\x60\x2a\x6d\x18\xb8\xa4\xd8\x1d\x48\xa3\xed\x66\xc4\xcc\x48\x76\x0c\x9b\x22\xf7\x3f\x62\x37\xa0\x77\x8a\x8e\x89\x29\x44\x6f\xa9\x57\x25\x28\xf1\xc4\xf1\xbb\x3c\x11\x34\xba\x02\x31\x21\xda\xc5\x5d\x94\x0d\xe0\x11\x72\x2f\x1c\x8f\x05\x25\x78\xa4\xd6\xe4\x42\xef\xb4\x84\x3b\x70\x83\xa5\x28\xed\xb5\x70\xbf\xe7\x35\xcc\x03\x17\x81\x0e\x73\x75\x81\x66\x21\x25\xcd\xce\x25\xc2\x5e\xb0\xa8\x30\xfc\x25\xcc\x5e\x01\xbb\x02\xfd\xdf\x77\x1f\xff\xf5\x3d\xc4\x65\x52\xd0\xc6\x10\x79\x9d\x4c\xdd\xab\xac\xaa\x5e\x66\x1b\xae\xf7\x36\x40\x45\xe9\x0f\x63\x5f\x79\x87\xbf\x78\xb9\x74\xdf\x8b\xaa\x0a\xdc\xaf\x62\xc1\xa7\x8b\x33\x33\x67\xa7\x8b\xc1\x80\x28\x5d\xe5\xc2\xde\x73\x7a\xc2\xb1\xc7\x5f\xf1\xa4\x00\x96\x97\xfe\x3d\x4f\x0a\xcb\xee\x3e\x59\x2e\x35\xb3\x5b\x50\xe1\x7c\x2c\x09\xb8\xd1\xdf\x82\x34\x16\x8e\x99\x87\xaf\xab\x1b\x73\xe8\x59\xd1\x13\x42\xae\x32\xe5\x1f\x7c\x41\x9f\x92\x87\x6e\x08\xf9\x4c\xce\x0d\xf7\x0c\x67\x6d\xf0\xf4\x72\x51\x03\x9a\x01\x06\x50\xd7\x5d\x05\x16\x55\x00\xd6\x31\x5a\x14\xf9\xf6\xb5\xa8\xda\xc6\x52\xdd\x90\x35\xa6\xba\x9a\xdf\xdf\x57\x0d\xe1\x21\xc2\x64\x06\xf0\x98\xd6\x18\x44\xef\xa8\x92\xcd\xa4\xed\x9d\x1e\xc7\x79\xef\x43\x9e\xd4\x42\xea\x15\x7b\x83\x67\xd2\x64\xe5\xa5\x1d\xb4\x2e\xad\x6c\x1b\x37\xcb\xe7\xa7\xc6\x29\x96\x5e\x85\x7a\xe6\x60\x61\x9a\x61\x83\xed\xea\x0b\x32\x3c\x4f\x3e\x1c\xd2\x09\x21\xa1\xeb\xe9\x4b\x27\x2a\x0a\xa6\xcb\xce\x16\x38\x60\xb6\xc2\x26\xc1\xa4\xcf\xf6\x29\x40\xc5\x23\x0f\x4c\x65\xe3\xc1\xbe\xb4\x15\x78\x33\xe7\x32\x68\xcc\x93\xb2\xe1\x89\xda\x28\x60\x07\x45\x96\x84\xcf\xca\xb9\x01\x56\xdd\xef\x13\x19\xb0\x53\x3a\xc6\x09\xac\x82\xc6\x7e\xf4\x8d\x55\xa3\x95\x26\x5a\x4d\xe7\x37\x92\x3d\xe3\xce\x3b\x3f\x5e\x05\xe2\x18\xdc\x2b\x87\x41\xb5\x2b\x53\x69\xb3\x28\xd1\xc8\x60\x03\xc2\xe4\x68\xc2\x1c\xc7\xce\xfb\xfb\x49\x60\x4f\x66\xea\x58\xac\xa9\x00\xef\xba\xfa\x2b\x63\x63\x06\x9c\x08\x0a\x47\x14\x5c\xa1\xaa\x96\x0d\x76\x6d\xfc\x4b\xa3\xce\xcf\x3b\xae\x80\x1c\x6f\x7e\xe6\xda\x27\x03\x34\x7f\xa8\x60\xbf\x4f\xb2\x51\x5e\x2e\x8a\x5d\x95\xdf\x80\x22\xca\x14\x23\xce\x98\x4a\xcd\x97\x22\x9a\xc8\xc0\x9a\x00\xe7\xb5\xc1\xe5\x34\xb3\x37\xd3\xbe\xdc\xef\xfb\xb6\x92\x80\x81\x20\xce\xcb\x9b\xa9\x14\x40\x8e\x83\x2a\x41\xb3\x65\xaa\xc3\xcf\xa1\x46\x25\xce\x15\x39\x4d\x4a\x70\x89\xed\xa7\xd8\x1c\x4f\x99\x71\x14\x4e\x8d\x3b\x41\x9d\x9e\x38\x9b\xe2\x93\xf2\x00\xe0\xb4\x19\xa1\xbb\xff\x4f\x46\xec\x8b\x1a\xff\x65\x83\xf5\x25\x63\xf5\xe5\x13\xf4\xc0\x80\xb9\x91\xd2\x49\x87\xea\xff\x21\xef\xdf\x96\xdc\x36\xd2\x45\x41\xf8\x9e\x4f\x51\x44\xb4\xf1\x23\x1b\x49\x16\x59\x25\xa9\x54\x60\x65\xf1\x97\x65\xa9\xed\xb6\x2c\xbb\x2d\xb9\xdd\x5e\x2c\xb6\x06\x04\x92\xc5\xb4\x40\x24\x0d\x24\x4a\x2a\x17\x19\xb1\xef\x27\x26\x62\x3f\xc2\xbe\x98\xeb\x79\x88\xf5\x14\x73\xbd\x9e\x64\x22\xbf\x3c\x20\x13\x64\x95\x65\xaf\xde\x3b\x62\xd6\xd4\x05\x8a\x48\xe4\xf9\xf0\xe5\x77\xfe\x70\x3b\x96\x76\x0a\x07\xc2\x9f\x44\x89\xf8\xa6\x08\x17\x64\x2c\x91\x01\xc7\xa2\x11\x67\x12\x1b\x57\x49\x46\x33\x3e\x8e\x8a\x29\x4b\x54\x54\xf3\xf6\x1e\x5a\x92\xd1\x64\x79\xe1\x30\x25\x96\x8e\x63\xee\x28\x27\xf5\x6c\x39\x87\xd0\xf0\xd1\x8a\x7c\x2c\xa3\x06\xe7\x7a\x42\x10\x9a\x16\x61\x18\xe5\x12\xf0\xa8\xdc\x2b\xdb\x57\xf9\x2b\xce\x50\x02\x1f\xd9\x0e\x94\x64\x64\x83\xaa\xb1\xc6\x6b\x4c\x76\x22\xc7\xab\x96\x47\x11\xe5\xa4\xd1\x8d\xea\xfa\x63\x92\x19\xee\x5c\xae\x38\x1c\xaa\x33\xb5\xd3\x99\xed\x36\x52\xdf\x48\x86\x65\xbf\x24\x75\xe7\x92\x72\xb9\x0e\xa5\x7a\xa4\x72\xc5\xf7\x66\xdb\xd5\x80\xed\x7d\x57\x46\x35\x42\xb8\x01\x34\x4f\x26\x35\x32\xa9\x41\x0a\x0b\xdd\x10\xad\xfc\xd3\x2f\xd4\x08\xd6\xf8\xc6\x5f\x81\xc1\x89\xfc\x7c\x73\x39\x0a\xc3\xda\x19\xbb\x37\xd1\x9a\xe1\x38\x5b\xce\xd5\x58\x55\x84\xf3\xbd\xbd\x01\x19\xd4\x38\x95\x60\x42\xe1\x75\xbd\xb6\xd6\x1b\xa8\x6e\xa3\xcd\x7c\x50\x4f\xff\x6a\x2c\x52\xb0\x69\x81\xed\x77\x0f\xdd\x9a\x71\x2c\xdc\x5b\x53\x47\xd0\xa8\x34\xbb\xa9\xd2\xe7\xa5\x82\xee\x02\x89\x65\xae\xb0\x0e\xa5\x05\x7a\x1b\xea\x4e\x13\x70\xa7\xed\xec\x45\xae\x5a\x9a\x52\xe5\x4f\xdd\x76\xeb\x7b\xcf\x31\xf8\x01\xbe\x1b\x11\x33\x20\xc1\xea\x77\x41\x4c\x87\x2c\xef\xb8\xce\x01\x70\xdd\x32\xa7\x47\x10\x98\x04\x6c\x83\x9c\x45\x81\xfb\x49\xc7\xfa\x78\xcd\xa2\x4a\xde\x47\xf6\x42\x62\x3b\x45\x17\x97\x44\xdf\x47\x9d\x06\xe0\xb5\x6c\x99\x6a\x5d\xa4\x60\x1f\x42\x55\x0a\x42\x95\x33\x36\xd7\xec\xaa\x14\xd1\xc4\x94\xab\xc9\x68\x52\x5f\xa4\x6d\xb9\xba\x5d\x96\x86\xa4\xb3\x7a\x8e\x0b\x32\x9a\x14\xd6\xec\x62\x12\xc7\x85\xa4\xc2\xf9\xac\x98\xdb\x7b\xba\x31\x27\xc0\xa8\xc7\x1d\xd1\x1e\xb7\xcb\x0f\x3b\x3e\x95\x57\xf1\x8c\xcd\x49\xea\x04\xe2\xb4\x13\xff\xd6\x91\x49\xd2\xee\x95\xe8\xde\xf5\xfb\xe1\xa8\x55\x1c\x6a\xb5\xfe\x2d\x6b\x27\xa2\xa8\xe7\x53\x3e\xb0\xd2\x6d\x8b\xcf\x9d\xeb\xfe\x93\xeb\xf7\x08\xa1\x4e\xfd\xc2\xa9\xfc\x1b\x1f\x6d\xf4\x21\xf2\x60\x9c\x8c\xda\xac\x3f\xdf\x93\x55\xdd\x16\x5e\xd6\xaf\x3a\xc1\xc9\x5d\x16\xd4\x40\x78\xaf\x10\xe6\xb7\x4f\xaa\x6e\x48\x59\xaa\x25\x2c\x18\xf0\x09\xf5\x93\x4b\x0c\x42\xd9\x0e\x61\x15\xdc\x19\x6d\xb7\x30\x82\xc1\x37\xa5\x76\xac\x62\x42\xdf\x0c\xb8\x72\xd6\xa3\x8a\x08\x8e\x99\x84\xca\xdb\x2d\x8c\x62\xf0\x33\x64\x37\x1a\x6b\x92\xcc\x67\xf9\x40\x1e\x93\x76\x0c\x5f\x74\x0c\xec\xbf\x95\x87\xb4\xb3\xde\xa5\xbd\x17\x18\x36\x11\x61\x1d\x69\x44\xc4\x94\x23\x28\x7b\xe8\x5b\x9a\xcb\xc4\x1b\x9c\xaa\x71\x24\xd0\x3b\x7d\x87\x7e\x55\xca\xeb\xde\x6c\xd4\x8b\x11\x84\x4f\x24\x36\xe1\x00\x46\xf8\xda\x5d\x1a\xe8\x78\x7f\xe4\x60\xfe\xaf\xf6\x3f\x8f\x9d\xcf\x2f\xf7\x43\xfd\x11\x85\xfb\x21\x9c\xca\x71\xf3\xee\xb8\x53\xf4\xd0\xa9\x6c\x4f\x24\xe8\x7b\xee\x8d\x5e\xe5\x28\xec\x59\x54\xcb\x3b\x42\x38\x93\x8b\x55\x68\xf1\x99\x5a\x5a\x7b\x5e\xe5\x0a\x33\x84\x97\x2a\x8b\xe0\xb8\x54\x8b\xd9\x66\xf8\x59\x66\x50\x31\x1f\xb3\x4b\x32\x0a\xc3\xe5\x05\x19\x6d\xb7\xd9\x05\xfc\xbe\x24\x30\x8f\xea\xad\xed\x94\xbf\x8b\xc3\x90\x75\x8e\x80\x69\xad\x42\x97\x64\x94\x38\x6f\x23\xb4\xdd\xaa\x66\x7e\x67\x65\x30\xba\x12\x5d\x98\xea\xcc\xfb\xc8\x46\x9d\xec\x8f\x5c\x8a\xe6\x57\xff\x02\x9a\x08\x02\xab\x3d\x41\xd4\x1c\x8c\x41\xeb\xd8\xa1\xd5\x78\xb5\xe5\x3f\xf7\xce\xa2\x59\xd7\x92\xfc\x0a\x4e\x83\xcd\x5e\x22\xa4\x9c\x8a\x04\xdc\x38\xb4\x45\x7f\x70\x20\xcf\xa5\x47\x76\x5a\x9f\x4e\xae\xfb\x09\x73\x07\x00\x23\xa4\x74\x32\xfd\xa6\x3f\x0a\xd3\x0d\x68\x3f\x1e\xb7\x3d\xf8\xd2\xeb\xfc\xb7\x61\x28\xba\x5b\xb1\xda\x43\x7e\xbd\xab\x85\x2d\xa3\xa8\x84\x9b\x65\xff\x14\x3a\x98\x9b\x02\x2a\x76\xfe\xd5\xdd\x65\x0a\xb4\x2c\xc4\x30\x1c\x99\xbc\x61\x58\xee\x2d\xbb\x62\x3a\xfe\xdd\x38\xb0\x77\x96\xd3\x0e\xe8\xef\x2e\xe2\xae\xda\x06\x41\xb1\x26\x2c\x2b\xef\x48\xc0\x04\x99\xb9\x81\x92\xca\x99\x02\xfe\x58\x6a\xb7\x0a\x1e\x09\x57\x59\xec\x4e\xa2\x90\xd5\x7d\xbb\x52\xb6\xd7\xc1\x7f\xdb\x81\x77\xe1\x99\x37\xdf\x2e\x6c\x93\x13\x2b\x41\xb3\xf3\xf9\x1e\x50\xd7\x67\x87\x26\x92\x79\xc8\x91\x9e\x0a\x06\xa4\x88\x7c\x1a\x2c\x4a\x9e\x59\x76\x70\xa2\xc1\x7f\xd6\xa1\x11\x22\xbb\x04\xcc\x59\x02\xc6\xa3\x0f\x25\xc2\x1f\xfe\xb0\xe6\xc0\xbd\x72\xd9\x5e\xab\x47\x35\x9a\xe8\x78\xca\x1d\x8e\x47\x1c\x53\xe4\xa6\x43\x54\x45\xc5\xe3\xeb\x75\xd4\x07\xd0\x6e\xe7\x77\xf2\x80\x60\xd5\xd3\x71\xd2\x1c\x19\xd8\x30\x10\xdd\x1f\xce\xe4\x2f\x25\x79\x33\x7c\x05\xfe\x85\xe5\x9c\x1f\x22\x1b\x9d\x93\x73\xc4\xca\xa3\x0a\x55\x5d\x0b\x05\x88\x44\x2c\x5b\x99\x95\x73\x02\xd8\x5f\xaf\xab\x99\x51\xf2\x9c\x12\xe1\x70\xb4\x7e\xb4\x4d\x7c\xc7\x22\x81\x2e\x22\xad\x59\x01\x5c\x48\x3f\xd8\x13\xb8\x3a\xf5\x3c\x45\x43\x4c\x38\xaa\xb0\xf6\xca\x01\x44\x7f\x31\x72\x2f\xa3\xa8\xab\x05\x8c\x16\x19\xd1\x02\x46\x83\x96\x69\x71\x29\x2c\xa7\xc9\xa4\x0e\xf5\x57\x3c\xf2\xd4\x78\x31\x85\x21\x58\xdd\x8e\xc0\x44\xa4\x4d\x8e\x2a\x5a\x80\x27\xec\x49\xd0\xa3\x43\xc7\xc1\xb6\xbc\x8d\x63\x12\xa8\x00\x3f\x03\xf0\x84\x72\x34\x08\x62\xb1\xe7\xcd\xdb\xf5\x27\x13\x6c\x3e\x4e\xc0\x0a\xda\xc6\x9c\xd1\xd5\xa8\xb0\x52\x47\x6e\x79\x3f\xb2\xac\x57\xfe\x67\x49\xa5\x5a\x6e\x3b\x4d\xeb\xa6\xa2\xf8\x39\x8f\xc0\x03\x0b\x9e\xa9\xc1\xcc\xcd\x04\x3a\x64\x84\x16\xbc\xaa\x0c\xae\xe2\xaa\x1b\xc7\x54\x1e\x92\x5f\x4a\x84\x7f\x79\xf0\x90\x1c\x52\xa1\xb1\x82\x46\x13\x5e\xc7\x08\xae\x55\x8c\x37\xf2\x8c\x45\x95\x23\x90\x2f\xc3\x50\xf8\xd1\x23\x98\x8b\xca\x32\x24\x24\xfe\x0d\x35\x48\x90\xef\xb1\xfb\x7a\xc2\x72\xbc\x23\x03\x52\x74\x38\x69\x2d\xfe\xfa\x4b\xa9\x63\x0c\x7d\x64\x51\xd5\x86\x6b\x1a\x41\xb4\x4a\x88\xf5\xc5\x95\x26\xc4\x9e\xc1\x3c\x6c\xde\x0a\x0f\x38\xc2\x42\xa9\x69\xd8\x80\x40\x3b\xd0\x0f\xfe\xe5\xd3\x85\xf9\x2b\x1d\x11\xd8\x9b\x29\x67\x56\x7a\x4e\xae\x56\x20\x5e\xda\xde\x0f\x68\xaf\x0c\xc3\x08\xc6\x60\x3a\x1e\x97\xa0\xa1\xf1\xb5\x88\x84\x1f\xfb\xe0\x70\x00\xa0\x1f\xcb\x48\x59\xb6\xec\x10\xd2\x70\xe1\x27\x03\x17\xf6\x20\x82\xe2\x8a\xd2\x8f\x82\x50\xfc\x5c\xf5\x01\x1b\xe5\x42\xdd\xcb\x6a\xaa\x83\x0e\x25\x63\xe7\xc4\x7f\xad\x8d\xeb\x5d\x56\x2d\x50\x49\xed\xf9\xfd\x53\x97\xbd\x3a\x71\x5c\x23\x2a\xd5\xbc\xe3\x68\x9a\xfc\x73\x7b\x55\xc7\x08\x9c\x27\x44\x8b\x34\x7b\x7f\x5d\xf1\xa6\xcc\x07\x68\x1a\x5d\xbd\x89\xd1\xb1\xa1\x30\x95\xb7\x44\x4a\xa8\xb5\x3c\xaa\x94\x2a\x1f\x8a\x4d\x92\x4e\x88\x2b\x47\x7b\xcf\x38\x85\x9d\x8d\xe7\xd3\x40\x87\xdc\xd6\xd1\x24\xd4\x6f\xad\xa8\x22\x66\xe5\x7c\x2a\x14\xc8\x3b\x99\x27\x4e\xfc\x8e\x00\xfa\x58\xa3\x20\x96\x5f\x62\xf9\xfa\x27\xf9\x8a\xb4\xaa\xac\x84\x90\xdb\x2d\xfc\x8f\x49\x70\xa4\xb2\xb5\x87\xb0\x9d\x8f\xbf\xb9\x41\x58\x16\x45\x5a\xbe\x97\x4b\xd2\x82\x33\x9b\xa4\x89\x1a\xc7\x7f\xa4\x99\x37\xc7\x0b\x65\xe4\x84\xdc\x3c\x52\x8e\x23\xdb\x1a\xa6\xdd\x84\x48\x3b\x99\x44\x89\xd6\xa4\x6e\xbb\xf5\x0f\xc7\x16\xca\x3f\x9c\xe3\x91\xe2\xda\x97\xe0\xe4\x76\x34\xef\x34\x5f\x21\x68\xc4\x1c\x40\x3a\x04\x4f\xb2\x56\xec\x2c\x94\x16\xb2\xd6\x57\xb5\x82\x97\x3d\xc1\xa9\xac\xed\x28\x88\x95\xeb\xe3\x38\x38\x5a\xa6\xac\xa0\xf9\x91\xe0\x47\x69\x7e\x93\x96\x19\x3d\xaa\x41\x55\x7e\x18\x38\x7b\xeb\xaf\x6e\xa7\x4d\x22\x73\x9c\x1a\xd6\xca\x8d\x9c\xd6\x80\xa4\x65\x9e\x2c\x41\xf5\xb2\xd6\x91\x83\x86\x5a\x97\x32\x42\x58\x1e\xeb\x84\x2b\x7b\x10\xed\x69\x93\x4e\x1b\xd0\x7d\xe3\x39\xc5\x19\x4a\xb2\x1d\xc8\x8b\x38\x4e\xd5\x35\x83\x6b\xa2\x3e\xf6\x04\x79\x45\xa3\x14\x9b\x70\xa8\xb8\x90\x38\x71\xaa\xe5\x61\x92\xb6\xa9\x45\x2b\x5e\xae\x24\x25\x23\x47\x7e\x5b\x4a\x8a\x82\x7e\x14\x78\xcf\x99\x8d\xe2\x58\x95\xc0\x4b\x9b\xcd\x15\x2f\x74\xa9\xd4\xdb\x87\xd9\x0a\x85\x61\x7f\x39\xa4\xbc\x88\xd0\x04\xe9\xc1\x11\x35\x30\x4e\xfe\x51\x46\x35\x5e\xe2\x0c\x9c\x2d\x34\x8a\xbd\xc1\x40\xb5\xc1\xea\xbf\x4e\x9b\x84\x45\xce\x34\xfe\x9b\x43\x04\x02\x9b\x54\x33\x6d\xab\xa1\xeb\xba\x5d\x1f\x11\xc5\xf3\x6b\x7b\xec\x66\x69\xc7\x3f\xc2\x99\x82\x06\x76\xa8\x87\x46\x89\x73\xa7\x22\xd7\x17\x7c\x18\xce\x64\x69\xe5\x90\x39\x50\x61\x64\xff\x54\x46\x7f\x93\xd4\x71\x89\x30\x47\x93\x76\x02\xe4\x49\x5a\x2a\xad\x73\x5b\xd7\xbe\x4f\xf6\x69\x54\x93\xfe\x18\xa7\x61\x58\x31\x85\xa3\x63\x28\x84\xd4\x3f\x1b\x97\x15\x37\x3a\xc4\x48\x43\xfe\x54\x46\xff\x90\x0d\x2e\x71\x89\x73\xd9\x28\xd6\xe4\xeb\x8a\xe4\x12\xb6\xc8\x9d\xda\x5b\xc1\x1a\x05\xeb\x41\x10\x47\xcd\x74\x15\xcb\xa3\xdf\x24\x2b\x85\x87\xf7\xeb\xed\x36\xeb\x93\x46\xbb\x87\x2d\x2e\xf4\x62\x4d\x10\x8b\x0a\x62\xa3\x12\x9a\xfd\x59\xc4\x8f\xe9\x23\x84\x33\xd4\xcb\x48\xb3\xf3\x16\x76\x67\x2b\xd8\xf0\x7a\xe2\x87\xa4\x87\x1a\xe4\xe2\xab\xf2\x3d\x16\x6d\xe4\xf2\x17\x64\xe3\x9c\x6f\xca\xba\xb6\x8e\x33\x13\xb2\x48\x6e\xe1\xbf\xd0\x72\x8e\x39\xb9\xdb\xf5\xd4\x66\x30\xfb\xd2\x44\xb9\xc2\xd5\x5e\x10\x29\x2d\xa8\xc2\x10\xaf\x83\xbb\x36\x85\x2a\x40\x2f\x75\xc2\x9c\x16\xe9\xad\x83\x10\xdb\x0d\xd6\xcd\x32\x4b\xe7\xb8\x21\x63\xb9\x7f\xbc\x7e\x28\x57\xf1\x07\x5c\xe6\xb7\x1c\xb1\x66\x52\x5c\x18\xa7\xbb\x25\x61\xb3\x66\xde\x2b\x2f\x81\xd6\xd0\x18\x44\x83\xc7\x98\x62\x36\x6b\xe2\xf1\x5c\xee\xa1\x26\x26\x27\xd8\x59\x04\x49\xb6\xee\x80\xcf\xc6\x96\x51\x3d\xe4\x9b\xf4\x97\x86\x22\x5b\xbc\xc2\xcd\xa0\xc2\x14\x02\x29\xe9\xee\x4a\xc4\x0d\xe1\x86\x54\xf1\x89\xe2\x97\x2b\x5a\xf7\xa2\x99\x54\x31\x39\x31\xdc\x14\x36\xab\xe2\xf1\xbc\xa7\xfe\x91\x88\x4f\xb9\xdc\x23\x49\x10\xa0\xb8\x53\xd7\x4e\xce\xa3\xb9\x32\xee\xc0\x18\xa9\x4e\x18\x06\xd1\x39\xad\x13\x3e\xd4\x17\x17\x88\xd0\xcd\xcd\x35\xd5\xd1\x36\xdb\x95\x16\xcc\x0b\xa4\xa1\xac\x9a\xea\xed\xd6\xfc\x9a\x8d\xe6\x7d\xd2\x59\x7b\x33\x6f\x00\xa7\x9e\x31\x08\xe3\xc8\x88\xde\x33\x1e\xb9\xf8\xf0\x21\x6b\xca\xc8\xd9\x33\x25\x4a\xc0\xa5\x16\x34\x05\x06\xee\x60\x51\xa6\xba\x41\x98\xfe\x81\xd9\x50\x0f\x71\xaa\xbf\x3d\x57\xaf\xc4\x7e\x48\xfc\x0f\x60\x02\xe8\xe5\x54\xc1\x30\x2a\x42\x4c\xe8\xb2\x8a\x97\x82\x29\xdb\x41\xf7\x3d\x8e\xad\xeb\x1a\xdd\x7a\x3b\x6f\xd5\xde\x09\x71\x86\xc2\x1f\x02\x63\xb0\xf1\xb5\x36\x03\xe1\x00\x4e\xca\xed\x76\x84\x35\xe0\xfa\x5b\x19\x31\x5c\xa1\x49\x9f\x1b\x90\xf5\x0f\x99\xc2\xe5\x4d\xe0\x95\x92\x38\xf8\x4f\x25\xc2\x3f\xb9\x98\x26\xc4\xaa\xe1\x07\x4c\xef\x9e\x31\xad\x74\xa7\x90\x1b\x46\xee\x76\x98\x31\xcf\x8f\x11\x67\xad\x43\x6e\x15\x16\xb4\xfe\xf3\xbe\xa3\x7f\x47\x74\x2c\x3c\x28\x3c\x65\x2c\x29\x99\xc5\x2e\x66\x74\x2e\xf1\xee\x19\x9d\x13\xeb\x8c\x29\x3a\xbe\x7a\x13\x1f\x5f\xc3\xb1\xf8\x53\x18\xb8\x3a\x07\x29\x73\xf9\x37\xad\x5a\x98\x95\xcb\xe0\x7a\x1a\x6c\xd2\x3c\x67\xe5\xf5\x00\xe2\xab\x26\x47\xc3\xf1\xe6\x63\xa0\x94\x71\x70\x49\xee\x36\x15\x4d\x64\xc1\x4d\x45\x03\x3c\xab\x7c\x0d\x32\xe5\xe6\x11\xeb\x18\x61\x49\x85\x33\x5e\x24\x23\xbc\xe1\x75\x32\xc2\xd9\x3a\xa1\x18\xcc\xdd\xc1\xf4\xa9\x4e\x22\xbe\xdd\xd6\xa0\x0f\x73\x4d\x85\x72\xea\xde\x89\x70\x85\x76\x3d\x61\xe8\x2a\xd7\x8c\x5f\x61\x41\x24\x82\x68\x1c\x62\xaa\xfe\xe9\xd3\x90\x8c\x50\xab\xd2\x90\xe2\x86\x30\xfd\x7d\xc6\x06\xe3\x79\xa2\x6e\xfc\x5e\x09\x5b\x62\x84\x4b\xa5\xd4\xf5\x9e\x96\xa4\x66\xf8\x2f\x6e\x08\x2b\xdd\xae\x24\xba\x53\xf2\x3d\x8b\x1a\xa4\x22\x0d\xd8\x02\x05\x73\xde\x30\xa8\xef\x0f\xd7\xe9\x86\xcc\xe6\x78\xc9\xa2\x06\x97\x18\xce\x7d\x83\x45\xdf\x09\x91\x43\x3f\x0a\x5a\x95\x69\xf1\x8d\xaa\x3e\x0f\xc3\x67\x50\x37\xc2\x4d\xf7\x44\xf9\x09\x06\xd6\x40\x27\xf4\x6f\xf2\x2b\xbf\x27\x17\x2e\x5b\xd8\x14\x04\x7b\xb5\xb7\xd0\x0a\xaa\xb3\x6f\x07\x2a\xb4\xdf\xb0\x93\x4f\x55\x8a\x30\x30\xe0\xd6\xe9\xc6\x2a\xb4\xaa\x37\xb8\x87\x46\x58\xce\xaf\xde\x0c\x43\x49\x44\x97\xb9\xb2\x2b\xfd\xf1\xd0\x3c\xab\xda\xd8\x34\xb2\x4b\x0e\xb3\x09\x15\xe2\x36\x0d\x42\xaf\x92\xbb\x1d\x4a\x22\x3f\xa7\xd6\x88\x75\x12\x5c\x61\xa4\x4c\x40\x38\xea\xd4\xe3\x97\x51\x49\x4e\xa9\xbb\x9d\x42\x1a\x6a\xc3\x23\x6f\x87\x03\x06\x5e\x72\x30\x93\xe8\xf8\x6a\x91\xad\x07\x22\x5d\x5c\x2d\xf4\x41\x2e\x5a\xe5\x2a\xb4\xdd\x16\xc3\x5f\x1a\x5a\xdd\x2a\x5f\x19\xbc\x0a\xc3\x4e\x42\x14\x0c\x55\xf9\x40\xef\x30\xd3\x86\xad\x84\x04\x2a\x03\x84\x50\x1b\xac\xd2\xec\x7d\x60\xe9\x98\x7f\x80\xfd\x40\x45\xcb\xdc\x44\x04\xb2\x68\xad\x84\x59\x14\xa9\x7f\x6d\x65\xfb\x0b\xde\xc9\xb0\xbf\xce\xb8\x6c\x61\x48\xcd\x1c\xcc\xb4\xc6\x8d\x91\x84\xa9\x09\xd2\xee\xd8\xd4\x09\x87\x83\xa7\x61\xd2\xd1\xdd\x29\xde\x1d\x5f\xe3\x86\xa1\x44\xe0\x0c\x94\x1f\x0f\xc4\x67\xc4\x4b\xd2\x1f\x4b\x22\x25\x33\x36\x99\xe8\xee\xba\x35\xf5\xce\x2a\x9a\x0a\xfa\x85\x7e\x7d\x59\xa5\xd7\xca\x26\xd9\x42\x86\x5c\x85\xbe\xcc\x60\x7d\x54\x5c\x9d\x5c\x79\x9b\x20\x19\xf8\x75\x8c\x04\xc2\x1b\xb2\x9a\xae\x14\x49\x3a\xc8\x13\x2b\xf3\xce\x65\xbb\x1b\x2d\x11\xef\xb6\xf9\x96\x7e\x04\x0e\x4d\x54\x68\x9a\x36\xc7\x79\xbc\x41\xa8\xc7\xc3\x30\xbd\x38\x9f\x5e\x7b\x1b\xdc\xd1\xb8\x5d\xcf\x11\x4a\xfc\xaf\x3a\xe6\xb6\x3e\x26\x54\x5b\x9e\x6d\x78\x1d\x6f\x30\x7c\xcb\x78\x11\x93\x8d\x4e\x23\x1b\xc0\x5b\x57\x26\x58\xe7\x32\xca\x63\xb2\x89\xc7\x38\xb8\x12\x01\x21\xab\xd9\x68\xae\xfa\x7c\xa3\x26\xb5\xeb\x84\xf3\x96\xdc\x0c\xa0\xca\xcf\x6e\x26\xd1\x9a\xdc\xd7\xd1\x35\x8f\x6e\x11\x0e\xec\x4e\x44\x1d\x25\xdf\x8a\x43\x38\xba\x4d\x45\x6b\x63\x89\x18\x20\xbc\xde\x57\x05\x16\xca\x09\xce\x95\x72\x33\x08\x43\xb9\x6d\xc3\xdf\x5c\x55\xba\xcf\xdb\x6d\x70\x55\xda\xfe\x3f\xd0\xb1\xb6\xc8\x34\xf8\x8f\xff\xfe\x7f\x04\x49\xf0\x1f\xff\xfd\xff\x3c\x10\x3e\x73\xaf\xc7\xb6\x2f\xd0\x84\xe9\xcb\x18\xfa\x22\x1b\xf4\x66\xeb\x70\x20\xcf\x08\x8a\xfe\x46\xc5\x7f\x74\x07\x98\xee\x1c\xde\x0a\x63\xb5\x15\xc0\x12\x7a\xa7\xfa\xac\x8b\x58\xc7\xdf\x60\xd8\x77\xff\x46\x55\x82\xe6\x03\x55\x5b\xc2\xea\xda\x74\x3e\x0c\xa3\x25\x28\x90\xea\x2d\x67\x72\x80\xe4\x62\xbb\x2d\xb7\x5b\xb6\xdd\x2e\xb7\xdb\x46\xed\xb4\x05\xa9\x24\x60\x00\x8e\xd8\x22\x26\xa5\xf2\x2a\xb8\x88\x89\xd6\x79\x7f\xe7\xaa\x9c\x5f\xcf\xf1\x02\x37\xad\xc1\x7d\x18\x46\xef\x74\x84\xd3\x5a\x4d\xc3\xfe\x05\xf1\x0e\xed\x0e\x7f\xb8\x46\x0e\x5a\xdd\x30\x5f\x19\x24\x38\x0a\xb0\xaf\x25\x38\x38\x51\xa2\xf8\x98\x54\x9f\x9d\x4c\x01\xc9\xff\xf7\xff\x11\x58\xdb\x68\x60\x0b\xb5\xf5\x15\xcc\x63\xe8\x5b\xfc\xce\x52\xe1\x1a\xde\x11\x36\x65\x71\x70\x94\xad\x07\xc0\xe1\x1b\x2c\x78\x95\xd3\x2a\x48\x82\x6e\x8a\x05\x4b\x05\xa9\x60\xfe\x33\x52\xc4\x56\x26\x3d\x69\xfb\xae\x14\x61\x2c\xcf\x75\x69\xf0\x97\x9c\x88\xd9\x12\xe4\xb6\xf9\x50\xf0\xcb\x22\x0c\x73\xad\x96\x55\x28\x70\xb0\x33\x9f\x48\x66\xf9\x55\x9d\xfe\xf6\x20\xc1\x32\xe7\x64\xee\x41\x81\x20\x83\x42\xf9\x70\x83\xb0\xd2\x82\xc2\x25\x31\x19\x4d\xb6\x82\xc8\x5f\xae\x04\x34\xdb\x43\xca\xfb\x65\x18\xba\xe2\xa4\x1e\x53\xc2\xf9\x43\x5b\x0f\x33\x84\x65\x7e\x38\x7c\x7e\x50\xb4\x92\xd2\xbc\x7e\xae\x16\xdd\x9e\xb6\x30\x8c\xd8\x76\x1b\x31\x72\x78\x3f\x74\x36\xbf\x71\x52\xa1\xf6\x1e\x02\xaf\xb7\x7b\x67\x57\x49\x7d\x02\x5c\x0d\x59\x8e\xb4\x43\xcc\xfd\xde\xd4\x54\xfc\x50\x9a\x30\xb7\x11\xbb\x6f\xa7\x32\xd4\x1e\x9a\x76\x8e\x96\xcc\x8f\x12\xeb\x4b\x06\x99\x0e\xca\x8c\x39\x19\xf9\x7a\x0b\xb0\x62\xb8\xc0\x19\x5e\xe2\x1c\xaf\xac\xbf\x27\xbc\x21\x23\xbc\x26\xd1\x47\x32\xc6\x41\x80\xf0\x8d\xba\xe6\xd8\x32\xba\x21\x64\x83\xee\x1a\x52\x90\x8c\x2c\x49\x4d\x82\x00\xe7\x6a\x2d\x6f\xc8\xf8\xb8\x95\x86\xdd\xe2\x6b\x89\x98\x2e\xc8\x68\xb2\x70\xd5\x22\x16\xaa\x8b\xef\x48\x39\x5b\xcc\xf1\x07\xf2\xce\x28\x24\xba\x3a\x85\x1f\xb4\x4e\xe1\x3b\x2d\x25\xdc\x84\xe1\x07\x67\xbd\xa7\xd7\x6a\xa1\x3f\xa0\xe4\x9d\xde\x9e\x1b\x2b\x44\x7c\x07\x42\x44\xf9\xbc\xdc\x6c\xb7\x1f\x5c\x51\xe4\x3b\x10\x7d\x6e\x9c\x7a\xd1\x54\x8b\x24\xde\x81\x1c\xf2\x1d\x88\x1e\x37\x61\x78\x73\xa9\x12\xa2\x1b\xf8\x82\x0b\x22\x67\xe1\x83\x87\xd4\x34\x8a\xc9\xeb\x24\x42\x8e\x5a\x71\xc7\xa2\x7a\x5a\xc7\xc1\x44\x51\xf9\x90\x2c\xbf\xb6\xda\xee\xde\xe0\xa2\xcc\xd4\xd5\x66\x90\xd9\x8d\x3a\xbc\xe9\xfa\x4d\x18\x46\xb7\xdb\x6d\x74\xeb\xe0\x8c\x6d\x2e\xfc\x0e\xd4\x6a\x3f\x28\x60\x17\x86\xfd\x25\x80\xd9\x0f\x26\x2e\xb3\x37\x17\x51\x3f\x07\x55\x13\xa3\x13\x88\x3f\x68\x55\x93\x9c\xbc\x43\x66\x5e\x2f\xf5\x54\x68\xfb\x49\x39\x19\x20\x95\x95\x50\xe0\x16\x36\x91\x5a\xdf\x5b\xb3\xbe\x8b\x98\x9c\xa0\xdb\xd9\x22\x1e\xcf\x55\x6f\x0b\x35\xb0\xdb\xd9\x62\xae\xf8\xf7\xf9\x76\x9b\xdb\xd9\x6f\x6b\xb8\x76\x77\x48\x06\x16\x14\xf8\xda\x14\xca\x41\xb3\x51\xe9\x8d\x8e\x10\x6c\x40\x89\xb1\xc9\x5c\x91\x51\x74\x14\x7c\xba\x8a\xc7\xa0\x43\x89\x06\x1b\xab\xea\xe8\x2b\x42\xe2\x36\xb7\x31\xc4\xca\xcd\x9e\x88\x72\xd2\x1f\xa3\x9d\x1c\xda\xe6\x92\x18\xec\xc7\x6c\xe7\x17\x2d\x97\x68\x85\x6f\x90\x3e\x0c\xda\x86\xee\x5b\xb2\x89\xd7\x8e\x42\x53\x5f\x33\x09\xdf\x90\x6f\x2f\x5f\x4c\xd7\x16\x14\xbe\x18\x6c\x50\xb2\xee\x09\x4b\xc4\x45\x02\xbf\xc1\xe9\x34\x8d\x9b\xa4\xc1\x19\xde\xc4\x6f\x8c\x21\x30\xb9\x99\x16\x49\x10\xe0\x25\xae\x61\xb6\xbf\xbd\x24\x2f\xd0\xdd\x9a\x98\xca\x64\x55\x78\x43\x5e\xf4\x14\x54\xde\x90\x6f\x71\x46\x82\x60\xb7\xb6\x0e\xd9\x38\xe6\xa4\x9a\x7d\x8c\xe3\x39\xc2\x29\xe1\x2c\x52\x2f\x58\x38\x58\x08\x52\x17\xfd\x91\x19\xe5\x47\x32\x9e\x7c\x6c\x35\x28\x3e\xca\xd5\xf4\x7a\xdb\xa9\x5c\x22\x23\xaa\xe2\x71\xa7\x62\x87\x09\x90\xfb\xb7\xdc\x88\xb4\x1a\xe2\xa0\x50\xa1\x75\xc4\xc3\x30\x08\x88\xa3\x87\x2b\xb7\xa8\x04\x93\xdb\xad\x87\x37\x1d\x8c\xbc\xed\xb4\xb6\x62\x0f\xcb\x03\x8e\xaa\x69\x35\xa3\xf3\x8e\x3e\x25\x07\xc1\x1f\x43\x77\xd1\xbe\x5b\x38\x05\x3b\x89\xc0\xd4\xe1\x62\x01\x0c\x77\x99\x5a\x2a\x14\xab\xe6\x28\xe9\xaf\xc0\xe3\xd2\x9c\x0c\x2d\xb9\x86\x7b\x1a\x3e\xc3\x2f\xfd\x15\xe4\x65\x18\x34\xfd\x2a\xa4\xd5\xe8\xcb\xa9\x4c\x4c\xc6\x3d\xd6\x4a\xbc\xb5\xe9\x14\x43\x3b\xa4\x3a\x8c\x4b\xb0\x70\xa1\x10\xdc\xa0\xbc\x56\xc4\x98\xcb\x80\xe9\xf2\x48\x29\xe6\x64\x36\x07\x97\xdf\x12\x51\xe1\xad\xea\xec\x4f\x65\x54\xcc\xaa\x39\x66\x51\x85\x70\xd9\x8a\x0a\x94\x85\x4c\xad\x17\x0d\xec\xc9\x00\x20\x6a\xbe\x6c\xa6\x74\x7f\x6a\x2d\xe7\x58\xaa\xd7\x46\xbf\xe6\x72\x41\x0b\x24\x6f\x96\xa8\x70\xdc\xa1\x6f\x88\xca\x31\xd0\xc2\xd0\xd6\x96\xc1\xd8\xe9\x45\x23\x9c\x46\x23\x5c\x58\x07\x19\xd8\xb8\x8a\xb2\x15\xc9\xe9\x66\xbf\xd2\x81\xcd\x63\x8d\x8d\xf4\x96\x33\xa4\x95\x5b\xd1\x60\x8c\x7a\x3c\x5a\xe2\xa5\xea\xfe\x0a\xe1\x8d\xf2\xfd\x0e\x55\x6b\x89\xf5\x46\x12\x1a\x86\xc3\x60\x7b\xa4\x3f\xae\x91\xa5\x2e\x32\x42\x94\x02\xf8\x98\x10\xdb\x0b\x1e\x65\x38\x53\xfc\x52\x73\xf0\xeb\x61\xb6\x42\x71\x1e\x7b\xc9\x8d\x4c\xc4\xba\xd7\x91\xec\xe5\xd8\xed\x25\xf2\x96\xe6\x70\x59\xb9\x4e\xf8\xde\xf6\x8a\xd9\x48\x2e\xe7\x08\x29\xf7\xeb\xce\x18\x00\xd9\xb7\xa3\xf8\xa4\xce\xcb\xca\xe2\xe5\x7e\x1f\x4c\xfd\xde\x04\xc6\x63\xbc\x51\xe3\xba\xfb\x94\xde\xc9\xf5\xc8\x0f\x55\xbe\x42\xbd\xbd\x79\xe9\x6d\x2e\xc7\x7b\x2b\x26\x1b\x1c\x8c\xef\x19\xe7\x43\x07\x64\xc3\xac\x33\x20\xe5\x8a\x84\xba\xae\x0f\x88\xa7\x27\x2d\xc8\x08\xd0\xfd\x8e\x06\x38\x9d\x09\xcf\xbe\x0b\x57\x31\xa8\x83\x5b\xb3\x77\x57\x84\xde\xb6\xbc\x6e\x5b\xce\x24\x66\x57\xd1\x92\xd0\x6e\x5b\x87\x2c\x86\x0c\x67\x7a\x56\xce\x7b\x22\x26\x6c\x98\xad\x9a\xf2\xbd\x24\xbd\x23\x24\xdb\x66\x46\xf7\x80\x79\x56\x67\xca\x0d\x0c\xb8\x0a\xf3\xa5\xfa\x7b\x03\xde\x6d\x98\xeb\x0a\xcc\x56\x7f\xaf\x7f\x24\x47\x9f\x77\x87\xd5\xba\x7c\x55\x96\x5e\x2c\x93\x2e\x14\x2a\x09\x8d\xc5\xa4\xba\x28\x5b\xbb\x2a\xe6\x3a\x76\xa8\xe6\xee\xbc\x0d\xda\x41\x7d\x0d\x7a\xa0\xff\xc6\x22\x86\xb5\x2b\xe2\xc0\x33\xa5\xd7\xb2\x1a\x58\x65\x6c\xf0\x9d\x4e\x1c\x00\x79\xb0\x24\x52\x5d\xdc\x1a\x1f\x52\x50\xd6\x06\x24\xd9\xef\xbc\xd5\x90\xd0\x8a\x18\x66\xd6\xd4\x9e\x71\x9b\xd7\x7b\x9c\x22\x63\xa5\x2a\xda\x5f\xdd\x6c\xd4\x31\x96\xeb\xc4\xe6\x90\x0b\x0d\x41\x39\xdc\x25\xc4\x4c\xd0\xea\xf5\x5e\xc7\xda\x2a\xe4\x9c\x52\x98\x53\xf0\x39\x5b\xb9\x6e\x50\xe8\xdc\xd5\x48\xc4\xeb\xdf\xb7\xc6\x72\xe3\x3c\xb4\xb6\x36\xd3\x60\xcf\x18\xd2\xdb\xe2\x07\xac\xe9\xbc\xef\x70\x03\x91\xd2\xdd\xd3\xa0\x01\x71\x61\x55\x93\x2d\x1e\x26\x30\x1b\x50\x70\x44\x6b\x4e\x1a\x98\xe4\x39\x7d\x8c\x28\xe6\x9e\x0a\xcb\x80\xa4\x83\xd2\x1e\x0f\x42\xb8\xf1\x9a\x62\xbb\x67\x44\x7d\xa0\x6b\x84\x4b\xf7\x58\x00\xbb\x38\x12\x03\xc2\x91\xd5\x41\x19\x29\x20\x4a\x07\xca\x6e\xa7\x9d\x05\x71\x71\xf2\x78\xaf\x72\x2d\x3e\x1b\x6f\xb7\x7d\xff\xcb\x6c\x34\x77\x42\x9a\x6e\x18\xb2\x46\x53\x33\x7d\x0e\xcc\x4e\x8e\x6a\x3d\x20\x0b\x33\x66\xf2\x86\xd8\xb0\xa8\x46\x73\xdc\xad\xd4\xdb\x3d\xf7\x1c\x07\xdf\xb6\xe5\x9e\xc5\x12\xc8\xaf\x5a\xcc\xdb\x1e\xd1\x4f\x39\x37\x72\x52\x5a\x36\x0f\xf6\xcf\x52\xf7\x10\x1c\xee\x43\xe9\x81\x09\xdb\x15\x10\x5a\xb3\xfd\x0d\x43\x38\xdc\xcc\x6c\xe8\xf4\x4d\x77\x49\x47\x7f\xa9\xc3\x90\x79\xc0\xeb\xf2\xf1\xa8\x9d\x8f\x94\xf8\x1f\x3f\x3b\x79\x1c\x9f\x3c\xc6\x35\x49\x27\xf5\x85\xff\x69\x62\x94\xde\xf5\x52\x30\xef\x94\xd7\xb8\x8e\xc9\xc9\x63\x84\x7a\xcc\x6e\xc3\xc6\xea\x87\x1d\xda\x7d\x71\x5c\xe2\x11\x6e\x10\x6e\xbc\x05\xd4\xd5\x12\xd6\x81\x35\xa9\xde\x12\xe0\x9c\xe3\xcd\x86\x15\x45\x84\x76\x8a\x2e\xa0\x03\xc2\xe5\x61\xb7\x5f\x3a\x2e\x13\xfb\x07\x77\xe8\x05\x19\x8f\x90\xab\xcd\xd6\xcb\xb9\x09\x4d\x4e\x3f\xc0\xcd\xb5\xd7\x67\xda\xad\x64\xf0\x18\x3f\x46\x5a\x7d\x49\x8d\x02\x22\x23\x29\x10\x01\xff\x31\xb5\xf3\x21\x5c\x15\xce\x8a\x5c\x73\x5b\xc8\x56\x8b\xc1\x90\xa5\x93\x68\xcf\x6b\x3c\xc6\x23\x09\xf2\x01\xe7\x50\x5b\x69\xaf\xab\xa8\x67\xcf\xb3\x6c\xdb\x39\x41\x58\xcc\x31\x25\xe5\x4e\xd8\xef\xc6\x82\xfa\xc3\x8a\x15\x07\x06\x77\x39\x1e\x39\xbd\xf1\x26\xfe\xb7\xa1\xf4\xbf\x6e\x8f\x5b\x77\x61\x0e\x50\xe4\x03\x0a\x5f\x19\xf8\x2c\x78\x1d\x51\x9c\xe2\x0a\x79\xba\xed\x1a\x8e\xa5\x87\xe0\x18\x37\x1e\xdc\x6e\x18\x19\xe1\x5b\x46\xde\x0c\xbf\xe0\xd9\x01\x6f\xd9\x76\xf7\xb8\xd1\x98\x6f\x59\x2b\x52\xa6\x1f\x8e\x6e\x5b\x62\x4c\xab\x0e\x81\xfa\x2c\x19\x21\x79\xff\x28\x97\xd5\x12\x63\x32\x30\x6c\xa6\xb1\xdd\x40\x89\x88\xd1\x1c\xcd\xf5\xde\x06\x5b\x78\x73\xeb\x5a\x8d\x61\xe2\xbc\x82\x63\x0f\xed\x25\xcb\x75\x80\xa5\x12\x0a\x9a\x96\x7f\xa1\x25\xad\x40\x90\x40\xc6\xd6\x22\x1c\x74\x02\x48\xa5\x89\xae\x15\x8d\x2a\x3c\xd2\x7a\xce\x35\x2d\xc8\x17\xc0\x8a\x53\xe0\x4a\xf9\x4f\x80\x7d\xf5\x96\x45\xea\x4a\x10\xd6\x3f\xdd\x0d\xd3\xa7\x90\xe7\x26\x62\xb8\x70\xfc\x1c\xd2\x0d\x29\x8d\x73\x2f\x41\xcb\x5c\x76\xed\x50\x6c\xfe\x48\xeb\x8f\x82\x58\x4b\xd2\xb9\xb5\x44\x13\xf0\x4a\xab\x89\x2b\xff\x1f\x0c\x0b\x2e\x1f\xf4\xa3\x48\xe8\x0e\xe1\xbf\x28\x2f\x7f\x58\xf5\xb6\xe6\x68\xd7\x73\xe3\x99\x93\x0f\x3c\x72\xef\x7b\x7c\x97\xf1\xb2\x16\x55\x93\x09\x5e\x25\xb7\x0c\x76\xec\xde\x86\xad\xa6\x6a\x70\x6a\x17\x0d\xda\x65\xc0\x62\x20\xe9\xd4\xc4\xf9\xec\x7e\xb4\x3f\x63\x0b\xf9\x71\x7b\x47\xdc\x8b\x13\x8e\xba\xe1\xc9\xe4\x69\xa8\x62\x13\x9a\xac\x45\xa5\x3d\x78\xee\x75\x0b\x57\xc8\xe0\x28\x87\xd0\x13\x0f\x33\xf0\x0a\xa2\x1d\x36\x8e\x9b\x0f\xf8\x1e\x7d\xa3\xe7\xfe\x37\x06\x69\x28\x66\xf0\x0e\x4f\xa7\x22\x11\xca\x1b\x3e\xdd\x6e\xdd\x6d\x60\x82\x65\xa1\x1d\xae\x4d\x9b\xff\x10\x51\xb4\xdf\xee\x8a\xba\xf3\x3a\x42\xd8\xfa\x1e\xf4\xda\x1d\x8c\x7b\xaf\x2a\x77\x77\x08\x1d\xa2\xba\xc2\x2f\x74\xcf\x2b\x2f\x42\x36\x52\x1b\x67\x7f\x9b\x59\x87\x32\xa6\x63\x01\x96\x34\x79\xd2\x1f\xed\xc0\x29\x99\xb3\xcd\x04\x02\xf7\x24\x6e\x4c\xb0\x64\x1f\x46\x7c\xa9\xfb\x45\x31\xa8\x47\x1a\xa5\xe2\x8a\x54\x53\xf3\x2a\xf7\x11\x2e\xd5\x02\x1c\xaa\xc6\x60\x89\xdf\xea\xa1\x98\x72\x14\xe1\xb6\x46\x6f\xea\xab\x69\x99\x94\x6a\xea\xab\x7b\xa7\x5e\x07\xff\xbb\xcf\xd3\xac\xfe\xfc\x25\xb8\x25\x72\xfc\x86\x8a\x30\x54\x7c\x0f\x5b\x83\xca\x92\x74\x1c\x74\xbd\xb4\xbd\x34\xe0\xd0\x2c\x05\x6d\x1b\x7f\xdd\xac\x17\x9d\x80\x8f\xad\x5e\x8f\x93\x4f\x35\xf1\x77\x56\x37\x69\xb1\x1f\x14\xd9\x44\x21\x80\xca\xba\xa0\xa4\x6d\x15\x61\xb0\x24\xdb\x61\x39\x17\xcf\x79\xf3\x80\xf3\x50\x40\xf5\x6d\x38\xe7\xfb\xb2\x41\x86\x1d\x36\x56\x61\x0f\x66\x73\x37\xeb\x0e\x6b\x67\x26\x87\x06\xde\xae\x2e\x8c\x5e\xf9\xc8\xb9\xd7\x1d\x30\x2d\x8c\xfd\x4b\x84\x5c\x17\xfd\xe0\xd4\x5d\x05\x9c\x87\x93\x08\xc1\xe8\x12\x13\x97\x5e\x25\xa9\x97\x24\xa0\x25\x64\xda\x6e\x03\xc1\xd5\x0f\x73\x7e\x21\xa8\x7a\x1b\x5f\x1c\xfb\x51\xf1\xee\x9d\x3d\x5a\x0c\x2b\xb9\x8f\xeb\x1d\xde\x0b\x03\xf9\x50\xa1\x03\x31\x23\x01\x42\xe8\x39\xf0\x41\x84\x3a\x19\xbf\x50\xff\x4c\xec\x6f\x82\xe9\x0a\x48\xe1\xed\x76\x84\x12\x8a\xac\x65\x0d\x42\xd8\x8d\x2f\xf8\x49\x95\xbb\x07\x6e\xbb\xa5\x48\xd7\xd3\x89\x30\x7c\xb0\xaa\x1f\xf6\xab\x12\x61\xe8\x02\x84\x43\x55\xd5\x7b\x75\xa1\xbb\x2f\x75\x99\x5f\x9d\x9a\x0e\x96\xfd\xfc\xf6\x13\x4a\x2f\x8c\x53\x62\xbb\x66\x70\x50\xc4\xde\x04\xed\x77\xc5\xf8\xde\x30\x20\xf5\xee\x80\x31\x3d\x75\x03\x6d\xb2\x59\x39\x27\x3a\xc6\xa3\x9d\x07\x79\xb5\xa9\x8d\xd8\x4e\x2e\x35\xa1\x38\x91\xc1\x99\xc0\xb7\xa7\xa3\xa5\x6a\x79\x61\xd8\x3b\x06\x2a\x72\x42\x0b\xa5\xbf\xa2\x11\xd3\x93\x2b\xc7\x93\xe6\xbf\xb1\x4a\x0e\x35\xde\x4e\x88\x21\x32\x00\x77\x76\xc2\x54\xde\xb7\x2b\xfc\xf6\x4b\x5c\x3a\x4c\x5f\xb5\xca\xd7\xee\xc6\x3b\x48\x88\x9a\x7b\xce\x59\x16\x85\x1a\x54\x07\x22\x97\x9a\x7b\xa1\x92\xd3\xa6\x03\xbc\xc2\x6f\x79\x7a\x51\x4f\x10\x31\x15\x86\x01\xc3\x50\xc2\x76\xbf\xf7\x92\xbe\xa6\x07\x4f\xfd\x7e\x8c\xda\x7f\x59\x9f\xc1\x55\x04\x08\xa2\x4d\xc4\x9d\xfb\x7a\x87\x30\x18\xaa\x30\xab\xd1\xba\xc3\xdd\x08\x99\x0f\xd0\x21\xb3\x39\x76\xbc\xad\x3a\x6b\xee\x38\x6a\x2a\x67\x6c\x4e\xb4\xb1\xd2\x7e\x10\xdc\x52\x56\xb9\xdd\xda\x30\x9f\xfb\xcd\x1f\x3e\x39\x9d\x3e\x98\xf6\x6d\x34\x22\xbf\x1f\x4e\x10\x1a\xf3\x69\xc6\xe7\xbd\x72\xc6\xe7\x44\x61\x3c\xa9\x99\x45\xc1\x93\x14\x66\xf1\x1e\x14\x07\x9c\x01\x6b\x2c\xa7\xda\x19\xc9\x46\x18\xc2\x35\x00\x6e\x98\x7e\xa3\xab\xbe\x63\x2e\x4e\x18\x56\x9a\xee\x16\x6b\x75\x42\x7d\x0a\xa5\xcb\xfe\x45\x15\xd5\xda\x69\x01\xe6\x08\x17\x32\xe1\x9b\x2a\xaa\x41\x25\x42\x91\x6a\xe0\x97\x19\x73\x52\xe0\x20\x05\xa3\xa7\x80\x10\x7d\x22\x33\x42\x9d\xa5\x91\x35\x82\x0d\x7c\xa6\x02\xac\x66\x06\x7c\x5c\x8c\x7a\xe5\x2c\xb5\x10\x66\x39\x2d\x92\x06\x2f\xa7\x4d\x52\x68\x3e\xbf\xfb\xb5\xc1\xad\xaf\x13\x99\xf4\x8d\x3c\xa9\xb4\x03\x48\x76\x6a\x8f\x96\x58\x68\xe5\x66\xd2\x9e\xe5\x09\xbf\x94\x2b\x35\x18\x20\x83\x79\x82\xa3\x83\x5e\x3d\xfd\x51\x1f\xfe\x5a\x93\x07\xd9\x3a\x0c\x7f\xd4\x7c\xc8\x6c\x0d\x00\xa0\x29\x73\xee\xef\x0a\x74\xf7\xab\xae\x46\x05\x92\xd3\xa8\xe5\x03\xd9\x20\x96\x9c\xad\xed\x1e\xb8\xd6\xad\x16\xbc\x22\xe8\x9a\x7f\xbb\x88\x0a\x57\xa7\x8b\xd4\x54\xbc\x80\x1b\x06\x4c\x86\x1c\x18\xe0\x52\x74\x14\x80\xc5\x81\x7c\xfe\x65\xaf\x72\xef\xb0\xa6\x27\xbb\x5c\xd7\x4e\x58\x06\x9d\x0b\x77\x05\x02\x8e\x8b\x3f\x00\x2d\x2a\x45\x02\x11\xb5\x53\xb6\xdb\x38\x56\x9c\x58\x53\xc2\x73\x0b\xa8\xcb\xa8\x34\xbf\x94\x89\x76\x74\x07\x0b\x25\xd4\x42\x54\x3b\x89\xb7\xb5\x5e\x04\xf7\x22\x3a\x74\xa8\x63\x37\x6d\xb8\x4e\x3f\xb6\xb4\x37\x38\xf7\xaf\xde\x3f\x97\x14\xf9\x5e\x2d\x5d\x3a\x5d\xb3\x41\x64\xdf\xda\xd4\x48\x2e\x0a\xee\xa6\x1e\x42\x27\xa9\x61\xc1\x9a\x9e\x48\x6c\xf5\xdb\x0d\xd9\x4b\x7b\x43\x8b\x43\xc9\xdf\x02\xa4\x20\x0e\xa9\x6f\xbe\x5e\xdb\x76\x77\x98\xd5\x9d\xc1\x50\x7f\xc1\xf7\xcb\x10\x62\x41\x7a\x67\xc4\xea\xc2\x39\x30\xc9\x7a\x4d\xe4\x72\x25\xaf\x3a\xf3\x2b\x13\xd5\x49\x38\xf0\x51\x25\xa3\x1d\x20\x93\x7b\x15\xfb\x18\xf5\xa7\x2f\x62\x4f\x40\xab\xe4\x95\x0a\xa8\x5d\x5a\x63\x4c\x64\xa3\x39\x63\xa1\xdb\x56\x99\xf4\xf6\xdb\xcb\xb6\x93\x98\x09\x78\x50\x2f\xd2\xfa\xf0\x75\xa1\x27\xf3\x6b\x4b\x4d\x06\xca\xc6\x5a\x22\xba\x53\xf3\x3b\x09\x40\x0f\x27\xc0\x7b\x94\x74\x49\x94\x83\x48\xc8\xdd\xda\x7b\x26\x41\x6b\x64\xaa\xbe\xb5\x56\xa1\xfb\xf5\x9b\x2f\x1f\xaa\x74\xa3\xed\x45\x25\xfe\x37\x2b\xe7\x80\x08\xbe\xe6\x51\xa5\xed\x40\x21\xad\x0d\x29\x46\x5b\x73\x50\xcd\x64\x03\xdb\xd2\x9e\x95\xc5\x18\x4a\x7a\xcd\x6f\xe8\xff\x1b\xe7\x01\x6b\x59\x24\x5b\x46\x7d\xd6\x8e\xbb\x75\x70\x01\x3e\x0e\x95\x28\xd5\xb2\x67\x39\x38\xb4\x11\xd9\x4a\xcd\x9c\xd2\x0d\xe2\x7e\x20\xb6\x94\x70\x6d\xc7\xcb\x5b\x3b\x5e\x98\x4f\x37\xea\xa0\xb1\xfd\x8d\xf4\xaf\x30\x4c\xfb\x56\x8f\x6d\x6a\xec\xac\x4c\x81\x14\x29\xf3\xce\x5d\x67\xfa\xf5\x1e\x54\xee\x12\x1e\x9a\xfc\x7d\x26\x87\x56\xd7\xa0\x1f\x8e\x7e\x51\xf6\xe3\x10\x56\x11\x9c\xed\x1a\x15\x8a\x30\x64\x9e\xe5\x3f\xb7\xba\x7f\x69\xc1\xae\xcb\x1f\xb5\x15\xbb\x3c\x34\x5f\x2b\x21\x85\x31\x3c\xf7\x7d\xcc\x1a\x0b\x1d\x6d\xf6\x0e\xc6\x04\xc6\x04\x7e\x36\x47\xed\x9c\x1b\xa9\xc7\x33\x31\xd5\xe1\xe5\x19\x4a\x2a\xc3\x2d\xb7\xa4\x44\xd5\x92\x12\x8e\x9d\x7c\x5b\x18\x21\x3c\xc2\xcc\xc8\x4b\x88\xc0\x5c\x45\x76\x68\x95\x2b\x4a\xa2\xfc\x3c\xd0\x96\x29\xdb\x03\x07\xb8\x86\xa3\x1f\xff\xa5\x04\x9d\xc5\x12\x9c\x3b\x68\x15\x50\x23\x08\x01\x07\xb2\x07\x4c\xd7\xdd\xd5\xc1\x6c\x67\x99\x48\x9a\x84\x68\xcf\x8a\x5e\x2f\x5f\xbc\x6b\xdc\xe7\x62\xe3\x17\x79\x9f\xb5\xa9\x7d\x83\x97\x0f\xf0\x94\x70\x85\x2b\xf0\x96\x72\xbb\xa1\xdb\x6d\x00\xf7\x63\xa0\x48\xf2\xcf\xb5\xa6\x62\x72\xc8\xf1\xda\x9d\xeb\xf0\x3a\x11\x56\x2f\x51\x80\xef\x85\xb7\xb7\x1b\x3a\x35\x8b\x96\x08\x84\x5b\x47\x89\x09\x30\x97\xda\x77\xec\x3b\x89\x4b\xfa\x63\xac\x3c\xa1\xab\x8c\xea\x37\xde\xf3\x9c\xad\xbe\xee\x25\xef\x7a\x9d\x41\x53\xe2\x0c\x5b\x6e\xdb\x56\x01\x13\xed\xb0\x75\x45\xfb\xec\x50\x40\x2c\xa0\x77\x0c\x6f\x29\x72\x6b\x42\x87\x9d\x85\x3a\xce\x46\x7c\xaa\xc8\x11\x79\x48\x0a\x68\x62\xf7\xaf\xd2\xf6\x63\x5a\xbd\x93\x2a\x93\xe7\x3d\x3f\x31\x97\xe6\x8b\xd0\xbb\xdc\xf8\x84\x51\x92\x19\x99\x49\x3b\xc5\x71\x48\x24\x3b\xb6\xbd\x7d\xe1\xcd\x89\xcb\xb2\xec\x39\x24\x00\xf5\x7c\x16\x59\x26\xb8\x0e\xba\xa0\x6d\x61\x3c\xef\xd0\x56\x4c\xf3\xe9\x9e\xb4\x6a\x43\x46\x68\x4f\x5a\x4a\x7f\xac\x01\xa5\x54\x46\x74\x1f\x54\xfc\xca\x4b\x48\x56\x60\x8d\x90\x46\x2b\x6b\x82\xd6\x98\xcc\x64\xc2\x1b\xda\x0f\xc4\xfa\xe1\x56\x49\x97\x44\x0c\xb3\xd5\x76\x5b\x85\x61\xbf\x6a\x1d\x6a\x6d\xb7\x9a\xe2\x6f\xba\x73\x6a\xb3\xec\xe2\x98\x81\x07\x7b\x40\x5a\x9e\x15\x45\x67\x56\x8d\x08\x71\x36\xdf\x9f\xad\x83\x70\xed\xf7\xec\x1a\xed\x6c\xd1\x90\xd0\x10\x22\x52\x76\x17\x52\x4c\x07\x11\xc2\x74\x87\x37\xbc\x7e\x59\x71\x45\xd7\xec\xef\x66\x8f\xad\x8e\x4b\x72\x88\xd2\x36\x97\xcf\x03\xc3\xb0\x0a\x0a\xcc\xe5\xb5\xc7\xe0\x08\x91\x5f\x5a\xef\x0e\x82\x50\xdc\x1f\xf5\xe8\x80\x70\x1c\xc7\x95\xec\xa1\xd9\x66\xc0\xb2\x17\x48\x47\xdf\xfa\x28\xbb\xdc\x65\x93\xaa\xe3\xd7\x39\x71\xd9\xaa\x67\xa2\x0d\x68\xff\x43\x30\x14\x50\x9c\x5c\x5d\x8c\x5a\x0f\x38\x37\x6d\xfc\xa2\x4f\x1d\x9f\x33\x33\x7a\x7f\x7b\x68\x85\x88\xb5\x6a\xb9\x19\x2e\x0c\x48\xec\x70\xc6\x37\x87\xb0\x4c\x2d\x14\xfc\x54\x89\x4a\x57\xa2\xb6\x57\x40\x0f\xa3\xe5\xcf\x1f\x96\x0d\xbe\xe5\x1b\x2c\x5c\x39\xa1\xf0\xe5\x86\xf2\x23\x2d\x5a\x3e\x84\x70\x84\x74\x40\x43\x78\xd8\xf4\x17\x74\x23\x56\x64\x0f\xc9\x86\x64\xa8\xc9\xa0\xd9\x91\x91\x25\xb4\xae\xd7\x61\x72\x54\x58\x88\x2f\x78\xe6\x5f\x5c\xdb\x6d\x04\x86\x86\x3d\x07\x23\x57\x63\x3d\x2c\xf8\xe9\x19\xa5\x52\xb3\xff\xe1\x34\x2b\x6e\x21\x75\x14\x9e\xfb\xe0\x91\x03\xe2\xae\xf2\x0b\x25\x80\x95\x3f\x0d\x50\xeb\xae\x09\xae\xc0\x5c\x8c\xe7\x86\x44\x71\xe7\xff\xf0\xb4\x53\x7d\x1b\xc9\x71\x82\xb9\x9f\x21\x24\xdc\x49\x42\xd8\xaa\x23\xbd\xa7\xb9\xc4\x5d\xda\x37\xd7\x06\x32\xe7\x59\x52\xe2\xb6\xc2\xc4\xad\x7d\x87\x94\x13\x34\x28\x03\x59\xa1\xd3\x26\xbc\x46\xd2\x1f\xdd\x5b\x72\x8e\xef\x15\x3d\xba\xae\x34\x2b\x03\x79\x4b\x22\x8c\x36\x92\x75\x40\xd9\x7a\x62\xd7\x0e\x28\xc1\x11\x48\x9b\x26\x14\x43\x67\x43\x21\x9c\x87\x61\x04\x41\x20\x11\x8e\x53\xb0\x8c\x04\x79\x45\xfb\x0b\xf0\x0b\xd4\x2b\xad\xcf\x30\x98\x84\x1a\xe1\x56\x25\x6f\xb7\xdb\x45\x25\x7e\xa1\x1d\x03\x01\xb8\x6d\x4a\x39\x07\xdd\x1d\x24\xa1\x80\x2b\x8d\x7f\x03\x32\x20\x15\xfb\x09\x3b\xb3\x8d\x0e\xe8\xfc\x74\x23\x98\x08\x2f\xd0\xcc\x7b\x9a\xcf\xc4\x1c\x3c\x7f\x11\x47\x5f\x52\x96\x30\x8e\x6b\x31\xa8\x5f\xda\x8e\xa9\xce\xe2\x6f\xcb\xc8\x76\x5c\xeb\xaa\xab\xc0\xb8\x66\x87\xf8\x5b\x44\xdf\x04\x33\xe5\xb2\x76\x3f\x76\x4b\x65\x2c\x7c\x58\x8e\x76\x08\x2b\x0b\xb2\x83\x82\x79\x3f\x4a\x02\x39\x44\x32\xab\x8d\xee\xd3\xc9\x7b\x19\x55\x32\x30\xd1\x41\x4c\xfe\xca\x9c\x5d\x1f\x30\xbf\xf3\xc5\x7b\xdf\xf0\xfc\x5e\x89\x98\x3c\x4e\x8a\x53\x94\x33\xe1\x4a\xb7\xfc\x6c\xd9\x7a\x87\x5b\xd6\xe5\xbd\xcc\x05\x7d\x14\xa7\xda\x10\x36\xf2\xce\x67\xf2\x35\xb7\x32\x3f\x0b\xed\x1f\x52\xe3\x7c\x43\x37\xca\x4e\x72\xb7\x43\xd8\x55\x21\x18\x52\x13\x8a\xc8\x4b\x95\x33\xa2\xcc\x02\x19\x09\xe4\xcb\x91\xc2\x5f\x8f\x14\x8a\x7e\x24\xaf\x81\x23\x3b\xd4\x23\x47\xed\x20\x70\x22\xd1\x5b\xfd\xaf\x05\x3b\x62\xe5\x91\xdb\x02\xf2\x9a\xeb\x38\xa8\x5b\x30\x14\x86\xd7\x3c\xba\x66\x78\xc1\xd0\xc5\x28\x0c\xa3\x37\x6d\xee\xd9\x82\xcd\x0f\x45\x6a\xdc\x1f\x3e\xd5\xca\xa0\x30\x0d\x10\xb0\xae\xba\x06\x2b\xaf\x1a\xed\x76\x91\xdb\x03\x59\x27\x42\x4e\x70\x23\x6b\x77\x15\xb5\x6e\x56\x22\xb0\x86\x53\x0e\xeb\xba\x27\x4e\x71\x8b\xcb\xbd\xe3\x66\xfd\xa1\x98\x4f\xb3\x14\x28\x6a\xe8\x4f\x9f\x30\x83\x0c\xf2\x30\xac\x1d\xa0\xd6\x93\x48\x5b\x23\x61\xa9\xca\x89\x1b\x84\xa9\xfe\x59\xe2\x06\x82\x23\x20\xe3\x52\xcf\x73\x0a\xfb\x81\x39\x51\x04\xb2\xf5\x7e\x18\x9b\xb7\x2b\x56\x1f\x19\x73\xb7\x23\x56\x1f\xa5\x45\x45\xd3\xfc\x56\xae\x50\x53\xd3\x61\x80\x7a\x00\x59\x88\x00\xcb\x0f\x42\xf1\xf7\x11\x45\xf8\x99\x7c\x1c\x0e\xdf\xb7\xdd\x7e\xe1\x7f\x5c\x83\xf7\x40\xf7\x7e\x91\x68\xb4\xd3\xc9\x17\xcc\x09\x2f\x3e\x20\x9a\xf3\x8e\x2e\x46\xdb\xad\x90\xa8\x3f\x20\x09\x07\x7a\x4e\x2b\x2a\x7b\x5c\xf2\x23\xd9\xfe\x51\x10\x47\x22\x36\x85\xe3\x40\x8e\x40\xac\xa8\x1d\xdc\xd0\xd9\x81\x15\xa1\x93\xbe\x8a\x30\x52\x4f\x3c\xf4\xd3\x23\x55\x7e\x4b\x35\x4b\x5c\x70\x74\x57\x11\xa6\x41\x9e\x18\x10\x6e\x9d\x49\x6b\x7d\x5c\x31\x77\x62\x73\x74\xcc\xf7\x94\x54\xc4\x77\xe9\xfa\x5b\x21\x68\xa8\xf5\xf4\x0f\x08\x59\x8f\x11\x1b\xb5\x28\xe2\x84\x3b\xce\xd2\xb2\x15\xb8\x76\xb1\x64\x80\xf3\x59\xa8\x8f\x1a\xf3\xe7\x08\x5b\x0c\xdf\xf6\xf5\xcd\x5e\x5f\xbb\x5d\xf4\x1d\x05\xb5\xc1\x41\x94\x5d\x4f\xa7\xba\x8f\x9e\x8b\x10\x31\xa0\x8e\x32\xaf\x8b\xff\xd3\x49\x39\x29\x89\x51\xe0\x43\x65\xab\x3d\xea\x04\xdc\x60\x8e\x9f\x48\x62\x95\xf8\x0e\x3a\x3d\x6f\x75\xfc\x70\xa5\x42\xbd\xd9\xd0\x69\x25\x31\x7a\x80\x93\x72\x22\x48\x89\x9d\x76\x5d\x8f\x20\x65\xbb\x0b\xd8\xbc\x4f\x04\xb8\x2e\xac\x62\xe2\xa5\x7b\x3b\xc3\x6c\x81\x58\x68\xf5\x09\xdb\xf5\xf7\xcc\x77\x99\x0d\x9f\x7b\x34\xc9\x79\x47\x71\x70\x4f\x15\xd1\xb3\x09\xd8\xdb\x97\xed\x64\xc2\x96\xa4\x84\xf5\x5a\xd7\xe7\xb0\x2f\x95\xc9\x80\xd3\xcb\xd6\xeb\xb9\x52\x7e\xec\x6b\x07\xde\xc8\x93\x26\x74\x82\x33\x96\x86\xc4\xd5\x5f\x1c\xa5\x2d\x68\x3b\xd5\xaa\x86\x62\x40\x52\xdb\x40\xec\xec\x83\xef\x3a\xb6\xd5\x23\x5c\x49\x3a\x07\x94\x56\x90\x59\x29\x4b\x06\x1e\x6c\x9c\x91\xca\x36\xae\xc4\x6a\x84\x9a\x66\x5b\xb3\x08\x1b\x93\x95\x13\x43\xd2\x4e\xf8\x84\x93\xa8\x22\x1c\xb9\xcb\xac\x1a\xe3\xf7\xcf\xb7\xa4\xe7\x9d\xf9\x06\x7a\x9e\x90\xaa\x6d\x32\x35\x4d\x5a\xde\x83\x1d\xee\xf7\xcc\xf5\x23\x0f\xb6\x60\xbe\x06\x8b\x41\xe3\x95\x99\xd8\x32\x35\xc7\x47\x12\x10\xb6\x96\xb7\xad\x0d\x09\x20\x2f\x26\x8e\xae\xc6\x65\xdc\x57\x45\xb4\x8c\x8f\x47\x6d\xbc\xe8\x6f\x78\xfe\x96\xad\x69\x1b\x22\xfe\x0d\x2d\x20\xc1\xc9\x63\xa4\x22\xad\x90\xa4\x0d\xf6\xec\x48\x48\xbc\x3c\xad\xd0\x04\x6b\x02\xc8\x97\xe7\x78\x92\x04\x42\xb7\x5b\xc7\xe3\xf3\x73\xef\x1c\x28\xe9\xee\xda\xc4\x8d\x01\xf9\xee\x37\x55\x24\xb4\x78\xf7\xdb\x36\xa4\x8d\x0a\x29\x63\x99\x5c\x5f\x30\xe0\xc4\x3a\xe1\x6e\xda\x48\x36\xf1\x18\xe1\x7d\xcc\xf2\x37\x4a\x68\x64\xd3\x01\x36\xdf\xd8\x0d\x3b\xa1\xad\x1e\x38\x5b\x46\xfd\x1b\x89\x74\x69\x81\x9a\xd1\xb0\x1d\x6e\xf8\x26\x72\x7d\x09\xfc\x7c\xc0\xd5\x94\xc6\x39\x7b\xcc\x97\xd5\x11\x45\xb9\x73\x9c\x92\x58\x5e\x73\x5f\xa4\x02\x2c\xe6\x22\x66\x96\x88\x94\xdb\x2d\x73\xd7\x83\x88\xa1\x92\x72\x87\x61\xfb\x2b\x0a\xe2\xa0\xfd\x62\xc2\xb9\x8f\x54\x84\xb0\x35\x28\xc3\xb7\xbb\xe2\x32\x1d\x78\x76\x97\xba\x6f\xc0\x4c\xfc\x82\x16\xe9\xed\x76\x1b\xfc\xf9\x60\x75\xe0\x54\x86\xdf\xe3\xb3\x78\x1a\x7d\x63\x24\x46\x08\xdf\x70\xf3\x13\x25\x9e\x44\x33\x0c\xfb\xed\x37\x3d\x93\xd3\x36\xc5\xcf\x7c\x39\x86\x10\x89\x20\xc8\xf4\x3e\x0c\x4e\x8c\x58\x73\x6a\x84\x54\xb0\x0a\x5e\xbb\xda\x0b\x66\xc4\xb0\x33\x9b\xad\xfd\xc5\x0d\x8f\xb8\x16\x40\xd6\xa8\xb7\x1f\xc4\x08\x2c\x58\xdb\xb4\x5a\xa6\x4d\x21\xbc\x14\xec\xd3\xc4\x16\x56\x77\xa0\xde\xde\x8e\x9e\x7a\x23\x9b\x60\xaa\x37\x00\x60\x9b\x30\x6c\xac\x34\xf6\x2b\x39\x59\x35\x2d\xb0\xce\x81\x39\xb9\xd3\x15\x26\x33\x5d\xd9\x1c\xb7\x07\x2c\x61\xbe\x64\x52\x8f\x5a\x5d\xe6\x13\xe6\x4d\x1b\x6b\xe1\xc2\x04\xe9\x4f\xf5\x8a\x2d\x45\x84\x74\xc1\xd9\xa8\x95\x0b\xfb\x19\x76\x6e\xcd\x60\x50\xe1\x1c\xf2\x38\x66\xfe\x19\xc7\xde\xce\x22\xcc\x03\x36\x69\x3b\xf1\xcc\x05\x33\xd8\xdb\xd0\xac\x03\x5d\xcc\xb6\xc3\xf5\x76\xab\x3c\x12\xe9\x0d\xaa\x62\xbc\x39\x38\xe4\x57\x1e\x44\xb9\xe1\x10\xf9\x21\x0c\x2b\x3d\x32\xf9\x8b\xfe\xd2\xa4\x45\x1d\x51\x08\xf8\x68\x02\x99\xd9\x0a\xbe\xd8\x3b\xa9\xdd\xd8\x2a\xe0\x57\x41\x63\x3f\x56\x8e\x62\xd4\x44\x2a\x84\x1d\xd5\x2d\xc5\xc2\x51\x98\x2b\x2e\xdd\xf0\x6d\x95\xa4\x6e\x1d\x06\x68\x18\x46\xda\x13\x45\xb7\x39\x72\xb7\x43\x68\xc6\xe7\xc4\xcb\x2f\x71\x35\xee\x45\x7c\x7b\x6d\xd0\xa1\x3e\x3d\x8c\x02\xe1\xfb\xa2\xd5\x69\x86\xef\x9e\xbb\xf3\xa9\x90\xa4\x86\xeb\x79\x17\x21\x25\x6f\xd0\x11\xcb\xaa\x36\x62\x99\x98\x1a\x96\xca\x54\x80\xb5\x75\xe2\x78\xc0\x7d\xc5\x0e\x98\x45\xec\xe9\xcd\xd9\x9b\x96\x5b\x09\x23\x37\x70\x55\xfb\x9e\xac\xa6\xdf\x50\x2f\x64\x2e\xdd\x3c\xe7\x9b\x5b\x65\x5b\xc0\x51\xc2\x51\x2b\x73\x54\xf7\xb5\x52\xce\x02\xcb\x2a\x5d\x87\x3d\x51\xf5\xae\x1b\xd9\x35\x75\x43\xba\x2a\x97\x53\x38\x23\xe9\xac\xd1\xc4\x99\x2a\x0f\xb7\x54\xa6\xa1\x02\x4f\xb2\xa1\xe0\xea\x82\x52\x86\xaf\x3b\x84\x5b\xc4\x71\x29\xa9\x8f\x0c\x45\x05\x59\x1a\xd7\xc7\xff\x54\xab\x1b\x5d\xe5\x31\xfa\xd3\x31\x52\x34\xad\xc0\x4a\x3d\x38\x2a\x66\xe3\x39\x42\x97\x83\x71\x18\x46\x37\x3c\xaa\xd1\x6c\x39\x27\xd9\x6c\x39\xc7\xca\xfc\xf1\x48\xfe\x96\x74\x9e\x0d\xcc\x63\x67\xf9\xa5\xb3\x73\x2b\x8d\xb3\x4d\xd5\xbf\x98\x94\x89\xb8\x30\x62\x04\xcd\x3c\x06\x1b\xf7\x6c\x45\x5c\x3a\xf1\x57\x76\x9f\x53\xe0\x07\xa2\x8c\x29\x33\x13\xbb\x56\x77\x7c\x98\xf1\x0d\x03\xa6\x5f\xa4\x32\x11\x6e\xd7\x2a\x42\x48\x7f\x26\xfd\x51\xbb\x00\x4a\x20\xc2\x3b\xba\x60\x75\x1c\xa3\x97\xcc\x56\x3d\xab\x8d\x02\xa5\xee\x23\xee\x7c\x04\x2d\x29\xed\x05\x1b\x36\x82\xac\xde\x54\x6d\x40\xf3\x7e\xf4\x12\xfb\x4d\x47\x31\xa9\x2e\x1a\x27\x72\x9e\xfa\x4d\x56\x34\x72\x52\xe3\x12\x37\xc6\xaf\x01\xc2\x8d\xbc\x02\x20\x83\xc1\x21\x4a\x48\x93\x1f\xad\x99\xba\xb8\x20\xf6\x3b\xba\x4b\x49\x7f\x6c\x58\x64\xe9\x76\x1b\xd9\x98\x50\x23\x15\x2d\x9e\xc9\x75\x71\x30\x88\xcf\x7d\xca\xc9\x41\x5c\x4a\x62\x51\x17\xa0\x23\xdd\x40\x5b\x51\x39\xa8\xd0\x60\xdc\xfb\xd5\x5c\xc3\x3a\xf0\x0b\xfe\xb5\x55\xd2\xd0\x49\x3b\xc6\xa3\x5b\xed\x61\xe9\x07\x46\xde\x0c\xe9\xbb\x4d\x45\x15\x02\xb0\x4c\x9b\x42\x90\x8e\x59\xad\xf7\x71\xda\x4d\x88\xe4\xbd\xad\x36\x29\x18\x17\x90\xfe\x78\x87\xbf\x54\xf5\xd6\x82\x6f\xbe\xab\xf8\x26\xbd\x56\x57\x88\x5f\x71\xe7\xeb\x74\x2f\x05\xaa\xce\xd2\x32\xa3\xc5\xe7\xcd\x62\x51\x80\x0c\xb9\xe5\xd2\xfc\xdd\xf5\xff\x60\x38\xe2\xb9\xea\xd5\x77\xaa\x8f\x34\x9f\xee\x27\x25\x23\x42\xbc\x2e\x83\xc2\xe0\x2f\x6d\x97\xbd\x7e\xfe\x20\x5b\xc1\x5f\x82\xea\xbe\x13\x10\x81\x79\x61\x93\x44\x5a\x5d\x53\x10\xcd\xd4\x55\xa6\xbd\x07\x39\x81\x0e\x3c\xaa\xe0\xc3\x8a\x65\xab\x7d\xaa\x60\x1c\xd2\xe1\xa2\x11\x82\x97\x53\x41\xc6\xc9\x89\xfb\x7a\x9a\x3c\xb2\xaf\x40\x40\x9c\x20\x84\x6f\x00\xc1\x13\x55\xf1\x35\xbd\x0d\xc3\xb1\xa1\x2d\x4e\x25\x29\x21\xdb\xfa\x49\x0e\xc8\x9b\x74\x47\xbf\x39\xcd\x73\xc0\xf9\x5e\xb1\x5a\xc8\x0b\x1d\xed\x27\x01\xc5\xdf\x77\x62\xbd\x9a\x40\xed\x90\x0b\x79\x6f\x51\xc0\xcb\x20\x06\xcf\xe0\x8e\xa9\x1e\x1d\xbe\x53\x02\x6b\x08\x33\xee\xbc\xc9\xab\x6e\x12\x95\x33\x31\xdf\x6e\xe1\x9f\x23\x28\x00\x96\xec\xd7\xf2\xce\x68\x67\xfb\x4f\x7b\x7e\x90\x6c\x55\x72\x12\xec\xcb\x4c\x58\xae\x45\x35\x85\x80\xe4\x1a\x29\x1a\x4d\x8d\x43\x2a\x94\x7c\xcd\x92\x72\xbb\xfd\x9a\xc1\x24\xfd\x0d\x26\x69\xb9\x3c\x3c\x4b\x8a\xdd\xd9\x9d\xa8\x03\xa9\x07\xe6\x4a\xc5\x02\x33\x73\xe5\xbc\x75\xe6\xea\xa8\xbd\x2a\xf5\x30\xfb\x0a\x2a\x4c\x98\xeb\x60\x09\x82\xde\x80\xda\x2e\xa9\xd0\x9d\xb5\x90\x64\x78\x6c\x19\xf0\xf8\x1f\x72\x30\x35\xbb\x2e\xd3\xe2\x60\xf0\x38\x53\xbf\x0a\x7f\x68\xc4\xae\x0e\x37\xe6\x59\x55\xa5\xb7\xce\xbd\x0b\x53\xa6\x2e\x5d\xcb\x3b\xc5\x27\xe8\x50\x48\x9e\x6a\xc6\xe6\x9a\xdf\xaa\x5c\x80\xa1\x1d\xfe\x2b\xd3\x9e\x16\xcc\x3a\xfe\x1b\x3b\xd4\x9d\xb1\xdf\x1d\xb5\xc6\x98\x7d\x6a\x6f\x7a\xbf\x8a\x69\x49\x7e\x15\xc3\x5c\xd2\x2f\x34\x7f\x9e\x16\xc5\x22\xcd\xde\xd7\xc9\x5f\xd9\xb4\x24\x7f\x65\x49\x24\x9f\x92\x6c\xae\xa9\x90\xc8\x29\x6f\x44\x44\x39\x1e\x39\x76\xfa\x4a\x45\xb9\x72\x63\xe1\x68\xfe\x56\x1a\x55\x33\x3e\x47\xbe\xf7\x95\x43\x5c\x67\xea\x0e\x9f\x79\x30\x9d\x72\x2b\x34\xff\x2b\xeb\xd9\x69\xb9\x3f\xfc\x20\x9d\x89\xb9\xeb\xc7\x5d\x70\x5f\xc7\x65\xcf\xc4\x50\x9d\xfd\x3b\x70\x75\x2f\xb0\x0f\xa1\xf7\xd4\x31\xbb\x00\x51\x82\xd5\x1d\xc2\x80\x70\x57\x12\x59\x06\x6b\x42\x88\x28\xf5\x77\x16\x09\xc0\x9f\x33\x9e\xd3\x35\xb8\xe7\xfd\x0a\x62\xb4\x3b\xde\x95\xb9\x0b\xdd\x0e\x1f\xcc\x61\x06\xe6\x2e\xcf\x32\xc1\x6e\x98\xb8\x55\x51\xf5\x1c\xe6\xac\x56\x17\xf2\x73\x7d\xe9\xc2\x8e\x87\x32\x48\xe8\x71\xc8\xcc\x50\x87\x1e\xae\x40\x9d\x1e\x49\x92\x00\x56\x14\xde\xda\xfe\x97\xdc\xa3\x65\xd5\xae\x44\x16\x72\xb4\x19\x19\x37\x17\xa2\xd9\x91\x1d\xe8\x8a\xee\x7e\x62\x56\xa9\x09\xed\xb0\x97\xb5\x03\x63\xd0\xdd\xdf\xdc\xbc\x2a\xfe\x00\x27\xa7\x23\x9c\x72\xf2\x66\xf8\x5d\x5a\xd7\xe4\x4e\xf0\x37\x3a\x9c\x41\x57\xb8\xe1\xb8\x4b\x86\xbc\xc1\x6e\x87\x6b\x4e\xee\x94\xf0\x3b\x91\x77\x70\xc3\xc9\x9d\xb1\xfc\xfb\xf3\x9a\x37\x35\x0d\x76\xb8\x70\x12\x63\x09\xc6\x02\xe7\x52\xcb\xb8\xd9\x21\x4c\x39\x7f\xdb\x65\xdc\x3d\x7f\x9d\x88\x43\xe8\x0e\x54\x99\xcc\x89\xd2\x05\x5b\xe3\x59\xe7\xb4\x09\x4c\xb5\x37\xeb\xa5\x1c\x5d\xc6\x9b\x52\x3c\xe7\x45\xb3\xee\x5e\x4f\x2a\x5a\x9d\xbd\x15\xe5\x0a\x2a\xca\x84\xa6\x95\x44\xaa\x67\xff\xbc\xaa\xaf\x9a\xd1\x28\x1d\xcd\x01\xa5\x86\x8f\xc6\x4f\x50\x7b\x98\xc1\x49\x77\x4a\xd8\x76\x3b\x32\x41\x49\x6a\x42\x95\x26\xe1\xb7\xcb\x28\xb8\x12\x81\x56\xd2\xaf\x2f\x46\xdb\x6d\x7d\xd9\x86\x7a\x4e\xe3\x48\x0c\x38\xea\xa5\x31\xa9\x07\x1c\xa7\x31\xa9\x06\xe9\x67\x15\xe6\xa4\x8e\xc7\xbb\x1d\x5e\xc9\x01\x2c\x59\x99\x1f\xec\x7f\x97\xf2\xb1\xcd\xf3\x6e\xf3\x25\x82\xd0\xd8\x1c\xb8\x2a\xd4\x0b\x67\x92\x12\x3e\x50\x0a\x26\x84\xb4\x91\xe0\x59\x9c\x3a\xdd\x2c\x63\x4b\x7e\xa6\x58\x0c\x54\x8c\x3c\x16\xcb\x92\xb8\x24\x3c\x1e\x63\xf9\x56\x0d\xd8\x67\x15\xba\xf4\x02\x59\xe3\x0d\x27\xb3\x20\x70\xae\xd7\x35\xb7\x3c\xaf\x0d\xb7\xce\x02\xe8\x04\x6d\xb4\x23\xa9\x1b\x1e\x6d\x38\x8a\x41\xa8\xa7\x2b\xda\xf0\x19\x75\x44\x1d\xc0\x1c\xb3\xf8\xd0\xac\x35\x66\x9a\xc3\xce\xbe\xe5\x5d\xdc\x0f\x14\xf5\x23\x17\xa5\xba\xe6\x87\x04\xf8\x1e\x15\x0b\xaa\xb9\xd5\xdc\x09\xcc\x6d\xd8\xab\x03\x87\xd9\xb8\xd8\xab\x68\x36\xef\x7a\xdc\x29\xe3\x18\x55\xb3\x72\x4e\x94\x62\x2f\x2e\x0f\x05\x60\x7c\x27\xcf\x83\x23\x5b\xe3\xce\xed\x65\xb2\x7f\xbb\xf8\x99\x66\xc6\x6f\xe4\xb4\x22\xde\x7b\x44\x51\x12\xbd\x73\xce\x10\xa1\xb8\x02\x81\xf6\x3b\x0e\xc6\x72\x2f\x38\x84\x53\x71\x19\x90\x2f\xf8\xde\x4e\x02\xc9\x16\x90\xe8\x77\x3b\x84\x29\xea\xef\x89\x4c\x4b\xa4\x0d\x1c\x2b\xa5\x25\xb8\xf7\x11\x80\x1e\xf1\x62\x8f\x3b\x08\xea\xb7\x0e\x08\xff\xa4\x5b\x77\x6c\x6b\xb9\x5f\xec\xaa\x38\xc5\x68\xb7\xdb\x4c\xef\x59\x7e\xc6\x4b\x30\x7c\x25\x23\xec\x24\xbd\x28\x73\x42\x87\x37\x12\x31\x37\xde\x87\x12\x79\x4a\x3a\x95\x88\xea\xd6\xdd\x47\x19\x10\xdd\x02\xdd\xed\xb4\xa6\xcd\x1b\x4e\x8e\x67\x12\x54\xe4\xcb\xab\x66\xf4\xf8\xe9\x99\x7c\x9e\x8f\x06\xf2\xdf\xf2\xd1\x55\x33\x7a\x32\x82\x97\x27\xcb\xe5\x55\x73\x3a\x7a\x24\x5f\x4e\x47\xe7\xf0\x92\xaa\x17\xf8\xf2\x08\xb2\x3d\xca\x17\x8f\xaf\x9a\x47\x14\x5e\xce\x97\x59\x76\xd5\xa4\x19\xbc\xe4\x67\xe9\x72\x7e\x8c\x3f\x4a\xb0\xc0\xea\x1f\x79\x95\x3f\x5f\xb9\xa1\xb5\xec\xb1\x38\xbe\xfa\x60\x1d\xf4\x6f\xb7\xf4\x32\xf8\xf7\xff\x16\x00\x8d\x2e\xf8\x0f\x9b\x0d\xad\x9e\xa7\x35\x8d\x90\xd2\xea\x79\xc5\x3f\x98\x84\xed\xf6\x0d\xb7\x7e\xfd\x9d\xe3\xf2\x8c\x77\x58\xb0\xfd\x7e\x24\x86\x35\x6f\xaa\xcc\x85\x34\x57\x1f\x02\xc5\x65\xf8\x28\xd7\x18\xae\x72\x5d\x59\x02\x29\x8e\xac\x8a\x7b\xa2\x1a\xb9\xe9\xc0\xdd\xd0\xde\x66\x13\x28\x0c\x25\x82\xd2\xaa\x75\x5b\xbd\x5e\x59\xf2\x3b\x8e\xbf\xd7\x73\x7f\xaa\xa6\xf8\xf4\x89\x5c\x82\x47\x4f\x4f\x07\xf0\xef\x1c\x56\x62\x0c\x2b\xb1\xc8\xe1\x09\x4b\x94\x8d\xe1\x79\x02\xcf\x47\xf0\x7c\x0c\x4f\xb9\x74\x4f\xc6\x6a\xb5\xc6\xa9\x7c\x3e\x5a\xc0\xcb\x63\x2a\x9f\x67\x23\xf9\xcc\x9f\x40\x52\x9e\xc1\x93\xc2\x0b\x85\x75\xa6\x50\x9e\x3e\x85\x67\xaa\x3e\xc8\x66\xcf\xc6\xb2\xc1\xb3\x53\xa8\xf8\xec\x91\xac\xf8\x2c\x85\x5a\xce\x16\xb2\xca\x33\x0a\xad\x9c\x2d\x4f\xaf\x9a\xd1\xd3\x31\x7c\x79\x3a\x3e\x87\x27\x7c\x79\x7a\x02\x5f\x4e\x1e\xab\x97\x33\x78\x9e\xab\x17\xd9\xc0\xb9\x1a\xfe\xf9\x48\x0e\xe9\xfc\x54\xf6\xec\xfc\x11\x8c\xfb\xfc\xd1\x53\x78\x42\xae\xc7\x2a\xe9\xb1\x1c\xec\xf9\x13\xc8\xfb\x44\x56\x7c\xfe\x54\xf6\xef\x7c\x01\xe5\x16\x72\xa8\xe7\x99\xca\x0a\xb3\x73\x9e\x41\xe9\x5c\x36\x7b\x4e\xa1\x18\x95\xc5\xd2\xd1\x18\x9e\x32\x25\x85\x46\xd3\x47\x90\xf2\x08\x52\x1e\x9d\xc1\xf3\x29\x3c\x61\x18\x29\x74\x23\x7d\x0c\x99\x60\x32\xd3\x33\xf5\x5b\xf6\x28\x85\x5e\xa4\x4f\xa1\x30\xf4\x25\x55\xbd\x48\x61\x75\x52\x58\x9d\x34\x83\xfa\xa0\x47\x29\xf4\x25\x85\xbe\x2c\xa0\x2f\x0b\xe8\xc5\xe2\x94\xc2\x53\xae\xf5\x42\x4d\xc3\xe2\xd1\x23\x78\xca\x62\x8b\xc7\x4f\xe0\x29\xab\x5b\xc0\x2c\x2c\x60\x16\x16\xd0\xf2\x02\xc6\xbf\xc8\x46\xf0\x84\xfc\x30\xf0\xec\x14\x56\x3a\x7b\x34\x82\xe7\x13\xf5\xf2\x14\x9e\xa9\x7a\x91\x99\x33\x98\xdc\x0c\x9a\xc8\xa0\xf2\x0c\x2a\xcf\x60\x40\x19\xec\xbf\x0c\x76\x5e\x96\x41\x9e\x0c\xd2\xa1\xa1\x2c\x87\xb2\x39\xa4\xc3\xd8\x32\x18\x5b\x0e\xe3\xc9\xd5\x48\x72\x18\x49\x0e\x8d\xe5\x30\x86\x1c\x9a\xc9\xa1\x99\x3c\x4b\xe1\x29\x9b\xc9\xf3\x13\x28\x90\x43\x01\xa8\x35\x07\x10\x45\x4f\xc7\xf0\x7c\x34\x80\x7f\xb2\x04\x7d\x74\x06\x2f\x8f\x64\x4b\x74\x01\xdf\x17\xea\xfb\xe2\x1c\x9e\x0b\x78\xca\xce\xd2\xec\x29\x7c\x80\x3e\x2f\xc7\x4f\xe1\x29\x33\x2d\x4f\x1f\xc3\xf3\x0c\x9e\x90\x72\x06\x7d\x5e\x9e\xc9\x6a\x97\x4f\x61\x93\x2e\x9f\x3e\x82\xe7\x13\x78\x42\x5e\x05\x2c\x97\xe7\xea\x05\xf6\xf5\x12\x9a\x5a\xca\x39\x1a\x8f\x4e\xf2\x81\xfc\x77\x3a\x82\xe7\x89\x7a\x39\x83\xe7\x39\x3c\x53\x78\xe6\xf0\xa4\xf2\xf9\xf8\x29\x3c\xe1\xeb\x63\x0a\x05\x9e\x40\x69\xe8\xd0\x78\x74\xf6\x48\x3e\xe5\x82\x8f\x47\x4f\x1f\xc3\x13\x5a\x7a\x0a\x75\x9c\xcb\xe7\xe9\xe3\xe5\x55\x33\x3e\x1b\x43\x73\x67\x63\x59\xe0\x4c\xb5\x7d\x76\x0a\x2f\x8f\x4f\xe0\x79\x2a\x9f\x67\xf0\xfb\x0c\x7e\x2f\xce\x20\x93\x04\x38\xe3\x33\x18\xc0\x59\x76\x0e\x49\x39\x7c\xcf\xe5\x87\xa7\x23\x79\x22\xc6\x4f\x47\xf0\x92\xca\x8e\x9e\x9f\xc8\x69\x18\x9f\x9f\x9c\xc0\xf3\x0c\x9e\x72\x1c\xe7\xa7\x90\x72\x0a\x95\x9c\x9f\x2e\xae\x9a\x71\x3a\x3e\x83\xa7\xfc\x9c\xca\xcd\x36\x4e\x1f\xcb\x55\x19\xa7\x12\x52\x8d\x53\x18\x6c\x2a\x37\xc6\x38\x7d\xf2\x18\x3e\x3c\xc9\xe4\xf3\xec\x14\x5e\xce\xd4\x8b\x1c\xe1\x02\x60\xc7\x78\x31\x92\x9d\x5b\xc0\xd0\x16\xa7\x4f\x20\x09\xe6\x15\xce\xd4\x78\x21\xcf\xf4\x78\xf1\x04\x7a\xbd\x80\x81\x2e\x9e\x8e\xe0\x39\x96\xcf\x14\x66\x66\x91\x3e\x86\xe7\x53\x78\xca\x41\x65\x27\x99\xfc\x90\x9d\x9e\xc2\xf3\x09\x3c\x65\xdf\xb3\x1c\x9a\xcd\xf2\x13\x78\x3e\x82\x17\x3a\x82\xe7\x89\x7a\x79\x0a\x4f\x39\x41\x79\x06\x99\x73\x2a\xcb\xe7\x4b\xd8\x0e\xb9\xbc\x34\x4f\x46\xa3\x0c\x9e\xb9\x7c\x42\x95\x27\xa3\xe5\xe8\xaa\x39\xc9\xe8\x52\xbe\x64\xcb\xf1\x55\x73\x92\x53\xf8\x92\xab\x1b\xf8\x24\x85\x4b\xf7\x04\x5e\xce\xcf\xe1\x99\x5e\x35\xe9\x93\x27\xb2\x48\xfa\x44\x2e\x66\xfa\x44\x4e\x51\xfa\xe4\x2c\x97\x4f\x59\x63\xfa\x44\x56\x95\x3e\x95\xe0\x2e\x7d\x3a\x7a\x02\xcf\x85\x7c\x9e\x3c\x86\x27\xa4\x48\x80\x99\x3e\x85\xe6\xd2\xa7\x50\xe0\xfc\x44\x4e\x66\x7a\x2e\x01\x75\x7a\x0e\xe7\x2c\x3d\x7f\x0c\x5f\xe0\x40\xa4\xe7\x72\x1b\xa6\xe7\x8b\x53\x78\xaa\xcc\xf2\xd0\xa5\x00\x90\xd3\x14\x00\x7d\x9a\x9e\x50\xf9\x94\x47\x37\x4d\xe5\x86\x48\x53\x79\xdc\xd2\x54\xce\x69\x9a\x3e\x3a\x85\x27\x14\x90\x77\x4a\x9a\x2e\x4e\xa0\xd8\xe2\x11\x3c\xcf\xe0\xf9\x14\x9e\x50\x91\x84\x44\x69\x2a\x6f\xc2\x74\x41\x1f\xc3\xf3\x29\x3c\xf3\xab\x26\xd7\x08\xc7\x52\xce\xd7\x72\x31\xa6\x57\xcd\x52\x21\x24\x4b\x3a\x92\x49\xf4\x44\xbd\xc8\x31\x2f\x97\xe7\x14\x9e\xcb\xf9\x71\x8b\x34\xbc\xf5\xd0\x74\x10\xee\x4a\x42\x12\x04\xbc\x97\xe4\xec\xc9\xd3\x30\xfc\xde\x62\x1b\x8e\xf8\x9e\x77\x65\x65\xf7\x38\x4c\x57\x3e\xaa\x2a\x08\xef\xdb\x86\x1d\xa9\xc0\x4e\x28\xd2\x61\xa1\x86\x59\x5d\xbf\xa5\x1f\x05\x29\xd1\xbe\xab\x24\x81\xd8\x43\x8e\xd9\x6d\x54\x02\x81\x1c\x7e\x3b\xf2\xb9\x38\xc2\x8b\x68\xec\x55\x27\xc0\x9e\x79\x5f\xa4\xf2\x8d\x8f\xfb\x18\x8d\x1b\xd9\x94\x95\x23\x88\xcb\xd1\x64\x30\x10\x96\x01\xa8\x6a\xd4\xb2\x3f\x78\x41\x07\x02\x75\xff\xec\xa3\x69\xd0\x90\xdf\x25\xb4\xfb\x8e\x77\xe7\x13\x5c\xe6\x4c\xef\x33\x4a\x3b\x94\xb9\x55\x43\x02\x57\xf5\x2f\xca\x3c\x2a\xb7\x5b\xaa\xdc\xe2\xd5\x54\x00\xa2\xad\xa2\x84\xb3\xdd\x3d\xce\x78\xbc\x18\xba\xce\x8c\x9b\x06\x24\xca\x5d\x0e\xe5\xd8\xdf\x72\xbd\xe2\xf2\x73\xe4\x86\x9e\x35\x98\xf8\x4f\xbc\x65\xcd\x5b\xa3\xf4\xd6\xbb\x60\x7f\x04\x61\x8e\xf8\x0d\x95\x3d\x0d\xe4\x46\x4c\x33\x01\xee\xf4\xcd\x07\xd5\x63\xf7\x93\x40\xb8\x54\x5c\x84\xaf\x14\x17\xa1\x14\x29\x2b\xeb\x0e\x53\x82\x2d\xa3\x53\xd7\x2e\x0b\x98\x04\xc2\xed\xa2\xf6\xc1\x2f\xcb\xb6\xd1\x39\x4d\x4a\x24\x50\x2f\xe7\xe0\xfd\x77\x7c\xa0\x9a\x15\xaf\x05\xc2\x82\x10\xda\xba\xdd\x54\x0a\x55\x9d\x46\x1c\x54\xfd\x0b\xee\x19\x80\xdb\x69\x4e\x33\xc1\x6e\xcc\xd9\x99\x80\xdd\x4f\xc5\xb9\x30\xff\x3b\xdf\x11\x25\x87\xd2\x0f\xec\xb9\xd7\xee\x29\xf7\x22\x9d\xfe\x73\x7b\x75\x55\xa3\x20\xa6\x3a\xcc\xa9\x7c\xbb\xba\xaa\xff\x1c\xa0\x1d\x44\xf0\x18\x8f\xc3\x30\xfa\xc2\x8b\x49\x26\x17\x5d\x57\x75\xb8\xe3\xfb\x0b\xee\xed\x23\x43\x8f\xbd\x92\x4b\x56\xad\x55\xb4\xa0\x43\xdc\x69\x2f\x74\x10\x79\xcd\x23\x81\x54\xa8\x1d\x1d\x63\xb8\xd5\x06\x53\x9c\xfc\x52\x5b\x91\x96\x6e\x34\x58\xea\x82\x1d\x2b\xcf\x2e\xad\x35\x29\x9b\x96\xb3\xf1\x3c\x66\x49\x00\x31\xb9\x5f\xca\x4e\xa5\x79\xfe\x49\xbd\xea\xa9\x3e\x01\x74\xac\x90\xe2\x4a\x9a\x6f\x31\x89\x2a\x6b\x95\x2a\xdc\xc5\xff\x75\x8f\x1b\x41\x1d\x1d\xe9\x43\xee\x44\xaa\x59\x39\x0f\xc3\xfe\x6b\x0e\x46\x4f\x26\x0c\x2d\x30\xbb\x4c\x00\xda\xc3\x64\xfc\xe7\x5c\x6b\x06\xf8\x07\xf9\x9a\x0a\xbd\x54\xf5\xe7\xb7\xcf\x6d\x54\x83\x16\xda\x7d\x4a\xf6\xc8\xe1\x38\x06\x08\x3f\x6c\x5d\x31\x6c\xf3\xf6\xca\x30\xa4\x51\xa9\x39\x9c\x3f\x70\xa2\xad\x80\xbf\xe4\xf8\xef\x1c\xff\xc2\x3b\x81\xda\x55\x1c\x19\xdf\x60\x98\x12\x13\x0b\xdb\x0c\x3a\xc8\xab\xf4\xfa\x3a\x5d\x14\x34\x90\x54\xea\x76\x0b\x09\x5f\x54\x7c\x03\xef\xbb\xc8\xd1\xe5\xfe\x91\x7b\xda\xa3\x5f\x72\xc3\xe8\x70\x42\x03\xfd\xc7\x7f\xfb\xdf\x03\xd4\x03\x50\xed\x44\x9c\x11\xf8\xbe\xdb\x27\xf8\x18\xa0\x39\x42\x78\xd4\x27\x2e\xfc\xf7\xc2\x6e\x87\x61\xf4\x25\x27\xc2\x8d\x17\x7e\x41\xc6\xa0\xb8\xe5\xe4\xba\x3c\x09\xc3\xbe\x1a\xf5\x53\x84\x76\x6a\x83\x7c\xc9\xa7\xdd\xce\x25\x4e\xc2\xbf\xff\x0f\x1d\x6a\x2f\xd0\xe6\xc6\xc9\x11\x2b\xc1\xed\xfa\xa2\xe0\xd9\xfb\xc9\x91\x8e\x3e\x3e\xde\x7c\x9c\x1c\xe9\x80\xe6\x3a\x0a\xdf\x60\xbc\xf9\x18\x38\x51\x85\xef\x8b\xba\x14\x78\x2c\xa9\xbf\x70\x2f\x50\xfb\xdf\x8d\x41\xf7\xd1\xdf\xb9\x36\x6a\x82\xa9\xbb\x77\xb6\x9e\xfd\xdf\xff\xd7\xb3\x00\xc9\x4d\xf3\x1d\x87\x10\x10\x63\x24\x77\xd9\xe7\xbc\x01\x8f\x1a\xcf\x21\x22\xfa\xf7\xc0\xc7\x51\xc1\xa0\xb7\x5b\x79\x20\x96\x82\x90\x6a\x58\x39\x31\xe1\xf5\x86\x28\x55\x3d\x63\x7c\x72\x7f\x3d\xb6\x87\xa4\x54\x55\x0c\x74\x55\x17\xa7\x4a\x3a\xca\xf1\xd7\xf2\xf0\xb7\xb6\x18\xe4\xb4\x4f\x82\xab\xf2\xaa\x5c\x18\x23\x86\xe3\xab\xf2\xd8\x08\x02\xa6\x2e\x43\xc7\xd7\x67\x05\xee\xa2\xe5\x2c\x8a\x0b\x52\x4e\x5a\xe5\xbf\x96\x13\x53\xca\x0b\x0c\x78\xbe\x0c\x9c\x00\xf9\x3c\x5f\x6e\xd5\x6f\x84\x0e\x55\x45\x8d\xee\x1d\x1b\x8c\xd1\x94\x0d\xc6\x09\x83\x90\x0f\x4e\x95\x55\x20\x2b\xec\x93\x74\x1a\x69\xd9\x06\x77\xdc\xc7\x22\x2c\x62\x92\xc6\x63\x94\xd8\xaf\xf2\xe6\x62\xf1\xd8\x51\x06\x3e\xe8\x5f\xc3\x8e\xbf\xba\x2a\xa7\x5b\x39\x0b\x3b\xfc\x27\x4e\x3e\xb0\x32\xe7\x1f\x86\xae\xeb\xa4\x69\x97\x25\xd7\x56\xe1\xb1\xf8\xfa\xc4\xe7\xf0\xed\x5d\x1a\xfd\xf1\xce\xef\x8b\xac\xcc\x2a\xd2\x7e\x28\x69\x65\xc2\xb5\xb5\xf5\xf8\xf8\x8f\x53\xa5\x31\x34\x8f\xfa\x02\x74\xbf\xe0\x56\x36\x38\x2a\xea\x13\x8a\xc2\x70\xd4\x27\x62\x98\xf1\xb5\xfc\xf8\xa2\xcc\xbf\xe3\xac\x14\x75\x14\x40\x6f\xdf\xf2\x17\x65\x1e\x80\x0c\xe7\x6f\x9c\x04\xbc\xcc\xf8\xe6\x36\x60\x65\xf4\x13\x6f\x61\x91\xbc\x01\x7e\xe2\x9d\x23\xa4\xb3\xe2\x40\xf5\x60\x12\x20\x1c\x98\x51\xb5\x58\xee\x4f\x7c\xa8\x32\x22\xfc\x0f\xde\x86\x89\xff\x2b\xc7\xff\x26\xf7\xe4\x7b\x7a\x2b\x41\x6e\x4d\xee\x4e\x93\xe0\x45\x09\xb8\xcf\xd3\x24\xf8\x3c\xcd\xde\xd7\x9b\x34\xa3\x01\x3e\x4f\x82\xb7\xe9\x22\xc0\xe3\x36\xc3\xf8\x49\x12\xbc\x59\xb1\xa5\x08\xf0\xf8\x2c\x09\x9e\x8b\xaa\x08\xf0\xf8\x69\x12\x3c\x2b\x64\xd2\x79\x12\x7c\x97\x36\x35\x0d\xf0\xc9\x28\x09\x9e\xa7\x9b\xfa\x15\xcf\xde\x07\xf8\xe4\x2c\x09\x5e\xd4\x59\x80\x4f\x4f\x92\xe0\x8d\xaa\xfd\xf4\x54\x66\xbe\xa6\x3f\x6c\x02\x7c\xfa\x48\xfd\xfe\x82\x7f\x28\x03\x7c\xfa\x58\xb6\x97\x07\xf8\xf4\x49\x12\x7c\xc9\xd7\x32\xf3\x59\x12\xbc\xa2\xb2\xd9\xd3\xa7\x49\x00\x45\xce\x93\xe0\x7b\x79\xd4\x02\xfc\x68\x94\x04\xaa\xe4\x23\x59\x4f\xc5\x4a\xf1\x26\xab\xe4\xeb\xe3\x24\xf8\x0a\x6c\x8a\x02\xfc\xe8\x49\x12\x7c\xa1\x7c\xbe\xe3\xc7\xe7\x49\x30\x09\xf0\x93\x71\x12\x90\x00\x9f\x8f\x93\xe0\x1b\x9e\x07\xf8\xfc\xc4\xfc\x38\xd5\x3f\xc6\xa3\x27\x49\xf0\x67\xf9\xff\x0c\xb2\x8e\x47\xe7\x49\x30\x08\xf0\x78\x3c\x4a\x82\xa1\xfc\x3f\x4e\x82\xe3\x00\x8f\xe5\x00\x4d\xed\xe3\xb3\x53\x95\xe9\xe9\x13\x68\x66\xfc\x54\x17\x7e\xfa\x34\x09\xb0\xfc\xaf\x2b\x39\xd7\x95\x9c\xeb\x4a\x64\xfb\xff\x5b\x80\x4f\xe4\x34\xce\x02\x7c\x22\xe7\xf0\xea\x4a\xfe\x18\x27\xc1\x5c\xfe\x3f\x49\x82\xff\x5f\x80\x9f\x9c\x9e\xc8\x79\x94\xb3\x20\x7f\x9e\x9a\xd1\xcb\x97\x47\x66\x9e\xe4\xcb\x63\x3b\x45\x4f\x4e\x4f\xce\x4e\xda\x2e\xca\xd7\x53\x33\xb7\xf2\xc5\xcc\xb8\xfc\xfd\xa4\x5d\x17\xf9\x7a\xe6\x2e\xcd\x93\xd3\xd3\xd1\x89\x9d\x54\x07\x01\xa1\xa9\x77\xb4\x0b\x7a\x43\x8b\xcf\x4e\xa6\x74\x28\x78\xa2\xec\x49\x1d\x39\xf3\x7d\x79\x41\x17\x4e\x16\x71\xe4\xbe\x69\x2b\x34\x00\xbd\xf7\x56\x45\x90\xa6\x91\x98\x8d\xe6\x28\x71\xa4\xa7\xe5\xfd\xd9\x45\x1a\x81\x02\x27\x4a\x3c\xab\x63\x47\xf2\x9a\xba\x28\xd9\x0b\xa5\xe3\x94\x01\x3d\x40\x7e\x2d\x25\x82\x58\xf6\xc1\x07\xb1\x20\xcf\x58\x54\x22\x13\x6c\xe5\x7b\xf9\x82\x39\x61\x53\xa6\x90\x44\x35\x9c\x32\x8d\x4a\x94\x54\xf0\x1c\x99\x6e\xac\x24\xe4\xe5\x0e\xd1\xcb\xbd\x46\x55\x17\x74\xfc\x93\xb2\xed\x43\xa5\x93\x74\x63\xca\x5d\xca\x76\x3b\x22\xa4\x6d\xd2\xf7\x71\x0f\xce\x38\x4a\x1d\x15\x43\x8b\x35\xaf\xde\x1c\x23\x09\xdc\x55\x03\xad\x89\x8f\x18\x66\xab\x0b\xc2\xd5\x0f\xa7\xa7\xea\x3b\x4e\xa7\xa3\x84\x3b\xc0\xbc\x55\x51\x48\x3b\x0a\x33\xb6\x2f\x76\xd6\x41\xbb\xbc\xea\x93\x32\x0c\xc5\x85\x53\xb4\xd6\xc3\xfe\x2b\xf7\xb5\x14\xaa\xdf\x0a\x5a\x01\xce\xa9\xc1\xaf\x83\x08\x43\xf0\xe2\xd0\x4a\x1d\xdb\x8f\x84\x08\xe5\xe3\x81\x10\xe1\xe0\x14\x95\x15\xbf\xca\xe6\x99\xea\x2b\x06\xad\x55\x35\x85\x53\x5d\xbe\x0f\x6e\x22\xc2\x30\xfa\x2b\x07\xbe\x02\x4a\x0e\x7c\x28\x11\xae\x50\xaf\x22\xe5\xee\xc0\xdc\x34\xa9\xef\xed\xba\xb4\x36\xfc\x71\x25\x29\x3f\x30\x3e\xd2\x24\xdd\xe5\x28\x0c\xdf\x72\x6d\xa4\x61\xee\x63\x81\xd0\x21\xec\xbb\x48\xbb\x74\xba\xda\xe6\xae\x03\x9d\xa3\xac\xcd\xe4\x88\xab\xeb\x54\xf9\x74\x4c\x09\x9b\xf1\x39\xae\x89\xee\x63\x6a\xb7\xec\xa0\x4a\x64\x19\x1d\xa0\xaa\xbe\x4c\xb5\x75\x78\x7d\x91\xb6\x51\xaf\x8e\xc0\xbd\x42\x4d\x48\xaa\xfd\x6c\xc0\x4f\xe7\xb3\x6c\xa6\x46\x84\xf0\x69\x9d\x54\x97\x23\x42\x22\x68\x31\x26\xd5\x1c\xd9\xa6\x64\x09\xed\x7a\x0f\xfa\xee\xe4\xf1\xf4\x8d\x6b\x02\x55\xb4\x7d\x84\x4e\xcb\xd2\x78\x30\x96\x0b\xa3\xdf\x41\x7f\x56\x26\xb8\xc1\xff\xf6\xe6\x4a\x4e\xbe\x8d\x61\x37\x61\x07\x27\x9e\x21\x34\x41\x2c\xb6\x5e\x96\x8e\xd8\xc5\x68\xbb\x65\x97\x1e\xd4\x98\x82\x52\x32\xdb\xb9\xde\xdf\x5a\xda\x7b\x34\xa1\x17\xe3\xd1\x84\xc6\x31\xfa\x37\x3e\xa3\xf1\xa3\xa7\x73\x02\x3f\xce\x9f\xcc\x89\x52\xb6\x88\xb4\xc6\x3e\x25\x4f\x1e\x4f\xe8\x05\x39\x6f\xb3\x9b\x2c\x30\xa6\xe7\x9a\x79\xd6\xe6\x1f\xcb\xec\xe3\x93\xb6\xf6\xf1\x78\xac\xab\x07\x98\x3f\x27\xc1\xcb\x20\xa6\x3b\x14\x29\x00\xb5\x4c\xc9\x9e\x53\x0d\x90\x9b\xdd\x2b\xa7\x1c\x9d\xa9\x97\xa7\x69\x36\x3f\xc6\x82\x1c\xcf\x6a\xf1\xe1\xf5\xfc\x18\x57\xe4\x78\xf6\xea\xfb\x6a\x7e\x8c\x4b\xf9\x6b\x31\x2e\xe7\xc7\x98\x91\xe3\x99\xfc\xe1\x84\x0d\xf7\xa2\x37\xc0\xc2\x99\xd0\x38\x70\x38\xb5\x23\x00\xc1\x49\xb5\xeb\x0a\x78\x53\xad\x74\xae\xe8\xd1\xd4\xf1\x85\x65\x75\x7b\x71\x43\x8c\x6a\x35\x2e\x24\x5e\x9c\x91\xd1\x24\xbb\x68\x26\x71\x9c\xa1\x42\xeb\x12\x90\xa8\x26\xa9\xcb\x7a\xcc\x10\xba\x20\x27\x8f\xce\xa6\xc1\xc2\xfc\x89\x5a\x7c\xa8\x17\xde\x5f\x5d\xcb\xa1\xbe\xfe\xec\xb3\xcf\x5e\xc3\x1f\x7e\x8d\x5f\x8f\xed\x9f\x4a\x7b\xfd\xea\xde\xbf\x4f\xf9\xae\x1b\x5a\xdc\xfb\x87\x65\xf3\xd0\xbe\xaa\xef\xb3\xcf\xc6\x63\xf8\x39\x7e\xf5\x50\xf5\x0f\x34\xab\xbe\x07\x66\x87\xd7\x28\x19\x3f\x3a\x79\x74\x41\x6a\x79\xb4\xc9\xf8\xf1\xc9\xa3\x69\xf0\x7d\x90\x8c\x1f\x9f\x3e\xb1\x89\x67\x67\xa7\xd3\xa0\x72\xfe\x70\xf5\xfa\xf5\x1a\xfe\xaa\x3f\xf2\xb7\xf6\xfe\x74\x62\x69\xff\x3e\x2b\x4b\x99\xe9\x0f\x55\xfd\x9f\xeb\x0a\xfc\xc1\xc8\xda\x09\x1a\xc8\xa9\x40\xc9\xf8\xec\xcc\xce\xd2\xc9\xc9\xc9\x68\x1a\x54\x41\xf2\x74\x7c\x7e\x62\x12\x9f\x9e\x8c\x4e\xa7\xc1\x87\x20\x79\x7a\x32\x7a\x44\x48\x3d\x0d\x16\x41\x12\xbc\x0a\x50\x2f\x23\x6d\x38\xcb\x25\x09\x5e\x05\x76\x87\xde\x05\xeb\x80\x90\xe8\x86\x14\xb3\x6c\x8e\xa6\xf2\x49\x96\xc9\x92\xdc\xec\xdc\x32\x79\xa7\xcc\xd8\x29\x13\x86\x81\x24\xdd\x72\x55\x36\x28\x83\xa4\x52\xc7\xe5\x46\xc5\x60\xbc\xc1\xf0\x1d\x42\x28\x42\x8e\xef\x21\xb0\x3e\xaf\xa2\x8c\x8c\xf1\x92\x14\xb3\xd1\x5c\x56\x3d\x18\xeb\xca\x63\xbf\x72\xd9\xd6\x52\xff\x2f\x66\x59\x3c\x9e\xeb\x96\xc6\x81\x44\x60\xfb\xe4\x66\xbb\x5d\xf6\xf5\xa7\xed\x36\x18\x07\x7d\xc8\x5f\xca\xff\xdb\xad\x6a\x74\x89\xb0\x1c\x93\x6a\xb5\x3d\x9f\xf2\x74\x07\xd8\x69\x0f\xa9\xaa\x5f\x07\x96\xd3\x1e\x7c\x26\x3b\xdf\xc2\xd3\x15\xc9\xe2\xf1\x64\x75\xd1\x84\x21\x7c\x2a\x66\xab\xf9\x24\x8e\x57\x68\x62\x72\x6c\x48\x16\x86\x41\x5f\x75\x77\x20\xfb\xa4\x72\x8f\x75\xee\x29\xf4\xfc\x75\x80\xd7\x24\x9b\xac\x2f\x24\x56\xb1\x46\xc5\x6c\x3d\x27\x9b\x5e\x46\x56\x83\xf1\xce\xf4\x13\x77\xe6\xfd\x06\x42\x55\xcb\x2e\xf6\x82\x57\x72\xce\x75\xad\x37\x7a\x46\x5e\xed\xcd\x3d\xda\x1b\x32\x58\xc9\xab\x50\xeb\x30\x60\x18\x98\x33\x28\xfb\x71\x35\x47\x6a\x5c\xa0\xcc\x44\xa0\xc1\x28\x9b\xaa\x31\xc1\xb6\xc2\xd7\x3a\x75\x75\xd1\x4c\x65\x01\xb5\xd9\x64\x85\x1b\x72\xbb\xdd\x5e\x4f\x65\x8f\x82\xef\x1f\x18\x29\xb8\x4a\xc0\xef\x40\xf3\xd9\xe9\x28\x28\xfe\x7a\xbd\x94\x19\x3f\x90\x0c\x72\xc5\x71\x26\x73\x85\xa1\x9b\x05\x06\x37\x79\xd7\xba\x76\xe6\xd1\x08\x7f\xc0\x99\x6b\xa1\xf6\x82\x64\xf8\x5b\xf2\xce\xb8\x08\xf2\xea\x0a\x5e\x05\xb0\x89\xe6\xaa\x22\xf9\x6d\x4d\x5e\x4c\xd6\x17\x19\xf4\x86\x99\xa6\xd6\xb2\x37\x2f\x2e\xd6\x61\xf8\xce\x28\x24\x7f\x8b\x47\x58\xb5\x38\xc6\x2f\xf0\x5a\xa3\xe2\x6f\xc8\x5a\xb7\xb0\x96\xb5\x00\x7e\x68\xab\x80\x99\x98\x1c\xa8\xe1\x04\xbf\x91\x35\xe0\x17\x64\x0d\xfd\x8e\xe3\x75\xef\x85\x2c\x7d\x4f\x6b\x72\x7c\xfa\xd6\x1a\x13\xf2\xce\xe2\xbc\x61\x18\x2d\x48\x6a\xed\x72\xae\xea\x58\xe9\x0e\x42\x0e\xb8\xf7\x16\x2d\x0f\x19\xbf\x1b\x36\xa5\xb2\x87\x33\x33\x37\xc2\xce\x77\x84\x10\x1e\x43\x44\xcb\x77\xe8\x50\xf5\x57\x75\xac\xac\x7d\x22\x95\x45\xf0\x41\xa7\x7a\x6f\x55\x9a\x81\xfb\xb1\x91\xb5\x9f\xf8\x7d\xef\xf6\x67\x8c\xe1\xab\xe0\xe6\x3f\x42\xb8\xcd\xdf\xf7\x7b\xe6\xb5\xd6\xe6\xc2\x8d\x6c\x0a\xbf\xdb\xed\x5a\x56\xd9\x9b\xe1\x0d\xad\x6a\xc6\x4b\x12\x3c\x1e\x8e\x1f\x0f\x4f\x02\xfc\x66\x87\x10\x76\x99\x32\x01\x07\xf5\x36\xc7\x15\xfd\xc7\x0d\xaf\x44\x1d\x86\x7b\x5f\xd6\x3c\x6f\x0a\x3a\xa5\x51\x45\x7f\x69\x58\x45\xa3\x60\x38\x3c\x1e\x0e\x8f\x0b\xb6\x38\x6e\x95\x89\x03\x84\x92\x03\x0c\x92\x9c\x2e\x81\xfe\x51\xff\x87\xe9\x3a\x9f\xaa\x9f\xd1\xec\x70\x35\x73\x4c\x51\x42\xa3\x96\xef\x8c\x76\x7e\xec\x8d\xa0\xa9\xe9\x51\x2d\x2a\x96\x89\x40\x33\x2d\x1d\x8e\xf6\xa0\x60\xa5\xd0\x11\x9d\xeb\xa0\xc5\x97\x2a\xad\xf1\x6b\xc5\x3a\xe0\x8f\xcc\xbe\xf9\x92\x40\x57\xa7\x38\x12\x4a\x93\x55\xe1\xf7\xad\x53\xb4\x03\xc2\xb6\x4e\xc8\x69\xc5\xe7\x6e\x49\xdf\x48\x68\x32\xc5\x15\x2e\x59\x0a\x9d\x2f\x5b\x6e\x3f\x0e\x40\xcb\x17\xb4\x7a\x31\x43\xbd\x52\xcb\x5b\x05\xdf\xb8\xa4\xa7\x18\x66\xc0\x28\xfd\x69\x50\x7a\xac\xe8\xc1\x63\x14\x07\x9b\x8f\x01\x36\xe5\x80\x03\x6b\x72\xff\x23\x7e\x0c\x5f\x1d\x59\x9e\x15\xb4\xec\x4d\xa4\xe0\xbc\x10\x6c\x23\xab\x72\x45\x9d\xd5\x30\x2b\x78\x49\x81\x29\xdc\x1f\x21\x84\x7d\xc1\x83\x9b\xb5\x04\x87\x22\xe5\x7d\x63\xc3\x72\x5a\xb4\x17\x2c\xd3\x5d\xbe\x49\x33\x26\x6e\xc1\x51\x95\x97\x42\xc6\x08\x97\x3b\xb9\x22\xce\xbc\xa6\x1a\xe3\x16\x3d\x35\x89\x4c\xb7\xc0\x1b\x11\xe0\x14\x02\xda\x47\x91\x68\x7d\x07\xa8\xc5\xb7\x4e\x1f\x3b\x4d\x2a\xe3\xf5\x4e\xb3\x23\xd7\xde\xc0\x25\x47\x64\xee\x1d\xc2\x4f\x46\x10\x25\x53\xf9\x21\xd6\x4e\xcb\x6b\x2a\xbe\x2a\x05\xad\x6e\xd2\xc2\x2b\xc2\x96\x11\x47\x2d\x19\xc3\x26\x13\x4a\x3c\xb1\x2b\x18\xac\x84\xe1\x78\x4c\x08\x75\x65\x96\x32\x9b\x92\x59\x52\xe2\x0b\x7a\x4c\xa8\x64\x65\x49\x7a\x97\x46\xae\x27\x27\xeb\xb4\xf5\x08\x74\xbc\x6d\x9f\x6a\xd9\xf1\x47\x23\x08\x93\xc5\xcb\xee\xac\x39\x1c\x1b\x8f\xd0\x50\xf6\xac\xd6\x71\x81\x36\x3e\xb7\xd4\x86\x9a\x22\xc7\xb5\xc0\x2a\xad\xff\x02\x6e\x69\x4d\x68\x28\x5e\x82\xcf\xcb\x6f\x6f\xa8\xa3\x59\x29\x3a\x71\x7d\x5b\x9b\x39\x63\x8e\x25\x1c\x73\x2c\x18\xe7\xf1\xd5\xe2\xd0\xa1\x1f\x68\xc5\xcc\xca\x09\xfa\x6d\xa6\xa7\xb5\x8e\xac\xee\x13\x36\x60\x4e\x22\x06\xc7\x25\x66\x5a\x5e\x71\x7c\x82\x53\x02\x9e\xc3\x36\x31\x1b\x2e\xb8\x10\x7c\x2d\x13\x1b\x10\x18\x59\x27\x9c\x11\x1d\x66\x9c\x57\x79\x2d\x89\xc9\xe8\x4e\x56\x91\x70\x2c\xf8\x26\x49\x77\x38\x50\x27\x2f\x40\xc8\x23\xa6\x5a\xfe\x8b\xc6\x82\x96\xa4\x99\x65\xf3\xe1\xbb\x77\x69\x59\x72\x01\x96\x73\xbd\x65\x18\x6a\x7a\x6b\x89\x76\x85\xb5\xbf\xbf\xcf\x55\xda\xe1\x29\xc3\x7b\xaa\x06\x86\x07\xff\xb2\x4a\xaf\x15\x33\x5d\x3b\xf7\xa7\x07\xbc\xfa\xd3\x19\x9f\xf7\x7c\xfd\x8b\x5a\xd2\x8d\x3b\x08\xf2\x88\x25\x88\x06\x05\x61\xa4\xc3\x7a\xc2\x4a\x7f\x48\x99\x60\xe5\xf5\x4b\x5e\x91\x91\x17\xc8\xb9\x15\xc8\x42\x7c\xe6\xa1\x5c\xbc\x5e\xd5\x6e\x15\xb0\x86\x93\x7b\x55\xbd\x46\xa2\x1b\x84\xd3\x98\x55\x7b\x81\xa8\x74\xda\xac\x9c\x1b\xff\xb2\xbd\x4e\x3e\xb7\x1b\x29\xd8\x79\x81\x17\x28\x35\xc4\x07\x81\x38\xae\x49\x6a\x2e\xd7\xf4\x21\x70\xa9\xee\x9d\x41\x10\x57\x98\x49\xb0\x23\xe9\xe3\x07\x94\x60\xfc\x56\x10\xfa\x84\xaa\xd7\x8d\x84\xc7\x05\x0d\x40\x66\x09\x4e\x03\x79\x19\xd5\xe6\xf4\xde\xd0\xaa\xe3\x58\x5a\x69\x86\xd4\xca\x89\xb2\xc3\x1c\x74\x4d\x7d\x6a\x7a\x43\x2b\x26\x6e\x7b\x4a\x37\x3d\xa0\xea\x42\xd7\xfe\x28\x1f\xbe\xdf\xac\x04\xf2\xa1\xbe\xd3\xba\x4e\xaf\xe9\x00\x8c\xe5\x3e\x49\x2b\x88\x0e\x75\x19\xe4\xc9\x2f\x1b\xd7\x19\x69\xbb\x7b\x0c\x1c\xc2\x25\xa9\xcc\xef\xed\xb6\xc2\xfa\xa4\x3f\xb3\xa7\xa9\x96\xc7\xe2\x5a\xde\x93\xc5\x06\x3c\xc2\x7e\xc7\x6b\x89\x16\x22\x1c\xc8\x7a\x02\xd4\x93\xcb\x56\x0d\xd3\xfa\xb6\xcc\xb6\x5b\xa6\x7e\x4c\xdd\x5b\xdf\x61\x74\x39\x3d\xc0\x1c\xbc\x2a\xb4\x7b\xde\xbf\x9f\x38\x19\x8c\x31\xc8\x8b\x23\x1b\xe7\x38\x45\x3b\x21\xd7\xce\x49\xc0\x55\x04\xdd\x03\x5b\xd6\xc8\x73\x3e\x20\x9b\xdd\xab\x00\xbb\x2d\x2a\x0b\x94\x32\x0c\x2b\xd7\xc5\x20\x05\x77\x92\x25\xc2\x05\xa0\x2c\x12\xe8\x97\xf2\x8c\xc2\xc1\x2d\x51\x22\x93\x99\xdf\xaa\xfc\xee\x5a\xc9\x15\x10\xf5\xfc\x8e\x1b\xf6\x98\xb6\xea\x03\x08\xe8\xcc\x40\x41\x1a\xbb\x0e\x19\x39\x2c\x64\x05\xbf\xc4\x7b\xc6\x20\x96\xb5\x6d\xbc\x39\x1a\x43\xe9\x49\x24\x66\x6c\x0e\x36\x0f\xcc\xb5\x2c\x2d\x1d\x6f\xc1\x51\x25\x89\xe0\xd1\x64\x79\x91\xb5\x75\x2e\x55\x9d\x39\xd8\xe1\xcb\xfb\x22\x77\x49\x5d\xb8\x9e\x36\xa4\x71\x41\xce\x6f\x83\xc7\x35\x19\x4d\xd6\x17\x0e\xd0\x59\x1b\xd2\x35\x9f\xad\xe7\xf8\x96\xdc\xb4\xe7\xe8\x76\xbb\x8d\x6e\xed\x39\xc2\x8c\xdc\xe2\x95\x79\x25\x24\x2a\xc9\x0a\x4d\xcb\x84\xe1\x62\xb8\xe4\xd5\x3a\x75\x76\xa8\xa4\x36\xc8\x7e\x72\x74\x83\x10\xf6\x3a\xbc\xe9\x80\x63\x99\xe1\x06\xf8\xe6\x8d\x01\x7b\xda\xab\x97\xf1\xb2\x1d\xdd\x28\x0e\xae\xcc\x85\xef\xec\x71\x4d\x0e\x82\x9a\x41\x10\xdf\x62\xf7\x22\x4a\x6e\x76\x08\xed\x1a\x1f\x4c\xd7\x54\xa8\x97\x6f\x00\x3a\x45\x4b\x2c\x70\x1a\x6d\xf0\x0a\xe7\xd6\xf9\x0b\xb6\xdb\x62\xa8\xb1\xc9\x1a\xa1\xdd\xae\x18\xf2\x52\xf9\x13\x7f\xc5\x4a\xb9\x85\xe5\x3d\xd7\x49\x8a\x2a\x9c\x61\x17\x1b\xcf\x3c\xa8\xd5\xde\x1e\x22\x0c\x23\xdf\x84\xcd\xe0\x22\x12\x99\x33\x68\xc9\x3d\x48\x5c\x23\x11\x7e\x99\xcf\x74\x33\x57\xee\x73\x1e\x4b\xac\x6e\x07\x56\xe7\xac\xd4\x0e\xf0\x22\x05\x27\x70\x7f\xec\x1f\x4e\xac\x78\xaa\x29\x38\xb7\xa7\xc3\xaf\x4a\x26\xbb\xc4\xe5\xe6\x84\x68\x41\xd5\x01\x68\x05\x2f\xdf\x96\xcf\xe1\x38\x87\x61\xe5\x9f\xee\x0c\xf0\xe6\xe5\x32\x02\x10\x06\x2e\xfa\x68\x65\x25\xdf\x1e\xbc\xf7\x2b\x6f\x11\x2c\x84\xbd\x39\xf1\xb2\xd9\xe9\xd1\x4e\x2a\xdc\x8f\xc8\xf5\x25\x51\x2b\x18\x6a\x86\xaf\x82\x0c\xd4\x81\xc4\x64\xfa\x63\x7d\xf2\x6a\xf7\xe4\xd5\xb3\xe5\x5c\x99\xb0\x17\xe0\x2f\x42\x1d\x44\xb7\x7e\xb0\x9b\x62\x51\x85\xa3\x15\x29\x91\x03\xac\x5e\xea\x19\x9d\xde\xf9\x50\x3b\x59\xed\x92\x68\x15\x86\xfd\x51\x9f\x90\xd5\x76\x1b\xad\xc0\x7e\x6a\x85\x70\xa1\xa3\x31\xe5\xf7\x4f\x6a\xe9\xcd\xe9\xa8\xef\xe4\x35\xfb\x51\xdf\xa2\xbf\x3d\xd3\xb9\x3f\xbd\x4d\x54\x29\x74\x7f\x05\x8e\xac\xf5\x4e\x81\x00\x33\x35\xcc\xd6\x86\x56\xf2\x24\xbf\x82\x3d\x13\x75\xad\x77\xdb\x19\x09\xc3\x46\xf9\x60\xd5\xd1\x0e\xfe\x0b\x52\xea\x92\xc4\xbe\x66\xb5\xa0\x95\xbe\x7c\xf5\x49\x0a\x7e\xae\x79\x79\x30\x8c\xc2\x6c\xde\x93\xdf\x60\xbb\x6e\xd2\xaa\xa6\xe0\x3e\xd2\x25\xc1\xdb\xe0\x0e\xc3\x82\x67\xbd\xca\x75\xf7\xa2\xee\x76\xa6\x94\xba\xde\x81\x52\xd5\x18\x9b\xd7\x0c\x2c\x3e\xc1\x5d\x99\xc9\x57\xa4\x6e\x36\x78\x33\xb9\x34\x2a\x92\x88\x1d\xda\x81\xea\xac\xdf\x2d\x49\x03\x2a\x8d\x95\xd2\x2a\xac\x1c\x55\xff\x1f\x5c\xc9\xdb\x74\x5d\xdc\xb7\x92\x6a\xda\x64\x8e\x61\xc1\xd3\xbc\x9d\x33\x66\xae\x7f\x15\x09\xe0\xd0\x22\x96\xda\x6b\xca\x70\x6f\xd9\xf6\xbe\x98\xa5\x62\x06\x7f\xdc\xa1\xff\xc5\x2b\x82\x83\xec\xe7\x3a\xf8\x57\xad\x8b\x37\x99\xa0\x51\x96\xae\x73\x08\xac\xe5\xad\x17\x0e\x36\x45\xca\xca\xc0\x5f\x37\x0c\x11\xbd\xd7\x3c\xa7\x3f\x7c\xff\x0a\xb4\x5c\xf5\x6f\x22\x9b\x93\xbf\x8f\x3f\x7b\x7d\xfc\xd9\xeb\xa1\xec\xb0\x46\xf6\xef\x1c\x7d\x13\x8f\xcb\xa5\x0a\xd7\xe0\x65\x9a\x4a\xc4\x83\x96\x19\xa3\x20\xa7\x6e\x05\xef\x92\xea\x6a\xc9\xec\xd9\x5c\xd3\x94\xa5\xab\xc7\xaf\x2b\xda\xb3\x6d\x9d\xf1\x39\x92\x28\xb7\xc2\xf0\x40\xbd\x1f\x04\xee\x86\x5b\xeb\x34\xa1\x48\xb6\x83\x1c\x83\x03\xd6\xac\x23\x42\x06\x03\x89\xae\x44\x68\xb7\x8b\x2a\xcc\x3c\x33\x73\x13\xd2\xce\xeb\xa1\x5e\xe3\x6f\x24\x29\x02\x82\xfc\x54\x22\x02\x4e\x6a\xdb\xb8\xf1\x24\x6c\x0c\x20\xfa\x66\xb5\x99\x0e\x10\x58\xa6\x6b\x6a\x1c\xb6\xef\x8d\xda\x09\xc7\x1d\x99\x68\x73\xd5\xfd\x99\xc0\x37\x87\x56\x00\xd4\xb3\x60\x17\xd5\x84\xff\x8b\xe4\xa2\x5e\x63\x65\x47\xae\xf7\x05\xa8\x68\xa8\xdb\xfc\x3e\x6a\xae\xce\x2a\xb6\x91\x14\x50\x3d\xac\xab\x8c\xa4\x3d\xe5\x68\xc9\x66\xf7\x94\x89\xdf\xa6\xd7\x4a\x95\xd8\x94\x9a\x8d\xe6\xb8\x20\x15\xa0\xe9\x7c\xde\x33\x44\xa9\x3c\xea\xfe\xc5\x27\x87\x79\xbf\x40\xbf\x68\x97\x81\xa2\x62\x46\xe7\x91\xb9\x11\x1b\x97\x59\xab\x7c\x58\x7f\x4e\x97\xbc\xa2\x51\x8d\x1b\x25\x0c\x81\x83\x47\x88\x98\xda\x23\x9a\x22\xcc\x23\x09\x23\xe5\xa1\x01\x9c\x44\x7f\xf9\xb9\x8e\x66\xe9\x1c\x73\x70\xed\x90\x36\x82\xbf\xe2\x69\xee\xaf\xab\x8a\x37\x72\x78\xd5\x2a\xb4\xdd\xfa\x9b\xa4\xf2\x6f\x77\x89\x18\x1b\x8c\x49\xd6\x10\x60\xe1\x22\x51\x90\x04\xe3\xda\xfd\x17\xbd\x23\x5a\x3d\x34\x6b\xca\xb1\x6f\xeb\x2e\xd0\xbe\x6f\xe8\x1f\x4a\xd5\x8d\xfc\x08\xb0\xa3\xa3\x20\x16\xca\x21\x74\xcd\xd6\x9b\x82\x1e\xa9\xa9\xdb\xb9\x7c\x7d\x5b\xbf\x3e\x25\xc7\xd1\x34\x41\xc7\x1a\x9e\x05\x81\x35\xab\x70\xc9\x62\x65\x47\x31\x8d\xe8\x90\x81\x13\x94\xe7\x69\xad\x28\xe5\x80\x05\x08\x53\x49\x5d\x80\xfd\x35\x4a\x68\xab\x4c\x82\x1d\x0b\x8c\x08\x8c\xf4\xc5\x34\x08\x92\xe0\x9f\x01\x02\x2b\x0c\xb0\xc6\x40\x01\xae\x3c\xf9\x01\x95\x68\x4a\x44\x87\x25\xfd\x08\x7e\xa5\xe4\xf1\x45\x61\x28\x20\xa4\xa3\x97\x88\x75\x14\xcf\x6b\xfa\x91\x54\xe0\xb4\xe8\x9a\x7e\x44\x46\x91\xe3\x3d\xf5\xdd\x6e\xed\xfb\x0d\x74\xa0\x50\xbb\x7d\x5a\x09\x83\x85\x0f\x57\xc3\xe3\x6b\xec\xf9\x75\x3f\x44\x99\x57\x71\x8c\x1c\xbf\x81\x61\x08\x3a\x5c\xfb\x95\x38\x1a\x54\x60\x02\xff\x9e\x96\xba\xcf\x79\x2a\x52\x42\x3b\xac\xe4\x7d\x87\x3b\x46\x7f\xab\x1c\x6e\x54\x60\xc6\x16\xab\xd3\x09\xc6\xab\xa5\x69\x69\x44\x9c\x6f\x86\x23\xda\x96\xd7\xf1\x00\xab\xe1\x86\xd7\xb1\x1f\xee\x05\x33\xd5\xc3\x9d\xf2\xfd\xce\xb3\xb4\x30\x7e\xe0\xe5\xef\x21\x2d\x73\x49\x34\x28\x09\xa0\x93\x88\x8c\x00\xc8\x49\x7b\x2b\x2b\x52\xd1\x7b\xac\x13\x30\xf5\xd5\xe4\x7a\x23\xb7\xb0\x62\x37\x70\x25\x16\xe8\xb5\x35\xc8\x9d\xac\x3a\x23\x67\xc0\x29\x80\x3a\xb5\xc9\xb6\xde\x64\x69\x19\x86\x51\x4d\x3a\x69\xda\xae\x66\x98\x35\x55\x05\xe4\x0a\xc8\x2b\x61\xe4\x8a\xe4\xaa\x44\x5c\x6b\x9b\x19\xcc\x77\xad\xf3\x44\x3a\x2b\x15\xfd\x21\xe1\xf6\x68\x52\xb4\xdc\xe8\xc2\xf0\x7d\x33\xd2\xcc\x8a\x39\x5e\x92\xa8\x9f\xc1\x5a\x0e\x6b\x5e\x6c\xb7\x95\xfc\x17\x21\xd4\xce\x53\xa6\x77\xaa\xdc\x80\x4b\x98\x4e\x9d\x5f\xee\xee\xa9\x6e\x87\x38\x69\x89\xfe\x2d\x37\xd7\x34\x02\x29\x4f\x9a\xbd\xdf\x6e\xcd\x2f\x97\xd5\xa3\x4a\x23\xdc\xa9\x06\x0e\x8c\xad\x87\x6f\xc2\x50\x97\xb5\x3f\xdc\x8d\xa1\x8a\x9a\x0f\xe0\x64\x16\x61\x5d\x78\x0d\xf2\xa0\x14\xe4\x7c\x4e\x12\xce\xcc\x5e\xd6\x89\x72\x12\x25\xa5\x56\xea\x5f\xda\xc9\x99\x7e\xd3\x6e\xee\x62\xa1\xdf\x7f\x28\x99\xb0\x45\x73\xda\x2d\x0a\x6e\x6e\x97\x86\x47\x72\x02\x3e\xd8\xf5\xe6\xd5\x4a\x03\x8a\x6c\x3e\x99\xe4\x17\x26\xdb\x24\x8f\x63\xb4\x9c\xe5\x73\x59\x91\xd9\xfd\x0a\x59\x06\x67\x96\xf2\x13\x86\x3e\x27\xba\xef\xb3\x7c\x30\x9e\xef\x1c\x1e\xed\x22\xcd\xde\xff\xb0\x89\x96\xad\xa0\x7a\x10\x2d\x67\xe3\xf9\x54\x3e\x74\x4a\x32\x82\xb9\x51\x15\x8c\xe6\x06\x7d\xd6\x29\x61\xa8\x7f\x40\xe0\xe3\x69\x9b\xcf\xb4\xd9\x2a\x6a\xc2\x52\x47\x4a\xb8\xb7\xdb\xf9\x9a\x6b\x4a\xca\x45\x5a\xff\x2f\xca\x23\x65\x9f\x6e\xb7\xe6\x9e\xb3\x88\x14\xdd\x6e\xfb\xe2\x40\x7a\xc7\x96\xa4\x72\x34\x7b\xca\xfb\x7d\x5e\x94\x48\x81\xce\x83\xce\x55\xfa\x5c\x39\x91\x11\x7e\x88\xc8\x2a\x8e\x77\xbe\x0f\x17\x74\xa0\x78\x18\x56\x83\x81\x03\xa2\x2a\x5f\xdc\x50\x62\x86\x4d\x14\x09\xa5\x45\xbb\xa1\x55\x0d\x6e\xe7\x5a\xbb\xd7\x06\x00\x9b\x49\x06\x70\x50\x4f\x9a\x30\xec\xd7\x93\x86\x34\x30\xa3\x28\x62\xc3\x7a\x43\xb3\x29\xd7\x3f\x70\x03\xff\x90\x24\x7a\x24\x0a\x43\x1a\xf8\x8f\x00\x5e\x34\x0a\x4f\x2c\x48\x3d\x55\xf1\x1c\x74\x2e\x79\xe9\xe8\x38\x28\x91\xc0\xaa\x22\x84\x33\xc8\x06\xa7\x25\xa1\x0a\x7c\x40\x1f\xa2\x02\xf5\xdc\xfe\xca\x0e\x69\x88\xeb\xf7\x95\xdc\x41\x1b\x05\x96\xf5\x25\xba\x7f\xaa\xbe\x0c\xc3\xd1\xdf\x2f\xa3\x42\x06\xb5\xf0\x32\x33\xaf\xb6\x32\x5a\xe6\x09\xd3\xb0\x39\x82\x1f\x08\x6b\x00\x68\xd2\x81\x0b\xc4\x54\x98\xc2\x17\x4e\x46\xf0\xc1\x67\x80\x75\x92\x86\x61\xaa\x36\x6e\x3a\x4b\x5b\xcf\x46\x49\xba\x73\x25\x23\x07\xc3\x49\x7a\x31\x43\x64\xef\xc0\x29\x61\x0b\xc9\xd5\xc9\x46\x1d\xd0\xed\x7c\x8a\xdc\x41\xda\xd0\xd2\x4a\x0c\x6d\x00\xc3\x76\xab\x33\x49\x30\x9b\xf3\x52\x7c\x05\xc9\x6a\x9e\xee\x17\xfa\xed\x59\xf0\xb1\x65\x24\xc0\xbd\x92\x6b\xdc\x6a\xe0\x20\xde\xaf\x1a\x5d\x0e\xc6\x2d\xa2\xf0\x5d\x5a\xd7\x9a\xba\xb0\x10\xcb\xc6\xa1\xac\x89\xb0\x57\x47\x8f\x26\xa0\xe4\x3b\x69\x3b\xa3\xdc\xf2\x5a\x86\x60\x63\x2e\x93\x82\xd4\xda\x29\x6f\xe1\xc3\x44\x58\x38\x2f\xed\xab\xe5\x2b\x56\x2a\xa3\x61\x73\x11\x15\xea\x86\x51\xb7\x9d\xa2\x6c\xb2\x30\xcc\x66\xa3\x39\xba\x4b\x07\x03\x1c\x15\x1a\x93\x2a\x0c\x7a\x15\xc9\x7e\xfa\xa9\x73\x84\x99\x0d\x4c\x9a\xb9\xb6\xa6\x4e\xc4\x85\xdd\x4e\x89\xce\x8d\xb4\xef\x62\x34\x1d\x25\x66\x16\x66\xe9\x7c\x67\x19\xc2\x6f\x00\x21\x3d\x48\x34\xa8\x0c\xfa\x6c\x79\x24\x7c\x6b\x54\x65\x4b\x47\x3a\x6a\xa6\x24\x45\xea\x03\x75\x56\x72\xdb\x89\x88\xe3\x00\xce\x63\x60\x08\xbf\xbb\x1d\x6e\x08\x1f\xae\xa9\x48\xb7\xdb\xbb\x1d\xf0\x63\x2d\x00\xcc\x24\x94\xe2\x72\x1f\x64\x7d\xd2\x84\x21\xef\x82\xab\x0c\xb5\x1e\x8f\x49\x3a\xcb\xe6\x12\x03\xcc\x09\x9f\x65\x73\xbc\x22\xa3\xc9\xaa\x95\x74\xac\xcc\x1a\x6e\x48\x3e\x5b\xcd\x7b\xcb\x56\x13\xa9\x8c\x36\x98\x23\x84\xa3\x8d\xdd\xc0\x1b\xbd\x8a\xc8\x30\x80\x01\xf1\x59\x93\xbb\x16\x9a\x1c\x08\x9b\xac\x40\x84\x1e\x21\xd6\x97\x1b\x78\xa5\xc6\x70\x1e\x9c\x9f\xaa\x0a\xe5\x9b\x11\xda\x4c\x8a\xe9\x6c\x9e\xa8\x5b\x06\xe2\xda\x75\x1a\x69\xa3\x15\xa8\x56\xb4\xdc\xce\xb6\x22\xcc\x65\xaa\x9b\x12\xea\x08\xde\xd7\x9a\xb0\x98\x80\xf9\x65\x63\x26\xef\x7a\xc2\x39\xe3\x80\x88\x39\x70\x8d\x0e\x6d\xe7\x22\xe1\xc0\x07\xec\x16\x42\x4a\xfb\x04\x10\x19\xc5\xb1\xcf\xde\x13\x9d\x62\xdb\x71\x05\xe2\x62\xff\xbe\x50\x81\x58\xe0\xae\xa8\xee\x83\xd0\xa5\x6a\x1a\xc0\x74\xe9\x82\x69\x83\x2c\x11\xb7\x57\x53\x77\x20\x89\x3b\x10\x5d\x4f\x8b\xa6\x49\x18\xbf\xdf\xea\xae\x75\xca\xa6\x51\x14\x16\xa5\xe0\xd2\xa0\x2c\x69\xe5\x47\xe3\xf2\xec\x96\x14\xa4\x55\x7d\xa6\xee\xa4\x99\x4b\xaa\xed\xd7\x6e\x67\x96\xa8\x8e\x52\xdc\xa0\x9d\x04\x13\x8d\xdd\xe6\x37\x10\x18\x09\x35\xdd\x93\x00\x4a\xa5\xeb\xd9\xcd\x9c\x34\xb3\x9b\xd6\x1a\x7b\xfd\x5f\x95\x34\xa7\x43\xa3\x43\xf0\x91\x95\xd7\x1d\xf8\x65\x8e\xca\xa7\xfa\x8e\xf3\xe8\xdc\xd6\x14\xe7\x80\x37\x90\x3d\x3b\x5a\xf0\x9b\x6b\xae\xcb\x30\x64\x97\x83\xf1\x94\xc5\xe6\xa6\x49\x94\x57\x5f\x4e\x84\x26\x71\xa6\xc6\xaa\xb6\x42\x49\x4b\x22\xf1\xa9\x09\x41\x5d\xc5\x51\x39\x75\xe2\x50\x27\x23\x94\x0c\xc6\xbb\x16\xbe\xdc\x0f\x7c\x78\x23\x68\xe5\xe3\x3b\x42\xef\x4c\x70\x50\x6a\xcf\x7f\x49\xab\x07\xe0\x4c\xb5\x57\xa1\x73\xde\x71\x35\x84\x54\xbf\x5e\x49\x3d\xd8\x37\xdd\x80\x97\x06\xba\x30\xb6\x16\xef\x93\x3a\x06\x3a\x09\xed\xcc\xb9\xda\x63\x4c\x72\xb7\x50\x1b\x18\xc7\x49\xec\x15\xf2\x5a\x84\x15\x03\x24\x3c\x1d\x66\x05\xaf\x69\x18\x32\x4d\xea\x99\xc9\x76\x0b\x99\x2a\x1c\x65\x2f\x45\xcc\x1a\xcc\x26\x5a\x12\x5d\xd1\xb4\x8c\x0a\xac\x7f\x63\x26\x69\x53\x9c\x2a\xd1\xc9\x17\xb4\x60\x6b\x26\x68\x55\xcb\xc5\x42\x12\x83\xdb\xf0\x3a\x0c\xfb\xfb\xdf\xad\x4f\x14\x45\x73\xea\xea\x10\x7e\xa0\x53\x12\xa1\x28\xd8\xfa\x8d\xb8\x2d\x24\x85\xe7\xbc\xc5\xc1\x51\x10\xfb\x09\x03\xa8\x2f\xe8\x2d\x95\x27\x7f\x33\x21\xa4\xb0\x76\xd8\x4b\xad\x02\x5d\x93\xd4\x25\xde\x99\xe9\x42\xeb\x49\xb1\x5b\x05\xc2\x4b\x3b\xb4\xbd\x91\x41\xb8\xf1\xfb\xc6\x80\x70\xaa\xde\xf4\x20\xa2\x5a\x62\xe8\xba\xfb\xed\x87\xc4\x7d\x41\xb8\x76\x08\xfd\xf1\xf1\x08\xb7\xeb\xab\x55\xcf\xaa\x7d\xd5\x33\x9c\x93\x6a\x96\xcd\xf5\xca\xc9\x15\xcb\x87\x7c\x43\x4b\xb5\x60\xc8\xac\x8d\x59\x87\xbc\x3b\x0c\x15\xca\x59\x2e\x8d\x2a\xd7\x5d\x99\xdc\xbc\x13\xef\xa0\xe5\xe6\x0a\x54\xa0\x7b\x6a\x7e\x44\x5c\x9d\x17\x1c\x04\x28\x19\x21\x9c\x7b\x6b\x99\x77\xd7\xd2\x4f\x18\xc8\x0e\x04\x60\x50\xbf\x0c\xc3\xe5\x45\x13\x86\x51\x43\x96\x68\xd7\xf4\xe5\x7c\x1c\x5e\xde\x46\x2f\xef\x0a\x9c\xf3\x9b\x95\x55\x87\xd6\xac\xec\x81\xf2\x08\xaf\xec\xbd\xe3\xb3\xb4\x8c\xae\xa1\x33\x0b\xd3\xfd\x13\x9c\x88\xd6\xdd\x8f\x9e\x03\xf3\x23\x3a\x58\x36\xd1\x90\x04\x97\x28\x51\xb8\xfa\x0e\x2f\x8a\xb4\x7c\x2f\xb1\xe6\xb6\x0b\x8e\x6c\xd4\xad\xa4\x3c\xd4\x01\xa0\x46\x6d\x1d\xf2\xdc\xdb\x97\xe8\x60\xf1\xa4\x34\xd0\xcc\xfb\x8c\x82\x2b\x79\x8f\xf9\x4d\x1a\x60\xe2\xd7\x64\xf2\xa8\x5d\xee\xfb\x4f\x3f\xe0\xc2\x5b\x83\xad\x6a\xc6\xe7\x3d\xdd\x48\x0a\xdb\x6c\xaf\xde\xd4\x74\xc9\xdf\x67\x9a\xa9\xb3\x3f\xc7\xa5\xb7\xcf\x24\x1c\x05\xa7\x04\x15\xcb\x9e\xaf\xd2\xaa\x4e\xc4\xd0\x7b\xff\x2d\x84\x05\x3e\x4f\xef\x0c\x76\x02\xaf\x58\x63\x2f\xdd\x99\xdf\x25\x36\x9f\xea\x83\x5a\x8e\x9d\xfc\xfb\x57\xe2\x1e\x0b\xfe\x81\x56\xef\x32\xbe\xde\xf0\x52\x5e\xdc\x0e\xee\xb0\x2f\xbe\xfc\xa4\x52\x69\x9e\xf3\x52\x49\x10\x15\xc9\xf2\x07\x50\x99\xdf\xd1\x2b\xfc\x3b\x3b\xf3\x7b\x11\x22\x87\x5e\x0b\x56\x62\x5d\x28\x67\xe7\x8b\xb4\xaa\x83\x7b\xc8\xb7\x2e\x0a\x15\xb9\xdc\x94\x40\xd0\x8f\xe2\x58\x56\x14\x20\x7c\x27\x77\x69\x12\xdc\xdd\x05\x18\x0e\x42\x12\xec\x76\x81\xd9\x11\x4e\x19\xa7\x4d\x84\x3b\xb0\x35\xe9\x8f\x76\xc8\x55\x31\xf9\xe6\xab\x6f\x5e\x44\xaa\x99\x8f\x83\xb6\xe4\x40\xd0\xf5\xa6\x48\x05\x0d\x70\x77\x1c\xff\x72\xd1\xf7\xfd\x1b\x67\x38\xd4\x4b\xa2\x6c\xe2\xf5\x3f\xe5\xf0\xfd\x60\x3e\x9a\x33\x71\x0c\x77\xc7\xa2\x4a\xb3\xf7\x54\xd4\x7f\x0c\x33\xde\xdb\x35\x0f\xf6\x04\x3f\xd8\x81\x3f\x62\x86\x42\x87\xef\xe9\xed\x37\xe9\x66\x58\x37\x8b\x82\xad\x29\xb9\x5b\xa6\x45\x21\x56\x15\x6f\xae\x57\x49\xa0\x9d\xf5\x07\x3b\x0c\xce\xa8\xf8\x7a\x9d\x96\x79\x0d\x1e\x67\xbe\xe3\x35\x66\x6d\x79\x9d\x93\xb4\x29\xeb\x34\xd3\x31\x00\xc0\x09\x42\xf0\x7c\x9d\x0f\x02\xe5\x1b\x64\x10\xf4\x7c\xb5\x66\x74\x67\xc2\xa3\x5b\xe7\x2e\xf5\xe7\xb7\x7e\x24\x7c\x23\xb2\x19\x6a\xc7\x43\x4a\xc2\xb2\xdd\x8a\x61\xce\x33\x5d\x5a\xde\xe8\x74\xbd\x11\xb7\x11\xf2\x35\x60\x19\xe0\x95\xec\x62\x04\xc1\xd5\x20\x5e\xa9\xad\xcf\x84\xda\x2e\xb5\x67\x83\xc1\x18\x19\xb7\x38\x20\x02\x85\x3b\x45\xbb\x5a\x80\x7b\xe7\x72\x14\x86\xb2\x8a\x4b\xc2\x3b\x92\xfe\xfd\xca\xe2\xb1\x17\xea\x21\xc5\x35\x31\x2c\x83\x06\xfa\x21\x31\x1d\xe0\xd8\x98\xba\x00\xdf\x69\xfa\xa4\x98\x34\x31\x61\x38\x33\xac\x8c\xa5\x8a\x20\x04\xb6\xe8\x17\xa3\x69\x33\x18\x27\x0d\xc2\x39\x09\xde\x29\x3b\x4b\xea\x78\x80\x8e\x96\x08\xec\x4f\x03\x1e\x80\x88\xed\x83\xb2\x51\x5c\xfa\xee\x9e\xc1\x9c\x33\xca\x49\xf0\x63\x80\x0c\xab\x86\x90\x1a\x05\x3c\xe8\xcb\xec\x51\x4d\x02\x56\x06\x38\x25\x79\xeb\xf0\x30\x00\xd9\x7c\x0d\x5a\x83\xb9\xa2\x9c\x64\xed\x69\x18\x06\x3f\xaa\x56\x60\x96\x9b\xc1\x00\x43\x82\xfc\xa0\x9b\x67\x97\x23\x74\x97\x92\xe0\x43\x60\xd9\x57\x9a\x75\x65\x0d\x7b\x8c\x73\x89\x06\xed\x22\x58\x58\xcc\x54\xbc\xa5\x0a\x25\xd5\xc5\x68\xaa\xdc\x2d\x44\x28\x61\x43\xc1\x95\xa4\xbd\x9a\x89\x59\xf0\xac\x10\x03\x70\x70\x32\x27\xc1\x35\x7f\xd3\x2c\x3e\xf0\x2a\xd7\x09\xee\x11\x48\x23\x8a\x07\x63\xb4\xc3\xb6\x94\xf2\x84\xe2\x16\x33\x29\xdd\x72\xb2\x18\x0b\xc3\x48\xcc\x60\x2f\xb7\xcd\x59\xde\xdf\x9b\x75\xcb\xed\xaa\x61\xcf\xcb\xcd\x2e\x5b\x39\xb0\xf1\x9b\xc8\xc4\x7a\x11\x43\x56\x7f\x4f\xd3\xfc\xdb\xb2\xb8\x6d\x49\x17\xcd\xd4\x14\x12\x67\x50\x31\xef\xa2\xc3\x5a\x08\x62\x58\xb0\xba\xf5\x8a\x54\x47\xc8\x4a\x0e\x95\x3e\xcb\x60\x8c\x55\x8c\x68\x3a\x49\xcd\x6e\xaa\x0f\x14\x9b\xa5\x2a\xb8\x95\xf2\xbc\xa0\x02\x2d\x5f\x10\x8e\x4c\x04\xab\x52\xa7\xc5\x51\x35\x1d\x25\x63\x84\x47\xa8\x27\x8c\x78\x55\x39\x42\x02\x4f\x53\x8d\xf6\x10\x16\x2b\xa5\x07\x39\x3d\x01\xb2\xf8\x32\x1c\xa7\x46\x6b\x41\xe9\x18\xd2\xd8\x84\x4d\x93\xcd\x27\x0d\x56\xf1\xb7\x92\x66\x87\x30\x27\xba\xd1\xf1\x6e\x07\x4a\x0a\x4e\x8f\x19\x5c\x11\x8a\xdc\x7e\xae\x80\x93\xdc\x9f\xb2\x95\x67\x8d\xe0\x81\xa7\x11\xee\xb9\xb5\x57\xf1\x96\x25\x60\x02\xc7\x27\x9d\x53\x3e\x61\x9d\xe3\x94\xba\xee\xb0\xd0\x04\x0d\x06\x0c\x8e\xf4\x84\xdb\x70\x6e\xf7\x95\xe0\x32\x7f\x1c\x73\x8d\x32\x2b\x25\x31\xbb\xcf\x19\x68\x86\xd9\x57\x8e\xb0\xdc\x81\x49\xaa\x51\x7c\x49\x98\xee\x60\x87\xd7\x71\xf0\xc3\x46\x6e\x37\x15\x64\x43\xf6\x16\xde\xdd\x4d\x6a\x40\xfa\x35\x15\x6f\x20\xd7\x57\xe5\x92\x6b\xb7\x66\x74\x58\xf3\x35\x15\x2b\x56\x5e\xab\x09\xa4\x79\x84\x5a\xb3\x16\xd9\xfa\x33\x6d\x8b\x17\x09\xb0\x1c\x32\xc6\x77\x2a\x11\x07\xc0\xb5\x82\x08\xdd\xd7\x54\x3c\x87\x0b\x49\xee\x34\x56\xd2\x4b\x02\x9a\xd5\xde\x2a\xa8\x53\xf1\xc3\x26\x40\x3b\x3a\x54\x7d\x7e\xcb\xb5\x5b\x7e\x59\xfd\xc0\x86\xc6\x7a\x4b\x3f\x9a\x86\x91\x3e\x98\x75\xac\x5c\x17\x79\xc3\xd5\x29\xff\xd3\x06\x6c\x47\x18\x8f\x0f\x8c\xf1\xe2\xde\x31\x42\xbf\xee\x19\x65\xfc\xd0\x28\x95\xc7\xac\x41\x10\xf3\x38\x78\x05\x63\xdd\x14\xac\xdd\xde\x9f\xdf\xc2\xc1\x99\xdf\x63\x97\x40\xf7\x8e\xaf\xf2\x06\xa7\xc2\x23\x59\xd1\x0a\x8b\x63\xc7\x43\xad\x98\xb1\xb9\x86\xa0\x72\xdf\xcb\x37\x09\x46\x71\x4d\x54\x68\xb7\x49\x7d\x41\x52\xf5\x2b\x8e\x6b\xa4\x7e\x5e\x72\xed\x10\x08\x3c\xba\xa8\x9f\xe0\x7b\x25\x5b\x6d\xb7\x46\xf7\x51\x9f\xd8\x9a\xe8\x9a\xa6\x72\x57\xd7\x78\x84\x30\x1c\x69\x5b\x74\x9a\xca\x74\xb4\x93\xfb\xc8\x3f\xcc\x15\x1e\xa1\x1d\xb6\xd3\xf2\x36\x5d\xc8\x39\xd1\x30\x83\xd6\x75\x20\x27\x6d\xf8\xa2\xce\x48\x50\xb3\xf2\xba\xa0\xb6\xec\x5b\x7e\xdf\x49\xd8\x83\x70\xa3\x79\xa7\xdd\x48\xd8\x60\x7f\xea\xa2\x71\xa2\xd8\xe8\x75\xb2\xcb\x03\x65\xfe\x55\x8b\x72\xd7\xae\x48\xaf\x33\x89\x65\xc4\xf5\x22\x29\xa8\x60\x26\x51\xa6\xcb\xe5\x6a\x11\x8b\x1d\xec\x3b\x7f\x1a\xdd\x49\x84\x3b\xe7\x6b\xd9\x79\xa5\x33\x0f\x9d\x37\x83\x52\xbe\xdb\x60\x8e\x0d\x98\x7e\xb6\x54\x49\x07\xe8\xc4\x26\xa2\xb8\x3f\x3e\xb0\x75\x0f\x54\xa3\xd4\xdc\x1e\xa8\x67\xd4\x4e\xed\x17\xed\xd4\xbe\xa6\x1f\xc5\xb7\x99\xd2\x0b\xc9\xbc\xe2\x8e\x09\x55\x7b\x30\x03\x39\x47\x60\xaa\xe2\xa5\x4a\xb8\x8f\xb9\x35\x75\xd2\x88\xed\x4b\x56\xe6\x2f\x9b\xa2\x90\x00\x9a\x10\x85\x33\xd6\x14\x14\x90\x20\x22\x5f\xb6\x06\xb4\x4d\x62\x8a\x86\x72\x57\x57\x86\x66\x2f\x4a\xb0\x6c\xac\x32\xfd\x6b\x28\xd2\x5e\x86\xc0\xd9\x11\xe6\xa4\x3f\x6a\xfd\x1c\xd4\xaa\x6b\xea\x6e\x94\x75\xe3\x86\xf0\xa9\xeb\x15\xf7\xea\x6a\x11\xc4\x75\x0c\xff\x51\x52\xe3\x4c\x95\x78\x03\x68\xbf\x1e\x52\x83\x19\x9a\x44\x19\xd8\x6e\xbe\x06\x05\x85\xed\x36\x3a\x9c\x51\xee\x67\xd0\x17\x87\xeb\x4c\xde\xd0\x08\x39\xe5\x50\x18\x8a\x61\x9a\xb7\x58\x76\x94\x19\x70\x90\xc1\xd6\x02\x57\xbc\xd1\x43\x73\x67\xa7\xce\xf5\x33\x9b\x75\xa0\xb1\x01\x9d\x40\x36\xd4\x59\x5a\xbe\xe4\xd5\xe7\x8a\x4e\x89\x84\x44\xc0\xda\x50\xfc\x13\xc7\x5f\xe5\x5e\xce\xb1\xef\xc1\x4a\x71\x7d\xb2\x15\x21\x41\x84\xee\x76\xb3\xb9\x75\xcd\x62\xdf\x0d\xab\x1e\x50\xfc\x78\xec\x60\x53\xde\x9a\x95\x4a\xe1\x48\x9d\x2f\xf5\x33\x5b\x41\x44\x4c\xe0\xf5\xf6\xc7\x08\xf7\x47\x3d\x41\xca\x88\xb5\xf9\x58\x9b\x4f\x5d\xca\xee\x31\x50\xee\x0b\xed\x5e\x7e\x93\xf1\x4d\xf7\x04\x64\x2a\xf8\x8a\x7f\x89\xa8\xec\xcf\x8a\x22\x38\x70\xb6\xbe\x69\x2b\xfc\x9c\x8a\x0f\x94\x96\x9f\x5b\x6a\xcf\x3b\x1d\x72\x96\xb2\x48\x74\x90\x47\x7b\xc8\xbe\x51\x88\xea\x5b\xae\x8b\x77\x4a\xff\x06\xf1\x55\x39\xe6\x83\xfe\x0a\x55\x0a\x66\xaa\x65\x62\xe0\xd7\xd2\x1e\x25\x35\x93\x2a\x07\x6a\x79\xe1\x1b\x5e\x5b\xe2\xea\x70\x6d\x83\x36\xc0\x0f\x0f\x43\x09\xf4\xec\x0a\xf0\x76\x05\xe4\xd5\x23\xb3\x4b\x12\x40\x39\xb4\x32\x44\xa6\x42\xb4\x13\x17\x04\x3a\x68\x77\xfe\x69\x68\xb7\x45\x14\x01\x94\xec\x41\xf5\x14\x22\xfa\xe9\x98\xaf\x4e\x1c\x59\x13\xeb\x55\xc7\x78\xed\x37\x86\x1c\x6d\x6f\x89\x82\x34\x1e\x74\xcf\x20\x60\xab\x7e\x73\xea\x1b\x8c\xc3\x90\xcf\xea\x78\x3c\x77\xb3\x13\x92\x4d\x50\x46\x9a\x59\x1c\xd7\xf3\xb6\x5c\x4f\xa9\x97\x45\x05\xce\xd0\x6e\x67\x70\xd2\x29\x23\xfd\x51\xa2\x3f\xf9\x80\x41\x80\xbd\x88\x7a\x51\x86\x64\x0f\x13\x19\x56\x31\x3e\x6d\x8d\xad\xc9\x89\xa1\x25\xd2\x19\x9f\xe3\x46\xfe\x8b\xc7\x73\x5c\x10\x7d\xf5\x67\xa4\x8c\x1a\x84\x97\x2e\x14\x2c\x70\x06\x51\x17\xab\xe9\x72\x58\xf3\x4a\x44\x28\xd1\x3f\x0e\xda\xd3\x77\x22\x14\xe9\x38\xb4\x4e\x8a\x95\xd2\x82\x37\xc1\x88\x92\x0a\x83\x77\x7f\x7a\x21\xa6\x83\x71\x42\x09\x11\x92\x58\x51\x84\x82\x47\xab\x2c\xb1\x9c\x2d\x0c\xb8\xbe\x77\xff\x16\xea\xba\xcd\x76\x68\xc7\x24\xc0\xf4\x2f\x58\x0a\xf7\xae\xa2\x3b\x97\x16\x2b\xff\x90\x6e\xf6\x71\x72\xf1\xe9\xfb\xac\x3a\xb4\xcb\x34\xfd\xe6\xad\x1c\x10\x73\x76\xf3\x55\x07\x36\x5f\x35\xab\xe7\xb8\xb3\xcb\x06\x63\x7f\x9f\x99\xfd\xd2\xa2\x1c\x8d\xc6\x83\x4c\x76\xfb\x9e\xad\x2c\xfa\xd1\xc0\x89\x6b\x73\xc0\x5b\xb6\x42\x3b\x30\x52\xd3\xd5\x4b\xac\xd0\x6e\xfb\xed\x76\x30\xc8\x70\x71\xc9\xa7\xac\xdd\xa0\x09\x6b\x15\x1d\xd9\x8c\xb5\x4a\x4d\x24\x93\x17\x68\xb6\xfb\xed\xed\x38\x9a\xd0\xd6\x00\x82\xda\x9d\x58\x11\x36\xa3\x72\xca\xd8\x8c\xca\x9d\x58\xbb\xb4\xdd\x3e\xb1\x1a\xe0\x12\xd0\x4e\xf9\x0f\xf0\x29\x1c\xc4\x66\x25\x25\x12\x71\xe9\x9e\x92\xe9\x01\x52\x37\xae\xe1\xc6\x75\x8f\x92\x26\x7d\xdb\x6a\x92\x4e\x39\x79\xd9\x97\xb2\x65\x0e\x2d\x77\xb3\xef\x11\xb9\x29\xa8\x57\x68\xf2\x46\xf0\xbf\x33\xfa\x41\x31\x3e\xb0\xde\x81\x96\x54\xd2\x75\x74\x09\xa5\x7f\xd9\x2e\x6c\x87\x19\xcb\x4d\x58\xd9\x85\x9b\xa4\x97\x64\x34\x49\x07\x03\x03\x0f\xaa\x59\x2a\xe1\x41\xed\xa1\xab\x05\xa9\xdd\x2d\xd9\x1b\xf5\x4d\x06\xb9\x65\xea\x76\xcb\x34\x83\x01\x6e\x2e\xec\x96\x69\x70\xf1\xc0\x96\x29\xe4\x96\x29\x3e\x61\xcb\xd8\x42\x27\x13\x2a\xbb\x4b\x07\xf7\xed\x9a\xd4\xdf\x35\x15\x21\x0f\xee\x03\xd8\x45\x83\x31\xec\x22\xf4\xe0\xd2\xff\xd6\x86\xeb\x64\x4f\x7f\x7b\xa7\xdc\xb7\x2d\x78\x1c\x1c\xcb\x3d\x21\xf8\xf5\x75\x41\x25\xb2\x41\x8d\xfa\x1c\xcd\x3b\x68\x89\x04\xb1\x4e\xae\xe8\x4e\x8b\x06\x81\x83\x6f\x6a\xfb\xab\xac\xed\x67\xce\x4a\x70\x57\xfe\x2f\x21\x80\x7c\xb2\x14\xbc\x8b\x6b\x5c\xb4\xd6\xc4\x22\x68\x8b\xb5\x77\x63\x5b\x81\xbc\x1b\xc5\x8c\xed\xdd\x8d\xcd\x04\x35\x44\xcc\xe2\x98\xb9\x77\xa3\x21\xaf\x80\xc3\x99\xd4\xa0\x9b\x69\x79\x4c\x7d\x6e\x36\x5e\x18\xa6\x40\x4f\x3d\xbc\x91\x04\x84\xd6\xb4\xd7\x61\xe5\xf9\x1e\x71\xd9\xbc\x95\xba\x13\x6b\x0d\x47\x25\x26\x53\x7b\x30\x56\xe0\xda\x85\xb1\xf2\x78\x40\x0f\x27\xc5\x05\xa9\x87\xb4\xcc\x5d\xbd\xf6\x62\x20\x7a\x05\x51\xe9\x61\x18\xa5\xa4\x8c\x32\x4c\xed\x36\xcd\x0c\xcf\x4f\xa2\xbc\x38\xbb\xa0\xce\x86\x85\x38\x7f\xfe\x3e\x3c\x92\xbb\x2a\x93\xdb\x30\x8b\xc7\xf8\xf8\x9f\x57\xf5\x9f\x8f\x95\xd2\x8a\x53\xa5\xac\xca\x75\x3d\x86\xe3\x58\xa0\x1d\xf3\x2f\x8e\x66\xbb\x4d\xd5\xf5\x90\x1e\x20\x46\x99\xbe\x2b\xf7\x10\x5b\xa0\xfa\xf2\x66\x53\xb0\x2c\xd5\x64\x69\x77\x53\xfe\xd6\x32\xec\x6f\x35\xc3\xf6\xd4\xda\xa5\x6d\x60\x08\x76\x88\x15\x50\xcd\x7b\xad\xb0\xa0\x33\x41\xed\x2c\xb0\xf6\xca\x43\xe6\x38\x3a\x69\x92\xc0\x4a\x0e\x15\x56\x3f\x0d\xbb\x1a\x2b\x76\xb5\xfc\xaf\x12\x5a\x7e\x51\xe7\xf0\xc2\x61\x7b\x0b\x47\xb7\x4a\xcb\x7a\xc3\x6b\x0a\x42\x5c\xc5\xfd\x78\x79\x4e\x02\x89\x2b\x1d\x3a\x84\x79\x87\xb0\x7e\x79\x0e\x97\x82\xc9\xfd\x55\x59\xd3\xb2\x66\x82\xdd\x74\xa7\x3a\x77\x28\xfb\xe1\xcb\x13\x12\x94\xf4\xa3\xf8\x9c\xf3\xf7\xeb\xb4\x7a\x7f\x0f\x63\xc5\xa3\x0f\x4d\xde\xba\x0d\xad\x3c\xb1\x47\xdd\x71\x7e\xa2\x2c\x62\xc0\xe3\x89\x24\x49\x23\x1d\x5a\xc5\xca\x4e\x74\x08\x76\xdc\xa5\xd5\x14\x7d\x5d\x4a\xfa\x7a\xe7\x6d\xa5\x97\x27\x72\x88\x9b\x8a\xde\xfc\x0b\xbb\x2b\xac\xcb\x3b\x6d\xf4\x60\xec\x4c\xc5\xac\x05\x3f\x73\x67\x04\xd5\x3d\x34\x66\xa5\xfa\x5d\xc9\x7e\xf7\x74\x5d\xbb\x76\x79\x4e\x5a\xf8\x7c\x4f\xef\x7f\x03\xac\xde\x37\x2c\x30\x9b\x3d\xfc\xe9\x50\xb0\xea\xd2\x05\x5c\x8c\x88\x59\x69\x59\x84\x5c\xbd\x01\x8b\x30\x75\x9d\x47\x01\x63\x5a\xa3\xa0\xa9\x8b\x82\xb2\x65\x94\xce\xea\x79\xb7\x61\x74\x07\xa9\xc6\xcb\x91\xaf\x79\x5d\xb9\x9a\xd7\xd5\xac\x99\x13\x22\x73\x87\x61\x65\x3c\x2d\x4a\x84\xc0\x86\x9a\x57\xac\x44\x8d\x0c\x54\x7b\x1e\x43\x18\xe6\xf8\xae\xd3\x7c\xd2\x1f\x29\xbf\x12\x3f\xae\x68\xf9\x42\x1e\x79\x60\xef\x75\x76\x13\x00\x26\xb5\x2c\x90\xd9\xce\xda\x1f\xdc\x54\xf7\x28\xba\x43\x8c\x1a\x33\x13\xa2\x75\xf4\xd4\x8a\xa4\x54\x1f\x34\xd9\xff\x87\x3a\x01\x97\xae\xdf\x93\x43\xab\xee\xae\xb8\xde\xce\xd3\x0e\x2f\x52\x01\x2c\x05\xe1\x25\x10\xdb\x49\xa4\x46\x2f\x4b\x39\x18\x48\xf8\x5e\x39\x12\x90\x7b\x58\xba\x72\x54\x7f\x93\x83\xfa\x50\x29\xec\xa5\x0e\xb4\xe2\x12\x8f\x83\xaf\x8f\x1c\xf2\x7c\x63\xc4\xc1\x0f\x83\xff\xf2\x01\x44\x75\x36\xd7\xe2\x2e\x6b\xc3\x0d\x52\xaf\xa8\x21\xe5\x2c\x9d\x23\x0b\xf3\x23\x7d\x95\xa5\x08\xeb\x50\xd3\x41\x80\x50\xa2\x7f\x6b\xbf\x46\x0a\x8e\x1b\x5a\x0a\x2b\x1a\x07\x21\x89\x7c\x69\xa0\xef\x74\x81\xe3\x20\xad\x78\x53\xe6\x01\x0e\xb2\xb4\xa6\x46\x14\x08\x1b\x3e\x6d\x31\xd0\x2e\xc2\x2c\x7b\xc6\x66\xe9\x7c\xae\x25\x6f\xa0\x42\xa9\xb8\x28\x8a\xc8\xc2\x35\xba\x1c\x21\x8b\x0b\x44\x42\x13\x5f\xa8\x57\x13\xc5\xc1\xeb\xe2\x8e\x55\x94\x29\x9e\x25\xd6\xdf\x33\x05\x3e\x77\xae\x9b\xa4\xf5\xc3\x8c\xd5\x72\x9f\xb1\xba\xcf\x2f\x2d\x91\xd9\x47\x0e\xbf\x94\x79\xfc\xd2\x8a\xe8\x5d\x54\x82\x9b\xfc\x9d\x2b\x09\xab\x40\xfe\x85\x7f\x69\x68\x75\x9b\x78\xcc\xd2\x52\xcb\xc2\x98\x63\xe8\x72\xe3\xb2\x06\xd6\x26\xe2\x5f\xab\xb7\x06\xd5\x60\xae\x45\x42\x2e\x6b\x94\x61\x31\x95\x90\x38\x51\x50\x19\x4d\x22\x31\xe5\x0e\x67\x34\x51\x2f\xdf\x55\xf4\x86\xf1\xa6\x8e\x90\xc4\x09\x3c\x70\x6e\xb1\x53\x85\x92\xa2\x24\xba\xaf\x9d\xd2\x04\xe6\xb3\x4c\xd8\x84\x3a\x8a\x01\x2e\x6e\x86\x10\xc2\xff\xf9\x9e\x54\x30\xdd\xdd\xf3\xe7\x5d\x40\x68\xb7\x13\xb3\x95\x84\x70\x6d\x24\x17\x25\x16\x90\x1d\x51\xb1\x41\x24\x00\x82\x2c\x5f\x3b\x9f\x0e\x49\xc3\xff\x08\x72\x86\x81\xb6\x34\xfb\xbf\x92\xfb\xbf\x1a\x0c\x50\x17\x33\x0d\x30\xc0\x47\x2d\x93\x29\xc1\x26\xa8\x45\xe5\x25\xbd\xa4\x24\x19\x20\x88\xbc\x97\xfc\x81\x51\xfc\x20\x47\xd1\x6c\xe4\x41\x7c\xa6\x37\x71\x67\x1c\x9b\x88\xfa\x9e\xe7\xec\x45\xee\xb1\x98\xfc\x6a\x41\x16\x94\xf3\x0f\xe5\x1f\xac\xd8\x09\xaf\xed\x57\xec\x70\x90\xc5\x1b\x05\xd0\xbf\xd9\x47\x0a\x3a\x20\x5f\xe6\x80\x85\xef\x26\x9a\x2b\x06\x1f\xf8\x06\xfe\xf3\xec\xd5\x12\x79\x2c\x7b\xb7\x47\xcf\xda\x7b\xe8\x2d\xbf\xbf\x4b\x07\xef\xa2\xfb\x3b\xa6\xaf\x1a\xb1\xb7\x5f\x7d\xd1\x81\x70\x7b\xf2\x63\x2b\xc3\xba\xb7\x27\x7b\x7e\xf6\xbc\x9e\x1c\x48\xf4\x70\x38\x13\x41\xce\xeb\x03\x23\x10\x18\xc2\x82\xbb\x12\x33\x09\x88\xb5\xec\x8e\xf5\x18\x29\x71\x49\xf8\xae\x53\xf9\xd7\xac\x28\x68\xee\x72\x3d\x4b\x90\xf4\xef\x73\x03\x30\x33\x48\x08\x0c\xf3\x1f\x86\x8f\xf3\x23\x13\xab\xff\x09\x13\xde\x45\x0c\xff\x53\x1b\x45\xe1\xe9\xfa\x55\x78\x1b\xe7\x27\x18\x87\xaa\xe7\xa7\xb4\xec\xf6\x5f\xf9\xce\xa5\x87\x26\x0d\xe2\x4f\x76\x2e\xd6\x6e\xaf\x55\x4e\xcd\x10\xd9\xa4\xb5\x84\x06\x12\xcd\x80\xa6\xff\x72\x00\x7f\x6b\x3b\xf6\x1c\x3a\xb6\xe2\x1f\xbe\x2a\x9f\xd3\x72\x5f\xd8\x69\x66\x56\x29\xdc\x3d\x07\xf7\xa8\x4a\x9e\xef\xe8\x3f\xf8\x82\x7e\xab\x2e\x61\x1d\xad\x0e\xf6\x34\x12\x3c\x55\x8a\xe3\x13\x9f\x20\x96\xc8\x91\xe6\x22\x5b\x09\x73\xfd\xc3\xe6\x43\x5a\xed\x73\x6a\xfe\x10\xdc\x3d\x1c\x2d\x91\x41\xb4\xc4\x9e\x43\xcc\x5e\x7a\xd7\x96\x5c\x09\x4f\x54\xe8\x11\xbe\xe0\x72\xca\xf0\x7f\xc1\x27\xc8\xde\x98\x2c\x5f\xb2\x1d\x95\x4c\xfa\x5f\x3f\xae\x0e\x37\xe4\xa1\x61\xc5\xf7\x0c\x4b\x52\x06\xa7\x72\x30\xf2\x2c\xfd\x50\xe6\xfb\x1b\xc7\xa5\xbe\x3d\x82\xc2\x2f\x66\xae\xf5\x43\xc5\x3d\xbd\xb4\xb6\xdc\xb3\xa2\x38\xd8\x22\x4c\x8c\x41\x82\x3a\x41\x3e\xbb\x68\x89\x50\xa8\x91\xc4\xe9\x80\x1b\x27\xaf\x60\x07\xe7\x98\xa0\xd2\x47\xfb\x2b\x83\x62\x00\xe2\x5f\x69\x65\x3b\x5c\xb9\xec\xb6\x0b\x22\x5a\xbf\x97\x92\x14\xd3\xdf\xb2\x95\xfd\x92\xad\xc2\x90\xc5\xf1\x9e\xae\x87\x86\x7b\xfe\x4c\xcd\x60\xc0\xbc\xc8\x83\xce\x87\x39\x5c\xe4\xa5\xf9\x04\x07\x79\x14\xcc\x89\xfe\xf9\x73\xfb\xf9\x59\x51\x04\x8a\x85\xf2\x95\x99\xbd\xaf\xca\xac\x02\x1f\x40\x69\xd1\xad\xf7\x50\x9e\xef\xe9\x0d\xad\x6a\xaa\x6b\xf9\x52\xe6\xd0\xe0\x28\xc0\x62\xf8\xf2\x54\x15\x78\x0d\x91\x2a\x5b\x3e\x84\x5d\x2b\xb9\xbc\x01\xa6\xc3\x92\x57\xeb\xb4\x60\xbf\xd2\xaf\x41\x19\x16\x7c\x6e\x23\xac\x35\x7f\x03\x57\xe3\x77\x36\xf7\xfc\xf0\x78\x3a\xba\x1a\x51\xd6\x2a\x44\x49\xab\xd9\xbb\x73\x6b\xfb\xff\xd3\xf5\x82\x56\x83\x3c\x15\xe9\x71\x9a\xa7\x1b\x41\xab\xe3\xc1\xa6\x62\x37\xa0\x55\x3d\x0b\xb4\x96\x34\xc4\x05\x04\x3d\xe6\x00\x07\xaa\x08\x2b\x97\x72\x49\x3a\x6e\xbb\xb4\xf3\xec\x3d\x6d\xe1\x92\x58\x7d\x60\x06\x91\xd3\x8c\x6e\x53\x22\x30\x23\xc7\x57\xd5\xf4\xaa\x3c\xd6\xb2\xdd\xe3\xab\xd9\xd5\xfc\x4f\xc7\xae\x9a\xaf\x89\x09\xc6\x59\x7e\x34\xea\x13\x08\x99\xa6\x4c\xc9\xe1\x67\x45\x20\xf0\x27\x39\xa0\x43\x5d\x4d\xab\x08\x25\x15\xa6\x33\xe3\xe9\x65\x4e\x68\x99\x81\x0f\xa9\xaf\x9e\x1b\x05\xfb\x48\xa0\x38\x20\x41\x7c\xe0\x4b\x85\x8c\x8b\x73\x1b\xee\xb0\x21\x2f\xe4\x14\x0c\xbf\x61\x1f\x99\x89\xe5\x18\xdd\x2d\x1a\x56\xe4\x3f\x7c\xff\xaa\x13\xa3\x5a\xb9\xd3\xaf\x3f\x30\xed\x31\x0f\x68\x3b\xb9\xdc\xdf\xd3\x8c\x57\x79\x90\x18\x16\xd6\x8a\xd5\xc3\xa6\x2a\x5e\xf2\xea\xa5\xfd\x1a\x09\x4c\x25\x5d\x64\x0b\xc9\x4d\x7a\x4f\x89\x67\x85\xf2\x5c\xab\x32\xc3\x91\x3d\x94\xf5\x6f\xf2\x43\xc4\x30\x75\x33\xde\xdf\x97\xbf\xb5\x9f\x9d\x42\x8a\x99\x53\x1e\x6c\xe0\xa5\xfe\xb6\xd7\xf7\x2f\xd3\xfa\xa1\x32\xfa\xf3\x5e\xb1\xcf\x69\xc1\xcb\xeb\xfa\x2d\xbf\xaf\xa0\xcd\xe0\x15\xd5\x21\x36\xef\x1d\xd8\x73\xe7\xbb\x33\x6f\x0d\x38\x64\xbd\xbf\xd8\x0f\xce\x77\xaf\x3d\x85\x60\xde\x5f\xf0\x0b\xe7\xbb\x29\x68\xce\x80\x9b\xfb\x9d\xd9\x47\xca\xb9\xf8\x0e\xbf\x3b\xb8\xb1\x34\xbe\x6a\x60\xb2\xda\x90\xd7\x54\x80\x5f\x4d\x1c\xac\x78\x2d\x94\x2a\x93\xee\xc1\x77\x15\x5d\xb2\x8f\xad\xc8\x5b\xb9\x7f\x82\xaf\x9b\x54\xac\x5e\xf2\xea\xed\xed\x86\x46\x14\x21\x70\xb7\xa2\xb9\xa9\xc2\xbe\x1c\x3c\x33\x10\x6d\xa0\xb4\x3c\x4f\x2e\xaf\x08\xe5\x29\x25\x0a\x8e\x03\x84\xfb\x2c\x0c\xcb\x30\x0c\x8e\x83\x3e\x21\xa5\xd1\xb7\x19\x21\x79\x7a\x49\x70\x1c\xc4\x25\xc2\xe5\x0e\x77\x77\x7d\x67\xa0\x87\x67\x47\x60\x8a\xdc\xa2\xcf\x8a\xe2\x90\x89\x52\x77\x4e\x6d\x19\xd8\xd8\x9f\xd6\x92\x5f\xe6\xf7\xf4\xd1\xeb\xa1\xdc\xdd\x7f\xa0\x98\x3e\x17\x7f\x68\x52\xec\xd1\xf8\xdd\xa5\xdd\xe3\xf1\xbb\xe6\xd5\x3d\x20\xbf\xbb\x55\xf7\x90\xfc\xbe\xc2\x6a\x7f\x1f\x3a\x22\xf7\x9d\x8d\x72\xef\x43\x99\xae\xa9\xe2\x6e\x28\xba\xce\xec\xdc\x6a\xbb\xd5\x57\x8c\xf5\xb9\xf6\xcf\xab\xe3\xab\x63\x1d\x7c\x81\xa2\xed\xf6\x78\x25\xc4\x26\xaa\xd1\x34\xf1\x3e\x4c\x69\x12\x1c\x07\xc4\x89\x89\x3c\x42\xd3\x20\x88\xab\x98\x26\x22\x96\x27\x80\xea\x88\x9f\xb3\xb9\x55\x46\x09\x43\x66\x0f\x60\x69\x5f\x4a\x84\x59\x7b\xb4\x76\xd8\x39\xb5\xc9\x3e\x6a\xa7\x86\xa6\x83\xfe\x65\xe9\x9a\x4a\x7c\xc2\x89\x5d\x5a\x0d\x37\x45\x53\x01\x96\x21\xb7\x1b\xa8\xd4\x7e\xae\x27\x15\xae\x35\xd2\x80\xf5\x95\xa0\xd5\x9a\x95\xf4\x73\x9e\xdf\x7e\x57\xf1\x35\xab\x29\x39\xb4\x2c\x11\x28\xdb\x28\xff\x47\xaa\xe9\xef\xdf\xfc\xfd\xbb\x61\x45\x6b\x5e\xdc\xd0\xa8\x42\x43\xe5\xfd\xf4\x20\x5f\x63\x87\x10\x1a\x8a\x15\x2d\x7d\xb5\xb1\xae\x47\x1a\x37\x2e\xa8\x21\xae\xfb\x74\xc8\xdf\x5b\x6f\x91\xe0\x75\x95\x91\xbf\xbe\xf9\xf6\xb5\x76\x55\x5b\x19\xb7\xab\x3a\x06\x60\x94\xba\x5e\xf1\xde\xdc\x96\x22\xfd\x08\x9e\xf8\xac\x52\x43\xda\x4b\x87\x9b\xf4\xb6\xe0\x69\x4e\x24\x74\x4d\xb5\x5d\xbe\x22\x23\x9b\x5a\x4f\x20\x34\xbc\xdd\x9e\x8c\x1e\xf5\xc1\x11\xfd\xc9\xe8\xb1\xfa\x11\x7c\xf9\xe2\xd9\x17\x72\xd3\x88\xe1\x9a\x8a\x15\xcf\xa7\xe5\x76\xcb\x12\x85\xb9\xec\xf4\x20\x76\x46\x2e\xb4\xc3\x74\xb8\xa4\x22\x5b\x75\xa2\xc9\x2b\x22\x97\x58\xf3\xe3\x5a\x71\x1a\xc0\x0b\x53\x14\x40\x89\x00\x99\xc8\x8b\xa5\x4d\x31\x48\x55\xef\xff\xe1\xee\xdd\xfb\xdb\xc6\xad\x45\xd1\xff\xf5\x29\x64\x9e\x73\x54\xe2\x18\xd1\xd8\xd3\xc7\xed\x51\x82\xf1\x2f\x93\x47\x9b\xdd\xc9\x64\xf6\x24\xd3\x9e\x5e\x6d\x1d\x6f\x5a\x84\x6c\x34\x12\xa8\x82\x90\x3d\xde\x16\xbf\xfb\xfd\x61\xe1\x4d\x82\x94\x9c\x49\xda\x9e\xfb\x4f\x62\x91\x20\x1e\x0b\x0b\x0b\xeb\xbd\x6a\xd2\x09\xfb\x1f\xd3\x46\xfb\x96\xb2\x55\xee\xf9\x24\x97\x5d\x0a\x7a\xe8\xe6\x27\x5c\x42\x46\xf4\xb1\xba\x87\xc7\xf2\x86\x8e\xff\x13\xda\xfd\xa7\x89\x91\x1b\x57\x22\x7a\x7a\xbd\xae\xae\x8a\xf5\x74\xfc\x92\x95\xe3\xfb\x6a\x37\xde\xd0\x82\x8f\x65\xa5\x61\xbe\x5e\xeb\xb6\x9a\x7d\x34\x5f\x40\x40\xda\x45\x86\x92\x33\x86\x36\x2e\xbe\xa7\xce\x21\x67\x0c\x6c\xec\x8f\xb4\xde\x56\xbc\xa6\x7f\xa4\x45\x49\x45\x9d\x90\x6d\xde\x41\x50\x9f\x65\xce\x74\xd4\x6d\x94\x42\x50\x8e\x42\x99\x47\xd7\x0d\x67\xd6\xc0\x25\x92\x06\xae\x8a\x88\x39\x07\x03\x01\xae\xc9\xc9\xf9\xd3\xc2\xfb\xef\x15\xda\x7e\xf5\xdb\xdf\x13\x62\x42\xad\x4c\x8d\xc8\x02\xa1\x87\x9a\x9c\x9c\x19\x03\x94\x9a\xc2\x39\xec\xac\xf5\xf6\x9b\xd6\xbb\x2b\x1d\x5c\x0d\xb5\xcf\xa7\x52\x30\x25\x3b\xad\xa3\x37\xc5\xe9\x39\x76\xf1\x62\xa6\x09\x24\x17\x42\x72\xbe\x8b\xf5\x82\x0b\xb2\xc6\x72\xbe\x5b\x90\x75\xe3\xab\x06\x80\xba\x45\x30\x38\xef\x6f\xb8\xac\xfe\x58\xd4\x37\xa4\xcd\xa7\x5a\xfe\x9a\x10\xf0\x86\xe3\xe4\x81\xf1\xe5\x7a\x57\xd2\x37\x25\xf8\x73\x8c\x9c\xab\xad\xed\x4a\xbc\x06\xf1\x70\x53\x95\x74\x0d\xb5\x67\x46\x11\x72\x39\x26\x9c\x75\x47\xb7\x7a\xb0\x87\xc6\xc7\x83\x77\x1a\xe5\x95\x99\x19\xb6\x8a\xff\xb0\x15\xe8\xf9\xa3\xa5\xc1\xfd\xfc\x43\x21\x8a\x4d\x0a\x25\x3c\x89\x75\x92\x05\x0d\x42\xd7\x71\x8d\x77\x5a\x9d\xc7\x56\xb9\x4e\x08\xc2\x6a\xf8\x3f\xe7\x3a\x7b\x10\x83\x8d\x77\x96\x21\xf6\xac\x06\x67\x94\xca\xd4\xe0\x41\x17\xba\xcc\x0a\x9f\xb3\x05\x9a\xd1\x5c\x28\xb1\xf4\x34\xef\xc4\x97\xaa\xf7\x17\x6c\x96\x65\x48\x89\xa7\xba\xb9\x0b\x91\xeb\x12\xc8\x6c\xae\x3b\x18\x6b\x94\x5e\xa8\xeb\xc4\x60\xb7\x4f\x58\x22\x2b\x47\xeb\x95\x18\x80\x1a\x3b\xe7\xdd\x98\xf1\x31\x47\x76\x36\x3b\x33\xe4\xce\x0e\x69\xa6\xec\x27\xf0\x98\x95\x43\x9e\xb7\x39\x5b\x40\xd2\x5f\xfd\xd7\x6d\xb1\xde\xd1\x20\xc0\xdd\x8d\xbf\x33\xa3\xfa\xec\x99\x59\x86\x29\x32\x57\xda\x24\x43\x41\x42\xdf\xaf\xcf\xbe\xba\xc6\xd9\xa9\xba\xe6\xcc\x4a\xb5\xbc\xea\x92\xd8\x50\x9c\x5d\x5e\xd2\xfa\x2d\x50\xa1\x0c\x3f\xc0\xa8\x2e\x6c\x78\x48\xb8\xa5\x46\x72\x0e\x24\xdb\xb0\x59\x2d\x2b\x41\xbd\x04\xdc\x12\x6d\xfb\xb2\xbe\x9a\xac\xac\xee\xf8\x48\xa8\xe8\x9d\x3d\xd7\x63\x8e\x9d\x82\x6a\xbc\x2a\xd8\x9a\x96\x99\x49\x18\xca\x6a\xd3\x42\x67\x7a\x3f\x39\x1b\x85\x0c\x0b\x3c\xd4\xfb\x09\xec\x89\x44\x23\xa8\x14\x6e\x52\xe9\x2f\x3f\x12\x93\x2f\xc9\x64\x1f\xa5\x3a\x39\x31\xab\x38\x11\xe1\x2f\x53\x25\x97\xad\x29\x54\xab\x11\xee\x4f\xfd\x62\xcd\x38\xfd\x7e\xa7\x46\x34\xc5\xbb\xf5\x0f\xfd\xd2\x64\x15\x27\xc2\xfe\xa5\x1f\x73\xdd\x11\x77\x9d\x70\xdb\x81\xfe\xc3\xac\x0f\x60\x5d\x13\xba\xdf\xcf\x1f\x24\x93\x6b\x3a\x73\x20\x79\xa5\xb7\xa1\xa4\xb2\x60\xeb\x99\x6c\x16\xcd\x63\x37\xba\x1f\x33\xf4\xb0\x8a\x7e\x7c\xa8\x00\x8b\x33\xfc\x40\xf9\x6e\x43\x45\x71\xb5\x56\x1f\xe3\x6b\x2a\xbb\x79\x71\xc6\x72\xda\xf9\xb2\x39\x3c\x0e\xb4\xfb\x00\xe4\xea\x91\xe3\x04\x5f\xaa\x71\xe8\xf4\x3d\x15\xb7\x16\x19\xe8\xf4\x45\xc5\x57\x6b\xb6\x94\xf6\xf7\xf7\x95\x7c\x5d\xed\x78\x69\x7f\xbf\xae\xc4\x15\x2b\x4b\xca\xed\x83\x9f\x78\xb1\x93\x37\x95\x60\xff\x45\x5d\xa3\xe7\x57\x95\x70\x3d\x98\xca\x18\xf6\xe7\x1b\x7e\x5b\xac\x99\x6b\x6a\xa3\xb0\x35\x16\x1b\xad\x8d\x08\x0b\xfa\xd1\x2e\x53\xe6\x98\xec\xdc\x23\xff\xc5\x43\x33\x93\xc8\x62\x8c\x73\xc7\x07\x21\xbb\x9b\x18\x53\x7f\x1e\xa7\x12\xa1\x01\xda\x0b\xcc\xf7\x7b\x89\x9a\x80\x73\xb5\x54\xaf\x75\xc9\x53\xff\x06\x61\x61\xc2\x12\x08\x53\x6c\xb4\x68\xfc\xfa\x38\xee\xef\x22\x3c\x79\x51\x67\x9e\xd2\x2a\x31\xd8\x1d\x6d\x83\xc6\xd1\x60\x26\x5f\x5d\x95\x0b\x9c\x7d\xb8\xa1\x63\x43\x79\xc6\x82\xfe\x0d\x22\x09\x81\x0b\x5a\x56\x9b\x0d\x93\xe3\x2b\xba\x2c\x14\x45\x61\x72\x7c\x57\xd4\x63\xa6\x77\x04\x0c\x05\xd1\xee\x14\xb8\xe8\x4c\x21\x6c\x90\x99\xb0\xe1\xce\xa0\x9e\xf4\x48\xb6\xa1\xe5\xb8\xda\x49\xe8\x3d\x42\x85\x1a\xd7\x9d\xde\xc3\x06\x99\xd1\x7a\x0d\xf4\xae\x66\x5f\x28\x5c\xa3\x7a\xf6\x01\xde\xed\xf0\xae\x0b\x3e\xf7\x3a\x33\xf9\x3a\x07\xfa\x66\xf5\x78\x17\xa0\x36\xf4\xdf\xc5\xf5\x35\x5e\x77\x86\xe9\xb4\xd2\xa3\x2d\x0f\x8c\xb6\xb2\x27\x0b\x86\x6a\x9d\xb3\x25\x5e\x76\xc6\x89\x9b\x64\x26\xa4\xa4\x33\xc8\xb2\xda\xad\xcb\x71\xc4\x4f\x2b\x09\x69\x27\x96\xda\x24\x1d\x9f\xf0\x15\x5e\x75\x06\x8a\x5a\x64\xa6\xd6\xcc\xc0\x62\xf4\x7d\x33\x2e\x77\x54\xb1\xe1\xc5\x78\x69\x68\x0a\x0c\x17\x13\x98\x12\x97\x9d\xe1\xa2\x16\xce\xeb\xe6\xf8\xe1\x6a\x20\x68\x63\x5b\x5f\x2d\xa6\x70\x37\xf8\xa6\x33\x60\xf0\x3e\x3b\x74\x93\x43\xb4\x56\xff\x4d\xde\xd1\x66\x0f\xdf\xe5\x9f\xef\xfa\x89\xc4\xe8\xa3\xaf\x84\xe8\x2b\x7d\x1d\x24\x08\xb2\xe5\x0d\xcc\xe0\x9a\xea\xe4\x56\xc9\xff\xde\xf1\xe5\xb3\xec\x89\x55\xb7\x63\xaf\x6b\xd6\x79\xdd\x8c\x1a\x59\xff\xd0\xbe\x33\xfe\xcf\xb0\xe1\x35\xe5\x6a\x63\xe9\x9b\xf2\x75\x25\xc2\x17\x8e\xdf\x4e\xab\x68\x02\x86\x1c\x54\x59\xa1\x26\x56\x77\x10\x2a\x59\xf5\x93\x50\x7b\xaa\x9f\x2c\xab\x62\x4d\xeb\x25\xd5\x6a\xc1\xbf\xef\x68\x2d\x6b\x05\x40\xab\x7a\x36\x73\x14\xd5\x6e\xab\x3f\xab\x0f\xa9\xd9\xe6\x72\xd1\xe0\xfa\x46\x1d\xc2\x1f\xa9\x12\xf0\xdb\x7a\x26\xdb\xf0\xe4\x3c\x6e\x17\xab\x16\x7d\x87\x27\xd6\x80\x68\x9b\x7f\x5b\x2c\x3f\x5e\x83\x13\xd7\x81\x01\xce\xfa\xbe\x88\x86\x0a\x9a\x83\x82\xc6\x22\x84\x38\x74\x34\xfe\x56\x57\xfc\x49\xb1\x65\xf1\xe9\x68\xdb\x6d\x0e\x9c\x97\xf4\x6b\x41\x6b\xd9\xb5\xf8\xa8\x4b\xfb\x97\x1d\xa7\x24\xba\x33\xc2\xed\xe3\x41\x5c\xf7\xeb\xbd\x34\xaf\x5f\x54\x5c\x52\x2e\x41\x3b\x96\x15\x5b\xed\x2b\xce\x2a\xfe\xd5\x2d\x2f\xa7\xc5\x96\x9d\xea\x32\x4c\xc5\xdf\x8a\x9f\x75\x95\x8a\x7a\xd6\x51\x34\x59\x86\x46\x5b\x98\x1e\x8c\x00\xcc\xb5\xd2\xfc\xb2\xde\x41\x49\x45\x1c\xe5\x75\x04\xf3\x2f\x15\xf5\xf4\xf9\x72\x49\xb7\x92\xb4\x1f\xec\xf7\x03\x93\xe1\x4d\x0f\xd2\x9f\x7b\xa4\x4f\xc8\xec\xda\x6c\xad\xe6\xe4\xb5\xa2\x5e\x24\x07\x03\x94\xb7\xd7\x78\xf9\x4b\x7d\xa0\x96\x9f\x33\x9c\xfd\xe1\xd5\x87\x0c\x3f\xa8\x7d\x9e\x3d\xac\xd8\x5a\x52\x31\x7b\x60\xe5\x4c\x18\xe1\x0c\x67\xe0\xfc\x37\xac\x73\x14\xb1\xce\xb1\x2c\xea\x1b\x2a\x22\xa5\x23\x94\x70\x76\x6a\x47\x04\xd1\xe6\xbb\x3e\x6d\xb1\x5f\x5a\x7e\x86\x45\x42\x7f\x60\x1a\x59\x13\x47\x72\xed\x7c\xca\x4a\xb5\xfc\xc8\xa8\x93\x00\x41\x85\xb3\x1f\x9e\x7f\x78\xf1\x47\x0b\x04\xd6\xa0\xf8\xc4\xb1\x43\x27\x0e\x8e\xc5\xa1\xbb\xa8\xe7\x48\x19\x91\xf4\x51\xb7\xd7\xe7\x39\x72\xa0\x60\x33\xf8\x4f\x56\x7d\x67\x30\xdb\xd9\x22\x25\x5e\x5d\xf8\xb7\x7f\x37\xde\x92\xa9\x97\x5c\x01\xb5\x63\xbe\x75\x3b\x6a\xd4\xb4\x74\xaa\xf3\x75\x59\x5d\x9e\xc9\xd7\xbd\xab\xb1\x3b\x35\x5a\x59\xaa\x35\xb8\x95\xbb\x5f\x02\x05\xb3\xd1\x49\x4f\x35\x6f\x9d\x57\xae\xfa\x15\x9b\x4c\x58\x4b\xbe\xbe\xe8\xff\x8e\xa1\x19\x8b\x6a\xc5\xe2\xb0\x0a\xba\x8e\x1c\x87\x5d\xfa\x70\x23\xaa\x3b\x1e\xea\x90\xa1\xeb\xc9\x24\x03\x95\x2f\xaa\x48\xd4\xd0\x27\x3e\x32\xf5\x07\x33\x42\x4c\x81\x8e\xf7\xb0\x54\x54\x41\x71\x40\x11\xf1\xe3\xfe\x2b\xe0\xa8\xdb\xdf\xec\xf7\x67\xf0\xa4\xb6\x3d\x74\x6d\x1e\x50\xbe\x0a\xb4\xcf\x90\x66\x6b\x27\xd6\xe0\xd7\x1a\xcc\x0c\xe2\xd4\x0c\xb8\x6b\x72\x40\x3c\xcf\x33\x43\x8b\x0c\x83\x37\x1b\x67\xa7\x1c\xf2\x50\x32\xf8\x37\xaf\xf6\xfb\x2c\x43\x4e\x77\xa9\xfb\x9d\x15\x8d\x53\xb8\xe9\x45\x7a\xae\x3f\xaf\x51\x03\x8e\x1c\x7a\xad\x0a\x21\xaa\x2e\x42\xd8\x35\x1a\xb7\x1a\x40\x08\xc8\xd2\x15\xac\x83\x07\x1a\xfe\x8a\x14\x76\xff\xab\xb0\x88\x2e\x8d\xf2\x6e\xef\xea\x99\x55\xe6\x63\x0f\xd5\x19\x0d\x40\x8c\xcd\x70\xb3\x65\x4e\xed\xd0\xa1\xe8\xba\x3e\xb6\x4b\xfd\xec\x03\xfd\x59\xba\x2e\xf3\x33\xcc\x93\x4a\x6c\xa4\x5d\xe4\x9e\xaf\xd7\xad\x17\x39\x0a\xc7\x0e\xd2\x25\x78\xdd\x29\x24\xce\x5d\x55\xe2\x55\x11\x1b\x59\x82\xcc\xfe\x90\x20\x9f\x42\x28\xb3\xef\x6c\x65\x2a\xeb\x50\x25\x00\x97\x94\x4b\x56\xac\x6b\x92\xd5\xc5\x86\x3e\xa9\x04\xbb\x56\x0c\x2c\x85\x64\xf5\x48\xe1\xa3\xba\x27\xc0\x98\xa5\x91\x6b\xbf\xd7\xd6\x8e\xe0\x11\xf4\x66\x28\xd1\x47\x7a\x5f\xe7\xe6\x6b\xab\xbb\x76\x4e\x72\x3b\xb1\x76\xf9\x16\xb2\x8b\x0c\x7d\xf3\xe4\xfc\x22\x9b\x64\xb3\xec\x22\x1b\xc1\xdb\x53\x92\x65\xa7\xf2\x14\xc0\x95\x52\xf0\x22\xdb\xb5\x36\x6b\x7c\x8a\x96\x54\x7f\x7f\x41\xa1\xaa\xbc\x36\x1b\x69\x7d\x3b\x5b\xdd\xdb\xb7\x33\xf3\x56\xff\x74\xf0\x6e\xb4\xe8\x25\xdb\xec\x49\x8b\x91\xc7\x49\x76\x45\x5f\x16\x07\x59\x15\xc5\x15\x3c\x1d\x2f\x6f\x14\xae\x48\xb2\x93\xab\x27\xbf\xcf\xf0\xaa\xa8\xe5\x55\x55\xc9\x99\xa6\x66\xcb\x6a\xb3\xdd\x49\x5a\xe6\x0f\x3d\x82\x05\xf0\x2a\xf6\xa3\x8b\xf8\xe7\x2c\xfe\xe9\xed\xa1\xef\xee\x38\x15\xba\x42\xe7\x74\x5d\x55\x1f\x77\xdb\x3c\x53\xb2\x1c\x5b\xd2\x99\x6d\x9d\xa1\x06\xd7\xe1\x98\x5d\x2b\xad\xeb\x58\x2a\x81\x66\x57\xd3\xd7\xea\xbe\x69\xcf\x3c\xf4\x60\xd2\x06\xad\xe4\x3c\x8c\x2d\xf1\x47\xa8\xc5\x68\xfc\xfd\x32\x25\xcf\xb2\xeb\x19\xe5\xb7\x4c\x54\x7c\x03\x45\xe7\xad\x85\xee\x24\x87\x53\x01\x9d\xbd\xfa\xfe\xcf\x93\x09\x94\xb0\xf2\x0f\xa6\x97\xff\xf6\xef\x3f\xbd\xfa\xf1\xaf\x97\x6f\xbe\xff\xf0\xea\x0f\x3f\x3e\xff\xf0\xe6\xdd\xf7\x50\x13\x65\x32\x39\x81\xfb\xbe\xae\x84\x0c\x10\x2e\x61\x65\x8d\x10\x3d\xf4\x52\x07\x3b\xc2\xb3\xaf\x5d\x70\x57\x90\xc0\xfe\xa1\x81\xa4\x33\x3a\x7d\x81\x0d\x04\x85\x08\x50\x3e\x67\xf3\x6a\xb1\x20\x54\xff\xef\x68\xe7\x30\x5b\x98\xe2\x9d\x1e\xc7\x18\x5a\xbe\x28\x62\xa5\xb4\x9b\x10\x3f\xc8\x2f\x56\x8a\x2f\x5c\x75\xfc\x2f\xfa\x26\x61\xbb\x1d\x66\xdb\x94\x64\x67\x26\x07\xc9\x4d\x02\xd3\xb8\xba\x14\x18\x5f\x52\x62\x95\xcc\x96\x81\x0b\xe6\xa4\xd8\x37\x23\xd9\x26\xad\xc7\x07\x87\x06\x9f\x5d\xed\x41\x15\x70\xf7\x5a\xf3\x1e\x23\x85\xf7\xa2\x69\xbd\xc8\x05\x0a\x27\xc8\xa3\x09\x0a\x37\xc1\xe4\xee\x3d\x7e\x9a\x66\x0b\xbf\xdc\x64\xff\x81\x02\x08\x2b\xeb\x99\x68\xec\xa0\x29\xef\x97\x00\x42\x8a\xc1\x57\xc7\xc9\x0d\xe7\x50\xa5\xed\xf9\x64\x2c\x1a\x6e\x8a\x0c\x73\x2c\x71\xe4\x98\x16\x01\x41\xe8\x59\x99\x69\xa4\x1d\x69\x3e\xf7\x44\xbc\xab\x5b\xcf\x54\x96\x69\xaf\x1c\x3f\x93\xa1\x8d\x00\x7c\x11\x38\xf6\x8c\x53\x27\x31\xbe\x63\x63\x09\x4b\xa4\x37\xec\x87\x77\xef\x63\x12\xd0\x2f\xc8\x89\x40\x90\xeb\x1f\x06\x3f\x40\xbe\x46\xa1\xe0\x58\x0c\x2c\xa2\x52\x2b\x38\x24\xcf\x15\x38\xfb\xe1\xa7\x98\x1c\x94\x7d\x9e\x45\x7e\x0f\xd5\xd8\xdd\xbe\x06\xe0\xa9\xa6\x12\xb9\xfd\x21\x9c\xbd\x7c\xf5\xdd\xab\x0f\xaf\xd4\x5e\x5d\x2a\x5e\x62\xfb\xe6\xe5\x6b\x51\x6d\x7a\xbd\xf7\xf0\xd0\x86\x01\x52\x49\x64\x9c\x13\xc0\xa3\xae\x22\x51\x06\x0b\x60\xe3\xfd\xac\x4b\xda\x71\xd2\xab\x10\x21\xa4\xb8\x88\xf3\x5e\x64\xd9\x2c\x17\xa4\xc2\x9c\x64\x17\xac\x24\xd9\x69\x81\x53\x3e\x21\x86\x59\xf2\xfc\x13\xe5\x65\xfd\x17\x26\x6f\x2e\x9e\xe8\x22\xef\x96\x81\xe3\xd8\xe5\xf3\xb0\x36\x62\x34\x13\xae\x79\xce\xa1\x4c\x5f\x3c\x87\xd8\xf1\xc1\x25\x2e\xf2\x65\xaa\x10\x6a\x79\x3c\x6d\x8a\x9f\x7f\xfa\xf1\xbb\xef\x74\xb9\x8b\xaf\xcf\x7e\xf3\xfb\x23\xb5\x7f\x5a\x3b\xa1\x44\x90\xb7\xc5\x16\x6b\xb2\x6a\xe1\x1e\xf6\x39\x92\x09\x16\x5a\xfa\xbc\xf2\xad\x0d\x85\xce\x47\x50\xbd\x36\x67\x90\x52\xaa\xa6\x32\x67\x78\xbe\x40\x58\x7b\x95\x31\x53\xd4\x4f\x3a\x87\x9f\x2a\xf4\xf3\x4a\x8f\x16\xfc\xd0\xb9\x87\xf5\x77\x67\xb8\x48\x4f\x61\x7e\xb6\x40\x4a\x84\x9b\x7b\x8e\x21\xb5\x0e\x1f\x9f\xd2\x75\xe4\xa4\x53\x56\xba\x1c\x10\x6c\x64\xb7\xe0\xb4\x3a\x95\x90\x9e\x33\x57\xc3\xd7\x7a\x2d\xf3\x05\x42\xb8\x3a\x25\xd2\x28\xc3\x6a\xb7\x5f\xa3\x7a\xce\x4d\xb5\x5e\x0a\x66\xf8\xba\x41\xb9\xc4\x0c\x67\x13\x56\xd6\xff\xe3\xb7\xdf\xfe\x8f\xdf\xbe\x24\x99\x73\x62\x49\x4e\xd1\x55\xde\xf0\xdd\xa8\x9e\xaa\x06\xc7\xa2\x61\x4b\x55\x64\x52\x34\x1b\xa3\xfa\xfb\xdd\x72\x49\x6b\x23\xc5\xfb\x82\xc3\x23\xdf\xc2\x98\xce\xda\x2d\x40\x48\x0d\xcd\x6a\x39\x37\xa6\x5a\x97\xd3\x19\x8c\xdd\xd6\x3f\x1f\xda\x38\x69\xd5\xe8\xa3\x0c\xf1\xb2\xca\xf3\xf2\x25\xc8\xd0\xb4\x7c\xab\xcd\xa1\x6e\xc2\x23\xe3\x12\x4e\xb5\x4b\xf8\xf8\x37\x67\xe7\xb3\x68\x22\x1d\xe3\x55\x5e\xe1\x42\x3b\x1b\x8f\x7f\x73\xf6\xeb\xb8\x71\x6c\x81\x8a\x5a\xfe\x26\x6e\x19\x99\x90\xa2\x86\xff\x2b\x6e\x18\x19\x7f\x74\x43\xeb\xaf\xac\x24\xc6\x6f\xc8\x6f\xcf\xce\x62\xd0\x05\xd6\x1b\x68\xdf\x44\x6f\xcd\xc7\xfa\x0d\x76\xdb\x94\xac\x2b\xf0\x0d\xf9\xfa\xec\x6c\x32\xa1\xcf\x7e\x7d\x76\xb6\xdf\xff\xfa\xec\x37\x8a\x73\x57\x1f\x99\xdd\x49\x7d\xf4\x9b\xaf\xbf\xd6\xad\x14\xd9\x4e\x5f\x41\x86\xeb\xc4\xcb\x8e\xeb\xa7\x15\x4e\x32\x84\x57\xe4\x61\x27\xd6\x33\x8a\xb5\x44\x3b\x93\x0d\x2e\x49\x35\x0d\x54\xc5\xad\x8b\x71\x69\xc5\x2a\xd5\x81\x61\xcf\xf3\xb2\xe3\xd2\xe8\x67\xca\x08\xc5\x70\x19\xa6\xfc\x2b\xd5\x7d\xb8\x52\x58\x9f\xf8\x5e\x87\x47\x57\x1f\xf7\x7b\xda\xd1\x41\x19\xdf\xbd\x54\xf0\x81\xc6\xdd\x5d\x2e\xd0\xe8\xeb\xb3\x33\xf0\x50\xd3\x8a\x89\xc9\x44\x76\xfa\xb9\xc8\xab\x50\xc1\x42\x24\x96\x24\x7a\x62\xdd\x23\xd1\xac\xd5\x92\x63\x25\xd8\x83\x6a\x23\x3e\x19\xd2\x17\xcd\xd5\xb0\x83\xd4\xc4\x79\x85\x29\x66\x9a\x2b\x59\xa1\x4e\x21\xf3\x16\x7f\x09\xb3\xb7\x3e\x9a\xee\x10\xd9\x4e\x00\x60\x33\xf0\x5b\xec\x28\xf9\xda\xb9\xe1\xca\x69\xad\x31\x2f\xaa\x63\xe7\x47\xea\x9b\xc1\xba\x77\x06\xea\xaf\x15\x1a\xe9\xa1\xc5\xce\x78\xc0\xc3\xc2\xa8\x6a\x82\x4b\x0d\xa7\xb0\xeb\xa3\x06\x94\x68\x14\x69\xbb\x88\x18\x59\x6f\xd4\x14\x98\x95\x8c\x0c\x7f\x7e\xa0\x3f\xcb\x08\xe4\x55\x00\xad\xde\xb9\x4a\x98\x6b\x35\xbd\x04\xbe\xa7\x44\x8d\x62\x67\xde\xcf\xc6\x3f\xbe\x7a\xff\xc1\x28\x06\xff\x9b\x7a\x65\x8a\x54\xcb\x6a\x9c\x9d\x52\xc5\xe8\xa8\x87\x06\xef\xa3\x83\xa9\x95\xc4\x9a\x8d\x82\x86\xbc\xaf\xa5\x42\xec\xaa\xeb\x7d\x0a\xed\xc7\x65\x45\x6b\xb0\x9a\xd7\x94\x6e\xd4\xb0\x57\x74\x6c\xab\x66\x33\x3e\xbe\xaf\x76\x62\x5c\x6c\xb7\xde\xed\xb4\xba\xa5\x42\xb0\x12\xdc\x2a\x6e\x59\x31\xfe\xcf\xa2\x2c\xdf\x89\x77\xe6\xe9\xfb\x82\x97\x57\xd5\xcf\x7f\x00\x5f\xd5\xfa\x3f\xa1\xbe\xe9\x0d\x1d\x5b\x65\x85\x31\x5a\x5f\x64\x68\xc4\xfd\xcc\xc3\xb3\x9d\x50\x04\xc0\x69\xd6\x2e\xb4\xc6\x53\xd7\xb9\x99\xe6\x5a\xff\x4a\xd1\xe8\x9f\xe6\x5c\x6b\xb6\x28\x9a\x77\x3f\x01\x4c\x51\x33\x8a\x66\xed\x0f\x2c\xbc\xa6\xac\x7e\x5d\xd4\xf2\x5b\x50\x09\x99\x6f\xc3\x7d\x56\xdf\xea\xa7\xf1\xc3\x66\xd0\xf8\x66\xad\x49\x45\x5d\xb3\x6b\x9e\xb7\x28\x32\x56\xdc\xa8\x22\xcc\xc2\xda\xe4\x3a\x3e\xfe\x5a\x75\x9a\xa1\x91\x8b\x19\xe3\x17\xc2\xea\x72\x5b\x9d\x37\x8a\x95\x77\x7a\xde\x99\xfb\x73\xbf\xcf\xfd\x27\x0f\xce\x01\x56\x4c\x97\x5e\x65\xb7\xdf\xeb\xc5\x75\x95\x79\xa3\xc8\x5c\x91\x84\x74\x2e\x40\xab\x38\x99\x80\x7c\x07\x2c\xb5\x5a\x19\x94\x42\x34\xe3\xce\x33\xd3\xe5\x13\xd5\x67\xb6\xb0\xa9\x4b\xe1\x95\x99\xc7\x13\x69\x5e\xe5\xbd\xef\x08\x43\x08\x0b\xb2\x32\xd2\x27\x42\xb3\x81\xb1\x63\xf0\x08\xfc\x10\xac\x77\x06\xaa\x31\xd1\x32\x3a\x68\xed\xa8\x7a\x4f\x32\x6d\xcc\xa4\x1a\x48\x3f\x4b\x22\x8d\x06\xd9\x8f\x44\xed\x48\xfa\x45\x8f\xe6\xd5\x87\x2a\x4d\xaf\x20\x27\xf4\x7b\xca\xcb\x28\x62\x3f\xd6\x33\xdb\xfd\x4b\x70\x96\x81\x16\x5c\x31\xe9\x06\x09\xb5\x7a\x3d\x17\xd8\x7d\x3b\x17\x0b\x53\x9a\xb4\x71\x80\xc2\x42\x9d\x5f\xe2\x51\x58\xf1\xdd\xf0\x0c\x61\x61\x4e\x56\x2c\xde\x01\x39\x3b\xea\xb8\xc4\xd1\x1a\x89\xc6\x42\xcf\x54\x8b\x60\xcb\x6a\x0d\x51\x8e\x07\x5b\xeb\x00\x17\x45\x86\x5a\x71\x2a\x86\x28\x81\x62\x9d\x82\x3b\xfc\x57\xff\xe7\x46\xca\x6d\xdd\x0a\x5b\x41\x52\xdc\x3b\x88\x9d\x66\x5f\x7d\x05\x11\x2b\xc6\xd0\xc2\xd1\x43\x87\x92\xfd\xb5\xda\x8d\x0b\x41\xc7\xbb\x9a\xf1\x6b\x8d\xf1\xe3\x97\x85\x2c\xc6\x77\x4c\xde\x8c\x79\x35\x56\x53\xea\x12\x6d\x7d\xa9\x4c\xc7\x1f\x6e\x58\x3d\xbe\x63\xeb\xf5\xb8\x90\x92\x6e\xb6\x52\xd1\xb5\x5d\x4d\x81\xa6\xc1\xa7\xd5\x0a\xfe\xb6\xa0\x1b\x9b\xa5\xe2\xf1\xdd\x0d\x5b\xde\x8c\x99\xbe\x20\xb4\x3a\x78\x27\x68\x39\x5e\x19\xea\x69\x2a\xc5\x07\xbd\xb0\xda\x7e\x3d\x1d\xff\xb0\xa6\x8a\xf7\xad\xa9\x74\x43\xfd\xe5\x86\x49\xba\x66\xb5\x1c\x6f\x8d\x0d\x15\xfa\xb2\x73\x0e\x54\xcd\xd3\xbf\xd5\x53\x3f\x23\x80\x04\x58\xc6\xac\xe7\x23\x72\x0e\xf8\xb4\xc1\xdd\xfb\x3a\x71\x8d\x50\x30\x8d\xca\x30\x82\x85\x5a\xfb\x96\x40\x0f\x81\x3f\x7f\x5a\x06\xe9\x92\x51\xa7\x37\xed\x78\xa1\x8b\xc9\x44\x18\xe9\xe6\xc2\xfe\x31\x9b\x5b\x73\x56\x96\x9d\x52\x6c\x8c\x82\x1f\x6e\xe8\xf8\xaa\x58\x7e\xa4\xbc\x1c\x6b\x0e\xa3\xa4\xa5\xde\xd9\x82\x1b\xe7\x2e\x6b\x2a\xcc\xb2\x53\xd1\x2c\x1a\xdc\x27\xfe\xf4\xe9\x0f\x21\x5d\x58\x87\x9e\x65\x90\x6f\x6b\x1c\x51\x40\x17\x2e\x40\x82\xba\x53\x04\x62\x6f\x84\x2b\x30\xff\xdb\xb3\x8b\x6c\xfe\x6e\xc3\xa4\xa4\xe5\x58\x4b\xf7\xf7\xe3\x3f\x7e\x78\xfb\xdd\x22\x9b\x09\x3c\xcf\x02\x0c\xb5\xa6\xcd\xec\x34\xe7\xc6\x88\x05\x46\x4d\x0e\x47\xfc\x34\x1b\xeb\xf1\x68\x39\x2e\x14\xbf\x83\xb3\x1f\x34\xfb\x3b\xce\x21\x0e\x1c\x65\x98\x2d\x8c\x96\xe2\x3f\xb8\xba\x6b\xbd\x9e\x3b\xb1\xc3\x0f\x50\xa5\x95\xfa\x0c\xc5\x26\xc4\x42\xbb\x76\xdb\x5f\x44\x20\xbf\xd7\x91\x23\x42\xd9\xe7\x88\x50\xd2\xab\xdd\xf5\x21\x9f\x38\xdd\xa8\xa6\x72\xb7\xfd\xdc\xee\x70\x83\xee\x6a\x0a\xd0\x86\x83\x74\x7e\x3c\xe0\x69\x6f\xb8\x0a\xc6\x61\x34\x63\x62\xca\x33\x78\x97\x21\x7c\x4d\xe5\x6b\x70\x47\xa9\xbb\xa6\xad\xf9\x03\x2f\x36\x74\x96\xb1\xfa\x7b\x7a\xa7\xf0\xaf\x5e\xce\x32\xf5\x67\x83\xdd\x9b\xb7\x55\xc9\x56\x8c\x96\xf6\xb5\xfb\x1d\xb4\x79\xb1\xa6\x05\xb7\x0d\xf4\x0f\x85\xc0\x97\xea\xfd\x87\xea\xc5\xba\x48\x8b\xa8\x6d\x22\x6c\xa6\xac\xb5\x77\xaf\x2b\x01\x1c\xce\x9d\x3a\xb9\x6f\xd5\x13\x85\xba\x11\x97\x13\x29\xf9\x13\x01\xbc\x16\x04\x15\x61\xd3\xcb\x50\x63\xab\x60\x69\xb3\x38\x83\x47\x8d\x3a\x2c\xf5\xdb\x62\xfb\xba\x12\x28\x67\x68\x54\xa7\xf4\x4a\xb8\x42\x0f\x7c\x0a\xf3\x51\x53\x79\xb3\xfa\x89\xd7\x14\x6a\x3e\xd6\x58\x09\x05\x42\x09\xe5\xa0\x70\xeb\x0c\x16\x5d\xb9\xce\xd1\x29\xdd\x95\x9e\x8d\xe9\x0f\x57\xda\xce\xca\xb0\x34\x69\xd6\x77\x24\x88\xbc\x41\x0f\xc5\xa0\x12\x48\xe7\x38\x4a\xce\xa8\xc2\xa9\x45\x02\x16\xd7\xa0\x85\x93\x90\x10\x03\x21\xcc\xa7\x82\x02\x8d\x7f\x0b\x27\xbb\x9e\x0a\xba\xa9\x6e\xa9\x46\x6f\xb5\x47\x91\xc2\xb7\xd5\x76\xbb\xab\x6f\x4c\xcb\x1d\xc2\x3b\xb3\x9f\xe1\xa2\x13\xb1\xfe\xa6\x0c\xed\xc9\x19\xc4\x00\xaa\x0d\x15\xae\x2a\x04\xf5\xe8\x21\x10\xae\x35\x53\x71\x27\x8a\xad\xc3\x11\xa8\x12\x3d\x32\xfa\x2f\x78\x5d\x5d\x81\x40\xe2\x5b\x40\x99\x09\xcc\xf3\x79\xbd\x80\xec\xce\x6a\x04\x48\x1f\xd2\xe0\x65\xb5\xde\x6d\xf8\xf7\x80\xb9\x2f\x15\x42\xf7\x22\xae\xb3\x83\x6f\x99\xd4\x9e\x9a\xd1\xf3\x1d\x57\xec\xd0\xb2\x12\xea\x02\xf2\x81\x39\x97\x5f\x5d\xe3\x6c\x9c\x59\x47\x0f\x64\x47\xac\xfb\x03\x51\xb5\x0f\x3f\x71\xa7\xd5\x9d\xc5\x37\x65\xd6\x2c\x30\x87\x8c\xb8\xaa\x51\x97\x5d\xa6\x38\x2b\xa4\x14\xec\x6a\x27\x69\x9d\x25\x35\x86\x06\xd8\xfc\xf4\xf4\x1b\x36\x75\x8d\xbf\x63\x1b\x66\x05\xb0\x93\x73\xe3\x8f\x2f\xa7\x6d\xe8\xe4\x15\x72\xe9\x7d\x61\x76\x95\x9e\x5a\xa1\xa3\x88\x84\xba\xc5\xa4\xd1\x2e\xb7\x54\xca\x6c\xe5\xeb\x42\x9b\x4b\xe7\xd9\xd7\x9e\xa8\x5f\x02\xa1\x55\xd7\x56\xc1\x38\x15\x7f\xa2\xf7\x51\x9e\x28\x61\x2a\xc7\x42\x11\xc7\xf5\x2c\x9f\xfe\x4f\xf4\x15\x1a\x99\x98\x4f\x0e\xb1\x43\x7c\x7e\xbe\xf0\xfc\x83\xd1\x28\x4a\x47\x19\xa7\x5b\x4a\x3f\x3e\x5f\xaf\xc1\xbf\xd6\xcd\xf2\x05\x2c\xf0\xcf\x8a\x28\xa7\xac\xd5\x66\x2b\xce\x30\x27\x0f\xac\x9c\x45\x80\x66\x65\xe6\xcf\x02\x9d\xd2\x62\x79\xf3\xdc\x82\x33\x2e\xa5\xa7\x16\x72\x7a\xfa\x8d\xec\x05\x37\x9f\xb3\x05\x09\x3b\xd7\x95\xb6\x78\x30\xd1\x3f\xd1\xfb\xbb\x16\x54\x7d\x90\x9e\xe3\x70\x9f\xe7\x73\x35\xaf\x05\x3a\x3c\x2f\x8f\xde\x22\xd4\x40\xa7\x54\xec\xa1\x2c\x00\x4d\xc3\xa9\x0a\xad\x6f\x96\xc1\x5c\xf5\x05\x94\x00\xaa\xf1\xff\x81\xfb\x47\xd7\xb6\xcc\xcd\x65\x84\xb0\xbf\x7a\xec\x9b\x9b\xa2\x7e\xc9\x84\xbc\x7f\x1e\x60\xf4\x64\x72\xd2\xf9\x0e\x6e\xa0\xd9\xc9\xc0\x57\x4d\xbc\xe3\x95\x48\x40\x31\xbb\x5a\x17\xcb\x8f\x99\x07\x5c\x38\xca\x85\x24\xd9\xb5\xa0\x94\x67\xc3\x93\xcb\xa1\x9f\x1d\x24\x17\x6f\xb0\xa1\x43\xc9\xd8\xfc\xf0\xae\x7f\x9e\xfb\xd0\x7a\xb3\x83\xd8\x5e\xd2\xa9\x81\x16\x8a\xbd\x39\xbc\xaf\x3c\xd8\xd7\x91\xb7\x74\x8e\x78\x62\x8b\xb9\x55\x79\x06\x4c\x83\xcc\x19\x50\x5a\x9b\xf0\x03\xa1\xc6\x28\xc1\x8a\xb2\x7c\xa7\xd7\x26\x72\x8a\x39\xae\x20\xde\x47\x0d\x16\x7a\xa6\x18\x85\x99\xb9\x3d\xa2\xe6\xda\x48\xd1\x51\x60\xa2\x87\x14\xfa\xb5\xef\xb7\xe6\x48\xd7\xee\x90\x75\x1b\x8e\x5e\xfc\xfc\x9c\x5d\xc0\x61\x10\xde\xc7\xe9\x29\x69\xf0\x2f\xb4\xf8\xf8\xb6\xd8\x46\x65\xf2\x2d\x4a\x9a\x23\xe6\xe0\xd4\x0a\x96\xb4\xe6\x39\x6d\x45\x53\xd3\x56\x58\x67\x36\xda\x79\x59\x79\x53\x64\x87\x29\x18\x1d\xd5\x2a\x11\x16\xcc\xb5\x83\x91\x37\x9e\xdd\x14\x75\xae\x17\x8d\xf6\x7b\x7d\xc1\xea\x9f\x50\xda\x87\x05\xb1\x69\x8a\x7f\xf0\xe0\x30\x57\x5c\xb4\x6b\x85\x2c\x9e\x38\xef\x5f\xc6\x99\x6c\x07\x4e\xa0\x87\xa6\x37\x21\x13\x5c\x0f\x3d\xe9\x98\x06\x82\x56\x8f\xc0\x89\x4e\x8e\xa6\xd4\x8e\xd1\xf9\x99\x22\xc6\x74\x7e\xae\xee\x69\x3a\xff\xda\x19\x18\x7f\x0d\x8e\x54\xae\xa8\x42\x22\xe2\x5b\xee\xf7\x1d\x89\x53\x4e\x26\xe6\x8e\x93\x68\x32\xc9\xb4\xc2\x27\x12\x48\x13\xb1\xd2\xee\x1b\x3e\x99\x64\x3e\x94\x26\x63\x5c\xbd\xcb\xac\xc4\xef\x9e\xed\xf7\x3e\x88\x3d\xc8\x56\x9b\x0c\x5e\x0c\x93\xc4\xb5\xaf\x73\xac\x31\x5a\x47\x41\x4b\x64\x8b\x10\x40\xd8\xb3\x50\x37\x9c\xfb\x00\x8a\xb0\x19\x22\x95\x0b\x74\x41\x73\x34\x2d\xb6\xdb\xf5\xbd\x09\x89\xc4\x02\xcd\x68\xfb\x49\x63\xd2\x4a\xb0\xb6\xb7\x66\xb7\x4e\xf1\x45\x2e\x08\xc5\xd4\x9c\x36\x34\x13\x44\xec\xf7\x0f\x8d\x51\x7c\x3e\x80\x2a\x94\x62\x56\x3b\xfa\x39\x3b\x39\xc3\x1f\x19\x2f\x67\x9e\x7d\xca\x70\x65\x14\xad\xa2\x89\x19\xad\x1e\x07\x42\x1a\xf9\x20\x5d\x32\x2e\xa9\xe0\xc5\x1a\xb8\xd0\x84\xa9\x26\xbc\x54\x85\x3b\x6c\x5a\x0c\x52\xe7\x49\xcd\x2d\x17\xe0\xf3\x4b\xd1\x05\x07\x3f\x57\x3b\x37\xb8\x5a\x73\x8a\x3a\xca\x8b\x74\x2e\x01\x77\xcc\xe1\x3b\x9f\x00\x3e\x7c\x6a\xa0\x0d\x56\x0d\xb7\x4f\x2e\x7c\x23\x6a\xea\xbd\xec\x6c\xb8\x29\x3d\xec\xd8\x18\x81\x43\x11\x88\xf8\x52\x33\x99\x9b\xd0\x74\x43\x65\x91\x73\x77\x65\x15\xad\xed\x96\x2e\x9b\xc9\x28\xb5\xed\x9c\x50\xcc\xdc\xb6\xe7\x9c\x48\xcc\x08\x85\x6a\xbb\xf1\xc9\x61\x93\x49\xce\x88\xf0\x86\xe9\xb7\xd6\x85\x24\x67\xce\xf1\x40\x23\x0a\xc3\xac\xfe\x91\xae\xc1\x7d\xb2\xbe\x61\x5b\x85\x2b\x16\x35\x38\xe1\x0a\xb1\x0c\xee\x5c\x39\x5f\x24\xac\xe9\x9a\x71\x4e\x1a\xab\x27\x1f\xa9\x8e\xbf\x3a\x1a\x99\x06\xc0\x77\x4d\xa5\xcf\xe0\xf5\xc9\xc0\x0f\xba\xc0\xd2\x38\x4f\x1d\x18\xc8\x6e\x50\xe5\x36\xa8\xee\x6e\x50\x77\x63\xe0\xba\x0a\x0e\x24\x96\x44\x02\xdc\x3a\xfb\x42\x75\x4d\xa9\xd4\xbe\x50\x84\x5a\x07\xd8\xee\x82\x4c\xec\x90\xde\x91\x1b\xe3\xa6\x66\xf6\xe3\x8f\x45\x3d\xd6\xbf\x3f\xf3\x6e\xd8\x44\x6c\xe9\xbd\x30\x69\x72\xfb\xc9\x82\x70\x7b\xe2\x3a\x52\x3b\x22\x5a\x5d\x47\xc7\x03\xdb\x94\x7a\x40\x6f\x7f\x10\xd5\xcf\xf7\xde\xa3\xfa\x25\xdd\x0a\xba\x2c\x24\x2d\x5f\xdd\x42\x0d\x1a\xfc\x70\x29\xc0\x0d\x98\x8a\x3f\x82\x5b\x88\x68\xcb\x67\x7a\x7a\xb6\x11\x2d\x6d\x33\xf2\x70\x45\x97\xc5\x86\x5a\x37\x02\x8a\xf5\xef\x3f\xc3\x2f\xd9\x34\x58\x2b\x42\xbf\xf5\x87\x59\x6d\xd7\x90\xcb\x72\xe0\xe3\xf0\xb6\xd8\x42\xd5\x7a\xe8\xe2\x75\x92\x31\x6f\xab\x79\x92\xc3\x65\x6d\x66\xc4\xf3\x21\xd8\x31\xd9\x4a\xf6\xd7\x1c\x55\x83\x8d\xc2\xb9\x6e\xcd\x73\xba\x29\xb6\xdf\xde\xe7\x56\xad\x9a\xe1\xcc\x34\xcc\x10\x36\xcf\x8e\x58\x99\x1b\x11\xf6\x89\x7f\xe4\xd5\x1d\xb7\x7c\x63\x8f\x94\x39\x75\x20\x30\x19\x46\xb5\x32\xa4\x55\xef\xbc\xc1\xac\xd6\x05\x15\x5a\xd3\xe6\x95\xcc\x33\xdd\x18\xd2\x82\xd8\xc2\x53\xb8\x28\x87\x24\x0f\x0f\x55\xd3\x6f\x86\x46\xc6\x6c\x53\x96\x06\x09\x27\x93\x93\xde\xc6\x93\x49\x1f\xda\xf4\xbf\x99\x46\xf8\x94\x83\xa9\xb5\x33\x49\x03\x94\xcb\x15\xe3\xe5\x3b\x93\x59\xcd\xe8\xc3\xeb\x80\x5c\x81\x20\xa2\x88\x4d\x9d\xcb\x28\x83\x86\xb9\x47\x13\xef\x79\x25\xd9\xea\xde\xee\xc6\x8b\x1b\x5d\x43\x06\x0c\xd6\x89\xb1\x5a\xd3\x0a\x0a\x77\xb5\xc7\x72\x12\xdc\xa6\xf8\x48\x03\x1e\xc8\xb3\x44\xce\xcf\xcf\xb8\xb0\xf3\xa8\x96\x91\xbe\xed\xf8\xbc\x5a\xe0\xda\x54\x6c\x51\x88\x68\xd1\x0f\x17\x68\xc4\xe6\xd5\x82\xd4\xfb\xfd\x83\x63\x52\xc0\xc0\xab\xad\x04\x85\x53\x7d\xb0\x06\x6b\xa1\x6b\xd0\x7a\xed\xf6\x70\xbf\xcf\xed\x56\xa9\x8f\xd4\x52\xbe\xc4\x7e\xff\x59\xef\xb6\x02\x74\x62\x76\x6c\x95\xf7\x63\x59\x74\x4e\x74\xfc\x99\x02\x4d\xc0\xaa\x51\xeb\x9e\xe1\xbf\xb6\x27\x18\x29\x2a\x10\x20\xc1\x91\xe4\x64\xaa\xbd\x54\x15\x34\x86\xd0\x66\xe0\xa5\x3b\x8e\x4d\xa3\xab\xa1\xcc\x3a\xb2\xf1\xd0\x6e\xd8\x34\xe1\x9f\x03\xe0\x9d\xe1\x75\xd0\x08\x68\x03\x8e\x82\xfc\x91\x40\xd3\x75\x50\x92\xbe\x94\xc0\x93\x04\xbe\x9d\x58\xba\x44\xe8\x3d\x5e\x9d\x34\x0d\x56\xfd\x75\xe7\xea\x0b\xd2\x22\xa8\x6e\xbd\xc4\xa9\xc0\x7f\x53\x24\x0d\x12\x5d\x7a\x61\x8c\x61\x67\x4d\x83\xf0\x9a\x1c\x8c\xba\x31\x37\x58\x9f\xdb\x82\x08\x78\x92\xfa\xdb\x7b\x83\x58\xbd\x0e\xb3\x82\x68\x5b\xc0\x88\xc2\x15\x26\xa0\x78\xad\xd6\x55\xcf\x17\x48\x57\x1f\xcb\x45\xe8\x20\x8b\x69\x83\x22\x6a\xbf\x1c\x9a\xb3\xf6\xde\x75\xce\xf6\x61\xe0\xd0\xf3\x3c\x76\x09\xa7\xc5\xf2\xe6\x85\xe9\xc3\x29\x3c\x02\x85\x20\xe6\x5a\x89\x3c\x8d\x19\x2f\xf4\xc0\xa7\x1f\xe9\xbd\xf1\xb9\x62\x66\x3d\x90\x0a\xc1\x37\x7a\xab\x59\x98\x91\x33\xe4\x69\x5f\x60\x53\x14\x94\x41\x16\xf0\xce\xc2\x56\x87\x37\x23\x91\xbe\x0e\x1b\x3a\xdd\x89\x30\x38\x66\x91\xda\x45\xb6\xb5\x42\x88\xa6\x51\x4b\xe4\x98\xe9\x9c\x4e\xea\x8f\x6d\x21\x28\x97\x8e\x55\x25\x02\xd3\x39\x5f\x10\x25\xd8\xf9\x4f\x5f\x8b\x6a\x03\x6b\x67\xc8\xed\x1d\x2e\x87\xd6\xe5\x8b\x29\x5a\x55\x4f\xf7\x24\x46\x38\xa6\x41\x00\xe7\x30\x74\xf4\x90\xe9\x1c\x7d\xb7\x36\x7b\xfb\x9c\x2f\x4c\x9d\x76\xbd\x38\xcc\x90\x37\xc3\xc7\xfb\x70\x63\xe7\x0b\x87\xd1\x40\x8d\x51\x5d\x63\x78\x8b\x37\xf8\xb6\xbd\xa0\xcc\xb8\x13\xbc\x97\xa0\x68\x49\xa9\xf5\xe2\x35\xb5\xd9\xeb\xf0\x7b\x0c\xca\xcc\x70\x42\xf7\x24\x6f\x0f\xa8\x4f\xb4\x59\x6a\x86\xbb\xfc\xd9\x49\xee\xad\x03\x71\x63\xf4\xcd\x59\x7b\x80\x5b\x34\xda\x92\x5b\xbc\x21\xb7\xb0\xc6\xeb\x64\x3a\x91\x24\xc7\xcd\x38\x8b\xe2\x0b\x83\x24\x08\x46\xda\x86\x2d\xf4\xd2\x76\x83\x2f\x35\xc9\xfb\x9e\xca\xbb\x4a\x7c\xd4\x14\xaf\x4e\x13\xee\xa7\xf3\x8c\xd5\x40\xe3\xb3\x45\x9a\xa6\x38\x4d\x76\x3f\x1d\xf5\xfc\xe4\x2d\x66\xf5\x77\x55\x51\x32\x7e\xed\xfe\xa6\xe5\xec\x16\x77\xf5\xcf\x6d\x06\x38\xda\xe1\x29\xd3\xcd\x53\x70\x0f\x8c\x32\xc9\x4f\xb4\xf1\xb2\x7e\x5f\xdc\xda\x59\xe8\xe4\xb6\xe5\x6c\x8b\xb5\xcd\x60\x83\xcd\x9a\x67\xf7\xf8\x72\x53\x88\x8f\x86\x8b\x34\x1e\x09\xcf\x8d\x2d\x20\x54\x15\xe2\x52\xf5\x0d\xa6\x36\xd5\xa3\xf6\x39\x39\x39\xd7\x9f\x1b\x57\x90\xbe\x8f\xf5\x8e\xd1\xa0\x51\x4d\xe6\x0b\x73\x25\xaf\x8b\xda\xe4\x01\xd2\xae\xa0\xda\x8d\x2f\xb1\x7f\x39\x80\x59\x27\x2b\x51\x0b\x3b\x39\xc7\xe1\xf2\x67\x72\xfa\x63\x55\x19\x50\x40\xb1\x2c\x1c\x9f\x00\x93\x41\x06\x8c\xff\xda\x43\x56\x7b\x9e\x1c\xa4\x88\x80\x5e\x92\xec\x2c\x4d\x0c\x64\xa4\x8e\x34\x18\x7d\xae\x68\x01\x2f\xf3\x2c\xe2\xd4\xd5\xf6\xe0\xfe\x56\x7f\xb6\x6d\x10\x96\xad\x23\xc4\x82\xf8\x80\x5a\x03\xa5\x8c\xf7\x48\x49\x00\xf0\xda\xf0\xdd\x1f\x2a\xaf\x9a\x4b\x88\xa9\xc1\xc9\xcd\x90\x97\x55\x2c\xa7\x13\xf6\x54\x77\xf6\xb3\xf5\xb1\xe1\x42\x1a\x5c\x04\x89\x0f\xfa\x93\xf6\x0c\x6a\x02\x34\x9c\xdf\xf3\x62\x5b\xdf\x54\x32\x47\x41\x56\x1f\x25\x61\x28\x90\x98\x24\x3c\x25\x2b\xd5\x09\x73\x3f\x74\x0a\x68\xf7\x53\x0b\x21\xee\xa7\x3e\x06\xfa\x67\x2c\x8d\x07\x8f\x82\x89\x8b\x6a\xbd\xa6\x90\x28\xc7\x2e\x84\x0f\xe6\x86\x6e\xeb\x87\xb8\x85\x27\x14\xc5\x64\xea\xab\x28\x8c\x6f\xf0\xf3\xf0\x1b\x58\x76\x3a\x8e\xcc\x9e\xae\xf8\xe3\xb0\x6d\x0e\xdf\xd6\x52\x54\xdd\x98\xcf\x78\x06\xf1\x57\xfa\x28\xd6\xc5\xad\x86\xfa\x8e\xa7\xf3\x0a\x99\xc0\x96\x97\x7a\x04\x5a\x5a\xb7\xd4\x78\x42\xe1\xd7\xb9\xa7\xd0\xfe\xe6\xeb\x91\xe7\x47\x37\xc9\xab\x5c\x18\xf3\x3d\x75\x37\xf1\x33\x06\xb7\xb1\x20\x8a\x65\xc0\x32\x4d\xac\x85\x26\xd6\xfa\xd6\x2d\x03\x52\xdc\x43\x63\xdb\x78\xd9\xfe\x4e\xad\x44\x21\xc9\x55\xb1\xfc\x98\xee\x2d\xd5\x4d\xf7\x0b\x80\x48\x8c\xf5\xc7\x4e\xa9\x75\x54\x1a\x6c\x33\x0d\xbc\x52\x57\x6a\xcd\x2a\x7e\x5c\x4f\x56\x0e\x8a\xbb\x67\x65\x83\x15\x06\x24\x72\xee\x84\x9e\x13\xd2\x46\x3c\xc4\xcc\xe3\xc3\x56\x3f\x9d\x25\x8f\x87\x46\xac\x76\xac\x89\x37\xa7\x83\x71\x53\x9d\x76\x85\x39\xdd\x09\x98\x70\x3a\x33\x85\x94\xb2\xd4\x98\x6f\xa8\xae\x9d\x03\x54\xc9\x38\x7d\xeb\xb4\x4a\xf1\xb3\x59\xbb\x51\xa3\x84\xab\xc7\xaf\x4b\xcf\x57\x09\x18\x7d\x2b\xe3\x66\x65\x4a\xf0\x8e\xe9\xf7\x55\x22\xd6\x77\x70\xfb\x05\x5d\x51\x41\xf9\x52\x09\x07\x79\xa8\x38\x57\x27\xf6\xa6\x13\xc0\xfc\x88\xbe\x9c\xca\x17\x74\x3a\x60\x03\x7e\xc3\x57\x55\x97\x89\xd2\x9e\x12\x58\x92\x87\xc6\xc8\xad\x56\x28\x48\x99\xd5\x43\x7e\xaa\x15\xa1\xc8\x9d\xab\x4e\x60\xa3\xc7\x5b\x4f\x21\x28\xa6\x3f\x6f\x0b\x0e\x29\xa1\x17\x1d\x11\x24\x14\x2f\x22\x89\xd9\x85\x21\xc9\x39\x9b\x7e\x64\xbc\x5c\x8c\x9c\xa1\xae\x82\x10\x43\xf7\x42\x71\x25\x3c\xf4\xcb\xd1\xcf\xc3\x49\x54\xc1\x24\x90\x2b\xc1\x49\x9d\xe5\x9e\x1a\xe7\xaf\xa0\x93\xec\xf5\xba\xb8\x8e\x97\xa2\x98\x4e\xcd\x1a\xa6\x5d\x13\x70\x66\xf9\x37\xf8\xd3\xf0\x6f\xf0\xb7\x49\x90\xe3\x1c\x1b\x1c\xf7\xda\x20\xfc\x60\x1d\x87\x61\xab\x6c\x12\xed\x77\xf2\x86\x8a\x80\xd2\x9e\x9c\xe9\xf0\xd5\x7a\xc6\xd5\x62\x14\x95\xb8\x0d\x64\x90\x99\x68\x9a\x06\x6b\xfa\xe9\xac\x16\x9a\x80\x46\xa8\x34\xac\x06\x6c\x6f\x49\x8a\xff\x58\x56\xbc\x96\x62\xb7\x94\x95\xe8\x6e\xa1\xbe\x39\x23\xc9\xaf\xa5\xd7\x4e\x8b\x3d\x41\xa7\x7d\xaa\x03\xab\xbc\x66\x1c\xaa\x26\xf5\xf4\xdb\x99\xa2\x6f\x9e\xd3\xa4\x99\x07\x78\x4b\x64\x61\x67\x2c\x0e\xcf\xcb\x92\x96\x8f\x04\xdc\x20\xd7\xd6\x86\x5a\xc7\xf8\x37\xba\x9e\x0a\x5a\x6d\x29\xcf\x1f\xa4\x60\xd7\xd7\x34\x65\x0e\x50\x5d\xcd\xe9\xa2\x27\x6d\x7a\xa4\xa3\xed\x18\xa8\x79\xa0\x8d\x15\x4f\xce\x11\x66\xe4\xfc\x29\x7b\x26\xc0\x44\xcd\xe7\xec\xc9\x79\xcb\x48\x2d\x43\x41\x8d\xa3\x26\x08\x69\xd5\x56\x86\x51\x65\xef\x9f\x21\xb9\xae\x37\xf7\x65\x10\x29\x8e\xb3\xb2\x90\x45\x06\x91\x23\xce\x3e\xaf\x64\x85\xbe\xf4\x97\xb1\xd1\x18\x54\x5d\xd3\x4b\xd5\x87\x1a\x2e\x80\x64\xf5\x6f\xef\xdf\x7d\xdf\x67\x75\x48\x21\x42\x2b\x59\xbd\xcf\x8b\xe9\xf4\x29\x07\xee\xf2\x51\x10\x39\xe2\x13\xcf\x83\x01\x0b\x08\xe6\x15\xe9\x2c\xb2\x4e\x58\xd2\x05\x38\x20\x52\xb1\xa4\x6f\x4a\x05\x6a\x73\x2d\x8a\xf4\x8d\x5f\x53\xf9\xa6\x84\x04\x79\x69\x80\x0d\x2a\x19\x70\x76\x29\x8b\xeb\x2c\x6d\x04\x65\x65\xd3\xf4\xf8\x00\x45\xfb\xc7\xca\x0c\x5f\x79\xd0\x83\x1f\x74\xfe\x00\x7e\x6d\x74\xad\x88\x97\x53\x43\x69\xae\x3c\xa1\x1b\x3b\xca\x54\x33\x44\x1b\x82\xb4\x2f\x32\xf0\x9c\xd5\xae\x39\x8e\x70\xbc\x2d\xb6\x47\x58\xb1\x12\x0a\x35\x10\xd0\x53\xc4\x67\xc0\xb0\xe4\x86\x34\x25\x62\xe6\x74\xe1\xca\x8f\xa8\x83\x1c\x3a\x4d\xe8\xea\x70\x21\xb5\xf2\x2b\x9a\xd3\x05\xe1\x98\x1b\x43\xcd\x9b\xe1\x59\x40\x77\x09\x00\xeb\x2e\xd9\x2a\x3f\x71\x65\xe4\x5d\x8d\x32\xf0\x44\xc6\x85\x75\x32\xde\x50\x38\x59\xde\xdf\x0b\xe1\x1d\xa9\xa7\xc6\xe8\x3c\x32\x25\x47\x08\x21\x3b\x4b\x60\xa3\x1e\xd9\x2a\xf7\x2f\xb8\x6f\x84\x19\xc9\xab\x00\x4a\x83\xc4\x9e\x23\xa4\x2f\xf2\x82\x54\x6e\x64\x28\x49\xa2\x57\x87\xeb\xb6\xee\xd1\xe4\x86\x0e\x9c\xc6\x5b\x31\xcd\x6c\xbf\x87\x8a\xdd\xfd\x33\xd0\xfb\x74\x52\xd8\xe5\x54\xc6\xd0\x5f\xe8\x5d\x0d\x6a\x57\xe0\x1d\x89\x6b\x1f\xd4\xe8\x02\xf2\xe6\x4b\x2a\x52\x89\x14\x44\x17\xa8\xa0\x44\x45\x6e\x6d\x46\x41\x27\x2d\xb4\xbc\xff\x93\x7d\xb2\xdf\x73\x12\xfc\x84\x20\x66\x05\x6f\x33\xd9\xdd\x64\xa2\x59\x1b\x43\x8a\x2b\xbc\x03\x97\x6f\x45\x9d\x97\xea\x44\x4e\x26\x34\x0f\x7f\x03\x74\x2a\x84\xab\xc0\x9b\xc5\x94\xdd\x26\xeb\x96\xfd\xd5\xa1\xca\x92\xac\xbb\xcb\x94\x81\xb3\x72\x6b\x99\x32\xb9\xcc\x31\x25\x84\xf0\x60\x25\xa3\x73\x42\xc8\xd2\x7b\x89\xad\xc9\x12\x61\x4e\xd6\xf3\x33\x53\x2f\x82\xe9\xbf\x0d\x4a\xc0\xdf\xa6\x4b\x5b\xe5\x1b\x5c\x23\x84\xf6\x77\xe0\xda\x0b\x82\x39\x47\x89\xa2\x89\x19\x93\x7a\xb6\x8e\x7e\xab\x4d\x3d\x42\xaf\xf4\x60\x19\xf4\xf9\x22\xe0\xfc\xe7\x8b\xe6\x31\xea\x75\x1d\x6c\xd5\x51\xaf\xd3\xb9\xd0\x2c\x6d\xdb\xcc\xa1\x27\x4a\x4b\x1d\x16\xb2\xc4\x89\x43\x33\x2b\x71\x42\x1d\x3e\x5b\xe1\x15\xa3\xeb\xf2\x88\x85\xb5\xec\x39\x9f\xbc\x0c\x5d\x41\x5c\xbd\x83\xb5\xa0\x99\x6a\xe0\xd8\x1d\x53\x88\x39\x97\x81\xb3\x7e\x96\x34\xe7\x1c\xe0\x45\x3f\xd5\xde\x14\x15\x0c\xc0\x1c\x1b\xed\x82\x1b\x4d\x03\xb9\xd7\xf4\x9d\x1c\xd6\x6c\x4c\x36\x64\x6a\x10\x73\xbe\x18\xb9\x71\xa1\x24\xa9\x4b\xe7\x10\x2e\x33\x31\xba\x0d\x13\xf8\x48\xef\x31\x57\xff\xab\x13\x60\x12\xd2\x04\xec\xad\x08\x2e\x0c\x76\x11\xc8\x95\x90\xfe\x53\x7d\xd4\x7a\xc8\x2f\xb2\x8a\xd3\x0f\xd5\x3b\x4e\xb3\x59\xb6\x29\xf8\xbd\xfd\x3b\xd9\x4c\x17\x63\x34\xed\xcc\x8f\x64\xc3\xef\xab\xa0\x43\xf8\xa1\xc5\xe6\xb4\x06\xfd\xf3\x62\x62\x80\x68\xb9\xae\x38\x02\x01\xc5\x06\x23\x51\x12\xd3\x40\x69\xb7\xaa\xc4\x26\xd2\x2e\x7d\xf2\x34\x93\x12\xb4\x9e\x9f\x8e\x63\xf6\x07\x44\x73\x26\x3d\xc8\xdf\x27\x4f\xb4\x51\xf0\x40\xd0\xcb\x00\xc2\x7f\x48\x2c\xfc\xc0\x60\x49\x58\x3d\x66\x5c\xab\xe9\xea\x72\xa9\x99\x0e\x6f\xc9\x4e\xdb\x63\xba\x3b\x37\x73\x5c\xf4\x65\xd2\x12\x65\xca\xac\xee\xa4\xe2\xac\xe1\x52\xc6\x69\x77\x30\x73\x6a\xde\xd4\xcf\xeb\x7b\xbe\x54\x3c\xb8\x33\xfa\xa8\xbf\x1f\x6b\xbb\xb2\xe5\x79\x74\x17\x24\xfa\xb5\xdf\x9f\x9c\x9b\xca\x39\x40\x13\xc8\x99\xfe\x65\xb4\x51\x81\xfd\x44\xdd\x9b\x9e\xfb\xda\xef\xfd\x1b\x56\xff\x50\xad\xef\x37\x95\xd8\xde\xb0\x25\xe9\x3e\xf2\x63\x84\xb6\x15\x67\xad\x59\xad\x77\xf5\xcd\x8b\x82\x57\x9c\x2d\x8b\xb5\x49\x6a\xa4\x7d\xcb\xb5\x61\xf1\xe4\xdc\x2e\x21\x78\x6a\xfc\x15\x1b\x5c\xf0\xfb\x9f\x40\x11\x4c\x53\xa9\xe9\x4f\x3a\xe3\x26\x79\x20\xa7\x3f\xba\x64\xf5\x4b\xba\x29\xa4\x11\x8e\x18\xbf\xde\xef\x4f\xa8\x03\x17\xb8\x8d\xcd\xcf\x16\xd6\x8d\xc7\x8e\xfc\x26\x32\x0a\x25\xed\xc4\x67\x4f\xe9\xb3\xee\x64\x0c\x25\x3e\x3d\x8d\x65\xbf\xb0\x8d\x91\xa8\x65\x7a\x6e\x32\x98\x1b\x8a\xd2\xbd\x29\x04\x33\xb1\xc6\x7f\x61\xeb\xb5\x55\x07\xe0\x73\x7c\x86\xba\xdb\x01\x69\xd9\x96\xf0\xde\x6a\xe9\xa9\xf7\x5b\x4b\xb4\xb7\x0e\x53\x9d\xc1\x5e\xb2\x32\x1e\xeb\xe4\xac\xb1\xe1\x54\x0d\xd6\x3a\xd5\xe7\xa9\xb4\x23\x7d\x2b\x77\x39\x2f\x7c\x1a\x92\xa9\x8b\x19\xca\x51\x83\x63\x0c\x6a\xc5\xa5\xba\x0e\x5c\xee\xfb\x13\xb5\xfe\xe9\xa5\x9e\xc9\x9b\xfa\xf9\x9a\xdd\x52\x2d\xa4\xfb\xfc\x87\x25\x5b\xad\x8c\xa7\x58\x7b\x56\xd8\xcb\xbb\x5c\x57\x89\xd7\xcb\x7d\xc3\x4b\xfa\xb3\x2d\x69\xd5\x03\xfd\xee\x07\x10\xd3\xa9\x50\xa9\x7c\x51\xed\xb8\xc4\x7c\x5a\x94\xa5\xf9\x91\xda\x88\x16\xe0\xa3\x13\x45\xa7\x35\xec\xe1\xe0\xa6\x3c\x76\x0a\x62\x32\x09\x1f\x7c\x73\x66\x64\xfc\x58\x10\x57\xb7\x29\xc0\x4b\xef\x0a\x28\xa8\x02\x53\xfe\x47\x7a\x9f\x21\x84\x80\xc7\x85\xe8\xcb\x68\x93\x7c\x2e\x75\xa1\xba\xcf\x59\x17\x15\xcc\xca\x28\xa6\xa7\x36\x55\x2a\x74\xec\x35\x2d\xe0\x5b\xa9\x56\xf1\x5a\x54\x1b\x57\x7d\x39\x9e\x01\x66\xd3\x4d\xb1\x4d\x1e\xfd\xae\xa7\x7f\x83\x10\x82\x92\xa5\x3d\xa3\x15\x65\x09\xe5\xae\x92\x03\xf1\xc7\x0d\x84\xad\xbb\x9a\xa0\x52\x30\x7a\x4b\xbf\x2b\x20\x79\x05\x68\x2b\xc3\x27\x69\x87\x83\xc4\xec\x02\xf7\xe4\xf6\x36\x60\x73\xd4\xb4\x46\xe9\xd2\xb7\xfc\xf6\xfe\xdf\xea\x8a\x3f\xdf\xb2\x1f\x4d\x1d\x9f\x9c\xa2\x11\xe4\xc2\x2e\x0c\x14\x00\x15\xd5\x6f\x85\x88\xea\x7f\x94\xa6\xe1\x10\xc1\x9b\x32\xb3\xf4\x86\x80\xea\xb6\x6f\x2d\x1a\x99\x22\x71\xae\x59\x84\x6d\x59\x88\x01\x1a\xde\xe0\xdd\x1d\x19\x95\x22\x4b\xbb\x20\x90\xfb\xc9\x75\xff\xdf\x54\xdb\x71\xf7\x2e\x87\x54\x0d\xde\x5f\x14\x12\x6f\x59\x6f\x35\xc5\xcc\x56\x1f\x69\x9e\xa9\x6f\x33\x84\x07\xac\x31\xb4\x41\x26\x9f\x6d\x62\x54\xd3\xc6\x3d\x0d\xfd\xa3\x8d\x69\x48\x4b\xee\x6d\xcb\x10\x6f\xfa\x73\xa6\xf6\x79\x03\xda\xc0\xfb\xae\x68\xe0\x96\x6a\xd5\x48\x86\x9e\x8a\x20\x65\x27\x8d\x5d\xcf\x82\x08\x72\x28\x75\xdd\x20\x7c\x47\xda\xf6\x2c\x9b\x11\x41\x61\xc7\x10\x97\x6a\xe4\xc6\x94\x1d\xce\x05\xf7\x6a\xd6\xc6\x71\xf1\x9a\xfc\x2a\x21\x1e\x3c\xa1\xa0\x62\x60\x25\x28\x24\x5a\xd5\xf9\xdd\x0b\xc9\xf8\xf5\x9b\x94\x1f\x3f\x33\x18\x16\x94\x57\x57\x63\x54\x98\xe3\x01\x83\xa1\x84\x98\x46\x84\x5f\x91\xd6\xde\xd8\x55\xae\x19\xff\x58\xcf\x6c\x20\xd4\x30\xbe\xc3\xe1\x31\x9b\x99\x05\x18\xec\xdd\x61\x8d\x9d\x8f\x9a\x7c\xb9\xad\xdd\x7e\x97\x77\x92\xdd\x72\xf5\xb0\xe2\xf0\x27\xd5\x7f\x43\x80\xab\x51\xd1\xbf\xcb\x33\xf3\xa7\x6a\xb1\x5a\x41\x8b\xd5\x2a\x43\xe0\x76\xf9\x0e\x2c\x72\x4a\xbc\xf5\x01\x73\xef\xd2\x91\x65\xb0\x2b\xb6\xf0\x49\x17\xcb\xdc\x0a\xd0\x9c\x2e\x2c\x13\x1a\x69\xd9\xa9\x2e\x43\x57\x43\x21\x66\x87\xfa\xe4\x52\xfd\x52\xdb\x44\xae\x31\xb5\x10\x76\x5b\x44\xee\xfc\x43\xff\xcd\x2b\x4c\xa7\x97\x56\x7f\xaa\xab\x3b\x0f\x2a\x3b\x75\xda\x75\xf0\x02\x17\xd3\x55\xb1\x94\x95\xb8\x07\xe5\xf9\x46\x7d\x3b\xcb\x4e\xb5\x2f\xb8\xba\xe6\x40\xeb\x04\x05\x32\xac\x4a\xee\xda\xee\x34\x43\xa3\x2a\xd6\x1e\x5f\x5e\xb2\x1a\x86\x9f\x9d\x9c\xe1\xcb\x4b\xdd\x1b\x6b\x10\x16\x53\xeb\xc1\x93\x3b\xa1\x41\x62\x5f\xcd\xa3\x35\x0b\xdb\x02\x8a\xbf\x2a\x69\x89\x54\x98\x4e\x1d\xd2\x93\x02\x83\xd3\xa9\x02\x00\xa9\x3f\x5b\x05\x51\x1d\x8d\x79\x20\xc3\x4a\x2b\x64\xf3\x1f\x55\x73\xcc\x15\xfb\x3a\xb2\xda\x18\x60\xd0\x60\x71\x4b\x05\xd6\xa3\xbb\x53\x8d\x07\x7b\x0b\x6c\xe2\x47\x76\xe9\xbe\x18\xec\xd7\xd9\xc7\x8f\xec\xd5\xb4\x6f\xfa\x77\x59\xb3\x04\xfa\xef\x4f\x8e\xbc\xfd\xaa\x12\x25\x15\xb4\x7c\x52\xd3\x44\xb1\xac\xc1\xd0\xdb\x40\x39\x4b\x08\xdd\xef\x33\xa8\xae\x71\xa1\x7e\xcf\xba\x01\x66\x17\x74\x96\xd5\xf7\x9b\xab\x6a\x1d\x3d\x74\x85\x2e\x72\x04\x99\x9c\x5a\x71\xb0\x26\xf3\xac\x6d\xaf\x13\xd0\x5a\xdf\x0d\x9b\x04\x96\x42\x5a\x58\x3b\xa4\x79\xfa\x70\x23\xe8\x6a\x46\x5d\x74\x06\x44\x9d\xb5\x62\xed\xed\x95\x84\x45\xb8\xb4\x40\x62\x4c\x8a\xdc\xda\x61\xc9\x1d\x78\x42\x71\x2e\x09\x47\xbd\x95\x3a\xa3\xfa\x9c\x32\x2a\x24\xe8\x0c\xb3\x44\x2a\xa9\xe5\x12\xde\x5d\x5e\x12\x81\xb9\xf9\x3a\x51\x6b\x9c\xd3\xbb\xb1\xbe\x41\x78\xd0\x59\x51\x96\x7f\x61\xf2\x06\x98\xfe\x21\x9a\xb9\x63\xa5\x0b\x9c\x31\xda\x00\x5a\x53\xbe\xa4\xef\xa9\xb4\x9a\xbd\x35\xab\xe5\xc8\x66\x86\xe1\x73\xe1\x0c\x47\xea\x6f\x72\x72\x86\xf5\x9e\xcb\x0b\x66\x7d\x18\x66\xcc\xca\x98\x12\x9f\x39\x86\xb7\x66\xff\x45\x4f\xc9\xb9\xb9\xef\x78\x93\x0b\x25\xa5\x75\x6a\x9d\xdc\x14\xf5\x3b\x1f\xa8\xa5\xd5\x36\xc2\x53\x0a\x74\xe1\x32\xf2\xce\x04\x8a\x8a\x35\xb9\xa2\xfe\x5d\xc6\x7b\xbf\xa7\x68\x7a\x19\xa9\x66\x5b\x75\x93\x1c\x40\x55\x47\xfa\xc2\x43\x51\x2d\x1e\x9c\x2a\xed\x7f\x70\x48\xb6\x51\x80\x60\xf2\xc7\x68\xe8\x9c\xa2\xb9\x58\x44\x75\x79\x62\xed\xee\xd9\x53\xf1\xcc\xc6\x9d\x3d\x15\x56\x79\xcb\x89\x9c\x8b\xc5\x88\x4f\x3d\xd1\x20\xe1\x0f\x50\xbf\xf0\x69\x68\xd6\x55\xfb\x93\x01\x25\x36\x91\xe7\x39\x9f\xde\x09\x26\xcd\xbb\x7e\x12\xc5\xb5\x96\xd7\x04\x7c\x2f\x43\xcc\x0b\xcc\x5a\x41\xb2\xde\x50\x0b\x6c\xf4\x59\x46\x73\xa3\xb7\xff\x23\xe3\x65\xf4\xc0\x03\x2c\x7a\xbc\x01\x4a\x54\x47\xcf\x96\x56\xde\x78\x9b\x78\x09\xb4\x2c\x1e\x8a\xde\x47\xbf\xcd\xac\xfe\xd4\x7e\x9c\x98\x65\xac\xe1\x8a\xa7\x1b\x47\x4f\xf4\x8c\xf0\xba\x12\x6f\xcc\x9e\xb7\x96\xd5\xfa\xe4\xd2\x2a\xff\x3a\x9d\x5d\x4a\xba\xd9\xfa\x38\x86\x68\xad\x50\x7c\xf1\x75\x25\x96\x54\xbb\x32\x13\xab\x70\x0b\xa7\xf7\xa6\x7e\x2f\x8b\x75\xfc\xe5\x4d\x11\xa9\x94\xa8\xb5\xdd\xb6\x1b\x3d\xe7\xf7\x21\xae\x76\xb6\x27\x1e\x07\xdc\xd6\xdb\x5d\xbc\x86\xc4\x79\xdf\x55\x45\xf9\x5c\x67\x45\x74\x93\x04\x1e\x3a\x6a\x7e\xc7\xd6\xeb\xf7\x9d\x4d\x88\xb1\x88\x05\x08\xa4\x6d\x39\x26\x2a\x5d\x58\xbb\xdb\xb4\x50\x0d\x21\x64\xcf\x3e\xd9\xfa\x6d\x1c\xb5\xd1\x8d\xc7\x98\xa6\x48\x68\xd5\x83\x68\xc1\x3b\x8d\x67\xd4\xa3\x18\x08\x27\x91\x7a\xd4\xe3\x99\x4c\xa1\x18\x21\xa4\xd8\xef\x8b\x7e\x4c\x3b\x21\xa4\x9e\x4c\xea\x1e\x84\x13\x43\xb8\x96\xc0\x9c\x53\x3b\xd3\x00\x03\x03\x2f\xf9\x5e\xfc\x4b\xa1\x92\xdd\xc1\x5e\x34\x0a\x1a\xa4\x50\x28\x8d\xa6\x1a\x7d\x4e\xce\x1a\x73\xf1\x62\x8e\x0b\x12\x94\xc3\x76\x69\xab\xa7\x2d\x4d\x79\xf7\x22\x34\xfa\xdf\xb8\x59\x83\xc3\x2f\xdf\xa7\x3f\xcc\x4f\x5a\x60\x35\x3e\xc8\x71\x57\x08\xfa\xba\x29\xea\xf7\xbb\xad\xe2\xa8\x02\xd8\x47\xb4\x9d\x24\x64\x42\xb7\xb9\xb4\xe7\x42\xf0\xde\xa6\x7d\x37\x46\x67\xf0\x47\x0d\x2a\xfa\x06\x13\xed\x41\xfc\x29\x79\xc9\xca\x68\xa7\x49\x5f\x64\x43\x0b\x7a\x23\x69\x34\x48\xab\x4a\x3c\x5f\xdb\x83\x14\x27\xb2\x82\xca\x6d\x03\xeb\x71\xa9\xe7\x38\xa9\xc1\x9c\x08\x2a\x80\x28\x0f\x82\x6c\xdd\xe7\x23\x5d\x39\x51\x4f\xc3\xe7\xcd\x99\x4c\x68\xb0\xa6\x13\x42\x12\x6d\xf6\x7b\x67\xfe\x6f\x2f\x3a\x0f\xbf\x86\xa0\x38\x05\xa4\x68\x65\x11\xec\x7d\x5e\x96\x74\x20\x1c\xdc\xeb\x01\xed\x01\xe6\x2a\x75\xcf\xb7\xdb\xcc\xc5\xc2\x27\x5b\x34\x5c\x1b\x47\x23\x39\x67\x8b\xfd\x3e\x57\xff\xa9\x9b\x9e\xe6\x1c\xa1\xc6\x4e\x42\x07\x38\x27\xe9\x5a\x34\x6e\x10\xf9\xdc\xdf\x58\x87\x44\xc7\x13\x28\xd4\x04\x6a\x3d\x81\xda\x4c\xa0\x00\xdd\x6f\xd1\x07\xd0\x08\x5a\x27\x21\x8d\xdc\xef\xc1\x22\x09\x8e\xa9\x39\xba\xc8\x0d\xb9\xd8\x54\xb7\xc1\x56\xbd\x16\xd5\xe6\xdd\x1d\xcf\xbd\x12\x55\xbd\x77\xea\xc8\xfe\x86\x90\x3d\xb9\x43\x7a\xf2\x93\x33\x64\xb2\x7c\xd7\xa0\x1b\x4d\xd2\xb6\x1c\x54\x9c\xc5\x54\x57\xef\x01\x72\xd9\x71\xc8\x04\xe2\x4a\x55\x2b\x08\x65\x21\x49\xc3\x50\x67\x57\x9f\x52\x17\xec\xfa\x34\xcc\x5e\x34\x4a\x2e\x1e\x38\xd2\x38\xf6\x3d\xb9\x55\x4f\x45\xbb\x57\x4e\x44\xab\xd7\x04\xc8\x72\xae\x77\x4e\x37\x80\x72\x8e\xf6\x55\x6d\xc0\x49\xda\xc6\xc8\x0e\x58\xe1\xb6\xc8\x4f\xac\xdd\xc9\x2e\xd6\xc7\xf7\xf8\xee\x13\x53\xe8\x1d\xa7\xb3\xce\x28\x30\x3b\xd6\x49\x7f\xa7\x76\x30\x1c\x2b\xe8\x3f\x91\x46\x4b\xf5\x30\x4a\x16\xa1\x8c\x14\xf9\xad\xad\xd0\x25\x5e\x70\xa1\x24\xad\x74\xff\xb1\x1b\x5c\xef\x08\x71\x07\x3a\xab\x82\x37\x83\x4d\x26\xf2\xf4\xd4\x8f\x94\x02\x19\xe9\xf3\x10\x51\xb4\x86\x86\xb4\xc5\x77\xab\xd3\xdd\xa7\x3b\xcc\xa9\xa2\x35\xe2\x54\x9a\x83\x31\xd0\x6a\x60\x5a\xdd\x13\xd2\xd9\x42\x9b\x21\x24\x4f\xbf\x86\x78\x32\x7f\x7a\x77\xdb\x37\x96\x6e\x87\x8e\x84\x68\x08\x05\x70\x70\xb2\x13\x4c\x89\x3d\xd7\x7d\xbd\x47\x09\x64\x5d\x11\x1e\x77\xd1\xe9\x7c\x09\x9a\x97\x1a\xb8\xca\xa4\x35\xd6\x8e\xea\x5c\xb6\x39\x38\xd4\x07\xde\x16\xcb\x8a\xa0\x56\x68\xdf\x80\x49\x46\x24\x18\xd8\xfa\xf1\xa6\x79\x0b\xac\xa8\x43\x3f\x67\xb9\x18\xf1\xfd\x3e\x3f\xd0\x06\xf8\x64\x6d\x5a\x35\x9a\x7a\xc7\x7b\x3e\x58\xbf\xb7\x07\x60\xd2\x67\x21\xcd\x6f\x1a\xc8\x97\xc7\x8f\x86\x82\x3f\xd4\x9f\xf7\x28\xf4\x13\xc5\xd6\x69\x18\x6e\x88\x06\xe7\x77\xf4\x99\xb0\xa6\xe5\xa3\x6f\x37\xbf\x29\x07\x96\xa3\x3e\xb4\xb7\x9a\xab\x6f\x71\x04\x2e\xa9\x39\xf5\xf1\xa6\x43\x78\xf1\x69\x5f\x0d\x40\xb9\x8d\x11\x87\x6e\x80\x88\xba\x92\xd8\x0d\x2a\xba\xa1\x14\xe4\xa5\xa3\x46\x1b\x4f\x84\x9c\x1e\x0d\x3e\x0a\x53\x8d\xe8\x8e\xc3\x55\x19\x63\xb8\x6b\x37\x4c\x17\x9c\x79\xdd\x6d\x5e\x1f\x85\x18\x00\xc0\xf1\x7b\x28\x01\xaf\x3e\x61\x3b\x14\x50\x3e\xe1\xb3\x5f\x40\x13\x22\xe1\x19\xd2\x94\x7c\x02\x12\x0d\xc3\x0d\x1d\x7b\x3b\xb4\xaf\xfe\x14\xef\xd7\x7f\x78\x1f\x7b\x66\xff\x2f\x3d\xaa\x43\x80\x4e\x01\x31\x58\x5c\x04\x4f\x7b\xcb\x0e\x1d\x1c\xda\x3d\x38\x96\x97\xab\x6d\x68\x55\xf0\x0a\xe4\xd1\xde\xdd\x18\xb8\x61\x3a\x8d\xfb\x77\xde\xa5\x29\x1a\xa4\xff\xff\xa4\x45\x0f\xdc\x1f\x8f\xbb\x5f\x7b\xc1\xd0\xb9\xc6\x5a\x69\x9b\x0e\xf0\xe7\x2f\xaa\xcd\x56\xb5\x5f\xdf\x27\x21\xd4\x4e\x94\x34\xa8\xad\x89\xd1\xd3\x59\x74\x92\xe2\x38\x27\xad\xf5\x8f\x3a\xca\x8c\x8b\x76\x5c\x41\x5b\x06\xd7\x71\x2c\xc3\xca\x0c\x45\x78\xbd\x63\xda\x9c\x2d\x8c\x02\x24\xd8\x2f\x45\xf8\xa3\x07\x49\xd0\xa8\x2d\xe3\x68\x24\xb4\xb4\xdf\x34\xb3\x23\x66\xd7\x9e\x5a\xff\xdd\x10\x4d\x71\x32\xc9\x77\xad\x39\x85\x70\x1d\x98\x1e\x36\xd3\x43\x4d\x2c\x02\x5a\xf1\xc7\xfa\xba\x75\x90\xa6\xdd\xc0\xe9\x05\x74\x73\x23\x41\xf6\xa1\xcd\x27\x21\x66\xf2\xfc\xc6\xd8\x9a\xc6\xc3\x48\x8a\x1f\xc5\x9a\xec\x93\xf3\x91\x57\x03\x41\x5a\xf8\x0e\xfb\xa9\x78\x45\xab\xe9\x50\x07\x55\xdb\xcd\x14\x03\x39\x8a\x34\xd3\x3d\xb2\x6f\xb5\xbd\xcf\x51\x50\x9a\xfd\xec\x29\xf7\xd6\x22\x7e\x7a\x8a\xda\x3c\x4c\x2e\xe7\x7c\x91\x58\x1c\x1c\xc5\x8e\xb0\x6d\x57\x62\x99\x21\xbf\xb2\xd0\xe2\x32\xbd\xb4\xd5\x8c\x3d\x22\x81\xdb\x8e\x71\xb0\xf4\x1a\x93\xef\x40\xeb\xdf\xd9\x1c\x6d\x0c\xa0\xbe\x5d\x4b\x0f\x60\x0a\xaf\x74\x3f\x1c\xbc\xb2\x0d\x72\x69\x3f\x24\x9b\xfb\x45\x6f\x6c\xfc\x90\x44\xb1\xf3\xc5\x30\x4f\xd7\x6e\xdc\x3b\x85\xee\x6c\x7b\x14\xe2\xd4\x77\x93\x56\xa8\xa7\x3a\x4a\xb7\xb4\x5d\x25\x34\x31\xdd\x5e\x52\xca\xfd\x74\x07\x5a\x39\x7f\xa0\x03\xdd\xc8\x76\xf0\xbe\x63\x9e\xea\x6e\x5e\xa7\x49\x00\x89\xae\xe5\x28\x05\x85\x6e\x2b\xe8\x42\x1d\xa2\xa4\xfe\xe5\xe4\x1c\x73\x75\x2a\x81\xe8\x06\x2e\x8e\x5e\x9f\x97\x5b\x17\xc7\x40\x69\x0e\xb5\xdc\x84\xc3\x79\xdd\x58\x4b\x7a\xf0\x0e\x2b\xe2\xba\xae\xe9\x58\x09\xe5\xe7\x84\x90\x90\x68\x4d\x26\x27\x03\x9b\x8f\x1e\x54\xbf\x26\xbf\xb1\xf3\x05\xb1\x5d\x40\x80\xcc\x7c\xa1\x03\xea\xda\x63\x57\x58\xa2\x06\x16\x02\xc7\x27\xd2\xdb\xc2\x13\x77\x43\x06\x67\xcf\xb5\xc6\xe6\x8f\xa9\x89\x16\xd2\x9f\xd7\x84\xe5\xed\x17\x78\x47\x8a\xc9\xa4\xb0\xbf\x2f\x58\xee\xfe\xd6\xa1\x7e\x78\x4d\x76\x17\xbb\x29\xf8\x55\xc0\x4c\xeb\xc9\xa4\x86\x9f\xf6\xff\x13\x42\xd6\x93\x49\xce\xe1\x2e\x68\xec\xb4\x7a\x36\x3a\x3f\x39\x47\xb6\xb6\xd0\x92\x98\x98\x4e\x0d\xe8\xfd\x3e\x0e\x6f\x34\x5b\x33\x99\x9c\xb9\x26\x86\xf6\x8d\x8e\x25\x0f\x7d\x6a\xcb\xf3\x48\x28\xe8\x51\x06\x9f\x0f\xab\x94\x97\x5a\x57\xa3\xd0\x82\x5b\x59\x60\x40\x4d\x7a\x22\x8d\xa9\x63\xd5\xe5\x46\xe2\xdf\x9a\xec\xfe\x45\x14\xdb\x2d\x15\xe9\x0c\x00\xab\xc0\xa3\x73\x35\x65\x25\x5e\x4d\x97\x6b\x46\xb9\x7c\x53\x3a\xe1\x4b\x5f\xa1\xeb\x6a\x69\xc2\x2b\x3a\x07\x5d\x53\x38\x8f\x73\xed\x37\x26\x1b\x50\xfc\x58\x12\x8a\x73\x41\xe6\x0f\x1f\xe9\xbd\xab\x6d\xd5\xe3\xcd\xd4\x5a\x96\xb9\x07\x9b\x06\xeb\x8f\x43\xbb\x64\xa7\x8f\xd0\xc7\x5f\x33\xcd\x61\x73\x17\x11\x65\x62\x7f\x7b\x38\xe6\x0e\x1d\x53\xdf\xea\x50\x5e\x11\x3a\x4c\xbb\xd0\x6d\x75\xd4\x8f\x8d\x16\x6e\x8f\xd9\x74\xa7\x49\x68\x54\x20\x27\x7a\xd7\x34\x0b\x34\x99\xac\xf3\xc0\x25\x06\x0b\x70\x4e\x87\xe8\x25\x84\x69\x93\xeb\xd0\xa3\xd5\x21\xd7\xa5\xa0\xb0\x13\x50\x09\xeb\xd5\x59\x10\x1a\xd4\x82\xf0\xad\x34\xa7\x85\xba\x06\x32\x6b\x1d\x2e\x3c\x2f\x12\x46\xe6\xe0\x22\xf4\xb8\xd0\x3f\xb4\xfb\x48\x91\xe8\x4b\x27\xb7\x6f\xf7\x64\x9e\x06\x9f\x36\x5f\xc6\x97\xca\x24\xc5\xe4\x5d\x23\x33\xd3\xc7\x34\x29\xe7\x53\xa7\x31\x8f\x6c\x00\xb3\x70\xb3\x43\xa3\x63\x52\xa2\xcf\xd3\xad\x8f\x51\x44\x1c\x4d\xb6\x92\x46\xae\x73\xd4\x60\x58\xdd\x21\xa5\x24\x1d\x36\x0c\x98\xf5\xc6\x5b\x17\x2d\xb6\x57\x65\x17\x7f\x33\x2c\x17\xc2\x54\xdf\xe8\x08\xb0\x83\x33\xb6\x24\x76\xd0\x7e\xb0\x49\x3c\xeb\x62\x66\x62\xa2\xd6\xdd\x63\xc8\x00\xa1\x26\x7c\xc8\x08\x22\x87\x14\xbe\xb2\x6b\x04\xf9\xa5\x90\x6d\xad\x42\x09\x72\x91\x73\x60\xa2\xb7\x90\x24\xfc\x02\x94\x74\x28\x07\x70\x39\x68\x05\x46\x0f\xe1\xcc\x7a\x9a\x87\x53\x1b\x3a\x42\xc9\xac\x43\x1a\xa3\x0e\x8a\x8c\x32\x9e\x49\x4f\xfb\x04\x90\x5a\xa0\x36\x75\x81\x12\x6f\xb4\xd2\xa1\x07\xf7\x82\xcf\x7a\x48\xe6\xd0\x0a\x7b\x97\x98\x50\xa6\x1c\x5a\xa5\xf9\x24\xc8\xdd\xdc\x37\x67\x70\xa2\xc5\x6c\x40\x60\x1e\x24\x8f\x9d\xe7\x5e\x22\x3e\x49\xc0\xef\xa2\x2d\x65\xcf\x7a\xc0\x75\x42\x52\x27\xb9\x1f\xba\x89\xc6\xc3\xc0\x8e\x0e\x53\xbc\xf8\x00\x6a\x96\x2e\x0c\x91\x83\xb4\xf1\xe1\xf3\xdc\x27\x89\x85\xb6\xa9\xc0\xe0\xe1\x3f\x8c\x6a\x03\x9a\xc1\xf4\x02\x0f\x60\x78\x17\x33\x3b\x23\x7c\xd2\x3c\x0f\xba\x32\x74\x07\x4e\x7e\x72\xe4\x91\x38\x48\x8b\x92\xaf\x7a\xf4\x4c\x8f\x13\x07\xda\xc3\xd1\x30\xc2\x4b\xc9\x03\x34\x25\x0f\x78\xda\x71\x84\xce\xf7\xc0\x4d\x36\x40\xfb\x7e\xf1\x9d\x72\x86\x12\x28\xd2\x3f\xe7\x08\x57\x62\x74\x38\xd2\xf5\x24\x89\x17\x03\xdf\x76\x10\x24\x01\x05\x35\x8f\x6b\x2a\xdb\x82\x15\x6c\x39\xa4\x41\x8c\xe2\xf0\x12\xa4\x20\xa7\xa4\x87\x7c\x42\xa4\xb4\x0e\xe7\x7c\x53\x52\x2e\xd9\x8a\x29\x86\x0a\x19\x07\xfd\x9e\xcf\x0c\x71\x49\x6b\x2a\x60\xb8\xe0\xe2\x02\x25\x01\x98\x11\xb5\xf6\xce\x3f\x0c\x75\x27\xd0\x00\x2a\xe4\x7b\x06\x0c\xfa\x92\xad\xdc\x02\x60\xd9\x0b\x45\x29\xe3\x53\xa8\x80\x94\x12\x40\xbd\x52\xc7\x54\x9a\x60\xf5\xf7\x15\xa7\xda\xea\x26\xcc\x44\x7d\x86\xb2\x5c\xb4\x0f\x51\x7c\x68\x5a\x2e\xfb\xa6\x06\xf0\x94\x95\x08\x61\xe3\x18\x30\xc8\x89\xe6\xc2\x3b\x8f\xa5\x5f\x43\x9c\xc3\x52\xcb\x6b\xe5\x97\x92\xd7\xfa\x84\xb2\x28\x62\xdc\x3d\xbd\x54\x57\xa8\xce\x74\xec\x23\xed\xfc\xdb\x2d\xe5\x25\xe3\xd7\xee\x95\x6e\x59\xf7\x88\x7a\xad\xa1\xe7\x8b\xf6\xb0\xf0\x24\x39\xe4\xc9\xf9\xd0\x70\xff\x12\xf2\xe0\x41\xae\xde\x79\x11\xf4\xf3\xf5\xee\x54\x88\x8b\x04\x49\xb0\x71\x32\x02\x9f\x61\x99\x14\xaf\x6c\x06\xa6\x47\x72\xf0\x90\x62\xe6\x18\x06\x5c\x3e\x9a\x03\x8f\xcd\x33\x86\x7c\xe8\xfb\xc7\x6d\xa3\x15\x4d\x07\x99\xa0\x7e\x1f\x8c\xa3\xf8\x14\x2c\x2c\xcd\x21\xd1\x69\xef\xcf\x5d\x91\xca\x82\xa1\x21\x1f\xde\xd9\x26\x44\x3e\xc5\x5b\x1f\x73\x3f\xfa\x0a\xe9\x62\x74\xe0\xa6\xf4\x15\x1f\x41\x4f\x9a\xda\x7d\x08\xdb\x7c\xb7\xca\xc1\x4d\xea\x9b\x27\xe7\x06\xdc\x69\x2c\xe2\xf8\xfc\xd3\xaf\x48\x8b\x31\xff\xbc\x4b\x32\xe9\xdb\x99\x5e\x69\x3b\x2e\x28\xde\xec\x5f\x30\xa5\x2f\x25\x2b\x8e\x52\x4e\xbb\xed\x2d\x7e\xfa\xe4\x3c\x48\xad\xd9\x47\x29\xce\x23\xdf\xe7\x84\x51\x1f\x0d\x0b\x65\x61\x0a\x96\x58\xea\x49\x1d\xa0\xc1\x1c\x3a\x4e\x60\x7b\x72\x6e\xd2\x01\xea\xa5\xe8\x6a\xc7\x12\x52\x87\xf2\x65\x21\x73\x91\x4a\x62\x22\x8f\x13\xa4\x06\xce\xe6\x71\xb2\x88\x3a\x91\x8f\x94\x2d\xb0\xb0\x59\xa5\x85\xb5\x3f\x47\xb5\x32\x5a\x5b\xe6\x14\xfd\x29\x0a\xc3\xdd\x8e\xf5\xd3\x97\xa3\x8d\x8f\xc3\xb0\xe8\xb3\x70\x2a\x7e\xc3\xd2\x1a\x5d\xdc\x71\xbe\xd0\x0b\x6c\x23\x82\x39\x83\x90\x8b\x1b\xf3\x54\xd5\x61\x7a\x37\xae\xc0\x94\x86\x02\xff\x4a\x48\x07\x67\x0d\xdc\xcf\x38\x18\xb9\xa5\x56\xb7\x81\x55\xdb\x25\x59\xc8\x29\x4a\x97\xa6\x42\x0f\xdc\x79\x04\x47\xc9\xb0\x87\x75\x60\x75\x2e\xbc\x25\x9c\x91\x33\x88\x1f\x32\x13\x61\xcf\x0a\xc8\x29\x6c\x8c\x5c\x14\x72\x09\x0f\x6b\xd4\x6a\x5f\xd2\x2e\xf9\x5a\xe7\xcb\x0b\x15\x94\x7d\xce\xe5\x60\x15\x3c\x21\xad\xd4\x9c\xe0\x9c\x35\x99\x68\x0b\xa3\x21\x57\x41\xd0\xc8\xd9\x53\xe9\x1d\x05\xa4\x9d\xba\x20\x74\x2e\x17\x03\x97\x89\x18\xf6\xa2\x16\x09\x2d\xa8\x38\xe4\x59\xad\x6e\x83\xa4\x2a\x31\x39\x8c\xac\xf4\xfa\x34\x74\xd2\xcc\xc0\x61\x09\x97\x1e\x61\xe2\x3a\x5a\xa4\x4d\x1c\x92\x4f\x9c\x41\x7c\xd0\x8e\x9e\x40\x9f\x94\xd7\x96\xf1\xfa\x25\x2f\x2d\x43\x75\x09\x4b\x5f\xc2\x21\xda\x27\x02\x36\xce\xdd\xd1\x0a\x70\x34\x21\xc0\x85\x92\x1a\xed\x48\x6a\x34\x25\xa9\xd1\x23\x24\x35\xb6\xca\x5b\xc2\x1a\x12\xb6\x04\x3b\x78\xb5\x87\x15\xab\xdd\xa9\x68\xb9\xb7\xd0\xd0\xbd\x45\x40\x5d\xaf\x47\x48\x76\x73\xbe\x30\xc2\x9d\xfa\x8b\x95\xa8\xe9\x88\x77\x31\x49\xd1\x9c\xf8\x90\x5b\x4a\x4b\xb8\xbb\xe9\x0b\x90\x76\x5e\x13\x8e\x01\xb6\xd9\xdf\xbb\x71\xcb\x97\xe1\x1a\x5a\x11\xb1\xb6\x02\x7b\x19\x07\xfe\x1d\xd5\x28\xe5\xfc\x96\x18\x50\x4e\x77\xdb\x6b\x51\x94\xf4\x75\x25\x6c\x66\x9d\x3c\x3e\x11\xd1\x77\xa4\xdb\x87\xf9\xd5\xd8\x4c\xa1\x1d\xa1\x4a\x28\x74\x4f\x84\x2b\xba\xf0\xcd\xf4\x12\xe6\x74\xd1\xf8\x12\x85\x3d\x51\x3c\xbd\x5f\x8f\xe2\x3a\x6c\xa9\x1c\x91\xe8\x41\xb1\x56\x12\x7c\xf8\xd5\x95\x0c\x86\xde\xc7\x8e\xa3\x18\x28\x93\xc9\xee\x44\x44\xa1\x7c\x7e\xfb\x6d\x56\x85\x7e\xcc\x0d\x3a\x7c\x49\x57\x30\x56\xc5\x6d\x76\xf9\xf0\x3b\x9f\x02\x1a\x06\xd5\x12\xd0\x9c\x2e\x48\x9c\xb6\xc3\xe5\x5c\xb3\x59\x94\xec\x50\x3e\x65\x6b\x4c\xf9\x03\x02\xc7\x11\xa4\x5c\x4a\x7d\x66\xe2\x62\x87\xbf\xb6\xf5\x55\x02\x1f\x17\x9d\x36\xf6\x42\x1d\xf9\x32\x97\x98\x61\x8a\x05\xae\xd0\x4c\x3d\x58\x05\x0f\x9a\x9c\x85\xc8\x06\xd9\x9b\x7c\x62\x9d\x46\xdb\xc1\xdd\x49\xdb\xfe\xab\x67\x50\xd8\x90\x73\x7c\xdb\x9f\x45\x21\x2a\x73\x56\xb7\x12\x05\x88\xde\x23\x7f\x99\xf6\xd8\x8e\x33\x0f\x24\x33\x09\xd8\x3b\x2b\xa6\x20\xad\x9f\xbe\x2e\x53\x3c\x2a\xf0\xfd\xf1\xa3\xab\x55\xdd\xea\xec\xf2\xd2\x27\x84\xed\x64\x3e\x78\xbd\x66\xd7\x37\xbe\x96\x7e\xbb\x41\xd9\x4e\x3b\x70\x59\x2f\x6f\x68\xb9\x5b\xd3\xd2\x4c\xa9\x3d\x21\x53\xe4\x24\xf9\x98\x55\xfc\x45\xb5\xd9\xb0\xf6\x7b\xe6\xae\xc8\x6e\x42\x89\x98\x0a\x8f\x5a\xb5\x2c\xe6\x67\x8a\x3b\xf6\x3f\xcf\x0d\x7b\x16\xf4\x28\xda\xd0\xd7\x59\x76\x5b\xd0\x17\xd3\x35\x2b\x1d\xf0\xc5\xd4\xfe\x88\xe6\xc0\xd3\x88\x10\xc5\xf2\x27\xd1\x20\xcc\xdc\xea\xb7\xd2\xc6\xe2\x9b\x6d\x0c\x7e\x5a\x20\xba\x47\x7a\x57\x5d\x5e\x80\x9a\xca\x1c\xb9\x60\x7d\x86\xab\x14\x89\xaf\xd2\x5c\x48\x22\x77\x4d\x0b\x64\x8d\xa9\x87\xd3\xcb\x49\xc4\xe5\x87\xd4\xe4\xad\xdc\xd5\x5a\x8a\xe6\xdb\x80\x59\xf2\x56\x3b\xe9\x55\x44\x97\xa6\x16\xd7\x9f\xd4\x85\xa0\x53\x71\x69\x34\x74\x45\x6d\x8b\xba\x66\xd7\xc6\x41\x1e\xb0\x11\x47\xcd\xba\x18\x6e\xeb\x61\x68\x9e\xe1\x45\xb7\xd6\x17\xa6\xd3\x56\x18\xbe\x41\x6c\xc5\x81\xb7\x9d\xfd\x81\xb3\x74\xe6\xb2\x92\xf0\xdc\xa8\xa5\x01\x48\x77\x6c\xbd\xd6\x08\xdd\x11\x0d\x53\x47\x4b\xbf\xf0\x53\xc5\xed\x07\xc6\x30\x51\xa9\xbb\xb9\x33\xf3\x54\xce\x21\x53\x0d\xa0\x0b\x83\xe8\xa2\x6d\xbf\x0e\x2a\xfb\xe2\x6a\x1a\x54\x09\x6c\xf9\xe2\x02\x02\x75\x5f\xe8\xc1\xe7\x0b\xd5\x80\x75\x9d\xd6\xa2\x04\x54\xa9\xb9\xc5\x6f\xba\x70\x6a\xb7\x80\x2a\x2e\xb8\x8a\xea\xda\x25\xe0\xed\x0f\xcd\x59\x2f\xf2\xe9\x29\xdb\x86\x3d\x07\xc1\x77\xa5\x9a\x2b\xce\xb4\xfb\x05\xed\x0e\x4b\x71\x74\x1e\x0c\xc6\x3a\xb2\xc7\x57\x4c\x6c\xa8\x2b\xc8\x37\x3c\x39\x47\x28\x8f\x98\x66\x40\x54\x55\x0f\x40\x1c\xba\xe0\x69\x63\xd9\xc0\x0d\x10\xbe\x2e\x63\x63\x6a\x7c\x2d\x02\xf6\x74\x8f\x4d\x4f\x22\x86\x0e\x39\x3d\xc8\x62\x05\xa5\x35\x1e\x51\xc2\x17\xf2\xea\x83\x67\x6e\xd4\x3f\x84\x7b\x68\x4f\xdf\xee\x1b\x53\xe6\x3f\x7a\x0c\x4e\x84\xcc\x14\x98\xae\x50\xd3\xc0\x72\x7b\xc8\xca\x40\x9e\x81\x44\xb9\x41\x2c\xa3\xe5\x50\x5f\x4a\x28\x20\x0e\xba\x34\xa2\x6c\x97\x46\x74\x55\xd0\xf8\x02\x17\x84\xce\xab\xc5\xa8\x98\x9f\x2d\x08\x21\xc5\xfc\x7c\x31\x99\xe8\x53\x32\x16\xf3\x6a\x01\x33\xee\x0c\x3f\x30\x55\x4d\x60\x65\x77\x2e\xbe\xd2\x51\x1b\x5b\x5c\xe2\x56\x43\xa8\x1f\x1a\x6c\xf2\x84\xa4\x84\x9d\x2a\x5a\x37\x47\xb8\x20\x67\xb8\x26\x95\x5d\x64\xf1\xac\x7e\x5a\xd8\x45\xee\x48\x35\x2f\x16\x23\x36\xdf\x2d\xc8\x9c\xce\x77\x0b\xcc\xe7\xbb\xc5\x22\x28\xec\x5f\x69\xc5\xe7\xc0\x09\xf9\x9e\xde\xc1\xa1\xe8\xd4\x6a\xec\x68\x03\xda\x97\x5a\xfb\x0a\x4e\x91\xe4\x1c\x81\x0e\xaf\x4b\x6c\xbb\x37\x54\xeb\xf8\x39\xdb\x8d\xd1\xdb\x86\xa1\x8a\x81\xf3\x4f\x7c\x1d\x39\xc3\x7c\x82\xd8\xb9\x8b\xd7\x57\x6d\x1a\x3a\xd8\x01\xcd\x1f\xa0\x48\x98\x02\xce\x77\x88\x58\x87\xbc\x1c\x98\x38\x90\xb6\x92\x95\xed\xbb\xb2\x4b\x45\x1d\x1f\xd1\x4b\x38\x53\xbc\x64\x08\x18\x0d\x05\xa3\x53\x05\xff\x63\x50\xb4\x7e\xea\x9d\x1f\x11\x2c\xe7\x97\xfa\xa6\x6c\x51\x28\xad\x81\x8a\x58\x4a\x84\x3b\x4c\x83\x24\x21\xf3\xa2\x33\x56\x45\x16\x89\x88\x1f\xf2\xc5\x3b\xfa\x58\xa1\x5e\x1a\xee\x2c\x69\x07\xd0\xa0\x9f\x49\x7a\x14\x9a\x00\x33\xd4\x79\x91\x60\x26\x8c\x06\x2f\x95\x26\xa9\x8f\x02\xeb\x24\x80\xa0\xf5\x45\xe6\x3e\x86\x32\x8b\xdd\xae\x5a\xf5\xae\x92\x7d\x8d\x84\xb3\x6a\xb5\x32\x7e\xd4\x60\xaf\xa9\xa2\x1c\xe3\x2d\x01\xde\x62\x6b\x72\x92\xed\xce\xb0\x40\xfa\x3a\x6e\x25\x48\x6f\x4d\x78\xa0\xc7\x4e\xd2\x14\x33\xc3\x25\xa0\xfd\x5f\x8a\xfa\x47\xaa\xe8\x4e\x7c\x1c\x6f\xc3\xea\xff\x01\x45\xea\xe2\x81\x09\x98\xb4\xac\x20\x6a\xdd\xd4\x31\xf9\xef\x49\xdc\xa0\x98\xb4\x39\x9d\x8b\xc5\x42\x9d\x17\xfd\x57\xef\x55\xa1\x5f\x9b\xc8\xba\x3e\xc4\x34\x88\xe2\x13\x12\x7f\x06\x54\x49\x75\x76\x00\xf6\x91\x07\xba\x81\xbb\xed\xce\xcd\x38\xd9\x5d\x11\xac\x77\x41\x24\x96\x84\x90\x9c\x8e\x99\xaf\xd6\xda\x5e\xf7\x45\x3f\xc0\x16\x33\x7f\xda\xe7\x74\x81\xdc\xf5\x9e\x18\x0b\x48\xf5\x25\x14\xfe\xeb\x52\x58\x56\x5a\x7f\x20\x43\x93\x28\x32\x90\x56\xc3\xa5\x80\x1c\x4c\xb9\x68\x4f\x35\x1a\x77\xf6\x99\x16\x67\xe4\x9e\x47\xcd\x67\xbf\x1f\x1c\x3c\x7a\x6d\xc5\x88\xb0\x86\x75\xd7\x47\x36\xac\x80\xed\xae\x22\x53\x75\x3b\xba\xd2\x22\x51\xbc\x47\x37\xe2\xba\xe8\x28\x4d\x34\x45\x17\x3b\x3e\x55\x6c\xc9\xd5\x4e\x70\x75\xbd\x98\x56\x79\x66\x86\xd4\x29\xcb\x71\x06\x74\x98\xef\xb6\xef\xc4\xf6\xa6\xe0\x34\x24\x34\x50\xe3\xc1\x4a\x71\xe9\x26\x3d\xd6\x96\xcb\x62\xbd\x36\x05\xae\x42\x1a\x03\x64\x21\xcd\xc1\x47\x56\xb1\xd3\x53\x89\x14\x01\x99\xcb\x05\xd4\xfb\x82\x6b\x91\xff\x54\x53\x57\x14\xe5\xe4\xdc\x16\xb0\x3b\x6b\x72\x8a\xd0\x40\x47\xa1\x79\x4d\xc4\x9b\x20\x6c\x9c\x53\x6e\x23\x78\x3a\xc0\xb4\x74\x23\x11\x10\x95\x3a\xe2\x09\xa3\x67\x58\x03\x3e\x18\x0f\xa1\x84\xd2\x26\xa1\x9c\x9a\x96\xac\x5e\x56\x9c\xd3\xa5\x2d\x91\xd2\xe2\x0e\xcc\xa9\x6b\x31\x08\x9a\x81\x0d\x40\xd7\xc7\xc8\xc6\x6a\xdf\x08\xd8\x47\x0f\x74\x59\x32\x41\x97\x72\x7d\xdf\xdd\xf3\x2e\x82\xcc\xe3\xc2\xcc\x07\x01\x18\x3a\xdb\x44\x21\xd9\x90\x2f\x30\x99\x1c\x6d\x44\x09\xb5\x5e\x09\x1c\x33\x53\xf4\x4a\x4d\x34\x89\x97\x5d\xc7\x09\x88\xe8\x06\xe3\xf8\xe6\xf4\x14\xac\x54\xc6\x5c\x2d\xbd\xb3\x82\xd1\x9b\xf1\x6e\x26\x36\x50\xc2\xdf\xb0\x95\xcc\xd1\xc8\xc4\x7d\x33\x6f\xeb\xaa\x08\x1b\x02\x58\x0e\x82\xcb\xd3\xe2\x59\xe5\x91\xb8\xb0\xe6\x6d\x10\x5a\xea\x31\xe3\xb5\x2c\xf8\xd2\x14\x31\xb7\x53\x79\xc6\xa1\x0c\x19\x8c\x57\x23\xec\x67\x88\x5c\x4a\x6c\xa9\xd1\x42\x51\x31\xb8\x6e\x06\x73\x4a\x26\xe8\xb1\xf3\x67\x72\xaf\x93\xc4\xf7\x11\xb7\x4e\x7a\x1c\xd8\x2b\x25\xb2\x6b\xc0\xbc\x00\x39\xcf\x14\x5d\x4f\x18\x6c\x1e\x9a\xa8\xb0\x50\xe8\xb5\xd0\xc2\x61\xde\x55\x15\x60\x46\x78\xc0\x39\xc7\xba\x02\xa1\xe4\x4a\x3e\xa4\x4d\x10\x6a\xbf\x12\x98\x8c\xeb\xb6\x1c\xbe\x23\x67\x4f\x77\xcf\x6c\x69\xae\xa7\x3b\x2b\x8b\xae\x49\xad\x04\xd0\x25\xa1\xf3\xb5\xae\xb6\xcc\xca\xec\x84\x90\xb5\x8d\x19\xad\xe6\xeb\xc5\x7e\xcf\xe6\xeb\x05\xb6\xba\xed\x91\x49\x93\xee\xd6\xbc\xba\x58\x81\xcd\x05\xe2\x74\x4d\xd2\x74\x5f\xf3\xd0\x79\xb0\xc6\x4c\x46\xbe\xc6\x4b\x34\xba\x12\xb4\xf8\xa8\x13\xaa\xfb\x54\xf8\xf1\x17\x3e\x25\xa7\xfa\x02\xe7\xa5\x29\x51\xba\x46\xe8\x80\xb3\x77\x39\x10\x3d\x14\x8e\x6c\x8d\x47\xf1\xb8\xb6\xe6\xcd\x17\x18\xd5\xe6\x17\x97\xf3\xf5\x82\x2c\x1b\x1d\xcf\x6b\x39\x98\x65\x74\x60\x86\x25\xd0\x21\x0f\x1c\x2f\x32\x1f\x45\xe5\xc4\x50\xb0\x4e\x8e\xf0\x89\xe9\xd9\x09\x1a\xee\x16\x49\x99\x0d\x42\xdf\x9f\xb4\xed\x60\x64\x85\xbc\x7e\xc3\xc2\x31\x56\xd5\xc8\xe8\x76\xdc\x0a\x78\xb0\x02\xa3\x07\xe8\x32\x42\xbf\xec\xb2\xbd\xd7\x25\x4d\x47\x21\x5b\xf2\x39\xa0\x40\x53\x50\x90\xe8\xe1\x1e\xf8\x15\xbb\x20\x7d\x3f\xbe\x64\x86\x76\xa5\x74\xca\xa0\x4d\x30\x6a\x72\x2f\x9a\x27\xc8\xdb\x5c\xeb\x1c\x0d\x27\x83\x7d\xf5\xe4\x0e\x81\x71\xf5\xd7\xd7\x64\x40\xb1\x04\x57\xd1\x7a\x32\xc9\x8b\x0e\xed\xf5\xa5\x85\x8c\x46\xa0\xdf\xad\x60\x58\x4b\x60\xb5\xa8\x3b\x50\x2c\x32\x42\xe7\x15\xa9\xe7\x7c\xb1\xd0\x28\xb0\xb6\xa9\x68\x4e\x08\x29\xe6\xd5\x62\xbf\xb7\xee\x23\xaf\xfe\xbe\x2b\xd6\xb9\x98\x57\x0b\xcc\xd0\x7e\x2f\x9d\x8e\x34\x3c\x91\xb6\x84\x44\x97\xa9\xc9\x9e\x65\xa7\x31\xcd\x3f\xcd\x66\xe6\x11\x2b\x4f\xb3\x6f\xb2\x76\x1c\x7b\xb0\xfa\xbe\x68\xf6\x7e\x7b\x43\xd7\x00\x92\xd2\x4d\x26\x4c\x49\x4d\xa7\x10\x7b\xb7\x27\xea\xc3\xe5\xe3\xb2\xd1\x47\x4d\xb3\xa5\x94\xca\xd3\x74\x82\xde\x8d\x0d\x57\x93\xa6\x24\x7e\x0a\xba\x68\xfe\x31\x23\x97\xda\xb5\x29\x54\xf3\x0f\x01\x45\x0b\x4f\x3d\xe0\xd0\x11\x26\x41\xde\x80\xd4\x21\x4d\x65\x10\x68\x59\x82\x52\x9f\xb5\x34\x1a\xe1\xe4\x46\xad\xd8\xfd\x24\x69\xa0\xb8\x13\xe3\x9f\xcc\xeb\x1d\x24\x3d\x68\x1f\x93\xe3\x00\x9a\xb2\x63\xe5\xfd\x46\x96\x21\x60\x77\x9b\xf7\x82\x3e\xd1\x33\xd5\x99\x0b\xb6\xed\xcc\x05\x0c\x9e\x61\x86\x5a\x1e\x1b\xf7\x10\xbe\x3d\x90\x70\x1c\x4c\xa6\x71\xf6\x76\xad\xf8\x1e\x8a\xd1\x33\x76\xd6\xc3\x3e\xdf\x39\x42\x0d\x9d\x3a\xe6\x25\xce\xfb\x6a\x2a\x57\x45\x0f\x4b\x4c\xa7\x61\x4a\x04\xf8\x19\xbc\x5f\xb6\x0c\xbc\xa0\x91\x7c\x5d\x09\x52\xb7\x2d\xbf\xea\x61\xf1\xd9\xca\x3b\xd5\x16\x5e\x22\x59\xf7\x27\xaa\xe2\xd3\xaa\xe0\x13\x16\x92\x83\xfa\x56\xae\x10\x1d\xaf\xc4\x06\x3a\x9d\xb5\x55\x91\x81\x53\x93\xae\x44\x6b\x5e\xc4\xa7\x82\xfe\x2c\x45\xb1\x94\xaa\xeb\xb2\xb4\x32\x4c\x1d\x84\x70\x6b\x9f\x1e\x8a\x39\x6a\xf0\x47\xc8\x2d\xd6\x5b\x62\xdb\x17\x5e\xc9\xdc\x5a\x33\xe2\xfd\xe4\x6f\x8a\xfa\xbd\x7d\x6e\x06\xd2\xe2\x00\xf8\x12\x67\x25\xed\xfb\xea\xa5\x7f\xd3\xfe\x4e\x4b\x29\x7a\x62\x9e\x25\x56\xf8\x3c\xeb\x2e\x7d\xbf\xa7\xea\xa0\x98\xae\x1c\x4a\xf5\x80\x0e\xaa\x46\xb8\xe4\x24\xbc\x72\x73\xd7\x83\xbf\xdf\xd2\x25\x5b\x31\x5a\xe6\x1c\xa1\x04\x98\xc1\x63\x52\x4b\x92\x9d\xd5\xbf\x71\x2b\x00\xbf\xad\x03\xd0\x01\x33\x58\x50\x7e\x2c\xe7\x28\x28\x88\x66\xdd\x06\xae\xa9\x7c\xab\x64\x21\xc5\x80\xe4\xba\x1c\x9f\x0e\x94\x43\xa3\x5a\x81\x53\x3d\x31\x20\xed\xee\xe3\x64\x92\x9b\x7e\xba\xef\x4c\x67\xba\xa0\x07\x0e\xb6\x16\x21\x5c\x5c\xe8\x8c\xf2\xc5\x94\x95\x38\x59\xd3\xc3\x55\xa9\x34\x5f\x05\xb5\x34\x3e\xdc\x6f\x4d\x61\x1a\x84\x66\xd0\x0d\x28\x6a\x80\x89\xaf\xbc\x05\xc6\x7c\x68\x51\xd4\x8b\x31\xfa\xd3\xa6\xc1\x03\x8d\x7a\xf6\x36\x84\x26\x2c\x0f\x59\x77\xbf\x21\x38\xb2\x63\xe0\xc8\x3e\x05\x8e\xfc\x42\x97\x06\xe0\x1e\x50\xf9\x03\xe3\xcb\xf5\xae\xa4\x6f\x4a\x5d\x9b\x2d\x30\xa4\xd9\x65\xbe\xae\x04\x65\xd7\x5c\xcd\x94\x62\x8e\x05\x56\x9d\xa0\x5f\xba\x11\xcc\x6c\x84\x3f\x2a\x46\x84\xfb\x72\x07\x65\x6c\xbf\xee\x3b\x25\x28\x3c\x4a\xff\x9c\x3d\x02\xc0\xb8\xba\x7f\x39\xc7\x0f\xac\xac\x35\xc5\xf7\x72\xe7\xd0\x29\xbe\xe8\xc1\x68\x2b\x20\x6b\x78\xcc\x52\x70\x78\xce\x4b\xb5\x49\xbe\xaf\xce\xf1\x30\x9d\x3c\xaf\x83\xd6\xf6\x84\xe0\xe1\x66\x43\x57\x47\x9b\xb2\x6a\xf8\x84\x80\xc1\x2c\x00\x8a\x3e\x4b\x23\x39\xe7\x0b\x73\x5d\x3d\xcf\x19\xea\xf3\x83\x7f\x60\xe5\x4c\xdb\x45\xef\xb7\x74\x16\xf8\xeb\xeb\xfa\x1d\xbd\x90\x1a\xbc\xeb\x06\x70\x83\x1f\x83\x1b\xfc\xd3\x70\xc3\x3a\xba\x5f\x5e\x53\x4e\x45\x21\xa9\xdb\xbe\x60\x7f\x61\x2f\x7a\x1b\xb4\x0a\xe9\x7b\xfd\x97\x87\xaf\xd4\xb4\x8a\x3b\xe0\x0a\x28\x94\xe9\xbc\xf2\xb9\x0b\xad\xd3\x35\x45\x78\xa2\x74\x08\xd7\x15\x42\x8a\x7e\x52\x33\x3a\x44\x6a\x0a\x2c\x71\x8d\x30\x9b\x57\x0b\x52\x07\xfe\x16\x7d\x9f\xcc\xba\x8e\xce\x6c\x95\x07\x9a\x2a\xbd\x31\x8c\x97\xf6\x9c\xeb\x2d\x0b\x3c\x9f\x0d\xf4\x3d\x4f\x82\xa2\xa2\xa0\x6c\xca\x8b\x0d\xb5\x5a\x3c\x9d\x15\xcc\x33\x5c\xe0\x31\x14\xb8\x0b\xa5\x76\xb7\xc2\xcc\xec\x6c\xc8\x88\xa0\x51\xe1\x6c\x6a\x7c\x5e\x2c\x9a\xa6\xc1\x37\x45\x6d\x97\xf8\x7c\x7d\x57\xdc\x9b\x53\xd9\x57\x3e\x5d\x09\x83\x9e\x61\x71\xec\xd7\x64\x92\x15\xf0\x35\xe4\x13\x9c\x52\xd3\x23\x74\x9f\x26\x21\x7d\x03\xf4\xcc\x27\x70\x1b\xea\x99\xc2\x7e\x2f\x26\x13\x53\xa3\xba\xd6\x7b\xe0\x56\x1e\xcf\xe3\xcd\xa1\x39\xf4\x2e\x32\xcf\x58\x69\x96\xe8\xfa\xde\xef\x33\x56\xb6\x9e\xa1\xce\x80\x31\xcd\xfb\xb4\x81\x9f\x14\xbc\x7c\xa2\x30\x29\x39\x05\xf7\xb6\x3b\x97\xfe\x5b\xec\x51\x13\x39\xc9\x21\x5b\x50\x38\xae\xdf\x6a\xa4\xd7\xdc\xc7\xdd\xfe\x23\xb6\x3b\x40\xf5\x06\x07\x9f\xf5\x8d\x0d\xc5\x91\xa1\x5d\x16\xc1\x5a\xce\x35\x41\xd2\x1a\x9d\xe9\xb2\xd8\x50\x5d\x95\x09\x2d\xf6\x7b\x39\xa7\x0b\x45\xf8\xd2\xb2\x46\x82\x36\xf8\xab\xde\x47\xa3\xd0\x62\x79\x13\x9d\xd7\x40\x7b\x89\x2b\x25\xa0\x0e\x09\x0a\x42\xc9\xa3\x61\x70\x43\x05\x67\x7d\x32\x61\x1d\x11\xc8\x95\x68\x87\xf4\x0d\x15\xc2\x31\x99\xea\xff\x30\x28\x79\x65\x3e\x05\x51\x90\x77\x57\x9e\xbe\xc6\xfc\xca\xa3\x04\x86\x90\x36\x33\xd6\x99\x66\xa7\xf2\x34\x83\x98\xb3\xcc\x52\x41\x6f\x98\xf2\x97\x01\x73\x97\x81\x36\x46\x31\xe7\x45\xe7\x62\x2d\xf1\x8e\xb0\x79\xb1\xb0\xaa\xc6\x4b\x27\x4e\xfa\x4d\x0a\x73\xa8\x61\x8e\x77\x08\x2f\xc9\x5a\x27\x56\x5d\x91\xf5\xd4\xdc\x1c\xa5\x9a\x87\x70\xbf\x88\xff\x73\xbf\x9f\x2f\xb0\xff\xa9\x55\x81\x4b\x84\x57\x28\xaf\x83\x66\xda\x8f\xd2\x94\x6e\xad\xf1\x0a\x8d\xaa\x79\xb1\x20\x8a\x45\x58\x3a\x16\x61\x09\xb7\x82\x8e\xd3\x28\xc9\x83\x9a\xc4\xac\x6a\x4c\x8a\x91\x7a\x08\x5e\xb8\x04\x41\xa1\x6f\xcb\x3e\xe7\x56\xc0\x36\x38\x7b\xd2\x61\x88\x32\x04\xb7\x31\x40\x74\xa7\x24\xa9\x4f\x82\x68\x8d\xf0\x0e\xe5\x55\x1f\x44\x2b\xbc\xd3\x5a\xf4\xb5\x01\x9b\x02\x6c\xed\x00\x5b\x1b\xc0\x1e\x05\xca\x35\x80\x72\x70\x61\x7d\x1c\x1a\x0c\x33\x92\x69\xf9\x24\xe7\x26\xf4\x02\x8d\x2c\x13\xe0\x12\x7b\xba\x08\xa5\x71\xfb\x5e\xe7\x68\xea\xa6\x92\x33\xb5\x77\xbb\xf5\x1a\x35\x98\xd5\x2d\x42\x63\x0b\x83\x37\xd6\xa3\x4e\xaf\xb5\x55\x23\xdf\x75\xae\x93\xe7\x06\x04\x12\x1e\x34\xba\x66\xb9\x6d\x1d\xbe\x8e\xb9\xb7\x6e\x30\xe5\x64\x02\x5a\x73\x39\x2d\xd6\xeb\xea\xee\x7b\x35\xcb\x40\x51\x68\xbd\xfc\x4c\xc9\x64\x1b\x8f\x75\x55\x55\x6b\x5a\x70\xa0\xd6\x50\x8b\xd9\x16\x68\x26\xe2\xe2\xab\xff\x93\x4b\xb1\xa3\x7b\xb9\x3f\x47\xff\xfd\x2b\x36\x95\xb4\x96\x39\x45\xb3\x8c\xef\xd4\xc8\x46\x89\x72\x4e\x08\x09\xd5\x1e\xb3\xa4\xa1\xe5\xe0\x5c\x75\x81\xe8\x6f\xf5\x74\x72\x0a\x25\xf8\xd9\x41\x48\xb8\xcb\xc3\x2e\x4b\xb1\x7d\x7e\x0d\xde\xb1\xc3\x45\xea\x67\xa7\xee\x66\xb1\x49\x16\xac\x27\xc8\x93\xdf\xc2\xb2\x73\x71\x4a\x7e\x8d\x15\x99\x7b\x59\x48\x9a\xd3\x69\x6d\x32\x4d\x08\x04\x66\x02\xfb\x40\x20\xa4\x83\xd5\x74\x33\x6b\x7c\x08\xa0\x23\x2f\x82\xd7\x33\x53\x11\xfb\xc2\x6c\x74\x12\x62\x91\xb7\x91\xb3\xdf\xbf\x84\xb4\x75\x27\xac\xfe\xbe\xf8\x3e\xa7\x08\xca\x63\xbf\x79\xff\xce\x55\xc8\x86\xfe\xc2\x92\xfe\x55\xd8\x13\xd8\xd2\xe8\x09\x21\xe7\x5f\x9d\xe9\x3f\x9e\x9c\x7f\xa5\x2b\x6d\x16\xc7\x02\xd8\xa2\x0b\xc4\xed\x69\xbf\x51\x57\xd4\xbb\xca\x25\xf9\x1e\xd6\x9c\x53\x84\x2e\xe4\xe0\xf2\x3e\xb1\xb7\x06\x41\x4d\xd7\x43\x73\x4d\x23\x9b\xee\xd8\x40\x4b\x31\x5f\xbf\xe4\xe3\x06\x8d\xe8\xd4\xa0\xe9\x07\x51\xf0\x7a\x55\x89\x0d\xe1\x98\x4e\xd5\x2e\xf9\x27\x0c\xd3\x69\x8a\x40\x40\xb2\x0b\xbd\x40\xdf\xb8\xc0\xd4\xb0\x36\xfe\x59\x8d\xe9\xd4\xff\x12\xd8\x10\xab\x3f\x6a\x0f\x35\x90\x96\xdf\x45\x12\x86\x92\x3c\x80\xa3\x4d\x39\x6c\xf8\x7b\xc6\x94\xc6\x37\xa6\x05\x04\x79\x03\x32\x60\x52\x91\x35\xb0\x99\x66\xe9\xd4\xc6\x41\xfb\xe6\x4b\xe8\xae\xe1\xa0\x1e\xab\xb8\x7e\xec\xf8\x98\xda\x9a\xe1\x61\x3c\x9f\x4c\x93\x6a\x47\xf6\x7f\xa4\xf5\xb6\xe2\xb5\x21\xd9\x2d\x0a\x9e\xd6\x90\x7b\xff\x29\x8d\x31\x76\x54\x79\x04\x04\xfe\x56\x57\xfc\x49\xb1\x65\x71\xd5\x7e\xdd\x96\xf1\xd5\x9a\x2e\x65\x25\xda\x75\xfc\xe3\xcf\x53\x55\xfe\xbb\x75\xfc\x15\x1b\xf2\x05\xc0\xc9\x88\xab\xcc\xee\x60\xe9\xaf\xf3\x97\xd5\x12\x62\x25\xff\x48\xd7\x5b\x2a\x66\xad\x54\x19\xb6\x88\x3f\x21\x66\x4f\x14\xa6\xbd\x5b\xd9\x5c\xef\x28\x4c\x85\x70\x19\x6e\x10\x04\x19\xea\x3e\x6d\x63\xa7\xf9\x4b\xa6\x8d\x0f\x1d\x0b\xc3\xb4\x03\x41\x1a\x79\xe4\x1c\x8f\x83\x87\x61\x0c\xb1\x7e\x31\x17\x8b\x91\x9c\x8b\xc5\x81\x59\x71\xd4\xd8\xd9\x37\x89\x49\x39\xb6\xca\x4f\x2c\xd0\xbc\x18\x7d\x8b\x6f\x96\x50\xbc\xf8\x97\x5a\x03\x33\x3c\x9d\x02\x8d\x4c\xf8\x5e\xad\xa4\x0d\xc3\xe4\x35\xbe\x13\xc2\xac\xe6\x85\x86\xec\x58\xdb\x97\x26\xb1\x8f\x8e\x93\x82\xd4\x6c\xb1\xa5\xfd\xb5\xa8\x36\x3f\x14\xf7\xeb\xaa\x00\x05\x9a\x51\x9d\xe1\xd6\x10\xe1\x4c\x13\xf7\x07\x5b\xe5\xf2\xb8\x7e\xb3\x9e\x06\x19\x3e\x09\x34\x39\x97\x4a\x72\xf3\x39\xde\x53\x7c\xd3\x4d\x32\x19\x7c\xc7\x49\xb2\xad\x14\x0a\x99\x47\x81\x29\x9a\x6a\x43\xb6\x82\xb6\x99\xcc\xac\x3f\x80\xa0\xe7\xcc\xe8\x6a\x3e\xb0\x61\xa0\xf0\xeb\xd2\xa9\xb4\xd5\x6c\x3c\xdc\x2b\xe4\xb1\xb0\xef\xfe\x7d\x47\x85\x4b\x43\xd4\xee\x35\x76\xe3\x05\x65\xbb\x11\x03\xc0\xae\xe7\xa2\xa1\x3d\x4f\xdd\x60\x23\x19\x79\x3b\x71\xef\xba\x31\x0f\x13\xa3\x4c\x43\x4f\x0a\x0a\x62\xba\xd7\x16\xe7\x6d\xd4\x60\x5a\xff\xda\x32\xd6\xb5\x34\x6e\xde\x3b\x31\xe8\x5c\x97\x3a\xe2\xe0\x33\x1f\x3f\xb6\x52\xb6\x59\x41\x8f\x18\x72\x0c\xf5\x6a\xa5\x72\x39\x74\xa6\x1c\xa5\xc2\xff\x34\x02\x96\x9c\x56\x48\xc8\x3a\x1b\x1c\x79\x35\x1c\xbb\xc7\x2d\x37\x14\x3a\xa4\x8d\xa1\xd8\x29\x65\x45\x4a\xcf\x4a\x7b\xf4\xac\xa1\xf3\x67\x6b\xc4\x79\xb5\x70\xf5\x53\x3a\x6f\x46\x80\x13\xc0\x7b\xb6\xd7\x97\xeb\x4a\xe0\xa1\x0a\x46\xf1\x5f\x3d\x8c\xc0\x10\xb9\xd2\x82\x2b\x6a\x70\x4f\x83\x04\x79\xcd\xcf\xb0\x9c\xd6\x8c\x5f\xef\xd6\x85\x60\xff\x45\x51\x9e\x9f\x61\xee\xc9\x8d\xab\xfe\x8f\x74\x6e\xfa\xad\xeb\x4c\x75\xed\xde\xf6\xf5\xbc\x5d\xef\x84\x56\x56\xe6\x34\x24\x0c\xad\xc5\xc5\xe7\xd3\x18\xe8\x4c\xd3\x9f\xd4\xec\x5e\xd2\xe5\xba\x10\xb4\x7c\x5b\x6c\xb7\xc0\x42\x63\x19\xc7\xcf\x27\x03\xe3\x0e\xf7\x11\x7d\x65\x25\xee\x07\x56\x6a\xf3\x96\xd9\x8d\x37\xa5\xae\xa3\x0c\x3a\x88\xc8\x21\xc1\x9a\x24\x11\xf6\x93\x89\x3e\x0d\x7c\xe1\xa0\x59\x34\x5e\xd4\xb2\x15\xbe\x87\x25\x8a\xd3\x3a\x01\x65\x74\x9c\xbc\x6a\x21\x22\x08\x68\x7d\x89\x68\xac\xff\x83\x1b\xb9\x5f\x3a\x31\x6a\xd0\xb2\xa8\x6f\xa8\xd0\x7a\xd0\x03\xde\x13\xc7\x74\x30\x28\x60\x1f\x4b\xea\x65\x70\xe9\xf7\xa0\x5c\x98\x39\xcb\x2e\x5f\x36\xc1\xf8\x29\x08\xc4\x6a\x33\xae\x15\x3d\xae\x60\xe2\xb2\xe0\x4e\x9f\xae\x04\xf3\x08\x2f\x23\x82\xbe\xdf\x3f\x34\x23\x1b\x86\xad\x1e\xe7\xc2\x28\xd6\x8c\x9f\x84\xb4\x3b\xa5\xee\x6f\x86\x02\x2b\x56\x85\xb9\x55\x2c\x69\x84\x2b\x92\x26\x41\x67\x0e\x2c\x4c\x3a\xd2\xa2\xc7\xd4\xd9\xb6\xf1\x85\xd7\x4e\xb1\x20\x55\xf3\xc9\xce\x24\x31\x3c\x9c\x75\x1b\xd2\x74\x74\xdc\x3c\x48\x35\x99\x54\xc6\xfd\x6a\x32\x39\xb1\x7f\x6a\x5d\xbc\x2e\xe0\xe3\x32\x47\x57\xfb\x3d\x53\xc0\x8d\x1d\x04\x5b\xbf\x1d\x88\x93\xf0\xe1\x11\x7c\x78\x1b\x3e\x11\x7d\xe5\xa1\x72\x3c\x06\xd7\x48\xfb\xa6\xd8\x02\x3f\x15\xaa\xc9\x83\x3f\xe6\x7d\x98\x57\x85\x98\xc7\xca\x59\x35\x65\x65\x33\x6a\x13\xfd\x62\x61\x94\x98\x75\xd3\x34\x9f\xe8\xa6\xa0\xcb\x9b\xbd\x6f\x7d\xaa\xdd\x28\x90\xb7\x42\x3a\x6b\x7f\x7c\x41\x3d\x02\xc8\xd5\x30\x90\x2b\x0d\xe4\x7e\x7b\x74\x35\x04\x7d\x6b\xd1\x68\xc1\xde\x32\x1e\x05\x61\xc3\x79\x41\x1d\x56\xd1\x14\x56\xa9\xbb\xb3\x0e\x78\x17\xcf\xb6\xe8\x30\x88\x22\x11\x06\xc1\x74\x18\xc4\xe0\x2e\xaf\x83\x5d\x1e\xd5\xf3\xdd\xc2\xa0\xc6\x52\x6d\xf9\x5a\x6d\x79\xd3\xbd\xe7\xc3\x2d\x37\x2a\xdc\x8a\xb0\x40\x74\xaf\x8e\x14\xdd\x63\xb1\x3d\xdd\x30\x29\x9f\x27\x9e\x05\x9e\x7c\x07\x7d\xfd\x12\xe2\xbd\x62\x95\xbe\x80\x80\x5f\x11\xd9\x11\xf0\xb7\x82\x6d\x0a\x71\xff\x27\xa8\xfa\x55\x66\x78\x43\xc5\x35\x2d\xcd\x10\x8c\xd6\xb3\xb9\xb1\xeb\x2d\x70\xeb\x42\x1c\x62\x12\x7b\xd5\x56\x5e\x5b\xaf\x58\x45\xd7\x59\xe0\xc3\xde\x66\x19\x23\xfe\x6f\x4e\x17\x9e\x89\x6c\x51\x7c\x5c\x10\x6e\xa3\xb5\x21\x8b\x5a\x15\x9a\x31\x73\xf5\x08\x17\xee\x22\x00\x06\x50\x06\x0c\x52\x8f\x10\xa6\x37\xc3\x44\xe4\x30\x13\x7c\xb3\x62\xdc\x28\x07\xb3\x59\xc8\x32\xb8\xce\x5e\xbb\x06\xb6\xdb\x9e\xdb\x17\xba\xfb\xbb\x17\xda\x7a\xfa\x4b\x88\x75\x43\x1d\xaa\xf9\x3d\x5f\xaf\x07\x26\x07\xbe\xb7\xc7\x75\xf4\xad\x8f\x1b\xea\xed\x2e\x70\xc3\x3d\xae\xd3\x3f\xda\x90\xa0\xde\x2e\x4d\x8b\x63\x3b\x3c\xd0\xdb\xb1\x5d\xc1\x56\x0c\x6f\xc2\xe1\x4e\xb4\x13\xee\xe0\x86\xbe\x08\x9a\x1c\xd3\x65\x98\xc3\xa8\xa7\xcb\x97\x41\x93\x63\xba\x0c\x93\x63\xf6\x74\xf9\x53\xd0\x64\xb8\xcb\x26\x38\x49\x5d\xe4\xef\x2b\x22\xe8\x3e\x79\xcf\xf8\xf5\x9a\x1e\x18\xe2\x68\x2d\xc7\xe7\x18\xa2\x75\x48\x0e\x76\x0f\x37\xe1\xa3\x7a\xef\x9c\x99\x2f\xb1\x84\xd6\x29\xfa\x02\xcb\xf8\x82\xdd\x47\x07\xee\x33\xf7\x9d\x3a\x80\x87\x37\xa0\xb8\x3d\x1e\xfc\xa9\xf3\xf8\x79\x47\x48\x1d\xcf\xcf\x3b\x42\xd8\xf8\x73\xa3\x67\xdc\x3c\x79\xed\xa6\xf5\x9f\xf6\x13\xdf\x12\x43\xb5\xf2\x34\x26\xfc\xc2\x8e\xcf\x8f\xd1\xd4\x46\x55\x5f\x0c\x43\x0a\x46\x26\xab\x93\x9f\xcd\x17\x8d\xd5\xec\x1b\xf5\x83\x2e\x5b\xac\x5d\x9d\xd9\x2a\xaf\x95\x40\xa5\x73\x36\xd7\xc8\xf6\xb5\x23\x31\x84\x21\x92\x14\xaf\xc9\x4e\x7b\x85\x2c\xc9\xce\x7b\x85\x68\x4f\x11\xb2\xc6\x4b\xe8\xc9\x59\x03\x4c\x39\x5b\xa7\x74\x5c\x05\x8c\xbb\x70\x8c\x7b\x49\xce\xf0\x0d\x71\x69\xd1\xca\x67\x37\x4f\x4b\xcb\xbc\x6f\xf1\x86\x88\x79\xb9\xc0\xb7\xdd\xe9\x6c\x10\xbe\x27\xb7\x7a\x3a\xd7\xe4\x36\x72\x52\xb9\x46\xf9\x36\xf0\x5b\x89\xfc\x4e\xb6\xf8\x1a\x8d\x56\xf3\x72\x41\xee\x1b\x33\xf3\x95\x55\x4a\x16\xfd\x6a\x2b\xcd\x64\x82\xf0\x18\x7a\x99\x1d\xa5\x7a\x42\xb8\x4f\xcd\x6b\x8a\x21\xa1\xa3\x95\x58\x26\xdf\xf6\x01\xc5\x55\x98\x68\xfc\x4b\x68\xab\xf0\x31\x6a\xaa\x50\x4f\xe5\x26\x99\x66\xdd\xe7\x9e\x6b\x87\x53\x9b\x79\xd9\x20\x43\x36\xb1\x03\x28\x2b\x97\x15\x85\xd4\xa0\x08\x8c\x0f\x47\x99\x08\x4c\x74\x3e\x66\x81\x02\x79\xd0\x2c\x20\x74\xdd\xa0\x41\x93\x00\x0e\x24\x03\xb1\x98\x4c\x72\x06\x76\x00\x93\x04\x1a\xb3\x43\xca\xff\x94\x43\x4e\xcb\x8c\x34\x60\x1d\x90\xa0\xaf\xd2\x29\xbf\xa6\xac\x24\x2d\xd0\x48\xc8\xdd\x35\x60\x87\xa2\x2d\xe5\xdb\x64\x72\x92\x9f\x61\x76\xb4\xbf\x00\xd2\xee\x8b\xf2\x08\x73\x9d\xd1\x53\x2b\x89\xc7\xbb\xd8\xb7\xe7\x6b\xd1\xd6\x63\x4a\x10\x0b\x32\x00\xc1\x90\x98\xa6\xb4\xed\x1a\x59\x3f\xdd\xce\x70\xac\x59\x41\x97\x9c\xfa\x05\xd6\x85\x79\xb1\xb0\xb1\x53\xd0\xd7\x0e\x1e\x8d\x3a\x2e\xe9\xba\x2b\x54\x13\x96\x72\x58\xbb\x70\x36\x87\x1e\xf0\xe5\x4c\x27\x12\xde\xe9\xd0\x51\x8a\x85\xb5\x9b\x16\xf5\xcd\x4c\xe2\x76\x61\xeb\x19\x6b\xd0\x2c\x6d\xc8\xb0\x3d\x79\x9b\x79\xe8\xcc\xca\x8c\x4f\xea\x49\x84\xe0\x3b\x84\xd4\x7d\x13\x5c\x03\x3b\x77\x0d\x24\x17\xe4\x32\x6e\xac\xc9\x19\xdc\x39\xe6\x92\x58\x3f\x5b\x3e\x5d\xdb\x4b\x62\x45\x76\xf3\xf5\x62\x54\xcf\xd7\x81\xd1\xe5\x00\x00\x56\x8f\x00\x80\x8e\xa5\xb1\x33\xd1\xd7\xd5\x2e\x7d\x5d\x91\xdd\xbc\x54\x33\x29\xfb\xcc\x3f\x66\xf8\x2d\x6a\x2a\xaf\x3d\xd2\x39\xbe\x2d\xf2\x7c\xc7\xf8\x47\x87\x34\x80\x26\xd2\x96\x5e\x08\xac\x51\xf0\x64\xbe\x31\x58\x73\x1b\x3c\x79\x9a\x57\xa4\xda\xef\x1f\x1a\x64\xea\x34\x3c\x98\xe2\xfb\xb3\xdb\xa6\xa9\xac\xc5\xb2\xb2\x36\xca\x47\x99\x8f\x44\x8f\xb1\x28\x52\x66\x1c\x38\x65\x86\x1c\x8f\x7a\xf5\x8b\x87\x0f\x1d\x3d\x21\x24\xf7\x54\xfa\x98\xe3\x86\x42\xe8\x69\x8a\x2d\x2d\xc5\xc6\x36\x43\x99\x4b\xe1\x3f\x78\x0f\xa7\x17\x85\x43\xcf\x5c\x7d\x89\x59\xaf\x74\xb0\x15\x38\x77\xe8\x31\xe3\x63\x86\x04\x49\x46\x07\x55\x98\x46\x57\x0b\x57\x13\x1d\xf6\xc4\xaa\x90\x4f\x4e\xdd\xbe\xb5\x2a\x97\x94\xfa\xa0\x83\x56\xb7\x9b\x38\x16\x45\x61\x8b\x29\x8d\xa8\x0d\xbf\x73\x1e\x00\x8e\x2f\x90\x0e\x24\xf2\x6b\xe9\x9a\x84\x5c\x12\x88\x2e\x88\xac\x53\xfd\x64\x22\x74\x3e\xa0\x5c\x12\xf5\x17\xd2\xb1\x51\xb9\x24\x26\xce\xc8\xbb\x6a\x1a\x07\x4e\xa9\xcb\x5a\xea\x54\x4c\x91\x15\x23\x61\x93\x1a\x1e\xfe\x44\xee\xf7\x27\x0a\x2b\xf6\x7b\xa8\xbf\xa3\xfe\x0c\xc3\x4f\x2e\x37\xbb\x5a\x7e\x7a\xf7\x6a\xaa\x12\x56\x77\x62\xb2\x10\x46\xbd\xa7\xd5\xff\xbd\xd1\xa2\x10\x8c\x54\x52\x49\xc5\x86\xf1\xe8\xd4\x81\xa1\x52\x44\x71\x49\x51\xa1\x8c\x78\x19\x50\x35\x2f\x61\x02\x82\x2a\x73\xd9\xa6\xe0\xf7\x1f\x2a\x45\xbc\x15\x55\xe7\xfb\xbd\x79\x62\xe9\x3c\xef\x31\x02\xa6\xee\x54\x45\xc9\x26\x13\x39\x75\x91\x5d\xde\xa6\xc1\x4a\xa8\x41\xc1\x87\xf9\x40\xc2\x5c\xba\x8e\x7e\xfe\x4d\x82\x90\x35\xed\x5a\x06\xc1\x90\x22\x6d\xda\xae\x21\x1a\x03\x5d\xa4\xee\xdd\x8b\xa0\xdf\x30\xe8\x57\x09\x76\xb3\xd4\xf5\x17\xb4\x0f\xcd\x39\xcc\x12\x5f\xf7\xf6\x0d\x97\x15\x5c\x41\x5d\xf3\x65\x94\x37\xc5\xd5\x94\x77\x96\x4b\xcc\x11\x3a\xd2\x10\xda\x6f\xfb\x0c\x4d\xa4\xf8\x1f\x66\xe6\x4c\x91\xac\x47\x18\x3f\xbf\x8c\xc5\x33\xb6\x77\x62\xc5\xad\x82\x59\xe3\x8b\x1a\xcd\xfa\x4c\x96\x38\x62\x9f\x18\xba\x90\xf3\x4a\x87\x42\xcf\xe0\x2f\xf6\x4b\x02\xab\xff\x51\x76\x4a\x1f\x95\xdc\x36\x58\xfe\x93\x8c\x91\x58\xc3\x2e\x32\xd4\xb6\x40\x14\x6a\x9c\x9c\x00\x01\x0c\x61\x1b\x42\x6c\x95\x8b\x80\xb7\x10\xba\xe4\x55\x90\x59\x50\xda\x62\xbc\x63\x9b\xe7\x1c\x1e\x62\xee\x85\x1d\x9d\xae\x38\x09\xfc\x56\xd0\xd9\x64\xe2\x45\x42\x73\x01\xaa\x3b\x73\xaa\x93\xdc\xc3\x0d\x0e\xb2\x95\xfe\x0d\x3c\x36\xa4\x06\xbe\x41\xb9\x6d\xe4\x92\x22\x0f\xa9\x1a\x40\xdb\x23\x0f\xf9\xce\x49\x45\xe8\x0e\xf9\xce\x49\x9d\xc6\xd5\x43\x68\x2e\xd5\x05\x2f\xc0\x47\x6a\x2e\x1d\x13\x21\x4c\x9a\x2b\x33\x6c\x1f\xff\xd7\x1e\xb9\xc5\xfc\xfd\xc2\xc1\x21\x31\xf4\x11\x4e\x35\xf4\x58\xe7\x19\xd7\x50\xb1\xf5\x3d\x0d\x42\xc2\x3a\xc4\x55\xbc\xbb\xe3\x54\xd7\x19\x40\xd3\x75\x55\x7d\xdc\x6d\xf3\xcc\x7d\x3b\xcb\x4e\x03\xa9\x3e\x76\x21\x3f\xc6\x0e\x2d\x68\x2d\x3f\xb7\xfb\xf8\x97\x30\x4f\xe3\xea\x97\x1a\xa8\x7b\x3f\x48\x05\x5f\x64\xf8\xc1\x97\x78\x9a\x9d\x9c\xf5\x24\x56\xaa\x92\x91\x1b\x4d\x9f\x39\xbc\x48\xf8\xbb\x6b\x34\xe9\xa5\x43\xad\x5c\xd2\x29\xe4\x47\xa7\x99\xfa\x26\x0b\xd5\xc6\x40\x02\x06\x03\x5a\xb1\x95\x44\xe7\x8b\x58\x69\x5c\x90\xc8\x73\x19\xd7\xa4\xeb\xab\x1c\xa7\x7b\xdf\x14\x1f\xa9\x51\xef\xf6\x64\xb3\xd3\xc2\xd2\x8e\xb0\x40\xf7\x1d\x89\xea\x90\x8a\x56\xcd\x92\xe3\x02\xd7\x3d\x1a\xe7\xa7\x79\xa5\xdd\x53\xc1\xa3\x79\x8d\xf0\x52\x0b\x2f\x55\x5a\xe3\x2b\xf0\x12\x08\x4b\x15\x02\xa6\x33\x6a\x52\x5b\x6f\x5c\x56\x70\x4d\x38\x94\x66\xcb\xcf\x70\xf5\x08\x2d\x19\x64\xc5\xd0\x37\x59\xa8\x55\x3f\xa0\x2b\x1b\xb5\xdc\xcb\x77\x08\xb8\xa2\x36\xf4\x77\x7a\x4b\x36\xbe\x99\x63\x8f\x8b\x40\x53\x5e\xdb\x8c\x1b\x47\x98\x12\x2a\xec\x72\xc2\xf6\x99\x12\x76\xbd\xa6\x84\xdd\x64\x92\xeb\x8a\x8f\x64\xe7\x1d\x7e\xd6\x51\x3a\x41\x81\xf0\x92\x9c\x41\x98\xae\x51\xa0\x2c\x9f\xad\x9e\x2e\xad\x02\xa5\x24\xeb\xf9\x72\x81\x6f\x48\x89\xb7\xe4\xe4\x7c\x94\x5d\x2a\x6e\xba\x9c\x2e\x6f\x0a\xf1\x5c\xe6\x67\x0a\x10\x5b\x72\x72\xa6\x5a\x4c\xeb\xdd\x55\x2d\x45\x7e\x6e\x34\x9d\x9b\x61\xd8\xde\x98\xe4\xf1\x11\x64\x37\xc8\xea\x4f\x4e\xb6\x86\xc9\x60\xf5\x0f\x5a\xe6\x30\x9c\xd2\x06\x4b\x84\xef\xc1\x0a\x31\x32\xf9\xdf\x4e\x08\xb9\x47\x0a\x1b\x6e\xf7\xfb\xd8\xcf\xfa\xde\xf4\x77\x8d\xaf\xf0\x65\xdb\x37\xda\x78\x5b\xe3\x0d\xbe\xc7\x25\xc2\x77\xe4\x52\x63\xf6\x2b\x72\x19\x19\x2f\x5e\xa1\xfc\x9a\xd4\x69\x54\xbe\xc6\xaf\x60\x1d\x05\xba\x4b\x57\xc2\xd5\x57\xc6\xed\x64\x02\xfa\x5c\xaf\x62\x85\x72\x0e\x8a\x97\x1a\xdd\x4e\x26\x27\x7c\x32\x39\xa9\x61\xf4\xfd\x5e\x5e\xe8\xbf\x08\x9d\xd5\xad\x08\x5e\x5d\x8b\xd9\xea\xf7\x6e\x91\x69\x78\xe7\x1e\xdd\xa1\xfc\xaa\x6f\xaa\x57\xf8\xce\xd8\x7f\xd4\x9c\xde\xe1\xf7\x6d\x78\xa4\xce\xfd\x3d\x2e\xb1\x04\x06\x05\xe1\x9f\xc9\x7b\x0d\xa0\xe7\xe4\xbd\x07\x90\x99\xc3\xcf\xf8\xf9\x64\x92\xbf\xeb\x1b\xfc\x1d\x7e\x8e\x1a\x97\x9f\xb8\x6e\x70\xb4\xad\x3d\xd1\x0e\xbd\xde\xd0\x12\x41\x6a\x02\x9f\x0c\xe6\x60\x34\x46\x92\xa2\xfa\xba\xa4\x90\xe2\x3d\x4a\x20\xd4\x87\xb6\x3c\x85\xb6\x0c\xf9\xba\x40\x1b\xff\x10\x77\x69\x44\xe8\xbd\x38\x6a\x13\x69\x50\xdb\x0c\xa0\x11\x66\x24\x24\x24\x15\xe4\x5c\xc3\x35\x61\x36\x32\x9c\x05\x14\x59\x04\x14\x19\x22\xbf\x41\x6b\xd3\x13\xfb\x2d\xf1\x0e\x14\x6d\x4d\x10\x94\xf2\xe5\xfc\xd8\x13\x0a\x8a\x96\x1d\x76\xc0\x4b\xf9\x38\x21\x9d\xce\x07\xdd\x0b\xc3\x4c\x2f\x26\x66\x22\x16\xe1\x1f\xe3\x6c\x3f\xee\x4b\x6c\x71\x8c\x38\xd3\x95\xeb\x70\x94\x7a\xaa\x2d\x2a\x72\x6c\x6a\x0f\x46\x09\x96\x3a\x5e\xc1\x91\x9c\x5a\x29\x39\x95\x39\x39\x95\xd9\xc4\x4b\xed\x19\x87\xc8\xf9\x28\xc3\x4f\x77\x05\x62\x1a\x2a\xf2\xa1\xf0\x68\x5b\x95\x8f\x0b\x52\xa5\x84\x65\x5c\x0f\xaf\xbf\x23\x53\x28\xf2\x1b\x88\x14\x6c\x5e\x2f\xbc\x58\x76\xe2\xf4\x92\x47\xdd\xf8\xea\x63\xcb\x44\x81\x45\x57\x1b\xc2\x76\x4d\x73\x34\x7e\x36\xd6\xb1\xb9\x08\x38\xfe\x5a\x11\xee\x03\x1c\xbf\x13\x1d\x8e\x71\x3f\xed\xe5\xca\xbf\x88\xbb\xa8\x20\xd2\x47\x32\x07\xcb\x12\xbd\x82\x4c\x4b\xb6\x08\x17\x24\xe8\xdf\x77\x0c\xa4\x91\xb6\x44\xd3\x11\x30\x5a\x8b\x71\xd1\xf1\xe1\xe9\x33\xb1\xe7\xfb\xbd\x0e\x46\xd7\xd1\xde\x1d\xb5\x34\x85\xd4\x08\xf7\x9b\xab\x6a\x1d\x3d\x74\x39\x86\x73\x34\xcb\xb2\x53\xda\xb8\x31\x58\x50\x28\xdf\x7b\x19\x24\x3a\x96\xc4\x97\xc0\x31\xa9\x01\x5c\x82\x05\x87\x7e\x74\xbf\xb7\xc1\xff\xfb\x7d\x2e\x89\x1a\x0b\x61\xd9\x24\x03\xfe\xfb\x23\x3c\x24\x91\xae\x32\xa3\x4b\xcd\x3a\xbd\x29\xea\x77\x77\xdc\xee\xee\x74\x59\xac\xd7\xb9\x54\xc7\x04\x76\x29\x43\x17\xce\xd9\x77\x26\x8d\xbc\x93\xed\xb8\xde\xb7\xd2\xcf\xf1\x3d\x80\xe7\x42\xff\x97\x20\x74\xd9\xe5\x65\x76\x4a\x4f\xdf\x16\xf2\x66\xba\x5a\x57\x95\xc8\xe1\x4f\x51\xf0\xb2\xda\xe4\xe8\x7f\xbe\x2c\x24\x9d\xf2\xea\x2e\x47\xe8\x54\xb5\x6d\xfc\x86\xd5\x41\x2f\x1d\x08\xfa\xfc\x0d\xdf\xe8\xa4\x06\x3b\xb0\x48\xfe\x85\x16\x1f\xdf\x16\x5b\x93\x93\xa4\x13\xba\x98\x5a\xc1\x1d\xe3\x65\x75\x07\x66\xda\xc4\xdb\xd7\x45\x2d\xbf\xad\x2a\x69\xac\xfa\x0f\xd7\x54\xfe\x08\x73\xff\xb3\x42\xff\x3a\x4e\x8e\x2b\xee\xed\x6e\xd8\xcf\xa6\x06\x71\xf3\x6c\x29\xee\xb7\xb2\xca\x90\x59\xfa\x6b\xb6\x5e\x43\x4a\x5b\x8a\x9a\x65\x21\x97\x37\x39\x94\xf2\x11\xd5\xdd\x58\xad\x03\xb4\x49\xf9\xaf\x40\xaf\x33\x0e\x1d\x42\x15\xd7\xa1\x3a\xbf\xaa\x2a\x39\x36\x9d\xd7\xe3\xfb\x6a\x37\x96\xd5\xb8\x28\xcb\xb1\xbc\xa1\x63\x3b\xd8\x78\x5b\x2c\x3f\x16\xd7\x54\xbd\xcb\x56\xe6\xab\x97\x74\x4b\x79\x49\xf9\x92\xd1\x3a\x53\xdd\xdd\x57\x3b\x61\x5b\x4e\xff\x56\x57\xfc\x57\x8a\xed\x02\x96\x25\x20\x91\x1a\x4c\x53\xdd\xb3\xf5\x71\x88\x1e\xf6\x7c\xb1\xa9\x5f\xc0\xeb\xc9\x24\xb3\xc0\xf2\xfb\xd8\x6a\x33\x6d\x81\xb7\x35\x8e\x6d\x36\x6a\x03\x2a\xf3\x64\x64\x36\x7e\x51\x70\x5e\xc9\xf1\x8a\xf1\x72\x5c\x8c\x6f\x8b\x35\x2b\xc7\x77\xc5\xbd\x02\x82\x4d\x92\x37\x5e\x57\xcb\x62\x3d\xf6\xb5\x67\xeb\x0c\x35\xb9\x17\x78\x96\x78\x85\x4b\x7c\x83\xb7\x64\xbe\xc0\x1b\x72\xf6\x74\xf3\xec\xeb\xdf\xfe\xee\xe9\xe9\xe9\x06\x6d\xe7\x9b\x05\xc9\x37\xa7\x5f\xff\xf6\x77\xc8\x13\x82\xf3\xdf\x21\x2f\xcb\x78\x14\xbe\xb5\x98\xa7\x79\x0c\x92\x53\xc0\xd2\x9f\x18\x97\xbf\xd7\xfc\xdb\xf9\xef\x10\x5e\xb7\x97\xad\x58\x1e\x2b\x95\xf3\xf9\xef\x16\xe4\xfc\xb7\x13\xf5\xff\xfe\x77\xbf\xc1\x7c\xfe\xfb\x05\xf9\xdd\xaf\x27\xea\xff\xfd\xf9\xd7\xbf\xc7\xf3\x5c\x90\x2d\x9a\xe7\x92\x70\x34\x3f\x5b\x2c\xb0\x98\xcb\xf9\xb9\xf9\xff\x6b\xf3\xff\xaf\x17\x0b\x9c\x3d\xc9\xe0\xef\xdf\x98\x67\xbf\x0d\x9e\xfd\xce\x3c\xfb\x7f\x82\x67\xbf\x37\xcf\xfe\x57\xf0\xec\xdc\x0d\x60\x47\x38\xb7\x43\x9c\xff\xda\xfe\x61\x07\x38\xff\xed\x62\xb1\x98\xfe\xad\x62\x3c\xcf\x32\xe4\xc9\xd6\xbd\x89\x9b\xad\x73\x3a\x5d\xb3\xd2\x79\xcc\xc0\x2f\x93\x9a\x41\xeb\x8e\xb1\xd0\x86\x25\x2b\x03\xe4\x02\x5d\x84\x77\xc6\x6c\xcd\xca\x27\xd9\x69\x95\x4b\x74\x9a\x3d\xc9\x4e\xc5\xec\xd6\x14\x28\xbe\x8e\xc8\x81\x1b\xfa\xca\x13\xe8\x6b\x57\x9b\x2d\x2c\x6e\x42\x08\x01\x9f\x30\xf8\xfc\x0e\x5f\x43\xd2\x22\x75\x45\x46\x84\xf7\x32\x47\x0f\x30\xcc\x5d\x4f\x49\x6f\x9b\x29\x7b\x59\x2c\x6f\x28\x79\x58\xb3\xb2\x9e\x25\xf3\xe5\x43\xa6\xcc\xc4\x1b\xe3\x9e\xe5\xd2\x3a\xc6\x85\xad\xb5\xf3\x75\xfc\x6c\x55\x89\x6b\x2a\xe3\x67\xba\x2a\x6b\xf4\x08\x22\x34\xe2\x47\x6e\x8c\xd5\x7e\x7f\x1f\x8f\x70\xb3\xdf\x5f\xc6\xfd\x2f\xfd\x13\xdd\x7b\xe9\x1f\xe8\xbe\x2f\x1b\xbb\x85\x9d\xda\xd0\x72\x7a\x79\x69\x8b\xab\xd3\xb7\xd0\x3a\x22\xa0\x41\x2f\x74\xbf\xbf\x6c\xb0\x04\xa3\x82\xad\x7e\xd8\xad\x25\x6d\x7d\xb0\x5a\x9b\x77\x72\x8e\x70\x82\xe9\xde\x81\x95\x9c\x22\xa8\x0b\x65\x91\xce\x30\x2b\xdc\x20\x23\x66\xc4\xe8\x07\xc4\x45\xb0\x87\xea\x5d\x3d\x17\x8b\x99\xe1\x70\x62\x2b\x88\xcd\x55\x69\x2e\xca\xca\x25\x22\xa8\x6d\x15\x46\xd0\x3c\x81\x41\x7a\xbf\x2f\x26\x93\xda\x06\x36\xbd\xca\xc3\x41\x00\x1d\x70\x81\x02\x2d\x85\x80\xc4\xb2\x6b\x35\xfe\x5c\x2c\xac\x63\x01\x21\x84\xe9\x82\xc5\x3a\x93\x03\x34\x61\xa5\xe2\x44\x83\x16\x7a\x90\x65\x2b\x85\xa8\xf6\x21\x00\xbf\xfd\xd6\x40\x4b\xf5\x1f\xea\x10\xd7\xbf\x56\xbb\xb1\x36\x18\x8d\x15\x61\xd5\x15\x29\xe0\xa2\x79\xb6\x66\xe5\x37\xe3\x6a\x35\x2e\xc6\xed\x3d\xca\x74\xa2\x09\x12\xaf\x60\xb9\x30\x85\x3e\xa4\xab\x17\xa4\x97\x92\x33\xf2\x2e\xaf\x71\x81\x97\xae\x08\xa4\x07\x3b\x53\xff\x2d\x08\xc3\xba\x93\xe0\xe7\x65\xb1\x5e\xfb\x31\x6b\x5b\x51\x49\x47\x2e\xaa\xad\xd1\x0e\x76\x00\x1b\xf5\xf7\x82\x30\xaf\x61\x63\x8d\x42\xb0\x2d\xa5\x1f\x07\x10\xac\x25\x65\x26\xb0\x31\xa7\xda\xcf\x57\x82\x7e\x5f\x84\xae\xe1\xbf\xa0\xc7\x33\xe8\x51\x93\x04\xff\xe6\x75\x25\xbe\xa7\x77\xed\x2a\x72\xad\x78\xdd\xd4\x46\x63\x41\xde\x01\x26\xea\xc4\x4b\xc6\x36\x87\xa1\xa4\x71\x0a\x07\xad\xed\x2e\x9a\x6a\x78\x12\xf4\x1e\x08\xcc\x61\x4b\xa4\xfe\x33\xb9\x1d\x02\x0c\x32\x72\x1a\x46\x8c\xf4\x9e\xe5\xc0\xdf\x71\x00\x9a\x39\xd5\x69\xc2\x58\x89\x0b\xc2\xb5\xaf\x24\xae\x93\x0b\x31\xb9\xdf\xf0\x8e\xf4\xeb\x86\xd5\xf7\x4a\x84\x34\xee\x70\xe0\x88\x55\x06\x47\xa3\x98\x4c\x8a\x13\xb0\x61\x9a\x07\xdc\x1f\x5f\x8a\x8d\xc6\x57\xa1\x18\x5f\xc4\xb7\xc9\x09\x94\x33\x59\x37\xfa\x18\x0a\xe3\xa7\x59\xe5\x36\x21\x5d\x3c\x84\x36\x93\x2e\x09\x9c\x68\x00\xb0\xf9\xef\x84\x90\x9d\xf5\x93\x63\x06\xf4\x9d\x81\x56\x93\xc9\xaa\x49\x76\xa8\x0f\x76\xab\x4f\xe2\xfa\x2c\x61\x15\x4b\x58\x40\xd1\xed\xb7\x9c\x4c\x4a\x73\x62\x4e\xce\x9b\x14\x84\xb1\xc4\x45\xe7\xd0\xc2\xe2\x76\x41\xcd\x7d\x20\xeb\xed\x8d\xac\x73\xf5\xfd\x4e\xf5\x80\xdc\x96\xf6\xd8\x50\x15\x23\x00\x3b\x83\xa5\x03\xa4\xd5\xb6\xeb\xb4\xdf\x1e\xdb\x3d\x6d\x86\xec\x1b\x50\x0d\x57\x9d\xfc\x5c\x18\xd5\xa4\xbd\xe1\x10\x66\x27\x84\xe4\x05\x8c\x8c\xdc\x06\x17\x43\xf4\xd9\xee\xde\x5a\x43\x8c\x08\x47\x6d\x5c\x52\x5f\x4d\x70\x5c\xd1\x68\xc0\xff\x1e\x08\xf4\xe2\x65\x15\x02\x4e\x67\xff\x44\xb8\x20\x15\xa4\x98\x13\x33\x19\x9d\x4d\x7d\x3b\x77\xce\x49\xa1\xcb\x0a\xcf\xd9\x82\x54\x78\x60\x2d\xae\x0d\x1c\x67\x52\x01\x98\x2b\x35\xeb\x74\xc7\x7d\xb4\xe7\xc0\x99\x15\x49\x78\xda\x4d\x34\x50\xd4\x4e\xd1\xce\xd0\xae\xa8\x8b\xa2\xdc\x38\xaa\x41\x1a\x90\x22\xc0\x09\x6f\x05\xd6\xf4\x48\x9f\x11\xab\x60\x6a\xd3\x25\x9b\x16\x50\xa2\x51\xf7\x65\xbd\x85\x44\x7f\x1c\xb7\x98\x88\xdd\x54\x0f\x61\x18\x88\x88\x2d\xca\x03\xe4\x53\x50\x1b\xa8\x09\x09\x95\x3b\x9b\x56\x35\x94\x57\x21\xf5\xd3\xf5\x28\x5b\x5c\xa9\x80\xa3\xa4\x38\xc9\x24\x23\xd9\xf3\xb8\xb5\x36\xb0\xfe\x50\xa0\xd6\x8a\x28\xbb\xe1\xdf\x45\x1a\x39\xcc\xf4\x38\x42\xf5\x4a\x4d\x1a\x0d\xe7\x4f\xcd\x09\xc3\x3b\x60\x8b\x39\xce\x58\xfd\x84\x05\x57\x3e\x66\xbe\xcf\xf7\xf1\xf1\xe5\x0a\xd8\x8a\x09\xaa\x41\xf5\x0d\xec\xbf\xb0\x5c\x98\x0e\xd4\xa6\x6a\x3c\x86\x61\xe8\xa6\x2b\xe3\xbd\xfa\x79\x0b\x75\x87\xc7\x94\xc9\x1b\x2a\xc6\xac\x1c\x57\x62\xac\xa4\x3b\x59\x8d\xaf\xa8\x93\xf5\x8c\xae\xc0\x5d\xf3\x20\x35\x24\x46\x98\x85\xcf\xb4\x07\xef\xcf\x36\x03\xba\x92\xcd\x7e\x10\xd5\xcf\xf7\xd6\xb4\xab\x9f\xff\x20\xaa\x0d\xab\x29\xbc\x01\xeb\x30\x7e\xd8\x50\x59\xcc\xf4\xdb\x65\xb5\xd9\xee\x24\x2d\xa7\x82\x16\x65\x9d\x67\xcb\x8a\x4b\xca\x25\x98\xd3\x32\xd4\x20\xfc\x3c\xca\x38\x77\x4c\xff\x01\x8a\x7c\x8c\xdc\xe5\x9f\xbb\x5a\x2d\x5b\xfd\x8d\x99\xc3\x8f\xef\xff\xfc\x83\xed\x06\xf4\xa9\xeb\x5b\x9d\xf1\xa4\x09\x04\xb0\x1f\xa2\xae\x7e\xfe\x25\x5d\xfd\x18\x75\xf5\x51\x31\xbe\x37\x94\xf7\xe4\x05\x70\x84\xc4\x94\xa7\xd3\xa2\xda\x07\xfc\x02\xa4\x2d\x3d\xea\xe5\xb7\xae\x32\x6d\x3e\xcf\xd2\x2e\xc9\x19\xce\xea\x7b\xbe\x6c\x3f\x5b\x31\xce\xea\x1b\x5a\x66\x0b\x84\xdf\x92\xaf\xfe\xcf\x7f\x7c\x75\xa1\x84\xc4\xff\xf8\x2a\x0f\x12\x81\xc4\x19\x64\xfe\xe3\xab\x7c\xfa\x3f\xd1\x57\xf8\x6f\xbe\xf9\x57\x1e\xe4\x6f\xa2\x3a\x92\xad\x4c\x91\x3f\xa8\xa3\xcc\x25\xa4\x35\xa5\x69\x0b\x0c\x58\x7d\xb4\x4a\x5b\xb5\xd1\x7f\x4d\xb7\x15\xe3\x92\x0a\x9f\xa4\x34\x7e\x3e\xdd\x80\x3a\xe8\x2d\x1a\x89\x0b\x41\xc4\xfc\xeb\xc5\x0c\x52\x96\x76\xda\xd5\xb4\x10\xcb\x9b\xfc\x6f\xda\x6e\x9e\x5d\x15\x35\x55\x7c\x9e\x77\xee\x15\x0b\xc8\xe9\xab\xfe\x30\xb6\xc0\x69\x49\x65\xc1\xd6\xfb\x3d\x9d\x4a\x26\xd7\x14\xd9\x40\x76\xb7\xe4\x97\x81\x89\x06\xca\x2f\x49\x2a\x78\xb1\x06\x5b\x86\xfa\xac\xfd\x00\x29\x92\x66\xab\x22\x69\xde\xd2\x77\xf6\x7d\xbb\xe4\xc0\xd9\x53\xf1\x4c\x26\x12\x52\x99\x02\x81\xde\x4b\x83\x84\x3f\xf6\xfb\x93\x73\x88\x35\xd1\x82\x23\xbc\x3f\x39\xc3\x19\x68\xa0\x33\xc6\xc7\x7c\x32\xc9\xf9\xf4\x4e\x30\x69\xde\xf5\x3b\x88\x80\xbf\x39\xe6\xa8\xf1\xb3\xfc\x2e\x42\xe1\x24\xe2\xc6\x70\x08\x97\xdc\x2a\x3c\xd8\x98\x6a\xe0\xb9\x44\x4d\x84\x0a\x74\xba\xa5\xbc\x64\xfc\x9a\x64\xe6\x8f\x0c\xd3\xe9\x6a\xb7\x5e\xb1\xf5\x9a\x96\x24\x73\x7f\x66\x50\x2f\xca\x94\x58\xcf\xec\x5f\x59\x83\xf2\x0f\xfb\x7d\xfe\x81\x3c\xd8\xca\x85\xaf\x7b\x74\x0f\x51\xd1\x78\x50\xaa\x13\xd1\xad\x32\x17\xd6\xe3\xbf\x4a\x95\xc1\x4a\x16\x0b\x6b\x7f\xf0\xa6\x1c\x6a\x76\x63\xc3\x87\x8f\xeb\xd5\x34\x1f\xee\x33\xda\x89\x58\x8f\xb1\x6c\xd7\x33\x8c\x5e\xfb\x7b\x2a\x7a\xec\xac\x3a\xad\xc6\xf1\x4f\x6d\x00\x8d\x9e\x15\x65\xb1\x95\x54\xd8\xd2\xb3\x81\xe5\x83\x93\xd4\x54\x45\xeb\x01\xb8\xfe\xe8\x23\xad\xae\xc6\xd6\x64\x8c\x2c\xc2\xa7\x37\x85\x29\xbc\x6c\x6b\xb3\x04\x05\xf2\xed\x54\xa5\xab\xbd\xdc\x9a\x14\x6d\x3d\x88\x57\xe3\x92\x3e\xb6\x21\xc1\xc3\xb2\xb8\xe1\x0c\xf2\x3e\x40\xbf\xcc\x39\x9a\x76\x1e\xe7\x48\x53\x78\xc3\xd6\xa6\x34\x42\x0c\xdc\x94\x49\x9b\x6a\xa6\xaa\xae\xa3\x48\x16\x6d\x15\x05\x66\x61\xe6\xa7\xae\x89\x38\x72\xc0\x7e\xb0\xca\xb5\xa0\x6f\xd5\x43\x77\x59\x1d\x03\x42\xaa\x1e\xa0\x62\x6a\x7a\xe0\xe2\x95\x4c\x3e\x69\x5f\x54\x36\xb5\xe7\x33\x2c\xc8\x19\xe6\xc4\x93\xca\x67\xdc\x93\x4b\xa6\xc9\x25\x55\x0c\x7b\x4f\x07\x73\xb6\x30\xe9\xaa\x51\x90\xab\x8f\x79\x7b\x6f\x4a\xea\x86\x2d\x3a\xc9\x75\x04\x05\x48\xd4\x55\x0a\x91\x75\x3c\x02\xac\xda\xe8\x6e\x82\xdd\x0a\x09\x43\xbc\x5f\xe1\x9b\x39\x5d\x68\x7d\x58\xff\xf7\x71\x35\xc6\x74\x4f\x51\x1b\xd5\x67\x15\x53\xe3\xb7\x54\x16\xe0\xe2\x76\x13\x17\x7a\x06\xfd\x87\x75\x72\xff\x4e\x1b\x63\x35\xd9\x86\x2a\xc1\x90\x38\x7f\x32\xd1\x71\xc5\xce\x6b\x97\xd4\x17\xd5\xc0\x09\xae\x75\x3e\x6e\x1c\x5a\x95\x75\x0f\x3a\x03\xfd\x64\x72\xa2\x2b\xcc\x2b\x09\xa2\xcc\xd1\x05\xbb\x50\xa2\xcd\x4c\x18\x5c\x7a\xcf\x8b\x6d\x7d\x53\x49\x93\xd7\x1b\x61\x76\x91\x84\x1b\xe1\xb3\x03\x50\x20\x1c\x73\xb5\xd7\x86\x9a\xa6\x77\x3a\xdc\xe7\xda\x57\x29\xf3\x14\x78\x4e\x17\x6e\xfb\x53\x64\xdc\x6e\xe1\x99\xd6\x31\x04\x5b\xe8\xfb\xf0\x6a\x51\xbb\xd9\xc9\x96\xc9\xad\xae\xa2\x18\x84\x04\x02\xe2\x9a\xe4\xc5\x63\xf6\x1b\x27\x76\xda\xe9\xb7\x6a\xbb\x55\x50\xdb\x5d\xff\x1a\x72\xce\x2a\x06\x50\x81\xa2\x91\x0c\xb7\x7a\xbf\xcf\xf9\x85\xb0\x1c\x18\x2b\xd1\xcc\x56\x8c\xef\xec\x3d\xd2\xfe\xcb\xfc\x22\xb1\x1d\x44\xcc\x06\xb7\x83\x08\x2c\xd4\xbe\x47\xfe\xde\xad\xdd\x87\x0e\x4c\x4a\xae\xd8\x2f\x5c\x47\xd9\xb2\x8e\xdb\xf6\x81\x0e\x12\x91\xba\xcc\xbb\xc5\xf4\x2b\x3d\x93\x59\x73\xa3\x6d\x0b\x63\x53\xcc\xbe\xb5\xcb\xf3\x1a\x81\xbb\xc7\x9d\x37\x85\x39\xa1\x00\xe2\x4a\xaf\x0e\x14\xf9\xf5\xea\xb4\x0e\xff\x14\xd3\xa4\xe0\x45\x58\x55\x5a\xcf\x10\xcb\xee\xe7\x43\x95\x65\xbb\x37\x84\xc9\x57\xdc\x57\x8a\xbe\x05\x39\x1b\x1a\x95\xf2\xfa\x0f\xd2\x02\x2b\x21\x21\x0c\x2c\x14\x5a\x28\x73\x80\x81\x6c\xef\x8f\x00\x2e\x4c\xe0\xc5\xba\xa8\x7d\x59\x5b\x9d\xf1\xad\xdd\x47\x47\xb2\x87\x66\x63\x56\x8f\x2b\xbe\xbe\x1f\x17\xb7\x05\x5b\x2b\x46\x7e\x7c\x77\x43\xf9\x78\xb9\xab\x65\xb5\x19\x43\xef\xe3\xa5\xea\x7e\xbc\x5a\xe9\xc6\x19\xd2\x45\x67\xbf\x6f\x17\x9d\xe5\xf0\x0c\xf3\x76\xd1\xd9\xff\x52\x88\xe8\xaf\x62\xe7\x81\x63\x6b\x63\x8b\x20\xac\x59\x7e\x73\x7e\x21\x9f\x9c\xcf\xce\x10\xe6\xe4\xfc\x29\x7f\x26\xa1\x5e\xb5\x98\xf3\x27\xe7\x0b\xff\x69\xa0\xf3\xed\x82\xc9\xa6\x31\x31\x7c\xa3\x08\xc5\x8e\x6f\x23\x95\xcf\x74\xc5\x78\xb1\x5e\xdf\x07\x5b\x85\x1e\x24\x10\x0f\x31\xbd\xac\x77\x57\xf5\x52\xb0\x2b\x2a\xec\x54\xc9\x19\xf8\x75\x3a\xfd\xa2\xeb\xf6\x27\x7f\xd6\x4e\xe2\xa8\x53\x45\x92\x40\x2b\x45\xcb\x4e\xd2\x7f\xf7\x0e\x34\x27\x81\x7c\xff\xc7\x56\x32\xe9\x6f\xf3\x40\x39\xe0\x95\x02\x02\xb5\xe5\xfe\x20\x38\x02\x21\x9c\x78\xfe\x93\x2e\xc2\xee\x87\xfa\x73\x1c\x20\xe0\x40\xd8\x4d\xb0\xe2\x5b\x35\x7a\x36\x62\xc7\xa7\x57\x4e\x6f\xe0\xf7\xfb\xef\xff\xca\x02\xa8\x1a\xf9\x2f\x7d\x32\x9c\x21\xb5\x9e\x27\xa7\x56\xfe\x29\x3f\x54\x5a\xa0\xe8\x97\x91\xe0\xab\x5a\xdd\x64\x56\x83\x2c\x0b\xf0\xb8\x05\xf1\xfc\x20\x47\x7e\x4d\x65\x3f\xe5\x76\xe3\x43\x8c\xad\x2e\xfa\x01\xcc\x46\xe2\x13\x1b\xac\x1a\x7e\xa3\x2f\x08\x99\xba\x57\xa2\x76\x44\x02\x53\x5f\x96\xed\x96\x4e\x0a\xf1\xad\xe5\x82\xd0\x78\xed\xce\xf7\x19\x33\x53\x71\xb0\xd5\x4d\xa4\x4c\x0e\x7b\x0a\x33\x6e\xd8\xce\xac\xba\x98\xa2\xa7\xb6\x7a\x4c\xf4\xde\x68\x8c\x05\x3e\xd7\x72\x44\xc5\x65\xc1\x78\x0a\x22\xf0\x79\x4f\xdf\xf0\xe9\x9a\x16\xa2\x2b\x76\x84\x5f\x8c\x5a\x7b\x1c\x88\x16\x67\x4f\xe5\x33\xeb\x16\xf5\x54\x2a\xec\xa6\x73\xb9\x98\xee\xf8\xba\x2a\x4a\x77\xf1\xa5\x70\xa2\x75\xb3\xea\x2e\x86\x89\xbf\x99\xbf\x6e\xea\x28\xbe\x7e\x7a\xcc\x97\xfe\x13\x33\x93\x03\x1f\x99\x56\xfb\x7d\xde\x5a\x40\xaa\xa6\xb9\xbe\x17\xfe\x9e\xb8\x17\xfe\xee\xef\x05\xfc\x87\x03\xde\x1b\x9b\x62\x9b\xea\x7d\xc8\xbf\x41\x50\x29\x18\xbd\xa5\xbd\xc6\xd9\x4d\xb1\x55\xbc\x73\xda\xe9\x24\x6c\xa2\x1d\x58\x72\x9d\x76\x05\xcb\x2e\x6a\xd8\x7d\xa7\xfe\x33\x1c\x8b\x97\xd4\x66\x82\x8f\x49\x1e\x9d\x2b\x72\xb7\xd0\x3d\x02\x27\x04\xd0\xf8\x6b\xe8\x32\x83\xff\x94\x76\xa0\xf9\xef\x7e\x3d\x7f\x3d\xec\x40\xf3\xef\x6a\x0a\x7f\x8d\x7c\x68\xd4\xb7\xff\xde\x4f\xf5\x3c\xa8\x34\x9e\x6b\xfd\x95\x27\x7e\x94\x4b\x26\xef\xdf\x16\xdb\x58\xf5\xc3\xe9\xdd\xfa\x5e\xdb\x9d\xca\x1e\xad\xcf\x0b\x70\xc5\x19\x7a\x77\xe5\xac\x3a\xad\x37\x1d\xaf\x95\x28\x99\x45\x10\x8b\x45\x47\x8a\xc1\x87\x10\x52\x56\x5e\xe8\xa8\x78\x25\xf6\xa8\x5f\x74\x26\x66\xda\xe2\x05\xef\xb5\x05\x33\xb7\x35\x49\xa1\x95\xfa\x43\xb5\xb3\x79\x68\xd5\x53\x76\x21\x66\x50\x81\x54\xdf\x05\x6f\x8b\x2d\x24\xff\x71\xfe\x25\x05\xec\x02\xd3\xbe\x2b\x3b\xf3\x13\xec\x77\x36\x31\xd8\x6e\x32\xa9\x43\x25\xce\xce\xff\xe8\xfa\x7a\xbc\x2e\xd8\x9a\x82\x45\x45\xdb\x47\xc1\xcd\xe3\x57\xac\xfc\xd5\x78\x55\x09\xf8\xd1\xb6\xeb\x8d\x7f\x95\x9d\xd2\xd3\xec\x57\xea\x9b\x5f\x65\xa7\x6a\xad\xa7\xd9\xaf\xf0\xf8\x8a\x2e\x8b\x1d\x14\x30\x2e\xe4\x98\x95\x8a\x63\x2b\xd6\x82\x16\xe5\xbd\x92\x00\xd5\x9b\xab\x7b\xf5\x81\x38\xcd\x7e\xe5\xf3\x2b\xec\x94\xe0\xad\x29\x76\xbe\xc3\x7a\x1d\x36\x0d\x75\xad\xcd\xb3\x84\x90\x9d\x92\xa9\xa2\x87\x27\xf0\xb0\x86\x98\x98\x70\xad\xf1\x72\x27\x13\x05\x10\x37\x40\x8d\x0d\xdc\xf2\x9a\xec\x90\x42\x2f\x70\x18\xc1\x85\xba\x77\xdc\x5b\x84\x19\x30\xc6\x1d\x0c\x54\x60\xfb\xc3\x10\x31\xd0\x01\x9e\x6d\x09\xdc\x65\x06\xb1\xd1\x4a\x2d\x64\x1b\xb2\xa1\xca\x28\x23\xd4\x63\xbe\xa4\xc8\x24\x6d\x01\x87\x97\x5c\x78\x07\xc3\x8b\x1c\x74\x7c\xef\x97\x37\xb4\xdc\xad\x69\x69\x38\xc1\x1c\x4d\x26\x7c\xba\x2c\xf8\x92\xae\xdd\x23\xcc\x6d\x05\xfc\xab\x1d\x5b\x97\xb9\xb0\xae\x2f\xaa\xd3\x5e\xa6\x21\x81\xb9\x9a\x76\x00\x7c\x8d\xe7\xcc\xb7\xf7\x56\x82\x4e\xd0\xce\xf7\xe6\x3b\xb0\x66\x63\xfd\x5d\x64\xff\x36\xb1\xb4\x90\xd7\x4c\xd1\x1b\xbb\x7e\x92\x8e\x39\x08\x4c\x7f\xa0\x1e\xd0\x16\x41\xab\x07\x79\x0c\x5c\x7d\xa9\x7d\x80\x2b\x73\x4e\x1d\x84\x90\xaa\x7b\xbe\x8c\x73\x6a\x4d\x25\x1c\x26\x56\x8e\xa1\xd6\xe3\xb8\xe2\xf0\x5b\x0b\x8c\x63\x38\x51\x33\x38\x1b\xe3\xa2\x56\x6f\x04\x55\x07\x88\x57\xe3\x7a\xb7\xbc\xb1\xcd\x98\xfe\x48\xdb\xc2\x33\xab\xd1\xaa\xb4\x37\x4b\x10\x99\x11\x4c\xc9\xd8\x68\x4e\xa0\x4a\x9e\x9b\xf6\xb7\xf7\x6f\x14\xbe\x4b\xe7\xb3\xa5\xfd\xa6\x92\xc0\x48\xbb\xf1\xe4\x0c\x07\x30\x95\x0d\xc2\x95\xda\x86\x37\xa5\xda\x12\x8b\x20\x6a\x98\x1e\x7d\x54\x72\xa8\x94\x6b\x56\x1e\x0f\x63\xf3\xca\x09\x62\x94\x26\x11\xae\x69\x34\x03\x9f\x06\xa3\x57\x9b\x4c\x44\x1f\xb2\xe7\xc2\x9a\xed\xc1\x31\x5b\xdd\x9d\x9a\xa9\x06\xef\x0d\xc0\xf7\x7e\xb6\x58\x1f\x07\xe7\xb7\x75\xd9\x6e\xde\xef\xa7\x68\xdd\xe1\x40\x35\x14\xef\x48\x80\xf3\xe6\xdc\xf7\x40\x6a\x24\x88\xee\xe6\x82\x0f\xba\x8c\xe5\x14\xcd\xa8\xa9\xd6\xa5\x90\xf2\x3d\xcd\xfd\x2d\x8b\x45\x7c\xa4\x52\xa7\x56\xd1\x45\x86\x85\xf1\x94\x6c\xa0\x22\x47\x8b\xbb\x8e\xd8\x9d\xb8\x8f\x20\x0b\xbf\x76\xec\xb5\x73\x04\x7f\x2b\xdb\x17\x88\x93\x23\x9b\x23\xc7\x37\x1a\x25\x71\xa4\xc7\xf1\x85\xc3\x36\x04\xc3\x0f\x49\x34\x8e\xa4\x3b\xf6\x0d\xd8\x71\x19\xf3\x15\x20\x21\xd4\x83\x5d\x85\xcd\xdb\x7d\xb5\xf8\x37\x6a\x6f\x02\x08\x40\xe9\xce\xc4\x30\x67\xb3\x14\x52\x5b\xc6\xad\xa5\xdd\xf8\xdf\xa1\xcd\x12\x02\x24\x74\xca\x31\xf3\xc7\xd4\xe4\x10\x83\x1b\xeb\xdf\xfa\x8d\x87\x86\x2e\x44\x9c\x57\x6c\xca\x32\x2e\x54\xde\x0a\x1a\xb1\x55\xc1\xe3\x97\x3a\xd3\xc1\xa0\x43\xb0\xe8\x50\x7d\xf4\x60\x11\x4b\xd2\xb8\xb2\xa1\x5b\xde\xff\xce\x9d\x3b\x8d\x56\xba\x22\x74\x91\xa9\x55\x66\x90\x87\xbe\x31\x59\x36\x3b\x92\x94\x53\xc5\xf9\x0f\x47\xbe\x4b\x88\xf4\x36\x40\xcb\xa9\xcd\xc7\x66\xe1\x86\x29\xa1\x93\x89\x0d\x45\x39\x09\x03\x82\x6e\x04\x5d\xcd\x28\xc2\xd4\x4a\xc4\xda\xe9\xa3\x2b\xc8\x69\xa3\x6b\xef\x1c\x20\xb7\x92\xfa\x32\x91\x23\xc4\xbe\x80\x89\x41\x82\x12\x4c\x0d\x06\xa8\xbe\xff\xdf\xee\x11\xc4\x22\x8c\x7e\x8a\x7d\xcb\x2c\xdd\xac\x08\x35\xb1\x3f\x37\x4c\x47\x99\xeb\x4c\x52\x90\xb4\x8b\x30\x5c\x4d\x93\x86\x06\xc2\x71\xa5\xf9\x56\xde\x09\xd2\x33\x19\x88\xa6\xdb\x42\x50\x2e\x21\x8a\x4f\xa7\x18\x5e\x51\x41\xf9\xd2\xbf\x7a\x13\xdb\x47\x71\xd5\x08\x25\x85\x4a\xc2\x91\xc7\x94\x96\x00\x26\xfc\x1b\x84\xc3\x78\xa6\x65\xc5\x6b\x29\x76\x4b\x59\x09\x85\x9f\xd3\xcb\x4b\x78\x77\x79\x49\x84\x25\x78\x29\x5d\x07\x2b\x3f\x6d\x93\xb4\xb9\x40\xff\xaf\x7d\x8c\xd5\xb6\x98\x5f\xb0\x33\x2c\x8d\xda\x21\xbd\x08\xdc\x08\x14\x03\xe4\x2b\x7d\xdf\xe8\x58\x46\x50\x09\x6c\x77\xf5\x4d\x0f\x79\x8d\x5d\x52\x62\x95\x5c\x47\x21\x67\xbe\x14\xde\xa2\x95\x20\x63\x7f\x32\x32\x5d\x03\x05\x67\x67\xd2\x24\x1d\x35\xda\x14\x75\x0d\xa6\xb0\x41\xdd\xf4\x2f\x0a\x5e\x71\xb6\x2c\xd6\x3f\xba\x45\xe5\x2f\x73\x01\xd9\x58\x10\x2c\x04\xb4\x65\x3d\xba\x8d\x04\x42\x98\x4b\x29\xb1\x0f\x36\x09\x19\xd4\x43\x73\x0a\xd4\x01\xeb\xba\x29\x0c\xa9\xd3\xfc\x88\x29\xab\xbf\xab\x8a\x92\x96\xb9\x0b\x02\x10\x91\x65\x20\x08\x12\x54\xf3\x5e\x57\x45\xff\xc5\x9f\x9a\x78\x72\x2f\xb1\x55\x46\x75\xba\xeb\xee\x67\x6f\xcf\xfa\xeb\x64\xe7\xbd\xfa\x57\xa9\x01\x9f\x9b\xac\x88\x4d\xfe\x6f\x9a\x60\xd0\xc4\xa5\xfd\x79\x28\x46\xc2\x40\xf5\xff\x1b\x7a\xf1\xc8\x33\xed\xca\xfe\x87\x27\x3a\x7d\xb3\x85\xaa\x9c\x2e\xd1\x19\xb8\xcf\x83\x8b\xaf\xce\x54\xff\xac\x4c\x78\x2e\xb4\x3b\xc6\x92\xcc\x17\x3e\x47\xae\x31\x7f\x4a\x53\x1b\x70\xba\x29\xb6\x3d\x4e\x7c\xac\x04\x1b\xa5\xfc\x12\xb4\x89\xd0\x51\xe7\xde\x83\x95\x3b\xeb\xac\x2d\xf2\xea\x72\x73\xf5\xcc\xf3\x65\xde\xa2\x5d\xa1\xb9\x44\xa6\x50\xd4\xba\x6f\xbe\x00\x67\x8a\x5a\x09\x76\x72\xda\x31\x1f\xba\x0d\x4d\x76\x01\x3b\xac\xa9\xdd\xa5\xa5\x32\xe9\xad\x88\xd3\x39\xa6\xfa\xba\x29\xea\xe7\xf1\xa3\x97\xfa\xce\xe9\xfb\x60\x03\x71\x71\xf5\x54\x56\xda\x80\x85\xa6\xf4\x96\x8a\xfb\x38\x79\x8f\x19\x16\xb8\xce\x7e\xaa\x3b\x48\x4c\x81\x54\xea\x5f\x01\xc3\x8d\x50\x40\x57\xfb\x28\x7e\xcc\x77\xbb\xe6\x17\x5d\x1e\x73\x0a\xb9\xe4\xf8\xbd\xb1\xc5\xd9\xe3\x33\x3b\x8a\x28\xf7\xef\xda\x41\x62\xdc\xdf\x8d\x6e\x9c\xec\x49\x13\x55\x47\x39\x8d\x39\xfd\x5f\xd8\xec\x24\x0e\xd2\xfe\xc0\x4c\x8a\x45\xd7\x50\xca\xc3\x32\x00\x08\x33\x72\xf6\x94\x3d\x13\x4f\xd9\xe9\x29\xe2\x73\x16\x9a\x47\x99\x4b\xfd\x2e\xcd\xc5\x61\x6c\xa2\x14\x43\xbe\x8d\x85\x5a\xdf\xb2\x90\x39\x47\xee\x22\xd1\x19\xc9\xa7\x09\xf3\x32\x38\x74\xc8\x2f\x4a\xf7\x71\x85\x0b\x5c\xa7\xa8\x7f\xdd\xe2\x16\x5b\x52\x64\x83\xeb\x41\xa1\x25\xb3\xe2\x5d\xa6\x5a\x7e\x46\xd2\xe9\xa8\x5a\x44\xf0\xe0\x0c\xd6\xc3\x67\x30\x86\xb0\xd3\x93\xf6\x9c\x47\xcb\x20\xd9\x52\xff\xad\x43\xd8\x75\x97\x60\x65\xe4\x25\xa1\xa7\xe7\xab\x5f\xe9\x43\xa4\xe3\xd0\x6c\xfb\xae\xdb\xff\x4f\x1c\x7c\x01\x64\x35\x5e\x51\xe9\x75\x5f\x4a\x22\xba\xdf\xd2\x71\x76\xea\x7a\x39\xcd\xc6\x77\x4c\xde\x54\x3b\x39\x2e\xf8\x98\x41\x28\x46\xdd\x39\xe4\xd1\x85\x68\x58\x23\x77\x0f\x5e\x50\xd3\xde\x4a\xde\xfa\xef\x06\x33\xc2\x71\x5e\x59\xfb\xd8\x25\x1b\x76\x3b\x89\x41\xc7\x4a\x6d\x8e\x92\x34\x67\x81\x3d\xaa\x42\xb8\xd0\x0f\x71\x81\xda\x34\x84\x5b\x51\x7c\xca\xea\x97\x4c\xc8\xfb\x0b\x3a\xad\x29\x2f\xf3\xec\x8a\x2e\xab\x0d\x85\x67\x19\x9a\xd9\xa7\x5b\x73\xd4\xff\xa2\xf6\xb0\xa6\x32\xd3\x42\x37\xa3\xe4\x01\x1c\x45\x8a\xf5\x7b\x59\x48\x3a\xcb\x76\x7c\x59\x6d\x36\x4c\x4a\x5a\x66\xd8\xf4\x3d\x3b\x39\xc3\xc1\xf3\xd9\x43\xc9\xca\xf7\x54\x5a\xf2\x31\xe3\x14\x2b\x38\x30\x7e\xad\xae\xa0\x38\xaf\x66\x7b\xe0\x59\xec\xf5\x7c\x53\xd4\x2f\xba\x6e\xa1\xfb\xbd\x9d\xb7\xa8\xd6\x6b\x5a\x7e\x5b\x2c\x3f\xaa\xdd\x52\xa8\x4b\xcb\x78\x90\x03\xdd\x40\x06\x14\xf0\x84\xf9\x50\xe5\xd9\x1a\x6e\x94\x69\x5d\xdc\x52\xd8\xfe\x00\x58\xf1\xb4\xef\xd8\x7a\xfd\x02\x16\xdc\x1a\x29\xee\x8f\xf1\xd7\x6b\x76\x7d\xa3\xc0\x89\x35\x62\x24\x12\xcd\xb9\xa8\x45\x7b\x4c\xc1\x75\xd3\xa4\xa9\x19\x89\x9c\xda\x4b\x35\xec\x41\xd1\x64\x75\x42\x3d\x00\x06\x27\x12\x2f\x0c\xab\xd7\xec\xfa\x9a\x8a\xef\x0a\x49\x45\x1b\x8c\x57\x74\x59\x6c\xe8\x1b\x0e\xf1\x30\x07\xd6\x07\x6d\x32\x33\x91\xab\xee\x34\xec\xe3\x10\xee\xdd\xe1\x69\x51\xde\x67\xa8\x69\xb0\x05\xd8\xec\x81\xd5\xef\x8b\x5b\xc6\xaf\x15\x72\x75\xf1\xa9\x77\x63\x52\x28\xa0\x9e\x87\x46\xec\xd9\x92\x26\x37\x50\xb5\x2b\x59\x79\xc4\xbe\x7a\x38\x6a\x34\x64\xfc\xb6\xfa\x48\xbf\x63\x2b\xba\xbc\x5f\xae\xe9\x8b\x42\x2f\xba\xce\x34\x65\x2a\xd5\x3c\x3f\xe8\x5a\xcd\x03\x1b\xf6\x59\x77\xe4\xf0\xdc\x5c\xbf\x40\x29\x07\x7b\x0d\x4f\x7d\x77\xfb\x82\x5e\x32\xc5\xd0\xa8\x6d\xd4\x33\x7d\x60\xf5\x9f\xe1\x8f\x93\x73\x1c\x16\x91\x1b\x1c\x4c\x37\x2c\xa7\xd1\xa0\x4d\x1b\x09\xe2\x13\x44\x8d\xf2\x17\x26\xf1\x96\xd6\x75\x71\x0d\x79\x96\xbc\x0f\x9b\x9c\x72\xd0\x1c\x1b\xca\x88\x81\x28\xe8\xac\xbb\xb9\x4d\x7f\xae\x17\x02\x33\x06\xad\x6b\x0f\xd8\x15\x9e\x3c\x1a\x01\x7b\x29\x06\x68\x63\xc3\x79\xdb\x13\xd2\x4b\x48\xfa\x30\xe8\xa8\x9e\x0e\x51\x02\x73\x14\x71\x00\x8b\xe3\x51\x03\x76\x3e\x89\x6d\x83\xc8\x1e\xc1\x59\xa3\x50\x90\xc8\xa7\x6a\xf3\xc3\x3a\x75\x1e\xb5\x51\x4a\xee\xf6\xf5\xbe\x60\x05\x0d\x18\x9b\x8a\xe6\x81\x86\x3a\x30\x1a\x3d\xf8\x74\x7c\x4c\xf7\x29\x88\x9c\xb3\x05\x06\x1e\x34\x99\x68\xf9\x82\xe6\x02\xcd\x9c\x12\x8c\x37\x39\xa3\x48\x4d\x18\xf2\x6f\x51\x52\xd0\xfc\xc1\x9d\xf6\x99\xa9\xc5\x08\x37\xe5\xf7\xf4\x4e\x91\xb2\x9a\xca\xdd\xb6\x05\x8c\xd0\x24\x06\x3c\x71\x9d\x43\x4e\xaf\x9a\x4e\xcd\x41\x9a\xfa\x3d\x27\xc7\x1c\x9d\xe3\xe8\x7c\x4d\xc3\x33\xf6\x45\xc6\x00\x9e\x78\xd7\x81\x8b\x5e\x71\x99\x35\x01\xcb\xb2\xa6\xc7\x8d\x76\x90\xaa\xb9\x1e\x97\x54\x9d\xbc\xd6\x2a\x43\x32\x44\xd6\x14\x07\x40\x4e\xbc\x6a\xc3\xe7\xaa\x0d\x1d\x96\x6e\x93\x4e\xd4\xd6\x39\x8c\xad\xd5\x75\xb6\xc4\x13\x93\xc1\x2d\x31\x67\xda\x40\x75\x3a\x4c\xad\x4b\x56\x2a\xc1\x39\x35\x5a\x8b\x17\x8b\x4d\x2a\x3b\x0f\xa8\x80\x36\x1c\x33\x2f\xb7\x3a\xe8\x42\x13\xb2\xc8\xab\x8c\x2c\xa9\x7a\xd7\xbb\x4d\x9f\x70\x5b\xec\x8e\x38\x3b\x9f\x85\x5e\x76\xb0\x7d\xe5\xc5\xa5\xb1\x8d\xbb\x7f\x08\xe9\x4c\x2e\x49\x45\x73\x71\xd1\x92\x38\xd1\xec\xa1\xc1\x12\x21\xa3\x56\x01\x7e\x9b\x08\xac\xc4\xb2\x42\x52\x1d\x58\x85\x25\x3a\x32\x13\x1b\x43\x93\x49\x16\xf4\x94\xe9\xfc\x02\x99\xeb\xcc\x3e\xe8\xd8\x89\xe6\x4c\x57\xc6\x61\x0b\x42\xe1\x3f\x2c\x31\x3f\xcd\xa6\xd9\x29\x0b\x54\x60\x4d\xfe\xc0\xea\x57\x9b\xad\xe2\xfe\xcf\xb1\xd6\xc5\x00\xb7\x66\x7f\xd0\x52\xff\x6d\x24\x04\xf5\xa7\x65\xe8\xe0\xb1\xde\x36\xfd\x03\x68\xa3\xfa\xc3\x30\x0b\x67\xc9\x3b\xae\xc3\xc6\x1d\x29\x48\x40\xfa\x7e\x98\xa9\x9f\xf2\x59\x5a\x22\x31\xbc\xc4\xe5\x36\x08\xa4\x26\x32\x89\x13\x3a\x46\x1c\x6b\xf4\x48\x88\x1c\x49\x2c\x32\xf7\xc1\x81\x13\xea\xee\xe0\x5e\x79\xe6\x51\x28\xea\x0e\x7c\xff\x40\xbc\x92\xaf\xab\x1d\x8f\x41\xda\x58\x18\x29\xb8\xb9\xfd\x3d\xc3\xf4\xe7\x0e\x0f\x13\x03\x4c\xcb\xf7\xfd\x22\xdf\x3f\x66\x55\x98\x4e\x15\x33\xbf\xa6\x05\xd7\xaa\x80\x03\xfc\xee\x10\x47\x9b\x00\x50\x62\xc6\x80\x64\x20\xc6\xe8\xb9\xcf\x5a\xb2\xb3\x5e\x4a\x70\x3e\x7a\xb0\x50\x01\x09\xda\xce\x1e\x52\xec\x42\x5a\x98\x9d\x4c\x5c\xb4\xe6\x4b\x56\xc2\xa9\xcb\xbb\x5c\x33\xa7\xbd\x0c\x6a\x92\xa3\x4d\x31\x7c\xa9\x5b\xe6\x68\x89\xd8\x7e\xfd\xe5\x25\xe3\x5f\x2a\x6f\xf4\x93\x9a\x84\x8c\xa8\x1e\xf7\x1c\x22\x73\xe6\x67\x35\xc5\x66\xf1\xb3\x1d\xb5\xd3\xeb\xe0\x48\xa4\x5f\x09\x38\x26\xd3\x3c\x0b\x49\xe7\x59\x84\x4a\x81\x32\xe6\x68\x26\x33\x56\xdb\x7c\x8a\x52\xe3\x33\x48\xfd\x8f\xc3\x48\xd8\x80\xe4\xd6\xaa\x37\x9f\x49\x1d\xe2\x28\xc8\xc0\x65\xdf\xa7\xac\xf8\x27\x69\x1a\xbe\x98\x34\xff\x89\xca\x87\x83\x12\x9e\x25\x71\x01\x8b\x90\xc2\x5b\x2d\xd7\x2b\x59\xfe\x0d\xbf\xa5\xa2\x8e\x53\x79\xe4\x9f\x2a\x72\x96\xac\xd4\xe7\x48\x4d\x26\x75\xb9\xe8\xbd\xd1\x10\x78\xc4\x16\x0e\xa8\x00\x7a\xd4\x22\xff\x77\xa8\x35\xfa\x8f\x5c\x1f\x70\xfe\x95\xd5\x14\xcd\x51\x58\x03\x99\xad\xad\x08\x0f\xee\x91\x29\x3c\x81\xf7\x0a\x4f\x66\x89\xb7\xba\x48\xfa\x11\x38\xd6\xe8\x38\xe3\x4c\x54\x95\xcc\x02\xa9\xb8\xfc\x97\x36\x06\xba\x69\xde\xd0\x43\x59\x50\x5e\xe6\x3a\xd9\x4b\x4f\xb6\x13\xb5\x86\x2d\xc5\x1b\x8a\x6f\x29\xbe\xa7\xf8\xda\x59\xe4\xfa\x24\x1d\x7c\x45\xc9\xc9\xf9\xe8\x9e\xb6\x4c\x48\x27\x57\xd4\xda\x68\x5c\xf6\xe4\x30\x4f\x38\x18\x02\x7d\x9e\x70\x34\xda\x52\x42\xa7\xce\x58\x8c\x37\xea\xa7\xc9\x5b\xe4\x5c\x65\xf0\x6d\xf0\xd4\xb7\xdd\xd2\xc9\x64\x43\x27\x93\x5b\x3a\x99\xe4\x57\x00\x35\xeb\xfe\x73\x45\xb5\x38\x78\x99\xcc\xfa\x80\xef\xd2\x8f\x5f\xa5\x73\x44\x38\x38\xbf\x0b\x15\x5b\xaf\x28\x04\xd1\xe5\xf0\x3f\xa1\x10\x47\x26\xf3\x6c\x9a\x99\xbc\x19\xef\xe9\x23\xbd\x34\x7d\x8a\x13\xe9\x4c\x6a\x71\xa0\x8c\x2c\xae\xc9\x60\xe6\x93\xe5\x9a\x51\x2e\xdf\xb4\x3e\xbb\xec\xf1\xf5\xbc\x0c\x82\x4a\xe3\xd8\x1a\x4d\xc3\xe2\xc6\x26\xf3\x4d\xc0\xc3\xbc\x2d\x78\x71\x4d\xc5\xeb\xf5\xae\xbe\xe9\x76\xbc\x51\x07\x0d\x62\xc0\x19\xbf\x6e\x75\xff\x23\x35\xac\x77\xfc\x59\x59\x7d\x5f\x49\x33\xa5\xd6\x17\x3e\xc2\xb5\x35\xab\x50\xf4\x69\xa5\xcf\x05\xed\x45\xf4\xac\x6e\x79\x8e\xb7\xb2\xeb\xba\x18\xe8\x16\xfc\x4a\xba\xa2\x42\xd0\xf2\x83\x26\x21\xed\xd7\x22\x60\xeb\xda\x73\x30\x6e\x50\x9d\xe7\x91\x93\x54\x6b\x1a\x16\xc1\x75\x60\x53\x7f\xa4\xa8\xa0\xb2\x60\x9c\x96\x6f\x8f\xff\xc0\x9f\x7f\x73\x9a\xea\x47\x7e\xf3\xf3\xa1\x41\x96\x3b\xe1\x15\x28\xe1\xba\x68\x88\x52\xf7\xe0\xc4\x64\x91\x5c\x67\x87\xbc\x49\xe5\xd0\x89\xd1\xda\x64\x90\xec\x60\xb5\x4b\x87\x64\xea\x97\xfe\xe1\xa7\x37\x2f\x2f\xff\xf4\xea\xaf\x8b\xe8\x8b\x8e\x98\x1c\x63\x4a\xf0\x24\x3c\x18\x27\xe7\xf1\xa1\xb0\xbf\x0f\x1d\x08\xd7\xae\x7b\x18\xdc\xab\x0e\x3e\xfa\x39\x40\xae\x41\x6b\xb4\xef\x22\x68\x30\xd9\x2e\x7a\x86\x2f\x23\xe4\x8c\x16\xed\x50\xb3\x03\x0a\x8f\x98\x51\xcc\x31\x83\xb2\x23\x1d\xcf\x8a\x6a\xca\xea\x3f\xb2\xb2\xa4\x5c\x31\x47\xa1\x8c\xd3\xf5\x5c\x30\x2e\x53\x46\x13\x04\x11\xf2\x94\xc0\xb5\x3b\x8d\xb5\xb1\xc4\xb8\x21\x84\xe8\xe4\x75\x71\x7d\x90\x35\x2c\x57\x32\x46\xc4\xbc\x0b\xb6\x76\xbf\x37\x89\x64\x68\x83\x2b\xd5\x9b\x9e\xfb\xeb\xdd\x7a\x7d\x6f\xc4\xbc\xc4\x0a\xce\x55\xe3\xff\x8f\xbd\x6f\xff\x6f\xdb\xb8\xf2\xfd\x9d\x7f\x05\x89\xed\x45\x31\x57\x23\x5a\x8a\xbb\x6d\x97\x36\xac\xca\xaf\xc6\x6d\x1c\xfb\x5a\x4e\xd2\x2c\xcb\xab\x0b\x11\x43\x69\x6a\x68\xc0\x02\x43\xc9\x8a\xc8\xff\xfd\x7e\xe6\xcc\x1b\x18\x80\x94\x62\x27\xe9\x36\xbb\xfd\xc4\x22\x30\x2f\xcc\xe3\xcc\x79\x7e\x8f\x2e\xfb\x8a\x7d\x53\xf7\x38\x02\x8a\x22\x8e\x13\xe0\x28\x81\x70\xa4\xa4\x19\xcd\xdf\x7c\xaa\xe2\xf8\xa1\x1f\x98\xa8\x2e\x17\x10\x6f\x76\x54\x59\x59\x4d\x69\x8c\x76\xac\xa8\x4a\xdb\xaa\xa1\x2f\xef\xac\x49\xf2\x8d\x74\x1c\x05\xce\x35\x8c\xc0\xd4\xd9\x44\xbb\x9a\x1c\x85\x14\xe9\x76\x1c\x85\x2c\x2c\x2b\x76\xae\x5c\xb0\xa6\x2a\x2d\xab\x7e\x4d\xae\x77\xac\xf6\x35\xb9\x96\x55\x1a\x6a\xf8\xde\x4a\x50\x56\x54\x33\x9a\x85\x9d\x2a\x9a\xd2\xa2\xaa\xf1\xe4\x69\xa2\x6e\x8d\xdc\x3d\x17\xc7\xa3\x8e\x13\xe2\x05\xf8\xa8\xc8\xa1\xf4\x16\xfe\x98\x70\xec\x7b\x0e\x82\x13\x0d\x76\xc7\x32\x69\x8d\x0e\x52\x4d\x54\x86\x38\xba\x94\x12\x57\x5a\x25\xe6\xbc\x83\x5b\xc0\x22\xfc\xca\xb1\x47\x34\x17\x4c\x30\xb1\x70\xa3\x32\x6a\xca\x22\xf3\xca\xe1\x42\x48\x1a\x95\xec\x55\x99\xf2\x06\x43\xdb\x0b\xab\xe2\xa0\x35\x97\x26\x15\x7c\x86\xeb\x66\xc8\xf5\x2a\x3d\x78\xb4\x7a\xac\x5d\xe5\x1e\xad\x34\x87\x5f\xa4\xf5\x74\x35\xc3\xf3\xb4\x9c\x16\xb3\x81\x19\xff\x1c\x12\x03\xba\x99\xa7\xe7\x32\x51\xf5\x31\x49\xc8\xb4\x98\xa1\xc9\x07\xf5\x07\x16\xff\x4d\x33\xe5\xc3\xb7\xf0\x48\x84\xc4\x22\x14\x83\x97\x6b\x2b\xa5\x1a\x05\xfb\x96\x98\xc4\x61\x0a\x01\xad\xc2\x0b\x9d\x97\xb8\xd6\x39\x49\x2b\xdc\x4c\x52\x8a\x90\x7f\xbb\x71\x75\x7d\xbc\xcc\xe6\xbc\xac\x6e\x42\x98\x3d\xc6\x16\x82\x73\x6f\x78\xf8\xa2\x19\xb7\x86\xff\x0a\x61\xe1\x39\xbe\xd0\xbd\x28\xe9\xea\x79\xe3\x2a\x52\x09\x1d\x72\x7c\xe1\x83\x91\xcb\x86\xc5\x86\x76\xee\xb9\x10\xe0\x6e\xe3\x66\x76\x59\x47\x7d\x8b\x4a\xc6\xc2\x96\xf1\x38\x90\x05\x19\x13\x4d\x15\x73\xe7\x28\xb4\x8c\x5b\x9e\x7f\x6f\xe7\xc5\x1d\xe4\x54\xcd\x75\x5e\xf9\x48\x7b\x0a\x6a\x29\x37\xf1\xb7\x6d\x6c\xa0\x30\x77\xd5\x91\xbb\x93\x74\x95\x9f\xf2\x99\xee\x25\x8e\x77\x29\x95\x20\x8d\xb8\xdc\x57\x7a\x83\x42\x43\xf6\xd9\xd3\xbe\x34\xa3\x29\xe9\xe2\x51\x01\xf4\xa3\xd9\xd4\x94\xcf\x06\x76\x54\xad\x77\x58\xc2\xb0\x9d\x52\xa9\x88\x7a\x55\x1f\xd7\x37\x6c\x1e\xc7\x95\x89\xa8\x43\x8d\x3d\x0f\xc7\xca\xc7\xcf\xe8\xe4\xad\xc2\x0a\xda\xb2\xc3\x12\xaa\xe5\x37\x50\x0a\xba\x45\x22\xa8\x24\x58\x98\x80\x7b\x68\xf4\xfc\x64\x32\x04\xca\xfa\x1f\xa2\x84\xf2\x7e\xc4\x55\xea\xf8\x8a\x02\x2f\xe7\xe4\x75\x75\x7c\x2f\x35\xb3\x78\x92\x5d\x29\x54\xad\x0a\x13\x84\xc1\x59\x56\xf0\xb5\xd0\x33\xcf\x2a\x4e\x72\x7b\x48\x9a\x43\xf6\x0e\x90\xda\xcd\x4e\xc8\xbd\x21\x2b\xde\x16\xc6\x91\x53\x2d\x92\x61\xb2\xe5\x58\x23\xf6\xee\xd8\xd9\xe1\x3d\x3b\x3b\x44\x92\x4c\xb4\xbc\xbd\xd5\xd4\xf8\x1f\xac\x02\xea\xe4\x05\x87\x2b\x77\xce\x65\x13\xc3\x72\xa1\x26\xde\xb8\x91\x18\xf8\x62\x17\x34\xd9\x87\xdd\xe2\xda\xe3\xd1\x31\x75\x44\xf8\x56\x19\x46\x26\x15\x56\x66\x91\x09\xd9\xa0\x0d\xea\x43\x54\xe2\x4d\xbb\x18\xe6\x1b\x17\x62\x89\x68\x88\x2d\x28\x28\xcb\x10\x84\xc9\x06\xe1\xf6\xb7\xcc\xcb\xcb\xa5\xd8\x7c\x58\x03\x3e\x2c\x8a\xec\xbc\x8e\x50\x18\x90\xaa\xbd\x62\xca\xd9\xbf\xf4\xfd\x01\xda\xcb\xe8\xb0\xcc\x89\xb3\xf3\xdd\x5a\x91\x3a\x48\x01\x22\x9b\x18\x10\x88\xb0\xd4\x63\x08\x66\x4b\x1c\x0a\x01\x44\x99\x73\x20\x4e\x1e\x14\x93\x7e\x7e\x38\x3a\x9d\x5f\x90\xf9\x87\x97\x65\xf5\xa6\x5a\x5e\x64\x8c\xe4\x5e\x70\x44\x1d\x21\xf9\xad\x01\xe9\xa0\x53\x50\x69\x0d\x49\x34\xe0\xc1\x2a\xb4\x2f\x2d\xff\x6e\xe8\x56\x89\x8c\x0e\xb1\xfd\x3e\xd9\x66\xc7\x3c\xa0\x3e\x71\x51\x52\x29\x13\xfa\xde\x1e\x4f\xab\x67\xc5\x4e\x35\xd1\x21\x64\xe9\xfe\x39\xd4\xc5\xbc\x2d\xd1\x52\xd1\xa8\x47\xe6\xb2\x01\xf1\xaa\xbf\xe1\x1d\x86\xbd\x93\xd8\xec\x0c\x4c\xf4\xba\x05\x11\xb1\x15\x31\x0f\xc2\x75\x17\x38\x62\x39\x3e\x5d\x50\x66\x23\xf8\x5a\xc9\x1f\xdc\x84\xb2\x01\x02\xee\xd7\x7e\x7a\xf3\x97\xba\x64\xc7\x4b\x6a\xa3\x73\xb0\xa2\xea\xac\x45\x3e\x2c\x86\xdb\x47\x92\x50\x4c\x70\x83\xf9\xc5\x32\x8d\x05\xf2\x48\xc9\xd6\x4a\x30\x6d\x95\xa6\x01\x6e\xe4\x63\x77\x62\x97\xd3\xae\xb8\x57\xc0\x28\x81\x10\xcd\x3c\xe3\xd9\xd1\x99\x03\x4e\x80\x7a\x41\x38\x64\x05\x05\xc1\x4a\x53\x77\xc2\xee\x00\x10\x5a\xba\x22\x4d\x96\x52\x93\x69\x34\x13\x6c\x02\xd6\x0a\x38\x89\xa2\x91\xe1\x55\x0a\xc1\x00\x04\x4b\xd1\xa7\xc4\x65\x45\xcf\x29\xcb\x38\x65\xe7\xaf\xda\x42\x90\xe9\x6f\x42\x41\x2f\x05\x62\x8f\xc9\x03\xa5\x13\xcb\xf4\x82\xcc\x32\xf9\x85\x52\x5e\xf2\xbe\x4c\x50\x24\x09\xdd\x23\xa4\xe9\x63\xce\x05\xc7\x8a\x1a\xfc\x72\x90\x47\x23\x12\xf1\x4c\x27\x89\xf2\xf6\x17\x80\x1b\x51\xdc\x60\x25\x54\xe6\x14\x37\x57\x81\x98\xd4\xc8\x84\x06\x47\x98\x60\x93\x4b\x60\x8e\x55\x1a\x84\x49\x71\xd4\x8e\x22\xc1\x16\xc7\x56\x4a\x87\xab\x8d\x17\x7f\x9b\x8a\x29\x81\xec\x98\xfd\xf3\xe2\xc5\xef\xca\x8d\x68\xd8\xc5\x20\xfe\x8e\x0b\xc1\xe1\x42\xea\xdc\x7d\xd7\xb0\xe0\xa6\xd6\x71\x62\xc4\x82\xeb\x36\xd8\x51\x05\xa0\xeb\x27\x7b\x51\xdd\xdb\x06\xda\x47\x1c\x92\xc0\x8c\x46\xcc\x1f\x64\x1c\x37\x1e\x34\xb9\xdc\x04\x0d\x68\xba\x24\x26\xd7\x83\x92\xd7\xed\x86\x97\x69\x3e\xec\x20\x4c\x52\x6a\x9d\x41\xc9\x7e\xe0\xa4\xf9\xc5\x18\xb2\x60\x30\x80\x25\xc0\x10\x9c\xaa\xf2\xa4\x61\x79\x42\x68\xed\xe4\xe4\x9d\x54\xc1\x14\xbe\x9e\x1b\x45\xa9\xe1\xab\x71\xe3\x33\x26\x19\x0e\x28\x18\xac\x1b\x85\xe0\x84\x3a\xa6\x3b\xa5\x9b\xc6\x81\x08\xca\x15\x64\xe6\x48\x5f\x1d\x25\xda\x42\xd0\x96\x0a\x00\x96\x52\x8e\x21\x82\x09\xbe\xe3\xcb\x00\x3a\x73\x3b\xf9\x0f\xce\xd2\x2d\x6a\x77\x07\x4b\x2e\x5b\xaf\x93\x2c\x6d\x5e\x16\x9d\xfb\x48\xe6\x04\xc0\x1c\xd3\x6e\x4e\x93\x19\x10\x93\xaf\x32\x4e\x6a\x2e\xd8\x30\xe0\xb6\x23\x3d\xe3\xc0\xca\x63\xb6\x41\xad\x46\xb8\x7b\x75\x94\x98\xe0\x06\xc9\xc2\x3c\x70\xdf\x6c\xad\x24\xaf\x69\xb4\x41\x5b\x0d\x12\x62\xc5\x33\x9c\x69\x72\x10\x9a\xf0\xbe\x5b\xc9\x39\xc0\xec\xbe\xa4\x81\xa6\xac\x71\x87\x94\xf6\x0e\xa1\xeb\x35\xd5\xeb\xeb\x05\xbb\x12\x5c\x82\xae\xa9\x04\xc5\xd6\xa7\x26\xf4\x2a\x53\x76\x6b\x27\x26\x04\x33\x5c\xe1\x6c\x57\x6a\xaf\xf5\x55\x2e\xad\xaf\x0d\xad\xcf\x2c\x19\xcf\x80\xeb\x09\xb6\xd2\x01\xce\xd5\xfb\x19\x1c\xc8\x26\x43\x46\x7f\x56\x8d\x55\xa7\x82\x04\xc2\xde\x54\xbf\x23\x6c\x5e\x99\x6d\xab\x46\x1a\x59\x91\x17\x0d\x48\x51\x13\xc5\x75\xb9\x5a\x38\x72\x74\x45\x26\x97\x64\xb0\x65\x34\x29\xb5\x4a\xaf\x26\x7d\xe9\x52\x8a\x18\x61\x74\x97\x4d\xd9\x73\xf0\xc5\xf6\x30\x10\x16\x03\x7f\xf2\xc2\x7b\x79\xd0\xba\x36\x92\xe6\xbd\x51\x43\xf9\xd6\x1e\x4b\x46\x87\x62\x16\x5b\x65\x4f\x20\x31\xe4\xcb\xb2\x9a\x13\x29\x13\x26\xa3\x03\x95\xa0\xe4\xc7\x32\x62\xfe\xa9\x40\xfa\xb0\x84\xb6\x2e\xc5\x0c\x97\xad\xad\xdb\x79\x12\x8e\xee\xbc\xb5\xb3\x0d\x9a\x64\x76\xe1\x76\xe3\x72\x3f\xc1\xd2\xb9\xcc\xf1\xbf\xd4\xe2\xb5\x38\x49\x16\xe0\x24\xef\xb9\x40\x61\x4e\xb3\xdc\xa0\x49\xe9\x88\xb2\xd6\x94\xe8\xc7\x5f\x84\x84\xec\xa3\xa0\x4e\x76\xd2\x96\x41\x03\x89\xdd\x9a\x4a\x5f\xcf\xd3\x60\x74\x10\x54\xd9\x86\xd8\x84\x3e\x95\x6d\x87\x06\xb4\x43\x19\xdb\x51\x5a\x5c\x9a\xbf\xf1\x64\x2a\x05\xb8\x26\x1e\xa1\x90\xdd\xfa\x40\x0b\xc0\x5d\x09\x05\x7a\xa4\xdf\x66\x6e\x81\x72\xac\x38\xb9\x3e\x04\x35\xa7\x0d\x5b\x1a\x7c\xde\x00\x4e\x70\xb5\x6c\x85\xd2\xb8\xd8\xba\xce\xd1\x59\xae\xea\x0b\xc0\x20\x22\x0d\x9d\xa1\xca\xb4\xd3\x4a\xab\xa3\x34\xed\xa7\xac\xe4\x74\x71\xa3\x7c\x94\x28\xa9\x13\xae\x66\xc6\x3a\x05\x1a\x11\xc3\x7c\xe2\xb7\x7e\x90\x7d\x13\x16\xce\x3f\xd2\xa2\x96\xfd\x24\xb0\x5c\x86\xef\x81\xae\x36\x1a\xb5\x12\x82\x8f\x49\xc2\x91\xd7\x62\x17\x81\xda\xd6\xa6\x7b\x62\x3f\xb4\x5a\xed\xda\x06\x74\x91\x98\xad\xaf\xb2\x5e\xb8\xd0\x97\xa0\xa2\x52\xe1\xfc\x8a\x22\x49\x8c\xd9\x9a\xf0\x06\x7c\x2c\x17\x7f\x2a\x30\x4c\x65\xce\xb7\xa0\x98\xb0\x4f\x07\xba\xb3\xd6\x02\x24\x04\x39\xb8\x96\xa1\xaf\xf3\xf7\xe4\xa0\x83\xfb\xa3\xb5\x28\x27\x3d\xf0\x89\xda\x2f\x4a\x4f\xef\xf9\x7a\x46\xf8\x96\x09\x79\x9e\x18\xd7\xed\xca\xb2\x3d\x1c\xd4\x7c\x5e\x7e\x8f\xd0\x06\x11\xf3\xf3\x32\x21\xeb\xb5\x4e\x4a\xe4\x58\xc8\x9c\x93\x2a\x1a\x73\x42\x0d\x02\x4a\x6c\x18\x9f\x53\x44\x3a\xbe\xca\x5a\xcd\x08\xb4\x56\x1d\x59\x40\x5a\x1e\xb4\x17\x7c\x47\x71\xfd\x5a\x16\x0e\xc5\xb7\x79\xc5\x6d\x81\x48\x6b\x4e\x5b\xb1\x0f\x01\xd5\xa9\xde\x4e\x5f\x69\x25\xb3\x36\x47\x3b\x8a\x7d\xe4\x1f\x5d\x58\xba\x70\x68\x05\x2c\xc5\xf6\x5e\x87\x3b\x74\x7a\x74\xbb\x69\x49\xbf\xa1\xc4\x57\xa2\x4b\x65\xba\xfe\xce\xf8\xd7\x76\x59\x27\xa1\x11\xeb\x86\xab\x35\xa4\x72\x06\xed\xf3\xc8\x6d\x55\xc7\x88\x74\xcc\xbb\x87\x12\x21\x8f\x30\x0b\x62\xaf\xb6\x7d\x64\x0c\x40\x1c\x38\x27\xaa\x8b\x98\x5d\x64\x2c\x2f\x48\xfe\xe2\x8a\x30\x9e\x54\x18\x7c\x95\x45\x09\x05\x03\x06\x7d\x18\x91\x5b\x19\xc1\x72\xcf\x09\x44\x6f\xd5\x2e\xd2\x2b\x29\xaf\x22\x6a\x50\x57\x51\x49\xef\x85\x5c\xde\xa6\xeb\x42\x83\xc6\x37\x10\xd7\x9b\x7a\x17\x40\x8f\x6b\x4a\xb6\x1b\xdb\x95\x21\x82\x81\xce\x76\xf8\x84\x46\x75\x7d\x05\xa9\x42\xfa\x18\x48\xfc\xa6\xcb\xf2\x2a\x2b\x9e\x5d\x90\x46\x6c\x63\xef\xf8\xf5\xa2\x74\x6a\x1b\x70\x95\x8e\x0e\x1d\xb8\xc2\x44\x46\xe0\x88\xbb\xfe\x1b\x26\xcf\xbb\xa7\xa0\x4c\x3a\x75\x26\x71\x5c\x6d\xd7\x86\x74\x8d\xd3\xd7\x8d\xb4\x5e\x03\x34\xa0\x99\x73\x4d\x54\xef\x37\xe5\x7e\xed\x84\xb8\x26\xbc\xfb\xcc\x20\x5c\x32\x6e\xf4\x52\xcf\xdc\x0d\x7e\x8e\xb9\x73\x76\x2b\x1c\xda\x1d\xa6\x2d\x21\x71\xac\x32\xf2\x8c\xd2\x94\xa8\x39\x70\x14\xa7\xe1\xb9\x54\x55\x10\x96\xd5\xd5\x05\x7f\xd7\x26\x74\x35\xe4\xb5\x43\x4b\xf6\xcc\x78\xf5\x3b\x2d\x76\x9a\xd2\xb5\xbb\x7e\xbf\xb7\x87\x24\xca\xe0\xf1\xf9\x5c\xd7\x90\x0d\xb4\xe3\x9a\xfa\x3d\xef\xa0\xa5\x50\x30\xd4\xc0\xa6\xcf\x01\x02\x18\x29\x8f\xa5\x48\xdf\x4a\x2d\x13\xad\xa5\xcd\x6e\x14\x52\xc3\xed\x43\xc2\xfc\x81\xe3\xd0\x93\x83\xad\xac\xa9\x24\x8f\x6e\x9c\x44\x08\xd6\x4b\xa6\xca\x09\x31\x1f\xd7\xca\xff\x1c\xfe\x4d\xc1\x35\x7d\x7a\x30\x93\xd9\xad\xb3\xf6\xc5\x00\xd9\x06\x8c\x03\xe5\x5e\xb4\xff\x24\xda\x23\x83\xbc\xbc\xcd\xc6\xe4\x23\xe5\x71\x2c\xff\x55\xe2\x44\x96\x66\x6e\x24\xf4\xe6\xfa\x82\x16\x24\x19\x65\xd3\x72\x26\x4f\xe7\x2a\x3d\x25\xd3\x1a\x8e\xda\x0a\xf1\x74\x25\x19\xfc\x1a\x57\xe9\x6a\x4c\xc4\x11\xab\x71\x26\x9e\xc2\x9d\x04\x4a\x1a\x9e\x4e\x05\x6d\x9b\x4a\x4d\x56\x21\x47\x0c\x10\x10\x2c\x3d\xc0\x34\x2d\xb4\xcf\x15\x7b\x4c\x21\x59\x53\x92\xa5\xd9\xb4\x98\xb2\xd9\x0c\xc9\x26\xe3\x58\xe5\x5e\xcb\x10\xce\x64\x87\xe2\x2e\x50\x8f\x06\x30\xa0\x54\x06\x6d\xd6\x13\x8e\xe5\x30\x26\x15\x86\x41\x4c\xb2\xcd\xc6\x76\x56\x35\x3b\xab\xa6\x6c\x26\x7b\x91\x33\x00\x03\x6b\x4d\x62\x9a\xed\xec\xc4\xe0\x56\x8b\x00\x23\x0a\x3a\xe6\xcd\x8e\xb9\xe8\x18\xc6\xac\xe0\x96\x41\xe1\xe6\xdd\xd8\x1d\x9a\x36\x9f\x1b\x97\x15\x86\x44\x54\x18\xfe\x3f\xe0\xc5\xff\xdf\x30\xd2\x88\x5c\x7b\x69\x54\xb2\x61\xb4\x77\x02\xf8\xc7\xb2\xa7\xbd\x68\x08\xcb\x3a\xa4\x6c\x08\x53\x34\x8c\x30\xdb\x4b\x89\xbb\x4b\xc6\xc3\xc8\x3a\xeb\x09\x8a\x28\x5a\x7a\x96\x89\x23\x00\x70\x5d\xc3\x68\x4f\xa5\x54\x66\xf5\x92\xcc\x79\x52\xa1\xbd\x68\x1c\x21\xdc\x14\x1d\x98\xda\xed\x36\x06\x27\x9c\x0d\xa5\x05\x56\xc7\x1d\xb0\x3a\x93\x12\x85\x40\xe8\x0d\x24\x41\xb3\x60\x75\xd5\x6c\x70\x68\x7c\x0c\x9a\x3e\xd1\x2a\x69\x9f\x3e\xe0\x4a\x33\x22\x49\x95\x7f\x25\xd8\x55\xe8\xf0\x69\x6b\x44\xbc\x84\xb8\x17\xd2\x31\x0a\xec\x0b\xbb\x58\x5c\x4f\xaa\x17\x05\x70\x1b\xe9\xc6\x1d\xd8\x13\xe3\xaf\x28\xb7\x10\x69\x6e\x21\x65\x73\x20\x90\xcd\x4c\x63\x5f\xe0\x12\x6d\x88\xc9\x37\xb6\x91\xda\xaf\xbe\x60\xbe\x0e\x74\x73\x00\x47\x1e\x1d\x06\x3c\xab\xb6\xc4\x06\x4a\xfa\xb6\x94\x2a\xb7\x1e\xc9\x1f\x57\xe9\xed\x66\xe0\xbb\x61\x06\x94\x29\xc6\xb8\xee\xa6\x3e\x63\x68\xc0\x5d\xb5\xc3\xa5\xd4\x6e\x99\x68\x29\x86\x24\xfb\x6f\x86\x75\x94\x54\x1e\x84\x6d\x0d\x29\xda\xbc\x27\xe9\xed\x06\xe1\xc6\xb3\x29\x9b\xa5\x7c\x7c\xba\xd4\xee\x3f\x8e\x6b\x00\xc3\x14\xa1\x49\x52\x39\x29\x6c\xa1\x4d\x27\x5b\xa0\x6c\xd0\xc9\x79\xcb\x66\x29\xf5\xac\x20\x6d\xcd\x47\x25\xb7\x60\xa0\xc7\x4e\x39\x40\x9b\x3a\x7a\xe6\x43\x99\x35\x1c\xef\xfd\xdb\x3c\xe3\xd9\xc4\x55\x9d\x33\xe9\xc0\xca\x3b\xd1\x59\xab\xf1\xe9\xbc\x14\x2b\xce\xdf\xb6\x47\xf7\xbe\xfc\xcb\xc9\x9b\xaf\x13\x82\xe1\x03\x95\xb4\xb5\xb5\x38\x17\xc5\xa5\x97\xc8\x96\xa2\x41\x8d\x88\x86\x75\xb7\xb0\xb3\xeb\x75\xc4\x56\x62\xa3\x38\xcf\x8e\x64\xf2\x09\x8e\x69\x3e\x21\x9b\x89\xfc\x95\xb4\xd1\xa7\x8f\x9a\x0f\x26\x04\x39\xaa\x52\xc8\xfb\x4a\x73\x19\x5f\x06\x3c\x70\x9b\xe1\x69\xcb\x75\x40\x6f\xaa\x56\xa8\x88\x46\x1c\xa6\xb9\xe2\xb6\x0c\xf5\x01\x67\xe7\xc0\x91\x21\x0e\x40\xa3\xf6\x53\xcd\x53\x82\xfd\x7b\x08\x47\xa7\x3c\x3b\x8f\x6c\xdc\xd8\x9e\x38\xc1\x26\xdb\x0e\xd1\xbc\xad\x4e\xe5\x69\x72\x30\x34\x15\xc3\x8d\x08\x9c\xc0\x96\x3d\x3d\x85\xa1\x06\xe4\x79\xf5\x46\x66\xc1\xb2\xd8\xb7\x9e\x24\xd0\xc1\x72\x2a\x0d\x85\xf6\x80\x6b\xb3\xc6\xd2\xe9\x97\x34\x42\x73\xda\x0e\x8d\x1e\x13\x56\x1b\xf5\x8f\x60\xc0\x6e\x55\xb5\xc9\xe8\x00\xbb\x8e\xea\xe0\xc3\xa7\xf8\x55\xc3\x04\xb6\x56\xb4\xe9\x75\xdc\x0c\x0f\xba\xeb\x18\x0e\xfd\x31\x80\x67\x57\x43\x65\xd0\xd4\x43\xe8\xb9\x68\x70\xab\x83\x0e\xad\xaa\x09\x79\x6d\xeb\xc5\xb4\x8a\xa2\xdb\x17\x56\x30\xfe\x5b\x75\xad\x72\xb8\xb9\x1b\x5d\xfc\xbe\xec\x52\x3b\xfa\x3c\xb8\x2b\x87\xe0\x08\x26\xb7\x8e\xd0\xf8\x34\xcb\x73\xa3\x82\xde\x12\x8d\xed\x4d\xcc\x6e\xad\xeb\x9c\x25\x52\xc9\xd4\x8a\x8c\x76\x17\x7d\xb7\x06\x4d\x72\x8f\xd2\x46\x82\x07\x74\x55\x3b\x35\x06\x31\x41\x2a\x99\x1f\x7a\x72\xe0\xef\x05\x15\x3f\x9e\xf1\x80\xa3\xb1\xe4\x5d\x87\x10\x51\x71\xae\xf0\xde\xc5\x1c\xaa\x15\xec\x5e\xa1\x84\x63\x32\xe5\x33\x6f\x77\xf8\xd8\x01\x81\xf3\x2f\x23\xbb\x01\xf8\x47\x5c\xe1\x44\x39\xf1\xc8\xed\x21\x67\xa0\x29\xdf\x2a\x26\x69\x10\x52\xb0\xcb\x1a\x32\x25\x43\xe7\xeb\xa4\xa1\x6d\x45\xeb\xb5\xce\x97\x29\xfb\x55\xe3\x75\xbb\x07\x18\x71\x33\xb0\x40\x81\xf6\xc1\x72\x65\x63\xda\xae\xa0\x55\x5c\x76\x55\x3a\x88\x95\x3b\x93\x4a\xd0\xd4\xd0\x94\xd6\xc3\x77\xd7\x89\xe5\xa5\x64\xe2\x03\x18\xc5\x8f\x15\x9e\xae\x21\xdf\x90\x87\x4a\xcd\xd5\x5e\xf4\x24\x92\xa7\x48\x05\xf7\x35\x6d\xf8\x9e\x4e\xd1\x86\x07\x2a\xa3\xfd\xc8\xc8\x1d\x17\x44\xab\x0d\x81\x99\x68\x65\x04\x10\xec\xc3\xc0\x31\xf3\xc9\x3c\x78\xc0\xc6\xff\xb7\x9b\xb1\x48\xf2\x2c\x98\x23\x8f\xfd\xa0\xa0\xf1\x12\x85\x09\x09\x96\x36\x3e\xfc\xce\x00\xd3\x4a\x6b\xee\xab\x66\x36\xcc\x6d\x60\xbf\x36\x8d\x11\x80\x40\x37\x30\x70\xe9\x22\x71\x2f\x5c\x7d\x09\xdf\x5a\x7f\x2b\xa7\x01\x08\x58\x2d\x68\xde\x7a\x51\xd0\x5c\x32\x1d\x03\xdf\x2b\xb2\x23\x1b\x57\xcb\x94\x80\x76\xb8\xdd\x37\x7e\x16\x4f\xe0\xff\x42\x29\xb1\x9d\x6b\x5f\x3b\x89\xa1\x76\x82\x4f\xa8\x6e\xb3\x75\xda\xb8\xd3\x40\xf5\x56\x06\xeb\xdd\x93\x50\x07\xb2\x4e\x37\x22\x50\xbb\xaa\x7b\x0e\xe5\x8d\x3a\x8d\x00\x1c\x27\x9a\x95\x5c\x0f\xab\xd6\xae\x6a\xf0\xe1\xa6\xb8\x4d\x32\x6e\x0f\x65\x57\x92\x71\x33\x14\xa7\xac\x27\x0a\x2a\x81\x73\xee\x28\xc0\x80\xcf\x6f\x12\xb2\x50\x98\x14\x08\x4f\x04\x13\xdf\x43\xc5\x79\xd9\xde\xb7\xad\x22\x69\xeb\x73\xe4\xcd\xbe\xd3\xfc\x7a\x35\xcc\xec\x36\x42\x8b\x21\x23\x99\xb6\xb7\xfa\x2f\x9d\xc5\xd5\x87\x76\xc7\x75\xd5\xc5\x9d\x25\x35\x61\xcb\xa1\xd4\xb1\xad\xe0\x66\xfb\xd5\x4d\x59\x7c\xb7\x2f\x6f\xd6\xb2\x5f\xdf\x8a\xba\x9e\xce\x50\x57\x44\xb6\x93\x53\xdd\x06\xfe\xf6\x67\x67\x77\xfc\xd8\x75\x65\xc3\x52\x76\x54\x1d\x79\x31\xa0\x12\xb6\x3c\x27\xcd\x34\xba\x54\x3e\xc4\xb4\x99\x5f\xfd\x23\x71\xfd\x18\xe9\x22\xe9\x0c\x11\x73\xbc\x61\xf8\x0c\x57\x1d\xce\x28\x87\x48\xb4\x53\x75\xbb\xb5\x1c\x98\x54\xa9\x7d\x0e\x63\x52\x83\x55\xc6\xb1\x7f\xa5\x54\x70\xcf\xc4\x71\x69\x3d\xc8\xcc\x9f\x9e\x17\x87\x78\xee\x7b\x96\x49\xb4\x02\xe3\x50\xda\x33\xc2\x43\x24\xbf\xce\x95\x43\x5f\xd5\x27\x3c\x2b\x88\xf4\xca\xb1\x18\x2c\xc7\xc4\x4b\xb4\x22\x84\xe7\x0f\xc4\x81\x43\xfd\x40\x74\xa0\x2e\x41\xce\x4e\x13\x57\x2b\x01\xef\x4b\x23\xe0\x09\xb6\x23\x8e\x55\x4c\xb8\x1e\xb4\x25\x0c\x47\xcf\x13\xae\x50\xfc\x1d\x70\x17\xdb\xd1\xdb\x5f\x34\x66\x8d\xe8\xf9\x1d\xf1\xd2\x13\x8b\x47\xef\xb7\x83\xa5\x9c\x9e\x7a\x70\x29\x0e\x52\xc4\xf6\xa4\xe8\x7d\x5e\x30\xae\x1f\xc1\xa9\x22\xd3\x56\x57\xd3\x1f\x54\xec\x6a\xad\xaa\x0e\xad\x95\x4e\xb8\x84\x19\xae\xa6\x6c\xa6\xd3\xab\x6c\x89\x4c\x09\x8d\xea\x0e\xd1\xce\x3f\x72\x60\xef\xab\x8c\xd5\x8b\xb2\xba\x74\xec\xe2\x3f\xfd\x00\x41\x27\x2f\x53\x2d\x07\xc7\xea\x33\x7a\x0b\x4a\x8a\xbc\x4d\xd5\x5d\x75\xec\x1d\x97\xd7\x68\x6b\xef\xfe\x7d\x58\xb2\xb0\x62\x7b\xab\x4d\xb8\x55\xc1\xe9\x2a\xd8\x64\xce\xed\xc8\x8c\x33\x42\xad\x58\xdc\xdd\x9a\xe0\x53\x32\x03\x42\x09\x0d\x54\xe6\x2a\xb1\x33\xf0\x29\x27\xcc\x8d\xa8\x7c\x9d\x2d\x13\x35\x60\xc2\x78\x25\x2d\x5e\xc8\xe1\x04\x9c\xa9\x7c\x7a\x03\x98\xb8\xbb\x8c\xe4\x0e\x5b\x6c\x87\xc1\x88\x1b\xf2\x6d\xeb\x86\x64\xf2\xa1\xc9\x34\xff\x8c\x28\xa5\x33\x58\x63\x48\x6e\xaf\xcc\xd7\xbf\x78\x5a\xfb\x8f\x1e\xc2\x0a\xa6\x24\xad\xe8\xaf\x40\xee\xba\x35\x11\x18\xb5\xf2\x7b\x0a\x22\x17\xc9\xd0\x1c\x1f\x9b\xea\x66\xe9\xe3\xfd\x28\xd3\x83\xfb\x08\xd2\x6a\xba\x0f\x94\xe4\xac\x90\x0e\x7c\xc8\x27\x36\x2f\x56\x79\x03\x1a\xc9\x0e\xaa\x85\x59\x23\x87\x44\xbc\xbe\x89\xaf\x43\x71\x47\x6a\xeb\xc3\xa0\x78\x70\x3c\x55\xe3\x81\x3f\xb2\x4a\xff\x65\xef\x1f\x9b\x92\xcd\xe2\xa6\xd9\x31\x87\x79\x4d\x23\x5e\x9a\x82\x46\xee\xb2\x55\x5b\x5f\x2a\xc4\xbe\x0f\xc6\x39\x2d\x41\xad\x65\x6b\x92\xc7\xad\xb2\x18\xcc\x8b\xe9\x5a\x66\x71\x6a\xf5\x0a\xf3\x09\x4d\x39\x67\xd9\x9c\xb9\xfe\xf6\xdd\x76\x4c\x15\x79\x06\x5f\x87\xce\xe0\x6b\xf7\x0c\xbe\xd2\x67\x10\xea\x03\x87\x38\x26\x1f\x39\x61\x79\xf2\x8c\x60\x80\x71\x9d\xb4\x1c\x0a\xea\xd5\x92\x54\x1d\x60\xf0\x4a\x31\xe3\xf2\x85\x52\xd3\x2d\x7f\xc9\x5c\xb0\x26\xda\x55\x61\xe2\x78\xbf\xe0\xd0\xaa\x27\x80\x34\xe8\xc6\xa8\x4a\x5e\xc5\xfe\x29\xdb\x53\x8b\xb4\x52\xa5\x15\x2b\xad\xc2\x78\x2b\xb2\x2c\xb2\x39\xf1\x3f\xa3\x91\x4f\xe9\x3d\xa4\x19\xaf\x57\x05\x1f\x96\x8b\x61\x36\xac\x49\x75\x45\xaa\xe1\x3f\x57\xa4\xba\x19\x26\x8b\xb2\x1a\x66\x45\x31\x6c\xab\x81\x20\xdd\x52\x8d\x86\xb4\x1e\xd2\xcb\xcb\x15\x50\x91\xf1\xf0\x7d\x39\xbc\x2c\x73\xba\xb8\x19\xaa\xaf\xae\x31\xe4\xf6\x37\x49\xe8\x22\x71\xcb\xde\x2c\xc9\x44\xce\xbd\x4a\xb2\x97\x27\xee\x92\x87\x62\xdc\xbd\xde\x8f\x76\xd0\x19\x28\x7d\x37\x1a\x57\x24\xcb\xdf\xb0\xe2\x26\x41\x58\x62\xa3\x1f\xf3\x67\x2a\x2c\xa5\x6d\x0b\x69\xba\x71\x18\x66\x79\xac\xeb\x26\xc4\xcf\xfc\xea\x45\x1a\x4a\xf5\x4b\xf8\xc6\x11\x7c\x79\xdb\x4b\x44\x2f\x73\x84\x50\x3b\xcc\xc6\x2e\xe8\xc0\x6e\x2e\xa7\x0e\xd6\x02\x8f\x66\x2b\x64\xff\x49\x38\x5a\x9f\x84\xb7\x09\x0e\x62\x45\xb5\x21\xa4\x34\xb0\x54\x7b\x10\x87\x5e\x32\xc5\xe0\x7e\xe4\x98\x6f\xf0\x69\x7b\x7a\xc2\xf9\xc0\x8e\x55\x3a\x51\xc7\x6a\x74\x2b\xcd\x77\x93\xd1\xc1\x06\x6d\xf0\xe9\x72\x55\x5f\xf8\xe1\xde\x93\x6e\x5d\xbd\xbb\x8c\xa2\xa2\xbc\xe7\xa4\x3d\x59\x29\xec\xef\xd5\x96\xac\xea\xb6\x56\x67\x57\x1d\xab\x8f\x15\x58\x87\x63\x03\x71\x21\x3b\x9c\x2f\xf5\xc0\x3b\xd4\xfc\x8d\x75\x82\xd5\xb1\x84\x39\x95\x38\xc2\xe2\xfe\xe9\x0e\xd6\x23\x1b\xa4\x30\x48\x83\xfd\xaa\x52\xce\x73\x2b\x11\x7e\x34\x61\xa1\x3a\x98\xa2\x82\x59\xcf\x69\x5d\x97\x73\x9a\x71\x30\x93\xbc\xb9\x66\xb2\x76\xdd\xb1\xe1\xb5\xc6\xdb\x91\x39\xfb\xb0\x5d\x78\x43\xc7\x33\x90\xa1\xdf\xa0\x32\xd0\x09\xec\x4e\x57\xac\x22\xe7\xb4\xe6\xa4\x12\x43\x50\x36\xcf\x16\x9d\xbe\x54\xb6\x50\x5b\xda\xf9\x4e\x6d\x11\xbd\xa6\x85\xc6\x2a\x68\x13\xfa\x60\x3f\xc6\x31\xb2\x6b\x22\x92\xb6\x5e\xb5\xa1\x23\x68\xbe\x56\x9c\x04\x3e\x30\xd7\x6d\xf7\x0d\xb3\xc1\xa7\xbe\x07\xf9\xa4\xc3\x83\xfc\x1f\x5a\x9f\x6e\x16\x40\xb0\x24\x11\x24\xb6\xc1\xde\x35\x1f\x38\x8b\xdd\xfb\xbd\x3b\x09\xac\x3f\x2c\x89\x01\xb2\x41\xf8\x39\x49\x5f\x11\x7d\xa9\x86\x6f\xd4\xc0\x7d\xe9\xef\x98\xf5\x5a\xdd\xd2\x0e\x47\xb2\xed\x12\x86\xcb\x2b\xb5\x7f\xba\x57\x25\x84\x23\xa7\xf6\x4f\x9d\xa2\xfd\xc7\xdf\x95\xe0\x0e\xd5\xbc\x26\x1b\x17\x64\x84\x82\x64\x50\x1e\x9a\xe6\xcc\x03\x41\x14\x87\xbc\xf5\x06\x7a\xb4\xe7\x95\x8c\x4f\xe1\x49\x93\x68\x4a\x1e\x54\x74\x59\x13\xde\x49\xe2\x8c\x3e\xa4\x71\x54\x6b\xc2\x2d\x6d\x33\xdc\x8d\x6f\x6a\x76\xe1\xea\xf5\x8d\x30\x19\x1d\xca\x00\x70\x0f\x63\xec\x56\x67\xc1\x47\x2a\x22\xbc\xfd\x16\x9e\x23\x2d\x2f\xe8\x33\x7c\x9a\xe9\xb3\xf6\x1d\xe5\x17\xee\x39\x56\xca\x76\x63\x1d\x77\x92\x48\x68\x2f\xba\x6a\xc5\xc6\x25\x9b\xab\xf3\x10\x29\xcf\xa8\x08\x3b\x59\x73\x36\x08\x7f\x4d\x82\xb8\x30\xf8\xab\x4e\x51\xc7\x87\xdb\x75\x54\xff\x8d\x70\xaf\xc3\x16\x86\x88\xc5\x1c\x29\xe8\x95\xef\xe2\xd1\x0d\x99\xaa\x80\x41\x7b\x4a\x28\xb1\xe2\x6d\xb9\x5c\x41\x16\x68\xaf\xe1\xe9\x6c\xa3\x35\x81\x2d\x55\x16\x6f\x3a\x8c\x84\x3c\x44\xec\x9e\x02\xc3\x1d\xd9\x06\x55\x2a\x73\x88\x6c\x41\x33\x3d\xf0\x02\x6e\x54\x69\x70\xb8\x4b\x2a\xb0\xc0\x4d\xf9\x6c\xbd\x9e\xce\x90\x4e\x61\x1a\xc7\x5f\x13\x07\xab\x27\x83\x51\xaa\x9c\x7c\x6a\x1a\x16\xd0\xfb\x46\xec\x26\xf9\xf7\x5b\xd9\xac\xbf\xf9\x5f\x96\xd5\x6b\xa3\xec\xf3\x0f\x82\x95\xbb\xa7\x33\xcc\xd2\x83\x47\xcc\x0a\xdf\xc6\x33\x8e\xa6\x7c\xca\x66\x03\xba\x0b\x62\x2b\xed\xc4\x32\x4d\x90\x71\x3f\xb5\x08\x84\xc1\x9d\x31\x25\xb3\x41\x19\xc7\xbd\x23\x9d\xce\x54\xda\x5d\x33\x5c\x6a\x1d\xf9\x20\xed\x4f\x96\x76\xe3\xaa\x26\x08\xd7\x69\x39\xf6\xef\xdf\x6c\xbd\x2e\x5d\x60\x55\x79\xc8\x08\x02\x6f\x34\x18\x77\x89\x30\x58\xff\xc1\x21\x27\x03\x8d\x82\x7d\x6e\x6e\x6e\xb4\xa9\x1c\x27\x66\xb1\x33\x5a\xdc\x5b\x52\xa1\x01\xf3\x0b\x85\x18\xb3\x84\xa1\x4d\x52\x42\xac\x89\x53\xd8\xdd\xb0\x26\x4d\x71\x7a\xf0\x88\x3f\x36\x8e\x8d\x7c\x6f\x0f\xfd\x40\x12\xf0\x45\xd8\x80\x2b\x9c\xde\x20\x5d\x0e\xdf\x7a\x3f\x9a\x06\x21\xa3\xdc\xd6\xd3\x48\x90\xb3\x11\xb7\x6e\x3e\xed\x1e\x01\xc3\xa9\x6f\xd8\xfc\x2b\x7f\xe5\x7b\x34\xa4\x6a\x10\x53\x2e\x16\x5f\x8a\xc0\xb4\x76\x32\x30\x8f\xd8\x7a\x0d\x5a\x18\xed\xf6\x5a\xa6\x7e\xb0\x27\x1c\xe9\xd7\xd9\x12\x64\x27\x84\x33\xe7\x92\x29\x0d\x5f\x82\xd2\xd4\x73\x8f\x34\xcf\x25\x58\xc9\x7a\x3d\xca\xd0\x2d\x33\x26\xac\x9d\xbf\xba\x6a\x20\x65\xd8\xaf\x41\x66\xc6\xb5\x8e\xe2\x8a\xd6\xf4\xac\x68\xec\x84\xa7\x80\x5f\x2a\x06\xbe\x12\x5b\xbf\x48\x0f\x1e\x15\x16\x64\xb3\xd0\x5b\x7f\x9e\xd6\xd3\x62\x86\x17\xe9\xbc\xb1\xb7\x47\x82\xce\x2c\xd4\x86\x8e\xe3\x64\xa1\xb6\x31\x5e\xc9\x1d\x3c\x47\x68\xb3\x52\xcd\x75\xed\xd9\x95\x22\x34\x26\x2f\xc0\x71\x51\x74\x86\xed\x84\xce\x34\xf7\x9c\xbd\x71\x4b\xaa\x82\x3b\xd1\xab\xd6\x0c\x96\xdd\xd6\x03\xc4\xad\x28\xae\xa9\xbd\xbd\xc4\xf6\x73\x00\x0f\xaa\x1d\x26\x9c\xa0\x81\xea\xcf\x35\x3c\xeb\xfb\xb8\x42\x1d\x77\x1b\x84\xb6\x38\xb1\x90\xbc\xb7\x97\x34\x7c\xa2\xbb\xf7\x2f\x41\xca\xa5\xa0\xc6\xbb\x10\x6e\x58\xfc\x5d\x09\xb3\xe3\x06\xd2\xfe\xe6\xe0\x01\x7d\x65\x61\x75\x2c\xca\x13\x31\x60\x18\x9a\x9f\xe5\x70\xb9\xe1\x16\xf2\x8e\xcb\x55\x29\x26\x08\x5e\x6f\x0c\xbf\xe7\x1f\x77\x8e\xe2\xf8\xa9\x3a\x54\xce\x28\x8f\xbb\x39\x82\x2e\x98\xb1\x70\xfb\x15\x3a\x7a\x4a\x92\x0a\xd3\xf4\x79\xf8\xc3\x80\xf7\x9c\xf0\xd6\x07\x56\x81\x8f\x73\x3f\x08\xdf\x91\x7f\x64\xbd\xfc\x23\x33\xfc\x23\x9a\xdc\x79\xa8\x5b\x46\xba\xd9\x85\xcd\xd2\x3b\x06\x53\xb1\x08\x41\xd1\x73\x07\xde\x2a\xb4\xa1\xc8\x98\xb2\x9c\x7c\x7c\x23\x0e\xb3\x28\xb4\x7f\x38\x4a\x53\xe3\x64\x23\x13\x45\x00\x84\xcf\x21\xc2\xa3\x83\x81\x81\x15\x4f\xb6\x0f\x1a\x13\xe4\xdf\x2b\xad\x93\xcb\x67\x42\x10\x27\x52\xa1\xef\x11\xed\x40\x51\x49\x10\xbb\x38\xf6\xc6\x69\x79\xaa\xb1\x00\xf8\xd8\x91\xc5\x3b\xb0\x14\xda\xb0\x09\xcd\xee\x3b\x94\x0b\x56\x46\x0a\x8c\xd7\x41\x73\x40\x3b\xad\xb1\xee\xe2\x25\x69\xe3\x16\x02\x40\x02\x0f\x61\x42\x04\x24\x83\x03\xbc\x8d\x99\x75\xe6\x04\x6d\x1a\x9e\x15\x2f\x55\x72\x55\x3b\x7c\xf3\xea\x07\xe2\x6e\x2e\xff\xd6\xe3\xe1\x29\xe2\x1d\xdc\x16\x44\x16\x8a\x79\x31\x80\xb8\xa6\x97\xa7\x6d\x3b\x15\x66\x36\x90\xa4\x7a\xcc\xa4\xad\x8a\x4c\xab\x99\x3f\x08\xb8\x68\xb9\x9b\x6c\xe6\x1b\xc7\x4d\x04\x97\x72\xec\x9a\x1d\x39\x4e\xe8\xee\x7a\x87\x52\x72\x29\x48\x02\xf7\xd6\x29\x77\x50\xcb\x04\xa3\x20\xb5\x8b\x00\x92\xc0\x71\x8d\x19\x16\xc4\x44\xea\xe5\xbe\x94\xc1\x4e\x8a\x68\xfe\x87\x2e\x27\xe4\xfc\xdf\x46\x7b\xd5\x5e\xf4\xdb\x48\x9c\x3c\x63\xdc\x5a\xa1\x96\x76\x40\xed\x1b\xd3\x87\x52\xb1\x91\x7c\xb8\x62\xd2\xa6\x96\x63\x38\x39\xc3\xeb\xac\x1e\x5e\x91\xea\x66\x58\xd0\x0f\xa4\xb8\x19\x66\xc3\x4b\x5a\xf3\xec\x03\x31\x22\x7d\xb2\x4a\xbf\x4c\x56\x98\xe3\xa2\x8d\xa4\x45\xb4\x05\xf0\xdb\x84\x8f\x6b\x0d\x8c\x5a\xa9\xaf\x14\x1f\xa6\xd0\x57\x22\x3d\x12\xc7\xd7\x43\x32\x32\x82\x8f\x76\xb5\x83\x2f\x3e\xf2\x2a\x9b\xf3\xe1\x32\xbb\xb1\x88\xb6\x95\xb3\xdc\x5f\x92\xc6\x55\x81\x3b\x90\x24\xfc\xab\x83\xa0\x23\xe9\xb8\xc2\xd1\x44\x2c\xcc\x26\xe1\x00\xcd\x88\x5b\xea\x3f\x0a\x29\x3b\x70\xa9\xb2\x74\x0c\x5a\x89\x87\x74\xef\x64\x4c\x73\x85\x48\x43\x64\x51\xd2\x8a\xbf\x21\xed\xf8\x1b\xe3\x17\xe4\xbd\xc1\x59\xe0\x2a\xec\xec\x5a\xf7\x2a\x2d\xc7\xdf\x55\xd9\x72\x49\x2a\x5c\xa6\x15\xe4\xec\xc2\x99\xde\x6f\xa0\x7b\xa9\x05\x83\x61\x30\x4b\xbc\x00\x9f\x4c\x21\x7a\x29\xb4\xc7\x55\x4a\xc7\x3d\x46\x68\x86\xa6\xf5\x0c\x6e\x3e\xe9\x07\xab\xa2\x6c\x54\xdb\x7f\x25\x37\x93\x1a\x8b\x17\x93\xd5\x66\xb3\x31\x83\xdd\x24\x15\xe6\xe0\x77\x25\x7a\x52\x9e\x83\x75\x9a\x8d\x6d\x3d\xbc\x4a\x65\x93\xb8\x48\xcb\x69\x3d\x8b\x63\xf1\x5f\x58\x9f\x81\xeb\x3f\xbb\x8a\x63\xb3\xed\x8b\xf5\x3a\x11\xa5\xa0\x02\xa0\x54\x98\x3a\xe1\x98\x42\x88\x8c\x84\x85\xad\x9c\xc9\xc9\xd2\x5b\x9a\x4f\xa8\xb4\x04\x95\x1b\xaf\x3b\x7e\x94\xb0\x94\x38\x82\x7f\x86\x26\xf2\xc9\xed\x06\x7b\x97\xbe\x38\xbf\xc8\x49\xdd\x5d\xe0\x15\xe6\x08\x6d\x36\x90\xa5\x97\x60\x86\xb0\xd7\x8d\x20\x65\xb2\x67\x18\x12\x3c\x75\x47\xe5\x2d\xc2\x24\xa1\xe9\xed\x06\xd3\x29\x58\xbf\x67\xe9\x2d\xb0\x24\xdc\xc5\x34\x54\x1a\x2b\x0c\x01\x4f\xe5\x06\x53\xb4\xe9\xe0\xd0\xb4\x5d\x37\x17\xb2\xb3\xfd\x25\x1d\xfc\xcc\x4f\x13\x8a\xca\xed\xc1\xfb\xb6\x79\xf0\x1a\x44\x4d\x1c\x98\x25\x21\x1f\x8e\x8b\x42\xfc\x14\x32\x7e\x43\x49\x9c\x30\x41\x0a\x03\x36\x05\x05\x35\x9d\xf4\x98\x10\xac\x35\x06\x53\x49\x2e\x32\xc7\xd6\x93\xd4\xe9\x97\x49\x8d\x39\xee\xa2\xa0\xc7\x45\x21\x49\x09\xbd\x3b\x15\xa3\x1e\x15\x3b\x2e\x8a\x10\x11\x6b\x4a\x5f\x30\x23\xdb\x28\x9b\x1e\xd9\x6f\x2c\x67\xb8\x89\xa4\x02\xe6\x9f\x24\xcd\x92\xe8\xf9\x8b\xa7\xdf\xfc\x79\x9f\xd7\xfb\x67\x55\xc6\x72\x37\x7b\xdb\x77\x9e\x4b\x9e\x5d\xa5\x3f\xff\xe2\xbd\x36\xbe\x27\xf8\xaf\xdb\xb4\x99\x9e\x3b\xdc\xf4\x9f\x64\xe6\xbb\x4a\x08\x7e\x44\xce\xb4\x81\x2d\xa8\x83\x09\xbd\xcc\x6b\x59\xba\xde\xa1\x99\x66\x0a\xa4\x56\x13\x5a\x85\xd9\xe7\x93\x77\x2a\xa8\x88\x3a\x1b\xdd\xe8\x4b\xca\xed\xc7\x29\x0b\xa6\x3b\x6a\x41\xa0\x1b\x9d\x77\x2a\x61\x04\x65\x4d\xfa\x87\xdd\xfb\xd6\x55\x6e\x62\x2e\x58\x77\xe3\xb9\x11\x9a\x24\xbd\x4a\xe1\x09\x3c\xf0\x50\xe3\xd4\x47\x5a\x5d\xf6\x80\x8d\xff\x51\x52\xff\x94\x33\x87\xff\xac\x6f\xd8\xdc\x8b\xb6\x8d\x70\x85\x2b\x5f\xa3\xd3\x1c\xbf\x34\xf3\x60\xda\x1b\x99\xe3\x05\x98\x9f\xa8\x9f\x98\xa6\x67\x89\x33\xd2\x7e\x38\x67\x86\xac\xf2\x4a\x97\x17\x34\x2f\xa1\x68\x50\xc6\x71\x28\x32\x28\x91\x2b\xda\x37\xfa\x66\x9a\xc1\xc3\x2d\x93\x1f\x50\x0e\x36\x9b\x1c\x6c\xdb\xc3\xfd\x47\x60\xd0\x52\x75\xa8\xaf\xd5\x31\xea\x96\x9e\xa4\x5f\xe8\x29\x15\x0c\xb6\x38\x10\xd3\x6a\xef\x70\x66\xae\x83\x84\x79\x53\xe3\x81\xe5\x24\x54\x26\xcc\x1c\x77\xf8\xe0\x6d\x3d\x3a\x5d\xbe\x7b\xf2\x18\x75\xb3\x32\x5b\x1b\xee\xe1\x82\x64\xdb\x61\x86\xaa\x47\x4b\xda\xf0\x11\x21\xbe\x9b\x42\x6f\x7f\x42\x3a\x3c\xb5\xdc\x92\xbb\x20\xb8\x72\x47\xa3\xa0\x88\x7f\xf2\x41\x69\x24\xe7\xf6\xc0\xb6\x40\xe8\xf8\xfc\x84\x39\x93\xe5\x5d\xce\x24\x15\xbc\x46\xe8\x4c\x96\x68\x90\xc5\x71\x16\x0e\xc3\x65\xce\xf0\xba\x00\x9c\x3e\xcd\xe8\xd4\x51\xec\x20\xe9\x49\x89\xdd\xa1\x74\x03\x3c\xfd\x84\x53\xd5\x84\x89\x72\x07\x18\xc6\xf4\xf9\x09\x07\xe7\x0c\x40\x0d\xcc\x06\x02\x75\x22\xf7\x62\x2a\x88\x1a\x5d\x24\x7c\xbd\xae\xb4\x29\x4a\x0f\x73\xc0\xee\x32\xcc\x12\x6d\x48\x51\x93\x21\x15\xec\x10\x53\xd1\x72\x64\x33\x08\x50\x11\x6f\x60\x00\xa6\x20\x86\xeb\x04\xa4\xb7\x06\xeb\xd6\x76\x03\xd7\xe5\x6b\x38\xe9\xe1\xe4\x7c\x9f\xf9\x6e\xd3\x31\x38\x40\xc8\xbd\x21\xc8\xeb\x2d\xa7\xf5\xbc\x64\x8c\xcc\xdb\x09\xdc\x7e\x82\x4b\x37\x08\xab\x9a\xb4\x9c\xe8\x6d\x24\x1a\xc4\xdf\x74\x39\x74\xfa\x23\x93\x3e\x9c\x7f\x0e\xf9\x70\xfe\xd9\xf1\xe1\xb4\x8c\xf9\x6f\x7e\xd1\x0c\xb8\x19\xe6\xff\xd1\x21\x3b\x16\x0d\xc5\xd1\x23\x99\x38\x41\xa5\x50\x02\x5d\xd1\x45\x56\xb3\xdf\xf2\xe1\x19\x21\x6c\xa8\x30\xf1\x69\x4d\xf2\xe1\xfe\x10\xdc\x60\x12\xe4\x95\x98\x03\x90\x8e\xe3\x19\x02\x5c\xf3\xdf\x08\xfe\x0b\xc1\xff\xdd\xe1\xe5\x40\x78\xaa\x1c\x13\x5f\x7c\xfd\x2d\x6e\x0a\x68\x15\xce\xec\x34\xd7\x89\x0e\x08\x57\x12\x20\x4f\x49\xd8\x11\x47\x22\x77\x21\x97\x05\x4d\x9f\x61\x1e\x00\xac\x80\xb0\x86\xaf\x4c\x0a\x82\xff\x43\x12\x0e\x3e\x20\x0a\x0f\x80\xce\xe1\x36\xd4\x85\xb5\x28\x61\xd4\xb4\x3d\xc9\x63\xc7\xa7\x56\xae\xec\x2f\xe6\xe8\x73\x60\x38\x7f\x25\x09\x8c\x03\xde\x2a\x76\xee\x24\xbb\x22\xc0\xc2\x69\x37\xcb\xdc\x07\xbb\xf1\x5e\x35\x52\xd1\xc8\x77\xaa\xa1\x97\x84\xcf\x2f\x74\x30\x07\xd8\xa1\xc5\x83\xf6\x07\x8a\xbb\xeb\x32\xb3\x1c\xc0\x09\xa9\xae\xa8\x93\xda\x77\x7c\x2a\x44\xdb\x0f\x24\x3f\x96\xcc\xfb\x3f\x57\xa4\x76\x9c\xeb\xc7\x35\x04\xd0\x1d\xd7\x35\xa9\xf8\x6b\xc2\x2f\xca\xfc\x59\x56\x14\xf5\x1b\x66\x14\xd6\x27\x20\xef\x09\xd9\x4b\x15\x7e\x2f\x1a\xf4\x9b\x83\xb7\xe7\x84\x91\x2a\xe3\xe4\x84\x67\xf3\x0f\xa2\x10\xa9\x5f\x96\xd5\x7b\xd9\xbd\x5f\x54\x0e\xca\x6d\xe3\x84\x67\x15\x6f\x8e\xda\x2d\xf0\x82\xe5\xce\xeb\x53\x80\xc6\xff\x2e\xa3\xdc\x99\x8d\x4d\x26\x89\x4a\x8d\x2c\x41\x68\xac\x66\x66\xdf\xa8\x14\x66\xca\x5d\x7e\x5e\xb2\x9a\x57\xab\x39\x2f\xab\x14\x64\x9a\x53\x78\x77\x7a\x9a\x66\x12\x78\x0c\x17\x78\x8e\x17\x69\xdd\x96\x29\x17\xd2\xbd\x57\x7f\x06\x27\x7a\x0d\x1c\x02\xb6\xc1\x0b\xc1\x92\xd5\x3c\x63\x9c\x06\xb1\xe8\x54\x09\xb9\x23\x9e\x07\xd3\xbf\x29\x65\xbe\x7d\x25\x08\xe9\xa2\x93\xd5\xee\x40\xf1\x3d\xd2\x6e\x5c\x27\xe1\xad\x93\xa0\x2e\x9e\x1f\x14\xb4\xf7\xae\x4c\xe4\x60\x77\xe2\xfc\xef\x38\xde\xbe\xe8\x9c\x5d\x86\xbc\x45\xa4\x58\x8c\xb5\x95\xae\xa3\x89\x36\xf4\x42\xe7\xb9\x24\xa2\xb9\xee\xc1\xb4\x76\x44\x00\x44\xbd\x75\x83\x77\xc2\xa3\xb7\x25\x83\x6a\x26\x5a\xbd\xec\xd1\x7f\x84\x24\x92\x77\x44\xd9\x4c\x06\x8d\xb8\x9d\x10\xa9\x7c\x47\x54\x10\x58\xa5\x50\xe1\x19\x38\x69\xe9\xd3\x62\x5a\x80\x4b\x12\x5e\x01\x99\x7b\x2f\x2f\x67\x84\x99\xb4\x48\x62\xb5\x5f\x76\x51\xd7\xf4\x2e\x6e\x5e\x92\xfa\xfd\xcd\x92\xbc\xf8\x48\x6b\xae\xd6\x73\x1e\x04\x84\x6c\x6a\x6e\x54\x17\xff\x4d\xda\x5a\x11\x8b\x49\xe5\x64\x88\x6b\x95\x92\x3c\x77\x29\xa1\x11\x5b\xae\x8c\x1a\x0f\x92\xd6\x5f\x97\x4c\x90\x26\x9a\xa3\x38\x86\x7f\xd3\x6a\x7c\xaa\xc9\xe9\xab\x3c\xa1\x38\x43\x08\xc3\x0b\x26\xcb\xa9\xb4\x1c\xbf\x49\x2a\x34\x3e\x5b\xd1\x22\x4f\x24\xb7\x4b\x31\xcd\x27\xa2\x84\xf5\x03\xa8\x1d\x38\xe7\x04\x5c\xae\x7c\x40\x4c\x78\x66\x03\x14\x40\x77\x0b\x6e\xd4\x0b\x77\x0c\xdd\x92\xaa\xba\x62\x7d\x21\x15\xbc\xb2\x6d\x6d\x10\x7b\x45\xf3\x47\xc1\xa7\x6a\xc1\xb1\x0e\x30\xc6\x8b\x8e\x04\x98\x1d\x14\x30\x9c\x46\x10\x0a\xfb\x79\x38\x45\xe1\x05\x6d\x81\x1a\xbb\x7b\x49\xbc\x56\xc5\xa5\xdd\x79\xe1\x3c\xea\x60\x9e\xd5\x0a\xd3\x84\x23\x5c\xa7\x27\x60\x73\xc0\x2b\xc5\x18\xa3\x71\x51\x96\x1f\x56\xcb\xa4\xb6\xb3\x93\x56\x16\xbc\xdb\x84\xd7\xbf\x2c\xab\x57\x39\xd4\x3d\x7a\xa7\x5d\xa5\xec\x60\x56\x82\xb5\x05\x6d\x35\x5c\xc8\xff\x61\x5f\x0d\xa3\x3d\xb6\x17\x49\x5c\x44\x9a\x4f\x86\xd1\x9e\x26\x7a\x32\x9f\xc2\x8d\x0f\x34\xb8\x02\x71\x65\xe1\x36\x1e\x40\x66\x57\x39\x2b\xfc\x78\x13\x2d\x28\x03\x73\xe2\xc2\xa1\xb7\x8c\xac\xdc\x64\xc0\x71\xb7\x47\x20\x4c\xd2\x66\xd6\x52\x3d\x42\x46\x16\xe0\x33\xde\x39\x49\x2f\xc3\x4f\x55\x3a\x52\x74\xd4\x35\xbc\x49\x02\x5e\x3c\x1c\x38\xd9\xf3\xaa\x5c\x31\x55\x1f\x2c\x2c\xed\x87\x23\xdd\xcb\xd3\xc6\x2b\xd9\xdf\x7a\xdd\xff\x5e\x8f\xc7\xa0\x8c\xb7\x47\x84\x7b\x6c\x2c\x04\xd9\x85\x69\xac\x5a\x78\xc3\x36\xd2\x92\x41\x14\xa5\x86\x3e\x8c\x63\xe2\xa2\x20\x26\xe6\x05\xc2\xee\xee\x02\xbf\x4d\x7f\x83\xc0\x30\xbb\x76\x1a\xf1\xc2\xbb\x9c\x3d\x07\xa9\xb3\xcd\xf0\xdb\xcd\x86\xbf\x80\x58\xd7\xd1\xee\x45\x24\x2e\xbe\xfa\x11\x19\x9f\x2e\x9d\xe4\x1e\x93\xde\x09\xd5\xc7\xf7\xe9\xcd\xab\xbc\xee\xf4\xe2\xb5\x50\x9f\x5a\x18\x14\xdb\xb7\x94\xb8\x85\x2d\x77\xd9\x6a\x4a\x15\x04\xb3\x73\x3c\x19\xe6\x53\x3a\x33\xdb\xfa\x6d\xe2\x0c\x2b\x03\x9b\x93\xb4\x6d\x29\x87\x05\xc7\xf8\x64\x27\x19\x06\x29\x6d\x61\xe2\x40\xeb\x2c\xab\x91\xde\x16\x62\x46\x7a\xee\x2c\xd7\x49\xa8\xc3\x3c\xed\xba\x4e\xd0\x96\x63\x04\x02\x7b\xb4\x35\x75\xae\x7e\x8c\x41\x50\x9f\x08\xe8\x16\x2e\x95\x1e\x2f\x0a\xb5\xbd\xa4\x1f\x45\xbd\x17\xfd\xd6\xee\xac\xdf\xc2\x64\xfc\x36\xc2\xf3\x94\x3a\x88\x35\xbb\xbb\x40\xd0\x80\xf1\xb0\x46\x58\x59\x7f\xa5\xe5\x50\xe7\x92\xb5\x66\xa2\x3c\xe3\xd9\xb8\xa0\x79\x3a\x07\x18\x25\x6d\x4d\xa4\x28\x9c\x35\x97\x9a\x14\x08\x09\x02\x55\x90\xda\xd4\x71\x4c\x9b\xa9\xa0\x4d\x4a\xdd\x80\xd5\x51\x7d\x7d\x84\x94\x57\x96\x43\x3c\x95\xd7\x24\x96\xfe\x0c\x58\x1c\x37\xac\x2f\x28\xff\xd0\x04\xb2\x82\x84\xb6\x3a\x71\xb6\xfa\xc1\x23\x66\x0d\x07\x1a\x97\x38\x0d\x1e\xc8\x29\x9b\x39\x29\x79\x3a\xa2\xd0\xaa\xc0\xb0\xde\x5f\x54\xe5\xea\xfc\xe2\xa5\x2b\xc7\x76\xb2\x5e\x6d\xca\xe6\x5a\xae\x76\x92\x34\x07\xc4\xcd\x7e\x91\x20\xe3\x0f\xd2\xda\x44\x43\x9f\x65\xa0\xf9\x26\xa1\xda\xcf\xcb\x15\xbb\xc7\xfe\x54\x50\xcc\x03\x29\x53\xc1\x53\x4a\xec\x9e\x38\x1e\x35\x0d\xfc\x90\x70\x54\x7c\x90\xdd\x5e\x54\xfc\xd7\xf0\xc9\x6a\x97\xd9\xf9\x65\xad\x56\x18\x3a\x62\x13\xd2\x4c\x80\x27\x77\x21\x71\x77\x21\x71\x77\x61\x93\x11\xc2\x5c\xb3\x78\xde\x37\xb5\x19\x81\x06\xb5\xb5\xee\x84\xde\x63\xc3\x06\xd0\x1c\x1c\xbc\x1c\xd8\xd2\x76\x96\xf1\x08\xba\xa2\xec\x5c\xd2\xb9\xdf\xba\xb7\x08\x68\xa6\x6f\x1b\x30\xa8\x58\xd1\x9c\x6a\x42\x4d\xc2\x6b\xbe\x81\x6c\xab\x6a\x10\x8d\xb5\xce\x10\x3e\x30\x58\x4a\xae\x42\x65\x5c\xd3\x1f\x48\x1c\xff\xf7\x16\xa7\x3a\xb0\x08\x1e\x17\xc5\x5b\xa7\x2a\xa9\x91\x9b\x0b\xcf\x6b\x16\xaf\x52\x19\x18\xc5\xda\x7c\xcd\x2a\x8e\x13\xf0\x3e\x97\x61\x6c\x0c\xaf\x90\xf1\x1f\x2f\x11\xce\xe0\x86\x0a\xf6\xd7\xed\x1b\xd8\x91\xfd\x38\x09\x7c\xb0\x76\xe5\x6b\xbb\xde\xc3\x7b\x71\x6c\x04\x39\xe1\x4e\x36\x27\xaf\xbe\xf2\xe9\x53\x37\x50\x47\xf5\x4e\x6a\xc3\x25\x3e\x70\xe5\x12\x32\xc0\xef\x1b\x8d\x98\x71\x81\x13\xbc\xdd\xbc\xcc\x0a\x52\xcf\xc9\x4b\x20\xc6\xf2\x00\xe3\xd2\xb8\x0a\xe2\xcc\x21\x5c\x70\x4f\x85\x24\xcf\x95\x8b\xef\xa3\xbc\xfd\x4b\xd7\xcd\x9f\x68\x37\x7f\x6f\x83\x0d\xb2\x69\x31\x4b\x17\x18\xc0\xe4\x93\x05\x9e\xeb\xfc\x8b\x08\xd7\xd3\xc5\x98\xe6\xb3\x74\x6e\xb5\xb3\xb9\x75\x9c\xac\xbc\x3b\x39\x21\x7e\xb3\x98\x98\x76\x06\xe6\xda\xac\xcc\xfd\xc9\x1d\xc7\xb9\x8b\xe6\xbc\x85\xbe\x6e\x3b\x0a\x37\xce\xd2\x7a\x5a\x8a\x01\x03\xaa\xb7\xfc\x33\x2d\x71\x86\xb2\x76\xff\x25\xda\xe8\xfe\x74\x70\x04\x9e\x5b\x9c\xf8\xe2\xf1\xdc\xce\xdc\x22\xe5\xd3\x62\x36\xa8\xe4\x6c\xac\xd7\x6a\xfb\x2e\xdc\xe8\x87\x65\xb2\x72\xbe\x68\xb9\x9b\xe3\xa7\x22\xc9\xd3\x6a\x86\xcb\xb4\x9e\x52\x18\x3b\x18\x0e\x9c\xf1\x8a\xa9\x48\xf8\x7a\xed\x78\x51\xbe\xf8\xb8\x04\x68\x4a\x60\x0f\xa8\xca\x04\x75\x46\x86\xcb\x8a\xd4\x84\xa9\x28\x1c\x32\x54\xbb\x6e\xb8\xac\xca\x2b\x9a\x93\x5c\x5f\xb5\x78\x78\xb6\xe2\x43\xca\xc1\xc7\x92\x95\x7c\xb8\x10\x34\x73\x0c\xe0\x12\x74\x91\x50\x3b\xf0\x4b\x7f\xdf\x5d\xa5\x07\x8f\xae\x1e\x97\x8f\xae\xf6\xf6\xd0\xe5\xf4\x6a\x96\x66\xd3\xab\x59\x93\x8f\x5a\x01\x29\xf8\x88\x6c\x90\xca\x4d\xca\xc6\x42\x5a\x58\xaa\x08\xe0\x97\x65\xf5\xd2\xf8\x98\x42\x9e\x67\x84\xcf\xd3\x03\x7c\x96\xde\xe8\x29\x3a\x7f\x7c\xf6\xe8\x5c\x4c\x91\x6e\xe3\x34\xbd\x99\x9e\xcf\xf0\x35\xfc\xa3\x8f\xc5\x0b\x67\x78\xd7\x08\xbf\xf1\x7f\x9e\xa4\x07\x8f\x4e\x1e\x5f\x3f\x3a\xd1\x53\xfd\x31\x3d\x9d\x9e\xcc\x1a\x30\xd3\x83\x37\xd3\x93\x59\xfa\x11\xbf\x80\x7f\xc4\xed\x47\x17\xc9\xf5\x93\x43\xe4\xb1\x39\xdf\x90\x84\xe1\x0a\x73\xfc\x02\x13\xbc\x0a\xdd\x7a\x17\x10\x28\xb2\x41\x68\x3c\xcf\x78\xd3\x79\x58\xe5\x32\x47\x68\x83\x92\x37\x32\x9a\x64\x48\x17\x89\x10\xce\x5e\x68\x3e\xe4\x36\x4f\xea\xe9\x9b\xe9\xc1\x4c\xec\x02\xb4\xd9\x48\x63\x9e\xfe\xfe\xe3\xf4\xe0\xd1\xf1\xe3\xf2\xd1\xf1\xde\x1e\xca\x13\x32\x3d\x9e\x21\xa5\x4a\xb3\x40\x8b\x21\x76\xe2\x24\x91\x7c\x7c\xc2\xad\x1b\x60\x43\x30\xaf\xd0\xb8\x89\xc1\x88\x17\x60\xc7\xea\xe1\xb6\x55\xe6\x71\xaa\xbc\xed\x43\xa2\x7c\x85\x19\xd2\xdc\xf6\x09\xfc\xea\x18\x40\xe6\xe7\xa2\x76\x50\x5a\xb4\x0e\x30\xa4\xde\xc0\xdc\x71\x74\xf5\xd9\xff\x36\xf3\x38\xd8\x22\xc8\x8b\x8e\xfc\xe1\x07\xbf\x5a\x6a\x99\xe4\x8c\xe6\x13\x0a\xe0\xcb\xda\x46\x8b\x9c\x29\x73\xf3\xac\x23\x41\xbd\xe3\xf8\x37\x4e\x21\x7b\x51\x8e\x46\x60\x40\xd6\x41\x1e\x89\x52\xb7\xf6\x8f\xe2\x24\x21\xdb\x16\xd4\x43\xdc\x58\x98\xbb\xe6\x13\xf2\xc5\x5d\xd2\xf3\x1d\x18\x64\x27\xd7\xf2\xee\x2e\xc6\xae\x0c\x57\x05\x65\x38\xc7\xf9\x93\xaa\x3c\xdc\x2b\x08\xf5\x6b\x01\xd6\xb3\x23\x36\x61\xe3\x8b\x8a\x2c\x70\xa1\x1c\xdf\x75\x82\x40\x8e\x33\xbc\xc2\x14\xe1\x79\xa7\xd4\xa6\x8a\x6a\xf7\x77\x57\x33\xf0\xdb\xa1\x24\xcd\xd0\x3d\xf8\xc5\x2b\x79\xad\x48\x9f\x26\x45\xfa\x65\x52\x60\x8e\xe7\x08\xff\x90\x7c\x83\x2b\x74\x27\xc7\x4f\xfd\x49\x4d\x1f\x76\x35\x1a\x2b\xc4\xb1\xf4\x4b\x22\xa1\xdb\xc4\x67\xec\xee\xd4\x1e\xfa\x16\xe5\x7a\xec\x7f\x53\x40\x4a\x23\x1e\x8e\x9b\xd2\x6a\x4a\x5f\x6b\xad\x1a\xe9\x4a\xae\xdd\xe9\xb3\xa1\xbd\x08\x2d\x82\xa3\xb3\xa9\xf4\x75\x3e\x9d\x69\xef\xf5\xd6\xd9\x57\xf3\x95\x35\xf1\x2e\x21\x35\x4f\xd5\x86\x98\x04\x97\xef\x8b\xac\x7e\x4e\x2e\x33\xae\xa7\x3e\x57\xc9\x36\x70\x21\x5f\x1e\xb3\x1b\xd7\xb2\x09\x09\xdd\xe7\xad\xf6\xe0\x7c\xe0\x45\x9a\x29\xb5\x99\x03\xd4\x89\xf3\xb4\xe2\x5a\xd3\x2f\xe1\x28\xc1\x51\x1a\x92\x19\x89\x3f\x64\x53\x24\x8f\xe3\x24\x90\x9d\xa4\x74\x37\xeb\x7a\x6d\x4d\xe5\x46\xc8\x5a\xac\xd7\xab\xf5\xba\x5e\xaf\x47\x79\x1c\x8f\xe6\x3e\x74\x8e\xbf\xd3\x1b\x3d\xc2\xe4\xc3\x6c\x5e\xa4\x85\xa8\x8b\x97\xe9\x6a\xbd\x9e\xc7\x71\x23\x70\x41\xf7\x45\x94\x3c\xa7\x82\x8d\x65\x88\x56\x1c\x8f\xea\x38\x4e\x2e\xd6\xeb\xa5\xba\x05\x2e\xd5\xe8\x3a\x63\x55\x68\xe3\x6a\x06\x05\xb9\x4a\xbd\x4e\x5a\xf8\x39\x26\x4c\xe5\x52\x6c\x2f\xba\x48\x60\xac\xa2\x3b\xe8\xed\xea\xd3\xf6\xd6\xd6\x31\x24\x57\xa2\xdf\xde\x2d\xa9\x8c\x08\x7c\x87\x3d\xdf\xc8\xcd\x32\x35\x06\x23\xa2\xe7\x17\x2c\x4e\x5b\xbe\x89\x6f\xfb\x26\x88\x7e\x54\x3a\xc1\x60\xba\xd3\x9f\x93\xf6\xda\x44\xaa\x3b\x50\x5f\x53\x58\x05\xe2\x78\x8a\x59\x21\x4b\x53\x37\x48\xe6\x33\x12\x5e\x33\x10\x87\xf4\xc2\x2a\x1d\x25\x5d\x24\x58\x03\x6f\x6d\x8d\x2e\xea\xf8\xa8\x7b\x50\x5e\xb1\x6b\xcd\x48\xbf\xa2\xec\x83\xf4\x49\xea\xa4\xbd\xee\xee\x0b\x13\xa6\x23\x73\x0a\xdd\x75\x0b\xd1\x92\xc0\x24\xeb\xe6\x8f\x88\xcb\xaa\x68\x3c\xb2\x49\xe0\x38\x81\x14\x68\xed\x03\xba\xcb\x5d\xee\x91\x6d\x97\x07\x34\x6d\xf4\x63\xb0\x74\xf2\xcc\x77\x9f\x25\x49\xfa\x60\xbc\xb8\x85\xa4\x0c\x11\x26\xa1\x9b\xa5\x4e\xcb\xee\x9b\x65\x25\x5f\x86\x6e\x96\xa2\xd5\x9e\xbc\x59\xe6\x69\x19\xb8\x59\x16\xce\xcd\x82\xf3\xb4\xe7\x62\x99\xc3\x05\x91\xad\xd7\x40\xae\x0b\xb8\x87\x68\x1c\x53\xd7\xe0\x80\x2c\xb9\x74\x55\x5e\x9d\xea\x6f\xea\xf1\x9e\x08\xda\x6c\xd8\xd1\xfa\x37\xa3\x59\x37\x75\x05\xad\xe2\x18\x46\x87\x97\x69\xbd\x5e\x17\x9a\x1c\xe2\xcb\xb4\x71\xeb\x49\x94\x22\xf3\x13\xae\xa1\x79\x1c\x0b\x0e\x5b\x5d\x43\x6a\x14\x97\x47\x5d\x9b\xa0\xc7\x6e\x48\xf5\x88\xae\xd2\xd1\xa5\x4c\xe9\x63\xba\x12\x52\x88\xfe\xfc\x38\xbe\x0a\x35\xef\x4d\x0b\x9a\xd0\x38\x1e\x5d\x06\x4d\x3e\x34\x70\x60\x3a\x27\xb7\xf7\xa0\x48\x84\xa7\xb0\xc9\xf6\x76\x23\x91\xc3\x7c\xa4\x4d\xf0\xdb\xdb\x82\xc6\xa9\x0f\x4a\xd9\xf4\xc9\x56\xf0\x4a\xa0\x16\x16\xc7\x42\x51\x9e\xd0\x28\x1c\x02\xf3\x36\xe9\xbb\x64\xbc\x38\xae\x01\x4d\xe9\x7a\x1d\x72\x8f\xdb\x1e\xcd\x9f\x98\x0d\x75\xef\x30\x2f\x85\x1e\x85\x33\x35\xc4\x1d\x63\xbc\x24\xf0\x95\x0a\x16\xed\xba\x6f\xca\xae\x08\xaf\xcc\x5c\x35\x0a\xce\x0a\xee\xd8\x53\xa5\x3e\x35\x9b\xee\x88\x8e\xdb\xf0\x55\x49\x8d\x4b\x34\xa1\xe9\xfd\x67\x0c\x8b\x16\x30\xdd\x76\x51\xc9\x4f\x84\x60\xd8\xf6\xbd\xd4\xb8\x8d\xec\xce\xdc\xee\x52\x40\x5b\xcc\x3c\x83\xe0\xc4\x8d\xe7\x66\xd1\xda\xc2\xd9\xd6\x2d\x8c\x3f\x04\x76\x9d\xc1\x01\xf2\x62\x07\xb3\x1f\xb5\x5d\x8c\x15\xb0\x84\x1e\x9c\x2d\x93\xa5\x5f\x26\x59\xdf\x96\xb1\x36\xc1\xbe\x8d\xd3\x19\x1a\x58\xfa\x1b\xa7\x69\xe1\xdb\x5d\x1c\x74\x07\x23\x97\x98\x9a\xac\x30\x38\xbb\xfb\xdd\x6e\x24\x7f\x1f\x08\xc6\xd7\x2c\x0d\xda\xf7\x05\x44\x2e\x4a\x15\xbd\x13\xcb\xc9\x1d\xf6\xa6\xd9\x60\x18\x68\xd9\x35\xa4\xf9\xbe\x3b\x74\x21\x93\x12\x3a\x7e\x1f\xdd\xc8\x33\x07\x08\xbf\x4d\xbe\x25\x09\xd3\xdb\x5b\xbb\x7b\x89\xf3\xd6\x8c\x2e\x35\xfa\x27\x08\xa0\xaa\x8c\xab\x47\xe2\x7b\x75\x1c\x17\x45\xd3\xd1\x43\xa3\x7c\x62\x8a\x1c\xf7\x0c\xa7\xf8\x01\xa0\xb4\x28\x95\xcd\x51\x72\xb7\x01\x6b\x07\x91\x2a\xe4\x20\x12\x7a\xd8\xe9\x20\x72\x5c\x14\xdd\xde\x21\xce\x47\x08\xc9\xb4\x77\x8c\x8d\x11\x62\xcf\x93\xa0\x79\xfe\xb8\xda\x4e\xdd\xe8\x42\x2a\x5a\xa8\x45\xfe\xfc\x88\x58\xe9\x28\xa1\xb6\x55\x40\x28\x6b\x6d\xc9\x40\x8b\x6d\x10\xa2\x84\x3b\xde\x59\xe1\x86\x95\xe2\x6e\xd0\xf0\x76\xd7\x66\x27\x17\x76\x08\xc6\xa0\xdf\x54\x68\x23\x8f\x51\xd1\x48\xe9\x2a\x9e\x6a\x7e\x02\x9c\xb1\xc3\xe4\xb5\xe5\xb0\x54\x29\x1d\xc4\xa9\x0e\xa1\x78\xb9\x2a\x8a\x1b\x95\x81\xda\x32\x81\xdc\x92\x3e\x70\xb5\xd1\xd6\xc7\x56\xda\xfe\xa4\x61\x4d\x13\x63\x91\x56\x93\x5b\x8d\x95\x3d\x61\xd6\xb0\xc9\x37\x08\x3b\x56\xc9\x37\x6c\xde\x63\x99\x7c\x6b\x9b\x44\xc6\x7c\xe8\x3c\xdc\x82\x56\x06\x43\xa9\x01\x0c\x06\x0d\x5a\x6f\x84\xe4\xed\xe0\xa3\xe1\xca\x9a\x6d\xf8\xe3\x0a\x30\xd2\x4c\x50\x21\x9f\x41\x2a\x2e\xfd\x41\xb8\x84\xbc\x5c\xf2\x93\xc0\x3c\xeb\x0b\x10\xb8\x6e\x51\x9d\xcc\x95\xda\x56\x8a\xa1\x1d\x44\x55\x59\x72\xe5\xe7\x97\x8f\xeb\xec\x4a\x66\xfa\xce\xbc\xa4\xc8\x36\x5f\xf0\x51\xb2\x4a\xb3\x31\xa4\x1c\x4f\xd0\x51\xe4\x3a\x77\x46\x93\x6c\x6c\x12\x89\x8b\x97\xae\xf3\x60\x34\x89\xdc\x54\x58\x11\x2e\xed\xc1\xe2\x89\x9c\x71\x90\xc2\x11\x9a\xd8\x57\x72\xe7\xe5\x34\x17\xb3\xd5\x77\x87\x0f\x38\x78\xb8\x2a\xb3\xbf\xa2\x8d\x4a\x55\x0e\x32\x93\xe3\x88\xe0\x8f\x4b\x26\x3d\x66\xe0\x3c\x12\xce\xd5\x55\x42\x74\x4b\x2b\x49\x63\xc2\x1c\xfd\xf9\x77\x59\xad\xd2\xcd\xb5\x8c\x06\xa1\x84\x7e\xea\xb4\x9a\xba\xcd\xa4\x72\xcd\x9a\xd2\x14\x27\x2b\xf5\x05\x4e\x69\xdd\x7c\x28\x68\x6a\x31\x3e\x15\xb4\x21\x40\x18\xc0\x6c\xa3\x14\x0e\x34\x01\xe7\x32\xcc\x40\x47\x98\x23\x84\xab\xa6\x6f\x25\xc7\xa0\xe1\x94\x1b\x47\xb9\x02\xc8\x74\x3d\xe1\x2d\x83\xeb\x54\x11\x7e\xef\xbd\xf2\x98\x10\x32\x13\x60\x6f\xac\xd7\x99\x86\xdf\xa8\xdc\xd4\x68\x85\x31\x79\x74\xac\xcf\x0a\x13\x34\x28\x46\xda\xfc\x5f\xb4\x47\xbc\x42\xc8\xcb\x04\xb4\x02\x49\x57\x70\x7d\xb5\x32\xee\xef\x90\xb6\xb5\x52\xea\xac\xa5\x87\x51\xd8\x80\x7c\x53\xc0\x98\x5d\xb8\x60\x3d\x29\x77\x49\x53\xda\xd2\x49\xaa\x8e\xc4\x1f\x13\xde\xb4\xb2\x9c\xf6\x8c\xc3\xe7\x68\xb6\x79\x4d\xeb\x00\x7e\x8d\x7a\x01\x82\x39\x24\xa4\x96\xa6\x64\xda\x34\x25\xf3\x00\xf8\x5e\x42\xa7\xd5\x0c\xe8\x7a\x50\x6f\x8b\x6e\x59\xea\x69\x6e\x95\x02\xdd\x9a\x82\x98\x34\xe1\xca\x38\x31\xd9\x4f\x39\xad\x66\x69\xb0\x33\xd9\x14\xf4\xa8\x3e\xb5\x74\x2d\x79\x46\x56\xd6\x73\xd7\xd9\x84\xf1\xbe\x6e\x15\x68\xf8\x36\x7b\x08\xad\x12\xed\xaa\xcc\x72\x7d\x99\x8b\x3b\x41\x72\xb1\x21\x2e\x13\x33\x09\xfb\x77\xcb\x52\xee\x09\xb4\x2a\x79\x80\xaf\xf9\x53\x81\x95\x2c\x25\x38\x58\x20\xca\x96\xcb\x42\x05\x61\x09\x1e\xdb\xed\x5d\x72\x3e\x9a\x30\x89\x27\x26\xce\xb6\x5b\x2a\xd6\xde\xc0\x5a\x47\x5f\x79\x0d\xec\xa0\xb9\xe5\xcd\xa2\xa6\x89\x4e\xa5\x56\x28\xbc\x40\x1f\xda\x73\xc2\x9f\xde\xb8\x9a\xe4\x50\x43\x01\xe2\xe7\x07\x57\x76\x98\x2b\x99\xa2\xa1\x6a\x46\xc3\xb1\x41\x75\xe0\xb6\x91\x6f\x5c\xc5\xd8\xbb\x60\x96\x4d\x15\x4b\xd2\xcc\x02\xd8\x19\x4f\xd1\x2c\x28\xf5\xab\x8e\xdf\xa1\xf4\x89\xb4\xb1\x98\x2a\x2c\xae\x15\x5b\x11\x88\xfc\xd5\xa2\xa6\xe6\xf6\xbe\x27\x71\x9c\x7c\x4f\x52\x9e\x44\x7f\x22\x82\xd3\xdd\x17\x67\xe0\x81\xa4\x74\xf2\xef\xfd\x65\x45\xaf\x32\x4e\x22\x34\xb6\xcd\x6a\x73\xd7\x99\x5d\xa1\xce\x30\x55\x15\x09\x0c\x39\xb4\x21\x53\x26\xdb\x78\x79\x7a\xbe\x27\x49\x09\x21\xc0\x0b\x2f\x79\x61\x18\x47\x73\x97\x0e\x83\xdc\xb2\x9e\x49\x2e\x61\x3b\x17\x3d\xd1\xd1\xea\x90\x6a\xa1\xe9\x40\x22\x1e\x25\xf6\x12\x71\x63\x3e\xd4\xca\x88\xcf\x52\xd9\x2c\xbc\x80\x8f\xaa\x1d\xf0\x81\x26\xad\xeb\x88\x20\xfc\x5c\x59\xa5\x59\x59\x5d\xc2\x46\xec\xf3\x7b\x08\x10\x81\xca\x28\x2c\x5c\x9d\x95\xb1\x08\x98\x66\x85\xfc\x2c\x3b\x22\xd7\xcf\x54\x82\xef\xce\x48\x38\x03\x0c\xdb\x77\x3a\x7d\x94\x4f\x51\xdf\xb2\x98\x1d\xd2\x8c\xa6\x63\x5e\x84\x28\x56\xa1\x4a\x74\x91\x30\x93\x2d\x4f\x51\x47\x03\x70\xfb\xe6\x9a\xa9\x64\xa9\x8e\xd8\x32\x4a\xd3\x04\x6e\x25\x39\x9b\x1a\xe6\x6d\x12\xed\x09\x11\xad\x25\x4c\x33\x8d\xdb\xae\x1c\xef\x64\x14\x94\xa4\xc9\x6e\x83\x12\xc0\x5e\x11\xd6\xf5\xba\xdd\xbe\x47\x77\x77\xef\xc8\x6b\x17\x3a\x56\xea\x46\x87\x3d\x5f\xaf\xa3\xfd\x7f\xd4\x25\xdb\xcf\x96\x34\xf2\xdd\x1a\xe5\xe0\xb2\xa3\x6a\x9a\xcd\x42\xa3\x8a\xf6\x32\x34\x91\x45\x3d\x91\xbc\x6b\x34\xd3\x0c\xbe\x1e\x20\xbc\xaa\xa9\xd3\x6d\xb0\x75\xfb\xda\xcd\x94\xd0\xd9\xb6\xdb\x1c\xf4\xe2\x11\xdb\x5d\xb6\x48\x23\x40\xb8\x67\x97\xb8\x00\xc9\x3d\xfb\x24\x33\xdf\x64\x9b\xfe\xc4\x5b\x25\xd8\xc5\x27\xdd\x2d\x6d\x61\xae\x19\xd5\x23\x07\x96\x38\x67\x27\xa9\x71\x94\x93\x45\xb6\x2a\xf8\x89\x19\x56\x84\xd0\x51\x35\xa5\xb3\x8e\x41\x47\x7b\xf4\x6e\x9b\x89\xfa\x9b\x49\xf5\x17\x75\xb5\x6f\x0a\xec\xb8\x9b\x4c\x7b\x66\x33\x05\xb0\x3c\x03\x80\xe0\x2e\xa1\xf1\xa1\x5e\xdc\x37\x62\x63\x05\xdc\x1d\x2a\xdd\x89\xcc\x76\x62\xf0\x3c\x55\x37\xcc\x76\xd3\xd8\xac\xae\x13\x49\xeb\xe5\x94\x05\x3b\xa3\xb6\x33\xea\x74\x66\x84\x02\x1b\x35\xad\x5e\xaa\x2c\x89\x32\x8d\xc4\xa2\x0b\xa7\xd5\xad\xe8\x14\x71\x2a\xe3\x2e\xb9\xc7\x0c\x02\xeb\xdb\xd7\x3e\x81\x3a\x46\xc7\xa4\x04\x11\x2d\x96\x59\xce\x08\x04\xbc\x2e\xd9\xe4\xd0\x78\x8b\x87\xa2\xf6\x6d\x6a\x81\xed\xc2\x0b\xf7\x5e\xf7\x42\x67\x71\x03\x2f\xff\x4d\xa0\x53\x23\x05\x74\x96\x08\xed\x37\xd2\xf3\x19\xb8\x43\x9d\x23\xf6\x9c\xd4\x21\x3d\xcb\x58\xc9\xe8\x3c\x2b\x12\x34\xd0\xc5\xd2\x03\x67\x42\xbb\xa5\x91\xd6\x0c\xfa\xa6\x18\x3b\x85\xdb\x7c\xef\xbd\xef\xf5\x1b\x69\xcf\x47\x03\x41\x61\xfb\x84\xf8\x15\x7a\x67\xe4\x54\xe5\x01\x79\xde\x48\xaa\xdc\x98\x9b\x55\x5a\xe3\xa4\xb8\x17\x90\x89\x42\x30\xf9\x0d\x49\x56\x0e\x82\x49\x81\xf0\x5c\x3e\xc4\x73\x84\xeb\x8d\x22\x79\x2a\xa0\x19\x39\x78\x26\x9c\x37\x5d\xc5\x58\x53\xe3\x56\xa6\xcc\x43\xd4\x74\x6c\x3b\xe5\xfd\x11\x1f\xa7\xd5\x4c\xda\x01\x21\xac\x6b\x95\x36\x0d\x30\xa5\x89\xf5\xd2\xf6\x94\x8c\xe5\x43\x09\x12\x34\xcc\xce\xca\x15\x1f\x02\x5c\xae\x0e\x71\x13\x1f\x23\x21\x20\xad\x41\xf1\xa9\x31\x2a\x16\xd2\x5b\x85\x86\xbd\x55\xac\x3d\x67\x9b\x4e\xa1\xc4\x35\x2e\x06\x42\xdc\x48\xca\xf4\x5b\x88\x1a\x03\xeb\xa2\x90\x68\x2a\x84\x8c\xae\x21\x8e\x93\x22\x2d\x2d\x1a\x27\x78\x2d\x80\x60\x8e\xb9\xaf\xf7\x4b\x28\xbe\x05\x5c\xcf\x7a\x83\x2b\x84\x8b\x38\xd6\x66\x25\xf9\x18\xec\x4a\xba\x9d\x49\xb1\x81\xe9\xa2\xcd\x08\x32\xc9\xea\x93\x38\x1e\x49\x53\x3e\xad\x95\x1d\x0c\x34\x6c\x71\x1c\x29\x1d\x1d\xfc\x8c\xa0\xc8\xbc\xcc\xc9\x51\x52\xa5\x01\xe2\xbd\x1a\x13\x39\xe7\x12\xe9\xee\xa8\xf1\x3b\xb1\x1f\x8d\x26\xaf\x12\x32\x26\xf0\x18\x19\xd4\x15\xab\x35\x4c\x28\xae\x30\x41\x68\xc2\x1b\x4a\xc1\x84\x62\x82\x54\x82\x6c\xb2\x41\xb8\x70\x1c\xff\x2b\xee\x0a\x0b\x67\xdd\x7a\x27\x39\xa3\x47\x23\x15\x0b\x55\x91\x7c\x35\x27\xae\xd3\xb8\x2b\xcc\xaf\xd7\x8c\x4b\xd9\x11\xd9\xa8\xa6\x0d\x12\x82\xd4\x44\xb5\xb0\x5e\x8f\x54\x19\xd5\xb4\x53\xd0\x8c\x8e\x71\x5f\x30\xe7\xbd\x52\x5c\xe5\xe6\x4e\xea\x74\x85\x61\x4e\xfb\xb4\xd9\xfe\xb4\x02\x3e\x71\x24\x9d\x70\x12\x16\x8e\x82\x6d\xf0\x8c\x04\x8d\x17\xd9\x9c\x97\x15\x18\x51\x64\xd2\x43\x60\x0f\x37\x12\x55\x61\xbd\x4e\x58\xfa\x37\x22\x7f\xe0\x11\xf3\x12\x7b\x6b\x42\x30\x2f\xb2\x1a\xdc\x46\xe9\x98\x4a\x04\x05\xe4\xc4\x76\xc6\xb1\x0a\x31\xb1\x57\xf2\x45\x56\xbf\xb9\x66\x1a\x9a\x48\xde\xca\x14\x3b\x29\x17\xd1\x7a\x1d\x46\x31\xf2\x4a\xe1\x5b\x80\x41\x9a\x54\x1b\x34\x10\x9f\x9f\x32\xa3\x05\xdb\xc8\xef\x6c\x62\x20\xb9\xf0\x4d\x9a\x3b\x54\x27\x20\xc2\xcd\x0c\x90\x99\x7e\xd1\x3c\xdd\x64\xbb\xf0\xd2\xe6\x57\xc1\x21\xf0\x6f\x24\x90\x22\xf5\x2f\x64\xbd\x4e\xfe\xd2\x52\x4b\xc0\x77\xba\x0a\x89\x53\x4d\x4f\x5f\xd3\x8f\x94\x21\xfc\x17\x0d\x75\xa4\x40\x69\x9c\xc4\x6c\x52\x61\xc1\xdb\x3c\x08\xae\x2c\x4d\xf7\x98\x47\x5c\xa5\xa6\xbe\x0e\xf9\x60\x8e\x7e\xb2\xd2\xf1\xc9\x15\x04\x26\x33\xc1\xfa\x9a\x0a\x53\x3a\x73\x01\x98\xc4\x7a\xaa\xa1\x11\x3c\x15\x53\x31\x1b\xcf\x4b\x36\xcf\x78\xc2\x90\x45\x62\x92\x9f\x23\x77\x5f\x2f\x1c\x52\x13\x67\xa4\xb7\xb0\x87\x09\xd3\x53\x72\x53\xa5\x04\x27\x3c\x65\xdd\x08\x3e\x95\x8b\xe0\xc3\x3b\x10\x7c\x80\xb5\x32\x08\x3e\x95\x39\x14\x01\x3c\xd8\x1e\x50\x9e\x80\x1f\x36\xd8\x6d\x60\xa7\x2a\x61\xb9\xcf\xdd\x14\xd7\xe9\xad\xcd\x18\x81\xfd\xa2\x93\x0c\xbb\xa6\x87\x89\x6f\xdc\x82\xdc\x13\x19\x65\xa4\x92\x4a\x9d\x81\x87\x1e\x52\x5b\x20\x81\x5a\x13\x8d\x1a\x87\x24\x4f\x93\x41\x47\x66\x98\x85\x16\x25\x9e\x91\x1a\xbe\xbb\xde\xf2\xea\xd6\x13\x5d\x3b\xba\x9b\x7a\x75\x56\xcf\x2b\x7a\x26\x68\x4e\x12\x24\x61\x41\xa7\x43\x37\xdf\xb7\xe0\x0f\x51\xe5\xa7\xc4\xf7\x63\x84\xd4\x51\x17\xbb\x03\x74\x47\x98\xa3\x51\xda\x62\x69\xfc\x29\x1e\x3b\xea\x3a\xf1\xe9\xa2\x69\xc8\x75\x52\x85\xb1\x25\x21\x06\xc9\x84\x1f\xf9\xe9\xc0\xdd\x21\x7a\x50\xec\xee\xa5\x64\xbc\x64\xfa\xc7\x35\x88\xce\x8c\x57\x2c\x38\x28\x7c\xa0\x2c\x3f\xea\x1c\xd4\xc4\xc5\x36\x97\x85\xe3\x38\xa1\x3a\x80\x70\x0c\x68\x57\x71\x9c\x74\x36\x80\xc1\x75\x52\xb4\xf0\x8e\x5c\x96\x57\x59\xf1\xec\x82\xcc\x3f\x00\x38\x59\x39\x3e\xbd\xd4\x0a\x77\x2d\x62\xc6\x71\xe8\xe9\xb8\x22\xbc\xa2\xe4\x8a\x7c\x95\x71\x52\xf3\x04\xf9\x93\x25\x39\x05\x39\x4b\x1d\xfc\x66\xff\xe2\x28\x0e\x44\xb0\x04\x63\xea\xf0\x34\x0a\x8e\x37\xd7\x76\x86\x08\xcc\x74\x0a\xe6\xbd\xe3\x93\x23\x30\xf7\x46\x08\x77\xbf\x57\x56\xdf\x08\x21\xcd\x97\x73\x89\x1d\xdf\xb9\x3b\x22\x9a\x47\x48\xc2\xe3\xaf\xa4\xb7\x12\x5e\x6d\x30\x1d\x73\x92\x55\x79\xa9\x13\x78\xb6\xe0\x68\xb4\x80\x8c\x69\x18\x59\xc9\x35\xc6\x35\xcf\x9b\x54\x33\x09\xc6\x11\x2e\xec\x23\xf5\xef\x84\x83\x37\x8e\x18\xa9\xbe\xbd\xb5\xb1\x70\xe0\xe4\x94\x90\x80\x7c\x32\x26\xf2\x6b\xc8\xaa\x4c\x0a\x08\x6a\x84\x80\xc6\xe1\xa2\xac\x86\xbf\x8d\xf6\x20\x86\x45\x72\xe0\x43\x89\x4b\x35\xbc\x00\x87\xab\x1a\xa2\x24\x65\x5e\x6d\x80\x42\x6e\x8c\x6e\x8b\x27\x08\xe5\x4e\x06\xd1\xf6\xcd\x01\x5a\xde\x1e\xc0\xed\x76\x83\x2a\x2f\xf9\x8e\xed\xee\x02\x8d\xe5\xf8\x3a\x05\xa0\x74\xad\x5e\x8a\x61\x9f\x16\x3c\xbd\x91\x2c\x0f\xbc\x94\xf0\x9e\x3b\xc0\xac\xf9\x4b\xdd\xbe\xf4\x54\xb2\x2d\x0b\x6e\xe0\xe9\x81\x9c\x01\x62\xe6\xe8\xcc\x2a\xec\xd2\x51\x34\xe0\xe1\xf0\xe0\x40\xd6\x16\xe2\xa2\x83\x09\x5e\x8c\x38\x09\x6c\x42\xa3\xf3\xd2\x6f\xd1\x1d\xc1\xda\xfc\xaf\x0e\xf2\x05\x3b\x7f\xf8\x80\xfb\x1f\xee\xb5\x26\x3f\x5b\xf0\xa1\x5e\x1a\xfe\x70\x7f\x8d\x4f\xd9\x0d\x72\x0d\x8e\x56\xa4\xce\x48\x2d\xdf\x0f\x69\x3d\x2c\x59\x71\x33\xcc\xae\x32\x5a\x64\x67\x05\x19\x5e\x5f\x10\x36\x9c\xaf\x6a\x5e\x5e\xaa\x33\x07\x87\x76\xb8\x20\x19\x5f\x55\x64\xb8\x28\xb2\x73\x59\x2d\xda\x60\xb6\x49\x08\x77\xa4\xf6\x8c\xff\x4b\xa0\x90\x02\x56\x9a\x87\xe3\x09\x87\x95\x2b\xfe\x67\xbd\x26\xa2\x0e\xc2\xee\xcd\x45\xf4\xcd\xc5\xd3\x6a\x5c\x53\x76\xbe\x2a\xb2\x8a\xfe\xa0\x40\x32\x01\x65\x74\xc5\xb7\xe4\x17\xb8\x24\x3c\xeb\xcc\x2e\x00\xfc\x60\xa4\x52\x00\x9f\x3a\xc0\xdb\xed\x87\x0a\xf8\x5a\x4c\x89\x7a\x71\x91\xd5\xcf\xb2\x62\x2e\x1d\x7d\x55\xd0\x81\xc9\x29\xb0\xcc\x04\xef\x65\x13\x7e\xba\xdd\xaa\x16\x43\xcf\x74\x2f\xee\xab\x66\x53\xa4\xf9\x64\x87\x24\x05\xce\x97\x85\xd8\xad\x91\x55\xb7\x05\x3f\x4b\x6b\x2a\xe7\xfa\x85\x7a\x2e\xb1\x9d\x5a\xb3\x07\x67\xbd\xf1\x45\x9f\xbb\x5b\xd5\x0f\x74\xdd\x2c\xdf\xe1\xb0\xd0\xbb\x8e\x07\xca\x02\x53\xe2\x0c\xd7\x78\x05\x59\xeb\x07\xda\x1e\x49\x78\x86\x93\x32\x35\x0c\x15\x32\xf1\x0b\xa5\x5e\xc9\xf5\x3a\x59\xa5\xdc\x01\x8f\x97\x9e\xdc\xe2\x5c\x10\xc1\x07\x1c\x25\x55\xba\x92\x39\x7c\x98\x0d\xbc\x48\xea\x34\xc9\xd2\x15\xd2\x0d\xc7\x71\xe6\x33\x6d\x68\xbd\xae\xd1\x24\xa9\x64\x16\x7d\x96\x8e\x0e\x03\xf3\x9f\x56\x1d\x9b\x97\x35\x81\x92\x3f\x90\x9b\x2e\x9d\xa2\xf9\x52\x31\xe6\xcd\x06\xab\x0a\x94\xe5\x3b\xd4\xa0\x2c\x37\x55\x80\x1f\xe8\xab\x72\x2a\x09\x40\xe2\x9c\xc9\x9a\x27\xa6\x35\x73\xc5\x88\x37\xa6\x55\x35\x2b\xdb\xc7\xa2\x0a\x9a\x8a\x0c\xb4\x0a\xdb\x6a\x89\x52\x52\x9d\x9a\xf1\x00\x20\xb4\x78\x68\x00\xa1\xc9\xb8\x2f\xed\xe1\x73\x82\xc9\xf8\x39\x59\x56\x64\x2e\x5e\xbd\xb8\x22\x8c\x93\x3c\x7d\x26\x1e\xfb\xfa\xef\x13\xf1\x48\xa9\x4d\x65\xdd\x8f\xf6\x81\x24\xb5\xe9\x31\x26\x63\xb7\xf5\x57\xc4\x7f\xa0\x91\x90\xbe\xb2\xcf\x05\xbb\x7c\xe2\x82\x0d\xff\x15\xde\x95\x25\x57\x36\x0c\xf1\x53\x3b\xae\xa6\x2f\x9d\x1f\x6e\x47\xff\x80\x52\x80\xdd\x5b\x72\x4c\xc6\xa7\x67\x94\xe5\xe9\x0f\xe2\xaf\xf3\x55\x56\xe5\xe9\x53\xf1\x67\x09\xa3\x7c\x55\x1f\x17\xf4\x8a\xa4\xdf\x60\x21\x46\x93\x6a\x4e\x5e\xe5\x29\xc3\x64\x9c\xd3\xc5\x22\x94\x94\xcf\xde\x5d\xc4\xea\x25\xf4\x15\x86\x69\xfa\x3a\xe3\x17\xe3\x4b\xca\xc0\xe9\x06\x97\x72\xf3\x67\xe9\xc1\xa3\xec\x31\x7d\x94\xed\xed\x21\xba\x48\xc8\x34\x9b\x8d\xd2\x94\x4f\xb3\x19\xba\x2d\xd3\x6c\x70\x56\x91\xec\xc3\x46\x9f\xcb\x38\x66\xd2\x0d\x52\x9c\x5b\x1d\xb9\x72\x80\x57\x29\x84\xd7\x2a\x4e\xb1\xb4\x43\x29\x52\xba\x5f\xe2\x79\x7a\xf8\x68\xfe\x38\xa5\x8f\xe6\xba\x93\x6a\x7f\x2e\xbb\x61\xfb\xf3\x19\xba\x2d\xd2\xf9\xfe\xa1\xea\xaa\x4e\xd9\x7e\xb1\x5f\xe2\x55\x5a\x89\x7f\x15\xbf\x70\xbb\xa0\x55\xcd\xa5\x44\xf0\x8a\xe5\xe4\xe3\xa4\xc4\x59\x9e\x93\xfc\x59\xb9\x62\x7c\x52\x63\x99\x05\x4f\xfd\x5c\x6d\x36\x58\x2b\x51\x61\xa6\xde\x97\x5f\x66\xf5\x45\xfa\xca\x3c\x15\x3f\xdf\x97\x5d\x99\x1d\x6d\x9c\xab\x06\x03\x7d\x2b\x31\x4c\xc0\x58\xe2\xe6\x33\x24\xa1\xd4\x85\x95\x9d\x00\xcd\x32\x5e\x66\x1f\x88\xf2\x73\x9b\x56\x33\xad\x21\x62\x81\x84\xcf\x5a\xb1\x3c\x34\x02\x79\x84\xb3\x34\x7a\x00\x9a\x2e\xcb\x1f\x3e\x88\xf6\xaa\x41\x74\x96\xd5\x20\x92\xc9\x15\x31\x55\x9f\x97\x73\x50\x37\xd9\x9a\x11\xa8\x65\x40\x09\xce\x29\x2f\xc8\xa4\xc4\x39\xe1\x19\x2d\x26\x6c\x4a\x67\x58\x4a\x87\x93\xdb\x65\x09\x92\xe3\x24\xdb\x6c\x10\x24\xdd\xe2\x62\x22\x61\x6b\x36\xa0\xa7\xbf\xc4\xae\xab\xec\x33\xa5\x1f\x48\xcf\x30\xb1\x3e\x25\xf6\xb6\x2d\x71\x03\xdd\x3f\x7d\x6e\x9e\x58\xdd\x6e\x87\x43\xc9\x5f\x15\xce\xed\x06\xfb\x39\xe0\x5e\x56\xe5\xa5\x10\x31\x42\x75\x84\x20\xb6\xd2\x95\x6a\xc2\xbd\x4e\xce\x89\x42\xd5\xf6\x6a\xce\x53\xd2\x2a\xfc\x67\x89\x69\x46\x4b\x16\xa8\xb0\x08\x54\x78\x47\xea\x60\xe3\x79\xa0\xac\xca\x23\xd3\x2e\x7c\x21\x0b\x0b\x4a\xd9\x48\x4d\x02\x9f\x5b\xf3\x01\x19\xaf\x96\xe7\x55\x96\x8b\xf7\x9a\xfc\xa5\xdf\x91\x4e\x56\x32\x3a\x3d\x25\x42\xde\x5b\x15\x56\x17\x3c\x3a\x90\xa6\x0f\x59\xd8\xd7\xa8\x82\x82\xec\x01\xa4\x2e\x8d\xf0\x34\x22\x1f\x97\x65\xc5\xeb\x08\x07\x0a\x19\xb5\xeb\xac\xa9\x84\x8a\x56\x35\x19\xd6\xbc\xa2\x73\x1e\x0d\xee\x3a\xb2\xee\x4f\xd1\xa6\x7e\x7c\x6b\xd9\xee\xc9\xe8\xa0\xeb\x32\x92\xe4\x76\xd3\xd7\x62\x7b\xc3\xee\xdc\x78\xbb\x6a\x6f\x4f\xbd\x9b\x6b\xe7\x4e\x7b\x5b\xd9\xbd\x7f\x77\xff\xdd\xaf\x6f\xb7\x85\xdd\xfb\x75\x4f\xe0\xfd\xfa\x75\x5b\xd8\xbd\x5f\xe7\x6c\xde\xaf\x5b\xa7\x81\xde\x5e\x03\x74\x6d\xe7\x0e\x03\x75\x37\xe1\x73\x2a\x0a\x66\xbc\xac\xea\x07\xf3\xf2\x72\x59\x32\xc2\x78\xdf\x89\xb5\xc5\x57\x9c\x16\xa2\x52\x51\x64\xcb\x9a\xec\x03\x57\xd6\x53\xd0\x3c\x68\x9e\x70\x5c\x35\xce\xb8\x63\x2f\x09\x6b\xa1\x41\xff\xdc\xcc\x33\x6a\xd0\x0b\x37\x09\x41\xeb\xb5\x4f\x43\xe8\x22\x89\x4c\x0e\x56\x6b\x4f\x3d\xb9\xb9\x3c\x2b\x8b\xf5\x7a\x94\xc8\xbf\xc6\x94\x13\x18\xe3\x90\xb2\xa1\x5c\x17\xd1\xb2\x6a\x5a\x61\x31\x41\x76\xf1\xd1\x01\xe4\xb6\xc1\xa5\x0e\x6b\xe1\xd5\x8d\xb9\xad\x33\x5c\xa7\x64\xda\x68\x72\x96\xa0\x47\xa3\x84\x09\x91\xa2\x1e\x33\xf2\x91\x27\x08\x8d\xf3\x92\x41\xf2\x79\x95\x6c\x3c\x1b\x03\xe5\x42\x78\xc4\xd7\x6b\x9d\xb7\x5f\x30\x38\xe8\x91\xe8\x12\x3d\xda\x48\xf8\xad\x15\xba\x85\x3c\x38\x65\xba\xda\x2c\x28\xcb\x8a\xe2\xe6\x56\x0c\x80\xe9\x28\xf1\x7a\x2c\x87\xbc\x5e\xeb\xbf\x12\x64\x4a\x82\xbb\xbd\x54\x34\x96\x1b\x9b\xdd\x1c\x66\x6a\xbd\x2e\xd5\xbf\x4d\xcd\x09\xdc\x85\x80\xb5\x2e\x55\x92\x9a\x49\xc8\x38\x27\x97\x4b\x3e\xe4\xe5\x10\xb4\xa5\xab\x39\xa8\x49\x58\xc9\xf6\xe1\xd3\xcf\x0a\x32\x94\x76\x98\x39\x19\xff\x9d\xbd\x62\xc3\xb2\xca\x49\xa5\x40\xdd\x74\x11\x0c\x15\x32\xb1\x96\x43\xc9\xb7\xd6\xc3\xcb\x55\xcd\x87\x17\xd9\x15\x19\x66\xc3\xc0\x6c\x0e\x2f\xe1\x08\x8d\x23\xb4\x71\xcd\xc0\x34\x88\x77\xdf\xbb\x65\x32\x48\x4c\xeb\xef\x9a\xe6\x9e\x19\xf9\x7b\x26\x8e\x7b\x77\x8c\x67\x16\x5f\x54\xe5\xa5\xe9\xa1\xf4\xfb\xd9\x7d\x72\xeb\x65\x45\xb2\xfc\xe7\x9b\xd7\xd2\xc2\x86\xca\xb9\x69\x62\x9e\x10\x67\x3a\x2d\x7a\x78\xcb\x14\xcd\xcb\x13\xa8\x28\x8d\xd0\x04\xa9\x68\xb5\x3f\xe2\xfd\x43\xad\xbb\x8d\x94\x32\x50\x72\xa4\x9e\xf5\x4f\xe1\xc4\x38\x4f\x40\x3a\x44\x38\x7a\x9d\x2d\xa1\xc2\x7a\x1d\x9d\x10\x59\xf7\xc8\x9b\xff\x49\x74\xac\xcd\xa7\xaa\xe0\x83\xff\x9b\x1c\x4d\xbe\xa1\xeb\x57\x88\xf1\xe4\x68\xf2\xc7\xf5\xe1\xef\xd7\x0f\xbf\x40\xc9\xd1\xe4\x59\x91\x5d\x2e\x49\x8e\x64\x0b\xbf\x79\x30\x06\x9b\x49\x85\x8e\xe4\xb7\x29\x97\x45\x47\xa3\x26\x9f\xdf\x26\xf2\xf8\xf1\xf5\x9a\x3f\x31\x58\x63\xa0\x33\x33\xbf\x06\x3e\x6e\xa2\x03\x4f\x8d\x1e\x55\x8f\x39\xe8\x08\x19\xe8\x73\xa7\xd5\xcc\xe6\xb6\xbd\x33\xe3\x43\xc6\x45\x76\x53\xae\x40\xa7\x97\x9d\x2b\x65\x95\x61\xfc\x9f\x52\x08\x0a\xac\xc5\x5c\x16\x59\x5d\x8b\xf7\xa1\x67\xde\x0f\xb7\x01\x4d\xf7\xa4\xec\x96\x1c\xe0\x6a\x6c\x28\xfc\x77\x94\x5f\xbc\xcd\xaa\xec\xb2\x46\xbe\xc2\xda\xda\x5b\x9b\xa6\xef\x27\x0f\x75\x8e\xe1\x51\xea\x98\xb9\x1f\xce\x8e\xdc\x1f\x93\x29\xa8\x9a\x93\x03\x48\xb2\x0e\xfc\x1b\x4a\x04\xb9\x6c\x7a\x38\x38\xd6\x49\xfd\x55\x11\x32\x70\x9a\xed\x69\x18\x84\xa6\xc6\x27\x17\x25\x3a\x2a\x75\x64\xe5\x44\x25\x23\xcd\x52\x3a\x3d\x98\x1d\x45\x91\xb6\xb6\x57\x38\x9a\x44\x48\xff\x12\x2f\xd1\xa4\xb2\x8e\x26\xad\x3e\x4c\xc2\x5f\xa9\xcf\x6d\xe8\x7b\x11\x66\x60\xa4\x73\x66\xbd\x56\x06\xde\x5f\xde\x84\xb7\xb6\x91\x3b\xe1\xad\x97\x83\xd0\xbe\xdb\x69\xc2\x0d\x12\x57\xf7\xb4\x4b\x17\x31\xf1\xc8\x9b\xfd\x56\x87\x3b\xcd\xbe\x39\xe2\x85\xbd\x58\xda\xb3\xff\x8e\xfc\x73\x45\x2b\x92\xb7\x57\x41\xdb\xcb\xfd\x39\xf4\x3c\x1d\x04\x21\x1f\xba\x4f\xd4\xbc\x39\x8f\xa6\x64\x36\x60\xe3\x95\x90\xde\x16\x5c\xb9\x7a\x30\x4c\x93\xd2\x8d\x34\x74\x4b\xa7\x0c\x57\x82\x0a\xa0\x8d\x7b\x80\x57\xb0\x7d\xe6\x69\xe1\xac\x57\x1d\xa1\x81\x77\xe2\xe7\x03\x89\x0b\x5b\x04\x17\x35\xb8\x72\x0b\xa8\x92\x8b\x2a\x81\x83\x17\x3c\x5d\xb9\x42\xc0\xb9\xcb\x5c\x3a\xde\x67\x2c\xe1\xf8\x10\x4d\x0f\x2c\x94\x98\x7b\xc7\x28\x82\x57\x49\x40\x76\xf5\x13\x06\xa2\x5f\x5d\x0c\x0c\x81\x0c\x7a\x96\xb6\x7c\x73\xb8\x0b\x23\x69\x12\xb2\xca\xf8\x44\x41\xae\xed\xb1\xb1\x64\xbb\xe5\x09\x98\xf2\x8e\x11\xab\xa1\x88\x01\x6f\xfa\xb9\x74\xc9\x4d\x6b\x71\xf9\x01\xac\xc5\xfe\x82\x92\x22\xdf\xcf\x49\x3d\xaf\xe8\x52\xf0\xd8\x0e\xef\x3e\xf3\x3d\x12\xc3\xac\x36\x77\x36\x37\x0f\xb9\x1e\x6a\xb6\x27\xaa\xe1\x8f\xe6\x0b\xc3\x40\x1c\x85\xfc\x37\x15\x83\xb0\x99\x84\xe2\x50\xe3\xb8\xa7\x3b\xdf\xf5\x27\x4d\xcd\xf3\x91\xfe\xdb\x4e\xe2\x91\x1e\xdb\xc4\x74\x28\x88\x95\xe3\xbf\xf8\xab\x3c\xf1\xd3\xcb\x13\xad\x89\x33\x68\x65\x83\x5e\x2e\x92\xdd\x9f\x8b\xbc\x07\xff\x08\x63\x09\xb0\x90\x41\x4e\x1e\x0a\xff\x78\x66\xd2\xff\xd2\xd6\x7c\xfd\x8b\xc9\x5d\xec\x73\x73\xc0\xbe\x84\x27\xb5\xe2\xe2\x44\x3f\x44\x98\xa6\x6c\x7a\x30\xc3\x65\xca\xa6\x87\x33\x9c\xa5\x6c\xfa\x85\xa9\xf8\x10\x6c\xd7\x1a\xc9\x3c\x2a\xcd\xd6\xe0\x09\x55\xa6\xc2\x51\x9a\x52\x41\xd9\x1a\x5b\xb1\x8c\xe3\xc4\x2b\x9f\xd9\xf2\x59\x1c\x47\x56\x13\x13\x51\x36\x14\x4f\x5c\x0e\x02\x9e\x39\xe0\xa5\x19\xba\x0f\x0f\x4f\xeb\x97\x82\xb4\x3f\x37\x94\x3d\xa5\xf0\xd4\x79\x10\xa0\xa9\xb4\x25\xcc\x4a\x83\x84\x98\x2e\xef\xd2\x3c\xf4\x27\xa7\x4d\x87\x79\x1c\x47\xe6\xd4\x89\x4f\xe2\x71\x3c\xe2\xe3\xd3\x53\x5a\x3f\x53\x7e\xbb\xcf\xf5\xdd\x24\x08\xe5\x4e\x97\x57\x53\x67\xb4\xdb\x5d\x75\x8f\xd9\x53\xec\x96\x37\x45\x81\x8f\xf4\xe9\x01\x0c\xaa\x41\x36\xe4\xc3\x64\xb7\xcf\xb3\x9a\xae\x9d\x34\x68\xdb\xae\xf2\x4f\xac\x10\x27\x21\xb1\xa1\x37\x59\xa0\x6b\x12\xfc\x24\x2e\xcb\x82\x13\x76\xb7\x30\x4a\x18\x3a\x6a\xf8\x56\x33\x34\x09\x85\xdc\xb5\x07\xe0\x65\x78\x32\x39\x9d\x6c\x32\xa7\xc0\x00\x86\x8d\xbe\x2a\x2d\x39\x4c\xd9\x0c\x41\x6a\x7c\xd2\xc7\x91\xee\x38\x59\xdb\xc7\x2a\x31\xc8\xb9\x05\x1f\xb7\x63\x65\x6d\x1e\xb2\xb7\x65\xd6\x3d\x0b\x5d\xcb\xd0\x9c\x05\x66\x66\xa1\x92\xb3\xd0\xde\xeb\x0f\xe0\x0a\x21\xf9\x7e\x4d\x02\x4a\xe2\x4f\x79\x78\x07\xf2\x3b\x35\x33\xd4\xe1\x57\x84\x6e\x93\x36\x7b\x91\xd8\x7b\x4f\x10\x30\x84\x82\xd7\xe8\xb3\x8c\xb1\x92\x43\xba\xe4\x61\xa6\x5c\xbc\xb2\x7a\x98\x99\xf9\x8e\xd0\x06\x19\xa0\x51\x89\x9c\x20\x71\xab\x6c\xac\xa4\xf4\xd1\x0b\x04\x18\x88\xbe\x44\x15\xb1\x91\x1c\x27\x76\x51\xbf\x95\xf8\x45\xa6\xb5\x98\x93\x13\x12\xf6\xfd\x83\x42\x05\xad\x39\xe4\x10\x86\xc8\x7c\xfa\x03\x49\x0f\xfc\xb6\xb3\xbc\x23\x8b\xe3\x7a\xad\x7c\xee\x56\x34\x37\xfe\x87\xcd\x8e\x75\x6c\xbf\xe8\xc6\xe0\x12\x8c\xd2\x54\xdc\xc2\x42\x34\x16\x97\xb1\xf6\xb5\x82\xde\xa9\x8e\xf9\x93\xe3\xf3\xc7\x22\xbd\xd2\x3f\xd5\x70\xc4\x92\x42\x4a\x51\xb1\x2d\x6f\x95\xc7\xbb\xf8\xa1\x30\x22\xe8\x18\x36\xe2\x9b\x85\xe3\xfb\x59\x3e\xd9\x3f\x8c\x63\x3a\xae\x97\xc0\x15\x96\x58\x3b\xe6\xa8\xc1\xab\x43\x33\x3a\xd8\x68\xdf\x27\xff\x0b\x54\x74\x51\x60\x65\x4d\xea\x21\xd1\x92\x5f\xe9\x22\xf3\x29\x03\x5d\x24\x5e\x69\xa4\xfb\x52\x7b\xbb\x39\x11\x1e\x20\x44\x63\x46\xa6\x7c\xe6\x77\xa6\xbc\x05\x5a\x1d\x8e\xdc\x0e\x5d\xdf\x4d\x3d\x97\x5f\xa4\x69\x8b\x7a\xa0\x1e\x77\x45\x19\x5c\x92\x58\xfa\x71\x38\xc3\x1c\x80\x70\xbc\x0c\x1e\x8a\x94\xb9\xe9\x14\x48\xc2\x05\x3d\xdd\xf8\x03\xe7\x4d\x6f\x09\xdf\xdf\x47\x0c\x53\x2b\x7d\x1a\xa7\xa7\x5c\xde\xb4\xc1\xcf\x18\xb9\x4e\xd4\xc6\x74\xae\x6b\xcb\x62\x42\x8c\x36\xd9\xed\x90\x39\x85\x10\x69\xcc\x7e\x68\x45\x2c\x1d\x85\xe3\x09\x25\xd4\xe7\x41\x8a\x2e\xd8\x6c\x66\x35\xb0\xd8\x2e\x9b\xc4\x65\x4b\x78\x80\xc2\x56\x84\xe5\xa4\xda\xbf\x2c\x73\xb0\xdb\xd5\x0f\xec\x5f\x39\xcd\xf7\x29\xab\x49\xc5\x7f\x8c\x78\x7f\x6f\xb9\xf7\x73\x59\x44\xee\x2b\x20\x56\x56\x40\x64\xf7\x17\x10\x59\x5b\x40\x64\xdb\x04\x44\x66\x05\x44\xb6\xa3\x80\xc8\xee\x2e\x20\x32\xe4\x7f\xe9\xe6\xbe\x96\xa3\x5f\x84\x78\x58\xfd\x02\x0d\x24\xfa\x1c\x3a\xa6\x0c\xed\x68\x75\x5a\x13\xfe\x5a\x9d\x3c\xe5\xc6\x17\x88\x96\xbe\x9d\x67\xcb\xec\x8c\x16\x94\x53\x52\x2b\xb8\xea\xd3\x4b\xbf\xda\x33\xa7\x48\x12\x3d\x1c\x1f\x3e\x8c\xf0\x6d\x4e\x6b\x31\xbd\xc7\x2b\x5e\x42\x66\x43\xca\xce\xe5\xa0\x24\x55\xd2\x3d\xbb\x2c\xf0\x06\xc3\x72\x15\x45\xfb\xa5\xa7\xe8\xe7\x09\x1b\x2f\xcb\x1a\xbc\xe0\xb3\x02\x3d\x4a\x0e\x30\xd8\x21\x92\x0a\x53\x75\x08\x0e\x11\x66\xb0\xab\x73\xb4\xc1\x32\x78\x3e\xdc\xa3\x0a\x7f\x09\xbe\xdc\xb8\xa1\xce\x3f\x21\x2f\x26\x2d\x22\x7a\xe9\xd8\xdd\x49\xa8\xfc\xe0\x5f\x49\xe8\xaf\x24\xf4\x57\x12\xfa\xef\x45\x42\x55\x8f\xa4\x20\x62\x53\xc9\xe0\xdb\x5e\xb2\x0a\xa8\xa8\xaa\x78\xca\xbb\x69\x25\x71\xc1\x87\x55\x79\x21\xc4\x24\x55\x98\x14\x33\x97\x14\x57\x86\x14\xff\x8f\x23\xb7\xd7\xb4\x28\xf6\xd5\x57\xfd\x4a\x70\x7f\x25\xb8\xbf\x12\xdc\x5f\x09\xee\x27\x21\xb8\xbd\xcc\xe9\xa7\xa1\xc6\xbf\x44\x82\x7b\x5e\xd0\xcb\x4b\x52\x39\x9e\xba\xc6\x78\x70\x96\xd5\x64\xdf\x3c\xdf\xbf\x94\x0b\xd9\xb0\x40\xf4\xd4\x37\x8f\x76\x26\xce\xff\x02\x71\xae\x95\x16\x8d\x34\x51\x8a\x63\x9e\x90\x56\x00\x99\xf8\x18\x88\x1f\xfb\x24\x26\x26\xcc\x43\x49\xe6\x1c\xbd\x35\x4d\xf8\x4f\xb3\x99\x28\xc2\x4d\x47\x6b\xa9\x0f\x3b\xea\xfa\x50\x6e\x10\x7e\xb0\xef\x67\xee\xae\x90\xf8\xad\x57\x04\xa6\x61\x42\xa6\x7c\x96\x56\x32\x3f\x0e\x8e\x5c\x02\x13\xc1\xc4\xaa\x90\x7f\xeb\xaa\x94\x50\x99\x97\x45\x45\x3e\x4a\x0a\x12\x61\xd9\x77\x47\x1c\x8e\x68\x23\x81\x7b\x79\xb3\x99\x21\x2c\xda\xf0\xaa\x3f\x33\x3b\xb8\xd5\x8e\x13\x2a\x2f\x5a\x22\x09\x57\x98\x84\xf6\xb4\xab\x80\xc4\x73\xc2\x9f\x95\x8c\x93\x8f\x81\x56\xac\xcb\x0a\x0c\x80\x6e\x9a\xf6\xc0\x9d\x8e\xd7\xce\x27\xb2\xbc\x66\x64\x9b\xf5\xaf\x79\x55\xfd\x32\xcf\xe3\x3d\x8e\x55\x4d\xb8\xcd\x7e\xef\x6b\xb9\x01\xc3\x93\xe0\xd1\x81\x0e\xca\x32\x21\x65\x5e\xb9\xd2\x2f\xa7\xcf\x29\x19\x1f\xbf\xfb\xf3\xc9\xe9\xc9\x8b\xf7\xde\x15\x8a\xa9\x97\x5f\xbe\x74\x7f\x0d\x9c\x3a\x1a\x4c\x37\x6c\x8f\x32\x6a\x18\x08\x53\x7e\xf4\x13\x19\xa7\x74\x6a\x0d\x9c\xd4\x69\x94\x55\xe7\x75\x84\x28\x4b\x24\x86\x11\xea\x38\xea\x62\x80\x6a\xc6\x57\x77\x3a\xea\xd9\xb4\x9e\xa5\x2b\xa9\x30\x17\x7d\xa5\x0c\x83\x3d\x57\x63\x15\xa9\x61\x55\x08\xcb\x85\x82\x5f\xa3\x43\x84\x4b\xef\xe7\x46\xce\x7a\x86\x6b\x9b\xd1\x97\xe0\x24\xd3\xb1\xd0\x0e\x86\x68\xeb\x20\x0a\x69\x48\x1d\x57\xb0\x22\xab\x5d\xd2\x15\x47\x0c\xf8\x10\x1a\x93\xb1\x59\x8f\x74\x06\x50\x97\x6e\xb5\x19\x8a\xe3\x2a\x71\x30\xa6\x70\x86\x70\x0d\xcf\x70\x6d\x22\x8f\xf5\x1e\xcb\x76\xa5\x0a\xd2\x23\xe0\x47\xdc\xda\x5d\xb7\xfe\x7d\xae\xfa\x2d\x91\x38\xc6\x3d\x90\xfd\x4f\x75\x0f\xa4\x9f\xe3\x98\x36\xe3\x27\x7e\x99\x14\xba\x19\xc7\xa0\x96\x3a\xd3\x32\x6a\x4d\xf8\x5b\x3d\x8f\x6f\x16\x4d\xf9\xd7\xd8\xc1\x2c\x2c\x1b\xc7\x30\xbb\xe2\xce\x37\x6d\xd7\xd6\x11\xc9\x39\x6e\x1d\xae\x94\xef\xc8\xa2\x20\x73\xbe\x5e\x8f\xd4\x5f\x76\xa5\xad\x21\x95\x2e\x92\xd6\xdb\x71\x7d\x91\x5d\x7a\x45\x02\xfb\x07\xb2\x7c\xea\x42\xd2\xd9\x52\x7d\xc4\xf3\x8c\x93\x4e\x91\xbc\xd5\x59\x22\x8a\xe3\xe9\xcc\x43\x2c\x04\xe0\xc1\xd1\x81\xf2\xad\x24\x16\x60\x63\x23\xc8\x44\x9b\x31\x54\x10\x18\x69\xa1\xa4\x70\x83\xc0\xa5\x90\x93\xdd\x3d\x3e\xa8\xd2\xf6\x20\x98\x45\x22\xc4\x3a\x9d\x47\x95\x32\xe5\xde\x01\x24\xd7\x42\x15\xea\x01\xac\x34\xa1\x76\x56\x7f\xe5\x01\x82\xf0\xf5\x5a\xbb\xbf\x8d\xd2\x94\x01\xf4\x9a\x9d\x4b\xa3\x4a\xe1\x47\x0d\x7d\x8b\x9b\xec\xcb\x1c\x1b\x93\xbc\x42\x9d\x1d\xd1\xf9\xf0\x22\xab\xd9\x6f\xf9\xf0\x8c\x10\x36\x04\xe0\x9e\xac\xa0\x35\xc9\x87\xfb\xc3\x7a\xb5\x24\x55\x82\xbc\x12\x62\x09\x88\x93\xe6\x0f\xb4\x3d\x13\x6e\x87\xef\x7a\xe8\x17\xe1\xad\xab\xaf\xc3\x73\xef\x69\x90\xf0\xd8\xdd\x6c\xb0\x31\xfd\x5a\x80\x31\x29\xfe\xf3\x69\xc4\xf8\xb9\x16\xe3\x0d\x7d\xee\x95\xc6\x89\xde\x12\xe2\x8e\x06\x38\x92\xaf\xe8\x82\xcc\x6f\xe6\x05\x79\x96\x15\xc5\x59\x36\xff\x50\x4f\x46\x87\x4a\x84\xfe\xb2\x2c\x3f\x4c\x46\x87\x1b\x84\x17\x1e\x97\xd4\x66\x51\x42\x2b\x6c\xdc\x1e\x79\x98\x10\x9e\x88\xd5\x1a\x92\x8f\xcb\x8a\xd4\xb5\x58\x09\xd0\xb7\x10\xca\x2f\x48\x35\x3c\x23\x80\xfd\x35\x2c\x2b\x8f\x32\x0e\x48\x27\x0c\x24\x40\xa6\xd9\xab\xf6\xd6\xd9\xff\x13\x35\x8d\xc4\x65\x4b\x9a\x2c\x8b\x10\xdd\x79\x1c\x4b\x5a\xb6\x41\xc9\x1c\x13\xe5\x50\x84\x19\x5e\xe1\x22\xad\x93\xb9\x13\xd8\x31\x77\x78\x05\x79\x28\xe6\x08\x17\xe1\xd3\x63\x70\xa7\xd2\x39\x4e\x98\xe6\x56\x94\x2a\xa2\x47\x02\x51\x4a\xc2\xb1\xcb\xb0\x68\x62\xa8\xa0\x1d\x08\x64\x88\x1a\xc0\x8e\x3d\x01\x20\x05\x5b\x34\x41\x18\xe2\x24\x3c\xb6\x18\x22\x71\x64\xe5\x6a\xc5\x42\xc8\xdb\x04\x7b\x68\xec\xe1\xd2\x46\x3f\x0b\x9f\x9a\x63\x98\x34\xc9\xf2\x94\x1e\xda\x0a\x43\x78\x05\xcf\xf0\x0a\xe1\xf9\xa6\x11\xd1\xe2\x43\x56\x36\x00\x2b\xf1\xdc\x8d\xa4\xc9\xb5\xa6\xc7\x61\xc3\xd6\xeb\x44\x23\xc8\x4a\xc8\x3d\x40\x00\x6d\x4e\x05\xc9\xdb\x33\x41\x72\x04\x42\xa1\x0c\x27\x59\x38\x7c\xd8\xc5\xae\x7c\x98\x14\xb5\x3e\x9f\x1f\xaa\x9e\x15\xf7\xb8\xeb\x75\xd7\xef\x06\x4e\x31\xbe\x65\xe0\xa1\xf8\xec\xfb\xb0\x99\x9f\x88\x4d\xfc\x54\x6a\xcc\x4a\x3f\x1e\x58\x85\xe6\xb3\x06\x31\x0c\x02\x84\x83\x7a\x40\x57\x06\xb2\xac\x13\x22\xd3\x94\x39\x1b\x82\xba\xf3\x7a\x56\x94\xf3\x0f\xfb\x75\x51\x72\x27\xf4\xbd\x7e\x60\x1f\xfb\x13\xec\x16\xe7\xe4\x72\x59\x64\x9c\x74\x56\xf4\x4a\x5f\xd2\x8f\x94\xd5\x0f\xe0\x47\xe3\x95\x53\xfd\x06\xfc\x7e\xa1\x7a\x6b\xbe\x85\x58\xf9\x19\x66\x5c\x27\xef\x30\x73\x3c\x26\x1f\x39\x61\x79\x72\x2b\xc3\x91\x26\x66\x4e\xb1\x0a\x9b\x9a\x44\x11\x3e\x65\xe2\x8f\x26\x76\xb3\x44\x72\x0a\x00\xca\x83\xa4\x08\x08\x4e\x62\xee\x69\xfe\x0a\x3c\x98\x5e\x28\x95\x70\xcb\xa1\x4b\x6a\x8a\xa4\xdb\x14\x23\x59\x45\x6a\xfe\x66\x21\xae\x9a\xc4\xec\x0e\x60\x92\x46\x5c\xa6\xf3\x3c\xa7\x35\x27\x15\xc9\x15\x60\x15\xd8\x3d\x6c\x42\xcf\x53\x41\x0a\xc5\x6e\x3e\x29\x4a\xee\x16\xc1\x30\x0d\x4e\xb2\x56\xd0\x5c\x89\xd9\xe7\x24\x77\xe8\x38\x37\x79\x6f\xdb\x03\x62\xde\x80\xa8\x06\xb9\xb5\xcd\x9d\xc2\x9a\x9e\xc0\x8e\xa0\x3a\xa7\x95\x85\x40\xa4\x38\x82\xc1\x44\xc8\x20\xaf\x89\x9f\x83\x66\x33\xb4\x7e\x9f\x55\xe7\x84\x8b\x86\xbe\x17\x2d\x82\xb0\x5b\x22\xa5\x8a\xf0\x1b\x84\xdd\x25\xfd\x94\x23\x34\x28\xe3\xb8\x09\x3d\x94\xa1\x38\xce\x02\x68\x43\x70\xac\xc3\x20\xde\x38\x5a\xda\x50\x4b\xd4\x80\xed\x1e\x57\x24\xcb\xdf\xb0\xe2\x26\x71\xbe\x77\xec\x8e\x63\xec\x54\x06\xd8\xd9\xcd\x06\x3b\xb7\x52\x60\x2b\x48\xa7\xb9\xc6\x62\x28\x00\xba\xe6\xe3\xf1\x69\x4e\xba\x56\x79\xb3\x41\x77\x3c\xfd\xce\x29\xbc\xdb\xe9\x77\x2b\x76\x9f\xfe\x9f\x8a\x92\xfe\xd4\xe7\xda\x5d\xee\x56\x13\x4b\xb9\x1b\x3b\x1b\x91\xef\xa1\x19\x09\xa6\xf8\x2d\x25\xd7\xcd\x56\x3a\x47\xd0\x41\x23\x20\x1b\x43\x7d\x2c\x36\x46\xfb\xa3\x9c\x7e\xc6\xa7\xb0\x32\xe3\xe9\x2c\xd2\xc7\x31\x34\x50\x7b\xc8\xd4\xd1\x6e\xb5\x10\x99\x24\x13\x75\xd2\x2a\x2d\x8f\x39\xec\xfd\x4e\xeb\x8e\xbb\x69\x2e\x48\xb1\x24\x95\xbe\x53\xf4\x04\xfe\x08\x03\xba\x1c\xd1\x71\x62\x92\x03\xdf\x4b\x6a\x71\x56\x59\x48\xf8\xa1\xbd\x57\xa9\xbd\xf7\x25\x7c\xc1\x58\x7e\x48\xc2\xdd\xaf\xae\xba\xbe\x3a\xc0\xd6\xec\x7a\x92\x3e\xcb\x39\xaa\x52\x73\x50\x76\x19\xbe\x7f\xcf\x7f\xf6\xa0\xa6\x00\x2f\x09\x79\x0a\xb4\x14\x75\x2b\xf7\xe5\x0e\x07\x49\x6f\x0e\x38\x34\xde\x95\xe9\x49\x30\xad\x5d\xad\xf7\x7d\x96\xe7\xc6\x69\x62\x83\x1b\xf4\x78\xb7\x26\x24\xee\x9e\xdb\x8a\x7b\xb9\x87\xe4\xf3\xce\xa6\xcc\x29\x6c\xd2\x7f\xde\xb5\x70\x5b\xd9\xb9\x9f\x63\x2d\xbf\x7c\xff\xfa\xab\xa7\x59\x55\x8f\xf5\xe8\x92\x5b\x9a\x4f\xa2\x17\x4f\x7f\x7f\xf5\xdd\xf2\x87\x3a\xc2\x30\xc0\xc9\x6f\x6f\x95\x5a\xb3\x8e\x26\xd3\x28\x36\x09\xcc\xb0\x04\x5a\x97\xce\x1c\x93\xe9\xf4\x77\x38\xa2\x8b\x08\x4f\xa7\x5f\xfc\x0e\x4f\xc3\x2c\xc5\x6c\x36\x93\x56\xb9\xdb\x46\xdd\x03\x1c\x0d\x87\xd1\x0c\x4f\x0f\x7f\x87\x0f\x75\x13\xcb\x83\x68\x36\xc3\xea\xef\x43\xe7\xef\x2f\x9c\xbf\x1f\x3a\x7f\xff\xce\xf9\xfb\x3f\x9d\xbf\x7f\xef\xfc\xfd\x07\xe7\xef\x3f\x3a\x7f\xff\x97\x18\xdc\x0c\x8b\x91\xfc\xfd\xef\x4c\xbc\x90\xb7\x0a\xe1\xa4\x12\x43\x9c\x6d\x60\xe4\xe2\xf9\x45\x56\xbf\xb8\xca\x8a\x68\xb2\xc8\x8a\x9a\x6c\x7e\x8b\x85\x60\x3d\xb9\xbd\x84\xf9\x97\x77\xdd\x1d\xd6\x7e\x7c\x71\x56\x47\x3f\x66\x1b\x85\x19\x8a\x9f\x7d\x1b\x3d\xfc\xc3\x7b\x4e\xfe\xb2\x2c\x3a\xb6\x91\x82\xaa\x8d\xf0\x1d\x76\x94\xbc\x6b\x77\xdb\x45\x5f\xf4\xaf\x65\xef\x06\xec\xad\xfa\xa9\x76\x80\x5d\xb6\x6d\x3b\x40\x0a\xd7\x32\x79\xc7\xbe\xbc\xee\xcc\xf5\x2d\x9f\xfe\x14\x9e\x6f\xd5\x4f\x08\x61\xf5\xab\xf3\xdb\x67\x76\x7e\xfb\xb9\xa1\xbe\x3e\xbb\xdf\x9b\x6f\x57\xbc\x72\xd2\x21\x27\x8a\x7f\x44\x2a\x1d\x8e\xd2\xc2\x56\x78\x7a\xbb\x31\x39\x8d\x24\x88\xc6\x7d\x18\x58\xd9\xa8\x84\x3f\xee\xd6\x87\xf8\xbc\x2b\xeb\x94\x21\xe5\xd1\x3f\xcb\x6a\x3a\xdf\xcf\xab\x72\x99\x97\xd7\xcc\xbb\x46\xbc\x37\xfb\xf3\x92\xf1\x1d\x3c\x40\x22\x1c\x6e\x58\xc5\xce\x6b\x74\xf4\x7d\xed\xcb\xd6\x5f\xbe\x9e\x57\x65\x51\x28\xc2\x14\x10\x40\x5b\xaa\x25\x0f\x69\x1d\x17\x78\x8e\x17\x38\xc7\x17\x78\x89\x2f\xf1\x15\xbe\xb1\x54\xea\xdc\xb1\xb6\x9c\xff\x4f\xb5\x09\x9f\xdd\x9d\x14\x9f\xfe\x0b\x90\xe2\xd3\x7f\x1b\x70\x95\xd3\x7f\x6d\x52\x7c\xfa\x93\x91\xe2\x6b\x4b\x0f\x2a\x03\x4e\x1e\x72\x10\x74\xbc\x85\x2a\xc7\x31\xc1\x37\xc2\x55\x9e\x87\x82\x35\xd6\x55\xc6\x33\x41\x99\xc8\xaa\xb1\x36\xfc\xfe\x40\xaa\x23\xef\x97\xdc\x7e\xcc\xa0\x2d\x3a\xd3\xf2\xe2\xb3\xba\x6a\xbc\xf9\x97\x70\xd5\x38\xf1\x5c\x35\x4e\x3e\xa9\xab\xc6\xc7\x5f\x5d\x35\x7a\x5d\x35\xde\x36\x5d\x35\xde\x7e\x4e\x57\x8d\xe3\x80\xab\xc6\x71\x8f\xab\xc6\x79\xb7\xab\xc6\x87\x86\xcb\xc4\x87\x9f\xdc\x67\xc3\x74\xfd\xd6\xe1\x1f\xde\xfe\x84\xde\x1a\x66\x00\xef\xb4\x0a\x5e\xf3\x1c\x9f\xd1\x37\x1a\x3b\x1f\xfe\x5e\x53\x5a\x9b\x70\xf0\x76\xa3\x27\xc8\xcd\x0a\xc1\x42\x59\x21\x08\xba\x2d\x01\xdf\x71\x4a\x66\x1b\x48\x01\xe8\x90\x9f\xd1\xc8\xfd\x89\xcb\x06\xf1\x19\xf9\x0f\x70\x62\x69\x51\xb9\x5e\x97\x2e\xf1\x15\xb7\x4b\xe9\xd3\xa6\x32\xad\xb4\xf6\x78\x5c\x11\x99\xfc\x07\xb5\x93\xfb\xba\x0e\xf7\xda\xca\xb1\x5e\x57\x1b\x84\x4b\x84\xa9\x83\x3a\xea\xf5\x07\xdd\xc1\x68\xfc\xe7\x47\x65\xfb\x4a\xa0\xfa\x4a\xc0\xde\x4b\xc5\xca\x2b\xdb\xde\x41\xda\xee\xa1\x7b\x69\x4b\x9d\xc9\x04\xe1\xf2\x13\xf9\xf3\x3c\x4b\x13\x2d\x50\x9c\xf2\x2a\x9b\x7f\x20\x39\xd6\xe6\xbf\x53\xe9\xa2\x81\xb3\xc6\xef\xba\xf1\x7b\xd5\xf8\x5d\x34\x7e\xcf\x1b\xbf\x17\x8d\xdf\x79\xe3\xf7\x45\xe3\xf7\xb2\xf1\xfb\xe6\xdf\xc6\x39\xe8\x44\x3b\x07\xd5\xd6\x39\x08\xc4\x9e\xf4\x63\x52\x3b\xbe\x2a\xb5\xb6\x4c\x0f\x5e\x48\x2a\x5c\x3b\xe0\x22\x9f\x06\xe1\xe9\x5d\xf2\x21\x21\x69\xe6\x66\xf1\xcd\x1a\x59\x7c\x2b\x71\x4f\x45\xbc\xca\x98\x94\xf9\x28\x3b\x7f\xc5\x9e\x09\x2e\x26\x12\x52\x6d\x75\x5e\x8f\x43\x2f\xd7\xeb\xa0\x68\xb8\xbf\xef\x15\xde\xa7\x2c\x42\x18\x46\xe1\x75\x42\xf2\xee\x3e\xcc\xbb\x1d\xba\x20\x79\x57\x0f\x94\x9d\xbf\x59\xf1\x9e\xef\xd0\x6f\x77\xfc\x90\x72\xc5\x9d\x7e\x68\xfd\xbe\x5c\xcd\x2f\x9e\x93\x2b\x3a\x27\xa6\x7d\xef\xe9\x7a\xfd\xb4\x2c\x0b\x92\xb1\x64\x34\xba\xa6\x2c\x2f\xaf\xe3\x38\x2a\x19\x17\x25\x6a\x9e\x55\x5c\x90\x46\xf9\x02\xd9\x86\x75\xf7\xaf\xf2\x0e\xd9\x5b\x8b\xfa\xfb\xc6\xf2\xad\x3a\xd7\x05\xc6\x2b\x46\xff\xb9\x22\xaf\x72\xa7\x55\x48\xa5\x79\x45\xf2\x08\xdc\xe5\xed\x53\x96\x17\xe4\x5d\x59\xf2\xd7\xe5\xaa\x26\xcf\xcb\x6b\x16\x61\x4d\xe8\x74\x21\x29\xe4\x43\x74\x1e\x9b\x93\x9a\x97\x55\x1d\xe1\xe9\xcc\x16\xb8\x5c\x71\xc8\xed\xf1\xe6\xac\x26\xd5\x15\xa9\x6c\x13\xd7\xaa\x44\xc6\xe8\x25\x14\x51\xab\x71\x85\x3f\x00\xbc\x13\xb1\x1e\x6f\x35\x4e\xa8\xf6\x78\xab\x09\x5f\x2d\x43\x6e\x6e\x16\x72\x08\xb3\x34\x57\x09\x84\xc6\xff\x5c\x91\xea\xe6\x84\x08\x66\x48\x90\x84\x69\x9e\xf1\x6c\x9f\x9c\xe5\xfb\x34\x4f\xcd\x1c\x99\x98\x82\xf6\x34\xe1\x68\x9f\x57\xf4\xfc\x9c\x54\xb3\x08\x21\x99\x2c\x2e\x30\x33\x96\x7a\x55\x40\xae\x14\x61\xaa\xc6\x1c\xac\x1d\x9a\x59\xd3\xbf\x07\x7c\xac\x27\x7d\xbd\x26\x3a\x89\x72\x9d\x50\xb4\x5e\xb3\x38\x66\xfe\x13\x27\xce\xc3\x49\x3f\xfa\x3a\x91\xee\x1f\x2a\xb5\x15\xf3\x51\x9e\xa8\x60\xed\x4c\xb2\x25\x5c\x76\xcf\x48\x56\xd1\x6c\xbf\xbc\x66\xb5\x9d\x0f\x3a\xa6\xb9\xbc\x12\x71\x04\x9f\x6d\xbb\x29\xfd\x6e\xb2\xf4\x75\x52\xba\xef\x33\xff\x7d\x9d\x66\xce\x30\x34\xdd\xc9\xe2\xb8\x36\x5d\x48\x39\x9b\x24\x99\x60\x33\x13\x8a\xf9\xd8\xee\x72\x74\x64\x27\x2a\x1d\x1d\x4e\x78\x63\x95\x94\xbf\xe1\x78\x5e\x94\x35\x49\x2a\x08\xb9\xd9\x60\xf3\xa9\x59\x2e\x13\xad\x7d\x45\x6b\x4e\x74\xf6\x6a\xd9\x44\x55\x96\x1c\xde\x89\xfb\x02\x77\x2d\xab\x68\x10\xcb\x53\xd8\x6e\x2c\xaa\x48\x4d\x7f\x20\x2a\x45\x64\xb5\x62\x45\x59\x2e\x8f\xaf\xb3\x8a\xbc\x23\x5a\x45\xd6\x53\xbb\xac\x28\x61\xf2\x70\xcc\x21\x2d\xd8\x96\x86\x64\x82\x48\x97\x86\xc4\x71\xd2\xfd\xa9\x91\x43\x4a\xb0\x42\x88\x5a\xcd\x2f\x4e\xc4\x83\x2f\xe1\x4b\x61\xba\x7a\x26\x4b\xb6\x40\x58\x1e\xf5\xce\x0f\xc2\x6a\xb3\x0b\xa1\x52\x3a\xca\xb4\x89\x42\x38\x47\x99\x4c\xe9\xa0\x03\x66\xa5\x63\xc3\xd7\x65\x4e\x9c\x5c\x6c\xcc\x40\x84\x51\x09\xd8\x0d\x29\x57\x45\xfb\x6f\xa1\x38\x4a\x18\x7a\x44\xe3\x38\x7a\xfa\xe6\xf9\xf7\x42\x04\xa1\x1a\x68\x7b\xcc\xcb\x6f\x96\x4b\x52\x3d\xcb\x04\xb7\x18\xc7\xd1\x97\xef\x5f\x7f\xd5\x53\xe2\x11\xba\x55\x19\xc6\x8c\xc7\x14\xf5\xc6\x94\xea\x23\x70\x24\x49\xd8\x24\x3c\x9e\x12\x6d\x6c\x8e\xd8\x84\xe9\xbc\x85\x59\x9e\xcb\x72\x30\xf9\x94\x9d\x83\x95\x58\x27\x47\x54\xa9\xa0\x03\x11\x47\x72\x4f\x80\x91\xfa\xcf\x45\x79\x96\x15\xb0\x48\x75\xa2\x9a\x95\x6f\x1a\x2d\x6b\xcc\xb9\xc0\x3a\x4c\x67\x76\xc5\x65\xdd\x4f\x70\x42\xfa\xb7\x66\xa8\x9b\x3b\xef\xce\xee\x46\xb6\x6f\x50\x33\xcd\xf2\xaa\x21\xaf\xda\xf3\xec\xdd\x1f\x92\xca\x9b\x7b\xe9\x05\x13\x53\x98\xc7\xf1\x3f\xbc\x3c\xf5\x62\xbb\xf8\x77\x57\xca\x43\x7c\xca\xa6\x3d\x80\x37\xab\xa0\xa3\xb6\x4a\xe0\x0a\xe2\x7d\x68\x04\xcd\xa3\xa2\xfc\xd7\xdc\xd3\xa2\x8f\xa0\x5c\x41\xc0\xc7\x78\xc5\xde\x16\x19\xac\x08\x4b\x99\x5f\xd3\x1e\x5d\xa4\x6f\x28\x22\x68\x29\x23\x62\xc7\x27\xa3\x03\x34\x10\x57\x41\x1a\x79\x37\x03\x8e\xf6\xf7\xa1\x50\x84\x70\xc2\x53\x2a\x51\xf9\xc5\xaa\x68\x6f\x0a\xad\x54\xc0\x67\x72\x34\x21\x0e\x11\x20\x12\x79\x12\x0d\x23\xc1\x61\x26\x95\xdf\x4e\x96\xe7\xc6\x00\x13\x6a\x44\xb3\x67\x7e\x2b\xa0\xcd\x20\x2c\x7f\x76\x41\x8b\x3c\xa1\xfa\xe4\x35\x16\xc9\x6f\xcc\xac\x13\xfe\x47\x42\xbd\xe5\x65\xea\x6b\x74\x6b\x1b\x89\x4d\x8a\x1d\x3e\xe4\x75\x9b\xbb\xd9\xba\xaf\x9a\x1c\x11\xf0\xed\xcd\x86\x7c\xb1\x5b\xea\x02\x47\x87\x8f\x92\x2a\x4d\x2a\x95\xad\xc2\xea\x9f\x40\x34\x56\x2a\xf3\xe9\xc1\x6c\x0c\x79\x25\xc5\x0a\xd6\x68\x5c\x97\x97\x24\xe4\xb9\x1c\xfd\xc7\xbc\xbc\x84\x14\x8b\xa3\x34\x25\x63\x56\xe6\x60\xa0\x8e\xe3\x51\x12\xfd\x07\x44\x21\xa7\xfe\xf3\xc8\x3e\xf8\x16\xa0\xdd\x37\x08\xa1\xf5\x7a\xdb\x58\x54\x5a\xcb\x9f\x64\x34\x42\x3e\x83\x8d\x5f\x5f\x94\xab\x22\xb7\x97\x27\x98\x07\x3a\xde\x09\x69\xcc\xe7\x2a\x10\xc2\x95\x68\x2a\x7c\x11\x4b\x5f\xa5\xe0\x4a\x8e\x4b\xf9\x47\x22\x84\x43\xb1\x69\xc4\x5e\x16\x82\x60\xbd\x3a\xe3\x15\x51\x19\x0b\x9b\x34\x7f\xeb\x1e\x42\xb7\x46\x71\x11\xec\x56\x9f\xf9\xd6\x70\x72\x5a\xcf\x4b\xc6\xc8\x9c\x27\x1d\x23\xd6\x8a\x0b\x3b\xa8\x26\x15\x0e\x8c\x66\x1b\xc7\x20\x16\xdc\x25\xea\x82\x7b\x73\x68\xba\xdf\x97\xf3\xb2\xeb\xf2\xb3\x0c\xe0\xc1\x2e\xf7\xc1\xae\xdd\x87\x97\x37\x30\x08\x1b\xba\x02\xd9\x5d\x02\xc2\x82\x66\x43\x2b\xcb\xae\xd9\x6e\x5a\x57\x77\xa0\x0b\xc5\x24\x06\x3f\xea\x2e\x5c\x66\xb0\x81\x3b\x32\x9a\xf6\xb2\x6a\x72\x2c\x5d\xc1\x45\x06\x37\x16\x66\x65\x59\x11\xd1\xbf\xac\xda\xd2\xe5\x73\x57\x3c\xe2\x9e\x78\x54\x99\xdf\xc0\x18\x5a\x19\xa8\x42\xeb\xb5\x10\x13\x78\x43\x9a\x4a\x0e\x30\x13\xfc\xd7\xb1\x4e\xa1\xaf\xfa\x4c\x2a\x4c\x10\x2e\xcd\x7b\xf9\xf8\x39\x29\x78\x56\xa3\x84\x23\x9c\xa5\xe5\x38\x17\x3f\xff\x86\x6b\xfd\xe7\xf7\x83\xec\x31\x55\x4f\xbf\x26\xe7\x19\xa7\x57\xe4\x28\xc9\xd2\xe6\x33\xcc\xf5\x17\x3e\x57\x51\x1f\x08\x4d\xb2\x27\xba\xd8\x5b\x98\x46\xbf\xaa\x7e\x16\xac\x5a\xeb\x5e\xbf\xb7\xbd\xd6\x69\xf3\x59\xb8\xaa\xee\xf5\x7b\xdd\x43\x1c\x3b\x75\xfb\xba\xb5\xf1\x53\x6f\xe5\x2b\xc1\xdf\x24\xd9\x7a\x5d\xa3\x38\x86\x79\xcb\x69\xad\xc4\x36\x3d\xab\x19\xae\x71\x05\x79\x7d\x8a\x9a\x0c\xdb\x8d\x6e\x36\x83\x1e\xd2\x70\x7d\x41\x48\x11\x61\x8e\x6f\xe7\xd9\x92\xaf\x2a\xd0\x90\x2d\xb3\xba\xa6\x57\x44\xc6\x07\x76\xf2\xb3\x69\x88\xf8\x04\xb7\x7a\xa8\x13\x41\x72\xe5\x88\x3d\x36\x7c\x3b\x1b\x9d\xb6\xde\xc8\x3a\x8d\xa3\xbd\xe5\x8c\x38\x98\x01\x8d\xbe\x43\x84\xde\x44\xa2\x0c\x3a\xe5\x46\xc9\xd5\xef\x22\x2c\x06\xf8\xff\x50\xf8\x05\x30\xb2\x9d\xdd\x90\x4e\x3a\x81\x9a\x44\xee\xce\x1f\x17\x5c\xc3\xcf\xf2\x7d\xbd\x3d\xed\xf4\x89\x39\xa9\x39\x65\x92\x1d\x97\xdc\x73\x17\x7e\x83\xd9\xa2\xe7\x44\x33\xda\x4f\x6f\x5e\xe5\xee\xc5\x61\xdb\x6a\xca\x06\x96\xdb\xef\x68\x3e\xe2\xa4\x06\x36\xc9\x8f\x73\x54\x56\xc0\x8a\xd4\x65\x71\x45\xa4\x03\xb3\xcc\xaa\x9b\xa8\xe4\x20\x13\xc2\xae\x68\x55\x32\x18\x3a\x1a\x3b\xbf\x2c\x4f\xcb\x6f\x8a\x76\x56\x7c\xb9\x6e\x51\xa4\x83\xa3\xc4\x27\x60\x20\xd6\xe5\x52\x25\x68\x5f\x00\xcc\xd5\xb8\xa2\xe7\x17\x1c\x97\x29\x1f\x5f\xd3\x9c\x5f\xe0\x2c\xe5\xe3\x0b\x02\x0f\x85\x70\x54\xf2\x0b\x52\x9d\x88\x3e\xea\x81\xb1\xfc\x8d\xd2\xb4\x36\x32\xfe\x6a\x48\xd9\xb0\x96\x5d\x16\x69\x3d\x5d\xcd\x06\x64\xcf\x11\x3f\x56\x38\x9a\x0c\x6d\xbe\xb5\x02\x47\x8f\x22\x8b\xed\x13\xc7\x89\x28\xcd\xcb\xe5\x64\xe8\x66\x68\x7b\x14\x21\x99\x69\x4d\xbc\x15\x83\x75\x5e\x33\xf5\x9a\xaa\xd7\xf0\x09\xce\x7b\xaa\xde\x97\xea\x3d\x7c\x98\xf3\xbe\x54\xef\x33\xf5\x5e\x7e\xae\x53\x20\x43\x3a\x6e\x49\x19\x89\x2f\xf8\x65\x71\x92\x2d\x08\xc8\xff\x33\x14\xc7\x6f\xbc\x58\x57\x0a\x7d\xbd\x49\xc0\x32\x54\x6f\x12\x1b\xe8\x8a\xaf\xd2\xf7\x49\x72\x99\xde\x20\xa7\x78\x4b\x7d\x3a\xa5\x33\x30\x4d\x78\x86\x41\xdf\x6c\xe8\xda\x28\x1c\x33\x55\x28\x9d\x6f\x48\x0c\x3d\xea\x94\xe9\x26\x51\xb4\xd9\x20\xfc\x3e\xb9\x74\x47\xa8\x34\xb6\xd3\x72\x86\xad\x7d\xd4\xc9\xe0\x67\xd3\x71\x84\xea\x21\x7c\xe9\x66\xac\x6b\xb4\x6d\x15\x27\xd3\xec\x8e\xcd\x9b\xaa\xfd\x3d\x38\x3a\x83\x69\x7d\xc7\x2e\x6c\xdd\x9d\xfa\x00\xb5\xc0\x74\x75\xbf\x4e\xde\x80\x05\xa2\xaf\x97\x0e\x89\x75\x5a\xdc\x67\x5d\x5a\xed\xec\xb6\x4e\x81\xee\xe7\xf7\x5c\xb7\xbb\x8e\xa0\x2d\xd9\x4c\x17\x77\xed\xba\xd5\xc6\x0e\x7d\x7a\x12\xce\x34\xbf\x4f\x97\x6e\x13\xfd\x3d\x76\x09\x35\xd3\x8b\x3b\xf6\xdb\xd1\xd0\x96\xde\x03\xb2\xce\x74\x79\xd7\x9e\xdb\x8d\x34\x7a\xbd\x74\xac\xa4\xaf\x85\x10\x22\xae\x8f\x47\x82\xf9\x1d\x11\xab\x44\x5a\xaf\xdd\x5f\x56\x9a\xe8\xb5\x9b\x45\x08\x3d\x32\x12\x0a\xa8\x18\x7c\x85\x99\xf6\x2e\x58\x15\xc5\x80\x34\xdf\x6e\xda\xae\x26\xff\x90\x06\x6c\xc3\xef\xfc\x73\x45\x6a\x7e\xac\x09\xea\xcb\x2a\xf3\xf4\x21\x5a\x0e\x52\xc5\xcf\x65\x10\xfa\x8a\x93\x1c\x6e\x4d\xed\xa3\xc8\x4a\x46\x22\xb0\x2e\x19\xd2\xac\xb4\x22\xd5\x8a\x31\xe9\x77\xe9\xbe\x7c\x5b\x64\x37\x27\x3c\xe3\x04\xdd\x92\x00\xa7\x67\xca\x81\x26\x35\x71\x9c\xb1\x45\xf9\x20\xe7\xe4\x57\xa9\x10\xe6\xa0\x16\x51\x7c\xb6\xfa\xdb\xb8\x26\x3c\xfb\x11\xae\xcb\xca\xf8\xb6\xd5\x75\xb9\x3f\x2a\x4f\x79\x4f\x61\xcf\xbd\xd8\x6e\xa2\x85\xe3\x10\xb4\xf8\x9f\xea\x50\x9c\x7f\x56\xcf\xc5\x8b\x7f\x09\xcf\xc5\xa5\xe7\xb9\xb8\xfc\xa4\x9e\x8b\x97\xbf\x7a\x2e\xf6\x7a\x2e\x9e\x37\x3d\x17\xcf\x3f\xa7\xe7\xe2\x55\xc0\x73\xf1\xaa\xc7\x73\x71\xd1\xed\xb9\x78\xd3\xf0\x5c\xbc\xf9\xf9\x3c\x17\xfd\xc8\x87\x9f\xc1\x73\xf1\xec\x67\xf2\x5c\x3c\xfd\xd5\x73\xf1\xdf\xc1\x73\xf1\x3a\xd5\x61\x58\xc6\x31\x90\x35\x7e\xd3\xc6\xef\x4f\xed\xd8\x78\x9a\x24\xf3\x7f\x1b\x5f\xc4\xa5\xf6\x45\x2c\xad\x2f\x22\x1c\xb2\xf4\x32\x29\x1d\x2e\xbb\x34\xbe\x88\x52\x8d\x85\xcb\x4f\xee\x8b\x78\x96\xdc\x24\x24\xa5\xae\x2f\x22\x0d\xfb\x22\x96\xe7\xe7\x05\x79\x55\x3f\x25\x94\x9d\x4b\xa9\x28\x7f\x7a\x03\xbe\x07\x5a\xe6\x18\x1d\x22\x0c\xed\xb5\x9c\xdb\x1c\xa7\xb2\x12\x27\x95\x76\x2a\x93\x9e\x03\xae\x9f\x5b\xcb\xd0\x11\x30\xfb\x28\x5c\xfa\x7c\xbd\x8e\x2e\x45\x55\xd0\x26\x78\xb6\x10\xa2\xfd\x27\xe2\x18\x2e\x8a\xf1\xd9\x8a\xf3\xd2\xb7\xd2\xd7\xbc\x5c\x8a\x03\x93\x9d\x67\xd2\x56\x49\x9a\x8f\xb4\x92\xfa\x54\x3c\x7f\x4f\x3e\x72\xe9\xbd\x45\x4b\xf6\x0d\xe3\xb4\x80\x61\xaf\x96\xba\xd4\xd6\xf9\x39\xda\xad\x18\xf8\x5b\x75\xdb\xba\x64\x7d\x09\x8a\x8d\xdd\x59\x7c\x56\xd0\xf9\x87\xd0\x0c\x86\xa2\xd0\xb4\xae\x54\xcf\x88\x87\xcb\x36\x6a\x77\xbf\x5e\xf7\xae\x83\x6f\x28\x6d\x2e\x41\x34\x87\xa1\x85\x5f\xaf\xd7\x07\x23\xbb\x42\xeb\xf5\xbd\x56\xe8\x27\x9f\xfb\xe6\xe4\xff\x95\xdc\xdc\x6b\x03\x27\x87\x32\x5b\xf5\x07\x72\xf3\xac\xcc\xc9\xd1\x2e\x9d\x4f\x1e\x7e\xe1\xd5\x01\x7c\x7b\xdf\x24\x84\x77\xfa\x88\xc9\x17\x7f\x70\x1b\x52\x70\x4b\x7d\x9e\x7e\xed\x5d\xf7\xde\xa8\x66\x7e\x9c\xc5\xfa\xb4\xa9\x70\x09\x76\xf4\x42\x88\xbd\x41\x63\xe8\xae\xeb\x7b\x80\x47\x09\x11\x3b\xa9\x69\x86\xeb\xdd\xe1\xa8\x61\x12\x0f\x16\x6e\x4d\x30\x6e\x98\xd1\x0f\xef\x68\x46\x6f\xcf\x89\x02\x7a\x20\xda\x5e\xab\xef\x3e\x71\x2b\x2d\xca\xf9\xaa\x4e\x10\xae\x09\x7f\x4f\x2f\x49\xb9\xe2\x9e\x86\x03\x4c\xbb\xca\x8e\x2b\x04\x13\xd9\x92\x19\x90\xbc\xdf\x60\x40\x49\x04\x94\x4d\xeb\x80\x06\x1c\x38\x13\xfb\x2c\x51\xe7\x19\x8b\xc9\x3c\x50\x26\x70\x7c\x60\xfe\x7f\x74\x68\xff\x77\x80\x25\xa3\xa2\xbb\x16\x33\xba\x14\x02\x8c\x6c\x89\x23\x2b\xce\xc0\x3a\xc0\x05\xe6\xf5\xd2\x59\x17\xca\x23\x71\xa1\x1e\x20\xdc\x3e\x02\x9b\xa0\x27\x80\x9a\xc8\x90\x99\x6c\x0b\x99\xfc\xb1\x4b\xb7\x65\xed\x2f\xe5\x65\xa2\xab\xab\x9f\x8e\xff\x84\x3d\x0f\x8d\x97\x7d\xe7\xee\x7e\x5d\xd9\xa1\x9e\x95\xf9\x8d\xa3\xcb\x93\xcd\x75\x68\xf2\x38\xf9\xc8\xf7\x6b\xb8\x21\xf7\xf5\xb9\x89\x9c\x51\x7f\x7e\xb7\x93\x1e\x1a\xd2\x7f\x85\xdf\x8d\x74\xdd\x7f\xfe\xb2\x3c\xbf\xe3\xe4\xcd\x50\x1c\x5f\x78\x76\x2a\x99\xc0\xe4\x22\xe1\x98\x09\xfe\xdf\xb1\x53\x79\xe6\xa9\x16\x67\x35\xad\xb6\xeb\x83\xe7\x7d\x2d\x20\x3c\x77\x95\xc1\xa7\xa1\xd2\x8a\x07\x99\xb2\x7b\xf5\xf5\x4c\x1d\xf8\xed\xfd\x98\xeb\x76\x4a\xef\xd5\x93\xae\xbf\x4b\x5f\xee\x0d\xb7\x8b\x2d\xad\xbf\x89\x9d\x7b\x84\xab\x6e\x17\xe3\x5a\x5f\x03\xfd\xbd\x85\x09\xe3\x2e\xd6\xb6\xed\xcd\xf4\xf7\xdc\x22\x61\xbb\x58\xdf\x7a\x5b\xd8\xd2\x5f\xc0\x22\xb4\x83\xf9\x6d\x4b\x1b\x8d\x3e\xe7\x2e\x6c\xc8\xf5\xfd\x75\xef\x9f\x01\x2e\xa4\x22\xff\x5c\xd1\x8a\x6c\x45\xa3\x54\x99\x51\xba\xc1\x40\xf0\x39\x3e\xc3\xa7\xf8\x1a\xbf\xc0\x6f\xf0\x09\xfe\x88\x8f\xf1\x07\xfc\x76\xe0\x46\xd8\x1a\x45\xd9\xbb\xff\xa9\x1a\xfd\xf7\xff\x4a\xc0\x09\xcf\x7c\xcd\x61\xf2\x2c\x0d\x31\x3a\x4a\xfb\x1b\xc7\x5a\x0d\x7c\x4e\xf8\x91\xf3\xf7\xa4\xb9\x6d\xa4\x51\xc1\x57\xd1\x80\x39\x70\xd4\x02\x17\xb9\xc8\x6a\xe7\x78\x29\x1f\x65\xcc\x91\x51\xdd\x24\x24\x7d\x29\x44\x8b\x47\xe8\x91\x03\xf4\x8f\x55\x98\x95\x56\x5b\x6f\x3b\xac\x4c\x54\x70\x33\xc0\x1c\xc1\x7f\x65\x7f\x15\x9a\x50\xa9\xb2\xdb\x48\x03\x02\xae\xd6\x6b\x77\x4d\x5f\xff\x4b\xd8\x51\xfe\xd1\x54\x03\xc7\xf1\x6b\x2f\xbd\x19\x07\x1f\xea\xd7\x90\x00\xcb\xd5\xe3\xbe\xf2\x0c\x30\xaf\x3e\xa9\x01\xe6\xf9\xaf\x06\x98\x5e\x03\xcc\xcb\xa6\x01\xe6\xe5\xe7\x34\xc0\x7c\x1d\x30\xc0\x7c\xdd\x63\x80\x79\xd7\x6d\x80\xf9\xaa\x61\x80\xf9\xea\xe7\x33\xc0\xbc\x74\xee\x95\x97\x3f\x87\x01\xe6\x87\x9f\xc9\x00\xf3\xf4\x57\x03\xcc\xbf\x83\x01\xe6\x9b\xf4\x76\x83\xbf\x4c\xa7\x11\x2f\x97\x11\x06\x67\x49\xc1\xb6\xd1\xf3\x0b\xf1\x2f\x38\x3f\x46\x58\x39\x39\x46\x33\xfc\x6d\x9a\xb0\x26\xd2\x44\x37\xf4\x84\x7e\x90\x35\x1f\xd4\xcd\x07\xab\xe6\x83\xa2\xf9\x60\xde\x7c\xb0\x68\x3e\xc8\x9b\x0f\xb6\x41\x50\x5c\x36\x7e\x5f\x35\x7e\xbf\xfd\xb7\x31\x0b\xbd\xd2\x66\x21\x66\xcc\x42\xe9\xf3\x84\x21\x2f\x2d\x9b\xe6\xbe\x68\xeb\xca\xf9\x0c\x7e\x26\xf2\x32\x61\x08\xbf\x4f\xbe\x4a\x68\xaa\xb8\x29\x78\x28\x06\x82\x70\x74\xf1\xd6\x88\x19\xe7\xf8\xab\x84\x22\x55\x16\xe1\xe8\xca\xbe\x3a\x6b\xbc\x82\x6d\x7e\xda\x78\x28\x77\xfd\x75\xe3\xa9\x3a\x04\x2f\x1a\x8f\xd5\x99\x78\xd3\x78\xac\x8e\x08\x3e\x69\x3c\x77\x7c\xa0\x23\xfc\xb1\xf1\x92\xd6\x6f\x96\x84\x45\xf8\xb8\xd9\xb5\x1b\xc8\x19\xe1\x0f\xea\xf5\x0f\xea\xf5\xb2\x22\x57\xb4\x5c\xd5\xdf\x92\x8a\xd3\x79\x56\xd8\xcf\xd5\xc4\xa5\x59\xf2\xcb\xb2\xa2\x3f\x94\x8c\xf7\x95\x0d\x39\xbc\x37\xcb\x9c\xae\x68\x1e\xe9\x8c\x3b\x2b\x9a\xbf\x2c\x2b\x78\xe3\x0c\xee\xd4\xc5\xac\xa0\xbe\xaa\xfa\x55\xde\x05\xaf\xd1\x82\xb1\xa0\x63\xd1\x97\xdb\xae\xfe\x96\xe7\x5a\x4d\x85\xbf\x71\xde\x9a\x4c\x44\xb7\xe5\x92\xb0\x09\x1d\x8b\x7f\x30\x58\x0f\x26\x54\x5a\x11\xb0\x54\x90\x4f\xa8\xd2\x94\x63\x1b\xbe\x35\xa1\x4e\x2c\xd7\x06\xe9\x71\x97\xec\x15\xa3\x3c\x8e\xbd\x9f\x09\x1d\x2f\x57\x67\x05\x9d\x1f\xbf\x7d\x65\x4a\x56\x0a\x41\xfc\xf8\xed\x2b\x53\xdc\x79\xd6\xa8\xa3\x8d\x92\xff\x48\x98\xce\x2c\x7b\x11\x58\xa1\x70\xb8\x81\xb5\x00\xb4\xeb\xac\xd7\x51\xb6\xe2\x65\x64\xf4\x8f\x57\xad\x2d\xb2\xad\xd1\x66\x8d\x56\x93\xce\x3e\xd9\xde\x9a\x53\x58\xd9\x2e\x4e\xcf\x65\x3e\x25\xf5\xf4\x55\x9e\x38\x31\x17\x66\x69\x83\x21\x09\xdc\xc9\xd8\x22\x5b\x37\xf6\xac\xd1\xe1\xc0\xed\xbb\xb5\x59\x46\x69\xfa\x8d\xb2\x33\x85\xde\x71\x9d\xbd\xa4\x23\xbd\x95\x17\x05\x2e\xa4\x7a\xb3\x9a\x63\x79\x86\xe3\x38\x21\xea\xcf\x14\xec\xce\x81\x6d\xd1\x7e\x96\x38\x0d\xd9\x30\xd3\xd6\x00\x53\x8e\x6d\xcc\x86\xa9\xd0\x31\xf9\xb7\x1a\xc9\x44\x1a\x14\xc5\x29\xc2\x72\x60\x13\x65\x71\x15\x7f\x63\x3d\x75\xf2\xa1\xfe\x85\xd5\x17\xab\xba\xea\x17\xe4\xe8\xc2\xce\x66\xed\xcf\x99\xfa\x2c\x79\xe9\x26\x30\x05\x9a\xe9\x94\x57\x32\x88\xa6\xe7\xae\xcd\xd0\x9b\xae\xe0\x63\xf0\xd3\xb5\x1b\xa6\x04\xf2\xd9\x61\xfb\xf4\x6c\xcb\xf0\xc4\xae\x9a\xdd\x39\x8d\x17\x72\x7a\x5c\x3b\x5b\xc9\xe4\x02\x8f\x0e\x3d\x53\xbf\x7c\x9c\xf8\xd5\x31\x41\xda\x92\xac\x37\xc3\xc1\xdd\xbe\xcf\x6f\xcf\xb1\xbe\x00\x09\x0b\x24\x9c\x56\x57\x6f\xf3\x8b\xe3\x78\xd4\xf1\xc9\xaa\xe7\xf6\x0e\x1e\x25\xee\xd7\x3d\x13\xfd\x05\xbe\x1a\x9e\x87\x3e\xbb\x3d\xe7\xb2\x94\xb9\xa8\x65\x33\xe6\x72\x06\x4e\x56\x9b\xd1\x97\xf2\xa5\xb8\x89\x55\x18\x9e\xb8\x4e\xe5\x9f\x70\xe3\xca\x3f\xe5\x2d\xab\xb3\x10\xcb\x41\x74\x5c\x86\xa9\xf7\xb6\x7d\x01\x7a\x8d\x98\x93\xfb\xa3\x16\x0b\x73\x84\xb4\x4b\xf7\x3d\x00\x89\xec\x8a\x74\x80\x11\x55\x71\x5c\x8d\x79\x76\xf6\x8a\xe5\xe4\xe3\x93\xfd\x43\xf1\x53\x59\x5f\x37\x4e\x94\xb5\xb8\xdb\x3a\x0f\x45\x73\xd9\xa5\xe5\x5f\x5b\xd9\xe5\xb9\x17\xa7\xca\x45\x2b\xa9\xfa\xa2\xa5\xb5\x0d\xbc\xd9\xb0\x26\xda\xbd\xd1\x71\x0e\xb3\x80\x30\xff\x2c\x93\x46\x17\x09\x89\x63\xae\x3e\xbf\xcd\xe4\xa4\x1d\xcf\xd7\xeb\xde\x91\xbb\x21\x7d\x0a\x68\x5e\xee\xd0\xd6\x46\xc3\x2a\xa5\x57\xf3\x62\xc5\xe5\xb6\x2d\x8a\xb3\xb4\x77\x8b\xe3\xda\x09\xd0\x5b\xa5\x0d\x00\x10\x5c\xa4\x46\x8a\x5d\xc5\xf1\x0a\xcf\xd3\x7a\x7c\x99\xf1\xf9\xc5\x7b\x39\x3d\xdf\x41\xcc\xde\xc2\x96\x9a\xc7\xf1\x1c\xe7\xa9\x43\x06\x8c\x52\xdf\x72\x03\x36\xf1\x51\xc2\xb1\xc2\x89\x69\xcf\x1e\xbe\x6d\x4f\xc4\x84\xe1\xe6\x1c\x4c\x28\xee\xfe\xfc\x49\x89\xbb\xbe\x7c\x92\x61\xef\x5b\x27\x05\x6e\x7d\xd9\x64\x81\xf5\xee\x82\x6d\xbd\x41\x1e\x8b\x00\xca\x2c\x07\xe6\x41\x7c\x4c\xee\x02\x7e\x34\x0a\x84\x48\xaf\x55\x48\xdf\x1a\x2a\x37\xa9\x42\x7b\xe0\xca\x79\xdd\xde\x08\x56\x46\x98\x28\xf9\x4e\xc2\xc7\x27\xb7\x1b\x39\xc1\x4e\x09\xb4\x11\x5b\xba\x1a\x43\xec\x66\x1c\xdb\xa8\x4a\xf5\x48\x10\x53\xd0\xf5\x0a\xa2\x6a\x23\x29\x9d\xb7\x38\x5a\x7e\x8c\x90\xd6\x40\x38\x35\x05\xf5\x3d\x4a\x98\xa4\xc2\xed\xaa\x10\xf6\x09\x75\x31\x53\xf4\x59\xd1\xd0\x56\x4b\xf0\x36\x8e\x13\xef\xb7\x56\x7d\x68\xc5\x48\xa0\xbc\x6e\xb7\xdd\xb9\x0c\x35\xd5\xbd\xc3\x08\x7d\x4d\x8a\xd3\x1a\x5c\x18\x52\xdf\x0d\x57\x47\xbb\x35\x19\xae\xda\x35\x0f\xf2\x96\x81\x06\xd4\x85\xd3\x6e\x41\x85\xb9\x7a\x4d\xe8\x9b\x92\x97\x4b\x83\xaf\x33\x9d\x19\xc7\xc9\x72\x48\xd9\x50\xd5\x47\xcd\x4e\xa7\xe5\x2c\x8e\x93\x88\xad\x04\x1b\x6a\x15\xcb\xf6\xed\x11\x95\x60\x55\x91\x1b\x8a\xea\x06\xc7\xda\xa2\x6a\x54\x93\xdd\x6b\x20\xa4\xd2\xc1\x1e\x6b\xec\xb6\x44\x07\x07\x53\x89\x82\x01\x51\xaf\x1b\xfd\x29\x99\xfb\x29\x5f\xda\x44\x48\x99\x60\x7f\x98\xbb\x5d\xb1\xf7\x6b\x9a\xcd\xcc\x07\x67\x33\xff\x40\x5a\x3e\x81\xd9\xbf\x71\x93\x67\xb0\x7f\x5b\xd6\x01\xf6\x3a\xb6\x0c\x84\xdc\x1f\xd8\xe1\x23\xd4\xbe\xc2\x0e\x3f\xa1\x36\x07\x76\xf9\x0a\xbd\xde\xad\x43\x97\xfa\xdf\xb4\x8d\xb5\x08\x92\x80\x7e\x6e\x25\x40\x16\x98\xf5\x22\x69\xca\x4c\x9d\xd1\xf6\x3f\x2e\x48\x1c\xac\x1b\x10\x6f\x0e\xfe\x79\xce\xbb\x38\x0e\x19\x55\x5e\x66\x35\x7f\x5a\x96\xdc\xda\xcf\xa6\x41\xf1\x3e\x9a\xc5\x71\xe7\x2b\x5f\x46\x0c\xab\x07\xae\xcb\xea\xf2\xa2\x2c\x48\x04\x92\x08\xf3\xa2\xa4\xcf\xd3\xa7\x49\x72\x93\xbe\xf5\xdd\x50\xac\xc0\x3b\x65\x9f\x30\x40\x5a\xf0\xac\x9b\x0d\xc2\x67\xe9\xd3\xe4\xc6\xed\xd0\xd1\x39\x7d\xd2\x88\x6c\xdd\xe1\x69\xb3\x43\xd0\x64\x89\xc3\x7e\xcf\xae\xa0\x61\x84\xaf\x9b\xed\x4a\x65\xd8\x34\xfb\xb1\x0d\xbf\x68\x36\xac\xf4\x69\xd3\xfa\xc7\xb6\xfc\xa6\xd9\xb2\x52\xc9\x4d\x57\x3f\xb6\xe5\x93\x66\xcb\x5a\xab\x37\x2d\x7e\x6c\xd3\x1f\x9b\x4d\x7b\x8a\xc1\xe9\xfc\xd3\x6d\x99\xdb\x8d\xd8\x2f\xc7\xcd\xfe\xb4\xae\x71\xba\xf8\xe4\x78\x01\x00\x76\x2b\xcb\x15\x37\xa2\x17\xa9\x91\x11\xc3\xf8\xd0\xda\x05\xbe\x6a\x73\x9a\x7f\xc2\xd1\x04\xbc\xc1\x1b\x90\x78\x1d\x2f\xc4\x48\x9b\xcb\x23\x27\x6b\x87\x30\xea\x76\x35\x84\x6f\x5c\xf5\x47\xa3\x65\x25\xc8\xef\x12\x27\x1d\xa8\xd7\xdf\xb6\x16\xfe\xa6\x97\x77\x6c\x5c\x55\xec\x6f\xdd\x95\x03\xa7\x57\x77\xec\xa1\x72\x83\xca\xbd\x5e\x6e\x5c\xff\xa5\x6f\xb7\xfa\x2f\x85\xf3\xe8\x6d\x4d\x80\xf4\xb3\x27\xc2\xfb\xe7\x9f\x7f\xf7\xf0\xe3\x0f\x8b\x67\xe1\x44\x78\x46\xe5\xee\xfc\xf5\x27\xd5\x89\x42\xfa\x88\xfe\xd4\x38\x3c\xd1\x9f\x9c\x5b\x27\xfa\xd3\x85\xfb\x23\xa7\x55\x84\xa3\x38\xe3\xbc\x82\xaa\xd6\xc9\xcb\x26\xda\xc3\xd1\x9f\xca\x2b\x52\x15\xd9\x0d\x54\xe7\x97\xc5\xfb\xec\xbc\x2f\xfd\xde\x43\xfc\x5f\x90\x80\x0f\x28\xc9\xf6\xf4\x7b\x7f\xc0\x51\x4e\xaf\x22\xcc\xab\x15\x99\xe1\xe9\xe1\x81\xd8\xc4\xf2\x53\x7a\x8d\x00\xfa\xb6\xdf\x2f\x2b\x7a\x4e\x99\x68\xea\x8f\x4e\x2e\x3e\xec\x8d\xe8\x77\x78\xda\x39\x12\xb7\xdc\xe1\x61\x4f\x41\x18\xb2\xfc\xbf\xfb\x0c\x5c\xcf\xa2\x1a\xe8\x7f\xed\x90\x3f\x12\x3e\xa2\x20\x1c\x46\xf7\x47\x1c\x39\x5e\x76\xf2\xc1\x3e\xd1\xfb\x40\xfe\x2e\x2b\xfd\x21\x5f\x88\x0f\x91\x23\x9c\xe9\x64\x94\xea\x9f\xe9\x34\x52\x58\xb7\x62\x2c\xdb\xeb\xed\x3a\x21\xbf\xc7\xa2\x05\xd9\xc0\x74\x7a\xf8\x05\x8e\x68\x1e\xc1\xb3\x03\x3c\x75\x51\xca\x21\x77\xa6\x78\xaf\xe6\x6b\xfa\x85\xd8\x31\x7d\xab\x3d\xec\xdd\x0a\xfb\xb2\x97\xdf\xcb\xa1\xef\x54\xf6\x3f\x55\x59\x3b\xbe\x06\x64\x0e\x24\xfb\xfc\x63\x73\x0b\x6d\x6d\x9d\xb2\xfd\x25\x9c\x3b\x35\x79\xa6\x8b\x87\xb0\xb1\xf4\x87\x2b\xb1\x49\xf7\x2d\x7f\x9a\xb7\x70\x2c\xc5\xbb\x3f\xc8\xdd\x38\x3d\x7c\x88\xc5\x96\x79\x28\x5e\xe5\xfb\x14\x52\xd6\xab\x61\x41\x75\xc0\xc4\x91\xad\x87\xca\x88\xd9\x35\x56\x0a\x97\xc6\x76\x57\x31\xcd\xb6\x00\x55\xfa\xeb\x58\x70\x1b\x53\xee\x9a\x16\xc5\x7e\xae\x15\xfb\xa6\x64\x27\x62\xcb\xb6\x8a\x0e\xb4\xcd\xae\x7d\x44\x6a\xea\xa7\x33\x58\xc4\xc0\x3e\xfe\xfb\xdf\xd9\x70\xe8\x6e\xe6\xc3\xdf\xe1\xc3\x03\x73\x44\xed\x9b\x40\x8e\xcf\xee\x73\xfc\x85\x93\x08\x76\x5b\x52\x51\x41\x86\x98\x77\x9e\xd5\xb9\x69\x5b\x5c\xe5\xb7\x44\xe7\x60\x67\x8d\x18\xf9\xc8\x4f\xe8\x19\xe0\xcc\xcd\xf0\x34\xfa\x5f\xf3\x55\x55\x97\xd5\xe4\xe0\x7f\x45\xba\xf3\x5f\x49\xde\x67\x25\x79\x87\xbf\x92\xbc\x5f\x49\xde\xaf\x24\x0f\x5e\x1e\xf6\x90\xbc\x8e\xe7\xb2\x35\x39\x86\x2d\x24\x62\x67\x2e\xf2\x70\xcb\x49\xdc\x95\xcb\x84\x9d\x7d\x51\x16\xb9\x58\x25\x59\x4f\x6d\xe4\x28\xa7\xf5\xb2\xc8\x6e\x26\x43\x56\x32\xf2\x68\x37\x1a\xb7\x63\x3e\xe8\x1f\x2b\xd2\xec\x96\x24\xfa\x1e\xed\x07\x80\x97\x7e\x76\x91\xe9\xfa\xdd\x7f\x9d\xbf\xfb\xf6\xfd\x7f\x6e\x13\x99\x5a\x82\x52\xb7\x5c\xd4\x12\xa1\x5c\xc1\x48\x4b\x4b\xae\x84\xd4\x27\x16\xdd\xeb\x32\xfb\xaf\xfb\xdd\x65\x81\x6a\xdb\x25\xb0\xf6\x25\xb6\xfd\x92\xb2\x1b\xc1\xbb\x31\xfe\xb3\xef\xc6\x50\x75\x02\x37\x46\xe8\xda\x51\x13\xc6\xe6\x19\x48\xe8\x5b\x9a\x94\x47\xdd\x11\xf3\x66\xe1\xb6\x1f\xde\xbb\xed\x87\x81\xb6\xf5\x4d\xf7\x85\x77\xd3\x55\x25\xd0\x07\x89\x19\x10\xa9\x87\x3c\x3b\xa3\x2c\x27\x1f\xd5\x8c\xad\x58\x41\x60\x8a\xd5\x2d\x6e\xbd\x9a\xc4\xfc\x1d\xd8\x45\x97\xb7\xa3\xb5\x6c\xab\x55\xd1\xd5\xb4\x3d\x1b\xaa\x99\x55\x31\x43\x31\x69\x7c\x76\xe1\x38\x2c\x4f\xe1\x36\xeb\xb7\x45\x3e\x2e\x33\x96\x93\xe6\x30\xac\xb4\xef\x95\xb6\xae\x5a\xfe\x2a\xb4\x3e\x58\x90\x6d\xf7\x9b\x1f\xe2\x3f\xf4\xde\x72\xc1\xa8\x3e\x73\x35\x82\xea\xc9\x41\xdf\x30\xd7\x40\x33\x6a\xb4\x51\x43\x45\x8e\xfb\xa5\x65\xdc\x67\xa3\xe4\x07\x72\x13\x6a\x59\x47\x6e\x36\x4a\xbb\x69\x4d\xfc\x0a\x4e\xec\x65\xa8\x0e\x00\xe9\x05\x6a\xbc\x60\xf9\xce\xf7\xbb\xba\xd9\xff\xe8\x5c\xec\x3f\xe2\x4a\xff\x9c\x97\x97\xda\xbd\x9f\xeb\xf2\xfa\x45\x5d\x5a\xff\xfd\xfc\xaf\xf3\xfc\xc1\x25\x0b\x5f\x5a\xd9\x92\xfa\x17\x8c\x55\xd1\x79\x09\x78\xc4\x03\x0f\x59\x5f\x3c\x50\xa7\xf9\x99\x13\x91\xf9\x27\x35\xb5\xcf\x1c\x64\xc4\xf6\x45\x75\x4d\xc1\x40\x02\x47\xf5\x22\xab\x2f\xa4\xf8\x28\xee\x1b\x43\x0e\xac\x85\xc0\x71\xc3\x74\x18\xed\xf7\xfa\x5a\x88\x9e\x29\xe5\xea\xcc\x1e\x5a\xc7\x29\xd1\xa3\x5b\xa1\xf7\x86\xa0\x04\xdf\xba\xb4\x23\xf4\x5e\x0f\xc8\x92\xfa\xc6\xbd\x6b\x2e\xcc\x3f\xc8\x0b\xab\xe3\x76\x73\xef\x5c\x87\x05\x70\x79\x85\x26\xab\x60\x99\x0a\x7d\x39\x57\x24\xcb\x4b\x56\xb8\xe4\xcb\x8e\x75\xe6\xdf\x53\x81\xb2\xb6\xb3\xed\x65\xfd\xc1\x6c\x2f\x7f\xd5\x6e\x7b\xb6\x7d\xce\x7e\x1f\x9c\xb3\xb9\x59\xf0\x3b\xcf\x59\x73\x0b\x37\xf7\xb8\xcb\xa8\x79\x8e\xc5\x3b\x05\xa4\xf8\x56\xb4\x5f\xf8\xaa\xfc\xa7\xc3\x65\x60\x7f\xda\x95\x34\x2e\x2f\xa9\x7b\xac\x6c\x67\x59\x77\x4a\xb7\x97\x16\x53\xbe\xbd\x14\x2c\xc9\x0e\x53\x23\x43\x86\xb6\x96\x93\x4b\xba\xc3\xb2\x90\x1d\x1b\xf4\xb6\x84\xb3\xf7\xbb\xd9\x65\x57\x67\xd6\xbd\xaa\x5d\x0a\x23\x57\x46\x85\xab\xd3\x57\x07\x75\x78\x3d\x00\x27\xf4\x50\x49\x96\x87\xbf\x13\x7c\xa6\x61\xd5\x67\xf7\x94\x96\x0d\x47\xd0\x6c\xac\x5f\x6a\xfd\x39\x38\x82\x0e\x4e\x60\xd0\xcb\x09\x74\x03\x0d\x7c\xb6\xeb\xbf\x91\xed\x2f\x90\xd6\xb0\x1b\xbb\x19\x57\x69\x94\x9d\xd5\x65\xb1\xe2\x04\x60\xe2\xc6\x4b\xe3\xda\x93\x3e\x48\xb2\x15\x2f\xd7\x32\x25\x05\x7a\x20\xe3\x8a\xe9\x47\xf0\xae\x71\x4a\xa2\x66\x8e\x89\xb3\x32\xbf\x19\xd8\x14\x89\xe4\x11\x35\x59\x0b\x95\x3c\xfc\x08\xd1\x45\xd2\x3d\x2e\x8a\x70\x32\xaa\xd6\x6b\xd8\x40\x74\x0e\xe8\x68\xb6\xbb\x38\x66\x63\x4e\x6a\x9e\xf0\x71\x79\x45\xaa\x45\x51\x5e\xef\xd9\x3f\xbf\x77\xfe\xfe\x1b\xd2\x63\x33\x01\x61\xde\x20\x37\x0e\xf3\x44\xac\x23\xa9\x3a\x55\xc6\xef\xc9\x79\xf5\x9d\x32\xfb\xe5\x0d\x17\xed\x41\x23\xc6\xdb\x80\x20\xd8\x69\x60\x21\x87\xab\x32\x65\x6d\xa7\xaa\x2c\x65\x01\x27\xd8\x3a\x65\x7d\x7e\xb8\x2b\xe7\x75\xcb\x09\xb7\xd0\x53\xbd\xcc\xce\xc9\xdf\xde\x2c\x16\x35\xe1\x78\xee\x3e\xfc\x5e\x3d\x5c\xa4\xb0\xa1\x9e\x96\x2b\x96\x53\x76\xfe\xac\xa0\x84\xf1\x77\x32\x5d\x57\x9e\x2e\xa4\xd7\xda\x45\xba\x00\x77\xb6\x65\xba\x50\x1e\x6a\x97\xe9\x42\xfb\xa5\x5d\xa5\xbc\xb3\x85\x9b\xf4\x4a\x17\x3b\x4f\xaf\x54\xdd\xb3\xb4\x89\x09\x24\x6a\xc0\x47\xaf\xd7\x6a\x88\x94\x31\x3d\x0f\xa7\xe9\xed\x06\x5f\xa7\x95\x93\x07\x13\xbf\xe8\xdc\x4a\xd7\xc8\x6c\x9c\x47\x51\x45\x0a\xc8\x5c\x04\xa9\x4a\xe2\xd8\xee\x7c\xf5\x5b\xe7\xeb\xbc\xee\xca\xc6\x79\x9d\x5e\xdf\xb9\x5b\x38\x36\xa6\xe7\x34\x4d\x5f\xac\xd7\xde\x99\x7b\x21\x8f\xe9\x9b\xf4\xba\x6b\xde\x06\xf9\x7e\xfa\x46\x4d\xbd\xf8\x8b\x97\x4b\xd8\x70\x27\xe9\xf5\xb8\x84\x75\x93\x47\x7f\x70\x12\xc7\x49\xbe\x9f\x9e\xa8\x34\x34\x5f\xa9\x1a\xfa\xf7\xfb\x72\x89\x36\xe7\x69\x76\xb4\x9c\x9c\x43\x76\x90\x53\xe5\x68\x78\x2e\xfd\xc3\x3f\xa6\xf9\x5e\x01\xe3\x85\x70\xaa\x34\x4d\xa9\x0a\xad\xda\x87\x1b\x55\x3c\x90\x83\x3d\x4e\x5f\x67\xfc\x62\x7c\x49\x59\x72\x86\xf3\xbd\x73\xb4\x2f\x7f\x67\x1f\x93\x03\x9c\x23\xfc\xc1\x7f\xbf\xf4\xdf\xef\x2d\xf7\xcf\xd1\x80\xa6\xe7\x4f\x8e\xe3\xf8\xc3\x93\xe3\x23\x75\x13\x4f\xce\x9f\x7c\x88\xe3\xe3\x27\x1f\x8e\xe4\x0d\x3e\xa9\xd7\x6b\xf9\x97\x0c\xf0\xd7\x23\xdb\x97\xc5\xed\x70\xde\x6e\x19\xce\xbb\x1d\x87\xf3\x2e\x8e\xdf\x3e\x79\xa7\x7b\x3f\x7f\xf2\x36\x8e\xdf\x3d\x79\x6b\x86\x27\x86\x23\xff\xdc\x44\x76\x08\x47\xa7\xca\x83\xf3\x6c\x3f\xf9\xb8\xb7\x44\x93\x53\xe5\x9d\x3c\x27\x8c\x83\xa3\x6c\x4a\x8f\x3e\xee\x25\xa2\x97\x07\x5f\x4c\x3e\xc2\x54\xbf\x4f\x2f\x5a\x1b\xa3\x6b\x33\x79\xc7\x03\xa9\x70\x7c\xb8\x18\x20\xcf\x60\x12\x59\xaf\x95\xf5\x3a\x79\xbf\x97\xce\x11\x8e\xb2\xb3\x52\xb6\x5a\xa2\x53\xf0\x40\x7d\xbf\x7f\x33\x30\xb3\x78\x46\x8a\xf2\xda\x7b\xbb\x77\x09\x6f\x6f\x65\xb2\xfe\xf7\x7b\x97\x7b\x37\x8f\xe7\x7b\xee\xf1\xfb\x52\x1e\xdc\xd7\xe9\xc5\x93\x9b\x41\x99\x3e\x5b\xaf\x5f\x1f\xd9\x86\x56\x71\x3c\x7a\x16\xc7\xaf\x8f\x54\xcf\x13\x3b\x02\xf1\xea\x75\x1c\x3f\xd3\xa5\x27\xab\xf5\x3a\xb1\xbf\x54\x41\x34\x51\x0f\xb0\x1e\x91\x3b\xcc\xa3\xcb\xc9\xfe\x8d\x4e\xab\x13\x72\xdc\xa7\x6d\xc7\xfd\x12\x83\xb2\x7c\x72\xba\xd9\x0c\x7a\x69\x38\x97\x60\xfc\x01\xf2\x0d\xa4\x1b\xa8\x74\x80\x78\x67\x21\xe2\x5d\xa7\xa1\xd1\x29\x21\xa1\x35\x44\xfd\xc9\x72\xa0\xb7\x9b\x8d\x77\xfa\x4a\x39\x80\x55\x37\x4d\x1e\xd0\x6e\x6a\x3b\x90\x19\x8b\xda\x94\x7f\xaf\x45\x54\x07\xa1\xa0\x90\x74\x05\xfb\x78\x8f\x4a\x22\xf1\xa4\x30\xe7\xa0\x79\x26\xed\x46\x57\x23\x9e\x77\x8f\x58\x11\xfd\x45\xf7\xb8\x65\x89\x41\x2d\x7d\xb0\xd3\x5b\xc8\x8e\x94\xcc\xf7\x17\xe8\xc1\x17\x9b\x2e\x42\xa0\x3a\xce\x7b\xae\xaf\x8b\x9e\xa9\x0a\x7e\x7f\x2e\xcf\xf5\x93\x0b\x39\xa2\xd0\xe7\x5b\x32\x50\xc6\x71\x12\x6c\x45\x15\xd1\x8e\xe4\xf6\x58\x64\x47\x49\x3b\xe2\x26\xcd\x30\x15\x54\xb7\xfb\x0e\x35\xf3\xc2\xcb\xe5\x64\x9f\xaa\xfb\x74\x83\x26\x81\xc6\xcc\xf6\xf2\x0e\x40\x93\xbf\xa9\x06\x2d\xc4\x22\x00\xba\x32\x4e\x8b\xa5\xef\x8a\x78\x54\x41\x89\x03\x5c\xa2\x09\x37\x85\x37\x0e\x9f\xcc\xb6\x6a\xcc\x24\x9f\x2c\xaf\xa5\xfd\x0b\x52\x2c\x25\xbe\xda\x67\xe7\x91\x65\xc6\xc5\x00\x8f\x4c\x74\xf6\x45\xcd\xd2\x09\x1e\xf7\xe8\x60\xc2\x31\xd5\xef\xbe\xc7\xa5\x7d\x47\x8f\x0e\x26\x14\x67\xfa\xdd\x6b\xc1\x0f\xd4\xf6\x75\x76\x74\x30\xc9\xc4\x61\x96\xc9\xc4\x6e\xbf\x48\xd3\xb4\x8e\xe3\x84\xfd\xef\xf4\x21\x2e\xff\x77\xfa\x50\x1e\xcf\x55\x5a\x89\x83\xea\xc4\x40\x89\x12\x2b\x51\x62\x65\xa8\x9d\x1c\xd8\x84\x61\x39\x8a\x49\xb9\xd9\xb8\x9f\xf4\x15\x65\x44\xd2\xe6\xb4\x92\xcf\x1b\xc9\x27\x1b\x50\x54\x26\xf1\x48\x7a\xeb\xa7\x91\x9c\x1c\x60\x3f\x39\xa4\x7e\xf0\x7d\xb3\xc4\xf7\xb6\xc4\x06\x38\xfd\x47\x4e\x32\x1b\x08\xb4\x4c\xd3\x94\x3c\x42\xb7\x55\x4a\x14\xef\x01\x74\x66\x9f\xb8\xdc\x1d\x66\xe6\xad\x1c\xbf\x79\xad\xae\x9a\x66\x9e\xcb\xbd\x74\x9f\xb8\xac\x4d\x33\x99\xe5\x5e\x5a\x05\x0b\x7c\x1f\x68\xe0\x7d\xb9\xc4\xcd\xac\x94\x7b\x29\x73\xdf\xab\x8c\xeb\xa1\x2c\xf0\x40\x71\xce\x2a\x92\x7d\x18\x90\xb4\xd4\xb1\xf2\x14\x04\x8a\x46\x92\xca\x3e\xa1\x00\x97\xe6\xed\x90\x24\x0d\x2c\x9b\x26\x84\xf9\x93\xdf\x39\x98\x2f\x16\xae\xfc\x77\xb3\x23\xf7\xc7\x64\x3a\xc3\x59\x7a\xab\x2c\x7b\x13\x86\xed\x74\x4c\x0e\xb0\xf9\xb6\xc9\xc1\x06\x24\x0a\x77\x71\x98\xb7\x38\x2b\xf3\x56\x2d\x0e\xf3\x17\xa7\x68\x6d\x9f\x7d\xe6\xce\x7d\x63\x2b\xd5\x81\xb7\xdf\xb7\xab\x8a\x65\x69\x6c\xb1\x95\xfb\x72\x63\xc5\x96\x16\x9f\xc4\xd0\x20\xba\xa0\x79\x4e\x98\x60\xe2\xe7\x56\x0c\x8c\xe3\x24\x73\x3a\x4f\xdd\x91\xec\x71\xcc\x9f\x14\xcd\x4c\xa9\x7c\x3f\x6d\x3e\x9b\xf0\xc7\x45\x33\x17\xab\x53\xcc\x7c\x0a\x4f\x0f\x3a\xc6\xf1\xbd\x33\x8e\xf7\x10\x13\x64\xfe\xde\xab\x70\xa5\x47\x61\xbe\xfc\xa8\x32\xcd\xdb\xd9\xa8\xf4\x28\x6c\x6e\x56\xa7\x98\x19\x45\x25\x46\x21\x36\xeb\x28\x4d\x69\x1c\x27\x7c\xbd\xae\x8c\x34\xac\xb6\x9a\x2b\xca\x50\x89\x71\x34\xcf\x78\x32\xcd\x66\xc8\x84\x3d\x79\x4f\x37\x66\x0b\xe3\x2c\x3d\x78\x94\x3d\x2e\x35\x08\x5c\xb6\xb7\x87\x12\x9a\x96\xa2\xd4\x58\xed\x3d\x77\xc6\xa9\x7f\x2a\xfd\x12\x62\x2e\xa8\xbb\xc4\x64\xfc\xd5\xab\xaf\x5f\x9c\x9c\xbe\x7d\xf1\xee\xf4\xed\xf1\x9f\x5f\xa4\x64\xfc\xfc\xcd\xeb\xd3\xe7\x2f\xbe\x7a\x7f\xdc\x7e\x20\xca\xfa\x25\x5e\xfd\xed\xc5\x57\x5a\x30\x6f\xbf\xf0\x9f\x41\xed\xc3\x41\xab\x87\x2f\x06\xad\x51\x3c\x54\x52\xbe\x6a\xd9\x4b\x4a\xe5\x42\x7f\xf1\x56\x5c\xb1\x42\x90\x96\x5f\x9d\x44\x74\x51\x65\x97\x04\x50\x73\xea\x6a\x9e\x46\xff\x11\x61\xa2\x62\xf6\x96\xe6\xea\x36\x22\xa2\x79\x77\x45\x6b\x7a\x46\x0b\xca\x6f\x52\xbd\xbf\xcc\x3b\x15\x45\x78\xb0\xfc\x68\x9f\xe9\xc0\x40\xef\xe1\x59\x59\xe5\xa4\x4a\x65\xc2\xae\x06\x1a\xaf\x9b\xa9\x5e\x81\xec\x08\x02\xae\x74\xeb\xdf\xc9\x63\xa7\xab\x0c\x2a\x19\x84\x8d\xb0\x44\x63\x24\x49\xf4\x78\x94\x97\x73\x7e\xb3\x24\xc3\x0b\x7e\x59\x3c\x79\xac\xfe\x4b\xb2\xfc\xc9\xe3\x07\xf2\x1f\xd1\xcf\x93\xc7\xf5\x32\x63\x4f\xfe\xf6\xf8\x01\xfc\xfb\xf8\x81\x7c\xf8\x00\x8a\x47\xa2\x3d\x19\xeb\xad\x83\x96\x2b\xa9\x51\x12\xe7\x76\x41\xab\x5a\x2b\x91\x60\x9c\x4a\xfe\x55\x34\xc9\xff\x1c\x37\x55\x3e\x31\x29\x39\xf9\xa6\xcd\x9c\xc8\x1c\xd4\x35\xe1\xfb\x57\x59\x41\x73\x50\x46\xd7\x0f\x14\x5b\xf2\xc0\xbc\xf5\xd1\x47\x1b\x55\x03\xc5\xfb\x13\x80\x39\xfb\xc7\x85\x14\x6c\x80\xb7\xcb\x64\xf6\xb4\x96\x99\x2b\x88\x3d\xc3\x1b\xb8\x68\xdb\x88\x4f\x81\x18\x38\x89\xe2\xb9\x5e\x8f\x92\x06\x92\xe8\x90\x6a\xa0\x34\x00\xee\x97\x4d\xab\x75\x9f\xce\x30\x40\x43\xd0\x74\x74\x68\x18\x1f\x80\x0d\x34\x11\x96\xb8\x4e\xc9\xb4\xd1\xe4\x2c\x41\x8f\x46\x09\x4b\x93\x2c\xad\xc7\x8c\x7c\xe4\x09\x42\xe3\xbc\x64\x04\x41\xac\x2d\x44\x7b\x66\x12\xa0\x0c\xe1\x91\x20\x4b\x8a\x86\x00\x20\xd5\x23\xd1\x25\x7a\xa4\x70\x04\x57\xe8\x96\x8a\x21\x94\xe9\x6a\xb3\xa0\x2c\x2b\x8a\x9b\x5b\x31\x00\xb6\x5e\xcb\x4b\xb8\x1e\xcb\x21\xaf\xd7\xfa\xaf\x04\x99\x92\x74\x91\x50\x85\xee\x54\x6e\x4c\x42\x56\x89\x9e\x19\x98\xb8\x11\xd1\xdf\x2f\x66\xb1\x06\x08\x44\x3b\x85\x04\xb9\x48\x6c\xfa\x6c\xb4\xf0\x3c\x7d\xec\x44\x82\x14\xce\xdb\x1f\xf1\xfe\x21\x1a\x44\xb2\x38\x64\xc2\x6b\xc0\xae\x8a\xb9\x49\xbd\x27\x63\x96\x5d\xaa\xdc\x7a\xaf\xb3\x25\xd4\x59\xaf\xa3\x13\x22\xab\xeb\xd1\xc8\xdd\xb1\xa8\xca\x4b\x9d\x88\xef\x58\xf3\x02\xaa\xca\x83\xff\x9b\x1c\x4d\xbe\xa1\xeb\x57\x88\xf1\xe4\x68\xf2\xc7\xf5\xe1\xef\xd7\x0f\xbf\x40\xc9\xd1\xe4\x59\x91\x5d\x2e\x49\x8e\x8e\xa0\x91\xdf\x3c\x90\x4a\x55\x7b\x4b\xc8\x2f\x6d\xcd\x17\xba\x0d\x22\x66\xbd\x62\x70\x74\x86\x19\xe7\xe4\x72\xc9\x87\xbc\x1c\x82\xe3\xc4\x6a\xce\x57\x15\x19\xb2\x92\xed\xc3\x16\x39\x2b\x2c\x00\xd7\xf8\xef\xec\x15\x1b\x02\x41\x12\xe5\xcf\xc8\x50\x17\xc1\x50\x21\x13\x03\x1b\x4a\x3c\xc6\x5a\xc2\x90\x5d\x64\x57\x64\x98\x0d\x03\xbb\x6e\x78\x49\xf8\x45\x99\x8f\x23\xb4\x49\x1c\x70\x42\xb5\xc0\xff\x9f\xbd\x77\xff\x6e\x1b\x47\x13\x05\x7f\xf7\x5f\x21\xf1\xec\xa8\x88\x6b\x58\x91\x92\xb9\x7b\xe7\xd2\x61\x69\xf3\x70\xa6\x73\xbb\x2a\xce\xc4\xa9\xae\xd3\xab\xd6\xba\x61\x09\xb2\x30\xa6\x00\x35\x08\xc5\x71\x59\xfc\xdf\xf7\xe0\x49\x90\x84\x6c\x49\x4e\x5c\x95\x94\xce\xc9\x89\x45\x12\xf8\xf0\xfe\x5e\xf8\x1e\x86\x6b\x13\xab\x95\xf8\x11\x9b\x1d\x27\x77\xa4\x64\xfc\xcd\xd3\x81\x17\xe0\x14\xd2\x4a\xba\x98\x63\xfe\x5c\xa8\x40\xa7\x74\xc8\x47\x29\x1e\x72\x97\x22\x86\x96\x2d\x11\x29\x0a\x59\x9f\x6a\x79\xa6\x9f\x02\xc8\x52\x32\xec\x49\x86\x8c\x0c\xfb\xb6\x4e\xdc\x83\xa2\xeb\x90\x04\x88\x87\x0c\xa2\x11\xa4\x60\x97\x70\x79\x0e\x4c\x4a\xc2\x86\x00\x36\xd0\xdd\x5f\x14\x72\xea\x6a\x1c\x15\x13\xff\x52\x83\x6d\x8a\x0f\xad\x05\x91\x87\x03\xcd\x67\x3c\x39\xda\x14\xeb\x7d\x19\xfb\x06\x9e\x8a\x6e\xc6\xd8\xd5\x72\xf1\x37\xdd\x03\xc6\xbd\x11\xf1\x4d\x47\xa4\xa5\xd0\x4b\x2c\x8e\xe6\x38\xcf\xd1\x25\xce\x43\x28\x5e\x7e\xd7\xfe\x7f\x4d\xac\x1f\x00\x57\x82\xda\xa0\xf0\x35\x11\xb3\x23\xd3\xef\xbc\x19\x83\x5a\x6e\xa8\x2f\x35\x7d\x0d\x47\xec\x86\x80\xd1\x0b\x0a\x18\x3d\x5f\xc0\xe8\x8d\x12\x13\x30\xfb\xbf\xf3\x2e\xa6\x82\x13\x9c\x43\x91\xb6\xe3\x06\xb0\x7e\x10\x58\x7f\x04\x56\x2b\xff\x11\xe6\xa9\x0b\xd7\xa1\x22\xc1\xda\x30\x57\x24\x7f\xcf\x71\x2e\xf9\x25\xe4\x50\x12\x32\x42\xb3\x2e\xf1\x22\x26\x92\x6c\x75\xa7\x84\x4e\xaa\x81\x3d\x2d\x8d\x94\x62\x5a\x01\xc0\x41\x1d\xe2\x52\x1e\xfd\x3c\x8d\x7b\x90\x96\xa1\x42\xcc\xb8\xf4\x24\xc6\x4b\x60\xbf\xc0\xbc\x64\x87\x51\x9a\xc3\xbc\x38\xa8\x44\x5d\xbe\xc2\x37\x39\x64\x5e\xfc\x05\xe7\xf8\xdd\xd5\xd7\x90\xef\x39\x9e\x92\xcf\x30\x7a\xe2\x2f\xbf\xdb\x25\x92\x97\xd6\x0e\xb8\xdb\xec\x59\x6d\x8e\x75\x34\x5f\x66\x82\x2c\x32\xec\x97\x78\xe8\x09\xad\xf0\xb5\x0f\xda\x29\xc3\x11\x14\x6e\xad\x30\xe8\x72\xac\x58\x8d\xc0\x52\x45\x17\x8c\x65\x18\xa9\x54\x55\xba\x82\x0b\x36\xdb\xe9\xe0\xa2\x5c\x80\x5e\xea\x65\x99\x8f\x05\x8c\x74\x87\x22\xb0\x5a\x89\x87\xc4\x1b\xf5\x75\x5f\x16\x87\xeb\x20\xd3\x2c\xa5\x5d\x8a\xaf\x95\xaa\x5d\xa9\x7c\x59\x36\xd1\x0f\x52\x7e\x36\x93\xaa\xa4\x65\xc3\x27\xbb\xc0\xa0\x2f\x62\xdc\x9d\xa3\x45\x78\x6b\xc6\x2e\x92\x3c\x28\x80\x8e\x01\x64\x6b\x65\xa0\x8b\xe8\x4d\x2c\xd4\x86\x65\x73\x92\x97\x5c\x9f\x2e\xf2\xe1\xec\x6f\xef\xbb\x92\xc1\xc8\x40\x57\xcc\x30\x8d\xb9\x9b\x1f\x1e\x67\x60\x63\x06\xb7\x8e\xaf\x9a\xa8\xef\x93\xc5\xae\x5e\xb1\xc7\xc1\xef\x7a\xa4\x5e\x8c\x99\x32\x9a\x02\xad\x7e\xe4\xf0\xf6\x22\x43\xf4\x2a\x29\xcf\xdd\x42\x9f\x73\x68\xfe\x7a\x5f\x54\x49\xa8\x63\x55\x28\x1f\x60\xc2\xe8\x1b\xc6\x9b\x51\x2a\x76\xdc\xf2\x51\x74\x50\x59\x2a\xc7\x0e\x2e\x88\x50\x4e\xe1\x71\xe5\xfd\x04\xe5\x33\xcc\xe5\x6b\xc9\x2b\x2e\x32\x22\xe2\x27\xc3\xf3\xa3\xd1\x93\x4b\x60\x62\x9a\xb4\x22\x00\xaa\x46\x08\x01\xe5\xea\x5d\xcb\x2b\xd8\x91\x3c\xff\x9b\x2a\x57\xdd\xe9\x17\x5e\x58\x69\xf1\x9d\xa5\x2b\xf8\x22\x88\xc2\x86\x51\xbb\x57\x08\x70\x31\xbb\xfd\xc8\xb3\xaf\x91\xc0\x65\xb0\xf1\x34\x4d\x85\xc2\x75\xd1\x50\xbf\x51\xdf\x47\x8a\x87\x1f\xe0\xa4\x11\x73\x47\x56\xb5\x25\xdf\xa9\x6f\xa6\xac\xe4\x5a\x65\xd5\x18\x83\xc4\x49\x31\x2e\xf6\x2f\xf6\x1a\xd0\x7d\x1c\xa9\xa4\xdd\xab\x55\x48\x6c\x94\xf3\xcc\x32\xbc\x5a\xc5\xe6\x57\xf7\x1a\x71\x1a\x47\xef\x33\x8c\x72\xdc\x92\xbb\xe6\x9f\x3a\x76\x3c\xe2\x39\xfe\xa7\x64\xe1\xd5\xaf\x96\x6e\x36\xef\x46\x00\x56\x6a\xc6\x2a\x83\x95\x94\x17\x40\x37\x17\x68\x7c\x05\x00\x74\x1d\x7e\x87\xde\x81\x6d\x51\x57\xf9\xe6\x08\x4b\xb0\x5f\x82\x7d\xab\x70\x83\xf7\x25\x05\xf9\xc2\x14\xc7\xa3\x6c\x8e\xfb\x88\x82\x9d\xed\x72\x74\x7d\xba\x14\x8b\xa5\x90\xa4\x4f\x49\xe8\x71\x0f\x7a\x81\xcf\x24\x5b\xc1\xba\x0d\x44\x67\xc4\x44\xda\x35\x43\x74\xc2\x9e\x7d\xa1\xd0\xaf\xa4\x6c\x2a\x24\x82\x24\x6b\xaa\xf7\x30\xb3\x04\xee\xb3\x80\xe3\xf2\x9e\x23\x1b\xdc\x16\x89\xb2\x19\x18\x3b\x90\x6a\x30\xd3\xd4\xbd\x58\x93\x90\x60\x6a\xaf\xec\xa6\x31\x56\x19\x55\xc6\xee\xa4\x4c\x0a\xa7\x7e\x9c\x32\x3e\x47\xe2\x67\x0d\x29\x9e\xc2\x2a\x5d\x98\x94\x83\x4b\x50\x01\xc7\x00\x14\x12\xe6\xcc\x9b\x49\x06\xcb\x04\x00\x64\x10\x8f\x1b\x94\x65\x0c\x6b\x60\x80\x5d\xb1\x25\x94\x5d\x4d\x72\x68\x06\x92\xcc\xa0\x99\x82\x64\x5c\x80\xa4\xde\xb9\xd9\xfd\x9d\xdb\x6e\x7b\x57\x85\x83\xaf\x6f\x40\xfe\xa5\x88\xa0\x24\xd7\xcd\xba\xeb\x04\x82\x81\xff\x90\x94\x11\xfc\x2b\x93\xd9\x60\x07\x00\xc4\x5b\x4f\x27\x47\x8b\xc7\x9c\x45\xad\xc0\xb3\xb2\x47\x5d\x81\x57\xf2\xc5\x07\xb5\x37\x43\x3c\xda\x7c\x68\x1e\x87\xa6\x90\x1c\x9f\xa3\xba\xbd\xe1\x26\x58\x2f\x80\x49\x1b\x2c\xe0\xa3\x60\xc3\x07\x6f\xbd\x46\xe8\x77\x93\xb4\x49\x03\xce\x77\xbd\x56\xbb\x2d\x5c\x06\x80\x72\x17\xe6\x10\x01\x98\x69\xcc\x6b\x05\x2d\x60\xe2\x96\xb9\x85\x20\x10\xc3\x25\xa4\x76\x99\xdb\x0a\x6d\xae\x56\x4a\x0d\xe4\xd0\x35\x85\x92\x6f\xdf\x61\xd1\xeb\xbc\xdd\xc3\x16\x7b\x0b\x6c\xb4\x05\xeb\xf9\x4d\xa8\x35\xca\x9d\x83\x6b\xa4\x14\xc3\x5b\x94\x65\xec\xfa\xa5\x92\x32\xda\x7d\xa8\x26\xed\x8d\xc2\xfd\x49\xf4\xf3\xcf\x3f\xb7\x5e\x33\xd8\xfa\xfb\xdf\xff\xfe\xf7\xa8\x00\xd0\xcb\xdf\x61\x8c\x52\x50\x8a\xbb\x25\x00\x98\xa7\x58\x45\x42\xbd\xc0\x53\xc6\x25\x61\x55\x81\x9a\xf9\x4b\xfd\x38\x4e\xf3\x2e\x9a\x0a\xcc\xe1\xd4\x7c\x78\xa1\x9e\x26\x69\x6e\xe9\x29\x9c\xa5\x91\x9a\x57\x49\x58\x91\x4e\xe7\x90\xa6\xac\xcc\xed\x23\x1b\x5d\xd4\xb4\x1b\xac\x24\x82\xf1\x02\x0c\x96\x9d\x4e\xbc\xac\x15\x59\x02\x38\x49\x27\x92\xb3\x7c\x79\xf2\xe6\xf4\xc3\xc9\xa8\x25\x5b\x69\x91\xbc\xf5\xee\xf4\x63\x4b\x77\xb7\x55\x06\x6a\x04\xb2\x1f\xfa\x6d\x04\x17\x3f\xa6\x4b\x30\xa8\xee\x69\x0e\x6f\x15\xfd\x9c\x99\x48\x80\xcc\x51\xcf\x5b\x5d\x2d\x59\x3a\xca\x3a\x29\x0a\x90\x64\x9d\x4e\x9c\xd5\x3a\x95\xb9\x4e\x9d\xbe\x6b\x9d\x7e\x68\x85\xba\xc6\x68\x8b\xf1\x35\x1d\x2c\xa7\x56\x76\x32\xdb\xa2\x8f\x65\xcd\x24\xab\xf6\x73\xdc\xe9\xc4\xe3\x5a\x3f\xc7\xae\x9f\x2f\xde\x7c\x3c\xf9\x50\xed\xa0\x5a\xd0\x7a\xcf\xd4\xcb\x08\x2e\x9e\xa7\xe3\x2d\x7a\xa5\x6a\x25\xe3\x6a\x87\xda\xf1\xb4\xd3\x89\xa7\xb5\x2e\x4d\x6b\x53\x17\xe8\x98\x9e\xb9\x60\xf7\xdc\xd6\x93\x5d\x9c\x02\x50\xc7\x58\xf7\xcc\x9c\xaa\x9a\x4c\xab\xfd\xbc\x1b\x42\x44\x99\x68\xa1\x96\xc6\x68\x0e\x98\x85\xee\x03\x52\x06\x30\xde\x29\x6c\x5c\xc9\x12\x5f\x9c\xac\x8b\x5d\x9d\x4e\x9b\xe4\xef\xd0\x3b\x29\x09\x56\xc1\xd4\x0f\xf3\xd6\xd8\x18\x7f\x1e\x67\xcb\xfc\xcf\x4d\x7f\x71\x37\x23\xb9\xd0\xd9\x06\x68\xaa\x9f\x9a\x39\xc0\x3c\x43\x97\x3a\xf9\xf4\x26\x51\xd2\x4e\xe5\xd8\x52\x25\x9f\xac\x49\x3e\xd9\x6e\xe4\x53\x73\xf0\x7f\xde\xd5\x82\x34\x6d\x5b\x0e\xf5\x64\xbe\x10\x37\xb1\x9f\x38\x0b\x83\xe6\xc2\x29\xc3\x40\x32\x8d\xdb\xb4\x4a\x70\x50\x63\x1d\xed\xdc\x32\xbb\x88\xa4\xb2\x88\xa8\xbe\x88\x04\xa2\xdd\x16\x51\xc5\xf6\xdd\x9f\xba\x87\x9d\x3a\x6f\x12\xbf\xfa\xa9\x0b\xdc\x24\x6e\xc5\xee\x6e\x5a\x5a\xeb\x7f\xc7\x5b\xd4\x30\xd7\x09\x1b\x97\x37\x8a\xb9\x8d\xcb\xdb\x33\xb1\xc3\xd6\xde\x81\x06\xed\x24\x39\x06\xb8\xf5\x32\xed\xed\x43\xf7\xfe\xda\x0a\x76\x27\xbe\x56\x0b\x7c\x5b\x8d\xaf\xba\x26\x85\x8f\xdd\x89\xc5\x26\x80\xdf\xbb\xbd\xb0\x11\x70\xbe\x15\xf0\x9f\xcc\xb6\xd9\x08\x34\xdd\x0a\xf4\x3b\xb3\xc3\x36\x02\x4d\xb6\x02\xfd\xc6\x6c\xc6\x8d\x40\xb3\xad\x40\xbf\x2d\xf7\xed\x46\xd0\xd1\x56\xd0\x4f\x3e\x6f\x07\x3d\xdf\x0a\xfa\xab\x8a\xf8\xbe\x51\x03\x4b\xaf\x81\x1d\xf0\xa1\xc5\x3a\xbf\x9f\x18\x7f\x17\xbd\xfb\xe6\xa4\xf5\x65\x8e\x5f\x62\x71\x8d\x31\x35\xaa\x59\xdd\x0b\x4f\x32\xf7\xa9\x20\xf5\xa9\xa0\x5d\x09\x47\x02\xf9\xdd\x24\x90\xef\x4a\x02\x2d\xe1\xd8\x2f\xf9\xe6\x4b\x7e\x1c\xaf\x53\xcd\xe8\xcb\x2c\x79\x3e\xd5\xe3\x3b\x46\x71\xd2\xee\x17\x00\x78\x8a\x17\xc5\x1b\xb9\xcf\x69\xbb\xd7\x64\x8f\xee\xd8\x18\x76\xbd\xbe\xfa\xc6\x28\x79\x96\x6f\x94\x97\x35\x17\x40\xf4\xc0\x33\xea\xb0\xf7\x8f\x03\x9c\xde\xda\x01\x26\xb8\x48\xb0\xb7\xf2\xb8\xcb\x68\xa7\x13\x30\xbd\xec\x32\x3a\xa0\xe9\x50\xfe\x1d\x25\x35\x7b\xd8\xae\x72\x08\x8f\xa9\xaa\x2d\xe7\x3a\xc3\x02\xab\x2a\x41\xc9\xc5\x32\x31\x64\x1a\xd3\x4e\xa7\x4d\xbb\x39\x9b\xe3\xa0\x81\x46\x3e\xc4\xa3\xd5\xca\xdd\x73\xc9\xc7\x4e\x67\xa9\x73\x05\x57\x05\x9f\xa6\xfe\xb7\x5c\xc2\xa6\xe8\xd3\x9c\x94\x4c\x39\xba\x57\xc7\x9c\x0d\xb2\xc4\xc2\x51\xb7\xc3\x99\xba\x8f\x1b\xe8\x3f\x69\xa4\xcc\x18\xa2\xc4\xfc\x75\xdf\x3b\x9d\xd8\x96\xb0\x75\x01\xac\x0b\x59\x19\xb8\x7b\x63\x36\x0d\x99\x8f\x2e\xf1\xc6\x71\xca\x7d\xfb\x81\xbd\x55\xf3\xb7\x62\xd5\xcc\x4b\xab\x66\xba\xbb\x55\x33\x6d\x5a\x35\xd3\xfb\xac\x9a\x69\x69\xd5\x4c\x37\xb4\x6a\xa6\xdb\x5b\x35\x53\x50\x1d\xe9\xb7\x6e\xd5\xcc\x1f\xcd\xaa\xd9\x33\x74\x11\xda\xa6\x99\xa6\x7c\xd8\x1b\x41\x92\xf2\xd2\xa6\xb9\x45\xd5\x5d\x3b\x79\x98\x11\xf3\x7f\x62\x91\xd2\xb0\x41\x18\x09\xda\x31\x53\xdf\x2e\x8a\x6c\x87\xd3\x1a\xfe\x1c\x0f\xb2\x94\xdc\xe3\xba\x6f\x06\xd7\xed\x3d\x38\xbe\x2d\x5c\xf7\xa8\x1e\x1c\x36\x59\xa2\xf1\xdf\x20\x29\x95\xb8\x8e\xa5\x54\xe2\x3a\x32\x8d\x15\x33\x45\xf2\x57\xa5\xfb\x06\x71\xd3\x1d\xe0\x22\x49\x37\x57\x26\x48\x18\x14\x0f\xc2\x8c\x67\x5f\xcd\xc3\x63\x4b\x2f\xb7\xcd\xf0\x64\x43\xae\xa8\x2f\xe6\x1e\x53\x7e\x0b\x98\x92\xfc\x69\x30\x25\xf9\x2e\x30\x25\x79\x34\x4c\xc9\x2c\xa6\x24\x29\x0d\x78\xba\xc1\x80\x99\xd5\xc6\xe6\x7f\x64\x1a\x5b\x5b\x16\x25\x58\x57\xb0\x2d\x03\x03\x96\x98\xd7\x7a\x8b\x81\x18\x29\xf3\x09\xee\xb9\x4b\xa8\x62\xda\x35\x22\x20\xdb\x2b\x1c\xee\xc1\xc4\x50\x55\xaf\xf9\x93\x49\xb8\x10\xc1\x1c\x14\xc0\x18\x2e\xf8\xdd\xb8\xbb\x4a\x12\xe8\x8f\xf9\x6d\x33\x5d\xc6\x0c\x6c\xd1\x41\x04\x6f\x8b\xb5\x5d\xb1\x1f\x1f\xe4\x3f\xc8\xc2\xd4\x05\x05\xa9\x0b\xf3\xa9\x0b\xba\x8b\xba\x6c\xe8\x33\xd8\xf4\xa6\xb6\xbe\x29\xfc\x12\x1f\x4d\x30\x5e\xdc\x4b\x62\x14\xdd\x2e\x2f\xaa\x60\x06\xc7\x70\x0a\x27\x70\x06\x17\x25\xf9\x99\x7b\x93\x3c\xff\xce\x9c\x1a\xdc\x20\x3f\x95\x3a\x5c\xde\xe9\xac\xdb\x15\xa2\x72\xb3\xc1\xbb\xe5\x03\xac\x24\x3b\xe4\x5d\xff\xb1\x4c\x75\xa8\xbd\xfe\xd5\x3b\xbd\xa5\x78\xd7\x4b\x7d\x38\xa8\x3c\x69\x12\x41\x6d\x56\xe5\xc2\xeb\xec\x4d\x49\x94\xe2\x8a\xa5\x8e\x00\x20\x88\x7c\x5f\x21\x4a\x99\x68\x49\x88\x2d\xd4\x52\x11\x4c\x5b\x28\x6f\x21\xc7\x4c\x44\x1e\xf4\x4b\x0d\xdd\xc3\x76\x12\xbd\xd9\xa8\x15\x12\xcb\x19\x7e\x4f\x48\x3c\x47\xbd\x49\x48\xfd\x07\x65\x61\x4f\x2b\x13\x21\x69\x75\xa4\x06\x1e\x11\xda\xa2\x3a\x95\xb3\x99\x10\x49\xd7\xd7\x5e\x33\x69\xaf\x32\x0a\x8a\xb2\x97\x17\x76\x43\x9b\x9d\x79\x91\x7a\x9c\x8d\x73\xde\xf8\x80\xa7\x19\x1e\x8b\x4e\xc7\xfc\x90\x12\xf7\xc0\xfb\xbd\x26\xed\x77\x95\xf8\xab\x60\x3d\xed\x06\x2d\x9f\xa1\xdc\xcb\x8f\x68\x28\x3a\x14\x40\x1b\x17\xb6\xd3\x34\xc6\xe9\x99\xe4\x9b\x8e\xcb\x3c\xba\x9a\x5a\x2a\x6f\x02\x4b\x0b\xee\xcb\xb6\x48\x61\x69\x93\x40\x54\xff\xd5\xff\xba\x3d\x0e\x12\xa2\x99\xa5\x42\x6e\x68\x39\x86\xd5\xca\xdf\xd7\xe7\x3e\xef\x18\x9f\xdb\xd6\x72\x15\x0f\x4f\x0f\xe4\x74\x5a\xe7\x76\x6c\x6f\xbb\xe7\xe7\x6a\xb8\xe7\xe7\xa9\x80\x58\x37\xe0\xc1\xbe\x2e\x23\x41\x79\xd4\x7f\x0d\x8f\x69\x26\x7d\xb5\x6a\xdb\xe9\x77\xa7\xd7\xaa\x86\xfb\x72\x5e\x1a\x5f\xbb\xf9\x0c\xcd\x2b\x45\x02\x38\xe1\x3d\x67\x9f\x6f\x4a\x15\xb3\x64\x02\xcd\x20\xb4\xb3\xcd\x1a\x06\xac\xd1\x58\x2c\x8b\xc3\xa1\x8f\x37\xc1\x6d\x01\x00\x80\xed\x9e\x61\x3a\x1d\x7a\x6a\xf7\x8b\x22\x6e\x6a\xcc\x5d\xb0\x28\xb5\xf8\xca\x3d\xd7\x2e\xf5\x99\x49\xdc\xec\xe1\xad\x03\x9e\x36\x3b\x41\xa1\xa3\xef\x90\x00\x1d\xbe\x8d\xa7\x54\xe7\xb6\x57\x30\xca\x02\xa5\x25\xbc\xfe\xc0\xfd\x43\x72\xe2\xaf\xa7\x64\xa6\xad\xef\x54\x3b\x4d\xe7\xb1\xdc\xaa\xe5\x5c\xba\x33\x23\x06\xa7\x31\x06\x89\x28\xc1\x9c\x1a\x59\xc3\x69\xf6\xb1\x87\x66\x3e\xe0\x29\xe6\x98\x8e\x2d\xae\x91\xbd\x68\xcd\x50\x4e\x7f\x10\xad\x0b\x8c\x69\xcb\xe2\xb4\x1c\x4f\x5a\x47\xad\x7c\x29\x89\x21\xa8\x94\x90\x6b\x81\x27\x51\xe9\xf4\x55\x36\x7d\xe6\x11\x9f\xb3\xf0\xee\x1d\x94\x27\xc8\x7b\x1b\xa4\x27\xe5\x86\x5e\xad\x82\xb5\x24\x4d\xa8\x12\x86\xcf\x55\x3c\xd3\x12\x52\x26\xc2\x83\x3b\x28\x84\xc1\xec\xb5\x74\xb7\xf5\x64\xb8\x5e\xfa\xdb\x02\x24\x78\x28\x46\x29\x87\xde\xc0\x5f\x94\x76\x24\xf6\x7a\xad\xbc\xbf\xf5\xed\xcd\x28\xe8\x4e\x19\x3f\x41\xe3\x59\x95\x2d\x62\x43\x3c\x4a\xa9\xbe\x7c\x81\xcc\xc7\xd2\xed\xb6\xff\xa8\x83\x18\x79\x38\xba\x5d\x7d\x01\xe3\x12\x65\xb3\xd5\x8a\xf9\x34\x4a\x72\xc8\xac\x8a\xc2\x59\xca\x8d\x50\x03\xba\x1c\x7f\xc2\x3c\xd7\xbf\x26\xcb\xb1\x7f\x69\xa4\x29\xad\xa7\x72\x81\x1c\xac\x56\xbc\x00\x90\x01\x48\x3c\xb6\xb7\xd2\x9e\x6a\x4e\xf5\xa6\xfa\x7e\xc0\x9a\x94\x93\x58\xca\x09\x2b\x1f\x0d\xa3\xe6\xe5\xf6\xaf\xb7\xb0\x7e\x69\x99\x1c\x9e\x44\xee\x00\xb2\x87\x71\x8e\x1f\x21\x2e\xf9\xd1\x40\x64\xbd\x1d\x25\x81\x2b\xc8\x9b\x55\x9f\x06\xab\x3e\xf5\xab\x3e\x35\x66\x8d\x8d\xba\xcf\x82\x75\x9f\xf9\x75\x9f\xa9\xba\x24\xfd\xe8\x38\x28\x27\xfb\xe0\x6b\x8d\x98\x63\x02\x6f\xeb\xc4\xd6\x3b\x94\xda\x77\xcf\x62\xe6\x18\x80\x02\xe6\x01\xd2\xec\xca\xe7\xb5\xf2\x90\x2b\xf4\x5c\x80\x6a\x6c\x6a\xc5\x84\x97\x93\xec\x31\xe8\x57\x69\xc3\x1a\xa5\xdd\x2b\x4a\x8e\xf7\xbd\x87\x33\x9a\x68\xa4\x1d\xb7\x25\x73\x53\xe5\xbc\x34\xc7\xaf\xf7\x84\x1a\xf3\x6a\x15\xf8\xae\xe4\x45\x4d\xab\xa4\xe0\x0c\x06\xef\xe3\xd2\xe9\x0e\xab\x04\x47\x2a\x23\x03\x00\x09\x56\x4e\x79\x1f\xd2\xd8\x7a\x6e\x9f\x0b\x8e\xc6\x57\x78\x02\x49\xfd\x05\xab\xbf\xb0\x02\xc8\xf9\x04\x2f\x30\x9d\x60\x2a\xfe\x8a\x6f\x5e\xb1\xf9\x02\x09\x98\xdf\xf1\x6d\x79\xc7\xb7\xec\x8e\x6f\x8b\xca\x0e\x8e\x9b\x3a\xa7\x00\x91\x71\x5c\x92\x08\xb3\xac\x67\x92\x4e\xb4\xf0\xe7\x05\xc7\x79\xae\xc4\x10\x29\xde\x63\x22\x66\x98\xb7\x2e\xb0\x4a\xa0\xaf\xec\xf0\x3d\x1e\xf6\xc0\xa3\xf4\x96\x56\xe8\x30\x62\xb1\xe8\x74\x3c\xde\x4d\xe5\x26\xb7\x24\xd8\x9a\xcb\xe3\x4a\x4a\xf2\x1a\xbe\x2e\x0a\x00\x45\xa7\xa3\xd9\xa9\x02\xc4\x08\x9a\x60\x5f\x42\x5b\xfa\xa5\xd7\x31\x02\xe5\x0e\x42\xd6\x70\xe3\xc0\xd2\xeb\x52\x7d\xd0\x3c\xdd\x90\x57\xb4\x09\x90\xa6\xbd\x63\xfa\x5c\x1c\xd3\xc3\x43\xc0\x87\x74\xe4\x1d\x3d\xea\x34\x0b\x9f\xe2\xd3\x58\xa2\x41\x89\xec\x0c\x67\xc0\xe0\x50\x36\x36\xb2\x4e\x09\x5c\x32\x2e\xd1\xb9\x41\x3b\x11\x9c\x42\x49\xc9\x01\x54\x55\xe5\x17\x6b\xf4\x30\xa9\x7f\x70\x89\xb6\x67\xe6\xcb\x67\xf3\x65\x8e\x6e\x2e\xf0\x2f\xf4\x9a\xa3\x85\xda\xc7\x11\x7c\x5f\x7e\x54\x9e\xb3\x78\x11\x41\xb7\xa9\x01\xc4\x2e\x86\x58\x8a\x60\x4c\xd3\xe1\xed\x15\xbe\x49\xa2\x1c\x4d\xf1\x7f\x4a\x21\x56\xcf\x7d\x10\x33\xf8\x47\x43\x80\xa2\x80\x65\xd5\xb3\x70\x55\x0f\x4d\xe8\xca\xb9\xae\xac\xb8\x22\x53\x1d\x4d\x26\x6a\x8b\xdd\xd9\xf4\x45\x7c\x16\x23\x3f\x99\xb9\x57\xcd\xf0\x70\x92\xc6\xa8\xa5\x95\xf5\xcc\x88\x29\x13\x64\x7a\x63\x89\x81\xc6\x3d\xa6\x10\x80\xc2\x75\x61\xb1\xcc\x67\x27\x66\xea\xeb\x9d\x28\x05\x2f\x11\x40\xe6\x15\xbd\x13\xff\xb1\x3f\xe0\x47\xfd\xa4\x07\x20\x49\xfb\xc7\xe4\x39\x3f\x26\x4a\x07\x45\x8e\xfa\xfe\x9e\x21\x23\xa3\xf4\x8e\x45\xda\x1c\x98\xdf\x19\x35\x34\xe0\x6f\x29\xa1\xb7\x14\xc4\x6e\x53\x51\x00\x60\x9e\x1a\x32\x0c\x97\xfa\x97\xb1\xa2\xa9\x7a\x65\xde\x39\x1b\xe6\xd0\xe5\xb0\xac\x9d\x2c\x0b\x37\x45\xe7\x79\x19\xb1\x3b\x34\x49\x36\x00\xad\x94\x0b\x79\x8a\x4d\x6f\x94\x49\x8b\x09\x35\x72\xd0\x1c\x6a\x15\x68\x7d\x1d\x55\xc3\xc2\x0a\xe6\xd0\xc2\x49\x68\x71\xff\xf2\x7a\xdb\xf3\x5c\x97\xfa\x1b\xe1\x62\x89\x32\x53\x98\xe0\xe0\x52\xeb\x51\x48\x08\xc7\x71\x8c\x03\x8b\xb3\x1e\x58\x63\x17\x02\xb0\x5a\x0d\x47\x6b\x98\xc1\x0d\xd6\x05\x4a\xd6\xd7\x1b\x86\x36\x0b\xfa\x2b\xbe\x63\xfa\x77\xe4\x52\xa2\x08\xf2\xd0\x58\xbd\x16\x43\x67\x6c\xd3\xcd\x25\x00\xe4\x6e\x18\xf8\x33\x1e\xab\x80\x90\xb5\x31\x28\xba\x24\x8b\x77\x49\xae\x74\x91\x9d\x8e\x79\x7a\x4d\xb8\xb8\xb1\x66\x77\xea\x9d\xc5\x86\x50\xd8\x67\x8d\x50\x0f\x2a\x5f\x1b\x56\x76\x02\xde\x1a\x2c\x97\x38\x4c\x06\x0d\xf2\x4a\x1c\x7a\x2a\xca\x20\x8b\x33\x92\xbb\x7e\x9b\x5e\x45\x6b\x6c\x67\x9b\xb3\xe7\x2a\xa8\xa9\xf3\xe0\x18\xc5\xfb\x36\x90\x5c\x95\x3a\xac\xf7\x9c\xe4\x82\x50\xbc\x0d\xb0\xb2\x4e\x1d\x9a\x9a\xe9\x6d\x40\x99\x0a\x55\x38\x92\x1b\x21\xf4\xf2\x35\x12\xa8\x01\x6b\x83\x45\x84\xb4\xb6\x70\x55\xbe\x61\x9d\x94\x08\x20\xde\x70\x79\x0f\x3c\xb5\xbc\xe7\x05\xb2\xf1\xee\x28\x46\xa0\xd3\xb9\x8c\x7d\xee\x85\x2a\x11\xe9\x32\x16\x90\x00\x88\x8a\x58\x74\x5f\x2e\xa7\x52\x0a\x9f\x94\x3a\x6e\x38\x4d\x5f\xc4\xf1\x38\x5d\x00\xaf\xa2\xc7\x0b\x0c\xe9\x48\x71\x41\x15\xa1\xb4\x2a\xb2\xfa\xec\x90\x27\x22\x25\x3a\xf2\x16\x9c\xa4\x2f\xe2\x71\x05\xb8\x8b\x27\x42\x1e\x0a\x7b\xd6\x80\xed\x38\x92\x21\x7b\x28\xf0\x1a\x68\x77\x72\x86\x68\x04\xef\xd3\xc6\x05\x6b\x02\x38\xf6\x77\x6a\x03\xbe\x3b\x4f\xc3\x7c\xeb\x16\x6c\xdd\xfb\xda\x28\x8f\xd9\x70\xb9\x75\x23\xae\xf2\x7d\xad\x98\x13\x38\xcc\xb6\x6e\x42\xd7\xac\xc1\x1f\x7b\x2c\xf3\xc7\x6f\x57\xfa\xd5\xd1\x61\xca\xf0\x94\x9e\xfc\xeb\xbd\x2e\xe5\x63\x73\x09\x88\xaf\x5b\x1f\x1a\x42\x33\x29\x1a\x92\xeb\x87\x83\xa6\xc5\x70\x0b\x5b\xb5\x62\x60\xcc\x9b\x4e\x57\x60\xc8\x1b\x4f\x17\x79\xc0\x74\xdd\x58\x96\xc5\xf0\xa5\x1f\x5d\x18\xf7\xa6\xea\x80\x3d\x92\xea\xe0\xae\x0b\xb9\xc6\xbd\xda\x17\xb4\x81\xdb\xd6\xae\x43\x7e\xaf\x9b\x76\xd4\x95\xee\xed\xfa\x55\xd9\x9d\x66\x1d\x21\x53\x81\x35\xc6\x23\x7b\x6b\xb1\x75\xd6\x62\xbb\x59\x40\xe4\x0b\x8e\xd1\xe4\x4f\x63\x26\x66\x38\x21\xf2\xbd\x5e\x22\xb3\xbb\xf5\x86\x6d\xd9\x95\x32\x78\x1d\x31\xe7\xac\xd3\x69\x37\x45\xab\x4d\x03\xe4\xb9\xd0\x74\x1f\xf0\xe5\xc9\xe7\x85\x8a\x68\x27\xbc\x40\x77\x2e\x24\x9e\x28\x2a\x5d\x45\x5e\x57\xab\xde\xeb\x56\xce\x0f\x4c\x65\x90\xe4\xeb\x59\xca\x07\x77\x7d\x94\x60\xa7\x24\x13\x98\x7b\x62\xa9\xa8\xc3\x2d\x07\xbb\x30\xd5\xdf\xe6\x27\x8e\xb1\x2b\x2f\x58\x0b\x00\x92\xe1\x48\x8e\xc7\x1b\x50\xae\xb7\xb2\x77\xf3\xa7\x6f\x6a\xcc\xad\x1d\xf7\x6f\xed\x5c\xa5\x65\x95\x40\xb4\xc3\xb7\xc1\xbc\x6b\x38\x75\xa3\xa2\x75\xe8\x67\x4a\x70\x36\xc9\xcb\x7b\x2b\xea\x6b\x7c\x7f\x46\x8b\x4e\x87\x76\x67\x28\x8f\x85\xcd\x02\xa1\x42\xe8\x9a\x4b\xe2\x76\xbc\xc5\x8d\xf2\x96\x33\xe4\x4f\x4c\xa6\xb2\x0d\x65\xa5\xd7\x68\xf8\xc6\x08\x29\x04\xbf\x54\x76\x33\x19\x50\x0f\x59\xd7\xc8\x23\x36\x3a\x9d\xcf\x7c\x40\xaa\x03\x44\x05\xf6\x90\x08\xc1\xcf\x6d\x5e\x2e\x31\xcc\x47\x07\xcb\xc0\x90\x42\xa3\x5f\x5a\x7b\x01\x30\x60\xc3\x61\xa9\xd8\x8c\x11\x90\xcc\xb4\x0d\xf8\xd9\x8d\xc0\x28\x5d\x76\x4d\x48\x14\xff\x88\x2d\x41\xa7\x83\xe3\xa5\xea\x6d\xa0\xbe\x72\x3c\x65\x45\x4c\x61\x06\x6f\x0b\x38\x1c\x29\x02\xe1\x0f\x66\x0a\x9c\xc7\x1d\x90\x38\x10\xc9\x5d\x55\x86\xe1\x1b\xa2\xd1\x81\x9b\x27\x35\x79\x13\x50\xe8\x8c\x5b\x8a\x60\xca\xd5\x46\x60\xb5\x6a\xb3\x98\x0e\xd1\x08\xb8\x7b\xc7\xbb\xc7\x2d\xcb\xba\xa1\xeb\xc6\x66\xa9\x7c\x69\xb7\xda\xac\xd3\x99\x55\x2c\x3f\xcc\x75\xd2\xa0\xda\x99\x99\xb1\xa4\x4c\x6a\xaf\x41\x51\x7d\x31\x36\x8b\xad\x37\x39\x02\xb0\x7c\xa4\xea\xd1\xc4\xe1\xf3\x2e\x28\xc7\x5e\x66\xa4\xdd\xf9\xc8\x03\x77\xb8\xca\x63\xb6\xce\x1c\x61\x28\x46\x05\xe4\xb6\xdf\xa9\xfb\x55\x2d\xef\xf3\x7b\xea\x56\xb5\x30\x2e\x3a\x55\x8e\x4a\x00\x48\xd2\x3a\x93\x05\x59\x4a\xe5\xb6\x91\x9b\xa0\x6d\x0d\xea\x5a\x42\xdb\x6b\xb8\x27\x0f\xc7\x64\x56\xbb\xac\xb1\x0c\xf2\x49\xbf\x21\xfb\xbf\x50\x45\xd6\x05\x6b\xfd\x53\x71\x90\xaf\x31\x5e\xfc\xb3\x75\x4d\xc4\xac\x75\xc3\x96\xbc\x35\x41\x02\x75\x5b\x2f\x38\x96\x8f\x2d\xc1\x6f\x08\xbd\x94\xa5\x55\xe1\x96\xb8\x66\x2d\xcd\x8e\xca\x72\x96\xdc\x0f\x5a\x26\x9e\xe8\x94\x64\xb8\x85\x68\x8b\xe4\xf9\x12\x6b\xa0\x35\xe6\x55\x92\xfc\x87\xc4\x6e\x1d\x07\x18\xe3\x8c\x1c\xa1\xc5\xe2\xe8\x13\xe6\x39\x61\xf4\x89\x27\x62\x1f\x4d\x91\xc4\x8c\x37\x8f\x1a\x32\xb0\xc4\xd4\xed\x7e\xc0\x1c\x43\xc5\x5d\xe9\x74\x70\xa7\xc3\xab\x31\x43\x2d\x41\xcd\x50\x9e\x93\xa9\x5c\xff\x03\xd1\xe5\xf8\x92\xe4\x92\x50\x11\x29\x1b\xd0\x54\x4a\x07\x85\x49\x62\xa3\xab\x65\xe4\x82\x23\x4e\x70\x7e\xff\xcc\x68\xc1\x81\xe3\x4b\xfc\xf9\xab\x45\x51\x3c\xc0\x5d\xd3\x9c\x66\x01\xd2\x27\xff\x98\x1c\x0e\xbb\x23\xf7\xff\x13\xe8\x4a\x9c\x7c\x16\x98\x4e\xf0\x64\x4d\xc9\xa3\x21\x3a\xfa\x6d\xf4\x3f\x62\xfd\x04\x06\xb2\x66\x3e\x43\xb6\xb4\xfc\xfa\x8f\xc9\xe8\xf6\x3f\x8a\xff\xeb\x49\x78\xec\xd3\x0c\xe5\x33\x3f\x3b\xb4\x7a\x61\x43\xc3\x06\x8d\xe4\x5d\xad\x60\x76\xe9\x6a\xfd\xc7\x8c\xa2\x3d\x36\x69\xb2\xa0\xa4\xff\x88\x4e\x20\x51\x39\x75\x58\xa6\x2c\x1c\x24\xdb\x7e\x4a\xb3\x1b\x88\x52\xa5\x8a\x76\xd7\xaa\x7c\x49\x55\xa0\x3a\x8a\x3f\x0b\x15\xa6\x6e\x2c\x11\x74\x06\x6d\x08\xd5\x57\x76\x6c\x5d\xac\xd6\x22\xbe\xcd\xd0\x0d\x5b\x7a\xe1\xb6\x21\x1a\xab\x6c\x54\xed\xbe\x0d\xdf\xa5\x32\x75\x25\xd1\x05\x63\x22\x17\x2a\x1e\xa7\xda\xb2\xef\xd0\x1c\xe7\xc9\x30\xaa\xcf\x91\xfb\xf8\x92\x28\xcd\xa8\x2c\x83\x32\xcc\x6d\x6e\x7e\x0d\x5f\xae\xc0\x67\x22\xa4\x00\x37\x82\x48\x98\xf4\x6b\x7e\x15\x4e\xd0\x51\x86\x2e\x70\x26\xeb\xc8\x07\x1d\x9b\xf5\x02\x4f\x2e\x6e\x54\xca\xff\x4c\xb6\x96\xcf\xd8\xf5\x7b\xce\x2e\x39\xce\xf3\x84\xc5\xba\x37\x5d\xff\x6d\x04\x20\x65\xe2\x44\x37\x96\xa0\xd8\xb5\x0b\x2a\x95\x5f\x22\x9e\xd0\x38\xaa\xd4\x84\x51\x59\x33\x02\xd0\x54\x2c\x9b\x29\x21\xcd\x50\xfe\x32\x63\xe3\xab\x84\xc4\x91\xdd\x49\x11\x70\xeb\x14\x03\xe8\xa6\x20\xa9\x2e\xb0\x85\x25\xd4\xec\xdc\x06\x35\xc8\x4e\x43\xfb\x2b\x11\xb3\xd7\x7a\x9d\xb4\x0e\xa3\x52\x39\x8a\x00\x14\xa9\x9e\xec\x96\xfa\xff\xc8\x86\x36\x8f\xa6\x6c\x49\xf5\x35\x57\xe4\x87\xe3\x6f\x02\xf4\x17\x5d\x81\x54\x82\x98\x06\x7a\x74\xc1\x3e\xb7\x22\x00\xbd\xbc\x09\x8e\x5f\x57\xa1\x5d\xa1\xea\xce\x57\x1f\x65\x38\x5e\x7b\x89\x47\x65\x4f\x26\x64\xf2\x96\xe6\x98\xdb\xd4\x53\x61\xbd\xbc\xb9\x43\x51\x56\x61\x6b\xec\xdb\x34\xee\x5d\xea\xf7\xbe\x5d\x9e\x7f\xc5\xeb\x76\x75\xbb\x07\xca\xec\x15\x4a\xdd\xa3\x06\x60\x6e\x09\xd4\xbd\xb1\x00\xea\x0a\x41\x7d\x8d\xce\xe7\x6c\x99\xe3\x13\x2a\x30\xff\x8b\xca\x0f\x61\x6e\x78\xbb\xde\x87\xee\x05\xa1\x13\x6d\xbb\xd7\xac\xfa\x13\x46\x9f\x70\xa8\xaa\xfa\xd0\xac\x6a\xf3\xb8\xa1\xc9\xe4\xe4\x13\xa6\xe2\x27\x49\x6e\x28\xe6\x71\xa4\x6a\xe9\xb4\xb0\x8d\x2e\x98\x06\x36\x83\x91\xc9\x96\x9b\x7d\xb1\x30\x0a\x78\x4d\xb2\xec\x35\xce\x05\x67\x37\x81\xd5\xb9\x77\x49\xaa\x9d\xd0\x29\xc3\x1e\x3c\x96\xf5\x60\xee\x1d\xce\xc2\xe0\x8b\xd7\x4b\xae\x2f\x92\xc3\x7b\xbf\x8a\x5a\xea\x67\x40\xb2\x09\x5e\x2c\x71\x6f\xdb\x57\x91\x59\x69\x8a\xba\xe9\xa9\x21\x73\xcc\x96\x22\x82\xbd\xf0\xb9\x99\x89\x79\x76\x86\xa6\x38\x8e\x04\x47\x54\xa7\xb2\x3b\x9a\xd8\xa1\x94\x21\x26\x31\x8c\xe6\xb9\xce\x6c\x00\xc7\x19\x19\x5f\x25\x8d\xb3\x70\x47\x2f\x26\x7a\xb9\x4f\xe9\x2b\x59\x55\x9d\x13\x73\xe5\x79\x6e\x3e\xbd\x91\xe5\x6c\x5c\x6e\x50\x40\x6f\xc5\xee\xc0\x15\x7e\x23\x51\x33\x6b\x8c\xca\x45\xa2\x92\xec\x63\xaa\x30\x79\x09\x59\x2d\xe2\xc3\x20\xb7\x2b\xd6\x53\x8e\x1a\xc8\x26\x55\xd0\x12\xdb\xa0\xb7\xdf\x77\xd8\xe8\xe1\x09\x82\x59\x5c\xef\xaa\x87\x64\x80\x1c\x66\xa0\xde\xf6\x58\x37\x82\xed\x3e\x38\xc0\x72\x4c\x06\x9e\xb7\x46\x48\xc1\xca\x93\x5b\x95\xfd\xaf\x39\xb6\xf0\xd2\x56\x73\x63\xac\xe1\xf0\x35\x57\xa6\xff\x37\x12\xf5\x9d\xfc\x9b\xe6\x75\xed\x99\x7b\x54\x5e\xcd\x40\x33\x1c\x95\x7e\xa7\x10\x09\x9e\xc0\x5b\xb9\x2b\x3e\x92\xb9\xb9\xfe\x73\x3c\x44\xbb\x0f\x49\x2e\xf7\x47\xf3\xa2\x70\x22\x8b\xeb\xd2\xe7\x97\x4b\x32\xd1\xee\x43\xf2\xd7\x1b\xc6\x41\x6c\x29\x74\x95\xbd\x90\xd5\xb7\xdb\x5b\xf5\xdd\x93\x0b\x32\xbe\xba\x51\xf9\xe8\x55\x65\x89\x37\xf8\x47\x94\x5f\xc5\x76\x1f\xe6\x58\xbc\xad\xf6\x52\xdd\x78\x54\xb7\x45\xb3\x13\x9a\x05\x55\x73\x60\xf2\x43\x36\x4f\x99\x9a\x25\x94\x5f\xbd\x35\x2a\x85\x08\x1c\xe0\x41\xec\x78\x5a\xc3\xc6\x4a\x11\x59\xc3\x14\x18\xf1\x09\xbb\xa6\x31\x00\x89\x46\xe3\x76\x9a\x75\x8f\x0b\x35\xd1\x81\x2e\xd5\x1b\x2e\x17\x41\x73\x3a\x01\x58\xba\x49\xc1\xc9\xe5\xa5\xa4\x09\x13\x32\x39\x29\x61\xab\x93\xb6\xe6\x7c\x87\x87\xca\xa8\x29\x1a\xe9\x63\xe5\xa6\xb7\x32\x4f\x81\x77\x81\x49\x82\xf7\x2e\xb3\xa4\x4e\x0e\xf9\x35\x27\x22\x0f\x4d\x84\x3c\xf1\x05\x74\x18\x6c\xe3\x5a\x3d\xd7\xeb\x19\x1e\x5f\xbd\x9d\x9e\xcd\xd8\x32\x9b\x58\x24\xe8\xf6\x53\x98\x13\x73\x69\xa7\xca\x99\xb2\x94\xcb\xf7\x62\xe0\xa5\xa0\xd3\x95\x4c\xb6\xaf\xd1\x05\xb7\xb8\xeb\x2d\x7b\x0c\x0a\x00\x45\x93\x17\x73\x1d\x71\xf3\xa8\xed\xf3\x2a\xcb\xbe\x86\x5d\x0c\x51\x69\x92\x9b\x05\xc5\x93\x08\x34\xa7\xc8\x92\x05\x39\x3f\x15\x41\xde\xdf\xfd\x5a\x2e\xfe\xb8\xc3\x80\xbd\xa3\x10\x1e\x6e\x63\xd7\xc8\xd1\x2a\x9f\x8e\xfa\x51\x2a\x0a\x18\x38\xe3\xcd\x99\x88\x6d\x02\x18\x20\xc7\xa0\xf1\x40\xa3\xd9\x1a\x3e\x8b\x20\x96\x24\xe9\x12\x8b\x93\x0c\x2d\xf2\x26\x68\x73\x39\x13\x00\x7d\xd4\x98\xf0\x1a\x68\x09\xd8\x3b\x28\x5f\x2e\x31\x54\x60\xa7\x34\x16\x0f\x83\x03\x97\xff\xce\xc3\x54\x42\x75\xaa\x7e\x0e\x9a\xc8\xb1\x3a\x21\x31\xf8\x71\xfd\x29\xa8\xf0\x1b\x55\x9c\x6d\x31\x57\x08\x87\x54\x4e\x84\xec\x95\x5d\xf0\x0d\x79\x9f\x33\xcc\x3f\x91\x31\xee\xfe\x6b\x89\x97\xd8\xe0\x2c\xc3\x2d\x9b\x4b\x5c\x25\x5e\xe8\xc6\x0c\x2d\x08\x21\xcd\xd7\x15\x32\x11\xd5\x32\x64\x85\xf2\x3f\x3a\xda\x9e\xeb\x2e\xd4\xf4\x31\xc1\xcc\x41\xeb\x58\x87\x35\xfc\x82\xfe\x7c\x74\x4d\xc4\x4c\xf1\xc8\x6b\x8a\x55\xda\x3d\x62\x2a\x3f\xcc\x57\x0e\xc1\x17\x08\xa4\x63\x57\xc2\xaa\x6e\x4c\xf8\xe7\x9a\xb8\xd1\xc5\xff\x5a\xa2\x2c\x8e\xd4\x7a\x75\x6d\x70\xc4\x5e\x85\x5b\x50\x7c\x45\x5e\xaf\x38\x47\x8b\x97\x37\xa6\x62\x04\x23\x55\xa8\xa6\xc4\xe0\x1c\xd1\x4b\x3c\xf9\x2f\x59\xa4\x5e\x3d\x67\x5c\xb8\xda\xf1\x1a\x8b\x89\x05\x27\x8c\x13\x71\xf3\x5c\xb8\x9f\x83\x7e\x52\xbe\xff\xd1\x7b\x7f\xd4\x4f\x7a\x05\x78\x20\x9b\xe3\x58\x17\xc3\xdb\xe6\x76\x6f\xaa\x8e\xba\xb4\x7f\x0f\xe6\xd2\xc7\x19\x46\xdc\x6c\xee\x5c\xf1\xc6\x93\xc9\x17\xc3\x44\xa5\xeb\x95\xee\x0d\xa6\xaa\xf7\xe6\xd0\x53\x7c\x5d\xe1\xb0\xb1\x91\xf5\x0b\x58\xe9\xd4\xfd\xe7\xdd\x1e\xf1\x92\xca\x91\xfc\x1d\xa3\xd8\x8f\xeb\x71\xa7\x81\x6f\x40\x46\x00\xca\xf3\x48\xf6\x23\xb6\xbd\xb2\x3a\xee\x8f\x37\x8b\x50\xaf\x0c\x37\xb0\xe3\x54\xb9\x05\x75\x33\x16\xe8\x71\xc5\xc9\xd4\xef\x4e\xac\xae\x77\x4d\x3f\x17\x18\x5f\xbd\x21\x3c\x0f\xd9\x87\x06\xa7\x4e\xe7\x3a\x37\x26\x24\x40\x03\xf8\x09\x6d\x51\x3f\x43\x7e\xf5\x4b\x2c\xd4\xba\xea\x37\xa1\x68\xca\x72\xf9\x6d\x23\x4a\xb2\xad\x6d\x85\x2f\xb8\x01\x21\xd5\x0b\x43\xee\x95\x18\x4d\xdb\xaf\x5d\xf0\xd2\xdb\x02\x34\x72\x9d\x11\x38\x8c\x84\x5c\xff\x48\xd2\x73\x39\x3e\xc2\xe8\x1b\x75\x7b\xa3\xec\xcb\x23\xc3\xb6\xbe\x5e\x2e\x32\x32\x46\x02\xe7\xd1\x08\x38\xcf\xa2\x32\x9d\x0f\x83\xb7\x3e\x95\x4a\x68\x51\xda\x8a\xe4\xea\x06\xde\x5e\xfc\xfa\xb2\x7a\x0e\x60\x96\x3a\x02\x7c\xaa\xf0\xf9\x29\xb7\x63\xc9\xe1\xd2\xe7\x67\x10\xcc\x61\x56\x9a\x49\xbb\xbc\x94\xc6\x44\x17\x19\xbe\xa6\x06\xa5\x66\x32\xe6\xb3\x72\x5b\x4e\x1d\xf5\xba\xce\x61\x69\x7a\xe1\x7b\x39\x57\x33\xb0\x0a\x30\xa0\x89\x28\x60\x08\x66\x5d\x39\x15\xaf\xc7\x0a\xa7\xd7\x14\x73\xe3\x33\x6c\x42\x60\x7c\x50\x67\x45\xeb\x86\x4c\xd2\xa4\xcb\x04\xd3\x4f\x84\x33\x3a\xd7\xb1\x2b\x45\x78\x94\xf8\x8e\x21\x96\x36\xca\x5e\x2a\x14\x7d\x12\x7d\xcc\xbd\xbd\xf2\x22\xd8\x98\x73\x70\xf1\xb6\x07\x5f\x73\x27\xa7\xbc\xa1\x22\xd3\xa7\xa8\x74\x6c\xaa\xb3\xbb\x14\xe2\xa1\x18\x81\x42\xed\xa9\x0a\x7e\x8b\xef\xe8\xa3\x81\xfb\x51\x9f\x03\x87\xb9\x14\x97\xe6\x03\x59\xe3\xb4\xa1\x94\xd7\x43\x3c\x2a\xef\x22\xdd\x4d\xe4\xce\xa1\x5c\xdc\xf9\x2e\x8f\x18\xad\xe9\x0d\x4b\x2f\x16\x82\xf3\x98\xc0\x5b\x9b\xe6\x85\xeb\xdc\x7b\x58\xca\x21\x5d\x34\x99\xc4\x44\x89\x14\x33\x94\xbb\x53\x1c\xb2\x90\xaa\xa3\x42\xcd\x9c\x44\xa0\xab\x02\xe9\x4f\x70\x1e\x2b\xd1\xc1\xd0\xbc\xc0\x5c\x54\xb4\x70\x4d\xbc\xa1\x8d\xee\x1a\x31\x5c\xc5\xc0\x33\x7d\xaf\x2e\xc8\xfb\x26\x8c\xc6\x09\x56\x5c\x9c\xe6\x90\x0e\xac\x2f\x47\x65\xa8\xa5\x99\x5e\x71\x17\xce\x8f\x80\x0a\x3a\xe5\xec\x21\xab\x6c\x31\x29\x00\x38\x58\xc7\x16\x6f\x70\x65\xf9\xf5\xef\xc1\x3d\x3e\xd5\xae\xc4\x5f\x3e\xfe\xfc\xd3\x4b\xc4\xf3\xae\xed\x60\x7c\x4b\x26\x49\xf4\xfe\xaf\x8b\xe9\xff\xfb\x6c\x3c\x8f\xe0\x85\xba\x2a\xfb\xe1\xd6\x18\xb4\xe5\x51\x32\x8c\x3a\xf6\x90\x8d\xa4\x58\x83\x04\xd6\x16\x92\xc9\x70\xf8\xef\x30\x22\xd3\x08\x0e\x87\x4f\xff\x27\xec\x8f\x46\x3a\x38\xef\x6d\xad\x50\x0f\x46\xad\x56\x34\x82\xc3\xfe\xbf\xc3\xbe\x2c\xfb\x0c\xf6\xe0\x70\x34\x82\xc3\xa7\xff\x0e\xcd\x25\x65\xa4\x1e\xff\x43\x5f\xd6\xa8\xcc\x23\x65\xb1\x48\x69\x30\x23\x0d\x7d\x24\x0b\xf6\x60\xf4\x8f\x7f\x50\x59\x27\x5a\x20\x8e\xe6\x58\x60\x2e\x9b\x1a\x15\x77\x34\x5e\x69\xce\x5d\xa6\x49\x20\x53\x94\xe5\xd8\x03\x0b\xbd\x71\xc9\x2a\xb5\xbb\xc8\x68\x74\xe7\x48\x75\x73\xff\x0b\x46\x13\xf2\x29\x82\x82\x2f\x25\xe8\x7e\x4f\x0e\x03\xa9\x8b\x4b\x7d\x5f\x67\x6f\x26\x64\xe1\xff\x70\x8d\xb7\x5a\x5b\x03\x50\x3d\x82\xc3\x7e\x5f\x2e\x8e\xba\x19\x1c\x3e\x7d\x2a\x0f\x5b\xf5\xe6\x43\xcd\xb0\x6c\xe8\x7f\x57\x1a\x8b\x2a\x6f\x82\x53\xaa\xa7\xbd\xf1\x5e\xbe\x9a\xa1\xfc\xe4\x13\xca\xa2\x44\x4d\x61\xf1\x03\x9c\x63\x81\x92\x5b\x9d\xa8\xfd\x1d\x9a\xe3\x64\x87\x93\xd1\x9d\x5d\xe4\x51\xf5\xac\x89\xbb\x44\xd0\x9a\x7a\xf9\xeb\x9d\x2b\x34\x99\xf8\xee\xe1\x96\x58\x35\x39\x37\x28\x3c\x33\x58\x0c\xa0\x0e\x94\x83\x95\x29\xac\x18\x72\xdf\x03\x93\x8f\x8c\x0d\x52\x8d\xf6\x87\xef\x61\x15\x72\xe2\xa9\xa8\x25\x42\x6f\x32\x31\x2e\x98\x4c\x99\xeb\xb8\xca\x87\x94\x86\xca\xdc\xcb\x07\x6f\xe9\x1c\x07\xaa\x27\x68\x2c\x42\x11\x1a\x2a\x62\xe3\xa1\x28\x74\x4a\x6d\x6b\xe9\xe8\x0c\x10\x8d\x48\x46\xa1\x50\xee\xf7\x46\x4b\x9e\xae\x25\x33\x6e\xec\x38\x78\x0b\x1d\x52\xef\x34\xa4\x21\x51\x4b\x08\x6a\x1a\xad\x79\x02\x84\x8d\xfa\x37\x52\x2c\x3c\x6e\xc2\xd3\xca\x58\x2c\xd9\x37\x5a\xa7\xe4\x19\x7e\x06\x6b\xea\xc9\xa4\x07\xad\x88\x9e\xf4\x7b\x3d\xa8\x95\x50\x49\xbb\x5f\x35\xc6\x68\xf7\x35\x3b\x10\x11\x3a\x65\x91\xfa\x9d\x27\xc3\x28\x5f\x8e\xc7\xda\xb6\x42\xbf\x8f\xae\x11\xa7\x4a\x3f\x1a\x4d\x10\xbd\x54\x89\x79\x14\xee\x89\x60\x94\xe3\x31\xa3\x13\xc4\x6f\xa2\x11\x6c\x0a\x09\xc9\x30\xe2\x4c\x39\x57\xaa\xc0\x05\x9c\x65\xea\x0a\x3c\xfa\x44\xf0\xb5\x7a\x67\x4e\x7e\x34\x82\x0d\xa6\x20\x69\xf7\x8b\x35\xd9\x68\xc3\x1a\x22\xb3\x53\x1f\x79\x69\xf4\x96\xbc\x2d\x4a\xf3\x77\x8f\x67\xa5\xda\xd8\xbd\x7e\x31\xa9\x82\xeb\x2b\x04\x40\x4b\xa1\x65\xf3\x81\x32\x9a\x3d\xaa\xf9\xdc\xef\x98\xb7\x78\x38\x82\xdc\x9f\x5c\xaa\x27\xf7\xa8\xdf\x4e\x53\xd1\x55\x61\xf0\x4e\xa7\x7a\x3e\x55\x18\x04\x3c\xa4\x23\x87\x82\xf8\xe6\x53\xea\xb4\x8b\x7f\xee\x59\x4d\x1f\x30\xab\x33\x8c\x26\x3e\x2d\x97\xcf\x47\xda\x74\x6d\x9d\x16\x58\x55\x09\x32\x02\x7e\xe5\xaf\x76\x4f\xbc\xce\xde\x4e\xa0\x4b\xcd\xb3\x44\xb0\x61\x7a\x97\xab\x8b\x82\x8f\x18\xf1\xd7\xec\x9a\x9e\xd2\xb7\x94\x88\xa4\xdd\x83\xb2\xc3\xd6\x50\xe6\x0e\xf1\xbd\x2e\x66\xf8\xf2\xbb\x0e\x7b\x19\x47\x46\x95\x9e\x1c\x4d\xd8\x78\xa9\x25\xf6\xae\x04\x2f\xa7\xfd\x0b\xdc\x21\x07\x06\x10\x39\x43\x0f\x61\xde\xff\x05\xa3\x49\x6c\x6f\x22\xec\x8b\xba\x2d\x8c\xae\x42\xf2\x37\x28\x17\x17\x8c\x89\x18\xd8\x3d\x6d\x7b\xde\xfd\xd7\x12\xf3\x9b\x33\x9c\x61\x49\x10\xe2\x1f\x24\x5b\x38\xa4\x68\x8e\xd3\xda\x2e\x38\xca\x05\xe2\x22\x1a\xfd\x00\xa0\xd8\xa1\x36\xa6\x13\x59\x57\xf2\x01\xb8\xd3\xa9\x84\x26\xc4\xca\xd0\xf2\x8c\x5c\x64\x84\x5e\x1e\xf3\x4e\x87\x4b\xd4\x71\x0c\x5c\x23\x12\x80\xb9\x2c\x79\x35\x23\xd9\x24\xe6\x00\xd6\xaa\x1d\xac\x2f\x8c\x01\x5c\xff\x51\x80\x42\x4a\xd7\xe5\x0c\x35\x15\x84\x21\x9f\x3c\x59\xfa\x25\x63\x6b\xb2\x5e\xd9\x73\xe3\x6e\x5c\xd4\x0c\x4c\x94\x73\xfb\x57\xc7\x5e\xe1\x5b\x8e\x3b\xfb\x79\xef\xf9\x7e\xac\x5e\xaf\x91\x79\x0f\xd9\x21\xbb\xfe\x38\x9f\x06\x65\xde\xa0\xa4\x4b\x8f\x8c\x45\x9a\x93\x0c\xbd\xd3\xaf\xa4\xc2\xe1\x30\x52\x7a\x07\x18\x79\xbb\x48\x8a\x58\xd1\xbf\x8d\x97\x3c\x67\x3c\xe9\xfd\x5b\x64\x05\xaa\xb5\xa2\xea\xff\x92\xd2\xa9\x5c\x56\x4f\xf6\x93\xdb\xbf\x81\x43\xed\xe9\x31\xe2\xa1\xf5\x83\x8f\x22\x4f\xd4\xeb\x6b\x71\x50\x15\xb7\x25\x4a\x91\x77\xf3\xa6\xd4\x51\xbb\xab\xa1\x0d\x24\xc8\xad\xc4\xc5\x8d\x36\x91\x95\x15\xc3\xfb\x50\xbb\xa1\x1e\xd9\x98\xec\x47\x0b\x4e\x3e\x21\x81\x9f\x68\xf5\x70\xf5\xf3\xae\x19\x79\xbe\x9e\x87\xe4\x97\x95\x21\x1a\x8a\x48\x15\x9b\x2a\x26\x69\x1f\x6e\xe8\x5f\x8c\x8b\x98\xa6\xfc\x9e\xc8\xf1\xdb\x39\x18\xdf\x7e\xdf\x01\xe3\x0b\x95\x21\xb6\x32\x61\x5c\x4d\x98\xf1\xcb\x5e\xeb\x26\x2d\x54\xc9\x9d\x12\x08\x19\xf2\xb2\x7d\x1a\x21\x18\xca\x21\x34\xa8\xb8\x48\x27\x5f\x20\x73\xd0\x40\x8f\xcd\xc6\x2e\x6e\x4c\xd1\x37\x11\x24\x1e\x0c\x7b\xa3\xa0\xc5\x2e\xc9\x25\xb5\x51\x36\xbb\x4c\x85\xc0\x4c\x59\x57\xaf\x32\x80\x58\x3e\xad\x56\x51\x14\x4e\x18\xd6\xc4\x57\x2e\x97\x04\x5a\x10\xa1\x8c\x6a\xd6\x31\xd4\x5b\x21\xba\xaf\xc6\x57\xe3\x6e\xd9\xd3\xaa\x31\x66\x35\x69\x5a\xf5\x3e\xc7\x55\x01\x07\x15\x00\xbc\xa2\x18\xab\x46\x4c\xe7\xbe\x72\x90\x6e\x35\x99\xb3\xe5\x1c\xd1\xda\x54\xee\x33\xb0\xfd\xe1\x50\xe7\x3e\x03\xdb\x3e\x03\xdb\xef\xcc\x4c\x59\x4c\xb1\x2e\x55\x10\x4d\x9f\x9c\x1f\xae\x8e\x0e\x9f\x5c\x1e\x54\x83\x59\x94\xf9\xdd\xfa\x8a\x50\x90\x69\xbc\x8e\x48\x28\xbf\x7f\x9e\x72\x47\x24\xf4\x04\xd8\x08\x25\x51\x64\xac\xcc\x78\x57\xb0\x9f\xd8\x35\xe6\xaf\x90\x89\x9a\xbc\xc8\xd0\x18\xc7\x14\x46\xad\xc8\x0b\x02\x3f\x9e\x21\xfe\x42\xc4\x3d\xd0\x15\xec\x97\xc5\xc2\x96\x3f\x24\x66\x8b\xf7\x41\xf1\x80\x2c\x47\xeb\xb1\x6a\x26\xfb\x36\x46\xf9\xa6\x14\x4a\x2b\xe1\xbc\x5a\x5f\x88\x98\x7d\xc9\x14\xac\xb8\xeb\xfa\x57\x5d\xf6\xaa\xb9\x4c\x49\xd8\x0e\xfc\x1a\xf4\x21\x89\xf6\xd6\x4f\xb4\x20\x22\xc3\x9b\x73\x02\x7a\x9e\xcb\x4a\x7f\xc8\x69\xb6\xdd\xdb\x78\x96\x5d\x85\xaf\x35\xc9\x7c\x49\xc7\x2a\x73\xfe\x9e\x47\xd8\xf3\x08\x7b\x1e\xe1\x4f\xc2\x23\xf8\xc1\xaf\x7c\x2a\xfe\xac\x96\xa5\xd5\x9d\xa1\x34\x4d\xc9\xa0\xff\xef\xbd\x84\x40\x94\xf2\xe1\xd3\x11\xcc\xcb\x2f\x68\xb5\x42\x70\x99\xe6\x03\x76\xf4\x2c\x61\xf7\x49\x8b\x26\xef\x36\x2d\x19\x81\x4e\x87\xda\xdb\x9d\xe5\x20\x1f\x94\x8e\xdd\xb4\x9b\x2f\x2f\x74\xb1\xb8\x07\x97\x00\x46\xdd\x6e\x37\x02\x49\xfd\x7d\xb2\x13\xd7\x63\x71\xdf\x17\x4e\x1d\xbb\x1e\xd9\x2e\x25\x9b\xb2\x35\xeb\xe0\xd5\xfa\x43\xd2\x34\xd7\xbf\x8d\x89\x5a\x59\xe3\x0b\x53\xb5\x06\xaf\xb5\x3d\x51\x73\x3e\x40\xe2\x3b\x0b\xd0\xf6\x07\xb8\xd0\x8d\x22\x9f\x4c\xb5\x4b\x32\x15\x44\xce\x27\x9f\x17\x78\x2c\xf0\xa4\x85\x5a\xba\x06\x6c\x5d\x32\xd1\x42\xa5\x33\xb8\x66\x00\x5c\xc2\x9c\xaa\xe0\xb0\x99\xe2\xa9\xce\x35\xee\x37\xcc\x9f\x76\xc3\x38\x49\xf3\x49\x3c\x48\xfe\xbf\xd5\x3f\xf2\xd5\xd1\xea\x1f\x4f\xc0\x3f\xce\x9e\x5c\xc2\xb0\x9b\x49\x45\xf0\x2c\xc0\x76\x5b\x8e\x93\xf9\x7e\xbb\xfd\xc9\xb6\x1b\x27\xf3\xed\x10\x53\x90\x63\xd8\x6f\x95\x3f\xc1\x56\xa9\xa0\x96\xc0\x8e\x61\x59\xa6\x2d\x11\xfd\xeb\xe2\xfa\xb7\x20\x9f\xb9\x51\x4d\x77\x1d\x1d\xaa\xa7\xf7\x26\x99\x60\x2a\x88\xb8\x59\x5f\x82\x62\x3c\xc9\x8f\x38\xb6\xc1\xa1\x1f\xd1\x57\xd5\x9d\x03\xec\xc2\x6a\x07\x72\x32\x7d\xc1\xcc\xa1\xa0\x4c\x71\x33\x23\x79\xf7\x0a\xdf\xa4\x42\xff\x9c\x91\xc9\x04\xd3\xb4\xdd\xd7\x8f\x44\xe0\x79\xca\xcd\x6f\x3a\xc1\x9f\x53\x6a\xc2\x29\x89\x9b\x0c\xa7\xc4\x4b\xc1\xc5\x62\x70\x5b\xf8\xc9\x74\x37\x08\x9c\x16\x36\x9f\xba\x50\xa9\x11\xcc\x14\xd9\xf8\x08\x38\xcb\x7e\x52\xd5\xab\xef\x39\xba\x7e\x2b\xf0\x3c\xaf\xbe\x25\xcd\x57\xf9\x98\xb3\x2c\xfb\x09\x4f\x45\xe8\xfd\x47\xb6\xa8\xb5\x97\x11\x4c\xc5\xaf\x64\x22\x66\xa1\x0f\x7f\xc1\xe4\x72\x56\x83\x64\xcc\x2f\xce\x4a\x8d\x99\x71\x73\xd5\xef\x8d\x3d\x4a\x73\x58\x79\xe9\x51\xeb\xbd\xfd\x19\x2d\x6a\x09\xb1\x74\x1a\x3b\xcf\xc2\xcc\x85\x06\x51\xef\x2e\xb1\x78\x21\x04\x8f\x23\x3d\x7d\x11\x38\xa8\xcc\x66\x69\x70\x6e\x4f\xff\x00\x27\xff\xb3\x39\x39\xbd\x55\x15\x9a\xfe\x74\x94\xe1\xa9\x28\x83\x67\xb8\x39\x5b\x53\x5a\xb0\x85\x2b\xec\xcf\x64\xbd\x38\xce\x05\x99\xab\x40\xec\xd7\xf2\x7b\xad\x8e\x99\xe4\xf5\x95\x66\xaa\x40\xad\x5b\x3a\xaa\x6a\x1a\xec\x97\x8e\xb1\x19\x69\xb7\x4f\x3c\xc9\x3f\xb8\xd3\xde\xd8\x85\x5e\x88\x8a\xd5\xaa\xfa\x86\xd0\x4b\x1b\xf1\xe5\x9c\xe4\xff\x99\x91\xf9\x1c\xf3\xa7\x31\x18\x18\x57\x36\x8e\xe9\x44\xae\x4e\x52\xf3\xce\x53\x21\xc5\x0a\x38\x21\x93\x0f\x78\x8c\xc9\x27\x2c\xfb\x96\xaf\x31\x1f\xb4\x9b\x61\xb9\x90\xdd\x53\x7b\xbc\xfa\xea\x4c\x0d\xe9\x3d\xd3\xe1\xa7\xe2\x0d\x63\x84\xa9\x93\x61\xad\x0b\xd5\x83\xb1\x90\x53\x8a\x98\xd3\x8b\x1c\xf3\x4f\x98\xdf\x5b\xc0\xe4\x5f\x92\x2d\xea\xf9\x4e\x98\x1c\x97\xf9\x1d\xd5\x67\x37\x2a\x40\x01\xbd\x91\x04\x22\xde\x94\xe7\xbb\xba\x72\xf2\x83\xb5\x4c\x0b\xef\x77\xd5\x49\xdf\xa5\xcc\xe2\x84\x76\x9a\xe2\xdf\x7d\xdc\x75\x3c\x85\x2b\x7e\x5f\x2f\x54\x08\xd3\x32\x3e\x9d\x1e\x8b\x8a\x77\xd7\xe9\x28\x8f\xc0\x7a\xff\x1a\xef\x76\x58\x0a\xbb\x16\xd5\x2d\x14\x4a\xb5\x54\x39\x53\x95\xec\x3c\x61\x04\x71\xe0\xb8\x11\xdc\xe9\xc4\x38\x5d\x20\x9e\xe3\xb7\x54\xdd\xb9\xf5\x40\x03\xdb\xe8\x72\xde\xf8\xcb\x4f\x11\xc4\xc0\x06\x7f\x59\x8f\x63\xca\xf6\x84\x52\x35\xba\xf6\x44\xa3\xbd\x8f\x6c\xa1\x8b\x35\x9a\xfb\xc8\x16\x72\xca\xcb\x79\x79\x55\x62\xf2\xb5\xb9\x89\xdc\x7e\xed\x7a\x78\x3f\x6e\xa0\xbc\x00\x42\xf3\x3b\x5d\x27\x1c\x92\xe5\x54\xa8\x30\x0d\x7c\xd4\x5f\x64\x11\x8d\xf8\x82\x65\xf4\x27\x83\xb2\xf4\x28\xbd\xcf\x3a\xa6\x8c\xdc\x2b\x1f\x14\x92\x6a\x1c\x44\x33\x01\x92\x2c\x55\xd1\x8d\x37\x27\xb1\x3b\xcc\xaa\x5c\x70\xdf\xa8\x8d\x1c\x0e\x9a\x60\x3e\xc2\xc8\x04\xda\xb0\x84\xca\x9b\x52\x77\x5f\x81\xcb\x30\x2d\xf5\xaf\xa9\x97\xce\xd1\x64\xc3\x4f\x2b\xe4\x13\x66\x41\x02\x3a\x6e\xae\xa0\xe2\x6c\x5e\x88\xb8\xbe\x3d\xeb\xfb\xa7\x49\xd1\x42\xcb\x0b\xa7\xa1\x3d\xb2\xa4\x5f\x0c\xfe\x24\xf5\xa7\x71\x96\xfe\x8c\xc4\xac\x3b\x27\x34\x1e\x43\x9f\xe4\x83\x83\xf1\x51\x3a\x83\xd3\x43\xf9\x5f\x59\x68\x7a\xe8\x17\xf2\xec\xd1\x27\xe5\x8a\x1c\x8d\xf5\xdc\x2e\xd2\xe1\x48\x29\xed\x45\xda\x3b\x16\xcf\xa7\xc7\xe2\xf0\x10\xb0\x74\x7c\x28\x20\xaa\xe9\x4c\x27\x5d\x7d\x8b\xf0\x42\xc4\x0c\x00\xb8\xec\x74\xe2\x3c\x5d\x0e\xd1\x08\xc0\x7c\x10\xd3\xe6\x94\x4c\x19\x9f\x23\x21\x91\xa2\x0a\x9c\x1a\xb3\x0d\x47\x5f\xba\x91\xe7\xce\xb3\x92\xd6\x5e\x6b\x2e\x56\x45\xe5\xaa\x7e\xb8\xc2\x37\x11\x44\xb5\x97\x6a\xf9\x23\xc8\x00\xcc\x86\x68\x94\xe6\x20\x59\xe8\x5b\x34\x06\xbc\xc1\x7b\x0c\x9b\xcd\xac\x2f\x67\x43\x32\xe6\xd9\x30\xce\xbd\x01\xe6\x43\x31\x02\x92\xa9\x1e\xc9\xaf\x0b\x7b\xfb\x71\xcb\xd2\x45\x77\xc1\x16\x86\x6d\x9b\xa7\x95\x29\x3b\xa8\x4f\xe8\x1c\xc0\x47\x9e\xb5\x7b\x26\xa7\xfa\x5a\xe0\x79\x04\xe7\x77\xcc\xbb\x9e\x4b\x1d\x36\x2b\x5c\xa8\x17\xee\x56\xa4\x51\x58\xd2\xea\x1d\xb7\x26\x24\x5f\x64\xe8\x26\x69\x51\x46\xf1\x71\xe4\xaf\xc7\xc2\x5f\x05\x39\xb7\x43\xa1\x7d\x36\x3f\xdd\x33\xb1\x9f\xbe\xe8\xc4\xe6\xea\x1a\x8b\xc4\x08\x7e\x82\x4c\x4e\xa9\x1e\xb7\xcf\xdf\xfb\xde\xea\xb9\x09\x78\xe0\x78\xfc\x4c\x7b\x24\x58\x2e\xb2\xe9\x91\x60\xdc\x3a\x34\x53\xf9\x8e\x4d\xb0\x17\x43\xd2\xa7\xce\xb5\xe8\x19\x4d\xf2\x3d\x68\xbe\x52\x45\x13\xec\x08\x49\x89\x9a\x3a\x1d\x51\x7b\xfb\x91\x2d\x56\xab\xb8\x1e\xb3\xac\x46\xb1\xe1\x9a\xef\x86\xc4\x9a\x59\xa9\xb1\x24\x2a\xc6\x96\x9e\x55\x49\x5e\xee\x18\x8e\x2f\x4b\x94\xac\x43\x55\x5c\x50\x57\x90\xcd\x7e\x7a\x55\xc3\x1d\xf5\x81\xdc\xdd\xd7\xaa\x0f\x34\xda\x55\xdf\xe1\x69\x2d\xfe\x40\x21\x07\x16\xff\xf5\xe1\xd7\xf1\x7f\x21\x12\x0e\x39\x20\x77\x6d\x04\xef\x8e\x3c\xa0\xc7\x49\x91\x20\x9f\xf0\x91\x5e\x7e\x1d\xed\x50\xf9\xe6\x0f\x87\xd6\x4f\xe1\x28\xd7\xa6\x2f\x3e\x03\x09\x7d\xee\xce\x3e\xe8\x0d\x11\xc1\xa8\xbe\x47\xa2\x91\x75\xf8\xa8\xf0\x38\x2e\x84\x81\xbf\x39\xeb\x2f\xe5\x8e\xbc\x2b\xb8\x41\xa5\x69\x13\xe3\xe0\xae\x50\x08\x8d\x9e\xd9\xa8\x08\x77\xb9\x93\xf8\x91\x04\xfe\x43\xc7\x37\xc0\x68\x3c\x8b\xca\x61\x49\xfc\xb1\x3e\xb0\x41\x3d\x18\xc1\x7f\x78\xb1\x06\x9e\xc1\x3e\x1c\x9a\xc7\x91\x0d\x32\xd0\xff\x77\xf8\x54\x77\x5c\x7e\x54\x48\x5c\x4d\x82\x79\x56\xb8\x7e\xa4\x4a\xff\xef\x86\xc3\x48\xdf\x7a\x8c\x7c\x05\xbf\x92\xed\x0e\xcc\x86\x91\x08\xee\x00\x1a\xd8\x9d\x77\x2a\x1f\xed\x35\x08\xa2\xf9\xdd\x7a\x46\x35\xdf\x47\x8b\x32\xed\xef\x57\xbc\xcd\x6e\xde\x60\xab\xd6\x2d\x10\x10\x47\xec\x13\xe6\xd3\x8c\x5d\x6b\x41\x4f\xc7\xdd\x27\x6b\xd5\x73\x61\x6d\x5c\x45\x7f\x13\xd4\xcf\x04\x94\x48\x4d\x45\x91\x79\x83\x28\x99\xab\xb8\x17\x6f\xe4\x96\xa9\xa9\xe2\xb4\xde\x63\x03\x0d\x89\xaf\x6a\xab\xa9\x0b\x7c\xdc\xd2\x14\x38\xef\x92\x5d\x1b\x7d\x5e\x2f\x76\x16\x77\xc6\xca\x0f\x69\xfd\xd4\x3b\x1b\x38\x5d\xc5\x3c\x33\x5f\x94\x67\xa2\x6e\x5a\x39\x8c\x6a\xee\x03\x78\x6f\x2a\x92\x97\xd1\xbe\xde\xd0\xb1\x5e\xd3\x37\x9c\xcd\x55\xff\xec\x17\x81\xb8\x38\x33\xb8\x0b\x8f\xaf\xcc\x74\xfe\xb2\x08\x2a\xb9\xb6\x81\xbf\x91\x7e\x49\x07\xd3\xac\xb4\x7f\x87\x12\xb4\x80\xe5\x90\x7d\x50\x74\x10\x57\xe6\x4b\x6d\xeb\xae\xdd\xcc\xa9\x59\x8a\x08\x36\x0b\x0d\xe9\x28\x8d\x04\x5b\x8e\x67\x91\x8d\x72\xbc\x06\x06\x5a\x0a\x16\x41\xe5\x00\xe1\x8e\x35\xa8\x34\x0b\x7b\xb0\x07\x02\x6d\x74\x17\x46\x61\x92\x46\xe8\x22\x67\x99\x8a\xa7\x10\x28\x96\x79\x27\xa1\xfa\x45\x94\x07\xa2\xfa\xe1\x82\x09\xc1\xe6\xe1\x6f\x5c\x1f\x36\x33\x67\x6b\x54\x14\x81\xb9\x6e\x74\x9a\xe3\x0c\xe9\xcc\x0b\xeb\x4b\x6b\x1d\xc4\x1a\x0d\xc4\x61\xb4\xf8\x7c\x57\x65\xa3\x9d\x58\xa7\x9b\x50\xd5\x0b\xd8\xdc\x63\xcd\x73\x2e\x87\x4a\xf0\xe4\xcc\x57\xe0\x54\x0f\xa9\xd3\x0f\xd4\x8b\xd6\x0b\xd6\x4f\xf7\x8f\x69\xcf\x05\xaf\xb6\xbd\x5f\x57\xd7\x26\x82\xa8\x36\x62\x14\x58\x4d\xce\x39\xd4\xa3\x12\xf9\xac\x93\xff\xe5\x8b\xb5\x9d\x0a\x56\x57\xb9\x53\x6b\xe7\x7d\x4d\x10\x66\xef\xa6\x15\xdc\xe2\x6e\x5e\x39\xa0\xbc\x6a\xcd\x07\x6e\xaf\x09\x9d\xb0\xeb\x2e\xc7\xff\x5a\xe2\x5c\xbc\xa8\xa0\xec\x01\x6e\x20\xf1\x60\xb9\x58\x0a\x16\x8d\xa2\xb9\x8e\x50\xcc\x96\x4a\x43\xf7\x7f\x83\x42\x21\x96\x06\xd6\x08\xec\x84\x0a\x9c\x4e\x27\xbe\xb3\x8f\x1a\x60\xbd\x43\x01\x40\x20\x51\x71\x36\x5d\x9f\x42\x45\xee\xa2\x5c\x72\x05\xee\x9b\x7c\x87\x4f\x44\x8a\xbd\xe5\x54\x4e\xed\xe5\xf6\x54\xa9\xb0\x4a\x99\xab\xb1\x79\x3a\x1d\x1e\xfe\xa8\xe5\x32\x65\x48\xbc\x76\xdf\x85\xbe\xc8\x7d\xce\x6d\x66\x63\xdc\xf5\xe5\x5c\xe6\x9e\x35\x89\x87\x48\x76\x8e\x94\xfa\xc6\xb2\x6c\xa7\xc3\x6a\xaf\xff\x62\x14\x90\x31\x2a\xbb\xe4\xf3\x10\x24\xc4\x43\x30\x00\x63\xba\x5a\x21\xe0\xc7\x85\x56\x99\x02\x45\x3d\x87\x0c\xb5\x1a\x5c\x5f\x8e\x95\x7c\x15\x44\xe6\x4b\x9d\x19\x8f\x09\x64\xc6\xe2\xe5\x1e\x23\xbd\x92\x9b\xd3\x37\x0e\xf9\x93\x4b\x4e\x26\x55\xde\x50\x7f\x39\xba\x20\xf4\x68\x81\xc6\x57\x98\x3f\x99\x92\xcf\x78\x72\xa4\x4b\xde\xcd\x17\x5e\x62\xaa\xed\x14\xee\xe7\x0b\x7d\xa3\x57\x58\x89\xa0\xd0\x3b\xe6\xcf\xad\x12\x54\x99\xcc\x9a\xd0\x36\x62\xc8\x47\x07\xb4\x5b\x26\x56\x4f\xfd\x87\xd5\xaa\xdd\x87\xb4\xeb\xa7\x61\x97\xeb\x63\x32\x16\x12\xda\xa2\x9d\x4e\x4c\xbb\x36\x11\x7b\xda\xee\x01\xb8\x8e\x37\xa5\xdd\x2b\x7c\x03\xe9\xc3\xd2\xd4\x05\x6f\xc0\x63\x70\xeb\x5d\x86\xab\x1b\xf7\xc7\xbc\x08\x37\x9a\x65\xb3\x6d\x2f\x88\xb6\x51\x76\xf7\xd5\xba\xb0\xec\x95\xba\xe8\x26\x90\x41\xe4\x7c\x7c\x52\x0c\x63\x96\x0e\x6f\xaf\xf0\x4d\x12\x55\x54\xee\x7a\xf8\x4d\xe3\x93\x5b\x45\x4d\x13\x0c\x8d\xc2\xcb\x36\x6a\xe8\xa4\x8a\x6c\x58\x40\x0d\xd0\xa8\xa8\x9b\xc0\xac\x61\x82\x1f\xdf\x56\xc2\xf8\x44\x72\x72\x91\xe1\x33\x49\x1f\x08\xbd\x7c\x2b\xeb\x6b\xeb\x02\xe0\x80\x5a\x9e\x20\x0c\xb7\x09\xd3\x96\xd7\x66\xeb\x16\x8a\x1a\x45\x08\x44\x13\x80\x29\xaa\x3b\x83\x4b\x10\x7a\xc0\x9b\xc1\xb0\x65\x1b\x40\x94\x8e\x7d\xf3\x09\xd2\xf7\xe1\x7f\xd3\xd3\xf4\x2b\x11\x33\x89\x6c\x94\xf5\x45\xbb\x57\x02\xad\xa9\x05\x83\xe0\xa9\x4d\x52\xa8\x60\x97\x93\x6a\x3e\x42\xa6\x3f\x98\xc1\xdb\xb7\x48\xbf\xb5\xc3\x31\xaf\xcb\xb8\xae\xdc\xa8\x24\xdf\x93\xcf\x38\x53\x8d\x83\x58\xed\x38\x50\x14\x23\xd0\xe9\xd0\x98\x78\xf9\xfa\x99\x42\x7f\x34\x26\x10\x01\x88\x8b\x78\x7b\x4c\x37\xf7\xb0\xd8\xdd\xf8\x2e\x9f\xe1\x6c\x7a\xa4\x84\x98\x3d\xc2\xfb\xb6\x11\x9e\xc1\x53\xd6\xc4\xa7\x89\xf1\xfe\x2c\xc8\xce\xcb\x41\x1b\x44\x77\x3a\xdf\xc9\x1e\xe1\x7d\x47\x08\x6f\x81\xf9\x18\x53\x81\x2e\xb1\xfc\xba\x9c\xd3\x7c\x8f\xf8\x7e\x47\xc4\xf7\x78\x46\x8f\x07\x74\x93\xd8\xa9\xce\x59\x8d\xa5\xc3\x11\x44\x69\x0f\xe6\x69\xef\x38\x7f\xce\x8f\xf3\xc3\x43\xc0\xf4\x0d\xb1\xc1\x6a\x2a\xf9\xb7\x41\x6c\x04\x9a\x8d\xa5\xde\x16\x00\x1e\x1e\xa2\x1f\x53\xeb\x33\xd6\xe9\xc4\x28\xed\x19\x93\x07\x7b\x72\xf2\x94\xad\xc3\xbf\x0c\xf6\x7b\xbd\xc7\xc1\xc0\xaa\xa1\x2f\x8e\x83\xfb\xbd\xde\x17\xc3\xc2\x12\xd6\xf7\x8a\x87\xd5\x3c\x7d\x49\x4c\xac\x27\xde\xe2\x62\xb7\xd5\x86\x78\xd4\x35\x1b\x34\x80\x91\x4d\xa5\x5c\x9b\x8b\x4c\x33\xc6\x78\x4c\xba\x9f\x9f\xf4\x7b\xbd\xff\x21\x42\xb8\xda\xe1\x50\x83\xb0\x6f\x3f\x27\x39\xbc\x49\x48\xf7\xa6\xf8\x0a\xa8\xbb\x6e\xcb\xbd\x77\x33\xf8\xa2\x6e\x06\xd6\xbb\x16\xd2\x54\x4e\xd5\x01\x4f\x4b\x2f\x6d\xe5\x1c\x5d\x06\xad\xa6\x03\x9b\xcc\xc8\x86\x72\xc6\x77\x47\x24\xbd\xd7\xdc\xfe\x71\xc3\x04\x63\xdf\xa2\xa2\x4b\xf2\xd7\x84\x8b\x1b\x49\x26\xab\x1f\xd8\x35\x35\xbf\xb0\x3e\xb4\xf8\xba\x9b\x8f\x67\x58\x36\xe3\x19\x05\x54\x2a\x41\xec\x05\xb5\x86\x91\xb5\x07\x26\xf4\xb2\xf5\x89\xa0\x56\xdd\x1e\xf3\x1e\x87\x89\x35\x4c\xc5\x76\xd7\x95\x5f\x3c\xb4\x54\x9d\x53\xab\xe4\xf6\x2f\xb1\x92\x43\xf7\x89\xbd\x29\x39\x16\x6c\x91\xf4\x8e\x33\x3c\x15\x49\xef\x38\x72\xe4\xec\x30\xad\x5e\xc5\xbc\x3a\x3b\x03\x31\xee\x7e\x86\xb8\x7b\x03\x20\x39\x4c\x35\xb6\x4f\xa2\x43\x7e\x18\x2d\x3e\x1f\x1b\x1a\x16\x1d\x52\xf5\x18\x15\x65\xa7\xaa\x28\xe9\x71\x7b\xf6\x6f\xcd\x8e\x6d\xbc\xba\xde\xa5\xf1\xd7\x3b\x0b\x95\x1b\xe2\x50\x3c\x42\x12\x63\x9d\xcc\x12\x77\xc7\x79\x7e\x6f\xc9\x1e\x28\x8c\x55\xc9\x30\xba\xc6\x17\x57\x44\x72\xc6\xbf\xda\x1f\x73\xb9\x3b\x7f\x66\xbf\x45\x30\x3a\x8d\x46\x90\xa7\xc3\xe8\x48\x97\x3a\x8a\x60\x74\x34\xcf\xf5\x1f\xf6\x9b\xfa\xcb\x8e\xa2\x11\xa4\x69\x28\x6a\xa1\x8d\xe9\xda\xe9\xb8\xe8\xae\xf6\x87\xb9\x7b\x5a\xff\x45\x8f\xb9\x12\x0b\x48\xf2\x9a\x9a\xb5\x23\x83\x5a\xd4\xb3\x39\xce\xc8\x6f\x38\xc6\x20\xc1\x07\x64\x1a\xb3\x96\x64\x98\x5d\x48\x10\xc7\x14\xa2\x74\x4d\xb4\xb4\x98\x01\xc3\x28\x3a\xce\x3d\xb7\x9c\xfb\x32\x15\xc3\x7c\x74\x88\x24\xe0\x65\x05\x30\x19\x70\xf9\x05\x27\x4b\x15\x83\xae\x9e\xbf\xe4\x0e\x43\x84\x0d\xf0\xc0\x7d\x36\x09\x0f\xdf\x55\xae\x3f\xd6\x96\x3c\x45\xfe\xdb\x8f\xf2\x87\x3c\x9d\x4f\x5f\xa7\x79\xf0\xc3\xb3\xd7\xe9\x32\x04\xe7\xd5\xd9\x59\x9a\xad\x01\x25\xbf\x8d\xd7\x40\x93\xdf\xa6\xfe\x37\xf9\xc2\x7b\x4c\x71\x37\x5f\x2e\xd4\xbc\x3d\x7d\xed\x3d\x3c\x7b\x1d\x08\x90\xe7\x9d\x03\x60\x52\x7e\xcb\x56\x22\x00\xa9\x2e\x50\x37\xbb\xf0\x8b\x90\xb4\xdd\x0e\x16\x5a\x60\x9e\x2f\xb0\xca\x81\x7f\xca\xc9\x25\xa1\x91\xe4\x83\xbc\x8e\x90\x03\xbd\x45\xdb\x6d\x5a\x6e\x5e\x64\xd9\x64\xec\xdf\x32\xeb\x3b\x55\x7b\xbc\xd5\xfd\x32\xd7\xd7\xac\xae\x62\x5e\xab\x38\xa4\xa3\x74\xa2\xee\x4d\xca\x32\xcb\x40\x99\x59\xad\x4c\xe6\x8b\x4a\x91\xc2\x96\x7e\xbe\xf3\xc5\x67\x85\x47\x23\xe0\x7c\x05\xd5\xbb\xc8\x83\x30\xae\x40\x28\x33\x44\xc1\xc8\xab\x36\x51\x85\x60\x54\xa9\x39\xdd\xa4\xe6\x2c\x54\x73\x52\xa9\x39\x47\x82\x93\xcf\x71\x1f\xb6\x7a\xea\x5f\x1f\x56\x72\xb6\xc3\x56\xa5\xfb\xc0\x07\x34\x0b\x00\x7a\x36\x29\x41\x39\x80\xcd\xc7\x3b\x9a\xd0\xa5\x64\x43\x95\x7d\xc9\x8c\x11\x36\x19\x2c\x13\x36\xc8\x13\x74\xe0\x6f\xe1\x85\x31\x23\x26\x83\x69\xc2\x06\xe3\x24\x3b\xa8\xed\xf7\x79\x88\xf4\xcc\x17\x2c\x97\x62\x7f\x20\x18\x47\xc6\xf2\x25\xc7\x47\xa8\xe1\x8d\xf9\x78\x46\x89\xe7\xe7\x19\x43\x13\xcc\x21\x4f\x6f\x5f\xbc\xfa\xf8\xf6\xf4\x9d\xca\xea\x5d\x1c\x98\xfe\xcf\xc4\x3c\xbb\x40\x3c\x7f\x72\x85\x6f\xae\x19\x9f\xe4\xf5\x5e\x13\xda\x12\x26\x9b\x18\xbf\x19\xf0\x54\xa8\x1b\x62\xc2\xdd\x0c\xdc\x0b\x01\x58\xa3\x34\xce\x96\x42\x39\x39\x6f\xd5\xa6\x8a\x1b\xd7\x68\x75\x63\x58\xc0\x06\x3e\xe2\x5d\x3d\xfe\x7b\x02\x6a\xde\xb1\x9e\x97\x58\x1c\xa9\x79\xd7\x51\x7e\x8e\x10\x9d\x1c\x2d\x73\x7c\x34\xc1\x78\x71\xa4\x32\x9e\x1e\x4d\x39\x9b\x1f\x29\xeb\xbd\xc7\xce\xa0\xa2\x3d\x37\x78\x8a\x87\xbd\x91\xbe\xfb\x7e\x9a\xa6\x2e\x52\xd0\x40\xa4\x78\xd8\x1f\x25\x31\x55\x7f\xa1\x7c\x7c\xea\x52\x1e\xdc\x8e\x97\x9c\x63\x2a\xfe\xa6\x1a\xe1\x2a\xc5\xea\x4d\x22\xe0\x32\xc7\xaf\x31\x5e\x9c\xc8\xa1\x25\x34\x18\xcc\xb5\x39\x5d\xf6\x2f\x5a\x2c\x30\xdd\x38\x4b\x51\x48\xa4\xdc\x34\xae\x18\x91\xe2\x9a\x0a\x2d\xc6\xd4\xff\xb4\x1a\x66\x6c\xf3\xe8\x4f\xf9\x82\x63\x34\xf9\x5d\x03\x3f\xed\x18\x53\xed\x81\x03\xff\x43\x84\xbd\x2a\x75\x94\xf7\x45\x8d\x26\x65\x40\x33\xfe\xd0\xa8\xd1\xbc\x19\xd6\x8c\xdf\x19\x35\x9a\x97\x31\xcd\xf8\x9d\x51\xa3\xf9\xf6\x91\xcc\x38\x18\xe8\xb1\xb9\xa8\xd1\x15\x26\xfb\x71\x82\x82\x31\x3b\xff\xbb\x06\x3b\x0f\x05\x7a\x2b\x7c\x86\xcb\x05\x66\x4f\x79\xb9\x3e\x3d\xa7\x0d\xa3\xe9\x70\x64\x89\x79\x99\x5b\x2b\x26\x60\x27\xa5\x8c\xc6\x43\x8a\x7f\x0e\xd0\xc9\x3c\x18\x7c\x0a\xf9\x1a\xb4\x7c\x2b\xb4\x37\x9e\x2d\xe9\xd5\x3e\x9e\xe2\x3e\x9e\xe2\x3e\x9e\xe2\x1f\x85\xb0\xfc\x11\x63\x2e\x2b\x34\x91\xb2\x75\xce\x07\xda\xb9\x14\x7d\x86\x44\xff\x1c\x63\x92\xf9\x91\x41\xbc\x7c\xce\x35\x8f\x70\x96\xd2\x98\xc3\x1e\x80\x28\xed\x95\x01\x99\x2d\xf2\x10\x40\xdd\x97\x59\x4d\x0a\x80\x6d\xb4\x5a\xb1\xe7\x7d\xb3\xe0\xc6\x39\x55\x23\xc6\x1e\x5c\xa6\x47\x7d\x98\x79\xd3\x40\x62\xf4\x84\x01\x70\x9c\x3f\x47\xc7\x20\x1b\x1e\x1e\x2e\x47\xa9\x30\x1b\x3c\x87\xf9\x61\xca\x9c\xce\x3a\xab\x84\x2e\xa9\xa2\xd7\xb8\xa1\x20\x57\xe1\x27\x9f\xba\xca\x2c\x56\x51\x28\xf9\xb0\x3f\x02\x05\xb8\xd7\x39\x6c\x3d\x32\xde\x2e\x63\xde\x1e\x1d\xef\xd1\xf1\x1e\x1d\x7f\xf3\xe8\xd8\x97\x28\x9a\x41\xea\xcd\xae\xac\x9e\x62\x0e\x06\x3c\x19\xf2\x11\xe8\x4e\x49\x26\xea\x28\xaa\x12\xd2\xb6\xcc\x72\x89\x95\x0d\xf4\x2e\xc8\x5f\xa3\xa5\x2f\x1c\x79\xf6\x6e\x34\xb8\xdc\x2d\xca\xf7\x5e\x16\xdf\xcb\xe2\x7b\x59\xfc\xfb\x97\xc5\x95\x24\x0e\x49\x4a\x25\xdf\xc5\x52\xea\xd2\x68\x94\x29\x37\xb4\x24\x6e\x1d\x4c\x63\xb6\x3b\xee\x5b\x0a\xfc\x78\xf2\x38\xa3\x02\x91\xba\x29\xe2\xda\x6a\xc6\x20\x86\x8e\xb3\xe5\xe4\xde\x8b\xbd\x3a\x49\xdb\xf3\x8b\xdf\x02\xbf\x48\x77\xc7\x58\x3b\xe0\x2a\x9f\x5f\xf4\xd1\xd5\x86\xfc\xe2\x4e\x88\xab\x3a\xd2\x6f\x9d\x5f\xa4\x8f\x86\x6d\x89\xce\x5b\xe8\x8c\xf2\x1a\xa9\xdc\x5e\xc4\x1c\x40\x1f\x81\x32\xff\xe0\xb7\xdb\x01\x61\xbb\xfa\x0a\x83\x01\x0e\xd9\xca\x72\xdf\xb0\x8d\xc4\x5c\x2e\x1b\x80\xed\x1e\x48\x34\xad\xd9\x11\xd5\x6a\xd4\xb7\x4e\xcd\xb0\xa1\x70\x2e\x24\x6d\xa8\x08\xe7\x42\x12\x09\xf1\x50\xe1\x7c\x82\xc7\x7b\xc1\xfc\x7b\x46\xb4\x7b\xc1\xfc\xdb\x42\xb4\xbf\x9b\x60\xfe\xb4\x96\x77\xc6\xd7\x5b\x9e\xcc\x17\xe2\x26\x26\xb2\x03\x24\xa5\x90\x5a\x3f\x71\x48\xd2\x77\xca\x78\x36\x26\x00\xb6\x49\xfe\x0e\xbd\x8b\x89\x5b\x10\x97\x9c\x46\xb9\x66\xa4\x7d\x00\xc9\xd1\x8e\x89\x86\xc7\x8f\x26\xa6\x4f\x38\x5b\xec\x31\xe2\x1e\x23\xee\x31\xe2\x1e\x23\xd6\x31\xa2\x95\xc2\x57\xab\x98\xa4\xc3\x11\x80\x36\xd1\x25\xdd\xcd\x53\x81\xb3\xc5\xa3\xe1\x35\x4c\x05\xdf\xc2\x08\x7b\x8f\xda\xf6\xa8\x6d\x8f\xda\xbe\x5b\xd4\xe6\xdf\xc2\xb4\xf8\xc0\x6c\x15\x83\x23\x62\x0e\x12\xbe\x0b\x42\xbb\xc2\x37\xf9\xa3\x21\x34\x7d\x47\x74\x74\x71\xb3\x9d\x52\x31\xd7\x46\xa2\x7b\xa5\xe2\x77\x88\xfe\xf6\x4a\xc5\x6f\x0b\xfd\x3d\xaa\x52\xb1\x62\xef\x08\x9f\x01\xc8\x52\x22\x79\x3b\x94\x92\x61\x7f\x04\xf3\x94\x0c\x9f\xda\xaa\x35\x1d\x62\xee\x02\x78\xd9\x37\x08\xa8\x48\xf0\x08\x22\x27\x0a\x57\x65\x65\x06\x56\xab\xea\x9b\x1c\x0c\x86\xca\xf6\xbb\x7e\x83\x8d\xc0\x20\xe0\x45\x8b\x42\xde\xb8\x28\x2e\x03\xdb\x63\xc8\x00\x08\xb9\xe5\x86\x74\xa6\xb6\x02\x44\xc1\x2a\x56\x69\x6a\x8b\x15\x30\xb7\x77\xf0\x74\x37\xb5\xa7\xae\xfd\xf2\x66\x5d\x3a\xfb\x1d\x73\xc2\xdf\x47\x0e\xf6\xec\xed\xf7\x8c\xdf\xf7\xec\xed\xb7\x85\xdf\xff\x70\x92\x7b\x15\x23\x53\xb0\x5a\xb5\x89\xc4\xca\xa4\xc4\x76\xbb\x23\xbb\x47\xe4\x7c\xe9\xa4\xc6\xf7\xee\x71\xdd\x1e\xd7\xed\x71\xdd\x9f\x12\xd7\x3d\xab\xe1\x3a\xc8\x52\x5e\x72\xb2\x0d\x94\x27\xd1\x9d\xbd\x47\x67\xa0\x2b\x71\xc9\xcb\x9b\x98\x42\xb2\x23\xe6\x93\xd5\x1f\x0f\xf3\x65\x72\xd9\x37\xf6\xe2\xdd\x63\xbe\x3d\xe6\xdb\x63\xbe\xef\x0c\xf3\xd5\xf0\xda\xdd\x26\x3d\x5e\xf8\x3b\x1b\x98\x80\xc6\x02\x80\x02\xc0\xe1\x08\x24\x78\x27\x9c\xa7\x91\xd0\x76\x48\x2f\x64\xca\x4e\x63\xa7\x8a\xad\xd9\xf0\x6c\x89\x15\x39\x9b\x1f\xed\xef\x77\xf6\xa8\x71\x8f\x1a\xff\x6c\xa8\xf1\x4b\xe5\x59\xda\xc2\x41\x30\x7c\x75\x24\x77\xc1\x89\x7f\x7d\x54\xc1\x67\x9b\xc5\xf8\xb0\x7f\x2f\x39\x5b\x2e\xf6\x02\xee\x1e\x97\xed\x71\xd9\x9f\x09\x97\x6d\xaa\xcc\x83\x2c\xbd\x2d\x4a\x8f\x98\x29\xe3\x27\x68\x3c\x0b\x99\x4c\xfb\x97\x1a\x14\x40\x9e\xb2\xa1\x18\x1d\xd4\x9d\x0e\x57\xab\x58\x1d\x52\xf9\x31\xe5\x00\x9a\xb3\xa5\x1c\x0b\x21\xdb\x05\xc5\x2a\x04\xf6\x88\x62\xf1\x0c\xe5\x47\x12\x43\x6c\x78\x13\x6e\xff\xea\x2a\x1b\xdf\x98\xdf\x51\x72\xd7\xe8\x4c\x8d\x20\xe2\x90\xae\xc3\xed\x44\xad\xa1\x89\x73\x89\xec\xd9\x34\x5b\xee\xc7\xa7\x9d\x8e\x4b\x3f\xee\x3e\x0e\x9f\x8e\x3a\x1d\xff\xe9\x80\xaa\x9c\x42\xc3\x11\x30\x77\x50\xea\xaa\x4c\x4e\x03\x90\xd0\x21\x01\x10\xa5\xed\x6a\x5e\x5d\x06\x31\x24\xce\xec\x1e\x95\x17\x81\xf6\xfa\x8e\xed\xa4\x38\x99\xa1\xfc\x1d\xfe\x2c\xb6\xbb\x1e\x0b\x6c\xf1\xb8\x07\x69\xd9\xd9\x32\x5a\x2d\x89\x45\xd7\x0f\x28\x05\x45\x57\xad\x08\x14\x5d\x3f\xa0\x54\x4d\xee\xd8\xee\xca\x4d\x6e\xbb\x05\xc7\x9f\x08\x5b\x6e\xea\xd9\x65\xff\x96\xd5\xfe\xf4\xdb\xcf\x4e\xc5\xef\xb1\x05\xdf\x9b\xb6\xbf\xe9\x6d\x48\xe8\xde\x85\x65\xcf\x29\xee\x39\xc5\x3d\xa7\xf8\x28\x2e\x2c\x87\x3b\x49\xdd\x84\x3e\x9e\x0b\x0b\xa1\x02\xf3\x1c\xef\x16\x72\xe7\xc1\x48\xf1\x2b\xb8\xca\x87\xd1\xee\x1e\x7b\xac\xc3\x1e\x7b\xdc\xb1\x35\xee\x68\x04\x40\x6c\xf1\xee\x1c\x2d\xee\x0c\x41\x53\x5e\x3d\x24\xc3\x51\x01\x40\x77\xc1\x16\x71\x38\x78\x8d\xed\xab\x48\x7b\xc7\xe2\xb9\xa5\xbf\xc7\xe2\xf0\xb0\xfc\x46\x25\xd5\x97\x88\x4b\x48\x11\xb7\x77\xcc\x9e\x13\x5b\x8e\x1d\x1e\x02\x49\x5b\x87\x6c\x94\xa6\x29\x06\xb7\x92\x66\x1f\x5c\x70\x8c\xae\x0a\x79\x12\xfa\xde\x16\x6b\xf7\x0d\xe1\x95\x98\x67\x27\xc6\xd0\xe1\x8f\x47\xc4\x58\x9f\xd8\xd5\xa3\x84\xc6\xd9\xa3\xab\x3d\xba\xfa\x96\xd0\xd5\x4e\xc7\x57\x1e\xa6\x75\x22\x9d\xd5\xf5\x7f\x38\xfb\xdb\xfb\x2e\xca\xb2\x83\xa6\x8d\xb4\x46\x88\x0a\x15\xa9\x38\x34\xdc\xc5\xa1\x81\x28\x65\x1a\xcb\xd5\xcd\x4b\xac\x59\xf4\xc0\x5b\xc9\x4f\x2a\x59\x34\xba\x07\x8f\x0a\x7e\xf3\x56\xf5\x38\xc6\xd0\xa4\x34\x3e\x28\xad\xdc\x7d\x73\xe5\xb5\x15\x91\xae\x58\x7c\x15\xc3\xe2\xff\x66\x64\x6f\x70\xb2\x97\x2f\xbf\x2f\x94\xbb\x97\x2f\xbf\x8e\x43\x70\x15\x1d\xd2\x52\xda\x8c\x60\x04\x20\xd1\xc9\xdf\x77\x33\x32\x96\x55\x1f\x8d\x21\xbb\xc2\x37\x7b\x53\x92\x3d\xd2\xdb\x23\xbd\x3d\xd2\x0b\xdb\x7b\x48\x04\xf1\x6d\xf8\x09\xcf\xd1\xde\x96\x64\x8f\xcc\xf6\xc8\x6c\x8f\xcc\xb6\x70\x0c\x53\xae\xba\x7e\x9c\x97\xbb\x65\x58\x6b\x62\x52\x80\xdd\x34\x6e\x73\xf4\x98\xe6\x22\x73\xb4\x8f\x70\xb5\x47\x87\x7b\x74\xb8\x47\x87\xdb\xa0\x43\x8d\x03\x77\x93\x5d\xe7\xe8\xf1\x02\x5d\x6d\x61\x08\xa7\x2d\x8c\x2e\xb1\x38\x22\x74\x82\x3f\x3f\x8a\x89\xd1\x3a\x04\x6b\x02\xd0\xea\x33\xbb\xab\x81\x11\x37\xb6\x8c\xc0\x4c\x6d\x35\x14\x04\x87\x58\xe7\xce\xb7\xe8\xec\xa8\x2f\x8f\x63\xbb\x7e\x45\xee\xa2\xca\xa7\x69\xca\x5c\x46\xf4\x17\x31\x07\x5d\xbd\xcf\x5f\x88\x98\x1c\xf6\x77\xda\x09\x72\x75\x1e\xe0\x39\xe3\xac\x8d\x78\xc8\xda\x88\xee\x64\x6d\xb4\xe5\xf6\x62\x3b\xc5\x87\x6c\x92\x4e\x70\x5b\xec\x34\x81\x8c\x2d\x52\x11\x9e\x40\x1e\x9c\x40\xe1\x0f\x96\x6f\x35\x58\xbd\xdc\x47\x68\x9f\xbc\x67\xcf\x2f\xec\xf9\x85\x3f\x27\xbf\x60\xb6\x52\x3d\xaa\xba\x3b\xb3\xf5\xdc\x67\x96\x5a\x08\x8f\x5a\xe0\x9d\x68\x85\xad\xfe\x40\x7a\x51\xcf\x6b\x46\xd7\xe6\x35\xdb\x8e\x12\xb0\x85\x6c\x05\x65\x7b\xdc\xb8\xc7\x8d\x7b\xdc\xf8\xa7\xc4\x8d\xeb\xf4\xe4\x81\x78\x6e\x7c\xc0\x03\x81\xd7\x5a\x78\x27\x26\xd0\xa2\x9e\x07\x0a\x55\x07\x1b\xe3\xba\x05\x59\x84\x52\xe8\x6f\xe2\xe9\x41\x16\x78\x23\xc1\xaa\x96\x32\xfe\x3e\xc1\xe9\x4b\x79\xbe\x8a\xae\xec\xe1\x81\x93\x27\xe4\xc9\x1c\xba\xa7\x91\x44\x4f\x5f\x47\x4e\xd5\x13\xb3\x5d\xe8\xd2\x05\x67\x73\x92\xe3\x6d\x82\x97\xae\x49\xa5\xa2\x02\x26\x88\x19\xa6\xea\x12\xa7\x92\x8f\xca\x33\xdd\xa9\x8b\xa1\xbd\xa0\x18\xda\x1b\x0d\xfc\x87\x64\xe8\x4e\x8b\x87\x44\x4a\x0b\xc8\x3a\xd4\xda\xd9\x83\x24\xed\x1d\x93\xe7\xe2\x98\xa8\xf3\x47\x46\x5e\x4b\xc4\x41\x0e\x47\x7b\x80\xc4\x1d\xac\x5e\x9a\xa6\x64\x20\xaa\x09\xb3\xa8\x1a\xab\xce\xeb\x62\xec\xbf\x77\x3a\x7f\xda\xc4\xea\x8d\x69\x39\xe5\x10\xab\x5d\xf4\x68\x3a\x8e\x2d\xbd\xae\xbe\x37\x3d\x07\x0c\x6b\x36\xee\x54\x66\xe8\xfd\xb0\x46\x99\x71\xb4\x9b\x32\xc3\x2e\xc3\x37\xad\xd0\xf8\xd7\x12\x2f\xbf\x3e\x22\xfa\x9a\x28\x85\xdf\x8d\x52\xb8\x45\x29\x7c\x0d\x4a\xd1\x66\x83\xde\x38\xee\xc5\x99\x71\xd3\x26\x91\xd7\x31\x4d\x01\x40\xd2\x7c\x79\x0f\xfe\xe2\x15\xfc\xc5\x03\xf8\x8b\x7d\x09\xfc\xa5\xd6\x5c\xa1\xad\x8d\xa3\x41\xf0\xdd\xe3\x39\x70\x44\x2f\xb7\xdb\x61\x2a\x37\x2b\x27\x79\x93\x0f\xd8\xc7\xe9\xfe\x0e\x64\xaa\x7d\x9c\xee\x6f\x4b\xa6\xfa\x3d\xe2\x74\xdb\x28\xdd\x65\x36\xd4\x61\x7f\x04\x51\x4a\x87\x4f\x47\x07\x28\x8d\x2e\x18\xcb\x30\x92\x02\x96\x41\x57\x72\xef\x9c\x4e\x55\x64\x6e\x64\xb2\x98\x0e\x95\x07\x20\x79\xce\x80\xed\xd6\x32\x45\x03\xd1\xcd\x04\x4e\xe4\xff\x30\x4b\xc9\xf1\x32\xce\x20\x03\xc7\xd9\xe1\x21\xc8\xf5\xd1\xca\xd4\x2e\x20\x3f\x96\xd5\xc6\xaa\xda\xa5\xaa\x76\x29\xe0\x34\x25\xc7\xe3\x78\x2a\xab\x4d\x8f\x8e\x6c\xb5\x69\xe9\xf5\x9c\xa6\x29\xeb\x74\x50\xa7\x63\x3e\x31\x00\xf3\x5d\xf0\xb4\xc2\x9c\x8f\x16\x42\x5b\x53\xa4\xbd\x3a\xeb\x7b\x46\xbd\x7b\x75\xd6\xb7\x85\x7a\xbf\xa5\xb0\xb2\xcc\xf2\xb4\xbb\x46\x93\xd5\xd5\x1f\x4d\x8a\xe6\x58\xdd\x6e\xee\x33\xc8\xec\xd1\xe3\x9e\x33\xfd\x36\xd1\xe3\x77\x95\x41\x26\x5f\xad\xe2\x5c\xd9\x9b\x3e\x24\x49\x4c\x7b\xa3\x24\x31\xed\x5d\xb2\xc4\xdc\x91\x24\x66\x37\x74\x2f\xab\x3c\x62\x8e\x18\x8e\x17\x78\x6f\xcb\xf2\x7d\x63\xf0\x3d\x83\xfb\x6d\x61\xf0\x3f\x9a\xed\x6b\x44\x55\x34\xa0\xa8\x5d\xd3\x2b\x48\x16\x97\x8c\x12\xbd\xa0\x5a\x29\x2b\xbb\x0c\x6f\x75\xef\x12\x5a\x80\x9a\x93\x80\xc3\x18\x64\xc7\x38\x1c\x1a\x5d\x3d\x22\x3b\xfc\x09\xf3\x7c\x2f\xff\xef\xd1\xe3\x1e\x3d\xee\xd1\x63\xc5\xed\xb3\xca\xba\x72\x30\xf0\x6e\x51\x6d\xdc\xa4\xae\xc1\x1f\x31\x48\x86\x7c\xb4\x1b\xbe\x53\x00\x1e\x0d\xe1\xe5\xb3\xe5\x74\x9a\xed\x11\xde\x1e\xe1\xed\x11\xde\x9f\x13\xe1\xc9\x96\x14\x04\x28\xa5\xfa\x18\xa7\xd8\xa1\x33\x60\x9a\x51\xad\x88\xd4\x17\xbe\xab\x8c\xa1\x00\x9d\x8e\x58\xad\x7e\x46\x62\xd6\xe5\x88\x4e\xd8\xfc\x98\xfc\xd8\x3f\x06\x3c\x55\xaf\xa6\x19\x93\x00\x62\xf0\x3f\xc8\xd1\x91\x64\x39\xf1\x90\x8c\xa0\xfc\x4f\xf5\x0b\xca\xff\x52\xea\xcc\x02\x76\xc1\x9b\x06\x8f\x7d\x21\x33\x69\x2f\xee\x93\xe7\x11\xe6\x02\x61\xb2\x4e\x27\x66\x29\x81\xa4\x91\xf8\x56\x4f\x3e\x03\x03\x1a\x33\x48\x40\x32\x64\xa3\x87\xd8\xa5\xa8\x85\x78\x8c\x90\x70\xc4\xc5\x6c\x63\xea\x7f\xba\x6b\x44\xb2\x7c\xc1\x31\x9a\xfc\xae\x47\x67\x47\xaa\xf4\xc0\x81\xff\x21\x10\x47\x49\x19\x4c\x4c\xbf\xb5\x24\x81\xec\xae\xe4\x35\x32\xe2\xf6\xaa\x5e\x18\xd2\xf3\x0e\x2a\xe4\x20\xf9\x02\xda\xdd\x81\x1e\x5b\xa2\xcf\x66\x51\x51\x5f\x3e\x12\x5a\x65\x5f\x25\xa6\xa2\x03\x8f\x6a\x7a\xd8\x92\x01\x85\x2c\x25\xd5\xe0\x74\x6c\xb5\x8a\x99\x52\xa8\xc6\x34\x65\xa6\xa4\x15\xde\xa1\x88\xc9\x6e\x72\xb9\x02\x93\xa2\x30\xb6\xcd\x83\xd8\x16\xf9\x78\x30\xdf\x0e\x0f\x32\x5e\xbf\xa3\xda\x73\xa9\x7b\x2e\x75\xcf\xa5\x7e\xd7\x5c\xea\x57\x49\xec\x85\x3f\x0b\x4c\x27\xf1\xad\xc4\x36\x4b\x81\x93\x26\x0b\x68\xf9\x5f\xa5\x1b\xd5\xc8\x14\x92\x54\xc4\xbc\xa2\x0f\x88\xd7\x73\xc3\x04\xac\x56\x55\x86\x90\x00\x75\x46\x53\x62\x39\xc5\x1c\x8b\x58\xcc\x48\x0e\x23\xb5\x12\x11\xa4\xcd\x2f\x12\xe9\xc9\x51\xe7\x11\xe4\x25\x87\xa9\x8d\x0d\xb8\xbb\x4b\xab\xcd\x8e\xae\x3a\x66\x54\x60\x2a\x22\x28\xf1\x7e\xd0\x11\x67\x93\xca\xba\x8c\x99\xa8\x49\x57\xf6\x27\xb6\xfd\xe5\x00\x24\x0f\x85\xe1\x8d\x10\x00\x28\x2b\x76\x4d\xbd\xa2\xd8\xdd\xd2\x56\xa0\xdd\xa2\x28\xef\x09\xc5\x9e\x50\xec\x09\xc5\x37\x49\x28\xb6\x0d\xed\xe2\x07\xb5\x32\x9c\x33\xdc\xed\xfa\x5e\x22\x9b\x47\xd3\xd5\x0a\x76\x79\x99\xed\xe8\x82\xa8\xeb\xfe\xb1\x9d\x10\x75\x1f\x7f\x07\x37\x44\x3b\x39\xfb\xd0\xfb\x7f\x46\xdc\xba\xc7\xac\xdb\x67\x0a\x69\xda\xc5\x9a\xad\x50\x86\x98\xf0\xe6\x54\xbb\xbd\x95\x96\x53\xc4\x38\x2a\x36\x73\xb8\x59\x67\x40\xd6\x55\x5e\x9a\xa7\x53\xd9\x16\x4f\xab\xbb\x59\x37\x70\xd4\x4f\xf5\x90\x0f\xe5\x0f\x3c\xe8\x25\xe2\xb0\x5f\xc4\xcc\xba\xbf\x89\x5a\x7c\xfe\x5c\x37\x0c\xd9\x90\x8f\x40\x11\xfc\xd4\xc6\xbb\xb9\x92\x69\xfc\xf1\x68\x74\x60\x49\x6b\xf8\x7f\xaf\x15\xde\x6b\x85\xf7\x5a\xe1\xbd\x56\x78\x9d\x56\xd8\xaa\x2c\x54\xde\x4d\xb9\x02\x63\x24\xaa\x2a\xe0\x40\xc2\xa6\x8a\x27\x2e\xf7\xf0\xb1\x44\xbb\x3b\x5a\x73\x29\xcc\xf5\x68\x5a\x63\xd5\xf4\x3e\x84\xff\x5e\x17\xf0\x7d\xf1\xab\x7b\x5d\xc0\xa3\x2b\x8d\xef\xb6\x17\x08\x67\x07\xd0\xd8\x47\xe7\x07\x00\xbb\xab\x33\xaf\x89\x98\xb1\xe5\x76\xd1\x5c\x09\x1d\x67\xcb\x09\x6e\x44\x24\xd9\xbb\x67\x7d\x07\x18\x6f\xef\x9e\xf5\x6d\x61\xbc\x47\x75\xcf\x2a\x59\xb6\x76\xbb\x6e\xb0\xda\xe9\xc4\xf5\xac\x9d\x72\x13\xe8\xc6\x07\xbc\x19\x8c\x45\xa5\x82\x6f\x20\x85\x75\x91\x61\x4a\x73\x58\x28\xa5\x46\x0a\x31\x18\xf0\x84\x1b\x76\x33\xa6\xa0\x00\x70\x38\x02\x7e\xf0\x21\x83\xdb\xe4\xd1\xdf\x05\x6f\x9b\xea\x0f\x4e\xdc\xce\x2b\xa1\x31\x49\x2c\x86\xbd\x11\x14\xcd\xd0\x98\x9b\x39\x5a\x99\xf0\x52\x5b\x69\x67\xd1\x62\x81\xe9\x64\x93\x92\xe3\xd9\x92\x5e\x6d\x54\x90\xcd\x17\x68\x2c\x36\x2d\xba\x14\x77\x2a\x87\xcb\xa2\x54\x20\x42\x37\x1a\xd4\x04\x8f\x37\x2a\xc6\xd9\x62\x93\x72\x5a\x42\x51\x56\x20\x9b\x16\xde\xac\x24\x9d\x6c\x0a\x34\x93\xb8\x85\x6e\x52\xf4\x92\xb3\xe5\x62\x43\xb0\x33\x94\x1f\xe9\x80\xed\x9b\x95\x2d\x03\x9f\x6d\x92\x54\x76\xa3\x35\xf0\xb2\x65\x6f\x9e\xa8\x76\xd3\xb4\x91\x9b\xa7\x27\xda\x30\x6d\xc7\xa6\xf1\xef\xb7\x8a\xed\xbd\x4d\xac\xdb\x2d\x63\x45\x3e\x3c\x40\x64\x33\xe6\xdd\xc6\x31\xcd\x36\x0e\x4d\xb5\x79\x6c\x94\xad\xa2\x0a\x6c\xee\x91\xba\x85\x77\xd6\x16\x7e\x0d\x1b\x1b\xd9\x6e\x61\x85\xb6\xa9\x11\xc2\xd6\x57\x7a\x5f\xe2\x1e\xaf\xa6\x25\xde\x5c\xc2\x68\x5c\xf4\x41\x0a\x09\x64\x10\xc1\x1c\x2e\x61\x06\xc7\x70\x0a\x27\x70\x06\x17\x70\x0e\x3f\xc1\x1b\x78\x09\x2f\xe0\x39\xbc\x86\x27\xf0\x14\x9e\xc1\xcf\xf0\x05\xbc\x82\xef\xe1\x07\xf8\x11\xbe\x82\x3f\xc3\xff\x86\x6f\xe1\x6b\xf8\x0e\xfe\x04\xdf\xc0\xdf\xe0\xcb\x87\x5e\x1a\xae\xad\xf0\x42\x91\x4e\x4d\xe3\x23\x78\x8b\xe9\x72\xae\x39\xb8\xa4\xdd\x83\x97\x58\x04\x52\xe7\x3a\xa6\xa5\xb8\x0b\xf0\x2b\x49\x69\xb7\x82\xcb\x37\x83\xab\x09\xf3\x56\x90\xe9\xc6\x90\x97\x02\x6f\x05\x99\x6c\x08\x59\x93\xfd\xad\x40\xb3\x8d\x40\xbf\xc6\xe3\xad\xa0\xa2\xcd\xa0\x72\xb6\xd8\x0a\x6c\xbe\x11\xd8\x37\x8a\xad\x78\x79\xb3\x15\xe8\xe5\x16\xa0\xb7\x02\x9c\x6d\x08\x98\x4e\xb6\xec\xf1\x78\x33\xc0\x9a\x1d\xda\x0a\xf2\x74\x23\xc8\xff\x29\xb9\xa7\x2d\xfb\x3c\xd9\x08\xf2\x5f\x50\xfe\x0e\x7f\xde\xee\xf0\xcd\x36\x85\xfc\xde\x50\xe7\xad\xa0\x2f\x36\x82\xfe\x96\x6e\x77\x4a\xe6\x1b\x42\x35\x6c\xdf\x56\xb0\x3f\x6d\x08\x5b\x72\x89\x5b\x01\xbe\xd9\x08\xf0\xff\x61\x64\xbb\x3d\x77\xb9\x11\xd8\x9f\xd1\xb6\x3b\xee\x62\x53\xb8\x5b\x41\x3d\xdf\x08\xea\xd6\x9b\xf8\x7a\x23\xb0\xa7\x26\x1a\xf0\x56\xa0\x4f\x36\x03\x6d\xb8\xe7\xad\x40\x9f\x6e\x04\xfa\x3d\x59\xe0\x17\xaa\xe6\x56\xc0\xcf\x36\x06\xbe\x15\xd8\xcf\x9b\x81\xdd\x05\x57\xbc\xd8\x08\xf4\x7f\x49\xc6\x7f\x2b\xb8\x57\x1b\xc1\xfd\x20\xe5\x84\xad\xe0\xbe\xdf\x0c\xae\x12\x2b\xb6\x02\xfc\xc1\x03\xbc\x9e\x97\xfc\x60\x62\xeb\x6c\x05\xfa\xe3\x86\x7d\x96\x32\xcb\x56\x80\x5f\x6d\x08\x58\x89\x38\x5b\x41\xfe\x79\x23\xc8\x67\x5a\x22\xda\x0a\xf2\x7f\x6f\x06\x59\x0a\x50\x5b\xc1\x7d\xbb\x19\x5c\xc6\xb7\x5d\xbd\xd7\x1b\x01\xfe\x88\xb6\xa4\x4c\xef\x36\x03\xab\x64\xb3\x1d\x30\xd1\x4f\x5b\x80\xdf\x0a\xf0\x9b\x8d\x00\xff\x42\xb7\xed\xf0\x6f\x1b\xc1\xfd\x55\x0b\x96\x5b\x41\x7e\xe9\x41\xde\x48\xdd\xda\x08\x96\xbd\xe1\x75\xff\x0e\xfa\xe6\x4c\xe0\xa0\x25\x5a\x0b\x3f\x4f\x45\xa1\x0a\xac\xfb\xae\x3e\x5f\xae\xad\xff\x63\x6a\x0a\xac\xfb\x2e\xa7\x63\xe3\xc9\xf0\x92\x1c\x7c\xf9\x98\x8e\x0f\xb8\x5f\xf5\xef\x10\x20\xd5\xda\x77\x92\xf2\x03\xda\xe9\xc4\xd6\x48\xee\x45\x8c\x41\x77\x4a\xe8\x24\x94\x69\xb8\x16\x8a\x5e\x41\x29\x00\x00\x15\x75\xbf\x82\x60\xad\x55\x48\xe9\x07\xf9\x63\xda\x1b\xb0\x84\x2e\xb3\x6c\x9b\xb9\x74\x57\xa9\x5f\x6f\x5b\x35\xa7\xc7\xcf\x14\x82\xbb\xb6\x0b\xab\x95\xba\x9f\x53\x82\x38\xbc\x2f\xde\xff\x8f\xfd\x01\x3f\xea\x27\x3d\x00\x49\xda\xf7\xe3\xfe\x1f\xf5\xc3\xc9\x44\xac\x41\x90\x4a\xe1\xbc\xcd\x04\xd9\x6d\xf3\x98\x13\xe4\x62\x16\xec\x9e\x25\xd4\xde\xd6\xff\x9f\xb3\xd3\x77\x5d\x7d\xd9\x4a\xa6\x37\xda\xbc\xa9\xf6\x4e\xd8\x4b\x2b\x92\xab\x54\x13\xe6\x42\xb2\xfa\x4e\x40\xbc\xed\xbc\x69\xed\xf3\x23\xef\x2c\x63\xa7\xc7\xdc\x4d\x70\xc5\x75\x0d\x83\xd5\x2a\xb2\xb7\xa3\x81\xaf\x5b\x8e\xd0\xa6\xc8\xd8\x12\x0f\x99\xce\x3d\x02\x22\x5a\x97\xe4\xa2\xd3\x69\x98\x2f\xef\x98\xb5\xe3\xb6\x08\xe4\xc3\xaa\x4d\xab\x4a\xa8\x01\x3a\x9d\xbb\x8a\x28\x83\x04\x65\x8d\xbb\x66\x0d\x96\x02\x4f\x8e\x72\x71\x93\xe1\x27\xd5\xc7\xaf\xb5\xc1\x0e\x34\x82\x32\xd5\xae\xf0\x4d\xde\xb0\x28\x29\x2f\xb4\x6f\x0b\x48\xd3\xde\x31\x7d\x2e\xcc\xf4\x1d\xd3\xc3\x43\xc0\x87\x62\x48\x47\xa3\xd4\x0f\xaa\x29\xdf\x38\xac\xcd\x0b\x6d\x8d\x73\x8b\x28\x99\x23\x09\xfa\xad\xba\x70\x27\x8c\xbe\x62\x4b\x2a\x24\x23\x71\xc1\x3e\xbf\xc9\xf0\x67\xef\xa7\xd2\x1f\x99\xe7\x53\x3e\x21\x14\x65\xee\xd5\x98\x65\xcb\x79\x59\x79\x6a\x6a\x4e\x75\xb5\x6b\xfb\xfb\x3d\xcb\x89\x20\x9f\xb0\x7d\x3e\x9b\x71\x42\xaf\xec\xd3\x3b\x7c\x89\xfc\xaf\xa7\x7c\x82\xb9\x62\x6a\x38\x99\x7c\xd0\x50\xe4\xcf\x57\xaa\x31\x55\x8a\x51\xf1\x2b\x26\x97\x33\xd5\x6a\x46\x28\x56\xd6\x0f\xf6\xe1\x2f\xee\x13\x5b\xa0\x31\x11\x37\xea\xa7\x85\xca\xf8\x62\x86\x68\x2e\x7f\x0a\x74\x71\x46\x7e\x53\x0d\x5f\x93\x09\xbb\x56\x2f\x7f\x7b\x2b\xc9\x9d\xfa\xc5\xd8\x5c\x35\x47\xb2\xec\xb4\x84\x94\x0b\xb6\xa8\x3c\x72\x76\x85\x5f\xa3\x7c\xc6\xa6\xd3\x1c\x8b\xf2\x5d\xa3\xd0\xaf\x64\x22\x66\x72\xb9\x8d\x29\xfb\x30\xfa\x15\x5f\x5c\x11\x11\xc1\x68\x2e\x0f\xf3\xcf\xec\xb7\x08\x46\xa7\xd1\xe8\xa0\x6a\xe6\x6a\xa9\x8a\x24\xc6\xd5\x90\x80\x0e\x75\x37\x0c\x60\xaa\x2e\xae\x2e\xbd\x66\x14\x19\x63\x17\xe1\xae\xe8\xf3\x77\xe8\x5d\x2c\x71\x70\x4f\xfb\x00\xd0\xee\x0c\xe5\xa7\xd7\xb4\xdc\xb5\xa0\xd3\xa1\x43\x3c\x1a\x44\xd1\xa1\x48\x9a\xd6\x34\x42\xd9\xbb\x88\xae\xe0\x64\x1e\x03\x00\xf9\x61\xb4\xf8\x1c\x81\x42\xa2\xf1\xa1\x18\x81\x70\x88\x6f\x0e\x06\x92\x7f\x30\xd4\xc0\x18\xda\x4c\x50\x3e\xc3\x9c\xfc\x86\x63\x01\x0e\xa3\x24\x3a\xe4\x45\xd0\x9e\xb6\x54\xe6\x2f\xb3\xac\x9d\xa6\x58\x16\xfb\x6f\x46\x68\x1c\x1d\x47\xa0\x10\x31\x05\xdd\x29\xe3\x27\x68\x3c\xab\x56\x23\x81\xd7\x02\xdc\xd2\x61\x98\x57\x3c\x14\xdd\xf1\x0c\xf1\x17\x22\xee\x81\xae\x60\xbf\x2c\x16\x98\xbf\x42\x39\x8e\xc1\xa1\xe8\xe6\xcb\x0b\x3d\x15\x71\x5f\x0f\x16\x8c\x52\x39\x4f\x05\x50\xb6\x0e\xca\xa8\xea\x00\x3b\x7f\xdd\x33\x89\x3f\xd2\x18\xa5\x4d\xc3\xb7\xe1\xe8\x40\x2d\x6e\xb0\x6f\xc6\xcc\x8a\xc5\x6a\x32\x1d\x68\x9a\xf2\x72\xc4\xce\x80\xc5\xe2\xd3\x7e\xa7\x13\x1d\x47\xed\x34\xa5\x76\x00\xd4\xe5\xe8\x06\x9d\x4e\x4c\x0f\x53\x59\x0f\x56\x66\x7f\x26\xe6\xd9\x19\x9a\xe2\x98\x82\x02\x7a\x38\xdb\x62\x9e\x26\xde\x86\x22\xb5\xe6\x2f\x06\x25\x61\x85\x8b\x24\xde\xf1\xf0\x38\x1d\x55\x9c\x37\xec\x8c\x84\x62\x5b\x22\xc3\x3a\x29\xd7\xe7\x21\xd7\x7f\x05\xd0\xe6\x23\xee\x9e\x65\x61\xf6\xa6\x29\x4c\x54\x06\xa3\x7b\x51\xf9\x9d\x7c\xfc\x7a\x94\xff\xd5\x48\xa7\xa8\xee\x8d\x50\xff\xa9\xce\xd6\x35\xbe\x39\x9a\xe0\x31\x53\xd6\x51\x41\xab\x98\xff\x47\x57\xf0\x0a\x69\x06\xc0\xbd\xf0\xc6\xea\x60\x86\xde\xf9\x20\x32\x94\x9b\x9c\x6d\xa1\xfb\xcc\x75\x06\x90\xc4\x67\x29\x3d\x82\x66\x6c\xda\xcc\x9b\x4b\x2c\x3c\x1c\xa3\x0d\xc0\x72\x9b\xaa\xe5\xae\x32\x12\x8c\xf2\x66\x4c\x69\x13\x31\x94\x47\x37\x08\xe2\x35\xce\xc7\x9c\x2c\x04\xd3\x24\xb5\x5b\x0a\xd1\x52\xf2\x81\xfa\xa4\x99\x3d\xa5\xe4\x21\x47\x39\xab\x08\xb9\x94\x28\xfa\xc7\xe2\x79\xfd\x50\x1c\x8b\xc3\x43\x3b\x7e\x8d\x9f\xca\x93\x20\x7c\x8e\x46\x28\x8e\x46\xfc\xdb\xd3\x01\x31\xd3\x12\x73\x00\xdb\xbd\x35\x88\x00\xe9\x99\x97\x58\xa0\x00\x20\xb9\x67\x84\xf9\x20\xb4\x33\x09\xce\x63\x0c\xef\xab\x1a\x73\x00\x12\xaf\x4f\x6b\x3a\xb4\x6e\xeb\x8b\xfb\x1a\x88\x39\x14\x0a\x93\x15\xce\xfe\xd5\xf7\xbc\xa8\x78\x4b\x88\x16\xa1\x2d\x1c\x1c\x8c\x6e\xcb\x9c\x2d\x0e\xab\x2a\x91\x31\xa3\x53\x72\xb9\x74\xcf\xd7\x9c\x08\xf3\xbb\x00\x89\xc4\xa5\x29\x87\x5e\xbb\xf9\xde\x6e\xf7\xdb\xb1\xdb\x5d\xfe\x69\xec\x76\x97\xdf\x85\xdd\xee\xf2\xd1\xec\x76\x33\x4f\x0e\xcd\xd2\x40\xb8\x16\xeb\x1c\x16\xe5\xea\x47\xfd\x83\x1b\x4c\x20\x13\x42\xcb\x6e\xc3\x50\x32\x83\x16\xae\xca\x9c\xb5\xe6\x2a\xdb\x2a\x4d\x53\xf7\xbe\x6d\x7f\x97\x1b\x78\x60\xfb\x96\xb8\x06\x41\xc5\x3b\x6d\xec\x29\x1f\x9a\x4d\x7a\x48\x6d\x5a\x1a\xe6\x06\xf4\x16\x81\xaa\x5d\x42\x89\x20\x28\x23\xbf\x61\x3e\xa8\x3c\xe9\xc3\x64\x62\x34\x26\xc1\xba\x97\x58\x0c\xd4\xff\xd5\xb2\x58\x23\x9a\x81\xf9\x6b\xbd\x06\xbd\xb4\xa4\xe3\x58\xd4\x1c\xf9\x1b\x9a\x95\x4c\x8b\x21\x86\xdd\xef\x74\xc6\x31\xee\x2e\x30\x9f\x32\x3e\x97\xcc\x37\x18\xa8\x94\xa7\x02\xe5\x57\x20\x2e\x3d\x13\xdd\x44\x4c\x62\x4f\x3b\xa1\xcb\x29\x29\x16\xf8\xbb\x74\x56\x21\x01\x06\xad\x60\x2a\xb8\xa2\x9a\x20\x98\x61\xd3\x12\xfa\x3c\x16\xeb\x42\x64\xb4\x4d\xaa\xd8\x21\x1d\xc5\x92\xf2\xd0\x51\x4c\x40\x01\xe4\xb1\x76\x4d\x2f\x4a\x61\xa0\xa1\x1b\xe9\x07\x75\x23\x7d\x9f\x93\xe8\x7b\xba\x11\xa3\x7e\x31\x5c\xdc\xaf\x44\xcc\xde\xab\x94\xba\xc0\x27\xde\x90\x42\xa2\x1b\x44\xcd\x06\x9f\x05\x1b\x7c\xe6\x37\xf8\x6c\x94\x0c\x47\x70\x99\xe6\x31\x82\x7d\x00\xb3\x74\x29\x87\x3d\x4e\x89\xbf\x65\xe0\x34\x25\x7a\xcd\xed\x42\x4f\x70\x86\x05\x6e\x55\x4b\xb9\x97\xaa\x28\x94\xa2\x0e\x8b\x6f\x0b\xc8\x01\xcc\x00\xc4\xf6\x91\x00\x78\x5b\xc0\x5b\xaf\x66\x32\x86\x7a\x47\x4d\x25\xfb\x66\x06\xb5\x93\x37\xe5\xda\x0a\x92\x05\x56\x99\x72\x77\x31\x2e\xc3\x5d\x4c\x95\xe5\xe8\x47\xbb\xdd\x52\xdc\xbd\xc2\x78\xf1\x13\x92\x58\xde\x7f\x3b\xe1\x6c\xe1\x3f\x73\x9c\x0b\xc4\x15\xc3\xe2\xbf\x16\xde\x6f\x0f\x76\x03\xac\x07\xb1\x09\xcc\xc0\xf1\xcd\xfb\xe7\xe9\x22\x9e\x82\x03\xf3\x61\xae\xde\x7d\x92\xef\xe0\xad\x57\x59\x6b\xaa\x9a\xf0\x3e\xa9\xf2\x37\xba\xbc\x6c\xd7\x16\x74\x7d\xb8\x51\x25\x2e\x75\x89\xb2\xab\xb6\x5c\xad\xf3\x97\xaa\xf4\x85\x2e\x6d\x86\x69\x8b\xfa\xa3\xbe\x50\xe5\xce\xd3\x45\x3c\xb1\x7d\xd7\x93\x73\xae\x3e\x5c\xcb\x0f\x9b\x0c\x40\x57\xba\x56\x95\x4e\x74\xa5\xd0\x28\x74\xb1\x13\x55\xec\x54\x17\xbb\x6f\x28\xba\xca\xa9\xaa\x72\xa6\xab\xac\x1f\x8f\x2e\x7c\xb6\xb1\x18\xe8\x89\x67\x5b\xca\x82\x7b\x57\xb6\xef\x8f\x25\xde\xbb\xb2\x7d\x5b\x2c\xf1\x57\x77\x65\xfb\x32\xce\xbb\x2e\x33\xbe\xc7\x4f\x7c\xc0\xff\x5a\x12\x8e\x27\x4d\xbe\x42\xca\xe3\x8e\xb3\x60\x29\x8f\x89\x76\xe8\x85\x28\xa5\x3e\xcd\xaf\xf1\x03\x95\x6f\xb5\x30\x87\x71\x14\x59\xb7\x37\x06\xa3\xae\x44\x7a\x67\xcb\xf1\x18\xe7\xf9\x74\x99\x45\x00\xc6\x8d\xcb\xa5\xf2\x02\x44\xc7\x4f\xbc\xb3\xbe\xe3\x41\xf1\xc0\xbf\x38\x89\x34\x5e\x05\x09\x1a\x20\x7d\x66\x24\x2c\xc7\x57\x02\xa0\x87\xba\x49\xa2\x7c\x87\xbb\x9f\x1c\x5d\x2c\xa7\x53\xcc\x8f\x16\x2c\x23\xe3\x9d\x02\xf0\x6e\x8b\x8c\x79\x20\x86\xd5\x3e\x4a\xd6\xef\x1e\x75\xe0\x9b\x0d\xfc\xf3\xc7\xc3\x58\x9c\x2d\x5e\x2e\xc5\x5f\x1d\xd7\xf5\x5e\x9d\x2d\xb9\xf2\x72\x5a\xb2\x53\x7a\xc9\x08\xbd\x94\xec\x55\xee\x3e\xc9\x4a\xca\xb0\x73\x52\x7d\xef\xf1\x62\xf6\x65\x25\x8c\x41\xdd\xa8\xe4\x18\x77\xd1\x58\x90\x4f\xaa\xc6\x5b\xb3\x12\x56\x8a\x7a\x8e\xbb\x73\xf4\xf9\x55\x79\xfc\x8f\xad\x24\x8e\xbb\xff\x72\x8d\x97\xb5\xf2\x19\x99\x8a\x58\x6d\xb9\xb6\x00\x17\x1c\xa3\xab\x83\x30\x7c\xc5\xaa\x08\x50\x14\x15\x9d\x7b\xa9\x87\xa8\xb5\x7b\x14\x6e\xcf\xdc\x06\xdd\x35\x84\x42\x63\xf1\x5b\xae\xf1\x7d\xfe\x0b\xbd\x60\x12\x6f\x4c\x3c\xe8\xea\x76\x73\x3c\xc3\x72\x71\x2a\x5a\x11\xf9\x5f\x21\xa5\xa4\x77\xf8\xb3\x78\xaf\x25\xf5\x33\x81\xc4\x32\x0f\x29\x4f\xe4\x00\x7e\xec\x0d\xa2\x5c\xa2\x66\x3c\x89\x92\xc8\x2c\x46\x54\x14\x07\xc1\x95\x61\xfa\x82\x2d\xbd\xd5\x0b\xfd\x01\xa3\x9c\xd1\x24\x22\xa2\x75\x81\x33\x46\x2f\x73\x79\x0e\x50\xeb\x07\xb9\xd8\x3f\xb4\x64\xcd\x96\x98\x21\xd1\xba\x46\x79\x0b\x65\xf2\x24\xdd\xb4\xf8\x92\x52\x89\x94\xd6\x8f\x00\xe2\x6e\xbe\x90\x18\xa7\x32\x3f\xb1\x8e\xaf\xeb\x35\x0c\x83\x93\x0c\x7b\xe1\xf7\xf6\x9c\x3c\x64\x7e\x94\xab\xaf\x9a\x9c\xf0\x76\xb6\x39\xeb\xef\x9b\x1f\x4f\x16\xaa\x4f\x93\x55\xb0\xc4\x00\x4f\x5a\xe8\x12\x11\xba\x66\xa6\x6c\xac\xe7\xc0\x56\x82\x34\xbc\xdf\x0f\x6a\x97\x2d\x0a\x4f\x42\x7b\x49\x99\x5a\xe6\x43\xa5\x3c\x99\xa3\xcf\x4a\x6b\xe3\xb6\x6c\x75\x83\x4b\x0a\xbc\xd9\x22\x71\xd8\x83\xe4\x41\xb3\xae\xc1\x9d\x3b\xdf\x51\xb5\x00\x6b\x51\x4d\xae\x46\xb1\xbc\x77\x0d\x4a\xa1\xf1\x0f\xba\x53\x8f\xfa\xc0\x6d\xb5\x10\xba\x5d\x4a\x3e\xe8\x0e\xc6\x47\x77\x40\x19\x28\x19\x33\x26\x6b\xa8\x14\xbe\x8e\xf5\xaa\x4a\xa9\xfe\xc8\x59\x51\x85\x8a\x28\xe9\xf6\x6b\x84\x56\x9d\xa1\x7c\x96\xe2\x2e\x47\x63\x2c\x37\x77\x96\x9d\x61\x21\x32\x3c\xd1\x0f\x55\xda\xc0\xf1\x25\xa6\x9a\x82\x7e\x58\x52\x41\xe6\x72\x97\xf2\xab\x98\x01\x48\xd2\xb1\x31\xc7\xf8\x70\xf6\xb7\xf7\xdd\xf7\x7a\x02\x60\x84\xb2\x2c\x82\x19\x08\x1b\x7b\x04\xe0\x5d\xf3\xba\xed\x87\x22\x42\xc7\x20\xbf\x26\x52\x2a\x95\x6c\x13\xfe\x94\x0a\x25\xdd\x82\xdb\x31\xca\x71\xab\x97\x94\x26\x89\x17\x7c\xb9\x10\x71\x64\x54\xab\x10\x83\x03\x55\xa4\x9f\xc8\x3f\x11\xa6\x93\xa8\x2c\x9c\x0b\xb6\x88\x41\x51\x00\xc9\xe3\xea\xe1\xd6\x38\xc8\x5e\x9a\x96\x04\xdf\x92\x1e\x47\xf8\x8d\x31\x80\xbd\x11\x3d\x3c\xa4\x56\xdb\x88\x87\x74\xa4\x88\x1c\x5a\xad\xda\x68\xc8\xbb\x37\x04\x67\x13\xb9\x35\x34\x23\x32\xaa\x04\x4c\xd4\x38\xac\xdd\x87\xcb\x14\xd7\x6c\x5f\xca\xb0\x41\x96\xff\xee\x8e\x39\x46\x02\xc7\xb7\x53\x9a\x30\x88\xf8\x65\x9e\x28\x73\x8c\xee\xb9\x42\x71\x65\x1e\x8f\x7e\x3b\x4d\x79\xf7\x5c\x8a\x18\x19\x96\xc0\x24\x0a\xc0\x2a\x7f\x72\xbb\x07\x20\xf7\x6c\x0d\xf2\x01\x89\x97\x20\x59\x36\x1b\x77\xe4\x56\xed\x99\x02\x80\xc2\x50\x24\x7f\xb5\xd5\x2a\x9b\x6d\xa3\x16\xbb\xb2\x8f\x2c\x8e\x0e\xef\x0f\xb9\xef\x4c\x1d\xb5\x05\x2d\x36\xa9\xc2\x97\x9b\x34\x82\xa1\x9e\x55\xef\xde\x9b\x96\x43\x76\x00\x43\x61\x4d\x56\x42\xb7\x28\xfe\x75\xc2\x38\xc6\x5a\xbc\xab\x4b\x21\xcc\xae\x2e\x91\x1b\xde\x06\x9f\x53\xc3\x99\xe0\x29\xe6\x31\x38\x50\x7a\x6f\x06\x94\x79\x5e\x9c\x77\x39\xce\x59\xf6\x09\xc3\xdc\x64\x6d\x06\x66\x70\xed\x3e\xf4\xb6\x1a\xb8\x5d\xae\x56\xf1\x32\x6d\xf7\x20\x0a\x1b\xf4\xc8\x55\x2b\xd9\x60\x36\x2d\x1d\x92\x07\x16\x31\xc7\xe1\xeb\x8a\x21\xef\x96\x68\xc9\xec\xbd\x4e\x27\xf8\x3a\x56\xd3\x03\x0a\x38\x4e\xf3\xae\x41\x60\x5d\xa3\xce\x89\xb3\xf2\x1a\x23\x54\x37\xcd\xe0\xb8\x28\x0c\x32\x59\xde\x23\x20\x62\x3a\x46\x8b\x7c\x99\x21\x81\x27\x0a\xf3\x6d\x89\x1e\xbf\x9a\xa9\x8a\x87\xeb\xfc\x03\x67\x13\x40\x9c\xcf\xd1\x15\x7e\x6b\x24\x88\xa4\x21\x91\x2b\x22\x64\x98\x09\x27\x6f\xfb\x86\x3e\xaa\x80\x3c\xb0\xa0\x80\xa6\x9c\xb6\x2e\xf7\xa5\x6b\x7e\xcf\xe4\x05\x28\xca\x5e\xae\xde\xcb\xd5\x7b\xb9\x7a\xa7\x58\xfc\xb9\x89\xd7\xf0\x4a\x47\xb0\xaf\x39\x9c\x94\x3a\x3e\x6a\xd5\x7b\x7a\x03\xf5\x6b\xe6\x9e\x7c\x49\xbb\x17\x84\x4e\x74\x72\x6b\x5f\x59\x47\xa6\x31\x0b\x5e\x99\xab\xa0\xd2\x77\x19\x1d\xfa\x23\xc7\x92\xdc\xf4\x8e\xf3\xe7\xf8\x38\x57\xa3\xcf\x7d\xc3\xc3\x5c\xb1\x1a\xa4\xd3\x31\x97\x8b\xba\xd3\xcb\x94\x9a\xbc\x5e\x54\x0b\xd3\xa5\xe6\x6f\x09\x6d\x49\x67\x9b\x24\xbb\x63\x70\x15\x83\x22\x46\xa0\x8c\xc2\xa5\xcc\xc7\x83\x26\xe4\x1e\x5a\xb2\xb6\x8a\x47\x73\x36\x21\x53\x82\x79\x7e\x34\x27\x9f\xc9\x9a\xa4\x03\x5e\x45\xcb\xea\x07\x6d\xf7\xea\xca\xc4\xaf\xc0\xfe\x1a\x12\x7d\x66\xbb\x51\xd9\x02\x3a\x04\x72\xf7\xdc\x5d\xba\xbd\x47\x62\x66\xed\xf7\xca\xf9\xe4\xb0\x51\xa6\xb4\x55\x3d\x77\x23\x2c\x1c\xe3\x59\x67\xe5\xf4\x28\xb5\x98\x91\xe0\xee\xb9\xff\x0c\xab\x72\xa0\xfc\x5c\x7d\x53\x80\x02\x62\x67\x2c\xfa\xb3\x9d\xff\x2a\xe7\x7e\x5b\x81\x99\xf0\x80\xb2\x01\xd6\xe0\x26\xfd\x27\x3d\x58\x1d\x96\x22\x57\xf0\x7c\x86\xf2\x5f\x72\x3c\xb1\x4d\x25\xed\xbe\x7a\x77\x86\xc5\x4b\xbf\x11\xf3\xfa\x84\x4a\x4c\x32\x39\xf9\x24\x37\xab\x7c\xe9\xdf\x55\x36\x2f\x97\x89\x26\x96\x7c\xad\xc0\x29\x87\x6b\xae\x17\xef\xa8\xdd\x1c\x1f\x28\xa0\xba\xf0\xbc\xa3\x52\x50\xc9\x00\x0a\xe8\xdd\x80\xde\x53\x3b\x20\x37\x82\xa2\xbe\x84\x21\xa3\x1b\xc9\x1b\xd4\x27\x56\x72\x84\xfa\x43\x15\x40\x8a\x21\xd3\xaa\x7a\xf5\xb9\x80\x2a\x78\xd8\x7a\xb0\x95\x35\x6c\x54\xc6\x72\x61\xf0\x24\x14\xf6\xc6\x76\xaa\xb2\x84\xb6\x57\x05\x9c\xe0\x8b\xe5\xe5\xda\x7a\xea\xab\x2b\x5c\x34\x6c\x67\x1d\x8b\x14\xd8\x3b\xb2\x1a\x0e\xce\x47\xed\x74\xa4\x02\x32\xad\x17\xa8\xcf\x51\x9a\xf6\x9f\xf4\x24\xdf\xdc\xf8\xd2\x07\xbe\x49\x24\x8b\xc1\x6d\x11\x3a\x3f\xc1\xa8\xab\x61\xcc\xf5\xd5\xfd\xb1\xbc\xb3\x2c\xd2\x5e\xe5\xf2\x1a\xdc\x8a\xc3\xc3\x0a\xcd\x24\x8e\x96\x1e\xf3\xe7\xe4\xf8\xf0\x90\x5b\x32\xa6\x28\x26\xeb\x9e\xe7\x18\x53\xe5\x01\xf2\x5c\x74\x3a\xb1\xff\x22\x15\x50\x0a\x3a\xa0\xa8\x25\x72\xf0\xdd\x0b\xe9\x72\xfe\x41\x6b\x6a\x20\xd7\x8f\xfa\xcc\x40\x5a\x71\xcb\x89\xd4\xae\x8c\xc0\x31\x3d\x06\x65\xd6\x04\x0a\xa3\xb2\x7e\x04\x85\x9f\xc5\x4c\x7f\xd3\xc0\x54\x0a\x33\x1f\x20\x75\x00\x0b\xdf\xcc\xde\x1a\x30\x19\x1e\x3d\x43\xb9\xd5\x78\xe1\x89\x46\x57\xea\x32\x4c\x22\x1c\xff\x85\xe9\x80\x57\xc2\x5d\x97\x95\xef\x5e\x69\xd1\x19\x97\x6f\x14\x7f\xe5\xc3\x79\xa5\x90\x94\xff\xe6\x2d\x1d\x57\xaa\x19\x4e\x5f\xfb\x0f\xf5\xa0\x52\x2e\xff\x05\xd1\x49\x86\xdf\x2c\xb3\x29\xc9\x4c\x7b\xde\x7b\x1d\x85\x40\xbf\x26\x94\x54\x70\x8e\x3e\x5a\xf9\x72\x81\xb9\x2f\x5a\x38\x66\xc0\x64\x45\x0b\xe8\x28\xd3\xe1\x48\x7f\x0b\x28\xc0\xd2\xe1\xa8\x80\x1a\xdf\xbe\xc8\xb2\x86\xd6\x53\x28\xdf\x0d\x59\x37\xa4\x7c\xc3\x6b\x9b\x84\xbd\xb5\x9f\xca\x9c\x1b\xf0\x3e\xc0\x61\x45\xde\xba\x4f\x1e\x60\x1e\x0b\x50\xc0\x00\xe4\xa4\x6e\xe5\x2f\x19\x3d\xbb\xc3\x59\xca\x8f\xd9\x73\x7e\x48\x8f\x0f\x0f\x9d\xc4\x2f\x86\x6c\x74\x80\xa4\x78\x6b\x76\x92\x75\xe6\x94\xdb\x16\x29\x46\xb2\xb2\x77\xf5\xab\xf2\x68\x1c\xf5\x01\x44\x56\x52\xc7\x00\x2a\x66\xcd\x58\x63\x28\x73\xbe\x42\x98\x29\xd0\x26\xf9\x61\x0d\x68\x3d\xdf\x5f\x65\xb3\x47\x10\x37\x33\x02\xfa\x9b\x2f\x82\xbe\x84\xaa\x5e\x1d\xf6\xfd\x2a\xb8\x39\x0e\x5c\x1b\x87\xac\xb0\x76\xe6\xd5\x78\xb0\x29\x70\x3e\xcd\x96\xf9\x4c\xd5\xca\x63\x50\x40\xff\x39\x09\xba\xdd\xc8\xfd\x99\xf6\x8e\xc5\xf3\x7b\xf6\xcc\xf1\xe1\xa1\x00\xd8\x5c\x10\xad\x29\x3a\x14\x23\x3d\xaf\x07\x6b\x8f\x43\xd8\x79\x7a\x38\x82\x5a\xec\xf0\x50\x28\x2d\x51\x28\xd1\x28\xb4\xdd\x4f\xd3\x94\x74\x49\xfe\x86\x50\x92\xcf\xf0\xa4\xd3\x11\xba\x43\xc4\x71\xd4\xa2\x58\xdb\x3b\x33\x45\x3e\x1d\xeb\xda\x05\xd7\xa4\xd9\x53\x31\x6a\x34\x90\xf6\x8e\xc9\x06\x13\xe3\x04\x96\xb5\x13\x43\x24\x01\xf0\xf7\x71\x6c\x50\x8a\x7c\xf6\x8b\xc6\x4c\xe2\x5f\x26\xa9\x90\x76\xcd\x32\x1b\x95\xda\x3c\x92\xd5\x7d\x68\xe0\x05\xf3\x52\x7a\x08\x57\x7e\x77\x83\x43\x69\xef\x18\x3d\xbf\xe7\x24\x1f\x1f\x1e\xa2\xca\x72\x07\x8a\x0e\x91\x5d\x6e\x49\x10\x1b\xed\x57\xbc\x81\xee\x99\x44\xb9\x55\x1b\x73\x11\xc0\x88\x9a\xe7\x33\x56\x86\x07\x65\x8b\xbc\x4a\xc3\xaa\x28\xa0\x5e\xcc\x4d\x0a\xf7\x88\xaa\x3c\x63\xd8\x69\x73\xbb\xe7\x8c\xbe\x21\x54\x59\x8d\x54\x5c\xc9\x36\x82\x75\xd4\xb7\xba\x11\xdc\xd0\x04\x7b\x9d\x16\x7a\x8d\x2c\xbd\x53\xa8\x44\x6e\x71\x3a\x68\x94\xf1\xcc\x4a\x20\x06\x49\xfc\x34\x5c\xcc\x10\x4a\x55\xe6\x99\xd6\xb0\x34\x9b\x33\xb4\xb3\x8e\xb9\xf4\xd7\x92\x8e\xca\xef\xb6\x80\x94\xb4\x99\xdc\x9d\x02\x8a\x0a\x8e\x01\x5a\x48\xdd\xc2\x4e\x45\x29\x15\x35\x4b\x71\x8f\x90\xaa\xef\x5e\xd6\x6b\x26\x73\x39\x9d\x56\xde\xdd\x4a\x3a\xde\xde\xe3\x8c\x4c\xe3\x76\x4d\x17\x0c\x40\x50\x09\xf4\x0a\x51\xca\x44\x6b\x8c\xb2\xac\x85\x5a\xe3\x0c\xe5\x79\x0b\xe5\x2d\xe4\xd4\x7f\xd1\x4e\x31\xb4\x9d\x11\xa7\x2d\x9e\x7a\xef\x2a\xd1\xb4\x21\x0a\xf2\x68\x2e\xe8\x25\xbc\x25\xb9\xab\xa9\x5c\x95\x8d\xba\xae\x29\x52\x44\xcf\xcb\x82\xce\xd2\x49\x23\x2e\x3b\xb7\xef\xd0\x1c\xc3\xe8\xc7\x48\x1e\xe0\xf2\x00\x9c\xf2\x77\xf6\x00\x26\xb5\xcc\xb2\x72\x8e\xfc\x73\xe3\x9d\x5b\x00\x49\x6e\x39\xc4\x5a\xad\x0b\xc6\xb2\x38\x0a\xb7\xa0\xea\x99\xc6\xda\x7d\xb5\x19\xcb\x99\x41\xc1\xb9\x63\xe1\xb7\x8e\x3a\xb5\x70\x0c\x6e\x8d\x84\x89\x41\x01\x95\x9d\x9a\xd6\xc4\xbd\xc8\x73\x72\x49\x41\xcc\x4a\x85\x27\xa4\x4d\x39\x26\xe8\x31\xba\xfe\xea\x71\x93\x93\xf0\xc5\x15\xf0\x97\xd8\xd2\x07\x8b\x71\xd3\xa6\x54\xc9\x87\xee\x72\xbc\x3f\x2a\xa4\x70\x44\x26\x1a\x85\xa8\x3c\x6a\x97\x2c\xcd\xa1\xbe\x3f\x6c\x38\x1f\x8b\x07\xfb\x1b\xb4\x02\x2c\xcb\x7d\x11\x55\x80\x21\xdb\x2e\x92\x4a\x38\x8e\x4a\x5e\x9a\xde\x41\x0a\x95\x92\xb7\xf0\x44\x3f\xdc\x7d\x7f\xf2\xe1\xcd\xe9\x87\x9f\xcf\x3f\xfe\xfd\xfd\xc9\xf9\x4f\x6f\xdf\xfd\xf5\xe4\x75\xfd\xed\x2f\xef\xc2\xef\x5f\x9f\xbc\x79\xf1\xcb\x4f\x1f\xed\xb1\x5c\xf3\x35\x0a\xbd\x8d\xea\xa5\x5d\x1b\x51\xf0\x75\xa3\x7c\xb0\xb4\x2d\xeb\x5c\xc2\xab\x62\xa6\xe7\x65\x24\x4f\x85\x5e\x5e\x64\x34\xa7\x52\xd6\x44\x73\x5c\x04\x0d\x82\x6a\xd7\x31\xce\xf3\xdf\xe9\x30\xce\x96\x17\xf9\x98\x93\x0b\x3c\x49\xdb\x3d\x18\x6b\x0a\xae\x24\xcb\xe8\xdc\x46\x1d\x01\x60\x88\xad\x1a\x54\x78\x42\x55\x61\x8d\x84\xac\x9e\xdb\x28\xc2\x26\x24\x5f\xb0\x1c\xdb\xc7\x1a\x81\x4d\x7a\x50\x1e\x2e\xfd\x51\x5f\xd4\x8e\x60\xb5\x2b\x4a\x47\xc6\x97\xf4\x27\xa6\x2c\xf1\xa1\x56\x9a\xac\xd5\x9c\x55\x2c\x2c\x74\x9b\x86\x9d\x97\x78\x3f\x09\xaf\x23\x3c\xc7\x9f\x17\x78\x2c\xf2\x9f\x08\xbd\xc2\x93\xbf\x13\x9c\xa9\x76\xf5\x09\x54\x50\xb0\xa4\x18\x46\xe0\xcc\x3d\x49\xb8\xdd\x87\x24\x57\xe4\x44\xff\x74\xd2\x6e\x0d\x29\x22\x3a\x89\x23\xfb\x59\x23\xd3\x92\x37\x56\x58\xd1\x7d\x92\x80\x4a\xf6\x53\x83\xb5\x25\xf5\xd3\x1a\xc4\x4b\x99\x88\xab\x50\x15\xd9\x4d\xea\x86\xb4\x24\x7f\xcd\xd9\x62\x21\xd9\x8a\x5a\x97\xca\x66\xab\xfd\x83\x01\x0f\xfd\xba\x79\x6d\x09\x15\x0c\x94\x55\x92\xfc\x99\xa8\x2d\xe4\x35\x32\x30\xa6\x33\xde\x37\xdb\xca\x20\x9a\xda\xf6\xf4\xa7\xb2\x37\x83\xc8\x1a\xbe\x24\xd1\x35\x22\x42\xfe\x92\x48\xdb\xb5\x19\x18\xe3\xba\x71\x05\x86\x52\xef\x64\xa7\xd3\xae\x75\x40\x36\x76\xae\xfc\xed\x93\xbe\xe1\x7e\xd7\x69\xf5\x7c\xc9\xa1\x0e\x78\xb5\x8a\xeb\x9c\xb7\xdf\xb5\x76\xcf\x8a\x86\x56\xd6\x79\xcf\xd9\x18\xe3\x49\x2c\xba\x7f\x7f\x7b\xf2\xd3\xeb\x17\x2f\x7f\x3a\x39\x7f\x75\xfa\xee\xe3\xdb\x77\xbf\x9c\x40\xe3\x58\x67\xaa\x08\x4e\x2e\x2f\x31\x57\x47\x21\x8e\x72\x0b\x53\x09\x4b\x56\x91\x19\x62\x1f\x94\x68\x69\x85\xfc\x34\x8a\x0e\x15\x38\xc5\xb3\x5b\xb2\xa2\xc4\xbd\xa8\x34\x03\x8b\x60\x8c\x53\xe2\x72\xe1\x41\x91\x1e\xf5\xc1\x61\x4c\x57\xab\x28\x02\x87\x36\xd7\xbf\x38\xe4\xc0\xea\x4c\x9a\x77\xc1\x3b\x86\xfe\x89\xdc\x65\xbe\xb2\x8b\xc2\x9f\x17\x19\x19\x13\x91\xdd\x28\x2e\x0e\x4f\x22\x6d\x38\xb9\x66\x41\xcb\xcd\xd6\x54\x15\x54\x76\x8c\x4d\x8b\xcc\x53\x37\x1b\x9d\x8e\xfb\x59\x65\xa9\x56\xab\xe8\xf9\x92\x5e\x51\x76\x4d\x7f\x8c\x0e\x1a\x92\x95\x87\x90\x22\x18\xf9\x32\x53\xeb\x07\xc7\xa8\x71\x18\xfd\xa0\x06\x64\x4f\x47\xeb\x02\x8f\x91\xe4\x19\x22\x77\xcf\x84\x61\xd4\x6d\xbd\x61\xbc\x35\x67\x5c\xb2\xb7\x72\x2d\x14\xe2\x87\xad\x1c\xe3\xa4\x35\x13\x62\x91\x3c\x79\xd2\x60\x49\xe4\xa9\x78\x32\x61\xe3\xfc\x89\x62\x64\xc6\x25\xc5\x50\x57\xe5\x91\xd9\x1d\xfe\x71\x73\x7c\xa3\xdc\x7c\x67\x8c\xd1\xea\x06\x7c\xf1\xee\xd5\xc9\x4f\x50\x22\x43\x90\x18\x55\x86\x95\xbf\x14\x86\x7c\x26\xe9\xf3\xb9\xb2\xf8\xb0\x38\x58\x93\x8f\xfa\x31\x5d\x77\x16\x75\xdd\x80\xf9\x88\x53\xf6\xdf\x5c\xe0\x0f\xfa\x5e\xea\x75\xe5\x8b\x2a\x67\x6d\x33\xd4\xa9\x6d\x94\x6d\x2a\x0b\x55\x25\xb3\xbe\x01\x6b\x20\x95\x14\x37\xf4\x6d\xe0\xb7\x69\xae\xc9\x34\xcf\xad\xef\x0e\x93\xea\x77\x75\xc7\xaf\x5e\x29\x6a\x02\x40\x01\xc5\x0c\xd3\x84\xc4\x91\xfc\x1b\x01\xa8\xdc\x8a\xe4\xb3\xfa\x11\x01\x68\x8c\x4b\xe4\x2b\xf3\x33\x02\xd0\xcd\x76\x12\xf2\x40\x15\x90\xa6\x58\x2b\x75\x34\xc6\x3a\x3c\x84\xcd\xf3\x10\xf3\xf4\x99\xe1\xc5\xb4\x30\xd4\x30\x10\x04\x30\xf6\x6e\x29\xac\x36\xef\xe4\xdd\xdf\xba\xaf\x4f\x5e\xfe\xf2\x9f\xe7\x1f\x5f\x9c\xfd\xf5\x0c\x74\x3a\x63\x46\x73\x96\xe1\x6e\xc6\x2e\x43\x40\xa8\xe2\x48\xd2\x06\xb3\x02\xa9\x3a\x4a\x8e\x9b\xd5\xf7\x2d\xf5\xd3\x53\x9f\x71\xa5\xf3\x6e\x14\xe2\x38\x5f\x66\x42\x29\x56\xfa\x2a\xd3\x69\x03\xcb\xfa\x34\x5b\xe3\xd9\x7a\x09\xe3\x40\x47\x01\x48\x9e\xae\x83\xa1\x66\x2a\x5c\x1d\xeb\x4f\xb2\xfa\x33\xed\x3f\xb5\xb6\x44\xa3\xae\x4f\x68\x4b\x12\x60\x38\x27\xb7\xb3\xf9\xd2\x69\x39\x5e\xa1\x2c\xbb\x40\xe3\xab\x3c\xf6\x0b\xcb\x2d\x63\x4b\x68\x86\x48\x6b\x15\xeb\x95\xcc\x91\x2c\x95\x26\x15\xdd\x4d\xf5\x3c\xbb\x4a\x4e\x0b\xd6\xf8\xa2\x72\xfe\xaf\xf9\x56\x53\x78\x36\x8e\xd6\x5d\x23\x2b\x60\xf0\x43\x52\x35\x1d\xb8\x0f\x1f\x34\xba\xe4\xeb\x53\x25\xe5\x5a\xd7\x73\xa3\x5a\xc3\xcf\xc5\xf1\xe1\x21\x06\x6b\x8a\x0d\xf1\x28\x36\x1a\xd4\xc0\xcc\x28\xd3\x25\xaf\x87\x1f\x67\x9c\x5d\xff\x42\x67\xea\x0e\x43\xe9\xe7\xd4\x8e\xfa\x09\x09\xd9\xe3\x02\xde\x5f\x2a\x6c\x53\x75\x10\x60\xe1\x57\xab\xa7\xed\x35\x68\xcb\x9e\x65\xbe\xa4\xa5\x52\xd5\x33\xd3\x40\xe3\xab\x8b\x25\xa7\x98\x6b\x45\xa2\xa4\x71\xf9\xf0\x9e\xef\xa5\xdc\x59\x61\xb0\x70\xa3\x57\x34\xc6\x06\xfd\xd9\x6e\x28\xfc\x6e\xb0\xa3\xfd\x56\x48\xe4\xb8\x66\x57\xfb\x73\x60\x4d\x5e\x43\xc3\x34\xa6\xaf\xfd\x24\xc8\x1f\x69\x53\x6e\xc7\x21\x1d\x68\x4f\x0b\x55\xe3\x69\xb0\x06\xb6\xfa\xba\xd2\x52\x4d\xf7\xd5\xaf\xfa\x2c\x58\xd5\xb1\xbc\x5e\xdd\x0a\x96\x2c\x0a\x27\x29\x05\xf7\xb7\x95\xa2\x2a\x86\x74\xee\xed\x41\xf5\x51\xeb\xc3\x71\xac\xa0\x92\xfc\x3f\xad\xfd\xf0\x6b\x46\xf1\x1a\x9b\xbc\x73\x67\x64\xac\xf5\x9e\x46\xa5\xf4\xfa\xf4\xdd\x89\x92\x2a\x57\xab\xe8\xe4\xc3\x87\xd3\x0f\x27\xaf\xd5\xa3\x3c\x9a\x38\x5f\xce\xb1\x83\x5d\xa3\x44\x82\xdf\xd8\x78\x65\x7a\x76\xb5\x86\xd5\xb6\x25\xac\x89\x60\x0c\x86\x62\xa4\x22\x39\x55\x7b\xa1\x5c\xed\x53\x6a\x22\x01\x50\xe5\x9f\x3b\x08\xf5\x34\xd5\x7d\x4c\xc2\xdf\xfe\xf2\xe2\xec\xfc\xe7\xd3\x0f\x27\xe7\x7f\x7b\xf1\xd3\x2f\x27\x67\x91\x71\xdb\x25\x16\xcb\xd5\xda\x23\x30\x0c\xc6\x0e\xbd\xf4\xf1\x55\xc5\x9a\x32\x63\xa7\x13\x87\x00\x77\x3a\x41\x09\xdf\x71\x15\xd5\xd2\x5d\x5f\x60\x5d\xad\x2c\x79\xbd\x46\x9c\xc6\xd1\xdf\xd9\xb2\xb5\xb0\xf7\x59\x2d\xd4\xea\x66\xaa\xf5\x18\xb4\x24\x31\x6d\x99\xb4\x43\x2d\x32\x9f\xe3\x09\x41\x02\x67\x37\x2d\x65\x57\x4d\xe8\xe5\x13\xbd\xa8\x84\x5e\xb6\x88\xe8\xb6\x3e\xce\x48\xde\x22\x79\x4b\x73\x89\x92\x81\x5e\xd2\x7c\xb9\x58\x30\xc9\x00\xb6\xe2\x8b\xa5\x68\xcd\xc9\xe5\x4c\xb4\x2e\x70\xab\x7c\x4f\x68\x6b\xba\x54\x0e\xb3\x9f\x30\xcf\x95\x71\xc0\xb4\xd5\xe0\x38\x41\x37\xb2\xf8\xb7\x39\x49\x69\xbb\xaf\x42\x6c\x69\xc3\x72\xe8\x6f\x87\x75\x22\x95\xd5\x29\x58\x22\x64\x9f\x53\x8b\x5b\x4b\xa3\xd3\xd8\x72\xb3\xb6\x8c\xc2\xaa\x61\xa3\x54\xbf\x89\x29\xf5\x2e\x8b\x55\x48\x60\xfc\x59\x54\xec\x51\xcf\xd1\xe4\x93\x3c\xb3\x3a\x2e\x64\xcd\xde\xd3\x63\xb7\xe4\x01\x31\x16\x89\x87\x87\xde\xfb\x02\xfa\x0c\x75\x98\x75\x2b\x71\xb9\xdf\x98\x0f\xdd\xe3\x06\x7e\x62\x6c\x31\x28\xd1\xb2\x0a\x02\xd8\xbc\xfe\xa8\x20\xf9\x48\x27\xc5\xca\x23\xc8\x21\x77\x0c\xbe\xd6\xa8\x01\x90\xe4\x58\x7c\x24\x73\xcc\x96\x22\xc4\x99\x97\x15\xb4\x9d\x25\x80\x7d\x50\x40\xf3\x2a\xa9\x5b\x9d\xad\xa1\x3c\x81\xd1\x61\x60\x19\x81\x8a\xc0\x01\xb9\xba\x68\xaa\x0a\xc2\xf7\x4d\x5b\xa3\x3d\x23\x0b\xda\xf9\xf2\x49\x9f\xd9\xf9\x1f\xcc\x4c\xd6\xca\xb5\xef\x29\xe8\x4f\xc5\x0e\x13\x97\x38\xf0\x9e\xe5\x73\x65\x41\x40\xb9\x61\xea\xd8\x75\xcd\x50\x1d\xbe\x0e\xa1\xb1\x81\xe5\x11\xb4\xfd\x84\x62\x95\x26\x1f\x54\x07\xf1\x44\x21\x1e\x3d\x94\x50\xb1\x57\x8c\x0a\x42\x97\xb8\x2c\x26\x3b\x77\x07\xa8\xa4\x6a\x22\x68\xa8\xb4\xa5\xc8\x21\x65\x46\xd2\xf8\xf2\xe1\xe4\xe3\x2f\x1f\xde\xd5\xe5\x4b\x0e\xfb\x15\x82\xeb\xd7\xf8\xf8\x97\x0f\xa7\xbf\x36\x2b\x3c\x5d\x5b\x41\x0b\xb2\xc9\x7d\x9a\x00\xb8\x5e\xc6\xad\xce\x71\x12\xbd\x3c\x79\x23\xe9\xcd\xab\x0f\x27\x2f\x3e\x9e\x44\xb0\x86\xda\x9d\x71\xe0\xda\xc9\xad\x4d\x9c\xb9\x98\x3c\xa0\x72\x51\x1b\x1d\x77\xc9\x67\xef\xe8\x3a\x4d\x9b\x73\xda\x90\x30\x8c\x93\x9d\x87\x66\xcc\x71\xaa\x51\x79\x65\x79\x01\x03\x47\x98\x80\x4e\x27\x76\x74\xb2\xbd\xc1\x0e\x54\xa4\xc0\x6e\xbc\x86\x16\x21\x44\x17\xe1\x53\x6f\xd7\xf9\xd5\x9b\xca\x2c\xad\xca\x0a\x01\x39\x20\x03\x52\xf5\x12\xf9\x80\xae\xd5\x97\xea\xb1\xfe\x95\x88\xd9\x19\x91\x07\x4c\xf7\xd0\x5a\x03\x27\xb1\x1d\xfd\xe4\xb5\x61\xb7\x62\x32\x14\x4d\x77\x0f\x00\xe5\xeb\xba\x4f\xd3\xc0\x4e\xf1\x27\x76\xa5\xc7\x20\x3f\xc6\x24\xe8\x99\x42\x94\x8f\xcc\x20\x96\x8c\x89\x46\x72\x90\xfa\x6b\x04\x75\x8c\xeb\x9a\x37\x52\xd7\xa2\x1a\x0a\x83\x4a\x43\x2c\xf1\xcf\x46\x55\xd4\x71\x52\xe5\x81\x5d\xa0\x75\xb3\x73\x7f\x81\x12\x99\xd5\xbe\x35\x85\x4f\xdb\x1b\x7f\xa8\xeb\x86\x02\xfd\x95\xa8\x13\xe5\x90\xb7\x8f\x6f\x9c\xb0\x9e\x83\x16\x03\x5f\x47\x14\x03\xc5\x4d\x27\x58\x31\xd4\xd5\xb5\xab\x76\x9f\xdf\x58\x1f\xd8\xc0\xe2\xfb\x88\x5e\xd3\xf2\x83\xe6\x66\xe2\xc0\x30\xa9\x14\xdc\xca\xe6\x7c\x41\x22\xcc\x74\xd4\x6f\x41\x2a\x23\xac\x2b\x2e\x2d\x63\xb3\x89\x5e\xf3\x40\x36\xd1\xe9\xa8\x80\xce\xb2\x0f\x9d\x0e\x2f\x85\x67\xda\xbc\xd9\x23\xde\xcd\x1e\xfd\xb1\x3f\xa0\x3a\x57\x02\x4b\xfb\xc7\xec\x39\x3d\x66\x87\x87\x80\x0c\x59\x35\x57\x02\x1b\x1d\x38\xf8\xee\x56\x69\x18\xf9\x7a\xd1\xc4\xd3\x80\x82\x91\xfd\x49\x00\x28\x8a\xa2\x38\x60\x81\x89\x4e\x43\x48\x54\x31\x09\xa5\xc9\x79\xe3\xba\x8b\xae\x35\x23\xd1\xc8\x91\x36\xad\x43\xfa\x3a\x9e\x9b\xdb\xb0\x3c\xbc\x4d\xa9\xc5\x1d\x4f\xef\x2c\xaf\x8f\x1b\x35\x42\xa5\xd2\x22\x91\x4e\x67\x2d\x74\x4f\x07\x5b\x00\x00\xab\x52\xe3\x9a\xfb\x47\x15\x07\xda\x17\x2f\x02\x85\xed\x9d\x58\xda\x2c\x6b\xad\x5b\xf5\xae\xc1\xf5\x1d\x45\xcd\x07\x5a\xf9\x60\x76\x11\xef\x74\x44\x5b\xe9\xc5\x44\x97\xe4\xaf\x71\x2e\x38\xbb\x51\x9a\xc8\x8a\xfd\xaa\xbb\xdb\x8a\x80\x9d\xf8\xe8\x9f\x6e\x37\xe0\xc0\x2e\x85\xd1\x3f\x23\xb9\xc9\xbc\x62\x74\x5d\xb1\x83\x8a\x30\xf5\x43\x43\x6e\x69\x4d\xb0\xc0\x63\xa1\x24\xab\x05\x13\x98\x0a\x22\xe5\xbd\xd6\x0c\xfd\x86\xf8\x84\x2d\xf3\x56\x94\xe3\x6c\x6a\x54\xe8\xad\x8c\xb1\x45\xd4\xba\xc0\xe2\x1a\x63\xda\x5a\x20\xc9\x24\x6a\x39\xec\x07\xb7\x4d\x61\xd4\x42\x74\xd2\x1a\xcf\x48\x36\xd1\xdf\xca\xed\xcc\x60\xd4\x6d\xbd\x9d\xb6\x6e\xd8\xb2\x75\x8d\xa8\x58\x5b\xca\xb8\x1c\xb9\xbb\x81\xeb\x59\xad\xbd\xb2\xb4\x6c\x90\x94\xd7\x08\xb0\xb5\xc8\xb0\x64\x7b\xc6\x33\x44\x2f\x71\xeb\x9f\xe5\x25\xce\x3f\x25\xd4\x7f\x3a\x01\xd2\xfb\xb0\x79\xa7\xae\x30\x5e\x58\x9f\xf4\x16\x9a\x0a\xcc\x37\xed\x96\xe9\x0f\x11\xba\x17\x4b\x1a\xe8\x47\x24\xcf\x38\x75\x17\x3e\xf2\xb8\x6b\x9b\xb8\x90\xcd\x0c\xf3\xdc\x56\xf3\x9d\xb2\x99\x0c\xfc\x07\xcf\xae\x01\x59\x27\x14\xd3\x20\x52\x56\x25\xf1\xad\xba\xaf\xc6\x70\x4a\x13\x01\xcd\x66\x57\x54\xb0\x80\x1c\x94\xbe\xc6\x85\xf6\x34\x42\x9e\xd9\xd5\x7d\xde\x9f\xea\x9a\xc6\x6e\xde\x2f\xe0\x18\xff\x50\x13\xac\x2d\x0d\xbe\x9a\xce\xab\x6b\xb2\x20\xaf\xb3\xe3\x42\x5f\xc3\x8e\xcb\xdf\x1c\xdb\xba\x79\x2e\xbf\x01\x37\xcf\x3f\x61\x28\xe4\x6f\xd3\xcd\x73\x1f\x03\xf9\x4b\xc4\x40\xde\xd1\x2c\xb3\x66\x91\xe9\x1b\x63\xba\x54\xec\x61\xb7\x99\xf3\xd2\x50\xa9\x62\x51\xa4\xdf\x68\xea\xa5\xab\x54\x9c\x5a\xc2\x86\xfc\x81\xfc\x19\x15\x57\x56\x9e\xf6\x8e\xf9\x73\xac\x56\x58\xc8\x15\x2e\x49\x53\xb9\xd2\xe6\xa6\x41\xb3\x3a\x26\x84\xcd\x0c\x71\x29\x39\x59\x75\x52\xd9\x4f\xf3\xc6\xef\xa7\x0a\xeb\x31\xbf\xc7\x00\x35\x1e\xa7\xb7\x53\x63\x49\x65\x89\x9c\xb9\x3f\xbc\xc8\x31\xff\x84\xed\x75\xa2\xc4\xff\x37\x2f\x24\x49\x6c\xce\x48\x1e\xf6\xd4\x71\x22\xcc\x5d\xce\x3a\x95\xd8\xcf\x46\x55\x0b\x1a\x21\xfe\x4e\xaf\x29\xe6\x15\xdd\x2d\x80\x22\xc5\x03\xdc\x65\xf2\xcb\x5b\x2a\x61\xa8\x56\x55\xaa\x05\x37\x73\xf6\xfa\xf9\x0d\x92\x7b\xf1\x26\x65\xf5\x90\x06\x66\x2a\xa7\x14\x14\x71\x0f\x92\xee\xf9\x38\xc3\x88\x2e\x17\xa7\xd4\xf0\xb0\xa0\xa9\x31\xb6\x46\x1f\x2f\xb2\x2c\x82\xb7\xdc\x44\xfb\x11\x33\x6c\x30\x87\xe4\x7a\x32\xf2\x09\xe7\x2d\x46\x95\xd1\xc7\x44\x83\xc2\x93\x16\xe3\xad\x25\xe5\x98\x4e\x30\xc7\x93\xa8\x90\x02\xae\x9a\xd8\xf0\x36\x32\x8a\xc0\x8c\x51\x75\x4d\xdc\xdc\x56\xbc\x82\x34\x6c\xb6\x28\x93\x26\xaa\x9e\x9a\xa5\xf4\x36\x74\x6b\x99\x0e\x9d\xc0\x95\xdb\x4b\x36\xfb\x6d\xb5\x1a\x8e\x00\xe4\x00\xe2\x02\xea\xc5\x6e\x5e\x2e\x29\x5b\xdc\xa6\xe9\x2a\x30\xf1\xcd\xb0\x47\xce\x0d\xc2\xfe\x3b\x5b\x4a\x2e\xb1\xc5\xa8\x31\xe9\xf1\xae\x38\x24\x39\x51\x57\x1c\x84\xb6\x90\xe2\x30\xbb\x65\xca\x9b\x85\x73\x15\xd6\x27\x55\x2d\x44\xe5\xa4\x8a\x90\xf1\x65\xed\xe8\x62\x39\xe5\x96\x19\x0d\x66\x16\xdf\xb2\x15\x2b\x7b\xe9\xa5\xcc\x6a\x57\x70\x06\xea\xdc\x8f\x58\x63\xf6\x5b\x85\xa5\x74\xdb\xeb\x9c\x71\x72\x49\x4c\x21\xf3\x50\xf7\x40\x2e\x77\xb7\x7b\x57\xea\xd1\xb9\xf9\xec\x9e\x61\x45\x4c\x2a\xd5\x38\xee\x95\xec\xf9\x7d\x66\xe7\x9b\x58\x9c\x07\x8e\x5b\xe2\xfc\xbc\xb7\x44\x97\xbc\x8a\x2e\xfd\x94\x43\x6b\xf7\x75\x05\x25\x1a\x44\x29\x65\xea\x90\xf4\x6b\xe4\x6a\x58\x2d\x9e\x54\x63\x1f\x58\x01\xb5\x76\x2e\x06\x77\x9c\x19\x00\x25\xf7\x09\x12\x0c\x8d\xff\x51\x68\x56\x42\x9b\x41\xc9\x1a\x24\xbc\x27\x14\x86\xab\xbe\xf2\xf6\xa6\x36\x97\x15\xa5\x25\x4f\xc0\x6e\x36\xac\x48\xaa\x6c\xb6\xea\x26\xe7\x45\x2d\xbc\x43\x6e\x51\x30\x83\x77\xe1\x64\x49\xd9\xd2\x34\x78\x10\x3b\x9d\x98\x86\xaf\x0b\xad\x02\xde\x00\xa9\xa9\x0f\x98\x93\x0f\x6b\xa6\x93\xbc\xbc\xf6\x62\x00\xb2\xa2\x50\x61\xe8\xdf\xbe\xfb\xdb\xe9\x5f\x4f\xe0\x24\x60\x3d\xaf\x95\x8f\x7a\x94\x61\x62\x54\xc0\xa9\x64\xe3\xc7\x6b\xb2\xd0\x48\x0e\xc2\xb0\x1c\x93\xad\xb2\xd0\x8c\x87\xd3\x51\x3a\x81\x63\x3f\xf4\xd2\xa7\xaa\xa4\x44\xa6\x31\x07\x55\xaf\x30\xee\xbb\x7f\xdd\xea\x08\x52\x7c\x88\x46\x70\x99\x4a\x2e\x48\x2e\xc3\xb9\x27\x98\x19\xcd\x39\x3f\x77\x67\xf5\xf2\xf0\x10\x1c\x88\xe1\x72\x94\xde\xc4\xba\x19\x88\x63\x01\x73\xb5\xfb\xe1\xd2\xf7\x70\xbe\xa9\x65\xe3\xa9\x61\x7a\xa7\x6e\x57\x7e\xcd\xe0\x80\x0f\x62\xeb\x98\xcc\x97\x14\xb8\x95\x38\x95\x3c\xb6\x9e\x5a\x0a\x87\xe5\x6d\x24\x81\xc2\x1d\x1a\x2d\x3a\x94\xa2\x8b\x92\x54\xb4\xdc\x52\xae\x04\x00\x09\x19\x8a\x91\xcb\xfb\xe5\x1b\xa2\x1b\xd6\x6e\x5e\x67\xf9\x66\x8d\x17\x55\x1f\x12\x54\xf1\x21\x21\x35\x1f\x92\x99\xe7\x43\x72\x9b\x63\x51\x89\x26\xe0\x6e\xe5\x64\x37\xcf\x24\x37\x73\x26\x4b\x18\xd5\x6a\xf5\xe5\x5d\x4e\xc9\x41\x0f\x7d\x7b\x69\xda\x8c\x01\x50\xb7\x0e\xf8\x38\xc3\x2d\x29\x51\xb3\x69\xab\x0a\x28\x06\xce\x34\x00\xb5\xf2\x05\x1e\x4b\xf9\xde\x28\x75\xac\xb4\xdf\x22\x92\x11\x59\x70\x3c\x46\x4a\x03\x46\x27\xad\x6b\x46\x7f\xb8\xcf\x00\x20\x0f\x5a\x00\x74\x5b\xef\xb5\xde\x49\x37\x76\x63\xe8\xb5\xd7\x18\xcd\x05\x46\x13\xd8\xc2\xdd\xcb\x6e\xab\xd4\xdd\x09\x18\x25\xaa\x68\xdc\xed\x76\x81\x8d\x51\x11\x83\x5a\xac\xc7\xb8\x54\x2d\x85\x26\x0e\x46\x4a\x7b\x04\x3f\x99\x0b\x32\x34\x99\xfc\x44\x72\x81\x29\xe6\xd0\xb0\xc2\x2a\xa6\x83\x32\x5d\x82\xc2\x79\x01\x47\xb0\xdd\xbf\xb3\x96\xc6\x35\x27\x95\xba\x1e\xb3\x57\xab\x7d\xaa\x59\x64\x57\xdb\xf1\xcc\xd5\x26\x7b\xa0\x80\xbe\x45\x40\x15\x23\x95\x1d\x4d\x6b\xcf\x92\x03\xab\x0f\xc6\x8f\xa6\x59\x1f\x67\x6d\xb7\x59\xdb\xec\xd3\xb5\x4d\xd7\x47\x9b\x06\xdf\x96\xdd\xa8\x7f\x69\x74\xa6\x31\x7d\x8d\x2e\x39\xa9\xe2\x6b\xcb\x4d\xb6\xa1\x54\x98\x96\x03\x1c\x48\x83\x3b\x7d\x41\x9b\x5b\x5d\x6f\x6c\xcb\xf1\x28\x7e\x9e\x32\xd1\xca\xb1\x90\xec\x3d\x11\xb9\xe5\xfa\x3f\x11\xd4\xfa\xa1\x4a\x32\x7e\xe8\xb6\xce\x30\x76\xc7\x8e\x28\x79\x40\xdb\xe8\x4c\x19\x6f\x4d\xb0\x40\x24\xcb\xbb\x91\x12\xd5\xee\x41\x4a\x21\xc7\x36\x93\x6e\xa3\xb7\x89\xc2\xb1\xa2\x1f\x7c\xdc\x70\x1d\x75\x5f\x99\x8c\xa0\x1c\x5a\xf3\xef\x9f\x65\x8f\x1c\x4f\xb4\xd6\xf9\xe5\x52\x54\x7d\x15\x7b\x9e\xa7\x61\xb8\xa8\xf5\x40\x56\x25\xdf\x4e\xb2\x90\xa3\x4c\xe9\xfa\x68\x81\x85\x1c\x48\xda\x8e\xf6\xf9\x17\x18\xd6\xe9\xc0\xbc\xb7\x0e\x90\x72\x2d\xd6\xf9\xe5\x6c\xd6\x5c\x2b\xd8\x9c\xe7\x23\x13\x6a\x76\x10\x69\xaf\xf0\x28\x89\xc8\x24\xc3\xca\x7d\xa6\xca\xfa\x1b\xb1\x5e\xf3\x7c\xea\x81\x2a\x89\x40\x7b\x7f\xb9\x72\x11\x80\xde\xe6\x49\xaa\xd3\x0e\x54\x80\x0f\x55\xa7\xe4\xc3\x7c\xe7\x77\x50\x89\x2d\xd2\x2c\x57\x05\x54\xc6\x29\x69\x96\x2c\xc3\x3a\x80\x7a\x78\x92\x40\xf3\x7e\xaa\x80\x4a\xe0\x92\x66\x59\xe7\xe3\x0d\x2a\x01\x4d\x9a\x05\xad\x07\x37\xa8\xc6\x39\x09\x40\xb4\xf6\x9f\xa0\x1e\xff\xa4\x59\xd6\x73\xea\x06\xd5\xc8\x28\xd5\xb2\x95\xb8\x15\x00\x96\x6b\x90\xf4\xa0\xdb\xdc\x49\x0f\x96\x81\x6b\x92\xde\x9d\x01\x4c\xf0\x6a\x75\x5b\x40\x9e\x8a\xae\xd6\x58\x28\xd3\x11\x8e\x73\x2c\x8c\x4d\xa8\x52\xf4\x76\x1d\x88\x75\x1e\x38\x12\xeb\x89\x19\x56\x01\x8c\xa3\x06\x4f\x5e\x56\xe7\x00\x52\x67\x01\xee\x9a\x89\x81\x8d\xd5\xb4\xa9\xab\x48\x45\xd0\xf5\xaf\x13\x9b\x96\x7c\xb5\x08\x64\xea\x08\x94\x82\xb1\xde\xff\x65\x57\x1a\x7e\x22\x39\x16\x5e\xfa\x4c\x15\x48\xe7\xae\x70\x39\xf5\x80\x3a\xa1\xa0\x3b\x8f\x13\x52\xa7\xa8\xf9\xfd\xdf\x17\x41\xf3\x1a\x11\x71\x34\x65\xfc\x4b\xf8\x3a\x57\x03\x31\x19\x6d\x34\xff\xce\xb4\xd1\xbe\x8b\xee\x57\xbc\xba\x22\xf5\x0c\xf0\x92\xdb\x71\xc9\xdf\xb9\x4d\x37\x4b\x53\xc9\xfb\x1c\x50\x2f\xaf\x6d\xea\x3f\xac\x56\xed\x3e\xa4\x5d\x5f\x26\x4d\xdb\x3d\xeb\x02\x43\x68\x8b\x2a\x61\xdc\xca\xa8\x4a\x02\x5f\x47\xea\x69\xf7\x0a\xdf\x40\xea\xcb\x8a\xac\x9e\xb9\xb5\xd3\x21\x31\xf6\x38\x15\x01\x20\x57\xef\xb4\xf6\x30\x70\xef\x57\x2e\x57\xdb\xcb\x2e\x6e\xb2\xfe\x89\xf0\x4c\x2a\x09\x4b\xa2\x23\x8e\x73\x65\x99\xac\xae\x67\x30\x11\x33\xcc\xa5\x0c\x23\x6b\xb7\x18\xaf\x4c\xed\x81\xd7\x2d\x7b\x69\x66\x38\x0d\x65\xf9\xe2\x89\x7c\xde\x26\x49\x0c\x4b\x83\x7d\x31\xbe\x2e\xe2\x4b\x8e\x4d\x74\x3a\xfa\x2a\x7a\x4d\x7a\xd9\x38\xb7\x8d\x6a\xd4\xa2\xdb\x3a\x9d\xd6\x6f\x01\x4b\xcd\xec\xb9\xea\xd1\xf9\x79\x2a\xa0\xda\x7a\x15\xd8\xcb\x40\x96\xc7\xb5\x39\xb7\x3e\xe0\x69\x86\xc7\x62\xb5\x6a\x9b\x5f\xe5\x31\x30\x17\x6d\xed\xfe\x01\x99\xc6\x8d\xaf\xdd\x7c\x86\xe6\x95\x22\x81\xc3\xf5\x9e\xb3\xcf\x37\xb6\x90\xce\xca\x65\x06\xf1\x1a\x09\xbc\xf6\x62\xb2\xd1\x58\x2c\x8b\xc3\x61\xd5\xa9\x44\x25\x69\x6e\xf7\x8c\xa1\x94\x3b\xe7\xed\x7e\x51\x94\xb1\xbd\x6b\x1a\x0a\x0e\x69\x3a\x36\x77\x91\xc2\x6a\xee\xc6\xda\x3b\xc1\x47\x00\x07\x3c\x6d\x76\x82\x96\x72\x0a\x24\xa0\xc0\x59\x8e\x5b\x3c\xa5\x61\x49\xde\x76\xc0\xc4\x2b\xe0\xfe\xd1\xc8\xfc\xf5\x6c\x8b\xd5\xca\xde\x6e\xb4\xd3\x94\xc7\x02\xf8\x88\xaa\xdc\xf9\x83\xda\xad\xb3\xe6\x9d\x95\x9d\x79\x79\x12\x3e\xe0\x29\x96\x58\xd9\x1e\x07\xd9\x78\x6b\x86\x72\x2d\xc1\x63\xda\xb2\xa9\x95\x72\x3c\x69\x1d\xb5\xd4\x95\x4b\x0c\x2a\x25\x8c\x07\x6d\x99\x0a\xa9\x88\x31\x48\x44\x30\xdf\x68\x3c\x0e\x6f\xdd\x41\x99\xf2\xd9\x7b\x1b\xc4\xca\xe5\x6e\x5e\xad\x82\xb5\x24\x66\xdd\xf5\xb2\x4f\x92\xb0\x37\x8c\x2b\x36\x28\x90\xf3\x54\x4d\x99\x6a\xa0\x2c\xab\xc4\xd2\x34\x78\xf2\x64\x69\x63\xbc\x5d\x96\x77\x7a\xa4\xba\xe9\xbb\x57\x69\x66\xde\x69\xcb\x95\x69\xa5\x27\x28\x26\x10\xdb\x1b\xfb\x65\x4c\x40\x2d\x8f\x4b\x25\x48\x83\x31\x13\x27\x00\xc6\x22\xe5\x5e\x2a\x2a\x50\x3a\x61\xa5\x18\x8a\xae\x20\x73\xcc\xdf\x4e\xb4\x13\x90\x70\xc1\x6b\x63\x02\x87\xb7\x57\xf8\x26\x69\x98\xcb\xd9\xdc\x99\x15\x9b\x39\x79\x60\xb5\x59\xa0\x01\x17\x70\x26\x50\xdf\x5d\xe3\x35\xb7\xaf\xfb\x6c\xe2\x8c\xdd\x5a\x69\xec\x78\x8f\x59\x1c\x28\x8a\x02\x9a\x01\xd4\x8d\x6d\xeb\x23\xf0\x5d\x1f\x8c\x72\xd8\x1f\x8b\xd1\xb5\xf9\x13\x55\x14\x23\x00\x49\x11\x8b\xae\x33\xec\x04\xbe\x8e\xf8\xde\xd5\xb2\xe6\x46\x2c\xb0\x5e\xac\xb6\x5e\xfa\xc8\xa7\x18\xb2\x52\x39\x93\x0a\xc8\xba\x53\x13\xca\x8c\x75\x27\x64\xa2\x5d\x42\x55\x6e\xc3\xee\x32\xc7\xf9\xeb\xd3\x9f\x6d\x70\x51\xf9\xca\xe6\xe2\x79\xa5\xaf\x23\xd5\xcb\x5d\x17\xdb\x33\x90\x34\xf7\x0d\xe5\xc8\x09\xb8\xa5\x7e\x77\x7a\x90\x86\xcc\x9d\x63\x00\xef\x5d\x73\x02\x0a\x18\x20\x15\xaa\x49\x66\x4c\xab\x26\xfa\xee\xc1\xaa\xdd\x06\x7a\xe1\x6a\xe3\x37\xa1\x0d\xd7\xd4\xa9\xa9\xbd\xdc\xfd\x6d\xd0\xc6\xda\x07\xe4\x7c\xcc\xca\xe7\x75\xb0\x8c\x19\x78\x63\x11\xaa\x3d\x63\x74\x6d\x5f\xb6\xd9\xcc\xa6\x92\x75\x2e\xab\x4c\x46\xa5\xc3\x1c\xcf\xd9\x27\xbc\xd1\x64\x68\x15\x81\x5b\x57\xab\xaa\xa8\x0d\xc8\x68\x9e\xed\x70\xa6\xd3\x75\xe0\xec\x8f\x54\x9f\xeb\xd0\x69\x9a\xed\x72\x9a\x60\x20\x2b\xf1\x66\xe6\x7b\x2f\x19\x93\x63\xd8\xee\x38\x5e\x61\x15\x2d\xb7\xbb\xe0\x78\x42\xc6\x48\x38\x57\xde\x90\xb8\x82\x06\x28\x48\xd6\xd2\x34\x45\x05\x64\x5d\xa3\x60\xe4\x2f\xd9\x92\x4e\xbe\xe8\xf9\xb4\x90\xdf\xd0\xb4\x61\xa6\xec\x59\xd3\x9a\x91\x69\x16\x5d\x31\x3e\xb4\x39\xb2\x98\x94\x19\x5b\xef\x3f\xc0\x92\xeb\x82\xb5\x3e\xc4\xc0\x45\x35\xf1\x54\xde\xb1\xb7\x73\x74\x0d\x25\x27\x28\xa2\x54\xad\x0f\xaa\x2f\xcc\x74\xf5\xb6\x3f\x22\x15\x08\x46\xb3\x50\x36\xe3\x9c\x65\xf4\x29\x79\x70\x3f\xdf\xdc\xb1\xd9\xef\x16\xaf\x4d\x7e\x8a\x27\x7a\x58\x47\x2a\xfd\xcf\x3d\x36\x9e\x36\xa5\xc5\x17\x0f\x2b\xa6\xfb\xa0\x23\xfc\xa7\xbc\xa9\x9f\xad\x4a\xef\xd6\xb7\xa1\xe7\x52\x9a\xf3\xd5\xca\xd3\xe9\xe8\xd8\x6b\x8d\x9c\x01\xc0\x7a\x40\xeb\xb1\xfa\x17\x26\x43\x5e\x35\x90\xf9\xa1\x2c\xf8\x43\x4b\xe0\xf9\x22\x43\x02\xb7\xf4\xf0\x95\xba\x49\xbb\x5f\x4c\xa2\x62\xa4\x2d\x6b\xed\x35\xa3\x6e\xb0\xab\x4b\xfe\xff\xec\xbd\x5b\x7b\x23\xc7\x95\x20\xf8\xce\x5f\x41\xe6\xba\xa1\x4c\x33\x80\x02\x48\x96\x2e\xa8\x4a\x51\xa5\xba\x58\x65\xab\x2e\x5d\x45\xf9\x06\xc3\x74\x12\x08\x10\xe1\x4a\x44\x42\x91\x01\xb2\x28\x02\xdf\xd7\xd3\xe3\xf1\x78\x3c\x9e\x5e\x8f\xdc\xdb\xed\xf5\xda\x5a\xaf\xc7\xeb\xf1\x78\xbd\x1e\xbb\xb7\xa7\x57\xb2\x7b\x3c\x0f\x92\x25\xf5\xcf\x90\x1e\xf5\xb2\x7f\x61\xbf\xb8\x47\xe4\x05\xb7\x2a\xd2\x2a\x09\xf5\x50\x3c\x88\x8c\xcb\x89\xdb\x89\x13\xe7\x9c\x38\xc7\x27\xb6\xb4\x63\x86\x97\x6a\x35\x1d\x5a\x1f\xf3\x58\xe6\xc2\x1e\x38\xc3\x13\x96\x8e\x8f\x6e\xdc\x40\xac\xd8\x32\x9c\xaf\xac\xa0\x7c\x4e\x1f\xef\xb0\x65\xa3\xd3\x9c\x55\xa8\x15\xa4\x2d\x64\x13\xfe\x3f\x7e\x52\xed\x3f\xc9\xe2\x7d\x87\x8f\xa5\xe3\x1f\xa7\x70\xc7\xa8\xa7\x2c\xa8\x4b\x0d\x9a\xd1\xf2\x06\xcd\xd2\x34\x69\x71\xb3\x66\x50\x64\xd3\xbc\xeb\x18\x33\x37\x1f\x83\x25\xf3\xae\xe8\x9b\x8a\x22\x9c\x13\xf0\x9d\x83\x6d\x70\x72\x26\x16\xec\x8f\x47\x21\x18\x15\x12\xa7\x5c\xc4\x37\x1c\x72\x57\xc6\x48\x84\x9e\x49\x0a\x42\xcf\x20\x69\x7a\xa5\xcd\x44\x28\x77\xdc\xef\xc4\x6a\x8e\xa6\x93\x39\xfe\x50\xef\x51\xbd\xdf\x9a\xb7\x1c\x8f\xf2\x80\x43\x3a\xe2\x5d\x34\xae\xe2\x74\x01\xff\xa3\xfa\xe2\x05\x08\x24\x20\x02\xe9\xa3\xb3\x22\xac\x8f\x05\x6e\x49\xe3\xc2\x68\x7b\xe2\x14\xbd\xc1\xae\xa6\xe9\x30\x8e\xb8\x62\x32\x34\xcf\x06\x21\xf0\xd6\x7d\xee\xee\xda\x0b\x00\xe1\x56\x3f\x8e\x55\x9d\x2c\xed\xd8\xd3\x65\xcc\xdd\x32\x36\x95\x53\x0c\x2a\xfd\x3a\x48\x73\x41\x72\x02\x69\x39\x0c\x90\x71\x5e\x9b\x55\xb8\x42\x6d\x9d\x37\xc5\x34\x2f\x6f\x97\x37\x09\xac\xb8\x84\xaa\x2b\x21\x04\x85\xf2\x38\x9f\xca\xfe\xab\x49\x30\x34\x34\x00\x74\x22\xc7\x5d\xf8\xdf\xcd\x99\xef\xc6\x85\x81\x02\xad\x1e\xe9\x41\x9d\x7b\x20\xb3\x61\x80\xe6\x18\x48\x38\x73\x20\xa9\x33\x24\xc5\xe3\x00\xed\x0a\x8a\x06\x03\x4e\x4a\x95\x1c\x1e\x15\xce\x1d\x3c\x70\xea\x9a\xf5\x1d\xc2\x42\x37\x90\x35\x99\x7f\x32\x29\x57\x9c\x78\xbd\x84\xc0\x23\x48\xe6\xae\x53\xe6\x9f\x5a\x27\x89\x8e\xf7\x16\x44\xd5\x14\x99\x5a\xb3\xf6\x24\x3c\x67\xc5\xd8\xf8\x1e\x9e\x5a\x2f\xbf\x11\xcc\x55\x63\x52\x8b\xe2\x99\x75\xe9\x10\x9b\xf3\x57\x29\x8b\x4c\xad\x59\x04\xd7\x9c\xb3\x4e\x96\x79\xc6\x2c\x31\x3a\x3f\x67\x6d\x2c\xf3\xd4\xda\x6c\x49\xf7\x9c\xb5\x46\x8e\x78\x7c\x9e\xda\x39\xe5\x59\xb4\x76\x5e\x68\x9e\xda\xef\xea\xf3\x71\xb1\x06\x54\xb9\xc9\x44\x85\x0d\x15\x8c\xc3\x7e\x0a\xe9\xd5\x38\x4a\x53\xd4\xb9\x06\x3b\x89\xf4\x1d\x64\x7d\x93\x46\x05\xfa\x63\x26\xe2\xa9\xab\x43\x5b\xa7\xdc\xef\x85\x6a\x5d\x0b\x9f\x38\x89\xe1\x46\x9e\x02\x10\xde\x31\x32\x66\x0b\x30\x90\xcc\x87\x28\x66\x1b\xaa\xae\xe9\xf7\x6c\x94\x91\xe2\x59\x7c\x88\xd0\xde\xbc\xc6\xee\x5c\xb9\xcf\x33\x18\x94\x33\x36\xe2\x32\x09\xa7\xdc\x62\xa8\x00\x01\x60\xf0\xb7\x27\x74\x32\xa3\xd7\x92\xb1\x5a\xfe\x76\xe9\xd3\x4f\xaa\xa5\x01\xf9\x04\x2a\xcb\x71\x46\xa1\xed\x28\xe1\x7c\xfc\x58\x95\xe5\x68\xa5\x2c\x9f\xaa\x2c\x8f\xb2\xca\xf2\xe8\x2c\x95\xe5\x49\x81\xb2\x3c\xb1\x25\x67\x1b\xc4\x51\x96\xb3\x5b\x74\xa1\xb2\x9c\xfc\x79\x95\xe5\xc4\xb1\x66\xd1\x4b\x37\x3a\x47\x65\x79\xd6\xd4\xe4\x8c\x6c\x91\x46\x4f\x84\x2d\x52\x9c\xb7\x45\x1a\x15\xd8\x22\x8d\x94\x2d\xd2\x12\x87\x21\x4a\xaf\x8b\xf0\x90\xa2\x6c\x91\xb1\x01\xac\x54\x0a\x9d\x11\xd5\x12\x5c\x7c\x62\xc0\x5a\xd2\xeb\x8d\xc7\x25\x65\x16\x2e\x92\x55\x91\x96\x54\x50\xa0\x3f\xe4\xf6\x0e\xb9\x37\xaf\x39\x8b\x87\xb9\xbd\x02\x6d\xef\xe2\xea\xb6\xf0\x0a\xb4\xed\x78\x05\xda\xce\x78\x05\xe2\xcf\x43\x6b\xc7\x28\x8e\xd5\x3b\x5b\xe3\x04\xc1\xfd\x50\x53\x6f\x9d\xb8\xf6\x2a\x4d\x61\xba\xaf\xde\xd3\x92\x74\x7f\x5f\xc5\xa7\x73\xca\x80\x34\x6c\xb5\xd7\x9c\xa4\xb0\xe0\xc1\x01\x0d\xeb\x80\x84\xda\x17\x30\xbd\x4c\x2e\xd1\xcd\xcd\x20\x6d\xd1\xb6\x1f\xac\x45\x92\xa4\x41\xe7\x85\xd8\x22\xb8\x85\xe9\x64\x91\xec\xc2\xa1\xaa\x4d\xdc\xa9\x89\x49\x4c\x19\xb1\x0d\x38\x02\xf2\xf6\x59\x66\xf6\x72\x22\xcd\x5e\x48\x74\x5c\x96\xe5\xc0\x64\xd9\x9b\x5e\xd9\xbe\xcc\xa9\xf5\x98\x7b\xc9\x5d\x21\x81\x0a\x8f\x01\xd4\xde\xd5\x42\xa8\xee\xaf\x21\x34\x8a\xb2\x10\xd6\xf6\x15\x2f\x6e\xbd\xcc\xcf\x7a\x39\x72\x92\x84\x0b\x3b\x27\x89\x9b\x88\xb8\xe5\xa4\xca\x32\x84\x59\x05\x6b\x08\x73\xea\xc4\x10\xca\x57\x81\x21\x74\x9e\x57\x84\xb0\xa6\x45\xbd\x8e\xa3\x00\x67\xa9\x28\x4a\x03\xb9\xc7\xca\xd3\x54\x3d\x22\x33\xbe\x43\xe5\x0b\x13\xe1\xc2\x3e\xd4\x31\x8e\x19\x69\x12\x5a\x60\x4f\xca\x3c\xbc\x9c\xf6\x57\x6a\x36\x6d\xff\xf4\xae\xb3\x79\x28\xf4\x8f\x90\x9d\xe5\x36\xba\x1d\x69\x6f\xe4\xb8\xac\xc9\xb9\x2f\x11\x62\x66\x38\xfd\x34\x48\xf0\x11\x24\x74\x5d\x73\x45\x8c\x2d\xe4\xec\x21\x4d\xa4\x2e\x80\xb1\x86\xa1\x96\x0c\xaf\x99\xdd\xd3\xb8\x44\x2f\x67\x09\x02\xdf\x41\x59\xd7\x3c\x2d\xca\x77\xbc\xe0\x59\xcd\x3b\x47\x76\x0e\xaf\x93\x20\x27\xfc\xef\x47\xe9\x9d\x63\xac\x85\x38\x9c\x1b\x62\x97\xaf\x4a\xc5\x87\x2d\xdc\x0e\x49\x0b\xb7\x75\x94\x41\x38\x59\xcb\xcc\x6b\x8f\x0f\x4e\x37\xf4\xf6\xa5\x37\xb7\x7d\xc1\x6b\xef\xef\x7b\x6b\x7a\x2d\x74\x75\x3f\xfa\x61\xcb\x7b\x81\xef\xcb\x0b\x55\x84\x29\x24\x38\x8a\xd3\x0b\x87\x31\x1a\x0c\x20\x51\x02\xe2\xf2\x1c\xfa\x42\x56\xf2\x5b\x6b\xd2\xc4\x6b\x48\xfd\xb9\x4f\x07\xf1\x41\x44\xd2\x0b\x0f\xe0\xc9\x71\x42\xba\xe9\x85\x8e\x50\x17\x56\x33\x19\x49\x32\xa2\x08\x1f\x2e\x5c\xa0\x34\x5f\x1b\x0c\xc3\xfa\xa5\xe1\xe5\xbe\x9a\xb2\x21\x23\xd2\x3d\xbf\xdf\x1a\xb6\x91\x7a\xf1\xbb\xbf\x1f\x27\x51\x97\x2f\xc5\x43\x94\x52\x72\x12\x9c\x9a\xb1\x0b\x73\x79\xb8\x5d\x09\xaf\x21\x90\xb9\x84\x53\xce\x49\xc1\x7e\x64\x87\x6d\x67\x5f\x24\x8b\x39\xc9\x6e\x62\x91\x43\xa7\x8a\x4c\x05\xdb\xdf\xc3\xf0\x21\x75\xbf\x09\x62\xe1\xf1\x25\xef\x7e\x91\x94\xc5\x93\xda\xa3\xb5\x02\x42\x24\x55\xd7\x22\x38\x93\x72\x9d\x91\xa5\x60\x6b\x45\x54\x6d\xc0\x8b\x1c\x95\x90\x8e\x1c\xdd\xc8\xf6\x2f\x2c\x4c\x15\x11\xf5\xa9\x8e\x54\x5d\x73\x06\x2e\xcc\x27\x59\x05\x0a\xc8\x10\x0f\x42\x91\x37\xae\xe0\xb2\x60\xc9\xe6\xfa\x30\x3c\x56\x86\x33\x2c\x7b\xd1\x11\x28\xed\x36\xf2\x73\x94\xaf\xda\xcd\xab\x67\xbc\x28\xa3\xa1\x72\xe6\xf8\x38\xe2\x83\x7a\xe2\x9e\x4d\x3e\x56\x96\x45\x34\x44\x3e\x0e\x32\xf1\xb3\x38\xe5\xd1\x81\xc5\x64\x4c\xb1\x00\xf8\x24\xa4\x8e\x59\xd0\x20\x0d\x21\x20\xae\x39\xa5\x45\xbb\xb1\x1a\xb4\x99\xbd\x34\x8f\x83\xf3\xb6\x94\x31\xf7\xfc\x5f\x6c\x39\x49\x81\x58\xbd\x8c\x01\x13\x01\x2e\x82\x89\x9c\xe6\x41\x76\x94\xa7\x8c\xdc\x52\xa6\x90\x78\xe2\x1f\xa9\xc7\x83\x18\x1e\xfb\x73\x0f\xb0\xe6\x0d\xcc\xc8\xd2\x92\xb7\xf4\x4b\x0c\xe5\xa2\x0b\x86\x77\x83\x2d\x19\xc5\x7b\x1c\x72\xb4\x0f\xec\x77\xdf\x34\xb7\xf7\x78\x5d\x21\x65\xc7\x86\x66\x5f\x0e\x78\xc1\xfd\x27\x6d\xa5\x95\xf8\xa5\x7e\xec\x8b\x8c\x5d\x10\x88\x6a\x69\xfe\x05\xa6\xc7\xeb\xd8\x08\x63\x0a\x62\xfe\x90\xf0\xb4\xc0\x11\xb6\x08\x04\xca\xb1\x17\xfa\x7a\x49\xb7\xc3\x90\xec\x52\xcd\x20\xe1\xa0\x49\x55\x70\x09\x1e\x67\x81\xc7\x79\xcd\x8c\xa4\x4f\x40\xdd\xd2\xa8\x49\x15\x6a\x86\x9a\xe2\xf1\x38\x93\x04\x74\xd6\x42\x31\xe6\xf0\xe4\x02\xfb\xaf\x58\x36\x2b\x3f\xb2\xf6\x1f\xbf\x55\x97\x12\xc7\x5a\xb5\x62\x21\xdb\x32\x12\x14\x4b\x30\xb2\x6b\x89\xbc\x9a\xc4\x87\x41\x30\x1e\x0b\xd6\x50\x7b\xb2\x5f\xe7\xde\x60\x37\xb2\x06\x2a\x95\x8a\xf6\xe0\x52\x13\xbe\x33\x6d\xab\x95\x1a\xeb\x21\xdb\x17\x19\x29\xd3\x3a\xf4\xa5\xde\xb8\x1c\x29\x9c\x41\x0a\x5b\x48\x61\xd5\x02\x5e\x13\x5e\x2f\xa4\x6c\x7d\xa4\xb8\x74\xd4\xf3\x51\xa5\xe2\x8f\xc2\xa4\xc6\xd9\xb3\x3b\x3d\x56\xfe\xf9\xb0\xae\x0a\x46\xad\x11\x67\x38\xdd\xfe\xe0\x80\xe3\x93\x6a\x4b\x82\x00\x20\xce\x8b\x8e\xcc\x1d\xb0\x5a\x1d\x3d\x1f\xd6\x2f\x05\x69\x6b\xd4\x0e\xa1\xcf\xfe\xc8\xae\x08\x49\x17\xea\xf9\xb9\x21\xc1\x41\xc0\xea\xe4\xa3\x21\xf2\xae\xa9\xbc\xd8\x96\xcb\x5c\x8b\x28\x64\x39\xe1\x31\x07\x7d\x5c\x3b\x14\xfb\xd7\x0f\x44\x89\xd3\x34\x3c\x15\x2f\x09\x62\x6d\xa0\x97\x10\x3f\x66\x6c\x32\x9e\x8f\x4d\xc6\x20\x0e\x2a\x15\x6f\x7f\x9f\x0d\x77\x5c\x4b\x47\x07\xc2\x00\xc7\xaf\x83\x2d\xc6\x3f\xa7\xad\xb8\x1d\xa2\x5d\xe8\xe3\x56\xac\x7a\xd6\x64\x70\x30\x61\x43\x9a\x88\x3b\x28\x0e\x40\x24\xa0\xd4\xe8\x5d\xd3\x09\x5b\x67\x00\xef\xb6\xda\xf2\xf9\xb0\x82\xe4\xf3\x87\x4f\xd0\xab\xbf\x29\xfb\x9d\x6f\xe9\xb3\x7f\x40\x5f\xf4\x38\x9e\x35\xcf\x07\x7c\x52\x68\x82\x3a\x9c\x6a\xce\xa2\xc9\xd5\x3c\x34\x8a\x5d\x75\x1f\xad\x27\xa5\x05\x04\x12\x73\x6a\xaf\xe5\x68\x4c\x55\x32\x5e\xd5\x93\x32\x57\xa5\xc4\xaa\x34\x3f\x8a\xdd\x88\x46\x17\xaa\x43\x82\x8e\x78\x34\x32\x7b\x20\x5f\xb0\x72\xa4\x34\x21\xc6\x96\x87\x27\x49\x7f\x29\x99\x8c\x83\xa4\x0b\x63\xab\xc2\x7c\x2d\x65\x1f\x09\xec\x24\xa4\x9b\x41\x68\x3e\x4f\xab\x34\xa4\x95\xca\x5c\xe4\x82\x02\x4f\x8e\x86\x17\xec\xea\xe1\x6e\x52\x40\x42\x32\x67\x15\xc4\xae\x42\x0f\x6e\x93\x38\xa6\x5e\xdc\x1b\xc8\x30\xea\x40\xbd\x96\xbf\x78\xfd\xde\xfd\x9b\x77\x6e\x37\x89\xf0\x42\xe0\x5d\xbb\xef\x4d\x02\x19\x5d\x31\x46\x07\x24\x22\x08\xa6\xea\xb9\xb7\x4e\x90\xb7\x51\x48\xae\x26\x04\xbe\xcc\x53\x4f\x7c\x8f\x67\x62\x34\x35\xe2\xf1\xe3\x60\xed\x3e\x1b\xd8\x90\x96\xaf\x19\x2e\x03\x49\xe7\xb6\x75\x10\xd9\xa7\xae\xc2\x5b\x11\x3e\xe1\xc7\xcc\xdc\x95\xea\x12\x53\xeb\x95\xd2\xb6\xc5\xab\xcf\x16\x9c\xda\xca\x95\x6e\x34\xa4\x90\xdc\x4d\x86\xc2\xaf\xef\x3d\xbe\xf8\x16\x69\x10\xd5\xa6\xd4\x31\xb5\xed\x9b\x52\xa2\x72\x8b\x6d\x95\xb9\x5b\x73\x4a\xcd\x33\x82\x8b\x75\xc6\x2e\x34\x4f\xed\xd2\x16\x75\xc1\xea\x45\xa9\xa9\xf5\x2f\x33\x13\xf3\x8e\xbc\x95\xef\x56\x84\xa3\xc3\xb9\xad\x95\x9c\x26\x64\xd1\xe9\x2d\x25\x09\x95\x01\x1e\xe7\x6d\x40\x95\x98\x5a\xef\x7d\x1c\x0d\xd3\x7e\x32\xff\xc0\xab\x02\x73\xd5\xba\xcc\xd8\x17\x94\x9d\xda\x56\x27\x81\xa4\x03\x6f\xce\x6b\xd2\x84\x6a\xaa\xc0\xd4\x5a\x71\x42\x06\xdc\x1a\x83\x6f\x0f\xee\xd6\x65\xde\xfa\xf3\x45\xe7\x58\x43\x82\xf6\xce\x69\xf2\x64\x8a\xcc\xa8\x59\x84\x12\x4d\xfb\x68\xb8\x40\xdd\xa6\xd0\x84\x33\x54\xd7\xee\x87\x51\x79\x23\x25\xec\x4b\x09\x63\x10\x09\x12\x57\xce\x17\xa8\x0c\x8f\xf9\xca\x57\x6e\xb6\x27\x4f\xde\xc5\xf9\xa9\xe9\x3d\x4c\x2f\x40\x79\x42\xce\xe8\xa9\xc8\x77\x6e\xfd\xbd\x72\x90\x10\x2a\xc3\xb4\xce\xd9\x65\x53\x64\x9e\x13\x70\xb1\xba\xe7\x63\x4f\x71\x2f\x46\x9d\x05\xb1\x76\x4a\x4d\xad\xff\x46\x42\x0e\x50\xb7\x0b\xf1\x62\x0d\xb8\xc5\x66\x1c\xd0\xfc\xad\xc9\x62\xf5\xdb\x85\xa6\xd6\x7e\x3b\xa1\x37\x92\x11\x5e\xb0\x7a\xa7\xd4\x74\x62\xce\x9f\xf3\x2d\x56\xbb\x55\x66\x6a\xdd\x52\x24\xb6\x58\xe5\x76\xa1\xa9\xb5\xbf\x82\xa3\x11\xed\x27\x04\xbd\x06\x17\x1c\x9d\x5c\xc9\xa9\xed\x88\xad\xce\x8f\xaa\xbd\xe4\xa5\xf9\x4d\x61\x69\x2d\x57\x72\x8e\x76\x58\xb6\xbd\x64\x91\x43\x55\xb5\x63\x95\x9c\x83\x80\x7d\x33\x4d\x70\x35\x1a\xa2\xd9\x24\x4c\xe7\x7c\xf2\xa9\x36\x81\x29\x9d\xdd\x61\x9e\xeb\xc9\xed\x2c\xa5\x53\x4e\x60\x7e\xe1\xfe\xd8\x76\x8e\xe1\x5e\xde\xb3\x52\xe9\x0d\xc2\xdc\x0a\x8f\x3f\xe8\x29\x62\x37\xa6\x1d\xcd\x33\xd6\xfc\x94\x15\xe2\x7e\xe2\x2f\x58\x0a\x07\x3b\x23\xd4\x80\x44\x1a\x32\x97\x7e\x28\x95\x87\x98\x1c\x0c\xbf\xe9\x5f\x0b\xb0\xb7\x72\x14\x74\xc0\xfa\x4a\x49\x84\x53\xf9\x20\x77\x86\x58\xc7\x42\xd5\x99\x29\x65\xee\x5c\xe5\x65\xaa\x29\x24\x47\xa8\x93\xc9\xc5\xcd\xc6\xab\x9d\x04\xd3\x08\xe1\x3c\x57\x68\xbf\xaf\x02\x23\x10\x03\x1d\xa2\x02\x0c\xc0\x11\x38\xc9\xac\x5a\xd4\xf3\x1f\xd9\x96\x5b\x9a\xaf\x4b\xe1\x4b\x6d\xc0\x8d\x46\x2f\x7c\xbd\xf1\xb5\x9a\xdf\xaa\x57\x9f\x6b\x8f\x1b\xad\x7a\x75\xab\x1d\x7c\xad\x76\xc1\x36\x22\x14\xa5\xa4\xe1\x88\x91\xb6\xac\x2b\x7f\x12\xeb\x11\x5d\x8f\x61\x94\x52\x91\x73\xbd\x51\x6b\x6c\xd7\xea\x60\xfd\x60\x44\x79\xa0\x29\xfe\x8c\xd4\xdb\x74\x1a\xdf\xf4\xb4\x13\xe1\xd1\xf0\x90\x44\x5d\xc8\xb2\x12\x3b\xf0\x30\xcf\x0f\xd6\x69\x1f\x62\x9d\xc7\xb4\x5e\xf3\x82\xb5\x41\xed\xda\x7d\x29\xed\x19\x6a\x5f\xf3\x3c\xd1\xbe\xc0\x87\x03\xe7\xa7\x93\x41\x5a\xf5\x0d\xdc\xdf\x4e\x16\x2d\x42\x31\xb9\x74\x92\xc8\xc8\xaf\x4a\x61\xea\x62\xa0\x6f\xb0\xe1\xc0\xc0\xe2\x13\x23\x03\x61\xca\xff\x88\x04\x21\x60\x0a\x07\x12\x10\x89\x8e\x88\x23\x1c\xb8\xbf\x45\x16\x75\xdb\x0c\x07\x1a\x14\x1f\x24\x3b\x1b\x12\x17\x27\x9b\xcb\x0d\xb1\xfb\xcd\xe6\xd8\x42\xec\xfc\x14\x19\x6c\xc6\x25\xc4\xce\x4f\x59\xbb\x66\xb5\x43\x6c\xfd\x10\x1f\x73\x3c\x49\x88\xf3\x69\x22\xab\xcb\x9b\x86\x38\x93\x20\x32\x39\x1c\x60\x88\xdd\xdf\x22\x8b\xc3\x44\x87\xd8\xfd\x2d\x07\xd0\x70\x7a\x21\xb6\x7f\x89\xcf\x39\xc6\x23\xc4\xf9\x34\x3b\xab\xc5\x0b\xe9\xac\x56\x9a\x6e\x54\x52\xa2\x70\xe4\xce\xc1\x35\x46\x64\xd5\xdc\x45\x99\xf5\x64\x24\x0a\x6c\x45\x99\x5f\xce\xd4\x16\x89\xdf\xc2\xc1\xb4\xaf\x72\x09\x5b\x8b\x3c\xb3\xba\xf3\xb2\x1e\xb7\x7d\x99\x28\x33\x5f\xbf\xbf\xa7\x3a\x90\xb8\x1d\x78\x71\x84\xe2\xee\x2b\xf7\x5e\xe6\x4a\x8d\x90\xb8\xbf\xd7\x74\x69\x6b\x74\xba\x6e\x05\x9f\xbf\x7f\xe7\xb6\xf5\xb5\x93\xff\x7a\xe5\xee\x4d\xd5\x38\x2a\xfc\x6a\x15\xef\xb9\x19\xf6\xd4\x99\x10\xf6\x33\x73\x12\x51\x68\x3e\xc6\xee\x6f\x39\xa1\x5c\xc7\x66\x67\xca\xa4\xc8\x25\x3b\x62\xc4\xcb\xce\x96\x49\x91\xe3\x24\x7c\xdb\xd8\xf9\xb2\x49\x92\x6a\x0c\x0e\x60\xb7\xab\x26\x33\x15\xe3\xda\x2d\x4c\x16\x05\x0e\x60\x9c\xe0\xc3\x74\x2f\x09\x53\x03\x8b\x4f\xfd\x28\x65\xd3\x1e\xa6\x0a\x52\x73\x6f\xe4\x29\x7c\xd6\xcd\x4f\x91\x61\x9f\x1f\x72\x57\xd5\x19\x17\x9e\xb8\x83\xb7\x6f\x4e\x4a\x4e\xa6\xef\x8b\x73\x32\x3c\xd2\xd9\x8a\xcf\x34\x56\x78\x2e\x31\x96\x79\x75\xd2\xc8\xbc\x3a\x69\x48\x3b\x86\x61\x91\x48\x4b\x59\xbf\xb0\x76\xac\x07\x4e\x87\xa5\x9c\x59\xd9\x79\x7f\xe6\x8a\x40\xbb\x4e\x1f\xd6\xe2\x24\x79\x30\x1a\xee\xc2\x26\xd7\x70\x8a\x41\x0f\x64\xaa\xef\x49\xb4\x9a\x82\x91\x09\x0a\xf4\x98\x36\xdf\xf6\x64\xf2\xd0\x33\x2f\x08\xc4\x5a\xa4\x53\x24\x58\xe7\xdb\x4b\xbd\xdd\xe6\xee\xa7\x2e\x31\xeb\xe9\x2a\xdb\xad\x73\xd7\x2a\xf3\x97\x8f\x9e\xcd\xbf\x97\xaa\x3f\x4d\x9e\x27\x62\x95\xac\x4d\xed\xa7\x78\x70\xc9\x28\x66\x55\x28\x5d\xd3\xbc\x9b\xfc\xe9\x17\x8d\x8f\xeb\x20\x14\x9d\x04\xf3\xcc\xfc\x3c\xd2\x93\xa2\xeb\xd8\xc7\x75\x1c\x66\x92\x8c\x6c\xd7\xe7\xee\xf6\x27\xa3\xcb\xd3\xc5\x46\x4f\xca\x6a\x9f\xa3\xcb\xee\x7d\x7c\x86\x79\xc7\x39\xd8\xed\x05\xa7\x39\xb7\x37\x34\x84\x35\xc4\xe3\x19\x8e\xc7\x0a\x42\x09\x5e\x93\x46\xa5\x5c\x65\x88\x29\x49\xe2\x98\x4b\x58\x94\xc8\x22\x73\xf2\x03\x93\x9d\x24\x23\x2e\xbe\x28\xc9\xc9\x5f\x15\x02\x1b\x8b\xfa\x1a\xd4\x76\x16\x77\x86\xfc\x24\xbd\x91\x90\xbd\x93\x21\xe4\x0c\x86\x3e\x1d\x4e\x53\x84\x0f\x63\x48\x13\xdc\xdc\x68\xf0\x0e\x96\x95\xd2\x72\xaa\x7c\x91\x7e\x94\xde\x13\x2f\x0c\xf8\x99\x9d\x63\x61\xd8\x20\xa8\x6a\xb3\x1f\x81\x9e\x73\xee\x3a\xac\x8c\xdb\x91\x99\xcf\x75\xb2\xcf\x6f\x51\x5b\xb2\xac\x39\x36\xb0\xc9\xfd\xc4\x76\x58\x1b\x5a\x9d\x57\x10\x1b\x93\xe0\x6d\xd7\x1a\x4f\xd7\x9e\xf5\xf2\x98\xc1\x18\x0e\x20\xa6\xd2\x2d\x93\x7e\xf3\xa3\xd2\xcf\x0a\xd9\xb5\xcc\x0b\x77\xf5\x22\xb8\xd4\xd3\xdc\x1a\xea\xf9\xf3\xf8\xfd\x72\x6b\x14\xd6\x9d\xad\x36\xc0\xe1\x46\x1d\x20\xee\xed\x54\x8d\x0e\x25\x27\xfa\x41\x65\x04\xd2\x10\x16\x38\x8b\xbb\xb4\xe1\xe3\xd0\x8f\xc2\xb4\x86\xe1\x43\xea\x07\x41\xad\x9b\x60\x18\x54\x2a\x3e\x11\x66\xa6\x91\xb0\xca\x0f\xc0\x06\x1d\x8f\x55\xe0\x3b\xee\xde\xe0\x12\x6b\x32\xb8\x24\xdf\xb7\x8f\x82\x53\xc4\x50\x48\xc2\xd1\xa4\x87\x70\x14\xc7\x27\xdc\x97\xf5\x06\xae\x54\xd2\x9a\xc0\xdd\x40\x7e\xa0\x33\xa1\x9e\x8f\xa4\x40\x33\x99\x28\xe3\x7b\x32\x11\x3e\xe8\x1e\x9b\x87\x3d\x2f\x98\xd8\x9e\x21\x83\xd3\x49\xd6\xa0\x53\xfa\x3c\x53\x51\x87\xb3\x21\x73\xe9\xcc\x78\xb9\xc2\xde\x3e\x3a\xe4\x1e\xb1\x88\x8a\x9c\x38\x18\x26\x58\xb9\x9a\x26\x13\x20\xdd\x93\xe4\xa2\xc0\x90\x90\xfa\x10\x34\x82\x56\x9d\x9b\x47\xf3\x60\x8d\x56\x7d\x6a\xf2\xf3\x95\xda\xb1\xc9\xcd\x5b\x7c\xf5\x04\x9c\xbb\xf6\x54\x38\xae\x0f\xa3\x34\x85\x5d\x36\x5e\x2c\xf9\x1b\x72\x07\x7c\x43\x79\xf9\xe4\x9e\x28\x0e\xe0\x7a\xb4\x2e\xeb\xe3\x2b\x08\x6f\x86\xde\xba\x7f\x92\x8c\x54\xf1\x6f\x78\x9b\x64\xd3\xfb\x46\xe0\xc9\x99\x47\xc1\xe9\x24\x1b\xaf\x0b\xeb\x57\x26\x99\x51\xf1\xaa\xdd\x13\x1c\x0d\x50\x47\xef\x3f\xd5\x53\xa7\x57\xbb\x05\xa3\x97\x2b\x5a\x8d\x62\xea\x35\xe7\xc9\xe9\x15\xd2\xac\x43\x48\xab\x42\x30\x51\xa4\xdf\xe9\x24\x38\x1d\xc5\xd5\x11\xba\x20\xf3\x40\x7c\x84\x48\x82\x79\x7d\x4f\x22\x89\xee\x13\xd8\xab\xd2\x44\x53\x40\xf9\xfb\x3c\x5c\x88\x92\x27\x20\x8c\x3f\x31\x5e\x2f\xf1\xf2\x61\xfc\x71\xde\xdf\x25\x9e\x15\xc6\x1f\x1b\x97\x97\x78\xce\x30\xfe\x78\x71\xe7\x97\x38\x70\x7b\xfa\xc4\x86\xf1\x27\xe7\xe6\xaa\xd3\xf1\x02\x9e\x89\xae\x0b\xf3\xa2\x3d\xf5\xbc\xd7\xb8\x26\xc1\xb5\x43\x88\x59\x7f\xe0\x2b\xf7\x5e\xd6\xe1\x57\x69\xfe\x66\x01\x48\xe8\xc3\x10\xaa\xd7\x2f\x41\x2d\xed\xa3\x1e\xf5\x03\x80\x43\xd8\x52\xfd\xa9\x36\xda\x6b\x94\xad\x30\x5c\xe3\xd1\xe5\xc8\xc9\xdd\x88\x44\x83\x74\x17\xd6\x86\xc9\xd0\x0f\xc4\x49\x9d\x36\x4f\x95\x83\xab\x16\x8f\x7f\xd9\x9e\xf8\x24\x08\x96\x72\x11\xca\x48\xc4\x5e\x12\xe2\x62\x6f\xa1\xa8\xf8\xe4\xcc\x1f\x71\x96\x73\x20\x5a\x1b\x0a\x9c\xa5\x5f\x78\xf5\x3b\x68\x62\x1d\x04\xd6\x89\x98\x85\xa6\x10\xb2\xe5\x09\xd8\x19\xba\x67\x21\x1f\x67\xf7\x2c\x8f\xc7\x4d\x2c\x2e\x79\x4c\x6d\x85\xe6\x5e\x32\x78\x00\xae\xd1\x88\x1c\x42\xba\x46\x33\xde\x1c\x86\xc3\x18\x89\x38\x9d\x2a\x66\xb7\x62\xb1\x78\x4c\x84\x10\x2b\xf6\x8b\x95\x0e\x11\x47\x33\x09\xad\x34\xae\xd2\x45\x07\x23\x0a\x53\xbe\xac\x85\x43\xff\x11\x89\xc3\xa4\x52\x49\xc4\xd6\x99\xc8\x88\xca\xc0\x04\x13\x09\x21\xf0\x51\x28\xdf\x81\x0e\xa2\x93\x03\xf8\x12\x0f\xe6\x5c\xf0\x14\x53\x44\xaa\xeb\x27\xa3\xb8\x2b\xf2\xf8\x81\xf4\x1c\xd1\x97\x3f\xf5\xab\x4e\x3b\x57\x41\x4d\x36\xeb\x84\xd2\x57\xb0\xf4\x06\xdb\x7d\x19\xf6\xe8\xd5\x18\x75\x1e\xe8\x9a\x51\x7a\x3b\xa1\x37\x0f\x71\x42\x60\xd7\x6a\x2e\xbd\x9d\xec\xf1\x5e\xbf\x18\x47\xf8\x81\xfb\xe1\x0a\x6f\x45\xec\x59\xf7\xcb\xb5\xe4\x18\xc7\x49\xd4\x75\x6b\x7f\x19\xe1\x07\x57\x15\x7b\xa5\x3f\x11\xd8\x49\x0e\x31\x7a\x0d\xbe\x42\x62\xab\x63\xfd\xa9\x83\xb3\x7f\x08\xe9\xbd\x64\x44\x59\xc3\x35\x7e\xdf\x45\xec\xf3\x9e\xf0\x41\xc5\x68\xeb\x2b\x24\xfe\x92\x08\x97\x7c\x2f\x49\xd8\x75\xc4\x9a\xe3\xda\x90\xf0\xbf\xd7\xc4\x82\xb4\x5a\x2d\x1c\xa3\xb2\xf7\xf4\x56\x2c\x5f\xe5\x4b\xdf\xd7\x2b\x13\xd6\x8e\xfb\xa8\xd3\xaf\x54\x1a\xe6\xc7\x78\x0c\x6b\x1d\x4a\xe2\x2f\xc0\x13\x06\x0e\x20\x8d\xbe\x00\x4f\xec\x3e\xbb\xc3\x3d\xbd\xe1\xfc\x6a\x94\x2b\x5e\xe2\x02\xc7\x63\x6f\xff\x80\xd7\xc3\x51\x10\x0b\xd3\xf4\xd4\xcc\x77\xe9\xc2\xd9\x28\x6e\xa8\xe5\xb1\x4b\xba\xa2\x9e\x55\xc4\x6b\xf1\xda\x6e\x3f\xec\xd5\xb1\x64\x03\x82\x48\x2b\x8f\x16\x6e\xf5\x6a\x89\x2d\x5a\x75\xad\x2b\x0b\xba\x23\xe1\xac\xcd\xd2\x71\xdf\x68\x00\xea\x0c\x3e\xea\x5a\xfe\xd5\x48\x58\x46\x61\xf4\x01\x5f\x3d\x42\xf0\xb8\xaa\xdc\x6d\x34\x07\x11\xc2\x5e\xd0\xa2\xed\x35\x18\x92\x4a\x85\xd8\x47\x88\x38\x11\x1d\xbc\x26\x6a\x66\x35\xee\xf6\xe6\x99\xbe\x5a\x46\x24\x06\x34\x14\xfe\xeb\xa0\x83\xaf\xbd\x97\x00\xb6\xd3\x12\xca\xf7\x24\x40\x21\x7f\x63\x6c\x3d\xc4\x05\x49\x58\xb6\xd1\x40\x14\x92\xda\x3e\x17\x48\xea\xbf\xb7\x50\x87\x24\x31\x3a\x60\xf7\x7e\xf5\x49\xfc\x59\xa3\x21\xaa\x54\x22\x43\x05\x88\x01\xfd\xc4\xdc\xfd\x74\x8f\x73\x2d\xce\xd3\xed\x7c\x9f\xb4\xcb\x37\xf9\x7c\xd6\xa7\x9a\x35\xb2\x9e\xcc\xeb\x91\x99\x41\x5a\xa7\x4d\xb9\xe2\xe9\x44\x7f\xbd\x6c\xed\x1c\x9f\xe9\x7d\x70\x88\x1d\x0f\x09\x4c\x58\xb1\x7b\x2f\x6b\xf6\xd0\xbb\x20\xb6\x78\xa7\x1f\x91\x2b\xd4\x37\x6c\x1e\x77\xa7\xb3\x19\x7a\x17\xbc\x00\xc0\xc9\xa4\x1d\x54\x2a\x84\x87\x90\x51\xbe\xd3\x50\x00\x12\x9e\x06\x12\xed\x9c\x63\x4a\xf4\x08\x84\xf5\x95\x79\x98\xc4\x27\x3d\x14\xc7\x46\x0e\xc6\x3d\x08\x2c\x2a\x0d\xcb\xf2\x52\x8b\x5d\x07\x61\xc9\x4d\xad\xc8\x01\xa4\xb8\x16\x8c\xc7\x1b\xd3\x85\x63\xea\x8a\xf7\xb1\x97\x87\x61\xf5\x98\x5e\x89\xc2\xc6\xe3\x05\x85\x62\xab\x2b\xee\x02\x57\x5c\x77\xbc\x9e\xb0\x90\x1d\x67\x7e\xd3\x7d\x5c\xd7\x81\x99\x51\x23\x0c\x7a\x5a\xcc\x79\x89\xd4\x7a\x88\xa4\xf4\x6a\x1f\xc5\xdd\x4b\x81\x0a\x0f\xc5\x7f\xfa\xf6\x37\x4d\xf5\x89\x1b\x3f\xa2\x90\xd0\x49\x6b\xec\x39\x0c\xb6\x2f\xc4\xe8\xe0\x42\x7a\x92\x52\x38\x28\xf9\x08\x1f\xd2\x0b\x72\x2f\x9d\x95\xc2\xf1\xde\x28\x86\x29\xbb\xf7\x23\x7c\x38\x8a\x23\x82\x5e\x83\x21\xac\x0d\xe3\x11\xe1\x5a\x21\x65\x1b\x4c\x6b\x37\x15\x66\x6e\x49\xea\xfc\x2c\xb9\x00\x0a\x63\x5d\xef\xa6\x31\x55\x3f\x2d\x96\x1f\x8a\x69\xec\xc2\x21\x81\x9d\x88\x42\x69\x50\x6c\xda\x5e\x47\xe9\xba\xfe\xda\xd5\x46\xc2\x26\x10\x79\x73\x1d\x0d\xd8\x70\xaf\x9b\x22\x6c\x7f\xaf\x3f\x95\x19\xde\xa7\x2e\x79\x60\xa3\x01\x4e\x51\xb7\x99\x1d\xf9\xda\x61\x9c\x1c\x44\x71\xea\x81\x11\xa6\x28\x6e\x7a\xdb\xb5\x7a\xad\xee\x4d\x02\x7b\x10\xd8\x69\x9c\x75\x64\x5c\x76\xfd\x15\x7d\x10\xa4\x0d\x78\xd6\x40\x2f\x3a\x0c\x92\x3a\x5a\x35\xf8\xc1\xfc\x23\x72\xba\x6e\x15\x5c\x9f\x3c\xd6\x71\xb1\x6a\x5e\x7e\x64\xf4\xa2\x5b\x72\x5c\x74\xf9\xc5\x46\x45\x17\x7b\xcc\x63\xa2\xeb\x2d\x1e\x11\x43\x46\xac\x65\x05\xec\xad\x67\x55\x01\xdc\x0d\xea\x0c\x78\x76\x2f\xbb\x3b\x72\x1a\x89\xca\x90\x18\x46\xab\x4a\x29\x54\x21\x1d\x72\xa9\xd0\x25\x7f\x83\xf1\xfb\xf2\x41\xc0\xed\x2f\xd6\xae\x7f\x79\xef\xfa\xed\x6b\xfb\x77\xef\xdd\xd9\xbb\xb3\xf7\x95\xbb\xd7\xef\x2b\x47\xfc\x85\x1f\xe5\x34\xb2\x73\xa5\x78\xb5\xa8\x69\xd6\x4c\xe8\x32\x2b\x26\x5b\xc9\xc7\x6b\xd5\xe4\x3a\xe0\xd7\xed\x25\x11\x48\xff\x7d\x8b\xec\xb1\xfc\xa8\x2d\x45\x81\x72\xe3\xf6\xb1\xa3\x42\xc5\x63\x67\xb5\x36\x75\xf4\x0a\xd4\x55\xee\x36\xd0\xb1\x02\xcd\x9a\x9b\xfe\x18\xab\xa8\x12\x1e\xd4\xe0\xc2\x20\x7a\xa0\x82\x34\xcd\x74\xae\x63\xab\x02\x8a\xaf\x34\x19\x97\xc5\x32\x5d\xf1\x65\x97\xe8\x65\x68\xbb\x5f\x25\x2d\xca\x78\x30\xda\x36\x3c\x4d\xa1\x26\xeb\x11\x18\x33\xbf\x0e\x34\x93\x10\xd8\x5c\x98\x52\x65\x70\xbf\xd0\xfe\x0d\x99\x6e\xad\xa9\x03\x84\xbb\x52\x49\x21\xde\x18\xb4\x18\xe3\xd9\x56\xa1\x9d\x30\xbf\x67\x69\x6e\x6c\x2b\x0c\x43\x24\xfb\x56\xa9\x20\x71\x3b\x3a\x3d\x16\x57\xfc\xab\xc9\x08\xd3\x26\x69\x79\xf2\x77\xb5\xc3\x12\xbc\xb6\x4b\x9a\xdd\x00\x1d\xd8\x47\x7c\x1d\xcc\xbb\x14\x9c\x8d\x74\x1e\x8b\xe1\x2c\x26\xc5\x89\x4f\xe9\xec\x16\xd8\xaa\xb7\xe7\x19\x0e\xc5\xc2\xce\xc7\xea\x5e\x98\x35\x2c\xee\x79\x33\x4f\x55\x28\xc1\xb9\x98\x9c\xd2\x47\xe0\xe3\x65\x92\xcd\xd9\x9c\x65\x98\xf5\x09\x6e\x18\x66\xe5\x09\x4e\x63\xce\x2f\x45\x3a\xdd\xd7\x4f\xac\x58\x43\xa6\xbc\xce\x90\x39\xf3\x49\xe6\xcc\x37\xb8\x10\x87\x4f\x70\x50\xd6\x6d\xcc\x37\x87\xce\x80\x9e\xbd\x0d\xd5\xa9\xc0\x3b\x6d\xb6\x5a\x17\x3e\x73\x01\x78\xac\xa1\xd6\x85\xf4\x33\x17\x90\x82\xbf\xee\x47\x0f\xc7\xec\x66\x1d\x20\x91\xfc\x99\x06\x14\x5f\xfc\xa4\x43\x93\xe1\xf8\x08\x91\x60\xa4\x3e\xa1\xec\x17\xe4\x7e\x88\x62\x14\xa5\xe3\x94\x46\x74\x94\x8e\x0f\x12\x3c\x4a\x83\x4c\xa5\x07\xa3\x40\x55\x96\x9a\xb4\x5e\x2f\x8a\xc7\x34\x19\x44\x34\x48\xe4\xd7\x44\x7d\x6d\x51\xd4\x0e\x46\x03\x99\x1c\x59\x89\x91\x93\x96\xca\x0e\xe8\x6a\x77\x9b\x7e\xeb\xeb\xbd\x76\xd0\x83\x63\xbf\x15\x93\x76\xd0\x53\xc8\x7c\x66\xeb\x48\x65\xea\xa3\x23\xa8\x92\x55\x83\x5f\x8f\x20\x4a\x46\x27\xed\xf1\xab\xa3\xe0\x44\x75\x50\x15\x78\x38\xee\xf4\xc7\x69\x3a\x4e\xfb\xd9\xae\x0d\x22\x4a\xc6\x47\x90\xd0\x31\xc2\xdd\xc0\xdf\x6d\xa2\x87\x63\xf8\x50\xe5\x42\x1d\xa8\x46\x7c\x30\x8e\x83\x64\x94\x42\xf3\xc5\xfa\x80\x3a\xf9\xf4\x44\xd7\x02\xb1\x4e\x82\x58\x25\x8a\xe6\x5f\x1d\xa1\xd7\x54\xca\x6b\xac\xad\x36\x50\xeb\x99\x4d\xbf\x18\x1c\x91\x35\x4d\xdd\xa2\x38\x80\xc7\x7a\xf6\x8f\xd3\x82\x21\x1e\x0d\x44\xa2\x1f\x05\x38\x8a\x4f\xc6\xfe\x41\x10\x8d\xfd\x6e\x80\xa2\x43\x9c\x8c\xfd\x61\x10\x11\x88\x69\x1f\x32\x90\x24\x3c\x2d\x0d\x4e\x70\x32\x1c\xfb\x34\xe8\xc3\xc0\x4f\x51\x3a\x4e\xa1\x6e\x37\x45\xb2\x95\xaf\x47\xac\xbe\xf2\xef\x7c\x06\x8f\xa0\xc2\xae\x07\xad\x69\x4b\x9d\x4e\xd0\x7c\x12\x9f\x75\xab\x70\xc1\xfc\x22\xfd\xf5\x44\x8e\x4d\x00\x89\x49\xe4\xb0\x9c\xde\x20\x39\x32\x1f\x18\x9c\x5b\x10\xd0\x69\x3e\x3b\x9f\x6c\xca\xd5\x82\x4f\x03\x1f\xa6\xc1\xae\x83\x6d\x92\x29\xef\xa7\xfd\x24\xdb\xa3\x0e\x41\xa9\xd8\xae\x3e\x4a\xc7\x66\xbc\x90\xde\xcd\xc1\xc3\x16\x82\x6d\x55\xea\x21\xca\x6d\x66\x7f\x94\x8e\x91\x2a\x37\x4a\x4b\x37\x6e\x0e\x41\xbe\x0e\x21\xb6\xd1\xd1\xab\x9d\xad\x6e\x35\x64\x0f\xcd\x76\xb0\xd3\xd1\x43\x6b\x9d\xbe\x96\xe9\x6a\x37\xa2\xd1\x41\x94\xda\xdd\x6d\x03\x44\x08\xe4\xeb\xf7\x6e\x84\x08\xa3\x61\x1e\x63\x0a\xf8\xd3\xf4\x21\x4c\x86\xdc\x71\x62\xcb\x1b\x44\x2c\x61\x20\x76\x86\xd7\xe9\xa3\xb8\xeb\x01\xf1\x97\xc8\xc4\x94\x3b\x91\x4f\xe1\x43\x31\x97\xde\x20\x39\x82\xac\x4c\x22\xc9\x80\xd7\x49\x8e\x3d\xe0\x3d\x40\x58\x54\xf9\x5a\x32\x38\x40\x2c\x87\x00\xf8\x5e\x1a\x61\xce\xdf\x70\x76\xb6\xe5\xc1\x57\x47\x68\x28\xa4\xe9\x1e\xc2\xbd\x84\x0c\xb8\x8e\xc1\x03\x1e\x11\x0f\xd1\x07\x09\x86\x27\xac\xd1\x21\xec\xb0\x1a\xb8\xe5\xb7\x00\x7a\x28\xed\xb3\xdf\x7d\x08\x87\x1e\xf0\xbe\x09\x23\x76\x16\x78\xc3\x24\xe6\x3b\xbe\xc0\x90\x7a\xd6\x29\x7f\xa6\xe6\xad\x17\xbe\xfe\xb5\xf4\xb3\x9f\xb9\x00\x48\x78\xc1\x6f\x7d\xed\xf8\x42\xb5\xbd\xd9\xda\xbf\xf0\xb5\xb4\xda\x0e\xfc\x56\x54\x7d\xed\x6b\xdd\xf6\xe6\x67\x82\x0b\x00\xcb\xef\xec\xcb\x66\xe0\xb7\xae\x54\xbf\xda\x96\xdf\x3f\xcb\xbe\xa3\xf0\x82\x9b\x76\xc1\xb0\xde\x49\xce\xa0\x02\xe0\xd0\x18\x54\x5c\xc6\x5c\xba\x09\x6b\xd6\x24\xb4\x78\x78\x0e\x9a\xbc\x9c\x1c\x43\x72\x35\x4a\xa1\x1f\xb4\xc3\x8d\xba\x13\x22\xc8\xad\x53\xf1\xa0\x61\x1d\x20\x53\x39\xbe\x8c\x2e\x61\xc6\xb6\x87\xb4\x85\xdb\x00\xd6\xf4\xaa\x6b\x91\x56\x3d\xd7\x02\x69\x35\xb2\x99\x1a\x33\x33\xdd\xc4\x47\x90\xa4\xb0\x24\x6f\xbd\x24\x6f\x51\xe3\xf5\xb6\x13\x82\x28\x38\xf5\x61\x08\xc7\xe3\xd3\x49\x60\x8f\x4d\xe8\x8c\xd4\x78\x3c\xf2\x03\xbb\x09\xbe\x9d\xc2\x6c\x02\xcf\x26\xe7\x5c\xe8\xff\x39\x83\xa3\x59\x08\xc5\x10\xa5\xe3\x71\xcb\x3a\x5a\x0c\x0f\xc5\xd3\x75\x9d\x4d\xd6\x68\xb6\x57\x3c\xd1\xde\x49\x23\x3f\x98\xac\x25\x3e\x63\xc5\xac\xe4\x00\x44\x3c\xc9\x45\x50\x19\x0a\xf0\x70\xad\x57\xa3\x4e\x1f\xfa\xc1\x04\xf5\xfc\x0d\x27\x5c\x5a\xa5\xe2\xfe\xe6\x92\xf5\x20\xe3\x3c\x33\xc8\x1a\xb3\x7a\x7b\x7d\x94\xae\x1f\x90\xe4\x38\x85\x64\xbd\x9b\xc0\x74\x1d\x27\x74\x3d\x1d\x0d\xf9\x9d\xba\xa0\x46\xb0\x3e\x14\x57\x70\xa9\x6e\x5b\x67\xd7\xa0\x75\x98\x5e\xac\xa6\xfd\x68\xd0\x5c\xef\x53\x3a\x6c\x5e\xb8\x70\x88\x68\x0d\x25\x17\x4e\x5e\x7c\x65\x8b\x1c\x7a\x96\x57\xee\x91\x56\x25\x16\x54\x6e\x94\xa0\xfb\x5d\xd4\xa1\xc2\x6d\x79\x17\xc6\x90\x42\x95\x06\xe0\x24\xb5\x42\xc6\x9d\x5a\xc3\x92\x33\xca\x18\x8e\xc8\xa1\x1a\x31\x31\x88\x36\xdf\x9b\xbf\xa9\x08\xdd\xe9\x7e\x87\x95\x78\x25\x85\xdd\x70\xa3\x2e\x43\x20\xa4\xbc\x96\x16\x6c\x8f\xc7\x7e\x26\x45\xaa\x44\x6d\xa9\x05\x0c\x82\x89\x28\x68\x78\xe9\x22\xdb\xf6\x25\x2d\x89\x4e\x27\x6b\x79\x44\xa5\xba\xa2\xc5\x6f\x28\x35\xfb\xae\xaa\x2f\xe4\xa2\xd0\x50\x20\x8e\x4d\x57\x74\x8a\xec\x8a\x11\x5c\x89\xab\x62\x30\x99\x00\x33\x94\x79\xd3\x17\x0b\x8d\x86\x33\x5e\xe1\x48\x8d\xbb\x6c\x83\x25\x4c\x40\x17\xa5\xe5\x73\xa6\x8a\xf2\xa9\x77\xca\x9a\x94\xb9\x66\xd1\x9d\x90\xf2\xf9\xc8\x14\xcb\xde\xe0\xb3\x11\x06\x26\x40\xe4\x28\xf2\x90\x6f\x46\x42\x9a\x12\xe5\x17\x20\x27\x2e\x8a\xa2\x08\xc1\x02\x9b\xb2\x0c\xc5\x0b\x26\x86\xd0\x3c\x4a\x3b\xaa\x92\x69\x0d\xd9\x64\xc9\x1e\xcc\x39\x5a\x92\xc6\x4d\xbc\x2d\xd0\x82\xf9\xba\x0d\x55\x5c\xb8\x17\x91\x53\x37\x43\xbd\xcd\x6a\xd4\xd3\x53\x66\xf9\x30\x73\x02\xc1\x7e\x41\x1d\x8f\x65\x53\x4a\x34\xb4\xbb\x79\x2a\x4c\xfd\x25\xc3\x22\x43\x4e\xbb\x2b\xc0\x4e\xd2\x83\x15\x34\xfd\xc6\x46\x18\x0e\x23\x92\xc2\x1b\x71\x12\x51\xee\x14\xdf\x97\xc7\x93\xaa\x8e\xce\x5d\x5d\x90\x21\x08\xbb\xb4\x09\x37\xbd\x75\x6f\x93\x5a\xeb\xcc\x1d\x8e\x19\x7b\x69\x7f\x9e\x52\x85\xfd\x56\x05\x0b\x31\x95\xa7\x25\x5b\x38\xa2\xac\x3d\x41\xdc\xb3\x3f\x77\xcd\x0f\x46\x40\xb9\xaa\x07\x1d\x05\xf4\x14\xd0\x55\x40\x5f\x01\x43\xcb\x85\x7f\x1a\x6e\xc0\xf1\x98\x0a\xa5\x3a\x0c\xc0\x28\x44\x1a\x4e\x9d\x07\x4b\xbd\x30\xb3\xa0\x81\xdf\x0d\x49\x0d\x3e\x84\x1d\x6e\xe2\x81\x15\xc8\xe6\xa6\x1f\x76\x5b\x5b\x19\xbe\xc5\xd9\x89\x36\x07\xd7\x6b\x8f\xc7\x25\x9f\xfa\x6d\x83\x03\xe3\xe0\x86\xeb\x08\xaf\x47\x01\x43\x47\xfa\x4d\x1a\x6e\x7a\x9f\xf1\xb4\x31\x40\x27\x8c\x5a\xc3\x36\x18\x55\x2a\x51\xab\xdf\xae\x54\xfc\x4e\xe8\x68\xae\x3a\xd1\x10\x51\x41\xcb\x3b\x01\x18\x96\x7e\x1c\x06\xe2\x25\xe5\x30\x8e\x3a\xd0\x17\xd1\x2c\x0f\xaf\x3f\x1c\xfa\x43\xe0\x21\x2f\x00\x1d\xa3\x86\x1f\x84\x89\xe2\x21\x07\xcf\xd7\x2b\x95\x0d\x7f\x18\xfa\x71\x98\xb4\x06\xd5\x46\x3b\x68\xd5\xdb\x81\x1a\xd0\x4b\x83\x6a\x35\xb8\x24\x31\xe5\x99\x62\xc6\x2b\xb1\x3c\xa0\x13\xc6\x82\x59\x54\x6d\x0e\x41\x87\x11\x57\x23\xc3\x99\xa9\x60\xca\x88\xf3\x16\x16\x12\x3e\x76\xc5\xf7\x0c\x4d\x37\x2c\x3e\x7d\x32\x91\x90\x0a\xc4\x7b\x41\x4e\xac\x9c\x8d\x0e\x38\xeb\x40\xcc\xd7\x59\xcb\x6c\xe9\x59\x83\x9d\x17\x29\x9f\xaf\x13\x12\xd4\xf3\x6d\x4b\x8c\xc0\xd1\x26\xb9\xd6\x19\xc2\xe2\x46\x7e\xd9\xbb\xf5\xf2\x8b\x11\x49\x33\xf9\x65\x6a\x8d\xf5\xe7\xc5\x64\x84\xbb\x2f\xe9\xa2\x6e\x46\x6e\xf3\x7b\x50\x9c\xb5\x60\xcc\xe2\x24\xea\x56\x9d\xa8\xda\x05\xc6\x1a\xd2\x7f\xd9\x8c\xf5\x67\x5b\xca\xa8\xa3\xc9\xb7\xa4\xbf\x81\x0f\x81\x08\x88\xc1\xfe\xdb\xa8\xf3\x4e\x6f\x90\x1c\x87\xcf\x28\xbd\x88\xc3\xcc\x11\x58\x8f\x4c\x1c\xda\xd7\x20\xa9\x79\xca\x66\x4a\xcb\xf0\xcd\x03\x0f\x1c\x0d\xe0\x78\xec\x0b\x40\xbf\xe0\x80\xb5\x38\x4a\xe9\x4d\x69\x79\xe9\x5d\xf0\x82\xcd\x46\x10\x00\x5c\x12\x61\xb9\x2a\xcc\x8d\x95\xa5\x26\xbb\xde\x48\x5b\x40\x75\x15\x7d\x24\x95\x90\x3b\x82\x8a\x46\xa1\x90\x6e\x7a\x6e\x78\x73\x0f\x24\x32\x51\x18\x39\x55\x33\x5f\xa3\x90\xdd\xee\xd8\x7f\x23\x75\x33\x79\x00\x4f\x52\x5f\xce\xd6\x37\xd3\xda\x3e\x8c\x1e\xec\xa7\x10\xe2\x00\xc4\x61\xfd\x52\x7c\x79\xa4\xe8\x60\xac\x5e\x3e\x74\xc2\x51\x2b\x6e\xaf\xb1\xc3\xbf\xe3\x0c\x13\x02\xf5\x60\x17\xfb\x1d\xe0\x55\x19\x71\xf4\x82\xf1\x58\xc6\x3a\xe9\x04\xcd\x7c\xf6\x04\xd4\xd9\xa9\xe2\x16\x48\x55\x81\x60\xe2\x17\x77\x1b\x87\xf5\x4b\xd8\x3c\xc8\xc0\x5c\x76\x60\xf5\xd3\x27\x3e\xbb\xec\x07\xfc\xf9\x3d\x88\xec\x07\xf8\x73\x54\x23\xc6\xed\x66\x51\x75\x3e\x04\x69\xd1\x7e\x18\x44\xb4\x5f\xd5\x8f\xf2\x54\x48\xc2\x83\xa5\xa2\xaf\xaf\x6c\x31\x57\xb6\x98\x2b\x5b\xcc\x27\xd2\x16\xd3\x35\x35\xc8\xbe\x09\x97\xd9\x6e\x45\xb4\x5f\x8b\x0e\x52\x9f\x2c\x75\x20\x44\x07\xe9\x9c\x8f\xf9\x24\x9b\x80\x67\x3c\xc5\x2b\xa6\x5d\x9d\x64\x45\xbc\x56\xc4\x6b\x45\xbc\x56\xc4\xab\x80\x78\x75\x92\xa5\xa9\x57\x27\x39\x2f\xf2\xd5\x5f\xd1\xaf\x15\xfd\x5a\xd1\xaf\x15\xfd\x2a\xa4\x5f\xfd\x47\x20\x60\xfd\xf3\xa0\x60\xdd\xee\x23\x79\x75\x81\x35\x02\xbb\xa3\x0e\xf4\xfd\x42\x1f\x0e\xc2\x35\xb2\x0f\x83\x4d\x09\x51\x6e\xa7\xb8\xcc\x80\x74\xbb\x21\x2d\x1e\x0e\x52\x38\x1c\xd4\x1e\x0e\x32\xef\x70\xa4\x68\x6e\x9f\x64\x2b\x7a\xbe\xa2\xe7\x2b\x7a\xfe\x69\xa2\xe7\x29\xc2\xcb\x92\xf3\x14\xe1\xf3\xa0\xe6\x29\xc2\x2b\x7e\x74\x45\xbf\x56\xf4\x6b\x45\xbf\x8a\xe9\xd7\xd2\xfc\x28\x2b\x7b\x1e\x14\x8c\x46\x2b\x06\x6c\x45\xc0\x56\x04\x6c\x45\xc0\x0a\x08\x18\x8d\x96\x66\xc0\x68\xf4\xa8\x0c\xd8\xda\x9c\xe4\x6b\x6b\x45\xbf\x56\xf4\x6b\x45\xbf\x3e\xf5\xf4\x6b\x2b\x00\x58\x3c\xcb\x40\xfc\x25\x47\x8e\x94\x6d\xf9\x18\xa0\xa5\xa9\xd9\xd6\x39\x71\x63\xab\xfb\xe4\x8a\x9c\xad\xc8\xd9\x8a\x9c\x15\xb3\x63\x4b\xdf\x27\x59\xd9\x73\xa0\x60\x9d\x03\xb2\xf2\x54\xb8\x22\x60\x2b\x02\xb6\x22\x60\x79\x02\xc6\x88\xc3\x92\xf4\x8b\x15\x3d\x0f\xf2\x05\x51\xbc\x22\x5f\x2b\xf2\xb5\x22\x5f\x2b\xf2\x95\x27\x5f\x10\xc5\xcb\x92\x2f\x88\xe2\xf3\x20\x5f\xf1\x6b\xdb\x2b\x71\xd8\x8a\x7e\xad\xe8\xd7\x8a\x7e\x15\xd0\x2f\x46\x1d\x96\x25\x60\xac\xec\x79\x50\xb0\xd5\xfb\x84\x15\xfd\x5a\xd1\xaf\x15\xfd\x2a\xa2\x5f\x4b\x3f\x4f\x38\x9f\xd7\x09\xab\xc7\x09\x2b\xe2\xb5\x22\x5e\x2b\xe2\x55\x46\xbc\x96\x95\xdd\x9f\xd3\xd3\x84\x2e\x3a\x3a\x97\xa7\x09\x17\x1e\xf5\x69\x42\x17\x1d\x9d\xc3\xd3\x04\xf8\x70\xb8\x22\xe6\x2b\x62\xbe\x22\xe6\x2b\x62\x9e\x23\xe6\xf0\xe1\x70\x49\x5a\x0e\x1f\x0e\xcf\x81\x94\xc3\x87\xc3\x41\x63\x45\xbd\x56\xd4\x6b\x45\xbd\x56\xd4\xab\x88\x7a\x0d\x1a\xcb\xd3\xaf\x41\xe3\x1c\x28\x58\x2f\x4e\xe6\xf7\x90\xbd\xa2\x60\x2b\x0a\xb6\xa2\x60\x9f\x22\x0a\xc6\xa9\xc3\x92\x14\x8c\x97\x3d\x0f\x0a\x46\x92\x11\x5e\xea\xb1\xff\x8a\x84\xad\x48\xd8\x8a\x84\x7d\xd2\x49\x18\x27\x0f\xcb\xd2\x30\x5e\xf8\x1c\x88\xd8\x61\x67\x45\xc1\x56\x14\x6c\x45\xc1\x56\x14\x6c\x2b\xe0\xcf\xaa\xea\x6d\xbd\x79\xc2\x30\x44\xbb\xf5\x26\x02\x91\x08\x9c\x93\x9a\xf4\x68\xb7\xde\x8c\xc0\x28\xd4\x3e\x31\x93\x00\xc4\xe6\x57\xaa\xdd\x54\xb3\xcc\xa3\xdd\x98\xbb\x10\x8e\x77\x47\x4d\xec\xb7\x62\x30\xfa\x8b\xb8\xbd\x14\x59\x3c\xec\x9c\x07\x4d\xec\x9f\x0c\x93\xa5\xde\x38\x2c\x4a\x13\xb9\x93\xee\x0c\x59\xcc\x12\xc5\x0d\x97\x28\x56\x2a\x53\x49\x62\xd1\x36\x2b\x21\xbc\x2b\xfa\x51\x46\x3f\x96\xa3\x1e\xe9\x90\xc0\xa8\xfb\xa9\x21\x1c\x36\xab\xc3\x37\x8c\xf4\xfc\xcf\x12\x00\x5f\x8b\xcb\x6c\x70\x5e\xd3\x39\x6c\x71\x34\x18\xad\x9e\x01\xac\xf8\x9e\x4f\x16\xdd\x5a\xf1\x3d\x8f\xfd\x55\x39\xa3\x13\x4b\x3f\x2a\x67\x85\xcf\x81\x96\xc5\x9d\xc2\x08\xd4\xa5\xd7\xbd\xf9\xc3\x7a\xac\xa8\xdd\x93\x42\xed\xb0\xa1\x76\x64\x79\x6a\x47\xf2\xd4\x8e\xcc\xa2\x76\xc4\x50\x3b\x32\x27\xb5\x23\x8b\x53\x3b\x12\xb8\x3d\x7d\xd2\xa9\x1d\x3e\x37\x6a\x87\x14\xb5\xc3\x21\x51\xb7\x3c\x5c\x72\xcb\xc3\x45\xb7\x3c\xfb\x26\x97\x8c\xc7\xec\x4f\xba\x5b\x6f\x9a\x9b\xdf\x67\xd3\xe0\x02\x0f\xfc\x73\xd8\xe9\x06\x7e\x2b\x01\xe9\x72\x97\xbb\xb8\x33\x08\x51\x31\xb5\x4c\x0a\xa9\x25\xb2\xa9\x65\x32\x2f\xb5\x4c\x0e\xab\x70\xc5\xfa\x7d\x92\x89\xe1\x8a\xf5\x7b\xb2\x88\xe1\xc7\x48\x68\x1f\x27\x87\x4b\x4a\xec\xe3\xe4\xf0\xfa\x79\x30\x7b\xc9\x61\xa3\xbe\x22\x5f\x2b\xf2\xb5\x22\x5f\x2b\xf2\x55\x44\xbe\x1a\xf5\xe5\x09\x58\xa3\x7e\x4e\x14\x6c\x65\x78\xbf\xa2\x60\x2b\x0a\xb6\xa2\x60\xc5\x14\x6c\x59\xd3\x7b\x5e\xf6\x7c\x28\xd8\xca\x07\xc7\x8a\x80\xad\x08\xd8\x8a\x80\x15\x12\xb0\x65\x5d\x70\xb0\xa2\xe7\x40\xbe\x06\xd1\xc3\x95\x71\xc3\xa7\x76\x9f\xaf\x8c\x1b\x16\x34\x6e\x18\x44\x0f\x1f\x8b\x69\xc3\x20\x7a\x78\x1e\x9b\x7b\xb9\x70\x6b\xab\xcd\xbd\xda\xdc\x9f\xca\xcd\x8d\xf0\xe3\xd9\xdc\xe7\x12\x8d\x6c\x90\x9c\x4f\x6c\xc9\xbf\x78\x54\x07\x0e\x83\xe4\x3c\x62\x4b\x0e\x46\xf1\xa3\x99\x69\xce\x3b\x1e\x9f\x7d\xe4\xf1\x60\xdd\x3a\xfb\x01\x19\x26\xc7\x67\x39\x1e\x7c\xc7\x0c\x93\x63\x41\x6d\x96\x1b\x89\x61\x72\x7c\x0e\x03\x41\x22\xdc\x4d\x06\xab\x3b\xfa\xea\x8e\xfe\x89\x3a\xde\x57\x77\xf4\x45\x4f\x79\x1f\x87\x9e\x4a\xcf\x6e\xc3\x4a\xc5\x4b\x39\x90\xfd\xa0\x3b\xb3\x6b\x93\x00\xd9\x8e\x5a\x86\x93\x66\xc1\x47\x58\xa9\x4c\x69\xce\x59\x56\x61\x18\xea\xf4\x0d\x05\x9b\x05\xbc\xab\x70\x6b\xea\x06\x03\xc6\x11\x2f\x41\x72\x05\x31\x0c\xd3\x32\xf6\x44\x31\x42\x20\x09\xd5\x85\x07\x44\xe1\x69\x17\x76\xd0\x20\x8a\xd3\x66\x7d\x62\x28\x64\x6a\xc4\x1f\x91\x5a\xdf\x72\xda\x9e\x6f\x54\x2a\xa2\xde\x8d\xd0\x7c\x6c\x35\xda\xbb\xf6\x8f\x26\xa3\x55\xa4\xa6\x2a\xe7\x3b\x25\x31\xbb\xd1\x67\xd4\x69\x43\x9c\x03\x79\x52\xab\x4c\x93\x36\xc2\x10\xea\x2a\x76\x0d\xd8\x8c\x34\x08\x36\x79\x5f\x44\xdf\xfd\xa0\x46\x93\x1b\xe8\x21\xec\xfa\x89\x5f\x07\xc8\xdf\xaa\x83\x34\x08\xf8\x3e\x85\x95\x4a\x23\x0c\xcd\xe2\xe3\xbd\x1b\x49\xe1\x0e\x88\xc3\x91\x11\xf0\x6c\xfa\x4e\x9d\x9f\x8d\x4b\xaa\x9d\x88\x6a\xb7\x72\xd5\x76\x94\xc1\x69\x2f\xec\xb4\xea\x6d\xd0\x0d\x3b\xad\x46\x9b\x61\xd1\xbd\xdc\x13\x59\xfa\x61\xab\x0b\x7a\xed\xb5\x5e\xd8\x17\x39\xfa\xad\x46\x7b\xa2\xda\xef\xb9\xbd\xfa\xac\xdf\xad\xf6\x82\x32\x2c\x64\xa1\x39\xc6\x61\x22\xfa\x5c\x74\xfc\xa6\xf6\xf1\x3b\x9a\xf7\xf8\x5d\xfa\x61\x34\xd1\x5b\x49\x1b\xa1\x11\x6e\x73\xb6\x49\x76\x45\x47\xf8\xa3\x4a\x18\x34\x7d\x12\x6e\x12\x20\x88\x49\xe8\xc3\x70\x93\x1d\xc2\x28\xbd\x1d\xdd\xe6\xc7\xb1\x87\x39\xcb\x66\x2e\xa1\x64\x3c\x26\x7f\xd1\xd8\x08\xeb\xbb\xb7\xa3\xdb\x4d\x78\xb9\xbe\x5b\xa5\x7e\x95\xb5\xd8\xf4\x61\x68\x0e\x0c\x3f\xa8\xa5\xc3\x18\x51\xdf\x83\x5e\x00\x20\xab\xda\x6a\x78\xd3\xf3\xd8\x26\xee\x44\xd4\x87\x6c\x7e\x58\x26\x93\xd0\x68\xef\x6e\xb2\xff\xab\xa4\x59\x25\x01\x9f\x98\xa2\x4a\xe7\xab\x64\x93\x34\x59\x1d\x2e\x01\x25\xfc\x84\x94\xff\xeb\xc5\xae\xf6\x87\xac\xaf\x6a\x7d\x59\xe3\x19\xe1\xc3\x61\x26\x8f\x48\x9b\xd8\x9c\x9d\x1c\xda\x56\x7d\x39\xf3\x3d\xf1\x62\x95\x14\x53\x19\x5c\xb8\xb8\x88\xbd\xb8\xf0\x9c\x8b\x2b\x45\x87\xab\x80\xa6\x2b\xce\x6e\xc5\xd9\x7d\x5a\x39\xbb\x69\xda\x17\x46\x1c\x96\xd4\xbe\xb0\xa2\xe7\x20\xc3\x49\x97\x13\xd0\xae\xa8\xd7\x8a\x7a\xad\xa8\xd7\x27\x9e\x7a\x2d\x4f\xbc\xce\x85\x76\xbd\xba\x8a\xfd\xb7\x22\x5e\x2b\xe2\xb5\x22\x5e\x45\xc4\xeb\xd5\xa5\x63\xff\xb1\xa2\xe7\x10\x4b\x3e\x1d\x1d\x9c\x8b\xba\xa8\xfa\xa8\xea\xa2\x74\x74\x70\x0e\x4a\x12\x1a\xad\x38\xd1\x15\x31\x5f\x11\xf3\x15\x31\xcf\x13\x73\x1a\x2d\xcb\x89\xd2\xe8\x3c\x38\xd1\x55\x18\xfd\x15\xf1\x5a\x11\xaf\x15\xf1\x2a\x23\x5e\xcb\x46\xe2\x39\xa7\x20\xfa\x94\x8c\x70\x67\x45\xbf\x56\xf4\x6b\x45\xbf\x56\xf4\x2b\x4f\xbf\x18\x75\x58\x96\x80\xb1\xb2\x8f\x97\x82\x25\x58\xd2\x2f\x4d\xbe\x12\x5c\xed\x26\x1d\xbe\x7c\x8a\x3c\x4f\x15\x15\x58\xc0\xeb\xd4\xa2\x14\x0e\x3f\x01\xb6\xe8\x9f\x42\xff\x4c\x4f\xa6\x2d\xfa\x99\x3b\x66\x5a\x26\x1c\x5e\xd1\x4e\xa6\x2a\xb9\x06\x1f\x52\x88\xbb\xfe\x69\x27\x19\x0c\x47\x14\x36\x0b\x85\x53\xb4\x8f\xd2\xda\x7e\x3a\x62\x1b\xbe\xa5\x36\x6f\x5b\x59\x9d\xb0\x5d\x17\xb0\x69\x9b\x2c\x43\x0b\x8e\x11\xee\xba\x96\xc7\x2b\x4a\xb0\xa2\x04\x2b\x4a\xf0\x04\x50\x02\xb1\x75\x1f\x0f\x1d\x98\x4e\x00\x46\x14\xc5\xe9\x05\x78\x04\x31\xad\xc6\x28\xa5\x10\x43\xb2\x72\x45\xf9\x09\xbc\xf8\x7c\x0a\x09\xdc\x13\x7d\xf1\xf9\x38\xd2\xb9\xfd\xfd\x4e\x32\xc2\x34\x0d\xad\x41\x15\xf5\x9d\x46\xdd\x6e\xda\x44\x80\xc0\x41\x72\x04\xd3\x66\x32\x99\x94\xd1\x45\xb6\x2d\xea\x86\x88\x44\x3e\x04\x04\x60\x80\x82\x53\x58\xa9\x90\x4a\x05\x57\x2a\x7e\xb2\xb9\x09\xb8\xef\x4a\x51\xdf\x75\x46\x9e\x5e\x96\xd4\x29\xd0\x05\x84\x81\x74\xea\xde\x9e\x14\xb1\xe5\x24\x6d\x2f\x22\x87\x90\x36\xd9\x18\x02\x9e\x70\x3b\x1a\xc0\xa6\x40\x07\xb0\xa5\x7e\x10\x75\x1e\xa8\xdf\x3c\xc3\x9d\x21\xc3\x2a\xd5\x79\xf2\x24\x1b\x8b\x5b\x62\xc2\xfd\x76\x6e\x07\x20\x0d\x93\x56\xbd\x0d\x46\x61\xd2\x6a\xb4\x41\x1c\x26\xad\xad\xf6\x5a\xe4\x73\x7a\x6e\x21\x01\x4c\x02\x43\x42\xfc\x54\x28\x58\x1f\x25\x02\x01\xc8\x56\x10\xa6\x6e\x99\xd0\xc2\x89\x8d\x47\xa2\x29\x31\x52\xa3\x17\x75\xbb\x85\x43\x97\x04\x00\x4f\xf2\x18\x8e\x40\x0c\x70\x90\x41\x34\x1c\xe5\x91\x0b\xf1\x04\x1c\xa3\x38\xbe\xc6\x36\x4a\x72\xd2\x74\xf6\x98\x39\xc6\x02\xf0\xe8\xc3\xe0\x1e\x79\xe9\xb4\x23\xaf\xf0\x28\x9b\x53\x98\xb7\xc4\x66\xc8\x0e\xee\x1d\xdc\x81\xdc\xce\x3a\xfb\xc1\x9e\x28\x0c\x10\x9b\x28\x7e\x0a\x85\x68\x8d\xee\xe6\xb3\xfb\x18\x44\x20\x09\x9a\x49\xa5\x92\xd4\x12\xdc\x81\xbb\x84\x17\x8c\xc0\x8b\x49\x12\xc3\x08\xfb\x49\xad\x13\x0d\x19\x75\x0a\x82\x66\x49\x79\x9d\x95\x55\xa2\x73\xb3\x3d\x59\xb0\xa3\xb2\x2b\x09\x05\xa7\x0c\xb1\x82\x9c\xbe\xf8\xdc\x2c\xff\xa8\x1a\x46\x95\x0a\x72\x1b\xbe\xff\xca\xdd\xbb\x77\xee\xed\xdd\xdf\xbf\xfe\xc5\xeb\xb7\xf7\xf6\xef\xdc\xdd\xbb\x79\xe7\xf6\x7d\x9b\x36\x50\x9b\xae\xb0\xf3\x92\x25\x42\x40\x43\x75\x31\xaa\x75\x08\x8c\x28\xbc\x1e\x43\xf6\xcb\xf7\xba\xe8\xc8\x0b\x00\x09\xeb\x8a\xaa\xe5\x97\xbc\xef\x75\x62\xd4\x79\xe0\x59\x73\xaf\xf7\x09\xd9\xdc\x9c\x04\xe0\x94\x8d\xb1\x98\xd4\x82\x47\x42\xbc\xb2\x5d\xc8\xa9\x2a\x87\x55\x85\xfc\x7d\x42\x16\x31\x91\x81\xff\xf1\x82\xa0\x86\x30\xa2\x4e\x21\xb0\x51\x07\x1b\xf5\x00\xd0\x5a\x17\xa5\x43\xc6\x2b\x88\xcf\xb0\x30\xa9\xc1\x4e\x42\xc9\x52\x60\x85\xf5\x46\x63\x32\xf1\x83\x0c\x13\x06\x88\x72\x26\x9c\x7b\xfe\xb3\x5d\xf8\xfc\x67\xbb\x5d\xa9\xd8\xbf\x4c\x7d\xc8\x0f\x4e\x8b\xa7\x97\x02\xc4\xc8\x03\xf1\x83\x49\xc1\xaa\x13\x5f\x27\xa5\xf3\x4c\xf3\x5b\x77\x18\x1d\xc2\x2a\x45\x34\x86\xe6\xa9\xac\x4e\x5a\xce\x24\x44\x1c\x05\x29\xa4\x9c\xf0\x00\x4f\x56\x65\xbf\x23\x59\x2e\xf4\xfd\x4c\x93\x0f\x75\xee\xb0\x1e\xec\xb1\x56\xd9\xc8\x34\xe5\x93\x29\xcc\x1b\x4c\x21\x39\x62\x5c\x55\x00\xfa\x30\xea\x5e\x8b\x68\x54\xf6\x9d\x2d\x9c\x72\xaa\x2a\x0a\x1d\xea\x4e\x3a\x4d\x7a\x81\xe0\x55\x4f\x51\x57\xd6\x7e\x38\x42\xdd\x1b\x09\xe1\x99\x83\x49\x30\x29\x3a\xd4\x48\x70\x4a\x2a\x15\x52\xdb\xef\xc2\x21\x81\x9d\x88\xc2\x4a\x85\x31\x75\x49\x0c\x6b\xc7\x11\xc1\xbe\xf7\x4a\x8a\xf0\xe1\xfa\x37\x4e\x4f\xf9\x90\x4e\x26\xdf\x58\x17\x73\xb6\x8e\xd2\x75\x5d\xa8\x0b\xd6\xd9\xdc\x7c\xe3\xf4\xd4\x4c\x24\xcb\xca\x18\x27\x18\x75\x6b\xeb\xde\xa6\xdd\x46\xe0\x3c\x42\x29\xed\x10\x50\x02\xd2\x28\xe5\x86\xe4\xa7\x13\x40\x74\x24\x23\x54\x43\xdd\xb0\xa0\xa3\x00\xd5\x78\xf3\x21\xac\x7d\x33\x41\xd8\xf7\xbc\x00\x60\x31\x34\x48\x0d\x21\x19\xe1\x5a\xda\xe9\x43\x36\xe3\x8c\x7c\xfb\x5e\xd4\xa3\x90\xdc\x83\xb8\xcb\x8e\x8e\x2c\x5a\x6a\xd6\xbc\x00\x50\xb6\x13\x3c\x6f\x02\xba\xf9\x23\x90\x53\xad\x99\x7d\x22\x45\x48\xaf\xa9\x9d\xe7\x93\xdc\xd8\xdc\x39\xe6\xdb\x8c\x65\xab\xc5\x49\xf2\x60\x34\xf4\x3d\x92\x8c\x28\x24\xcd\x41\x84\x30\x1f\x26\x1f\xd7\xf6\x45\xda\x2d\xd4\x21\x49\x8c\x0e\xc6\x63\x5c\x13\x29\xe3\xf1\xe9\x24\xa8\x45\x1d\x8a\x8e\xe0\x1e\x89\x70\x8a\x18\xbe\x20\xc9\x61\x6a\xba\xb9\x86\x76\x11\xbb\x24\x0c\x50\x0a\x6b\xf2\x7a\xe2\xdb\x84\x34\xa9\xa1\x54\x32\x01\xb0\x3b\x1e\xcf\x35\xaa\x09\xa0\x00\x06\x93\x20\x68\x2e\x92\x7d\x32\xc3\x94\xca\xa2\x25\x72\x1b\xd9\xc4\x84\xf3\x03\x45\x17\xe1\x4e\x32\x3c\x99\x71\xdd\x7d\xbc\xd4\xe2\xbe\x40\x4e\x93\x8b\xec\x4e\x17\x8b\x87\x4d\xc4\x5a\xd1\xa6\xb7\x28\x5b\xf2\x00\xe2\x54\x2d\xd2\x2b\x7e\x90\xcf\x22\x4e\x00\x0f\xd4\x25\x4f\xb7\x2f\xa9\xfa\x43\x94\x52\x84\x0f\xf9\x6a\xdc\x8b\x0e\xfd\x40\x9e\xbe\x85\x4b\x8d\xc0\x34\x89\x8f\xe0\x3d\x78\x88\x52\x4a\x22\x8e\xa6\xd7\x49\x70\x0f\x1d\x36\x21\x3e\x42\x24\xc1\x5c\xe1\x10\xac\xd1\x9a\x5e\xe3\x95\x4a\xcb\x4b\xe1\x30\xe2\x77\x1c\x0f\x78\x43\x02\x87\x10\x77\x3d\xe0\x11\x38\x8c\xa3\x0e\xf4\xda\xb5\x5e\x42\xae\x47\x9d\xbe\xb5\x9e\x88\xa2\xdf\x28\xbd\x4b\x60\xca\x4e\x41\xab\xce\x16\x69\x07\x95\x8a\xe9\x23\x04\x9e\x1c\x67\xfd\x6c\x4f\x0e\xb1\xba\xc9\x0e\x11\x8d\x62\xf4\x1a\xdb\x4c\xec\x7c\x75\x6a\x9a\x30\xa6\x44\x96\xbf\xaf\x30\x6d\x7a\xeb\xe3\x75\x4f\x25\xdf\x15\x48\x37\x37\xea\x2a\xe5\x9e\x40\x5e\xdc\x27\xc4\x04\x08\x98\xfb\x2a\xd9\x63\x09\xd7\x44\xce\xd4\x79\x86\x9c\x19\x5e\x39\x3d\xd9\xd6\x6d\xa2\x90\xcd\x24\x71\x61\x34\xac\x2c\x8b\x44\xce\x0b\xd6\xc4\x95\x11\xd6\xf4\x0c\x54\x2a\xbe\xf5\x2b\xa4\x01\x50\x59\xe4\xc4\x54\x2a\x2c\x61\x23\x14\x39\x65\x62\x48\x4c\x3e\x39\x6d\x2a\x1f\xe6\xf9\x64\x62\x88\x83\x09\x40\xb8\x0f\x09\xa2\x37\x48\x32\xb8\x4b\xe0\x11\x4a\x46\x45\x43\xc0\xeb\xe6\x1f\xd7\x68\xa5\xe2\xcf\x44\xd4\xc0\x05\x28\x5b\x98\x52\x05\xb1\x59\x65\x34\x3e\xd7\x36\xe1\x7b\xaa\x26\x26\x8d\xd1\xb2\xee\x8b\x27\xbe\x87\xba\x8c\x37\x40\x5d\xf1\x1e\x53\xf1\x50\x76\x4e\x84\xbb\xf0\xe1\x1d\xf6\x91\x91\x57\x76\xa9\x62\x24\x23\xf0\xad\x3c\x01\x48\x42\x62\x3a\xa6\xad\x52\x55\x4a\x98\x00\xc8\x25\x4a\x21\xe1\x7f\xc4\x66\x2c\x18\x30\xce\x06\xb2\x6f\xf9\xe5\xc4\x3e\x21\xfe\x58\xb5\x03\x7d\x0c\x1a\x00\x06\x80\x53\x97\x59\x64\x41\xdd\x92\x23\xa7\x57\x42\xba\x53\x15\x3a\xce\x48\x0d\xa5\xc0\x36\x02\x91\xc0\x16\x4e\x43\x74\x1a\xa6\x6b\xe2\x5a\x5e\x32\x5a\x6b\xa9\x38\x85\xe1\x6c\x9a\x96\x4e\x21\x6a\xd9\x5d\x20\xd3\x83\xcd\x46\x30\x91\x62\x88\x45\x16\x01\x8f\x36\x24\xa6\x07\xd9\xb3\xc9\x56\x3a\x36\x83\x83\x02\x80\x2a\x15\x1f\x89\x11\x62\xdc\xb0\xf9\x46\x64\xe2\x28\x8e\x9d\xe8\x18\x57\xfc\x92\x91\x08\xd6\x12\x79\xdc\x4b\x59\x26\x99\x3d\x24\xc9\x12\x43\x52\x65\x43\x72\x84\x52\x74\x10\xc3\x3d\x41\xb5\x44\x56\xc9\x08\x76\x7d\xdd\xcc\xe9\x21\x74\x8e\x23\x25\x5a\xca\xf3\x33\xb2\x44\x00\x68\x08\x77\x95\x2c\xaa\x59\x07\x24\x6c\xb5\x2f\xd1\x6a\xf5\x92\xda\x4d\xb0\x45\xf9\x5b\x7a\xac\xe8\x45\x70\x4a\x6a\x23\x9c\xf6\x51\x8f\xfa\x38\x58\x3b\x20\x30\x7a\x30\xb1\x93\x8c\xcc\x73\x12\x80\x34\x21\x14\x76\x4b\xd0\x76\x3a\x95\xc7\xbe\x18\x73\xb7\x10\x23\xba\x1b\x75\x80\xc3\x56\x5b\xf3\x99\x57\xfc\x16\x6e\xb3\x6d\xdd\x6a\x9b\xed\x9c\x3f\xaf\x84\xa0\x9b\x47\x05\xc6\x34\x48\x74\x0f\x60\xb0\x06\xe3\x14\xae\xf3\x8f\x8a\x30\x9d\x0a\x59\xe9\x46\x43\x36\x25\x36\x01\x0e\xc4\x6e\x89\x78\xf0\x17\xbe\x15\x7d\x68\xef\x1c\x18\x04\x16\x41\x8c\x1c\x82\x68\x35\x38\xe1\x0d\x92\xf1\xd8\xb7\x7a\xa3\x9b\x50\x8c\x2f\x67\xbb\x40\xa2\x8e\x4b\x34\xdd\x70\x1e\xaa\x7c\x34\x98\x04\xa0\xd5\x0e\x18\x17\x06\xd4\x45\x6a\xbe\x55\x62\xcf\x1e\x5f\x2b\xad\x36\x10\x62\x4a\xb5\x64\x2e\x91\xcb\x98\x8b\x28\x4f\x85\x78\x90\x0b\x29\x25\xef\x5e\xa9\x30\x06\x80\xb3\xec\x22\x21\x00\x64\xb3\x71\x19\x57\x2a\x3a\xd9\x8c\x87\x5e\x36\x54\x33\xfc\x13\x50\xc2\xf2\xd8\xc8\xa3\x9e\xbf\x21\xd8\xa3\x7e\x94\xde\x88\x52\x7a\x90\x24\xd4\x0f\x02\xd3\x29\x7d\xcb\x3f\x84\x54\xca\x1e\xd2\x17\x4f\xf6\xa2\xc3\xdb\xd1\x00\xfa\xf2\x8e\xc9\x3a\x57\xbf\x44\x2f\xeb\x7e\x51\xd5\x27\x22\xb6\x00\xa9\x0d\x23\x02\x31\xbd\x9d\x74\x15\x97\x7f\xb5\x8f\x62\x1e\x8a\x7a\x02\xec\xc6\x9b\x39\x51\xc5\xc6\xc6\xd4\x6b\x80\xe4\x78\x9b\x3d\x59\x81\x37\x07\xbf\x9c\x1c\x43\x52\x4d\x61\x0c\x3b\xb4\x7a\x8c\x68\xbf\x2a\x44\x18\x17\xd8\xe6\x4a\x30\xeb\xe2\x05\x27\xcf\x60\x14\x53\x34\x8c\xa1\x9d\xb9\x88\xa3\x5e\xb8\x62\xa7\xbe\x59\x95\x50\x38\x18\xc6\x11\x85\xe9\x5c\xd5\x65\x18\x7b\x76\xcb\x3d\x03\xd6\x1e\x17\xa8\xfa\xe2\xe8\x24\x19\xd1\x26\x51\x1f\x00\xc7\xf1\x3e\x47\xf1\xaa\xc2\x9c\x0b\xa3\xbd\xc2\x51\xf6\x40\xd4\x11\x82\xe8\x53\xf1\xe5\x0e\xb9\xca\xfb\x94\x51\x1e\xca\xf5\x55\xeb\xa1\x98\x42\xe2\xd2\x26\xbd\x8d\xf7\xf7\x51\x7a\x7f\x74\x78\x08\x53\xf6\x69\x7f\x7f\x12\x08\xdb\xa6\x5d\xbe\xec\x13\x2c\x6a\xf6\x49\x6d\x7f\x9f\xf7\x75\x7f\x1f\xd0\xa0\xa9\x3e\xf6\x23\x7c\x08\x85\x4a\xc5\x5d\x55\x05\x9e\x21\x1e\x6d\xf2\x17\x58\x4c\x8b\xad\x83\xa2\xea\xa4\xb8\xf8\x90\x24\xa3\x61\x95\xc3\xe7\xb6\x5c\xc4\x5e\xd6\xcb\x40\x2f\x1a\x2a\x28\x4a\xd3\xf3\x80\x5c\x3f\x7a\x61\x81\x41\x44\x3b\x7d\x48\xcc\x8a\xba\x25\x12\x40\x2a\x26\x16\x76\x85\xc4\x5c\xd7\x9a\x59\x58\xf6\xe0\xe9\x22\xd5\x84\x97\xf1\xe6\x5c\x9d\x1e\x48\x61\x44\x3a\xfd\xeb\x38\x3a\x88\x21\xbf\x18\x4d\x11\x54\x49\x07\x8e\xfc\x1c\xd0\xa2\xc6\x60\x02\x44\x9b\x42\x2f\x9c\x3b\xd0\xe5\xc7\x5a\xab\xed\x4a\x6c\xcd\xb5\x98\x1f\x2e\x2a\x9f\xa7\xc5\x40\x8c\x07\xa1\x7d\x88\xe5\x9f\xc2\x9d\xa0\x0e\x77\x18\xd4\x68\x22\x54\x64\x96\x1c\xc2\x4d\xd7\x89\xfc\xc8\x4c\xfb\xc9\x28\xee\xde\xef\x27\xc7\x62\xaf\x88\xb1\x2e\x54\xe4\x6f\x18\x24\x53\x9d\xff\x4b\x7d\x88\xbd\x60\x3c\x2e\xff\x26\x36\x18\x88\xba\xdd\x29\x2d\xf0\xe2\xc5\xb8\xf0\x0c\x95\x8a\xef\x1d\x24\x94\x26\x03\x2f\x0c\xc3\xa2\xc6\xee\x26\x42\xec\xe3\x05\xbb\xf2\x08\xe5\xb9\x0e\x46\x28\xee\x1a\x12\x71\x23\x21\x7b\x90\x0c\x18\xf3\xd1\xa4\x9a\xcb\x98\x91\x93\x61\x6f\x68\x16\x5b\x27\x57\xb0\xca\x59\x48\xb5\xb8\x90\xc3\x99\x9a\x7b\xf7\xbf\x78\x57\x09\x1c\xfc\xdc\x64\xf3\x99\xf1\x82\x20\x3b\xc1\x98\x9f\xe1\x75\xdb\xad\x93\x52\x72\x4a\x95\x23\x91\xc3\xc0\xb1\x32\x6b\x06\xed\x16\x34\x8b\x38\x8a\xb9\x46\x2c\x43\x0d\xb5\x48\xb8\x16\x96\x9a\x25\xc3\x2e\x03\x99\xf9\xe3\x75\x01\xca\x16\x99\xcf\xee\x17\x92\x4c\xab\xb5\x85\x03\x76\xf1\x28\x2a\x85\x03\x80\x85\x8c\x62\x0a\xf9\x67\x04\x0a\x56\x2a\x79\x02\x9f\x21\xec\xd0\x26\xec\x80\x14\x90\x76\xc0\x79\x10\x81\x5d\xc1\x5c\x61\x80\x9c\xd9\x92\x57\x64\x31\x9e\x37\x10\x8c\xbb\xbb\x85\x1c\x24\xaa\x49\xb2\xe5\x1b\xbe\x10\xb2\x7b\xac\x29\xc8\xcd\x5a\x8a\x2d\x62\x4c\x69\xb1\x37\xfc\x3a\x50\x23\xa8\xb4\x83\x3e\x1c\x8f\x5b\x6d\x2e\x8d\x9d\x80\xe2\xa5\x59\xe0\x0f\xee\x34\x3b\x5e\x8c\x92\xe9\x21\x6a\x42\x40\xe1\x43\xda\x2c\x5a\xee\x2f\x47\x07\x30\x66\x6c\x74\xae\x35\xfe\xa5\xc8\xf7\x5c\x51\x35\xbb\x45\x89\x3e\x0c\x9a\x4f\x5d\xe9\x76\xd7\xbd\xa7\xb4\xd7\x29\xf0\x94\x57\xab\xd5\x9e\x0a\xce\xf4\xe0\x2d\x38\x0f\xce\xea\x24\xce\x37\x75\x9e\xb2\xd7\x85\x4e\xdc\xa5\x19\xe8\x05\x59\x93\x33\xd3\x4f\x17\x0c\x84\x92\x41\xbe\xb4\x77\xeb\xe5\x17\x23\x92\xd6\x14\xae\x5c\x5b\xe4\x6d\x6f\x3e\xf3\xf9\x1b\x57\xbf\x70\xd1\x03\x07\x71\xd2\x79\xd0\x7c\xea\x54\x7a\x3b\x4c\xbd\x66\xcb\xbb\x2f\x79\x00\x4f\x2d\x12\x8f\x42\x32\xf0\x80\x57\x51\x62\x58\xe0\xbd\xc0\x45\xf7\x72\x77\xea\xe1\xe6\x1f\xe2\x38\x39\xbe\x1a\xc3\x88\xf0\x5f\x04\x45\xd7\x60\xda\x21\xe8\x00\x76\x5f\x3c\x51\x49\xd2\x16\x47\xfd\xe4\x7b\xca\xf9\x11\xab\xdc\x62\xef\x70\x8c\x04\x2e\x2f\x74\xa2\xb8\x33\x8a\xed\x23\x8e\x25\xc6\x51\x9a\x0a\x20\x49\xe1\x1d\xac\xfb\xf0\x82\xc4\xf9\x25\x74\xd8\x8f\xd1\x61\x9f\xc2\xae\x48\x65\xd7\xc4\x48\x15\xef\x22\x22\xfe\xa4\x9c\xe1\xe1\x30\x49\x86\xdd\xe4\x18\x5f\x55\x35\xc3\x87\x94\x44\x0c\xe0\x9c\xa4\xd3\xe7\xbe\xaa\xfc\x0e\x7e\x29\x39\x82\xbc\xae\x7e\x42\xd0\x6b\x09\xa6\x51\x6c\xe3\xc9\xd8\x28\x14\xc5\xf1\xc9\x9d\x21\xc4\xa2\xa1\x38\x89\xba\x08\x1f\xde\x82\x69\x1a\x1d\x32\x16\xf6\x05\x4e\x0d\xf7\x08\x3a\x3c\x84\xe4\x4b\xa8\x4b\xfb\x2c\x11\x27\x82\x11\x4c\xad\x8c\x09\x7e\x31\x1e\x11\x01\x5d\x65\x1d\x17\xe0\x8d\xa4\x33\x4a\x05\x78\x13\x0f\x47\x54\x80\x5f\x80\x27\xac\x3f\xe2\x07\x6b\x9e\x43\x05\x33\xc8\x65\x37\xfd\x24\xee\x8a\x8e\x58\x3f\xdd\x6c\x84\x5b\x60\xdc\xef\x90\x24\xe6\x93\x47\xb8\xe6\x00\x92\x2b\x77\x6f\x8a\x9f\xb8\x0b\xc9\x4d\x7c\x97\x0b\xab\x81\xf7\x42\xca\x73\xee\x25\x1c\x36\x07\x83\xf9\x69\xf5\xcc\x49\x70\x9a\x15\x5f\xee\xba\x38\x8a\xfd\x06\xbb\x36\x7c\x93\xc2\x81\x53\x92\x46\x07\x5c\xc8\xcb\x61\x31\xba\x7a\x72\xe5\xef\x9b\x5d\xeb\xc7\xbd\x24\xe6\xb8\xd0\x93\x21\xbc\xd2\x87\x51\x57\x72\xe2\x2c\xed\x08\x12\x8a\x3a\xce\xdc\x56\x22\x4a\x09\xdb\xdc\x5e\x4a\x23\x2a\x84\x07\x5e\xb3\xd5\xda\x01\x5e\x0c\xa9\x07\x5a\xad\xad\x67\x81\xd7\x31\x18\xb5\x5a\x5b\xdb\xa0\x0e\x5a\x5e\x19\x53\xee\xb5\xdb\x6d\x2e\x0d\x97\x7f\xc0\x69\xa6\xea\x3a\xf0\xd6\xd7\xbd\x36\x68\x3d\x0d\x58\x5d\x0d\xd0\x6a\xb7\x41\xab\xd5\xd8\x06\x17\xb7\x39\x74\x8e\xfb\x14\xf6\x12\x02\x8b\x1a\x5a\xed\x60\xb9\x83\x07\x66\xf9\xcc\xdc\xcc\x9c\x61\x7b\x0c\x1b\xfb\xcf\xbf\xc7\x0d\x24\x6f\x93\x1f\xe3\xed\xef\xe6\x7f\x54\x92\xd0\x16\x3b\xfc\xa2\xd8\x95\x5b\xdb\xe0\x69\x0d\x3d\xa3\xa1\x67\x35\xf4\x9c\x86\x1a\x75\x0d\x32\xf2\x50\xb2\xb5\x54\xe6\x86\x29\xb7\x65\xc0\x6d\x03\xee\x18\xd0\xe0\xd2\x30\xc8\x34\x0c\x36\x0d\x83\x4e\xc3\xe0\xb3\x65\xf0\xd9\x32\xad\x6d\x99\xd6\xb6\x4c\x6b\x5b\xa6\xb5\x2d\xd3\xda\xd6\xd3\x4e\x8f\xd4\x4e\x50\x5f\x0d\x02\x5b\x0a\x81\x67\x81\x17\x49\x82\xa1\xe8\x64\x9b\x91\x56\xe7\x92\xe4\x49\xf2\x28\x8a\x1a\x84\xb7\x0d\xc2\xdb\x06\xe1\x6d\x83\xf0\xf6\xb6\x83\x8f\x73\xef\x54\x59\x4c\x47\xb6\x4d\x47\xb6\x4d\x47\xb6\x0d\xd6\xdb\x66\xd8\xb6\x0d\x16\x3b\xf5\x59\x7d\x71\xef\xce\x4e\x6f\x18\x5a\xee\xb6\x51\xb5\x9a\x0e\xed\x98\x0e\xed\x98\x0e\xed\x18\xc4\x77\x0c\xe2\x3b\x06\xf1\x1d\x83\xf8\xce\xb3\xce\x38\xe4\xb6\x81\xca\x66\x3a\x75\xd1\x0c\xed\x45\x83\xc9\x45\x8e\x49\xbb\x5d\x74\x42\x7d\xed\x6b\x7c\x2b\xec\x00\x0f\xf5\xe4\x00\x6c\x81\x96\x97\xbd\x9a\xe9\xc3\xae\xf8\x94\x63\xff\x58\x35\x0d\x50\x7a\x8c\x96\x09\xc8\x78\xcd\xad\x56\x86\x9d\x6d\x6b\x54\xd4\xcc\x89\x2e\xb4\x41\x2f\x8a\x53\xd8\x06\x1a\xf7\x36\xf0\x86\x11\x89\x06\x90\x42\xc2\x10\x6a\x4f\x66\xa0\xb8\x03\x76\x4a\x2a\x9f\x56\xa9\xf8\xc8\xaa\xc8\x7e\xdb\x02\xdb\xea\x73\x61\xd9\x46\x7b\xa2\xd8\x04\xaf\x1f\xa5\xd7\x8f\xa2\xd8\x6b\xf2\x5e\x4c\x9e\x02\x03\x48\xa3\xe6\xe9\x80\xdf\x1c\xc4\x15\xe8\x71\x5e\x6b\x6a\xfd\x83\xd4\x73\x2f\xad\x45\xf6\x7f\x67\x74\xa7\xfc\x38\xdd\xa9\xee\xc6\x0f\x1a\x0f\x5e\xba\x71\xa5\xf0\x4e\x95\x63\x0a\xd9\x32\xde\x01\xce\x9a\x7c\xc8\xb7\x5b\xc1\xe2\x3b\xe7\x29\xcd\x0d\xf3\xe2\x73\x3c\x53\xb7\xe4\x0a\x1e\x5e\x38\x8c\xd1\x60\x00\x89\x29\x36\x43\x5a\xc0\xef\xfa\xc2\xc4\xda\x79\x5f\xa0\xa3\x0e\x44\x9f\xb0\xa8\x03\xba\x93\xa9\x79\x0d\xe4\x9b\x67\x2a\x49\x6f\x9d\x06\x41\xe1\xab\x97\xab\x11\xc6\x09\x5d\xef\x44\x71\xbc\x1e\xad\x73\x26\x7b\x3d\x4a\xd7\x23\xfd\x8a\xcb\xb3\x6a\x1f\x89\xda\xad\x67\x26\x97\xc8\x65\xaa\xf5\xb7\x4a\xcf\x89\x43\xda\x22\xed\x35\x5c\x83\x78\x34\x10\xcf\x61\x42\xfb\xc7\x78\xbc\xd1\x00\xb8\x26\x6c\xc7\x46\xe2\xfb\x46\x1d\x78\x7c\x87\x79\x08\xaf\x0b\x5b\x8b\x63\x82\xa8\xfc\x16\x80\xb2\x3d\x8a\x6b\x0f\xe0\x09\xc0\xc1\xc4\x60\x19\xdb\xc2\x43\x3f\x56\x6f\x9c\x52\x48\xef\xaa\x71\xbc\xd3\xcb\xbe\x9f\xb2\x74\x64\x7c\xb4\xf7\xf7\x43\x0a\xf8\xe8\x02\x6a\x8d\x40\xc7\x98\x30\xb9\x9a\xe3\xa2\x57\x6b\xf7\x60\x8f\xad\xea\xf1\x78\x43\x42\x66\xa6\x03\x65\xc3\xbd\x86\x7a\x7e\xee\x6b\x2d\xed\x47\x03\x27\x4b\xc1\xfa\xb9\x4b\x92\x87\x27\x2a\x93\x78\xd7\x26\x3b\x71\x8d\x11\xde\xb2\x27\x5d\xb9\xc6\x7c\x96\x1d\xb4\xda\x8e\x9a\x65\x12\x04\x01\xd8\xa8\x4b\x9b\x73\x98\xb1\x39\xcf\x3e\xf4\x93\x82\x7c\x80\xc3\xae\x7c\xc5\x45\x95\x16\xbf\x2b\x35\xd4\xd6\x1a\x5f\x23\x61\x1e\x09\x6c\x54\x43\x00\x29\x2b\x86\x10\x17\xeb\x8e\x34\x02\xe2\x03\xb1\x67\xbf\xe7\xea\x60\xc6\x63\x15\xbe\x62\x23\x0c\x23\x9f\x06\xf6\x5e\xd4\x6f\x8d\xe9\x6e\xc6\x96\x43\x47\x37\x80\xd6\xb6\xb9\x07\x7b\x90\x40\xdc\x51\x7b\x87\x35\xbe\xde\x8f\x52\xfc\x14\x5d\x3f\x80\x10\xaf\xcb\xbb\x1f\x4a\x61\x77\xbd\xba\x2e\x0d\x36\x9d\x1c\x6c\x0a\x60\xd7\xd2\x56\x4d\x7c\x18\x34\xa9\x41\xbf\x6b\x51\xa9\x6e\xf1\xd2\xdd\x95\xa9\x87\x4e\x6a\x21\xe1\x31\xab\x79\x3c\x2e\x2c\xc5\x2d\x41\x1c\x0a\xd2\x17\x6a\x00\xf1\xfa\x43\x58\x2f\x9d\x4e\x14\xba\xb2\x8e\x07\xf0\x24\xf5\x71\x50\x6c\x09\x93\xb4\x60\x3b\xc4\x2d\xd8\x16\x26\x26\x16\x0d\xd8\xd8\xb0\x7f\x0a\xf3\x13\x8b\x02\x6c\xb8\x09\xc0\x37\x04\x21\x19\x8f\x93\x9a\x1a\xdd\xd7\x20\x09\x2a\x15\x3f\x71\x09\x44\x12\x12\x69\xcd\x16\xd4\xd8\xad\x94\xa4\x02\xca\xd8\xb5\x10\xa0\x1f\x50\xac\x2b\xdd\xc9\x78\x4c\x26\x01\x48\xb8\x45\x97\x7e\x22\xe1\xb4\xc7\x9b\xe3\xd8\xb8\xe9\xbb\xce\x2f\xb1\xc1\x50\xa0\xde\x8c\x39\x1f\x25\xab\x20\xad\xf5\xd8\xd2\xca\xb6\x50\x46\xe2\x28\x43\x2d\xe1\xe6\x64\x01\x48\x1e\xd3\xa3\x85\x61\xe8\x2b\x69\xf8\xbe\xb8\x7c\x68\x83\x52\xf5\x1b\x65\x7e\xf7\x7d\x3f\x09\xed\x99\xf6\xf3\x6f\x77\x0b\xb6\x96\x32\x15\x0d\x69\xf1\x09\x74\x9f\x6d\x93\x75\xf8\x70\x48\x60\x9a\xb2\x15\xc8\x9f\x49\x42\x44\xfb\x90\xac\x1f\xc0\x75\x56\x7a\x3d\x21\xce\x91\xb4\x66\xd1\x37\xb5\x49\x04\x77\xe2\x53\x6e\x13\xa4\x3e\x82\x53\x8b\xf0\x34\xe5\xa8\x40\xa0\x56\x4e\x73\xa3\x0e\xec\x35\xc7\x06\x6c\x12\x00\x5a\xa9\xc4\x32\x88\x9a\x9f\x00\x69\xc7\x28\x37\x45\xd8\xf1\x13\xeb\xd5\x4d\x62\x5e\x11\xa5\x82\x1a\xb1\x75\x54\xa2\xf2\x56\xcc\x42\x98\x00\x9f\x84\xad\xd3\x07\xf0\xa4\xe9\xf5\x23\xdc\x8d\xa1\x90\xcb\x08\xfc\x72\xc3\x2a\x2c\x2c\xc9\x61\x5a\x13\x02\x9c\x4a\x65\xa3\xa1\xf4\xba\x56\xb2\x50\x58\xea\x63\x83\x7f\xee\x25\x9d\x51\xca\x85\x41\x42\x5b\x65\xb7\x29\xc5\x45\x45\x8d\xda\x55\xf3\x6c\x95\x4a\x2e\x49\xea\x34\x67\xb5\xa2\xc5\x4f\x45\xed\xd8\xba\x31\x59\xb7\xcc\x5f\xd0\x47\xf9\x85\x97\xdc\xf5\x69\x2d\xa5\xc9\x90\x6d\x80\xe8\x50\x58\xa3\x07\x60\xa3\x11\x34\x1b\xdb\xac\x18\xa3\x51\x57\x93\x2e\xd7\x8a\xa2\x94\x8d\x4e\x71\x09\x2b\x60\x51\xdf\x08\x10\x77\x61\x4d\xc9\x89\x2a\x95\x6a\x63\x43\xd8\x26\x8b\x04\x6d\x09\xec\x94\x08\x76\x7d\x58\x93\x6a\xef\x1a\x17\x51\xfa\x54\xe0\x63\xa7\xf7\x13\xf6\xc1\x29\x08\x0a\xb2\x59\xc5\x15\x31\xd1\x83\x2a\xf7\xf2\x8b\x19\xa9\x69\xd1\xe0\x1a\x3e\x8d\x75\x5d\xa2\x3f\x1e\xb7\xda\xea\x55\x77\x3d\x00\x38\xac\x36\x00\x0a\xeb\x97\xd0\x65\xf5\x8e\xfd\x12\xda\xdc\x0c\x50\xcf\x57\x26\xf8\xd7\x5f\x1d\x45\xb1\x4f\x5a\xa8\x0d\x60\x10\x9c\xe2\x10\x29\x53\x4d\x49\x46\x9f\xaf\x36\x76\x89\x65\x93\x1c\x34\x89\xb6\xec\x25\x1a\x71\xb3\x46\xf2\xd8\x0a\xfb\x49\xc5\x59\x69\x33\xbb\x57\x47\x90\x9c\x88\x4e\x32\x4a\xf1\x3f\x15\x5c\x63\xa4\x48\xc2\x58\xa5\x21\xd6\x42\xd5\x04\xf0\xa9\x8d\x30\x7a\x75\x04\x6f\x76\x83\x60\x8d\xd3\x06\x8e\x87\x1f\x4c\x34\x62\xca\xe8\x64\x2f\x3a\xb8\x29\x04\x80\x19\xeb\x51\xd9\x4f\x4d\xb8\xcd\x9a\xcc\x0a\x44\xec\x5d\xe2\x48\x67\x76\xbd\x6a\xc3\x6b\x5a\x05\xa5\xb0\x71\x3c\xf6\xea\xde\x64\xd2\x0e\x2a\x95\x91\x6f\xd3\x2d\x12\x00\xcc\xd3\x00\x66\x44\xdf\xd7\xea\xc8\x20\xb0\x72\x39\xc4\xa3\x45\xda\xc0\x1c\xf2\x77\x8e\xb1\x3a\x1c\x84\xe0\x7e\xc8\xc6\x30\x29\x29\xcc\x4e\x6a\xfd\x25\x00\xfd\xa2\x8c\x92\x5c\xb4\xf0\x52\xcd\x88\xd2\xf3\xb4\xa3\x09\x06\x5b\x71\x4b\xb4\xa4\xca\x67\xda\x4a\xec\x0b\xea\xf0\x11\x2f\xa8\x17\xe4\xcc\x3f\xbe\x8b\x2a\x88\x40\xca\x1f\x5e\x77\xd6\x6c\x5e\x56\x33\x83\xbd\x4f\xea\x95\xb5\xbb\x72\x1e\xf2\xe4\x38\x0f\xe9\x7f\x6a\x9c\x87\xf4\x3f\x11\xce\x43\xfa\xe7\xe6\x35\x71\xa8\xee\x8d\xfc\x81\x43\xf9\x5d\xe6\xd4\xdc\x00\x9b\xc4\xbe\x0e\x3a\x7c\x38\x71\xaf\x82\x9a\x5f\x27\xfa\xd2\x27\x79\x08\xe2\x5c\xc7\x48\xfe\x3a\x86\x35\x07\x65\x0d\xcb\xe0\x4c\xc5\x64\x47\x4f\x84\x98\xec\xc4\x11\x93\x9d\x3c\x56\x31\xd9\xe1\x4a\x4c\x36\x55\x4c\x76\x9c\x15\x93\x1d\x9f\xa5\x98\xec\xa0\x40\x4c\x76\x30\x45\x4c\xd6\x2b\x17\x93\xed\x67\xc4\x55\xfb\xe7\x2e\x2f\xd3\x4d\x1f\x5b\xcc\xd1\xf1\x9f\x43\x52\x76\x5d\x99\xde\x2a\x86\x8a\xf1\x13\x70\x77\x0a\xe9\x93\x24\x0b\x58\x24\x30\x2f\x80\xb0\x85\x13\x93\xa0\x09\x5b\xb4\x1d\x12\x60\x75\xfc\xce\x4a\x42\xf7\x69\x90\xd0\xdd\x0f\x85\xf3\xbf\x4a\x45\xfc\xad\xe1\xe8\x08\x1d\x72\x6e\x3e\x9b\x50\x1b\xa5\x90\x5c\x39\xe4\x8f\x3d\x3c\xf0\x30\xbc\xaf\x65\x14\xde\xad\xfb\x37\xaf\xaf\x7b\xc1\xf3\xd5\xc6\x78\x6c\x25\xef\x11\xd4\x85\x98\x5e\xe0\x5f\xc0\x15\x23\x0c\x74\x3d\x90\xcc\x94\x09\x26\x99\xdf\x51\xe6\x77\x9a\xf9\xdd\xf9\xd4\x08\x10\x4f\x4a\x05\x88\x87\x39\x01\x22\x7f\xd4\xb2\x36\x50\xf2\x43\xcd\x8a\xd1\x9c\x17\x1f\x40\x1c\xce\x0c\xe0\xb0\x7e\x09\x5f\xa6\x97\xf0\xe6\x66\x40\x5a\xb8\x6d\x79\xf6\xc1\x9a\x4b\xbb\xee\xef\xfb\x30\x44\x7c\xf1\xcb\x93\x02\x81\x16\x6b\xcc\x38\x96\x64\x07\x99\xc7\x65\x27\x37\x12\x4c\x3d\xa0\xf6\x02\x2f\x1b\x00\x6f\x3f\x8e\x52\x7a\x33\x15\x92\x06\xa8\x24\x1c\xfc\x74\x12\xe2\xb5\x00\x0c\x65\x56\x0a\x1f\xd2\x5b\x30\x4a\x47\x84\xdd\x8f\x63\xb0\xcf\x5f\x89\xc3\x62\xe9\x67\x32\x84\xd2\x9a\xad\x5b\x2c\xc4\x12\x1c\x54\xd7\xa7\xd2\x11\x37\x97\x0a\x92\x4a\x65\x43\x4b\x62\x2c\xd4\x94\x5b\x88\x02\x57\x22\x1d\x69\xef\x26\x5c\x36\x58\x52\x1a\xde\x07\x25\x7a\x13\x42\x1b\xe0\x79\xca\x53\x86\xa9\x3b\x34\xa2\xac\x94\x26\x04\x72\x51\xd6\x7d\x7a\x12\xc3\x02\x19\xaa\xe2\x7e\xe4\x4e\x3d\x84\xdc\x72\x73\x44\x61\x97\x97\xe0\x92\xb1\x90\xd6\x7a\x09\x16\x55\x00\x2c\x7f\x7d\x31\x22\x28\xc2\x14\x20\xf9\xfb\x4b\x10\x1d\xf6\x29\x48\x54\x66\xf4\x1a\x04\x51\x48\x6b\x31\xc2\xf0\x25\xf1\x2d\x95\xdf\x6e\x44\x03\x14\x9f\xac\xc9\xb7\xfa\x72\x26\x43\x13\xcb\x9a\x00\x6f\xdd\x04\xb2\xc6\xce\x2f\xe4\xfc\x4a\x80\x77\xc1\xfc\x8a\x9c\x6f\xa9\x91\xef\x0a\x71\xe6\x9d\x61\xb1\x04\x92\xef\x67\xb9\x73\x61\x8d\x72\xa7\x6f\xc6\xfd\x83\xf8\xcd\x06\xe6\x0a\xa5\x04\x1d\x8c\x28\xf4\xbd\x6e\x44\xa3\xaa\x12\x54\x56\x85\x35\x9e\xcd\x27\x91\x70\x18\x91\x14\xde\xc4\x94\x2d\x87\x3a\xdb\xc5\x79\x89\xae\xf0\x60\x00\x31\x95\x8e\x08\x7c\xe5\x40\x47\x3e\x55\x11\xb5\xcb\x7b\x7f\x6e\x21\xa8\xef\x80\x04\x6b\xa5\xab\x44\xca\x71\x19\x3b\x9d\x11\x76\x97\xca\x37\x6d\x39\x36\xcf\x54\x20\xdf\x56\x02\x74\xf9\x3c\xac\xa8\xe5\x84\x8b\xf9\xe7\x16\xb1\x17\xcf\x41\x46\xa3\x30\x87\xc0\xdd\xc8\x5d\x0a\x85\xee\x6c\x8a\x9e\xe5\xcf\xae\xa4\xd4\x5d\xbe\x87\xcf\xe7\x55\x32\xe5\x17\xe3\x08\x3f\xf0\xf5\x32\x10\x02\x11\xb5\x3a\x4a\x27\xa5\x55\xfa\x45\x92\xc7\x6a\xa3\xcd\xfd\x89\x4c\xd9\xdf\xb1\x3b\xed\xae\xf5\xb1\x4f\x73\xa4\x81\xbf\xcc\xca\x09\x44\xe8\xee\x0c\x12\xe2\xab\x87\xb3\x53\xb2\x58\x6f\xe4\x41\x56\x6e\x2c\xde\x44\x05\xe5\x94\x4a\xae\x84\x60\xc2\x2f\x01\xbe\x1e\xfa\xe7\xc3\x9d\x67\x2b\x15\xfd\xf3\x72\xf8\x5c\x7d\x3c\xde\xde\x72\x66\x87\x7d\xcf\xcd\x8d\x59\xca\xee\x1e\x99\xa6\xb8\x29\xb8\x6f\xc1\x9a\xb8\x48\x5c\xa1\xbb\x06\x64\xa3\x61\xbf\xfc\xa2\x66\x05\x4b\x41\xea\x2d\x29\x58\x35\x54\x35\x27\x86\xd7\x2a\x89\xa5\xa9\x3b\x81\x43\x69\x7c\x5b\x30\xb0\x46\xe1\xc3\x98\x4b\xd7\x7f\x41\x31\x89\xd0\x7e\x35\xd4\xb3\x54\xe3\x7e\xd0\xa1\xc1\x95\x8a\x2f\x9f\xac\xda\x47\x63\xed\x18\x75\x69\xbf\xa8\x7a\x36\xff\x7b\x96\x7f\x18\x59\x8d\x76\xf8\x21\xef\xa9\x7d\x3a\x88\xef\x47\x3d\xe8\x7b\xbc\xa6\xe6\xba\x51\x7a\x6c\x6e\x5d\x04\xde\xf0\xa1\x67\x7c\x21\x4c\x2f\xd9\xa8\xd7\xff\xe2\x92\x67\x26\x65\x10\x9d\x1c\x40\xc7\x88\x3a\x3f\x17\x1b\x0f\x83\x9c\xf6\xee\xd1\x87\x72\xd7\xb3\xd5\x24\x96\xdd\xf9\x78\xec\x49\x45\xc9\x51\x81\xa2\xe4\xa8\x40\x51\x02\xe2\xf0\x8e\xef\x8f\xc2\x8e\xa3\x31\x71\xb9\x93\x16\x69\x73\x0e\xcf\xb9\x80\xb9\xd7\x33\x9b\xd5\xb3\xae\x03\xdc\xdf\xd3\x24\x00\x77\xfc\x91\x5d\xbd\xc3\xcf\xcc\xa3\x2a\x29\x2d\x1d\x80\x91\xad\xbe\xc8\xb4\x93\x67\x41\xe6\xd1\x96\x4c\xaf\x62\x7a\x8b\xee\x69\xdf\x4a\x16\x6c\xcd\x29\x3e\xbd\x25\xe7\x28\x6d\x45\x0b\x36\x64\x97\x9e\xa7\x1d\xa3\x6e\x4a\x97\x6a\xc9\xa8\x9b\x9c\xb6\x46\xb6\xba\xe9\xca\x72\xea\xa6\x99\xda\xa5\x39\xfd\x19\x18\x27\x77\xb8\x33\x22\x04\xe2\xce\x49\xb5\x0b\x3b\x09\x17\x1e\x17\x7e\xce\xbb\x40\x10\xe2\x86\x9c\xf6\xca\xd2\x5b\x81\x1e\xe8\x82\x3e\x18\x82\x01\x38\x02\x27\xe0\x10\x1c\x80\x7d\x70\x0c\xae\x83\x3b\xe0\x3e\x78\x08\xae\x80\x07\xe0\x2e\xb8\x07\xf6\xc0\x55\x70\x0b\x7c\x13\xdc\x04\xd7\xc0\x6d\xf0\x32\xb8\x01\x5e\x03\x2f\x82\x57\xc0\x4b\xe0\x8b\xe6\x56\xf4\xaa\x25\xdc\x79\xf5\x93\xaa\xf9\xfa\xd2\x4a\xf3\xf5\xe4\x68\xbe\x3e\xf7\xa9\xd1\x7c\x7d\xee\x13\xa1\xf9\xfa\xdc\xb9\x69\xbe\xbe\xf2\x24\x69\xbe\xbe\xf0\x44\xe8\xa6\x3e\xe3\xe8\xa6\x3e\xf3\x58\x75\x53\x7f\xb9\xd2\x4d\x4d\xd5\x4d\x7d\x35\xab\x9b\xfa\xea\x59\xea\xa6\xbe\x5c\xa0\x9b\xfa\xf2\x14\xdd\xd4\xab\xe5\xba\xa9\xcf\x67\x74\x53\x9f\xff\xf3\xe9\xa6\xbe\x6a\xb1\x2f\x5f\xfd\x73\xe8\xa6\x20\xfc\x33\x29\xa7\x28\x5c\x69\xa7\x3e\x0d\xda\x29\x02\xc3\xfc\x52\x2d\x14\x07\xd1\x3e\xc4\x13\x80\xe7\xce\xdf\x61\x1c\x42\x3c\x01\x08\x86\xbe\x56\x2f\x51\x12\x75\x1e\xc0\xae\xd1\x2f\xa9\x84\x34\x9b\x30\xca\x26\xc4\xd9\x84\x4e\x36\xa1\x97\x4d\xe8\x66\x13\xfa\xd9\x84\x61\x36\x61\x90\x51\x74\x1d\x65\x7e\x9f\x64\x7e\x1f\x66\x7e\x1f\x64\x7e\xef\x67\x7e\x1f\x67\x7e\x5f\xcf\xfc\xbe\x93\xf9\x7d\x3f\xf3\xfb\x61\xe6\xf7\x95\xcc\xef\x07\x99\xdf\x77\x33\xbf\xef\x65\x7e\xef\x65\x7e\x5f\xcd\xfc\xfe\xe2\xa7\x46\xd1\xf7\x19\xa5\xe8\x4b\x8d\xa2\x0f\x83\x04\x44\xe1\x5f\xfa\xa9\xa5\xe8\x4b\x2d\x7d\x56\xee\xf8\x3d\x03\x73\x24\x71\xb0\xa6\x01\x80\xd0\xff\xbc\x4f\xc2\x48\x90\x17\x9e\xca\x1f\x0a\x00\x6f\x7f\x38\x3a\x88\x51\xe7\xca\xdd\x9b\x57\x94\x00\x55\x7a\x6c\x6b\x92\xda\xbe\xd4\x85\x69\x5b\x75\x96\xa6\x7f\x48\x77\x64\x22\x1f\x83\x80\x10\xf0\xb0\x04\x01\x01\xe5\xeb\x81\xe7\x91\xf0\x24\x00\x5f\x61\xd8\xb0\xc6\xa5\xa3\x35\xf9\x1c\x3b\xf5\xc0\x37\xc1\xe7\xb9\x87\xf6\x5c\x8e\xfb\xda\x7f\xc3\xcd\x7c\x96\x21\x8c\x28\xc2\x87\x57\xfb\x11\xf1\xc0\xb5\xec\x77\xf8\x70\x88\xf8\x84\xdd\xd7\x62\x55\x0f\xdc\xce\xe6\x12\x5d\xbd\x07\x53\xee\xbd\xe8\xe5\xcc\x67\x94\x5e\xe1\xc1\x12\x3c\x70\x23\xf3\x45\x7a\xf6\xf0\xc0\x6b\x99\x0f\xa9\xd5\xda\x8b\xd9\x42\x51\x4a\x05\x36\xb0\x2b\x72\xbc\x92\xc9\xd1\xb7\x5d\x99\xbc\x24\x3f\x8a\x69\x0c\xa4\xdc\xae\xcb\x3d\x6c\xa8\x33\x41\x7f\xe3\xfa\x4a\x39\xa0\x77\x45\xbc\x86\xb2\x5c\x6a\x50\x67\x66\xe3\x0e\x35\xca\x33\x09\x47\x6c\x62\xec\xd2\xab\x51\xa7\xcf\x8e\x0f\x22\x7e\x36\x5b\x6d\xe5\xe6\x91\x81\x66\x54\x9a\xc4\x92\x73\x4f\x02\x40\x8c\x76\x38\x05\x3e\x3e\x83\xb7\x31\x42\xfb\xa7\x86\xce\x7d\x28\x53\xa9\x50\x7b\xd7\x7d\x01\x9e\x1c\x24\x11\x11\x71\x6d\x2a\x15\xef\x81\x94\xf0\xf1\x77\x25\x8c\x56\x54\x2a\xfe\xf6\xb3\xf6\x2b\x93\xf1\x78\xa7\x6e\xff\x0e\x04\x69\x71\xd5\x90\x3a\xf6\x42\x0a\x6d\x67\x35\x7e\x56\x9b\x27\x1d\xba\xcc\xd1\x5f\x9e\xb3\xa0\xc3\x57\xc5\x03\x92\x29\x3d\x16\x6e\x8e\x15\x12\x92\x45\xce\x22\x32\xed\xb1\x46\xb1\x62\x17\x90\xd0\xd5\xe9\xad\x95\xe9\x3d\x7d\x5a\xa0\xfa\x24\x20\x83\x33\x0c\x94\x32\x34\x47\xaa\x94\x12\xad\x48\x35\xd7\x24\x41\x56\x31\x3b\x45\x45\x2a\xf9\xf4\x8d\x02\xcd\x27\xbb\xe6\x6e\x14\xeb\x44\xf3\x98\xca\xc7\x1f\x22\xee\x4a\x69\xb6\x0c\x5e\xd2\x09\xd0\x74\x0d\xee\x62\xda\xda\x3c\x66\x42\xdb\x77\x73\x30\x80\x5d\x14\x51\xe8\xa8\xfd\x2c\x0f\xe5\x1d\x4a\xe2\x2f\xc0\x93\xf1\x18\xd6\x06\x90\x46\x5f\x80\x27\xf3\x96\x9c\xa6\x7b\x8c\xa0\x0f\xd9\x31\x86\xf4\x73\x99\xbd\x93\x21\xc2\x87\x7b\x51\xfa\xa0\x36\x84\xa4\x97\x70\xb7\xa1\xbc\x36\xd6\xd9\xed\xad\x0d\x5b\x57\x69\xeb\x98\x66\x0c\xad\x5a\xd6\x6a\xc2\xef\x0f\xa3\x4e\x6e\x1b\xc0\xdc\xd2\x28\x79\x06\x27\x75\xf6\x3a\xae\x0d\xc2\x87\xe3\xb1\x2f\xd3\xc4\x81\xc0\x2f\x0e\x73\x3d\x95\x9b\xb5\x0c\x84\x6b\xa7\xa5\x50\x68\xb8\x28\xb0\x9a\x5c\x0c\x58\xca\x14\x04\xf6\x95\x1f\xa6\x92\xd6\x0d\x9d\x66\xf3\xa2\x94\xeb\x26\x55\x85\x87\xb0\x94\xd7\x0a\xc9\xec\x49\xa7\xb2\x16\xd0\xc0\xc0\x42\x68\x34\xec\x6a\x17\xa8\xf9\x89\x71\x42\xe3\xb8\x9b\x43\x3a\x03\x45\x3d\x9f\xc0\x82\x74\xb3\x97\x0a\x8e\x49\x77\x33\xc9\x12\x96\x60\x9c\xe6\x3f\xaf\x95\xd6\x25\x55\xb7\x92\x3d\x08\x37\xea\xa0\x2c\x6b\xd6\xbd\x2c\x09\x4e\x61\x19\x7a\x3c\x3c\x87\xae\xb3\x01\x60\x2d\xcb\x43\xf1\xb0\x83\x45\xa3\x3b\x09\x82\x9a\x10\x04\xd9\x22\xa2\x79\x5b\xe2\x0e\x68\xf9\x6e\x9f\xa9\x80\xe7\xec\x65\xf1\x24\xe7\x66\xd8\xf1\xd8\x96\x9b\x65\x77\xc5\x4a\x2b\x33\x4d\x63\xcb\x0f\x51\x59\xb9\xe1\x19\xe7\x5e\x3f\x4a\x1b\x1d\x14\x4b\xeb\xf2\x19\xf9\xe4\x65\x56\x55\x86\xad\x72\x96\x95\x6e\xa0\x64\x5d\xa9\xef\xca\x23\x4d\x3f\x4a\x2d\x35\xa4\xe4\xdf\x81\xd7\x49\x30\xe5\x91\x96\xd4\x66\x2c\x6a\x58\x9b\xc2\xc9\xb8\x22\x29\x24\x47\x32\x5e\x40\x61\x7e\x53\xad\x3d\x87\xc6\x14\x44\x94\xbf\x2a\x03\x74\x2a\x53\x84\xa8\xdb\x35\x55\x2f\x58\x85\x6d\x62\x97\x1d\x35\x5a\xfe\xad\x7c\xc7\x14\x0c\x3d\x5f\xc8\xb9\x7b\x84\xd8\x26\x86\xfd\x21\x81\x59\xe1\x7a\x7d\xb9\x25\xa4\x48\x26\xcb\x38\x15\xcc\xad\x4d\x58\x8b\x7b\x5e\xb6\xd8\xf3\xad\x96\xcf\x56\x21\x22\xb9\x0a\x2c\x64\x74\xd6\x22\x42\xaf\x57\xcb\xa1\x8c\xa7\xa5\xdc\x24\x06\x8a\x94\x5b\x57\x92\x10\xe6\xfa\x58\xcc\xad\xba\x0f\x88\x33\xfb\x59\x9b\x7e\xb8\xf6\x6e\xb6\x33\xea\x2c\xff\x6a\x5a\x15\x37\xcc\x69\x06\xa3\x65\x16\x5e\xbb\xa5\xa6\x5f\xd9\x06\x83\xa6\xe4\x5e\x0d\xce\x19\x2b\x32\x22\xde\x6e\x3b\x0c\xa2\xe3\x9d\x52\x52\xab\x7c\x05\xea\x85\xb7\x35\x8e\xda\x31\x62\x99\x29\xa9\x5b\x15\xa3\x5c\xea\x9d\x74\xa5\x92\x65\x13\x55\x6d\x05\x16\x3a\xf2\x8b\xd1\x66\xe2\xb2\xf7\xd6\x4f\xb5\x22\x82\xa2\x2a\xdb\xd3\x24\x89\xd3\xb0\xc8\x8b\x94\x7a\x7e\xad\x3d\x55\x53\xfd\xde\x1a\x3c\xe5\xb5\x9f\x0a\xb8\x2a\x01\x2b\x55\x02\xf7\xdc\x2d\x8d\xd0\xc5\xa9\x13\xf8\xb4\x26\x2f\x8b\x40\xe8\x1d\xf8\x73\x7b\x2d\x3b\xc6\x2e\x52\x57\xe2\xd8\xf7\x5a\xdc\x4e\x54\x1c\xc2\xc2\x4a\xb4\xed\x05\x35\x44\xe1\xc0\x47\xbc\x0a\x1d\x58\x37\xa9\x25\xbd\x5e\x0a\xe9\x5e\x32\xac\x62\x03\x83\x34\x8c\x36\xd5\x37\x61\x45\xbb\x96\x3e\x8f\x9d\x84\x4d\xac\xc7\x6a\xb8\x6b\xc1\x61\x5a\x75\x33\x36\xa3\xcb\xd6\x67\xae\xf6\x32\x99\x23\x6e\x22\x6a\xa6\xd9\xf1\x8f\x59\xbe\x7a\xbf\xa4\xcd\x9d\xdd\x59\x0f\x89\xc5\x6b\x59\x75\x2d\x6e\xf7\x6c\x15\x16\x3e\xdf\x25\x82\x92\x21\xbf\x5f\xc2\x13\xba\x1b\x0c\x60\x0b\xd3\xcc\x51\xca\xca\x0b\x49\x1f\xbb\x37\x63\x67\x25\x5a\x3c\x4c\x31\x9f\x88\xb9\x9c\xc1\xd7\xc2\x74\x9b\x0e\x5a\xe2\x08\x36\xd8\xd0\x2f\xf9\xa8\xef\x63\xb9\x2f\x52\xc4\xec\xbb\x07\x90\x95\x41\xc9\xda\x03\x19\x36\x20\xdb\x2f\x1f\x67\x69\xc5\x1a\xaa\x54\x08\xf4\x51\xb0\xeb\x67\x39\xbf\xd9\x9d\x38\x9b\x3e\x20\x80\x8a\x22\x60\x14\x65\x0d\x43\xc4\x8d\x34\x1c\x39\x58\x08\x01\xb1\x67\x8a\x14\x4d\x13\x59\x80\xdb\x9c\xda\xf4\x8c\x86\x58\x95\x41\xb3\xe4\x56\x81\x35\xa7\x61\x61\x8f\xac\x7b\xde\xfe\x9c\x4e\x33\x8c\xca\xcd\xda\xb1\xd6\x95\x73\xaa\x0f\x93\xe9\x12\xa1\xdd\xcc\xdd\xf4\x95\xe1\x35\xe5\xca\x24\xe3\xb1\x24\x9b\xf3\x3a\xa6\x32\xf2\x41\xf3\xb9\x69\xf9\xf6\x22\xf1\xa6\xaf\xb9\xf5\xcc\xd4\xea\xee\x5f\x15\xd9\x32\x7e\x45\x9c\x8a\x8a\x3b\x9a\xf7\x50\x52\x50\xfa\xfa\xfd\xab\x8f\x52\x9a\x75\xb6\x54\xf6\x05\xf5\x2d\xa0\xd8\x6d\x8b\xb1\x52\x9f\xe5\x71\x85\x4e\x91\x6b\x80\x8d\x46\x01\x66\x5c\x98\x50\x8c\x99\xd2\x5a\x48\xc9\x57\xa5\xd2\xf2\xf6\xae\x7f\x79\xef\xca\xbd\xeb\x57\x3c\xe0\xdd\xbc\x7d\xf7\x95\x3d\xaf\x5d\x43\xb8\x13\x8f\xba\x30\xf5\x55\xbe\x1a\x4e\xba\xdc\x3f\x63\xb0\x3b\x0d\x9d\xe6\xac\x5e\xf3\xe0\x68\x53\xba\x53\x20\x89\x9c\x39\x40\x45\x73\x23\x96\xec\xcc\xc9\x09\x4e\x8b\x44\x9f\x79\x7b\x73\xc9\x7c\x64\xb6\x49\xa3\xc9\xfd\xd1\x70\x46\x21\xea\x1e\x31\x22\x27\x36\x2c\xe3\x47\x15\xcb\x00\x0d\xcb\xe0\xe0\x8d\x83\x35\xd3\x33\xc3\x1b\x23\xbb\xc3\x9a\x01\x52\x26\x0a\xd0\x35\xa9\xb7\x97\x65\x96\xb4\x95\xdd\x25\x81\x7d\x89\xcb\xbb\x23\x1f\x8f\x49\x41\xea\x1a\x2c\xb2\x6b\xa4\xbb\xd4\xd7\xd2\x73\x5e\xa9\xea\xaa\xd5\xd1\x66\x96\x25\x07\x8a\x9b\x6e\x4a\xe1\x8c\xf8\x35\x09\x9a\x34\x77\x53\xb0\xb9\x77\x21\xbb\x2f\x3f\xe6\x0b\xc2\xc8\x6f\x15\x86\x91\xdf\x72\xc2\xc8\x6f\xb5\x81\x7d\x68\x4a\x77\xce\xd6\x30\xa8\x98\x55\x49\x98\x40\x1f\x81\x5c\x7a\xf6\xc0\x15\xaf\x21\xa4\xd6\x6c\x5a\xf8\x97\x84\xdb\x11\x29\x8f\x43\x08\x77\xbf\x84\x68\xff\x0e\xe7\xd6\x8a\x7a\x09\x34\x67\xba\x64\xb8\x7c\xd1\x03\x83\xae\x76\xfc\x2d\x30\xbb\x95\xeb\xf9\x5e\xc6\x33\x38\x28\xff\x32\xcf\x20\x60\xd9\x90\xe9\xa6\x33\x16\x00\xe5\x1e\x5a\x18\xe1\xab\x1a\x10\x02\x0f\x21\x16\xe6\x74\xf7\x46\x98\xa2\x01\xac\x0d\x22\xf2\xc0\x9c\xdd\xeb\xd0\xd7\xf1\x7f\xb4\xbd\xaf\x52\x61\x16\x94\x3e\x26\xd1\xd0\xe5\x3a\x7a\x09\xf1\x2f\x5d\x0a\xd2\x63\xc4\x6d\x91\x38\x7d\x08\x45\x2c\xdc\xe0\xb4\x13\xa5\x70\xbd\xde\xd4\x21\x85\x1a\x20\x09\xd5\x75\xd6\x52\xee\xf1\x67\x6f\x92\x4c\x80\x08\x72\x3b\x20\x3f\xaa\x86\x3b\xcf\x06\x60\x14\x4a\xfb\xa8\x1e\x49\x06\x2c\x33\xcb\xe4\x47\x01\xf0\xd3\x70\xa4\xdf\x09\x3a\xd5\xed\x8e\xc4\x5e\x29\xd2\x10\x6e\x8e\x02\xb5\x0c\x1a\xbb\x3e\x0e\xeb\x20\x09\x3d\x2f\x68\x26\xe1\x08\x4c\x13\x4b\x99\x64\xdb\x97\x18\xde\x2c\xbe\xf7\xb8\x25\xa4\x4c\x31\x5b\xbf\x7d\xba\x35\x37\xa6\x36\x2e\x37\xfd\x52\xed\x29\x79\x41\x93\x75\xb6\x74\x5c\xc2\x29\x23\x06\x0a\xc6\x38\x4c\x0c\xf7\xeb\xc7\xa2\xb4\xbb\x29\xcb\xb0\x4a\x01\x06\x1b\xf5\x40\x4b\xb8\xb2\x7d\xde\xcd\x26\xe7\xa9\x7e\x1c\x64\xc7\x32\x77\x04\xc4\x81\x7c\xa4\x55\x7a\xc5\x8f\xb9\xa2\x5c\x46\x6d\x6e\xec\x00\xbf\xce\xb8\x6a\x34\x80\xc9\x88\x06\x7e\x03\x6e\x07\x6b\x7c\xf9\x36\x76\xca\x57\x53\xe8\x79\x85\x83\xe3\x79\xb2\xec\xd3\x4d\xf6\xd7\x83\xb8\xeb\x35\x9d\x77\x76\x3e\x0f\xb4\x2a\x04\x13\x22\x08\x98\xd4\x19\xe4\xa2\x51\xcc\xed\xb1\x2c\x5b\xd4\x96\xbd\x64\xbf\x69\xd2\x51\x1c\xfe\xa1\xb8\x4d\x53\x5d\x51\xa9\xf1\xd8\x09\x24\x78\xc1\x8e\x33\x61\xbd\x3f\x73\xc2\x3d\xcc\xdd\x37\xa7\xdc\xae\xc7\x08\xea\x3a\x4d\xd6\xa5\x7e\xa3\x59\x92\x51\x37\x9b\x0f\xba\x31\x77\xcb\xd9\xa2\xbb\xde\xed\x64\x5d\x1e\xdc\xeb\xbd\x64\xc4\x66\xb6\x3c\xb7\xf5\xec\x2a\x17\x16\x64\x6e\x14\x72\x65\xed\x99\xcd\x7d\x34\x4d\x8e\x52\x7a\xbf\x9f\x1c\xdf\x9f\x63\xcc\x37\xec\xab\x6d\xa5\xa2\xdb\x37\xba\x20\x49\x35\x2b\x95\x8d\x8d\xec\x68\xeb\x34\x67\xf0\xad\x5a\xe4\x70\x5d\x4d\x46\x98\xe6\xd0\xbb\x9d\xc8\x02\xe9\x82\xb8\xd9\xb5\x56\x2a\x7e\x0e\x2d\x39\x4a\xd9\x3b\xa5\x22\xff\x96\x4e\x5c\xd6\x54\xf4\x14\xae\x78\x14\x9e\xaf\x67\xa5\x72\x42\x28\xa2\xdc\x85\xaa\x5b\xbf\x7d\x6d\x95\xe8\x28\xfd\x93\x16\xaa\x14\x58\x59\xa8\x4c\xaa\xa7\xf2\xa7\x92\x18\x14\x14\xb0\x74\x76\xb9\x99\x73\xf5\xac\x05\x85\x65\xf7\xd7\xac\x00\x9c\x32\x9b\x6f\x37\x0f\xb2\xf5\xae\xcd\xa8\x38\xd4\xdc\x2e\xd4\xa6\x22\x4e\x85\x96\xd1\x48\xa6\xee\x89\xe5\x54\xc0\x2a\xa1\x67\x4c\xc7\xb8\x99\x42\xa9\xb2\x1a\xb4\x5d\x3d\x2d\x99\x0f\xf6\x73\xde\x24\x93\xd7\xd1\x19\x36\x5b\xed\xec\x9a\xe1\xab\xaf\x04\x0d\x7e\x54\x77\x58\x06\xcd\xcc\xda\x0b\x37\xc8\xbd\xca\x9d\xaf\x3b\x4a\x03\x90\xef\x8f\xd6\x0d\xe4\xde\x27\xb3\xab\x64\x91\x5d\x5e\xb1\xde\xcb\xed\xbd\xe1\x20\x94\x5c\xa1\x1d\x54\x2a\x5f\x70\x9e\x6a\xe2\x00\x24\x3c\x0d\x24\x01\x48\x9d\xa7\x9a\xdf\x0c\x29\xf4\xfd\x5b\xe1\x17\x9d\xb7\x9a\x79\x13\xb1\x56\xf2\xa8\xef\x35\x6f\xb2\x96\x6e\x15\xb6\x62\x54\x86\xad\xe8\x51\x9b\xb9\x56\xd4\x8c\x63\xaa\xd6\x4a\x97\x6e\x23\x37\xf9\x9e\xc7\x18\x85\xdb\xf9\x36\x0b\xcd\xdf\x5a\xa3\xc7\xdd\xf2\xcb\xf9\x96\x5d\x93\xba\x56\xfc\xa8\x03\x7a\x23\xd7\x84\x31\xcb\x6b\x75\x1e\x5f\x87\x36\x1a\xac\x43\xaf\xe5\x5a\xd3\xa6\x7e\xad\xde\xe3\x6e\xec\xc5\x5c\x63\xb6\xf9\x60\xab\xfb\xb8\x67\xeb\x95\x7c\xe7\x72\x26\x89\xad\xfe\xe3\x6e\xf5\xa5\x5c\xab\x8e\x99\x63\x6b\xf8\xa8\x2b\x24\x57\xbd\xed\x1b\x77\x30\xfb\x6d\x6f\x59\xe1\x00\xdc\xb2\x1f\xf6\x16\x37\x23\x8d\xf6\x5a\x47\x4b\xb5\x23\x4a\xcf\xd5\x90\x7a\x16\x7d\xb2\x54\x43\xea\x59\xf4\x1c\x0d\x99\x77\xd1\x87\x4b\x35\x65\xde\x45\xcf\xd1\x58\xd6\x0c\xae\x75\xb0\x54\x9b\x99\x6a\xe6\x6a\x5a\xb9\x35\xde\x5f\xaa\x45\xe5\xd6\x78\x8e\x86\x84\x8d\x57\xeb\x78\xa9\x76\x78\xe1\x19\xcd\x68\x4b\xae\xd6\xf5\x05\xdb\x50\x25\x67\x35\x90\xb1\xcc\x6a\xdd\x59\xb4\x1d\xb7\x82\xf9\x9a\x73\x04\xb0\xad\xfb\xcb\x35\x69\x57\x32\x5f\xb3\x16\x37\xf0\x70\xb9\x36\x75\x0d\xb3\x1a\xb4\x6c\x33\x5a\x57\x16\x6d\xcb\x14\x9e\xbd\x3c\xa4\x53\x81\x07\x8b\x2f\x0f\x5e\x72\x56\x03\xca\x2c\xa3\x75\x77\xd1\x06\x64\xc9\x99\x3d\xd0\x56\x12\xad\x7b\x0b\xf7\x41\x95\x9d\xd5\x88\xa3\xa3\x6f\xed\x2d\xda\x8e\x5d\x7c\x56\x53\x19\x6d\x7b\xeb\xea\xa2\x8d\xb9\x15\xcc\x68\xae\x40\x02\xdc\xc2\xec\xa2\x41\x23\xc2\x0f\x56\x96\xb6\x20\x06\xf9\x3a\x33\x48\xdc\xb2\x7d\xdd\x65\x5f\x25\x92\x4a\x85\x9b\x69\x19\x2f\x0d\xd4\x7a\x5f\x07\x1d\x0f\x49\x84\x47\xc2\x6f\x5a\x39\x89\x95\x93\xba\x4f\x48\xb9\xd1\xb1\x79\x40\xa9\xed\x93\x9f\x7b\xda\xb1\x4f\x6e\xd4\x2f\x4e\xcc\xf3\x36\x04\xf9\xed\x36\x9d\xff\x69\x9b\x88\xf8\xbf\x0b\x4d\xec\xff\x26\x9c\x2c\xe7\xeb\xe3\x82\x08\xe3\x59\xd5\x97\xd6\x55\x04\xb4\x55\x04\xb4\x55\x04\xb4\x27\xee\xf9\xfc\x2a\x02\xda\x2a\x02\xda\xea\x05\xfb\x13\xf0\x82\x7d\x15\x01\xed\xe3\x12\x01\xad\x13\xc3\x88\x94\x58\x9c\x2a\x2b\xf2\x19\x4f\x4e\x8a\xdc\x3d\x2a\x31\x9a\x07\x3c\x6f\x31\x8f\xa9\xb3\x1d\xa1\x6e\x34\xd6\xb8\xd5\x1e\x34\x71\xc6\xca\xd0\x90\xe6\x6e\x96\xd9\xcd\xf4\x48\x58\xc6\xda\x7b\xcd\x74\x3d\x8e\x28\x24\x8e\x35\xa5\xb0\x3b\x17\x0d\x46\x23\x9a\xf4\xc4\xd3\x33\xa8\xe3\x5b\x05\xa0\x1e\x3c\x42\x64\x29\x67\x52\x16\x0e\x2d\x65\x97\x5e\x2c\xe6\xd3\x72\xd1\xa5\x4a\x62\x3e\x65\xda\xb2\x07\x7e\xe1\xe0\x52\x56\xe1\x33\x88\x2c\x75\xe1\x31\xf3\xfd\xf6\xfe\x34\xe7\x69\xf2\x49\xe5\xfa\xa3\x33\xe5\xfa\xd3\x27\x82\xeb\x1f\x39\x5c\xff\xe8\xb1\x72\xfd\xf1\x8a\xeb\xff\x18\x71\xfd\x9d\x02\xae\xbf\x33\x85\xeb\x4f\xa6\x70\xfd\x19\xee\xbb\xf7\xe7\x73\x9a\xf5\x71\x61\xfc\xcf\xcb\x67\xd6\x63\x62\x63\xc1\x20\xdc\xd8\x50\xa1\x42\xbc\x04\xd3\x64\xd4\xe9\x73\x91\x1e\x23\x29\xe2\xc3\x5a\xd1\x36\xbd\x11\xa5\xf4\xc5\x24\xa1\x95\x4a\x01\xd7\xea\x0f\x55\xec\x82\xeb\x31\xe4\x8f\xc3\xcc\x81\x27\x0d\x7a\xd3\x4a\xc5\x1f\x2a\x38\x1c\xd6\x06\xa9\x34\x6b\x52\x8f\xb5\xc6\xe3\x61\x6d\x90\xbc\x56\x90\x7a\x0c\x0f\x1e\x20\x9a\xf9\x10\x80\x82\x15\x3a\x14\xec\x53\x4a\x79\x63\x12\x0e\xb3\xb6\xa5\x86\x67\xba\xa4\x58\xed\x4a\x85\x33\x71\xdc\xc8\x9e\xd1\xfd\x4b\xc2\x18\x47\xe1\x6b\x79\x54\xa5\x6b\x34\xa4\xb5\x61\x44\x20\xa6\xb7\x93\xae\xb6\x29\x11\x6a\x45\xc1\xfa\x3a\x0e\x6d\xf3\x17\x07\xf4\xa9\xb9\x15\x8c\x4a\x6f\x05\x71\x49\x58\x93\xe8\xac\xc2\x9a\xf4\xfd\xde\x9c\x61\x4d\xd2\x3d\xb6\x27\xae\xc1\x23\xd4\x81\x1e\x18\x30\xbe\xb0\xc7\x43\x95\xf4\xa3\xf4\x56\x72\x04\xbb\x1e\xd8\x68\x94\x86\x28\x89\xba\xdd\x97\x38\x93\x49\xa6\x04\xfa\x10\x04\x39\x84\x99\x88\x16\x24\x89\xa1\x08\x61\xe1\x71\x87\xcc\x8c\x1a\x13\xc5\x2d\x58\xcb\x84\x5f\xca\x8d\x5b\x15\xec\xb8\x55\x41\xfa\xb7\xda\x00\x25\x6f\x20\x59\x3b\xa8\x52\xd9\x40\x56\x3e\xfe\x86\x53\xbd\xe7\x0d\x29\x19\xc1\xb6\x72\x58\x9f\x84\xa8\x28\x00\x87\x5d\xa9\x17\xac\x49\x94\x92\x4a\x05\xfa\xb4\xb6\x2f\xbe\xde\x20\xc9\x80\x07\xcb\xf5\x93\x80\x23\x3f\x99\x4c\xd6\xf8\x23\x90\xa8\x2b\xfc\xe6\xbc\x8c\x52\x0a\x31\x24\xbe\x37\x48\x46\x29\x1c\x0d\x3d\xe0\x17\xd0\x69\xec\xd3\x29\x21\x36\x80\xf3\x11\x30\x8a\x6d\x7b\xbb\xc8\x1a\xac\x32\xa6\xb2\xa4\x7d\x61\x26\xbb\x08\x06\xc6\xd5\x55\x29\x12\xce\xc2\x52\x73\xa5\xb7\x00\xf1\x83\x53\xfe\x86\x9f\x2f\x31\xc6\xe9\xf1\x68\xd4\xe2\x41\x7e\x06\x47\x4e\xb4\x59\xba\xc7\x4e\xf5\xb5\xa2\x6e\x58\x74\x1d\xb8\x4e\x1c\x4a\xf2\x8a\xea\x10\x47\xb7\x34\x13\xc4\xdd\xcc\xb0\x94\x39\xf7\xb1\x5c\xfb\xcc\x5e\x85\xb2\x06\x12\xf0\x35\x51\xf0\x1c\x48\x0d\x4b\x60\x8f\x50\x43\xbb\x94\xd9\x20\xf3\x2d\x61\x1c\x92\xf9\x97\x30\x66\x24\x70\x4a\x3c\x97\x82\xd5\x8d\x03\xe1\x30\x26\x08\x26\xd6\x06\x9e\x72\xd9\xd7\xb6\xe5\xb9\x1c\x7d\xc7\x13\x86\x7e\x82\x93\x69\xb1\x88\xc2\x18\xba\x09\x79\x94\x6d\xea\x7b\x35\x8f\x07\x10\xca\x1a\x1f\xb6\x4c\x7c\x9c\x56\xbd\x0d\x1a\xf5\xa0\x0d\x70\xd8\x60\xb4\x54\xdd\x56\x38\x49\x0d\x49\x51\x09\x2c\x4a\xe8\x97\x1d\x42\x7a\x90\x16\x48\x0f\xd2\xa2\x70\x0b\x47\xa1\x8f\x43\x64\x0b\x11\x4e\x42\x97\x78\x1e\x86\x2d\xd2\x06\x07\xe1\xac\x7b\x37\xb6\xef\xdd\x76\x0d\x01\xd8\x0f\xed\x8f\xc7\xe1\xe9\x04\xd8\x22\xd9\x83\x12\x91\xec\x71\x0b\xb6\xc3\x03\x29\x92\x3d\x76\x45\xb2\xf6\x4f\x70\x9c\x15\xc9\x1e\x97\x8a\x64\x8f\xc7\xe3\xe3\xac\x48\xf6\xd8\xbd\xbd\x1d\x87\x87\xf3\x88\x64\x9d\x50\xf8\x3e\xe3\x35\x60\x30\x1e\xc3\x49\x00\x8e\x03\xb0\x6f\x89\x64\x8f\x33\x02\xd3\x63\x29\x92\x75\xd2\x77\x8f\xf3\x22\xd9\x7d\x2d\x92\x3d\x9e\x2e\x92\xcd\xb6\x50\xcc\xa4\x32\x14\x8f\x59\xf7\x84\x48\x16\xdb\x02\x90\xeb\x4b\x0a\x40\x1e\x6b\x44\x6d\xc3\x88\x20\xeb\x56\x81\x3e\xa9\xe2\x8f\xe4\x4c\xc5\x1f\xd1\x13\x21\xfe\x48\x1d\xf1\x47\xfa\x58\xc5\x1f\xa3\x95\xf8\x63\xaa\xf8\xa3\x93\x15\x7f\x74\xce\x52\xfc\x11\x17\x88\x3f\xe2\x29\xe2\x0f\xf4\xf1\x57\x7a\x76\x2c\x2a\xd5\x39\x47\xd9\xc7\xe3\x91\x41\x38\x81\x5f\x8a\xd4\x6a\x9f\x96\xdb\x71\xaa\x6e\xc7\x71\xf6\x76\x3c\xf2\x63\xeb\x76\x1c\x1b\x9d\x99\xe0\x14\x41\x3c\x87\xce\x2c\xce\xea\xcc\x4a\xd4\x57\x45\x81\xf7\xca\x19\x56\xf1\xd0\x51\x1c\xe4\xf6\x25\x83\x6b\xb7\xb8\xbc\xc7\x10\x01\xc6\x0f\x46\x05\xfc\x60\x24\xf8\xc1\xd8\xe1\x07\x7b\x0e\xab\xd6\x0d\x15\xce\x7d\xce\x05\x0e\x17\xe3\x02\x45\xd9\x00\x0c\x9c\x4a\x8f\xb2\xfc\xdf\xb0\x84\xff\x3b\x62\xfc\xdf\x50\xf2\x7f\x47\x2e\xff\x67\xff\x04\x47\x59\xfe\xef\xa8\x94\xff\x3b\x1a\x8f\x8f\xb2\xfc\xdf\x91\x7b\x7c\x1d\x85\xfd\xc5\xf9\x3f\xb6\x9b\x14\xff\x77\x14\x80\x81\xc5\xff\x1d\x65\xb8\xb3\x23\xc9\xff\x39\xe9\xbb\x47\x79\xfe\x6f\xa0\xf9\xbf\xa3\xe9\xfc\x5f\xb6\x85\x62\x02\xc1\x50\x3c\x62\xdd\x2b\xe0\xff\x4e\x66\xf0\x7f\x7d\x18\x0f\x21\x49\x2f\x14\x78\x93\x42\x69\x55\x5c\xb2\x1c\x1e\x70\xae\x10\x57\xd3\xb9\x42\xeb\x4e\xbe\x0a\xb9\xf4\xc4\x84\x5c\xc2\x9f\x9a\x90\x4b\xf8\x13\x11\x72\x09\x9f\x5b\xc8\x25\xa4\xf8\x71\x1c\xb2\x1d\x2d\x1c\x90\xe9\xf7\x94\xb4\x86\xd2\xcf\x31\xda\x10\xf8\x78\x29\x16\x87\x53\x9c\xbb\x8c\xe0\x08\xdd\xc4\x4d\x51\x5d\x88\x8a\xd9\x1f\x15\xa5\xe2\x25\x4e\xd9\x6a\x82\xc0\xf9\xc8\x26\x8a\xc9\x23\x11\x45\xf3\xf4\xd3\xd0\xc5\xb6\x2b\xb5\x2b\x26\x77\x74\x45\xee\x9e\x1c\x72\x47\x6c\x9f\x8c\x4b\x93\x3b\x9c\x27\x77\x78\x16\xb9\xc3\x86\xdc\xe1\x39\xc9\x1d\x5e\x9c\xdc\xe1\xc0\xed\xe9\x93\x4e\xee\xc8\xb9\x91\x3b\xad\x67\x22\x21\xdb\xd1\x5b\x01\xc0\x21\x69\xd5\xdb\x00\x85\xa4\xd5\x68\x2b\x81\x7b\x18\x22\x47\x7a\xa0\xfc\xaf\x8a\xb6\x50\x60\x44\x38\x49\x58\xbf\x94\x5c\x46\x4a\x84\x93\x6c\x6e\x06\x56\x7e\xe1\xaf\x15\xb5\x92\x36\xd0\x73\xb6\xa1\x62\x1b\x6f\x34\xdc\x90\xc2\x2a\x3b\xf7\x35\xf4\x58\x68\xad\xf6\x7e\x8b\x8b\xc9\x2d\x2a\x24\xb7\x0e\x0f\x8a\x66\x90\x5b\xb6\x90\xe2\x88\xc2\xb4\x4c\x1a\x59\x1d\xc8\x78\xd4\xf3\x92\xdc\xc7\x73\x91\xa6\xaa\x6b\x7b\xb7\x5e\x7e\x31\x22\x69\x4d\x21\xea\x9f\xa2\x6e\xd3\xdb\x89\xd2\x97\x6f\xbe\x7c\xf7\x25\x0f\x1c\xc4\x49\xe7\x41\xf3\xa9\x53\x29\x18\x4c\xbd\x66\x4b\xba\x3b\xf0\x80\xa7\xde\x79\x79\x2f\x48\x99\xea\xbd\x84\xb5\xee\xbd\x10\x11\x14\x89\x0b\xd6\x01\xec\xbe\x78\xa2\x92\xe4\x06\x53\x3f\x5f\x8e\x0e\x60\xec\xfc\x88\x75\xee\x9e\x71\xba\x65\x79\x82\xf1\x5e\x88\xe2\x38\x39\xbe\x2a\xee\x77\xde\x0b\xe2\x29\x4b\x51\xbe\x83\x8c\x07\x46\xef\x85\x4e\x14\x77\x46\xac\x8b\x77\x65\x68\x6e\x9e\x68\x7b\xd1\x65\x09\x79\xf7\x69\x22\x35\xa5\x08\x47\xaa\x94\xf6\x5a\xcc\x60\x92\x0c\xbb\xc9\x31\xbe\x1a\x47\x29\x17\x24\xc3\x87\x94\x44\x5c\xa2\xcc\x8e\x72\x07\xa9\x7e\x42\xd0\x6b\x09\xa6\x51\x6c\xe3\x20\xef\x41\xf1\xc9\x9d\x21\xc4\xa2\x52\xf9\x06\x5c\x7b\x49\xf1\x5e\x90\xae\xcd\x34\xe8\x3a\x6f\xf1\x5e\xc8\xfb\x94\xf1\x5e\x10\x1e\xf9\x05\x24\x9c\x1d\x4b\x58\x3c\x21\x66\xa0\xb4\x51\xf4\x5e\xd0\x56\x81\x1a\x74\x30\xb7\xdd\xe7\xb8\x3f\xdd\x6c\x42\xff\x76\x9f\xeb\xa6\x58\x82\xf3\xc4\x8d\xfd\xc4\x5d\x48\x6e\x62\x1e\xf1\x5b\x24\xbc\x3a\x42\x44\x74\xda\xbc\xb9\xf3\x5e\xd0\x06\xb5\x12\xba\x8e\xf5\x80\x5b\x3e\xca\xcc\x4f\xab\xd7\x22\xe1\xae\x8b\xb0\x61\x6c\x0c\x7c\x93\xc2\x81\x83\x3d\xc7\x9d\x9d\x07\x7c\x45\x23\x2a\xd6\xb2\x5c\xda\x7a\x7e\x69\x74\x20\xd4\x7d\xd6\x37\xbb\x16\x99\x76\x93\xb7\x75\x04\x09\x45\x1d\x67\xbe\x2b\x11\xa5\x3c\x16\x72\x45\xae\x35\xaf\x0d\xbc\x94\x46\x14\x8a\x33\xaf\xd9\x6a\x5d\x04\x5e\x26\x3a\x73\xab\xb1\x0d\x2e\x6e\xb7\xdb\xa0\xd5\x5a\x6d\xb6\x27\x75\xb3\xc9\x07\xe0\xee\xbe\xc3\xda\x22\x99\xfd\x10\x4e\x04\x56\xdb\x71\x81\xed\xb8\xc4\x16\x34\x7b\x98\x6d\xa8\xad\x6d\xb0\x0d\x5a\x6c\x6f\x6d\x6d\x83\x1d\x0d\x5d\xd4\xd0\xd3\x1a\x7a\x46\x43\xcf\x6a\xe8\x39\x09\x3d\x0b\xbc\x84\x78\xa2\xbe\x46\x9d\x27\x32\x5e\x49\xfd\x9f\xc9\xd0\xd0\xe5\xeb\xa0\xe5\x15\xbb\x0d\x6e\xb7\x4d\xe1\x6d\xd0\xd8\xd2\x45\x1a\x06\xdf\x86\x41\xb8\x61\x30\x6e\x18\x94\x1b\x06\xe7\x86\x41\xba\xf1\x9c\x06\xb7\xea\x06\x34\x58\x6d\x99\xd6\xb6\x4c\x6b\x5b\xa6\xb5\x2d\xd3\xda\x96\x69\x6d\xcb\xb4\xb6\xf5\xac\xd3\x45\xdb\x8b\x81\xca\xf1\x5c\x41\x0e\xb5\x1d\x72\x1f\xf8\xd6\x90\xa9\xdb\x06\xe7\x6d\x83\xf3\xb6\xc1\x79\xdb\xe0\xbc\x6d\x70\xde\x36\x38\x6f\x1b\x9c\xb7\x0d\xce\xdb\x06\xe7\x6d\x83\xdc\x8e\x69\x6d\xc7\xb4\xb6\x63\x5a\xdb\xb1\xd6\x8f\x69\x6d\xc7\xb4\xb6\x63\x5a\xdb\x51\xad\x3d\xc7\x18\xbe\xfc\x2d\x5c\xf1\x83\xca\xe3\xfd\xba\x27\x8a\x71\xcc\xd4\x42\xb3\x02\xf3\xb7\xdc\x85\x75\x51\xe0\xea\x15\xd6\xa9\x55\xdf\x72\x5d\xf1\xe3\x24\xbb\x17\x76\x9e\x13\x2d\xc9\x5d\x60\x3a\x7c\x71\xcb\x99\x2e\x86\xc3\x88\xc2\xee\x5e\x74\x20\x0c\x4a\x78\x99\xd3\xcc\x51\x56\x07\xde\xd7\xbe\x86\xd7\xd7\x59\xed\x8d\x1d\x70\x71\x47\xae\x7f\xb3\x4c\x54\xbf\x44\x4e\x8f\x23\x1f\x91\x68\x00\x29\x24\xac\x8a\x06\xd8\x6a\x4f\xdc\xef\xfd\x28\xbd\x7e\x14\xc5\x5e\xb3\x17\xc5\x29\x9c\x3c\x05\x06\x90\x46\xcd\xd3\x01\xe7\x7e\x6f\x47\x03\xd8\x7c\x34\x5e\xbc\xd6\x3f\x48\xbd\xc9\xc4\x66\xf4\xe9\x63\x63\xf4\x8b\xec\x0f\xfe\xec\x0c\xff\x5d\x72\x70\xef\xf6\xe8\xfa\xe7\x4b\x19\x7e\x0f\x78\xa8\xfb\xd0\xd0\x6b\x7e\x70\xa2\x94\x1e\x24\x0f\x05\x99\xb5\xd9\x22\xe7\xa8\x53\xc7\xe2\x30\x7b\x04\xb8\x07\x89\xe6\x86\xec\x53\xbd\xec\x6c\x90\x3c\x54\x8e\x71\x7a\x06\x78\xa3\xd8\x03\x7c\x59\xb0\x05\xb7\xc5\xb0\xf6\xe6\xd8\x6c\xf2\x90\xad\x8a\xcd\xb6\x0d\x5a\x9e\x8a\x2e\xe1\xc9\xbd\xc0\xea\xea\xc8\x43\x67\x8e\x9a\xf8\x7a\x67\x94\xba\x0d\x5a\xdb\xc0\xeb\xa2\x6e\x55\xf8\xea\x90\xfb\x94\xed\xa0\x64\x08\x25\xab\xd0\xd5\x84\x0d\xb4\x3c\xe1\x78\x54\x6c\x27\x56\x96\x1d\x59\x2d\xc7\x2a\x4f\x6f\x41\x6e\x4e\x26\x38\xb2\x6c\x7e\x6e\x8c\x28\x9f\x3a\x95\x67\x7f\xd6\xda\x58\xa0\xb5\x03\x3c\x18\xf1\x67\x58\x0a\x17\x7d\x50\xab\xb3\xa8\x68\x83\xaf\xaf\x8b\xfd\xfd\x0c\xf0\x62\xe4\x01\x6e\x37\x07\x5a\x8d\x86\x1e\xb0\x79\xc7\x9f\xd3\xba\x67\x81\x87\x7a\x9e\x26\x13\x26\x44\x0c\xdb\xf9\xb3\xeb\xa8\x56\x4d\x01\x49\xe5\x0a\x3b\x3a\xc2\x31\xe4\xb8\xa9\xae\x5a\xed\x4c\xef\xaa\xd5\xdd\x74\x18\x61\xd3\xe1\x3a\x10\x66\xb8\xc0\x3b\x18\x51\x9a\xf0\x96\x58\x22\x37\x2b\x8c\x25\xff\x2d\xac\x32\xd7\xa1\x30\x76\x57\x59\xe6\x59\x59\xa2\x64\xf5\x80\x8a\x8a\x1b\x40\x98\x20\xaa\x29\x92\x46\x88\x16\x51\xb5\x7b\xbd\xae\xff\xbd\xfd\xf7\xd6\x4f\x56\xd3\x73\x53\x88\x6f\x7b\xa2\x38\x90\x1d\x7b\x5a\x64\xfd\xf3\x8c\x52\xa3\xe8\xc4\x32\x55\xb4\x18\x11\x14\xbb\x3d\x2b\x56\x68\xe7\x58\x25\xeb\xa8\x57\x67\x94\xda\xea\x53\x3a\x30\x0b\xc1\x1d\xce\xae\x15\xd6\x3f\xad\x5e\xf1\x71\x9e\x41\xe4\x27\x58\x0e\x0d\x33\xa0\xcf\x02\x2f\xc2\x5d\x39\x30\xcf\x1a\x76\x12\x27\x6a\xb4\x9e\x33\xe3\xed\xfe\x29\xef\x5c\xd9\x0a\x9d\xb2\xd2\x6c\x0a\x2d\x17\x4f\xc3\x62\x76\xd5\x50\xcf\xb3\x5e\x0a\x87\xcb\x5e\x42\xcf\xcd\x5e\x41\xb2\x07\x48\x5c\x95\x6c\x9a\x3e\xa5\x0f\x2a\x4e\x90\xde\x35\xa2\xb8\x2c\x18\x8d\x68\xc2\x56\x62\x0c\x19\x21\xf6\x92\x5e\xcf\xfd\x42\x88\x38\xda\xb2\x1f\xa2\x21\xa2\x5c\x53\xed\x7e\x4b\x87\x30\x8e\x3b\x7d\xd8\x79\xb0\xc0\x99\x53\x8c\xe1\x8c\x93\x47\xd8\x02\x00\x43\x96\xb5\xdb\x3e\x9d\xc5\x89\xa1\xe4\x99\xcb\x8c\xc2\x95\x9e\xc4\xd0\x9c\x05\x12\x8b\x5b\x12\x09\x7e\x1f\xbd\xcf\xb3\xe8\x12\xce\x81\xad\xca\x0d\xa2\x93\x03\x68\xdf\xe6\x74\x76\x73\x4f\x2f\xa4\xa8\x3c\x8f\x61\x12\xf4\x0d\x4b\x7d\x11\xf7\x3c\x79\xd1\xb4\x0f\xb2\x9e\x74\x9b\xa6\x2e\x62\xce\x29\x77\x20\x5c\x9d\xa9\xab\x99\xf3\x4d\x2e\x1c\xf7\x16\x21\x2e\xde\x99\x9c\x0f\xf4\xa3\xe0\x92\xab\x48\xdb\x9c\xe2\x08\xa7\x90\x50\xeb\x14\xe7\x2e\xbd\xcd\xf8\xa5\xd6\xc9\x3a\x1f\x65\x7d\xce\x39\x9a\x16\xdc\xb3\x6c\xe7\x8c\xd2\x2a\xea\x88\xe3\xa6\xa0\xd5\xb3\x66\x96\x15\x3f\x7b\x16\x4c\xf3\xc7\x8a\x47\xfe\xd2\x57\x77\xbe\x84\xf7\x4e\x76\x8a\x79\x64\x25\x9a\xf2\x80\xa7\x23\x08\x7b\x8c\x21\x32\x3c\xf2\x15\x4b\xce\xe6\x01\xcf\x40\x79\x81\x7a\xc6\x4b\xb6\xf7\xa2\x2d\x7b\xf3\x80\xb7\xa7\xee\x10\x92\x37\xa7\x90\x0c\x1c\xce\x39\x2f\xd4\xca\x49\xc8\x6c\x8e\xbb\x48\xc8\xe4\x88\x72\x0a\xbe\x58\x42\xa0\x1c\x6f\x5f\x22\xd2\x29\x14\x06\x65\xa4\x8c\x39\x59\x62\x46\xc2\xe4\x8a\x85\x32\xd2\xa0\x47\x96\x85\xda\x12\xb0\x8c\x9c\x35\x2b\x82\xca\xdf\x7b\x6c\x51\xa5\x25\xc1\xb3\xa5\x5d\x45\xe2\xaa\x9c\x54\xb3\x5c\xd2\x5a\x2a\xaa\x2d\x96\x76\x66\x44\xa9\x05\xc2\xcf\x02\x11\x61\x46\x26\x58\x24\x3f\x2b\x12\xef\x96\xdd\xc9\x2e\x02\xef\x20\x4a\x51\xa7\x6a\x76\x88\x10\x67\x37\xa4\x38\x7b\x59\xd4\x0b\x45\xb3\xb9\xfe\x38\x12\x58\x25\x5e\x9d\xab\x93\xf6\x6c\xe6\x3b\xac\xa4\x25\xb3\xe4\x3d\xe2\xd0\xcc\x62\x9a\x93\x18\x4a\xb1\x90\xe4\x22\x8c\xd4\xcf\x9c\x46\xa2\x1b\x53\xc5\x62\x3b\x46\x7c\xb5\xf3\x5c\x91\x7c\x4b\x48\x87\x4a\xc5\x34\xf2\x6a\x14\x43\x2d\x57\x8a\xd2\x14\x1d\x62\xcf\x65\x8f\x9f\xe5\x87\x4a\x5f\x86\xfa\x6b\x59\xb7\xc4\x8c\xab\x5d\xe3\x18\xdd\x38\xb5\xcf\xb8\x2a\x37\xee\x8e\x2d\x37\xcb\x8e\x5b\xe2\x02\x9f\xc1\xda\x25\x4b\xdb\x3a\x86\xcd\x4d\xd5\x8c\x90\x85\x8c\x95\xac\xaf\xe8\x26\x49\xa1\x97\x4f\x12\x78\x5a\xe9\x0a\x61\x2b\x49\x63\x6e\xa5\x39\x2c\x9a\x29\x9c\xed\x8b\x1a\xd0\xec\x40\x9b\x2e\x9a\xc2\xb9\xd0\xf4\x46\x42\xdc\xb6\x65\xc5\xfc\xba\x85\x3b\x91\x38\x3e\xf3\x3c\x83\x2b\xec\x68\x64\x58\xce\x79\xae\x17\x6c\xe0\x9f\xd6\xa5\xd5\x61\xc4\xf7\xb3\xc5\x9f\xcf\x62\x81\xa5\x68\x53\xcb\x8c\xed\x9b\xff\x56\x66\x58\xbd\xf5\x29\xac\x74\x35\x92\xf9\xac\x0b\xbf\x66\x89\xbb\xea\x38\x38\x38\xf1\x2c\xc1\xb4\x9d\x05\xa9\xe3\xc1\x48\xa5\xed\xcf\xf2\xea\x6e\x04\xcf\xb9\x8f\xb1\xa9\x5d\xc8\xa3\xed\x1c\xe6\x48\x31\x42\x6a\xf9\x5d\x88\x0b\x5c\x4a\x20\x45\xd7\x46\x86\xa0\x44\xb5\x9c\x4d\x16\x67\x90\x91\x6b\x3b\x37\x0e\x25\xe1\x2e\xe0\xb6\xad\x3b\xa6\x73\xb3\x14\xc4\xa1\x58\x49\x21\x65\xe4\x5e\xdd\xcb\x5e\x3d\x4b\x99\xe1\x8c\xdf\x5d\x47\xac\xde\x9e\x22\x0a\x9b\xb3\x5c\x59\x7b\xf7\x33\x9b\x7f\xfb\xb9\x39\x1b\x5c\xa2\xa0\xad\x43\xcb\xca\xb0\x4b\x0b\xb9\xee\x53\xcb\xc8\xc4\x3c\x97\x92\x8c\xe7\xe9\x4c\x21\xeb\xb2\x94\x57\xba\x94\xdc\x9c\x4c\x46\x2e\xaa\x95\xb7\xce\x96\xcd\x69\xb5\xb3\x6a\x06\xa9\xf2\xb1\xa4\x8c\x7a\xef\xcd\x7d\xb6\x94\x2b\x31\x76\x0a\x94\x18\x79\xdd\xc5\x5c\x62\x10\x87\x56\x49\x3d\x8e\xe8\xdd\x2c\xb6\x33\xcf\x41\x4f\x61\x6b\x95\x48\x7c\x96\x7a\xb4\x50\x32\x6e\x98\x76\x5b\xa0\x5e\xa6\x24\x9e\x47\xf7\x2b\xcf\xc5\x22\xcd\x9d\xa3\x85\x14\x89\xde\xcb\xa2\xab\xeb\xf2\x60\xa8\xd5\x6a\x9e\xcd\x83\x6c\x65\xb4\x35\x39\x0d\xe2\xc5\x59\x9a\xbe\xdc\x12\xcb\xaa\x31\xb7\x0b\x6a\x50\x57\xf5\xe9\x0a\x42\x4b\x7d\xc9\xf2\x14\x0f\xc7\x34\xcd\x54\x56\x16\xf8\x74\x5e\xec\x98\xd1\x51\x99\x12\x39\x49\x5f\x03\x34\x72\xda\x2a\x37\x47\xdd\x5c\xfc\xf5\x61\x5a\x26\x5c\x94\x6d\xb9\xa7\xed\x55\x19\xfa\x7e\xee\xd3\xd6\xe2\xbb\x17\x3f\x62\x55\xe1\xec\x19\x0b\x3c\xa5\x98\x6c\x48\x51\x2c\x43\xa7\xcd\xc7\x6c\x69\x02\x60\xe4\xa1\xf0\x55\x45\x0a\xd4\x8a\x7b\x46\x1f\x52\xde\x74\x6f\xc6\xba\xd0\xf2\x84\xe2\x39\x9b\x4e\x4c\xd9\xdc\xe5\x76\x1c\xb3\xf5\x5f\x65\x36\x1b\xc5\xc4\x60\x81\x1b\x75\x5b\xcf\x6e\x7e\xa7\x2e\xba\xb9\x16\xda\xce\xf3\xed\xc4\xf2\x9d\x9f\xb3\x3e\x98\x2a\x80\x7f\xae\x58\x35\xc1\xaf\x5b\x85\xa1\xc6\x4a\xc5\xcd\xf3\x9e\x4a\xd2\x7c\xc2\x5d\x7e\x62\xfc\xab\x03\xd5\xc8\x82\x6b\xce\x5e\x75\xcf\xba\xab\x2e\x67\x47\x63\x2b\x45\x0c\xeb\x60\xba\x67\xb3\x22\x53\x06\xee\xd9\x72\x19\xfd\x14\x1d\x85\x3b\xb2\x56\x94\xb4\x69\xc3\xea\x94\xcd\x19\x4d\xcd\xa3\x41\xd2\x5a\x80\x51\x3c\xaf\x44\xd4\x56\xc0\x1a\x8d\x9c\xdc\x4d\x5e\x89\x52\xac\x50\x81\x39\x4f\x3b\x45\x34\x53\x29\x22\x71\x52\x95\x4e\xa0\xac\xf5\x61\x23\x25\xe5\x7e\xa5\x38\x19\x0d\x5a\xe9\x10\x66\x14\x60\xd9\xb2\xcf\x15\x7c\x99\x57\xe7\x37\xdf\xfa\x98\x6f\xeb\x3c\x53\xb0\x75\xcc\x44\x2d\xbf\x67\x24\xe7\xe1\xde\x81\xac\x2b\xd0\x3c\xeb\x44\x6c\xb8\x32\x76\x2f\x23\xcb\xe3\x52\xd4\x9b\xda\xd0\xa1\x40\x12\xa7\x09\x78\x3e\x78\x66\x4e\x08\x9b\xe3\xab\xe7\xe5\xc8\x6c\x86\xcc\x16\x5e\x78\x9e\x3d\x2c\x2e\xa5\x75\x24\x22\x0a\xa7\x3c\x4f\x78\xb1\x60\xaa\x9c\x81\x13\x2f\x27\x67\xf1\xfb\xb9\x55\x6c\x58\xab\x8c\x3d\x5d\x9e\xb1\x2a\xe2\x89\x9e\x06\xcf\x4c\x65\xac\x2e\xe6\xf8\xaa\x12\xce\xaa\x4c\x35\x59\xba\x90\x95\x7d\xd7\x12\x8c\xc4\x8e\x4d\xd2\x33\x56\x2d\x5a\xbf\xbd\x9d\xb5\x85\x9a\xd2\xcb\x9d\xc5\xb8\xc7\xfc\xc7\x2d\xb0\x5d\xb6\xbf\x1b\xe7\x64\x66\x75\x16\x8a\xa2\x29\x41\x2d\xfe\xec\x7a\xa3\x2b\xf7\xef\xa2\x87\xaf\xbc\x48\x8a\xf5\x46\x65\xf6\x54\x85\xaa\x12\x87\xe1\x2c\xe0\x31\x5d\x0e\x35\x27\x8a\xb7\x8f\xe4\x67\x66\x29\xe0\xe5\x81\xd8\x45\x47\x73\xeb\x22\xb5\xf2\xf6\xd9\xdc\xfd\xa5\x58\x91\x7f\x4e\xfa\x78\x79\xdc\x76\x92\xc1\x41\x22\x99\x80\x19\x87\x83\x64\xeb\x1c\xe3\x01\x4b\x07\xdf\x98\x5f\x07\x6f\x8b\xfb\x72\x1a\xf5\xed\xb9\x34\xe0\x96\x22\x7b\x27\xa7\xe5\xb6\x24\x3e\x17\xa7\xa8\xc7\xf3\xaa\xf3\x47\x52\x7a\x5b\x3e\xaa\x75\xc6\x63\x14\xc7\x55\xfe\x60\x2e\x39\xb1\xb2\xda\x1e\xba\x8b\x54\xe3\x0b\x31\x24\x67\x44\x92\x32\xe4\xe3\x4c\x28\xd4\xc7\x91\x34\xbd\xb2\xf7\x97\x5f\x39\xee\x7f\xe9\x5a\x31\x69\xfa\x9c\x70\x91\xe0\x2a\xaa\x3d\xb6\x91\x05\xfb\xa3\xd5\xd6\x16\x0d\x73\xf8\xa3\x42\x9b\xce\x22\x9e\x29\xff\x7a\xc3\x62\xb9\x72\x9c\xd9\x02\xd6\x9f\x79\xee\xbf\x70\x9b\xce\x30\xd5\xd1\x5b\x28\x6f\x9b\xc3\x58\xb6\x29\xfb\xc4\xf6\x29\x57\x62\x88\xa8\x29\xf2\xd3\x8e\x72\x69\x8e\x5b\x55\x63\x7b\x1e\x33\xbc\x33\xb8\xd8\x48\x2c\xe7\xba\xd5\x34\x6c\x36\xf4\xd1\x4c\xc8\xac\xfb\xfe\x14\x66\xad\xd1\xc8\x69\x34\x72\x59\xea\xb3\xf9\x39\xd7\x16\x76\xaa\xc5\xa3\x63\xc9\x37\xdd\xdb\x88\x45\xf4\x17\x17\x5f\xdb\xcc\xa4\xac\xd0\xde\x7a\x62\x87\xe5\x5e\xb4\x18\x6e\xfb\xb9\xa9\xca\xdf\xa2\xeb\xd5\x96\x75\xbd\x92\xb3\xab\xb8\xff\x05\xaf\x57\x39\x73\x88\xf9\x2e\x53\x79\xc2\x90\xed\x65\x56\x9b\xfb\xb4\x79\x5e\xd1\x72\x5e\xec\xc8\x9b\x55\x4d\xcb\xa0\x8c\xb8\xca\x92\xf5\xce\x3b\x46\xfa\x52\xf3\xac\x7c\x77\xe1\x8e\xf7\x7c\x77\x9a\x8b\x19\x41\xef\x12\xfc\xfc\x6c\xfb\xd6\x25\xf6\xbe\xb2\x2f\xe6\x74\xd2\xf2\x09\x21\x06\xb5\x74\x91\x5b\x39\x73\x4b\x30\x6f\x49\x2e\x09\xa8\x6a\xc6\x36\x1f\xb4\xa5\xd4\xdb\x59\x13\x70\xd6\x11\x5b\x2b\xaa\x2a\xe8\x8c\x08\x11\x5b\xdc\xa0\xf9\x6a\x21\x2a\xae\x59\x40\x16\x9b\xbc\x5f\xd7\xd2\xd5\x24\xca\xcc\x2b\xcf\x71\x17\xcc\xf6\xac\x05\x33\x9b\x2b\xca\x25\x6d\x83\x9d\xd2\xcb\x1d\xb7\x41\xd6\x16\x87\x67\xc8\x4a\x9d\x25\x0f\xe5\x32\xd0\x1f\x1f\x3e\xea\xe8\xde\x9d\x2f\x7f\xf9\x73\xc9\x73\xc5\x7c\x94\x7e\xf1\xfb\x82\x6b\x61\x3d\xe5\x68\x9f\x69\x60\xef\x98\x8a\xce\x69\x1b\x9d\xb1\xef\x66\xbc\x8b\x73\x48\x6f\x2d\x73\x46\x9f\xd5\x32\xb2\x90\x3d\x9b\xa5\x94\x17\x69\x7d\x9c\x56\x14\xbe\xd2\xdb\xbb\x78\x7d\xeb\x46\x89\xd0\x40\x1d\xff\xe5\x6f\xc8\x17\x22\xfb\xe6\x50\x9f\x45\x8e\x73\x2f\x72\xb2\xe4\x78\x16\x35\x5c\xc2\xc6\x59\xb8\x5f\xc3\xd1\x00\x66\x98\x4a\xd0\x12\xec\xc8\x6d\xfe\xa9\x68\xe9\x6a\xaa\xbb\xe5\xb0\xdd\x67\x4a\x00\xf3\xb8\x97\x2c\xe0\xb5\x47\x5a\xc0\x19\xcd\xd3\xc7\x69\xf1\x1e\xdf\xb8\xf5\xcc\x95\xa3\x9b\x5f\x29\x95\x78\x39\x8a\xab\x92\x6b\xdc\x19\x68\x7b\xce\xe0\x2a\x94\xd3\xff\xcd\xc3\x0f\x78\xf6\x12\x2e\xd0\xe1\x64\x8f\xfe\x33\x5e\xb0\x6e\x1f\xce\x84\xda\x7e\x1c\xdf\xbc\xde\xbf\xd2\x38\xa8\x3f\x7d\x7d\xab\x64\x95\xce\xa9\xaf\xd7\xb7\x99\x85\x1e\xb0\xda\xd6\x47\x53\x19\x81\xf9\x1e\x61\x66\xc4\x08\xf3\xbc\xac\x2a\x79\x97\xf7\xf4\x7c\xcf\xf2\x9e\x05\x1e\x81\x51\x37\xc1\xb1\x12\xf5\x5d\xcc\xdd\xba\x33\x19\x0a\x7b\x52\x9a\xd5\xe1\xcb\x97\x7f\xe4\xb7\xcc\x8b\x1a\xfd\x9e\x92\xc2\x81\x3e\x70\x76\xc0\x4e\x61\x37\xdc\xd7\x82\x33\xf8\x75\x50\xf6\xe8\xef\x99\xa2\x47\x7f\x85\x8f\x52\xe7\xb7\xcf\x5d\x94\x3b\xe4\x72\x5a\xf5\xba\x74\xea\x33\x62\xb1\x6a\xe7\x78\x9e\x6c\x65\x94\x04\xf0\xed\xbf\x7f\x8c\xda\x67\xcd\x08\x97\xac\x65\xf3\xc4\x74\x98\xb7\x8f\x69\xcc\xff\x82\xf4\x09\x7a\x95\xf5\x08\x8f\xb1\x84\xab\x5b\xe5\xd5\xa1\xda\x8b\xe2\xf8\x20\xea\x3c\xa8\xa2\x5e\xd5\xf8\x63\x3c\x7b\xfa\x5d\xe0\x66\x5c\x50\x71\x85\x99\x7f\x7a\x08\xa9\x1d\xb7\x55\x7b\x93\x04\xa9\xfd\xc1\x0e\xb0\xa6\xbd\x0e\x93\x5d\xd8\x24\x93\x49\x30\x2b\x76\x7e\xde\xef\xef\x12\x1e\x31\xb5\x97\xf8\x0d\x58\xa9\x6c\x6c\x88\x6e\x1c\x42\xca\x06\xc2\xf0\xad\x41\xee\x9b\xe2\x69\x5c\x17\x80\xca\x31\x5f\x3d\xeb\x1e\x7f\x1d\xfa\x32\xa6\x53\xa0\xdc\xee\xa1\xb0\x7e\x09\x5d\x36\x95\x62\xe0\x09\x0f\x7c\x5e\x70\x09\xa9\x30\x0a\x49\x88\x6b\xc2\x31\xe1\x15\xba\x6b\x40\x1f\x05\x4d\xdc\x42\xed\x35\xea\x27\xc1\x2e\xf4\x4d\x2d\x89\x85\x5a\xd0\x24\x9b\x9b\x93\x89\x0f\x03\x40\x5c\xc7\xac\x3a\xea\x54\x11\xa2\x48\xf8\xa9\x54\xee\x03\xab\x8d\x35\xd7\x53\xa0\x69\x0c\x59\x28\x27\x0a\xe5\x28\x44\x06\x65\x03\xfa\x49\xd0\x44\xad\x84\xfb\x27\xa4\x7e\x24\x43\xf6\xa4\xa1\x8d\x7c\x64\x23\xcf\x32\xa6\xcf\x57\x1b\xca\x4f\x64\xca\x03\x02\x30\xd4\x22\xdb\x13\x2f\x5e\xc3\xac\x93\x0a\xd7\x89\x13\x0a\x03\xcd\xec\x2b\x48\x64\x6f\xc7\x63\x72\xb9\x2e\x2b\x3d\x55\x24\xbd\xb9\xd1\x00\x02\x23\xe9\x31\x7b\xa2\xc7\x22\x0a\xeb\x20\x0d\x8b\xc7\x02\x5f\x0e\x49\xa5\x12\x5d\x4e\x2f\x89\xb6\x47\x25\x43\x12\xb1\x21\x89\xe4\x90\x8c\xe4\x90\xc4\xce\x90\x8c\xac\x21\x01\xc9\x78\x6c\x2f\xc3\x91\xf5\xa0\x57\x8c\x57\xac\x46\x25\xd6\x83\x85\xad\xc1\x32\xfd\x9a\x56\x93\xea\xf1\x68\xc2\x87\x36\x12\x6b\x08\x6c\x34\x82\xf1\x78\xca\xc8\xe4\x02\x90\x88\xad\x70\xaa\x77\x51\x13\xd6\x34\x2c\xcb\xa6\x4d\xaa\x83\xa9\xc3\x5a\x3f\x4a\x2d\xe7\xef\xbe\x85\x12\xf7\xe9\xaa\x83\x3e\x41\x0d\x3a\x0b\x3b\x92\xc1\xc1\x8d\xe3\xd8\x90\x6d\x49\x90\x86\xb7\x22\xda\xaf\x0d\x10\xf6\x05\x10\x3d\xf4\x85\x3f\xd6\xcd\x04\xd4\x03\x10\x55\x1b\x01\x18\x85\x6c\xad\xa4\x01\x88\xc3\x91\xae\x1e\x74\xc2\x91\x8c\x8d\x74\xa9\x53\xa9\xc4\x72\x3a\x7b\x22\xef\x66\x98\x04\x6b\x71\xd8\xb3\xb3\xf7\x64\x76\xe5\x16\xb3\xb3\x8c\x17\x4c\xe9\xb0\x38\xa4\x00\xd6\x3a\xc9\x08\x53\xa9\xdc\x0b\x09\xfb\x88\xbb\xf0\xe1\x9d\x9e\x48\xe2\x5e\x31\x45\x8b\x57\x28\x17\xd2\x73\xb7\xc4\x3d\x84\xbb\x22\xc3\x97\x10\xed\xdf\xe9\xf5\x52\x48\x33\x01\xe6\x74\x38\x7b\x10\xe5\x02\xf0\x3d\xbf\x63\x79\x99\x37\xc1\xf6\x76\xda\x95\x8a\xfd\x0b\xa4\x61\x1d\x8c\xc2\x8d\x06\x88\xc3\x1c\xa9\xdf\xd8\x18\x4d\x0a\xf6\x5b\x07\xf4\xcc\xfc\x74\xad\xed\xd3\x31\xdb\x07\xf4\xc3\xfa\xa5\xfe\xe5\xee\xa5\xbe\x22\x29\xc3\xb0\x63\xf6\x8f\x01\xfd\x7e\xd0\xec\xb4\xfa\x6d\x1e\xf4\xd2\x54\x35\xb4\x17\x33\xdb\x15\x1b\xd1\x78\xbc\x31\x10\x21\x1f\xfd\x61\x20\xc2\x22\xf8\x4e\x01\xb3\xc7\x7a\xe3\xf1\x20\x00\xb1\xaf\x7c\x9d\x8a\x30\x24\xd8\x1f\x02\x12\x3c\x1f\xd6\x77\xfd\xf4\x32\xda\x4d\xc6\x63\x3f\x09\x87\x41\x73\x14\x0e\x41\xba\xb9\x19\x34\xd3\xcd\x4d\xbe\x01\x4d\x39\xb5\x69\xc0\x68\x3c\x4e\x26\x7c\x56\x62\xf3\x30\x34\xb4\x06\x45\x4e\x87\x59\xb6\xb9\x09\xd9\x2e\x9c\x90\x6d\x67\x42\xb6\xdb\x9a\x1e\x5d\xf1\xd9\x82\x36\x1d\x24\xd6\xe0\xc6\x61\xfd\x52\x7c\x79\x74\x29\x56\x83\xdb\x09\x89\x19\x5c\x03\xfa\x71\xd0\x24\xad\xb8\xad\x07\xd0\x99\x2b\x8b\xee\xf0\x51\xed\x04\x6a\x6b\xd8\x03\xdb\xb1\x07\x16\x03\x04\xa2\x60\xcd\x7c\xed\x19\xac\x9e\xaf\x57\x2a\xa9\x70\xda\x9c\xf0\x35\x22\xa3\xbf\x20\xbf\x03\x30\x1b\x76\xfd\xb9\xa3\x43\x60\xa4\x13\xc3\x91\x58\xde\x09\xc3\x7c\x38\x46\x58\x93\xd6\x77\x3c\x26\xa3\xa5\x59\x00\x28\x84\x35\x75\x51\x00\x49\x48\xc6\x63\xb4\x66\x47\x7e\x49\xc6\xe3\x6a\x23\x0c\x43\xc6\xa9\x24\xda\x63\x71\xc4\x7e\x81\x86\x0e\xe0\xc2\x67\x37\xea\x1e\x45\xb8\x23\x1f\x2b\xb1\xb1\x91\x3b\x34\x02\xb0\xc6\x18\x8f\xe1\x35\x14\x75\x08\xa2\xa8\x93\x86\x23\x83\xb9\x30\x16\x25\x61\x61\xf8\x87\x91\x0f\x83\x1a\x4d\x5e\x19\x0e\x21\xb9\x1a\xf1\x70\x11\x72\xfb\xfb\x23\x9f\x66\x3e\x05\xd6\x78\xec\x9d\x0c\xe1\x95\x3e\x8c\xba\x8b\x56\xcf\x6f\x07\x29\xa3\x1a\x45\x2d\xec\x36\x9a\xd5\xc6\x64\x4d\x1c\xdc\xa7\xde\x87\xaf\xff\x93\xd7\xf4\xae\x78\xc0\xfb\xff\xfe\xf9\xff\x90\xd0\xdb\x7f\xa5\x80\x7f\xa5\x80\xbf\x96\xc0\x07\xbf\xff\x85\x86\x7e\xae\xa1\x5f\x69\xe8\x97\xaa\xc0\xbf\x96\xc0\x3b\xaa\xae\x77\x4c\x15\xbf\xd5\xd0\x6f\x34\xf4\x8f\x1a\xfa\x07\x09\xbd\xaf\x5a\x7a\xef\xa7\xaa\xd2\x6f\xa9\x94\x37\x74\xee\x9f\xa9\x6f\xff\x46\x7d\xfb\xbd\x02\xfe\x83\xaa\x48\xa1\xf0\xbe\x41\xe1\xa7\x1a\xfa\xb5\x86\xd4\x40\x7c\xf0\xa6\xc6\x59\x35\xf8\xbe\xaa\xf4\xc3\xdf\xfd\x57\x09\x7d\xf4\x63\x8e\x28\x6f\xfb\xdb\x0c\xba\xce\xda\xfc\x67\x0d\xfd\x4c\x41\x1f\xfd\x98\xf7\xed\x0e\x07\x79\x1b\xaf\x70\xf0\x4d\x06\x7e\x91\x83\xbf\x37\x20\xaf\xe0\x2b\xac\xa5\xd7\xff\x5f\xaf\xe9\xbd\xc8\x27\xe6\x67\x12\xfa\xe0\xcd\xbf\xd6\xd0\xb7\x34\xf4\x6d\x09\xfd\xcb\xbf\x96\xc0\xbb\x2a\xd7\xbb\xff\x4a\x02\x1f\xbe\xce\x5a\xbb\xca\x2b\xfb\x4f\x12\x7a\xe7\xdb\x0a\xf8\x8e\x02\xbe\xab\x80\xef\x49\xe0\xed\x7f\x2b\x81\x0f\xde\x54\x99\xde\x55\x49\xef\xff\x41\x02\x1f\xfd\xf8\x8f\x12\xfa\xf0\xf5\xb7\xbc\xa6\x77\x8d\x37\xf3\x73\x09\x7d\xf0\xe6\x77\x25\xf4\xce\xdf\xe8\xa4\xef\x69\xe8\xfb\x1a\x7a\x5d\x43\x2a\xdf\x3b\xea\xe3\xbb\xff\x5e\x01\xaa\xae\x77\xff\x9d\x04\x3e\xfa\x89\x6a\xf2\xbd\xdf\x31\xe0\xab\x0c\xfa\x96\x86\xd8\x1c\x5d\x7b\x8d\x41\xff\x46\x41\x1f\xbe\xce\x86\xfb\x3a\x47\xf2\xff\x94\xd0\xdb\xdf\x51\xc0\xbf\x53\xc0\x77\x25\xf0\xc1\x1f\xfe\x4a\x41\xbf\xff\xa3\x4e\xfb\x96\x86\xfe\x5a\x7f\xfd\x67\x09\xbd\xf3\xba\x4a\x7a\xf3\x6f\x35\xf4\x77\xea\xa3\x4a\x7a\x47\xa5\xbc\xfd\xef\x75\x0d\x0a\xb1\x77\x7e\x24\x81\xf7\x55\x3b\xef\x7f\x5b\x67\x7a\x53\x37\xad\xd2\xde\xff\xa5\x6e\xe6\xc7\xaa\x86\x1f\xea\x24\x03\xa9\x5a\xdf\xfd\xbe\x02\xfe\x46\x02\x1f\xbe\xce\x26\xf3\x06\x1f\x93\x5f\x48\xe8\x83\x37\xdf\x90\xd0\xbb\xff\x51\x02\x1f\xfd\x44\x65\xfb\xf0\x75\xd6\xdb\xcf\xf1\x02\xff\x59\x42\xef\xfd\xa3\x04\xde\xf9\xb1\x04\x3e\x78\xf3\xa7\x2a\xe9\x0d\x05\xa8\x94\xf7\x7e\xa1\x52\x7e\xa6\x52\x7e\x2e\x81\x77\x7f\x20\x81\x8f\xde\x50\xb9\x3f\xfa\xc9\x7f\xd7\xd0\x1f\x25\xf4\xe1\xeb\x2c\xed\x25\x8e\xc3\x2f\x25\xf4\xce\xcf\x25\xf0\xc1\x9b\x3f\xd3\xd0\x2f\x24\xf4\xfe\x1b\x3a\xc9\x64\xfb\xa5\x86\x7e\xa5\xea\x50\xf9\x3f\xfc\xdd\x7f\xd6\xd0\x7f\x93\xd0\x47\x6f\xfc\x07\x95\xf6\x3a\x43\xe4\x26\x6f\xfe\xbf\x48\xe8\xed\xef\x29\xe0\x3f\x28\xe0\x6f\x24\xf0\xce\x2f\x15\xf0\x2b\x05\xfc\x5a\x01\xbf\x55\x99\xff\x67\x09\x7c\xf0\xe6\x6f\x14\xf4\x87\xef\x48\xe8\x3d\xf5\xf1\x7d\x95\xf2\xfe\x77\x75\x26\x05\xbd\xa3\xcb\xbd\xa9\x6a\x7f\xf7\xef\x25\xf0\xe1\xeb\xff\xc3\x6b\x7a\x9f\xe7\x08\xff\x4a\x42\xef\xfc\xa3\x04\xfe\xe5\x3b\x12\xf8\xf0\x07\x6c\xbd\x7f\x81\xe7\xfa\xbf\x24\xf4\xc1\x9b\xbf\x95\xd0\x7b\xbf\xd4\x49\xff\x20\xa1\x77\xfe\x49\x27\xfd\xa3\x84\xde\xfd\xa1\x04\x3e\xfc\xdd\x7f\x91\xd0\x47\x3f\xf9\x2b\x0d\xfd\xb5\x86\xbe\xa5\xa0\x37\x7e\xa6\x4a\xfc\x80\xd1\xac\x97\x79\xf3\xbf\x96\xd0\x3b\xff\x43\x01\x6f\x29\xe0\xbf\x4b\xe0\x83\x37\xff\x49\x43\x6f\xaa\x8f\x7f\xd0\x49\xff\xac\xa1\xdf\x4b\xe8\x4f\xaa\xfa\xf7\x55\x15\x1f\xfe\xee\x67\x1a\xfa\xa9\x84\x3e\xfa\xc9\x77\x34\xf4\x6d\x05\xbd\xf1\x57\x12\x7a\x8f\x91\xc0\x97\xd9\x60\xbd\xc7\xb3\x7d\x93\xe3\xcd\x7a\x75\x8b\xe3\xfd\x7f\x4b\xe8\x83\x37\xff\xa8\xa0\xb7\xfe\x4a\x43\x2a\xdf\x87\xbf\xfb\x8d\x84\xde\xfd\xb1\x4a\xfa\x01\x23\xe1\xb7\x79\x25\xbf\x91\xd0\x7b\x6f\x4a\xe0\x4f\xea\xdb\xdb\xff\x51\x02\x1f\xbc\xf5\x2d\xf5\xed\xdf\xea\xa4\x6f\xab\xa4\x7f\xa3\x93\xbe\xab\xa1\xef\x48\xe8\xfd\x9f\x4a\xe0\xdd\x9f\x48\xe0\xa3\x37\xbe\xaf\xa1\x9f\xab\xa6\x79\x41\xde\x4f\x46\xa3\x6e\x8b\x7e\xb2\x36\xef\x70\x14\xff\xab\x84\xde\x7e\x5d\x01\x3f\x50\xc0\xdf\x4a\xe0\x83\x3f\xbc\xae\xa1\xef\x6b\xe8\xef\x34\xa4\xf2\xbd\xfd\xbf\xa8\xa4\xb7\xbe\x27\xa1\xf7\x7f\xad\x93\xfe\x46\x42\x7f\xfa\x9e\x4e\xd2\x95\xbd\xa5\x1a\xf8\x93\xca\xf5\xfe\x6f\x14\xf0\x5b\x55\xbb\x6a\xf0\xfd\x5f\xe9\x96\x75\x9d\xaa\xa6\xf7\xfe\xa3\xca\xa4\x31\x50\x79\xde\xfd\xa9\x2e\xf6\x63\x0d\xfd\x48\x43\xe6\xeb\x1b\x1a\xfa\x99\x86\x34\xce\x7f\xf8\xa1\x6a\x49\x61\xf1\x9e\xea\xe2\xdb\xfa\xd3\x1f\x55\x93\xdf\x56\xc0\xff\x2e\x81\x8f\x7e\xf2\x5d\x0d\xa9\x3a\xdf\xe5\xcd\xdc\xe4\x69\x1c\x59\x8e\x36\x4f\x7c\x85\x4f\x16\x5b\x04\x77\xf9\x64\xfd\x56\x42\x1f\xbc\xf5\xb7\x1a\xfa\x3b\x09\xbd\xfb\x73\x09\x7c\xf8\xbb\xff\x24\xa1\x8f\x7e\xf2\x7d\x0d\xbd\xae\x21\x55\xf4\xc3\x1f\x30\xf4\xfe\x92\x57\xfc\x3b\x09\x7d\xf4\x93\xbf\xd3\xd0\x0f\x25\xf4\x2f\xdf\x95\xc0\x87\x3f\x60\x2b\xf4\x1e\x2f\xf0\x0f\x12\xfa\xd3\xdf\x4a\xe0\x83\xb7\x7e\xa8\x92\x14\xf0\xfe\xf7\x15\xf0\xba\xce\xf4\x23\x0d\xfd\x58\x65\xff\x3b\x9d\xf4\x86\x84\xfe\xe5\x7b\x12\xf8\xf0\x77\x3f\x97\xd0\x47\x3f\x51\x25\x3f\x7a\xe3\x17\x1a\xfa\x6b\x95\xef\x07\x6c\x53\xdc\xe7\x98\xfd\x3f\x12\xfa\xe0\xf7\x6f\x48\xe8\x4f\x3f\x52\x49\x6f\xfd\x5c\x25\xfd\x58\x27\xfd\x54\x25\xfd\x54\x27\xfd\x42\x43\x3f\xd3\xd0\x2f\x25\xf4\xfe\x0f\x55\x7e\x55\xfd\x87\xbf\xfb\xa3\x84\x3e\x7a\xe3\x97\x1a\xfa\x96\xfa\xfa\x03\xc6\x8d\xec\x71\xd4\xfe\x51\x42\x1f\xbc\xf5\x2b\x09\xfd\xe9\xe7\x3a\xe9\xd7\x12\x7a\xff\x47\xea\xdb\xcf\xf4\xb7\xdf\x6a\xe8\x37\xea\xe3\x2f\x24\xf0\xae\x2a\xf7\xae\xfa\xf4\xfe\x1f\x25\xf0\xd1\x1b\xdf\x56\xd0\x8f\x19\x62\x7b\x5f\xe5\xf8\xb0\xe9\x7c\x85\xe3\xf3\xdf\x24\xf4\xf6\xff\xaa\x80\x1f\x29\xe0\x7f\x93\xc0\x9f\x7e\x29\x81\x0f\xde\x7a\x53\x25\xfd\x4a\x27\xfd\x5e\x25\xfd\x5a\x95\xfb\xb1\x04\xde\x53\x15\xbc\xf7\xff\xb3\xf7\x6e\x7d\x8e\x1d\xd5\xa1\xf8\x7b\x7f\x0a\x69\x07\x34\xbb\xdc\x25\xb5\xda\x26\x24\x51\xcf\x9e\x66\x6c\x8f\x83\x4f\x3c\x1e\x9f\x99\xb1\x09\xd1\x88\x66\xb7\x76\x49\x2a\x66\xab\x4a\xd4\xae\xdd\x17\xb7\xf4\xff\x85\x43\x08\xe1\x10\x4e\x42\x26\x84\x43\x82\xe1\x70\x08\x87\x10\x42\x88\x21\x06\x5f\x20\x3c\xf8\x9e\x07\xe7\x33\xcc\x3c\xfa\x53\xfc\x7f\x75\xdd\xb5\x6f\x6a\xf5\xdc\x6c\xe3\x9e\x87\xe9\xa5\xda\x75\x59\x55\xb5\x6a\xd5\x5a\xab\x56\xad\xfa\xa6\x01\xbe\x61\x00\xd3\xda\xcd\x57\xfe\x9f\x29\xff\xaf\x06\xf8\x37\x93\xe9\x86\x06\xde\xfa\x5b\x03\xfc\x9d\x06\xde\xf8\xa9\x2d\x6f\x31\x79\xc5\xa2\xf9\xca\xbf\x5a\xe8\x5f\x2c\xf4\x6f\x16\xfa\x47\x8b\xfb\xcf\x4c\x93\x3f\xb3\x49\xbf\xb0\xd0\xbf\x6b\xe8\xed\x3f\xd3\xc0\xad\x1b\x82\x7b\x3e\x23\x87\xed\x17\x1a\xba\xf9\xd2\xaf\x2c\xf4\x1f\x1a\x7a\xe3\x67\x1a\x78\xf7\xb9\xef\x68\xe8\xed\x2f\xd9\x24\x41\x62\xcf\x48\xc5\xe0\x86\x20\xf1\x4f\xc9\xea\x7e\xa9\xa1\x9b\x2f\xff\xa9\x85\xfe\x87\x86\x5e\xff\x77\x9b\xf4\xe7\x16\xfa\x33\x0b\xfd\x85\x86\x6e\x3d\xff\x33\x03\xdd\x10\x42\xcb\x1f\xcb\x8a\x5f\xd4\xd0\xcd\x97\xff\xa7\x85\xfe\x52\x43\xb7\x6e\x08\x56\xf3\x69\x99\xef\x25\x0d\xdd\x7c\xe5\x67\x1a\x7a\xf5\x39\x0d\xbc\xfe\x0b\xfb\xed\x45\x0d\xbd\x65\x32\xdd\x7c\xd9\x54\xf1\xfa\x8b\x36\x57\x96\xff\xdf\x35\xf4\xc6\xcf\x35\xf0\xf6\xff\xb2\xdf\xfe\x43\x43\xb7\x6e\x08\x79\xe8\x4f\x24\x16\x2f\x6b\xe8\xf5\x97\x34\x70\xf3\xe5\xbf\x36\x49\xaf\x18\xe0\xd7\xf6\xdb\xdf\x58\xe8\x6f\x35\xf4\xc6\x0b\x1a\x78\xeb\x1f\x35\x70\xeb\xf9\xdf\x58\xe8\xc7\x1a\x7a\xf7\xb9\xff\x6b\xd2\x6e\x88\xfa\x43\xd1\xf8\xaf\xbf\xa0\xa1\x9b\x2f\xff\xbd\x86\x5e\xfd\x3f\x06\xf8\x9e\x01\xfe\xaf\xcd\xf4\x43\x0b\xfd\xc0\x42\x3f\xb6\xd0\x8f\x4c\x81\xef\x6b\xe0\x35\x53\xfd\x6b\x5f\xb4\x99\x9e\xb7\xd0\x4f\x2d\xf4\x82\x85\x7e\xae\xa1\xb7\x4c\x4b\x6f\x5a\x2c\xfe\xd1\xa4\x7c\xd7\xe6\x36\xed\xbc\x6a\xb0\x79\xf3\x15\x03\xfc\x2f\x53\x91\x41\xe1\xad\x0c\x85\xef\x59\xe8\x27\x16\xfa\xa5\x81\x5e\xb4\x38\x7f\x49\x03\xb7\x9e\x37\xd5\xbf\x6d\x06\xee\xdd\x6f\x4b\x44\x65\xdb\x62\x2d\x87\x48\xb4\xf9\x6b\x0b\x7d\xdf\x40\xef\x7e\x5b\xf6\x8d\x4a\x50\xb6\x91\x4a\x50\xcc\x75\xb8\x27\xc1\x57\x32\x50\x56\x70\x28\xa7\x48\xec\xe7\xbb\x72\x8a\xfe\x87\x86\x6e\xbe\xf8\x45\x0b\x7d\xc9\x42\x5f\xd6\xd0\x1b\x7f\x6a\x00\x93\xeb\xed\x1b\x1a\xb8\x75\x43\xd0\xcc\x50\x56\xf6\x45\x0d\xbd\xf6\x65\x03\x7c\xc5\x00\x5f\x35\xc0\xd7\x34\xf0\xea\x0f\x35\x70\xf3\x45\x93\xe9\x8d\xbf\xd0\xc0\x5b\xbf\xd2\xc0\xbb\xdf\xfe\x8d\x86\x6e\xfd\xf9\x9f\x19\xe8\x86\x68\x3a\x92\x0d\xfe\x99\x86\x6e\xbe\xf8\x55\x0d\xbd\xf6\x57\x36\xe9\x6b\x16\xfa\xba\x85\x6e\x58\xc8\xe4\x7b\xcd\x7c\x7c\xe3\x2f\x35\xf0\xf6\xdf\x19\xe0\x9b\x1a\x78\xf7\xb9\x97\x35\xf4\xa6\x98\x99\x48\x6a\xcd\x7f\x6e\xa0\x5b\x37\xc4\x5a\x41\x12\xa1\x2f\x69\xe8\xd5\x7f\x32\xc0\x8f\x0c\xf0\xcf\x1a\xb8\xf9\xca\x17\x0c\xf4\xf2\x6f\x6c\xda\x97\x2c\xf4\x45\xfb\xf5\xd7\x1a\x7a\xed\x86\x49\x7a\xf1\x1b\x16\xfa\xa6\xf9\x68\x92\x5e\x33\x29\xaf\xfe\xd8\xd6\xf0\x8a\xf9\xf6\x0f\x1a\x78\xcb\xb4\xf3\xd6\x97\x6d\xa6\x97\x6c\xd3\x26\xed\xad\x1f\xd9\x66\x9e\x33\x35\x7c\xcb\x26\x65\x90\xa9\xf5\x6d\x53\xf0\x6d\x93\xf2\xa6\x29\x77\xeb\x86\xc0\x6f\x24\x07\xe7\xcf\x35\x74\xf3\xc5\xef\x6a\xe8\x8d\xbf\xd1\xc0\xbb\xcf\xfd\x4a\x43\xb7\x6e\x88\xe1\x1f\xcb\x02\x5f\xd6\xd0\x9b\x2f\x68\xe0\xb5\xe7\x34\x70\xf3\xc5\xef\x99\xa4\xef\x1a\xc0\xa4\xbc\xf9\x43\x93\xf2\x7d\x93\xf2\x03\x0d\xbc\xfd\x7f\x34\xf0\xee\x77\x4c\xee\x9b\x2f\xbc\x64\xd2\x9e\xfb\x8d\x86\x6e\xdd\x10\x63\x39\x91\x38\xfc\x85\x86\x5e\xfb\x81\x06\x6e\xbe\xf8\x7d\x0b\xfd\x50\x43\x6f\x7d\xd7\x26\x65\xd9\x7e\x64\xa1\x1f\x1b\xe8\xe5\xbf\x33\xb5\x99\x92\xb7\x9e\xff\x27\x0b\xfd\x42\x43\x6f\x9b\x3a\xde\x10\x63\x37\xd9\x93\x18\x09\x01\x09\x4b\x8c\xbe\xa2\xa1\x57\xff\xc5\x00\x3f\x31\xc0\xbf\x6a\xe0\xb5\x1f\x19\xe0\xc7\x06\xb0\x79\x7e\xaa\x81\x9b\x2f\x5a\xe8\x15\x53\xe5\x9b\x7f\xad\x81\xb7\x4c\xca\x5b\x5f\xb5\x99\x0c\xf4\x5a\x56\x83\xa9\xf4\xed\x7f\x32\xdf\x9e\xd7\xc0\xad\x1b\x82\x4c\x3e\x27\x11\xfe\x9f\x1a\x7a\xed\x05\x0d\xbc\xf9\x6f\x1a\x78\xfb\x2b\x1a\xb8\x75\x43\xec\x10\xd7\x65\xf6\xaf\x6a\xe8\xe6\x8b\xcf\x6b\xe8\xcd\x1f\xd9\xa4\x9f\x6b\xe8\xb5\x5f\xda\xa4\x17\x34\xf4\xc6\xb7\x34\x70\xeb\xf9\x7f\xd6\xd0\xbb\xcf\x7d\xc1\x42\x5f\xb4\xd0\x97\x0c\xf4\x9d\xef\x9b\x12\x37\x04\xe1\xc6\xb2\xf9\xbf\xd4\xd0\xeb\x7f\xaa\x81\xd7\x5e\x36\xc0\x7f\x68\xe0\xe6\x8b\xbf\xb4\xd0\x4b\xe6\xe3\xaf\x6c\xd2\xaf\x2d\xf4\x8a\xa9\xeb\x37\x06\xf8\x1f\x1a\x78\xe3\xef\x35\xf0\xf6\x8f\x35\x70\xeb\xf9\xef\x69\xe8\xdd\xe7\xbe\x62\xa0\xef\x7c\xc1\xa6\x7d\x59\x43\x6f\xca\x8f\x6a\xd0\x84\x5c\x38\x95\x58\x7f\x4d\x43\x37\x5f\xfc\x8d\x81\x5e\xfa\x82\x85\xbe\xa8\xa1\xb7\x9f\x37\xc0\x4f\x35\x70\xeb\x86\x58\x52\x44\xd6\xf1\xbf\x34\xf4\xe6\x4b\x1a\x78\xfd\xcf\x34\xf0\xea\xf3\x1a\xb8\xf9\xd2\x97\xcc\xb7\xbf\xb0\x49\x5f\x36\x49\x7f\x6e\x93\xbe\x6a\xa1\xaf\x68\xe8\x8d\xef\x68\xe0\xed\x9f\x99\xec\xe6\xd3\xbb\xdf\xf9\xba\x85\x7e\x60\x70\x10\xd3\x40\x54\x2f\x45\x49\x2a\x31\xfc\x2b\x0d\xbd\xfa\x33\x03\xfc\xdc\x00\xff\xae\x81\x9b\xaf\xdc\xb0\xd0\xd7\x2d\xf4\x4d\x0b\x7d\xc3\x14\x78\xc1\x24\xbd\xf4\x35\x0d\xbd\xf5\x13\x9b\x64\x1a\x7a\xfd\x6b\x36\xc9\x56\xf6\x92\x69\xe0\x75\x93\xeb\xad\x9f\x1a\xe0\x79\x53\xfb\x2f\x4c\xca\x8f\x6d\xcb\xb6\x4e\x53\xd3\x9b\x7f\x63\x32\x59\x0c\x4c\x9e\x37\xbe\x67\x8b\x3d\x67\xa1\x7f\xb0\x50\xf6\xf5\xbb\x16\xfa\xbe\x85\x2c\xce\xaf\x7c\xcb\xb4\x64\xb0\x78\xd3\x74\xf1\xd5\x17\x4d\xca\x6f\x34\xf0\xf6\xdf\x6a\xe0\xdd\xe7\xbe\x6a\x21\x53\xd5\xdb\x66\xb4\xde\x90\xcd\x48\xce\x20\x21\x29\x70\x3c\x27\xd1\xa6\x72\xb2\x04\x42\x33\x39\x59\x7f\xad\xa1\x9b\x2f\x7d\xc3\x42\xdf\xd4\xd0\x1b\x3f\x30\x49\x2f\xfc\x5a\x43\xef\x3e\xf7\x75\x0b\xdd\xb0\x90\x29\x7a\xeb\x86\x60\xdd\x9f\x97\x15\x7f\x5d\x43\x6f\x7f\x55\x03\xef\x3e\xf7\x4d\x0b\x7d\x4b\x43\xb7\x6e\x88\x41\x62\xb2\xc0\xdf\x68\xe8\xf5\x6f\x68\xe0\xe6\x4b\xdf\x32\x49\x06\x78\xeb\xeb\x06\xb8\x61\x33\xfd\x83\x85\x9e\x33\xd9\xbf\x69\x93\xbe\xab\xa1\xb7\xbf\x66\x80\x5f\x6b\xe0\xdd\xe7\x4c\xc1\x77\xbf\xf3\x43\x0b\x7d\x51\x43\xb7\x6e\x08\x89\x37\x91\x88\xdd\xd0\xd0\xab\xdf\xd5\xc0\xeb\xff\xa0\x81\x9b\x2f\xfd\xc0\x24\x3d\x67\x93\xbe\x67\x92\xbe\x67\x93\x7e\x68\xa1\xef\x5b\xe8\x47\x1a\x7a\xeb\x5b\x26\xbf\xa9\xfe\xad\xdf\x68\xe0\xdd\xef\xfc\xc8\x42\x5f\x32\x05\x5f\x36\x8d\xdf\xba\x21\x2a\xe3\x12\xc5\xbf\xd5\xd0\xcd\x97\x7e\x6c\xa0\x97\xbf\xa9\xa1\xd7\x7f\x60\x3f\xfe\x44\x43\x6f\xfd\x83\xf9\xf6\x7d\xfb\xed\x79\x0b\xfd\xd4\x7c\xfc\xa1\x06\xde\x30\xe5\xfe\xf3\x2f\x34\x70\xeb\xf9\xff\xa7\xa1\x77\xbf\xf3\x65\x03\x7d\x5b\x60\xcb\x95\xb0\x25\x24\xf5\x54\xa2\xf6\x0d\x0d\xbd\xfa\x92\x01\x5e\x36\xc0\x2b\x1a\x78\xfd\x47\x1a\xb8\xf9\x92\xc9\xf4\xfa\x8f\x6d\x92\xcd\xf5\x13\x53\xee\x57\x1a\x78\xf3\xdb\x06\xf8\xdf\x06\xf8\x3b\x03\xfc\xbd\x29\xff\xca\x0f\x4d\xf9\x9f\x1a\xe0\x79\x93\xe9\x6f\x35\xf0\x96\x41\xf2\xad\x6f\x6a\xe0\x8d\x7f\xb3\xe5\x2d\x26\xaf\x58\x34\x5f\xf9\xa9\x85\x7e\x62\xa1\xe7\x2d\xf4\x03\x8b\xfb\xcf\x4d\x93\x3f\xb7\x49\xbf\xb4\xd0\x0b\x1a\xfa\xcf\xaf\x68\xe0\xd6\x0d\x51\x72\x4f\x0e\xdb\xdf\x69\xe8\xe6\x4b\xbf\xb6\xd0\x6f\x34\xf4\x9f\x5f\xd5\xc0\xbb\xcf\x7d\xd7\x24\xfd\xa5\x4d\x12\x64\xb7\xa7\x34\x08\x31\x49\xfb\xb2\xba\x6f\x6a\xe8\xe6\xcb\x5f\xb0\xd0\x17\x35\xf4\xfa\x0b\x36\xe9\xcb\x16\xfa\x92\x85\xfe\xb7\x85\xbe\xa2\xa1\x5b\xcf\xff\xdc\x40\x37\xc4\xe8\x1e\xc8\x26\xfe\xb7\x86\x6e\xbe\xfc\x55\x0b\x7d\x4d\x43\xb7\x6e\x08\xd9\xe3\x50\xe6\xfb\x96\x86\x6e\xbe\xf2\x73\x0d\xbd\xfa\x6b\x0d\xbc\xfe\x4b\xfb\xed\x25\x0d\xbd\x65\x32\xdd\x7c\xf9\xaf\x4c\xf6\xdf\xd8\x5c\x36\xff\xcb\x59\xad\x2f\x68\xe8\x8d\x7f\xd7\xc0\xdb\x7f\x65\xbf\x99\x92\xb7\x6e\x88\xb9\x7c\x56\xe2\xf3\xf7\x1a\x7a\xfd\x65\x0d\xdc\x7c\xf9\xeb\x26\xe9\x57\x06\xf8\x0f\xfb\xed\x86\x85\xbe\xa1\xa1\x37\x7e\xa1\x81\xb7\x7e\xa0\x81\xb7\xff\x54\x03\xb7\x9e\xff\x17\x0d\xbd\xfb\xdc\xf7\x35\xf4\x8e\xd8\x80\xdf\xf9\xba\x80\xc4\x72\x7a\xe7\x1b\x02\x12\x43\xfb\xce\x37\x05\x24\xe4\xb0\x77\xbe\x25\xa0\x7f\xb6\x90\x98\xdc\x77\xbe\x2b\x20\xb1\xfb\xbf\xf3\x03\x01\xfd\xd8\x42\xa2\x7b\xef\xfc\x48\x40\xa2\xb1\x77\x9e\x17\x90\x20\xcb\x77\x5e\x10\x90\x90\x36\xdf\xf9\xa5\x80\x04\xd1\xbe\xf3\x92\x07\xbd\xff\xfa\x9f\x06\x7a\xe7\xaf\x6d\x9a\x6c\xe3\x37\x02\x12\x93\xf6\x5f\x5f\x12\xd0\x57\x0d\xf4\xce\xbf\xd9\x34\x81\xe9\x7f\x7d\x45\x40\x42\x4a\xfa\xaf\x2f\x7a\x8b\xcc\x97\x31\xcd\x7c\x19\x3d\xaf\xa3\x62\x0b\xfb\x08\x74\x18\x92\x8e\xb5\xfe\x46\xff\x33\xd7\xd2\x6e\xb7\xdb\x6d\x8b\x3f\xbf\x77\x61\xb0\x31\xce\xbb\x48\x1a\xb7\x8a\x3e\x1a\xcc\xe7\x68\x01\xaa\xfc\x2f\x19\x1a\xb5\xa7\x34\xc2\x23\x8c\xd8\x86\x01\x92\x0d\x86\x46\xa7\xaf\x91\x9f\xbe\x46\x7e\xfa\x1a\xf9\x87\xf4\x35\x72\x4d\x85\x24\xf0\x4c\x7a\x71\x19\xb6\x5a\xfa\xde\x4e\xf1\x83\xed\xcc\x76\x05\x2f\x32\x64\xb8\xe8\x55\x7c\x44\xad\xd6\x92\xe6\x72\x64\x15\x04\x81\x4d\x6f\x1a\x38\x23\xe0\x6d\x83\x5b\xcf\x36\x08\x8a\x6e\xc4\x96\xb7\xd2\x8c\x9c\x7d\xb1\xbc\xc5\x10\x37\x83\x00\xb5\x5a\xcd\x22\xd7\xca\x79\xc4\xda\x0a\x4a\x8b\x2c\xe7\xc1\xba\xf4\x69\x77\x5d\x43\xb9\xd7\x64\xfb\x68\xb8\xdb\x23\x8b\xde\x11\x0f\xd9\x18\xf1\x1e\x81\x33\x46\x95\xd7\x2d\x5e\xdc\x8e\x0f\x6a\xc5\x55\x2d\xe3\x5d\xb8\x93\x20\x7e\x51\xf3\xfe\x8b\x21\x09\xc7\x88\xf9\x7e\xc9\x01\xf4\x68\x87\xa5\xe4\x91\x70\x38\x41\x3d\x41\x54\x57\x10\x87\xc3\x70\x16\xee\xe2\x18\x73\x8c\x92\x9e\xae\x6b\x9a\xaf\xe8\x11\x27\xcb\xf6\xf1\x59\x7c\xef\xa1\xce\xe6\x43\x1e\xd0\x3e\xc8\x70\xc8\x50\xc8\x91\x41\xae\x7c\x01\xe1\x48\x3f\xe9\x66\xf2\xdb\x41\x32\xe5\x77\x0d\xa4\xc7\xd1\xf8\x36\x43\xb9\x7a\xe3\xb8\x5c\x35\x82\x3c\x73\x31\x0f\x05\xb3\xd7\xaf\x4f\x84\x31\x80\x49\x40\x3a\xa6\x0d\x98\x06\xa4\xa3\xaa\x85\x71\x40\x3a\xc3\xdd\x9c\xc7\x36\xea\x0c\x77\x83\x18\xca\x06\xf9\x04\x27\x1d\x31\x7e\x8f\x13\x19\x49\xf8\x80\xfb\xb1\xe0\xbf\xd4\x4f\x40\xab\x85\xfd\x54\x2e\x62\x99\x29\x41\x3c\xcb\x94\xc2\x04\x72\x31\x7b\xa6\xcd\x20\x81\x48\xb7\x19\xa4\xf2\x81\x7d\xd5\xff\x80\x2f\xa0\x0a\x80\x5e\xd9\x21\x43\x84\xa1\xcf\x73\xdd\x21\x01\xcb\xba\x93\x04\xcc\x74\x27\x0d\x98\xee\x4e\x9a\xeb\x4e\x5a\xdb\x9d\x34\xc3\x45\x74\x8b\xc8\x6e\x89\xce\xf9\xd4\xcf\xd0\x97\xa9\xa6\x03\xa0\xd5\xca\x7c\x47\x13\x48\x40\x33\x70\x5c\x5c\x4d\x2e\x98\x2b\x5d\x31\x46\x15\x19\xe5\x65\x26\x00\x2b\x32\x27\x90\x38\x88\xba\x03\x4b\xb2\x81\x4d\xc0\x02\xe6\x8a\xd5\x10\x87\x42\x96\xa5\x44\x49\x08\xa2\x39\xe8\x89\x82\xcf\x88\x85\x97\x78\x50\xe5\x5e\xb3\xc3\x25\x57\x4f\x27\x8c\x22\x9f\x88\x26\xdc\x01\xac\x9c\xae\xea\x06\x44\x45\xbb\xb2\xf2\xca\xaa\x99\xae\xfa\x91\xdd\x42\x9d\xc8\xe7\xba\x63\x0a\xbf\x52\xaf\x50\x07\x27\x8f\xaa\x50\x62\x28\x9a\xcf\x9d\x9f\x98\x8c\xe7\x73\x85\x4d\x22\xaf\xcb\x88\xfc\x0b\xa8\xe3\x8e\x55\x90\x5c\xe6\xa9\xab\x27\x87\x05\xee\xf4\x08\x21\x61\xb7\x88\xfc\x88\xb2\x0b\xe1\x70\xe2\x57\x09\xb1\xd9\x48\x0c\xc5\x96\x2b\x84\x12\x21\xcc\x92\xf9\x9c\xfa\x4c\x52\x15\xaf\xa6\x0e\x0e\x99\xa2\x86\xc5\x62\x01\x32\x31\xb6\x81\x7c\x70\xe4\x97\xa5\x27\x3f\xdb\xd6\xe9\xa8\xc1\x01\xa8\x94\x12\x1e\x09\x09\xa1\xbc\x21\xa4\xa3\x46\xd8\x90\x57\xd2\x1a\x61\xd2\x08\xad\xd4\xeb\x81\x05\x50\xd3\x25\xf1\x74\x2e\x84\x25\x55\x32\x38\x89\x10\x6b\x4f\x50\x3c\x13\xb2\xb7\xf9\x9b\x0b\x6d\x75\xdb\xd7\xa0\x7c\xfe\xdb\xba\x87\xb3\x7b\x31\x6b\xb9\x4b\x55\x3c\x73\xe1\x67\x41\x57\x48\x4f\x5a\xc8\x92\x42\x94\x66\x02\x5c\x88\x51\xa4\x83\x48\x3a\x55\x42\x5f\xe0\xfe\x98\xcf\x9b\x9b\x90\x88\x6e\x8f\xf0\x38\x55\xdf\x9b\x5d\x13\xd6\x10\x93\x06\x11\x32\x73\x67\x9f\x61\xae\xbf\x01\x58\xb7\xb9\x93\xce\x75\x74\x08\x09\x58\xe4\xaf\x43\x59\x9d\xcb\xc7\x46\x92\x4f\x10\x7f\xca\x8c\xe3\xa5\x51\x51\x4b\xb0\x0c\x7d\x67\x47\x8e\xf6\xce\x4e\xc0\xa1\x1c\x5d\x21\x28\xe7\x45\x1c\xb5\x8a\x9d\x6d\xb7\x46\x37\xbb\x8c\x46\x31\x1a\xf2\xf9\xbc\xa9\xa1\x6c\xa6\xf5\x06\xd2\xdc\x14\xdb\x49\xe9\x6b\x27\x99\x84\xd3\x5c\x96\x0a\xfa\x79\x8a\xd1\x83\x43\x93\x49\x69\x6f\xba\x13\x8f\x86\x1c\xd5\x2a\x2e\xa5\xc6\x7c\x91\x1d\xf6\xdd\x35\x04\x8e\x16\x00\x00\xd8\xec\x6a\x65\x2d\xbb\x3f\xb8\xb9\x58\xf8\xa0\x78\xe3\xc5\xd7\xac\x19\x92\x20\xd5\xba\x8a\xe6\xd6\x38\x48\xe5\x8a\x07\x2e\x8d\xaf\xb1\xa0\x8c\x04\x81\xf6\x8e\x07\xc4\xfa\x5e\x04\x0b\x48\x27\x9c\xcd\xe2\x43\xc5\x35\x6c\x06\x8b\x40\xa8\x3e\x30\x77\xf6\x43\x75\x19\x4e\xe3\xcb\xe6\x73\x23\xcb\x0a\x25\x54\xb2\xc5\x6c\x2c\x9b\x66\x2c\xd9\x76\xe2\x23\xd0\x73\xae\x59\x25\x5a\x47\xb7\x97\x24\x90\xb3\x7e\x2e\xa3\x11\x62\x88\x0c\xcd\x22\x12\x58\x34\x26\x61\x42\xce\xf0\xc6\x2e\x42\xa4\xa1\xdf\x08\xc3\x09\x8a\x1a\xed\x46\x92\xce\x10\xf3\x41\x2e\x87\x98\x0b\x79\x73\xc7\xea\xfc\x55\x36\x0e\x3f\xad\xa6\xde\x6d\x9d\x3a\xce\xa5\x56\xf2\x9e\x8c\xa0\xe7\xf3\xca\x52\x72\xd7\xc8\x31\x91\xd8\xec\x7d\x86\xb9\x35\x30\x69\xa0\xed\xba\x25\xc8\x8d\x50\xcd\x60\xb6\xc6\x7b\xcd\x2e\x74\x17\xb8\xf8\x6d\x16\xb4\x94\xbe\x7b\xa8\xcf\x07\x01\x83\xe8\x2e\xc9\xed\x43\x77\x41\x96\x37\xb1\x8a\x49\xe7\x56\xad\xe1\xd5\xbc\xf1\x8a\x98\xb7\x06\x3a\x98\x31\x94\x24\x62\x60\xa4\x9a\x8a\x30\x9f\x20\x26\x34\x5a\x51\xba\x41\x59\x8e\x59\xae\x39\x2b\xcf\xcc\x9d\x92\xd7\x7d\xde\x6a\x39\xf6\x04\x78\xe4\x2c\x89\x9e\xee\x1e\x72\xc7\xa8\x38\x7e\x62\xaf\xe6\x52\x56\x14\x2c\x09\xf8\x43\xa8\x83\x4a\xc8\xbd\x51\xd9\x2d\xc4\x6c\x84\x30\x0d\xa8\x3f\x04\xd9\xd6\x37\xd4\x2b\x14\xad\x31\xb5\x62\x86\x99\x46\xcc\x4b\xf7\xb0\x0a\x0a\x32\x54\x57\x78\xb9\xbc\xae\x4b\xfa\x78\xe0\xdc\xcd\xc2\x56\x59\x8e\xfd\xc4\x47\x41\x2a\x79\x8c\x5e\xb4\x29\xec\x8b\xc6\x06\xc6\x4c\x47\x04\x4f\xf1\x22\x1c\x5d\x4e\x89\x27\xef\x8c\x21\x63\xba\x41\xc1\x10\xfa\x3c\xe8\x1f\x5d\x47\x87\x3d\xf3\x9e\xbf\x07\xd5\xa0\x54\x09\x81\xa8\xdf\x1d\x28\x51\x49\xd5\x37\x9f\xfb\xce\x2f\xb1\x9b\x30\x1f\x69\x0b\xcd\x26\x80\x1c\x80\xc5\x62\x20\xf4\x58\xdf\x99\x1f\xa1\x45\x84\x32\x0d\x86\x00\x0e\x05\x67\xcb\x48\x6b\x78\x22\x99\xc4\xbe\xb3\x74\x2a\x93\x9c\xca\x24\xa7\x32\xc9\xa9\x4c\x72\x2a\x93\x9c\xca\x24\xa7\x32\xc9\x87\x5a\x26\xd9\x2e\x88\x20\xbd\xbc\x84\x72\xef\x04\x92\x42\xf8\xfb\x53\x91\xe4\x54\x24\xa9\x13\x49\x32\x8e\xea\xe3\xc0\x91\x17\x9a\x05\x79\xa1\xd5\x32\xdb\xe3\x18\xf1\x6d\x07\xae\xb1\x02\xe7\xd7\x87\x18\x89\xad\x66\xe9\x44\x35\x1f\x09\x45\x9f\xab\x42\x9e\x1d\x37\xf9\x28\x88\x7d\x04\xc0\x16\xd8\x72\x8e\xc6\x21\x97\xdb\x39\x31\xdb\x79\xb6\x83\x38\xb5\xa9\xa7\xd7\x67\x9c\x32\x9f\x88\x02\xba\x3c\x96\xf8\xcb\xff\x55\x7b\x0c\xf4\xb0\x3a\xb2\x5e\x28\xc1\x0a\xb2\xf9\xbc\x70\xa8\xe5\x48\x6e\xf4\xae\x4a\x6e\xe1\xa9\xe4\xb6\x54\x72\x8b\x8b\x92\x5b\x7c\x2f\x25\xb7\xa4\x42\x72\x4b\x6e\x4f\x72\x4b\x0b\x92\x5b\xfa\xde\x49\x6e\xb1\xc3\xcf\xe3\xf7\x42\x72\x1b\x7e\x10\x25\xb7\xd1\x87\x45\x72\xa3\x46\x72\x8b\x6a\x24\xb7\x04\x8e\x82\xd0\x8f\x1c\xc9\x2d\x2a\x4a\x6e\xd1\x5d\x97\xdc\x86\x7e\xea\xa3\x60\xe4\x4a\x6e\xa3\x4a\xc9\x6d\x44\x3c\x75\xfa\xda\x05\x50\x16\x02\xd0\xcb\xce\x72\xcb\xdf\x48\x38\x45\x51\x96\xec\x08\x7b\xd1\xed\x0a\x7b\x23\x12\x30\x75\xaa\x9a\x35\x1c\xb8\x82\x9f\xf8\x24\xdb\x0d\xf8\x62\x01\x55\x0b\x42\x44\x7b\xd4\x48\x68\x85\x56\xc0\x91\xae\x57\x9f\xdd\x65\xd5\xea\x04\x59\x59\xab\xe5\x77\xa1\xce\xa8\x8e\xd5\x9c\x8c\x4e\xa3\x00\x62\x3f\xf6\xa3\x8c\x54\x00\xcc\xb7\xae\x39\xaa\xe0\xe6\x12\xac\x91\x4b\x13\x25\x97\x26\x00\x46\x79\xb9\x74\x74\xac\x5c\x2a\xaa\x48\xbc\x8a\x4d\xa1\x54\x4c\x3e\x4f\xdf\x56\xa1\x27\x37\xcc\x93\x07\x56\x7e\x85\x9e\xce\x91\x97\x64\xc5\xa4\xdc\x8b\x98\x8f\xda\x3b\xa0\x18\xa5\x6a\xb3\x32\x4a\xd5\xe6\x60\xdb\xfd\xd1\xf3\x4c\x0c\x5e\xb9\x7f\x99\xfa\x85\xc8\x93\x39\xfa\x89\x09\x34\x5f\x04\xcf\xec\xb3\x41\xa5\x37\x62\x42\xe3\x3d\xc4\x36\x46\x28\xe4\x29\x5b\x71\x24\x75\x99\x8a\x31\x2c\xe4\x30\x40\xb2\x21\xa5\x5a\x3c\xbc\xdb\x83\x5b\x5b\xc0\x46\x29\x3e\xca\x33\xfa\xea\xa0\x9a\x76\xa4\x16\x0b\xb0\xa4\xc3\x06\xf8\x30\xf6\xd9\x76\x67\x63\x48\x09\x0f\x31\x41\xac\x1d\xa1\xdd\x74\xdc\x0e\xa3\x70\xc6\x4f\x3a\x28\x9a\x78\x96\x0f\x4d\x5e\xa5\xca\x14\x00\xde\x91\x0f\xce\xfa\x4a\xc0\x19\x5f\x38\x98\xf9\xde\x67\x36\xb6\xbd\x75\xb6\xee\x6d\xf8\x9d\x75\xb0\xe1\xad\xa3\x75\xef\x23\x3a\xa4\xa3\xde\x3a\xad\xf3\x23\xe9\x6f\x0e\xee\xd2\x56\x6e\x5c\x52\x1e\x31\x63\xf2\xa8\x18\x92\xf3\x6a\x44\x3a\xe8\x80\x23\x12\xf9\x47\x3b\x8a\xe9\x5c\x46\x63\x9c\x70\x76\xd8\x93\x31\x8d\x85\xe0\x55\xe2\xcb\x3b\x52\x00\xab\x16\x25\xb5\x77\x4d\xbe\x2e\x73\x36\x51\x48\x96\xdb\x22\xef\x5c\xcc\x25\x82\x05\x1c\x86\xe4\x91\x90\x87\x31\x1d\x5f\x20\x9c\x61\x94\x3c\x7c\x28\xa4\x88\x0a\x71\xcc\x9b\xd2\x08\x09\x05\x3c\x40\xf3\xf9\xb1\xb8\x89\x9a\x8f\xa9\x36\xdb\xc5\xab\x10\xee\x64\x21\x81\x13\x1f\x40\xe2\x84\xe1\xc3\x81\xdd\x70\x92\x59\x38\x44\x3a\xeb\x53\x0c\x8d\xf0\x01\xa4\x41\x17\x86\x81\x55\x80\xe9\xd9\x30\x8b\xa3\x9a\x04\x5c\x87\x4b\x6d\x6f\x36\x83\x20\xb1\xa1\xdf\x10\x30\x51\x45\x05\x65\x25\xb0\xd0\xc0\x8c\x46\x17\x9d\x36\xe6\x73\x0c\xd6\xd2\xf9\xdc\x4f\x83\xa4\x93\xcc\x62\xcc\x7d\xb4\xee\x25\x1b\x1e\xe8\xcc\xe8\xcc\x07\x00\x92\x4e\x18\x45\xda\x21\x3a\x05\xd6\x69\x98\xe4\x43\x13\x93\x13\x2d\xb3\xe3\xb9\xab\x0e\x65\x2c\xf2\xb7\x47\xa1\x10\xce\x0e\x4f\xb4\xa0\xde\xaf\x56\x84\x3b\x58\x9a\xa8\x40\xf2\x7a\xad\xc2\x2c\x32\xb2\xda\xe4\x3f\x97\x74\x90\xa2\xd4\x56\xcb\x2f\xa5\x39\xb9\x76\x50\x78\x7d\x27\x41\x88\x18\xd7\x6d\x67\xc5\x3a\xae\x4d\xfc\x7e\xf9\x36\x69\x26\x60\x10\xe5\xf3\x79\x09\xfb\x85\x5c\x65\x90\x40\x6c\x24\x5e\x1e\x20\xe8\x13\x23\x80\x3a\x2b\xad\x42\x3c\xd4\x45\xf4\x1c\x5c\x47\x87\x89\x9f\x6b\x12\x58\x31\x73\x12\x96\xcb\x3b\xda\x9c\xd0\xc4\x72\x25\x6d\xc1\x31\xe2\x4b\x0a\xea\xfe\x08\x35\x4f\x0a\x8b\xcc\x77\x55\x11\x02\x20\x96\x69\x10\x0b\x09\x5b\x0a\x8b\x85\x29\x57\x17\x11\xb0\xe6\x20\xba\x23\x86\x15\xeb\xc5\x73\x49\x28\x46\x25\xef\x39\xa6\x38\xcd\x08\x13\xbd\xfe\xc5\x20\x69\x33\x41\xb6\xf9\xa8\x3e\x1d\x70\x16\x0e\xf9\xa3\x8a\xee\x2e\xc8\x25\xea\x33\xa8\xf2\x5a\x6a\x23\xce\x8c\xeb\xd9\x6e\x5c\x38\x98\xc9\x60\x99\x0d\x4e\x1b\xa2\xa5\x5e\xe3\x4c\x76\xd9\xa4\x33\x4a\xe3\x58\x7a\xec\x79\x67\x1a\xfb\x98\x4f\x30\x69\x9c\xf1\x80\xf9\xce\x44\xf2\x6e\xca\x1b\x63\xca\x1b\x67\xac\x1d\xe7\x4c\xa7\xf1\x28\x8e\x1a\x87\x34\x6d\x8c\x28\x1b\x23\xe9\x45\x7f\x46\xf1\x8d\x86\x5e\x1a\x75\xd5\x6d\x8b\x4d\xd2\xd0\x89\xe8\x5a\x32\xa1\x69\x1c\x7d\x8a\x85\xb3\xc7\xc9\x23\x82\x18\x1f\x53\xac\xc5\x27\x50\xde\xc5\x20\x41\x5e\xb4\x24\x82\xff\x2d\x16\x70\x16\xb2\x44\x85\x74\x77\x87\x55\x2c\x03\x69\x93\xe8\xc8\xef\x91\xf4\x2a\x35\x24\xa2\x9e\xaf\x50\xb1\x74\x85\x56\x23\x59\xab\xf7\x09\x15\x72\xf6\xa1\x20\x08\xb0\xf1\xb1\x17\xf5\x88\x6a\x70\xbf\x3b\xb0\x69\x3c\xf0\x3e\x61\x87\x0e\xf7\x37\x07\x6a\x8d\xd2\x00\xf7\x1f\x1c\x98\xda\x7a\x1e\x58\x63\x01\xed\x77\x07\x90\x04\x54\xec\xfc\xd2\x60\x53\x2e\x0b\x99\xaa\x5d\xe9\x56\x5d\xd8\xde\x14\xdb\x90\xa8\x6a\xcd\x33\x01\xe9\x7b\x59\x3c\x7a\xb1\x33\xaa\xeb\x17\x9e\x13\xa4\xde\xcb\x34\x48\xc8\x02\x5b\xce\x33\xc1\x58\x47\xfe\x83\xb9\x6e\xe9\x68\xdf\xb2\xdd\x0c\x5f\x9d\x2d\x34\xd9\x44\xcf\xc3\xfe\xa6\xe9\xf9\xb6\xcf\x82\x50\x75\xa8\xd8\x09\xd0\xf3\xb9\xcc\x0a\x6d\x16\x35\x30\x32\x96\xb5\xda\x13\x45\x82\xdb\x1a\x97\xed\x43\x16\x24\xaa\x80\x50\x31\x16\x19\xea\xaa\x9f\x02\x05\xde\x89\xc3\x44\xc5\x48\xbe\x34\xf2\x73\xdd\x86\x5d\xb0\x74\x2c\x78\xc0\x8d\xd2\xba\x09\xac\xcd\xcc\x77\x66\xbd\xe7\x01\x90\x21\xbc\xa6\x76\x67\x02\x63\xc7\x41\x59\x79\xe3\xda\x6d\xda\x5a\xa4\x8e\x32\xd2\x12\xe2\xae\x59\x42\x3d\x04\x67\x72\xff\xee\x71\x2d\xc1\xa8\x9f\xfe\x91\xe0\x24\x3d\xb6\x00\x50\x01\xb6\xc4\xa7\x30\x9f\xd0\x54\x86\x7e\xed\xa5\x50\x34\xd4\x23\x90\x51\xca\x7b\x31\xd4\x8c\xe3\xa2\xbc\x2c\xa2\x5e\x2e\xd0\x49\xde\xba\x42\xd1\x98\x2e\xe5\xfe\x3d\x3a\xf4\x99\x60\x95\xb3\x38\x65\x61\x8c\x9f\x45\x91\xa8\x35\x51\xa2\x5f\x95\x38\x38\x0d\xaf\xa3\xab\xda\xfc\xd9\xab\x34\xf8\x2e\x91\x82\xd6\xbd\x4f\x78\xeb\x7c\xdd\xeb\x79\x0b\x58\xb7\x7e\xcb\x4c\xbe\xb9\xb9\x58\x26\x85\xfa\x7a\xb3\x51\x0d\x3d\x1c\x26\x28\xba\xac\x45\x0f\xb1\xc9\x9f\x54\x1a\x25\x66\xef\x22\x94\x4d\xe5\x90\x48\x27\xe4\x82\xe5\xc9\xf1\x23\x2f\x0c\x5d\x50\x95\x68\x0d\x85\xc7\x16\xd7\x42\x8a\xc1\xb0\xfa\xab\xa0\x5f\xf1\xd7\x33\xb8\x46\x68\xc6\xd0\x30\xe4\x28\x7a\x2a\x2f\x13\x06\x62\xf0\x6c\x4f\xaa\xf6\xb1\xaa\xce\xca\x8b\x81\x7e\xcd\x97\xa0\x90\x2e\xa4\xd4\x85\xa1\xbb\xb2\xa7\x37\xd4\xbb\x95\xe5\xbb\x3e\x52\xd7\x0b\x4a\x94\x5a\x7f\xe9\x45\x54\xd0\x27\x03\x79\x9f\x49\xc3\x3e\x13\xfc\x5c\x5d\x7a\xb2\xe9\x1d\x77\xdb\x94\x39\xf8\x02\xee\x54\x77\xdf\xb8\xa1\xe7\xf9\x19\xb7\x16\x0e\xbb\xd5\xf6\xbb\xf6\x3a\x4e\xf6\xa4\x89\xe0\x36\xf3\xb9\xa7\xac\x3b\xe6\x97\xb9\xbe\x62\x7e\x57\xf1\x26\xc1\xd4\x70\x15\x6b\x02\xdb\x4c\x2c\x8c\x75\x99\xc3\x5e\xe5\xdc\xd9\x18\x43\xaf\xed\x81\x9e\xfa\x98\x5b\xc1\x51\x98\x4c\x10\x13\x33\x90\x2f\x73\xad\x23\x0a\x6d\x78\xc0\x06\xd0\x46\xce\x02\xaf\xa5\x81\x02\xa9\x39\x34\x50\xfe\x12\x08\xc5\xc2\x03\x0b\x38\xa3\x91\x5c\x71\x4f\x50\x7a\x3d\x9d\x09\xc6\xa4\xe8\xae\xd2\x5e\xc8\x3b\x15\x1c\xcc\x8c\xad\x3b\x58\xbc\x23\x26\x5e\x88\xbc\x92\x4e\x74\xbf\x3e\x93\x0d\xd7\xb5\x8d\x0d\xe8\x79\x00\x40\xb4\xee\x6d\x28\x7d\xda\x5b\x57\xa5\x32\x9c\x32\xd9\xa8\x62\xe2\x8f\x53\xa5\x96\x70\xb1\x9c\x18\x52\x37\x00\x3e\x87\xc8\x19\x1f\xfb\xda\x54\xf2\x38\xb9\x92\xee\x46\xb8\xea\x4e\xc4\x9d\xe0\x24\x68\x77\x3d\xf0\x9c\x97\x68\x3c\x98\xa7\x57\x24\x87\x67\x3e\x77\xc7\x51\x5f\x8a\x44\x55\x13\x63\x2f\x4a\xae\xd2\x4f\xbd\xf0\x2e\x90\x31\x26\xd5\xeb\xac\xa2\x85\x75\x6f\x03\xc9\x02\xca\x40\x58\xa5\x6e\x4f\xc2\xc4\xe7\x79\x4c\xaa\x65\x5a\x9e\x21\x71\x99\xa6\x1c\x5d\x0c\x67\xab\xa2\x21\x38\xd4\xba\xb7\xc1\x44\xb1\x64\x39\x2a\x0c\xac\x22\x5e\x83\xec\xf6\xa4\x45\xea\xaa\x11\xcd\x6a\xa6\x3d\xc7\xb9\x50\x56\x83\xc3\xe1\xd4\xe2\xbf\x7a\xe1\xe2\x53\x4f\x9c\xbf\x7a\xe1\x4a\xbf\xb2\x33\x03\xc9\xf3\xa6\x21\x26\x35\xe4\x8f\x47\xbe\x27\x3e\x2b\x92\xa8\x9a\x77\x7b\xce\x35\xd3\x9b\xf6\x86\xb7\x8e\xf4\xda\x32\xb1\xec\xab\xeb\xae\x2a\x99\xe7\x20\xbe\xaa\x08\xe8\x4a\x2b\x9a\x5f\x40\x82\x12\x2e\x56\x4c\x4c\x87\xa1\xa8\xd9\xae\x9d\x25\x3d\xaa\xa0\xf4\xca\x7e\x9c\x14\x9b\x75\x4f\x1b\x38\x16\x46\x48\x3b\x76\xd9\xd6\xb2\x0a\x9b\xa5\xaf\x9a\x5d\xf7\x54\x26\x2f\xdb\xd8\x96\xe4\x51\xf3\x6a\x47\x40\xad\xc3\xa7\x42\xce\x11\x23\xe6\x8e\xa5\x7d\x94\xa9\x7c\x49\xb3\x9f\x5b\xc5\xd9\x48\xc2\x5c\x7a\x99\x4d\x69\xd9\x2a\x47\x4f\x2a\xad\x44\x0a\xda\x3c\x75\xfc\xec\x0d\x16\x00\x74\x18\x0a\xa3\x4b\x24\x3e\xf4\x01\xcc\x2b\xb2\xbd\xb2\xdf\x84\x39\x0b\x97\x0d\x08\x11\xdb\xab\x1b\x08\x4f\x1e\xae\x41\x1a\x10\x63\x24\xc2\x67\x69\xf6\xc8\x52\x18\x90\x3e\x1e\x64\x07\x3d\x5a\x11\x0e\x5b\x2d\x3f\x54\xb5\x0f\x27\x94\x26\xc8\x51\xab\x43\x88\x80\xf4\x48\xaa\x65\x0a\xa1\xbc\xfa\x1f\x84\x00\x1a\x01\x7e\x27\xa6\x63\x85\x97\xd0\xb5\x61\x08\xa0\x7d\xc4\x88\x2d\x16\xb0\xd8\x46\x05\x4d\xe5\x36\x7a\xa1\x40\xb3\x64\x48\x99\x51\xf2\x51\x53\xf2\x84\x5a\x8c\xb2\x0b\x91\xd5\xec\xb4\xd2\xbe\x73\x7e\xba\x8b\xc7\x29\x4d\x93\x86\x2a\xd4\x90\xb4\x98\x53\xfb\x85\x5a\x1f\x92\xc8\xd5\xcd\x39\xf4\xce\x68\xfb\xf5\x12\x74\x32\x55\x7a\x45\x46\xaf\x83\x34\x20\x47\xaa\xd9\x68\xfb\xfd\xcf\x6c\x0c\x1e\x00\x1f\xd9\x80\xde\xc6\xce\x47\x36\xbd\xbc\x41\xa0\x9a\x5f\x6f\x33\x73\xb3\x17\xc6\x72\x46\x8c\x53\x0c\xa6\xa4\x6e\x2d\xbb\xa2\x6a\xae\x89\x82\xc5\x85\xc3\x66\x17\x2c\x60\x36\xdb\x25\x47\x20\x3c\xd2\x6f\xa4\x5c\x78\xf2\x99\xce\x13\x97\xfe\x70\xe7\xe2\xa5\x47\x9f\x7e\xe2\xc2\xce\xe5\x0b\x57\x2e\x3d\xf1\xcc\x85\xcb\xf3\x39\xef\x08\xc5\x4d\x7e\x33\x89\x7a\x8b\x81\x38\x40\xdb\x5e\xff\xd6\xb7\x6f\x0c\xbc\x9e\xd7\x6f\x0c\xbc\x35\xe2\x88\x50\x46\x50\xfd\x78\x77\xdb\xeb\x78\xbd\xec\x7c\xf9\xe3\xdd\x76\x29\x17\xe8\x7c\x8e\x62\xe2\x7b\x1d\x0f\x40\x36\x9f\xfb\x5a\x26\x2f\x8d\x88\x98\x02\x38\xa4\x24\xa1\x31\x6a\xb5\x34\xd0\xc1\x64\x44\xf3\xbf\x7c\x0c\xb3\x36\x20\x91\xfe\x22\xf0\x3a\xa1\xfb\xe4\x31\xca\xee\xcc\xa4\xce\x2a\x35\x2d\x12\x74\x21\xce\xcc\xe7\xe4\x2c\xde\x22\xd9\xcb\x69\xbc\x4f\x06\x50\x2f\x60\xce\x42\x92\x88\x9d\xf6\x2a\xb5\xa7\x1d\x8f\xa5\x71\x4c\xe4\x7c\x42\x0a\xd6\xc4\x6a\x67\xfd\x70\x10\x88\xd9\xb3\xcb\x12\x2e\x2b\x58\x2d\xce\x96\x74\x75\xb4\x90\xaa\x8d\xd8\x4e\x20\x0e\xe4\xa6\x02\x69\xc0\xad\xc0\x4f\x80\x3c\x03\x30\x3f\xb1\x5c\x36\xf2\xf5\x99\x56\x2b\x54\x96\x0b\xd9\xbf\xb6\xb1\xbc\xb4\x5a\x56\x21\x31\x0c\x6d\xdd\x5a\x65\xcc\x9a\x52\x6a\x83\xb6\x5b\xd0\x75\x93\x11\x86\x40\x5f\xe6\x67\x95\x5b\x9f\xdc\xf5\x0c\x79\x2b\xbb\x89\x41\x2c\x01\x4e\xc3\xe6\xd0\x77\x3b\xdf\x90\x49\x06\x76\x7d\x55\x4a\x43\x15\x6b\xcc\x5a\x4e\xd5\xa3\x99\xf2\xbf\x66\x37\x5b\x69\xa2\x6d\xbd\xb9\xa8\x8d\xd1\x1a\xf1\x20\x5f\x2c\xc0\x1a\xee\x30\x44\x67\x48\x59\x0d\xfc\xa3\x0a\xbd\x5f\x9a\xdb\x8d\x91\xcd\x39\xd9\xa0\x4b\x4e\x36\xaa\x4e\x29\xde\x8b\xf7\x15\x8f\x14\xdd\x3b\x2f\x27\xda\xa3\xae\xb2\x62\x8c\xb4\xc1\x78\xdb\x00\x3e\x07\x3d\xb4\x58\x54\x1d\xa1\x0b\xf1\xb6\xec\x27\x8b\x93\x76\x38\xe4\x78\x0f\x55\x1e\xe1\xe4\xcb\xa8\x21\x9a\x84\x24\x8a\x51\xfb\xf3\x29\x62\x87\x6d\xf9\x36\xe7\x31\x05\x04\x51\x5c\xd7\xad\xa8\x1c\xc5\xe3\x1f\xc1\x2a\x73\x23\xaa\x19\x20\xa4\x6b\x79\x3f\x41\xed\x33\x10\xfe\xb6\xfa\xe4\x26\x4e\xb3\x05\x11\xb7\x2e\x50\x52\x2a\x2a\x28\xc4\x4a\x2a\xfa\x4f\x36\x8b\x48\x2f\x8d\x93\x54\x15\x7b\xa7\x26\x1a\xd3\x8a\x41\x85\xd2\x2c\xa8\x10\xbb\xfd\xa0\x42\xac\x1c\x54\x88\x1d\x17\x54\x88\x65\x41\x85\xd8\x8a\x41\x85\xd8\xc9\x83\x0a\x31\x90\xef\x69\x61\xb4\x56\x0f\x29\x94\xcc\x84\x58\xfc\xde\x45\x13\x4a\xef\x5b\x34\x21\x7d\x97\x05\x12\x70\xc4\x5a\xad\x25\x8e\x90\x8e\x8f\x08\x73\x8e\x74\xf3\xae\x7c\x2c\x77\xb6\x9b\xb9\xfc\x31\x7b\xa6\xab\x0f\xf2\x58\xc7\x38\x92\x3e\x8b\xd8\x76\xee\x97\x22\x3f\x62\xf7\xb3\xa2\xfb\xe6\x3d\x73\x95\x1f\xbd\x9f\x0f\xb9\x1d\x8f\x47\xd7\x07\x3c\xba\xab\x3e\xe0\x93\x53\x1f\xf0\xa5\x3e\xe0\x7b\x45\x1f\xf0\xbd\x7b\xe9\x03\x3e\xab\xf0\x01\x9f\xb9\xf3\xd9\xe4\x39\x1f\xf0\x50\x86\x58\xa9\x72\x07\xde\x16\x1c\xb6\xc7\xb3\x6a\xa6\xef\x9d\x0f\xf8\x9e\x23\x3f\xec\xdd\x47\x1f\xf0\xbb\xe3\xc0\x75\x08\xc7\x70\x17\xee\xc0\x7d\x78\x01\x5e\x0a\x7c\xe3\x77\x84\x89\xee\x06\xdb\xc3\x43\x04\x0f\x03\x1f\x7f\x58\x9c\xb6\x23\xe3\xb4\x9d\x56\x3a\x6d\xcb\x37\x48\x83\x89\x9f\x02\x37\x70\xa6\x71\xda\x1e\x2a\x12\x4f\x97\x3a\x6d\xb3\xbc\xd3\x36\x09\xba\x5b\xe4\x2c\x97\x7a\x27\xeb\x13\xd7\x69\x9b\x38\xd7\xed\xa6\x3e\x0a\x42\xd7\x69\x3b\x2c\x38\x6d\x33\xe9\xb4\xad\x24\x65\x0f\x52\x28\xd6\x44\xce\x0b\x3b\x75\x9c\x60\x6a\xbd\xb0\xf5\x9e\xb0\xe5\x77\x21\xcb\x9c\x1c\x94\x29\x59\x56\x0d\xb4\x7b\x49\xd1\xc1\x56\x63\xea\x6b\x6b\x9a\xce\x2c\x04\x4b\x29\xa0\x6b\xa4\x09\x4c\x7c\x6c\x02\x06\x8c\x72\x7e\xd0\xca\xb5\x45\x6c\x5a\x18\xc0\x74\xe1\x03\xe0\x7c\x1c\x07\xb6\x67\xbb\x81\xd0\xca\x77\x82\xa3\xe2\xa5\x85\xbc\xd7\xa7\x3b\xd3\xce\x6e\x2c\x4f\x9b\x17\xf0\x42\x70\xb4\x80\xae\x93\xcf\x0e\xa8\x0e\x07\x75\xa1\x8f\x06\xc1\x4e\x5f\xda\x16\xe1\x05\x77\x8f\x6c\x36\xdd\x9f\xf0\x42\x61\x87\x6c\xe6\x13\xa0\x9f\x6d\x98\x17\xe6\xf3\x0b\xae\x84\x20\x44\xa0\x0b\xf9\x0d\xf4\x42\xb0\xab\xc5\x55\xd0\x61\x68\x0f\xb1\x44\x41\x51\x3a\x44\xbe\x5f\x7d\x3e\xee\x8b\xc5\x2c\x04\x44\xb4\x00\xf0\x02\x80\xfb\x8e\x33\x75\xae\x3d\xd9\x9c\xc4\x26\x9f\xbe\x7d\xa1\x2c\xb7\xec\xdb\xc8\x78\xb9\x8f\x81\xf1\xf2\xb7\x1c\xb7\xd8\x42\x35\x7f\x12\x28\x5e\x10\xdd\x53\xe6\x17\x1a\x5c\x80\xd8\xf5\x11\xbc\xb4\xb2\x82\xc9\x28\xe5\xed\x94\xc5\xab\x2a\xd3\xd6\xd7\x66\xcd\xbd\xa5\xe7\xde\xd0\xfb\xed\x54\xfd\xe8\x07\x49\x20\x0e\xef\xa9\x40\x9c\x7c\x20\x04\xe2\x34\x27\x10\xd7\x04\x04\xb8\x4d\x81\x38\x3e\x15\x88\x97\x0a\xc4\x51\x51\x20\x8e\xee\xa5\x40\x3c\xac\x10\x88\x87\x4b\x04\x62\x5c\x2f\x10\x8f\x0a\x02\xf1\xe8\xbd\x13\x88\x23\x87\xab\xd6\xa8\x73\xef\x63\x81\x78\x02\x67\x70\x0a\xf7\xa0\x14\x8c\x03\x7b\x3a\x5e\x10\x88\x27\x81\xcf\x3e\x2c\x02\x71\x7a\x5c\xfc\x09\x06\x71\x10\xd7\xc4\x9f\x08\x57\x89\x3f\x51\x10\x88\x93\xa0\xbb\x95\x9c\xe5\x5b\x89\x14\x88\x13\x57\x20\x4e\xac\x40\x4c\xfd\x91\x8f\x02\xec\x0a\xc4\x78\xa9\x40\x4c\xe0\xa8\x28\x10\xaf\x12\x83\x22\xef\xcb\xa4\x2a\x93\x47\x6b\x4f\x5f\x7e\x42\x49\xb1\x49\xf1\x36\x1f\x93\x69\x90\xa9\x28\x13\xae\x14\x3b\xcb\xa4\xd8\x69\xd0\xe7\x03\xb8\x77\x67\x52\xec\xb8\x28\xc5\xee\xd5\x48\xb1\x63\x21\xc5\xee\x69\x29\x76\x9c\x97\x62\xdd\x9f\x70\x5c\x94\x62\xc7\xb5\x52\xec\x78\x3e\x1f\x17\xa5\xd8\x71\x7e\xd7\x1b\x07\xd3\x93\x4b\xb1\x62\x05\x1a\x29\x76\x0c\xe0\xa1\x23\xc5\x8e\x0b\x32\xe6\x58\x4b\xb1\xb9\xf4\xed\x71\x59\xd8\x38\xb4\x52\xec\x78\xb9\x14\x5b\x6c\xa1\x9a\xa9\x08\x14\xc7\xa2\x7b\xe6\x10\x71\x0c\x99\x2b\xc5\xee\x9e\x40\x8a\x4d\x39\xb2\xa7\x1d\x2b\x9e\x94\xe4\x0a\x2d\xbf\xf1\xa2\x37\x36\x88\xd7\x5c\x81\xd0\x09\xb9\xf0\x5b\x2a\xf5\x86\x1f\x24\xa9\x37\xb9\xa7\x52\x6f\xfa\x81\x90\x7a\xe3\x9c\xd4\x5b\x13\x4c\xe1\x36\xa5\xde\xe1\xa9\xd4\xbb\x54\xea\x9d\x14\xa5\xde\xc9\xbd\x94\x7a\x47\x15\x52\xef\x68\x89\xd4\x4b\xeb\xa5\xde\xa8\x20\xf5\x46\xef\x9d\xd4\xeb\x8c\xb7\x3f\x79\x7f\x4b\xbd\x09\xe2\xd2\x95\xf5\x29\xb9\x81\x48\x6f\x87\x9c\xbf\xc0\x2c\x40\x8b\x6a\xe1\x78\x96\xf9\x4c\xc8\xdf\x56\x50\x86\x3b\x70\x5f\x88\xc4\x95\xc2\xf2\x34\xf0\xc9\x87\x45\x58\x8e\x8d\xb0\x4c\x6b\x85\x65\x12\x0c\x7d\x0a\xdc\xfd\xd8\x08\xcb\x3a\x48\x0e\x3d\x89\xb0\x9c\x06\xdd\xad\xf4\x2c\xdf\x4a\xa5\xb0\x9c\xba\xc2\x72\x3a\xc8\xe2\x26\x46\xbe\xe0\xe6\x8e\xb0\x4c\x96\x0a\xcb\x18\x46\x45\x61\x99\xae\x12\xc3\xc3\x52\xb0\xc0\x71\xe6\x9a\x8d\xa1\xb9\xcf\x98\x56\x88\xcb\xa9\x12\x97\x69\x41\x5c\xde\xcb\xc4\xe5\xc3\xa0\xcf\x06\x42\xde\xbd\x13\x71\x79\xa7\x28\x2e\x8f\x6b\xc4\xe5\x1d\x21\x2e\x8f\xb5\xb8\xbc\x93\x17\x97\xdd\x9f\x70\xa7\x28\x2e\xef\xd4\x8a\xcb\x3b\xf3\xf9\x4e\x51\x5c\xde\xc9\x6f\x97\x3b\xc1\xe1\xc9\xc5\x65\xb1\x06\x8d\xb8\xbc\x03\xe0\xae\x23\x2e\xef\x14\x84\xd9\x1d\x2d\x2e\xe7\xd2\xb7\x77\xca\x52\xca\xae\x15\x97\x77\x96\x8b\xcb\xc5\x16\xaa\xb9\x91\x40\x71\x47\x74\x4f\x89\xcb\x38\xd8\x81\xc4\x15\x97\xf7\x57\x16\x97\xa5\x2f\x9d\x8c\xc3\xd2\xe6\xf4\x8e\x3c\x8b\x4e\xc5\xe6\x1a\xb1\xf9\xa4\x7e\x42\xc9\x07\xc0\x4f\x28\xf9\xd0\xf8\x09\x25\x1f\x6c\x3f\xa1\xe4\xbe\xf9\x09\xa5\x1f\x24\x05\x31\xbe\xa7\x0a\xe2\xf0\x03\xa1\x20\xe6\x54\x04\x7f\x74\x57\x15\xc4\xe8\x54\x41\x5c\xaa\x20\x4e\x8b\x0a\xe2\xf4\x5e\x2a\x88\x93\x0a\x05\x71\x72\x7b\x0a\xe2\xac\xa0\x20\xce\xde\x3b\x05\x71\xea\xc8\x0f\xd3\xf7\xb7\x82\x58\xa1\xf9\x39\x7a\x1e\xbc\x50\xab\xe9\xed\x7d\x88\x34\xbd\x91\xd1\xf4\x92\x4a\x4d\x4f\x48\x8f\x34\x88\xfc\xc4\xd1\xf4\x12\xab\xe9\xe9\x5b\x62\xc9\x5d\xf7\x13\x4a\xfd\x99\x8f\x02\xea\x6a\x7a\xf4\x18\x4d\x6f\x56\xd4\xf4\x12\xe8\xb3\x15\xfd\x84\xd4\x65\x95\x12\xe7\x30\xe1\x83\xd7\xac\x2a\x42\x2a\x65\x58\xd2\x99\x09\x3d\x87\x98\xab\x1d\xad\x56\x31\xc5\x37\xd7\x2d\xea\xdc\x8d\x70\xc0\xac\xaf\x51\xa6\x1d\x5c\xa5\xf6\x4c\x28\xf4\x29\x00\x0b\xa5\x7b\x0e\x73\xba\x27\x03\x90\xc8\x34\x48\x00\x4c\x0a\xba\xe7\x61\xa6\x7b\x8e\xa5\xee\xb9\x7b\x67\xba\xe7\x7e\x51\xf7\xdc\xad\xd1\x3d\xf7\x85\xee\xb9\xab\x75\xcf\xfd\xbc\xee\xe9\xfe\x84\xfb\x45\xdd\x73\xbf\x56\xf7\xdc\x9f\xcf\xf7\x8b\xba\xe7\x7e\x7e\x27\xde\x0f\xc6\x27\xd7\x3d\x05\x57\x30\xba\xe7\x3e\x80\x3b\x8e\xee\xb9\x5f\xd0\x0c\xf7\xb5\xee\x99\x4b\xdf\xde\x2f\x0b\x40\x3b\x56\xf7\xdc\x5f\xae\x7b\x16\x5b\xa8\x66\x74\x02\xc5\x7d\xd1\x3d\xa3\x7b\xee\xe7\x75\xcf\x0b\x2b\xeb\x9e\x29\x8b\xdb\x23\x5a\x1d\xe7\xef\x54\xeb\x3c\xd5\x3a\x4f\xb5\xce\x53\xad\xf3\x54\xeb\x3c\xd5\x3a\x4f\xb5\xce\x53\xad\xf3\x54\xeb\x3c\xd5\x3a\x4f\xb5\xce\x7b\xa6\x75\xc2\x62\x10\xce\x4c\x1f\x64\xf9\xeb\x27\x29\x8b\x1f\xa3\x26\x68\x33\x83\xa1\x4f\xcc\xe5\x93\x53\x5d\xf0\x54\x17\x3c\xb1\x2e\xb8\x24\x52\xc1\x7d\x0d\xe9\xa0\xa3\x8e\xf5\x8d\x60\xda\xde\x1c\xac\x49\x0e\x83\x93\xff\x2e\xb0\x52\xae\x1d\xad\x96\xef\x23\xfb\x5c\x06\x00\x6e\xf6\xe0\xe8\xf3\x59\xc6\x1e\x57\x33\x92\x2c\x9c\x3d\x64\xc5\xc1\xb8\x2d\x0f\xc6\xfb\x11\xeb\xc1\x32\x40\x72\x72\xf5\x12\x7f\x00\xd4\x4b\xfc\xa1\x51\x2f\xf1\x07\x5b\xbd\xc4\xf7\x4d\xbd\xa4\xef\x67\x9d\xea\xee\x88\x84\x61\x5d\x04\x7a\xb1\xfe\xef\x6b\x0c\x7a\xc5\xa7\x02\xae\x7f\x62\x32\x4b\xb9\x62\xa7\xe6\xcd\xa2\x1d\xd7\x20\x6d\x42\xf1\xeb\xc2\x2a\xfc\xd8\xa7\x30\x9f\xe4\x3f\xcc\x18\x1d\xa2\x24\x41\x91\xae\x4a\xab\xe5\x52\x01\x82\x21\xb4\xb6\x76\x1c\x20\xe8\x87\x46\x60\x32\xb7\x6c\xbd\xe2\x63\x27\xfa\x2d\x29\x25\x1b\x95\xaf\xf4\xea\x4e\x00\xe8\xa3\x20\x97\x50\xbc\xb7\x8b\x20\xd1\x25\x14\xb7\x06\x59\x1c\x7c\x79\x07\x73\x59\xb3\xc5\xaa\x73\x32\xd9\x92\x8a\xdd\xd1\xab\x6e\x21\x77\xfa\x60\x85\x81\xf2\xd8\x8b\x55\x56\x9e\x10\x5b\x9b\x89\xbc\x95\xaf\x49\xc5\xc2\xab\x8a\x1a\x5c\x3a\xb5\x28\xa6\xf8\x00\x4a\x2e\xba\xb3\xe4\x64\x82\x41\xe2\x23\xa7\xd7\xa0\x82\x66\xec\x50\x38\xe4\x72\xf2\x91\x70\x0a\xdb\x81\x70\xe9\xaf\x50\x17\x37\xf3\xc6\xdd\x1e\x38\x05\x8c\x1e\x5d\xd3\x01\x27\xa7\xc5\x7f\xc7\xec\xf1\x35\x6f\xf1\x54\x91\xbe\x8d\x14\x5d\x5c\x12\x79\xd1\xbf\xb4\xfa\x00\xa8\x5e\x4a\x4a\xec\xa7\x3e\x76\x24\xfb\x50\xbe\xbd\x45\x7d\x0c\x13\xfb\x9c\x82\x61\x3a\xe1\x8a\x02\x50\x85\x68\x72\x7f\x85\x41\xd4\x19\xa6\x8c\x21\xc2\x9f\xbe\xfc\x04\xb4\x3f\xa4\x8b\xef\x93\xe1\xb4\x4a\x90\x4b\x78\xc8\xc6\x21\x47\x4e\x54\xdf\x0d\x81\x6e\x18\xb7\xc5\x17\xc4\xf3\x82\xdc\x27\xc6\x31\x9e\x4e\x11\xcb\xb2\xaf\x7a\x90\x01\xa9\xe4\x59\xae\xfd\xd3\xb9\xd9\xfa\x5b\x7a\x9c\x71\x1a\x82\xa8\x68\x3e\x7d\x7f\x0a\x24\xae\x21\xf6\x34\x04\xd1\x69\x08\xa2\x0a\x23\x6f\x7a\x1a\x82\x68\x95\x67\x68\x0f\x0d\xc7\x83\xd8\x84\x4e\x3d\x5a\x18\x44\x5d\x43\x17\xa9\x31\x74\xd1\x3e\x1a\x04\x44\x1b\xba\x68\xde\xd0\xe5\xfe\x84\xb4\x68\xe8\xa2\xb5\x86\x2e\x3a\x9f\xd3\xa2\xa1\x8b\xe6\x79\x04\x0d\xd8\x2a\x86\x2e\xc5\xca\xb5\xb6\xa5\x6d\x0d\xf3\x39\x5b\x00\x48\x65\xcc\x1a\x2b\x2f\xd2\x82\x19\x8a\x6a\x43\x57\x2e\x7d\x9b\x96\x59\x33\xb6\x86\x2e\xba\xdc\xd0\x55\x6c\xa1\x7e\x77\xa1\xa2\x7b\x3a\xca\xca\x5d\xd2\xbd\xc6\xda\xfe\xfe\xc9\xab\x17\x9f\x78\x38\x64\x49\xc7\xbc\xad\xe0\x1f\xe1\xa8\xe7\x3d\x35\xfb\xf8\x33\x8f\x3e\xfb\xdf\x22\x0f\xee\xc6\x74\x78\xbd\x77\xe6\x48\xef\x94\x89\xd7\xeb\x7b\xad\x90\x73\x26\xa4\x89\x96\x79\xa7\x71\x00\xbd\x84\x87\x1c\x29\x23\x41\xaf\xdf\xff\x3d\xe8\x45\x78\xcf\x83\xa3\x30\x4e\xd0\x00\xf6\x37\x1f\x82\x9b\x03\xd8\x7f\x48\x24\x47\x6d\x4c\x12\xc4\x84\x64\xd2\x7f\xf0\x21\xd8\x85\x7d\x8f\xc9\x40\xbf\x88\x79\x83\xc1\x40\x65\x2b\x3c\xce\x6f\x32\xa6\xa4\x90\xf5\xf7\x07\xb0\xdf\x85\xde\xb5\x6b\xa4\xd1\xf0\x44\x43\x1f\x83\x0f\x66\xd9\x87\x34\x15\x12\x8e\xcc\xa9\x72\x89\x3c\x7f\x30\x18\x40\x6f\x12\x26\x17\xf6\xc2\xd8\xeb\x49\x14\x17\x67\xe0\x14\xf1\xb0\x77\x94\x45\x1a\xee\xad\x2a\x61\x75\x26\xbb\x89\xb7\x58\x00\xb8\x5b\x77\xae\xe1\x7b\x6d\x55\xc2\xcb\xde\x03\xdc\x09\x25\x45\x42\x5c\xf8\x9d\xbf\xc0\xf5\xdb\x7c\x00\x12\x65\x17\xac\x10\xc8\x3d\xa0\x35\xa9\xb9\x55\x35\xbc\x8d\x5b\x55\x27\x88\xc9\xb5\x42\x08\x02\x35\x8d\x57\xd4\xb4\x7a\x30\x2c\x86\xe6\xe2\x01\x75\x0e\x3f\x2c\xad\xd6\x9c\x7e\xf0\xe0\x68\x9a\xc6\x1c\xcf\x62\xd4\x93\x8a\x4e\xc8\xc6\x49\xc7\x24\x41\x4a\x1e\x99\x84\x64\xec\x7e\x33\x49\x8b\x35\x1d\x94\xdf\x41\xa7\x63\x9a\xbb\x2a\xc9\xd2\xcf\x4a\x91\x70\x8a\xa0\x1c\x6c\xab\xe9\x93\x5a\xdc\xf4\xcb\x49\xf9\xaa\xb3\xfc\x95\x95\x67\x15\xab\x15\xb7\x4c\x39\xcc\x57\x2c\xf6\x23\x99\xf0\x88\x28\x58\xae\x56\x05\x17\xe3\xa5\xf3\x9d\x91\x50\x5a\xe5\x3d\x33\x27\xf6\x73\x18\x1c\xfa\x3e\x0d\x12\xf7\xc4\xa7\x38\x65\x7d\x36\x80\x77\x72\xe4\x03\xe0\xa1\x4f\xdd\xfa\xb3\x81\xec\x93\x01\xcc\xb6\xd9\x4b\xfb\xc4\xb0\x67\x13\x3e\x9d\xb2\x9a\xa2\x62\xa7\x74\x5e\x9e\x2e\xb4\xe0\x4e\x56\x1f\x9f\xb0\x0d\xa7\x70\xa1\x15\x9a\x8b\x73\xa0\x0f\x21\x77\x12\xc4\xed\x7b\x0c\xe6\x45\x12\x7f\x0c\x77\x2b\x5e\xd6\xad\xe7\x8c\x77\x4f\xe9\xfc\xf0\x45\x77\xfe\xe0\x28\x9c\xe9\x3d\x55\x38\xe3\x0f\x84\xc2\x39\x34\x07\x56\x9a\x32\x87\x41\xd5\xb9\x92\xd6\x79\x5a\x2d\xa3\xfc\x8c\x11\xdf\x76\xe0\xd2\xab\x10\x85\x17\x5a\xed\x48\x6c\x35\x4b\xc7\x43\x93\x30\x71\xd8\x80\x3e\x24\x82\x42\xd9\xd1\x42\x81\x8f\xa4\xff\x0d\xd8\x02\x5b\x56\xe1\x50\x07\x4e\x78\x64\xfd\xbb\x83\xe3\x98\x0a\x11\x05\x8c\xc5\x5a\xe2\x2f\xff\x57\xed\x31\xd0\xc3\x4a\x40\x5e\x28\xb5\x19\xb2\xf9\x1c\x95\xad\x07\xa7\xce\x57\xa7\xce\x57\xab\x87\x06\x3e\x75\xbe\xba\x27\xce\x57\x4b\x35\xbf\xe4\x89\xe1\x64\xf7\xf0\xea\x66\x8d\xe6\x57\xab\xf0\x7d\x0c\x7a\x78\x94\xd3\xe8\x48\x84\xd8\xe3\xe4\xa9\x38\x1c\x22\xa1\x81\xa9\x47\x3c\x8e\x0a\xc5\xba\xd0\xb3\x7a\xdb\xa6\xa3\xa4\x0d\xa0\x27\xcf\x19\x10\x47\x4c\x64\x1c\x2c\x4a\x45\x8b\x2d\x6a\x73\x77\x6d\x53\x35\xf9\xa1\x67\xe4\xed\xe5\x45\x49\x1b\xc5\x32\xa5\xaa\x0a\xf3\x49\x2a\x9a\x7d\x6f\x9c\xe2\xc8\x83\xe6\x0f\x41\x07\xfc\x0a\xde\x8d\x31\x19\x8b\x9e\x7a\x1f\x1d\xa6\x2c\xa1\xac\xd7\xfd\xa8\x07\x73\x3f\x44\xdb\x83\x41\xf5\x18\x89\x7f\xab\x8d\x93\xae\x65\xa5\xf1\xcb\x77\xea\xf7\xa1\xd7\x1e\xc6\x28\x64\xab\x76\x55\x37\xb5\x72\x8f\x37\xef\x6b\x8f\x4f\x98\xf5\x2e\x18\x04\xac\x25\xe0\xd2\x2a\x96\x00\xfa\xa1\xd1\xf4\xad\xab\x63\x98\xd7\xf4\x69\x10\xf9\x21\x70\x45\xfc\xfc\x79\x73\x23\xd5\xbb\x0c\x80\x89\xf6\x4b\xac\xdc\x7b\xca\x8a\xb9\xf1\x4a\x54\x73\xc0\x52\xd2\x11\x34\x59\xf1\xe8\x5d\x03\xd5\x28\xd1\x4a\x2b\xf5\x91\xd2\x46\x15\xf9\x4b\x1d\xc8\xd1\xf5\x43\x47\xd7\xdf\xc7\x71\xfc\xa8\xb1\x57\x95\x54\x6a\xe7\x64\x77\xe8\x4f\xfd\xd0\xd5\xc3\xf2\x45\xf5\xd6\x6c\x9e\x9f\xbb\x9d\x2e\x64\x2a\x5f\x5d\x27\xb2\x83\x79\xbd\xac\x97\xe8\xeb\x4e\x51\xfd\x64\x5c\x49\x83\x2f\xd9\x04\x4c\x4b\xd9\xa1\xb7\xbb\x1b\x54\xb7\xd6\xb4\xc7\xdc\xb2\x8a\x5c\x91\xf9\xbc\xa9\x5e\xee\xd2\x68\x78\x98\xc8\x93\x69\x2f\x57\x64\x14\xc6\xf1\x6e\x38\xbc\xae\xac\x06\x71\x85\xd5\x20\x56\x56\x83\x30\x67\x35\x90\x4e\xc7\xb4\xe0\x25\x5a\xa0\xa7\x53\x67\xd1\xdf\x62\x67\xd1\x4b\x4b\x6d\x1f\x17\xe0\xa5\x65\xb6\x0f\xcd\xd8\x93\x8d\x76\x95\xe9\x43\x7a\x14\xa0\xa8\x3d\x0d\x67\x49\x3b\x24\x51\x3b\x41\x45\x4f\x82\x92\xf5\xc3\xb2\x43\xe6\x08\x9d\xec\xb7\xd5\xe2\x51\x7c\xc3\xf3\xfd\xa9\xe6\xe3\x9c\xfe\x8a\xef\xaa\xfe\x4a\x4f\xf5\xd7\xa5\xfa\x6b\x5a\xd4\x5f\xd3\x7b\xa9\xbf\x86\x15\xfa\x6b\xb8\x44\x7f\x65\xf5\xfa\x6b\x52\xd0\x5f\x93\xf7\x4e\x7f\xcd\x7b\xeb\xbc\x07\xe7\xca\x71\xfe\x95\x77\x21\x2e\xa8\x59\x6d\xb2\x6a\x49\x56\x7b\xfd\xa2\xa8\xc1\x69\x63\x8c\x78\x63\xc6\xf0\x5e\xc8\x51\x63\x84\x51\x1c\x35\x04\xe7\xa0\xa4\x6d\x8c\x8e\x59\xa7\x99\xb4\x4d\xb1\xcc\x36\x85\x40\x8f\x69\xdb\xd4\xfd\x74\x95\xc9\x6c\x82\x0d\xde\xc0\xa4\x81\xb6\x97\x58\x73\xb5\x15\xb6\x20\x4d\x14\x65\x0d\x47\xba\x58\x80\x1e\xea\xf3\x41\xc0\x20\xba\x4b\x36\x82\x28\xc8\xbb\xe0\x42\x1b\xf9\x61\x68\xbd\x65\x75\xbc\x4f\x8f\x84\x53\xe4\x41\xb3\x1b\x9b\x54\xab\x34\x16\x3f\x58\x05\xbb\xf4\xc5\x1c\x67\x65\x5f\xec\x13\xd7\xc6\x1b\x57\xd7\x6a\x1c\x71\x4d\x5d\x81\x31\x6e\xe2\x80\xd8\x44\xe0\x08\x1f\xb8\xd5\xc2\xaa\x88\x69\x24\x20\xd9\xf1\x19\x9c\xc8\x53\xc2\x4f\xa1\xf0\xfa\xc5\x70\x06\x67\xb9\x5f\xd3\x0f\xcb\x15\x34\x6c\xf4\xb2\x91\x96\x80\xb4\xbc\x9b\xdd\x41\x0b\x61\x1a\x50\x7f\xe4\xe8\x68\xa3\xe2\x69\xec\xc8\xf5\x75\x2f\x9d\xc6\xba\xae\xef\x4c\xbe\xbc\xbd\x85\xcf\x32\xf9\xdc\x36\xe9\x63\xf7\x34\x16\xdb\xd3\x58\x14\xa4\xee\x49\x6c\x5a\x38\x89\x25\x00\xc0\x89\x60\x5e\xbe\x60\xa8\xf0\xc8\xed\xa7\xea\xbb\x68\x92\x77\xae\x2a\xd9\xeb\x62\x38\x5b\x00\x38\x3b\x69\x01\xe7\x3e\xdb\xc8\x51\xf3\xac\xb6\xb3\x24\x62\xa6\xbe\x9c\x37\x01\x9a\xcd\x59\x35\x28\x7f\xd8\x59\x7b\x2a\xec\xbe\xec\x2f\x48\x9c\x07\xba\xc6\x99\xa9\xd1\x25\x74\xbe\xcd\x7b\x5d\x47\xd3\x72\x8f\x69\xcb\x4d\x28\xc6\x94\x61\x28\x46\x05\x41\xd1\xff\x48\x7f\xac\x3a\x24\xae\xef\x72\x56\x53\x84\x62\xc4\x91\xdb\xdd\xbc\x16\x5a\xdb\x5d\xc8\x02\xff\x04\x5d\x05\xeb\x9b\x6b\x59\x26\x85\xbf\xbe\x35\x99\x3d\xff\xae\x35\x52\x04\xd6\x48\xab\x95\xad\x7b\x17\xf6\x59\x55\x4f\x8f\xc7\xf5\x04\xa8\xae\xb1\x76\x1b\xde\x35\x5c\x85\x52\x4b\x8a\x57\x1d\x43\x99\x06\x43\x00\x47\x79\x9f\xe7\x69\x59\x67\xe1\x28\xe1\xed\xfd\x50\x68\x05\xc9\xc6\x6e\x8a\xe3\x48\xff\xaa\xba\xec\xe5\x66\xae\x4c\xdc\x20\x94\xce\xdc\x94\x63\xaf\x71\xdd\x25\x27\xe9\xae\x5d\x1f\x68\xbf\x61\xaf\x41\x48\xc2\x5b\xde\x65\xf9\x76\xf5\x71\x7d\xdd\x50\x7f\xdb\xd3\x90\x84\x63\x31\x34\x55\x79\xdc\x5e\x57\x66\xc8\x8f\x6e\x5d\x33\xed\x11\x65\xed\x19\xa3\x53\x9c\x54\x5c\x82\x53\x3e\x78\x77\x36\x82\xb5\x05\x32\x8f\x82\xa3\xbc\xd0\x51\x63\x09\xb2\x76\xb1\xc5\xb2\x5a\x5d\x4f\x85\x15\xeb\xcd\x8a\x2c\xad\x79\x8c\xf8\xa7\x0c\x31\xae\x58\x73\x56\x64\x69\xcd\x3b\x0c\x25\x82\xb7\xad\x58\xab\xca\x7e\x1c\xae\x4f\x21\x12\x61\x32\x56\xed\x5f\xe1\x21\x47\x27\x41\xbb\x5c\x7a\x69\x7b\x93\x30\xc9\x95\x58\x7d\x88\x4a\x25\x97\xb6\x73\x15\x25\x7a\x44\x57\x6c\xc0\x2e\xce\xa5\xd5\xca\xb5\x72\xa2\x7a\xc9\x4a\xf5\x8a\x15\xf6\x18\x65\x4f\xe9\xf5\xb5\x5a\xd5\xd8\xa9\xfa\x18\x76\x52\xe2\x7f\x2b\xde\x15\xb1\xa2\x14\x7f\x3f\x9b\x3e\xee\x8e\x56\xc1\xea\xee\xf8\xdd\xdf\x1b\x7e\x4a\xa1\x58\x64\x51\xb9\x0c\x81\x06\xc8\x79\x49\x73\x17\x8d\x31\x39\x9f\x1c\x92\xe1\xf2\xb7\x83\xac\xd8\x80\x48\x54\x97\xdd\xe6\x11\xb4\xf1\x34\xe1\xb8\x2c\x53\x64\x86\x6f\x9b\x39\x42\xbb\xe9\xf8\x71\x32\xa2\xb5\x99\xfb\x03\x47\xbc\x4a\x2a\x64\x32\xd1\xb4\x90\x14\xb8\xcf\x4a\x2f\x72\x72\x9f\x41\x5c\xba\x1d\xc5\x16\x00\xac\x2d\xa1\xf3\x1a\x12\x5f\x65\xf3\x3c\xb9\xa1\x73\xd5\x6b\xdd\xe4\x03\x70\xad\x9b\x7c\x68\xae\x75\x93\x0f\xf6\xb5\x6e\x72\xdf\xae\x75\xe3\xdf\x7e\x96\x4f\x83\x6e\xfe\x44\x57\x8f\x02\x5d\x5f\x97\x0c\x38\x79\xbf\x5c\xfb\xc6\xc9\x65\x2d\x79\xa2\x28\x68\x6e\xea\x44\x8e\xa6\x89\x9c\xd7\x8b\xe1\xac\x6c\x8d\x22\xe8\x80\x5f\xa5\xd7\x11\x11\xeb\x25\x94\xfd\x21\x90\x66\x77\xb9\x89\xd8\x50\xe8\xb1\xfe\xdf\xda\xc7\xda\xc5\x60\x3e\xf7\xe5\x6d\x58\x53\x06\xe8\xe3\xdf\x0a\x54\xbb\x99\xe2\xba\x74\xcb\x52\x87\xce\x45\x93\xcc\xb9\xae\xa3\xa6\x66\xe6\x97\xee\x60\xdb\xfd\xd1\xcb\x77\xd7\x07\xb0\xec\x6a\x7f\x6e\xd3\x29\xb2\x39\xd0\x67\x76\xd2\x54\x2f\x03\xf7\x68\x94\x7d\xe0\x0c\xad\x10\x39\x05\xb7\xcd\x26\x51\x4f\x60\xd6\x13\x6d\xc7\x6e\x8c\x28\x6b\x78\xc6\xe8\x83\xa0\xd7\xd8\x4d\x79\x03\xf3\x06\x4e\x1a\x61\x2c\x18\xc6\x61\x63\xa6\x84\xd7\x8e\x07\x0c\x9b\xb5\x35\xae\xb9\x67\xd8\xaa\x69\xa5\x7f\x1f\x8d\x11\x6f\x24\x3c\x1c\x5e\x77\x05\x55\x99\xb0\x80\x71\xb8\x8b\xe2\x1e\x97\xf6\x9f\x63\x77\x79\xb5\xe1\x34\x57\xe8\x9c\xa9\x62\x85\xae\x49\x2a\x56\xf7\x7e\xe3\x7c\x07\x9d\x76\xca\xb6\x96\xe3\xc5\x8c\xec\x1a\xb9\x1e\x0d\xfc\x2c\x3a\x81\xe0\xd1\x60\xbe\x53\x58\xc5\x98\xf1\x01\x38\x56\x1a\x71\x0a\x49\xdf\x22\x5f\x5b\x32\xb0\x4f\x1c\xf9\x84\xca\xdb\xdb\xd8\x27\x15\xb7\xb7\x93\x63\xe4\x70\x51\x41\xa6\xdc\x97\xce\x9c\x96\x15\x2d\x29\xe1\xc7\xc9\x37\x4b\xcc\x1d\xf7\x34\x3c\xd0\x9a\x35\x7a\xf0\xc5\x9a\xb2\x56\x1a\xbb\x87\xa7\x71\x37\x68\x1d\xa7\xb6\x14\xed\x1b\xb7\xa7\xb4\xdc\xbb\xbd\xf2\x36\x06\xce\x70\x9a\xdc\xc8\x31\xb5\xde\xf5\xe5\x17\xb0\x80\xae\x63\x4c\x21\xa7\x59\x4f\xfa\xd6\x09\x44\x8e\xf1\x20\xa8\x70\xb8\x09\x98\x5d\x01\x70\x45\x81\x95\xbf\x37\x02\x2b\x93\x6d\xe8\x96\x6a\x25\xd5\x9c\x5d\xf2\x64\x92\xaa\xaa\xc1\x91\x57\x49\x59\x5e\x25\x55\xf2\x2a\x34\xc2\x2a\xc9\x84\x55\xb2\x9d\xeb\x4d\x2f\x2f\xa2\x92\x93\x8b\xa8\x04\x6c\xab\xbe\x99\xeb\x0b\x1f\x30\x19\x55\x1d\xc4\x08\x82\x54\x76\xa7\x1c\x31\x5a\x86\xaa\xe8\xb5\x6c\x35\x0a\x08\x44\x65\x1b\x4f\x80\x9d\xbd\xf2\x62\x38\x73\xc3\x6b\x19\xa1\xe1\x48\x6f\x3c\xbd\x2e\xd4\x7c\xa3\x77\xb4\x58\x64\x67\xac\x65\xb7\x25\x2d\xad\xf1\x8e\xdd\x89\x7c\x00\x8e\x50\x47\x57\xb4\xbe\xbe\x66\xce\x7e\xed\x5e\x23\xb9\xbc\xae\xbe\xcf\x25\x55\x0c\x84\x5c\x25\xcf\xa7\xc4\x36\xe0\x88\xcd\xce\xad\x5d\x60\xea\x3c\xd7\x5d\xa8\x63\xab\xab\x28\xe1\xad\x56\x06\x5b\x86\xa0\x7a\x5c\xe1\x33\xd7\xc4\xbe\xf4\x83\xab\x60\x95\x07\xbc\x3d\x45\x61\x92\x32\xc4\x32\xe7\x9e\x5c\xf2\x7d\x08\x0a\xe2\xc8\xd3\xe6\xdd\x6a\xe3\x6f\x87\x0e\x38\x22\x91\x7f\x84\x09\xe6\xa5\x8d\x76\x47\xfa\x05\x54\x7b\x38\x28\x29\x6c\x18\x92\xbd\x30\x09\x22\x3a\x94\xc9\xfa\x44\xf1\x82\x3a\x65\xf5\x3d\xf5\xd9\x33\x99\xf9\x41\xe0\x94\x12\x54\xf6\x08\x25\x62\x30\x7c\xef\xc1\xc8\x03\x0b\xb8\x8f\x23\x3e\xa9\xb8\xd8\x58\x96\x15\x2b\xa5\xce\xcd\x41\x5e\x84\x14\xbb\x8a\xdd\xe9\x4c\x88\x9b\x21\x3f\xe8\x8c\x28\xe1\x01\xcf\xd0\xea\xe8\xc9\xb8\x2a\x70\x41\xa0\x23\xf1\x58\xc0\x18\x13\x94\xf4\xf2\xdb\x72\xf5\xc9\xe4\xb9\x07\x2b\x11\x7a\xd0\x45\xe8\x41\x83\x50\x09\x13\x96\xed\x6e\x82\xb9\x25\xb3\x18\x73\x7f\xe3\x1a\xd9\x00\x10\x07\xc4\x1c\x7e\xd2\xa0\xbb\x45\xcf\x9a\x9f\x5b\xd4\xa8\x77\x61\x40\xfa\x74\x20\x75\x70\x79\x05\x22\x53\x08\x93\x20\xd4\x95\x79\x0d\x4f\x3e\x09\x08\xe3\xa0\xbb\x15\x9f\x4d\x6c\xbc\xbf\xad\xd8\x54\x33\x0c\x2a\x47\x23\xe9\xc7\x83\x75\x51\x5c\x0d\xca\x96\x9f\xae\x07\x43\x70\x4e\x0c\x27\x5e\x5f\x87\x69\x30\x04\x52\x71\x19\xd5\x17\x77\x8b\x8e\xdc\xa2\x23\xb0\x30\xe7\xa2\x78\x01\x47\x98\x5f\x95\xae\xde\xcf\xa2\xbb\x3d\xe6\x50\x9f\x8f\x49\x3c\xd4\x9b\x82\x38\xc8\xcd\x41\x67\x2a\xfd\x88\x36\xae\x45\xeb\x1b\xa0\xdf\xb5\x12\xc4\xc5\x90\x4f\x3a\xa3\x98\x52\xe6\xcf\x42\x96\xa0\xc7\x62\x1a\x72\x1f\x83\x07\xf8\x86\x50\x72\x5d\xc9\x92\x57\xac\x7f\x4a\x63\x8e\x67\x89\xeb\xdc\xad\xbe\xcc\xe8\x8c\xee\xd5\x98\xc0\x6a\x0b\xe9\x2f\xed\xdd\xb0\x7c\xc2\x73\x4f\xb8\x05\xcb\xde\xf5\xb4\x9c\x42\x63\xfe\x49\x1c\xa1\x47\x51\x1c\x1e\xf6\x1e\xfc\xdd\x2e\xdc\xd1\xa8\x3d\x13\x32\x1c\x12\x2e\xdf\x0e\x35\x1e\xee\xb6\xab\x3b\x38\xb9\x48\xd3\x04\x3d\x4e\x12\x1c\xa1\x5e\x73\x13\xaa\x5b\xea\x49\xef\x68\x22\x12\x8a\xec\x47\x48\x5c\x5e\xbe\x90\x07\x9b\x9b\x7a\xd9\x8a\x22\x42\xfc\x87\x61\x14\xa9\x43\xcf\x0b\x7b\x88\xf0\x27\x04\xab\x26\x62\x8b\x29\x56\x27\xf2\x29\x2c\xab\xb2\x1b\xbd\x32\x8c\xa2\xa7\x14\xc2\xd5\xb9\x54\x7b\xaa\x9e\x87\xc3\x04\xd5\x37\x9a\x79\x69\x43\x6e\x8f\x67\xf5\x54\x60\x94\xf8\xd9\x2d\x08\x33\x7a\x1e\x80\x62\xc4\x55\xba\xa0\xd9\x8e\xf9\xb2\x56\xc0\xad\x1a\xf7\x9d\x30\x8a\x72\x5f\x7c\x6f\x18\xe3\xe1\x75\x0f\xe6\x76\x56\xe5\xf7\x66\xdb\xa1\x01\x0e\x02\xd2\x99\xd1\xd9\x0c\xb1\xc7\x8d\x10\xa2\x7e\xc2\x50\x7c\x64\x6b\x52\x24\xf0\x3d\x31\xe6\x97\x88\x07\x5a\x2d\x8f\x50\x82\x04\xbb\x29\x7d\x69\xea\x94\xc2\xc4\x89\x2f\xb4\xd5\x6a\x86\x42\xa0\x93\x19\x70\x72\x65\x42\xf7\x65\x19\x64\x66\x13\x40\xb3\x95\xa8\x81\x5e\x32\x15\x35\x0e\xf1\x75\x03\x31\x15\xb8\x20\x22\xed\x27\xee\x0e\x8e\x6a\xc8\xac\x2b\xb7\xf3\xa5\xb5\xc5\x28\xdc\x43\xab\xd5\xb6\xb9\xb4\xb6\x11\x1d\xa6\x09\x4d\x79\xb1\xae\xca\x71\x9c\xcf\xd5\xd8\x07\xa5\xb1\x9f\xcf\xb3\x71\xcc\x0d\xdf\x09\x69\xd4\x77\x08\xb2\x9a\x2c\xee\xe2\x28\x43\xb7\x4c\x46\x4f\xc9\x84\xee\x9b\x3e\xe5\xa9\x45\xa4\x88\xaf\x92\x5a\xf8\xdd\x9c\x22\xe8\x96\x29\x0f\xef\x31\x84\xbb\x04\x95\xea\xf9\xad\x5f\x28\xe5\x76\xea\x97\x5b\x0e\x83\x05\x2c\x32\xd2\xe2\xca\xd0\x15\xeb\x0b\x22\x42\x7f\x03\xf3\xb9\x9f\xdd\x0a\x19\x8a\x59\x56\x4e\x26\x1a\x3b\x31\xd6\x57\xf1\x14\x31\x2f\x77\x03\x26\x0e\x8b\xb2\xf0\xca\xdd\x11\x33\xb8\x23\x10\xd5\x6c\x54\x22\xbf\x9e\x35\x59\xdc\x61\x3c\x00\x0a\x5b\x2d\x3b\xc9\x56\x9b\xdb\x35\xf3\xfe\xf4\xea\x4b\xe7\x73\x15\x9b\xaf\xb9\xc8\x78\xc2\x6d\x78\x69\xb4\x61\xc7\x8d\x7b\x45\x3d\x1f\xd5\x9c\x19\x55\x39\x73\x2b\xe5\x6f\x3e\x6f\xfa\x4b\x15\x7d\x73\xd8\xa4\xf6\xf7\xfe\x00\x92\xa0\xd9\x85\x38\x68\x6e\x42\x13\x8b\x54\xba\x6a\x1b\x21\x32\x84\x49\x80\x2a\x34\xcb\xad\xa6\x4f\x02\x3f\x0c\x94\x5d\xd7\x07\xa0\x13\x51\x82\x40\xab\xe5\xb3\xce\x2c\x4d\x26\x7e\xa8\xac\x1a\x00\x36\xf9\x7c\xce\xb4\xd0\x26\x9d\x1a\xb7\x44\x93\x60\x4b\xfb\x6e\xa7\xe0\x08\x0b\x14\x68\x90\x2e\x46\x98\x84\x71\x7c\x78\x24\x10\x20\xf3\xb9\x32\x0b\x25\x1d\x85\xf2\x7c\x6e\x20\x1f\xd8\x9c\x78\xe4\x63\x6d\x22\xa5\x56\x9a\x64\xea\x4a\xfa\x69\x0c\xe5\x13\xc4\x50\xce\x8f\xd7\xea\xa6\x0c\x19\x56\x29\x1d\xf2\x94\xa1\xdf\xe2\x50\xca\x77\xeb\x34\xeb\x68\x14\xe3\x59\xef\x08\x11\xd1\xff\x48\x64\x85\x3a\x44\xec\xa5\x3d\xc4\x46\x31\xdd\xef\x1d\xa1\x64\x18\xce\x64\x9c\x54\xeb\xc6\x2f\xbd\x6c\x0b\xd1\x4b\x5c\x6a\x96\xde\x9d\x4a\xc1\x5f\x4b\xf6\xb1\x58\x56\xc4\x37\x9a\xa4\xd7\xf6\x00\xdc\x14\x5a\x0d\x38\x1a\x0a\x9e\xc5\xe9\xcc\xeb\xf1\xc0\xdb\xa5\x9c\xd3\xa9\xb7\xb6\xcb\x50\x78\x7d\x4d\x7e\x62\x78\x3c\xe1\xf2\x63\x8c\x46\x3c\xf7\x49\xe7\x16\xdf\x44\x05\xee\x27\x99\x57\x7c\x50\xc5\xed\x9d\xc6\xc2\x6d\x85\x9c\x3f\x2a\x6a\xb5\xca\xeb\x6f\xdb\xe7\x81\xd4\xb3\x1e\x27\xdc\x47\x70\xb3\x0b\x60\x13\x27\x4f\x86\x4f\xca\x7b\x11\x38\x79\x0c\x13\xcc\x91\x2f\x48\xd5\xe7\x41\x17\x80\x1e\x0f\x10\x54\xbe\x18\xa9\x36\x6d\xd8\x4b\x57\x56\x65\x91\x07\x78\x4f\x86\x53\x94\xf4\xfa\x5e\x25\x0f\x8f\xa4\x26\xd3\x55\x7f\x2f\x99\x48\x49\xcd\x2e\x8c\x52\x16\x8a\x0e\xf4\xba\x10\x8d\x46\x68\xc8\x7b\x5e\x12\x4b\x81\x41\x4e\x5a\xcf\x9b\x28\xdd\x46\xd7\xa7\x15\x1f\x23\x3e\xc1\x90\x31\xba\x9f\x4f\x6c\xcb\x34\x0f\x62\x42\x10\x2b\x7c\x92\x69\xf9\xca\xe4\x5d\x61\xd5\x31\xfd\xfa\x45\xd4\x89\xd0\x8c\xa1\x61\xc8\x31\x19\x9f\x8f\x71\x98\x64\x02\x9b\xab\x7f\x79\x50\xde\xc1\x97\x65\x1d\x85\xa5\x53\x9d\x37\x25\x1c\xc7\x3d\xef\x63\x9d\x6e\xa7\xeb\x2d\x00\xd4\xbb\xb5\xd0\xd2\x38\x3a\xe0\x4a\x8d\x96\x7a\x9b\x9c\x7d\x98\xcc\xc2\x21\x26\xe3\xde\x66\x17\x2a\x3d\xe2\xf1\x48\xe5\x89\xc3\x43\x9a\xf2\x9e\xf5\xd6\x82\xe9\x2c\x0a\x39\x7a\x8c\xaa\x8b\x8b\x50\x49\x90\x97\x66\x4a\xf3\x73\x92\x1e\xa1\x84\x87\x98\x20\x26\x35\x43\x82\xa7\x72\xe0\x1f\x35\x13\xf0\x60\xb7\x0b\x29\xd1\x82\x8b\x2a\x47\x89\x90\x11\x0c\x7c\x59\xde\xf1\x34\xbf\x04\xf6\x0a\xde\x51\xc2\x92\xfa\xa1\xe1\xfc\x80\xfa\x9e\x9c\x4c\x4f\x9e\xe6\xf5\xf2\xd7\xa6\x94\x4c\xa7\x8a\x81\x5c\x58\x62\x95\xa6\x9d\xdb\x5d\xe9\x59\x55\x06\xcc\x42\xe4\x7a\xd5\x29\x4a\xe9\xa1\xc0\x15\x33\xdd\x55\x24\xc5\x44\x99\x61\x37\x4e\x59\x7e\x59\xa2\x30\x3a\x14\x9f\xe4\x3a\x57\x1f\xf4\xf8\xf6\x50\xc0\xad\x77\xf9\x02\x26\x85\xf8\x2f\x85\x58\xca\x0a\xe9\x40\xfa\xba\xed\x28\x21\x5b\x4f\xad\x82\x4f\x3a\x30\xaa\x58\x7e\x60\x54\xda\x6d\x0f\x8c\x52\x05\xee\xa4\x93\x0a\x01\xd5\x49\x45\x9c\xa5\x7e\x19\x9a\xcd\x8b\xe4\x99\xb4\xac\x10\xb6\xb9\xb2\x5b\x50\xdb\xd6\xd6\x29\x34\x52\x65\xe8\x7c\xf8\xf0\xf1\x48\xde\xce\x72\xae\x98\x74\x66\x21\x43\x84\x3f\x49\x23\x24\x84\xd5\x1d\x75\x03\x59\x17\x78\x3c\x2a\x0f\xb4\xf9\xb2\x1c\xa3\x2c\x9b\x83\x92\xe7\x9e\xfe\xb6\x11\x37\xc1\x9a\x81\x0e\x32\x56\x6c\xbe\xd4\x78\x11\xbb\xe5\x38\x94\x72\xaf\x36\x3a\x16\x97\x51\x98\xf0\x5d\x4a\x4b\x68\x54\x5c\x46\x57\x39\x54\x18\x21\xc4\xf4\x4d\xbd\x98\xd2\xeb\xe9\xcc\xf7\xb4\x3d\xbd\x67\xea\x53\x87\x95\x62\xf6\xd3\x38\x52\xdc\x40\xda\x97\xab\x3a\x6c\xca\x74\x70\xf2\x58\x98\xf0\x87\x45\x71\xe8\xed\x84\xfb\x21\x16\x6c\x55\xf3\x4b\xdd\x03\x55\x17\x2a\x0c\x8b\x4b\x72\x6a\x5c\xaa\x2a\x05\xe6\xb6\xb9\xca\x72\x4c\x03\xaa\x07\xcb\x33\x89\x6d\xc9\xf0\x70\xa9\x68\x6a\x2e\x6a\xd2\xf4\x2f\xcd\xa0\x2f\xa3\xcf\xa7\x28\xb1\xdc\x79\xa7\xcc\x58\x8f\x9d\x05\x4f\x88\x8c\x42\xd0\xac\x9c\x0d\x86\x12\x1a\xef\x21\xe5\x52\xa2\xaa\xf4\x3d\xe5\x4b\xd4\x43\x64\x0f\x33\x4a\xe4\x45\x2e\xd0\x71\x7e\xcd\xe7\xaa\x2e\x51\x33\x26\xe3\xed\xae\x8e\x4a\x58\x44\x4e\x0c\xc7\x6d\x1e\x4d\x24\xae\x21\x43\x8d\x93\x07\xfb\x03\xb0\x80\x11\x8e\x1e\x97\x31\x43\xcd\x72\xb8\x8d\x73\x0f\x79\xce\x91\xe9\xaf\xa2\xce\xa7\xe5\x3e\x77\x9e\xf3\x0a\xdb\xe3\xf1\x35\xe6\x55\xe4\x6d\xc5\x5e\x95\x9d\x03\x9a\xdb\x60\x36\x9f\xdd\x52\x85\x7a\xbd\x82\xd9\x46\x67\xda\x51\xe5\x9e\x92\xdf\x7c\xa0\x19\x96\xb6\x1f\x40\x27\x70\xc4\xed\x0c\xcc\x5a\x89\x4d\xe4\xc7\x5e\xe8\xef\xe5\x83\xbe\x3b\xf4\x2b\x3a\x5a\x40\x21\xdb\x0f\x75\xac\x06\x28\xd4\x2b\x6b\x3e\x45\x1d\xb9\xe1\x08\x09\x6a\x8d\x75\x18\x9a\xd2\xbd\xbc\xb9\x56\x86\x21\xcb\x0c\x73\xc3\x18\x85\x24\x9d\x49\x63\x87\xb5\xa9\x16\x07\x36\xc2\xc9\x8c\x26\xc8\x9a\x5c\xc5\x6f\xa1\xc6\x9e\x57\xfd\xf1\xac\x88\xa2\x83\x6f\xdc\x3d\xfb\xf4\xea\x96\x67\x37\xe7\xea\xa6\xd3\xca\xad\x5a\x28\x9b\xc6\xf6\xc4\xdd\xb7\xbd\xf3\x76\x28\x48\x9c\x44\x63\xbb\x5b\x23\x42\x39\xdd\xae\xb1\x8a\x91\x82\x55\x8e\xd3\xf1\x38\x56\xb6\xcb\x5e\xd6\x26\x31\xa4\x7b\x6c\x79\x63\x13\x04\xd0\x16\x66\xb5\x85\x59\xa1\xb0\x35\x9b\x02\xa8\xc5\x30\xf5\xca\x87\x31\xa0\xab\x5f\x4b\xed\x7b\x98\x94\xec\x8c\x16\xa3\x93\x1a\x7e\x1d\x74\xea\x8a\x5e\x47\x87\x91\x60\x15\xb0\x78\x68\xfe\xe0\xef\x05\x41\xc0\x3b\xfb\x13\x3c\x9c\x94\x6d\x6f\xd6\xb0\xa4\xdb\x80\xbc\x93\x70\x3a\x7b\x7c\x3a\x45\x11\x16\xbc\x81\xd1\x59\x38\x56\x5c\x5c\x7c\x2c\xbd\x5f\xd2\xdc\xcc\x19\xe9\x17\x30\xc7\x0a\x6b\x28\x8b\x95\x64\xaa\x02\xc9\xb8\x1a\x8f\x67\x0f\xe7\xe4\xa7\x4c\x85\xf2\x00\x4c\x9c\x0f\x99\x02\x25\xcf\x36\xcb\xab\x35\xa7\xe0\x00\x38\x0c\x32\x39\x49\x1f\x82\x2b\x2b\xce\xbe\x9f\x82\xce\xe7\x28\x26\xbe\xa7\x94\xb3\x86\x07\xa0\x06\x3d\x00\x47\xab\x94\x93\xc8\xa8\x72\x4a\x89\x03\x30\x0a\x58\x87\x63\x1e\x67\xcc\x47\xec\x0d\x78\x37\xe5\xc8\xf7\xe4\x07\x4f\x31\x4d\x75\x7b\x38\xf3\xc1\x62\xf2\x0a\xae\xd6\x85\x72\x66\x51\x57\x4b\xf2\x00\x9c\xf0\x69\x2c\xa4\x01\x19\xbd\x46\x32\x6c\x67\x11\x4a\xe3\x2b\x94\xed\xf4\xbc\xb3\xc9\x2c\x24\xe7\xce\x6e\xc8\x3f\x1e\xe4\x0c\x8f\xc7\x88\xf5\xbc\x69\x48\xd2\x30\xd6\x7a\xea\x15\x14\x23\x79\xe9\xd7\xeb\xd4\x75\x78\x68\x3a\xdc\xf1\xe4\xce\x4c\x10\x5b\xa1\xd4\x28\x57\xca\x58\x56\x7b\x67\xce\x46\x78\xef\x1a\x69\x94\xff\x49\x85\x3d\xf0\xce\xd8\x4b\xba\x50\x9e\x40\xeb\x5f\x29\xf4\x1a\x79\x2d\x5e\xa9\xe6\xed\x2c\x8b\xc3\xc8\xe4\x27\x0f\xc0\x33\x5e\x65\x53\x8c\xc6\x28\xb0\x0a\x7b\x65\x96\x84\x1f\x8a\x3c\xd3\x90\x8d\x31\xe9\x75\xb7\x14\xd0\x3e\x63\x5b\x0b\xfd\xe2\xb8\x03\xe8\xf5\xaa\xb0\xd1\x42\x99\x40\x67\x76\xb0\x55\xd5\xdc\xb9\x4a\x14\xc4\x48\xd9\x51\xb1\xf5\xe2\xdc\xb0\x0c\xe1\x19\xef\xdc\xd9\x8d\x08\xef\x9d\xa4\x8e\x24\x57\xc7\x08\x9e\xf1\x1a\x38\x72\x33\x2c\x93\xfb\x97\xb6\xa8\x3e\x9c\x01\x05\x8d\xff\x68\x4a\x23\x3c\xc2\x62\x1b\x8a\x7d\x0a\x8b\xf4\xad\xb3\x75\x6c\x2e\x31\x98\x94\x3c\x22\xb9\x8c\xcb\x5e\xec\x51\x44\xe1\x10\xa2\x62\x47\x56\x92\xb3\x07\x11\x80\xe6\xf4\xe7\x38\x41\xbf\xb9\x29\xf2\x2e\xdb\x70\x7d\xf7\x34\x24\x19\x4e\x50\x94\xc6\xe8\x12\x19\x22\xdf\x0b\x47\x1c\x31\xdb\x28\x44\x79\xc1\x0b\x40\xe9\x4c\x58\x62\x06\x30\x52\xe7\x76\x94\x28\x49\xb2\x57\x3c\xb4\xba\xa2\x88\xc7\x07\x8b\xc5\x02\xac\xb1\x8e\x9c\x4b\x81\x8f\xc0\xb3\x70\x0e\x62\x55\x40\x7b\xaa\xbd\xec\xd0\x3b\x27\x2b\x7b\x70\x52\x29\x93\xea\xfd\x4f\xef\x6a\x30\xd7\xa7\x92\x30\x73\xcc\x31\xa2\x2a\x2b\xaa\xc9\xfa\xb5\xc2\xb1\x95\xc5\xa4\x59\x77\x98\x65\x1f\xb2\x2a\xaa\x3f\x01\x53\xd0\x79\xa3\x62\x3c\xc6\xc2\x29\xca\xd1\x0e\x1e\xf9\xa8\xa2\xa0\xd4\x9b\xca\x47\x72\x4d\x54\xd5\xbe\xf5\xb1\x5d\xed\x20\x15\xb2\x20\xf4\xa5\xb2\xec\x90\xc3\x41\xdb\x32\x74\x41\xfc\x24\x10\x7b\xf4\x61\x8c\xd6\x48\x47\xb1\x9e\xab\x74\x16\x74\xa1\xf9\x75\x19\x8f\x27\xdc\xf9\xfd\xb0\xb4\xd3\x3a\x09\x4f\xa0\x91\xf8\xae\x6b\xe9\x6b\x46\x56\xcd\xac\x87\xe1\x0c\xf3\x30\xc6\xcf\x22\x9f\x01\x30\x70\xb6\x3e\x54\xe4\x60\xde\xec\xc0\x93\xb7\xa4\x2b\x8e\x1d\xef\xc6\x59\x63\x66\xb0\xb2\x7a\x96\xa0\x97\x09\xdd\x2f\x58\xa2\x6a\x89\xa1\x6c\xba\x88\xd4\x79\x62\x4e\xd4\x35\x26\x5e\x0f\xac\xdd\xc6\x39\x68\x39\xa3\xd0\xa4\x63\xc4\xd1\x27\x05\xe6\xb6\x33\x66\xf5\x20\x6e\xd3\x7d\x0e\x20\xda\x36\xc9\x57\x4c\xfd\xd6\x92\xa4\x9a\xb4\x3a\xa6\x5c\x2b\xb6\x70\xf1\xe2\x00\x0a\x64\x38\x8a\x65\x88\x4d\x5c\x84\xac\x6f\x5d\xf1\x48\x57\xa9\x02\x46\x31\x84\x48\x5f\x15\x48\x0a\x55\xa8\xf8\xff\x2e\xde\x15\x7e\x7b\xa2\xe4\x96\x41\xad\x30\x0b\xc6\xca\xee\x01\x30\x9f\x5b\xb3\x91\x7c\xf9\xd5\x88\x14\xe7\xe3\xd8\x77\xa4\x8a\x02\x87\x13\xa3\xe3\x01\xa0\x15\xc6\x56\xcb\x47\x41\xd7\x1c\xd9\x55\x76\xca\x5d\xeb\xbc\x38\xba\xa0\xd0\xd3\x6c\xba\x21\x13\xdc\xce\xa1\xc3\x13\x39\x50\xc8\x0b\x2c\x4b\x18\x96\x40\xa5\xa4\xac\x57\x33\x0b\x87\xe1\x2b\x79\xb2\x7a\x44\x6a\x86\xa0\xe2\xa8\xbe\xb4\x36\x15\xcd\x14\x58\x64\x05\x4f\x14\x9a\x81\xd6\x1f\x32\x77\x8a\x4f\xe2\x48\xd4\xa3\xb7\xce\xc4\x65\x97\x3a\xad\x62\x6b\xfe\xa4\x3a\x4b\xc9\x9e\x09\xd4\x66\xb2\xa2\x21\xc8\x5e\x59\x49\x6a\xd6\x98\x8c\xb1\x05\xdd\x49\xad\xd9\x4f\x8e\x67\x18\x35\x13\xc9\x8d\x39\x26\xc3\x23\xeb\x5f\xd7\x59\x7a\x2b\x0d\xf5\xf1\x73\x5c\xb1\xa9\xab\x09\xae\x1e\x49\x81\x89\x1e\x49\x31\x12\x4a\x9d\xae\xe3\xc9\xc6\xcc\xe4\x18\x80\x7a\xf9\xdd\xbd\xa8\x71\xd6\x04\x95\x67\xf3\x79\x85\x6a\x87\x1d\xea\xdb\xc5\x24\xd2\x4c\x05\xac\xd5\x5b\x87\x94\xcf\xc0\x91\xb1\xe4\xf4\xb0\xb1\xdc\x13\x68\xad\x38\x3d\xb4\x00\x90\x74\x4a\xca\x30\x82\x58\xa0\x9c\x1f\x93\x1a\x76\xe4\x06\x0b\xe3\xea\x36\x5c\x36\x33\x66\x9d\xda\x34\x14\xb5\x5a\xb9\x1b\x96\xcb\x43\x12\x9d\xdb\xdc\x66\xed\xcd\x5e\x57\x8c\xc0\xa6\x1b\x9a\xa8\xbd\x59\x08\x4e\xc4\xb5\x11\x4d\x47\xa6\x24\x92\x78\x73\x06\xa8\x4a\x59\xf7\xb8\x7d\xa9\x72\x01\x57\x0b\x44\xd2\xa5\xc6\x9e\xcf\xc6\x77\xec\x6c\x7d\xb4\x80\xd6\x55\x42\xc6\x23\x45\x42\x74\x71\x13\xb8\x18\x96\x7e\xf6\x06\x0e\x24\xcb\xe3\x81\xb6\x37\xa5\x13\x96\xbc\x8b\x75\x69\x24\x4f\x80\x91\x22\x13\xb1\x71\x2e\x00\xec\x0f\x00\xa4\x9a\xd4\xc2\x24\xc1\x63\xe2\x1f\x2d\x20\x72\x5e\x16\x28\x1b\x1c\x31\x38\x6a\x6f\x36\x83\x80\xd9\x7a\x31\x68\xb5\x64\x12\x71\x92\xb6\x69\x1f\x0f\xca\x55\xf7\xf1\x00\xf2\x3e\x1e\x80\x5e\xa9\x44\xab\xe5\xcb\x32\xf2\xb3\x7c\xae\x6c\x91\xf9\x00\xa4\xb7\xe1\xb0\xf4\x01\xf4\x0d\x5e\xe6\x06\x6c\x7a\xb5\xb2\x23\xd7\xaa\x1e\x58\xef\xc9\xfd\x89\x9a\x80\xf7\x07\x93\xcd\xcd\x3f\x7e\xf6\xb1\x87\xee\x34\xe0\xfd\x71\xfa\xe9\xf1\x21\xf0\xcd\x9b\x69\x9c\xa5\x28\xf7\xb2\x99\xf8\x58\x6a\xae\xe2\xcc\x6c\x95\xd8\xf7\xbf\x0b\x37\x97\x22\x92\x8f\xbb\x6e\xdb\xcb\x3f\xa1\xb6\x42\x74\xf9\x62\x65\xd0\x06\x92\x47\x07\x02\x51\xfb\x32\x5c\x7d\x9d\xb5\xf1\xdb\x61\x36\x66\x7f\x70\xf2\x37\x03\xaa\x02\xf9\xe7\xed\x24\x85\x30\xfe\xcb\xe2\xf7\x2f\x0b\x60\x7f\x3a\xa7\xf7\x64\x4e\xef\x46\x08\xff\x93\x72\x2c\x13\xd8\x7f\xc5\xbb\x23\xea\x35\xe9\xda\x6b\x23\x27\xb9\x67\xab\xaf\xab\x35\xe5\x65\x28\xb1\xb9\xce\xe7\xcd\x66\x85\xd2\x85\x8c\x56\xe5\xb8\xd8\x09\x31\xcb\x79\xf0\xb2\xe9\x37\xd9\x7c\xde\x24\x62\xdf\x6b\x36\x59\x07\x27\xd2\x53\x55\x80\xf5\xd5\x09\xf9\xca\x47\x90\x80\xdb\x7a\x8b\x04\x27\xc6\xf4\x48\xb4\x63\x7b\xc0\xf3\xc9\xca\xc6\x75\x9e\x44\x4f\x52\x27\x13\x73\x33\x5d\x88\x13\xb4\x3f\x41\x0c\xb9\xef\x21\x39\xef\x93\x4a\x04\xb1\x11\x21\x9a\x4c\x7f\x6d\xb5\x68\x55\x40\x38\x96\xf2\x89\x7d\xf6\xdb\xfc\x0d\x49\x54\xb9\x77\xe7\x32\x9b\x37\xc2\x45\xda\x90\x92\x3d\xc4\x8e\x7b\xc7\x2c\x1f\xe0\x26\xef\xc6\x88\x6c\xd0\x8f\xb3\x44\xba\x30\x0a\xf1\x56\x88\x4f\xf9\x37\xd1\x51\x9f\x0d\xb2\x23\x20\xc7\xc1\x11\xf5\x91\xbd\x12\x36\xb8\x9d\xb9\x09\x49\x24\xc7\xd9\x10\xb4\xde\x25\x65\x67\x3b\xaa\xcf\x3e\xab\xba\x21\x59\x39\x82\xe8\xf3\x69\x3e\xf6\xf9\xaa\x44\x9e\x5d\xaa\xee\x77\x07\x82\xc0\xfb\xb7\xd7\x1d\x89\x80\xa4\xae\x65\x1d\xe2\x2b\x77\x68\xcc\xef\xa1\x98\x32\xe6\x01\x5b\x2b\x84\xfc\x36\xfe\xce\xb5\x8e\xe5\x42\x01\x5a\xe5\x42\x78\xd5\x4d\xbc\xf7\xb1\xd3\x78\x93\xb4\x5a\xc6\x4b\x3c\x83\x56\xf4\x17\x5f\xbb\x6b\x3e\xcf\x1e\x58\xac\xe5\x39\xa7\x0d\xc5\xe3\x23\xf8\xa0\xbc\xd7\xd9\xef\x0e\x20\x0d\x48\x7f\x73\x90\xbb\x09\x3d\x44\x4f\xa6\x82\x92\x5a\x2d\xdf\x23\x12\xca\x6e\xf2\xe3\x56\xcb\xc7\x81\xfa\xee\x63\x79\xd4\x5d\xc8\x41\x85\x1a\x62\x72\x50\x00\x00\xc4\xe7\x5c\x45\xe4\xce\xd6\xe5\x98\xdf\x4b\x71\x7b\xcc\xd1\x29\x21\x9f\x12\x72\x3d\x21\x07\x77\x8f\x92\x71\xa2\xee\x1d\xdc\xde\x26\x93\x3d\x18\xdc\x95\x2e\x47\x7a\xf3\xe5\x67\xd9\x16\x77\x36\x5f\xfd\x66\x93\xa1\xd9\x3e\xb7\x9b\x6f\x73\x73\xcd\x86\xeb\xbb\x2d\x49\x48\x56\x79\x17\x37\x28\x9c\xb4\x05\x4d\xac\x3c\x1e\x27\x45\xfa\x74\x59\xbf\xef\x96\xf5\x72\xd2\xf1\x8b\xe6\x53\x26\x57\xfc\xa6\x7b\x39\xde\xd0\xf7\x05\x41\x39\x6a\xf1\x9d\x84\xde\x4e\x22\xe4\xdd\x9e\xba\x20\xa5\xb8\xd3\x2d\xe5\xfd\x47\x7b\x79\x5d\x26\x23\xaf\x07\x01\x24\x01\x13\x1b\x0a\x0e\x98\xb3\xa1\x58\x4a\x13\x33\xea\x13\xf9\x00\xcb\x5d\xda\x09\xe2\x7b\x29\x9a\xc7\xa7\xa2\xf9\xfb\x9d\xfc\xde\x4b\x89\xe6\xec\xdd\x13\x68\xe2\x7b\x2a\x9a\xc7\xa7\xa2\xf9\x29\x21\x2f\x23\xe4\xbb\x28\x9a\x13\xca\x4f\x26\x1b\xd4\x1a\x80\x9a\xb7\x6f\x00\x22\x94\xcb\xbd\x46\x75\xe2\x2e\x0a\xda\x84\xf2\xf7\x85\x71\xb0\xbb\xd4\x38\x78\x87\xfa\x09\xa1\xfc\x2e\x5a\x03\x69\x75\x98\xa4\xf7\xd7\x88\xdd\x5d\x73\x2a\x65\x77\x71\xfc\x0e\xee\xc7\x00\x6a\x26\x58\x18\x9f\xee\x00\x34\xcb\xa3\xb6\x39\xb8\x2d\xfb\xff\xc1\x5d\x19\x95\xaa\x8e\xde\xfb\x23\xe4\xb2\x33\x0a\x32\x31\x06\xa5\x43\x0a\xf4\x70\x72\x55\xe0\x74\xa8\x2f\xdd\xec\x52\x1a\xa3\xd0\x79\x4d\x91\xdb\x4b\xb6\x45\xa1\xd8\xec\xbb\xdb\xdd\xa6\x73\x47\x4f\xd4\xa9\x68\xd0\x03\xbd\x66\x13\x55\x1c\x5f\xc8\x3d\x47\xec\x9a\xc9\xc6\x90\xc6\x31\x92\x18\x56\x91\x8a\x93\x51\x0d\x9f\x4e\xc0\x94\xb4\x91\xd8\xc1\xee\x47\xf8\xda\x6c\x7f\xcb\xfa\xc8\xa0\xe7\x60\xae\xbc\x7a\xba\x2a\x6c\x68\xb3\x38\x3c\xa0\x8a\x44\xdd\xe2\x50\x86\x2d\x35\xc6\x1b\x62\xe6\xe7\xb8\x1a\x12\x4c\xc6\x69\x1c\x32\x5d\x3e\x7b\x86\x61\xf9\x78\x93\x11\x66\xca\x4b\xe7\x7d\x3c\xe2\xf6\xdd\xbe\xfc\x98\x9b\xb1\xce\x25\x86\x71\x4c\xf7\x1f\x8e\x43\x72\xdd\x03\xd9\xd8\x29\xdb\x80\x1d\xbb\xa6\x8c\xe8\xdd\xcc\xeb\x73\x08\x66\x15\x09\xdd\xae\x76\xaa\xdc\x31\x3b\xc1\x60\x47\x21\xaf\x0c\xc6\x7c\xfc\x20\x9b\x9c\x0c\x7d\x3e\xc5\x0c\xb5\xd5\xe1\xef\xfd\x79\x9b\x4a\x47\xdb\x6d\x92\x72\x04\xf0\x8b\x74\x8a\x08\xff\x6f\x57\x1a\x38\x69\x68\xd4\xe4\xcb\x96\x02\x07\x3e\x41\xf2\x7d\xd5\x86\xed\x5d\x47\xfb\x84\xd2\x6c\x12\x3f\x85\xf9\xe4\x51\x7b\xdd\xc8\x93\x9d\x7d\x8c\x8a\xb1\xf5\xa0\x77\xf1\xe2\xc5\xc6\xa3\x14\x36\x3e\xfd\xe9\x4f\x7f\xda\x03\x30\xcc\x8a\x39\xd1\xeb\x18\xec\x7b\x23\x53\x62\xc6\xd0\x10\x27\x72\x5a\x5c\x32\x18\x00\x98\x04\x61\x47\x65\x83\x69\x10\x76\x6c\x46\x18\x07\x61\x27\xcb\x0a\x87\xb5\x8d\xec\xa2\x11\x65\xc8\x13\x44\x77\x89\x3d\x6c\x7e\xc8\x2b\x16\x3a\xf1\xbc\x84\x07\x00\x8e\x82\x61\x47\x65\x87\x51\x30\xec\x64\x05\xe0\x24\x18\x76\x64\x11\x38\xd3\x1f\x64\x21\x38\x0d\xb2\x30\xf3\xf1\x31\x44\x9b\xc8\xe9\x98\x06\xd8\x47\x30\x91\x1e\x9f\x4d\x09\x82\x0e\x4e\x9e\x11\x63\xed\xd7\xd0\xad\x22\x3f\xcb\x5c\xa6\xc7\xe5\xdf\x67\x94\x8c\x1f\x55\x17\x7c\xe5\xf8\x8a\xa2\xea\xc1\x59\xf9\x84\x81\x44\x01\x9c\xb0\xd9\x51\xab\xe5\x8f\x02\xec\x8f\x60\x02\xa0\xc4\x41\x0d\x8d\x3f\x82\xa9\x5d\x70\x7a\x4b\x49\xd4\x82\x36\x23\x3f\xd2\x33\x28\x64\x7d\x58\x68\xc4\xe4\x31\xcd\x44\xad\x96\x1f\x05\xd8\x8f\x6c\x33\x57\xc2\x29\x32\xf3\xe0\x47\xb5\x8d\xb9\xb3\x1b\x2d\x69\xd0\xcd\x67\x1a\x9d\xb4\x5a\xfe\x24\xc0\xfe\xc4\x36\x2a\x67\xd7\x9f\xd4\xb6\xa6\xc9\x67\xb2\xa4\x21\x9d\xc5\xb4\x31\x6b\xb5\xfc\x59\x80\xfd\x59\xa1\x63\xaa\xa5\xd9\xd2\x7e\x29\x02\x85\xb3\x63\xba\x75\xde\x69\xd1\x32\x36\x88\x3a\x32\x20\x8e\xa0\x07\x1d\x6b\x99\x08\x81\x8a\x39\x85\xa7\x54\xdd\x15\x59\x2b\xc6\x43\x3a\x61\xe0\xd4\x56\xcb\xfd\x65\x82\x71\x13\xba\xef\x29\x5f\x91\xe2\xf2\xd8\x26\x3e\xe8\x99\xc4\x27\x29\x41\x3e\x17\x69\x82\x51\x09\x74\x05\x91\xf6\x0c\x83\x3c\x86\x43\x27\x86\xe1\x96\xb9\x74\x81\xf7\xde\xf6\x0e\x79\x8f\xb8\x34\x87\x14\x86\xb5\x9c\x5a\x8e\x4e\xfb\xd1\x90\x87\xb5\xbc\xfa\x8a\xca\x5b\xe6\xd7\x49\x80\xfd\x10\xc0\x34\x48\x3a\xb3\x90\x4f\x60\x1c\x24\xf2\x75\x15\x87\x57\xfa\x14\xa6\x20\xb7\xa3\xca\x69\x18\x82\x56\x6b\xe8\x3e\x74\x42\x3a\xb2\x8d\xa4\xd5\x1a\xca\x67\x25\x62\x87\x67\xb8\x94\x14\x25\xca\x0b\x0d\x72\x67\x4b\x1e\x76\xe4\x78\x26\x8f\x51\xe6\xc7\x00\x7a\x71\x98\x70\x3d\x76\x53\x94\x24\xa1\xbc\xc3\x91\xa3\x58\xc1\xc5\x43\x3e\x39\x4f\xa2\x3f\x42\x87\x2e\xd5\xba\x24\xaf\xa6\x31\x0a\x79\x58\xa0\xdc\xec\x0e\x95\x8e\x5f\xd5\xd1\x81\x51\x67\x74\x96\xbd\xed\xcd\x95\x31\x47\xed\x5d\x89\x07\xe0\x91\x18\xa4\x1e\xcf\xae\x9a\xc2\xeb\xe8\xb0\xc7\x16\xcb\x29\x0f\x1d\x0c\xe3\x34\x79\x5f\x4b\x61\x15\x32\x18\x81\x1e\x26\x5e\xe6\xfd\x9c\xdf\x36\x09\xec\x7b\x4c\xbd\x84\x5c\xd8\x8e\xc3\x80\x76\xe4\x17\x41\x33\xd4\xd9\x80\x8f\xd9\xfb\xb0\x76\x91\xc6\xd6\xe1\xb9\x4e\x1a\x76\xc6\x53\x60\x2e\x0a\x87\xad\xd6\x83\x41\x10\x84\xc6\xa7\xec\x48\x11\x37\xf3\x43\xf8\xa0\x24\xef\x7e\x77\x20\x88\xbb\xbf\x39\xc8\x84\x4a\xfb\xf4\xb7\x3d\x47\xd5\x29\xa9\x15\x2e\x6b\xb3\xc4\xa0\xd5\x4a\xcf\x0a\x0d\x0b\x9d\x0d\xe2\x95\xf0\x5c\x58\xf2\x2d\xbe\x34\x77\x6a\xe5\x7c\xaf\xad\x9c\x4b\xd7\xaf\x91\x41\xdf\x17\x8b\x97\x21\xa9\x09\x5e\xb0\x2f\x73\x27\x7a\x4a\xab\x17\xb6\x75\x3a\xac\x5a\xc4\x58\x2c\x62\x34\x46\x07\x1e\xf4\x04\x5d\x7b\x62\xc9\xef\x21\x96\xd4\xac\x6a\x91\x15\x26\x01\x95\x8b\x00\xa6\x01\xed\xe8\xec\x30\x0e\xec\x6e\x9f\xb6\x5a\xe9\x49\x96\x7e\xa2\x22\x36\x93\x7e\x32\x68\xb5\xfc\x30\x10\x00\x58\xf3\xd0\x34\xc4\xb1\x10\x0a\x12\x99\x1a\x04\xa4\x23\x93\xe4\xaf\xb2\xa9\x43\x7f\xed\x24\x34\x65\x43\x04\x59\x65\x7f\x11\xec\xab\x6e\x3d\x49\xc9\xd5\x38\xf2\xa0\x37\xc5\x02\x78\x42\xd9\x30\x06\x00\xe2\x80\x75\x9c\x1c\x90\x06\xac\xe3\xe6\x59\xcb\xed\x81\x54\x46\x4a\x2e\x9a\xae\x65\xdc\x40\xde\x61\x48\x5e\xb1\xf5\xbd\x7e\xd8\x7e\xb6\xdb\xfe\x83\x81\xbf\xdd\xd3\x60\x7b\xf0\x80\x49\x04\xdb\x1f\xf1\xa0\xcd\x72\xe4\xad\xd3\x75\x0f\x2e\x6a\xb3\x02\xb0\x86\xa5\x63\xad\x53\xff\x27\xb2\xdc\x75\x6d\x5c\xbb\xd6\x01\x1e\x5c\x31\xe7\x36\xc8\xf6\x5a\xb9\xbc\x2e\xa3\xf1\x85\x83\x99\xcf\xa1\x87\x3d\xb0\x90\x06\xfb\x4c\xfe\xc4\xd0\x90\x50\x08\x94\x98\xc0\x04\x01\xcb\x58\xf7\x1e\x98\xcf\xc3\xd2\xdc\xeb\x38\xf8\x21\x00\xcd\xa0\x86\x75\x26\xf3\xb9\xa0\x44\xb1\x98\x04\xef\xc4\xce\xd6\x9f\xbb\x7a\x38\x0c\xc9\xe3\x64\x8f\x5e\x47\xd2\xa0\x5a\xb1\x34\x8e\x24\x55\xf4\x36\x3e\xa3\x7b\xd8\xfc\x9d\x8f\x7c\xb4\x75\xe6\x81\xf5\x6b\x1b\xc1\xf6\x67\x76\x3e\x7b\x34\x5f\xfc\x7f\xed\xc1\xba\xbf\xdd\xbb\xd6\x59\x9a\x03\x3c\xb0\xca\xd8\x75\xc0\xfa\x71\x93\xbd\x81\xe1\x6c\x42\x09\xea\x6d\x7c\xc6\xef\x5f\x5b\x1f\x6c\x6f\x5e\x4b\x1e\xe8\xb7\xaf\x6d\x5c\xeb\x0c\xb6\xaf\x25\x0f\x80\x6d\xff\x9a\xef\x5f\x8b\x8e\x1e\x5a\x80\x6b\x60\xae\x21\x90\xcf\x64\xbe\x97\x12\x3f\x26\x13\x7d\xbf\x7f\xf0\xc7\x83\x79\x1f\x5d\x18\x08\xa0\xcf\xaf\x0e\xb6\xfb\x22\xd7\x5c\x5e\xa2\x11\x23\x23\xb3\xf5\x7f\xe7\x81\x6b\xd1\x60\x1d\x80\x07\x3e\xb2\x01\x53\x16\xf7\x36\xfc\xed\x9e\xdf\x3f\xdf\xfe\x93\xb0\xfd\xec\x60\x1d\xf4\x04\x32\x1b\x47\x5d\xf8\xd0\x02\x88\x2e\x9c\x6f\xff\x89\xe8\x85\x06\xdb\x02\x7e\xc0\xbf\xd6\xe9\x5f\xdb\x17\x23\xb4\xee\xf7\xaf\xed\x77\xe0\x27\xb6\x3f\x13\x7c\xb4\x15\x4e\x67\x5b\xbd\x6b\x1b\xff\xdf\xfa\xef\xb4\x8f\x16\x83\x07\xfa\xd7\xf6\xb3\x74\x9b\x0c\xb6\xb7\x37\x16\xe5\xb7\x3c\x1d\xa6\x8a\xc9\xa9\xe4\xb4\xa2\xe4\x14\xac\x22\x39\x39\xe3\x79\x9b\x92\x53\xf3\xae\xc8\x4e\x60\x3e\x4f\xcf\xa1\xf9\x1c\x9d\xab\x11\x9d\x0a\x88\x9e\x8a\x4e\x1f\x50\xd1\xa9\xf6\x05\xfb\xe5\xd6\xce\x3b\x5f\xa9\x1a\x07\x54\x12\x15\x58\xb5\x8e\xe8\xe0\xec\xad\x23\xf7\xb1\x9c\xd2\x75\x5c\x1c\x28\x22\x23\xe7\x36\xb7\x89\xba\x8a\x4b\x83\xcd\x2d\x7a\x96\xc8\x07\x73\x70\x9f\xe6\xaf\xe2\x52\xe7\x60\x3c\x77\x23\x17\x1f\x33\x78\xfa\x68\xe5\x7d\xcb\xfa\xca\x87\x25\x05\xbb\xaa\x91\xa4\x0a\xac\x0e\x0a\x5c\x1e\x46\x7c\x1f\x21\x72\x51\x6b\xf7\xd0\xc3\x89\x92\xc7\xc4\xff\xe1\x81\x12\xc6\x88\x15\xc6\x90\x5d\x7f\x82\xd1\xcd\xe7\x18\x86\xe6\xab\xb2\xee\x26\x01\xe9\x94\xaa\x85\x69\x40\x3a\x38\x81\x71\x40\x84\x18\x07\x87\xe2\x6f\x78\x90\xa9\x80\x5a\x90\xcb\x18\x6a\x53\x88\x6f\x45\x5e\x64\x05\x11\x66\x58\x66\x3d\x3f\x56\x0f\x15\x55\x1e\x91\x95\x8d\x28\x82\x59\xa6\xcd\x20\x18\x2d\xb1\xd2\x6a\xe1\xd4\xb6\x9e\x38\xe7\x4e\xb2\x12\xa1\x8a\x96\x6d\x33\xfe\xe8\x6c\x3c\x9f\x8f\xce\x0d\x6b\xb6\x82\x5d\x35\x50\x8e\xd1\xb8\x54\x69\x7c\xae\x06\x2f\x4e\xe9\x95\x09\x65\xbc\xae\xb0\xb4\x0d\x9d\xad\x2f\xfc\x04\x25\xe3\x13\x9d\xae\x68\x1b\x50\x72\x1f\x4e\x51\x8f\x76\xa4\x38\xdb\xdb\xb8\x76\xe4\x5f\xdb\x5f\x07\xd7\x16\x1b\x63\xa8\x3f\x3e\x8a\x92\x21\xc3\x32\x7a\x54\xcf\xbb\x3a\xc1\x49\x63\x84\x91\xd0\x23\xc6\xc8\xfd\xf6\x18\x65\x2b\xbc\x6a\xbb\xea\x95\xf7\xb5\x62\x9c\x5a\xd1\x8f\x28\x6b\x4d\x08\xd9\xd9\x37\x19\x05\xc1\x2b\xe3\xeb\x81\x85\xc0\x52\xaf\x8b\x1c\x86\x77\x7e\x2b\x3f\xf7\x74\xad\xd2\x96\x75\x43\x7e\x01\x33\xa4\x9e\x10\xc9\xe5\xb9\x9b\x98\x40\x16\x20\x8d\x4d\x7e\x85\x33\xa1\xaa\xe9\x58\xf0\x56\x55\x63\x72\x43\x0e\x8a\xa3\x67\x16\x3c\x00\x90\x59\x35\xab\x98\x49\x91\x89\x07\x72\x7c\x96\x95\xa3\x0a\xcb\x67\xa2\xd5\x63\x39\xc3\x21\x9a\x71\x14\xf5\xbc\x23\x67\xfa\x16\xea\x39\x82\x5d\xd4\x30\xdf\x3d\x28\xcf\x05\x6a\xb3\x89\x8f\x8d\x23\xf9\x67\xe1\x41\x75\x3a\x52\x97\x59\x7d\x6d\x1c\xa9\xbf\x22\xbb\x60\x96\xc5\xdc\xc3\x90\x9c\x51\xd9\x15\x7f\xce\x0e\xac\x6b\x91\x68\xb8\x87\xda\xee\xa9\x69\xb1\x44\x44\x51\x22\x6a\x97\x4a\x5f\xe3\x88\x92\x85\x07\x65\xe8\xb1\xda\x9a\x95\x14\xa2\x8f\x96\xa4\xfa\x76\x4c\x56\x99\xa9\x11\x46\x91\x50\xfb\x44\x99\x19\x3f\xac\xed\xa2\xbe\x82\x20\xbd\xbf\xae\xd2\xba\xaa\xe5\x67\x21\x01\x1d\xe1\x64\xa1\x02\xf1\xd7\x66\xdd\x93\x5c\xd4\xd8\xfa\x8a\xd9\xa4\x49\x3e\x41\x6c\x4f\x4c\xec\x58\x86\x98\x63\x57\x27\x61\x6d\x75\x3a\x4b\x83\x4f\x42\xd2\x38\x1a\xf3\x45\xae\xd4\x25\x76\x61\x39\xe2\xb9\xe2\x94\x39\x1d\x19\x73\x31\xff\x56\xb0\xae\xc0\x93\x50\xde\x90\xdf\x23\x14\x09\x19\x99\x4f\x50\x23\xc6\x09\x17\xa5\xe4\x48\x57\x94\xb1\x9b\x63\x8c\x92\x64\x59\xbf\xc4\x77\xdd\xa9\x58\x74\xca\xe4\x3f\xb6\x47\x59\xc1\x5c\x77\x62\xd9\x1d\x42\xf9\x79\xf2\x38\xe1\x68\xbc\x64\xc1\x90\x06\x56\x39\x54\x7e\xe5\x55\x58\x4f\x54\xda\xa0\x03\x69\x54\xbb\x54\x69\x14\x79\xd0\x9e\xa7\xd5\xe6\x92\x28\xeb\xf5\x6a\x73\x2f\x54\xc9\x87\x97\xae\x5b\x55\xd4\xac\xde\x2c\xbf\x28\xcc\x27\xcb\x29\x48\x66\xd0\x43\x2d\xb7\xb8\x85\xa7\x6d\x0e\xc7\xac\x23\x99\xc9\x76\x7f\x46\x13\xcc\xf1\x5e\x6d\x29\xf3\xdd\x83\xd3\x34\xe6\x78\x16\xa3\x4b\xa3\xfa\x16\x4c\x9e\x06\x1d\x35\x8e\xb2\x02\x02\x35\xb1\x3c\x08\xaf\xe5\x60\x8a\x25\x19\x0f\x98\xda\x75\x9d\xe7\x48\x5a\xc8\xa8\x20\x58\x4e\x69\x23\xa6\x64\xdc\xf0\xa7\xe1\x01\x9e\xa6\x53\x91\x78\x34\x0d\x0f\x16\x8d\xe1\x24\x64\xe1\x90\x23\x96\x00\x59\x83\x94\x71\x6a\xaa\x48\xc4\xb7\x86\x3f\xc5\x24\xab\x03\x93\x42\x1d\x5a\xc6\xaa\x67\xce\xf2\xb3\x2e\x19\x92\xa8\x84\x87\x27\xcd\x32\xc7\x4c\x5b\xca\x62\x0f\x16\x0e\xf4\xeb\xca\xe8\x55\xad\xf6\x5f\x39\x17\x0a\x5c\xe8\x1a\x94\xb0\x59\xd5\xe7\x09\x6a\xc8\x1c\x0d\xb5\x23\x37\x7c\x15\xfb\x41\x54\x2a\x78\x64\xae\xe3\xcb\x85\x39\x43\x60\x77\x5f\xad\x29\x04\x12\x28\xdb\xbe\x7d\x26\x24\x90\x30\xc0\xe6\xe0\x19\xcb\xd7\x8d\x50\xab\x15\x36\x83\x80\x6e\x17\x55\x43\xc5\x99\x3c\x88\x21\x03\x3d\x2f\xe6\x26\xf3\xb9\x72\x5e\xc3\xcf\xb2\xcc\xc8\xe6\xae\xcd\x6c\x99\x9f\x29\x35\xb6\x4d\x9c\x2d\x37\xe1\xec\x03\x59\x7e\xdb\xca\xd9\x65\xf9\x4b\x0d\xd9\xd5\x6b\x4a\x77\x8b\xa5\xb3\xf5\xad\x4a\x08\x9e\xa7\x33\x7f\xf4\xc1\x20\x28\xe5\x97\x3c\x51\x65\x95\x5b\xa2\xcd\xdb\x2c\xe7\x55\x7b\xa6\xcc\xdc\xf4\xbd\x8c\x1d\xe8\x42\x4d\xe2\x87\x1b\x14\x80\x92\x2a\xe6\xe4\x94\xa5\xb3\xd0\x11\x24\x73\x10\x35\x16\xf9\xec\xc9\x1f\xe7\x59\x1f\x04\x5a\x2d\xe7\xc1\x55\x69\x9c\x42\x77\xf2\xf4\x52\xd5\x59\x8b\xf6\x5b\x97\xa4\xe6\x46\xa7\xc2\x00\x26\xb5\x07\x31\x39\x05\xb9\xa4\x39\xab\xd8\x99\xf2\x80\x46\x6d\x65\x03\x75\x6a\xef\x68\xc0\xb1\xf9\x29\xd5\xe5\x61\xa6\x2e\xc7\xf3\x79\x0c\x47\xe6\xab\xaa\x09\x46\x41\xd2\xd1\x75\x09\x05\x6e\x98\xe9\xb4\x05\x8d\x58\x9a\x18\xd3\x63\x4c\x90\x35\x1f\x0b\xd3\x97\xed\xbe\xda\xaa\x5f\xf9\x40\x5a\xab\xd5\xac\x51\x1d\xab\xca\x37\x5d\xed\xa1\x9e\x00\xf4\x13\x4f\x08\x2c\x7c\x7a\x02\xec\x22\x49\x8c\xcb\x4a\x18\xe9\x43\x97\x31\x76\xa3\x49\xd0\xdd\x9a\x9c\x35\x56\xd5\xad\x89\x79\x02\x79\x16\x30\x3f\xec\x4f\x06\x10\x43\x9a\xf7\xc2\xb5\x5a\xc9\xcc\x98\x24\x67\x8b\xd5\xb4\x63\xb5\x83\x0e\xef\xd0\xff\xb0\x94\x33\x25\xfb\x2c\x9c\xb5\x67\x8c\x1e\x1c\xde\x27\x47\x97\xb2\x31\xbd\x60\x38\xcf\xba\xea\xe1\x31\xa1\x0c\x59\xe3\x39\x0d\x70\xc7\x7c\x15\x1c\xbe\xe3\x7c\x87\x49\xc1\x9d\x09\x89\xc5\x13\x6e\x1b\xaa\x7d\x4a\x89\x20\x7e\x02\x7a\xcd\x3c\x25\x27\x99\xbf\x2f\x6d\xb5\x9a\x69\x8d\x2d\x45\xad\x5a\x63\x52\x97\xbe\xbd\xb4\xd5\xaa\xc9\xad\x05\x1e\x9d\x7f\xb5\x29\x56\x33\x82\x13\x31\x1b\x53\x7c\x5f\x22\x92\x95\xd7\x55\xd3\x6f\xa2\xf9\x5c\x46\xaf\xf1\xf8\x04\x11\x0f\x80\x45\x2e\x62\x99\x3d\x8e\x5b\xa1\x2f\x39\xea\xba\x83\x5b\x38\x1a\x29\x1f\xb9\xbe\x48\x0a\x1d\xd5\xf9\xa7\x44\x0b\xf3\x79\xc5\x77\x69\xc6\x95\x9f\x6f\x2f\x58\x50\x71\xa4\x1a\xc8\xcf\x0c\x00\xdc\x67\x60\x1b\xf9\x05\x3f\x72\x15\x22\x0b\x80\x1e\x5b\xc8\xeb\xc3\xb2\xf5\xaa\xd0\x4c\x2b\xac\xdb\xfb\x48\x01\x62\xc1\x67\x71\x99\x8e\x04\xa3\xea\x21\xa8\x0a\x71\x38\x54\x2f\xec\xf7\x18\xd4\x76\xba\x1e\xc9\x7b\x44\xe1\xbd\xc3\xf6\x90\x46\x68\x8a\x05\xe6\x6e\xe4\xaa\xfc\x97\xdb\xa3\x83\xaa\xd3\x9f\x42\xf8\x04\x9d\x6e\xce\xb8\xb6\xf8\xd9\x2c\xa0\xc2\xfa\x3a\x60\x7d\x3e\x08\x50\x9f\x67\x86\x7a\x73\x60\x92\x7b\x16\xf3\x4e\x68\xa4\xee\xdd\x40\x1e\x8e\x55\x9c\x2f\x31\x82\x21\x43\xa1\x07\xc5\x78\x5c\x94\xe3\x61\x1c\x1f\x89\x6c\x56\xbf\x45\xe5\x83\xbb\xf1\xba\xd0\x4e\xd6\x8a\x13\x8a\x36\x4b\xf4\x80\xec\xf5\x55\x74\xc0\xcf\x33\xe4\xbe\x3e\xe0\x3c\x0f\x06\x4b\xa9\x36\xa8\x76\x82\x78\x3a\x7b\xc4\x56\x27\x83\xa9\x7e\x32\x24\x51\x2c\x5f\x0c\x57\x51\x99\x61\x16\x07\xda\x04\xb7\x7f\x46\x8c\x9d\x8a\x4d\x1f\xa9\x18\xab\xea\xe1\x23\xfd\xf0\xde\xc9\xfb\xa9\xa2\xc0\x67\x88\xe8\xd8\xff\x7e\xcd\x67\xd9\xbe\x0f\x16\x10\x27\xcf\xe0\x04\xef\xc6\xe8\x51\x1c\xe9\xa7\x1a\xd5\x64\xd0\x5d\x69\xcc\x61\xbe\x67\xb3\xe4\x9f\x56\x51\x88\xed\x87\xe6\x6b\xee\x55\xa5\xac\x8c\x3d\x26\x2d\xc7\xf6\x67\x3a\xac\x7f\x36\x3c\x2a\xd2\xae\x2c\x8a\x63\xcc\x0f\xe5\x0d\xa4\xfa\x31\x2b\x3c\x5c\x97\xb5\x43\x45\xfd\xce\xa8\x23\x12\x95\x4b\x2b\xe7\x4a\x3d\x12\x50\x3e\xdd\x0a\x97\x4c\x67\x4d\xd4\xde\x62\x74\x5e\xc8\x74\x68\x5e\x87\xf2\x3a\x7a\xd3\x57\xd8\x08\xb1\xd3\x2b\xbf\x10\xa5\xc7\xa1\x3c\xc4\x6e\x3d\xa3\x91\xac\x48\xda\x59\xab\x7b\xe5\xd2\x8e\x61\x0e\x65\xab\x7c\xc6\x2b\x00\x24\x41\x77\x8b\x9c\x45\x5b\x44\x72\x08\xe2\x1e\xe9\x91\xc1\x9a\x1d\x40\x55\xbd\x4b\x83\x7d\x6f\xcf\x69\xde\xb3\xd1\x68\xe5\x9b\xb8\xc0\xc4\x4d\xce\x66\xb3\x3a\x8a\x74\x89\x60\xd6\x2a\x28\x0b\xd9\xc7\x08\xb2\xe4\x00\x41\xfb\x1a\x97\x33\x46\x0c\x8d\x18\x4a\x26\x32\xc2\x7d\xf5\xaa\x28\x90\x4d\xa9\x86\x31\xe2\x2a\xa3\x8f\x80\xfb\x5a\x91\x93\x25\xc9\xb2\x48\xba\xa9\x59\x7e\xcb\x7a\x4c\x55\x16\x0f\xac\xa1\x56\x2b\x1f\xec\xb7\x22\xd6\xae\xc1\xb3\xba\x21\x9f\x43\x19\x12\x47\x47\xfe\xae\x40\x48\x12\xca\x32\x74\xe4\x54\x0a\x64\xcc\x3a\x2e\x8c\x88\x5e\x27\xd5\x63\xa1\x3e\xa2\xf9\xdc\xf3\xee\xfc\xf5\xb3\x12\xe3\xee\x70\x6a\xf9\xb3\xcb\x8b\x73\x5c\x3c\x25\x4c\x3e\x9b\x97\x85\x01\xaf\xe6\xe5\x62\xb7\x8e\x11\x47\x8d\x62\x2b\x8b\x05\x58\xb2\x97\xeb\x4d\x29\xd9\x10\x69\xed\xf2\x36\x0e\x3d\x67\x7b\x3f\xc9\x65\xcf\x0f\xd0\xae\x7e\x45\x8d\x81\xdd\xd3\x6f\xf3\x35\xc1\x1d\x23\xa0\x26\xc6\x68\xa0\xde\xbd\x92\x2f\x4e\x83\x05\x74\xf7\xe3\x5e\xe5\xa1\x93\xac\xa6\x34\xdd\x28\xd3\x3e\xf2\x7b\x3a\x13\xac\xc0\x34\x5a\x3c\x12\x74\xab\xcc\x30\xeb\xa3\xc1\x02\x16\x5b\x58\xf6\x4e\xaa\x5b\x32\xe0\x90\x2f\x60\x82\xc7\x24\x8c\x7b\x79\xad\xcf\x4c\x2c\x2e\x73\x64\xaa\xe7\x19\x9f\x7b\x70\x1b\xb7\x1f\xec\x75\x01\x0c\x83\x07\xb7\xc2\xb3\x78\x2b\x5c\x5f\x07\xb4\x1f\xb6\x1f\x74\x79\x73\x38\x58\xcb\xfa\xab\x1a\x33\xa3\x6e\xdf\x0b\xee\x23\x48\xb2\x20\xe1\x32\xc0\xc0\x02\x96\x57\x4a\x6e\x40\x72\xcb\x23\x37\x20\xf9\x05\xa2\x1e\x27\x6e\xef\x62\xd2\x9e\x85\xc3\xeb\x88\x6d\xec\xe2\x82\xff\x5a\x39\x0b\x22\x9c\x1d\x9e\x28\xce\xaa\xc4\x63\x1f\x47\x7c\x12\xf0\xf9\xbc\xab\xdf\x8c\x54\x0a\x46\x80\x16\x55\x37\xa7\x1b\x39\x9a\xac\xf0\x00\xba\x98\x26\xfc\xf1\xe9\x4c\xf3\xa6\x86\xb7\x8e\xc0\xe2\x4e\x96\x07\x87\x48\x39\xb4\xc9\xfa\x83\xe2\xf6\x62\x30\xb8\x6c\xb3\xf8\xde\x53\x26\x48\xae\x35\x59\xef\x63\x3e\xc1\xa4\xd7\xe8\x77\xa5\x89\xdc\x5b\x47\xeb\x1e\x68\xec\xa6\xbc\xb1\x1f\x26\x02\x49\xb1\xcf\xb8\x4f\xe7\xab\x67\xde\xcf\x17\xa3\x88\xd8\x7b\xf3\x7c\x90\xcf\xaf\x0c\x9d\x94\x04\xcc\x18\x3d\x29\xf1\x40\x2e\xcb\x28\x4e\x93\x89\xf8\x2e\x81\xc2\xc7\x09\x92\xaf\xe3\x30\xdf\x53\x50\xe1\x33\x4e\xfe\x90\xe1\x28\x90\x02\xa3\x80\x0a\x9f\x15\x95\x07\xce\xd4\xb8\xeb\x47\x4f\xa8\xce\x95\xc7\x7b\x1a\x1e\xe8\x98\xcb\x97\x46\xa3\x04\x15\xfb\xeb\xbc\xa3\xa8\xf0\xf2\xb3\xa8\xf5\xd2\x02\x3a\x0d\x0f\x7c\xd6\xe6\xb0\x5b\x18\xbf\x3d\x25\x46\x5c\xe1\x21\xe3\x98\x8c\x1f\x27\x11\x3a\x10\xe8\x57\xa5\x17\x3a\xa3\x0c\x6f\x5a\x0e\xf9\x94\x9c\x38\x51\xb2\x22\xb9\x72\x0c\xcf\x73\xd5\x58\x1d\x1f\xd2\xa3\xd1\x47\x03\x5d\x20\x8f\xb8\x5c\x0d\x27\xa8\x43\xe6\x5f\x2c\x5f\xbb\x6a\x61\xbe\x17\xba\xb6\x33\x73\x01\x82\xee\x72\x57\x3f\x2c\xd9\x1e\x1d\xf4\x18\x3c\x2c\xea\xdc\xe5\xae\x8c\xf0\x01\x8a\xda\x63\x41\x82\xc7\x70\x23\xc1\xb0\x4e\x70\xd2\x22\xa5\x7e\xc5\x17\xb5\x40\xf1\x29\x17\x51\x93\xf8\x49\xbd\x4e\xa0\xb3\x1f\x7e\x64\x48\x89\x72\x31\x94\xc6\xf8\x3b\x61\x36\x0c\xb2\x8c\x16\x0a\x3b\x68\xb6\x21\xd8\x1c\xc0\xcd\x5e\x81\x4d\xf6\xf4\x40\x2e\xa3\xe2\x04\xce\x6a\x5d\xe4\x3e\xeb\xc5\x5e\x26\x3e\xdf\x3d\x74\xd8\xc8\x66\x53\x93\xab\xdf\x05\x60\x3e\xdf\x04\xe7\x36\xf3\xf5\x55\xae\xc5\xa2\xc2\x85\x02\xb5\x9e\xb1\x4c\x11\x55\x17\x59\x83\x54\xbf\x80\xbe\x23\xe7\x60\xc2\x6b\x31\xc9\x71\x8a\x1c\xda\xb9\xa5\x2a\x72\x3f\x40\xf2\x38\x57\x31\x81\x32\x79\xab\xdd\x5e\xd6\x58\xd5\x49\xdd\x37\x48\x57\x43\x17\x86\xaa\x2a\xc5\x27\x7d\xfb\x8a\x67\x11\x59\x98\xaa\xfa\x86\x08\xc7\x3e\xdb\x48\xc0\x03\x74\x8d\xb4\x5a\x7e\xba\x1e\x50\x35\x3e\x71\x10\xb6\x71\x89\x4f\xda\x01\x4e\x61\x0c\x24\xc7\x64\xc7\x32\x9e\x82\x24\xe4\x2e\x8d\x7c\xf1\x1a\xe6\x57\x5d\xfe\x93\x9a\xf1\xb1\xaa\x1d\xac\x76\x07\x30\xe3\xb2\xe5\x77\x83\x20\x60\xf3\x39\x3a\xc7\x40\xab\x95\x6d\xce\xf2\x64\x74\x35\x02\x41\x2e\x81\x1c\x1d\xf4\xd0\x47\xc9\x03\x55\xb9\xe6\x5d\x78\xd8\xcb\xd1\x0f\x01\x0f\x54\xcc\x8a\x10\x32\x2a\xc6\x23\xb7\x88\xe4\x1b\xc1\x85\x8b\x36\x08\x54\x0a\x31\xaa\x74\x23\x42\x33\x44\xa2\xa4\x41\xf5\x89\x37\x66\x09\x6f\x18\x29\xb1\x41\x47\x8d\x3d\x43\xa0\x11\x9f\xf8\xaa\x6e\xe0\x99\x20\xa2\xb9\x41\x5b\xc3\x23\x39\x6c\x36\x3c\x8a\x79\x9d\x24\x4f\x1e\xcb\x16\x37\xdc\xcc\xae\xd4\xb0\x80\x9d\xeb\x6e\xb3\xde\x26\xcc\x48\x91\x6f\xb0\xca\xb1\xe9\x82\x63\x98\x7a\x32\x41\xf1\xa8\x2d\x7b\xb7\x0a\x57\x5f\x51\xf6\xac\x38\xe0\x71\x4f\x5a\x33\xeb\x40\x05\x13\x87\xdc\xe8\x33\x86\x2c\x2f\x10\xce\x30\x4a\x82\xfe\x6d\xc5\x29\x32\xfc\x9d\x40\x72\x32\xfe\x4e\x56\xe5\xef\x64\x39\x03\x57\x4f\xa3\xa3\x56\xcb\x9a\x00\xe4\xe4\x1a\xcb\x8b\xdc\x11\xc4\x14\x3b\x5b\xb4\xe3\x40\x5e\xa0\x25\xc8\x82\xee\x16\x3b\xcb\x4d\xc8\x27\xbd\xb6\xc5\x14\x9c\xe7\x3e\x03\x76\x2d\x77\x0e\xce\x75\xb3\x23\x56\x13\x32\x6b\x91\x43\xb6\x62\xa1\xdc\x1e\xb2\xab\x11\xbd\x0d\x60\x05\x49\xd0\x85\x38\xe8\x42\x1a\xf0\xf6\xe6\x16\x3d\x17\x74\x5b\xad\xa6\x8f\xcf\xf9\x9a\xdd\xd8\x0e\x51\xe0\xf4\xe8\x10\x6c\xd1\x76\x1b\x90\xb3\x4c\x63\xde\x6a\xf9\x24\x30\x3f\xd4\xe5\xbb\x2c\xb3\x7d\x61\x69\x9d\xe4\x7b\x5d\xd8\x82\xf3\x4f\x6f\x15\x89\x6e\xcd\xc8\xce\xe7\xa4\xa9\xcc\x88\xdb\x08\xe4\xeb\x5c\x6d\xcf\xe2\x2b\x8f\x29\x57\x63\x7a\xfc\x06\x97\x73\x9d\xdd\xa9\x40\xc3\xc7\xb2\xed\x3c\xba\x66\x7c\x4b\xa3\x40\xcc\xbb\xd6\x96\xde\xa8\x83\xf1\x1a\x3a\x17\xe0\x56\x4b\x9e\x47\x66\xac\x1f\xf8\xd8\xf0\xfe\x10\x26\x30\x85\x31\x1c\x56\x0f\xa6\x51\xc9\x47\x41\x17\x46\x81\x3c\xf8\x47\x67\x87\x20\xd7\x85\x42\x91\x3e\x1a\x48\xba\x11\xa4\x34\xdc\xf6\xc3\xa0\x0b\x93\xa0\x0b\x7a\x7e\x18\x0c\xdb\x9b\x30\x0a\x7c\x52\xdd\x56\x3f\x1c\xb8\x8b\x61\x9d\xa8\x2e\xc0\x51\x40\x34\xc1\x48\x97\xff\x8c\x5e\x60\xb8\xbe\x0e\x60\x1c\x84\x5b\xf1\x59\xb4\xbe\xb9\x15\x9b\x23\xf7\x49\x95\x28\x10\x03\x38\x0b\xca\x9c\x3a\x06\x42\x1c\x98\xad\x47\xe7\xe8\xb6\x9f\xaf\x7f\xdd\xb6\x9b\xaa\xee\xc3\x51\x30\x01\xbd\x34\x88\xe0\xe4\x9c\x0a\x7d\x32\xb1\x2f\x8e\x97\x7a\x13\x0f\xe4\x23\x6e\xf6\x0c\xda\x1f\xc1\x19\x4c\x61\x02\x60\x14\xa4\xeb\xe6\xa4\xbf\x51\x20\xf5\x2a\x82\x28\x89\x7f\x7a\xde\x21\x85\x6a\x74\xf3\xf3\x2f\x90\x8d\x83\xee\x5a\x1c\xa0\x73\xdd\x56\x0b\x9d\x4d\xb6\xf3\x4b\x14\xb9\x2b\xb4\x97\xad\xf2\x61\x80\xb6\x86\x67\x93\xad\xa1\x62\x54\x69\x10\x04\x3e\xce\xa6\xcb\x14\x1f\x3a\x2b\x1c\x74\x0e\xe7\x73\x3f\x0d\x70\xe7\xb0\x1d\x43\xd6\x6a\x35\x55\x1c\x47\x33\x72\x00\xc0\xf4\x2c\x07\xe1\xfa\xfa\x1a\x8a\x13\x24\x03\x5a\x30\xb0\xcb\x50\x78\x7d\x8d\x05\xcd\x4d\xc8\xd7\xb3\x3d\x95\x42\x5b\x6c\x7d\x53\x4c\xae\x19\xa3\x30\x3f\x46\x55\xc2\x4f\x16\xa6\x32\xc7\xd2\xcc\x71\x7c\x10\x04\x44\x88\x40\xf2\x65\x99\xe2\x62\x20\x50\xe8\x06\x2b\xaf\x74\x66\x76\xbb\x8a\xf1\xcc\x23\xba\x92\x2c\x2f\x97\x54\xd0\xcd\x98\xae\x62\xe8\xbc\xd5\x3a\x09\xf3\x81\x2b\xab\x04\xf6\x9e\x93\x61\x1c\xda\x56\x60\x19\x87\x25\xa4\x30\xa0\x30\x09\xf0\xd6\x96\x1a\xdb\x34\x48\x36\x42\xc1\x01\x88\x20\x8c\x30\x6b\x2f\x27\x0b\xa5\x00\xd2\xf6\x66\x16\xb7\x26\xd4\x32\x76\x7e\xc8\x42\x00\x87\x41\x6c\x87\x4d\xd5\x1a\x42\x3f\x09\x86\x9d\xc3\xf5\xd8\x90\xc1\x39\x1d\x44\x71\x2b\x39\x27\x0f\x3e\x44\x9e\xf6\x66\x33\x68\xb7\x43\xb0\x05\x92\xc0\x1f\x06\x7e\xb9\xea\x1c\x79\xda\xca\xec\xfd\xe6\x85\x7c\xd8\x36\x08\x12\x53\xf7\xd9\x00\x6d\x09\x12\x85\xb7\x57\x61\x68\x2e\xdb\xb5\x37\x73\xa2\x1b\xa7\x0c\xe3\x8d\x30\x0a\x67\x5c\x3e\xe0\x33\x9b\xc5\x78\x58\x8a\xcd\x76\x0f\xe2\xe1\xbb\xbe\x10\xd6\x44\x4d\x67\x28\x77\x22\xe6\xdc\xf6\x56\xf9\x2f\x5f\x79\xe6\xa9\xce\x53\xca\xd9\xc4\xf7\x2b\x0d\x87\x5a\xde\xbe\x3a\x41\x8d\xab\xa2\x73\x0d\xdd\x39\x65\xb9\xc3\xc6\x8e\xd8\xf8\xac\x68\xec\xb3\x8d\x11\x65\x8d\xb0\x91\xa8\x9b\xd9\x0d\x4e\xa5\xab\xf2\x0c\x11\x14\x79\xea\xdc\x6e\x84\xf8\x70\x72\xdf\x90\x92\xad\x55\x63\x25\x3f\x59\xb4\x86\x31\x4d\xd0\x7d\x43\x4b\xb6\x56\x8d\x96\xfc\xa4\xb1\xaa\x7f\xd9\x4b\xd1\xd9\x2e\xa5\x3c\xe1\x2c\x9c\x6d\x30\x9a\x72\xe9\x39\xe8\x2a\x07\x2a\x93\xfe\xe4\xd2\x62\x5b\xa4\xa1\xf6\x14\x1f\x48\x65\xa1\x90\x2f\xe5\x13\x44\xb8\xc8\x8a\xa2\xca\x9c\x31\xde\xdd\x18\x52\xc2\x43\x4c\x10\x6b\x4b\xc7\x95\xb2\x62\x21\x24\xa9\x7b\xe3\x3b\x46\x45\x21\x89\x57\x2f\xb7\xbe\x32\xef\xab\xb5\xec\xa0\xa1\xbb\x85\xcf\x12\x73\x5e\x84\x8d\xb0\x10\x06\xa4\x8f\x07\x6b\x4e\x4d\xde\x7a\xe8\xb8\x8e\x2d\x16\x5a\xb0\x13\x7c\x39\x53\x8a\xa8\x8a\xd2\xa4\xeb\x50\xfe\x66\xa4\x13\x53\x7a\x3d\x9d\x01\x75\xe7\x36\xd9\x4e\x3a\x0c\x09\x8a\xf7\xa9\x94\x7f\x9c\x2c\x8f\x85\x42\x25\x39\x04\x59\xab\xbb\x61\x82\x87\x1e\x80\x78\x3e\xf7\x71\x10\x9a\x85\x9b\x21\x22\xc3\x7b\x11\x7b\xda\x23\x1b\x81\x18\x80\x0a\xa6\x93\x11\x83\x26\xa8\x2a\x62\xb0\x07\x79\xf2\x67\xdb\xe4\xbc\xaf\xf7\x48\x3d\x8d\x44\xcf\x5b\x67\x6b\xc8\xf6\xcd\x27\xce\x0c\x42\xa4\xfd\x61\x7c\xa2\x51\xf7\xa0\x2d\xa7\x7e\x3b\x79\xd4\x68\x7a\x92\xe8\x9c\x54\x41\xa3\x8c\xc6\xb1\x7c\xd4\x59\xbe\x8c\xbb\x64\xd0\x74\x23\xe5\x21\x9b\x31\xba\x87\x23\x19\x19\x1d\x93\xeb\x28\x6a\x63\xd2\xa6\x62\x91\x3c\x58\x91\x65\x4c\xe9\x38\x46\x2b\x7e\x6f\xef\xa2\x90\xc9\xe0\x83\xab\x64\x6b\xef\x55\x55\x38\x0a\x87\x68\x97\xd2\xeb\xed\x21\x25\x04\x0d\xf9\xb2\x2c\x05\xac\xaa\x77\xa9\x52\x71\xbe\x8f\x39\x47\x4c\x95\xde\xac\x42\x16\xf3\x49\xba\x5b\xdf\xe7\xf0\xd9\x94\xa1\x76\x18\xd5\xe7\x10\x84\x36\x43\x4b\xba\x80\xa2\x29\x8d\x68\x29\x43\x9e\x9a\xcb\xc9\x33\x3a\x4b\x67\xe5\x64\x3c\x62\xe1\xb4\x22\xf6\x26\xd4\xf2\xb5\x51\x8f\xe0\x08\x46\x70\x02\x67\x70\x7a\x6f\xfc\x2d\x1d\xda\x2f\xd0\x36\x9c\xb8\x2b\x21\xcb\xa5\x56\xad\x19\x97\x5e\x99\x20\xf9\x4a\xe5\x0a\x54\xca\x4e\x5e\xc8\x92\x2e\xb9\xed\xb2\x92\x9e\xf1\x4a\xc5\xcb\x44\x4e\x4f\x56\xce\xf4\x34\x5c\xa9\x98\xa6\x78\x0f\xa6\xab\x75\x2e\x4f\xff\xf1\x4a\x85\x4a\x8b\x62\xb8\x52\xb1\xe2\x4a\x19\xad\x54\xaa\xb8\x7c\xa2\x65\xa5\x34\x5b\xc8\xef\xad\xc9\xb2\x12\x86\x76\xf5\xba\x82\xd3\x55\x32\xeb\xb5\x39\x73\xf6\xdc\x12\x77\x1e\xd2\xe9\x2c\xe4\x1b\x63\xc4\x95\x1c\xc2\xda\x36\x22\xc5\x7b\xe1\x19\xdd\xd0\x4f\xf0\x2b\x5c\x3c\x30\x9f\x23\xbd\xb3\x9b\xb4\xde\x34\xc4\xc4\x5b\xad\x2b\x31\xde\x7d\xaf\x7a\xb1\xa3\x50\xb8\x88\x87\x8c\xc6\x78\x57\xf4\x43\xa5\xd4\x20\xae\xdd\x78\xd5\x04\xaa\x59\x6e\xcb\xfb\xd2\x13\x1a\x47\xab\x3f\x22\x7b\x0f\x1c\x6b\x87\x71\x98\x24\x4f\x86\x53\x94\xf4\xfa\x5e\x2d\x7e\x83\xbc\xef\x86\xe9\x18\x19\xe1\x71\xca\xee\x87\x76\x76\x94\x7b\x60\x23\x3b\xf2\x59\xa0\x8e\x45\x63\x37\x46\xd5\xbe\x0c\xda\xeb\x9e\x4e\x67\x29\x47\x91\x5f\x76\x91\x94\x56\xef\xc0\x81\xe7\xf3\x65\xea\x89\xbe\xd2\x17\xc6\xfb\xe1\x61\xd2\x98\x84\x7b\xa8\xa1\x8a\x79\x60\xe1\x9b\xd3\x21\xcf\x6e\xbe\x1d\x6f\x3d\x73\x25\x23\x62\x81\x83\x75\xaf\xe3\xad\x23\x88\x03\xe6\xe7\xe2\x1f\xf9\x58\xdf\x8d\xb0\x97\x92\xa8\xb4\x75\xd8\x4b\xfd\xc6\xcc\xec\x19\xfc\x9c\xa8\xf4\xdb\xbc\x33\x0c\xe3\x58\x1a\x3c\x40\x8f\xaf\x95\x23\xa0\x1e\xcc\xd0\x90\xa3\xa8\x91\x9b\xb9\x86\x1c\x6c\xe5\x30\xa2\x55\x28\x35\x3b\x91\x54\xaf\x4c\x37\x1a\x02\xf3\xa8\x51\xee\x8b\x89\x3a\xd4\xa0\x52\x0f\xcc\x26\x24\x1f\x54\x86\x07\x48\xc7\x23\x7d\xc4\x6d\x3d\xf7\x8c\xc0\x51\xc5\xf2\x11\xba\x52\x98\x24\xf7\xfb\x6d\x00\x79\x76\x33\x9f\x0f\x29\x49\x68\x8c\x54\xd8\x55\x79\x04\x57\x89\x60\x51\x99\xbb\x77\x98\x4e\xc2\xe4\xb2\xdc\x10\xf4\xf0\x55\x3b\xef\xb4\x5a\xa5\x9c\xdb\xa5\x14\x9f\x83\x9e\xd9\x5e\xd8\xa1\x0c\x46\xcb\xe5\x04\x9a\x1d\xa7\x64\x75\x73\xab\x77\x76\xb7\xed\xdc\xaf\x6c\xc3\x12\x65\xdc\x16\x72\x1f\x44\x43\x39\xad\x6e\x49\x57\x72\xf9\xb6\x0b\xbf\x65\x37\x44\x2e\x86\x12\x1a\xef\xa1\x42\xa7\x2b\x52\x6d\x89\xfa\x3e\xec\xec\xd8\x29\xdd\xd9\xa9\x68\xaf\x63\x3f\x97\x3e\x66\x1d\x3b\xb6\x47\xb6\x2b\xb7\x89\x51\x35\x2a\x1a\x87\x31\xe2\x97\xf6\x49\x6e\x16\xcb\x61\x37\x64\x8e\xed\xfc\x4f\x1f\xe5\x6a\xad\x21\xf9\x98\x86\x42\x70\xc6\x1c\x87\x31\x7e\xf6\xbe\xec\x61\x6e\x9d\xfa\x96\x01\x79\x82\x86\x91\x8e\xed\xdc\x39\xef\x0a\x5c\x79\xdf\xe7\x8e\x83\xa9\x58\xc6\x95\x06\x00\xa7\x5b\x4a\x48\xfa\x40\xf5\x4f\xa1\xfc\xf8\x8a\xfd\x94\x91\xcc\xdb\xf2\x7d\xf8\xb6\xbe\x5a\x7a\xbf\x84\x90\x82\x8d\xb5\xd2\x0d\x58\x5e\xe3\xfa\x23\x74\xa8\x8f\x69\xae\xa3\xc3\x64\x01\x25\xce\xd5\x17\x14\x94\x73\x3b\x8b\xa1\x3e\xdf\xb4\xe5\x21\x0b\x8e\x16\xfa\x8e\x82\x39\xd6\x94\x57\x15\x8c\x67\x4d\x9f\xc8\x77\xb9\xb2\xf8\x9d\x78\xdd\x0b\xfc\xfe\x67\x5a\xbf\x33\x78\x00\x78\xa0\x83\x0e\xd0\xd0\x47\x60\x8d\xb6\x5a\x3e\xeb\xe3\x41\x40\xe5\xa3\x39\xd6\x57\xba\x4a\x32\x92\x03\x2c\xc4\xf3\x36\x8e\x84\xbc\x7e\x8f\x49\xc8\xb1\x71\x1e\xd9\xd6\x2a\xbc\x94\x8d\x56\x23\x30\xeb\x79\xeb\x68\x01\x23\x54\x9d\x1f\x8f\xfc\x26\x32\x87\x11\xd2\x84\x67\xe2\x80\xab\xa0\xa4\x1b\x9f\xf1\xdd\xba\x80\xdf\x79\x00\x6c\x64\x87\xb4\xdb\xbc\xff\xe0\xa0\x27\xca\x2d\x6a\xc8\xef\x76\x08\xaf\xea\x5a\x63\x03\xcd\xe7\xf2\x1e\x69\xde\x95\xb7\xfc\x5c\x8a\xba\xce\xdd\x19\x86\x53\x24\x7a\xeb\xb3\xbc\xdc\x65\xaf\x49\x13\xd5\x79\xee\x53\xd0\x6a\x71\xdf\xcd\xc1\x00\x28\x45\x95\x3f\xf3\x74\x82\x1a\xa6\xd2\xa8\xb1\x87\x98\x0c\xa8\xda\xa0\xa3\x46\xca\xe2\xc6\x2c\x64\xe1\x34\xe9\x34\xfc\x47\x71\x24\xe3\xc6\x8c\x30\x89\x1a\xde\x99\x75\xbc\x7e\xc6\x13\xa2\x95\x9c\x5a\xe9\xa5\x1b\xe1\xc8\x7e\x65\xeb\x67\xbc\xce\x19\x85\x90\x74\x0e\x28\x35\x7b\x11\x27\x09\x26\xe3\xac\x91\x9e\x2d\xd7\xf0\x9f\xa0\xf4\xba\x92\xde\x7a\x59\x1b\x5a\x7c\x53\x4d\x77\xce\x58\x0a\x16\xf5\x6f\x23\x32\xa4\x11\x7a\xfa\xf2\xe3\x56\x41\xf0\x29\xe8\x29\xa9\xf3\xce\x1d\xff\x57\x59\xf0\x74\xf7\x73\x6a\xe5\x1a\x79\x13\x9a\x25\x2d\x5d\x9d\x4d\x3c\x80\xf3\xbe\x76\xde\x57\xd1\xfb\xd5\xb7\x4e\x12\xcb\x0b\x7f\xa0\x93\x12\xfc\x79\x73\xc7\x43\x5d\x90\x09\xe3\xa7\xab\xab\x30\x9f\xd5\xb7\xed\x8a\x34\x53\x6d\xaf\x3f\x38\xa6\xe6\x8a\x0b\x37\x6a\x11\xe5\xfb\xe0\xc4\x1d\x3d\xd7\xde\x2c\xbf\x50\x70\xd9\xbc\x49\x30\x33\xde\xdd\x49\x63\x18\x12\x41\x37\x61\x9c\xe8\x93\x20\xd5\x74\xaf\x71\x46\x0a\xec\x67\x3c\xe7\xd2\x0e\xa7\x8a\xca\x6b\xee\xe9\x58\x3c\xcc\xe9\x7b\xa9\x1f\xe6\x70\x93\xee\x7e\xce\xae\x8e\xf3\x7e\x7f\x60\x57\x36\xaa\xee\xa9\x62\x0e\x4c\x39\x48\x50\x15\xb9\xb3\x8f\xa0\xbc\x51\x04\x20\xa9\x2f\x54\x23\xbf\x2a\x6f\xd9\x66\x17\x2c\x54\x95\xdc\x27\xa0\xd5\xca\x2a\x26\xaa\x62\xda\x99\x86\xb3\x7c\xa5\x16\x4f\xf5\xf4\x40\x20\x8f\x81\xf4\x8f\x96\xb4\x2b\xb8\x81\x74\x33\x7e\xc4\x42\x12\xd1\x69\x3b\x65\x71\x3b\x09\x47\xf7\xdb\x3a\x92\x39\x41\x79\xe7\x1f\x7e\xe4\xd1\x0b\x8f\xfd\xe1\x27\x1f\xff\x6f\x7f\xf4\xc4\xc5\x27\x2f\x3d\xf5\xdf\x2f\x5f\xb9\xfa\xf4\x33\x9f\xfa\xe3\x4f\xff\x49\xb8\x3b\x8c\xd0\x68\x3c\xc1\x9f\xbb\x1e\x4f\x09\x9d\x7d\x9e\x25\x3c\xdd\xdb\x3f\x38\x7c\xb6\xbb\xf9\xe0\x43\x1f\xfb\xdd\x8f\xff\xde\xef\xff\x81\x07\x59\xe0\x79\xf9\x2b\x79\xeb\x01\xef\x0c\x27\x21\x3b\xcf\xdd\x33\x67\x09\xaa\x5e\xfb\xe0\x01\xb3\x33\x3a\xde\x77\x35\x8c\xdb\xac\xbc\xb6\x61\x2c\xf7\x73\xa8\x8e\xd7\xe8\x51\x85\xba\xfe\xa8\x68\x12\xab\xf3\xa7\x51\xc6\x10\x95\xc2\xbb\x7b\xd8\x08\x1b\x49\xba\x2b\xed\x20\xee\xc3\x20\x1d\x6f\x89\xf4\x94\xf0\x90\xa3\xf6\x34\x1c\x4e\x30\xb9\x67\xc4\xa2\xf7\x5c\x75\x0b\x2b\xf3\x8f\x90\x5c\x09\x32\x37\x62\x4a\xce\xeb\x30\x7b\xb3\x43\x4b\xaf\x57\x04\xb2\x6b\x86\x1b\x49\xd4\x93\x00\x69\x00\x36\x9d\xd4\x32\x4b\x92\x65\x2f\xaa\x7e\x36\x08\x42\x51\xd2\x50\x59\x55\x98\xce\xac\x6c\xe0\x54\xd3\xe7\x03\xb7\xda\x8a\x47\xb3\xf4\xee\xa5\x11\x54\x55\x9a\x9b\x9b\xc3\x94\x31\x44\xb8\x6c\xf9\xc9\x70\x8a\xac\x7f\x7c\x92\xee\xda\x60\x4b\x49\x70\xa4\x63\x1c\xab\x33\x87\x00\xe9\xe7\xa6\xae\xb2\x90\x28\xaf\x83\x64\x3e\xef\x0f\x60\x18\x20\xf5\xdc\x54\xe1\x83\x3c\xe1\x54\xfe\x79\xd4\x9e\x6e\x9e\x23\x6a\xc9\x04\x54\x48\x85\xb2\xd5\x62\xad\x99\x89\x05\x32\xc8\x3a\x23\x02\x9c\x9a\xc2\x72\x4d\xa1\xad\xa9\x80\x45\xb9\xa2\x85\x3e\x31\xed\x5c\x79\xea\x89\xf3\x57\x03\xef\x01\xaf\x78\x70\x6a\x4e\x00\x95\x60\x50\x1e\x57\x1d\x65\xae\x91\xb5\xa2\xa6\x89\x81\xa3\x6a\x4e\xeb\xb3\x00\x41\xb1\x90\x32\x7f\xcf\x40\x11\xdc\x36\xeb\xb1\xed\x3e\x1b\xc8\xcd\x8f\xa1\x28\x1d\xba\x67\xf6\xee\x6d\x3a\xd4\x67\x83\x80\x43\xb4\x00\xf0\x48\x13\x2d\x5b\x28\x15\xdf\x78\x2f\x71\xb7\x85\x66\xa0\x49\xb7\x8c\x7f\x42\xa7\x88\x4f\x04\x65\xec\x23\xc2\x55\x20\x2d\x0f\xac\x91\x80\x67\x8e\x5f\x76\x48\xc2\xec\xcc\xc9\x04\x14\x92\x0f\x7f\xca\xe8\xdb\xac\xd5\x22\xad\x16\x05\xe6\xb4\xda\x0e\x0d\xb7\x43\xa3\xa8\xae\xd7\xf0\xd6\x7d\x2a\x36\x97\x22\xdd\x81\x75\xaf\x31\x62\x54\x48\x56\xeb\x4c\x9a\xc6\x04\x44\x4a\x66\xb5\x10\x2c\x44\xbb\x7d\x3e\x08\xf0\x82\x74\xb2\x06\xae\xd2\x2a\xd5\xbb\x28\xf8\xb8\xf9\x95\x8f\xb7\xeb\xbf\x7b\xa4\x56\x54\xef\xa8\x7a\x77\xd7\x72\xfd\xd9\xdc\x32\x75\x3b\xd2\x3b\xa3\x0d\x76\xc5\xde\xad\x7b\x67\x1a\xe7\xbc\x05\x74\x9b\x2f\xaa\x00\x5e\x47\x06\x9a\x32\xbb\x47\x17\xe4\x5c\x48\x8b\x35\x3a\x4f\x04\x69\xc9\xa9\x0b\xdb\x9b\x60\x0d\x05\x5d\xab\x79\x6d\x3b\x6f\x02\xad\xa3\x1e\xea\x88\x35\x2d\x7b\xe5\x6f\x2a\xfa\x67\x39\x46\x82\x06\x46\x56\x29\xb6\xa6\x9e\x50\x28\x93\xd0\xd3\xe4\x3a\xa1\xfb\xa4\xa1\x7a\xdf\xf8\xac\xe4\xf2\x9f\x35\xbc\x65\x1f\xc7\x71\xb6\x38\x94\x0f\x9b\xc3\xc3\xb4\xd0\x59\xe2\x40\xda\x37\x2c\xc2\x51\xa1\xf0\x02\x16\xf9\x43\xe5\xe5\xf0\x6c\x90\xd5\xcd\x7d\x67\x7d\xea\xc0\x01\x05\xe6\x70\x6c\x2d\x39\x54\x4c\x25\x4e\x8e\xea\x68\x03\xee\xd9\x6c\xa0\x6e\xb9\xce\xe7\x18\x8e\x02\xde\xe1\x74\x3e\xc7\x6b\xdd\x20\x08\x46\x56\x4c\xf5\x9a\x1e\xd8\xf6\x49\x30\xd2\xd3\xe4\x6f\x02\x98\x06\xcd\x2e\xe8\x89\x44\x01\x6e\x02\x28\x3d\x56\x0b\x45\x68\x30\x74\x8a\xc4\xaa\x08\x0d\x86\x02\xdc\x04\xf2\x69\x14\x53\x00\x03\x19\xa1\xda\xf9\x99\x48\x37\x69\x9f\x06\xd4\xa1\x8e\x04\x76\x01\x80\xa1\xfa\x44\x02\xe2\x7c\x0a\xe5\x27\x25\xb7\x8a\xee\xfa\xe5\xdb\x1d\x38\xe0\x70\x18\xa0\x35\x5d\xf5\x30\x40\x75\x55\xe3\x80\x97\xaa\xc6\x41\x10\x10\xf5\x62\xcb\x30\x08\x02\xda\x0c\x82\xb8\xd5\x62\x0e\x03\x97\xc3\x0f\xf4\xd5\xf5\x63\x66\x91\x50\x8e\x47\x87\x75\x74\x90\x9b\xd7\xa5\xe5\xab\x29\x40\x7d\x2d\xcd\x7e\x16\xa6\xbd\x62\x2b\xed\xa3\x81\xdc\x2a\x95\xa7\x7a\xe6\xeb\x73\x96\x4a\x7f\x1f\xd2\xc7\x03\xa7\xaf\xca\x76\x5b\x83\x5c\xb1\xde\x65\xcd\x55\x7f\x52\x32\xbe\xe8\x0b\x1d\x8d\x7a\xb5\x17\x75\xca\xe5\x0c\x05\x71\xb0\xc6\xb7\x99\x89\x33\x50\xca\x26\x98\xd4\x10\xf9\x0c\x6e\x82\x5e\x0d\xce\xd2\x6e\x21\xc3\x63\x94\x42\x2e\xbb\xdc\x49\x33\x27\x35\x34\xf6\x5e\x35\xdc\xd4\x3b\x6e\x21\x96\xbd\x1c\x3b\xa2\xd9\x50\x4a\x26\x32\x28\x48\x24\x03\x84\x08\xae\x0f\x39\x3b\xbc\x72\x4f\x5a\x5c\xc8\xa8\xbc\xbc\x62\x28\xb1\xcb\x6a\x61\x12\x1c\x55\xb1\x8f\x52\xa8\xe9\x7e\x77\x00\x93\x5c\x70\x69\x98\x06\x4a\x3c\x49\xc0\x1a\xf3\xd3\x9a\xf0\x13\xaa\x33\x69\x9f\x0f\xd6\x42\xa1\xd5\xa9\xbd\x3b\xbf\xfd\x31\xa0\x64\xee\x35\xdd\x47\x19\x89\x22\x37\x56\x15\x41\xb0\x2d\xcb\x57\x19\x0c\xcb\x57\xe6\x0f\xbd\xfb\x99\xbd\xd3\x07\xa5\xed\x9b\x8b\x2d\xd7\xb9\x3e\x53\x2d\xf0\xa7\x29\x8e\xda\x63\x44\xd4\xcb\x15\xf7\xfa\xb0\x53\x37\x54\x11\x70\xc3\xbe\xe8\x08\x3a\x63\xc4\xaf\xe2\x29\xb2\xfe\xda\xde\x81\xfe\xd7\x96\xff\x7d\x4c\xfc\x77\x68\x7e\x9a\x7f\x9e\x0d\xd4\xbd\xd1\x3f\x38\x1c\x6c\x8c\x61\xc5\x24\xf9\x68\x7d\xf3\xe3\x0f\xe4\x34\x44\xf0\xd1\xcd\x8f\xcf\xbb\xd6\x0c\x10\xe4\xbc\x97\x37\x3f\x0e\xa0\xef\x1d\x08\x61\x81\x6f\xb3\xde\x43\x2d\x36\xff\x7d\x90\x8d\xf9\xe6\xc7\xf5\xac\x2e\x75\xc5\x2c\x9e\x27\x24\x55\xae\x64\xd5\x07\x0f\xab\x99\xef\x75\x2e\xb7\x09\xe7\x47\x3b\xef\x01\xb5\x34\x57\x5b\x10\xe7\x6e\x38\xbc\xbe\x62\x76\xeb\x4e\x68\x73\x97\xf1\x4b\x36\x64\xec\x20\xe5\xdb\x90\x1c\x93\x75\x3f\x8c\xaf\x5b\xe7\x94\x4a\xd7\x51\xe3\x87\x75\x4f\x94\xf0\x7c\xa0\x3e\xc7\x03\x29\xff\x81\xd4\x7d\xa0\xb9\x0f\x4e\xbc\xc1\xa4\xee\x43\xb8\xcc\xc9\x45\xfa\xd6\x26\x1b\xa9\x75\x8d\x31\xde\xb6\xd5\xf4\x53\x5c\xca\xc7\xd9\xec\x8f\x39\x34\xa9\x38\xa6\xae\xf4\x8f\xa8\x99\xa4\x3b\x9f\xa0\x4f\x9d\xbf\xfc\xe4\xe3\x4f\xfe\xe1\xce\x1f\x5d\xf8\x74\x80\x3a\x8f\x3c\x7d\xf9\xf2\x85\x27\xaf\xee\x5c\xbe\xf0\xdf\x9f\xbe\x70\xe5\xaa\x4c\xd5\x0f\xf2\x28\x4d\xa8\x3a\x8b\xb7\xb3\x23\x91\xde\x61\xe8\xf3\x29\x4a\xb8\x07\x93\x20\x5f\xb5\x93\x23\xc2\x0c\x0d\xf9\xce\x7e\xc8\x88\x18\x82\x35\x75\xcf\x41\xd9\x64\x2e\x8a\xa1\x37\xf7\x0d\x6f\x37\xc4\x0b\x43\x53\xca\xd1\xe3\xd1\x1f\x9a\x59\x0a\xaa\x93\xe7\x73\x4b\x55\x0b\x98\xf7\xd5\x17\x43\x9c\x2a\x86\xa6\xae\x26\x98\xcb\x5a\xaa\x12\x38\x32\xa3\xb2\xaa\x9b\x7a\x04\x27\xe0\x68\xd8\x6a\xc5\x1d\xe9\x60\xae\xfd\x3c\x66\x41\x5c\x46\xab\x63\xf8\xb7\x0f\xd6\x46\xa5\xbb\x67\x38\xb0\x84\xdd\x71\xce\x5f\x7c\xd4\xb9\x8e\x0e\xd5\x03\xc7\x41\x10\x58\x9d\xb6\xd2\x40\x6a\x97\x96\x1d\xe9\x94\xc5\x3d\x04\xaf\xa3\xc3\xa4\xc7\x17\x40\x3d\x54\xec\x83\x85\x8f\x3a\x04\xed\xcb\xf8\x4a\x90\x83\xb5\x98\x0e\xc3\xf8\x0a\xa7\x2c\x1c\x23\x89\xf7\x1e\x7a\x9c\xa3\xa9\x6e\x1b\xda\x60\x64\x39\x1f\x99\xc8\xa7\x9a\x81\x0b\x8c\xa6\x0e\xfa\x19\xf2\xb3\x42\xdd\x09\xe2\xb2\xe2\x10\x4e\x01\xac\x6b\x35\x01\x30\xee\x88\x69\xbb\x2c\x47\xd0\x47\x70\x0a\x53\x91\x66\x42\xb6\x3d\x45\xe3\x58\xed\xda\xa2\xe5\xbd\x60\x1f\x93\x88\xee\x77\x28\x51\x5a\x57\x4a\x04\xbb\x17\x23\x56\xf9\xc1\x65\x59\x15\xfe\x32\x7b\xad\xd6\x9e\x2f\x5a\xd3\xf3\xb9\x80\x4d\x33\x97\xf3\xb9\x81\xd4\xc7\xc8\xc8\x56\x75\x3d\x09\x01\x94\xe4\x34\xf1\x1d\x55\x54\xd5\xd0\x18\x4a\x67\x21\x42\xb9\xbc\xc6\xd1\xa0\xac\xb1\x1f\x26\xf6\x96\x02\x58\xb3\x4d\x8d\xe8\x30\x4d\x24\x46\x32\xc4\x5b\x84\xa3\x47\x44\xa6\x7c\xd8\x3c\x3c\xf2\x73\x48\x8c\xf5\x40\x27\x00\x1c\xd5\x8f\xf3\x9a\x96\x1e\xba\x90\x96\x3c\x70\x80\xbc\xee\xee\x38\x92\xfa\x5e\x5f\x5e\xbe\x18\x34\x9e\x96\x56\xba\x90\x34\x2e\x9d\x4f\xf9\xa4\x61\x56\x7e\x83\x4f\x42\xde\x10\x43\x9c\x34\x0e\x69\xca\xd4\xc2\x69\x9c\x9f\xcd\x1a\x38\x69\x44\x68\xc6\x90\xbc\xfb\x20\x03\xd1\x08\x3d\xa7\xb1\x8b\xae\x91\x46\xee\x9f\x42\x4f\xbe\x9f\x10\x36\x46\xa9\x7c\x3a\x8b\xa1\x18\x85\x09\x82\x8d\x30\x69\x44\x54\x34\x9d\x50\x51\x63\xd8\x98\x51\x8e\x88\x32\x15\xa2\x61\xca\x30\x3f\x6c\xec\xa5\xb1\x58\x64\x2a\x34\x5c\xa7\x58\xfd\x27\x71\xa4\x62\x10\x35\x74\xac\xcd\xc6\xee\x61\x23\x41\x9c\x8b\x5a\x3f\x2b\x03\x3c\x3f\x4d\x92\x70\x84\x2e\xeb\x3e\xf5\x1a\x9c\xa5\xe8\xb3\x02\x1f\xd9\x25\x75\xfd\x24\xc7\xc2\x73\x8d\x78\x10\x75\x2a\xaa\x51\x46\x0c\x1e\x54\xce\x51\x08\xd6\x78\xab\xe5\xd7\x4d\x13\xaf\x5f\x29\x21\x10\x64\xc1\xf1\x14\xd1\x94\x3b\x31\x03\xe3\x90\x23\xe6\xc7\x39\x0a\xa9\xa2\xc1\x8c\xe2\x60\x23\x4c\xf9\x84\x32\xfc\xac\x72\xfe\x12\x5f\x22\x44\xb0\xf8\x42\x99\x98\x6b\xe7\xfa\x8a\xc8\x60\xc6\x4f\x3e\x97\xb0\x8f\x13\x24\x49\x99\xa1\x21\xc2\x62\xfe\xf4\xdb\x0b\x32\xee\xbd\x5c\x84\xba\x9d\x8e\x27\x64\x79\xb8\xd9\xed\xca\xa3\x1a\xbd\x40\xc3\x48\x89\xf1\x4f\xe0\x84\x0b\x1e\xe9\x7b\x89\xea\xac\x07\x47\xf2\xa4\x46\x3f\xcb\x96\xe3\x3f\x76\x85\x9a\x5a\xd4\xc0\x2c\xad\xa8\xe2\x3e\x92\xc3\xfd\xcd\xad\x40\x99\x47\x33\x9f\xdc\xd6\x13\xa8\x97\xb7\x95\x7d\x0e\x8f\xc7\xa2\x01\xbb\x1e\x8d\xb5\x61\x18\xa3\x90\x3c\x3d\xf3\x65\x63\x12\x2c\x35\x27\xd2\xd9\x55\x35\x6d\x22\x5f\x81\xb1\x95\xf2\xcf\x54\x7a\x69\x86\x79\x65\x68\x47\x91\x3b\x8f\x7d\x89\x71\x2e\x00\x7c\xe8\x77\x35\x82\x06\x91\xff\x9f\xbd\x7f\xdf\x6f\x23\xb7\x12\xc4\xf1\xff\xf5\x14\xc5\xda\x2c\x0d\x34\xa1\x12\x29\xbb\x9d\x6e\xca\x65\x8d\xdb\x6d\x27\x9e\xf8\xb6\x96\x3a\x99\x2c\xcd\x68\x4a\x2c\x50\x44\x4c\xa2\x38\x28\x50\xb2\x22\xd6\xbf\xfb\x04\xfb\x12\xbf\xd7\xf8\x3d\xca\x3e\xc9\xf7\x83\x83\x4b\xa1\xaa\x40\x49\xee\x38\x99\x64\xa6\xf3\x49\x5b\x2c\xdc\x2f\x07\x07\x07\xe7\xea\xf7\x5a\x77\x34\x53\x64\xa6\x7e\xe3\x5b\x40\x33\x8d\x5a\xb0\x33\xef\x62\x59\xac\xed\xf0\xad\x92\xca\x2e\x64\x15\x6e\xdd\x4c\x12\xb6\xc9\xd7\x5d\xd8\x74\x49\xbb\xda\x80\x61\x7f\x2d\xd8\x65\x26\xe9\xc1\xdf\x5a\xc1\xae\xb8\xa4\x42\xb0\x9c\xbe\x2e\xb2\xfc\x04\xf8\x02\x21\x35\x46\x41\x4b\x2a\x43\x45\x54\x89\xde\x48\xeb\x80\x05\x1b\x60\x73\xe4\x7c\x05\x80\xaf\x29\xfd\xe6\xca\x8b\x19\x90\x40\xe6\x42\x37\x8e\x0f\x51\xac\x59\x13\x31\x26\xbc\x2e\x72\x41\xad\x47\xdb\xf2\x87\xeb\x53\xed\x19\xb7\x2e\x39\x19\x4e\xf7\x44\x52\x8a\x59\x4a\x09\x57\x84\x00\xe5\xf2\x6d\x91\xd3\x84\x81\x2f\x5c\x1d\x20\x05\x81\x39\x8f\x79\x6f\xf6\x46\xb7\xad\x7c\x47\xd1\xfe\x36\x0b\x1f\x63\xa0\x30\x2b\x72\x7a\x5f\x3a\xf8\x6b\xbc\x99\x79\xed\xa6\xc2\xa9\x19\x70\xf0\x17\xdc\x19\xfd\x79\x56\xd2\x9f\xc4\x72\x7c\x8b\x52\xb0\x79\x4f\x2f\xa4\x5c\x97\xe3\x83\x83\x65\x71\xc1\x78\xa2\x71\x4f\x99\x70\x2a\x0f\x7c\x25\x58\x49\x39\xcf\xb4\x6f\xc8\x41\x6c\xe6\x7f\x60\x71\x2c\x8d\xd5\xca\xba\x22\x63\x78\xd5\xf8\x0a\xcb\xd8\x6f\x80\xc4\xb3\x62\xb5\x02\xaf\x6a\x56\x0a\xe9\x44\xf3\xe3\x49\x9c\xad\xd9\xbe\x51\x30\x51\x45\x97\x8c\x72\x79\xc6\xf2\x78\x4a\x3a\x82\xfc\xf1\x24\x2e\x67\x05\x44\xaa\xe6\x85\xf6\x03\x2f\x68\xb9\x2e\x78\x49\xcf\x56\x6a\x6f\xa6\xc4\x7e\xbf\x29\x72\x1a\x1c\x97\x5f\x20\x26\xe0\x5c\xd1\x55\x32\xbd\xdc\xb9\x86\x93\x7a\x9d\x6c\xd5\xd3\xeb\x35\x8d\x31\x89\xb5\xcc\x6f\xaa\xd6\x27\x5b\xb3\xdf\xeb\x79\x8d\xe3\x51\x32\x8c\x89\x5f\xf6\xd6\xb1\x9d\xea\x68\xdc\x00\x6e\x6a\x74\xfa\x12\xfe\x49\xb0\x1d\xb5\x5c\x7e\x13\x4f\x35\x3c\x33\xc0\xeb\x04\x75\xb0\x53\x80\x31\x54\x83\xbd\x02\xaa\x5d\xef\xcd\x80\xc4\xfc\x36\xcd\xe1\xfb\x3e\x1e\xbf\xc6\xb1\x61\x61\x05\x1d\x38\x39\xcd\x27\x3b\xd6\xc1\xcb\x00\xd5\x94\xeb\x6c\x46\xdb\x7b\xaf\x95\xc1\x03\xab\x7a\xab\x1e\xbc\x5a\x53\xad\x42\xd6\x6e\xce\x29\x91\xe7\xfa\x86\x33\xce\x43\xdf\x76\x7a\x71\x94\x6d\xad\xc0\x8a\xb5\x0a\xbc\xd5\x05\x34\xce\x5e\x77\xb7\x87\xb7\xdb\xfa\x41\x25\xda\xd9\xdb\x6d\xac\x4d\x6d\x6a\x25\x18\x6b\xb3\xd2\x34\xc8\x01\x17\x8b\xd8\xae\x54\xb0\xab\x31\x18\xa3\x76\xc0\xb2\x33\x41\xed\xca\xd4\x07\x3f\x76\x1b\xf8\xb5\xcd\x93\xee\x81\xa1\x5b\x96\x93\x7f\x5b\x1c\xed\xfb\xba\xdc\x81\xa7\xdb\x53\xb0\x68\xda\x61\xe1\x6c\xcd\x12\x5d\x48\x41\x89\x9e\x86\x87\x67\xdb\xa8\x69\x12\x67\xb3\x19\x2d\xcb\x33\x59\x7c\xa2\x1c\xf0\xdd\xfd\x91\x03\x26\x80\x3d\x83\xe5\x2c\x5e\x35\x96\xc7\x21\xf5\xcf\xdb\x8c\x4b\x6f\xdb\x1a\x8d\x45\xee\x24\x7d\x7e\x26\x86\x80\x03\xdf\xd0\x28\xc0\x3a\xfa\xb1\x75\x20\x64\xa8\x01\x43\x64\xcf\xcf\x9f\x95\xd7\x7c\xf6\x8a\x33\x09\x51\xe3\xe1\x69\x62\x83\x46\x46\xc6\xcb\xab\x4d\x26\x2c\xbd\x93\x81\xa2\x03\x50\x9b\xd6\x5f\xfe\x50\xd3\x40\x78\xaf\xdb\xa5\x4f\x50\xbd\xfc\x01\x34\x59\x10\xf5\x19\x14\x9a\x40\xc7\x95\x66\x14\xd6\xb4\x16\x46\xf1\xc1\x81\x59\xed\xc4\x2e\xbf\xb9\xb4\xf9\x20\x3e\x28\xf3\x4f\xc9\x9f\x4b\xad\x16\xa6\xde\x39\x8d\x4b\x2b\x30\x0e\x49\xba\x89\xfd\x3e\xea\x26\x82\x75\xc5\x06\xe2\x60\x77\x33\x91\x16\x6c\xf8\xba\x0b\x56\x7c\x71\xb3\x29\xa9\x78\x95\x8f\x69\x02\x3f\x7e\x24\x1a\x6e\x4f\x15\xd8\x8e\x69\xe2\x7d\x11\xfa\x79\xcd\x04\x2d\x5f\xa9\x74\xf7\xbb\xaa\xd1\xd2\x85\xc8\xb8\xa4\xf9\x89\x82\xd0\x12\xdc\x38\x35\x52\xd2\x56\x09\x4c\xe4\x17\xeb\x76\xee\xe9\xb0\xe7\xbb\x4e\x71\x17\xde\xdd\x41\xea\xa0\x3d\x7b\x90\x20\x2c\x25\xdc\xde\x6a\x1a\x7a\x68\x3b\xf0\x64\x5d\x20\x26\xbd\x91\x22\x1c\xd6\x9a\xa8\xea\x94\x85\x9c\x18\x13\x43\x2f\x05\xcb\xd4\xb4\xd4\xe5\x61\x72\x18\x63\xf2\x79\x7e\xbe\x5a\x06\x8b\x42\x8e\xee\x73\xb6\xc8\x38\xa7\x8a\xd4\x0a\x96\xac\xb3\x2d\xcd\xa4\x4f\x48\xb0\xb0\xce\x52\x6b\xc0\xcf\x7e\x3a\x89\x31\xf9\x72\x7e\x69\x61\x74\xb0\x34\x6b\xa3\x04\xb7\xf5\x2d\x4e\x28\xbe\x71\xd6\x64\xea\xe5\x4b\xd3\x9b\xaa\xe1\xca\x0c\xee\x47\xbd\x1b\x98\x88\x94\x26\x0a\xab\x2a\xca\xca\xea\x5e\x18\xfa\xcd\x5b\x7d\xa7\x26\xd8\xed\xbe\x7b\xaa\x02\x91\xe3\x3d\xf5\xa1\x3b\xf1\x06\xe8\xf7\xbc\xfc\x21\x01\x32\xbc\xa9\xea\xa7\x87\xfa\xc1\x60\xfe\xe3\x16\x76\xe0\xa4\x99\x8f\xc7\xad\x02\x8c\x68\x2d\xb8\x4d\xa9\xde\xc9\x37\x1a\x54\xa9\x01\xc4\xb3\x52\x43\xa2\x24\xaa\x8d\x33\x88\xe5\x22\x00\xdb\x57\x48\x12\xae\xa3\xd5\xea\xc9\x66\x3a\xf2\x03\xac\x40\x57\x3b\xe7\x46\x77\x31\xee\x0d\xc9\xac\x28\x3e\x31\x75\x90\x0c\xa8\xd5\xab\xab\x01\xac\x86\xd7\x3a\xc7\x42\xa9\x85\xf6\x3a\xc7\xc2\xb8\x07\x91\x1e\xbd\x53\xc3\xa1\x03\xc1\x3a\xd7\x00\x1e\xae\x9a\x1e\x52\xca\x7b\xdd\x65\xbb\xdf\x81\x2d\x8b\xd0\x5b\x5f\x87\x7f\x43\x1a\x43\xdc\x85\x9d\xda\x6f\x41\x47\x64\x5c\x5d\x5d\xd5\x97\x86\x22\x33\x72\x96\x2d\x8b\x0b\x3d\xf0\x38\xf8\x2a\xcb\x59\xb9\x5e\x66\xd7\xde\x8b\xca\x65\x99\x57\xb0\x79\xe9\xd4\xa8\x50\xde\x85\x0a\x4d\x9b\x63\x43\x78\xb6\x69\x97\x4e\xfd\x2f\x7d\xd8\x90\x1d\x7e\x8d\x1a\xe5\xda\x07\x59\x93\x0b\xfa\x48\x39\xfe\xe1\xf3\x22\xa7\xfd\x7e\x7c\x38\x1c\x6a\x55\xb1\x4e\x66\x40\x43\xab\xa4\x22\xd2\xfc\x20\x9a\x37\xb9\x91\x35\x5e\xa1\x5a\xf7\xf6\x36\x78\x6c\x79\x0d\xf8\xa7\xe2\x4a\xb4\xc6\xde\x81\x43\x9d\x0f\x10\x08\x68\xef\x1e\xe4\x6e\x0b\xd8\xfe\xf3\xde\xc2\x3b\x5d\x55\xfc\x73\xed\xd0\xae\x59\x74\x1f\x26\xb3\x59\xb1\xe1\xb2\x4c\x74\x15\xfd\x3a\xb1\x8c\xa0\x4b\xcd\x0b\x8a\x09\x3c\x43\x7e\xef\x82\x93\x75\xb0\x8e\xae\x9c\xad\xc1\xf5\xfa\xca\xab\x0e\x15\x19\x9f\x17\xf1\xad\x6c\x1e\x23\xb7\x3d\x33\xde\xf3\xce\x32\x58\xa9\xd2\x47\x3b\x3b\x9e\x32\x9a\xd9\x44\x4b\x69\xdc\x27\xea\x40\x3d\xe5\x0e\xa8\x09\x94\x8c\x49\x1c\xe3\x26\xcf\x26\xd6\xaf\xae\x3b\x1e\x65\x44\x17\x83\xbb\x55\x61\x3f\x4d\xd2\x9e\xb1\x2f\x7f\xae\x75\x29\x9e\x16\x79\xa3\xd9\x0d\xc4\x08\x92\xcf\x37\x6c\xa9\x90\x38\xc2\x2d\x12\xc7\x6f\x93\xa5\x5d\xe6\x95\x9e\x47\xec\xbc\xfe\x69\x0e\x60\x67\x6b\xd5\x65\x9d\xfa\x17\x35\xfb\x1d\xbd\x8e\x9b\x4e\x4c\x21\x47\xe3\x77\x0c\x42\x50\x24\x14\x41\x12\x42\xbb\x9a\x43\x3c\x01\xd5\x66\xb6\x43\xbb\xca\x51\x78\x13\x39\xed\xf7\x85\x53\xa3\x83\xe0\xfc\xc6\xb8\x23\xe8\x67\xcd\x4e\x0d\x74\x9d\x41\x8e\xe3\x2c\xfe\x59\x19\xad\x8c\xa6\xbe\x5c\xd0\x92\x3a\xdb\x88\xba\x92\x36\x70\x03\x15\x69\xa3\xd9\x4b\xa2\xb8\xb6\x22\xb9\x93\xb8\x73\xd1\x87\x4b\x78\x40\xfe\xdb\x9b\xd7\xbf\x95\x72\xfd\x41\x83\xd9\x5e\xe9\xb8\xf1\x6f\xd8\x0a\x20\x0b\xa8\x1e\x6b\x04\x7b\xf0\xe7\x12\x08\xa3\x32\x29\x3a\x02\x5f\x2d\x3c\xff\xd7\x93\x77\x6f\x8d\x2c\xbc\x4c\x1c\x84\xd2\xcf\x12\xef\x15\x49\xb6\xc9\x19\xe5\x33\x9a\xa6\x2e\xc6\x65\x5b\xf4\xed\xec\x91\x74\x76\x56\x96\xec\x42\xa1\x9f\x9b\xda\xd5\x4d\x03\x52\x39\x60\x4a\x6b\x39\x97\xa6\x69\xdd\xcb\xed\x3d\x30\xd4\xd0\x61\xa6\xd6\x53\x43\x6b\x77\x14\xa4\x45\x75\x88\xc3\x48\xc7\x58\x4b\x22\xb5\x91\x0f\x6c\x4f\x0f\xa2\x39\xa3\xcb\x3c\x5a\x65\xd7\xd1\x39\xb5\x5b\xa8\x05\x72\x3e\x0d\x7c\xd7\x30\x9e\xc1\x59\x35\x9d\xd6\x31\xec\xa3\x42\x44\x8b\xac\x8c\xce\x29\xe5\x91\xa4\xab\x35\x55\x10\x71\xc5\xe4\x22\x89\xfe\x58\x6c\x6c\xb7\xe5\x06\x10\x72\x24\x8b\x28\x8b\x1e\xa8\xd3\xbb\x29\x69\x1e\xe5\x74\xbd\x91\xd7\x0f\xa2\x4c\xca\x6c\xf6\xc9\x0c\xaa\x82\x2d\xa4\xcd\xe8\x27\x9e\xf8\xe8\xce\xa1\x9e\xb6\x17\xc6\x20\xaa\x68\x9e\xb1\xa5\x19\x5d\xa4\xe9\xf0\xe8\x41\x3c\x28\x0d\xd9\xaf\x20\x61\x10\x3f\x88\x90\x5e\x47\x95\x55\xa8\x6f\x28\xe2\x83\xcb\x20\x7e\x80\xfd\xb1\xaa\xe3\x1a\xff\xe6\xc5\x69\x4c\x8a\x41\x7c\xec\x23\xb5\x34\x1e\x04\x8c\x29\xed\x3b\x5e\x97\xc1\x0a\x64\x4b\x75\xd9\xe8\x9b\xb5\xeb\xd4\xd1\xb3\x64\xab\xfe\xba\x9b\xf7\x1f\x8f\x19\xf8\x33\x2e\xde\x2f\xbd\x75\xf5\x95\xfb\x73\xae\x4b\x12\x2f\x72\xb8\x7d\xbe\xe2\x8d\xb8\x8b\x23\x79\x37\x8f\xb1\x66\x8d\x7c\x01\x31\x07\x4b\x04\x62\xab\x59\xb6\x5c\x14\xa5\x1c\x3f\x3a\x1c\x0e\xcd\xd2\x38\xcd\x45\x4c\x16\x61\x71\xd4\x22\x87\xd1\xff\x4c\xa8\xfb\x67\xa6\xf2\xfe\x9e\x50\x66\x41\x41\x53\x3e\xd9\x5a\xad\x51\xb6\x3c\x5b\x8b\x62\xb5\x96\x5f\x15\x0a\x0d\x03\x71\x97\x24\xad\xce\xde\x01\xb4\xbb\x1e\xb1\x77\x02\xad\x9d\xd4\x7b\x98\x53\xb8\xf3\x46\x11\xb5\x10\x1b\x59\xfc\xf5\xf0\xfe\xdd\xf0\x6f\x09\xef\x5d\x9f\x81\xff\x54\x20\xdf\x1d\x7e\x90\x0b\xa2\x8b\x31\x0e\x20\xbf\xc9\xca\xb6\x64\xdb\xb0\x78\xfe\x71\x9f\xa1\xd6\xdb\xe6\xbd\x05\x2e\xff\xa9\xbb\x62\x47\x6b\x0e\x32\xd0\x33\xbb\xd7\xac\x51\x26\xc6\x04\xde\x33\x1f\x1a\xc9\xcb\x5d\xec\x1d\xf3\x9e\x69\x35\x11\x62\x1a\xdf\xfd\x84\x6a\x75\x89\xee\x7e\xe1\x18\x00\x99\x86\x1f\x3a\x4e\x92\x61\xb7\x48\xdb\x95\xe2\x2f\xa0\x81\xbe\x9c\xf8\x09\x71\x23\xbf\xc6\x66\x8b\xc0\x66\x07\x1f\xc9\x7f\xef\xc7\xeb\x7f\xbb\x67\xe8\x4d\x03\x69\x19\xc9\x1a\xd9\xf9\x84\xeb\x00\x9c\xb8\x07\xc0\x69\xbc\xf7\x33\x91\x0d\xd9\xe9\x19\xe7\xde\x7a\x24\x6d\x07\x16\x7f\x1b\x73\x03\x63\x43\xd0\x05\x6c\x1d\x23\x94\xf2\x4c\xd2\xdc\xb4\xc3\xc0\xa5\x64\x87\x65\x1e\x93\xb8\x43\x32\x19\x5a\xa7\xcd\x5a\x77\x2a\x4b\x86\x4c\xaa\x55\x9e\x88\x03\xf7\xb3\x0d\xd0\x00\xf6\xbe\xd9\x4d\x8d\x4d\xdd\x3d\xd7\x54\x76\x06\xf5\xa3\xdf\xd1\xeb\x1d\x04\x8a\xe6\xdc\xdc\x4d\xf6\x68\x59\x9f\x1e\xe1\x0e\x45\x2f\x9b\xb9\xfb\xa2\x6b\x70\x8b\x20\x76\x39\x58\x31\x07\xbb\x85\x09\xdf\xde\x92\x86\x89\x13\xed\x5c\x41\x35\x77\xe6\xa5\x80\x7b\x26\xe2\x27\xb4\x55\x70\xfc\xd2\x21\x9d\x9b\xba\xa3\x46\xc9\x9a\x87\xbf\xdd\x22\xa3\x73\xee\x56\x7b\xf4\xb8\x0e\x7c\xdf\xee\x81\x62\x0c\xd8\xbe\xc5\x4a\xd4\x27\xab\x45\x68\xb4\xf7\xf0\xaf\xa4\x33\xe2\x83\xb8\x97\xa6\x88\xa6\x13\x23\xbb\x57\xc4\x24\xe8\x7c\x83\x29\xfe\xac\x58\x92\xf8\xe0\x20\x26\xed\x5c\x45\x6e\x76\x12\xd7\x99\x5c\x28\x94\x3d\x35\xa8\x28\xc6\xd8\x5a\x43\xef\x8f\x70\xbf\x8f\xe8\x20\x8d\x0f\x62\x4c\xe8\xc0\x46\x0e\x30\xa3\x4b\x16\x72\xb5\xd4\x9a\x1a\xb0\x10\x80\xea\xff\x97\x42\x08\xb7\x3a\xf6\x71\x57\x7a\xf3\xa0\x35\x15\xa0\xba\x87\xae\xe6\xd2\x75\xac\x49\x6a\xdc\x08\xfe\x29\x1a\xde\x96\xc6\x94\x34\xfd\x24\x81\xc1\x49\x6d\x61\x59\x11\x7b\x43\x75\x49\x10\x4f\x1f\xd0\x9c\xc6\xd8\xc0\x43\x7b\xaa\x08\xdb\xe5\x3b\xfe\xb9\xd4\xc9\x57\x63\xf0\xb6\x54\x17\x7d\xd6\xae\xf1\x5c\x42\xca\x74\x7f\xd4\x4b\x53\x56\x1b\xc2\x97\xcd\xc3\xf0\xdf\xe0\xb2\x65\x73\x54\xf6\xfb\xc6\xb1\x4c\x2f\x4d\xb3\xae\xdb\xb2\x3b\x3a\x5f\x64\x65\x94\xf1\x88\xf1\x59\x21\xc0\xd0\xc4\x46\xf6\x80\x26\xad\xa3\x33\xe3\x7e\xf7\x9c\x46\xf1\x83\x41\x36\x78\x10\x13\x70\xa0\xc6\x4a\xf5\x6d\xba\x1f\x3c\x88\x1f\x84\xaf\xff\xe7\x45\x4e\xc7\x39\xed\xb2\xe8\x26\xc5\x14\x7f\x01\x51\x90\xdd\x46\x14\xb4\xbd\x8c\xff\x63\xbd\x10\xef\xa1\x8e\xd7\x9e\x40\xe7\x8d\x68\x55\xac\x74\xc1\x5d\x2a\x79\x9d\x3b\x7d\xc7\x0d\x0d\x8d\x9c\x2d\x33\x9e\x6b\xaa\x47\xbb\x56\xb6\xec\x90\x2f\x10\xad\xef\xe4\x4a\x08\x9a\xe5\x67\x57\x82\xe9\xd3\x0a\xfd\xbd\xd6\xdd\xed\xb8\x5e\xbd\x12\x86\x91\x02\x63\xba\x8d\x9b\xe1\x15\x88\x49\x3c\xcf\x96\xe5\xdf\x46\x2b\xf9\x36\xc8\x6b\x07\x9b\xb8\x13\xf2\x46\x7f\xbb\xd8\x25\xbb\x80\xcb\x86\x07\x08\xcd\xc4\xae\xc6\xbe\xb6\xfa\x0f\x3e\xe1\x76\x1a\xfc\xfe\xac\xd3\xe3\xfb\xce\x22\x5a\x49\xb1\x87\x68\x64\x2d\xaf\x8b\x79\x24\x71\x38\x84\xea\x73\xed\x9b\x6f\x96\x2d\x97\x51\x16\x69\x0f\x62\x0a\x83\x39\x55\xa7\xd8\x53\xf9\x63\x75\xeb\xbe\x52\xc4\x07\x3a\xa7\x82\xf2\x99\x6d\x13\x6c\xd6\x16\x59\xc9\x1f\x48\x2d\x61\xb1\x86\xdf\x25\xcd\xa3\xfd\xc8\x80\x41\xa3\x84\xea\x9f\xe6\xee\xaa\xe9\xc9\xed\x36\xd6\xc1\xdd\xeb\x20\xb0\xb2\xdf\xaf\x4d\x20\xeb\xd4\x63\x3a\xfe\x72\x1d\x40\x42\x13\xb0\x8e\xb3\x36\x6f\x3a\x6a\xbd\x67\x64\x5c\xa4\xc1\x12\x1e\x68\xbb\x55\xa1\x08\xdf\x70\xe3\x44\xc5\x2a\xa5\x31\x63\xee\x44\x93\xb3\x33\x20\xbf\xce\xce\xb6\x5b\x33\xc8\x0b\x2a\xdf\x5b\xe7\x48\xe0\x48\x11\x87\xf5\xe2\xea\x7b\x37\x51\x30\x97\xc6\xdd\xf1\xc4\xc4\x79\x95\x6a\x82\x3f\x9b\xa3\xd0\x5a\xf5\xfb\x3a\xc6\x5c\x2a\xc3\xd0\x70\xa2\xb6\x26\xa2\x9f\xd7\xc2\x5c\x5a\x10\xb3\x8a\x32\xb9\xa0\x42\x5d\x56\xaa\x36\x98\xd8\xb9\xee\x08\x98\xd2\xc5\x03\xdb\x83\xba\x5e\x76\x86\x6e\xed\xf7\xbd\xa8\xad\xe4\xc6\x73\xa8\x35\x36\x7b\x43\x09\xe5\x9b\x15\x05\xbc\x32\xee\x8d\x88\xc2\x76\xfa\xf7\x90\xf8\x38\x47\x6d\x62\x85\x89\xec\xf7\x91\xe9\xa3\x6c\xac\xea\x71\x30\x15\xd6\x66\xec\xed\x49\x2a\x71\x85\xa8\x51\xc9\xd5\x41\x01\x09\xad\x20\x02\x5e\xd0\xaa\x40\x6c\x3a\x6e\x45\xa8\x8d\xd4\xa7\x08\x68\x5d\xfc\xde\x92\x63\xe7\xf6\x2b\xb3\xca\xc9\x6d\x73\x4b\x19\xb2\x74\x07\x32\xa5\x55\xc1\xb7\xc1\x0c\xd6\x21\x99\x15\x52\xd3\x9a\xcc\xf7\x7c\x8a\xb4\xda\x2b\xdd\x00\x3c\x03\x7a\x12\x4b\xb1\xa1\x10\x74\x69\x87\xa5\x74\x89\x89\x21\x0e\xd3\x34\xad\x43\x58\xdd\x62\x91\x80\x15\xb9\x65\xcd\x97\xe9\xb2\xa4\x46\x2a\x5a\xa0\xf8\x6d\x21\xa3\x2c\x02\x7c\x18\x99\xc2\x36\x22\x5a\x66\xe2\x6b\x3d\x57\x08\x0b\xdd\x68\x44\x1b\x92\x3d\x66\xee\x3d\xe0\xef\xd0\x98\x56\x18\x84\xb2\xaa\x31\x72\x2b\x41\x64\x02\x75\xe4\xe5\x72\x9f\x7e\x06\x32\xe8\xb6\x58\x1e\xb7\x19\xf2\xf9\x31\xfa\x3e\x40\x95\x1f\x4f\x5e\x7b\xe7\x41\xe8\x40\x63\x32\x69\x04\x5f\x83\x92\x69\xc7\x06\x54\xa5\xee\x50\xa7\x35\x44\xb4\xef\xed\x06\x57\xc4\xef\xd7\x06\x27\xbb\x39\x53\x98\x59\xa7\xfd\x6b\x53\xed\x33\xf5\xbc\x1b\xed\xd4\xdc\x35\x53\x42\xc3\x7a\x09\x8d\xdd\x4a\x70\x16\x65\x1a\x76\x35\x7d\x67\x70\xba\xbb\xb4\x34\xff\x66\xb7\x7f\xc8\x1f\x84\xb6\x16\x7e\x53\xe4\x74\xb9\xe3\x35\x47\x1a\x71\x38\x76\x2c\x9d\x55\xcb\x50\x8f\x1e\xb5\x50\xc7\x62\xa7\xd6\xb1\x4c\x66\x0b\x3a\xfb\xf4\x1a\x94\x87\xc1\x21\xfa\xb8\x9d\x44\xea\xcf\x80\xc3\x9d\x21\x91\x21\x93\xf9\xce\xbb\x4e\x9d\x64\xc0\xfb\xde\x41\xc5\x09\xc8\xf5\x11\x4e\x66\xe0\x36\xdb\x1f\xdf\x2e\x05\xc7\x7b\x44\x11\xfc\x6f\xbf\xa5\xfe\xda\xb8\x4d\x6d\x27\x12\x3f\x21\xe0\x57\x6b\xd7\xce\x1a\x8e\x81\xcf\x1e\x10\xa1\xbd\xf5\x59\x04\xa1\x02\x83\x38\x61\xe5\x33\x7f\x17\x81\x77\xe0\x42\xb9\x14\x4e\x87\xfe\xd8\xbb\xe8\x4c\xb8\x0a\x84\xc7\x88\x25\x99\x94\x74\xb5\x96\xd4\xf3\xf4\x96\x52\x92\x1d\x73\xa3\x4e\xf2\x23\x18\xee\x23\x8a\xc7\xec\x16\x48\x73\x5c\x9e\x56\xa5\x0a\x63\xb5\x4a\x5e\xe2\xb8\xa9\x5c\x0f\x2a\x2a\xb1\x5f\x20\x26\x34\x0c\xb5\xed\xd0\x70\x5f\x40\xb5\xff\x4d\x44\x2f\x21\x0a\xc4\x50\x2a\x97\x94\x4b\x9a\xd7\xc6\x8d\xe4\xa6\x76\x41\xd2\x58\x00\xdf\x1f\xc0\x2e\xf3\x6c\x33\xdd\x86\xf3\x00\x63\x7b\xed\xa7\xb0\x3c\x6d\x04\x57\x8a\xf7\x5c\x83\xc0\xef\x3f\xa1\x4b\xaa\x48\x39\x14\x27\x3b\x63\x30\x01\xa5\x4b\x79\xfe\x7c\xc1\x96\x39\xf2\x5a\xb7\xce\x0e\xda\x53\x68\xcc\xc0\x10\x39\x08\x57\xa4\x76\x1b\xe0\x97\x55\xf7\x67\x9a\xa6\xbb\xc6\xf5\x3f\x1a\xc3\xc7\xc6\xbf\x5e\xc0\x39\xc2\x9d\xa2\x93\x76\x70\xc1\x7f\x7a\x48\xf1\x1c\x6c\x06\xc2\xed\x1b\x57\xc3\xd0\x59\xc4\x78\x44\x31\x10\xa0\x8b\xac\x7c\x77\xc5\xdd\x30\x05\xb6\xae\x7d\xcb\x2b\xa6\x0e\x30\x9d\x88\x29\xbe\x99\x65\x25\xed\x0d\xc7\x3c\x8d\x47\xf1\x9e\x0e\x00\x0e\x49\x23\x95\x34\xb4\x49\x66\x78\x63\x0e\x0e\x70\x2b\xa9\x69\x18\x31\x88\xd3\x78\xc0\x6b\x47\xff\x96\x59\x17\xe3\x2a\xe0\xbd\x9d\xea\xa8\xd8\xdb\xed\xb7\xc3\x21\x58\x01\xe9\x78\xcd\xf0\xbd\xd7\x70\xbb\xbd\xa2\xe2\x82\xa2\x9b\x25\x9d\xcb\x71\x39\x13\x94\x9a\x98\xf3\x07\x87\xfb\xf2\xe0\x90\xc8\x62\x6d\x93\x75\x13\x07\x87\xfb\xe2\xe0\x90\x40\x99\xb1\x24\x3a\x71\x2c\x2a\x85\x4b\x90\xd8\x6e\xd5\x55\xb8\xe7\x1f\x36\xeb\xcd\x47\x91\x59\x6a\x75\xf9\x6e\x08\xdf\x05\xcd\x0d\x67\x1f\xfe\x31\xd0\xde\x49\xbe\x06\xf8\xb6\x7c\xbb\x85\x42\xc5\x42\x56\xdb\x59\xf8\x2d\xc6\xdf\x5f\xca\xaa\xd0\x10\xdc\xb6\x47\xb6\xf1\x07\xe3\x81\xac\xef\xd5\xed\x16\xed\x2e\xe9\x47\x2a\xc4\x98\x88\xbf\x3e\xe4\x83\xb9\x07\x9b\x07\xea\xec\xbd\x28\x3e\x5f\x03\xf9\x40\xb4\x63\x63\x2d\x84\x2a\x3d\xef\xc5\x77\xfb\x14\x68\x1a\xa6\x03\xc5\x0c\xa2\x32\x2a\x37\x6b\x90\x24\x41\x2f\x9e\x6f\x12\x45\xa7\xdf\x2e\xbf\xf2\x07\xe0\xc4\x26\x7b\x34\x09\x78\xda\x6d\x38\x61\xd1\x52\xac\x99\x8e\x17\x1f\x1b\x6b\x32\x8a\x89\xcd\x68\xf9\x11\x56\x25\x3a\x5e\xa6\xb5\x06\xa8\x1a\xbe\xf1\x63\x69\x97\xbb\x09\xe6\x1d\xef\x66\xd6\x99\x58\xd0\xf2\xbd\x08\x26\xbb\xdd\x6f\xc7\x01\xee\x48\x34\xdc\x5a\xdc\xfb\x39\x4e\xf1\x4d\x66\x08\x86\x52\x66\x42\xbe\x5b\x53\xae\x1e\xbb\x28\x6c\x69\x6b\x49\x1f\x77\xc8\x43\xc5\x3c\x7f\x67\x10\x07\x42\x17\x0e\x16\xf5\x1f\xad\x7a\x14\x73\xc6\x59\xb9\x80\x61\x10\xaa\x05\x8b\x1d\xda\x28\x50\x2b\x63\x4b\x57\xa7\x41\x96\x41\x44\x64\x1a\xd6\xd6\xbd\x73\x37\xbe\xc6\xf2\x16\xfe\xf2\xbe\x54\x23\xb8\x7b\x7d\xcd\xba\x69\xda\x70\xd7\xc2\x15\x8d\x15\xd3\x2d\x13\x98\xe9\x2d\x0b\x56\x78\x0b\xe6\xaa\xec\x5e\xb1\x96\x37\xa6\xff\x84\x15\x33\xf8\xfd\x9e\x2b\xa6\x99\x2a\xc1\x15\x6b\x2f\x98\xbd\x38\xee\xbd\x5c\xc6\x51\xd2\x2d\xcb\x75\x2b\x85\x6d\x1c\x95\x86\x9d\x8d\xdc\x71\xa3\xec\xba\x4f\x44\xc3\xa3\x7f\x97\xc7\xb6\xc3\x0d\x61\xfb\x3e\x71\xd2\x33\x70\x85\x81\xec\x0b\xab\xb1\xb5\x3a\xbe\x65\xaf\xe8\x4a\x26\x5d\x78\xca\xac\x1d\x74\xf2\x01\xd8\xee\x3f\x88\x08\x44\x49\xba\x2e\x36\xd1\xbc\x10\x17\x14\x8c\x0b\x6c\x50\xc1\x88\xc9\xe3\xd8\xb4\x3d\xa1\x53\x60\xe3\x06\xfc\xc3\xbb\x4e\x5c\x17\xb6\x71\x59\x98\xb8\x97\x20\x93\x34\xe1\x75\xa2\x15\x95\x8b\x22\x4f\x6a\xc0\xeb\x02\x9d\x7b\xb3\xdd\x54\x8e\xd8\xba\x8f\x37\x04\x89\xd4\x40\x11\x33\x8c\xb9\xaf\x7d\xe7\x02\xb1\x3a\x16\x28\x2e\x00\x9f\xf5\x86\xd8\xe0\x2d\x81\xe2\xb9\x41\x1f\xfa\x58\x0a\x14\xcf\x2c\x10\x77\xc3\xe3\xec\x20\x63\xc2\xf0\xd7\x2c\xf4\x77\x88\x8a\x6f\xe1\x53\x2d\xb8\x23\x0b\xb4\xe3\x51\x1b\xfa\x64\x1c\x6f\x78\x83\x9b\x12\x13\x1b\x55\xa1\x95\x31\xbe\x01\x1b\x94\x37\xda\xe5\x9d\x26\x4e\x5a\x6f\xf8\x71\x6f\x44\xdc\x05\x37\x66\x7a\x75\x6d\x10\x33\xaf\x72\x3c\xc5\xa4\xc6\xd4\xaa\x20\xac\x79\xb8\x64\x93\x57\x91\x8f\x6f\x0c\x95\xf0\x53\x49\xc5\x8e\x51\x0c\x49\x8d\xd5\xec\x06\xaa\xc6\x8d\xae\x04\xe3\x17\xe3\x1b\x56\xfe\xa1\x10\x9f\xd4\xcf\xde\x90\xb0\xf2\x9d\x49\xef\x0d\x49\x7d\x39\x36\x5e\xbc\xb0\x4b\xb5\x4f\xf0\x26\x1b\xd2\x7a\x83\xf3\x1d\x76\xc7\xcd\x75\x55\x57\xa3\xb9\x40\xbb\x2f\x69\xd3\x66\x6b\xc9\x13\x7f\x29\xec\xab\xb9\xd9\x47\x7b\xf7\x70\x65\x6e\xe0\xd0\x24\x5f\xda\x0c\x37\xcb\x97\x1d\xd3\x9a\xaf\x34\xcd\x6e\xc3\x5f\x7f\x9e\x66\x5b\x3b\xd3\x7c\x6e\xd2\xe1\xa3\x03\x1a\xde\xc5\xd4\x79\x14\xdd\xd5\x27\x71\x57\xd4\xdf\x76\x6a\xea\xa1\xe5\x5d\x8e\x80\x63\x52\x4a\x8a\xaa\xa3\x3c\xeb\x37\xd5\x79\x02\xb5\xde\xd6\x81\x87\x75\xbf\x8f\xe4\x44\x4c\xe1\x6d\xdc\x95\xc7\x76\xa3\xb2\xb8\x16\x8f\x44\x1d\x31\x52\x0c\x06\x58\xcd\x6b\xa2\x9a\x9a\x1a\x61\x43\x30\x7c\x4b\xe3\xe6\x16\xd9\xec\x13\xcd\xf7\x57\xd9\xba\xdc\xcf\x78\xbe\x5f\x52\xe9\xf9\xf3\x59\x65\x6d\xf6\xc7\xed\xe5\xd5\x95\xfe\x05\x37\xba\x17\xe4\x27\xe0\xfe\xf6\xe4\x7a\x75\x5e\x2c\xfb\xfd\xb8\x84\x1f\xed\x8c\x84\x49\xed\xcc\xf8\x38\x40\xcd\x98\x92\xb4\x0a\x5a\xac\xf9\xa2\xe6\x4e\x77\xb4\x15\x6c\xc8\xa5\xf7\xec\xef\x5a\xaa\x73\x6c\xc7\x36\x76\x1d\x62\xb5\xc6\x7f\x5f\x89\xbd\x83\x87\x74\xd8\x86\x08\xc3\xf4\x51\x30\xb1\xc7\x93\x5a\xfa\x9a\xfa\x1f\xdb\x6d\x6f\xd4\x72\xfd\x92\xf6\x86\x24\x86\x8b\x2d\x66\x3c\xe2\xfd\x3e\xe2\x89\x95\xd6\xa6\xea\xa2\xde\x75\x35\xf2\xe4\x13\xbd\x26\x1c\x57\xf5\x28\x8b\x96\x3f\x15\xd9\xef\x33\xe4\xc9\x91\x89\xc4\x44\x40\x1a\x01\x01\xad\xab\x98\x35\x2b\xa2\x2c\x8d\x37\xdc\x44\xfe\xae\xc5\xde\x1f\xe8\x7c\x49\x67\xb2\xdf\x37\x3f\x14\x3d\x77\xec\xfd\xbe\x93\x0f\x66\x97\xf0\xa8\x67\x26\x55\x47\x32\x6b\x1e\x55\x1d\xf2\x41\x95\x77\x92\x76\x44\xd3\x35\xa2\x18\x1f\xe1\x23\x67\x0e\x09\x25\x14\x99\xe7\x02\x7c\xd6\xaa\x01\x5e\x6b\x3f\x52\xed\x0f\xb3\x10\x88\x93\x9a\x0f\xc2\x60\xfc\xf0\xaf\xee\x4f\xe0\x31\x4b\x60\x2b\x2a\x05\x5c\x6a\x0e\xdb\xad\x0f\x63\xe5\xdf\x59\x29\x20\xfe\xab\xb5\x00\xee\x96\xfb\x2f\xf4\x8b\xdb\xcd\x71\x53\xb3\x01\xf3\x5a\xb4\xd5\x62\x98\x08\xc2\x61\x37\x20\xee\x9b\x5d\xfb\xb5\xe1\x2c\x78\x03\xd9\x13\xa9\x85\x0f\x97\x8a\x78\x2d\xeb\x21\xcc\xc8\xaa\x45\xca\x6f\x17\x06\xd9\xf0\x68\x3e\xb8\x2f\x7d\xb4\xdd\x54\x75\x49\x05\x52\xb0\x13\xd4\x73\xf1\xf1\x94\x1f\x5e\xff\x6f\xab\x8a\x03\xe0\x8a\xc7\xb2\x1e\xfe\xcc\x8b\x5b\xd2\x45\x92\x6f\xb2\xf5\xb1\x1a\xc9\x9b\x6c\x3d\x6e\xb8\xa7\x47\xb3\xb6\x0f\x59\xc3\xae\xa7\x9a\xaf\x47\xf6\x47\x69\x9a\xbe\x34\x45\x9c\x6a\x82\x05\xf1\x5a\x2b\x75\xc2\x33\xc9\x2e\x69\x34\x2b\x72\x3a\x8d\x31\xb6\x5e\xd8\xa8\xbe\x75\xf7\xc2\x60\x4e\xbf\x22\x70\xbb\xd5\x87\x43\xa3\xa3\xc3\x2d\xb2\x52\x1d\x73\xc7\xa8\x06\x79\x2a\xde\xd3\x6c\x34\xaa\xf0\x9d\x87\xf2\xeb\x3b\x1b\x51\x0f\xaa\x02\x90\x58\xbf\xc6\x76\x1e\x28\x7a\xc7\x69\xe2\x5f\xa6\x53\xb3\xd0\x51\xc1\x9a\xb7\xd4\xbc\x66\x5d\xce\xd5\xf9\x3a\xee\x1c\x8f\x1d\x48\x74\xa2\x16\x50\xdd\x2c\xeb\x4d\xb9\x30\x47\x05\x90\x99\x09\x14\x48\xaf\x90\xdb\xf2\x73\xc6\x73\x53\x44\x2d\x98\x2f\x50\x5d\x20\x46\x44\x3d\x4f\x4c\x58\x65\xb5\xa6\xe0\x6d\x51\x1f\xbc\x7a\xcc\xb9\x76\x35\xef\xdd\x08\x69\xeb\x46\xd8\x6e\x7b\x9d\x79\x98\x1d\xec\x8d\xd4\x2e\x77\x72\x93\x72\x91\xad\x1a\x45\x02\x47\x00\x98\xb7\xb6\xd0\x70\x4f\x8a\x6b\xbb\xdd\x3f\x66\xd2\xdb\xad\x16\x8c\x77\x31\x8e\x2a\x4e\x26\x53\xd2\x92\xb9\x63\xd2\x1b\x56\x9a\x4f\xe3\x48\x96\xde\xc8\x43\x30\x8b\x46\x7c\xc4\x45\x1a\x54\x86\xda\x6e\x77\xf0\x43\x3c\xed\x28\x42\xf5\x85\xe2\xad\xea\xda\x23\xca\xd6\xe1\x96\x8f\x83\x8a\x6e\x41\x3a\xeb\x3e\xea\x71\x1a\x14\x7f\x8e\x86\x9f\x26\x45\xff\x40\xb3\x4f\x6f\xb2\x75\xea\x12\xd4\x87\xa7\xea\xb7\x6a\xe0\xa5\x52\x87\xeb\x35\xa1\x9e\x10\xc3\x7b\x1e\x31\xe5\xb1\xd8\xb4\x7c\x1d\x93\x1d\xca\x00\x95\x73\x2e\xc7\xc8\xe4\xe6\x13\xbd\x1e\xc7\x17\x54\xc6\x44\x0f\xb0\xbb\x14\xd6\x25\x56\xb9\x59\xd1\xdf\xd1\x6b\x6c\xf5\x09\x49\x86\xd6\x88\xf9\x90\xaf\xdb\x31\x88\xa2\x0e\xdf\xa6\x5e\x5a\xba\x9f\x45\x56\x7e\x95\x7e\xa0\x9d\x5b\xfa\xa1\x5c\x0a\x46\xbb\x7d\x85\xba\x7a\x5e\x2c\x15\x6c\x83\x76\x82\xe6\xa1\x75\xfb\x73\xed\xb5\xfa\xac\x7b\xfc\x44\xaf\xbf\x5e\x77\xba\xb1\x9d\x7d\x41\x2f\x5f\xaf\x37\xdb\xdc\xce\xfe\x8c\x79\x44\x68\xe7\xbe\xb4\x2f\xd7\xd4\x2d\x9b\x57\x86\x80\xd1\xa3\xa4\x41\x40\xc5\x84\xbc\x6e\x00\x49\x9d\x7c\x9f\x71\x94\x41\x40\x05\x5a\xc8\x8c\x42\xbb\x60\xbd\x03\x5a\xff\xda\x61\xd8\x4e\x6e\x59\x0d\x08\x2d\x10\xd8\xeb\x5a\xc8\x66\xef\xa2\x2f\x58\x6d\xdf\x43\x10\xdf\x31\x23\x20\x0c\xf0\x97\xce\xc8\x0c\x77\x27\x2c\x95\x60\xba\xd0\x78\xd9\xfc\x5c\xb8\xd5\x4d\x99\xe6\xa7\xea\xde\x45\x33\xf4\x26\x5b\x63\xa3\x84\xea\xa1\xd4\x15\x71\x44\x51\xf0\xd2\xd5\x4f\xe3\x63\x2f\x6b\x2c\x90\x4e\xc4\x46\x75\xe0\x32\x5d\xd5\xbd\x4f\x5a\xaf\xf8\xe9\x0e\x6e\xab\x57\x85\xb4\xaa\x90\x9b\x9f\xb1\x08\x97\x55\xa5\x43\xa0\x5c\xff\x72\x31\xfc\xac\x8b\xe1\xe7\xe1\x96\xbf\x23\xfe\xf8\x32\x1c\x61\xa1\xde\xd0\x11\x58\x3d\x6e\x5b\xa4\xc5\xf5\x17\x70\xcc\x60\x56\xbf\x70\xcc\x7e\xe1\x98\xfd\xc2\x31\xfb\x85\x63\xf6\x0b\xc7\xec\x17\x8e\xd9\x2f\x1c\xb3\x5f\x38\x66\xbf\x70\xcc\x7e\xe1\x98\xfd\x63\x71\xcc\x4e\xa8\xac\x39\x66\xea\xe3\x3f\x81\x63\xf6\x0b\x27\xeb\x17\x4e\xd6\x9d\x9c\xac\x2c\xcf\xff\xc6\x0c\x24\xe8\xe1\x96\x11\xfc\xc2\xc5\xfa\xa7\xe4\x62\x9d\x50\xd9\xe2\x62\x29\x34\xf7\x0b\x17\xeb\x1f\x1c\x59\xff\x9c\xf3\xfe\x77\x3b\xd3\x3f\x9f\xb3\xa4\xa1\xb1\x73\x05\x7f\x09\x67\x09\x38\x45\xf7\x8c\x2a\xeb\x76\x5d\xfe\x53\xf0\x3b\xfe\x2b\x33\xb6\x7e\x06\x9d\xa6\xdf\x31\xa7\xd9\x45\xda\xc1\x0a\xf0\x5c\x63\x15\xa1\xde\x71\x4b\x73\x42\x1d\xb0\xa6\x0b\xfb\x51\x23\x8d\x94\x76\x11\x49\x6a\x4a\xa9\x5e\x5c\xb6\xfa\xf0\x08\xc1\x26\xcb\x87\xd4\xba\xf6\x24\x4b\x1d\xb2\x30\xb0\x44\xca\x34\x7b\xf2\xf0\x58\x8e\xcd\x23\x96\x1d\xdf\xcd\xc4\x91\x84\xe3\x31\x83\x47\x83\x79\xf0\xa7\x3b\xd0\xb2\x79\x0a\xb4\xf0\xb2\x49\xc5\x38\xb8\x89\xf6\xf9\x90\xd3\x59\x21\x32\x49\x71\x99\xb6\x93\xdc\xb4\xf6\x80\x79\x61\x4f\xc9\x26\xa5\x66\x56\xfb\xa3\xa3\xcd\xd3\x74\x78\xb4\xd9\xdf\xc7\xa8\x48\xe9\x64\x33\xc5\xfd\x3e\x2a\x53\xa4\x26\x5b\xa0\x12\x8f\xb3\xa7\xea\x87\x6a\xa6\xc4\x63\xf8\x81\xf1\x76\x5b\x33\x3c\xb2\xa7\x0f\xfb\xfd\xb2\xdf\x0f\xc3\x81\xae\x47\xca\x8a\xb0\x9d\xde\x67\x5a\xbc\xe1\xaf\xcb\x19\x75\xc8\xad\x32\xfc\x20\xc2\xdc\x33\x33\xa5\x84\xa5\x06\xff\xd7\x10\x12\xc2\x9a\xea\xdd\x22\xb3\x8b\x33\xc8\x39\x3b\xab\xf1\xac\x01\xb1\x7b\xd4\x31\x80\x57\x55\x53\x82\x38\xa8\xaf\xe2\x7e\x5f\x22\xef\x91\x4b\x38\x26\x0c\xd2\xd4\xd5\x45\x2b\x84\xf7\x38\x9a\x18\xc3\x3d\x83\x3c\xa7\xc4\xc3\xcf\xea\x8c\x79\x3d\xc4\xe6\xee\xc7\xc6\x05\x10\xf3\xc0\x7e\xaf\x71\x06\x0a\xe3\x45\x94\xb9\x33\xb2\xe7\x1d\x97\xcc\x84\x18\xbc\xa9\xc8\xa6\x71\xfb\xe6\x88\x92\x12\x57\x7b\xa1\xe3\xb6\x81\x4a\xcb\x46\xf9\x85\x2b\xdf\x3e\xb0\xcb\x9a\x4c\x81\xf9\xf5\xfb\x28\xd8\x68\x1a\x40\x69\x7a\x41\x80\xdd\x42\xe2\xc9\x34\xc6\x55\x00\x23\x2c\x77\xd7\xe4\x85\x64\xf3\x6b\x0b\xa1\xcf\x17\x19\xbf\xa0\xae\x29\xbd\x76\x33\x30\x66\x30\xe2\x91\x3d\x8f\x29\xe2\xd9\x7c\xce\x2c\xc7\xc7\xf1\xe5\xd4\x2c\x44\x6a\x78\x61\x64\x66\x18\x41\x02\x5b\xcf\xd3\x7a\xd0\x35\x5f\xd7\x55\x84\xcb\x05\x2a\x32\x22\xa0\x1a\x9c\x32\xc2\x7d\xde\x06\x74\x5d\x20\x3d\x06\xdc\x79\xfb\x67\x2e\xe7\xee\x2b\x17\x38\x6b\x5f\x24\xc5\x01\x3d\xe9\xfb\x88\x86\xbe\xba\xa3\xbc\x9d\x15\x6a\xd1\x6d\x4c\x6e\x7c\x86\xd7\x30\x4c\x74\x47\xd2\x93\xf6\x56\xf7\x68\xd9\x6c\xff\x97\xb6\x6e\xaa\xdd\xa7\x87\x13\x2a\xef\xd9\xba\xf0\x68\xfc\xfb\x8e\xfd\x67\xb4\x6e\xaa\x69\xeb\x37\x80\xda\xb3\x33\xaa\x0e\xcd\x59\xb6\x91\xc5\x19\x5b\x29\x70\x39\x3b\x6b\x9c\x2d\x8f\x14\xf3\x08\x31\x4e\x32\x52\xa6\x72\x32\x9c\x92\x4d\x2a\x27\xa3\x29\x59\xa6\x72\x72\x38\x25\xf3\x74\x48\xf2\x74\x32\x3d\x9a\x3f\xb1\x57\xeb\xd1\x7c\x30\xc0\x59\x5a\x4e\xe6\x53\xc2\x26\xd9\xb4\xdf\xcf\xb5\xfd\xbc\xfa\x98\x0c\x15\x99\x39\xc9\xa6\xe9\x10\xac\xf8\x79\xc4\x78\xb4\xc1\xf7\x92\xcb\x6c\x08\x07\x67\xaf\x13\x3e\x4d\x37\x13\x3e\xc5\xd0\xc2\xac\xdf\x9f\x21\x89\x8f\x72\xdb\x3d\xce\x93\x72\xc1\xe6\x12\x79\x4e\x65\x0a\x9f\x7f\x59\x90\xe5\x76\x3b\x99\x62\x22\x10\xf6\x89\xba\x7a\xba\x94\xc8\x74\x78\x24\x9f\x14\xb6\x4d\xa9\x28\xcf\x9a\x2a\x2d\x26\x72\x4a\x20\x32\x6d\x99\x8e\x8e\xca\x27\xd6\x39\xe8\x51\x69\x29\xd4\x4d\x2a\x26\xe5\x74\x4f\x61\x44\x36\xd9\x4c\x01\x23\xf4\x46\xb8\x52\xb8\xa1\x48\xca\xf5\x92\xcd\x28\x92\xfb\xfb\x64\x84\x09\x4d\x33\x94\x25\x65\x2a\xd4\xe2\xb8\xc7\x0c\xad\x34\x9a\xb9\x51\x77\xed\xcd\x70\x3c\xac\x48\x01\xbe\x0f\x6a\xe1\x99\xbe\x5d\xf9\x44\x4e\x2d\xdf\x5a\xfd\x4e\x0c\x1a\x30\xcf\x2a\x95\x94\xde\xb0\xb1\x24\xcb\x71\x6f\x44\x4c\xe6\xf8\xa6\xaa\xe3\xdc\xaa\x4a\x9a\x4d\x6f\xeb\x12\x41\xea\xdf\x19\x78\x3f\x55\xb3\x75\x69\x55\x96\xac\x52\x4a\xb2\x64\x96\x72\x92\x25\x79\xda\xc6\x12\x59\x02\x42\x41\xec\xd8\x82\x1d\xd8\x96\x21\x60\x16\x15\xae\x48\x96\x88\xb4\xf9\x54\xe8\xca\x04\x2d\x69\x6b\xc8\x5a\xcb\x89\x3d\xcd\x2e\x76\x91\x2e\xee\x21\xeb\x95\xb5\xa8\x29\x36\xa8\xea\xb6\xa3\xb8\x03\xa3\xa9\xe1\xca\xb4\x43\xf2\x8c\xfa\x12\x22\xc3\x66\x88\x62\x4c\xbe\xeb\xcb\x5a\xca\xc1\xe6\xe8\x91\xca\xad\x89\x48\x4b\x81\xf7\xfb\xea\xff\x49\xdd\x53\x4b\x34\xd2\x12\x1c\x00\xd1\xa1\x9a\xcb\x12\x81\xc4\xae\xa1\x0b\xf5\xea\x03\xbb\x9f\x0e\xfa\x30\xd2\xba\x0a\x93\x43\x18\x90\xf1\x91\xee\xc9\x5c\xdc\xf9\xd7\xc6\x40\x59\x92\x23\x45\x73\xb9\xe9\x7a\x7c\xe7\x89\x9c\x56\x20\x02\x30\xb1\x62\x3d\xfe\xbf\x5a\xa3\x90\x27\x8f\xd6\x6c\x8f\xbb\xa8\xcc\x19\x28\x56\x01\x3c\x47\x1d\x04\xab\x71\x49\x12\x67\x31\x91\x98\x48\xd5\xdd\x0e\xfb\xda\x7b\xcb\x7f\x55\x1b\xeb\x34\x8e\x0d\xed\x64\x1c\x68\x5c\xd1\xf3\x75\x36\xfb\xf4\xaf\x65\xc1\xd7\x01\x4c\x7a\xcf\x62\x0a\xf9\x90\x4d\x5a\x6a\x9c\x04\x4b\x56\xe2\x3d\xfd\x99\x4a\x52\xa6\x65\x52\x02\x7e\xc0\xce\xd1\xc9\x32\x1d\x1e\x2d\x6b\x0c\xbb\x1c\x0c\xb0\x44\xe5\x64\x39\xb5\x04\xce\xa6\x89\xe9\xd0\xe4\xf0\x3b\x72\x68\x50\x1c\xba\x39\xfc\xae\x23\xde\x11\xe8\x3b\xf5\x76\x33\xe7\x39\x15\xe8\xf0\x7b\x5c\x91\xc3\xef\xc3\x72\x20\xc2\x48\xb1\x17\x3a\x87\xd6\xbb\x8d\xa2\x95\x92\x75\x8a\xf8\x0e\x7f\x37\xcf\x96\x4b\x14\xeb\x97\x54\x8c\xf1\x84\xbb\x07\xcb\x34\x29\xc5\x2c\x11\x14\x1c\xf3\xa0\x83\x8f\x07\x93\x3f\x1d\x4c\xbf\xf9\xd5\x01\x89\x0f\x62\xec\x8f\x10\xb1\xf4\x8c\x66\xec\x2c\x27\x85\xfe\x21\xac\x9f\x70\x58\xe1\x67\x1b\x59\xbc\x82\xf5\xfd\xf1\x9a\x67\x2b\x36\x0b\x51\x8c\x05\x8a\x75\x1b\xd7\xfc\x2c\x1e\x50\x5c\x11\x86\xe2\x7f\xb9\x58\xb2\xd5\x8a\x8a\x03\xa0\x87\xb4\x3d\xe9\x34\xe4\x37\x56\xa0\x5f\xff\x1a\x38\x8b\xaa\xd2\x67\x30\xdd\x3b\x98\x97\xab\xdd\xc5\x1f\x0e\x6d\xf1\xf3\xac\xa4\x8f\x1f\xed\xff\xb9\xbc\xa5\xf0\xc8\x16\x9e\x2d\xd9\xfa\xbc\xc8\x44\x7e\x4b\xe1\x43\x5b\x78\xbe\xcc\xe4\x2d\xe5\x1e\xda\x72\x2b\x4e\x57\x05\x67\xa5\x3c\x58\x6d\x96\x92\xed\x6b\x53\xb9\x5d\xd5\xbe\xb5\xd5\xf8\x85\xc8\xd6\x8b\x04\xfe\xbd\xa5\xfc\x77\xb6\xbc\x89\x18\x47\xf3\xfd\x19\x50\xe2\x5a\xbf\x68\x47\xb5\x47\x7a\x7d\x80\x70\x66\x28\xbe\xce\xf2\x3c\xdb\x5d\x7a\xf4\xd0\x38\xd8\xfa\xce\xc7\x05\x06\x06\x34\x44\xa4\xc6\x41\x32\xf1\x53\xf3\x54\x43\x6d\x55\xe1\x23\xf4\xd5\x0f\x32\x36\xe7\x4d\x11\x43\x93\x5b\x69\x65\xf3\x6a\x40\x87\x78\xaf\x86\xea\x1d\xa4\x57\x8d\x22\x8f\x27\xd3\x44\xc7\x82\x40\x14\x8f\x27\xd3\xda\x0d\x2b\xe3\x67\x99\x10\xd9\x75\xca\xc1\x07\x8a\x7a\x9c\x0b\xc0\x7f\x09\xcd\x66\x0b\x2f\xb5\xa8\x53\xcf\xb2\xf2\x9a\xcf\xbc\xbc\x4c\xe7\xcd\xf4\x53\xcb\xcb\x28\x1b\x19\x9d\x7a\x1b\x9d\xad\xa0\x4f\x52\xee\x65\x30\x9d\xc1\xf8\x9f\x9b\xed\x2d\x75\xba\x5a\xac\xb3\x6c\xb9\xf4\x72\x66\xa6\x29\xd6\x48\x9d\xdb\x54\x9e\xb7\xca\xe7\x75\x8e\x97\xba\xd0\xa9\xcb\xac\xf4\x7b\x5d\xeb\x54\x9e\x7d\xa2\x7e\xe1\x95\xbe\x27\x7c\x86\x5e\x97\xed\x48\x7d\xb6\x23\x9b\x83\x03\xa9\x34\x4d\x9d\x84\x79\xd8\x50\xd3\xd2\x8c\x8e\x2e\xce\x89\x27\xfa\x9a\x8f\x9e\xa9\xbd\x9a\xc6\x69\x9a\x76\x2e\xa1\xa6\x1c\x99\xe2\xaa\xd6\x44\x98\x50\x70\x58\x0f\x7a\x22\xd6\x03\x7d\x8b\x28\x60\x88\x02\x55\xcd\xd5\x2f\x73\x73\x8c\x3c\x7f\xbd\x48\x58\x00\xe2\xfe\x43\xb3\x68\xcd\x99\xf0\x74\x78\xc4\xeb\x59\xf3\xc1\x00\x8b\x54\x02\xb9\x4d\xb8\x77\x99\x77\xb5\xb7\xd8\x1c\x89\x54\x6c\xb7\x3c\xe1\x45\xb1\x26\xbd\xf6\x48\x05\xb2\xfa\x02\xc3\xbd\x5e\x43\x8d\x42\x35\xcf\xa6\x84\x79\x27\x5e\x92\xa2\x7e\x85\x1d\x0b\x24\xf1\x78\x30\x60\x4f\xdd\xf4\x8f\x85\x26\x30\x0a\x13\x14\x94\x6b\x1f\xde\xa8\xa5\x2f\x25\xbc\xc7\x4b\x2a\x11\x26\x2c\x1d\x1e\xb1\x7a\x7a\x6c\x30\xc0\xdc\xf8\xf5\x32\x83\xf0\xa2\xac\x36\xf4\x92\x08\xc8\x9a\xf4\x04\x24\xc2\x7b\x6a\xde\xcd\x67\x31\x57\xf7\xa9\xfa\xd1\x09\xee\xed\x08\x73\xd0\x5a\x72\xe0\x8f\x00\x1a\x3c\x10\xd0\x2f\x02\x0d\x00\xb5\x42\xc9\x08\x63\x62\xe6\x87\xef\x68\xdb\x46\xe0\x87\xc2\x4d\x55\xa5\xd6\x5a\x04\x57\x22\x15\x88\x13\xb5\x0c\xa1\x35\x98\x69\x50\x91\xa9\xf4\xb0\x91\x04\x6c\x74\x0b\xa7\x9e\x9a\xf0\x09\x13\x31\xf5\x94\x91\x9a\xdc\x97\xe6\xd0\x14\xfc\x09\x00\x3c\x5b\x37\x54\x31\xbf\xe7\xee\xba\x6d\xed\xf7\xcd\x46\xef\x9a\xdf\xe2\x1e\x47\x81\xcd\x91\x3b\x0b\xf8\x46\xa4\xea\xa7\xf6\x16\x57\x75\x4f\xc6\xda\x67\xd9\x4f\x6a\xee\xec\xb4\x2e\xb2\xaa\x8b\xf8\x18\xde\xf9\x96\x03\xd3\x77\x72\xaf\x0b\x65\xf4\xad\x9a\xbf\x40\xc3\xf0\xc5\x52\xf3\xb8\x40\xe8\x0a\x46\xf6\xac\x3c\x5b\x66\xfc\x62\x93\x5d\x80\x60\x04\xd2\x96\xec\x5c\x64\xe2\x3a\x44\x37\x09\xed\x61\x99\x95\xf4\xcc\x94\x02\xaf\xc8\xaa\x08\xae\x4c\xed\x56\x81\x50\x33\x0c\xc9\xe4\xac\x94\x74\x5d\x62\xb8\x8d\x9a\xde\x5b\xd4\x0b\xa2\xae\x05\x1c\x07\xb2\xf1\xa3\xd3\x76\x2a\xf1\x5a\xcc\x90\x16\xa8\x1e\x24\x92\x98\x70\xe3\xdd\x84\x71\xea\xda\xaa\x0c\x3b\x8d\x56\x7b\x21\x1f\x3c\xe6\xbd\x0c\x6a\x78\x17\x2f\x3e\xaf\x51\xfc\xa7\x83\xed\xc1\xaf\x62\x12\x5f\xc4\x0a\xbd\x7a\x39\x07\x7f\x42\xc7\xe3\x8f\x7f\xc2\xc7\x07\x9e\x5f\xf4\xda\x7f\xb5\xa3\x67\x05\x89\xe3\xfa\x8b\x93\x18\xea\x7d\x2c\xf1\x37\xe0\x0d\xe7\xe3\xc7\x72\x10\xe3\x6a\xaf\xb1\x82\xf5\xa8\x44\x53\x51\x10\x4e\x52\x27\x02\xc8\xef\xe8\xf5\x55\x21\xf2\x28\x7e\x30\x10\x83\x07\x31\x84\xfc\xe0\x85\x51\x06\x04\x67\x0a\x4b\x45\x8f\x45\x8c\xcb\x22\x7a\xa0\x7a\xf5\x7c\xef\xa8\x26\xab\x06\x9c\xb5\x60\x2c\x00\x50\x56\x84\xdf\x41\x61\x0a\x83\xf9\xa2\x3c\x7c\xe3\xdf\xb0\x32\xe4\x0f\xc9\x8a\xf3\x3a\x98\xaf\x2d\xaf\xd9\x1f\xe1\xc9\x70\x4a\x58\xb7\xe4\xb0\x5b\xf6\x10\xef\x39\x49\x31\x61\x98\xf0\x7e\x1f\x9c\x6b\xeb\xde\x6f\xd4\x25\x35\x96\x84\x17\x99\xb8\x28\x43\x52\xb6\xc0\x53\x53\x55\x27\x40\x04\x9d\x41\x75\x73\x09\x49\xac\x13\x17\xa2\xe0\xec\x2f\x74\x2c\x08\x2b\xcf\x6c\xf5\x5d\x02\x3c\x4b\x11\x58\xc5\x39\x20\x0a\x6e\xaa\x2e\x19\x40\x80\x5e\x19\x7b\x57\xa3\xd8\xb9\x60\x87\x21\x9d\x59\x77\x7c\xed\x62\x70\x87\x69\x5a\xf5\x15\x61\x5d\x11\xc6\x2f\x8b\x4f\x5d\x4f\x9c\xee\x31\x6e\x9b\x11\xb8\xaa\xd4\x8d\x4b\x9a\x02\x92\x10\x51\xeb\xea\x1a\x5a\xfa\x7d\xb1\xbc\x56\xa4\xde\x76\x8b\xd4\xf9\x5c\x0b\x3a\xcb\x9a\x2e\xc5\x2b\x42\x21\xe2\x53\x99\x4e\xa6\x84\x26\xb3\x05\x5b\xe6\x82\x72\xa8\x60\x3f\xd2\xc9\xf4\x16\x56\xcd\xb2\xc8\x72\x9a\xdf\x93\x5b\x4a\x93\xe5\xad\x2c\x58\x76\xff\x86\x98\xf6\xdf\xde\x9a\x69\x3a\x52\x18\xe7\x76\x5c\x7e\xe4\xd3\x3f\x40\x6e\x04\x0f\x5e\x43\xce\xd6\x10\x3b\xf4\x40\x5e\x51\x6b\xb5\x7a\xbf\x79\x15\x50\xaa\x08\xbd\xe5\xf5\xa3\xc7\xa7\x10\x6f\x2b\xbd\x5e\x64\x5c\x16\x2b\x7b\xa8\x2e\xa8\x3c\x73\xbe\xd2\x02\xab\xc3\x10\x3e\xd6\x1d\x8c\x0b\x84\x8f\x4d\xed\x31\x45\xf8\x58\x1a\x45\xe3\x4a\x1d\x1e\x5e\xe4\x74\x4c\xd5\xaf\x73\x51\x5c\x95\x54\x8c\x99\xfa\xb0\xe5\x0b\xf5\xf1\x29\x13\xab\xac\xdb\xc7\xee\x39\x79\xab\x61\x5f\x86\xba\x91\xb3\x33\xf0\x9b\xe3\x69\x42\x08\x74\x38\xc4\x44\xa0\xd1\x10\x03\x0b\xe2\x8b\x70\x63\x44\xc1\x0d\x99\xc2\xe6\xeb\xd3\x97\x3f\xfd\x76\x21\x7f\xfd\xf0\xe1\xe2\xcd\xe3\xab\x39\x17\x9b\xdf\xbc\xbe\x78\xb6\x79\xfc\xd3\x7f\x5c\x5e\xff\xfa\xcd\xef\xd7\xee\xda\x5d\xbb\xe0\x7e\xe9\x8d\xb9\x4b\xc1\x1f\x6c\x1a\x60\xb2\x69\xdd\xfb\x3b\x5a\x3e\xae\xdb\x40\xd2\x6b\x1e\x8f\xd5\xad\x41\x51\xab\x57\x9c\x9c\x99\xb2\xf6\x2a\x3f\x6b\xf5\x4f\x6b\xd2\x48\x6a\x3e\x60\xab\x09\x75\x71\xab\xdb\xdb\x77\xe1\xde\x68\x4b\xb5\x7d\xff\x03\xe0\xf1\x9c\x40\xec\x20\xd0\x23\x9f\xb2\x41\xac\xab\x67\x70\x33\x2f\xc7\x02\xfd\x1a\x13\x85\x38\xc6\x02\x8d\x46\x10\x79\x6a\x46\xcb\x72\x2c\xab\x8a\x14\xbb\xaa\x3c\xfa\xce\xd5\x79\xf4\x7d\x5d\x47\xa0\x6f\x87\x80\xf1\x77\xd5\x3b\x1c\xb9\x7a\x87\x87\x8d\x7a\x23\x55\xcf\xc8\xff\x4a\x9c\xd4\xb0\x8b\xf0\x71\x81\xf0\x98\x27\x35\x6c\x23\xa0\x4d\x2d\x44\x23\x7c\x9c\xd9\x02\xea\x18\x20\x7c\xcc\x10\x1e\xdf\x54\xb8\x05\xa1\xa3\x21\xf6\xe1\x52\xa1\xcc\xfb\x51\x8a\x43\x4d\x28\x1e\x62\xa2\xfd\xbb\x75\xee\x74\x8e\x8c\xe3\xe0\x92\xf2\x06\x53\xdf\x53\xb7\x8b\x46\x69\xda\xd1\xa7\x38\x76\xb5\x10\x25\x37\x15\x1e\x1f\x06\x0a\xf5\xfb\x2c\xf1\xee\x47\x24\x70\xab\x1a\x11\x78\x8c\xb4\x94\xd5\x5c\xda\x46\x4d\x4e\x03\x53\xe1\x31\x91\x9b\x17\x13\x90\xf7\x37\xeb\x4c\x4a\x2a\xf8\x58\x12\x1b\xa5\x7a\x2c\x2a\xdd\x44\x65\xa2\x43\xb4\xb8\xc2\x88\x76\x88\x4a\xe0\x8d\xea\xb8\x4a\x94\xe4\x99\xcc\xc6\xb2\xd2\x2e\x37\x45\xe8\x48\x52\xc7\xa2\x08\xba\xa9\xf4\x68\x46\xb8\xd5\xd4\xf8\x70\x22\x69\x29\x8d\x2f\x4c\xc3\x60\xd9\x11\xb6\xd7\xce\x03\x28\x57\xef\x0c\xdc\x58\x75\x8a\x00\xa6\x2d\x2a\xf2\xee\xed\xd9\xc9\xf3\x17\x6f\x9f\x7d\x78\xf5\x6e\x1c\x9f\x9d\x79\x9f\x67\x67\x31\xe4\x9e\xbe\x78\x6f\x73\x4e\x5f\xbc\x37\xa9\x2f\xfe\xed\xc5\xf3\x9f\x4e\x5f\x98\x0c\xf3\x65\xf2\x7e\x7c\xf1\xf2\xd5\x5b\x9b\xa5\x3f\xce\xce\xe2\x16\xe9\x08\x6b\xac\x60\x25\xf5\x86\x5a\x35\x95\xfa\x3a\x0e\x24\x4b\x2a\x4f\xd9\x8a\x16\x1b\xd9\xa4\x5d\x2d\x2e\xc7\xcd\x1b\xa9\x53\x1f\x34\x37\xef\xdb\x42\x66\x1e\xcf\x32\x4d\xd3\xba\x63\xfb\x92\xae\x53\x10\x25\x43\x90\xad\x40\x49\xb6\xdd\xf6\x24\xee\xf7\xbb\x35\xa4\xd7\x0a\x69\x57\xf7\x2c\x07\x74\x8a\xd1\xfa\x17\xf8\xc6\xcf\xd2\x67\x1b\xe8\xc9\x66\xa1\x66\x01\x63\x70\xaa\xf0\x52\xd5\xf3\xb6\x5d\x35\x15\x34\xe5\xa9\x87\x73\x5c\xff\x1c\xb3\xda\xf4\x40\xa6\xac\x82\x81\x84\x6a\xfb\xcb\x7a\xec\x7f\x8c\x0b\xcf\x78\x21\x2d\x14\x21\xa8\xa5\x24\x64\xa3\x28\xb6\x65\xda\x1b\x91\x59\xba\x3f\xf2\x15\x2d\xf0\xcd\x12\xb4\x8a\x10\xe4\x3a\xa4\xb1\x49\x4b\x4b\x90\x6e\xf0\x58\x55\x22\x1b\x87\x2b\x72\x84\xbb\xd6\x20\xbd\xa5\x45\x55\x19\x9a\xe3\xbd\x65\xda\x1b\x3a\x1e\x84\x4c\x37\x4e\x5e\x7b\xa4\xef\xac\x32\xdd\xc0\xa8\x8e\x06\x83\xd9\x13\x79\x84\xcb\x7e\xbf\x9c\xcc\xa6\x3a\xda\xce\x1e\x74\x58\xd7\xaa\x4a\xd0\xe3\xd1\x33\x68\x31\x5b\x44\x9a\xa6\xfe\x22\xd8\xfd\xf7\xd3\x8c\x61\x1a\x94\x2d\xb6\xdb\x9e\xc0\xfd\x7e\xa8\x8e\x68\xb4\x44\xda\x4d\xc0\x8e\x28\xf2\x5f\xaf\xb2\x6c\x00\x8b\xf0\x81\xc5\x2b\xd2\xcc\x76\x3a\x9d\x15\xb0\x11\xda\x8c\x0e\x40\xa6\xf3\x0d\xb7\xae\x05\x35\x1b\x59\xfa\xfc\x0b\x7c\x53\xf1\x84\xd3\xcf\xf2\x94\xcd\x3e\x05\x44\x77\xea\xfc\xc1\x03\x10\x05\x5e\x6a\x20\x93\x6c\x25\x3f\x1d\xe1\x9a\x57\x34\x3a\x12\x4f\xda\x05\xb4\x47\xc0\x89\xd8\x1f\x4d\xeb\x8b\x63\x22\xa6\x7b\x1b\x8d\xdd\x55\x8f\x7a\xfc\x98\x8c\x7a\xa9\xdb\xb5\xed\x76\xb9\xdd\x66\x28\xc7\x15\x59\x78\xaf\x51\xb1\xe1\x9d\x38\x45\xf3\x0d\xf7\x8d\x8e\xea\xb9\xe3\x8a\xf0\x44\x32\xb9\xa4\x69\x6c\xae\xe6\x98\xf0\xc4\xfc\x54\xa4\x1a\x4f\x28\xbf\x54\x04\x1a\x4f\x32\x71\x71\xa9\x00\x9d\x27\x97\x54\x80\x93\xc5\x38\xae\x3f\x4a\x5d\xa8\xe0\xe9\x5a\x95\xcd\xf3\xd7\xac\x94\x94\x53\x01\xdf\x05\x9f\x51\xfd\x63\x3e\x87\xbf\x3a\x88\x44\xa3\x8c\x4e\x7a\xb6\x5c\xda\xd4\x12\x92\xe9\x8a\x49\xf8\xb1\x16\x74\x4d\x79\xb3\x5d\x93\xf6\x8e\xcf\x9a\x6d\x2d\x5d\x13\x9d\x7b\x62\x32\x55\xe3\x3c\x67\x10\x90\xb1\xb9\x54\x2d\x04\x6b\x88\x1b\x5b\x36\x62\x1a\xc5\x96\x9b\xb5\xc2\xf0\xda\xc7\x25\x4f\x66\x57\x79\xb7\x93\xf8\x20\x86\xbc\x45\xce\xc4\xbd\xfa\x80\x92\x3b\x7a\xd8\xac\xb2\xf2\x53\x40\xc7\x74\x18\xa0\x2d\x51\x50\xb0\xd2\xe5\xf3\xc3\x55\xe5\x94\x27\xf9\xd3\x74\x78\xc4\xf7\xf7\x2d\xb7\x17\x98\x7c\x71\x12\x83\x82\xa8\x65\xd2\x22\x4e\x46\x78\x1c\x27\x26\x19\x35\xd2\x89\x82\xe2\xb1\x56\x80\x6b\x24\xef\xef\xe3\x0a\xac\x56\xc1\x10\x59\xec\xef\x1f\x09\x4c\x93\x0d\xd7\xaa\x2a\xaa\xb5\x10\xaf\xb3\x56\x28\x50\x74\xc6\x52\x52\x81\x3d\xba\x43\x7d\x23\x89\x3d\x26\xac\x02\xcb\x2e\xef\xd2\x32\x2e\x09\xc5\x2e\xaa\x2d\x05\x05\x1a\xc7\xba\x94\xd6\xe7\x72\xe3\xb9\xe9\x10\x6b\x1c\x13\xa6\xb0\x62\xd1\xa1\xe9\xf6\x47\x47\xc5\xd3\x74\x7f\xd4\xef\xf7\xd8\x51\x61\x97\x2e\x4b\x8b\xa7\xe9\xf0\xb8\x3e\xc7\xc5\x74\x4c\x15\x88\x20\x40\x0e\x1d\x4d\x83\x2c\xac\x11\xfa\xcc\xd6\x8f\x64\x11\x29\x72\xdb\x8e\x52\x9b\x79\x9e\x6b\x0a\x97\x5f\x94\x31\xde\xcb\xfa\x7d\x24\xd3\x6c\x10\x1f\xc4\x03\x49\x58\x1a\x1f\xa8\xfd\xc9\x92\xd9\x22\x13\xcf\x24\x1a\x3a\xcd\x1a\xc4\x8e\xe3\x83\x78\x1c\xc7\x78\x80\x64\x2a\x10\x47\x12\xb6\x4a\x22\x88\x21\x1d\x20\xc4\x7a\x3d\x08\x1e\xdd\x63\xd8\x44\xfc\x38\x88\x31\xde\x6e\xe3\x24\xae\x88\x4c\x78\x21\x56\xd9\x92\xfd\x85\x06\x9c\x28\xcb\x84\x95\xcf\xce\xcb\x62\xb9\x81\x10\x4a\x24\x33\xc3\x62\x88\x12\x85\x28\xcd\x88\x28\x0c\x83\xde\x73\x18\x45\x73\x18\x05\x44\x05\x8f\x93\x18\x13\xda\xef\x67\x5e\x38\x6c\x54\xb8\x99\x52\x35\xd2\x7a\x2c\x01\x16\x8d\x1e\x18\xad\xd7\x4b\xd5\x50\xfd\xdc\x93\xf3\xd7\xe1\xcb\xf9\x11\x23\xed\x12\xa9\x59\x76\x04\x19\x01\xbd\x93\x7b\x42\x83\x1a\x5e\x00\x14\xdc\x39\xc2\xfe\x4a\xa9\xf9\x08\xba\x04\xe3\xe3\xc6\xd3\xc6\x43\x10\xcd\xc7\x2e\xe8\x80\x51\x47\x90\xc4\xb1\x09\x0d\x0d\xea\x60\x47\xf5\xa9\xf3\x30\x88\x78\x9a\x0e\x5d\x49\x31\x55\x07\xdd\x39\x0e\x90\x4f\xc5\xf1\x44\x9d\x03\x2d\xa3\x93\x44\xec\xcb\xc1\x08\x57\x34\x75\xa7\x4f\xbd\x47\x4c\x64\xf3\x11\xc4\xde\x76\x19\xc2\xcb\x70\x07\x9e\xa5\x4d\xa8\x81\x77\x1d\x12\x8d\x94\x2c\x7d\xa3\x96\x6a\xc5\x38\x62\x56\xf9\xdd\xea\xb5\x61\x52\xa6\x19\xd9\xa4\xc3\xa3\xcd\x93\xec\x68\xa3\xc5\x1c\x6c\xb2\x99\xf6\xd2\xb4\x98\x6c\xa6\xf8\xa6\x4c\x37\x46\xca\xa1\xd5\x50\x8c\xc8\x67\x93\x96\x47\x9b\x27\xb6\x3d\xa8\xb9\xd4\x78\xc5\xc7\x64\x68\x99\x2e\x2d\x7d\x57\x98\x59\x97\xd8\xdf\x94\x0a\x22\x7b\xac\x15\xb8\x42\x0c\x92\x25\x5b\x31\x49\x45\x1a\x8f\x63\x6d\xd1\x02\xb1\x46\xef\x84\x17\x03\xf3\x31\x26\x01\x41\x69\x9c\xc4\x1e\x89\xa8\x01\xfc\x79\x91\x53\x00\x72\x22\xd2\x47\xbf\x4e\xd3\x54\x12\xae\x88\x41\xa6\xee\xfa\xc2\xdf\xd0\xe2\x69\x3a\x3a\xda\xdf\x2f\xd4\xca\x40\x49\xd4\x6a\xa3\xc0\x58\x53\xa6\x0c\xdf\xf0\xb4\x30\xab\x65\x82\x47\xa6\xbd\x91\x59\x0b\xb0\x8e\xe7\xc7\x42\x9f\xc8\x24\x56\x77\x84\x4e\x52\x09\x16\x26\x86\x10\x9a\x47\x26\xe7\x59\x49\x5b\x53\xaf\x25\x14\x0d\x86\xd4\xee\xb5\xd8\x33\xaf\x31\xb8\xe4\xcc\xdc\x60\x21\xa4\x3f\x3f\xa9\xae\xbc\xfd\x7d\xe9\xe6\xd7\x98\x9c\xac\xe7\x26\x52\x39\x18\xf9\xb3\xd3\x33\xea\xf7\x11\xdc\x0c\x5c\x65\xe3\xe6\x64\xe3\x7a\x62\x42\x4d\x4c\x51\xb7\x35\x27\x4b\xd4\x31\xfc\xbf\xb1\x82\x43\x9c\x02\xef\x12\x89\xd4\xe5\x0e\x5d\xe8\xf5\x7d\x57\x0a\x13\xa1\x56\x89\x7e\x96\x1d\xf8\xb8\x6d\x41\x6a\x28\xd8\x1f\x35\xd7\x85\x14\xe9\x90\x64\xfe\xba\x64\x7a\x5d\xbc\x38\xa5\xde\xb2\x64\x70\x8b\x3d\xfa\x75\x2f\x4d\x4b\xdc\x5e\x87\x6c\x30\xc2\xe4\xd1\x63\xf5\xc0\x3c\x86\x3c\x79\x2c\xd3\x6c\xac\x68\xd6\xa2\xdf\x47\x45\x3a\xc2\x63\x88\x6d\x2f\xe1\x4b\x5d\x03\x1a\x58\xec\x3a\x67\xf5\x3a\x7b\xcb\x29\xb7\x5b\xdd\xd3\x76\x3b\xd4\x0f\x0c\xf5\x55\xf4\xfb\xea\x81\xca\xd5\x05\xac\x7e\x88\xc1\xc8\x5f\x76\x08\xf5\x64\x64\xef\xf1\xb9\xc2\x4a\x71\x76\x1e\xd7\x0b\x8f\x8f\x77\xf2\xfa\x4d\x19\x60\xf6\xef\x92\x08\xc8\x27\x43\xb8\x75\xed\xba\x0d\x24\x26\xcd\x9a\xb7\x73\xae\x42\xbc\x2a\x8f\x73\xf0\x7c\xc1\x38\x05\x6f\xfc\xdf\x1e\x62\xf2\x82\x5f\x2c\x59\x09\x1c\xb7\x87\x98\xbc\x14\x94\x43\xe8\x85\x6f\x1f\x62\xf2\x1b\x2a\x56\x19\x57\x1f\x8f\x30\xf9\x71\xa3\x63\x32\x7c\xfb\x2d\x26\x6f\x0b\x71\x45\x2f\x98\xce\x7b\x8c\xc9\x7b\x26\x32\x09\x0d\xfe\x1a\x93\x9f\x3e\x89\x8c\x71\x93\xf9\x1d\x26\xef\x0b\xd3\xfe\xb7\xdf\x63\x72\xb2\xce\xb8\xfe\x7a\x3c\xc4\xe4\xc3\xa6\x2c\x75\xc1\xc7\x23\x55\x50\xc8\xcd\xc5\x46\x0f\xed\xf1\x21\xe8\xe7\x43\xbc\x30\x3d\xb4\xd7\x46\xb2\x3a\x56\xb8\xfa\x7e\x42\xdc\x9b\x3f\x66\x79\x9e\x8d\x05\x7a\x34\xc2\x04\xc2\xa4\xfd\xb0\x29\xc7\x02\x7d\x8f\xc9\x2b\x2e\xa9\x58\x0b\x2a\xa9\x50\x0d\x3e\xc2\xe4\x79\xc1\x25\xfd\xac\x7a\xfb\x16\x93\xd7\x5a\xdc\x3a\xd6\x62\xe0\x1f\x19\xf4\x64\x12\x7e\x8d\xc9\x4b\x9a\xc9\x8d\xa0\x2f\xd9\x92\x9e\xd0\x4c\xc0\xc2\x3c\x52\xe9\x7e\xc2\xe8\x7b\x4c\xde\x2f\x33\x39\x2f\xc4\x4a\xe5\x63\x62\x64\x91\x10\xc0\x4a\x15\x38\xc4\x64\x56\xf0\x4b\x2a\x24\x15\x6a\x5c\x8f\x1f\x62\xb2\xce\x44\x69\xbe\xbe\xc7\x64\xbd\xdc\x5c\x30\x0e\x5c\xd8\x11\x26\xe5\x82\xad\x20\x07\x13\xad\xac\xfa\x6a\x37\xbf\x8a\x27\x30\x79\xff\x65\x76\x4f\x02\xa3\xc9\x13\xe3\xf7\x14\x97\x3f\x3a\xd4\x5c\xd0\x6f\xd5\x6d\x09\x4b\x9c\x69\xd6\x68\x79\x9b\x72\x96\x56\xe5\x75\x38\xb5\x48\x2c\x07\x0e\x61\xb2\xd1\x92\x75\x5f\xeb\xc2\xd1\x6c\x34\x01\x95\xb8\x96\xfb\x95\xfa\x94\x49\xba\x1e\x20\x53\x48\x9d\xdc\x38\x7a\xb2\xbf\x1f\xc5\x03\x9a\x08\x9a\x95\x05\xc7\x95\xd4\xc1\xd6\x40\xb1\xad\x0c\xb3\x20\x9d\x5a\x89\x34\xdc\x4e\xfd\xb6\xb5\xca\x78\x1d\xc2\x54\xc0\x64\xc2\xbc\x47\x63\x8c\x9b\x88\x8c\x7f\x3a\x5b\x65\x33\x51\x94\xaa\xac\x6d\xcb\x0b\xd4\x9a\x8a\xe4\x8a\x71\x4e\x05\x11\x95\xb6\x5d\x16\xc0\x0c\x45\x4b\xdc\x0d\x13\x73\x32\xa3\x3c\x13\xac\x88\x66\xda\xca\xeb\x9c\x46\xcc\x41\x76\xfe\x91\xc7\x03\xe1\xc6\x33\xb3\x14\xc2\x47\x1e\x3b\x05\x03\x57\x3a\x6d\xab\xde\xc8\x14\x98\x03\x0c\x5b\xa1\x07\x06\xb3\x1b\x9e\xa3\x22\xf1\x58\x9f\xe4\xa6\x34\x63\x18\x53\x32\x93\x9f\xc7\xbe\x70\xc4\x58\x0a\x95\xe9\x1c\x70\xe6\x5e\x66\x39\xc3\x5a\xf3\x0d\x95\x0e\x91\xce\x6f\xbf\x93\x8d\xf8\x6e\x53\x8f\x17\x34\x1e\x90\x24\x60\x97\xbe\x57\x6b\x36\x8d\xcb\xc4\x97\x1d\x6b\xc8\x17\x56\x1b\xa0\x59\xdd\xef\x93\xd7\xc1\xb3\x9b\xf3\xe6\x78\xaf\x31\xef\xd3\x17\xef\xc9\x8d\xaa\x6d\xe6\x5b\x76\xe7\xab\x21\xb7\xbd\xd7\xc0\x91\x3a\xd3\x7b\x8b\xf0\x9e\x4c\x37\xc4\x9b\x0f\xa2\xa4\xdc\x6e\x6f\x2a\x92\xd9\xad\xf1\xaa\x87\x64\xbf\x46\x55\x84\xe4\xea\x05\x24\xcd\x32\xe6\x61\x48\xd6\x7a\x83\x68\xd2\x34\x3c\xf2\xef\x25\x43\x4f\x6a\x50\x3b\xd3\x81\xaf\xd9\xf9\x92\xda\xf1\x4b\x13\xfd\xe7\xbe\xd8\xe0\xb1\xc6\x06\x0a\x59\x16\xbb\x95\x68\x14\x02\xa0\xdb\x2d\xac\xb7\x11\x25\x14\x08\x13\x5f\xa7\x46\x73\x9b\x5b\x96\x10\x9e\xd8\xa4\x08\x08\x1b\x28\xbe\xc9\x5c\x41\xf5\xb8\xab\x65\x15\x9e\xe8\xc9\x08\xc2\x34\x23\x32\xb9\xa0\x52\xcf\x15\xb1\xc0\x39\xfb\x71\xa3\x23\x0f\xd2\x08\xca\x8c\xa3\x49\x3c\x60\x83\x78\x1a\xe3\x3d\x59\x33\xd2\x20\x28\x97\x9a\x66\xc6\x73\xc4\x30\xb4\x2f\x48\x89\x2d\xf4\xb9\x3e\x42\xfb\xa9\x75\x2f\x83\x61\xe5\xd4\x1b\xf3\x8c\xe5\x94\x4b\x36\x67\x34\x3f\x3b\xbf\xb6\xf1\xca\x34\x03\x2e\xb8\x65\xbb\xfb\x68\x89\x55\x64\x83\x25\xce\xcf\x3c\x90\xfc\xa2\x3d\xdf\xb9\xc7\x7a\x63\x0f\xd0\x9f\xb6\x93\x3f\x7d\xfc\xf8\xf1\xe3\x14\x7f\x44\xc9\x37\xc7\x1f\xf1\xc1\x05\x11\xcd\xf4\x89\x4a\x9f\x1e\x5c\x10\xd6\x4c\xbf\x51\xe9\xd5\xc1\x05\x29\x9a\xe9\x1f\x93\x83\x0b\x92\xa5\x07\x93\x3f\x7d\xbc\xfa\x58\xaa\x8a\xa5\xaf\x50\x44\x8d\xdc\x4d\xd2\xb2\x1b\x8c\x49\xa6\x3a\xc3\xa7\x9f\xf5\xa5\x50\x52\x89\xc0\xe2\x41\xef\x9a\x28\x36\xeb\x32\x2c\xb8\x4d\x39\x80\x6b\x99\xd0\xcf\x54\x5d\x41\x47\xe2\xc8\x72\xb9\x84\x55\x1a\x75\x94\xb6\x83\x15\xa6\xeb\x5c\x2c\x8b\xf3\x6c\xd9\xef\xbb\xda\x55\x70\x18\x56\x1d\x18\x39\xc4\xa0\x72\x02\x1c\xbb\x12\xf4\x74\x5f\xf1\x9c\x7e\x4e\x87\xfe\x8d\x75\xc5\xe4\xa2\xd8\xc8\xb3\xda\xa1\x57\x80\x73\x19\x95\x49\x59\x6c\xc4\x8c\x3a\xc5\x2a\x49\xe2\x5f\x8d\xe2\x86\xda\x55\xe3\x9b\xb5\xbe\x8b\xd6\x77\x46\xe2\xd8\x8e\x99\xfe\xc7\x26\x5b\x86\x61\x12\x36\xc8\x29\x79\xc1\x5b\xa9\xfe\x34\xd5\x6d\x42\x90\x17\x3a\xb0\x23\x1f\xc4\x07\xf1\x17\x80\xab\xc6\x50\x8f\x35\x86\x1a\x7d\x17\x02\x5f\xa3\x7a\xa0\x9e\x09\xf1\xaf\x62\xa3\x1a\xac\x90\xb4\x36\x44\x45\xbe\x5a\x1b\x3a\x1e\xfb\x90\x19\x0f\xe4\x20\x46\x1f\x3f\x5e\x0d\xb0\xd6\x75\xc3\x4d\xd8\x54\x79\x50\x46\x17\x09\xd2\x3b\x1e\x8a\x9e\x05\xf0\x1c\x37\xb8\xcb\xea\xac\x23\x1e\x40\x5d\xcf\x99\x98\x6d\x96\x99\x88\x7e\x54\x98\x14\x42\x00\x01\xfa\x12\x36\xce\x6e\x14\x63\x8d\xc9\x34\xdc\xce\x11\x27\xa2\xe6\xf6\xa4\x1e\x3c\x0c\x78\x5b\x13\x76\xd6\x88\x4d\xa9\x4f\x4a\xcb\x45\x9a\xbb\xce\x79\x2a\x26\x74\x7a\xac\xfe\xb1\x32\xdb\x71\x8c\x92\x01\x8e\x6d\x67\x6b\xc4\xf1\xf1\xc6\x22\x50\xae\xdd\x89\x68\x0d\x4e\xec\xaa\x34\xed\x7d\xbd\x2b\x2c\xa0\x28\x78\xf0\xa7\x8f\x07\xdb\x8f\x07\xbf\x3a\xb8\x00\x50\xf4\x25\x36\x35\xfb\x4f\x0d\x28\xac\x64\x9a\x59\xfc\x10\x54\x30\x8d\x6a\x2e\x51\x89\xb1\xbd\x63\x15\x42\x68\xd9\xea\x77\x09\xca\x35\x92\x38\xe4\xa5\x02\x36\xf9\xce\x86\x16\xaa\xb6\xd7\x9a\x00\x4b\x43\xf7\x90\xc0\x63\x2f\x6f\x85\x14\xe9\x35\x99\x62\x7d\x7f\x23\x89\xc7\x97\xf6\x32\x77\x93\xba\x6c\x4c\x0a\x83\xd1\x00\x2a\xc8\x35\x28\xa2\xba\x52\xd7\x3b\x04\xf0\x83\x78\x1b\x63\x8d\xc2\xe2\x18\xbb\xb7\x7e\xb5\xf3\xfa\x66\x00\xb6\x6a\x0f\x6e\xbb\x68\x25\x15\x2b\x00\x54\xaa\xa1\x93\xcd\x11\xeb\xf7\xd5\xca\x05\xa3\x25\x66\x3c\xcf\xce\x97\xba\x5a\x69\xc9\x61\x75\xee\xbd\x17\x56\xa7\xb5\x5e\x70\x7d\x43\xc4\x96\xb7\x31\xc3\x5d\xfb\x3b\x90\xf5\xe4\x31\xf0\x65\xd2\x34\xbd\x46\x12\x57\x88\x91\xd0\xb0\xff\x20\x0a\x7e\x11\xf1\xcd\xea\x9c\x8a\xa8\x98\x7b\x43\x8d\xe6\x85\xf0\x87\xeb\x0e\x88\xc4\xdb\x2d\xdb\x6e\x11\x4b\x61\x1b\x89\x02\xde\xd4\xa9\x68\xe4\x8a\x4a\xf7\x26\xcc\x11\x33\x18\x34\xac\x03\x65\xac\x0c\x92\xb3\xb5\xa0\x73\xf6\x19\xe1\x5e\xaa\x49\x57\x97\x10\xc0\x27\x7a\x69\xa1\xa5\x28\xb7\x2f\x63\x46\xcb\x48\x5d\x33\x51\xce\xe6\xe0\x6c\x53\x46\xba\x09\x5a\x36\x83\xa1\x2a\x84\xea\xf4\x97\xc0\x5f\x8e\xf9\x10\xb7\x28\x4a\xb9\x13\xd4\x26\xf4\xd4\xf2\x6f\xac\x42\x32\x25\xd2\x29\x83\x38\xaa\x8f\xf8\xf3\x09\xdc\x7a\xf6\x96\x07\xeb\x9e\x9d\xca\x59\x02\x03\x67\x79\x22\xa7\xee\x42\x03\x90\x0b\xbe\x5a\x72\x8f\xa2\x58\x23\x81\x8f\xdd\xfe\x2c\x91\x20\x1c\xf6\xcd\xdb\xa4\x95\x9a\xfa\xd8\x95\x11\x9d\xbc\x2f\x55\x25\xf6\x81\x52\x3a\xa1\xf6\x3d\xaf\x45\x20\xdc\x39\xa8\x8a\x92\x22\xe5\xc9\xbc\x34\x0f\xf9\x9d\x3d\xc1\xed\x78\x90\x7c\x73\xb0\x63\x21\x8d\x1a\x7c\x29\x15\x66\xd1\x2e\xc8\x40\x0d\xd7\xa5\x07\x76\x25\xf3\xce\x5b\x76\x0b\x46\xb5\xcf\x16\x05\x54\x8e\xb4\x9d\x6b\xf4\xb6\xd7\xe5\xeb\xba\xd6\xb9\x7e\xa8\x43\x65\xf0\x50\x8a\x2b\xc2\x43\x45\x37\xaa\xa0\x6b\x79\x89\x2b\x12\x24\x62\x9a\xc5\x66\x5f\x3a\x76\x4d\xcc\x07\x1d\x79\x14\x09\xfd\xcc\x4a\x59\x9e\xa8\xf7\x32\xc5\xc7\x19\x2a\x12\x41\xb3\x3c\x67\xc2\x24\x85\x38\x0e\x75\x3f\x4c\x5f\xf3\x26\x74\xf5\x38\x53\x24\x55\xc8\xef\x47\x6f\xa6\x75\xa3\xc3\x63\x28\x65\x26\x4d\x77\x09\x2b\x7f\x64\x02\xcc\x4f\xaf\x41\x59\x39\xbc\xc2\x66\x43\xc2\x61\xb2\xeb\xdb\x43\x62\x77\xc7\xb6\x9f\x1a\x6d\xd3\x3d\x23\xfd\x08\x2a\xe5\xfc\x13\xbb\x86\xd2\xee\x79\x45\x08\x35\x29\xfc\x85\x8c\xea\x0a\x58\x82\xd1\x2b\xa7\xde\x8e\x62\xaf\x54\x8c\x11\xae\xd5\x87\xee\xf2\xa3\xa4\x95\x75\x1b\x6e\x94\xa4\x31\xe1\xc4\x18\xc4\x04\xe6\xa3\xf2\x2c\x99\xbb\xe8\x23\xa8\x4b\xdd\xc1\x29\x34\x05\x5d\x4e\xdf\x82\xc1\x3f\x04\x4e\x42\xe7\x49\x33\x9d\xe0\xf8\xe3\xc7\xd8\x17\x35\xe2\xaa\xe5\x8f\xca\xe0\x16\x1d\x5a\x59\x5c\x1b\xe7\x30\x90\xe6\x70\x28\x24\x16\x28\x3e\x38\xcf\x4a\x7a\x10\x83\xf6\xb1\x7d\x46\x65\xb9\xc9\xcf\x50\xb3\x12\x36\x43\x37\xea\xeb\x9f\xe8\x75\x89\xda\x2a\xce\x8a\x4a\xa2\xa5\x79\x60\xba\x9a\x09\xf0\x6f\x7f\x12\x0c\x58\x3e\x16\xdd\x35\x86\x99\x64\x79\xfe\x92\x2d\x29\x69\xa4\xe2\x6a\xcf\x77\x66\xdc\x70\x59\xcc\xc9\x95\x0e\xaa\xea\x0e\xde\x38\x3e\x88\x49\x8d\x18\x42\x90\xdb\xec\x53\x97\x85\x23\xee\x61\x8f\xbb\xeb\x5d\x50\x09\x8c\x71\x0e\x47\x94\x58\x3c\x10\xa8\x78\xe3\xe1\x85\x90\xeb\x97\x46\xb3\x3e\x0e\xa1\xd8\x78\x38\xb0\xae\x21\xd5\x00\x81\x93\xde\xec\xc8\x3a\x6b\xdf\xc8\xf9\x77\x71\xcb\x31\xbb\xa1\x4d\x4e\x17\xac\x8c\xe6\x7a\x6b\x6d\x0b\x08\x47\xe5\x82\xad\xa2\xbc\xa0\x0d\xfd\x97\xa8\x00\x6f\xd6\x72\x91\xf1\x48\x35\x19\x51\x3e\x2b\x72\xc6\x2f\x12\x13\x9e\xbb\x3d\x62\xd5\x60\x90\x66\x55\x19\x75\xf3\xb0\xd2\xe3\x28\x1e\x74\xd8\x0a\x0a\xdc\xdc\xd0\x40\x85\xcc\x3e\xb9\x5a\x00\xad\xed\x34\x6e\xaa\x6a\x8f\xed\x02\x09\x46\x0c\x14\x8d\x7d\x62\x4e\xa4\x12\x09\x03\xde\xd0\xc8\x44\x4c\x53\x96\x9c\xfe\xf1\xfd\x8b\xb3\x97\xaf\x5e\xbf\xd8\xb3\x66\x2e\x46\x06\x8c\x84\x81\xdf\x2c\xcf\xeb\x0d\xe1\xb8\x22\x7e\xc2\xbd\xbb\xf8\xf1\xd5\x87\x17\xcf\x4f\xdf\x7d\xf8\x63\xa8\x1f\xae\x8d\x29\xc2\xdd\xe9\xd5\x0d\x22\xe0\x54\x02\x83\x53\xd3\x5c\x06\x88\x4d\x33\xba\x7f\x3a\x4d\x53\x7f\x92\xaa\xb5\xc0\xd8\x7f\x6e\x93\x6e\x52\x95\x39\x70\x77\x35\x09\x4d\xb4\xe3\xfb\xaa\xc3\x53\x9f\xa5\x71\x8b\x02\xef\x19\xf3\xc1\x7a\x51\x44\x00\xce\xde\x16\x32\xca\xa2\xdc\x4d\x2d\x8a\x07\xf5\x43\xdd\xec\x8b\x8f\xb1\xea\xd1\x60\xab\xd6\x14\xe4\xfa\xe9\x8d\xa9\x37\x4b\xaa\x77\x8b\x55\xf1\xc6\xc9\x2a\x5b\x07\xeb\x51\x27\x4f\xd7\x4a\xd7\x55\x45\xbc\x5d\x48\x87\xa4\xbd\x80\xe9\x28\x68\x20\xa8\x59\x54\x2d\x04\x97\x4a\x12\x4c\x7f\xaf\xa9\xe4\xd4\xce\x4d\x7d\xbc\x14\xc5\xea\x87\x4c\x1b\x28\x42\xba\x1a\xd7\x4f\x82\x59\x45\x4c\xf3\x79\x6b\x55\x8a\xab\xbd\x62\xd7\x61\x2b\x48\xab\xf8\x38\x44\xf6\xc7\x7f\xd2\xf2\x25\xc3\x7a\x98\xec\x7f\x3c\xf8\xf8\xf1\x4f\xbf\xfa\x66\x70\x9c\x20\xbc\x9d\x7c\x9c\xde\x54\xd3\x83\x0b\x12\x7f\xfc\xf8\xab\x7e\xf3\x4d\x64\x68\x21\x01\x1e\x52\xdc\x05\x12\x76\x0d\xde\xd9\xc8\x16\xe6\x6e\x4e\xb6\x26\xae\x82\x9b\x49\x1b\x37\xb1\xe1\xf2\x74\x5b\x09\x6f\x85\x6b\xb4\x22\xe7\x1b\xb6\xcc\x7f\x12\x6c\xdc\xd2\x29\x31\xc7\xa2\x77\xdb\x56\xda\x21\x76\xe1\xfd\x7d\x26\x17\x56\x69\x91\xf1\xc8\xd4\x6f\x1e\x80\x1a\xc9\xb6\x66\xb0\xa3\xb7\x06\x44\x58\x0c\x9c\x75\xdf\x2b\x35\xfd\xe0\xfb\xc3\xd9\x01\x1f\x99\xbb\xb2\xc6\x5d\x26\x73\x8b\x3e\xb0\x4b\xa5\xd6\x45\x13\x1f\xff\xf6\xe6\xf5\x6f\xa5\x5c\x7f\xa0\xff\xb1\xa1\xa5\x74\xe7\x39\x29\xd6\x94\x23\x13\xf0\x89\xf4\x46\x4e\xfc\xa6\x7e\x08\x5a\xae\x0b\x5e\xd2\x53\xfa\x59\x56\x15\x01\xe1\x43\xcb\x74\xf0\xcb\x88\xb4\x9b\x0a\xc8\x4c\x45\xad\x8d\x46\x1e\x2d\x19\xb8\x62\x69\x44\xf9\x25\x13\x05\x5f\xa9\x57\x7e\xe7\x5a\x95\x0b\x0a\x6a\x64\xd1\x0a\xdc\x0f\x91\x88\xc9\x07\x65\xb4\x16\xc5\x79\x76\xbe\xbc\x8e\x34\x5b\x46\xed\xa3\xd1\x03\x66\xf3\xeb\x24\x06\x2d\xce\x50\x7c\x8a\x9a\x2c\xdc\x6e\x83\xf9\x06\x69\x85\x68\x81\xc6\x38\x22\xba\xda\x2c\x33\xcd\x36\xb4\x43\x36\x96\x75\x11\x5b\xad\x97\x54\xcd\x06\xf2\xcb\xa8\x98\x47\x46\x32\x9c\x3b\x66\x50\xd9\x50\x25\x0d\x2d\x75\xd8\x8a\xdc\x7f\x37\x6b\x19\x51\x6c\x54\x2e\x62\x72\x33\xd7\x7a\x04\xe3\x78\xf2\x72\x3e\xd5\xbf\x63\xe2\xe4\xa9\x31\x3a\x1e\x4f\x4e\xca\xa9\xf9\xde\x7a\xbf\xa3\xc9\xbb\x62\xba\x91\x4b\xc6\x29\x56\x84\x60\xa6\x66\x50\xea\x1a\x2f\xe8\xd4\x7c\x6f\x27\x7f\xb8\x9a\x2e\xa8\x50\x65\xd6\x14\xd4\x8c\x75\x91\xf7\xeb\xa9\xfe\xdc\x4e\x4e\xe5\xb4\xc8\x0b\x1c\x93\x82\x2f\xaf\x75\xee\xbb\x62\xca\x97\xd7\x38\x26\xe7\xd9\xec\xd3\x85\x28\x36\x3c\x1f\xc7\x93\x1f\xce\xa7\xee\x33\x26\x17\xec\x92\x72\x5d\xfc\x37\x17\x53\xf5\x01\x9d\x31\xb9\xd8\x4e\x9e\x65\x53\x9e\x6f\x55\x85\x8d\xdc\xc2\x70\x66\x74\x2d\x71\x4c\xae\x16\xb6\x0e\x8c\x8b\x6f\x27\xaf\xd8\x74\xde\xac\x80\x63\x22\x5d\xb1\x53\xa9\x8b\xa9\x36\xd6\x74\x26\x3b\x45\xb5\xdd\xfb\x78\x12\xc3\x78\x62\x12\xab\x2e\x62\x12\xab\x26\xe2\x69\x75\x3f\x3b\xc3\x1b\x29\xd8\x2a\x8c\x6d\x3d\x46\x72\x39\xd8\x7e\x2c\x07\x96\x95\x4c\xc4\x3d\x2a\xf9\xe5\x59\xf9\xc3\x32\xe3\x9f\x02\x35\x54\xdb\xdf\xfc\xea\xe0\xc2\xe1\x6a\xc2\xca\xb7\x85\xdc\x55\xdc\xd2\x0a\x90\xaf\x8b\xf3\xdc\xc2\x6e\x00\xff\x1c\xfc\x09\x7d\x2c\xbf\xc1\x07\x56\xc8\xe4\xe9\x8a\xc9\xc9\x70\xea\xf4\xfd\x87\x5f\x2a\x39\x39\xd4\x82\x93\xc3\x47\x5a\xd5\x63\xb4\x53\xc9\xc3\xda\x2f\x95\xe9\x8d\x75\x8f\x30\xce\xac\x0b\x32\xb2\xa4\x73\xf9\x5e\xad\xd7\xa2\x58\xe6\x54\x3c\x5f\x64\x62\x1c\x4f\x62\x22\xd8\xc5\xa2\x9b\x31\x8d\x2b\xb2\x49\x11\xd5\x5e\xce\x3c\x87\x0b\xc7\x75\xdb\xb4\x1a\xd3\xed\xb6\xc4\x89\x4d\xd9\x6e\x4b\xf7\x9b\x2c\x41\xaf\xaa\xd3\x27\x94\xe9\x26\x93\x59\x4a\x93\xd0\x50\x54\xf9\x50\x3a\x99\x37\x7d\x1d\x7c\xfc\x58\x7e\x13\x0f\x36\xb5\x17\x85\xd8\x1c\xfa\x18\x0f\xe2\xb1\xca\x45\xc9\x37\x38\x26\x31\x8b\x31\xc9\xef\xaa\x6b\x71\x43\xa8\xf2\xe2\xae\xca\xf5\x71\x0e\x55\x5f\xdf\x55\xdd\x62\x19\xa8\x6c\x2a\xad\x9a\x95\x54\x73\xbf\x32\x59\x97\xdd\xf6\xfe\x47\x8c\xc9\x75\x20\xf9\xe6\x21\xa9\x62\x4c\x2e\x5a\x8d\xa9\x3c\xfc\xab\x18\x93\xf3\xa6\xdc\x0c\x2a\x4d\x3e\x7e\xdc\xfe\xbf\xff\xfb\x7f\xa6\xc7\xfb\xaa\x36\x8e\x31\x39\xeb\xb6\xfc\x2f\x68\xf2\xa7\x74\xaa\x1b\xb9\xda\x9d\x9d\xea\x71\x7b\x4c\x8a\x17\x10\xef\x40\x4b\x72\x49\x96\xf2\xc1\x08\xae\x47\x36\x47\x2c\xbd\x76\x14\x8b\x23\xbd\x7b\x10\x5f\xc9\x5a\x11\x80\x70\x21\xbd\x6c\x15\xd3\xa9\x67\xf6\x18\xd6\x31\x91\x16\x19\xcf\x97\x14\xc5\xcf\x38\x2f\xf4\x29\x8e\xb5\xe3\xe4\x22\x51\x38\x06\xb1\xc9\x68\x8a\x89\xf3\x8d\x48\xb4\x9a\x24\x4b\xaf\xfe\xba\xa6\x5c\xd2\xe1\x14\xd7\x8d\xce\x77\x37\xfa\xd2\x5e\x50\xaa\x15\x57\x21\xdf\x5d\xc1\x2a\x27\xb5\x6a\x2c\x76\xd7\xf8\xc1\xbb\x61\x1a\x75\xd6\xbb\xeb\xbc\xb0\x60\xe9\x0a\x5f\xdc\xd2\x81\x42\x9a\xaa\xed\x61\xdd\xf6\xf9\xee\xe2\x3f\x66\xea\x9a\x6e\x8c\x64\xb5\xbb\xb4\x22\xc6\x5c\x69\xcf\xce\x0c\x28\x13\x99\xac\x68\x59\x66\x17\x34\x8d\x81\x40\x89\x14\x9d\xaf\xc8\x20\x75\x87\x47\xf1\x20\x1b\x3c\x20\x51\xfc\x60\x40\x07\x0f\xe2\xe4\x23\x7f\x27\xd8\x05\xe3\xd9\x32\xa2\x50\xf8\x2a\x2b\xc7\xd1\x83\x81\x6b\x84\xc8\xaa\x32\xef\x18\x51\x36\xc4\x6b\xac\x7e\x0e\x00\xc0\x9f\x10\xd1\x36\xbc\xeb\x88\x2f\x0f\x3e\x8a\x8f\x7c\xfb\x91\x1f\x68\xa9\x95\x96\xb2\xbc\x00\x3f\xdb\x0c\x49\x83\xd3\x11\xc6\xdb\x6d\xfd\xa1\x29\xe7\x77\x5d\x65\x9e\x9b\xca\x67\x6c\x51\xd1\x32\x2e\x06\x7f\x34\xc2\x94\xd9\xf0\x6e\x29\x7c\xc3\xbb\x7e\x9c\x02\x9a\x8a\x38\xe4\xed\x46\x47\x62\xd0\x6e\x33\x1b\xfa\x31\x0d\xbd\x28\xf5\xe2\xa6\x13\x99\xc8\xe2\x75\x71\x45\xc5\x73\xf5\x00\xc4\x5d\x27\x30\x72\x10\xab\xe7\xc7\x86\x53\x20\x3e\x68\x1e\x65\x12\x1e\x59\x91\x64\x2b\xea\xc8\xc1\x1b\xbd\xff\xe3\x6e\x8b\xea\x46\x3d\xe9\x18\x7a\x10\xfd\x26\x30\xd4\xff\x67\xe3\x02\xe7\x1d\xba\x01\xf5\x53\xa6\xbd\x7d\x9d\xc3\xed\x6f\x3e\x32\x77\x9c\x5b\x0f\x4f\xee\xad\x60\x13\xbf\xab\xc7\x82\xcc\xca\x05\x02\x5e\x00\x91\x3a\x12\xa2\xa2\x87\x0c\xc9\xe9\xed\x0a\xf7\xd8\x18\x60\x81\x88\x38\x11\xf0\xa6\xf8\x8c\xab\x9a\x1c\x2d\x7c\x7a\x30\xab\x3c\x6c\xa9\x3d\xdf\x3b\xc8\x43\x75\x33\x7a\x86\x02\xe3\x44\xf7\x44\x98\x66\xe2\x66\x69\xa1\x19\x4f\x7a\xed\x3a\x36\xf1\x32\x95\x89\xfb\x0a\xd8\xa9\x37\x15\xa6\xb9\x16\x35\x50\x6c\x8f\xa2\xce\xde\x6e\x3d\x09\xa0\x86\x5b\x7f\x33\x00\x0a\xba\xef\x86\x67\x91\x59\x22\x6d\x02\x63\xdf\x08\x05\xa7\x51\x21\xa2\x55\x21\x68\x64\x97\xc4\xb7\x8a\xa9\x0f\x46\x45\x3e\x77\x8d\x7b\x6e\x8c\x0a\x18\x6c\x4a\xeb\x48\xb0\xb9\x22\x15\x0f\xac\xfd\x7a\x77\x48\xaf\x38\xe8\x89\x46\x1e\x1c\x44\xf1\x40\xe2\xbd\x2e\xc8\xb9\xa3\xd5\x9d\xaf\x7b\xbc\x54\xe4\x59\x67\x25\xf5\xa6\x4c\xa6\x04\xfc\xc3\x6c\x60\x03\xdf\x93\x65\x03\x34\x9b\xb0\x97\x69\x5d\x26\x73\x8d\x48\x75\xda\xee\x07\xb4\xcb\x5d\x40\x4b\x62\xd5\xcd\x2d\xb0\xeb\x40\xb1\xcb\x7e\x31\x7e\xa4\xc0\x87\xa2\x20\x33\xb7\x2f\xa5\xd1\xce\xc3\xf5\x71\xab\x7c\x38\x0e\xca\xe6\xf4\xf4\x3f\x21\x49\x66\x75\xbd\x4d\x55\x61\x32\xf3\x34\x13\x77\xc3\xe3\xf2\x67\xc1\x63\x5b\xfb\x00\x00\x63\x98\xa6\xa9\x35\x0a\x0c\x70\x9e\x0d\xa4\x5a\x3d\xe6\x5d\x50\x5a\x21\x4c\x6e\xc0\x12\x77\x4c\xbd\x8d\x29\xc7\x35\x3e\x27\xb9\x09\xc9\xa1\x36\x2c\x73\x4b\x5d\x8e\x39\x2a\xef\xf2\xa7\xe0\x40\x1f\xe3\x5a\x59\x4d\xbb\x87\x44\x20\xd4\xfb\x14\x94\x93\x83\x59\xe5\x64\x4a\xb2\x74\x68\x54\xa3\x2c\xa4\x6d\x76\x82\xd2\x65\x0d\x04\xd7\x3e\x0a\xda\xe8\x86\xeb\x6b\x07\xc5\x39\x5c\xde\x4b\x05\x4e\x6d\x48\x6d\xe8\x58\x41\x35\x1f\x24\x75\xc5\x38\xf3\x88\x28\x8f\xf0\x26\x7e\x1f\x00\xb0\x0a\x4a\xfc\xc4\x73\x4d\x64\xe4\xea\x5d\x54\x24\xde\xeb\x0c\x49\xdc\x71\xff\xd7\x1d\xf1\x3a\xd4\xc5\x7c\x57\x17\x7e\xaa\x3f\xe2\xcb\x66\x96\x1b\x3f\xb9\xc6\x64\x85\x24\x01\x2d\xf0\x8e\x9e\xd6\x02\x05\x73\x73\x7b\xdd\x18\xff\x81\xbe\x26\x95\x4a\xb6\xb6\x7c\x68\x85\xb8\xa7\x64\xae\x9b\x81\x4d\xc6\x4d\x33\xf8\xc0\x82\x87\x66\xbd\x09\xce\x5a\x43\x05\x26\x0b\xd4\x54\xcc\x32\x02\xa2\x22\xa9\xdf\xcf\xc0\xd8\x6f\xee\x01\xc5\x4f\xb2\x10\x8a\x75\x25\x34\xc9\xa5\x50\xfb\x44\xd4\x3e\x06\xd3\xc6\xd7\x40\x0e\x8a\x04\x58\x00\xc8\x59\xe6\x64\x2d\x95\xaa\x86\x9a\xf2\x05\x68\x72\xd6\x57\x9a\xaf\x55\x75\xbf\x82\x17\x35\x42\x10\x3b\x11\x42\x4d\x40\xef\xc0\x09\x92\xae\x15\x3e\xb8\x03\x81\x95\x7f\x0d\x02\x53\x33\xb8\xd1\x7c\x19\xa1\x0e\xff\xfb\xee\x6d\x08\x67\xbd\x8b\x45\x9b\x9a\xdd\xda\x07\x0c\x92\x6e\x10\x3a\xfb\x5e\x83\x30\xfd\x4f\x80\x04\xfb\x10\xd0\x1e\x87\xfb\xce\x5e\x76\xe0\x5f\x63\x32\x25\xb3\x74\x68\x9e\xef\x16\x11\x2d\x76\x22\xa2\xab\x1a\x11\x5d\xd5\x0c\xb8\x17\x95\x7a\xc4\x37\xf5\x38\xad\x1f\xcc\xd0\x41\xdf\xec\x46\x4d\x6b\x5b\xed\xde\xa8\x89\x78\x4f\x74\x32\xef\x1c\xa6\x55\x33\xd1\x1c\xa6\x6b\x75\xa9\xed\xc6\x52\xab\x5d\x83\x3f\x0f\x75\x71\xb9\xab\x8b\xf9\x0e\x2c\x75\xd5\xcc\xaa\xa7\xd2\xca\x70\x13\x23\x2f\x30\x39\xeb\x22\xa8\x4b\x3d\x4c\x05\x7a\x81\xdc\x6b\x4b\x78\x74\xd0\x97\x3a\x54\xcb\x1a\x7d\x9d\xa1\x65\x17\x7d\x2d\x9b\xe8\xeb\x1c\x05\x37\x25\xb4\x1c\x8b\xe0\x72\x58\xf4\x75\xe1\xa3\xaf\xb3\x2f\x40\x5f\xb3\xfb\xa1\xaf\xcd\x64\xe3\xa1\xaf\xc6\x57\x08\x7d\xcd\x7c\xe0\xbb\x6a\x21\x84\x13\x84\xc1\xcf\x86\x49\xae\x3c\x46\x49\xa3\x8c\xd6\x8b\x3e\x45\xb9\x57\xe4\xa4\x46\x5c\x9b\x9d\x88\xcb\x19\x32\xfd\x35\x68\x6b\xfe\xb3\xd0\xd6\x09\xb2\xb1\x87\x82\x24\x92\x08\x93\x48\x25\xd1\x28\xa6\xa6\xa0\xc0\xea\xcc\xf3\xbc\x53\xcb\x8d\x8e\x33\xa7\xd3\x8c\xc7\xbc\xaa\xc8\x69\xc0\x18\x61\x32\x55\xa4\xa6\x5b\xc3\xcf\x35\x49\xd4\x40\x41\x0a\xd8\x7c\xf5\x8a\xe6\x4d\x6a\x40\xcc\x80\x64\x45\xda\x74\xbb\x68\x12\x1c\xfe\x51\xdc\xdc\x83\xec\xd0\x47\x3f\xb7\xeb\x35\xda\x93\xe9\x39\x12\xb7\x98\xbc\xc9\x54\xe3\x51\x83\xe0\x28\x06\x76\xef\x98\x37\x78\xd6\x6d\x00\x77\x0b\xc7\x07\xb5\x0d\xec\x88\x48\x45\x5e\x3a\xa2\x32\x44\xfb\xed\x5e\x09\x92\x85\x9f\x14\x4d\xfa\x47\x5d\x0c\xdd\xe9\x5e\x06\x89\x90\x4b\x47\x57\xde\xf8\xd0\x92\x91\x39\xa3\xcb\xbc\x1c\x5f\x20\x49\xc0\xc7\x1c\xb9\x56\xaf\x0f\xb3\xa9\x4d\xcf\x4b\xdd\xf5\x5e\x84\xd6\x7b\xd5\x0e\x64\xd5\x1e\xa7\xae\xbb\x0e\xd7\xfd\xeb\x07\xdf\xb9\x93\x54\xb6\x00\x63\x13\x50\x16\x57\x55\x1a\x57\xc6\x8e\x99\x75\xd6\xe0\xb2\x03\xbf\xba\x6c\x88\x20\x6c\x21\xcf\x5d\x50\x7c\xb6\x8b\xec\x3d\x6b\x6b\xb2\x5b\x2b\x9d\xc6\x34\xf6\xd4\xed\x17\xe0\x2b\x31\xf5\xd0\xa6\x9f\xe5\x20\xd6\x11\xf7\xe3\x69\xea\xc8\xc1\x29\xf1\x72\x4b\x99\x09\x99\x2c\x19\xa7\xaa\x08\x0d\xe4\xcd\x8a\xe5\x66\xc5\x55\xae\x04\x81\xc3\x40\xfa\xe0\x3f\x6d\x28\xe6\x5f\x34\x4c\x40\xce\x41\xc3\xd9\x60\xd0\xae\x2a\x74\xed\x4d\x7d\xc2\xa7\xd0\x27\xc9\xf4\x6f\xaf\x7d\x52\xa6\x21\xc2\x75\xef\xeb\xd2\xcd\x6c\x9a\x22\xf5\xaf\x0e\xe5\x60\xf5\x6c\x41\x29\x5b\xf8\x37\xa9\xf7\x18\xa4\x7a\x61\xdf\xcd\x51\xfc\xff\xfe\xef\xff\x89\xf1\xd3\x74\x78\x0c\xbf\xc6\xf1\x36\x26\xbe\x4b\x0e\xa1\x87\xeb\x7b\x65\x95\xbd\x34\x65\x3b\xef\x96\x57\x7c\x56\x08\x41\x67\xd2\x53\xb5\xd7\xdb\x0d\x7e\x37\x35\x69\x11\x41\xcc\xd2\x24\x7a\x61\x79\x7d\x60\x9b\x13\x9d\x6f\x64\x34\x07\x7a\x3a\x1e\xb8\x1e\x2c\x7e\x62\xfe\xfd\xdd\x24\x5e\xaf\x10\x26\x34\x71\x34\xad\x7f\xb3\xba\xdb\x50\xee\x1c\xb1\xe5\x69\xeb\x41\x85\xef\xc4\x05\xcd\x72\xe3\x99\xe5\xce\x67\xc1\x7d\xda\x13\xc5\x55\x19\xb7\x6e\x76\xc7\xbb\x72\x2c\xe3\x9f\xcd\x99\x75\x7e\x5d\xd4\x9a\x4b\x0c\x61\x1f\xc0\x4f\x36\x78\x0e\xf7\x88\x05\x9f\x11\x03\xa7\xf1\x36\xed\xe6\x67\x56\xb1\xd9\x5d\x0c\xae\xa5\x67\x2d\xaf\x54\xc6\xc7\x2a\x38\x7f\x31\x8e\xc3\x3d\x79\xd0\xc7\x8f\xf1\x60\x09\xae\xc3\xbf\x89\x07\x42\xff\x50\x69\x33\xed\xa6\xdc\x9d\x99\x89\x98\xfa\x56\xd4\xb5\x34\xf5\x2b\x3d\xa9\x9a\x36\x05\x0d\x70\x12\xb7\xad\x84\x21\x5d\x9e\x21\x69\x30\x19\xa1\xda\xf5\x1a\x6e\x10\x33\x2f\x90\x4c\xbc\xef\x9a\xb4\xa1\x7e\x72\x93\xd2\x39\x41\x12\x9c\xbe\xbb\x14\x6c\x48\x9f\x13\xbf\x33\xed\x80\xbe\x6a\xdc\xd1\x77\x09\x94\x6f\x33\x17\x15\xe8\x31\x4e\xe6\xa5\xe6\x8e\x23\x81\x0e\xbf\xc5\xd8\xd9\x73\x76\xa4\x1e\xc2\xe1\xbe\xa6\xee\x27\x25\x5a\x5d\x14\x5c\xf8\xe8\x6a\x88\xd5\x3a\x73\xfd\xbe\x40\x05\xde\x6e\x8b\x7b\xcb\xbe\x47\xc6\xcd\xc1\x23\x23\xfc\x7e\x8c\x3b\xe6\x11\x26\x90\xd8\x0e\xf7\x7e\x8c\x80\x67\x23\x27\x99\xe6\x4e\x10\x5e\xa6\x54\x8f\xd0\x68\x7a\x17\x48\x60\xb2\xd1\x71\x79\xb5\x03\xe8\xed\x16\xe2\xe8\xd6\x1e\xa1\x11\xde\x6b\xb3\xb2\xb2\xb0\x3d\xf4\x0c\x19\x78\x20\xe6\xc0\xb4\x18\x51\xce\x07\xfa\x11\xca\x11\x4f\x1b\x50\x42\x62\xa3\x3c\x12\xe3\xe3\x4d\xf2\x59\x43\xc2\x39\x1d\xe7\x88\x93\xb8\xe0\xcb\x6b\x48\xb7\xc9\x89\x4a\xd9\x6e\x37\xc9\xdc\xa6\xa8\x8f\xdc\xd5\xaa\x4b\xe2\x86\xd7\x2a\x7c\x23\x50\x6b\x64\x73\xef\x04\xe4\x6a\x2f\x1b\xe3\x60\x72\x0c\x89\x6e\x04\x4c\xd6\x7d\x33\xa9\xfe\x30\x26\xc7\x2a\xbd\xc3\xc9\xf2\x58\xc6\x56\x20\x1c\x0f\x1a\xa1\x0e\x06\xb1\x11\x64\xd7\x6e\xa1\x34\x06\x61\x73\x64\x74\xd6\x18\xae\x83\xd6\x98\x53\x38\xaf\x1d\x83\x94\x6d\x7e\x79\x78\x63\x96\xc8\x80\xb3\x31\xe3\xc7\xb5\x8c\xa6\x1c\x2f\x89\x5b\xb6\x19\x61\x26\x5e\x50\xc7\x6d\xcc\xbc\x79\xa8\x71\xdb\x19\x98\xd0\x7e\x62\x24\x31\x46\xe3\x4c\x9e\x7d\x79\x3b\x75\x33\xc6\x52\xa3\x22\x77\xb8\x47\x76\x6b\xee\x87\x54\xe7\xff\xc5\xac\x37\xf6\x0e\xbe\xe9\x45\xdf\x7c\xcd\xff\xed\x3d\x2f\xd6\xd7\xa0\x59\x12\xa1\x19\x8e\xde\xb0\x99\x28\xca\x62\x2e\xa3\xe7\x85\x58\x17\x02\xf6\x26\x89\x9e\x2d\x97\x11\x14\x2a\x23\x41\x4b\x2a\x2e\x69\x9e\xec\xbd\x66\x33\xca\x4b\x9a\x47\x1b\x9e\x83\x6a\x3b\x8d\x9e\xad\xb3\xd9\x82\x46\x26\x87\x44\xbf\xd7\xfe\x34\xa3\xc3\x64\x18\x21\x55\x20\x36\x59\x31\x3e\x8a\xae\x8b\x4d\xb4\xca\xac\x8e\x1e\x05\x5c\x1b\xcd\xd9\x92\x46\x14\x54\xb8\xd4\x01\x98\x15\xab\xf5\x92\x65\x7c\x46\xb5\xbd\x9f\xac\x5b\x4f\xa2\x3f\x9a\x06\x8a\x73\x90\x99\x65\xd1\xac\x58\x5f\x2b\x72\x4b\x2e\xa8\x1d\x5d\x94\xc9\x68\x21\xe5\x7a\x7c\x70\x70\x75\x75\x95\x64\x30\xc0\xa4\x10\x17\x07\x4b\x5d\xa0\x3c\x78\xfd\xea\xf9\x8b\xb7\x27\x2f\xf6\x0f\x93\xe1\xde\xde\xe9\x6f\x5f\x9d\x44\xcf\xdf\xfd\xf8\x22\x7a\x75\x12\xbd\xff\xf0\xee\xf7\xaf\x7e\x7c\xf1\x63\xf4\xee\x6d\xf4\xec\x6d\xf4\xcd\xb3\x93\xe8\xd5\xc9\x37\xd1\x0f\xcf\x4e\x5e\x9d\x90\xe8\x0f\xaf\x4e\x7f\xfb\xee\xa7\xd3\xe8\x0f\xcf\x3e\x7c\x78\xf6\xf6\xf4\xd5\x8b\x93\xe8\xdd\x87\xe8\xf9\xbb\xb7\x3f\xbe\x3a\x7d\xf5\xee\xed\x49\xf4\xee\x65\xf4\xec\xed\x1f\xf7\x7e\xf7\xea\xed\x8f\x24\x7a\xf1\xea\xf4\xb7\x2f\x3e\x44\x2f\xfe\xed\xfd\x87\x17\x27\x50\xf2\xd5\x9b\xf7\xaf\x5f\xbd\xf8\x91\x44\xaf\xde\x3e\x7f\xfd\xd3\x8f\xaf\xde\xfe\xc6\x35\xf9\xfa\xd5\x9b\x57\xa7\xcf\x54\x2b\xaa\x05\x5b\x72\xef\xb6\x9e\x4e\x5f\x9d\xbe\x7e\x41\xa2\x97\xaf\x4e\xdf\xaa\xf6\x5f\xbe\xfb\x10\x3d\x8b\xde\x3f\xfb\x70\xfa\xea\xf9\x4f\xaf\x9f\x7d\x88\xde\xff\xf4\xe1\xfd\xbb\x93\x17\x64\xef\xcd\x8b\x0f\xcf\x7f\xfb\xec\xed\xe9\xb3\x1f\x5e\xbf\x3a\xfd\xa3\x6a\xe8\xed\xbb\xb7\xfb\xaf\xde\xbe\xfc\xf0\xea\xed\x6f\x5e\xbc\x79\xf1\xf6\x34\xd9\xdb\x3b\xa1\xd4\xdf\x50\x7f\x1f\xed\xc2\xce\x0b\x11\x95\x6b\x3a\x63\x73\x36\x8b\xec\x0d\x13\x5d\x14\x97\x54\x70\xc6\x2f\xa2\x35\x15\x2b\xa6\xcd\xff\xf7\x32\x9e\x47\xe0\x16\xce\xa8\x3c\xd6\x10\x63\x37\x73\xef\xab\x42\x75\xf4\xcd\x01\xe0\xd0\x3d\x91\x08\xed\x4a\x06\x62\x4b\x7a\x6e\x98\x4e\x64\x26\x37\x65\x1c\x8a\x52\xc7\xe0\xe1\x60\xa2\x51\x96\x25\xbb\xe0\xc1\x62\xa5\x57\x4c\xdf\xc1\x6f\xb2\xd9\x42\x3d\xc5\x42\xa5\x73\xaf\xb4\x73\x79\x11\x2c\xb9\x56\x25\x1b\x7a\x0e\x13\x9a\xbc\x2d\xe4\x89\x7a\xcf\xd1\x3c\x1d\x4e\xd3\xb8\xfe\x8c\x89\xca\xfe\xb0\xe1\x6a\xcd\xd3\xd1\x34\x8d\xcd\x6f\x9d\x71\x22\x8b\xf5\x9a\xe6\xe9\xe1\x34\x8d\xcd\xef\xb8\x42\xda\xa4\xf7\xc6\x06\x14\x2e\xd2\x1b\x85\x66\xc6\xb1\x8e\x87\x98\x30\xce\x64\x5c\xf9\x41\x6a\x69\x2b\x52\x45\x9a\x42\x50\xbb\x71\x23\xea\x91\x2b\x5f\x7a\x66\x3a\x8d\x86\xed\x6a\xea\xbf\x8a\x7a\x1f\xd3\xaa\x6a\x73\x56\x8c\xa7\x05\xe3\x03\xce\xe2\x51\x44\xd3\x76\x92\x42\xb8\xa0\x57\x48\xa7\xc7\xea\x9f\x31\xc5\xc7\xba\x43\x5a\x8d\x03\x98\x98\xda\xdc\x84\x67\x2b\x4a\xe8\x67\x3a\x03\xed\xbd\x86\x80\xae\x2b\x19\xf5\x6c\x10\xd4\x33\xaa\x0a\xfa\x23\xe8\x8e\xad\x1e\x4a\x3b\x60\x96\x5b\x1c\x13\xbb\x95\xcc\x8c\x33\x30\x49\xb2\x99\xa6\x9c\x27\x53\xa2\x63\x2f\xe6\xe3\xde\x88\xac\x32\x39\x5b\xa8\x0b\xba\xe9\x09\xda\x52\x17\x2e\xb6\x10\xf8\x71\xbb\x31\x6e\x81\x04\x68\x8d\xcf\xd9\xc5\x98\x92\xb3\x62\xad\xdb\x95\x04\x9c\x32\x64\x4b\x05\xff\x74\x6c\x47\x90\x98\x54\xd7\x7f\xa6\xde\xbf\xaa\x48\x39\x71\x99\xd3\x84\x72\x29\xae\x77\x6b\xf5\xc3\xfe\x25\xa6\x09\x78\x7e\xdb\x89\x69\xaa\x92\x7e\x96\xfe\x54\x6c\xbb\xb8\x22\x10\xe2\x48\x3b\x8b\xf0\xc4\x33\xcc\x78\x60\x25\x25\xc9\xbb\x9b\x2f\x8f\xcd\xe8\x65\xb7\x9b\x6a\x2c\xc9\x22\xcd\x35\xdf\x8d\xac\xd3\xbc\xee\x3f\x9d\x21\x86\xc9\x65\xea\xe6\xb7\x80\xe0\x7c\x97\x49\x61\x38\x1a\xd7\x69\x06\x5f\x93\x55\xa2\x7a\x9a\x62\x72\xd1\x56\xe7\xa9\x57\x1c\x37\x76\x72\x8e\x16\x64\x6d\x74\x95\x78\x70\xc4\x32\x13\x17\x54\x8e\x61\x80\x2c\xe5\x89\xfe\x26\x45\xea\x9a\x64\xc7\x8b\x31\x28\x01\xda\x85\x24\x65\x9d\x99\xa9\x43\x97\x11\x08\xe2\x58\xf0\x9c\xe4\xe9\x1a\xbc\x95\xbb\x02\xb3\x6e\xfc\xdd\xde\xb0\x1a\xcf\x30\x5a\x93\x15\xb6\x13\x74\x73\x2f\xa6\xe4\x22\xed\x8d\xc8\x79\x5a\x9f\xe4\xcb\x84\x7e\x66\x92\x94\xe4\xda\xee\xf7\x2d\x46\x20\xe0\x9e\xf5\x36\x78\x10\x89\x85\x3d\x1f\x30\x82\x4d\xb2\x39\x6a\x21\x0a\xed\x9d\xe5\x7a\x4d\xf1\xcd\x45\xda\x1b\x1a\x9f\x4d\xc6\xe8\x48\x97\x41\x37\x15\xc9\xed\x13\x2b\x74\xe6\x93\x1a\xd9\x1c\xcb\xd4\xff\x44\x39\x59\xe1\xb1\x6f\xc2\xe4\xe7\xd6\xe6\x94\x8d\xb0\x12\x72\x22\xa6\x21\xa2\xd2\xaf\x3a\x11\xd3\xe3\xd6\xb7\xee\xab\x95\xa8\x4e\x48\x9e\x4a\xd2\x1b\x55\x6e\xab\xdc\x1b\xdf\x80\x94\xf9\x53\x38\x18\xcf\xdd\x19\x3d\x77\x28\xa2\xe8\xa5\xe9\x62\xbb\x3d\xb7\x6e\xda\x87\xdb\xed\x85\x77\xd2\x0a\x20\xa0\x41\xa5\xd4\xbe\x2e\xce\x03\xef\xc5\xdb\x68\xd7\x49\x8b\x36\x9e\x12\x91\x0e\x6b\x3f\x68\xd2\x86\xbb\x1a\xdf\xf0\x86\x0c\xc0\xa7\x8d\x45\x1d\xff\x11\xc2\x6a\x6b\xa0\xc5\x36\x10\x37\x55\xdd\x88\xc1\x60\x4a\xf2\x82\xd3\x71\x8f\xaa\x41\xa3\x6b\x4c\xce\xd2\x73\xf0\x62\x8f\xf0\x51\xef\x2c\x51\x99\x47\x75\x92\x1e\xfc\x55\x7a\x81\xce\x0c\x97\x1d\x7c\x53\x3b\x9b\x64\x8e\xae\x9c\xee\xe4\x95\x2e\x51\xd5\xf6\x26\x45\x7a\x03\x6c\x44\xb8\x86\x18\xcf\x96\xcb\x6b\x70\xd4\x7f\xd6\xef\x9b\xae\xfa\x7d\x54\xa6\xe7\x89\x6e\x01\xf7\xfb\xa5\x9e\xe9\x39\x76\xe5\xd9\x1c\x15\x86\x07\x56\x24\xd0\x5a\x65\x7d\x7e\x46\x06\x21\x54\xb5\x8f\x6e\x35\xda\x45\xd8\x79\x02\xb5\x27\x24\x0c\x79\x86\x27\x00\x0a\xa1\x8e\x43\xd6\xef\x73\x54\x23\x57\xfd\x58\xda\xf3\x19\xe8\x2e\x06\x6d\xe2\x23\x7e\x22\x52\xe6\xd1\x14\x46\x29\xf0\x84\x4a\x92\xa5\x37\x67\x2b\x4d\xc7\x8c\x29\x29\xa9\xaf\xb4\x54\xe0\x1b\x01\x96\x8a\x86\xc4\x30\x6e\x43\x6b\xe4\x0d\x71\x3f\xc9\x02\x49\x32\x43\x05\xc6\x84\x07\x66\xe2\xe1\x0e\xfd\x00\xc7\x15\x29\x37\xe7\xe6\xdd\x19\x28\x06\x0e\xf8\xd5\x73\x15\x2c\xee\x6e\x36\x3c\x50\xda\x2b\xac\x75\x32\xe1\xa2\x04\x03\x62\x11\x82\x46\x51\x4f\x02\x86\x5b\x60\x92\xa9\xd2\xc5\x7a\x47\x61\x43\x3b\x11\xae\xfd\xea\x21\x28\x7f\x41\x65\x04\xf8\xaa\xe1\xdf\xc3\xa6\x6e\x4a\xaf\x89\x1a\x04\xb2\x16\xef\xa7\xf5\x8c\x95\xc9\xf9\xb5\xa4\xaf\xe1\x94\x04\xce\xe8\x46\x1b\x72\xc9\xc9\x70\x4a\x78\x2a\x27\x23\x17\xaf\xe9\xe1\x37\x48\x0c\x38\x3e\x78\xb4\xcf\x2b\x22\x13\x59\xfc\x70\x2d\x29\xf0\x4f\x83\xd6\x11\x85\x6e\x2a\x4b\x0b\xd5\x54\x99\x16\x93\xd1\xd4\x28\xe0\x31\xb4\x83\xa9\xf8\xf0\x1b\x24\x07\x42\x75\x21\x2a\x34\x04\x6f\x76\xd8\x68\x31\x94\x4f\x87\xc7\xd9\xfe\xa3\x71\x06\xfc\x0b\x1d\x48\x74\x7e\x24\x06\xe9\x23\x2c\x53\x3e\x69\x38\xde\x15\x78\xfa\xe4\xc9\xe8\xbb\x6d\x3b\x79\x30\x82\x8c\xc3\x6e\xc6\xa1\xca\x78\xdc\x4d\x7f\x88\xa7\x64\x39\x99\x0d\x06\xd3\x54\x3e\x7d\x3a\x7a\xdc\x3f\xfc\xf6\x5b\x2f\xe1\x3b\xff\xfb\xf0\xdb\x6f\xfb\xce\xdc\xed\x30\x4d\xd3\x12\xc0\x37\x34\xb6\xc0\x08\x46\x78\xfa\xf4\xe9\xa3\x46\x5b\x98\x8c\x6e\x6d\x65\x34\xdc\x31\xc3\x47\xc1\x09\x3e\x7d\x7a\x78\xeb\xd0\x31\x59\xaa\x7d\x9d\x8b\x62\x15\xde\x59\xe7\x41\xc6\x0b\x87\xa0\x68\x8c\xff\xf9\x90\x14\x9e\xde\xdb\x3e\x3b\xca\x9e\x94\x47\xd9\x20\x1d\x3d\x7e\xf8\xdd\x43\x6c\x62\xcd\x2f\x11\x25\x19\xc9\x06\x90\xf8\xb4\x3c\x2e\xc7\xe6\x77\xcd\x74\x1e\xe9\x50\x09\x32\xa5\x13\xbe\x3f\x9a\x12\x53\x53\x4c\xe4\xd3\xa7\x87\xd3\x81\x98\xc8\x27\x4f\x1e\xf5\x1f\x3f\x9c\x0e\xe2\x34\x8d\xb1\x0e\x1f\xc5\x60\x7d\x90\xaa\x72\x38\x7d\xf2\xe4\x3b\x3c\x08\xd4\x1e\x0d\xa1\xfa\xd3\xa7\xba\x3a\xb4\x74\x68\x5a\x02\x87\xe8\x86\x09\x1e\x2b\xe4\xd6\x8c\x93\x30\x99\x12\x96\x86\x82\xc6\xfd\xc4\xb8\xfc\x0e\x56\xe9\xb8\xfe\x39\x86\x7f\x49\x91\xc6\xcf\x7e\x78\xfe\xe3\x8b\x97\xbf\xf9\xed\xab\x7f\xfd\xdd\xeb\x37\x6f\xdf\xbd\xff\x5f\x1f\x4e\x4e\x7f\xfa\xfd\x1f\xfe\xed\x8f\xff\x3b\x3b\x9f\xe5\x74\x7e\xb1\x60\x7f\xfe\xb4\x5c\xf1\x62\xfd\x1f\xa2\x94\x9b\xcb\xab\xcf\xd7\x7f\x19\x8e\x0e\x1f\x3e\xfa\xf6\xf1\xaf\xbf\xfb\x7e\x70\x10\x9b\xf5\xb4\x5e\xd8\x61\x51\x07\x83\x0c\x8b\x49\x36\x4d\x8b\x49\x36\x25\x7c\x52\x34\xfd\x4d\x4f\xd3\xac\x21\x46\xae\x71\xb3\x6e\x43\xdd\x5c\xf2\x7f\x3e\x7a\x3a\xdc\xad\x93\xab\x49\xca\x24\xd2\x08\xc2\xb9\xcd\xcf\x22\x08\x08\xbf\x5e\xd2\xa8\x98\x47\x8f\x62\xfb\x02\xf0\xc4\x5c\x69\xdc\x70\xec\x2d\xc0\xf3\x86\xc4\x64\x22\x88\x00\xff\xd6\xc3\xf1\xa3\x7d\xf1\x3f\x1f\x4d\xdb\x81\x87\x79\x0d\x5a\xe0\xc3\x52\xab\xed\xca\xa3\xf2\x09\x3f\x2a\x07\xe9\x43\xcc\xd4\xf6\x96\x0a\xe2\x1f\xf7\x47\x8f\x7f\x3d\x1a\x3d\xfe\x6e\x88\x07\x2a\x6d\x30\x52\x5b\xde\x7f\xfc\xed\x21\xa4\x28\x38\x56\xa9\x87\x53\x4c\x32\xbb\xfd\xa8\x48\x19\x7e\xfa\x74\xf4\x9d\xd9\xfa\xe2\xe9\xd3\xd1\x61\xfd\xfb\xb1\xf9\xf9\xf8\x61\xbf\xa8\x63\x5d\x64\x35\x40\xf0\x49\xbc\x1f\x37\xfd\xc1\x4f\xd3\xc7\x87\x84\x4f\xe2\xb3\x6e\xfa\xc3\x3b\xa2\x8c\x98\xd0\xc1\x84\x91\x22\xf8\xfe\x45\xd9\x7f\x41\x8e\xe2\x5e\xf4\x4d\x34\x5b\xb2\xf5\x79\x91\x89\x3c\xf9\x73\x19\x5d\x1e\x26\xc3\xe4\xb1\x4a\x5e\x48\xb9\x2e\xc7\x07\x07\x2e\xfb\xcf\x65\x32\x2b\x56\x07\x2a\x4f\xfd\xe7\x78\x80\x6f\x5e\x9d\x46\xff\xff\xff\x5f\xf4\xbf\x29\x2f\xa2\x0f\xc5\x6c\x91\xed\x45\xdf\x1c\x04\x22\xf6\x45\x01\x9d\x0d\x8f\x62\x11\xc6\xcb\xa0\x9c\xf0\xa9\x33\x79\x99\xf0\xa9\x95\x76\xec\xd5\x32\xe7\xf4\x86\x8d\x39\x59\xaa\xf7\xb1\xc9\x1c\xdf\xd4\xd7\x2c\x55\x95\x80\x54\x63\xb6\x2e\x61\xa4\xfe\x2d\x30\x61\xc9\x32\xed\x0d\xeb\x34\x17\x03\x3a\x59\xa5\xea\xe1\x32\x4b\x25\x11\x49\xde\x71\x55\x2c\x12\x1d\x76\x7d\xbb\xdd\x15\x6f\x54\x86\x82\x8d\xf2\x0a\x57\x44\x24\x2d\xd7\xff\x01\xcc\x65\xb7\xd1\x6c\xa1\x75\x34\x78\x9a\x5d\xf4\xfb\xbb\x7a\xec\x96\xb5\x64\x75\xfc\x06\x0c\x92\xe3\xdb\xc2\xa3\x9e\x9d\xd1\xd2\x14\xb3\xd5\xd4\x53\x44\x0d\xb7\x1d\x6d\x8f\xcd\xd1\xa8\x2f\x81\x7e\x17\x88\x62\x4c\xbe\xeb\xcb\x3a\x98\x3d\x9b\xa3\x47\x2a\xd7\xf3\x09\x94\x81\x70\x1f\xec\x27\xeb\x6e\x9a\xe1\xef\xb9\x7d\xd2\x69\x36\x1a\xf8\x10\x33\xae\xa8\x15\x3c\xec\x18\x37\x27\xb1\x91\x65\x75\x62\xbb\x9a\x07\x45\x85\xc9\x21\x8c\xa6\x1b\x9b\xa4\x25\x65\x11\x49\x8e\xd4\xa1\x0f\xf1\x7c\x26\x72\x6a\x3c\xc6\x98\xe0\xec\x5e\xf4\x71\x22\x12\x1e\xa0\xd2\x5a\xb3\xed\xbe\xc9\x23\x6a\xe5\x70\x55\xe8\xad\x54\xbf\x17\x0c\x17\x32\x26\x12\x3c\xc4\x8a\xa4\xed\xce\xc2\x14\x34\x4b\x54\x4b\xca\x9b\x0e\x41\xcc\xf3\x0c\x3c\x3e\x88\x64\x9d\xc6\x31\x11\x48\x24\x65\xfa\x18\x57\x68\xd2\x60\x36\xee\x16\x92\xc2\xc3\xea\xe4\xc5\xeb\x17\xcf\x4f\xf5\xcb\x9c\x17\x39\x7d\x9b\xad\x28\xa6\xc9\xbc\x98\x29\x7a\x97\xa8\xcb\x0c\x56\xdf\x85\x43\x88\x5f\xbd\x7d\xff\x53\xab\xc2\x76\x1b\x9f\xbe\xf8\xb7\xd3\x67\x1f\x5e\x3c\x6b\xb5\xe4\xd4\x33\x16\x59\xf9\x4c\x4a\xc1\xce\x37\x92\xa2\x58\xd0\x2c\xd7\x82\xb7\x3d\xb1\xdd\xd2\xa4\xa4\x32\x94\x4b\xe2\x18\x62\x17\x50\x90\x5b\xeb\x9f\xf2\x04\xbe\x58\xc1\x3f\xa8\xc7\x32\x1a\x12\x33\x42\x17\x3e\x05\x5a\x34\x01\xbb\x42\x5d\xd6\x93\x82\x90\x19\x37\xed\xc1\xcd\xb4\x97\x15\x9a\x33\xd0\x77\x88\x15\xb8\xdb\x05\x31\xf0\x6d\xbc\x39\x5d\x78\xa3\x81\x78\xf7\x79\x31\x03\x25\x06\x03\xf9\x7a\x84\x78\x8f\x99\x29\xbc\x2d\x72\x6a\x7c\xb8\x94\x8a\x5a\xf7\xe2\x8a\x41\xd1\x12\xf4\x24\xb3\x3c\xd7\x15\x99\x1a\x2a\xf7\xdd\xd9\xba\x57\xc9\x4e\x4f\x67\xf8\xa6\x92\xbe\xa3\x89\x96\xfd\x4c\x1d\xac\x5a\xab\x0c\x6c\xb7\xda\xdf\x05\x05\x36\xa3\x95\xb2\x4d\xe8\x74\xbb\x85\x3f\xe9\x64\x8a\xb1\xd1\xf5\x9a\x43\x10\x4f\xf9\xb9\x8e\xdf\x49\x8a\x46\xf4\x80\x4e\xfb\xcd\x20\x93\x10\x60\x0d\x6c\x0c\x89\x34\x81\x05\x44\x1d\x27\xdc\x4d\x8e\x25\x67\xd6\x7d\x8b\x36\x49\x24\x02\x57\x84\xae\x98\x1c\x07\xc9\xe3\x74\x32\x0d\xc7\x22\x80\x60\x3d\x08\x05\x26\x8a\x61\x82\x93\x29\x36\x4e\x96\x31\xe1\xe9\x90\x30\xa7\x02\x73\xc4\x9f\x30\x08\xd2\x25\xd4\xad\x33\xb7\x01\xea\xe0\x6b\x26\x3f\x13\x89\x9b\x51\x75\x8b\xf9\x3c\xe8\xd3\x25\xd0\x35\xd1\x7e\x6c\x09\x4b\x27\xc0\xa7\xe4\xfd\xbe\x74\xd8\x4b\x07\x3c\xb1\x06\x11\x47\xc5\x93\xec\xa8\x18\x0c\x30\x9f\x14\x6a\x14\x5a\x59\xc9\x7c\x24\x67\xfa\x93\x19\x0b\xa5\x89\x47\x4d\x59\x4d\x23\x70\x96\x9b\xb2\xb1\x31\x6b\x84\x7e\x61\xc0\x15\xa9\xd1\x82\xac\x7f\x27\xa7\x8c\x5f\xbf\x58\x31\x29\xa9\x48\x65\x97\xb2\xb2\x5a\x0c\x0f\xad\x12\xc3\x0e\xa7\x8e\xc6\x2a\xad\x47\xfb\xfd\x9e\xec\xf7\x7b\xa2\x4b\xff\xbe\x61\x25\x98\xaf\x3a\x47\x19\x6e\xdb\x8c\xfb\x2c\x9e\x68\x24\xdf\xb4\x68\xf3\x02\x4f\x9d\xd0\x59\xc1\xeb\x7a\x1e\xe9\xac\x4f\x8b\x6b\x67\xce\x9b\xee\x90\xbc\x36\x4e\x17\x4c\x04\x9b\xb0\x6e\xf2\x74\x23\x1c\xf0\x99\x67\xb4\xbb\xe3\x3d\x4d\xd5\xd1\x85\x40\x21\x36\xde\x1f\x58\xe8\x91\x9b\x9c\x96\x52\x14\x0d\xbf\x66\x16\x43\x75\x8b\x43\x80\x48\x68\xb7\xee\x5b\x15\xb8\xbb\xff\xb6\x76\x95\x61\xd6\xd8\xcb\x02\x35\xef\x85\xe0\x58\x2b\x1c\x1e\xee\x97\x35\xbd\x73\x6a\xb8\x33\x3b\xb3\xcb\x77\xce\x8d\x21\x87\x5b\xcf\x8b\xfc\x9a\x18\x4d\x72\xdb\x56\x70\x7b\x5f\x32\x51\xca\xdd\x10\x42\xa2\xdf\x9e\xbe\x79\xfd\x42\xfb\x6e\xd1\x1f\xcf\xb5\x8a\x14\x2b\x38\x89\x0a\x11\xbd\x35\x4b\x1f\xb7\xfd\x9f\xe2\x1b\x09\xfb\x12\x52\xb6\x72\x9a\x85\x8a\x6a\x88\x6c\x44\x92\x62\xee\xf7\xa6\xc3\x4c\xe9\x7b\x52\x0d\x58\x87\xac\xd3\x9d\x05\x02\x83\x74\xa8\x01\x7b\x25\x58\x36\xed\x5e\xa0\x6f\x14\x4f\x34\xd5\xe6\xa6\x31\x55\x97\xb3\xd8\x6e\x5d\x46\x73\xca\x3a\x1b\xf7\xfb\xb1\x46\x1f\x31\x83\x07\x0b\xf2\xc3\x77\x6d\xb7\xd2\x1c\x86\xc9\x70\xaa\xc3\xb7\x95\x2d\xd7\xea\xb7\x88\xd0\xb6\xdb\xc6\x82\xe8\x39\x00\x17\x24\xe4\x3d\xd5\x0d\xd3\x9e\x46\x18\xe0\x9d\x6b\x11\xd0\xc5\xb2\x88\xeb\x5b\xec\xdf\x48\xc6\x9a\xc7\x8a\xa5\xb2\xb4\x30\x78\x1e\x14\x55\xea\x8b\x69\x6f\xf7\xf1\x16\x24\x53\xd7\xd9\xfd\x0f\xb8\xae\x50\x55\x7e\xf8\x64\x3d\x0e\xd6\x7d\x51\x29\xe8\x07\xfe\xe7\x45\x26\xe9\x29\x48\x96\x20\x92\x9c\x11\x32\x69\x39\x78\x23\x5b\xdd\x07\xe6\x48\x2a\x44\xb2\x0b\x3d\x13\x4e\x0a\xb7\xca\x41\xd9\x47\x6b\xa2\xc7\xcc\x8f\x04\x54\x2f\x4d\x48\x2a\xab\x0a\xd7\xe4\xb5\x3d\xb5\x78\x47\x03\x28\x24\x04\x46\xb4\xa6\xa4\xfe\x63\x43\xc5\xb5\xa6\xb2\x0a\xf1\x0c\x76\x18\x77\x62\x11\xad\xb2\x75\x10\x15\x39\xe4\x51\x4f\x1b\x38\xd4\x55\x3b\x94\x70\xe8\xdd\xe6\xce\x6a\xcf\xfc\x6a\x74\x08\xc2\x18\xfb\x40\xe8\x14\xd8\x93\xb6\x48\xea\x7e\xd9\x49\xa8\x33\xb4\x2a\xfe\xf2\x26\x90\x5a\x06\x12\x8b\x40\xda\x15\x3d\xff\xc4\x64\x2b\x63\xc7\x76\x6b\x52\xe9\x88\xf6\xfb\xdf\xf7\x7c\x9c\x73\xa4\x27\x1e\xda\x7e\x33\x60\x45\xf7\x9a\x9f\xea\x1a\x76\x6f\x3c\xaa\x55\x0d\x29\x07\x82\xf6\x4e\xe5\x47\xad\xb3\xd1\xf2\xff\x93\x70\xf5\x12\x2c\xee\xc7\x7d\x49\x33\xd4\xe2\xbc\x04\xfd\xdf\xab\xa7\xe9\xdf\x8d\xed\x92\x69\x8f\xa6\x8d\xd0\xac\xf6\x4c\xd3\x4e\x48\xdb\x23\xf1\x44\xfa\x31\x95\x2d\x91\x3c\x11\xd3\x3d\x9e\xd4\xaf\xdd\xd4\xff\xd8\x6e\x7b\x23\x02\x92\xe1\x39\xbb\xd8\xe8\xfc\xde\x90\xc4\xf0\x76\x51\xd8\x99\xf7\xfb\x88\x27\x57\x42\x3f\x54\xd2\xde\x70\x37\x4f\x80\x83\xe5\x0a\xc7\xb5\x28\xab\x96\xcb\xfb\x9a\xe7\xa2\xdf\xa7\xc8\x03\x64\x13\xf5\x5f\x47\xad\x23\xb2\xaa\x20\xb4\x56\x78\xd2\x12\xdf\xf4\x3a\xdc\x85\x1e\x6a\xe0\xfc\x5d\xe4\x9c\xf1\x0b\xaf\x0e\x71\x94\x45\xb3\x65\x56\x96\x51\x56\x46\x99\x1b\x67\x8c\x2b\x1b\x42\xdb\xc5\x31\x29\x96\x97\xf4\x9d\x96\x46\x3b\xef\x8d\x8c\x33\xff\x51\x66\xa7\x5b\x22\x4a\x26\xe0\xcc\x26\x6e\x56\x8c\x0d\x77\xc1\x9b\x92\xd6\x5b\xef\x04\xcb\x1e\xf6\xfb\xee\x7e\xad\x83\xe8\x0e\xa7\xc7\xfe\xc7\xd8\xba\x6a\xd0\xb2\xbf\xd4\x0a\x01\x9d\x5f\x61\xad\x7a\xeb\xeb\xe5\x1a\xed\x6d\x43\x77\x53\xfb\xcb\x84\x2e\xd1\x68\x9f\x3a\xa4\xaf\x03\xd2\x7c\x86\x24\x90\x11\x42\x82\x60\x17\x17\x50\xd9\xfc\xd2\xc9\xfa\xd5\x49\xf3\x53\x55\x3e\x8e\xab\x4a\xbb\xf3\x89\x1b\x6b\x14\x58\x00\xd7\xc9\xb1\xd7\xcc\xcb\xec\x13\x45\x78\xec\x8d\xca\x38\x3d\xd5\xd9\xfa\x02\x02\x07\x16\xba\x93\xba\xd6\xce\x25\xd6\x1a\xa1\x69\x2c\xa4\x3a\xe5\x0e\xe5\xdb\x1f\x16\xab\x5e\x34\xb8\x03\x39\x13\xb1\x51\xe4\xd6\x37\xac\x1e\x98\x71\xd6\x92\x7d\xa2\xbf\x05\x0d\x79\xf1\x3c\x5b\x2e\xcf\xb3\x59\x28\x38\x35\x6d\xd4\xac\x3a\x55\xd3\xe6\x66\x75\xef\xfd\x78\xb6\x64\xb3\x4f\xf1\xce\x3e\xf1\x76\xdb\x1b\xd6\xb9\x6a\x22\x6d\xde\x80\x99\x9c\x36\x5a\xca\x04\xcd\x62\xdc\xac\x90\x94\xf2\x7a\xa9\x28\x6d\x2e\x4f\xd8\x5f\x68\x1a\x8f\x0e\xd7\x32\x0e\x96\x39\x2f\x44\x4e\x45\x1a\x0f\xc3\xd9\xeb\x2c\x87\x78\xe2\xbb\xf2\x57\x99\xb8\x60\x7c\x77\xf5\x42\x4b\x83\xd3\x38\x33\x91\x8a\x83\xe5\x26\xf2\x38\x06\x9d\xd2\x78\x1c\x2f\xe9\x5c\xc6\xd3\x34\xde\xff\xfe\xfb\xef\xbf\x5f\x7f\xb6\xa1\x6f\x0c\xdb\x64\x9d\x5d\xd0\x3f\xbe\x9b\xcf\x4b\x2a\xb7\xdb\x9d\xbb\x5e\xce\x44\xb1\x5c\x9e\x16\xeb\xbd\xd0\xa0\x64\xb1\x4e\xc5\x20\x5e\x7f\xee\x8c\xe5\x16\x56\x52\xb3\x24\x00\x65\xea\x60\x9d\xb4\x37\x7d\xbd\xa6\x3c\x7f\xbe\x60\x4b\xed\x5b\xda\x55\xc4\x81\xc3\xc5\x10\x0e\x16\x9a\x15\xeb\xeb\x53\x50\x6c\x70\xe7\xa2\x06\xbd\x5d\x27\xcf\x03\xa8\x7e\x1f\xb5\x86\x15\xa2\x2a\xef\x04\xc7\x2e\x84\xd7\xc1\xf6\x43\x47\x06\x38\xb6\xcd\xe5\xda\x35\x92\xdd\x0b\xe4\x20\x1f\x5a\x6b\xe1\x05\x8d\x2e\x76\xad\x40\x78\x6d\x35\xd6\xd9\xbd\xb2\x36\x69\x27\xbe\xd1\xe8\xdb\xb8\x2a\x75\x80\x47\x3f\xd3\xd9\xf3\x62\xb5\xca\x8c\x13\x71\x83\xb1\x3d\x1f\x5c\x34\xed\x99\x80\x34\xda\xfa\xe6\x03\x2d\x37\x4b\xa9\xdf\x1a\xba\x6b\x3f\xbd\xd3\xbd\xf5\x0a\x6b\x10\x3b\xfc\x45\x8a\x94\xd8\xcc\x66\xb4\x2c\xe3\x71\xac\x6d\xdf\xc8\x8d\xee\x79\xec\x8d\x42\xdb\xe0\x76\x16\x85\x18\x3c\x3f\xf6\xd1\x3f\x01\x5d\x06\x87\xd8\x75\x5e\x33\xcd\x77\x95\xee\x2d\x5c\xa3\xcc\xce\x0b\x41\xf7\x62\xb0\xbe\xf9\x72\x9c\x62\xb7\x9c\x6a\xdc\x97\x16\xbd\x25\xe7\xcb\x8d\x40\x98\x04\x19\xa6\x5d\xee\xa7\x1b\x91\x79\x50\xed\x1a\x4a\x03\x7d\xdb\x3a\x99\x19\x7d\x49\xe5\x57\xbb\xcd\x01\xa6\x62\x10\xe4\x42\x20\x18\x7b\xab\x13\x9d\xe1\x02\xde\xe8\xf4\x7e\x3f\x9e\x6d\x64\x3b\xb5\xc3\xfd\x7a\x60\xa5\xbf\x76\xc8\x91\xd6\x6b\x84\x80\x43\x94\x81\x63\x79\xdd\x7e\x54\xa8\x5f\x1b\x19\x3f\xd0\x0e\xc0\x77\x79\xc6\x37\x3d\xb9\xa5\x90\xe6\x74\x35\x96\x82\x7a\xba\x8e\xea\x25\x60\x98\x74\xdb\xad\x95\xee\xf4\xd2\x14\x79\xfa\xc0\x7e\x84\x87\x42\x3d\xbb\xb6\xdb\x51\xe3\x05\x71\xcb\xc4\xcc\x00\xfc\x89\x65\x91\xce\x33\x90\xf1\x40\x2b\x76\xc1\x34\x53\xb3\x60\x76\x15\xdb\x1c\xf9\x9c\x95\x8a\xc0\xcd\xe3\xae\x77\xab\x6e\x97\x99\xad\x97\x44\xef\x97\x34\x2b\x29\xf4\x5e\xdf\x04\x40\x8d\xd2\x2c\x8f\x8a\x79\x54\xb7\x5c\x57\xb3\x03\xdb\xc8\xce\xb8\xd0\x6e\x39\xc6\x76\x7b\xcb\xa0\xbf\x6c\xd4\x7f\x2c\x36\xd1\x2c\xe3\x1f\x1f\xc8\x68\xb6\x91\x91\x42\x00\xd1\x5c\x14\xab\x88\xea\x95\x33\xa1\x92\xbc\x19\x29\x28\x09\xcc\xa4\x7c\x60\xe8\xa4\x33\x4b\x45\x56\xb7\x43\x91\x2e\x56\x55\x53\x4c\xa8\x22\xf4\x97\xe0\x82\x98\xcc\xe0\xb9\xb6\xc4\x64\xae\xfd\xb6\xe6\xf0\x3d\xc7\x64\xf1\xcf\xfe\x7c\x5b\xff\x77\x7c\xbe\xad\xd2\x1d\xb2\x23\x30\x84\xfc\x3b\xbc\xe0\x1c\x33\xa0\xdb\x95\x8f\x53\x3e\x50\x08\x05\x36\xb3\x1d\x80\x3d\xd1\x22\x2b\xf9\x03\x19\x9d\x53\xca\x23\xa3\x01\xc9\x4a\x9a\x47\xfb\x51\xb9\x59\x53\x81\x70\xa3\x84\x1a\x8c\x3a\x81\x86\x85\xd7\x93\x0d\x64\x97\x21\x89\x7d\xd0\xea\xd5\x8a\xdd\x74\x2c\xcd\x60\x91\x4c\xce\xce\x60\x3d\xcf\xce\x9c\x86\xc0\x05\x95\xef\xed\x12\xbf\x9b\x23\x89\xbd\x88\xea\x9e\x3c\xb9\xfd\x46\x55\x9b\x01\x31\xab\x28\x7f\xae\x28\x36\x90\x01\x76\x76\xd4\x85\x2a\x09\x0c\xac\xdf\x57\xc4\x54\x2b\x7c\x89\x2f\x15\x51\x8b\x10\xd5\x91\x3a\x35\xd3\xdb\xdc\x29\xe7\x34\x52\xb5\x15\xba\xa8\x77\x85\x80\xbd\x56\x3c\x50\x8b\x81\xf7\xa8\x27\x3b\x6c\x0a\xf1\xd5\x6b\xcf\x83\xab\x86\x07\x7b\x67\xf8\xe0\x8b\xed\x47\xc4\x42\xf6\xb8\x37\x24\xfe\x29\x18\xf7\x86\x55\x85\x89\xec\xf7\x91\xe9\xa3\x6c\xac\xe7\x71\x30\x15\xd6\x65\x4c\xeb\xdd\x48\xa5\x02\x28\x42\x31\x59\x23\xf9\x9f\xf2\xb8\x0f\xf3\x4e\x21\xe5\xd8\xfe\xd0\x54\x98\xd1\x0e\x78\xe6\xf1\x02\x0c\x4e\x0e\xb6\xa1\xf3\x8e\xed\x8f\x46\x1b\xa7\x6d\x46\x40\xb8\x05\xf5\x7a\xd7\x7f\x9a\xb5\xbb\x2f\x9d\xd4\xd3\xee\x58\x20\x8f\x31\x81\x8f\xbd\x8f\x71\x43\xfe\xe2\x28\x0d\x0f\x9a\x43\x74\x6f\x1d\xc4\x40\x2f\xdc\xd2\x3c\x59\xd2\x1c\x61\xa4\xa8\x28\x5d\x31\x18\x8f\x22\x29\xdc\x29\xd1\xf1\x41\x74\x8f\xc5\x5d\xbd\xd1\x16\x53\x5c\x5d\xcd\xb3\x8d\x10\x94\x9b\xb5\x33\x41\x97\xac\x0a\xd4\x33\x7b\xbb\x87\x92\xfd\xa7\x50\x27\x8b\x5e\x45\x1b\x14\x20\xda\x81\x19\xe5\xed\x9c\xfe\x0d\xa9\x6e\x3f\xd4\x2f\x13\x6f\xd1\x2c\x70\x73\x57\x6a\x0a\x9f\x98\x77\x03\x14\xa8\x7c\x1a\xd9\x83\xa9\xd0\x72\x58\xa1\x10\x72\xa4\x31\xed\xd4\xde\xf1\x0e\x73\x8b\x79\x89\x1c\x31\xa9\x55\xf1\x9d\x76\x50\x98\x43\x8f\x64\xb7\x8b\xd0\x93\xac\x31\x3c\xed\xb7\x85\xde\x9b\xfc\xb7\x50\x94\x98\x72\x28\xbc\x41\x3b\xb6\xf4\x8e\x5a\xf6\xb9\x3a\xb5\x28\x85\x95\x27\x3a\x38\x05\xcd\xbf\x36\x3e\x99\x68\xfa\x97\x00\xb5\x39\x25\x32\x60\x12\x77\x0c\x86\x70\x44\xa4\xbd\x5e\x73\xc5\xcd\x93\xd5\x8d\xcd\xa9\x24\xec\x50\xd2\x4f\x45\xbf\x7f\x57\x1b\xfa\xa8\x11\x01\x24\xa0\xac\xd0\x2c\xc9\x3c\x91\xd9\x65\x23\x5e\x4d\x9e\xc9\x6c\xdf\xad\xdd\x7e\x3c\x00\x75\x31\xd9\xa4\x82\x85\xe7\xe8\xba\xc1\xc6\x13\xb8\x92\x16\x27\xa5\xab\x6a\x8a\x9d\x02\x15\x69\x28\x9b\xc1\x0d\xdd\xd4\x3e\x3b\xae\xe5\x1c\x05\xc2\x63\x04\x4a\xc3\xee\xdd\x82\x58\x00\x21\x22\x91\x16\xf8\x58\x58\xf9\x1e\xe1\x78\x2c\xf0\x76\x8b\xea\x96\x18\xc6\x95\x77\x89\x13\x81\x1e\x62\x08\x60\xbb\x5b\x0b\xe2\x51\x53\x9a\xe8\xa9\x7b\x35\x85\x7b\x76\xc5\x10\x84\xba\xbc\xa9\xd4\x54\xc1\x78\x96\x8a\xed\x36\x4e\x62\x52\x80\x8c\xe8\xf3\x8f\x74\x2d\x17\x24\x4b\xa5\xb6\xc0\x98\x17\x62\xf5\x3b\x7a\xbd\xdd\x32\x52\x7a\x4e\x54\x3c\x2a\x95\x91\x0d\x59\xe2\x9b\x65\xba\xdc\x6e\x47\x8d\xd8\x4d\x2c\x64\xed\x34\xd3\x03\x99\xa7\x6c\x32\x9b\x92\x3c\x95\x49\x99\xcd\x69\xbf\xaf\x85\x69\xac\x84\xbf\x9a\xac\xbf\x43\xc8\x3a\x07\x7f\xff\xea\xcf\x2a\x75\x52\x5a\x5d\x07\x64\xb4\x0b\x4f\xc6\x0c\xad\xea\x54\x72\x99\x6e\x8e\x37\x03\x31\xc8\xd0\x0c\x8f\xd5\x3f\xa0\xa2\x91\xf7\xfb\xbd\x75\xbf\xbf\x72\xda\x90\x30\x85\x39\xae\x6d\x8b\x7a\xf5\xfa\x6c\xb7\xcb\x27\x45\x2d\x8b\x42\x73\x72\x49\x96\x83\x11\xde\x2b\x27\x97\xd3\x74\x6e\x22\xe7\x92\xd2\x13\x86\x15\xa4\xb0\x7e\x65\xe1\xf7\x86\xdb\x2f\x5f\x76\x51\xbb\x31\x46\x10\x2d\x31\xb0\x4f\x65\x2a\x92\xe2\x92\x0a\x45\xd7\x68\xea\x7e\x93\x8a\xce\x66\x2d\xd5\x66\xb1\x39\xe2\x10\x6d\xb7\xb3\x3c\xbd\x3b\x45\xd8\xb5\xa8\x4d\xd6\x00\x36\xab\x51\xf2\x5b\x70\x43\xe4\x49\xfd\x59\xf9\x36\x7b\x0b\xbd\xed\xeb\x07\xba\x53\x12\x4f\xd4\xc3\x54\x24\x7a\x08\x40\xd4\xda\x96\x1b\xc1\x09\x25\x4e\x04\xcd\x37\x33\x1a\xf6\x08\x75\xd7\x78\x27\xdc\xe9\x1e\x85\xa6\xcb\xfa\xfd\x36\x34\xa8\xd4\xed\xb6\x7b\xdb\xdc\x29\xdc\x27\x22\x08\x70\xd6\x10\xa4\x47\xb7\x5b\x14\x00\x3d\x79\xdc\xb3\x1a\x0c\x63\x71\xdc\x6b\xd8\x08\x5a\x38\x1b\x1b\xfb\xb5\x4a\x4f\xe8\x18\xd1\x09\x9f\x82\x66\x32\xa1\xb8\xa3\xe4\xd6\xd4\xd3\x84\x96\x44\x60\x15\x7d\xf7\xe8\x72\x42\x07\xd9\x80\x4f\x53\xa1\xda\x94\x15\x38\xec\x40\x9c\x50\x52\x40\x97\x44\x28\x1c\x44\x6e\xaa\x56\x1c\xb6\xd0\x59\xf6\x95\xf8\x53\x6e\x5c\x5b\x65\xda\x74\x73\x83\x49\x91\xce\x10\x4b\xca\x05\x9b\x4b\x84\xd5\xbb\x7d\x86\xd8\x64\x38\x55\x4f\xf7\xe5\x91\xbb\x97\xe6\x47\x7a\xdd\xef\x3c\xef\xf9\xa4\x98\xaa\x23\xff\x05\x67\x1d\x4e\x76\xa9\x4f\xb6\xeb\x10\xda\xd1\xab\x71\x84\x20\x73\xbb\x55\x85\xd4\x8d\x6b\x72\xfb\x7d\xe8\x2d\x8d\xb5\xb3\xad\xfa\xe9\x33\xf7\x00\xf9\xa6\x1a\x4f\x60\x32\xaa\x28\x61\xde\x9d\x8b\x76\xcd\x1c\x57\xd0\x2c\xb5\x2b\xad\xae\xb9\x65\x4b\x0f\xc0\xea\xce\xff\x48\x25\x15\x2b\xc6\x69\xc4\xe6\x51\xc6\x23\x33\x3b\xa6\x1e\xb3\x3f\x6c\xe6\x73\x2a\xf6\xa2\x6f\x54\xc1\x7f\xc9\x36\x72\x51\x88\x28\x8a\x5e\x52\x51\x94\x65\xf4\xec\xbc\xd8\x7c\x5a\x64\x39\xfb\x33\x5d\x44\x4f\xac\xb2\xfd\x1c\x32\x93\x42\x5c\x3c\x85\x5a\xc6\x53\x45\x14\xbd\x79\x75\xba\x17\x7d\x73\xb0\xc3\x93\x91\x7d\x45\xc2\x83\x8f\xda\x97\x5f\x83\xdd\x11\x64\x8c\x34\x4a\x24\xac\xd4\x43\x6e\x31\x4a\x5c\xfa\xed\x1a\x33\x0f\x1f\x6b\x5d\xbf\x87\xbf\x6e\x38\xec\xb7\x1c\xed\xe7\xb5\x3c\x73\xbb\xd5\xb6\x38\x5a\x08\x2b\xe9\x4a\x3b\xa0\x7c\x93\xad\x49\xcd\x87\x46\xbb\x38\x1c\x75\x2d\x12\x7b\xa3\x74\xea\xeb\x45\xf3\x69\x59\xe1\xca\x0b\xb7\xa7\xdb\xee\xc4\xc1\x2c\xd9\x5f\x68\x6a\xa4\x70\x39\x5b\x51\xae\x1e\xc4\x36\x01\xfa\xb2\x83\xaa\x88\xdf\x5a\x49\xdb\x4a\xf2\xc6\x8a\x24\xf5\x6a\x2a\x7a\xbe\xc6\xc0\xdc\xea\x78\xba\x7e\x06\x03\x63\x84\xd9\x5c\x27\xbf\xf3\x52\x35\x41\xb8\x09\x35\xee\xad\x65\x9a\x9e\x50\x79\x8c\x84\x3a\xd8\xec\x2f\x54\xab\x04\x83\xdb\x8b\x27\x3a\xc5\x0a\x5e\xd9\x5f\xe8\x60\xa0\x28\x20\xeb\x9a\x96\xf8\xe9\x56\x47\xd7\x9b\x9a\xd6\x04\x0d\x68\xb8\xef\x9a\x59\xaf\x27\x2d\x15\xad\x5a\xdd\x4f\x83\x43\x95\x90\x39\xb6\x2c\xb2\xd6\x92\xef\xef\xfb\xb3\x76\xf6\x9c\xa4\x37\x6c\x2d\xbc\xe6\xea\x87\xd7\x9e\xb0\x5b\xc6\xc8\xec\x18\x3b\x6b\x88\x44\xca\x6c\x97\x12\x63\x6f\xe1\xf6\xf7\x09\x98\xe7\x9b\x05\x45\xc1\x21\xb6\x27\x82\x89\xc0\x63\xb8\x64\x11\x4f\x99\xbb\x67\xa1\x65\xe4\x37\x0d\xb6\x75\x56\x0d\xf7\x7e\x6d\xab\xf5\x18\x2b\xdc\xb5\x06\x9d\x64\x4e\x46\xb0\x44\xb8\xb5\x48\x8b\x2c\x88\x25\xbc\x2e\x16\x99\x8e\xd4\xeb\xd7\xba\xa0\xf2\x8e\x5a\x7a\x49\x9b\xb5\x8c\x11\x1a\x9b\x31\x19\xb0\x3a\xdd\x7d\x1c\x6a\x7f\x0a\xc7\xc3\xf1\x7d\x20\xa6\xd9\xed\xac\xd8\x70\x99\xee\x1a\x48\xa3\xa8\xb9\x19\x43\x30\xe3\x7b\x90\xe2\xf8\xc6\xa8\x87\x4b\xc2\x15\xf6\x97\xdd\x17\xdb\xe8\x58\xbf\xcc\x7d\x60\x0d\xbc\xa4\xc0\x48\x03\xb4\xa6\x6d\x26\xd7\x7e\xb1\x02\xc3\x7a\x56\x96\xc5\x8c\x81\x8f\x9c\x4e\xd4\xfb\x2f\xea\x5f\x5b\x7a\xf8\x3d\x28\xd2\x60\x47\xd0\x6f\x53\x17\x88\x87\x56\x2d\x40\xa6\x65\x20\xa6\x0c\x11\x84\xa9\x77\x48\x5d\x5d\x17\x05\x87\xc2\xbd\x51\x23\x14\x71\x7b\x2f\x75\x5c\x42\xb7\x44\x91\x30\xd1\x51\x32\xf8\x83\xd4\x4e\x1a\xdb\x7e\xb0\xc0\xb7\x2e\x36\xb4\x57\x80\x61\xb5\x97\xa5\xbd\x21\xa1\xa9\xf1\xaa\xeb\x3a\x36\xa4\x2a\x98\xa4\xfb\xf5\x8f\x91\x1a\x11\x11\x08\xe3\xb1\x69\x64\x64\x9e\xe5\xd2\x3a\x04\xc0\x78\xdc\x1e\x15\xff\xab\x46\x45\x04\x18\x08\x58\x22\xd2\x99\x96\x3d\x4d\x99\x19\x0f\x0f\x8c\x47\xfb\x3f\xa8\x3a\xe0\x41\xb9\x14\xec\x96\x7d\x50\x8f\xc0\x7a\x27\x4c\x69\x84\x49\xf9\xa5\x5b\x61\x27\x5d\xda\x49\x67\xb7\x4f\xba\x54\x93\x16\x76\xd2\x93\xe1\xb4\x5e\x81\xc9\x68\x7a\x8f\xad\x29\x77\x2d\xc5\x44\x58\xb7\xc9\xd3\x5b\xb7\xe7\xeb\x8c\x94\xb0\x74\x48\x8a\xce\x76\xb1\xa7\x69\x71\xfb\x18\xe9\x84\x0d\x06\xd3\xc0\x96\x39\xbe\xdc\x1d\xa7\xce\x2d\x51\xa3\x76\x56\x23\x82\x3b\xea\xbb\xcd\xae\xc8\x6d\xb6\x84\xc8\x6b\xbd\xe3\xcb\x23\x0d\xc0\x1a\x6e\x8c\x87\xf1\x72\x4d\x67\xa1\xf0\x0b\xf5\x50\xbe\x7c\x00\xea\x45\x12\xf3\x22\xa7\x7f\x2e\x93\x8d\x64\x4b\xdb\x4d\x32\xdb\x94\xb2\x58\xc5\xb8\x39\x32\x93\xdb\x1c\x99\x2c\xfe\xf5\xe4\xdd\xdb\x3b\x06\x56\x80\xd9\x7c\x30\x2a\x8c\x76\x7d\x59\x1b\xe8\xb0\xa6\x4a\x30\x60\x6f\xa0\xbc\x8c\x3f\x43\x22\x7c\x63\x98\x62\xa7\x5d\x55\x6d\x31\x7c\xab\x63\x95\x7f\x42\x8b\x61\x0f\x6f\x53\x7c\xb3\x9b\x3c\x27\xf1\x19\x07\x3e\xed\x4d\x2d\xd7\x19\xb5\x24\x3e\xb5\xa1\xa6\xa6\x6e\x0a\x0e\xaa\x33\xc2\xdb\x60\xd5\x46\x2b\x8e\x96\x2b\xdb\x39\xe5\xb5\x9a\x60\x72\xa6\xd1\x41\xad\x8c\x6f\xbc\xb9\x78\x1d\x0d\x31\xa1\x77\x40\xad\xb8\xed\xd8\x84\x81\xae\xc2\x44\x24\xc5\xbc\x1b\x86\xa4\xb6\x34\xab\x4d\xfe\x09\xaf\xdd\xe8\x28\x50\xf4\x5d\x22\xd5\x2f\xba\xa7\xa9\x3c\x76\x93\xec\x5e\x1a\xdc\x5d\x1a\x22\xa1\xab\xb5\x4f\x7b\xf9\x21\x50\x84\x31\xac\x6d\xac\x08\xdc\x5a\xaa\x22\x0b\x92\x89\x0d\x49\xae\xa8\xa5\xa1\x8a\x56\x03\xc3\x5e\x23\x5e\x0c\x83\x9d\xde\x3d\xff\xc0\x88\xe6\x81\x31\x8e\x87\x02\x3b\x00\x8f\x43\xfd\xe2\x24\x22\x58\x42\x6f\x47\xc3\xef\x67\x1d\x44\xb3\x20\x19\x29\xc9\x66\x6f\x47\xd4\xb5\xe2\x7c\x69\xb7\xf1\xc0\xd0\x4c\xe3\x88\x19\x1d\x0b\xc8\x39\x5f\xd2\x44\x5b\x73\x05\xc4\xaa\x5d\x15\x9d\x70\x8b\x3a\x92\x1f\xe3\x17\x51\x06\xa2\xe5\xf3\x6c\xf6\xc9\xb4\xda\x64\xa2\x52\xbc\xdd\x4a\xc3\x59\xd5\x93\x4e\x58\xf9\x7b\x46\xaf\x20\x27\x64\x18\xe3\xf1\x50\x0c\x54\x4d\x8d\xbb\x2c\x67\xfd\x09\x66\x82\xda\x4b\x05\xf5\xbd\x54\x64\x83\x01\xe6\x88\x4e\x32\x08\x33\xe9\xec\x74\xbb\xd3\x74\x74\x29\x66\x73\x24\x9c\x41\xba\x9d\x67\xc4\x5a\xe8\xa6\xd7\xdc\x77\xb0\xcb\xe8\x1e\x1b\x84\x31\xd9\x59\x07\xc6\x5c\x68\xa3\xec\xb6\x11\x33\x2a\x30\xb8\x3b\x9a\x14\x53\x52\x98\x81\xab\xe2\x2c\xa5\x24\x4b\x87\x47\xbd\xa1\x7a\x67\x6d\x52\xd6\xa0\x04\x8e\x30\x47\x1b\x43\x94\x65\x98\x64\x83\x81\xae\xd9\xa0\xc7\x9d\xa3\xa2\x3f\x30\xb9\x78\xbb\x59\x2e\x7f\xd7\x20\x97\xff\x2a\xc0\xf2\x9b\xfc\xfa\x40\xd6\x6c\xfd\x1f\x1e\xe0\x34\x06\xb2\x30\xd7\xb4\xee\xa2\x12\xd3\xb0\x2c\x0a\x76\x00\xa4\x6c\xf8\xbf\x17\xc0\x6a\x61\x72\x18\x66\x3d\xac\xca\xef\x15\x89\xdf\x59\x2e\xb1\xff\xd8\xd0\xd7\x8c\x7f\x7a\x95\xc7\x8c\x23\x13\x46\x15\xf7\xfb\x48\x11\x07\xc5\x92\x26\x57\x99\xe0\x28\xe6\x17\x22\x5b\x2f\x12\xf8\x77\x1c\x81\xab\x30\x05\x59\xa0\x5a\x76\x69\x1c\xc2\x0e\x93\xd1\xa3\xe8\xdf\xfd\x26\xff\x3d\x62\x65\x94\xd3\xb5\xa0\xb3\x4c\xd2\x3c\xf9\xc8\x7f\x2a\x69\xf4\xef\xf0\x22\x87\xa6\xfe\x3d\xd2\x0e\x01\xad\x5e\xdd\x47\x1e\x43\xe8\x23\x12\xbf\x2d\x24\x1d\x47\x72\x41\x05\x05\xe6\xe9\xb2\x2c\x22\xed\xe2\x4e\xad\xaf\x91\xf7\x45\xe7\x74\x91\x5d\xb2\x42\x8c\xa3\x97\x6a\x24\xbc\xb8\x8a\x0a\x1e\xd1\x6c\xb6\x88\xa0\xfd\x8f\x9c\x95\x91\x9a\x09\xcb\xa9\xa0\x79\x24\x0b\x50\x64\x29\xa4\xf5\x92\x03\xa5\xa2\xf3\x6b\xd7\x22\x82\xca\x34\xbf\xa0\x3a\x00\xab\x9a\x0c\x4e\xc0\x95\x40\x5d\x21\xa5\x89\x3f\x4d\x5c\x4b\x10\xfd\x52\xa0\xf3\xe7\x55\xea\x8d\x82\xb0\xf3\x26\x5b\x77\x4f\xb7\xbf\xde\x75\xd0\x84\x7f\x7f\x93\xad\xff\xdd\x4c\xc2\xdc\x81\x4e\x51\x71\x5d\x2c\xaf\xe7\x6c\xb9\x8c\x98\x5a\x96\x79\x21\x68\xb4\x01\x33\x69\xdd\x94\x71\x03\x24\x1d\x63\x55\xe8\xd8\x63\x37\x95\xf1\xda\xe5\x0f\xf5\x38\xcc\xd2\xd5\x3e\x59\x09\x4b\x97\x6d\xe0\xe6\x3a\x44\xf1\x76\xab\x43\x1f\xe0\x1b\xb6\xdd\xa2\xe5\x84\x4f\xd3\xa1\x75\x2b\x1b\xff\x4b\x3c\x88\x06\x03\x95\xb8\x07\x4d\x0d\x0a\x22\x07\x85\x33\xb2\x51\xe3\x2a\x5d\x94\xb4\x6a\x97\xd0\xc4\x2f\xa6\xc7\x83\x2b\x92\xab\xb9\x2c\xd2\x4f\x64\x9d\x7e\x22\xab\xf4\x13\xb9\x4c\x3f\x91\xeb\xf4\x26\xcb\xf3\xb7\x45\x4e\xc7\x67\x24\xcb\x73\xb5\x57\xcd\x56\x39\xbe\x59\x19\xb7\x0c\x2c\xd5\xd8\xee\x0c\x51\x4c\x8a\xf4\x0a\x24\x62\x67\x48\xaa\x77\xb3\x0d\xd0\x53\x3b\xe2\x00\x8e\x69\x89\x49\x86\x18\x29\x31\xa1\xda\x9c\x3e\x43\x85\xfa\x5a\xa0\x92\xc4\x59\x9e\xc7\x98\x5c\xaa\x77\x77\x45\x34\x6f\x12\xfa\xff\x6c\x3e\x60\x58\x2f\xc8\x05\x05\x33\xb8\xf1\x95\xfd\xf5\xbc\xd8\x70\x39\x7e\xa7\x3e\x55\x79\xfd\x79\x62\x3f\x4b\xef\x5b\x95\x2e\x5b\xc5\xcb\x80\x12\xc6\x95\x1f\x78\xff\x18\x02\xc4\x7c\x2a\xc7\x0a\x99\x54\xc4\x60\x10\x18\xc2\xa9\xfd\x52\x0d\x51\xbd\x6e\xde\x6a\x89\x5a\xa4\x07\x2d\xaa\xed\xee\xf7\x99\x6e\x2e\x48\xf0\xd9\x98\xe4\x11\x3f\x6e\xb7\x53\x8b\x9f\x86\x47\xec\x89\xbb\x1f\x06\x03\xeb\xe5\x35\xa5\x13\x36\xd5\x91\x61\x14\x8a\x79\x95\x6b\x2f\x55\x1c\x81\x26\x00\x2a\x12\x59\xa8\x63\x57\x78\x6e\xf0\x2b\x64\x06\x43\x28\x11\xb8\x33\xf4\xfb\x75\x09\x61\x33\xeb\x1e\x8f\x75\x47\x63\x9b\x66\x44\xb3\x30\x86\xec\xb6\xee\x2b\x7f\x31\xbb\x9b\x42\xf8\xde\x0e\xf3\x49\xb8\x42\x64\x3a\x24\xbc\x76\x28\x21\x9f\xf0\xa3\xc1\x40\x62\x8a\xc4\x44\x4e\x71\x45\xce\xe9\x05\xe3\x3f\xad\xf3\x4c\xd2\xf1\x8a\x50\x9e\x9b\xdf\x97\x5a\x89\xdf\xd7\x30\x59\x21\x4c\x4e\x9b\x17\xe8\x0b\x44\x13\x96\xc3\xfb\xf5\x12\xe1\x8a\x2c\xb2\x12\x46\xf9\x4c\xfd\xaa\xa1\x51\xa7\x79\xf1\x57\xae\x3d\x4f\xd4\xf6\x29\x71\x9d\x14\x7c\xef\xba\x11\x7b\xc4\x9d\xd4\xeb\xc4\x1b\x67\xba\x4a\xdf\x83\x13\x59\x33\xd6\xf4\x32\xfd\x40\x16\xe9\x05\x59\xa7\xe7\x04\x1a\xa0\x84\x1a\x15\x8b\x6b\xdf\xb1\x47\x85\x30\xb9\xae\x09\xfb\x0b\xfd\x0c\xcf\x8d\x5b\x11\xb5\xe2\x63\x6a\x7c\x9f\x9e\x5e\xaf\xe9\x58\x56\xb8\x13\xe6\xc7\x96\xe6\x6a\x72\xbb\x4b\x9f\x69\x25\x56\xdf\xa7\x6f\x80\xaa\xb3\xda\xd7\xaa\xb1\x88\xe5\x94\x4b\x36\x67\x54\xc4\x78\x6f\x55\xbb\x78\xf1\xc5\x3b\xc7\x88\x27\x79\x26\xb3\x54\x90\x35\xe2\x24\xde\xc0\x02\xc4\x18\xb4\x4f\x34\xcb\x01\x54\x6d\x21\x13\xf0\x06\x26\xd2\x09\x78\x00\x87\xf0\x46\x78\x3c\x4f\xcb\xcd\x30\xde\x5d\xee\x8b\xda\xee\xdf\x9e\xd2\x9e\x3d\x87\xbd\x91\x37\x42\xa1\x81\x15\x00\x1a\xdf\x98\x2f\xd0\x5e\xda\x6b\x9e\x14\xee\x9f\x94\xcf\x88\x4f\xd8\xb4\x76\x25\xe3\x49\x24\xd6\x48\x10\x63\x9e\x64\x10\x5f\x6f\x58\x8f\xeb\x9d\xf7\x2c\x06\xee\x7d\x33\x46\x9f\x43\xac\x86\xe5\xe6\x32\x3f\x23\x6b\x69\x50\x4f\x42\xa3\x35\x06\x8b\x06\x5a\x43\x4f\x86\x8d\x19\x12\x61\xc5\x20\x92\x8c\xbc\x1d\x31\x67\x58\xa3\x77\xaa\x31\x88\xe7\x3b\x15\xe9\x36\xb9\x5e\x0a\x8c\x9f\xa6\xc3\x7e\xdf\x7c\xf9\x0d\x92\xc2\x95\x2d\x1a\x65\x8b\x40\xd9\x05\xa2\xb7\xac\xca\xb3\xa6\x84\xd0\xed\x18\xdf\x6e\x7b\x76\x1c\x9e\x20\xd7\x73\xa7\x69\xc7\xe5\xf6\xc6\x45\xa1\xf9\xff\xd8\xfb\xba\x2e\x39\x6e\xeb\xc0\xf7\xf9\x15\x3d\x7d\x74\xda\x40\x06\x6c\xf5\x50\x5f\x51\x53\xe5\x3e\x12\x49\xd1\xfa\x22\x29\x0d\x29\x59\x29\x55\xe6\x60\xaa\xd1\x3d\xe0\xd4\xa0\x5a\x28\xd4\x0c\x87\x53\x75\x8e\x45\xaf\xed\x38\xf6\x6e\xbc\x9b\xac\x37\x1b\x3b\xf1\x26\xb1\x93\xf5\x39\x9b\x44\x71\xac\xac\x2c\x59\xcc\x03\xa3\xf7\x9e\xff\x20\x2a\xde\xb7\xfd\x09\x7b\xf0\x55\x05\x54\x57\xcf\x8c\x48\xea\x6c\x36\xcb\x97\xee\xfa\x40\x01\x17\xc0\xc5\xc5\xbd\x17\xf7\xc3\xbc\x09\xb9\x22\x9f\xb4\x26\x66\x44\x52\x6b\xd9\x69\x27\x54\x75\x87\x96\x4e\xfd\x35\x60\x3b\x00\x1e\xd6\x77\x57\x01\x3c\x8c\xd7\x82\xf5\xfa\xc9\x1b\x00\x1e\x0e\x82\x00\xc4\x67\x82\x75\xd8\xeb\x8d\xdd\x43\xf4\x83\xfe\x84\x72\x02\xba\x26\x1e\xb1\xca\x14\x6c\x0b\x04\x03\x07\x57\xaf\x59\x26\xb4\x85\x9d\x6e\xc9\x37\x5d\x59\x4b\x65\x9d\x2a\x29\xbe\x48\xb5\xec\x24\x48\x27\xdd\x23\x5c\xf3\x7c\x6a\x65\x66\xda\x15\x62\x86\xb3\x4c\x25\xd4\x22\xd0\x09\x16\x29\xea\x03\x0a\xb9\x12\x6c\x3c\x61\x66\x58\x6e\x09\x14\x01\xcc\x84\x10\xae\x48\xfc\x4a\x5d\xb6\x2c\xcb\xca\x25\xfd\x89\x67\x9b\x81\x21\x34\xc6\xda\x31\x3e\xb3\xae\x4d\xdb\xcc\x79\x5f\x6d\xd2\x66\x0f\x00\x89\x09\xd0\x88\x58\x95\x96\xcb\x9d\xe9\x73\x7c\x2d\x58\x87\x2a\x0c\x1e\x8f\x14\x49\xb2\xab\xa5\x0a\xe1\xb8\x60\x33\xa6\xf5\x9d\xe3\x80\x20\x63\xf2\x68\x17\xb7\x51\xad\x49\x6a\xe4\x64\xa6\xc1\xfa\x2b\xa2\x0b\x8e\xcc\xbf\x3d\x17\x1e\x9a\xfb\x20\x14\x91\x17\xd7\xdf\x26\xb4\xd5\x0e\x7b\x1a\xcf\x4c\x8b\x0a\xcf\x84\xd3\x9a\x3d\xbc\x1e\x07\x6c\x49\x8c\xff\x8e\x2b\x3d\xae\x75\xff\xf7\x4f\xfe\xe3\x77\x3b\xdd\x35\xe1\x46\xb0\xf2\xf5\x45\xed\x52\xcd\x6a\x43\xc4\x69\x13\xcc\x95\x03\x24\x9d\x1c\x74\x62\xed\x76\x90\x4b\x59\x0c\x27\xd9\x81\xb5\xd6\xc0\x59\x87\xec\x29\x6f\x99\x2c\xd7\x3a\xae\x1a\x7d\x44\x10\x76\x55\xf2\x5b\x89\xe6\x5d\xd4\x4d\x27\x93\xae\x8a\x80\xed\xfa\x79\xc8\x05\x29\xb1\xa8\xc9\x27\xcb\x39\x6c\xc9\xb2\xbf\xa1\x5b\xb1\xf0\x6c\x11\xdd\xbc\xdc\x58\xc6\xa8\x93\x51\x16\x13\xc9\xd6\xe3\x84\x13\x3c\x3e\xe8\x6c\xe3\xac\x33\x33\x55\x76\xbe\xd2\x5d\x93\xb5\xae\x75\xbf\xd2\x55\xe6\x6b\x86\x3e\x2e\xb5\x8f\xf2\xe2\xea\x19\x9d\xa9\x1b\xe8\xcb\x44\x35\x39\xb5\x1e\xc2\xaa\x16\x9a\x0b\x53\x05\xcb\xa9\x6a\xb0\x52\x80\xf2\x7a\x31\x13\x9e\x16\x05\xd0\x4f\x82\x30\x82\x36\x08\xec\xa1\xad\x70\xc8\x54\xc0\x30\x5a\x2a\xcd\xac\x17\x26\x4b\xa1\x9d\xbb\x4f\x57\xbc\x66\x6b\x37\x91\xb6\x2e\x95\x63\xbf\xac\x5b\x26\xcc\x95\x02\xaf\x92\xcd\x6d\x7c\x49\x1e\xa1\x34\x18\x9c\x4b\x9f\xa3\xf5\xfc\xa6\x90\x86\xa9\x8e\x2a\xa9\xbc\x5e\x83\x80\x49\x02\x6b\x88\x7f\x2a\x77\x9e\xca\xa4\x13\x49\x54\x71\xa0\x37\xf2\x14\xd2\x75\x2b\x92\x4f\xeb\x08\x19\x8b\x87\xbb\xbd\x1e\x60\xc1\x42\xfa\xbb\x59\x7b\xdc\xb2\x1a\x53\x5b\x60\x36\x56\x8a\x12\xf4\x15\x5c\x01\x6f\xf8\x2e\xac\xe2\x93\xb1\x6a\x7b\x27\x2a\xde\x92\xa3\x23\x4e\x25\x85\x4a\x19\x22\xfd\x74\x32\x91\x97\x93\x09\x22\x8a\xdc\x07\x42\xfd\x21\x72\x52\x3c\x0f\x57\x43\xfb\x6f\x36\x33\x93\x9f\x68\x46\xab\xd4\xc8\xf8\xbc\xda\x10\xb3\x25\x99\x5e\x38\x71\x92\xc2\x9c\xff\xda\xf3\x97\x2f\x5d\xdc\xb8\x78\xad\xb5\xe8\x8e\x5b\x52\x55\x7a\x62\xea\x9a\xe3\xdb\x4e\xdd\xb6\x2f\x72\xde\x5a\x08\x3b\x65\xde\x94\x1c\x30\x16\x27\xf5\x89\xba\xf5\xc6\xc7\x16\x65\x6e\xd1\x29\x11\x17\x08\x99\x9d\x98\x3b\x67\x4a\xc4\x2b\xe4\xe0\x4d\xb5\x97\xb7\x16\x4e\xdc\x44\x3b\xd9\xf1\xc0\x5e\xf5\xca\x6a\x2a\xd2\x3e\x5a\x5e\xc1\xab\x3c\xdd\xa5\x59\xfb\x0c\xc4\x4e\xc9\x1d\x72\xf0\x12\x3b\xa6\xd6\x37\x9c\xb2\x49\x9a\xee\xe4\x33\x33\xc8\x69\xfb\x74\x6c\x3b\xe5\x77\x09\x9f\x92\xa5\x23\x76\xa9\x59\xf2\x32\xc9\x94\x3b\x42\x4b\xd9\x0b\x4e\x59\x96\xf2\x5d\x9c\xd0\x5b\xe4\x18\xa8\xf7\x9d\xf2\x7a\xef\x7c\x8b\x8a\xed\x34\x6f\x2f\xfd\x82\x53\x7a\x96\x73\xf2\xfc\xf2\x84\x4a\x57\x9c\xa2\xd9\x31\xe8\x70\xc3\x29\x27\x54\x58\x84\x96\x42\xd7\x6d\x72\x23\xea\x6d\x8b\x8a\x23\xd1\x81\x1c\x48\xd9\xb0\x50\x34\x4c\x1f\xd0\xd6\xa5\x81\xef\xe8\xcc\x94\xaa\xc8\x53\x58\x5f\xc0\xc2\x5a\x31\x3a\x7a\x75\x58\x6a\x7a\xdb\xb0\xdf\x71\xda\x45\xf6\x46\x4e\x35\x95\x04\xd6\x8b\x0b\xe4\xfa\x4c\x1c\x43\xb3\x16\xd4\xd4\x9e\xe0\x67\x23\xeb\x2a\x2b\x1d\x5e\x59\x43\xe3\x20\x8c\xaa\x3c\x20\xe7\x9c\x3c\x36\x45\x21\xce\x9c\xe9\x7c\x75\x00\x7b\xbd\x55\xc0\x1a\xb6\x2e\xe7\xa0\x89\xd6\x6d\xf9\xe3\x3a\x81\x06\x5d\x92\x40\x83\xf5\x7a\x86\xb7\x56\x71\xc6\xd3\x3a\x81\x86\x01\x26\xf5\x12\x68\x50\xc3\x63\x50\x9b\x40\xa3\x22\x40\x8d\xe0\x41\x66\x9b\x23\x41\x18\x21\x11\x0c\xce\x89\xe7\x9a\x5b\xe7\x39\xb1\xb6\x06\x89\x36\x7b\x55\x79\x80\xeb\x9d\x32\x14\x11\x74\xb6\xe8\x85\x64\x96\x8d\x44\x4a\x61\x64\xc3\xa8\x87\x51\xb5\xc1\x32\xa3\xea\x0f\x59\xd4\xeb\xa5\xca\xe6\x1b\xd6\x7e\x89\x27\xc4\xdf\x0d\x59\x64\xdd\x79\xe1\xc8\xa6\xc4\xde\x21\x07\xc3\x1c\x08\x24\x6b\x32\x61\xcd\xfb\x52\x70\xb4\x87\xbb\xc6\x8c\xa6\x84\x43\xf3\xe9\xaa\xe2\x3b\xf4\xe7\x55\x5c\xd4\x1c\x98\xfa\x6d\x55\xd0\x49\x17\xcb\x5b\x53\x56\x29\xac\xef\xf5\x16\xb7\xcb\xd5\x55\xa0\x22\x18\x8b\x6d\xa2\x9c\xeb\xd5\x6c\xab\xa0\xb6\x7a\xc6\x96\x9c\xf5\xea\xe2\xed\x06\xc6\xba\x86\xd6\x77\xa6\x52\xc5\xc8\xb6\x27\xe3\xf4\xb9\x0b\xc7\x42\x5e\xe5\x6a\x2d\x0a\xc0\x03\x43\x92\x21\x74\xf4\x5e\x14\xa5\x8e\x49\x86\x0a\xe2\x2e\x51\x33\x07\x4c\x63\xb7\x5c\xab\x75\x26\x18\x3f\xb5\x56\xe6\x96\x56\xb8\x79\x6c\xf1\x3a\x98\xff\x8a\x3e\x56\x1f\x51\x60\x2c\xd3\xe0\x10\x54\xf1\x83\x91\xf0\x8e\xd3\x47\x62\xd8\x3c\xf3\x97\x32\x8e\x49\x8b\xa2\xc6\x13\x60\x94\xc1\x32\x07\x80\x05\x36\xaa\x2c\x41\x42\xc5\xa2\x85\x76\x8d\x2a\x1f\x16\x65\x71\xa1\x11\xd8\xfe\x81\x86\xea\x4e\x20\xde\x74\x0a\x6a\x98\xcc\x2a\x4b\xb2\xc3\x04\x6f\x91\x64\x38\x40\x19\x61\x9e\xeb\xbf\x0a\xfd\xad\x8c\xe3\xcd\x62\x75\xb2\x8f\xc8\xeb\x12\x09\x7e\xa0\x52\x97\xa5\x33\xf9\x57\xe9\x11\xd3\x40\x67\x05\xca\xc0\x00\x22\xf5\xed\x30\x03\xeb\x10\xe9\xd7\xc3\x0c\x9c\x85\x25\x3a\x86\xd6\x81\xf4\x0b\xd8\x5e\x38\x71\xfb\x33\x90\x2e\xe2\x50\xb6\xf8\x28\x55\x7d\xe3\xed\x1e\xd2\x97\x08\xb3\xa7\x87\x59\x25\x8d\x91\x9b\x24\xce\x05\x65\xd3\xbe\x91\x12\xcf\xe1\x73\x50\xa2\x8b\xac\x27\x58\x47\xac\xd7\x03\x34\x38\xdb\x4b\xc3\x41\x34\x62\x86\xf8\x0d\xcd\x9d\x6a\xa6\x28\x00\xa0\x01\xab\xe9\xa2\x09\xc4\xc8\x20\x1a\xc0\xa1\xc6\x50\x45\x8c\x69\x60\xdf\xa0\x34\x5c\x8f\x7c\xfb\xb6\x0e\x5d\xc9\xf6\xa9\xc4\x49\x15\x90\x58\xf9\x33\x84\xba\x59\x44\x8d\xf9\x1c\x44\xf2\x16\x1e\xc6\x38\x23\x9d\xc1\x50\xfd\xad\x0f\x69\x90\xae\x6c\x71\x82\x77\x56\xd4\x83\x27\x87\x96\xe2\xf6\xd5\xf4\xaf\xad\x55\x96\xf4\xe1\xba\xcd\xc8\xb4\x5e\xea\xc2\x4f\x0d\xeb\x52\x4c\x67\x8e\x49\x83\x70\x10\xad\xc4\x29\x13\x94\xe5\x44\x17\x7b\x66\x98\x06\xb8\x9f\xce\xb2\xfe\x2c\x9d\x01\x88\x70\x5f\xe2\x87\xbe\xa9\x8b\x9a\x43\xb8\xa1\x0a\x1c\x00\x68\x00\x68\xa0\x0b\x42\x47\xc3\x44\x43\x2b\xd2\x9c\x59\x8f\x60\x51\x3c\xbd\x1a\xa8\xc4\x35\xbd\xde\x59\x73\x05\xe1\x21\x0e\x06\x55\xb5\x25\x9d\x80\x27\x02\x5b\x08\xac\xd2\xa2\x90\x70\x7e\x95\xaa\x7b\x79\xf9\x1c\x0d\x9f\x50\x5f\xe9\xae\xa8\x6e\xe8\x11\x91\xdf\x3e\x5d\x7d\x6b\xde\x3f\x27\x31\xbc\x2e\x4d\xb5\xd1\x60\x5a\x7f\x41\xdd\xa2\x67\xbd\xa2\x67\x23\x64\xc6\x41\x12\xfc\x14\xda\x8f\xc2\xb3\xaa\xfe\x13\x46\xa8\x4c\x03\x9b\x5e\x0b\x61\x97\x04\x05\xe1\xd3\x88\x44\x88\x05\x83\x6a\x2b\xe5\x01\x0d\x06\x12\x9a\xa7\x14\x0e\xd8\xb4\x54\xf5\x42\xad\x26\x75\x10\x8d\xe4\x63\xe3\xc4\x84\xac\x71\x51\x09\xc2\x14\x65\x91\x0a\xbb\xab\xc3\x19\x54\xab\x84\xc1\x43\x8b\x6b\xba\x67\x15\x4a\x59\x6a\x6c\xa0\x97\x9d\x0c\x07\xe8\x2c\x42\x4f\x44\x10\x85\x4f\x22\x43\x9c\xfb\x9a\x09\x89\x56\x0c\x0a\x56\xe2\x3b\xeb\x4b\x52\x03\x20\x0a\xcf\x2a\x1b\x7b\xc0\x95\x6c\xb9\x2c\xe9\x5c\x77\x2b\x4d\x13\x82\x5d\xdd\x61\xaf\x47\x14\xc9\xb4\x41\x67\xb9\x69\xe4\xac\x69\x24\x3c\x8b\x6c\x23\xe6\xcd\x13\xd5\x1b\x6d\x3a\xe5\x26\x82\x1e\xbb\x3c\x98\xd2\x23\xa8\x94\x29\xc2\xf3\x93\xab\x54\x72\xa1\x70\xb8\x83\xb6\xa4\x7f\xc2\xb8\x5b\xc9\xaf\x54\xda\x3f\x4f\xc7\x4e\xd7\xd6\x14\xf9\xd1\x5c\xa7\xe5\xdf\x56\x78\xc0\x43\x16\xd2\x28\x2a\x17\xf7\xf0\xed\x25\x59\x2a\xad\xa6\x53\x85\xfe\x08\x44\x9f\x91\x7d\x25\x28\x21\x2a\x05\xf7\x64\xac\x6f\xb0\x44\x27\x2d\x16\xa1\x4c\x5e\xeb\x00\xf3\x28\x0f\xc6\x40\x59\x02\x18\x1d\xfb\x6a\x5e\x14\x29\xc8\x1d\x65\xe8\x82\x15\x49\x0e\x7b\xbd\xbc\x9f\xa5\xbb\xa4\x75\x9e\x5a\x94\xbc\x72\x96\x8e\xab\xaf\x2d\xaa\xf3\x69\x3b\x96\x3a\x1d\xc3\x4e\xc7\x32\xa3\x47\x99\xf0\x74\x17\x90\xa5\xd9\x0a\x09\xa8\xf6\x40\xb5\xff\xda\xdd\x2b\xd3\x1d\x8c\xe1\xc8\xc5\xe3\xcc\xec\xcf\x13\xd8\x1a\x51\xe0\x3e\xb0\xd7\xb6\xa7\x18\xd0\x3a\x7c\x72\x09\x32\x58\x82\x5c\x3b\xba\x73\x64\xbb\x3e\x64\xc8\x76\x7c\x48\xcd\xf1\x56\x36\xc4\xc8\x74\x7a\x98\x99\x2c\xa0\x49\x90\x9b\x7e\x49\x4e\xc2\xb6\x11\x83\x04\x8e\x12\xdd\x83\x65\x69\x1d\x87\x49\xa9\x44\x99\xd9\x23\xd1\x64\x89\x68\xb2\xfb\x80\xa2\xc9\x6c\xa9\x68\x82\xf6\x96\x04\x1a\x6a\x04\x34\xc8\x82\xb0\x22\x10\xc4\xb5\x1f\x1f\x8f\x6d\xb0\xbf\x25\x7e\x38\x9e\x5b\x40\x55\x9d\x1e\x4b\xe2\x9d\xfa\x56\x87\x17\xd6\xa4\xc1\x04\x11\x54\x7e\x80\x64\xc1\x1d\xab\xb5\xdd\x5a\x91\x2e\xc7\xa5\xd1\xa6\x33\x38\xd6\xb8\xb7\x7a\x19\x0a\xef\xfc\x43\x61\x45\xe3\x73\xe7\xec\xcd\x87\xc7\x06\x39\xbd\x9f\x49\x92\xed\xba\x93\xb3\xd2\x68\x74\xd1\x4c\x4d\x38\x23\xa5\x19\x75\xb3\xb5\xee\x2a\xc9\x01\x4a\xe0\x4a\xe0\x9c\x1b\x1d\x34\x84\x4e\xd2\xdf\x54\x27\x00\x64\x7c\x39\xd5\xe7\xcb\x99\xb2\x26\x5a\x78\xea\x64\xf8\x6d\x79\x2b\x81\xb5\x5b\x86\x12\x8d\xda\xcb\xa8\x53\xe8\x3d\x88\x74\x46\xca\x29\xfa\x82\x09\x41\x1b\x2b\x1c\x71\x29\x33\xcb\x51\x53\x06\xcd\x8a\x9b\xae\x0e\x78\x6d\xcc\x79\x3a\x91\x62\xa5\x75\xd4\x75\x24\x40\x93\x88\xc5\x70\x28\xcb\x13\x88\xb2\x53\x24\x10\x65\x7e\x02\xd1\xd6\x40\xff\x62\xd4\xbd\x52\xb9\xe8\xb2\x54\x38\xc6\x98\xc3\xee\x82\xcd\xa0\x2e\x62\x4d\xaf\xba\xb0\x44\x9b\x8b\xd2\x07\xd8\xf4\xd3\xd2\xfa\xce\xea\x75\x6a\x3e\x25\x1c\x2c\xf8\x72\x99\x33\xbf\x35\x3f\x2d\x91\xe3\xf3\x15\xf2\x08\x9e\x4a\xc5\x20\x10\x85\x72\x6c\x42\x1a\x05\x22\xa4\x91\x43\x53\x60\x7b\xb4\x7a\x47\x0d\xb2\x0f\xea\x18\x7f\xab\xa9\x93\x63\x41\xf1\x40\x9e\xee\xab\x3e\xbb\x30\xe9\x7e\x34\xc6\x6c\x82\xc3\x12\xb9\xe7\xae\xaa\x1f\x7e\xf8\xb3\x5e\x2f\x05\xec\xd4\x3a\x13\x56\x29\x4c\x7a\x3d\xe6\x41\x30\x52\xa7\x48\x86\xee\x0f\xd5\xcd\x3e\x60\xd0\x49\x7a\xe3\x9b\x48\x54\x93\xa0\x35\x38\xea\xc4\x37\x14\x51\x4b\xa7\x34\x6b\x92\xaa\xd7\xd0\x6e\x78\x17\xf5\xad\x8f\xdb\x76\x37\x58\x5d\xf7\xed\x1e\xee\x9f\xce\x54\xc3\xda\x12\x60\x61\x21\xdd\x93\xe7\x75\x41\x49\x06\x08\x52\x09\x50\x74\x54\x80\x72\x1a\x54\x9e\xf4\x75\x1c\x32\x67\x84\x2f\x90\x2c\xe6\x74\x26\x52\x9e\x8d\x4e\x2a\xd0\xc2\xe5\xd4\x31\x46\x1a\xf1\x11\x96\x27\x4e\x3e\xa1\x15\x9d\x86\x00\x42\x24\xf4\x59\xfb\xc6\x23\xd6\x63\x09\xeb\x71\xf3\x01\x59\x8f\x8d\x53\x68\x45\x9f\x77\x19\xc2\x91\xc3\x84\xf8\x69\x30\x50\xb6\x52\x27\x2f\x57\x7a\x8f\x30\x82\x5e\xb2\xe9\xfc\xd1\xde\x72\xda\xbd\x05\x30\x88\x92\x20\xaf\xec\x53\x12\x8d\x6a\xf5\x23\x3d\x7e\x71\x90\x18\x8d\xe2\x24\x10\x61\x1c\xad\xa4\x60\x02\x47\x04\x4c\x10\x47\x7e\x50\x1c\x74\x13\x50\x14\xc6\x11\x84\xc3\x36\xe3\xc3\x49\xf3\x00\x63\x02\x7b\xbd\x49\x9f\xec\x11\x7e\x70\xbc\x4c\x17\x78\x32\x9d\xc4\xe7\xd0\x36\x55\x6b\xb1\xa3\x60\x02\x9d\x74\xdb\x78\xc9\xba\x48\x7a\x3d\xd3\x53\x95\x6e\x3b\x5f\x48\xb7\x9d\x7b\xeb\x02\x9b\x75\x81\x1b\xeb\x82\x97\x80\xa0\xc3\x12\xf9\xe4\x08\x0e\x0f\xb5\x20\xb3\x13\x74\x37\x37\xab\x63\xd6\xcd\x4d\xe7\x64\xfa\xaa\x7f\x56\x4c\xfa\x9b\x9b\xd5\xd9\xe5\xe6\x66\x10\x04\x3b\xae\x21\x94\x43\x8b\x1e\xd1\xa7\x56\xfa\x04\x5c\x9d\x87\x8a\x08\x12\x0e\x22\xd5\x27\x9d\x40\x6d\x5d\x6b\x18\x68\x51\xac\x02\x93\x82\xb1\xb6\xe7\x93\x6f\x52\x7f\xe1\xae\xae\x2a\xe3\x60\x7d\xb2\xa6\x2e\x1d\x1b\xb6\xd5\x20\xc0\x5e\xd0\x2f\x06\x30\xec\xf5\xde\x50\x5c\x50\x95\x3b\x58\x02\xa2\xd0\xe0\x5a\x0b\xf7\x76\xed\xdf\x00\xf7\x76\xfe\x11\x5e\x9e\x0a\x2f\x15\x02\x9e\x59\x87\x68\x1d\xea\x2c\xea\x4d\xee\x65\xa9\xea\xa6\x43\x56\x83\x80\x97\xb0\x35\x6e\x13\x77\xe2\x36\xf1\x28\x20\x21\xd7\x31\x9b\x5a\x6c\x93\xaa\x69\xbd\x26\xd9\x65\xe6\x68\x1e\x5f\x73\x28\x6d\x15\xb7\xb4\x6b\xfc\x2b\xdd\x38\x37\xe6\x51\x85\x4e\xea\x41\x5d\xcf\x8d\xfa\xa8\xac\x9a\x15\x15\x3d\x38\x38\xcc\xf0\x84\x6c\x10\x61\x14\xbf\x46\x92\xc4\xad\xbe\x9f\xce\x1a\x2e\x55\x58\x29\x3d\x32\xaf\x41\x94\x69\xb5\x28\xeb\x9b\xda\x82\xea\xca\x5d\x3a\x7e\xb2\x3b\xc9\xea\xf2\x52\x45\x3a\xc1\xfe\xea\xee\x54\x5f\x9b\x6f\x10\x59\xa9\x79\x87\xc1\xb9\xfc\x39\xfb\xc1\xb9\xdc\x06\x53\x4e\x02\x1c\xe6\x11\x8a\x03\xc9\xa6\x27\x9a\x2f\x8f\x15\x53\x1f\x4b\x74\x4e\x7c\xbe\xfe\xd0\xf0\xf3\x49\x64\x2d\x3c\x4d\x68\xbb\xf3\xce\x43\x84\x55\xa8\x6a\x5f\xc8\xe0\x46\xbe\xe0\x2b\xb2\xa0\xc9\x8f\x7f\x03\x4c\x10\xb6\xa4\x0c\x55\xbd\x71\x4e\x6f\xc7\x88\x41\xab\xe7\x77\x7b\x97\x28\xc6\x5c\xe5\x11\xed\x2c\x3c\x97\x7d\xc8\x9d\xe1\x39\xb3\x0e\x0f\xfd\x42\xdc\xd6\x49\x02\x09\x4e\x95\xac\x46\x11\xb6\x97\x5c\x4c\xae\xe9\xc2\x85\x07\x92\x47\x34\xe9\xa8\x59\xfd\x25\x1e\x7a\xe6\xed\x4b\xed\xec\x7f\x2d\xb8\xdc\x00\x1c\x09\xa4\x24\x29\xad\x75\x37\x0a\x88\x16\x0f\x7e\x70\xf9\xff\x59\xa2\x8c\x5e\x0d\x0e\xbd\xb8\xe9\x4e\x94\x19\x75\xce\xe5\xc4\x3a\xd7\x61\xff\x88\xd5\x5c\x37\x40\x50\xc7\xef\xad\x6f\x54\xa4\xcb\x3a\x8a\x25\x0f\x88\xc2\x94\x4b\x12\x53\x2a\x35\xb8\x80\x10\xea\xc3\xcd\x56\xe1\xdd\x20\xb7\x96\x76\x39\xb4\xa6\x82\xf2\x7b\x9a\x8c\x39\x61\x12\x03\x5c\x9b\x4b\x6c\x8c\xe5\x04\x61\xa6\x43\x99\xdf\xae\x51\xb9\x0b\xb8\xd2\xa8\x46\xad\x9c\x5b\x80\xa3\x0c\x55\x1f\xc0\x52\x31\x73\xd5\xc9\xe3\x8c\xa7\x37\x0f\x4a\x37\xe7\x40\xcd\xe9\x2b\x0e\xdf\x6f\x3a\x0f\xaa\x07\xfa\xad\x85\x23\x47\x4e\xf6\x31\xef\x69\xb9\x9c\x8b\x0d\x45\x64\x62\xf2\xfb\x83\x3c\x92\x6f\x2c\xb5\x2c\x51\xba\xcf\x94\xab\x6d\x0b\xf2\xbf\x41\x26\x89\x44\x27\x53\xa4\x9e\x06\x9d\x8b\xa1\x55\xe2\x1d\xb6\x8a\xf7\xb6\xa6\xe5\x72\xb2\x33\xc3\xca\x9b\xe7\xf8\x7a\x54\x84\x27\xef\x93\xac\x81\x9d\xee\xf6\xd5\xcf\x04\xe6\x22\x7b\x8b\x8a\x6d\xd0\xdd\xec\xc2\x91\xad\x26\xab\x08\xf4\xd0\x7b\x54\xd7\x8c\x34\x7d\xe4\x10\x96\x0e\x67\xf2\xa2\x6f\xf3\x1d\x8a\x48\xad\xf9\x5b\xcb\x83\xe9\x2b\xff\xc3\x4a\x31\xaa\x04\xb2\xc3\xd2\x71\xb9\xd4\x06\x3a\xde\x23\xae\x58\x83\x17\x6d\x48\x33\x3d\xe9\xd6\x06\xdd\x00\x68\x6d\xaf\x0c\xd6\x58\x6b\x75\x85\x77\x0a\x41\xaf\xca\x2b\xbd\x9c\x5f\xb5\xd1\x7e\x0d\x0e\xb7\x19\x19\xb7\xa9\xde\x73\xb6\xcf\xf1\x6c\x31\x02\x83\x0b\x87\x51\x2f\x41\x78\x48\xb4\x07\x88\x13\x1f\xcb\xc1\xe8\xd4\xcd\xa2\xa7\x0a\xa2\xcb\xe0\xb2\xe4\x19\x04\x44\xc4\xb1\xd9\x6d\x68\x96\x5f\x68\xe6\x3b\x96\x34\xf2\x1c\x5f\x24\xf9\x92\x3e\x8a\x90\x9f\x59\x8f\x3c\xba\xb8\xe2\xa8\xfc\x8f\xe1\x73\x1a\xb1\x2c\x17\xf8\xa6\x6a\xca\xcf\xe8\xe4\xa5\x75\xf4\xb3\xa2\x58\xe5\x8b\x2b\x4d\x32\x56\xc7\x6d\x2e\x22\x24\x91\x4a\x86\xac\x35\x44\x5a\xc7\x55\x75\xfa\x7a\x53\x9d\xbe\x0c\x6b\x6a\xb3\xae\xc3\xb2\x69\xd6\xa5\x42\xb5\xd5\xe7\xbc\x4c\xcb\xb5\x4c\xb2\x73\x75\xcc\xd2\x8e\xde\xb2\xbe\xf6\x88\xc9\x5e\xa2\x9c\x7a\xf3\x01\x95\x53\x5f\x3b\x85\x72\xea\x5d\x63\x57\xc9\x0f\x2a\xf4\x50\x53\x58\xf7\xb3\xd2\xcc\xd6\x38\xf2\x56\x83\xd4\xb5\x20\x59\x43\x18\x30\x10\x2d\x2f\xe8\x93\x68\x3d\xc1\x4b\xb4\xa9\xe6\x65\xab\x8c\xe1\xba\xc4\x58\x37\x8f\x97\xb2\x8b\x55\xb0\x1c\xbd\x3c\x86\x61\x54\xaa\xd3\xa4\xf6\x20\xaf\xda\x8e\xa9\x75\x27\xd0\xc3\x25\x31\xc5\x80\xd6\x6a\x9f\xa8\x8a\xd4\x4c\xd1\x02\x14\x75\x31\x95\x49\x39\x35\xbc\x85\x65\x51\x2d\xff\xd0\x50\x15\xa6\x08\xb7\x0e\x6f\x6b\x1f\x32\xbb\xb7\x8b\x30\x8b\x56\xf2\x5e\x2f\x6f\x12\x8a\xfa\x3c\x20\xf7\x59\xf5\x34\x7c\x13\x60\x14\x66\xbe\x02\xca\x84\x52\x18\x7a\xfa\x81\x1c\xf6\x7a\x04\xe4\x0a\x38\xfb\x91\xe2\x46\xd3\x52\x81\x7c\x58\xa2\x50\xcb\x14\x2e\xc0\xb8\x36\x49\xaa\xc3\x3e\x60\xcb\x07\xe1\x30\x8d\x56\xb8\xc3\xae\xa7\x28\x83\xa5\xe6\xf5\xd5\xa9\xca\xbb\x6a\xc8\x8a\x62\xb5\x05\x9b\xda\x8c\x30\x49\x43\xa9\x41\x94\x89\x64\xaf\xb7\xba\xa8\x4d\x3d\x6d\xc2\xe7\x2a\x88\xc7\x1b\x64\x7a\xf1\xe6\x4c\xc7\x3a\x76\x62\x7b\x5c\xc0\x82\xe8\x87\xca\x1a\x13\x88\x30\x8d\x60\x51\xc8\x3f\x5f\x9e\xb2\x73\x94\x56\x9b\x45\xbe\x30\x1f\xfe\x58\xe4\xd6\x1c\xd2\x7f\xbc\x0f\x72\x08\x4b\xff\xd9\x25\x83\x52\x97\xf4\xbd\xf2\xee\x34\xb7\x42\xdd\x4a\xf6\x02\x42\xe4\x08\xbc\x97\x16\xb8\x06\xcd\x0f\x1c\x9a\x0f\xad\x9d\x53\x53\xfa\xad\xab\x0e\xaa\x2b\x5f\x84\xf5\xf9\x16\x54\x41\x1a\xf0\xd3\x8a\xbc\xc6\x6d\xd0\xd7\xb3\xd6\x11\xc7\x58\x10\x04\x4d\x23\xf2\x11\x1b\x89\xa1\xa5\x56\x43\xa1\xf6\x9b\xb7\x1f\xed\x37\x4b\xf6\x9b\x57\x1e\x70\xbf\x79\x7b\xb9\x1d\xc6\x63\xae\x4c\x8d\x5e\x0f\xba\x9b\x86\x3f\xeb\xa2\xaf\xcb\x1b\xcd\xcf\x75\xd1\xcb\x41\x77\x53\xc1\x95\x75\xd1\xef\x2c\xca\xb2\xab\x83\x12\x11\x12\x1c\x66\x3b\xd4\xfa\x78\x68\x7b\xca\x0a\x81\x95\x47\x75\x6d\x7e\xa3\x26\x97\x1c\xc7\x20\x7b\xba\x1d\xcd\xd9\xfc\xce\x02\x3b\xec\xb1\x3f\x46\x01\x64\x83\xad\x19\x07\x04\xf2\x22\xb3\x7c\x70\xed\x92\xf0\x1a\x9e\x59\xd6\xd9\xd7\x84\xef\x98\x87\x2d\x36\x09\xfa\xcd\x2e\x3e\xd8\x22\xd7\x15\x0f\xac\x98\xe9\x40\x10\x9b\xfe\x52\x79\x74\x04\x37\xf4\xad\xf1\xf7\x09\xc6\xea\x36\x7c\x3d\x32\xbc\x79\xf8\xf5\xc8\xd6\x15\xbe\x5c\x5d\xf6\x37\xf7\xac\x67\x8c\x05\x76\x53\x47\x91\xc9\x82\x2b\x80\x28\xa7\x79\xfd\x94\xe7\x8c\x51\x36\x7d\xb3\xea\x8a\x04\xad\x8d\x4f\x5f\x08\xb1\x6a\xca\x1c\xd8\xac\xc1\xae\x11\x8d\xdc\x7e\x3d\xdb\x92\x74\x32\x39\xe9\xf3\x86\xb9\x4c\xb3\x86\x05\xeb\x94\x07\xe4\xd9\x35\x91\xa9\x9a\x5f\x61\xbd\x1e\xab\x92\x2e\x9a\x5c\xea\xe8\x15\x75\x3a\xec\xc1\x61\xc9\xdf\x31\x34\xaf\x59\x7c\xa3\x51\xbc\x45\xcb\xb7\x24\x2f\x99\x93\x10\xaa\xbb\xb9\x85\x39\x39\x6f\x17\xd0\xe1\xb4\x2d\x0b\xa3\xc1\x08\xbb\x20\x1f\x03\xe4\xb4\xba\x57\x6b\x70\xbf\x44\x03\x5b\x36\x02\x11\x36\xd3\x4d\x2d\xcd\xac\xe6\xf6\x20\x5e\x06\xbc\x01\x46\xa7\x06\x09\xbf\x1e\x3d\x9c\xe6\x2c\x7d\x59\xd2\x9a\xcf\x75\x2d\xec\x84\x56\xec\x61\xae\x37\x8b\x56\x8a\x41\x11\x52\xe5\xcd\xa2\xd4\x5b\xa7\xb5\xcc\x90\x85\x1d\xe3\x0c\x79\xeb\x6c\xff\x78\xc4\x3c\xff\x16\x8e\x64\xdd\xbe\x7f\x8b\x59\xa1\x43\xf9\xa9\x43\x7c\x6c\x70\x5e\xf3\xb4\xe1\xfa\x42\x25\x5e\x3b\xae\x2f\x0c\xe5\x80\x68\x60\x6c\x2b\xae\xeb\x0b\xd3\x76\xcc\xe1\xcb\x0f\x69\x12\x62\xe3\x7c\x79\x2a\x7c\xbd\x58\x21\xc0\x48\x4a\xef\xc3\xc3\xf2\xe1\x21\xc2\x52\x3c\x30\xdd\x7d\x28\x2d\x8d\xb1\xc0\xc7\x37\xf4\xfa\xc3\x69\x88\x66\x8a\x62\x2f\x6d\x4b\xe2\x71\x52\xcd\x64\x15\x05\xfc\xa1\xb4\x7c\x95\xd3\x4c\x50\xb6\x74\x52\x3d\x99\xc5\xcc\x27\x32\xda\x1a\xbb\x0b\xf5\xab\x4d\xf2\x15\x72\x50\x19\x57\x36\x59\xbe\x5e\x4f\xb8\x36\x06\xc7\x99\x09\xab\x60\x11\x71\x92\x8f\x49\xa6\x93\x2c\x41\xa4\x8d\x04\xad\x61\xf0\xea\xc5\x87\x4b\x5d\x68\x66\xa2\xdc\x2c\x9b\x83\x55\x1d\xcd\x41\x4f\xd4\x43\x6a\xf2\x02\xe5\xe2\xe0\xa4\x06\xed\xfc\x9c\xdc\x26\xf1\xb3\x32\x5c\x67\x3b\x2c\xad\xc9\x56\x2b\xff\xec\xcf\xa2\xcb\x9f\x99\xfc\x0d\xe1\xeb\x91\xcd\x25\x60\x85\x10\x66\x52\x9b\xd5\x11\x08\x54\x25\x3a\xfd\xa0\xee\xa7\xa2\x7a\xc4\x52\x32\xc7\x54\xdb\x32\x64\xfa\x13\x9d\x06\xba\x66\x56\xc0\xea\x00\xf9\x9f\x96\x36\x25\xeb\x69\x6b\xf7\xd8\x25\xf2\x0a\x39\x30\xc1\xe0\x49\x8b\x74\xb8\xc8\xa8\xd6\x2e\xdb\xc3\xee\xda\x15\x60\x07\xe0\xb0\x84\x6e\x50\x0e\xaf\xb2\x19\x27\x33\xcc\xdb\x92\x44\x10\x93\x04\xd9\xd9\xe8\xa1\xd5\x6b\x22\xa5\xdc\x34\x93\xf0\xd8\x92\x8c\x42\x2e\x5f\xc1\xed\xe1\x9b\x8a\xe9\x80\x88\xd6\xff\xad\x58\x9e\x91\x97\xce\x5c\xf8\x00\x6a\x67\x2d\xd2\x16\x44\xd8\x60\xb3\x49\xf3\x60\xf0\xd1\x23\xe6\xaf\x47\x66\xa9\x4b\xb2\x6e\x59\xd5\x4b\x7a\x4c\xdd\xd9\x37\x9c\x16\xe8\x9a\xd6\x4c\xf6\x78\x87\x9d\x6d\xf2\x51\x7b\xa4\xed\xd0\xd5\xe7\xab\x1e\xf9\x3a\xde\xbf\xaf\x23\x62\x88\x3e\xf2\x77\x7c\xe4\xef\xf8\xc8\xdf\xf1\x91\xbf\xe3\xfd\xf8\x3b\xa6\x95\xbf\x63\xda\xee\xef\x28\xaa\x1d\xa2\xa2\xc9\x36\x81\xb3\x4e\xec\xac\xf7\x62\xb3\x21\x00\xd8\xb6\xe4\x85\xda\x08\x46\x3c\xd0\x17\x52\x48\x68\x2b\xe5\x72\x1f\x02\x75\x65\x51\x29\x73\x01\x93\x62\xaa\xa9\x74\x91\xdb\xa9\xaa\x4e\x1b\x66\x06\x4c\xb9\x61\xf2\xa6\xe7\x25\x0d\x52\xeb\x79\xa9\xaa\xe1\xa9\x8e\x0d\xa4\x3d\x31\x69\xe5\x18\xe9\x6d\x5c\x2a\x9c\xc8\x12\xa7\xa2\xf0\x75\xa5\x62\xbc\x0a\x08\x44\x44\x6d\x9d\x3e\x07\xd7\xeb\x11\xe7\xce\xe5\x9e\x56\x6a\x6e\x2c\xfc\xba\x9c\x63\x22\xff\x34\xdf\x15\xbe\x2c\xd7\x1b\x91\x7f\x58\xf3\x00\x52\xc2\x6d\xa8\x85\x20\xca\x82\x17\xc0\x63\x92\x9e\x50\x88\x72\x75\xad\x54\xc5\x28\x09\x2e\x80\x0c\xa5\x10\xc5\xc1\x05\x90\x3b\x31\x5d\x71\xf8\x72\x14\x24\x08\xcb\x3d\x3a\x46\xb8\xbf\xc9\x52\x41\x27\x07\x6f\x52\x2e\x72\x9c\x38\x56\xf5\x10\xe1\x86\xa7\x93\x19\xa8\x25\xa7\xbc\x9b\xf6\xbd\x32\x03\x80\xae\xab\xd5\x32\xf5\xd6\xb2\xa6\x6d\xde\xa7\x8a\xbd\xc0\x13\x41\xf8\x1b\xa6\xfe\x2e\x6c\xe1\x2c\x6c\xe3\x86\x9d\x5f\x32\x55\x48\x71\x5d\x46\x9e\xaa\x14\x9e\x26\xf5\xd4\x52\x70\x42\x49\x5e\x2d\xf0\xba\xa8\x8e\xa2\x25\xf9\xcc\x97\x11\x81\x88\x3b\x31\xee\xbe\x7a\x66\xdd\x24\x5c\x90\xdd\x6e\x16\xff\x3a\x22\x10\x4a\x8e\xe1\xd8\x16\xa1\x3b\x56\xbc\xfd\x7c\x58\xa8\xea\x9b\x75\x2b\x99\x69\xf9\xf0\xb4\x48\x05\xbe\x64\xbb\x04\xe4\xe3\xbb\xbf\xd8\x9e\xe5\xc4\xdb\x75\xd4\x6a\x2a\x8c\xba\x6f\x70\x8c\xba\xaf\xa1\xec\xa3\x13\x20\xa5\x41\x3d\x83\xbe\xde\xb6\x4e\x83\xba\x2a\x1a\x66\x76\x4d\x22\xa5\xe3\xc1\x69\xa5\x10\x10\x95\xd3\xe9\x57\x07\x23\x31\x7c\x0c\x3c\xdf\x56\x39\x84\x0d\xff\xd9\xda\x4f\x5a\x1b\xe8\x7b\x86\x46\xb7\x46\xdc\xd8\x43\x00\x38\xe4\xb5\x09\x99\x27\x9e\x08\xa4\x12\x62\xad\x34\x80\xd4\xcc\x81\x3f\x96\x78\x3c\x56\x5c\x4a\x6b\xfa\x2e\xef\xe8\xb3\x11\xe3\x64\xb5\x79\xc0\x52\x4a\xe9\xa3\x79\x0a\x5a\x1d\x2d\x16\x85\x4d\xe3\xd4\x5a\xc4\x8c\x47\x17\x22\x9d\x3f\x06\x83\xba\x78\xfd\x5a\x07\x7c\xb7\xae\x4f\x12\x69\x48\xb4\x62\x3f\x60\x52\x7e\x30\xb1\xe6\x34\x3e\xad\xf8\xea\x9b\xc0\x55\x9a\x03\x8a\x08\xe2\xa8\xb2\xdd\xac\xf6\x83\x0d\xa2\xd2\x82\x36\x04\xb2\x3c\xdb\x56\xc3\x94\x3d\x64\xe5\xb2\x25\xc6\x46\x1c\x36\x2a\x7c\x25\x0e\x17\x85\xe9\x57\x9e\x24\x48\x45\xf6\x0b\xa8\xab\xd2\xcb\xaa\x11\x68\x4c\x45\x0a\x7b\xbd\x17\xb4\x47\xb4\xba\x06\xee\x67\x41\x98\x1a\xad\x65\xee\x55\xb7\x92\x06\xaf\x28\x7b\x2e\xe3\xe2\xac\xdb\x96\x44\xfe\xd8\x51\x64\x48\x19\x5a\x2e\x19\x45\xc3\x2a\x64\xae\x66\x32\x6d\xb8\xb8\x66\x0c\xcf\xb2\xed\x54\xb4\x13\x7e\xb9\x65\x89\xc6\x7c\x1e\x5a\xd7\xec\xfb\xd3\x5d\x1f\x96\x10\x69\xbd\xef\xf0\x18\x21\xd9\x71\xaf\x73\xe5\x65\xd3\x23\x73\x24\xe7\xf6\x8b\x39\x83\x59\x5a\x59\x7a\xc1\x9d\x37\x13\x69\xbb\x5c\x5f\x19\x7c\xf1\x80\xe8\xe3\xb8\x0c\xb1\x07\x90\xe2\x51\x1a\x3c\xd6\x9a\x0e\xb7\x5a\xde\x2c\xe0\xae\x77\x9c\x35\x28\xc4\xf6\xbc\x11\xb9\x3d\xaa\xb5\x03\x0d\x7a\xce\x2a\xe2\x9d\x9e\xb0\xef\xb6\x51\xf2\x18\x67\x8d\x18\x9b\xbe\xad\x91\xd5\xb0\xd7\xfa\x82\x96\xb4\x1b\xbd\x9e\xab\xc6\x6b\x61\x81\xae\x03\x81\x1e\x73\xac\xad\xdb\x6d\x44\x2a\xdd\xa0\xf0\x62\x15\x54\xda\x90\x16\xf0\x8d\xae\x03\x0b\x4f\xf1\xe3\x27\x67\x6c\x39\x3e\xd3\x8c\x82\xc3\x22\x70\x57\x31\x39\xe4\xd5\xa6\xe1\xb7\xe6\x92\xf8\xa5\x8a\xb7\x45\x15\x9b\x4b\x53\x6c\x7e\xc1\xaa\x2a\xa5\x13\xa1\x3a\x00\xb4\xc7\x14\xe9\xdc\x07\x35\xd0\x5d\xf9\x75\x0c\xea\xbc\xdf\x95\x0a\xed\x25\x67\x10\x00\x41\xab\x03\x88\xd2\x66\x18\x04\xe6\x04\xa7\x6e\xfb\x46\x4a\xf2\x2d\xaa\x3b\xb6\xa0\xb9\x2b\xad\x62\xa3\x6d\x0e\x79\x83\xa7\x6b\x40\x2f\x6c\xfc\x3a\x93\xda\x6f\xb1\xbd\x74\x51\x53\xd8\xaa\x90\x6a\xab\xbd\xc1\xcf\x2e\x54\xde\x3e\x63\x55\xfc\x8d\x3d\x13\x7c\x63\x75\xa0\xe3\xe4\x2d\x22\xf9\xba\x83\xe4\xbd\x9e\x2e\x27\x25\xe6\x36\xf2\xec\xf1\x50\x1c\x22\x3a\x62\x9a\x36\xdb\xed\x1e\x70\x4b\x9c\x99\x4b\xc4\x48\x09\x97\xe0\xdc\xc2\xe9\x64\xbd\x7f\x39\x22\x83\x15\x2f\xb4\xd0\xd2\x22\x76\x31\x9b\x26\x80\x59\x8d\x6b\x15\x7d\xc3\x51\xba\xf2\x2a\xfa\x86\x63\xe2\x59\xc5\xe1\xa0\xd5\xb4\x2c\x06\xfe\x48\x7b\xbd\xd5\x7a\xef\x2b\x8a\xb4\x74\xac\x05\xdc\x7e\x39\xba\xdf\x56\x72\x2c\xe7\x85\x57\x8a\x37\x16\x10\x2f\x28\x4a\x4d\x8c\x98\x32\xa9\x3e\x74\xd0\xca\x6e\x8d\xa9\x63\xbb\xbb\x6c\x87\xac\x74\xad\x58\xfb\x2f\xbc\x21\xbf\x82\xc7\x72\xf8\x0b\xa7\xcd\xcd\xf5\x74\x8c\x4e\xbe\x85\x14\x31\x65\xfe\x59\x14\x83\x15\x51\x14\xeb\xab\x41\xc0\x46\x5e\x2f\x38\x22\x48\x8c\xd8\xda\xfa\x90\x9d\x59\x87\x43\x13\xe0\x57\x99\x8c\xfa\x50\x2c\x21\xfb\xad\x5e\x30\x45\x01\xda\xe5\x3a\x15\xa3\xd8\xab\xd6\x7d\x7f\x7a\x16\xa1\xf3\x0a\x90\x43\xbf\x41\x04\x78\x05\x48\x36\x41\xd1\x7f\xb8\x30\x74\xd5\xc0\x36\x07\xcd\xb7\x02\xe9\x76\xa1\x2b\x4d\x2b\x8d\x89\xeb\x8e\x27\x11\x41\x2e\x4f\x56\x2d\xcf\x16\x5b\x5c\x58\x8d\x9d\x88\xaa\x8c\x4b\x3c\x64\xe1\x20\x8a\x6a\x97\x8a\xe0\x6d\x29\x6f\xe3\x80\x86\x83\x08\x65\x01\xad\xbc\xfb\x50\x1e\x70\x94\x04\x3c\xc4\x11\x8a\x03\x7c\x2e\x05\x09\xec\xf5\xe2\x73\xd6\xed\x26\x39\x57\xdb\xf8\x4f\x34\xda\x16\xc5\xc4\xdd\xc2\x7b\x3d\x03\x41\x1e\xc6\x11\xca\x83\x04\x81\x38\xc8\xaa\x44\xed\xbd\x1e\x48\x82\x24\x8c\xeb\xc4\x04\xdc\x1f\xad\x66\x02\x63\xbd\x54\xde\x06\xc4\x73\x4c\xe4\x81\xd0\x3e\x60\xa2\x06\x1d\x57\x13\x95\xb9\xf4\xe1\x54\x67\xe2\x18\x59\x2f\x8a\xdc\xdf\xcf\xb0\x39\x32\x5a\x4d\x95\xed\x61\xd5\xf9\xdc\xee\x50\x79\xf9\x45\xda\xe8\xf5\x2e\x02\x0c\x6b\x4f\x28\x2e\x87\x79\x1f\x24\xe6\x78\x25\xae\xfc\x9b\x96\xa8\x87\x5c\xd0\x62\xc4\x1c\x17\x49\xe8\xf9\x7b\x4c\xdc\xf0\x90\x0e\x29\x45\xe9\xd2\x88\x10\x26\x5b\x03\xf6\x70\x4e\x39\x8c\xf9\x2e\xe1\x5b\x00\x7f\x31\x57\x67\xd9\x22\x0e\x6b\xdf\xa8\x68\x35\x08\xe2\x5e\x8f\x83\x0c\xc5\xb0\x3d\x8a\x43\x16\xe8\xb7\x8e\x0b\x32\x3b\x8d\x0b\x72\xea\xba\x20\xa7\x6d\x2e\xc8\x55\x50\x74\xdf\x1a\x6d\x75\xbd\x94\x53\xed\xf9\x20\xf8\x16\x9b\xee\x20\xaa\x0c\xca\xee\x28\xe1\xc6\x28\x65\xc1\x16\x48\xe5\x62\xca\xaa\x51\xca\xf5\x28\xd5\x8f\x2c\x12\xe4\xf5\x28\xad\xe2\xa2\x58\x3d\x25\x2e\x25\x8e\xe3\x2d\x0e\xb8\x7a\x72\x8a\xe1\xca\x7b\x3d\x03\x8a\xd2\xfc\x67\x0b\x7a\xfd\xec\x54\xc3\x35\x68\x1d\x2e\x0f\x3d\x33\x54\xf9\x06\x6b\xe4\x9e\x68\xab\xe3\x49\xab\x47\xd3\xc4\x09\x47\x32\xf6\x4f\x6d\x33\xc9\x5b\x6c\xfb\xcb\x72\xec\xe1\xbe\x9b\x88\xf3\x16\x98\xa0\x6d\x1f\xb0\x16\xff\xa4\x2a\xb5\xc3\x44\x3e\x4e\x3c\x90\x34\xa7\xcf\x1a\x9c\xbe\x41\xe6\xd2\xf8\x64\x29\x4e\x48\xc7\x15\x56\x97\x1e\xc3\x6a\xa1\x14\xc6\xa4\x6b\x4f\x45\xe3\x3a\xc5\x92\x56\x63\xa6\x47\x6b\x66\x10\x64\xb7\x85\x1e\x99\xb6\x76\x8b\x02\x34\x5e\x7b\xbb\xaa\x9c\x21\x25\x87\x42\x88\xf4\xd0\xec\xa2\x59\xeb\xd0\x98\x0a\x67\x65\xf3\x24\xbe\x2d\x1a\x72\x63\xcf\x21\xb0\x28\xde\xb0\x5d\x1d\x99\xad\x2b\xb0\x3c\xc8\xc2\x61\xbe\x3d\xd5\xf6\x1c\x5f\x18\x69\x3b\x36\xed\xf0\xfa\xb1\xd6\xb9\x34\x19\xc4\x3a\xcf\x95\x53\x83\x8b\x0d\x7a\x8c\x29\x6a\xf1\xea\xab\x44\xb2\x29\x11\xc0\x4d\x5d\x71\xbc\x97\x15\xd1\x49\x85\x9d\xf2\x12\x3d\x57\x07\x65\xe9\xfa\x74\xa7\xe4\x5f\x25\x80\x27\x04\xfc\x37\x02\x3b\x58\x7f\x52\xb9\xfe\x83\xa7\xa4\x28\xc7\xc1\x59\xb8\xb2\x98\xbf\xc3\x5a\xab\xa9\xe3\x30\x39\xd7\xee\x1a\xaa\x23\x10\xc9\x3e\xea\x92\xda\x1c\x82\x32\x41\xf8\x8c\x13\x41\xb4\x46\x4d\x4a\x56\xe6\x10\xc3\x24\xce\x5b\xa6\xd7\x75\x3f\xad\x0a\x83\x4a\x75\xab\x8a\x1c\xe0\xf1\xd8\x8f\xe0\xed\x60\x94\xf2\x83\x6c\x28\xce\x14\xbe\x0e\xcf\xb6\xbc\x91\xfb\x07\xcd\x36\x1d\x01\x70\x54\x37\xa1\xc3\x55\x08\xab\x04\x77\x21\xab\x65\x5e\xd7\x60\xc4\x2d\x51\x5d\x03\x82\x14\x03\x49\xa1\x3e\x9c\x01\xdc\x5e\x08\x88\x98\x9c\x66\x3d\x30\xb9\x91\x80\x54\xd3\x36\x67\xcb\x52\x43\x90\xb7\x65\xa9\xce\xd9\xfe\x7a\x7f\xd0\x39\x9f\xce\x0e\x38\x9d\x6e\x8b\xce\xd9\xc1\xfa\xa0\xb3\x21\xc8\x6c\x9b\xb0\xce\x79\x4e\xb2\x6c\x9f\x24\x49\xe7\xf1\xce\x45\x46\xf8\x94\xde\x22\xe3\xce\x5b\x29\xdf\xe9\xbc\x2a\xc6\xdd\xf2\xb4\x78\xf2\xe4\x13\x1a\x4f\x9e\x7c\x52\x23\xca\x93\x4f\xc9\xad\x90\x83\x41\x1b\xc2\xb8\x5b\x68\xa6\x6c\x19\x6b\xc3\x04\x6f\x8e\xb2\x85\xcc\x52\x49\x5d\xc0\x4d\xb4\x91\x85\x83\xa8\x9f\xc5\x29\x27\x7d\xf2\x6e\x8e\x93\x0c\x64\xe1\xba\x79\x02\xdd\xc8\xd9\xce\xd7\x13\xca\xc6\x9b\x72\x9f\x1b\xc3\x7e\x9c\x26\x09\x89\x05\xa8\x1c\xc0\x51\xa7\xeb\x47\xb2\x46\x6e\x70\x38\xdd\x52\x9c\xee\xce\xb0\x24\x4c\x0b\xed\x8c\x7d\x17\x7c\x1f\xae\xc1\x22\x5c\xdb\x5e\xf9\x5d\x1c\xf3\xd4\xb5\xd5\x71\x95\xf8\xa4\xc5\x8c\x20\x07\x70\x74\x98\x09\x32\x1b\x1a\x0d\xe1\x70\x75\x1d\x71\x82\xb3\x94\x0d\xbb\xd7\x6d\xda\x65\x35\xe7\xdd\x72\x98\x1c\x57\xfa\xf9\xdd\x2d\x3a\xcd\xd3\x3c\x53\xa5\x3b\xe0\x2a\x16\x82\x70\x96\x75\xc2\xee\x5a\x0c\xe0\x5a\x37\xea\x60\x4e\x3a\x38\x49\x3a\xaa\x43\xc9\x41\x67\x9a\xa6\xe3\x4e\x8c\xd9\x58\x81\x97\xc1\x6e\x39\x6c\x54\x3f\x40\xfb\x94\x31\xc2\xf5\x46\xa0\xaf\x55\x5e\x20\x2d\x6d\x27\x04\xf3\x4d\xfd\xb4\x61\xe0\x93\x83\x96\xac\x3b\x7e\x87\x86\x12\x32\xb2\xd6\x8d\xb4\x54\x94\xb4\x7d\xe1\x77\xaa\xfa\xa2\xdf\x69\xe9\xdd\xae\x64\x9b\xaa\xbe\xc9\x95\x21\xe5\x2d\x97\xf8\x54\xf0\x23\xe7\xb6\x65\x56\xd4\x4c\xab\xb9\xf4\xd7\x10\x3c\xd4\x21\x5b\x35\xc6\xb5\xe8\x95\x0e\xd5\x47\x43\x81\x14\x9a\x0c\x75\xae\xb9\x50\x93\x48\x82\x44\x3f\x21\x7b\x84\x65\xdb\x82\x50\xb6\x99\xd1\x29\xc3\x22\xe7\x04\x98\x9d\x9d\x2a\x0a\x1b\x29\xef\x9a\x7e\x96\x72\x01\x26\xca\xd1\x0b\x2b\xb3\x71\x3f\x15\x93\xb7\x92\xdb\x97\xa9\x3d\x99\x11\x55\xf2\x03\x43\x75\x0e\x66\x24\xe8\xbe\x5a\x43\x72\x81\x6a\x92\xbf\x21\x61\xee\x3a\xa7\x0d\xfa\x53\xb3\x56\xda\x63\x54\xa8\x7a\xcf\xd4\x4d\x98\x91\xd5\x2b\xa6\xe5\x13\xe5\x57\x55\x83\xa1\x32\x18\x1f\xcc\xec\x33\x9d\xa2\x21\xb0\xba\x94\xb2\x99\xfe\x90\xd5\x99\xdb\x69\x9d\xba\x4b\xef\x41\x5a\xfb\xc5\xd6\xd6\x9b\xe9\x78\x02\x76\x2e\x5d\x5b\x83\x3c\x4c\x23\xa7\x20\xb5\x05\xbd\x42\xf6\x4b\x1c\x0c\xce\xe1\xe7\x02\xaa\x92\x27\xcb\x2f\x43\x1c\x05\x83\xc5\xf2\xea\xd5\x20\x0a\xd2\x15\x93\x7c\xd9\xfd\x6a\xa0\xbe\xc2\x25\xf0\x02\x7a\x4a\xc9\xcd\x4d\x08\x67\x54\xe8\xa6\xf6\xbd\x2a\x0d\xa0\x70\x43\x14\xfb\x3d\xaa\x72\x69\xa6\x3a\x68\x27\x91\x5d\x0b\x74\x78\x04\x1e\xa6\x6b\xeb\x51\x48\xd7\xd6\xa3\x40\x41\x47\xa3\xfa\x24\x0c\x9b\x47\x6b\xeb\xd1\xda\x3a\xca\x02\x5b\x58\xde\xe5\xb6\xf8\xda\xfa\x8a\x5b\xc9\x6b\x58\x6c\xf7\x77\x29\x03\xb9\x8a\x61\x5b\x5a\x78\x79\x68\xc1\x88\x42\x0b\x6b\x54\x2e\xe4\x0c\x3b\x15\xa2\x3a\x93\x4f\xe4\x7e\x9d\xd1\xad\x44\xd2\x4f\x01\x47\xeb\xc3\x81\x8b\xb6\x1b\x78\x97\xbc\x4a\xb7\x38\xe6\x07\x1a\x5d\xd1\x49\x38\x5a\xd7\x7d\x86\x7c\x19\x38\x7a\xda\x6d\x76\xc9\x76\x6a\x3a\xaf\xe8\x45\xa6\xdc\x0c\xdd\xee\xbe\x96\x27\x82\x9e\xd4\xd1\x96\xf0\xae\xba\x3a\xd7\xe1\xca\x55\xee\xe9\xb7\xa1\x88\x9a\xfb\x60\xd6\x12\x63\xd1\xee\xe9\xf7\x3d\x6a\x4a\x37\xe6\xc0\xae\xec\x19\x4f\x39\x68\x67\x35\x6b\x32\xd0\x9c\x89\x61\x4c\xd6\x9f\x86\x12\x77\xc1\xb3\xcb\x19\x14\x94\xa3\x04\xc5\xf0\x90\x04\x33\xeb\xe0\x3f\xa9\x0e\x8b\x67\x7a\xeb\x80\x68\x1c\x00\x1e\xf0\xa2\x60\x7d\x9c\x1d\xb0\x78\x93\xa5\xe9\x0c\x49\x36\x4f\xd3\x43\x00\x1d\xe1\xc6\xdd\xe7\xe3\xfe\x6e\x3a\x56\xb9\xa8\x58\xdc\x0d\x82\x40\xdf\x0f\xf9\xaa\x14\x38\xeb\xaa\x7a\x3d\x7b\x3c\xb3\x5a\xab\xe3\xd7\x9c\x58\x95\x33\xa7\x4e\x09\x9c\x76\x0b\x05\xc4\xb3\xf6\x8d\x83\x58\x85\x05\x17\x3a\x04\xae\x42\xfd\x20\xb1\xb6\x3d\x9b\x55\x3e\xd4\xf1\xe6\x96\xa3\x9a\x74\x24\x8f\x20\x08\x66\xca\xff\x49\x4f\x02\x66\x9b\x15\xef\xda\x6a\x02\xdb\x17\x24\x53\x39\x4e\x91\xcf\xf4\xba\x43\x8c\x51\xa2\x31\x6a\x66\xf2\xa9\x1a\xb6\xa1\xb4\xbc\x6f\x6e\x2f\x30\x5c\x59\x6d\x3b\x2e\x1d\xac\x50\xa0\x82\x84\xef\x11\x2e\x08\xcf\xe0\x71\xdb\x6a\x6d\x3c\xc9\xe1\xa1\x0d\xf0\xab\x0e\xbb\x89\xd1\x1c\x32\xc4\xd6\xaa\x1d\xe1\xcc\x7a\xe5\x3a\x6e\x9c\x55\x6d\xe5\x9b\x6a\x76\xfc\x23\x4e\x95\xaf\x1d\x70\x58\x4a\x11\xab\x04\x93\xfe\x94\xa7\xf9\x4c\x09\x25\xee\x49\xb1\x0e\x63\x54\x91\xed\x04\x98\xf3\xef\x74\x65\xdc\xcf\x08\x1b\x83\xac\x7f\xe5\xf2\xe6\xc5\xaf\x5f\x3c\x7f\xfd\xda\x45\x64\xd9\xa8\x58\xdc\x1c\xce\xac\x37\x37\x25\x19\x32\xc8\x37\x9c\xb8\xa2\x1d\xe6\xd3\x4c\x9d\x55\x08\x7e\x70\x98\x06\xac\x4f\xd9\x5e\xba\x43\x00\x47\xde\xb7\xdb\x80\xc2\x11\x1d\x52\xdb\xb9\xa4\xb2\x13\xd6\x19\x30\x13\x0f\x38\xcd\x4b\x89\x72\xc1\x08\x77\x01\x8f\x67\x26\xa3\x56\x8d\xca\x55\x02\x9a\x12\xa4\x70\x64\xce\xe8\x58\x9f\xa5\x12\x52\xd9\xae\xce\x29\x03\x12\x38\x54\x40\x25\xbd\x5e\x02\x60\xe5\xd7\x5b\xe1\x4e\x45\xca\x5b\xb9\x07\xd9\x88\x61\x08\x37\x29\x03\x89\xfd\xac\x7e\xd6\xf6\x99\xca\x0e\x65\xd7\x43\x1b\x3f\xd5\xc2\xd0\x4d\xfa\xfb\x3a\x4b\xd6\x26\xb9\x39\x93\x72\x13\x4d\x59\x56\xf1\x81\xcb\xe5\xb0\x0e\x29\x91\x3b\xbd\x17\x2e\xbe\xf8\xd2\x65\x39\xbb\xb6\xad\x21\x69\x9d\xd1\x2f\x20\xa5\x3f\x2b\x49\xdc\xc2\x7e\xe0\x44\x1b\x03\x04\x3d\xde\xff\xad\x77\xfa\x60\x34\x9c\x10\xd5\x68\x91\xcd\x48\xac\x7e\xe8\x84\xc6\x5a\x63\xff\xd8\xe3\xb0\x5c\xa1\xb5\xde\x47\xcb\xe5\xa8\x26\x90\xf4\x78\x80\xce\xf9\x96\xe1\x8b\x74\x55\x73\x2e\xfd\x38\xa1\x84\xd9\x55\x70\x58\x9a\x23\x77\x0e\x9e\xa9\x39\xed\x3e\xb9\x49\x33\x91\x6d\x1c\xb0\x38\x70\x6f\x8a\xc2\xde\x21\xd1\xe7\x04\x8f\xc7\x94\x9b\x42\xce\x9d\x1f\x68\xaa\xaa\x33\xa1\x8a\x28\x1d\x17\xda\xbf\x6f\xe3\xb2\xf5\xf5\x95\xc6\xc3\x7e\x26\xb0\x30\xcd\xd8\xcb\xb6\x36\x0e\x95\xff\x01\x91\x23\x7e\xd0\xe6\x6e\xd5\x77\xde\x9b\x2d\x4c\x48\x76\x07\x1a\x7f\x3c\x65\xd5\x07\x9e\x80\xca\x7a\xff\x4b\x1e\x6a\xc4\x82\xc3\x52\x11\x0b\x85\x42\xeb\x8e\x9d\x6e\x95\x5e\x58\x49\xc3\x81\xfe\x73\xfa\x5b\x75\xa8\x99\xdd\x52\x96\x6b\xe6\xb6\x14\xfd\x8c\xcc\xb0\xb2\x47\x87\x25\x62\x7d\x4e\x12\x2c\xe8\x1e\x09\xea\x4b\xcf\xfd\xde\xd1\x5f\xad\x39\xdf\xae\xf1\x12\xb1\xff\x8b\x63\x55\x29\x8c\xd9\x88\x0d\xeb\x60\x6a\xac\x1f\xef\x8f\xdb\x4c\xfb\xfb\xfb\x29\xdf\xa1\x6c\x5a\xcd\xf7\x17\x02\xbf\x15\xc8\x85\xb5\x4f\x24\x77\x53\xa5\x2c\x3d\x8c\xf7\xc7\x6d\x91\x71\x17\x21\x29\x25\x20\xa7\x24\x2d\x2e\x7f\xa4\x65\xd0\xee\xf9\x6d\xca\x48\x46\xba\xe8\xd0\xd0\x92\x61\x37\x7c\x71\x12\x19\xba\x72\xef\xf7\x7f\xf2\x9b\x6f\x7e\xd2\x45\x59\x4c\x18\xe6\x34\x1d\x76\xc1\x68\x18\x6e\x64\x91\xb9\x2f\x9c\xeb\x4e\x78\x25\x8d\x72\x91\x50\x46\x8a\x7b\x3f\xfe\xe8\xf3\xff\xfa\x77\xc5\xbd\xef\xfe\xf5\xe7\x3f\xfe\x1f\x05\x18\x0d\xbd\x07\x70\x74\xef\xa7\x7f\xfd\x2f\x1f\xfd\x02\x76\x11\xb9\x89\x77\x67\x09\xc9\x74\xc5\x17\x49\x64\xee\x8b\xf0\xad\xfd\x68\x9b\x70\x52\x7c\x76\xe7\x7b\xf7\xfe\xe6\x07\xc5\xbf\xfc\xf4\xa3\xcf\xee\x7c\xaf\xf8\xec\xc3\x3b\xf2\xef\xf3\xff\xf6\x3f\x3f\xbb\xf3\x3d\xd8\x45\x33\xc2\xc6\x94\x4d\xf5\xe7\x57\x67\x91\xbe\x2d\xc2\x6b\x22\x4a\xc7\x69\x71\xef\xce\xb7\xee\xfd\xed\x9f\xa8\xbf\xf7\xf4\xdf\xef\xff\x59\xf1\xf9\x9f\xdc\xbe\xf7\xde\x8f\xe5\xdf\xbf\xfc\xfa\x0f\x61\x17\xa5\x2c\x39\xd0\x15\x5c\x49\x23\x96\x1c\x14\x9f\x7d\xfc\xad\xcf\x3e\xfe\xd6\x08\x76\xd1\x16\x8e\x77\xe4\xee\xcf\xc6\xc3\x6e\xf8\xc2\x56\x54\xdd\x16\xbf\xf9\xe6\xf7\x75\x87\xfe\xfd\xe7\x7f\xf0\x83\x2e\x9a\xd2\x3d\xc2\x74\x25\x97\xa6\x91\xbc\x51\x3d\xa0\x62\xbb\x08\x9f\xc7\x11\x1b\x17\xf2\xf3\x5c\x14\xaa\x8f\x31\x99\x89\xe2\xde\x7b\xdf\xb9\xf7\x57\xb7\xe5\xdf\x6f\xfe\xf6\x8e\xba\x93\x90\xfe\xea\x1f\x3f\xfb\xf0\x8f\x8a\xdf\x7c\xe3\xfb\xf2\xef\xde\x0f\xbe\xff\xf9\x7f\xf9\xc7\xe2\xb3\x4f\xbe\xfd\xf9\x1f\xff\x1d\xec\xa2\xfd\x6d\xdb\x88\x1a\x1d\x56\x84\x2f\xd1\x68\xd2\x68\xe1\xde\x27\x7f\x58\xdc\xfb\xab\xdb\x9f\xff\xd9\x8f\x4f\xa8\x4d\x54\xb5\x5d\x13\xba\x36\x09\xdb\x8c\xc4\xa2\x51\xe3\xff\xba\xfd\x97\x9f\xfd\xea\xf7\x8a\xcf\x7f\xfc\x93\xcf\x7f\xfc\xa3\x13\x2a\xdd\x94\x7c\x4e\x36\x0c\xbb\x6a\x44\xba\xa8\x2b\x61\xee\xa2\xae\x6c\xac\x1b\x95\x0f\x82\xaa\x2f\x72\xc2\xe2\x6d\x17\x53\x25\xec\x2f\x4e\xa2\x54\x57\xc8\x70\x42\xc5\xdd\x9f\xc3\x36\x74\xbd\xfb\x73\x83\xaf\x57\x67\x51\x82\x59\x27\xbc\x30\x8e\xf2\x8e\xfb\xaa\x15\x19\x89\x41\xc6\xea\xba\x90\x38\x12\xe6\x77\x7f\x15\x35\x91\xef\x22\x89\x58\x47\xee\xfc\x4c\x90\x42\xdf\xc5\x69\xce\x33\x8b\x8b\x1e\xa2\x6d\x64\x11\xc9\x13\x22\x89\x6a\xd4\x40\x33\xf9\xfa\x7c\x1c\xa5\x4c\x90\x9b\x82\x40\x0f\xb5\x36\xb2\x28\xa5\xa2\x08\xef\x7e\xf7\xee\xcf\x2f\x92\x48\x60\x26\x3a\xe3\x94\xb1\xbb\x3f\x97\x40\xb6\x3c\x6d\x7b\xd8\x5a\x52\xcd\xf8\x1e\x89\x15\xe4\xa2\x08\x5f\xdb\x8d\x30\xcd\xd4\x53\xd9\xa5\x31\x27\x1e\xfa\xbd\xfe\x6e\x94\x63\x89\x20\xaf\x26\x51\xca\xb3\x77\xf3\xaf\xd4\x97\x44\x11\x05\xea\xd7\xe4\xa1\xdb\xf3\x38\x4a\x52\xee\xd5\xbe\x50\xfa\x58\x3c\x42\xdd\x2c\xa5\xa2\x8b\xba\x44\x76\x41\xf6\x80\x90\xcc\xbf\xf5\xee\xba\xa8\xfb\xae\x84\xb7\x8b\xba\x89\x86\xb1\x8b\xba\x58\x5e\x76\x23\x34\x25\xa2\x23\xab\xf3\x5d\xb9\xfa\xaa\x5d\x15\x29\xb0\xe3\xb6\x72\xaa\x52\xa7\x29\xb4\xbc\x8c\x02\xb5\xf1\x5a\xf6\x5e\xbf\x35\x1d\x58\xfa\x5e\x75\xab\xf1\x56\x31\xee\x0f\xb4\xf6\x2e\x11\xbe\x8b\x59\xcb\xda\xcb\xd9\x8e\xac\x50\x2d\xbd\x9f\x8a\xc2\xd9\x3b\xe4\xec\x66\x33\xb2\x23\x8a\xf0\x7a\x1e\x65\x24\xc6\x99\x7e\xc8\xf6\x09\x1b\xe7\x6c\x9a\x4d\x70\x92\xb4\xad\xd6\x5b\xce\xe6\x62\xae\x41\x67\x5a\x5c\x82\x3c\x67\x63\x4e\xb3\xac\x90\x44\x96\x64\xf1\x36\xd9\x66\x0a\x5b\xfc\x95\xfb\xc2\x56\x44\x68\x36\xa3\x24\x21\xa3\xe6\x32\x35\x1b\x83\x5c\xc6\x93\x09\x61\xde\xaa\xbc\xcc\xa2\x9c\x2b\x4c\xa4\xec\x16\x9d\xb6\x2c\xcc\x4b\xd3\x48\xc2\x90\xe0\x29\x29\xc2\xaf\x6d\x47\x4a\x16\x9e\xca\x47\x0a\x58\x22\xf2\x59\x11\xbe\xb9\x17\xa5\x1c\xe7\x99\xf2\xdb\xbd\x25\xfc\x25\x2c\xfb\x3f\x25\x2c\xdd\xdd\x95\x04\x57\x76\x63\x4a\xb6\x08\x03\x9d\x8c\x50\x40\x18\x1c\xc1\x91\x5a\x05\x54\x0f\x9b\xac\xf8\x79\x1c\x6d\x11\xae\xfe\xf3\xbb\x3f\x21\xbc\xb9\x11\x10\xc6\xd4\xb8\xe3\x24\xc9\x1a\x1f\x79\xcb\xee\xc2\x38\xc2\xa6\x68\x9a\x4c\x13\x1a\x6f\xd7\x75\x2e\x7e\xf7\x25\x12\xf2\x0b\xb9\x68\xa5\xe3\x16\x71\x14\x5a\xc5\x16\xad\x08\xd5\xbb\x26\x9d\x12\x96\xc5\xdb\x78\xd6\x4a\xe0\x2d\xca\x5c\x9a\x16\x64\x0f\x27\x0b\x38\x21\x27\x25\xe5\x5b\x84\x24\x63\xc2\x96\x62\xc5\x6b\xbb\x51\x4a\x44\x87\xa5\x53\x0f\x31\x24\xc1\x4a\x88\xc2\x96\x26\x46\x3c\x8f\xa3\x78\x5b\x21\x41\xca\xc6\x0b\xd4\x5a\x90\xc4\x4e\xf2\x1e\x61\x60\x34\x7c\xe7\x9d\x6c\x8c\x85\x9c\x63\xb9\x43\x68\x7a\x87\xfd\x19\x95\x8d\x69\xfe\x07\x4b\x5a\xc2\x17\x8a\x36\x66\x54\x21\x1c\xe1\x7b\x69\x22\x07\x68\xa1\xf4\x97\x38\x8f\x97\x53\xbe\x4f\xa6\xd4\xa7\x0b\xb2\x7d\x09\xc8\x0e\x9e\xb9\xf3\xe4\x4c\x92\x3b\x35\xb2\xf4\x4e\xa6\xb6\x56\xee\xcc\x89\xda\x8d\x54\x4c\x23\x6e\xe7\x41\xb1\x5f\x9c\xb4\xf0\x64\x3b\x72\x01\xb2\x05\x1e\x4c\xe8\xed\x84\x8c\xd5\x62\x9f\xea\x1b\xa6\x11\x9d\x09\x2c\x84\x37\xea\x97\x59\x74\xf7\x67\xdc\x2b\xea\x0d\xf5\x46\x16\xdd\xfd\x99\x42\xcd\x49\xca\x25\x64\xcd\xa2\x27\x6c\x58\x53\x2a\xe4\x86\xc5\xee\xfe\x8c\xcb\xed\xeb\xee\xcf\xcc\xce\x23\x9f\x2f\xdd\x0a\x74\xf1\x65\xa4\x5e\xd5\xf2\xd0\x29\xfd\x55\xca\xb1\x20\xcd\xd5\x79\x4d\x44\x58\x72\x3f\x6f\x1f\x44\x98\xb3\x85\x15\xf8\x3c\x8e\xc6\x72\x50\xd4\xf2\x95\x5c\x0a\x17\x94\x78\x6b\xd0\xf2\xf3\x99\x70\xa7\xf9\x85\xad\x88\xd3\xa9\x3b\xc5\x09\x8e\x77\x14\x5f\x36\x4b\x45\x63\xae\x9f\xc7\xd1\x44\xe8\xbb\x16\x86\x5b\x72\xda\xc7\x73\xdc\x2d\x0c\x74\x4c\xda\x58\xe8\x16\xde\x38\x26\xcb\xb8\xe3\xd3\x4c\xbd\x84\xce\x3c\x8e\x89\x79\x11\x93\x0a\x03\xe4\xeb\xe5\xec\x80\xfe\x6a\xe9\x7e\x2f\xda\x5e\x3f\x38\x1a\x5c\xdf\xe1\x98\x32\xba\xb8\xe7\xcf\x7f\x7a\xf4\xef\xa2\xa3\x6f\xce\x3f\x99\x7f\x74\xf4\xed\xa3\x1f\x1e\xfd\x41\xd1\x7c\x34\xbf\x33\xff\x64\xfe\xfe\xfc\xe3\x22\x9c\xff\x64\xfe\x4f\xd1\xfc\xce\xd1\xed\xa3\x6f\xcc\x3f\x98\xff\xfd\xfc\xfd\x22\x9c\xff\x60\xfe\x7e\x74\xf4\xde\xfc\x9f\xe6\x1f\xcc\x3f\x3a\xba\x5d\x84\xf3\x3f\x9b\xdf\x91\x0f\xee\xcc\xff\x7e\xfe\xf1\xfc\xc3\xf9\x2f\x8e\x7e\x78\xf4\xde\xd1\xed\xa3\xef\x17\xe1\xfc\x3f\xcd\x7f\x11\xcd\x3f\x9e\xbf\x2f\x1f\xb8\xaf\x16\xf0\x6f\xfe\xe7\x47\xef\x45\x47\xdf\x9e\x7f\x20\x5b\x3e\xfa\xc6\xd1\x0f\xe7\xbf\x2a\xc2\xf9\x7f\x3f\xfa\xbd\x68\xfe\xbe\xaa\xf7\xce\xfc\x13\x1f\x1d\x15\x68\x47\xdf\x98\x7f\x38\xff\x48\xb6\x30\xff\xe5\xfc\xc3\xc6\x9e\x30\xff\xd3\xf9\x27\xd1\xfc\x03\x09\xa9\x02\x5f\xb6\xfe\x0d\xd5\xc2\x87\xaa\xf6\xbf\x3e\xfa\x8e\x7c\xfd\xd1\xfc\xfd\xa3\xff\x70\xf4\x1d\xfd\x70\x41\x02\xad\xb6\x91\x70\xfe\x17\x47\xb7\xa3\xa3\x1f\xce\x3f\x3e\xfa\xfe\xfc\x23\xd9\x98\x87\xdb\xf3\x3f\x99\x7f\x14\x49\x28\x8f\x6e\xab\x81\x79\xef\xe8\xb6\x87\xe3\xf3\x3f\x9a\xff\x52\xf6\xe5\x93\xf9\x9d\xa2\x86\xbd\xb0\x40\x1e\x7d\x6b\xfe\xbe\x02\xea\xdb\x47\x3f\x8c\x0a\xdd\x56\x35\xda\xf3\x8f\xe7\x1f\x78\xb8\x3f\xff\xbb\xa3\x3f\x88\xe6\x1f\x1d\x7d\x57\x55\xa6\x6a\xfe\xa0\xa8\x40\xf8\x58\xd5\x7b\x4c\x45\xf5\xda\xd0\xaf\xef\xcc\x7f\x79\xf4\xc3\xe3\x3f\xf9\x12\x37\xa1\xab\x69\x42\xb3\x05\x6e\xe2\xad\xfd\xe8\xd3\xdb\xf8\xd3\x1f\xc5\x74\x3f\xfd\xf4\x47\xff\xfc\x1d\xc3\x54\xec\xc4\x37\xb0\xcb\x98\x5e\x9d\x45\xa9\xe0\xb7\xc8\x16\xee\xc8\xd5\x4c\x6f\x31\x92\xa5\xfb\x78\x39\x87\x91\x67\xb7\x34\x5b\x8a\xb7\x92\x94\x75\xbc\x17\xd8\xc7\xb0\xab\xb3\x88\xdf\x3a\xd8\xf9\xf4\x36\x1e\x1f\x34\x50\xeb\x4a\x1a\xc5\xb7\xc8\x4e\x7e\xe3\x9f\xbf\x15\x1f\x14\x72\xef\xa1\xe4\xd6\x3e\xe1\x07\x13\xba\x93\xee\x63\x76\xb0\x88\x3e\xd7\x44\x74\x90\xec\xa4\x0d\xb4\xf9\x9d\x5b\x11\xfe\xf4\x76\xfa\xe9\xaf\x09\xa3\xd8\x43\x18\xf9\x46\xb5\x8d\x65\x23\x9a\x1f\xd0\x57\x57\xd2\x88\xe3\x5b\x8a\xee\xa9\xa1\x48\x7c\xd1\xee\xe5\x1b\x11\xf9\xf4\xd7\x24\xa1\x85\xbe\xfc\x91\xbc\xba\x34\x8d\xc6\x07\x45\xf8\xca\x4e\x44\x89\xbc\x68\xad\x43\xb8\xc4\x55\x2c\x2f\x77\x02\xb9\xbc\x85\x77\x12\x09\x36\x8e\xbb\xa8\xbb\x6b\xfe\x6f\x90\x5b\x24\xa1\xea\x22\x53\xff\x53\x39\xa8\xdd\x1d\x09\x8e\xac\x41\x36\x67\xe8\x69\xfd\xfd\x72\x9a\xba\x7b\xfc\x6b\xdd\xda\x52\x92\xab\x60\x58\xfa\x76\x3a\x3e\x58\xfa\x4e\xc1\xbb\xf4\xad\xea\xc5\x43\xa7\xe4\x1b\x33\xcc\x5a\x56\x88\x66\xb2\x35\x8f\x3d\xc6\xe3\x22\x3c\x1f\x47\x98\xe3\x58\x10\x7e\xf7\x6f\x32\x41\xe3\xc5\x55\x70\x91\x44\x59\xc5\x68\xcb\xe2\x59\xab\xd6\xe4\x86\x64\xe7\x52\xcd\x89\xea\x6b\x97\xdd\xb6\x34\x52\x32\x77\x15\x76\x6f\x44\x77\xff\x21\x69\x22\xb7\xd2\xec\x8c\xd3\x26\x4f\x4d\xb0\x96\xb5\x24\xe7\x2b\x19\x60\xc9\xb7\xab\x7f\x6c\xef\x33\xfb\x20\xf3\x30\xfb\x7c\xac\x94\x16\xa9\xd5\x4f\xbc\xfe\x6e\x94\xfb\x78\x2b\x59\x67\x91\xb2\x98\x9c\x46\x03\x41\xb0\xfe\x95\x37\x63\x2c\xe1\x94\x7f\xd8\xdc\x65\xe6\x56\xfe\xc7\xaa\x59\x59\x5a\x62\x2e\x31\x4d\x58\xd5\x03\xc1\xcb\x11\x51\x56\xbf\xfc\xad\x6c\xe7\xd8\xb7\xc7\xd4\xac\x60\x3c\xfe\xe3\x63\x5e\xeb\x1e\x2d\x45\xe4\x6c\xf9\xea\xb0\xbd\x7f\xe8\x68\xfe\x46\x9e\x65\x27\xb1\x2b\xf3\x0f\x17\xd8\x95\xf9\x87\x0e\xbb\x22\xb9\x88\xf9\x2f\xe6\x77\xe6\xbf\x52\x1c\xc7\x2f\xe6\x77\xbc\x35\x30\xff\xf3\x9a\xc5\x90\xfb\xbd\x8b\xfb\xf3\x9f\xa8\x67\xbf\x96\xcc\xc2\xd1\xf7\x46\x0d\x82\x2f\x19\xd3\xd9\x02\x51\x9f\xff\x85\xdc\x6e\x15\x3f\x70\x67\x51\xb2\xb4\xbb\xfc\x07\xf3\x5f\x1e\x7d\x4f\xc1\x73\x47\x36\xa1\x7a\xb0\xc8\x2d\xc0\x16\x76\xe1\xce\xfc\x9f\x8e\xbe\x69\x78\xa7\x5f\x17\x6d\x3c\xc4\x37\x2b\x56\xeb\x8f\xe7\x1f\xca\xcd\xfb\x4f\xa3\xf9\x1d\xa8\xe5\x54\xcd\x26\xc0\x91\xc7\x39\xfc\xe7\xf9\x07\x92\x59\xd3\x3c\x82\x81\xe2\x1f\xe6\xbf\x54\xfb\xfd\x71\x55\x2c\xf0\x0c\x45\xc5\x3c\x9c\xe6\xf3\x2f\x95\x7f\xe0\x22\x9f\xe6\x8d\x33\x90\x16\x0a\x49\x5c\x12\x19\xde\xfd\x1b\x1a\xb5\x53\xc9\xf3\x71\x44\x58\x88\xef\xfe\x79\x74\x02\x9d\xbc\xe9\xd0\xc9\x9b\xcb\xe8\x64\x83\x4c\x86\x77\xff\x21\x8d\x16\xe9\x64\xde\x46\x27\x6f\x18\x42\x79\x03\xef\x9e\x4c\x29\x15\x14\x9a\x4d\xc8\xda\x54\xbd\x9a\x6a\x12\x43\x35\x1b\xa5\x1b\x14\x34\xc4\x77\xff\x32\x4a\x1b\x65\x4e\x24\xa7\x37\xb0\xf9\xdb\x3d\x91\xa0\xbe\x5b\x11\x54\xa2\x09\x2a\x4e\x2b\x6a\x7a\xe3\x58\x72\x7a\x03\xef\xfe\x6b\xa4\xa7\xef\x9e\x40\x4f\x97\x8b\x7f\xaa\xf3\xf7\x45\x4c\xeb\x95\x70\xa8\xe2\x5f\x73\xf0\xf4\x93\x10\x51\x26\xc8\x94\x70\x79\xf7\x14\x44\x93\x24\xc5\x42\x5e\x3f\x0d\x51\x42\x33\x75\xf9\x0c\x44\x42\xc5\x78\xe4\xe0\xe9\xdf\x86\x68\x86\xb3\x6c\x53\x6c\xf3\x34\x9f\x6e\x0f\x39\x58\xff\xed\xfb\xb7\x4c\x0d\x2e\x60\x41\xfa\x33\xcc\x33\x52\xc7\xc8\xef\xd0\xec\x32\xbe\x0c\x38\x1c\x09\xe0\xd8\x01\x9f\xc7\x8c\xa5\xa2\x63\xec\x85\xac\x19\x70\x47\xa4\x1d\xdc\x91\xdd\xe9\x42\x38\x14\xda\x24\x48\x7e\x25\x6b\xd6\xb6\x3f\xf7\x0b\x9b\x02\xeb\x25\x26\x1e\x04\x32\xd6\x31\xc3\xeb\x40\xc7\x1f\x14\xa6\x17\xe5\x1c\x3d\xd0\x78\xa9\x59\x7e\x60\x90\x2c\x06\x56\x76\x58\xca\x91\xee\xf1\x77\xd8\xe3\xf0\xd4\xc6\x2f\x03\x6d\xde\x77\x56\x79\x1e\x3c\x1e\xbe\x53\xbc\x93\x9f\x7d\x6a\xf0\x74\xf4\x38\xc2\xc1\xe3\xbf\x5b\xdf\x17\xf5\xe5\x63\x8f\x4f\x51\xa6\x5e\x56\x8f\x46\x67\x0e\x9f\x40\xe5\xe3\xc7\x0f\x1e\xca\x03\x0f\x46\x94\x04\x80\x07\xb9\x75\x69\x45\x0c\xf0\x3e\x27\xb3\x04\xc7\x04\x60\xd4\xed\x42\x53\x38\x85\x6d\x96\x69\xb5\xd5\x88\x20\x37\xc5\x90\xf6\x05\xa7\xbb\x80\xc8\xf5\x24\x49\xb8\xf6\x90\xa7\x7d\xe7\x4e\x99\x8c\x40\xd8\x67\x78\x87\x8c\x01\x84\x28\x0e\xc6\x20\x0f\x07\x11\x1c\xb9\xb5\xd2\x09\x18\x3b\xa9\xbf\xb7\x01\x5c\x99\xc9\x4f\x87\x6d\x85\x16\xac\xe5\x2f\xe0\x6c\x9b\x64\xca\xcc\x3f\x67\x44\x69\xaf\xc8\xb8\x83\x85\xa2\x13\x1d\x41\x77\x49\x17\xae\x6c\x03\x88\x54\x9d\x68\x12\x30\xa0\x6d\xce\x18\xc8\x61\x9f\xe0\x78\x1b\xc4\x10\x99\x29\x6d\xb5\xf7\x6e\x1d\x8a\x3d\x9b\x90\xda\x4b\x3c\x4e\x60\x1d\x52\x45\x7b\x66\xbc\xc3\x1c\x7b\x7c\x67\x30\x4a\x30\x71\x23\x5e\x2a\xe3\xc3\x56\x87\x8c\xac\xb2\x4d\x74\xec\x32\xe1\xe1\xc4\xc4\xba\x76\x13\x12\xcd\x6a\xc0\x26\xfd\x04\x67\x02\xc0\x15\x06\xc8\xd2\x39\x26\x8d\xb8\x56\xb5\xa5\x62\x22\x3b\x20\xa7\x19\xa5\xfa\xda\x99\x55\x84\x03\xda\xe7\x7a\xf2\xfb\x59\xbe\x95\x09\x2e\x6b\x5b\xa1\x13\x40\xfb\x34\xbb\x9c\x8a\x17\x12\xcc\x76\x54\x50\x86\x26\x3a\x3c\x97\x2e\x4e\xe0\x4b\x75\x89\x8e\x8e\x33\x0d\x57\x44\xc8\xa2\x00\xc8\x5f\x15\x8c\xd3\x1a\xff\x61\x15\x1c\xee\xa4\x95\xe6\x50\xfd\x0d\x41\x66\x57\x25\x05\x91\xd4\xfe\x99\x01\x44\x2f\x6a\xee\xa7\x7a\x76\xf6\xa9\xea\xd9\x8b\x34\x71\x9e\x3f\xfd\x05\x16\x74\xdb\x2a\xb4\x2e\xf8\x8f\x87\xbf\xfb\x4e\x16\x3d\xae\xdd\x0a\x14\x31\x73\x57\x6a\xe5\x64\x67\xec\xbc\x8c\x8b\x0f\xaf\x3d\xed\x7a\x3d\x06\x28\x2c\x0a\x6a\xed\x7b\x5a\x50\x94\x81\x06\x29\x42\xbc\xcd\x2a\x56\x28\x03\x47\x89\x4c\xe2\x0b\x0d\x62\x8c\xb3\x99\x1e\xc0\xb3\x10\xed\xa6\xf1\x36\x1e\x1e\x6e\x18\x7e\xf0\x55\xb2\x47\x92\xab\x49\x3e\xa5\x4c\x16\x78\x02\x22\x39\xe4\x8d\xa7\x4f\x42\xa3\x54\xc0\xd9\x2e\x5d\x38\x16\x56\x35\x9e\x04\xcf\xb9\x46\x84\x1e\x3a\x01\xab\x95\x05\x94\x8d\xd7\x03\x9e\x86\xfd\x49\xb6\xa2\x5c\x90\x63\x92\x65\x41\x75\x55\x14\x4b\xac\x8d\x58\x9b\xb5\xd1\x71\x44\x55\xf1\xd8\x4f\xc0\xfe\xc5\x3d\xc2\xc4\x0b\x79\xb6\x42\xda\x5d\xe4\x14\x2f\xe8\x7e\xcf\x6d\xfa\xf2\xd4\xf8\x99\x34\x03\xb5\xc0\x43\xa1\x66\xa7\x4f\xd9\x24\x95\x74\x95\x39\x56\xd9\xda\x1e\x93\xf5\xaf\x5c\xde\xdc\xb8\x76\xf1\xaa\x67\x6b\xcb\x4b\x88\xd2\x3e\xc7\x6c\x67\x53\xb9\xe2\xe8\x34\x52\x8e\x9b\x12\x80\x9e\xeb\x9e\x84\xc4\xd8\x09\x36\xdc\x0e\xad\x5f\x64\x1d\xdf\xc1\x0b\x17\x44\xfa\x3c\xd7\x85\xca\xb2\xcd\x30\x0c\x71\x70\x76\x70\x92\x75\x5b\x73\x23\x34\x1e\x78\x67\x9f\x71\x96\x51\x9f\x32\xea\x63\x3a\x09\x48\x51\x54\x36\x6e\xca\x73\x48\xc5\x1f\x89\x53\x26\x30\x65\x84\x17\x85\x4a\x7e\xb5\x59\x3d\x00\x10\xe1\x20\xb5\x39\x18\x24\xef\xd0\x9f\xd4\x0b\x3d\x0b\xbc\xdb\x00\x7b\x2f\x51\xf5\xd2\x29\x57\x97\x91\xef\xad\x40\x24\x0b\xd8\xeb\x06\xba\x48\xc0\x17\x68\x2c\x3c\x54\xa1\x30\xac\xd9\xf6\x08\xf7\xa9\xd8\xcc\x0e\x58\x3c\x54\x57\xca\x56\x1b\x02\xd2\x17\x54\x24\x04\x11\xe4\x91\x67\x49\x2f\x04\xe0\x3a\x7c\xdd\x69\x48\xe1\xff\xef\x63\x8d\xfb\x63\x95\xc2\x72\x8b\x38\x43\x2a\x34\xf6\xf3\xbe\x12\xd7\x5a\xb9\xce\xd5\xf5\xda\x0b\x82\xea\x17\xf5\xf4\x80\xe6\xbc\x30\x63\x28\xcf\x9d\x14\xa0\x3b\x74\x36\xd2\x7f\x00\x0e\x29\x80\x2b\x3c\x58\x1d\x20\xd1\xdf\xa2\x4c\xee\xee\x80\x21\xd0\x60\x6f\x6c\x74\x52\x40\xfb\x13\x4c\x93\xa2\xa0\x50\x0d\x65\xb0\xba\x8e\x28\xb0\x33\x5e\x81\x95\x3a\x60\xb5\x43\xd5\x06\x93\xdc\x02\x34\x50\x0b\x00\x41\x24\x9b\x92\x6d\x9c\x0a\x71\xd3\xa1\x84\xcf\x0c\x66\x59\x22\x74\x3c\x26\x56\x70\x3b\x04\xdc\x0f\xe7\x21\x60\x7b\x78\x68\xcb\xd6\xe3\x24\xe9\xe0\x4e\x9c\xe0\x2c\xeb\xe0\x4c\xf2\xf4\xa6\x4a\xd7\xf5\xd5\x4c\x56\xc5\x94\xa9\x10\x97\xc2\x0d\x36\xe8\x86\xae\x63\xfd\x3a\xbe\x7f\xe0\xde\x14\xc5\xea\x3a\x62\x7d\x37\xde\xbf\x1c\x2d\x13\xad\x91\xaa\x7d\x19\xb0\xfe\x3e\xa7\xc2\xbc\x5b\x9a\x7e\x00\x31\x1d\xc4\xca\x0d\x68\x9e\x36\x13\xa0\xf6\x7a\xd4\x4b\x54\x20\x20\xe2\xea\x99\x4a\x4d\x5d\xf2\x3e\xb7\xae\x17\x38\xe8\xe6\xd6\xa3\xb4\x8e\xeb\xa4\x83\x77\x8f\xf4\x5f\x4b\xa6\xd8\xee\xe6\x66\xd7\x32\x51\x75\x8e\x41\xe5\xe6\x36\x49\xd2\x94\xeb\x4b\x2e\x25\xf4\x5d\x00\x7f\x4b\x09\xa9\x2c\xdd\x97\x3c\xbb\xfc\x14\x96\x28\x0b\xd6\x51\x1e\x60\xd0\xbd\xf6\xfc\xa5\xcd\xf3\x57\x5e\xbb\x7a\xfd\xda\xc5\xae\x94\x28\xcc\xa3\x6b\x6f\x5f\x95\xf7\xf1\x92\x04\x52\x6a\x89\x9a\x50\x0b\xd6\x6b\x7e\x8f\x66\x34\x65\xc1\xba\x71\x6b\xc0\x99\x38\xbf\x4d\xe2\x1d\x32\x76\x1f\xa9\x98\x52\xf6\x01\xcd\xae\xcf\x4c\x14\xa7\x55\xf3\x28\xcb\xb7\x04\x9e\x06\x8a\x7b\x77\x1e\x64\xf5\x93\x30\x89\x82\xca\x23\x44\x8e\x7c\xa8\x13\xc4\x98\x28\x66\xbe\x55\x75\x13\x94\xd5\x20\xc8\x8c\x7b\x82\xdb\xf8\x60\x11\xe6\x4c\x09\x15\x4e\x4c\x5e\x03\x88\xcd\xdb\xa1\x6f\x91\x71\x47\xb3\xbd\x57\x31\xb2\xf2\x24\x59\xd5\xb1\x94\xb8\x71\x3d\xc4\x37\x01\x47\x22\xcc\x23\x00\x21\x44\xa6\x00\xa9\x5c\x22\x59\x30\x38\xc7\x6a\x97\x48\x66\xd1\x9a\xaa\xac\xa1\xea\xb3\x15\xa7\x2a\x2a\x77\xec\xc6\x88\xf2\x3a\xb8\xca\xc2\xc8\xd6\xc1\x52\xac\x1b\x5b\xfd\xda\x04\xdf\xf2\xba\xbe\xb6\x66\x23\x4f\x57\xf5\x97\x65\x64\xc6\xb9\x9b\xcf\x94\xb2\xa2\x39\xdc\x0e\xb5\x25\x2b\x22\x08\x82\xd9\x88\xbb\xb3\x39\x04\xd5\xad\x40\xdc\x6b\xaf\x72\xcf\xf4\x1e\x23\xe1\xde\x41\xf3\x8d\xee\x6d\x3d\xaa\xf5\x43\x53\xfe\x4d\x9d\x9d\xbd\x2c\x75\x70\xbb\xee\x58\x27\x08\x69\x42\x0b\x0f\x49\x8d\xb2\x6b\x6b\x59\x59\xaa\x60\x92\x00\xa2\x49\x10\xf7\xd5\x47\x68\x1c\xc4\x7d\xdd\xdb\x15\x4f\x56\x73\xdc\xdd\x62\xb0\xae\x23\x82\x68\x27\xb2\x18\x3c\xe1\xf8\xdb\xed\xba\x62\xa7\x1c\x91\x9a\x62\xec\xd5\xaf\xc0\xde\x71\x29\xf8\xea\x3c\xdf\xde\x8b\x2a\xae\xff\xa8\xcd\xd3\xc4\x24\xa4\x2e\xdb\x72\x4c\x93\x5e\xef\xb8\x8c\x7f\xae\xd7\x4e\x10\x04\xd5\xf3\x55\x7b\x5d\x53\xb5\x91\x85\x6d\x58\x35\x28\x77\xb8\x92\x91\x7d\xd0\x4e\x35\x1c\xa2\x71\xaa\x05\x6c\xca\x3c\x3b\x18\x3c\xb3\xfe\xec\xb3\x67\x9f\x7a\xf2\x99\x27\x07\xcf\x3e\xbb\x5e\xcd\x95\xf2\x39\x7f\xb8\x6d\xd5\x88\xa0\xe9\xb3\xce\xea\xfc\x16\xc1\x3b\xaf\xe1\x59\x3d\xb5\x53\x87\x16\xd7\x19\x36\xf7\x94\x90\x6c\x97\x77\x3d\xdb\x5b\xd5\x1e\x39\x55\x39\x9b\xf5\x32\x39\x50\xf1\x54\x88\x1f\x2f\x8b\x43\xed\x0a\xfe\x1a\x9e\xa1\x03\x93\x2f\x9b\xc3\x3a\x80\x9a\xca\xc4\x5d\x27\x75\xe6\x3a\x26\x8b\x8d\xc1\xbc\x5d\xc7\x0a\xe7\x3a\xfa\x0a\x62\x10\xb1\x3a\xac\x8e\x2c\xb6\x69\x50\x75\xe0\xa0\xea\xbe\xbb\x7e\x9d\x1e\x23\xd6\x86\x9c\xc2\xba\x7c\x4c\x89\x10\xc4\x49\x41\x6e\x45\x22\x0b\xc4\x16\xa0\x72\x83\x60\xbd\x9e\x4e\xd7\x0c\x28\x1c\x81\x34\x10\x40\xa5\xcd\x24\x42\x65\x1d\x81\xc3\x34\xd0\xfd\xa0\x10\xa5\x2a\xa4\x8c\x57\xa9\x0a\x9d\x32\x01\x9b\x10\x2d\xca\x8c\xd3\x56\x1d\xd2\x0b\xd7\x2f\x0d\x3b\xe7\x31\xfb\x8a\xe8\xe8\xf5\xdb\xc1\x1d\x81\xa7\x9d\x49\xca\x3b\xb8\x33\xe3\x74\x97\x0a\xba\x47\xaa\x30\x77\x7a\x7e\x1a\xf3\xb0\x10\x72\xcb\x9b\x3e\xe6\x7c\xb4\x0b\xd8\x29\x81\x50\x8b\x0b\x33\x21\xa1\xa9\xf5\x48\x63\xc0\x24\x5f\xc0\xca\xfb\xef\x48\xa9\x80\xdc\x96\x58\x6b\xb3\xc5\xee\x02\x7e\x7f\x50\x49\x26\xb3\x2c\x81\xd0\xc1\xd8\x2d\x16\x95\xa5\x42\x9e\x8b\xed\x51\xc8\x9b\x41\x6b\x90\x70\xe2\x14\xc8\x7a\x14\xe3\x46\x96\x04\x23\xb7\x2c\xdc\x40\x45\x71\xd5\xd9\x31\x44\x78\x56\x45\xcd\x4b\x2d\xaa\x5f\x01\x2a\xde\x19\x5c\x69\x67\xcc\xe4\x4b\x55\x04\xba\xe1\x8f\xae\xf8\xf1\x3b\xf7\xa5\xb4\xdb\xeb\x71\x25\x24\x51\x9c\xd0\x5b\x84\x4b\x51\x8a\xf5\x35\x26\xa3\x34\x60\x7d\x8d\x7f\x16\xc5\xdd\x8c\x51\x83\x66\xc6\x28\xd4\x9e\x6b\x8c\xea\xec\x0d\xcd\xe8\x48\xf0\x30\xad\x78\xa6\x0d\x60\x47\x74\xc3\x1d\x51\x07\xf4\x9b\xf2\x83\x8d\x40\x72\x8b\x63\x20\x50\x57\x70\x2c\x37\xc2\xae\x97\xa9\xc6\x34\x78\xb1\x84\x72\xae\x54\x39\x27\xd4\xe7\x05\x3a\x3e\x6f\xb2\xcd\xb5\x7c\x74\x53\x72\xfa\x51\x04\x57\xfe\x4f\x00\x00\x00\xff\xff\x68\xae\xe5\x9c\xa8\x16\x18\x00") -func web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823CssBytes() ([]byte, error) { +func web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259JsBytes() ([]byte, error) { return bindataRead( - _web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823Css, - "web_ui/assets/vendor-9ea7d400c0cec7682e8871df14073823.css", + _web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259Js, + "web_ui/assets/vendor-d38f8b642cf98384d0f0a8760e75b259.js", ) } -func web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823Css() (*asset, error) { - bytes, err := web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823CssBytes() +func web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259Js() (*asset, error) { + bytes, err := web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259JsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "web_ui/assets/vendor-9ea7d400c0cec7682e8871df14073823.css", size: 8078, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/assets/vendor-d38f8b642cf98384d0f0a8760e75b259.js", size: 1578664, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _web_uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x59\x7d\x6f\xdb\x46\xd2\xff\x3f\x9f\x62\xab\xe7\xf1\x59\xc1\x85\xa3\x7d\xdf\x65\x2a\x19\x50\x65\xa5\x75\xe1\xb7\xc7\x76\x82\x0b\x8a\xc2\xa0\xc8\x95\xc5\x96\x22\x75\x24\x25\xc7\x09\xfc\xdd\x1f\xcc\x92\xa2\xe4\x97\xf6\xae\xb8\x0b\x10\x6a\xb8\x3b\xf3\x9b\x97\x9d\x99\xe5\xae\x87\xdf\x1d\x5f\x4c\x6e\x3e\x5f\x4e\xc9\xa2\x5e\x66\x47\x6f\x86\xf8\x43\xb2\x28\xbf\x1b\xf5\x5c\xde\x23\x71\x16\x55\xd5\xa8\xe7\x96\x33\x57\x06\x59\x11\x25\x69\x7e\xd7\x3b\x7a\x43\xc8\x70\xe1\xa2\x04\x09\x42\x86\x4b\x57\x47\x24\x5e\x44\x65\xe5\xea\x51\x6f\x5d\xcf\x03\xdb\xdb\x9f\x5a\xd4\xf5\x2a\x70\xff\x5c\xa7\x9b\x51\xef\x1f\xc1\xc7\x71\x30\x29\x96\xab\xa8\x4e\x67\x99\xeb\x91\xb8\xc8\x6b\x97\xd7\xa3\xde\xc9\x74\xe4\x92\x3b\xb7\x95\xac\xd3\x3a\x73\x47\x93\x22\xaf\xd6\x19\x99\x3d\x90\x9f\xa2\x6a\x91\x4e\x8a\x72\x35\x1c\x34\x53\x7b\x0a\xf2\x68\xe9\x46\xbd\xc4\x55\x71\x99\xae\xea\xb4\xc8\xf7\x60\x7b\x2f\x19\x37\xa9\xbb\x5f\x15\x65\xbd\xc7\x75\x9f\x26\xf5\x62\x94\xb8\x4d\x1a\xbb\xc0\xbf\xbc\x23\x69\x9e\xd6\x69\x94\x05\x55\x1c\x65\x6e\xc4\x5a\xa0\xe6\xb1\x0f\x17\x7b\x1b\x83\x75\x3a\x88\x8b\x7c\x9e\xde\x0d\x5c\xbe\x49\xcb\x22\x5f\xba\x7c\x5f\xc5\x81\xf9\xe1\x80\xf3\x65\x91\xac\x33\x77\x59\xba\x79\xfa\xe5\x80\xf3\x03\x31\x3e\xe0\xbc\x43\xc0\x11\x3e\x39\xe0\x7c\x0f\xa2\xe3\x5a\x95\x45\xb2\x8e\xd1\xbd\x8e\xad\x2c\x8a\xfa\xe3\xd5\x69\xc7\x72\xc0\x3f\x20\xc8\x87\x8e\x21\x2b\xe2\x08\x25\x6e\x1e\x56\xae\xe3\x8a\xd6\x75\xd1\x71\x4c\x71\x69\xa7\xe7\x9f\xda\x59\x6f\xe4\x87\xe9\xf8\xe6\xe3\xd5\xf4\x7a\x37\x66\x8e\x5b\xee\x7f\xdc\x4c\xcf\x8f\x6f\x2f\xaf\x2e\x6e\x2e\x30\x6d\xae\xf7\xc5\x8e\xa3\xba\x55\x32\x8f\xb2\xca\x75\x42\xb7\x3f\xff\xdf\xc7\xe9\xd5\xe7\xdb\x93\xf3\x9b\xe9\x8f\x57\xe3\x9b\x93\x8b\xf3\x86\xad\x2e\xd7\x3b\xae\xf1\xe5\xe5\x3e\x18\xc6\xf6\x4f\x02\xb4\x71\x65\xd5\x46\xc2\x73\x70\xe0\x40\x0f\xf8\x0f\x8e\xf2\xc4\x38\x13\xe2\xc4\x16\xb9\x74\x55\xfa\xd5\x5d\xbb\x12\x57\xf7\xd8\xcd\xa3\x75\x56\x57\xfb\xba\xd2\xfc\x37\xe7\x03\xfb\x21\x8a\xeb\xa2\x4c\xdd\x76\x56\xe1\x2c\xa6\x4b\xa7\x17\x97\xb3\x2c\xb2\xcc\x95\x7b\x43\xcb\x55\x91\xb7\x2b\xa5\x8e\x3b\xb5\x93\x8b\xf3\xeb\x8f\xa7\xb7\x1f\x4f\x6e\x8f\x4f\xae\xc7\x3f\x9c\x4e\x6f\xaf\xa6\xe3\xd3\x9b\x93\xb3\xe9\x7e\x90\xfe\x80\x75\x7c\x3e\xf9\xe9\xe2\xea\xf6\x7a\x7a\x3a\x9d\xec\x02\xf6\x52\x64\x72\x71\xf9\xf9\xea\xe4\xc7\x9f\x6e\x6e\x3f\x4f\xc7\x57\xbb\x70\x50\x4e\x3b\x03\x5b\xd6\x1f\x4f\x6e\x6e\xaf\x7f\x1a\x77\x3c\xdb\x50\x45\xcf\x19\x3f\x4d\xaf\xae\x3b\x95\x07\x9c\x33\x30\x20\x9f\x33\xfd\x70\x72\x3e\xbe\xfa\x7c\x8b\x49\xd0\x31\x16\x55\xf5\x9c\x6d\x3c\x39\xbd\xbe\x9d\x9e\xa3\x4f\xc7\xbb\x34\xc5\x8c\xfa\x01\xc6\x93\xd3\x6a\x9a\x47\xb3\xcc\x25\x18\x34\x73\xfc\x5c\xf8\xfc\xfa\x72\x3c\x99\xfe\x91\xfc\x01\xa7\xe9\xfc\x80\x53\x38\x8f\x96\xae\x5a\x45\xb1\xeb\xd0\x38\x6d\x01\x1b\x45\x2f\x19\xf6\x66\x0f\x38\x75\x3e\xaa\xad\x4c\x9b\xbb\xdb\xa9\x7c\x0f\xed\x99\x79\x3f\x5d\x9c\x4d\x6f\xf7\xcb\x0f\x1b\x5d\xe5\xc9\x0f\x07\xfc\xc3\xfd\xfd\x3d\x34\x89\x0b\x69\xf1\x5c\xf6\xf8\x62\x72\xfd\xef\xcb\x7e\x48\x8a\xf8\x45\x68\x3d\xc4\xe9\x74\x7c\x75\xfe\x27\x40\x99\x8b\xca\x1c\x16\xd8\x3c\xe3\xa2\x5c\x41\x5c\x2c\x0f\xf8\x87\x06\xfa\x55\xc0\xf1\xe5\xc9\x5f\xb0\x2b\x5a\xa5\xcf\x51\x76\x19\xf9\xe7\x30\xcf\x6c\x6a\x41\x66\x65\x71\x5f\xb9\x32\x9d\x3f\xec\x17\x68\xed\xaa\x6d\xc5\x3e\xe9\x19\xee\x0b\xf6\xf1\xf1\x6a\x95\xa5\x4d\x9f\xfb\x31\x2b\x66\x51\xf6\xb4\x09\xf5\xc8\xe0\xe8\x0d\x6e\x59\xdf\x05\x01\x79\x9a\xe2\xef\x89\xcf\x6d\x12\x04\x7e\x4f\x6b\xf6\x8f\xa6\xcf\x6f\xa2\x92\x54\xae\x9e\xf8\x96\x4e\x46\x64\xbe\xce\x7d\x8b\xe8\x47\xab\x15\xe6\xd3\x3b\xd2\x74\xfb\xb7\xe4\x9b\xe7\x6f\x24\xfe\xd7\xef\x0b\x23\x92\x14\xf1\x1a\x9b\x37\xfc\x73\xed\xca\x87\x6b\x97\x39\x6c\x2c\xfd\x43\x9c\xfe\xa5\xd9\x36\x0e\xc9\xdf\x49\x8b\x45\xfe\x4e\x0e\x5f\xdb\x3c\x7e\x3d\x7c\xfb\xfd\x1e\x78\xd2\xb4\xae\xce\xa4\x9f\xaf\x2f\xce\x61\x85\xdb\x6e\x3f\x71\x71\x91\xb8\x8f\x57\x27\x93\x6d\x33\xea\x7b\x53\xe0\xce\xd5\xe3\xba\x2e\xd3\xd9\xba\x76\xfd\xc3\x76\x33\x3a\x7c\xfb\xb6\x03\xee\xb7\xbf\xa4\xf3\x10\xdd\xee\xcf\xb2\x62\xf6\xd2\x45\xfc\x77\x31\xc3\x66\x09\xbf\xbb\x87\xaa\xdf\xce\xc3\xbc\x28\xa7\x51\xbc\xe8\xef\xb1\xed\xf0\xfa\xbf\xbb\x87\xa7\x10\x5b\x87\x36\x51\xb6\x76\x64\xd4\xaa\xf9\xe5\x77\xf7\xf0\xeb\xf7\xcf\xd8\xd2\x79\xbf\x55\xb8\x2a\x8b\xba\xa8\x1f\x56\x0e\xea\xe2\xba\x2e\xd3\xfc\x0e\xe2\x28\xcb\xfa\x1e\xe4\x2d\x19\x8d\x46\xe4\xf0\x97\xc2\xf3\xb6\x36\xfe\x7a\xf8\x52\x2d\xe9\xbc\xf3\xea\xde\xed\xeb\x7e\xfb\x5c\xf9\x23\xc1\xce\xf0\x0a\x46\x27\xff\xe7\xc6\x3f\xbe\xf9\xa3\xb7\x3d\x55\xdb\xe1\xb7\xfd\x27\xeb\xdb\x05\x7f\xcb\xd9\xac\x67\xf5\xea\x7a\xbe\x23\x2e\x7f\x91\x00\x3e\x3d\x2a\x1f\xa9\x74\xfe\xf0\x14\xbd\x4b\x80\x46\x7b\x97\xe8\xdb\x15\x3c\xec\x76\xdc\xc3\x77\xed\xd0\x2e\x0a\xed\x57\xc7\x7b\x72\xf8\xed\x1b\x4c\x1a\x13\x2e\xa3\x7a\xf1\xf8\xd8\x31\x13\xf2\x4a\xff\x7f\x4f\xbe\x7d\xdb\x6f\xfa\x8f\x8f\x2f\xd8\x9f\x75\x7c\x94\x20\xe9\x9c\xbc\xec\xe0\xe4\xf1\xf1\xdb\xb7\x97\xc3\x38\xda\x2c\xda\xe3\xa3\xaf\x7f\x7c\xcd\x91\xfb\xcd\x7e\xb4\xbd\xf3\xc3\xc1\xae\xde\x87\x59\x9a\xff\x4e\x4a\x97\x8d\x7a\x69\x8c\xdf\x8f\x98\x68\xa3\x5e\xba\x8c\xee\xdc\x60\x95\xdf\xf5\xc8\xa2\x74\xf3\x51\xef\xb9\xc3\x51\x55\xb9\xba\x1a\xcc\xa3\x0d\x8a\x05\x82\x7f\x11\x3c\xd0\x52\x1b\x25\x22\x4e\x55\xac\x23\x9d\xcc\xcc\x3c\x14\x09\x4d\xd8\x2c\x12\x74\x96\x84\x02\x3c\x20\x7e\x93\x54\xa3\x9e\x17\xe9\xfd\x17\x6d\x60\xfa\x0b\xd3\x81\x36\x3c\x16\x4c\x18\xa9\xa5\x9e\x71\x39\xe3\x42\xcd\x42\xc5\x98\x55\x26\x4e\xa2\xc4\x3d\xb1\xc1\x8b\xec\xd9\x90\xe6\xb5\xbb\x2b\xd3\xfa\x61\xd4\xeb\x35\x06\x55\xf5\x43\xe6\xaa\x85\x73\xf5\xbf\xb0\x62\xe3\xf2\xa4\x28\x83\xd0\x45\x26\x91\x94\xc6\x34\x76\xb1\xd1\x96\x3b\x6b\x0d\x4b\xe6\x4c\x52\x23\x2c\x17\x10\x57\xd5\x7f\x47\x61\x97\xa8\x41\xa4\xe6\x31\x17\x7a\x96\x58\xad\x43\x3d\x13\x32\x99\xc7\x91\x56\x62\x3e\xe7\x74\x66\x14\xef\x74\xbe\xd9\x7e\xc8\x0f\x07\xdb\x53\xcc\x70\x56\x24\x0f\xdd\x07\xfe\x30\x2f\xf6\xb7\x02\x42\x86\x49\xba\x21\xde\xa4\x51\x6f\x19\x95\x77\x69\xfe\x9e\x50\x82\xdf\xd1\xdf\xf7\x8e\xf6\xca\x7a\xb8\xe0\x47\x3f\x47\x9b\xe8\xda\x4b\x93\x2b\x3c\xf4\x94\x2e\x19\x0e\x16\xfc\x09\xdb\xea\xe8\x32\x73\x51\xe5\x88\xf3\x69\x4b\xf6\x64\xd2\x9c\x3c\x14\xeb\x92\xdc\xbb\x19\x69\x37\x43\x52\x17\x64\x5d\x39\xd2\x1e\x86\x3e\x9e\xc0\x70\xb0\xea\x4c\x1b\x24\xe9\xc6\xbb\x30\xd8\xb7\x7a\x58\x6d\xee\x48\x73\xaa\xe9\x31\x6d\x7b\x64\xe1\xd2\xbb\x45\x3d\xea\x29\xd1\x23\x5f\x96\x59\x5e\x8d\x7a\xb8\x27\xbf\x1f\x0c\x70\x33\xbe\x17\x50\x94\x77\x03\x4e\x29\x1d\x54\x9b\xbb\xde\xd1\xf0\x8e\xcc\xd3\x2c\x1b\xf5\xfe\x27\x64\xe1\x87\xb1\xed\xf9\xd7\xa0\x5c\x63\x08\xdc\xc6\xe5\x45\x92\xf4\x8e\x86\xab\xa8\x5e\x90\x64\xd4\x3b\xe3\x1a\xa8\xb1\x44\x70\x60\x3c\x52\xa0\xac\x26\xcd\x93\x12\x46\x18\xd2\xc6\x04\x0a\x54\x18\x36\x74\xfb\xa4\x38\x1f\x6c\x47\xf4\x99\x30\x40\x69\x48\x78\x08\x82\xdb\x88\x83\xd2\xc4\x3f\x1a\x14\x24\x83\xed\xa0\x62\xed\xb3\xc1\xe8\x78\xcf\xa4\x86\x90\x69\x22\x18\x68\x1d\xbe\xc0\x00\xaa\x58\x00\x9c\xc5\x01\x50\x6e\x81\x6a\xdd\x10\x4c\x04\x38\x05\x9c\x9d\x49\x09\xca\x5a\xc2\x15\x50\xdd\x18\xa1\x48\xf3\xdc\xaa\xd2\x86\x07\x10\x86\xdc\x5b\x60\xdb\x67\x33\x09\x8c\xf2\x80\x83\x95\x8d\x8c\x6c\x9f\x7e\x92\x48\xd0\x46\x83\xd1\x32\x06\x6a\x38\xfa\x08\xd4\xa2\x9d\x06\x28\x37\x84\x45\x1c\xa4\x16\xa4\x79\x36\x78\x0c\x42\x8e\x50\xd4\x88\x33\x25\x20\x14\x1c\x3d\x93\x94\xa3\x61\xd2\x90\xe6\xb9\x35\x2c\x6c\x58\x9b\x00\x85\xed\x73\x3b\x49\xb5\x44\x96\xc6\x9b\xa7\xa2\x84\x43\x28\x2d\xf2\x18\x3f\xde\x3e\xb6\x73\x8c\xa3\x93\x86\x69\xd0\x5a\xe2\x7f\x3f\x43\x31\x62\xc0\xb9\x3d\x53\x0c\x2c\xca\x28\x60\x54\xbc\xb2\x6c\x8c\x22\x76\x28\x55\x0c\x54\x48\xe0\xcc\x02\x95\x02\xa4\x08\xd1\x6f\xd0\xca\xbe\xea\x0d\x13\x68\x2a\xb7\xe6\x4c\x86\x10\x2a\x49\x24\x05\xc6\x5e\x2a\x00\xc1\x64\xc0\x80\x0a\xe3\x57\x15\x04\x2e\x2a\xe3\x16\x0c\x67\x01\x4e\x12\x3f\x79\x26\x2d\x84\x46\x12\xa6\xc1\x86\xaf\xa0\x84\x26\x10\x20\xad\x89\x81\x6b\x09\x52\x6a\x10\x46\x61\xbc\x40\x30\x43\x18\x48\xf3\x34\x9d\x9a\xe5\xe1\x16\xcd\xa6\xd4\xf6\x06\x4f\xeb\x41\x71\x4d\x14\x07\x4d\x45\x1c\x30\x09\x22\x14\x84\x06\x58\x27\x3a\x60\x0c\x94\x36\xed\x0b\x57\x60\x85\x9e\x80\xd4\x9a\x30\x0e\x32\xb4\xf8\xc3\x04\x2e\x36\x23\x0d\x10\x92\x11\x57\x10\x0a\x4d\xda\x9f\x66\x6d\x98\x17\x26\x0a\x04\x35\x59\x20\x80\x69\x43\x24\x30\x66\xc6\x9c\x42\xa8\x39\x69\x7f\x68\xc3\x6f\x40\x50\x49\x2c\x70\x31\x61\x14\x58\x28\x09\x63\x60\x98\x20\x0a\x0c\x61\x16\xb0\x3a\x0d\x93\xa8\xd5\x68\x81\xd1\x64\x92\x18\xb0\x9a\x13\x09\xd2\xa2\x3a\xaa\x50\x46\x85\xc8\xae\x84\x8c\x5e\xd3\xc3\x19\xd8\x10\x17\x90\x9b\x0c\x6d\xb2\x68\x13\x17\xde\x03\xcb\x48\xfb\xd3\x46\xb0\xf3\x80\x7d\x7d\x12\x42\xcd\x88\xa0\xc0\xd4\x27\x66\x30\x39\x63\x1a\xc8\x46\x13\x16\x57\x60\xc0\x2a\x12\x82\x0c\x5b\x92\x83\xb4\x98\x96\x0a\xa8\xb4\x20\xb8\x26\x06\xb8\xe2\x60\x43\x95\x05\xa0\x34\x16\x9f\x14\x22\x46\xab\xb4\x0c\x40\x52\x1d\x48\xd0\xd6\x06\xa0\x43\x16\x68\x50\xa2\xa1\x30\x05\x34\x41\x65\x9a\x5a\xc2\x80\xf3\x96\x94\x98\xc6\x1b\x46\x41\x32\x1e\x53\x34\xc3\xe2\x3c\xe3\xbc\x99\xc2\xea\xa6\xa6\xa5\x19\x58\x89\x25\x2c\x41\x68\x13\x00\xb7\x92\x74\x2a\x32\x50\x4d\x3c\x1b\x73\x38\x95\xa0\x4c\x20\xc1\x68\x8b\xe6\x06\x9d\xe1\x13\x2d\x7c\x23\x11\x96\x60\x30\x14\x30\xc6\xc9\x36\x2c\x5f\x97\x42\x83\xa5\x58\x49\x31\xea\xa1\xda\x06\x0c\x2c\xe5\xb8\x5e\x2c\xb0\x20\x43\xd1\x90\x1a\x74\x48\xa8\x1f\x91\x81\x00\x23\x79\x4b\xe3\xec\x26\x50\x40\x29\xf7\xd1\xa5\x1a\xd3\xdc\x52\xe1\x67\xc8\x8e\x89\x34\x10\xa4\x01\x45\x08\x41\x76\x0a\x36\x88\x20\xbe\x2e\x03\x09\xd6\x62\x97\x67\x5a\xc5\x14\x3d\x13\x06\xcb\x92\x72\x0c\x2a\xd3\x81\x00\x4d\x75\x43\x57\xcd\x0b\xc6\xcf\xb6\xa4\x1f\xdf\x28\xec\x8a\x3e\xbc\x5c\xa0\x35\x94\x72\x3f\x63\xc8\x8e\xcb\x54\x0d\x12\x0a\x93\x1d\xa8\x41\x5f\x04\xb7\x5f\x97\x5c\x81\x09\xb1\x8a\x94\xb6\x8b\xc6\xac\x4f\x5c\xf8\xc6\x4b\xd1\x22\x65\x02\x90\xd8\x32\x94\x45\x14\xa5\x45\x47\x73\xca\x08\x0d\x04\x08\xc4\x10\x1c\xa3\xe3\x97\x59\x6b\xbb\x61\xe8\xb9\xd9\x02\x32\x03\xc6\xaa\x85\x00\xc3\x75\xe6\x8b\x03\x99\x62\x0e\xd2\x43\x73\x8e\x7b\x9c\xf0\x3d\xd5\xd7\x10\xdb\xd2\x02\xb8\x54\x3e\x37\x24\xc5\xde\x21\x98\x6d\x69\x85\x6d\x74\x83\xcd\x42\x99\xaf\x4b\x66\x81\xeb\x40\x81\x31\x2a\xa6\x44\x80\xe5\x68\x26\xd3\x9c\x68\x60\x96\x07\x06\xa8\xda\xd2\x1c\xa8\x15\x3e\x6b\x43\x8e\xce\x59\x1b\x68\x30\x9e\x5f\x84\x19\x68\x0c\xb2\xb1\x3c\x66\xa0\xb1\xf1\x5a\x8c\x9b\xa5\x58\x39\x12\xb5\x32\x4f\xf8\xd2\xc0\xf2\xc5\x5a\xf2\x20\x2d\xc9\x20\xf4\xdd\xcb\x57\x03\x70\x1c\xb0\x02\x63\x4e\x55\xe0\x3b\x5c\x93\xbd\x7e\x41\xfc\x1a\x60\xf1\xcb\x96\xd2\xc0\xb9\xf0\x31\x0d\x2d\x2e\xb8\xe1\x02\x9d\x12\x0a\x2b\x34\xe4\x2d\xed\xf3\xce\x07\x85\x69\x0d\x5c\x7a\xb3\x94\x2f\x17\xb4\x04\x93\x00\xf7\x8f\x80\xe1\x8b\x2f\xa8\x00\x8b\x43\x63\x6d\x87\xa8\x49\xdb\x86\xc4\xae\x23\xb1\xd3\xa2\xe5\x3e\x10\x4d\x6b\x60\x60\x28\x6e\xd2\xb8\xd0\x06\x18\xf7\x03\xb8\x45\x1a\xbf\x49\xa3\x3e\x29\x43\x6c\xf3\x1a\xe9\x10\x57\x86\x85\xba\x21\x35\x6e\x09\x5f\x97\x7e\x61\xb0\x99\x53\x21\x16\x3e\x0b\x30\x27\xac\x88\x11\x96\x2a\x03\x52\x32\xaf\x00\xfd\x54\x5a\x74\x34\xa7\xd8\x1a\x7d\x56\x05\x60\x04\xf6\x5b\x6a\x31\x5e\x5a\xdb\x6d\x22\x21\x9e\xdd\xb0\x10\x8b\x7a\x11\x34\x69\x85\xae\x33\xcf\x66\xb0\x55\x48\x29\x9b\x8e\xa4\x40\xf1\xd0\x6f\xf5\x4d\x81\xf2\x96\xc6\xd4\x6a\x9a\x97\xa4\x26\xf0\xa9\xd5\xd2\x3e\xb5\x5a\x55\x5f\xcf\xb0\x25\x0b\x03\x2a\x14\x4d\x36\xdb\x4f\x21\x86\xfa\x14\xc7\xc3\x0d\xb7\x38\xe3\xbb\xf1\xe0\xee\x68\x88\x5f\x84\x7b\xf7\x23\xa4\x2a\xe3\x7f\xf5\xfd\xaf\x66\xa1\x74\x33\x1d\x31\x36\x9b\xe3\xe9\x87\x71\x69\x22\x21\xb9\x73\x92\x26\xb3\xb9\x85\xdf\xaa\xde\xd1\xfe\x01\xec\xb5\xeb\x97\x68\xb5\x72\x79\xd2\x7e\x17\xef\xdd\xc0\x54\x65\xfc\xec\xd6\xa5\xda\xf2\x74\xf7\x2e\x71\xe9\xa2\xda\x4d\x33\x87\x6f\xfd\xc3\x86\x61\x77\x9d\xd2\x4a\x40\x55\xc6\x64\x84\x0e\x6d\x27\x3a\x00\x3c\x10\x40\x63\xc1\x64\x91\x66\x49\xbf\x15\x79\x72\x6e\x4e\xe7\xfd\xef\xfa\x87\x37\xee\x4b\x7d\xec\x2f\x60\xca\x43\xfc\x7e\xbf\x4f\xf3\xa4\xb8\x7f\xbb\xb3\x71\xdf\x91\xfe\x8b\x43\x73\x1b\x39\x7f\x82\x4f\xf3\xbb\x20\xcd\x13\xf7\xc5\x55\x81\x51\xce\x45\x4c\xcf\xb8\x0a\x0d\xd3\xc9\x4c\xce\x13\xa6\xb9\x73\xdc\x8a\x84\x47\x4e\xc1\x6f\xd5\xce\xa1\xbf\xa4\x62\x4f\x72\xcf\x8f\xc6\x6c\x98\x5c\x5f\x93\xbf\xfd\x8d\xec\xde\xc0\x55\x71\xb4\x72\x7f\xd5\x9f\xb8\xaa\x5a\xc9\x40\x0a\x2e\x94\x49\x84\x0a\x9d\x0e\x2d\x8d\x22\x17\x1b\xca\x92\x79\x34\x73\x73\x21\x67\xd1\x33\x7b\x9e\x1c\xcc\xff\x8d\x9c\xdb\x1d\x01\xd9\x2c\xb4\x32\xe2\x49\x62\xac\x0a\xa5\x9a\x19\x16\x19\xa5\x66\xd6\x32\x21\x63\x1d\xcb\x17\x69\xf7\x24\xe7\x26\x45\xe2\xce\xd2\xb2\x2c\x4a\x58\xfa\xcb\x94\x53\x32\xea\x7c\x2e\xdd\x2a\x8b\x62\xf7\x7e\x97\x86\xf9\x3b\x82\x6c\xfb\x77\x4c\xd5\x7d\x5a\xc7\x8b\xfe\xf3\x61\x42\x62\x3c\xec\x1d\xfe\x16\x6d\xa2\x36\x13\xdf\x3f\xb9\x1a\x2a\x5d\xbd\x2e\xf3\x97\xf7\x29\x9d\x83\x89\x5b\x7a\xc3\x06\x08\x3d\xd8\xe1\xec\x91\x41\x24\x63\x9a\x68\xcb\xa5\x74\xda\x19\x39\x0f\x39\x57\x96\x32\xa7\xe6\x61\x62\xb8\x74\x18\xe5\xef\x5f\xd8\x54\xae\x67\x0f\xff\x99\x35\x88\xe0\x1f\x81\x66\x92\xb3\x28\x49\xd4\x1c\x37\xda\x79\xcc\x35\x9b\x3b\x4d\x65\x18\x8b\x59\xa2\x12\xf3\xba\x05\x0f\xd1\x32\xfb\xcf\x2c\x40\x04\xff\x08\x14\x0d\xd5\x5c\x08\xa9\x66\x31\x97\x5c\xba\xd0\x24\x4e\x85\x51\x42\x69\xe4\x98\x36\xd1\x53\x0b\x9e\x5e\x0a\x3d\x3e\xbf\x14\x6a\xee\x09\xfc\xd9\x3f\x4d\xb6\x7f\x04\x9d\x45\x55\x1a\x07\x49\x59\xac\x92\xe2\x3e\x0f\xee\x8b\x72\xb9\x28\x32\x87\x69\xd5\x1d\xc4\x9b\xcb\x84\xe1\xa0\xf9\x9b\xea\xff\x07\x00\x00\xff\xff\xf9\x74\xe1\x7c\x64\x1d\x00\x00") +var _web_uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x59\x7b\x73\xdb\xb6\xb2\xff\x3f\x9f\x02\xd5\xbd\x3e\x76\xe6\x84\x2b\xbc\x01\xa6\x96\x67\x14\x59\x6e\xdd\xf1\xeb\x5a\x76\xef\xc9\x74\x3a\x1e\x8a\x84\x2c\xb6\x94\xa8\x43\x52\x72\x9c\x4c\xbe\xfb\x9d\x05\x29\x8a\x7e\x34\xbd\x9d\xd3\x4e\x03\x2d\x81\xc5\xee\x6f\x17\xbb\x8b\x87\x0f\xbf\x3b\xbe\x1c\xdd\x7c\xbc\x1a\x93\x79\xb5\xc8\x8e\xde\x1c\xe2\x0f\xc9\xa2\xe5\xfd\xa0\xe7\x96\x3d\x12\x67\x51\x59\x0e\x7a\x6e\x31\x75\x45\x90\xe5\x51\x92\x2e\xef\x7b\x47\x6f\x08\x39\x9c\xbb\x28\x41\x82\x90\xc3\x85\xab\x22\x12\xcf\xa3\xa2\x74\xd5\xa0\xb7\xae\x66\x81\xed\x75\x87\xe6\x55\xb5\x0a\xdc\xbf\xd7\xe9\x66\xd0\xfb\x57\x70\x3b\x0c\x46\xf9\x62\x15\x55\xe9\x34\x73\x3d\x12\xe7\xcb\xca\x2d\xab\x41\xef\x74\x3c\x70\xc9\xbd\xdb\xce\xac\xd2\x2a\x73\x47\xa3\x7c\x59\xae\x33\x32\x7d\x24\x3f\x46\xe5\x3c\x1d\xe5\xc5\xea\xb0\x5f\x0f\x75\x14\x2c\xa3\x85\x1b\xf4\x12\x57\xc6\x45\xba\xaa\xd2\x7c\xd9\x11\xdb\x7b\xc9\xb8\x49\xdd\xc3\x2a\x2f\xaa\x0e\xd7\x43\x9a\x54\xf3\x41\xe2\x36\x69\xec\x02\xff\xf1\x8e\xa4\xcb\xb4\x4a\xa3\x2c\x28\xe3\x28\x73\x03\xd6\x08\xaa\x9b\xae\xb8\xd8\x63\x0c\xd6\x69\x3f\xce\x97\xb3\xf4\xbe\xef\x96\x9b\xb4\xc8\x97\x0b\xb7\xec\xaa\xd8\x33\x1f\xf6\x38\x5f\xe4\xc9\x3a\x73\x57\x85\x9b\xa5\x9f\xf6\x38\xdf\x13\xc3\x3d\xce\x5b\x09\xd8\xc3\x47\x7b\x9c\x77\x44\xb4\x5c\xab\x22\x4f\xd6\x31\x9a\xd7\xb2\x15\x79\x5e\xdd\x5e\x9f\xb5\x2c\x7b\xfc\x04\x85\x9c\xb4\x0c\x59\x1e\x47\x38\xe3\xe6\x71\xe5\x5a\xae\x68\x5d\xe5\x2d\x47\x95\x17\x69\xda\x0c\x99\x0f\x7b\xe6\xb8\xee\x1e\xe3\x8a\x8f\x2f\x7e\xde\x8d\x70\x7e\x32\x1e\xde\xdc\x5e\x8f\x27\xaf\x70\xff\xeb\x66\x7c\x71\x7c\x77\x75\x7d\x79\x73\x89\xd1\x34\xe9\x4e\x3b\x8e\xaa\x46\xf7\x2c\xca\x4a\xd7\x4e\xba\x1b\x5e\x5d\x9d\x9d\x8e\x86\x37\xa7\x97\x17\x77\x37\xe3\xf3\xab\xb3\xe1\xcd\xf8\xee\x7f\xaf\x87\x57\x57\xe3\xeb\xee\x84\x9a\xfb\x78\x7c\x32\xbc\x3d\xbb\xb9\x1b\x4e\x3e\x5e\x8c\xee\x2e\x3f\x4c\xc6\xd7\x3f\x8f\xaf\x1b\x4d\x55\xb1\xde\xf2\xfd\xf4\x3f\xb7\xe3\xeb\x8f\x77\xa7\x17\x37\xe3\x1f\xae\xbd\xf0\x97\xb2\x5a\x6d\x97\x17\x67\x1f\xef\x7e\x38\x3b\x3d\x3f\x1f\x5f\xdf\x8d\x2e\xcf\xaf\x2e\x2f\xc6\x17\x37\x5d\xa1\x5b\xb4\xc3\xab\xab\xae\x51\xb8\xf4\xdf\x58\xbf\x8d\x2b\xca\x66\xa1\x3c\x07\x07\x0e\x74\x8f\x7f\xb0\x7a\xea\xb4\x64\x31\x0e\x6c\x25\x17\xae\x4c\x3f\xbb\x89\x2b\x30\xf8\x8e\xdd\x2c\x5a\x67\x55\xd9\xd5\x95\x2e\x7f\x73\x7e\xdd\x4f\xa2\x18\x97\xcb\x6d\x47\x15\x8e\x62\x34\xb7\x7a\x31\xda\x8a\x3c\xcb\x5c\xd1\xe9\x5a\xac\xf2\x65\x13\x48\xea\xb8\x55\x3b\xba\xbc\x98\xdc\x9e\xdd\xdd\x9e\xde\x1d\x9f\x4e\x86\x1f\xce\xc6\x77\xd7\xe3\xe1\xd9\xcd\xe9\xf9\xf8\x85\xbf\x5e\xb2\x0e\x2f\x46\x3f\x5e\x5e\xdf\x4d\xc6\x67\xe3\xd1\xab\x2e\x6e\xa6\x8c\x2e\xaf\x3e\x5e\x9f\xfe\xf0\xe3\xcd\xdd\xc7\xf1\xf0\x7a\xe7\x0e\xca\x69\x0b\xb0\x61\xfd\xe1\xf4\xe6\x6e\xf2\xe3\xb0\xe5\xd9\xba\x4a\x3c\x67\xc4\x55\x6f\x55\xee\x71\xce\xc0\x82\x79\xce\xf4\xe1\xf4\x62\x78\xfd\xf1\x0e\x83\xb1\x65\xcc\xcb\xf2\x39\xdb\x70\x74\x36\xb9\x1b\x5f\xa0\x4d\xc7\xbb\x2c\xc2\xc8\xfe\xb0\xc7\x69\x3a\xdb\xe3\x14\x86\xa3\xb3\x72\xbc\x8c\xa6\x99\x4b\xf6\x38\x45\xff\xe1\xff\xc8\xf2\x64\xa8\xd3\xbf\xc7\xa9\xf3\x9e\x68\xb8\x9b\xb8\xdf\x0e\x2d\x3b\x72\x9e\xe1\xb9\x98\x5c\x0d\x47\xe3\x3f\x85\x74\x11\x2d\x5c\xb9\x8a\x62\xf7\x47\xc0\x5e\x32\xfc\x2d\xf0\x26\x93\xcb\x3f\x83\x36\x99\x5c\xfe\x01\xa6\xce\xc8\xdf\x02\xe6\xc7\xcb\xf3\xf1\x5d\xb7\xfa\xe1\x3e\x53\x7a\xf2\x64\x8f\x9f\x3c\x3c\x3c\x40\x9d\x98\x90\xe6\xcf\xe7\x5e\x8f\xaf\x2e\xef\x4e\x27\x93\xdb\xf1\xe4\x1b\x22\xee\xd3\x6a\xbe\x9e\x42\x9c\x2f\xf6\xf8\xc9\x1c\x37\xa0\x38\x2f\x56\x7b\xfc\xa4\x96\xbb\xc7\x4f\xd2\xb2\x5c\x63\x3a\x9e\x2c\x31\x09\x4f\xe2\x79\x9e\x97\xee\xb9\xb2\xe3\xcb\xd1\xb7\xb4\x3c\x03\x7a\x92\xe4\xf1\x8b\x38\xf5\x22\xce\xc6\xc3\xeb\x8b\x6f\x08\xca\x5c\x54\x2c\xa1\xc5\x59\xe3\x7e\x45\xce\xf0\xea\xf4\x2f\xc0\x89\x56\xe9\x73\x29\xbb\xac\xfe\xb6\x98\xd7\xa1\x4c\x8b\xfc\xa1\x74\x45\x3a\x7b\xec\x16\xb9\xca\x95\xdb\xaa\xf7\xa4\xee\xba\x4f\xb8\x55\x0f\x57\xab\x2c\xad\xb7\xb2\x1f\xb2\x7c\x1a\x65\x4f\x37\x94\x1e\xe9\x1f\xbd\xc1\x53\xc9\x77\x41\x40\x9e\x96\x89\xf7\xc4\xd7\x07\x12\x04\xfe\xd8\x52\x1f\x11\xea\xad\x7c\x13\x15\xa4\x74\xd5\xc8\xef\xda\x64\x40\x66\xeb\xa5\x2f\xb3\x07\xd1\x6a\x85\x09\xf4\x8e\xd4\x1b\xfa\x5b\xf2\xc5\xf3\xd7\x33\xfe\xdb\x6f\xfd\x03\x92\xe4\xf1\x1a\xf7\x67\xf8\xf7\xda\x15\x8f\x13\x97\x39\x2c\xce\x07\xfb\x38\xfc\x4b\x7d\x32\xd8\x27\xff\x24\x8d\x2c\xf2\x4f\xb2\xff\xda\xf9\xe0\xd7\xfd\xb7\xdf\x77\x84\x27\x75\xf9\x6f\x21\xfd\x34\xb9\xbc\x80\x15\x9e\xac\x0e\x12\x17\xe7\x89\xbb\xbd\x3e\x1d\x6d\x0b\xfa\x81\x87\x02\xf7\xae\x1a\x56\x55\x91\x4e\xd7\x95\x3b\xd8\x6f\xce\x1b\xfb\x6f\xdf\xb6\x82\x0f\x9a\x5f\xd2\x5a\x88\x66\x1f\x4c\xb3\x7c\xfa\xd2\x44\xfc\xef\x72\x8a\x1b\x0e\xfc\xee\x1e\xcb\x83\x66\x1c\x66\x79\x31\x8e\xe2\xf9\x41\x87\x6d\x27\xef\xe0\x77\xf7\xf8\x54\xc4\xd6\xa0\x4d\x94\xad\x1d\x19\x34\x6a\x7e\xf9\xdd\x3d\xfe\xfa\xfd\x33\xb6\x74\x76\xd0\x28\x5c\x15\x79\x95\x57\x8f\x2b\x07\x55\x3e\xa9\x8a\x74\x79\x0f\x71\x94\x65\x07\x5e\xc8\x5b\x32\x18\x0c\xc8\xfe\x2f\xb9\xe7\x6d\x30\xfe\xba\xff\x52\x2d\x69\xad\xf3\xea\xde\x75\x75\xbf\x7d\xae\xfc\x2b\xc1\xea\xf3\x8a\x8c\x76\xfe\xb7\xc1\x7f\x7d\xf3\x47\x5f\x1d\x55\xdb\xee\xb7\x07\x4f\xd6\xb7\x75\xfe\x96\xb3\x5e\xcf\xf2\xd5\xf5\x7c\x47\xdc\xf2\x45\x00\xf8\xf0\x28\xbd\xa7\xd2\xd9\xe3\x53\xe9\x6d\x00\xd4\xda\xdb\x40\xdf\xae\xe0\x7e\x7b\x6a\xd9\x7f\xd7\x74\xed\xbc\xd0\x1c\x2c\xdf\x93\xfd\x2f\x5f\x60\x54\x43\xb8\x8a\xaa\xf9\xd7\xaf\x2d\x33\x21\xaf\xec\xa1\xef\xc9\x97\x2f\x24\x9d\x91\xee\xce\x48\xbe\x7e\xfd\xf2\xa5\xdb\x81\xdf\xb5\xdb\xbf\x7e\xf5\x19\x8c\x9f\x4b\xe4\x7b\x21\xfb\xd9\x7e\xd8\x8a\x7f\xb1\xbf\xd5\x4a\x5e\x74\xff\x05\x55\x9d\xbd\xad\x55\xb3\xdb\xb2\x6a\xf9\xbb\xef\x3f\x16\xfc\xa6\xbb\xe6\x7e\x09\x0e\xfb\xbb\xaa\x73\x98\xa5\xcb\xdf\x49\xe1\xb2\x41\x2f\x8d\xf1\xa2\x82\xe1\x3e\xe8\xa5\x8b\xe8\xde\xf5\x57\xcb\xfb\x1e\x99\x17\x6e\x36\xe8\x3d\x77\x7b\x54\x96\xae\x2a\xfb\xb3\x68\x83\xd3\x02\xc1\x3f\x09\x1e\x68\xa9\x8d\x12\x11\xa7\x2a\xd6\x91\x4e\xa6\x66\x16\x8a\x84\x26\x6c\x1a\x09\x3a\x4d\x42\x01\x5e\x20\x9e\x2e\xcb\x41\xcf\x4f\xe9\xfd\x8d\x18\x98\xfe\xc4\x74\xa0\x0d\x8f\x05\x13\x46\x6a\xa9\xa7\x5c\x4e\xb9\x50\xd3\x50\x31\x66\x95\x89\x93\x28\x71\x4f\x30\xf8\x29\x1d\x0c\xe9\xb2\x72\xf7\x45\x5a\x3d\x0e\x7a\xbd\x1a\x50\x59\x3d\x66\xae\x9c\x3b\x57\xfd\x09\x8a\x8d\x5b\x26\x79\x11\x84\x21\x97\x5a\x4d\xed\x94\x0b\x3a\xb3\x61\x22\xa3\x24\x76\x6a\x46\x99\x56\x52\xc4\x32\x81\xb8\x2c\xff\x1e\x85\x6d\xba\x04\xa1\x71\xb1\x8d\x24\x37\x36\x4e\x92\x99\xe4\x5a\xcf\x66\x2a\x8a\xa4\x9a\xce\xac\x9c\xe9\xb0\xd5\xf9\x66\x7b\x63\x3c\xec\x6f\xaf\xcb\x87\xd3\x3c\x79\x6c\x6f\x92\x87\xcb\xbc\xbb\x21\x11\x72\x98\xa4\x1b\xe2\x21\x0d\x7a\x8b\xa8\xb8\x4f\x97\xef\x09\x25\x78\x61\xfb\xbe\x77\xd4\x29\x2e\x87\x73\x7e\xf4\x53\xb4\x89\x26\x7e\x36\xb9\xc6\xdb\x75\xe1\x92\xc3\xfe\x9c\x3f\x61\x5b\x1d\x5d\x65\x2e\x2a\x1d\x71\x3e\x6c\x49\x67\x4e\xba\x24\x8f\xf9\xba\x20\x0f\x6e\x4a\x9a\x2d\x99\x54\x39\x59\x97\x8e\x34\xb7\xee\xdb\x53\x38\xec\xaf\x5a\x68\xfd\x24\xdd\x78\x13\xfa\x5d\xd4\x87\xe5\xe6\x9e\xd4\xd7\xe7\x1e\xd3\xb6\x47\xe6\x2e\xbd\x9f\x57\x83\x9e\x12\x3d\xf2\x69\x91\x2d\xcb\x41\x0f\x4f\x06\xef\xfb\x7d\x3c\x12\x3c\x08\xc8\x8b\xfb\x3e\xa7\x94\xf6\xcb\xcd\x7d\xef\xe8\xf0\x9e\xcc\xd2\x2c\x1b\xf4\xfe\x2b\x64\xe1\xc9\xd0\xf6\xfc\x67\x50\xac\xd1\x05\x6e\xe3\x96\x79\x92\xf4\x8e\x0e\x57\x51\x35\x27\xc9\xa0\x77\xce\x35\x50\x63\x89\xe0\xc0\x78\xa4\x40\x59\x4d\xea\x96\x12\x46\x18\xd2\xc6\x04\x0a\x54\x18\xd6\x74\xd3\x52\x1c\x0f\xb6\x3d\xfa\x5c\x18\xa0\x34\x24\x3c\x04\xc1\x6d\xc4\x41\x69\xe2\x9b\x5a\x0a\x92\xc1\xb6\x53\xb1\xa6\xad\x65\xb4\xbc\xe7\x52\x43\xc8\x34\x11\x0c\xb4\x0e\x5f\xc8\x00\xaa\x58\x00\x9c\xc5\x01\x50\x6e\x81\x6a\x5d\x13\x4c\x04\x38\x04\x9c\x9d\x4b\x09\xca\x5a\xc2\x15\x50\x5d\x83\x50\xa4\x6e\xb7\xaa\xb4\xe1\x01\x84\x21\xf7\x08\x6c\xd3\xd6\x83\xc0\x28\x0f\x38\x58\x59\xcf\x91\x4d\xeb\x07\x89\x04\x6d\x34\x18\x2d\x63\xa0\x86\xa3\x8d\x40\x2d\xe2\x34\x40\xb9\x21\x2c\xe2\x20\xb5\x20\x75\x5b\xcb\x63\x10\x72\x14\x45\x8d\x38\x57\x02\x42\xc1\xd1\x32\x49\x39\x02\x93\x86\xd4\xed\x16\x58\x58\xb3\xd6\x0e\x0a\x9b\x76\x3b\x48\xb5\x44\x96\xda\x9a\xa7\x53\x09\x87\x50\x5a\xe4\x31\xbe\xbf\x69\xb6\x63\x8c\xa3\x91\x86\x69\xd0\x5a\xe2\x3f\x3f\x42\xd1\x63\xc0\xb9\x3d\x57\x0c\x2c\xce\x51\xc0\xa8\x78\x65\xd9\x18\x45\xd9\xa1\x54\x31\x50\x21\x81\x33\x0b\x54\x0a\x90\x22\x44\xbb\x41\x2b\xfb\xaa\x35\x4c\x20\x54\x6e\xcd\xb9\x0c\x21\x54\x92\x48\x0a\x8c\xbd\x54\x00\x82\xc9\x80\x01\x15\xc6\xaf\x2a\x08\x5c\x54\xc6\x2d\x18\xce\x02\x1c\x24\x7e\xf0\x5c\x5a\x08\x8d\x24\x4c\x83\x0d\x5f\x91\x12\x9a\x40\x80\xb4\x26\x06\xae\x25\x48\xa9\x41\x18\x85\xfe\x02\xc1\x0c\x61\x20\xcd\xd3\x70\xaa\x97\x87\x5b\x84\x4d\xa9\xed\xf5\x9f\xe6\x83\xe2\x9a\x28\x0e\x9a\x8a\x38\x60\x12\x44\x28\x08\x0d\x30\x4f\x74\xc0\x18\x28\x6d\x9a\x0f\xae\xc0\x0a\x3d\x02\xa9\x35\x61\x1c\x64\x68\xf1\x87\x09\x5c\x6c\x46\x6a\x41\x48\x46\x5c\x41\x28\x34\x69\x7e\xea\xb5\x61\x7e\x32\x51\x20\xa8\xc9\x02\x01\x4c\x1b\x22\x81\x31\x33\xe4\x14\x42\xcd\x49\xf3\x43\x6b\x7e\x03\x82\x4a\x62\x81\x8b\x11\xa3\xc0\x42\x49\x18\x03\xc3\x04\x51\x60\x08\xb3\x80\xd9\x69\x98\x44\xad\x46\x0b\xf4\x26\x93\xc4\x80\xd5\x9c\x48\x90\x16\xd5\x51\x85\x73\x54\x88\xec\x4a\xc8\xe8\x35\x3d\x78\xf9\x0f\x71\x01\xb9\xc9\x10\x93\x45\x4c\x5c\x78\x0b\x2c\x23\xcd\x4f\xe3\xc1\xd6\x02\xf6\xf9\x89\x0b\x35\x23\x82\x02\x53\x3f\x33\x83\xc1\x19\xd3\x40\xd6\x9a\x30\xb9\x02\x03\x56\x91\x10\x64\xd8\x90\x1c\xa4\xc5\xb0\x54\x40\xa5\x05\xc1\x35\x31\xc0\x15\x07\x1b\xaa\x2c\x00\xa5\x31\xf9\xa4\x10\x31\xa2\xd2\x32\x00\x49\x75\x20\x41\x5b\x1b\x80\x0e\x59\xa0\x41\x89\x9a\xc2\x10\xd0\x04\x95\x69\x6a\x09\x03\xce\x1b\x52\x62\x18\x6f\x18\x05\xc9\x78\x4c\x11\x86\xc5\x71\xc6\x79\x3d\x84\xd9\x4d\x4d\x43\x33\xb0\x12\x53\x58\x82\xd0\x26\x00\x6e\x25\x69\x55\x64\xa0\x6a\x7f\xd6\x70\x38\x95\xa0\x4c\x20\xc1\x68\x8b\x70\x83\x16\xf8\x48\x0b\x5f\x48\x84\x25\xe8\x0c\x05\x8c\x71\xb2\x75\xcb\xe7\x85\xd0\x60\x29\x66\x52\x8c\x7a\xa8\xb6\x01\x03\x4b\x39\xae\x17\x0b\x2c\xc8\x50\xd4\xa4\x06\x1d\x12\xea\x7b\x64\x20\xc0\x48\xde\xd0\x38\xba\x09\x14\x50\xca\xbd\x77\xa9\xc6\x30\xb7\x54\xf8\x11\xb2\x63\x22\xb5\x08\x52\x0b\x45\x11\x82\xec\x14\x6c\x50\x82\xf8\xbc\x08\x24\x58\x8b\x55\x9e\x69\x15\x53\xb4\x4c\x18\x4c\x4b\xca\xd1\xa9\x4c\x07\x02\x34\xd5\x35\x5d\xd6\x1f\xe8\x3f\xdb\x90\xbe\x7f\xa3\xb0\x2a\x7a\xf7\x72\x81\x68\x28\xe5\x7e\xc4\x90\x1d\x97\x29\x6b\x49\x38\x99\xec\x84\x1a\xb4\x45\x70\xfb\x79\xc1\x15\x98\x10\xb3\x48\x69\x3b\xaf\x61\xfd\xcc\x85\x2f\xbc\x14\x11\x29\x13\x80\xc4\x92\xa1\x2c\x4a\x51\x5a\xb4\x34\xa7\x8c\xd0\x40\x80\x40\x19\x82\xa3\x77\xfc\x32\x6b\x6d\x37\x0c\x2d\x37\x5b\x81\xcc\x80\xb1\x6a\x2e\xc0\x70\x9d\xf9\xe4\x40\xa6\x98\x83\xf4\xa2\x39\xc7\x3d\x4e\xf8\x9a\xea\x73\x88\x6d\x69\x01\x5c\x2a\x1f\x1b\x92\x62\xed\x10\xcc\x36\xb4\xc2\x32\xba\xc1\x62\xa1\xcc\xe7\x05\xb3\xc0\x75\xa0\xc0\x18\x15\x53\x22\xc0\x72\x84\xc9\x34\x27\x1a\x98\xe5\x81\x01\xaa\xb6\x34\x07\x6a\x85\x8f\xda\x90\xa3\x71\xd6\x06\x1a\x8c\xe7\x17\x61\x06\x1a\x9d\x6c\x2c\x8f\x19\x68\x2c\xbc\x16\xfd\x66\x29\x66\x8e\x44\xad\xcc\x13\x3e\x35\x30\x7d\x31\x97\xbc\x90\x86\x64\x10\xfa\xea\xe5\xb3\x01\x38\x76\x58\x81\x3e\xa7\x2a\xf0\x15\xae\x8e\x5e\xbf\x20\x7e\x0d\x30\xf9\x65\x43\x69\xe0\x5c\x78\x9f\x86\x16\x17\xdc\x70\x81\x46\x09\x85\x19\x1a\xf2\x86\xf6\x71\xe7\x9d\xc2\xb4\x06\x2e\x3d\x2c\xe5\xd3\x05\x91\x60\x10\xe0\xfe\x11\x30\xfc\xf0\x09\x15\x60\x72\x68\xcc\xed\x10\x35\x69\x5b\x93\x58\x75\x24\x56\x5a\x44\xee\x1d\x51\x97\x06\x06\x86\xe2\x26\x8d\x0b\x6d\x80\x71\xdf\x81\x5b\xa4\xf1\x9b\x34\xea\x93\x32\xc4\x32\xaf\x91\x0e\x71\x65\x58\xa8\x6b\x52\xe3\x96\xf0\x79\xe1\x17\x06\x8b\x39\x15\x62\xee\xa3\x00\x63\xc2\x8a\x18\xc5\x52\x65\x40\x4a\xe6\x15\xa0\x9d\x4a\x8b\x96\xe6\x14\x4b\xa3\x8f\xaa\x00\x8c\xc0\x7a\x4b\x2d\xfa\x4b\x6b\xbb\x0d\x24\x94\x67\x37\x2c\xc4\xa4\x9e\x07\x75\x58\xa1\xe9\xcc\xb3\x19\x2c\x15\x52\xca\xba\x22\x29\x50\x3c\xf4\x5b\x7d\x9d\xa0\xbc\xa1\x31\xb4\xea\xe2\x25\xa9\x09\x7c\x68\x35\xb4\x0f\xad\x46\xd5\xe7\x73\x2c\xc9\xc2\x80\x0a\x45\x1d\xcd\xf6\xe7\x10\x5d\x7d\x86\xfd\xe1\x86\x5b\x1c\xf1\xd5\xb8\x7f\x7f\x74\x88\x27\xc2\xce\x2b\x0d\x29\x8b\xf8\xcf\xce\xff\x89\xb0\x33\x3b\xd5\x92\xc7\xb3\xd0\x0a\x2b\x13\x3a\xa3\x91\x35\x9a\x3a\xa3\xa6\x5c\x85\xf0\x5b\xd9\x3b\xea\x5e\xc0\x5e\x7b\x04\x8a\x56\x2b\xb7\x4c\x9a\x73\x71\xe7\x1d\xa8\x2c\xe2\x67\x6f\x3f\xe5\x96\xa7\x7d\xfd\x89\x0b\x17\x55\x6e\x9c\x39\xfc\x3a\xd8\xaf\x19\x76\x8f\x3a\xcd\x0c\x28\x8b\x98\x0c\xd0\xa0\xed\x40\x2b\x00\x2f\x04\x50\x23\x18\xcd\xd3\x2c\x39\x68\xa6\x3c\xb9\xbd\xa7\xb3\x83\xef\x0e\xf6\x6f\xdc\xa7\xea\xd8\x3f\x03\x15\xfb\x78\x7e\x7f\x48\x97\x49\xfe\xf0\x76\x87\xb1\x6b\xc8\xc1\x8b\xab\x7b\xe3\x39\xff\x8e\x90\x2e\xef\x83\x74\x99\xb8\x4f\xae\x0c\x8c\x72\x2e\x62\x1a\xdd\x65\x98\x4e\xa6\x72\x96\x30\xcd\x9d\xe3\x56\x24\x3c\x72\x0a\x7e\x2b\x77\x06\xfd\x25\x15\x9d\x99\x1d\x3b\x6a\xd8\x30\x9a\x4c\xc8\x3f\xfe\x41\x76\x5f\xe0\xca\x38\x5a\xb9\xbf\x6a\x4f\x5c\x96\xcd\xcc\xc0\x2a\x66\x45\x38\x15\x2e\x62\x09\x9d\x4a\x37\x95\xb1\xa1\x36\x94\x52\x27\x33\xe5\xc2\xd9\x33\x3c\x4f\x2e\xe6\xff\x8f\x98\xdb\x5d\x01\x39\x4b\xb4\x98\x52\x1e\xda\x68\x16\x73\x96\xb8\x69\x4c\x13\x65\xa4\x8b\x55\x48\x65\x38\x7d\x11\x76\x4f\x62\x6e\x94\x27\xee\x3c\x2d\x8a\xbc\x80\x85\x7f\xd2\x39\x23\x83\xd6\xe6\xc2\xad\xb2\x28\x76\xef\x77\x61\xb8\x7c\x47\x90\xad\xfb\xd2\x55\x3e\xa4\x55\x3c\x3f\x78\xde\x4d\x48\x8c\x97\xbd\xfd\xdf\xa2\x4d\xd4\x44\xe2\xfb\x27\x0f\x54\x85\xab\xd6\xc5\xf2\xe5\xab\x4e\x6b\x60\xe2\x16\x1e\x58\x1f\x45\xf7\x77\x72\x3a\x64\x60\x0c\x67\x36\x4e\x18\xd7\xd6\x45\x3a\x99\x19\x65\x8c\x62\x4c\x46\x8e\x5a\xad\xb4\x46\x2f\x7f\xff\x02\x53\xb1\x9e\x3e\xfe\x67\x68\x50\x82\x6f\x02\x17\x49\x11\x47\x22\x12\xd3\x24\xd1\x22\x52\xdc\x32\xe6\xac\xd4\x32\xd1\x9a\x09\x39\x7d\x1d\xc1\x63\xb4\xc8\xfe\x33\x04\x28\xc1\x37\x81\xd5\x53\x17\x5b\x1e\xd1\x99\xe6\xce\x44\x4a\x38\x37\x93\x2c\x91\x32\xb2\x4e\x1a\x6e\x9e\x22\x78\xfa\x28\xf4\xf5\xf9\xa3\x50\xfd\x4e\xe0\xef\xfe\x69\xb2\xfd\x6b\xfb\x34\x2a\xd3\x38\x48\x8a\x7c\x95\xe4\x0f\xcb\xe0\x21\x2f\x16\xf3\x3c\x73\x18\x56\xed\x45\xbc\x7e\x4c\x38\xec\xd7\x7f\xbc\xff\xbf\x00\x00\x00\xff\xff\x0c\x0b\xd2\x39\xcd\x1f\x00\x00") func web_uiIndexHtmlBytes() ([]byte, error) { return bindataRead( @@ -841,7 +822,27 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/index.html", size: 7524, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/index.html", size: 8141, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiOidcCallback = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x91\xcd\x6a\xc3\x30\x10\x84\xef\x79\x8a\x6d\x2e\x71\xa0\xb5\xaf\x85\xc8\xb9\xb8\x2e\x94\x40\x7f\xfc\x73\xc8\xc9\x08\x7b\x6b\x0b\x64\x29\x95\xd6\x09\xa5\xf4\xdd\x8b\x91\xdc\xa6\xc4\xe4\x24\x2d\xa3\xf9\x76\x56\xcb\x6e\x1e\x5e\x92\x62\xff\x9a\x42\x47\xbd\xdc\x2e\x98\x3b\x00\x58\x87\xbc\x19\x2f\x00\xac\x47\xe2\x50\x77\xdc\x58\xa4\x78\x59\x16\x8f\x77\xf7\x4b\x2f\x91\x20\x89\xdb\x44\x2b\x3b\x48\x16\xb9\xca\x29\xb6\x36\xe2\x40\xae\x00\x38\x72\x03\x49\x99\x65\xe9\x73\x51\x65\xe9\x5b\x99\xe6\x45\xb5\x4b\xf7\x10\xc3\xaa\xaa\x48\x1b\x21\x2a\x83\x1f\x03\x5a\x5a\x6d\xce\x2c\x07\x54\x8d\x50\x6d\xe6\xa4\x1d\x7e\x42\x0c\x27\xa1\x1a\x7d\x0a\xa5\xae\xb9\xcc\x49\x1b\xde\x62\xd8\x22\x3d\x11\xf6\xc1\x4c\x8b\xf5\x66\xe1\x81\xe2\x1d\x82\x0b\xe0\x1a\xbe\xbc\x0c\xb3\x64\x83\xbd\x3e\xe2\x15\xf8\x64\x1e\xe3\x0e\x46\xfe\x0f\x48\x42\xab\x90\x74\x4e\x46\xa8\x36\x38\x7b\x3d\xd7\xca\xfa\x21\x2e\x32\xde\x8e\xe0\x5f\xf3\xf7\x34\x8f\x67\xd4\x52\x5b\x9c\xd8\x2c\xfa\xfb\x77\x16\xb9\x1d\xb2\xc8\x2d\xf5\x27\x00\x00\xff\xff\xd4\xee\xca\xe3\xec\x01\x00\x00") + +func web_uiOidcCallbackBytes() ([]byte, error) { + return bindataRead( + _web_uiOidcCallback, + "web_ui/oidc/callback", + ) +} + +func web_uiOidcCallback() (*asset, error) { + bytes, err := web_uiOidcCallbackBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/oidc/callback", size: 492, mode: os.FileMode(420), modTime: time.Unix(1607636633, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -861,7 +862,27 @@ return nil, err } - info := bindataFileInfo{name: "web_ui/robots.txt", size: 52, mode: os.FileMode(420), modTime: time.Unix(1591819369, 0)} + info := bindataFileInfo{name: "web_ui/robots.txt", size: 52, mode: os.FileMode(420), modTime: time.Unix(1607636633, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiToriiRedirectHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x91\x4f\x4b\xc3\x40\x10\xc5\xef\xfd\x14\x63\x2f\x4d\x41\x93\xab\xd0\x4d\x41\x6a\x04\x29\x58\xcd\x9f\x43\x4f\x61\x49\xc6\x64\x61\x93\xad\x93\x49\x8b\x88\xdf\x5d\xc2\x6e\xb4\xd2\xd0\xd3\xee\xf2\xe6\xfd\xe6\xcd\x8e\xb8\x79\xdc\x6d\xd2\xfd\x6b\x04\x35\x37\x7a\x3d\x13\xf6\x00\x10\x35\xca\x72\xb8\x00\x88\x06\x59\x42\x51\x4b\xea\x90\xc3\x79\x96\x3e\xdd\xdd\xcf\x9d\xc4\x8a\x35\xae\x53\x43\x4a\xc1\xee\xa1\xe7\x1a\x62\x2c\x15\x61\xc1\x22\xb0\x9a\xad\xeb\x0a\x52\x07\xb6\x0f\x80\xa3\x24\xd8\x64\x71\x1c\xbd\xa4\x79\x1c\xbd\x65\x51\x92\xe6\xdb\x68\x0f\x21\x2c\xf2\x9c\x07\x58\x4e\xf8\xd1\x63\xc7\x8b\xd5\x99\xe5\x80\x6d\xa9\xda\x2a\xb6\xd2\x16\x3f\x21\x84\x93\x6a\x4b\x73\xf2\xb5\x29\xa4\x4e\xd8\x90\xac\xd0\xaf\x90\x9f\x19\x1b\x6f\xa2\xc5\x72\x35\x73\x40\xf5\x0e\xde\x05\x70\x09\x5f\x4e\x86\x49\x32\x61\x63\x8e\x78\x05\x3e\x9a\x87\xb8\x3d\xe9\xff\x01\x59\x99\xd6\x67\x93\x30\xa9\xb6\xf2\xce\xaa\xa7\x5a\x75\x6e\x88\x8b\x8c\xb7\x03\xf8\xd7\xfc\x3d\xce\xe3\x18\x85\x36\x1d\x8e\x6c\x11\xfc\xfd\xbb\x08\xec\x46\x45\x60\x57\xfc\x13\x00\x00\xff\xff\xe6\x06\x7f\x8f\xfa\x01\x00\x00") + +func web_uiToriiRedirectHtmlBytes() ([]byte, error) { + return bindataRead( + _web_uiToriiRedirectHtml, + "web_ui/torii/redirect.html", + ) +} + +func web_uiToriiRedirectHtml() (*asset, error) { + bytes, err := web_uiToriiRedirectHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/torii/redirect.html", size: 506, mode: os.FileMode(420), modTime: time.Unix(1607636778, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -929,14 +950,13 @@ "web_ui/assets/apple-touch-icon-72x72-da5dd17cb4f094262b19223464fc9541.png": web_uiAssetsAppleTouchIcon72x72Da5dd17cb4f094262b19223464fc9541Png, "web_ui/assets/apple-touch-icon-76x76-c5fff53d5f3e96dbd2fe49c5cc472022.png": web_uiAssetsAppleTouchIcon76x76C5fff53d5f3e96dbd2fe49c5cc472022Png, "web_ui/assets/apple-touch-icon-d2b583b1104a1e6810fb3984f8f132ae.png": web_uiAssetsAppleTouchIconD2b583b1104a1e6810fb3984f8f132aePng, - "web_ui/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, - "web_ui/assets/codemirror/mode/javascript/javascript-a4c0d68244e6e74f9225801e5f9d724e.js": web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJs, - "web_ui/assets/codemirror/mode/ruby/ruby-61421add5f64c0fc261fe6049c3bd5d7.js": web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7Js, - "web_ui/assets/codemirror/mode/yaml/yaml-5095f3345bc2424e97de59ad00ae167a.js": web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJs, + "web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js": web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js, + "web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js": web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs, + "web_ui/assets/codemirror/mode/yaml/yaml-86bec82a0f62e7a53eef41d44a8e4727.js": web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727Js, "web_ui/assets/consul-logo-707625c5eb04f602ade1f89a8868a329.png": web_uiAssetsConsulLogo707625c5eb04f602ade1f89a8868a329Png, - "web_ui/assets/consul-ui-1b984a2dd785945b71a755b88134c6c4.js": web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4Js, - "web_ui/assets/consul-ui-a5fc236bd86696b34dfca653ff20b752.css": web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752Css, - "web_ui/assets/css.escape-432357d359e6980aaec701dfabef34ba.js": web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJs, + "web_ui/assets/consul-ui-21d63b0298afc21debc0d574ec59049b.js": web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJs, + "web_ui/assets/consul-ui-97ec8a4278cddf4266ff5aa45bf84f69.css": web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69Css, + "web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js": web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs, "web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js": web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js, "web_ui/assets/favicon-128-08e1368e84f412f6ad30279d849b1df9.png": web_uiAssetsFavicon12808e1368e84f412f6ad30279d849b1df9Png, "web_ui/assets/favicon-16x16-672c31374646b24b235b9511857cdade.png": web_uiAssetsFavicon16x16672c31374646b24b235b9511857cdadePng, @@ -952,10 +972,12 @@ "web_ui/assets/mstile-310x310-49242d1935854126c10457d1cdb1762b.png": web_uiAssetsMstile310x31049242d1935854126c10457d1cdb1762bPng, "web_ui/assets/mstile-70x70-08e1368e84f412f6ad30279d849b1df9.png": web_uiAssetsMstile70x7008e1368e84f412f6ad30279d849b1df9Png, "web_ui/assets/safari-pinned-tab.svg": web_uiAssetsSafariPinnedTabSvg, - "web_ui/assets/vendor-5b94eb6a11bff93d1247a342ee40dbf8.js": web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8Js, - "web_ui/assets/vendor-9ea7d400c0cec7682e8871df14073823.css": web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823Css, - "web_ui/index.html": web_uiIndexHtml, - "web_ui/robots.txt": web_uiRobotsTxt, + "web_ui/assets/vendor-992465b8b230f89d4adce5f016543c4d.css": web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCss, + "web_ui/assets/vendor-d38f8b642cf98384d0f0a8760e75b259.js": web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259Js, + "web_ui/index.html": web_uiIndexHtml, + "web_ui/oidc/callback": web_uiOidcCallback, + "web_ui/robots.txt": web_uiRobotsTxt, + "web_ui/torii/redirect.html": web_uiToriiRedirectHtml, } // AssetDir returns the file names below a certain @@ -1012,24 +1034,23 @@ "apple-touch-icon-72x72-da5dd17cb4f094262b19223464fc9541.png": &bintree{web_uiAssetsAppleTouchIcon72x72Da5dd17cb4f094262b19223464fc9541Png, map[string]*bintree{}}, "apple-touch-icon-76x76-c5fff53d5f3e96dbd2fe49c5cc472022.png": &bintree{web_uiAssetsAppleTouchIcon76x76C5fff53d5f3e96dbd2fe49c5cc472022Png, map[string]*bintree{}}, "apple-touch-icon-d2b583b1104a1e6810fb3984f8f132ae.png": &bintree{web_uiAssetsAppleTouchIconD2b583b1104a1e6810fb3984f8f132aePng, map[string]*bintree{}}, - "auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": &bintree{web_uiAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, map[string]*bintree{}}, "codemirror": &bintree{nil, map[string]*bintree{ "mode": &bintree{nil, map[string]*bintree{ "javascript": &bintree{nil, map[string]*bintree{ - "javascript-a4c0d68244e6e74f9225801e5f9d724e.js": &bintree{web_uiAssetsCodemirrorModeJavascriptJavascriptA4c0d68244e6e74f9225801e5f9d724eJs, map[string]*bintree{}}, + "javascript-77218cd1268ea6df75775114ae086566.js": &bintree{web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js, map[string]*bintree{}}, }}, "ruby": &bintree{nil, map[string]*bintree{ - "ruby-61421add5f64c0fc261fe6049c3bd5d7.js": &bintree{web_uiAssetsCodemirrorModeRubyRuby61421add5f64c0fc261fe6049c3bd5d7Js, map[string]*bintree{}}, + "ruby-ea43ca3a3bdd63a52811e8464d66134b.js": &bintree{web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs, map[string]*bintree{}}, }}, "yaml": &bintree{nil, map[string]*bintree{ - "yaml-5095f3345bc2424e97de59ad00ae167a.js": &bintree{web_uiAssetsCodemirrorModeYamlYaml5095f3345bc2424e97de59ad00ae167aJs, map[string]*bintree{}}, + "yaml-86bec82a0f62e7a53eef41d44a8e4727.js": &bintree{web_uiAssetsCodemirrorModeYamlYaml86bec82a0f62e7a53eef41d44a8e4727Js, map[string]*bintree{}}, }}, }}, }}, "consul-logo-707625c5eb04f602ade1f89a8868a329.png": &bintree{web_uiAssetsConsulLogo707625c5eb04f602ade1f89a8868a329Png, map[string]*bintree{}}, - "consul-ui-1b984a2dd785945b71a755b88134c6c4.js": &bintree{web_uiAssetsConsulUi1b984a2dd785945b71a755b88134c6c4Js, map[string]*bintree{}}, - "consul-ui-a5fc236bd86696b34dfca653ff20b752.css": &bintree{web_uiAssetsConsulUiA5fc236bd86696b34dfca653ff20b752Css, map[string]*bintree{}}, - "css.escape-432357d359e6980aaec701dfabef34ba.js": &bintree{web_uiAssetsCssEscape432357d359e6980aaec701dfabef34baJs, map[string]*bintree{}}, + "consul-ui-21d63b0298afc21debc0d574ec59049b.js": &bintree{web_uiAssetsConsulUi21d63b0298afc21debc0d574ec59049bJs, map[string]*bintree{}}, + "consul-ui-97ec8a4278cddf4266ff5aa45bf84f69.css": &bintree{web_uiAssetsConsulUi97ec8a4278cddf4266ff5aa45bf84f69Css, map[string]*bintree{}}, + "css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js": &bintree{web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs, map[string]*bintree{}}, "encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js": &bintree{web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js, map[string]*bintree{}}, "favicon-128-08e1368e84f412f6ad30279d849b1df9.png": &bintree{web_uiAssetsFavicon12808e1368e84f412f6ad30279d849b1df9Png, map[string]*bintree{}}, "favicon-16x16-672c31374646b24b235b9511857cdade.png": &bintree{web_uiAssetsFavicon16x16672c31374646b24b235b9511857cdadePng, map[string]*bintree{}}, @@ -1045,11 +1066,17 @@ "mstile-310x310-49242d1935854126c10457d1cdb1762b.png": &bintree{web_uiAssetsMstile310x31049242d1935854126c10457d1cdb1762bPng, map[string]*bintree{}}, "mstile-70x70-08e1368e84f412f6ad30279d849b1df9.png": &bintree{web_uiAssetsMstile70x7008e1368e84f412f6ad30279d849b1df9Png, map[string]*bintree{}}, "safari-pinned-tab.svg": &bintree{web_uiAssetsSafariPinnedTabSvg, map[string]*bintree{}}, - "vendor-5b94eb6a11bff93d1247a342ee40dbf8.js": &bintree{web_uiAssetsVendor5b94eb6a11bff93d1247a342ee40dbf8Js, map[string]*bintree{}}, - "vendor-9ea7d400c0cec7682e8871df14073823.css": &bintree{web_uiAssetsVendor9ea7d400c0cec7682e8871df14073823Css, map[string]*bintree{}}, + "vendor-992465b8b230f89d4adce5f016543c4d.css": &bintree{web_uiAssetsVendor992465b8b230f89d4adce5f016543c4dCss, map[string]*bintree{}}, + "vendor-d38f8b642cf98384d0f0a8760e75b259.js": &bintree{web_uiAssetsVendorD38f8b642cf98384d0f0a8760e75b259Js, map[string]*bintree{}}, }}, "index.html": &bintree{web_uiIndexHtml, map[string]*bintree{}}, + "oidc": &bintree{nil, map[string]*bintree{ + "callback": &bintree{web_uiOidcCallback, map[string]*bintree{}}, + }}, "robots.txt": &bintree{web_uiRobotsTxt, map[string]*bintree{}}, + "torii": &bintree{nil, map[string]*bintree{ + "redirect.html": &bintree{web_uiToriiRedirectHtml, map[string]*bintree{}}, + }}, }}, }} diff -Nru consul-1.7.4+dfsg1/agent/blacklist.go consul-1.8.7+dfsg1/agent/blacklist.go --- consul-1.7.4+dfsg1/agent/blacklist.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/blacklist.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -package agent - -import ( - "github.com/armon/go-radix" -) - -// Blacklist implements an HTTP endpoint blacklist based on a list of endpoint -// prefixes which should be blocked. -type Blacklist struct { - tree *radix.Tree -} - -// NewBlacklist returns a blacklist for the given list of prefixes. -func NewBlacklist(prefixes []string) *Blacklist { - tree := radix.New() - for _, prefix := range prefixes { - tree.Insert(prefix, nil) - } - return &Blacklist{tree} -} - -// Block will return true if the given path is included among any of the -// blocked prefixes. -func (b *Blacklist) Block(path string) bool { - _, _, blocked := b.tree.LongestPrefix(path) - return blocked -} diff -Nru consul-1.7.4+dfsg1/agent/blacklist_test.go consul-1.8.7+dfsg1/agent/blacklist_test.go --- consul-1.7.4+dfsg1/agent/blacklist_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/blacklist_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -package agent - -import ( - "testing" -) - -func TestBlacklist(t *testing.T) { - t.Parallel() - - complex := []string{ - "/a", - "/b/c", - } - - tests := []struct { - desc string - prefixes []string - path string - block bool - }{ - {"nothing blocked root", nil, "/", false}, - {"nothing blocked path", nil, "/a", false}, - {"exact match 1", complex, "/a", true}, - {"exact match 2", complex, "/b/c", true}, - {"subpath", complex, "/a/b", true}, - {"longer prefix", complex, "/apple", true}, - {"longer subpath", complex, "/b/c/d", true}, - {"partial prefix", complex, "/b/d", false}, - {"no match", complex, "/c", false}, - } - for _, tt := range tests { - t.Run(tt.desc, func(t *testing.T) { - blacklist := NewBlacklist(tt.prefixes) - if got, want := blacklist.Block(tt.path), tt.block; got != want { - t.Fatalf("got %v want %v", got, want) - } - }) - } -} diff -Nru consul-1.7.4+dfsg1/agent/cache/cache.go consul-1.8.7+dfsg1/agent/cache/cache.go --- consul-1.7.4+dfsg1/agent/cache/cache.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/cache.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,6 +16,7 @@ import ( "container/heap" + "context" "fmt" "sync" "sync/atomic" @@ -23,6 +24,7 @@ "github.com/armon/go-metrics" "github.com/hashicorp/consul/lib" + "golang.org/x/time/rate" ) //go:generate mockery -all -inpkg @@ -32,6 +34,17 @@ const ( CacheRefreshBackoffMin = 3 // 3 attempts before backing off CacheRefreshMaxWait = 1 * time.Minute // maximum backoff wait time + + // The following constants are default values for the cache entry + // rate limiter settings. + + // DefaultEntryFetchRate is the default rate at which cache entries can + // be fetch. This defaults to not being unlimited + DefaultEntryFetchRate = rate.Inf + + // DefaultEntryFetchMaxBurst is the number of cache entry fetches that can + // occur in a burst. + DefaultEntryFetchMaxBurst = 2 ) // Cache is a agent-local cache of Consul data. Create a Cache using the @@ -79,10 +92,16 @@ stopped uint32 // stopCh is closed when Close is called stopCh chan struct{} + // options includes a per Cache Rate limiter specification to avoid performing too many queries + options Options + rateLimitContext context.Context + rateLimitCancel context.CancelFunc } // typeEntry is a single type that is registered with a Cache. type typeEntry struct { + // Name that was used to register the Type + Name string Type Type Opts *RegisterOptions } @@ -118,23 +137,46 @@ // Options are options for the Cache. type Options struct { - // Nothing currently, reserved. + // EntryFetchMaxBurst max burst size of RateLimit for a single cache entry + EntryFetchMaxBurst int + // EntryFetchRate represents the max calls/sec for a single cache entry + EntryFetchRate rate.Limit +} + +// Equal return true if both options are equivalent +func (o Options) Equal(other Options) bool { + return o.EntryFetchMaxBurst == other.EntryFetchMaxBurst && o.EntryFetchRate == other.EntryFetchRate +} + +// applyDefaultValuesOnOptions set default values on options and returned updated value +func applyDefaultValuesOnOptions(options Options) Options { + if options.EntryFetchRate == 0.0 { + options.EntryFetchRate = DefaultEntryFetchRate + } + if options.EntryFetchMaxBurst == 0 { + options.EntryFetchMaxBurst = DefaultEntryFetchMaxBurst + } + return options } // New creates a new cache with the given RPC client and reasonable defaults. // Further settings can be tweaked on the returned value. -func New(*Options) *Cache { +func New(options Options) *Cache { + options = applyDefaultValuesOnOptions(options) // Initialize the heap. The buffer of 1 is really important because // its possible for the expiry loop to trigger the heap to update // itself and it'd block forever otherwise. h := &expiryHeap{NotifyCh: make(chan struct{}, 1)} heap.Init(h) - + ctx, cancel := context.WithCancel(context.Background()) c := &Cache{ types: make(map[string]typeEntry), entries: make(map[string]cacheEntry), entriesExpiryHeap: h, stopCh: make(chan struct{}), + options: options, + rateLimitContext: ctx, + rateLimitCancel: cancel, } // Start the expiry watcher @@ -158,11 +200,17 @@ // is to only request data on explicit Get. Refresh bool + // SupportsBlocking should be set to true if the type supports blocking queries. + // Types that do not support blocking queries will not be able to use + // background refresh nor will the cache attempt blocking fetches if the + // client requests them with MinIndex. + SupportsBlocking bool + // RefreshTimer is the time between attempting to refresh data. // If this is zero, then data is refreshed immediately when a fetch // is returned. // - // RefreshTimeout determines the maximum query time for a refresh + // QueryTimeout determines the maximum query time for a blocking query // operation. This is specified as part of the query options and is // expected to be implemented by the Type itself. // @@ -175,25 +223,45 @@ // refresh can be set so that changes in server data are recognized // within the cache very quickly. // - RefreshTimer time.Duration - RefreshTimeout time.Duration + RefreshTimer time.Duration + QueryTimeout time.Duration } // RegisterType registers a cacheable type. // // This makes the type available for Get but does not automatically perform // any prefetching. In order to populate the cache, Get must be called. -func (c *Cache) RegisterType(n string, typ Type, opts *RegisterOptions) { - if opts == nil { - opts = &RegisterOptions{} - } +func (c *Cache) RegisterType(n string, typ Type) { + opts := typ.RegisterOptions() if opts.LastGetTTL == 0 { opts.LastGetTTL = 72 * time.Hour // reasonable default is days } c.typesLock.Lock() defer c.typesLock.Unlock() - c.types[n] = typeEntry{Type: typ, Opts: opts} + c.types[n] = typeEntry{Name: n, Type: typ, Opts: &opts} +} + +// ReloadOptions updates the cache with the new options +// return true if Cache is updated, false if already up to date +func (c *Cache) ReloadOptions(options Options) bool { + options = applyDefaultValuesOnOptions(options) + modified := !options.Equal(c.options) + if modified { + c.entriesLock.RLock() + defer c.entriesLock.RUnlock() + for _, entry := range c.entries { + if c.options.EntryFetchRate != options.EntryFetchRate { + entry.FetchRateLimiter.SetLimit(options.EntryFetchRate) + } + if c.options.EntryFetchMaxBurst != options.EntryFetchMaxBurst { + entry.FetchRateLimiter.SetBurst(options.EntryFetchMaxBurst) + } + } + c.options.EntryFetchRate = options.EntryFetchRate + c.options.EntryFetchMaxBurst = options.EntryFetchMaxBurst + } + return modified } // Get loads the data for the given type and request. If data satisfying the @@ -210,66 +278,93 @@ // index is retrieved, the last known value (maybe nil) is returned. No // error is returned on timeout. This matches the behavior of Consul blocking // queries. -func (c *Cache) Get(t string, r Request) (interface{}, ResultMeta, error) { - return c.getWithIndex(t, r, r.CacheInfo().MinIndex) +func (c *Cache) Get(ctx context.Context, t string, r Request) (interface{}, ResultMeta, error) { + c.typesLock.RLock() + tEntry, ok := c.types[t] + c.typesLock.RUnlock() + if !ok { + // Shouldn't happen given that we successfully fetched this at least + // once. But be robust against panics. + return nil, ResultMeta{}, fmt.Errorf("unknown type in cache: %s", t) + } + return c.getWithIndex(ctx, newGetOptions(tEntry, r)) +} + +// getOptions contains the arguments for a Get request. It is used in place of +// Request so that internal functions can modify Info without having to extract +// it from the Request each time. +type getOptions struct { + // Fetch is a closure over tEntry.Type.Fetch which provides the original + // Request from the caller. + Fetch func(opts FetchOptions) (FetchResult, error) + Info RequestInfo + TypeEntry typeEntry +} + +func newGetOptions(tEntry typeEntry, r Request) getOptions { + return getOptions{ + Fetch: func(opts FetchOptions) (FetchResult, error) { + return tEntry.Type.Fetch(opts, r) + }, + Info: r.CacheInfo(), + TypeEntry: tEntry, + } } // getEntryLocked retrieves a cache entry and checks if it is ready to be // returned given the other parameters. It reads from entries and the caller // has to issue a read lock if necessary. -func (c *Cache) getEntryLocked(tEntry typeEntry, key string, maxAge time.Duration, revalidate bool, minIndex uint64) (bool, bool, cacheEntry) { +func (c *Cache) getEntryLocked( + tEntry typeEntry, + key string, + info RequestInfo, +) (entryExists bool, entryValid bool, entry cacheEntry) { entry, ok := c.entries[key] - cacheHit := false - - if !ok { - return ok, cacheHit, entry + if !entry.Valid { + return ok, false, entry } - // Check if we have a hit - cacheHit = ok && entry.Valid - - supportsBlocking := tEntry.Type.SupportsBlocking() - // Check index is not specified or lower than value, or the type doesn't // support blocking. - if cacheHit && supportsBlocking && - minIndex > 0 && minIndex >= entry.Index { + if tEntry.Opts.SupportsBlocking && info.MinIndex > 0 && info.MinIndex >= entry.Index { // MinIndex was given and matches or is higher than current value so we // ignore the cache and fallthrough to blocking on a new value below. - cacheHit = false + return true, false, entry } // Check MaxAge is not exceeded if this is not a background refreshing type // and MaxAge was specified. - if cacheHit && !tEntry.Opts.Refresh && maxAge > 0 && - !entry.FetchedAt.IsZero() && maxAge < time.Since(entry.FetchedAt) { - cacheHit = false + if !tEntry.Opts.Refresh && info.MaxAge > 0 && entryExceedsMaxAge(info.MaxAge, entry) { + return true, false, entry } - // Check if we are requested to revalidate. If so the first time round the + // Check if re-validate is requested. If so the first time round the // loop is not a hit but subsequent ones should be treated normally. - if cacheHit && !tEntry.Opts.Refresh && revalidate { - cacheHit = false + if !tEntry.Opts.Refresh && info.MustRevalidate { + return true, false, entry } - return ok, cacheHit, entry + return true, true, entry +} + +func entryExceedsMaxAge(maxAge time.Duration, entry cacheEntry) bool { + return !entry.FetchedAt.IsZero() && maxAge < time.Since(entry.FetchedAt) } // getWithIndex implements the main Get functionality but allows internal // callers (Watch) to manipulate the blocking index separately from the actual // request object. -func (c *Cache) getWithIndex(t string, r Request, minIndex uint64) (interface{}, ResultMeta, error) { - info := r.CacheInfo() - if info.Key == "" { +func (c *Cache) getWithIndex(ctx context.Context, r getOptions) (interface{}, ResultMeta, error) { + if r.Info.Key == "" { metrics.IncrCounter([]string{"consul", "cache", "bypass"}, 1) // If no key is specified, then we do not cache this request. // Pass directly through to the backend. - return c.fetchDirect(t, r, minIndex) + result, err := r.Fetch(FetchOptions{MinIndex: r.Info.MinIndex}) + return result.Value, ResultMeta{}, err } - // Get the actual key for our entry - key := c.entryKey(t, &info) + key := makeEntryKey(r.TypeEntry.Name, r.Info.Datacenter, r.Info.Token, r.Info.Key) // First time through first := true @@ -278,31 +373,21 @@ var timeoutCh <-chan time.Time RETRY_GET: - // Get the type that we're fetching - c.typesLock.RLock() - tEntry, ok := c.types[t] - c.typesLock.RUnlock() - if !ok { - // Shouldn't happen given that we successfully fetched this at least - // once. But be robust against panics. - return nil, ResultMeta{}, fmt.Errorf("unknown type in cache: %s", t) - } - // Get the current value c.entriesLock.RLock() - _, cacheHit, entry := c.getEntryLocked(tEntry, key, info.MaxAge, info.MustRevalidate && first, minIndex) + _, entryValid, entry := c.getEntryLocked(r.TypeEntry, key, r.Info) c.entriesLock.RUnlock() - if cacheHit { + if entryValid { meta := ResultMeta{Index: entry.Index} if first { - metrics.IncrCounter([]string{"consul", "cache", t, "hit"}, 1) + metrics.IncrCounter([]string{"consul", "cache", r.TypeEntry.Name, "hit"}, 1) meta.Hit = true } // If refresh is enabled, calculate age based on whether the background // routine is still connected. - if tEntry.Opts.Refresh { + if r.TypeEntry.Opts.Refresh { meta.Age = time.Duration(0) if !entry.RefreshLostContact.IsZero() { meta.Age = time.Since(entry.RefreshLostContact) @@ -317,7 +402,7 @@ // Touch the expiration and fix the heap. c.entriesLock.Lock() - entry.Expiry.Reset() + entry.Expiry.Update(r.TypeEntry.Opts.LastGetTTL) c.entriesExpiryHeap.Fix(entry.Expiry) c.entriesLock.Unlock() @@ -351,31 +436,31 @@ // We increment two different counters for cache misses depending on // whether we're missing because we didn't have the data at all, // or if we're missing because we're blocking on a set index. - if minIndex == 0 { - metrics.IncrCounter([]string{"consul", "cache", t, "miss_new"}, 1) - } else { - metrics.IncrCounter([]string{"consul", "cache", t, "miss_block"}, 1) + missKey := "miss_block" + if r.Info.MinIndex == 0 { + missKey = "miss_new" } + metrics.IncrCounter([]string{"consul", "cache", r.TypeEntry.Name, missKey}, 1) } // Set our timeout channel if we must - if info.Timeout > 0 && timeoutCh == nil { - timeoutCh = time.After(info.Timeout) + if r.Info.Timeout > 0 && timeoutCh == nil { + timeoutCh = time.After(r.Info.Timeout) } // At this point, we know we either don't have a value at all or the // value we have is too old. We need to wait for new data. - waiterCh, err := c.fetch(t, key, r, true, 0, minIndex, false, !first) - if err != nil { - return nil, ResultMeta{Index: entry.Index}, err - } + waiterCh := c.fetch(key, r, true, 0, false) // No longer our first time through first = false select { + case <-ctx.Done(): + return nil, ResultMeta{}, ctx.Err() case <-waiterCh: // Our fetch returned, retry the get from the cache. + r.Info.MustRevalidate = false goto RETRY_GET case <-timeoutCh: @@ -384,12 +469,6 @@ } } -// entryKey returns the key for the entry in the cache. See the note -// about the entry key format in the structure docs for Cache. -func (c *Cache) entryKey(t string, r *RequestInfo) string { - return makeEntryKey(t, r.Datacenter, r.Token, r.Key) -} - func makeEntryKey(t, dc, token, key string) string { return fmt.Sprintf("%s/%s/%s/%s", t, dc, token, key) } @@ -402,28 +481,18 @@ // If allowNew is true then the fetch should create the cache entry // if it doesn't exist. If this is false, then fetch will do nothing // if the entry doesn't exist. This latter case is to support refreshing. -func (c *Cache) fetch(t, key string, r Request, allowNew bool, attempt uint, minIndex uint64, ignoreExisting bool, ignoreRevalidation bool) (<-chan struct{}, error) { - // Get the type that we're fetching - c.typesLock.RLock() - tEntry, ok := c.types[t] - c.typesLock.RUnlock() - if !ok { - return nil, fmt.Errorf("unknown type in cache: %s", t) - } - - info := r.CacheInfo() - +func (c *Cache) fetch(key string, r getOptions, allowNew bool, attempt uint, ignoreExisting bool) <-chan struct{} { // We acquire a write lock because we may have to set Fetching to true. c.entriesLock.Lock() defer c.entriesLock.Unlock() - ok, cacheHit, entry := c.getEntryLocked(tEntry, key, info.MaxAge, info.MustRevalidate && !ignoreRevalidation, minIndex) + ok, entryValid, entry := c.getEntryLocked(r.TypeEntry, key, r.Info) // This handles the case where a fetch succeeded after checking for its existence in // getWithIndex. This ensures that we don't miss updates. - if ok && cacheHit && !ignoreExisting { + if ok && entryValid && !ignoreExisting { ch := make(chan struct{}) close(ch) - return ch, nil + return ch } // If we aren't allowing new values and we don't have an existing value, @@ -432,19 +501,26 @@ if !ok && !allowNew { ch := make(chan struct{}) close(ch) - return ch, nil + return ch } // If we already have an entry and it is actively fetching, then return // the currently active waiter. if ok && entry.Fetching { - return entry.Waiter, nil + return entry.Waiter } // If we don't have an entry, then create it. The entry must be marked // as invalid so that it isn't returned as a valid value for a zero index. if !ok { - entry = cacheEntry{Valid: false, Waiter: make(chan struct{})} + entry = cacheEntry{ + Valid: false, + Waiter: make(chan struct{}), + FetchRateLimiter: rate.NewLimiter( + c.options.EntryFetchRate, + c.options.EntryFetchMaxBurst, + ), + } } // Set that we're fetching to true, which makes it so that future @@ -454,6 +530,7 @@ c.entries[key] = entry metrics.SetGauge([]string{"consul", "cache", "entries_count"}, float32(len(c.entries))) + tEntry := r.TypeEntry // The actual Fetch must be performed in a goroutine. go func() { // If we have background refresh and currently are in "disconnected" state, @@ -464,8 +541,7 @@ // keepalives are every 30 seconds so the RPC should fail if the packets are // being blackholed for more than 30 seconds. var connectedTimer *time.Timer - if tEntry.Opts.Refresh && entry.Index > 0 && - tEntry.Opts.RefreshTimeout > (31*time.Second) { + if tEntry.Opts.Refresh && entry.Index > 0 && tEntry.Opts.QueryTimeout > 31*time.Second { connectedTimer = time.AfterFunc(31*time.Second, func() { c.entriesLock.Lock() defer c.entriesLock.Unlock() @@ -479,9 +555,13 @@ } fOpts := FetchOptions{} - if tEntry.Type.SupportsBlocking() { + if tEntry.Opts.SupportsBlocking { fOpts.MinIndex = entry.Index - fOpts.Timeout = tEntry.Opts.RefreshTimeout + fOpts.Timeout = tEntry.Opts.QueryTimeout + + if fOpts.Timeout == 0 { + fOpts.Timeout = 10 * time.Minute + } } if entry.Valid { fOpts.LastResult = &FetchResult{ @@ -490,9 +570,15 @@ Index: entry.Index, } } - + if err := entry.FetchRateLimiter.Wait(c.rateLimitContext); err != nil { + if connectedTimer != nil { + connectedTimer.Stop() + } + entry.Error = fmt.Errorf("rateLimitContext canceled: %s", err.Error()) + return + } // Start building the new entry by blocking on the fetch. - result, err := tEntry.Type.Fetch(fOpts, r) + result, err := r.Fetch(fOpts) if connectedTimer != nil { connectedTimer.Stop() } @@ -543,7 +629,7 @@ // Error handling if err == nil { metrics.IncrCounter([]string{"consul", "cache", "fetch_success"}, 1) - metrics.IncrCounter([]string{"consul", "cache", t, "fetch_success"}, 1) + metrics.IncrCounter([]string{"consul", "cache", tEntry.Name, "fetch_success"}, 1) if result.Index > 0 { // Reset the attempts counter so we don't have any backoff @@ -572,7 +658,7 @@ } } else { metrics.IncrCounter([]string{"consul", "cache", "fetch_error"}, 1) - metrics.IncrCounter([]string{"consul", "cache", t, "fetch_error"}, 1) + metrics.IncrCounter([]string{"consul", "cache", tEntry.Name, "fetch_error"}, 1) // Increment attempt counter attempt++ @@ -596,11 +682,8 @@ // initial expiry information and insert. If we're already in // the heap we do nothing since we're reusing the same entry. if newEntry.Expiry == nil || newEntry.Expiry.HeapIndex == -1 { - newEntry.Expiry = &cacheEntryExpiry{ - Key: key, - TTL: tEntry.Opts.LastGetTTL, - } - newEntry.Expiry.Reset() + newEntry.Expiry = &cacheEntryExpiry{Key: key} + newEntry.Expiry.Update(tEntry.Opts.LastGetTTL) heap.Push(c.entriesExpiryHeap, newEntry.Expiry) } @@ -613,35 +696,31 @@ // If refresh is enabled, run the refresh in due time. The refresh // below might block, but saves us from spawning another goroutine. if tEntry.Opts.Refresh { - c.refresh(tEntry.Opts, attempt, t, key, r) - } - }() + // Check if cache was stopped + if atomic.LoadUint32(&c.stopped) == 1 { + return + } - return entry.Waiter, nil -} + // If we're over the attempt minimum, start an exponential backoff. + if wait := backOffWait(attempt); wait > 0 { + time.Sleep(wait) + } -// fetchDirect fetches the given request with no caching. Because this -// bypasses the caching entirely, multiple matching requests will result -// in multiple actual RPC calls (unlike fetch). -func (c *Cache) fetchDirect(t string, r Request, minIndex uint64) (interface{}, ResultMeta, error) { - // Get the type that we're fetching - c.typesLock.RLock() - tEntry, ok := c.types[t] - c.typesLock.RUnlock() - if !ok { - return nil, ResultMeta{}, fmt.Errorf("unknown type in cache: %s", t) - } + // If we have a timer, wait for it + if tEntry.Opts.RefreshTimer > 0 { + time.Sleep(tEntry.Opts.RefreshTimer) + } - // Fetch it with the min index specified directly by the request. - result, err := tEntry.Type.Fetch(FetchOptions{ - MinIndex: minIndex, - }, r) - if err != nil { - return nil, ResultMeta{}, err - } + // Trigger. The "allowNew" field is false because in the time we were + // waiting to refresh we may have expired and got evicted. If that + // happened, we don't want to create a new entry. + r.Info.MustRevalidate = false + r.Info.MinIndex = 0 + c.fetch(key, r, false, attempt, true) + } + }() - // Return the result and ignore the rest - return result.Value, ResultMeta{}, nil + return entry.Waiter } func backOffWait(failures uint) time.Duration { @@ -659,34 +738,6 @@ return 0 } -// refresh triggers a fetch for a specific Request according to the -// registration options. -func (c *Cache) refresh(opts *RegisterOptions, attempt uint, t string, key string, r Request) { - // Sanity-check, we should not schedule anything that has refresh disabled - if !opts.Refresh { - return - } - // Check if cache was stopped - if atomic.LoadUint32(&c.stopped) == 1 { - return - } - - // If we're over the attempt minimum, start an exponential backoff. - if wait := backOffWait(attempt); wait > 0 { - time.Sleep(wait) - } - - // If we have a timer, wait for it - if opts.RefreshTimer > 0 { - time.Sleep(opts.RefreshTimer) - } - - // Trigger. The "allowNew" field is false because in the time we were - // waiting to refresh we may have expired and got evicted. If that - // happened, we don't want to create a new entry. - c.fetch(t, key, r, false, attempt, 0, true, true) -} - // runExpiryLoop is a blocking function that watches the expiration // heap and invalidates entries that have expired. func (c *Cache) runExpiryLoop() { @@ -746,6 +797,7 @@ if wasStopped == 0 { // First time only, close stop chan close(c.stopCh) + c.rateLimitCancel() } return nil } @@ -756,18 +808,19 @@ // AutoEncrypt.TLS is turned on. The cache itself cannot fetch that the first // time because it requires a special RPCType. Subsequent runs are fine though. func (c *Cache) Prepopulate(t string, res FetchResult, dc, token, k string) error { - // Check the type that we're prepolulating - c.typesLock.RLock() - tEntry, ok := c.types[t] - c.typesLock.RUnlock() - if !ok { - return fmt.Errorf("unknown type in cache: %s", t) - } key := makeEntryKey(t, dc, token, k) newEntry := cacheEntry{ - Valid: true, Value: res.Value, State: res.State, Index: res.Index, - FetchedAt: time.Now(), Waiter: make(chan struct{}), - Expiry: &cacheEntryExpiry{Key: key, TTL: tEntry.Opts.LastGetTTL}, + Valid: true, + Value: res.Value, + State: res.State, + Index: res.Index, + FetchedAt: time.Now(), + Waiter: make(chan struct{}), + Expiry: &cacheEntryExpiry{Key: key}, + FetchRateLimiter: rate.NewLimiter( + c.options.EntryFetchRate, + c.options.EntryFetchMaxBurst, + ), } c.entriesLock.Lock() c.entries[key] = newEntry diff -Nru consul-1.7.4+dfsg1/agent/cache/cache_test.go consul-1.8.7+dfsg1/agent/cache/cache_test.go --- consul-1.7.4+dfsg1/agent/cache/cache_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/cache_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package cache import ( + "context" "errors" "fmt" "sort" @@ -9,9 +10,11 @@ "testing" "time" + "github.com/hashicorp/consul/sdk/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "golang.org/x/time/rate" ) // Test a basic Get with no indexes (and therefore no blocking queries). @@ -22,21 +25,21 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type typ.Static(FetchResult{Value: 42}, nil).Times(1) // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) // Get, should not fetch since we already have a satisfying value - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.True(meta.Hit) @@ -55,8 +58,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type fetcherr := fmt.Errorf("error") @@ -64,13 +67,13 @@ // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.Error(err) require.Nil(result) require.False(meta.Hit) // Get, should fetch again since our last fetch was an error - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.Error(err) require.Nil(result) require.False(meta.Hit) @@ -90,8 +93,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type fetcherr := fmt.Errorf("initial error") @@ -104,13 +107,13 @@ // Get, should fetch and get error req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.Error(err) require.Nil(result) require.False(meta.Hit) // Get, should fetch again since our last fetch was an error, but get success - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -151,21 +154,21 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type typ.Static(FetchResult{Value: 42}, nil).Times(2) // Get, should fetch req := TestRequest(t, RequestInfo{Key: ""}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) // Get, should not fetch since we already have a satisfying value - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -182,8 +185,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type triggerCh := make(chan time.Time) @@ -219,8 +222,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Keep track of the keys var keysLock sync.Mutex @@ -269,8 +272,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type triggerCh := make(chan time.Time) @@ -296,6 +299,26 @@ TestCacheGetChResult(t, resultCh, 42) } +func TestCacheGet_cancellation(t *testing.T) { + typ := TestType(t) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) + + typ.Static(FetchResult{Value: 1, Index: 4}, nil).Times(0).WaitUntil(time.After(1 * time.Millisecond)) + + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(50*time.Millisecond)) + // this is just to keep the linter happy + defer cancel() + + result, _, err := c.Get(ctx, "t", TestRequest(t, RequestInfo{ + Key: "hello", MinIndex: 5})) + + require.Nil(t, result) + require.Error(t, err) + testutil.RequireErrorContains(t, err, context.DeadlineExceeded.Error()) +} + // Test a get with an index set will timeout if the fetch doesn't return // anything. func TestCacheGet_blockingIndexTimeout(t *testing.T) { @@ -303,8 +326,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type triggerCh := make(chan time.Time) @@ -339,8 +362,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var retries uint32 @@ -376,8 +399,8 @@ typ := TestType(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) stateCh := make(chan int, 1) @@ -393,7 +416,7 @@ // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -401,7 +424,7 @@ // Get, should not fetch since we already have a satisfying value req = TestRequest(t, RequestInfo{ Key: "hello", MinIndex: 1, Timeout: 100 * time.Millisecond}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -418,7 +441,7 @@ // returns nil and so the previous result is used. req = TestRequest(t, RequestInfo{ Key: "hello", MinIndex: 1, Timeout: 100 * time.Millisecond}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -440,14 +463,15 @@ func TestCacheGet_periodicRefresh(t *testing.T) { t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: true, - RefreshTimer: 100 * time.Millisecond, - RefreshTimeout: 5 * time.Minute, + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + Refresh: true, + RefreshTimer: 100 * time.Millisecond, + QueryTimeout: 5 * time.Minute, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // This is a bit weird, but we do this to ensure that the final // call to the Fetch (if it happens, depends on timing) just blocks. @@ -479,14 +503,15 @@ func TestCacheGet_periodicRefreshMultiple(t *testing.T) { t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: true, - RefreshTimer: 0 * time.Millisecond, - RefreshTimeout: 5 * time.Minute, + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + Refresh: true, + RefreshTimer: 0 * time.Millisecond, + QueryTimeout: 5 * time.Minute, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // This is a bit weird, but we do this to ensure that the final // call to the Fetch (if it happens, depends on timing) just blocks. @@ -527,14 +552,15 @@ func TestCacheGet_periodicRefreshErrorBackoff(t *testing.T) { t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 5 * time.Minute, + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + Refresh: true, + RefreshTimer: 0, + QueryTimeout: 5 * time.Minute, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var retries uint32 @@ -568,14 +594,15 @@ func TestCacheGet_periodicRefreshBadRPCZeroIndexErrorBackoff(t *testing.T) { t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 5 * time.Minute, + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + Refresh: true, + RefreshTimer: 0, + QueryTimeout: 5 * time.Minute, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var retries uint32 @@ -611,14 +638,16 @@ func TestCacheGet_noIndexSetsOne(t *testing.T) { t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 5 * time.Minute, + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + SupportsBlocking: true, + Refresh: true, + RefreshTimer: 0, + QueryTimeout: 5 * time.Minute, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // Simulate "well behaved" RPC with no data yet but returning 1 { @@ -671,15 +700,17 @@ require := require.New(t) - typ := TestType(t) + typ := &MockType{} + timeout := 10 * time.Minute + typ.On("RegisterOptions").Return(RegisterOptions{ + QueryTimeout: timeout, + SupportsBlocking: true, + }) defer typ.AssertExpectations(t) - c := TestCache(t) + c := New(Options{}) // Register the type with a timeout - timeout := 10 * time.Minute - c.RegisterType("t", typ, &RegisterOptions{ - RefreshTimeout: timeout, - }) + c.RegisterType("t", typ) // Configure the type var actual time.Duration @@ -690,7 +721,7 @@ // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -705,21 +736,22 @@ require := require.New(t) - typ := TestType(t) + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + LastGetTTL: 400 * time.Millisecond, + }) defer typ.AssertExpectations(t) - c := TestCache(t) + c := New(Options{}) // Register the type with a timeout - c.RegisterType("t", typ, &RegisterOptions{ - LastGetTTL: 400 * time.Millisecond, - }) + c.RegisterType("t", typ) // Configure the type typ.Static(FetchResult{Value: 42}, nil).Times(2) // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -732,7 +764,7 @@ // Get, should not fetch, verified via the mock assertions above req = TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.True(meta.Hit) @@ -743,7 +775,7 @@ // Get, should fetch req = TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -760,21 +792,22 @@ require := require.New(t) - typ := TestType(t) + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + LastGetTTL: 150 * time.Millisecond, + }) defer typ.AssertExpectations(t) - c := TestCache(t) + c := New(Options{}) // Register the type with a timeout - c.RegisterType("t", typ, &RegisterOptions{ - LastGetTTL: 150 * time.Millisecond, - }) + c.RegisterType("t", typ) // Configure the type typ.Static(FetchResult{Value: 42}, nil).Times(2) // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -787,7 +820,7 @@ // Get, should not fetch req = TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.True(meta.Hit) @@ -797,7 +830,7 @@ // Get, should fetch req = TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) @@ -820,9 +853,9 @@ typ2 := TestType(t) defer typ2.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) - c.RegisterType("t2", typ2, nil) + c := New(Options{}) + c.RegisterType("t", typ) + c.RegisterType("t2", typ2) // Configure the types typ.Static(FetchResult{Value: 100}, nil) @@ -830,21 +863,21 @@ // Get, should fetch req := TestRequest(t, RequestInfo{Key: "foo"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(100, result) require.False(meta.Hit) // Get from t2 with same key, should fetch req = TestRequest(t, RequestInfo{Key: "foo"}) - result, meta, err = c.Get("t2", req) + result, meta, err = c.Get(context.Background(), "t2", req) require.NoError(err) require.Equal(200, result) require.False(meta.Hit) // Get from t again with same key, should cache req = TestRequest(t, RequestInfo{Key: "foo"}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(100, result) require.True(meta.Hit) @@ -862,8 +895,8 @@ func TestCacheGet_partitionDC(t *testing.T) { t.Parallel() - c := TestCache(t) - c.RegisterType("t", &testPartitionType{}, nil) + c := New(Options{}) + c.RegisterType("t", &testPartitionType{}) // Perform multiple gets getCh1 := TestCacheGetCh(t, c, "t", TestRequest(t, RequestInfo{ @@ -881,8 +914,8 @@ func TestCacheGet_partitionToken(t *testing.T) { t.Parallel() - c := TestCache(t) - c.RegisterType("t", &testPartitionType{}, nil) + c := New(Options{}) + c.RegisterType("t", &testPartitionType{}) // Perform multiple gets getCh1 := TestCacheGetCh(t, c, "t", TestRequest(t, RequestInfo{ @@ -907,8 +940,10 @@ }, nil } -func (t *testPartitionType) SupportsBlocking() bool { - return true +func (t *testPartitionType) RegisterOptions() RegisterOptions { + return RegisterOptions{ + SupportsBlocking: true, + } } // Test that background refreshing reports correct Age in failure and happy @@ -918,14 +953,15 @@ require := require.New(t) - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 5 * time.Minute, + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + Refresh: true, + RefreshTimer: 0, + QueryTimeout: 5 * time.Minute, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var index, shouldFail uint64 @@ -961,7 +997,7 @@ time.Sleep(2 * time.Millisecond) // Fetch again, non-blocking - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) require.NoError(err) require.Equal(8, result) require.True(meta.Hit) @@ -981,7 +1017,7 @@ var lastAge time.Duration { - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) require.NoError(err) require.Equal(8, result) require.True(meta.Hit) @@ -992,7 +1028,7 @@ // Wait a bit longer - age should increase by at least this much time.Sleep(5 * time.Millisecond) { - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) require.NoError(err) require.Equal(8, result) require.True(meta.Hit) @@ -1014,7 +1050,7 @@ // the test thread got down here relative to the failures. for attempts := 0; attempts < 50; attempts++ { time.Sleep(100 * time.Millisecond) - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) // Should never error even if background is failing as we have cached value require.NoError(err) require.True(meta.Hit) @@ -1035,13 +1071,14 @@ require := require.New(t) - typ := TestType(t) - defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ Refresh: false, LastGetTTL: 100 * time.Millisecond, }) + defer typ.AssertExpectations(t) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var index uint64 @@ -1066,7 +1103,7 @@ time.Sleep(5 * time.Millisecond) // Fetch again, non-blocking - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) require.NoError(err) require.Equal(8, result) require.True(meta.Hit) @@ -1078,7 +1115,7 @@ time.Sleep(200 * time.Millisecond) { - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) require.NoError(err) require.Equal(8, result) require.False(meta.Hit) @@ -1094,7 +1131,7 @@ time.Sleep(5 * time.Millisecond) // Fetch again, non-blocking - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{Key: "hello"})) + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{Key: "hello"})) require.NoError(err) require.Equal(8, result) require.True(meta.Hit) @@ -1104,7 +1141,7 @@ // Now verify that setting MaxAge results in cache invalidation { - result, meta, err := c.Get("t", TestRequest(t, RequestInfo{ + result, meta, err := c.Get(context.Background(), "t", TestRequest(t, RequestInfo{ Key: "hello", MaxAge: 1 * time.Millisecond, })) @@ -1120,8 +1157,8 @@ t.Parallel() typ := TestTypeNonBlocking(t) - c := TestCache(t) - c.RegisterType("t", typ, nil) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type typ.Static(FetchResult{Value: 42, Index: 1}, nil).Once() @@ -1136,14 +1173,14 @@ // Get, should fetch req := TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err := c.Get("t", req) + result, meta, err := c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.False(meta.Hit) // Get, should not fetch since we have a cached value req = TestRequest(t, RequestInfo{Key: "hello"}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.True(meta.Hit) @@ -1157,7 +1194,7 @@ MinIndex: 1, Timeout: 10 * time.Minute, }) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(42, result) require.True(meta.Hit) @@ -1166,14 +1203,14 @@ // Get with a max age should fetch again req = TestRequest(t, RequestInfo{Key: "hello", MaxAge: 5 * time.Millisecond}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(43, result) require.False(meta.Hit) // Get with a must revalidate should fetch again even without a delay. req = TestRequest(t, RequestInfo{Key: "hello", MustRevalidate: true}) - result, meta, err = c.Get("t", req) + result, meta, err = c.Get(context.Background(), "t", req) require.NoError(err) require.Equal(43, result) require.False(meta.Hit) @@ -1183,3 +1220,134 @@ time.Sleep(20 * time.Millisecond) typ.AssertExpectations(t) } + +// Test a get with an index set will wait until an index that is higher +// is set in the cache. +func TestCacheReload(t *testing.T) { + t.Parallel() + + typ1 := TestType(t) + defer typ1.AssertExpectations(t) + + c := New(Options{EntryFetchRate: rate.Limit(1), EntryFetchMaxBurst: 1}) + c.RegisterType("t1", typ1) + typ1.Mock.On("Fetch", mock.Anything, mock.Anything).Return(FetchResult{Value: 42, Index: 42}, nil).Maybe() + + require.False(t, c.ReloadOptions(Options{EntryFetchRate: rate.Limit(1), EntryFetchMaxBurst: 1}), "Value should not be reloaded") + + _, meta, err := c.Get(context.Background(), "t1", TestRequest(t, RequestInfo{Key: "hello1", MinIndex: uint64(1)})) + require.NoError(t, err) + require.Equal(t, meta.Index, uint64(42)) + + testEntry := func(t *testing.T, doTest func(t *testing.T, entry cacheEntry)) { + c.entriesLock.Lock() + tEntry, ok := c.types["t1"] + require.True(t, ok) + keyName := makeEntryKey("t1", "", "", "hello1") + ok, entryValid, entry := c.getEntryLocked(tEntry, keyName, RequestInfo{}) + require.True(t, ok) + require.True(t, entryValid) + doTest(t, entry) + c.entriesLock.Unlock() + + } + testEntry(t, func(t *testing.T, entry cacheEntry) { + require.Equal(t, entry.FetchRateLimiter.Limit(), rate.Limit(1)) + require.Equal(t, entry.FetchRateLimiter.Burst(), 1) + }) + + // Modify only rateLimit + require.True(t, c.ReloadOptions(Options{EntryFetchRate: rate.Limit(100), EntryFetchMaxBurst: 1})) + testEntry(t, func(t *testing.T, entry cacheEntry) { + require.Equal(t, entry.FetchRateLimiter.Limit(), rate.Limit(100)) + require.Equal(t, entry.FetchRateLimiter.Burst(), 1) + }) + + // Modify only Burst + require.True(t, c.ReloadOptions(Options{EntryFetchRate: rate.Limit(100), EntryFetchMaxBurst: 5})) + testEntry(t, func(t *testing.T, entry cacheEntry) { + require.Equal(t, entry.FetchRateLimiter.Limit(), rate.Limit(100)) + require.Equal(t, entry.FetchRateLimiter.Burst(), 5) + }) + + // Modify only Burst and Limit at the same time + require.True(t, c.ReloadOptions(Options{EntryFetchRate: rate.Limit(1000), EntryFetchMaxBurst: 42})) + + testEntry(t, func(t *testing.T, entry cacheEntry) { + require.Equal(t, entry.FetchRateLimiter.Limit(), rate.Limit(1000)) + require.Equal(t, entry.FetchRateLimiter.Burst(), 42) + }) +} + +// TestCacheThrottle checks the assumptions for the cache throttling. It sets +// up a cache with Options{EntryFetchRate: 10.0, EntryFetchMaxBurst: 1}, which +// allows for 10req/s, or one request every 100ms. +// It configures two different cache types with each 3 updates. Each type has +// its own rate limiter which starts initially full, and we expect the +// following requests when creating blocking queries against both waiting for +// the third update: +// at ~0ms: typ1 and typ2 receive first value and are blocked until +// ~100ms: typ1 and typ2 receive second value and are blocked until +// ~200ms: typ1 and typ2 receive third value which we check +// +// This test will verify waiting with a blocking query for the last update will +// block for 190ms and only afterwards have the expected result. +// It demonstrates the ratelimiting waits for the expected amount of time and +// also that each type has its own ratelimiter, because results for both types +// are arriving at similar times, which wouldn't be the case if they use a +// shared limiter. +func TestCacheThrottle(t *testing.T) { + t.Parallel() + + typ1 := TestType(t) + typ2 := TestType(t) + defer typ1.AssertExpectations(t) + defer typ2.AssertExpectations(t) + + c := New(Options{EntryFetchRate: 10.0, EntryFetchMaxBurst: 1}) + c.RegisterType("t1", typ1) + c.RegisterType("t2", typ2) + + // Configure the type + typ1.Static(FetchResult{Value: 1, Index: 4}, nil).Once() + typ1.Static(FetchResult{Value: 12, Index: 5}, nil).Once() + typ1.Static(FetchResult{Value: 42, Index: 6}, nil).Once() + + typ2.Static(FetchResult{Value: 1, Index: 4}, nil).Once() + typ2.Static(FetchResult{Value: 12, Index: 5}, nil).Once() + typ2.Static(FetchResult{Value: 43, Index: 6}, nil).Once() + + result1Ch := TestCacheGetCh(t, c, "t1", TestRequest(t, RequestInfo{ + Key: "hello1", MinIndex: 5})) + + result2Ch := TestCacheGetCh(t, c, "t2", TestRequest(t, RequestInfo{ + Key: "hello2", MinIndex: 5})) + + select { + case <-result1Ch: + t.Fatal("result1Ch should block") + case <-result2Ch: + t.Fatal("result2Ch should block") + case <-time.After(190 * time.Millisecond): + } + + after := time.After(30 * time.Millisecond) + var res1, res2 bool +OUT: + for { + select { + case result := <-result1Ch: + require.Equal(t, 42, result) + + res1 = true + case result := <-result2Ch: + require.Equal(t, 43, result) + res2 = true + case <-after: + t.Fatal("shouldn't block that long") + } + if res1 && res2 { + break OUT + } + } +} diff -Nru consul-1.7.4+dfsg1/agent/cache/entry.go consul-1.8.7+dfsg1/agent/cache/entry.go --- consul-1.7.4+dfsg1/agent/cache/entry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/entry.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,8 @@ import ( "container/heap" "time" + + "golang.org/x/time/rate" ) // cacheEntry stores a single cache entry. @@ -41,21 +43,22 @@ // background request has be blocking for at least 5 seconds, which ever // happens first. RefreshLostContact time.Time + // FetchRateLimiter limits the rate at which fetch is called for this entry. + FetchRateLimiter *rate.Limiter } // cacheEntryExpiry contains the expiration information for a cache // entry. Any modifications to this struct should be done only while // the Cache entriesLock is held. type cacheEntryExpiry struct { - Key string // Key in the cache map - Expires time.Time // Time when entry expires (monotonic clock) - TTL time.Duration // TTL for this entry to extend when resetting - HeapIndex int // Index in the heap + Key string // Key in the cache map + Expires time.Time // Time when entry expires (monotonic clock) + HeapIndex int // Index in the heap } -// Reset resets the expiration to be the ttl duration from now. -func (e *cacheEntryExpiry) Reset() { - e.Expires = time.Now().Add(e.TTL) +// Update the expiry to d time from now. +func (e *cacheEntryExpiry) Update(d time.Duration) { + e.Expires = time.Now().Add(d) } // expiryHeap is a heap implementation that stores information about diff -Nru consul-1.7.4+dfsg1/agent/cache/mock_Request.go consul-1.8.7+dfsg1/agent/cache/mock_Request.go --- consul-1.7.4+dfsg1/agent/cache/mock_Request.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/mock_Request.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,5 @@ -// Code generated by mockery v1.0.0 +// Code generated by mockery v1.0.0. DO NOT EDIT. + package cache import mock "github.com/stretchr/testify/mock" diff -Nru consul-1.7.4+dfsg1/agent/cache/mock_Type.go consul-1.8.7+dfsg1/agent/cache/mock_Type.go --- consul-1.7.4+dfsg1/agent/cache/mock_Type.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/mock_Type.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,5 @@ // Code generated by mockery v1.0.0. DO NOT EDIT. + package cache import mock "github.com/stretchr/testify/mock" @@ -29,15 +30,15 @@ return r0, r1 } -// SupportsBlocking provides a mock function with given fields: -func (_m *MockType) SupportsBlocking() bool { +// RegisterOptions provides a mock function with given fields: +func (_m *MockType) RegisterOptions() RegisterOptions { ret := _m.Called() - var r0 bool - if rf, ok := ret.Get(0).(func() bool); ok { + var r0 RegisterOptions + if rf, ok := ret.Get(0).(func() RegisterOptions); ok { r0 = rf() } else { - r0 = ret.Get(0).(bool) + r0 = ret.Get(0).(RegisterOptions) } return r0 diff -Nru consul-1.7.4+dfsg1/agent/cache/testing.go consul-1.8.7+dfsg1/agent/cache/testing.go --- consul-1.7.4+dfsg1/agent/cache/testing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package cache import ( + "context" "reflect" "time" @@ -9,19 +10,13 @@ "github.com/stretchr/testify/require" ) -// TestCache returns a Cache instance configuring for testing. -func TestCache(t testing.T) *Cache { - // Simple but lets us do some fine-tuning later if we want to. - return New(nil) -} - // TestCacheGetCh returns a channel that returns the result of the Get call. // This is useful for testing timing and concurrency with Get calls. Any // error will be logged, so the result value should always be asserted. func TestCacheGetCh(t testing.T, c *Cache, typ string, r Request) <-chan interface{} { resultCh := make(chan interface{}) go func() { - result, _, err := c.Get(typ, r) + result, _, err := c.Get(context.Background(), typ, r) if err != nil { t.Logf("Error: %s", err) close(resultCh) @@ -65,7 +60,7 @@ } got := make([]UpdateEvent, 0, expectLen) - timeoutCh := time.After(50 * time.Millisecond) + timeoutCh := time.After(75 * time.Millisecond) OUT: for { @@ -79,7 +74,7 @@ } case <-timeoutCh: - t.Fatalf("got %d results on chan in 50ms, want %d", len(got), expectLen) + t.Fatalf("timeout while waiting for result: got %d results on chan, want %d", len(got), expectLen) } } @@ -96,20 +91,21 @@ return req } -// TestType returns a MockType that can be used to setup expectations -// on data fetching. +// TestType returns a MockType that sets default RegisterOptions. func TestType(t testing.T) *MockType { - return testTypeInternal(t, true) + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ + SupportsBlocking: true, + }) + return typ } // TestTypeNonBlocking returns a MockType that returns false to SupportsBlocking. func TestTypeNonBlocking(t testing.T) *MockType { - return testTypeInternal(t, false) -} - -func testTypeInternal(t testing.T, enableBlocking bool) *MockType { typ := &MockType{} - typ.On("SupportsBlocking").Return(enableBlocking).Maybe() + typ.On("RegisterOptions").Return(RegisterOptions{ + SupportsBlocking: false, + }) return typ } diff -Nru consul-1.7.4+dfsg1/agent/cache/type.go consul-1.8.7+dfsg1/agent/cache/type.go --- consul-1.7.4+dfsg1/agent/cache/type.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/type.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,11 +30,9 @@ // metadata even when there is no result. Fetch(FetchOptions, Request) (FetchResult, error) - // SupportsBlocking should return true if the type supports blocking queries. - // Types that do not support blocking queries will not be able to use - // background refresh nor will the cache attempt blocking fetches if the - // client requests them with MinIndex. - SupportsBlocking() bool + // RegisterOptions are used when the type is registered to configure the + // behaviour of cache entries for this type. + RegisterOptions() RegisterOptions } // FetchOptions are various settable options when a Fetch is called. diff -Nru consul-1.7.4+dfsg1/agent/cache/watch.go consul-1.8.7+dfsg1/agent/cache/watch.go --- consul-1.7.4+dfsg1/agent/cache/watch.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/watch.go 2020-12-10 21:46:52.000000000 +0000 @@ -50,30 +50,34 @@ // value that allows them to disambiguate between events in the returned chan // when sharing a chan between multiple cache entries. If the chan is closed, // the notify loop will terminate. -func (c *Cache) Notify(ctx context.Context, t string, r Request, - correlationID string, ch chan<- UpdateEvent) error { - - // Get the type that we're fetching +func (c *Cache) Notify( + ctx context.Context, + t string, + r Request, + correlationID string, + ch chan<- UpdateEvent, +) error { c.typesLock.RLock() tEntry, ok := c.types[t] c.typesLock.RUnlock() if !ok { return fmt.Errorf("unknown type in cache: %s", t) } - if tEntry.Type.SupportsBlocking() { - go c.notifyBlockingQuery(ctx, t, r, correlationID, ch) - } else { - info := r.CacheInfo() - if info.MaxAge == 0 { - return fmt.Errorf("Cannot use Notify for polling cache types without specifying the MaxAge") - } - go c.notifyPollingQuery(ctx, t, r, correlationID, ch, info.MaxAge) + + if tEntry.Opts.SupportsBlocking { + go c.notifyBlockingQuery(ctx, newGetOptions(tEntry, r), correlationID, ch) + return nil } + info := r.CacheInfo() + if info.MaxAge == 0 { + return fmt.Errorf("Cannot use Notify for polling cache types without specifying the MaxAge") + } + go c.notifyPollingQuery(ctx, newGetOptions(tEntry, r), correlationID, ch) return nil } -func (c *Cache) notifyBlockingQuery(ctx context.Context, t string, r Request, correlationID string, ch chan<- UpdateEvent) { +func (c *Cache) notifyBlockingQuery(ctx context.Context, r getOptions, correlationID string, ch chan<- UpdateEvent) { // Always start at 0 index to deliver the initial (possibly currently cached // value). index := uint64(0) @@ -86,7 +90,8 @@ } // Blocking request - res, meta, err := c.getWithIndex(t, r, index) + r.Info.MinIndex = index + res, meta, err := c.getWithIndex(ctx, r) // Check context hasn't been canceled if ctx.Err() != nil { @@ -107,10 +112,10 @@ index = meta.Index } + var wait time.Duration // Handle errors with backoff. Badly behaved blocking calls that returned // a zero index are considered as failures since we need to not get stuck // in a busy loop. - wait := 0 * time.Second if err == nil && meta.Index > 0 { failures = 0 } else { @@ -132,7 +137,7 @@ } } -func (c *Cache) notifyPollingQuery(ctx context.Context, t string, r Request, correlationID string, ch chan<- UpdateEvent, maxAge time.Duration) { +func (c *Cache) notifyPollingQuery(ctx context.Context, r getOptions, correlationID string, ch chan<- UpdateEvent) { index := uint64(0) failures := uint(0) @@ -145,7 +150,8 @@ } // Make the request - res, meta, err := c.getWithIndex(t, r, index) + r.Info.MinIndex = index + res, meta, err := c.getWithIndex(ctx, r) // Check context hasn't been canceled if ctx.Err() != nil { @@ -173,6 +179,7 @@ failures++ } + var wait time.Duration // Determining how long to wait before the next poll is complicated. // First off the happy path and the error path waits are handled distinctly // @@ -194,23 +201,13 @@ // as this would eliminate the single-flighting of these requests in the cache and // the efficiencies gained by it. if failures > 0 { - - errWait := backOffWait(failures) - select { - case <-time.After(errWait): - case <-ctx.Done(): - return - } + wait = backOffWait(failures) } else { - // Default to immediately re-poll. This only will happen if the data - // we just got out of the cache is already too stale - pollWait := 0 * time.Second - // Calculate when the cached data's Age will get too stale and // need to be re-queried. When the data's Age already exceeds the // maxAge the pollWait value is left at 0 to immediately re-poll - if meta.Age <= maxAge { - pollWait = maxAge - meta.Age + if meta.Age <= r.Info.MaxAge { + wait = r.Info.MaxAge - meta.Age } // Add a small amount of random jitter to the polling time. One @@ -222,13 +219,13 @@ // and then immediately have to re-fetch again. That wouldn't // be terrible but it would expend a bunch more cpu cycles when // we can definitely avoid it. - pollWait += lib.RandomStagger(maxAge / 16) + wait += lib.RandomStagger(r.Info.MaxAge / 16) + } - select { - case <-time.After(pollWait): - case <-ctx.Done(): - return - } + select { + case <-time.After(wait): + case <-ctx.Done(): + return } } } diff -Nru consul-1.7.4+dfsg1/agent/cache/watch_test.go consul-1.8.7+dfsg1/agent/cache/watch_test.go --- consul-1.7.4+dfsg1/agent/cache/watch_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache/watch_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,11 +17,10 @@ t.Parallel() typ := TestType(t) + typ.On("RegisterOptions").Return(RegisterOptions{}) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: false, - }) + c := New(Options{}) + c.RegisterType("t", typ) // Setup triggers to control when "updates" should be delivered trigger := make([]chan time.Time, 5) @@ -166,10 +165,8 @@ typ := TestTypeNonBlocking(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: false, - }) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type typ.Static(FetchResult{Value: 1, Index: 1}, nil).Once().Run(func(args mock.Arguments) { @@ -249,7 +246,7 @@ // wait for the next batch of responses events := make([]UpdateEvent, 0) // At least 110ms is needed to allow for the jitter - timeout := time.After(150 * time.Millisecond) + timeout := time.After(220 * time.Millisecond) for i := 0; i < 2; i++ { select { @@ -261,7 +258,7 @@ } require.Equal(events[0].Result, 42) - require.Equal(events[0].Meta.Hit, false) + require.Equal(events[0].Meta.Hit && events[1].Meta.Hit, false) require.Equal(events[0].Meta.Index, uint64(1)) require.True(events[0].Meta.Age < 50*time.Millisecond) require.NoError(events[0].Err) @@ -280,11 +277,10 @@ t.Parallel() typ := TestType(t) + typ.On("RegisterOptions").Return(RegisterOptions{}) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: false, - }) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var retries uint32 @@ -344,10 +340,8 @@ typ := TestTypeNonBlocking(t) defer typ.AssertExpectations(t) - c := TestCache(t) - c.RegisterType("t", typ, &RegisterOptions{ - Refresh: false, - }) + c := New(Options{}) + c.RegisterType("t", typ) // Configure the type var retries uint32 diff -Nru consul-1.7.4+dfsg1/agent/cache-types/catalog_datacenters.go consul-1.8.7+dfsg1/agent/cache-types/catalog_datacenters.go --- consul-1.7.4+dfsg1/agent/cache-types/catalog_datacenters.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/catalog_datacenters.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ // Datacenters supports fetching discovering all the known datacenters type CatalogDatacenters struct { + RegisterOptionsNoRefresh RPC RPC } @@ -75,7 +76,3 @@ return result, nil } - -func (c *CatalogDatacenters) SupportsBlocking() bool { - return false -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/catalog_datacenters_test.go consul-1.8.7+dfsg1/agent/cache-types/catalog_datacenters_test.go --- consul-1.7.4+dfsg1/agent/cache-types/catalog_datacenters_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/catalog_datacenters_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -54,33 +54,28 @@ // Fetch first time result, err := typ.Fetch(cache.FetchOptions{}, &structs.DatacentersRequest{}) - result2, err := typ.Fetch(cache.FetchOptions{LastResult: &result}, &structs.DatacentersRequest{QueryOptions: structs.QueryOptions{MustRevalidate: true}}) - result3, err := typ.Fetch(cache.FetchOptions{LastResult: &result2}, &structs.DatacentersRequest{QueryOptions: structs.QueryOptions{MustRevalidate: true}}) - - // make sure it was called the right number of times - rpc.AssertExpectations(t) - - // make sure the first result was correct require.NoError(t, err) require.Equal(t, result, cache.FetchResult{ Value: resp, Index: 1, }) - // validate the second result + result2, err := typ.Fetch(cache.FetchOptions{LastResult: &result}, &structs.DatacentersRequest{QueryOptions: structs.QueryOptions{MustRevalidate: true}}) require.NoError(t, err) require.Equal(t, result2, cache.FetchResult{ Value: resp2, Index: 2, }) - // validate the third result + result3, err := typ.Fetch(cache.FetchOptions{LastResult: &result2}, &structs.DatacentersRequest{QueryOptions: structs.QueryOptions{MustRevalidate: true}}) require.NoError(t, err) require.Equal(t, result3, cache.FetchResult{ Value: resp3, Index: 3, }) + // make sure it was called the right number of times + rpc.AssertExpectations(t) } func TestDatacenters_badReqType(t *testing.T) { diff -Nru consul-1.7.4+dfsg1/agent/cache-types/catalog_list_services.go consul-1.8.7+dfsg1/agent/cache-types/catalog_list_services.go --- consul-1.7.4+dfsg1/agent/cache-types/catalog_list_services.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/catalog_list_services.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ // CatalogListServices supports fetching discovering service names via the catalog. type CatalogListServices struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -49,7 +50,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *CatalogListServices) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/catalog_service_list.go consul-1.8.7+dfsg1/agent/cache-types/catalog_service_list.go --- consul-1.7.4+dfsg1/agent/cache-types/catalog_service_list.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/catalog_service_list.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ // CatalogServiceList supports fetching service names via the catalog. type CatalogServiceList struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -49,7 +50,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *CatalogServiceList) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/catalog_service_list_test.go consul-1.8.7+dfsg1/agent/cache-types/catalog_service_list_test.go --- consul-1.7.4+dfsg1/agent/cache-types/catalog_service_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/catalog_service_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,10 +26,10 @@ reply := args.Get(2).(*structs.IndexedServiceList) reply.Services = structs.ServiceList{ - structs.ServiceInfo{ + structs.ServiceName{ Name: "foo", }, - structs.ServiceInfo{ + structs.ServiceName{ Name: "bar", }, } diff -Nru consul-1.7.4+dfsg1/agent/cache-types/catalog_services.go consul-1.8.7+dfsg1/agent/cache-types/catalog_services.go --- consul-1.7.4+dfsg1/agent/cache-types/catalog_services.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/catalog_services.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,13 +13,14 @@ // CatalogServices supports fetching discovering service instances via the // catalog. type CatalogServices struct { + RegisterOptionsBlockingRefresh RPC RPC } func (c *CatalogServices) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { var result cache.FetchResult - // The request should be a DCSpecificRequest. + // The request should be a ServiceSpecificRequest. reqReal, ok := req.(*structs.ServiceSpecificRequest) if !ok { return result, fmt.Errorf( @@ -50,7 +51,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *CatalogServices) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/config_entry.go consul-1.8.7+dfsg1/agent/cache-types/config_entry.go --- consul-1.7.4+dfsg1/agent/cache-types/config_entry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/config_entry.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,10 +8,14 @@ ) // Recommended name for registration. -const ConfigEntriesName = "config-entries" +const ( + ConfigEntriesName = "config-entries" + ConfigEntryName = "config-entry" +) // ConfigEntries supports fetching discovering configuration entries type ConfigEntries struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -50,6 +54,43 @@ return result, nil } -func (c *ConfigEntries) SupportsBlocking() bool { - return true +// ConfigEntry supports fetching a single configuration entry. +type ConfigEntry struct { + RegisterOptionsBlockingRefresh + RPC RPC +} + +func (c *ConfigEntry) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { + var result cache.FetchResult + + // The request should be a ConfigEntryQuery. + reqReal, ok := req.(*structs.ConfigEntryQuery) + if !ok { + return result, fmt.Errorf( + "Internal cache failure: request wrong type: %T", req) + } + + // Lightweight copy this object so that manipulating QueryOptions doesn't race. + dup := *reqReal + reqReal = &dup + + // Set the minimum query index to our current index so we block + reqReal.QueryOptions.MinQueryIndex = opts.MinIndex + reqReal.QueryOptions.MaxQueryTime = opts.Timeout + + // Always allow stale - there's no point in hitting leader if the request is + // going to be served from cache and endup arbitrarily stale anyway. This + // allows cached service-discover to automatically read scale across all + // servers too. + reqReal.AllowStale = true + + // Fetch + var reply structs.ConfigEntryResponse + if err := c.RPC.RPC("ConfigEntry.Get", reqReal, &reply); err != nil { + return result, err + } + + result.Value = &reply + result.Index = reply.QueryMeta.Index + return result, nil } diff -Nru consul-1.7.4+dfsg1/agent/cache-types/config_entry_test.go consul-1.8.7+dfsg1/agent/cache-types/config_entry_test.go --- consul-1.7.4+dfsg1/agent/cache-types/config_entry_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/config_entry_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -53,6 +53,50 @@ rpc.AssertExpectations(t) } +func TestConfigEntry(t *testing.T) { + rpc := TestRPC(t) + typ := &ConfigEntry{RPC: rpc} + + // Expect the proper RPC call. This also sets the expected value + // since that is return-by-pointer in the arguments. + var resp *structs.ConfigEntryResponse + rpc.On("RPC", "ConfigEntry.Get", mock.Anything, mock.Anything).Return(nil). + Run(func(args mock.Arguments) { + req := args.Get(1).(*structs.ConfigEntryQuery) + require.Equal(t, uint64(24), req.QueryOptions.MinQueryIndex) + require.Equal(t, 1*time.Second, req.QueryOptions.MaxQueryTime) + require.True(t, req.AllowStale) + require.Equal(t, structs.ServiceResolver, req.Kind) + require.Equal(t, "foo", req.Name) + + entry := &structs.ServiceResolverConfigEntry{ + Name: "foo", + Kind: structs.ServiceResolver, + } + reply := args.Get(2).(*structs.ConfigEntryResponse) + reply.Entry = entry + reply.QueryMeta.Index = 48 + resp = reply + }) + + // Fetch + resultA, err := typ.Fetch(cache.FetchOptions{ + MinIndex: 24, + Timeout: 1 * time.Second, + }, &structs.ConfigEntryQuery{ + Datacenter: "dc1", + Kind: structs.ServiceResolver, + Name: "foo", + }) + require.NoError(t, err) + require.Equal(t, cache.FetchResult{ + Value: resp, + Index: 48, + }, resultA) + + rpc.AssertExpectations(t) +} + func TestConfigEntries_badReqType(t *testing.T) { rpc := TestRPC(t) typ := &ConfigEntries{RPC: rpc} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/connect_ca_leaf.go consul-1.8.7+dfsg1/agent/cache-types/connect_ca_leaf.go --- consul-1.7.4+dfsg1/agent/cache-types/connect_ca_leaf.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/connect_ca_leaf.go 2020-12-10 21:46:52.000000000 +0000 @@ -50,6 +50,7 @@ // ConnectCALeaf supports fetching and generating Connect leaf // certificates. type ConnectCALeaf struct { + RegisterOptionsBlockingNoRefresh caIndex uint64 // Current index for CA roots // rootWatchMu protects access to the rootWatchSubscribers map and @@ -120,6 +121,15 @@ consecutiveRateLimitErrs int } +func ConnectCALeafSuccess(authorityKeyID string) interface{} { + return fetchState{ + authorityKeyID: authorityKeyID, + forceExpireAfter: time.Time{}, + consecutiveRateLimitErrs: 0, + activeRootRotationStart: time.Time{}, + } +} + // fetchStart is called on each fetch that is about to block and wait for // changes to the leaf. It subscribes a chan to receive updates from the shared // root watcher and triggers root watcher if it's not already running. @@ -468,7 +478,9 @@ } func (c *ConnectCALeaf) rootsFromCache() (*structs.IndexedCARoots, error) { - rawRoots, _, err := c.Cache.Get(ConnectCARootName, &structs.DCSpecificRequest{ + // Background is fine here because this isn't a blocking query as no index is set. + // Therefore this will just either be a cache hit or return once the non-blocking query returns. + rawRoots, _, err := c.Cache.Get(context.Background(), ConnectCARootName, &structs.DCSpecificRequest{ Datacenter: c.Datacenter, }) if err != nil { @@ -520,6 +532,7 @@ Service: req.Service, } commonName = connect.ServiceCN(req.Service, req.TargetNamespace(), roots.TrustDomain) + dnsNames = append(dnsNames, req.DNSSAN...) } else if req.Agent != "" { id = &connect.SpiffeIDAgent{ Host: roots.TrustDomain, @@ -528,7 +541,7 @@ } commonName = connect.AgentCN(req.Agent, roots.TrustDomain) dnsNames = append([]string{"localhost"}, req.DNSSAN...) - ipAddresses = append([]net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::")}, req.IPSAN...) + ipAddresses = append([]net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::1")}, req.IPSAN...) } else { return result, errors.New("URI must be either service or agent") } @@ -629,10 +642,6 @@ return result, nil } -func (c *ConnectCALeaf) SupportsBlocking() bool { - return true -} - // ConnectCALeafRequest is the cache.Request implementation for the // ConnectCALeaf cache type. This is implemented here and not in structs // since this is only used for cache-related requests and not forwarded @@ -660,6 +669,8 @@ v, err := hashstructure.Hash([]interface{}{ r.Service, r.EnterpriseMeta, + r.DNSSAN, + r.IPSAN, }, nil) if err == nil { return fmt.Sprintf("service:%d", v) diff -Nru consul-1.7.4+dfsg1/agent/cache-types/connect_ca_leaf_test.go consul-1.8.7+dfsg1/agent/cache-types/connect_ca_leaf_test.go --- consul-1.7.4+dfsg1/agent/cache-types/connect_ca_leaf_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/connect_ca_leaf_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,10 @@ package cachetype import ( + "crypto/x509" + "encoding/pem" "fmt" + "net" "strings" "sync/atomic" "testing" @@ -965,6 +968,68 @@ } } +func TestConnectCALeaf_DNSSANForService(t *testing.T) { + t.Parallel() + + require := require.New(t) + rpc := TestRPC(t) + defer rpc.AssertExpectations(t) + + typ, rootsCh := testCALeafType(t, rpc) + defer close(rootsCh) + + caRoot := connect.TestCA(t, nil) + caRoot.Active = true + rootsCh <- structs.IndexedCARoots{ + ActiveRootID: caRoot.ID, + TrustDomain: "fake-trust-domain.consul", + Roots: []*structs.CARoot{ + caRoot, + }, + QueryMeta: structs.QueryMeta{Index: 1}, + } + + // Instrument ConnectCA.Sign to + var caReq *structs.CASignRequest + rpc.On("RPC", "ConnectCA.Sign", mock.Anything, mock.Anything).Return(nil). + Run(func(args mock.Arguments) { + reply := args.Get(2).(*structs.IssuedCert) + leaf, _ := connect.TestLeaf(t, "web", caRoot) + reply.CertPEM = leaf + + caReq = args.Get(1).(*structs.CASignRequest) + }) + + opts := cache.FetchOptions{MinIndex: 0, Timeout: 10 * time.Second} + req := &ConnectCALeafRequest{ + Datacenter: "dc1", + Service: "web", + DNSSAN: []string{"test.example.com"}, + } + _, err := typ.Fetch(opts, req) + require.NoError(err) + + pemBlock, _ := pem.Decode([]byte(caReq.CSR)) + csr, err := x509.ParseCertificateRequest(pemBlock.Bytes) + require.NoError(err) + require.Equal(csr.DNSNames, []string{"test.example.com"}) +} + +// testConnectCaRoot wraps ConnectCARoot to disable refresh so that the gated +// channel controls the request directly. Otherwise, we get background refreshes and +// it screws up the ordering of the channel reads of the testGatedRootsRPC +// implementation. +type testConnectCaRoot struct { + ConnectCARoot +} + +func (r testConnectCaRoot) RegisterOptions() cache.RegisterOptions { + return cache.RegisterOptions{ + Refresh: false, + SupportsBlocking: true, + } +} + // testCALeafType returns a *ConnectCALeaf that is pre-configured to // use the given RPC implementation for "ConnectCA.Sign" operations. func testCALeafType(t *testing.T, rpc RPC) (*ConnectCALeaf, chan structs.IndexedCARoots) { @@ -975,15 +1040,10 @@ rootsRPC := &testGatedRootsRPC{ValueCh: rootsCh} // Create a cache - c := cache.TestCache(t) - c.RegisterType(ConnectCARootName, &ConnectCARoot{RPC: rootsRPC}, &cache.RegisterOptions{ - // Disable refresh so that the gated channel controls the - // request directly. Otherwise, we get background refreshes and - // it screws up the ordering of the channel reads of the - // testGatedRootsRPC implementation. - Refresh: false, + c := cache.New(cache.Options{}) + c.RegisterType(ConnectCARootName, &testConnectCaRoot{ + ConnectCARoot: ConnectCARoot{RPC: rootsRPC}, }) - // Create the leaf type return &ConnectCALeaf{ RPC: rpc, @@ -1022,12 +1082,26 @@ r1 := ConnectCALeafRequest{Service: "web"} r2 := ConnectCALeafRequest{Service: "api"} + r3 := ConnectCALeafRequest{DNSSAN: []string{"a.com"}} + r4 := ConnectCALeafRequest{DNSSAN: []string{"b.com"}} + + r5 := ConnectCALeafRequest{IPSAN: []net.IP{net.ParseIP("192.168.4.139")}} + r6 := ConnectCALeafRequest{IPSAN: []net.IP{net.ParseIP("192.168.4.140")}} // hashstructure will hash the service name + ent meta to produce this key r1Key := r1.Key() r2Key := r2.Key() + + r3Key := r3.Key() + r4Key := r4.Key() + + r5Key := r5.Key() + r6Key := r6.Key() + require.True(t, strings.HasPrefix(r1Key, "service:"), "Key %s does not start with service:", r1Key) require.True(t, strings.HasPrefix(r2Key, "service:"), "Key %s does not start with service:", r2Key) require.NotEqual(t, r1Key, r2Key, "Cache keys for different services are not equal") + require.NotEqual(t, r3Key, r4Key, "Cache keys for different DNSSAN are not equal") + require.NotEqual(t, r5Key, r6Key, "Cache keys for different IPSAN are not equal") r := ConnectCALeafRequest{Agent: "abc"} require.Equal(t, "agent:abc", r.Key()) } diff -Nru consul-1.7.4+dfsg1/agent/cache-types/connect_ca_root.go consul-1.8.7+dfsg1/agent/cache-types/connect_ca_root.go --- consul-1.7.4+dfsg1/agent/cache-types/connect_ca_root.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/connect_ca_root.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,6 +14,7 @@ // straightforward cache type since it only has to block on the given // index and return the data. type ConnectCARoot struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -45,7 +46,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *ConnectCARoot) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/discovery_chain.go consul-1.8.7+dfsg1/agent/cache-types/discovery_chain.go --- consul-1.7.4+dfsg1/agent/cache-types/discovery_chain.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/discovery_chain.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,7 @@ // CompiledDiscoveryChain supports fetching the complete discovery chain for a // service and caching its compilation. type CompiledDiscoveryChain struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -50,7 +51,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *CompiledDiscoveryChain) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/federation_state_list_gateways.go consul-1.8.7+dfsg1/agent/cache-types/federation_state_list_gateways.go --- consul-1.7.4+dfsg1/agent/cache-types/federation_state_list_gateways.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/federation_state_list_gateways.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +package cachetype + +import ( + "fmt" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/structs" +) + +// Recommended name for registration. +const FederationStateListMeshGatewaysName = "federation-state-list-mesh-gateways" + +// FederationState supports fetching federation states. +type FederationStateListMeshGateways struct { + RegisterOptionsBlockingRefresh + RPC RPC +} + +func (c *FederationStateListMeshGateways) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { + var result cache.FetchResult + + // The request should be a DCSpecificRequest. + reqReal, ok := req.(*structs.DCSpecificRequest) + if !ok { + return result, fmt.Errorf( + "Internal cache failure: request wrong type: %T", req) + } + + // Lightweight copy this object so that manipulating QueryOptions doesn't race. + dup := *reqReal + reqReal = &dup + + // Set the minimum query index to our current index so we block + reqReal.QueryOptions.MinQueryIndex = opts.MinIndex + reqReal.QueryOptions.MaxQueryTime = opts.Timeout + + // Always allow stale - there's no point in hitting leader if the request is + // going to be served from cache and end up arbitrarily stale anyway. This + // allows cached service-discover to automatically read scale across all + // servers too. + reqReal.AllowStale = true + + // Fetch + var reply structs.DatacenterIndexedCheckServiceNodes + if err := c.RPC.RPC("FederationState.ListMeshGateways", reqReal, &reply); err != nil { + return result, err + } + + result.Value = &reply + result.Index = reply.QueryMeta.Index + return result, nil +} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/federation_state_list_gateways_test.go consul-1.8.7+dfsg1/agent/cache-types/federation_state_list_gateways_test.go --- consul-1.7.4+dfsg1/agent/cache-types/federation_state_list_gateways_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/federation_state_list_gateways_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,107 @@ +package cachetype + +import ( + "testing" + "time" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestFederationStateListMeshGateways(t *testing.T) { + rpc := TestRPC(t) + typ := &FederationStateListMeshGateways{RPC: rpc} + + // Expect the proper RPC call. This also sets the expected value + // since that is return-by-pointer in the arguments. + var resp *structs.DatacenterIndexedCheckServiceNodes + rpc.On("RPC", "FederationState.ListMeshGateways", mock.Anything, mock.Anything).Return(nil). + Run(func(args mock.Arguments) { + req := args.Get(1).(*structs.DCSpecificRequest) + require.Equal(t, uint64(24), req.QueryOptions.MinQueryIndex) + require.Equal(t, 1*time.Second, req.QueryOptions.MaxQueryTime) + require.True(t, req.AllowStale) + + reply := args.Get(2).(*structs.DatacenterIndexedCheckServiceNodes) + reply.DatacenterNodes = map[string]structs.CheckServiceNodes{ + "dc9": []structs.CheckServiceNode{ + { + Node: &structs.Node{ + ID: "664bac9f-4de7-4f1b-ad35-0e5365e8f329", + Node: "gateway1", + Datacenter: "dc9", + Address: "1.2.3.4", + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: 1111, + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + { + Node: &structs.Node{ + ID: "3fb9a696-8209-4eee-a1f7-48600deb9716", + Node: "gateway2", + Datacenter: "dc9", + Address: "9.8.7.6", + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: 2222, + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + }, + } + reply.QueryMeta.Index = 48 + resp = reply + }) + + // Fetch + resultA, err := typ.Fetch(cache.FetchOptions{ + MinIndex: 24, + Timeout: 1 * time.Second, + }, &structs.DCSpecificRequest{ + Datacenter: "dc1", + }) + require.NoError(t, err) + require.Equal(t, cache.FetchResult{ + Value: resp, + Index: 48, + }, resultA) + + rpc.AssertExpectations(t) +} + +func TestFederationStateListMeshGateways_badReqType(t *testing.T) { + rpc := TestRPC(t) + typ := &FederationStateListMeshGateways{RPC: rpc} + + // Fetch + _, err := typ.Fetch(cache.FetchOptions{}, cache.TestRequest( + t, cache.RequestInfo{Key: "foo", MinIndex: 64})) + require.Error(t, err) + require.Contains(t, err.Error(), "wrong type") + rpc.AssertExpectations(t) +} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/gateway_services.go consul-1.8.7+dfsg1/agent/cache-types/gateway_services.go --- consul-1.7.4+dfsg1/agent/cache-types/gateway_services.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/gateway_services.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +package cachetype + +import ( + "fmt" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/structs" +) + +// Recommended name for registration. +const GatewayServicesName = "gateway-services" + +// GatewayUpstreams supports fetching upstreams for a given gateway name. +type GatewayServices struct { + RegisterOptionsBlockingRefresh + RPC RPC +} + +func (g *GatewayServices) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { + var result cache.FetchResult + + // The request should be a ServiceSpecificRequest. + reqReal, ok := req.(*structs.ServiceSpecificRequest) + if !ok { + return result, fmt.Errorf( + "Internal cache failure: request wrong type: %T", req) + } + + // Lightweight copy this object so that manipulating QueryOptions doesn't race. + dup := *reqReal + reqReal = &dup + + // Set the minimum query index to our current index so we block + reqReal.QueryOptions.MinQueryIndex = opts.MinIndex + reqReal.QueryOptions.MaxQueryTime = opts.Timeout + + // Always allow stale - there's no point in hitting leader if the request is + // going to be served from cache and end up arbitrarily stale anyway. This + // allows cached service-discover to automatically read scale across all + // servers too. + reqReal.AllowStale = true + + // Fetch + var reply structs.IndexedGatewayServices + if err := g.RPC.RPC("Catalog.GatewayServices", reqReal, &reply); err != nil { + return result, err + } + + result.Value = &reply + result.Index = reply.QueryMeta.Index + return result, nil +} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/gateway_services_test.go consul-1.8.7+dfsg1/agent/cache-types/gateway_services_test.go --- consul-1.7.4+dfsg1/agent/cache-types/gateway_services_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/gateway_services_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,61 @@ +package cachetype + +import ( + "testing" + "time" + + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/structs" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestGatewayServices(t *testing.T) { + rpc := TestRPC(t) + typ := &GatewayServices{RPC: rpc} + + // Expect the proper RPC call. This also sets the expected value + // since that is return-by-pointer in the arguments. + var resp *structs.IndexedGatewayServices + rpc.On("RPC", "Catalog.GatewayServices", mock.Anything, mock.Anything).Return(nil). + Run(func(args mock.Arguments) { + req := args.Get(1).(*structs.ServiceSpecificRequest) + require.Equal(t, uint64(24), req.QueryOptions.MinQueryIndex) + require.Equal(t, 1*time.Second, req.QueryOptions.MaxQueryTime) + require.True(t, req.AllowStale) + require.Equal(t, "foo", req.ServiceName) + + services := structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 1234, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + } + reply := args.Get(2).(*structs.IndexedGatewayServices) + reply.Services = services + reply.QueryMeta.Index = 48 + resp = reply + }) + + // Fetch + resultA, err := typ.Fetch(cache.FetchOptions{ + MinIndex: 24, + Timeout: 1 * time.Second, + }, &structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "foo", + }) + require.NoError(t, err) + require.Equal(t, cache.FetchResult{ + Value: resp, + Index: 48, + }, resultA) + + rpc.AssertExpectations(t) +} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/health_services.go consul-1.8.7+dfsg1/agent/cache-types/health_services.go --- consul-1.7.4+dfsg1/agent/cache-types/health_services.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/health_services.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,7 @@ // HealthServices supports fetching discovering service instances via the // catalog. type HealthServices struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -50,7 +51,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *HealthServices) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/intention_match.go consul-1.8.7+dfsg1/agent/cache-types/intention_match.go --- consul-1.7.4+dfsg1/agent/cache-types/intention_match.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/intention_match.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ // IntentionMatch supports fetching the intentions via match queries. type IntentionMatch struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -43,7 +44,3 @@ result.Index = reply.Index return result, nil } - -func (c *IntentionMatch) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/node_services.go consul-1.8.7+dfsg1/agent/cache-types/node_services.go --- consul-1.7.4+dfsg1/agent/cache-types/node_services.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/node_services.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,7 @@ // NodeServices supports fetching discovering service instances via the // catalog. type NodeServices struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -50,7 +51,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *NodeServices) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/options.go consul-1.8.7+dfsg1/agent/cache-types/options.go --- consul-1.7.4+dfsg1/agent/cache-types/options.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/options.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +package cachetype + +import ( + "time" + + "github.com/hashicorp/consul/agent/cache" +) + +// RegisterOptionsBlockingRefresh can be embedded into a struct to implement +// part of the agent/cache.Type interface. +// When embedded into a struct it identifies the cache type as one which +// supports blocking, and uses refresh to keep the cache fresh. +type RegisterOptionsBlockingRefresh struct{} + +func (r RegisterOptionsBlockingRefresh) RegisterOptions() cache.RegisterOptions { + return cache.RegisterOptions{ + // Maintain a blocking query, retry dropped connections quickly + Refresh: true, + SupportsBlocking: true, + RefreshTimer: 0 * time.Second, + QueryTimeout: 10 * time.Minute, + } +} + +type RegisterOptionsBlockingNoRefresh struct{} + +func (r RegisterOptionsBlockingNoRefresh) RegisterOptions() cache.RegisterOptions { + return cache.RegisterOptions{ + Refresh: false, + SupportsBlocking: true, + QueryTimeout: 10 * time.Minute, + } +} + +// RegisterOptionsNoRefresh can be embedded into a struct to implement +// part of the agent/cache.Type interface. +// When embedded into a struct it identifies the cache type as one which +// does not support blocking, and should not be refreshed. +type RegisterOptionsNoRefresh struct{} + +func (r RegisterOptionsNoRefresh) RegisterOptions() cache.RegisterOptions { + return cache.RegisterOptions{ + Refresh: false, + SupportsBlocking: false, + } +} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/prepared_query.go consul-1.8.7+dfsg1/agent/cache-types/prepared_query.go --- consul-1.7.4+dfsg1/agent/cache-types/prepared_query.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/prepared_query.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,10 +13,11 @@ // PreparedQuery supports fetching discovering service instances via prepared // queries. type PreparedQuery struct { + RegisterOptionsNoRefresh RPC RPC } -func (c *PreparedQuery) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { +func (c *PreparedQuery) Fetch(_ cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { var result cache.FetchResult // The request should be a PreparedQueryExecuteRequest. @@ -47,8 +48,3 @@ return result, nil } - -func (c *PreparedQuery) SupportsBlocking() bool { - // Prepared queries don't support blocking. - return false -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/resolved_service_config.go consul-1.8.7+dfsg1/agent/cache-types/resolved_service_config.go --- consul-1.7.4+dfsg1/agent/cache-types/resolved_service_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/resolved_service_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,7 @@ // ResolvedServiceConfig supports fetching the config for a service resolved from // the global proxy defaults and the centrally registered service config. type ResolvedServiceConfig struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -50,7 +51,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *ResolvedServiceConfig) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/cache-types/service_checks.go consul-1.8.7+dfsg1/agent/cache-types/service_checks.go --- consul-1.7.4+dfsg1/agent/cache-types/service_checks.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/service_checks.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,6 +24,7 @@ // ServiceHTTPBasedChecks supports fetching discovering checks in the local state type ServiceHTTPChecks struct { + RegisterOptionsBlockingRefresh Agent Agent } @@ -59,7 +60,7 @@ sid := structs.NewServiceID(reqReal.ServiceID, &reqReal.EnterpriseMeta) svcState := c.Agent.LocalState().ServiceState(sid) if svcState == nil { - return "", result, fmt.Errorf("Internal cache failure: service '%s' not in agent state", reqReal.ServiceID) + return "", nil, fmt.Errorf("Internal cache failure: service '%s' not in agent state", reqReal.ServiceID) } // WatchCh will receive updates on service (de)registrations and check (de)registrations @@ -69,12 +70,15 @@ hash, err := hashChecks(reply) if err != nil { - return "", result, fmt.Errorf("Internal cache failure: %v", err) + return "", nil, fmt.Errorf("Internal cache failure: %v", err) } return hash, reply, nil }, ) + if err != nil { + return result, err + } result.Value = resp @@ -91,10 +95,6 @@ return result, nil } -func (c *ServiceHTTPChecks) SupportsBlocking() bool { - return true -} - // ServiceHTTPChecksRequest is the cache.Request implementation for the // ServiceHTTPBasedChecks cache type. This is implemented here and not in structs // since this is only used for cache-related requests and not forwarded diff -Nru consul-1.7.4+dfsg1/agent/cache-types/service_checks_test.go consul-1.8.7+dfsg1/agent/cache-types/service_checks_test.go --- consul-1.7.4+dfsg1/agent/cache-types/service_checks_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/service_checks_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -188,8 +188,8 @@ return m.state } -func (m *mockAgent) LocalBlockingQuery(alwaysBlock bool, hash string, wait time.Duration, - fn func(ws memdb.WatchSet) (string, interface{}, error)) (string, interface{}, error) { +func (m *mockAgent) LocalBlockingQuery(_ bool, _ string, _ time.Duration, + _ func(ws memdb.WatchSet) (string, interface{}, error)) (string, interface{}, error) { hash, err := hashChecks(m.checks) if err != nil { diff -Nru consul-1.7.4+dfsg1/agent/cache-types/service_dump.go consul-1.8.7+dfsg1/agent/cache-types/service_dump.go --- consul-1.7.4+dfsg1/agent/cache-types/service_dump.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/cache-types/service_dump.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ // InternalServiceDump supports fetching discovering service names via the catalog. type InternalServiceDump struct { + RegisterOptionsBlockingRefresh RPC RPC } @@ -49,7 +50,3 @@ result.Index = reply.QueryMeta.Index return result, nil } - -func (c *InternalServiceDump) SupportsBlocking() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/agent/catalog_endpoint.go consul-1.8.7+dfsg1/agent/catalog_endpoint.go --- consul-1.7.4+dfsg1/agent/catalog_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/catalog_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -85,7 +85,7 @@ var out []string if s.agent.config.HTTPUseCache && args.QueryOptions.UseCache { - raw, m, err := s.agent.cache.Get(cachetype.CatalogDatacentersName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.CatalogDatacentersName, &args) if err != nil { metrics.IncrCounterWithLabels([]string{"client", "rpc", "error", "catalog_datacenters"}, 1, []metrics.Label{{Name: "node", Value: s.nodeName()}}) @@ -167,7 +167,7 @@ defer setMeta(resp, &out.QueryMeta) if s.agent.config.HTTPUseCache && args.QueryOptions.UseCache { - raw, m, err := s.agent.cache.Get(cachetype.CatalogListServicesName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.CatalogListServicesName, &args) if err != nil { metrics.IncrCounterWithLabels([]string{"client", "rpc", "error", "catalog_services"}, 1, []metrics.Label{{Name: "node", Value: s.nodeName()}}) @@ -256,7 +256,7 @@ defer setMeta(resp, &out.QueryMeta) if s.agent.config.HTTPUseCache && args.QueryOptions.UseCache { - raw, m, err := s.agent.cache.Get(cachetype.CatalogServicesName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.CatalogServicesName, &args) if err != nil { metrics.IncrCounterWithLabels([]string{"client", "rpc", "error", "catalog_service_nodes"}, 1, []metrics.Label{{Name: "node", Value: s.nodeName()}}) @@ -414,3 +414,45 @@ []metrics.Label{{Name: "node", Value: s.nodeName()}}) return &out.NodeServices, nil } + +func (s *HTTPServer) CatalogGatewayServices(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + metrics.IncrCounterWithLabels([]string{"client", "api", "catalog_gateway_services"}, 1, + []metrics.Label{{Name: "node", Value: s.nodeName()}}) + + var args structs.ServiceSpecificRequest + + if err := s.parseEntMetaNoWildcard(req, &args.EnterpriseMeta); err != nil { + return nil, err + } + if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { + return nil, nil + } + + // Pull out the gateway's service name + args.ServiceName = strings.TrimPrefix(req.URL.Path, "/v1/catalog/gateway-services/") + if args.ServiceName == "" { + resp.WriteHeader(http.StatusBadRequest) + fmt.Fprint(resp, "Missing gateway name") + return nil, nil + } + + // Make the RPC request + var out structs.IndexedGatewayServices + defer setMeta(resp, &out.QueryMeta) +RETRY_ONCE: + if err := s.agent.RPC("Catalog.GatewayServices", &args, &out); err != nil { + metrics.IncrCounterWithLabels([]string{"client", "rpc", "error", "catalog_gateway_services"}, 1, + []metrics.Label{{Name: "node", Value: s.nodeName()}}) + return nil, err + } + if args.QueryOptions.AllowStale && args.MaxStaleDuration > 0 && args.MaxStaleDuration < out.LastContact { + args.AllowStale = false + args.MaxStaleDuration = 0 + goto RETRY_ONCE + } + out.ConsistencyLevel = args.QueryOptions.ConsistencyLevel() + + metrics.IncrCounterWithLabels([]string{"client", "api", "success", "catalog_gateway_services"}, 1, + []metrics.Label{{Name: "node", Value: s.nodeName()}}) + return out.Services, nil +} diff -Nru consul-1.7.4+dfsg1/agent/catalog_endpoint_test.go consul-1.8.7+dfsg1/agent/catalog_endpoint_test.go --- consul-1.7.4+dfsg1/agent/catalog_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/catalog_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ import ( "fmt" + "github.com/hashicorp/consul/api" "net/http" "net/http/httptest" "net/url" @@ -18,7 +19,7 @@ func TestCatalogRegister_Service_InvalidAddress(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() for _, addr := range []string{"0.0.0.0", "::", "[::]"} { @@ -43,7 +44,7 @@ func TestCatalogDeregister(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Register node @@ -62,7 +63,7 @@ func TestCatalogDatacenters(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() retry.Run(t, func(r *retry.R) { @@ -81,7 +82,7 @@ func TestCatalogNodes(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -115,7 +116,7 @@ func TestCatalogNodes_MetaFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -156,7 +157,7 @@ func TestCatalogNodes_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -192,7 +193,7 @@ func TestCatalogNodes_WanTranslation(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` + a1 := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true acl_datacenter = "" @@ -200,7 +201,7 @@ defer a1.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "dc1") - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` datacenter = "dc2" translate_wan_addrs = true acl_datacenter = "" @@ -290,7 +291,7 @@ func TestCatalogNodes_Blocking(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WaitForAntiEntropySync()) @@ -364,7 +365,7 @@ func TestCatalogNodes_DistanceSort(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -449,7 +450,7 @@ func TestCatalogServices(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -485,7 +486,7 @@ func TestCatalogServices_NodeMetaFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Register node @@ -526,7 +527,7 @@ func TestCatalogRegister_checkRegistration(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Register node with a service and check @@ -579,7 +580,7 @@ func TestCatalogServiceNodes(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() assert := assert.New(t) @@ -692,7 +693,7 @@ func TestCatalogServiceNodes_NodeMetaFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Make sure an empty list is returned, not a nil @@ -747,7 +748,7 @@ func TestCatalogServiceNodes_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() queryPath := "/v1/catalog/service/api?filter=" + url.QueryEscape("ServiceMeta.somekey == somevalue") @@ -810,14 +811,14 @@ func TestCatalogServiceNodes_WanTranslation(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` + a1 := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true acl_datacenter = "" `) defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` datacenter = "dc2" translate_wan_addrs = true acl_datacenter = "" @@ -892,7 +893,7 @@ func TestCatalogServiceNodes_DistanceSort(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -985,7 +986,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1013,7 +1014,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1040,7 +1041,7 @@ func TestCatalogConnectServiceNodes_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1077,7 +1078,7 @@ func TestCatalogNodeServices(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1120,7 +1121,7 @@ func TestCatalogNodeServiceList(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1170,7 +1171,7 @@ func TestCatalogNodeServices_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1211,7 +1212,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1235,7 +1236,7 @@ func TestCatalogNodeServices_WanTranslation(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` + a1 := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true acl_datacenter = "" @@ -1243,7 +1244,7 @@ defer a1.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "dc1") - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` datacenter = "dc2" translate_wan_addrs = true acl_datacenter = "" @@ -1320,3 +1321,168 @@ require.Equal(t, ns2.Address, "127.0.0.1") require.Equal(t, ns2.Port, 8080) } + +func TestCatalog_GatewayServices_Terminating(t *testing.T) { + t.Parallel() + a := NewTestAgent(t, "") + defer a.Shutdown() + + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + + // Register a service to be covered by the wildcard in the config entry + args := structs.TestRegisterRequest(t) + args.Service.Service = "redis" + args.Check = &structs.HealthCheck{ + Name: "redis", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + var out struct{} + assert.NoError(t, a.RPC("Catalog.Register", &args, &out)) + + // Associate the gateway and api/redis services + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating", + Services: []structs.LinkedService{ + { + Name: "api", + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Name: "*", + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + }, + }, + }, + } + var entryResp bool + assert.NoError(t, a.RPC("ConfigEntry.Apply", &entryArgs, &entryResp)) + + retry.Run(t, func(r *retry.R) { + req, _ := http.NewRequest("GET", "/v1/catalog/gateway-services/terminating", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.CatalogGatewayServices(resp, req) + assert.NoError(r, err) + + header := resp.Header().Get("X-Consul-Index") + if header == "" || header == "0" { + r.Fatalf("Bad: %v", header) + } + + gatewayServices := obj.(structs.GatewayServices) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("terminating", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Service: structs.NewServiceName("redis", nil), + Gateway: structs.NewServiceName("terminating", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + FromWildcard: true, + }, + } + + // Ignore raft index for equality + for _, s := range gatewayServices { + s.RaftIndex = structs.RaftIndex{} + } + assert.Equal(r, expect, gatewayServices) + }) +} + +func TestCatalog_GatewayServices_Ingress(t *testing.T) { + t.Parallel() + a := NewTestAgent(t, "") + defer a.Shutdown() + + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + + // Associate an ingress gateway with api/redis + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress", + Listeners: []structs.IngressListener{ + { + Port: 8888, + Services: []structs.IngressService{ + { + Name: "api", + }, + }, + }, + { + Port: 9999, + Services: []structs.IngressService{ + { + Name: "redis", + }, + }, + }, + }, + }, + } + + var entryResp bool + require.NoError(t, a.RPC("ConfigEntry.Apply", &entryArgs, &entryResp)) + + retry.Run(t, func(r *retry.R) { + req, _ := http.NewRequest("GET", "/v1/catalog/gateway-services/ingress", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.CatalogGatewayServices(resp, req) + require.NoError(r, err) + + header := resp.Header().Get("X-Consul-Index") + if header == "" || header == "0" { + r.Fatalf("Bad: %v", header) + } + + gatewayServices := obj.(structs.GatewayServices) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("ingress", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Protocol: "tcp", + Port: 8888, + }, + { + Service: structs.NewServiceName("redis", nil), + Gateway: structs.NewServiceName("ingress", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Protocol: "tcp", + Port: 9999, + }, + } + + // Ignore raft index for equality + for _, s := range gatewayServices { + s.RaftIndex = structs.RaftIndex{} + } + require.Equal(r, expect, gatewayServices) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/checks/alias.go consul-1.8.7+dfsg1/agent/checks/alias.go --- consul-1.7.4+dfsg1/agent/checks/alias.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/checks/alias.go 2020-12-10 21:46:52.000000000 +0000 @@ -114,8 +114,9 @@ for _, chk := range checks { checksList = append(checksList, chk) } - - c.processChecks(checksList) + c.processChecks(checksList, func(serviceID *structs.ServiceID) bool { + return c.Notify.ServiceExists(*serviceID) + }) extendRefreshTimer() } @@ -134,12 +135,44 @@ } } +// CheckIfServiceIDExists is used to determine if a service exists +type CheckIfServiceIDExists func(*structs.ServiceID) bool + +func (c *CheckAlias) checkServiceExistsOnRemoteServer(serviceID *structs.ServiceID) (bool, error) { + args := c.RPCReq + args.Node = c.Node + args.AllowStale = true + args.EnterpriseMeta = c.EnterpriseMeta + // We are late at maximum of 15s compared to leader + args.MaxStaleDuration = 15 * time.Second + attempts := 0 +RETRY_CALL: + var out structs.IndexedNodeServices + attempts++ + if err := c.RPC.RPC("Catalog.NodeServices", &args, &out); err != nil { + if attempts <= 3 { + time.Sleep(time.Duration(attempts) * time.Second) + goto RETRY_CALL + } + return false, err + } + for _, srv := range out.NodeServices.Services { + sid := srv.CompoundServiceID() + if serviceID.Matches(&sid) { + return true, nil + } + } + return false, nil +} + func (c *CheckAlias) runQuery(stopCh chan struct{}) { args := c.RPCReq args.Node = c.Node args.AllowStale = true args.MaxQueryTime = 1 * time.Minute args.EnterpriseMeta = c.EnterpriseMeta + // We are late at maximum of 15s compared to leader + args.MaxStaleDuration = 15 * time.Second var attempt uint for { @@ -173,6 +206,7 @@ // but for blocking queries isn't that much more efficient since the checks // index is global to the cluster. var out structs.IndexedHealthChecks + if err := c.RPC.RPC("Health.NodeChecks", &args, &out); err != nil { attempt++ if attempt > 1 { @@ -195,29 +229,37 @@ if args.MinQueryIndex < 1 { args.MinQueryIndex = 1 } - - c.processChecks(out.HealthChecks) + c.processChecks(out.HealthChecks, func(serviceID *structs.ServiceID) bool { + ret, err := c.checkServiceExistsOnRemoteServer(serviceID) + if err != nil { + // We cannot determine if node has the check, let's assume it exists + return true + } + return ret + }) } } // processChecks is a common helper for taking a set of health checks and // using them to update our alias. This is abstracted since the checks can // come from both the remote server as well as local state. -func (c *CheckAlias) processChecks(checks []*structs.HealthCheck) { +func (c *CheckAlias) processChecks(checks []*structs.HealthCheck, CheckIfServiceIDExists CheckIfServiceIDExists) { health := api.HealthPassing msg := "No checks found." + serviceFound := false for _, chk := range checks { - if c.Node != "" && chk.Node != c.Node { + if c.Node != "" && c.Node != chk.Node { continue } - - // We allow ServiceID == "" so that we also check node checks sid := chk.CompoundServiceID() - - if chk.ServiceID != "" && !c.ServiceID.Matches(&sid) { + serviceMatch := c.ServiceID.Matches(&sid) + if chk.ServiceID != "" && !serviceMatch { continue } - + // We have at least one healthcheck for this service + if serviceMatch { + serviceFound = true + } if chk.Status == api.HealthCritical || chk.Status == api.HealthWarning { health = chk.Status msg = fmt.Sprintf("Aliased check %q failing: %s", chk.Name, chk.Output) @@ -228,13 +270,18 @@ if chk.Status == api.HealthCritical { break } + } else { + // if current health is warning, don't overwrite it + if health == api.HealthPassing { + msg = "All checks passing." + } + } + } + if !serviceFound { + if !CheckIfServiceIDExists(&c.ServiceID) { + msg = fmt.Sprintf("Service %s could not be found on node %s", c.ServiceID.ID, c.Node) + health = api.HealthCritical } - - msg = "All checks passing." } - - // TODO(rb): if no matching checks found should this default to critical? - - // Update our check value c.Notify.UpdateCheck(c.CheckID, health, msg) } diff -Nru consul-1.7.4+dfsg1/agent/checks/alias_test.go consul-1.8.7+dfsg1/agent/checks/alias_test.go --- consul-1.7.4+dfsg1/agent/checks/alias_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/checks/alias_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ RPC: rpc, } - rpc.Reply.Store(fmt.Errorf("failure")) + rpc.AddReply("Health.NodeChecks", fmt.Errorf("failure")) chk.Start() defer chk.Stop() @@ -62,7 +62,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{}) + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{}) chk.Start() defer chk.Stop() @@ -88,7 +88,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{ + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ HealthChecks: []*structs.HealthCheck{ // Should ignore non-matching node &structs.HealthCheck{ @@ -137,7 +137,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{ + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ HealthChecks: []*structs.HealthCheck{ // Should ignore non-matching node &structs.HealthCheck{ @@ -171,6 +171,116 @@ }) } +// Remote service has no healtchecks, but service exists on remote host +func TestCheckAlias_remotePassingWithoutChecksButWithService(t *testing.T) { + t.Parallel() + + notify := newMockAliasNotify() + chkID := structs.NewCheckID("foo", nil) + rpc := &mockRPC{} + chk := &CheckAlias{ + Node: "remote", + ServiceID: structs.ServiceID{ID: "web"}, + CheckID: chkID, + Notify: notify, + RPC: rpc, + } + + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ + HealthChecks: []*structs.HealthCheck{ + // Should ignore non-matching node + &structs.HealthCheck{ + Node: "A", + ServiceID: "web", + Status: api.HealthCritical, + }, + + // Should ignore non-matching service + &structs.HealthCheck{ + Node: "remote", + ServiceID: "db", + Status: api.HealthCritical, + }, + }, + }) + + injected := structs.IndexedNodeServices{ + NodeServices: &structs.NodeServices{ + Node: &structs.Node{ + Node: "remote", + }, + Services: make(map[string]*structs.NodeService), + }, + QueryMeta: structs.QueryMeta{}, + } + injected.NodeServices.Services["web"] = &structs.NodeService{ + Service: "web", + ID: "web", + } + rpc.AddReply("Catalog.NodeServices", injected) + + chk.Start() + defer chk.Stop() + retry.Run(t, func(r *retry.R) { + if got, want := notify.State(chkID), api.HealthPassing; got != want { + r.Fatalf("got state %q want %q", got, want) + } + }) +} + +// Remote service has no healtchecks, service does not exists on remote host +func TestCheckAlias_remotePassingWithoutChecksAndWithoutService(t *testing.T) { + t.Parallel() + + notify := newMockAliasNotify() + chkID := structs.NewCheckID("foo", nil) + rpc := &mockRPC{} + chk := &CheckAlias{ + Node: "remote", + ServiceID: structs.ServiceID{ID: "web"}, + CheckID: chkID, + Notify: notify, + RPC: rpc, + } + + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ + HealthChecks: []*structs.HealthCheck{ + // Should ignore non-matching node + &structs.HealthCheck{ + Node: "A", + ServiceID: "web", + Status: api.HealthCritical, + }, + + // Should ignore non-matching service + &structs.HealthCheck{ + Node: "remote", + ServiceID: "db", + Status: api.HealthCritical, + }, + }, + }) + + injected := structs.IndexedNodeServices{ + NodeServices: &structs.NodeServices{ + Node: &structs.Node{ + Node: "remote", + }, + Services: make(map[string]*structs.NodeService), + }, + QueryMeta: structs.QueryMeta{}, + } + rpc.AddReply("Catalog.NodeServices", injected) + + chk.Start() + defer chk.Stop() + retry.Run(t, func(r *retry.R) { + if got, want := notify.State(chkID), api.HealthCritical; got != want { + r.Fatalf("got state %q want %q", got, want) + } + }) +} + // If any checks are critical, it should be critical func TestCheckAlias_remoteCritical(t *testing.T) { t.Parallel() @@ -186,7 +296,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{ + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ HealthChecks: []*structs.HealthCheck{ // Should ignore non-matching node &structs.HealthCheck{ @@ -241,7 +351,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{ + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ HealthChecks: []*structs.HealthCheck{ // Should ignore non-matching node &structs.HealthCheck{ @@ -295,7 +405,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{ + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ HealthChecks: []*structs.HealthCheck{ // Should ignore non-matching node &structs.HealthCheck{ @@ -342,7 +452,7 @@ RPC: rpc, } - rpc.Reply.Store(structs.IndexedHealthChecks{ + rpc.AddReply("Health.NodeChecks", structs.IndexedHealthChecks{ HealthChecks: []*structs.HealthCheck{ // Should ignore non-matching node &structs.HealthCheck{ @@ -403,9 +513,19 @@ Calls uint32 // Read-only, number of RPC calls Args atomic.Value // Read-only, the last args sent - // Write-only, the reply to send. If of type "error" then an error will + // Write-only, the replies to send, indexed per method. If of type "error" then an error will // be returned from the RPC call. - Reply atomic.Value + Replies map[string]*atomic.Value +} + +func (m *mockRPC) AddReply(method string, reply interface{}) { + if m.Replies == nil { + m.Replies = make(map[string]*atomic.Value) + } + val := &atomic.Value{} + val.Store(reply) + m.Replies[method] = val + } func (m *mockRPC) RPC(method string, args interface{}, reply interface{}) error { @@ -424,12 +544,15 @@ } replyv = replyv.Elem() // Get pointer value replyv.Set(reflect.Zero(replyv.Type())) // Reset to zero value - if v := m.Reply.Load(); v != nil { + repl := m.Replies[method] + if repl == nil { + return fmt.Errorf("No Such Method: %s", method) + } + if v := m.Replies[method].Load(); v != nil { // Return an error if the reply is an error type if err, ok := v.(error); ok { return err } - replyv.Set(reflect.ValueOf(v)) // Set to reply value if non-nil } @@ -442,6 +565,8 @@ t.Parallel() notify := newMockAliasNotify() + // We fake a local service web to ensure check if passing works + notify.Notify.AddServiceID(structs.ServiceID{ID: "web"}) chkID := structs.NewCheckID(types.CheckID("foo"), nil) rpc := &mockRPC{} chk := &CheckAlias{ @@ -462,4 +587,28 @@ r.Fatalf("got state %q want %q", got, want) } }) +} + +// Local check on non-existing service +func TestCheckAlias_localInitialStatusShouldFailBecauseNoService(t *testing.T) { + t.Parallel() + + notify := newMockAliasNotify() + chkID := structs.NewCheckID(types.CheckID("foo"), nil) + rpc := &mockRPC{} + chk := &CheckAlias{ + ServiceID: structs.ServiceID{ID: "web"}, + CheckID: chkID, + Notify: notify, + RPC: rpc, + } + + chk.Start() + defer chk.Stop() + + retry.Run(t, func(r *retry.R) { + if got, want := notify.State(chkID), api.HealthCritical; got != want { + r.Fatalf("got state %q want %q", got, want) + } + }) } diff -Nru consul-1.7.4+dfsg1/agent/checks/check.go consul-1.8.7+dfsg1/agent/checks/check.go --- consul-1.7.4+dfsg1/agent/checks/check.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/checks/check.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,6 +4,7 @@ "crypto/tls" "fmt" "io" + "io/ioutil" "net" "net/http" "os" @@ -14,7 +15,6 @@ "time" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/go-hclog" "github.com/armon/circbuf" @@ -52,6 +52,8 @@ // should take care to be idempotent. type CheckNotifier interface { UpdateCheck(checkID structs.CheckID, status, output string) + // ServiceExists return true if the given service does exists + ServiceExists(serviceID structs.ServiceID) bool } // CheckMonitor is used to periodically invoke a script to @@ -605,7 +607,7 @@ } if c.Logger == nil { - c.Logger = testutil.NewDiscardLogger() + c.Logger = hclog.New(&hclog.LoggerOptions{Output: ioutil.Discard}) } if c.Shell == "" { diff -Nru consul-1.7.4+dfsg1/agent/checks/grpc.go consul-1.8.7+dfsg1/agent/checks/grpc.go --- consul-1.7.4+dfsg1/agent/checks/grpc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/checks/grpc.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,7 @@ "google.golang.org/grpc" "google.golang.org/grpc/credentials" hv1 "google.golang.org/grpc/health/grpc_health_v1" + "google.golang.org/grpc/resolver" ) var ErrGRPCUnhealthy = fmt.Errorf("gRPC application didn't report service healthy") @@ -52,12 +53,12 @@ // If nil is returned, target is healthy, otherwise target is not healthy func (probe *GrpcHealthProbe) Check(target string) error { serverAndService := strings.SplitN(target, "/", 2) - server := serverAndService[0] + serverWithScheme := fmt.Sprintf("%s:///%s", resolver.GetDefaultScheme(), serverAndService[0]) ctx, cancel := context.WithTimeout(context.Background(), probe.timeout) defer cancel() - connection, err := grpc.DialContext(ctx, server, probe.dialOptions...) + connection, err := grpc.DialContext(ctx, serverWithScheme, probe.dialOptions...) if err != nil { return err } diff -Nru consul-1.7.4+dfsg1/agent/config/agent_limits.go consul-1.8.7+dfsg1/agent/config/agent_limits.go --- consul-1.7.4+dfsg1/agent/config/agent_limits.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/agent_limits.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +package config + +import ( + "fmt" +) + +// checkLimitsFromMaxConnsPerClient check that value provided might be OK +// return an error if values are not compatible +func checkLimitsFromMaxConnsPerClient(maxConnsPerClient int) error { + maxFds, err := getrlimit() + if err == nil && maxConnsPerClient > 0 { + // We need the list port + a few at the minimum + // On Mac OS, 20 FDs are open by Consul without doing anything + requiredFds := uint64(maxConnsPerClient + 20) + if maxFds < requiredFds { + return fmt.Errorf("system allows a max of %d file descriptors, but limits.http_max_conns_per_client: %d needs at least %d", maxFds, maxConnsPerClient, requiredFds) + } + } + return err +} diff -Nru consul-1.7.4+dfsg1/agent/config/agent_limits_test.go consul-1.8.7+dfsg1/agent/config/agent_limits_test.go --- consul-1.7.4+dfsg1/agent/config/agent_limits_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/agent_limits_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +package config + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBuildAndValidate_HTTPMaxConnsPerClientExceedsRLimit(t *testing.T) { + t.Parallel() + hcl := ` + limits{ + # We put a very high value to be sure to fail + # This value is more than max on Windows as well + http_max_conns_per_client = 16777217 + }` + b, err := NewBuilder(BuilderOpts{}) + assert.NoError(t, err) + testsrc := FileSource{ + Name: "test", + Format: "hcl", + Data: ` + ae_interval = "1m" + data_dir="/tmp/00000000001979" + bind_addr = "127.0.0.1" + advertise_addr = "127.0.0.1" + datacenter = "dc1" + bootstrap = true + server = true + node_id = "00000000001979" + node_name = "Node-00000000001979" + `, + } + b.Head = append(b.Head, testsrc) + b.Tail = append(b.Tail, DefaultConsulSource(), DevConsulSource()) + b.Tail = append(b.Head, FileSource{Name: "hcl", Format: "hcl", Data: hcl}) + + _, validationError := b.BuildAndValidate() + if validationError == nil { + assert.Fail(t, "Config should not be valid") + } + assert.Contains(t, validationError.Error(), "but limits.http_max_conns_per_client: 16777217 needs at least 16777237") +} diff -Nru consul-1.7.4+dfsg1/agent/config/builder.go consul-1.8.7+dfsg1/agent/config/builder.go --- consul-1.7.4+dfsg1/agent/config/builder.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/builder.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,7 @@ import ( "encoding/base64" "encoding/json" + "errors" "fmt" "io/ioutil" "net" @@ -14,19 +15,52 @@ "strings" "time" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/checks" "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/consul" + "github.com/hashicorp/consul/agent/consul/authmethod/ssoauth" + "github.com/hashicorp/consul/agent/dns" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/ipaddr" "github.com/hashicorp/consul/lib" + libtempl "github.com/hashicorp/consul/lib/template" + "github.com/hashicorp/consul/logging" "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/consul/types" + "github.com/hashicorp/go-bexpr" + "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-multierror" "github.com/hashicorp/go-sockaddr/template" + "github.com/hashicorp/memberlist" "golang.org/x/time/rate" ) +// Load will build the configuration including the extraHead source injected +// after all other defaults but before any user supplied configuration and the overrides +// source injected as the final source in the configuration parsing chain. +func Load(opts BuilderOpts, extraHead Source, overrides ...Source) (*RuntimeConfig, []string, error) { + b, err := NewBuilder(opts) + if err != nil { + return nil, nil, err + } + + if extraHead != nil { + b.Head = append(b.Head, extraHead) + } + + if len(overrides) != 0 { + b.Tail = append(b.Tail, overrides...) + } + + cfg, err := b.BuildAndValidate() + if err != nil { + return nil, nil, err + } + + return &cfg, b.Warnings, nil +} + // Builder constructs a valid runtime configuration from multiple // configuration sources. // @@ -53,8 +87,8 @@ // since not all pre-conditions have to be satisfied when performing // syntactical tests. type Builder struct { - // Flags contains the parsed command line arguments. - Flags Flags + // devMode stores the value of the -dev flag, and enables development mode. + devMode *bool // Head, Sources, and Tail are used to manage the order of the // config sources, as described in the comments above. @@ -66,27 +100,25 @@ // parsing the configuration. Warnings []string - // Hostname returns the hostname of the machine. If nil, os.Hostname - // is called. - Hostname func() (string, error) - - // GetPrivateIPv4 and GetPublicIPv6 return suitable default addresses - // for cases when the user doesn't supply them. - GetPrivateIPv4 func() ([]*net.IPAddr, error) - GetPublicIPv6 func() ([]*net.IPAddr, error) + // hostname is a shim for testing, allowing tests to specify a replacement + // for os.Hostname. + hostname func() (string, error) + + // getPrivateIPv4 and getPublicIPv6 are shims for testing, allowing tests to + // specify a replacement for ipaddr.GetPrivateIPv4 and ipaddr.GetPublicIPv6. + getPrivateIPv4 func() ([]*net.IPAddr, error) + getPublicIPv6 func() ([]*net.IPAddr, error) // err contains the first error that occurred during // building the runtime configuration. err error } -// NewBuilder returns a new configuration builder based on the given command -// line flags. -func NewBuilder(flags Flags) (*Builder, error) { - // We expect all flags to be parsed and flags.Args to be empty. - // Therefore, we bail if we find unparsed args. - if len(flags.Args) > 0 { - return nil, fmt.Errorf("config: Unknown extra arguments: %v", flags.Args) +// NewBuilder returns a new configuration Builder from the BuilderOpts. +func NewBuilder(opts BuilderOpts) (*Builder, error) { + configFormat := opts.ConfigFormat + if configFormat != "" && configFormat != "json" && configFormat != "hcl" { + return nil, fmt.Errorf("config: -config-format must be either 'hcl' or 'json'") } newSource := func(name string, v interface{}) Source { @@ -94,15 +126,15 @@ if err != nil { panic(err) } - return Source{Name: name, Format: "json", Data: string(b)} + return FileSource{Name: name, Format: "json", Data: string(b)} } b := &Builder{ - Flags: flags, - Head: []Source{DefaultSource(), DefaultEnterpriseSource()}, + devMode: opts.DevMode, + Head: []Source{DefaultSource(), DefaultEnterpriseSource()}, } - if b.boolVal(b.Flags.DevMode) { + if b.boolVal(opts.DevMode) { b.Head = append(b.Head, DevSource()) } @@ -111,34 +143,34 @@ // we need to merge all slice values defined in flags before we // merge the config files since the flag values for slices are // otherwise appended instead of prepended. - slices, values := b.splitSlicesAndValues(b.Flags.Config) + slices, values := b.splitSlicesAndValues(opts.Config) b.Head = append(b.Head, newSource("flags.slices", slices)) - for _, path := range b.Flags.ConfigFiles { - sources, err := b.ReadPath(path) + for _, path := range opts.ConfigFiles { + sources, err := b.sourcesFromPath(path, opts.ConfigFormat) if err != nil { return nil, err } b.Sources = append(b.Sources, sources...) } b.Tail = append(b.Tail, newSource("flags.values", values)) - for i, s := range b.Flags.HCL { - b.Tail = append(b.Tail, Source{ + for i, s := range opts.HCL { + b.Tail = append(b.Tail, FileSource{ Name: fmt.Sprintf("flags-%d.hcl", i), Format: "hcl", Data: s, }) } b.Tail = append(b.Tail, NonUserSource(), DefaultConsulSource(), OverrideEnterpriseSource(), DefaultVersionSource()) - if b.boolVal(b.Flags.DevMode) { + if b.boolVal(opts.DevMode) { b.Tail = append(b.Tail, DevConsulSource()) } return b, nil } -// ReadPath reads a single config file or all files in a directory (but -// not its sub-directories) and appends them to the list of config -// sources. -func (b *Builder) ReadPath(path string) ([]Source, error) { +// sourcesFromPath reads a single config file or all files in a directory (but +// not its sub-directories) and returns Sources created from the +// files. +func (b *Builder) sourcesFromPath(path string, format string) ([]Source, error) { f, err := os.Open(path) if err != nil { return nil, fmt.Errorf("config: Open failed on %s. %s", path, err) @@ -151,7 +183,12 @@ } if !fi.IsDir() { - src, err := b.ReadFile(path) + if !shouldParseFile(path, format) { + b.warn("skipping file %v, extension must be .hcl or .json, or config format must be set", path) + return nil, nil + } + + src, err := newSourceFromFile(path, format) if err != nil { return nil, err } @@ -186,37 +223,46 @@ continue } - if b.shouldParseFile(fp) { - src, err := b.ReadFile(fp) - if err != nil { - return nil, err - } - sources = append(sources, src) + if !shouldParseFile(fp, format) { + b.warn("skipping file %v, extension must be .hcl or .json, or config format must be set", fp) + continue } + src, err := newSourceFromFile(fp, format) + if err != nil { + return nil, err + } + sources = append(sources, src) } return sources, nil } -// ReadFile parses a JSON or HCL config file and appends it to the list of -// config sources. -func (b *Builder) ReadFile(path string) (Source, error) { +// newSourceFromFile creates a Source from the contents of the file at path. +func newSourceFromFile(path string, format string) (Source, error) { data, err := ioutil.ReadFile(path) if err != nil { - return Source{}, fmt.Errorf("config: ReadFile failed on %s: %s", path, err) + return nil, fmt.Errorf("config: failed to read %s: %s", path, err) } - return Source{Name: path, Data: string(data)}, nil + if format == "" { + format = formatFromFileExtension(path) + } + return FileSource{Name: path, Data: string(data), Format: format}, nil } // shouldParse file determines whether the file to be read is of a supported extension -func (b *Builder) shouldParseFile(path string) bool { - configFormat := b.stringVal(b.Flags.ConfigFormat) - srcFormat := FormatFrom(path) - - // If config-format is not set, only read files with supported extensions - if configFormat == "" && srcFormat != "hcl" && srcFormat != "json" { - return false +func shouldParseFile(path string, configFormat string) bool { + srcFormat := formatFromFileExtension(path) + return configFormat != "" || srcFormat == "hcl" || srcFormat == "json" +} + +func formatFromFileExtension(name string) string { + switch { + case strings.HasSuffix(name, ".json"): + return "json" + case strings.HasSuffix(name, ".hcl"): + return "hcl" + default: + return "" } - return true } type byName []os.FileInfo @@ -243,48 +289,38 @@ // warnings can still contain deprecation or format warnings that should // be presented to the user. func (b *Builder) Build() (rt RuntimeConfig, err error) { - b.err = nil - b.Warnings = nil - - // ---------------------------------------------------------------- - // merge config sources as follows - // - configFormat := b.stringVal(b.Flags.ConfigFormat) - if configFormat != "" && configFormat != "json" && configFormat != "hcl" { - return RuntimeConfig{}, fmt.Errorf("config: -config-format must be either 'hcl' or 'json'") - } - - // build the list of config sources - var srcs []Source + srcs := make([]Source, 0, len(b.Head)+len(b.Sources)+len(b.Tail)) srcs = append(srcs, b.Head...) - for _, src := range b.Sources { - // skip file if it should not be parsed - if !b.shouldParseFile(src.Name) { - continue - } - - // if config-format is set, files of any extension will be interpreted in that format - src.Format = FormatFrom(src.Name) - if configFormat != "" { - src.Format = configFormat - } - srcs = append(srcs, src) - } + srcs = append(srcs, b.Sources...) srcs = append(srcs, b.Tail...) // parse the config sources into a configuration var c Config for _, s := range srcs { - if s.Name == "" || s.Data == "" { + + c2, md, err := s.Parse() + switch { + case err == ErrNoData: continue + case err != nil: + return RuntimeConfig{}, fmt.Errorf("failed to parse %v: %w", s.Source(), err) } - c2, keys, err := Parse(s.Data, s.Format) - if err != nil { - return RuntimeConfig{}, fmt.Errorf("Error parsing %s: %s", s.Name, err) + + var unusedErr error + for _, k := range md.Unused { + switch k { + case "acl_enforce_version_8": + b.warn("config key %q is deprecated and should be removed", k) + default: + unusedErr = multierror.Append(unusedErr, fmt.Errorf("invalid config key %s", k)) + } + } + if unusedErr != nil { + return RuntimeConfig{}, fmt.Errorf("failed to parse %v: %s", s.Source(), unusedErr) } // for now this is a soft failure that will cause warnings but not actual problems - b.validateEnterpriseConfigKeys(&c2, keys) + b.validateEnterpriseConfigKeys(&c2, md.Keys) // if we have a single 'check' or 'service' we need to add them to the // list of checks and services first since we cannot merge them @@ -426,14 +462,14 @@ switch { case ipaddr.IsAnyV4(advertiseAddr): addrtyp = "private IPv4" - detect = b.GetPrivateIPv4 + detect = b.getPrivateIPv4 if detect == nil { detect = ipaddr.GetPrivateIPv4 } case ipaddr.IsAnyV6(advertiseAddr): addrtyp = "public IPv6" - detect = b.GetPublicIPv6 + detect = b.getPublicIPv6 if detect == nil { detect = ipaddr.GetPublicIPv6 } @@ -617,11 +653,46 @@ consulRaftHeartbeatTimeout := b.durationVal("consul.raft.heartbeat_timeout", c.Consul.Raft.HeartbeatTimeout) * time.Duration(performanceRaftMultiplier) consulRaftLeaderLeaseTimeout := b.durationVal("consul.raft.leader_lease_timeout", c.Consul.Raft.LeaderLeaseTimeout) * time.Duration(performanceRaftMultiplier) - // Connect proxy defaults. + // Connect connectEnabled := b.boolVal(c.Connect.Enabled) connectCAProvider := b.stringVal(c.Connect.CAProvider) connectCAConfig := c.Connect.CAConfig + + // autoEncrypt and autoConfig implicitly turns on connect which is why + // they need to be above other settings that rely on connect. + autoEncryptTLS := b.boolVal(c.AutoEncrypt.TLS) + autoEncryptDNSSAN := []string{} + for _, d := range c.AutoEncrypt.DNSSAN { + autoEncryptDNSSAN = append(autoEncryptDNSSAN, d) + } + autoEncryptIPSAN := []net.IP{} + for _, i := range c.AutoEncrypt.IPSAN { + ip := net.ParseIP(i) + if ip == nil { + b.warn(fmt.Sprintf("Cannot parse ip %q from AutoEncrypt.IPSAN", i)) + continue + } + autoEncryptIPSAN = append(autoEncryptIPSAN, ip) + + } + autoEncryptAllowTLS := b.boolVal(c.AutoEncrypt.AllowTLS) + + if autoEncryptAllowTLS { + connectEnabled = true + } + + autoConfig := b.autoConfigVal(c.AutoConfig) + if autoConfig.Enabled { + connectEnabled = true + } + + // Connect proxy defaults + connectMeshGatewayWANFederationEnabled := b.boolVal(c.Connect.MeshGatewayWANFederationEnabled) + if connectMeshGatewayWANFederationEnabled && !connectEnabled { + return RuntimeConfig{}, fmt.Errorf("'connect.enable_mesh_gateway_wan_federation=true' requires 'connect.enabled=true'") + } if connectCAConfig != nil { + // nolint: staticcheck // CA config should be changed to use HookTranslateKeys lib.TranslateKeys(connectCAConfig, map[string]string{ // Consul CA config "private_key": "PrivateKey", @@ -654,27 +725,6 @@ }) } - autoEncryptTLS := b.boolVal(c.AutoEncrypt.TLS) - autoEncryptDNSSAN := []string{} - for _, d := range c.AutoEncrypt.DNSSAN { - autoEncryptDNSSAN = append(autoEncryptDNSSAN, d) - } - autoEncryptIPSAN := []net.IP{} - for _, i := range c.AutoEncrypt.IPSAN { - ip := net.ParseIP(i) - if ip == nil { - b.warn(fmt.Sprintf("Cannot parse ip %q from AutoEncrypt.IPSAN", i)) - continue - } - autoEncryptIPSAN = append(autoEncryptIPSAN, ip) - - } - autoEncryptAllowTLS := b.boolVal(c.AutoEncrypt.AllowTLS) - - if autoEncryptAllowTLS { - connectEnabled = true - } - aclsEnabled := false primaryDatacenter := strings.ToLower(b.stringVal(c.PrimaryDatacenter)) if c.ACLDatacenter != nil { @@ -727,6 +777,9 @@ if err != nil { return RuntimeConfig{}, fmt.Errorf("config_entries.bootstrap[%d]: %s", i, err) } + if err := entry.Normalize(); err != nil { + return RuntimeConfig{}, fmt.Errorf("config_entries.bootstrap[%d]: %s", i, err) + } if err := entry.Validate(); err != nil { return RuntimeConfig{}, fmt.Errorf("config_entries.bootstrap[%d]: %s", i, err) } @@ -734,6 +787,15 @@ } } + serfAllowedCIDRSLAN, err := memberlist.ParseCIDRs(c.SerfAllowedCIDRsLAN) + if err != nil { + return RuntimeConfig{}, fmt.Errorf("serf_lan_allowed_cidrs: %s", err) + } + serfAllowedCIDRSWAN, err := memberlist.ParseCIDRs(c.SerfAllowedCIDRsWAN) + if err != nil { + return RuntimeConfig{}, fmt.Errorf("serf_wan_allowed_cidrs: %s", err) + } + // ---------------------------------------------------------------- // build runtime config // @@ -775,7 +837,6 @@ GossipWANRetransmitMult: b.intVal(c.GossipWAN.RetransmitMult), // ACL - ACLEnforceVersion8: b.boolValWithDefault(c.ACLEnforceVersion8, true), ACLsEnabled: aclsEnabled, ACLAgentMasterToken: b.stringValWithDefault(c.ACL.Tokens.AgentMaster, b.stringVal(c.ACLAgentMasterToken)), ACLAgentToken: b.stringValWithDefault(c.ACL.Tokens.Agent, b.stringVal(c.ACLAgentToken)), @@ -861,129 +922,154 @@ }, // Agent - AdvertiseAddrLAN: advertiseAddrLAN, - AdvertiseAddrWAN: advertiseAddrWAN, - BindAddr: bindAddr, - Bootstrap: b.boolVal(c.Bootstrap), - BootstrapExpect: b.intVal(c.BootstrapExpect), - CAFile: b.stringVal(c.CAFile), - CAPath: b.stringVal(c.CAPath), - CertFile: b.stringVal(c.CertFile), - CheckUpdateInterval: b.durationVal("check_update_interval", c.CheckUpdateInterval), - CheckOutputMaxSize: b.intValWithDefault(c.CheckOutputMaxSize, 4096), - Checks: checks, - ClientAddrs: clientAddrs, - ConfigEntryBootstrap: configEntries, - AutoEncryptTLS: autoEncryptTLS, - AutoEncryptDNSSAN: autoEncryptDNSSAN, - AutoEncryptIPSAN: autoEncryptIPSAN, - AutoEncryptAllowTLS: autoEncryptAllowTLS, - ConnectEnabled: connectEnabled, - ConnectCAProvider: connectCAProvider, - ConnectCAConfig: connectCAConfig, - ConnectSidecarMinPort: sidecarMinPort, - ConnectSidecarMaxPort: sidecarMaxPort, - ExposeMinPort: exposeMinPort, - ExposeMaxPort: exposeMaxPort, - DataDir: b.stringVal(c.DataDir), - Datacenter: datacenter, - DefaultQueryTime: b.durationVal("default_query_time", c.DefaultQueryTime), - DevMode: b.boolVal(b.Flags.DevMode), - DisableAnonymousSignature: b.boolVal(c.DisableAnonymousSignature), - DisableCoordinates: b.boolVal(c.DisableCoordinates), - DisableHostNodeID: b.boolVal(c.DisableHostNodeID), - DisableHTTPUnprintableCharFilter: b.boolVal(c.DisableHTTPUnprintableCharFilter), - DisableKeyringFile: b.boolVal(c.DisableKeyringFile), - DisableRemoteExec: b.boolVal(c.DisableRemoteExec), - DisableUpdateCheck: b.boolVal(c.DisableUpdateCheck), - DiscardCheckOutput: b.boolVal(c.DiscardCheckOutput), - DiscoveryMaxStale: b.durationVal("discovery_max_stale", c.DiscoveryMaxStale), - EnableAgentTLSForChecks: b.boolVal(c.EnableAgentTLSForChecks), - EnableCentralServiceConfig: b.boolVal(c.EnableCentralServiceConfig), - EnableDebug: b.boolVal(c.EnableDebug), - EnableRemoteScriptChecks: enableRemoteScriptChecks, - EnableLocalScriptChecks: enableLocalScriptChecks, - EnableSyslog: b.boolVal(c.EnableSyslog), - EnableUI: b.boolVal(c.UI), - EncryptKey: b.stringVal(c.EncryptKey), - EncryptVerifyIncoming: b.boolVal(c.EncryptVerifyIncoming), - EncryptVerifyOutgoing: b.boolVal(c.EncryptVerifyOutgoing), - GRPCPort: grpcPort, - GRPCAddrs: grpcAddrs, - HTTPMaxConnsPerClient: b.intVal(c.Limits.HTTPMaxConnsPerClient), - HTTPSHandshakeTimeout: b.durationVal("limits.https_handshake_timeout", c.Limits.HTTPSHandshakeTimeout), - KeyFile: b.stringVal(c.KeyFile), - KVMaxValueSize: b.uint64Val(c.Limits.KVMaxValueSize), - LeaveDrainTime: b.durationVal("performance.leave_drain_time", c.Performance.LeaveDrainTime), - LeaveOnTerm: leaveOnTerm, - LogLevel: b.stringVal(c.LogLevel), - LogJSON: b.boolVal(c.LogJSON), - LogFile: b.stringVal(c.LogFile), - LogRotateBytes: b.intVal(c.LogRotateBytes), - LogRotateDuration: b.durationVal("log_rotate_duration", c.LogRotateDuration), - LogRotateMaxFiles: b.intVal(c.LogRotateMaxFiles), - MaxQueryTime: b.durationVal("max_query_time", c.MaxQueryTime), - NodeID: types.NodeID(b.stringVal(c.NodeID)), - NodeMeta: c.NodeMeta, - NodeName: b.nodeName(c.NodeName), - NonVotingServer: b.boolVal(c.NonVotingServer), - PidFile: b.stringVal(c.PidFile), - PrimaryDatacenter: primaryDatacenter, - RPCAdvertiseAddr: rpcAdvertiseAddr, - RPCBindAddr: rpcBindAddr, - RPCHandshakeTimeout: b.durationVal("limits.rpc_handshake_timeout", c.Limits.RPCHandshakeTimeout), - RPCHoldTimeout: b.durationVal("performance.rpc_hold_timeout", c.Performance.RPCHoldTimeout), - RPCMaxBurst: b.intVal(c.Limits.RPCMaxBurst), - RPCMaxConnsPerClient: b.intVal(c.Limits.RPCMaxConnsPerClient), - RPCProtocol: b.intVal(c.RPCProtocol), - RPCRateLimit: rate.Limit(b.float64Val(c.Limits.RPCRate)), - RaftProtocol: b.intVal(c.RaftProtocol), - RaftSnapshotThreshold: b.intVal(c.RaftSnapshotThreshold), - RaftSnapshotInterval: b.durationVal("raft_snapshot_interval", c.RaftSnapshotInterval), - RaftTrailingLogs: b.intVal(c.RaftTrailingLogs), - ReconnectTimeoutLAN: b.durationVal("reconnect_timeout", c.ReconnectTimeoutLAN), - ReconnectTimeoutWAN: b.durationVal("reconnect_timeout_wan", c.ReconnectTimeoutWAN), - RejoinAfterLeave: b.boolVal(c.RejoinAfterLeave), - RetryJoinIntervalLAN: b.durationVal("retry_interval", c.RetryJoinIntervalLAN), - RetryJoinIntervalWAN: b.durationVal("retry_interval_wan", c.RetryJoinIntervalWAN), - RetryJoinLAN: b.expandAllOptionalAddrs("retry_join", c.RetryJoinLAN), - RetryJoinMaxAttemptsLAN: b.intVal(c.RetryJoinMaxAttemptsLAN), - RetryJoinMaxAttemptsWAN: b.intVal(c.RetryJoinMaxAttemptsWAN), - RetryJoinWAN: b.expandAllOptionalAddrs("retry_join_wan", c.RetryJoinWAN), - SegmentName: b.stringVal(c.SegmentName), - Segments: segments, - SerfAdvertiseAddrLAN: serfAdvertiseAddrLAN, - SerfAdvertiseAddrWAN: serfAdvertiseAddrWAN, - SerfBindAddrLAN: serfBindAddrLAN, - SerfBindAddrWAN: serfBindAddrWAN, - SerfPortLAN: serfPortLAN, - SerfPortWAN: serfPortWAN, - ServerMode: b.boolVal(c.ServerMode), - ServerName: b.stringVal(c.ServerName), - ServerPort: serverPort, - Services: services, - SessionTTLMin: b.durationVal("session_ttl_min", c.SessionTTLMin), - SkipLeaveOnInt: skipLeaveOnInt, - StartJoinAddrsLAN: b.expandAllOptionalAddrs("start_join", c.StartJoinAddrsLAN), - StartJoinAddrsWAN: b.expandAllOptionalAddrs("start_join_wan", c.StartJoinAddrsWAN), - SyslogFacility: b.stringVal(c.SyslogFacility), - TLSCipherSuites: b.tlsCipherSuites("tls_cipher_suites", c.TLSCipherSuites), - TLSMinVersion: b.stringVal(c.TLSMinVersion), - TLSPreferServerCipherSuites: b.boolVal(c.TLSPreferServerCipherSuites), - TaggedAddresses: c.TaggedAddresses, - TranslateWANAddrs: b.boolVal(c.TranslateWANAddrs), - TxnMaxReqLen: b.uint64Val(c.Limits.TxnMaxReqLen), - UIDir: b.stringVal(c.UIDir), - UIContentPath: UIPathBuilder(b.stringVal(c.UIContentPath)), - UnixSocketGroup: b.stringVal(c.UnixSocket.Group), - UnixSocketMode: b.stringVal(c.UnixSocket.Mode), - UnixSocketUser: b.stringVal(c.UnixSocket.User), - VerifyIncoming: b.boolVal(c.VerifyIncoming), - VerifyIncomingHTTPS: b.boolVal(c.VerifyIncomingHTTPS), - VerifyIncomingRPC: b.boolVal(c.VerifyIncomingRPC), - VerifyOutgoing: verifyOutgoing, - VerifyServerHostname: verifyServerName, - Watches: c.Watches, + AdvertiseAddrLAN: advertiseAddrLAN, + AdvertiseAddrWAN: advertiseAddrWAN, + BindAddr: bindAddr, + Bootstrap: b.boolVal(c.Bootstrap), + BootstrapExpect: b.intVal(c.BootstrapExpect), + Cache: cache.Options{ + EntryFetchRate: rate.Limit( + b.float64ValWithDefault(c.Cache.EntryFetchRate, float64(cache.DefaultEntryFetchRate)), + ), + EntryFetchMaxBurst: b.intValWithDefault( + c.Cache.EntryFetchMaxBurst, cache.DefaultEntryFetchMaxBurst, + ), + }, + CAFile: b.stringVal(c.CAFile), + CAPath: b.stringVal(c.CAPath), + CertFile: b.stringVal(c.CertFile), + CheckUpdateInterval: b.durationVal("check_update_interval", c.CheckUpdateInterval), + CheckOutputMaxSize: b.intValWithDefault(c.CheckOutputMaxSize, 4096), + Checks: checks, + ClientAddrs: clientAddrs, + ConfigEntryBootstrap: configEntries, + AutoEncryptTLS: autoEncryptTLS, + AutoEncryptDNSSAN: autoEncryptDNSSAN, + AutoEncryptIPSAN: autoEncryptIPSAN, + AutoEncryptAllowTLS: autoEncryptAllowTLS, + AutoConfig: autoConfig, + ConnectEnabled: connectEnabled, + ConnectCAProvider: connectCAProvider, + ConnectCAConfig: connectCAConfig, + ConnectMeshGatewayWANFederationEnabled: connectMeshGatewayWANFederationEnabled, + ConnectSidecarMinPort: sidecarMinPort, + ConnectSidecarMaxPort: sidecarMaxPort, + ConnectTestCALeafRootChangeSpread: b.durationVal("connect.test_ca_leaf_root_change_spread", c.Connect.TestCALeafRootChangeSpread), + ExposeMinPort: exposeMinPort, + ExposeMaxPort: exposeMaxPort, + DataDir: b.stringVal(c.DataDir), + Datacenter: datacenter, + DefaultQueryTime: b.durationVal("default_query_time", c.DefaultQueryTime), + DevMode: b.boolVal(b.devMode), + DisableAnonymousSignature: b.boolVal(c.DisableAnonymousSignature), + DisableCoordinates: b.boolVal(c.DisableCoordinates), + DisableHostNodeID: b.boolVal(c.DisableHostNodeID), + DisableHTTPUnprintableCharFilter: b.boolVal(c.DisableHTTPUnprintableCharFilter), + DisableKeyringFile: b.boolVal(c.DisableKeyringFile), + DisableRemoteExec: b.boolVal(c.DisableRemoteExec), + DisableUpdateCheck: b.boolVal(c.DisableUpdateCheck), + DiscardCheckOutput: b.boolVal(c.DiscardCheckOutput), + DiscoveryMaxStale: b.durationVal("discovery_max_stale", c.DiscoveryMaxStale), + EnableAgentTLSForChecks: b.boolVal(c.EnableAgentTLSForChecks), + EnableCentralServiceConfig: b.boolVal(c.EnableCentralServiceConfig), + EnableDebug: b.boolVal(c.EnableDebug), + EnableRemoteScriptChecks: enableRemoteScriptChecks, + EnableLocalScriptChecks: enableLocalScriptChecks, + + EnableUI: b.boolVal(c.UI), + EncryptKey: b.stringVal(c.EncryptKey), + EncryptVerifyIncoming: b.boolVal(c.EncryptVerifyIncoming), + EncryptVerifyOutgoing: b.boolVal(c.EncryptVerifyOutgoing), + GRPCPort: grpcPort, + GRPCAddrs: grpcAddrs, + HTTPMaxConnsPerClient: b.intVal(c.Limits.HTTPMaxConnsPerClient), + HTTPSHandshakeTimeout: b.durationVal("limits.https_handshake_timeout", c.Limits.HTTPSHandshakeTimeout), + KeyFile: b.stringVal(c.KeyFile), + KVMaxValueSize: b.uint64Val(c.Limits.KVMaxValueSize), + LeaveDrainTime: b.durationVal("performance.leave_drain_time", c.Performance.LeaveDrainTime), + LeaveOnTerm: leaveOnTerm, + Logging: logging.Config{ + LogLevel: b.stringVal(c.LogLevel), + LogJSON: b.boolVal(c.LogJSON), + LogFilePath: b.stringVal(c.LogFile), + EnableSyslog: b.boolVal(c.EnableSyslog), + SyslogFacility: b.stringVal(c.SyslogFacility), + LogRotateDuration: b.durationVal("log_rotate_duration", c.LogRotateDuration), + LogRotateBytes: b.intVal(c.LogRotateBytes), + LogRotateMaxFiles: b.intVal(c.LogRotateMaxFiles), + }, + MaxQueryTime: b.durationVal("max_query_time", c.MaxQueryTime), + NodeID: types.NodeID(b.stringVal(c.NodeID)), + NodeMeta: c.NodeMeta, + NodeName: b.nodeName(c.NodeName), + NonVotingServer: b.boolVal(c.NonVotingServer), + PidFile: b.stringVal(c.PidFile), + PrimaryDatacenter: primaryDatacenter, + PrimaryGateways: b.expandAllOptionalAddrs("primary_gateways", c.PrimaryGateways), + PrimaryGatewaysInterval: b.durationVal("primary_gateways_interval", c.PrimaryGatewaysInterval), + RPCAdvertiseAddr: rpcAdvertiseAddr, + RPCBindAddr: rpcBindAddr, + RPCHandshakeTimeout: b.durationVal("limits.rpc_handshake_timeout", c.Limits.RPCHandshakeTimeout), + RPCHoldTimeout: b.durationVal("performance.rpc_hold_timeout", c.Performance.RPCHoldTimeout), + RPCMaxBurst: b.intVal(c.Limits.RPCMaxBurst), + RPCMaxConnsPerClient: b.intVal(c.Limits.RPCMaxConnsPerClient), + RPCProtocol: b.intVal(c.RPCProtocol), + RPCRateLimit: rate.Limit(b.float64Val(c.Limits.RPCRate)), + RaftProtocol: b.intVal(c.RaftProtocol), + RaftSnapshotThreshold: b.intVal(c.RaftSnapshotThreshold), + RaftSnapshotInterval: b.durationVal("raft_snapshot_interval", c.RaftSnapshotInterval), + RaftTrailingLogs: b.intVal(c.RaftTrailingLogs), + ReconnectTimeoutLAN: b.durationVal("reconnect_timeout", c.ReconnectTimeoutLAN), + ReconnectTimeoutWAN: b.durationVal("reconnect_timeout_wan", c.ReconnectTimeoutWAN), + RejoinAfterLeave: b.boolVal(c.RejoinAfterLeave), + RetryJoinIntervalLAN: b.durationVal("retry_interval", c.RetryJoinIntervalLAN), + RetryJoinIntervalWAN: b.durationVal("retry_interval_wan", c.RetryJoinIntervalWAN), + RetryJoinLAN: b.expandAllOptionalAddrs("retry_join", c.RetryJoinLAN), + RetryJoinMaxAttemptsLAN: b.intVal(c.RetryJoinMaxAttemptsLAN), + RetryJoinMaxAttemptsWAN: b.intVal(c.RetryJoinMaxAttemptsWAN), + RetryJoinWAN: b.expandAllOptionalAddrs("retry_join_wan", c.RetryJoinWAN), + SegmentName: b.stringVal(c.SegmentName), + Segments: segments, + SerfAdvertiseAddrLAN: serfAdvertiseAddrLAN, + SerfAdvertiseAddrWAN: serfAdvertiseAddrWAN, + SerfAllowedCIDRsLAN: serfAllowedCIDRSLAN, + SerfAllowedCIDRsWAN: serfAllowedCIDRSWAN, + SerfBindAddrLAN: serfBindAddrLAN, + SerfBindAddrWAN: serfBindAddrWAN, + SerfPortLAN: serfPortLAN, + SerfPortWAN: serfPortWAN, + ServerMode: b.boolVal(c.ServerMode), + ServerName: b.stringVal(c.ServerName), + ServerPort: serverPort, + Services: services, + SessionTTLMin: b.durationVal("session_ttl_min", c.SessionTTLMin), + SkipLeaveOnInt: skipLeaveOnInt, + StartJoinAddrsLAN: b.expandAllOptionalAddrs("start_join", c.StartJoinAddrsLAN), + StartJoinAddrsWAN: b.expandAllOptionalAddrs("start_join_wan", c.StartJoinAddrsWAN), + TLSCipherSuites: b.tlsCipherSuites("tls_cipher_suites", c.TLSCipherSuites), + TLSMinVersion: b.stringVal(c.TLSMinVersion), + TLSPreferServerCipherSuites: b.boolVal(c.TLSPreferServerCipherSuites), + TaggedAddresses: c.TaggedAddresses, + TranslateWANAddrs: b.boolVal(c.TranslateWANAddrs), + TxnMaxReqLen: b.uint64Val(c.Limits.TxnMaxReqLen), + UIDir: b.stringVal(c.UIDir), + UIContentPath: UIPathBuilder(b.stringVal(c.UIContentPath)), + UnixSocketGroup: b.stringVal(c.UnixSocket.Group), + UnixSocketMode: b.stringVal(c.UnixSocket.Mode), + UnixSocketUser: b.stringVal(c.UnixSocket.User), + VerifyIncoming: b.boolVal(c.VerifyIncoming), + VerifyIncomingHTTPS: b.boolVal(c.VerifyIncomingHTTPS), + VerifyIncomingRPC: b.boolVal(c.VerifyIncomingRPC), + VerifyOutgoing: verifyOutgoing, + VerifyServerHostname: verifyServerName, + Watches: c.Watches, + } + + if rt.Cache.EntryFetchMaxBurst <= 0 { + return RuntimeConfig{}, fmt.Errorf("cache.entry_fetch_max_burst must be strictly positive, was: %v", rt.Cache.EntryFetchMaxBurst) + } + if rt.Cache.EntryFetchRate <= 0 { + return RuntimeConfig{}, fmt.Errorf("cache.entry_fetch_rate must be strictly positive, was: %v", rt.Cache.EntryFetchRate) } if entCfg, err := b.BuildEnterpriseRuntimeConfig(&c); err != nil { @@ -1001,7 +1087,7 @@ return rt, nil } -// Validate performs semantical validation of the runtime configuration. +// Validate performs semantic validation of the runtime configuration. func (b *Builder) Validate(rt RuntimeConfig) error { // reDatacenter defines a regexp for a valid datacenter name var reDatacenter = regexp.MustCompile("^[a-z0-9_-]+$") @@ -1040,9 +1126,20 @@ return fmt.Errorf("data_dir %q is not a directory", rt.DataDir) } } - if rt.NodeName == "" { + + switch { + case rt.NodeName == "": return fmt.Errorf("node_name cannot be empty") + case dns.InvalidNameRe.MatchString(rt.NodeName): + b.warn("Node name %q will not be discoverable "+ + "via DNS due to invalid characters. Valid characters include "+ + "all alpha-numerics and dashes.", rt.NodeName) + case len(rt.NodeName) > dns.MaxLabelLength: + b.warn("Node name %q will not be discoverable "+ + "via DNS due to it being too long. Valid lengths are between "+ + "1 and 63 bytes.", rt.NodeName) } + if ipaddr.IsAny(rt.AdvertiseAddrLAN.IP) { return fmt.Errorf("Advertise address cannot be 0.0.0.0, :: or [::]") } @@ -1092,11 +1189,12 @@ if rt.ACLDatacenter != "" && !reDatacenter.MatchString(rt.ACLDatacenter) { return fmt.Errorf("acl_datacenter cannot be %q. Please use only [a-z0-9-_]", rt.ACLDatacenter) } - if rt.EnableUI && rt.UIDir != "" { + // In DevMode, UI is enabled by default, so to enable rt.UIDir, don't perform this check + if !rt.DevMode && rt.EnableUI && rt.UIDir != "" { return fmt.Errorf( "Both the ui and ui-dir flags were specified, please provide only one.\n" + "If trying to use your own web UI resources, use the ui-dir flag.\n" + - "If using Consul version 0.7.0 or later, the web UI is included in the binary so use ui to enable it") + "The web UI is included in the binary so use ui to enable it") } if rt.DNSUDPAnswerLimit < 0 { return fmt.Errorf("dns_config.udp_answer_limit cannot be %d. Must be greater than or equal to zero", rt.DNSUDPAnswerLimit) @@ -1104,7 +1202,7 @@ if rt.DNSARecordLimit < 0 { return fmt.Errorf("dns_config.a_record_limit cannot be %d. Must be greater than or equal to zero", rt.DNSARecordLimit) } - if err := structs.ValidateMetadata(rt.NodeMeta, false); err != nil { + if err := structs.ValidateNodeMetadata(rt.NodeMeta, false); err != nil { return fmt.Errorf("node_meta invalid: %v", err) } if rt.EncryptKey != "" { @@ -1113,6 +1211,29 @@ } } + if rt.ConnectMeshGatewayWANFederationEnabled && !rt.ServerMode { + return fmt.Errorf("'connect.enable_mesh_gateway_wan_federation = true' requires 'server = true'") + } + if rt.ConnectMeshGatewayWANFederationEnabled && strings.ContainsAny(rt.NodeName, "/") { + return fmt.Errorf("'connect.enable_mesh_gateway_wan_federation = true' requires that 'node_name' not contain '/' characters") + } + if rt.ConnectMeshGatewayWANFederationEnabled { + if len(rt.StartJoinAddrsWAN) > 0 { + return fmt.Errorf("'start_join_wan' is incompatible with 'connect.enable_mesh_gateway_wan_federation = true'") + } + if len(rt.RetryJoinWAN) > 0 { + return fmt.Errorf("'retry_join_wan' is incompatible with 'connect.enable_mesh_gateway_wan_federation = true'") + } + } + if len(rt.PrimaryGateways) > 0 { + if !rt.ServerMode { + return fmt.Errorf("'primary_gateways' requires 'server = true'") + } + if rt.PrimaryDatacenter == rt.Datacenter { + return fmt.Errorf("'primary_gateways' should only be configured in a secondary datacenter") + } + } + // Check the data dir for signs of an un-migrated Consul 0.5.x or older // server. Consul refuses to start if this is present to protect a server // with existing data from starting on a fresh data set. @@ -1192,6 +1313,13 @@ } } + if rt.ServerMode && rt.AutoEncryptTLS { + return fmt.Errorf("auto_encrypt.tls can only be used on a client.") + } + if !rt.ServerMode && rt.AutoEncryptAllowTLS { + return fmt.Errorf("auto_encrypt.allow_tls can only be used on a server.") + } + // ---------------------------------------------------------------- // warnings // @@ -1218,6 +1346,23 @@ } } + if err := checkLimitsFromMaxConnsPerClient(rt.HTTPMaxConnsPerClient); err != nil { + return err + } + + if rt.AutoConfig.Enabled && rt.AutoEncryptTLS { + return fmt.Errorf("both auto_encrypt.tls and auto_config.enabled cannot be set to true.") + } + + if err := b.validateAutoConfig(rt); err != nil { + return err + } + + if err := validateRemoteScriptsChecks(rt); err != nil { + // TODO: make this an error in a future version + b.warn(err.Error()) + } + return nil } @@ -1335,8 +1480,10 @@ checks = append(checks, b.checkVal(v.Check).CheckType()) } + kind := b.serviceKindVal(v.Kind) + meta := make(map[string]string) - if err := structs.ValidateMetadata(v.Meta, false); err != nil { + if err := structs.ValidateServiceMetadata(kind, v.Meta, false); err != nil { b.err = multierror.Append(fmt.Errorf("invalid meta for service %s: %v", b.stringVal(v.Name), err)) } else { meta = v.Meta @@ -1355,7 +1502,7 @@ b.err = multierror.Append(fmt.Errorf("Invalid weight definition for service %s: %s", b.stringVal(v.Name), err)) } return &structs.ServiceDefinition{ - Kind: b.serviceKindVal(v.Kind), + Kind: kind, ID: b.stringVal(v.ID), Name: b.stringVal(v.Name), Tags: v.Tags, @@ -1382,6 +1529,10 @@ return structs.ServiceKindConnectProxy case string(structs.ServiceKindMeshGateway): return structs.ServiceKindMeshGateway + case string(structs.ServiceKindTerminatingGateway): + return structs.ServiceKindTerminatingGateway + case string(structs.ServiceKindIngressGateway): + return structs.ServiceKindIngressGateway default: return structs.ServiceKindTypical } @@ -1572,14 +1723,18 @@ return b.stringValWithDefault(v, "") } -func (b *Builder) float64Val(v *float64) float64 { +func (b *Builder) float64ValWithDefault(v *float64, defaultVal float64) float64 { if v == nil { - return 0 + return defaultVal } return *v } +func (b *Builder) float64Val(v *float64) float64 { + return b.float64ValWithDefault(v, 0) +} + func (b *Builder) cidrsVal(name string, v []string) (nets []*net.IPNet) { if v == nil { return @@ -1612,7 +1767,7 @@ func (b *Builder) nodeName(v *string) string { nodeName := b.stringVal(v) if nodeName == "" { - fn := b.Hostname + fn := b.hostname if fn == nil { fn = os.Hostname } @@ -1845,6 +2000,171 @@ return a != nil && ok } +func (b *Builder) autoConfigVal(raw AutoConfigRaw) AutoConfig { + var val AutoConfig + + val.Enabled = b.boolValWithDefault(raw.Enabled, false) + val.IntroToken = b.stringVal(raw.IntroToken) + + // default the IntroToken to the env variable if specified. + if envToken := os.Getenv("CONSUL_INTRO_TOKEN"); envToken != "" { + if val.IntroToken != "" { + b.warn("Both auto_config.intro_token and the CONSUL_INTRO_TOKEN environment variable are set. Using the value from the environment variable") + } + + val.IntroToken = envToken + } + val.IntroTokenFile = b.stringVal(raw.IntroTokenFile) + // These can be go-discover values and so don't have to resolve fully yet + val.ServerAddresses = b.expandAllOptionalAddrs("auto_config.server_addresses", raw.ServerAddresses) + val.DNSSANs = raw.DNSSANs + + for _, i := range raw.IPSANs { + ip := net.ParseIP(i) + if ip == nil { + b.warn(fmt.Sprintf("Cannot parse ip %q from auto_config.ip_sans", i)) + continue + } + val.IPSANs = append(val.IPSANs, ip) + } + + val.Authorizer = b.autoConfigAuthorizerVal(raw.Authorization) + + return val +} + +func (b *Builder) autoConfigAuthorizerVal(raw AutoConfigAuthorizationRaw) AutoConfigAuthorizer { + // Our config file syntax wraps the static authorizer configuration in a "static" stanza. However + // internally we do not support multiple configured authorization types so the RuntimeConfig just + // inlines the static one. While we can and probably should extend the authorization types in the + // future to support dynamic authorizers (ACL Auth Methods configured via normal APIs) its not + // needed right now so the configuration types will remain simplistic until they need to be otherwise. + var val AutoConfigAuthorizer + + val.Enabled = b.boolValWithDefault(raw.Enabled, false) + val.ClaimAssertions = raw.Static.ClaimAssertions + val.AllowReuse = b.boolValWithDefault(raw.Static.AllowReuse, false) + val.AuthMethod = structs.ACLAuthMethod{ + Name: "Auto Config Authorizer", + Type: "jwt", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + Config: map[string]interface{}{ + "JWTSupportedAlgs": raw.Static.JWTSupportedAlgs, + "BoundAudiences": raw.Static.BoundAudiences, + "ClaimMappings": raw.Static.ClaimMappings, + "ListClaimMappings": raw.Static.ListClaimMappings, + "OIDCDiscoveryURL": b.stringVal(raw.Static.OIDCDiscoveryURL), + "OIDCDiscoveryCACert": b.stringVal(raw.Static.OIDCDiscoveryCACert), + "JWKSURL": b.stringVal(raw.Static.JWKSURL), + "JWKSCACert": b.stringVal(raw.Static.JWKSCACert), + "JWTValidationPubKeys": raw.Static.JWTValidationPubKeys, + "BoundIssuer": b.stringVal(raw.Static.BoundIssuer), + "ExpirationLeeway": b.durationVal("auto_config.authorization.static.expiration_leeway", raw.Static.ExpirationLeeway), + "NotBeforeLeeway": b.durationVal("auto_config.authorization.static.not_before_leeway", raw.Static.NotBeforeLeeway), + "ClockSkewLeeway": b.durationVal("auto_config.authorization.static.clock_skew_leeway", raw.Static.ClockSkewLeeway), + }, + } + + return val +} + +func (b *Builder) validateAutoConfig(rt RuntimeConfig) error { + autoconf := rt.AutoConfig + + if err := b.validateAutoConfigAuthorizer(rt); err != nil { + return err + } + + if !autoconf.Enabled { + return nil + } + + // Right now we require TLS as everything we are going to transmit via auto-config is sensitive. Signed Certificates, Tokens + // and other encryption keys. This must be transmitted over a secure connection so we don't allow doing otherwise. + if !rt.VerifyOutgoing { + return fmt.Errorf("auto_config.enabled cannot be set without configuring TLS for server communications") + } + + // Auto Config doesn't currently support configuring servers + if rt.ServerMode { + return fmt.Errorf("auto_config.enabled cannot be set to true for server agents.") + } + + // When both are set we will prefer the given value over the file. + if autoconf.IntroToken != "" && autoconf.IntroTokenFile != "" { + b.warn("Both an intro token and intro token file are set. The intro token will be used instead of the file") + } else if autoconf.IntroToken == "" && autoconf.IntroTokenFile == "" { + return fmt.Errorf("One of auto_config.intro_token, auto_config.intro_token_file or the CONSUL_INTRO_TOKEN environment variable must be set to enable auto_config") + } + + if len(autoconf.ServerAddresses) == 0 { + // TODO (autoconf) can we/should we infer this from the join/retry join addresses. I think no, as we will potentially + // be overriding those retry join addresses with the autoconf process anyways. + return fmt.Errorf("auto_config.enabled is set without providing a list of addresses") + } + + return nil +} + +func (b *Builder) validateAutoConfigAuthorizer(rt RuntimeConfig) error { + authz := rt.AutoConfig.Authorizer + + if !authz.Enabled { + return nil + } + + // When in a secondary datacenter with ACLs enabled, we require token replication to be enabled + // as that is what allows us to create the local tokens to distribute to the clients. Otherwise + // we would have to have a token with the ability to create ACL tokens in the primary and make + // RPCs in response to auto config requests. + if rt.ACLsEnabled && rt.PrimaryDatacenter != rt.Datacenter && !rt.ACLTokenReplication { + return fmt.Errorf("Enabling auto-config authorization (auto_config.authorization.enabled) in non primary datacenters with ACLs enabled (acl.enabled) requires also enabling ACL token replication (acl.enable_token_replication)") + } + + // Auto Config Authorization is only supported on servers + if !rt.ServerMode { + return fmt.Errorf("auto_config.authorization.enabled cannot be set to true for client agents") + } + + // Right now we require TLS as everything we are going to transmit via auto-config is sensitive. Signed Certificates, Tokens + // and other encryption keys. This must be transmitted over a secure connection so we don't allow doing otherwise. + if rt.CertFile == "" { + return fmt.Errorf("auto_config.authorization.enabled cannot be set without providing a TLS certificate for the server") + } + + // build out the validator to ensure that the given configuration was valid + null := hclog.NewNullLogger() + validator, err := ssoauth.NewValidator(null, &authz.AuthMethod) + + if err != nil { + return fmt.Errorf("auto_config.authorization.static has invalid configuration: %v", err) + } + + // create a blank identity for use to validate the claim assertions. + blankID := validator.NewIdentity() + varMap := map[string]string{ + "node": "fake", + "segment": "fake", + } + + // validate all the claim assertions + for _, raw := range authz.ClaimAssertions { + // validate any HIL + filled, err := libtempl.InterpolateHIL(raw, varMap, true) + if err != nil { + return fmt.Errorf("auto_config.authorization.static.claim_assertion %q is invalid: %v", raw, err) + } + + // validate the bexpr syntax - note that for now all the keys mapped by the claim mappings + // are not validateable due to them being put inside a map. Some bexpr updates to setup keys + // from current map keys would probably be nice here. + if _, err := bexpr.CreateEvaluatorForType(filled, nil, blankID.SelectableFields); err != nil { + return fmt.Errorf("auto_config.authorization.static.claim_assertion %q is invalid: %v", raw, err) + } + } + return nil +} + // decodeBytes returns the encryption key decoded. func decodeBytes(key string) ([]byte, error) { return base64.StdEncoding.DecodeString(key) @@ -1884,3 +2204,15 @@ } return "/ui/" } + +const remoteScriptCheckSecurityWarning = "using enable-script-checks without ACLs and without allow_write_http_from is DANGEROUS, use enable-local-script-checks instead, see https://www.hashicorp.com/blog/protecting-consul-from-rce-risk-in-specific-configurations/" + +// validateRemoteScriptsChecks returns an error if EnableRemoteScriptChecks is +// enabled without other security features, which mitigate the risk of executing +// remote scripts. +func validateRemoteScriptsChecks(conf RuntimeConfig) error { + if conf.EnableRemoteScriptChecks && !conf.ACLsEnabled && len(conf.AllowWriteHTTPFrom) == 0 { + return errors.New(remoteScriptCheckSecurityWarning) + } + return nil +} diff -Nru consul-1.7.4+dfsg1/agent/config/builder_oss.go consul-1.8.7+dfsg1/agent/config/builder_oss.go --- consul-1.7.4+dfsg1/agent/config/builder_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/builder_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -37,6 +37,9 @@ "acl.tokens.managed_service_provider": func(c *Config) { c.ACL.Tokens.ManagedServiceProvider = nil }, + "audit": func(c *Config) { + c.Audit = nil + }, } ) diff -Nru consul-1.7.4+dfsg1/agent/config/builder_test.go consul-1.8.7+dfsg1/agent/config/builder_test.go --- consul-1.7.4+dfsg1/agent/config/builder_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/builder_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,184 @@ +package config + +import ( + "fmt" + "io/ioutil" + "net" + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestLoad(t *testing.T) { + // Basically just testing that injection of the extra + // source works. + devMode := true + builderOpts := BuilderOpts{ + // putting this in dev mode so that the config validates + // without having to specify a data directory + DevMode: &devMode, + } + + cfg, warnings, err := Load(builderOpts, FileSource{ + Name: "test", + Format: "hcl", + Data: `node_name = "hobbiton"`, + }, + FileSource{ + Name: "overrides", + Format: "json", + Data: `{"check_reap_interval": "1ms"}`, + }) + + require.NoError(t, err) + require.Empty(t, warnings) + require.NotNil(t, cfg) + require.Equal(t, "hobbiton", cfg.NodeName) + require.Equal(t, 1*time.Millisecond, cfg.CheckReapInterval) +} + +func TestShouldParseFile(t *testing.T) { + var testcases = []struct { + filename string + configFormat string + expected bool + }{ + {filename: "config.json", expected: true}, + {filename: "config.hcl", expected: true}, + {filename: "config", configFormat: "hcl", expected: true}, + {filename: "config.js", configFormat: "json", expected: true}, + {filename: "config.yaml", expected: false}, + } + + for _, tc := range testcases { + name := fmt.Sprintf("filename=%s, format=%s", tc.filename, tc.configFormat) + t.Run(name, func(t *testing.T) { + require.Equal(t, tc.expected, shouldParseFile(tc.filename, tc.configFormat)) + }) + } +} + +func TestNewBuilder_PopulatesSourcesFromConfigFiles(t *testing.T) { + paths := setupConfigFiles(t) + + b, err := NewBuilder(BuilderOpts{ConfigFiles: paths}) + require.NoError(t, err) + + expected := []Source{ + FileSource{Name: paths[0], Format: "hcl", Data: "content a"}, + FileSource{Name: paths[1], Format: "json", Data: "content b"}, + FileSource{Name: filepath.Join(paths[3], "a.hcl"), Format: "hcl", Data: "content a"}, + FileSource{Name: filepath.Join(paths[3], "b.json"), Format: "json", Data: "content b"}, + } + require.Equal(t, expected, b.Sources) + require.Len(t, b.Warnings, 2) +} + +func TestNewBuilder_PopulatesSourcesFromConfigFiles_WithConfigFormat(t *testing.T) { + paths := setupConfigFiles(t) + + b, err := NewBuilder(BuilderOpts{ConfigFiles: paths, ConfigFormat: "hcl"}) + require.NoError(t, err) + + expected := []Source{ + FileSource{Name: paths[0], Format: "hcl", Data: "content a"}, + FileSource{Name: paths[1], Format: "hcl", Data: "content b"}, + FileSource{Name: paths[2], Format: "hcl", Data: "content c"}, + FileSource{Name: filepath.Join(paths[3], "a.hcl"), Format: "hcl", Data: "content a"}, + FileSource{Name: filepath.Join(paths[3], "b.json"), Format: "hcl", Data: "content b"}, + FileSource{Name: filepath.Join(paths[3], "c.yaml"), Format: "hcl", Data: "content c"}, + } + require.Equal(t, expected, b.Sources) +} + +// TODO: this would be much nicer with gotest.tools/fs +func setupConfigFiles(t *testing.T) []string { + t.Helper() + path, err := ioutil.TempDir("", t.Name()) + require.NoError(t, err) + t.Cleanup(func() { os.RemoveAll(path) }) + + subpath := filepath.Join(path, "sub") + err = os.Mkdir(subpath, 0755) + require.NoError(t, err) + + for _, dir := range []string{path, subpath} { + err = ioutil.WriteFile(filepath.Join(dir, "a.hcl"), []byte("content a"), 0644) + require.NoError(t, err) + + err = ioutil.WriteFile(filepath.Join(dir, "b.json"), []byte("content b"), 0644) + require.NoError(t, err) + + err = ioutil.WriteFile(filepath.Join(dir, "c.yaml"), []byte("content c"), 0644) + require.NoError(t, err) + } + return []string{ + filepath.Join(path, "a.hcl"), + filepath.Join(path, "b.json"), + filepath.Join(path, "c.yaml"), + subpath, + } +} + +func TestBuilder_BuildAndValidate_NodeName(t *testing.T) { + type testCase struct { + name string + nodeName string + expectedWarn string + } + + fn := func(t *testing.T, tc testCase) { + b, err := NewBuilder(BuilderOpts{ + Config: Config{ + NodeName: pString(tc.nodeName), + DataDir: pString("dir"), + }, + }) + patchBuilderShims(b) + require.NoError(t, err) + _, err = b.BuildAndValidate() + require.NoError(t, err) + require.Len(t, b.Warnings, 1) + require.Contains(t, b.Warnings[0], tc.expectedWarn) + } + + var testCases = []testCase{ + { + name: "invalid character - unicode", + nodeName: "🐼", + expectedWarn: `Node name "🐼" will not be discoverable via DNS due to invalid characters`, + }, + { + name: "invalid character - slash", + nodeName: "thing/other/ok", + expectedWarn: `Node name "thing/other/ok" will not be discoverable via DNS due to invalid characters`, + }, + { + name: "too long", + nodeName: strings.Repeat("a", 66), + expectedWarn: "due to it being too long.", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + fn(t, tc) + }) + } +} + +func patchBuilderShims(b *Builder) { + b.hostname = func() (string, error) { + return "thehostname", nil + } + b.getPrivateIPv4 = func() ([]*net.IPAddr, error) { + return []*net.IPAddr{ipAddr("10.0.0.1")}, nil + } + b.getPublicIPv6 = func() ([]*net.IPAddr, error) { + return []*net.IPAddr{ipAddr("dead:beef::1")}, nil + } +} diff -Nru consul-1.7.4+dfsg1/agent/config/config.go consul-1.8.7+dfsg1/agent/config/config.go --- consul-1.7.4+dfsg1/agent/config/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,10 +3,8 @@ import ( "encoding/json" "fmt" - "strings" - "github.com/hashicorp/consul/lib" - "github.com/hashicorp/go-multierror" + "github.com/hashicorp/consul/lib/decode" "github.com/hashicorp/hcl" "github.com/mitchellh/mapstructure" ) @@ -16,141 +14,94 @@ SerfWANKeyring = "serf/remote.keyring" ) -type Source struct { +// Source parses configuration from some source. +type Source interface { + // Source returns an identifier for the Source that can be used in error message + Source() string + // Parse a configuration and return the result. + Parse() (Config, mapstructure.Metadata, error) +} + +// ErrNoData indicates to Builder.Build that the source contained no data, and +// it can be skipped. +var ErrNoData = fmt.Errorf("config source contained no data") + +// FileSource implements Source and parses a config from a file. +type FileSource struct { Name string Format string Data string } -func FormatFrom(name string) string { - switch { - case strings.HasSuffix(name, ".json"): - return "json" - case strings.HasSuffix(name, ".hcl"): - return "hcl" - default: - return "" - } +func (f FileSource) Source() string { + return f.Name } -// Parse parses a config fragment in either JSON or HCL format. -func Parse(data string, format string) (c Config, keys []string, err error) { +// Parse a config file in either JSON or HCL format. +func (f FileSource) Parse() (Config, mapstructure.Metadata, error) { + if f.Name == "" || f.Data == "" { + return Config{}, mapstructure.Metadata{}, ErrNoData + } + var raw map[string]interface{} - switch format { + var err error + var md mapstructure.Metadata + switch f.Format { case "json": - err = json.Unmarshal([]byte(data), &raw) + err = json.Unmarshal([]byte(f.Data), &raw) case "hcl": - err = hcl.Decode(&raw, data) + err = hcl.Decode(&raw, f.Data) default: - err = fmt.Errorf("invalid format: %s", format) + err = fmt.Errorf("invalid format: %s", f.Format) } if err != nil { - return Config{}, nil, err + return Config{}, md, err } - // We want to be able to report fields which we cannot map as an - // error so that users find typos in their configuration quickly. To - // achieve this we use the mapstructure library which maps a a raw - // map[string]interface{} to a nested structure and reports unused - // fields. The input for a mapstructure.Decode expects a - // map[string]interface{} as produced by encoding/json. - // - // The HCL language allows to repeat map keys which forces it to - // store nested structs as []map[string]interface{} instead of - // map[string]interface{}. This is an ambiguity which makes the - // generated structures incompatible with a corresponding JSON - // struct. It also does not work well with the mapstructure library. - // - // In order to still use the mapstructure library to find unused - // fields we patch instances of []map[string]interface{} to a - // map[string]interface{} before we decode that into a Config - // struct. - // - // However, Config has some fields which are either - // []map[string]interface{} or are arrays of structs which - // encoding/json will decode to []map[string]interface{}. Therefore, - // we need to be able to specify exceptions for this mapping. The - // PatchSliceOfMaps() implements that mapping. All fields of type - // []map[string]interface{} are mapped to map[string]interface{} if - // it contains at most one value. If there is more than one value it - // panics. To define exceptions one can specify the nested field - // names in dot notation. - // - // todo(fs): There might be an easier way to achieve the same thing - // todo(fs): but this approach works for now. - m := lib.PatchSliceOfMaps(raw, []string{ - "checks", - "segments", - "service.checks", - "services", - "services.checks", - "watches", - "service.connect.proxy.config.upstreams", // Deprecated - "services.connect.proxy.config.upstreams", // Deprecated - "service.connect.proxy.upstreams", - "services.connect.proxy.upstreams", - "service.connect.proxy.expose.paths", - "services.connect.proxy.expose.paths", - "service.proxy.upstreams", - "services.proxy.upstreams", - "service.proxy.expose.paths", - "services.proxy.expose.paths", - "acl.tokens.managed_service_provider", - - // Need all the service(s) exceptions also for nested sidecar service. - "service.connect.sidecar_service.checks", - "services.connect.sidecar_service.checks", - "service.connect.sidecar_service.proxy.upstreams", - "services.connect.sidecar_service.proxy.upstreams", - "service.connect.sidecar_service.proxy.expose.paths", - "services.connect.sidecar_service.proxy.expose.paths", - }, []string{ - "config_entries.bootstrap", // completely ignore this tree (fixed elsewhere) - }) - - // There is a difference of representation of some fields depending on - // where they are used. The HTTP API uses CamelCase whereas the config - // files use snake_case and between the two there is no automatic mapping. - // While the JSON and HCL parsers match keys without case (both `id` and - // `ID` are mapped to an ID field) the same thing does not happen between - // CamelCase and snake_case. Since changing either format would break - // existing setups we have to support both and slowly transition to one of - // the formats. Also, there is at least one case where we use the "wrong" - // key and want to map that to the new key to support deprecation - - // see [GH-3179]. TranslateKeys maps potentially CamelCased values to the - // snake_case that is used in the config file parser. If both the CamelCase - // and snake_case values are set the snake_case value is used and the other - // value is discarded. - lib.TranslateKeys(m, map[string]string{ - "deregistercriticalserviceafter": "deregister_critical_service_after", - "dockercontainerid": "docker_container_id", - "scriptargs": "args", - "serviceid": "service_id", - "tlsskipverify": "tls_skip_verify", - "config_entries.bootstrap": "", - }) - - var md mapstructure.Metadata + var c Config d, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: mapstructure.ComposeDecodeHookFunc( + // decode.HookWeakDecodeFromSlice is only necessary when reading from + // an HCL config file. In the future we could omit it when reading from + // JSON configs. It is left here for now to maintain backwards compat + // for the unlikely scenario that someone is using malformed JSON configs + // and expecting this behaviour to correct their config. + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + ), Metadata: &md, Result: &c, }) if err != nil { - return Config{}, nil, err + return Config{}, md, err } - if err := d.Decode(m); err != nil { - return Config{}, nil, err + if err := d.Decode(raw); err != nil { + return Config{}, md, err } - for _, k := range md.Unused { - err = multierror.Append(err, fmt.Errorf("invalid config key %s", k)) - } + return c, md, nil +} + +// LiteralSource implements Source and returns an existing Config struct. +type LiteralSource struct { + Name string + Config Config +} + +func (l LiteralSource) Source() string { + return l.Name +} - // Don't check these here. The builder can emit warnings for fields it - // doesn't like - keys = md.Keys +func (l LiteralSource) Parse() (Config, mapstructure.Metadata, error) { + return l.Config, mapstructure.Metadata{}, nil +} - return +// Cache is the tunning configuration for cache, values are optional +type Cache struct { + // EntryFetchMaxBurst max burst size of RateLimit for a single cache entry + EntryFetchMaxBurst *int `json:"entry_fetch_max_burst,omitempty" hcl:"entry_fetch_max_burst" mapstructure:"entry_fetch_max_burst"` + // EntryFetchRate represents the max calls/sec for a single cache entry + EntryFetchRate *float64 `json:"entry_fetch_rate,omitempty" hcl:"entry_fetch_rate" mapstructure:"entry_fetch_rate"` } // Config defines the format of a configuration file in either JSON or @@ -175,8 +126,6 @@ ACLDownPolicy *string `json:"acl_down_policy,omitempty" hcl:"acl_down_policy" mapstructure:"acl_down_policy"` // DEPRECATED (ACL-Legacy-Compat) - moved into the "acl" stanza ACLEnableKeyListPolicy *bool `json:"acl_enable_key_list_policy,omitempty" hcl:"acl_enable_key_list_policy" mapstructure:"acl_enable_key_list_policy"` - // DEPRECATED (ACL-Legacy-Compat) - pre-version8 enforcement is deprecated. - ACLEnforceVersion8 *bool `json:"acl_enforce_version_8,omitempty" hcl:"acl_enforce_version_8" mapstructure:"acl_enforce_version_8"` // DEPRECATED (ACL-Legacy-Compat) - moved into the "acl" stanza ACLMasterToken *string `json:"acl_master_token,omitempty" hcl:"acl_master_token" mapstructure:"acl_master_token"` // DEPRECATED (ACL-Legacy-Compat) - moved into the "acl.tokens" stanza @@ -193,10 +142,12 @@ AdvertiseAddrWAN *string `json:"advertise_addr_wan,omitempty" hcl:"advertise_addr_wan" mapstructure:"advertise_addr_wan"` AdvertiseAddrWANIPv4 *string `json:"advertise_addr_wan_ipv4,omitempty" hcl:"advertise_addr_wan_ipv4" mapstructure:"advertise_addr_wan_ipv4"` AdvertiseAddrWANIPv6 *string `json:"advertise_addr_wan_ipv6,omitempty" hcl:"advertise_addr_wan_ipv6" mapstructure:"advertise_addr_ipv6"` + AutoConfig AutoConfigRaw `json:"auto_config,omitempty" hcl:"auto_config" mapstructure:"auto_config"` Autopilot Autopilot `json:"autopilot,omitempty" hcl:"autopilot" mapstructure:"autopilot"` BindAddr *string `json:"bind_addr,omitempty" hcl:"bind_addr" mapstructure:"bind_addr"` Bootstrap *bool `json:"bootstrap,omitempty" hcl:"bootstrap" mapstructure:"bootstrap"` BootstrapExpect *int `json:"bootstrap_expect,omitempty" hcl:"bootstrap_expect" mapstructure:"bootstrap_expect"` + Cache Cache `json:"cache,omitempty" hcl:"cache" mapstructure:"cache"` CAFile *string `json:"ca_file,omitempty" hcl:"ca_file" mapstructure:"ca_file"` CAPath *string `json:"ca_path,omitempty" hcl:"ca_path" mapstructure:"ca_path"` CertFile *string `json:"cert_file,omitempty" hcl:"cert_file" mapstructure:"cert_file"` @@ -254,6 +205,8 @@ PidFile *string `json:"pid_file,omitempty" hcl:"pid_file" mapstructure:"pid_file"` Ports Ports `json:"ports,omitempty" hcl:"ports" mapstructure:"ports"` PrimaryDatacenter *string `json:"primary_datacenter,omitempty" hcl:"primary_datacenter" mapstructure:"primary_datacenter"` + PrimaryGateways []string `json:"primary_gateways" hcl:"primary_gateways" mapstructure:"primary_gateways"` + PrimaryGatewaysInterval *string `json:"primary_gateways_interval,omitempty" hcl:"primary_gateways_interval" mapstructure:"primary_gateways_interval"` RPCProtocol *int `json:"protocol,omitempty" hcl:"protocol" mapstructure:"protocol"` RaftProtocol *int `json:"raft_protocol,omitempty" hcl:"raft_protocol" mapstructure:"raft_protocol"` RaftSnapshotThreshold *int `json:"raft_snapshot_threshold,omitempty" hcl:"raft_snapshot_threshold" mapstructure:"raft_snapshot_threshold"` @@ -268,6 +221,8 @@ RetryJoinMaxAttemptsLAN *int `json:"retry_max,omitempty" hcl:"retry_max" mapstructure:"retry_max"` RetryJoinMaxAttemptsWAN *int `json:"retry_max_wan,omitempty" hcl:"retry_max_wan" mapstructure:"retry_max_wan"` RetryJoinWAN []string `json:"retry_join_wan,omitempty" hcl:"retry_join_wan" mapstructure:"retry_join_wan"` + SerfAllowedCIDRsLAN []string `json:"serf_lan_allowed_cidrs,omitempty" hcl:"serf_lan_allowed_cidrs" mapstructure:"serf_lan_allowed_cidrs"` + SerfAllowedCIDRsWAN []string `json:"serf_wan_allowed_cidrs,omitempty" hcl:"serf_wan_allowed_cidrs" mapstructure:"serf_wan_allowed_cidrs"` SerfBindAddrLAN *string `json:"serf_lan,omitempty" hcl:"serf_lan" mapstructure:"serf_lan"` SerfBindAddrWAN *string `json:"serf_wan,omitempty" hcl:"serf_wan" mapstructure:"serf_wan"` ServerMode *bool `json:"server,omitempty" hcl:"server" mapstructure:"server"` @@ -318,6 +273,8 @@ VersionPrerelease *string `json:"version_prerelease,omitempty" hcl:"version_prerelease" mapstructure:"version_prerelease"` // Enterprise Only + Audit *Audit `json:"audit,omitempty" hcl:"audit" mapstructure:"audit"` + // Enterprise Only NonVotingServer *bool `json:"non_voting_server,omitempty" hcl:"non_voting_server" mapstructure:"non_voting_server"` // Enterprise Only SegmentName *string `json:"segment,omitempty" hcl:"segment" mapstructure:"segment"` @@ -424,10 +381,10 @@ ID *string `json:"id,omitempty" hcl:"id" mapstructure:"id"` Name *string `json:"name,omitempty" hcl:"name" mapstructure:"name"` Notes *string `json:"notes,omitempty" hcl:"notes" mapstructure:"notes"` - ServiceID *string `json:"service_id,omitempty" hcl:"service_id" mapstructure:"service_id"` + ServiceID *string `json:"service_id,omitempty" hcl:"service_id" mapstructure:"service_id" alias:"serviceid"` Token *string `json:"token,omitempty" hcl:"token" mapstructure:"token"` Status *string `json:"status,omitempty" hcl:"status" mapstructure:"status"` - ScriptArgs []string `json:"args,omitempty" hcl:"args" mapstructure:"args"` + ScriptArgs []string `json:"args,omitempty" hcl:"args" mapstructure:"args" alias:"scriptargs"` HTTP *string `json:"http,omitempty" hcl:"http" mapstructure:"http"` Header map[string][]string `json:"header,omitempty" hcl:"header" mapstructure:"header"` Method *string `json:"method,omitempty" hcl:"method" mapstructure:"method"` @@ -435,18 +392,18 @@ OutputMaxSize *int `json:"output_max_size,omitempty" hcl:"output_max_size" mapstructure:"output_max_size"` TCP *string `json:"tcp,omitempty" hcl:"tcp" mapstructure:"tcp"` Interval *string `json:"interval,omitempty" hcl:"interval" mapstructure:"interval"` - DockerContainerID *string `json:"docker_container_id,omitempty" hcl:"docker_container_id" mapstructure:"docker_container_id"` + DockerContainerID *string `json:"docker_container_id,omitempty" hcl:"docker_container_id" mapstructure:"docker_container_id" alias:"dockercontainerid"` Shell *string `json:"shell,omitempty" hcl:"shell" mapstructure:"shell"` GRPC *string `json:"grpc,omitempty" hcl:"grpc" mapstructure:"grpc"` GRPCUseTLS *bool `json:"grpc_use_tls,omitempty" hcl:"grpc_use_tls" mapstructure:"grpc_use_tls"` - TLSSkipVerify *bool `json:"tls_skip_verify,omitempty" hcl:"tls_skip_verify" mapstructure:"tls_skip_verify"` + TLSSkipVerify *bool `json:"tls_skip_verify,omitempty" hcl:"tls_skip_verify" mapstructure:"tls_skip_verify" alias:"tlsskipverify"` AliasNode *string `json:"alias_node,omitempty" hcl:"alias_node" mapstructure:"alias_node"` AliasService *string `json:"alias_service,omitempty" hcl:"alias_service" mapstructure:"alias_service"` Timeout *string `json:"timeout,omitempty" hcl:"timeout" mapstructure:"timeout"` TTL *string `json:"ttl,omitempty" hcl:"ttl" mapstructure:"ttl"` SuccessBeforePassing *int `json:"success_before_passing,omitempty" hcl:"success_before_passing" mapstructure:"success_before_passing"` FailuresBeforeCritical *int `json:"failures_before_critical,omitempty" hcl:"failures_before_critical" mapstructure:"failures_before_critical"` - DeregisterCriticalServiceAfter *string `json:"deregister_critical_service_after,omitempty" hcl:"deregister_critical_service_after" mapstructure:"deregister_critical_service_after"` + DeregisterCriticalServiceAfter *string `json:"deregister_critical_service_after,omitempty" hcl:"deregister_critical_service_after" mapstructure:"deregister_critical_service_after" alias:"deregistercriticalserviceafter"` EnterpriseMeta `hcl:",squash" mapstructure:",squash"` } @@ -599,9 +556,15 @@ type Connect struct { // Enabled opts the agent into connect. It should be set on all clients and // servers in a cluster for correct connect operation. - Enabled *bool `json:"enabled,omitempty" hcl:"enabled" mapstructure:"enabled"` - CAProvider *string `json:"ca_provider,omitempty" hcl:"ca_provider" mapstructure:"ca_provider"` - CAConfig map[string]interface{} `json:"ca_config,omitempty" hcl:"ca_config" mapstructure:"ca_config"` + Enabled *bool `json:"enabled,omitempty" hcl:"enabled" mapstructure:"enabled"` + CAProvider *string `json:"ca_provider,omitempty" hcl:"ca_provider" mapstructure:"ca_provider"` + CAConfig map[string]interface{} `json:"ca_config,omitempty" hcl:"ca_config" mapstructure:"ca_config"` + MeshGatewayWANFederationEnabled *bool `json:"enable_mesh_gateway_wan_federation" hcl:"enable_mesh_gateway_wan_federation" mapstructure:"enable_mesh_gateway_wan_federation"` + + // TestCALeafRootChangeSpread controls how long after a CA roots change before new leaft certs will be generated. + // This is only tuned in tests, generally set to 1ns to make tests deterministic with when to expect updated leaf + // certs by. This configuration is not exposed to users (not documented, and agent/config/default.go will override it) + TestCALeafRootChangeSpread *string `json:"test_ca_leaf_root_change_spread,omitempty" hcl:"test_ca_leaf_root_change_spread" mapstructure:"test_ca_leaf_root_change_spread"` } // SOA is the configuration of SOA for DNS @@ -753,3 +716,56 @@ // unabiguously. Bootstrap []map[string]interface{} `json:"bootstrap,omitempty" hcl:"bootstrap" mapstructure:"bootstrap"` } + +// Audit allows us to enable and define destinations for auditing +type Audit struct { + Enabled *bool `json:"enabled,omitempty" hcl:"enabled" mapstructure:"enabled"` + Sinks map[string]AuditSink `json:"sink,omitempty" hcl:"sink" mapstructure:"sink"` +} + +// AuditSink can be provided multiple times to define pipelines for auditing +type AuditSink struct { + Name *string `json:"name,omitempty" hcl:"name" mapstructure:"name"` + Type *string `json:"type,omitempty" hcl:"type" mapstructure:"type"` + Format *string `json:"format,omitempty" hcl:"format" mapstructure:"format"` + Path *string `json:"path,omitempty" hcl:"path" mapstructure:"path"` + DeliveryGuarantee *string `json:"delivery_guarantee,omitempty" hcl:"delivery_guarantee" mapstructure:"delivery_guarantee"` + RotateBytes *int `json:"rotate_bytes,omitempty" hcl:"rotate_bytes" mapstructure:"rotate_bytes"` + RotateDuration *string `json:"rotate_duration,omitempty" hcl:"rotate_duration" mapstructure:"rotate_duration"` + RotateMaxFiles *int `json:"rotate_max_files,omitempty" hcl:"rotate_max_files" mapstructure:"rotate_max_files"` +} + +type AutoConfigRaw struct { + Enabled *bool `json:"enabled,omitempty" hcl:"enabled" mapstructure:"enabled"` + IntroToken *string `json:"intro_token,omitempty" hcl:"intro_token" mapstructure:"intro_token"` + IntroTokenFile *string `json:"intro_token_file,omitempty" hcl:"intro_token_file" mapstructure:"intro_token_file"` + ServerAddresses []string `json:"server_addresses,omitempty" hcl:"server_addresses" mapstructure:"server_addresses"` + DNSSANs []string `json:"dns_sans,omitempty" hcl:"dns_sans" mapstructure:"dns_sans"` + IPSANs []string `json:"ip_sans,omitempty" hcl:"ip_sans" mapstructure:"ip_sans"` + Authorization AutoConfigAuthorizationRaw `json:"authorization,omitempty" hcl:"authorization" mapstructure:"authorization"` +} + +type AutoConfigAuthorizationRaw struct { + Enabled *bool `json:"enabled,omitempty" hcl:"enabled" mapstructure:"enabled"` + Static AutoConfigAuthorizerRaw `json:"static,omitempty" hcl:"static" mapstructure:"static"` +} + +type AutoConfigAuthorizerRaw struct { + ClaimAssertions []string `json:"claim_assertions,omitempty" hcl:"claim_assertions" mapstructure:"claim_assertions"` + AllowReuse *bool `json:"allow_reuse,omitempty" hcl:"allow_reuse" mapstructure:"allow_reuse"` + + // Fields to be shared with the JWT Auth Method + JWTSupportedAlgs []string `json:"jwt_supported_algs,omitempty" hcl:"jwt_supported_algs" mapstructure:"jwt_supported_algs"` + BoundAudiences []string `json:"bound_audiences,omitempty" hcl:"bound_audiences" mapstructure:"bound_audiences"` + ClaimMappings map[string]string `json:"claim_mappings,omitempty" hcl:"claim_mappings" mapstructure:"claim_mappings"` + ListClaimMappings map[string]string `json:"list_claim_mappings,omitempty" hcl:"list_claim_mappings" mapstructure:"list_claim_mappings"` + OIDCDiscoveryURL *string `json:"oidc_discovery_url,omitempty" hcl:"oidc_discovery_url" mapstructure:"oidc_discovery_url"` + OIDCDiscoveryCACert *string `json:"oidc_discovery_ca_cert,omitempty" hcl:"oidc_discovery_ca_cert" mapstructure:"oidc_discovery_ca_cert"` + JWKSURL *string `json:"jwks_url,omitempty" hcl:"jwks_url" mapstructure:"jwks_url"` + JWKSCACert *string `json:"jwks_ca_cert,omitempty" hcl:"jwks_ca_cert" mapstructure:"jwks_ca_cert"` + JWTValidationPubKeys []string `json:"jwt_validation_pub_keys,omitempty" hcl:"jwt_validation_pub_keys" mapstructure:"jwt_validation_pub_keys"` + BoundIssuer *string `json:"bound_issuer,omitempty" hcl:"bound_issuer" mapstructure:"bound_issuer"` + ExpirationLeeway *string `json:"expiration_leeway,omitempty" hcl:"expiration_leeway" mapstructure:"expiration_leeway"` + NotBeforeLeeway *string `json:"not_before_leeway,omitempty" hcl:"not_before_leeway" mapstructure:"not_before_leeway"` + ClockSkewLeeway *string `json:"clock_skew_leeway,omitempty" hcl:"clock_skew_leeway" mapstructure:"clock_skew_leeway"` +} diff -Nru consul-1.7.4+dfsg1/agent/config/default.go consul-1.8.7+dfsg1/agent/config/default.go --- consul-1.7.4+dfsg1/agent/config/default.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/default.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,23 +10,9 @@ "github.com/hashicorp/raft" ) -func DefaultRPCProtocol() (int, error) { - src := DefaultSource() - c, _, err := Parse(src.Data, src.Format) - if err != nil { - return 0, fmt.Errorf("Error parsing default config: %s", err) - } - if c.RPCProtocol == nil { - return 0, fmt.Errorf("No default RPC protocol set") - } - return *c.RPCProtocol, nil -} - // DefaultSource is the default agent configuration. // This needs to be merged first in the head. -// todo(fs): The values are sourced from multiple sources. -// todo(fs): IMO, this should be the definitive default for all configurable values -// todo(fs): and whatever is in here should clobber every default value. Hence, no sourcing. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func DefaultSource() Source { cfg := consul.DefaultConfig() serfLAN := cfg.SerfLANConfig.MemberlistConfig @@ -37,13 +23,12 @@ // acl stanza for now we need to be able to detect the new entries not being set (not // just set to the defaults here) so that we can use the old entries. So the true // default still needs to reside in the original config values - return Source{ + return FileSource{ Name: "default", Format: "hcl", Data: ` acl_default_policy = "allow" acl_down_policy = "extend-cache" - acl_enforce_version_8 = true acl_ttl = "30s" acl = { policy_ttl = "30s" @@ -64,7 +49,8 @@ encrypt_verify_outgoing = true log_level = "INFO" max_query_time = "600s" - protocol = 2 + primary_gateways_interval = "30s" + protocol = ` + strconv.Itoa(consul.DefaultRPCProtocol) + ` retry_interval = "30s" retry_interval_wan = "30s" server = false @@ -143,8 +129,9 @@ // DevSource is the additional default configuration for dev mode. // This should be merged in the head after the default configuration. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func DevSource() Source { - return Source{ + return FileSource{ Name: "dev", Format: "hcl", Data: ` @@ -183,8 +170,9 @@ // NonUserSource contains the values the user cannot configure. // This needs to be merged in the tail. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func NonUserSource() Source { - return Source{ + return FileSource{ Name: "non-user", Format: "hcl", Data: ` @@ -202,6 +190,12 @@ # SegmentNameLimit is the maximum segment name length. segment_name_limit = 64 + + connect = { + # 0s causes the value to be ignored and operate without capping + # the max time before leaf certs can be generated after a roots change. + test_ca_leaf_root_change_spread = "0s" + } `, } } @@ -209,8 +203,9 @@ // VersionSource creates a config source for the version parameters. // This should be merged in the tail since these values are not // user configurable. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func VersionSource(rev, ver, verPre string) Source { - return Source{ + return FileSource{ Name: "version", Format: "hcl", Data: fmt.Sprintf(`revision = %q version = %q version_prerelease = %q`, rev, ver, verPre), @@ -225,10 +220,11 @@ // DefaultConsulSource returns the default configuration for the consul agent. // This should be merged in the tail since these values are not user configurable. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func DefaultConsulSource() Source { cfg := consul.DefaultConfig() raft := cfg.RaftConfig - return Source{ + return FileSource{ Name: "consul", Format: "hcl", Data: ` @@ -253,8 +249,9 @@ // DevConsulSource returns the consul agent configuration for the dev mode. // This should be merged in the tail after the DefaultConsulSource. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func DevConsulSource() Source { - return Source{ + return FileSource{ Name: "consul-dev", Format: "hcl", Data: ` @@ -276,7 +273,7 @@ } func DefaultRuntimeConfig(hcl string) *RuntimeConfig { - b, err := NewBuilder(Flags{HCL: []string{hcl}}) + b, err := NewBuilder(BuilderOpts{HCL: []string{hcl}}) if err != nil { panic(err) } diff -Nru consul-1.7.4+dfsg1/agent/config/default_oss.go consul-1.8.7+dfsg1/agent/config/default_oss.go --- consul-1.7.4+dfsg1/agent/config/default_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/default_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,8 +5,9 @@ // DefaultEnterpriseSource returns the consul agent configuration for enterprise mode. // These can be overridden by the user and therefore this source should be merged in the // head and processed before user configuration. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func DefaultEnterpriseSource() Source { - return Source{ + return FileSource{ Name: "enterprise-defaults", Format: "hcl", Data: ``, @@ -15,8 +16,9 @@ // OverrideEnterpriseSource returns the consul agent configuration for the enterprise mode. // This should be merged in the tail after the DefaultConsulSource. +// TODO: return a LiteralSource (no decoding) instead of a FileSource func OverrideEnterpriseSource() Source { - return Source{ + return FileSource{ Name: "enterprise-overrides", Format: "hcl", Data: ``, diff -Nru consul-1.7.4+dfsg1/agent/config/flags.go consul-1.8.7+dfsg1/agent/config/flags.go --- consul-1.7.4+dfsg1/agent/config/flags.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/flags.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,8 +6,8 @@ "time" ) -// Flags defines the command line flags. -type Flags struct { +// BuilderOpts used by Builder to construct and validate a RuntimeConfig. +type BuilderOpts struct { // Config contains the command line arguments that can also be set // in a config file. Config Config @@ -18,21 +18,18 @@ // ConfigFormat forces all config files to be interpreted as this // format independent of their extension. - ConfigFormat *string + ConfigFormat string - // HCL contains an arbitrary config in hcl format. // DevMode indicates whether the agent should be started in development // mode. This cannot be configured in a config file. DevMode *bool + // HCL contains an arbitrary config in hcl format. HCL []string - - // Args contains the remaining unparsed flags. - Args []string } // AddFlags adds the command line flags for the agent. -func AddFlags(fs *flag.FlagSet, f *Flags) { +func AddFlags(fs *flag.FlagSet, f *BuilderOpts) { add := func(p interface{}, name, help string) { switch x := p.(type) { case **bool: @@ -63,7 +60,7 @@ add(&f.Config.CheckOutputMaxSize, "check_output_max_size", "Sets the maximum output size for checks on this agent") add(&f.ConfigFiles, "config-dir", "Path to a directory to read configuration files from. This will read every file ending in '.json' as configuration in this directory in alphabetical order. Can be specified multiple times.") add(&f.ConfigFiles, "config-file", "Path to a file in JSON or HCL format with a matching file extension. Can be specified multiple times.") - add(&f.ConfigFormat, "config-format", "Config files are in this format irrespective of their extension. Must be 'hcl' or 'json'") + fs.StringVar(&f.ConfigFormat, "config-format", "", "Config files are in this format irrespective of their extension. Must be 'hcl' or 'json'") add(&f.Config.DataDir, "data-dir", "Path to a data directory to store agent state.") add(&f.Config.Datacenter, "datacenter", "Datacenter of the agent.") add(&f.Config.DefaultQueryTime, "default-query-time", "the amount of time a blocking query will wait before Consul will force a response. This value can be overridden by the 'wait' query parameter.") @@ -97,6 +94,7 @@ add(&f.Config.RPCProtocol, "protocol", "Sets the protocol version. Defaults to latest.") add(&f.Config.RaftProtocol, "raft-protocol", "Sets the Raft protocol version. Defaults to latest.") add(&f.Config.DNSRecursors, "recursor", "Address of an upstream DNS server. Can be specified multiple times.") + add(&f.Config.PrimaryGateways, "primary-gateway", "Address of a mesh gateway in the primary datacenter to use to bootstrap WAN federation at start time with retries enabled. Can be specified multiple times.") add(&f.Config.RejoinAfterLeave, "rejoin", "Ignores a previous leave and attempts to rejoin the cluster.") add(&f.Config.RetryJoinIntervalLAN, "retry-interval", "Time to wait between join attempts.") add(&f.Config.RetryJoinIntervalWAN, "retry-interval-wan", "Time to wait between join -wan attempts.") @@ -104,6 +102,8 @@ add(&f.Config.RetryJoinWAN, "retry-join-wan", "Address of an agent to join -wan at start time with retries enabled. Can be specified multiple times.") add(&f.Config.RetryJoinMaxAttemptsLAN, "retry-max", "Maximum number of join attempts. Defaults to 0, which will retry indefinitely.") add(&f.Config.RetryJoinMaxAttemptsWAN, "retry-max-wan", "Maximum number of join -wan attempts. Defaults to 0, which will retry indefinitely.") + add(&f.Config.SerfAllowedCIDRsLAN, "serf-lan-allowed-cidrs", "Networks (eg: 192.168.1.0/24) allowed for Serf LAN. Can be specified multiple times.") + add(&f.Config.SerfAllowedCIDRsWAN, "serf-wan-allowed-cidrs", "Networks (eg: 192.168.1.0/24) allowed for Serf WAN (other datacenters). Can be specified multiple times.") add(&f.Config.SerfBindAddrLAN, "serf-lan-bind", "Address to bind Serf LAN listeners to.") add(&f.Config.Ports.SerfLAN, "serf-lan-port", "Sets the Serf LAN port to listen on.") add(&f.Config.SegmentName, "segment", "(Enterprise-only) Sets the network segment to join.") diff -Nru consul-1.7.4+dfsg1/agent/config/flags_test.go consul-1.8.7+dfsg1/agent/config/flags_test.go --- consul-1.7.4+dfsg1/agent/config/flags_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/flags_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,103 +2,115 @@ import ( "flag" - "reflect" "strings" "testing" - "github.com/pascaldekloe/goe/verify" + "github.com/stretchr/testify/require" ) -// TestParseFlags tests whether command line flags are properly parsed +// TestAddFlags_WithParse tests whether command line flags are properly parsed // into the Flags/File structure. It contains an example for every type // that is parsed. It does not test the conversion into the final // runtime configuration. See TestConfig for that. -func TestParseFlags(t *testing.T) { +func TestAddFlags_WithParse(t *testing.T) { tests := []struct { - args []string - flags Flags - err error + args []string + expected BuilderOpts + extra []string }{ {}, { - args: []string{`-bind`, `a`}, - flags: Flags{Config: Config{BindAddr: pString("a")}}, + args: []string{`-bind`, `a`}, + expected: BuilderOpts{Config: Config{BindAddr: pString("a")}}, }, { - args: []string{`-bootstrap`}, - flags: Flags{Config: Config{Bootstrap: pBool(true)}}, + args: []string{`-bootstrap`}, + expected: BuilderOpts{Config: Config{Bootstrap: pBool(true)}}, }, { - args: []string{`-bootstrap=true`}, - flags: Flags{Config: Config{Bootstrap: pBool(true)}}, + args: []string{`-bootstrap=true`}, + expected: BuilderOpts{Config: Config{Bootstrap: pBool(true)}}, }, { - args: []string{`-bootstrap=false`}, - flags: Flags{Config: Config{Bootstrap: pBool(false)}}, + args: []string{`-bootstrap=false`}, + expected: BuilderOpts{Config: Config{Bootstrap: pBool(false)}}, }, { - args: []string{`-config-file`, `a`, `-config-dir`, `b`, `-config-file`, `c`, `-config-dir`, `d`}, - flags: Flags{ConfigFiles: []string{"a", "b", "c", "d"}}, + args: []string{`-config-file`, `a`, `-config-dir`, `b`, `-config-file`, `c`, `-config-dir`, `d`}, + expected: BuilderOpts{ConfigFiles: []string{"a", "b", "c", "d"}}, }, { - args: []string{`-datacenter`, `a`}, - flags: Flags{Config: Config{Datacenter: pString("a")}}, + args: []string{`-datacenter`, `a`}, + expected: BuilderOpts{Config: Config{Datacenter: pString("a")}}, }, { - args: []string{`-dns-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{DNS: pInt(1)}}}, + args: []string{`-dns-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{DNS: pInt(1)}}}, }, { - args: []string{`-grpc-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{GRPC: pInt(1)}}}, + args: []string{`-grpc-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{GRPC: pInt(1)}}}, }, { - args: []string{`-http-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{HTTP: pInt(1)}}}, + args: []string{`-http-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{HTTP: pInt(1)}}}, }, { - args: []string{`-https-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{HTTPS: pInt(1)}}}, + args: []string{`-https-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{HTTPS: pInt(1)}}}, }, { - args: []string{`-serf-lan-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{SerfLAN: pInt(1)}}}, + args: []string{`-serf-lan-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{SerfLAN: pInt(1)}}}, }, { - args: []string{`-serf-wan-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{SerfWAN: pInt(1)}}}, + args: []string{`-serf-wan-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{SerfWAN: pInt(1)}}}, }, { - args: []string{`-server-port`, `1`}, - flags: Flags{Config: Config{Ports: Ports{Server: pInt(1)}}}, + args: []string{`-server-port`, `1`}, + expected: BuilderOpts{Config: Config{Ports: Ports{Server: pInt(1)}}}, }, { - args: []string{`-join`, `a`, `-join`, `b`}, - flags: Flags{Config: Config{StartJoinAddrsLAN: []string{"a", "b"}}}, + args: []string{`-join`, `a`, `-join`, `b`}, + expected: BuilderOpts{Config: Config{StartJoinAddrsLAN: []string{"a", "b"}}}, }, { - args: []string{`-node-meta`, `a:b`, `-node-meta`, `c:d`}, - flags: Flags{Config: Config{NodeMeta: map[string]string{"a": "b", "c": "d"}}}, + args: []string{`-node-meta`, `a:b`, `-node-meta`, `c:d`}, + expected: BuilderOpts{Config: Config{NodeMeta: map[string]string{"a": "b", "c": "d"}}}, }, { - args: []string{`-bootstrap`, `true`}, - flags: Flags{Config: Config{Bootstrap: pBool(true)}, Args: []string{"true"}}, + args: []string{`-bootstrap`, `true`}, + expected: BuilderOpts{Config: Config{Bootstrap: pBool(true)}}, + extra: []string{"true"}, + }, + { + args: []string{`-primary-gateway`, `foo.local`, `-primary-gateway`, `bar.local`}, + expected: BuilderOpts{Config: Config{PrimaryGateways: []string{ + "foo.local", "bar.local", + }}}, }, } for _, tt := range tests { t.Run(strings.Join(tt.args, " "), func(t *testing.T) { - flags := Flags{} + flags := BuilderOpts{} fs := flag.NewFlagSet("", flag.ContinueOnError) AddFlags(fs, &flags) + err := fs.Parse(tt.args) - if got, want := err, tt.err; !reflect.DeepEqual(got, want) { - t.Fatalf("got error %v want %v", got, want) + require.NoError(t, err) + + // Normalize the expected value because require.Equal considers + // empty slices/maps and nil slices/maps to be different. + if tt.extra == nil && fs.Args() != nil { + tt.extra = []string{} } - flags.Args = fs.Args() - if !verify.Values(t, "flag", flags, tt.flags) { - t.FailNow() + if len(tt.expected.Config.NodeMeta) == 0 { + tt.expected.Config.NodeMeta = map[string]string{} } + require.Equal(t, tt.extra, fs.Args()) + require.Equal(t, tt.expected, flags) }) } } diff -Nru consul-1.7.4+dfsg1/agent/config/limits.go consul-1.8.7+dfsg1/agent/config/limits.go --- consul-1.7.4+dfsg1/agent/config/limits.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/limits.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +// +build !windows + +package config + +import "golang.org/x/sys/unix" + +// getrlimit return the max file descriptors allocated by system +// return the number of file descriptors max +func getrlimit() (uint64, error) { + var limit unix.Rlimit + err := unix.Getrlimit(unix.RLIMIT_NOFILE, &limit) + // nolint:unconvert // Rlimit.Cur may not be uint64 on all platforms + return uint64(limit.Cur), err +} diff -Nru consul-1.7.4+dfsg1/agent/config/limits_windows.go consul-1.8.7+dfsg1/agent/config/limits_windows.go --- consul-1.7.4+dfsg1/agent/config/limits_windows.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/limits_windows.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +// +build windows + +package config + +// getrlimit is no-op on Windows, as max fd/process is 2^24 on Wow64 +// Return (16 777 216, nil) +func getrlimit() (uint64, error) { + return 16_777_216, nil +} diff -Nru consul-1.7.4+dfsg1/agent/config/merge.go consul-1.8.7+dfsg1/agent/config/merge.go --- consul-1.7.4+dfsg1/agent/config/merge.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/merge.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,6 +28,14 @@ func mergeValue(a, b reflect.Value) reflect.Value { switch a.Kind() { case reflect.Map: + // dont bother allocating a new map to aggregate keys in when either one + // or both of the maps to merge is the zero value - nil + if a.IsZero() { + return b + } else if b.IsZero() { + return a + } + r := reflect.MakeMap(a.Type()) for _, k := range a.MapKeys() { v := a.MapIndex(k) diff -Nru consul-1.7.4+dfsg1/agent/config/runtime.go consul-1.8.7+dfsg1/agent/config/runtime.go --- consul-1.7.4+dfsg1/agent/config/runtime.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/runtime.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,11 +7,14 @@ "strings" "time" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/logging" "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/consul/types" + "github.com/hashicorp/go-uuid" "golang.org/x/time/rate" ) @@ -104,13 +107,6 @@ // hcl: acl.down_policy = ("allow"|"deny"|"extend-cache"|"async-cache") ACLDownPolicy string - // DEPRECATED (ACL-Legacy-Compat) - // ACLEnforceVersion8 is used to gate a set of ACL policy features that - // are opt-in prior to Consul 0.8 and opt-out in Consul 0.8 and later. - // - // hcl: acl_enforce_version_8 = (true|false) - ACLEnforceVersion8 bool - // ACLEnableKeyListPolicy is used to opt-in to the "list" policy added to // KV ACLs in Consul 1.0. // @@ -300,7 +296,7 @@ // whose health checks are in any non-passing state. By // default, only nodes in a critical state are excluded. // - // hcl: dns_config { only_passing = "duration" } + // hcl: dns_config { only_passing = (true|false) } DNSOnlyPassing bool // DNSRecursorTimeout specifies the timeout in seconds @@ -450,6 +446,9 @@ // flag: -bootstrap-expect=int BootstrapExpect int + // Cache represent cache configuration of agent + Cache cache.Options + // CAFile is a path to a certificate authority file. This is used with // VerifyIncoming or VerifyOutgoing to verify the TLS connection. // @@ -547,6 +546,10 @@ // AutoEncrypt.Sign requests. AutoEncryptAllowTLS bool + // AutoConfig is a grouping of the configurations around the agent auto configuration + // process including how servers can authorize requests. + AutoConfig AutoConfig + // ConnectEnabled opts the agent into connect. It should be set on all clients // and servers in a cluster for correct connect operation. ConnectEnabled bool @@ -575,6 +578,10 @@ // ConnectCAConfig is the config to use for the CA provider. ConnectCAConfig map[string]interface{} + // ConnectMeshGatewayWANFederationEnabled determines if wan federation of + // datacenters should exclusively traverse mesh gateways. + ConnectMeshGatewayWANFederationEnabled bool + // ConnectTestCALeafRootChangeSpread is used to control how long the CA leaf // cache with spread CSRs over when a root change occurs. For now we don't // expose this in public config intentionally but could later with a rename. @@ -718,13 +725,6 @@ // flag: -enable-script-checks EnableRemoteScriptChecks bool - // EnableSyslog is used to also tee all the logs over to syslog. Only supported - // on linux and OSX. Other platforms will generate an error. - // - // hcl: enable_syslog = (true|false) - // flag: -syslog - EnableSyslog bool - // EnableUI enables the statically-compiled assets for the Consul web UI and // serves them at the default /ui/ endpoint automatically. // @@ -852,40 +852,8 @@ // hcl: leave_on_terminate = (true|false) LeaveOnTerm bool - // LogLevel is the level of the logs to write. Defaults to "INFO". - // - // hcl: log_level = string - LogLevel string - - // LogJSON controls whether to output logs as structured JSON. Defaults to false. - // - // hcl: log_json = (true|false) - // flag: -log-json - LogJSON bool - - // LogFile is the path to the file where the logs get written to. Defaults to empty string. - // - // hcl: log_file = string - // flags: -log-file string - LogFile string - - // LogRotateDuration is the time configured to rotate logs based on time - // - // hcl: log_rotate_duration = string - // flags: -log-rotate-duration string - LogRotateDuration time.Duration - - // LogRotateBytes is the time configured to rotate logs based on bytes written - // - // hcl: log_rotate_bytes = int - // flags: -log-rotate-bytes int - LogRotateBytes int - - // LogRotateMaxFiles is the maximum number of log file archives to keep - // - // hcl: log_rotate_max_files = int - // flags: -log-rotate-max-files int - LogRotateMaxFiles int + // Logging configuration used to initialize agent logging. + Logging logging.Config // MaxQueryTime is the maximum amount of time a blocking query can wait // before Consul will force a response. Consul applies jitter to the wait @@ -932,6 +900,22 @@ // hcl: primary_datacenter = string PrimaryDatacenter string + // PrimaryGateways is a list of addresses and/or go-discover expressions to + // discovery the mesh gateways in the primary datacenter. See + // https://www.consul.io/docs/agent/options.html#cloud-auto-joining for + // details. + // + // hcl: primary_gateways = []string + // flag: -primary-gateway string -primary-gateway string + PrimaryGateways []string + + // PrimaryGatewaysInterval specifies the amount of time to wait in between discovery + // attempts on agent start. The minimum allowed value is 1 second and + // the default is 30s. + // + // hcl: primary_gateways_interval = "duration" + PrimaryGatewaysInterval time.Duration + // RPCAdvertiseAddr is the TCP address Consul advertises for its RPC endpoint. // By default this is the bind address on the default RPC Server port. If the // advertise address is specified then it is used. @@ -1047,14 +1031,14 @@ // attempts on agent start. The minimum allowed value is 1 second and // the default is 30s. // - // hcl: retry_join = "duration" + // hcl: retry_interval = "duration" RetryJoinIntervalLAN time.Duration // RetryJoinIntervalWAN specifies the amount of time to wait in between join // attempts on agent start. The minimum allowed value is 1 second and // the default is 30s. // - // hcl: retry_join_wan = "duration" + // hcl: retry_interval_wan = "duration" RetryJoinIntervalWAN time.Duration // RetryJoinLAN is a list of addresses and/or go-discover expressions to @@ -1139,6 +1123,18 @@ // hcl: bind_addr = string advertise_addr_wan = string ports { serf_wan = int } SerfAdvertiseAddrWAN *net.TCPAddr + // SerfAllowedCIDRsLAN if set to a non-empty value, will restrict which networks + // are allowed to connect to Serf on the LAN. + // hcl: serf_lan_allowed_cidrs = []string + // flag: serf-lan-allowed-cidrs string (can be specified multiple times) + SerfAllowedCIDRsLAN []net.IPNet + + // SerfAllowedCIDRsWAN if set to a non-empty value, will restrict which networks + // are allowed to connect to Serf on the WAN. + // hcl: serf_wan_allowed_cidrs = []string + // flag: serf-wan-allowed-cidrs string (can be specified multiple times) + SerfAllowedCIDRsWAN []net.IPNet + // SerfBindAddrLAN is the address to bind the Serf LAN TCP and UDP // listeners to. The ip address is either the default bind address or the // 'serf_lan' address which can be either an ip address or a go-sockaddr @@ -1388,38 +1384,20 @@ // flag: -join-wan string -join-wan string StartJoinAddrsWAN []string - // SyslogFacility is used to control where the syslog messages go - // By default, goes to LOCAL0 - // - // hcl: syslog_facility = string - SyslogFacility string - // TLSCipherSuites is used to specify the list of supported ciphersuites. // // The values should be a list of the following values: // - // TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 - // TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 - // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 + // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - // TLS_RSA_WITH_AES_128_GCM_SHA256 - // TLS_RSA_WITH_AES_256_GCM_SHA384 - // TLS_RSA_WITH_AES_128_CBC_SHA256 - // TLS_RSA_WITH_AES_128_CBC_SHA - // TLS_RSA_WITH_AES_256_CBC_SHA - // TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - // TLS_RSA_WITH_3DES_EDE_CBC_SHA - // TLS_RSA_WITH_RC4_128_SHA - // TLS_ECDHE_RSA_WITH_RC4_128_SHA - // TLS_ECDHE_ECDSA_WITH_RC4_128_SHA + // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 // // todo(fs): IMHO, we should also support the raw 0xNNNN values from // todo(fs): https://golang.org/pkg/crypto/tls/#pkg-constants @@ -1553,6 +1531,24 @@ EnterpriseRuntimeConfig } +type AutoConfig struct { + Enabled bool + IntroToken string + IntroTokenFile string + ServerAddresses []string + DNSSANs []string + IPSANs []net.IP + Authorizer AutoConfigAuthorizer +} + +type AutoConfigAuthorizer struct { + Enabled bool + AuthMethod structs.ACLAuthMethod + // AuthMethodConfig ssoauth.Config + ClaimAssertions []string + AllowReuse bool +} + func (c *RuntimeConfig) apiAddresses(maxPerType int) (unixAddrs, httpAddrs, httpsAddrs []string) { if len(c.HTTPSAddrs) > 0 { for i, addr := range c.HTTPSAddrs { @@ -1651,6 +1647,56 @@ return } +func (c *RuntimeConfig) ConnectCAConfiguration() (*structs.CAConfiguration, error) { + ca := &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "RotationPeriod": structs.DefaultCARotationPeriod, + "LeafCertTTL": structs.DefaultLeafCertTTL, + "IntermediateCertTTL": structs.DefaultIntermediateCertTTL, + }, + } + + // Allow config to specify cluster_id provided it's a valid UUID. This is + // meant only for tests where a deterministic ID makes fixtures much simpler + // to work with but since it's only read on initial cluster bootstrap it's not + // that much of a liability in production. The worst a user could do is + // configure logically separate clusters with same ID by mistake but we can + // avoid documenting this is even an option. + if clusterID, ok := c.ConnectCAConfig["cluster_id"]; ok { + // If they tried to specify an ID but typoed it then don't ignore as they + // will then bootstrap with a new ID and have to throw away the whole cluster + // and start again. + + // ensure the cluster_id value in the opaque config is a string + cIDStr, ok := clusterID.(string) + if !ok { + return nil, fmt.Errorf("cluster_id was supplied but was not a string") + } + + // ensure that the cluster_id string is a valid UUID + _, err := uuid.ParseUUID(cIDStr) + if err != nil { + return nil, fmt.Errorf("cluster_id was supplied but was not a valid UUID") + } + + // now that we know the cluster_id is okay we can set it in the CAConfiguration + ca.ClusterID = cIDStr + } + + if c.ConnectCAProvider != "" { + ca.Provider = c.ConnectCAProvider + } + + // Merge connect CA Config regardless of provider (since there are some + // common config options valid to all like leaf TTL). + for k, v := range c.ConnectCAConfig { + ca.Config[k] = v + } + + return ca, nil +} + func (c *RuntimeConfig) APIConfig(includeClientCerts bool) (*api.Config, error) { cfg := &api.Config{ Datacenter: c.Datacenter, @@ -1709,13 +1755,17 @@ CipherSuites: c.TLSCipherSuites, PreferServerCipherSuites: c.TLSPreferServerCipherSuites, EnableAgentTLSForChecks: c.EnableAgentTLSForChecks, - AutoEncryptTLS: c.AutoEncryptTLS, + AutoTLS: c.AutoEncryptTLS || c.AutoConfig.Enabled, } } // isSecret determines whether a field name represents a field which // may contain a secret. func isSecret(name string) bool { + // special cases for AuthMethod locality and intro token file + if name == "TokenLocality" || name == "IntroTokenFile" { + return false + } name = strings.ToLower(name) return strings.Contains(name, "key") || strings.Contains(name, "token") || strings.Contains(name, "secret") } @@ -1791,7 +1841,15 @@ return reflect.ValueOf(m) case isArray(typ) || isSlice(typ): - ma := make([]interface{}, 0) + ma := make([]interface{}, 0, v.Len()) + if strings.HasPrefix(name, "SerfAllowedCIDRs") { + for i := 0; i < v.Len(); i++ { + addr := v.Index(i).Addr() + ip := addr.Interface().(*net.IPNet) + ma = append(ma, ip.String()) + } + return reflect.ValueOf(ma) + } for i := 0; i < v.Len(); i++ { ma = append(ma, sanitize(fmt.Sprintf("%s[%d]", name, i), v.Index(i)).Interface()) } diff -Nru consul-1.7.4+dfsg1/agent/config/runtime_test.go consul-1.8.7+dfsg1/agent/config/runtime_test.go --- consul-1.7.4+dfsg1/agent/config/runtime_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config/runtime_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,9 +18,11 @@ "testing" "time" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/checks" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/logging" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/types" "github.com/pascaldekloe/goe/verify" @@ -48,10 +50,12 @@ // should check one option at a time if possible and should use generic // values, e.g. 'a' or 1 instead of 'servicex' or 3306. -func TestConfigFlagsAndEdgecases(t *testing.T) { +func TestBuilder_BuildAndValide_ConfigFlagsAndEdgecases(t *testing.T) { dataDir := testutil.TempDir(t, "consul") defer os.RemoveAll(dataDir) + defaultEntMeta := structs.DefaultEnterpriseMeta() + tests := []configTest{ // ------------------------------------------------------------ // cmd line flags @@ -289,7 +293,7 @@ rt.EnableDebug = true rt.EnableUI = true rt.LeaveOnTerm = false - rt.LogLevel = "DEBUG" + rt.Logging.LogLevel = "DEBUG" rt.RPCAdvertiseAddr = tcpAddr("127.0.0.1:8300") rt.RPCBindAddr = tcpAddr("127.0.0.1:8300") rt.SerfAdvertiseAddrLAN = tcpAddr("127.0.0.1:8301") @@ -424,6 +428,7 @@ rt.EnableRemoteScriptChecks = true rt.DataDir = dataDir }, + warns: []string{remoteScriptCheckSecurityWarning}, }, { desc: "-encrypt", @@ -452,6 +457,9 @@ writeFile(filepath.Join(dataDir, "conf", "valid.json"), []byte(`{"datacenter":"a"}`)) writeFile(filepath.Join(dataDir, "conf", "invalid.skip"), []byte(`NOPE`)) }, + warns: []string{ + "skipping file " + filepath.Join(dataDir, "conf", "invalid.skip") + ", extension must be .hcl or .json, or config format must be set", + }, }, { desc: "-config-format=json", @@ -488,13 +496,6 @@ }, }, { - desc: "-config-format invalid", - args: []string{ - `-config-format=foobar`, - }, - err: "-config-format must be either 'hcl' or 'json'", - }, - { desc: "-http-port", args: []string{ `-http-port=123`, @@ -537,7 +538,7 @@ `-data-dir=` + dataDir, }, patch: func(rt *RuntimeConfig) { - rt.LogLevel = "a" + rt.Logging.LogLevel = "a" rt.DataDir = dataDir }, }, @@ -548,7 +549,7 @@ `-data-dir=` + dataDir, }, patch: func(rt *RuntimeConfig) { - rt.LogJSON = true + rt.Logging.LogJSON = true rt.DataDir = dataDir }, }, @@ -561,7 +562,7 @@ json: []string{`{ "log_rotate_max_files": 2 }`}, hcl: []string{`log_rotate_max_files = 2`}, patch: func(rt *RuntimeConfig) { - rt.LogRotateMaxFiles = 2 + rt.Logging.LogRotateMaxFiles = 2 rt.DataDir = dataDir }, }, @@ -623,6 +624,29 @@ }, }, { + desc: "-primary-gateway", + args: []string{ + `-server`, + `-datacenter=dc2`, + `-primary-gateway=a`, + `-primary-gateway=b`, + `-data-dir=` + dataDir, + }, + json: []string{`{ "primary_datacenter": "dc1" }`}, + hcl: []string{`primary_datacenter = "dc1"`}, + patch: func(rt *RuntimeConfig) { + rt.Datacenter = "dc2" + rt.PrimaryDatacenter = "dc1" + rt.ACLDatacenter = "dc1" + rt.PrimaryGateways = []string{"a", "b"} + rt.DataDir = dataDir + // server things + rt.ServerMode = true + rt.LeaveOnTerm = false + rt.SkipLeaveOnInt = true + }, + }, + { desc: "-protocol", args: []string{ `-protocol=1`, @@ -816,7 +840,7 @@ `-data-dir=` + dataDir, }, patch: func(rt *RuntimeConfig) { - rt.EnableSyslog = true + rt.Logging.EnableSyslog = true rt.DataDir = dataDir }, }, @@ -1515,6 +1539,40 @@ }, }, + { + desc: "Serf Allowed CIDRS LAN, multiple values from flags", + args: []string{`-data-dir=` + dataDir, `-serf-lan-allowed-cidrs=127.0.0.0/4`, `-serf-lan-allowed-cidrs=192.168.0.0/24`}, + json: []string{}, + hcl: []string{}, + patch: func(rt *RuntimeConfig) { + rt.DataDir = dataDir + rt.SerfAllowedCIDRsLAN = []net.IPNet{*(parseCIDR(t, "127.0.0.0/4")), *(parseCIDR(t, "192.168.0.0/24"))} + }, + }, + { + desc: "Serf Allowed CIDRS LAN/WAN, multiple values from HCL/JSON", + args: []string{`-data-dir=` + dataDir}, + json: []string{`{"serf_lan_allowed_cidrs": ["127.0.0.0/4", "192.168.0.0/24"]}`, + `{"serf_wan_allowed_cidrs": ["10.228.85.46/25"]}`}, + hcl: []string{`serf_lan_allowed_cidrs=["127.0.0.0/4", "192.168.0.0/24"]`, + `serf_wan_allowed_cidrs=["10.228.85.46/25"]`}, + patch: func(rt *RuntimeConfig) { + rt.DataDir = dataDir + rt.SerfAllowedCIDRsLAN = []net.IPNet{*(parseCIDR(t, "127.0.0.0/4")), *(parseCIDR(t, "192.168.0.0/24"))} + rt.SerfAllowedCIDRsWAN = []net.IPNet{*(parseCIDR(t, "10.228.85.46/25"))} + }, + }, + { + desc: "Serf Allowed CIDRS WAN, multiple values from flags", + args: []string{`-data-dir=` + dataDir, `-serf-wan-allowed-cidrs=192.168.4.0/24`, `-serf-wan-allowed-cidrs=192.168.3.0/24`}, + json: []string{}, + hcl: []string{}, + patch: func(rt *RuntimeConfig) { + rt.DataDir = dataDir + rt.SerfAllowedCIDRsWAN = []net.IPNet{*(parseCIDR(t, "192.168.4.0/24")), *(parseCIDR(t, "192.168.3.0/24"))} + }, + }, + // ------------------------------------------------------------ // validations // @@ -1524,7 +1582,7 @@ args: []string{`-data-dir=` + dataDir}, json: []string{`this is not JSON`}, hcl: []string{`*** 0123 this is not HCL`}, - err: "Error parsing", + err: "failed to parse", }, { desc: "datacenter is lower-cased", @@ -1563,6 +1621,17 @@ }, }, { + desc: "acl_enforce_version_8 is deprecated", + args: []string{`-data-dir=` + dataDir}, + json: []string{`{ "acl_enforce_version_8": true }`}, + hcl: []string{`acl_enforce_version_8 = true`}, + patch: func(rt *RuntimeConfig) { + rt.DataDir = dataDir + }, + warns: []string{`config key "acl_enforce_version_8" is deprecated and should be removed`}, + }, + + { desc: "advertise address detect fails v4", args: []string{`-data-dir=` + dataDir}, json: []string{`{ "bind_addr": "0.0.0.0"}`}, @@ -1835,7 +1904,7 @@ hcl: []string{`ui = true ui_dir = "a"`}, err: "Both the ui and ui-dir flags were specified, please provide only one.\n" + "If trying to use your own web UI resources, use the ui-dir flag.\n" + - "If using Consul version 0.7.0 or later, the web UI is included in the binary so use ui to enable it", + "The web UI is included in the binary so use ui to enable it", }, // test ANY address failures @@ -2709,82 +2778,139 @@ }, }, { - desc: "auto_encrypt.allow works implies connect", + desc: "auto_encrypt.allow_tls works implies connect", args: []string{ `-data-dir=` + dataDir, }, json: []string{`{ "verify_incoming": true, - "auto_encrypt": { "allow_tls": true } + "auto_encrypt": { "allow_tls": true }, + "server": true }`}, hcl: []string{` verify_incoming = true auto_encrypt { allow_tls = true } + server = true `}, patch: func(rt *RuntimeConfig) { rt.DataDir = dataDir rt.VerifyIncoming = true rt.AutoEncryptAllowTLS = true rt.ConnectEnabled = true + + // server things + rt.ServerMode = true + rt.LeaveOnTerm = false + rt.SkipLeaveOnInt = true }, }, { - desc: "auto_encrypt.allow works with verify_incoming", + desc: "auto_encrypt.allow_tls works with verify_incoming", args: []string{ `-data-dir=` + dataDir, }, json: []string{`{ "verify_incoming": true, - "auto_encrypt": { "allow_tls": true } + "auto_encrypt": { "allow_tls": true }, + "server": true }`}, hcl: []string{` verify_incoming = true auto_encrypt { allow_tls = true } + server = true `}, patch: func(rt *RuntimeConfig) { rt.DataDir = dataDir rt.VerifyIncoming = true rt.AutoEncryptAllowTLS = true rt.ConnectEnabled = true + + // server things + rt.ServerMode = true + rt.LeaveOnTerm = false + rt.SkipLeaveOnInt = true }, }, { - desc: "auto_encrypt.allow works with verify_incoming_rpc", + desc: "auto_encrypt.allow_tls works with verify_incoming_rpc", args: []string{ `-data-dir=` + dataDir, }, json: []string{`{ "verify_incoming_rpc": true, - "auto_encrypt": { "allow_tls": true } + "auto_encrypt": { "allow_tls": true }, + "server": true }`}, hcl: []string{` verify_incoming_rpc = true auto_encrypt { allow_tls = true } + server = true `}, patch: func(rt *RuntimeConfig) { rt.DataDir = dataDir rt.VerifyIncomingRPC = true rt.AutoEncryptAllowTLS = true rt.ConnectEnabled = true + + // server things + rt.ServerMode = true + rt.LeaveOnTerm = false + rt.SkipLeaveOnInt = true }, }, { - desc: "auto_encrypt.allow warns without verify_incoming or verify_incoming_rpc", + desc: "auto_encrypt.allow_tls warns without verify_incoming or verify_incoming_rpc", args: []string{ `-data-dir=` + dataDir, }, json: []string{`{ - "auto_encrypt": { "allow_tls": true } + "auto_encrypt": { "allow_tls": true }, + "server": true }`}, hcl: []string{` auto_encrypt { allow_tls = true } + server = true `}, warns: []string{"if auto_encrypt.allow_tls is turned on, either verify_incoming or verify_incoming_rpc should be enabled. It is necessary to turn it off during a migration to TLS, but it should definitely be turned on afterwards."}, patch: func(rt *RuntimeConfig) { rt.DataDir = dataDir rt.AutoEncryptAllowTLS = true rt.ConnectEnabled = true + // server things + rt.ServerMode = true + rt.LeaveOnTerm = false + rt.SkipLeaveOnInt = true + }, + }, + { + desc: "auto_encrypt.allow_tls errors in client mode", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "auto_encrypt": { "allow_tls": true }, + "server": false + }`}, + hcl: []string{` + auto_encrypt { allow_tls = true } + server = false + `}, + err: "auto_encrypt.allow_tls can only be used on a server.", + }, + { + desc: "auto_encrypt.tls errors in server mode", + args: []string{ + `-data-dir=` + dataDir, }, + json: []string{`{ + "auto_encrypt": { "tls": true }, + "server": true + }`}, + hcl: []string{` + auto_encrypt { tls = true } + server = true + `}, + err: "auto_encrypt.tls can only be used on a client.", }, { desc: "test connect vault provider configuration", @@ -2927,6 +3053,194 @@ `}, err: "AWS PCA only supports P256 EC curve", }, + { + desc: "connect.enable_mesh_gateway_wan_federation requires connect.enabled", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "connect": { + "enabled": false, + "enable_mesh_gateway_wan_federation": true + } + }`}, + hcl: []string{` + connect { + enabled = false + enable_mesh_gateway_wan_federation = true + } + `}, + err: "'connect.enable_mesh_gateway_wan_federation=true' requires 'connect.enabled=true'", + }, + { + desc: "connect.enable_mesh_gateway_wan_federation cannot use -join-wan", + args: []string{ + `-data-dir=` + dataDir, + `-join-wan=1.2.3.4`, + }, + json: []string{`{ + "server": true, + "primary_datacenter": "one", + "datacenter": "one", + "connect": { + "enabled": true, + "enable_mesh_gateway_wan_federation": true + } + }`}, + hcl: []string{` + server = true + primary_datacenter = "one" + datacenter = "one" + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}, + err: "'start_join_wan' is incompatible with 'connect.enable_mesh_gateway_wan_federation = true'", + }, + { + desc: "connect.enable_mesh_gateway_wan_federation cannot use -retry-join-wan", + args: []string{ + `-data-dir=` + dataDir, + `-retry-join-wan=1.2.3.4`, + }, + json: []string{`{ + "server": true, + "primary_datacenter": "one", + "datacenter": "one", + "connect": { + "enabled": true, + "enable_mesh_gateway_wan_federation": true + } + }`}, + hcl: []string{` + server = true + primary_datacenter = "one" + datacenter = "one" + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}, + err: "'retry_join_wan' is incompatible with 'connect.enable_mesh_gateway_wan_federation = true'", + }, + { + desc: "connect.enable_mesh_gateway_wan_federation requires server mode", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "server": false, + "connect": { + "enabled": true, + "enable_mesh_gateway_wan_federation": true + } + }`}, + hcl: []string{` + server = false + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}, + err: "'connect.enable_mesh_gateway_wan_federation = true' requires 'server = true'", + }, + { + desc: "connect.enable_mesh_gateway_wan_federation requires no slashes in node names", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "server": true, + "node_name": "really/why", + "connect": { + "enabled": true, + "enable_mesh_gateway_wan_federation": true + } + }`}, + hcl: []string{` + server = true + node_name = "really/why" + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}, + err: "'connect.enable_mesh_gateway_wan_federation = true' requires that 'node_name' not contain '/' characters", + }, + { + desc: "primary_gateways requires server mode", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "server": false, + "primary_gateways": [ "foo.local", "bar.local" ] + }`}, + hcl: []string{` + server = false + primary_gateways = [ "foo.local", "bar.local" ] + `}, + err: "'primary_gateways' requires 'server = true'", + }, + { + desc: "primary_gateways only works in a secondary datacenter", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "server": true, + "primary_datacenter": "one", + "datacenter": "one", + "primary_gateways": [ "foo.local", "bar.local" ] + }`}, + hcl: []string{` + server = true + primary_datacenter = "one" + datacenter = "one" + primary_gateways = [ "foo.local", "bar.local" ] + `}, + err: "'primary_gateways' should only be configured in a secondary datacenter", + }, + { + desc: "connect.enable_mesh_gateway_wan_federation in secondary with primary_gateways configured", + args: []string{ + `-data-dir=` + dataDir, + }, + json: []string{`{ + "server": true, + "primary_datacenter": "one", + "datacenter": "two", + "primary_gateways": [ "foo.local", "bar.local" ], + "connect": { + "enabled": true, + "enable_mesh_gateway_wan_federation": true + } + }`}, + hcl: []string{` + server = true + primary_datacenter = "one" + datacenter = "two" + primary_gateways = [ "foo.local", "bar.local" ] + connect { + enabled = true + enable_mesh_gateway_wan_federation = true + } + `}, + patch: func(rt *RuntimeConfig) { + rt.DataDir = dataDir + rt.Datacenter = "two" + rt.PrimaryDatacenter = "one" + rt.ACLDatacenter = "one" + rt.PrimaryGateways = []string{"foo.local", "bar.local"} + rt.ConnectEnabled = true + rt.ConnectMeshGatewayWANFederationEnabled = true + // server things + rt.ServerMode = true + rt.LeaveOnTerm = false + rt.SkipLeaveOnInt = true + }, + }, // ------------------------------------------------------------ // ConfigEntry Handling @@ -2976,17 +3290,15 @@ err: "config_entries.bootstrap[0]: invalid config entry kind: foo", }, { - desc: "ConfigEntry bootstrap invalid", + desc: "ConfigEntry bootstrap invalid service-defaults", args: []string{`-data-dir=` + dataDir}, json: []string{`{ "config_entries": { "bootstrap": [ { - "kind": "proxy-defaults", - "name": "invalid-name", - "config": { - "foo": "bar" - } + "kind": "service-defaults", + "name": "web", + "made_up_key": "blah" } ] } @@ -2994,14 +3306,12 @@ hcl: []string{` config_entries { bootstrap { - kind = "proxy-defaults" - name = "invalid-name" - config { - foo = "bar" - } + kind = "service-defaults" + name = "web" + made_up_key = "blah" } }`}, - err: "config_entries.bootstrap[0]: invalid name (\"invalid-name\"), only \"global\" is supported", + err: "config_entries.bootstrap[0]: 1 error occurred:\n\t* invalid config key \"made_up_key\"\n\n", }, { desc: "ConfigEntry bootstrap proxy-defaults (snake-case)", @@ -3045,8 +3355,9 @@ rt.DataDir = dataDir rt.ConfigEntryBootstrap = []structs.ConfigEntry{ &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + EnterpriseMeta: *defaultEntMeta, Config: map[string]interface{}{ "bar": "abc", "moreconfig": map[string]interface{}{ @@ -3102,8 +3413,9 @@ rt.DataDir = dataDir rt.ConfigEntryBootstrap = []structs.ConfigEntry{ &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + EnterpriseMeta: *defaultEntMeta, Config: map[string]interface{}{ "bar": "abc", "moreconfig": map[string]interface{}{ @@ -3126,6 +3438,10 @@ { "kind": "service-defaults", "name": "web", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "protocol": "http", "external_sni": "abc-123", "mesh_gateway": { @@ -3140,6 +3456,10 @@ bootstrap { kind = "service-defaults" name = "web" + meta { + "foo" = "bar" + "gir" = "zim" + } protocol = "http" external_sni = "abc-123" mesh_gateway { @@ -3151,10 +3471,15 @@ rt.DataDir = dataDir rt.ConfigEntryBootstrap = []structs.ConfigEntry{ &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "web", - Protocol: "http", - ExternalSNI: "abc-123", + Kind: structs.ServiceDefaults, + Name: "web", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + EnterpriseMeta: *defaultEntMeta, + Protocol: "http", + ExternalSNI: "abc-123", MeshGateway: structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeRemote, }, @@ -3171,6 +3496,10 @@ { "Kind": "service-defaults", "Name": "web", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Protocol": "http", "ExternalSNI": "abc-123", "MeshGateway": { @@ -3185,6 +3514,10 @@ bootstrap { Kind = "service-defaults" Name = "web" + Meta { + "foo" = "bar" + "gir" = "zim" + } Protocol = "http" ExternalSNI = "abc-123" MeshGateway { @@ -3196,10 +3529,15 @@ rt.DataDir = dataDir rt.ConfigEntryBootstrap = []structs.ConfigEntry{ &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "web", - Protocol: "http", - ExternalSNI: "abc-123", + Kind: structs.ServiceDefaults, + Name: "web", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + EnterpriseMeta: *defaultEntMeta, + Protocol: "http", + ExternalSNI: "abc-123", MeshGateway: structs.MeshGatewayConfig{ Mode: structs.MeshGatewayModeRemote, }, @@ -3216,6 +3554,10 @@ { "kind": "service-router", "name": "main", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "routes": [ { "match": { @@ -3300,6 +3642,10 @@ bootstrap { kind = "service-router" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } routes = [ { match { @@ -3383,6 +3729,11 @@ &structs.ServiceRouterConfigEntry{ Kind: structs.ServiceRouter, Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + EnterpriseMeta: *defaultEntMeta, Routes: []structs.ServiceRoute{ { Match: &structs.ServiceRouteMatch{ @@ -3462,6 +3813,8 @@ } }, }, + // TODO(rb): add in missing tests for ingress-gateway (snake + camel) + // TODO(rb): add in missing tests for terminating-gateway (snake + camel) /////////////////////////////////// // Defaults sanity checks @@ -3484,111 +3837,515 @@ rt.RPCMaxConnsPerClient = 100 }, }, - } - - testConfig(t, tests, dataDir) -} - -func testConfig(t *testing.T, tests []configTest, dataDir string) { - t.Helper() - for _, tt := range tests { - for pass, format := range []string{"json", "hcl"} { - // clean data dir before every test - cleanDir(dataDir) - - // when we test only flags then there are no JSON or HCL - // sources and we need to make only one pass over the - // tests. - flagsOnly := len(tt.json) == 0 && len(tt.hcl) == 0 - if flagsOnly && pass > 0 { - continue - } - - // json and hcl sources need to be in sync - // to make sure we're generating the same config - if len(tt.json) != len(tt.hcl) && !tt.skipformat { - t.Fatal(tt.desc, ": JSON and HCL test case out of sync") - } - - // select the source - srcs, tails := tt.json, tt.jsontail - if format == "hcl" { - srcs, tails = tt.hcl, tt.hcltail - } - - // If we're skipping a format and the current format is empty, - // then skip it! - if tt.skipformat && len(srcs) == 0 { - continue - } - - // build the description - var desc []string - if !flagsOnly { - desc = append(desc, format) - } - if tt.desc != "" { - desc = append(desc, tt.desc) - } - t.Run(strings.Join(desc, ":"), func(t *testing.T) { - // first parse the flags - flags := Flags{} - fs := flag.NewFlagSet("", flag.ContinueOnError) - AddFlags(fs, &flags) - err := fs.Parse(tt.args) - if err != nil { - t.Fatalf("ParseFlags failed: %s", err) + /////////////////////////////////// + // Auto Config related tests + { + desc: "auto config and auto encrypt error", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + auto_config { + enabled = true + intro_token = "blah" + server_addresses = ["198.18.0.1"] } - flags.Args = fs.Args() - - if tt.pre != nil { - tt.pre() + auto_encrypt { + tls = true } - defer func() { - if tt.post != nil { - tt.post() - } - }() - - // Then create a builder with the flags. - b, err := NewBuilder(flags) - if err != nil { - t.Fatal("NewBuilder", err) + verify_outgoing = true + `}, + json: []string{`{ + "auto_config": { + "enabled": true, + "intro_token": "blah", + "server_addresses": ["198.18.0.1"] + }, + "auto_encrypt": { + "tls": true + }, + "verify_outgoing": true + }`}, + err: "both auto_encrypt.tls and auto_config.enabled cannot be set to true.", + }, + { + desc: "auto config not allowed for servers", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + server = true + auto_config { + enabled = true + intro_token = "blah" + server_addresses = ["198.18.0.1"] } + verify_outgoing = true + `}, + json: []string{` + { + "server": true, + "auto_config": { + "enabled": true, + "intro_token": "blah", + "server_addresses": ["198.18.0.1"] + }, + "verify_outgoing": true + }`}, + err: "auto_config.enabled cannot be set to true for server agents", + }, - // mock the hostname function unless a mock is provided - b.Hostname = tt.hostname - if b.Hostname == nil { - b.Hostname = func() (string, error) { return "nodex", nil } + { + desc: "auto config tls not enabled", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + auto_config { + enabled = true + server_addresses = ["198.18.0.1"] + intro_token = "foo" + } + `}, + json: []string{` + { + "auto_config": { + "enabled": true, + "server_addresses": ["198.18.0.1"], + "intro_token": "foo" } + }`}, + err: "auto_config.enabled cannot be set without configuring TLS for server communications", + }, - // mock the ip address detection - privatev4 := tt.privatev4 - if privatev4 == nil { - privatev4 = func() ([]*net.IPAddr, error) { - return []*net.IPAddr{ipAddr("10.0.0.1")}, nil + { + desc: "auto config server tls not enabled", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + server = true + auto_config { + authorization { + enabled = true + } + } + `}, + json: []string{` + { + "server": true, + "auto_config": { + "authorization": { + "enabled": true } } - publicv6 := tt.publicv6 - if publicv6 == nil { - publicv6 = func() ([]*net.IPAddr, error) { - return []*net.IPAddr{ipAddr("dead:beef::1")}, nil + }`}, + err: "auto_config.authorization.enabled cannot be set without providing a TLS certificate for the server", + }, + + { + desc: "auto config no intro token", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + auto_config { + enabled = true + server_addresses = ["198.18.0.1"] + } + verify_outgoing = true + `}, + json: []string{` + { + "auto_config": { + "enabled": true, + "server_addresses": ["198.18.0.1"] + }, + "verify_outgoing": true + }`}, + err: "One of auto_config.intro_token, auto_config.intro_token_file or the CONSUL_INTRO_TOKEN environment variable must be set to enable auto_config", + }, + + { + desc: "auto config no server addresses", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + auto_config { + enabled = true + intro_token = "blah" + } + verify_outgoing = true + `}, + json: []string{` + { + "auto_config": { + "enabled": true, + "intro_token": "blah" + }, + "verify_outgoing": true + }`}, + err: "auto_config.enabled is set without providing a list of addresses", + }, + + { + desc: "auto config client", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + auto_config { + enabled = true + intro_token = "blah" + intro_token_file = "blah" + server_addresses = ["198.18.0.1"] + dns_sans = ["foo"] + ip_sans = ["invalid", "127.0.0.1"] + } + verify_outgoing = true + `}, + json: []string{` + { + "auto_config": { + "enabled": true, + "intro_token": "blah", + "intro_token_file": "blah", + "server_addresses": ["198.18.0.1"], + "dns_sans": ["foo"], + "ip_sans": ["invalid", "127.0.0.1"] + }, + "verify_outgoing": true + }`}, + warns: []string{ + "Cannot parse ip \"invalid\" from auto_config.ip_sans", + "Both an intro token and intro token file are set. The intro token will be used instead of the file", + }, + patch: func(rt *RuntimeConfig) { + rt.ConnectEnabled = true + rt.AutoConfig.Enabled = true + rt.AutoConfig.IntroToken = "blah" + rt.AutoConfig.IntroTokenFile = "blah" + rt.AutoConfig.ServerAddresses = []string{"198.18.0.1"} + rt.AutoConfig.DNSSANs = []string{"foo"} + rt.AutoConfig.IPSANs = []net.IP{net.IPv4(127, 0, 0, 1)} + rt.DataDir = dataDir + rt.VerifyOutgoing = true + }, + }, + + { + desc: "auto config authorizer client not allowed", + args: []string{ + `-data-dir=` + dataDir, + }, + hcl: []string{` + auto_config { + authorization { + enabled = true + } + } + `}, + json: []string{` + { + "auto_config": { + "authorization": { + "enabled": true + } + } + }`}, + err: "auto_config.authorization.enabled cannot be set to true for client agents", + }, + + { + desc: "auto config authorizer invalid config", + args: []string{ + `-data-dir=` + dataDir, + `-server`, + }, + hcl: []string{` + auto_config { + authorization { + enabled = true + } + } + cert_file = "foo" + `}, + json: []string{` + { + "auto_config": { + "authorization": { + "enabled": true + } + }, + "cert_file": "foo" + }`}, + err: `auto_config.authorization.static has invalid configuration: exactly one of 'JWTValidationPubKeys', 'JWKSURL', or 'OIDCDiscoveryURL' must be set for type "jwt"`, + }, + + { + desc: "auto config authorizer invalid config 2", + args: []string{ + `-data-dir=` + dataDir, + `-server`, + }, + hcl: []string{` + auto_config { + authorization { + enabled = true + static { + jwks_url = "https://fake.uri.local" + oidc_discovery_url = "https://fake.uri.local" + } + } + } + cert_file = "foo" + `}, + json: []string{` + { + "auto_config": { + "authorization": { + "enabled": true, + "static": { + "jwks_url": "https://fake.uri.local", + "oidc_discovery_url": "https://fake.uri.local" + } + } + }, + "cert_file": "foo" + }`}, + err: `auto_config.authorization.static has invalid configuration: exactly one of 'JWTValidationPubKeys', 'JWKSURL', or 'OIDCDiscoveryURL' must be set for type "jwt"`, + }, + + { + desc: "auto config authorizer require token replication in secondary", + args: []string{ + `-data-dir=` + dataDir, + `-server`, + }, + hcl: []string{` + primary_datacenter = "otherdc" + acl { + enabled = true + } + auto_config { + authorization { + enabled = true + static { + jwks_url = "https://fake.uri.local" + oidc_discovery_url = "https://fake.uri.local" + } + } + } + cert_file = "foo" + `}, + json: []string{` + { + "primary_datacenter": "otherdc", + "acl": { + "enabled": true + }, + "auto_config": { + "authorization": { + "enabled": true, + "static": { + "jwks_url": "https://fake.uri.local", + "oidc_discovery_url": "https://fake.uri.local" + } + } + }, + "cert_file": "foo" + }`}, + err: `Enabling auto-config authorization (auto_config.authorization.enabled) in non primary datacenters with ACLs enabled (acl.enabled) requires also enabling ACL token replication (acl.enable_token_replication)`, + }, + + { + desc: "auto config authorizer invalid claim assertion", + args: []string{ + `-data-dir=` + dataDir, + `-server`, + }, + hcl: []string{` + auto_config { + authorization { + enabled = true + static { + jwt_validation_pub_keys = ["-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"] + claim_assertions = [ + "values.node == ${node}" + ] + } + } + } + cert_file = "foo" + `}, + json: []string{` + { + "auto_config": { + "authorization": { + "enabled": true, + "static": { + "jwt_validation_pub_keys": ["-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"], + "claim_assertions": [ + "values.node == ${node}" + ] + } + } + }, + "cert_file": "foo" + }`}, + err: `auto_config.authorization.static.claim_assertion "values.node == ${node}" is invalid: Selector "values" is not valid`, + }, + { + desc: "auto config authorizer ok", + args: []string{ + `-data-dir=` + dataDir, + `-server`, + }, + hcl: []string{` + auto_config { + authorization { + enabled = true + static { + jwt_validation_pub_keys = ["-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"] + claim_assertions = [ + "value.node == ${node}" + ] + claim_mappings = { + node = "node" + } + } + } + } + cert_file = "foo" + `}, + json: []string{` + { + "auto_config": { + "authorization": { + "enabled": true, + "static": { + "jwt_validation_pub_keys": ["-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"], + "claim_assertions": [ + "value.node == ${node}" + ], + "claim_mappings": { + "node": "node" + } + } + } + }, + "cert_file": "foo" + }`}, + patch: func(rt *RuntimeConfig) { + rt.AutoConfig.Authorizer.Enabled = true + rt.AutoConfig.Authorizer.AuthMethod.Config["ClaimMappings"] = map[string]string{ + "node": "node", + } + rt.AutoConfig.Authorizer.AuthMethod.Config["JWTValidationPubKeys"] = []string{"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"} + rt.AutoConfig.Authorizer.ClaimAssertions = []string{"value.node == ${node}"} + rt.DataDir = dataDir + rt.LeaveOnTerm = false + rt.ServerMode = true + rt.SkipLeaveOnInt = true + rt.CertFile = "foo" + }, + }, + } + + testConfig(t, tests, dataDir) +} + +func testConfig(t *testing.T, tests []configTest, dataDir string) { + t.Helper() + for _, tt := range tests { + for pass, format := range []string{"json", "hcl"} { + // clean data dir before every test + cleanDir(dataDir) + + // when we test only flags then there are no JSON or HCL + // sources and we need to make only one pass over the + // tests. + flagsOnly := len(tt.json) == 0 && len(tt.hcl) == 0 + if flagsOnly && pass > 0 { + continue + } + + // json and hcl sources need to be in sync + // to make sure we're generating the same config + if len(tt.json) != len(tt.hcl) && !tt.skipformat { + t.Fatal(tt.desc, ": JSON and HCL test case out of sync") + } + + // select the source + srcs, tails := tt.json, tt.jsontail + if format == "hcl" { + srcs, tails = tt.hcl, tt.hcltail + } + + // If we're skipping a format and the current format is empty, + // then skip it! + if tt.skipformat && len(srcs) == 0 { + continue + } + + // build the description + var desc []string + if !flagsOnly { + desc = append(desc, format) + } + if tt.desc != "" { + desc = append(desc, tt.desc) + } + + t.Run(strings.Join(desc, ":"), func(t *testing.T) { + // first parse the flags + flags := BuilderOpts{} + fs := flag.NewFlagSet("", flag.ContinueOnError) + AddFlags(fs, &flags) + err := fs.Parse(tt.args) + if err != nil { + t.Fatalf("ParseFlags failed: %s", err) + } + require.Len(t, fs.Args(), 0) + + if tt.pre != nil { + tt.pre() + } + defer func() { + if tt.post != nil { + tt.post() } + }() + + // Then create a builder with the flags. + b, err := NewBuilder(flags) + if err != nil { + t.Fatal("NewBuilder", err) + } + + patchBuilderShims(b) + if tt.hostname != nil { + b.hostname = tt.hostname + } + if tt.privatev4 != nil { + b.getPrivateIPv4 = tt.privatev4 + } + if tt.publicv6 != nil { + b.getPublicIPv6 = tt.publicv6 } - b.GetPrivateIPv4 = privatev4 - b.GetPublicIPv6 = publicv6 // read the source fragements for i, data := range srcs { - b.Sources = append(b.Sources, Source{ + b.Sources = append(b.Sources, FileSource{ Name: fmt.Sprintf("src-%d.%s", i, format), Format: format, Data: data, }) } for i, data := range tails { - b.Tail = append(b.Tail, Source{ + b.Tail = append(b.Tail, FileSource{ Name: fmt.Sprintf("tail-%d.%s", i, format), Format: format, Data: data, @@ -3610,37 +4367,33 @@ t.Fatalf("error %q does not contain %q", err.Error(), tt.err) } - // check the warnings - if !verify.Values(t, "warnings", b.Warnings, tt.warns) { - t.FailNow() - } - // stop if we expected an error if tt.err != "" { return } + require.Equal(t, tt.warns, b.Warnings, "warnings") // build a default configuration, then patch the fields we expect to change // and compare it with the generated configuration. Since the expected // runtime config has been validated we do not need to validate it again. - x, err := NewBuilder(Flags{}) + x, err := NewBuilder(BuilderOpts{}) if err != nil { t.Fatal(err) } - x.Hostname = b.Hostname - x.GetPrivateIPv4 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("10.0.0.1")}, nil } - x.GetPublicIPv6 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("dead:beef::1")}, nil } - patchedRT, err := x.Build() + x.hostname = b.hostname + x.getPrivateIPv4 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("10.0.0.1")}, nil } + x.getPublicIPv6 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("dead:beef::1")}, nil } + expected, err := x.Build() if err != nil { t.Fatalf("build default failed: %s", err) } if tt.patch != nil { - tt.patch(&patchedRT) + tt.patch(&expected) } // if err := x.Validate(wantRT); err != nil { // t.Fatalf("validate default failed: %s", err) // } - if got, want := rt, patchedRT; !verify.Values(t, "", got, want) { + if got, want := rt, expected; !verify.Values(t, "", got, want) { t.FailNow() } }) @@ -3648,6 +4401,12 @@ } } +func TestNewBuilder_InvalidConfigFormat(t *testing.T) { + _, err := NewBuilder(BuilderOpts{ConfigFormat: "yaml"}) + require.Error(t, err) + require.Contains(t, err.Error(), "-config-format must be either 'hcl' or 'json'") +} + // TestFullConfig tests the conversion from a fully populated JSON or // HCL config file to a RuntimeConfig structure. All fields must be set // to a unique non-zero value. @@ -3672,6 +4431,8 @@ return n } + defaultEntMeta := structs.DefaultEnterpriseMeta() + flagSrc := []string{`-dev`} src := map[string]string{ "json": `{ @@ -3680,7 +4441,6 @@ "acl_datacenter": "m3urck3z", "acl_default_policy": "ArK3WIfE", "acl_down_policy": "vZXMfMP0", - "acl_enforce_version_8": true, "acl_enable_key_list_policy": true, "acl_master_token": "C1Q1oIwh", "acl_replication_token": "LMmgy5dO", @@ -3723,6 +4483,33 @@ }, "advertise_addr": "17.99.29.16", "advertise_addr_wan": "78.63.37.19", + "audit": { + "enabled": false + }, + "auto_config": { + "enabled": false, + "intro_token": "OpBPGRwt", + "intro_token_file": "gFvAXwI8", + "dns_sans": ["6zdaWg9J"], + "ip_sans": ["198.18.99.99"], + "server_addresses": ["198.18.100.1"], + "authorization": { + "enabled": true, + "static": { + "allow_reuse": true, + "claim_mappings": { + "node": "node" + }, + "list_claim_mappings": { + "foo": "bar" + }, + "bound_issuer": "consul", + "bound_audiences": ["consul-cluster-1"], + "claim_assertions": ["value.node == \"${node}\""], + "jwt_validation_pub_keys": ["-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"] + } + } + }, "autopilot": { "cleanup_dead_servers": true, "disable_upgrade_migration": true, @@ -3736,6 +4523,10 @@ "bind_addr": "16.99.34.17", "bootstrap": true, "bootstrap_expect": 53, + "cache": { + "entry_fetch_max_burst": 42, + "entry_fetch_rate": 0.334 + }, "ca_file": "erA7T0PM", "ca_path": "mQEN1Mfp", "cert_file": "7s4QAzDk", @@ -3831,7 +4622,7 @@ ] }, "auto_encrypt": { - "tls": true, + "tls": false, "dns_san": ["a.com", "b.com"], "ip_san": ["192.168.4.139", "192.168.4.140"], "allow_tls": true @@ -3845,6 +4636,7 @@ "csr_max_per_second": 100, "csr_max_concurrent": 2 }, + "enable_mesh_gateway_wan_federation": false, "enabled": true }, "gossip_lan" : { @@ -3916,7 +4708,7 @@ "key_file": "IEkkwgIA", "leave_on_terminate": true, "limits": { - "http_max_conns_per_client": 9283, + "http_max_conns_per_client": 100, "https_handshake_timeout": "2391ms", "rpc_handshake_timeout": "1932ms", "rpc_rate": 12029.43, @@ -3954,6 +4746,8 @@ }, "protocol": 30793, "primary_datacenter": "ejtmd43d", + "primary_gateways": [ "aej8eeZo", "roh2KahS" ], + "primary_gateways_interval": "18866s", "raft_protocol": 19016, "raft_snapshot_threshold": 16384, "raft_snapshot_interval": "30s", @@ -4274,7 +5068,7 @@ "statsd_address": "drce87cy", "statsite_address": "HpFwKB8R" }, - "tls_cipher_suites": "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + "tls_cipher_suites": "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "tls_min_version": "pAOWafkR", "tls_prefer_server_cipher_suites": true, "translate_wan_addrs": true, @@ -4311,7 +5105,6 @@ acl_datacenter = "m3urck3z" acl_default_policy = "ArK3WIfE" acl_down_policy = "vZXMfMP0" - acl_enforce_version_8 = true acl_enable_key_list_policy = true acl_master_token = "C1Q1oIwh" acl_replication_token = "LMmgy5dO" @@ -4354,6 +5147,33 @@ } advertise_addr = "17.99.29.16" advertise_addr_wan = "78.63.37.19" + audit = { + enabled = false + } + auto_config = { + enabled = false + intro_token = "OpBPGRwt" + intro_token_file = "gFvAXwI8" + dns_sans = ["6zdaWg9J"] + ip_sans = ["198.18.99.99"] + server_addresses = ["198.18.100.1"] + authorization = { + enabled = true + static { + allow_reuse = true + claim_mappings = { + node = "node" + } + list_claim_mappings = { + foo = "bar" + } + bound_issuer = "consul" + bound_audiences = ["consul-cluster-1"] + claim_assertions = ["value.node == \"${node}\""] + jwt_validation_pub_keys = ["-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"] + } + } + } autopilot = { cleanup_dead_servers = true disable_upgrade_migration = true @@ -4367,6 +5187,10 @@ bind_addr = "16.99.34.17" bootstrap = true bootstrap_expect = 53 + cache = { + entry_fetch_max_burst = 42 + entry_fetch_rate = 0.334 + }, ca_file = "erA7T0PM" ca_path = "mQEN1Mfp" cert_file = "7s4QAzDk" @@ -4461,7 +5285,7 @@ } } auto_encrypt = { - tls = true + tls = false dns_san = ["a.com", "b.com"] ip_san = ["192.168.4.139", "192.168.4.140"] allow_tls = true @@ -4477,6 +5301,7 @@ csr_max_per_second = 100.0 csr_max_concurrent = 2.0 } + enable_mesh_gateway_wan_federation = false enabled = true } gossip_lan { @@ -4548,7 +5373,7 @@ key_file = "IEkkwgIA" leave_on_terminate = true limits { - http_max_conns_per_client = 9283 + http_max_conns_per_client = 100 https_handshake_timeout = "2391ms" rpc_handshake_timeout = "1932ms" rpc_rate = 12029.43 @@ -4588,6 +5413,8 @@ } protocol = 30793 primary_datacenter = "ejtmd43d" + primary_gateways = [ "aej8eeZo", "roh2KahS" ] + primary_gateways_interval = "18866s" raft_protocol = 19016 raft_snapshot_threshold = 16384 raft_snapshot_interval = "30s" @@ -4907,7 +5734,7 @@ statsd_address = "drce87cy" statsite_address = "HpFwKB8R" } - tls_cipher_suites = "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + tls_cipher_suites = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" tls_min_version = "pAOWafkR" tls_prefer_server_cipher_suites = true translate_wan_addrs = true @@ -4938,8 +5765,8 @@ `} tail := map[string][]Source{ - "json": []Source{ - { + "json": { + FileSource{ Name: "tail.non-user.json", Format: "json", Data: ` @@ -4958,7 +5785,7 @@ "sync_coordinate_rate_target": 137.81 }`, }, - { + FileSource{ Name: "tail.consul.json", Format: "json", Data: ` @@ -4981,8 +5808,8 @@ }`, }, }, - "hcl": []Source{ - { + "hcl": { + FileSource{ Name: "tail.non-user.hcl", Format: "hcl", Data: ` @@ -5000,7 +5827,7 @@ sync_coordinate_rate_target = 137.81 `, }, - { + FileSource{ Name: "tail.consul.hcl", Format: "hcl", Data: ` @@ -5068,7 +5895,6 @@ ACLDatacenter: "ejtmd43d", ACLDefaultPolicy: "72c2e7a0", ACLDownPolicy: "03eb2aee", - ACLEnforceVersion8: true, ACLEnableKeyListPolicy: true, ACLEnableTokenPersistence: true, ACLMasterToken: "8a19ac27", @@ -5091,10 +5917,14 @@ BindAddr: ipAddr("16.99.34.17"), Bootstrap: true, BootstrapExpect: 53, - CAFile: "erA7T0PM", - CAPath: "mQEN1Mfp", - CertFile: "7s4QAzDk", - CheckOutputMaxSize: checks.DefaultBufSize, + Cache: cache.Options{ + EntryFetchMaxBurst: 42, + EntryFetchRate: 0.334, + }, + CAFile: "erA7T0PM", + CAPath: "mQEN1Mfp", + CertFile: "7s4QAzDk", + CheckOutputMaxSize: checks.DefaultBufSize, Checks: []*structs.CheckDefinition{ &structs.CheckDefinition{ ID: "uAjE6m9Z", @@ -5176,8 +6006,9 @@ ClientAddrs: []*net.IPAddr{ipAddr("93.83.18.19")}, ConfigEntryBootstrap: []structs.ConfigEntry{ &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + EnterpriseMeta: *defaultEntMeta, Config: map[string]interface{}{ "foo": "bar", // has to be a float due to being a map[string]interface @@ -5185,10 +6016,47 @@ }, }, }, - AutoEncryptTLS: true, - AutoEncryptDNSSAN: []string{"a.com", "b.com"}, - AutoEncryptIPSAN: []net.IP{net.ParseIP("192.168.4.139"), net.ParseIP("192.168.4.140")}, - AutoEncryptAllowTLS: true, + AutoEncryptTLS: false, + AutoEncryptDNSSAN: []string{"a.com", "b.com"}, + AutoEncryptIPSAN: []net.IP{net.ParseIP("192.168.4.139"), net.ParseIP("192.168.4.140")}, + AutoEncryptAllowTLS: true, + AutoConfig: AutoConfig{ + Enabled: false, + IntroToken: "OpBPGRwt", + IntroTokenFile: "gFvAXwI8", + DNSSANs: []string{"6zdaWg9J"}, + IPSANs: []net.IP{net.IPv4(198, 18, 99, 99)}, + ServerAddresses: []string{"198.18.100.1"}, + Authorizer: AutoConfigAuthorizer{ + Enabled: true, + AllowReuse: true, + ClaimAssertions: []string{"value.node == \"${node}\""}, + AuthMethod: structs.ACLAuthMethod{ + Name: "Auto Config Authorizer", + Type: "jwt", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + Config: map[string]interface{}{ + "JWTValidationPubKeys": []string{"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERVchfCZng4mmdvQz1+sJHRN40snC\nYt8NjYOnbnScEXMkyoUmASr88gb7jaVAVt3RYASAbgBjB2Z+EUizWkx5Tg==\n-----END PUBLIC KEY-----"}, + "ClaimMappings": map[string]string{ + "node": "node", + }, + "BoundIssuer": "consul", + "BoundAudiences": []string{"consul-cluster-1"}, + "ListClaimMappings": map[string]string{ + "foo": "bar", + }, + "OIDCDiscoveryURL": "", + "OIDCDiscoveryCACert": "", + "JWKSURL": "", + "JWKSCACert": "", + "ExpirationLeeway": 0 * time.Second, + "NotBeforeLeeway": 0 * time.Second, + "ClockSkewLeeway": 0 * time.Second, + "JWTSupportedAlgs": []string(nil), + }, + }, + }, + }, ConnectEnabled: true, ConnectSidecarMinPort: 8888, ConnectSidecarMaxPort: 9999, @@ -5202,95 +6070,101 @@ "CSRMaxPerSecond": float64(100), "CSRMaxConcurrent": float64(2), }, - DNSAddrs: []net.Addr{tcpAddr("93.95.95.81:7001"), udpAddr("93.95.95.81:7001")}, - DNSARecordLimit: 29907, - DNSAllowStale: true, - DNSDisableCompression: true, - DNSDomain: "7W1xXSqd", - DNSAltDomain: "1789hsd", - DNSEnableTruncate: true, - DNSMaxStale: 29685 * time.Second, - DNSNodeTTL: 7084 * time.Second, - DNSOnlyPassing: true, - DNSPort: 7001, - DNSRecursorTimeout: 4427 * time.Second, - DNSRecursors: []string{"63.38.39.58", "92.49.18.18"}, - DNSSOA: RuntimeSOAConfig{Refresh: 3600, Retry: 600, Expire: 86400, Minttl: 0}, - DNSServiceTTL: map[string]time.Duration{"*": 32030 * time.Second}, - DNSUDPAnswerLimit: 29909, - DNSNodeMetaTXT: true, - DNSUseCache: true, - DNSCacheMaxAge: 5 * time.Minute, - DataDir: dataDir, - Datacenter: "rzo029wg", - DefaultQueryTime: 16743 * time.Second, - DevMode: true, - DisableAnonymousSignature: true, - DisableCoordinates: true, - DisableHostNodeID: true, - DisableHTTPUnprintableCharFilter: true, - DisableKeyringFile: true, - DisableRemoteExec: true, - DisableUpdateCheck: true, - DiscardCheckOutput: true, - DiscoveryMaxStale: 5 * time.Second, - EnableAgentTLSForChecks: true, - EnableCentralServiceConfig: true, - EnableDebug: true, - EnableRemoteScriptChecks: true, - EnableLocalScriptChecks: true, - EnableSyslog: true, - EnableUI: true, - EncryptKey: "A4wELWqH", - EncryptVerifyIncoming: true, - EncryptVerifyOutgoing: true, - GRPCPort: 4881, - GRPCAddrs: []net.Addr{tcpAddr("32.31.61.91:4881")}, - HTTPAddrs: []net.Addr{tcpAddr("83.39.91.39:7999")}, - HTTPBlockEndpoints: []string{"RBvAFcGD", "fWOWFznh"}, - AllowWriteHTTPFrom: []*net.IPNet{cidr("127.0.0.0/8"), cidr("22.33.44.55/32"), cidr("0.0.0.0/0")}, - HTTPPort: 7999, - HTTPResponseHeaders: map[string]string{"M6TKa9NP": "xjuxjOzQ", "JRCrHZed": "rl0mTx81"}, - HTTPSAddrs: []net.Addr{tcpAddr("95.17.17.19:15127")}, - HTTPMaxConnsPerClient: 9283, - HTTPSHandshakeTimeout: 2391 * time.Millisecond, - HTTPSPort: 15127, - HTTPUseCache: false, - KeyFile: "IEkkwgIA", - KVMaxValueSize: 1234567800000000, - LeaveDrainTime: 8265 * time.Second, - LeaveOnTerm: true, - LogLevel: "k1zo9Spt", - LogJSON: true, - MaxQueryTime: 18237 * time.Second, - NodeID: types.NodeID("AsUIlw99"), - NodeMeta: map[string]string{"5mgGQMBk": "mJLtVMSG", "A7ynFMJB": "0Nx6RGab"}, - NodeName: "otlLxGaI", - NonVotingServer: true, - PidFile: "43xN80Km", - PrimaryDatacenter: "ejtmd43d", - RPCAdvertiseAddr: tcpAddr("17.99.29.16:3757"), - RPCBindAddr: tcpAddr("16.99.34.17:3757"), - RPCHandshakeTimeout: 1932 * time.Millisecond, - RPCHoldTimeout: 15707 * time.Second, - RPCProtocol: 30793, - RPCRateLimit: 12029.43, - RPCMaxBurst: 44848, - RPCMaxConnsPerClient: 2954, - RaftProtocol: 19016, - RaftSnapshotThreshold: 16384, - RaftSnapshotInterval: 30 * time.Second, - RaftTrailingLogs: 83749, - ReconnectTimeoutLAN: 23739 * time.Second, - ReconnectTimeoutWAN: 26694 * time.Second, - RejoinAfterLeave: true, - RetryJoinIntervalLAN: 8067 * time.Second, - RetryJoinIntervalWAN: 28866 * time.Second, - RetryJoinLAN: []string{"pbsSFY7U", "l0qLtWij"}, - RetryJoinMaxAttemptsLAN: 913, - RetryJoinMaxAttemptsWAN: 23160, - RetryJoinWAN: []string{"PFsR02Ye", "rJdQIhER"}, - SegmentName: "BC2NhTDi", + ConnectMeshGatewayWANFederationEnabled: false, + DNSAddrs: []net.Addr{tcpAddr("93.95.95.81:7001"), udpAddr("93.95.95.81:7001")}, + DNSARecordLimit: 29907, + DNSAllowStale: true, + DNSDisableCompression: true, + DNSDomain: "7W1xXSqd", + DNSAltDomain: "1789hsd", + DNSEnableTruncate: true, + DNSMaxStale: 29685 * time.Second, + DNSNodeTTL: 7084 * time.Second, + DNSOnlyPassing: true, + DNSPort: 7001, + DNSRecursorTimeout: 4427 * time.Second, + DNSRecursors: []string{"63.38.39.58", "92.49.18.18"}, + DNSSOA: RuntimeSOAConfig{Refresh: 3600, Retry: 600, Expire: 86400, Minttl: 0}, + DNSServiceTTL: map[string]time.Duration{"*": 32030 * time.Second}, + DNSUDPAnswerLimit: 29909, + DNSNodeMetaTXT: true, + DNSUseCache: true, + DNSCacheMaxAge: 5 * time.Minute, + DataDir: dataDir, + Datacenter: "rzo029wg", + DefaultQueryTime: 16743 * time.Second, + DevMode: true, + DisableAnonymousSignature: true, + DisableCoordinates: true, + DisableHostNodeID: true, + DisableHTTPUnprintableCharFilter: true, + DisableKeyringFile: true, + DisableRemoteExec: true, + DisableUpdateCheck: true, + DiscardCheckOutput: true, + DiscoveryMaxStale: 5 * time.Second, + EnableAgentTLSForChecks: true, + EnableCentralServiceConfig: true, + EnableDebug: true, + EnableRemoteScriptChecks: true, + EnableLocalScriptChecks: true, + EnableUI: true, + EncryptKey: "A4wELWqH", + EncryptVerifyIncoming: true, + EncryptVerifyOutgoing: true, + GRPCPort: 4881, + GRPCAddrs: []net.Addr{tcpAddr("32.31.61.91:4881")}, + HTTPAddrs: []net.Addr{tcpAddr("83.39.91.39:7999")}, + HTTPBlockEndpoints: []string{"RBvAFcGD", "fWOWFznh"}, + AllowWriteHTTPFrom: []*net.IPNet{cidr("127.0.0.0/8"), cidr("22.33.44.55/32"), cidr("0.0.0.0/0")}, + HTTPPort: 7999, + HTTPResponseHeaders: map[string]string{"M6TKa9NP": "xjuxjOzQ", "JRCrHZed": "rl0mTx81"}, + HTTPSAddrs: []net.Addr{tcpAddr("95.17.17.19:15127")}, + HTTPMaxConnsPerClient: 100, + HTTPSHandshakeTimeout: 2391 * time.Millisecond, + HTTPSPort: 15127, + HTTPUseCache: false, + KeyFile: "IEkkwgIA", + KVMaxValueSize: 1234567800000000, + LeaveDrainTime: 8265 * time.Second, + LeaveOnTerm: true, + Logging: logging.Config{ + LogLevel: "k1zo9Spt", + LogJSON: true, + EnableSyslog: true, + SyslogFacility: "hHv79Uia", + }, + MaxQueryTime: 18237 * time.Second, + NodeID: types.NodeID("AsUIlw99"), + NodeMeta: map[string]string{"5mgGQMBk": "mJLtVMSG", "A7ynFMJB": "0Nx6RGab"}, + NodeName: "otlLxGaI", + NonVotingServer: true, + PidFile: "43xN80Km", + PrimaryDatacenter: "ejtmd43d", + PrimaryGateways: []string{"aej8eeZo", "roh2KahS"}, + PrimaryGatewaysInterval: 18866 * time.Second, + RPCAdvertiseAddr: tcpAddr("17.99.29.16:3757"), + RPCBindAddr: tcpAddr("16.99.34.17:3757"), + RPCHandshakeTimeout: 1932 * time.Millisecond, + RPCHoldTimeout: 15707 * time.Second, + RPCProtocol: 30793, + RPCRateLimit: 12029.43, + RPCMaxBurst: 44848, + RPCMaxConnsPerClient: 2954, + RaftProtocol: 19016, + RaftSnapshotThreshold: 16384, + RaftSnapshotInterval: 30 * time.Second, + RaftTrailingLogs: 83749, + ReconnectTimeoutLAN: 23739 * time.Second, + ReconnectTimeoutWAN: 26694 * time.Second, + RejoinAfterLeave: true, + RetryJoinIntervalLAN: 8067 * time.Second, + RetryJoinIntervalWAN: 28866 * time.Second, + RetryJoinLAN: []string{"pbsSFY7U", "l0qLtWij"}, + RetryJoinMaxAttemptsLAN: 913, + RetryJoinMaxAttemptsWAN: 23160, + RetryJoinWAN: []string{"PFsR02Ye", "rJdQIhER"}, + SegmentName: "BC2NhTDi", Segments: []structs.NetworkSegment{ { Name: "PExYMe2E", @@ -5592,7 +6466,6 @@ SkipLeaveOnInt: true, StartJoinAddrsLAN: []string{"LR3hGDoG", "MwVpZ4Up"}, StartJoinAddrsWAN: []string{"EbFSc3nA", "kwXTh623"}, - SyslogFacility: "hHv79Uia", Telemetry: lib.TelemetryConfig{ CirconusAPIApp: "p4QOTe9j", CirconusAPIToken: "E3j35V23", @@ -5618,7 +6491,7 @@ StatsdAddr: "drce87cy", StatsiteAddr: "HpFwKB8R", }, - TLSCipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384}, + TLSCipherSuites: []uint16{tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256}, TLSMinVersion: "pAOWafkR", TLSPreferServerCipherSuites: true, TaggedAddresses: map[string]string{ @@ -5679,23 +6552,19 @@ t.Run(format, func(t *testing.T) { // parse the flags since this is the only way we can set the // DevMode flag - var flags Flags + var flags BuilderOpts fs := flag.NewFlagSet("", flag.ContinueOnError) AddFlags(fs, &flags) if err := fs.Parse(flagSrc); err != nil { t.Fatalf("ParseFlags: %s", err) } - - // ensure that all fields are set to unique non-zero values - // if err := nonZero("Config", nil, c); err != nil { - // t.Fatal(err) - // } + require.Len(t, fs.Args(), 0) b, err := NewBuilder(flags) if err != nil { t.Fatalf("NewBuilder: %s", err) } - b.Sources = append(b.Sources, Source{Name: "full." + format, Data: data}) + b.Sources = append(b.Sources, FileSource{Name: "full." + format, Data: data, Format: format}) b.Tail = append(b.Tail, tail[format]...) b.Tail = append(b.Tail, VersionSource("JNtPSav3", "R909Hblt", "ZT1JOQLn")) @@ -5937,6 +6806,10 @@ &net.TCPAddr{IP: net.ParseIP("1.2.3.4"), Port: 5678}, &net.UnixAddr{Name: "/var/run/foo"}, }, + Cache: cache.Options{ + EntryFetchMaxBurst: 42, + EntryFetchRate: 0.334, + }, ConsulCoordinateUpdatePeriod: 15 * time.Second, RetryJoinLAN: []string{ "foo=bar key=baz secret=boom bang=bar", @@ -5944,6 +6817,9 @@ RetryJoinWAN: []string{ "wan_foo=bar wan_key=baz wan_secret=boom wan_bang=bar", }, + PrimaryGateways: []string{ + "pmgw_foo=bar pmgw_key=baz pmgw_secret=boom pmgw_bang=bar", + }, Services: []*structs.ServiceDefinition{ &structs.ServiceDefinition{ Name: "foo", @@ -5966,7 +6842,11 @@ }, }, KVMaxValueSize: 1234567800000000, - TxnMaxReqLen: 5678000000000000, + SerfAllowedCIDRsLAN: []net.IPNet{ + *parseCIDR(t, "192.168.1.0/24"), + *parseCIDR(t, "127.0.0.0/8"), + }, + TxnMaxReqLen: 5678000000000000, } rtJSON := `{ @@ -5978,7 +6858,6 @@ "ACLDownPolicy": "", "ACLEnableKeyListPolicy": false, "ACLEnableTokenPersistence": false, - "ACLEnforceVersion8": false, "ACLMasterToken": "hidden", "ACLPolicyTTL": "0s", "ACLReplicationToken": "hidden", @@ -6001,6 +6880,10 @@ "BindAddr": "127.0.0.1", "Bootstrap": false, "BootstrapExpect": 0, + "Cache": { + "EntryFetchMaxBurst": 42, + "EntryFetchRate": 0.334 + }, "CAFile": "", "CAPath": "", "CertFile": "", @@ -6046,6 +6929,7 @@ "ConnectCAConfig": {}, "ConnectCAProvider": "", "ConnectEnabled": false, + "ConnectMeshGatewayWANFederationEnabled": false, "ConnectSidecarMaxPort": 0, "ConnectSidecarMinPort": 0, "ConnectTestCALeafRootChangeSpread": "0s", @@ -6114,7 +6998,6 @@ "EnableCentralServiceConfig": false, "EnableLocalScriptChecks": false, "EnableRemoteScriptChecks": false, - "EnableSyslog": false, "EnableUI": false, "EncryptKey": "hidden", "EncryptVerifyIncoming": false, @@ -6140,12 +7023,17 @@ "KVMaxValueSize": 1234567800000000, "LeaveDrainTime": "0s", "LeaveOnTerm": false, - "LogLevel": "", - "LogJSON": false, - "LogFile": "", - "LogRotateBytes": 0, - "LogRotateDuration": "0s", - "LogRotateMaxFiles": 0, + "Logging": { + "EnableSyslog": false, + "LogLevel": "", + "LogJSON": false, + "LogFilePath": "", + "LogRotateBytes": 0, + "LogRotateDuration": "0s", + "LogRotateMaxFiles": 0, + "Name": "", + "SyslogFacility": "" + }, "MaxQueryTime": "0s", "NodeID": "", "NodeMeta": {}, @@ -6153,6 +7041,10 @@ "NonVotingServer": false, "PidFile": "", "PrimaryDatacenter": "", + "PrimaryGateways": [ + "pmgw_foo=bar pmgw_key=baz pmgw_secret=boom pmgw_bang=bar" + ], + "PrimaryGatewaysInterval": "0s", "RPCAdvertiseAddr": "", "RPCBindAddr": "", "RPCHandshakeTimeout": "0s", @@ -6185,6 +7077,8 @@ "Segments": [], "SerfAdvertiseAddrLAN": "tcp://1.2.3.4:5678", "SerfAdvertiseAddrWAN": "", + "SerfAllowedCIDRsLAN": ["192.168.1.0/24", "127.0.0.0/8"], + "SerfAllowedCIDRsWAN": [], "SerfBindAddrLAN": "", "SerfBindAddrWAN": "", "SerfPortLAN": 0, @@ -6246,7 +7140,6 @@ "StartJoinAddrsWAN": [], "SyncCoordinateIntervalMin": "0s", "SyncCoordinateRateTarget": 0, - "SyslogFacility": "", "TLSCipherSuites": [], "TLSMinVersion": "", "TLSPreferServerCipherSuites": false, @@ -6267,6 +7160,7 @@ "CirconusCheckTags": "", "CirconusSubmissionInterval": "", "CirconusSubmissionURL": "", + "Disable": false, "DisableHostname": false, "DogstatsdAddr": "", "DogstatsdTags": [], @@ -6294,7 +7188,35 @@ "AllowWriteHTTPFrom": [ "127.0.0.0/8", "::1/128" - ] + ], + "AutoConfig": { + "Authorizer": { + "Enabled": false, + "AllowReuse": false, + "AuthMethod": { + "ACLAuthMethodEnterpriseFields": {}, + "Config": {}, + "Description": "", + "DisplayName": "", + "EnterpriseMeta": {}, + "MaxTokenTTL": "0s", + "Name": "", + "RaftIndex": { + "CreateIndex": 0, + "ModifyIndex": 0 + }, + "Type": "", + "TokenLocality": "" + }, + "ClaimAssertions": [] + }, + "Enabled": false, + "DNSSANs": [], + "IntroToken": "hidden", + "IntroTokenFile": "", + "IPSANs": [], + "ServerAddresses": [] + } }` b, err := json.MarshalIndent(rt.Sanitized(), "", " ") if err != nil { @@ -6513,7 +7435,7 @@ ServerName: "f", DNSDomain: "g", TLSMinVersion: "tls12", - TLSCipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305}, + TLSCipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, TLSPreferServerCipherSuites: true, EnableAgentTLSForChecks: true, AutoEncryptTLS: true, @@ -6524,7 +7446,47 @@ require.True(t, r.VerifyIncomingHTTPS) require.True(t, r.VerifyOutgoing) require.True(t, r.EnableAgentTLSForChecks) - require.True(t, r.AutoEncryptTLS) + require.True(t, r.AutoTLS) + require.True(t, r.VerifyServerHostname) + require.True(t, r.PreferServerCipherSuites) + require.Equal(t, "a", r.CAFile) + require.Equal(t, "b", r.CAPath) + require.Equal(t, "c", r.CertFile) + require.Equal(t, "d", r.KeyFile) + require.Equal(t, "e", r.NodeName) + require.Equal(t, "f", r.ServerName) + require.Equal(t, "g", r.Domain) + require.Equal(t, "tls12", r.TLSMinVersion) + require.Equal(t, []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, r.CipherSuites) +} + +func TestRuntime_ToTLSUtilConfig_AutoConfig(t *testing.T) { + c := &RuntimeConfig{ + VerifyIncoming: true, + VerifyIncomingRPC: true, + VerifyIncomingHTTPS: true, + VerifyOutgoing: true, + VerifyServerHostname: true, + CAFile: "a", + CAPath: "b", + CertFile: "c", + KeyFile: "d", + NodeName: "e", + ServerName: "f", + DNSDomain: "g", + TLSMinVersion: "tls12", + TLSCipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, + TLSPreferServerCipherSuites: true, + EnableAgentTLSForChecks: true, + AutoConfig: AutoConfig{Enabled: true}, + } + r := c.ToTLSUtilConfig() + require.True(t, r.VerifyIncoming) + require.True(t, r.VerifyIncomingRPC) + require.True(t, r.VerifyIncomingHTTPS) + require.True(t, r.VerifyOutgoing) + require.True(t, r.EnableAgentTLSForChecks) + require.True(t, r.AutoTLS) require.True(t, r.VerifyServerHostname) require.True(t, r.PreferServerCipherSuites) require.Equal(t, "a", r.CAFile) @@ -6535,7 +7497,7 @@ require.Equal(t, "f", r.ServerName) require.Equal(t, "g", r.Domain) require.Equal(t, "tls12", r.TLSMinVersion) - require.Equal(t, []uint16{tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305}, r.CipherSuites) + require.Equal(t, []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA}, r.CipherSuites) } func Test_UIPathBuilder(t *testing.T) { @@ -6657,3 +7619,97 @@ panic("invalid format: " + format) } } + +func TestConnectCAConfiguration(t *testing.T) { + type testCase struct { + config RuntimeConfig + expected *structs.CAConfiguration + err string + } + + cases := map[string]testCase{ + "defaults": { + config: RuntimeConfig{ + ConnectEnabled: true, + }, + expected: &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "RotationPeriod": "2160h", + "LeafCertTTL": "72h", + "IntermediateCertTTL": "8760h", // 365 * 24h + }, + }, + }, + "cluster-id-override": { + config: RuntimeConfig{ + ConnectEnabled: true, + ConnectCAConfig: map[string]interface{}{ + "cluster_id": "adfe7697-09b4-413a-ac0a-fa81ed3a3001", + }, + }, + expected: &structs.CAConfiguration{ + Provider: "consul", + ClusterID: "adfe7697-09b4-413a-ac0a-fa81ed3a3001", + Config: map[string]interface{}{ + "RotationPeriod": "2160h", + "LeafCertTTL": "72h", + "IntermediateCertTTL": "8760h", // 365 * 24h + "cluster_id": "adfe7697-09b4-413a-ac0a-fa81ed3a3001", + }, + }, + }, + "cluster-id-non-uuid": { + config: RuntimeConfig{ + ConnectEnabled: true, + ConnectCAConfig: map[string]interface{}{ + "cluster_id": "foo", + }, + }, + err: "cluster_id was supplied but was not a valid UUID", + }, + "provider-override": { + config: RuntimeConfig{ + ConnectEnabled: true, + ConnectCAProvider: "vault", + }, + expected: &structs.CAConfiguration{ + Provider: "vault", + Config: map[string]interface{}{ + "RotationPeriod": "2160h", + "LeafCertTTL": "72h", + "IntermediateCertTTL": "8760h", // 365 * 24h + }, + }, + }, + "other-config": { + config: RuntimeConfig{ + ConnectEnabled: true, + ConnectCAConfig: map[string]interface{}{ + "foo": "bar", + }, + }, + expected: &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "RotationPeriod": "2160h", + "LeafCertTTL": "72h", + "IntermediateCertTTL": "8760h", // 365 * 24h + "foo": "bar", + }, + }, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + actual, err := tcase.config.ConnectCAConfiguration() + if tcase.err != "" { + testutil.RequireErrorContains(t, err, tcase.err) + } else { + require.NoError(t, err) + require.Equal(t, tcase.expected, actual) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/config_endpoint.go consul-1.8.7+dfsg1/agent/config_endpoint.go --- consul-1.7.4+dfsg1/agent/config_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,6 +9,8 @@ "github.com/hashicorp/consul/agent/structs" ) +const ConfigEntryNotFoundErr string = "Config entry not found" + // Config switches on the different CRUD operations for config entries. func (s *HTTPServer) Config(resp http.ResponseWriter, req *http.Request) (interface{}, error) { switch req.Method { @@ -48,7 +50,7 @@ setMeta(resp, &reply.QueryMeta) if reply.Entry == nil { - return nil, NotFoundError{Reason: fmt.Sprintf("Config entry not found for %q / %q", pathArgs[0], pathArgs[1])} + return nil, NotFoundError{Reason: fmt.Sprintf("%s for %q / %q", ConfigEntryNotFoundErr, pathArgs[0], pathArgs[1])} } return reply.Entry, nil diff -Nru consul-1.7.4+dfsg1/agent/config_endpoint_test.go consul-1.8.7+dfsg1/agent/config_endpoint_test.go --- consul-1.7.4+dfsg1/agent/config_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,7 @@ func TestConfig_Get(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -97,7 +97,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -147,7 +147,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -182,10 +182,135 @@ } } +func TestConfig_Apply_TerminatingGateway(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, "") + defer a.Shutdown() + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + + // Create some config entries. + body := bytes.NewBuffer([]byte(` + { + "Kind": "terminating-gateway", + "Name": "west-gw-01", + "Services": [ + { + "Name": "web", + "CAFile": "/etc/web/ca.crt", + "CertFile": "/etc/web/client.crt", + "KeyFile": "/etc/web/tls.key" + }, + { + "Name": "api" + } + ] + }`)) + + req, _ := http.NewRequest("PUT", "/v1/config", body) + resp := httptest.NewRecorder() + _, err := a.srv.ConfigApply(resp, req) + require.NoError(t, err) + require.Equal(t, 200, resp.Code, "!200 Response Code: %s", resp.Body.String()) + + // List all entries, there should only be one + { + args := structs.ConfigEntryQuery{ + Kind: structs.TerminatingGateway, + Datacenter: "dc1", + } + var out structs.IndexedConfigEntries + require.NoError(t, a.RPC("ConfigEntry.List", &args, &out)) + require.NotNil(t, out) + require.Len(t, out.Entries, 1) + + got := out.Entries[0].(*structs.TerminatingGatewayConfigEntry) + expect := []structs.LinkedService{ + { + Name: "web", + CAFile: "/etc/web/ca.crt", + CertFile: "/etc/web/client.crt", + KeyFile: "/etc/web/tls.key", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + { + Name: "api", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + } + require.Equal(t, expect, got.Services) + } +} + +func TestConfig_Apply_IngressGateway(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, "") + defer a.Shutdown() + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + + // Create some config entries. + body := bytes.NewBuffer([]byte(` + { + "Kind": "ingress-gateway", + "Name": "ingress", + "Listeners": [ + { + "Port": 8080, + "Services": [ + { "Name": "web" } + ] + } + ] + }`)) + + req, _ := http.NewRequest("PUT", "/v1/config", body) + resp := httptest.NewRecorder() + _, err := a.srv.ConfigApply(resp, req) + require.NoError(t, err) + require.Equal(t, 200, resp.Code, "!200 Response Code: %s", resp.Body.String()) + + // List all entries, there should only be one + { + args := structs.ConfigEntryQuery{ + Kind: structs.IngressGateway, + Datacenter: "dc1", + } + var out structs.IndexedConfigEntries + require.NoError(t, a.RPC("ConfigEntry.List", &args, &out)) + require.NotNil(t, out) + require.Len(t, out.Entries, 1) + + got := out.Entries[0].(*structs.IngressGatewayConfigEntry) + // Ignore create and modify indices + got.CreateIndex = 0 + got.ModifyIndex = 0 + + expect := &structs.IngressGatewayConfigEntry{ + Name: "ingress", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8080, + Protocol: "tcp", + Services: []structs.IngressService{ + { + Name: "web", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + }, + }, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + } + require.Equal(t, expect, got) + } +} + func TestConfig_Apply_ProxyDefaultsMeshGateway(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -224,7 +349,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -305,7 +430,7 @@ func TestConfig_Apply_Decoding(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -377,7 +502,7 @@ func TestConfig_Apply_ProxyDefaultsExpose(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/config.go consul-1.8.7+dfsg1/agent/config.go --- consul-1.7.4+dfsg1/agent/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/config.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -package agent - -import ( - "errors" - "fmt" - "strings" - "time" - - "github.com/hashicorp/consul/lib" -) - -var errInvalidHeaderFormat = errors.New("agent: invalid format of 'header' field") - -func FixupCheckType(raw interface{}) error { - rawMap, ok := raw.(map[string]interface{}) - if !ok { - return nil - } - - // See https://github.com/hashicorp/consul/pull/3557 why we need this - // and why we should get rid of it. In Consul 1.0 we also didn't map - // Args correctly, so we ended up exposing (and need to carry forward) - // ScriptArgs, see https://github.com/hashicorp/consul/issues/3587. - lib.TranslateKeys(rawMap, map[string]string{ - "args": "ScriptArgs", - "script_args": "ScriptArgs", - "deregister_critical_service_after": "DeregisterCriticalServiceAfter", - "docker_container_id": "DockerContainerID", - "tls_skip_verify": "TLSSkipVerify", - "service_id": "ServiceID", - }) - - parseDuration := func(v interface{}) (time.Duration, error) { - if v == nil { - return 0, nil - } - switch x := v.(type) { - case time.Duration: - return x, nil - case float64: - return time.Duration(x), nil - case string: - return time.ParseDuration(x) - default: - return 0, fmt.Errorf("invalid format") - } - } - - parseHeaderMap := func(v interface{}) (map[string][]string, error) { - if v == nil { - return nil, nil - } - vm, ok := v.(map[string]interface{}) - if !ok { - return nil, errInvalidHeaderFormat - } - m := map[string][]string{} - for k, vv := range vm { - vs, ok := vv.([]interface{}) - if !ok { - return nil, errInvalidHeaderFormat - } - for _, vs := range vs { - s, ok := vs.(string) - if !ok { - return nil, errInvalidHeaderFormat - } - m[k] = append(m[k], s) - } - } - return m, nil - } - - for k, v := range rawMap { - switch strings.ToLower(k) { - case "header": - h, err := parseHeaderMap(v) - if err != nil { - return fmt.Errorf("invalid %q: %s", k, err) - } - rawMap[k] = h - - case "ttl", "interval", "timeout", "deregistercriticalserviceafter": - d, err := parseDuration(v) - if err != nil { - return fmt.Errorf("invalid %q: %v", k, err) - } - rawMap[k] = d - } - } - return nil -} - -func ParseMetaPair(raw string) (string, string) { - pair := strings.SplitN(raw, ":", 2) - if len(pair) == 2 { - return pair[0], pair[1] - } - return pair[0], "" -} diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_aws_test.go consul-1.8.7+dfsg1/agent/connect/ca/provider_aws_test.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_aws_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_aws_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,22 +10,25 @@ "github.com/stretchr/testify/require" ) -func skipIfAWSNotConfigured(t *testing.T) bool { +// skipIfAWSNotConfigured skips the test unless ENABLE_AWS_PCA_TESTS=true. +// +// These tests are not run in CI. If you are making changes to the AWS provider +// you probably want to run these tests locally. The tests will run using any +// credentials available to the AWS SDK. See +// https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials +// for a list of options. +func skipIfAWSNotConfigured(t *testing.T) { enabled := os.Getenv("ENABLE_AWS_PCA_TESTS") ok, err := strconv.ParseBool(enabled) if err != nil || !ok { t.Skip("Skipping because AWS tests are not enabled") - return true } - return false } func TestAWSBootstrapAndSignPrimary(t *testing.T) { // Note not parallel since we could easily hit AWS limits of too many CAs if // all of these tests run at once. - if skipIfAWSNotConfigured(t) { - return - } + skipIfAWSNotConfigured(t) for _, tc := range KeyTestCases { tc := tc @@ -83,9 +86,7 @@ func TestAWSBootstrapAndSignSecondary(t *testing.T) { // Note not parallel since we could easily hit AWS limits of too many CAs if // all of these tests run at once. - if skipIfAWSNotConfigured(t) { - return - } + skipIfAWSNotConfigured(t) p1 := testAWSProvider(t, testProviderConfigPrimary(t, nil)) defer p1.Cleanup() @@ -179,9 +180,7 @@ func TestAWSBootstrapAndSignSecondaryConsul(t *testing.T) { // Note not parallel since we could easily hit AWS limits of too many CAs if // all of these tests run at once. - if skipIfAWSNotConfigured(t) { - return - } + skipIfAWSNotConfigured(t) t.Run("pri=consul,sec=aws", func(t *testing.T) { conf := testConsulCAConfig() @@ -215,9 +214,7 @@ } func TestAWSNoCrossSigning(t *testing.T) { - if skipIfAWSNotConfigured(t) { - return - } + skipIfAWSNotConfigured(t) p1 := testAWSProvider(t, testProviderConfigPrimary(t, nil)) defer p1.Cleanup() @@ -246,15 +243,6 @@ return p } -type testLogger struct { - t *testing.T -} - -func (l *testLogger) Write(b []byte) (int, error) { - l.t.Log(string(b)) - return len(b), nil -} - func testProviderConfigPrimary(t *testing.T, cfg map[string]interface{}) ProviderConfig { rawCfg := make(map[string]interface{}) for k, v := range cfg { diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_consul_config.go consul-1.8.7+dfsg1/agent/connect/ca/provider_consul_config.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_consul_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_consul_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -44,13 +44,13 @@ func defaultConsulCAProviderConfig() structs.ConsulCAProviderConfig { return structs.ConsulCAProviderConfig{ CommonCAProviderConfig: defaultCommonConfig(), - IntermediateCertTTL: 24 * 365 * time.Hour, } } func defaultCommonConfig() structs.CommonCAProviderConfig { return structs.CommonCAProviderConfig{ - LeafCertTTL: 3 * 24 * time.Hour, - PrivateKeyType: connect.DefaultPrivateKeyType, - PrivateKeyBits: connect.DefaultPrivateKeyBits, + LeafCertTTL: 3 * 24 * time.Hour, + IntermediateCertTTL: 24 * 365 * time.Hour, + PrivateKeyType: connect.DefaultPrivateKeyType, + PrivateKeyBits: connect.DefaultPrivateKeyBits, } } diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_consul.go consul-1.8.7+dfsg1/agent/connect/ca/provider_consul.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_consul.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_consul.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,13 @@ "github.com/hashicorp/go-hclog" ) -var ErrNotInitialized = errors.New("provider not initialized") +var ( + // NotBefore will be CertificateTimeDriftBuffer in the past to account for + // time drift between different servers. + CertificateTimeDriftBuffer = time.Minute + + ErrNotInitialized = errors.New("provider not initialized") +) type ConsulProvider struct { Delegate ConsulProviderStateDelegate @@ -474,7 +480,7 @@ // Sign the certificate valid from 1 minute in the past, this helps it be // accepted right away even when nodes are not in close time sync across the // cluster. A minute is more than enough for typical DC clock drift. - effectiveNow := time.Now().Add(-1 * time.Minute) + effectiveNow := time.Now().Add(-1 * CertificateTimeDriftBuffer) template := x509.Certificate{ SerialNumber: sn, Subject: csr.Subject, diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_consul_test.go consul-1.8.7+dfsg1/agent/connect/ca/provider_consul_test.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_consul_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_consul_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,30 +21,7 @@ } func (c *consulCAMockDelegate) ApplyCARequest(req *structs.CARequest) (interface{}, error) { - idx, _, err := c.state.CAConfig(nil) - if err != nil { - return nil, err - } - - switch req.Op { - case structs.CAOpSetProviderState: - _, err := c.state.CASetProviderState(idx+1, req.ProviderState) - if err != nil { - return nil, err - } - - return true, nil - case structs.CAOpDeleteProviderState: - if err := c.state.CADeleteProviderState(req.ProviderState.ID); err != nil { - return nil, err - } - - return true, nil - case structs.CAOpIncrementProviderSerialNumber: - return uint64(2), nil - default: - return nil, fmt.Errorf("Invalid CA operation '%s'", req.Op) - } + return ApplyCARequestToStore(c.state, req) } func newMockDelegate(t *testing.T, conf *structs.CAConfiguration) *consulCAMockDelegate { diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider.go consul-1.8.7+dfsg1/agent/connect/ca/provider.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,6 +16,13 @@ // on servers and CA provider. var ErrRateLimited = errors.New("operation rate limited by CA provider") +// PrimaryIntermediateProviders is a list of CA providers that make use use of an +// intermediate cert in the primary datacenter as well as the secondary. This is used +// when determining whether to run the intermediate renewal routine in the primary. +var PrimaryIntermediateProviders = map[string]struct{}{ + "vault": {}, +} + // ProviderConfig encapsulates all the data Consul passes to `Configure` on a // new provider instance. The provider must treat this as read-only and make // copies of any map or slice if it might modify them internally. @@ -164,3 +171,11 @@ // SetLogger will pass a configured Logger to the provider. SetLogger(logger hclog.Logger) } + +// NeedsStop is an optional interface that allows a CA to define a function +// to be called when the CA instance is no longer in use. This is different +// from Cleanup(), as only the local provider instance is being shut down +// such as in the case of a leader change. +type NeedsStop interface { + Stop() +} diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_test.go consul-1.8.7+dfsg1/agent/connect/ca/provider_test.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,12 +26,13 @@ "PrivateKeyBits": int64(4096), } expectCommonBase := &structs.CommonCAProviderConfig{ - LeafCertTTL: 30 * time.Hour, - SkipValidate: true, - CSRMaxPerSecond: 5.25, - CSRMaxConcurrent: 55, - PrivateKeyType: "rsa", - PrivateKeyBits: 4096, + LeafCertTTL: 30 * time.Hour, + IntermediateCertTTL: 90 * time.Hour, + SkipValidate: true, + CSRMaxPerSecond: 5.25, + CSRMaxConcurrent: 55, + PrivateKeyType: "rsa", + PrivateKeyBits: 4096, } cases := map[string]testcase{ @@ -60,7 +61,6 @@ PrivateKey: "key", RootCert: "cert", RotationPeriod: 5 * time.Minute, - IntermediateCertTTL: 90 * time.Hour, DisableCrossSigning: true, }, parseFunc: func(t *testing.T, raw map[string]interface{}) interface{} { @@ -86,6 +86,7 @@ "Token": "token", "RootPKIPath": "root-pki/", "IntermediatePKIPath": "im-pki/", + "IntermediateCertTTL": "90h", "CAFile": "ca-file", "CAPath": "ca-path", "CertFile": "cert-file", @@ -126,8 +127,9 @@ ModifyIndex: 99, }, Config: map[string]interface{}{ - "ExistingARN": "arn://foo", - "DeleteOnExit": true, + "ExistingARN": "arn://foo", + "DeleteOnExit": true, + "IntermediateCertTTL": "90h", }, }, expectConfig: &structs.AWSCAProviderConfig{ diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_vault.go consul-1.8.7+dfsg1/agent/connect/ca/provider_vault.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_vault.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_vault.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,15 +2,19 @@ import ( "bytes" + "context" "crypto/x509" "encoding/pem" "fmt" "io/ioutil" "net/http" "strings" + "time" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/logging" + "github.com/hashicorp/go-hclog" vaultapi "github.com/hashicorp/vault/api" "github.com/mitchellh/mapstructure" ) @@ -21,12 +25,20 @@ var ErrBackendNotInitialized = fmt.Errorf("backend not initialized") type VaultProvider struct { - config *structs.VaultCAProviderConfig - client *vaultapi.Client + config *structs.VaultCAProviderConfig + client *vaultapi.Client + + shutdown func() + isPrimary bool clusterID string spiffeID *connect.SpiffeIDSigning setupIntermediatePKIPathDone bool + logger hclog.Logger +} + +func NewVaultProvider() *VaultProvider { + return &VaultProvider{shutdown: func() {}} } func vaultTLSConfig(config *structs.VaultCAProviderConfig) *vaultapi.TLSConfig { @@ -66,9 +78,76 @@ v.clusterID = cfg.ClusterID v.spiffeID = connect.SpiffeIDSigningForCluster(&structs.CAConfiguration{ClusterID: v.clusterID}) + // Look up the token to see if we can auto-renew its lease. + secret, err := client.Auth().Token().LookupSelf() + if err != nil { + return err + } + var token struct { + Renewable bool + TTL int + } + if err := mapstructure.Decode(secret.Data, &token); err != nil { + return err + } + + // Set up a renewer to renew the token automatically, if supported. + if token.Renewable { + lifetimeWatcher, err := client.NewLifetimeWatcher(&vaultapi.LifetimeWatcherInput{ + Secret: &vaultapi.Secret{ + Auth: &vaultapi.SecretAuth{ + ClientToken: config.Token, + Renewable: token.Renewable, + LeaseDuration: secret.LeaseDuration, + }, + }, + Increment: token.TTL, + RenewBehavior: vaultapi.RenewBehaviorIgnoreErrors, + }) + if err != nil { + return fmt.Errorf("Error beginning Vault provider token renewal: %v", err) + } + + ctx, cancel := context.WithCancel(context.TODO()) + v.shutdown = cancel + go v.renewToken(ctx, lifetimeWatcher) + } + return nil } +// renewToken uses a vaultapi.Renewer to repeatedly renew our token's lease. +func (v *VaultProvider) renewToken(ctx context.Context, watcher *vaultapi.LifetimeWatcher) { + go watcher.Start() + defer watcher.Stop() + + for { + select { + case <-ctx.Done(): + return + + case err := <-watcher.DoneCh(): + if err != nil { + v.logger.Error("Error renewing token for Vault provider", "error", err) + } + + // Watcher routine has finished, so start it again. + go watcher.Start() + + case <-watcher.RenewCh(): + v.logger.Info("Successfully renewed token for Vault provider") + } + } +} + +// SetLogger implements the NeedsLogger interface so the provider can log important messages. +func (v *VaultProvider) SetLogger(logger hclog.Logger) { + v.logger = logger. + ResetNamed(logging.Connect). + Named(logging.CA). + Named(logging.Vault) +} + // State implements Provider. Vault provider needs no state other than the // user-provided config currently. func (v *VaultProvider) State() (map[string]string, error) { @@ -153,7 +232,7 @@ Type: "pki", Description: "intermediate CA backend for Consul Connect", Config: vaultapi.MountConfigInput{ - MaxLeaseTTL: "2160h", + MaxLeaseTTL: v.config.IntermediateCertTTL.String(), }, }) @@ -306,6 +385,7 @@ "csr": csr, "use_csr_values": true, "format": "pem_bundle", + "ttl": v.config.IntermediateCertTTL.String(), }) if err != nil { return "", err @@ -378,6 +458,7 @@ "use_csr_values": true, "format": "pem_bundle", "max_path_length": 0, + "ttl": v.config.IntermediateCertTTL.String(), }) if err != nil { return "", err @@ -397,8 +478,20 @@ // CrossSignCA takes a CA certificate and cross-signs it to form a trust chain // back to our active root. func (v *VaultProvider) CrossSignCA(cert *x509.Certificate) (string, error) { + rootPEM, err := v.ActiveRoot() + if err != nil { + return "", err + } + rootCert, err := connect.ParseCert(rootPEM) + if err != nil { + return "", fmt.Errorf("error parsing root cert: %v", err) + } + if rootCert.NotAfter.Before(time.Now()) { + return "", fmt.Errorf("root certificate is expired") + } + var pemBuf bytes.Buffer - err := pem.Encode(&pemBuf, &pem.Block{Type: "CERTIFICATE", Bytes: cert.Raw}) + err = pem.Encode(&pemBuf, &pem.Block{Type: "CERTIFICATE", Bytes: cert.Raw}) if err != nil { return "", err } @@ -431,9 +524,16 @@ // this down and recreate it on small config changes because the intermediate // certs get bundled with the leaf certs, so there's no cost to the CA changing. func (v *VaultProvider) Cleanup() error { + v.Stop() + return v.client.Sys().Unmount(v.config.IntermediatePKIPath) } +// Stop shuts down the token renew goroutine. +func (v *VaultProvider) Stop() { + v.shutdown() +} + func ParseVaultCAConfig(raw map[string]interface{}) (*structs.VaultCAProviderConfig, error) { config := structs.VaultCAProviderConfig{ CommonCAProviderConfig: defaultCommonConfig(), diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/provider_vault_test.go consul-1.8.7+dfsg1/agent/connect/ca/provider_vault_test.go --- consul-1.7.4+dfsg1/agent/connect/ca/provider_vault_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/provider_vault_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,18 +2,16 @@ import ( "crypto/x509" + "encoding/json" "fmt" "io/ioutil" - "os" - "os/exec" - "sync" "testing" "time" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/hashicorp/go-hclog" vaultapi "github.com/hashicorp/vault/api" "github.com/stretchr/testify/require" ) @@ -40,7 +38,7 @@ func TestVaultCAProvider_SecondaryActiveIntermediate(t *testing.T) { t.Parallel() - skipIfVaultNotPresent(t) + SkipIfVaultNotPresent(t) provider, testVault := testVaultProviderWithConfig(t, false, nil) defer testVault.Stop() @@ -51,12 +49,46 @@ require.NoError(err) } -func TestVaultCAProvider_Bootstrap(t *testing.T) { +func TestVaultCAProvider_RenewToken(t *testing.T) { t.Parallel() + SkipIfVaultNotPresent(t) - if skipIfVaultNotPresent(t) { - return + testVault, err := runTestVault(t) + require.NoError(t, err) + testVault.WaitUntilReady(t) + + // Create a token with a short TTL to be renewed by the provider. + ttl := 1 * time.Second + tcr := &vaultapi.TokenCreateRequest{ + TTL: ttl.String(), } + secret, err := testVault.client.Auth().Token().Create(tcr) + require.NoError(t, err) + providerToken := secret.Auth.ClientToken + + _, err = createVaultProvider(t, true, testVault.Addr, providerToken, nil) + require.NoError(t, err) + + // Check the last renewal time. + secret, err = testVault.client.Auth().Token().Lookup(providerToken) + require.NoError(t, err) + firstRenewal, err := secret.Data["last_renewal_time"].(json.Number).Int64() + require.NoError(t, err) + + // Wait past the TTL and make sure the token has been renewed. + retry.Run(t, func(r *retry.R) { + secret, err = testVault.client.Auth().Token().Lookup(providerToken) + require.NoError(r, err) + lastRenewal, err := secret.Data["last_renewal_time"].(json.Number).Int64() + require.NoError(r, err) + require.Greater(r, lastRenewal, firstRenewal) + }) +} + +func TestVaultCAProvider_Bootstrap(t *testing.T) { + t.Parallel() + + SkipIfVaultNotPresent(t) provider, testVault := testVaultProvider(t) defer testVault.Stop() @@ -117,9 +149,7 @@ func TestVaultCAProvider_SignLeaf(t *testing.T) { t.Parallel() - if skipIfVaultNotPresent(t) { - return - } + SkipIfVaultNotPresent(t) for _, tc := range KeyTestCases { tc := tc @@ -203,9 +233,7 @@ func TestVaultCAProvider_CrossSignCA(t *testing.T) { t.Parallel() - if skipIfVaultNotPresent(t) { - return - } + SkipIfVaultNotPresent(t) tests := CASigningKeyTypeCases() @@ -260,9 +288,7 @@ func TestVaultProvider_SignIntermediate(t *testing.T) { t.Parallel() - if skipIfVaultNotPresent(t) { - return - } + SkipIfVaultNotPresent(t) tests := CASigningKeyTypeCases() @@ -291,9 +317,7 @@ func TestVaultProvider_SignIntermediateConsul(t *testing.T) { t.Parallel() - if skipIfVaultNotPresent(t) { - return - } + SkipIfVaultNotPresent(t) // primary = Vault, secondary = Consul t.Run("pri=vault,sec=consul", func(t *testing.T) { @@ -354,21 +378,30 @@ return dur } -func testVaultProvider(t *testing.T) (*VaultProvider, *testVaultServer) { +func testVaultProvider(t *testing.T) (*VaultProvider, *TestVaultServer) { return testVaultProviderWithConfig(t, true, nil) } -func testVaultProviderWithConfig(t *testing.T, isPrimary bool, rawConf map[string]interface{}) (*VaultProvider, *testVaultServer) { - testVault, err := runTestVault() +func testVaultProviderWithConfig(t *testing.T, isPrimary bool, rawConf map[string]interface{}) (*VaultProvider, *TestVaultServer) { + testVault, err := runTestVault(t) if err != nil { t.Fatalf("err: %v", err) } testVault.WaitUntilReady(t) + provider, err := createVaultProvider(t, isPrimary, testVault.Addr, testVault.RootToken, rawConf) + if err != nil { + testVault.Stop() + t.Fatalf("err: %v", err) + } + return provider, testVault +} + +func createVaultProvider(t *testing.T, isPrimary bool, addr, token string, rawConf map[string]interface{}) (*VaultProvider, error) { conf := map[string]interface{}{ - "Address": testVault.addr, - "Token": testVault.rootToken, + "Address": addr, + "Token": token, "RootPKIPath": "pki-root/", "IntermediatePKIPath": "pki-intermediate/", // Tests duration parsing after msgpack type mangling during raft apply. @@ -378,7 +411,7 @@ conf[k] = v } - provider := &VaultProvider{} + provider := NewVaultProvider() cfg := ProviderConfig{ ClusterID: connect.TestClusterID, @@ -387,156 +420,22 @@ RawConfig: conf, } + logger := hclog.New(&hclog.LoggerOptions{ + Output: ioutil.Discard, + }) + provider.SetLogger(logger) + if !isPrimary { cfg.IsPrimary = false cfg.Datacenter = "dc2" } - if err := provider.Configure(cfg); err != nil { - testVault.Stop() - t.Fatalf("err: %v", err) - } + require.NoError(t, provider.Configure(cfg)) if isPrimary { - if err = provider.GenerateRoot(); err != nil { - testVault.Stop() - t.Fatalf("err: %v", err) - } - if _, err := provider.GenerateIntermediate(); err != nil { - testVault.Stop() - t.Fatalf("err: %v", err) - } - } - return provider, testVault -} - -var printedVaultVersion sync.Once - -// skipIfVaultNotPresent skips the test and returns true if vault is not found -func skipIfVaultNotPresent(t *testing.T) bool { - vaultBinaryName := os.Getenv("VAULT_BINARY_NAME") - if vaultBinaryName == "" { - vaultBinaryName = "vault" - } - - path, err := exec.LookPath(vaultBinaryName) - if err != nil || path == "" { - t.Skipf("%q not found on $PATH - download and install to run this test", vaultBinaryName) - return true - } - return false -} - -func runTestVault() (*testVaultServer, error) { - vaultBinaryName := os.Getenv("VAULT_BINARY_NAME") - if vaultBinaryName == "" { - vaultBinaryName = "vault" - } - - path, err := exec.LookPath(vaultBinaryName) - if err != nil || path == "" { - return nil, fmt.Errorf("%q not found on $PATH", vaultBinaryName) - } - - ports := freeport.MustTake(2) - returnPortsFn := func() { - freeport.Return(ports) - } - - var ( - clientAddr = fmt.Sprintf("127.0.0.1:%d", ports[0]) - clusterAddr = fmt.Sprintf("127.0.0.1:%d", ports[1]) - ) - - const token = "root" - - client, err := vaultapi.NewClient(&vaultapi.Config{ - Address: "http://" + clientAddr, - }) - if err != nil { - returnPortsFn() - return nil, err - } - client.SetToken(token) - - args := []string{ - "server", - "-dev", - "-dev-root-token-id", - token, - "-dev-listen-address", - clientAddr, - "-address", - clusterAddr, - } - - cmd := exec.Command(vaultBinaryName, args...) - cmd.Stdout = ioutil.Discard - cmd.Stderr = ioutil.Discard - if err := cmd.Start(); err != nil { - returnPortsFn() - return nil, err - } - - return &testVaultServer{ - rootToken: token, - addr: "http://" + clientAddr, - cmd: cmd, - client: client, - returnPortsFn: returnPortsFn, - }, nil -} - -type testVaultServer struct { - rootToken string - addr string - cmd *exec.Cmd - client *vaultapi.Client - - // returnPortsFn will put the ports claimed for the test back into the - returnPortsFn func() -} - -func (v *testVaultServer) WaitUntilReady(t *testing.T) { - var version string - retry.Run(t, func(r *retry.R) { - resp, err := v.client.Sys().Health() - if err != nil { - r.Fatalf("err: %v", err) - } - if !resp.Initialized { - r.Fatalf("vault server is not initialized") - } - if resp.Sealed { - r.Fatalf("vault server is sealed") - } - version = resp.Version - }) - printedVaultVersion.Do(func() { - fmt.Fprintf(os.Stderr, "[INFO] agent/connect/ca: testing with vault server version: %s\n", version) - }) -} - -func (v *testVaultServer) Stop() error { - // There was no process - if v.cmd == nil { - return nil - } - - if v.cmd.Process != nil { - if err := v.cmd.Process.Signal(os.Interrupt); err != nil { - return fmt.Errorf("failed to kill vault server: %v", err) - } - } - - // wait for the process to exit to be sure that the data dir can be - // deleted on all platforms. - if err := v.cmd.Wait(); err != nil { - return err - } - - if v.returnPortsFn != nil { - v.returnPortsFn() + require.NoError(t, provider.GenerateRoot()) + _, err := provider.GenerateIntermediate() + require.NoError(t, err) } - return nil + return provider, nil } diff -Nru consul-1.7.4+dfsg1/agent/connect/ca/testing.go consul-1.8.7+dfsg1/agent/connect/ca/testing.go --- consul-1.7.4+dfsg1/agent/connect/ca/testing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/ca/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,9 +3,17 @@ import ( "fmt" "io/ioutil" + "os" + "os/exec" + "sync" "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/sdk/freeport" + "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/go-hclog" + vaultapi "github.com/hashicorp/vault/api" "github.com/mitchellh/go-testing-interface" ) @@ -76,3 +84,182 @@ provider.SetLogger(logger) return provider } + +// SkipIfVaultNotPresent skips the test if the vault binary is not in PATH. +// +// These tests may be skipped in CI. They are run as part of a separate +// integration test suite. +func SkipIfVaultNotPresent(t testing.T) { + vaultBinaryName := os.Getenv("VAULT_BINARY_NAME") + if vaultBinaryName == "" { + vaultBinaryName = "vault" + } + + path, err := exec.LookPath(vaultBinaryName) + if err != nil || path == "" { + t.Skipf("%q not found on $PATH - download and install to run this test", vaultBinaryName) + } +} + +func NewTestVaultServer(t testing.T) *TestVaultServer { + testVault, err := runTestVault(t) + if err != nil { + t.Fatalf("err: %v", err) + } + + testVault.WaitUntilReady(t) + + return testVault +} + +func runTestVault(t testing.T) (*TestVaultServer, error) { + vaultBinaryName := os.Getenv("VAULT_BINARY_NAME") + if vaultBinaryName == "" { + vaultBinaryName = "vault" + } + + path, err := exec.LookPath(vaultBinaryName) + if err != nil || path == "" { + return nil, fmt.Errorf("%q not found on $PATH", vaultBinaryName) + } + + ports := freeport.MustTake(2) + returnPortsFn := func() { + freeport.Return(ports) + } + + var ( + clientAddr = fmt.Sprintf("127.0.0.1:%d", ports[0]) + clusterAddr = fmt.Sprintf("127.0.0.1:%d", ports[1]) + ) + + const token = "root" + + client, err := vaultapi.NewClient(&vaultapi.Config{ + Address: "http://" + clientAddr, + }) + if err != nil { + returnPortsFn() + return nil, err + } + client.SetToken(token) + + args := []string{ + "server", + "-dev", + "-dev-root-token-id", + token, + "-dev-listen-address", + clientAddr, + "-address", + clusterAddr, + } + + cmd := exec.Command(vaultBinaryName, args...) + cmd.Stdout = ioutil.Discard + cmd.Stderr = ioutil.Discard + if err := cmd.Start(); err != nil { + returnPortsFn() + return nil, err + } + + testVault := &TestVaultServer{ + RootToken: token, + Addr: "http://" + clientAddr, + cmd: cmd, + client: client, + returnPortsFn: returnPortsFn, + } + t.Cleanup(func() { + testVault.Stop() + }) + return testVault, nil +} + +type TestVaultServer struct { + RootToken string + Addr string + cmd *exec.Cmd + client *vaultapi.Client + + // returnPortsFn will put the ports claimed for the test back into the + returnPortsFn func() +} + +var printedVaultVersion sync.Once + +func (v *TestVaultServer) Client() *vaultapi.Client { + return v.client +} + +func (v *TestVaultServer) WaitUntilReady(t testing.T) { + var version string + retry.Run(t, func(r *retry.R) { + resp, err := v.client.Sys().Health() + if err != nil { + r.Fatalf("err: %v", err) + } + if !resp.Initialized { + r.Fatalf("vault server is not initialized") + } + if resp.Sealed { + r.Fatalf("vault server is sealed") + } + version = resp.Version + }) + printedVaultVersion.Do(func() { + fmt.Fprintf(os.Stderr, "[INFO] agent/connect/ca: testing with vault server version: %s\n", version) + }) +} + +func (v *TestVaultServer) Stop() error { + // There was no process + if v.cmd == nil { + return nil + } + + if v.cmd.Process != nil { + if err := v.cmd.Process.Signal(os.Interrupt); err != nil { + return fmt.Errorf("failed to kill vault server: %v", err) + } + } + + // wait for the process to exit to be sure that the data dir can be + // deleted on all platforms. + if err := v.cmd.Wait(); err != nil { + return err + } + + if v.returnPortsFn != nil { + v.returnPortsFn() + } + + return nil +} + +func ApplyCARequestToStore(store *state.Store, req *structs.CARequest) (interface{}, error) { + idx, _, err := store.CAConfig(nil) + if err != nil { + return nil, err + } + + switch req.Op { + case structs.CAOpSetProviderState: + _, err := store.CASetProviderState(idx+1, req.ProviderState) + if err != nil { + return nil, err + } + + return true, nil + case structs.CAOpDeleteProviderState: + if err := store.CADeleteProviderState(req.ProviderState.ID); err != nil { + return nil, err + } + + return true, nil + case structs.CAOpIncrementProviderSerialNumber: + return uint64(2), nil + default: + return nil, fmt.Errorf("Invalid CA operation '%s'", req.Op) + } +} diff -Nru consul-1.7.4+dfsg1/agent/connect/generate_test.go consul-1.8.7+dfsg1/agent/connect/generate_test.go --- consul-1.7.4+dfsg1/agent/connect/generate_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/generate_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,34 +17,31 @@ keyBits int } -var goodParams, badParams []KeyConfig - -func init() { - goodParams = []KeyConfig{ - {keyType: "rsa", keyBits: 2048}, - {keyType: "rsa", keyBits: 4096}, - {keyType: "ec", keyBits: 224}, - {keyType: "ec", keyBits: 256}, - {keyType: "ec", keyBits: 384}, - {keyType: "ec", keyBits: 521}, - } - badParams = []KeyConfig{ - {keyType: "rsa", keyBits: 0}, - {keyType: "rsa", keyBits: 1024}, - {keyType: "rsa", keyBits: 24601}, - {keyType: "ec", keyBits: 0}, - {keyType: "ec", keyBits: 512}, - {keyType: "ec", keyBits: 321}, - {keyType: "ecdsa", keyBits: 256}, // test for "ecdsa" instead of "ec" - {keyType: "aes", keyBits: 128}, - } +var goodParams = []KeyConfig{ + {keyType: "rsa", keyBits: 2048}, + {keyType: "rsa", keyBits: 4096}, + {keyType: "ec", keyBits: 224}, + {keyType: "ec", keyBits: 256}, + {keyType: "ec", keyBits: 384}, + {keyType: "ec", keyBits: 521}, +} +var badParams = []KeyConfig{ + {keyType: "rsa", keyBits: 0}, + {keyType: "rsa", keyBits: 1024}, + {keyType: "rsa", keyBits: 24601}, + {keyType: "ec", keyBits: 0}, + {keyType: "ec", keyBits: 512}, + {keyType: "ec", keyBits: 321}, + {keyType: "ecdsa", keyBits: 256}, // test for "ecdsa" instead of "ec" + {keyType: "aes", keyBits: 128}, } func makeConfig(kc KeyConfig) structs.CommonCAProviderConfig { return structs.CommonCAProviderConfig{ - LeafCertTTL: 3 * 24 * time.Hour, - PrivateKeyType: kc.keyType, - PrivateKeyBits: kc.keyBits, + LeafCertTTL: 3 * 24 * time.Hour, + IntermediateCertTTL: 365 * 24 * time.Hour, + PrivateKeyType: kc.keyType, + PrivateKeyBits: kc.keyBits, } } diff -Nru consul-1.7.4+dfsg1/agent/connect/testing_ca.go consul-1.8.7+dfsg1/agent/connect/testing_ca.go --- consul-1.7.4+dfsg1/agent/connect/testing_ca.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/testing_ca.go 2020-12-10 21:46:52.000000000 +0000 @@ -56,7 +56,7 @@ return err } -func testCA(t testing.T, xc *structs.CARoot, keyType string, keyBits int) *structs.CARoot { +func testCA(t testing.T, xc *structs.CARoot, keyType string, keyBits int, ttl time.Duration) *structs.CARoot { var result structs.CARoot result.Active = true result.Name = fmt.Sprintf("Test CA %d", atomic.AddUint64(&testCACounter, 1)) @@ -76,6 +76,14 @@ id := &SpiffeIDSigning{ClusterID: TestClusterID, Domain: "consul"} // Create the CA cert + now := time.Now() + before := now + after := now + if ttl != 0 { + after = after.Add(ttl) + } else { + after = after.AddDate(10, 0, 0) + } template := x509.Certificate{ SerialNumber: sn, Subject: pkix.Name{CommonName: result.Name}, @@ -85,8 +93,8 @@ x509.KeyUsageCRLSign | x509.KeyUsageDigitalSignature, IsCA: true, - NotAfter: time.Now().AddDate(10, 0, 0), - NotBefore: time.Now(), + NotAfter: after, + NotBefore: before, AuthorityKeyId: testKeyID(t, signer.Public()), SubjectKeyId: testKeyID(t, signer.Public()), } @@ -159,16 +167,36 @@ // that is cross-signed with the previous cert, and this will be set as // SigningCert. func TestCA(t testing.T, xc *structs.CARoot) *structs.CARoot { - return testCA(t, xc, DefaultPrivateKeyType, DefaultPrivateKeyBits) + return testCA(t, xc, DefaultPrivateKeyType, DefaultPrivateKeyBits, 0) +} + +// TestCAWithTTL is similar to TestCA, except that it +// takes a custom duration for the lifetime of the certificate. +func TestCAWithTTL(t testing.T, xc *structs.CARoot, ttl time.Duration) *structs.CARoot { + return testCA(t, xc, DefaultPrivateKeyType, DefaultPrivateKeyBits, ttl) } // TestCAWithKeyType is similar to TestCA, except that it // takes two additional arguments to override the default private key type and size. func TestCAWithKeyType(t testing.T, xc *structs.CARoot, keyType string, keyBits int) *structs.CARoot { - return testCA(t, xc, keyType, keyBits) + return testCA(t, xc, keyType, keyBits, 0) } -func testLeaf(t testing.T, service string, namespace string, root *structs.CARoot, keyType string, keyBits int) (string, string, error) { +// testCertID is an interface to be implemented the various spiffe ID / CertURI types +// It adds an addition CommonName method to the CertURI interface to prevent the need +// for any type switching on the actual CertURI's concrete type in order to figure +// out its common name +type testCertID interface { + CommonName() string + CertURI +} + +func testLeafWithID(t testing.T, spiffeId testCertID, root *structs.CARoot, keyType string, keyBits int, expiration time.Duration) (string, string, error) { + + if expiration == 0 { + // this is 10 years + expiration = 10 * 365 * 24 * time.Hour + } // Parse the CA cert and signing key from the root cert := root.SigningCert if cert == "" { @@ -183,14 +211,6 @@ return "", "", fmt.Errorf("error parsing signing key: %s", err) } - // Build the SPIFFE ID - spiffeId := &SpiffeIDService{ - Host: fmt.Sprintf("%s.consul", TestClusterID), - Namespace: namespace, - Datacenter: "dc1", - Service: service, - } - // The serial number for the cert sn, err := testSerialNumber() if err != nil { @@ -211,7 +231,7 @@ // Cert template for generation template := x509.Certificate{ SerialNumber: sn, - Subject: pkix.Name{CommonName: ServiceCN(service, "default", TestClusterID)}, + Subject: pkix.Name{CommonName: spiffeId.CommonName()}, URIs: []*url.URL{spiffeId.URI()}, SignatureAlgorithm: SigAlgoForKeyType(rootKeyType), BasicConstraintsValid: true, @@ -223,7 +243,7 @@ x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth, }, - NotAfter: time.Now().AddDate(10, 0, 0), + NotAfter: time.Now().Add(expiration), NotBefore: time.Now(), AuthorityKeyId: testKeyID(t, caSigner.Public()), SubjectKeyId: testKeyID(t, pkSigner.Public()), @@ -244,6 +264,29 @@ return buf.String(), pkPEM, nil } +func TestAgentLeaf(t testing.T, node string, datacenter string, root *structs.CARoot, expiration time.Duration) (string, string, error) { + // Build the SPIFFE ID + spiffeId := &SpiffeIDAgent{ + Host: fmt.Sprintf("%s.consul", TestClusterID), + Datacenter: datacenter, + Agent: node, + } + + return testLeafWithID(t, spiffeId, root, DefaultPrivateKeyType, DefaultPrivateKeyBits, expiration) +} + +func testLeaf(t testing.T, service string, namespace string, root *structs.CARoot, keyType string, keyBits int) (string, string, error) { + // Build the SPIFFE ID + spiffeId := &SpiffeIDService{ + Host: fmt.Sprintf("%s.consul", TestClusterID), + Namespace: namespace, + Datacenter: "dc1", + Service: service, + } + + return testLeafWithID(t, spiffeId, root, keyType, keyBits, 0) +} + // TestLeaf returns a valid leaf certificate and it's private key for the named // service with the given CA Root. func TestLeaf(t testing.T, service string, root *structs.CARoot) (string, string) { diff -Nru consul-1.7.4+dfsg1/agent/connect/testing_ca_test.go consul-1.8.7+dfsg1/agent/connect/testing_ca_test.go --- consul-1.7.4+dfsg1/agent/connect/testing_ca_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/testing_ca_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,29 +12,22 @@ "github.com/stretchr/testify/require" ) -// hasOpenSSL is used to determine if the openssl CLI exists for unit tests. -var hasOpenSSL bool +var mustAlwaysRun = os.Getenv("CI") == "true" -func init() { - goodParams = []KeyConfig{ - {keyType: "rsa", keyBits: 2048}, - {keyType: "rsa", keyBits: 4096}, - {keyType: "ec", keyBits: 224}, - {keyType: "ec", keyBits: 256}, - {keyType: "ec", keyBits: 384}, - {keyType: "ec", keyBits: 521}, +func skipIfMissingOpenSSL(t *testing.T) { + openSSLBinaryName := "openssl" + _, err := exec.LookPath(openSSLBinaryName) + if err != nil { + if mustAlwaysRun { + t.Fatalf("%q not found on $PATH", openSSLBinaryName) + } + t.Skipf("%q not found on $PATH", openSSLBinaryName) } - - _, err := exec.LookPath("openssl") - hasOpenSSL = err == nil } // Test that the TestCA and TestLeaf functions generate valid certificates. func testCAAndLeaf(t *testing.T, keyType string, keyBits int) { - if !hasOpenSSL { - t.Skip("openssl not found") - return - } + skipIfMissingOpenSSL(t) require := require.New(t) @@ -66,10 +59,7 @@ // Test cross-signing. func testCAAndLeaf_xc(t *testing.T, keyType string, keyBits int) { - if !hasOpenSSL { - t.Skip("openssl not found") - return - } + skipIfMissingOpenSSL(t) assert := assert.New(t) diff -Nru consul-1.7.4+dfsg1/agent/connect/testing_spiffe.go consul-1.8.7+dfsg1/agent/connect/testing_spiffe.go --- consul-1.7.4+dfsg1/agent/connect/testing_spiffe.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/testing_spiffe.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,10 +12,16 @@ // TestSpiffeIDServiceWithHost returns a SPIFFE ID representing a service with // the specified trust domain. func TestSpiffeIDServiceWithHost(t testing.T, service, host string) *SpiffeIDService { + return TestSpiffeIDServiceWithHostDC(t, service, host, "dc1") +} + +// TestSpiffeIDServiceWithHostDC returns a SPIFFE ID representing a service with +// the specified trust domain for the given datacenter. +func TestSpiffeIDServiceWithHostDC(t testing.T, service, host, datacenter string) *SpiffeIDService { return &SpiffeIDService{ Host: host, Namespace: "default", - Datacenter: "dc1", + Datacenter: datacenter, Service: service, } } diff -Nru consul-1.7.4+dfsg1/agent/connect/uri_agent.go consul-1.8.7+dfsg1/agent/connect/uri_agent.go --- consul-1.7.4+dfsg1/agent/connect/uri_agent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/uri_agent.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,3 +27,7 @@ func (id *SpiffeIDAgent) Authorize(_ *structs.Intention) (bool, bool) { return false, false } + +func (id *SpiffeIDAgent) CommonName() string { + return AgentCN(id.Agent, id.Host) +} diff -Nru consul-1.7.4+dfsg1/agent/connect/uri_service.go consul-1.8.7+dfsg1/agent/connect/uri_service.go --- consul-1.7.4+dfsg1/agent/connect/uri_service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/uri_service.go 2020-12-10 21:46:52.000000000 +0000 @@ -40,3 +40,7 @@ // Match, return allow value return ixn.Action == structs.IntentionActionAllow, true } + +func (id *SpiffeIDService) CommonName() string { + return ServiceCN(id.Service, id.Namespace, id.Host) +} diff -Nru consul-1.7.4+dfsg1/agent/connect/uri_signing.go consul-1.8.7+dfsg1/agent/connect/uri_signing.go --- consul-1.7.4+dfsg1/agent/connect/uri_signing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect/uri_signing.go 2020-12-10 21:46:52.000000000 +0000 @@ -41,7 +41,7 @@ // I choose to make this a fixed centralized method here for now rather than a // method on CertURI interface since we don't intend this to be extensible // outside and it's easier to reason about the security properties when they are -// all in one place with "whitelist" semantics. +// all in one place with "allowlist" semantics. func (id *SpiffeIDSigning) CanSign(cu CertURI) bool { switch other := cu.(type) { case *SpiffeIDSigning: diff -Nru consul-1.7.4+dfsg1/agent/connect_auth.go consul-1.8.7+dfsg1/agent/connect_auth.go --- consul-1.7.4+dfsg1/agent/connect_auth.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect_auth.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package agent import ( + "context" "fmt" "github.com/hashicorp/consul/acl" @@ -83,7 +84,7 @@ QueryOptions: structs.QueryOptions{Token: token}, } - raw, meta, err := a.cache.Get(cachetype.IntentionMatchName, args) + raw, meta, err := a.cache.Get(context.TODO(), cachetype.IntentionMatchName, args) if err != nil { return returnErr(err) } diff -Nru consul-1.7.4+dfsg1/agent/connect_ca_endpoint.go consul-1.8.7+dfsg1/agent/connect_ca_endpoint.go --- consul-1.7.4+dfsg1/agent/connect_ca_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect_ca_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,7 @@ import ( "fmt" "net/http" + "strconv" "github.com/hashicorp/consul/agent/consul" "github.com/hashicorp/consul/agent/structs" @@ -15,13 +16,39 @@ return nil, nil } + pemResponse := false + if pemParam := req.URL.Query().Get("pem"); pemParam != "" { + val, err := strconv.ParseBool(pemParam) + if err != nil { + return nil, BadRequestError{Reason: "The 'pem' query parameter must be a boolean value"} + } + pemResponse = val + } + var reply structs.IndexedCARoots defer setMeta(resp, &reply.QueryMeta) if err := s.agent.RPC("ConnectCA.Roots", &args, &reply); err != nil { return nil, err } - return reply, nil + if !pemResponse { + return reply, nil + } + + // defined in RFC 8555 and registered with the IANA + resp.Header().Set("Content-Type", "application/pem-certificate-chain") + for _, root := range reply.Roots { + if _, err := resp.Write([]byte(root.RootCert)); err != nil { + return nil, err + } + for _, intermediate := range root.IntermediateCerts { + if _, err := resp.Write([]byte(intermediate)); err != nil { + return nil, err + } + } + } + + return nil, nil } // /v1/connect/ca/configuration diff -Nru consul-1.7.4+dfsg1/agent/connect_ca_endpoint_test.go consul-1.8.7+dfsg1/agent/connect_ca_endpoint_test.go --- consul-1.7.4+dfsg1/agent/connect_ca_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/connect_ca_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,8 @@ import ( "bytes" + "crypto/x509" + "io/ioutil" "net/http" "net/http/httptest" "testing" @@ -19,7 +21,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "connect { enabled = false }") + a := NewTestAgent(t, "connect { enabled = false }") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -34,7 +36,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -226,7 +228,7 @@ } }` } - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -258,3 +260,34 @@ }) } } + +func TestConnectCARoots_PEMEncoding(t *testing.T) { + primary := NewTestAgent(t, "") + defer primary.Shutdown() + testrpc.WaitForActiveCARoot(t, primary.RPC, "dc1", nil) + + secondary := NewTestAgent(t, ` + primary_datacenter = "dc1" + datacenter = "dc2" + retry_join_wan = ["`+primary.Config.SerfBindAddrWAN.String()+`"] + `) + defer secondary.Shutdown() + testrpc.WaitForActiveCARoot(t, secondary.RPC, "dc2", nil) + + req, _ := http.NewRequest("GET", "/v1/connect/ca/roots?pem=true", nil) + recorder := httptest.NewRecorder() + obj, err := secondary.srv.ConnectCARoots(recorder, req) + require.NoError(t, err) + require.Nil(t, obj, "Endpoint returned an object for serialization when it should have returned nil and written to the responses") + resp := recorder.Result() + require.Equal(t, resp.Header.Get("Content-Type"), "application/pem-certificate-chain") + + data, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + pool := x509.NewCertPool() + + require.True(t, pool.AppendCertsFromPEM(data)) + // expecting the root cert from dc1 and an intermediate in dc2 + require.Len(t, pool.Subjects(), 2) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_authmethod.go consul-1.8.7+dfsg1/agent/consul/acl_authmethod.go --- consul-1.7.4+dfsg1/agent/consul/acl_authmethod.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_authmethod.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,8 +7,9 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/go-bexpr" - // register this as a builtin auth method + // register these as a builtin auth method _ "github.com/hashicorp/consul/agent/consul/authmethod/kubeauth" + _ "github.com/hashicorp/consul/agent/consul/authmethod/ssoauth" ) type authMethodValidatorEntry struct { @@ -25,7 +26,7 @@ return v, nil } - v, err := authmethod.NewValidator(method) + v, err := authmethod.NewValidator(s.logger, method) if err != nil { return nil, fmt.Errorf("auth method validator for %q could not be initialized: %v", method.Name, err) } @@ -35,6 +36,12 @@ return v, nil } +type aclBindings struct { + roles []structs.ACLTokenRoleLink + serviceIdentities []*structs.ACLServiceIdentity + nodeIdentities []*structs.ACLNodeIdentity +} + // evaluateRoleBindings evaluates all current binding rules associated with the // given auth method against the verified data returned from the authentication // process. @@ -42,59 +49,59 @@ // A list of role links and service identities are returned. func (s *Server) evaluateRoleBindings( validator authmethod.Validator, - verifiedFields map[string]string, + verifiedIdentity *authmethod.Identity, methodMeta *structs.EnterpriseMeta, targetMeta *structs.EnterpriseMeta, -) ([]*structs.ACLServiceIdentity, []structs.ACLTokenRoleLink, error) { +) (*aclBindings, error) { // Only fetch rules that are relevant for this method. _, rules, err := s.fsm.State().ACLBindingRuleList(nil, validator.Name(), methodMeta) if err != nil { - return nil, nil, err + return nil, err } else if len(rules) == 0 { - return nil, nil, nil + return nil, nil } - // Convert the fields into something suitable for go-bexpr. - selectableVars := validator.MakeFieldMapSelectable(verifiedFields) - // Find all binding rules that match the provided fields. var matchingRules []*structs.ACLBindingRule for _, rule := range rules { - if doesBindingRuleMatch(rule, selectableVars) { + if doesSelectorMatch(rule.Selector, verifiedIdentity.SelectableFields) { matchingRules = append(matchingRules, rule) } } if len(matchingRules) == 0 { - return nil, nil, nil + return nil, nil } // For all matching rules compute the attributes of a token. - var ( - roleLinks []structs.ACLTokenRoleLink - serviceIdentities []*structs.ACLServiceIdentity - ) + var bindings aclBindings for _, rule := range matchingRules { - bindName, valid, err := computeBindingRuleBindName(rule.BindType, rule.BindName, verifiedFields) + bindName, valid, err := computeBindingRuleBindName(rule.BindType, rule.BindName, verifiedIdentity.ProjectedVars) if err != nil { - return nil, nil, fmt.Errorf("cannot compute %q bind name for bind target: %v", rule.BindType, err) + return nil, fmt.Errorf("cannot compute %q bind name for bind target: %v", rule.BindType, err) } else if !valid { - return nil, nil, fmt.Errorf("computed %q bind name for bind target is invalid: %q", rule.BindType, bindName) + return nil, fmt.Errorf("computed %q bind name for bind target is invalid: %q", rule.BindType, bindName) } switch rule.BindType { case structs.BindingRuleBindTypeService: - serviceIdentities = append(serviceIdentities, &structs.ACLServiceIdentity{ + bindings.serviceIdentities = append(bindings.serviceIdentities, &structs.ACLServiceIdentity{ ServiceName: bindName, }) + case structs.BindingRuleBindTypeNode: + bindings.nodeIdentities = append(bindings.nodeIdentities, &structs.ACLNodeIdentity{ + NodeName: bindName, + Datacenter: s.config.Datacenter, + }) + case structs.BindingRuleBindTypeRole: _, role, err := s.fsm.State().ACLRoleGetByName(nil, bindName, targetMeta) if err != nil { - return nil, nil, err + return nil, err } if role != nil { - roleLinks = append(roleLinks, structs.ACLTokenRoleLink{ + bindings.roles = append(bindings.roles, structs.ACLTokenRoleLink{ ID: role.ID, }) } @@ -104,17 +111,16 @@ } } - return serviceIdentities, roleLinks, nil + return &bindings, nil } -// doesBindingRuleMatch checks that a single binding rule matches the provided -// vars. -func doesBindingRuleMatch(rule *structs.ACLBindingRule, selectableVars interface{}) bool { - if rule.Selector == "" { +// doesSelectorMatch checks that a single selector matches the provided vars. +func doesSelectorMatch(selector string, selectableVars interface{}) bool { + if selector == "" { return true // catch-all } - eval, err := bexpr.CreateEvaluatorForType(rule.Selector, nil, selectableVars) + eval, err := bexpr.CreateEvaluatorForType(selector, nil, selectableVars) if err != nil { return false // fails to match if selector is invalid } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_authmethod_oss.go consul-1.8.7+dfsg1/agent/consul/acl_authmethod_oss.go --- consul-1.7.4+dfsg1/agent/consul/acl_authmethod_oss.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_authmethod_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +//+build !consulent + +package consul + +func (s *Server) enterpriseEvaluateRoleBindings() error { + return nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_authmethod_test.go consul-1.8.7+dfsg1/agent/consul/acl_authmethod_test.go --- consul-1.7.4+dfsg1/agent/consul/acl_authmethod_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_authmethod_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,11 +3,10 @@ import ( "testing" - "github.com/hashicorp/consul/agent/structs" "github.com/stretchr/testify/require" ) -func TestDoesBindingRuleMatch(t *testing.T) { +func TestDoesSelectorMatch(t *testing.T) { type matchable struct { A string `bexpr:"a"` C string `bexpr:"c"` @@ -40,8 +39,7 @@ "", &matchable{A: "b"}, true}, } { t.Run(test.name, func(t *testing.T) { - rule := structs.ACLBindingRule{Selector: test.selector} - ok := doesBindingRuleMatch(&rule, test.details) + ok := doesSelectorMatch(test.selector, test.details) require.Equal(t, test.ok, ok) }) } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_client.go consul-1.8.7+dfsg1/agent/consul/acl_client.go --- consul-1.7.4+dfsg1/agent/consul/acl_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -94,6 +94,13 @@ return c.acls.ResolveToken(token) } +func (c *Client) ResolveTokenToIdentity(token string) (structs.ACLIdentity, error) { + // not using ResolveTokenToIdentityAndAuthorizer because in this case we don't + // need to resolve the roles, policies and namespace but just want the identity + // information such as accessor id. + return c.acls.ResolveTokenToIdentity(token) +} + func (c *Client) ResolveTokenToIdentityAndAuthorizer(token string) (structs.ACLIdentity, acl.Authorizer, error) { return c.acls.ResolveTokenToIdentityAndAuthorizer(token) } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_endpoint.go consul-1.8.7+dfsg1/agent/consul/acl_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/acl_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package consul import ( + "context" "encoding/json" "errors" "fmt" @@ -16,6 +17,7 @@ "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/template" "github.com/hashicorp/go-bexpr" "github.com/hashicorp/go-hclog" memdb "github.com/hashicorp/go-memdb" @@ -33,6 +35,8 @@ validPolicyName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) validServiceIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) serviceIdentityNameMaxLength = 256 + validNodeIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) + nodeIdentityNameMaxLength = 256 validRoleName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,256}$`) validAuthMethod = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) ) @@ -111,7 +115,7 @@ if err := a.aclPreCheck(); err != nil { return err } - if done, err := a.srv.forward("ACL.BootstrapTokens", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.BootstrapTokens", args, args, reply); done { return err } @@ -210,7 +214,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.TokenRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.TokenRead", args, args, reply); done { return err } @@ -279,7 +283,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.TokenClone", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.TokenClone", args, args, reply); done { return err } @@ -318,6 +322,7 @@ Policies: token.Policies, Roles: token.Roles, ServiceIdentities: token.ServiceIdentities, + NodeIdentities: token.NodeIdentities, Local: token.Local, Description: token.Description, ExpirationTime: token.ExpirationTime, @@ -349,7 +354,7 @@ return fmt.Errorf("Local tokens are disabled") } - if done, err := a.srv.forward("ACL.TokenSet", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.TokenSet", args, args, reply); done { return err } @@ -442,9 +447,6 @@ if token.AuthMethod == "" { return fmt.Errorf("AuthMethod field is required during Login") } - if !token.Local { - return fmt.Errorf("Cannot create Global token via Login") - } } else { if token.AuthMethod != "" { return fmt.Errorf("AuthMethod field is disallowed outside of Login") @@ -617,6 +619,19 @@ } token.ServiceIdentities = dedupeServiceIdentities(token.ServiceIdentities) + for _, nodeid := range token.NodeIdentities { + if nodeid.NodeName == "" { + return fmt.Errorf("Node identity is missing the node name field on this token") + } + if nodeid.Datacenter == "" { + return fmt.Errorf("Node identity is missing the datacenter field on this token") + } + if !isValidNodeIdentityName(nodeid.NodeName) { + return fmt.Errorf("Node identity has an invalid name. Only alphanumeric characters, '-' and '_' are allowed") + } + } + token.NodeIdentities = dedupeNodeIdentities(token.NodeIdentities) + if token.Rules != "" { return fmt.Errorf("Rules cannot be specified for this token") } @@ -686,13 +701,13 @@ } // computeBindingRuleBindName processes the HIL for the provided bind type+name -// using the verified fields. +// using the projected variables. // // - If the HIL is invalid ("", false, AN_ERROR) is returned. // - If the computed name is not valid for the type ("INVALID_NAME", false, nil) is returned. // - If the computed name is valid for the type ("VALID_NAME", true, nil) is returned. -func computeBindingRuleBindName(bindType, bindName string, verifiedFields map[string]string) (string, bool, error) { - bindName, err := InterpolateHIL(bindName, verifiedFields) +func computeBindingRuleBindName(bindType, bindName string, projectedVars map[string]string) (string, bool, error) { + bindName, err := template.InterpolateHIL(bindName, projectedVars, true) if err != nil { return "", false, err } @@ -702,7 +717,8 @@ switch bindType { case structs.BindingRuleBindTypeService: valid = isValidServiceIdentityName(bindName) - + case structs.BindingRuleBindTypeNode: + valid = isValidNodeIdentityName(bindName) case structs.BindingRuleBindTypeRole: valid = validRoleName.MatchString(bindName) @@ -724,6 +740,17 @@ return validServiceIdentityName.MatchString(name) } +// isValidNodeIdentityName returns true if the provided name can be used as +// an ACLNodeIdentity NodeName. This is more restrictive than standard +// catalog registration, which basically takes the view that "everything is +// valid". +func isValidNodeIdentityName(name string) bool { + if len(name) < 1 || len(name) > nodeIdentityNameMaxLength { + return false + } + return validNodeIdentityName.MatchString(name) +} + func (a *ACL) TokenDelete(args *structs.ACLTokenDeleteRequest, reply *string) error { if err := a.aclPreCheck(); err != nil { return err @@ -737,7 +764,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.TokenDelete", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.TokenDelete", args, args, reply); done { return err } @@ -827,7 +854,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.TokenList", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.TokenList", args, args, reply); done { return err } @@ -890,7 +917,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.TokenBatchRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.TokenBatchRead", args, args, reply); done { return err } @@ -944,7 +971,7 @@ return err } - if done, err := a.srv.forward("ACL.PolicyRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.PolicyRead", args, args, reply); done { return err } @@ -982,7 +1009,7 @@ return err } - if done, err := a.srv.forward("ACL.PolicyBatchRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.PolicyBatchRead", args, args, reply); done { return err } @@ -1020,7 +1047,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.PolicySet", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.PolicySet", args, args, reply); done { return err } @@ -1155,7 +1182,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.PolicyDelete", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.PolicyDelete", args, args, reply); done { return err } @@ -1198,9 +1225,7 @@ return respErr } - if policy != nil { - *reply = policy.Name - } + *reply = policy.Name return nil } @@ -1214,7 +1239,7 @@ return err } - if done, err := a.srv.forward("ACL.PolicyList", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.PolicyList", args, args, reply); done { return err } @@ -1254,7 +1279,7 @@ return err } - if done, err := a.srv.forward("ACL.PolicyResolve", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.PolicyResolve", args, args, reply); done { return err } @@ -1312,7 +1337,7 @@ // GetPolicy is used to retrieve a compiled policy object with a TTL. Does not // support a blocking query. func (a *ACL) GetPolicy(args *structs.ACLPolicyResolveLegacyRequest, reply *structs.ACLPolicyResolveLegacyResponse) error { - if done, err := a.srv.forward("ACL.GetPolicy", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.GetPolicy", args, args, reply); done { return err } @@ -1359,7 +1384,7 @@ // re-using a structure where we don't support all the options. args.RequireConsistent = true args.AllowStale = false - if done, err := a.srv.forward("ACL.ReplicationStatus", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.ReplicationStatus", args, args, reply); done { return err } @@ -1387,7 +1412,7 @@ return err } - if done, err := a.srv.forward("ACL.RoleRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.RoleRead", args, args, reply); done { return err } @@ -1426,7 +1451,7 @@ return err } - if done, err := a.srv.forward("ACL.RoleBatchRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.RoleBatchRead", args, args, reply); done { return err } @@ -1464,7 +1489,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.RoleSet", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.RoleSet", args, args, reply); done { return err } @@ -1574,6 +1599,19 @@ } role.ServiceIdentities = dedupeServiceIdentities(role.ServiceIdentities) + for _, nodeid := range role.NodeIdentities { + if nodeid.NodeName == "" { + return fmt.Errorf("Node identity is missing the node name field on this role") + } + if nodeid.Datacenter == "" { + return fmt.Errorf("Node identity is missing the datacenter field on this role") + } + if !isValidNodeIdentityName(nodeid.NodeName) { + return fmt.Errorf("Node identity has an invalid name. Only alphanumeric characters, '-' and '_' are allowed") + } + } + role.NodeIdentities = dedupeNodeIdentities(role.NodeIdentities) + // calculate the hash for this role role.SetHash(true) @@ -1613,7 +1651,7 @@ args.Datacenter = a.srv.config.ACLDatacenter } - if done, err := a.srv.forward("ACL.RoleDelete", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.RoleDelete", args, args, reply); done { return err } @@ -1652,9 +1690,7 @@ return respErr } - if role != nil { - *reply = role.Name - } + *reply = role.Name return nil } @@ -1668,7 +1704,7 @@ return err } - if done, err := a.srv.forward("ACL.RoleList", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.RoleList", args, args, reply); done { return err } @@ -1702,7 +1738,7 @@ return err } - if done, err := a.srv.forward("ACL.RoleResolve", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.RoleResolve", args, args, reply); done { return err } @@ -1767,7 +1803,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.BindingRuleRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.BindingRuleRead", args, args, reply); done { return err } @@ -1806,7 +1842,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.BindingRuleSet", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.BindingRuleSet", args, args, reply); done { return err } @@ -1875,10 +1911,11 @@ return err } + // Create a blank placeholder identity for use in validation below. + blankID := validator.NewIdentity() + if rule.Selector != "" { - selectableVars := validator.MakeFieldMapSelectable(map[string]string{}) - _, err := bexpr.CreateEvaluatorForType(rule.Selector, nil, selectableVars) - if err != nil { + if _, err := bexpr.CreateEvaluatorForType(rule.Selector, nil, blankID.SelectableFields); err != nil { return fmt.Errorf("invalid Binding Rule: Selector is invalid: %v", err) } } @@ -1893,12 +1930,13 @@ switch rule.BindType { case structs.BindingRuleBindTypeService: + case structs.BindingRuleBindTypeNode: case structs.BindingRuleBindTypeRole: default: return fmt.Errorf("Invalid Binding Rule: unknown BindType %q", rule.BindType) } - if valid, err := validateBindingRuleBindName(rule.BindType, rule.BindName, validator.AvailableFields()); err != nil { + if valid, err := validateBindingRuleBindName(rule.BindType, rule.BindName, blankID.ProjectedVarNames()); err != nil { return fmt.Errorf("Invalid Binding Rule: invalid BindName: %v", err) } else if !valid { return fmt.Errorf("Invalid Binding Rule: invalid BindName") @@ -1912,9 +1950,8 @@ if err != nil { return fmt.Errorf("Failed to apply binding rule upsert request: %v", err) } - if respErr, ok := resp.(error); ok { - return respErr + return fmt.Errorf("Failed to apply binding rule upsert request: %v", respErr) } if _, rule, err := a.srv.fsm.State().ACLBindingRuleGetByID(nil, rule.ID, &rule.EnterpriseMeta); err == nil && rule != nil { @@ -1937,7 +1974,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.BindingRuleDelete", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.BindingRuleDelete", args, args, reply); done { return err } @@ -1992,7 +2029,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.BindingRuleList", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.BindingRuleList", args, args, reply); done { return err } @@ -2032,7 +2069,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.AuthMethodRead", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.AuthMethodRead", args, args, reply); done { return err } @@ -2052,6 +2089,10 @@ return err } + if method != nil { + _ = a.enterpriseAuthMethodTypeValidation(method.Type) + } + reply.Index, reply.AuthMethod = index, method return nil }) @@ -2070,7 +2111,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.AuthMethodSet", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.AuthMethodSet", args, args, reply); done { return err } @@ -2096,6 +2137,10 @@ return fmt.Errorf("Invalid Auth Method: invalid Name. Only alphanumeric characters, '-' and '_' are allowed") } + if err := a.enterpriseAuthMethodTypeValidation(method.Type); err != nil { + return err + } + // Check to see if the method exists first. _, existing, err := state.ACLAuthMethodGetByName(nil, method.Name, &method.EnterpriseMeta) if err != nil { @@ -2114,12 +2159,37 @@ return fmt.Errorf("Invalid Auth Method: Type should be one of: %v", authmethod.Types()) } + if method.MaxTokenTTL != 0 { + if method.MaxTokenTTL > a.srv.config.ACLTokenMaxExpirationTTL { + return fmt.Errorf("MaxTokenTTL %s cannot be more than %s", + method.MaxTokenTTL, a.srv.config.ACLTokenMaxExpirationTTL) + } else if method.MaxTokenTTL < a.srv.config.ACLTokenMinExpirationTTL { + return fmt.Errorf("MaxTokenTTL %s cannot be less than %s", + method.MaxTokenTTL, a.srv.config.ACLTokenMinExpirationTTL) + } + } + + switch method.TokenLocality { + case "local", "": + case "global": + if !a.srv.InACLDatacenter() { + return fmt.Errorf("Invalid Auth Method: TokenLocality 'global' can only be used in the primary datacenter") + } + default: + return fmt.Errorf("Invalid Auth Method: TokenLocality should be one of 'local' or 'global'") + } + // Instantiate a validator but do not cache it yet. This will validate the // configuration. - if _, err := authmethod.NewValidator(method); err != nil { + validator, err := authmethod.NewValidator(a.srv.logger, method) + if err != nil { return fmt.Errorf("Invalid Auth Method: %v", err) } + if err := enterpriseAuthMethodValidation(method, validator); err != nil { + return err + } + if err := a.srv.fsm.State().ACLAuthMethodUpsertValidateEnterprise(method, existing); err != nil { return err } @@ -2157,7 +2227,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.AuthMethodDelete", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.AuthMethodDelete", args, args, reply); done { return err } @@ -2181,6 +2251,10 @@ return nil } + if err := a.enterpriseAuthMethodTypeValidation(method.Type); err != nil { + return err + } + req := structs.ACLAuthMethodBatchDeleteRequest{ AuthMethodNames: []string{args.AuthMethodName}, EnterpriseMeta: args.EnterpriseMeta, @@ -2213,7 +2287,7 @@ return errAuthMethodsRequireTokenReplication } - if done, err := a.srv.forward("ACL.AuthMethodList", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.AuthMethodList", args, args, reply); done { return err } @@ -2237,6 +2311,7 @@ var stubs structs.ACLAuthMethodListStubs for _, method := range methods { + _ = a.enterpriseAuthMethodTypeValidation(method.Type) stubs = append(stubs, method.Stub()) } @@ -2266,7 +2341,7 @@ return errors.New("do not provide a token when logging in") } - if done, err := a.srv.forward("ACL.Login", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.Login", args, args, reply); done { return err } @@ -2282,34 +2357,68 @@ return acl.ErrNotFound } + if err := a.enterpriseAuthMethodTypeValidation(method.Type); err != nil { + return err + } + validator, err := a.srv.loadAuthMethodValidator(idx, method) if err != nil { return err } // 2. Send args.Data.BearerToken to method validator and get back a fields map - verifiedFields, desiredMeta, err := validator.ValidateLogin(auth.BearerToken) + verifiedIdentity, err := validator.ValidateLogin(context.Background(), auth.BearerToken) if err != nil { return err } + return a.tokenSetFromAuthMethod( + method, + &auth.EnterpriseMeta, + "token created via login", + auth.Meta, + validator, + verifiedIdentity, + &structs.ACLTokenSetRequest{ + Datacenter: args.Datacenter, + WriteRequest: args.WriteRequest, + }, + reply, + ) +} + +func (a *ACL) tokenSetFromAuthMethod( + method *structs.ACLAuthMethod, + entMeta *structs.EnterpriseMeta, + tokenDescriptionPrefix string, + tokenMetadata map[string]string, + validator authmethod.Validator, + verifiedIdentity *authmethod.Identity, + createReq *structs.ACLTokenSetRequest, // this should be prepopulated with datacenter+writerequest + reply *structs.ACLToken, +) error { // This always will return a valid pointer - targetMeta := method.TargetEnterpriseMeta(desiredMeta) + targetMeta, err := computeTargetEnterpriseMeta(method, verifiedIdentity) + if err != nil { + return err + } // 3. send map through role bindings - serviceIdentities, roleLinks, err := a.srv.evaluateRoleBindings(validator, verifiedFields, &auth.EnterpriseMeta, targetMeta) + bindings, err := a.srv.evaluateRoleBindings(validator, verifiedIdentity, entMeta, targetMeta) if err != nil { return err } // We try to prevent the creation of a useless token without taking a trip // through the state store if we can. - if len(serviceIdentities) == 0 && len(roleLinks) == 0 { + if bindings == nil || (len(bindings.serviceIdentities) == 0 && len(bindings.nodeIdentities) == 0 && len(bindings.roles) == 0) { return acl.ErrPermissionDenied } - description := "token created via login" - loginMeta, err := encodeLoginMeta(auth.Meta) + // TODO(sso): add a CapturedField to ACLAuthMethod that would pluck fields from the returned identity and stuff into `auth.Meta`. + + description := tokenDescriptionPrefix + loginMeta, err := encodeLoginMeta(tokenMetadata) if err != nil { return err } @@ -2318,23 +2427,28 @@ } // 4. create token - createReq := structs.ACLTokenSetRequest{ - Datacenter: args.Datacenter, - ACLToken: structs.ACLToken{ - Description: description, - Local: true, - AuthMethod: auth.AuthMethod, - ServiceIdentities: serviceIdentities, - Roles: roleLinks, - EnterpriseMeta: *targetMeta, - }, - WriteRequest: args.WriteRequest, + createReq.ACLToken = structs.ACLToken{ + Description: description, + Local: true, + AuthMethod: method.Name, + ServiceIdentities: bindings.serviceIdentities, + NodeIdentities: bindings.nodeIdentities, + Roles: bindings.roles, + ExpirationTTL: method.MaxTokenTTL, + EnterpriseMeta: *targetMeta, + } + + if method.TokenLocality == "global" { + if !a.srv.InACLDatacenter() { + return errors.New("creating global tokens via auth methods is only permitted in the primary datacenter") + } + createReq.ACLToken.Local = false } - createReq.ACLToken.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(&auth.EnterpriseMeta) + createReq.ACLToken.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(entMeta) // 5. return token information like a TokenCreate would - err = a.tokenSetInternal(&createReq, reply, true) + err = a.tokenSetInternal(createReq, reply, true) // If we were in a slight race with a role delete operation then we may // still end up failing to insert an unprivileged token in the state @@ -2372,7 +2486,7 @@ return acl.ErrNotFound } - if done, err := a.srv.forward("ACL.Logout", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.Logout", args, args, reply); done { return err } @@ -2407,9 +2521,7 @@ } // Purge the identity from the cache to prevent using the previous definition of the identity - if token != nil { - a.srv.acls.cache.RemoveIdentity(tokenSecretCacheID(token.SecretID)) - } + a.srv.acls.cache.RemoveIdentity(tokenSecretCacheID(token.SecretID)) if respErr, ok := resp.(error); ok { return respErr @@ -2425,7 +2537,7 @@ return err } - if done, err := a.srv.forward("ACL.Authorize", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.Authorize", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_endpoint_legacy.go consul-1.8.7+dfsg1/agent/consul/acl_endpoint_legacy.go --- consul-1.7.4+dfsg1/agent/consul/acl_endpoint_legacy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_endpoint_legacy.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ // Bootstrap is used to perform a one-time ACL bootstrap operation on // a cluster to get the first management token. func (a *ACL) Bootstrap(args *structs.DCSpecificRequest, reply *structs.ACL) error { - if done, err := a.srv.forward("ACL.Bootstrap", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.Bootstrap", args, args, reply); done { return err } @@ -153,7 +153,7 @@ // Apply is used to apply a modifying request to the data store. This should // only be used for operations that modify the data func (a *ACL) Apply(args *structs.ACLRequest, reply *string) error { - if done, err := a.srv.forward("ACL.Apply", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"acl", "apply"}, time.Now()) @@ -199,7 +199,7 @@ // Get is used to retrieve a single ACL func (a *ACL) Get(args *structs.ACLSpecificRequest, reply *structs.IndexedACLs) error { - if done, err := a.srv.forward("ACL.Get", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.Get", args, args, reply); done { return err } @@ -245,7 +245,7 @@ // List is used to list all the ACLs func (a *ACL) List(args *structs.DCSpecificRequest, reply *structs.IndexedACLs) error { - if done, err := a.srv.forward("ACL.List", args, args, reply); done { + if done, err := a.srv.ForwardRPC("ACL.List", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_endpoint_oss.go consul-1.8.7+dfsg1/agent/consul/acl_endpoint_oss.go --- consul-1.7.4+dfsg1/agent/consul/acl_endpoint_oss.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_endpoint_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +// +build !consulent + +package consul + +import ( + "github.com/hashicorp/consul/agent/consul/authmethod" + "github.com/hashicorp/consul/agent/structs" +) + +func (a *ACL) enterpriseAuthMethodTypeValidation(authMethodType string) error { + return nil +} + +func enterpriseAuthMethodValidation(method *structs.ACLAuthMethod, validator authmethod.Validator) error { + return nil +} + +func computeTargetEnterpriseMeta( + method *structs.ACLAuthMethod, + verifiedIdentity *authmethod.Identity, +) (*structs.EnterpriseMeta, error) { + return method.TargetEnterpriseMeta(verifiedIdentity.EnterpriseMeta), nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/acl_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/acl_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,7 +6,6 @@ "net/rpc" "os" "path/filepath" - "reflect" "strings" "testing" "time" @@ -15,28 +14,26 @@ "github.com/hashicorp/consul/agent/consul/authmethod/kubeauth" "github.com/hashicorp/consul/agent/consul/authmethod/testauth" "github.com/hashicorp/consul/agent/structs" - tokenStore "github.com/hashicorp/consul/agent/token" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/consul/sdk/freeport" + "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" - "github.com/hashicorp/consul/testrpc" uuid "github.com/hashicorp/go-uuid" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2/jwt" ) func TestACLEndpoint_Bootstrap(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.Build = "0.8.0" // Too low for auto init of bootstrap. c.ACLDatacenter = "dc1" c.ACLsEnabled = true - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + // remove the default as we want to bootstrap + c.ACLMasterToken = "" + }, false) + waitForLeaderEstablishment(t, srv) // Expect an error initially since ACL bootstrap is not initialized. arg := structs.DCSpecificRequest{ @@ -46,36 +43,26 @@ // We can only do some high // level checks on the ACL since we don't have control over the UUID or // Raft indexes at this level. - if err := msgpackrpc.CallWithCodec(codec, "ACL.Bootstrap", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } - if len(out.ID) != len("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") || - !strings.HasPrefix(out.Name, "Bootstrap Token") || - out.Type != structs.ACLTokenTypeManagement || - out.CreateIndex == 0 || out.ModifyIndex == 0 { - t.Fatalf("bad: %#v", out) - } + err := msgpackrpc.CallWithCodec(codec, "ACL.Bootstrap", &arg, &out) + require.NoError(t, err) + require.Len(t, out.ID, len("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")) + require.True(t, strings.HasPrefix(out.Name, "Bootstrap Token")) + require.Equal(t, structs.ACLTokenTypeManagement, out.Type) + require.NotEqual(t, uint64(0), out.CreateIndex) + require.NotEqual(t, uint64(0), out.ModifyIndex) // Finally, make sure that another attempt is rejected. - err := msgpackrpc.CallWithCodec(codec, "ACL.Bootstrap", &arg, &out) - if err.Error() != structs.ACLBootstrapNotAllowedErr.Error() { - t.Fatalf("err: %v", err) - } + err = msgpackrpc.CallWithCodec(codec, "ACL.Bootstrap", &arg, &out) + testutil.RequireErrorContains(t, err, structs.ACLBootstrapNotAllowedErr.Error()) } func TestACLEndpoint_BootstrapTokens(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLsEnabled = true - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + dir, srv, codec := testACLServerWithConfig(t, func(c *Config) { + // remove this as we are bootstrapping + c.ACLMasterToken = "" + }, false) + waitForLeaderEstablishment(t, srv) // Expect an error initially since ACL bootstrap is not initialized. arg := structs.DCSpecificRequest{ @@ -97,9 +84,10 @@ require.Error(t, err) require.True(t, strings.HasPrefix(err.Error(), structs.ACLBootstrapNotAllowedErr.Error())) - _, resetIdx, err := s1.fsm.State().CanBootstrapACLToken() + _, resetIdx, err := srv.fsm.State().CanBootstrapACLToken() + require.NoError(t, err) - resetPath := filepath.Join(dir1, "acl-bootstrap-reset") + resetPath := filepath.Join(dir, "acl-bootstrap-reset") require.NoError(t, ioutil.WriteFile(resetPath, []byte(fmt.Sprintf("%d", resetIdx)), 0600)) oldID := out.AccessorID @@ -115,17 +103,8 @@ func TestACLEndpoint_Apply(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -134,140 +113,88 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } + err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) id := out // Verify - state := s1.fsm.State() + state := srv.fsm.State() _, s, err := state.ACLTokenGetBySecret(nil, out, nil) - if err != nil { - t.Fatalf("err: %v", err) - } - if s == nil { - t.Fatalf("should not be nil") - } - if s.SecretID != out { - t.Fatalf("bad: %v", s) - } - if s.Description != "User token" { - t.Fatalf("bad: %v", s) - } + require.NoError(t, err) + require.NotNil(t, s) + require.Equal(t, out, s.SecretID) + require.Equal(t, "User token", s.Description) // Do a delete arg.Op = structs.ACLDelete arg.ACL.ID = out - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } + err = msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) // Verify _, s, err = state.ACLTokenGetBySecret(nil, id, nil) - if err != nil { - t.Fatalf("err: %v", err) - } - if s != nil { - t.Fatalf("bad: %v", s) - } + require.NoError(t, err) + require.Nil(t, s) } func TestACLEndpoint_Update_PurgeCache(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", Op: structs.ACLSet, ACL: structs.ACL{ - Name: "User token", - Type: structs.ACLTokenTypeClient, + Name: "User token", + Type: structs.ACLTokenTypeClient, + Rules: `key "" { policy = "read"}`, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } + err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) id := out // Resolve - acl1, err := s1.ResolveToken(id) - if err != nil { - t.Fatalf("err: %v", err) - } - if acl1 == nil { - t.Fatalf("should not be nil") - } - if acl1.KeyRead("foo", nil) != acl.Allow { - t.Fatalf("should be allowed") - } + acl1, err := srv.ResolveToken(id) + require.NoError(t, err) + require.NotNil(t, acl1) + require.Equal(t, acl.Allow, acl1.KeyRead("foo", nil)) // Do an update arg.ACL.ID = out arg.ACL.Rules = `{"key": {"": {"policy": "deny"}}}` - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } + err = msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) // Resolve again - acl2, err := s1.ResolveToken(id) - if err != nil { - t.Fatalf("err: %v", err) - } - if acl2 == nil { - t.Fatalf("should not be nil") - } - if acl2 == acl1 { - t.Fatalf("should not be cached") - } - if acl2.KeyRead("foo", nil) == acl.Allow { - t.Fatalf("should not be allowed") - } + acl2, err := srv.ResolveToken(id) + require.NoError(t, err) + require.NotNil(t, acl2) + require.NotSame(t, acl2, acl1) + require.NotEqual(t, acl.Allow, acl2.KeyRead("foo", nil)) // Do a delete arg.Op = structs.ACLDelete arg.ACL.Rules = "" - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } + err = msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) // Resolve again - acl3, err := s1.ResolveToken(id) - if !acl.IsErrNotFound(err) { - t.Fatalf("err: %v", err) - } - if acl3 != nil { - t.Fatalf("should be nil") - } + acl3, err := srv.ResolveToken(id) + require.True(t, acl.IsErrNotFound(err), "Error %v is not acl.ErrNotFound", err) + require.Nil(t, acl3) } func TestACLEndpoint_Apply_CustomID(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -277,45 +204,26 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } - if out != "foobarbaz" { - t.Fatalf("bad token ID: %s", out) - } + err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) + require.Equal(t, "foobarbaz", out) // Verify - state := s1.fsm.State() + state := srv.fsm.State() _, s, err := state.ACLTokenGetBySecret(nil, out, nil) - if err != nil { - t.Fatalf("err: %v", err) - } - if s == nil { - t.Fatalf("should not be nil") - } - if s.SecretID != out { - t.Fatalf("bad: %v", s) - } - if s.Description != "User token" { - t.Fatalf("bad: %v", s) - } + require.NoError(t, err) + require.NotNil(t, s) + require.Equal(t, out, s.SecretID) + require.Equal(t, "User token", s.Description) } func TestACLEndpoint_Apply_Denied(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -327,24 +235,13 @@ } var out string err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) - if !acl.IsErrPermissionDenied(err) { - t.Fatalf("err: %v", err) - } + require.True(t, acl.IsErrPermissionDenied(err), "Err %v is not acl.PermissionDenied", err) } func TestACLEndpoint_Apply_DeleteAnon(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -354,28 +251,17 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) - if err == nil || !strings.Contains(err.Error(), "delete anonymous") { - t.Fatalf("err: %v", err) - } + testutil.RequireErrorContains(t, err, "delete anonymous") } func TestACLEndpoint_Apply_RootChange(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -385,28 +271,17 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) - if err == nil || !strings.Contains(err.Error(), "root ACL") { - t.Fatalf("err: %v", err) - } + testutil.RequireErrorContains(t, err, "root ACL") } func TestACLEndpoint_Get(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -415,48 +290,28 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } + err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) getR := structs.ACLSpecificRequest{ Datacenter: "dc1", ACL: out, } var acls structs.IndexedACLs - if err := msgpackrpc.CallWithCodec(codec, "ACL.Get", &getR, &acls); err != nil { - t.Fatalf("err: %v", err) - } - - if acls.Index == 0 { - t.Fatalf("Bad: %v", acls) - } - if len(acls.ACLs) != 1 { - t.Fatalf("Bad: %v", acls) - } - s := acls.ACLs[0] - if s.ID != out { - t.Fatalf("bad: %v", s) - } + err = msgpackrpc.CallWithCodec(codec, "ACL.Get", &getR, &acls) + require.NoError(t, err) + require.NotEqual(t, uint64(0), acls.Index) + require.Len(t, acls.ACLs, 1) + require.Equal(t, out, acls.ACLs[0].ID) } func TestACLEndpoint_GetPolicy(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - c.ACLDefaultPolicy = "deny" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) arg := structs.ACLRequest{ Datacenter: "dc1", @@ -465,10 +320,11 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string - require.NoError(t, msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out)) + err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) getR := structs.ACLPolicyResolveLegacyRequest{ Datacenter: "dc1", @@ -477,9 +333,10 @@ var acls structs.ACLPolicyResolveLegacyResponse retry.Run(t, func(r *retry.R) { - require.NoError(r, msgpackrpc.CallWithCodec(codec, "ACL.GetPolicy", &getR, &acls)) + err := msgpackrpc.CallWithCodec(codec, "ACL.GetPolicy", &getR, &acls) + + require.NoError(r, err) require.NotNil(t, acls.Policy) - require.Equal(t, "deny", acls.Parent) require.Equal(t, 30*time.Second, acls.TTL) }) @@ -494,20 +351,16 @@ func TestACLEndpoint_GetPolicy_Management(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, testServerACLConfig(nil)) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) // wait for leader election and leader establishment to finish. // after this the global management policy, master token and // anonymous token will have been injected into the state store // and we will be ready to resolve the master token - waitForLeaderEstablishment(t, s1) + waitForLeaderEstablishment(t, srv) req := structs.ACLPolicyResolveLegacyRequest{ - Datacenter: s1.config.Datacenter, + Datacenter: srv.config.Datacenter, ACL: TestDefaultMasterToken, } @@ -518,19 +371,10 @@ func TestACLEndpoint_List(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + var expectedIDs []string - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - ids := []string{} for i := 0; i < 5; i++ { arg := structs.ACLRequest{ Datacenter: "dc1", @@ -539,85 +383,62 @@ Name: "User token", Type: structs.ACLTokenTypeClient, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out string - if err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } - ids = append(ids, out) + err := msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &out) + require.NoError(t, err) + expectedIDs = append(expectedIDs, out) } getR := structs.DCSpecificRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } var acls structs.IndexedACLs - if err := msgpackrpc.CallWithCodec(codec, "ACL.List", &getR, &acls); err != nil { - t.Fatalf("err: %v", err) - } - - if acls.Index == 0 { - t.Fatalf("Bad: %v", acls) - } + err := msgpackrpc.CallWithCodec(codec, "ACL.List", &getR, &acls) + require.NoError(t, err) + require.NotEqual(t, uint64(0), acls.Index) // 5 + master - if len(acls.ACLs) != 6 { - t.Fatalf("Bad: %v", acls.ACLs) - } + require.Len(t, acls.ACLs, 6) + var actualIDs []string for i := 0; i < len(acls.ACLs); i++ { s := acls.ACLs[i] - if s.ID == anonymousToken || s.ID == "root" { + if s.ID == anonymousToken || s.ID == TestDefaultMasterToken { continue } - if !lib.StrContains(ids, s.ID) { - t.Fatalf("bad: %v", s) - } - if s.Name != "User token" { - t.Fatalf("bad: %v", s) - } + + require.Equal(t, "User token", s.Name) + + actualIDs = append(actualIDs, s.ID) } + + require.ElementsMatch(t, expectedIDs, actualIDs) } func TestACLEndpoint_List_Denied(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) getR := structs.DCSpecificRequest{ Datacenter: "dc1", } var acls structs.IndexedACLs err := msgpackrpc.CallWithCodec(codec, "ACL.List", &getR, &acls) - if !acl.IsErrPermissionDenied(err) { - t.Fatalf("err: %v", err) - } + require.True(t, acl.IsErrPermissionDenied(err), "Err %v is not an acl.ErrPermissionDenied", err) } func TestACLEndpoint_ReplicationStatus(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLDatacenter = "dc2" - c.ACLsEnabled = true c.ACLTokenReplication = true c.ACLReplicationRate = 100 c.ACLReplicationBurst = 100 - }) - s1.tokens.UpdateReplicationToken("secret", tokenStore.TokenSourceConfig) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + }, true) + waitForLeaderEstablishment(t, srv) getR := structs.DCSpecificRequest{ Datacenter: "dc1", @@ -626,43 +447,34 @@ retry.Run(t, func(r *retry.R) { var status structs.ACLReplicationStatus err := msgpackrpc.CallWithCodec(codec, "ACL.ReplicationStatus", &getR, &status) - if err != nil { - r.Fatalf("err: %v", err) - } - if !status.Enabled || !status.Running || status.SourceDatacenter != "dc2" { - r.Fatalf("bad: %#v", status) - } + require.NoError(t, err) + + require.True(t, status.Enabled) + require.True(t, status.Running) + require.Equal(t, "dc2", status.SourceDatacenter) }) } func TestACLEndpoint_TokenRead(t *testing.T) { t.Parallel() - - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + }, false) - testrpc.WaitForLeader(t, s1.RPC, "dc1") + waitForLeaderEstablishment(t, srv) - acl := ACL{srv: s1} + acl := ACL{srv: srv} t.Run("exists and matches what we created", func(t *testing.T) { - token, err := upsertTestToken(codec, "root", "dc1", nil) + token, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", nil) require.NoError(t, err) req := structs.ACLTokenGetRequest{ Datacenter: "dc1", TokenID: token.AccessorID, TokenIDType: structs.ACLTokenAccessor, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenResponse{} @@ -670,14 +482,12 @@ err = acl.TokenRead(&req, &resp) require.NoError(t, err) - if !reflect.DeepEqual(resp.Token, token) { - t.Fatalf("tokens are not equal: %v != %v", resp.Token, token) - } + require.Equal(t, token, resp.Token) }) t.Run("expired tokens are filtered", func(t *testing.T) { // insert a token that will expire - token, err := upsertTestToken(codec, "root", "dc1", func(t *structs.ACLToken) { + token, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(t *structs.ACLToken) { t.ExpirationTTL = 200 * time.Millisecond }) require.NoError(t, err) @@ -687,7 +497,7 @@ Datacenter: "dc1", TokenID: token.AccessorID, TokenIDType: structs.ACLTokenAccessor, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenResponse{} @@ -701,7 +511,7 @@ Datacenter: "dc1", TokenID: token.AccessorID, TokenIDType: structs.ACLTokenAccessor, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenResponse{} @@ -721,7 +531,7 @@ Datacenter: "dc1", TokenID: fakeID, TokenIDType: structs.ACLTokenAccessor, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenResponse{} @@ -736,7 +546,7 @@ Datacenter: "dc1", TokenID: "definitely-really-certainly-not-a-uuid", TokenIDType: structs.ACLTokenAccessor, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenResponse{} @@ -750,27 +560,19 @@ func TestACLEndpoint_TokenClone(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + }, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - p1, err := upsertTestPolicy(codec, "root", "dc1") + p1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - r1, err := upsertTestRole(codec, "root", "dc1") + r1, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - t1, err := upsertTestToken(codec, "root", "dc1", func(t *structs.ACLToken) { + t1, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(t *structs.ACLToken) { t.Policies = []structs.ACLTokenPolicyLink{ {ID: p1.ID}, } @@ -778,18 +580,21 @@ {ID: r1.ID}, } t.ServiceIdentities = []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: "web"}, + {ServiceName: "web"}, + } + t.NodeIdentities = []*structs.ACLNodeIdentity{ + {NodeName: "foo", Datacenter: "bar"}, } }) require.NoError(t, err) - endpoint := ACL{srv: s1} + endpoint := ACL{srv: srv} t.Run("normal", func(t *testing.T) { req := structs.ACLTokenSetRequest{ Datacenter: "dc1", ACLToken: structs.ACLToken{AccessorID: t1.AccessorID}, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } t2 := structs.ACLToken{} @@ -801,6 +606,7 @@ require.Equal(t, t1.Policies, t2.Policies) require.Equal(t, t1.Roles, t2.Roles) require.Equal(t, t1.ServiceIdentities, t2.ServiceIdentities) + require.Equal(t, t1.NodeIdentities, t2.NodeIdentities) require.Equal(t, t1.Rules, t2.Rules) require.Equal(t, t1.Local, t2.Local) require.NotEqual(t, t1.AccessorID, t2.AccessorID) @@ -809,7 +615,7 @@ t.Run("can't clone expired token", func(t *testing.T) { // insert a token that will expire - t1, err := upsertTestToken(codec, "root", "dc1", func(t *structs.ACLToken) { + t1, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(t *structs.ACLToken) { t.ExpirationTTL = 11 * time.Millisecond }) require.NoError(t, err) @@ -819,7 +625,7 @@ req := structs.ACLTokenSetRequest{ Datacenter: "dc1", ACLToken: structs.ACLToken{AccessorID: t1.AccessorID}, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } t2 := structs.ACLToken{} @@ -833,21 +639,13 @@ func TestACLEndpoint_TokenSet(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + }, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + acl := ACL{srv: srv} var tokenID string @@ -858,8 +656,14 @@ Description: "foobar", Policies: nil, Local: false, + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo", + Datacenter: "dc1", + }, + }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -868,7 +672,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -876,6 +680,9 @@ require.NotNil(t, token.AccessorID) require.Equal(t, token.Description, "foobar") require.Equal(t, token.AccessorID, resp.AccessorID) + require.Len(t, token.NodeIdentities, 1) + require.Equal(t, "foo", token.NodeIdentities[0].NodeName) + require.Equal(t, "dc1", token.NodeIdentities[0].Datacenter) tokenID = token.AccessorID }) @@ -887,7 +694,7 @@ Description: "new-description", AccessorID: tokenID, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -896,7 +703,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -904,12 +711,13 @@ require.NotNil(t, token.AccessorID) require.Equal(t, token.Description, "new-description") require.Equal(t, token.AccessorID, resp.AccessorID) + require.Empty(t, token.NodeIdentities) }) t.Run("Create it using Policies linked by id and name", func(t *testing.T) { - policy1, err := upsertTestPolicy(codec, "root", "dc1") + policy1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - policy2, err := upsertTestPolicy(codec, "root", "dc1") + policy2, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) req := structs.ACLTokenSetRequest{ @@ -917,16 +725,16 @@ ACLToken: structs.ACLToken{ Description: "foobar", Policies: []structs.ACLTokenPolicyLink{ - structs.ACLTokenPolicyLink{ + { ID: policy1.ID, }, - structs.ACLTokenPolicyLink{ + { Name: policy2.Name, }, }, Local: false, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -936,11 +744,11 @@ // Delete both policies to ensure that we skip resolving ID->Name // in the returned data. - require.NoError(t, deleteTestPolicy(codec, "root", "dc1", policy1.ID)) - require.NoError(t, deleteTestPolicy(codec, "root", "dc1", policy2.ID)) + require.NoError(t, deleteTestPolicy(codec, TestDefaultMasterToken, "dc1", policy1.ID)) + require.NoError(t, deleteTestPolicy(codec, TestDefaultMasterToken, "dc1", policy2.ID)) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -953,9 +761,9 @@ }) t.Run("Create it using Roles linked by id and name", func(t *testing.T) { - role1, err := upsertTestRole(codec, "root", "dc1") + role1, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - role2, err := upsertTestRole(codec, "root", "dc1") + role2, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) req := structs.ACLTokenSetRequest{ @@ -963,16 +771,16 @@ ACLToken: structs.ACLToken{ Description: "foobar", Roles: []structs.ACLTokenRoleLink{ - structs.ACLTokenRoleLink{ + { ID: role1.ID, }, - structs.ACLTokenRoleLink{ + { Name: role2.Name, }, }, Local: false, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -982,11 +790,11 @@ // Delete both roles to ensure that we skip resolving ID->Name // in the returned data. - require.NoError(t, deleteTestRole(codec, "root", "dc1", role1.ID)) - require.NoError(t, deleteTestRole(codec, "root", "dc1", role2.ID)) + require.NoError(t, deleteTestRole(codec, TestDefaultMasterToken, "dc1", role1.ID)) + require.NoError(t, deleteTestRole(codec, TestDefaultMasterToken, "dc1", role2.ID)) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1005,26 +813,26 @@ Description: "foobar", AuthMethod: "fakemethod", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "AuthMethod field is disallowed outside of Login") + testutil.RequireErrorContains(t, err, "AuthMethod field is disallowed outside of Login") }) t.Run("Update auth method linked token and try to change auth method", func(t *testing.T) { - acl := ACL{srv: s1} + acl := ACL{srv: srv} testSessionID := testauth.StartSession() defer testauth.ResetSession(testSessionID) testauth.InstallSessionToken(testSessionID, "fake-token", "default", "demo", "abc123") - method1, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID) + method1, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID) require.NoError(t, err) - _, err = upsertTestBindingRule(codec, "root", "dc1", method1.Name, "", structs.BindingRuleBindTypeService, "demo") + _, err = upsertTestBindingRule(codec, TestDefaultMasterToken, "dc1", method1.Name, "", structs.BindingRuleBindTypeService, "demo") require.NoError(t, err) // create a token in one method @@ -1037,7 +845,7 @@ Datacenter: "dc1", }, &methodToken)) - method2, err := upsertTestAuthMethod(codec, "root", "dc1", "") + method2, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) // try to update the token and change the method @@ -1050,26 +858,26 @@ Description: "updated token", Local: true, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err = acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "Cannot change AuthMethod") + testutil.RequireErrorContains(t, err, "Cannot change AuthMethod") }) t.Run("Update auth method linked token and let the SecretID and AuthMethod be defaulted", func(t *testing.T) { - acl := ACL{srv: s1} + acl := ACL{srv: srv} testSessionID := testauth.StartSession() defer testauth.ResetSession(testSessionID) testauth.InstallSessionToken(testSessionID, "fake-token", "default", "demo", "abc123") - method, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID) + method, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID) require.NoError(t, err) - _, err = upsertTestBindingRule(codec, "root", "dc1", method.Name, "", structs.BindingRuleBindTypeService, "demo") + _, err = upsertTestBindingRule(codec, TestDefaultMasterToken, "dc1", method.Name, "", structs.BindingRuleBindTypeService, "demo") require.NoError(t, err) methodToken := structs.ACLToken{} @@ -1090,7 +898,7 @@ Description: "updated token", Local: true, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1098,7 +906,7 @@ require.NoError(t, acl.TokenSet(&req, &resp)) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1118,16 +926,16 @@ Policies: nil, Local: false, ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: ""}, + {ServiceName: ""}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "Service identity is missing the service name field") + testutil.RequireErrorContains(t, err, "Service identity is missing the service name field") }) t.Run("Create it with invalid service identity (too large)", func(t *testing.T) { @@ -1139,10 +947,10 @@ Policies: nil, Local: false, ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: long}, + {ServiceName: long}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1185,10 +993,10 @@ Policies: nil, Local: false, ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: test.name}, + {ServiceName: test.name}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1198,7 +1006,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token require.NotNil(t, token) @@ -1217,11 +1025,11 @@ Policies: nil, Local: false, ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: "example"}, - &structs.ACLServiceIdentity{ServiceName: "example"}, + {ServiceName: "example"}, + {ServiceName: "example"}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1230,7 +1038,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token require.NotNil(t, token) @@ -1245,17 +1053,17 @@ Policies: nil, Local: false, ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ + { ServiceName: "example", Datacenters: []string{"dc2", "dc3"}, }, - &structs.ACLServiceIdentity{ + { ServiceName: "example", Datacenters: []string{"dc1", "dc2"}, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1264,7 +1072,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token require.NotNil(t, token) @@ -1282,16 +1090,16 @@ Policies: nil, Local: true, ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: "foo", Datacenters: []string{"dc2"}}, + {ServiceName: "foo", Datacenters: []string{"dc2"}}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "cannot specify a list of datacenters on a local token") + testutil.RequireErrorContains(t, err, "cannot specify a list of datacenters on a local token") }) for _, test := range []struct { @@ -1313,14 +1121,14 @@ Local: false, ExpirationTime: timePointer(time.Now().Add(test.offset)), }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) if test.errString != "" { - requireErrorContains(t, err, test.errString) + testutil.RequireErrorContains(t, err, test.errString) } else { require.NotNil(t, err) } @@ -1335,14 +1143,14 @@ Local: false, ExpirationTTL: test.offset, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) if test.errString != "" { - requireErrorContains(t, err, test.errStringTTL) + testutil.RequireErrorContains(t, err, test.errStringTTL) } else { require.NotNil(t, err) } @@ -1359,13 +1167,13 @@ ExpirationTime: timePointer(time.Now().Add(4 * time.Second)), ExpirationTTL: 4 * time.Second, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "Expiration TTL and Expiration Time cannot both be set") + testutil.RequireErrorContains(t, err, "Expiration TTL and Expiration Time cannot both be set") }) t.Run("Create it with expiration time using TTLs", func(t *testing.T) { @@ -1377,7 +1185,7 @@ Local: false, ExpirationTTL: 4 * time.Second, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1386,7 +1194,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1412,7 +1220,7 @@ Local: false, ExpirationTime: &expTime, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1421,7 +1229,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1444,13 +1252,13 @@ AccessorID: tokenID, ExpirationTime: timePointer(expTime.Add(-1 * time.Second)), }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err := acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "Cannot change expiration time") + testutil.RequireErrorContains(t, err, "Cannot change expiration time") }) // do not insert another test at this point: these tests need to be serial @@ -1462,7 +1270,7 @@ Description: "new-description-1", AccessorID: tokenID, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1471,7 +1279,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1490,7 +1298,7 @@ AccessorID: tokenID, ExpirationTime: &expTime, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1499,7 +1307,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1512,7 +1320,7 @@ t.Run("cannot update a token that is past its expiration time", func(t *testing.T) { // create a token that will expire - expiringToken, err := upsertTestToken(codec, "root", "dc1", func(token *structs.ACLToken) { + expiringToken, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(token *structs.ACLToken) { token.ExpirationTTL = 11 * time.Millisecond }) require.NoError(t, err) @@ -1526,32 +1334,80 @@ AccessorID: expiringToken.AccessorID, ExpirationTTL: 4 * time.Second, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} err = acl.TokenSet(&req, &resp) - requireErrorContains(t, err, "Cannot find token") + testutil.RequireErrorContains(t, err, "Cannot find token") + }) + + t.Run("invalid node identity - no name", func(t *testing.T) { + req := structs.ACLTokenSetRequest{ + Datacenter: "dc1", + ACLToken: structs.ACLToken{ + NodeIdentities: []*structs.ACLNodeIdentity{ + { + Datacenter: "dc1", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + + resp := structs.ACLToken{} + + err := acl.TokenSet(&req, &resp) + testutil.RequireErrorContains(t, err, "Node identity is missing the node name field on this token") + }) + + t.Run("invalid node identity - invalid name", func(t *testing.T) { + req := structs.ACLTokenSetRequest{ + Datacenter: "dc1", + ACLToken: structs.ACLToken{ + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo.bar", + Datacenter: "dc1", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + + resp := structs.ACLToken{} + + err := acl.TokenSet(&req, &resp) + testutil.RequireErrorContains(t, err, "Node identity has an invalid name.") + }) + t.Run("invalid node identity - no datacenter", func(t *testing.T) { + req := structs.ACLTokenSetRequest{ + Datacenter: "dc1", + ACLToken: structs.ACLToken{ + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + + resp := structs.ACLToken{} + + err := acl.TokenSet(&req, &resp) + testutil.RequireErrorContains(t, err, "Node identity is missing the datacenter field on this token") }) } func TestACLEndpoint_TokenSet_CustomID(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - acl := ACL{srv: s1} + acl := ACL{srv: srv} // No Create Arg t.Run("no create arg", func(t *testing.T) { @@ -1564,7 +1420,7 @@ Policies: nil, Local: false, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1585,7 +1441,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1594,7 +1450,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - tokenResp, err := retrieveTestToken(codec, "root", "dc1", resp.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", resp.AccessorID) require.NoError(t, err) token := tokenResp.Token @@ -1615,7 +1471,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1635,7 +1491,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1655,7 +1511,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1675,7 +1531,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1695,7 +1551,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1715,7 +1571,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1735,7 +1591,7 @@ Policies: nil, Local: false, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1756,7 +1612,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1776,7 +1632,7 @@ Policies: nil, Local: false, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1797,7 +1653,7 @@ Local: false, }, Create: true, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLToken{} @@ -1810,21 +1666,13 @@ func TestACLEndpoint_TokenSet_anon(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - policy, err := upsertTestPolicy(codec, "root", "dc1") + policy, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} // Assign the policies to a token tokenUpsertReq := structs.ACLTokenSetRequest{ @@ -1832,19 +1680,20 @@ ACLToken: structs.ACLToken{ AccessorID: structs.ACLTokenAnonymousID, Policies: []structs.ACLTokenPolicyLink{ - structs.ACLTokenPolicyLink{ + { ID: policy.ID, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } token := structs.ACLToken{} err = acl.TokenSet(&tokenUpsertReq, &token) require.NoError(t, err) require.NotEmpty(t, token.SecretID) - tokenResp, err := retrieveTestToken(codec, "root", "dc1", structs.ACLTokenAnonymousID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", structs.ACLTokenAnonymousID) + require.NoError(t, err) require.Equal(t, len(tokenResp.Token.Policies), 1) require.Equal(t, tokenResp.Token.Policies[0].ID, policy.ID) @@ -1853,38 +1702,21 @@ func TestACLEndpoint_TokenDelete(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, s1, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + }, false) - dir2, s2 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true + _, s2, codec2 := testACLServerWithConfig(t, func(c *Config) { c.Datacenter = "dc2" c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second // token replication is required to test deleting non-local tokens in secondary dc c.ACLTokenReplication = true - }) - defer os.RemoveAll(dir2) - defer s2.Shutdown() - codec2 := rpcClient(t, s2) - defer codec2.Close() - - s2.tokens.UpdateReplicationToken("root", tokenStore.TokenSourceConfig) + }, true) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc2") + waitForLeaderEstablishment(t, s1) + waitForLeaderEstablishment(t, s2) // Try to join joinWAN(t, s2, s1) @@ -1898,18 +1730,18 @@ acl := ACL{srv: s1} acl2 := ACL{srv: s2} - existingToken, err := upsertTestToken(codec, "root", "dc1", nil) + existingToken, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", nil) require.NoError(t, err) t.Run("deletes a token that has an expiration time in the future", func(t *testing.T) { // create a token that will expire - testToken, err := upsertTestToken(codec, "root", "dc1", func(token *structs.ACLToken) { + testToken, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(token *structs.ACLToken) { token.ExpirationTTL = 4 * time.Second }) require.NoError(t, err) // Make sure the token is listable - tokenResp, err := retrieveTestToken(codec, "root", "dc1", testToken.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", testToken.AccessorID) require.NoError(t, err) require.NotNil(t, tokenResp.Token) @@ -1917,7 +1749,7 @@ req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: testToken.AccessorID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -1926,14 +1758,14 @@ require.NoError(t, err) // Make sure the token is gone - tokenResp, err = retrieveTestToken(codec, "root", "dc1", testToken.AccessorID) + tokenResp, err = retrieveTestToken(codec, TestDefaultMasterToken, "dc1", testToken.AccessorID) require.NoError(t, err) require.Nil(t, tokenResp.Token) }) t.Run("deletes a token that is past its expiration time", func(t *testing.T) { // create a token that will expire - expiringToken, err := upsertTestToken(codec, "root", "dc1", func(token *structs.ACLToken) { + expiringToken, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(token *structs.ACLToken) { token.ExpirationTTL = 11 * time.Millisecond }) require.NoError(t, err) @@ -1941,7 +1773,7 @@ time.Sleep(20 * time.Millisecond) // now 'expiringToken' is expired // Make sure the token is not listable (filtered due to expiry) - tokenResp, err := retrieveTestToken(codec, "root", "dc1", expiringToken.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", expiringToken.AccessorID) require.NoError(t, err) require.Nil(t, tokenResp.Token) @@ -1949,7 +1781,7 @@ req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: expiringToken.AccessorID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -1958,7 +1790,7 @@ require.NoError(t, err) // Make sure the token is still gone (this time it's actually gone) - tokenResp, err = retrieveTestToken(codec, "root", "dc1", expiringToken.AccessorID) + tokenResp, err = retrieveTestToken(codec, TestDefaultMasterToken, "dc1", expiringToken.AccessorID) require.NoError(t, err) require.Nil(t, tokenResp.Token) }) @@ -1967,7 +1799,7 @@ req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: existingToken.AccessorID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -1976,7 +1808,7 @@ require.NoError(t, err) // Make sure the token is gone - tokenResp, err := retrieveTestToken(codec, "root", "dc1", existingToken.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", existingToken.AccessorID) require.Nil(t, tokenResp.Token) require.NoError(t, err) }) @@ -1984,9 +1816,9 @@ t.Run("can't delete itself", func(t *testing.T) { readReq := structs.ACLTokenGetRequest{ Datacenter: "dc1", - TokenID: "root", + TokenID: TestDefaultMasterToken, TokenIDType: structs.ACLTokenSecret, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } var out structs.ACLTokenResponse @@ -1998,7 +1830,7 @@ req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: out.Token.AccessorID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -2013,7 +1845,7 @@ req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: fakeID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -2022,7 +1854,7 @@ require.NoError(t, err) // token should be nil - tokenResp, err := retrieveTestToken(codec, "root", "dc1", existingToken.AccessorID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", existingToken.AccessorID) require.Nil(t, tokenResp.Token) require.NoError(t, err) }) @@ -2034,7 +1866,7 @@ req := structs.ACLTokenDeleteRequest{ Datacenter: "dc2", TokenID: fakeID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -2043,7 +1875,7 @@ require.NoError(t, err) // token should be nil - tokenResp, err := retrieveTestToken(codec2, "root", "dc1", existingToken.AccessorID) + tokenResp, err := retrieveTestToken(codec2, TestDefaultMasterToken, "dc1", existingToken.AccessorID) require.Nil(t, tokenResp.Token) require.NoError(t, err) }) @@ -2052,24 +1884,15 @@ func TestACLEndpoint_TokenDelete_anon(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: structs.ACLTokenAnonymousID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -2078,37 +1901,29 @@ require.EqualError(t, err, "Delete operation not permitted on the anonymous token") // Make sure the token is still there - tokenResp, err := retrieveTestToken(codec, "root", "dc1", structs.ACLTokenAnonymousID) + tokenResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", structs.ACLTokenAnonymousID) + require.NoError(t, err) require.NotNil(t, tokenResp.Token) } func TestACLEndpoint_TokenList(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + }, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - waitForLeaderEstablishment(t, s1) + acl := ACL{srv: srv} - acl := ACL{srv: s1} - - t1, err := upsertTestToken(codec, "root", "dc1", nil) + t1, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", nil) require.NoError(t, err) - t2, err := upsertTestToken(codec, "root", "dc1", nil) + t2, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", nil) require.NoError(t, err) - masterTokenAccessorID, err := retrieveTestTokenAccessorForSecret(codec, "root", "dc1", "root") + masterTokenAccessorID, err := retrieveTestTokenAccessorForSecret(codec, TestDefaultMasterToken, "dc1", TestDefaultMasterToken) require.NoError(t, err) t.Run("normal", func(t *testing.T) { @@ -2116,14 +1931,14 @@ // however previously inserting it outside of the subtest func resulted in this being // extra flakey due to there being more code that needed to run to setup the subtest // between when we inserted the token and when we performed the listing. - t3, err := upsertTestToken(codec, "root", "dc1", func(token *structs.ACLToken) { + t3, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(token *structs.ACLToken) { token.ExpirationTTL = 50 * time.Millisecond }) require.NoError(t, err) req := structs.ACLTokenListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenListResponse{} @@ -2146,7 +1961,7 @@ t.Run("filter expired", func(t *testing.T) { req := structs.ACLTokenListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenListResponse{} @@ -2167,29 +1982,21 @@ func TestACLEndpoint_TokenBatchRead(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, srv, codec := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + }, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + acl := ACL{srv: srv} - t1, err := upsertTestToken(codec, "root", "dc1", nil) + t1, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", nil) require.NoError(t, err) - t2, err := upsertTestToken(codec, "root", "dc1", nil) + t2, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", nil) require.NoError(t, err) - t3, err := upsertTestToken(codec, "root", "dc1", func(token *structs.ACLToken) { + t3, err := upsertTestToken(codec, TestDefaultMasterToken, "dc1", func(token *structs.ACLToken) { token.ExpirationTTL = 4 * time.Second }) require.NoError(t, err) @@ -2200,7 +2007,7 @@ req := structs.ACLTokenBatchGetRequest{ Datacenter: "dc1", AccessorIDs: tokens, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenBatchResponse{} @@ -2218,7 +2025,7 @@ req := structs.ACLTokenBatchGetRequest{ Datacenter: "dc1", AccessorIDs: tokens, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLTokenBatchResponse{} @@ -2231,110 +2038,69 @@ func TestACLEndpoint_PolicyRead(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") + policy, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") + require.NoError(t, err) - policy, err := upsertTestPolicy(codec, "root", "dc1") - if err != nil { - t.Fatalf("err: %v", err) - } - - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLPolicyGetRequest{ Datacenter: "dc1", PolicyID: policy.ID, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicyResponse{} err = acl.PolicyRead(&req, &resp) - if err != nil { - t.Fatalf("err: %v", err) - } - - if !reflect.DeepEqual(resp.Policy, policy) { - t.Fatalf("tokens are not equal: %v != %v", resp.Policy, policy) - } + require.NoError(t, err) + require.Equal(t, policy, resp.Policy) } func TestACLEndpoint_PolicyReadByName(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - policy, err := upsertTestPolicy(codec, "root", "dc1") - if err != nil { - t.Fatalf("err: %v", err) - } + policy, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") + require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLPolicyGetRequest{ Datacenter: "dc1", PolicyName: policy.Name, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicyResponse{} err = acl.PolicyRead(&req, &resp) - if err != nil { - t.Fatalf("err: %v", err) - } - - if !reflect.DeepEqual(resp.Policy, policy) { - t.Fatalf("tokens are not equal: %v != %v", resp.Policy, policy) - } + require.NoError(t, err) + require.Equal(t, policy, resp.Policy) } func TestACLEndpoint_PolicyBatchRead(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - p1, err := upsertTestPolicy(codec, "root", "dc1") + p1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - p2, err := upsertTestPolicy(codec, "root", "dc1") + p2, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} policies := []string{p1.ID, p2.ID} req := structs.ACLPolicyBatchGetRequest{ Datacenter: "dc1", PolicyIDs: policies, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicyBatchResponse{} @@ -2347,19 +2113,10 @@ func TestACLEndpoint_PolicySet(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + acl := ACL{srv: srv} - acl := ACL{srv: s1} var policyID string t.Run("Create it", func(t *testing.T) { @@ -2370,7 +2127,7 @@ Name: "baz", Rules: "service \"\" { policy = \"read\" }", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicy{} @@ -2379,7 +2136,7 @@ require.NotNil(t, resp.ID) // Get the policy directly to validate that it exists - policyResp, err := retrieveTestPolicy(codec, "root", "dc1", resp.ID) + policyResp, err := retrieveTestPolicy(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) policy := policyResp.Policy @@ -2399,7 +2156,7 @@ Name: "baz", Rules: "service \"\" { policy = \"read\" }", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicy{} @@ -2416,7 +2173,7 @@ Name: "bar", Rules: "service \"\" { policy = \"write\" }", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicy{} @@ -2425,7 +2182,7 @@ require.NotNil(t, resp.ID) // Get the policy directly to validate that it exists - policyResp, err := retrieveTestPolicy(codec, "root", "dc1", resp.ID) + policyResp, err := retrieveTestPolicy(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) policy := policyResp.Policy @@ -2439,19 +2196,10 @@ func TestACLEndpoint_PolicySet_CustomID(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, _ := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - acl := ACL{srv: s1} + acl := ACL{srv: srv} // Attempt to create policy with ID req := structs.ACLPolicySetRequest{ @@ -2462,7 +2210,7 @@ Name: "baz", Rules: "service \"\" { policy = \"read\" }", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicy{} @@ -2473,23 +2221,13 @@ func TestACLEndpoint_PolicySet_globalManagement(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + acl := ACL{srv: srv} // Can't change the rules { - req := structs.ACLPolicySetRequest{ Datacenter: "dc1", Policy: structs.ACLPolicy{ @@ -2497,7 +2235,7 @@ Name: "foobar", // This is required to get past validation Rules: "service \"\" { policy = \"write\" }", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicy{} @@ -2514,7 +2252,7 @@ Name: "foobar", Rules: structs.ACLPolicyGlobalManagement, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicy{} @@ -2522,7 +2260,7 @@ require.NoError(t, err) // Get the policy again - policyResp, err := retrieveTestPolicy(codec, "root", "dc1", structs.ACLPolicyGlobalManagementID) + policyResp, err := retrieveTestPolicy(codec, TestDefaultMasterToken, "dc1", structs.ACLPolicyGlobalManagementID) require.NoError(t, err) policy := policyResp.Policy @@ -2535,29 +2273,18 @@ func TestACLEndpoint_PolicyDelete(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - existingPolicy, err := upsertTestPolicy(codec, "root", "dc1") - if err != nil { - t.Fatalf("err: %v", err) - } + existingPolicy, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") + require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLPolicyDeleteRequest{ Datacenter: "dc1", PolicyID: existingPolicy.ID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -2566,31 +2293,22 @@ require.NoError(t, err) // Make sure the policy is gone - tokenResp, err := retrieveTestPolicy(codec, "root", "dc1", existingPolicy.ID) + tokenResp, err := retrieveTestPolicy(codec, TestDefaultMasterToken, "dc1", existingPolicy.ID) + require.NoError(t, err) require.Nil(t, tokenResp.Policy) } func TestACLEndpoint_PolicyDelete_globalManagement(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + _, srv, _ := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + acl := ACL{srv: srv} req := structs.ACLPolicyDeleteRequest{ Datacenter: "dc1", PolicyID: structs.ACLPolicyGlobalManagementID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -2602,29 +2320,20 @@ func TestACLEndpoint_PolicyList(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - p1, err := upsertTestPolicy(codec, "root", "dc1") + p1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - p2, err := upsertTestPolicy(codec, "root", "dc1") + p2, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLPolicyListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLPolicyListResponse{} @@ -2643,25 +2352,16 @@ func TestACLEndpoint_PolicyResolve(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - p1, err := upsertTestPolicy(codec, "root", "dc1") + p1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - p2, err := upsertTestPolicy(codec, "root", "dc1") + p2, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} policies := []string{p1.ID, p2.ID} @@ -2670,15 +2370,15 @@ Datacenter: "dc1", ACLToken: structs.ACLToken{ Policies: []structs.ACLTokenPolicyLink{ - structs.ACLTokenPolicyLink{ + { ID: p1.ID, }, - structs.ACLTokenPolicyLink{ + { ID: p2.ID, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } token := structs.ACLToken{} err = acl.TokenSet(&tokenUpsertReq, &token) @@ -2698,27 +2398,18 @@ func TestACLEndpoint_RoleRead(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - role, err := upsertTestRole(codec, "root", "dc1") + role, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLRoleGetRequest{ Datacenter: "dc1", RoleID: role.ID, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLRoleResponse{} @@ -2731,31 +2422,22 @@ func TestACLEndpoint_RoleBatchRead(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - r1, err := upsertTestRole(codec, "root", "dc1") + r1, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - r2, err := upsertTestRole(codec, "root", "dc1") + r2, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} roles := []string{r1.ID, r2.ID} req := structs.ACLRoleBatchGetRequest{ Datacenter: "dc1", RoleIDs: roles, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLRoleBatchResponse{} @@ -2768,24 +2450,15 @@ func TestACLEndpoint_RoleSet(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + acl := ACL{srv: srv} var roleID string - testPolicy1, err := upsertTestPolicy(codec, "root", "dc1") + testPolicy1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - testPolicy2, err := upsertTestPolicy(codec, "root", "dc1") + testPolicy2, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) t.Run("Create it", func(t *testing.T) { @@ -2795,12 +2468,18 @@ Description: "foobar", Name: "baz", Policies: []structs.ACLRolePolicyLink{ - structs.ACLRolePolicyLink{ + { ID: testPolicy1.ID, }, }, + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo", + Datacenter: "bar", + }, + }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -2809,7 +2488,7 @@ require.NotNil(t, resp.ID) // Get the role directly to validate that it exists - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role @@ -2818,6 +2497,9 @@ require.Equal(t, role.Name, "baz") require.Len(t, role.Policies, 1) require.Equal(t, testPolicy1.ID, role.Policies[0].ID) + require.Len(t, role.NodeIdentities, 1) + require.Equal(t, "foo", role.NodeIdentities[0].NodeName) + require.Equal(t, "bar", role.NodeIdentities[0].Datacenter) roleID = role.ID }) @@ -2830,12 +2512,12 @@ Description: "bat", Name: "bar", Policies: []structs.ACLRolePolicyLink{ - structs.ACLRolePolicyLink{ + { ID: testPolicy2.ID, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -2844,7 +2526,7 @@ require.NotNil(t, resp.ID) // Get the role directly to validate that it exists - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role @@ -2853,12 +2535,13 @@ require.Equal(t, role.Name, "bar") require.Len(t, role.Policies, 1) require.Equal(t, testPolicy2.ID, role.Policies[0].ID) + require.Empty(t, role.NodeIdentities) }) t.Run("Create it using Policies linked by id and name", func(t *testing.T) { - policy1, err := upsertTestPolicy(codec, "root", "dc1") + policy1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - policy2, err := upsertTestPolicy(codec, "root", "dc1") + policy2, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) req := structs.ACLRoleSetRequest{ @@ -2867,15 +2550,15 @@ Description: "foobar", Name: "baz", Policies: []structs.ACLRolePolicyLink{ - structs.ACLRolePolicyLink{ + { ID: policy1.ID, }, - structs.ACLRolePolicyLink{ + { Name: policy2.Name, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -2885,11 +2568,11 @@ // Delete both policies to ensure that we skip resolving ID->Name // in the returned data. - require.NoError(t, deleteTestPolicy(codec, "root", "dc1", policy1.ID)) - require.NoError(t, deleteTestPolicy(codec, "root", "dc1", policy2.ID)) + require.NoError(t, deleteTestPolicy(codec, TestDefaultMasterToken, "dc1", policy1.ID)) + require.NoError(t, deleteTestPolicy(codec, TestDefaultMasterToken, "dc1", policy2.ID)) // Get the role directly to validate that it exists - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role @@ -2914,15 +2597,15 @@ Description: "foobar", Name: roleNameGen(t), ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: ""}, + {ServiceName: ""}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} err := acl.RoleSet(&req, &resp) - requireErrorContains(t, err, "Service identity is missing the service name field") + testutil.RequireErrorContains(t, err, "Service identity is missing the service name field") }) t.Run("Create it with invalid service identity (too large)", func(t *testing.T) { @@ -2933,10 +2616,10 @@ Description: "foobar", Name: roleNameGen(t), ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: long}, + {ServiceName: long}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -2977,10 +2660,10 @@ Description: "foobar", Name: roleNameGen(t), ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: test.name}, + {ServiceName: test.name}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -2990,7 +2673,7 @@ require.NoError(t, err) // Get the token directly to validate that it exists - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role require.ElementsMatch(t, req.Role.ServiceIdentities, role.ServiceIdentities) @@ -3007,11 +2690,11 @@ Description: "foobar", Name: roleNameGen(t), ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ServiceName: "example"}, - &structs.ACLServiceIdentity{ServiceName: "example"}, + {ServiceName: "example"}, + {ServiceName: "example"}, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -3020,7 +2703,7 @@ require.NoError(t, err) // Get the role directly to validate that it exists - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role require.Len(t, role.ServiceIdentities, 1) @@ -3033,17 +2716,17 @@ Description: "foobar", Name: roleNameGen(t), ServiceIdentities: []*structs.ACLServiceIdentity{ - &structs.ACLServiceIdentity{ + { ServiceName: "example", Datacenters: []string{"dc2", "dc3"}, }, - &structs.ACLServiceIdentity{ + { ServiceName: "example", Datacenters: []string{"dc1", "dc2"}, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -3052,7 +2735,7 @@ require.NoError(t, err) // Get the role directly to validate that it exists - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role require.Len(t, role.ServiceIdentities, 1) @@ -3060,26 +2743,77 @@ require.Equal(t, "example", svcid.ServiceName) require.ElementsMatch(t, []string{"dc1", "dc2", "dc3"}, svcid.Datacenters) }) + + t.Run("invalid node identity - no name", func(t *testing.T) { + req := structs.ACLRoleSetRequest{ + Datacenter: "dc1", + Role: structs.ACLRole{ + Name: roleNameGen(t), + NodeIdentities: []*structs.ACLNodeIdentity{ + { + Datacenter: "dc1", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + + resp := structs.ACLRole{} + + err := acl.RoleSet(&req, &resp) + testutil.RequireErrorContains(t, err, "Node identity is missing the node name field on this role") + }) + + t.Run("invalid node identity - invalid name", func(t *testing.T) { + req := structs.ACLRoleSetRequest{ + Datacenter: "dc1", + Role: structs.ACLRole{ + Name: roleNameGen(t), + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo.bar", + Datacenter: "dc1", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + + resp := structs.ACLRole{} + + err := acl.RoleSet(&req, &resp) + testutil.RequireErrorContains(t, err, "Node identity has an invalid name.") + }) + t.Run("invalid node identity - no datacenter", func(t *testing.T) { + req := structs.ACLRoleSetRequest{ + Datacenter: "dc1", + Role: structs.ACLRole{ + Name: roleNameGen(t), + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + + resp := structs.ACLRole{} + + err := acl.RoleSet(&req, &resp) + testutil.RequireErrorContains(t, err, "Node identity is missing the datacenter field on this role") + }) } func TestACLEndpoint_RoleSet_names(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") + acl := ACL{srv: srv} + testPolicy1, err := upsertTestPolicy(codec, TestDefaultMasterToken, "dc1") - acl := ACL{srv: s1} - - testPolicy1, err := upsertTestPolicy(codec, "root", "dc1") require.NoError(t, err) for _, test := range []struct { @@ -3117,7 +2851,7 @@ t.Run(testName, func(t *testing.T) { // cleanup from a prior insertion that may have succeeded - require.NoError(t, deleteTestRoleByName(codec, "root", "dc1", test.name)) + require.NoError(t, deleteTestRoleByName(codec, TestDefaultMasterToken, "dc1", test.name)) req := structs.ACLRoleSetRequest{ Datacenter: "dc1", @@ -3125,12 +2859,12 @@ Name: test.name, Description: "foobar", Policies: []structs.ACLRolePolicyLink{ - structs.ACLRolePolicyLink{ + { ID: testPolicy1.ID, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLRole{} @@ -3138,7 +2872,7 @@ if test.ok { require.NoError(t, err) - roleResp, err := retrieveTestRole(codec, "root", "dc1", resp.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) role := roleResp.Role require.Equal(t, test.name, role.Name) @@ -3152,27 +2886,18 @@ func TestACLEndpoint_RoleDelete(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + existingRole, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") - existingRole, err := upsertTestRole(codec, "root", "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLRoleDeleteRequest{ Datacenter: "dc1", RoleID: existingRole.ID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var resp string @@ -3181,36 +2906,28 @@ require.NoError(t, err) // Make sure the role is gone - roleResp, err := retrieveTestRole(codec, "root", "dc1", existingRole.ID) + roleResp, err := retrieveTestRole(codec, TestDefaultMasterToken, "dc1", existingRole.ID) + require.NoError(t, err) require.Nil(t, roleResp.Role) } func TestACLEndpoint_RoleList(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - r1, err := upsertTestRole(codec, "root", "dc1") + r1, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - r2, err := upsertTestRole(codec, "root", "dc1") + r2, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLRoleListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLRoleListResponse{} @@ -3223,41 +2940,32 @@ func TestACLEndpoint_RoleResolve(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) t.Run("Normal", func(t *testing.T) { - r1, err := upsertTestRole(codec, "root", "dc1") + r1, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - r2, err := upsertTestRole(codec, "root", "dc1") + r2, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} // Assign the roles to a token tokenUpsertReq := structs.ACLTokenSetRequest{ Datacenter: "dc1", ACLToken: structs.ACLToken{ Roles: []structs.ACLTokenRoleLink{ - structs.ACLTokenRoleLink{ + { ID: r1.ID, }, - structs.ACLTokenRoleLink{ + { ID: r2.ID, }, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } token := structs.ACLToken{} err = acl.TokenSet(&tokenUpsertReq, &token) @@ -3281,21 +2989,12 @@ tempDir, err := ioutil.TempDir("", "consul") require.NoError(t, err) - defer os.RemoveAll(tempDir) + t.Cleanup(func() { os.RemoveAll(tempDir) }) + _, srv, codec := testACLServerWithConfig(t, nil, false) - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - acl := ACL{srv: s1} + acl := ACL{srv: srv} newAuthMethod := func(name string) structs.ACLAuthMethod { return structs.ACLAuthMethod{ @@ -3311,7 +3010,7 @@ req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: reqMethod, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3319,7 +3018,7 @@ require.NoError(t, err) // Get the method directly to validate that it exists - methodResp, err := retrieveTestAuthMethod(codec, "root", "dc1", resp.Name) + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", resp.Name) require.NoError(t, err) method := methodResp.AuthMethod @@ -3335,7 +3034,7 @@ req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: reqMethod, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3345,13 +3044,14 @@ t.Run("Update - allow type to default", func(t *testing.T) { reqMethod := newAuthMethod("test") + reqMethod.DisplayName = "updated display name 1" reqMethod.Description = "test modified 1" reqMethod.Type = "" // unset req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: reqMethod, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3359,23 +3059,25 @@ require.NoError(t, err) // Get the method directly to validate that it exists - methodResp, err := retrieveTestAuthMethod(codec, "root", "dc1", resp.Name) + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", resp.Name) require.NoError(t, err) method := methodResp.AuthMethod require.Equal(t, method.Name, "test") + require.Equal(t, method.DisplayName, "updated display name 1") require.Equal(t, method.Description, "test modified 1") require.Equal(t, method.Type, "testing") }) t.Run("Update - specify type", func(t *testing.T) { reqMethod := newAuthMethod("test") + reqMethod.DisplayName = "updated display name 2" reqMethod.Description = "test modified 2" req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: reqMethod, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3383,11 +3085,12 @@ require.NoError(t, err) // Get the method directly to validate that it exists - methodResp, err := retrieveTestAuthMethod(codec, "root", "dc1", resp.Name) + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", resp.Name) require.NoError(t, err) method := methodResp.AuthMethod require.Equal(t, method.Name, "test") + require.Equal(t, method.DisplayName, "updated display name 2") require.Equal(t, method.Description, "test modified 2") require.Equal(t, method.Type, "testing") }) @@ -3396,7 +3099,7 @@ req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: newAuthMethod(""), - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3412,7 +3115,7 @@ Description: "invalid test", Type: "invalid", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3452,7 +3155,7 @@ req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: newAuthMethod(test.name), - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} @@ -3462,7 +3165,7 @@ require.NoError(t, err) // Get the method directly to validate that it exists - methodResp, err := retrieveTestAuthMethod(codec, "root", "dc1", resp.Name) + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", resp.Name) require.NoError(t, err) method := methodResp.AuthMethod @@ -3473,36 +3176,110 @@ } }) } + + t.Run("Create with MaxTokenTTL", func(t *testing.T) { + reqMethod := newAuthMethod("test") + reqMethod.MaxTokenTTL = 5 * time.Minute + + req := structs.ACLAuthMethodSetRequest{ + Datacenter: "dc1", + AuthMethod: reqMethod, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + resp := structs.ACLAuthMethod{} + + err := acl.AuthMethodSet(&req, &resp) + require.NoError(t, err) + + // Get the method directly to validate that it exists + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", resp.Name) + require.NoError(t, err) + method := methodResp.AuthMethod + + require.Equal(t, method.Name, "test") + require.Equal(t, method.Description, "test") + require.Equal(t, method.Type, "testing") + require.Equal(t, method.MaxTokenTTL, 5*time.Minute) + }) + + t.Run("Update - change MaxTokenTTL", func(t *testing.T) { + reqMethod := newAuthMethod("test") + reqMethod.DisplayName = "updated display name 2" + reqMethod.Description = "test modified 2" + reqMethod.MaxTokenTTL = 8 * time.Minute + + req := structs.ACLAuthMethodSetRequest{ + Datacenter: "dc1", + AuthMethod: reqMethod, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + resp := structs.ACLAuthMethod{} + + err := acl.AuthMethodSet(&req, &resp) + require.NoError(t, err) + + // Get the method directly to validate that it exists + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", resp.Name) + require.NoError(t, err) + method := methodResp.AuthMethod + + require.Equal(t, method.Name, "test") + require.Equal(t, method.DisplayName, "updated display name 2") + require.Equal(t, method.Description, "test modified 2") + require.Equal(t, method.Type, "testing") + require.Equal(t, method.MaxTokenTTL, 8*time.Minute) + }) + + t.Run("Create with MaxTokenTTL too small", func(t *testing.T) { + reqMethod := newAuthMethod("test") + reqMethod.MaxTokenTTL = 1 * time.Millisecond + + req := structs.ACLAuthMethodSetRequest{ + Datacenter: "dc1", + AuthMethod: reqMethod, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + resp := structs.ACLAuthMethod{} + + err := acl.AuthMethodSet(&req, &resp) + testutil.RequireErrorContains(t, err, "MaxTokenTTL 1ms cannot be less than") + }) + + t.Run("Create with MaxTokenTTL too big", func(t *testing.T) { + reqMethod := newAuthMethod("test") + reqMethod.MaxTokenTTL = 25 * time.Hour + + req := structs.ACLAuthMethodSetRequest{ + Datacenter: "dc1", + AuthMethod: reqMethod, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + resp := structs.ACLAuthMethod{} + + err := acl.AuthMethodSet(&req, &resp) + testutil.RequireErrorContains(t, err, "MaxTokenTTL 25h0m0s cannot be more than") + }) } func TestACLEndpoint_AuthMethodDelete(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) testSessionID := testauth.StartSession() defer testauth.ResetSession(testSessionID) - existingMethod, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID) + existingMethod, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID) require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} t.Run("normal", func(t *testing.T) { req := structs.ACLAuthMethodDeleteRequest{ Datacenter: "dc1", AuthMethodName: existingMethod.Name, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool @@ -3510,7 +3287,7 @@ require.NoError(t, err) // Make sure the method is gone - methodResp, err := retrieveTestAuthMethod(codec, "root", "dc1", existingMethod.Name) + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", existingMethod.Name) require.NoError(t, err) require.Nil(t, methodResp.AuthMethod) }) @@ -3519,7 +3296,7 @@ req := structs.ACLAuthMethodDeleteRequest{ Datacenter: "dc1", AuthMethodName: "missing", - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool @@ -3532,17 +3309,8 @@ func TestACLEndpoint_AuthMethodDelete_RuleAndTokenCascade(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) testSessionID1 := testauth.StartSession() defer testauth.ResetSession(testSessionID1) @@ -3553,7 +3321,7 @@ testauth.InstallSessionToken(testSessionID2, "fake-token2", "default", "abc", "abc123") createToken := func(methodName, bearerToken string) *structs.ACLToken { - acl := ACL{srv: s1} + acl := ACL{srv: srv} resp := structs.ACLToken{} @@ -3568,10 +3336,10 @@ return &resp } - method1, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID1) + method1, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID1) require.NoError(t, err) i1_r1, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", method1.Name, "serviceaccount.name==abc", structs.BindingRuleBindTypeService, @@ -3579,7 +3347,7 @@ ) require.NoError(t, err) i1_r2, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", method1.Name, "serviceaccount.name==def", structs.BindingRuleBindTypeService, @@ -3589,10 +3357,10 @@ i1_t1 := createToken(method1.Name, "fake-token1") i1_t2 := createToken(method1.Name, "fake-token1") - method2, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID2) + method2, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID2) require.NoError(t, err) i2_r1, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", method2.Name, "serviceaccount.name==abc", structs.BindingRuleBindTypeService, @@ -3600,7 +3368,7 @@ ) require.NoError(t, err) i2_r2, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", method2.Name, "serviceaccount.name==def", structs.BindingRuleBindTypeService, @@ -3610,12 +3378,12 @@ i2_t1 := createToken(method2.Name, "fake-token2") i2_t2 := createToken(method2.Name, "fake-token2") - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLAuthMethodDeleteRequest{ Datacenter: "dc1", AuthMethodName: method1.Name, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool @@ -3623,30 +3391,30 @@ require.NoError(t, err) // Make sure the method is gone. - methodResp, err := retrieveTestAuthMethod(codec, "root", "dc1", method1.Name) + methodResp, err := retrieveTestAuthMethod(codec, TestDefaultMasterToken, "dc1", method1.Name) require.NoError(t, err) require.Nil(t, methodResp.AuthMethod) // Make sure the rules and tokens are gone. for _, id := range []string{i1_r1.ID, i1_r2.ID} { - ruleResp, err := retrieveTestBindingRule(codec, "root", "dc1", id) + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", id) require.NoError(t, err) require.Nil(t, ruleResp.BindingRule) } for _, id := range []string{i1_t1.AccessorID, i1_t2.AccessorID} { - tokResp, err := retrieveTestToken(codec, "root", "dc1", id) + tokResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", id) require.NoError(t, err) require.Nil(t, tokResp.Token) } // Make sure the rules and tokens for the untouched auth method are still there. for _, id := range []string{i2_r1.ID, i2_r2.ID} { - ruleResp, err := retrieveTestBindingRule(codec, "root", "dc1", id) + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", id) require.NoError(t, err) require.NotNil(t, ruleResp.BindingRule) } for _, id := range []string{i2_t1.AccessorID, i2_t2.AccessorID} { - tokResp, err := retrieveTestToken(codec, "root", "dc1", id) + tokResp, err := retrieveTestToken(codec, TestDefaultMasterToken, "dc1", id) require.NoError(t, err) require.NotNil(t, tokResp.Token) } @@ -3655,29 +3423,20 @@ func TestACLEndpoint_AuthMethodList(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - i1, err := upsertTestAuthMethod(codec, "root", "dc1", "") + i1, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) - i2, err := upsertTestAuthMethod(codec, "root", "dc1", "") + i2, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLAuthMethodListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethodListResponse{} @@ -3690,25 +3449,16 @@ func TestACLEndpoint_BindingRuleSet(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + acl := ACL{srv: srv} - acl := ACL{srv: s1} var ruleID string - testAuthMethod, err := upsertTestAuthMethod(codec, "root", "dc1", "") + testAuthMethod, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) - otherTestAuthMethod, err := upsertTestAuthMethod(codec, "root", "dc1", "") + otherTestAuthMethod, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) newRule := func() structs.ACLBindingRule { @@ -3725,7 +3475,7 @@ req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", BindingRule: reqRule, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -3737,7 +3487,7 @@ req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", BindingRule: reqRule, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -3753,7 +3503,7 @@ req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", BindingRule: reqRule, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -3762,7 +3512,7 @@ require.NotNil(t, resp.ID) // Get the rule directly to validate that it exists - ruleResp, err := retrieveTestBindingRule(codec, "root", "dc1", resp.ID) + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) rule := ruleResp.BindingRule @@ -3776,6 +3526,37 @@ ruleID = rule.ID }) + t.Run("Bind Node", func(t *testing.T) { + req := structs.ACLBindingRuleSetRequest{ + Datacenter: "dc1", + BindingRule: structs.ACLBindingRule{ + Description: "foobar", + AuthMethod: testAuthMethod.Name, + Selector: "serviceaccount.name==abc", + BindType: structs.BindingRuleBindTypeNode, + BindName: "test-node", + }, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + var resp structs.ACLBindingRule + + err := acl.BindingRuleSet(&req, &resp) + require.NoError(t, err) + require.NotNil(t, resp.ID) + + // Get the rule directly to validate that it exists + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", resp.ID) + require.NoError(t, err) + rule := ruleResp.BindingRule + + require.NotEmpty(t, rule.ID) + require.Equal(t, rule.Description, "foobar") + require.Equal(t, rule.AuthMethod, testAuthMethod.Name) + require.Equal(t, "serviceaccount.name==abc", rule.Selector) + require.Equal(t, structs.BindingRuleBindTypeNode, rule.BindType) + require.Equal(t, "test-node", rule.BindName) + }) + t.Run("Update fails; cannot change method name", func(t *testing.T) { reqRule := newRule() reqRule.ID = ruleID @@ -3795,7 +3576,7 @@ req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", BindingRule: reqRule, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -3804,7 +3585,7 @@ require.NotNil(t, resp.ID) // Get the rule directly to validate that it exists - ruleResp, err := retrieveTestBindingRule(codec, "root", "dc1", resp.ID) + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) rule := ruleResp.BindingRule @@ -3827,7 +3608,7 @@ req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", BindingRule: reqRule, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -3836,7 +3617,7 @@ require.NotNil(t, resp.ID) // Get the rule directly to validate that it exists - ruleResp, err := retrieveTestBindingRule(codec, "root", "dc1", resp.ID) + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", resp.ID) require.NoError(t, err) rule := ruleResp.BindingRule @@ -3925,23 +3706,14 @@ func TestACLEndpoint_BindingRuleDelete(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testAuthMethod, err := upsertTestAuthMethod(codec, "root", "dc1", "") + testAuthMethod, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) existingRule, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", testAuthMethod.Name, "serviceaccount.name==abc", structs.BindingRuleBindTypeService, @@ -3949,13 +3721,13 @@ ) require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} t.Run("normal", func(t *testing.T) { req := structs.ACLBindingRuleDeleteRequest{ Datacenter: "dc1", BindingRuleID: existingRule.ID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool @@ -3963,7 +3735,7 @@ require.NoError(t, err) // Make sure the rule is gone - ruleResp, err := retrieveTestBindingRule(codec, "root", "dc1", existingRule.ID) + ruleResp, err := retrieveTestBindingRule(codec, TestDefaultMasterToken, "dc1", existingRule.ID) require.NoError(t, err) require.Nil(t, ruleResp.BindingRule) }) @@ -3975,7 +3747,7 @@ req := structs.ACLBindingRuleDeleteRequest{ Datacenter: "dc1", BindingRuleID: fakeID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool @@ -3987,23 +3759,14 @@ func TestACLEndpoint_BindingRuleList(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testAuthMethod, err := upsertTestAuthMethod(codec, "root", "dc1", "") + testAuthMethod, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", "") require.NoError(t, err) r1, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", testAuthMethod.Name, "serviceaccount.name==abc", structs.BindingRuleBindTypeService, @@ -4012,7 +3775,7 @@ require.NoError(t, err) r2, err := upsertTestBindingRule( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", testAuthMethod.Name, "serviceaccount.name==def", structs.BindingRuleBindTypeService, @@ -4020,11 +3783,11 @@ ) require.NoError(t, err) - acl := ACL{srv: s1} + acl := ACL{srv: srv} req := structs.ACLBindingRuleListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRuleListResponse{} @@ -4037,38 +3800,20 @@ func TestACLEndpoint_SecureIntroEndpoints_LocalTokensDisabled(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, s1, _ := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + }, false) + waitForLeaderEstablishment(t, s1) - dir2, s2 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true + _, s2, _ := testACLServerWithConfig(t, func(c *Config) { c.Datacenter = "dc2" c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second // disable local tokens c.ACLTokenReplication = false - }) - defer os.RemoveAll(dir2) - defer s2.Shutdown() - codec2 := rpcClient(t, s2) - defer codec2.Close() - - s2.tokens.UpdateReplicationToken("root", tokenStore.TokenSourceConfig) - - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc2") + }, true) + waitForLeaderEstablishment(t, s2) // Try to join joinWAN(t, s2, s1) @@ -4082,27 +3827,27 @@ errString := errAuthMethodsRequireTokenReplication.Error() t.Run("AuthMethodRead", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.AuthMethodRead(&structs.ACLAuthMethodGetRequest{Datacenter: "dc2"}, &structs.ACLAuthMethodResponse{}), errString, ) }) t.Run("AuthMethodSet", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.AuthMethodSet(&structs.ACLAuthMethodSetRequest{Datacenter: "dc2"}, &structs.ACLAuthMethod{}), errString, ) }) t.Run("AuthMethodDelete", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.AuthMethodDelete(&structs.ACLAuthMethodDeleteRequest{Datacenter: "dc2"}, &ignored), errString, ) }) t.Run("AuthMethodList", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.AuthMethodList(&structs.ACLAuthMethodListRequest{Datacenter: "dc2"}, &structs.ACLAuthMethodListResponse{}), errString, @@ -4110,27 +3855,27 @@ }) t.Run("BindingRuleRead", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.BindingRuleRead(&structs.ACLBindingRuleGetRequest{Datacenter: "dc2"}, &structs.ACLBindingRuleResponse{}), errString, ) }) t.Run("BindingRuleSet", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.BindingRuleSet(&structs.ACLBindingRuleSetRequest{Datacenter: "dc2"}, &structs.ACLBindingRule{}), errString, ) }) t.Run("BindingRuleDelete", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.BindingRuleDelete(&structs.ACLBindingRuleDeleteRequest{Datacenter: "dc2"}, &ignored), errString, ) }) t.Run("BindingRuleList", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.BindingRuleList(&structs.ACLBindingRuleListRequest{Datacenter: "dc2"}, &structs.ACLBindingRuleListResponse{}), errString, @@ -4138,14 +3883,14 @@ }) t.Run("Login", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.Login(&structs.ACLLoginRequest{Datacenter: "dc2"}, &structs.ACLToken{}), errString, ) }) t.Run("Logout", func(t *testing.T) { - requireErrorContains(t, + testutil.RequireErrorContains(t, acl2.Logout(&structs.ACLLogoutRequest{Datacenter: "dc2"}, &ignored), errString, ) @@ -4155,38 +3900,20 @@ func TestACLEndpoint_SecureIntroEndpoints_OnlyCreateLocalData(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, s1, codec1 := testACLServerWithConfig(t, func(c *Config) { c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec1 := rpcClient(t, s1) - defer codec1.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + }, false) + waitForLeaderEstablishment(t, s1) - dir2, s2 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true + _, s2, codec2 := testACLServerWithConfig(t, func(c *Config) { c.Datacenter = "dc2" c.ACLTokenMinExpirationTTL = 10 * time.Millisecond c.ACLTokenMaxExpirationTTL = 5 * time.Second // enable token replication so secure intro works c.ACLTokenReplication = true - }) - defer os.RemoveAll(dir2) - defer s2.Shutdown() - codec2 := rpcClient(t, s2) - defer codec2.Close() - - s2.tokens.UpdateReplicationToken("root", tokenStore.TokenSourceConfig) - - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc2") + }, true) + waitForLeaderEstablishment(t, s2) // Try to join joinWAN(t, s2, s1) @@ -4232,19 +3959,19 @@ "SessionID": testSessionID_2, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} require.NoError(t, acl2.AuthMethodSet(&req, &resp)) // present in dc2 - resp2, err := retrieveTestAuthMethod(codec2, "root", "dc2", "testmethod") + resp2, err := retrieveTestAuthMethod(codec2, TestDefaultMasterToken, "dc2", "testmethod") require.NoError(t, err) require.NotNil(t, resp2.AuthMethod) require.Equal(t, "test original", resp2.AuthMethod.Description) // absent in dc1 - resp2, err = retrieveTestAuthMethod(codec1, "root", "dc1", "testmethod") + resp2, err = retrieveTestAuthMethod(codec1, TestDefaultMasterToken, "dc1", "testmethod") require.NoError(t, err) require.Nil(t, resp2.AuthMethod) }) @@ -4259,19 +3986,19 @@ "SessionID": testSessionID_2, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethod{} require.NoError(t, acl2.AuthMethodSet(&req, &resp)) // present in dc2 - resp2, err := retrieveTestAuthMethod(codec2, "root", "dc2", "testmethod") + resp2, err := retrieveTestAuthMethod(codec2, TestDefaultMasterToken, "dc2", "testmethod") require.NoError(t, err) require.NotNil(t, resp2.AuthMethod) require.Equal(t, "test updated", resp2.AuthMethod.Description) // absent in dc1 - resp2, err = retrieveTestAuthMethod(codec1, "root", "dc1", "testmethod") + resp2, err = retrieveTestAuthMethod(codec1, TestDefaultMasterToken, "dc1", "testmethod") require.NoError(t, err) require.Nil(t, resp2.AuthMethod) }) @@ -4281,7 +4008,7 @@ req := structs.ACLAuthMethodGetRequest{ Datacenter: "dc2", AuthMethodName: "testmethod", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethodResponse{} require.NoError(t, acl2.AuthMethodRead(&req, &resp)) @@ -4292,7 +4019,7 @@ req = structs.ACLAuthMethodGetRequest{ Datacenter: "dc1", AuthMethodName: "testmethod", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp = structs.ACLAuthMethodResponse{} require.NoError(t, acl.AuthMethodRead(&req, &resp)) @@ -4303,7 +4030,7 @@ // present in dc2 req := structs.ACLAuthMethodListRequest{ Datacenter: "dc2", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLAuthMethodListResponse{} require.NoError(t, acl2.AuthMethodList(&req, &resp)) @@ -4312,7 +4039,7 @@ // absent in dc1 req = structs.ACLAuthMethodListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp = structs.ACLAuthMethodListResponse{} require.NoError(t, acl.AuthMethodList(&req, &resp)) @@ -4329,7 +4056,7 @@ BindType: structs.BindingRuleBindTypeService, BindName: "${serviceaccount.name}", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -4338,12 +4065,12 @@ ruleID = resp.ID // present in dc2 - resp2, err := retrieveTestBindingRule(codec2, "root", "dc2", ruleID) + resp2, err := retrieveTestBindingRule(codec2, TestDefaultMasterToken, "dc2", ruleID) require.NoError(t, err) require.NotNil(t, resp2.BindingRule) require.Equal(t, "test original", resp2.BindingRule.Description) // absent in dc1 - resp2, err = retrieveTestBindingRule(codec1, "root", "dc1", ruleID) + resp2, err = retrieveTestBindingRule(codec1, TestDefaultMasterToken, "dc1", ruleID) require.NoError(t, err) require.Nil(t, resp2.BindingRule) }) @@ -4358,7 +4085,7 @@ BindType: structs.BindingRuleBindTypeService, BindName: "${serviceaccount.name}", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRule{} @@ -4367,12 +4094,12 @@ ruleID = resp.ID // present in dc2 - resp2, err := retrieveTestBindingRule(codec2, "root", "dc2", ruleID) + resp2, err := retrieveTestBindingRule(codec2, TestDefaultMasterToken, "dc2", ruleID) require.NoError(t, err) require.NotNil(t, resp2.BindingRule) require.Equal(t, "test updated", resp2.BindingRule.Description) // absent in dc1 - resp2, err = retrieveTestBindingRule(codec1, "root", "dc1", ruleID) + resp2, err = retrieveTestBindingRule(codec1, TestDefaultMasterToken, "dc1", ruleID) require.NoError(t, err) require.Nil(t, resp2.BindingRule) }) @@ -4382,7 +4109,7 @@ req := structs.ACLBindingRuleGetRequest{ Datacenter: "dc2", BindingRuleID: ruleID, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRuleResponse{} require.NoError(t, acl2.BindingRuleRead(&req, &resp)) @@ -4393,7 +4120,7 @@ req = structs.ACLBindingRuleGetRequest{ Datacenter: "dc1", BindingRuleID: ruleID, - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp = structs.ACLBindingRuleResponse{} require.NoError(t, acl.BindingRuleRead(&req, &resp)) @@ -4404,7 +4131,7 @@ // present in dc2 req := structs.ACLBindingRuleListRequest{ Datacenter: "dc2", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp := structs.ACLBindingRuleListResponse{} require.NoError(t, acl2.BindingRuleList(&req, &resp)) @@ -4413,7 +4140,7 @@ // absent in dc1 req = structs.ACLBindingRuleListRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } resp = structs.ACLBindingRuleListResponse{} require.NoError(t, acl.BindingRuleList(&req, &resp)) @@ -4435,13 +4162,13 @@ remoteToken = &resp // present in dc2 - resp2, err := retrieveTestToken(codec2, "root", "dc2", remoteToken.AccessorID) + resp2, err := retrieveTestToken(codec2, TestDefaultMasterToken, "dc2", remoteToken.AccessorID) require.NoError(t, err) require.NotNil(t, resp2.Token) require.Len(t, resp2.Token.ServiceIdentities, 1) require.Equal(t, "web2", resp2.Token.ServiceIdentities[0].ServiceName) // absent in dc1 - resp2, err = retrieveTestToken(codec1, "root", "dc1", remoteToken.AccessorID) + resp2, err = retrieveTestToken(codec1, TestDefaultMasterToken, "dc1", remoteToken.AccessorID) require.NoError(t, err) require.Nil(t, resp2.Token) }) @@ -4460,7 +4187,7 @@ "SessionID": testSessionID_1, }, }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } respAM := structs.ACLAuthMethod{} require.NoError(t, acl.AuthMethodSet(&reqAM, &respAM)) @@ -4472,7 +4199,7 @@ BindType: structs.BindingRuleBindTypeService, BindName: "${serviceaccount.name}", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } respBR := structs.ACLBindingRule{} @@ -4494,13 +4221,13 @@ primaryToken = &resp // present in dc1 - resp2, err := retrieveTestToken(codec1, "root", "dc1", primaryToken.AccessorID) + resp2, err := retrieveTestToken(codec1, TestDefaultMasterToken, "dc1", primaryToken.AccessorID) require.NoError(t, err) require.NotNil(t, resp2.Token) require.Len(t, resp2.Token.ServiceIdentities, 1) require.Equal(t, "web1", resp2.Token.ServiceIdentities[0].ServiceName) // absent in dc2 - resp2, err = retrieveTestToken(codec2, "root", "dc2", primaryToken.AccessorID) + resp2, err = retrieveTestToken(codec2, TestDefaultMasterToken, "dc2", primaryToken.AccessorID) require.NoError(t, err) require.Nil(t, resp2.Token) }) @@ -4518,11 +4245,11 @@ require.NoError(t, acl.Logout(&req, &ignored)) // absent in dc2 - resp2, err := retrieveTestToken(codec2, "root", "dc2", remoteToken.AccessorID) + resp2, err := retrieveTestToken(codec2, TestDefaultMasterToken, "dc2", remoteToken.AccessorID) require.NoError(t, err) require.Nil(t, resp2.Token) // absent in dc1 - resp2, err = retrieveTestToken(codec1, "root", "dc1", remoteToken.AccessorID) + resp2, err = retrieveTestToken(codec1, TestDefaultMasterToken, "dc1", remoteToken.AccessorID) require.NoError(t, err) require.Nil(t, resp2.Token) }) @@ -4534,16 +4261,16 @@ } var ignored bool - requireErrorContains(t, acl.Logout(&req, &ignored), "ACL not found") + testutil.RequireErrorContains(t, acl.Logout(&req, &ignored), "ACL not found") // present in dc1 - resp2, err := retrieveTestToken(codec1, "root", "dc1", primaryToken.AccessorID) + resp2, err := retrieveTestToken(codec1, TestDefaultMasterToken, "dc1", primaryToken.AccessorID) require.NoError(t, err) require.NotNil(t, resp2.Token) require.Len(t, resp2.Token.ServiceIdentities, 1) require.Equal(t, "web1", resp2.Token.ServiceIdentities[0].ServiceName) // absent in dc2 - resp2, err = retrieveTestToken(codec2, "root", "dc2", primaryToken.AccessorID) + resp2, err = retrieveTestToken(codec2, TestDefaultMasterToken, "dc2", primaryToken.AccessorID) require.NoError(t, err) require.Nil(t, resp2.Token) }) @@ -4555,18 +4282,18 @@ req := structs.ACLBindingRuleDeleteRequest{ Datacenter: "dc2", BindingRuleID: ruleID, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool require.NoError(t, acl2.BindingRuleDelete(&req, &ignored)) // absent in dc2 - resp2, err := retrieveTestBindingRule(codec2, "root", "dc2", ruleID) + resp2, err := retrieveTestBindingRule(codec2, TestDefaultMasterToken, "dc2", ruleID) require.NoError(t, err) require.Nil(t, resp2.BindingRule) // absent in dc1 - resp2, err = retrieveTestBindingRule(codec1, "root", "dc1", ruleID) + resp2, err = retrieveTestBindingRule(codec1, TestDefaultMasterToken, "dc1", ruleID) require.NoError(t, err) require.Nil(t, resp2.BindingRule) }) @@ -4575,18 +4302,18 @@ req := structs.ACLAuthMethodDeleteRequest{ Datacenter: "dc2", AuthMethodName: "testmethod", - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool require.NoError(t, acl2.AuthMethodDelete(&req, &ignored)) // absent in dc2 - resp2, err := retrieveTestAuthMethod(codec2, "root", "dc2", "testmethod") + resp2, err := retrieveTestAuthMethod(codec2, TestDefaultMasterToken, "dc2", "testmethod") require.NoError(t, err) require.Nil(t, resp2.AuthMethod) // absent in dc1 - resp2, err = retrieveTestAuthMethod(codec1, "root", "dc1", "testmethod") + resp2, err = retrieveTestAuthMethod(codec1, TestDefaultMasterToken, "dc1", "testmethod") require.NoError(t, err) require.Nil(t, resp2.AuthMethod) }) @@ -4595,19 +4322,10 @@ func TestACLEndpoint_Login(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - acl := ACL{srv: s1} + acl := ACL{srv: srv} testSessionID := testauth.StartSession() defer testauth.ResetSession(testSessionID) @@ -4632,13 +4350,18 @@ "fake-monolith", // 2 rules (one of each) "default", "monolith", "ghi789", ) + testauth.InstallSessionToken( + testSessionID, + "fake-node", + "default", "mynode", "jkl101", + ) - method, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID) + method, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID) require.NoError(t, err) // 'fake-db' rules ruleDB, err := upsertTestBindingRule( - codec, "root", "dc1", method.Name, + codec, TestDefaultMasterToken, "dc1", method.Name, "serviceaccount.namespace==default and serviceaccount.name==db", structs.BindingRuleBindTypeService, "method-${serviceaccount.name}", @@ -4647,7 +4370,7 @@ // 'fake-vault' rules _, err = upsertTestBindingRule( - codec, "root", "dc1", method.Name, + codec, TestDefaultMasterToken, "dc1", method.Name, "serviceaccount.namespace==default and serviceaccount.name==vault", structs.BindingRuleBindTypeRole, "method-${serviceaccount.name}", @@ -4656,20 +4379,29 @@ // 'fake-monolith' rules _, err = upsertTestBindingRule( - codec, "root", "dc1", method.Name, + codec, TestDefaultMasterToken, "dc1", method.Name, "serviceaccount.namespace==default and serviceaccount.name==monolith", structs.BindingRuleBindTypeService, "method-${serviceaccount.name}", ) require.NoError(t, err) _, err = upsertTestBindingRule( - codec, "root", "dc1", method.Name, + codec, TestDefaultMasterToken, "dc1", method.Name, "serviceaccount.namespace==default and serviceaccount.name==monolith", structs.BindingRuleBindTypeRole, "method-${serviceaccount.name}", ) require.NoError(t, err) + // node identity rule + _, err = upsertTestBindingRule( + codec, TestDefaultMasterToken, "dc1", method.Name, + "serviceaccount.namespace==default and serviceaccount.name==mynode", + structs.BindingRuleBindTypeNode, + "${serviceaccount.name}", + ) + require.NoError(t, err) + t.Run("do not provide a token", func(t *testing.T) { req := structs.ACLLoginRequest{ Auth: &structs.ACLLoginParams{ @@ -4682,7 +4414,7 @@ req.Token = "nope" resp := structs.ACLToken{} - requireErrorContains(t, acl.Login(&req, &resp), "do not provide a token") + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "do not provide a token") }) t.Run("unknown method", func(t *testing.T) { @@ -4696,7 +4428,7 @@ } resp := structs.ACLToken{} - requireErrorContains(t, acl.Login(&req, &resp), "ACL not found") + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "ACL not found") }) t.Run("invalid method token", func(t *testing.T) { @@ -4724,7 +4456,7 @@ } resp := structs.ACLToken{} - requireErrorContains(t, acl.Login(&req, &resp), "Permission denied") + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "Permission denied") }) t.Run("valid method token 1 role binding and role does not exist", func(t *testing.T) { @@ -4738,7 +4470,7 @@ } resp := structs.ACLToken{} - requireErrorContains(t, acl.Login(&req, &resp), "Permission denied") + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "Permission denied") }) // create the role so that the bindtype=role login works @@ -4749,7 +4481,7 @@ Role: structs.ACLRole{ Name: "method-vault", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out structs.ACLRole @@ -4812,7 +4544,7 @@ Role: structs.ACLRole{ Name: "method-monolith", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out structs.ACLRole @@ -4870,6 +4602,30 @@ require.Equal(t, "method-db", svcid.ServiceName) }) + t.Run("valid bearer token 1 node binding", func(t *testing.T) { + req := structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: "fake-node", + Meta: map[string]string{"node": "true"}, + }, + Datacenter: "dc1", + } + resp := structs.ACLToken{} + + require.NoError(t, acl.Login(&req, &resp)) + + require.Equal(t, method.Name, resp.AuthMethod) + require.Equal(t, `token created via login: {"node":"true"}`, resp.Description) + require.True(t, resp.Local) + require.Empty(t, resp.Roles) + require.Empty(t, resp.ServiceIdentities) + require.Len(t, resp.NodeIdentities, 1) + nodeid := resp.NodeIdentities[0] + require.Equal(t, "mynode", nodeid.NodeName) + require.Equal(t, "dc1", nodeid.Datacenter) + }) + { req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", @@ -4879,7 +4635,7 @@ BindName: ruleDB.BindName, Selector: "", }, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var out structs.ACLBindingRule @@ -4923,7 +4679,7 @@ req := structs.ACLAuthMethodSetRequest{ Datacenter: "dc1", AuthMethod: updated, - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored structs.ACLAuthMethod @@ -4943,26 +4699,228 @@ } resp := structs.ACLToken{} - requireErrorContains(t, acl.Login(&req, &resp), "ACL not found") + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "ACL not found") }) } -func TestACLEndpoint_Login_k8s(t *testing.T) { +func TestACLEndpoint_Login_with_MaxTokenTTL(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + + acl := ACL{srv: srv} + + testSessionID := testauth.StartSession() + defer testauth.ResetSession(testSessionID) + + testauth.InstallSessionToken( + testSessionID, + "fake-web", // no rules + "default", "web", "abc123", + ) + + method, err := upsertTestCustomizedAuthMethod(codec, TestDefaultMasterToken, "dc1", func(method *structs.ACLAuthMethod) { + method.MaxTokenTTL = 5 * time.Minute + method.Config = map[string]interface{}{ + "SessionID": testSessionID, + } }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + require.NoError(t, err) + + _, err = upsertTestBindingRule( + codec, TestDefaultMasterToken, "dc1", method.Name, + "", + structs.BindingRuleBindTypeService, + "web", + ) + require.NoError(t, err) + + // Create a token. + req := structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: "fake-web", + Meta: map[string]string{"pod": "pod1"}, + }, + Datacenter: "dc1", + } + + resp := structs.ACLToken{} + require.NoError(t, acl.Login(&req, &resp)) + + got := &resp + got.CreateIndex = 0 + got.ModifyIndex = 0 + got.AccessorID = "" + got.SecretID = "" + got.Hash = nil + + defaultEntMeta := structs.DefaultEnterpriseMeta() + expect := &structs.ACLToken{ + AuthMethod: method.Name, + Description: `token created via login: {"pod":"pod1"}`, + Local: true, + CreateTime: got.CreateTime, + ExpirationTime: timePointer(got.CreateTime.Add(method.MaxTokenTTL)), + ServiceIdentities: []*structs.ACLServiceIdentity{ + {ServiceName: "web"}, + }, + EnterpriseMeta: *defaultEntMeta, + } + expect.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(defaultEntMeta) + require.Equal(t, got, expect) +} + +func TestACLEndpoint_Login_with_TokenLocality(t *testing.T) { + go t.Parallel() + + _, s1, codec := testACLServerWithConfig(t, func(c *Config) { + c.ACLTokenMinExpirationTTL = 10 * time.Millisecond + c.ACLTokenMaxExpirationTTL = 5 * time.Second + }, false) + + _, s2, _ := testACLServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.ACLTokenMinExpirationTTL = 10 * time.Millisecond + c.ACLTokenMaxExpirationTTL = 5 * time.Second + // token replication is required to test deleting non-local tokens in secondary dc + c.ACLTokenReplication = true + }, true) + + waitForLeaderEstablishment(t, s1) + waitForLeaderEstablishment(t, s2) + + joinWAN(t, s2, s1) - testrpc.WaitForLeader(t, s1.RPC, "dc1") + waitForNewACLs(t, s1) + waitForNewACLs(t, s2) + + // Ensure s2 is authoritative. + waitForNewACLReplication(t, s2, structs.ACLReplicateTokens, 1, 1, 0) acl := ACL{srv: s1} + acl2 := ACL{srv: s2} + + testSessionID := testauth.StartSession() + defer testauth.ResetSession(testSessionID) + + testauth.InstallSessionToken( + testSessionID, + "fake-web", // no rules + "default", "web", "abc123", + ) + + cases := map[string]struct { + tokenLocality string + expectLocal bool + deleteFromReplica bool + }{ + "empty": {tokenLocality: "", expectLocal: true}, + "local": {tokenLocality: "local", expectLocal: true}, + "global dc1 delete": {tokenLocality: "global", expectLocal: false, deleteFromReplica: false}, + "global dc2 delete": {tokenLocality: "global", expectLocal: false, deleteFromReplica: true}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + method, err := upsertTestCustomizedAuthMethod(codec, TestDefaultMasterToken, "dc1", func(method *structs.ACLAuthMethod) { + method.TokenLocality = tc.tokenLocality + method.Config = map[string]interface{}{ + "SessionID": testSessionID, + } + }) + require.NoError(t, err) + + _, err = upsertTestBindingRule( + codec, TestDefaultMasterToken, "dc1", method.Name, + "", + structs.BindingRuleBindTypeService, + "web", + ) + require.NoError(t, err) + + // Create a token. + req := structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: "fake-web", + Meta: map[string]string{"pod": "pod1"}, + }, + Datacenter: "dc1", + } + + resp := structs.ACLToken{} + require.NoError(t, acl.Login(&req, &resp)) + + secretID := resp.SecretID + + got := resp.Clone() + got.CreateIndex = 0 + got.ModifyIndex = 0 + got.AccessorID = "" + got.SecretID = "" + got.Hash = nil + + defaultEntMeta := structs.DefaultEnterpriseMeta() + expect := &structs.ACLToken{ + AuthMethod: method.Name, + Description: `token created via login: {"pod":"pod1"}`, + Local: tc.expectLocal, + CreateTime: got.CreateTime, + ServiceIdentities: []*structs.ACLServiceIdentity{ + {ServiceName: "web"}, + }, + EnterpriseMeta: *defaultEntMeta, + } + expect.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(defaultEntMeta) + require.Equal(t, got, expect) + + // Now turn around and nuke it. + var ( + logoutACL ACL + logoutDC string + ) + if tc.deleteFromReplica { + // wait for it to show up + retry.Run(t, func(r *retry.R) { + var resp structs.ACLTokenResponse + require.NoError(r, acl2.TokenRead(&structs.ACLTokenGetRequest{ + TokenID: secretID, + TokenIDType: structs.ACLTokenSecret, + Datacenter: "dc2", + EnterpriseMeta: *defaultEntMeta, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, + }, &resp)) + require.NotNil(r, resp.Token, "cannot lookup token with secretID %q", secretID) + }) + + logoutACL = acl2 + logoutDC = "dc2" + } else { + logoutACL = acl + logoutDC = "dc1" + } + + logoutReq := structs.ACLLogoutRequest{ + Datacenter: logoutDC, + WriteRequest: structs.WriteRequest{Token: secretID}, + } + + var ignored bool + require.NoError(t, logoutACL.Logout(&logoutReq, &ignored)) + }) + } +} + +func TestACLEndpoint_Login_k8s(t *testing.T) { + t.Parallel() + + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + + acl := ACL{srv: srv} // spin up a fake api server testSrv := kubeauth.StartTestAPIServer(t) @@ -4978,7 +4936,7 @@ ) method, err := upsertTestKubernetesAuthMethod( - codec, "root", "dc1", + codec, TestDefaultMasterToken, "dc1", testSrv.CACert(), testSrv.Addr(), goodJWT_A, @@ -5010,11 +4968,11 @@ } resp := structs.ACLToken{} - requireErrorContains(t, acl.Login(&req, &resp), "Permission denied") + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "Permission denied") }) _, err = upsertTestBindingRule( - codec, "root", "dc1", method.Name, + codec, TestDefaultMasterToken, "dc1", method.Name, "serviceaccount.namespace==default", structs.BindingRuleBindTypeService, "${serviceaccount.name}", @@ -5077,22 +5035,165 @@ }) } -func TestACLEndpoint_Logout(t *testing.T) { +func TestACLEndpoint_Login_jwt(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) - testrpc.WaitForLeader(t, s1.RPC, "dc1") + acl := ACL{srv: srv} - acl := ACL{srv: s1} + // spin up a fake oidc server + oidcServer := startSSOTestServer(t) + pubKey, privKey := oidcServer.SigningKeys() + + type mConfig = map[string]interface{} + cases := map[string]struct { + f func(config mConfig) + issuer string + expectErr string + }{ + "success - jwt static keys": {func(config mConfig) { + config["BoundIssuer"] = "https://legit.issuer.internal/" + config["JWTValidationPubKeys"] = []string{pubKey} + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt jwks": {func(config mConfig) { + config["JWKSURL"] = oidcServer.Addr() + "/certs" + config["JWKSCACert"] = oidcServer.CACert() + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt oidc discovery": {func(config mConfig) { + config["OIDCDiscoveryURL"] = oidcServer.Addr() + config["OIDCDiscoveryCACert"] = oidcServer.CACert() + }, + oidcServer.Addr(), + ""}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + method, err := upsertTestCustomizedAuthMethod(codec, TestDefaultMasterToken, "dc1", func(method *structs.ACLAuthMethod) { + method.Type = "jwt" + method.Config = map[string]interface{}{ + "JWTSupportedAlgs": []string{"ES256"}, + "ClaimMappings": map[string]string{ + "first_name": "name", + "/org/primary": "primary_org", + }, + "ListClaimMappings": map[string]string{ + "https://consul.test/groups": "groups", + }, + "BoundAudiences": []string{"https://consul.test"}, + } + if tc.f != nil { + tc.f(method.Config) + } + }) + require.NoError(t, err) + + t.Run("invalid bearer token", func(t *testing.T) { + req := structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: "invalid", + }, + Datacenter: "dc1", + } + resp := structs.ACLToken{} + + require.Error(t, acl.Login(&req, &resp)) + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Audience: jwt.Audience{"https://consul.test"}, + Issuer: tc.issuer, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + type orgs struct { + Primary string `json:"primary"` + } + + privateCl := struct { + FirstName string `json:"first_name"` + Org orgs `json:"org"` + Groups []string `json:"https://consul.test/groups"` + }{ + FirstName: "jeff2", + Org: orgs{"engineering"}, + Groups: []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT(privKey, cl, privateCl) + require.NoError(t, err) + + t.Run("valid bearer token no bindings", func(t *testing.T) { + req := structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: jwtData, + }, + Datacenter: "dc1", + } + resp := structs.ACLToken{} + + testutil.RequireErrorContains(t, acl.Login(&req, &resp), "Permission denied") + }) + + _, err = upsertTestBindingRule( + codec, TestDefaultMasterToken, "dc1", method.Name, + "value.name == jeff2 and value.primary_org == engineering and foo in list.groups", + structs.BindingRuleBindTypeService, + "test--${value.name}--${value.primary_org}", + ) + require.NoError(t, err) + + t.Run("valid bearer token 1 service binding", func(t *testing.T) { + req := structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method.Name, + BearerToken: jwtData, + }, + Datacenter: "dc1", + } + resp := structs.ACLToken{} + + require.NoError(t, acl.Login(&req, &resp)) + + require.Equal(t, method.Name, resp.AuthMethod) + require.Equal(t, `token created via login`, resp.Description) + require.True(t, resp.Local) + require.Len(t, resp.Roles, 0) + require.Len(t, resp.ServiceIdentities, 1) + svcid := resp.ServiceIdentities[0] + require.Len(t, svcid.Datacenters, 0) + require.Equal(t, "test--jeff2--engineering", svcid.ServiceName) + }) + }) + } +} + +func startSSOTestServer(t *testing.T) *oidcauthtest.Server { + ports := freeport.MustTake(1) + return oidcauthtest.Start(t, oidcauthtest.WithPort( + ports[0], + func() { freeport.Return(ports) }, + )) +} + +func TestACLEndpoint_Logout(t *testing.T) { + t.Parallel() + + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) + + acl := ACL{srv: srv} testSessionID := testauth.StartSession() defer testauth.ResetSession(testSessionID) @@ -5102,11 +5203,11 @@ "default", "db", "def456", ) - method, err := upsertTestAuthMethod(codec, "root", "dc1", testSessionID) + method, err := upsertTestAuthMethod(codec, TestDefaultMasterToken, "dc1", testSessionID) require.NoError(t, err) _, err = upsertTestBindingRule( - codec, "root", "dc1", method.Name, + codec, TestDefaultMasterToken, "dc1", method.Name, "", structs.BindingRuleBindTypeService, "method-${serviceaccount.name}", @@ -5116,12 +5217,12 @@ t.Run("you must provide a token", func(t *testing.T) { req := structs.ACLLogoutRequest{ Datacenter: "dc1", - // WriteRequest: structs.WriteRequest{Token: "root"}, + // WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } req.Token = "" var ignored bool - requireErrorContains(t, acl.Logout(&req, &ignored), "ACL not found") + testutil.RequireErrorContains(t, acl.Logout(&req, &ignored), "ACL not found") }) t.Run("logout from deleted token", func(t *testing.T) { @@ -5130,16 +5231,16 @@ WriteRequest: structs.WriteRequest{Token: "not-found"}, } var ignored bool - requireErrorContains(t, acl.Logout(&req, &ignored), "ACL not found") + testutil.RequireErrorContains(t, acl.Logout(&req, &ignored), "ACL not found") }) t.Run("logout from non-auth method-linked token should fail", func(t *testing.T) { req := structs.ACLLogoutRequest{ Datacenter: "dc1", - WriteRequest: structs.WriteRequest{Token: "root"}, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, } var ignored bool - requireErrorContains(t, acl.Logout(&req, &ignored), "Permission denied") + testutil.RequireErrorContains(t, acl.Logout(&req, &ignored), "Permission denied") }) t.Run("login then logout", func(t *testing.T) { @@ -5789,16 +5890,6 @@ } } -func requireErrorContains(t *testing.T, err error, expectedErrorMessage string) { - t.Helper() - if err == nil { - t.Fatal("An error is expected but got nil.") - } - if !strings.Contains(err.Error(), expectedErrorMessage) { - t.Fatalf("unexpected error: %v", err) - } -} - // 'default/admin' const goodJWT_A = "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImFkbWluLXRva2VuLXFsejQyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNzM4YmMyNTEtNjUzMi0xMWU5LWI2N2YtNDhlNmM4YjhlY2I1Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6YWRtaW4ifQ.ixMlnWrAG7NVuTTKu8cdcYfM7gweS3jlKaEsIBNGOVEjPE7rtXtgMkAwjQTdYR08_0QBjkgzy5fQC5ZNyglSwONJ-bPaXGvhoH1cTnRi1dz9H_63CfqOCvQP1sbdkMeRxNTGVAyWZT76rXoCUIfHP4LY2I8aab0KN9FTIcgZRF0XPTtT70UwGIrSmRpxW38zjiy2ymWL01cc5VWGhJqVysmWmYk3wNp0h5N57H_MOrz4apQR4pKaamzskzjLxO55gpbmZFC76qWuUdexAR7DT2fpbHLOw90atN_NlLMY-VrXyW3-Ei5EhYaVreMB9PSpKwkrA4jULITohV-sxpa1LA" diff -Nru consul-1.7.4+dfsg1/agent/consul/acl.go consul-1.8.7+dfsg1/agent/consul/acl.go --- consul-1.7.4+dfsg1/agent/consul/acl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl.go 2020-12-10 21:46:52.000000000 +0000 @@ -99,10 +99,18 @@ return nil } +func (id *missingIdentity) NodeIdentityList() []*structs.ACLNodeIdentity { + return nil +} + func (id *missingIdentity) IsExpired(asOf time.Time) bool { return false } +func (id *missingIdentity) IsLocal() bool { + return false +} + func (id *missingIdentity) EnterpriseMetadata() *structs.EnterpriseMeta { return structs.DefaultEnterpriseMeta() } @@ -644,8 +652,9 @@ policyIDs := identity.PolicyIDs() roleIDs := identity.RoleIDs() serviceIdentities := identity.ServiceIdentityList() + nodeIdentities := identity.NodeIdentityList() - if len(policyIDs) == 0 && len(serviceIdentities) == 0 && len(roleIDs) == 0 { + if len(policyIDs) == 0 && len(serviceIdentities) == 0 && len(roleIDs) == 0 && len(nodeIdentities) == 0 { policy := identity.EmbeddedPolicy() if policy != nil { return []*structs.ACLPolicy{policy}, nil @@ -667,14 +676,17 @@ policyIDs = append(policyIDs, link.ID) } serviceIdentities = append(serviceIdentities, role.ServiceIdentities...) + nodeIdentities = append(nodeIdentities, role.NodeIdentityList()...) } // Now deduplicate any policies or service identities that occur more than once. policyIDs = dedupeStringSlice(policyIDs) serviceIdentities = dedupeServiceIdentities(serviceIdentities) + nodeIdentities = dedupeNodeIdentities(nodeIdentities) // Generate synthetic policies for all service identities in effect. syntheticPolicies := r.synthesizePoliciesForServiceIdentities(serviceIdentities, identity.EnterpriseMetadata()) + syntheticPolicies = append(syntheticPolicies, r.synthesizePoliciesForNodeIdentities(nodeIdentities)...) // For the new ACLs policy replication is mandatory for correct operation on servers. Therefore // we only attempt to resolve policies locally @@ -701,6 +713,19 @@ return syntheticPolicies } +func (r *ACLResolver) synthesizePoliciesForNodeIdentities(nodeIdentities []*structs.ACLNodeIdentity) []*structs.ACLPolicy { + if len(nodeIdentities) == 0 { + return nil + } + + syntheticPolicies := make([]*structs.ACLPolicy, 0, len(nodeIdentities)) + for _, n := range nodeIdentities { + syntheticPolicies = append(syntheticPolicies, n.SyntheticPolicy()) + } + + return syntheticPolicies +} + func dedupeServiceIdentities(in []*structs.ACLServiceIdentity) []*structs.ACLServiceIdentity { // From: https://github.com/golang/go/wiki/SliceTricks#in-place-deduplicate-comparable @@ -735,6 +760,38 @@ return in[:j+1] } +func dedupeNodeIdentities(in []*structs.ACLNodeIdentity) []*structs.ACLNodeIdentity { + // From: https://github.com/golang/go/wiki/SliceTricks#in-place-deduplicate-comparable + + if len(in) <= 1 { + return in + } + + sort.Slice(in, func(i, j int) bool { + if in[i].NodeName < in[j].NodeName { + return true + } + + return in[i].Datacenter < in[j].Datacenter + }) + + j := 0 + for i := 1; i < len(in); i++ { + if in[j].NodeName == in[i].NodeName && in[j].Datacenter == in[i].Datacenter { + continue + } + j++ + in[j] = in[i] + } + + // Discard the skipped items. + for i := j + 1; i < len(in); i++ { + in[i] = nil + } + + return in[:j+1] +} + func mergeStringSlice(a, b []string) []string { out := make([]string, 0, len(a)+len(b)) out = append(out, a...) @@ -1113,6 +1170,30 @@ return authz, err } +func (r *ACLResolver) ResolveTokenToIdentity(token string) (structs.ACLIdentity, error) { + if !r.ACLsEnabled() { + return nil, nil + } + + if acl.RootAuthorizer(token) != nil { + return nil, acl.ErrRootDenied + } + + // handle the anonymous token + if token == "" { + token = anonymousToken + } + + if r.delegate.UseLegacyACLs() { + identity, _, err := r.resolveTokenLegacy(token) + return identity, r.disableACLsWhenUpstreamDisabled(err) + } + + defer metrics.MeasureSince([]string{"acl", "ResolveTokenToIdentity"}, time.Now()) + + return r.resolveIdentityFromToken(token) +} + func (r *ACLResolver) ACLsEnabled() bool { // Whether we desire ACLs to be enabled according to configuration if !r.delegate.ACLsEnabled() { @@ -1145,30 +1226,41 @@ // aclFilter is used to filter results from our state store based on ACL rules // configured for the provided token. type aclFilter struct { - authorizer acl.Authorizer - logger hclog.Logger - enforceVersion8 bool + authorizer acl.Authorizer + logger hclog.Logger } // newACLFilter constructs a new aclFilter. -func newACLFilter(authorizer acl.Authorizer, logger hclog.Logger, enforceVersion8 bool) *aclFilter { +func newACLFilter(authorizer acl.Authorizer, logger hclog.Logger) *aclFilter { if logger == nil { logger = hclog.New(&hclog.LoggerOptions{}) } return &aclFilter{ - authorizer: authorizer, - logger: logger, - enforceVersion8: enforceVersion8, + authorizer: authorizer, + logger: logger, } } // allowNode is used to determine if a node is accessible for an ACL. func (f *aclFilter) allowNode(node string, ent *acl.AuthorizerContext) bool { - if !f.enforceVersion8 { - return true + return f.authorizer.NodeRead(node, ent) == acl.Allow +} + +// allowNode is used to determine if the gateway and service are accessible for an ACL +func (f *aclFilter) allowGateway(gs *structs.GatewayService) bool { + var authzContext acl.AuthorizerContext + + // Need read on service and gateway. Gateway may have different EnterpriseMeta so we fill authzContext twice + gs.Gateway.FillAuthzContext(&authzContext) + if !f.allowService(gs.Gateway.Name, &authzContext) { + return false } - return f.authorizer.NodeRead(node, ent) == acl.Allow + gs.Service.FillAuthzContext(&authzContext) + if !f.allowService(gs.Service.Name, &authzContext) { + return false + } + return true } // allowService is used to determine if a service is accessible for an ACL. @@ -1177,18 +1269,12 @@ return true } - if !f.enforceVersion8 && service == structs.ConsulServiceID { - return true - } return f.authorizer.ServiceRead(service, ent) == acl.Allow } // allowSession is used to determine if a session for a node is accessible for // an ACL. func (f *aclFilter) allowSession(node string, ent *acl.AuthorizerContext) bool { - if !f.enforceVersion8 { - return true - } return f.authorizer.SessionRead(node, ent) == acl.Allow } @@ -1324,6 +1410,20 @@ *nodes = csn } +// filterDatacenterCheckServiceNodes is used to filter nodes based on ACL rules. +func (f *aclFilter) filterDatacenterCheckServiceNodes(datacenterNodes *map[string]structs.CheckServiceNodes) { + dn := *datacenterNodes + out := make(map[string]structs.CheckServiceNodes) + for dc, _ := range dn { + nodes := dn[dc] + f.filterCheckServiceNodes(&nodes) + if len(nodes) > 0 { + out[dc] = nodes + } + } + *datacenterNodes = out +} + // filterSessions is used to filter a set of sessions based on ACLs. func (f *aclFilter) filterSessions(sessions *structs.Sessions) { s := *sessions @@ -1424,6 +1524,33 @@ *dump = nd } +// filterServiceDump is used to filter nodes based on ACL rules. +func (f *aclFilter) filterServiceDump(services *structs.ServiceDump) { + svcs := *services + var authzContext acl.AuthorizerContext + + for i := 0; i < len(svcs); i++ { + service := svcs[i] + + if f.allowGateway(service.GatewayService) { + // ServiceDump might only have gateway config and no node information + if service.Node == nil { + continue + } + + service.Service.FillAuthzContext(&authzContext) + if f.allowNode(service.Node.Node, &authzContext) { + continue + } + } + + f.logger.Debug("dropping service from result due to ACLs", "service", service.GatewayService.Service) + svcs = append(svcs[:i], svcs[i+1:]...) + i-- + } + *services = svcs +} + // filterNodes is used to filter through all parts of a node list and remove // elements the provided ACL token cannot access. func (f *aclFilter) filterNodes(nodes *structs.Nodes) { @@ -1688,12 +1815,30 @@ *services = ret } +// filterGatewayServices is used to filter gateway to service mappings based on ACL rules. +func (f *aclFilter) filterGatewayServices(mappings *structs.GatewayServices) { + ret := make(structs.GatewayServices, 0, len(*mappings)) + for _, s := range *mappings { + // This filter only checks ServiceRead on the linked service. + // ServiceRead on the gateway is checked in the GatewayServices endpoint before filtering. + var authzContext acl.AuthorizerContext + s.Service.FillAuthzContext(&authzContext) + + if f.authorizer.ServiceRead(s.Service.Name, &authzContext) != acl.Allow { + f.logger.Debug("dropping service from result due to ACLs", "service", s.Service.String()) + continue + } + ret = append(ret, s) + } + *mappings = ret +} + func (r *ACLResolver) filterACLWithAuthorizer(authorizer acl.Authorizer, subj interface{}) error { if authorizer == nil { return nil } // Create the filter - filt := newACLFilter(authorizer, r.logger, r.config.ACLEnforceVersion8) + filt := newACLFilter(authorizer, r.logger) switch v := subj.(type) { case *structs.CheckServiceNodes: @@ -1702,6 +1847,9 @@ case *structs.IndexedCheckServiceNodes: filt.filterCheckServiceNodes(&v.Nodes) + case *structs.DatacenterIndexedCheckServiceNodes: + filt.filterDatacenterCheckServiceNodes(&v.DatacenterNodes) + case *structs.IndexedCoordinates: filt.filterCoordinates(&v.Coordinates) @@ -1714,6 +1862,9 @@ case *structs.IndexedNodeDump: filt.filterNodeDump(&v.Dump) + case *structs.IndexedServiceDump: + filt.filterServiceDump(&v.Dump) + case *structs.IndexedNodes: filt.filterNodes(&v.Nodes) @@ -1769,6 +1920,10 @@ case *structs.IndexedServiceList: filt.filterServiceList(&v.Services) + + case *structs.GatewayServices: + filt.filterGatewayServices(v) + default: panic(fmt.Errorf("Unhandled type passed to ACL filter: %T %#v", subj, subj)) } @@ -1989,7 +2144,7 @@ var authzContext acl.AuthorizerContext op.FillAuthzContext(&authzContext) - if rule != nil && rule.NodeWrite(op.Node.Node, &authzContext) != acl.Allow { + if rule.NodeWrite(op.Node.Node, &authzContext) != acl.Allow { return acl.ErrPermissionDenied } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_replication_test.go consul-1.8.7+dfsg1/agent/consul/acl_replication_test.go --- consul-1.7.4+dfsg1/agent/consul/acl_replication_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_replication_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,6 +8,7 @@ "time" "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/consul/authmethod/testauth" "github.com/hashicorp/consul/agent/structs" tokenStore "github.com/hashicorp/consul/agent/token" "github.com/hashicorp/consul/sdk/testutil/retry" @@ -349,6 +350,32 @@ tokens = append(tokens, &token) } + // Create an auth method in the primary that can create global tokens + // so that we ensure that these replicate correctly. + testSessionID := testauth.StartSession() + defer testauth.ResetSession(testSessionID) + testauth.InstallSessionToken(testSessionID, "fake-token", "default", "demo", "abc123") + method1, err := upsertTestCustomizedAuthMethod(client, "root", "dc1", func(method *structs.ACLAuthMethod) { + method.TokenLocality = "global" + method.Config = map[string]interface{}{ + "SessionID": testSessionID, + } + }) + require.NoError(t, err) + _, err = upsertTestBindingRule(client, "root", "dc1", method1.Name, "", structs.BindingRuleBindTypeService, "demo") + require.NoError(t, err) + + // Create one token via this process. + methodToken := structs.ACLToken{} + require.NoError(t, s1.RPC("ACL.Login", &structs.ACLLoginRequest{ + Auth: &structs.ACLLoginParams{ + AuthMethod: method1.Name, + BearerToken: "fake-token", + }, + Datacenter: "dc1", + }, &methodToken)) + tokens = append(tokens, &methodToken) + checkSame := func(t *retry.R) { // only account for global tokens - local tokens shouldn't be replicated index, remote, err := s1.fsm.State().ACLTokenList(nil, false, true, "", "", "", nil, nil) @@ -359,6 +386,11 @@ require.Len(t, local, len(remote)) for i, token := range remote { require.Equal(t, token.Hash, local[i].Hash) + + if token.AccessorID == methodToken.AccessorID { + require.Equal(t, method1.Name, token.AuthMethod) + require.Equal(t, method1.Name, local[i].AuthMethod) + } } s2.aclReplicationStatusLock.RLock() diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_replication_types.go consul-1.8.7+dfsg1/agent/consul/acl_replication_types.go --- consul-1.7.4+dfsg1/agent/consul/acl_replication_types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_replication_types.go 2020-12-10 21:46:52.000000000 +0000 @@ -113,6 +113,7 @@ Tokens: r.updated[start:end], CAS: false, AllowMissingLinks: true, + FromReplication: true, } resp, err := srv.raftApply(structs.ACLTokenSetRequestType, &req) @@ -229,7 +230,8 @@ if err != nil { return err } - if respErr, ok := resp.(error); ok && err != nil { + + if respErr, ok := resp.(error); ok { return respErr } @@ -336,9 +338,11 @@ if err != nil { return err } - if respErr, ok := resp.(error); ok && err != nil { + + if respErr, ok := resp.(error); ok { return respErr } + return nil } @@ -364,7 +368,8 @@ if err != nil { return err } - if respErr, ok := resp.(error); ok && err != nil { + + if respErr, ok := resp.(error); ok { return respErr } diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_server.go consul-1.8.7+dfsg1/agent/consul/acl_server.go --- consul-1.7.4+dfsg1/agent/consul/acl_server.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_server.go 2020-12-10 21:46:52.000000000 +0000 @@ -147,10 +147,10 @@ } if !s.config.ACLTokenReplication || s.tokens.ReplicationToken() == "" { + // token replication is off so local tokens are disabled return false } - // token replication is off so local tokens are disabled return true } @@ -222,6 +222,13 @@ return authz, err } +func (s *Server) ResolveTokenToIdentity(token string) (structs.ACLIdentity, error) { + // not using ResolveTokenToIdentityAndAuthorizer because in this case we don't + // need to resolve the roles, policies and namespace but just want the identity + // information such as accessor id. + return s.acls.ResolveTokenToIdentity(token) +} + func (s *Server) ResolveTokenToIdentityAndAuthorizer(token string) (structs.ACLIdentity, acl.Authorizer, error) { if id, authz := s.ResolveEntTokenToIdentityAndAuthorizer(token); id != nil && authz != nil { return id, authz, nil diff -Nru consul-1.7.4+dfsg1/agent/consul/acl_test.go consul-1.8.7+dfsg1/agent/consul/acl_test.go --- consul-1.7.4+dfsg1/agent/consul/acl_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/acl_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,8 +11,10 @@ "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/mitchellh/copystructure" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -177,6 +179,48 @@ }, }, }, nil + case "found-synthetic-policy-3": + return true, &structs.ACLToken{ + AccessorID: "bebccc92-3987-489d-84c2-ffd00d93ef93", + SecretID: "de70f2e2-69d9-4e88-9815-f91c03c6bcb1", + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "test-node1", + Datacenter: "dc1", + }, + // as the resolver is in dc1 this identity should be ignored + &structs.ACLNodeIdentity{ + NodeName: "test-node-dc2", + Datacenter: "dc2", + }, + }, + }, nil + case "found-synthetic-policy-4": + return true, &structs.ACLToken{ + AccessorID: "359b9927-25fd-46b9-bd14-3470f848ec65", + SecretID: "83c4d500-847d-49f7-8c08-0483f6b4156e", + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "test-node2", + Datacenter: "dc1", + }, + // as the resolver is in dc1 this identity should be ignored + &structs.ACLNodeIdentity{ + NodeName: "test-node-dc2", + Datacenter: "dc2", + }, + }, + }, nil + case "found-role-node-identity": + return true, &structs.ACLToken{ + AccessorID: "f3f47a09-de29-4c57-8f54-b65a9be79641", + SecretID: "e96aca00-5951-4b97-b0e5-5816f42dfb93", + Roles: []structs.ACLTokenRoleLink{ + { + ID: "node-identity", + }, + }, + }, nil case "acl-ro": return true, &structs.ACLToken{ AccessorID: "435a75af-1763-4980-89f4-f0951dda53b4", @@ -441,6 +485,22 @@ }, }, }, nil + case "node-identity": + return true, &structs.ACLRole{ + ID: "node-identity", + Name: "node-identity", + Description: "node-identity", + NodeIdentities: []*structs.ACLNodeIdentity{ + &structs.ACLNodeIdentity{ + NodeName: "test-node", + Datacenter: "dc1", + }, + &structs.ACLNodeIdentity{ + NodeName: "test-node-dc2", + Datacenter: "dc2", + }, + }, + }, nil default: return testRoleForIDEnterprise(roleID) } @@ -460,6 +520,14 @@ policyResolveFn func(*structs.ACLPolicyBatchGetRequest, *structs.ACLPolicyBatchResponse) error roleResolveFn func(*structs.ACLRoleBatchGetRequest, *structs.ACLRoleBatchResponse) error + localTokenResolutions int32 + remoteTokenResolutions int32 + localPolicyResolutions int32 + remotePolicyResolutions int32 + localRoleResolutions int32 + remoteRoleResolutions int32 + remoteLegacyResolutions int32 + // state for the optional default resolver function defaultTokenReadFn tokenCached bool // state for the optional default resolver function defaultPolicyResolveFn @@ -568,6 +636,7 @@ return false, nil, nil } + atomic.AddInt32(&d.localTokenResolutions, 1) return testIdentityForToken(token) } @@ -576,6 +645,7 @@ return false, nil, nil } + atomic.AddInt32(&d.localPolicyResolutions, 1) return testPolicyForID(policyID) } @@ -584,27 +654,32 @@ return false, nil, nil } + atomic.AddInt32(&d.localRoleResolutions, 1) return testRoleForID(roleID) } func (d *ACLResolverTestDelegate) RPC(method string, args interface{}, reply interface{}) error { switch method { case "ACL.GetPolicy": + atomic.AddInt32(&d.remoteLegacyResolutions, 1) if d.getPolicyFn != nil { return d.getPolicyFn(args.(*structs.ACLPolicyResolveLegacyRequest), reply.(*structs.ACLPolicyResolveLegacyResponse)) } panic("Bad Test Implementation: should provide a getPolicyFn to the ACLResolverTestDelegate") case "ACL.TokenRead": + atomic.AddInt32(&d.remoteTokenResolutions, 1) if d.tokenReadFn != nil { return d.tokenReadFn(args.(*structs.ACLTokenGetRequest), reply.(*structs.ACLTokenResponse)) } panic("Bad Test Implementation: should provide a tokenReadFn to the ACLResolverTestDelegate") case "ACL.PolicyResolve": + atomic.AddInt32(&d.remotePolicyResolutions, 1) if d.policyResolveFn != nil { return d.policyResolveFn(args.(*structs.ACLPolicyBatchGetRequest), reply.(*structs.ACLPolicyBatchResponse)) } panic("Bad Test Implementation: should provide a policyResolveFn to the ACLResolverTestDelegate") case "ACL.RoleResolve": + atomic.AddInt32(&d.remoteRoleResolutions, 1) if d.roleResolveFn != nil { return d.roleResolveFn(args.(*structs.ACLRoleBatchGetRequest), reply.(*structs.ACLRoleBatchResponse)) } @@ -622,7 +697,7 @@ config.ACLDownPolicy = "extend-cache" rconf := &ACLResolverConfig{ Config: config, - Logger: testutil.LoggerWithName(t, t.Name()), + Logger: testutil.Logger(t), CacheConfig: &structs.ACLCachesConfig{ Identities: 4, Policies: 4, @@ -1444,6 +1519,79 @@ require.Equal(t, policyResolves, int32(3)) }) + t.Run("Resolve-Identity", func(t *testing.T) { + t.Parallel() + + delegate := &ACLResolverTestDelegate{ + enabled: true, + datacenter: "dc1", + legacy: false, + localTokens: false, + localPolicies: false, + } + + delegate.tokenReadFn = delegate.plainTokenReadFn + delegate.policyResolveFn = delegate.plainPolicyResolveFn + delegate.roleResolveFn = delegate.plainRoleResolveFn + + r := newTestACLResolver(t, delegate, nil) + + ident, err := r.ResolveTokenToIdentity("found-policy-and-role") + require.NoError(t, err) + require.NotNil(t, ident) + require.Equal(t, "5f57c1f6-6a89-4186-9445-531b316e01df", ident.ID()) + require.EqualValues(t, 0, delegate.localTokenResolutions) + require.EqualValues(t, 1, delegate.remoteTokenResolutions) + require.EqualValues(t, 0, delegate.localPolicyResolutions) + require.EqualValues(t, 0, delegate.remotePolicyResolutions) + require.EqualValues(t, 0, delegate.localRoleResolutions) + require.EqualValues(t, 0, delegate.remoteRoleResolutions) + require.EqualValues(t, 0, delegate.remoteLegacyResolutions) + }) + + t.Run("Resolve-Identity-Legacy", func(t *testing.T) { + t.Parallel() + + delegate := &ACLResolverTestDelegate{ + enabled: true, + datacenter: "dc1", + legacy: true, + localTokens: false, + localPolicies: false, + getPolicyFn: func(args *structs.ACLPolicyResolveLegacyRequest, reply *structs.ACLPolicyResolveLegacyResponse) error { + reply.Parent = "deny" + reply.TTL = 30 + reply.ETag = "nothing" + reply.Policy = &acl.Policy{ + ID: "not-needed", + PolicyRules: acl.PolicyRules{ + Nodes: []*acl.NodeRule{ + &acl.NodeRule{ + Name: "foo", + Policy: acl.PolicyWrite, + }, + }, + }, + } + return nil + }, + } + + r := newTestACLResolver(t, delegate, nil) + + ident, err := r.ResolveTokenToIdentity("found-policy-and-role") + require.NoError(t, err) + require.NotNil(t, ident) + require.Equal(t, "legacy-token", ident.ID()) + require.EqualValues(t, 0, delegate.localTokenResolutions) + require.EqualValues(t, 0, delegate.remoteTokenResolutions) + require.EqualValues(t, 0, delegate.localPolicyResolutions) + require.EqualValues(t, 0, delegate.remotePolicyResolutions) + require.EqualValues(t, 0, delegate.localRoleResolutions) + require.EqualValues(t, 0, delegate.remoteRoleResolutions) + require.EqualValues(t, 1, delegate.remoteLegacyResolutions) + }) + t.Run("Concurrent-Token-Resolve", func(t *testing.T) { t.Parallel() @@ -1491,8 +1639,8 @@ // effectively disable caching - so the only way we end up with 1 token read is if they were // being resolved concurrently config.Config.ACLTokenTTL = 0 * time.Second - config.Config.ACLPolicyTTL = 30 * time.Millisecond - config.Config.ACLRoleTTL = 30 * time.Millisecond + config.Config.ACLPolicyTTL = 30 * time.Second + config.Config.ACLRoleTTL = 30 * time.Second config.Config.ACLDownPolicy = "extend-cache" }) @@ -1639,8 +1787,18 @@ require.Equal(t, acl.Allow, authz.ServiceRead("bar", nil)) }) + runTwiceAndReset("Role With Node Identity", func(t *testing.T) { + authz, err := r.ResolveToken("found-role-node-identity") + require.NoError(t, err) + require.NotNil(t, authz) + require.Equal(t, acl.Allow, authz.NodeWrite("test-node", nil)) + require.Equal(t, acl.Deny, authz.NodeWrite("test-node-dc2", nil)) + require.Equal(t, acl.Allow, authz.ServiceRead("something", nil)) + require.Equal(t, acl.Deny, authz.ServiceWrite("something", nil)) + }) + runTwiceAndReset("Synthetic Policies Independently Cache", func(t *testing.T) { - // We resolve both of these tokens in the same cache session + // We resolve these tokens in the same cache session // to verify that the keys for caching synthetic policies don't bleed // over between each other. { @@ -1671,6 +1829,38 @@ require.Equal(t, acl.Allow, authz.ServiceRead("literally-anything", nil)) require.Equal(t, acl.Allow, authz.NodeRead("any-node", nil)) } + { + authz, err := r.ResolveToken("found-synthetic-policy-3") + require.NoError(t, err) + require.NotNil(t, authz) + + // spot check some random perms + require.Equal(t, acl.Deny, authz.ACLRead(nil)) + require.Equal(t, acl.Deny, authz.NodeWrite("foo", nil)) + // ensure we didn't bleed over to the other synthetic policy + require.Equal(t, acl.Deny, authz.NodeWrite("test-node2", nil)) + // check our own synthetic policy + require.Equal(t, acl.Allow, authz.ServiceRead("literally-anything", nil)) + require.Equal(t, acl.Allow, authz.NodeWrite("test-node1", nil)) + // ensure node identity for other DC is ignored + require.Equal(t, acl.Deny, authz.NodeWrite("test-node-dc2", nil)) + } + { + authz, err := r.ResolveToken("found-synthetic-policy-4") + require.NoError(t, err) + require.NotNil(t, authz) + + // spot check some random perms + require.Equal(t, acl.Deny, authz.ACLRead(nil)) + require.Equal(t, acl.Deny, authz.NodeWrite("foo", nil)) + // ensure we didn't bleed over to the other synthetic policy + require.Equal(t, acl.Deny, authz.NodeWrite("test-node1", nil)) + // check our own synthetic policy + require.Equal(t, acl.Allow, authz.ServiceRead("literally-anything", nil)) + require.Equal(t, acl.Allow, authz.NodeWrite("test-node2", nil)) + // ensure node identity for other DC is ignored + require.Equal(t, acl.Deny, authz.NodeWrite("test-node-dc2", nil)) + } }) runTwiceAndReset("Anonymous", func(t *testing.T) { @@ -2168,20 +2358,9 @@ } } - // Try permissive filtering. - { - hc := fill() - filt := newACLFilter(acl.AllowAll(), nil, false) - filt.filterHealthChecks(&hc) - if len(hc) != 1 { - t.Fatalf("bad: %#v", hc) - } - } - - // Try restrictive filtering. { hc := fill() - filt := newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.DenyAll(), nil) filt.filterHealthChecks(&hc) if len(hc) != 0 { t.Fatalf("bad: %#v", hc) @@ -2202,20 +2381,9 @@ t.Fatalf("err: %v", err) } - // This will work because version 8 ACLs aren't being enforced. { hc := fill() - filt := newACLFilter(perms, nil, false) - filt.filterHealthChecks(&hc) - if len(hc) != 1 { - t.Fatalf("bad: %#v", hc) - } - } - - // But with version 8 the node will block it. - { - hc := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterHealthChecks(&hc) if len(hc) != 0 { t.Fatalf("bad: %#v", hc) @@ -2239,7 +2407,7 @@ // Now it should go through. { hc := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterHealthChecks(&hc) if len(hc) != 1 { t.Fatalf("bad: %#v", hc) @@ -2267,7 +2435,7 @@ // Try permissive filtering. { ixns := fill() - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterIntentions(&ixns) assert.Len(ixns, 2) } @@ -2275,7 +2443,7 @@ // Try restrictive filtering. { ixns := fill() - filt := newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.DenyAll(), nil) filt.filterIntentions(&ixns) assert.Len(ixns, 0) } @@ -2293,7 +2461,7 @@ // Filter { ixns := fill() - filt := newACLFilter(perms, nil, false) + filt := newACLFilter(perms, nil) filt.filterIntentions(&ixns) assert.Len(ixns, 1) } @@ -2309,24 +2477,14 @@ } // Try permissive filtering. - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterServices(services, nil) if len(services) != 3 { t.Fatalf("bad: %#v", services) } // Try restrictive filtering. - filt = newACLFilter(acl.DenyAll(), nil, false) - filt.filterServices(services, nil) - if len(services) != 1 { - t.Fatalf("bad: %#v", services) - } - if _, ok := services["consul"]; !ok { - t.Fatalf("bad: %#v", services) - } - - // Try restrictive filtering with version 8 enforcement. - filt = newACLFilter(acl.DenyAll(), nil, true) + filt = newACLFilter(acl.DenyAll(), nil) filt.filterServices(services, nil) if len(services) != 0 { t.Fatalf("bad: %#v", services) @@ -2348,7 +2506,7 @@ // Try permissive filtering. { nodes := fill() - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterServiceNodes(&nodes) if len(nodes) != 1 { t.Fatalf("bad: %#v", nodes) @@ -2358,7 +2516,7 @@ // Try restrictive filtering. { nodes := fill() - filt := newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.DenyAll(), nil) filt.filterServiceNodes(&nodes) if len(nodes) != 0 { t.Fatalf("bad: %#v", nodes) @@ -2379,20 +2537,10 @@ t.Fatalf("err: %v", err) } - // This will work because version 8 ACLs aren't being enforced. - { - nodes := fill() - filt := newACLFilter(perms, nil, false) - filt.filterServiceNodes(&nodes) - if len(nodes) != 1 { - t.Fatalf("bad: %#v", nodes) - } - } - // But with version 8 the node will block it. { nodes := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterServiceNodes(&nodes) if len(nodes) != 0 { t.Fatalf("bad: %#v", nodes) @@ -2416,7 +2564,7 @@ // Now it should go through. { nodes := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterServiceNodes(&nodes) if len(nodes) != 1 { t.Fatalf("bad: %#v", nodes) @@ -2444,7 +2592,7 @@ // Try nil, which is a possible input. { var services *structs.NodeServices - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterNodeServices(&services) if services != nil { t.Fatalf("bad: %#v", services) @@ -2454,7 +2602,7 @@ // Try permissive filtering. { services := fill() - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterNodeServices(&services) if len(services.Services) != 1 { t.Fatalf("bad: %#v", services.Services) @@ -2464,10 +2612,10 @@ // Try restrictive filtering. { services := fill() - filt := newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.DenyAll(), nil) filt.filterNodeServices(&services) - if len((*services).Services) != 0 { - t.Fatalf("bad: %#v", (*services).Services) + if services != nil { + t.Fatalf("bad: %#v", *services) } } @@ -2485,20 +2633,10 @@ t.Fatalf("err: %v", err) } - // This will work because version 8 ACLs aren't being enforced. + // Node will block it. { services := fill() - filt := newACLFilter(perms, nil, false) - filt.filterNodeServices(&services) - if len((*services).Services) != 1 { - t.Fatalf("bad: %#v", (*services).Services) - } - } - - // But with version 8 the node will block it. - { - services := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterNodeServices(&services) if services != nil { t.Fatalf("bad: %#v", services) @@ -2522,7 +2660,7 @@ // Now it should go through. { services := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterNodeServices(&services) if len((*services).Services) != 1 { t.Fatalf("bad: %#v", (*services).Services) @@ -2557,7 +2695,7 @@ // Try permissive filtering. { nodes := fill() - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterCheckServiceNodes(&nodes) if len(nodes) != 1 { t.Fatalf("bad: %#v", nodes) @@ -2570,7 +2708,7 @@ // Try restrictive filtering. { nodes := fill() - filt := newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.DenyAll(), nil) filt.filterCheckServiceNodes(&nodes) if len(nodes) != 0 { t.Fatalf("bad: %#v", nodes) @@ -2591,23 +2729,9 @@ t.Fatalf("err: %v", err) } - // This will work because version 8 ACLs aren't being enforced. - { - nodes := fill() - filt := newACLFilter(perms, nil, false) - filt.filterCheckServiceNodes(&nodes) - if len(nodes) != 1 { - t.Fatalf("bad: %#v", nodes) - } - if len(nodes[0].Checks) != 1 { - t.Fatalf("bad: %#v", nodes[0].Checks) - } - } - - // But with version 8 the node will block it. { nodes := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterCheckServiceNodes(&nodes) if len(nodes) != 0 { t.Fatalf("bad: %#v", nodes) @@ -2631,7 +2755,7 @@ // Now it should go through. { nodes := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterCheckServiceNodes(&nodes) if len(nodes) != 1 { t.Fatalf("bad: %#v", nodes) @@ -2657,21 +2781,14 @@ } // Try permissive filtering. - filt := newACLFilter(acl.AllowAll(), nil, false) - filt.filterCoordinates(&coords) - if len(coords) != 2 { - t.Fatalf("bad: %#v", coords) - } - - // Try restrictive filtering without version 8 ACL enforcement. - filt = newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterCoordinates(&coords) if len(coords) != 2 { t.Fatalf("bad: %#v", coords) } - // Try restrictive filtering with version 8 ACL enforcement. - filt = newACLFilter(acl.DenyAll(), nil, true) + // Try restrictive filtering + filt = newACLFilter(acl.DenyAll(), nil) filt.filterCoordinates(&coords) if len(coords) != 0 { t.Fatalf("bad: %#v", coords) @@ -2691,21 +2808,14 @@ } // Try permissive filtering. - filt := newACLFilter(acl.AllowAll(), nil, true) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterSessions(&sessions) if len(sessions) != 2 { t.Fatalf("bad: %#v", sessions) } - // Try restrictive filtering but with version 8 enforcement turned off. - filt = newACLFilter(acl.DenyAll(), nil, false) - filt.filterSessions(&sessions) - if len(sessions) != 2 { - t.Fatalf("bad: %#v", sessions) - } - - // Try restrictive filtering with version 8 enforcement turned on. - filt = newACLFilter(acl.DenyAll(), nil, true) + // Try restrictive filtering + filt = newACLFilter(acl.DenyAll(), nil) filt.filterSessions(&sessions) if len(sessions) != 0 { t.Fatalf("bad: %#v", sessions) @@ -2739,7 +2849,7 @@ // Try permissive filtering. { dump := fill() - filt := newACLFilter(acl.AllowAll(), nil, false) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterNodeDump(&dump) if len(dump) != 1 { t.Fatalf("bad: %#v", dump) @@ -2755,17 +2865,11 @@ // Try restrictive filtering. { dump := fill() - filt := newACLFilter(acl.DenyAll(), nil, false) + filt := newACLFilter(acl.DenyAll(), nil) filt.filterNodeDump(&dump) - if len(dump) != 1 { + if len(dump) != 0 { t.Fatalf("bad: %#v", dump) } - if len(dump[0].Services) != 0 { - t.Fatalf("bad: %#v", dump[0].Services) - } - if len(dump[0].Checks) != 0 { - t.Fatalf("bad: %#v", dump[0].Checks) - } } // Allowed to see the service but not the node. @@ -2782,26 +2886,10 @@ t.Fatalf("err: %v", err) } - // This will work because version 8 ACLs aren't being enforced. - { - dump := fill() - filt := newACLFilter(perms, nil, false) - filt.filterNodeDump(&dump) - if len(dump) != 1 { - t.Fatalf("bad: %#v", dump) - } - if len(dump[0].Services) != 1 { - t.Fatalf("bad: %#v", dump[0].Services) - } - if len(dump[0].Checks) != 1 { - t.Fatalf("bad: %#v", dump[0].Checks) - } - } - - // But with version 8 the node will block it. + // But the node will block it. { dump := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterNodeDump(&dump) if len(dump) != 0 { t.Fatalf("bad: %#v", dump) @@ -2825,7 +2913,7 @@ // Now it should go through. { dump := fill() - filt := newACLFilter(perms, nil, true) + filt := newACLFilter(perms, nil) filt.filterNodeDump(&dump) if len(dump) != 1 { t.Fatalf("bad: %#v", dump) @@ -2852,24 +2940,117 @@ } // Try permissive filtering. - filt := newACLFilter(acl.AllowAll(), nil, true) + filt := newACLFilter(acl.AllowAll(), nil) filt.filterNodes(&nodes) if len(nodes) != 2 { t.Fatalf("bad: %#v", nodes) } - // Try restrictive filtering but with version 8 enforcement turned off. - filt = newACLFilter(acl.DenyAll(), nil, false) + // Try restrictive filtering + filt = newACLFilter(acl.DenyAll(), nil) filt.filterNodes(&nodes) - if len(nodes) != 2 { + if len(nodes) != 0 { t.Fatalf("bad: %#v", nodes) } +} - // Try restrictive filtering with version 8 enforcement turned on. - filt = newACLFilter(acl.DenyAll(), nil, true) - filt.filterNodes(&nodes) - if len(nodes) != 0 { - t.Fatalf("bad: %#v", nodes) +func TestACL_filterDatacenterCheckServiceNodes(t *testing.T) { + t.Parallel() + // Create some data. + fixture := map[string]structs.CheckServiceNodes{ + "dc1": []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1a", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2a", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + "dc2": []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc2", "gateway1b", "5.6.7.8", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc2", "gateway2b", "8.7.6.5", 1111, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + } + + fill := func(t *testing.T) map[string]structs.CheckServiceNodes { + t.Helper() + dup, err := copystructure.Copy(fixture) + require.NoError(t, err) + return dup.(map[string]structs.CheckServiceNodes) + } + + // Try permissive filtering. + { + dcNodes := fill(t) + filt := newACLFilter(acl.AllowAll(), nil) + filt.filterDatacenterCheckServiceNodes(&dcNodes) + require.Len(t, dcNodes, 2) + require.Equal(t, fill(t), dcNodes) + } + + // Try restrictive filtering. + { + dcNodes := fill(t) + filt := newACLFilter(acl.DenyAll(), nil) + filt.filterDatacenterCheckServiceNodes(&dcNodes) + require.Len(t, dcNodes, 0) + } + + var ( + policy *acl.Policy + err error + perms acl.Authorizer + ) + // Allowed to see the service but not the node. + policy, err = acl.NewPolicyFromSource("", 0, ` + service_prefix "" { policy = "read" } + `, acl.SyntaxCurrent, nil, nil) + require.NoError(t, err) + perms, err = acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) + require.NoError(t, err) + + { + dcNodes := fill(t) + filt := newACLFilter(perms, nil) + filt.filterDatacenterCheckServiceNodes(&dcNodes) + require.Len(t, dcNodes, 0) + } + + // Allowed to see the node but not the service. + policy, err = acl.NewPolicyFromSource("", 0, ` + node_prefix "" { policy = "read" } + `, acl.SyntaxCurrent, nil, nil) + require.NoError(t, err) + perms, err = acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) + require.NoError(t, err) + + { + dcNodes := fill(t) + filt := newACLFilter(perms, nil) + filt.filterDatacenterCheckServiceNodes(&dcNodes) + require.Len(t, dcNodes, 0) + } + + // Allowed to see the service AND the node + policy, err = acl.NewPolicyFromSource("", 0, ` + service_prefix "" { policy = "read" } + node_prefix "" { policy = "read" } + `, acl.SyntaxCurrent, nil, nil) + require.NoError(t, err) + _, err = acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) + require.NoError(t, err) + + // Now it should go through. + { + dcNodes := fill(t) + filt := newACLFilter(acl.AllowAll(), nil) + filt.filterDatacenterCheckServiceNodes(&dcNodes) + require.Len(t, dcNodes, 2) + require.Equal(t, fill(t), dcNodes) } } @@ -2887,7 +3068,7 @@ // Try permissive filtering with a management token. This will allow the // embedded token to be seen. - filt := newACLFilter(acl.ManageAll(), nil, false) + filt := newACLFilter(acl.ManageAll(), nil) filt.redactPreparedQueryTokens(&query) if !reflect.DeepEqual(query, expected) { t.Fatalf("bad: %#v", &query) @@ -2899,7 +3080,7 @@ // Now try permissive filtering with a client token, which should cause // the embedded token to get redacted. - filt = newACLFilter(acl.AllowAll(), nil, false) + filt = newACLFilter(acl.AllowAll(), nil) filt.redactPreparedQueryTokens(&query) expected.Token = redactedToken if !reflect.DeepEqual(query, expected) { @@ -3000,7 +3181,7 @@ // Try permissive filtering with a management token. This will allow the // embedded token to be seen. - filt := newACLFilter(acl.ManageAll(), nil, false) + filt := newACLFilter(acl.ManageAll(), nil) filt.filterPreparedQueries(&queries) if !reflect.DeepEqual(queries, expected) { t.Fatalf("bad: %#v", queries) @@ -3013,7 +3194,7 @@ // Now try permissive filtering with a client token, which should cause // the embedded token to get redacted, and the query with no name to get // filtered out. - filt = newACLFilter(acl.AllowAll(), nil, false) + filt = newACLFilter(acl.AllowAll(), nil) filt.filterPreparedQueries(&queries) expected[2].Token = redactedToken expected = append(structs.PreparedQueries{}, expected[1], expected[2]) @@ -3027,7 +3208,7 @@ } // Now try restrictive filtering. - filt = newACLFilter(acl.DenyAll(), nil, false) + filt = newACLFilter(acl.DenyAll(), nil) filt.filterPreparedQueries(&queries) if len(queries) != 0 { t.Fatalf("bad: %#v", queries) diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/authmethods.go consul-1.8.7+dfsg1/agent/consul/authmethod/authmethods.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/authmethods.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/authmethods.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,13 @@ package authmethod import ( + "context" "fmt" "sort" "sync" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/go-hclog" "github.com/mitchellh/mapstructure" ) @@ -24,12 +26,15 @@ Purge() } -type ValidatorFactory func(method *structs.ACLAuthMethod) (Validator, error) +type ValidatorFactory func(logger hclog.Logger, method *structs.ACLAuthMethod) (Validator, error) type Validator interface { // Name returns the name of the auth method backing this validator. Name() string + // NewIdentity creates a blank identity populated with empty values. + NewIdentity() *Identity + // ValidateLogin takes raw user-provided auth method metadata and ensures // it is sane, provably correct, and currently valid. Relevant identifying // data is extracted and returned for immediate use by the role binding @@ -41,16 +46,32 @@ // Returns auth method specific metadata suitable for the Role Binding // process as well as the desired enterprise meta for the token to be // created. - ValidateLogin(loginToken string) (map[string]string, *structs.EnterpriseMeta, error) + ValidateLogin(ctx context.Context, loginToken string) (*Identity, error) + + // Stop should be called to cease any background activity and free up + // resources. + Stop() +} + +type Identity struct { + // SelectableFields is the format of this Identity suitable for selection + // with a binding rule. + SelectableFields interface{} + + // ProjectedVars is the format of this Identity suitable for interpolation + // in a bind name within a binding rule. + ProjectedVars map[string]string - // AvailableFields returns a slice of all fields that are returned as a - // result of ValidateLogin. These are valid fields for use in any - // BindingRule tied to this auth method. - AvailableFields() []string - - // MakeFieldMapSelectable converts a field map as returned by ValidateLogin - // into a structure suitable for selection with a binding rule. - MakeFieldMapSelectable(fieldMap map[string]string) interface{} + *structs.EnterpriseMeta +} + +// ProjectedVarNames returns just the keyspace of the ProjectedVars map. +func (i *Identity) ProjectedVarNames() []string { + v := make([]string, 0, len(i.ProjectedVars)) + for k, _ := range i.ProjectedVars { + v = append(v, k) + } + return v } var ( @@ -115,6 +136,7 @@ if prev.ModifyIndex >= idx { return prev.Validator } + prev.Validator.Stop() } c.entries[method.Name] = &authMethodValidatorEntry{ @@ -125,13 +147,16 @@ } func (c *authMethodCache) Purge() { + for _, entry := range c.entries { + entry.Validator.Stop() + } c.entries = make(map[string]*authMethodValidatorEntry) } // NewValidator instantiates a new Validator for the given auth method // configuration. If no auth method is registered with the provided type an // error is returned. -func NewValidator(method *structs.ACLAuthMethod) (Validator, error) { +func NewValidator(logger hclog.Logger, method *structs.ACLAuthMethod) (Validator, error) { typesMu.RLock() factory, ok := types[method.Type] typesMu.RUnlock() @@ -140,7 +165,9 @@ return nil, fmt.Errorf("no auth method registered with type: %s", method.Type) } - return factory(method) + logger = logger.Named("authmethod").With("type", method.Type, "name", method.Name) + + return factory(logger, method) } // Types returns a sorted list of the names of the registered types. diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/authmethods_oss.go consul-1.8.7+dfsg1/agent/consul/authmethod/authmethods_oss.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/authmethods_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/authmethods_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,6 +33,6 @@ func (c *syncCache) Purge() { c.lock.Lock() + defer c.lock.Unlock() c.cache.Purge() - c.lock.Unlock() } diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/k8s.go consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/k8s.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/k8s.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/k8s.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package kubeauth import ( + "context" "errors" "fmt" "strings" @@ -8,6 +9,7 @@ "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/structs" cleanhttp "github.com/hashicorp/go-cleanhttp" + "github.com/hashicorp/go-hclog" "gopkg.in/square/go-jose.v2/jwt" authv1 "k8s.io/api/authentication/v1" client_metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -20,7 +22,7 @@ func init() { // register this as an available auth method type - authmethod.Register("kubernetes", func(method *structs.ACLAuthMethod) (authmethod.Validator, error) { + authmethod.Register("kubernetes", func(logger hclog.Logger, method *structs.ACLAuthMethod) (authmethod.Validator, error) { v, err := NewValidator(method) if err != nil { return nil, err @@ -92,6 +94,10 @@ return nil, fmt.Errorf("Config.ServiceAccountJWT is not a valid JWT: %v", err) } + if err := enterpriseValidation(method, &config); err != nil { + return nil, err + } + transport := cleanhttp.DefaultTransport() client, err := k8s.NewForConfig(&client_rest.Config{ Host: config.Host, @@ -118,9 +124,11 @@ func (v *Validator) Name() string { return v.name } -func (v *Validator) ValidateLogin(loginToken string) (map[string]string, *structs.EnterpriseMeta, error) { +func (v *Validator) Stop() {} + +func (v *Validator) ValidateLogin(ctx context.Context, loginToken string) (*authmethod.Identity, error) { if _, err := jwt.ParseSigned(loginToken); err != nil { - return nil, nil, fmt.Errorf("failed to parse and validate JWT: %v", err) + return nil, fmt.Errorf("failed to parse and validate JWT: %v", err) } // Check TokenReview for the bulk of the work. @@ -131,36 +139,36 @@ }) if err != nil { - return nil, nil, err + return nil, err } else if trResp.Status.Error != "" { - return nil, nil, fmt.Errorf("lookup failed: %s", trResp.Status.Error) + return nil, fmt.Errorf("lookup failed: %s", trResp.Status.Error) } if !trResp.Status.Authenticated { - return nil, nil, errors.New("lookup failed: service account jwt not valid") + return nil, errors.New("lookup failed: service account jwt not valid") } // The username is of format: system:serviceaccount:(NAMESPACE):(SERVICEACCOUNT) parts := strings.Split(trResp.Status.User.Username, ":") if len(parts) != 4 { - return nil, nil, errors.New("lookup failed: unexpected username format") + return nil, errors.New("lookup failed: unexpected username format") } // Validate the user that comes back from token review is a service account if parts[0] != "system" || parts[1] != "serviceaccount" { - return nil, nil, errors.New("lookup failed: username returned is not a service account") + return nil, errors.New("lookup failed: username returned is not a service account") } var ( saNamespace = parts[2] saName = parts[3] - saUID = string(trResp.Status.User.UID) + saUID = trResp.Status.User.UID ) // Check to see if there is an override name on the ServiceAccount object. sa, err := v.saGetter.ServiceAccounts(saNamespace).Get(saName, client_metav1.GetOptions{}) if err != nil { - return nil, nil, fmt.Errorf("annotation lookup failed: %v", err) + return nil, fmt.Errorf("annotation lookup failed: %v", err) } annotations := sa.GetObjectMeta().GetAnnotations() @@ -174,25 +182,37 @@ serviceAccountUIDField: saUID, } - return fields, v.k8sEntMetaFromFields(fields), nil + id := v.NewIdentity() + id.SelectableFields = &k8sFieldDetails{ + ServiceAccount: k8sFieldDetailsServiceAccount{ + Namespace: fields[serviceAccountNamespaceField], + Name: fields[serviceAccountNameField], + UID: fields[serviceAccountUIDField], + }, + } + for k, val := range fields { + id.ProjectedVars[k] = val + } + id.EnterpriseMeta = v.k8sEntMetaFromFields(fields) + + return id, nil } -func (p *Validator) AvailableFields() []string { - return []string{ - serviceAccountNamespaceField, - serviceAccountNameField, - serviceAccountUIDField, +func (v *Validator) NewIdentity() *authmethod.Identity { + id := &authmethod.Identity{ + SelectableFields: &k8sFieldDetails{}, + ProjectedVars: map[string]string{}, + } + for _, f := range availableFields { + id.ProjectedVars[f] = "" } + return id } -func (v *Validator) MakeFieldMapSelectable(fieldMap map[string]string) interface{} { - return &k8sFieldDetails{ - ServiceAccount: k8sFieldDetailsServiceAccount{ - Namespace: fieldMap[serviceAccountNamespaceField], - Name: fieldMap[serviceAccountNameField], - UID: fieldMap[serviceAccountUIDField], - }, - } +var availableFields = []string{ + serviceAccountNamespaceField, + serviceAccountNameField, + serviceAccountUIDField, } type k8sFieldDetails struct { diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/k8s_oss.go consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/k8s_oss.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/k8s_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/k8s_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,10 @@ type enterpriseConfig struct{} +func enterpriseValidation(method *structs.ACLAuthMethod, config *Config) error { + return nil +} + func (v *Validator) k8sEntMetaFromFields(fields map[string]string) *structs.EnterpriseMeta { - return structs.DefaultEnterpriseMeta() + return nil } diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/k8s_test.go consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/k8s_test.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/k8s_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/k8s_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ import ( "bytes" + "context" "testing" "github.com/hashicorp/consul/agent/connect" @@ -74,6 +75,35 @@ }) } +func TestNewIdentity(t *testing.T) { + testSrv := StartTestAPIServer(t) + defer testSrv.Stop() + + method := &structs.ACLAuthMethod{ + Name: "test-k8s", + Description: "k8s test", + Type: "kubernetes", + Config: map[string]interface{}{ + "Host": testSrv.Addr(), + "CACert": testSrv.CACert(), + "ServiceAccountJWT": goodJWT_A, + }, + } + validator, err := NewValidator(method) + require.NoError(t, err) + + id := validator.NewIdentity() + authmethod.RequireIdentityMatch(t, id, map[string]string{ + "serviceaccount.namespace": "", + "serviceaccount.name": "", + "serviceaccount.uid": "", + }, + `serviceaccount.namespace == ""`, + `serviceaccount.name == ""`, + `serviceaccount.uid == ""`, + ) +} + func TestValidateLogin(t *testing.T) { testSrv := StartTestAPIServer(t) defer testSrv.Stop() @@ -101,18 +131,23 @@ require.NoError(t, err) t.Run("invalid bearer token", func(t *testing.T) { - _, _, err := validator.ValidateLogin("invalid") + _, err := validator.ValidateLogin(context.Background(), "invalid") require.Error(t, err) }) t.Run("valid bearer token", func(t *testing.T) { - fields, _, err := validator.ValidateLogin(goodJWT_B) + id, err := validator.ValidateLogin(context.Background(), goodJWT_B) require.NoError(t, err) - require.Equal(t, map[string]string{ + + authmethod.RequireIdentityMatch(t, id, map[string]string{ "serviceaccount.namespace": "default", "serviceaccount.name": "demo", "serviceaccount.uid": "76091af4-4b56-11e9-ac4b-708b11801cbe", - }, fields) + }, + `serviceaccount.namespace == default`, + `serviceaccount.name == "demo"`, + `serviceaccount.uid == "76091af4-4b56-11e9-ac4b-708b11801cbe"`, + ) }) // annotate the account @@ -125,13 +160,18 @@ ) t.Run("valid bearer token with annotation", func(t *testing.T) { - fields, _, err := validator.ValidateLogin(goodJWT_B) + id, err := validator.ValidateLogin(context.Background(), goodJWT_B) require.NoError(t, err) - require.Equal(t, map[string]string{ + + authmethod.RequireIdentityMatch(t, id, map[string]string{ "serviceaccount.namespace": "default", "serviceaccount.name": "alternate-name", "serviceaccount.uid": "76091af4-4b56-11e9-ac4b-708b11801cbe", - }, fields) + }, + `serviceaccount.namespace == default`, + `serviceaccount.name == "alternate-name"`, + `serviceaccount.uid == "76091af4-4b56-11e9-ac4b-708b11801cbe"`, + ) }) } diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/testing.go consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/testing.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/kubeauth/testing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/kubeauth/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,16 +4,21 @@ "bytes" "encoding/json" "encoding/pem" + "fmt" "io/ioutil" + "log" + "net" "net/http" "net/http/httptest" "net/url" "regexp" + "strconv" "strings" "sync" - "testing" "time" + "github.com/hashicorp/consul/sdk/freeport" + "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" authv1 "k8s.io/api/authentication/v1" corev1 "k8s.io/api/core/v1" @@ -28,9 +33,9 @@ // - GET /api/v1/namespaces//serviceaccounts/ // type TestAPIServer struct { - t *testing.T - srv *httptest.Server - caCert string + srv *httptest.Server + caCert string + returnFunc func() mu sync.Mutex authorizedJWT string // token review and sa read @@ -41,10 +46,16 @@ // StartTestAPIServer creates a disposable TestAPIServer and binds it to a // random free port. -func StartTestAPIServer(t *testing.T) *TestAPIServer { - s := &TestAPIServer{t: t} +func StartTestAPIServer(t testing.T) *TestAPIServer { + s := &TestAPIServer{} - s.srv = httptest.NewTLSServer(s) + ports := freeport.MustTake(1) + s.returnFunc = func() { + freeport.Return(ports) + } + s.srv = httptestNewUnstartedServerWithPort(s, ports[0]) + s.srv.Config.ErrorLog = log.New(ioutil.Discard, "", 0) + s.srv.StartTLS() bs := s.srv.TLS.Certificates[0].Certificate[0] @@ -55,7 +66,7 @@ return s } -// AuthorizeJWT whitelists the given JWT as able to use the API server. +// AuthorizeJWT allowlists the given JWT as able to use the API server. func (s *TestAPIServer) AuthorizeJWT(jwt string) { s.mu.Lock() defer s.mu.Unlock() @@ -90,6 +101,10 @@ // Stop stops the running TestAPIServer. func (s *TestAPIServer) Stop() { s.srv.Close() + if s.returnFunc != nil { + s.returnFunc() + s.returnFunc = nil + } } // Addr returns the current base URL for the running webserver. @@ -530,3 +545,19 @@ Code: code, } } + +func httptestNewUnstartedServerWithPort(handler http.Handler, port int) *httptest.Server { + if port == 0 { + return httptest.NewUnstartedServer(handler) + } + addr := net.JoinHostPort("127.0.0.1", strconv.Itoa(port)) + l, err := net.Listen("tcp", addr) + if err != nil { + panic(fmt.Sprintf("httptest: failed to listen on a port: %v", err)) + } + + return &httptest.Server{ + Listener: l, + Config: &http.Server{Handler: handler}, + } +} diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/ssoauth/sso.go consul-1.8.7+dfsg1/agent/consul/authmethod/ssoauth/sso.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/ssoauth/sso.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/ssoauth/sso.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +package ssoauth + +import ( + "context" + "time" + + "github.com/hashicorp/consul/agent/consul/authmethod" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/internal/go-sso/oidcauth" + "github.com/hashicorp/go-hclog" +) + +func init() { + authmethod.Register("jwt", func(logger hclog.Logger, method *structs.ACLAuthMethod) (authmethod.Validator, error) { + v, err := NewValidator(logger, method) + if err != nil { + return nil, err + } + return v, nil + }) +} + +// Validator is the wrapper around the go-sso library that also conforms to the +// authmethod.Validator interface. +type Validator struct { + name string + methodType string + config *oidcauth.Config + logger hclog.Logger + oa *oidcauth.Authenticator +} + +var _ authmethod.Validator = (*Validator)(nil) + +func NewValidator(logger hclog.Logger, method *structs.ACLAuthMethod) (*Validator, error) { + if err := validateType(method.Type); err != nil { + return nil, err + } + + var config Config + if err := authmethod.ParseConfig(method.Config, &config); err != nil { + return nil, err + } + ssoConfig := config.convertForLibrary(method.Type) + + oa, err := oidcauth.New(ssoConfig, logger) + if err != nil { + return nil, err + } + + v := &Validator{ + name: method.Name, + methodType: method.Type, + config: ssoConfig, + logger: logger, + oa: oa, + } + + return v, nil +} + +// Name implements authmethod.Validator. +func (v *Validator) Name() string { return v.name } + +// Stop implements authmethod.Validator. +func (v *Validator) Stop() { v.oa.Stop() } + +// ValidateLogin implements authmethod.Validator. +func (v *Validator) ValidateLogin(ctx context.Context, loginToken string) (*authmethod.Identity, error) { + c, err := v.oa.ClaimsFromJWT(ctx, loginToken) + if err != nil { + return nil, err + } + + return v.identityFromClaims(c), nil +} + +func (v *Validator) identityFromClaims(c *oidcauth.Claims) *authmethod.Identity { + id := v.NewIdentity() + id.SelectableFields = &fieldDetails{ + Values: c.Values, + Lists: c.Lists, + } + for k, val := range c.Values { + id.ProjectedVars["value."+k] = val + } + id.EnterpriseMeta = v.ssoEntMetaFromClaims(c) + return id +} + +// NewIdentity implements authmethod.Validator. +func (v *Validator) NewIdentity() *authmethod.Identity { + // Populate selectable fields with empty values so emptystring filters + // works. Populate projectable vars with empty values so HIL works. + fd := &fieldDetails{ + Values: make(map[string]string), + Lists: make(map[string][]string), + } + projectedVars := make(map[string]string) + for _, k := range v.config.ClaimMappings { + fd.Values[k] = "" + projectedVars["value."+k] = "" + } + for _, k := range v.config.ListClaimMappings { + fd.Lists[k] = nil + } + + return &authmethod.Identity{ + SelectableFields: fd, + ProjectedVars: projectedVars, + } +} + +type fieldDetails struct { + Values map[string]string `bexpr:"value"` + Lists map[string][]string `bexpr:"list"` +} + +// Config is the collection of all settings that pertain to doing OIDC-based +// authentication and direct JWT-based authentication processes. +type Config struct { + // common for type=oidc and type=jwt + JWTSupportedAlgs []string `json:",omitempty"` + BoundAudiences []string `json:",omitempty"` + ClaimMappings map[string]string `json:",omitempty"` + ListClaimMappings map[string]string `json:",omitempty"` + OIDCDiscoveryURL string `json:",omitempty"` + OIDCDiscoveryCACert string `json:",omitempty"` + + // just for type=jwt + JWKSURL string `json:",omitempty"` + JWKSCACert string `json:",omitempty"` + JWTValidationPubKeys []string `json:",omitempty"` + BoundIssuer string `json:",omitempty"` + ExpirationLeeway time.Duration `json:",omitempty"` + NotBeforeLeeway time.Duration `json:",omitempty"` + ClockSkewLeeway time.Duration `json:",omitempty"` + + enterpriseConfig `mapstructure:",squash"` +} + +func (c *Config) convertForLibrary(methodType string) *oidcauth.Config { + ssoConfig := &oidcauth.Config{ + Type: methodType, + + // common for type=oidc and type=jwt + JWTSupportedAlgs: c.JWTSupportedAlgs, + BoundAudiences: c.BoundAudiences, + ClaimMappings: c.ClaimMappings, + ListClaimMappings: c.ListClaimMappings, + OIDCDiscoveryURL: c.OIDCDiscoveryURL, + OIDCDiscoveryCACert: c.OIDCDiscoveryCACert, + + // just for type=jwt + JWKSURL: c.JWKSURL, + JWKSCACert: c.JWKSCACert, + JWTValidationPubKeys: c.JWTValidationPubKeys, + BoundIssuer: c.BoundIssuer, + ExpirationLeeway: c.ExpirationLeeway, + NotBeforeLeeway: c.NotBeforeLeeway, + ClockSkewLeeway: c.ClockSkewLeeway, + } + c.enterpriseConvertForLibrary(ssoConfig) + return ssoConfig +} diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/ssoauth/sso_oss.go consul-1.8.7+dfsg1/agent/consul/authmethod/ssoauth/sso_oss.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/ssoauth/sso_oss.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/ssoauth/sso_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,25 @@ +//+build !consulent + +package ssoauth + +import ( + "fmt" + + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/internal/go-sso/oidcauth" +) + +func validateType(typ string) error { + if typ != "jwt" { + return fmt.Errorf("type should be %q", "jwt") + } + return nil +} + +func (v *Validator) ssoEntMetaFromClaims(_ *oidcauth.Claims) *structs.EnterpriseMeta { + return nil +} + +type enterpriseConfig struct{} + +func (c *Config) enterpriseConvertForLibrary(_ *oidcauth.Config) {} diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/ssoauth/sso_test.go consul-1.8.7+dfsg1/agent/consul/authmethod/ssoauth/sso_test.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/ssoauth/sso_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/ssoauth/sso_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,270 @@ +package ssoauth + +import ( + "context" + "testing" + "time" + + "github.com/hashicorp/consul/agent/consul/authmethod" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/consul/sdk/freeport" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/go-hclog" + "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2/jwt" +) + +func TestJWT_NewValidator(t *testing.T) { + nullLogger := hclog.NewNullLogger() + type AM = *structs.ACLAuthMethod + + makeAuthMethod := func(typ string, f func(method AM)) *structs.ACLAuthMethod { + method := &structs.ACLAuthMethod{ + Name: "test-" + typ, + Description: typ + " test", + Type: typ, + Config: map[string]interface{}{}, + } + if f != nil { + f(method) + } + return method + } + + oidcServer := startTestServer(t) + + // Note that we won't test ALL of the available config variations here. + // The go-sso library has exhaustive tests. + for name, tc := range map[string]struct { + method *structs.ACLAuthMethod + expectErr string + }{ + "wrong type": {makeAuthMethod("invalid", nil), `type should be`}, + "extra config": {makeAuthMethod("jwt", func(method AM) { + method.Config["extra"] = "config" + }), "has invalid keys"}, + "wrong type of key in config blob": {makeAuthMethod("jwt", func(method AM) { + method.Config["JWKSURL"] = []int{12345} + }), `'JWKSURL' expected type 'string', got unconvertible type '[]int'`}, + + "normal jwt - static keys": {makeAuthMethod("jwt", func(method AM) { + method.Config["BoundIssuer"] = "https://legit.issuer.internal/" + pubKey, _ := oidcServer.SigningKeys() + method.Config["JWTValidationPubKeys"] = []string{pubKey} + }), ""}, + "normal jwt - jwks": {makeAuthMethod("jwt", func(method AM) { + method.Config["JWKSURL"] = oidcServer.Addr() + "/certs" + method.Config["JWKSCACert"] = oidcServer.CACert() + }), ""}, + "normal jwt - oidc discovery": {makeAuthMethod("jwt", func(method AM) { + method.Config["OIDCDiscoveryURL"] = oidcServer.Addr() + method.Config["OIDCDiscoveryCACert"] = oidcServer.CACert() + }), ""}, + } { + tc := tc + t.Run(name, func(t *testing.T) { + v, err := NewValidator(nullLogger, tc.method) + if tc.expectErr != "" { + testutil.RequireErrorContains(t, err, tc.expectErr) + require.Nil(t, v) + } else { + require.NoError(t, err) + require.NotNil(t, v) + v.Stop() + } + }) + } +} + +func TestJWT_ValidateLogin(t *testing.T) { + type mConfig = map[string]interface{} + + setup := func(t *testing.T, f func(config mConfig)) *Validator { + t.Helper() + + config := map[string]interface{}{ + "JWTSupportedAlgs": []string{"ES256"}, + "ClaimMappings": map[string]string{ + "first_name": "name", + "/org/primary": "primary_org", + }, + "ListClaimMappings": map[string]string{ + "https://consul.test/groups": "groups", + }, + "BoundAudiences": []string{"https://consul.test"}, + } + if f != nil { + f(config) + } + + method := &structs.ACLAuthMethod{ + Name: "test-method", + Type: "jwt", + Config: config, + } + + nullLogger := hclog.NewNullLogger() + v, err := NewValidator(nullLogger, method) + require.NoError(t, err) + return v + } + + oidcServer := startTestServer(t) + pubKey, privKey := oidcServer.SigningKeys() + + cases := map[string]struct { + f func(config mConfig) + issuer string + expectErr string + }{ + "success - jwt static keys": {func(config mConfig) { + config["BoundIssuer"] = "https://legit.issuer.internal/" + config["JWTValidationPubKeys"] = []string{pubKey} + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt jwks": {func(config mConfig) { + config["JWKSURL"] = oidcServer.Addr() + "/certs" + config["JWKSCACert"] = oidcServer.CACert() + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt oidc discovery": {func(config mConfig) { + config["OIDCDiscoveryURL"] = oidcServer.Addr() + config["OIDCDiscoveryCACert"] = oidcServer.CACert() + }, + oidcServer.Addr(), + ""}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + v := setup(t, tc.f) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Audience: jwt.Audience{"https://consul.test"}, + Issuer: tc.issuer, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + type orgs struct { + Primary string `json:"primary"` + } + + privateCl := struct { + FirstName string `json:"first_name"` + Org orgs `json:"org"` + Groups []string `json:"https://consul.test/groups"` + }{ + FirstName: "jeff2", + Org: orgs{"engineering"}, + Groups: []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT(privKey, cl, privateCl) + require.NoError(t, err) + + id, err := v.ValidateLogin(context.Background(), jwtData) + if tc.expectErr != "" { + testutil.RequireErrorContains(t, err, tc.expectErr) + } else { + require.NoError(t, err) + + authmethod.RequireIdentityMatch(t, id, map[string]string{ + "value.name": "jeff2", + "value.primary_org": "engineering", + }, + "value.name == jeff2", + "value.name != jeff", + "value.primary_org == engineering", + "foo in list.groups", + "bar in list.groups", + "salt not in list.groups", + ) + } + }) + } +} + +func TestNewIdentity(t *testing.T) { + // This is only based on claim mappings, so we'll just use the JWT type + // since that's cheaper to setup. + cases := map[string]struct { + claimMappings map[string]string + listClaimMappings map[string]string + expectVars map[string]string + expectFilters []string + }{ + "nil": {nil, nil, kv(), nil}, + "empty": {kv(), kv(), kv(), nil}, + "one value mapping": { + kv("foo1", "val1"), + kv(), + kv("value.val1", ""), + []string{`value.val1 == ""`}, + }, + "one list mapping": {kv(), + kv("foo2", "val2"), + kv(), + nil, + }, + "one of each": { + kv("foo1", "val1"), + kv("foo2", "val2"), + kv("value.val1", ""), + []string{`value.val1 == ""`}, + }, + "two value mappings": { + kv("foo1", "val1", "foo2", "val2"), + kv(), + kv("value.val1", "", "value.val2", ""), + []string{`value.val1 == ""`, `value.val2 == ""`}, + }, + } + pubKey, _ := oidcauthtest.SigningKeys() + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + method := &structs.ACLAuthMethod{ + Name: "test-method", + Type: "jwt", + Config: map[string]interface{}{ + "BoundIssuer": "https://legit.issuer.internal/", + "JWTValidationPubKeys": []string{pubKey}, + "ClaimMappings": tc.claimMappings, + "ListClaimMappings": tc.listClaimMappings, + }, + } + nullLogger := hclog.NewNullLogger() + v, err := NewValidator(nullLogger, method) + require.NoError(t, err) + + id := v.NewIdentity() + authmethod.RequireIdentityMatch(t, id, tc.expectVars, tc.expectFilters...) + }) + } +} + +func kv(a ...string) map[string]string { + if len(a)%2 != 0 { + panic("kv() requires even numbers of arguments") + } + m := make(map[string]string) + for i := 0; i < len(a); i += 2 { + m[a[i]] = a[i+1] + } + return m +} + +func startTestServer(t *testing.T) *oidcauthtest.Server { + ports := freeport.MustTake(1) + return oidcauthtest.Start(t, oidcauthtest.WithPort( + ports[0], + func() { freeport.Return(ports) }, + )) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/testauth/testing.go consul-1.8.7+dfsg1/agent/consul/authmethod/testauth/testing.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/testauth/testing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/testauth/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,12 +1,14 @@ package testauth import ( + "context" "fmt" "sync" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-uuid" ) @@ -79,12 +81,13 @@ } type Config struct { - SessionID string // unique identifier for this set of tokens in the database + SessionID string // unique identifier for this set of tokens in the database + Data map[string]string `json:",omitempty"` // random data for testing enterpriseConfig `mapstructure:",squash"` } -func newValidator(method *structs.ACLAuthMethod) (authmethod.Validator, error) { +func newValidator(logger hclog.Logger, method *structs.ACLAuthMethod) (authmethod.Validator, error) { if method.Type != "testing" { return nil, fmt.Errorf("%q is not a testing auth method", method.Name) } @@ -114,6 +117,8 @@ func (v *Validator) Name() string { return v.name } +func (v *Validator) Stop() {} + // ValidateLogin takes raw user-provided auth method metadata and ensures it is // sane, provably correct, and currently valid. Relevant identifying data is // extracted and returned for immediate use by the role binding process. @@ -122,16 +127,40 @@ // to extend the life of the underlying token. // // Returns auth method specific metadata suitable for the Role Binding process. -func (v *Validator) ValidateLogin(loginToken string) (map[string]string, *structs.EnterpriseMeta, error) { +func (v *Validator) ValidateLogin(ctx context.Context, loginToken string) (*authmethod.Identity, error) { fields, valid := GetSessionToken(v.config.SessionID, loginToken) if !valid { - return nil, nil, acl.ErrNotFound + return nil, acl.ErrNotFound + } + + id := v.NewIdentity() + id.SelectableFields = &selectableVars{ + ServiceAccount: selectableServiceAccount{ + Namespace: fields[serviceAccountNamespaceField], + Name: fields[serviceAccountNameField], + UID: fields[serviceAccountUIDField], + }, + } + for k, val := range fields { + id.ProjectedVars[k] = val } + id.EnterpriseMeta = v.testAuthEntMetaFromFields(fields) - return fields, v.testAuthEntMetaFromFields(fields), nil + return id, nil } -func (v *Validator) AvailableFields() []string { return availableFields } +func (v *Validator) NewIdentity() *authmethod.Identity { + id := &authmethod.Identity{ + SelectableFields: &selectableVars{}, + ProjectedVars: map[string]string{}, + } + + for _, f := range availableFields { + id.ProjectedVars[f] = "" + } + + return id +} const ( serviceAccountNamespaceField = "serviceaccount.namespace" @@ -145,18 +174,6 @@ serviceAccountUIDField, } -// MakeFieldMapSelectable converts a field map as returned by ValidateLogin -// into a structure suitable for selection with a binding rule. -func (v *Validator) MakeFieldMapSelectable(fieldMap map[string]string) interface{} { - return &selectableVars{ - ServiceAccount: selectableServiceAccount{ - Namespace: fieldMap[serviceAccountNamespaceField], - Name: fieldMap[serviceAccountNameField], - UID: fieldMap[serviceAccountUIDField], - }, - } -} - type selectableVars struct { ServiceAccount selectableServiceAccount `bexpr:"serviceaccount"` } diff -Nru consul-1.7.4+dfsg1/agent/consul/authmethod/testing.go consul-1.8.7+dfsg1/agent/consul/authmethod/testing.go --- consul-1.7.4+dfsg1/agent/consul/authmethod/testing.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/authmethod/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,45 @@ +package authmethod + +import ( + "sort" + + "github.com/hashicorp/go-bexpr" + "github.com/mitchellh/go-testing-interface" + "github.com/stretchr/testify/require" +) + +// RequireIdentityMatch tests to see if the given Identity matches the provided +// projected vars and filters for testing purpose. +func RequireIdentityMatch(t testing.T, id *Identity, projectedVars map[string]string, filters ...string) { + t.Helper() + + gotNames := id.ProjectedVarNames() + + require.Equal(t, projectedVars, id.ProjectedVars) + + expectNames := make([]string, 0, len(projectedVars)) + for k, _ := range projectedVars { + expectNames = append(expectNames, k) + } + sort.Strings(expectNames) + sort.Strings(gotNames) + + require.Equal(t, expectNames, gotNames) + require.Nil(t, id.EnterpriseMeta) + + for _, filter := range filters { + eval, err := bexpr.CreateEvaluatorForType(filter, nil, id.SelectableFields) + if err != nil { + t.Fatalf("filter %q got err: %v", filter, err) + } + + result, err := eval.Evaluate(id.SelectableFields) + if err != nil { + t.Fatalf("filter %q got err: %v", filter, err) + } + + if !result { + t.Fatalf("filter %q did not match", filter) + } + } +} diff -Nru consul-1.7.4+dfsg1/agent/consul/auto_config_endpoint.go consul-1.8.7+dfsg1/agent/consul/auto_config_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/auto_config_endpoint.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/auto_config_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,424 @@ +package consul + +import ( + "context" + "crypto/x509" + "encoding/base64" + "fmt" + + "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/proto" + + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/consul/authmethod/ssoauth" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/lib/template" + "github.com/hashicorp/consul/proto/pbautoconf" + "github.com/hashicorp/consul/proto/pbconfig" + "github.com/hashicorp/consul/proto/pbconnect" + "github.com/hashicorp/consul/tlsutil" + bexpr "github.com/hashicorp/go-bexpr" + "github.com/mitchellh/mapstructure" +) + +type AutoConfigOptions struct { + NodeName string + SegmentName string + + CSR *x509.CertificateRequest + SpiffeID *connect.SpiffeIDAgent +} + +type AutoConfigAuthorizer interface { + // Authorizes the request and returns a struct containing the various + // options for how to generate the configuration. + Authorize(*pbautoconf.AutoConfigRequest) (AutoConfigOptions, error) +} + +type disabledAuthorizer struct{} + +func (_ *disabledAuthorizer) Authorize(_ *pbautoconf.AutoConfigRequest) (AutoConfigOptions, error) { + return AutoConfigOptions{}, fmt.Errorf("Auto Config is disabled") +} + +type jwtAuthorizer struct { + validator *ssoauth.Validator + allowReuse bool + claimAssertions []string +} + +func (a *jwtAuthorizer) Authorize(req *pbautoconf.AutoConfigRequest) (AutoConfigOptions, error) { + // perform basic JWT Authorization + identity, err := a.validator.ValidateLogin(context.Background(), req.JWT) + if err != nil { + // TODO (autoconf) maybe we should add a more generic permission denied error not tied to the ACL package? + return AutoConfigOptions{}, acl.PermissionDenied("Failed JWT authorization: %v", err) + } + + varMap := map[string]string{ + "node": req.Node, + "segment": req.Segment, + } + + for _, raw := range a.claimAssertions { + // validate and fill any HIL + filled, err := template.InterpolateHIL(raw, varMap, true) + if err != nil { + return AutoConfigOptions{}, fmt.Errorf("Failed to render claim assertion template %q: %w", raw, err) + } + + evaluator, err := bexpr.CreateEvaluatorForType(filled, nil, identity.SelectableFields) + if err != nil { + return AutoConfigOptions{}, fmt.Errorf("Failed to create evaluator for claim assertion %q: %w", filled, err) + } + + ok, err := evaluator.Evaluate(identity.SelectableFields) + if err != nil { + return AutoConfigOptions{}, fmt.Errorf("Failed to execute claim assertion %q: %w", filled, err) + } + + if !ok { + return AutoConfigOptions{}, acl.PermissionDenied("Failed JWT claim assertion") + } + } + + opts := AutoConfigOptions{ + NodeName: req.Node, + SegmentName: req.Segment, + } + + if req.CSR != "" { + csr, id, err := parseAutoConfigCSR(req.CSR) + if err != nil { + return AutoConfigOptions{}, err + } + + if id.Agent != req.Node { + return AutoConfigOptions{}, fmt.Errorf("Spiffe ID agent name (%s) of the certificate signing request is not for the correct node (%s)", id.Agent, req.Node) + } + + opts.CSR = csr + opts.SpiffeID = id + } + + return opts, nil +} + +type AutoConfigBackend interface { + CreateACLToken(template *structs.ACLToken) (*structs.ACLToken, error) + DatacenterJoinAddresses(segment string) ([]string, error) + ForwardRPC(method string, info structs.RPCInfo, args, reply interface{}) (bool, error) + + GetCARoots() (*structs.IndexedCARoots, error) + SignCertificate(csr *x509.CertificateRequest, id connect.CertURI) (*structs.IssuedCert, error) +} + +// AutoConfig endpoint is used for cluster auto configuration operations +type AutoConfig struct { + // currently AutoConfig does not support pushing down any configuration that would be reloadable on the servers + // (outside of some TLS settings such as the configured CA certs which are retrieved via the TLS configurator) + // If that changes then we will need to change this to use an atomic.Value and provide means of reloading it. + config *Config + tlsConfigurator *tlsutil.Configurator + + backend AutoConfigBackend + authorizer AutoConfigAuthorizer +} + +func NewAutoConfig(conf *Config, tlsConfigurator *tlsutil.Configurator, backend AutoConfigBackend, authz AutoConfigAuthorizer) *AutoConfig { + if conf == nil { + conf = DefaultConfig() + } + + return &AutoConfig{ + config: conf, + tlsConfigurator: tlsConfigurator, + backend: backend, + authorizer: authz, + } +} + +// updateTLSCertificatesInConfig will ensure that the TLS settings regarding how an agent is +// made aware of its certificates are populated. This will only work if connect is enabled and +// in some cases only if auto_encrypt is enabled on the servers. This endpoint has the option +// to configure auto_encrypt or potentially in the future to generate the certificates inline. +func (ac *AutoConfig) updateTLSCertificatesInConfig(opts AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error { + // nothing to be done as we cannot generate certificates + if !ac.config.ConnectEnabled { + return nil + } + + if opts.CSR != nil { + cert, err := ac.backend.SignCertificate(opts.CSR, opts.SpiffeID) + if err != nil { + return fmt.Errorf("Failed to sign CSR: %w", err) + } + + // convert to the protobuf form of the issued certificate + pbcert, err := translateIssuedCertToProtobuf(cert) + if err != nil { + return err + } + resp.Certificate = pbcert + } + + connectRoots, err := ac.backend.GetCARoots() + if err != nil { + return fmt.Errorf("Failed to lookup the CA roots: %w", err) + } + + // convert to the protobuf form of the issued certificate + pbroots, err := translateCARootsToProtobuf(connectRoots) + if err != nil { + return err + } + + resp.CARoots = pbroots + + // get the non-connect CA certs from the TLS Configurator + if ac.tlsConfigurator != nil { + resp.ExtraCACertificates = ac.tlsConfigurator.ManualCAPems() + } + + return nil +} + +// updateACLtokensInConfig will configure all of the agents ACL settings and will populate +// the configuration with an agent token usable for all default agent operations. +func (ac *AutoConfig) updateACLsInConfig(opts AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error { + acl := &pbconfig.ACL{ + Enabled: ac.config.ACLsEnabled, + PolicyTTL: ac.config.ACLPolicyTTL.String(), + RoleTTL: ac.config.ACLRoleTTL.String(), + TokenTTL: ac.config.ACLTokenTTL.String(), + DisabledTTL: ac.config.ACLDisabledTTL.String(), + DownPolicy: ac.config.ACLDownPolicy, + DefaultPolicy: ac.config.ACLDefaultPolicy, + EnableKeyListPolicy: ac.config.ACLEnableKeyListPolicy, + } + + // when ACLs are enabled we want to create a local token with a node identity + if ac.config.ACLsEnabled { + // set up the token template - the ids and create + template := structs.ACLToken{ + Description: fmt.Sprintf("Auto Config Token for Node %q", opts.NodeName), + Local: true, + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: opts.NodeName, + Datacenter: ac.config.Datacenter, + }, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + } + + token, err := ac.backend.CreateACLToken(&template) + if err != nil { + return fmt.Errorf("Failed to generate an ACL token for node %q - %w", opts.NodeName, err) + } + + acl.Tokens = &pbconfig.ACLTokens{Agent: token.SecretID} + } + + resp.Config.ACL = acl + return nil +} + +// updateJoinAddressesInConfig determines the correct gossip endpoints that clients should +// be connecting to for joining the cluster based on the segment given in the opts parameter. +func (ac *AutoConfig) updateJoinAddressesInConfig(opts AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error { + joinAddrs, err := ac.backend.DatacenterJoinAddresses(opts.SegmentName) + if err != nil { + return err + } + + if resp.Config.Gossip == nil { + resp.Config.Gossip = &pbconfig.Gossip{} + } + + resp.Config.Gossip.RetryJoinLAN = joinAddrs + return nil +} + +// updateGossipEncryptionInConfig will populate the gossip encryption configuration settings +func (ac *AutoConfig) updateGossipEncryptionInConfig(_ AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error { + // Add gossip encryption settings if there is any key loaded + memberlistConfig := ac.config.SerfLANConfig.MemberlistConfig + if lanKeyring := memberlistConfig.Keyring; lanKeyring != nil { + if resp.Config.Gossip == nil { + resp.Config.Gossip = &pbconfig.Gossip{} + } + if resp.Config.Gossip.Encryption == nil { + resp.Config.Gossip.Encryption = &pbconfig.GossipEncryption{} + } + + pk := lanKeyring.GetPrimaryKey() + if len(pk) > 0 { + resp.Config.Gossip.Encryption.Key = base64.StdEncoding.EncodeToString(pk) + } + + resp.Config.Gossip.Encryption.VerifyIncoming = memberlistConfig.GossipVerifyIncoming + resp.Config.Gossip.Encryption.VerifyOutgoing = memberlistConfig.GossipVerifyOutgoing + } + + return nil +} + +// updateTLSSettingsInConfig will populate the TLS configuration settings but will not +// populate leaf or ca certficiates. +func (ac *AutoConfig) updateTLSSettingsInConfig(_ AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error { + if ac.tlsConfigurator == nil { + // TLS is not enabled? + return nil + } + + // add in TLS configuration + if resp.Config.TLS == nil { + resp.Config.TLS = &pbconfig.TLS{} + } + + resp.Config.TLS.VerifyServerHostname = ac.tlsConfigurator.VerifyServerHostname() + base := ac.tlsConfigurator.Base() + resp.Config.TLS.VerifyOutgoing = base.VerifyOutgoing + resp.Config.TLS.MinVersion = base.TLSMinVersion + resp.Config.TLS.PreferServerCipherSuites = base.PreferServerCipherSuites + + var err error + resp.Config.TLS.CipherSuites, err = tlsutil.CipherString(base.CipherSuites) + return err +} + +// baseConfig will populate the configuration with some base settings such as the +// datacenter names, node name etc. +func (ac *AutoConfig) baseConfig(opts AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error { + if opts.NodeName == "" { + return fmt.Errorf("Cannot generate auto config response without a node name") + } + + resp.Config.Datacenter = ac.config.Datacenter + resp.Config.PrimaryDatacenter = ac.config.PrimaryDatacenter + resp.Config.NodeName = opts.NodeName + resp.Config.SegmentName = opts.SegmentName + + return nil +} + +type autoConfigUpdater func(c *AutoConfig, opts AutoConfigOptions, resp *pbautoconf.AutoConfigResponse) error + +var ( + // variable holding the list of config updating functions to execute when generating + // the auto config response. This will allow for more easily adding extra self-contained + // configurators here in the future. + autoConfigUpdaters []autoConfigUpdater = []autoConfigUpdater{ + (*AutoConfig).baseConfig, + (*AutoConfig).updateJoinAddressesInConfig, + (*AutoConfig).updateGossipEncryptionInConfig, + (*AutoConfig).updateTLSSettingsInConfig, + (*AutoConfig).updateACLsInConfig, + (*AutoConfig).updateTLSCertificatesInConfig, + } +) + +// AgentAutoConfig will authorize the incoming request and then generate the configuration +// to push down to the client +func (ac *AutoConfig) InitialConfiguration(req *pbautoconf.AutoConfigRequest, resp *pbautoconf.AutoConfigResponse) error { + // default the datacenter to our datacenter - agents do not have to specify this as they may not + // yet know the datacenter name they are going to be in. + if req.Datacenter == "" { + req.Datacenter = ac.config.Datacenter + } + + // TODO (autoconf) Is performing auto configuration over the WAN really a bad idea? + if req.Datacenter != ac.config.Datacenter { + return fmt.Errorf("invalid datacenter %q - agent auto configuration cannot target a remote datacenter", req.Datacenter) + } + + // TODO (autoconf) maybe panic instead? + if ac.backend == nil { + return fmt.Errorf("No Auto Config backend is configured") + } + + // forward to the leader + if done, err := ac.backend.ForwardRPC("AutoConfig.InitialConfiguration", req, req, resp); done { + return err + } + + // TODO (autoconf) maybe panic instead? + if ac.authorizer == nil { + return fmt.Errorf("No Auto Config authorizer is configured") + } + + // authorize the request with the configured authorizer + opts, err := ac.authorizer.Authorize(req) + if err != nil { + return err + } + + resp.Config = &pbconfig.Config{} + + // update all the configurations + for _, configFn := range autoConfigUpdaters { + if err := configFn(ac, opts, resp); err != nil { + return err + } + } + + return nil +} + +func parseAutoConfigCSR(csr string) (*x509.CertificateRequest, *connect.SpiffeIDAgent, error) { + // Parse the CSR string into the x509 CertificateRequest struct + x509CSR, err := connect.ParseCSR(csr) + if err != nil { + return nil, nil, fmt.Errorf("Failed to parse CSR: %w", err) + } + + // ensure that a URI SAN is present + if len(x509CSR.URIs) < 1 { + return nil, nil, fmt.Errorf("CSR didn't include any URI SANs") + } + + // Parse the SPIFFE ID + spiffeID, err := connect.ParseCertURI(x509CSR.URIs[0]) + if err != nil { + return nil, nil, fmt.Errorf("Failed to parse the SPIFFE URI: %w", err) + } + + agentID, isAgent := spiffeID.(*connect.SpiffeIDAgent) + if !isAgent { + return nil, nil, fmt.Errorf("SPIFFE ID is not an Agent ID") + } + + return x509CSR, agentID, nil +} + +func translateCARootsToProtobuf(in *structs.IndexedCARoots) (*pbconnect.CARoots, error) { + var out pbconnect.CARoots + if err := mapstructureTranslateToProtobuf(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + + return &out, nil +} + +func translateIssuedCertToProtobuf(in *structs.IssuedCert) (*pbconnect.IssuedCert, error) { + var out pbconnect.IssuedCert + if err := mapstructureTranslateToProtobuf(in, &out); err != nil { + return nil, fmt.Errorf("Failed to re-encode CA Roots: %w", err) + } + + return &out, nil +} + +func mapstructureTranslateToProtobuf(in interface{}, out interface{}) error { + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: proto.HookTimeToPBTimestamp, + Result: out, + }) + + if err != nil { + return err + } + + return decoder.Decode(in) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/auto_config_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/auto_config_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/auto_config_endpoint_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/auto_config_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,851 @@ +package consul + +import ( + "crypto/x509" + "encoding/base64" + "fmt" + "io/ioutil" + "math/rand" + "net" + "os" + "path" + "testing" + "time" + + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/consul/proto/pbautoconf" + "github.com/hashicorp/consul/proto/pbconfig" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/memberlist" + msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "gopkg.in/square/go-jose.v2/jwt" +) + +type mockAutoConfigBackend struct { + mock.Mock +} + +func (m *mockAutoConfigBackend) CreateACLToken(template *structs.ACLToken) (*structs.ACLToken, error) { + ret := m.Called(template) + // this handles converting an untyped nil to a typed nil + token, _ := ret.Get(0).(*structs.ACLToken) + return token, ret.Error(1) +} + +func (m *mockAutoConfigBackend) DatacenterJoinAddresses(segment string) ([]string, error) { + ret := m.Called(segment) + // this handles converting an untyped nil to a typed nil + addrs, _ := ret.Get(0).([]string) + return addrs, ret.Error(1) +} + +func (m *mockAutoConfigBackend) ForwardRPC(method string, info structs.RPCInfo, args, reply interface{}) (bool, error) { + ret := m.Called(method, info, args, reply) + return ret.Bool(0), ret.Error(1) +} + +func (m *mockAutoConfigBackend) GetCARoots() (*structs.IndexedCARoots, error) { + ret := m.Called() + roots, _ := ret.Get(0).(*structs.IndexedCARoots) + return roots, ret.Error(1) +} + +func (m *mockAutoConfigBackend) SignCertificate(csr *x509.CertificateRequest, id connect.CertURI) (*structs.IssuedCert, error) { + ret := m.Called(csr, id) + cert, _ := ret.Get(0).(*structs.IssuedCert) + return cert, ret.Error(1) +} + +func testJWTStandardClaims() jwt.Claims { + now := time.Now() + + return jwt.Claims{ + Subject: "consul", + Issuer: "consul", + Audience: jwt.Audience{"consul"}, + NotBefore: jwt.NewNumericDate(now.Add(-1 * time.Second)), + Expiry: jwt.NewNumericDate(now.Add(10 * time.Minute)), + } +} + +func signJWT(t *testing.T, privKey string, claims jwt.Claims, privateClaims interface{}) string { + t.Helper() + token, err := oidcauthtest.SignJWT(privKey, claims, privateClaims) + require.NoError(t, err) + return token +} + +func signJWTWithStandardClaims(t *testing.T, privKey string, claims interface{}) string { + t.Helper() + return signJWT(t, privKey, testJWTStandardClaims(), claims) +} + +// TestAutoConfigInitialConfiguration is really an integration test of all the moving parts of the AutoConfig.InitialConfiguration RPC. +// Full testing of the individual parts will not be done in this test: +// +// * Any implementations of the AutoConfigAuthorizer interface (although these test do use the jwtAuthorizer) +// * Each of the individual config generation functions. These can be unit tested separately and should NOT +// require running test servers +func TestAutoConfigInitialConfiguration(t *testing.T) { + gossipKey := make([]byte, 32) + // this is not cryptographic randomness and is not secure but for the sake of this test its all we need. + n, err := rand.Read(gossipKey) + require.NoError(t, err) + require.Equal(t, 32, n) + + gossipKeyEncoded := base64.StdEncoding.EncodeToString(gossipKey) + + // generate a test certificate for the server serving out the insecure RPC + cert, key, cacert, err := testTLSCertificates("server.dc1.consul") + require.NoError(t, err) + + // generate a JWT signer + pub, priv, err := oidcauthtest.GenerateKey() + require.NoError(t, err) + + _, altpriv, err := oidcauthtest.GenerateKey() + require.NoError(t, err) + + // this CSR is what gets sent in the request + csrID := connect.SpiffeIDAgent{ + Host: "dummy.trustdomain", + Agent: "test-node", + Datacenter: "dc1", + } + csr, _ := connect.TestCSR(t, &csrID) + + altCSRID := connect.SpiffeIDAgent{ + Host: "dummy.trustdomain", + Agent: "alt", + Datacenter: "dc1", + } + + altCSR, _ := connect.TestCSR(t, &altCSRID) + + _, s, _ := testACLServerWithConfig(t, func(c *Config) { + c.Domain = "consul" + c.AutoConfigAuthzEnabled = true + c.AutoConfigAuthzAuthMethod = structs.ACLAuthMethod{ + Name: "Auth Config Authorizer", + Type: "jwt", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + Config: map[string]interface{}{ + "BoundAudiences": []string{"consul"}, + "BoundIssuer": "consul", + "JWTValidationPubKeys": []string{pub}, + "ClaimMappings": map[string]string{ + "consul_node_name": "node", + }, + }, + } + c.AutoConfigAuthzClaimAssertions = []string{ + `value.node == "${node}"`, + } + c.AutoConfigAuthzAllowReuse = true + + cafile := path.Join(c.DataDir, "cacert.pem") + err := ioutil.WriteFile(cafile, []byte(cacert), 0600) + require.NoError(t, err) + + certfile := path.Join(c.DataDir, "cert.pem") + err = ioutil.WriteFile(certfile, []byte(cert), 0600) + require.NoError(t, err) + + keyfile := path.Join(c.DataDir, "key.pem") + err = ioutil.WriteFile(keyfile, []byte(key), 0600) + require.NoError(t, err) + + c.CAFile = cafile + c.CertFile = certfile + c.KeyFile = keyfile + c.VerifyOutgoing = true + c.VerifyIncoming = true + c.VerifyServerHostname = true + c.TLSMinVersion = "tls12" + c.TLSPreferServerCipherSuites = true + + c.ConnectEnabled = true + c.AutoEncryptAllowTLS = true + c.SerfLANConfig.MemberlistConfig.GossipVerifyIncoming = true + c.SerfLANConfig.MemberlistConfig.GossipVerifyOutgoing = true + + keyring, err := memberlist.NewKeyring(nil, gossipKey) + require.NoError(t, err) + c.SerfLANConfig.MemberlistConfig.Keyring = keyring + }, false) + + conf := tlsutil.Config{ + CAFile: s.config.CAFile, + VerifyServerHostname: s.config.VerifyServerHostname, + VerifyOutgoing: s.config.VerifyOutgoing, + Domain: s.config.Domain, + } + codec, err := insecureRPCClient(s, conf) + require.NoError(t, err) + + waitForLeaderEstablishment(t, s) + + roots, err := s.GetCARoots() + require.NoError(t, err) + + pbroots, err := translateCARootsToProtobuf(roots) + require.NoError(t, err) + + joinAddr := &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: s.config.SerfLANConfig.MemberlistConfig.AdvertisePort} + + // ------------------------------------------------------------------------- + // Common test setup is now complete + // ------------------------------------------------------------------------- + + type testCase struct { + request pbautoconf.AutoConfigRequest + expected pbautoconf.AutoConfigResponse + patchResponse func(t *testing.T, srv *Server, resp *pbautoconf.AutoConfigResponse) + err string + } + + cases := map[string]testCase{ + "wrong-datacenter": { + request: pbautoconf.AutoConfigRequest{ + Datacenter: "no-such-dc", + }, + err: `invalid datacenter "no-such-dc" - agent auto configuration cannot target a remote datacenter`, + }, + "unverifiable": { + request: pbautoconf.AutoConfigRequest{ + Node: "test-node", + // this is signed using an incorrect private key + JWT: signJWTWithStandardClaims(t, altpriv, map[string]interface{}{"consul_node_name": "test-node"}), + }, + err: "Permission denied: Failed JWT authorization: no known key successfully validated the token signature", + }, + "claim-assertion-failed": { + request: pbautoconf.AutoConfigRequest{ + Node: "test-node", + JWT: signJWTWithStandardClaims(t, priv, map[string]interface{}{"wrong_claim": "test-node"}), + }, + err: "Permission denied: Failed JWT claim assertion", + }, + "bad-csr-id": { + request: pbautoconf.AutoConfigRequest{ + Node: "test-node", + JWT: signJWTWithStandardClaims(t, priv, map[string]interface{}{"consul_node_name": "test-node"}), + CSR: altCSR, + }, + err: "Spiffe ID agent name (alt) of the certificate signing request is not for the correct node (test-node)", + }, + "good": { + request: pbautoconf.AutoConfigRequest{ + Node: "test-node", + JWT: signJWTWithStandardClaims(t, priv, map[string]interface{}{"consul_node_name": "test-node"}), + CSR: csr, + }, + expected: pbautoconf.AutoConfigResponse{ + CARoots: pbroots, + ExtraCACertificates: []string{cacert}, + Config: &pbconfig.Config{ + Datacenter: "dc1", + PrimaryDatacenter: "dc1", + NodeName: "test-node", + ACL: &pbconfig.ACL{ + Enabled: true, + PolicyTTL: "30s", + TokenTTL: "30s", + RoleTTL: "30s", + DisabledTTL: "0s", + DownPolicy: "extend-cache", + DefaultPolicy: "deny", + Tokens: &pbconfig.ACLTokens{ + Agent: "patched-secret", + }, + }, + Gossip: &pbconfig.Gossip{ + Encryption: &pbconfig.GossipEncryption{ + Key: gossipKeyEncoded, + VerifyIncoming: true, + VerifyOutgoing: true, + }, + RetryJoinLAN: []string{joinAddr.String()}, + }, + TLS: &pbconfig.TLS{ + VerifyOutgoing: true, + VerifyServerHostname: true, + MinVersion: "tls12", + PreferServerCipherSuites: true, + }, + }, + }, + patchResponse: func(t *testing.T, srv *Server, resp *pbautoconf.AutoConfigResponse) { + // we are expecting an ACL token but cannot check anything for equality + // so here we check that it was set and overwrite it + require.NotNil(t, resp.Config) + require.NotNil(t, resp.Config.ACL) + require.NotNil(t, resp.Config.ACL.Tokens) + require.NotEmpty(t, resp.Config.ACL.Tokens.Agent) + resp.Config.ACL.Tokens.Agent = "patched-secret" + + require.NotNil(t, resp.Certificate) + require.NotEmpty(t, resp.Certificate.SerialNumber) + require.NotEmpty(t, resp.Certificate.CertPEM) + require.Empty(t, resp.Certificate.Service) + require.Empty(t, resp.Certificate.ServiceURI) + require.Equal(t, "test-node", resp.Certificate.Agent) + + expectedID := connect.SpiffeIDAgent{ + Host: roots.TrustDomain, + Agent: "test-node", + Datacenter: "dc1", + } + + require.Equal(t, expectedID.URI().String(), resp.Certificate.AgentURI) + + // nil this out so we don't check it for equality + resp.Certificate = nil + }, + }, + } + + for testName, tcase := range cases { + t.Run(testName, func(t *testing.T) { + var reply pbautoconf.AutoConfigResponse + err := msgpackrpc.CallWithCodec(codec, "AutoConfig.InitialConfiguration", &tcase.request, &reply) + if tcase.err != "" { + testutil.RequireErrorContains(t, err, tcase.err) + } else { + require.NoError(t, err) + if tcase.patchResponse != nil { + tcase.patchResponse(t, s, &reply) + } + require.Equal(t, tcase.expected, reply) + } + }) + } +} + +func TestAutoConfig_baseConfig(t *testing.T) { + type testCase struct { + serverConfig Config + opts AutoConfigOptions + expected pbautoconf.AutoConfigResponse + err string + } + + cases := map[string]testCase{ + "ok": { + serverConfig: Config{ + Datacenter: "oSWzfhnU", + PrimaryDatacenter: "53XO9mx4", + }, + opts: AutoConfigOptions{ + NodeName: "lBdc0lsH", + SegmentName: "HZiwlWpi", + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + Datacenter: "oSWzfhnU", + PrimaryDatacenter: "53XO9mx4", + NodeName: "lBdc0lsH", + SegmentName: "HZiwlWpi", + }, + }, + }, + "no-node-name": { + serverConfig: Config{ + Datacenter: "oSWzfhnU", + PrimaryDatacenter: "53XO9mx4", + }, + err: "Cannot generate auto config response without a node name", + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + ac := AutoConfig{ + config: &tcase.serverConfig, + } + + actual := pbautoconf.AutoConfigResponse{Config: &pbconfig.Config{}} + err := ac.baseConfig(tcase.opts, &actual) + if tcase.err == "" { + require.NoError(t, err) + require.Equal(t, tcase.expected, actual) + } else { + testutil.RequireErrorContains(t, err, tcase.err) + } + }) + } +} + +func parseCiphers(t *testing.T, cipherStr string) []uint16 { + t.Helper() + ciphers, err := tlsutil.ParseCiphers(cipherStr) + require.NoError(t, err) + return ciphers +} + +func TestAutoConfig_updateTLSSettingsInConfig(t *testing.T) { + _, _, cacert, err := testTLSCertificates("server.dc1.consul") + require.NoError(t, err) + + dir := testutil.TempDir(t, "auto-config-tls-settings") + t.Cleanup(func() { os.RemoveAll(dir) }) + + cafile := path.Join(dir, "cacert.pem") + err = ioutil.WriteFile(cafile, []byte(cacert), 0600) + require.NoError(t, err) + + type testCase struct { + tlsConfig tlsutil.Config + expected pbautoconf.AutoConfigResponse + } + + cases := map[string]testCase{ + "secure": { + tlsConfig: tlsutil.Config{ + VerifyOutgoing: true, + VerifyServerHostname: true, + TLSMinVersion: "tls12", + PreferServerCipherSuites: true, + CAFile: cafile, + CipherSuites: parseCiphers(t, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"), + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + TLS: &pbconfig.TLS{ + VerifyOutgoing: true, + VerifyServerHostname: true, + MinVersion: "tls12", + PreferServerCipherSuites: true, + CipherSuites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + }, + }, + }, + }, + "less-secure": { + tlsConfig: tlsutil.Config{ + VerifyOutgoing: true, + VerifyServerHostname: false, + TLSMinVersion: "tls10", + PreferServerCipherSuites: false, + CAFile: cafile, + CipherSuites: parseCiphers(t, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"), + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + TLS: &pbconfig.TLS{ + VerifyOutgoing: true, + VerifyServerHostname: false, + MinVersion: "tls10", + PreferServerCipherSuites: false, + CipherSuites: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + }, + }, + }, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + logger := testutil.Logger(t) + configurator, err := tlsutil.NewConfigurator(tcase.tlsConfig, logger) + require.NoError(t, err) + + ac := &AutoConfig{ + tlsConfigurator: configurator, + } + + actual := pbautoconf.AutoConfigResponse{Config: &pbconfig.Config{}} + err = ac.updateTLSSettingsInConfig(AutoConfigOptions{}, &actual) + require.NoError(t, err) + require.Equal(t, tcase.expected, actual) + }) + } +} + +func TestAutoConfig_updateGossipEncryptionInConfig(t *testing.T) { + type testCase struct { + conf memberlist.Config + expected pbautoconf.AutoConfigResponse + } + + gossipKey := make([]byte, 32) + // this is not cryptographic randomness and is not secure but for the sake of this test its all we need. + n, err := rand.Read(gossipKey) + require.NoError(t, err) + require.Equal(t, 32, n) + gossipKeyEncoded := base64.StdEncoding.EncodeToString(gossipKey) + + keyring, err := memberlist.NewKeyring(nil, gossipKey) + require.NoError(t, err) + + cases := map[string]testCase{ + "encryption-required": { + conf: memberlist.Config{ + Keyring: keyring, + GossipVerifyIncoming: true, + GossipVerifyOutgoing: true, + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + Gossip: &pbconfig.Gossip{ + Encryption: &pbconfig.GossipEncryption{ + Key: gossipKeyEncoded, + VerifyIncoming: true, + VerifyOutgoing: true, + }, + }, + }, + }, + }, + "encryption-allowed": { + conf: memberlist.Config{ + Keyring: keyring, + GossipVerifyIncoming: false, + GossipVerifyOutgoing: false, + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + Gossip: &pbconfig.Gossip{ + Encryption: &pbconfig.GossipEncryption{ + Key: gossipKeyEncoded, + VerifyIncoming: false, + VerifyOutgoing: false, + }, + }, + }, + }, + }, + "encryption-disabled": { + // zero values all around - if no keyring is configured then the gossip + // encryption settings should not be set. + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{}, + }, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.SerfLANConfig.MemberlistConfig = &tcase.conf + + ac := AutoConfig{ + config: cfg, + } + + actual := pbautoconf.AutoConfigResponse{Config: &pbconfig.Config{}} + err := ac.updateGossipEncryptionInConfig(AutoConfigOptions{}, &actual) + require.NoError(t, err) + require.Equal(t, tcase.expected, actual) + }) + } +} + +func TestAutoConfig_updateTLSCertificatesInConfig(t *testing.T) { + now := time.Now() + later := now.Add(time.Hour) + + // Generate a Test CA + ca := connect.TestCA(t, nil) + + // roots will be returned by the mock backend + roots := structs.IndexedCARoots{ + ActiveRootID: ca.ID, + TrustDomain: connect.TestClusterID + ".consul", + Roots: []*structs.CARoot{ + ca, + }, + } + + // this CSR is what gets put into the opts for the + // function to look at an process + csrID := connect.SpiffeIDAgent{ + Host: roots.TrustDomain, + Agent: "test", + Datacenter: "dc1", + } + csrStr, _ := connect.TestCSR(t, &csrID) + + csr, err := connect.ParseCSR(csrStr) + require.NoError(t, err) + + // fake certificate response for the backend + fakeCert := structs.IssuedCert{ + SerialNumber: "1", + CertPEM: "not-currently-decoded", + ValidAfter: now, + ValidBefore: later, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + RaftIndex: structs.RaftIndex{ + ModifyIndex: 10, + CreateIndex: 10, + }, + } + + // translate the fake cert to the protobuf equivalent + // for embedding in expected results + pbcert, err := translateIssuedCertToProtobuf(&fakeCert) + require.NoError(t, err) + + // generate a CA certificate to use for specifying non-Connect + // certificates which come back differently in the response + _, _, cacert, err := testTLSCertificates("server.dc1.consul") + require.NoError(t, err) + + // write out that ca cert to disk - it is unfortunate that + // this is necessary but creation of the tlsutil.Configurator + // will error if it cannot load the CA certificate from disk + dir := testutil.TempDir(t, "auto-config-tls-certificate") + t.Cleanup(func() { os.RemoveAll(dir) }) + + cafile := path.Join(dir, "cacert.pem") + err = ioutil.WriteFile(cafile, []byte(cacert), 0600) + require.NoError(t, err) + + // translate the roots response to protobuf to be embedded + // into the expected results + pbroots, err := translateCARootsToProtobuf(&roots) + require.NoError(t, err) + + type testCase struct { + serverConfig Config + tlsConfig tlsutil.Config + + opts AutoConfigOptions + expected pbautoconf.AutoConfigResponse + } + + cases := map[string]testCase{ + "no-csr": { + serverConfig: Config{ + ConnectEnabled: true, + }, + tlsConfig: tlsutil.Config{ + VerifyOutgoing: true, + VerifyServerHostname: true, + TLSMinVersion: "tls12", + PreferServerCipherSuites: true, + CAFile: cafile, + CipherSuites: parseCiphers(t, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"), + }, + expected: pbautoconf.AutoConfigResponse{ + CARoots: pbroots, + ExtraCACertificates: []string{cacert}, + Config: &pbconfig.Config{}, + }, + }, + "signed-certificate": { + serverConfig: Config{ + ConnectEnabled: true, + }, + tlsConfig: tlsutil.Config{ + VerifyOutgoing: true, + VerifyServerHostname: true, + TLSMinVersion: "tls12", + PreferServerCipherSuites: true, + CAFile: cafile, + CipherSuites: parseCiphers(t, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"), + }, + opts: AutoConfigOptions{ + NodeName: "test", + CSR: csr, + SpiffeID: &csrID, + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{}, + CARoots: pbroots, + ExtraCACertificates: []string{cacert}, + Certificate: pbcert, + }, + }, + "connect-disabled": { + serverConfig: Config{ + ConnectEnabled: false, + }, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{}, + }, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + backend := &mockAutoConfigBackend{} + backend.On("GetCARoots").Return(&roots, nil) + backend.On("SignCertificate", tcase.opts.CSR, tcase.opts.SpiffeID).Return(&fakeCert, nil) + + tlsConfigurator, err := tlsutil.NewConfigurator(tcase.tlsConfig, testutil.Logger(t)) + require.NoError(t, err) + + ac := AutoConfig{ + config: &tcase.serverConfig, + tlsConfigurator: tlsConfigurator, + backend: backend, + } + + actual := pbautoconf.AutoConfigResponse{Config: &pbconfig.Config{}} + err = ac.updateTLSCertificatesInConfig(tcase.opts, &actual) + require.NoError(t, err) + require.Equal(t, tcase.expected, actual) + }) + } +} + +func TestAutoConfig_updateACLsInConfig(t *testing.T) { + type testCase struct { + config Config + expected pbautoconf.AutoConfigResponse + expectACLToken bool + err error + } + + const ( + tokenAccessor = "b98761aa-c0ee-445b-9b0c-f54b56b47778" + tokenSecret = "1c96448a-ab04-4caa-982a-e8b095a111e2" + ) + + testDC := "dc1" + + cases := map[string]testCase{ + "enabled": { + config: Config{ + Datacenter: testDC, + PrimaryDatacenter: testDC, + ACLsEnabled: true, + ACLPolicyTTL: 7 * time.Second, + ACLRoleTTL: 10 * time.Second, + ACLTokenTTL: 12 * time.Second, + ACLDisabledTTL: 31 * time.Second, + ACLDefaultPolicy: "allow", + ACLDownPolicy: "deny", + ACLEnableKeyListPolicy: true, + }, + expectACLToken: true, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + ACL: &pbconfig.ACL{ + Enabled: true, + PolicyTTL: "7s", + RoleTTL: "10s", + TokenTTL: "12s", + DisabledTTL: "31s", + DownPolicy: "deny", + DefaultPolicy: "allow", + EnableKeyListPolicy: true, + Tokens: &pbconfig.ACLTokens{ + Agent: tokenSecret, + }, + }, + }, + }, + }, + "disabled": { + config: Config{ + Datacenter: testDC, + PrimaryDatacenter: testDC, + ACLsEnabled: false, + ACLPolicyTTL: 7 * time.Second, + ACLRoleTTL: 10 * time.Second, + ACLTokenTTL: 12 * time.Second, + ACLDisabledTTL: 31 * time.Second, + ACLDefaultPolicy: "allow", + ACLDownPolicy: "deny", + ACLEnableKeyListPolicy: true, + }, + expectACLToken: false, + expected: pbautoconf.AutoConfigResponse{ + Config: &pbconfig.Config{ + ACL: &pbconfig.ACL{ + Enabled: false, + PolicyTTL: "7s", + RoleTTL: "10s", + TokenTTL: "12s", + DisabledTTL: "31s", + DownPolicy: "deny", + DefaultPolicy: "allow", + EnableKeyListPolicy: true, + }, + }, + }, + }, + "local-tokens-disabled": { + config: Config{ + Datacenter: testDC, + PrimaryDatacenter: "somewhere-else", + ACLsEnabled: true, + }, + expectACLToken: true, + err: fmt.Errorf("Agent Auto Configuration requires local token usage to be enabled in this datacenter"), + }, + } + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + backend := &mockAutoConfigBackend{} + expectedTemplate := &structs.ACLToken{ + Description: `Auto Config Token for Node "something"`, + Local: true, + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "something", + Datacenter: testDC, + }, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + } + + testToken := &structs.ACLToken{ + AccessorID: tokenAccessor, + SecretID: tokenSecret, + Description: `Auto Config Token for Node "something"`, + Local: true, + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "something", + Datacenter: testDC, + }, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + } + + if tcase.expectACLToken { + backend.On("CreateACLToken", expectedTemplate).Return(testToken, tcase.err).Once() + } + + ac := AutoConfig{config: &tcase.config, backend: backend} + + actual := pbautoconf.AutoConfigResponse{Config: &pbconfig.Config{}} + err := ac.updateACLsInConfig(AutoConfigOptions{NodeName: "something"}, &actual) + if tcase.err != nil { + testutil.RequireErrorContains(t, err, tcase.err.Error()) + } else { + require.NoError(t, err) + require.Equal(t, tcase.expected, actual) + } + + backend.AssertExpectations(t) + }) + } +} + +func TestAutoConfig_updateJoinAddressesInConfig(t *testing.T) { + addrs := []string{"198.18.0.7:8300", "198.18.0.1:8300"} + backend := &mockAutoConfigBackend{} + backend.On("DatacenterJoinAddresses", "").Return(addrs, nil).Once() + + ac := AutoConfig{backend: backend} + + actual := pbautoconf.AutoConfigResponse{Config: &pbconfig.Config{}} + err := ac.updateJoinAddressesInConfig(AutoConfigOptions{}, &actual) + require.NoError(t, err) + + require.NotNil(t, actual.Config.Gossip) + require.ElementsMatch(t, addrs, actual.Config.Gossip.RetryJoinLAN) + + backend.AssertExpectations(t) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/auto_encrypt_endpoint.go consul-1.8.7+dfsg1/agent/consul/auto_encrypt_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/auto_encrypt_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/auto_encrypt_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,7 @@ if !a.srv.config.AutoEncryptAllowTLS { return ErrAutoEncryptAllowTLSNotEnabled } - if done, err := a.srv.forward("AutoEncrypt.Sign", args, args, reply); done { + if done, err := a.srv.ForwardRPC("AutoEncrypt.Sign", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/auto_encrypt_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/auto_encrypt_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/auto_encrypt_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/auto_encrypt_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -89,7 +89,7 @@ } cfg := test.Config - cfg.AutoEncryptTLS = true + cfg.AutoTLS = true cfg.Domain = "consul" codec, err := insecureRPCClient(s, cfg) if test.ConnError { diff -Nru consul-1.7.4+dfsg1/agent/consul/auto_encrypt.go consul-1.8.7+dfsg1/agent/consul/auto_encrypt.go --- consul-1.7.4+dfsg1/agent/consul/auto_encrypt.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/auto_encrypt.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,228 +0,0 @@ -package consul - -import ( - "fmt" - "net" - "strings" - "time" - - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" - "github.com/hashicorp/go-hclog" - "github.com/miekg/dns" -) - -const ( - dummyTrustDomain = "dummy.trustdomain" - retryJitterWindow = 30 * time.Second -) - -func (c *Client) RequestAutoEncryptCerts(servers []string, port int, token string, interruptCh chan struct{}) (*structs.SignedResponse, string, error) { - errFn := func(err error) (*structs.SignedResponse, string, error) { - return nil, "", err - } - - // Check if we know about a server already through gossip. Depending on - // how the agent joined, there might already be one. Also in case this - // gets called because the cert expired. - server := c.routers.FindServer() - if server != nil { - servers = []string{server.Addr.String()} - } - - if len(servers) == 0 { - return errFn(fmt.Errorf("No servers to request AutoEncrypt.Sign")) - } - - // We don't provide the correct host here, because we don't know any - // better at this point. Apart from the domain, we would need the - // ClusterID, which we don't have. This is why we go with - // dummyTrustDomain the first time. Subsequent CSRs will have the - // correct TrustDomain. - id := &connect.SpiffeIDAgent{ - Host: dummyTrustDomain, - Datacenter: c.config.Datacenter, - Agent: string(c.config.NodeName), - } - - conf, err := c.config.CAConfig.GetCommonConfig() - if err != nil { - return errFn(err) - } - - if conf.PrivateKeyType == "" { - conf.PrivateKeyType = connect.DefaultPrivateKeyType - } - if conf.PrivateKeyBits == 0 { - conf.PrivateKeyBits = connect.DefaultPrivateKeyBits - } - - // Create a new private key - pk, pkPEM, err := connect.GeneratePrivateKeyWithConfig(conf.PrivateKeyType, conf.PrivateKeyBits) - if err != nil { - return errFn(err) - } - - dnsNames := []string{"localhost"} - ipAddresses := []net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::")} - - // Create a CSR. - // - // The Common Name includes the dummy trust domain for now but Server will - // override this when it is signed anyway so it's OK. - cn := connect.AgentCN(string(c.config.NodeName), dummyTrustDomain) - csr, err := connect.CreateCSR(id, cn, pk, dnsNames, ipAddresses) - if err != nil { - return errFn(err) - } - - // Prepare request and response so that it can be passed to - // RPCInsecure. - args := structs.CASignRequest{ - WriteRequest: structs.WriteRequest{Token: token}, - Datacenter: c.config.Datacenter, - CSR: csr, - } - var reply structs.SignedResponse - - // Retry implementation modeled after https://github.com/hashicorp/consul/pull/5228. - // TLDR; there is a 30s window from which a random time is picked. - // Repeat until the call is successful. - attempts := 0 - for { - select { - case <-interruptCh: - return errFn(fmt.Errorf("aborting AutoEncrypt because interrupted")) - default: - } - - // Translate host to net.TCPAddr to make life easier for - // RPCInsecure. - for _, s := range servers { - ips, err := resolveAddr(s, c.logger) - if err != nil { - c.logger.Warn("AutoEncrypt resolveAddr failed", "error", err) - continue - } - - for _, ip := range ips { - addr := net.TCPAddr{IP: ip, Port: port} - - if err = c.connPool.RPC(c.config.Datacenter, &addr, 0, "AutoEncrypt.Sign", &args, &reply); err == nil { - return &reply, pkPEM, nil - } else { - c.logger.Warn("AutoEncrypt failed", "error", err) - } - } - } - attempts++ - - delay := lib.RandomStagger(retryJitterWindow) - interval := (time.Duration(attempts) * delay) + delay - c.logger.Warn("retrying AutoEncrypt", "retry_interval", interval) - select { - case <-time.After(interval): - continue - case <-interruptCh: - return errFn(fmt.Errorf("aborting AutoEncrypt because interrupted")) - case <-c.shutdownCh: - return errFn(fmt.Errorf("aborting AutoEncrypt because shutting down")) - } - } -} - -func missingPortError(host string, err error) bool { - return err != nil && err.Error() == fmt.Sprintf("address %s: missing port in address", host) -} - -// resolveAddr is used to resolve the host into IPs and error. -func resolveAddr(rawHost string, logger hclog.Logger) ([]net.IP, error) { - host, _, err := net.SplitHostPort(rawHost) - if err != nil { - // In case we encounter this error, we proceed with the - // rawHost. This is fine since -start-join and -retry-join - // take only hosts anyways and this is an expected case. - if missingPortError(rawHost, err) { - host = rawHost - } else { - return nil, err - } - } - - if ip := net.ParseIP(host); ip != nil { - return []net.IP{ip}, nil - } - - // First try TCP so we have the best chance for the largest list of - // hosts to join. If this fails it's not fatal since this isn't a standard - // way to query DNS, and we have a fallback below. - if ips, err := tcpLookupIP(host, logger); err != nil { - logger.Debug("TCP-first lookup failed for host, falling back to UDP", "host", host, "error", err) - } else if len(ips) > 0 { - return ips, nil - } - - // If TCP didn't yield anything then use the normal Go resolver which - // will try UDP, then might possibly try TCP again if the UDP response - // indicates it was truncated. - ips, err := net.LookupIP(host) - if err != nil { - return nil, err - } - return ips, nil -} - -// tcpLookupIP is a helper to initiate a TCP-based DNS lookup for the given host. -// The built-in Go resolver will do a UDP lookup first, and will only use TCP if -// the response has the truncate bit set, which isn't common on DNS servers like -// Consul's. By doing the TCP lookup directly, we get the best chance for the -// largest list of hosts to join. Since joins are relatively rare events, it's ok -// to do this rather expensive operation. -func tcpLookupIP(host string, logger hclog.Logger) ([]net.IP, error) { - // Don't attempt any TCP lookups against non-fully qualified domain - // names, since those will likely come from the resolv.conf file. - if !strings.Contains(host, ".") { - return nil, nil - } - - // Make sure the domain name is terminated with a dot (we know there's - // at least one character at this point). - dn := host - if dn[len(dn)-1] != '.' { - dn = dn + "." - } - - // See if we can find a server to try. - cc, err := dns.ClientConfigFromFile("/etc/resolv.conf") - if err != nil { - return nil, err - } - if len(cc.Servers) > 0 { - // Do the lookup. - c := new(dns.Client) - c.Net = "tcp" - msg := new(dns.Msg) - msg.SetQuestion(dn, dns.TypeANY) - in, _, err := c.Exchange(msg, cc.Servers[0]) - if err != nil { - return nil, err - } - - // Handle any IPs we get back that we can attempt to join. - var ips []net.IP - for _, r := range in.Answer { - switch rr := r.(type) { - case (*dns.A): - ips = append(ips, rr.A) - case (*dns.AAAA): - ips = append(ips, rr.AAAA) - case (*dns.CNAME): - logger.Debug("Ignoring CNAME RR in TCP-first answer for host", "host", host) - } - } - return ips, nil - } - - return nil, nil -} diff -Nru consul-1.7.4+dfsg1/agent/consul/auto_encrypt_test.go consul-1.8.7+dfsg1/agent/consul/auto_encrypt_test.go --- consul-1.7.4+dfsg1/agent/consul/auto_encrypt_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/auto_encrypt_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -package consul - -import ( - "net" - "os" - "testing" - "time" - - "github.com/hashicorp/consul/sdk/testutil" - "github.com/hashicorp/go-hclog" - "github.com/stretchr/testify/require" -) - -func TestAutoEncrypt_resolveAddr(t *testing.T) { - type args struct { - rawHost string - logger hclog.Logger - } - logger := testutil.Logger(t) - - tests := []struct { - name string - args args - ips []net.IP - wantErr bool - }{ - { - name: "host without port", - args: args{ - "127.0.0.1", - logger, - }, - ips: []net.IP{net.IPv4(127, 0, 0, 1)}, - wantErr: false, - }, - { - name: "host with port", - args: args{ - "127.0.0.1:1234", - logger, - }, - ips: []net.IP{net.IPv4(127, 0, 0, 1)}, - wantErr: false, - }, - { - name: "host with broken port", - args: args{ - "127.0.0.1:xyz", - logger, - }, - ips: []net.IP{net.IPv4(127, 0, 0, 1)}, - wantErr: false, - }, - { - name: "not an address", - args: args{ - "abc", - logger, - }, - ips: nil, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - ips, err := resolveAddr(tt.args.rawHost, tt.args.logger) - if (err != nil) != tt.wantErr { - t.Errorf("resolveAddr error: %v, wantErr: %v", err, tt.wantErr) - return - } - require.Equal(t, tt.ips, ips) - }) - } -} - -func TestAutoEncrypt_missingPortError(t *testing.T) { - host := "127.0.0.1" - _, _, err := net.SplitHostPort(host) - require.True(t, missingPortError(host, err)) - - host = "127.0.0.1:1234" - _, _, err = net.SplitHostPort(host) - require.False(t, missingPortError(host, err)) -} - -func TestAutoEncrypt_RequestAutoEncryptCerts(t *testing.T) { - dir1, c1 := testClient(t) - defer os.RemoveAll(dir1) - defer c1.Shutdown() - servers := []string{"localhost"} - port := 8301 - token := "" - interruptCh := make(chan struct{}) - doneCh := make(chan struct{}) - var err error - go func() { - _, _, err = c1.RequestAutoEncryptCerts(servers, port, token, interruptCh) - close(doneCh) - }() - select { - case <-doneCh: - // since there are no servers at this port, we shouldn't be - // done and this should be an error of some sorts that happened - // in the setup phase before entering the for loop in - // RequestAutoEncryptCerts. - require.NoError(t, err) - case <-time.After(50 * time.Millisecond): - // this is the happy case since auto encrypt is in its loop to - // try to request certs. - interruptCh <- struct{}{} - } -} diff -Nru consul-1.7.4+dfsg1/agent/consul/autopilot/autopilot.go consul-1.8.7+dfsg1/agent/consul/autopilot/autopilot.go --- consul-1.7.4+dfsg1/agent/consul/autopilot/autopilot.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/autopilot/autopilot.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,15 +3,16 @@ import ( "context" "fmt" + "net" + "strconv" + "sync" + "time" + "github.com/hashicorp/consul/logging" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-version" "github.com/hashicorp/raft" "github.com/hashicorp/serf/serf" - "net" - "strconv" - "sync" - "time" ) // Delegate is the interface for the Autopilot mechanism @@ -175,7 +176,7 @@ } func canRemoveServers(peers, minQuorum, deadServers int) (bool, string) { - if peers-deadServers < int(minQuorum) { + if peers-deadServers < minQuorum { return false, fmt.Sprintf("denied, because removing %d/%d servers would leave less then minimal allowed quorum of %d servers", deadServers, peers, minQuorum) } @@ -419,12 +420,6 @@ // consistent of a sample as possible. We capture the leader's index // here as well so it roughly lines up with the same point in time. targetLastIndex := raftNode.LastIndex() - var fetchList []*ServerInfo - for _, server := range servers { - if parts, ok := serverMap[string(server.ID)]; ok { - fetchList = append(fetchList, parts) - } - } d := time.Now().Add(a.healthInterval / 2) ctx, cancel := context.WithDeadline(context.Background(), d) defer cancel() diff -Nru consul-1.7.4+dfsg1/agent/consul/autopilot_test.go consul-1.8.7+dfsg1/agent/consul/autopilot_test.go --- consul-1.7.4+dfsg1/agent/consul/autopilot_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/autopilot_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -401,7 +401,6 @@ func TestAutopilot_MinQuorum(t *testing.T) { dc := "dc1" - closeMap := make(map[string]chan struct{}) conf := func(c *Config) { c.Datacenter = dc c.Bootstrap = false @@ -409,13 +408,6 @@ c.AutopilotConfig.MinQuorum = 3 c.RaftConfig.ProtocolVersion = raft.ProtocolVersion(2) c.AutopilotInterval = 100 * time.Millisecond - //Let us know when a server is actually gone - ch := make(chan struct{}) - c.NotifyShutdown = func() { - t.Logf("%v is shutdown", c.NodeName) - close(ch) - } - closeMap[c.NodeName] = ch } dir1, s1 := testServerWithConfig(t, conf) defer os.RemoveAll(dir1) @@ -463,8 +455,7 @@ if dead == nil { t.Fatalf("no members set") } - dead.Shutdown() - <-closeMap[dead.config.NodeName] + require.NoError(t, dead.Shutdown()) retry.Run(t, func(r *retry.R) { leader := findStatus(true) if leader == nil { @@ -480,10 +471,7 @@ delete(servers, dead.config.NodeName) //Autopilot should not take this one into left dead = findStatus(false) - if err := dead.Shutdown(); err != nil { - t.Fatalf("could not shut down %s, error %v", dead.config.NodeName, err) - } - <-closeMap[dead.config.NodeName] + require.NoError(t, dead.Shutdown()) retry.Run(t, func(r *retry.R) { leader := findStatus(true) @@ -496,5 +484,4 @@ } } }) - } diff -Nru consul-1.7.4+dfsg1/agent/consul/catalog_endpoint.go consul-1.8.7+dfsg1/agent/consul/catalog_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/catalog_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/catalog_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,13 +12,15 @@ "github.com/hashicorp/consul/ipaddr" "github.com/hashicorp/consul/types" bexpr "github.com/hashicorp/go-bexpr" + "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" "github.com/hashicorp/go-uuid" ) // Catalog endpoint is used to manipulate the service catalog type Catalog struct { - srv *Server + srv *Server + logger hclog.Logger } // nodePreApply does the verification of a node before it is applied to Raft. @@ -92,7 +94,7 @@ // Register is used register that a node is providing a given service. func (c *Catalog) Register(args *structs.RegisterRequest, reply *struct{}) error { - if done, err := c.srv.forward("Catalog.Register", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.Register", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"catalog", "register"}, time.Now()) @@ -150,7 +152,7 @@ } // Check the complete register request against the given ACL policy. - if authz != nil && c.srv.config.ACLEnforceVersion8 { + if authz != nil { state := c.srv.fsm.State() _, ns, err := state.NodeServices(nil, args.Node, entMeta) if err != nil { @@ -173,7 +175,7 @@ // Deregister is used to remove a service registration for a given node. func (c *Catalog) Deregister(args *structs.DeregisterRequest, reply *struct{}) error { - if done, err := c.srv.forward("Catalog.Deregister", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.Deregister", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"catalog", "deregister"}, time.Now()) @@ -194,7 +196,7 @@ } // Check the complete deregister request against the given ACL policy. - if authz != nil && c.srv.config.ACLEnforceVersion8 { + if authz != nil { state := c.srv.fsm.State() var ns *structs.NodeService @@ -242,7 +244,7 @@ // ListNodes is used to query the nodes in a DC func (c *Catalog) ListNodes(args *structs.DCSpecificRequest, reply *structs.IndexedNodes) error { - if done, err := c.srv.forward("Catalog.ListNodes", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.ListNodes", args, args, reply); done { return err } @@ -284,7 +286,7 @@ // ListServices is used to query the services in a DC func (c *Catalog) ListServices(args *structs.DCSpecificRequest, reply *structs.IndexedServices) error { - if done, err := c.srv.forward("Catalog.ListServices", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.ListServices", args, args, reply); done { return err } @@ -321,7 +323,7 @@ } func (c *Catalog) ServiceList(args *structs.DCSpecificRequest, reply *structs.IndexedServiceList) error { - if done, err := c.srv.forward("Catalog.ServiceList", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.ServiceList", args, args, reply); done { return err } @@ -350,7 +352,7 @@ // ServiceNodes returns all the nodes registered as part of a service func (c *Catalog) ServiceNodes(args *structs.ServiceSpecificRequest, reply *structs.IndexedServiceNodes) error { - if done, err := c.srv.forward("Catalog.ServiceNodes", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.ServiceNodes", args, args, reply); done { return err } @@ -488,7 +490,7 @@ // NodeServices returns all the services registered as part of a node func (c *Catalog) NodeServices(args *structs.NodeSpecificRequest, reply *structs.IndexedNodeServices) error { - if done, err := c.srv.forward("Catalog.NodeServices", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.NodeServices", args, args, reply); done { return err } @@ -539,7 +541,7 @@ } func (c *Catalog) NodeServiceList(args *structs.NodeSpecificRequest, reply *structs.IndexedNodeServiceList) error { - if done, err := c.srv.forward("Catalog.NodeServiceList", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Catalog.NodeServiceList", args, args, reply); done { return err } @@ -590,3 +592,68 @@ return nil }) } + +func (c *Catalog) GatewayServices(args *structs.ServiceSpecificRequest, reply *structs.IndexedGatewayServices) error { + if done, err := c.srv.ForwardRPC("Catalog.GatewayServices", args, args, reply); done { + return err + } + + var authzContext acl.AuthorizerContext + authz, err := c.srv.ResolveTokenAndDefaultMeta(args.Token, &args.EnterpriseMeta, &authzContext) + if err != nil { + return err + } + + if err := c.srv.validateEnterpriseRequest(&args.EnterpriseMeta, false); err != nil { + return err + } + + if authz != nil && authz.ServiceRead(args.ServiceName, &authzContext) != acl.Allow { + return acl.ErrPermissionDenied + } + + return c.srv.blockingQuery( + &args.QueryOptions, + &reply.QueryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + var index uint64 + var services structs.GatewayServices + + supportedGateways := []string{structs.IngressGateway, structs.TerminatingGateway} + var found bool + for _, kind := range supportedGateways { + // We only use this call to validate the RPC call, don't add the watch set + _, entry, err := state.ConfigEntry(nil, kind, args.ServiceName, &args.EnterpriseMeta) + if err != nil { + return err + } + if entry != nil { + found = true + break + } + } + + // We log a warning here to indicate that there is a potential + // misconfiguration. We explicitly do NOT return an error because this + // can occur in the course of normal operation by deleting a + // configuration entry or starting the proxy before registering the + // config entry. + if !found { + c.logger.Warn("no terminating-gateway or ingress-gateway associated with this gateway", + "gateway", args.ServiceName, + ) + } + + index, services, err = state.GatewayServices(ws, args.ServiceName, &args.EnterpriseMeta) + if err != nil { + return err + } + + if err := c.srv.filterACL(args.Token, &services); err != nil { + return err + } + + reply.Index, reply.Services = index, services + return nil + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/catalog_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/catalog_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/catalog_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/catalog_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/stringslice" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" @@ -34,7 +35,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 8000, }, Check: &structs.HealthCheck{ @@ -134,7 +135,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 8000, }, Check: &structs.HealthCheck{ @@ -162,11 +163,10 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() @@ -181,6 +181,9 @@ service "foo" { policy = "write" } +node "foo" { + policy = "write" +} `, }, WriteRequest: structs.WriteRequest{Token: "root"}, @@ -196,7 +199,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 8000, }, WriteRequest: structs.WriteRequest{Token: id}, @@ -217,18 +220,9 @@ t.Fatalf("err: %v", err) } - // Try the special case for the "consul" service that allows it no matter - // what with pre-version 8 ACL enforcement. + // Try the former special case for the "consul" service. argR.Service.Service = "consul" err = msgpackrpc.CallWithCodec(codec, "Catalog.Register", &argR, &outR) - if err != nil { - t.Fatalf("err: %v", err) - } - - // Make sure the exception goes away when we turn on version 8 ACL - // enforcement. - s1.config.ACLEnforceVersion8 = true - err = msgpackrpc.CallWithCodec(codec, "Catalog.Register", &argR, &outR) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) } @@ -291,7 +285,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 8000, }, } @@ -324,7 +318,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 8000, }, } @@ -414,6 +408,9 @@ service "foo" { policy = "write" } +node "foo" { + policy = "write" +} `, }, WriteRequest: structs.WriteRequest{Token: "root"}, @@ -509,7 +506,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -569,8 +565,7 @@ t.Fatalf("err: %v", err) } - // First pass with version 8 ACL enforcement disabled, we should be able - // to deregister everything even without a token. + // We should be not be able to deregister everything without a token. var err error var out struct{} err = msgpackrpc.CallWithCodec(codec, "Catalog.Deregister", @@ -578,46 +573,6 @@ Datacenter: "dc1", Node: "node", CheckID: "service-check"}, &out) - if err != nil { - t.Fatalf("err: %v", err) - } - err = msgpackrpc.CallWithCodec(codec, "Catalog.Deregister", - &structs.DeregisterRequest{ - Datacenter: "dc1", - Node: "node", - CheckID: "node-check"}, &out) - if err != nil { - t.Fatalf("err: %v", err) - } - err = msgpackrpc.CallWithCodec(codec, "Catalog.Deregister", - &structs.DeregisterRequest{ - Datacenter: "dc1", - Node: "node", - ServiceID: "service"}, &out) - if err != nil { - t.Fatalf("err: %v", err) - } - err = msgpackrpc.CallWithCodec(codec, "Catalog.Deregister", - &structs.DeregisterRequest{ - Datacenter: "dc1", - Node: "node"}, &out) - if err != nil { - t.Fatalf("err: %v", err) - } - - // Turn on version 8 ACL enforcement and put the catalog entry back. - s1.config.ACLEnforceVersion8 = true - if err := msgpackrpc.CallWithCodec(codec, "Catalog.Register", &argR, &outR); err != nil { - t.Fatalf("err: %v", err) - } - - // Second pass with version 8 ACL enforcement enabled, these should all - // get rejected. - err = msgpackrpc.CallWithCodec(codec, "Catalog.Deregister", - &structs.DeregisterRequest{ - Datacenter: "dc1", - Node: "node", - CheckID: "service-check"}, &out) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) } @@ -645,7 +600,7 @@ t.Fatalf("err: %v", err) } - // Third pass these should all go through with the token set. + // Second pass these should all go through with the token set. err = msgpackrpc.CallWithCodec(codec, "Catalog.Deregister", &structs.DeregisterRequest{ Datacenter: "dc1", @@ -1236,7 +1191,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -1249,7 +1203,7 @@ // existing slice if the incoming one is nil, so it's best to start // clean each time. - // Prior to version 8, the node policy should be ignored. + // The node policy should not be ignored. args := structs.DCSpecificRequest{ Datacenter: "dc1", } @@ -1258,18 +1212,6 @@ if err := msgpackrpc.CallWithCodec(codec, "Catalog.ListNodes", &args, &reply); err != nil { t.Fatalf("err: %v", err) } - if len(reply.Nodes) != 1 { - t.Fatalf("bad: %v", reply.Nodes) - } - } - - // Now turn on version 8 enforcement and try again. - s1.config.ACLEnforceVersion8 = true - { - reply := structs.IndexedNodes{} - if err := msgpackrpc.CallWithCodec(codec, "Catalog.ListNodes", &args, &reply); err != nil { - t.Fatalf("err: %v", err) - } if len(reply.Nodes) != 0 { t.Fatalf("bad: %v", reply.Nodes) } @@ -1642,7 +1584,7 @@ args := structs.ServiceSpecificRequest{ Datacenter: "dc1", ServiceName: "db", - ServiceTags: []string{"slave"}, + ServiceTags: []string{"replica"}, TagFilter: false, } var out structs.IndexedServiceNodes @@ -2071,6 +2013,122 @@ assert.Equal(args.Service.Proxy.DestinationServiceName, v.ServiceProxy.DestinationServiceName) } +func TestCatalog_ServiceNodes_Gateway(t *testing.T) { + t.Parallel() + + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + { + var out struct{} + + // Register a service "api" + args := structs.TestRegisterRequest(t) + args.Service.Service = "api" + args.Check = &structs.HealthCheck{ + Name: "api", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a proxy for api + args = structs.TestRegisterRequestProxy(t) + args.Service.Service = "api-proxy" + args.Service.Proxy.DestinationServiceName = "api" + args.Check = &structs.HealthCheck{ + Name: "api-proxy", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a service "web" + args = structs.TestRegisterRequest(t) + args.Check = &structs.HealthCheck{ + Name: "web", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a proxy for web + args = structs.TestRegisterRequestProxy(t) + args.Check = &structs.HealthCheck{ + Name: "web-proxy", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a gateway for web + args = &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "gateway", + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "gateway", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + }, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "web", + }, + }, + }, + } + var entryResp bool + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &entryArgs, &entryResp)) + } + + retry.Run(t, func(r *retry.R) { + // List should return both the terminating-gateway and the connect-proxy associated with web + req := structs.ServiceSpecificRequest{ + Connect: true, + Datacenter: "dc1", + ServiceName: "web", + } + var resp structs.IndexedServiceNodes + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Catalog.ServiceNodes", &req, &resp)) + assert.Len(r, resp.ServiceNodes, 2) + + // Check sidecar + assert.Equal(r, structs.ServiceKindConnectProxy, resp.ServiceNodes[0].ServiceKind) + assert.Equal(r, "foo", resp.ServiceNodes[0].Node) + assert.Equal(r, "web-proxy", resp.ServiceNodes[0].ServiceName) + assert.Equal(r, "web-proxy", resp.ServiceNodes[0].ServiceID) + assert.Equal(r, "web", resp.ServiceNodes[0].ServiceProxy.DestinationServiceName) + assert.Equal(r, 2222, resp.ServiceNodes[0].ServicePort) + + // Check gateway + assert.Equal(r, structs.ServiceKindTerminatingGateway, resp.ServiceNodes[1].ServiceKind) + assert.Equal(r, "foo", resp.ServiceNodes[1].Node) + assert.Equal(r, "gateway", resp.ServiceNodes[1].ServiceName) + assert.Equal(r, "gateway", resp.ServiceNodes[1].ServiceID) + assert.Equal(r, 443, resp.ServiceNodes[1].ServicePort) + }) +} + func TestCatalog_ListServiceNodes_ConnectDestination(t *testing.T) { t.Parallel() @@ -2168,7 +2226,6 @@ func TestCatalog_ListServiceNodes_ConnectProxy_ACL(t *testing.T) { t.Parallel() - assert := assert.New(t) dir1, s1 := testServerWithConfig(t, func(c *Config) { c.ACLDatacenter = "dc1" c.ACLsEnabled = true @@ -2193,12 +2250,13 @@ service "foo" { policy = "write" } +node "" { policy = "read" } `, }, WriteRequest: structs.WriteRequest{Token: "root"}, } var token string - assert.Nil(msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &token)) + require.NoError(t, msgpackrpc.CallWithCodec(codec, "ACL.Apply", &arg, &token)) { // Register a proxy @@ -2207,21 +2265,21 @@ args.Service.Proxy.DestinationServiceName = "bar" args.WriteRequest.Token = "root" var out struct{} - assert.Nil(msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) // Register a proxy args = structs.TestRegisterRequestProxy(t) args.Service.Service = "foo-proxy" args.Service.Proxy.DestinationServiceName = "foo" args.WriteRequest.Token = "root" - assert.Nil(msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) // Register a proxy args = structs.TestRegisterRequestProxy(t) args.Service.Service = "another-proxy" args.Service.Proxy.DestinationServiceName = "foo" args.WriteRequest.Token = "root" - assert.Nil(msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) } // List w/ token. This should disallow because we don't have permission @@ -2233,8 +2291,8 @@ QueryOptions: structs.QueryOptions{Token: token}, } var resp structs.IndexedServiceNodes - assert.Nil(msgpackrpc.CallWithCodec(codec, "Catalog.ServiceNodes", &req, &resp)) - assert.Len(resp.ServiceNodes, 0) + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.ServiceNodes", &req, &resp)) + require.Len(t, resp.ServiceNodes, 0) // List w/ token. This should work since we're requesting "foo", but should // also only contain the proxies with names that adhere to our ACL. @@ -2244,10 +2302,11 @@ ServiceName: "foo", QueryOptions: structs.QueryOptions{Token: token}, } - assert.Nil(msgpackrpc.CallWithCodec(codec, "Catalog.ServiceNodes", &req, &resp)) - assert.Len(resp.ServiceNodes, 1) + resp = structs.IndexedServiceNodes{} + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.ServiceNodes", &req, &resp)) + require.Len(t, resp.ServiceNodes, 1) v := resp.ServiceNodes[0] - assert.Equal("foo-proxy", v.ServiceName) + require.Equal(t, "foo-proxy", v.ServiceName) } func TestCatalog_ListServiceNodes_ConnectNative(t *testing.T) { @@ -2324,7 +2383,7 @@ t.Fatalf("bad: %v", out) } services := out.NodeServices.Services - if !lib.StrContains(services["db"].Tags, "primary") || services["db"].Port != 5000 { + if !stringslice.Contains(services["db"].Tags, "primary") || services["db"].Port != 5000 { t.Fatalf("bad: %v", out) } if len(services["web"].Tags) != 0 || services["web"].Port != 80 { @@ -2447,11 +2506,10 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) codec = rpcClient(t, srv) - testrpc.WaitForLeader(t, srv.RPC, "dc1") + testrpc.WaitForTestAgent(t, srv.RPC, "dc1", testrpc.WithToken("root")) // Create a new token arg := structs.ACLRequest{ @@ -2464,6 +2522,9 @@ service "foo" { policy = "write" } +node "" { + policy = "read" +} `, }, WriteRequest: structs.WriteRequest{Token: "root"}, @@ -2521,7 +2582,7 @@ defer os.RemoveAll(dir) defer srv.Shutdown() defer codec.Close() - testrpc.WaitForTestAgent(t, srv.RPC, "dc1") + testrpc.WaitForTestAgent(t, srv.RPC, "dc1", testrpc.WithToken("root")) opt := structs.DCSpecificRequest{ Datacenter: "dc1", @@ -2596,16 +2657,15 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) - // Prior to version 8, the node policy should be ignored. + // The node policy should not be ignored. args := structs.NodeSpecificRequest{ Datacenter: "dc1", Node: s1.config.NodeName, @@ -2614,15 +2674,6 @@ if err := msgpackrpc.CallWithCodec(codec, "Catalog.NodeServices", &args, &reply); err != nil { t.Fatalf("err: %v", err) } - if reply.NodeServices == nil { - t.Fatalf("should not be nil") - } - - // Now turn on version 8 enforcement and try again. - s1.config.ACLEnforceVersion8 = true - if err := msgpackrpc.CallWithCodec(codec, "Catalog.NodeServices", &args, &reply); err != nil { - t.Fatalf("err: %v", err) - } if reply.NodeServices != nil { t.Fatalf("should not nil") } @@ -2672,28 +2723,513 @@ defer os.RemoveAll(dir) defer srv.Shutdown() defer codec.Close() - testrpc.WaitForTestAgent(t, srv.RPC, "dc1") + testrpc.WaitForTestAgent(t, srv.RPC, "dc1", testrpc.WithToken("root")) opt := structs.NodeSpecificRequest{ Datacenter: "dc1", Node: srv.config.NodeName, QueryOptions: structs.QueryOptions{Token: token}, } - reply := structs.IndexedNodeServices{} - if err := msgpackrpc.CallWithCodec(codec, "Catalog.NodeServices", &opt, &reply); err != nil { - t.Fatalf("err: %s", err) + + var reply structs.IndexedNodeServices + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.NodeServices", &opt, &reply)) + + require.NotNil(t, reply.NodeServices) + require.Len(t, reply.NodeServices.Services, 1) + + svc, ok := reply.NodeServices.Services["foo"] + require.True(t, ok) + require.Equal(t, "foo", svc.ID) +} + +func TestCatalog_GatewayServices_TerminatingGateway(t *testing.T) { + t.Parallel() + + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + { + var out struct{} + + // Register a service "api" + args := structs.TestRegisterRequest(t) + args.Service.Service = "api" + args.Check = &structs.HealthCheck{ + Name: "api", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a service "db" + args = structs.TestRegisterRequest(t) + args.Service.Service = "db" + args.Check = &structs.HealthCheck{ + Name: "db", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a service "redis" + args = structs.TestRegisterRequest(t) + args.Service.Service = "redis" + args.Check = &structs.HealthCheck{ + Name: "redis", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a gateway + args = &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "gateway", + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "gateway", + Status: api.HealthPassing, + ServiceID: "gateway", + }, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "api", + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Name: "db", + }, + { + Name: "*", + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + }, + }, + }, + } + var entryResp bool + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &entryArgs, &entryResp)) } - found := false - for _, svc := range reply.NodeServices.Services { - if svc.ID == "bar" { - t.Fatalf("bad: %#v", reply.NodeServices.Services) + + retry.Run(t, func(r *retry.R) { + // List should return all three services + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "gateway", + } + var resp structs.IndexedGatewayServices + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp)) + assert.Len(r, resp.Services, 3) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "", + CertFile: "", + KeyFile: "", + }, + { + Service: structs.NewServiceName("redis", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + FromWildcard: true, + }, } - if svc.ID == "foo" { - found = true - break + + // Ignore raft index for equality + for _, s := range resp.Services { + s.RaftIndex = structs.RaftIndex{} } + assert.Equal(r, expect, resp.Services) + }) +} + +func TestCatalog_GatewayServices_BothGateways(t *testing.T) { + t.Parallel() + + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + { + var out struct{} + + // Register a service "api" + args := structs.TestRegisterRequest(t) + args.Service.Service = "api" + args.Check = &structs.HealthCheck{ + Name: "api", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a terminating gateway + args = &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "gateway", + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "gateway", + Status: api.HealthPassing, + ServiceID: "gateway", + }, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "api", + }, + }, + }, + } + var entryResp bool + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &entryArgs, &entryResp)) + + // Register a service "db" + args = structs.TestRegisterRequest(t) + args.Service.Service = "db" + args.Check = &structs.HealthCheck{ + Name: "db", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register an ingress gateway + args = &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.2", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "ingress", + Port: 444, + }, + Check: &structs.HealthCheck{ + Name: "ingress", + Status: api.HealthPassing, + ServiceID: "ingress", + }, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + entryArgs = &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress", + Listeners: []structs.IngressListener{ + { + Port: 8888, + Services: []structs.IngressService{ + {Name: "db"}, + }, + }, + }, + }, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &entryArgs, &entryResp)) } - if !found { - t.Fatalf("bad: %#v", reply.NodeServices) + + retry.Run(t, func(r *retry.R) { + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "gateway", + } + var resp structs.IndexedGatewayServices + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp)) + assert.Len(r, resp.Services, 1) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + }, + } + + // Ignore raft index for equality + for _, s := range resp.Services { + s.RaftIndex = structs.RaftIndex{} + } + assert.Equal(r, expect, resp.Services) + + req.ServiceName = "ingress" + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp)) + assert.Len(r, resp.Services, 1) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("ingress", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Protocol: "tcp", + Port: 8888, + }, + } + + // Ignore raft index for equality + for _, s := range resp.Services { + s.RaftIndex = structs.RaftIndex{} + } + assert.Equal(r, expect, resp.Services) + }) + + // Test a non-gateway service being requested + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "api", + } + var resp structs.IndexedGatewayServices + err := msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp) + assert.NoError(t, err) + assert.Empty(t, resp.Services) + // Ensure that the index is not zero so that a blocking query still gets the + // latest GatewayServices index + assert.NotEqual(t, 0, resp.Index) +} + +func TestCatalog_GatewayServices_ACLFiltering(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) + + { + var out struct{} + + // Register a service "api" + args := structs.TestRegisterRequest(t) + args.Service.Service = "api" + args.Check = &structs.HealthCheck{ + Name: "api", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + args.Token = "root" + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a service "db" + args = structs.TestRegisterRequest(t) + args.Service.Service = "db" + args.Check = &structs.HealthCheck{ + Name: "db", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + args.Token = "root" + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a service "redis" + args = structs.TestRegisterRequest(t) + args.Service.Service = "redis" + args.Check = &structs.HealthCheck{ + Name: "redis", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + args.Token = "root" + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a gateway + args = &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "gateway", + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "gateway", + Status: api.HealthPassing, + ServiceID: "gateway", + }, + } + args.Token = "root" + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "api", + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + }, + { + Name: "db", + }, + { + Name: "db_replica", + }, + { + Name: "*", + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + + var entryResp bool + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &entryArgs, &entryResp)) } + + rules := ` +service_prefix "db" { + policy = "read" +} +` + svcToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", rules) + require.NoError(t, err) + + retry.Run(t, func(r *retry.R) { + // List should return an empty list, since we do not have read on the gateway + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "gateway", + QueryOptions: structs.QueryOptions{Token: svcToken.SecretID}, + } + var resp structs.IndexedGatewayServices + err := msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp) + require.True(r, acl.IsErrPermissionDenied(err)) + }) + + rules = ` +service "gateway" { + policy = "read" +} +` + gwToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", rules) + require.NoError(t, err) + + retry.Run(t, func(r *retry.R) { + // List should return an empty list, since we do not have read on db + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "gateway", + QueryOptions: structs.QueryOptions{Token: gwToken.SecretID}, + } + var resp structs.IndexedGatewayServices + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp)) + assert.Len(r, resp.Services, 0) + }) + + rules = ` +service_prefix "db" { + policy = "read" +} +service "gateway" { + policy = "read" +} +` + validToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", rules) + require.NoError(t, err) + + retry.Run(t, func(r *retry.R) { + // List should return db entry since we have read on db and gateway + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "gateway", + QueryOptions: structs.QueryOptions{Token: validToken.SecretID}, + } + var resp structs.IndexedGatewayServices + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Catalog.GatewayServices", &req, &resp)) + assert.Len(r, resp.Services, 2) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + }, + { + Service: structs.NewServiceName("db_replica", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + }, + } + + // Ignore raft index for equality + for _, s := range resp.Services { + s.RaftIndex = structs.RaftIndex{} + } + assert.Equal(r, expect, resp.Services) + }) } diff -Nru consul-1.7.4+dfsg1/agent/consul/client.go consul-1.8.7+dfsg1/agent/consul/client.go --- consul-1.7.4+dfsg1/agent/consul/client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/client.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,6 @@ import ( "fmt" "io" - "os" "strconv" "sync" "sync/atomic" @@ -16,6 +15,7 @@ "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/logging" "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/consul/types" "github.com/hashicorp/go-hclog" "github.com/hashicorp/serf/serf" "golang.org/x/time/rate" @@ -60,9 +60,9 @@ // Connection pool to consul servers connPool *pool.ConnPool - // routers is responsible for the selection and maintenance of + // router is responsible for the selection and maintenance of // Consul servers this agent uses for RPC requests - routers *router.Manager + router *router.Router // rpcLimiter is used to rate limit the total number of RPCs initiated // from an agent. @@ -89,62 +89,46 @@ tlsConfigurator *tlsutil.Configurator } -// NewClient is used to construct a new Consul client from the configuration, -// potentially returning an error. -// NewClient only used to help setting up a client for testing. Normal code -// exercises NewClientLogger. -func NewClient(config *Config) (*Client, error) { - c, err := tlsutil.NewConfigurator(config.ToTLSUtilConfig(), nil) - if err != nil { - return nil, err - } - return NewClientLogger(config, nil, c) -} +// NewClient creates and returns a Client +func NewClient(config *Config, options ...ConsulOption) (*Client, error) { + flat := flattenConsulOptions(options) + + tlsConfigurator := flat.tlsConfigurator + connPool := flat.connPool -func NewClientLogger(config *Config, logger hclog.InterceptLogger, tlsConfigurator *tlsutil.Configurator) (*Client, error) { - // Check the protocol version if err := config.CheckProtocolVersion(); err != nil { return nil, err } - - // Check for a data directory! if config.DataDir == "" { return nil, fmt.Errorf("Config must provide a DataDir") } - - // Sanity check the ACLs if err := config.CheckACL(); err != nil { return nil, err } + if flat.logger == nil { + return nil, fmt.Errorf("logger is required") + } - // Ensure we have a log output - if config.LogOutput == nil { - config.LogOutput = os.Stderr - } - - // Create a logger - if logger == nil { - logger = hclog.NewInterceptLogger(&hclog.LoggerOptions{ - Level: hclog.Debug, - Output: config.LogOutput, - }) - } - - connPool := &pool.ConnPool{ - SrcAddr: config.RPCSrcAddr, - LogOutput: config.LogOutput, - MaxTime: clientRPCConnMaxIdle, - MaxStreams: clientMaxStreams, - TLSConfigurator: tlsConfigurator, - ForceTLS: config.VerifyOutgoing, + if connPool == nil { + connPool = &pool.ConnPool{ + Server: false, + SrcAddr: config.RPCSrcAddr, + Logger: flat.logger.StandardLogger(&hclog.StandardLoggerOptions{InferLevels: true}), + MaxTime: clientRPCConnMaxIdle, + MaxStreams: clientMaxStreams, + TLSConfigurator: tlsConfigurator, + Datacenter: config.Datacenter, + } } + logger := flat.logger.NamedIntercept(logging.ConsulClient) + // Create client c := &Client{ config: config, connPool: connPool, eventCh: make(chan serf.Event, serfEventBacklog), - logger: logger.NamedIntercept(logging.ConsulClient), + logger: logger, shutdownCh: make(chan struct{}), tlsConfigurator: tlsConfigurator, } @@ -179,15 +163,22 @@ return nil, fmt.Errorf("Failed to start lan serf: %v", err) } - // Start maintenance task for servers - c.routers = router.New(c.logger, c.shutdownCh, c.serf, c.connPool, "") - go c.routers.Start() + rpcRouter := flat.router + if rpcRouter == nil { + rpcRouter = router.NewRouter(logger, config.Datacenter, fmt.Sprintf("%s.%s", config.NodeName, config.Datacenter)) + } + + if err := rpcRouter.AddArea(types.AreaLAN, c.serf, c.connPool); err != nil { + c.Shutdown() + return nil, fmt.Errorf("Failed to add LAN area to the RPC router: %w", err) + } + c.router = rpcRouter // Start LAN event handlers after the router is complete since the event // handlers depend on the router and the router depends on Serf. go c.lanEventHandler() - // This needs to happen after initializing c.routers to prevent a race + // This needs to happen after initializing c.router to prevent a race // condition where the router manager is used when the pointer is nil if c.acls.ACLsEnabled() { go c.monitorACLMode() @@ -284,11 +275,6 @@ return c.serf.KeyManager() } -// Encrypted determines if gossip is encrypted -func (c *Client) Encrypted() bool { - return c.serf.EncryptionEnabled() -} - // RPC is used to forward an RPC call to a consul server, or fail if no servers func (c *Client) RPC(method string, args interface{}, reply interface{}) error { // This is subtle but we start measuring the time on the client side @@ -300,7 +286,7 @@ firstCheck := time.Now() TRY: - server := c.routers.FindServer() + manager, server := c.router.FindLANRoute() if server == nil { return structs.ErrNoServers } @@ -313,7 +299,7 @@ } // Make the request. - rpcErr := c.connPool.RPC(c.config.Datacenter, server.Addr, server.Version, method, args, reply) + rpcErr := c.connPool.RPC(c.config.Datacenter, server.ShortName, server.Addr, method, args, reply) if rpcErr == nil { return nil } @@ -325,7 +311,7 @@ "error", rpcErr, ) metrics.IncrCounterWithLabels([]string{"client", "rpc", "failed"}, 1, []metrics.Label{{Name: "server", Value: server.Name}}) - c.routers.NotifyFailedServer(server) + manager.NotifyFailedServer(server) if retry := canRetry(args, rpcErr); !retry { return rpcErr } @@ -347,7 +333,7 @@ // operation. func (c *Client) SnapshotRPC(args *structs.SnapshotRequest, in io.Reader, out io.Writer, replyFn structs.SnapshotReplyFn) error { - server := c.routers.FindServer() + manager, server := c.router.FindLANRoute() if server == nil { return structs.ErrNoServers } @@ -361,8 +347,9 @@ // Request the operation. var reply structs.SnapshotResponse - snap, err := SnapshotRPC(c.connPool, c.config.Datacenter, server.Addr, server.UseTLS, args, in, &reply) + snap, err := SnapshotRPC(c.connPool, c.config.Datacenter, server.ShortName, server.Addr, args, in, &reply) if err != nil { + manager.NotifyFailedServer(server) return err } defer func() { @@ -391,7 +378,7 @@ // Stats is used to return statistics for debugging and insight // for various sub-systems func (c *Client) Stats() map[string]map[string]string { - numServers := c.routers.NumServers() + numServers := c.router.GetLANManager().NumServers() toString := func(v uint64) string { return strconv.FormatUint(v, 10) diff -Nru consul-1.7.4+dfsg1/agent/consul/client_serf.go consul-1.8.7+dfsg1/agent/consul/client_serf.go --- consul-1.7.4+dfsg1/agent/consul/client_serf.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/client_serf.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,6 +9,7 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/logging" + "github.com/hashicorp/consul/types" "github.com/hashicorp/go-hclog" "github.com/hashicorp/serf/serf" ) @@ -115,7 +116,7 @@ continue } c.logger.Info("adding server", "server", parts) - c.routers.AddServer(parts) + c.router.AddServer(types.AreaLAN, parts) // Trigger the callback if c.config.ServerUp != nil { @@ -139,7 +140,7 @@ continue } c.logger.Info("updating server", "server", parts.String()) - c.routers.AddServer(parts) + c.router.AddServer(types.AreaLAN, parts) } } @@ -151,7 +152,7 @@ continue } c.logger.Info("removing server", "server", parts.String()) - c.routers.RemoveServer(parts) + c.router.RemoveServer(types.AreaLAN, parts) } } diff -Nru consul-1.7.4+dfsg1/agent/consul/client_test.go consul-1.8.7+dfsg1/agent/consul/client_test.go --- consul-1.7.4+dfsg1/agent/consul/client_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/client_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,8 @@ "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/go-hclog" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/hashicorp/serf/serf" "github.com/stretchr/testify/require" @@ -21,18 +23,15 @@ func testClientConfig(t *testing.T) (string, *Config) { dir := testutil.TempDir(t, "consul") + t.Cleanup(func() { + os.RemoveAll(dir) + }) config := DefaultConfig() ports := freeport.MustTake(2) - - returnPortsFn := func() { - // The method of plumbing this into the client shutdown hook doesn't - // cover all exit points, so we insulate this against multiple - // invocations and then it's safe to call it a bunch of times. + t.Cleanup(func() { freeport.Return(ports) - config.NotifyShutdown = nil // self-erasing - } - config.NotifyShutdown = returnPortsFn + }) config.Datacenter = "dc1" config.DataDir = dir @@ -46,7 +45,6 @@ config.SerfLANConfig.MemberlistConfig.ProbeTimeout = 200 * time.Millisecond config.SerfLANConfig.MemberlistConfig.ProbeInterval = time.Second config.SerfLANConfig.MemberlistConfig.GossipInterval = 100 * time.Millisecond - return dir, config } @@ -64,14 +62,29 @@ }) } -func testClientWithConfig(t *testing.T, cb func(c *Config)) (string, *Client) { +func testClientWithConfigWithErr(t *testing.T, cb func(c *Config)) (string, *Client, error) { dir, config := testClientConfig(t) if cb != nil { cb(config) } - client, err := NewClient(config) + logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ + Name: config.NodeName, + Level: hclog.Debug, + Output: testutil.NewLogBuffer(t), + }) + + tlsConf, err := tlsutil.NewConfigurator(config.ToTLSUtilConfig(), logger) + if err != nil { + t.Fatalf("err: %v", err) + } + + client, err := NewClient(config, WithLogger(logger), WithTLSConfigurator(tlsConf)) + return dir, client, err +} + +func testClientWithConfig(t *testing.T, cb func(c *Config)) (string, *Client) { + dir, client, err := testClientWithConfigWithErr(t, cb) if err != nil { - config.NotifyShutdown() t.Fatalf("err: %v", err) } return dir, client @@ -102,7 +115,7 @@ joinLAN(t, c1, s1) testrpc.WaitForTestAgent(t, c1.RPC, "dc1") retry.Run(t, func(r *retry.R) { - if got, want := c1.routers.NumServers(), 1; got != want { + if got, want := c1.router.GetLANManager().NumServers(), 1; got != want { r.Fatalf("got %d servers want %d", got, want) } if got, want := len(s1.LANMembers()), 2; got != want { @@ -140,7 +153,7 @@ // Check the router has both retry.Run(t, func(r *retry.R) { - server := c1.routers.FindServer() + server := c1.router.FindLANServer() require.NotNil(t, server) require.Equal(t, s1.config.NodeName, server.Name) }) @@ -150,7 +163,7 @@ retry.Run(t, func(r *retry.R) { require.Len(r, c1.LANMembers(), 1) - server := c1.routers.FindServer() + server := c1.router.FindLANServer() require.Nil(t, server) }) } @@ -354,7 +367,6 @@ func TestClient_RPC_ConsulServerPing(t *testing.T) { t.Parallel() var servers []*Server - var serverDirs []string const numServers = 5 for n := 0; n < numServers; n++ { @@ -364,7 +376,6 @@ defer s.Shutdown() servers = append(servers, s) - serverDirs = append(serverDirs, dir) } const numClients = 1 @@ -382,7 +393,7 @@ } // Sleep to allow Serf to sync, shuffle, and let the shuffle complete - c.routers.ResetRebalanceTimer() + c.router.GetLANManager().ResetRebalanceTimer() time.Sleep(time.Second) if len(c.LANMembers()) != numServers+numClients { @@ -398,8 +409,8 @@ var pingCount int for range servers { time.Sleep(200 * time.Millisecond) - s := c.routers.FindServer() - ok, err := c.connPool.Ping(s.Datacenter, s.Addr, s.Version) + m, s := c.router.FindLANRoute() + ok, err := c.connPool.Ping(s.Datacenter, s.ShortName, s.Addr) if !ok { t.Errorf("Unable to ping server %v: %s", s.String(), err) } @@ -407,7 +418,7 @@ // Artificially fail the server in order to rotate the server // list - c.routers.NotifyFailedServer(s) + m.NotifyFailedServer(s) } if pingCount != numServers { @@ -417,27 +428,20 @@ func TestClient_RPC_TLS(t *testing.T) { t.Parallel() - dir1, conf1 := testServerConfig(t) + _, conf1 := testServerConfig(t) conf1.VerifyIncoming = true conf1.VerifyOutgoing = true configureTLS(conf1) - s1, err := NewServer(conf1) + s1, err := newServer(t, conf1) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir1) defer s1.Shutdown() - dir2, conf2 := testClientConfig(t) - defer conf2.NotifyShutdown() + _, conf2 := testClientConfig(t) conf2.VerifyOutgoing = true configureTLS(conf2) - c1, err := NewClient(conf2) - if err != nil { - t.Fatalf("err: %v", err) - } - defer os.RemoveAll(dir2) - defer c1.Shutdown() + c1 := newClient(t, conf2) // Try an RPC var out struct{} @@ -462,27 +466,38 @@ }) } +func newClient(t *testing.T, config *Config) *Client { + t.Helper() + + c, err := tlsutil.NewConfigurator(config.ToTLSUtilConfig(), nil) + require.NoError(t, err, "failed to create tls configuration") + + logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ + Level: hclog.Debug, + Output: testutil.NewLogBuffer(t), + }) + client, err := NewClient(config, WithLogger(logger), WithTLSConfigurator(c)) + require.NoError(t, err, "failed to create client") + t.Cleanup(func() { + client.Shutdown() + }) + return client +} + func TestClient_RPC_RateLimit(t *testing.T) { t.Parallel() - dir1, conf1 := testServerConfig(t) - s1, err := NewServer(conf1) + _, conf1 := testServerConfig(t) + s1, err := newServer(t, conf1) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir1) defer s1.Shutdown() testrpc.WaitForLeader(t, s1.RPC, "dc1") - dir2, conf2 := testClientConfig(t) - defer conf2.NotifyShutdown() + _, conf2 := testClientConfig(t) conf2.RPCRate = 2 conf2.RPCMaxBurst = 2 - c1, err := NewClient(conf2) - if err != nil { - t.Fatalf("err: %v", err) - } - defer os.RemoveAll(dir2) - defer c1.Shutdown() + c1 := newClient(t, conf2) joinLAN(t, c1, s1) retry.Run(t, func(r *retry.R) { @@ -512,7 +527,7 @@ // Wait until we've got a healthy server. retry.Run(t, func(r *retry.R) { - if got, want := c1.routers.NumServers(), 1; got != want { + if got, want := c1.router.GetLANManager().NumServers(), 1; got != want { r.Fatalf("got %d servers want %d", got, want) } }) @@ -536,25 +551,18 @@ func TestClient_SnapshotRPC_RateLimit(t *testing.T) { t.Parallel() - dir1, s1 := testServer(t) - defer os.RemoveAll(dir1) + _, s1 := testServer(t) defer s1.Shutdown() testrpc.WaitForLeader(t, s1.RPC, "dc1") - dir2, conf1 := testClientConfig(t) - defer conf1.NotifyShutdown() + _, conf1 := testClientConfig(t) conf1.RPCRate = 2 conf1.RPCMaxBurst = 2 - c1, err := NewClient(conf1) - if err != nil { - t.Fatalf("err: %v", err) - } - defer os.RemoveAll(dir2) - defer c1.Shutdown() + c1 := newClient(t, conf1) joinLAN(t, c1, s1) retry.Run(t, func(r *retry.R) { - if got, want := c1.routers.NumServers(), 1; got != want { + if got, want := c1.router.GetLANManager().NumServers(), 1; got != want { r.Fatalf("got %d servers want %d", got, want) } }) @@ -573,27 +581,20 @@ func TestClient_SnapshotRPC_TLS(t *testing.T) { t.Parallel() - dir1, conf1 := testServerConfig(t) + _, conf1 := testServerConfig(t) conf1.VerifyIncoming = true conf1.VerifyOutgoing = true configureTLS(conf1) - s1, err := NewServer(conf1) + s1, err := newServer(t, conf1) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir1) defer s1.Shutdown() - dir2, conf2 := testClientConfig(t) - defer conf2.NotifyShutdown() + _, conf2 := testClientConfig(t) conf2.VerifyOutgoing = true configureTLS(conf2) - c1, err := NewClient(conf2) - if err != nil { - t.Fatalf("err: %v", err) - } - defer os.RemoveAll(dir2) - defer c1.Shutdown() + c1 := newClient(t, conf2) // Wait for the leader testrpc.WaitForLeader(t, s1.RPC, "dc1") @@ -609,7 +610,7 @@ } // Wait until we've got a healthy server. - if got, want := c1.routers.NumServers(), 1; got != want { + if got, want := c1.router.GetLANManager().NumServers(), 1; got != want { r.Fatalf("got %d servers want %d", got, want) } }) @@ -708,27 +709,6 @@ } } -func TestClient_Encrypted(t *testing.T) { - t.Parallel() - dir1, c1 := testClient(t) - defer os.RemoveAll(dir1) - defer c1.Shutdown() - - key := []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} - dir2, c2 := testClientWithConfig(t, func(c *Config) { - c.SerfLANConfig.MemberlistConfig.SecretKey = key - }) - defer os.RemoveAll(dir2) - defer c2.Shutdown() - - if c1.Encrypted() { - t.Fatalf("should not be encrypted") - } - if !c2.Encrypted() { - t.Fatalf("should be encrypted") - } -} - func TestClient_Reload(t *testing.T) { t.Parallel() dir1, c := testClientWithConfig(t, func(c *Config) { diff -Nru consul-1.7.4+dfsg1/agent/consul/cluster_test.go consul-1.8.7+dfsg1/agent/consul/cluster_test.go --- consul-1.7.4+dfsg1/agent/consul/cluster_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/cluster_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,100 @@ +package consul + +import ( + "net/rpc" + "os" + "testing" + + "github.com/hashicorp/consul/testrpc" + "github.com/stretchr/testify/require" +) + +type testClusterConfig struct { + Datacenter string + Servers int + Clients int + ServerConf func(*Config) + ClientConf func(*Config) + + ServerWait func(*testing.T, *Server) + ClientWait func(*testing.T, *Client) +} + +type testCluster struct { + Servers []*Server + ServerCodecs []rpc.ClientCodec + Clients []*Client +} + +func newTestCluster(t *testing.T, conf *testClusterConfig) *testCluster { + t.Helper() + + require.NotNil(t, conf) + cluster := testCluster{} + + // create the servers + for i := 0; i < conf.Servers; i++ { + dir, srv := testServerWithConfig(t, func(c *Config) { + if conf.Datacenter != "" { + c.Datacenter = conf.Datacenter + } + c.Bootstrap = false + c.BootstrapExpect = conf.Servers + + if conf.ServerConf != nil { + conf.ServerConf(c) + } + }) + t.Cleanup(func() { os.RemoveAll(dir) }) + t.Cleanup(func() { srv.Shutdown() }) + + cluster.Servers = append(cluster.Servers, srv) + + codec := rpcClient(t, srv) + + cluster.ServerCodecs = append(cluster.ServerCodecs, codec) + t.Cleanup(func() { codec.Close() }) + + if i > 0 { + joinLAN(t, srv, cluster.Servers[0]) + } + } + + waitForLeaderEstablishment(t, cluster.Servers...) + if conf.ServerWait != nil { + for _, srv := range cluster.Servers { + conf.ServerWait(t, srv) + } + } + + // create the clients + for i := 0; i < conf.Clients; i++ { + dir, client := testClientWithConfig(t, func(c *Config) { + if conf.Datacenter != "" { + c.Datacenter = conf.Datacenter + } + if conf.ClientConf != nil { + conf.ClientConf(c) + } + }) + + t.Cleanup(func() { os.RemoveAll(dir) }) + t.Cleanup(func() { client.Shutdown() }) + + if len(cluster.Servers) > 0 { + joinLAN(t, client, cluster.Servers[0]) + } + + cluster.Clients = append(cluster.Clients, client) + } + + for _, client := range cluster.Clients { + if conf.ClientWait != nil { + conf.ClientWait(t, client) + } else { + testrpc.WaitForTestAgent(t, client.RPC, client.config.Datacenter) + } + } + + return &cluster +} diff -Nru consul-1.7.4+dfsg1/agent/consul/config_endpoint.go consul-1.8.7+dfsg1/agent/consul/config_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/config_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/config_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,7 +27,7 @@ // be replicated to all the other datacenters. args.Datacenter = c.srv.config.PrimaryDatacenter - if done, err := c.srv.forward("ConfigEntry.Apply", args, args, reply); done { + if done, err := c.srv.ForwardRPC("ConfigEntry.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"config_entry", "apply"}, time.Now()) @@ -73,7 +73,7 @@ return err } - if done, err := c.srv.forward("ConfigEntry.Get", args, args, reply); done { + if done, err := c.srv.ForwardRPC("ConfigEntry.Get", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"config_entry", "get"}, time.Now()) @@ -120,7 +120,7 @@ return err } - if done, err := c.srv.forward("ConfigEntry.List", args, args, reply); done { + if done, err := c.srv.ForwardRPC("ConfigEntry.List", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"config_entry", "list"}, time.Now()) @@ -165,7 +165,7 @@ return err } - if done, err := c.srv.forward("ConfigEntry.ListAll", args, args, reply); done { + if done, err := c.srv.ForwardRPC("ConfigEntry.ListAll", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"config_entry", "listAll"}, time.Now()) @@ -209,7 +209,7 @@ // be replicated to all the other datacenters. args.Datacenter = c.srv.config.PrimaryDatacenter - if done, err := c.srv.forward("ConfigEntry.Delete", args, args, reply); done { + if done, err := c.srv.ForwardRPC("ConfigEntry.Delete", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"config_entry", "delete"}, time.Now()) @@ -245,7 +245,7 @@ return err } - if done, err := c.srv.forward("ConfigEntry.ResolveServiceConfig", args, args, reply); done { + if done, err := c.srv.ForwardRPC("ConfigEntry.ResolveServiceConfig", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"config_entry", "resolve_service_config"}, time.Now()) diff -Nru consul-1.7.4+dfsg1/agent/consul/config_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/config_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/config_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/config_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -145,7 +145,7 @@ }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() @@ -266,7 +266,7 @@ }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() @@ -421,7 +421,7 @@ }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() @@ -502,7 +502,7 @@ }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() @@ -652,7 +652,7 @@ }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() @@ -1119,7 +1119,7 @@ }) defer os.RemoveAll(dir1) defer s1.Shutdown() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) codec := rpcClient(t, s1) defer codec.Close() diff -Nru consul-1.7.4+dfsg1/agent/consul/config.go consul-1.8.7+dfsg1/agent/consul/config.go --- consul-1.7.4+dfsg1/agent/consul/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,6 @@ import ( "fmt" - "io" "net" "os" "time" @@ -120,9 +119,6 @@ // configured at this point. NotifyListen func() - // NotifyShutdown is called after Server is completely Shutdown. - NotifyShutdown func() - // RPCAddr is the RPC address used by Consul. This should be reachable // by the WAN and LAN RPCAddr *net.TCPAddr @@ -161,13 +157,6 @@ // leader election. ReconcileInterval time.Duration - // LogLevel is the level of the logs to write. Defaults to "INFO". - LogLevel string - - // LogOutput is the location to write logs to. If this is not set, - // logs will go to stderr. - LogOutput io.Writer - // ProtocolVersion is the protocol version to speak. This must be between // ProtocolVersionMin and ProtocolVersionMax. ProtocolVersion uint8 @@ -237,10 +226,6 @@ // ACLEnabled is used to enable ACLs ACLsEnabled bool - // ACLEnforceVersion8 is used to gate a set of ACL policy features that - // are opt-in prior to Consul 0.8 and opt-out in Consul 0.8 and later. - ACLEnforceVersion8 bool - // ACLMasterToken is used to bootstrap the ACL system. It should be specified // on the servers in the ACLDatacenter. When the leader comes online, it ensures // that the Master token is available. This provides the initial token. @@ -309,6 +294,17 @@ // by default in Consul 1.0 and later. ACLEnableKeyListPolicy bool + AutoConfigEnabled bool + AutoConfigIntroToken string + AutoConfigIntroTokenFile string + AutoConfigServerAddresses []string + AutoConfigDNSSANs []string + AutoConfigIPSANs []net.IP + AutoConfigAuthzEnabled bool + AutoConfigAuthzAuthMethod structs.ACLAuthMethod + AutoConfigAuthzClaimAssertions []string + AutoConfigAuthzAllowReuse bool + // TombstoneTTL is used to control how long KV tombstones are retained. // This provides a window of time where the X-Consul-Index is monotonic. // Outside this window, the index may not be monotonic. This is a result @@ -370,6 +366,20 @@ // used to limit the amount of Raft bandwidth used for replication. ConfigReplicationApplyLimit int + // FederationStateReplicationRate is the max number of replication rounds that can + // be run per second. Note that either 1 or 2 RPCs are used during each replication + // round + FederationStateReplicationRate int + + // FederationStateReplicationBurst is how many replication rounds can be bursted after a + // period of idleness + FederationStateReplicationBurst int + + // FederationStateReplicationApply limit is the max number of replication-related + // apply operations that we allow during a one second period. This is + // used to limit the amount of Raft bandwidth used for replication. + FederationStateReplicationApplyLimit int + // CoordinateUpdatePeriod controls how long a server batches coordinate // updates before applying them in a Raft transaction. A larger period // leads to fewer Raft transactions, but also the stored coordinates @@ -436,6 +446,14 @@ // ConnectEnabled is whether to enable Connect features such as the CA. ConnectEnabled bool + // ConnectMeshGatewayWANFederationEnabled determines if wan federation of + // datacenters should exclusively traverse mesh gateways. + ConnectMeshGatewayWANFederationEnabled bool + + // DisableFederationStateAntiEntropy solely exists for use in unit tests to + // disable a background routine. + DisableFederationStateAntiEntropy bool + // CAConfig is used to apply the initial Connect CA configuration when // bootstrapping. CAConfig *structs.CAConfiguration @@ -501,7 +519,7 @@ return nil } -// DefaultConfig returns a sane default configuration. +// DefaultConfig returns a default configuration. func DefaultConfig() *Config { hostname, err := os.Hostname() if err != nil { @@ -509,32 +527,35 @@ } conf := &Config{ - Build: version.Version, - Datacenter: DefaultDC, - NodeName: hostname, - RPCAddr: DefaultRPCAddr, - RaftConfig: raft.DefaultConfig(), - SerfLANConfig: lib.SerfDefaultConfig(), - SerfWANConfig: lib.SerfDefaultConfig(), - SerfFloodInterval: 60 * time.Second, - ReconcileInterval: 60 * time.Second, - ProtocolVersion: ProtocolVersion2Compatible, - ACLRoleTTL: 30 * time.Second, - ACLPolicyTTL: 30 * time.Second, - ACLTokenTTL: 30 * time.Second, - ACLDefaultPolicy: "allow", - ACLDownPolicy: "extend-cache", - ACLReplicationRate: 1, - ACLReplicationBurst: 5, - ACLReplicationApplyLimit: 100, // ops / sec - ConfigReplicationRate: 1, - ConfigReplicationBurst: 5, - ConfigReplicationApplyLimit: 100, // ops / sec - TombstoneTTL: 15 * time.Minute, - TombstoneTTLGranularity: 30 * time.Second, - SessionTTLMin: 10 * time.Second, - ACLTokenMinExpirationTTL: 1 * time.Minute, - ACLTokenMaxExpirationTTL: 24 * time.Hour, + Build: version.Version, + Datacenter: DefaultDC, + NodeName: hostname, + RPCAddr: DefaultRPCAddr, + RaftConfig: raft.DefaultConfig(), + SerfLANConfig: lib.SerfDefaultConfig(), + SerfWANConfig: lib.SerfDefaultConfig(), + SerfFloodInterval: 60 * time.Second, + ReconcileInterval: 60 * time.Second, + ProtocolVersion: ProtocolVersion2Compatible, + ACLRoleTTL: 30 * time.Second, + ACLPolicyTTL: 30 * time.Second, + ACLTokenTTL: 30 * time.Second, + ACLDefaultPolicy: "allow", + ACLDownPolicy: "extend-cache", + ACLReplicationRate: 1, + ACLReplicationBurst: 5, + ACLReplicationApplyLimit: 100, // ops / sec + ConfigReplicationRate: 1, + ConfigReplicationBurst: 5, + ConfigReplicationApplyLimit: 100, // ops / sec + FederationStateReplicationRate: 1, + FederationStateReplicationBurst: 5, + FederationStateReplicationApplyLimit: 100, // ops / sec + TombstoneTTL: 15 * time.Minute, + TombstoneTTLGranularity: 30 * time.Second, + SessionTTLMin: 10 * time.Second, + ACLTokenMinExpirationTTL: 1 * time.Minute, + ACLTokenMaxExpirationTTL: 24 * time.Hour, // These are tuned to provide a total throughput of 128 updates // per second. If you update these, you should update the client- @@ -562,9 +583,9 @@ CAConfig: &structs.CAConfiguration{ Provider: "consul", Config: map[string]interface{}{ - "RotationPeriod": "2160h", - "LeafCertTTL": "72h", - "IntermediateCertTTL": "8760h", // 365 * 24h + "RotationPeriod": structs.DefaultCARotationPeriod, + "LeafCertTTL": structs.DefaultLeafCertTTL, + "IntermediateCertTTL": structs.DefaultIntermediateCertTTL, }, }, diff -Nru consul-1.7.4+dfsg1/agent/consul/config_replication.go consul-1.8.7+dfsg1/agent/consul/config_replication.go --- consul-1.7.4+dfsg1/agent/consul/config_replication.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/config_replication.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,12 +11,8 @@ "github.com/hashicorp/go-hclog" ) -func cmpConfigLess(first structs.ConfigEntry, second structs.ConfigEntry) bool { - return first.GetKind() < second.GetKind() || (first.GetKind() == second.GetKind() && first.GetName() < second.GetName()) -} - func configSort(configs []structs.ConfigEntry) { - sort.Slice(configs, func(i, j int) bool { + sort.SliceStable(configs, func(i, j int) bool { return cmpConfigLess(configs[i], configs[j]) }) } @@ -25,12 +21,14 @@ configSort(local) configSort(remote) - var deletions []structs.ConfigEntry - var updates []structs.ConfigEntry - var localIdx int - var remoteIdx int + var ( + deletions []structs.ConfigEntry + updates []structs.ConfigEntry + localIdx int + remoteIdx int + ) for localIdx, remoteIdx = 0, 0; localIdx < len(local) && remoteIdx < len(remote); { - if local[localIdx].GetKind() == remote[remoteIdx].GetKind() && local[localIdx].GetName() == remote[remoteIdx].GetName() { + if configSameID(local[localIdx], remote[remoteIdx]) { // config is in both the local and remote state - need to check raft indices if remote[remoteIdx].GetRaftIndex().ModifyIndex > lastRemoteIndex { updates = append(updates, remote[remoteIdx]) @@ -64,6 +62,30 @@ return deletions, updates } +func cmpConfigLess(first structs.ConfigEntry, second structs.ConfigEntry) bool { + if first.GetKind() < second.GetKind() { + return true + } + if first.GetKind() > second.GetKind() { + return false + } + + if first.GetEnterpriseMeta().LessThan(second.GetEnterpriseMeta()) { + return true + } + if second.GetEnterpriseMeta().LessThan(first.GetEnterpriseMeta()) { + return false + } + + return first.GetName() < second.GetName() +} + +func configSameID(e1, e2 structs.ConfigEntry) bool { + return e1.GetKind() == e2.GetKind() && + e1.GetEnterpriseMeta().IsSame(e2.GetEnterpriseMeta()) && + e1.GetName() == e2.GetName() +} + func (s *Server) reconcileLocalConfig(ctx context.Context, configs []structs.ConfigEntry, op structs.ConfigEntryOp) (bool, error) { ticker := time.NewTicker(time.Second / time.Duration(s.config.ConfigReplicationApplyLimit)) defer ticker.Stop() @@ -79,7 +101,8 @@ if err != nil { return false, fmt.Errorf("Failed to apply config %s: %v", op, err) } - if respErr, ok := resp.(error); ok && err != nil { + + if respErr, ok := resp.(error); ok { return false, fmt.Errorf("Failed to apply config %s: %v", op, respErr) } diff -Nru consul-1.7.4+dfsg1/agent/consul/config_replication_test.go consul-1.8.7+dfsg1/agent/consul/config_replication_test.go --- consul-1.7.4+dfsg1/agent/consul/config_replication_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/config_replication_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,6 +4,7 @@ "fmt" "os" "testing" + "time" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/sdk/testutil/retry" @@ -11,6 +12,85 @@ "github.com/stretchr/testify/require" ) +func TestReplication_ConfigSort(t *testing.T) { + newDefaults := func(name, protocol string) *structs.ServiceConfigEntry { + return &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: name, + Protocol: protocol, + } + } + newResolver := func(name string, timeout time.Duration) *structs.ServiceResolverConfigEntry { + return &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: name, + ConnectTimeout: timeout, + } + } + + type testcase struct { + configs []structs.ConfigEntry + expect []structs.ConfigEntry + } + + cases := map[string]testcase{ + "none": {}, + "one": { + configs: []structs.ConfigEntry{ + newDefaults("web", "grpc"), + }, + expect: []structs.ConfigEntry{ + newDefaults("web", "grpc"), + }, + }, + "just kinds": { + configs: []structs.ConfigEntry{ + newResolver("web", 33*time.Second), + newDefaults("web", "grpc"), + }, + expect: []structs.ConfigEntry{ + newDefaults("web", "grpc"), + newResolver("web", 33*time.Second), + }, + }, + "just names": { + configs: []structs.ConfigEntry{ + newDefaults("db", "grpc"), + newDefaults("api", "http2"), + }, + expect: []structs.ConfigEntry{ + newDefaults("api", "http2"), + newDefaults("db", "grpc"), + }, + }, + "all": { + configs: []structs.ConfigEntry{ + newResolver("web", 33*time.Second), + newDefaults("web", "grpc"), + newDefaults("db", "grpc"), + newDefaults("api", "http2"), + }, + expect: []structs.ConfigEntry{ + newDefaults("api", "http2"), + newDefaults("db", "grpc"), + newDefaults("web", "grpc"), + newResolver("web", 33*time.Second), + }, + }, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + configSort(tc.configs) + require.Equal(t, tc.expect, tc.configs) + // and it should be stable + configSort(tc.configs) + require.Equal(t, tc.expect, tc.configs) + }) + } +} + func TestReplication_ConfigEntries(t *testing.T) { t.Parallel() dir1, s1 := testServerWithConfig(t, func(c *Config) { diff -Nru consul-1.7.4+dfsg1/agent/consul/connect_ca_endpoint.go consul-1.8.7+dfsg1/agent/consul/connect_ca_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/connect_ca_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/connect_ca_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,22 +1,14 @@ package consul import ( - "context" "errors" "fmt" - "reflect" - "strings" - "sync" "time" - "github.com/hashicorp/consul/lib/semaphore" "github.com/hashicorp/go-hclog" - "golang.org/x/time/rate" - "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/go-memdb" @@ -53,57 +45,6 @@ srv *Server logger hclog.Logger - - // csrRateLimiter limits the rate of signing new certs if configured. Lazily - // initialized from current config to support dynamic changes. - // csrRateLimiterMu must be held while dereferencing the pointer or storing a - // new one, but methods can be called on the limiter object outside of the - // locked section. This is done only in the getCSRRateLimiterWithLimit method. - csrRateLimiter *rate.Limiter - csrRateLimiterMu sync.RWMutex - - // csrConcurrencyLimiter is a dynamically resizable semaphore used to limit - // Sign RPC concurrency if configured. The zero value is usable as soon as - // SetSize is called which we do dynamically in the RPC handler to avoid - // having to hook elaborate synchronization mechanisms through the CA config - // endpoint and config reload etc. - csrConcurrencyLimiter semaphore.Dynamic -} - -// getCSRRateLimiterWithLimit returns a rate.Limiter with the desired limit set. -// It uses the shared server-wide limiter unless the limit has been changed in -// config or the limiter has not been setup yet in which case it just-in-time -// configures the new limiter. We assume that limit changes are relatively rare -// and that all callers (there is currently only one) use the same config value -// as the limit. There might be some flapping if there are multiple concurrent -// requests in flight at the time the config changes where A sees the new value -// and updates, B sees the old but then gets this lock second and changes back. -// Eventually though and very soon (once all current RPCs are complete) we are -// guaranteed to have the correct limit set by the next RPC that comes in so I -// assume this is fine. If we observe strange behavior because of it, we could -// add hysteresis that prevents changes too soon after a previous change but -// that seems unnecessary for now. -func (s *ConnectCA) getCSRRateLimiterWithLimit(limit rate.Limit) *rate.Limiter { - s.csrRateLimiterMu.RLock() - lim := s.csrRateLimiter - s.csrRateLimiterMu.RUnlock() - - // If there is a current limiter with the same limit, return it. This should - // be the common case. - if lim != nil && lim.Limit() == limit { - return lim - } - - // Need to change limiter, get write lock - s.csrRateLimiterMu.Lock() - defer s.csrRateLimiterMu.Unlock() - // No limiter yet, or limit changed in CA config, reconfigure a new limiter. - // We use burst of 1 for a hard limit. Note that either bursting or waiting is - // necessary to get expected behavior in fact of random arrival times, but we - // don't need both and we use Wait with a small delay to smooth noise. See - // https://github.com/banks/sim-rate-limit-backoff/blob/master/README.md. - s.csrRateLimiter = rate.NewLimiter(limit, 1) - return s.csrRateLimiter } // ConfigurationGet returns the configuration for the CA. @@ -115,7 +56,7 @@ return ErrConnectNotEnabled } - if done, err := s.srv.forward("ConnectCA.ConfigurationGet", args, args, reply); done { + if done, err := s.srv.ForwardRPC("ConnectCA.ConfigurationGet", args, args, reply); done { return err } @@ -124,7 +65,7 @@ if err != nil { return err } - if rule != nil && rule.OperatorRead(nil) != acl.Allow { + if rule != nil && rule.OperatorWrite(nil) != acl.Allow { return acl.ErrPermissionDenied } @@ -147,7 +88,7 @@ return ErrConnectNotEnabled } - if done, err := s.srv.forward("ConnectCA.ConfigurationSet", args, args, reply); done { + if done, err := s.srv.ForwardRPC("ConnectCA.ConfigurationSet", args, args, reply); done { return err } @@ -160,203 +101,7 @@ return acl.ErrPermissionDenied } - // Exit early if it's a no-op change - state := s.srv.fsm.State() - confIdx, config, err := state.CAConfig(nil) - if err != nil { - return err - } - - // Don't allow state changes. Either it needs to be empty or the same to allow - // read-modify-write loops that don't touch the State field. - if len(args.Config.State) > 0 && - !reflect.DeepEqual(args.Config.State, config.State) { - return ErrStateReadOnly - } - - // Don't allow users to change the ClusterID. - args.Config.ClusterID = config.ClusterID - if args.Config.Provider == config.Provider && reflect.DeepEqual(args.Config.Config, config.Config) { - return nil - } - - // If the provider hasn't changed, we need to load the current Provider state - // so it can decide if it needs to change resources or not based on the config - // change. - if args.Config.Provider == config.Provider { - // Note this is a shallow copy since the State method doc requires the - // provider return a map that will not be further modified and should not - // modify the one we pass to Configure. - args.Config.State = config.State - } - - // Create a new instance of the provider described by the config - // and get the current active root CA. This acts as a good validation - // of the config and makes sure the provider is functioning correctly - // before we commit any changes to Raft. - newProvider, err := s.srv.createCAProvider(args.Config) - if err != nil { - return fmt.Errorf("could not initialize provider: %v", err) - } - pCfg := ca.ProviderConfig{ - ClusterID: args.Config.ClusterID, - Datacenter: s.srv.config.Datacenter, - // This endpoint can be called in a secondary DC too so set this correctly. - IsPrimary: s.srv.config.Datacenter == s.srv.config.PrimaryDatacenter, - RawConfig: args.Config.Config, - State: args.Config.State, - } - if err := newProvider.Configure(pCfg); err != nil { - return fmt.Errorf("error configuring provider: %v", err) - } - if err := newProvider.GenerateRoot(); err != nil { - return fmt.Errorf("error generating CA root certificate: %v", err) - } - - newRootPEM, err := newProvider.ActiveRoot() - if err != nil { - return err - } - - newActiveRoot, err := parseCARoot(newRootPEM, args.Config.Provider, args.Config.ClusterID) - if err != nil { - return err - } - - // See if the provider needs to persist any state along with the config - pState, err := newProvider.State() - if err != nil { - return fmt.Errorf("error getting provider state: %v", err) - } - args.Config.State = pState - - // Compare the new provider's root CA ID to the current one. If they - // match, just update the existing provider with the new config. - // If they don't match, begin the root rotation process. - _, root, err := state.CARootActive(nil) - if err != nil { - return err - } - - // If the root didn't change or if this is a secondary DC, just update the - // config and return. - if (s.srv.config.Datacenter != s.srv.config.PrimaryDatacenter) || - root != nil && root.ID == newActiveRoot.ID { - args.Op = structs.CAOpSetConfig - resp, err := s.srv.raftApply(structs.ConnectCARequestType, args) - if err != nil { - return err - } - if respErr, ok := resp.(error); ok { - return respErr - } - - // If the config has been committed, update the local provider instance - s.srv.setCAProvider(newProvider, newActiveRoot) - - s.logger.Info("CA provider config updated") - - return nil - } - - // At this point, we know the config change has trigged a root rotation, - // either by swapping the provider type or changing the provider's config - // to use a different root certificate. - - // First up, sanity check that the current provider actually supports - // cross-signing. - oldProvider, _ := s.srv.getCAProvider() - if oldProvider == nil { - return fmt.Errorf("internal error: CA provider is nil") - } - canXSign, err := oldProvider.SupportsCrossSigning() - if err != nil { - return fmt.Errorf("CA provider error: %s", err) - } - if !canXSign && !args.Config.ForceWithoutCrossSigning { - return errors.New("The current CA Provider does not support cross-signing. " + - "You can try again with ForceWithoutCrossSigningSet but this may cause " + - "disruption - see documentation for more.") - } - if !canXSign && args.Config.ForceWithoutCrossSigning { - s.logger.Warn("current CA doesn't support cross signing but " + - "CA reconfiguration forced anyway with ForceWithoutCrossSigning") - } - - // If it's a config change that would trigger a rotation (different provider/root): - // 1. Get the root from the new provider. - // 2. Call CrossSignCA on the old provider to sign the new root with the old one to - // get a cross-signed certificate. - // 3. Take the active root for the new provider and append the intermediate from step 2 - // to its list of intermediates. - newRoot, err := connect.ParseCert(newRootPEM) - if err != nil { - return err - } - - if canXSign { - // Have the old provider cross-sign the new root - xcCert, err := oldProvider.CrossSignCA(newRoot) - if err != nil { - return err - } - - // Add the cross signed cert to the new CA's intermediates (to be attached - // to leaf certs). - newActiveRoot.IntermediateCerts = []string{xcCert} - } - - intermediate, err := newProvider.GenerateIntermediate() - if err != nil { - return err - } - if intermediate != newRootPEM { - newActiveRoot.IntermediateCerts = append(newActiveRoot.IntermediateCerts, intermediate) - } - - // Update the roots and CA config in the state store at the same time - idx, roots, err := state.CARoots(nil) - if err != nil { - return err - } - - var newRoots structs.CARoots - for _, r := range roots { - newRoot := *r - if newRoot.Active { - newRoot.Active = false - newRoot.RotatedOutAt = time.Now() - } - newRoots = append(newRoots, &newRoot) - } - newRoots = append(newRoots, newActiveRoot) - - args.Op = structs.CAOpSetRootsAndConfig - args.Index = idx - args.Config.ModifyIndex = confIdx - args.Roots = newRoots - resp, err := s.srv.raftApply(structs.ConnectCARequestType, args) - if err != nil { - return err - } - if respErr, ok := resp.(error); ok { - return respErr - } - if respOk, ok := resp.(bool); ok && !respOk { - return fmt.Errorf("could not atomically update roots and config") - } - - // If the config has been committed, update the local provider instance - // and call teardown on the old provider - s.srv.setCAProvider(newProvider, newActiveRoot) - - if err := oldProvider.Cleanup(); err != nil { - s.logger.Warn("failed to clean up old provider", "provider", config.Provider) - } - - s.logger.Info("CA rotated to new root under provider", "provider", args.Config.Provider) - - return nil + return s.srv.caManager.UpdateConfiguration(args) } // Roots returns the currently trusted root certificates. @@ -364,7 +109,7 @@ args *structs.DCSpecificRequest, reply *structs.IndexedCARoots) error { // Forward if necessary - if done, err := s.srv.forward("ConnectCA.Roots", args, args, reply); done { + if done, err := s.srv.ForwardRPC("ConnectCA.Roots", args, args, reply); done { return err } @@ -376,55 +121,12 @@ return s.srv.blockingQuery( &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, roots, config, err := state.CARootsAndConfig(ws) + roots, err := s.srv.getCARoots(ws, state) if err != nil { return err } - if config != nil { - // Build TrustDomain based on the ClusterID stored. - signingID := connect.SpiffeIDSigningForCluster(config) - if signingID == nil { - // If CA is bootstrapped at all then this should never happen but be - // defensive. - return errors.New("no cluster trust domain setup") - } - reply.TrustDomain = signingID.Host() - } - - reply.Index, reply.Roots = index, roots - if reply.Roots == nil { - reply.Roots = make(structs.CARoots, 0) - } - - // The API response must NEVER contain the secret information - // such as keys and so on. We use a whitelist below to copy the - // specific fields we want to expose. - for i, r := range reply.Roots { - // IMPORTANT: r must NEVER be modified, since it is a pointer - // directly to the structure in the memdb store. - - reply.Roots[i] = &structs.CARoot{ - ID: r.ID, - Name: r.Name, - SerialNumber: r.SerialNumber, - SigningKeyID: r.SigningKeyID, - ExternalTrustDomain: r.ExternalTrustDomain, - NotBefore: r.NotBefore, - NotAfter: r.NotAfter, - RootCert: r.RootCert, - IntermediateCerts: r.IntermediateCerts, - RaftIndex: r.RaftIndex, - Active: r.Active, - PrivateKeyType: r.PrivateKeyType, - PrivateKeyBits: r.PrivateKeyBits, - } - - if r.Active { - reply.ActiveRootID = r.ID - } - } - + *reply = *roots return nil }, ) @@ -439,7 +141,7 @@ return ErrConnectNotEnabled } - if done, err := s.srv.forward("ConnectCA.Sign", args, args, reply); done { + if done, err := s.srv.ForwardRPC("ConnectCA.Sign", args, args, reply); done { return err } @@ -455,20 +157,15 @@ return err } - provider, caRoot := s.srv.getCAProvider() - if provider == nil { - return fmt.Errorf("internal error: CA provider is nil") - } else if caRoot == nil { - return fmt.Errorf("internal error: CA root is nil") - } - - // Verify that the CSR entity is in the cluster's trust domain - state := s.srv.fsm.State() - _, config, err := state.CAConfig(nil) + // Verify that the ACL token provided has permission to act as this service + rule, err := s.srv.ResolveToken(args.Token) if err != nil { return err } - signingID := connect.SpiffeIDSigningForCluster(config) + + var authzContext acl.AuthorizerContext + var entMeta structs.EnterpriseMeta + serviceID, isService := spiffeID.(*connect.SpiffeIDService) agentID, isAgent := spiffeID.(*connect.SpiffeIDAgent) if !isService && !isAgent { @@ -476,20 +173,6 @@ } if isService { - if !signingID.CanSign(spiffeID) { - return fmt.Errorf("SPIFFE ID in CSR from a different trust domain: %s, "+ - "we are %s", serviceID.Host, signingID.Host()) - } - } - - // Verify that the ACL token provided has permission to act as this service - rule, err := s.srv.ResolveToken(args.Token) - if err != nil { - return err - } - var authzContext acl.AuthorizerContext - var entMeta structs.EnterpriseMeta - if isService { entMeta.Merge(serviceID.GetEnterpriseMeta()) entMeta.FillAuthzContext(&authzContext) if rule != nil && rule.ServiceWrite(serviceID.Service, &authzContext) != acl.Allow { @@ -509,106 +192,11 @@ } } - commonCfg, err := config.GetCommonConfig() - if err != nil { - return err - } - if commonCfg.CSRMaxPerSecond > 0 { - lim := s.getCSRRateLimiterWithLimit(rate.Limit(commonCfg.CSRMaxPerSecond)) - // Wait up to the small threshold we allow for a token. - ctx, cancel := context.WithTimeout(context.Background(), csrLimitWait) - defer cancel() - if lim.Wait(ctx) != nil { - return ErrRateLimited - } - } else if commonCfg.CSRMaxConcurrent > 0 { - s.csrConcurrencyLimiter.SetSize(int64(commonCfg.CSRMaxConcurrent)) - ctx, cancel := context.WithTimeout(context.Background(), csrLimitWait) - defer cancel() - if err := s.csrConcurrencyLimiter.Acquire(ctx); err != nil { - return ErrRateLimited - } - defer s.csrConcurrencyLimiter.Release() - } - - // All seems to be in order, actually sign it. - pem, err := provider.Sign(csr) - if err == ca.ErrRateLimited { - return ErrRateLimited - } - if err != nil { - return err - } - - // Append any intermediates needed by this root. - for _, p := range caRoot.IntermediateCerts { - pem = strings.TrimSpace(pem) + "\n" + p - } - - // Append our local CA's intermediate if there is one. - inter, err := provider.ActiveIntermediate() - if err != nil { - return err - } - root, err := provider.ActiveRoot() + cert, err := s.srv.SignCertificate(csr, spiffeID) if err != nil { return err } - - if inter != root { - pem = strings.TrimSpace(pem) + "\n" + inter - } - - // TODO(banks): when we implement IssuedCerts table we can use the insert to - // that as the raft index to return in response. - // - // UPDATE(mkeeler): The original implementation relied on updating the CAConfig - // and using its index as the ModifyIndex for certs. This was buggy. The long - // term goal is still to insert some metadata into raft about the certificates - // and use that raft index for the ModifyIndex. This is a partial step in that - // direction except that we only are setting an index and not storing the - // metadata. - req := structs.CALeafRequest{ - Op: structs.CALeafOpIncrementIndex, - Datacenter: s.srv.config.Datacenter, - WriteRequest: structs.WriteRequest{Token: args.Token}, - } - - resp, err := s.srv.raftApply(structs.ConnectCALeafRequestType|structs.IgnoreUnknownTypeFlag, &req) - if err != nil { - return err - } - - modIdx, ok := resp.(uint64) - if !ok { - return fmt.Errorf("Invalid response from updating the leaf cert index") - } - - cert, err := connect.ParseCert(pem) - if err != nil { - return err - } - - // Set the response - *reply = structs.IssuedCert{ - SerialNumber: connect.EncodeSerialNumber(cert.SerialNumber), - CertPEM: pem, - ValidAfter: cert.NotBefore, - ValidBefore: cert.NotAfter, - EnterpriseMeta: entMeta, - RaftIndex: structs.RaftIndex{ - ModifyIndex: modIdx, - CreateIndex: modIdx, - }, - } - if isService { - reply.Service = serviceID.Service - reply.ServiceURI = cert.URIs[0].String() - } else if isAgent { - reply.Agent = agentID.Agent - reply.AgentURI = cert.URIs[0].String() - } - + *reply = *cert return nil } @@ -621,7 +209,7 @@ return ErrConnectNotEnabled } - if done, err := s.srv.forward("ConnectCA.SignIntermediate", args, args, reply); done { + if done, err := s.srv.ForwardRPC("ConnectCA.SignIntermediate", args, args, reply); done { return err } @@ -639,7 +227,7 @@ return acl.ErrPermissionDenied } - provider, _ := s.srv.getCAProvider() + provider, _ := s.srv.caManager.getCAProvider() if provider == nil { return fmt.Errorf("internal error: CA provider is nil") } diff -Nru consul-1.7.4+dfsg1/agent/consul/connect_ca_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/connect_ca_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/connect_ca_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/connect_ca_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,8 +9,7 @@ "testing" "time" - "github.com/stretchr/testify/require" - + "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/connect" ca "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/structs" @@ -18,6 +17,7 @@ "github.com/hashicorp/consul/testrpc" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func testParseCert(t *testing.T, pemValue string) *x509.Certificate { @@ -144,6 +144,93 @@ } } +func TestConnectCAConfig_GetSet_ACLDeny(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = TestDefaultMasterToken + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + opReadToken, err := upsertTestTokenWithPolicyRules( + codec, TestDefaultMasterToken, "dc1", `operator = "read"`) + require.NoError(t, err) + + opWriteToken, err := upsertTestTokenWithPolicyRules( + codec, TestDefaultMasterToken, "dc1", `operator = "write"`) + require.NoError(t, err) + + // Update a config value + newConfig := &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "PrivateKey": ` +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49 +AwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav +q5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ== +-----END EC PRIVATE KEY-----`, + "RootCert": ` +-----BEGIN CERTIFICATE----- +MIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ +VGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG +A1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR +AB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7 +SkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD +AgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6 +NDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6 +NWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf +ZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6 +ZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw +WQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1 +NTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG +SM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA +pY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g= +-----END CERTIFICATE-----`, + }, + } + + args := &structs.CARequest{ + Datacenter: "dc1", + Config: newConfig, + WriteRequest: structs.WriteRequest{Token: TestDefaultMasterToken}, + } + var reply interface{} + require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConnectCA.ConfigurationSet", args, &reply)) + + t.Run("deny get with operator:read", func(t *testing.T) { + args := &structs.DCSpecificRequest{ + Datacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: opReadToken.SecretID}, + } + + var reply structs.CAConfiguration + err = msgpackrpc.CallWithCodec(codec, "ConnectCA.ConfigurationGet", args, &reply) + assert.True(t, acl.IsErrPermissionDenied(err)) + }) + + t.Run("allow get with operator:write", func(t *testing.T) { + args := &structs.DCSpecificRequest{ + Datacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: opWriteToken.SecretID}, + } + + var reply structs.CAConfiguration + err = msgpackrpc.CallWithCodec(codec, "ConnectCA.ConfigurationGet", args, &reply) + assert.False(t, acl.IsErrPermissionDenied(err)) + assert.Equal(t, newConfig.Config, reply.Config) + }) +} + // This test case tests that the logic around forcing a rotation without cross // signing works when requested (and is denied when not requested). This occurs // if the current CA is not able to cross sign external CA certificates. @@ -405,6 +492,161 @@ } } +func TestConnectCAConfig_UpdateSecondary(t *testing.T) { + t.Parallel() + + assert := assert.New(t) + require := require.New(t) + + // Initialize primary as the primary DC + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "primary" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + testrpc.WaitForLeader(t, s1.RPC, "primary") + + // secondary as a secondary DC + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "secondary" + c.PrimaryDatacenter = "primary" + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + codec := rpcClient(t, s2) + defer codec.Close() + + // Create the WAN link + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s2.RPC, "secondary") + + // Capture the current root + rootList, activeRoot, err := getTestRoots(s1, "primary") + require.NoError(err) + require.Len(rootList.Roots, 1) + rootCert := activeRoot + + waitForActiveCARoot(t, s1, rootCert) + waitForActiveCARoot(t, s2, rootCert) + + // Capture the current intermediate + rootList, activeRoot, err = getTestRoots(s2, "secondary") + require.NoError(err) + require.Len(rootList.Roots, 1) + require.Len(activeRoot.IntermediateCerts, 1) + oldIntermediatePEM := activeRoot.IntermediateCerts[0] + + // Update the secondary CA config to use a new private key, which should + // cause a re-signing with a new intermediate. + _, newKey, err := connect.GeneratePrivateKey() + assert.NoError(err) + newConfig := &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "PrivateKey": newKey, + "RootCert": "", + "RotationPeriod": 90 * 24 * time.Hour, + }, + } + { + args := &structs.CARequest{ + Datacenter: "secondary", + Config: newConfig, + } + var reply interface{} + + require.NoError(msgpackrpc.CallWithCodec(codec, "ConnectCA.ConfigurationSet", args, &reply)) + } + + // Make sure the new intermediate has replaced the old one in the active root, + // and that the root itself hasn't changed. + var newIntermediatePEM string + { + args := &structs.DCSpecificRequest{ + Datacenter: "secondary", + } + var reply structs.IndexedCARoots + require.Nil(msgpackrpc.CallWithCodec(codec, "ConnectCA.Roots", args, &reply)) + require.Len(reply.Roots, 1) + require.Len(reply.Roots[0].IntermediateCerts, 1) + newIntermediatePEM = reply.Roots[0].IntermediateCerts[0] + require.NotEqual(oldIntermediatePEM, newIntermediatePEM) + require.Equal(reply.Roots[0].RootCert, rootCert.RootCert) + } + + // Verify the new config was set. + { + args := &structs.DCSpecificRequest{ + Datacenter: "secondary", + } + var reply structs.CAConfiguration + require.NoError(msgpackrpc.CallWithCodec(codec, "ConnectCA.ConfigurationGet", args, &reply)) + + actual, err := ca.ParseConsulCAConfig(reply.Config) + require.NoError(err) + expected, err := ca.ParseConsulCAConfig(newConfig.Config) + require.NoError(err) + assert.Equal(reply.Provider, newConfig.Provider) + assert.Equal(actual, expected) + } + + // Verify that new leaf certs get the new intermediate bundled + { + // Generate a CSR and request signing + spiffeId := connect.TestSpiffeIDServiceWithHostDC(t, "web", connect.TestClusterID+".consul", "secondary") + csr, _ := connect.TestCSR(t, spiffeId) + args := &structs.CASignRequest{ + Datacenter: "secondary", + CSR: csr, + } + var reply structs.IssuedCert + require.NoError(msgpackrpc.CallWithCodec(codec, "ConnectCA.Sign", args, &reply)) + + // Verify the leaf cert has the new intermediate. + { + roots := x509.NewCertPool() + assert.True(roots.AppendCertsFromPEM([]byte(rootCert.RootCert))) + leaf, err := connect.ParseCert(reply.CertPEM) + require.NoError(err) + + intermediates := x509.NewCertPool() + require.True(intermediates.AppendCertsFromPEM([]byte(newIntermediatePEM))) + + _, err = leaf.Verify(x509.VerifyOptions{ + Roots: roots, + Intermediates: intermediates, + }) + require.NoError(err) + } + + // Verify other fields + assert.Equal("web", reply.Service) + assert.Equal(spiffeId.URI().String(), reply.ServiceURI) + } + + // Update a minor field in the config that doesn't trigger an intermediate refresh. + { + newConfig := &structs.CAConfiguration{ + Provider: "consul", + Config: map[string]interface{}{ + "PrivateKey": newKey, + "RootCert": "", + "RotationPeriod": 180 * 24 * time.Hour, + }, + } + { + args := &structs.CARequest{ + Datacenter: "secondary", + Config: newConfig, + } + var reply interface{} + + require.NoError(msgpackrpc.CallWithCodec(codec, "ConnectCA.ConfigurationSet", args, &reply)) + } + } +} + // Test CA signing func TestConnectCASign(t *testing.T) { t.Parallel() diff -Nru consul-1.7.4+dfsg1/agent/consul/coordinate_endpoint.go consul-1.8.7+dfsg1/agent/consul/coordinate_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/coordinate_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/coordinate_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,7 @@ "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/logging" + "github.com/hashicorp/consul/types" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" ) @@ -117,7 +118,7 @@ // Update inserts or updates the LAN coordinate of a node. func (c *Coordinate) Update(args *structs.CoordinateUpdateRequest, reply *struct{}) (err error) { - if done, err := c.srv.forward("Coordinate.Update", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Coordinate.Update", args, args, reply); done { return err } @@ -143,7 +144,7 @@ if err != nil { return err } - if authz != nil && c.srv.config.ACLEnforceVersion8 { + if authz != nil { var authzContext acl.AuthorizerContext structs.DefaultEnterpriseMeta().FillAuthzContext(&authzContext) if authz.NodeWrite(args.Node, &authzContext) != acl.Allow { @@ -161,30 +162,39 @@ // ListDatacenters returns the list of datacenters and their respective nodes // and the raw coordinates of those nodes (if no coordinates are available for -// any of the nodes, the node list may be empty). +// any of the nodes, the node list may be empty). This endpoint will not return +// information about the LAN network area. func (c *Coordinate) ListDatacenters(args *struct{}, reply *[]structs.DatacenterMap) error { maps, err := c.srv.router.GetDatacenterMaps() if err != nil { return err } + var out []structs.DatacenterMap + // Strip the datacenter suffixes from all the node names. - for i := range maps { - suffix := fmt.Sprintf(".%s", maps[i].Datacenter) - for j := range maps[i].Coordinates { - node := maps[i].Coordinates[j].Node - maps[i].Coordinates[j].Node = strings.TrimSuffix(node, suffix) + for _, dcMap := range maps { + if dcMap.AreaID == types.AreaLAN { + continue + } + + suffix := fmt.Sprintf(".%s", dcMap.Datacenter) + for j := range dcMap.Coordinates { + node := dcMap.Coordinates[j].Node + dcMap.Coordinates[j].Node = strings.TrimSuffix(node, suffix) } + + out = append(out, dcMap) } - *reply = maps + *reply = out return nil } // ListNodes returns the list of nodes with their raw network coordinates (if no // coordinates are available for a node it won't appear in this list). func (c *Coordinate) ListNodes(args *structs.DCSpecificRequest, reply *structs.IndexedCoordinates) error { - if done, err := c.srv.forward("Coordinate.ListNodes", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Coordinate.ListNodes", args, args, reply); done { return err } @@ -207,7 +217,7 @@ // Node returns the raw coordinates for a single node. func (c *Coordinate) Node(args *structs.NodeSpecificRequest, reply *structs.IndexedCoordinates) error { - if done, err := c.srv.forward("Coordinate.Node", args, args, reply); done { + if done, err := c.srv.ForwardRPC("Coordinate.Node", args, args, reply); done { return err } @@ -217,7 +227,7 @@ if err != nil { return err } - if authz != nil && c.srv.config.ACLEnforceVersion8 { + if authz != nil { var authzContext acl.AuthorizerContext structs.WildcardEnterpriseMeta().FillAuthzContext(&authzContext) if authz.NodeRead(args.Node, &authzContext) != acl.Allow { diff -Nru consul-1.7.4+dfsg1/agent/consul/coordinate_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/coordinate_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/coordinate_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/coordinate_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" - "github.com/hashicorp/net-rpc-msgpackrpc" + msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/hashicorp/serf/coordinate" "github.com/pascaldekloe/goe/verify" ) @@ -51,7 +51,7 @@ // Register some nodes. nodes := []string{"node1", "node2"} - if err := registerNodes(nodes, codec); err != nil { + if err := registerNodes(nodes, codec, ""); err != nil { t.Fatal(err) } @@ -184,22 +184,21 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Register some nodes. nodes := []string{"node1", "node2"} - if err := registerNodes(nodes, codec); err != nil { + if err := registerNodes(nodes, codec, "root"); err != nil { t.Fatal(err) } - // Send an update for the first node. This should go through since we + // Send an update for the first node. // don't have version 8 ACLs enforced yet. req := structs.CoordinateUpdateRequest{ Datacenter: "dc1", @@ -207,12 +206,6 @@ Coord: generateRandomCoordinate(), } var out struct{} - if err := msgpackrpc.CallWithCodec(codec, "Coordinate.Update", &req, &out); err != nil { - t.Fatalf("err: %v", err) - } - - // Now turn on version 8 enforcement and try again. - s1.config.ACLEnforceVersion8 = true err := msgpackrpc.CallWithCodec(codec, "Coordinate.Update", &req, &out) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) @@ -295,7 +288,7 @@ // Register some nodes. nodes := []string{"foo", "bar", "baz"} - if err := registerNodes(nodes, codec); err != nil { + if err := registerNodes(nodes, codec, ""); err != nil { t.Fatal(err) } @@ -355,14 +348,13 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Register some nodes. nodes := []string{"foo", "bar", "baz"} @@ -418,12 +410,12 @@ if err := msgpackrpc.CallWithCodec(codec, "Coordinate.Update", &arg3, &out); err != nil { t.Fatalf("err: %v", err) } - // Wait for all the coordinate updates to apply. Since we aren't - // enforcing version 8 ACLs, this should also allow us to read - // everything back without a token. + + // Wait for all the coordinate updates to apply. retry.Run(t, func(r *retry.R) { arg := structs.DCSpecificRequest{ - Datacenter: "dc1", + Datacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: "root"}, } resp := structs.IndexedCoordinates{} if err := msgpackrpc.CallWithCodec(codec, "Coordinate.ListNodes", &arg, &resp); err != nil { @@ -435,10 +427,7 @@ }) // Now that we've waited for the batch processing to ingest the - // coordinates we can do the rest of the requests without the loop. We - // will start by turning on version 8 ACL support which should block - // everything. - s1.config.ACLEnforceVersion8 = true + // coordinates we can do the rest of the requests without the loop. arg := structs.DCSpecificRequest{ Datacenter: "dc1", } @@ -494,7 +483,7 @@ // Register some nodes. nodes := []string{"foo", "bar"} - if err := registerNodes(nodes, codec); err != nil { + if err := registerNodes(nodes, codec, ""); err != nil { t.Fatal(err) } @@ -543,52 +532,38 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Register some nodes. nodes := []string{"node1", "node2"} - if err := registerNodes(nodes, codec); err != nil { + if err := registerNodes(nodes, codec, "root"); err != nil { t.Fatal(err) } coord := generateRandomCoordinate() req := structs.CoordinateUpdateRequest{ - Datacenter: "dc1", - Node: "node1", - Coord: coord, + Datacenter: "dc1", + Node: "node1", + Coord: coord, + WriteRequest: structs.WriteRequest{Token: "root"}, } var out struct{} if err := msgpackrpc.CallWithCodec(codec, "Coordinate.Update", &req, &out); err != nil { t.Fatalf("err: %v", err) } - // Try a read for the first node. This should go through since we - // don't have version 8 ACLs enforced yet. + // Try a read for the first node. This should fail without a token. arg := structs.NodeSpecificRequest{ Node: "node1", Datacenter: "dc1", } resp := structs.IndexedCoordinates{} - retry.Run(t, func(r *retry.R) { - if err := msgpackrpc.CallWithCodec(codec, "Coordinate.Node", &arg, &resp); err != nil { - r.Fatalf("err: %v", err) - } - if len(resp.Coordinates) != 1 || - resp.Coordinates[0].Node != "node1" { - r.Fatalf("bad: %v", resp.Coordinates) - } - verify.Values(t, "", resp.Coordinates[0].Coord, coord) - }) - - // Now turn on version 8 enforcement and try again. - s1.config.ACLEnforceVersion8 = true err := msgpackrpc.CallWithCodec(codec, "Coordinate.Node", &arg, &resp) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) @@ -628,12 +603,13 @@ } } -func registerNodes(nodes []string, codec rpc.ClientCodec) error { +func registerNodes(nodes []string, codec rpc.ClientCodec, token string) error { for _, node := range nodes { req := structs.RegisterRequest{ - Datacenter: "dc1", - Node: node, - Address: "127.0.0.1", + Datacenter: "dc1", + Node: node, + Address: "127.0.0.1", + WriteRequest: structs.WriteRequest{Token: token}, } var reply struct{} if err := msgpackrpc.CallWithCodec(codec, "Catalog.Register", &req, &reply); err != nil { diff -Nru consul-1.7.4+dfsg1/agent/consul/discovery_chain_endpoint.go consul-1.8.7+dfsg1/agent/consul/discovery_chain_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/discovery_chain_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/discovery_chain_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,7 @@ return ErrConnectNotEnabled } - if done, err := c.srv.forward("DiscoveryChain.Get", args, args, reply); done { + if done, err := c.srv.ForwardRPC("DiscoveryChain.Get", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"discovery_chain", "get"}, time.Now()) diff -Nru consul-1.7.4+dfsg1/agent/consul/discovery_chain_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/discovery_chain_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/discovery_chain_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/discovery_chain_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,8 +29,8 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s1.RPC, "dc1") + waitForLeaderEstablishment(t, s1) + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) denyToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", "") require.NoError(t, err) diff -Nru consul-1.7.4+dfsg1/agent/consul/enterprise_server_oss.go consul-1.8.7+dfsg1/agent/consul/enterprise_server_oss.go --- consul-1.7.4+dfsg1/agent/consul/enterprise_server_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/enterprise_server_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -35,6 +35,10 @@ return false } +func (s *Server) handleEnterpriseNativeTLSConn(alpnProto string, conn net.Conn) bool { + return false +} + func (s *Server) handleEnterpriseLeave() { return } diff -Nru consul-1.7.4+dfsg1/agent/consul/federation_state_endpoint.go consul-1.8.7+dfsg1/agent/consul/federation_state_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/federation_state_endpoint.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/federation_state_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,201 @@ +package consul + +import ( + "errors" + "fmt" + "time" + + metrics "github.com/armon/go-metrics" + "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + memdb "github.com/hashicorp/go-memdb" +) + +var ( + errFederationStatesNotEnabled = errors.New("Federation states are currently disabled until all servers in the datacenter support the feature") +) + +// FederationState endpoint is used to manipulate federation states from all +// datacenters. +type FederationState struct { + srv *Server +} + +func (c *FederationState) Apply(args *structs.FederationStateRequest, reply *bool) error { + // Ensure that all federation state writes go to the primary datacenter. These will then + // be replicated to all the other datacenters. + args.Datacenter = c.srv.config.PrimaryDatacenter + + if done, err := c.srv.ForwardRPC("FederationState.Apply", args, args, reply); done { + return err + } + + if !c.srv.DatacenterSupportsFederationStates() { + return errFederationStatesNotEnabled + } + + defer metrics.MeasureSince([]string{"federation_state", "apply"}, time.Now()) + + // Fetch the ACL token, if any. + rule, err := c.srv.ResolveToken(args.Token) + if err != nil { + return err + } + if rule != nil && rule.OperatorWrite(nil) != acl.Allow { + return acl.ErrPermissionDenied + } + + if args.State == nil || args.State.Datacenter == "" { + return fmt.Errorf("invalid request: missing federation state datacenter") + } + + switch args.Op { + case structs.FederationStateUpsert: + if args.State.UpdatedAt.IsZero() { + args.State.UpdatedAt = time.Now().UTC() + } + case structs.FederationStateDelete: + // No validation required. + default: + return fmt.Errorf("Invalid federation state operation: %v", args.Op) + } + + resp, err := c.srv.raftApply(structs.FederationStateRequestType, args) + if err != nil { + return err + } + if respErr, ok := resp.(error); ok { + return respErr + } + if respBool, ok := resp.(bool); ok { + *reply = respBool + } + + return nil +} + +func (c *FederationState) Get(args *structs.FederationStateQuery, reply *structs.FederationStateResponse) error { + if done, err := c.srv.ForwardRPC("FederationState.Get", args, args, reply); done { + return err + } + + if !c.srv.DatacenterSupportsFederationStates() { + return errFederationStatesNotEnabled + } + + defer metrics.MeasureSince([]string{"federation_state", "get"}, time.Now()) + + // Fetch the ACL token, if any. + rule, err := c.srv.ResolveToken(args.Token) + if err != nil { + return err + } + if rule != nil && rule.OperatorRead(nil) != acl.Allow { + return acl.ErrPermissionDenied + } + + return c.srv.blockingQuery( + &args.QueryOptions, + &reply.QueryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + index, fedState, err := state.FederationStateGet(ws, args.Datacenter) + if err != nil { + return err + } + + reply.Index = index + if fedState == nil { + return nil + } + + reply.State = fedState + return nil + }) +} + +// List is the endpoint meant to be used by consul servers performing +// replication. +func (c *FederationState) List(args *structs.DCSpecificRequest, reply *structs.IndexedFederationStates) error { + if done, err := c.srv.ForwardRPC("FederationState.List", args, args, reply); done { + return err + } + + if !c.srv.DatacenterSupportsFederationStates() { + return errFederationStatesNotEnabled + } + + defer metrics.MeasureSince([]string{"federation_state", "list"}, time.Now()) + + // Fetch the ACL token, if any. + rule, err := c.srv.ResolveToken(args.Token) + if err != nil { + return err + } + if rule != nil && rule.OperatorRead(nil) != acl.Allow { + return acl.ErrPermissionDenied + } + + return c.srv.blockingQuery( + &args.QueryOptions, + &reply.QueryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + index, fedStates, err := state.FederationStateList(ws) + if err != nil { + return err + } + + if len(fedStates) == 0 { + fedStates = []*structs.FederationState{} + } + + reply.Index = index + reply.States = fedStates + + return nil + }) +} + +// ListMeshGateways is the endpoint meant to be used by proxies only interested +// in the discovery info for dialing mesh gateways. Analogous to catalog +// endpoints. +func (c *FederationState) ListMeshGateways(args *structs.DCSpecificRequest, reply *structs.DatacenterIndexedCheckServiceNodes) error { + if done, err := c.srv.ForwardRPC("FederationState.ListMeshGateways", args, args, reply); done { + return err + } + + if !c.srv.DatacenterSupportsFederationStates() { + return errFederationStatesNotEnabled + } + + defer metrics.MeasureSince([]string{"federation_state", "list_mesh_gateways"}, time.Now()) + + return c.srv.blockingQuery( + &args.QueryOptions, + &reply.QueryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + index, fedStates, err := state.FederationStateList(ws) + if err != nil { + return err + } + + dump := make(map[string]structs.CheckServiceNodes) + + for i, _ := range fedStates { + fedState := fedStates[i] + csn := fedState.MeshGateways + if len(csn) > 0 { + // We shallow clone this slice so that the filterACL doesn't + // end up manipulating the slice in memdb. + dump[fedState.Datacenter] = csn.ShallowClone() + } + } + + reply.Index, reply.DatacenterNodes = index, dump + if err := c.srv.filterACL(args.Token, reply); err != nil { + return err + } + + return nil + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/federation_state_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/federation_state_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/federation_state_endpoint_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/federation_state_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,821 @@ +package consul + +import ( + "net/rpc" + "os" + "testing" + "time" + + "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/consul/types" + uuid "github.com/hashicorp/go-uuid" + msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" + "github.com/stretchr/testify/require" +) + +func TestFederationState_Apply_Upsert(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + codec2 := rpcClient(t, s2) + defer codec2.Close() + + testrpc.WaitForLeader(t, s2.RPC, "dc2") + joinWAN(t, s2, s1) + // wait for cross-dc queries to work + testrpc.WaitForLeader(t, s2.RPC, "dc1") + + // update the primary with data from a secondary by way of request forwarding + fedState := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + federationStateUpsert(t, codec2, "", fedState) + + // the previous RPC should not return until the primary has been updated but will return + // before the secondary has the data. + state := s1.fsm.State() + _, fedState2, err := state.FederationStateGet(nil, "dc1") + require.NoError(t, err) + require.NotNil(t, fedState2) + zeroFedStateIndexes(t, fedState2) + require.Equal(t, fedState, fedState2) + + retry.Run(t, func(r *retry.R) { + // wait for replication to happen + state := s2.fsm.State() + _, fedState2Again, err := state.FederationStateGet(nil, "dc1") + require.NoError(r, err) + require.NotNil(r, fedState2Again) + + // this test is not testing that the federation states that are + // replicated are correct as that's done elsewhere. + }) + + updated := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway3", "9.9.9.9", 7777, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + federationStateUpsert(t, codec2, "", updated) + + state = s1.fsm.State() + _, fedState2, err = state.FederationStateGet(nil, "dc1") + require.NoError(t, err) + require.NotNil(t, fedState2) + zeroFedStateIndexes(t, fedState2) + require.Equal(t, updated, fedState2) +} + +func TestFederationState_Apply_Upsert_ACLDeny(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) + + codec := rpcClient(t, s1) + defer codec.Close() + + // Create the ACL tokens + opReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", `operator = "read"`) + require.NoError(t, err) + + opWriteToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", `operator = "write"`) + require.NoError(t, err) + + expected := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + + { // This should fail since we don't have write perms. + args := structs.FederationStateRequest{ + Datacenter: "dc1", + Op: structs.FederationStateUpsert, + State: expected, + WriteRequest: structs.WriteRequest{Token: opReadToken.SecretID}, + } + out := false + err := msgpackrpc.CallWithCodec(codec, "FederationState.Apply", &args, &out) + if !acl.IsErrPermissionDenied(err) { + t.Fatalf("err: %v", err) + } + } + + { // This should work. + args := structs.FederationStateRequest{ + Datacenter: "dc1", + Op: structs.FederationStateUpsert, + State: expected, + WriteRequest: structs.WriteRequest{Token: opWriteToken.SecretID}, + } + out := false + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.Apply", &args, &out)) + } + + // the previous RPC should not return until the primary has been updated but will return + // before the secondary has the data. + state := s1.fsm.State() + _, got, err := state.FederationStateGet(nil, "dc1") + require.NoError(t, err) + require.NotNil(t, got) + zeroFedStateIndexes(t, got) + require.Equal(t, expected, got) +} + +func TestFederationState_Get(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + + codec := rpcClient(t, s1) + defer codec.Close() + + expected := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + federationStateUpsert(t, codec, "", expected) + + args := structs.FederationStateQuery{ + Datacenter: "dc1", + TargetDatacenter: "dc1", + } + var out structs.FederationStateResponse + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.Get", &args, &out)) + + zeroFedStateIndexes(t, out.State) + require.Equal(t, expected, out.State) +} + +func TestFederationState_Get_ACLDeny(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) + + codec := rpcClient(t, s1) + defer codec.Close() + + // Create the ACL tokens + nadaToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + service "foo" { policy = "write" }`) + require.NoError(t, err) + + opReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + operator = "read"`) + require.NoError(t, err) + + // create some dummy stuff to look up + expected := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + federationStateUpsert(t, codec, "root", expected) + + { // This should fail + args := structs.FederationStateQuery{ + Datacenter: "dc1", + TargetDatacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: nadaToken.SecretID}, + } + var out structs.FederationStateResponse + err := msgpackrpc.CallWithCodec(codec, "FederationState.Get", &args, &out) + if !acl.IsErrPermissionDenied(err) { + t.Fatalf("err: %v", err) + } + } + + { // This should work + args := structs.FederationStateQuery{ + Datacenter: "dc1", + TargetDatacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: opReadToken.SecretID}, + } + var out structs.FederationStateResponse + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.Get", &args, &out)) + + zeroFedStateIndexes(t, out.State) + require.Equal(t, expected, out.State) + } +} + +func TestFederationState_List(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + codec2 := rpcClient(t, s2) + defer codec2.Close() + + testrpc.WaitForLeader(t, s2.RPC, "dc2") + joinWAN(t, s2, s1) + // wait for cross-dc queries to work + testrpc.WaitForLeader(t, s2.RPC, "dc1") + + // create some dummy data + expected := structs.IndexedFederationStates{ + States: []*structs.FederationState{ + { + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + }, + { + Datacenter: "dc2", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc2", "gateway1", "5.6.7.8", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc2", "gateway2", "8.7.6.5", 1111, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + }, + }, + } + federationStateUpsert(t, codec, "", expected.States[0]) + federationStateUpsert(t, codec, "", expected.States[1]) + + // we'll also test the other list endpoint at the same time since the setup is nearly the same + expectedMeshGateways := structs.DatacenterIndexedCheckServiceNodes{ + DatacenterNodes: map[string]structs.CheckServiceNodes{ + "dc1": expected.States[0].MeshGateways, + "dc2": expected.States[1].MeshGateways, + }, + } + + t.Run("List", func(t *testing.T) { + args := structs.DCSpecificRequest{ + Datacenter: "dc1", + } + var out structs.IndexedFederationStates + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.List", &args, &out)) + + for i, _ := range out.States { + zeroFedStateIndexes(t, out.States[i]) + } + + require.Equal(t, expected.States, out.States) + }) + t.Run("ListMeshGateways", func(t *testing.T) { + args := structs.DCSpecificRequest{ + Datacenter: "dc1", + } + var out structs.DatacenterIndexedCheckServiceNodes + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.ListMeshGateways", &args, &out)) + + require.Equal(t, expectedMeshGateways.DatacenterNodes, out.DatacenterNodes) + }) +} + +func TestFederationState_List_ACLDeny(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + codec2 := rpcClient(t, s2) + defer codec2.Close() + + testrpc.WaitForLeader(t, s2.RPC, "dc2") + joinWAN(t, s2, s1) + // wait for cross-dc queries to work + testrpc.WaitForLeader(t, s2.RPC, "dc1") + + // Create the ACL tokens + nadaToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` `) + require.NoError(t, err) + + opReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + operator = "read"`) + require.NoError(t, err) + + svcReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + service_prefix "" { policy = "read" }`) + require.NoError(t, err) + + nodeReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + node_prefix "" { policy = "read" }`) + require.NoError(t, err) + + svcAndNodeReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + service_prefix "" { policy = "read" } + node_prefix "" { policy = "read" }`) + require.NoError(t, err) + + // create some dummy data + expected := structs.IndexedFederationStates{ + States: []*structs.FederationState{ + { + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + }, + { + Datacenter: "dc2", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc2", "gateway1", "5.6.7.8", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc2", "gateway2", "8.7.6.5", 1111, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + }, + }, + } + federationStateUpsert(t, codec, "root", expected.States[0]) + federationStateUpsert(t, codec, "root", expected.States[1]) + + // we'll also test the other list endpoint at the same time since the setup is nearly the same + expectedMeshGateways := structs.DatacenterIndexedCheckServiceNodes{ + DatacenterNodes: map[string]structs.CheckServiceNodes{ + "dc1": expected.States[0].MeshGateways, + "dc2": expected.States[1].MeshGateways, + }, + } + + type tcase struct { + token string + + listDenied bool + listEmpty bool + gwListEmpty bool + } + + cases := map[string]tcase{ + "no token": tcase{ + token: "", + listDenied: true, + gwListEmpty: true, + }, + "no perms": tcase{ + token: nadaToken.SecretID, + listDenied: true, + gwListEmpty: true, + }, + "service:read": tcase{ + token: svcReadToken.SecretID, + listDenied: true, + gwListEmpty: true, + }, + "node:read": tcase{ + token: nodeReadToken.SecretID, + listDenied: true, + gwListEmpty: true, + }, + "service:read and node:read": tcase{ + token: svcAndNodeReadToken.SecretID, + listDenied: true, + }, + "operator:read": tcase{ + token: opReadToken.SecretID, + gwListEmpty: true, + }, + "master token": tcase{ + token: "root", + }, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + t.Run("List", func(t *testing.T) { + args := structs.DCSpecificRequest{ + Datacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: tc.token}, + } + var out structs.IndexedFederationStates + err := msgpackrpc.CallWithCodec(codec, "FederationState.List", &args, &out) + + if tc.listDenied { + if !acl.IsErrPermissionDenied(err) { + t.Fatalf("err: %v", err) + } + } else if tc.listEmpty { + require.NoError(t, err) + require.Len(t, out.States, 0) + } else { + require.NoError(t, err) + + for i, _ := range out.States { + zeroFedStateIndexes(t, out.States[i]) + } + + require.Equal(t, expected.States, out.States) + } + }) + + t.Run("ListMeshGateways", func(t *testing.T) { + args := structs.DCSpecificRequest{ + Datacenter: "dc1", + QueryOptions: structs.QueryOptions{Token: tc.token}, + } + var out structs.DatacenterIndexedCheckServiceNodes + err := msgpackrpc.CallWithCodec(codec, "FederationState.ListMeshGateways", &args, &out) + + if tc.gwListEmpty { + require.NoError(t, err) + require.Len(t, out.DatacenterNodes, 0) + } else { + require.NoError(t, err) + require.Equal(t, expectedMeshGateways.DatacenterNodes, out.DatacenterNodes) + } + }) + }) + } +} + +func TestFederationState_Apply_Delete(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + codec2 := rpcClient(t, s2) + defer codec2.Close() + + testrpc.WaitForLeader(t, s2.RPC, "dc2") + joinWAN(t, s2, s1) + // wait for cross-dc queries to work + testrpc.WaitForLeader(t, s2.RPC, "dc1") + + // Create a dummy federation state in the state store to look up. + fedState := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + federationStateUpsert(t, codec, "", fedState) + + // Verify it's there + state := s1.fsm.State() + _, existing, err := state.FederationStateGet(nil, "dc1") + require.NoError(t, err) + zeroFedStateIndexes(t, existing) + require.Equal(t, fedState, existing) + + retry.Run(t, func(r *retry.R) { + // wait for it to be replicated into the secondary dc + state := s2.fsm.State() + _, fedState2Again, err := state.FederationStateGet(nil, "dc1") + require.NoError(r, err) + require.NotNil(r, fedState2Again) + }) + + // send the delete request to dc2 - it should get forwarded to dc1. + args := structs.FederationStateRequest{ + Op: structs.FederationStateDelete, + State: fedState, + } + out := false + require.NoError(t, msgpackrpc.CallWithCodec(codec2, "FederationState.Apply", &args, &out)) + + // Verify the entry was deleted. + _, existing, err = s1.fsm.State().FederationStateGet(nil, "dc1") + require.NoError(t, err) + require.Nil(t, existing) + + // verify it gets deleted from the secondary too + retry.Run(t, func(r *retry.R) { + _, existing, err := s2.fsm.State().FederationStateGet(nil, "dc1") + require.NoError(r, err) + require.Nil(r, existing) + }) +} + +func TestFederationState_Apply_Delete_ACLDeny(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.DisableFederationStateAntiEntropy = true + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + codec := rpcClient(t, s1) + defer codec.Close() + + // Create the ACL tokens + opReadToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` +operator = "read"`) + require.NoError(t, err) + + opWriteToken, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` +operator = "write"`) + require.NoError(t, err) + + // Create a dummy federation state in the state store to look up. + fedState := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + federationStateUpsert(t, codec, "root", fedState) + + { // This should not work + args := structs.FederationStateRequest{ + Op: structs.FederationStateDelete, + State: fedState, + WriteRequest: structs.WriteRequest{Token: opReadToken.SecretID}, + } + out := false + err := msgpackrpc.CallWithCodec(codec, "FederationState.Apply", &args, &out) + if !acl.IsErrPermissionDenied(err) { + t.Fatalf("err: %v", err) + } + } + + { // This should work + args := structs.FederationStateRequest{ + Op: structs.FederationStateDelete, + State: fedState, + WriteRequest: structs.WriteRequest{Token: opWriteToken.SecretID}, + } + out := false + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.Apply", &args, &out)) + } + + // Verify the entry was deleted. + state := s1.fsm.State() + _, existing, err := state.FederationStateGet(nil, "dc1") + require.NoError(t, err) + require.Nil(t, existing) +} + +func newTestGatewayList( + ip1 string, port1 int, meta1 map[string]string, + ip2 string, port2 int, meta2 map[string]string, +) structs.CheckServiceNodes { + return []structs.CheckServiceNode{ + { + Node: &structs.Node{ + ID: "664bac9f-4de7-4f1b-ad35-0e5365e8f329", + Node: "gateway1", + Datacenter: "dc1", + Address: ip1, + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Port: port1, + Meta: meta1, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + { + Node: &structs.Node{ + ID: "3fb9a696-8209-4eee-a1f7-48600deb9716", + Node: "gateway2", + Datacenter: "dc1", + Address: ip2, + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Port: port2, + Meta: meta2, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + } +} + +func newTestMeshGatewayNode( + datacenter, node string, + ip string, + port int, + meta map[string]string, + healthStatus string, +) structs.CheckServiceNode { + id, err := uuid.GenerateUUID() + if err != nil { + panic(err) + } + + return structs.CheckServiceNode{ + Node: &structs.Node{ + ID: types.NodeID(id), + Node: node, + Datacenter: datacenter, + Address: ip, + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: port, + Meta: meta, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: healthStatus, + ServiceID: "mesh-gateway", + }, + }, + } +} + +func federationStateUpsert(t *testing.T, codec rpc.ClientCodec, token string, fedState *structs.FederationState) { + dup := *fedState + fedState2 := &dup + + args := structs.FederationStateRequest{ + Op: structs.FederationStateUpsert, + State: fedState2, + WriteRequest: structs.WriteRequest{Token: token}, + } + out := false + require.NoError(t, msgpackrpc.CallWithCodec(codec, "FederationState.Apply", &args, &out)) + require.True(t, out) +} + +func zeroFedStateIndexes(t *testing.T, fedState *structs.FederationState) { + require.NotNil(t, fedState) + require.True(t, fedState.PrimaryModifyIndex > 0, "this should be set") + fedState.PrimaryModifyIndex = 0 // zero out so the equality works + fedState.RaftIndex = structs.RaftIndex{} // zero these out so the equality works +} diff -Nru consul-1.7.4+dfsg1/agent/consul/federation_state_replication.go consul-1.8.7+dfsg1/agent/consul/federation_state_replication.go --- consul-1.7.4+dfsg1/agent/consul/federation_state_replication.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/federation_state_replication.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,222 @@ +package consul + +import ( + "context" + "errors" + "fmt" + "sort" + "time" + + "github.com/hashicorp/consul/agent/structs" +) + +var errFederationStatesNotSupported = errors.New("Not all servers in the datacenter support federation states - preventing replication") + +func isErrFederationStatesNotSupported(err error) bool { + return errors.Is(err, errFederationStatesNotSupported) +} + +type FederationStateReplicator struct { + srv *Server + gatewayLocator *GatewayLocator +} + +var _ IndexReplicatorDelegate = (*FederationStateReplicator)(nil) + +// SingularNoun implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) SingularNoun() string { return "federation state" } + +// PluralNoun implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) PluralNoun() string { return "federation states" } + +// MetricName implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) MetricName() string { return "federation-state" } + +// FetchRemote implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) FetchRemote(lastRemoteIndex uint64) (int, interface{}, uint64, error) { + if !r.srv.DatacenterSupportsFederationStates() { + return 0, nil, 0, errFederationStatesNotSupported + } + lenRemote, remote, remoteIndex, err := r.fetchRemote(lastRemoteIndex) + if r.gatewayLocator != nil { + r.gatewayLocator.SetLastFederationStateReplicationError(err) + } + return lenRemote, remote, remoteIndex, err +} + +func (r *FederationStateReplicator) fetchRemote(lastRemoteIndex uint64) (int, interface{}, uint64, error) { + req := structs.DCSpecificRequest{ + Datacenter: r.srv.config.PrimaryDatacenter, + QueryOptions: structs.QueryOptions{ + AllowStale: true, + MinQueryIndex: lastRemoteIndex, + Token: r.srv.tokens.ReplicationToken(), + }, + } + + var response structs.IndexedFederationStates + if err := r.srv.RPC("FederationState.List", &req, &response); err != nil { + return 0, nil, 0, err + } + + states := []*structs.FederationState(response.States) + + return len(response.States), states, response.QueryMeta.Index, nil +} + +// FetchLocal implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) FetchLocal() (int, interface{}, error) { + _, local, err := r.srv.fsm.State().FederationStateList(nil) + if err != nil { + return 0, nil, err + } + + return len(local), local, nil +} + +// DiffRemoteAndLocalState implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) DiffRemoteAndLocalState(localRaw interface{}, remoteRaw interface{}, lastRemoteIndex uint64) (*IndexReplicatorDiff, error) { + local, ok := localRaw.([]*structs.FederationState) + if !ok { + return nil, fmt.Errorf("invalid type for local federation states: %T", localRaw) + } + remote, ok := remoteRaw.([]*structs.FederationState) + if !ok { + return nil, fmt.Errorf("invalid type for remote federation states: %T", remoteRaw) + } + federationStateSort(local) + federationStateSort(remote) + + var deletions []*structs.FederationState + var updates []*structs.FederationState + var localIdx int + var remoteIdx int + for localIdx, remoteIdx = 0, 0; localIdx < len(local) && remoteIdx < len(remote); { + if local[localIdx].Datacenter == remote[remoteIdx].Datacenter { + // fedState is in both the local and remote state - need to check raft indices + if remote[remoteIdx].ModifyIndex > lastRemoteIndex { + updates = append(updates, remote[remoteIdx]) + } + // increment both indices when equal + localIdx += 1 + remoteIdx += 1 + } else if local[localIdx].Datacenter < remote[remoteIdx].Datacenter { + // fedState no longer in remoted state - needs deleting + deletions = append(deletions, local[localIdx]) + + // increment just the local index + localIdx += 1 + } else { + // local state doesn't have this fedState - needs updating + updates = append(updates, remote[remoteIdx]) + + // increment just the remote index + remoteIdx += 1 + } + } + + for ; localIdx < len(local); localIdx += 1 { + deletions = append(deletions, local[localIdx]) + } + + for ; remoteIdx < len(remote); remoteIdx += 1 { + updates = append(updates, remote[remoteIdx]) + } + + return &IndexReplicatorDiff{ + NumDeletions: len(deletions), + Deletions: deletions, + NumUpdates: len(updates), + Updates: updates, + }, nil +} + +func federationStateSort(states []*structs.FederationState) { + sort.Slice(states, func(i, j int) bool { + return states[i].Datacenter < states[j].Datacenter + }) +} + +// PerformDeletions implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) PerformDeletions(ctx context.Context, deletionsRaw interface{}) (exit bool, err error) { + deletions, ok := deletionsRaw.([]*structs.FederationState) + if !ok { + return false, fmt.Errorf("invalid type for federation states deletions list: %T", deletionsRaw) + } + + ticker := time.NewTicker(time.Second / time.Duration(r.srv.config.FederationStateReplicationApplyLimit)) + defer ticker.Stop() + + for i, state := range deletions { + req := structs.FederationStateRequest{ + Op: structs.FederationStateDelete, + Datacenter: r.srv.config.Datacenter, + State: state, + } + + resp, err := r.srv.raftApply(structs.FederationStateRequestType, &req) + if err != nil { + return false, err + } + + if respErr, ok := resp.(error); ok { + return false, respErr + } + + if i < len(deletions)-1 { + select { + case <-ctx.Done(): + return true, nil + case <-ticker.C: + // do nothing - ready for the next batch + } + } + } + + return false, nil +} + +// PerformUpdates implements IndexReplicatorDelegate. +func (r *FederationStateReplicator) PerformUpdates(ctx context.Context, updatesRaw interface{}) (exit bool, err error) { + updates, ok := updatesRaw.([]*structs.FederationState) + if !ok { + return false, fmt.Errorf("invalid type for federation states update list: %T", updatesRaw) + } + + ticker := time.NewTicker(time.Second / time.Duration(r.srv.config.FederationStateReplicationApplyLimit)) + defer ticker.Stop() + + for i, state := range updates { + dup := *state // lightweight copy + state2 := &dup + + // Keep track of the raft modify index at the primary + state2.PrimaryModifyIndex = state.ModifyIndex + + req := structs.FederationStateRequest{ + Op: structs.FederationStateUpsert, + Datacenter: r.srv.config.Datacenter, + State: state2, + } + + resp, err := r.srv.raftApply(structs.FederationStateRequestType, &req) + if err != nil { + return false, err + } + + if respErr, ok := resp.(error); ok { + return false, respErr + } + + if i < len(updates)-1 { + select { + case <-ctx.Done(): + return true, nil + case <-ticker.C: + // do nothing - ready for the next batch + } + } + } + + return false, nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/federation_state_replication_test.go consul-1.8.7+dfsg1/agent/consul/federation_state_replication_test.go --- consul-1.7.4+dfsg1/agent/consul/federation_state_replication_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/federation_state_replication_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,150 @@ +package consul + +import ( + "fmt" + "os" + "testing" + "time" + + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/hashicorp/consul/testrpc" + "github.com/stretchr/testify/require" +) + +func TestReplication_FederationStates(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.PrimaryDatacenter = "dc1" + c.DisableFederationStateAntiEntropy = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + testrpc.WaitForLeader(t, s1.RPC, "dc1") + client := rpcClient(t, s1) + defer client.Close() + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.FederationStateReplicationRate = 100 + c.FederationStateReplicationBurst = 100 + c.FederationStateReplicationApplyLimit = 1000000 + c.DisableFederationStateAntiEntropy = true + }) + testrpc.WaitForLeader(t, s2.RPC, "dc2") + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Try to join. + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + // Create some new federation states (weird because we're having dc1 update it for the other 50) + var fedStateDCs []string + for i := 0; i < 50; i++ { + dc := fmt.Sprintf("alt-dc%d", i+1) + ip1 := fmt.Sprintf("1.2.3.%d", i+1) + ip2 := fmt.Sprintf("4.3.2.%d", i+1) + arg := structs.FederationStateRequest{ + Datacenter: "dc1", + Op: structs.FederationStateUpsert, + State: &structs.FederationState{ + Datacenter: dc, + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + dc, "gateway1", ip1, 443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + dc, "gateway2", ip2, 443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + }, + } + + out := false + require.NoError(t, s1.RPC("FederationState.Apply", &arg, &out)) + fedStateDCs = append(fedStateDCs, dc) + } + + checkSame := func(t *retry.R) error { + _, remote, err := s1.fsm.State().FederationStateList(nil) + require.NoError(t, err) + _, local, err := s2.fsm.State().FederationStateList(nil) + require.NoError(t, err) + + require.Len(t, local, len(remote)) + for i := range remote { + // Make lightweight copies so we can zero out the raft fields + // without mutating the copies in memdb. + remoteCopy := *remote[i] + localCopy := *local[i] + // zero out the raft data for future comparisons + remoteCopy.RaftIndex = structs.RaftIndex{} + localCopy.RaftIndex = structs.RaftIndex{} + require.Equal(t, remoteCopy, localCopy) + } + return nil + } + + // Wait for the replica to converge. + retry.Run(t, func(r *retry.R) { + checkSame(r) + }) + + // Update those states + for i := 0; i < 50; i++ { + dc := fmt.Sprintf("alt-dc%d", i+1) + ip1 := fmt.Sprintf("1.2.3.%d", i+1) + ip2 := fmt.Sprintf("4.3.2.%d", i+1) + ip3 := fmt.Sprintf("5.8.9.%d", i+1) + arg := structs.FederationStateRequest{ + Datacenter: "dc1", + Op: structs.FederationStateUpsert, + State: &structs.FederationState{ + Datacenter: dc, + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + dc, "gateway1", ip1, 8443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + dc, "gateway2", ip2, 8443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + dc, "gateway3", ip3, 8443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + }, + } + + out := false + require.NoError(t, s1.RPC("FederationState.Apply", &arg, &out)) + } + + // Wait for the replica to converge. + retry.Run(t, func(r *retry.R) { + checkSame(r) + }) + + for _, fedStateDC := range fedStateDCs { + arg := structs.FederationStateRequest{ + Datacenter: "dc1", + Op: structs.FederationStateDelete, + State: &structs.FederationState{ + Datacenter: fedStateDC, + }, + } + + out := false + require.NoError(t, s1.RPC("FederationState.Apply", &arg, &out)) + } + + // Wait for the replica to converge. + retry.Run(t, func(r *retry.R) { + checkSame(r) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/fsm/commands_oss.go consul-1.8.7+dfsg1/agent/consul/fsm/commands_oss.go --- consul-1.7.4+dfsg1/agent/consul/fsm/commands_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/fsm/commands_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,6 +5,7 @@ "time" metrics "github.com/armon/go-metrics" + "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" ) @@ -36,6 +37,7 @@ registerCommand(structs.ACLBindingRuleDeleteRequestType, (*FSM).applyACLBindingRuleDeleteOperation) registerCommand(structs.ACLAuthMethodSetRequestType, (*FSM).applyACLAuthMethodSetOperation) registerCommand(structs.ACLAuthMethodDeleteRequestType, (*FSM).applyACLAuthMethodDeleteOperation) + registerCommand(structs.FederationStateRequestType, (*FSM).applyFederationStateOperation) } func (c *FSM) applyRegister(buf []byte, index uint64) interface{} { @@ -398,7 +400,14 @@ defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "token"}, time.Now(), []metrics.Label{{Name: "op", Value: "upsert"}}) - return c.state.ACLTokenBatchSet(index, req.Tokens, req.CAS, req.AllowMissingLinks, req.ProhibitUnprivileged) + opts := state.ACLTokenSetOptions{ + CAS: req.CAS, + AllowMissingPolicyAndRoleIDs: req.AllowMissingLinks, + ProhibitUnprivileged: req.ProhibitUnprivileged, + Legacy: false, + FromReplication: req.FromReplication, + } + return c.state.ACLTokenBatchSet(index, req.Tokens, opts) } func (c *FSM) applyACLTokenDeleteOperation(buf []byte, index uint64) interface{} { @@ -542,3 +551,26 @@ return c.state.ACLAuthMethodBatchDelete(index, req.AuthMethodNames, &req.EnterpriseMeta) } + +func (c *FSM) applyFederationStateOperation(buf []byte, index uint64) interface{} { + var req structs.FederationStateRequest + if err := structs.Decode(buf, &req); err != nil { + panic(fmt.Errorf("failed to decode request: %v", err)) + } + + switch req.Op { + case structs.FederationStateUpsert: + defer metrics.MeasureSinceWithLabels([]string{"fsm", "federation_state", req.State.Datacenter}, time.Now(), + []metrics.Label{{Name: "op", Value: "upsert"}}) + if err := c.state.FederationStateSet(index, req.State); err != nil { + return err + } + return true + case structs.FederationStateDelete: + defer metrics.MeasureSinceWithLabels([]string{"fsm", "federation_state", req.State.Datacenter}, time.Now(), + []metrics.Label{{Name: "op", Value: "delete"}}) + return c.state.FederationStateDelete(index, req.State.Datacenter) + default: + return fmt.Errorf("invalid federation state operation type: %v", req.Op) + } +} diff -Nru consul-1.7.4+dfsg1/agent/consul/fsm/commands_oss_test.go consul-1.8.7+dfsg1/agent/consul/fsm/commands_oss_test.go --- consul-1.7.4+dfsg1/agent/consul/fsm/commands_oss_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/fsm/commands_oss_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1487,7 +1487,6 @@ require.NoError(err) var logOfLogs [][]*raft.Log - var bufs [][]byte for i := 0; i < 10; i++ { req := structs.RegisterRequest{ Datacenter: "dc1", @@ -1527,7 +1526,6 @@ Extensions: chunkBytes, }) } - bufs = append(bufs, buf) logOfLogs = append(logOfLogs, logs) } diff -Nru consul-1.7.4+dfsg1/agent/consul/fsm/snapshot_oss.go consul-1.8.7+dfsg1/agent/consul/fsm/snapshot_oss.go --- consul-1.7.4+dfsg1/agent/consul/fsm/snapshot_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/fsm/snapshot_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,6 +31,7 @@ registerRestorer(structs.ACLRoleSetRequestType, restoreRole) registerRestorer(structs.ACLBindingRuleSetRequestType, restoreBindingRule) registerRestorer(structs.ACLAuthMethodSetRequestType, restoreAuthMethod) + registerRestorer(structs.FederationStateRequestType, restoreFederationState) } func persistOSS(s *snapshot, sink raft.SnapshotSink, encoder *codec.Encoder) error { @@ -70,6 +71,9 @@ if err := s.persistConfigEntries(sink, encoder); err != nil { return err } + if err := s.persistFederationStates(sink, encoder); err != nil { + return err + } if err := s.persistIndex(sink, encoder); err != nil { return err } @@ -95,6 +99,7 @@ Address: n.Address, TaggedAddresses: n.TaggedAddresses, NodeMeta: n.Meta, + RaftIndex: n.RaftIndex, } // Register the node itself @@ -435,6 +440,30 @@ return nil } +func (s *snapshot) persistFederationStates(sink raft.SnapshotSink, encoder *codec.Encoder) error { + fedStates, err := s.state.FederationStates() + if err != nil { + return err + } + + for _, fedState := range fedStates { + if _, err := sink.Write([]byte{byte(structs.FederationStateRequestType)}); err != nil { + return err + } + // Encode the entry request without an operation since we don't need it for restoring. + // The request is used for its custom decoding/encoding logic around the ConfigEntry + // interface. + req := &structs.FederationStateRequest{ + Op: structs.FederationStateUpsert, + State: fedState, + } + if err := encoder.Encode(req); err != nil { + return err + } + } + return nil +} + func (s *snapshot) persistIndex(sink raft.SnapshotSink, encoder *codec.Encoder) error { // Get all the indexes iter, err := s.state.Indexes() @@ -675,3 +704,11 @@ } return restore.ACLAuthMethod(&req) } + +func restoreFederationState(header *snapshotHeader, restore *state.Restore, decoder *codec.Decoder) error { + var req structs.FederationStateRequest + if err := decoder.Decode(&req); err != nil { + return err + } + return restore.FederationState(req.State) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/fsm/snapshot_oss_test.go consul-1.8.7+dfsg1/agent/consul/fsm/snapshot_oss_test.go --- consul-1.7.4+dfsg1/agent/consul/fsm/snapshot_oss_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/fsm/snapshot_oss_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,6 @@ import ( "bytes" - "reflect" "testing" "time" @@ -12,23 +11,19 @@ "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/stringslice" "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/go-msgpack/codec" "github.com/hashicorp/go-raftchunking" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestFSM_SnapshotRestore_OSS(t *testing.T) { t.Parallel() - assert := assert.New(t) - require := require.New(t) logger := testutil.Logger(t) fsm, err := New(nil, logger) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) // Add some state node1 := &structs.Node{ @@ -49,8 +44,8 @@ "testMeta": "testing123", }, } - require.NoError(fsm.state.EnsureNode(1, node1)) - require.NoError(fsm.state.EnsureNode(2, node2)) + require.NoError(t, fsm.state.EnsureNode(1, node1)) + require.NoError(t, fsm.state.EnsureNode(2, node2)) // Add a service instance with Connect config. connectConf := structs.ServiceConnect{ @@ -89,7 +84,7 @@ Syntax: acl.SyntaxCurrent, } policy.SetHash(true) - require.NoError(fsm.state.ACLPolicySet(1, policy)) + require.NoError(t, fsm.state.ACLPolicySet(1, policy)) role := &structs.ACLRole{ ID: "86dedd19-8fae-4594-8294-4e6948a81f9a", @@ -102,7 +97,7 @@ }, } role.SetHash(true) - require.NoError(fsm.state.ACLRoleSet(1, role)) + require.NoError(t, fsm.state.ACLRoleSet(1, role)) token := &structs.ACLToken{ AccessorID: "30fca056-9fbb-4455-b94a-bf0e2bc575d6", @@ -118,7 +113,7 @@ // DEPRECATED (ACL-Legacy-Compat) - This is used so that the bootstrap token is still visible via the v1 acl APIs Type: structs.ACLTokenTypeManagement, } - require.NoError(fsm.state.ACLBootstrap(10, 0, token, false)) + require.NoError(t, fsm.state.ACLBootstrap(10, 0, token, false)) method := &structs.ACLAuthMethod{ Name: "some-method", @@ -128,7 +123,7 @@ "SessionID": "952ebfa8-2a42-46f0-bcd3-fd98a842000e", }, } - require.NoError(fsm.state.ACLAuthMethodSet(1, method)) + require.NoError(t, fsm.state.ACLAuthMethodSet(1, method)) bindingRule := &structs.ACLBindingRule{ ID: "85184c52-5997-4a84-9817-5945f2632a17", @@ -138,7 +133,7 @@ BindType: structs.BindingRuleBindTypeService, BindName: "${serviceaccount.name}", } - require.NoError(fsm.state.ACLBindingRuleSet(1, bindingRule)) + require.NoError(t, fsm.state.ACLBindingRuleSet(1, bindingRule)) fsm.state.KVSSet(11, &structs.DirEntry{ Key: "/remove", @@ -146,12 +141,8 @@ }) fsm.state.KVSDelete(12, "/remove", nil) idx, _, err := fsm.state.KVSList(nil, "/remove", nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if idx != 12 { - t.Fatalf("bad index: %d", idx) - } + require.NoError(t, err) + require.EqualValues(t, 12, idx, "bad index") updates := structs.Coordinates{ &structs.Coordinate{ @@ -163,9 +154,7 @@ Coord: generateRandomCoordinate(), }, } - if err := fsm.state.CoordinateBatchUpdate(13, updates); err != nil { - t.Fatalf("err: %s", err) - } + require.NoError(t, fsm.state.CoordinateBatchUpdate(13, updates)) query := structs.PreparedQuery{ ID: generateUUID(), @@ -177,18 +166,14 @@ ModifyIndex: 14, }, } - if err := fsm.state.PreparedQuerySet(14, &query); err != nil { - t.Fatalf("err: %s", err) - } + require.NoError(t, fsm.state.PreparedQuerySet(14, &query)) autopilotConf := &autopilot.Config{ CleanupDeadServers: true, LastContactThreshold: 100 * time.Millisecond, MaxTrailingLogs: 222, } - if err := fsm.state.AutopilotSetConfig(15, autopilotConf); err != nil { - t.Fatalf("err: %s", err) - } + require.NoError(t, fsm.state.AutopilotSetConfig(15, autopilotConf)) // Intentions ixn := structs.TestIntention(t) @@ -197,7 +182,7 @@ CreateIndex: 14, ModifyIndex: 14, } - require.NoError(fsm.state.IntentionSet(14, ixn)) + require.NoError(t, fsm.state.IntentionSet(14, ixn)) // CA Roots roots := []*structs.CARoot{ @@ -208,16 +193,16 @@ r.Active = false } ok, err := fsm.state.CARootSetCAS(15, 0, roots) - require.NoError(err) - assert.True(ok) + require.NoError(t, err) + require.True(t, ok) ok, err = fsm.state.CASetProviderState(16, &structs.CAConsulProviderState{ ID: "asdf", PrivateKey: "foo", RootCert: "bar", }) - require.NoError(err) - assert.True(ok) + require.NoError(t, err) + require.True(t, ok) // CA Config caConfig := &structs.CAConfiguration{ @@ -229,7 +214,7 @@ }, } err = fsm.state.CASetConfig(17, caConfig) - require.NoError(err) + require.NoError(t, err) // Config entries serviceConfig := &structs.ServiceConfigEntry{ @@ -241,9 +226,29 @@ Kind: structs.ProxyDefaults, Name: "global", } - require.NoError(fsm.state.EnsureConfigEntry(18, serviceConfig, structs.DefaultEnterpriseMeta())) - require.NoError(fsm.state.EnsureConfigEntry(19, proxyConfig, structs.DefaultEnterpriseMeta())) + require.NoError(t, fsm.state.EnsureConfigEntry(18, serviceConfig, structs.DefaultEnterpriseMeta())) + require.NoError(t, fsm.state.EnsureConfigEntry(19, proxyConfig, structs.DefaultEnterpriseMeta())) + + ingress := &structs.IngressGatewayConfigEntry{ + Kind: structs.IngressGateway, + Name: "ingress", + Listeners: []structs.IngressListener{ + { + Port: 8080, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "foo", + }, + }, + }, + }, + } + require.NoError(t, fsm.state.EnsureConfigEntry(20, ingress, structs.DefaultEnterpriseMeta())) + _, gatewayServices, err := fsm.state.GatewayServices(nil, "ingress", structs.DefaultEnterpriseMeta()) + require.NoError(t, err) + // Raft Chunking chunkState := &raftchunking.State{ ChunkMap: make(raftchunking.ChunkMap), } @@ -272,250 +277,401 @@ }, } err = fsm.chunker.RestoreState(chunkState) - require.NoError(err) + require.NoError(t, err) + + // Federation states + fedState1 := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + { + Node: &structs.Node{ + ID: "664bac9f-4de7-4f1b-ad35-0e5365e8f329", + Node: "gateway1", + Datacenter: "dc1", + Address: "1.2.3.4", + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: 1111, + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + { + Node: &structs.Node{ + ID: "3fb9a696-8209-4eee-a1f7-48600deb9716", + Node: "gateway2", + Datacenter: "dc1", + Address: "9.8.7.6", + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: 2222, + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + }, + UpdatedAt: time.Now().UTC(), + } + fedState2 := &structs.FederationState{ + Datacenter: "dc2", + MeshGateways: []structs.CheckServiceNode{ + { + Node: &structs.Node{ + ID: "0f92b02e-9f51-4aa2-861b-4ddbc3492724", + Node: "gateway1", + Datacenter: "dc2", + Address: "8.8.8.8", + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: 3333, + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + { + Node: &structs.Node{ + ID: "99a76121-1c3f-4023-88ef-805248beb10b", + Node: "gateway2", + Datacenter: "dc2", + Address: "5.5.5.5", + }, + Service: &structs.NodeService{ + ID: "mesh-gateway", + Service: "mesh-gateway", + Kind: structs.ServiceKindMeshGateway, + Port: 4444, + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + }, + Checks: []*structs.HealthCheck{ + { + Name: "web connectivity", + Status: api.HealthPassing, + ServiceID: "mesh-gateway", + }, + }, + }, + }, + UpdatedAt: time.Now().UTC(), + } + require.NoError(t, fsm.state.FederationStateSet(21, fedState1)) + require.NoError(t, fsm.state.FederationStateSet(22, fedState2)) + + // Update a node, service and health check to make sure the ModifyIndexes are preserved correctly after restore. + require.NoError(t, fsm.state.EnsureNode(23, &structs.Node{ + ID: "610918a6-464f-fa9b-1a95-03bd6e88ed92", + Node: "foo", + Datacenter: "dc1", + Address: "127.0.0.3", + })) + require.NoError(t, fsm.state.EnsureService(24, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"primary"}, Address: "127.0.0.1", Port: 5001})) + require.NoError(t, fsm.state.EnsureCheck(25, &structs.HealthCheck{ + Node: "foo", + CheckID: "web", + Name: "web connectivity", + Status: api.HealthCritical, + ServiceID: "web", + })) // Snapshot snap, err := fsm.Snapshot() - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) defer snap.Release() // Persist buf := bytes.NewBuffer(nil) sink := &MockSink{buf, false} - if err := snap.Persist(sink); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, snap.Persist(sink)) + + // create an encoder to handle some custom persisted data + // this is mainly to inject data that would no longer ever + // be persisted but that we still need to be able to restore + encoder := codec.NewEncoder(sink, structs.MsgpackHandle) + + // Persist a legacy ACL token - this is not done in newer code + // but we want to ensure that restoring legacy tokens works as + // expected so we must inject one here manually + _, err = sink.Write([]byte{byte(structs.ACLRequestType)}) + require.NoError(t, err) + + acl := structs.ACL{ + ID: "1057354f-69ef-4487-94ab-aead3c755445", + Name: "test-legacy", + Type: "client", + Rules: `operator = "read"`, + RaftIndex: structs.RaftIndex{CreateIndex: 1, ModifyIndex: 2}, + } + require.NoError(t, encoder.Encode(&acl)) + + // Persist a ACLToken without a Hash - the state store will + // now tack these on but we want to ensure we can restore + // tokens without a hash and have the hash be set. + token2 := &structs.ACLToken{ + AccessorID: "4464e4c2-1c55-4c37-978a-66cb3abe6587", + SecretID: "fc8708dc-c5ae-4bb2-a9af-a1ca456548fb", + Description: "Test No Hash", + CreateTime: time.Now(), + Local: false, + Rules: `operator = "read"`, + RaftIndex: structs.RaftIndex{CreateIndex: 1, ModifyIndex: 2}, + } + + _, err = sink.Write([]byte{byte(structs.ACLTokenSetRequestType)}) + require.NoError(t, err) + require.NoError(t, encoder.Encode(&token2)) // Try to restore on a new FSM fsm2, err := New(nil, logger) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) // Do a restore - if err := fsm2.Restore(sink); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, fsm2.Restore(sink)) // Verify the contents _, nodes, err := fsm2.state.Nodes(nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if len(nodes) != 2 { - t.Fatalf("bad: %v", nodes) - } - if nodes[0].ID != node2.ID || - nodes[0].Node != "baz" || - nodes[0].Datacenter != "dc1" || - nodes[0].Address != "127.0.0.2" || - len(nodes[0].Meta) != 1 || - nodes[0].Meta["testMeta"] != "testing123" || - len(nodes[0].TaggedAddresses) != 1 || - nodes[0].TaggedAddresses["hello"] != "1.2.3.4" { - t.Fatalf("bad: %v", nodes[0]) - } - if nodes[1].ID != node1.ID || - nodes[1].Node != "foo" || - nodes[1].Datacenter != "dc1" || - nodes[1].Address != "127.0.0.1" || - len(nodes[1].TaggedAddresses) != 0 { - t.Fatalf("bad: %v", nodes[1]) - } + require.NoError(t, err) + require.Len(t, nodes, 2, "incorect number of nodes: %v", nodes) + + // validate the first node. Note that this test relies on stable + // iteration through the memdb index and the fact that node2 has + // a name of "baz" so it should be indexed before node1 with a + // name of "foo". If memdb our our indexing changes this is likely + // to break. + require.Equal(t, node2.ID, nodes[0].ID) + require.Equal(t, "baz", nodes[0].Node) + require.Equal(t, "dc1", nodes[0].Datacenter) + require.Equal(t, "127.0.0.2", nodes[0].Address) + require.Len(t, nodes[0].Meta, 1) + require.Equal(t, "testing123", nodes[0].Meta["testMeta"]) + require.Len(t, nodes[0].TaggedAddresses, 1) + require.Equal(t, "1.2.3.4", nodes[0].TaggedAddresses["hello"]) + require.Equal(t, uint64(2), nodes[0].CreateIndex) + require.Equal(t, uint64(2), nodes[0].ModifyIndex) + + require.Equal(t, node1.ID, nodes[1].ID) + require.Equal(t, "foo", nodes[1].Node) + require.Equal(t, "dc1", nodes[1].Datacenter) + require.Equal(t, "127.0.0.3", nodes[1].Address) + require.Empty(t, nodes[1].TaggedAddresses) + require.Equal(t, uint64(1), nodes[1].CreateIndex) + require.Equal(t, uint64(23), nodes[1].ModifyIndex) _, fooSrv, err := fsm2.state.NodeServices(nil, "foo", nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if len(fooSrv.Services) != 2 { - t.Fatalf("Bad: %v", fooSrv) - } - if !lib.StrContains(fooSrv.Services["db"].Tags, "primary") { - t.Fatalf("Bad: %v", fooSrv) - } - if fooSrv.Services["db"].Port != 5000 { - t.Fatalf("Bad: %v", fooSrv) - } + require.NoError(t, err) + require.Len(t, fooSrv.Services, 2) + require.Contains(t, fooSrv.Services["db"].Tags, "primary") + require.True(t, stringslice.Contains(fooSrv.Services["db"].Tags, "primary")) + require.Equal(t, 5001, fooSrv.Services["db"].Port) + require.Equal(t, uint64(4), fooSrv.Services["db"].CreateIndex) + require.Equal(t, uint64(24), fooSrv.Services["db"].ModifyIndex) connectSrv := fooSrv.Services["web"] - if !reflect.DeepEqual(connectSrv.Connect, connectConf) { - t.Fatalf("got: %v, want: %v", connectSrv.Connect, connectConf) - } + require.Equal(t, connectConf, connectSrv.Connect) + require.Equal(t, uint64(3), fooSrv.Services["web"].CreateIndex) + require.Equal(t, uint64(3), fooSrv.Services["web"].ModifyIndex) _, checks, err := fsm2.state.NodeChecks(nil, "foo", nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if len(checks) != 1 { - t.Fatalf("Bad: %v", checks) - } + require.NoError(t, err) + require.Len(t, checks, 1) + require.Equal(t, "foo", checks[0].Node) + require.Equal(t, "web", checks[0].ServiceName) + require.Equal(t, uint64(7), checks[0].CreateIndex) + require.Equal(t, uint64(25), checks[0].ModifyIndex) // Verify key is set _, d, err := fsm2.state.KVSGet(nil, "/test", nil) - if err != nil { - t.Fatalf("err: %v", err) - } - if string(d.Value) != "foo" { - t.Fatalf("bad: %v", d) - } + require.NoError(t, err) + require.EqualValues(t, "foo", d.Value) // Verify session is restored idx, s, err := fsm2.state.SessionGet(nil, session.ID, nil) - if err != nil { - t.Fatalf("err: %v", err) - } - if s.Node != "foo" { - t.Fatalf("bad: %v", s) - } - if idx <= 1 { - t.Fatalf("bad index: %d", idx) - } + require.NoError(t, err) + require.Equal(t, "foo", s.Node) + require.EqualValues(t, 9, idx) // Verify ACL Binding Rule is restored _, bindingRule2, err := fsm2.state.ACLBindingRuleGetByID(nil, bindingRule.ID, nil) - require.NoError(err) - require.Equal(bindingRule, bindingRule2) + require.NoError(t, err) + require.Equal(t, bindingRule, bindingRule2) // Verify ACL Auth Method is restored _, method2, err := fsm2.state.ACLAuthMethodGetByName(nil, method.Name, nil) - require.NoError(err) - require.Equal(method, method2) + require.NoError(t, err) + require.Equal(t, method, method2) // Verify ACL Token is restored - _, token2, err := fsm2.state.ACLTokenGetByAccessor(nil, token.AccessorID, nil) - require.NoError(err) - { - // time.Time is tricky to compare generically when it takes a ser/deserialization round trip. - require.True(token.CreateTime.Equal(token2.CreateTime)) - token2.CreateTime = token.CreateTime - } - require.Equal(token, token2) + _, rtoken, err := fsm2.state.ACLTokenGetByAccessor(nil, token.AccessorID, nil) + require.NoError(t, err) + require.NotNil(t, rtoken) + // the state store function will add on the Hash if its empty + require.NotEmpty(t, rtoken.Hash) + token.CreateTime = token.CreateTime.Round(0) + rtoken.CreateTime = rtoken.CreateTime.Round(0) + + // note that this can work because the state store will add the Hash to the token before + // storing. That token just happens to be a pointer to the one in this function so it + // adds the Hash to our local var. + require.Equal(t, token, rtoken) + + // Verify legacy ACL is restored + _, rtoken, err = fsm2.state.ACLTokenGetBySecret(nil, acl.ID, nil) + require.NoError(t, err) + require.NotNil(t, rtoken) + require.NotEmpty(t, rtoken.Hash) + + restoredACL, err := rtoken.Convert() + require.NoError(t, err) + require.Equal(t, &acl, restoredACL) + + // Verify ACLToken without hash computes the Hash during restoration + _, rtoken, err = fsm2.state.ACLTokenGetByAccessor(nil, token2.AccessorID, nil) + require.NoError(t, err) + require.NotNil(t, rtoken) + require.NotEmpty(t, rtoken.Hash) + // nil the Hash so we can compare them + rtoken.Hash = nil + token2.CreateTime = token2.CreateTime.Round(0) + rtoken.CreateTime = rtoken.CreateTime.Round(0) + require.Equal(t, token2, rtoken) // Verify the acl-token-bootstrap index was restored canBootstrap, index, err := fsm2.state.CanBootstrapACLToken() - require.False(canBootstrap) - require.True(index > 0) + require.NoError(t, err) + require.False(t, canBootstrap) + require.True(t, index > 0) // Verify ACL Role is restored _, role2, err := fsm2.state.ACLRoleGetByID(nil, role.ID, nil) - require.NoError(err) - require.Equal(role, role2) + require.NoError(t, err) + require.Equal(t, role, role2) // Verify ACL Policy is restored _, policy2, err := fsm2.state.ACLPolicyGetByID(nil, structs.ACLPolicyGlobalManagementID, nil) - require.NoError(err) - require.Equal(policy, policy2) + require.NoError(t, err) + require.Equal(t, policy, policy2) // Verify tombstones are restored func() { snap := fsm2.state.Snapshot() defer snap.Close() stones, err := snap.Tombstones() - if err != nil { - t.Fatalf("err: %s", err) - } + require.NoError(t, err) stone := stones.Next().(*state.Tombstone) - if stone == nil { - t.Fatalf("missing tombstone") - } - if stone.Key != "/remove" || stone.Index != 12 { - t.Fatalf("bad: %v", stone) - } - if stones.Next() != nil { - t.Fatalf("unexpected extra tombstones") - } + require.NotNil(t, stone) + require.Equal(t, "/remove", stone.Key) + require.Nil(t, stones.Next()) }() // Verify coordinates are restored _, coords, err := fsm2.state.Coordinates(nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if !reflect.DeepEqual(coords, updates) { - t.Fatalf("bad: %#v", coords) - } + require.NoError(t, err) + require.Equal(t, updates, coords) // Verify queries are restored. _, queries, err := fsm2.state.PreparedQueryList(nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if len(queries) != 1 { - t.Fatalf("bad: %#v", queries) - } - if !reflect.DeepEqual(queries[0], &query) { - t.Fatalf("bad: %#v", queries[0]) - } + require.NoError(t, err) + require.Len(t, queries, 1) + require.Equal(t, &query, queries[0]) // Verify autopilot config is restored. _, restoredConf, err := fsm2.state.AutopilotConfig() - if err != nil { - t.Fatalf("err: %s", err) - } - if !reflect.DeepEqual(restoredConf, autopilotConf) { - t.Fatalf("bad: %#v, %#v", restoredConf, autopilotConf) - } + require.NoError(t, err) + require.Equal(t, autopilotConf, restoredConf) // Verify intentions are restored. _, ixns, err := fsm2.state.Intentions(nil) - require.NoError(err) - assert.Len(ixns, 1) - assert.Equal(ixn, ixns[0]) + require.NoError(t, err) + require.Len(t, ixns, 1) + require.Equal(t, ixn, ixns[0]) // Verify CA roots are restored. _, roots, err = fsm2.state.CARoots(nil) - require.NoError(err) - assert.Len(roots, 2) + require.NoError(t, err) + require.Len(t, roots, 2) // Verify provider state is restored. _, state, err := fsm2.state.CAProviderState("asdf") - require.NoError(err) - assert.Equal("foo", state.PrivateKey) - assert.Equal("bar", state.RootCert) + require.NoError(t, err) + require.Equal(t, "foo", state.PrivateKey) + require.Equal(t, "bar", state.RootCert) // Verify CA configuration is restored. _, caConf, err := fsm2.state.CAConfig(nil) - require.NoError(err) - assert.Equal(caConfig, caConf) + require.NoError(t, err) + require.Equal(t, caConfig, caConf) // Verify config entries are restored _, serviceConfEntry, err := fsm2.state.ConfigEntry(nil, structs.ServiceDefaults, "foo", structs.DefaultEnterpriseMeta()) - require.NoError(err) - assert.Equal(serviceConfig, serviceConfEntry) + require.NoError(t, err) + require.Equal(t, serviceConfig, serviceConfEntry) _, proxyConfEntry, err := fsm2.state.ConfigEntry(nil, structs.ProxyDefaults, "global", structs.DefaultEnterpriseMeta()) - require.NoError(err) - assert.Equal(proxyConfig, proxyConfEntry) + require.NoError(t, err) + require.Equal(t, proxyConfig, proxyConfEntry) + + _, ingressRestored, err := fsm2.state.ConfigEntry(nil, structs.IngressGateway, "ingress", structs.DefaultEnterpriseMeta()) + require.NoError(t, err) + require.Equal(t, ingress, ingressRestored) + + _, restoredGatewayServices, err := fsm2.state.GatewayServices(nil, "ingress", structs.DefaultEnterpriseMeta()) + require.NoError(t, err) + require.Equal(t, gatewayServices, restoredGatewayServices) newChunkState, err := fsm2.chunker.CurrentState() - require.NoError(err) - assert.Equal(newChunkState, chunkState) + require.NoError(t, err) + require.Equal(t, newChunkState, chunkState) + + // Verify federation states are restored. + _, fedStateLoaded1, err := fsm2.state.FederationStateGet(nil, "dc1") + require.NoError(t, err) + require.Equal(t, fedState1, fedStateLoaded1) + _, fedStateLoaded2, err := fsm2.state.FederationStateGet(nil, "dc2") + require.NoError(t, err) + require.Equal(t, fedState2, fedStateLoaded2) // Snapshot snap, err = fsm2.Snapshot() - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) defer snap.Release() // Persist buf = bytes.NewBuffer(nil) sink = &MockSink{buf, false} - if err := snap.Persist(sink); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, snap.Persist(sink)) // Try to restore on the old FSM and make sure it abandons the old state // store. abandonCh := fsm.state.AbandonCh() - if err := fsm.Restore(sink); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, fsm.Restore(sink)) select { case <-abandonCh: default: - t.Fatalf("bad") + require.Fail(t, "Old state not abandoned") } } @@ -524,37 +680,27 @@ // Create an FSM with some state. logger := testutil.Logger(t) fsm, err := New(nil, logger) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) fsm.state.EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}) abandonCh := fsm.state.AbandonCh() // Do a bad restore. buf := bytes.NewBuffer([]byte("bad snapshot")) sink := &MockSink{buf, false} - if err := fsm.Restore(sink); err == nil { - t.Fatalf("err: %v", err) - } + require.Error(t, fsm.Restore(sink)) // Verify the contents didn't get corrupted. _, nodes, err := fsm.state.Nodes(nil) - if err != nil { - t.Fatalf("err: %s", err) - } - if len(nodes) != 1 { - t.Fatalf("bad: %v", nodes) - } - if nodes[0].Node != "foo" || - nodes[0].Address != "127.0.0.1" || - len(nodes[0].TaggedAddresses) != 0 { - t.Fatalf("bad: %v", nodes[0]) - } + require.NoError(t, err) + require.Len(t, nodes, 1) + require.Equal(t, "foo", nodes[0].Node) + require.Equal(t, "127.0.0.1", nodes[0].Address) + require.Empty(t, nodes[0].TaggedAddresses) // Verify the old state store didn't get abandoned. select { case <-abandonCh: - t.Fatalf("bad") + require.FailNow(t, "FSM state was abandoned when it should not have been") default: } } @@ -562,46 +708,32 @@ func TestFSM_BadSnapshot_NilCAConfig(t *testing.T) { t.Parallel() - require := require.New(t) - // Create an FSM with no config entry. logger := testutil.Logger(t) fsm, err := New(nil, logger) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) // Snapshot snap, err := fsm.Snapshot() - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) defer snap.Release() // Persist buf := bytes.NewBuffer(nil) sink := &MockSink{buf, false} - if err := snap.Persist(sink); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, snap.Persist(sink)) // Try to restore on a new FSM fsm2, err := New(nil, logger) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) // Do a restore - if err := fsm2.Restore(sink); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, fsm2.Restore(sink)) // Make sure there's no entry in the CA config table. state := fsm2.State() idx, config, err := state.CAConfig(nil) - require.NoError(err) - require.Equal(uint64(0), idx) - if config != nil { - t.Fatalf("config should be nil") - } + require.NoError(t, err) + require.EqualValues(t, 0, idx) + require.Nil(t, config) } diff -Nru consul-1.7.4+dfsg1/agent/consul/gateway_locator.go consul-1.8.7+dfsg1/agent/consul/gateway_locator.go --- consul-1.7.4+dfsg1/agent/consul/gateway_locator.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/gateway_locator.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,423 @@ +package consul + +import ( + "context" + "errors" + "math/rand" + "sort" + "sync" + "time" + + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/ipaddr" + "github.com/hashicorp/consul/lib/stringslice" + "github.com/hashicorp/consul/logging" + "github.com/hashicorp/go-hclog" + memdb "github.com/hashicorp/go-memdb" +) + +// GatewayLocator assists in selecting an appropriate mesh gateway when wan +// federation via mesh gateways is enabled. +// +// This is exclusively used by the consul server itself when it needs to tunnel +// RPC or gossip through a mesh gateway to reach its ultimate destination. +// +// During secondary datacenter bootstrapping there is a phase where it is +// impossible for mesh gateways in the secondary datacenter to register +// themselves into the catalog to be discovered by the servers, so the servers +// maintain references for the mesh gateways in the primary in addition to its +// own local mesh gateways. +// +// After initial datacenter federation the primary mesh gateways are only used +// in extreme fallback situations (basically re-bootstrapping). +// +// For all other operations a consul server will ALWAYS contact a local mesh +// gateway to ultimately forward the request through a remote mesh gateway to +// reach its destination. +type GatewayLocator struct { + logger hclog.Logger + srv serverDelegate + datacenter string // THIS dc + primaryDatacenter string + + // these ONLY contain ones that have the wanfed:1 meta + gatewaysLock sync.Mutex + primaryGateways []string // WAN addrs + localGateways []string // LAN addrs + + // primaryMeshGatewayDiscoveredAddresses is the current fallback addresses + // for the mesh gateways in the primary datacenter. + primaryMeshGatewayDiscoveredAddresses []string + primaryMeshGatewayDiscoveredAddressesLock sync.Mutex + + // This will be closed the FIRST time we get some gateways populated + primaryGatewaysReadyCh chan struct{} + primaryGatewaysReadyOnce sync.Once + + // these are a collection of measurements that factor into deciding if we + // should directly dial the primary's mesh gateways or if we should try to + // route through our local gateways (if they are up). + lastReplLock sync.Mutex + lastReplSuccess time.Time + lastReplFailure time.Time + lastReplSuccesses uint64 + lastReplFailures uint64 +} + +// SetLastFederationStateReplicationError is used to indicate if the federation +// state replication loop has succeeded (nil) or failed during the last +// execution. +// +// Rather than introduce a completely new mechanism to periodically probe that +// our chosen mesh-gateway configuration can reach the primary's servers (like +// a ping or status RPC) we cheat and use the federation state replicator +// goroutine's success or failure as a proxy. +func (g *GatewayLocator) SetLastFederationStateReplicationError(err error) { + g.lastReplLock.Lock() + defer g.lastReplLock.Unlock() + oldChoice := g.dialPrimaryThroughLocalGateway() + if err == nil { + g.lastReplSuccess = time.Now().UTC() + g.lastReplSuccesses++ + g.lastReplFailures = 0 + } else { + g.lastReplFailure = time.Now().UTC() + g.lastReplFailures++ + g.lastReplSuccesses = 0 + } + newChoice := g.dialPrimaryThroughLocalGateway() + if oldChoice != newChoice { + g.logPrimaryDialingMessage(newChoice) + } +} + +func (g *GatewayLocator) logPrimaryDialingMessage(useLocal bool) { + if g.datacenter == g.primaryDatacenter { + // These messages are useless when the server is in the primary + // datacenter. + return + } + if useLocal { + g.logger.Info("will dial the primary datacenter using our local mesh gateways if possible") + } else { + g.logger.Info("will dial the primary datacenter through its mesh gateways") + } +} + +// DialPrimaryThroughLocalGateway determines if we should dial the primary's +// mesh gateways directly or use our local mesh gateways (if they are up). +// +// Generally the system has three states: +// +// 1. Servers dial primary MGWs using fallback addresses from the agent config. +// 2. Servers dial primary MGWs using replicated federation state data. +// 3. Servers dial primary MGWs indirectly through local MGWs. +// +// After initial bootstrapping most communication should go through (3). If the +// local mesh gateways are not coming up for chicken/egg problems (mostly the +// kind that arise from secondary datacenter bootstrapping) then (2) is useful +// to solve the chicken/egg problem and get back to (3). In the worst case +// where we completely lost communication with the primary AND all of their old +// mesh gateway addresses are changed then we need to go all the way back to +// square one and re-bootstrap via (1). +// +// Since both (1) and (2) are meant to be temporary we simplify things and make +// the system only consider two overall configurations: (1+2, with the +// addresses being unioned) or (3). +// +// This method returns true if in state (3) and false if in state (1+2). +func (g *GatewayLocator) DialPrimaryThroughLocalGateway() bool { + if g.datacenter == g.primaryDatacenter { + return false // not important + } + g.lastReplLock.Lock() + defer g.lastReplLock.Unlock() + return g.dialPrimaryThroughLocalGateway() +} + +const localFederationStateReplicatorFailuresBeforeDialingDirectly = 3 + +func (g *GatewayLocator) dialPrimaryThroughLocalGateway() bool { + if g.lastReplSuccess.IsZero() && g.lastReplFailure.IsZero() { + return false // no data yet + } + + if g.lastReplSuccess.After(g.lastReplFailure) { + return true // we have viable data + } + + if g.lastReplFailures < localFederationStateReplicatorFailuresBeforeDialingDirectly { + return true // maybe it's just a little broken + } + + return false +} + +// PrimaryMeshGatewayAddressesReadyCh returns a channel that will be closed +// when federation state replication ships back at least one primary mesh +// gateway (not via fallback config). +func (g *GatewayLocator) PrimaryMeshGatewayAddressesReadyCh() <-chan struct{} { + return g.primaryGatewaysReadyCh +} + +// PickGateway returns the address for a gateway suitable for reaching the +// provided datacenter. +func (g *GatewayLocator) PickGateway(dc string) string { + item := g.pickGateway(dc == g.primaryDatacenter) + g.logger.Trace("picking gateway for transit", "gateway", item, "source_datacenter", g.datacenter, "dest_datacenter", dc) + return item +} + +func (g *GatewayLocator) pickGateway(primary bool) string { + addrs := g.listGateways(primary) + return getRandomItem(addrs) +} + +func (g *GatewayLocator) listGateways(primary bool) []string { + g.gatewaysLock.Lock() + defer g.gatewaysLock.Unlock() + + var addrs []string + if primary { + if g.datacenter == g.primaryDatacenter { + addrs = g.primaryGateways + } else if g.DialPrimaryThroughLocalGateway() && len(g.localGateways) > 0 { + addrs = g.localGateways + } else { + // Note calling StringSliceMergeSorted only works because both + // inputs are pre-sorted. If for some reason one of the lists has + // *duplicates* (which shouldn't happen) it's not great but it + // won't break anything other than biasing our eventual random + // choice a little bit. + addrs = stringslice.MergeSorted(g.primaryGateways, g.PrimaryGatewayFallbackAddresses()) + } + } else { + addrs = g.localGateways + } + + return addrs +} + +// RefreshPrimaryGatewayFallbackAddresses is used to update the list of current +// fallback addresses for locating mesh gateways in the primary datacenter. +func (g *GatewayLocator) RefreshPrimaryGatewayFallbackAddresses(addrs []string) { + sort.Strings(addrs) + + g.primaryMeshGatewayDiscoveredAddressesLock.Lock() + defer g.primaryMeshGatewayDiscoveredAddressesLock.Unlock() + + if !stringslice.Equal(addrs, g.primaryMeshGatewayDiscoveredAddresses) { + g.primaryMeshGatewayDiscoveredAddresses = addrs + g.logger.Info("updated fallback list of primary mesh gateways", "mesh_gateways", addrs) + } +} + +// PrimaryGatewayFallbackAddresses returns the current set of discovered +// fallback addresses for the mesh gateways in the primary datacenter. +func (g *GatewayLocator) PrimaryGatewayFallbackAddresses() []string { + g.primaryMeshGatewayDiscoveredAddressesLock.Lock() + defer g.primaryMeshGatewayDiscoveredAddressesLock.Unlock() + + out := make([]string, len(g.primaryMeshGatewayDiscoveredAddresses)) + copy(out, g.primaryMeshGatewayDiscoveredAddresses) + return out +} + +func getRandomItem(items []string) string { + switch len(items) { + case 0: + return "" + case 1: + return items[0] + default: + idx := int(rand.Int31n(int32(len(items)))) + return items[idx] + } +} + +type serverDelegate interface { + blockingQuery(queryOpts structs.QueryOptionsCompat, queryMeta structs.QueryMetaCompat, fn queryFn) error + IsLeader() bool + LeaderLastContact() time.Time +} + +func NewGatewayLocator( + logger hclog.Logger, + srv serverDelegate, + datacenter string, + primaryDatacenter string, +) *GatewayLocator { + g := &GatewayLocator{ + logger: logger.Named(logging.GatewayLocator), + srv: srv, + datacenter: datacenter, + primaryDatacenter: primaryDatacenter, + primaryGatewaysReadyCh: make(chan struct{}), + } + g.logPrimaryDialingMessage(g.DialPrimaryThroughLocalGateway()) + return g +} + +var errGatewayLocalStateNotInitialized = errors.New("local state not initialized") + +func (g *GatewayLocator) Run(ctx context.Context) { + var lastFetchIndex uint64 + retryLoopBackoff(ctx, func() error { + idx, err := g.runOnce(lastFetchIndex) + if err != nil { + return err + } + + lastFetchIndex = idx + + return nil + }, func(err error) { + if !errors.Is(err, errGatewayLocalStateNotInitialized) { + g.logger.Error("error tracking primary and local mesh gateways", "error", err) + } + }) +} + +func (g *GatewayLocator) runOnce(lastFetchIndex uint64) (uint64, error) { + if err := g.checkLocalStateIsReady(); err != nil { + return 0, err + } + + // NOTE: we can't do RPC here because we won't have a token so we'll just + // mostly assume that our FSM is caught up enough to answer locally. If + // this has drifted it's no different than a cache that drifts or an + // inconsistent read. + queryOpts := &structs.QueryOptions{ + MinQueryIndex: lastFetchIndex, + RequireConsistent: false, + } + + var ( + results []*structs.FederationState + queryMeta structs.QueryMeta + ) + err := g.srv.blockingQuery( + queryOpts, + &queryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + // Get the existing stored version of this config that has replicated down. + // We could phone home to get this but that would incur extra WAN traffic + // when we already have enough information locally to figure it out + // (assuming that our replicator is still functioning). + idx, all, err := state.FederationStateList(ws) + if err != nil { + return err + } + + queryMeta.Index = idx + results = all + + return nil + }) + if err != nil { + return 0, err + } + + g.updateFromState(results) + + return queryMeta.Index, nil +} + +// checkLocalStateIsReady is inlined a bit from (*Server).ForwardRPC(). We need to +// wait until our own state machine is safe to read from. +func (g *GatewayLocator) checkLocalStateIsReady() error { + // Check if we can allow a stale read, ensure our local DB is initialized + if !g.srv.LeaderLastContact().IsZero() { + return nil // the raft leader talked to us + } + + if g.srv.IsLeader() { + return nil // we are the leader + } + + return errGatewayLocalStateNotInitialized +} + +func (g *GatewayLocator) updateFromState(results []*structs.FederationState) { + var ( + local structs.CheckServiceNodes + primary structs.CheckServiceNodes + ) + for _, config := range results { + retained := retainGateways(config.MeshGateways) + if config.Datacenter == g.datacenter { + local = retained + } + // NOT else-if because conditionals are not mutually exclusive + if config.Datacenter == g.primaryDatacenter { + primary = retained + } + } + + primaryAddrs := renderGatewayAddrs(primary, true) + localAddrs := renderGatewayAddrs(local, false) + + g.gatewaysLock.Lock() + defer g.gatewaysLock.Unlock() + + changed := false + primaryReady := false + if !stringslice.Equal(g.primaryGateways, primaryAddrs) { + g.primaryGateways = primaryAddrs + primaryReady = len(g.primaryGateways) > 0 + changed = true + } + if !stringslice.Equal(g.localGateways, localAddrs) { + g.localGateways = localAddrs + changed = true + } + + if changed { + g.logger.Info( + "new cached locations of mesh gateways", + "primary", primaryAddrs, + "local", localAddrs, + ) + } + + if primaryReady { + g.primaryGatewaysReadyOnce.Do(func() { + close(g.primaryGatewaysReadyCh) + }) + } +} + +func retainGateways(full structs.CheckServiceNodes) structs.CheckServiceNodes { + out := make([]structs.CheckServiceNode, 0, len(full)) + for _, csn := range full { + if csn.Service.Meta[structs.MetaWANFederationKey] != "1" { + continue + } + + // only keep healthy ones + ok := true + for _, chk := range csn.Checks { + if chk.Status == api.HealthCritical { + ok = false + } + } + + if ok { + out = append(out, csn) + } + } + return out +} + +func renderGatewayAddrs(gateways structs.CheckServiceNodes, wan bool) []string { + out := make([]string, 0, len(gateways)) + for _, csn := range gateways { + addr, port := csn.BestAddress(wan) + completeAddr := ipaddr.FormatAddressPort(addr, port) + out = append(out, completeAddr) + } + sort.Strings(out) + return out +} diff -Nru consul-1.7.4+dfsg1/agent/consul/gateway_locator_test.go consul-1.8.7+dfsg1/agent/consul/gateway_locator_test.go --- consul-1.7.4+dfsg1/agent/consul/gateway_locator_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/gateway_locator_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,375 @@ +package consul + +import ( + "errors" + "testing" + "time" + + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/sdk/testutil" + memdb "github.com/hashicorp/go-memdb" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGatewayLocator(t *testing.T) { + state, err := state.NewStateStore(nil) + require.NoError(t, err) + + dc1 := &structs.FederationState{ + Datacenter: "dc1", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc1", "gateway1", "1.2.3.4", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc1", "gateway2", "4.3.2.1", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + dc2 := &structs.FederationState{ + Datacenter: "dc2", + MeshGateways: []structs.CheckServiceNode{ + newTestMeshGatewayNode( + "dc2", "gateway1", "5.6.7.8", 5555, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + newTestMeshGatewayNode( + "dc2", "gateway2", "8.7.6.5", 9999, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ), + }, + UpdatedAt: time.Now().UTC(), + } + + t.Run("primary - no data", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc1", + "dc1", + ) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(1), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string(nil), g.listGateways(false)) + assert.Equal(t, []string(nil), g.listGateways(true)) + }) + + t.Run("secondary - no data", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(1), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string(nil), g.listGateways(false)) + assert.Equal(t, []string(nil), g.listGateways(true)) + }) + + t.Run("secondary - just fallback", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + g.RefreshPrimaryGatewayFallbackAddresses([]string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(1), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string(nil), g.listGateways(false)) + assert.Equal(t, []string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }, g.listGateways(true)) + }) + + // Insert data for the dcs + require.NoError(t, state.FederationStateSet(1, dc1)) + require.NoError(t, state.FederationStateSet(2, dc2)) + + t.Run("primary - with data", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc1", + "dc1", + ) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "1.2.3.4:5555", + "4.3.2.1:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "1.2.3.4:5555", + "4.3.2.1:9999", + }, g.listGateways(true)) + }) + + t.Run("secondary - with data", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "1.2.3.4:5555", + "4.3.2.1:9999", + }, g.listGateways(true)) + }) + + t.Run("secondary - with data and fallback - no repl", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + g.RefreshPrimaryGatewayFallbackAddresses([]string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "1.2.3.4:5555", + "4.3.2.1:9999", + "7.7.7.7:7777", + "8.8.8.8:8888", + }, g.listGateways(true)) + }) + + t.Run("secondary - with data and fallback - repl ok", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + g.RefreshPrimaryGatewayFallbackAddresses([]string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }) + + g.SetLastFederationStateReplicationError(nil) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.True(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(true)) + }) + + t.Run("secondary - with data and fallback - repl ok then failed 2 times", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + g.RefreshPrimaryGatewayFallbackAddresses([]string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }) + + g.SetLastFederationStateReplicationError(nil) + g.SetLastFederationStateReplicationError(errors.New("fake")) + g.SetLastFederationStateReplicationError(errors.New("fake")) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.True(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(true)) + }) + + t.Run("secondary - with data and fallback - repl ok then failed 3 times", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + g.RefreshPrimaryGatewayFallbackAddresses([]string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }) + + g.SetLastFederationStateReplicationError(nil) + g.SetLastFederationStateReplicationError(errors.New("fake")) + g.SetLastFederationStateReplicationError(errors.New("fake")) + g.SetLastFederationStateReplicationError(errors.New("fake")) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.False(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "1.2.3.4:5555", + "4.3.2.1:9999", + "7.7.7.7:7777", + "8.8.8.8:8888", + }, g.listGateways(true)) + }) + + t.Run("secondary - with data and fallback - repl ok then failed 3 times then ok again", func(t *testing.T) { + logger := testutil.Logger(t) + tsd := &testServerDelegate{State: state, isLeader: true} + g := NewGatewayLocator( + logger, + tsd, + "dc2", + "dc1", + ) + + g.RefreshPrimaryGatewayFallbackAddresses([]string{ + "7.7.7.7:7777", + "8.8.8.8:8888", + }) + + g.SetLastFederationStateReplicationError(nil) + g.SetLastFederationStateReplicationError(errors.New("fake")) + g.SetLastFederationStateReplicationError(errors.New("fake")) + g.SetLastFederationStateReplicationError(errors.New("fake")) + g.SetLastFederationStateReplicationError(nil) + + idx, err := g.runOnce(0) + require.NoError(t, err) + assert.True(t, g.DialPrimaryThroughLocalGateway()) + assert.Equal(t, uint64(2), idx) + assert.Len(t, tsd.Calls, 1) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(false)) + assert.Equal(t, []string{ + "5.6.7.8:5555", + "8.7.6.5:9999", + }, g.listGateways(true)) + }) +} + +type testServerDelegate struct { + State *state.Store + + Calls []uint64 + + isLeader bool + lastContact time.Time +} + +// This is just enough to exercise the logic. +func (d *testServerDelegate) blockingQuery( + queryOpts structs.QueryOptionsCompat, + queryMeta structs.QueryMetaCompat, + fn queryFn, +) error { + minQueryIndex := queryOpts.GetMinQueryIndex() + + d.Calls = append(d.Calls, minQueryIndex) + + var ws memdb.WatchSet + + err := fn(ws, d.State) + if err == nil && queryMeta.GetIndex() < 1 { + queryMeta.SetIndex(1) + } + + return err +} + +func newFakeStateStore() (*state.Store, error) { + return state.NewStateStore(nil) +} + +func (d *testServerDelegate) IsLeader() bool { + return d.isLeader +} + +func (d *testServerDelegate) LeaderLastContact() time.Time { + return d.lastContact +} diff -Nru consul-1.7.4+dfsg1/agent/consul/health_endpoint.go consul-1.8.7+dfsg1/agent/consul/health_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/health_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/health_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,7 @@ // ChecksInState is used to get all the checks in a given state func (h *Health) ChecksInState(args *structs.ChecksInStateRequest, reply *structs.IndexedHealthChecks) error { - if done, err := h.srv.forward("Health.ChecksInState", args, args, reply); done { + if done, err := h.srv.ForwardRPC("Health.ChecksInState", args, args, reply); done { return err } @@ -71,7 +71,7 @@ // NodeChecks is used to get all the checks for a node func (h *Health) NodeChecks(args *structs.NodeSpecificRequest, reply *structs.IndexedHealthChecks) error { - if done, err := h.srv.forward("Health.NodeChecks", args, args, reply); done { + if done, err := h.srv.ForwardRPC("Health.NodeChecks", args, args, reply); done { return err } @@ -121,7 +121,7 @@ } // Potentially forward - if done, err := h.srv.forward("Health.ServiceChecks", args, args, reply); done { + if done, err := h.srv.ForwardRPC("Health.ServiceChecks", args, args, reply); done { return err } @@ -171,7 +171,7 @@ // ServiceNodes returns all the nodes registered as part of a service including health info func (h *Health) ServiceNodes(args *structs.ServiceSpecificRequest, reply *structs.IndexedCheckServiceNodes) error { - if done, err := h.srv.forward("Health.ServiceNodes", args, args, reply); done { + if done, err := h.srv.ForwardRPC("Health.ServiceNodes", args, args, reply); done { return err } @@ -187,6 +187,8 @@ f = h.serviceNodesConnect case args.TagFilter: f = h.serviceNodesTagFilter + case args.Ingress: + f = h.serviceNodesIngress default: f = h.serviceNodesDefault } @@ -201,9 +203,9 @@ return err } - // If we're doing a connect query, we need read access to the service + // If we're doing a connect or ingress query, we need read access to the service // we're trying to find proxies for, so check that. - if args.Connect { + if args.Connect || args.Ingress { if authz != nil && authz.ServiceRead(args.ServiceName, &authzContext) != acl.Allow { // Just return nil, which will return an empty response (tested) return nil @@ -249,6 +251,9 @@ if args.Connect { key = "connect" } + if args.Ingress { + key = "ingress" + } metrics.IncrCounterWithLabels([]string{"health", key, "query"}, 1, []metrics.Label{{Name: "service", Value: args.ServiceName}}) @@ -284,6 +289,10 @@ return s.CheckConnectServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta) } +func (h *Health) serviceNodesIngress(ws memdb.WatchSet, s *state.Store, args *structs.ServiceSpecificRequest) (uint64, structs.CheckServiceNodes, error) { + return s.CheckIngressServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta) +} + func (h *Health) serviceNodesTagFilter(ws memdb.WatchSet, s *state.Store, args *structs.ServiceSpecificRequest) (uint64, structs.CheckServiceNodes, error) { // DEPRECATED (singular-service-tag) - remove this when backwards RPC compat // with 1.2.x is not required. diff -Nru consul-1.7.4+dfsg1/agent/consul/health_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/health_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/health_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/health_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,9 +8,11 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/stringslice" + "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" - "github.com/hashicorp/net-rpc-msgpackrpc" + msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -537,7 +539,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -557,7 +559,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -573,7 +575,7 @@ req := structs.ServiceSpecificRequest{ Datacenter: "dc1", ServiceName: "db", - ServiceTags: []string{"master"}, + ServiceTags: []string{"primary"}, TagFilter: false, } if err := msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2); err != nil { @@ -590,10 +592,10 @@ if nodes[1].Node.Node != "foo" { t.Fatalf("Bad: %v", nodes[1]) } - if !lib.StrContains(nodes[0].Service.Tags, "slave") { + if !stringslice.Contains(nodes[0].Service.Tags, "replica") { t.Fatalf("Bad: %v", nodes[0]) } - if !lib.StrContains(nodes[1].Service.Tags, "master") { + if !stringslice.Contains(nodes[1].Service.Tags, "primary") { t.Fatalf("Bad: %v", nodes[1]) } if nodes[0].Checks[0].Status != api.HealthWarning { @@ -611,7 +613,7 @@ req := structs.ServiceSpecificRequest{ Datacenter: "dc1", ServiceName: "db", - ServiceTag: "master", + ServiceTag: "primary", TagFilter: false, } if err := msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2); err != nil { @@ -628,10 +630,10 @@ if nodes[1].Node.Node != "foo" { t.Fatalf("Bad: %v", nodes[1]) } - if !lib.StrContains(nodes[0].Service.Tags, "slave") { + if !stringslice.Contains(nodes[0].Service.Tags, "replica") { t.Fatalf("Bad: %v", nodes[0]) } - if !lib.StrContains(nodes[1].Service.Tags, "master") { + if !stringslice.Contains(nodes[1].Service.Tags, "primary") { t.Fatalf("Bad: %v", nodes[1]) } if nodes[0].Checks[0].Status != api.HealthWarning { @@ -660,7 +662,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"master", "v2"}, + Tags: []string{"primary", "v2"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -678,7 +680,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"slave", "v2"}, + Tags: []string{"replica", "v2"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -692,7 +694,7 @@ req := structs.ServiceSpecificRequest{ Datacenter: "dc1", ServiceName: "db", - ServiceTags: []string{"master", "v2"}, + ServiceTags: []string{"primary", "v2"}, TagFilter: true, } require.NoError(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) @@ -701,7 +703,7 @@ require.Len(t, nodes, 1) require.Equal(t, nodes[0].Node.Node, "foo") require.Contains(t, nodes[0].Service.Tags, "v2") - require.Contains(t, nodes[0].Service.Tags, "master") + require.Contains(t, nodes[0].Service.Tags, "primary") require.Equal(t, nodes[0].Checks[0].Status, api.HealthPassing) } @@ -934,14 +936,13 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create the ACL. arg := structs.ACLRequest{ @@ -954,6 +955,9 @@ service "foo" { policy = "write" } +node "foo" { + policy = "write" +} `, }, WriteRequest: structs.WriteRequest{Token: "root"}, @@ -1026,6 +1030,348 @@ assert.Len(resp.Nodes, 1) } +func TestHealth_ServiceNodes_Gateway(t *testing.T) { + t.Parallel() + + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + { + var out struct{} + + // Register a service "api" + args := structs.TestRegisterRequest(t) + args.Service.Service = "api" + args.Check = &structs.HealthCheck{ + Name: "api", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a proxy for api + args = structs.TestRegisterRequestProxy(t) + args.Service.Service = "api-proxy" + args.Service.Proxy.DestinationServiceName = "api" + args.Check = &structs.HealthCheck{ + Name: "api-proxy", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a service "web" + args = structs.TestRegisterRequest(t) + args.Check = &structs.HealthCheck{ + Name: "web", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a proxy for web + args = structs.TestRegisterRequestProxy(t) + args.Check = &structs.HealthCheck{ + Name: "proxy", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + // Register a gateway for web + args = &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "gateway", + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "gateway", + Status: api.HealthPassing, + ServiceID: args.Service.Service, + }, + } + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &args, &out)) + + entryArgs := &structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "web", + }, + }, + }, + } + var entryResp bool + assert.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &entryArgs, &entryResp)) + } + + retry.Run(t, func(r *retry.R) { + // List should return both the terminating-gateway and the connect-proxy associated with web + req := structs.ServiceSpecificRequest{ + Connect: true, + Datacenter: "dc1", + ServiceName: "web", + } + var resp structs.IndexedCheckServiceNodes + assert.Nil(r, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &resp)) + assert.Len(r, resp.Nodes, 2) + + // Check sidecar + assert.Equal(r, structs.ServiceKindConnectProxy, resp.Nodes[0].Service.Kind) + assert.Equal(r, "foo", resp.Nodes[0].Node.Node) + assert.Equal(r, "web-proxy", resp.Nodes[0].Service.Service) + assert.Equal(r, "web-proxy", resp.Nodes[0].Service.ID) + assert.Equal(r, "web", resp.Nodes[0].Service.Proxy.DestinationServiceName) + assert.Equal(r, 2222, resp.Nodes[0].Service.Port) + + // Check gateway + assert.Equal(r, structs.ServiceKindTerminatingGateway, resp.Nodes[1].Service.Kind) + assert.Equal(r, "foo", resp.Nodes[1].Node.Node) + assert.Equal(r, "gateway", resp.Nodes[1].Service.Service) + assert.Equal(r, "gateway", resp.Nodes[1].Service.ID) + assert.Equal(r, 443, resp.Nodes[1].Service.Port) + }) +} +func TestHealth_ServiceNodes_Ingress(t *testing.T) { + t.Parallel() + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + Kind: structs.ServiceKindIngressGateway, + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthPassing, + ServiceID: "ingress-gateway", + }, + } + var out struct{} + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + Kind: structs.ServiceKindIngressGateway, + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthWarning, + ServiceID: "ingress-gateway", + }, + } + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + // Register ingress-gateway config entry + { + args := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Services: []structs.IngressService{ + {Name: "db"}, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + } + var out bool + require.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &out)) + require.True(t, out) + } + + var out2 structs.IndexedCheckServiceNodes + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "db", + Ingress: true, + } + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) + + nodes := out2.Nodes + require.Len(t, nodes, 2) + require.Equal(t, nodes[0].Node.Node, "bar") + require.Equal(t, nodes[0].Checks[0].Status, api.HealthWarning) + require.Equal(t, nodes[1].Node.Node, "foo") + require.Equal(t, nodes[1].Checks[0].Status, api.HealthPassing) +} + +func TestHealth_ServiceNodes_Ingress_ACL(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) + + // Create the ACL. + token, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + service "db" { policy = "read" } + service "ingress-gateway" { policy = "read" } + node_prefix "" { policy = "read" }`) + require.NoError(t, err) + + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthPassing, + ServiceID: "ingress-gateway", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out struct{} + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthWarning, + ServiceID: "ingress-gateway", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + // Register proxy-defaults with 'http' protocol + { + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out bool + require.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &out)) + require.True(t, out) + } + + // Register ingress-gateway config entry + { + args := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Protocol: "http", + Services: []structs.IngressService{ + {Name: "db"}, + {Name: "another"}, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out bool + require.Nil(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &out)) + require.True(t, out) + } + + // No token used + var out2 structs.IndexedCheckServiceNodes + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "db", + Ingress: true, + } + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) + require.Len(t, out2.Nodes, 0) + + // Requesting a service that is not covered by the token's policy + req = structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "another", + Ingress: true, + QueryOptions: structs.QueryOptions{Token: token.SecretID}, + } + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) + require.Len(t, out2.Nodes, 0) + + // Requesting service covered by the token's policy + req = structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "db", + Ingress: true, + QueryOptions: structs.QueryOptions{Token: token.SecretID}, + } + require.Nil(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) + + nodes := out2.Nodes + require.Len(t, nodes, 2) + require.Equal(t, nodes[0].Node.Node, "bar") + require.Equal(t, nodes[0].Checks[0].Status, api.HealthWarning) + require.Equal(t, nodes[1].Node.Node, "foo") + require.Equal(t, nodes[1].Checks[0].Status, api.HealthPassing) +} + func TestHealth_NodeChecks_FilterACL(t *testing.T) { t.Parallel() dir, token, srv, codec := testACLFilterServer(t) diff -Nru consul-1.7.4+dfsg1/agent/consul/helper_test.go consul-1.8.7+dfsg1/agent/consul/helper_test.go --- consul-1.7.4+dfsg1/agent/consul/helper_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/helper_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -100,8 +100,10 @@ if s == nil { panic("no server") } + name := s.config.NodeName + dc := s.config.Datacenter port := s.config.SerfWANConfig.MemberlistConfig.BindPort - return fmt.Sprintf("127.0.0.1:%d", port) + return fmt.Sprintf("%s.%s/127.0.0.1:%d", name, dc, port) } type clientOrServer interface { @@ -113,6 +115,8 @@ // // member.JoinLAN("127.0.0.1:"+leader.config.SerfLANConfig.MemberlistConfig.BindPort) func joinLAN(t *testing.T, member clientOrServer, leader *Server) { + t.Helper() + if member == nil || leader == nil { panic("no server") } @@ -141,6 +145,8 @@ // // member.JoinWAN("127.0.0.1:"+leader.config.SerfWANConfig.MemberlistConfig.BindPort) func joinWAN(t *testing.T, member, leader *Server) { + t.Helper() + if member == nil || leader == nil { panic("no server") } @@ -159,6 +165,8 @@ } func waitForNewACLs(t *testing.T, server *Server) { + t.Helper() + retry.Run(t, func(r *retry.R) { require.False(r, server.UseLegacyACLs(), "Server cannot use new ACLs") }) @@ -167,6 +175,7 @@ } func waitForNewACLReplication(t *testing.T, server *Server, expectedReplicationType structs.ACLReplicationType, minPolicyIndex, minTokenIndex, minRoleIndex uint64) { + t.Helper() retry.Run(t, func(r *retry.R) { status := server.getACLReplicationStatus() require.Equal(r, expectedReplicationType, status.ReplicationType, "Server not running new replicator yet") @@ -492,10 +501,23 @@ registerTestCatalogEntriesMap(t, codec, registrations) } -func registerTestCatalogEntriesMeshGateway(t *testing.T, codec rpc.ClientCodec) { +func registerTestCatalogProxyEntries(t *testing.T, codec rpc.ClientCodec) { t.Helper() registrations := map[string]*structs.RegisterRequest{ + "Service tg-gw": &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "terminating-gateway", + ID: types.NodeID("3a9d7530-20d4-443a-98d3-c10fe78f09f4"), + Address: "10.1.2.2", + Service: &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + ID: "tg-gw-01", + Service: "tg-gw", + Port: 8443, + Address: "198.18.1.3", + }, + }, "Service mg-gw": &structs.RegisterRequest{ Datacenter: "dc1", Node: "gateway", diff -Nru consul-1.7.4+dfsg1/agent/consul/intention_endpoint.go consul-1.8.7+dfsg1/agent/consul/intention_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/intention_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/intention_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,6 +11,7 @@ "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/go-bexpr" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" ) @@ -188,7 +189,7 @@ args.Datacenter = s.srv.config.PrimaryDatacenter } - if done, err := s.srv.forward("Intention.Apply", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Intention.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"consul", "intention", "apply"}, time.Now()) @@ -244,7 +245,7 @@ args *structs.IntentionQueryRequest, reply *structs.IndexedIntentions) error { // Forward if necessary - if done, err := s.srv.forward("Intention.Get", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Intention.Get", args, args, reply); done { return err } @@ -286,7 +287,12 @@ args *structs.DCSpecificRequest, reply *structs.IndexedIntentions) error { // Forward if necessary - if done, err := s.srv.forward("Intention.List", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Intention.List", args, args, reply); done { + return err + } + + filter, err := bexpr.CreateFilter(args.Filter, nil, reply.Intentions) + if err != nil { return err } @@ -303,7 +309,17 @@ reply.Intentions = make(structs.Intentions, 0) } - return s.srv.filterACL(args.Token, reply) + if err := s.srv.filterACL(args.Token, reply); err != nil { + return err + } + + raw, err := filter.Execute(reply.Intentions) + if err != nil { + return err + } + reply.Intentions = raw.(structs.Intentions) + + return nil }, ) } @@ -313,7 +329,7 @@ args *structs.IntentionQueryRequest, reply *structs.IndexedIntentionMatches) error { // Forward if necessary - if done, err := s.srv.forward("Intention.Match", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Intention.Match", args, args, reply); done { return err } @@ -370,7 +386,7 @@ args *structs.IntentionQueryRequest, reply *structs.IntentionQueryCheckResponse) error { // Forward maybe - if done, err := s.srv.forward("Intention.Check", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Intention.Check", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/intention_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/intention_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/intention_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/intention_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -392,13 +392,8 @@ func TestIntention_WildcardACLEnforcement(t *testing.T) { t.Parallel() - dir, srv := testACLServerWithConfig(t, nil, false) - defer os.RemoveAll(dir) - defer srv.Shutdown() - codec := rpcClient(t, srv) - defer codec.Close() - - testrpc.WaitForLeader(t, srv.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) // create some test policies. @@ -1062,41 +1057,17 @@ func TestIntentionList_acl(t *testing.T) { t.Parallel() - assert := assert.New(t) - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.ACLDatacenter = "dc1" - c.ACLsEnabled = true - c.ACLMasterToken = "root" - c.ACLDefaultPolicy = "deny" - }) + dir1, s1 := testServerWithConfig(t, testServerACLConfig(nil)) defer os.RemoveAll(dir1) defer s1.Shutdown() codec := rpcClient(t, s1) defer codec.Close() testrpc.WaitForLeader(t, s1.RPC, "dc1") + waitForNewACLs(t, s1) - // Create an ACL with service write permissions. This will grant - // intentions read. - var token string - { - var rules = ` -service "foo" { - policy = "write" -}` - - req := structs.ACLRequest{ - Datacenter: "dc1", - Op: structs.ACLSet, - ACL: structs.ACL{ - Name: "User token", - Type: structs.ACLTokenTypeClient, - Rules: rules, - }, - WriteRequest: structs.WriteRequest{Token: "root"}, - } - assert.Nil(msgpackrpc.CallWithCodec(codec, "ACL.Apply", &req, &token)) - } + token, err := upsertTestTokenWithPolicyRules(codec, TestDefaultMasterToken, "dc1", `service_prefix "foo" { policy = "write" }`) + require.NoError(t, err) // Create a few records for _, name := range []string{"foobar", "bar", "baz"} { @@ -1108,44 +1079,58 @@ ixn.Intention.SourceNS = "default" ixn.Intention.DestinationNS = "default" ixn.Intention.DestinationName = name - ixn.WriteRequest.Token = "root" + ixn.WriteRequest.Token = TestDefaultMasterToken // Create var reply string - assert.Nil(msgpackrpc.CallWithCodec(codec, "Intention.Apply", &ixn, &reply)) + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Intention.Apply", &ixn, &reply)) } // Test with no token - { + t.Run("no-token", func(t *testing.T) { req := &structs.DCSpecificRequest{ Datacenter: "dc1", } var resp structs.IndexedIntentions - assert.Nil(msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) - assert.Len(resp.Intentions, 0) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) + require.Len(t, resp.Intentions, 0) + }) // Test with management token - { + t.Run("master-token", func(t *testing.T) { req := &structs.DCSpecificRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: "root"}, + QueryOptions: structs.QueryOptions{Token: TestDefaultMasterToken}, } var resp structs.IndexedIntentions - assert.Nil(msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) - assert.Len(resp.Intentions, 3) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) + require.Len(t, resp.Intentions, 3) + }) // Test with user token - { + t.Run("user-token", func(t *testing.T) { req := &structs.DCSpecificRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Token: token}, + QueryOptions: structs.QueryOptions{Token: token.SecretID}, } var resp structs.IndexedIntentions - assert.Nil(msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) - assert.Len(resp.Intentions, 1) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) + require.Len(t, resp.Intentions, 1) + }) + + t.Run("filtered", func(t *testing.T) { + req := &structs.DCSpecificRequest{ + Datacenter: "dc1", + QueryOptions: structs.QueryOptions{ + Token: TestDefaultMasterToken, + Filter: "DestinationName == foobar", + }, + } + + var resp structs.IndexedIntentions + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Intention.List", req, &resp)) + require.Len(t, resp.Intentions, 1) + }) } // Test basic matching. We don't need to exhaustively test inputs since this @@ -1232,13 +1217,8 @@ func TestIntentionMatch_acl(t *testing.T) { t.Parallel() - dir1, s1 := testACLServerWithConfig(t, nil, false) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) token, err := upsertTestTokenWithPolicyRules(codec, TestDefaultMasterToken, "dc1", `service "bar" { policy = "write" }`) require.NoError(t, err) @@ -1344,7 +1324,7 @@ require.True(resp.Allowed) } -// Test the Check method defaults to deny with whitelist ACLs. +// Test the Check method defaults to deny with allowlist ACLs. func TestIntentionCheck_defaultACLDeny(t *testing.T) { t.Parallel() @@ -1379,7 +1359,7 @@ require.False(resp.Allowed) } -// Test the Check method defaults to deny with blacklist ACLs. +// Test the Check method defaults to deny with denylist ACLs. func TestIntentionCheck_defaultACLAllow(t *testing.T) { t.Parallel() @@ -1474,13 +1454,8 @@ func TestIntentionCheck_match(t *testing.T) { t.Parallel() - dir1, s1 := testACLServerWithConfig(t, nil, false) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - codec := rpcClient(t, s1) - defer codec.Close() - - testrpc.WaitForLeader(t, s1.RPC, "dc1") + _, srv, codec := testACLServerWithConfig(t, nil, false) + waitForLeaderEstablishment(t, srv) token, err := upsertTestTokenWithPolicyRules(codec, TestDefaultMasterToken, "dc1", `service "api" { policy = "read" }`) require.NoError(t, err) diff -Nru consul-1.7.4+dfsg1/agent/consul/internal_endpoint.go consul-1.8.7+dfsg1/agent/consul/internal_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/internal_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/internal_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,7 @@ // NodeInfo is used to retrieve information about a specific node. func (m *Internal) NodeInfo(args *structs.NodeSpecificRequest, reply *structs.IndexedNodeDump) error { - if done, err := m.srv.forward("Internal.NodeInfo", args, args, reply); done { + if done, err := m.srv.ForwardRPC("Internal.NodeInfo", args, args, reply); done { return err } @@ -50,7 +50,7 @@ // NodeDump is used to generate information about all of the nodes. func (m *Internal) NodeDump(args *structs.DCSpecificRequest, reply *structs.IndexedNodeDump) error { - if done, err := m.srv.forward("Internal.NodeDump", args, args, reply); done { + if done, err := m.srv.ForwardRPC("Internal.NodeDump", args, args, reply); done { return err } @@ -89,7 +89,7 @@ } func (m *Internal) ServiceDump(args *structs.ServiceDumpRequest, reply *structs.IndexedCheckServiceNodes) error { - if done, err := m.srv.forward("Internal.ServiceDump", args, args, reply); done { + if done, err := m.srv.ForwardRPC("Internal.ServiceDump", args, args, reply); done { return err } @@ -127,12 +127,90 @@ }) } +// GatewayServiceNodes returns all the nodes for services associated with a gateway along with their gateway config +func (m *Internal) GatewayServiceDump(args *structs.ServiceSpecificRequest, reply *structs.IndexedServiceDump) error { + if done, err := m.srv.ForwardRPC("Internal.GatewayServiceDump", args, args, reply); done { + return err + } + + // Verify the arguments + if args.ServiceName == "" { + return fmt.Errorf("Must provide gateway name") + } + + var authzContext acl.AuthorizerContext + authz, err := m.srv.ResolveTokenAndDefaultMeta(args.Token, &args.EnterpriseMeta, &authzContext) + if err != nil { + return err + } + + if err := m.srv.validateEnterpriseRequest(&args.EnterpriseMeta, false); err != nil { + return err + } + + // We need read access to the gateway we're trying to find services for, so check that first. + if authz != nil && authz.ServiceRead(args.ServiceName, &authzContext) != acl.Allow { + return acl.ErrPermissionDenied + } + + err = m.srv.blockingQuery( + &args.QueryOptions, + &reply.QueryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + var maxIdx uint64 + idx, gatewayServices, err := state.GatewayServices(ws, args.ServiceName, &args.EnterpriseMeta) + if err != nil { + return err + } + if idx > maxIdx { + maxIdx = idx + } + + // Loop over the gateway <-> serviceName mappings and fetch all service instances for each + var result structs.ServiceDump + for _, gs := range gatewayServices { + idx, instances, err := state.CheckServiceNodes(ws, gs.Service.Name, &gs.Service.EnterpriseMeta) + if err != nil { + return err + } + if idx > maxIdx { + maxIdx = idx + } + for _, n := range instances { + svc := structs.ServiceInfo{ + Node: n.Node, + Service: n.Service, + Checks: n.Checks, + GatewayService: gs, + } + result = append(result, &svc) + } + + // Ensure we store the gateway <-> service mapping even if there are no instances of the service + if len(instances) == 0 { + svc := structs.ServiceInfo{ + GatewayService: gs, + } + result = append(result, &svc) + } + } + reply.Index, reply.Dump = maxIdx, result + + if err := m.srv.filterACL(args.Token, reply); err != nil { + return err + } + return nil + }) + + return err +} + // EventFire is a bit of an odd endpoint, but it allows for a cross-DC RPC // call to fire an event. The primary use case is to enable user events being // triggered in a remote DC. func (m *Internal) EventFire(args *structs.EventFireRequest, reply *structs.EventFireResponse) error { - if done, err := m.srv.forward("Internal.EventFire", args, args, reply); done { + if done, err := m.srv.ForwardRPC("Internal.EventFire", args, args, reply); done { return err } @@ -172,6 +250,11 @@ args *structs.KeyringRequest, reply *structs.KeyringResponses) error { + // Error aggressively to be clear about LocalOnly behavior + if args.LocalOnly && args.Operation != structs.KeyringList { + return fmt.Errorf("argument error: LocalOnly can only be used for List operations") + } + // Check ACLs identity, rule, err := m.srv.ResolveTokenToIdentityAndAuthorizer(args.Token) if err != nil { @@ -199,44 +282,64 @@ } } - // Validate use of local-only - if args.LocalOnly && args.Operation != structs.KeyringList { - // Error aggressively to be clear about LocalOnly behavior - return fmt.Errorf("argument error: LocalOnly can only be used for List operations") - } + if args.LocalOnly || args.Forwarded || m.srv.serfWAN == nil { + // Handle operations that are localOnly, already forwarded or + // there is no serfWAN. If any of this is the case this + // operation shouldn't go out to other dcs or WAN pool. + reply.Responses = append(reply.Responses, m.executeKeyringOpLAN(args)...) + } else { + // Handle not already forwarded, non-local operations. - // args.LocalOnly should always be false for non-GET requests - if !args.LocalOnly { - // Only perform WAN keyring querying and RPC forwarding once - if !args.Forwarded && m.srv.serfWAN != nil { - args.Forwarded = true - m.executeKeyringOp(args, reply, true) - return m.srv.globalRPC("Internal.KeyringOperation", args, reply) + // Marking this as forwarded because this is what we are about + // to do. Prevents the same message from being fowarded by + // other servers. + args.Forwarded = true + reply.Responses = append(reply.Responses, m.executeKeyringOpWAN(args)) + reply.Responses = append(reply.Responses, m.executeKeyringOpLAN(args)...) + + dcs := m.srv.router.GetRemoteDatacenters(m.srv.config.Datacenter) + responses, err := m.srv.keyringRPCs("Internal.KeyringOperation", args, dcs) + if err != nil { + return err } + reply.Add(responses) } - - // Query the LAN keyring of this node's DC - m.executeKeyringOp(args, reply, false) return nil } -// executeKeyringOp executes the keyring-related operation in the request -// on either the WAN or LAN pools. -func (m *Internal) executeKeyringOp( - args *structs.KeyringRequest, - reply *structs.KeyringResponses, - wan bool) { +func (m *Internal) executeKeyringOpLAN(args *structs.KeyringRequest) []*structs.KeyringResponse { + responses := []*structs.KeyringResponse{} + segments := m.srv.LANSegments() + for name, segment := range segments { + mgr := segment.KeyManager() + serfResp, err := m.executeKeyringOpMgr(mgr, args) + resp := translateKeyResponseToKeyringResponse(serfResp, m.srv.config.Datacenter, err) + resp.Segment = name + responses = append(responses, &resp) + } + return responses +} - if wan { - mgr := m.srv.KeyManagerWAN() - m.executeKeyringOpMgr(mgr, args, reply, wan, "") - } else { - segments := m.srv.LANSegments() - for name, segment := range segments { - mgr := segment.KeyManager() - m.executeKeyringOpMgr(mgr, args, reply, wan, name) - } +func (m *Internal) executeKeyringOpWAN(args *structs.KeyringRequest) *structs.KeyringResponse { + mgr := m.srv.KeyManagerWAN() + serfResp, err := m.executeKeyringOpMgr(mgr, args) + resp := translateKeyResponseToKeyringResponse(serfResp, m.srv.config.Datacenter, err) + resp.WAN = true + return &resp +} + +func translateKeyResponseToKeyringResponse(keyresponse *serf.KeyResponse, datacenter string, err error) structs.KeyringResponse { + resp := structs.KeyringResponse{ + Datacenter: datacenter, + Messages: keyresponse.Messages, + Keys: keyresponse.Keys, + PrimaryKeys: keyresponse.PrimaryKeys, + NumNodes: keyresponse.NumNodes, + } + if err != nil { + resp.Error = err.Error() } + return resp } // executeKeyringOpMgr executes the appropriate keyring-related function based on @@ -245,9 +348,7 @@ func (m *Internal) executeKeyringOpMgr( mgr *serf.KeyManager, args *structs.KeyringRequest, - reply *structs.KeyringResponses, - wan bool, - segment string) { +) (*serf.KeyResponse, error) { var serfResp *serf.KeyResponse var err error @@ -263,20 +364,7 @@ serfResp, err = mgr.RemoveKeyWithOptions(args.Key, opts) } - errStr := "" - if err != nil { - errStr = err.Error() - } - - reply.Responses = append(reply.Responses, &structs.KeyringResponse{ - WAN: wan, - Datacenter: m.srv.config.Datacenter, - Segment: segment, - Messages: serfResp.Messages, - Keys: serfResp.Keys, - NumNodes: serfResp.NumNodes, - Error: errStr, - }) + return serfResp, err } // aclAccessorID is used to convert an ACLToken's secretID to its accessorID for non- diff -Nru consul-1.7.4+dfsg1/agent/consul/internal_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/internal_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/internal_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/internal_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,10 +9,11 @@ "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/stringslice" "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/consul/types" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" - + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -33,7 +34,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -62,7 +63,7 @@ if nodes[0].Node != "foo" { t.Fatalf("Bad: %v", nodes[0]) } - if !lib.StrContains(nodes[0].Services[0].Tags, "master") { + if !stringslice.Contains(nodes[0].Services[0].Tags, "primary") { t.Fatalf("Bad: %v", nodes[0]) } if nodes[0].Checks[0].Status != api.HealthPassing { @@ -87,7 +88,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -107,7 +108,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -137,7 +138,7 @@ switch node.Node { case "foo": foundFoo = true - if !lib.StrContains(node.Services[0].Tags, "master") { + if !stringslice.Contains(node.Services[0].Tags, "primary") { t.Fatalf("Bad: %v", nodes[0]) } if node.Checks[0].Status != api.HealthPassing { @@ -146,7 +147,7 @@ case "bar": foundBar = true - if !lib.StrContains(node.Services[0].Tags, "slave") { + if !stringslice.Contains(node.Services[0].Tags, "replica") { t.Fatalf("Bad: %v", nodes[1]) } if node.Checks[0].Status != api.HealthWarning { @@ -179,7 +180,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -197,7 +198,7 @@ Service: &structs.NodeService{ ID: "db", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, }, Check: &structs.HealthCheck{ Name: "db connect", @@ -211,7 +212,7 @@ var out2 structs.IndexedNodeDump req := structs.DCSpecificRequest{ Datacenter: "dc1", - QueryOptions: structs.QueryOptions{Filter: "master in Services.Tags"}, + QueryOptions: structs.QueryOptions{Filter: "primary in Services.Tags"}, } require.NoError(t, msgpackrpc.CallWithCodec(codec, "Internal.NodeDump", &req, &out2)) @@ -611,7 +612,7 @@ // prep the cluster with some data we can use in our filters registerTestCatalogEntries(t, codec) - registerTestCatalogEntriesMeshGateway(t, codec) + registerTestCatalogProxyEntries(t, codec) doRequest := func(t *testing.T, kind structs.ServiceKind) structs.CheckServiceNodes { t.Helper() @@ -633,6 +634,13 @@ require.Len(t, nodes, 9) }) + t.Run("Terminating Gateway", func(t *testing.T) { + nodes := doRequest(t, structs.ServiceKindTerminatingGateway) + require.Len(t, nodes, 1) + require.Equal(t, "tg-gw", nodes[0].Service.Service) + require.Equal(t, "tg-gw-01", nodes[0].Service.ID) + }) + t.Run("Mesh Gateway", func(t *testing.T) { nodes := doRequest(t, structs.ServiceKindMeshGateway) require.Len(t, nodes, 1) @@ -647,3 +655,677 @@ require.Equal(t, "web-proxy", nodes[0].Service.ID) }) } + +func TestInternal_GatewayServiceDump_Terminating(t *testing.T) { + t.Parallel() + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + + // Register gateway and two service instances that will be associated with it + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "terminating-gateway", + Service: "terminating-gateway", + Kind: structs.ServiceKindTerminatingGateway, + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "terminating connect", + Status: api.HealthPassing, + ServiceID: "terminating-gateway", + }, + } + var out struct{} + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + }, + Check: &structs.HealthCheck{ + Name: "db-warning", + Status: api.HealthWarning, + ServiceID: "db", + }, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "baz", + Address: "127.0.0.3", + Service: &structs.NodeService{ + ID: "db2", + Service: "db", + }, + Check: &structs.HealthCheck{ + Name: "db2-passing", + Status: api.HealthPassing, + ServiceID: "db2", + }, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + } + + // Register terminating-gateway config entry, linking it to db, api, and redis (dne) + { + args := &structs.TerminatingGatewayConfigEntry{ + Name: "terminating-gateway", + Kind: structs.TerminatingGateway, + Services: []structs.LinkedService{ + { + Name: "db", + }, + { + Name: "redis", + CAFile: "/etc/certs/ca.pem", + CertFile: "/etc/certs/cert.pem", + KeyFile: "/etc/certs/key.pem", + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + } + var configOutput bool + require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &configOutput)) + require.True(t, configOutput) + } + + var out structs.IndexedServiceDump + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "terminating-gateway", + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Internal.GatewayServiceDump", &req, &out)) + + dump := out.Dump + + // Reset raft indices to facilitate assertion + for i := 0; i < len(dump); i++ { + svc := dump[i] + if svc.Node != nil { + svc.Node.RaftIndex = structs.RaftIndex{} + } + if svc.Service != nil { + svc.Service.RaftIndex = structs.RaftIndex{} + } + if len(svc.Checks) > 0 && svc.Checks[0] != nil { + svc.Checks[0].RaftIndex = structs.RaftIndex{} + } + if svc.GatewayService != nil { + svc.GatewayService.RaftIndex = structs.RaftIndex{} + } + } + + expect := structs.ServiceDump{ + { + Node: &structs.Node{ + Node: "baz", + Address: "127.0.0.3", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + ID: "db2", + Service: "db", + Weights: &structs.Weights{ + Passing: 1, + Warning: 1, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + Checks: structs.HealthChecks{ + { + Node: "baz", + CheckID: types.CheckID("db2-passing"), + Name: "db2-passing", + Status: "passing", + ServiceID: "db2", + ServiceName: "db", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + }, + GatewayService: &structs.GatewayService{ + Gateway: structs.NewServiceName("terminating-gateway", nil), + Service: structs.NewServiceName("db", nil), + GatewayKind: "terminating-gateway", + }, + }, + { + Node: &structs.Node{ + Node: "bar", + Address: "127.0.0.2", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + ID: "db", + Service: "db", + Weights: &structs.Weights{ + Passing: 1, + Warning: 1, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + Checks: structs.HealthChecks{ + { + Node: "bar", + CheckID: types.CheckID("db-warning"), + Name: "db-warning", + Status: "warning", + ServiceID: "db", + ServiceName: "db", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + }, + GatewayService: &structs.GatewayService{ + Gateway: structs.NewServiceName("terminating-gateway", nil), + Service: structs.NewServiceName("db", nil), + GatewayKind: "terminating-gateway", + }, + }, + { + // Only GatewayService should be returned when linked service isn't registered + GatewayService: &structs.GatewayService{ + Gateway: structs.NewServiceName("terminating-gateway", nil), + Service: structs.NewServiceName("redis", nil), + GatewayKind: "terminating-gateway", + CAFile: "/etc/certs/ca.pem", + CertFile: "/etc/certs/cert.pem", + KeyFile: "/etc/certs/key.pem", + }, + }, + } + assert.ElementsMatch(t, expect, dump) +} + +func TestInternal_GatewayServiceDump_Terminating_ACL(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) + + // Create the ACL. + token, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + service "db" { policy = "read" } + service "terminating-gateway" { policy = "read" } + node_prefix "" { policy = "read" }`) + require.NoError(t, err) + + // Register gateway and two service instances that will be associated with it + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "terminating-gateway", + Service: "terminating-gateway", + Kind: structs.ServiceKindTerminatingGateway, + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "terminating connect", + Status: api.HealthPassing, + ServiceID: "terminating-gateway", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out struct{} + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + }, + Check: &structs.HealthCheck{ + Name: "db-warning", + Status: api.HealthWarning, + ServiceID: "db", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "baz", + Address: "127.0.0.3", + Service: &structs.NodeService{ + ID: "api", + Service: "api", + }, + Check: &structs.HealthCheck{ + Name: "api-passing", + Status: api.HealthPassing, + ServiceID: "api", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + } + + // Register terminating-gateway config entry, linking it to db and api + { + args := &structs.TerminatingGatewayConfigEntry{ + Name: "terminating-gateway", + Kind: structs.TerminatingGateway, + Services: []structs.LinkedService{ + {Name: "db"}, + {Name: "api"}, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out bool + require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &out)) + require.True(t, out) + } + + var out structs.IndexedServiceDump + + // Not passing a token with service:read on Gateway leads to PermissionDenied + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "terminating-gateway", + } + err = msgpackrpc.CallWithCodec(codec, "Internal.GatewayServiceDump", &req, &out) + require.Error(t, err, acl.ErrPermissionDenied) + + // Passing a token without service:read on api leads to it getting filtered out + req = structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "terminating-gateway", + QueryOptions: structs.QueryOptions{Token: token.SecretID}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Internal.GatewayServiceDump", &req, &out)) + + nodes := out.Dump + require.Len(t, nodes, 1) + require.Equal(t, nodes[0].Node.Node, "bar") + require.Equal(t, nodes[0].Service.Service, "db") + require.Equal(t, nodes[0].Checks[0].Status, api.HealthWarning) +} + +func TestInternal_GatewayServiceDump_Ingress(t *testing.T) { + t.Parallel() + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + + // Register gateway and service instance that will be associated with it + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + Kind: structs.ServiceKindIngressGateway, + Port: 8443, + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthPassing, + ServiceID: "ingress-gateway", + }, + } + var regOutput struct{} + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, ®Output)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + }, + Check: &structs.HealthCheck{ + Name: "db-warning", + Status: api.HealthWarning, + ServiceID: "db", + }, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, ®Output)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "baz", + Address: "127.0.0.3", + Service: &structs.NodeService{ + ID: "db2", + Service: "db", + }, + Check: &structs.HealthCheck{ + Name: "db2-passing", + Status: api.HealthPassing, + ServiceID: "db2", + }, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, ®Output)) + + // Register ingress-gateway config entry, linking it to db and redis (dne) + args := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Protocol: "tcp", + Services: []structs.IngressService{ + { + Name: "db", + }, + }, + }, + { + Port: 8080, + Protocol: "tcp", + Services: []structs.IngressService{ + { + Name: "web", + }, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + } + var configOutput bool + require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &configOutput)) + require.True(t, configOutput) + } + + var out structs.IndexedServiceDump + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "ingress-gateway", + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Internal.GatewayServiceDump", &req, &out)) + + dump := out.Dump + + // Reset raft indices to facilitate assertion + for i := 0; i < len(dump); i++ { + svc := dump[i] + if svc.Node != nil { + svc.Node.RaftIndex = structs.RaftIndex{} + } + if svc.Service != nil { + svc.Service.RaftIndex = structs.RaftIndex{} + } + if len(svc.Checks) > 0 && svc.Checks[0] != nil { + svc.Checks[0].RaftIndex = structs.RaftIndex{} + } + if svc.GatewayService != nil { + svc.GatewayService.RaftIndex = structs.RaftIndex{} + } + } + + expect := structs.ServiceDump{ + { + Node: &structs.Node{ + Node: "bar", + Address: "127.0.0.2", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Kind: "", + ID: "db", + Service: "db", + Weights: &structs.Weights{ + Passing: 1, + Warning: 1, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + Checks: structs.HealthChecks{ + { + Node: "bar", + CheckID: types.CheckID("db-warning"), + Name: "db-warning", + Status: "warning", + ServiceID: "db", + ServiceName: "db", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + }, + GatewayService: &structs.GatewayService{ + Gateway: structs.NewServiceName("ingress-gateway", nil), + Service: structs.NewServiceName("db", nil), + GatewayKind: "ingress-gateway", + Port: 8888, + Protocol: "tcp", + }, + }, + { + Node: &structs.Node{ + Node: "baz", + Address: "127.0.0.3", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + ID: "db2", + Service: "db", + Weights: &structs.Weights{ + Passing: 1, + Warning: 1, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + Checks: structs.HealthChecks{ + { + Node: "baz", + CheckID: types.CheckID("db2-passing"), + Name: "db2-passing", + Status: "passing", + ServiceID: "db2", + ServiceName: "db", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + }, + GatewayService: &structs.GatewayService{ + Gateway: structs.NewServiceName("ingress-gateway", nil), + Service: structs.NewServiceName("db", nil), + GatewayKind: "ingress-gateway", + Port: 8888, + Protocol: "tcp", + }, + }, + { + // Only GatewayService should be returned when upstream isn't registered + GatewayService: &structs.GatewayService{ + Gateway: structs.NewServiceName("ingress-gateway", nil), + Service: structs.NewServiceName("web", nil), + GatewayKind: "ingress-gateway", + Port: 8080, + Protocol: "tcp", + }, + }, + } + assert.ElementsMatch(t, expect, dump) +} + +func TestInternal_GatewayServiceDump_Ingress_ACL(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + codec := rpcClient(t, s1) + defer codec.Close() + + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) + + // Create the ACL. + token, err := upsertTestTokenWithPolicyRules(codec, "root", "dc1", ` + service "db" { policy = "read" } + service "ingress-gateway" { policy = "read" } + node_prefix "" { policy = "read" }`) + require.NoError(t, err) + + // Register gateway and two service instances that will be associated with it + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + Kind: structs.ServiceKindIngressGateway, + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthPassing, + ServiceID: "ingress-gateway", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out struct{} + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + }, + Check: &structs.HealthCheck{ + Name: "db-warning", + Status: api.HealthWarning, + ServiceID: "db", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "baz", + Address: "127.0.0.3", + Service: &structs.NodeService{ + ID: "api", + Service: "api", + }, + Check: &structs.HealthCheck{ + Name: "api-passing", + Status: api.HealthPassing, + ServiceID: "api", + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + } + + // Register ingress-gateway config entry, linking it to db and api + { + args := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Protocol: "tcp", + Services: []structs.IngressService{ + { + Name: "db", + }, + }, + }, + { + Port: 8080, + Protocol: "tcp", + Services: []structs.IngressService{ + { + Name: "web", + }, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out bool + require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &req, &out)) + require.True(t, out) + } + + var out structs.IndexedServiceDump + + // Not passing a token with service:read on Gateway leads to PermissionDenied + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "ingress-gateway", + } + err = msgpackrpc.CallWithCodec(codec, "Internal.GatewayServiceDump", &req, &out) + require.Error(t, err, acl.ErrPermissionDenied) + + // Passing a token without service:read on api leads to it getting filtered out + req = structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "ingress-gateway", + QueryOptions: structs.QueryOptions{Token: token.SecretID}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec, "Internal.GatewayServiceDump", &req, &out)) + + nodes := out.Dump + require.Len(t, nodes, 1) + require.Equal(t, nodes[0].Node.Node, "bar") + require.Equal(t, nodes[0].Service.Service, "db") + require.Equal(t, nodes[0].Checks[0].Status, api.HealthWarning) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/kvs_endpoint.go consul-1.8.7+dfsg1/agent/consul/kvs_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/kvs_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/kvs_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -87,7 +87,7 @@ // Apply is used to apply a KVS update request to the data store. func (k *KVS) Apply(args *structs.KVSRequest, reply *bool) error { - if done, err := k.srv.forward("KVS.Apply", args, args, reply); done { + if done, err := k.srv.ForwardRPC("KVS.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"kvs", "apply"}, time.Now()) @@ -130,7 +130,7 @@ // Get is used to lookup a single key. func (k *KVS) Get(args *structs.KeyRequest, reply *structs.IndexedDirEntries) error { - if done, err := k.srv.forward("KVS.Get", args, args, reply); done { + if done, err := k.srv.ForwardRPC("KVS.Get", args, args, reply); done { return err } @@ -175,7 +175,7 @@ // List is used to list all keys with a given prefix. func (k *KVS) List(args *structs.KeyRequest, reply *structs.IndexedDirEntries) error { - if done, err := k.srv.forward("KVS.List", args, args, reply); done { + if done, err := k.srv.ForwardRPC("KVS.List", args, args, reply); done { return err } @@ -227,7 +227,7 @@ // of the response so that only a subset of the prefix is returned. In this // mode, the keys which are omitted are still counted in the returned index. func (k *KVS) ListKeys(args *structs.KeyListRequest, reply *structs.IndexedKeyList) error { - if done, err := k.srv.forward("KVS.ListKeys", args, args, reply); done { + if done, err := k.srv.ForwardRPC("KVS.ListKeys", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/kvs_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/kvs_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/kvs_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/kvs_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,7 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/testrpc" - "github.com/hashicorp/net-rpc-msgpackrpc" + msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/pascaldekloe/goe/verify" ) @@ -83,7 +83,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create the ACL arg := structs.ACLRequest{ @@ -195,7 +195,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) arg := structs.KVSRequest{ Datacenter: "dc1", @@ -404,7 +404,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) keys := []string{ "abe", @@ -491,7 +491,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) keys := []string{ "abe", @@ -685,7 +685,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) keys := []string{ "abe", diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_connect_ca.go consul-1.8.7+dfsg1/agent/consul/leader_connect_ca.go --- consul-1.7.4+dfsg1/agent/consul/leader_connect_ca.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_connect_ca.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1142 @@ +package consul + +import ( + "context" + "errors" + "fmt" + "reflect" + "strings" + "sync" + "time" + + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/connect/ca" + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/go-hclog" + uuid "github.com/hashicorp/go-uuid" +) + +type CAState string + +const ( + CAStateUninitialized CAState = "UNINITIALIZED" + CAStateInitializing = "INITIALIZING" + CAStateReady = "READY" + CAStateRenewIntermediate = "RENEWING" + CAStateReconfig = "RECONFIGURING" +) + +// caServerDelegate is an interface for server operations for facilitating +// easier testing. +type caServerDelegate interface { + State() *state.Store + IsLeader() bool + + createCAProvider(conf *structs.CAConfiguration) (ca.Provider, error) + forwardDC(method, dc string, args interface{}, reply interface{}) error + generateCASignRequest(csr string) *structs.CASignRequest + raftApply(t structs.MessageType, msg interface{}) (interface{}, error) + + checkServersProvider +} + +// CAManager is a wrapper around CA operations such as updating roots, an intermediate +// or the configuration. All operations should go through the CAManager in order to +// avoid data races. +type CAManager struct { + delegate caServerDelegate + serverConf *Config + logger hclog.Logger + + providerLock sync.RWMutex + // provider is the current CA provider in use for Connect. This is + // only non-nil when we are the leader. + provider ca.Provider + // providerRoot is the CARoot that was stored along with the ca.Provider + // active. It's only updated in lock-step with the provider. This prevents + // races between state updates to active roots and the fetch of the provider + // instance. + providerRoot *structs.CARoot + + // stateLock protects the internal state used for administrative CA tasks. + stateLock sync.Mutex + state CAState + primaryRoots structs.IndexedCARoots // The most recently seen state of the root CAs from the primary datacenter. + actingSecondaryCA bool // True if this datacenter has been initialized as a secondary CA. +} + +type caDelegateWithState struct { + *Server +} + +func (c *caDelegateWithState) State() *state.Store { + return c.fsm.State() +} + +func NewCAManager(delegate caServerDelegate, logger hclog.Logger, config *Config) *CAManager { + return &CAManager{ + delegate: delegate, + logger: logger, + serverConf: config, + state: CAStateUninitialized, + } +} + +func (c *CAManager) reset() { + c.state = CAStateUninitialized + c.primaryRoots = structs.IndexedCARoots{} + c.actingSecondaryCA = false + c.setCAProvider(nil, nil) +} + +// setState attempts to update the CA state to the given state. +// If the current state is not READY, this will fail. The only exception is when +// the current state is UNINITIALIZED, and the function is called with CAStateInitializing. +func (c *CAManager) setState(newState CAState, validateState bool) error { + c.stateLock.Lock() + defer c.stateLock.Unlock() + state := c.state + + if !validateState || state == CAStateReady || (state == CAStateUninitialized && newState == CAStateInitializing) { + c.state = newState + } else { + return fmt.Errorf("CA is already in state %q", state) + } + return nil +} + +// setPrimaryRoots updates the most recently seen roots from the primary. +func (c *CAManager) setPrimaryRoots(newRoots structs.IndexedCARoots) error { + c.stateLock.Lock() + defer c.stateLock.Unlock() + + if c.state == CAStateInitializing || c.state == CAStateReconfig { + c.primaryRoots = newRoots + } else { + return fmt.Errorf("Cannot update primary roots in state %q", c.state) + } + return nil +} + +func (c *CAManager) getPrimaryRoots() structs.IndexedCARoots { + c.stateLock.Lock() + defer c.stateLock.Unlock() + return c.primaryRoots +} + +// initializeCAConfig is used to initialize the CA config if necessary +// when setting up the CA during establishLeadership. The state should be set to +// non-ready before calling this. +func (c *CAManager) initializeCAConfig() (*structs.CAConfiguration, error) { + state := c.delegate.State() + _, config, err := state.CAConfig(nil) + if err != nil { + return nil, err + } + if config == nil { + config = c.serverConf.CAConfig + if config.ClusterID == "" { + id, err := uuid.GenerateUUID() + if err != nil { + return nil, err + } + config.ClusterID = id + } + } else if _, ok := config.Config["IntermediateCertTTL"]; !ok { + dup := *config + copied := make(map[string]interface{}) + for k, v := range dup.Config { + copied[k] = v + } + copied["IntermediateCertTTL"] = connect.DefaultIntermediateCertTTL.String() + dup.Config = copied + config = &dup + } else { + return config, nil + } + + req := structs.CARequest{ + Op: structs.CAOpSetConfig, + Config: config, + } + if resp, err := c.delegate.raftApply(structs.ConnectCARequestType, req); err != nil { + return nil, err + } else if respErr, ok := resp.(error); ok { + return nil, respErr + } + + return config, nil +} + +// parseCARoot returns a filled-in structs.CARoot from a raw PEM value. +func parseCARoot(pemValue, provider, clusterID string) (*structs.CARoot, error) { + id, err := connect.CalculateCertFingerprint(pemValue) + if err != nil { + return nil, fmt.Errorf("error parsing root fingerprint: %v", err) + } + rootCert, err := connect.ParseCert(pemValue) + if err != nil { + return nil, fmt.Errorf("error parsing root cert: %v", err) + } + keyType, keyBits, err := connect.KeyInfoFromCert(rootCert) + if err != nil { + return nil, fmt.Errorf("error extracting root key info: %v", err) + } + return &structs.CARoot{ + ID: id, + Name: fmt.Sprintf("%s CA Root Cert", strings.Title(provider)), + SerialNumber: rootCert.SerialNumber.Uint64(), + SigningKeyID: connect.EncodeSigningKeyID(rootCert.SubjectKeyId), + ExternalTrustDomain: clusterID, + NotBefore: rootCert.NotBefore, + NotAfter: rootCert.NotAfter, + RootCert: pemValue, + PrivateKeyType: keyType, + PrivateKeyBits: keyBits, + Active: true, + }, nil +} + +// getCAProvider returns the currently active instance of the CA Provider, +// as well as the active root. +func (c *CAManager) getCAProvider() (ca.Provider, *structs.CARoot) { + retries := 0 + var result ca.Provider + var resultRoot *structs.CARoot + for result == nil { + c.providerLock.RLock() + result = c.provider + resultRoot = c.providerRoot + c.providerLock.RUnlock() + + // In cases where an agent is started with managed proxies, we may ask + // for the provider before establishLeadership completes. If we're the + // leader, then wait and get the provider again + if result == nil && c.delegate.IsLeader() && retries < 10 { + retries++ + time.Sleep(50 * time.Millisecond) + continue + } + + break + } + + return result, resultRoot +} + +// setCAProvider is being called while holding the stateLock +// which means it must never take that lock itself or call anything that does. +func (c *CAManager) setCAProvider(newProvider ca.Provider, root *structs.CARoot) { + c.providerLock.Lock() + c.provider = newProvider + c.providerRoot = root + c.providerLock.Unlock() +} + +// InitializeCA sets up the CA provider when gaining leadership, either bootstrapping +// the CA if this is the primary DC or making a remote RPC for intermediate signing +// if this is a secondary DC. +func (c *CAManager) InitializeCA() error { + // Bail if connect isn't enabled. + if !c.serverConf.ConnectEnabled { + return nil + } + + // Update the state before doing anything else. + err := c.setState(CAStateInitializing, true) + if err != nil { + return err + } + defer c.setState(CAStateReady, false) + + // Initialize the provider based on the current config. + conf, err := c.initializeCAConfig() + if err != nil { + return err + } + provider, err := c.delegate.createCAProvider(conf) + if err != nil { + return err + } + + c.setCAProvider(provider, nil) + + // Run the root CA initialization if this is the primary DC. + if c.serverConf.PrimaryDatacenter == c.serverConf.Datacenter { + return c.initializeRootCA(provider, conf) + } + + // If this isn't the primary DC, run the secondary DC routine if the primary has already been upgraded to at least 1.6.0 + versionOk, foundPrimary := ServersInDCMeetMinimumVersion(c.delegate, c.serverConf.PrimaryDatacenter, minMultiDCConnectVersion) + if !foundPrimary { + c.logger.Warn("primary datacenter is configured but unreachable - deferring initialization of the secondary datacenter CA") + // return nil because we will initialize the secondary CA later + return nil + } else if !versionOk { + // return nil because we will initialize the secondary CA later + c.logger.Warn("servers in the primary datacenter are not at least at the minimum version - deferring initialization of the secondary datacenter CA", + "min_version", minMultiDCConnectVersion.String(), + ) + return nil + } + + // Get the root CA to see if we need to refresh our intermediate. + args := structs.DCSpecificRequest{ + Datacenter: c.serverConf.PrimaryDatacenter, + } + var roots structs.IndexedCARoots + if err := c.delegate.forwardDC("ConnectCA.Roots", c.serverConf.PrimaryDatacenter, &args, &roots); err != nil { + return err + } + if err := c.setPrimaryRoots(roots); err != nil { + return err + } + + // Configure the CA provider and initialize the intermediate certificate if necessary. + if err := c.initializeSecondaryProvider(provider, roots); err != nil { + return fmt.Errorf("error configuring provider: %v", err) + } + if err := c.initializeSecondaryCA(provider, nil); err != nil { + return err + } + + c.logger.Info("initialized secondary datacenter CA with provider", "provider", conf.Provider) + return nil +} + +// initializeRootCA runs the initialization logic for a root CA. It should only +// be called while the state lock is held by setting the state to non-ready. +func (c *CAManager) initializeRootCA(provider ca.Provider, conf *structs.CAConfiguration) error { + pCfg := ca.ProviderConfig{ + ClusterID: conf.ClusterID, + Datacenter: c.serverConf.Datacenter, + IsPrimary: true, + RawConfig: conf.Config, + State: conf.State, + } + if err := provider.Configure(pCfg); err != nil { + return fmt.Errorf("error configuring provider: %v", err) + } + if err := provider.GenerateRoot(); err != nil { + return fmt.Errorf("error generating CA root certificate: %v", err) + } + + // Get the active root cert from the CA + rootPEM, err := provider.ActiveRoot() + if err != nil { + return fmt.Errorf("error getting root cert: %v", err) + } + rootCA, err := parseCARoot(rootPEM, conf.Provider, conf.ClusterID) + if err != nil { + return err + } + + // Also create the intermediate CA, which is the one that actually signs leaf certs + interPEM, err := provider.GenerateIntermediate() + if err != nil { + return fmt.Errorf("error generating intermediate cert: %v", err) + } + _, err = connect.ParseCert(interPEM) + if err != nil { + return fmt.Errorf("error getting intermediate cert: %v", err) + } + + // If the provider has state to persist and it's changed or new then update + // CAConfig. + pState, err := provider.State() + if err != nil { + return fmt.Errorf("error getting provider state: %v", err) + } + if !reflect.DeepEqual(conf.State, pState) { + // Update the CAConfig in raft to persist the provider state + conf.State = pState + req := structs.CARequest{ + Op: structs.CAOpSetConfig, + Config: conf, + } + if _, err = c.delegate.raftApply(structs.ConnectCARequestType, req); err != nil { + return fmt.Errorf("error persisting provider state: %v", err) + } + } + + // Check if the CA root is already initialized and exit if it is, + // adding on any existing intermediate certs since they aren't directly + // tied to the provider. + // Every change to the CA after this initial bootstrapping should + // be done through the rotation process. + state := c.delegate.State() + _, activeRoot, err := state.CARootActive(nil) + if err != nil { + return err + } + if activeRoot != nil { + // This state shouldn't be possible to get into because we update the root and + // CA config in the same FSM operation. + if activeRoot.ID != rootCA.ID { + return fmt.Errorf("stored CA root %q is not the active root (%s)", rootCA.ID, activeRoot.ID) + } + + rootCA.IntermediateCerts = activeRoot.IntermediateCerts + c.setCAProvider(provider, rootCA) + + return nil + } + + // Get the highest index + idx, _, err := state.CARoots(nil) + if err != nil { + return err + } + + // Store the root cert in raft + resp, err := c.delegate.raftApply(structs.ConnectCARequestType, &structs.CARequest{ + Op: structs.CAOpSetRoots, + Index: idx, + Roots: []*structs.CARoot{rootCA}, + }) + if err != nil { + c.logger.Error("Raft apply failed", "error", err) + return err + } + if respErr, ok := resp.(error); ok { + return respErr + } + + c.setCAProvider(provider, rootCA) + + c.logger.Info("initialized primary datacenter CA with provider", "provider", conf.Provider) + + return nil +} + +// initializeSecondaryCA runs the routine for generating an intermediate CA CSR and getting +// it signed by the primary DC if the root CA of the primary DC has changed since the last +// intermediate. It should only be called while the state lock is held by setting the state +// to non-ready. +func (c *CAManager) initializeSecondaryCA(provider ca.Provider, config *structs.CAConfiguration) error { + activeIntermediate, err := provider.ActiveIntermediate() + if err != nil { + return err + } + + var ( + storedRootID string + expectedSigningKeyID string + currentSigningKeyID string + activeSecondaryRoot *structs.CARoot + ) + if activeIntermediate != "" { + // In the event that we already have an intermediate, we must have + // already replicated some primary root information locally, so check + // to see if we're up to date by fetching the rootID and the + // signingKeyID used in the secondary. + // + // Note that for the same rootID the primary representation of the root + // will have a different SigningKeyID field than the secondary + // representation of the same root. This is because it's derived from + // the intermediate which is different in all datacenters. + storedRoot, err := provider.ActiveRoot() + if err != nil { + return err + } + + storedRootID, err = connect.CalculateCertFingerprint(storedRoot) + if err != nil { + return fmt.Errorf("error parsing root fingerprint: %v, %#v", err, storedRoot) + } + + intermediateCert, err := connect.ParseCert(activeIntermediate) + if err != nil { + return fmt.Errorf("error parsing active intermediate cert: %v", err) + } + expectedSigningKeyID = connect.EncodeSigningKeyID(intermediateCert.SubjectKeyId) + + // This will fetch the secondary's exact current representation of the + // active root. Note that this data should only be used if the IDs + // match, otherwise it's out of date and should be regenerated. + _, activeSecondaryRoot, err = c.delegate.State().CARootActive(nil) + if err != nil { + return err + } + if activeSecondaryRoot != nil { + currentSigningKeyID = activeSecondaryRoot.SigningKeyID + } + } + + // Determine which of the provided PRIMARY representations of roots is the + // active one. We'll use this as a template to generate any new root + // representations meant for this secondary. + var newActiveRoot *structs.CARoot + primaryRoots := c.getPrimaryRoots() + for _, root := range primaryRoots.Roots { + if root.ID == primaryRoots.ActiveRootID && root.Active { + newActiveRoot = root + break + } + } + if newActiveRoot == nil { + return fmt.Errorf("primary datacenter does not have an active root CA for Connect") + } + + // Get a signed intermediate from the primary DC if the provider + // hasn't been initialized yet or if the primary's root has changed. + needsNewIntermediate := false + if activeIntermediate == "" || storedRootID != primaryRoots.ActiveRootID { + needsNewIntermediate = true + } + + // Also we take this opportunity to correct an incorrectly persisted SigningKeyID + // in secondary datacenters (see PR-6513). + if expectedSigningKeyID != "" && currentSigningKeyID != expectedSigningKeyID { + needsNewIntermediate = true + } + + newIntermediate := false + if needsNewIntermediate { + if err := c.getIntermediateCASigned(provider, newActiveRoot); err != nil { + return err + } + newIntermediate = true + } else { + // Discard the primary's representation since our local one is + // sufficiently up to date. + newActiveRoot = activeSecondaryRoot + } + + // Update the roots list in the state store if there's a new active root. + state := c.delegate.State() + _, activeRoot, err := state.CARootActive(nil) + if err != nil { + return err + } + + // Determine whether a root update is needed, and persist the roots/config accordingly. + var newRoot *structs.CARoot + if activeRoot == nil || activeRoot.ID != newActiveRoot.ID || newIntermediate { + newRoot = newActiveRoot + } + if err := c.persistNewRootAndConfig(provider, newRoot, config); err != nil { + return err + } + + c.setCAProvider(provider, newActiveRoot) + return nil +} + +// persistNewRootAndConfig should only be called while the state lock is held +// by setting the state to non-ready. +// If newActiveRoot is non-nil, it will be appended to the current roots list. +// If config is non-nil, it will be used to overwrite the existing config. +func (c *CAManager) persistNewRootAndConfig(provider ca.Provider, newActiveRoot *structs.CARoot, config *structs.CAConfiguration) error { + state := c.delegate.State() + idx, oldRoots, err := state.CARoots(nil) + if err != nil { + return err + } + + // Look up the existing CA config if a new one wasn't provided. + var newConf structs.CAConfiguration + _, storedConfig, err := state.CAConfig(nil) + if err != nil { + return err + } + if storedConfig == nil { + return fmt.Errorf("local CA not initialized yet") + } + // Exit early if the change is a no-op. + if newActiveRoot == nil && config != nil && config.Provider == storedConfig.Provider && reflect.DeepEqual(config.Config, storedConfig.Config) { + return nil + } + + if config != nil { + newConf = *config + } else { + newConf = *storedConfig + } + + // Update the trust domain for the config if there's a new root, or keep the old + // one if the root isn't being updated. + newConf.ModifyIndex = storedConfig.ModifyIndex + if newActiveRoot != nil { + newConf.ClusterID = newActiveRoot.ExternalTrustDomain + } else { + _, activeRoot, err := state.CARootActive(nil) + if err != nil { + return err + } + newConf.ClusterID = activeRoot.ExternalTrustDomain + } + + // Persist any state the provider needs us to + newConf.State, err = provider.State() + if err != nil { + return fmt.Errorf("error getting provider state: %v", err) + } + + // If there's a new active root, copy the root list and append it, updating + // the old root with the time it was rotated out. + var newRoots structs.CARoots + for _, r := range oldRoots { + newRoot := *r + if newRoot.Active && newActiveRoot != nil { + newRoot.Active = false + newRoot.RotatedOutAt = time.Now() + } + if newRoot.ExternalTrustDomain == "" { + newRoot.ExternalTrustDomain = newConf.ClusterID + } + newRoots = append(newRoots, &newRoot) + } + if newActiveRoot != nil { + newRoots = append(newRoots, newActiveRoot) + } + + args := &structs.CARequest{ + Op: structs.CAOpSetRootsAndConfig, + Index: idx, + Roots: newRoots, + Config: &newConf, + } + resp, err := c.delegate.raftApply(structs.ConnectCARequestType, args) + if err != nil { + return err + } + if respErr, ok := resp.(error); ok { + return respErr + } + if respOk, ok := resp.(bool); ok && !respOk { + return fmt.Errorf("could not atomically update roots and config") + } + + c.logger.Info("updated root certificates from primary datacenter") + return nil +} + +func (c *CAManager) UpdateConfiguration(args *structs.CARequest) error { + // Attempt to update the state first. + if err := c.setState(CAStateReconfig, true); err != nil { + return err + } + defer c.setState(CAStateReady, false) + + // Exit early if it's a no-op change + state := c.delegate.State() + confIdx, config, err := state.CAConfig(nil) + if err != nil { + return err + } + + // Don't allow state changes. Either it needs to be empty or the same to allow + // read-modify-write loops that don't touch the State field. + if len(args.Config.State) > 0 && + !reflect.DeepEqual(args.Config.State, config.State) { + return ErrStateReadOnly + } + + // Don't allow users to change the ClusterID. + args.Config.ClusterID = config.ClusterID + if args.Config.Provider == config.Provider && reflect.DeepEqual(args.Config.Config, config.Config) { + return nil + } + + // If the provider hasn't changed, we need to load the current Provider state + // so it can decide if it needs to change resources or not based on the config + // change. + if args.Config.Provider == config.Provider { + // Note this is a shallow copy since the State method doc requires the + // provider return a map that will not be further modified and should not + // modify the one we pass to Configure. + args.Config.State = config.State + } + + // Create a new instance of the provider described by the config + // and get the current active root CA. This acts as a good validation + // of the config and makes sure the provider is functioning correctly + // before we commit any changes to Raft. + newProvider, err := c.delegate.createCAProvider(args.Config) + if err != nil { + return fmt.Errorf("could not initialize provider: %v", err) + } + pCfg := ca.ProviderConfig{ + ClusterID: args.Config.ClusterID, + Datacenter: c.serverConf.Datacenter, + // This endpoint can be called in a secondary DC too so set this correctly. + IsPrimary: c.serverConf.Datacenter == c.serverConf.PrimaryDatacenter, + RawConfig: args.Config.Config, + State: args.Config.State, + } + if err := newProvider.Configure(pCfg); err != nil { + return fmt.Errorf("error configuring provider: %v", err) + } + + // Set up a defer to clean up the new provider if we exit early due to an error. + cleanupNewProvider := true + defer func() { + if cleanupNewProvider { + if err := newProvider.Cleanup(); err != nil { + c.logger.Warn("failed to clean up CA provider while handling startup failure", "provider", newProvider, "error", err) + } + } + }() + + // If this is a secondary, just check if the intermediate needs to be regenerated. + if c.serverConf.Datacenter != c.serverConf.PrimaryDatacenter { + if err := c.initializeSecondaryCA(newProvider, args.Config); err != nil { + return fmt.Errorf("Error updating secondary datacenter CA config: %v", err) + } + cleanupNewProvider = false + c.logger.Info("Secondary CA provider config updated") + return nil + } + + if err := newProvider.GenerateRoot(); err != nil { + return fmt.Errorf("error generating CA root certificate: %v", err) + } + + newRootPEM, err := newProvider.ActiveRoot() + if err != nil { + return err + } + + newActiveRoot, err := parseCARoot(newRootPEM, args.Config.Provider, args.Config.ClusterID) + if err != nil { + return err + } + + // See if the provider needs to persist any state along with the config + pState, err := newProvider.State() + if err != nil { + return fmt.Errorf("error getting provider state: %v", err) + } + args.Config.State = pState + + // Compare the new provider's root CA ID to the current one. If they + // match, just update the existing provider with the new config. + // If they don't match, begin the root rotation process. + _, root, err := state.CARootActive(nil) + if err != nil { + return err + } + + // If the root didn't change, just update the config and return. + if root != nil && root.ID == newActiveRoot.ID { + args.Op = structs.CAOpSetConfig + resp, err := c.delegate.raftApply(structs.ConnectCARequestType, args) + if err != nil { + return err + } + if respErr, ok := resp.(error); ok { + return respErr + } + + // If the config has been committed, update the local provider instance + cleanupNewProvider = false + c.setCAProvider(newProvider, newActiveRoot) + + c.logger.Info("CA provider config updated") + + return nil + } + + // At this point, we know the config change has trigged a root rotation, + // either by swapping the provider type or changing the provider's config + // to use a different root certificate. + + // First up, sanity check that the current provider actually supports + // cross-signing. + oldProvider, _ := c.getCAProvider() + if oldProvider == nil { + return fmt.Errorf("internal error: CA provider is nil") + } + canXSign, err := oldProvider.SupportsCrossSigning() + if err != nil { + return fmt.Errorf("CA provider error: %s", err) + } + if !canXSign && !args.Config.ForceWithoutCrossSigning { + return errors.New("The current CA Provider does not support cross-signing. " + + "You can try again with ForceWithoutCrossSigningSet but this may cause " + + "disruption - see documentation for more.") + } + if !canXSign && args.Config.ForceWithoutCrossSigning { + c.logger.Warn("current CA doesn't support cross signing but " + + "CA reconfiguration forced anyway with ForceWithoutCrossSigning") + } + + // If it's a config change that would trigger a rotation (different provider/root): + // 1. Get the root from the new provider. + // 2. Call CrossSignCA on the old provider to sign the new root with the old one to + // get a cross-signed certificate. + // 3. Take the active root for the new provider and append the intermediate from step 2 + // to its list of intermediates. + newRoot, err := connect.ParseCert(newRootPEM) + if err != nil { + return err + } + + if canXSign { + // Have the old provider cross-sign the new root + xcCert, err := oldProvider.CrossSignCA(newRoot) + if err != nil { + return err + } + + // Add the cross signed cert to the new CA's intermediates (to be attached + // to leaf certs). + newActiveRoot.IntermediateCerts = []string{xcCert} + } + + intermediate, err := newProvider.GenerateIntermediate() + if err != nil { + return err + } + if intermediate != newRootPEM { + newActiveRoot.IntermediateCerts = append(newActiveRoot.IntermediateCerts, intermediate) + } + + // Update the roots and CA config in the state store at the same time + idx, roots, err := state.CARoots(nil) + if err != nil { + return err + } + + var newRoots structs.CARoots + for _, r := range roots { + newRoot := *r + if newRoot.Active { + newRoot.Active = false + newRoot.RotatedOutAt = time.Now() + } + newRoots = append(newRoots, &newRoot) + } + newRoots = append(newRoots, newActiveRoot) + + args.Op = structs.CAOpSetRootsAndConfig + args.Index = idx + args.Config.ModifyIndex = confIdx + args.Roots = newRoots + resp, err := c.delegate.raftApply(structs.ConnectCARequestType, args) + if err != nil { + return err + } + if respErr, ok := resp.(error); ok { + return respErr + } + if respOk, ok := resp.(bool); ok && !respOk { + return fmt.Errorf("could not atomically update roots and config") + } + + // If the config has been committed, update the local provider instance + // and call teardown on the old provider + cleanupNewProvider = false + c.setCAProvider(newProvider, newActiveRoot) + + if err := oldProvider.Cleanup(); err != nil { + c.logger.Warn("failed to clean up old provider", "provider", config.Provider) + } + + c.logger.Info("CA rotated to new root under provider", "provider", args.Config.Provider) + + return nil +} + +// getIntermediateCAPrimary regenerates the intermediate cert in the primary datacenter. +// This is only run for CAs that require an intermediary in the primary DC, such as Vault. +// It should only be called while the state lock is held by setting the state to non-ready. +func (c *CAManager) getIntermediateCAPrimary(provider ca.Provider, newActiveRoot *structs.CARoot) error { + // Generate and sign an intermediate cert using the root CA. + intermediatePEM, err := provider.GenerateIntermediate() + if err != nil { + return fmt.Errorf("error generating new intermediate cert: %v", err) + } + + intermediateCert, err := connect.ParseCert(intermediatePEM) + if err != nil { + return fmt.Errorf("error parsing intermediate cert: %v", err) + } + + // Append the new intermediate to our local active root entry. This is + // where the root representations start to diverge. + newActiveRoot.IntermediateCerts = append(newActiveRoot.IntermediateCerts, intermediatePEM) + newActiveRoot.SigningKeyID = connect.EncodeSigningKeyID(intermediateCert.SubjectKeyId) + + c.logger.Info("generated new intermediate certificate for primary datacenter") + return nil +} + +// getIntermediateCASigned should only be called while the state lock is held by +// setting the state to non-ready. +func (c *CAManager) getIntermediateCASigned(provider ca.Provider, newActiveRoot *structs.CARoot) error { + csr, err := provider.GenerateIntermediateCSR() + if err != nil { + return err + } + + var intermediatePEM string + if err := c.delegate.forwardDC("ConnectCA.SignIntermediate", c.serverConf.PrimaryDatacenter, c.delegate.generateCASignRequest(csr), &intermediatePEM); err != nil { + // this is a failure in the primary and shouldn't be capable of erroring out our establishing leadership + c.logger.Warn("Primary datacenter refused to sign our intermediate CA certificate", "error", err) + return nil + } + + if err := provider.SetIntermediate(intermediatePEM, newActiveRoot.RootCert); err != nil { + return fmt.Errorf("Failed to set the intermediate certificate with the CA provider: %v", err) + } + + intermediateCert, err := connect.ParseCert(intermediatePEM) + if err != nil { + return fmt.Errorf("error parsing intermediate cert: %v", err) + } + + // Append the new intermediate to our local active root entry. This is + // where the root representations start to diverge. + newActiveRoot.IntermediateCerts = append(newActiveRoot.IntermediateCerts, intermediatePEM) + newActiveRoot.SigningKeyID = connect.EncodeSigningKeyID(intermediateCert.SubjectKeyId) + + c.logger.Info("received new intermediate certificate from primary datacenter") + return nil +} + +// intermediateCertRenewalWatch periodically attempts to renew the intermediate cert. +func (c *CAManager) intermediateCertRenewalWatch(ctx context.Context) error { + isPrimary := c.serverConf.Datacenter == c.serverConf.PrimaryDatacenter + + for { + select { + case <-ctx.Done(): + return nil + case <-time.After(structs.IntermediateCertRenewInterval): + retryLoopBackoffAbortOnSuccess(ctx, func() error { + return c.RenewIntermediate(ctx, isPrimary) + }, func(err error) { + c.logger.Error("error renewing intermediate certs", + "routine", intermediateCertRenewWatchRoutineName, + "error", err, + ) + }) + } + } +} + +// RenewIntermediate checks the intermediate cert for +// expiration. If more than half the time a cert is valid has passed, +// it will try to renew it. +func (c *CAManager) RenewIntermediate(ctx context.Context, isPrimary bool) error { + // Grab the 'lock' right away so the provider/config can't be changed out while we check + // the intermediate. + if err := c.setState(CAStateRenewIntermediate, true); err != nil { + return err + } + defer c.setState(CAStateReady, false) + + provider, _ := c.getCAProvider() + if provider == nil { + // this happens when leadership is being revoked and this go routine will be stopped + return nil + } + // If this isn't the primary, make sure the CA has been initialized. + if !isPrimary && !c.configuredSecondaryCA() { + return fmt.Errorf("secondary CA is not yet configured.") + } + + state := c.delegate.State() + _, root, err := state.CARootActive(nil) + if err != nil { + return err + } + activeRoot := root.Clone() + + // If this is the primary, check if this is a provider that uses an intermediate cert. If + // it isn't, we don't need to check for a renewal. + if isPrimary { + _, config, err := state.CAConfig(nil) + if err != nil { + return err + } + + if _, ok := ca.PrimaryIntermediateProviders[config.Provider]; !ok { + return nil + } + } + + activeIntermediate, err := provider.ActiveIntermediate() + if err != nil { + return err + } + + if activeIntermediate == "" { + return fmt.Errorf("datacenter doesn't have an active intermediate.") + } + + intermediateCert, err := connect.ParseCert(activeIntermediate) + if err != nil { + return fmt.Errorf("error parsing active intermediate cert: %v", err) + } + + if lessThanHalfTimePassed(time.Now(), intermediateCert.NotBefore.Add(ca.CertificateTimeDriftBuffer), + intermediateCert.NotAfter) { + return nil + } + + // Enough time has passed, go ahead with getting a new intermediate. + renewalFunc := c.getIntermediateCAPrimary + if !isPrimary { + renewalFunc = c.getIntermediateCASigned + } + errCh := make(chan error, 1) + go func() { + errCh <- renewalFunc(provider, activeRoot) + }() + + // Wait for the renewal func to return or for the context to be canceled. + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err != nil { + return err + } + } + + if err := c.persistNewRootAndConfig(provider, activeRoot, nil); err != nil { + return err + } + + c.setCAProvider(provider, activeRoot) + return nil +} + +// secondaryCARootWatch maintains a blocking query to the primary datacenter's +// ConnectCA.Roots endpoint to monitor when it needs to request a new signed +// intermediate certificate. +func (c *CAManager) secondaryCARootWatch(ctx context.Context) error { + args := structs.DCSpecificRequest{ + Datacenter: c.serverConf.PrimaryDatacenter, + QueryOptions: structs.QueryOptions{ + // the maximum time the primary roots watch query can block before returning + MaxQueryTime: c.serverConf.MaxQueryTime, + }, + } + + c.logger.Debug("starting Connect CA root replication from primary datacenter", "primary", c.serverConf.PrimaryDatacenter) + + retryLoopBackoff(ctx, func() error { + var roots structs.IndexedCARoots + if err := c.delegate.forwardDC("ConnectCA.Roots", c.serverConf.PrimaryDatacenter, &args, &roots); err != nil { + return fmt.Errorf("Error retrieving the primary datacenter's roots: %v", err) + } + + // Return if the context has been canceled while waiting on the RPC. + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + // Attempt to update the roots using the returned data. + if err := c.UpdateRoots(roots); err != nil { + return err + } + args.QueryOptions.MinQueryIndex = nextIndexVal(args.QueryOptions.MinQueryIndex, roots.QueryMeta.Index) + return nil + }, func(err error) { + c.logger.Error("CA root replication failed, will retry", + "routine", secondaryCARootWatchRoutineName, + "error", err, + ) + }) + + return nil +} + +// UpdateRoots updates the cached roots from the primary and regenerates the intermediate +// certificate if necessary. +func (c *CAManager) UpdateRoots(roots structs.IndexedCARoots) error { + // Update the state first to claim the 'lock'. + if err := c.setState(CAStateReconfig, true); err != nil { + return err + } + defer c.setState(CAStateReady, false) + + // Update the cached primary roots now that the lock is held. + if err := c.setPrimaryRoots(roots); err != nil { + return err + } + + // Check to see if the primary has been upgraded in case we're waiting to switch to + // secondary mode. + provider, _ := c.getCAProvider() + if provider == nil { + // this happens when leadership is being revoked and this go routine will be stopped + return nil + } + if !c.configuredSecondaryCA() { + versionOk, primaryFound := ServersInDCMeetMinimumVersion(c.delegate, c.serverConf.PrimaryDatacenter, minMultiDCConnectVersion) + if !primaryFound { + return fmt.Errorf("Primary datacenter is unreachable - deferring secondary CA initialization") + } + + if versionOk { + if err := c.initializeSecondaryProvider(provider, roots); err != nil { + return fmt.Errorf("Failed to initialize secondary CA provider: %v", err) + } + } + } + + // Run the secondary CA init routine to see if we need to request a new + // intermediate. + if c.configuredSecondaryCA() { + if err := c.initializeSecondaryCA(provider, nil); err != nil { + return fmt.Errorf("Failed to initialize the secondary CA: %v", err) + } + } + + return nil +} + +// initializeSecondaryProvider configures the given provider for a secondary, non-root datacenter. +func (c *CAManager) initializeSecondaryProvider(provider ca.Provider, roots structs.IndexedCARoots) error { + if roots.TrustDomain == "" { + return fmt.Errorf("trust domain from primary datacenter is not initialized") + } + + clusterID := strings.Split(roots.TrustDomain, ".")[0] + _, conf, err := c.delegate.State().CAConfig(nil) + if err != nil { + return err + } + + pCfg := ca.ProviderConfig{ + ClusterID: clusterID, + Datacenter: c.serverConf.Datacenter, + IsPrimary: false, + RawConfig: conf.Config, + State: conf.State, + } + if err := provider.Configure(pCfg); err != nil { + return fmt.Errorf("error configuring provider: %v", err) + } + + return c.setSecondaryCA() +} + +// setSecondaryCA sets the flag for acting as a secondary CA to true. +func (c *CAManager) setSecondaryCA() error { + c.stateLock.Lock() + defer c.stateLock.Unlock() + + if c.state == CAStateInitializing || c.state == CAStateReconfig { + c.actingSecondaryCA = true + } else { + return fmt.Errorf("Cannot update secondary CA flag in state %q", c.state) + } + + return nil +} + +// configuredSecondaryCA returns true if we have been initialized as a secondary datacenter's CA. +func (c *CAManager) configuredSecondaryCA() bool { + c.stateLock.Lock() + defer c.stateLock.Unlock() + return c.actingSecondaryCA +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_connect_ca_test.go consul-1.8.7+dfsg1/agent/consul/leader_connect_ca_test.go --- consul-1.7.4+dfsg1/agent/consul/leader_connect_ca_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_connect_ca_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,285 @@ +package consul + +import ( + "context" + "crypto/x509" + "errors" + "fmt" + "testing" + "time" + + "github.com/hashicorp/consul/agent/connect" + ca "github.com/hashicorp/consul/agent/connect/ca" + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/metadata" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/go-version" + "github.com/hashicorp/serf/serf" + "github.com/stretchr/testify/require" +) + +// TODO(kyhavlov): replace with t.Deadline() +const CATestTimeout = 7 * time.Second + +type mockCAServerDelegate struct { + t *testing.T + config *Config + store *state.Store + primaryRoot *structs.CARoot + callbackCh chan string +} + +func NewMockCAServerDelegate(t *testing.T, config *Config) *mockCAServerDelegate { + store, err := state.NewStateStore(nil) + require.NoError(t, err) + delegate := &mockCAServerDelegate{ + t: t, + config: config, + store: store, + primaryRoot: connect.TestCAWithTTL(t, nil, 1*time.Second), + callbackCh: make(chan string, 0), + } + delegate.store.CASetConfig(1, testCAConfig()) + + return delegate +} + +func (m *mockCAServerDelegate) State() *state.Store { + return m.store +} + +func (m *mockCAServerDelegate) IsLeader() bool { + return true +} + +func (m *mockCAServerDelegate) CheckServers(datacenter string, fn func(*metadata.Server) bool) { + ver, _ := version.NewVersion("1.6.0") + fn(&metadata.Server{ + Status: serf.StatusAlive, + Build: *ver, + }) +} + +func (m *mockCAServerDelegate) ApplyCARequest(req *structs.CARequest) (interface{}, error) { + return ca.ApplyCARequestToStore(m.store, req) +} + +func (m *mockCAServerDelegate) createCAProvider(conf *structs.CAConfiguration) (ca.Provider, error) { + return &mockCAProvider{ + callbackCh: m.callbackCh, + rootPEM: m.primaryRoot.RootCert, + }, nil +} + +func (m *mockCAServerDelegate) forwardDC(method, dc string, args interface{}, reply interface{}) error { + switch method { + case "ConnectCA.Roots": + roots := reply.(*structs.IndexedCARoots) + roots.TrustDomain = connect.TestClusterID + roots.Roots = []*structs.CARoot{m.primaryRoot} + roots.ActiveRootID = m.primaryRoot.ID + case "ConnectCA.SignIntermediate": + r := reply.(*string) + *r = m.primaryRoot.RootCert + default: + return fmt.Errorf("received call to unsupported method %q", method) + } + + m.callbackCh <- fmt.Sprintf("forwardDC/%s", method) + + return nil +} + +func (m *mockCAServerDelegate) generateCASignRequest(csr string) *structs.CASignRequest { + return &structs.CASignRequest{ + Datacenter: m.config.PrimaryDatacenter, + CSR: csr, + } +} + +func (m *mockCAServerDelegate) raftApply(t structs.MessageType, msg interface{}) (interface{}, error) { + if t == structs.ConnectCARequestType { + req := msg.(*structs.CARequest) + act, err := m.store.CARootSetCAS(1, req.Index, req.Roots) + require.NoError(m.t, err) + require.True(m.t, act) + + act, err = m.store.CACheckAndSetConfig(1, req.Config.ModifyIndex, req.Config) + require.NoError(m.t, err) + require.True(m.t, act) + } else { + return nil, fmt.Errorf("got invalid MessageType %v", t) + } + m.callbackCh <- fmt.Sprintf("raftApply/%v", t) + return nil, nil +} + +// mockCAProvider mocks an empty provider implementation with a channel in order to coordinate +// waiting for certain methods to be called. +type mockCAProvider struct { + callbackCh chan string + rootPEM string +} + +func (m *mockCAProvider) Configure(cfg ca.ProviderConfig) error { return nil } +func (m *mockCAProvider) State() (map[string]string, error) { return nil, nil } +func (m *mockCAProvider) GenerateRoot() error { return nil } +func (m *mockCAProvider) ActiveRoot() (string, error) { return m.rootPEM, nil } +func (m *mockCAProvider) GenerateIntermediateCSR() (string, error) { + m.callbackCh <- "provider/GenerateIntermediateCSR" + return "", nil +} +func (m *mockCAProvider) SetIntermediate(intermediatePEM, rootPEM string) error { + m.callbackCh <- "provider/SetIntermediate" + return nil +} +func (m *mockCAProvider) ActiveIntermediate() (string, error) { return m.rootPEM, nil } +func (m *mockCAProvider) GenerateIntermediate() (string, error) { return "", nil } +func (m *mockCAProvider) Sign(*x509.CertificateRequest) (string, error) { return "", nil } +func (m *mockCAProvider) SignIntermediate(*x509.CertificateRequest) (string, error) { return "", nil } +func (m *mockCAProvider) CrossSignCA(*x509.Certificate) (string, error) { return "", nil } +func (m *mockCAProvider) SupportsCrossSigning() (bool, error) { return false, nil } +func (m *mockCAProvider) Cleanup() error { return nil } + +func waitForCh(t *testing.T, ch chan string, expected string) { + select { + case op := <-ch: + if op != expected { + t.Fatalf("got unexpected op %q, wanted %q", op, expected) + } + case <-time.After(CATestTimeout): + t.Fatalf("never got op %q", expected) + } +} + +func waitForEmptyCh(t *testing.T, ch chan string) { + select { + case op := <-ch: + t.Fatalf("got unexpected op %q", op) + case <-time.After(1 * time.Second): + } +} + +func testCAConfig() *structs.CAConfiguration { + return &structs.CAConfiguration{ + ClusterID: connect.TestClusterID, + Provider: "mock", + Config: map[string]interface{}{ + "LeafCertTTL": "72h", + "IntermediateCertTTL": "2160h", + }, + } +} + +// initTestManager initializes a CAManager with a mockCAServerDelegate, consuming +// the ops that come through the channels and returning when initialization has finished. +func initTestManager(t *testing.T, manager *CAManager, delegate *mockCAServerDelegate) { + initCh := make(chan struct{}) + go func() { + require.NoError(t, manager.InitializeCA()) + close(initCh) + }() + for i := 0; i < 5; i++ { + select { + case <-delegate.callbackCh: + case <-time.After(CATestTimeout): + t.Fatal("failed waiting for initialization events") + } + } + select { + case <-initCh: + case <-time.After(CATestTimeout): + t.Fatal("failed waiting for initialization") + } +} + +func TestCAManager_Initialize(t *testing.T) { + conf := DefaultConfig() + conf.ConnectEnabled = true + conf.PrimaryDatacenter = "dc1" + conf.Datacenter = "dc2" + delegate := NewMockCAServerDelegate(t, conf) + manager := NewCAManager(delegate, testutil.Logger(t), conf) + + // Call InitializeCA and then confirm the RPCs and provider calls + // happen in the expected order. + require.EqualValues(t, CAStateUninitialized, manager.state) + errCh := make(chan error) + go func() { + errCh <- manager.InitializeCA() + }() + + waitForCh(t, delegate.callbackCh, "forwardDC/ConnectCA.Roots") + require.EqualValues(t, CAStateInitializing, manager.state) + waitForCh(t, delegate.callbackCh, "provider/GenerateIntermediateCSR") + waitForCh(t, delegate.callbackCh, "forwardDC/ConnectCA.SignIntermediate") + waitForCh(t, delegate.callbackCh, "provider/SetIntermediate") + waitForCh(t, delegate.callbackCh, fmt.Sprintf("raftApply/%v", structs.ConnectCARequestType)) + waitForEmptyCh(t, delegate.callbackCh) + + // Make sure the InitializeCA call returned successfully. + select { + case err := <-errCh: + require.NoError(t, err) + case <-time.After(CATestTimeout): + t.Fatal("never got result from errCh") + } + + require.EqualValues(t, CAStateReady, manager.state) +} + +func TestCAManager_UpdateConfigWhileRenewIntermediate(t *testing.T) { + // No parallel execution because we change globals + // Set the interval and drift buffer low for renewing the cert. + origInterval := structs.IntermediateCertRenewInterval + origDriftBuffer := ca.CertificateTimeDriftBuffer + defer func() { + structs.IntermediateCertRenewInterval = origInterval + ca.CertificateTimeDriftBuffer = origDriftBuffer + }() + structs.IntermediateCertRenewInterval = time.Millisecond + ca.CertificateTimeDriftBuffer = 0 + + conf := DefaultConfig() + conf.ConnectEnabled = true + conf.PrimaryDatacenter = "dc1" + conf.Datacenter = "dc2" + delegate := NewMockCAServerDelegate(t, conf) + manager := NewCAManager(delegate, testutil.Logger(t), conf) + initTestManager(t, manager, delegate) + + // Wait half the TTL for the cert to need renewing. + time.Sleep(500 * time.Millisecond) + + // Call RenewIntermediate and then confirm the RPCs and provider calls + // happen in the expected order. + errCh := make(chan error) + go func() { + errCh <- manager.RenewIntermediate(context.TODO(), false) + }() + + waitForCh(t, delegate.callbackCh, "provider/GenerateIntermediateCSR") + + // Call UpdateConfiguration while RenewIntermediate is still in-flight to + // make sure we get an error about the state being occupied. + go func() { + require.EqualValues(t, CAStateRenewIntermediate, manager.state) + require.Error(t, errors.New("already in state"), manager.UpdateConfiguration(&structs.CARequest{})) + }() + + waitForCh(t, delegate.callbackCh, "forwardDC/ConnectCA.SignIntermediate") + waitForCh(t, delegate.callbackCh, "provider/SetIntermediate") + waitForCh(t, delegate.callbackCh, fmt.Sprintf("raftApply/%v", structs.ConnectCARequestType)) + waitForEmptyCh(t, delegate.callbackCh) + + // Make sure the RenewIntermediate call returned successfully. + select { + case err := <-errCh: + require.NoError(t, err) + case <-time.After(CATestTimeout): + t.Fatal("never got result from errCh") + } + + require.EqualValues(t, CAStateReady, manager.state) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_connect.go consul-1.8.7+dfsg1/agent/consul/leader_connect.go --- consul-1.7.4+dfsg1/agent/consul/leader_connect.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_connect.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,17 +4,13 @@ "bytes" "context" "fmt" - "reflect" - "strings" "time" "golang.org/x/time/rate" - "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/logging" - uuid "github.com/hashicorp/go-uuid" ) const ( @@ -37,76 +33,36 @@ maxRetryBackoff = 256 ) -// initializeCAConfig is used to initialize the CA config if necessary -// when setting up the CA during establishLeadership -func (s *Server) initializeCAConfig() (*structs.CAConfiguration, error) { - state := s.fsm.State() - _, config, err := state.CAConfig(nil) - if err != nil { - return nil, err - } - if config == nil { - config = s.config.CAConfig - if config.ClusterID == "" { - id, err := uuid.GenerateUUID() - if err != nil { - return nil, err - } - config.ClusterID = id - } - } else if _, ok := config.Config["IntermediateCertTTL"]; !ok { - dup := *config - copied := make(map[string]interface{}) - for k, v := range dup.Config { - copied[k] = v - } - copied["IntermediateCertTTL"] = connect.DefaultIntermediateCertTTL.String() - dup.Config = copied - config = &dup - } else { - return config, nil +// startConnectLeader starts multi-dc connect leader routines. +func (s *Server) startConnectLeader() { + if !s.config.ConnectEnabled { + return } - req := structs.CARequest{ - Op: structs.CAOpSetConfig, - Config: config, - } - if resp, err := s.raftApply(structs.ConnectCARequestType, req); err != nil { - return nil, err - } else if respErr, ok := resp.(error); ok { - return nil, respErr + // Start the Connect secondary DC actions if enabled. + if s.config.Datacenter != s.config.PrimaryDatacenter { + s.leaderRoutineManager.Start(secondaryCARootWatchRoutineName, s.caManager.secondaryCARootWatch) + s.leaderRoutineManager.Start(intentionReplicationRoutineName, s.replicateIntentions) } - return config, nil + s.leaderRoutineManager.Start(intermediateCertRenewWatchRoutineName, s.caManager.intermediateCertRenewalWatch) + s.leaderRoutineManager.Start(caRootPruningRoutineName, s.runCARootPruning) } -// parseCARoot returns a filled-in structs.CARoot from a raw PEM value. -func parseCARoot(pemValue, provider, clusterID string) (*structs.CARoot, error) { - id, err := connect.CalculateCertFingerprint(pemValue) - if err != nil { - return nil, fmt.Errorf("error parsing root fingerprint: %v", err) - } - rootCert, err := connect.ParseCert(pemValue) - if err != nil { - return nil, fmt.Errorf("error parsing root cert: %v", err) - } - keyType, keyBits, err := connect.KeyInfoFromCert(rootCert) - if err != nil { - return nil, fmt.Errorf("error extracting root key info: %v", err) +// stopConnectLeader stops connect specific leader functions. +func (s *Server) stopConnectLeader() { + s.leaderRoutineManager.Stop(secondaryCARootWatchRoutineName) + s.leaderRoutineManager.Stop(intentionReplicationRoutineName) + s.leaderRoutineManager.Stop(intermediateCertRenewWatchRoutineName) + s.leaderRoutineManager.Stop(caRootPruningRoutineName) + + // If the provider implements NeedsStop, we call Stop to perform any shutdown actions. + provider, _ := s.caManager.getCAProvider() + if provider != nil { + if needsStop, ok := provider.(ca.NeedsStop); ok { + needsStop.Stop() + } } - return &structs.CARoot{ - ID: id, - Name: fmt.Sprintf("%s CA Root Cert", strings.Title(provider)), - SerialNumber: rootCert.SerialNumber.Uint64(), - SigningKeyID: connect.EncodeSigningKeyID(rootCert.SubjectKeyId), - ExternalTrustDomain: clusterID, - NotBefore: rootCert.NotBefore, - NotAfter: rootCert.NotAfter, - RootCert: pemValue, - PrivateKeyType: keyType, - PrivateKeyBits: keyBits, - Active: true, - }, nil } // createProvider returns a connect CA provider from the given config. @@ -116,7 +72,7 @@ case structs.ConsulCAProvider: p = &ca.ConsulProvider{Delegate: &consulCADelegate{s}} case structs.VaultCAProvider: - p = &ca.VaultProvider{} + p = ca.NewVaultProvider() case structs.AWSCAProvider: p = &ca.AWSProvider{} default: @@ -131,446 +87,6 @@ return p, nil } -// getCAProvider is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) getCAProvider() (ca.Provider, *structs.CARoot) { - retries := 0 - var result ca.Provider - var resultRoot *structs.CARoot - for result == nil { - s.caProviderLock.RLock() - result = s.caProvider - resultRoot = s.caProviderRoot - s.caProviderLock.RUnlock() - - // In cases where an agent is started with managed proxies, we may ask - // for the provider before establishLeadership completes. If we're the - // leader, then wait and get the provider again - if result == nil && s.IsLeader() && retries < 10 { - retries++ - time.Sleep(50 * time.Millisecond) - continue - } - - break - } - - return result, resultRoot -} - -// setCAProvider is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) setCAProvider(newProvider ca.Provider, root *structs.CARoot) { - s.caProviderLock.Lock() - defer s.caProviderLock.Unlock() - s.caProvider = newProvider - s.caProviderRoot = root -} - -// initializeCA sets up the CA provider when gaining leadership, either bootstrapping -// the CA if this is the primary DC or making a remote RPC for intermediate signing -// if this is a secondary DC. -func (s *Server) initializeCA() error { - connectLogger := s.loggers.Named(logging.Connect) - // Bail if connect isn't enabled. - if !s.config.ConnectEnabled { - return nil - } - - // Initialize the provider based on the current config. - conf, err := s.initializeCAConfig() - if err != nil { - return err - } - provider, err := s.createCAProvider(conf) - if err != nil { - return err - } - - s.caProviderReconfigurationLock.Lock() - defer s.caProviderReconfigurationLock.Unlock() - s.setCAProvider(provider, nil) - - // If this isn't the primary DC, run the secondary DC routine if the primary has already been upgraded to at least 1.6.0 - if s.config.PrimaryDatacenter != s.config.Datacenter { - versionOk, foundPrimary := ServersInDCMeetMinimumVersion(s, s.config.PrimaryDatacenter, minMultiDCConnectVersion) - if !foundPrimary { - connectLogger.Warn("primary datacenter is configured but unreachable - deferring initialization of the secondary datacenter CA") - // return nil because we will initialize the secondary CA later - return nil - } else if !versionOk { - // return nil because we will initialize the secondary CA later - connectLogger.Warn("servers in the primary datacenter are not at least at the minimum version - deferring initialization of the secondary datacenter CA", - "min_version", minMultiDCConnectVersion.String(), - ) - return nil - } - - // Get the root CA to see if we need to refresh our intermediate. - args := structs.DCSpecificRequest{ - Datacenter: s.config.PrimaryDatacenter, - } - var roots structs.IndexedCARoots - if err := s.forwardDC("ConnectCA.Roots", s.config.PrimaryDatacenter, &args, &roots); err != nil { - return err - } - - // Configure the CA provider and initialize the intermediate certificate if necessary. - if err := s.initializeSecondaryProvider(provider, roots); err != nil { - return fmt.Errorf("error configuring provider: %v", err) - } - if err := s.initializeSecondaryCA(provider, roots); err != nil { - return err - } - - connectLogger.Info("initialized secondary datacenter CA with provider", "provider", conf.Provider) - return nil - } - - return s.initializeRootCA(provider, conf) -} - -// initializeRootCA runs the initialization logic for a root CA. -// It is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) initializeRootCA(provider ca.Provider, conf *structs.CAConfiguration) error { - connectLogger := s.loggers.Named(logging.Connect) - pCfg := ca.ProviderConfig{ - ClusterID: conf.ClusterID, - Datacenter: s.config.Datacenter, - IsPrimary: true, - RawConfig: conf.Config, - State: conf.State, - } - if err := provider.Configure(pCfg); err != nil { - return fmt.Errorf("error configuring provider: %v", err) - } - if err := provider.GenerateRoot(); err != nil { - return fmt.Errorf("error generating CA root certificate: %v", err) - } - - // Get the active root cert from the CA - rootPEM, err := provider.ActiveRoot() - if err != nil { - return fmt.Errorf("error getting root cert: %v", err) - } - rootCA, err := parseCARoot(rootPEM, conf.Provider, conf.ClusterID) - if err != nil { - return err - } - - // Also create the intermediate CA, which is the one that actually signs leaf certs - interPEM, err := provider.GenerateIntermediate() - if err != nil { - return fmt.Errorf("error generating intermediate cert: %v", err) - } - _, err = connect.ParseCert(interPEM) - if err != nil { - return fmt.Errorf("error getting intermediate cert: %v", err) - } - - // If the provider has state to persist and it's changed or new then update - // CAConfig. - pState, err := provider.State() - if err != nil { - return fmt.Errorf("error getting provider state: %v", err) - } - if !reflect.DeepEqual(conf.State, pState) { - // Update the CAConfig in raft to persist the provider state - conf.State = pState - req := structs.CARequest{ - Op: structs.CAOpSetConfig, - Config: conf, - } - if _, err = s.raftApply(structs.ConnectCARequestType, req); err != nil { - return fmt.Errorf("error persisting provider state: %v", err) - } - } - - // Check if the CA root is already initialized and exit if it is, - // adding on any existing intermediate certs since they aren't directly - // tied to the provider. - // Every change to the CA after this initial bootstrapping should - // be done through the rotation process. - state := s.fsm.State() - _, activeRoot, err := state.CARootActive(nil) - if err != nil { - return err - } - if activeRoot != nil { - // This state shouldn't be possible to get into because we update the root and - // CA config in the same FSM operation. - if activeRoot.ID != rootCA.ID { - return fmt.Errorf("stored CA root %q is not the active root (%s)", rootCA.ID, activeRoot.ID) - } - - rootCA.IntermediateCerts = activeRoot.IntermediateCerts - s.setCAProvider(provider, rootCA) - - return nil - } - - // Get the highest index - idx, _, err := state.CARoots(nil) - if err != nil { - return err - } - - // Store the root cert in raft - resp, err := s.raftApply(structs.ConnectCARequestType, &structs.CARequest{ - Op: structs.CAOpSetRoots, - Index: idx, - Roots: []*structs.CARoot{rootCA}, - }) - if err != nil { - connectLogger.Error("Raft apply failed", "error", err) - return err - } - if respErr, ok := resp.(error); ok { - return respErr - } - - s.setCAProvider(provider, rootCA) - - connectLogger.Info("initialized primary datacenter CA with provider", "provider", conf.Provider) - - return nil -} - -// initializeSecondaryCA runs the routine for generating an intermediate CA CSR and getting -// it signed by the primary DC if the root CA of the primary DC has changed since the last -// intermediate. -// It is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) initializeSecondaryCA(provider ca.Provider, primaryRoots structs.IndexedCARoots) error { - activeIntermediate, err := provider.ActiveIntermediate() - if err != nil { - return err - } - - var ( - storedRootID string - expectedSigningKeyID string - currentSigningKeyID string - activeSecondaryRoot *structs.CARoot - ) - if activeIntermediate != "" { - // In the event that we already have an intermediate, we must have - // already replicated some primary root information locally, so check - // to see if we're up to date by fetching the rootID and the - // signingKeyID used in the secondary. - // - // Note that for the same rootID the primary representation of the root - // will have a different SigningKeyID field than the secondary - // representation of the same root. This is because it's derived from - // the intermediate which is different in all datacenters. - storedRoot, err := provider.ActiveRoot() - if err != nil { - return err - } - - storedRootID, err = connect.CalculateCertFingerprint(storedRoot) - if err != nil { - return fmt.Errorf("error parsing root fingerprint: %v, %#v", err, storedRoot) - } - - intermediateCert, err := connect.ParseCert(activeIntermediate) - if err != nil { - return fmt.Errorf("error parsing active intermediate cert: %v", err) - } - expectedSigningKeyID = connect.EncodeSigningKeyID(intermediateCert.SubjectKeyId) - - // This will fetch the secondary's exact current representation of the - // active root. Note that this data should only be used if the IDs - // match, otherwise it's out of date and should be regenerated. - _, activeSecondaryRoot, err = s.fsm.State().CARootActive(nil) - if err != nil { - return err - } - if activeSecondaryRoot != nil { - currentSigningKeyID = activeSecondaryRoot.SigningKeyID - } - } - - // Determine which of the provided PRIMARY representations of roots is the - // active one. We'll use this as a template to generate any new root - // representations meant for this secondary. - var newActiveRoot *structs.CARoot - for _, root := range primaryRoots.Roots { - if root.ID == primaryRoots.ActiveRootID && root.Active { - newActiveRoot = root - break - } - } - if newActiveRoot == nil { - return fmt.Errorf("primary datacenter does not have an active root CA for Connect") - } - - // Get a signed intermediate from the primary DC if the provider - // hasn't been initialized yet or if the primary's root has changed. - needsNewIntermediate := false - if activeIntermediate == "" || storedRootID != primaryRoots.ActiveRootID { - needsNewIntermediate = true - } - - // Also we take this opportunity to correct an incorrectly persisted SigningKeyID - // in secondary datacenters (see PR-6513). - if expectedSigningKeyID != "" && currentSigningKeyID != expectedSigningKeyID { - needsNewIntermediate = true - } - - newIntermediate := false - if needsNewIntermediate { - if err := s.getIntermediateCASigned(provider, newActiveRoot); err != nil { - return err - } - newIntermediate = true - } else { - // Discard the primary's representation since our local one is - // sufficiently up to date. - newActiveRoot = activeSecondaryRoot - } - - // Update the roots list in the state store if there's a new active root. - state := s.fsm.State() - _, activeRoot, err := state.CARootActive(nil) - if err != nil { - return err - } - if activeRoot == nil || activeRoot.ID != newActiveRoot.ID || newIntermediate { - if err := s.persistNewRoot(provider, newActiveRoot); err != nil { - return err - } - } - - s.setCAProvider(provider, newActiveRoot) - return nil -} - -// persistNewRoot is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) persistNewRoot(provider ca.Provider, newActiveRoot *structs.CARoot) error { - connectLogger := s.loggers.Named(logging.Connect) - state := s.fsm.State() - idx, oldRoots, err := state.CARoots(nil) - if err != nil { - return err - } - - _, config, err := state.CAConfig(nil) - if err != nil { - return err - } - if config == nil { - return fmt.Errorf("local CA not initialized yet") - } - newConf := *config - newConf.ClusterID = newActiveRoot.ExternalTrustDomain - - // Persist any state the provider needs us to - newConf.State, err = provider.State() - if err != nil { - return fmt.Errorf("error getting provider state: %v", err) - } - - // Copy the root list and append the new active root, updating the old root - // with the time it was rotated out. - var newRoots structs.CARoots - for _, r := range oldRoots { - newRoot := *r - if newRoot.Active { - newRoot.Active = false - newRoot.RotatedOutAt = time.Now() - } - if newRoot.ExternalTrustDomain == "" { - newRoot.ExternalTrustDomain = config.ClusterID - } - newRoots = append(newRoots, &newRoot) - } - newRoots = append(newRoots, newActiveRoot) - - args := &structs.CARequest{ - Op: structs.CAOpSetRootsAndConfig, - Index: idx, - Roots: newRoots, - Config: &newConf, - } - resp, err := s.raftApply(structs.ConnectCARequestType, &args) - if err != nil { - return err - } - if respErr, ok := resp.(error); ok { - return respErr - } - if respOk, ok := resp.(bool); ok && !respOk { - return fmt.Errorf("could not atomically update roots and config") - } - - connectLogger.Info("updated root certificates from primary datacenter") - return nil -} - -// getIntermediateCASigned is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) getIntermediateCASigned(provider ca.Provider, newActiveRoot *structs.CARoot) error { - connectLogger := s.loggers.Named(logging.Connect) - csr, err := provider.GenerateIntermediateCSR() - if err != nil { - return err - } - - var intermediatePEM string - if err := s.forwardDC("ConnectCA.SignIntermediate", s.config.PrimaryDatacenter, s.generateCASignRequest(csr), &intermediatePEM); err != nil { - // this is a failure in the primary and shouldn't be capable of erroring out our establishing leadership - connectLogger.Warn("Primary datacenter refused to sign our intermediate CA certificate", "error", err) - return nil - } - - if err := provider.SetIntermediate(intermediatePEM, newActiveRoot.RootCert); err != nil { - return fmt.Errorf("Failed to set the intermediate certificate with the CA provider: %v", err) - } - - intermediateCert, err := connect.ParseCert(intermediatePEM) - if err != nil { - return fmt.Errorf("error parsing intermediate cert: %v", err) - } - - // Append the new intermediate to our local active root entry. This is - // where the root representations start to diverge. - newActiveRoot.IntermediateCerts = append(newActiveRoot.IntermediateCerts, intermediatePEM) - newActiveRoot.SigningKeyID = connect.EncodeSigningKeyID(intermediateCert.SubjectKeyId) - - connectLogger.Info("received new intermediate certificate from primary datacenter") - return nil -} - -func (s *Server) generateCASignRequest(csr string) *structs.CASignRequest { - return &structs.CASignRequest{ - Datacenter: s.config.PrimaryDatacenter, - CSR: csr, - WriteRequest: structs.WriteRequest{Token: s.tokens.ReplicationToken()}, - } -} - -// startConnectLeader starts multi-dc connect leader routines. -func (s *Server) startConnectLeader() { - // Start the Connect secondary DC actions if enabled. - if s.config.ConnectEnabled && s.config.Datacenter != s.config.PrimaryDatacenter { - s.leaderRoutineManager.Start(secondaryCARootWatchRoutineName, s.secondaryCARootWatch) - s.leaderRoutineManager.Start(intentionReplicationRoutineName, s.replicateIntentions) - s.leaderRoutineManager.Start(secondaryCertRenewWatchRoutineName, s.secondaryIntermediateCertRenewalWatch) - } - - s.leaderRoutineManager.Start(caRootPruningRoutineName, s.runCARootPruning) -} - -// stopConnectLeader stops connect specific leader functions. -func (s *Server) stopConnectLeader() { - s.leaderRoutineManager.Stop(secondaryCARootWatchRoutineName) - s.leaderRoutineManager.Stop(intentionReplicationRoutineName) - s.leaderRoutineManager.Stop(caRootPruningRoutineName) -} - func (s *Server) runCARootPruning(ctx context.Context) error { ticker := time.NewTicker(caRootPruneInterval) defer ticker.Stop() @@ -640,136 +156,6 @@ return nil } -// secondaryIntermediateCertRenewalWatch checks the intermediate cert for -// expiration. As soon as more than half the time a cert is valid has passed, -// it will try to renew it. -func (s *Server) secondaryIntermediateCertRenewalWatch(ctx context.Context) error { - connectLogger := s.loggers.Named(logging.Connect) - - for { - select { - case <-ctx.Done(): - return nil - case <-time.After(structs.IntermediateCertRenewInterval): - retryLoopBackoff(ctx.Done(), func() error { - s.caProviderReconfigurationLock.Lock() - defer s.caProviderReconfigurationLock.Unlock() - - provider, _ := s.getCAProvider() - if provider == nil { - // this happens when leadership is being revoked and this go routine will be stopped - return nil - } - if !s.configuredSecondaryCA() { - return fmt.Errorf("secondary CA is not yet configured.") - } - - state := s.fsm.State() - _, activeRoot, err := state.CARootActive(nil) - if err != nil { - return err - } - - activeIntermediate, err := provider.ActiveIntermediate() - if err != nil { - return err - } - - if activeIntermediate == "" { - return fmt.Errorf("secondary datacenter doesn't have an active intermediate.") - } - - intermediateCert, err := connect.ParseCert(activeIntermediate) - if err != nil { - return fmt.Errorf("error parsing active intermediate cert: %v", err) - } - - if lessThanHalfTimePassed(time.Now(), intermediateCert.NotBefore, - intermediateCert.NotAfter) { - return nil - } - - if err := s.getIntermediateCASigned(provider, activeRoot); err != nil { - return err - } - - if err := s.persistNewRoot(provider, activeRoot); err != nil { - return err - } - - s.setCAProvider(provider, activeRoot) - return nil - }, func(err error) { - connectLogger.Error("error renewing intermediate certs", - "routine", secondaryCertRenewWatchRoutineName, - "error", err, - ) - }) - } - } -} - -// secondaryCARootWatch maintains a blocking query to the primary datacenter's -// ConnectCA.Roots endpoint to monitor when it needs to request a new signed -// intermediate certificate. -func (s *Server) secondaryCARootWatch(ctx context.Context) error { - connectLogger := s.loggers.Named(logging.Connect) - args := structs.DCSpecificRequest{ - Datacenter: s.config.PrimaryDatacenter, - QueryOptions: structs.QueryOptions{ - // the maximum time the primary roots watch query can block before returning - MaxQueryTime: s.config.MaxQueryTime, - }, - } - - connectLogger.Debug("starting Connect CA root replication from primary datacenter", "primary", s.config.PrimaryDatacenter) - - retryLoopBackoff(ctx.Done(), func() error { - var roots structs.IndexedCARoots - if err := s.forwardDC("ConnectCA.Roots", s.config.PrimaryDatacenter, &args, &roots); err != nil { - return fmt.Errorf("Error retrieving the primary datacenter's roots: %v", err) - } - - // Check to see if the primary has been upgraded in case we're waiting to switch to - // secondary mode. - provider, _ := s.getCAProvider() - if provider == nil { - // this happens when leadership is being revoked and this go routine will be stopped - return nil - } - if !s.configuredSecondaryCA() { - versionOk, primaryFound := ServersInDCMeetMinimumVersion(s, s.config.PrimaryDatacenter, minMultiDCConnectVersion) - if !primaryFound { - return fmt.Errorf("Primary datacenter is unreachable - deferring secondary CA initialization") - } - - if versionOk { - if err := s.initializeSecondaryProvider(provider, roots); err != nil { - return fmt.Errorf("Failed to initialize secondary CA provider: %v", err) - } - } - } - - // Run the secondary CA init routine to see if we need to request a new - // intermediate. - if s.configuredSecondaryCA() { - if err := s.initializeSecondaryCA(provider, roots); err != nil { - return fmt.Errorf("Failed to initialize the secondary CA: %v", err) - } - } - - args.QueryOptions.MinQueryIndex = nextIndexVal(args.QueryOptions.MinQueryIndex, roots.QueryMeta.Index) - return nil - }, func(err error) { - connectLogger.Error("CA root replication failed, will retry", - "routine", secondaryCARootWatchRoutineName, - "error", err, - ) - }) - - return nil -} - // replicateIntentions executes a blocking query to the primary datacenter to replicate // the intentions there to the local state. func (s *Server) replicateIntentions(ctx context.Context) error { @@ -780,7 +166,7 @@ connectLogger.Debug("starting Connect intention replication from primary datacenter", "primary", s.config.PrimaryDatacenter) - retryLoopBackoff(ctx.Done(), func() error { + retryLoopBackoff(ctx, func() error { // Always use the latest replication token value in case it changed while looping. args.QueryOptions.Token = s.tokens.ReplicationToken() @@ -832,14 +218,22 @@ // retryLoopBackoff loops a given function indefinitely, backing off exponentially // upon errors up to a maximum of maxRetryBackoff seconds. -func retryLoopBackoff(stopCh <-chan struct{}, loopFn func() error, errFn func(error)) { +func retryLoopBackoff(ctx context.Context, loopFn func() error, errFn func(error)) { + retryLoopBackoffHandleSuccess(ctx, loopFn, errFn, false) +} + +func retryLoopBackoffAbortOnSuccess(ctx context.Context, loopFn func() error, errFn func(error)) { + retryLoopBackoffHandleSuccess(ctx, loopFn, errFn, true) +} + +func retryLoopBackoffHandleSuccess(ctx context.Context, loopFn func() error, errFn func(error), abortOnSuccess bool) { var failedAttempts uint limiter := rate.NewLimiter(loopRateLimit, retryBucketSize) for { // Rate limit how often we run the loop - limiter.Wait(context.Background()) + limiter.Wait(ctx) select { - case <-stopCh: + case <-ctx.Done(): return default: } @@ -850,8 +244,17 @@ if err := loopFn(); err != nil { errFn(err) - time.Sleep(retryTime) - continue + + timer := time.NewTimer(retryTime) + select { + case <-ctx.Done(): + timer.Stop() + return + case <-timer.C: + continue + } + } else if abortOnSuccess { + return } // Reset the failed attempts after a successful run. @@ -941,46 +344,6 @@ return idx } -// initializeSecondaryProvider configures the given provider for a secondary, non-root datacenter. -// It is being called while holding caProviderReconfigurationLock which means -// it must never take that lock itself or call anything that does. -func (s *Server) initializeSecondaryProvider(provider ca.Provider, roots structs.IndexedCARoots) error { - if roots.TrustDomain == "" { - return fmt.Errorf("trust domain from primary datacenter is not initialized") - } - - clusterID := strings.Split(roots.TrustDomain, ".")[0] - _, conf, err := s.fsm.State().CAConfig(nil) - if err != nil { - return err - } - - pCfg := ca.ProviderConfig{ - ClusterID: clusterID, - Datacenter: s.config.Datacenter, - IsPrimary: false, - RawConfig: conf.Config, - State: conf.State, - } - if err := provider.Configure(pCfg); err != nil { - return fmt.Errorf("error configuring provider: %v", err) - } - - s.actingSecondaryLock.Lock() - s.actingSecondaryCA = true - s.actingSecondaryLock.Unlock() - - return nil -} - -// configuredSecondaryCA is being called while holding caProviderReconfigurationLock -// which means it must never take that lock itself or call anything that does. -func (s *Server) configuredSecondaryCA() bool { - s.actingSecondaryLock.RLock() - defer s.actingSecondaryLock.RUnlock() - return s.actingSecondaryCA -} - // halfTime returns a duration that is half the time between notBefore and // notAfter. func halfTime(notBefore, notAfter time.Time) time.Duration { @@ -996,3 +359,11 @@ t := notBefore.Add(halfTime(notBefore, notAfter)) return t.Sub(now) > 0 } + +func (s *Server) generateCASignRequest(csr string) *structs.CASignRequest { + return &structs.CASignRequest{ + Datacenter: s.config.PrimaryDatacenter, + CSR: csr, + WriteRequest: structs.WriteRequest{Token: s.tokens.ReplicationToken()}, + } +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_connect_test.go consul-1.8.7+dfsg1/agent/consul/leader_connect_test.go --- consul-1.7.4+dfsg1/agent/consul/leader_connect_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_connect_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package consul import ( + "context" "crypto/x509" "fmt" "io/ioutil" @@ -12,7 +13,7 @@ "time" "github.com/hashicorp/consul/agent/connect" - ca "github.com/hashicorp/consul/agent/connect/ca" + "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" tokenStore "github.com/hashicorp/consul/agent/token" @@ -80,11 +81,11 @@ s2.tokens.UpdateAgentToken(masterToken, token.TokenSourceConfig) s2.tokens.UpdateReplicationToken(masterToken, token.TokenSourceConfig) - testrpc.WaitForLeader(t, s2.RPC, "secondary") - // Create the WAN link joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s2.RPC, "secondary") + waitForNewACLs(t, s1) waitForNewACLs(t, s2) @@ -99,8 +100,8 @@ err error ) retry.Run(t, func(r *retry.R) { - _, caRoot = s1.getCAProvider() - secondaryProvider, _ = s2.getCAProvider() + _, caRoot = getCAProviderWithLock(s1) + secondaryProvider, _ = getCAProviderWithLock(s2) intermediatePEM, err = secondaryProvider.ActiveIntermediate() require.NoError(r, err) @@ -164,7 +165,7 @@ func waitForActiveCARoot(t *testing.T, srv *Server, expect *structs.CARoot) { retry.Run(t, func(r *retry.R) { - _, root := srv.getCAProvider() + _, root := getCAProviderWithLock(srv) if root == nil { r.Fatal("no root") } @@ -174,6 +175,123 @@ }) } +func getCAProviderWithLock(s *Server) (ca.Provider, *structs.CARoot) { + return s.caManager.getCAProvider() +} + +func TestLeader_Vault_PrimaryCA_IntermediateRenew(t *testing.T) { + ca.SkipIfVaultNotPresent(t) + + // no parallel execution because we change globals + origInterval := structs.IntermediateCertRenewInterval + origMinTTL := structs.MinLeafCertTTL + origDriftBuffer := ca.CertificateTimeDriftBuffer + defer func() { + structs.IntermediateCertRenewInterval = origInterval + structs.MinLeafCertTTL = origMinTTL + ca.CertificateTimeDriftBuffer = origDriftBuffer + }() + + // Vault backdates certs by 30s by default. + ca.CertificateTimeDriftBuffer = 30 * time.Second + structs.IntermediateCertRenewInterval = time.Millisecond + structs.MinLeafCertTTL = time.Second + require := require.New(t) + + testVault := ca.NewTestVaultServer(t) + defer testVault.Stop() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.Build = "1.6.0" + c.PrimaryDatacenter = "dc1" + c.CAConfig = &structs.CAConfiguration{ + Provider: "vault", + Config: map[string]interface{}{ + "Address": testVault.Addr, + "Token": testVault.RootToken, + "RootPKIPath": "pki-root/", + "IntermediatePKIPath": "pki-intermediate/", + "LeafCertTTL": "1s", + // The retry loop only retries for 7sec max and + // the ttl needs to be below so that it + // triggers definitely. + "IntermediateCertTTL": "5s", + }, + } + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + // Capture the current root. + var originalRoot *structs.CARoot + { + rootList, activeRoot, err := getTestRoots(s1, "dc1") + require.NoError(err) + require.Len(rootList.Roots, 1) + originalRoot = activeRoot + } + + // Get the original intermediate. + waitForActiveCARoot(t, s1, originalRoot) + provider, _ := getCAProviderWithLock(s1) + intermediatePEM, err := provider.ActiveIntermediate() + require.NoError(err) + _, err = connect.ParseCert(intermediatePEM) + require.NoError(err) + + // Wait for dc1's intermediate to be refreshed. + // It is possible that test fails when the blocking query doesn't return. + retry.Run(t, func(r *retry.R) { + provider, _ = getCAProviderWithLock(s1) + newIntermediatePEM, err := provider.ActiveIntermediate() + r.Check(err) + _, err = connect.ParseCert(intermediatePEM) + r.Check(err) + if newIntermediatePEM == intermediatePEM { + r.Fatal("not a renewed intermediate") + } + intermediatePEM = newIntermediatePEM + }) + require.NoError(err) + + // Get the root from dc1 and validate a chain of: + // dc1 leaf -> dc1 intermediate -> dc1 root + provider, caRoot := getCAProviderWithLock(s1) + + // Have the new intermediate sign a leaf cert and make sure the chain is correct. + spiffeService := &connect.SpiffeIDService{ + Host: "node1", + Namespace: "default", + Datacenter: "dc1", + Service: "foo", + } + raw, _ := connect.TestCSR(t, spiffeService) + + leafCsr, err := connect.ParseCSR(raw) + require.NoError(err) + + leafPEM, err := provider.Sign(leafCsr) + require.NoError(err) + + cert, err := connect.ParseCert(leafPEM) + require.NoError(err) + + // Check that the leaf signed by the new intermediate can be verified using the + // returned cert chain (signed intermediate + remote root). + intermediatePool := x509.NewCertPool() + intermediatePool.AppendCertsFromPEM([]byte(intermediatePEM)) + rootPool := x509.NewCertPool() + rootPool.AppendCertsFromPEM([]byte(caRoot.RootCert)) + + _, err = cert.Verify(x509.VerifyOptions{ + Intermediates: intermediatePool, + Roots: rootPool, + }) + require.NoError(err) +} + func TestLeader_SecondaryCA_IntermediateRenew(t *testing.T) { // no parallel execution because we change globals origInterval := structs.IntermediateCertRenewInterval @@ -226,7 +344,8 @@ testrpc.WaitForLeader(t, s2.RPC, "dc2") // Get the original intermediate - secondaryProvider, _ := s2.getCAProvider() + // TODO: Wait for intermediate instead of wait for leader + secondaryProvider, _ := getCAProviderWithLock(s2) intermediatePEM, err := secondaryProvider.ActiveIntermediate() require.NoError(err) cert, err := connect.ParseCert(intermediatePEM) @@ -252,7 +371,7 @@ // however, defaultQueryTime will be configurable and we con lower it // so that it returns for sure. retry.Run(t, func(r *retry.R) { - secondaryProvider, _ := s2.getCAProvider() + secondaryProvider, _ = getCAProviderWithLock(s2) intermediatePEM, err = secondaryProvider.ActiveIntermediate() r.Check(err) cert, err := connect.ParseCert(intermediatePEM) @@ -265,9 +384,9 @@ }) require.NoError(err) - // Get the new root from dc1 and validate a chain of: + // Get the root from dc1 and validate a chain of: // dc2 leaf -> dc2 intermediate -> dc1 root - _, caRoot := s1.getCAProvider() + _, caRoot := getCAProviderWithLock(s1) // Have dc2 sign a leaf cert and make sure the chain is correct. spiffeService := &connect.SpiffeIDService{ @@ -328,7 +447,7 @@ testrpc.WaitForLeader(t, s2.RPC, "dc2") // Get the original intermediate - secondaryProvider, _ := s2.getCAProvider() + secondaryProvider, _ := getCAProviderWithLock(s2) oldIntermediatePEM, err := secondaryProvider.ActiveIntermediate() require.NoError(err) require.NotEmpty(oldIntermediatePEM) @@ -414,7 +533,7 @@ // Get the new root from dc1 and validate a chain of: // dc2 leaf -> dc2 intermediate -> dc1 root - _, caRoot := s1.getCAProvider() + _, caRoot := getCAProviderWithLock(s1) // Have dc2 sign a leaf cert and make sure the chain is correct. spiffeService := &connect.SpiffeIDService{ @@ -523,7 +642,7 @@ // the CA provider anyway. retry.Run(t, func(r *retry.R) { // verify that the root is now corrected - provider, activeRoot := s2.getCAProvider() + provider, activeRoot := getCAProviderWithLock(s2) require.NotNil(r, provider) require.NotNil(r, activeRoot) @@ -582,22 +701,6 @@ require.NoError(t, s2.RPC("ConnectCA.Roots", &args, &dc2PrimaryRoots)) require.Len(t, dc2PrimaryRoots.Roots, 1) - // Set the ExternalTrustDomain to a blank string to simulate an old version (pre-1.4.0) - // it's fine to change the roots struct directly here because the RPC endpoint already - // makes a copy to return. - dc2PrimaryRoots.Roots[0].ExternalTrustDomain = "" - rootSetArgs := structs.CARequest{ - Op: structs.CAOpSetRoots, - Datacenter: "dc2", - Index: dc2PrimaryRoots.Index, - Roots: dc2PrimaryRoots.Roots, - } - resp, err := s2.raftApply(structs.ConnectCARequestType, rootSetArgs) - require.NoError(t, err) - if respErr, ok := resp.(error); ok { - t.Fatal(respErr) - } - // Shutdown s2 and restart it with the dc1 as the primary s2.Shutdown() dir3, s3 := testServerWithConfig(t, func(c *Config) { @@ -708,7 +811,7 @@ // Wait for the secondary transition to happen and then verify the secondary DC // has both roots present. - secondaryProvider, _ := s2.getCAProvider() + secondaryProvider, _ := getCAProviderWithLock(s2) retry.Run(t, func(r *retry.R) { state1 := s1.fsm.State() _, roots1, err := state1.CARoots(nil) @@ -729,7 +832,7 @@ require.NotEmpty(r, inter, "should have valid intermediate") }) - _, caRoot := s1.getCAProvider() + _, caRoot := getCAProviderWithLock(s1) intermediatePEM, err := secondaryProvider.ActiveIntermediate() require.NoError(t, err) @@ -1324,7 +1427,7 @@ } // Get the active root before leader change. - _, root := s1.getCAProvider() + _, root := getCAProviderWithLock(s1) require.Len(root.IntermediateCerts, 1) // Force a leader change and make sure the root CA values are preserved. @@ -1343,7 +1446,7 @@ r.Fatal("no leader") } - _, newLeaderRoot := leader.getCAProvider() + _, newLeaderRoot := getCAProviderWithLock(leader) if !reflect.DeepEqual(newLeaderRoot, root) { r.Fatalf("got %v, want %v", newLeaderRoot, root) } @@ -1442,3 +1545,43 @@ require.True(t, lessThanHalfTimePassed(now, now.Add(-10*time.Second), now.Add(20*time.Second))) } + +func TestLeader_retryLoopBackoffHandleSuccess(t *testing.T) { + type test struct { + desc string + loopFn func() error + abort bool + timedOut bool + } + success := func() error { + return nil + } + failure := func() error { + return fmt.Errorf("test error") + } + tests := []test{ + {"loop without error and no abortOnSuccess keeps running", success, false, true}, + {"loop with error and no abortOnSuccess keeps running", failure, false, true}, + {"loop without error and abortOnSuccess is stopped", success, true, false}, + {"loop with error and abortOnSuccess keeps running", failure, true, true}, + } + for _, tc := range tests { + tc := tc + t.Run(tc.desc, func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) + defer cancel() + + retryLoopBackoffHandleSuccess(ctx, tc.loopFn, func(_ error) {}, tc.abort) + select { + case <-ctx.Done(): + if !tc.timedOut { + t.Fatal("should not have timed out") + } + default: + if tc.timedOut { + t.Fatal("should have timed out") + } + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_federation_state_ae.go consul-1.8.7+dfsg1/agent/consul/leader_federation_state_ae.go --- consul-1.7.4+dfsg1/agent/consul/leader_federation_state_ae.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_federation_state_ae.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,228 @@ +package consul + +import ( + "context" + "fmt" + "time" + + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + memdb "github.com/hashicorp/go-memdb" +) + +const ( + // federationStatePruneInterval is how often we check for stale federation + // states to remove should a datacenter be removed from the WAN. + federationStatePruneInterval = time.Hour +) + +func (s *Server) startFederationStateAntiEntropy() { + if s.config.DisableFederationStateAntiEntropy { + return + } + s.leaderRoutineManager.Start(federationStateAntiEntropyRoutineName, s.federationStateAntiEntropySync) + + // If this is the primary, then also prune any stale datacenters from the + // list of federation states. + if s.config.PrimaryDatacenter == s.config.Datacenter { + s.leaderRoutineManager.Start(federationStatePruningRoutineName, s.federationStatePruning) + } +} + +func (s *Server) stopFederationStateAntiEntropy() { + if s.config.DisableFederationStateAntiEntropy { + return + } + s.leaderRoutineManager.Stop(federationStateAntiEntropyRoutineName) + if s.config.PrimaryDatacenter == s.config.Datacenter { + s.leaderRoutineManager.Stop(federationStatePruningRoutineName) + } +} + +func (s *Server) federationStateAntiEntropySync(ctx context.Context) error { + var lastFetchIndex uint64 + + retryLoopBackoff(ctx, func() error { + if !s.DatacenterSupportsFederationStates() { + return nil + } + + idx, err := s.federationStateAntiEntropyMaybeSync(ctx, lastFetchIndex) + if err != nil { + return err + } + + lastFetchIndex = idx + return nil + }, func(err error) { + s.logger.Error("error performing anti-entropy sync of federation state", "error", err) + }) + + return nil +} + +func (s *Server) federationStateAntiEntropyMaybeSync(ctx context.Context, lastFetchIndex uint64) (uint64, error) { + queryOpts := &structs.QueryOptions{ + MinQueryIndex: lastFetchIndex, + RequireConsistent: true, + // This is just for a local blocking query so no token is needed. + } + idx, prev, curr, err := s.fetchFederationStateAntiEntropyDetails(queryOpts) + if err != nil { + return 0, err + } + + // We should check to see if our context was cancelled while we were blocked. + select { + case <-ctx.Done(): + return 0, ctx.Err() + default: + } + + if prev != nil && prev.IsSame(curr) { + s.logger.Trace("federation state anti-entropy sync skipped; already up to date") + return idx, nil + } + + if err := s.updateOurFederationState(curr); err != nil { + return 0, fmt.Errorf("error performing federation state anti-entropy sync: %v", err) + } + + s.logger.Info("federation state anti-entropy synced") + + return idx, nil +} + +func (s *Server) updateOurFederationState(curr *structs.FederationState) error { + if curr.Datacenter != s.config.Datacenter { // sanity check + return fmt.Errorf("cannot use this mechanism to update federation states for other datacenters") + } + + curr.UpdatedAt = time.Now().UTC() + + args := structs.FederationStateRequest{ + Op: structs.FederationStateUpsert, + State: curr, + } + + if s.config.Datacenter == s.config.PrimaryDatacenter { + // We are the primary, so we can't do an RPC as we don't have a replication token. + resp, err := s.raftApply(structs.FederationStateRequestType, args) + if err != nil { + return err + } + if respErr, ok := resp.(error); ok { + return respErr + } + } else { + args.WriteRequest = structs.WriteRequest{ + Token: s.tokens.ReplicationToken(), + } + ignored := false + if err := s.forwardDC("FederationState.Apply", s.config.PrimaryDatacenter, &args, &ignored); err != nil { + return err + } + } + + return nil +} + +func (s *Server) fetchFederationStateAntiEntropyDetails( + queryOpts *structs.QueryOptions, +) (uint64, *structs.FederationState, *structs.FederationState, error) { + var ( + prevFedState, currFedState *structs.FederationState + queryMeta structs.QueryMeta + ) + err := s.blockingQuery( + queryOpts, + &queryMeta, + func(ws memdb.WatchSet, state *state.Store) error { + // Get the existing stored version of this FedState that has replicated down. + // We could phone home to get this but that would incur extra WAN traffic + // when we already have enough information locally to figure it out + // (assuming that our replicator is still functioning). + idx1, prev, err := state.FederationStateGet(ws, s.config.Datacenter) + if err != nil { + return err + } + + // Fetch our current list of all mesh gateways. + entMeta := structs.WildcardEnterpriseMeta() + idx2, raw, err := state.ServiceDump(ws, structs.ServiceKindMeshGateway, true, entMeta) + if err != nil { + return err + } + + curr := &structs.FederationState{ + Datacenter: s.config.Datacenter, + MeshGateways: raw, + } + + // Compute the maximum index seen. + if idx2 > idx1 { + queryMeta.Index = idx2 + } else { + queryMeta.Index = idx1 + } + + prevFedState = prev + currFedState = curr + + return nil + }) + if err != nil { + return 0, nil, nil, err + } + + return queryMeta.Index, prevFedState, currFedState, nil +} + +func (s *Server) federationStatePruning(ctx context.Context) error { + ticker := time.NewTicker(federationStatePruneInterval) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return nil + case <-ticker.C: + if err := s.pruneStaleFederationStates(); err != nil { + s.logger.Error("error pruning stale federation states", "error", err) + } + } + } +} + +func (s *Server) pruneStaleFederationStates() error { + state := s.fsm.State() + _, fedStates, err := state.FederationStateList(nil) + if err != nil { + return err + } + + for _, fedState := range fedStates { + dc := fedState.Datacenter + if s.router.HasDatacenter(dc) { + continue + } + + s.logger.Info("pruning stale federation state", "datacenter", dc) + + req := structs.FederationStateRequest{ + Op: structs.FederationStateDelete, + State: &structs.FederationState{ + Datacenter: dc, + }, + } + resp, err := s.raftApply(structs.FederationStateRequestType, &req) + if err != nil { + return fmt.Errorf("Failed to delete federation state %s: %v", dc, err) + } + if respErr, ok := resp.(error); ok { + return fmt.Errorf("Failed to delete federation state %s: %v", dc, respErr) + } + } + + return nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_federation_state_ae_test.go consul-1.8.7+dfsg1/agent/consul/leader_federation_state_ae_test.go --- consul-1.7.4+dfsg1/agent/consul/leader_federation_state_ae_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_federation_state_ae_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,351 @@ +package consul + +import ( + "os" + "testing" + "time" + + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/hashicorp/consul/testrpc" + "github.com/stretchr/testify/require" +) + +func TestLeader_FederationStateAntiEntropy_BlockingQuery(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + testrpc.WaitForLeader(t, s1.RPC, "dc1") + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.FederationStateReplicationRate = 100 + c.FederationStateReplicationBurst = 100 + c.FederationStateReplicationApplyLimit = 1000000 + c.DisableFederationStateAntiEntropy = true + }) + testrpc.WaitForLeader(t, s2.RPC, "dc2") + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Try to join. + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + checkSame := func(t *testing.T, expectN, expectGatewaysInDC2 int) { + t.Helper() + retry.Run(t, func(r *retry.R) { + _, remote, err := s1.fsm.State().FederationStateList(nil) + require.NoError(r, err) + require.Len(r, remote, expectN) + + _, local, err := s2.fsm.State().FederationStateList(nil) + require.NoError(r, err) + require.Len(r, local, expectN) + + var fs2 *structs.FederationState + for _, fs := range local { + if fs.Datacenter == "dc2" { + fs2 = fs + break + } + } + if expectGatewaysInDC2 < 0 { + require.Nil(r, fs2) + } else { + require.NotNil(r, fs2) + require.Len(r, fs2.MeshGateways, expectGatewaysInDC2) + } + }) + } + + gatewayCSN1 := newTestMeshGatewayNode( + "dc2", "gateway1", "1.2.3.4", 443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ) + gatewayCSN2 := newTestMeshGatewayNode( + "dc2", "gateway2", "4.3.2.1", 443, map[string]string{structs.MetaWANFederationKey: "1"}, api.HealthPassing, + ) + + // populate with some stuff + makeFedState := func(t *testing.T, dc string, csn ...structs.CheckServiceNode) { + t.Helper() + arg := structs.FederationStateRequest{ + Datacenter: "dc1", + Op: structs.FederationStateUpsert, + State: &structs.FederationState{ + Datacenter: dc, + MeshGateways: csn, + UpdatedAt: time.Now().UTC(), + }, + } + + out := false + require.NoError(t, s1.RPC("FederationState.Apply", &arg, &out)) + } + + makeGateways := func(t *testing.T, csn structs.CheckServiceNode) { + t.Helper() + const dc = "dc2" + + arg := structs.RegisterRequest{ + Datacenter: csn.Node.Datacenter, + Node: csn.Node.Node, + Address: csn.Node.Address, + Service: csn.Service, + Checks: csn.Checks, + } + var out struct{} + require.NoError(t, s2.RPC("Catalog.Register", &arg, &out)) + } + + type result struct { + idx uint64 + prev, curr *structs.FederationState + err error + } + + blockAgain := func(last uint64) <-chan result { + ch := make(chan result, 1) + go func() { + var res result + res.idx, res.prev, res.curr, res.err = s2.fetchFederationStateAntiEntropyDetails(&structs.QueryOptions{ + MinQueryIndex: last, + RequireConsistent: true, + }) + ch <- res + }() + return ch + } + + // wait for the primary to do one round of AE and replicate it + checkSame(t, 1, -1) + + // // wait for change to be reflected as well + // makeFedState(t, "dc2") + // checkSame(t, 1) + + // Do the initial fetch (len0 local gateways, upstream has nil fedstate) + res0 := <-blockAgain(0) + require.NoError(t, res0.err) + + ch := blockAgain(res0.idx) + + // bump the local mesh gateways; should unblock query + makeGateways(t, gatewayCSN1) + + res1 := <-ch + require.NoError(t, res1.err) + require.NotEqual(t, res1.idx, res0.idx) + require.Nil(t, res1.prev) + require.Len(t, res1.curr.MeshGateways, 1) + + checkSame(t, 1, -1) // no fed state update yet + + ch = blockAgain(res1.idx) + + // do manual AE + makeFedState(t, "dc2", gatewayCSN1) + + res2 := <-ch + require.NoError(t, res2.err) + require.NotEqual(t, res2.idx, res1.idx) + require.Len(t, res2.prev.MeshGateways, 1) + require.Len(t, res2.curr.MeshGateways, 1) + + checkSame(t, 2, 1) + + ch = blockAgain(res2.idx) + + // add another local mesh gateway + makeGateways(t, gatewayCSN2) + + res3 := <-ch + require.NoError(t, res3.err) + require.NotEqual(t, res3.idx, res2.idx) + require.Len(t, res3.prev.MeshGateways, 1) + require.Len(t, res3.curr.MeshGateways, 2) + + checkSame(t, 2, 1) + + ch = blockAgain(res3.idx) + + // do manual AE + makeFedState(t, "dc2", gatewayCSN1, gatewayCSN2) + + res4 := <-ch + require.NoError(t, res4.err) + require.NotEqual(t, res4.idx, res3.idx) + require.Len(t, res4.prev.MeshGateways, 2) + require.Len(t, res4.curr.MeshGateways, 2) + + checkSame(t, 2, 2) +} + +func TestLeader_FederationStateAntiEntropyPruning(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + testrpc.WaitForLeader(t, s1.RPC, "dc1") + client := rpcClient(t, s1) + defer client.Close() + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + }) + testrpc.WaitForLeader(t, s2.RPC, "dc2") + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Try to join. + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + checkSame := func(r *retry.R) error { + _, remote, err := s1.fsm.State().FederationStateList(nil) + require.NoError(r, err) + _, local, err := s2.fsm.State().FederationStateList(nil) + require.NoError(r, err) + + require.Len(r, remote, 2) + require.Len(r, local, 2) + for i, _ := range remote { + // zero out the raft data for future comparisons + remote[i].RaftIndex = structs.RaftIndex{} + local[i].RaftIndex = structs.RaftIndex{} + require.Equal(r, remote[i], local[i]) + } + return nil + } + + // Wait for the replica to converge. + retry.Run(t, func(r *retry.R) { + checkSame(r) + }) + + // Now leave and shutdown dc2. + require.NoError(t, s2.Leave()) + require.NoError(t, s2.Shutdown()) + + // Wait until we know the router is updated. + retry.Run(t, func(r *retry.R) { + dcs := s1.router.GetDatacenters() + require.Len(r, dcs, 1) + require.Equal(r, "dc1", dcs[0]) + }) + + // Since the background routine is going to run every hour, it likely is + // not going to run during this test, so it's safe to directly invoke the + // core method. + require.NoError(t, s1.pruneStaleFederationStates()) + + // Wait for dc2 to drop out. + retry.Run(t, func(r *retry.R) { + _, mine, err := s1.fsm.State().FederationStateList(nil) + require.NoError(r, err) + + require.Len(r, mine, 1) + require.Equal(r, "dc1", mine[0].Datacenter) + }) +} + +func TestLeader_FederationStateAntiEntropyPruning_ACLDeny(t *testing.T) { + t.Parallel() + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.PrimaryDatacenter = "dc1" + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + testrpc.WaitForLeader(t, s1.RPC, "dc1") + client := rpcClient(t, s1) + defer client.Close() + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "deny" + }) + testrpc.WaitForLeader(t, s2.RPC, "dc2") + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Try to join. + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + // Create the ACL token. + opWriteToken, err := upsertTestTokenWithPolicyRules(client, "root", "dc1", `operator = "write"`) + require.NoError(t, err) + + require.True(t, s1.tokens.UpdateReplicationToken(opWriteToken.SecretID, token.TokenSourceAPI)) + require.True(t, s2.tokens.UpdateReplicationToken(opWriteToken.SecretID, token.TokenSourceAPI)) + + checkSame := func(r *retry.R) error { + _, remote, err := s1.fsm.State().FederationStateList(nil) + require.NoError(r, err) + _, local, err := s2.fsm.State().FederationStateList(nil) + require.NoError(r, err) + + require.Len(r, remote, 2) + require.Len(r, local, 2) + for i, _ := range remote { + // zero out the raft data for future comparisons + remote[i].RaftIndex = structs.RaftIndex{} + local[i].RaftIndex = structs.RaftIndex{} + require.Equal(r, remote[i], local[i]) + } + return nil + } + + // Wait for the replica to converge. + retry.Run(t, func(r *retry.R) { + checkSame(r) + }) + + // Now leave and shutdown dc2. + require.NoError(t, s2.Leave()) + require.NoError(t, s2.Shutdown()) + + // Wait until we know the router is updated. + retry.Run(t, func(r *retry.R) { + dcs := s1.router.GetDatacenters() + require.Len(r, dcs, 1) + require.Equal(r, "dc1", dcs[0]) + }) + + // Since the background routine is going to run every hour, it likely is + // not going to run during this test, so it's safe to directly invoke the + // core method. + require.NoError(t, s1.pruneStaleFederationStates()) + + // Wait for dc2 to drop out. + retry.Run(t, func(r *retry.R) { + _, mine, err := s1.fsm.State().FederationStateList(nil) + require.NoError(r, err) + + require.Len(r, mine, 1) + require.Equal(r, "dc1", mine[0].Datacenter) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader.go consul-1.8.7+dfsg1/agent/consul/leader.go --- consul-1.7.4+dfsg1/agent/consul/leader.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,6 +4,7 @@ "context" "fmt" "net" + "reflect" "strconv" "sync" "sync/atomic" @@ -333,13 +334,16 @@ s.getOrCreateAutopilotConfig() s.autopilot.Start() - // todo(kyhavlov): start a goroutine here for handling periodic CA rotation - if err := s.initializeCA(); err != nil { + if err := s.caManager.InitializeCA(); err != nil { return err } s.startConfigReplication() + s.startFederationStateReplication() + + s.startFederationStateAntiEntropy() + s.startConnectLeader() s.setConsistentReadReady() @@ -358,11 +362,16 @@ s.revokeEnterpriseLeadership() + s.stopFederationStateAntiEntropy() + + s.stopFederationStateReplication() + s.stopConfigReplication() s.stopConnectLeader() - s.setCAProvider(nil, nil) + s.caManager.setCAProvider(nil, nil) + s.caManager.setState(CAStateUninitialized, false) s.stopACLTokenReaping() @@ -722,6 +731,7 @@ // Assign the global-management policy to legacy management tokens if len(newToken.Policies) == 0 && len(newToken.ServiceIdentities) == 0 && + len(newToken.NodeIdentities) == 0 && len(newToken.Roles) == 0 && newToken.Type == structs.ACLTokenTypeManagement { newToken.Policies = append(newToken.Policies, structs.ACLTokenPolicyLink{ID: structs.ACLPolicyGlobalManagementID}) @@ -946,6 +956,20 @@ s.leaderRoutineManager.Stop(configReplicationRoutineName) } +func (s *Server) startFederationStateReplication() { + if s.config.PrimaryDatacenter == "" || s.config.PrimaryDatacenter == s.config.Datacenter { + // replication shouldn't run in the primary DC + return + } + + s.leaderRoutineManager.Start(federationStateReplicationRoutineName, s.federationStateReplicator.Run) +} + +func (s *Server) stopFederationStateReplication() { + // will be a no-op when not started + s.leaderRoutineManager.Stop(federationStateReplicationRoutineName) +} + // getOrCreateAutopilotConfig is used to get the autopilot config, initializing it if necessary func (s *Server) getOrCreateAutopilotConfig() *autopilot.Config { logger := s.loggers.Named(logging.Autopilot) @@ -1160,6 +1184,7 @@ Warning: 1, }, Meta: map[string]string{ + "non_voter": strconv.FormatBool(member.Tags["non_voter"] == "true"), "raft_version": strconv.Itoa(parts.RaftVersion), "serf_protocol_current": strconv.FormatUint(uint64(member.ProtocolCur), 10), "serf_protocol_min": strconv.FormatUint(uint64(member.ProtocolMin), 10), @@ -1189,9 +1214,10 @@ return err } if services != nil { - for id := range services.Services { + for id, serv := range services.Services { if id == service.ID { - match = true + // If metadata are different, be sure to update it + match = reflect.DeepEqual(serv.Meta, service.Meta) } } } @@ -1507,3 +1533,64 @@ ) } } + +func (s *Server) DatacenterSupportsFederationStates() bool { + if atomic.LoadInt32(&s.dcSupportsFederationStates) != 0 { + return true + } + + state := serversFederationStatesInfo{ + supported: true, + found: false, + } + + // check if they are supported in the primary dc + if s.config.PrimaryDatacenter != s.config.Datacenter { + s.router.CheckServers(s.config.PrimaryDatacenter, state.update) + + if !state.supported || !state.found { + s.logger.Debug("federation states are not enabled in the primary dc") + return false + } + } + + // check the servers in the local DC + s.router.CheckServers(s.config.Datacenter, state.update) + + if state.supported && state.found { + atomic.StoreInt32(&s.dcSupportsFederationStates, 1) + return true + } + + s.logger.Debug("federation states are not enabled in this datacenter", "datacenter", s.config.Datacenter) + return false +} + +type serversFederationStatesInfo struct { + // supported indicates whether every processed server supports federation states + supported bool + + // found indicates that at least one server was processed + found bool +} + +func (s *serversFederationStatesInfo) update(srv *metadata.Server) bool { + if srv.Status != serf.StatusAlive && srv.Status != serf.StatusFailed { + // they are left or something so regardless we treat these servers as meeting + // the version requirement + return true + } + + // mark that we processed at least one server + s.found = true + + if supported, ok := srv.FeatureFlags["fs"]; ok && supported == 1 { + return true + } + + // mark that at least one server does not support federation states + s.supported = false + + // prevent continuing server evaluation + return false +} diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_routine_manager.go consul-1.8.7+dfsg1/agent/consul/leader_routine_manager.go --- consul-1.7.4+dfsg1/agent/consul/leader_routine_manager.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_routine_manager.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,7 +48,7 @@ } func (m *LeaderRoutineManager) Start(name string, routine LeaderRoutine) error { - return m.StartWithContext(nil, name, routine) + return m.StartWithContext(context.TODO(), name, routine) } func (m *LeaderRoutineManager) StartWithContext(parentCtx context.Context, name string, routine LeaderRoutine) error { @@ -106,6 +106,7 @@ m.logger.Debug("stopping routine", "routine", name) instance.cancel() + delete(m.routines, name) return nil } @@ -122,6 +123,6 @@ routine.cancel() } - // just whipe out the entire map + // just wipe out the entire map m.routines = make(map[string]*leaderRoutine) } diff -Nru consul-1.7.4+dfsg1/agent/consul/leader_test.go consul-1.8.7+dfsg1/agent/consul/leader_test.go --- consul-1.7.4+dfsg1/agent/consul/leader_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/leader_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,10 +10,13 @@ "time" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/token" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/go-hclog" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/hashicorp/serf/serf" "github.com/stretchr/testify/require" @@ -26,7 +29,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -98,7 +100,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -160,7 +161,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -207,7 +207,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -262,6 +261,104 @@ } } +func TestLeader_CheckServersMeta(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "allow" + c.Bootstrap = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "allow" + c.Bootstrap = false + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + dir3, s3 := testServerWithConfig(t, func(c *Config) { + c.ACLDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLMasterToken = "root" + c.ACLDefaultPolicy = "allow" + c.Bootstrap = false + }) + defer os.RemoveAll(dir3) + defer s3.Shutdown() + + // Try to join + joinLAN(t, s1, s2) + joinLAN(t, s1, s3) + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s2.RPC, "dc1") + testrpc.WaitForLeader(t, s3.RPC, "dc1") + state := s1.fsm.State() + + consulService := &structs.NodeService{ + ID: "consul", + Service: "consul", + } + // s3 should be registered + retry.Run(t, func(r *retry.R) { + _, service, err := state.NodeService(s3.config.NodeName, "consul", &consulService.EnterpriseMeta) + if err != nil { + r.Fatalf("err: %v", err) + } + if service == nil { + r.Fatal("client not registered") + } + if service.Meta["non_voter"] != "false" { + r.Fatalf("Expected to be non_voter == false, was: %s", service.Meta["non_voter"]) + } + }) + + member := serf.Member{} + for _, m := range s1.serfLAN.Members() { + if m.Name == s3.config.NodeName { + member = m + member.Tags = make(map[string]string) + for key, value := range m.Tags { + member.Tags[key] = value + } + } + } + if member.Name != s3.config.NodeName { + t.Fatal("could not find node in serf members") + } + versionToExpect := "19.7.9" + + retry.Run(t, func(r *retry.R) { + member.Tags["non_voter"] = "true" + member.Tags["build"] = versionToExpect + err := s1.handleAliveMember(member) + if err != nil { + r.Fatalf("Unexpected error :%v", err) + } + _, service, err := state.NodeService(s3.config.NodeName, "consul", &consulService.EnterpriseMeta) + if err != nil { + r.Fatalf("err: %v", err) + } + if service == nil { + r.Fatal("client not registered") + } + if service.Meta["non_voter"] != "true" { + r.Fatalf("Expected to be non_voter == false, was: %s", service.Meta["non_voter"]) + } + newVersion := service.Meta["version"] + if newVersion != versionToExpect { + r.Fatalf("Expected version to be updated to %s, was %s", versionToExpect, newVersion) + } + }) +} + func TestLeader_ReapServer(t *testing.T) { t.Parallel() dir1, s1 := testServerWithConfig(t, func(c *Config) { @@ -269,7 +366,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "allow" - c.ACLEnforceVersion8 = true c.Bootstrap = true }) defer os.RemoveAll(dir1) @@ -280,7 +376,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "allow" - c.ACLEnforceVersion8 = true c.Bootstrap = false }) defer os.RemoveAll(dir2) @@ -291,7 +386,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "allow" - c.ACLEnforceVersion8 = true c.Bootstrap = false }) defer os.RemoveAll(dir3) @@ -347,7 +441,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -397,7 +490,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -1194,24 +1286,38 @@ } }() - dir1, s1 := testServerWithConfig(t, func(c *Config) { - c.LogOutput = io.MultiWriter(pw, testutil.TestWriter(t)) - c.Build = "1.6.0" - c.ConfigEntryBootstrap = []structs.ConfigEntry{ - &structs.ServiceSplitterConfigEntry{ - Kind: structs.ServiceSplitter, - Name: "web", - Splits: []structs.ServiceSplit{ - {Weight: 100, Service: "web"}, - }, + _, config := testServerConfig(t) + config.Build = "1.6.0" + config.ConfigEntryBootstrap = []structs.ConfigEntry{ + &structs.ServiceSplitterConfigEntry{ + Kind: structs.ServiceSplitter, + Name: "web", + Splits: []structs.ServiceSplit{ + {Weight: 100, Service: "web"}, }, - } - }) - defer os.RemoveAll(dir1) - defer s1.Shutdown() + }, + } + + logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ + Name: config.NodeName, + Level: hclog.Debug, + Output: io.MultiWriter(pw, testutil.NewLogBuffer(t)), + }) + tlsConf, err := tlsutil.NewConfigurator(config.ToTLSUtilConfig(), logger) + require.NoError(t, err) + srv, err := NewServer(config, + WithLogger(logger), + WithTokenStore(new(token.Store)), + WithTLSConfigurator(tlsConf)) + require.NoError(t, err) + defer srv.Shutdown() - result := <-ch - require.Empty(t, result) + select { + case result := <-ch: + require.Empty(t, result) + case <-time.After(time.Second): + t.Fatal("timeout waiting for a result from tailing logs") + } } func TestLeader_ACLLegacyReplication(t *testing.T) { @@ -1225,9 +1331,7 @@ c.Datacenter = "dc2" c.ACLTokenReplication = true } - dir, srv := testACLServerWithConfig(t, cb, true) - defer os.RemoveAll(dir) - defer srv.Shutdown() + _, srv, _ := testACLServerWithConfig(t, cb, true) waitForLeaderEstablishment(t, srv) require.True(t, srv.leaderRoutineManager.IsRunning(legacyACLReplicationRoutineName)) @@ -1235,3 +1339,299 @@ require.False(t, srv.leaderRoutineManager.IsRunning(aclRoleReplicationRoutineName)) require.False(t, srv.leaderRoutineManager.IsRunning(aclTokenReplicationRoutineName)) } + +func TestDatacenterSupportsFederationStates(t *testing.T) { + addGateway := func(t *testing.T, srv *Server, dc, node string) { + t.Helper() + arg := structs.RegisterRequest{ + Datacenter: dc, + Node: node, + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Service: "mesh-gateway", + Port: 8080, + }, + } + + var out struct{} + require.NoError(t, srv.RPC("Catalog.Register", &arg, &out)) + } + + t.Run("one node primary with old version", func(t *testing.T) { + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node1" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + s1.updateSerfTags("ft_fs", "0") + + waitForLeaderEstablishment(t, s1) + + addGateway(t, s1, "dc1", "node1") + + retry.Run(t, func(r *retry.R) { + if s1.DatacenterSupportsFederationStates() { + r.Fatal("server 1 shouldn't activate fedstates") + } + }) + }) + + t.Run("one node primary with new version", func(t *testing.T) { + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node1" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + waitForLeaderEstablishment(t, s1) + + addGateway(t, s1, "dc1", "node1") + + retry.Run(t, func(r *retry.R) { + if !s1.DatacenterSupportsFederationStates() { + r.Fatal("server 1 didn't activate fedstates") + } + }) + + // Wait until after AE runs at least once. + retry.Run(t, func(r *retry.R) { + arg := structs.FederationStateQuery{ + Datacenter: "dc1", + TargetDatacenter: "dc1", + } + + var out structs.FederationStateResponse + require.NoError(r, s1.RPC("FederationState.Get", &arg, &out)) + require.NotNil(r, out.State) + require.Len(r, out.State.MeshGateways, 1) + }) + }) + + t.Run("two node primary with mixed versions", func(t *testing.T) { + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node1" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + s1.updateSerfTags("ft_fs", "0") + + waitForLeaderEstablishment(t, s1) + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node2" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + c.Bootstrap = false + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Put s1 last so we don't trigger a leader election. + servers := []*Server{s2, s1} + + // Try to join + joinLAN(t, s2, s1) + for _, s := range servers { + retry.Run(t, func(r *retry.R) { r.Check(wantPeers(s, 2)) }) + } + + waitForLeaderEstablishment(t, s1) + + addGateway(t, s1, "dc1", "node1") + + retry.Run(t, func(r *retry.R) { + if s1.DatacenterSupportsFederationStates() { + r.Fatal("server 1 shouldn't activate fedstates") + } + }) + retry.Run(t, func(r *retry.R) { + if s2.DatacenterSupportsFederationStates() { + r.Fatal("server 2 shouldn't activate fedstates") + } + }) + }) + + t.Run("two node primary with new version", func(t *testing.T) { + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node1" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + waitForLeaderEstablishment(t, s1) + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node2" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + c.Bootstrap = false + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + // Put s1 last so we don't trigger a leader election. + servers := []*Server{s2, s1} + + // Try to join + joinLAN(t, s2, s1) + for _, s := range servers { + retry.Run(t, func(r *retry.R) { r.Check(wantPeers(s, 2)) }) + } + + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s2.RPC, "dc1") + + addGateway(t, s1, "dc1", "node1") + + retry.Run(t, func(r *retry.R) { + if !s1.DatacenterSupportsFederationStates() { + r.Fatal("server 1 didn't activate fedstates") + } + }) + retry.Run(t, func(r *retry.R) { + if !s2.DatacenterSupportsFederationStates() { + r.Fatal("server 2 didn't activate fedstates") + } + }) + + // Wait until after AE runs at least once. + retry.Run(t, func(r *retry.R) { + arg := structs.DCSpecificRequest{ + Datacenter: "dc1", + } + + var out structs.IndexedFederationStates + require.NoError(r, s1.RPC("FederationState.List", &arg, &out)) + require.Len(r, out.States, 1) + require.Len(r, out.States[0].MeshGateways, 1) + }) + }) + + t.Run("primary and secondary with new version", func(t *testing.T) { + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node1" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + waitForLeaderEstablishment(t, s1) + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node2" + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.FederationStateReplicationRate = 100 + c.FederationStateReplicationBurst = 100 + c.FederationStateReplicationApplyLimit = 1000000 + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + waitForLeaderEstablishment(t, s2) + + // Try to join + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + addGateway(t, s1, "dc1", "node1") + addGateway(t, s2, "dc2", "node2") + + retry.Run(t, func(r *retry.R) { + if !s1.DatacenterSupportsFederationStates() { + r.Fatal("server 1 didn't activate fedstates") + } + }) + retry.Run(t, func(r *retry.R) { + if !s2.DatacenterSupportsFederationStates() { + r.Fatal("server 2 didn't activate fedstates") + } + }) + + // Wait until after AE runs at least once for both. + retry.Run(t, func(r *retry.R) { + arg := structs.DCSpecificRequest{ + Datacenter: "dc1", + } + + var out structs.IndexedFederationStates + require.NoError(r, s1.RPC("FederationState.List", &arg, &out)) + require.Len(r, out.States, 2) + require.Len(r, out.States[0].MeshGateways, 1) + require.Len(r, out.States[1].MeshGateways, 1) + }) + + // Wait until after replication runs for the secondary. + retry.Run(t, func(r *retry.R) { + arg := structs.DCSpecificRequest{ + Datacenter: "dc2", + } + + var out structs.IndexedFederationStates + require.NoError(r, s1.RPC("FederationState.List", &arg, &out)) + require.Len(r, out.States, 2) + require.Len(r, out.States[0].MeshGateways, 1) + require.Len(r, out.States[1].MeshGateways, 1) + }) + }) + + t.Run("primary and secondary with mixed versions", func(t *testing.T) { + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node1" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + s1.updateSerfTags("ft_fs", "0") + + waitForLeaderEstablishment(t, s1) + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.NodeName = "node2" + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.FederationStateReplicationRate = 100 + c.FederationStateReplicationBurst = 100 + c.FederationStateReplicationApplyLimit = 1000000 + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + waitForLeaderEstablishment(t, s2) + + // Try to join + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + addGateway(t, s1, "dc1", "node1") + addGateway(t, s2, "dc2", "node2") + + retry.Run(t, func(r *retry.R) { + if s1.DatacenterSupportsFederationStates() { + r.Fatal("server 1 shouldn't activate fedstates") + } + }) + retry.Run(t, func(r *retry.R) { + if s2.DatacenterSupportsFederationStates() { + r.Fatal("server 2 shouldn't activate fedstates") + } + }) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/operator_autopilot_endpoint.go consul-1.8.7+dfsg1/agent/consul/operator_autopilot_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/operator_autopilot_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/operator_autopilot_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,7 +10,7 @@ // AutopilotGetConfiguration is used to retrieve the current Autopilot configuration. func (op *Operator) AutopilotGetConfiguration(args *structs.DCSpecificRequest, reply *autopilot.Config) error { - if done, err := op.srv.forward("Operator.AutopilotGetConfiguration", args, args, reply); done { + if done, err := op.srv.ForwardRPC("Operator.AutopilotGetConfiguration", args, args, reply); done { return err } @@ -42,7 +42,7 @@ // AutopilotSetConfiguration is used to set the current Autopilot configuration. func (op *Operator) AutopilotSetConfiguration(args *structs.AutopilotSetConfigRequest, reply *bool) error { - if done, err := op.srv.forward("Operator.AutopilotSetConfiguration", args, args, reply); done { + if done, err := op.srv.ForwardRPC("Operator.AutopilotSetConfiguration", args, args, reply); done { return err } @@ -81,7 +81,7 @@ // re-using a structure where we don't support all the options. args.RequireConsistent = true args.AllowStale = false - if done, err := op.srv.forward("Operator.ServerHealth", args, args, reply); done { + if done, err := op.srv.ForwardRPC("Operator.ServerHealth", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/operator_raft_endpoint.go consul-1.8.7+dfsg1/agent/consul/operator_raft_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/operator_raft_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/operator_raft_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ // RaftGetConfiguration is used to retrieve the current Raft configuration. func (op *Operator) RaftGetConfiguration(args *structs.DCSpecificRequest, reply *structs.RaftConfigurationResponse) error { - if done, err := op.srv.forward("Operator.RaftGetConfiguration", args, args, reply); done { + if done, err := op.srv.ForwardRPC("Operator.RaftGetConfiguration", args, args, reply); done { return err } @@ -74,7 +74,7 @@ // "IP:port". The reply argument is not used, but it required to fulfill the RPC // interface. func (op *Operator) RaftRemovePeerByAddress(args *structs.RaftRemovePeerRequest, reply *struct{}) error { - if done, err := op.srv.forward("Operator.RaftRemovePeerByAddress", args, args, reply); done { + if done, err := op.srv.ForwardRPC("Operator.RaftRemovePeerByAddress", args, args, reply); done { return err } @@ -146,7 +146,7 @@ // "IP:port". The reply argument is not used, but is required to fulfill the RPC // interface. func (op *Operator) RaftRemovePeerByID(args *structs.RaftRemovePeerRequest, reply *struct{}) error { - if done, err := op.srv.forward("Operator.RaftRemovePeerByID", args, args, reply); done { + if done, err := op.srv.ForwardRPC("Operator.RaftRemovePeerByID", args, args, reply); done { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/operator_raft_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/operator_raft_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/operator_raft_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/operator_raft_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -71,7 +71,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Make a request with no token to make sure it gets denied. arg := structs.DCSpecificRequest{ @@ -211,7 +211,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Make a request with no token to make sure it gets denied. arg := structs.RaftRemovePeerRequest{ diff -Nru consul-1.7.4+dfsg1/agent/consul/options.go consul-1.8.7+dfsg1/agent/consul/options.go --- consul-1.7.4+dfsg1/agent/consul/options.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/options.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,57 @@ +package consul + +import ( + "github.com/hashicorp/consul/agent/pool" + "github.com/hashicorp/consul/agent/router" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/go-hclog" +) + +type consulOptions struct { + logger hclog.InterceptLogger + tlsConfigurator *tlsutil.Configurator + connPool *pool.ConnPool + tokens *token.Store + router *router.Router +} + +type ConsulOption func(*consulOptions) + +func WithLogger(logger hclog.InterceptLogger) ConsulOption { + return func(opt *consulOptions) { + opt.logger = logger + } +} + +func WithTLSConfigurator(tlsConfigurator *tlsutil.Configurator) ConsulOption { + return func(opt *consulOptions) { + opt.tlsConfigurator = tlsConfigurator + } +} + +func WithConnectionPool(connPool *pool.ConnPool) ConsulOption { + return func(opt *consulOptions) { + opt.connPool = connPool + } +} + +func WithTokenStore(tokens *token.Store) ConsulOption { + return func(opt *consulOptions) { + opt.tokens = tokens + } +} + +func WithRouter(router *router.Router) ConsulOption { + return func(opt *consulOptions) { + opt.router = router + } +} + +func flattenConsulOptions(options []ConsulOption) consulOptions { + var flat consulOptions + for _, opt := range options { + opt(&flat) + } + return flat +} diff -Nru consul-1.7.4+dfsg1/agent/consul/prepared_query/template.go consul-1.8.7+dfsg1/agent/consul/prepared_query/template.go --- consul-1.7.4+dfsg1/agent/consul/prepared_query/template.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/prepared_query/template.go 2020-12-10 21:46:52.000000000 +0000 @@ -116,13 +116,9 @@ return nil, fmt.Errorf("Failed to copy query") } - // Run the regular expression, if provided. We execute on a copy here - // to avoid internal lock contention because we expect this to be called - // from multiple goroutines. var matches []string if ct.re != nil { - re := ct.re.Copy() - matches = re.FindStringSubmatch(name) + matches = ct.re.FindStringSubmatch(name) } // Create a safe match function that can't fail at run time. It will diff -Nru consul-1.7.4+dfsg1/agent/consul/prepared_query_endpoint.go consul-1.8.7+dfsg1/agent/consul/prepared_query_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/prepared_query_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/prepared_query_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,6 @@ package consul import ( - "errors" "fmt" "strings" "time" @@ -16,11 +15,6 @@ "github.com/hashicorp/go-uuid" ) -var ( - // ErrQueryNotFound is returned if the query lookup failed. - ErrQueryNotFound = errors.New("Query not found") -) - // PreparedQuery manages the prepared query endpoint. type PreparedQuery struct { srv *Server @@ -31,7 +25,7 @@ // only be used for operations that modify the data. The ID of the session is // returned in the reply. func (p *PreparedQuery) Apply(args *structs.PreparedQueryRequest, reply *string) (err error) { - if done, err := p.srv.forward("PreparedQuery.Apply", args, args, reply); done { + if done, err := p.srv.ForwardRPC("PreparedQuery.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"prepared-query", "apply"}, time.Now()) @@ -101,7 +95,7 @@ // Parse the query and prep it for the state store. switch args.Op { case structs.PreparedQueryCreate, structs.PreparedQueryUpdate: - if err := parseQuery(args.Query, p.srv.config.ACLEnforceVersion8); err != nil { + if err := parseQuery(args.Query); err != nil { return fmt.Errorf("Invalid prepared query: %v", err) } @@ -130,7 +124,7 @@ // update operation. Some of the fields are not checked or are partially // checked, as noted in the comments below. This also updates all the parsed // fields of the query. -func parseQuery(query *structs.PreparedQuery, enforceVersion8 bool) error { +func parseQuery(query *structs.PreparedQuery) error { // We skip a few fields: // - ID is checked outside this fn. // - Name is optional with no restrictions, except for uniqueness which @@ -142,10 +136,8 @@ // compile it. // Anonymous queries require a session or need to be part of a template. - if enforceVersion8 { - if query.Name == "" && query.Template.Type == "" && query.Session == "" { - return fmt.Errorf("Must be bound to a session") - } + if query.Name == "" && query.Template.Type == "" && query.Session == "" { + return fmt.Errorf("Must be bound to a session") } // Token is checked when the query is executed, but we do make sure the @@ -184,7 +176,7 @@ } // Make sure the metadata filters are valid - if err := structs.ValidateMetadata(svc.NodeMeta, true); err != nil { + if err := structs.ValidateNodeMetadata(svc.NodeMeta, true); err != nil { return err } @@ -217,7 +209,7 @@ // Get returns a single prepared query by ID. func (p *PreparedQuery) Get(args *structs.PreparedQuerySpecificRequest, reply *structs.IndexedPreparedQueries) error { - if done, err := p.srv.forward("PreparedQuery.Get", args, args, reply); done { + if done, err := p.srv.ForwardRPC("PreparedQuery.Get", args, args, reply); done { return err } @@ -230,7 +222,7 @@ return err } if query == nil { - return ErrQueryNotFound + return structs.ErrQueryNotFound } // If no prefix ACL applies to this query, then they are @@ -261,7 +253,7 @@ // List returns all the prepared queries. func (p *PreparedQuery) List(args *structs.DCSpecificRequest, reply *structs.IndexedPreparedQueries) error { - if done, err := p.srv.forward("PreparedQuery.List", args, args, reply); done { + if done, err := p.srv.ForwardRPC("PreparedQuery.List", args, args, reply); done { return err } @@ -285,7 +277,7 @@ // will be executed here. func (p *PreparedQuery) Explain(args *structs.PreparedQueryExecuteRequest, reply *structs.PreparedQueryExplainResponse) error { - if done, err := p.srv.forward("PreparedQuery.Explain", args, args, reply); done { + if done, err := p.srv.ForwardRPC("PreparedQuery.Explain", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"prepared-query", "explain"}, time.Now()) @@ -305,7 +297,7 @@ return err } if query == nil { - return ErrQueryNotFound + return structs.ErrQueryNotFound } // Place the query into a list so we can run the standard ACL filter on @@ -332,7 +324,7 @@ // part of a DNS lookup, or when executing prepared queries from the HTTP API. func (p *PreparedQuery) Execute(args *structs.PreparedQueryExecuteRequest, reply *structs.PreparedQueryExecuteResponse) error { - if done, err := p.srv.forward("PreparedQuery.Execute", args, args, reply); done { + if done, err := p.srv.ForwardRPC("PreparedQuery.Execute", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"prepared-query", "execute"}, time.Now()) @@ -352,7 +344,7 @@ return err } if query == nil { - return ErrQueryNotFound + return structs.ErrQueryNotFound } // Execute the query for the local DC. @@ -467,7 +459,7 @@ // We don't want things to fan out further than one level. func (p *PreparedQuery) ExecuteRemote(args *structs.PreparedQueryExecuteRemoteRequest, reply *structs.PreparedQueryExecuteResponse) error { - if done, err := p.srv.forward("PreparedQuery.ExecuteRemote", args, args, reply); done { + if done, err := p.srv.ForwardRPC("PreparedQuery.ExecuteRemote", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"prepared-query", "execute_remote"}, time.Now()) diff -Nru consul-1.7.4+dfsg1/agent/consul/prepared_query_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/prepared_query_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/prepared_query_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/prepared_query_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ "github.com/hashicorp/go-hclog" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/hashicorp/serf/coordinate" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -174,7 +175,7 @@ } var resp structs.IndexedPreparedQueries if err = msgpackrpc.CallWithCodec(codec, "PreparedQuery.Get", req, &resp); err != nil { - if err.Error() != ErrQueryNotFound.Error() { + if !structs.IsErrQueryNotFound(err) { t.Fatalf("err: %v", err) } } @@ -198,7 +199,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create an ACL with write permissions for redis queries. var token string @@ -316,7 +317,7 @@ } var resp structs.IndexedPreparedQueries if err = msgpackrpc.CallWithCodec(codec, "PreparedQuery.Get", req, &resp); err != nil { - if err.Error() != ErrQueryNotFound.Error() { + if !structs.IsErrQueryNotFound(err) { t.Fatalf("err: %v", err) } } @@ -411,7 +412,7 @@ } var resp structs.IndexedPreparedQueries if err = msgpackrpc.CallWithCodec(codec, "PreparedQuery.Get", req, &resp); err != nil { - if err.Error() != ErrQueryNotFound.Error() { + if !structs.IsErrQueryNotFound(err) { t.Fatalf("err: %v", err) } } @@ -540,88 +541,86 @@ t.Parallel() query := &structs.PreparedQuery{} - err := parseQuery(query, true) + err := parseQuery(query) if err == nil || !strings.Contains(err.Error(), "Must be bound to a session") { t.Fatalf("bad: %v", err) } query.Session = "adf4238a-882b-9ddc-4a9d-5b6758e4159e" - err = parseQuery(query, true) + err = parseQuery(query) if err == nil || !strings.Contains(err.Error(), "Must provide a Service") { t.Fatalf("bad: %v", err) } query.Session = "" query.Template.Type = "some-kind-of-template" - err = parseQuery(query, true) + err = parseQuery(query) if err == nil || !strings.Contains(err.Error(), "Must provide a Service") { t.Fatalf("bad: %v", err) } query.Template.Type = "" - err = parseQuery(query, false) - if err == nil || !strings.Contains(err.Error(), "Must provide a Service") { + err = parseQuery(query) + if err == nil || !strings.Contains(err.Error(), "Must be bound to a session") { t.Fatalf("bad: %v", err) } // None of the rest of these care about version 8 ACL enforcement. - for _, version8 := range []bool{true, false} { - query = &structs.PreparedQuery{} - query.Session = "adf4238a-882b-9ddc-4a9d-5b6758e4159e" - query.Service.Service = "foo" - if err := parseQuery(query, version8); err != nil { - t.Fatalf("err: %v", err) - } + query = &structs.PreparedQuery{} + query.Session = "adf4238a-882b-9ddc-4a9d-5b6758e4159e" + query.Service.Service = "foo" + if err := parseQuery(query); err != nil { + t.Fatalf("err: %v", err) + } - query.Token = redactedToken - err = parseQuery(query, version8) - if err == nil || !strings.Contains(err.Error(), "Bad Token") { - t.Fatalf("bad: %v", err) - } + query.Token = redactedToken + err = parseQuery(query) + if err == nil || !strings.Contains(err.Error(), "Bad Token") { + t.Fatalf("bad: %v", err) + } - query.Token = "adf4238a-882b-9ddc-4a9d-5b6758e4159e" - if err := parseQuery(query, version8); err != nil { - t.Fatalf("err: %v", err) - } + query.Token = "adf4238a-882b-9ddc-4a9d-5b6758e4159e" + if err := parseQuery(query); err != nil { + t.Fatalf("err: %v", err) + } - query.Service.Failover.NearestN = -1 - err = parseQuery(query, version8) - if err == nil || !strings.Contains(err.Error(), "Bad NearestN") { - t.Fatalf("bad: %v", err) - } + query.Service.Failover.NearestN = -1 + err = parseQuery(query) + if err == nil || !strings.Contains(err.Error(), "Bad NearestN") { + t.Fatalf("bad: %v", err) + } - query.Service.Failover.NearestN = 3 - if err := parseQuery(query, version8); err != nil { - t.Fatalf("err: %v", err) - } + query.Service.Failover.NearestN = 3 + if err := parseQuery(query); err != nil { + t.Fatalf("err: %v", err) + } - query.DNS.TTL = "two fortnights" - err = parseQuery(query, version8) - if err == nil || !strings.Contains(err.Error(), "Bad DNS TTL") { - t.Fatalf("bad: %v", err) - } + query.DNS.TTL = "two fortnights" + err = parseQuery(query) + if err == nil || !strings.Contains(err.Error(), "Bad DNS TTL") { + t.Fatalf("bad: %v", err) + } - query.DNS.TTL = "-3s" - err = parseQuery(query, version8) - if err == nil || !strings.Contains(err.Error(), "must be >=0") { - t.Fatalf("bad: %v", err) - } + query.DNS.TTL = "-3s" + err = parseQuery(query) + if err == nil || !strings.Contains(err.Error(), "must be >=0") { + t.Fatalf("bad: %v", err) + } - query.DNS.TTL = "3s" - if err := parseQuery(query, version8); err != nil { - t.Fatalf("err: %v", err) - } + query.DNS.TTL = "3s" + if err := parseQuery(query); err != nil { + t.Fatalf("err: %v", err) + } - query.Service.NodeMeta = map[string]string{"": "somevalue"} - err = parseQuery(query, version8) - if err == nil || !strings.Contains(err.Error(), "cannot be blank") { - t.Fatalf("bad: %v", err) - } + query.Service.NodeMeta = map[string]string{"": "somevalue"} + err = parseQuery(query) + if err == nil || !strings.Contains(err.Error(), "cannot be blank") { + t.Fatalf("bad: %v", err) + } - query.Service.NodeMeta = map[string]string{"somekey": "somevalue"} - if err := parseQuery(query, version8); err != nil { - t.Fatalf("err: %v", err) - } + query.Service.NodeMeta = map[string]string{"somekey": "somevalue"} + if err := parseQuery(query); err != nil { + t.Fatalf("err: %v", err) } } @@ -638,7 +637,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create an ACL with write permissions for any prefix. var token string @@ -853,7 +852,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create an ACL with write permissions for redis queries. var token string @@ -974,6 +973,7 @@ Session: structs.Session{ Node: s1.config.NodeName, }, + WriteRequest: structs.WriteRequest{Token: "root"}, } if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &req, &session); err != nil { t.Fatalf("err: %v", err) @@ -1082,7 +1082,7 @@ } var resp structs.IndexedPreparedQueries if err := msgpackrpc.CallWithCodec(codec, "PreparedQuery.Get", req, &resp); err != nil { - if err.Error() != ErrQueryNotFound.Error() { + if !structs.IsErrQueryNotFound(err) { t.Fatalf("err: %v", err) } } @@ -1106,7 +1106,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create an ACL with write permissions for redis queries. var token string @@ -1245,6 +1245,7 @@ Session: structs.Session{ Node: s1.config.NodeName, }, + WriteRequest: structs.WriteRequest{Token: "root"}, } if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &req, &session); err != nil { t.Fatalf("err: %v", err) @@ -1314,7 +1315,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create an ACL with write permissions for prod- queries. var token string @@ -1428,7 +1429,7 @@ } var resp structs.IndexedPreparedQueries if err := msgpackrpc.CallWithCodec(codec, "PreparedQuery.Explain", req, &resp); err != nil { - if err.Error() != ErrQueryNotFound.Error() { + if !structs.IsErrQueryNotFound(err) { t.Fatalf("err: %v", err) } } @@ -1445,10 +1446,10 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() + waitForLeaderEstablishment(t, s1) codec1 := rpcClient(t, s1) defer codec1.Close() @@ -1456,15 +1457,15 @@ c.Datacenter = "dc2" c.ACLDatacenter = "dc1" c.ACLsEnabled = true + c.ACLDefaultPolicy = "deny" }) defer os.RemoveAll(dir2) defer s2.Shutdown() + waitForLeaderEstablishment(t, s2) codec2 := rpcClient(t, s2) defer codec2.Close() s2.tokens.UpdateReplicationToken("root", tokenStore.TokenSourceConfig) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc2") // Try to WAN join. joinWAN(t, s2, s1) @@ -1472,30 +1473,77 @@ if got, want := len(s1.WANMembers()), 2; got != want { r.Fatalf("got %d WAN members want %d", got, want) } + if got, want := len(s2.WANMembers()), 2; got != want { + r.Fatalf("got %d WAN members want %d", got, want) + } }) - // Create an ACL with read permission to the service. + // check for RPC forwarding + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) + testrpc.WaitForLeader(t, s1.RPC, "dc2", testrpc.WithToken("root")) + + // Create ACL tokens with read permission to the service and to the service + // and all nodes. + var execNoNodesToken string + { + req := structs.ACLRequest{ + Datacenter: "dc1", + Op: structs.ACLSet, + ACL: structs.ACL{ + Name: "User token", + Type: structs.ACLTokenTypeClient, + Rules: `service "foo" { policy = "read" }`, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "ACL.Apply", &req, &execNoNodesToken)) + } var execToken string { - var rules = ` - service "foo" { - policy = "read" - } - ` - + req := structs.ACLRequest{ + Datacenter: "dc1", + Op: structs.ACLSet, + ACL: structs.ACL{ + Name: "User token", + Type: structs.ACLTokenTypeClient, + Rules: `service "foo" { policy = "read" } + node "" { policy = "read" }`, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "ACL.Apply", &req, &execToken)) + } + // Make a new exec token that can't read the service. + var denyToken string + { req := structs.ACLRequest{ Datacenter: "dc1", Op: structs.ACLSet, ACL: structs.ACL{ Name: "User token", Type: structs.ACLTokenTypeClient, - Rules: rules, + Rules: `service "foo" { policy = "deny" }`, }, WriteRequest: structs.WriteRequest{Token: "root"}, } - if err := msgpackrpc.CallWithCodec(codec1, "ACL.Apply", &req, &execToken); err != nil { + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "ACL.Apply", &req, &denyToken)) + } + + newSessionDC1 := func(t *testing.T) string { + t.Helper() + req := structs.SessionRequest{ + Datacenter: "dc1", + Op: structs.SessionCreate, + Session: structs.Session{ + Node: s1.config.NodeName, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var session string + if err := msgpackrpc.CallWithCodec(codec1, "Session.Apply", &req, &session); err != nil { t.Fatalf("err: %v", err) } + return session } // Set up some nodes in each DC that host the service. @@ -1561,7 +1609,7 @@ } // Run a query that doesn't exist. - { + t.Run("run query that doesn't exist", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: "nope", @@ -1569,17 +1617,30 @@ var reply structs.PreparedQueryExecuteResponse err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply) - if err == nil || err.Error() != ErrQueryNotFound.Error() { - t.Fatalf("bad: %v", err) - } + assert.EqualError(t, err, structs.ErrQueryNotFound.Error()) + assert.Len(t, reply.Nodes, 0) + }) - if len(reply.Nodes) != 0 { - t.Fatalf("bad: %v", reply) - } + expectNodes := func(t *testing.T, query *structs.PreparedQueryRequest, reply *structs.PreparedQueryExecuteResponse, n int) { + t.Helper() + assert.Len(t, reply.Nodes, n) + assert.Equal(t, "dc1", reply.Datacenter) + assert.Equal(t, 0, reply.Failovers) + assert.Equal(t, query.Query.Service.Service, reply.Service) + assert.Equal(t, query.Query.DNS, reply.DNS) + assert.True(t, reply.QueryMeta.KnownLeader) + } + expectFailoverNodes := func(t *testing.T, query *structs.PreparedQueryRequest, reply *structs.PreparedQueryExecuteResponse, n int) { + t.Helper() + assert.Len(t, reply.Nodes, n) + assert.Equal(t, "dc2", reply.Datacenter) + assert.Equal(t, 1, reply.Failovers) + assert.Equal(t, query.Query.Service.Service, reply.Service) + assert.Equal(t, query.Query.DNS, reply.DNS) + assert.True(t, reply.QueryMeta.KnownLeader) } - // Run the registered query. - { + t.Run("run the registered query", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -1587,21 +1648,11 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - - if len(reply.Nodes) != 10 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + expectNodes(t, &query, &reply, 10) + }) - // Try with a limit. - { + t.Run("try with a limit", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -1610,48 +1661,40 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - - if len(reply.Nodes) != 3 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + expectNodes(t, &query, &reply, 3) + }) // Run various service queries with node metadata filters. - { - cases := []struct { - filters map[string]string - numNodes int - }{ - { - filters: map[string]string{}, - numNodes: 10, - }, - { - filters: map[string]string{"instance_type": "t2.micro"}, - numNodes: 10, - }, - { - filters: map[string]string{"group": "1"}, - numNodes: 5, - }, - { - filters: map[string]string{"group": "0", "unique": "true"}, - numNodes: 1, - }, - } - - for _, tc := range cases { + for name, tc := range map[string]struct { + filters map[string]string + numNodes int + }{ + "no filter 10 nodes": { + filters: map[string]string{}, + numNodes: 10, + }, + "instance filter 10 nodes": { + filters: map[string]string{"instance_type": "t2.micro"}, + numNodes: 10, + }, + "group filter 5 nodes": { + filters: map[string]string{"group": "1"}, + numNodes: 5, + }, + "group filter unique 1 node": { + filters: map[string]string{"group": "0", "unique": "true"}, + numNodes: 1, + }, + } { + tc := tc + t.Run("node metadata - "+name, func(t *testing.T) { + session := newSessionDC1(t) nodeMetaQuery := structs.PreparedQueryRequest{ Datacenter: "dc1", Op: structs.PreparedQueryCreate, Query: &structs.PreparedQuery{ + Session: session, Service: structs.ServiceQuery{ Service: "foo", NodeMeta: tc.filters, @@ -1662,9 +1705,7 @@ }, WriteRequest: structs.WriteRequest{Token: "root"}, } - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &nodeMetaQuery, &nodeMetaQuery.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &nodeMetaQuery, &nodeMetaQuery.Query.ID)) req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", @@ -1673,55 +1714,49 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - - if len(reply.Nodes) != tc.numNodes { - t.Fatalf("bad: %v, %v", len(reply.Nodes), tc.numNodes) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, tc.numNodes) for _, node := range reply.Nodes { - if !structs.SatisfiesMetaFilters(node.Node.Meta, tc.filters) { - t.Fatalf("bad: %v", node.Node.Meta) - } + assert.True(t, structs.SatisfiesMetaFilters(node.Node.Meta, tc.filters), "meta: %v", node.Node.Meta) } - } + }) } // Run various service queries with service metadata filters - { - cases := []struct { - filters map[string]string - numNodes int - }{ - { - filters: map[string]string{}, - numNodes: 10, - }, - { - filters: map[string]string{"foo": "true"}, - numNodes: 10, - }, - { - filters: map[string]string{"svc-group": "0"}, - numNodes: 5, - }, - { - filters: map[string]string{"svc-group": "1"}, - numNodes: 5, - }, - { - filters: map[string]string{"svc-group": "0", "unique": "true"}, - numNodes: 1, - }, - } - - for _, tc := range cases { + for name, tc := range map[string]struct { + filters map[string]string + numNodes int + }{ + "no filter 10 nodes": { + filters: map[string]string{}, + numNodes: 10, + }, + "foo filter 10 nodes": { + filters: map[string]string{"foo": "true"}, + numNodes: 10, + }, + "group filter 0 - 5 nodes": { + filters: map[string]string{"svc-group": "0"}, + numNodes: 5, + }, + "group filter 1 - 5 nodes": { + filters: map[string]string{"svc-group": "1"}, + numNodes: 5, + }, + "group filter 0 - unique 1 node": { + filters: map[string]string{"svc-group": "0", "unique": "true"}, + numNodes: 1, + }, + } { + tc := tc + require.True(t, t.Run("service metadata - "+name, func(t *testing.T) { + session := newSessionDC1(t) svcMetaQuery := structs.PreparedQueryRequest{ Datacenter: "dc1", Op: structs.PreparedQueryCreate, Query: &structs.PreparedQuery{ + Session: session, Service: structs.ServiceQuery{ Service: "foo", ServiceMeta: tc.filters, @@ -1743,25 +1778,24 @@ var reply structs.PreparedQueryExecuteResponse require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - require.Len(t, reply.Nodes, tc.numNodes) + assert.Len(t, reply.Nodes, tc.numNodes) for _, node := range reply.Nodes { - require.True(t, structs.SatisfiesMetaFilters(node.Service.Meta, tc.filters)) + assert.True(t, structs.SatisfiesMetaFilters(node.Service.Meta, tc.filters), "meta: %v", node.Service.Meta) } - } + })) } // Push a coordinate for one of the nodes so we can try an RTT sort. We // have to sleep a little while for the coordinate batch to get flushed. { req := structs.CoordinateUpdateRequest{ - Datacenter: "dc1", - Node: "node3", - Coord: coordinate.NewCoordinate(coordinate.DefaultConfig()), + Datacenter: "dc1", + Node: "node3", + Coord: coordinate.NewCoordinate(coordinate.DefaultConfig()), + WriteRequest: structs.WriteRequest{Token: "root"}, } var out struct{} - if err := msgpackrpc.CallWithCodec(codec1, "Coordinate.Update", &req, &out); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "Coordinate.Update", &req, &out)) time.Sleep(3 * s1.config.CoordinateUpdatePeriod) } @@ -1769,60 +1803,47 @@ // showing that the node with a coordinate is always first proves we // call the RTT sorting function, which is tested elsewhere. for i := 0; i < 100; i++ { - req := structs.PreparedQueryExecuteRequest{ - Datacenter: "dc1", - QueryIDOrName: query.Query.ID, - Source: structs.QuerySource{ - Datacenter: "dc1", - Node: "node3", - }, - QueryOptions: structs.QueryOptions{Token: execToken}, - } + t.Run(fmt.Sprintf("rtt sort iter %d", i), func(t *testing.T) { + req := structs.PreparedQueryExecuteRequest{ + Datacenter: "dc1", + QueryIDOrName: query.Query.ID, + Source: structs.QuerySource{ + Datacenter: "dc1", + Node: "node3", + }, + QueryOptions: structs.QueryOptions{Token: execToken}, + } - var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + var reply structs.PreparedQueryExecuteResponse + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 10 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - if reply.Nodes[0].Node.Node != "node3" { - t.Fatalf("bad: %v", reply) - } + expectNodes(t, &query, &reply, 10) + assert.Equal(t, "node3", reply.Nodes[0].Node.Node) + }) } // Make sure the shuffle looks like it's working. uniques := make(map[string]struct{}) for i := 0; i < 100; i++ { - req := structs.PreparedQueryExecuteRequest{ - Datacenter: "dc1", - QueryIDOrName: query.Query.ID, - QueryOptions: structs.QueryOptions{Token: execToken}, - } + t.Run(fmt.Sprintf("shuffle iter %d", i), func(t *testing.T) { + req := structs.PreparedQueryExecuteRequest{ + Datacenter: "dc1", + QueryIDOrName: query.Query.ID, + QueryOptions: structs.QueryOptions{Token: execToken}, + } - var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + var reply structs.PreparedQueryExecuteResponse + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 10 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - var names []string - for _, node := range reply.Nodes { - names = append(names, node.Node.Node) - } - key := strings.Join(names, "|") - uniques[key] = struct{}{} + expectNodes(t, &query, &reply, 10) + + var names []string + for _, node := range reply.Nodes { + names = append(names, node.Node.Node) + } + key := strings.Join(names, "|") + uniques[key] = struct{}{} + }) } // We have to allow for the fact that there won't always be a unique @@ -1837,39 +1858,31 @@ // so node3 should always show up first. query.Op = structs.PreparedQueryUpdate query.Query.Service.Near = "node3" - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Now run the query and make sure the sort looks right. - { - req := structs.PreparedQueryExecuteRequest{ - Agent: structs.QuerySource{ - Datacenter: "dc1", - Node: "node3", - }, - Datacenter: "dc1", - QueryIDOrName: query.Query.ID, - QueryOptions: structs.QueryOptions{Token: execToken}, - } + for i := 0; i < 10; i++ { + t.Run(fmt.Sprintf("run nearest query iter %d", i), func(t *testing.T) { + req := structs.PreparedQueryExecuteRequest{ + Agent: structs.QuerySource{ + Datacenter: "dc1", + Node: "node3", + }, + Datacenter: "dc1", + QueryIDOrName: query.Query.ID, + QueryOptions: structs.QueryOptions{Token: execToken}, + } - for i := 0; i < 10; i++ { var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - if n := len(reply.Nodes); n != 10 { - t.Fatalf("expect 10 nodes, got: %d", n) - } - if node := reply.Nodes[0].Node.Node; node != "node3" { - t.Fatalf("expect node3 first, got: %q", node) - } - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, 10) + assert.Equal(t, "node3", reply.Nodes[0].Node.Node) + }) } // Query again, but this time set a client-supplied query source. This // proves that we allow overriding the baked-in value with ?near. - { + t.Run("nearest fallback to shuffle", func(t *testing.T) { // Set up the query with a non-existent node. This will cause the // nodes to be shuffled if the passed node is respected, proving // that we allow the override to happen. @@ -1890,26 +1903,21 @@ shuffled := false for i := 0; i < 10; i++ { var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - if n := len(reply.Nodes); n != 10 { - t.Fatalf("expect 10 nodes, got: %d", n) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, 10) + if node := reply.Nodes[0].Node.Node; node != "node3" { shuffled = true break } } - if !shuffled { - t.Fatalf("expect nodes to be shuffled") - } - } + require.True(t, shuffled, "expect nodes to be shuffled") + }) // If the exact node we are sorting near appears in the list, make sure it // gets popped to the front of the result. - { + t.Run("nearest bypasses shuffle", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Source: structs.QuerySource{ Datacenter: "dc1", @@ -1922,26 +1930,18 @@ for i := 0; i < 10; i++ { var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - if n := len(reply.Nodes); n != 10 { - t.Fatalf("expect 10 nodes, got: %d", n) - } - if node := reply.Nodes[0].Node.Node; node != "node1" { - t.Fatalf("expect node1 first, got: %q", node) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, 10) + assert.Equal(t, "node1", reply.Nodes[0].Node.Node) } - } + }) // Bake the magic "_agent" flag into the query. query.Query.Service.Near = "_agent" - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Check that we sort the local agent first when the magic flag is set. - { + t.Run("local agent is first using _agent on node3", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Agent: structs.QuerySource{ Datacenter: "dc1", @@ -1954,22 +1954,16 @@ for i := 0; i < 10; i++ { var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - if n := len(reply.Nodes); n != 10 { - t.Fatalf("expect 10 nodes, got: %d", n) - } - if node := reply.Nodes[0].Node.Node; node != "node3" { - t.Fatalf("expect node3 first, got: %q", node) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, 10) + assert.Equal(t, "node3", reply.Nodes[0].Node.Node) } - } + }) // Check that the query isn't just sorting "node3" first because we // provided it in the Agent query source. Proves that we use the // Agent source when the magic "_agent" flag is passed. - { + t.Run("local agent is first using _agent on foo", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Agent: structs.QuerySource{ Datacenter: "dc1", @@ -1985,26 +1979,20 @@ shuffled := false for i := 0; i < 10; i++ { var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - if n := len(reply.Nodes); n != 10 { - t.Fatalf("expect 10 nodes, got: %d", n) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, 10) if node := reply.Nodes[0].Node.Node; node != "node3" { shuffled = true break } } - if !shuffled { - t.Fatal("expect nodes to be shuffled") - } - } + require.True(t, shuffled, "expect nodes to be shuffled") + }) // Shuffles if the response comes from a non-local DC. Proves that the // agent query source does not interfere with the order. - { + t.Run("shuffles if coming from non-local dc", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Source: structs.QuerySource{ Datacenter: "dc2", @@ -2022,31 +2010,24 @@ shuffled := false for i := 0; i < 10; i++ { var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } - if n := len(reply.Nodes); n != 10 { - t.Fatalf("expect 10 nodes, got: %d", n) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) + assert.Len(t, reply.Nodes, 10) if reply.Nodes[0].Node.Node != "node3" { shuffled = true break } } - if !shuffled { - t.Fatal("expect node shuffle for remote results") - } - } + require.True(t, shuffled, "expect node shuffle for remote results") + }) // Un-bake the near parameter. query.Query.Service.Near = "" - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Update the health of a node to mark it critical. - setHealth := func(node string, health string) { + setHealth := func(t *testing.T, node string, health string) { + t.Helper() req := structs.RegisterRequest{ Datacenter: "dc1", Node: node, @@ -2064,14 +2045,12 @@ WriteRequest: structs.WriteRequest{Token: "root"}, } var reply struct{} - if err := msgpackrpc.CallWithCodec(codec1, "Catalog.Register", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "Catalog.Register", &req, &reply)) } - setHealth("node1", api.HealthCritical) + setHealth(t, "node1", api.HealthCritical) // The failing node should be filtered. - { + t.Run("failing node filtered", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2079,27 +2058,17 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 9 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectNodes(t, &query, &reply, 9) for _, node := range reply.Nodes { - if node.Node.Node == "node1" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node1", node.Node.Node) } - } + }) // Upgrade it to a warning and re-query, should be 10 nodes again. - setHealth("node1", api.HealthWarning) - { + setHealth(t, "node1", api.HealthWarning) + t.Run("warning nodes are included", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2107,27 +2076,17 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 10 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectNodes(t, &query, &reply, 10) + }) // Make the query more picky so it excludes warning nodes. query.Query.Service.OnlyPassing = true - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // The node in the warning state should be filtered. - { + t.Run("warning nodes are omitted with onlypassing=true", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2135,33 +2094,21 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 9 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectNodes(t, &query, &reply, 9) for _, node := range reply.Nodes { - if node.Node.Node == "node1" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node1", node.Node.Node) } - } + }) // Make the query ignore all our health checks (which have "failing" ID // implicitly from their name). query.Query.Service.IgnoreCheckIDs = []types.CheckID{"failing"} - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // We should end up with 10 nodes again - { + t.Run("all nodes including when ignoring failing checks", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2169,36 +2116,24 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 10 || - reply.Datacenter != "dc1" || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectNodes(t, &query, &reply, 10) + }) // Undo that so all the following tests aren't broken! query.Query.Service.IgnoreCheckIDs = nil - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Make the query more picky by adding a tag filter. This just proves we // call into the tag filter, it is tested more thoroughly in a separate // test. query.Query.Service.Tags = []string{"!tag3"} - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // The node in the warning state should be filtered as well as the node // with the filtered tag. - { + t.Run("filter node in warning state and filtered node", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2206,50 +2141,17 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 8 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectNodes(t, &query, &reply, 8) for _, node := range reply.Nodes { - if node.Node.Node == "node1" || node.Node.Node == "node3" { - t.Fatalf("bad: %v", node) - } - } - } - - // Make a new exec token that can't read the service. - var denyToken string - { - var rules = ` - service "foo" { - policy = "deny" - } - ` - - req := structs.ACLRequest{ - Datacenter: "dc1", - Op: structs.ACLSet, - ACL: structs.ACL{ - Name: "User token", - Type: structs.ACLTokenTypeClient, - Rules: rules, - }, - WriteRequest: structs.WriteRequest{Token: "root"}, + assert.NotEqual(t, "node1", node.Node.Node) + assert.NotEqual(t, "node3", node.Node.Node) } - if err := msgpackrpc.CallWithCodec(codec1, "ACL.Apply", &req, &denyToken); err != nil { - t.Fatalf("err: %v", err) - } - } + }) // Make sure the query gets denied with this token. - { + t.Run("query denied with deny token", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2257,27 +2159,17 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 0 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectNodes(t, &query, &reply, 0) + }) // Bake the exec token into the query. query.Query.Token = execToken - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Now even querying with the deny token should work. - { + t.Run("query with deny token still works", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2285,32 +2177,21 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 8 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectNodes(t, &query, &reply, 8) for _, node := range reply.Nodes { - if node.Node.Node == "node1" || node.Node.Node == "node3" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node1", node.Node.Node) + assert.NotEqual(t, "node3", node.Node.Node) } - } + }) // Un-bake the token. query.Query.Token = "" - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Make sure the query gets denied again with the deny token. - { + t.Run("denied with deny token when no query token", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2318,46 +2199,25 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 0 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectNodes(t, &query, &reply, 0) + }) - // Turn on version 8 ACLs, which will start to filter even with the exec - // token. - s1.config.ACLEnforceVersion8 = true - { + t.Run("filter nodes with exec token without node privileges", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, - QueryOptions: structs.QueryOptions{Token: execToken}, + QueryOptions: structs.QueryOptions{Token: execNoNodesToken}, } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 0 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectNodes(t, &query, &reply, 0) + }) - // Revert version 8 ACLs and make sure the query works again. - s1.config.ACLEnforceVersion8 = false - { + t.Run("normal operation again with exec token", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2365,29 +2225,20 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 8 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectNodes(t, &query, &reply, 8) for _, node := range reply.Nodes { - if node.Node.Node == "node1" || node.Node.Node == "node3" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node1", node.Node.Node) + assert.NotEqual(t, "node3", node.Node.Node) } - } + }) // Now fail everything in dc1 and we should get an empty list back. for i := 0; i < 10; i++ { - setHealth(fmt.Sprintf("node%d", i+1), api.HealthCritical) + setHealth(t, fmt.Sprintf("node%d", i+1), api.HealthCritical) } - { + t.Run("everything is failing so should get empty list", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2395,27 +2246,17 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 0 || - reply.Datacenter != "dc1" || reply.Failovers != 0 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectNodes(t, &query, &reply, 0) + }) // Modify the query to have it fail over to a bogus DC and then dc2. query.Query.Service.Failover.Datacenters = []string{"bogus", "dc2"} - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Now we should see 9 nodes from dc2 (we have the tag filter still). - { + t.Run("see 9 nodes from dc2 using tag filter", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2423,26 +2264,16 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 9 || - reply.Datacenter != "dc2" || reply.Failovers != 1 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectFailoverNodes(t, &query, &reply, 9) for _, node := range reply.Nodes { - if node.Node.Node == "node3" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node3", node.Node.Node) } - } + }) // Make sure the limit and query options are forwarded. - { + t.Run("forward limit and query options", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2454,51 +2285,35 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 3 || - reply.Datacenter != "dc2" || reply.Failovers != 1 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectFailoverNodes(t, &query, &reply, 3) for _, node := range reply.Nodes { - if node.Node.Node == "node3" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node3", node.Node.Node) } - } + }) // Make sure the remote shuffle looks like it's working. uniques = make(map[string]struct{}) for i := 0; i < 100; i++ { - req := structs.PreparedQueryExecuteRequest{ - Datacenter: "dc1", - QueryIDOrName: query.Query.ID, - QueryOptions: structs.QueryOptions{Token: execToken}, - } + t.Run(fmt.Sprintf("remote shuffle iter %d", i), func(t *testing.T) { + req := structs.PreparedQueryExecuteRequest{ + Datacenter: "dc1", + QueryIDOrName: query.Query.ID, + QueryOptions: structs.QueryOptions{Token: execToken}, + } - var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + var reply structs.PreparedQueryExecuteResponse + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 9 || - reply.Datacenter != "dc2" || reply.Failovers != 1 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - var names []string - for _, node := range reply.Nodes { - names = append(names, node.Node.Node) - } - key := strings.Join(names, "|") - uniques[key] = struct{}{} + expectFailoverNodes(t, &query, &reply, 9) + var names []string + for _, node := range reply.Nodes { + names = append(names, node.Node.Node) + } + key := strings.Join(names, "|") + uniques[key] = struct{}{} + }) } // We have to allow for the fact that there won't always be a unique @@ -2509,7 +2324,7 @@ } // Make sure the query response from dc2 gets denied with the deny token. - { + t.Run("query from dc2 denied with deny token", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2517,27 +2332,17 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 0 || - reply.Datacenter != "dc2" || reply.Failovers != 1 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } - } + expectFailoverNodes(t, &query, &reply, 0) + }) // Bake the exec token into the query. query.Query.Token = execToken - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Apply", &query, &query.Query.ID)) // Now even querying with the deny token should work. - { + t.Run("query from dc2 with exec token using deny token works", func(t *testing.T) { req := structs.PreparedQueryExecuteRequest{ Datacenter: "dc1", QueryIDOrName: query.Query.ID, @@ -2545,23 +2350,13 @@ } var reply structs.PreparedQueryExecuteResponse - if err := msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply); err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, msgpackrpc.CallWithCodec(codec1, "PreparedQuery.Execute", &req, &reply)) - if len(reply.Nodes) != 9 || - reply.Datacenter != "dc2" || reply.Failovers != 1 || - reply.Service != query.Query.Service.Service || - !reflect.DeepEqual(reply.DNS, query.Query.DNS) || - !reply.QueryMeta.KnownLeader { - t.Fatalf("bad: %v", reply) - } + expectFailoverNodes(t, &query, &reply, 9) for _, node := range reply.Nodes { - if node.Node.Node == "node3" { - t.Fatalf("bad: %v", node) - } + assert.NotEqual(t, "node3", node.Node.Node) } - } + }) } func TestPreparedQuery_Execute_ForwardLeader(t *testing.T) { @@ -2960,8 +2755,8 @@ defer s2.Shutdown() s2.tokens.UpdateReplicationToken("root", tokenStore.TokenSourceConfig) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc2") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) + testrpc.WaitForLeader(t, s2.RPC, "dc2", testrpc.WithToken("root")) // Try to WAN join. joinWAN(t, s2, s1) diff -Nru consul-1.7.4+dfsg1/agent/consul/replication.go consul-1.8.7+dfsg1/agent/consul/replication.go --- consul-1.7.4+dfsg1/agent/consul/replication.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/replication.go 2020-12-10 21:46:52.000000000 +0000 @@ -183,7 +183,7 @@ metrics.MeasureSince([]string{"leader", "replication", r.Delegate.MetricName(), "fetch"}, fetchStart) if err != nil { - return 0, false, fmt.Errorf("failed to retrieve %s: %v", r.Delegate.PluralNoun(), err) + return 0, false, fmt.Errorf("failed to retrieve %s: %w", r.Delegate.PluralNoun(), err) } r.Logger.Debug("finished fetching remote objects", diff -Nru consul-1.7.4+dfsg1/agent/consul/rpc.go consul-1.8.7+dfsg1/agent/consul/rpc.go --- consul-1.7.4+dfsg1/agent/consul/rpc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/rpc.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,9 @@ package consul import ( + "context" "crypto/tls" + "encoding/binary" "errors" "fmt" "io" @@ -11,7 +13,9 @@ "time" "github.com/armon/go-metrics" + "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/consul/wanfed" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/consul/agent/pool" "github.com/hashicorp/consul/agent/structs" @@ -89,10 +93,6 @@ // handleConn is used to determine if this is a Raft or // Consul type RPC connection and invoke the correct handler func (s *Server) handleConn(conn net.Conn, isTLS bool) { - - // Read a single byte - buf := make([]byte, 1) - // Limit how long the client can hold the connection open before they send the // magic byte (and authenticate when mTLS is enabled). If `isTLS == true` then // this also enforces a timeout on how long it takes for the handshake to @@ -100,6 +100,34 @@ if s.config.RPCHandshakeTimeout > 0 { conn.SetReadDeadline(time.Now().Add(s.config.RPCHandshakeTimeout)) } + + if !isTLS && s.tlsConfigurator.MutualTLSCapable() { + // See if actually this is native TLS multiplexed onto the old + // "type-byte" system. + + peekedConn, nativeTLS, err := pool.PeekForTLS(conn) + if err != nil { + if err != io.EOF { + s.rpcLogger().Error( + "failed to read first byte", + "conn", logConn(conn), + "error", err, + ) + } + conn.Close() + return + } + + if nativeTLS { + s.handleNativeTLS(peekedConn) + return + } + conn = peekedConn + } + + // Read a single byte + buf := make([]byte, 1) + if _, err := conn.Read(buf); err != nil { if err != io.EOF { s.rpcLogger().Error("failed to read byte", @@ -171,12 +199,106 @@ } } +func (s *Server) handleNativeTLS(conn net.Conn) { + s.rpcLogger().Trace( + "detected actual TLS over RPC port", + "conn", logConn(conn), + ) + + tlscfg := s.tlsConfigurator.IncomingALPNRPCConfig(pool.RPCNextProtos) + tlsConn := tls.Server(conn, tlscfg) + + // Force the handshake to conclude. + if err := tlsConn.Handshake(); err != nil { + s.rpcLogger().Error( + "TLS handshake failed", + "conn", logConn(conn), + "error", err, + ) + conn.Close() + return + } + + // Reset the deadline as we aren't sure what is expected next - it depends on + // the protocol. + if s.config.RPCHandshakeTimeout > 0 { + conn.SetReadDeadline(time.Time{}) + } + + var ( + cs = tlsConn.ConnectionState() + sni = cs.ServerName + nextProto = cs.NegotiatedProtocol + + transport = s.memberlistTransportWAN + ) + + s.rpcLogger().Trace( + "accepted nativeTLS RPC", + "sni", sni, + "protocol", nextProto, + "conn", logConn(conn), + ) + + switch nextProto { + case pool.ALPN_RPCConsul: + s.handleConsulConn(tlsConn) + + case pool.ALPN_RPCRaft: + metrics.IncrCounter([]string{"rpc", "raft_handoff"}, 1) + s.raftLayer.Handoff(tlsConn) + + case pool.ALPN_RPCMultiplexV2: + s.handleMultiplexV2(tlsConn) + + case pool.ALPN_RPCSnapshot: + s.handleSnapshotConn(tlsConn) + + case pool.ALPN_WANGossipPacket: + if err := s.handleALPN_WANGossipPacketStream(tlsConn); err != nil && err != io.EOF { + s.rpcLogger().Error( + "failed to ingest RPC", + "sni", sni, + "protocol", nextProto, + "conn", logConn(conn), + "error", err, + ) + } + + case pool.ALPN_WANGossipStream: + // No need to defer the conn.Close() here, the Ingest methods do that. + if err := transport.IngestStream(tlsConn); err != nil { + s.rpcLogger().Error( + "failed to ingest RPC", + "sni", sni, + "protocol", nextProto, + "conn", logConn(conn), + "error", err, + ) + } + + default: + if !s.handleEnterpriseNativeTLSConn(nextProto, conn) { + s.rpcLogger().Error( + "discarding RPC for unknown negotiated protocol", + "failed to ingest RPC", + "protocol", nextProto, + "conn", logConn(conn), + ) + conn.Close() + } + } +} + // handleMultiplexV2 is used to multiplex a single incoming connection // using the Yamux multiplexer func (s *Server) handleMultiplexV2(conn net.Conn) { defer conn.Close() conf := yamux.DefaultConfig() - conf.LogOutput = s.config.LogOutput + // override the default because LogOutput conflicts with Logger + conf.LogOutput = nil + // TODO: should this be created once and cached? + conf.Logger = s.logger.StandardLogger(&hclog.StandardLoggerOptions{InferLevels: true}) server, _ := yamux.Server(conn, conf) for { sub, err := server.Accept() @@ -292,6 +414,70 @@ }() } +func (s *Server) handleALPN_WANGossipPacketStream(conn net.Conn) error { + defer conn.Close() + + transport := s.memberlistTransportWAN + for { + select { + case <-s.shutdownCh: + return nil + default: + } + + // Note: if we need to change this format to have additional header + // information we can just negotiate a different ALPN protocol instead + // of needing any sort of version field here. + prefixLen, err := readUint32(conn, wanfed.GossipPacketMaxIdleTime) + if err != nil { + return err + } + + // Avoid a memory exhaustion DOS vector here by capping how large this + // packet can be to something reasonable. + if prefixLen > wanfed.GossipPacketMaxByteSize { + return fmt.Errorf("gossip packet size %d exceeds threshold of %d", prefixLen, wanfed.GossipPacketMaxByteSize) + } + + lc := &limitedConn{ + Conn: conn, + lr: io.LimitReader(conn, int64(prefixLen)), + } + + if err := transport.IngestPacket(lc, conn.RemoteAddr(), time.Now(), false); err != nil { + return err + } + } +} + +func readUint32(conn net.Conn, timeout time.Duration) (uint32, error) { + // Since requests are framed we can easily just set a deadline on + // reading that frame and then disable it for the rest of the body. + if err := conn.SetReadDeadline(time.Now().Add(timeout)); err != nil { + return 0, err + } + + var v uint32 + if err := binary.Read(conn, binary.BigEndian, &v); err != nil { + return 0, err + } + + if err := conn.SetReadDeadline(time.Time{}); err != nil { + return 0, err + } + + return v, nil +} + +type limitedConn struct { + net.Conn + lr io.Reader +} + +func (c *limitedConn) Read(b []byte) (n int, err error) { + return c.lr.Read(b) +} + // canRetry returns true if the given situation is safe for a retry. func canRetry(args interface{}, err error) bool { // No leader errors are always safe to retry since no state could have @@ -316,14 +502,31 @@ return false } -// forward is used to forward to a remote DC or to forward to the local leader +// ForwardRPC is used to forward an RPC request to a remote DC or to the local leader // Returns a bool of if forwarding was performed, as well as any error -func (s *Server) forward(method string, info structs.RPCInfo, args interface{}, reply interface{}) (bool, error) { +func (s *Server) ForwardRPC(method string, info structs.RPCInfo, args interface{}, reply interface{}) (bool, error) { var firstCheck time.Time // Handle DC forwarding dc := info.RequestDatacenter() if dc != s.config.Datacenter { + // Local tokens only work within the current datacenter. Check to see + // if we are attempting to forward one to a remote datacenter and strip + // it, falling back on the anonymous token on the other end. + if token := info.TokenSecret(); token != "" { + done, ident, err := s.ResolveIdentityFromToken(token) + if done { + if err != nil && !acl.IsErrNotFound(err) { + return false, err + } + if ident != nil && ident.IsLocal() { + // Strip it from the request. + info.SetTokenSecret("") + defer info.SetTokenSecret(token) + } + } + } + err := s.forwardDC(method, dc, args, reply) return true, err } @@ -352,8 +555,8 @@ // Handle the case of a known leader rpcErr := structs.ErrNoLeader if leader != nil { - rpcErr = s.connPool.RPC(s.config.Datacenter, leader.Addr, - leader.Version, method, args, reply) + rpcErr = s.connPool.RPC(s.config.Datacenter, leader.ShortName, leader.Addr, + method, args, reply) if rpcErr != nil && canRetry(info, rpcErr) { goto RETRY } @@ -418,7 +621,7 @@ metrics.IncrCounterWithLabels([]string{"rpc", "cross-dc"}, 1, []metrics.Label{{Name: "datacenter", Value: dc}}) - if err := s.connPool.RPC(dc, server.Addr, server.Version, method, args, reply); err != nil { + if err := s.connPool.RPC(dc, server.ShortName, server.Addr, method, args, reply); err != nil { manager.NotifyFailedServer(server) s.rpcLogger().Error("RPC failed to server in DC", "server", server.Addr, @@ -432,22 +635,17 @@ return nil } -// globalRPC is used to forward an RPC request to one server in each datacenter. -// This will only error for RPC-related errors. Otherwise, application-level -// errors can be sent in the response objects. -func (s *Server) globalRPC(method string, args interface{}, - reply structs.CompoundResponse) error { - - // Make a new request into each datacenter - dcs := s.router.GetDatacenters() - - replies, total := 0, len(dcs) - errorCh := make(chan error, total) - respCh := make(chan interface{}, total) +// keyringRPCs is used to forward an RPC request to a server in each dc. This +// will only error for RPC-related errors. Otherwise, application-level errors +// can be sent in the response objects. +func (s *Server) keyringRPCs(method string, args interface{}, dcs []string) (*structs.KeyringResponses, error) { + + errorCh := make(chan error, len(dcs)) + respCh := make(chan *structs.KeyringResponses, len(dcs)) for _, dc := range dcs { go func(dc string) { - rr := reply.New() + rr := &structs.KeyringResponses{} if err := s.forwardDC(method, dc, args, &rr); err != nil { errorCh <- err return @@ -456,16 +654,16 @@ }(dc) } - for replies < total { + responses := &structs.KeyringResponses{} + for i := 0; i < len(dcs); i++ { select { case err := <-errorCh: - return err + return nil, err case rr := <-respCh: - reply.Add(rr) - replies++ + responses.Add(rr) } } - return nil + return responses, nil } type raftEncoder func(structs.MessageType, interface{}) ([]byte, error) @@ -553,7 +751,9 @@ // blockingQuery is used to process a potentially blocking query operation. func (s *Server) blockingQuery(queryOpts structs.QueryOptionsCompat, queryMeta structs.QueryMetaCompat, fn queryFn) error { - var timeout *time.Timer + var cancel func() + var ctx context.Context = &lib.StopChannelContext{StopCh: s.shutdownCh} + var queriesBlocking uint64 var queryTimeout time.Duration @@ -577,9 +777,9 @@ // Apply a small amount of jitter to the request. queryTimeout += lib.RandomStagger(queryTimeout / jitterFraction) - // Setup a query timeout. - timeout = time.NewTimer(queryTimeout) - defer timeout.Stop() + // wrap the base context with a deadline + ctx, cancel = context.WithDeadline(ctx, time.Now().Add(queryTimeout)) + defer cancel() // instrument blockingQueries // atomic inc our server's count of in-flight blockingQueries and store the new value @@ -634,7 +834,9 @@ } // block up to the timeout if we don't see anything fresh. if err == nil && minQueryIndex > 0 && queryMeta.GetIndex() <= minQueryIndex { - if expired := ws.Watch(timeout.C); !expired { + if err := ws.WatchCtx(ctx); err == nil { + // a non-nil error only occurs when the context is cancelled + // If a restore may have woken us up then bail out from // the query immediately. This is slightly race-ey since // this might have been interrupted for other reasons, diff -Nru consul-1.7.4+dfsg1/agent/consul/rpc_test.go consul-1.8.7+dfsg1/agent/consul/rpc_test.go --- consul-1.7.4+dfsg1/agent/consul/rpc_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/rpc_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,15 +2,21 @@ import ( "bytes" + "encoding/binary" + "math" "net" "os" "strings" + "sync" "testing" "time" + "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/pool" "github.com/hashicorp/consul/agent/structs" + tokenStore "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/go-memdb" @@ -652,3 +658,209 @@ }) } } + +func TestRPC_readUint32(t *testing.T) { + cases := []struct { + name string + writeFn func(net.Conn) + readFn func(*testing.T, net.Conn) + }{ + { + name: "timeouts irrelevant", + writeFn: func(conn net.Conn) { + _ = binary.Write(conn, binary.BigEndian, uint32(42)) + _ = binary.Write(conn, binary.BigEndian, uint32(math.MaxUint32)) + _ = binary.Write(conn, binary.BigEndian, uint32(1)) + }, + readFn: func(t *testing.T, conn net.Conn) { + t.Helper() + v, err := readUint32(conn, 5*time.Second) + require.NoError(t, err) + require.Equal(t, uint32(42), v) + + v, err = readUint32(conn, 5*time.Second) + require.NoError(t, err) + require.Equal(t, uint32(math.MaxUint32), v) + + v, err = readUint32(conn, 5*time.Second) + require.NoError(t, err) + require.Equal(t, uint32(1), v) + }, + }, + { + name: "triggers timeout on last read", + writeFn: func(conn net.Conn) { + _ = binary.Write(conn, binary.BigEndian, uint32(42)) + _ = binary.Write(conn, binary.BigEndian, uint32(math.MaxUint32)) + _ = binary.Write(conn, binary.BigEndian, uint16(1)) // half as many bytes as expected + }, + readFn: func(t *testing.T, conn net.Conn) { + t.Helper() + v, err := readUint32(conn, 5*time.Second) + require.NoError(t, err) + require.Equal(t, uint32(42), v) + + v, err = readUint32(conn, 5*time.Second) + require.NoError(t, err) + require.Equal(t, uint32(math.MaxUint32), v) + + _, err = readUint32(conn, 50*time.Millisecond) + require.Error(t, err) + nerr, ok := err.(net.Error) + require.True(t, ok) + require.True(t, nerr.Timeout()) + }, + }, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + var doneWg sync.WaitGroup + defer doneWg.Wait() + + client, server := net.Pipe() + defer client.Close() + defer server.Close() + + // Client pushes some data. + doneWg.Add(1) + go func() { + doneWg.Done() + tc.writeFn(client) + }() + + // The server tests the function for us. + tc.readFn(t, server) + }) + } +} + +func TestRPC_LocalTokenStrippedOnForward(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.PrimaryDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLDefaultPolicy = "deny" + c.ACLMasterToken = "root" + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + testrpc.WaitForLeader(t, s1.RPC, "dc1") + codec := rpcClient(t, s1) + defer codec.Close() + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.ACLsEnabled = true + c.ACLDefaultPolicy = "deny" + c.ACLTokenReplication = true + c.ACLReplicationRate = 100 + c.ACLReplicationBurst = 100 + c.ACLReplicationApplyLimit = 1000000 + }) + s2.tokens.UpdateReplicationToken("root", tokenStore.TokenSourceConfig) + testrpc.WaitForLeader(t, s2.RPC, "dc2") + defer os.RemoveAll(dir2) + defer s2.Shutdown() + codec2 := rpcClient(t, s2) + defer codec2.Close() + + // Try to join. + joinWAN(t, s2, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc2") + + // Wait for legacy acls to be disabled so we are clear that + // legacy replication isn't meddling. + waitForNewACLs(t, s1) + waitForNewACLs(t, s2) + waitForNewACLReplication(t, s2, structs.ACLReplicateTokens, 1, 1, 0) + + // create simple kv policy + kvPolicy, err := upsertTestPolicyWithRules(codec, "root", "dc1", ` + key_prefix "" { policy = "write" } + `) + require.NoError(t, err) + + // Wait for it to replicate + retry.Run(t, func(r *retry.R) { + _, p, err := s2.fsm.State().ACLPolicyGetByID(nil, kvPolicy.ID, &structs.EnterpriseMeta{}) + require.Nil(r, err) + require.NotNil(r, p) + }) + + // create local token that only works in DC2 + localToken2, err := upsertTestToken(codec, "root", "dc2", func(token *structs.ACLToken) { + token.Local = true + token.Policies = []structs.ACLTokenPolicyLink{ + {ID: kvPolicy.ID}, + } + }) + require.NoError(t, err) + + // Try to use it locally (it should work) + arg := structs.KVSRequest{ + Datacenter: "dc2", + Op: api.KVSet, + DirEnt: structs.DirEntry{ + Key: "foo", + Value: []byte("bar"), + }, + WriteRequest: structs.WriteRequest{Token: localToken2.SecretID}, + } + var out bool + err = msgpackrpc.CallWithCodec(codec2, "KVS.Apply", &arg, &out) + require.NoError(t, err) + require.Equal(t, localToken2.SecretID, arg.WriteRequest.Token, "token should not be stripped") + + // Try to use it remotely + arg = structs.KVSRequest{ + Datacenter: "dc1", + Op: api.KVSet, + DirEnt: structs.DirEntry{ + Key: "foo", + Value: []byte("bar"), + }, + WriteRequest: structs.WriteRequest{Token: localToken2.SecretID}, + } + err = msgpackrpc.CallWithCodec(codec2, "KVS.Apply", &arg, &out) + if !acl.IsErrPermissionDenied(err) { + t.Fatalf("err: %v", err) + } + + // Update the anon token to also be able to write to kv + { + tokenUpsertReq := structs.ACLTokenSetRequest{ + Datacenter: "dc1", + ACLToken: structs.ACLToken{ + AccessorID: structs.ACLTokenAnonymousID, + Policies: []structs.ACLTokenPolicyLink{ + structs.ACLTokenPolicyLink{ + ID: kvPolicy.ID, + }, + }, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + token := structs.ACLToken{} + err = msgpackrpc.CallWithCodec(codec, "ACL.TokenSet", &tokenUpsertReq, &token) + require.NoError(t, err) + require.NotEmpty(t, token.SecretID) + } + + // Try to use it remotely again, but this time it should fallback to anon + arg = structs.KVSRequest{ + Datacenter: "dc1", + Op: api.KVSet, + DirEnt: structs.DirEntry{ + Key: "foo", + Value: []byte("bar"), + }, + WriteRequest: structs.WriteRequest{Token: localToken2.SecretID}, + } + err = msgpackrpc.CallWithCodec(codec2, "KVS.Apply", &arg, &out) + require.NoError(t, err) + require.Equal(t, localToken2.SecretID, arg.WriteRequest.Token, "token should not be stripped") +} diff -Nru consul-1.7.4+dfsg1/agent/consul/segment_oss.go consul-1.8.7+dfsg1/agent/consul/segment_oss.go --- consul-1.7.4+dfsg1/agent/consul/segment_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/segment_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -57,7 +57,7 @@ // reconcile is used to reconcile the differences between Serf membership and // what is reflected in our strongly consistent store. Mainly we need to ensure // all live nodes are registered, all failed nodes are marked as such, and all -// left nodes are de-registered. +// left nodes are deregistered. func (s *Server) reconcile() (err error) { defer metrics.MeasureSince([]string{"leader", "reconcile"}, time.Now()) members := s.serfLAN.Members() diff -Nru consul-1.7.4+dfsg1/agent/consul/server_connect.go consul-1.8.7+dfsg1/agent/consul/server_connect.go --- consul-1.7.4+dfsg1/agent/consul/server_connect.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/server_connect.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,289 @@ +package consul + +import ( + "context" + "crypto/x509" + "fmt" + "net/url" + "strings" + "sync" + + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/connect/ca" + "github.com/hashicorp/consul/agent/consul/state" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/lib/semaphore" + memdb "github.com/hashicorp/go-memdb" + "golang.org/x/time/rate" +) + +type connectSignRateLimiter struct { + // csrRateLimiter limits the rate of signing new certs if configured. Lazily + // initialized from current config to support dynamic changes. + // csrRateLimiterMu must be held while dereferencing the pointer or storing a + // new one, but methods can be called on the limiter object outside of the + // locked section. This is done only in the getCSRRateLimiterWithLimit method. + csrRateLimiter *rate.Limiter + csrRateLimiterMu sync.RWMutex + + // csrConcurrencyLimiter is a dynamically resizable semaphore used to limit + // Sign RPC concurrency if configured. The zero value is usable as soon as + // SetSize is called which we do dynamically in the RPC handler to avoid + // having to hook elaborate synchronization mechanisms through the CA config + // endpoint and config reload etc. + csrConcurrencyLimiter semaphore.Dynamic +} + +// getCSRRateLimiterWithLimit returns a rate.Limiter with the desired limit set. +// It uses the shared server-wide limiter unless the limit has been changed in +// config or the limiter has not been setup yet in which case it just-in-time +// configures the new limiter. We assume that limit changes are relatively rare +// and that all callers (there is currently only one) use the same config value +// as the limit. There might be some flapping if there are multiple concurrent +// requests in flight at the time the config changes where A sees the new value +// and updates, B sees the old but then gets this lock second and changes back. +// Eventually though and very soon (once all current RPCs are complete) we are +// guaranteed to have the correct limit set by the next RPC that comes in so I +// assume this is fine. If we observe strange behavior because of it, we could +// add hysteresis that prevents changes too soon after a previous change but +// that seems unnecessary for now. +func (l *connectSignRateLimiter) getCSRRateLimiterWithLimit(limit rate.Limit) *rate.Limiter { + l.csrRateLimiterMu.RLock() + lim := l.csrRateLimiter + l.csrRateLimiterMu.RUnlock() + + // If there is a current limiter with the same limit, return it. This should + // be the common case. + if lim != nil && lim.Limit() == limit { + return lim + } + + // Need to change limiter, get write lock + l.csrRateLimiterMu.Lock() + defer l.csrRateLimiterMu.Unlock() + // No limiter yet, or limit changed in CA config, reconfigure a new limiter. + // We use burst of 1 for a hard limit. Note that either bursting or waiting is + // necessary to get expected behavior in fact of random arrival times, but we + // don't need both and we use Wait with a small delay to smooth noise. See + // https://github.com/banks/sim-rate-limit-backoff/blob/master/README.md. + l.csrRateLimiter = rate.NewLimiter(limit, 1) + return l.csrRateLimiter +} + +// GetCARoots will retrieve +func (s *Server) GetCARoots() (*structs.IndexedCARoots, error) { + return s.getCARoots(nil, s.fsm.State()) +} + +func (s *Server) getCARoots(ws memdb.WatchSet, state *state.Store) (*structs.IndexedCARoots, error) { + index, roots, config, err := state.CARootsAndConfig(ws) + if err != nil { + return nil, err + } + + indexedRoots := &structs.IndexedCARoots{} + + if config != nil { + // Build TrustDomain based on the ClusterID stored. + signingID := connect.SpiffeIDSigningForCluster(config) + if signingID == nil { + // If CA is bootstrapped at all then this should never happen but be + // defensive. + return nil, fmt.Errorf("no cluster trust domain setup") + } + + indexedRoots.TrustDomain = signingID.Host() + } + + indexedRoots.Index, indexedRoots.Roots = index, roots + if indexedRoots.Roots == nil { + indexedRoots.Roots = make(structs.CARoots, 0) + } + + // The response should not contain all fields as there are sensitive + // data such as key material stored within the struct. So here we + // pull out some of the fields and copy them into + for i, r := range indexedRoots.Roots { + // IMPORTANT: r must NEVER be modified, since it is a pointer + // directly to the structure in the memdb store. + + indexedRoots.Roots[i] = &structs.CARoot{ + ID: r.ID, + Name: r.Name, + SerialNumber: r.SerialNumber, + SigningKeyID: r.SigningKeyID, + ExternalTrustDomain: r.ExternalTrustDomain, + NotBefore: r.NotBefore, + NotAfter: r.NotAfter, + RootCert: r.RootCert, + IntermediateCerts: r.IntermediateCerts, + RaftIndex: r.RaftIndex, + Active: r.Active, + PrivateKeyType: r.PrivateKeyType, + PrivateKeyBits: r.PrivateKeyBits, + } + + if r.Active { + indexedRoots.ActiveRootID = r.ID + } + } + + return indexedRoots, nil +} + +func (s *Server) SignCertificate(csr *x509.CertificateRequest, spiffeID connect.CertURI) (*structs.IssuedCert, error) { + provider, caRoot := s.caManager.getCAProvider() + if provider == nil { + return nil, fmt.Errorf("internal error: CA provider is nil") + } else if caRoot == nil { + return nil, fmt.Errorf("internal error: CA root is nil") + } + + // Verify that the CSR entity is in the cluster's trust domain + state := s.fsm.State() + _, config, err := state.CAConfig(nil) + if err != nil { + return nil, err + } + signingID := connect.SpiffeIDSigningForCluster(config) + serviceID, isService := spiffeID.(*connect.SpiffeIDService) + agentID, isAgent := spiffeID.(*connect.SpiffeIDAgent) + if !isService && !isAgent { + return nil, fmt.Errorf("SPIFFE ID in CSR must be a service or agent ID") + } + + var entMeta structs.EnterpriseMeta + if isService { + if !signingID.CanSign(spiffeID) { + return nil, fmt.Errorf("SPIFFE ID in CSR from a different trust domain: %s, "+ + "we are %s", serviceID.Host, signingID.Host()) + } + entMeta.Merge(serviceID.GetEnterpriseMeta()) + } else { + // isAgent - if we support more ID types then this would need to be an else if + // here we are just automatically fixing the trust domain. For auto-encrypt and + // auto-config they make certificate requests before learning about the roots + // so they will have a dummy trust domain in the CSR. + trustDomain := signingID.Host() + if agentID.Host != trustDomain { + originalURI := agentID.URI() + + agentID.Host = trustDomain + csr.Subject.CommonName = connect.AgentCN(agentID.Agent, trustDomain) + + // recreate the URIs list + uris := make([]*url.URL, len(csr.URIs)) + for i, uri := range csr.URIs { + if originalURI.String() == uri.String() { + uris[i] = agentID.URI() + } else { + uris[i] = uri + } + } + + csr.URIs = uris + } + entMeta.Merge(structs.DefaultEnterpriseMeta()) + } + + commonCfg, err := config.GetCommonConfig() + if err != nil { + return nil, err + } + if commonCfg.CSRMaxPerSecond > 0 { + lim := s.caLeafLimiter.getCSRRateLimiterWithLimit(rate.Limit(commonCfg.CSRMaxPerSecond)) + // Wait up to the small threshold we allow for a token. + ctx, cancel := context.WithTimeout(context.Background(), csrLimitWait) + defer cancel() + if lim.Wait(ctx) != nil { + return nil, ErrRateLimited + } + } else if commonCfg.CSRMaxConcurrent > 0 { + s.caLeafLimiter.csrConcurrencyLimiter.SetSize(int64(commonCfg.CSRMaxConcurrent)) + ctx, cancel := context.WithTimeout(context.Background(), csrLimitWait) + defer cancel() + if err := s.caLeafLimiter.csrConcurrencyLimiter.Acquire(ctx); err != nil { + return nil, ErrRateLimited + } + defer s.caLeafLimiter.csrConcurrencyLimiter.Release() + } + + // All seems to be in order, actually sign it. + pem, err := provider.Sign(csr) + if err == ca.ErrRateLimited { + return nil, ErrRateLimited + } + if err != nil { + return nil, err + } + + // Append any intermediates needed by this root. + for _, p := range caRoot.IntermediateCerts { + pem = strings.TrimSpace(pem) + "\n" + p + } + + // Append our local CA's intermediate if there is one. + inter, err := provider.ActiveIntermediate() + if err != nil { + return nil, err + } + root, err := provider.ActiveRoot() + if err != nil { + return nil, err + } + + if inter != root { + pem = strings.TrimSpace(pem) + "\n" + inter + } + + // TODO(banks): when we implement IssuedCerts table we can use the insert to + // that as the raft index to return in response. + // + // UPDATE(mkeeler): The original implementation relied on updating the CAConfig + // and using its index as the ModifyIndex for certs. This was buggy. The long + // term goal is still to insert some metadata into raft about the certificates + // and use that raft index for the ModifyIndex. This is a partial step in that + // direction except that we only are setting an index and not storing the + // metadata. + req := structs.CALeafRequest{ + Op: structs.CALeafOpIncrementIndex, + Datacenter: s.config.Datacenter, + } + + resp, err := s.raftApply(structs.ConnectCALeafRequestType|structs.IgnoreUnknownTypeFlag, &req) + if err != nil { + return nil, err + } + + modIdx, ok := resp.(uint64) + if !ok { + return nil, fmt.Errorf("Invalid response from updating the leaf cert index") + } + + cert, err := connect.ParseCert(pem) + if err != nil { + return nil, err + } + + // Set the response + reply := structs.IssuedCert{ + SerialNumber: connect.EncodeSerialNumber(cert.SerialNumber), + CertPEM: pem, + ValidAfter: cert.NotBefore, + ValidBefore: cert.NotAfter, + EnterpriseMeta: entMeta, + RaftIndex: structs.RaftIndex{ + ModifyIndex: modIdx, + CreateIndex: modIdx, + }, + } + if isService { + reply.Service = serviceID.Service + reply.ServiceURI = cert.URIs[0].String() + } else if isAgent { + reply.Agent = agentID.Agent + reply.AgentURI = cert.URIs[0].String() + } + + return &reply, nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/server.go consul-1.8.7+dfsg1/agent/consul/server.go --- consul-1.7.4+dfsg1/agent/consul/server.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/server.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package consul import ( + "context" "errors" "fmt" "io" @@ -18,8 +19,8 @@ metrics "github.com/armon/go-metrics" "github.com/hashicorp/consul/acl" - ca "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/consul/authmethod" + "github.com/hashicorp/consul/agent/consul/authmethod/ssoauth" "github.com/hashicorp/consul/agent/consul/autopilot" "github.com/hashicorp/consul/agent/consul/fsm" "github.com/hashicorp/consul/agent/consul/state" @@ -35,6 +36,7 @@ connlimit "github.com/hashicorp/go-connlimit" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" + "github.com/hashicorp/memberlist" "github.com/hashicorp/raft" raftboltdb "github.com/hashicorp/raft-boltdb" "github.com/hashicorp/serf/serf" @@ -45,6 +47,8 @@ // Consul-level protocol versions, that are used to configure the Serf // protocol versions. const ( + DefaultRPCProtocol = 2 + ProtocolVersionMin uint8 = 2 // Version 3 added support for network coordinates but we kept the @@ -90,17 +94,20 @@ ) const ( - legacyACLReplicationRoutineName = "legacy ACL replication" - aclPolicyReplicationRoutineName = "ACL policy replication" - aclRoleReplicationRoutineName = "ACL role replication" - aclTokenReplicationRoutineName = "ACL token replication" - aclTokenReapingRoutineName = "acl token reaping" - aclUpgradeRoutineName = "legacy ACL token upgrade" - caRootPruningRoutineName = "CA root pruning" - configReplicationRoutineName = "config entry replication" - intentionReplicationRoutineName = "intention replication" - secondaryCARootWatchRoutineName = "secondary CA roots watch" - secondaryCertRenewWatchRoutineName = "secondary cert renew watch" + legacyACLReplicationRoutineName = "legacy ACL replication" + aclPolicyReplicationRoutineName = "ACL policy replication" + aclRoleReplicationRoutineName = "ACL role replication" + aclTokenReplicationRoutineName = "ACL token replication" + aclTokenReapingRoutineName = "acl token reaping" + aclUpgradeRoutineName = "legacy ACL token upgrade" + caRootPruningRoutineName = "CA root pruning" + configReplicationRoutineName = "config entry replication" + federationStateReplicationRoutineName = "federation state replication" + federationStateAntiEntropyRoutineName = "federation state anti-entropy" + federationStatePruningRoutineName = "federation state pruning" + intentionReplicationRoutineName = "intention replication" + secondaryCARootWatchRoutineName = "secondary CA roots watch" + intermediateCertRenewWatchRoutineName = "intermediate cert renew watch" ) var ( @@ -131,20 +138,11 @@ // autopilot is the Autopilot instance for this server. autopilot *autopilot.Autopilot - // autopilotWaitGroup is used to block until Autopilot shuts down. - autopilotWaitGroup sync.WaitGroup + // caManager is used to synchronize CA operations across the leader and RPC functions. + caManager *CAManager - // caProviderReconfigurationLock guards the provider reconfiguration. - caProviderReconfigurationLock sync.Mutex - // caProvider is the current CA provider in use for Connect. This is - // only non-nil when we are the leader. - caProvider ca.Provider - // caProviderRoot is the CARoot that was stored along with the ca.Provider - // active. It's only updated in lock-step with the caProvider. This prevents - // races between state updates to active roots and the fetch of the provider - // instance. - caProviderRoot *structs.CARoot - caProviderLock sync.RWMutex + // rate limiter to use when signing leaf certificates + caLeafLimiter connectSignRateLimiter // Consul configuration config *Config @@ -153,6 +151,16 @@ // centralized config configReplicator *Replicator + // federationStateReplicator is used to manage the leaders replication routines for + // federation states + federationStateReplicator *Replicator + + // dcSupportsFederationStates is used to determine whether we can + // replicate federation states or not. All servers in the local + // DC must be on a version of Consul supporting federation states + // before this will get enabled. + dcSupportsFederationStates int32 + // tokens holds ACL tokens initially from the configuration, but can // be updated at runtime, so should always be used instead of going to // the configuration directly. @@ -240,7 +248,9 @@ // serfWAN is the Serf cluster maintained between DC's // which SHOULD only consist of Consul servers - serfWAN *serf.Serf + serfWAN *serf.Serf + memberlistTransportWAN memberlist.IngestionAwareTransport + gatewayLocator *GatewayLocator // serverLookup tracks server consuls in the local datacenter. // Used to do leader forwarding and provide fast lookup by server id and address @@ -279,10 +289,6 @@ shutdownCh chan struct{} shutdownLock sync.Mutex - // State for whether this datacenter is acting as a secondary CA. - actingSecondaryCA bool - actingSecondaryLock sync.RWMutex - // Manager to handle starting/stopping go routines when establishing/revoking raft leadership leaderRoutineManager *LeaderRoutineManager @@ -290,44 +296,28 @@ EnterpriseServer } -// NewServer is only used to help setting up a server for testing. Normal code -// exercises NewServerLogger. -func NewServer(config *Config) (*Server, error) { - c, err := tlsutil.NewConfigurator(config.ToTLSUtilConfig(), nil) - if err != nil { - return nil, err - } - return NewServerLogger(config, nil, new(token.Store), c) -} +// NewServer is used to construct a new Consul server from the configuration +// and extra options, potentially returning an error. +func NewServer(config *Config, options ...ConsulOption) (*Server, error) { + flat := flattenConsulOptions(options) + + logger := flat.logger + tokens := flat.tokens + tlsConfigurator := flat.tlsConfigurator + connPool := flat.connPool + rpcRouter := flat.router -// NewServerLogger is used to construct a new Consul server from the -// configuration, potentially returning an error -func NewServerLogger(config *Config, logger hclog.InterceptLogger, tokens *token.Store, tlsConfigurator *tlsutil.Configurator) (*Server, error) { - // Check the protocol version. if err := config.CheckProtocolVersion(); err != nil { return nil, err } - - // Check for a data directory. if config.DataDir == "" && !config.DevMode { return nil, fmt.Errorf("Config must provide a DataDir") } - - // Sanity check the ACLs. if err := config.CheckACL(); err != nil { return nil, err } - - // Ensure we have a log output and create a logger. - if config.LogOutput == nil { - config.LogOutput = os.Stderr - } - if logger == nil { - logger = hclog.NewInterceptLogger(&hclog.LoggerOptions{ - Level: hclog.Debug, - Output: config.LogOutput, - }) + return nil, fmt.Errorf("logger is required") } // Check if TLS is enabled @@ -357,17 +347,25 @@ // Create the shutdown channel - this is closed but never written to. shutdownCh := make(chan struct{}) - connPool := &pool.ConnPool{ - SrcAddr: config.RPCSrcAddr, - LogOutput: config.LogOutput, - MaxTime: serverRPCCache, - MaxStreams: serverMaxStreams, - TLSConfigurator: tlsConfigurator, - ForceTLS: config.VerifyOutgoing, + if connPool == nil { + connPool = &pool.ConnPool{ + Server: true, + SrcAddr: config.RPCSrcAddr, + Logger: logger.StandardLogger(&hclog.StandardLoggerOptions{InferLevels: true}), + MaxTime: serverRPCCache, + MaxStreams: serverMaxStreams, + TLSConfigurator: tlsConfigurator, + Datacenter: config.Datacenter, + } } serverLogger := logger.NamedIntercept(logging.ConsulServer) loggers := newLoggerStore(serverLogger) + + if rpcRouter == nil { + rpcRouter = router.NewRouter(serverLogger, config.Datacenter, fmt.Sprintf("%s.%s", config.NodeName, config.Datacenter)) + } + // Create server. s := &Server{ config: config, @@ -379,7 +377,7 @@ loggers: loggers, leaveCh: make(chan struct{}), reconcileCh: make(chan serf.Member, reconcileChSize), - router: router.NewRouter(serverLogger, config.Datacenter, fmt.Sprintf("%s.%s", config.NodeName, config.Datacenter)), + router: rpcRouter, rpcServer: rpc.NewServer(), insecureRPCServer: rpc.NewServer(), tlsConfigurator: tlsConfigurator, @@ -393,6 +391,16 @@ aclAuthMethodValidators: authmethod.NewCache(), } + if s.config.ConnectMeshGatewayWANFederationEnabled { + s.gatewayLocator = NewGatewayLocator( + s.logger, + s, + s.config.Datacenter, + s.config.PrimaryDatacenter, + ) + s.connPool.GatewayResolver = s.gatewayLocator.PickGateway + } + // Initialize enterprise specific server functionality if err := s.initEnterprise(); err != nil { s.Shutdown() @@ -414,6 +422,26 @@ return nil, err } + federationStateReplicatorConfig := ReplicatorConfig{ + Name: logging.FederationState, + Delegate: &IndexReplicator{ + Delegate: &FederationStateReplicator{ + srv: s, + gatewayLocator: s.gatewayLocator, + }, + Logger: s.logger, + }, + Rate: s.config.FederationStateReplicationRate, + Burst: s.config.FederationStateReplicationBurst, + Logger: logger, + SuppressErrorLog: isErrFederationStatesNotSupported, + } + s.federationStateReplicator, err = NewReplicator(&federationStateReplicatorConfig) + if err != nil { + s.Shutdown() + return nil, err + } + // Initialize the stats fetcher that autopilot will use. s.statsFetcher = NewStatsFetcher(logger, s.connPool, s.config.Datacenter) @@ -452,8 +480,13 @@ return nil, fmt.Errorf("Failed to start Raft: %v", err) } - if s.config.ConnectEnabled && s.config.AutoEncryptAllowTLS { - go s.trackAutoEncryptCARoots() + s.caManager = NewCAManager(&caDelegateWithState{s}, s.loggers.Named(logging.Connect), s.config) + if s.config.ConnectEnabled && (s.config.AutoEncryptAllowTLS || s.config.AutoConfigAuthzEnabled) { + go s.connectCARootsMonitor(&lib.StopChannelContext{StopCh: s.shutdownCh}) + } + + if s.gatewayLocator != nil { + go s.gatewayLocator.Run(&lib.StopChannelContext{StopCh: s.shutdownCh}) } // Serf and dynamic bind ports @@ -474,6 +507,11 @@ s.Shutdown() return nil, fmt.Errorf("Failed to start WAN Serf: %v", err) } + + // This is always a *memberlist.NetTransport or something which wraps + // it which satisfies this interface. + s.memberlistTransportWAN = config.SerfWANConfig.MemberlistConfig.Transport.(memberlist.IngestionAwareTransport) + // See big comment above why we are doing this. if serfBindPortWAN == 0 { serfBindPortWAN = config.SerfWANConfig.MemberlistConfig.BindPort @@ -497,6 +535,11 @@ s.Shutdown() return nil, fmt.Errorf("Failed to start LAN Serf: %v", err) } + + if err := s.router.AddArea(types.AreaLAN, s.serfLAN, s.connPool); err != nil { + s.Shutdown() + return nil, fmt.Errorf("Failed to add LAN serf route: %w", err) + } go s.lanEventHandler() // Start the flooders after the LAN event handler is wired up. @@ -552,14 +595,8 @@ return s, nil } -func (s *Server) trackAutoEncryptCARoots() { +func (s *Server) connectCARootsMonitor(ctx context.Context) { for { - select { - case <-s.shutdownCh: - s.logger.Debug("shutting down trackAutoEncryptCARoots because shutdown") - return - default: - } ws := memdb.NewWatchSet() state := s.fsm.State() ws.Add(state.AbandonCh()) @@ -572,10 +609,14 @@ for _, ca := range cas { caPems = append(caPems, ca.RootCert) } - if err := s.tlsConfigurator.UpdateAutoEncryptCA(caPems); err != nil { + if err := s.tlsConfigurator.UpdateAutoTLSCA(caPems); err != nil { s.logger.Error("Failed to update AutoEncrypt CAPems", "error", err) } - ws.Watch(nil) + + if err := ws.WatchCtx(ctx); err == context.Canceled { + s.logger.Info("shutting down Connect CA roots monitor") + return + } } } @@ -656,7 +697,7 @@ log = cacheStore // Create the snapshot store. - snapshots, err := raft.NewFileSnapshotStore(path, snapshotsRetained, s.config.LogOutput) + snapshots, err := raft.NewFileSnapshotStoreWithLogger(path, snapshotsRetained, s.logger.Named("snapshot")) if err != nil { return err } @@ -776,11 +817,33 @@ // been configured. s.insecureRPCServer.Register(&AutoEncrypt{srv: s}) + // Setup the AutoConfig JWT Authorizer + var authz AutoConfigAuthorizer + if s.config.AutoConfigAuthzEnabled { + // create the auto config authorizer from the JWT authmethod + validator, err := ssoauth.NewValidator(s.logger, &s.config.AutoConfigAuthzAuthMethod) + if err != nil { + return fmt.Errorf("Failed to initialize JWT Auto Config Authorizer: %w", err) + } + + authz = &jwtAuthorizer{ + validator: validator, + allowReuse: s.config.AutoConfigAuthzAllowReuse, + claimAssertions: s.config.AutoConfigAuthzClaimAssertions, + } + } else { + // This authorizer always returns that the endpoint is disabled + authz = &disabledAuthorizer{} + } + // now register with the insecure RPC server + s.insecureRPCServer.Register(NewAutoConfig(s.config, s.tlsConfigurator, s, authz)) + ln, err := net.ListenTCP("tcp", s.config.RPCAddr) if err != nil { return err } s.Listener = ln + if s.config.NotifyListen != nil { s.config.NotifyListen() } @@ -857,12 +920,16 @@ } // Close the connection pool - s.connPool.Shutdown() + if s.connPool != nil { + s.connPool.Shutdown() + } - s.acls.Close() + if s.acls != nil { + s.acls.Close() + } - if s.config.NotifyShutdown != nil { - s.config.NotifyShutdown() + if s.fsm != nil { + s.fsm.State().Abandon() } return nil @@ -1009,6 +1076,41 @@ return s.serfWAN.Join(addrs, true) } +// PrimaryMeshGatewayAddressesReadyCh returns a channel that will be closed +// when federation state replication ships back at least one primary mesh +// gateway (not via fallback config). +func (s *Server) PrimaryMeshGatewayAddressesReadyCh() <-chan struct{} { + if s.gatewayLocator == nil { + return nil + } + return s.gatewayLocator.PrimaryMeshGatewayAddressesReadyCh() +} + +// PickRandomMeshGatewaySuitableForDialing is a convenience function used for writing tests. +func (s *Server) PickRandomMeshGatewaySuitableForDialing(dc string) string { + if s.gatewayLocator == nil { + return "" + } + return s.gatewayLocator.PickGateway(dc) +} + +// RefreshPrimaryGatewayFallbackAddresses is used to update the list of current +// fallback addresses for locating mesh gateways in the primary datacenter. +func (s *Server) RefreshPrimaryGatewayFallbackAddresses(addrs []string) { + if s.gatewayLocator != nil { + s.gatewayLocator.RefreshPrimaryGatewayFallbackAddresses(addrs) + } +} + +// PrimaryGatewayFallbackAddresses returns the current set of discovered +// fallback addresses for the mesh gateways in the primary datacenter. +func (s *Server) PrimaryGatewayFallbackAddresses() []string { + if s.gatewayLocator == nil { + return nil + } + return s.gatewayLocator.PrimaryGatewayFallbackAddresses() +} + // LocalMember is used to return the local node func (s *Server) LocalMember() serf.Member { return s.serfLAN.LocalMember() @@ -1057,6 +1159,12 @@ return s.raft.State() == raft.Leader } +// LeaderLastContact returns the time of last contact by a leader. +// This only makes sense if we are currently a follower. +func (s *Server) LeaderLastContact() time.Time { + return s.raft.LastContact() +} + // KeyManagerLAN returns the LAN Serf keyring manager func (s *Server) KeyManagerLAN() *serf.KeyManager { return s.serfLAN.KeyManager() @@ -1067,15 +1175,6 @@ return s.serfWAN.KeyManager() } -// Encrypted determines if gossip is encrypted -func (s *Server) Encrypted() bool { - LANEncrypted := s.serfLAN.EncryptionEnabled() - if s.serfWAN == nil { - return LANEncrypted - } - return LANEncrypted && s.serfWAN.EncryptionEnabled() -} - // LANSegments returns a map of LAN segments by name func (s *Server) LANSegments() map[string]*serf.Serf { segments := make(map[string]*serf.Serf, len(s.segmentLAN)+1) @@ -1301,6 +1400,72 @@ return s.config.ConnectEnabled && s.config.Datacenter != s.config.PrimaryDatacenter } +// CreateACLToken will create an ACL token from the given template +func (s *Server) CreateACLToken(template *structs.ACLToken) (*structs.ACLToken, error) { + // we have to require local tokens or else it would require having these servers use a token with acl:write to make a + // token create RPC to the servers in the primary DC. + if !s.LocalTokensEnabled() { + return nil, fmt.Errorf("Agent Auto Configuration requires local token usage to be enabled in this datacenter: %s", s.config.Datacenter) + } + + newToken := *template + + // generate the accessor id + if newToken.AccessorID == "" { + accessor, err := lib.GenerateUUID(s.checkTokenUUID) + if err != nil { + return nil, err + } + + newToken.AccessorID = accessor + } + + // generate the secret id + if newToken.SecretID == "" { + secret, err := lib.GenerateUUID(s.checkTokenUUID) + if err != nil { + return nil, err + } + + newToken.SecretID = secret + } + + newToken.CreateTime = time.Now() + + req := structs.ACLTokenBatchSetRequest{ + Tokens: structs.ACLTokens{&newToken}, + CAS: false, + } + + // perform the request to mint the new token + if _, err := s.raftApplyMsgpack(structs.ACLTokenSetRequestType, &req); err != nil { + return nil, err + } + + // return the full token definition from the FSM + _, token, err := s.fsm.State().ACLTokenGetByAccessor(nil, newToken.AccessorID, &newToken.EnterpriseMeta) + return token, err +} + +// DatacenterJoinAddresses will return all the strings suitable for usage in +// retry join operations to connect to the the LAN or LAN segment gossip pool. +func (s *Server) DatacenterJoinAddresses(segment string) ([]string, error) { + members, err := s.LANSegmentMembers(segment) + if err != nil { + return nil, fmt.Errorf("Failed to retrieve members for segment %s - %w", segment, err) + } + + var joinAddrs []string + for _, m := range members { + if ok, _ := metadata.IsConsulServer(m); ok { + serfAddr := net.TCPAddr{IP: m.Addr, Port: int(m.Port)} + joinAddrs = append(joinAddrs, serfAddr.String()) + } + } + + return joinAddrs, nil +} + // peersInfoContent is used to help operators understand what happened to the // peers.json file. This is written to a file called peers.info in the same // location. diff -Nru consul-1.7.4+dfsg1/agent/consul/server_lookup_test.go consul-1.8.7+dfsg1/agent/consul/server_lookup_test.go --- consul-1.7.4+dfsg1/agent/consul/server_lookup_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/server_lookup_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,11 @@ package consul import ( - "fmt" "testing" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/raft" + "github.com/stretchr/testify/require" ) type testAddr struct { @@ -46,11 +46,8 @@ lookup.RemoveServer(svr) - got, err = lookup.ServerAddr("1") - expectedErr := fmt.Errorf("Could not find address for server id 1") - if expectedErr.Error() != err.Error() { - t.Fatalf("Unexpected error, got %v wanted %v", err, expectedErr) - } + _, err = lookup.ServerAddr("1") + require.EqualError(t, err, "Could not find address for server id 1") svr2 := &metadata.Server{ID: "2", Addr: &testAddr{"123.4.5.6"}} lookup.RemoveServer(svr2) diff -Nru consul-1.7.4+dfsg1/agent/consul/server_oss.go consul-1.8.7+dfsg1/agent/consul/server_oss.go --- consul-1.7.4+dfsg1/agent/consul/server_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/server_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,10 +6,11 @@ func init() { registerEndpoint(func(s *Server) interface{} { return &ACL{s, s.loggers.Named(logging.ACL)} }) - registerEndpoint(func(s *Server) interface{} { return &Catalog{s} }) + registerEndpoint(func(s *Server) interface{} { return &Catalog{s, s.loggers.Named(logging.Catalog)} }) registerEndpoint(func(s *Server) interface{} { return NewCoordinate(s, s.logger) }) registerEndpoint(func(s *Server) interface{} { return &ConfigEntry{s} }) registerEndpoint(func(s *Server) interface{} { return &ConnectCA{srv: s, logger: s.loggers.Named(logging.Connect)} }) + registerEndpoint(func(s *Server) interface{} { return &FederationState{s} }) registerEndpoint(func(s *Server) interface{} { return &DiscoveryChain{s} }) registerEndpoint(func(s *Server) interface{} { return &Health{s} }) registerEndpoint(func(s *Server) interface{} { return &Intention{s, s.loggers.Named(logging.Intentions)} }) diff -Nru consul-1.7.4+dfsg1/agent/consul/server_serf.go consul-1.8.7+dfsg1/agent/consul/server_serf.go --- consul-1.7.4+dfsg1/agent/consul/server_serf.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/server_serf.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,11 +7,13 @@ "strings" "time" + "github.com/hashicorp/consul/agent/consul/wanfed" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/logging" "github.com/hashicorp/go-hclog" + "github.com/hashicorp/memberlist" "github.com/hashicorp/raft" "github.com/hashicorp/serf/serf" ) @@ -26,9 +28,6 @@ // maxPeerRetries limits how many invalidate attempts are made maxPeerRetries = 6 - - // peerRetryBase is a baseline retry time - peerRetryBase = 1 * time.Second ) // setupSerf is used to setup and initialize a Serf @@ -75,6 +74,9 @@ conf.Tags["acls"] = string(structs.ACLModeDisabled) } + // feature flag: advertise support for federation states + conf.Tags["ft_fs"] = "1" + var subLoggerName string if wan { subLoggerName = logging.WAN @@ -110,11 +112,52 @@ } } + if wan { + nt, err := memberlist.NewNetTransport(&memberlist.NetTransportConfig{ + BindAddrs: []string{conf.MemberlistConfig.BindAddr}, + BindPort: conf.MemberlistConfig.BindPort, + Logger: conf.MemberlistConfig.Logger, + }) + if err != nil { + return nil, err + } + + if s.config.ConnectMeshGatewayWANFederationEnabled { + mgwTransport, err := wanfed.NewTransport( + s.tlsConfigurator, + nt, + s.config.Datacenter, + s.gatewayLocator.PickGateway, + ) + if err != nil { + return nil, err + } + + conf.MemberlistConfig.Transport = mgwTransport + } else { + conf.MemberlistConfig.Transport = nt + } + } + // Until Consul supports this fully, we disable automatic resolution. // When enabled, the Serf gossip may just turn off if we are the minority // node which is rather unexpected. conf.EnableNameConflictResolution = false + if wan && s.config.ConnectMeshGatewayWANFederationEnabled { + conf.MemberlistConfig.RequireNodeNames = true + conf.MemberlistConfig.DisableTcpPingsForNode = func(nodeName string) bool { + _, dc, err := wanfed.SplitNodeName(nodeName) + if err != nil { + return false // don't disable anything if we don't understand the node name + } + + // If doing cross-dc we will be using TCP via the gateways so + // there's no need for an extra TCP request. + return s.config.Datacenter != dc + } + } + if !s.config.DevMode { conf.SnapshotPath = filepath.Join(s.config.DataDir, path) } @@ -315,9 +358,9 @@ // Retry with exponential backoff to get peer status from this server for attempt := uint(0); attempt < maxPeerRetries; attempt++ { - if err := s.connPool.RPC(s.config.Datacenter, server.Addr, server.Version, + if err := s.connPool.RPC(s.config.Datacenter, server.ShortName, server.Addr, "Status.Peers", &structs.DCSpecificRequest{Datacenter: s.config.Datacenter}, &peers); err != nil { - nextRetry := time.Duration((1 << attempt) * peerRetryBase) + nextRetry := (1 << attempt) * time.Second s.logger.Error("Failed to confirm peer status for server (will retry).", "server", server.Name, "retry_interval", nextRetry.String(), diff -Nru consul-1.7.4+dfsg1/agent/consul/server_test.go consul-1.8.7+dfsg1/agent/consul/server_test.go --- consul-1.7.4+dfsg1/agent/consul/server_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/server_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,15 +2,23 @@ import ( "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/x509" "fmt" "net" + "net/rpc" "os" "strings" "sync/atomic" "testing" "time" + "github.com/google/tcpproxy" "github.com/hashicorp/consul/agent/connect/ca" + "github.com/hashicorp/consul/ipaddr" + "github.com/hashicorp/memberlist" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/metadata" @@ -26,6 +34,7 @@ "github.com/hashicorp/go-uuid" "golang.org/x/time/rate" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -33,6 +42,46 @@ TestDefaultMasterToken = "d9f05e83-a7ae-47ce-839e-c0d53a68c00a" ) +// testTLSCertificates Generates a TLS CA and server key/cert and returns them +// in PEM encoded form. +func testTLSCertificates(serverName string) (cert string, key string, cacert string, err error) { + // generate CA + serial, err := tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + signer, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return "", "", "", err + } + ca, err := tlsutil.GenerateCA(signer, serial, 365, nil) + if err != nil { + return "", "", "", err + } + + // generate leaf + serial, err = tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + + cert, privateKey, err := tlsutil.GenerateCert( + signer, + ca, + serial, + "Test Cert Name", + 365, + []string{serverName}, + nil, + []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + ) + if err != nil { + return "", "", "", err + } + + return cert, privateKey, ca, nil +} + // testServerACLConfig wraps another arbitrary Config altering callback // to setup some common ACL configurations. A new callback func will // be returned that has the original callback invoked after setting @@ -43,7 +92,6 @@ c.ACLsEnabled = true c.ACLMasterToken = TestDefaultMasterToken c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = true if cb != nil { cb(c) @@ -60,6 +108,7 @@ var id int64 func uniqueNodeName(name string) string { + name = strings.ReplaceAll(name, "/", "_") return fmt.Sprintf("%s-node-%d", name, atomic.AddInt64(&id, 1)) } @@ -80,24 +129,20 @@ func testServerConfig(t *testing.T) (string, *Config) { dir := testutil.TempDir(t, "consul") + t.Cleanup(func() { + os.RemoveAll(dir) + }) config := DefaultConfig() ports := freeport.MustTake(3) - - returnPortsFn := func() { - // The method of plumbing this into the server shutdown hook doesn't - // cover all exit points, so we insulate this against multiple - // invocations and then it's safe to call it a bunch of times. + t.Cleanup(func() { freeport.Return(ports) - config.NotifyShutdown = nil // self-erasing - } - config.NotifyShutdown = returnPortsFn + }) config.NodeName = uniqueNodeName(t.Name()) config.Bootstrap = true config.Datacenter = "dc1" config.DataDir = dir - config.LogOutput = testutil.TestWriter(t) // bind the rpc server to a random port. config.RPCAdvertise will be // set to the listen address unless it was set in the configuration. @@ -106,7 +151,6 @@ nodeID, err := uuid.GenerateUUID() if err != nil { - returnPortsFn() t.Fatal(err) } config.NodeID = types.NodeID(nodeID) @@ -163,9 +207,6 @@ "IntermediateCertTTL": "288h", }, } - - config.NotifyShutdown = returnPortsFn - return dir, config } @@ -209,21 +250,19 @@ func testServerWithConfig(t *testing.T, cb func(*Config)) (string, *Server) { var dir string - var config *Config var srv *Server - var err error // Retry added to avoid cases where bind addr is already in use retry.RunWith(retry.ThreeTimes(), t, func(r *retry.R) { + var config *Config dir, config = testServerConfig(t) if cb != nil { cb(config) } - srv, err = newServer(config) + var err error + srv, err = newServer(t, config) if err != nil { - config.NotifyShutdown() - os.RemoveAll(dir) r.Fatalf("err: %v", err) } }) @@ -231,17 +270,21 @@ } // cb is a function that can alter the test servers configuration prior to the server starting. -func testACLServerWithConfig(t *testing.T, cb func(*Config), initReplicationToken bool) (string, *Server) { +func testACLServerWithConfig(t *testing.T, cb func(*Config), initReplicationToken bool) (string, *Server, rpc.ClientCodec) { dir, srv := testServerWithConfig(t, testServerACLConfig(cb)) + t.Cleanup(func() { srv.Shutdown() }) if initReplicationToken { // setup some tokens here so we get less warnings in the logs srv.tokens.UpdateReplicationToken(TestDefaultMasterToken, token.TokenSourceConfig) } - return dir, srv + + codec := rpcClient(t, srv) + t.Cleanup(func() { codec.Close() }) + return dir, srv, codec } -func newServer(c *Config) (*Server, error) { +func newServer(t *testing.T, c *Config) (*Server, error) { // chain server up notification oldNotify := c.NotifyListen up := make(chan struct{}) @@ -252,21 +295,19 @@ } } - // start server - w := c.LogOutput - if w == nil { - w = os.Stderr - } logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ Name: c.NodeName, Level: hclog.Debug, - Output: w, + Output: testutil.NewLogBuffer(t), }) tlsConf, err := tlsutil.NewConfigurator(c.ToTLSUtilConfig(), logger) if err != nil { return nil, err } - srv, err := NewServerLogger(c, logger, new(token.Store), tlsConf) + srv, err := NewServer(c, + WithLogger(logger), + WithTokenStore(new(token.Store)), + WithTLSConfigurator(tlsConf)) if err != nil { return nil, err } @@ -291,8 +332,7 @@ func TestServer_StartStop(t *testing.T) { t.Parallel() // Start up a server and then stop it. - dir1, s1 := testServer(t) - defer os.RemoveAll(dir1) + _, s1 := testServer(t) if err := s1.Shutdown(); err != nil { t.Fatalf("err: %v", err) } @@ -306,20 +346,18 @@ func TestServer_fixupACLDatacenter(t *testing.T) { t.Parallel() - dir1, s1 := testServerWithConfig(t, func(c *Config) { + _, s1 := testServerWithConfig(t, func(c *Config) { c.Datacenter = "aye" c.PrimaryDatacenter = "aye" c.ACLsEnabled = true }) - defer os.RemoveAll(dir1) defer s1.Shutdown() - dir2, s2 := testServerWithConfig(t, func(c *Config) { + _, s2 := testServerWithConfig(t, func(c *Config) { c.Datacenter = "bee" c.PrimaryDatacenter = "aye" c.ACLsEnabled = true }) - defer os.RemoveAll(dir2) defer s2.Shutdown() // Try to join @@ -367,6 +405,68 @@ }) } +// TestServer_JoinLAN_SerfAllowedCIDRs test that IPs might be blocked +// with Serf. +// To run properly, this test requires to be able to bind and have access +// on 127.0.1.1 which is the case for most Linux machines and Windows, +// so Unit test will run in the CI. +// To run it on Mac OS, please run this commandd first, otherwise the +// test will be skipped: `sudo ifconfig lo0 alias 127.0.1.1 up` +func TestServer_JoinLAN_SerfAllowedCIDRs(t *testing.T) { + t.Parallel() + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.BootstrapExpect = 1 + lan, err := memberlist.ParseCIDRs([]string{"127.0.0.1/32"}) + assert.NoError(t, err) + c.SerfLANConfig.MemberlistConfig.CIDRsAllowed = lan + wan, err := memberlist.ParseCIDRs([]string{"127.0.0.0/24", "::1/128"}) + assert.NoError(t, err) + c.SerfWANConfig.MemberlistConfig.CIDRsAllowed = wan + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + targetAddr := "127.0.1.1" + dir2, a2, err := testClientWithConfigWithErr(t, func(c *Config) { + c.SerfLANConfig.MemberlistConfig.BindAddr = targetAddr + }) + defer os.RemoveAll(dir2) + if err != nil { + t.Skipf("Cannot bind on %s, to run on Mac OS: `sudo ifconfig lo0 alias 127.0.1.1 up`", targetAddr) + } + defer a2.Shutdown() + + dir3, rs3 := testServerWithConfig(t, func(c *Config) { + c.BootstrapExpect = 1 + c.Datacenter = "dc2" + }) + defer os.RemoveAll(dir3) + defer rs3.Shutdown() + + leaderAddr := joinAddrLAN(s1) + if _, err := a2.JoinLAN([]string{leaderAddr}); err != nil { + t.Fatalf("Expected no error, had: %#v", err) + } + // Try to join + joinWAN(t, rs3, s1) + retry.Run(t, func(r *retry.R) { + if got, want := len(s1.LANMembers()), 1; got != want { + // LAN is blocked, should be 1 only + r.Fatalf("got %d s1 LAN members want %d", got, want) + } + if got, want := len(a2.LANMembers()), 2; got != want { + // LAN is blocked a2 can see s1, but not s1 + r.Fatalf("got %d a2 LAN members want %d", got, want) + } + if got, want := len(s1.WANMembers()), 2; got != want { + r.Fatalf("got %d s1 WAN members want %d", got, want) + } + if got, want := len(rs3.WANMembers()), 2; got != want { + r.Fatalf("got %d rs3 WAN members want %d", got, want) + } + }) +} + func TestServer_LANReap(t *testing.T) { t.Parallel() @@ -543,6 +643,239 @@ } } +// This is a mirror of a similar test in agent/agent_test.go +func TestServer_JoinWAN_viaMeshGateway(t *testing.T) { + t.Parallel() + + gwPort := freeport.MustTake(1) + defer freeport.Return(gwPort) + gwAddr := ipaddr.FormatAddressPort("127.0.0.1", gwPort[0]) + + dir1, s1 := testServerWithConfig(t, func(c *Config) { + c.Domain = "consul" + c.NodeName = "bob" + c.Datacenter = "dc1" + c.PrimaryDatacenter = "dc1" + c.Bootstrap = true + // tls + c.CAFile = "../../test/hostname/CertAuth.crt" + c.CertFile = "../../test/hostname/Bob.crt" + c.KeyFile = "../../test/hostname/Bob.key" + c.VerifyIncoming = true + c.VerifyOutgoing = true + c.VerifyServerHostname = true + // wanfed + c.ConnectMeshGatewayWANFederationEnabled = true + }) + defer os.RemoveAll(dir1) + defer s1.Shutdown() + + dir2, s2 := testServerWithConfig(t, func(c *Config) { + c.Domain = "consul" + c.NodeName = "betty" + c.Datacenter = "dc2" + c.PrimaryDatacenter = "dc1" + c.Bootstrap = true + // tls + c.CAFile = "../../test/hostname/CertAuth.crt" + c.CertFile = "../../test/hostname/Betty.crt" + c.KeyFile = "../../test/hostname/Betty.key" + c.VerifyIncoming = true + c.VerifyOutgoing = true + c.VerifyServerHostname = true + // wanfed + c.ConnectMeshGatewayWANFederationEnabled = true + }) + defer os.RemoveAll(dir2) + defer s2.Shutdown() + + dir3, s3 := testServerWithConfig(t, func(c *Config) { + c.Domain = "consul" + c.NodeName = "bonnie" + c.Datacenter = "dc3" + c.PrimaryDatacenter = "dc1" + c.Bootstrap = true + // tls + c.CAFile = "../../test/hostname/CertAuth.crt" + c.CertFile = "../../test/hostname/Bonnie.crt" + c.KeyFile = "../../test/hostname/Bonnie.key" + c.VerifyIncoming = true + c.VerifyOutgoing = true + c.VerifyServerHostname = true + // wanfed + c.ConnectMeshGatewayWANFederationEnabled = true + }) + defer os.RemoveAll(dir3) + defer s3.Shutdown() + + // We'll use the same gateway for all datacenters since it doesn't care. + var p tcpproxy.Proxy + p.AddSNIRoute(gwAddr, "bob.server.dc1.consul", tcpproxy.To(s1.config.RPCAddr.String())) + p.AddSNIRoute(gwAddr, "betty.server.dc2.consul", tcpproxy.To(s2.config.RPCAddr.String())) + p.AddSNIRoute(gwAddr, "bonnie.server.dc3.consul", tcpproxy.To(s3.config.RPCAddr.String())) + p.AddStopACMESearch(gwAddr) + require.NoError(t, p.Start()) + defer func() { + p.Close() + p.Wait() + }() + + t.Logf("routing %s => %s", "bob.server.dc1.consul", s1.config.RPCAddr.String()) + t.Logf("routing %s => %s", "betty.server.dc2.consul", s2.config.RPCAddr.String()) + t.Logf("routing %s => %s", "bonnie.server.dc3.consul", s3.config.RPCAddr.String()) + + // Register this into the catalog in dc1. + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bob", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Service: "mesh-gateway", + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + Port: gwPort[0], + }, + } + + var out struct{} + require.NoError(t, s1.RPC("Catalog.Register", &arg, &out)) + } + + // Wait for it to make it into the gateway locator. + retry.Run(t, func(r *retry.R) { + require.NotEmpty(r, s1.gatewayLocator.PickGateway("dc1")) + }) + + // Seed the secondaries with the address of the primary and wait for that to + // be in their locators. + s2.RefreshPrimaryGatewayFallbackAddresses([]string{gwAddr}) + retry.Run(t, func(r *retry.R) { + require.NotEmpty(r, s2.gatewayLocator.PickGateway("dc1")) + }) + s3.RefreshPrimaryGatewayFallbackAddresses([]string{gwAddr}) + retry.Run(t, func(r *retry.R) { + require.NotEmpty(r, s3.gatewayLocator.PickGateway("dc1")) + }) + + // Try to join from secondary to primary. We can't use joinWAN() because we + // are simulating proper bootstrapping and if ACLs were on we would have to + // delay gateway registration in the secondary until after one directional + // join. So this way we explicitly join secondary-to-primary as a standalone + // operation and follow it up later with a full join. + _, err := s2.JoinWAN([]string{joinAddrWAN(s1)}) + require.NoError(t, err) + retry.Run(t, func(r *retry.R) { + if got, want := len(s2.WANMembers()), 2; got != want { + r.Fatalf("got %d s2 WAN members want %d", got, want) + } + }) + _, err = s3.JoinWAN([]string{joinAddrWAN(s1)}) + require.NoError(t, err) + retry.Run(t, func(r *retry.R) { + if got, want := len(s3.WANMembers()), 3; got != want { + r.Fatalf("got %d s3 WAN members want %d", got, want) + } + }) + + // Now we can register this into the catalog in dc2 and dc3. + { + arg := structs.RegisterRequest{ + Datacenter: "dc2", + Node: "betty", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Service: "mesh-gateway", + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + Port: gwPort[0], + }, + } + + var out struct{} + require.NoError(t, s2.RPC("Catalog.Register", &arg, &out)) + } + { + arg := structs.RegisterRequest{ + Datacenter: "dc3", + Node: "bonnie", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Kind: structs.ServiceKindMeshGateway, + ID: "mesh-gateway", + Service: "mesh-gateway", + Meta: map[string]string{structs.MetaWANFederationKey: "1"}, + Port: gwPort[0], + }, + } + + var out struct{} + require.NoError(t, s3.RPC("Catalog.Register", &arg, &out)) + } + + // Wait for it to make it into the gateway locator in dc2 and then for + // AE to carry it back to the primary + retry.Run(t, func(r *retry.R) { + require.NotEmpty(r, s3.gatewayLocator.PickGateway("dc2")) + require.NotEmpty(r, s2.gatewayLocator.PickGateway("dc2")) + require.NotEmpty(r, s1.gatewayLocator.PickGateway("dc2")) + + require.NotEmpty(r, s3.gatewayLocator.PickGateway("dc3")) + require.NotEmpty(r, s2.gatewayLocator.PickGateway("dc3")) + require.NotEmpty(r, s1.gatewayLocator.PickGateway("dc3")) + }) + + // Try to join again using the standard verification method now that + // all of the plumbing is in place. + joinWAN(t, s2, s1) + retry.Run(t, func(r *retry.R) { + if got, want := len(s1.WANMembers()), 3; got != want { + r.Fatalf("got %d s1 WAN members want %d", got, want) + } + if got, want := len(s2.WANMembers()), 3; got != want { + r.Fatalf("got %d s2 WAN members want %d", got, want) + } + }) + + // Check the router has all of them + retry.Run(t, func(r *retry.R) { + if got, want := len(s1.router.GetDatacenters()), 3; got != want { + r.Fatalf("got %d routes want %d", got, want) + } + if got, want := len(s2.router.GetDatacenters()), 3; got != want { + r.Fatalf("got %d datacenters want %d", got, want) + } + if got, want := len(s3.router.GetDatacenters()), 3; got != want { + r.Fatalf("got %d datacenters want %d", got, want) + } + }) + + // Ensure we can do some trivial RPC in all directions. + servers := map[string]*Server{"dc1": s1, "dc2": s2, "dc3": s3} + names := map[string]string{"dc1": "bob", "dc2": "betty", "dc3": "bonnie"} + for _, srcDC := range []string{"dc1", "dc2", "dc3"} { + srv := servers[srcDC] + for _, dstDC := range []string{"dc1", "dc2", "dc3"} { + if srcDC == dstDC { + continue + } + t.Run(srcDC+" to "+dstDC, func(t *testing.T) { + arg := structs.DCSpecificRequest{ + Datacenter: dstDC, + } + var out structs.IndexedNodes + require.NoError(t, srv.RPC("Catalog.ListNodes", &arg, &out)) + require.Len(t, out.Nodes, 1) + node := out.Nodes[0] + require.Equal(t, dstDC, node.Datacenter) + require.Equal(t, names[dstDC], node.Node) + }) + } + } +} + func TestServer_JoinSeparateLanAndWanAddresses(t *testing.T) { t.Parallel() dir1, s1 := testServerWithConfig(t, func(c *Config) { @@ -735,28 +1068,26 @@ func TestServer_JoinLAN_TLS(t *testing.T) { t.Parallel() - dir1, conf1 := testServerConfig(t) + _, conf1 := testServerConfig(t) conf1.VerifyIncoming = true conf1.VerifyOutgoing = true configureTLS(conf1) - s1, err := newServer(conf1) + s1, err := newServer(t, conf1) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir1) defer s1.Shutdown() testrpc.WaitForTestAgent(t, s1.RPC, "dc1") - dir2, conf2 := testServerConfig(t) + _, conf2 := testServerConfig(t) conf2.Bootstrap = false conf2.VerifyIncoming = true conf2.VerifyOutgoing = true configureTLS(conf2) - s2, err := newServer(conf2) + s2, err := newServer(t, conf2) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir2) defer s2.Shutdown() // Try to join @@ -940,7 +1271,7 @@ return struct{}{} } -func TestServer_globalRPCErrors(t *testing.T) { +func TestServer_keyringRPCs(t *testing.T) { t.Parallel() dir1, s1 := testServerDC(t, "dc1") defer os.RemoveAll(dir1) @@ -952,7 +1283,7 @@ }) // Check that an error from a remote DC is returned - err := s1.globalRPC("Bad.Method", nil, &fakeGlobalResp{}) + _, err := s1.keyringRPCs("Bad.Method", nil, []string{s1.config.Datacenter}) if err == nil { t.Fatalf("should have errored") } @@ -961,28 +1292,6 @@ } } -func TestServer_Encrypted(t *testing.T) { - t.Parallel() - dir1, s1 := testServer(t) - defer os.RemoveAll(dir1) - defer s1.Shutdown() - - key := []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} - dir2, s2 := testServerWithConfig(t, func(c *Config) { - c.SerfLANConfig.MemberlistConfig.SecretKey = key - c.SerfWANConfig.MemberlistConfig.SecretKey = key - }) - defer os.RemoveAll(dir2) - defer s2.Shutdown() - - if s1.Encrypted() { - t.Fatalf("should not be encrypted") - } - if !s2.Encrypted() { - t.Fatalf("should be encrypted") - } -} - func testVerifyRPC(s1, s2 *Server, t *testing.T) (bool, error) { joinLAN(t, s1, s2) retry.Run(t, func(r *retry.R) { @@ -999,7 +1308,7 @@ if leader == nil { t.Fatal("no leader") } - return s2.connPool.Ping(leader.Datacenter, leader.Addr, leader.Version) + return s2.connPool.Ping(leader.Datacenter, leader.ShortName, leader.Addr) } func TestServer_TLSToNoTLS(t *testing.T) { @@ -1156,14 +1465,13 @@ func TestServer_RPC_RateLimit(t *testing.T) { t.Parallel() - dir1, conf1 := testServerConfig(t) + _, conf1 := testServerConfig(t) conf1.RPCRate = 2 conf1.RPCMaxBurst = 2 - s1, err := NewServer(conf1) + s1, err := newServer(t, conf1) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir1) defer s1.Shutdown() testrpc.WaitForLeader(t, s1.RPC, "dc1") @@ -1177,7 +1485,7 @@ func TestServer_CALogging(t *testing.T) { t.Parallel() - dir1, conf1 := testServerConfig(t) + _, conf1 := testServerConfig(t) // Setup dummy logger to catch output var buf bytes.Buffer @@ -1185,15 +1493,18 @@ c, err := tlsutil.NewConfigurator(conf1.ToTLSUtilConfig(), logger) require.NoError(t, err) - s1, err := NewServerLogger(conf1, logger, new(token.Store), c) + + s1, err := NewServer(conf1, + WithLogger(logger), + WithTokenStore(new(token.Store)), + WithTLSConfigurator(c)) if err != nil { t.Fatalf("err: %v", err) } - defer os.RemoveAll(dir1) defer s1.Shutdown() testrpc.WaitForLeader(t, s1.RPC, "dc1") - if _, ok := s1.caProvider.(ca.NeedsLogger); !ok { + if _, ok := s1.caManager.provider.(ca.NeedsLogger); !ok { t.Fatalf("provider does not implement NeedsLogger") } @@ -1207,3 +1518,97 @@ require.Contains(t, buf.String(), "consul CA provider configured") } + +func TestServer_DatacenterJoinAddresses(t *testing.T) { + conf := testClusterConfig{ + Datacenter: "primary", + Servers: 3, + } + + nodes := newTestCluster(t, &conf) + + var expected []string + for _, srv := range nodes.Servers { + expected = append(expected, fmt.Sprintf("127.0.0.1:%d", srv.config.SerfLANConfig.MemberlistConfig.BindPort)) + } + + actual, err := nodes.Servers[0].DatacenterJoinAddresses("") + require.NoError(t, err) + require.ElementsMatch(t, expected, actual) +} + +func TestServer_CreateACLToken(t *testing.T) { + _, srv, codec := testACLServerWithConfig(t, nil, false) + + waitForLeaderEstablishment(t, srv) + + r1, err := upsertTestRole(codec, TestDefaultMasterToken, "dc1") + require.NoError(t, err) + + t.Run("predefined-ids", func(t *testing.T) { + accessor := "554cd3ab-5d4e-4d6e-952e-4e8b6c77bfb3" + secret := "ef453f31-ad58-4ec8-8bf8-342e99763026" + in := &structs.ACLToken{ + AccessorID: accessor, + SecretID: secret, + Description: "test", + Policies: []structs.ACLTokenPolicyLink{ + { + ID: structs.ACLPolicyGlobalManagementID, + }, + }, + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo", + Datacenter: "bar", + }, + }, + ServiceIdentities: []*structs.ACLServiceIdentity{ + { + ServiceName: "web", + }, + }, + Roles: []structs.ACLTokenRoleLink{ + { + ID: r1.ID, + }, + }, + } + + out, err := srv.CreateACLToken(in) + require.NoError(t, err) + require.Equal(t, accessor, out.AccessorID) + require.Equal(t, secret, out.SecretID) + require.Equal(t, "test", out.Description) + require.NotZero(t, out.CreateTime) + require.Len(t, out.Policies, 1) + require.Len(t, out.Roles, 1) + require.Len(t, out.NodeIdentities, 1) + require.Len(t, out.ServiceIdentities, 1) + require.Equal(t, structs.ACLPolicyGlobalManagementID, out.Policies[0].ID) + require.Equal(t, "foo", out.NodeIdentities[0].NodeName) + require.Equal(t, "web", out.ServiceIdentities[0].ServiceName) + require.Equal(t, r1.ID, out.Roles[0].ID) + }) + + t.Run("autogen-ids", func(t *testing.T) { + in := &structs.ACLToken{ + Description: "test", + NodeIdentities: []*structs.ACLNodeIdentity{ + { + NodeName: "foo", + Datacenter: "bar", + }, + }, + } + + out, err := srv.CreateACLToken(in) + require.NoError(t, err) + require.NotEmpty(t, out.AccessorID) + require.NotEmpty(t, out.SecretID) + require.Equal(t, "test", out.Description) + require.NotZero(t, out.CreateTime) + require.Len(t, out.NodeIdentities, 1) + require.Equal(t, "foo", out.NodeIdentities[0].NodeName) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/session_endpoint.go consul-1.8.7+dfsg1/agent/consul/session_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/session_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/session_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ // Apply is used to apply a modifying request to the data store. This should // only be used for operations that modify the data func (s *Session) Apply(args *structs.SessionRequest, reply *string) error { - if done, err := s.srv.forward("Session.Apply", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Session.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"session", "apply"}, time.Now()) @@ -59,7 +59,7 @@ return err } - if authz != nil && s.srv.config.ACLEnforceVersion8 { + if authz != nil { switch args.Op { case structs.SessionDestroy: state := s.srv.fsm.State() @@ -162,7 +162,7 @@ // Get is used to retrieve a single session func (s *Session) Get(args *structs.SessionSpecificRequest, reply *structs.IndexedSessions) error { - if done, err := s.srv.forward("Session.Get", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Session.Get", args, args, reply); done { return err } @@ -203,7 +203,7 @@ // List is used to list all the active sessions func (s *Session) List(args *structs.SessionSpecificRequest, reply *structs.IndexedSessions) error { - if done, err := s.srv.forward("Session.List", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Session.List", args, args, reply); done { return err } @@ -237,7 +237,7 @@ // NodeSessions is used to get all the sessions for a particular node func (s *Session) NodeSessions(args *structs.NodeSpecificRequest, reply *structs.IndexedSessions) error { - if done, err := s.srv.forward("Session.NodeSessions", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Session.NodeSessions", args, args, reply); done { return err } @@ -271,7 +271,7 @@ // Renew is used to renew the TTL on a single session func (s *Session) Renew(args *structs.SessionSpecificRequest, reply *structs.IndexedSessions) error { - if done, err := s.srv.forward("Session.Renew", args, args, reply); done { + if done, err := s.srv.ForwardRPC("Session.Renew", args, args, reply); done { return err } @@ -302,7 +302,7 @@ return nil } - if authz != nil && s.srv.config.ACLEnforceVersion8 && authz.SessionWrite(session.Node, &authzContext) != acl.Allow { + if authz != nil && authz.SessionWrite(session.Node, &authzContext) != acl.Allow { return acl.ErrPermissionDenied } diff -Nru consul-1.7.4+dfsg1/agent/consul/session_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/session_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/session_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/session_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,7 +7,7 @@ "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/stringslice" "github.com/hashicorp/consul/testrpc" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" ) @@ -145,7 +145,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -153,7 +152,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create the ACL. req := structs.ACLRequest{ @@ -179,8 +178,7 @@ // Just add a node. s1.fsm.State().EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}) - // Try to create without a token, which will go through since version 8 - // enforcement isn't enabled. + // Try to create without a token, which will be denied. arg := structs.SessionRequest{ Datacenter: "dc1", Op: structs.SessionCreate, @@ -189,40 +187,23 @@ Name: "my-session", }, } - var id1 string - if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &id1); err != nil { - t.Fatalf("err: %v", err) - } - - // Now turn on version 8 enforcement and try again, it should be denied. - var id2 string - s1.config.ACLEnforceVersion8 = true - err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &id2) + var id string + err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &id) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) } // Now set a token and try again. This should go through. arg.Token = token - if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &id2); err != nil { + if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &id); err != nil { t.Fatalf("err: %v", err) } - // Do a delete on the first session with version 8 enforcement off and - // no token. This should go through. + // Make sure the delete of the session fails without a token. var out string - s1.config.ACLEnforceVersion8 = false arg.Op = structs.SessionDestroy + arg.Session.ID = id arg.Token = "" - arg.Session.ID = id1 - if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &out); err != nil { - t.Fatalf("err: %v", err) - } - - // Turn on version 8 enforcement and make sure the delete of the second - // session fails. - s1.config.ACLEnforceVersion8 = true - arg.Session.ID = id2 err = msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &out) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) @@ -370,7 +351,7 @@ } for i := 0; i < len(sessions.Sessions); i++ { s := sessions.Sessions[i] - if !lib.StrContains(ids, s.ID) { + if !stringslice.Contains(ids, s.ID) { t.Fatalf("bad: %v", s) } if s.Node != "foo" { @@ -386,7 +367,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -394,7 +374,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForLeader(t, s1.RPC, "dc1") + testrpc.WaitForLeader(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create the ACL. req := structs.ACLRequest{ @@ -432,8 +412,7 @@ t.Fatalf("err: %v", err) } - // Perform all the read operations, which should go through since version - // 8 ACL enforcement isn't enabled. + // Perform all the read operations, and make sure everything is empty. getR := structs.SessionSpecificRequest{ Datacenter: "dc1", SessionID: out, @@ -443,7 +422,7 @@ if err := msgpackrpc.CallWithCodec(codec, "Session.Get", &getR, &sessions); err != nil { t.Fatalf("err: %v", err) } - if len(sessions.Sessions) != 1 { + if len(sessions.Sessions) != 0 { t.Fatalf("bad: %v", sessions.Sessions) } } @@ -452,10 +431,11 @@ } { var sessions structs.IndexedSessions + if err := msgpackrpc.CallWithCodec(codec, "Session.List", &listR, &sessions); err != nil { t.Fatalf("err: %v", err) } - if len(sessions.Sessions) != 1 { + if len(sessions.Sessions) != 0 { t.Fatalf("bad: %v", sessions.Sessions) } } @@ -468,37 +448,6 @@ if err := msgpackrpc.CallWithCodec(codec, "Session.NodeSessions", &nodeR, &sessions); err != nil { t.Fatalf("err: %v", err) } - if len(sessions.Sessions) != 1 { - t.Fatalf("bad: %v", sessions.Sessions) - } - } - - // Now turn on version 8 enforcement and make sure everything is empty. - s1.config.ACLEnforceVersion8 = true - { - var sessions structs.IndexedSessions - if err := msgpackrpc.CallWithCodec(codec, "Session.Get", &getR, &sessions); err != nil { - t.Fatalf("err: %v", err) - } - if len(sessions.Sessions) != 0 { - t.Fatalf("bad: %v", sessions.Sessions) - } - } - { - var sessions structs.IndexedSessions - - if err := msgpackrpc.CallWithCodec(codec, "Session.List", &listR, &sessions); err != nil { - t.Fatalf("err: %v", err) - } - if len(sessions.Sessions) != 0 { - t.Fatalf("bad: %v", sessions.Sessions) - } - } - { - var sessions structs.IndexedSessions - if err := msgpackrpc.CallWithCodec(codec, "Session.NodeSessions", &nodeR, &sessions); err != nil { - t.Fatalf("err: %v", err) - } if len(sessions.Sessions) != 0 { t.Fatalf("bad: %v", sessions.Sessions) } @@ -649,7 +598,7 @@ } for i := 0; i < len(sessions.Sessions); i++ { s := sessions.Sessions[i] - if !lib.StrContains(ids, s.ID) { + if !stringslice.Contains(ids, s.ID) { t.Fatalf("bad: %v", s) } if s.Node != "foo" { @@ -683,7 +632,7 @@ } s := session.Sessions[0] - if !lib.StrContains(ids, s.ID) { + if !stringslice.Contains(ids, s.ID) { t.Fatalf("bad: %v", s) } if s.Node != "foo" { @@ -710,7 +659,7 @@ for i := 0; i < len(sessionsL1.Sessions); i++ { s := sessionsL1.Sessions[i] - if !lib.StrContains(ids, s.ID) { + if !stringslice.Contains(ids, s.ID) { t.Fatalf("bad: %v", s) } if s.Node != "foo" { @@ -742,7 +691,7 @@ if len(sessionsL2.Sessions) != 0 { for i := 0; i < len(sessionsL2.Sessions); i++ { s := sessionsL2.Sessions[i] - if !lib.StrContains(ids, s.ID) { + if !stringslice.Contains(ids, s.ID) { t.Fatalf("bad: %v", s) } if s.Node != "foo" { @@ -765,7 +714,6 @@ c.ACLsEnabled = true c.ACLMasterToken = "root" c.ACLDefaultPolicy = "deny" - c.ACLEnforceVersion8 = false }) defer os.RemoveAll(dir1) defer s1.Shutdown() @@ -773,7 +721,7 @@ codec := rpcClient(t, s1) defer codec.Close() - testrpc.WaitForTestAgent(t, s1.RPC, "dc1") + testrpc.WaitForTestAgent(t, s1.RPC, "dc1", testrpc.WithToken("root")) // Create the ACL. req := structs.ACLRequest{ @@ -799,8 +747,7 @@ // Just add a node. s1.fsm.State().EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}) - // Create a session. The token won't matter here since we don't have - // version 8 ACL enforcement on yet. + // Create a session. arg := structs.SessionRequest{ Datacenter: "dc1", Op: structs.SessionCreate, @@ -808,25 +755,19 @@ Node: "foo", Name: "my-session", }, + WriteRequest: structs.WriteRequest{Token: token}, } var id string if err := msgpackrpc.CallWithCodec(codec, "Session.Apply", &arg, &id); err != nil { t.Fatalf("err: %v", err) } - // Renew without a token should go through without version 8 ACL - // enforcement. + // Renew without a token should be rejected. renewR := structs.SessionSpecificRequest{ Datacenter: "dc1", SessionID: id, } var session structs.IndexedSessions - if err := msgpackrpc.CallWithCodec(codec, "Session.Renew", &renewR, &session); err != nil { - t.Fatalf("err: %v", err) - } - - // Now turn on version 8 enforcement and the renew should be rejected. - s1.config.ACLEnforceVersion8 = true err := msgpackrpc.CallWithCodec(codec, "Session.Renew", &renewR, &session) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) @@ -947,7 +888,7 @@ } for i := 0; i < len(sessions.Sessions); i++ { s := sessions.Sessions[i] - if !lib.StrContains(ids, s.ID) { + if !stringslice.Contains(ids, s.ID) { t.Fatalf("bad: %v", s) } if s.Node != "foo" { diff -Nru consul-1.7.4+dfsg1/agent/consul/snapshot_endpoint.go consul-1.8.7+dfsg1/agent/consul/snapshot_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/snapshot_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/snapshot_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -37,7 +37,7 @@ return nil, structs.ErrNoDCPath } - snap, err := SnapshotRPC(s.connPool, dc, server.Addr, server.UseTLS, args, in, reply) + snap, err := SnapshotRPC(s.connPool, dc, server.ShortName, server.Addr, args, in, reply) if err != nil { manager.NotifyFailedServer(server) return nil, err @@ -52,7 +52,7 @@ if server == nil { return nil, structs.ErrNoLeader } - return SnapshotRPC(s.connPool, args.Datacenter, server.Addr, server.UseTLS, args, in, reply) + return SnapshotRPC(s.connPool, args.Datacenter, server.ShortName, server.Addr, args, in, reply) } } @@ -189,10 +189,18 @@ // the streaming output (for a snapshot). If the reply contains an error, this // will always return an error as well, so you don't need to check the error // inside the filled-in reply. -func SnapshotRPC(connPool *pool.ConnPool, dc string, addr net.Addr, useTLS bool, - args *structs.SnapshotRequest, in io.Reader, reply *structs.SnapshotResponse) (io.ReadCloser, error) { - - conn, hc, err := connPool.DialTimeout(dc, addr, 10*time.Second, useTLS) +func SnapshotRPC( + connPool *pool.ConnPool, + dc string, + nodeName string, + addr net.Addr, + args *structs.SnapshotRequest, + in io.Reader, + reply *structs.SnapshotResponse, +) (io.ReadCloser, error) { + // Write the snapshot RPC byte to set the mode, then perform the + // request. + conn, hc, err := connPool.DialTimeout(dc, nodeName, addr, pool.RPCSnapshot) if err != nil { return nil, err } @@ -206,12 +214,6 @@ } }() - // Write the snapshot RPC byte to set the mode, then perform the - // request. - if _, err := conn.Write([]byte{byte(pool.RPCSnapshot)}); err != nil { - return nil, fmt.Errorf("failed to write stream type: %v", err) - } - // Push the header encoded as msgpack, then stream the input. enc := codec.NewEncoder(conn, structs.MsgpackHandle) if err := enc.Encode(&args); err != nil { diff -Nru consul-1.7.4+dfsg1/agent/consul/snapshot_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/snapshot_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/snapshot_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/snapshot_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,7 +46,7 @@ Op: structs.SnapshotSave, } var reply structs.SnapshotResponse - snap, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.RPCAddr, false, + snap, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.NodeName, s.config.RPCAddr, &args, bytes.NewReader([]byte("")), &reply) if err != nil { t.Fatalf("err: %v", err) @@ -121,7 +121,7 @@ // Restore the snapshot. args.Op = structs.SnapshotRestore - restore, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.RPCAddr, false, + restore, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.NodeName, s.config.RPCAddr, &args, snap, &reply) if err != nil { t.Fatalf("err: %v", err) @@ -196,7 +196,7 @@ Op: structs.SnapshotSave, } var reply structs.SnapshotResponse - snap, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.RPCAddr, false, + snap, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.NodeName, s1.config.RPCAddr, &args, bytes.NewReader([]byte("")), &reply) if err != nil { t.Fatalf("err: %v", err) @@ -229,7 +229,7 @@ // Restore the snapshot. args.Op = structs.SnapshotRestore - restore, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.RPCAddr, false, + restore, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.NodeName, s1.config.RPCAddr, &args, snap, &reply) if err != nil { t.Fatalf("err: %v", err) @@ -268,7 +268,7 @@ Op: structs.SnapshotSave, } var reply structs.SnapshotResponse - _, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.RPCAddr, false, + _, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.NodeName, s1.config.RPCAddr, &args, bytes.NewReader([]byte("")), &reply) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) @@ -282,7 +282,7 @@ Op: structs.SnapshotRestore, } var reply structs.SnapshotResponse - _, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.RPCAddr, false, + _, err := SnapshotRPC(s1.connPool, s1.config.Datacenter, s1.config.NodeName, s1.config.RPCAddr, &args, bytes.NewReader([]byte("")), &reply) if !acl.IsErrPermissionDenied(err) { t.Fatalf("err: %v", err) @@ -391,7 +391,7 @@ Op: structs.SnapshotSave, } var reply structs.SnapshotResponse - _, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.RPCAddr, false, + _, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.NodeName, s.config.RPCAddr, &args, bytes.NewReader([]byte("")), &reply) if err == nil || !strings.Contains(err.Error(), structs.ErrNoLeader.Error()) { t.Fatalf("err: %v", err) @@ -408,7 +408,7 @@ Op: structs.SnapshotSave, } var reply structs.SnapshotResponse - _, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.RPCAddr, false, + _, err := SnapshotRPC(s.connPool, s.config.Datacenter, s.config.NodeName, s.config.RPCAddr, &args, bytes.NewReader([]byte("")), &reply) if err == nil || !strings.Contains(err.Error(), "Raft error when taking snapshot") { t.Fatalf("err: %v", err) diff -Nru consul-1.7.4+dfsg1/agent/consul/state/acl.go consul-1.8.7+dfsg1/agent/consul/state/acl.go --- consul-1.7.4+dfsg1/agent/consul/state/acl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/acl.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,8 +5,8 @@ "fmt" "time" - "github.com/hashicorp/consul/agent/agentpb" "github.com/hashicorp/consul/agent/structs" + pbacl "github.com/hashicorp/consul/proto/pbacl" memdb "github.com/hashicorp/go-memdb" ) @@ -304,7 +304,7 @@ } } - if err := s.aclTokenSetTxn(tx, idx, token, false, false, false, legacy); err != nil { + if err := s.aclTokenSetTxn(tx, idx, token, ACLTokenSetOptions{Legacy: legacy}); err != nil { return fmt.Errorf("failed inserting bootstrap token: %v", err) } if err := tx.Insert("index", &IndexEntry{"acl-token-bootstrap", idx}); err != nil { @@ -340,7 +340,7 @@ // to update the name. Unlike the older functions to operate specifically on role or policy links // this function does not itself handle the case where the id cannot be found. Instead the // getName function should handle that and return an error if necessary -func (s *Store) resolveACLLinks(tx *memdb.Txn, links []agentpb.ACLLink, getName func(*memdb.Txn, string) (string, error)) (int, error) { +func (s *Store) resolveACLLinks(tx *memdb.Txn, links []pbacl.ACLLink, getName func(*memdb.Txn, string) (string, error)) (int, error) { var numValid int for linkIndex, link := range links { if link.ID != "" { @@ -366,12 +366,12 @@ // associated with the ID of the link. Ideally this will be a no-op if the names are already correct // however if a linked resource was renamed it might be stale. This function will treat the incoming // links with copy-on-write semantics and its output will indicate whether any modifications were made. -func (s *Store) fixupACLLinks(tx *memdb.Txn, original []agentpb.ACLLink, getName func(*memdb.Txn, string) (string, error)) ([]agentpb.ACLLink, bool, error) { +func (s *Store) fixupACLLinks(tx *memdb.Txn, original []pbacl.ACLLink, getName func(*memdb.Txn, string) (string, error)) ([]pbacl.ACLLink, bool, error) { owned := false links := original - cloneLinks := func(l []agentpb.ACLLink, copyNumLinks int) []agentpb.ACLLink { - clone := make([]agentpb.ACLLink, copyNumLinks) + cloneLinks := func(l []pbacl.ACLLink, copyNumLinks int) []pbacl.ACLLink { + clone := make([]pbacl.ACLLink, copyNumLinks) copy(clone, l[:copyNumLinks]) return clone } @@ -397,7 +397,7 @@ } // append the corrected link - links = append(links, agentpb.ACLLink{ID: link.ID, Name: name}) + links = append(links, pbacl.ACLLink{ID: link.ID, Name: name}) } else if owned { links = append(links, link) } @@ -632,7 +632,7 @@ defer tx.Abort() // Call set on the ACL - if err := s.aclTokenSetTxn(tx, idx, token, false, false, false, legacy); err != nil { + if err := s.aclTokenSetTxn(tx, idx, token, ACLTokenSetOptions{Legacy: legacy}); err != nil { return err } @@ -640,12 +640,24 @@ return nil } -func (s *Store) ACLTokenBatchSet(idx uint64, tokens structs.ACLTokens, cas, allowMissingPolicyAndRoleIDs, prohibitUnprivileged bool) error { +type ACLTokenSetOptions struct { + CAS bool + AllowMissingPolicyAndRoleIDs bool + ProhibitUnprivileged bool + Legacy bool + FromReplication bool +} + +func (s *Store) ACLTokenBatchSet(idx uint64, tokens structs.ACLTokens, opts ACLTokenSetOptions) error { + if opts.Legacy { + return fmt.Errorf("failed inserting acl token: cannot use this endpoint to persist legacy tokens") + } + tx := s.db.Txn(true) defer tx.Abort() for _, token := range tokens { - if err := s.aclTokenSetTxn(tx, idx, token, cas, allowMissingPolicyAndRoleIDs, prohibitUnprivileged, false); err != nil { + if err := s.aclTokenSetTxn(tx, idx, token, opts); err != nil { return err } } @@ -656,16 +668,20 @@ // aclTokenSetTxn is the inner method used to insert an ACL token with the // proper indexes into the state store. -func (s *Store) aclTokenSetTxn(tx *memdb.Txn, idx uint64, token *structs.ACLToken, cas, allowMissingPolicyAndRoleIDs, prohibitUnprivileged, legacy bool) error { +func (s *Store) aclTokenSetTxn(tx *memdb.Txn, idx uint64, token *structs.ACLToken, opts ACLTokenSetOptions) error { // Check that the ID is set if token.SecretID == "" { return ErrMissingACLTokenSecret } - if !legacy && token.AccessorID == "" { + if !opts.Legacy && token.AccessorID == "" { return ErrMissingACLTokenAccessor } + if opts.FromReplication && token.Local { + return fmt.Errorf("Cannot replicate local tokens") + } + // DEPRECATED (ACL-Legacy-Compat) if token.Rules != "" { // When we update a legacy acl token we may have to correct old HCL to @@ -690,7 +706,7 @@ original = existing.(*structs.ACLToken) } - if cas { + if opts.CAS { // set-if-unset case if token.ModifyIndex == 0 && original != nil { return nil @@ -705,7 +721,7 @@ } } - if legacy && original != nil { + if opts.Legacy && original != nil { if original.UsesNonLegacyFields() { return fmt.Errorf("failed inserting acl token: cannot use legacy endpoint to modify a non-legacy token") } @@ -718,16 +734,16 @@ } var numValidPolicies int - if numValidPolicies, err = s.resolveTokenPolicyLinks(tx, token, allowMissingPolicyAndRoleIDs); err != nil { + if numValidPolicies, err = s.resolveTokenPolicyLinks(tx, token, opts.AllowMissingPolicyAndRoleIDs); err != nil { return err } var numValidRoles int - if numValidRoles, err = s.resolveTokenRoleLinks(tx, token, allowMissingPolicyAndRoleIDs); err != nil { + if numValidRoles, err = s.resolveTokenRoleLinks(tx, token, opts.AllowMissingPolicyAndRoleIDs); err != nil { return err } - if token.AuthMethod != "" { + if token.AuthMethod != "" && !opts.FromReplication { method, err := s.getAuthMethodWithTxn(tx, nil, token.AuthMethod, token.ACLAuthMethodEnterpriseMeta.ToEnterpriseMeta()) if err != nil { return err @@ -742,8 +758,17 @@ } } - if prohibitUnprivileged { - if numValidRoles == 0 && numValidPolicies == 0 && len(token.ServiceIdentities) == 0 { + for _, nodeid := range token.NodeIdentities { + if nodeid.NodeName == "" { + return fmt.Errorf("Encountered a Token with an empty node identity name in the state store") + } + if nodeid.Datacenter == "" { + return fmt.Errorf("Encountered a Token with an empty node identity datacenter in the state store") + } + } + + if opts.ProhibitUnprivileged { + if numValidRoles == 0 && numValidPolicies == 0 && len(token.ServiceIdentities) == 0 && len(token.NodeIdentities) == 0 { return ErrTokenHasNoPrivileges } } @@ -1055,7 +1080,7 @@ return s.aclTokenDeleteWithToken(tx, token.(*structs.ACLToken), idx) } -func (s *Store) aclTokenDeleteAllForAuthMethodTxn(tx *memdb.Txn, idx uint64, methodName string, methodMeta *structs.EnterpriseMeta) error { +func (s *Store) aclTokenDeleteAllForAuthMethodTxn(tx *memdb.Txn, idx uint64, methodName string, methodGlobalLocality bool, methodMeta *structs.EnterpriseMeta) error { // collect all the tokens linked with the given auth method. iter, err := s.aclTokenListByAuthMethod(tx, methodName, methodMeta, structs.WildcardEnterpriseMeta()) if err != nil { @@ -1065,7 +1090,15 @@ var tokens structs.ACLTokens for raw := iter.Next(); raw != nil; raw = iter.Next() { token := raw.(*structs.ACLToken) - tokens = append(tokens, token) + tokenIsGlobal := !token.Local + + // Need to ensure that if we have an auth method named "blah" in the + // primary and secondary datacenters, and the primary instance has + // TokenLocality==global that when we delete the secondary instance we + // don't also blow away replicated tokens from the primary. + if methodGlobalLocality == tokenIsGlobal { + tokens = append(tokens, token) + } } if len(tokens) > 0 { @@ -1369,6 +1402,15 @@ } } + for _, nodeid := range role.NodeIdentities { + if nodeid.NodeName == "" { + return fmt.Errorf("Encountered a Role with an empty node identity name in the state store") + } + if nodeid.Datacenter == "" { + return fmt.Errorf("Encountered a Role with an empty node identity datacenter in the state store") + } + } + if err := s.aclRoleUpsertValidateEnterprise(tx, role, existing); err != nil { return err } @@ -1880,7 +1922,7 @@ return err } - if err := s.aclTokenDeleteAllForAuthMethodTxn(tx, idx, method.Name, entMeta); err != nil { + if err := s.aclTokenDeleteAllForAuthMethodTxn(tx, idx, method.Name, method.TokenLocality == "global", entMeta); err != nil { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/acl_test.go consul-1.8.7+dfsg1/agent/consul/state/acl_test.go --- consul-1.7.4+dfsg1/agent/consul/state/acl_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/acl_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,9 +8,9 @@ "time" "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/agentpb" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" + pbacl "github.com/hashicorp/consul/proto/pbacl" memdb "github.com/hashicorp/go-memdb" "github.com/hashicorp/go-uuid" "github.com/stretchr/testify/require" @@ -621,7 +621,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(2, tokens, true, false, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{CAS: true})) _, token, err := s.ACLTokenGetByAccessor(nil, tokens[0].AccessorID, nil) require.NoError(t, err) @@ -642,7 +642,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(5, tokens, true, false, false)) + require.NoError(t, s.ACLTokenBatchSet(5, tokens, ACLTokenSetOptions{CAS: true})) updated := structs.ACLTokens{ &structs.ACLToken{ @@ -653,7 +653,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(6, updated, true, false, false)) + require.NoError(t, s.ACLTokenBatchSet(6, updated, ACLTokenSetOptions{CAS: true})) _, token, err := s.ACLTokenGetByAccessor(nil, tokens[0].AccessorID, nil) require.NoError(t, err) @@ -672,7 +672,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(5, tokens, true, false, false)) + require.NoError(t, s.ACLTokenBatchSet(5, tokens, ACLTokenSetOptions{CAS: true})) updated := structs.ACLTokens{ &structs.ACLToken{ @@ -682,7 +682,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(6, updated, true, false, false)) + require.NoError(t, s.ACLTokenBatchSet(6, updated, ACLTokenSetOptions{CAS: true})) _, token, err := s.ACLTokenGetByAccessor(nil, tokens[0].AccessorID, nil) require.NoError(t, err) @@ -705,7 +705,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(2, tokens, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{})) idx, rtokens, err := s.ACLTokenBatchGet(nil, []string{ "a4f68bd6-3af5-4f56-b764-3c6f20247879", @@ -736,7 +736,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(2, tokens, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{})) updates := structs.ACLTokens{ &structs.ACLToken{ @@ -761,7 +761,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(3, updates, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(3, updates, ACLTokenSetOptions{})) idx, rtokens, err := s.ACLTokenBatchGet(nil, []string{ "a4f68bd6-3af5-4f56-b764-3c6f20247879", @@ -808,9 +808,9 @@ }, } - require.Error(t, s.ACLTokenBatchSet(2, tokens, false, false, false)) + require.Error(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{})) - require.NoError(t, s.ACLTokenBatchSet(2, tokens, false, true, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{AllowMissingPolicyAndRoleIDs: true})) idx, rtokens, err := s.ACLTokenBatchGet(nil, []string{ "a4f68bd6-3af5-4f56-b764-3c6f20247879", @@ -847,9 +847,9 @@ }, } - require.Error(t, s.ACLTokenBatchSet(2, tokens, false, false, false)) + require.Error(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{})) - require.NoError(t, s.ACLTokenBatchSet(2, tokens, false, true, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{AllowMissingPolicyAndRoleIDs: true})) idx, rtokens, err := s.ACLTokenBatchGet(nil, []string{ "a4f68bd6-3af5-4f56-b764-3c6f20247879", @@ -953,7 +953,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(7, updates, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(7, updates, ACLTokenSetOptions{})) tokens, _, err = s.ACLTokenListUpgradeable(10) require.NoError(t, err) @@ -1044,7 +1044,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(2, tokens, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{})) type testCase struct { name string @@ -1565,7 +1565,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(2, tokens, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(2, tokens, ACLTokenSetOptions{})) _, rtoken, err := s.ACLTokenGetByAccessor(nil, "f1093997-b6c7-496d-bfb8-6b1b1895641b", nil) require.NoError(t, err) @@ -2829,6 +2829,123 @@ }) } +func TestStateStore_ACLAuthMethod_GlobalNameShadowing_TokenTest(t *testing.T) { + t.Parallel() + + // This ensures that when a primary DC and secondary DC create identically + // named auth methods, and the primary instance has a tokenLocality==global + // that operations in the secondary correctly can target one or the other. + + s := testACLStateStore(t) + lastIndex := uint64(1) + + // For this test our state machine will simulate the SECONDARY(DC2), so + // we'll create our auth method here that shadows the global-token-minting + // one in the primary. + + defaultEntMeta := structs.DefaultEnterpriseMeta() + + lastIndex++ + require.NoError(t, s.ACLAuthMethodSet(lastIndex, &structs.ACLAuthMethod{ + Name: "test", + Type: "testing", + Description: "test", + EnterpriseMeta: *defaultEntMeta, + })) + + const ( // accessors + methodDC1_tok1 = "6d020c5d-c4fd-4348-ba79-beac37ed0b9c" + methodDC1_tok2 = "169160dc-34ab-45c6-aba7-ff65e9ace9cb" + methodDC2_tok1 = "8e14628e-7dde-4573-aca1-6386c0f2095d" + methodDC2_tok2 = "291e5af9-c68e-4dd3-8824-b2bdfdcc89e6" + ) + + lastIndex++ + require.NoError(t, s.ACLTokenBatchSet(lastIndex, structs.ACLTokens{ + &structs.ACLToken{ + AccessorID: methodDC2_tok1, + SecretID: "d9399b7d-6c34-46bd-a675-c1352fadb6fd", + Description: "test-dc2-t1", + AuthMethod: "test", + Local: true, + EnterpriseMeta: *defaultEntMeta, + }, + &structs.ACLToken{ + AccessorID: methodDC2_tok2, + SecretID: "3b72fc27-9230-42ab-a1e8-02cb489ab177", + Description: "test-dc2-t2", + AuthMethod: "test", + Local: true, + EnterpriseMeta: *defaultEntMeta, + }, + }, ACLTokenSetOptions{})) + + lastIndex++ + require.NoError(t, s.ACLTokenBatchSet(lastIndex, structs.ACLTokens{ + &structs.ACLToken{ + AccessorID: methodDC1_tok1, + SecretID: "7a1950c6-79dc-441c-acd2-e22cd3db0240", + Description: "test-dc1-t1", + AuthMethod: "test", + Local: false, + EnterpriseMeta: *defaultEntMeta, + }, + &structs.ACLToken{ + AccessorID: methodDC1_tok2, + SecretID: "442cee4c-353f-4957-adbb-33db2f9e267f", + Description: "test-dc1-t2", + AuthMethod: "test", + Local: false, + EnterpriseMeta: *defaultEntMeta, + }, + }, ACLTokenSetOptions{FromReplication: true})) + + toList := func(tokens structs.ACLTokens) []string { + var ret []string + for _, tok := range tokens { + ret = append(ret, tok.AccessorID) + } + return ret + } + + require.True(t, t.Run("list local only", func(t *testing.T) { + _, got, err := s.ACLTokenList(nil, true, false, "", "", "test", defaultEntMeta, defaultEntMeta) + require.NoError(t, err) + require.ElementsMatch(t, []string{methodDC2_tok1, methodDC2_tok2}, toList(got)) + })) + require.True(t, t.Run("list global only", func(t *testing.T) { + _, got, err := s.ACLTokenList(nil, false, true, "", "", "test", defaultEntMeta, defaultEntMeta) + require.NoError(t, err) + require.ElementsMatch(t, []string{methodDC1_tok1, methodDC1_tok2}, toList(got)) + })) + require.True(t, t.Run("list both", func(t *testing.T) { + _, got, err := s.ACLTokenList(nil, true, true, "", "", "test", defaultEntMeta, defaultEntMeta) + require.NoError(t, err) + require.ElementsMatch(t, []string{methodDC1_tok1, methodDC1_tok2, methodDC2_tok1, methodDC2_tok2}, toList(got)) + })) + + lastIndex++ + require.True(t, t.Run("delete dc2 auth method", func(t *testing.T) { + require.NoError(t, s.ACLAuthMethodDeleteByName(lastIndex, "test", nil)) + })) + + require.True(t, t.Run("list local only (after dc2 delete)", func(t *testing.T) { + _, got, err := s.ACLTokenList(nil, true, false, "", "", "test", defaultEntMeta, defaultEntMeta) + require.NoError(t, err) + require.Empty(t, got) + })) + require.True(t, t.Run("list global only (after dc2 delete)", func(t *testing.T) { + _, got, err := s.ACLTokenList(nil, false, true, "", "", "test", defaultEntMeta, defaultEntMeta) + require.NoError(t, err) + require.ElementsMatch(t, []string{methodDC1_tok1, methodDC1_tok2}, toList(got)) + })) + require.True(t, t.Run("list both (after dc2 delete)", func(t *testing.T) { + _, got, err := s.ACLTokenList(nil, true, true, "", "", "test", defaultEntMeta, defaultEntMeta) + require.NoError(t, err) + require.ElementsMatch(t, []string{methodDC1_tok1, methodDC1_tok2}, toList(got)) + })) +} + func TestStateStore_ACLAuthMethods_UpsertBatchRead(t *testing.T) { t.Parallel() @@ -3092,27 +3209,31 @@ SecretID: "7a1950c6-79dc-441c-acd2-e22cd3db0240", Description: "test-m1-t1", AuthMethod: "test-1", + Local: true, }, &structs.ACLToken{ AccessorID: method1_tok2, SecretID: "442cee4c-353f-4957-adbb-33db2f9e267f", Description: "test-m1-t2", AuthMethod: "test-1", + Local: true, }, &structs.ACLToken{ AccessorID: method2_tok1, SecretID: "d9399b7d-6c34-46bd-a675-c1352fadb6fd", Description: "test-m2-t1", AuthMethod: "test-2", + Local: true, }, &structs.ACLToken{ AccessorID: method2_tok2, SecretID: "3b72fc27-9230-42ab-a1e8-02cb489ab177", Description: "test-m2-t2", AuthMethod: "test-2", + Local: true, }, } - require.NoError(t, s.ACLTokenBatchSet(4, tokens, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(4, tokens, ACLTokenSetOptions{})) // Delete one method. require.NoError(t, s.ACLAuthMethodDeleteByName(4, "test-1", nil)) @@ -3570,7 +3691,7 @@ }, } - require.NoError(t, s.ACLTokenBatchSet(4, tokens, false, false, false)) + require.NoError(t, s.ACLTokenBatchSet(4, tokens, ACLTokenSetOptions{})) // Snapshot the ACLs. snap := s.Snapshot() @@ -4099,8 +4220,8 @@ tx := s.db.Txn(false) defer tx.Abort() - links := []agentpb.ACLLink{ - agentpb.ACLLink{ + links := []pbacl.ACLLink{ + pbacl.ACLLink{ Name: "foo", }, } @@ -4122,11 +4243,11 @@ tx := s.db.Txn(false) defer tx.Abort() - links := []agentpb.ACLLink{ - agentpb.ACLLink{ + links := []pbacl.ACLLink{ + pbacl.ACLLink{ ID: "b985e082-25d3-45a9-9dd8-fd1a41b83b0d", }, - agentpb.ACLLink{ + pbacl.ACLLink{ ID: "e81887b4-836b-4053-a1fa-7e8305902be9", }, } @@ -4155,8 +4276,8 @@ tx := s.db.Txn(false) defer tx.Abort() - links := []agentpb.ACLLink{ - agentpb.ACLLink{ + links := []pbacl.ACLLink{ + pbacl.ACLLink{ ID: "b985e082-25d3-45a9-9dd8-fd1a41b83b0d", }, } @@ -4175,20 +4296,20 @@ func TestStateStore_fixupACLLinks(t *testing.T) { t.Parallel() - links := []agentpb.ACLLink{ - agentpb.ACLLink{ + links := []pbacl.ACLLink{ + pbacl.ACLLink{ ID: "40b57f86-97ea-40e4-a99a-c399cc81f4dd", Name: "foo", }, - agentpb.ACLLink{ + pbacl.ACLLink{ ID: "8f024f92-1f8e-42ea-a3c3-55fb0c8670bc", Name: "bar", }, - agentpb.ACLLink{ + pbacl.ACLLink{ ID: "c91afed1-e474-4cd2-98aa-cd57dd9377e9", Name: "baz", }, - agentpb.ACLLink{ + pbacl.ACLLink{ ID: "c1585be7-ab0e-4973-b572-ba9afda86e07", Name: "four", }, diff -Nru consul-1.7.4+dfsg1/agent/consul/state/catalog.go consul-1.8.7+dfsg1/agent/consul/state/catalog.go --- consul-1.7.4+dfsg1/agent/consul/state/catalog.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/catalog.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18 +1,22 @@ package state import ( + "errors" "fmt" + "reflect" "strings" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/types" "github.com/hashicorp/go-memdb" "github.com/hashicorp/go-uuid" ) const ( - servicesTableName = "services" + servicesTableName = "services" + gatewayServicesTableName = "gateway-services" // serviceLastExtinctionIndexName keeps track of the last raft index when the last instance // of any service was unregistered. This is used by blocking queries on missing services. @@ -55,10 +59,111 @@ } } +// gatewayServicesTableNameSchema returns a new table schema used to store information +// about services associated with terminating gateways. +func gatewayServicesTableNameSchema() *memdb.TableSchema { + return &memdb.TableSchema{ + Name: gatewayServicesTableName, + Indexes: map[string]*memdb.IndexSchema{ + "id": { + Name: "id", + AllowMissing: false, + Unique: true, + Indexer: &memdb.CompoundIndex{ + Indexes: []memdb.Indexer{ + &ServiceNameIndex{ + Field: "Gateway", + }, + &ServiceNameIndex{ + Field: "Service", + }, + &memdb.IntFieldIndex{ + Field: "Port", + }, + }, + }, + }, + "gateway": { + Name: "gateway", + AllowMissing: false, + Unique: false, + Indexer: &ServiceNameIndex{ + Field: "Gateway", + }, + }, + "service": { + Name: "service", + AllowMissing: true, + Unique: false, + Indexer: &ServiceNameIndex{ + Field: "Service", + }, + }, + }, + } +} + +type ServiceNameIndex struct { + Field string +} + +func (index *ServiceNameIndex) FromObject(obj interface{}) (bool, []byte, error) { + v := reflect.ValueOf(obj) + v = reflect.Indirect(v) // Dereference the pointer if any + + fv := v.FieldByName(index.Field) + isPtr := fv.Kind() == reflect.Ptr + fv = reflect.Indirect(fv) + if !isPtr && !fv.IsValid() || !fv.CanInterface() { + return false, nil, + fmt.Errorf("field '%s' for %#v is invalid %v ", index.Field, obj, isPtr) + } + + name, ok := fv.Interface().(structs.ServiceName) + if !ok { + return false, nil, fmt.Errorf("Field 'ServiceName' is not of type structs.ServiceName") + } + + // Enforce lowercase and add null character as terminator + id := strings.ToLower(name.String()) + "\x00" + + return true, []byte(id), nil +} + +func (index *ServiceNameIndex) FromArgs(args ...interface{}) ([]byte, error) { + if len(args) != 1 { + return nil, fmt.Errorf("must provide only a single argument") + } + name, ok := args[0].(structs.ServiceName) + if !ok { + return nil, fmt.Errorf("argument must be of type structs.ServiceName: %#v", args[0]) + } + + // Enforce lowercase and add null character as terminator + id := strings.ToLower(name.String()) + "\x00" + + return []byte(strings.ToLower(id)), nil +} + +func (index *ServiceNameIndex) PrefixFromArgs(args ...interface{}) ([]byte, error) { + val, err := index.FromArgs(args...) + if err != nil { + return nil, err + } + + // Strip the null terminator, the rest is a prefix + n := len(val) + if n > 0 { + return val[:n-1], nil + } + return val, nil +} + func init() { registerSchema(nodesTableSchema) registerSchema(servicesTableSchema) registerSchema(checksTableSchema) + registerSchema(gatewayServicesTableNameSchema) } const ( @@ -111,10 +216,7 @@ // performed within a single transaction to avoid race conditions on state // updates. func (s *Restore) Registration(idx uint64, req *structs.RegisterRequest) error { - if err := s.store.ensureRegistrationTxn(s.tx, idx, req); err != nil { - return err - } - return nil + return s.store.ensureRegistrationTxn(s.tx, idx, true, req, true) } // EnsureRegistration is used to make sure a node, service, and check @@ -124,7 +226,7 @@ tx := s.db.Txn(true) defer tx.Abort() - if err := s.ensureRegistrationTxn(tx, idx, req); err != nil { + if err := s.ensureRegistrationTxn(tx, idx, false, req, false); err != nil { return err } @@ -132,12 +234,12 @@ return nil } -func (s *Store) ensureCheckIfNodeMatches(tx *memdb.Txn, idx uint64, node string, check *structs.HealthCheck) error { +func (s *Store) ensureCheckIfNodeMatches(tx *memdb.Txn, idx uint64, preserveIndexes bool, node string, check *structs.HealthCheck) error { if check.Node != node { return fmt.Errorf("check node %q does not match node %q", check.Node, node) } - if err := s.ensureCheckTxn(tx, idx, check); err != nil { + if err := s.ensureCheckTxn(tx, idx, preserveIndexes, check); err != nil { return fmt.Errorf("failed inserting check: %s on node %q", err, check.Node) } return nil @@ -146,8 +248,8 @@ // ensureRegistrationTxn is used to make sure a node, service, and check // registration is performed within a single transaction to avoid race // conditions on state updates. -func (s *Store) ensureRegistrationTxn(tx *memdb.Txn, idx uint64, req *structs.RegisterRequest) error { - if _, err := s.validateRegisterRequestTxn(tx, req); err != nil { +func (s *Store) ensureRegistrationTxn(tx *memdb.Txn, idx uint64, preserveIndexes bool, req *structs.RegisterRequest, restore bool) error { + if _, err := s.validateRegisterRequestTxn(tx, req, restore); err != nil { return err } @@ -160,6 +262,10 @@ TaggedAddresses: req.TaggedAddresses, Meta: req.NodeMeta, } + if preserveIndexes { + node.CreateIndex = req.CreateIndex + node.ModifyIndex = req.ModifyIndex + } // Since this gets called for all node operations (service and check // updates) and churn on the node itself is basically none after the @@ -172,7 +278,7 @@ return fmt.Errorf("node lookup failed: %s", err) } if existing == nil || req.ChangesNode(existing.(*structs.Node)) { - if err := s.ensureNodeTxn(tx, idx, node); err != nil { + if err := s.ensureNodeTxn(tx, idx, preserveIndexes, node); err != nil { return fmt.Errorf("failed inserting node: %s", err) } } @@ -187,7 +293,7 @@ return fmt.Errorf("failed service lookup: %s", err) } if existing == nil || !(existing.(*structs.ServiceNode).ToNodeService()).IsSame(req.Service) { - if err := s.ensureServiceTxn(tx, idx, req.Node, req.Service); err != nil { + if err := s.ensureServiceTxn(tx, idx, req.Node, preserveIndexes, req.Service); err != nil { return fmt.Errorf("failed inserting service: %s", err) } @@ -196,12 +302,12 @@ // Add the checks, if any. if req.Check != nil { - if err := s.ensureCheckIfNodeMatches(tx, idx, req.Node, req.Check); err != nil { + if err := s.ensureCheckIfNodeMatches(tx, idx, preserveIndexes, req.Node, req.Check); err != nil { return err } } for _, check := range req.Checks { - if err := s.ensureCheckIfNodeMatches(tx, idx, req.Node, check); err != nil { + if err := s.ensureCheckIfNodeMatches(tx, idx, preserveIndexes, req.Node, check); err != nil { return err } } @@ -215,7 +321,7 @@ defer tx.Abort() // Call the node upsert - if err := s.ensureNodeTxn(tx, idx, node); err != nil { + if err := s.ensureNodeTxn(tx, idx, false, node); err != nil { return err } @@ -281,7 +387,7 @@ } // Perform the update. - if err := s.ensureNodeTxn(tx, idx, node); err != nil { + if err := s.ensureNodeTxn(tx, idx, false, node); err != nil { return false, err } @@ -291,7 +397,7 @@ // ensureNodeTxn is the inner function called to actually create a node // registration or modify an existing one in the state store. It allows // passing in a memdb transaction so it may be part of a larger txn. -func (s *Store) ensureNodeTxn(tx *memdb.Txn, idx uint64, node *structs.Node) error { +func (s *Store) ensureNodeTxn(tx *memdb.Txn, idx uint64, preserveIndexes bool, node *structs.Node) error { // See if there's an existing node with this UUID, and make sure the // name is the same. var n *structs.Node @@ -351,7 +457,11 @@ return nil } node.ModifyIndex = idx - } else { + } else if !preserveIndexes || node.CreateIndex == 0 { + // If this isn't a snapshot or there were no saved indexes, set CreateIndex + // and ModifyIndex from the given index. Prior to 1.9.0/1.8.3/1.7.7, nodes + // were not saved with an index, so this is to avoid ending up with a 0 index + // when loading a snapshot from an older version. node.CreateIndex = idx node.ModifyIndex = idx } @@ -624,7 +734,7 @@ defer tx.Abort() // Call the service registration upsert - if err := s.ensureServiceTxn(tx, idx, node, svc); err != nil { + if err := s.ensureServiceTxn(tx, idx, node, false, svc); err != nil { return err } @@ -632,48 +742,52 @@ return nil } +var errCASCompareFailed = errors.New("compare-and-set: comparison failed") + // ensureServiceCASTxn updates a service only if the existing index matches the given index. -// Returns a bool indicating if a write happened and any error. -func (s *Store) ensureServiceCASTxn(tx *memdb.Txn, idx uint64, node string, svc *structs.NodeService) (bool, error) { +// Returns an error if the write didn't happen and nil if write was successful. +func (s *Store) ensureServiceCASTxn(tx *memdb.Txn, idx uint64, node string, svc *structs.NodeService) error { // Retrieve the existing service. _, existing, err := firstWatchCompoundWithTxn(tx, "services", "id", &svc.EnterpriseMeta, node, svc.ID) if err != nil { - return false, fmt.Errorf("failed service lookup: %s", err) + return fmt.Errorf("failed service lookup: %s", err) } // Check if the we should do the set. A ModifyIndex of 0 means that // we are doing a set-if-not-exists. if svc.ModifyIndex == 0 && existing != nil { - return false, nil + return errCASCompareFailed } if svc.ModifyIndex != 0 && existing == nil { - return false, nil + return errCASCompareFailed } e, ok := existing.(*structs.ServiceNode) if ok && svc.ModifyIndex != 0 && svc.ModifyIndex != e.ModifyIndex { - return false, nil - } - - // Perform the update. - if err := s.ensureServiceTxn(tx, idx, node, svc); err != nil { - return false, err + return errCASCompareFailed } - return true, nil + return s.ensureServiceTxn(tx, idx, node, false, svc) } // ensureServiceTxn is used to upsert a service registration within an // existing memdb transaction. -func (s *Store) ensureServiceTxn(tx *memdb.Txn, idx uint64, node string, svc *structs.NodeService) error { +func (s *Store) ensureServiceTxn(tx *memdb.Txn, idx uint64, node string, preserveIndexes bool, svc *structs.NodeService) error { // Check for existing service _, existing, err := firstWatchCompoundWithTxn(tx, "services", "id", &svc.EnterpriseMeta, node, svc.ID) if err != nil { return fmt.Errorf("failed service lookup: %s", err) } - if err = structs.ValidateMetadata(svc.Meta, false); err != nil { + if err = structs.ValidateServiceMetadata(svc.Kind, svc.Meta, false); err != nil { return fmt.Errorf("Invalid Service Meta for node %s and serviceID %s: %v", node, svc.ID, err) } + + // Check if this service is covered by a gateway's wildcard specifier + err = s.checkGatewayWildcardsAndUpdate(tx, idx, svc) + if err != nil { + return fmt.Errorf("failed updating gateway mapping: %s", err) + } + // Create the service node entry and populate the indexes. Note that // conversion doesn't populate any of the node-specific information. // That's always populated when we read from the state store. @@ -697,10 +811,13 @@ if entry.IsSameService(serviceNode) { return nil } - } else { - entry.CreateIndex = idx } - entry.ModifyIndex = idx + if !preserveIndexes { + entry.ModifyIndex = idx + if existing == nil { + entry.CreateIndex = idx + } + } // Insert the service and update the index return s.catalogInsertService(tx, entry) @@ -739,7 +856,7 @@ // Generate the output structure. var results = make(structs.Services) for service, tags := range unique { - results[service] = make([]string, 0) + results[service] = make([]string, 0, len(tags)) for tag := range tags { results[service] = append(results[service], tag) } @@ -751,6 +868,10 @@ tx := s.db.Txn(false) defer tx.Abort() + return s.serviceListTxn(tx, ws, entMeta) +} + +func (s *Store) serviceListTxn(tx *memdb.Txn, ws memdb.WatchSet, entMeta *structs.EnterpriseMeta) (uint64, structs.ServiceList, error) { idx := s.catalogServicesMaxIndex(tx, entMeta) services, err := s.catalogServiceList(tx, entMeta, true) @@ -759,15 +880,15 @@ } ws.Add(services.WatchCh()) - unique := make(map[structs.ServiceID]struct{}) + unique := make(map[structs.ServiceName]struct{}) for service := services.Next(); service != nil; service = services.Next() { svc := service.(*structs.ServiceNode) unique[svc.CompoundServiceName()] = struct{}{} } results := make(structs.ServiceList, 0, len(unique)) - for sid, _ := range unique { - results = append(results, structs.ServiceInfo{Name: sid.ID, EnterpriseMeta: sid.EnterpriseMeta}) + for sn, _ := range unique { + results = append(results, structs.ServiceName{Name: sn.Name, EnterpriseMeta: sn.EnterpriseMeta}) } return idx, results, nil @@ -837,7 +958,7 @@ // Generate the output structure. var results = make(structs.Services) for service, tags := range unique { - results[service] = make([]string, 0) + results[service] = make([]string, 0, len(tags)) for tag := range tags { results[service] = append(results[service], tag) } @@ -889,6 +1010,31 @@ return s.catalogMaxIndex(tx, entMeta, checks), nil } +// Wrapper for maxIndexAndWatchChForService that operates on a list of ServiceNodes +func (s *Store) maxIndexAndWatchChsForServiceNodes(tx *memdb.Txn, + nodes structs.ServiceNodes, watchChecks bool) (uint64, []<-chan struct{}) { + + var watchChans []<-chan struct{} + var maxIdx uint64 + + seen := make(map[structs.ServiceName]bool) + for i := 0; i < len(nodes); i++ { + sn := structs.NewServiceName(nodes[i].ServiceName, &nodes[i].EnterpriseMeta) + if ok := seen[sn]; !ok { + idx, svcCh := s.maxIndexAndWatchChForService(tx, sn.Name, true, watchChecks, &sn.EnterpriseMeta) + if idx > maxIdx { + maxIdx = idx + } + if svcCh != nil { + watchChans = append(watchChans, svcCh) + } + seen[sn] = true + } + } + + return maxIdx, watchChans +} + // ConnectServiceNodes returns the nodes associated with a Connect // compatible destination for the given service name. This will include // both proxies and native integrations. @@ -922,6 +1068,35 @@ results = append(results, service.(*structs.ServiceNode)) } + // If we are querying for Connect nodes, the associated proxy might be a gateway. + // Gateways are tracked in a separate table, and we append them to the result set. + // We append rather than replace since it allows users to migrate a service + // to the mesh with a mix of sidecars and gateways until all its instances have a sidecar. + var idx uint64 + if connect { + // Look up gateway nodes associated with the service + gwIdx, nodes, err := s.serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindTerminatingGateway, entMeta) + if err != nil { + return 0, nil, fmt.Errorf("failed gateway nodes lookup: %v", err) + } + if idx < gwIdx { + idx = gwIdx + } + + // Watch for index changes to the gateway nodes + svcIdx, chans := s.maxIndexAndWatchChsForServiceNodes(tx, nodes, false) + if svcIdx > idx { + idx = svcIdx + } + for _, ch := range chans { + ws.Add(ch) + } + + for i := 0; i < len(nodes); i++ { + results = append(results, nodes[i]) + } + } + // Fill in the node details. results, err = s.parseServiceNodes(tx, ws, results) if err != nil { @@ -929,7 +1104,12 @@ } // Get the table index. - idx := s.maxIndexForService(tx, serviceName, len(results) > 0, false, entMeta) + // TODO (gateways) (freddy) Why do we always consider the main service index here? + // This doesn't seem to make sense for Connect when there's more than 1 result + svcIdx := s.maxIndexForService(tx, serviceName, len(results) > 0, false, entMeta) + if idx < svcIdx { + idx = svcIdx + } return idx, results, nil } @@ -1330,10 +1510,32 @@ if err := s.catalogUpdateServiceExtinctionIndex(tx, idx, entMeta); err != nil { return err } + + // Clean up association between service name and gateways if needed + gateways, err := s.serviceGateways(tx, svc.ServiceName, &svc.EnterpriseMeta) + if err != nil { + return fmt.Errorf("failed gateway lookup for %q: %s", svc.ServiceName, err) + } + for mapping := gateways.Next(); mapping != nil; mapping = gateways.Next() { + if gs, ok := mapping.(*structs.GatewayService); ok && gs != nil { + // Only delete if association was created by a wildcard specifier. + // Otherwise the service was specified in the config entry, and the association should be maintained + // for when the service is re-registered + if gs.FromWildcard { + if err := tx.Delete(gatewayServicesTableName, gs); err != nil { + return fmt.Errorf("failed to truncate gateway services table: %v", err) + } + if err := indexUpdateMaxTxn(tx, idx, gatewayServicesTableName); err != nil { + return fmt.Errorf("failed updating gateway-services index: %v", err) + } + } + } + } } } else { return fmt.Errorf("Could not find any service %s: %s", svc.ServiceName, err) } + return nil } @@ -1343,7 +1545,7 @@ defer tx.Abort() // Call the check registration - if err := s.ensureCheckTxn(tx, idx, hc); err != nil { + if err := s.ensureCheckTxn(tx, idx, false, hc); err != nil { return err } @@ -1391,7 +1593,7 @@ } // Perform the update. - if err := s.ensureCheckTxn(tx, idx, hc); err != nil { + if err := s.ensureCheckTxn(tx, idx, false, hc); err != nil { return false, err } @@ -1401,7 +1603,7 @@ // ensureCheckTransaction is used as the inner method to handle inserting // a health check into the state store. It ensures safety against inserting // checks with no matching node or service. -func (s *Store) ensureCheckTxn(tx *memdb.Txn, idx uint64, hc *structs.HealthCheck) error { +func (s *Store) ensureCheckTxn(tx *memdb.Txn, idx uint64, preserveIndexes bool, hc *structs.HealthCheck) error { // Check if we have an existing health check _, existing, err := firstWatchCompoundWithTxn(tx, "checks", "id", &hc.EnterpriseMeta, hc.Node, string(hc.CheckID)) if err != nil { @@ -1413,9 +1615,8 @@ existingCheck := existing.(*structs.HealthCheck) hc.CreateIndex = existingCheck.CreateIndex hc.ModifyIndex = existingCheck.ModifyIndex - } else { + } else if !preserveIndexes { hc.CreateIndex = idx - hc.ModifyIndex = idx } // Use the default check status if none was provided @@ -1486,7 +1687,7 @@ } } } - if modified { + if modified && !preserveIndexes { // We update the modify index, ONLY if something has changed, thus // With constant output, no change is seen when watching a service // With huge number of nodes where anti-entropy updates continuously @@ -1799,10 +2000,52 @@ return s.checkServiceNodes(ws, serviceName, true, entMeta) } +// CheckIngressServiceNodes is used to query all nodes and checks for ingress +// endpoints for a given service. +func (s *Store) CheckIngressServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *structs.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { + tx := s.db.Txn(false) + defer tx.Abort() + + maxIdx, nodes, err := s.serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindIngressGateway, entMeta) + if err != nil { + return 0, nil, fmt.Errorf("failed gateway nodes lookup: %v", err) + } + + // TODO(ingress) : Deal with incorporating index from mapping table + // Watch for index changes to the gateway nodes + idx, chans := s.maxIndexAndWatchChsForServiceNodes(tx, nodes, false) + for _, ch := range chans { + ws.Add(ch) + } + maxIdx = lib.MaxUint64(maxIdx, idx) + + // TODO(ingress): Test namespace functionality here + // De-dup services to lookup + names := make(map[structs.ServiceName]struct{}) + for _, n := range nodes { + names[n.CompoundServiceName()] = struct{}{} + } + + var results structs.CheckServiceNodes + for sn := range names { + idx, n, err := s.checkServiceNodesTxn(tx, ws, sn.Name, false, &sn.EnterpriseMeta) + if err != nil { + return 0, nil, err + } + maxIdx = lib.MaxUint64(maxIdx, idx) + results = append(results, n...) + } + return maxIdx, results, nil +} + func (s *Store) checkServiceNodes(ws memdb.WatchSet, serviceName string, connect bool, entMeta *structs.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { tx := s.db.Txn(false) defer tx.Abort() + return s.checkServiceNodesTxn(tx, ws, serviceName, connect, entMeta) +} + +func (s *Store) checkServiceNodesTxn(tx *memdb.Txn, ws memdb.WatchSet, serviceName string, connect bool, entMeta *structs.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { // Function for lookup index := "service" if connect { @@ -1829,11 +2072,33 @@ // service name IFF there is at least one Connect-native instance of that // service. Either way there is usually only one distinct name if proxies are // named consistently but could be multiple. - serviceNames := make(map[string]struct{}, 2) + serviceNames := make(map[structs.ServiceName]struct{}, 2) for service := iter.Next(); service != nil; service = iter.Next() { sn := service.(*structs.ServiceNode) results = append(results, sn) - serviceNames[sn.ServiceName] = struct{}{} + + name := structs.NewServiceName(sn.ServiceName, &sn.EnterpriseMeta) + serviceNames[name] = struct{}{} + } + + // If we are querying for Connect nodes, the associated proxy might be a terminating-gateway. + // Gateways are tracked in a separate table, and we append them to the result set. + // We append rather than replace since it allows users to migrate a service + // to the mesh with a mix of sidecars and gateways until all its instances have a sidecar. + var idx uint64 + if connect { + // Look up gateway nodes associated with the service + gwIdx, nodes, err := s.serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindTerminatingGateway, entMeta) + if err != nil { + return 0, nil, fmt.Errorf("failed gateway nodes lookup: %v", err) + } + idx = lib.MaxUint64(idx, gwIdx) + for i := 0; i < len(nodes); i++ { + results = append(results, nodes[i]) + + name := structs.NewServiceName(nodes[i].ServiceName, &nodes[i].EnterpriseMeta) + serviceNames[name] = struct{}{} + } } // watchOptimized tracks if we meet the necessary condition to optimize @@ -1845,22 +2110,19 @@ // (~682 service instances). See // https://github.com/hashicorp/consul/issues/4984 watchOptimized := false - idx := uint64(0) if len(serviceNames) > 0 { // Assume optimization will work since it really should at this point. For // safety we'll sanity check this below for each service name. watchOptimized = true // Fetch indexes for all names services in result set. - for svcName := range serviceNames { + for n := range serviceNames { // We know service values should exist since the serviceNames map is only // populated if there is at least one result above. so serviceExists arg // below is always true. - svcIdx, svcCh := s.maxIndexAndWatchChForService(tx, svcName, true, true, entMeta) + svcIdx, svcCh := s.maxIndexAndWatchChForService(tx, n.Name, true, true, &n.EnterpriseMeta) // Take the max index represented - if idx < svcIdx { - idx = svcIdx - } + idx = lib.MaxUint64(idx, svcIdx) if svcCh != nil { // Watch the service-specific index for changes in liu of all iradix nodes // for checks etc. @@ -1875,11 +2137,12 @@ } } else { // If we have no results, we should use the index of the last service - // extinction event so we don't go backwards when services de-register. We + // extinction event so we don't go backwards when services deregister. We // use target serviceName here but it actually doesn't matter. No chan will // be returned as we can't use the optimization in this case (and don't need // to as there is only one chan to watch anyway). - idx, _ = s.maxIndexAndWatchChForService(tx, serviceName, false, true, entMeta) + svcIdx, _ := s.maxIndexAndWatchChForService(tx, serviceName, false, true, entMeta) + idx = lib.MaxUint64(idx, svcIdx) } // Create a nil watchset to pass below, we'll only pass the real one if we @@ -1936,6 +2199,38 @@ return s.parseCheckServiceNodes(tx, ws, idx, serviceName, results, err) } +// GatewayServices is used to query all services associated with a gateway +func (s *Store) GatewayServices(ws memdb.WatchSet, gateway string, entMeta *structs.EnterpriseMeta) (uint64, structs.GatewayServices, error) { + tx := s.db.Txn(false) + defer tx.Abort() + var maxIdx uint64 + + iter, err := s.gatewayServices(tx, gateway, entMeta) + if err != nil { + return 0, nil, fmt.Errorf("failed gateway services lookup: %s", err) + } + ws.Add(iter.WatchCh()) + + var results structs.GatewayServices + for service := iter.Next(); service != nil; service = iter.Next() { + svc := service.(*structs.GatewayService) + + if svc.Service.Name != structs.WildcardSpecifier { + idx, matches, err := s.checkProtocolMatch(tx, ws, svc) + if err != nil { + return 0, nil, fmt.Errorf("failed checking protocol: %s", err) + } + maxIdx = lib.MaxUint64(maxIdx, idx) + if matches { + results = append(results, svc) + } + } + } + + idx := maxIndexTxn(tx, gatewayServicesTableName) + return lib.MaxUint64(maxIdx, idx), results, nil +} + // parseCheckServiceNodes is used to parse through a given set of services, // and query for an associated node and a set of checks. This is the inner // method used to return a rich set of results from a more simple query. @@ -2179,3 +2474,332 @@ } return sessions, nil } + +// updateGatewayServices associates services with gateways as specified in a gateway config entry +func (s *Store) updateGatewayServices(tx *memdb.Txn, idx uint64, conf structs.ConfigEntry, entMeta *structs.EnterpriseMeta) error { + var ( + noChange bool + gatewayServices structs.GatewayServices + err error + ) + + gateway := structs.NewServiceName(conf.GetName(), entMeta) + switch conf.GetKind() { + case structs.IngressGateway: + noChange, gatewayServices, err = s.ingressConfigGatewayServices(tx, gateway, conf, entMeta) + case structs.TerminatingGateway: + noChange, gatewayServices, err = s.terminatingConfigGatewayServices(tx, gateway, conf, entMeta) + default: + return fmt.Errorf("config entry kind %q does not need gateway-services", conf.GetKind()) + } + // Return early if there is an error OR we don't have any services to update + if err != nil || noChange { + return err + } + + // Delete all associated with gateway first, to avoid keeping mappings that were removed + if _, err := tx.DeleteAll(gatewayServicesTableName, "gateway", structs.NewServiceName(conf.GetName(), entMeta)); err != nil { + return fmt.Errorf("failed to truncate gateway services table: %v", err) + } + + for _, svc := range gatewayServices { + // If the service is a wildcard we need to target all services within the namespace + if svc.Service.Name == structs.WildcardSpecifier { + if err := s.updateGatewayNamespace(tx, idx, svc, entMeta); err != nil { + return fmt.Errorf("failed to associate gateway %q with wildcard: %v", gateway.String(), err) + } + // Skip service-specific update below if there was a wildcard update + continue + } + + // Since this service was specified on its own, and not with a wildcard, + // if there is an existing entry, we overwrite it. The service entry is the source of truth. + // + // By extension, if TLS creds are provided with a wildcard but are not provided in + // the service entry, the service does not inherit the creds from the wildcard. + err = s.updateGatewayService(tx, idx, svc) + if err != nil { + return err + } + } + + if err := indexUpdateMaxTxn(tx, idx, gatewayServicesTableName); err != nil { + return fmt.Errorf("failed updating gateway-services index: %v", err) + } + return nil +} + +// ingressConfigGatewayServices constructs a list of GatewayService structs for +// insertion into the memdb table, specific to ingress gateways. The boolean +// returned indicates that there are no changes necessary to the memdb table. +func (s *Store) ingressConfigGatewayServices( + tx *memdb.Txn, + gateway structs.ServiceName, + conf structs.ConfigEntry, + entMeta *structs.EnterpriseMeta, +) (bool, structs.GatewayServices, error) { + entry, ok := conf.(*structs.IngressGatewayConfigEntry) + if !ok { + return false, nil, fmt.Errorf("unexpected config entry type: %T", conf) + } + + // Check if service list matches the last known list for the config entry, if it does, skip the update + _, c, err := s.configEntryTxn(tx, nil, conf.GetKind(), conf.GetName(), entMeta) + if err != nil { + return false, nil, fmt.Errorf("failed to get config entry: %v", err) + } + if cfg, ok := c.(*structs.IngressGatewayConfigEntry); ok && cfg != nil { + if reflect.DeepEqual(cfg.Listeners, entry.Listeners) { + // Services are the same, nothing to update + return true, nil, nil + } + } + + var gatewayServices structs.GatewayServices + for _, listener := range entry.Listeners { + for _, service := range listener.Services { + mapping := &structs.GatewayService{ + Gateway: gateway, + Service: service.ToServiceName(), + GatewayKind: structs.ServiceKindIngressGateway, + Hosts: service.Hosts, + Port: listener.Port, + Protocol: listener.Protocol, + } + + gatewayServices = append(gatewayServices, mapping) + } + } + return false, gatewayServices, nil +} + +// terminatingConfigGatewayServices constructs a list of GatewayService structs +// for insertion into the memdb table, specific to terminating gateways. The +// boolean returned indicates that there are no changes necessary to the memdb +// table. +func (s *Store) terminatingConfigGatewayServices( + tx *memdb.Txn, + gateway structs.ServiceName, + conf structs.ConfigEntry, + entMeta *structs.EnterpriseMeta, +) (bool, structs.GatewayServices, error) { + entry, ok := conf.(*structs.TerminatingGatewayConfigEntry) + if !ok { + return false, nil, fmt.Errorf("unexpected config entry type: %T", conf) + } + + // Check if service list matches the last known list for the config entry, if it does, skip the update + _, c, err := s.configEntryTxn(tx, nil, conf.GetKind(), conf.GetName(), entMeta) + if err != nil { + return false, nil, fmt.Errorf("failed to get config entry: %v", err) + } + if cfg, ok := c.(*structs.TerminatingGatewayConfigEntry); ok && cfg != nil { + if reflect.DeepEqual(cfg.Services, entry.Services) { + // Services are the same, nothing to update + return true, nil, nil + } + } + + var gatewayServices structs.GatewayServices + for _, svc := range entry.Services { + mapping := &structs.GatewayService{ + Gateway: gateway, + Service: structs.NewServiceName(svc.Name, &svc.EnterpriseMeta), + GatewayKind: structs.ServiceKindTerminatingGateway, + KeyFile: svc.KeyFile, + CertFile: svc.CertFile, + CAFile: svc.CAFile, + SNI: svc.SNI, + } + + gatewayServices = append(gatewayServices, mapping) + } + return false, gatewayServices, nil +} + +// updateGatewayNamespace is used to target all services within a namespace +func (s *Store) updateGatewayNamespace(tx *memdb.Txn, idx uint64, service *structs.GatewayService, entMeta *structs.EnterpriseMeta) error { + services, err := s.catalogServiceListByKind(tx, structs.ServiceKindTypical, entMeta) + if err != nil { + return fmt.Errorf("failed querying services: %s", err) + } + + // Iterate over services in namespace and insert mapping for each + for svc := services.Next(); svc != nil; svc = services.Next() { + sn := svc.(*structs.ServiceNode) + + // Only associate non-consul services with gateways + if sn.ServiceName == "consul" { + continue + } + + existing, err := tx.First(gatewayServicesTableName, "id", service.Gateway, sn.CompoundServiceName(), service.Port) + if err != nil { + return fmt.Errorf("gateway service lookup failed: %s", err) + } + if existing != nil { + // If there's an existing service associated with this gateway then we skip it. + // This means the service was specified on its own, and the service entry overrides the wildcard entry. + continue + } + + mapping := service.Clone() + + mapping.Service = structs.NewServiceName(sn.ServiceName, &service.Service.EnterpriseMeta) + mapping.FromWildcard = true + + err = s.updateGatewayService(tx, idx, mapping) + if err != nil { + return err + } + } + + // Also store a mapping for the wildcard so that the TLS creds can be pulled + // for new services registered in its namespace + err = s.updateGatewayService(tx, idx, service) + if err != nil { + return err + } + return nil +} + +// updateGatewayService associates services with gateways after an eligible event +// ie. Registering a service in a namespace targeted by a gateway +func (s *Store) updateGatewayService(tx *memdb.Txn, idx uint64, mapping *structs.GatewayService) error { + // Check if mapping already exists in table if it's already in the table + // Avoid insert if nothing changed + existing, err := tx.First(gatewayServicesTableName, "id", mapping.Gateway, mapping.Service, mapping.Port) + if err != nil { + return fmt.Errorf("gateway service lookup failed: %s", err) + } + if gs, ok := existing.(*structs.GatewayService); ok && gs != nil { + mapping.CreateIndex = gs.CreateIndex + if gs.IsSame(mapping) { + return nil + } + } else { + // We have a new mapping + mapping.CreateIndex = idx + } + mapping.ModifyIndex = idx + + if err := tx.Insert(gatewayServicesTableName, mapping); err != nil { + return fmt.Errorf("failed inserting gateway service mapping: %s", err) + } + + if err := indexUpdateMaxTxn(tx, idx, gatewayServicesTableName); err != nil { + return fmt.Errorf("failed updating gateway-services index: %v", err) + } + return nil +} + +// checkWildcardForGatewaysAndUpdate checks whether a service matches a +// wildcard definition in gateway config entries and if so adds it the the +// gateway-services table. +func (s *Store) checkGatewayWildcardsAndUpdate(tx *memdb.Txn, idx uint64, svc *structs.NodeService) error { + // Do not associate non-typical services with gateways or consul services + if svc.Kind != structs.ServiceKindTypical || svc.Service == "consul" { + return nil + } + + svcGateways, err := s.serviceGateways(tx, structs.WildcardSpecifier, &svc.EnterpriseMeta) + if err != nil { + return fmt.Errorf("failed gateway lookup for %q: %s", svc.Service, err) + } + for service := svcGateways.Next(); service != nil; service = svcGateways.Next() { + if wildcardSvc, ok := service.(*structs.GatewayService); ok && wildcardSvc != nil { + + // Copy the wildcard mapping and modify it + gatewaySvc := wildcardSvc.Clone() + + gatewaySvc.Service = structs.NewServiceName(svc.Service, &svc.EnterpriseMeta) + gatewaySvc.FromWildcard = true + + if err = s.updateGatewayService(tx, idx, gatewaySvc); err != nil { + return fmt.Errorf("Failed to associate service %q with gateway %q", gatewaySvc.Service.String(), gatewaySvc.Gateway.String()) + } + } + } + return nil +} + +// serviceGateways returns all GatewayService entries with the given service name. This effectively looks up +// all the gateways mapped to this service. +func (s *Store) serviceGateways(tx *memdb.Txn, name string, entMeta *structs.EnterpriseMeta) (memdb.ResultIterator, error) { + return tx.Get(gatewayServicesTableName, "service", structs.NewServiceName(name, entMeta)) +} + +func (s *Store) gatewayServices(tx *memdb.Txn, name string, entMeta *structs.EnterpriseMeta) (memdb.ResultIterator, error) { + return tx.Get(gatewayServicesTableName, "gateway", structs.NewServiceName(name, entMeta)) +} + +// TODO(ingress): How to handle index rolling back when a config entry is +// deleted that references a service? +// We might need something like the service_last_extinction index? +func (s *Store) serviceGatewayNodes(tx *memdb.Txn, ws memdb.WatchSet, service string, kind structs.ServiceKind, entMeta *structs.EnterpriseMeta) (uint64, structs.ServiceNodes, error) { + // Look up gateway name associated with the service + gws, err := s.serviceGateways(tx, service, entMeta) + if err != nil { + return 0, nil, fmt.Errorf("failed gateway lookup: %s", err) + } + + // Adding this channel to the WatchSet means that the watch will fire if a config entry targeting the service is added. + // Otherwise, if there's no associated gateway, then no watch channel would be returned + ws.Add(gws.WatchCh()) + + var ret structs.ServiceNodes + var maxIdx uint64 + + for gateway := gws.Next(); gateway != nil; gateway = gws.Next() { + mapping := gateway.(*structs.GatewayService) + // TODO(ingress): Test this conditional + if mapping.GatewayKind != kind { + continue + } + maxIdx = lib.MaxUint64(maxIdx, mapping.ModifyIndex) + + // Look up nodes for gateway + gwServices, err := s.catalogServiceNodeList(tx, mapping.Gateway.Name, "service", &mapping.Gateway.EnterpriseMeta) + if err != nil { + return 0, nil, fmt.Errorf("failed service lookup: %s", err) + } + + var exists bool + for svc := gwServices.Next(); svc != nil; svc = gwServices.Next() { + sn := svc.(*structs.ServiceNode) + ret = append(ret, sn) + + // Tracking existence to know whether we should check extinction index for service + exists = true + } + + // This prevents the index from sliding back if case all instances of the gateway service are deregistered + svcIdx := s.maxIndexForService(tx, mapping.Gateway.Name, exists, false, &mapping.Gateway.EnterpriseMeta) + maxIdx = lib.MaxUint64(maxIdx, svcIdx) + + // Ensure that blocking queries wake up if the gateway-service mapping exists, but the gateway does not exist yet + if !exists { + ws.Add(gwServices.WatchCh()) + } + } + return maxIdx, ret, nil +} + +// checkProtocolMatch filters out any GatewayService entries added from a wildcard with a protocol +// that doesn't match the one configured in their discovery chain. +func (s *Store) checkProtocolMatch( + tx *memdb.Txn, + ws memdb.WatchSet, + svc *structs.GatewayService, +) (uint64, bool, error) { + if svc.GatewayKind != structs.ServiceKindIngressGateway || !svc.FromWildcard { + return 0, true, nil + } + + idx, protocol, err := s.protocolForService(tx, ws, svc.Service) + if err != nil { + return 0, false, err + } + + return idx, svc.Protocol == protocol, nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/state/catalog_oss.go consul-1.8.7+dfsg1/agent/consul/state/catalog_oss.go --- consul-1.7.4+dfsg1/agent/consul/state/catalog_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/catalog_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,7 +4,6 @@ import ( "fmt" - "github.com/hashicorp/consul/agent/structs" memdb "github.com/hashicorp/go-memdb" ) @@ -323,7 +322,7 @@ return tx.Get("checks", "node_service", node, service) } -func (s *Store) validateRegisterRequestTxn(tx *memdb.Txn, args *structs.RegisterRequest) (*structs.EnterpriseMeta, error) { +func (s *Store) validateRegisterRequestTxn(tx *memdb.Txn, args *structs.RegisterRequest, _ bool) (*structs.EnterpriseMeta, error) { return nil, nil } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/catalog_test.go consul-1.8.7+dfsg1/agent/consul/state/catalog_test.go --- consul-1.7.4+dfsg1/agent/consul/state/catalog_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/catalog_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,7 @@ "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/stringslice" "github.com/hashicorp/consul/types" "github.com/hashicorp/go-memdb" uuid "github.com/hashicorp/go-uuid" @@ -138,7 +138,7 @@ if err := s.ensureNoNodeWithSimilarNameTxn(tx, newNode, false); err == nil { t.Fatalf("Should return an error since the previous node is still healthy") } - s.ensureCheckTxn(tx, 5, &structs.HealthCheck{ + s.ensureCheckTxn(tx, 5, false, &structs.HealthCheck{ Node: "node1", CheckID: structs.SerfCheckID, Status: api.HealthCritical, @@ -204,7 +204,7 @@ Address: "1.1.1.1", Port: 8080, Meta: map[string]string{strings.Repeat("a", 129): "somevalue"}, - Tags: []string{"master"}, + Tags: []string{"primary"}, } if err := s.EnsureRegistration(9, req); err == nil { t.Fatalf("Service should not have been registered since Meta is invalid") @@ -216,7 +216,7 @@ Service: "redis", Address: "1.1.1.1", Port: 8080, - Tags: []string{"master"}, + Tags: []string{"primary"}, Weights: &structs.Weights{Passing: 1, Warning: 1}, } if err := s.EnsureRegistration(2, req); err != nil { @@ -231,7 +231,7 @@ Service: "redis", Address: "1.1.1.1", Port: 8080, - Tags: []string{"master"}, + Tags: []string{"primary"}, Weights: &structs.Weights{Passing: 1, Warning: 1}, RaftIndex: structs.RaftIndex{CreateIndex: 2, ModifyIndex: 2}, EnterpriseMeta: *structs.DefaultEnterpriseMeta(), @@ -334,7 +334,7 @@ Status: "critical", ServiceID: "redis1", ServiceName: "redis", - ServiceTags: []string{"master"}, + ServiceTags: []string{"primary"}, RaftIndex: structs.RaftIndex{CreateIndex: 4, ModifyIndex: 4}, EnterpriseMeta: *structs.DefaultEnterpriseMeta(), }, @@ -391,9 +391,13 @@ ID: makeRandomNodeID(t), Node: "node1", Address: "1.2.3.4", + RaftIndex: structs.RaftIndex{ + CreateIndex: 1, + ModifyIndex: 1, + }, } nodeID := string(req.ID) - nodeName := string(req.Node) + nodeName := req.Node restore := s.Restore() if err := restore.Registration(1, req); err != nil { t.Fatalf("err: %s", err) @@ -429,6 +433,10 @@ Address: "1.1.1.1", Port: 8080, Weights: &structs.Weights{Passing: 1, Warning: 1}, + RaftIndex: structs.RaftIndex{ + CreateIndex: 2, + ModifyIndex: 2, + }, } restore = s.Restore() if err := restore.Registration(2, req); err != nil { @@ -461,6 +469,10 @@ Node: nodeName, CheckID: "check1", Name: "check", + RaftIndex: structs.RaftIndex{ + CreateIndex: 3, + ModifyIndex: 3, + }, } restore = s.Restore() if err := restore.Registration(3, req); err != nil { @@ -498,6 +510,10 @@ Node: nodeName, CheckID: "check2", Name: "check", + RaftIndex: structs.RaftIndex{ + CreateIndex: 4, + ModifyIndex: 4, + }, }, } restore = s.Restore() @@ -810,7 +826,7 @@ if err := s.EnsureNode(3, in2); err != nil { t.Fatalf("err: %s", err) } - idx, out, err = s.GetNode("node1") + _, out, err = s.GetNode("node1") if err != nil { t.Fatalf("err: %s", err) } @@ -854,7 +870,8 @@ } // Retrieve the node - idx, out, err = s.GetNode("node1") + _, out, err = s.GetNode("node1") + require.NoError(t, err) if out != nil { t.Fatalf("Node should not exist anymore: %q", out) } @@ -918,7 +935,8 @@ } // Retrieve the node - idx, out, err = s.GetNode("Node1bis") + _, out, err = s.GetNode("Node1bis") + require.NoError(t, err) if out == nil { t.Fatalf("Node should exist, but was null") } @@ -1006,7 +1024,7 @@ if err := s.EnsureNode(15, in); err != nil { t.Fatalf("[DEPRECATED] it should work, err:= %q", err) } - idx, out, err = s.GetNode("Node1-Renamed2") + _, out, err = s.GetNode("Node1-Renamed2") if err != nil { t.Fatalf("[DEPRECATED] err: %s", err) } @@ -1565,7 +1583,7 @@ ns1 := &structs.NodeService{ ID: "service1", Service: "redis", - Tags: []string{"prod", "master"}, + Tags: []string{"prod", "primary"}, Address: "1.1.1.1", Port: 1111, } @@ -1577,7 +1595,7 @@ ns2 := &structs.NodeService{ ID: "service3", Service: "redis", - Tags: []string{"prod", "slave"}, + Tags: []string{"prod", "replica"}, Address: "1.1.1.1", Port: 1111, } @@ -1601,7 +1619,7 @@ // Verify the result. We sort the lists since the order is // non-deterministic (it's built using a map internally). expected := structs.Services{ - "redis": []string{"prod", "master", "slave"}, + "redis": []string{"prod", "primary", "replica"}, "dogs": []string{}, } sort.Strings(expected["redis"]) @@ -1624,12 +1642,14 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { s := testStateStore(t) - // Listing with no results returns nil. ws := memdb.NewWatchSet() - idx, res, err := s.ServicesByNodeMeta(ws, map[string]string{"somekey": "somevalue"}, nil) - if idx != 0 || len(res) != 0 || err != nil { - t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) - } + + t.Run("Listing with no results returns nil", func(t *testing.T) { + idx, res, err := s.ServicesByNodeMeta(ws, map[string]string{"somekey": "somevalue"}, nil) + if idx != 0 || len(res) != 0 || err != nil { + t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) + } + }) // Create some nodes and services in the state store. node0 := &structs.Node{Node: "node0", Address: "127.0.0.1", Meta: map[string]string{"role": "client", "common": "1"}} @@ -1643,7 +1663,7 @@ ns1 := &structs.NodeService{ ID: "service1", Service: "redis", - Tags: []string{"prod", "master"}, + Tags: []string{"prod", "primary"}, Address: "1.1.1.1", Port: 1111, } @@ -1653,7 +1673,7 @@ ns2 := &structs.NodeService{ ID: "service1", Service: "redis", - Tags: []string{"prod", "slave"}, + Tags: []string{"prod", "replica"}, Address: "1.1.1.1", Port: 1111, } @@ -1661,94 +1681,97 @@ t.Fatalf("err: %s", err) } if !watchFired(ws) { - t.Fatalf("bad") + t.Fatalf("expected the watch to be triggered by the queries") } - // Filter the services by the first node's meta value. ws = memdb.NewWatchSet() - _, res, err = s.ServicesByNodeMeta(ws, map[string]string{"role": "client"}, nil) - if err != nil { - t.Fatalf("err: %s", err) - } - expected := structs.Services{ - "redis": []string{"master", "prod"}, - } - sort.Strings(res["redis"]) - if !reflect.DeepEqual(res, expected) { - t.Fatalf("bad: %v %v", res, expected) - } - // Get all services using the common meta value - _, res, err = s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil) - if err != nil { - t.Fatalf("err: %s", err) - } - expected = structs.Services{ - "redis": []string{"master", "prod", "slave"}, - } - sort.Strings(res["redis"]) - if !reflect.DeepEqual(res, expected) { - t.Fatalf("bad: %v %v", res, expected) - } + t.Run("Filter the services by the first node's meta value", func(t *testing.T) { + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"role": "client"}, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + expected := structs.Services{ + "redis": []string{"primary", "prod"}, + } + sort.Strings(res["redis"]) + require.Equal(t, expected, res) + }) - // Get an empty list for an invalid meta value - _, res, err = s.ServicesByNodeMeta(ws, map[string]string{"invalid": "nope"}, nil) - if err != nil { - t.Fatalf("err: %s", err) - } - expected = structs.Services{} - if !reflect.DeepEqual(res, expected) { - t.Fatalf("bad: %v %v", res, expected) - } + t.Run("Get all services using the common meta value", func(t *testing.T) { + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + expected := structs.Services{ + "redis": []string{"primary", "prod", "replica"}, + } + sort.Strings(res["redis"]) + require.Equal(t, expected, res) + }) - // Get the first node's service instance using multiple meta filters - _, res, err = s.ServicesByNodeMeta(ws, map[string]string{"role": "client", "common": "1"}, nil) - if err != nil { - t.Fatalf("err: %s", err) - } - expected = structs.Services{ - "redis": []string{"master", "prod"}, - } - sort.Strings(res["redis"]) - if !reflect.DeepEqual(res, expected) { - t.Fatalf("bad: %v %v", res, expected) - } + t.Run("Get an empty list for an invalid meta value", func(t *testing.T) { + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"invalid": "nope"}, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + expected := structs.Services{} + require.Equal(t, expected, res) + }) - // Sanity check the watch before we proceed. - if watchFired(ws) { - t.Fatalf("bad") - } + t.Run("Get the first node's service instance using multiple meta filters", func(t *testing.T) { + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"role": "client", "common": "1"}, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + expected := structs.Services{ + "redis": []string{"primary", "prod"}, + } + sort.Strings(res["redis"]) + require.Equal(t, expected, res) + }) - // Registering some unrelated node + service should not fire the watch. - testRegisterNode(t, s, 4, "nope") - testRegisterService(t, s, 5, "nope", "nope") - if watchFired(ws) { - t.Fatalf("bad") - } + t.Run("Registering some unrelated node + service should not fire the watch.", func(t *testing.T) { + testRegisterNode(t, s, 4, "nope") + testRegisterService(t, s, 5, "nope", "nope") + if watchFired(ws) { + t.Fatalf("expected the watch to timeout and not be triggered") + } + }) - // Overwhelm the service tracking. - idx = 6 - for i := 0; i < 2*watchLimit; i++ { - node := fmt.Sprintf("many%d", i) - testRegisterNodeWithMeta(t, s, idx, node, map[string]string{"common": "1"}) - idx++ - testRegisterService(t, s, idx, node, "nope") - idx++ - } + t.Run("Uses watchLimit to limit the number of watches", func(t *testing.T) { + patchWatchLimit(t, 10) - // Now get a fresh watch, which will be forced to watch the whole - // service table. - ws = memdb.NewWatchSet() - _, _, err = s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil) - if err != nil { - t.Fatalf("err: %s", err) - } + var idx uint64 = 6 + for i := 0; i < watchLimit+2; i++ { + node := fmt.Sprintf("many%d", i) + testRegisterNodeWithMeta(t, s, idx, node, map[string]string{"common": "1"}) + idx++ + testRegisterService(t, s, idx, node, "nope") + idx++ + } - // Registering some unrelated node + service should not fire the watch. - testRegisterService(t, s, idx, "nope", "more-nope") - if !watchFired(ws) { - t.Fatalf("bad") - } + // Now get a fresh watch, which will be forced to watch the whole + // service table. + ws := memdb.NewWatchSet() + _, _, err := s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil) + require.NoError(t, err) + + testRegisterService(t, s, idx, "nope", "more-nope") + if !watchFired(ws) { + t.Fatalf("expected the watch to timeout and not be triggered") + } + }) +} + +// patchWatchLimit package variable. Not safe for concurrent use. Do not use +// with t.Parallel. +func patchWatchLimit(t *testing.T, limit int) { + oldLimit := watchLimit + watchLimit = limit + t.Cleanup(func() { + watchLimit = oldLimit + }) } func TestStateStore_ServiceNodes(t *testing.T) { @@ -1780,13 +1803,13 @@ if err := s.EnsureService(13, "bar", &structs.NodeService{ID: "api", Service: "api", Tags: nil, Address: "", Port: 5000}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(14, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"master"}, Address: "", Port: 8000}); err != nil { + if err := s.EnsureService(14, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"primary"}, Address: "", Port: 8000}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(15, "bar", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"slave"}, Address: "", Port: 8000}); err != nil { + if err := s.EnsureService(15, "bar", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8000}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(16, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"slave"}, Address: "", Port: 8001}); err != nil { + if err := s.EnsureService(16, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8001}); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { @@ -1814,7 +1837,7 @@ if nodes[0].ServiceID != "db" { t.Fatalf("bad: %v", nodes) } - if !lib.StrContains(nodes[0].ServiceTags, "slave") { + if !stringslice.Contains(nodes[0].ServiceTags, "replica") { t.Fatalf("bad: %v", nodes) } if nodes[0].ServicePort != 8000 { @@ -1829,7 +1852,7 @@ if nodes[1].ServiceID != "db2" { t.Fatalf("bad: %v", nodes) } - if !lib.StrContains(nodes[1].ServiceTags, "slave") { + if !stringslice.Contains(nodes[1].ServiceTags, "replica") { t.Fatalf("bad: %v", nodes) } if nodes[1].ServicePort != 8001 { @@ -1844,7 +1867,7 @@ if nodes[2].ServiceID != "db" { t.Fatalf("bad: %v", nodes) } - if !lib.StrContains(nodes[2].ServiceTags, "master") { + if !stringslice.Contains(nodes[2].ServiceTags, "primary") { t.Fatalf("bad: %v", nodes) } if nodes[2].ServicePort != 8000 { @@ -1867,7 +1890,8 @@ // Overwhelm the node tracking. idx = 19 - for i := 0; i < 2*watchLimit; i++ { + patchWatchLimit(t, 10) + for i := 0; i < watchLimit+2; i++ { node := fmt.Sprintf("many%d", i) if err := s.EnsureNode(idx, &structs.Node{Node: node, Address: "127.0.0.1"}); err != nil { t.Fatalf("err: %v", err) @@ -1898,7 +1922,7 @@ // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.ServiceTagNodes(ws, "db", []string{"master"}, nil) + idx, nodes, err := s.ServiceTagNodes(ws, "db", []string{"primary"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1916,13 +1940,13 @@ if err := s.EnsureNode(16, &structs.Node{Node: "bar", Address: "127.0.0.2"}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(17, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"master"}, Address: "", Port: 8000}); err != nil { + if err := s.EnsureService(17, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"primary"}, Address: "", Port: 8000}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(18, "foo", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"slave"}, Address: "", Port: 8001}); err != nil { + if err := s.EnsureService(18, "foo", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8001}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(19, "bar", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"slave"}, Address: "", Port: 8000}); err != nil { + if err := s.EnsureService(19, "bar", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8000}); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { @@ -1931,7 +1955,7 @@ // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.ServiceTagNodes(ws, "db", []string{"master"}, nil) + idx, nodes, err = s.ServiceTagNodes(ws, "db", []string{"primary"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1947,7 +1971,7 @@ if nodes[0].Address != "127.0.0.1" { t.Fatalf("bad: %v", nodes) } - if !lib.StrContains(nodes[0].ServiceTags, "master") { + if !stringslice.Contains(nodes[0].ServiceTags, "primary") { t.Fatalf("bad: %v", nodes) } if nodes[0].ServicePort != 8000 { @@ -1960,7 +1984,7 @@ t.Fatalf("bad") } - // But removing a node with the "db:master" service should fire the watch. + // But removing a node with the "db:primary" service should fire the watch. if err := s.DeleteNode(21, "foo"); err != nil { t.Fatalf("err: %s", err) } @@ -1980,25 +2004,25 @@ t.Fatalf("err: %v", err) } - if err := s.EnsureService(17, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"master", "v2"}, Address: "", Port: 8000}); err != nil { + if err := s.EnsureService(17, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"primary", "v2"}, Address: "", Port: 8000}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(18, "foo", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"slave", "v2", "dev"}, Address: "", Port: 8001}); err != nil { + if err := s.EnsureService(18, "foo", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica", "v2", "dev"}, Address: "", Port: 8001}); err != nil { t.Fatalf("err: %v", err) } - if err := s.EnsureService(19, "bar", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"slave", "v2"}, Address: "", Port: 8000}); err != nil { + if err := s.EnsureService(19, "bar", &structs.NodeService{ID: "db", Service: "db", Tags: []string{"replica", "v2"}, Address: "", Port: 8000}); err != nil { t.Fatalf("err: %v", err) } - idx, nodes, err := s.ServiceTagNodes(nil, "db", []string{"master"}, nil) + idx, nodes, err := s.ServiceTagNodes(nil, "db", []string{"primary"}, nil) require.NoError(t, err) require.Equal(t, int(idx), 19) require.Len(t, nodes, 1) require.Equal(t, nodes[0].Node, "foo") require.Equal(t, nodes[0].Address, "127.0.0.1") - require.Contains(t, nodes[0].ServiceTags, "master") + require.Contains(t, nodes[0].ServiceTags, "primary") require.Equal(t, nodes[0].ServicePort, 8000) idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2"}, nil) @@ -2007,14 +2031,14 @@ require.Len(t, nodes, 3) // Test filtering on multiple tags - idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2", "slave"}, nil) + idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2", "replica"}, nil) require.NoError(t, err) require.Equal(t, int(idx), 19) require.Len(t, nodes, 2) require.Contains(t, nodes[0].ServiceTags, "v2") - require.Contains(t, nodes[0].ServiceTags, "slave") + require.Contains(t, nodes[0].ServiceTags, "replica") require.Contains(t, nodes[1].ServiceTags, "v2") - require.Contains(t, nodes[1].ServiceTags, "slave") + require.Contains(t, nodes[1].ServiceTags, "replica") idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"dev"}, nil) require.NoError(t, err) @@ -2037,6 +2061,7 @@ // Delete the service. ws := memdb.NewWatchSet() _, _, err := s.NodeServices(ws, "node1", nil) + require.NoError(t, err) if err := s.DeleteService(4, "node1", "service1", nil); err != nil { t.Fatalf("err: %s", err) } @@ -2100,14 +2125,14 @@ assert.Nil(s.EnsureService(14, "foo", &structs.NodeService{Kind: structs.ServiceKindConnectProxy, ID: "proxy", Service: "proxy", Proxy: structs.ConnectProxyConfig{DestinationServiceName: "db"}, Port: 8000})) assert.Nil(s.EnsureService(15, "bar", &structs.NodeService{Kind: structs.ServiceKindConnectProxy, ID: "proxy", Service: "proxy", Proxy: structs.ConnectProxyConfig{DestinationServiceName: "db"}, Port: 8000})) assert.Nil(s.EnsureService(16, "bar", &structs.NodeService{ID: "native-db", Service: "db", Connect: structs.ServiceConnect{Native: true}})) - assert.Nil(s.EnsureService(17, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"slave"}, Address: "", Port: 8001})) + assert.Nil(s.EnsureService(17, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8001})) assert.True(watchFired(ws)) // Read everything back. ws = memdb.NewWatchSet() idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(err) - assert.Equal(idx, uint64(idx)) + assert.Equal(idx, uint64(17)) assert.Len(nodes, 3) for _, n := range nodes { @@ -2126,6 +2151,114 @@ assert.True(watchFired(ws)) } +func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) { + assert := assert.New(t) + s := testStateStore(t) + + // Listing with no results returns an empty list. + ws := memdb.NewWatchSet() + idx, nodes, err := s.ConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(0)) + assert.Len(nodes, 0) + + // Create some nodes and services. + assert.Nil(s.EnsureNode(10, &structs.Node{Node: "foo", Address: "127.0.0.1"})) + assert.Nil(s.EnsureNode(11, &structs.Node{Node: "bar", Address: "127.0.0.2"})) + + // Typical services + assert.Nil(s.EnsureService(12, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: nil, Address: "", Port: 5000})) + assert.Nil(s.EnsureService(13, "bar", &structs.NodeService{ID: "api", Service: "api", Tags: nil, Address: "", Port: 5000})) + assert.Nil(s.EnsureService(14, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8001})) + assert.False(watchFired(ws)) + + // Register a sidecar for db + assert.Nil(s.EnsureService(15, "foo", &structs.NodeService{Kind: structs.ServiceKindConnectProxy, ID: "proxy", Service: "proxy", Proxy: structs.ConnectProxyConfig{DestinationServiceName: "db"}, Port: 8000})) + assert.True(watchFired(ws)) + + // Reset WatchSet to ensure watch fires when associating db with gateway + ws = memdb.NewWatchSet() + _, _, err = s.ConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + + // Associate gateway with db + assert.Nil(s.EnsureService(16, "bar", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "gateway", Service: "gateway", Port: 443})) + assert.Nil(s.EnsureConfigEntry(17, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "db", + }, + }, + }, nil)) + assert.True(watchFired(ws)) + + // Read everything back. + ws = memdb.NewWatchSet() + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(17)) + assert.Len(nodes, 2) + + // Check sidecar + assert.Equal(structs.ServiceKindConnectProxy, nodes[0].ServiceKind) + assert.Equal("foo", nodes[0].Node) + assert.Equal("proxy", nodes[0].ServiceName) + assert.Equal("proxy", nodes[0].ServiceID) + assert.Equal("db", nodes[0].ServiceProxy.DestinationServiceName) + assert.Equal(8000, nodes[0].ServicePort) + + // Check gateway + assert.Equal(structs.ServiceKindTerminatingGateway, nodes[1].ServiceKind) + assert.Equal("bar", nodes[1].Node) + assert.Equal("gateway", nodes[1].ServiceName) + assert.Equal("gateway", nodes[1].ServiceID) + assert.Equal(443, nodes[1].ServicePort) + + // Watch should fire when another gateway instance is registered + assert.Nil(s.EnsureService(18, "foo", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "gateway-2", Service: "gateway", Port: 443})) + assert.True(watchFired(ws)) + + // Reset WatchSet to ensure watch fires when deregistering gateway + ws = memdb.NewWatchSet() + _, _, err = s.ConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + + // Watch should fire when a gateway instance is deregistered + assert.Nil(s.DeleteService(19, "bar", "gateway", nil)) + assert.True(watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(19)) + assert.Len(nodes, 2) + + // Check the new gateway + assert.Equal(structs.ServiceKindTerminatingGateway, nodes[1].ServiceKind) + assert.Equal("foo", nodes[1].Node) + assert.Equal("gateway", nodes[1].ServiceName) + assert.Equal("gateway-2", nodes[1].ServiceID) + assert.Equal(443, nodes[1].ServicePort) + + // Index should not slide back after deleting all instances of the gateway + assert.Nil(s.DeleteService(20, "foo", "gateway-2", nil)) + assert.True(watchFired(ws)) + + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(20)) + assert.Len(nodes, 1) + + // Ensure that remaining node is the proxy and not a gateway + assert.Equal(structs.ServiceKindConnectProxy, nodes[0].ServiceKind) + assert.Equal("foo", nodes[0].Node) + assert.Equal("proxy", nodes[0].ServiceName) + assert.Equal("proxy", nodes[0].ServiceID) + assert.Equal(8000, nodes[0].ServicePort) +} + func TestStateStore_Service_Snapshot(t *testing.T) { s := testStateStore(t) @@ -2525,7 +2658,8 @@ } // Overwhelm the node tracking. - for i := 0; i < 2*watchLimit; i++ { + patchWatchLimit(t, 10) + for i := 0; i < watchLimit+2; i++ { node := fmt.Sprintf("many%d", idx) testRegisterNodeWithMeta(t, s, idx, node, map[string]string{"common": "1"}) idx++ @@ -2705,7 +2839,8 @@ } // Overwhelm the node tracking. - for i := 0; i < 2*watchLimit; i++ { + patchWatchLimit(t, 10) + for i := 0; i < watchLimit+2; i++ { node := fmt.Sprintf("many%d", idx) testRegisterNodeWithMeta(t, s, idx, node, map[string]string{"common": "1"}) idx++ @@ -2933,16 +3068,16 @@ setupFn: nil, svc: "test", wantBeforeResLen: 0, - // Only the connect index iterator is watched - wantBeforeWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantBeforeWatchSetSize: 2, updateFn: func(s *Store) { testRegisterService(t, s, 4, "node1", "test") }, shouldFire: false, wantAfterIndex: 4, // No results falls back to global service index wantAfterResLen: 0, - // Only the connect index iterator is watched - wantAfterWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantAfterWatchSetSize: 2, }, { name: "not affected by non-connect-enabled target service de-registration", @@ -2951,8 +3086,8 @@ }, svc: "test", wantBeforeResLen: 0, - // Only the connect index iterator is watched - wantBeforeWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantBeforeWatchSetSize: 2, updateFn: func(s *Store) { require.NoError(t, s.DeleteService(5, "node1", "test", nil)) }, @@ -2963,25 +3098,25 @@ shouldFire: false, wantAfterIndex: 5, // No results falls back to global service index wantAfterResLen: 0, - // Only the connect index iterator is watched - wantAfterWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantAfterWatchSetSize: 2, }, { name: "unblocks on first connect-native service registration", setupFn: nil, svc: "test", wantBeforeResLen: 0, - // Only the connect index iterator is watched - wantBeforeWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantBeforeWatchSetSize: 2, updateFn: func(s *Store) { testRegisterConnectNativeService(t, s, 4, "node1", "test") }, shouldFire: true, wantAfterIndex: 4, wantAfterResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on subsequent connect-native service registration", @@ -2990,18 +3125,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterConnectNativeService(t, s, 5, "node2", "test") }, shouldFire: true, wantAfterIndex: 5, wantAfterResLen: 2, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on connect-native service de-registration", @@ -3011,18 +3146,18 @@ }, svc: "test", wantBeforeResLen: 2, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { require.NoError(t, s.DeleteService(6, "node2", "test", nil)) }, shouldFire: true, wantAfterIndex: 6, wantAfterResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on last connect-native service de-registration", @@ -3031,34 +3166,34 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { require.NoError(t, s.DeleteService(6, "node1", "test", nil)) }, shouldFire: true, wantAfterIndex: 6, wantAfterResLen: 0, - // Only the connect index iterator is watched - wantAfterWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantAfterWatchSetSize: 2, }, { name: "unblocks on first proxy service registration", setupFn: nil, svc: "test", wantBeforeResLen: 0, - // Only the connect index iterator is watched - wantBeforeWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantBeforeWatchSetSize: 2, updateFn: func(s *Store) { testRegisterSidecarProxy(t, s, 4, "node1", "test") }, shouldFire: true, wantAfterIndex: 4, wantAfterResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on subsequent proxy service registration", @@ -3067,18 +3202,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterSidecarProxy(t, s, 5, "node2", "test") }, shouldFire: true, wantAfterIndex: 5, wantAfterResLen: 2, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on proxy service de-registration", @@ -3088,18 +3223,18 @@ }, svc: "test", wantBeforeResLen: 2, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { require.NoError(t, s.DeleteService(6, "node2", "test-sidecar-proxy", nil)) }, shouldFire: true, wantAfterIndex: 6, wantAfterResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on last proxy service de-registration", @@ -3108,17 +3243,17 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { require.NoError(t, s.DeleteService(6, "node1", "test-sidecar-proxy", nil)) }, shouldFire: true, wantAfterIndex: 6, wantAfterResLen: 0, - // Only the connect index iterator is watched - wantAfterWatchSetSize: 1, + // The connect index and gateway-services iterators are watched + wantAfterWatchSetSize: 2, }, { name: "unblocks on connect-native service health check change", @@ -3128,18 +3263,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterCheck(t, s, 7, "node1", "test", "check1", "critical") }, shouldFire: true, wantAfterIndex: 7, wantAfterResLen: 1, // critical filtering doesn't happen in the state store method. - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on proxy service health check change", @@ -3149,18 +3284,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterCheck(t, s, 7, "node1", "test-sidecar-proxy", "check1", "critical") }, shouldFire: true, wantAfterIndex: 7, wantAfterResLen: 1, // critical filtering doesn't happen in the state store method. - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on connect-native node health check change", @@ -3170,18 +3305,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterCheck(t, s, 7, "node1", "", "check1", "critical") }, shouldFire: true, wantAfterIndex: 7, wantAfterResLen: 1, // critical filtering doesn't happen in the state store method. - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { name: "unblocks on proxy service health check change", @@ -3191,18 +3326,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterCheck(t, s, 7, "node1", "", "check1", "critical") }, shouldFire: true, wantAfterIndex: 7, wantAfterResLen: 1, // critical filtering doesn't happen in the state store method. - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { // See https://github.com/hashicorp/consul/issues/5506. The issue is cause @@ -3221,18 +3356,18 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { testRegisterCheck(t, s, 7, "node1", "test-sidecar-proxy", "check1", "critical") }, shouldFire: true, wantAfterIndex: 7, wantAfterResLen: 1, // critical filtering doesn't happen in the state store method. - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantAfterWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 3, }, { // See https://github.com/hashicorp/consul/issues/5506. This is the edge @@ -3243,9 +3378,9 @@ }, svc: "test", wantBeforeResLen: 1, - // Should take the optimized path where we only watch the service index - // and the connect index iterator. - wantBeforeWatchSetSize: 2, + // Should take the optimized path where we only watch the service index, + // connect index iterator, and gateway-services iterator. + wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { // Register a new result with a different service name could be another // proxy with a different name, but a native instance works too. @@ -3254,9 +3389,9 @@ shouldFire: true, wantAfterIndex: 5, wantAfterResLen: 2, - // Should take the optimized path where we only watch the teo service - // indexes and the connect index iterator. - wantAfterWatchSetSize: 3, + // Should take the optimized path where we only watch the service indexes, + // connect index iterator, and gateway-services iterator. + wantAfterWatchSetSize: 4, }, } @@ -3278,7 +3413,7 @@ // Run the query ws := memdb.NewWatchSet() - idx, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil) + _, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil) require.NoError(err) require.Len(res, tt.wantBeforeResLen) require.Len(ws, tt.wantBeforeWatchSetSize) @@ -3297,7 +3432,7 @@ // Re-query the same result. Should return the desired index and len ws = memdb.NewWatchSet() - idx, res, err = s.CheckConnectServiceNodes(ws, tt.svc, nil) + idx, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil) require.NoError(err) require.Len(res, tt.wantAfterResLen) require.Equal(tt.wantAfterIndex, idx) @@ -3370,7 +3505,7 @@ t.Fatalf("bad") } ws = memdb.NewWatchSet() - idx, results, err = s.CheckServiceNodes(ws, "service1", nil) + idx, _, err = s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3386,7 +3521,7 @@ t.Fatalf("bad") } ws = memdb.NewWatchSet() - idx, results, err = s.CheckServiceNodes(ws, "service1", nil) + idx, _, err = s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3400,7 +3535,7 @@ t.Fatalf("bad") } ws = memdb.NewWatchSet() - idx, results, err = s.CheckServiceNodes(ws, "service1", nil) + idx, _, err = s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3440,7 +3575,7 @@ assert.Nil(s.EnsureService(13, "bar", &structs.NodeService{ID: "api", Service: "api", Tags: nil, Address: "", Port: 5000})) assert.Nil(s.EnsureService(14, "foo", &structs.NodeService{Kind: structs.ServiceKindConnectProxy, ID: "proxy", Service: "proxy", Proxy: structs.ConnectProxyConfig{DestinationServiceName: "db"}, Port: 8000})) assert.Nil(s.EnsureService(15, "bar", &structs.NodeService{Kind: structs.ServiceKindConnectProxy, ID: "proxy", Service: "proxy", Proxy: structs.ConnectProxyConfig{DestinationServiceName: "db"}, Port: 8000})) - assert.Nil(s.EnsureService(16, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"slave"}, Address: "", Port: 8001})) + assert.Nil(s.EnsureService(16, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8001})) assert.True(watchFired(ws)) // Register node checks @@ -3455,7 +3590,7 @@ ws = memdb.NewWatchSet() idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(err) - assert.Equal(idx, uint64(idx)) + assert.Equal(idx, uint64(20)) assert.Len(nodes, 2) for _, n := range nodes { @@ -3464,65 +3599,188 @@ } } -func BenchmarkCheckServiceNodes(b *testing.B) { - s, err := NewStateStore(nil) - if err != nil { - b.Fatalf("err: %s", err) - } - - if err := s.EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}); err != nil { - b.Fatalf("err: %v", err) - } - if err := s.EnsureService(2, "foo", &structs.NodeService{ID: "db1", Service: "db", Tags: []string{"master"}, Address: "", Port: 8000}); err != nil { - b.Fatalf("err: %v", err) - } - check := &structs.HealthCheck{ - Node: "foo", - CheckID: "db", - Name: "can connect", - Status: api.HealthPassing, - ServiceID: "db1", - } - if err := s.EnsureCheck(3, check); err != nil { - b.Fatalf("err: %v", err) - } - check = &structs.HealthCheck{ - Node: "foo", - CheckID: "check1", - Name: "check1", - Status: api.HealthPassing, - } - if err := s.EnsureCheck(4, check); err != nil { - b.Fatalf("err: %v", err) - } +func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) { + assert := assert.New(t) + s := testStateStore(t) + // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - for i := 0; i < b.N; i++ { - s.CheckServiceNodes(ws, "db", nil) - } -} + idx, nodes, err := s.CheckConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(0)) + assert.Len(nodes, 0) -func TestStateStore_CheckServiceTagNodes(t *testing.T) { - s := testStateStore(t) + // Create some nodes and services. + assert.Nil(s.EnsureNode(10, &structs.Node{Node: "foo", Address: "127.0.0.1"})) + assert.Nil(s.EnsureNode(11, &structs.Node{Node: "bar", Address: "127.0.0.2"})) - if err := s.EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}); err != nil { - t.Fatalf("err: %v", err) - } - if err := s.EnsureService(2, "foo", &structs.NodeService{ID: "db1", Service: "db", Tags: []string{"master"}, Address: "", Port: 8000}); err != nil { - t.Fatalf("err: %v", err) - } - check := &structs.HealthCheck{ - Node: "foo", - CheckID: "db", - Name: "can connect", - Status: api.HealthPassing, - ServiceID: "db1", - } - if err := s.EnsureCheck(3, check); err != nil { - t.Fatalf("err: %v", err) - } - check = &structs.HealthCheck{ - Node: "foo", + // Typical services + assert.Nil(s.EnsureService(12, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: nil, Address: "", Port: 5000})) + assert.Nil(s.EnsureService(13, "bar", &structs.NodeService{ID: "api", Service: "api", Tags: nil, Address: "", Port: 5000})) + assert.Nil(s.EnsureService(14, "bar", &structs.NodeService{ID: "db2", Service: "db", Tags: []string{"replica"}, Address: "", Port: 8001})) + assert.False(watchFired(ws)) + + // Register node and service checks + testRegisterCheck(t, s, 15, "foo", "", "check1", api.HealthPassing) + testRegisterCheck(t, s, 16, "bar", "", "check2", api.HealthPassing) + testRegisterCheck(t, s, 17, "foo", "db", "check3", api.HealthPassing) + assert.False(watchFired(ws)) + + // Watch should fire when a gateway is associated with the service, even if the gateway doesn't exist yet + assert.Nil(s.EnsureConfigEntry(18, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "db", + }, + }, + }, nil)) + assert.True(watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(18)) + assert.Len(nodes, 0) + + // Watch should fire when a gateway is added + assert.Nil(s.EnsureService(19, "bar", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "gateway", Service: "gateway", Port: 443})) + assert.True(watchFired(ws)) + + // Watch should fire when a check is added to the gateway + testRegisterCheck(t, s, 20, "bar", "gateway", "check4", api.HealthPassing) + assert.True(watchFired(ws)) + + // Watch should fire when a different connect service is registered for db + assert.Nil(s.EnsureService(21, "foo", &structs.NodeService{Kind: structs.ServiceKindConnectProxy, ID: "proxy", Service: "proxy", Proxy: structs.ConnectProxyConfig{DestinationServiceName: "db"}, Port: 8000})) + assert.True(watchFired(ws)) + + // Read everything back. + ws = memdb.NewWatchSet() + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(21)) + assert.Len(nodes, 2) + + // Check sidecar + assert.Equal(structs.ServiceKindConnectProxy, nodes[0].Service.Kind) + assert.Equal("foo", nodes[0].Node.Node) + assert.Equal("proxy", nodes[0].Service.Service) + assert.Equal("proxy", nodes[0].Service.ID) + assert.Equal("db", nodes[0].Service.Proxy.DestinationServiceName) + assert.Equal(8000, nodes[0].Service.Port) + + // Check gateway + assert.Equal(structs.ServiceKindTerminatingGateway, nodes[1].Service.Kind) + assert.Equal("bar", nodes[1].Node.Node) + assert.Equal("gateway", nodes[1].Service.Service) + assert.Equal("gateway", nodes[1].Service.ID) + assert.Equal(443, nodes[1].Service.Port) + + // Watch should fire when another gateway instance is registered + assert.Nil(s.EnsureService(22, "foo", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "gateway-2", Service: "gateway", Port: 443})) + assert.True(watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(22)) + assert.Len(nodes, 3) + + // Watch should fire when a gateway instance is deregistered + assert.Nil(s.DeleteService(23, "bar", "gateway", nil)) + assert.True(watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(23)) + assert.Len(nodes, 2) + + // Check new gateway + assert.Equal(structs.ServiceKindTerminatingGateway, nodes[1].Service.Kind) + assert.Equal("foo", nodes[1].Node.Node) + assert.Equal("gateway", nodes[1].Service.Service) + assert.Equal("gateway-2", nodes[1].Service.ID) + assert.Equal(443, nodes[1].Service.Port) + + // Index should not slide back after deleting all instances of the gateway + assert.Nil(s.DeleteService(24, "foo", "gateway-2", nil)) + assert.True(watchFired(ws)) + + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) + assert.Nil(err) + assert.Equal(idx, uint64(24)) + assert.Len(nodes, 1) + + // Ensure that remaining node is the proxy and not a gateway + assert.Equal(structs.ServiceKindConnectProxy, nodes[0].Service.Kind) + assert.Equal("foo", nodes[0].Node.Node) + assert.Equal("proxy", nodes[0].Service.Service) + assert.Equal("proxy", nodes[0].Service.ID) + assert.Equal(8000, nodes[0].Service.Port) +} + +func BenchmarkCheckServiceNodes(b *testing.B) { + s, err := NewStateStore(nil) + if err != nil { + b.Fatalf("err: %s", err) + } + + if err := s.EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}); err != nil { + b.Fatalf("err: %v", err) + } + if err := s.EnsureService(2, "foo", &structs.NodeService{ID: "db1", Service: "db", Tags: []string{"primary"}, Address: "", Port: 8000}); err != nil { + b.Fatalf("err: %v", err) + } + check := &structs.HealthCheck{ + Node: "foo", + CheckID: "db", + Name: "can connect", + Status: api.HealthPassing, + ServiceID: "db1", + } + if err := s.EnsureCheck(3, check); err != nil { + b.Fatalf("err: %v", err) + } + check = &structs.HealthCheck{ + Node: "foo", + CheckID: "check1", + Name: "check1", + Status: api.HealthPassing, + } + if err := s.EnsureCheck(4, check); err != nil { + b.Fatalf("err: %v", err) + } + + ws := memdb.NewWatchSet() + for i := 0; i < b.N; i++ { + s.CheckServiceNodes(ws, "db", nil) + } +} + +func TestStateStore_CheckServiceTagNodes(t *testing.T) { + s := testStateStore(t) + + if err := s.EnsureNode(1, &structs.Node{Node: "foo", Address: "127.0.0.1"}); err != nil { + t.Fatalf("err: %v", err) + } + if err := s.EnsureService(2, "foo", &structs.NodeService{ID: "db1", Service: "db", Tags: []string{"primary"}, Address: "", Port: 8000}); err != nil { + t.Fatalf("err: %v", err) + } + check := &structs.HealthCheck{ + Node: "foo", + CheckID: "db", + Name: "can connect", + Status: api.HealthPassing, + ServiceID: "db1", + } + if err := s.EnsureCheck(3, check); err != nil { + t.Fatalf("err: %v", err) + } + check = &structs.HealthCheck{ + Node: "foo", CheckID: "check1", Name: "another check", Status: api.HealthPassing, @@ -3532,7 +3790,7 @@ } ws := memdb.NewWatchSet() - idx, nodes, err := s.CheckServiceTagNodes(ws, "db", []string{"master"}, nil) + idx, nodes, err := s.CheckServiceTagNodes(ws, "db", []string{"primary"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4165,9 +4423,8 @@ // attempt to update with a 0 index tx := s.db.Txn(true) - update, err := s.ensureServiceCASTxn(tx, 3, "node1", &ns) - require.False(t, update) - require.NoError(t, err) + err := s.ensureServiceCASTxn(tx, 3, "node1", &ns) + require.Equal(t, err, errCASCompareFailed) tx.Commit() // ensure no update happened @@ -4181,9 +4438,8 @@ ns.ModifyIndex = 99 // attempt to update with a non-matching index tx = s.db.Txn(true) - update, err = s.ensureServiceCASTxn(tx, 4, "node1", &ns) - require.False(t, update) - require.NoError(t, err) + err = s.ensureServiceCASTxn(tx, 4, "node1", &ns) + require.Equal(t, err, errCASCompareFailed) tx.Commit() // ensure no update happened @@ -4197,8 +4453,7 @@ ns.ModifyIndex = 2 // update with the matching modify index tx = s.db.Txn(true) - update, err = s.ensureServiceCASTxn(tx, 7, "node1", &ns) - require.True(t, update) + err = s.ensureServiceCASTxn(tx, 7, "node1", &ns) require.NoError(t, err) tx.Commit() @@ -4210,3 +4465,1253 @@ require.Equal(t, uint64(7), nsRead.ModifyIndex) tx.Commit() } + +func TestStateStore_GatewayServices_Terminating(t *testing.T) { + s := testStateStore(t) + + // Listing with no results returns an empty list. + ws := memdb.NewWatchSet() + idx, nodes, err := s.GatewayServices(ws, "db", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(0)) + assert.Len(t, nodes, 0) + + // Create some nodes + assert.Nil(t, s.EnsureNode(10, &structs.Node{Node: "foo", Address: "127.0.0.1"})) + assert.Nil(t, s.EnsureNode(11, &structs.Node{Node: "bar", Address: "127.0.0.2"})) + assert.Nil(t, s.EnsureNode(12, &structs.Node{Node: "baz", Address: "127.0.0.2"})) + + // Typical services and some consul services spread across two nodes + assert.Nil(t, s.EnsureService(13, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: nil, Address: "", Port: 5000})) + assert.Nil(t, s.EnsureService(15, "bar", &structs.NodeService{ID: "api", Service: "api", Tags: nil, Address: "", Port: 5000})) + assert.Nil(t, s.EnsureService(16, "bar", &structs.NodeService{ID: "consul", Service: "consul", Tags: nil})) + assert.Nil(t, s.EnsureService(17, "bar", &structs.NodeService{ID: "consul", Service: "consul", Tags: nil})) + + // Add ingress gateway and a connect proxy, neither should get picked up by terminating gateway + ingressNS := &structs.NodeService{ + Kind: structs.ServiceKindIngressGateway, + ID: "ingress", + Service: "ingress", + Port: 8443, + } + assert.Nil(t, s.EnsureService(18, "baz", ingressNS)) + + proxyNS := &structs.NodeService{ + Kind: structs.ServiceKindConnectProxy, + ID: "db proxy", + Service: "db proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "db", + }, + Port: 8000, + } + assert.Nil(t, s.EnsureService(19, "foo", proxyNS)) + + // Register a gateway + assert.Nil(t, s.EnsureService(20, "baz", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "gateway", Service: "gateway", Port: 443})) + + // Associate gateway with db and api + assert.Nil(t, s.EnsureConfigEntry(21, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "db", + }, + { + Name: "api", + }, + }, + }, nil)) + assert.True(t, watchFired(ws)) + + // Read everything back. + ws = memdb.NewWatchSet() + idx, out, err := s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(21)) + assert.Len(t, out, 2) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 21, + ModifyIndex: 21, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 21, + ModifyIndex: 21, + }, + }, + } + assert.Equal(t, expect, out) + + // Check that we don't update on same exact config + assert.Nil(t, s.EnsureConfigEntry(21, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "db", + }, + { + Name: "api", + }, + }, + }, nil)) + assert.False(t, watchFired(ws)) + + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(21)) + assert.Len(t, out, 2) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 21, + ModifyIndex: 21, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 21, + ModifyIndex: 21, + }, + }, + } + assert.Equal(t, expect, out) + + // Associate gateway with a wildcard and add TLS config + assert.Nil(t, s.EnsureConfigEntry(22, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "api", + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Name: "db", + }, + { + Name: "*", + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + }, + }, + }, nil)) + assert.True(t, watchFired(ws)) + + // Read everything back. + ws = memdb.NewWatchSet() + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(22)) + assert.Len(t, out, 2) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + RaftIndex: structs.RaftIndex{ + CreateIndex: 22, + ModifyIndex: 22, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 22, + ModifyIndex: 22, + }, + }, + } + assert.Equal(t, expect, out) + + // Add a service covered by wildcard + assert.Nil(t, s.EnsureService(23, "bar", &structs.NodeService{ID: "redis", Service: "redis", Tags: nil, Address: "", Port: 6379})) + assert.True(t, watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(23)) + assert.Len(t, out, 3) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + RaftIndex: structs.RaftIndex{ + CreateIndex: 22, + ModifyIndex: 22, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 22, + ModifyIndex: 22, + }, + }, + { + Service: structs.NewServiceName("redis", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 23, + ModifyIndex: 23, + }, + }, + } + assert.Equal(t, expect, out) + + // Delete a service covered by wildcard + assert.Nil(t, s.DeleteService(24, "bar", "redis", nil)) + assert.True(t, watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(24)) + assert.Len(t, out, 2) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + RaftIndex: structs.RaftIndex{ + CreateIndex: 22, + ModifyIndex: 22, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 22, + ModifyIndex: 22, + }, + }, + } + assert.Equal(t, expect, out) + + // Update the entry that only leaves one service + assert.Nil(t, s.EnsureConfigEntry(25, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "db", + }, + }, + }, nil)) + assert.True(t, watchFired(ws)) + + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(25)) + assert.Len(t, out, 1) + + // previously associated services should not be present + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + RaftIndex: structs.RaftIndex{ + CreateIndex: 25, + ModifyIndex: 25, + }, + }, + } + assert.Equal(t, expect, out) + + // Attempt to associate a different gateway with services that include db + assert.Nil(t, s.EnsureConfigEntry(26, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway2", + Services: []structs.LinkedService{ + { + Name: "*", + }, + }, + }, nil)) + + ws = memdb.NewWatchSet() + idx, out, err = s.GatewayServices(ws, "gateway2", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(26)) + assert.Len(t, out, 2) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("gateway2", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 26, + ModifyIndex: 26, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway2", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 26, + ModifyIndex: 26, + }, + }, + } + assert.Equal(t, expect, out) + + // Deleting the config entry should remove existing mappings + assert.Nil(t, s.DeleteConfigEntry(27, "terminating-gateway", "gateway", nil)) + assert.True(t, watchFired(ws)) + + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(27)) + assert.Len(t, out, 0) +} + +func TestStateStore_GatewayServices_ServiceDeletion(t *testing.T) { + s := testStateStore(t) + + // Create some nodes + assert.Nil(t, s.EnsureNode(10, &structs.Node{Node: "foo", Address: "127.0.0.1"})) + assert.Nil(t, s.EnsureNode(11, &structs.Node{Node: "bar", Address: "127.0.0.2"})) + assert.Nil(t, s.EnsureNode(12, &structs.Node{Node: "baz", Address: "127.0.0.2"})) + + // Typical services and some consul services spread across two nodes + assert.Nil(t, s.EnsureService(13, "foo", &structs.NodeService{ID: "db", Service: "db", Tags: nil, Address: "", Port: 5000})) + assert.Nil(t, s.EnsureService(14, "foo", &structs.NodeService{ID: "api", Service: "api", Tags: nil, Address: "", Port: 5000})) + + // Register two gateways + assert.Nil(t, s.EnsureService(17, "bar", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "gateway", Service: "gateway", Port: 443})) + assert.Nil(t, s.EnsureService(18, "baz", &structs.NodeService{Kind: structs.ServiceKindTerminatingGateway, ID: "other-gateway", Service: "other-gateway", Port: 443})) + + // Listing with no results returns an empty list. + ws := memdb.NewWatchSet() + idx, nodes, err := s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(0)) + assert.Len(t, nodes, 0) + + // Associate the first gateway with db + assert.Nil(t, s.EnsureConfigEntry(19, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "gateway", + Services: []structs.LinkedService{ + { + Name: "db", + CAFile: "my_ca.pem", + }, + }, + }, nil)) + assert.True(t, watchFired(ws)) + + // Listing with no results returns an empty list. + otherWS := memdb.NewWatchSet() + idx, _, err = s.GatewayServices(otherWS, "other-gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(19)) + assert.Len(t, nodes, 0) + + // Associate the second gateway with wildcard + assert.Nil(t, s.EnsureConfigEntry(20, &structs.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "other-gateway", + Services: []structs.LinkedService{ + { + Name: "*", + }, + }, + }, nil)) + assert.True(t, watchFired(ws)) + + // Read everything back for first gateway. + ws = memdb.NewWatchSet() + idx, out, err := s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(20)) + assert.Len(t, out, 1) + + expect := structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "my_ca.pem", + RaftIndex: structs.RaftIndex{ + CreateIndex: 19, + ModifyIndex: 19, + }, + }, + } + assert.Equal(t, expect, out) + + // Read everything back for other gateway. + otherWS = memdb.NewWatchSet() + idx, out, err = s.GatewayServices(otherWS, "other-gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(20)) + assert.Len(t, out, 2) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("other-gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 20, + ModifyIndex: 20, + }, + }, + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("other-gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 20, + ModifyIndex: 20, + }, + }, + } + assert.Equal(t, expect, out) + + // Delete a service specified directly. + assert.Nil(t, s.DeleteService(20, "foo", "db", nil)) + + // Only the watch for other-gateway should fire, since its association to db came from a wildcard + assert.False(t, watchFired(ws)) + assert.True(t, watchFired(otherWS)) + + // db should remain in the original gateway + idx, out, err = s.GatewayServices(ws, "gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(20)) + assert.Len(t, out, 1) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + CAFile: "my_ca.pem", + RaftIndex: structs.RaftIndex{ + CreateIndex: 19, + ModifyIndex: 19, + }, + }, + } + assert.Equal(t, expect, out) + + // db should not have been deleted from the other gateway + idx, out, err = s.GatewayServices(ws, "other-gateway", nil) + assert.Nil(t, err) + assert.Equal(t, idx, uint64(20)) + assert.Len(t, out, 1) + + expect = structs.GatewayServices{ + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("other-gateway", nil), + GatewayKind: structs.ServiceKindTerminatingGateway, + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 20, + ModifyIndex: 20, + }, + }, + } + assert.Equal(t, expect, out) +} + +func TestStateStore_CheckIngressServiceNodes(t *testing.T) { + s := testStateStore(t) + ws := setupIngressState(t, s) + require := require.New(t) + + t.Run("check service1 ingress gateway", func(t *testing.T) { + idx, results, err := s.CheckIngressServiceNodes(ws, "service1", nil) + require.NoError(err) + require.Equal(uint64(15), idx) + // Multiple instances of the ingress2 service + require.Len(results, 4) + + ids := make(map[string]struct{}) + for _, n := range results { + ids[n.Service.ID] = struct{}{} + } + expectedIds := map[string]struct{}{ + "ingress1": struct{}{}, + "ingress2": struct{}{}, + "wildcardIngress": struct{}{}, + } + require.Equal(expectedIds, ids) + }) + + t.Run("check service2 ingress gateway", func(t *testing.T) { + idx, results, err := s.CheckIngressServiceNodes(ws, "service2", nil) + require.NoError(err) + require.Equal(uint64(15), idx) + require.Len(results, 2) + + ids := make(map[string]struct{}) + for _, n := range results { + ids[n.Service.ID] = struct{}{} + } + expectedIds := map[string]struct{}{ + "ingress1": struct{}{}, + "wildcardIngress": struct{}{}, + } + require.Equal(expectedIds, ids) + }) + + t.Run("check service3 ingress gateway", func(t *testing.T) { + ws := memdb.NewWatchSet() + idx, results, err := s.CheckIngressServiceNodes(ws, "service3", nil) + require.NoError(err) + require.Equal(uint64(15), idx) + require.Len(results, 1) + require.Equal("wildcardIngress", results[0].Service.ID) + }) + + t.Run("delete a wildcard entry", func(t *testing.T) { + require.Nil(s.DeleteConfigEntry(19, "ingress-gateway", "wildcardIngress", nil)) + require.True(watchFired(ws)) + + idx, results, err := s.CheckIngressServiceNodes(ws, "service1", nil) + require.NoError(err) + require.Equal(uint64(15), idx) + require.Len(results, 3) + + idx, results, err = s.CheckIngressServiceNodes(ws, "service2", nil) + require.NoError(err) + require.Equal(uint64(15), idx) + require.Len(results, 1) + + idx, results, err = s.CheckIngressServiceNodes(ws, "service3", nil) + require.NoError(err) + require.Equal(uint64(15), idx) + // TODO(ingress): index goes backward when deleting last config entry + // require.Equal(uint64(11), idx) + require.Len(results, 0) + }) +} + +func TestStateStore_GatewayServices_Ingress(t *testing.T) { + s := testStateStore(t) + ws := setupIngressState(t, s) + + t.Run("ingress1 gateway services", func(t *testing.T) { + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 1111, + Protocol: "http", + Hosts: []string{"test.example.com"}, + RaftIndex: structs.RaftIndex{ + CreateIndex: 13, + ModifyIndex: 13, + }, + }, + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service2", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 2222, + Protocol: "http", + RaftIndex: structs.RaftIndex{ + CreateIndex: 13, + ModifyIndex: 13, + }, + }, + } + idx, results, err := s.GatewayServices(ws, "ingress1", nil) + require.NoError(t, err) + require.Equal(t, uint64(16), idx) + require.ElementsMatch(t, results, expected) + }) + + t.Run("ingress2 gateway services", func(t *testing.T) { + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress2", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 3333, + Protocol: "http", + RaftIndex: structs.RaftIndex{ + CreateIndex: 14, + ModifyIndex: 14, + }, + }, + } + idx, results, err := s.GatewayServices(ws, "ingress2", nil) + require.NoError(t, err) + require.Equal(t, uint64(16), idx) + require.ElementsMatch(t, results, expected) + }) + + t.Run("No gatway services associated", func(t *testing.T) { + idx, results, err := s.GatewayServices(ws, "nothingIngress", nil) + require.NoError(t, err) + require.Equal(t, uint64(16), idx) + require.Len(t, results, 0) + }) + + t.Run("wildcard gateway services", func(t *testing.T) { + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("wildcardIngress", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 12, + ModifyIndex: 12, + }, + }, + { + Gateway: structs.NewServiceName("wildcardIngress", nil), + Service: structs.NewServiceName("service2", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 12, + ModifyIndex: 12, + }, + }, + { + Gateway: structs.NewServiceName("wildcardIngress", nil), + Service: structs.NewServiceName("service3", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 12, + ModifyIndex: 12, + }, + }, + } + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(t, err) + require.Equal(t, uint64(16), idx) + require.ElementsMatch(t, results, expected) + }) + + t.Run("gateway with duplicate service", func(t *testing.T) { + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress3", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 5555, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 15, + ModifyIndex: 15, + }, + }, + { + Gateway: structs.NewServiceName("ingress3", nil), + Service: structs.NewServiceName("service2", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 5555, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 15, + ModifyIndex: 15, + }, + }, + { + Gateway: structs.NewServiceName("ingress3", nil), + Service: structs.NewServiceName("service3", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 5555, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 15, + ModifyIndex: 15, + }, + }, + { + Gateway: structs.NewServiceName("ingress3", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 6666, + Protocol: "http", + RaftIndex: structs.RaftIndex{ + CreateIndex: 15, + ModifyIndex: 15, + }, + }, + } + idx, results, err := s.GatewayServices(ws, "ingress3", nil) + require.NoError(t, err) + require.Equal(t, uint64(16), idx) + require.ElementsMatch(t, results, expected) + }) + + t.Run("deregistering a service", func(t *testing.T) { + require.Nil(t, s.DeleteService(18, "node1", "service1", nil)) + require.True(t, watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(t, err) + require.Equal(t, uint64(18), idx) + require.Len(t, results, 2) + }) + + t.Run("check ingress2 gateway services again", func(t *testing.T) { + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress2", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 3333, + Protocol: "http", + RaftIndex: structs.RaftIndex{ + CreateIndex: 14, + ModifyIndex: 14, + }, + }, + } + ws = memdb.NewWatchSet() + idx, results, err := s.GatewayServices(ws, "ingress2", nil) + require.NoError(t, err) + require.Equal(t, uint64(18), idx) + require.ElementsMatch(t, results, expected) + }) + + t.Run("deleting a wildcard config entry", func(t *testing.T) { + ws = memdb.NewWatchSet() + _, _, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(t, err) + + require.Nil(t, s.DeleteConfigEntry(19, "ingress-gateway", "wildcardIngress", nil)) + require.True(t, watchFired(ws)) + + ws = memdb.NewWatchSet() + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(t, err) + require.Equal(t, uint64(19), idx) + require.Len(t, results, 0) + }) + + t.Run("update ingress1 with exact same config entry", func(t *testing.T) { + ingress1 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress1", + Listeners: []structs.IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "service1", + Hosts: []string{"test.example.com"}, + }, + }, + }, + { + Port: 2222, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "service2", + }, + }, + }, + }, + } + + ws = memdb.NewWatchSet() + _, _, err := s.GatewayServices(ws, "ingress1", nil) + require.NoError(t, err) + + require.Nil(t, s.EnsureConfigEntry(20, ingress1, nil)) + require.False(t, watchFired(ws)) + + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 1111, + Protocol: "http", + Hosts: []string{"test.example.com"}, + RaftIndex: structs.RaftIndex{ + CreateIndex: 13, + ModifyIndex: 13, + }, + }, + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service2", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 2222, + Protocol: "http", + RaftIndex: structs.RaftIndex{ + CreateIndex: 13, + ModifyIndex: 13, + }, + }, + } + idx, results, err := s.GatewayServices(ws, "ingress1", nil) + require.NoError(t, err) + require.Equal(t, uint64(19), idx) + require.ElementsMatch(t, results, expected) + }) + + t.Run("updating a config entry with zero listeners", func(t *testing.T) { + ingress1 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress1", + Listeners: []structs.IngressListener{}, + } + + ws = memdb.NewWatchSet() + _, _, err := s.GatewayServices(ws, "ingress1", nil) + require.NoError(t, err) + + require.Nil(t, s.EnsureConfigEntry(20, ingress1, nil)) + require.True(t, watchFired(ws)) + + idx, results, err := s.GatewayServices(ws, "ingress1", nil) + require.NoError(t, err) + require.Equal(t, uint64(20), idx) + require.Len(t, results, 0) + }) +} + +func TestStateStore_GatewayServices_WildcardAssociation(t *testing.T) { + s := testStateStore(t) + setupIngressState(t, s) + require := require.New(t) + ws := memdb.NewWatchSet() + + t.Run("base case for wildcard", func(t *testing.T) { + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(err) + require.Equal(uint64(16), idx) + require.Len(results, 3) + }) + + t.Run("do not associate ingress services with gateway", func(t *testing.T) { + testRegisterIngressService(t, s, 17, "node1", "testIngress") + require.False(watchFired(ws)) + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(err) + require.Equal(uint64(16), idx) + require.Len(results, 3) + }) + + t.Run("do not associate terminating-gateway services with gateway", func(t *testing.T) { + require.Nil(s.EnsureService(18, "node1", + &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, ID: "gateway", Service: "gateway", Port: 443, + }, + )) + require.False(watchFired(ws)) + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(err) + require.Equal(uint64(16), idx) + require.Len(results, 3) + }) + + t.Run("do not associate connect-proxy services with gateway", func(t *testing.T) { + testRegisterSidecarProxy(t, s, 19, "node1", "web") + require.False(watchFired(ws)) + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(err) + require.Equal(uint64(16), idx) + require.Len(results, 3) + }) + + t.Run("do not associate consul services with gateway", func(t *testing.T) { + require.Nil(s.EnsureService(20, "node1", + &structs.NodeService{ID: "consul", Service: "consul", Tags: nil}, + )) + require.False(watchFired(ws)) + idx, results, err := s.GatewayServices(ws, "wildcardIngress", nil) + require.NoError(err) + require.Equal(uint64(16), idx) + require.Len(results, 3) + }) +} + +func TestStateStore_GatewayServices_IngressProtocolFiltering(t *testing.T) { + s := testStateStore(t) + + t.Run("setup", func(t *testing.T) { + ingress1 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress1", + Listeners: []structs.IngressListener{ + { + Port: 4444, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "*", + }, + }, + }, + }, + } + + testRegisterNode(t, s, 0, "node1") + testRegisterService(t, s, 1, "node1", "service1") + testRegisterService(t, s, 2, "node1", "service2") + assert.NoError(t, s.EnsureConfigEntry(4, ingress1, nil)) + }) + + t.Run("no services from default tcp protocol", func(t *testing.T) { + require := require.New(t) + idx, results, err := s.GatewayServices(nil, "ingress1", nil) + require.NoError(err) + require.Equal(uint64(4), idx) + require.Len(results, 0) + }) + + t.Run("service-defaults", func(t *testing.T) { + require := require.New(t) + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 4, + ModifyIndex: 4, + }, + }, + } + + svcDefaults := &structs.ServiceConfigEntry{ + Name: "service1", + Kind: structs.ServiceDefaults, + Protocol: "http", + } + assert.NoError(t, s.EnsureConfigEntry(5, svcDefaults, nil)) + idx, results, err := s.GatewayServices(nil, "ingress1", nil) + require.NoError(err) + require.Equal(uint64(5), idx) + require.ElementsMatch(results, expected) + }) + + t.Run("proxy-defaults", func(t *testing.T) { + require := require.New(t) + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 4, + ModifyIndex: 4, + }, + }, + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service2", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 4, + ModifyIndex: 4, + }, + }, + } + + proxyDefaults := &structs.ProxyConfigEntry{ + Name: structs.ProxyConfigGlobal, + Kind: structs.ProxyDefaults, + Config: map[string]interface{}{ + "protocol": "http", + }, + } + assert.NoError(t, s.EnsureConfigEntry(6, proxyDefaults, nil)) + + idx, results, err := s.GatewayServices(nil, "ingress1", nil) + require.NoError(err) + require.Equal(uint64(6), idx) + require.ElementsMatch(results, expected) + }) + + t.Run("service-defaults overrides proxy-defaults", func(t *testing.T) { + require := require.New(t) + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service2", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "http", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 4, + ModifyIndex: 4, + }, + }, + } + + svcDefaults := &structs.ServiceConfigEntry{ + Name: "service1", + Kind: structs.ServiceDefaults, + Protocol: "grpc", + } + assert.NoError(t, s.EnsureConfigEntry(7, svcDefaults, nil)) + + idx, results, err := s.GatewayServices(nil, "ingress1", nil) + require.NoError(err) + require.Equal(uint64(7), idx) + require.ElementsMatch(results, expected) + }) + + t.Run("change listener protocol and expect different filter", func(t *testing.T) { + require := require.New(t) + expected := structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress1", nil), + Service: structs.NewServiceName("service1", nil), + GatewayKind: structs.ServiceKindIngressGateway, + Port: 4444, + Protocol: "grpc", + FromWildcard: true, + RaftIndex: structs.RaftIndex{ + CreateIndex: 8, + ModifyIndex: 8, + }, + }, + } + + ingress1 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress1", + Listeners: []structs.IngressListener{ + { + Port: 4444, + Protocol: "grpc", + Services: []structs.IngressService{ + { + Name: "*", + }, + }, + }, + }, + } + assert.NoError(t, s.EnsureConfigEntry(8, ingress1, nil)) + + idx, results, err := s.GatewayServices(nil, "ingress1", nil) + require.NoError(err) + require.Equal(uint64(8), idx) + require.ElementsMatch(results, expected) + }) +} + +func setupIngressState(t *testing.T, s *Store) memdb.WatchSet { + // Querying with no matches gives an empty response + ws := memdb.NewWatchSet() + idx, res, err := s.GatewayServices(ws, "ingress1", nil) + if idx != 0 || res != nil || err != nil { + t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) + } + + // Register some nodes. + testRegisterNode(t, s, 0, "node1") + testRegisterNode(t, s, 1, "node2") + + // Register a service against the nodes. + testRegisterIngressService(t, s, 3, "node1", "wildcardIngress") + testRegisterIngressService(t, s, 4, "node1", "ingress1") + testRegisterIngressService(t, s, 5, "node1", "ingress2") + testRegisterIngressService(t, s, 6, "node2", "ingress2") + testRegisterIngressService(t, s, 7, "node1", "nothingIngress") + testRegisterService(t, s, 8, "node1", "service1") + testRegisterService(t, s, 9, "node2", "service2") + testRegisterService(t, s, 10, "node2", "service3") + + // Default protocol to http + proxyDefaults := &structs.ProxyConfigEntry{ + Name: structs.ProxyConfigGlobal, + Kind: structs.ProxyDefaults, + Config: map[string]interface{}{ + "protocol": "http", + }, + } + assert.NoError(t, s.EnsureConfigEntry(11, proxyDefaults, nil)) + + // Register some ingress config entries. + wildcardIngress := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "wildcardIngress", + Listeners: []structs.IngressListener{ + { + Port: 4444, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "*", + }, + }, + }, + }, + } + assert.NoError(t, s.EnsureConfigEntry(12, wildcardIngress, nil)) + + ingress1 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress1", + Listeners: []structs.IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "service1", + Hosts: []string{"test.example.com"}, + }, + }, + }, + { + Port: 2222, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "service2", + }, + }, + }, + }, + } + assert.NoError(t, s.EnsureConfigEntry(13, ingress1, nil)) + assert.True(t, watchFired(ws)) + + ingress2 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress2", + Listeners: []structs.IngressListener{ + { + Port: 3333, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "service1", + }, + }, + }, + }, + } + assert.NoError(t, s.EnsureConfigEntry(14, ingress2, nil)) + assert.True(t, watchFired(ws)) + + ingress3 := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress3", + Listeners: []structs.IngressListener{ + { + Port: 5555, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "*", + }, + }, + }, + { + Port: 6666, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "service1", + }, + }, + }, + }, + } + assert.NoError(t, s.EnsureConfigEntry(15, ingress3, nil)) + assert.True(t, watchFired(ws)) + + nothingIngress := &structs.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "nothingIngress", + Listeners: []structs.IngressListener{}, + } + assert.NoError(t, s.EnsureConfigEntry(16, nothingIngress, nil)) + assert.True(t, watchFired(ws)) + + return ws +} diff -Nru consul-1.7.4+dfsg1/agent/consul/state/config_entry.go consul-1.8.7+dfsg1/agent/consul/state/config_entry.go --- consul-1.7.4+dfsg1/agent/consul/state/config_entry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/config_entry.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,6 +5,7 @@ "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/lib" memdb "github.com/hashicorp/go-memdb" ) @@ -95,15 +96,7 @@ // ConfigEntry is used when restoring from a snapshot. func (s *Restore) ConfigEntry(c structs.ConfigEntry) error { - // Insert - if err := s.tx.Insert(configTableName, c); err != nil { - return fmt.Errorf("failed restoring config entry object: %s", err) - } - if err := indexUpdateMaxTxn(s.tx, c.GetRaftIndex().ModifyIndex, configTableName); err != nil { - return fmt.Errorf("failed updating index: %s", err) - } - - return nil + return s.store.insertConfigEntryWithTxn(s.tx, c.GetRaftIndex().ModifyIndex, c) } // ConfigEntry is called to get a given config entry. @@ -215,15 +208,11 @@ return err // Err is already sufficiently decorated. } - // Insert the config entry and update the index - if err := s.insertConfigEntryWithTxn(tx, conf); err != nil { - return fmt.Errorf("failed inserting config entry: %s", err) - } - if err := indexUpdateMaxTxn(tx, idx, configTableName); err != nil { - return fmt.Errorf("failed updating index: %v", err) + if err := s.validateConfigEntryEnterprise(tx, conf); err != nil { + return err } - return nil + return s.insertConfigEntryWithTxn(tx, idx, conf) } // EnsureConfigEntryCAS is called to do a check-and-set upsert of a given config entry. @@ -274,6 +263,17 @@ return nil } + // If the config entry is for terminating or ingress gateways we delete entries from the memdb table + // that associates gateways <-> services. + if kind == structs.TerminatingGateway || kind == structs.IngressGateway { + if _, err := tx.DeleteAll(gatewayServicesTableName, "gateway", structs.NewServiceName(name, entMeta)); err != nil { + return fmt.Errorf("failed to truncate gateway services table: %v", err) + } + if err := indexUpdateMaxTxn(tx, idx, gatewayServicesTableName); err != nil { + return fmt.Errorf("failed updating gateway-services index: %v", err) + } + } + err = s.validateProposedConfigEntryInGraph( tx, idx, @@ -298,6 +298,30 @@ return nil } +func (s *Store) insertConfigEntryWithTxn(tx *memdb.Txn, idx uint64, conf structs.ConfigEntry) error { + if conf == nil { + return fmt.Errorf("cannot insert nil config entry") + } + // If the config entry is for a terminating or ingress gateway we update the memdb table + // that associates gateways <-> services. + if conf.GetKind() == structs.TerminatingGateway || conf.GetKind() == structs.IngressGateway { + err := s.updateGatewayServices(tx, idx, conf, conf.GetEnterpriseMeta()) + if err != nil { + return fmt.Errorf("failed to associate services to gateway: %v", err) + } + } + + // Insert the config entry and update the index + if err := tx.Insert(configTableName, conf); err != nil { + return fmt.Errorf("failed inserting config entry: %s", err) + } + if err := indexUpdateMaxTxn(tx, idx, configTableName); err != nil { + return fmt.Errorf("failed updating index: %v", err) + } + + return nil +} + // validateProposedConfigEntryInGraph can be used to verify graph integrity for // a proposed graph create/update/delete. // @@ -325,6 +349,16 @@ case structs.ServiceRouter: case structs.ServiceSplitter: case structs.ServiceResolver: + case structs.IngressGateway: + err := s.checkGatewayClash(tx, name, structs.IngressGateway, structs.TerminatingGateway, entMeta) + if err != nil { + return err + } + case structs.TerminatingGateway: + err := s.checkGatewayClash(tx, name, structs.TerminatingGateway, structs.IngressGateway, entMeta) + if err != nil { + return err + } default: return fmt.Errorf("unhandled kind %q during validation of %q", kind, name) } @@ -332,6 +366,22 @@ return s.validateProposedConfigEntryInServiceGraph(tx, idx, kind, name, next, validateAllChains, entMeta) } +func (s *Store) checkGatewayClash( + tx *memdb.Txn, + name, selfKind, otherKind string, + entMeta *structs.EnterpriseMeta, +) error { + _, entry, err := s.configEntryTxn(tx, nil, otherKind, name, entMeta) + if err != nil { + return err + } + if entry != nil { + return fmt.Errorf("cannot create a %q config entry with name %q, "+ + "a %q config entry with that name already exists", selfKind, name, otherKind) + } + return nil +} + var serviceGraphKinds = []string{ structs.ServiceRouter, structs.ServiceSplitter, @@ -348,7 +398,11 @@ ) error { // Collect all of the chains that could be affected by this change // including our own. - checkChains := make(map[structs.ServiceID]struct{}) + var ( + checkChains = make(map[structs.ServiceID]struct{}) + checkIngress []*structs.IngressGatewayConfigEntry + enforceIngressProtocolsMatch bool + ) if validateAllChains { // Must be proxy-defaults/global. @@ -365,6 +419,37 @@ checkChains[structs.NewServiceID(entry.GetName(), entry.GetEnterpriseMeta())] = struct{}{} } } + + _, entries, err := s.configEntriesByKindTxn(tx, nil, structs.IngressGateway, structs.WildcardEnterpriseMeta()) + if err != nil { + return err + } + for _, entry := range entries { + ingress, ok := entry.(*structs.IngressGatewayConfigEntry) + if !ok { + return fmt.Errorf("type %T is not an ingress gateway config entry", entry) + } + checkIngress = append(checkIngress, ingress) + } + + } else if kind == structs.IngressGateway { + // Checking an ingress pointing to multiple chains. + + // This is the case for deleting a config entry + if next == nil { + return nil + } + + ingress, ok := next.(*structs.IngressGatewayConfigEntry) + if !ok { + return fmt.Errorf("type %T is not an ingress gateway config entry", next) + } + checkIngress = append(checkIngress, ingress) + + // When editing an ingress-gateway directly we are stricter about + // validating the protocol equivalence. + enforceIngressProtocolsMatch = true + } else { // Must be a single chain. @@ -372,38 +457,100 @@ checkChains[sid] = struct{}{} iter, err := tx.Get(configTableName, "link", sid) + if err != nil { + return err + } for raw := iter.Next(); raw != nil; raw = iter.Next() { entry := raw.(structs.ConfigEntry) - checkChains[structs.NewServiceID(entry.GetName(), entry.GetEnterpriseMeta())] = struct{}{} + switch entry.GetKind() { + case structs.ServiceRouter, structs.ServiceSplitter, structs.ServiceResolver: + svcID := structs.NewServiceID(entry.GetName(), entry.GetEnterpriseMeta()) + checkChains[svcID] = struct{}{} + case structs.IngressGateway: + ingress, ok := entry.(*structs.IngressGatewayConfigEntry) + if !ok { + return fmt.Errorf("type %T is not an ingress gateway config entry", entry) + } + checkIngress = append(checkIngress, ingress) + } } - if err != nil { - return err + } + + // Ensure if any ingress is affected that we fetch all of the chains needed + // to fully validate that ingress. + for _, ingress := range checkIngress { + for _, svcID := range ingress.ListRelatedServices() { + checkChains[svcID] = struct{}{} } } overrides := map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: kind, Name: name}: next, + structs.NewConfigEntryKindName(kind, name, entMeta): next, } - for chain, _ := range checkChains { - if err := s.testCompileDiscoveryChain(tx, nil, chain.ID, overrides, &chain.EnterpriseMeta); err != nil { + var ( + svcProtocols = make(map[structs.ServiceID]string) + svcTopNodeType = make(map[structs.ServiceID]string) + ) + for chain := range checkChains { + protocol, topNode, err := s.testCompileDiscoveryChain(tx, chain.ID, overrides, &chain.EnterpriseMeta) + if err != nil { return err } + svcProtocols[chain] = protocol + svcTopNodeType[chain] = topNode.Type + } + + // Now validate all of our ingress gateways. + for _, e := range checkIngress { + for _, listener := range e.Listeners { + expectedProto := listener.Protocol + for _, service := range listener.Services { + if service.Name == structs.WildcardSpecifier { + continue + } + svcID := structs.NewServiceID(service.Name, &service.EnterpriseMeta) + + svcProto := svcProtocols[svcID] + + if svcProto != expectedProto { + // The only time an ingress gateway and its upstreams can + // have differing protocols is when: + // + // 1. ingress is tcp and the target is not-tcp + // AND + // 2. the disco chain has a resolver as the top node + topNodeType := svcTopNodeType[svcID] + if enforceIngressProtocolsMatch || + (expectedProto != "tcp") || + (expectedProto == "tcp" && topNodeType != structs.DiscoveryGraphNodeTypeResolver) { + return fmt.Errorf( + "service %q has protocol %q, which does not match defined listener protocol %q", + svcID.String(), + svcProto, + expectedProto, + ) + } + } + } + } } return nil } +// testCompileDiscoveryChain speculatively compiles a discovery chain with +// pending modifications to see if it would be valid. Also returns the computed +// protocol and topmost discovery chain node. func (s *Store) testCompileDiscoveryChain( tx *memdb.Txn, - ws memdb.WatchSet, chainName string, overrides map[structs.ConfigEntryKindName]structs.ConfigEntry, entMeta *structs.EnterpriseMeta, -) error { +) (string, *structs.DiscoveryGraphNode, error) { _, speculativeEntries, err := s.readDiscoveryChainConfigEntriesTxn(tx, nil, chainName, overrides, entMeta) if err != nil { - return err + return "", nil, err } // Note we use an arbitrary namespace and datacenter as those would not @@ -418,8 +565,12 @@ UseInDatacenter: "dc1", Entries: speculativeEntries, } - _, err = discoverychain.Compile(req) - return err + chain, err := discoverychain.Compile(req) + if err != nil { + return "", nil, err + } + + return chain.Protocol, chain.Nodes[chain.StartNode], nil } // ReadDiscoveryChainConfigEntries will query for the full discovery chain for @@ -776,9 +927,8 @@ entMeta *structs.EnterpriseMeta, ) (uint64, structs.ConfigEntry, error) { if len(overrides) > 0 { - entry, ok := overrides[structs.ConfigEntryKindName{ - Kind: kind, Name: name, - }] + kn := structs.NewConfigEntryKindName(kind, name, entMeta) + entry, ok := overrides[kn] if ok { return 0, entry, nil // a nil entry implies it should act like it is erased } @@ -786,3 +936,45 @@ return s.configEntryTxn(tx, ws, kind, name, entMeta) } + +// protocolForService returns the service graph protocol associated to the +// provided service, checking all relevant config entries. +func (s *Store) protocolForService( + tx *memdb.Txn, + ws memdb.WatchSet, + svc structs.ServiceName, +) (uint64, string, error) { + // Get the global proxy defaults (for default protocol) + maxIdx, proxyConfig, err := s.configEntryTxn(tx, ws, structs.ProxyDefaults, structs.ProxyConfigGlobal, structs.DefaultEnterpriseMeta()) + if err != nil { + return 0, "", err + } + + idx, serviceDefaults, err := s.configEntryTxn(tx, ws, structs.ServiceDefaults, svc.Name, &svc.EnterpriseMeta) + if err != nil { + return 0, "", err + } + maxIdx = lib.MaxUint64(maxIdx, idx) + + entries := structs.NewDiscoveryChainConfigEntries() + if proxyConfig != nil { + entries.AddEntries(proxyConfig) + } + if serviceDefaults != nil { + entries.AddEntries(serviceDefaults) + } + req := discoverychain.CompileRequest{ + ServiceName: svc.Name, + EvaluateInNamespace: svc.NamespaceOrDefault(), + EvaluateInDatacenter: "dc1", + // Use a dummy trust domain since that won't affect the protocol here. + EvaluateInTrustDomain: "b6fc9da3-03d4-4b5a-9134-c045e9b20152.consul", + UseInDatacenter: "dc1", + Entries: entries, + } + chain, err := discoverychain.Compile(req) + if err != nil { + return 0, "", err + } + return maxIdx, chain.Protocol, nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/state/config_entry_oss.go consul-1.8.7+dfsg1/agent/consul/state/config_entry_oss.go --- consul-1.7.4+dfsg1/agent/consul/state/config_entry_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/config_entry_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -59,8 +59,8 @@ return tx.FirstWatch(configTableName, "id", kind, name) } -func (s *Store) insertConfigEntryWithTxn(tx *memdb.Txn, conf structs.ConfigEntry) error { - return tx.Insert(configTableName, conf) +func (s *Store) validateConfigEntryEnterprise(tx *memdb.Txn, conf structs.ConfigEntry) error { + return nil } func getAllConfigEntriesWithTxn(tx *memdb.Txn, entMeta *structs.EnterpriseMeta) (memdb.ResultIterator, error) { diff -Nru consul-1.7.4+dfsg1/agent/consul/state/config_entry_test.go consul-1.8.7+dfsg1/agent/consul/state/config_entry_test.go --- consul-1.7.4+dfsg1/agent/consul/state/config_entry_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/config_entry_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -880,10 +880,10 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceDefaults, Name: "main"}: nil, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil): nil, }, expectAfter: []structs.ConfigEntryKindName{ // nothing @@ -899,17 +899,17 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceDefaults, Name: "main"}: &structs.ServiceConfigEntry{ + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil): &structs.ServiceConfigEntry{ Kind: structs.ServiceDefaults, Name: "main", Protocol: "grpc", }, }, expectAfter: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), }, checkAfter: func(t *testing.T, entrySet *structs.DiscoveryChainConfigEntries) { defaults := entrySet.GetService(structs.NewServiceID("main", nil)) @@ -932,14 +932,14 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, - {Kind: structs.ServiceRouter, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceRouter, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceRouter, Name: "main"}: nil, + structs.NewConfigEntryKindName(structs.ServiceRouter, "main", nil): nil, }, expectAfter: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), }, }, { @@ -977,12 +977,12 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, - {Kind: structs.ServiceResolver, Name: "main"}, - {Kind: structs.ServiceRouter, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceRouter, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceRouter, Name: "main"}: &structs.ServiceRouterConfigEntry{ + structs.NewConfigEntryKindName(structs.ServiceRouter, "main", nil): &structs.ServiceRouterConfigEntry{ Kind: structs.ServiceRouter, Name: "main", Routes: []structs.ServiceRoute{ @@ -1000,9 +1000,9 @@ }, }, expectAfter: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, - {Kind: structs.ServiceResolver, Name: "main"}, - {Kind: structs.ServiceRouter, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceRouter, "main", nil), }, checkAfter: func(t *testing.T, entrySet *structs.DiscoveryChainConfigEntries) { router := entrySet.GetRouter(structs.NewServiceID("main", nil)) @@ -1040,14 +1040,14 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, - {Kind: structs.ServiceSplitter, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceSplitter, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceSplitter, Name: "main"}: nil, + structs.NewConfigEntryKindName(structs.ServiceSplitter, "main", nil): nil, }, expectAfter: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), }, }, { @@ -1067,11 +1067,11 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, - {Kind: structs.ServiceSplitter, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceSplitter, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceSplitter, Name: "main"}: &structs.ServiceSplitterConfigEntry{ + structs.NewConfigEntryKindName(structs.ServiceSplitter, "main", nil): &structs.ServiceSplitterConfigEntry{ Kind: structs.ServiceSplitter, Name: "main", Splits: []structs.ServiceSplit{ @@ -1081,8 +1081,8 @@ }, }, expectAfter: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceDefaults, Name: "main"}, - {Kind: structs.ServiceSplitter, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceDefaults, "main", nil), + structs.NewConfigEntryKindName(structs.ServiceSplitter, "main", nil), }, checkAfter: func(t *testing.T, entrySet *structs.DiscoveryChainConfigEntries) { splitter := entrySet.GetSplitter(structs.NewServiceID("main", nil)) @@ -1106,10 +1106,10 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceResolver, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceResolver, Name: "main"}: nil, + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil): nil, }, expectAfter: []structs.ConfigEntryKindName{ // nothing @@ -1124,17 +1124,17 @@ }, }, expectBefore: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceResolver, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil), }, overrides: map[structs.ConfigEntryKindName]structs.ConfigEntry{ - {Kind: structs.ServiceResolver, Name: "main"}: &structs.ServiceResolverConfigEntry{ + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "main", ConnectTimeout: 33 * time.Second, }, }, expectAfter: []structs.ConfigEntryKindName{ - {Kind: structs.ServiceResolver, Name: "main"}, + structs.NewConfigEntryKindName(structs.ServiceResolver, "main", nil), }, checkAfter: func(t *testing.T, entrySet *structs.DiscoveryChainConfigEntries) { resolver := entrySet.GetResolver(structs.NewServiceID("main", nil)) @@ -1181,28 +1181,32 @@ func entrySetToKindNames(entrySet *structs.DiscoveryChainConfigEntries) []structs.ConfigEntryKindName { var out []structs.ConfigEntryKindName for _, entry := range entrySet.Routers { - out = append(out, structs.ConfigEntryKindName{ - Kind: entry.Kind, - Name: entry.Name, - }) + out = append(out, structs.NewConfigEntryKindName( + entry.Kind, + entry.Name, + &entry.EnterpriseMeta, + )) } for _, entry := range entrySet.Splitters { - out = append(out, structs.ConfigEntryKindName{ - Kind: entry.Kind, - Name: entry.Name, - }) + out = append(out, structs.NewConfigEntryKindName( + entry.Kind, + entry.Name, + &entry.EnterpriseMeta, + )) } for _, entry := range entrySet.Resolvers { - out = append(out, structs.ConfigEntryKindName{ - Kind: entry.Kind, - Name: entry.Name, - }) + out = append(out, structs.NewConfigEntryKindName( + entry.Kind, + entry.Name, + &entry.EnterpriseMeta, + )) } for _, entry := range entrySet.Services { - out = append(out, structs.ConfigEntryKindName{ - Kind: entry.Kind, - Name: entry.Name, - }) + out = append(out, structs.NewConfigEntryKindName( + entry.Kind, + entry.Name, + &entry.EnterpriseMeta, + )) } return out } @@ -1250,3 +1254,201 @@ require.Len(t, entrySet.Resolvers, 1) require.Len(t, entrySet.Services, 1) } + +func TestStore_ValidateGatewayNamesCannotBeShared(t *testing.T) { + s := testStateStore(t) + + ingress := &structs.IngressGatewayConfigEntry{ + Kind: structs.IngressGateway, + Name: "gateway", + } + require.NoError(t, s.EnsureConfigEntry(0, ingress, nil)) + + terminating := &structs.TerminatingGatewayConfigEntry{ + Kind: structs.TerminatingGateway, + Name: "gateway", + } + // Cannot have 2 gateways with same service name + require.Error(t, s.EnsureConfigEntry(1, terminating, nil)) + + ingress = &structs.IngressGatewayConfigEntry{ + Kind: structs.IngressGateway, + Name: "gateway", + Listeners: []structs.IngressListener{ + {Port: 8080}, + }, + } + require.NoError(t, s.EnsureConfigEntry(2, ingress, nil)) + require.NoError(t, s.DeleteConfigEntry(3, structs.IngressGateway, "gateway", nil)) + + // Adding the terminating gateway with same name should now work + require.NoError(t, s.EnsureConfigEntry(4, terminating, nil)) + + // Cannot have 2 gateways with same service name + require.Error(t, s.EnsureConfigEntry(5, ingress, nil)) +} + +func TestStore_ValidateIngressGatewayErrorOnMismatchedProtocols(t *testing.T) { + newIngress := func(protocol, name string) *structs.IngressGatewayConfigEntry { + return &structs.IngressGatewayConfigEntry{ + Kind: structs.IngressGateway, + Name: "gateway", + Listeners: []structs.IngressListener{ + { + Port: 8080, + Protocol: protocol, + Services: []structs.IngressService{ + {Name: name}, + }, + }, + }, + } + } + + t.Run("http ingress fails with http upstream later changed to tcp", func(t *testing.T) { + s := testStateStore(t) + + // First set the target service as http + expected := &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "web", + Protocol: "http", + } + require.NoError(t, s.EnsureConfigEntry(0, expected, nil)) + + // Next configure http ingress to route to the http service + require.NoError(t, s.EnsureConfigEntry(1, newIngress("http", "web"), nil)) + + t.Run("via modification", func(t *testing.T) { + // Now redefine the target service as tcp + expected = &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "web", + Protocol: "tcp", + } + + err := s.EnsureConfigEntry(2, expected, nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "tcp"`) + }) + t.Run("via deletion", func(t *testing.T) { + // This will fall back to the default tcp. + err := s.DeleteConfigEntry(2, structs.ServiceDefaults, "web", nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "tcp"`) + }) + }) + + t.Run("tcp ingress ok with tcp upstream (defaulted) later changed to http", func(t *testing.T) { + s := testStateStore(t) + + // First configure tcp ingress to route to a defaulted tcp service + require.NoError(t, s.EnsureConfigEntry(0, newIngress("tcp", "web"), nil)) + + // Now redefine the target service as http + expected := &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "web", + Protocol: "http", + } + require.NoError(t, s.EnsureConfigEntry(1, expected, nil)) + }) + + t.Run("tcp ingress fails with tcp upstream (defaulted) later changed to http", func(t *testing.T) { + s := testStateStore(t) + + // First configure tcp ingress to route to a defaulted tcp service + require.NoError(t, s.EnsureConfigEntry(0, newIngress("tcp", "web"), nil)) + + // Now redefine the target service as http + expected := &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "web", + Protocol: "http", + } + require.NoError(t, s.EnsureConfigEntry(1, expected, nil)) + + t.Run("and a router defined", func(t *testing.T) { + // This part should fail. + expected2 := &structs.ServiceRouterConfigEntry{ + Kind: structs.ServiceRouter, + Name: "web", + } + err := s.EnsureConfigEntry(2, expected2, nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "http"`) + }) + + t.Run("and a splitter defined", func(t *testing.T) { + // This part should fail. + expected2 := &structs.ServiceSplitterConfigEntry{ + Kind: structs.ServiceSplitter, + Name: "web", + Splits: []structs.ServiceSplit{ + {Weight: 100}, + }, + } + err := s.EnsureConfigEntry(2, expected2, nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "http"`) + }) + }) + + t.Run("http ingress fails with tcp upstream (defaulted)", func(t *testing.T) { + s := testStateStore(t) + err := s.EnsureConfigEntry(0, newIngress("http", "web"), nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "tcp"`) + }) + + t.Run("http ingress fails with http2 upstream (via proxy-defaults)", func(t *testing.T) { + s := testStateStore(t) + expected := &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: "global", + Config: map[string]interface{}{ + "protocol": "http2", + }, + } + require.NoError(t, s.EnsureConfigEntry(0, expected, nil)) + + err := s.EnsureConfigEntry(1, newIngress("http", "web"), nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "http2"`) + }) + + t.Run("http ingress fails with grpc upstream (via service-defaults)", func(t *testing.T) { + s := testStateStore(t) + expected := &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "web", + Protocol: "grpc", + } + require.NoError(t, s.EnsureConfigEntry(1, expected, nil)) + err := s.EnsureConfigEntry(2, newIngress("http", "web"), nil) + require.Error(t, err) + require.Contains(t, err.Error(), `has protocol "grpc"`) + }) + + t.Run("http ingress ok with http upstream (via service-defaults)", func(t *testing.T) { + s := testStateStore(t) + expected := &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "web", + Protocol: "http", + } + require.NoError(t, s.EnsureConfigEntry(2, expected, nil)) + require.NoError(t, s.EnsureConfigEntry(3, newIngress("http", "web"), nil)) + }) + + t.Run("http ingress ignores wildcard specifier", func(t *testing.T) { + s := testStateStore(t) + require.NoError(t, s.EnsureConfigEntry(4, newIngress("http", "*"), nil)) + }) + + t.Run("deleting ingress config entry ok", func(t *testing.T) { + s := testStateStore(t) + require.NoError(t, s.EnsureConfigEntry(1, newIngress("tcp", "web"), nil)) + require.NoError(t, s.DeleteConfigEntry(5, structs.IngressGateway, "gateway", nil)) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/consul/state/coordinate_test.go consul-1.8.7+dfsg1/agent/consul/state/coordinate_test.go --- consul-1.7.4+dfsg1/agent/consul/state/coordinate_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/coordinate_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -81,7 +81,7 @@ verify.Values(t, "", all, structs.Coordinates{}) coordinateWs = memdb.NewWatchSet() - idx, coords, err = s.Coordinate("node1", coordinateWs) + idx, _, err = s.Coordinate("node1", coordinateWs) if err != nil { t.Fatalf("err: %s", err) } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/federation_state.go consul-1.8.7+dfsg1/agent/consul/state/federation_state.go --- consul-1.7.4+dfsg1/agent/consul/state/federation_state.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/federation_state.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,230 @@ +package state + +import ( + "fmt" + + "github.com/hashicorp/consul/agent/structs" + memdb "github.com/hashicorp/go-memdb" +) + +const federationStateTableName = "federation-states" + +func federationStateTableSchema() *memdb.TableSchema { + return &memdb.TableSchema{ + Name: federationStateTableName, + Indexes: map[string]*memdb.IndexSchema{ + "id": &memdb.IndexSchema{ + Name: "id", + AllowMissing: false, + Unique: true, + Indexer: &memdb.StringFieldIndex{ + Field: "Datacenter", + Lowercase: true, + }, + }, + }, + } +} + +func init() { + registerSchema(federationStateTableSchema) +} + +// FederationStates is used to pull all the federation states for the snapshot. +func (s *Snapshot) FederationStates() ([]*structs.FederationState, error) { + configs, err := s.tx.Get(federationStateTableName, "id") + if err != nil { + return nil, err + } + + var ret []*structs.FederationState + for wrapped := configs.Next(); wrapped != nil; wrapped = configs.Next() { + ret = append(ret, wrapped.(*structs.FederationState)) + } + + return ret, nil +} + +// FederationState is used when restoring from a snapshot. +func (s *Restore) FederationState(g *structs.FederationState) error { + // Insert + if err := s.tx.Insert(federationStateTableName, g); err != nil { + return fmt.Errorf("failed restoring federation state object: %s", err) + } + if err := indexUpdateMaxTxn(s.tx, g.ModifyIndex, federationStateTableName); err != nil { + return fmt.Errorf("failed updating index: %s", err) + } + + return nil +} + +func (s *Store) FederationStateBatchSet(idx uint64, configs structs.FederationStates) error { + tx := s.db.Txn(true) + defer tx.Abort() + + for _, config := range configs { + if err := s.federationStateSetTxn(tx, idx, config); err != nil { + return err + } + } + + tx.Commit() + return nil +} + +// FederationStateSet is called to do an upsert of a given federation state. +func (s *Store) FederationStateSet(idx uint64, config *structs.FederationState) error { + tx := s.db.Txn(true) + defer tx.Abort() + + if err := s.federationStateSetTxn(tx, idx, config); err != nil { + return err + } + + tx.Commit() + return nil +} + +// federationStateSetTxn upserts a federation state inside of a transaction. +func (s *Store) federationStateSetTxn(tx *memdb.Txn, idx uint64, config *structs.FederationState) error { + if config.Datacenter == "" { + return fmt.Errorf("missing datacenter on federation state") + } + + // Check for existing. + var existing *structs.FederationState + existingRaw, err := tx.First(federationStateTableName, "id", config.Datacenter) + if err != nil { + return fmt.Errorf("failed federation state lookup: %s", err) + } + + if existingRaw != nil { + existing = existingRaw.(*structs.FederationState) + } + + // Set the indexes + if existing != nil { + config.CreateIndex = existing.CreateIndex + config.ModifyIndex = idx + } else { + config.CreateIndex = idx + config.ModifyIndex = idx + } + + if config.PrimaryModifyIndex == 0 { + // Since replication ordinarily would set this value for us, we can + // assume this is a write to the primary datacenter's federation state + // so we can just duplicate the new modify index. + config.PrimaryModifyIndex = idx + } + + // Insert the federation state and update the index + if err := tx.Insert(federationStateTableName, config); err != nil { + return fmt.Errorf("failed inserting federation state: %s", err) + } + if err := tx.Insert("index", &IndexEntry{federationStateTableName, idx}); err != nil { + return fmt.Errorf("failed updating index: %v", err) + } + + return nil +} + +// FederationStateGet is called to get a federation state. +func (s *Store) FederationStateGet(ws memdb.WatchSet, datacenter string) (uint64, *structs.FederationState, error) { + tx := s.db.Txn(false) + defer tx.Abort() + return s.federationStateGetTxn(tx, ws, datacenter) +} + +func (s *Store) federationStateGetTxn(tx *memdb.Txn, ws memdb.WatchSet, datacenter string) (uint64, *structs.FederationState, error) { + // Get the index + idx := maxIndexTxn(tx, federationStateTableName) + + // Get the existing contents. + watchCh, existing, err := tx.FirstWatch(federationStateTableName, "id", datacenter) + if err != nil { + return 0, nil, fmt.Errorf("failed federation state lookup: %s", err) + } + ws.Add(watchCh) + + if existing == nil { + return idx, nil, nil + } + + config, ok := existing.(*structs.FederationState) + if !ok { + return 0, nil, fmt.Errorf("federation state %q is an invalid type: %T", datacenter, config) + } + + return idx, config, nil +} + +// FederationStateList is called to get all federation state objects. +func (s *Store) FederationStateList(ws memdb.WatchSet) (uint64, []*structs.FederationState, error) { + tx := s.db.Txn(false) + defer tx.Abort() + return s.federationStateListTxn(tx, ws) +} + +func (s *Store) federationStateListTxn(tx *memdb.Txn, ws memdb.WatchSet) (uint64, []*structs.FederationState, error) { + // Get the index + idx := maxIndexTxn(tx, federationStateTableName) + + iter, err := tx.Get(federationStateTableName, "id") + if err != nil { + return 0, nil, fmt.Errorf("failed federation state lookup: %s", err) + } + ws.Add(iter.WatchCh()) + + var results []*structs.FederationState + for v := iter.Next(); v != nil; v = iter.Next() { + results = append(results, v.(*structs.FederationState)) + } + return idx, results, nil +} + +func (s *Store) FederationStateDelete(idx uint64, datacenter string) error { + tx := s.db.Txn(true) + defer tx.Abort() + + if err := s.federationStateDeleteTxn(tx, idx, datacenter); err != nil { + return err + } + + tx.Commit() + return nil +} + +func (s *Store) FederationStateBatchDelete(idx uint64, datacenters []string) error { + tx := s.db.Txn(true) + defer tx.Abort() + + for _, datacenter := range datacenters { + if err := s.federationStateDeleteTxn(tx, idx, datacenter); err != nil { + return err + } + } + + tx.Commit() + return nil +} + +func (s *Store) federationStateDeleteTxn(tx *memdb.Txn, idx uint64, datacenter string) error { + // Try to retrieve the existing federation state. + existing, err := tx.First(federationStateTableName, "id", datacenter) + if err != nil { + return fmt.Errorf("failed federation state lookup: %s", err) + } + if existing == nil { + return nil + } + + // Delete the federation state from the DB and update the index. + if err := tx.Delete(federationStateTableName, existing); err != nil { + return fmt.Errorf("failed removing federation state: %s", err) + } + if err := tx.Insert("index", &IndexEntry{federationStateTableName, idx}); err != nil { + return fmt.Errorf("failed updating index: %s", err) + } + return nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/state/kvs.go consul-1.8.7+dfsg1/agent/consul/state/kvs.go --- consul-1.7.4+dfsg1/agent/consul/state/kvs.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/kvs.go 2020-12-10 21:46:52.000000000 +0000 @@ -69,7 +69,7 @@ // KVS is used when restoring from a snapshot. Use KVSSet for general inserts. func (s *Restore) KVS(entry *structs.DirEntry) error { - if err := s.store.insertKVTxn(s.tx, entry, true); err != nil { + if err := s.store.insertKVTxn(s.tx, entry, true, true); err != nil { return fmt.Errorf("failed inserting kvs entry: %s", err) } @@ -127,13 +127,12 @@ } existing, _ := existingNode.(*structs.DirEntry) - // Set the indexes. + // Set the CreateIndex. if existing != nil { entry.CreateIndex = existing.CreateIndex } else { entry.CreateIndex = idx } - entry.ModifyIndex = idx // Preserve the existing session unless told otherwise. The "existing" // session for a new entry is "no session". @@ -145,13 +144,18 @@ } } - // skip write if the entry did not change + // Set the ModifyIndex. if existing != nil && existing.Equal(entry) { + // Skip further writing in the state store if the entry is not actually + // changed. Nevertheless, the input's ModifyIndex should be reset + // since the TXN API returns a copy in the response. + entry.ModifyIndex = existing.ModifyIndex return nil } + entry.ModifyIndex = idx // Store the kv pair in the state store and update the index. - if err := s.insertKVTxn(tx, entry, false); err != nil { + if err := s.insertKVTxn(tx, entry, false, false); err != nil { return fmt.Errorf("failed inserting kvs entry: %s", err) } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/kvs_oss.go consul-1.8.7+dfsg1/agent/consul/state/kvs_oss.go --- consul-1.7.4+dfsg1/agent/consul/state/kvs_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/kvs_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,7 @@ } } -func (s *Store) insertKVTxn(tx *memdb.Txn, entry *structs.DirEntry, updateMax bool) error { +func (s *Store) insertKVTxn(tx *memdb.Txn, entry *structs.DirEntry, updateMax bool, _ bool) error { if err := tx.Insert("kvs", entry); err != nil { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/kvs_test.go consul-1.8.7+dfsg1/agent/consul/state/kvs_test.go --- consul-1.7.4+dfsg1/agent/consul/state/kvs_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/kvs_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -429,7 +429,7 @@ // Delete a key and make sure the index comes from the tombstone. ws = memdb.NewWatchSet() - idx, _, err = s.KVSList(ws, "foo/bar/baz", nil) + _, _, err = s.KVSList(ws, "foo/bar/baz", nil) if err != nil { t.Fatalf("err: %s", err) } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/session.go consul-1.8.7+dfsg1/agent/consul/state/session.go --- consul-1.7.4+dfsg1/agent/consul/state/session.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/session.go 2020-12-10 21:46:52.000000000 +0000 @@ -146,7 +146,7 @@ // Session is used when restoring from a snapshot. For general inserts, use // SessionCreate. func (s *Restore) Session(sess *structs.Session) error { - if err := s.store.insertSessionTxn(s.tx, sess, sess.ModifyIndex, true); err != nil { + if err := s.store.insertSessionTxn(s.tx, sess, sess.ModifyIndex, true, true); err != nil { return fmt.Errorf("failed inserting session: %s", err) } @@ -214,7 +214,7 @@ } // Insert the session - if err := s.insertSessionTxn(tx, sess, idx, false); err != nil { + if err := s.insertSessionTxn(tx, sess, idx, false, false); err != nil { return fmt.Errorf("failed inserting session: %s", err) } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/session_oss.go consul-1.8.7+dfsg1/agent/consul/state/session_oss.go --- consul-1.7.4+dfsg1/agent/consul/state/session_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/session_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,7 +48,7 @@ return nil } -func (s *Store) insertSessionTxn(tx *memdb.Txn, session *structs.Session, idx uint64, updateMax bool) error { +func (s *Store) insertSessionTxn(tx *memdb.Txn, session *structs.Session, idx uint64, updateMax bool, _ bool) error { if err := tx.Insert("sessions", session); err != nil { return err } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/session_test.go consul-1.8.7+dfsg1/agent/consul/state/session_test.go --- consul-1.7.4+dfsg1/agent/consul/state/session_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/session_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,12 +2,13 @@ import ( "fmt" - "github.com/stretchr/testify/assert" "reflect" "strings" "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/types" @@ -543,7 +544,7 @@ // Delete the node and make sure the watch fires. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err := s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -555,7 +556,7 @@ } // Lookup by ID, should be nil. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -598,7 +599,7 @@ // Delete the service and make sure the watch fires. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err := s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -610,7 +611,7 @@ } // Lookup by ID, should be nil. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -648,7 +649,7 @@ // Invalidate the check and make sure the watches fire. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err := s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -661,7 +662,7 @@ } // Lookup by ID, should be nil. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -699,7 +700,7 @@ // Delete the check and make sure the watches fire. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err := s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -711,7 +712,7 @@ } // Lookup by ID, should be nil. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -767,7 +768,7 @@ // Delete the node and make sure the watches fire. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err = s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -779,7 +780,7 @@ } // Lookup by ID, should be nil. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -849,7 +850,7 @@ // Delete the node and make sure the watches fire. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err = s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -861,7 +862,7 @@ } // Lookup by ID, should be nil. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -917,7 +918,7 @@ // Invalidate the session and make sure the watches fire. ws := memdb.NewWatchSet() - idx, s2, err := s.SessionGet(ws, session.ID, nil) + _, _, err := s.SessionGet(ws, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -929,7 +930,7 @@ } // Make sure the session is gone. - idx, s2, err = s.SessionGet(nil, session.ID, nil) + idx, s2, err := s.SessionGet(nil, session.ID, nil) if err != nil { t.Fatalf("err: %v", err) } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/state_store.go consul-1.8.7+dfsg1/agent/consul/state/state_store.go --- consul-1.7.4+dfsg1/agent/consul/state/state_store.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/state_store.go 2020-12-10 21:46:52.000000000 +0000 @@ -78,7 +78,7 @@ ErrMissingIntentionID = errors.New("Missing Intention ID") ) -const ( +var ( // watchLimit is used as a soft limit to cap how many watches we allow // for a given blocking query. If this is exceeded, then we will use a // higher-level watch that's less fine-grained. Choosing the perfect diff -Nru consul-1.7.4+dfsg1/agent/consul/state/state_store_test.go consul-1.8.7+dfsg1/agent/consul/state/state_store_test.go --- consul-1.7.4+dfsg1/agent/consul/state/state_store_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/state_store_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -126,6 +126,31 @@ testRegisterServiceWithChange(t, s, idx, nodeID, serviceID, false) } +func testRegisterIngressService(t *testing.T, s *Store, idx uint64, nodeID, serviceID string) { + svc := &structs.NodeService{ + ID: serviceID, + Service: serviceID, + Kind: structs.ServiceKindIngressGateway, + Address: "1.1.1.1", + Port: 1111, + } + if err := s.EnsureService(idx, nodeID, svc); err != nil { + t.Fatalf("err: %s", err) + } + + tx := s.db.Txn(false) + defer tx.Abort() + _, service, err := firstWatchCompoundWithTxn(tx, "services", "id", nil, nodeID, serviceID) + if err != nil { + t.Fatalf("err: %s", err) + } + if result, ok := service.(*structs.ServiceNode); !ok || + result.Node != nodeID || + result.ServiceID != serviceID { + t.Fatalf("bad service: %#v", result) + } +} + func testRegisterCheck(t *testing.T, s *Store, idx uint64, nodeID string, serviceID string, checkID types.CheckID, state string) { chk := &structs.HealthCheck{ diff -Nru consul-1.7.4+dfsg1/agent/consul/state/txn.go consul-1.8.7+dfsg1/agent/consul/state/txn.go --- consul-1.7.4+dfsg1/agent/consul/state/txn.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/txn.go 2020-12-10 21:46:52.000000000 +0000 @@ -160,7 +160,7 @@ } case api.NodeSet: - err = s.ensureNodeTxn(tx, idx, &op.Node) + err = s.ensureNodeTxn(tx, idx, false, &op.Node) if err == nil { entry, err = getNode() } @@ -210,61 +210,64 @@ // txnService handles all Service-related operations. func (s *Store) txnService(tx *memdb.Txn, idx uint64, op *structs.TxnServiceOp) (structs.TxnResults, error) { - var entry *structs.NodeService - var err error - switch op.Verb { case api.ServiceGet: - entry, err = s.getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) - if entry == nil && err == nil { - err = fmt.Errorf("service %q on node %q doesn't exist", op.Service.ID, op.Node) + entry, err := s.getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + switch { + case err != nil: + return nil, err + case entry == nil: + return nil, fmt.Errorf("service %q on node %q doesn't exist", op.Service.ID, op.Node) + default: + return structs.TxnResults{&structs.TxnResult{Service: entry}}, nil } case api.ServiceSet: - err = s.ensureServiceTxn(tx, idx, op.Node, &op.Service) - entry, err = s.getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + if err := s.ensureServiceTxn(tx, idx, op.Node, false, &op.Service); err != nil { + return nil, err + } + entry, err := s.getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + return newTxnResultFromNodeServiceEntry(entry), err case api.ServiceCAS: - var ok bool - ok, err = s.ensureServiceCASTxn(tx, idx, op.Node, &op.Service) - if !ok && err == nil { - err = fmt.Errorf("failed to set service %q on node %q, index is stale", op.Service.ID, op.Node) - break + err := s.ensureServiceCASTxn(tx, idx, op.Node, &op.Service) + switch { + case err == errCASCompareFailed: + err := fmt.Errorf("failed to set service %q on node %q, index is stale", op.Service.ID, op.Node) + return nil, err + case err != nil: + return nil, err } - entry, err = s.getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + + entry, err := s.getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + return newTxnResultFromNodeServiceEntry(entry), err case api.ServiceDelete: - err = s.deleteServiceTxn(tx, idx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + err := s.deleteServiceTxn(tx, idx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + return nil, err case api.ServiceDeleteCAS: - var ok bool - ok, err = s.deleteServiceCASTxn(tx, idx, op.Service.ModifyIndex, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) + ok, err := s.deleteServiceCASTxn(tx, idx, op.Service.ModifyIndex, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) if !ok && err == nil { - err = fmt.Errorf("failed to delete service %q on node %q, index is stale", op.Service.ID, op.Node) + return nil, fmt.Errorf("failed to delete service %q on node %q, index is stale", op.Service.ID, op.Node) } - - default: - err = fmt.Errorf("unknown Service verb %q", op.Verb) - } - if err != nil { return nil, err - } - // For a GET we keep the value, otherwise we clone and blank out the - // value (we have to clone so we don't modify the entry being used by - // the state store). - if entry != nil { - if op.Verb == api.ServiceGet { - result := structs.TxnResult{Service: entry} - return structs.TxnResults{&result}, nil - } - - clone := *entry - result := structs.TxnResult{Service: &clone} - return structs.TxnResults{&result}, nil + default: + return nil, fmt.Errorf("unknown Service verb %q", op.Verb) } +} - return nil, nil +// newTxnResultFromNodeServiceEntry returns a TxnResults with a single result, +// a copy of entry. The entry is copied to prevent modification of the state +// store. +func newTxnResultFromNodeServiceEntry(entry *structs.NodeService) structs.TxnResults { + if entry == nil { + return nil + } + clone := *entry + result := structs.TxnResult{Service: &clone} + return structs.TxnResults{&result} } // txnCheck handles all Check-related operations. @@ -280,7 +283,7 @@ } case api.CheckSet: - err = s.ensureCheckTxn(tx, idx, &op.Check) + err = s.ensureCheckTxn(tx, idx, false, &op.Check) if err == nil { _, entry, err = s.getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta) } diff -Nru consul-1.7.4+dfsg1/agent/consul/state/txn_test.go consul-1.8.7+dfsg1/agent/consul/state/txn_test.go --- consul-1.7.4+dfsg1/agent/consul/state/txn_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/state/txn_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1252,3 +1252,132 @@ } } } + +func TestStateStore_Txn_KVS_ModifyIndexes(t *testing.T) { + s := testStateStore(t) + + // Create KV entries in the state store. + testSetKey(t, s, 1, "foo/a", "bar", nil) + testSetKey(t, s, 2, "foo/b", "bar", nil) + + // Set up a transaction that actually changes `a`, + // but passes original value for `b`. + ops := structs.TxnOps{ + &structs.TxnOp{ + KV: &structs.TxnKVOp{ + Verb: api.KVCAS, + DirEnt: structs.DirEntry{ + Key: "foo/a", + Value: []byte("new"), + RaftIndex: structs.RaftIndex{ + ModifyIndex: 1, + }, + }, + }, + }, + &structs.TxnOp{ + KV: &structs.TxnKVOp{ + Verb: api.KVCAS, + DirEnt: structs.DirEntry{ + Key: "foo/b", + Value: []byte("bar"), + RaftIndex: structs.RaftIndex{ + ModifyIndex: 2, + }, + }, + }, + }, + } + results, errors := s.TxnRW(3, ops) + if len(errors) > 0 { + t.Fatalf("err: %v", errors) + } + + // Make sure the response looks as expected. + expected := structs.TxnResults{ + &structs.TxnResult{ + KV: &structs.DirEntry{ + Key: "foo/a", + RaftIndex: structs.RaftIndex{ + CreateIndex: 1, + ModifyIndex: 3, + }, + }, + }, + &structs.TxnResult{ + KV: &structs.DirEntry{ + Key: "foo/b", + RaftIndex: structs.RaftIndex{ + CreateIndex: 2, + ModifyIndex: 2, + }, + }, + }, + } + if len(results) != len(expected) { + t.Fatalf("bad: %v", results) + } + for i, e := range expected { + if e.KV.Key != results[i].KV.Key { + t.Fatalf("expected key %s, got %s", e.KV.Key, results[i].KV.Key) + } + if e.KV.LockIndex != results[i].KV.LockIndex { + t.Fatalf("expected lock index %d, got %d", e.KV.LockIndex, results[i].KV.LockIndex) + } + if e.KV.CreateIndex != results[i].KV.CreateIndex { + t.Fatalf("expected create index %d, got %d", e.KV.CreateIndex, results[i].KV.CreateIndex) + } + if e.KV.ModifyIndex != results[i].KV.ModifyIndex { + t.Fatalf("expected modify index %d, got %d", e.KV.ModifyIndex, results[i].KV.ModifyIndex) + } + } + + // Pull the resulting state store contents. + idx, actual, err := s.KVSList(nil, "", nil) + if err != nil { + t.Fatalf("err: %s", err) + } + if idx != 3 { + t.Fatalf("bad index: %d", idx) + } + + // Make sure it looks as expected. + entries := structs.DirEntries{ + &structs.DirEntry{ + Key: "foo/a", + Value: []byte("new"), + RaftIndex: structs.RaftIndex{ + CreateIndex: 1, + ModifyIndex: 3, + }, + }, + &structs.DirEntry{ + Key: "foo/b", + Value: []byte("bar"), + RaftIndex: structs.RaftIndex{ + CreateIndex: 2, + ModifyIndex: 2, + }, + }, + } + if len(actual) != len(entries) { + t.Fatalf("bad len: %d != %d", len(actual), len(entries)) + } + for i, e := range entries { + if e.Key != actual[i].Key { + t.Fatalf("expected key %s, got %s", e.Key, actual[i].Key) + } + if string(e.Value) != string(actual[i].Value) { + t.Fatalf("expected value %s, got %s", e.Value, actual[i].Value) + } + if e.LockIndex != actual[i].LockIndex { + t.Fatalf("expected lock index %d, got %d", e.LockIndex, actual[i].LockIndex) + } + if e.CreateIndex != actual[i].CreateIndex { + t.Fatalf("expected create index %d, got %d", e.CreateIndex, actual[i].CreateIndex) + } + if e.ModifyIndex != actual[i].ModifyIndex { + t.Fatalf("expected modify index %d, got %d", e.ModifyIndex, actual[i].ModifyIndex) + } + } +} diff -Nru consul-1.7.4+dfsg1/agent/consul/stats_fetcher.go consul-1.8.7+dfsg1/agent/consul/stats_fetcher.go --- consul-1.7.4+dfsg1/agent/consul/stats_fetcher.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/stats_fetcher.go 2020-12-10 21:46:52.000000000 +0000 @@ -43,7 +43,7 @@ func (f *StatsFetcher) fetch(server *metadata.Server, replyCh chan *autopilot.ServerStats) { var args struct{} var reply autopilot.ServerStats - err := f.pool.RPC(f.datacenter, server.Addr, server.Version, "Status.RaftStats", &args, &reply) + err := f.pool.RPC(f.datacenter, server.ShortName, server.Addr, "Status.RaftStats", &args, &reply) if err != nil { f.logger.Warn("error getting server health from server", "server", server.Name, diff -Nru consul-1.7.4+dfsg1/agent/consul/stats_fetcher_test.go consul-1.8.7+dfsg1/agent/consul/stats_fetcher_test.go --- consul-1.7.4+dfsg1/agent/consul/stats_fetcher_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/stats_fetcher_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -36,13 +36,11 @@ t.Fatalf("bad len: %d", len(members)) } - var servers []*metadata.Server for _, member := range members { - ok, server := metadata.IsConsulServer(member) + ok, _ := metadata.IsConsulServer(member) if !ok { - t.Fatalf("bad: %#v", member) + t.Fatalf("expected member to be a server: %#v", member) } - servers = append(servers, server) } // Do a normal fetch and make sure we get three responses. diff -Nru consul-1.7.4+dfsg1/agent/consul/status_endpoint_test.go consul-1.8.7+dfsg1/agent/consul/status_endpoint_test.go --- consul-1.7.4+dfsg1/agent/consul/status_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/status_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ func insecureRPCClient(s *Server, c tlsutil.Config) (rpc.ClientCodec, error) { addr := s.config.RPCAdvertise - configurator, err := tlsutil.NewConfigurator(c, nil) + configurator, err := tlsutil.NewConfigurator(c, s.logger) if err != nil { return nil, err } @@ -37,10 +37,25 @@ if wrapper == nil { return nil, err } - conn, _, err := pool.DialTimeoutWithRPCType(s.config.Datacenter, addr, nil, time.Second, true, wrapper, pool.RPCTLSInsecure) + d := &net.Dialer{Timeout: time.Second} + conn, err := d.Dial("tcp", addr.String()) if err != nil { return nil, err } + // Switch the connection into TLS mode + if _, err = conn.Write([]byte{byte(pool.RPCTLSInsecure)}); err != nil { + conn.Close() + return nil, err + } + + // Wrap the connection in a TLS client + tlsConn, err := wrapper(s.config.Datacenter, conn) + if err != nil { + conn.Close() + return nil, err + } + conn = tlsConn + return msgpackrpc.NewCodecFromHandle(true, true, conn, structs.MsgpackHandle), nil } diff -Nru consul-1.7.4+dfsg1/agent/consul/txn_endpoint.go consul-1.8.7+dfsg1/agent/consul/txn_endpoint.go --- consul-1.7.4+dfsg1/agent/consul/txn_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/txn_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -108,7 +108,7 @@ // Apply is used to apply multiple operations in a single, atomic transaction. func (t *Txn) Apply(args *structs.TxnRequest, reply *structs.TxnResponse) error { - if done, err := t.srv.forward("Txn.Apply", args, args, reply); done { + if done, err := t.srv.ForwardRPC("Txn.Apply", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"txn", "apply"}, time.Now()) @@ -151,7 +151,7 @@ // supports staleness, so this should be preferred if you're just performing // reads. func (t *Txn) Read(args *structs.TxnReadRequest, reply *structs.TxnReadResponse) error { - if done, err := t.srv.forward("Txn.Read", args, args, reply); done { + if done, err := t.srv.ForwardRPC("Txn.Read", args, args, reply); done { return err } defer metrics.MeasureSince([]string{"txn", "read"}, time.Now()) diff -Nru consul-1.7.4+dfsg1/agent/consul/util.go consul-1.8.7+dfsg1/agent/consul/util.go --- consul-1.7.4+dfsg1/agent/consul/util.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/util.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,13 +6,10 @@ "net" "runtime" "strconv" - "strings" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/go-version" - "github.com/hashicorp/hil" - "github.com/hashicorp/hil/ast" "github.com/hashicorp/serf/serf" ) @@ -369,7 +366,7 @@ return } - c.routers.CheckServers(fn) + c.router.CheckServers(datacenter, fn) } type serversACLMode struct { @@ -440,42 +437,3 @@ return state.found, state.mode, state.leaderMode } - -// InterpolateHIL processes the string as if it were HIL and interpolates only -// the provided string->string map as possible variables. -func InterpolateHIL(s string, vars map[string]string) (string, error) { - if strings.Index(s, "${") == -1 { - // Skip going to the trouble of parsing something that has no HIL. - return s, nil - } - - tree, err := hil.Parse(s) - if err != nil { - return "", err - } - - vm := make(map[string]ast.Variable) - for k, v := range vars { - vm[k] = ast.Variable{ - Type: ast.TypeString, - Value: v, - } - } - - config := &hil.EvalConfig{ - GlobalScope: &ast.BasicScope{ - VarMap: vm, - }, - } - - result, err := hil.Eval(tree, config) - if err != nil { - return "", err - } - - if result.Type != hil.TypeString { - return "", fmt.Errorf("generated unexpected hil type: %s", result.Type) - } - - return result.Value.(string), nil -} diff -Nru consul-1.7.4+dfsg1/agent/consul/util_test.go consul-1.8.7+dfsg1/agent/consul/util_test.go --- consul-1.7.4+dfsg1/agent/consul/util_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/util_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -229,15 +229,17 @@ func TestGenerateUUID(t *testing.T) { t.Parallel() prev := generateUUID() + re, err := regexp.Compile("[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}") + require.NoError(t, err) + for i := 0; i < 100; i++ { id := generateUUID() if prev == id { t.Fatalf("Should get a new ID!") } - matched, err := regexp.MatchString( - "[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}", id) - if !matched || err != nil { + matched := re.MatchString(id) + if !matched { t.Fatalf("expected match %s %v %s", id, matched, err) } } @@ -360,6 +362,7 @@ makeServer := func(versionStr string, datacenter string) metadata.Server { return metadata.Server{ Name: "foo", + ShortName: "foo", ID: "asdf", Port: 10000, Expect: 3, @@ -439,141 +442,12 @@ } } -func TestInterpolateHIL(t *testing.T) { - for _, test := range []struct { - name string - in string - vars map[string]string - exp string - ok bool - }{ - // valid HIL - { - "empty", - "", - map[string]string{}, - "", - true, - }, - { - "no vars", - "nothing", - map[string]string{}, - "nothing", - true, - }, - { - "just var", - "${item}", - map[string]string{"item": "value"}, - "value", - true, - }, - { - "var in middle", - "before ${item}after", - map[string]string{"item": "value"}, - "before valueafter", - true, - }, - { - "two vars", - "before ${item}after ${more}", - map[string]string{"item": "value", "more": "xyz"}, - "before valueafter xyz", - true, - }, - { - "missing map val", - "${item}", - map[string]string{"item": ""}, - "", - true, - }, - // "weird" HIL, but not technically invalid - { - "just end", - "}", - map[string]string{}, - "}", - true, - }, - { - "var without start", - " item }", - map[string]string{"item": "value"}, - " item }", - true, - }, - { - "two vars missing second start", - "before ${ item }after more }", - map[string]string{"item": "value", "more": "xyz"}, - "before valueafter more }", - true, - }, - // invalid HIL - { - "just start", - "${", - map[string]string{}, - "", - false, - }, - { - "backwards", - "}${", - map[string]string{}, - "", - false, - }, - { - "no varname", - "${}", - map[string]string{}, - "", - false, - }, - { - "missing map key", - "${item}", - map[string]string{}, - "", - false, - }, - { - "var without end", - "${ item ", - map[string]string{"item": "value"}, - "", - false, - }, - { - "two vars missing first end", - "before ${ item after ${ more }", - map[string]string{"item": "value", "more": "xyz"}, - "", - false, - }, - } { - t.Run(test.name, func(t *testing.T) { - out, err := InterpolateHIL(test.in, test.vars) - if test.ok { - require.NoError(t, err) - require.Equal(t, test.exp, out) - } else { - require.NotNil(t, err) - require.Equal(t, out, "") - } - }) - } -} - func TestServersGetACLMode(t *testing.T) { t.Parallel() makeServer := func(datacenter string, acls structs.ACLMode, status serf.MemberStatus, addr net.IP) metadata.Server { return metadata.Server{ Name: "foo", + ShortName: "foo", ID: "asdf", Port: 10000, Expect: 3, diff -Nru consul-1.7.4+dfsg1/agent/consul/wanfed/pool.go consul-1.8.7+dfsg1/agent/consul/wanfed/pool.go --- consul-1.7.4+dfsg1/agent/consul/wanfed/pool.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/wanfed/pool.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,255 @@ +package wanfed + +import ( + "fmt" + "net" + "sync" + "time" +) + +// connPool pools idle negotiated ALPN_WANGossipPacket flavored connections to +// remote servers. Idle connections only remain pooled for up to maxTime after +// they were last acquired. +type connPool struct { + // maxTime is the maximum time to keep a connection open. + maxTime time.Duration + + // mu protects pool and shutdown + mu sync.Mutex + pool map[string][]*conn + shutdown bool + + shutdownCh chan struct{} + reapWg sync.WaitGroup +} + +func newConnPool(maxTime time.Duration) (*connPool, error) { + if maxTime == 0 { + return nil, fmt.Errorf("wanfed: conn pool needs a max time configured") + } + + p := &connPool{ + maxTime: maxTime, + pool: make(map[string][]*conn), + shutdownCh: make(chan struct{}), + } + + p.reapWg.Add(1) + go p.reap() + + return p, nil +} + +func (p *connPool) Close() error { + p.mu.Lock() + defer p.mu.Unlock() + + if p.shutdown { + return nil + } + + for _, conns := range p.pool { + for _, conn := range conns { + conn.Close() + } + } + p.pool = nil + p.shutdown = true + + close(p.shutdownCh) + p.reapWg.Wait() + + return nil +} + +// AcquireOrDial either removes an idle connection from the pool or +// estabilishes a new one using the provided dialer function. +func (p *connPool) AcquireOrDial(key string, dialer func() (net.Conn, error)) (*conn, error) { + c, err := p.maybeAcquire(key) + if err != nil { + return nil, err + } + if c != nil { + c.markForUse() + return c, nil + } + + nc, err := dialer() + if err != nil { + return nil, err + } + + c = &conn{ + key: key, + pool: p, + Conn: nc, + } + c.markForUse() + + return c, nil +} + +var errPoolClosed = fmt.Errorf("wanfed: connection pool is closed") + +// maybeAcquire removes an idle connection from the pool if possible otherwise +// returns nil indicating there were no idle connections ready. It is the +// caller's responsibility to open a new connection if that is desired. +func (p *connPool) maybeAcquire(key string) (*conn, error) { + p.mu.Lock() + defer p.mu.Unlock() + if p.shutdown { + return nil, errPoolClosed + } + conns, ok := p.pool[key] + if !ok { + return nil, nil + } + + switch len(conns) { + case 0: + delete(p.pool, key) // stray cleanup + return nil, nil + + case 1: + c := conns[0] + delete(p.pool, key) + return c, nil + + default: + sz := len(conns) + remaining, last := conns[0:sz-1], conns[sz-1] + p.pool[key] = remaining + return last, nil + } +} + +// returnConn puts the connection back into the idle pool for reuse. +func (p *connPool) returnConn(c *conn) error { + p.mu.Lock() + defer p.mu.Unlock() + + if p.shutdown { + return c.Conn.Close() // actual shutdown + } + + p.pool[c.key] = append(p.pool[c.key], c) + + return nil +} + +// reap periodically scans the idle pool for connections that have not been +// used recently and closes them. +func (p *connPool) reap() { + defer p.reapWg.Done() + for { + select { + case <-p.shutdownCh: + return + case <-time.After(time.Second): + } + + p.reapOnce() + } +} + +func (p *connPool) reapOnce() { + p.mu.Lock() + defer p.mu.Unlock() + + if p.shutdown { + return + } + + now := time.Now() + + var removedKeys []string + for key, conns := range p.pool { + if len(conns) == 0 { + removedKeys = append(removedKeys, key) // cleanup + continue + } + + var retain []*conn + for _, c := range conns { + // Skip recently used connections + if now.Sub(c.lastUsed) < p.maxTime { + retain = append(retain, c) + } else { + c.Conn.Close() + } + } + + if len(retain) == len(conns) { + continue // no change + + } else if len(retain) == 0 { + removedKeys = append(removedKeys, key) + continue + } + + p.pool[key] = retain + } + + for _, key := range removedKeys { + delete(p.pool, key) + } +} + +type conn struct { + key string + + mu sync.Mutex + lastUsed time.Time + failed bool + closed bool + + pool *connPool + + net.Conn +} + +func (c *conn) ReturnOrClose() error { + c.mu.Lock() + closed := c.closed + failed := c.failed + if failed { + c.closed = true + } + c.mu.Unlock() + + if closed { + return nil + } + + if failed { + return c.Conn.Close() + } + + return c.pool.returnConn(c) +} + +func (c *conn) Close() error { + c.mu.Lock() + closed := c.closed + c.closed = true + c.mu.Unlock() + + if closed { + return nil + } + + return c.Conn.Close() +} + +func (c *conn) markForUse() { + c.mu.Lock() + c.lastUsed = time.Now() + c.failed = false + c.mu.Unlock() +} + +func (c *conn) MarkFailed() { + c.mu.Lock() + c.failed = true + c.mu.Unlock() +} diff -Nru consul-1.7.4+dfsg1/agent/consul/wanfed/wanfed.go consul-1.8.7+dfsg1/agent/consul/wanfed/wanfed.go --- consul-1.7.4+dfsg1/agent/consul/wanfed/wanfed.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/wanfed/wanfed.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,179 @@ +package wanfed + +import ( + "encoding/binary" + "errors" + "fmt" + "net" + "strings" + "time" + + "github.com/hashicorp/consul/agent/pool" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/memberlist" +) + +const ( + // GossipPacketMaxIdleTime controls how long we keep an idle connection + // open to a server. + // + // Conceptually similar to: agent/consul/server.go:serverRPCCache + GossipPacketMaxIdleTime = 2 * time.Minute + + // GossipPacketMaxByteSize is the maximum allowed size of a packet + // forwarded via wanfed. This is 4MB which should be way bigger than serf + // or memberlist allow practically so it should never be hit in practice. + GossipPacketMaxByteSize = 4 * 1024 * 1024 +) + +type MeshGatewayResolver func(datacenter string) string + +func NewTransport( + tlsConfigurator *tlsutil.Configurator, + transport memberlist.NodeAwareTransport, + datacenter string, + gwResolver MeshGatewayResolver, +) (*Transport, error) { + if tlsConfigurator == nil { + return nil, errors.New("wanfed: tlsConfigurator is nil") + } + if gwResolver == nil { + return nil, errors.New("wanfed: gwResolver is nil") + } + + cp, err := newConnPool(GossipPacketMaxIdleTime) + if err != nil { + return nil, err + } + + t := &Transport{ + NodeAwareTransport: transport, + tlsConfigurator: tlsConfigurator, + datacenter: datacenter, + gwResolver: gwResolver, + pool: cp, + } + return t, nil +} + +type Transport struct { + memberlist.NodeAwareTransport + + tlsConfigurator *tlsutil.Configurator + datacenter string + gwResolver MeshGatewayResolver + pool *connPool +} + +var _ memberlist.NodeAwareTransport = (*Transport)(nil) + +// Shutdown implements memberlist.Transport. +func (t *Transport) Shutdown() error { + err1 := t.pool.Close() + err2 := t.NodeAwareTransport.Shutdown() + if err2 != nil { + // the more important error is err2 + return err2 + } + if err1 != nil { + return err1 + } + return nil +} + +// WriteToAddress implements memberlist.NodeAwareTransport. +func (t *Transport) WriteToAddress(b []byte, addr memberlist.Address) (time.Time, error) { + node, dc, err := SplitNodeName(addr.Name) + if err != nil { + return time.Time{}, err + } + + if dc != t.datacenter { + gwAddr := t.gwResolver(dc) + if gwAddr == "" { + return time.Time{}, structs.ErrDCNotAvailable + } + + dialFunc := func() (net.Conn, error) { + return t.dial(dc, node, pool.ALPN_WANGossipPacket, gwAddr) + } + conn, err := t.pool.AcquireOrDial(addr.Name, dialFunc) + if err != nil { + return time.Time{}, err + } + defer conn.ReturnOrClose() + + // Send the length first. + if err := binary.Write(conn, binary.BigEndian, uint32(len(b))); err != nil { + conn.MarkFailed() + return time.Time{}, err + } + + if _, err = conn.Write(b); err != nil { + conn.MarkFailed() + return time.Time{}, err + } + + return time.Now(), nil + } + + return t.NodeAwareTransport.WriteToAddress(b, addr) +} + +// DialAddressTimeout implements memberlist.NodeAwareTransport. +func (t *Transport) DialAddressTimeout(addr memberlist.Address, timeout time.Duration) (net.Conn, error) { + node, dc, err := SplitNodeName(addr.Name) + if err != nil { + return nil, err + } + + if dc != t.datacenter { + gwAddr := t.gwResolver(dc) + if gwAddr == "" { + return nil, structs.ErrDCNotAvailable + } + + return t.dial(dc, node, pool.ALPN_WANGossipStream, gwAddr) + } + + return t.NodeAwareTransport.DialAddressTimeout(addr, timeout) +} + +// NOTE: There is a close mirror of this method in agent/pool/pool.go:DialTimeoutWithRPCType +func (t *Transport) dial(dc, nodeName, nextProto, addr string) (net.Conn, error) { + wrapper := t.tlsConfigurator.OutgoingALPNRPCWrapper() + if wrapper == nil { + return nil, fmt.Errorf("wanfed: cannot dial via a mesh gateway when outgoing TLS is disabled") + } + + dialer := &net.Dialer{Timeout: 10 * time.Second} + + rawConn, err := dialer.Dial("tcp", addr) + if err != nil { + return nil, err + } + + if tcp, ok := rawConn.(*net.TCPConn); ok { + _ = tcp.SetKeepAlive(true) + _ = tcp.SetNoDelay(true) + } + + tlsConn, err := wrapper(dc, nodeName, nextProto, rawConn) + if err != nil { + return nil, err + } + + return tlsConn, nil +} + +// SplitNodeName splits a node name as it would be represented in +// serf/memberlist in the WAN pool of the form "." +// like "nyc-web42.dc5" => "nyc-web42" & "dc5" +func SplitNodeName(nodeName string) (shortName, dc string, err error) { + parts := strings.Split(nodeName, ".") + if len(parts) != 2 { + return "", "", fmt.Errorf("node name does not encode a datacenter: %s", nodeName) + } + return parts[0], parts[1], nil +} diff -Nru consul-1.7.4+dfsg1/agent/consul/wanfed/wanfed_test.go consul-1.8.7+dfsg1/agent/consul/wanfed/wanfed_test.go --- consul-1.7.4+dfsg1/agent/consul/wanfed/wanfed_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/consul/wanfed/wanfed_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +package wanfed + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSplitNodeName(t *testing.T) { + type testcase struct { + nodeName string + expectShortName string + expectDC string + expectErr bool + } + + cases := []testcase{ + // bad + {nodeName: "", expectErr: true}, + {nodeName: "foo", expectErr: true}, + {nodeName: "foo.bar.baz", expectErr: true}, + // good + {nodeName: "foo.bar", expectShortName: "foo", expectDC: "bar"}, + // weird + {nodeName: ".bar", expectShortName: "", expectDC: "bar"}, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.nodeName, func(t *testing.T) { + gotShortName, gotDC, gotErr := SplitNodeName(tc.nodeName) + if tc.expectErr { + require.Error(t, gotErr) + require.Empty(t, gotShortName) + require.Empty(t, gotDC) + } else { + require.NoError(t, gotErr) + require.Equal(t, tc.expectShortName, gotShortName) + require.Equal(t, tc.expectDC, gotDC) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/coordinate_endpoint_test.go consul-1.8.7+dfsg1/agent/coordinate_endpoint_test.go --- consul-1.7.4+dfsg1/agent/coordinate_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/coordinate_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ func TestCoordinate_Disabled_Response(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` disable_coordinates = true `) defer a.Shutdown() @@ -52,7 +52,7 @@ func TestCoordinate_Datacenters(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -78,7 +78,7 @@ func TestCoordinate_Nodes(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -229,14 +229,14 @@ func TestCoordinate_Node(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") // Make sure we get a 404 with no coordinates. req, _ := http.NewRequest("GET", "/v1/coordinate/node/foo?dc=dc1", nil) resp := httptest.NewRecorder() - obj, err := a.srv.CoordinateNode(resp, req) + _, err := a.srv.CoordinateNode(resp, req) if err != nil { t.Fatalf("err: %v", err) } @@ -285,7 +285,7 @@ // Query back and check the nodes are present. req, _ = http.NewRequest("GET", "/v1/coordinate/node/foo?dc=dc1", nil) resp = httptest.NewRecorder() - obj, err = a.srv.CoordinateNode(resp, req) + obj, err := a.srv.CoordinateNode(resp, req) if err != nil { t.Fatalf("err: %v", err) } @@ -303,7 +303,7 @@ // Filter on a nonexistent node segment req, _ = http.NewRequest("GET", "/v1/coordinate/node/foo?segment=nope", nil) resp = httptest.NewRecorder() - obj, err = a.srv.CoordinateNode(resp, req) + _, err = a.srv.CoordinateNode(resp, req) if err != nil { t.Fatalf("err: %v", err) } @@ -331,7 +331,7 @@ // Make sure the empty filter works req, _ = http.NewRequest("GET", "/v1/coordinate/node/foo?segment=", nil) resp = httptest.NewRecorder() - obj, err = a.srv.CoordinateNode(resp, req) + _, err = a.srv.CoordinateNode(resp, req) if err != nil { t.Fatalf("err: %v", err) } @@ -342,7 +342,7 @@ func TestCoordinate_Update(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -394,7 +394,7 @@ func TestCoordinate_Update_ACLDeny(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/denylist.go consul-1.8.7+dfsg1/agent/denylist.go --- consul-1.7.4+dfsg1/agent/denylist.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/denylist.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +package agent + +import ( + "github.com/armon/go-radix" +) + +// Denylist implements an HTTP endpoint denylist based on a list of endpoint +// prefixes which should be blocked. +type Denylist struct { + tree *radix.Tree +} + +// NewDenylist returns a denylist for the given list of prefixes. +func NewDenylist(prefixes []string) *Denylist { + tree := radix.New() + for _, prefix := range prefixes { + tree.Insert(prefix, nil) + } + return &Denylist{tree} +} + +// Block will return true if the given path is included among any of the +// blocked prefixes. +func (d *Denylist) Block(path string) bool { + _, _, blocked := d.tree.LongestPrefix(path) + return blocked +} diff -Nru consul-1.7.4+dfsg1/agent/denylist_test.go consul-1.8.7+dfsg1/agent/denylist_test.go --- consul-1.7.4+dfsg1/agent/denylist_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/denylist_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +package agent + +import ( + "testing" +) + +func TestDenylist(t *testing.T) { + t.Parallel() + + complex := []string{ + "/a", + "/b/c", + } + + tests := []struct { + desc string + prefixes []string + path string + block bool + }{ + {"nothing blocked root", nil, "/", false}, + {"nothing blocked path", nil, "/a", false}, + {"exact match 1", complex, "/a", true}, + {"exact match 2", complex, "/b/c", true}, + {"subpath", complex, "/a/b", true}, + {"longer prefix", complex, "/apple", true}, + {"longer subpath", complex, "/b/c/d", true}, + {"partial prefix", complex, "/b/d", false}, + {"no match", complex, "/c", false}, + } + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + denylist := NewDenylist(tt.prefixes) + if got, want := denylist.Block(tt.path), tt.block; got != want { + t.Fatalf("got %v want %v", got, want) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/discovery_chain_endpoint.go consul-1.8.7+dfsg1/agent/discovery_chain_endpoint.go --- consul-1.7.4+dfsg1/agent/discovery_chain_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/discovery_chain_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,7 +8,7 @@ cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/decode" "github.com/mitchellh/mapstructure" ) @@ -60,7 +60,7 @@ defer setMeta(resp, &out.QueryMeta) if s.agent.config.HTTPUseCache && args.QueryOptions.UseCache { - raw, m, err := s.agent.cache.Get(cachetype.CompiledDiscoveryChainName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.CompiledDiscoveryChainName, &args) if err != nil { return nil, err } @@ -90,66 +90,9 @@ // discoveryChainReadRequest is the API variation of structs.DiscoveryChainRequest type discoveryChainReadRequest struct { - OverrideMeshGateway structs.MeshGatewayConfig - OverrideProtocol string - OverrideConnectTimeout time.Duration -} - -func (t *discoveryChainReadRequest) UnmarshalJSON(data []byte) (err error) { - type Alias discoveryChainReadRequest - aux := &struct { - OverrideConnectTimeout interface{} - OverrideProtocol interface{} - OverrideMeshGateway *struct{ Mode interface{} } - - OverrideConnectTimeoutSnake interface{} `json:"override_connect_timeout"` - OverrideProtocolSnake interface{} `json:"override_protocol"` - OverrideMeshGatewaySnake *struct{ Mode interface{} } `json:"override_mesh_gateway"` - - *Alias - }{ - Alias: (*Alias)(t), - } - if err = lib.UnmarshalJSON(data, &aux); err != nil { - return err - } - - if aux.OverrideConnectTimeout == nil { - aux.OverrideConnectTimeout = aux.OverrideConnectTimeoutSnake - } - if aux.OverrideProtocol == nil { - aux.OverrideProtocol = aux.OverrideProtocolSnake - } - if aux.OverrideMeshGateway == nil { - aux.OverrideMeshGateway = aux.OverrideMeshGatewaySnake - } - - // weakly typed input - if aux.OverrideProtocol != nil { - switch v := aux.OverrideProtocol.(type) { - case string, float64, bool: - t.OverrideProtocol = fmt.Sprintf("%v", v) - default: - return fmt.Errorf("OverrideProtocol: invalid type %T", v) - } - } - if aux.OverrideMeshGateway != nil { - t.OverrideMeshGateway.Mode = structs.MeshGatewayMode(fmt.Sprintf("%v", aux.OverrideMeshGateway.Mode)) - } - - // duration - if aux.OverrideConnectTimeout != nil { - switch v := aux.OverrideConnectTimeout.(type) { - case string: - if t.OverrideConnectTimeout, err = time.ParseDuration(v); err != nil { - return err - } - case float64: - t.OverrideConnectTimeout = time.Duration(v) - } - } - - return nil + OverrideMeshGateway structs.MeshGatewayConfig `alias:"override_mesh_gateway"` + OverrideProtocol string `alias:"override_protocol"` + OverrideConnectTimeout time.Duration `alias:"override_connect_timeout"` } // discoveryChainReadResponse is the API variation of structs.DiscoveryChainResponse @@ -158,19 +101,17 @@ } func decodeDiscoveryChainReadRequest(raw map[string]interface{}) (*discoveryChainReadRequest, error) { - // lib.TranslateKeys doesn't understand []map[string]interface{} so we have - // to do this part first. - raw = lib.PatchSliceOfMaps(raw, nil, nil) - - lib.TranslateKeys(raw, map[string]string{ - "override_mesh_gateway": "overridemeshgateway", - "override_protocol": "overrideprotocol", - "override_connect_timeout": "overrideconnecttimeout", - }) - var apiReq discoveryChainReadRequest + // TODO(dnephin): at this time only JSON payloads are read, so it is unlikely + // that HookWeakDecodeFromSlice is necessary. It was added while porting + // from lib.PatchSliceOfMaps to decode.HookWeakDecodeFromSlice. It may be + // safe to remove in the future. decodeConf := &mapstructure.DecoderConfig{ - DecodeHook: mapstructure.StringToTimeDurationHookFunc(), + DecodeHook: mapstructure.ComposeDecodeHookFunc( + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + mapstructure.StringToTimeDurationHookFunc(), + ), Result: &apiReq, WeaklyTypedInput: true, } diff -Nru consul-1.7.4+dfsg1/agent/discovery_chain_endpoint_test.go consul-1.8.7+dfsg1/agent/discovery_chain_endpoint_test.go --- consul-1.7.4+dfsg1/agent/discovery_chain_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/discovery_chain_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestDiscoveryChainRead(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/dns/dns.go consul-1.8.7+dfsg1/agent/dns/dns.go --- consul-1.7.4+dfsg1/agent/dns/dns.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/dns/dns.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +package dns + +import "regexp" + +// MaxLabelLength is the maximum length for a name that can be used in DNS. +const MaxLabelLength = 63 + +// InvalidNameRe is a regex that matches characters which can not be included in +// a DNS name. +var InvalidNameRe = regexp.MustCompile(`[^A-Za-z0-9\\-]+`) diff -Nru consul-1.7.4+dfsg1/agent/dns.go consul-1.8.7+dfsg1/agent/dns.go --- consul-1.7.4+dfsg1/agent/dns.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/dns.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,21 @@ package agent import ( + "context" "encoding/hex" "fmt" "net" + "regexp" "strings" "sync/atomic" "time" - "regexp" - metrics "github.com/armon/go-metrics" radix "github.com/armon/go-radix" "github.com/coredns/coredns/plugin/pkg/dnsutil" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/config" - "github.com/hashicorp/consul/agent/consul" + agentdns "github.com/hashicorp/consul/agent/dns" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/ipaddr" @@ -38,12 +38,8 @@ staleCounterThreshold = 5 * time.Second defaultMaxUDPSize = 512 - - MaxDNSLabelLength = 63 ) -var InvalidDnsRe = regexp.MustCompile(`[^A-Za-z0-9\\-]+`) - type dnsSOAConfig struct { Refresh uint32 // 3600 by default Retry uint32 // 600 @@ -77,6 +73,17 @@ enterpriseDNSConfig } +type serviceLookup struct { + Network string + Datacenter string + Service string + Tag string + MaxRecursionLevel int + Connect bool + Ingress bool + structs.EnterpriseMeta +} + // DNSServer is used to wrap an Agent and expose various // service discovery endpoints using a DNS interface. type DNSServer struct { @@ -306,7 +313,11 @@ } func serviceNodeCanonicalDNSName(sn *structs.ServiceNode, domain string) string { - return serviceCanonicalDNSName(sn.ServiceName, sn.Datacenter, domain, &sn.EnterpriseMeta) + return serviceCanonicalDNSName(sn.ServiceName, "service", sn.Datacenter, domain, &sn.EnterpriseMeta) +} + +func serviceIngressDNSName(service, datacenter, domain string, entMeta *structs.EnterpriseMeta) string { + return serviceCanonicalDNSName(service, "ingress", datacenter, domain, entMeta) } // handlePtr is used to handle "reverse" DNS queries @@ -446,14 +457,14 @@ switch req.Question[0].Qtype { case dns.TypeSOA: - ns, glue := d.nameservers(cfg, req.IsEdns0() != nil, maxRecursionLevelDefault, req) + ns, glue := d.nameservers(cfg, maxRecursionLevelDefault) m.Answer = append(m.Answer, d.soa(cfg)) m.Ns = append(m.Ns, ns...) m.Extra = append(m.Extra, glue...) m.SetRcode(req, dns.RcodeSuccess) case dns.TypeNS: - ns, glue := d.nameservers(cfg, req.IsEdns0() != nil, maxRecursionLevelDefault, req) + ns, glue := d.nameservers(cfg, maxRecursionLevelDefault) m.Answer = ns m.Extra = glue m.SetRcode(req, dns.RcodeSuccess) @@ -500,8 +511,14 @@ // nameservers returns the names and ip addresses of up to three random servers // in the current cluster which serve as authoritative name servers for zone. -func (d *DNSServer) nameservers(cfg *dnsConfig, edns bool, maxRecursionLevel int, req *dns.Msg) (ns []dns.RR, extra []dns.RR) { - out, err := d.lookupServiceNodes(cfg, d.agent.config.Datacenter, structs.ConsulServiceName, "", structs.DefaultEnterpriseMeta(), false, maxRecursionLevel) +func (d *DNSServer) nameservers(cfg *dnsConfig, maxRecursionLevel int) (ns []dns.RR, extra []dns.RR) { + out, err := d.lookupServiceNodes(cfg, serviceLookup{ + Datacenter: d.agent.config.Datacenter, + Service: structs.ConsulServiceName, + Connect: false, + Ingress: false, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }) if err != nil { d.logger.Warn("Unable to get list of servers", "error", err) return nil, nil @@ -518,7 +535,7 @@ for _, o := range out.Nodes { name, dc := o.Node.Node, o.Node.Datacenter - if InvalidDnsRe.MatchString(name) { + if agentdns.InvalidNameRe.MatchString(name) { d.logger.Warn("Skipping invalid node for NS records", "node", name) continue } @@ -538,7 +555,7 @@ } ns = append(ns, nsrr) - extra = append(extra, d.makeRecordFromNode(dc, o.Node, dns.TypeANY, fqdn, cfg.NodeTTL, maxRecursionLevel)...) + extra = append(extra, d.makeRecordFromNode(o.Node, dns.TypeANY, fqdn, cfg.NodeTTL, maxRecursionLevel)...) // don't provide more than 3 servers if len(ns) >= 3 { @@ -598,7 +615,7 @@ done := false for i := len(labels) - 1; i >= 0 && !done; i-- { switch labels[i] { - case "service", "connect", "node", "query", "addr": + case "service", "connect", "ingress", "node", "query", "addr": queryParts = labels[:i] querySuffixes = labels[i+1:] queryKind = labels[i] @@ -630,6 +647,14 @@ goto INVALID } + lookup := serviceLookup{ + Network: network, + Datacenter: datacenter, + Connect: false, + Ingress: false, + MaxRecursionLevel: maxRecursionLevel, + EnterpriseMeta: entMeta, + } // Support RFC 2782 style syntax if n == 2 && strings.HasPrefix(queryParts[1], "_") && strings.HasPrefix(queryParts[0], "_") { @@ -641,8 +666,10 @@ tag = "" } + lookup.Tag = tag + lookup.Service = queryParts[0][1:] // _name._tag.service.consul - d.serviceLookup(cfg, network, datacenter, queryParts[0][1:], tag, &entMeta, false, req, resp, maxRecursionLevel) + d.serviceLookup(cfg, lookup, req, resp) // Consul 0.3 and prior format for SRV queries } else { @@ -653,8 +680,11 @@ tag = strings.Join(queryParts[:n-1], ".") } + lookup.Tag = tag + lookup.Service = queryParts[n-1] + // tag[.tag].name.service.consul - d.serviceLookup(cfg, network, datacenter, queryParts[n-1], tag, &entMeta, false, req, resp, maxRecursionLevel) + d.serviceLookup(cfg, lookup, req, resp) } case "connect": if len(queryParts) < 1 { @@ -665,8 +695,37 @@ goto INVALID } + lookup := serviceLookup{ + Network: network, + Datacenter: datacenter, + Service: queryParts[len(queryParts)-1], + Connect: true, + Ingress: false, + MaxRecursionLevel: maxRecursionLevel, + EnterpriseMeta: entMeta, + } // name.connect.consul - d.serviceLookup(cfg, network, datacenter, queryParts[len(queryParts)-1], "", &entMeta, true, req, resp, maxRecursionLevel) + d.serviceLookup(cfg, lookup, req, resp) + case "ingress": + if len(queryParts) < 1 { + goto INVALID + } + + if !d.parseDatacenterAndEnterpriseMeta(querySuffixes, cfg, &datacenter, &entMeta) { + goto INVALID + } + + lookup := serviceLookup{ + Network: network, + Datacenter: datacenter, + Service: queryParts[len(queryParts)-1], + Connect: false, + Ingress: true, + MaxRecursionLevel: maxRecursionLevel, + EnterpriseMeta: entMeta, + } + // name.ingress.consul + d.serviceLookup(cfg, lookup, req, resp) case "node": if len(queryParts) < 1 { goto INVALID @@ -759,6 +818,17 @@ return strings.TrimSuffix(query, shorter) } +// computeRCode Return the DNS Error code from Consul Error +func (d *DNSServer) computeRCode(err error) int { + if err == nil { + return dns.RcodeSuccess + } + if structs.IsErrNoDCPath(err) || structs.IsErrQueryNotFound(err) { + return dns.RcodeNameError + } + return dns.RcodeServerFailure +} + // nodeLookup is used to handle a node query func (d *DNSServer) nodeLookup(cfg *dnsConfig, network, datacenter, node string, req, resp *dns.Msg, maxRecursionLevel int) { // Only handle ANY, A, AAAA, and TXT type requests @@ -779,7 +849,11 @@ out, err := d.lookupNode(cfg, args) if err != nil { d.logger.Error("rpc error", "error", err) - resp.SetRcode(req, dns.RcodeServerFailure) + rCode := d.computeRCode(err) + if rCode == dns.RcodeNameError { + d.addSOA(cfg, resp) + } + resp.SetRcode(req, rCode) return } @@ -801,7 +875,7 @@ q := req.Question[0] // Only compute A and CNAME record if query is not TXT type if qType != dns.TypeTXT { - records := d.makeRecordFromNode(n.Datacenter, n, q.Qtype, q.Name, cfg.NodeTTL, maxRecursionLevel) + records := d.makeRecordFromNode(n, q.Qtype, q.Name, cfg.NodeTTL, maxRecursionLevel) resp.Answer = append(resp.Answer, records...) } @@ -817,7 +891,7 @@ useCache := cfg.UseCache RPC: if useCache { - raw, _, err := d.agent.cache.Get(cachetype.NodeServicesName, args) + raw, _, err := d.agent.cache.Get(context.TODO(), cachetype.NodeServicesName, args) if err != nil { return nil, err } @@ -1076,28 +1150,26 @@ } // lookupServiceNodes returns nodes with a given service. -func (d *DNSServer) lookupServiceNodes(cfg *dnsConfig, datacenter, service, tag string, entMeta *structs.EnterpriseMeta, connect bool, maxRecursionLevel int) (structs.IndexedCheckServiceNodes, error) { +func (d *DNSServer) lookupServiceNodes(cfg *dnsConfig, lookup serviceLookup) (structs.IndexedCheckServiceNodes, error) { args := structs.ServiceSpecificRequest{ - Connect: connect, - Datacenter: datacenter, - ServiceName: service, - ServiceTags: []string{tag}, - TagFilter: tag != "", + Connect: lookup.Connect, + Ingress: lookup.Ingress, + Datacenter: lookup.Datacenter, + ServiceName: lookup.Service, + ServiceTags: []string{lookup.Tag}, + TagFilter: lookup.Tag != "", QueryOptions: structs.QueryOptions{ Token: d.agent.tokens.UserToken(), AllowStale: cfg.AllowStale, MaxAge: cfg.CacheMaxAge, }, - } - - if entMeta != nil { - args.EnterpriseMeta = *entMeta + EnterpriseMeta: lookup.EnterpriseMeta, } var out structs.IndexedCheckServiceNodes if cfg.UseCache { - raw, m, err := d.agent.cache.Get(cachetype.HealthServicesName, &args) + raw, m, err := d.agent.cache.Get(context.TODO(), cachetype.HealthServicesName, &args) if err != nil { return out, err } @@ -1108,7 +1180,7 @@ } d.logger.Trace("cache results for service", "cache_hit", m.Hit, - "service", service, + "service", lookup.Service, ) out = *reply @@ -1141,11 +1213,15 @@ } // serviceLookup is used to handle a service query -func (d *DNSServer) serviceLookup(cfg *dnsConfig, network, datacenter, service, tag string, entMeta *structs.EnterpriseMeta, connect bool, req, resp *dns.Msg, maxRecursionLevel int) { - out, err := d.lookupServiceNodes(cfg, datacenter, service, tag, entMeta, connect, maxRecursionLevel) +func (d *DNSServer) serviceLookup(cfg *dnsConfig, lookup serviceLookup, req, resp *dns.Msg) { + out, err := d.lookupServiceNodes(cfg, lookup) if err != nil { d.logger.Error("rpc error", "error", err) - resp.SetRcode(req, dns.RcodeServerFailure) + rCode := d.computeRCode(err) + if rCode == dns.RcodeNameError { + d.addSOA(cfg, resp) + } + resp.SetRcode(req, rCode) return } @@ -1160,17 +1236,17 @@ out.Nodes.Shuffle() // Determine the TTL - ttl, _ := cfg.GetTTLForService(service) + ttl, _ := cfg.GetTTLForService(lookup.Service) // Add various responses depending on the request qType := req.Question[0].Qtype if qType == dns.TypeSRV { - d.serviceSRVRecords(cfg, datacenter, out.Nodes, req, resp, ttl, maxRecursionLevel) + d.serviceSRVRecords(cfg, lookup.Datacenter, out.Nodes, req, resp, ttl, lookup.MaxRecursionLevel) } else { - d.serviceNodeRecords(cfg, datacenter, out.Nodes, req, resp, ttl, maxRecursionLevel) + d.serviceNodeRecords(cfg, lookup.Datacenter, out.Nodes, req, resp, ttl, lookup.MaxRecursionLevel) } - d.trimDNSResponse(cfg, network, req, resp) + d.trimDNSResponse(cfg, lookup.Network, req, resp) // If the answer is empty and the response isn't truncated, return not found if len(resp.Answer) == 0 && !resp.Truncated { @@ -1239,12 +1315,12 @@ // If they give a bogus query name, treat that as a name error, // not a full on server error. We have to use a string compare // here since the RPC layer loses the type information. - if err != nil && err.Error() == consul.ErrQueryNotFound.Error() { - d.addSOA(cfg, resp) - resp.SetRcode(req, dns.RcodeNameError) - return - } else if err != nil { - resp.SetRcode(req, dns.RcodeServerFailure) + if err != nil { + rCode := d.computeRCode(err) + if rCode == dns.RcodeNameError { + d.addSOA(cfg, resp) + } + resp.SetRcode(req, rCode) return } @@ -1303,7 +1379,7 @@ RPC: if cfg.UseCache { - raw, m, err := d.agent.cache.Get(cachetype.PreparedQueryName, &args) + raw, m, err := d.agent.cache.Get(context.TODO(), cachetype.PreparedQueryName, &args) if err != nil { return nil, err } @@ -1474,7 +1550,7 @@ // Craft dns records for a node // In case of an SRV query the answer will be a IN SRV and additional data will store an IN A to the node IP // Otherwise it will return a IN A record -func (d *DNSServer) makeRecordFromNode(dc string, node *structs.Node, qType uint16, qName string, ttl time.Duration, maxRecursionLevel int) []dns.RR { +func (d *DNSServer) makeRecordFromNode(node *structs.Node, qType uint16, qName string, ttl time.Duration, maxRecursionLevel int) []dns.RR { addrTranslate := TranslateAddressAcceptDomain if qType == dns.TypeA { addrTranslate |= TranslateAddressAcceptIPv4 @@ -1694,7 +1770,7 @@ } func (d *DNSServer) generateMeta(dc string, qName string, node *structs.Node, ttl time.Duration) []dns.RR { - var extra []dns.RR + extra := make([]dns.RR, 0, len(node.Meta)) for key, value := range node.Meta { txt := value if !strings.HasPrefix(strings.ToLower(key), "rfc1035-") { diff -Nru consul-1.7.4+dfsg1/agent/dns_oss.go consul-1.8.7+dfsg1/agent/dns_oss.go --- consul-1.7.4+dfsg1/agent/dns_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/dns_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,6 +26,6 @@ return false } -func serviceCanonicalDNSName(name, datacenter, domain string, _ *structs.EnterpriseMeta) string { - return fmt.Sprintf("%s.service.%s.%s", name, datacenter, domain) +func serviceCanonicalDNSName(name, kind, datacenter, domain string, _ *structs.EnterpriseMeta) string { + return fmt.Sprintf("%s.%s.%s.%s", name, kind, datacenter, domain) } diff -Nru consul-1.7.4+dfsg1/agent/dns_test.go consul-1.8.7+dfsg1/agent/dns_test.go --- consul-1.7.4+dfsg1/agent/dns_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/dns_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,6 +11,7 @@ "time" "github.com/hashicorp/consul/agent/config" + agentdns "github.com/hashicorp/consul/agent/dns" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib" @@ -116,11 +117,11 @@ if addr != "[2001:4860:4860::8888]:53" { t.Fatalf("bad: %v", addr) } - addr, err = recursorAddr("1.2.3.4::53") + _, err = recursorAddr("1.2.3.4::53") if err == nil || !strings.Contains(err.Error(), "too many colons in address") { t.Fatalf("err: %v", err) } - addr, err = recursorAddr("2001:4860:4860::8888:::53") + _, err = recursorAddr("2001:4860:4860::8888:::53") if err == nil || !strings.Contains(err.Error(), "too many colons in address") { t.Fatalf("err: %v", err) } @@ -157,7 +158,7 @@ func TestDNS_Over_TCP(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -190,7 +191,7 @@ func TestDNS_EmptyAltDomain(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -205,7 +206,7 @@ func TestDNS_NodeLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -282,7 +283,7 @@ require.Equal(t, "127.0.0.1", aRec.A.String()) require.Equal(t, uint32(0), aRec.Hdr.Ttl) - txt, ok = in.Answer[1].(*dns.TXT) + _, ok = in.Answer[1].(*dns.TXT) require.True(t, ok, "Second answer is not a TXT record") // lookup a non-existing node, we should receive a SOA @@ -300,7 +301,7 @@ func TestDNS_CaseInsensitiveNodeLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -332,7 +333,7 @@ func TestDNS_NodeLookup_PeriodName(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -372,7 +373,7 @@ func TestDNS_NodeLookup_AAAA(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -429,7 +430,7 @@ }) defer server2.Shutdown() //Mock the agent startup with the necessary configs - agent := NewTestAgent(t, t.Name(), + agent := NewTestAgent(t, `recursors = ["`+server1.Addr+`", "`+server2.Addr+`"] `) defer agent.Shutdown() @@ -463,7 +464,7 @@ }) defer server3.Shutdown() //Mock the agent startup with the necessary configs - agent := NewTestAgent(t, t.Name(), + agent := NewTestAgent(t, `recursors = ["`+server1.Addr+`", "`+server2.Addr+`","`+server3.Addr+`"] `) defer agent.Shutdown() @@ -487,7 +488,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -536,7 +537,7 @@ } func TestDNS_NodeLookup_TXT(t *testing.T) { - a := NewTestAgent(t, t.Name(), ``) + a := NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -582,7 +583,7 @@ } func TestDNS_NodeLookup_TXT_DontSuppress(t *testing.T) { - a := NewTestAgent(t, t.Name(), `dns_config = { enable_additional_node_meta_txt = false }`) + a := NewTestAgent(t, `dns_config = { enable_additional_node_meta_txt = false }`) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -628,7 +629,7 @@ } func TestDNS_NodeLookup_ANY(t *testing.T) { - a := NewTestAgent(t, t.Name(), ``) + a := NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -669,7 +670,7 @@ } func TestDNS_NodeLookup_ANY_DontSuppressTXT(t *testing.T) { - a := NewTestAgent(t, t.Name(), `dns_config = { enable_additional_node_meta_txt = false }`) + a := NewTestAgent(t, `dns_config = { enable_additional_node_meta_txt = false }`) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -710,7 +711,7 @@ } func TestDNS_NodeLookup_A_SuppressTXT(t *testing.T) { - a := NewTestAgent(t, t.Name(), `dns_config = { enable_additional_node_meta_txt = false }`) + a := NewTestAgent(t, `dns_config = { enable_additional_node_meta_txt = false }`) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -747,7 +748,7 @@ func TestDNS_EDNS0(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -787,7 +788,7 @@ func TestDNS_EDNS0_ECS(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -799,7 +800,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -879,7 +880,7 @@ func TestDNS_ReverseLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -919,7 +920,7 @@ func TestDNS_ReverseLookup_CustomDomain(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` domain = "custom" `) defer a.Shutdown() @@ -961,7 +962,7 @@ func TestDNS_ReverseLookup_IPV6(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1001,7 +1002,7 @@ func TestDNS_ServiceReverseLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1013,7 +1014,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, Address: "127.0.0.2", }, @@ -1042,14 +1043,14 @@ if !ok { t.Fatalf("Bad: %#v", in.Answer[0]) } - if ptrRec.Ptr != serviceCanonicalDNSName("db", "dc1", "consul", nil)+"." { + if ptrRec.Ptr != serviceCanonicalDNSName("db", "service", "dc1", "consul", nil)+"." { t.Fatalf("Bad: %#v", ptrRec) } } func TestDNS_ServiceReverseLookup_IPV6(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1061,7 +1062,7 @@ Address: "2001:db8::1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, Address: "2001:db8::ff00:42:8329", }, @@ -1090,14 +1091,14 @@ if !ok { t.Fatalf("Bad: %#v", in.Answer[0]) } - if ptrRec.Ptr != serviceCanonicalDNSName("db", "dc1", "consul", nil)+"." { + if ptrRec.Ptr != serviceCanonicalDNSName("db", "service", "dc1", "consul", nil)+"." { t.Fatalf("Bad: %#v", ptrRec) } } func TestDNS_ServiceReverseLookup_CustomDomain(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` domain = "custom" `) defer a.Shutdown() @@ -1111,7 +1112,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, Address: "127.0.0.2", }, @@ -1140,7 +1141,7 @@ if !ok { t.Fatalf("Bad: %#v", in.Answer[0]) } - if ptrRec.Ptr != serviceCanonicalDNSName("db", "dc1", "custom", nil)+"." { + if ptrRec.Ptr != serviceCanonicalDNSName("db", "service", "dc1", "custom", nil)+"." { t.Fatalf("Bad: %#v", ptrRec) } } @@ -1148,7 +1149,7 @@ func TestDNS_SOA_Settings(t *testing.T) { t.Parallel() testSoaWithConfig := func(config string, ttl, expire, refresh, retry uint) { - a := NewTestAgent(t, t.Name(), config) + a := NewTestAgent(t, config) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1180,7 +1181,7 @@ func TestDNS_ServiceReverseLookupNodeAddress(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1192,7 +1193,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, Address: "127.0.0.1", }, @@ -1228,7 +1229,7 @@ func TestDNS_ServiceLookupNoMultiCNAME(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1283,7 +1284,7 @@ func TestDNS_ServiceLookupPreferNoCNAME(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1341,7 +1342,7 @@ func TestDNS_ServiceLookupMultiAddrNoCNAME(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1415,7 +1416,7 @@ func TestDNS_ServiceLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1427,7 +1428,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -1536,7 +1537,7 @@ func TestDNS_ServiceLookupWithInternalServiceAddress(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "my.test-node" `) defer a.Shutdown() @@ -1594,7 +1595,7 @@ func TestDNS_ConnectServiceLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1636,9 +1637,112 @@ } } +func TestDNS_IngressServiceLookup(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, "") + defer a.Shutdown() + testrpc.WaitForLeader(t, a.RPC, "dc1") + + // Register ingress-gateway service + { + args := structs.TestRegisterIngressGateway(t) + var out struct{} + require.Nil(t, a.RPC("Catalog.Register", args, &out)) + } + + // Register db service + { + args := &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + Service: "db", + Address: "", + Port: 80, + }, + } + + var out struct{} + require.Nil(t, a.RPC("Catalog.Register", args, &out)) + } + + // Register proxy-defaults with 'http' protocol + { + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + WriteRequest: structs.WriteRequest{Token: "root"}, + } + var out bool + require.Nil(t, a.RPC("ConfigEntry.Apply", req, &out)) + require.True(t, out) + } + + // Register ingress-gateway config entry + { + args := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Protocol: "http", + Services: []structs.IngressService{ + {Name: "db"}, + {Name: "api"}, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + } + var out bool + require.Nil(t, a.RPC("ConfigEntry.Apply", req, &out)) + require.True(t, out) + } + + // Look up the service + questions := []string{ + "api.ingress.consul.", + "api.ingress.dc1.consul.", + "db.ingress.consul.", + "db.ingress.dc1.consul.", + } + for _, question := range questions { + t.Run(question, func(t *testing.T) { + m := new(dns.Msg) + m.SetQuestion(question, dns.TypeA) + + c := new(dns.Client) + in, _, err := c.Exchange(m, a.DNSAddr()) + require.Nil(t, err) + require.Len(t, in.Answer, 1) + + cnameRec, ok := in.Answer[0].(*dns.A) + require.True(t, ok) + require.Equal(t, question, cnameRec.Hdr.Name) + require.Equal(t, uint32(0), cnameRec.Hdr.Ttl) + require.Equal(t, "127.0.0.1", cnameRec.A.String()) + }) + } +} + func TestDNS_ExternalServiceLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1697,7 +1801,7 @@ func TestDNS_InifiniteRecursion(t *testing.T) { // This test should not create an infinite recursion t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` domain = "CONSUL." node_name = "test node" `) @@ -1751,7 +1855,7 @@ func TestDNS_ExternalServiceToConsulCNAMELookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` domain = "CONSUL." node_name = "test node" `) @@ -1850,7 +1954,7 @@ func TestDNS_NSRecords(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` domain = "CONSUL." node_name = "server1" `) @@ -1885,7 +1989,7 @@ func TestDNS_NSRecords_IPV6(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` domain = "CONSUL." node_name = "server1" advertise_addr = "::1" @@ -1922,7 +2026,7 @@ func TestDNS_ExternalServiceToConsulCNAMENestedLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "test-node" `) defer a.Shutdown() @@ -2049,7 +2153,7 @@ func TestDNS_ServiceLookup_ServiceAddress_A(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2061,7 +2165,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Address: "127.0.0.2", Port: 12345, }, @@ -2150,7 +2254,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -2164,7 +2268,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Address: "www.google.com", Port: 12345, }, @@ -2249,7 +2353,7 @@ func TestDNS_ServiceLookup_ServiceAddressIPV6(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2261,7 +2365,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Address: "2607:20:4005:808::200e", Port: 12345, }, @@ -2342,14 +2446,14 @@ func TestDNS_ServiceLookup_WanTranslation(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` + a1 := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true acl_datacenter = "" `) defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` datacenter = "dc2" translate_wan_addrs = true acl_datacenter = "" @@ -2550,7 +2654,7 @@ func TestDNS_Lookup_TaggedIPAddresses(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2740,7 +2844,7 @@ func TestDNS_CaseInsensitiveServiceLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2752,7 +2856,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "Db", - Tags: []string{"Master"}, + Tags: []string{"Primary"}, Port: 12345, }, } @@ -2783,9 +2887,9 @@ // Try some variations to make sure case doesn't matter. questions := []string{ - "master.db.service.consul.", - "mASTER.dB.service.consul.", - "MASTER.dB.service.consul.", + "primary.db.service.consul.", + "pRIMARY.dB.service.consul.", + "PRIMARY.dB.service.consul.", "db.service.consul.", "DB.service.consul.", "Db.service.consul.", @@ -2811,7 +2915,7 @@ func TestDNS_ServiceLookup_TagPeriod(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2822,7 +2926,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"v1.master"}, + Tags: []string{"v1.primary"}, Port: 12345, }, } @@ -2833,7 +2937,7 @@ } m1 := new(dns.Msg) - m1.SetQuestion("v1.master2.db.service.consul.", dns.TypeSRV) + m1.SetQuestion("v1.primary2.db.service.consul.", dns.TypeSRV) c1 := new(dns.Client) in, _, err := c1.Exchange(m1, a.DNSAddr()) @@ -2846,7 +2950,7 @@ } m := new(dns.Msg) - m.SetQuestion("v1.master.db.service.consul.", dns.TypeSRV) + m.SetQuestion("v1.primary.db.service.consul.", dns.TypeSRV) c := new(dns.Client) in, _, err = c.Exchange(m, a.DNSAddr()) @@ -2894,7 +2998,7 @@ } t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3021,7 +3125,7 @@ } t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3126,7 +3230,7 @@ func TestDNS_ServiceLookup_PreparedQueryNamePeriod(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3205,7 +3309,7 @@ func TestDNS_ServiceLookup_Dedup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3217,7 +3321,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -3234,7 +3338,7 @@ Service: &structs.NodeService{ ID: "db2", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, Port: 12345, }, } @@ -3249,7 +3353,7 @@ Service: &structs.NodeService{ ID: "db3", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, Port: 12346, }, } @@ -3308,7 +3412,7 @@ func TestDNS_ServiceLookup_Dedup_SRV(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3320,7 +3424,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -3337,7 +3441,7 @@ Service: &structs.NodeService{ ID: "db2", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, Port: 12345, }, } @@ -3352,7 +3456,7 @@ Service: &structs.NodeService{ ID: "db3", Service: "db", - Tags: []string{"slave"}, + Tags: []string{"replica"}, Port: 12346, }, } @@ -3444,7 +3548,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -3476,7 +3580,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -3517,7 +3621,7 @@ } defer resolver.Close() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+resolver.LocalAddr().String()+`"] // host must cause a connection|read|write timeout dns_config { recursor_timeout = "`+serverClientTimeout.String()+`" @@ -3556,7 +3660,7 @@ func TestDNS_ServiceLookup_FilterCritical(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3568,7 +3672,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3589,7 +3693,7 @@ Address: "127.0.0.2", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3608,7 +3712,7 @@ Address: "127.0.0.2", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3628,7 +3732,7 @@ Address: "127.0.0.3", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -3642,7 +3746,7 @@ Address: "127.0.0.4", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3712,7 +3816,7 @@ func TestDNS_ServiceLookup_OnlyFailing(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -3724,7 +3828,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3745,7 +3849,7 @@ Address: "127.0.0.2", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3764,7 +3868,7 @@ Address: "127.0.0.2", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3825,7 +3929,7 @@ func TestDNS_ServiceLookup_OnlyPassing(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { only_passing = true } @@ -3841,7 +3945,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3863,7 +3967,7 @@ Address: "127.0.0.2", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3884,7 +3988,7 @@ Address: "127.0.0.3", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, Check: &structs.HealthCheck{ @@ -3949,7 +4053,7 @@ newCfg := *a.Config newCfg.DNSOnlyPassing = false - err := a.ReloadConfig(&newCfg) + err := a.reloadConfigInternal(&newCfg) require.NoError(t, err) // only_passing is now false. we should now get two nodes @@ -3968,7 +4072,7 @@ func TestDNS_ServiceLookup_Randomize(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -4099,7 +4203,7 @@ func TestDNS_TCP_and_UDP_Truncate(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { enable_truncate = true } @@ -4167,7 +4271,7 @@ if protocol == "udp" { maxSz = 8192 } - m.SetEdns0(uint16(maxSz), true) + m.SetEdns0(maxSz, true) c := new(dns.Client) c.Net = protocol m.Compress = compress @@ -4204,7 +4308,7 @@ func TestDNS_ServiceLookup_Truncate(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { enable_truncate = true } @@ -4273,7 +4377,7 @@ func TestDNS_ServiceLookup_LargeResponses(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { enable_truncate = true } @@ -4291,7 +4395,7 @@ Address: fmt.Sprintf("127.0.0.%d", i+1), Service: &structs.NodeService{ Service: longServiceName, - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -4311,7 +4415,7 @@ Name: longServiceName, Service: structs.ServiceQuery{ Service: longServiceName, - Tags: []string{"master"}, + Tags: []string{"primary"}, }, }, } @@ -4323,7 +4427,7 @@ // Look up the service directly and via prepared query. questions := []string{ - "_" + longServiceName + "._master.service.consul.", + "_" + longServiceName + "._primary.service.consul.", longServiceName + ".query.consul.", } for _, question := range questions { @@ -4379,7 +4483,7 @@ func testDNSServiceLookupResponseLimits(t *testing.T, answerLimit int, qType uint16, expectedService, expectedQuery, expectedQueryID int) (bool, error) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "test-node" dns_config { udp_answer_limit = `+fmt.Sprintf("%d", answerLimit)+` @@ -4468,7 +4572,7 @@ func checkDNSService(t *testing.T, generateNumNodes int, aRecordLimit int, qType uint16, expectedResultsCount int, udpSize uint16, udpAnswerLimit int) error { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "test-node" dns_config { a_record_limit = `+fmt.Sprintf("%d", aRecordLimit)+` @@ -4701,7 +4805,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -4798,7 +4902,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -4896,7 +5000,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] dns_config { node_ttl = "10s" @@ -5014,7 +5118,7 @@ func TestDNS_ServiceLookup_TTL(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { service_ttl = { "d*" = "42s" @@ -5037,7 +5141,7 @@ Address: address, Service: &structs.NodeService{ Service: service, - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345 + idx, }, } @@ -5092,7 +5196,7 @@ func TestDNS_PreparedQuery_TTL(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { service_ttl = { "d*" = "42s" @@ -5116,7 +5220,7 @@ Address: address, Service: &structs.NodeService{ Service: service, - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345 + idx, }, } @@ -5212,14 +5316,14 @@ func TestDNS_PreparedQuery_Failover(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` + a1 := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true acl_datacenter = "" `) defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` datacenter = "dc2" translate_wan_addrs = true acl_datacenter = "" @@ -5324,7 +5428,7 @@ func TestDNS_ServiceLookup_SRV_RFC(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5335,7 +5439,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -5346,10 +5450,10 @@ } questions := []string{ - "_db._master.service.dc1.consul.", - "_db._master.service.consul.", - "_db._master.dc1.consul.", - "_db._master.consul.", + "_db._primary.service.dc1.consul.", + "_db._primary.service.consul.", + "_db._primary.dc1.consul.", + "_db._primary.consul.", } for _, question := range questions { @@ -5399,7 +5503,7 @@ func TestDNS_ServiceLookup_SRV_RFC_TCP_Default(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5410,7 +5514,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -5483,7 +5587,7 @@ } for _, tt := range tests { t.Run("ACLToken == "+tt.token, func(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_token = "`+tt.token+`" acl_master_token = "root" acl_datacenter = "dc1" @@ -5525,7 +5629,7 @@ } } func TestDNS_ServiceLookup_MetaTXT(t *testing.T) { - a := NewTestAgent(t, t.Name(), `dns_config = { enable_additional_node_meta_txt = true }`) + a := NewTestAgent(t, `dns_config = { enable_additional_node_meta_txt = true }`) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5538,7 +5642,7 @@ }, Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -5571,7 +5675,7 @@ } func TestDNS_ServiceLookup_SuppressTXT(t *testing.T) { - a := NewTestAgent(t, t.Name(), `dns_config = { enable_additional_node_meta_txt = false }`) + a := NewTestAgent(t, `dns_config = { enable_additional_node_meta_txt = false }`) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5585,7 +5689,7 @@ }, Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -5615,7 +5719,7 @@ func TestDNS_AddressLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5652,7 +5756,7 @@ func TestDNS_AddressLookupIPV6(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5688,9 +5792,69 @@ } } +// TestDNS_NonExistentDC_Server verifies NXDOMAIN is returned when +// Consul server agent is queried for a service in a non-existent +// domain. +func TestDNS_NonExistentDC_Server(t *testing.T) { + t.Parallel() + a := NewTestAgent(t, "") + defer a.Shutdown() + testrpc.WaitForLeader(t, a.RPC, "dc1") + + m := new(dns.Msg) + m.SetQuestion("consul.service.dc2.consul.", dns.TypeANY) + + c := new(dns.Client) + in, _, err := c.Exchange(m, a.DNSAddr()) + if err != nil { + t.Fatalf("err: %v", err) + } + + if in.Rcode != dns.RcodeNameError { + t.Fatalf("Expected RCode: %#v, had: %#v", dns.RcodeNameError, in.Rcode) + } +} + +// TestDNS_NonExistentDC_RPC verifies NXDOMAIN is returned when +// Consul server agent is queried over RPC by a non-server agent +// for a service in a non-existent domain +func TestDNS_NonExistentDC_RPC(t *testing.T) { + t.Parallel() + s := NewTestAgent(t, ` + node_name = "test-server" + `) + + defer s.Shutdown() + c := NewTestAgent(t, ` + node_name = "test-client" + bootstrap = false + server = false + `) + defer c.Shutdown() + + // Join LAN cluster + addr := fmt.Sprintf("127.0.0.1:%d", s.Config.SerfPortLAN) + _, err := c.JoinLAN([]string{addr}) + require.NoError(t, err) + testrpc.WaitForTestAgent(t, c.RPC, "dc1") + + m := new(dns.Msg) + m.SetQuestion("consul.service.dc2.consul.", dns.TypeANY) + + d := new(dns.Client) + in, _, err := d.Exchange(m, c.DNSAddr()) + if err != nil { + t.Fatalf("err: %v", err) + } + + if in.Rcode != dns.RcodeNameError { + t.Fatalf("Expected RCode: %#v, had: %#v", dns.RcodeNameError, in.Rcode) + } +} + func TestDNS_NonExistingLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5719,7 +5883,7 @@ func TestDNS_NonExistingLookupEmptyAorAAAA(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -5858,7 +6022,7 @@ func TestDNS_AltDomains_Service(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` alt_domain = "test-domain." `) defer a.Shutdown() @@ -5872,7 +6036,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -5930,7 +6094,7 @@ func TestDNS_AltDomains_SOA(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "test-node" alt_domain = "test-domain." `) @@ -5975,7 +6139,7 @@ // than one potential match (i.e. ambiguous match) // it should select the longer matching domain when dispatching t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` node_name = "test-node" alt_domain = "test.consul." `) @@ -6016,7 +6180,7 @@ func TestDNS_PreparedQuery_AllowStale(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` dns_config { allow_stale = true max_stale = "1s" @@ -6066,7 +6230,7 @@ func TestDNS_InvalidQueries(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -6108,7 +6272,7 @@ func TestDNS_PreparedQuery_AgentSource(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -6614,7 +6778,7 @@ func TestDNS_Compression_Query(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -6626,7 +6790,7 @@ Address: "127.0.0.1", Service: &structs.NodeService{ Service: "db", - Tags: []string{"master"}, + Tags: []string{"primary"}, Port: 12345, }, } @@ -6701,7 +6865,7 @@ func TestDNS_Compression_ReverseLookup(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -6758,7 +6922,7 @@ }) defer recursor.Shutdown() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["`+recursor.Addr+`"] `) defer a.Shutdown() @@ -6814,7 +6978,7 @@ } for _, test := range tests { t.Run(test.desc, func(t *testing.T) { - if got, want := InvalidDnsRe.MatchString(test.in), test.invalid; got != want { + if got, want := agentdns.InvalidNameRe.MatchString(test.in), test.invalid; got != want { t.Fatalf("Expected %v to return %v", test.in, want) } }) @@ -6825,7 +6989,7 @@ func TestDNS_ConfigReload(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` recursors = ["8.8.8.8:53"] dns_config = { allow_stale = false @@ -6894,7 +7058,7 @@ newCfg.DNSSOA.Expire = 30 newCfg.DNSSOA.Minttl = 40 - err := a.ReloadConfig(&newCfg) + err := a.reloadConfigInternal(&newCfg) require.NoError(t, err) for _, s := range a.dnsServers { @@ -6926,7 +7090,7 @@ func TestDNS_ReloadConfig_DuringQuery(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -6975,7 +7139,7 @@ // reload the config halfway through, that should not affect the ongoing query newCfg := *a.Config newCfg.DNSAllowStale = true - a.ReloadConfig(&newCfg) + a.reloadConfigInternal(&newCfg) select { case in := <-res: diff -Nru consul-1.7.4+dfsg1/agent/event_endpoint_test.go consul-1.8.7+dfsg1/agent/event_endpoint_test.go --- consul-1.7.4+dfsg1/agent/event_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/event_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestEventFire(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -58,7 +58,7 @@ func TestEventFire_token(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` acl_default_policy = "deny" `) defer a.Shutdown() @@ -120,7 +120,7 @@ func TestEventList(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -153,7 +153,7 @@ func TestEventList_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -191,7 +191,7 @@ func TestEventList_ACLFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -242,7 +242,7 @@ func TestEventList_Blocking(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -294,7 +294,7 @@ func TestEventList_EventBufOrder(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/federation_state_endpoint.go consul-1.8.7+dfsg1/agent/federation_state_endpoint.go --- consul-1.7.4+dfsg1/agent/federation_state_endpoint.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/federation_state_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,91 @@ +package agent + +import ( + "net/http" + "strings" + + "github.com/hashicorp/consul/agent/structs" +) + +// GET /v1/internal/federation-state/ +func (s *HTTPServer) FederationStateGet(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + datacenterName := strings.TrimPrefix(req.URL.Path, "/v1/internal/federation-state/") + if datacenterName == "" { + return nil, BadRequestError{Reason: "Missing datacenter name"} + } + + args := structs.FederationStateQuery{ + Datacenter: datacenterName, + } + if done := s.parse(resp, req, &args.TargetDatacenter, &args.QueryOptions); done { + return nil, nil + } + + var out structs.FederationStateResponse + defer setMeta(resp, &out.QueryMeta) + if err := s.agent.RPC("FederationState.Get", &args, &out); err != nil { + return nil, err + } + + if out.State == nil { + resp.WriteHeader(http.StatusNotFound) + return nil, nil + } + + return out, nil +} + +// GET /v1/internal/federation-states +func (s *HTTPServer) FederationStateList(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + var args structs.DCSpecificRequest + if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { + return nil, nil + } + + if args.Datacenter == "" { + args.Datacenter = s.agent.config.Datacenter + } + + var out structs.IndexedFederationStates + defer setMeta(resp, &out.QueryMeta) + if err := s.agent.RPC("FederationState.List", &args, &out); err != nil { + return nil, err + } + + // make sure we return an array and not nil + if out.States == nil { + out.States = make(structs.FederationStates, 0) + } + + return out.States, nil +} + +// GET /v1/internal/federation-states/mesh-gateways +func (s *HTTPServer) FederationStateListMeshGateways(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + var args structs.DCSpecificRequest + if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { + return nil, nil + } + + if args.Datacenter == "" { + args.Datacenter = s.agent.config.Datacenter + } + + var out structs.DatacenterIndexedCheckServiceNodes + defer setMeta(resp, &out.QueryMeta) + if err := s.agent.RPC("FederationState.ListMeshGateways", &args, &out); err != nil { + return nil, err + } + + // make sure we return a arrays and not nils + if out.DatacenterNodes == nil { + out.DatacenterNodes = make(map[string]structs.CheckServiceNodes) + } + for dc, nodes := range out.DatacenterNodes { + if nodes == nil { + out.DatacenterNodes[dc] = make(structs.CheckServiceNodes, 0) + } + } + + return out.DatacenterNodes, nil +} diff -Nru consul-1.7.4+dfsg1/agent/health_endpoint.go consul-1.8.7+dfsg1/agent/health_endpoint.go --- consul-1.7.4+dfsg1/agent/health_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/health_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,7 @@ import ( "fmt" "net/http" + "net/url" "strconv" "strings" @@ -11,6 +12,12 @@ "github.com/hashicorp/consul/api" ) +const ( + serviceHealth = "service" + connectHealth = "connect" + ingressHealth = "ingress" +) + func (s *HTTPServer) HealthChecksInState(resp http.ResponseWriter, req *http.Request) (interface{}, error) { // Set default DC args := structs.ChecksInStateRequest{} @@ -153,17 +160,28 @@ return out.HealthChecks, nil } +// HealthIngressServiceNodes should return "all the healthy ingress gateway instances +// that I can use to access this connect-enabled service without mTLS". +func (s *HTTPServer) HealthIngressServiceNodes(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + return s.healthServiceNodes(resp, req, ingressHealth) +} + +// HealthConnectServiceNodes should return "all healthy connect-enabled +// endpoints (e.g. could be side car proxies or native instances) for this +// service so I can connect with mTLS". func (s *HTTPServer) HealthConnectServiceNodes(resp http.ResponseWriter, req *http.Request) (interface{}, error) { - return s.healthServiceNodes(resp, req, true) + return s.healthServiceNodes(resp, req, connectHealth) } +// HealthServiceNodes should return "all the healthy instances of this service +// registered so I can connect directly to them". func (s *HTTPServer) HealthServiceNodes(resp http.ResponseWriter, req *http.Request) (interface{}, error) { - return s.healthServiceNodes(resp, req, false) + return s.healthServiceNodes(resp, req, serviceHealth) } -func (s *HTTPServer) healthServiceNodes(resp http.ResponseWriter, req *http.Request, connect bool) (interface{}, error) { +func (s *HTTPServer) healthServiceNodes(resp http.ResponseWriter, req *http.Request, healthType string) (interface{}, error) { // Set default DC - args := structs.ServiceSpecificRequest{Connect: connect} + args := structs.ServiceSpecificRequest{} if err := s.parseEntMetaNoWildcard(req, &args.EnterpriseMeta); err != nil { return nil, err } @@ -181,9 +199,17 @@ } // Determine the prefix - prefix := "/v1/health/service/" - if connect { + var prefix string + switch healthType { + case connectHealth: prefix = "/v1/health/connect/" + args.Connect = true + case ingressHealth: + prefix = "/v1/health/ingress/" + args.Ingress = true + default: + // serviceHealth is the default type + prefix = "/v1/health/service/" } // Pull out the service name @@ -199,7 +225,7 @@ defer setMeta(resp, &out.QueryMeta) if s.agent.config.HTTPUseCache && args.QueryOptions.UseCache { - raw, m, err := s.agent.cache.Get(cachetype.HealthServicesName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.HealthServicesName, &args) if err != nil { return nil, err } @@ -224,26 +250,15 @@ out.ConsistencyLevel = args.QueryOptions.ConsistencyLevel() // Filter to only passing if specified - if _, ok := params[api.HealthPassing]; ok { - val := params.Get(api.HealthPassing) - // Backwards-compat to allow users to specify ?passing without a value. This - // should be removed in Consul 0.10. - var filter bool - if val == "" { - filter = true - } else { - var err error - filter, err = strconv.ParseBool(val) - if err != nil { - resp.WriteHeader(http.StatusBadRequest) - fmt.Fprint(resp, "Invalid value for ?passing") - return nil, nil - } - } + filter, err := getBoolQueryParam(params, api.HealthPassing) + if err != nil { + resp.WriteHeader(http.StatusBadRequest) + fmt.Fprint(resp, "Invalid value for ?passing") + return nil, nil + } - if filter { - out.Nodes = filterNonPassing(out.Nodes) - } + if filter { + out.Nodes = filterNonPassing(out.Nodes) } // Translate addresses after filtering so we don't waste effort. @@ -273,6 +288,27 @@ return out.Nodes, nil } +func getBoolQueryParam(params url.Values, key string) (bool, error) { + var param bool + if _, ok := params[key]; ok { + val := params.Get(key) + // Orginally a comment declared this check should be removed after Consul + // 0.10, to no longer support using ?passing without a value. However, I + // think this is a reasonable experience for a user and so am keeping it + // here. + if val == "" { + param = true + } else { + var err error + param, err = strconv.ParseBool(val) + if err != nil { + return false, err + } + } + } + return param, nil +} + // filterNonPassing is used to filter out any nodes that have check that are not passing func filterNonPassing(nodes structs.CheckServiceNodes) structs.CheckServiceNodes { n := len(nodes) diff -Nru consul-1.7.4+dfsg1/agent/health_endpoint_test.go consul-1.8.7+dfsg1/agent/health_endpoint_test.go --- consul-1.7.4+dfsg1/agent/health_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/health_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,7 @@ func TestHealthChecksInState(t *testing.T) { t.Parallel() t.Run("warning", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() req, _ := http.NewRequest("GET", "/v1/health/state/warning?dc=dc1", nil) @@ -45,7 +45,7 @@ }) t.Run("passing", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() req, _ := http.NewRequest("GET", "/v1/health/state/passing?dc=dc1", nil) @@ -70,7 +70,7 @@ func TestHealthChecksInState_NodeMetaFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() args := &structs.RegisterRequest{ @@ -110,7 +110,7 @@ func TestHealthChecksInState_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() args := &structs.RegisterRequest{ @@ -156,7 +156,7 @@ func TestHealthChecksInState_DistanceSort(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() args := &structs.RegisterRequest{ @@ -230,7 +230,7 @@ func TestHealthNodeChecks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -265,7 +265,7 @@ func TestHealthNodeChecks_Filtering(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -309,7 +309,7 @@ func TestHealthServiceChecks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -365,7 +365,7 @@ func TestHealthServiceChecks_NodeMetaFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -418,7 +418,7 @@ func TestHealthServiceChecks_Filtering(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -479,7 +479,7 @@ func TestHealthServiceChecks_DistanceSort(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -559,7 +559,7 @@ func TestHealthServiceNodes(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -685,7 +685,7 @@ func TestHealthServiceNodes_NodeMetaFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -738,7 +738,7 @@ func TestHealthServiceNodes_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -800,7 +800,7 @@ func TestHealthServiceNodes_DistanceSort(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() dc := "dc1" // Create a service check @@ -879,7 +879,7 @@ func TestHealthServiceNodes_PassingFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() dc := "dc1" @@ -976,7 +976,7 @@ func TestHealthServiceNodes_CheckType(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1029,14 +1029,14 @@ func TestHealthServiceNodes_WanTranslation(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` + a1 := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true acl_datacenter = "" `) defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` datacenter = "dc2" translate_wan_addrs = true acl_datacenter = "" @@ -1117,7 +1117,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Register @@ -1139,10 +1139,80 @@ assert.Len(nodes[0].Checks, 0) } +func TestHealthIngressServiceNodes(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, "") + defer a.Shutdown() + testrpc.WaitForLeader(t, a.RPC, "dc1") + + // Register gateway + gatewayArgs := structs.TestRegisterIngressGateway(t) + gatewayArgs.Service.Address = "127.0.0.27" + var out struct{} + require.NoError(t, a.RPC("Catalog.Register", gatewayArgs, &out)) + + args := structs.TestRegisterRequest(t) + require.NoError(t, a.RPC("Catalog.Register", args, &out)) + + // Associate service to gateway + cfgArgs := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Protocol: "tcp", + Services: []structs.IngressService{ + {Name: args.Service.Service}, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: cfgArgs, + } + var outB bool + require.Nil(t, a.RPC("ConfigEntry.Apply", req, &outB)) + require.True(t, outB) + + t.Run("associated service", func(t *testing.T) { + assert := assert.New(t) + req, _ := http.NewRequest("GET", fmt.Sprintf( + "/v1/health/ingress/%s", args.Service.Service), nil) + resp := httptest.NewRecorder() + obj, err := a.srv.HealthIngressServiceNodes(resp, req) + assert.Nil(err) + assertIndex(t, resp) + + nodes := obj.(structs.CheckServiceNodes) + require.Len(t, nodes, 1) + require.Equal(t, structs.ServiceKindIngressGateway, nodes[0].Service.Kind) + require.Equal(t, gatewayArgs.Service.Address, nodes[0].Service.Address) + require.Equal(t, gatewayArgs.Service.Proxy, nodes[0].Service.Proxy) + }) + + t.Run("non-associated service", func(t *testing.T) { + assert := assert.New(t) + req, _ := http.NewRequest("GET", + "/v1/health/connect/notexist", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.HealthIngressServiceNodes(resp, req) + assert.Nil(err) + assertIndex(t, resp) + + nodes := obj.(structs.CheckServiceNodes) + require.Len(t, nodes, 0) + }) +} + func TestHealthConnectServiceNodes_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -1180,7 +1250,7 @@ func TestHealthConnectServiceNodes_PassingFilter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Register diff -Nru consul-1.7.4+dfsg1/agent/http_decode_test.go consul-1.8.7+dfsg1/agent/http_decode_test.go --- consul-1.7.4+dfsg1/agent/http_decode_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/http_decode_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1984,283 +1984,6 @@ } } -// discoveryChainReadRequest: -// OverrideMeshGateway structs.MeshGatewayConfig -// Mode structs.MeshGatewayMode // string -// OverrideProtocol string -// OverrideConnectTimeout time.Duration -func TestDecodeDiscoveryChainRead(t *testing.T) { - var weaklyTypedDurationTCs = []translateValueTestCase{ - { - desc: "positive string integer (weakly typed)", - durations: &durationTC{ - in: `"2000"`, - }, - wantErr: true, - }, - { - desc: "negative string integer (weakly typed)", - durations: &durationTC{ - in: `"-50"`, - }, - wantErr: true, - }, - } - - for _, tc := range append(durationTestCases, weaklyTypedDurationTCs...) { - t.Run(tc.desc, func(t *testing.T) { - // set up request body - jsonStr := fmt.Sprintf(`{ - "OverrideConnectTimeout": %s - }`, tc.durations.in) - body := bytes.NewBuffer([]byte(jsonStr)) - - var out discoveryChainReadRequest - err := decodeBody(body, &out) - if err == nil && tc.wantErr { - t.Fatal("expected err, got nil") - } - if err != nil && !tc.wantErr { - t.Fatalf("expected nil error, got %v", err) - } - if out.OverrideConnectTimeout != tc.durations.want { - t.Fatalf("expected OverrideConnectTimeout to be %s, got %s", tc.durations.want, out.OverrideConnectTimeout) - } - }) - } - - // Other possibly weakly-typed inputs.. - var weaklyTypedStringTCs = []struct { - desc string - in, want string - wantErr bool - }{ - { - desc: "positive integer for string field (weakly typed)", - in: `200`, - want: "200", - }, - { - desc: "negative integer for string field (weakly typed)", - in: `-200`, - want: "-200", - }, - { - desc: "bool for string field (weakly typed)", - in: `true`, - want: "true", // previously: "1" - }, - { - desc: "float for string field (weakly typed)", - in: `1.2223`, - want: "1.2223", - }, - { - desc: "map for string field (weakly typed)", - in: `{}`, - wantErr: true, - }, - { - desc: "slice for string field (weakly typed)", - in: `[]`, - wantErr: true, // previously: want: "" - }, - } - - for _, tc := range weaklyTypedStringTCs { - t.Run(tc.desc, func(t *testing.T) { - // set up request body - jsonStr := fmt.Sprintf(`{ - "OverrideProtocol": %[1]s, - "OverrideMeshGateway": {"Mode": %[1]s} - }`, tc.in) - body := bytes.NewBuffer([]byte(jsonStr)) - - var out discoveryChainReadRequest - err := decodeBody(body, &out) - - if err == nil && tc.wantErr { - t.Fatal("expected err, got nil") - } - if err != nil && !tc.wantErr { - t.Fatalf("expected nil error, got %v", err) - } - if out.OverrideProtocol != tc.want { - t.Fatalf("expected OverrideProtocol to be %s, got %s", tc.want, out.OverrideProtocol) - } - if out.OverrideMeshGateway.Mode != structs.MeshGatewayMode(tc.want) { - t.Fatalf("expected OverrideMeshGateway.Mode to be %s, got %s", tc.want, out.OverrideMeshGateway.Mode) - } - }) - } - - // translate field tcs - - overrideMeshGatewayFields := []string{ - `"OverrideMeshGateway": {"Mode": %s}`, - `"override_mesh_gateway": {"Mode": %s}`, - } - - overrideMeshGatewayEqFn := func(out interface{}, want interface{}) error { - got := out.(discoveryChainReadRequest).OverrideMeshGateway.Mode - if got != structs.MeshGatewayMode(want.(string)) { - return fmt.Errorf("expected OverrideMeshGateway to be %s, got %s", want, got) - } - return nil - } - - var translateOverrideMeshGatewayTCs = []translateKeyTestCase{ - { - desc: "OverrideMeshGateway: both set", - in: []interface{}{`"one"`, `"two"`}, - want: "one", - jsonFmtStr: `{` + strings.Join(overrideMeshGatewayFields, ",") + `}`, - equalityFn: overrideMeshGatewayEqFn, - }, - { - desc: "OverrideMeshGateway: first set", - in: []interface{}{`"one"`}, - want: "one", - jsonFmtStr: `{` + overrideMeshGatewayFields[0] + `}`, - equalityFn: overrideMeshGatewayEqFn, - }, - { - desc: "OverrideMeshGateway: second set", - in: []interface{}{`"two"`}, - want: "two", - jsonFmtStr: `{` + overrideMeshGatewayFields[1] + `}`, - equalityFn: overrideMeshGatewayEqFn, - }, - { - desc: "OverrideMeshGateway: neither set", - in: []interface{}{}, - want: "", // zero value - jsonFmtStr: `{}`, - equalityFn: overrideMeshGatewayEqFn, - }, - } - - overrideProtocolFields := []string{ - `"OverrideProtocol": %s`, - `"override_protocol": %s`, - } - - overrideProtocolEqFn := func(out interface{}, want interface{}) error { - got := out.(discoveryChainReadRequest).OverrideProtocol - if got != want { - return fmt.Errorf("expected OverrideProtocol to be %s, got %s", want, got) - } - return nil - } - - var translateOverrideProtocolTCs = []translateKeyTestCase{ - { - desc: "OverrideProtocol: both set", - in: []interface{}{`"one"`, `"two"`}, - want: "one", - jsonFmtStr: `{` + strings.Join(overrideProtocolFields, ",") + `}`, - equalityFn: overrideProtocolEqFn, - }, - { - desc: "OverrideProtocol: first set", - in: []interface{}{`"one"`}, - want: "one", - jsonFmtStr: `{` + overrideProtocolFields[0] + `}`, - equalityFn: overrideProtocolEqFn, - }, - { - desc: "OverrideProtocol: second set", - in: []interface{}{`"two"`}, - want: "two", - jsonFmtStr: `{` + overrideProtocolFields[1] + `}`, - equalityFn: overrideProtocolEqFn, - }, - { - desc: "OverrideProtocol: neither set", - in: []interface{}{}, - want: "", // zero value - jsonFmtStr: `{}`, - equalityFn: overrideProtocolEqFn, - }, - } - - overrideConnectTimeoutFields := []string{ - `"OverrideConnectTimeout": %s`, - `"override_connect_timeout": %s`, - } - - overrideConnectTimeoutEqFn := func(out interface{}, want interface{}) error { - got := out.(discoveryChainReadRequest).OverrideConnectTimeout - if got != want { - return fmt.Errorf("expected OverrideConnectTimeout to be %s, got %s", want, got) - } - return nil - } - - var translateOverrideConnectTimeoutTCs = []translateKeyTestCase{ - { - desc: "OverrideConnectTimeout: both set", - in: []interface{}{`"2h0m"`, `"3h0m"`}, - want: 2 * time.Hour, - jsonFmtStr: "{" + strings.Join(overrideConnectTimeoutFields, ",") + "}", - equalityFn: overrideConnectTimeoutEqFn, - }, - { - desc: "OverrideConnectTimeout: first set", - in: []interface{}{`"2h0m"`}, - want: 2 * time.Hour, - jsonFmtStr: "{" + overrideConnectTimeoutFields[0] + "}", - equalityFn: overrideConnectTimeoutEqFn, - }, - { - desc: "OverrideConnectTimeout: second set", - in: []interface{}{`"3h0m"`}, - want: 3 * time.Hour, - jsonFmtStr: "{" + overrideConnectTimeoutFields[1] + "}", - equalityFn: overrideConnectTimeoutEqFn, - }, - { - desc: "OverrideConnectTimeout: neither set", - in: []interface{}{}, - want: time.Duration(0), - jsonFmtStr: "{}", - equalityFn: overrideConnectTimeoutEqFn, - }, - } - - // lib.TranslateKeys(raw, map[string]string{ - // "override_mesh_gateway": "overridemeshgateway", - // "override_protocol": "overrideprotocol", - // "override_connect_timeout": "overrideconnecttimeout", - // }) - - translateFieldTCs := [][]translateKeyTestCase{ - translateOverrideMeshGatewayTCs, - translateOverrideProtocolTCs, - translateOverrideConnectTimeoutTCs, - } - - for _, tcGroup := range translateFieldTCs { - for _, tc := range tcGroup { - t.Run(tc.desc, func(t *testing.T) { - jsonStr := fmt.Sprintf(tc.jsonFmtStr, tc.in...) - body := bytes.NewBuffer([]byte(jsonStr)) - - var out discoveryChainReadRequest - err := decodeBody(body, &out) - if err != nil { - t.Fatal(err) - } - - if err := tc.equalityFn(out, tc.want); err != nil { - t.Fatal(err) - } - }) - } - } - -} - // IntentionRequest: // Datacenter string // Op structs.IntentionOp diff -Nru consul-1.7.4+dfsg1/agent/http.go consul-1.8.7+dfsg1/agent/http.go --- consul-1.7.4+dfsg1/agent/http.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/http.go 2020-12-10 21:46:52.000000000 +0000 @@ -82,9 +82,9 @@ // HTTPServer provides an HTTP api for an agent. type HTTPServer struct { *http.Server - ln net.Listener - agent *Agent - blacklist *Blacklist + ln net.Listener + agent *Agent + denylist *Denylist // proto is filled by the agent to "http" or "https". proto string @@ -169,20 +169,21 @@ func (fs *templatedIndexFS) Open(name string) (http.File, error) { file, err := fs.fs.Open(name) - if err == nil && name == "/index.html" { - content, _ := ioutil.ReadAll(file) - file.Seek(0, 0) - t, err := template.New("fmtedindex").Parse(string(content)) - if err != nil { - return nil, err - } - var out bytes.Buffer - err = t.Execute(&out, fs.templateVars()) - - file = newTemplatedFile(&out, file) + if err != nil || name != "/index.html" { + return file, err } - return file, err + content, _ := ioutil.ReadAll(file) + file.Seek(0, 0) + t, err := template.New("fmtedindex").Parse(string(content)) + if err != nil { + return nil, err + } + var out bytes.Buffer + if err := t.Execute(&out, fs.templateVars()); err != nil { + return nil, err + } + return newTemplatedFile(&out, file), nil } // endpoint is a Consul-specific HTTP handler that takes the usual arguments in @@ -350,6 +351,7 @@ if s.agent.config.DisableHTTPUnprintableCharFilter { h = mux } + h = s.enterpriseHandler(h) return &wrappedMux{ mux: mux, handler: h, @@ -424,7 +426,7 @@ } logURL = aclEndpointRE.ReplaceAllString(logURL, "$1$4") - if s.blacklist.Block(req.URL.Path) { + if s.denylist.Block(req.URL.Path) { errMsg := "Endpoint is blocked by agent configuration" httpLogger.Error("Request error", "method", req.Method, @@ -495,7 +497,7 @@ fmt.Fprint(resp, err.Error()) case isNotFound(err): resp.WriteHeader(http.StatusNotFound) - fmt.Fprintf(resp, err.Error()) + fmt.Fprint(resp, err.Error()) case isTooManyRequests(err): resp.WriteHeader(http.StatusTooManyRequests) fmt.Fprint(resp, err.Error()) @@ -597,7 +599,7 @@ if err != nil { return nil, err } - return buf, err + return buf, nil } // Returns true if the UI is enabled. @@ -925,10 +927,7 @@ } // parseTokenInternal is used to parse the ?token query param or the X-Consul-Token header or -// Authorization Bearer token (RFC6750) and -// optionally resolve proxy tokens to real ACL tokens. If the token is invalid or not specified it will populate -// the token with the agents UserToken (acl_token in the consul configuration) -// Parsing has the following priority: ?token, X-Consul-Token and last "Authorization: Bearer " +// Authorization Bearer token (RFC6750). func (s *HTTPServer) parseTokenInternal(req *http.Request, token *string) { tok := "" if other := req.URL.Query().Get("token"); other != "" { @@ -949,25 +948,33 @@ // must be "Bearer" if strings.ToLower(scheme) == "bearer" { - // Since Bearer tokens shouldnt contain spaces (rfc6750#section-2.1) + // Since Bearer tokens shouldn't contain spaces (rfc6750#section-2.1) // "value" is tokenized, only the first item is used tok = strings.TrimSpace(strings.Split(value, " ")[0]) } } } - if tok != "" { - *token = tok + *token = tok + return +} + +// parseTokenWithDefault passes through to parseTokenInternal and optionally resolves proxy tokens to real ACL tokens. +// If the token is invalid or not specified it will populate the token with the agents UserToken (acl_token in the +// consul configuration) +func (s *HTTPServer) parseTokenWithDefault(req *http.Request, token *string) { + s.parseTokenInternal(req, token) // parseTokenInternal modifies *token + if token != nil && *token == "" { + *token = s.agent.tokens.UserToken() return } - - *token = s.agent.tokens.UserToken() + return } // parseToken is used to parse the ?token query param or the X-Consul-Token header or -// Authorization Bearer token header (RFC6750) +// Authorization Bearer token header (RFC6750). This function is used widely in Consul's endpoints func (s *HTTPServer) parseToken(req *http.Request, token *string) { - s.parseTokenInternal(req, token) + s.parseTokenWithDefault(req, token) } func sourceAddrFromRequest(req *http.Request) string { @@ -1014,7 +1021,7 @@ if filterList, ok := req.URL.Query()["node-meta"]; ok { filters := make(map[string]string) for _, filter := range filterList { - key, value := ParseMetaPair(filter) + key, value := parseMetaPair(filter) filters[key] = value } return filters @@ -1022,12 +1029,20 @@ return nil } +func parseMetaPair(raw string) (string, string) { + pair := strings.SplitN(raw, ":", 2) + if len(pair) == 2 { + return pair[0], pair[1] + } + return pair[0], "" +} + // parseInternal is a convenience method for endpoints that need // to use both parseWait and parseDC. func (s *HTTPServer) parseInternal(resp http.ResponseWriter, req *http.Request, dc *string, b structs.QueryOptionsCompat) bool { s.parseDC(req, dc) var token string - s.parseTokenInternal(req, &token) + s.parseTokenWithDefault(req, &token) b.SetToken(token) var filter string s.parseFilter(req, &filter) diff -Nru consul-1.7.4+dfsg1/agent/http_oss.go consul-1.8.7+dfsg1/agent/http_oss.go --- consul-1.7.4+dfsg1/agent/http_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/http_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,10 +12,10 @@ func (s *HTTPServer) parseEntMeta(req *http.Request, entMeta *structs.EnterpriseMeta) error { if headerNS := req.Header.Get("X-Consul-Namespace"); headerNS != "" { - return BadRequestError{Reason: "Invalid header: \"X-Consul-Namespace\" - Namespaces is a Consul Enterprise feature"} + return BadRequestError{Reason: "Invalid header: \"X-Consul-Namespace\" - Namespaces are a Consul Enterprise feature"} } if queryNS := req.URL.Query().Get("ns"); queryNS != "" { - return BadRequestError{Reason: "Invalid query parameter: \"ns\" - Namespaces is a Consul Enterprise feature"} + return BadRequestError{Reason: "Invalid query parameter: \"ns\" - Namespaces are a Consul Enterprise feature"} } return nil } @@ -36,7 +36,7 @@ switch quotedField { case `"Namespace"`: - return fmt.Errorf("%v - Namespaces is a Consul Enterprise feature", err) + return fmt.Errorf("%v - Namespaces are a Consul Enterprise feature", err) } } @@ -47,8 +47,13 @@ func parseACLAuthMethodEnterpriseMeta(req *http.Request, _ *structs.ACLAuthMethodEnterpriseMeta) error { if methodNS := req.URL.Query().Get("authmethod-ns"); methodNS != "" { - return BadRequestError{Reason: "Invalid query parameter: \"authmethod-ns\" - Namespaces is a Consul Enterprise feature"} + return BadRequestError{Reason: "Invalid query parameter: \"authmethod-ns\" - Namespaces are a Consul Enterprise feature"} } return nil } + +// enterpriseHandler is a noop for the enterprise implementation. we pass the original back +func (s *HTTPServer) enterpriseHandler(next http.Handler) http.Handler { + return next +} diff -Nru consul-1.7.4+dfsg1/agent/http_oss_test.go consul-1.8.7+dfsg1/agent/http_oss_test.go --- consul-1.7.4+dfsg1/agent/http_oss_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/http_oss_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -62,7 +62,7 @@ func TestHTTPAPI_MethodNotAllowed_OSS(t *testing.T) { // To avoid actually triggering RPCs that are allowed, lock everything down // with default-deny ACLs. This drops the test runtime from 11s to 0.6s. - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -124,7 +124,7 @@ } func TestHTTPAPI_OptionMethod_OSS(t *testing.T) { - a := NewTestAgent(t, t.Name(), `acl_datacenter = "dc1"`) + a := NewTestAgent(t, `acl_datacenter = "dc1"`) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -160,7 +160,7 @@ } func TestHTTPAPI_AllowedNets_OSS(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_datacenter = "dc1" http_config { allow_write_http_from = ["127.0.0.1/8"] diff -Nru consul-1.7.4+dfsg1/agent/http_register.go consul-1.8.7+dfsg1/agent/http_register.go --- consul-1.7.4+dfsg1/agent/http_register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/http_register.go 2020-12-10 21:46:52.000000000 +0000 @@ -68,6 +68,7 @@ registerEndpoint("/v1/catalog/service/", []string{"GET"}, (*HTTPServer).CatalogServiceNodes) registerEndpoint("/v1/catalog/node/", []string{"GET"}, (*HTTPServer).CatalogNodeServices) registerEndpoint("/v1/catalog/node-services/", []string{"GET"}, (*HTTPServer).CatalogNodeServiceList) + registerEndpoint("/v1/catalog/gateway-services/", []string{"GET"}, (*HTTPServer).CatalogGatewayServices) registerEndpoint("/v1/config/", []string{"GET", "DELETE"}, (*HTTPServer).Config) registerEndpoint("/v1/config", []string{"PUT"}, (*HTTPServer).ConfigApply) registerEndpoint("/v1/connect/ca/configuration", []string{"GET", "PUT"}, (*HTTPServer).ConnectCAConfiguration) @@ -80,6 +81,9 @@ registerEndpoint("/v1/coordinate/nodes", []string{"GET"}, (*HTTPServer).CoordinateNodes) registerEndpoint("/v1/coordinate/node/", []string{"GET"}, (*HTTPServer).CoordinateNode) registerEndpoint("/v1/coordinate/update", []string{"PUT"}, (*HTTPServer).CoordinateUpdate) + registerEndpoint("/v1/internal/federation-states", []string{"GET"}, (*HTTPServer).FederationStateList) + registerEndpoint("/v1/internal/federation-states/mesh-gateways", []string{"GET"}, (*HTTPServer).FederationStateListMeshGateways) + registerEndpoint("/v1/internal/federation-state/", []string{"GET"}, (*HTTPServer).FederationStateGet) registerEndpoint("/v1/discovery-chain/", []string{"GET", "POST"}, (*HTTPServer).DiscoveryChainRead) registerEndpoint("/v1/event/fire/", []string{"PUT"}, (*HTTPServer).EventFire) registerEndpoint("/v1/event/list", []string{"GET"}, (*HTTPServer).EventList) @@ -88,9 +92,11 @@ registerEndpoint("/v1/health/state/", []string{"GET"}, (*HTTPServer).HealthChecksInState) registerEndpoint("/v1/health/service/", []string{"GET"}, (*HTTPServer).HealthServiceNodes) registerEndpoint("/v1/health/connect/", []string{"GET"}, (*HTTPServer).HealthConnectServiceNodes) + registerEndpoint("/v1/health/ingress/", []string{"GET"}, (*HTTPServer).HealthIngressServiceNodes) registerEndpoint("/v1/internal/ui/nodes", []string{"GET"}, (*HTTPServer).UINodes) registerEndpoint("/v1/internal/ui/node/", []string{"GET"}, (*HTTPServer).UINodeInfo) registerEndpoint("/v1/internal/ui/services", []string{"GET"}, (*HTTPServer).UIServices) + registerEndpoint("/v1/internal/ui/gateway-services-nodes/", []string{"GET"}, (*HTTPServer).UIGatewayServicesNodes) registerEndpoint("/v1/internal/acl/authorize", []string{"POST"}, (*HTTPServer).ACLAuthorize) registerEndpoint("/v1/kv/", []string{"GET", "PUT", "DELETE"}, (*HTTPServer).KVSEndpoint) registerEndpoint("/v1/operator/raft/configuration", []string{"GET"}, (*HTTPServer).OperatorRaftConfiguration) diff -Nru consul-1.7.4+dfsg1/agent/http_test.go consul-1.8.7+dfsg1/agent/http_test.go --- consul-1.7.4+dfsg1/agent/http_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/http_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -42,7 +42,7 @@ // Only testing mode, since uid/gid might not be settable // from test environment. - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` addresses { http = "unix://`+socket+`" } @@ -111,7 +111,7 @@ t.Fatalf("not a regular file: %s", socket) } - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` addresses { http = "unix://`+socket+`" } @@ -132,7 +132,7 @@ t.Parallel() // Fire up an agent with TLS enabled. - a := NewTestAgentWithFields(t, true, TestAgent{ + a := StartTestAgent(t, TestAgent{ UseTLS: true, HCL: ` key_file = "../test/client_certs/server.key" @@ -287,7 +287,7 @@ func TestHTTPAPI_BlockEndpoints(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` http_config { block_endpoints = ["/v1/agent/self"] } @@ -320,14 +320,14 @@ } func TestHTTPAPI_Ban_Nonprintable_Characters(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() - req, err := http.NewRequest("GET", "/v1/kv/bad\x00ness", nil) + _, err := http.NewRequest("GET", "/v1/kv/bad\x00ness", nil) if err == nil { t.Fatal("expected error") } - req, err = http.NewRequest("GET", "/v1/kv/bad%00ness", nil) + req, err := http.NewRequest("GET", "/v1/kv/bad%00ness", nil) if err != nil { t.Fatal(err) } @@ -339,14 +339,14 @@ } func TestHTTPAPI_Allow_Nonprintable_Characters_With_Flag(t *testing.T) { - a := NewTestAgent(t, t.Name(), "disable_http_unprintable_char_filter = true") + a := NewTestAgent(t, "disable_http_unprintable_char_filter = true") defer a.Shutdown() - req, err := http.NewRequest("GET", "/v1/kv/bad\x00ness", nil) + _, err := http.NewRequest("GET", "/v1/kv/bad\x00ness", nil) if err == nil { t.Fatal("expected error") } - req, err = http.NewRequest("GET", "/v1/kv/bad%00ness", nil) + req, err := http.NewRequest("GET", "/v1/kv/bad%00ness", nil) if err != nil { t.Fatal(err) } @@ -362,7 +362,7 @@ t.Parallel() // Header should not be present if address translation is off. { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() resp := httptest.NewRecorder() @@ -381,7 +381,7 @@ // Header should be set to true if it's turned on. { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` translate_wan_addrs = true `) defer a.Shutdown() @@ -403,7 +403,7 @@ func TestHTTPAPIResponseHeaders(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` http_config { response_headers = { "Access-Control-Allow-Origin" = "*" @@ -433,7 +433,7 @@ } func TestUIResponseHeaders(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` http_config { response_headers = { "Access-Control-Allow-Origin" = "*" @@ -464,7 +464,7 @@ func TestContentTypeIsJSON(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() resp := httptest.NewRecorder() @@ -486,7 +486,7 @@ func TestHTTP_wrap_obfuscateLog(t *testing.T) { t.Parallel() buf := new(bytes.Buffer) - a := NewTestAgentWithFields(t, true, TestAgent{LogOutput: buf}) + a := StartTestAgent(t, TestAgent{LogOutput: buf}) defer a.Shutdown() handler := func(resp http.ResponseWriter, req *http.Request) (interface{}, error) { @@ -547,7 +547,7 @@ } func testPrettyPrint(pretty string, t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() r := &structs.DirEntry{Key: "key"} @@ -575,7 +575,7 @@ func TestParseSource(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Default is agent's DC and no node (since the user didn't care, then @@ -774,7 +774,7 @@ func TestPProfHandlers_EnableDebug(t *testing.T) { t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "enable_debug = true") + a := NewTestAgent(t, "enable_debug = true") defer a.Shutdown() resp := httptest.NewRecorder() @@ -788,7 +788,7 @@ func TestPProfHandlers_DisableDebugNoACLs(t *testing.T) { t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "enable_debug = false") + a := NewTestAgent(t, "enable_debug = false") defer a.Shutdown() resp := httptest.NewRecorder() @@ -804,13 +804,12 @@ assert := assert.New(t) dc1 := "dc1" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` acl_datacenter = "`+dc1+`" acl_default_policy = "deny" acl_master_token = "master" acl_agent_token = "agent" acl_agent_master_token = "towel" - acl_enforce_version_8 = true enable_debug = false `) @@ -907,7 +906,7 @@ var b structs.QueryOptions req, _ := http.NewRequest("GET", "/v1/catalog/nodes?stale", nil) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() if d := a.srv.parseConsistency(resp, req, &b); d { t.Fatalf("unexpected done") @@ -959,7 +958,7 @@ } func TestParseConsistencyAndMaxStale(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Default => Consistent @@ -972,7 +971,7 @@ ensureConsistency(t, a, "/v1/catalog/nodes?stale&max_stale=3s", 3*time.Second, false) // stale by defaul on discovery - a.config.DiscoveryMaxStale = time.Duration(7 * time.Second) + a.config.DiscoveryMaxStale = 7 * time.Second ensureConsistency(t, a, "/v1/catalog/nodes", a.config.DiscoveryMaxStale, false) // Not in KV ensureConsistency(t, a, "/v1/kv/my/path", 0, false) @@ -995,7 +994,7 @@ var b structs.QueryOptions req, _ := http.NewRequest("GET", "/v1/catalog/nodes?stale&consistent", nil) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() if d := a.srv.parseConsistency(resp, req, &b); !d { t.Fatalf("expected done") @@ -1056,7 +1055,7 @@ reqAuthBearerAndXToken.Header.Add("X-Consul-Token", "xtoken") reqAuthBearerAndXToken.Header.Add("Authorization", "Bearer bearer-token") - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Check when no token is set @@ -1146,7 +1145,7 @@ func TestEnableWebUI(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` ui = true `) defer a.Shutdown() @@ -1220,7 +1219,7 @@ nets = append(nets, in) } - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1245,10 +1244,8 @@ // assertIndex tests that X-Consul-Index is set and non-zero func assertIndex(t *testing.T, resp *httptest.ResponseRecorder) { - header := resp.Header().Get("X-Consul-Index") - if header == "" || header == "0" { - t.Fatalf("Bad: %v", header) - } + t.Helper() + require.NoError(t, checkIndex(resp)) } // checkIndex is like assertIndex but returns an error @@ -1288,7 +1285,7 @@ t.Parallel() // Fire up an agent with TLS enabled. - a := NewTestAgentWithFields(t, true, TestAgent{ + a := StartTestAgent(t, TestAgent{ UseTLS: true, HCL: ` key_file = "../test/client_certs/server.key" @@ -1354,7 +1351,7 @@ } // Fire up an agent with TLS enabled. - a := NewTestAgentWithFields(t, true, TestAgent{ + a := StartTestAgent(t, TestAgent{ UseTLS: tc.tlsEnabled, HCL: hclPrefix + ` limits { @@ -1408,7 +1405,7 @@ // Reload config with higher limit newCfg := *a.config newCfg.HTTPMaxConnsPerClient = 10 - require.NoError(t, a.ReloadConfig(&newCfg)) + require.NoError(t, a.reloadConfigInternal(&newCfg)) // Now another conn should be allowed conn4, err := net.DialTimeout("tcp", addr.String(), time.Second) diff -Nru consul-1.7.4+dfsg1/agent/intentions_endpoint_test.go consul-1.8.7+dfsg1/agent/intentions_endpoint_test.go --- consul-1.7.4+dfsg1/agent/intentions_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/intentions_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Make sure an empty list is non-nil. @@ -33,7 +33,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Create some intentions, note we create the lowest precedence first to test @@ -72,7 +72,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Create some intentions @@ -137,7 +137,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Request @@ -154,7 +154,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Request @@ -171,7 +171,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Request @@ -188,7 +188,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Create some intentions @@ -244,7 +244,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Request @@ -261,7 +261,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Request @@ -278,7 +278,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Make sure an empty list is non-nil. @@ -309,7 +309,7 @@ func TestIntentionsCreate_noBody(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Create with no body @@ -323,7 +323,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // The intention @@ -359,7 +359,7 @@ t.Parallel() require := require.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // Read intention with bad ID @@ -376,7 +376,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // The intention @@ -422,7 +422,7 @@ t.Parallel() assert := assert.New(t) - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() // The intention diff -Nru consul-1.7.4+dfsg1/agent/keyring.go consul-1.8.7+dfsg1/agent/keyring.go --- consul-1.7.4+dfsg1/agent/keyring.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/keyring.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,8 +9,10 @@ "os" "path/filepath" + "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/consul" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/go-hclog" "github.com/hashicorp/memberlist" "github.com/hashicorp/serf/serf" ) @@ -20,6 +22,120 @@ SerfWANKeyring = "serf/remote.keyring" ) +// setupKeyrings in config.SerfLANConfig and config.SerfWANConfig. +func setupKeyrings(config *consul.Config, rtConfig *config.RuntimeConfig, logger hclog.Logger) error { + // First set up the LAN and WAN keyrings. + if err := setupBaseKeyrings(config, rtConfig, logger); err != nil { + return err + } + + // If there's no LAN keyring then there's nothing else to set up for + // any segments. + lanKeyring := config.SerfLANConfig.MemberlistConfig.Keyring + if lanKeyring == nil { + return nil + } + + // Copy the initial state of the LAN keyring into each segment config. + // Segments don't have their own keyring file, they rely on the LAN + // holding the state so things can't get out of sync. + k, pk := lanKeyring.GetKeys(), lanKeyring.GetPrimaryKey() + for _, segment := range config.Segments { + keyring, err := memberlist.NewKeyring(k, pk) + if err != nil { + return err + } + segment.SerfConfig.MemberlistConfig.Keyring = keyring + } + return nil +} + +// setupBaseKeyrings configures the LAN and WAN keyrings. +func setupBaseKeyrings(config *consul.Config, rtConfig *config.RuntimeConfig, logger hclog.Logger) error { + // If the keyring file is disabled then just poke the provided key + // into the in-memory keyring. + federationEnabled := config.SerfWANConfig != nil + if rtConfig.DisableKeyringFile { + if rtConfig.EncryptKey == "" { + return nil + } + + keys := []string{rtConfig.EncryptKey} + if err := loadKeyring(config.SerfLANConfig, keys); err != nil { + return err + } + if rtConfig.ServerMode && federationEnabled { + if err := loadKeyring(config.SerfWANConfig, keys); err != nil { + return err + } + } + return nil + } + + // Otherwise, we need to deal with the keyring files. + fileLAN := filepath.Join(rtConfig.DataDir, SerfLANKeyring) + fileWAN := filepath.Join(rtConfig.DataDir, SerfWANKeyring) + + var existingLANKeyring, existingWANKeyring bool + if rtConfig.EncryptKey == "" { + goto LOAD + } + if _, err := os.Stat(fileLAN); err != nil { + if err := initKeyring(fileLAN, rtConfig.EncryptKey); err != nil { + return err + } + } else { + existingLANKeyring = true + } + if rtConfig.ServerMode && federationEnabled { + if _, err := os.Stat(fileWAN); err != nil { + if err := initKeyring(fileWAN, rtConfig.EncryptKey); err != nil { + return err + } + } else { + existingWANKeyring = true + } + } + +LOAD: + if _, err := os.Stat(fileLAN); err == nil { + config.SerfLANConfig.KeyringFile = fileLAN + } + if err := loadKeyringFile(config.SerfLANConfig); err != nil { + return err + } + if rtConfig.ServerMode && federationEnabled { + if _, err := os.Stat(fileWAN); err == nil { + config.SerfWANConfig.KeyringFile = fileWAN + } + if err := loadKeyringFile(config.SerfWANConfig); err != nil { + return err + } + } + + // Only perform the following checks if there was an encrypt_key + // provided in the configuration. + if rtConfig.EncryptKey != "" { + msg := " keyring doesn't include key provided with -encrypt, using keyring" + if existingLANKeyring && + keyringIsMissingKey( + config.SerfLANConfig.MemberlistConfig.Keyring, + rtConfig.EncryptKey, + ) { + logger.Warn(msg, "keyring", "LAN") + } + if existingWANKeyring && + keyringIsMissingKey( + config.SerfWANConfig.MemberlistConfig.Keyring, + rtConfig.EncryptKey, + ) { + logger.Warn(msg, "keyring", "WAN") + } + } + + return nil +} + // initKeyring will create a keyring file at a given path. func initKeyring(path, key string) error { var keys []string @@ -146,8 +262,8 @@ // ListKeys lists out all keys installed on the collective Consul cluster. This // includes both servers and clients in all DC's. -func (a *Agent) ListKeys(token string, relayFactor uint8) (*structs.KeyringResponses, error) { - args := structs.KeyringRequest{Operation: structs.KeyringList} +func (a *Agent) ListKeys(token string, localOnly bool, relayFactor uint8) (*structs.KeyringResponses, error) { + args := structs.KeyringRequest{Operation: structs.KeyringList, LocalOnly: localOnly} parseKeyringRequest(&args, token, relayFactor) return a.keyringProcess(&args) } diff -Nru consul-1.7.4+dfsg1/agent/keyring_test.go consul-1.8.7+dfsg1/agent/keyring_test.go --- consul-1.7.4+dfsg1/agent/keyring_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/keyring_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -34,7 +34,7 @@ // Should be no configured keyring file by default t.Run("no keys", func(t *testing.T) { - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() c1 := a1.consulConfig() @@ -54,7 +54,10 @@ // Server should auto-load LAN and WAN keyring files t.Run("server with keys", func(t *testing.T) { - a2 := NewTestAgentWithFields(t, true, TestAgent{Key: key}) + dataDir := testutil.TempDir(t, "keyfile") + writeKeyRings(t, key, dataDir) + + a2 := StartTestAgent(t, TestAgent{DataDir: dataDir}) defer a2.Shutdown() c2 := a2.consulConfig() @@ -80,10 +83,16 @@ // Client should auto-load only the LAN keyring file t.Run("client with keys", func(t *testing.T) { - a3 := NewTestAgentWithFields(t, true, TestAgent{HCL: ` + dataDir := testutil.TempDir(t, "keyfile") + writeKeyRings(t, key, dataDir) + + a3 := StartTestAgent(t, TestAgent{ + HCL: ` server = false bootstrap = false - `, Key: key}) + `, + DataDir: dataDir, + }) defer a3.Shutdown() c3 := a3.consulConfig() @@ -105,13 +114,23 @@ }) } +func writeKeyRings(t *testing.T, key string, dataDir string) { + t.Helper() + writeKey := func(key, filename string) { + path := filepath.Join(dataDir, filename) + require.NoError(t, initKeyring(path, key), "Error creating keyring %s", path) + } + writeKey(key, SerfLANKeyring) + writeKey(key, SerfWANKeyring) +} + func TestAgent_InmemKeyrings(t *testing.T) { t.Parallel() key := "tbLJg26ZJyJ9pK3qhc9jig==" // Should be no configured keyring file by default t.Run("no keys", func(t *testing.T) { - a1 := NewTestAgent(t, t.Name(), "") + a1 := NewTestAgent(t, "") defer a1.Shutdown() c1 := a1.consulConfig() @@ -131,7 +150,7 @@ // Server should auto-load LAN and WAN keyring t.Run("server with keys", func(t *testing.T) { - a2 := NewTestAgent(t, t.Name(), ` + a2 := NewTestAgent(t, ` encrypt = "`+key+`" disable_keyring_file = true `) @@ -160,7 +179,7 @@ // Client should auto-load only the LAN keyring t.Run("client with keys", func(t *testing.T) { - a3 := NewTestAgent(t, t.Name(), ` + a3 := NewTestAgent(t, ` encrypt = "`+key+`" server = false bootstrap = false @@ -199,7 +218,7 @@ t.Fatalf("err: %v", err) } - a4 := NewTestAgent(t, t.Name(), ` + a4 := NewTestAgent(t, ` encrypt = "`+key+`" disable_keyring_file = true data_dir = "`+dir+`" @@ -272,21 +291,24 @@ key1 := "tbLJg26ZJyJ9pK3qhc9jig==" key2 := "4leC33rgtXKIVUr9Nr0snQ==" - a := NewTestAgentWithFields(t, true, TestAgent{HCL: TestACLConfig() + ` + dataDir := testutil.TempDir(t, "keyfile") + writeKeyRings(t, key1, dataDir) + + a := StartTestAgent(t, TestAgent{HCL: TestACLConfig() + ` acl_datacenter = "dc1" acl_master_token = "root" acl_default_policy = "deny" - `, Key: key1}) + `, DataDir: dataDir}) defer a.Shutdown() // List keys without access fails - _, err := a.ListKeys("", 0) + _, err := a.ListKeys("", false, 0) if err == nil || !strings.Contains(err.Error(), "denied") { t.Fatalf("expected denied error, got: %#v", err) } // List keys with access works - _, err = a.ListKeys("root", 0) + _, err = a.ListKeys("root", false, 0) if err != nil { t.Fatalf("err: %s", err) } diff -Nru consul-1.7.4+dfsg1/agent/kvs_endpoint_test.go consul-1.8.7+dfsg1/agent/kvs_endpoint_test.go --- consul-1.7.4+dfsg1/agent/kvs_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/kvs_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ func TestKVSEndpoint_PUT_GET_DELETE(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() keys := []string{ @@ -74,7 +74,7 @@ func TestKVSEndpoint_Recurse(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() keys := []string{ @@ -150,7 +150,7 @@ func TestKVSEndpoint_DELETE_CAS(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() { @@ -216,7 +216,7 @@ func TestKVSEndpoint_CAS(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() { @@ -292,7 +292,7 @@ func TestKVSEndpoint_ListKeys(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() keys := []string{ @@ -341,7 +341,7 @@ func TestKVSEndpoint_AcquireRelease(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -400,7 +400,7 @@ func TestKVSEndpoint_GET_Raw(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() buf := bytes.NewBuffer([]byte("test")) @@ -416,7 +416,7 @@ req, _ = http.NewRequest("GET", "/v1/kv/test?raw", nil) resp = httptest.NewRecorder() - obj, err = a.srv.KVSEndpoint(resp, req) + _, err = a.srv.KVSEndpoint(resp, req) if err != nil { t.Fatalf("err: %v", err) } @@ -430,7 +430,7 @@ func TestKVSEndpoint_PUT_ConflictingFlags(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() req, _ := http.NewRequest("PUT", "/v1/kv/test?cas=0&acquire=xxx", nil) @@ -449,7 +449,7 @@ func TestKVSEndpoint_DELETE_ConflictingFlags(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() req, _ := http.NewRequest("DELETE", "/v1/kv/test?recurse&cas=0", nil) diff -Nru consul-1.7.4+dfsg1/agent/local/state.go consul-1.8.7+dfsg1/agent/local/state.go --- consul-1.7.4+dfsg1/agent/local/state.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/local/state.go 2020-12-10 21:46:52.000000000 +0000 @@ -121,7 +121,7 @@ type rpc interface { RPC(method string, args interface{}, reply interface{}) error - ResolveIdentityFromToken(secretID string) (bool, structs.ACLIdentity, error) + ResolveTokenToIdentity(secretID string) (structs.ACLIdentity, error) } // State is used to represent the node's services, @@ -305,6 +305,8 @@ close(s.WatchCh) s.WatchCh = nil } + + l.notifyIfAliased(id) l.TriggerSyncChanges() l.broadcastUpdateLocked() @@ -379,6 +381,11 @@ if hasOld && old.WatchCh != nil { close(old.WatchCh) } + if !hasOld { + // The status of an alias check is updated if the alias service is added/removed + // Only try notify alias checks if service didn't already exist (!hasOld) + l.notifyIfAliased(key) + } l.TriggerSyncChanges() l.broadcastUpdateLocked() @@ -485,6 +492,15 @@ return nil } +// ServiceExists return true if the given service does exists +func (l *State) ServiceExists(serviceID structs.ServiceID) bool { + serviceID.EnterpriseMeta.Normalize() + + l.Lock() + defer l.Unlock() + return l.services[serviceID] != nil +} + // RemoveAliasCheck removes the mapping for the alias check. func (l *State) RemoveAliasCheck(checkID structs.CheckID, srcServiceID structs.ServiceID) { l.Lock() @@ -1227,9 +1243,8 @@ // Given how the register API works, this info is also updated // every time we sync a service. l.nodeInfoInSync = true - var checkKey structs.CheckID for _, check := range checks { - checkKey.Init(check.CheckID, &check.EnterpriseMeta) + checkKey := structs.NewCheckID(check.CheckID, &check.EnterpriseMeta) l.checks[checkKey].InSync = true } l.logger.Info("Synced service", "service", key.String()) @@ -1239,9 +1254,8 @@ // todo(fs): mark the service and the checks to be in sync to prevent excessive retrying before next full sync // todo(fs): some backoff strategy might be a better solution l.services[key].InSync = true - var checkKey structs.CheckID for _, check := range checks { - checkKey.Init(check.CheckID, &check.EnterpriseMeta) + checkKey := structs.NewCheckID(check.CheckID, &check.EnterpriseMeta) l.checks[checkKey].InSync = true } accessorID := l.aclAccessorID(st) @@ -1275,8 +1289,7 @@ SkipNodeUpdate: l.nodeInfoInSync, } - var serviceKey structs.ServiceID - serviceKey.Init(c.Check.ServiceID, &key.EnterpriseMeta) + serviceKey := structs.NewServiceID(c.Check.ServiceID, &key.EnterpriseMeta) // Pull in the associated service if any s := l.services[serviceKey] @@ -1347,7 +1360,7 @@ } } -// notifyIfAliased will notify waiters if this is a check for an aliased service +// notifyIfAliased will notify waiters of changes to an aliased service func (l *State) notifyIfAliased(serviceID structs.ServiceID) { if aliases, ok := l.checkAliases[serviceID]; ok && len(aliases) > 0 { for _, notifyCh := range aliases { @@ -1367,7 +1380,7 @@ // critical purposes, such as logging. Therefore we interpret all errors as empty-string // so we can safely log it without handling non-critical errors at the usage site. func (l *State) aclAccessorID(secretID string) string { - _, ident, err := l.Delegate.ResolveIdentityFromToken(secretID) + ident, err := l.Delegate.ResolveTokenToIdentity(secretID) if acl.IsErrNotFound(err) { return "" } diff -Nru consul-1.7.4+dfsg1/agent/local/state_test.go consul-1.8.7+dfsg1/agent/local/state_test.go --- consul-1.7.4+dfsg1/agent/local/state_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/local/state_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,9 +22,15 @@ "github.com/stretchr/testify/require" ) +func unNilMap(in map[string]string) map[string]string { + if in == nil { + return make(map[string]string) + } + return in +} func TestAgentAntiEntropy_Services(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -48,7 +54,9 @@ }, EnterpriseMeta: *structs.DefaultEnterpriseMeta(), } + assert.False(t, a.State.ServiceExists(structs.ServiceID{ID: srv1.ID})) a.State.AddService(srv1, "") + assert.True(t, a.State.ServiceExists(structs.ServiceID{ID: srv1.ID})) args.Service = srv1 if err := a.RPC("Catalog.Register", args, &out); err != nil { t.Fatalf("err: %v", err) @@ -168,7 +176,7 @@ delete(meta, structs.MetaSegmentKey) // Added later, not in config. assert.Equal(t, a.Config.NodeID, id) assert.Equal(t, a.Config.TaggedAddresses, addrs) - assert.Equal(t, a.Config.NodeMeta, meta) + assert.Equal(t, unNilMap(a.Config.NodeMeta), meta) // We should have 6 services (consul included) if len(services.NodeServices.Services) != 6 { @@ -244,7 +252,7 @@ t.Parallel() assert := assert.New(t) - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -406,7 +414,7 @@ func TestAgent_ServiceWatchCh(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -490,7 +498,7 @@ func TestAgentAntiEntropy_EnableTagOverride(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -621,7 +629,7 @@ func TestAgentAntiEntropy_Services_WithChecks(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -751,11 +759,10 @@ func TestAgentAntiEntropy_Services_ACLDeny(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` acl_datacenter = "dc1" acl_master_token = "root" - acl_default_policy = "deny" - acl_enforce_version_8 = true`) + acl_default_policy = "deny" `) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -899,7 +906,7 @@ func TestAgentAntiEntropy_Checks(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -989,101 +996,109 @@ } var checks structs.IndexedHealthChecks - // Verify that we are in sync - if err := a.RPC("Health.NodeChecks", &req, &checks); err != nil { - t.Fatalf("err: %v", err) - } - - // We should have 5 checks (serf included) - if len(checks.HealthChecks) != 5 { - t.Fatalf("bad: %v", checks) - } + retry.Run(t, func(r *retry.R) { - // All the checks should match - for _, chk := range checks.HealthChecks { - chk.CreateIndex, chk.ModifyIndex = 0, 0 - switch chk.CheckID { - case "mysql": - require.Equal(t, chk, chk1) - case "redis": - require.Equal(t, chk, chk2) - case "web": - require.Equal(t, chk, chk3) - case "cache": - require.Equal(t, chk, chk5) - case "serfHealth": - // ignore - default: - t.Fatalf("unexpected check: %v", chk) + // Verify that we are in sync + if err := a.RPC("Health.NodeChecks", &req, &checks); err != nil { + r.Fatalf("err: %v", err) } - } - if err := checksInSync(a.State, 4, structs.DefaultEnterpriseMeta()); err != nil { - t.Fatal(err) - } + // We should have 5 checks (serf included) + if len(checks.HealthChecks) != 5 { + r.Fatalf("bad: %v", checks) + } - // Make sure we sent along our node info addresses when we synced. - { - req := structs.NodeSpecificRequest{ - Datacenter: "dc1", - Node: a.Config.NodeName, + // All the checks should match + for _, chk := range checks.HealthChecks { + chk.CreateIndex, chk.ModifyIndex = 0, 0 + switch chk.CheckID { + case "mysql": + require.Equal(t, chk, chk1) + case "redis": + require.Equal(t, chk, chk2) + case "web": + require.Equal(t, chk, chk3) + case "cache": + require.Equal(t, chk, chk5) + case "serfHealth": + // ignore + default: + r.Fatalf("unexpected check: %v", chk) + } } - var services structs.IndexedNodeServices - if err := a.RPC("Catalog.NodeServices", &req, &services); err != nil { - t.Fatalf("err: %v", err) + + if err := checksInSync(a.State, 4, structs.DefaultEnterpriseMeta()); err != nil { + r.Fatal(err) } + }) - id := services.NodeServices.Node.ID - addrs := services.NodeServices.Node.TaggedAddresses - meta := services.NodeServices.Node.Meta - delete(meta, structs.MetaSegmentKey) // Added later, not in config. - assert.Equal(t, a.Config.NodeID, id) - assert.Equal(t, a.Config.TaggedAddresses, addrs) - assert.Equal(t, a.Config.NodeMeta, meta) - } + retry.Run(t, func(r *retry.R) { - // Remove one of the checks - a.State.RemoveCheck(structs.NewCheckID("redis", nil)) + // Make sure we sent along our node info addresses when we synced. + { + req := structs.NodeSpecificRequest{ + Datacenter: "dc1", + Node: a.Config.NodeName, + } + var services structs.IndexedNodeServices + if err := a.RPC("Catalog.NodeServices", &req, &services); err != nil { + r.Fatalf("err: %v", err) + } - if err := a.State.SyncFull(); err != nil { - t.Fatalf("err: %v", err) - } + id := services.NodeServices.Node.ID + addrs := services.NodeServices.Node.TaggedAddresses + meta := services.NodeServices.Node.Meta + delete(meta, structs.MetaSegmentKey) // Added later, not in config. + assert.Equal(t, a.Config.NodeID, id) + assert.Equal(t, a.Config.TaggedAddresses, addrs) + assert.Equal(t, unNilMap(a.Config.NodeMeta), meta) + } + }) + retry.Run(t, func(r *retry.R) { - // Verify that we are in sync - if err := a.RPC("Health.NodeChecks", &req, &checks); err != nil { - t.Fatalf("err: %v", err) - } + // Remove one of the checks + a.State.RemoveCheck(structs.NewCheckID("redis", nil)) - // We should have 5 checks (serf included) - if len(checks.HealthChecks) != 4 { - t.Fatalf("bad: %v", checks) - } + if err := a.State.SyncFull(); err != nil { + r.Fatalf("err: %v", err) + } - // All the checks should match - for _, chk := range checks.HealthChecks { - chk.CreateIndex, chk.ModifyIndex = 0, 0 - switch chk.CheckID { - case "mysql": - require.Equal(t, chk1, chk) - case "web": - require.Equal(t, chk3, chk) - case "cache": - require.Equal(t, chk5, chk) - case "serfHealth": - // ignore - default: - t.Fatalf("unexpected check: %v", chk) + // Verify that we are in sync + if err := a.RPC("Health.NodeChecks", &req, &checks); err != nil { + r.Fatalf("err: %v", err) } - } - if err := checksInSync(a.State, 3, structs.DefaultEnterpriseMeta()); err != nil { - t.Fatal(err) - } + // We should have 5 checks (serf included) + if len(checks.HealthChecks) != 4 { + r.Fatalf("bad: %v", checks) + } + + // All the checks should match + for _, chk := range checks.HealthChecks { + chk.CreateIndex, chk.ModifyIndex = 0, 0 + switch chk.CheckID { + case "mysql": + require.Equal(t, chk1, chk) + case "web": + require.Equal(t, chk3, chk) + case "cache": + require.Equal(t, chk5, chk) + case "serfHealth": + // ignore + default: + r.Fatalf("unexpected check: %v", chk) + } + } + + if err := checksInSync(a.State, 3, structs.DefaultEnterpriseMeta()); err != nil { + r.Fatal(err) + } + }) } func TestAgentAntiEntropy_RemovingServiceAndCheck(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -1159,12 +1174,11 @@ func TestAgentAntiEntropy_Checks_ACLDeny(t *testing.T) { t.Parallel() dc := "dc1" - a := &agent.TestAgent{Name: t.Name(), HCL: ` + a := &agent.TestAgent{HCL: ` acl_datacenter = "` + dc + `" acl_master_token = "root" - acl_default_policy = "deny" - acl_enforce_version_8 = true`} - if err := a.Start(); err != nil { + acl_default_policy = "deny" `} + if err := a.Start(t); err != nil { t.Fatal(err) } defer a.Shutdown() @@ -1378,7 +1392,7 @@ func TestAgent_UpdateCheck_DiscardOutput(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` discard_check_output = true check_update_interval = "0s" # set to "0s" since otherwise output checks are deferred `) @@ -1429,10 +1443,10 @@ func TestAgentAntiEntropy_Check_DeferSync(t *testing.T) { t.Parallel() - a := &agent.TestAgent{Name: t.Name(), HCL: ` + a := &agent.TestAgent{HCL: ` check_update_interval = "500ms" `} - if err := a.Start(); err != nil { + if err := a.Start(t); err != nil { t.Fatal(err) } defer a.Shutdown() @@ -1637,12 +1651,12 @@ nodeMeta := map[string]string{ "somekey": "somevalue", } - a := &agent.TestAgent{Name: t.Name(), HCL: ` + a := &agent.TestAgent{HCL: ` node_id = "40e4a748-2192-161a-0510-9bf59fe950b5" node_meta { somekey = "somevalue" }`} - if err := a.Start(); err != nil { + if err := a.Start(t); err != nil { t.Fatal(err) } defer a.Shutdown() @@ -1678,7 +1692,7 @@ delete(meta, structs.MetaSegmentKey) // Added later, not in config. require.Equal(t, a.Config.NodeID, id) require.Equal(t, a.Config.TaggedAddresses, addrs) - require.Equal(t, a.Config.NodeMeta, meta) + assert.Equal(t, unNilMap(a.Config.NodeMeta), meta) // Blow away the catalog version of the node info if err := a.RPC("Catalog.Register", args, &out); err != nil { @@ -1898,9 +1912,62 @@ } } +func TestAgent_AliasCheck_ServiceNotification(t *testing.T) { + t.Parallel() + + require := require.New(t) + cfg := config.DefaultRuntimeConfig(`bind_addr = "127.0.0.1" data_dir = "dummy"`) + l := local.NewState(agent.LocalConfig(cfg), nil, new(token.Store)) + l.TriggerSyncChanges = func() {} + + // Add an alias check for service s1 + notifyCh := make(chan struct{}, 1) + require.NoError(l.AddAliasCheck(structs.NewCheckID(types.CheckID("a1"), nil), structs.NewServiceID("s1", nil), notifyCh)) + + // Add aliased service, s1, and verify we get notified + require.NoError(l.AddService(&structs.NodeService{Service: "s1"}, "")) + select { + case <-notifyCh: + default: + t.Fatal("notify not received") + } + + // Re-adding same service should not lead to a notification + require.NoError(l.AddService(&structs.NodeService{Service: "s1"}, "")) + select { + case <-notifyCh: + t.Fatal("notify received") + default: + } + + // Add different service and verify we do not get notified + require.NoError(l.AddService(&structs.NodeService{Service: "s2"}, "")) + select { + case <-notifyCh: + t.Fatal("notify received") + default: + } + + // Delete service and verify we get notified + require.NoError(l.RemoveService(structs.NewServiceID("s1", nil))) + select { + case <-notifyCh: + default: + t.Fatal("notify not received") + } + + // Delete different service and verify we do not get notified + require.NoError(l.RemoveService(structs.NewServiceID("s2", nil))) + select { + case <-notifyCh: + t.Fatal("notify received") + default: + } +} + func TestAgent_sendCoordinate(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.StartTestAgent(t, agent.TestAgent{Overrides: ` sync_coordinate_interval_min = "1ms" sync_coordinate_rate_target = 10.0 consul = { @@ -1910,7 +1977,7 @@ update_max_batches = 1 } } - `) + `}) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -2032,7 +2099,7 @@ func TestAliasNotifications_local(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/metadata/server.go consul-1.8.7+dfsg1/agent/metadata/server.go --- consul-1.7.4+dfsg1/agent/metadata/server.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/metadata/server.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,8 @@ // Server is used to return details of a consul server type Server struct { - Name string + Name string // . + ShortName string // ID string Datacenter string Segment string @@ -165,6 +166,7 @@ parts := &Server{ Name: m.Name, + ShortName: strings.TrimSuffix(m.Name, "."+datacenter), ID: m.Tags["id"], Datacenter: datacenter, Segment: segment, diff -Nru consul-1.7.4+dfsg1/agent/metadata/server_test.go consul-1.8.7+dfsg1/agent/metadata/server_test.go --- consul-1.7.4+dfsg1/agent/metadata/server_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/metadata/server_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/serf/serf" + "github.com/stretchr/testify/require" ) func TestServer_Key_params(t *testing.T) { @@ -136,10 +137,8 @@ } delete(m.Tags, "role") - ok, parts = metadata.IsConsulServer(m) - if ok { - t.Fatalf("unexpected ok server") - } + ok, _ = metadata.IsConsulServer(m) + require.False(t, ok, "expected to not be a consul server") } func TestIsConsulServer_Optional(t *testing.T) { @@ -209,8 +208,6 @@ } delete(m.Tags, "role") - ok, parts = metadata.IsConsulServer(m) - if ok { - t.Fatalf("unexpected ok server") - } + ok, _ = metadata.IsConsulServer(m) + require.False(t, ok, "expected to not be a consul server") } diff -Nru consul-1.7.4+dfsg1/agent/mock/notify.go consul-1.8.7+dfsg1/agent/mock/notify.go --- consul-1.7.4+dfsg1/agent/mock/notify.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/mock/notify.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,19 +14,31 @@ // of the notification mock in order to prevent panics // raised by the race conditions detector. sync.RWMutex - state map[structs.CheckID]string - updates map[structs.CheckID]int - output map[structs.CheckID]string + state map[structs.CheckID]string + updates map[structs.CheckID]int + output map[structs.CheckID]string + serviceIDs map[structs.ServiceID]bool } func NewNotify() *Notify { return &Notify{ - state: make(map[structs.CheckID]string), - updates: make(map[structs.CheckID]int), - output: make(map[structs.CheckID]string), + state: make(map[structs.CheckID]string), + updates: make(map[structs.CheckID]int), + output: make(map[structs.CheckID]string), + serviceIDs: make(map[structs.ServiceID]bool), } } +// ServiceExists mock +func (c *Notify) ServiceExists(serviceID structs.ServiceID) bool { + return c.serviceIDs[serviceID] +} + +// AddServiceID will mock a service being present locally +func (c *Notify) AddServiceID(serviceID structs.ServiceID) { + c.serviceIDs[serviceID] = true +} + func NewNotifyChan() (*Notify, chan int) { n := &Notify{ updated: make(chan int), diff -Nru consul-1.7.4+dfsg1/agent/nodeid.go consul-1.8.7+dfsg1/agent/nodeid.go --- consul-1.7.4+dfsg1/agent/nodeid.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/nodeid.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,95 @@ +package agent + +import ( + "crypto/sha512" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/types" + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-uuid" + "github.com/shirou/gopsutil/host" +) + +// newNodeIDFromConfig will pull the persisted node ID, if any, or create a random one +// and persist it. +func newNodeIDFromConfig(config *config.RuntimeConfig, logger hclog.Logger) (types.NodeID, error) { + if config.NodeID != "" { + nodeID := strings.ToLower(string(config.NodeID)) + if _, err := uuid.ParseUUID(nodeID); err != nil { + return "", fmt.Errorf("specified NodeID is invalid: %w", err) + } + return types.NodeID(nodeID), nil + } + + // For dev mode we have no filesystem access so just make one. + if config.DataDir == "" { + id, err := makeNodeID(logger, config.DisableHostNodeID) + return types.NodeID(id), err + } + + // Load saved state, if any. Since a user could edit this, we also validate it. + filename := filepath.Join(config.DataDir, "node-id") + if _, err := os.Stat(filename); err == nil { + rawID, err := ioutil.ReadFile(filename) + if err != nil { + return "", err + } + + nodeID := strings.TrimSpace(string(rawID)) + nodeID = strings.ToLower(nodeID) + if _, err = uuid.ParseUUID(nodeID); err != nil { + return "", fmt.Errorf("NodeID in %s is invalid: %w", filename, err) + } + return types.NodeID(nodeID), nil + } + + id, err := makeNodeID(logger, config.DisableHostNodeID) + if err != nil { + return "", fmt.Errorf("failed to create a NodeID: %w", err) + } + if err := lib.EnsurePath(filename, false); err != nil { + return "", err + } + if err := ioutil.WriteFile(filename, []byte(id), 0600); err != nil { + return "", fmt.Errorf("failed to write NodeID to disk: %w", err) + } + return types.NodeID(id), nil +} + +// makeNodeID will try to find a host-specific ID, or else will generate a +// random ID. The returned ID will always be formatted as a GUID. We don't tell +// the caller whether this ID is random or stable since the consequences are +// high for us if this changes, so we will persist it either way. This will let +// gopsutil change implementations without affecting in-place upgrades of nodes. +func makeNodeID(logger hclog.Logger, disableHostNodeID bool) (string, error) { + if disableHostNodeID { + return uuid.GenerateUUID() + } + + // Try to get a stable ID associated with the host itself. + info, err := host.Info() + if err != nil { + logger.Debug("Couldn't get a unique ID from the host", "error", err) + return uuid.GenerateUUID() + } + + // Hash the input to make it well distributed. The reported Host UUID may be + // similar across nodes if they are on a cloud provider or on motherboards + // created from the same batch. + buf := sha512.Sum512([]byte(strings.ToLower(info.HostID))) + id := fmt.Sprintf("%08x-%04x-%04x-%04x-%12x", + buf[0:4], + buf[4:6], + buf[6:8], + buf[8:10], + buf[10:16]) + + logger.Debug("Using unique ID from host as node ID", "id", id) + return id, nil +} diff -Nru consul-1.7.4+dfsg1/agent/nodeid_test.go consul-1.8.7+dfsg1/agent/nodeid_test.go --- consul-1.7.4+dfsg1/agent/nodeid_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/nodeid_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,112 @@ +package agent + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/types" + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-uuid" + "github.com/stretchr/testify/require" +) + +func TestNewNodeIDFromConfig(t *testing.T) { + logger := hclog.New(nil) + tmpDir := testutil.TempDir(t, "") + t.Cleanup(func() { + os.RemoveAll(tmpDir) + }) + cfg := &config.RuntimeConfig{ + DataDir: tmpDir, + } + + var randomNodeID types.NodeID + t.Run("a new ID is generated when none is specified", func(t *testing.T) { + var err error + randomNodeID, err = newNodeIDFromConfig(cfg, logger) + require.NoError(t, err) + + _, err = uuid.ParseUUID(string(randomNodeID)) + require.NoError(t, err) + }) + + t.Run("running again should get the NodeID that was persisted to disk", func(t *testing.T) { + nodeID, err := newNodeIDFromConfig(cfg, logger) + require.NoError(t, err) + require.NotEqual(t, nodeID, "") + require.Equal(t, nodeID, randomNodeID) + }) + + t.Run("invalid NodeID in config", func(t *testing.T) { + cfg.NodeID = "nope" + _, err := newNodeIDFromConfig(cfg, logger) + require.Error(t, err) + require.Contains(t, err.Error(), "specified NodeID is invalid") + }) + + t.Run("valid NodeID in config", func(t *testing.T) { + newID, err := uuid.GenerateUUID() + require.NoError(t, err) + + cfg.NodeID = types.NodeID(strings.ToUpper(newID)) + nodeID, err := newNodeIDFromConfig(cfg, logger) + require.NoError(t, err) + require.Equal(t, string(nodeID), newID) + }) + + t.Run("invalid NodeID in file", func(t *testing.T) { + cfg.NodeID = "" + filename := filepath.Join(cfg.DataDir, "node-id") + err := ioutil.WriteFile(filename, []byte("adf4238a!882b!9ddc!4a9d!5b6758e4159e"), 0600) + require.NoError(t, err) + + _, err = newNodeIDFromConfig(cfg, logger) + require.Error(t, err) + require.Contains(t, err.Error(), fmt.Sprintf("NodeID in %s is invalid", filename)) + }) + + t.Run("valid NodeID in file", func(t *testing.T) { + cfg.NodeID = "" + filename := filepath.Join(cfg.DataDir, "node-id") + err := ioutil.WriteFile(filename, []byte("ADF4238a-882b-9ddc-4a9d-5b6758e4159e"), 0600) + require.NoError(t, err) + + nodeID, err := newNodeIDFromConfig(cfg, logger) + require.NoError(t, err) + require.Equal(t, string(nodeID), "adf4238a-882b-9ddc-4a9d-5b6758e4159e") + }) +} + +func TestMakeNodeID(t *testing.T) { + logger := hclog.New(nil) + + var randomID string + t.Run("Random ID when HostNodeID is disabled", func(t *testing.T) { + var err error + randomID, err = makeNodeID(logger, true) + require.NoError(t, err) + + _, err = uuid.ParseUUID(randomID) + require.NoError(t, err) + + another, err := makeNodeID(logger, true) + require.NoError(t, err) + require.NotEqual(t, randomID, another) + }) + + t.Run("host-based ID when HostNodeID is enabled", func(t *testing.T) { + id, err := makeNodeID(logger, false) + require.NoError(t, err) + require.NotEqual(t, randomID, id) + + another, err := makeNodeID(logger, false) + require.NoError(t, err) + require.Equal(t, id, another) + }) +} diff -Nru consul-1.7.4+dfsg1/agent/operator_endpoint.go consul-1.8.7+dfsg1/agent/operator_endpoint.go --- consul-1.7.4+dfsg1/agent/operator_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/operator_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -136,7 +136,7 @@ // KeyringList is used to list the keys installed in the cluster func (s *HTTPServer) KeyringList(resp http.ResponseWriter, req *http.Request, args *keyringArgs) (interface{}, error) { - responses, err := s.agent.ListKeys(args.Token, args.RelayFactor) + responses, err := s.agent.ListKeys(args.Token, args.LocalOnly, args.RelayFactor) if err != nil { return nil, err } diff -Nru consul-1.7.4+dfsg1/agent/operator_endpoint_test.go consul-1.8.7+dfsg1/agent/operator_endpoint_test.go --- consul-1.7.4+dfsg1/agent/operator_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/operator_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,7 +19,7 @@ func TestOperator_RaftConfiguration(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -46,7 +46,7 @@ func TestOperator_RaftPeer(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -62,7 +62,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -82,7 +82,7 @@ t.Parallel() oldKey := "H3/9gBxcKKRf45CaI2DlRg==" newKey := "z90lFx3sZZLtTOkutXcwYg==" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` encrypt = "`+oldKey+`" `) defer a.Shutdown() @@ -95,7 +95,7 @@ t.Fatalf("err: %s", err) } - listResponse, err := a.ListKeys("", 0) + listResponse, err := a.ListKeys("", false, 0) if err != nil { t.Fatalf("err: %s", err) } @@ -117,7 +117,7 @@ func TestOperator_KeyringList(t *testing.T) { t.Parallel() key := "H3/9gBxcKKRf45CaI2DlRg==" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` encrypt = "`+key+`" `) defer a.Shutdown() @@ -161,12 +161,50 @@ t.Fatalf("bad: %v", ok) } } +func TestOperator_KeyringListLocalOnly(t *testing.T) { + t.Parallel() + key := "H3/9gBxcKKRf45CaI2DlRg==" + a := NewTestAgent(t, ` + encrypt = "`+key+`" + `) + defer a.Shutdown() + + req, _ := http.NewRequest("GET", "/v1/operator/keyring?local-only=1", nil) + resp := httptest.NewRecorder() + r, err := a.srv.OperatorKeyringEndpoint(resp, req) + if err != nil { + t.Fatalf("err: %v", err) + } + responses, ok := r.([]*structs.KeyringResponse) + if !ok { + t.Fatalf("err: %v", !ok) + } + + // Check that we only get a LAN response with the original key + if len(responses) != 1 { + for _, r := range responses { + fmt.Println(r) + } + t.Fatalf("bad: %d", len(responses)) + } + + // LAN + if len(responses[0].Keys) != 1 { + t.Fatalf("bad: %d", len(responses[1].Keys)) + } + if responses[0].WAN { + t.Fatalf("bad: %v", responses[1].WAN) + } + if _, ok := responses[0].Keys[key]; !ok { + t.Fatalf("bad: %v", ok) + } +} func TestOperator_KeyringRemove(t *testing.T) { t.Parallel() key := "H3/9gBxcKKRf45CaI2DlRg==" tempKey := "z90lFx3sZZLtTOkutXcwYg==" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` encrypt = "`+key+`" `) defer a.Shutdown() @@ -177,7 +215,7 @@ } // Make sure the temp key is installed - list, err := a.ListKeys("", 0) + list, err := a.ListKeys("", false, 0) if err != nil { t.Fatalf("err: %v", err) } @@ -202,7 +240,7 @@ } // Make sure the temp key has been removed - list, err = a.ListKeys("", 0) + list, err = a.ListKeys("", false, 0) if err != nil { t.Fatalf("err: %v", err) } @@ -224,7 +262,7 @@ t.Parallel() oldKey := "H3/9gBxcKKRf45CaI2DlRg==" newKey := "z90lFx3sZZLtTOkutXcwYg==" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` encrypt = "`+oldKey+`" `) defer a.Shutdown() @@ -246,7 +284,7 @@ } // Make sure only the new key remains - list, err := a.ListKeys("", 0) + list, err := a.ListKeys("", false, 0) if err != nil { t.Fatalf("err: %v", err) } @@ -267,7 +305,7 @@ func TestOperator_Keyring_InvalidRelayFactor(t *testing.T) { t.Parallel() key := "H3/9gBxcKKRf45CaI2DlRg==" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` encrypt = "`+key+`" `) defer a.Shutdown() @@ -289,7 +327,7 @@ func TestOperator_Keyring_LocalOnly(t *testing.T) { t.Parallel() key := "H3/9gBxcKKRf45CaI2DlRg==" - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` encrypt = "`+key+`" `) defer a.Shutdown() @@ -323,7 +361,7 @@ func TestOperator_AutopilotGetConfiguration(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -348,7 +386,7 @@ func TestOperator_AutopilotSetConfiguration(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer([]byte(`{"CleanupDeadServers": false}`)) @@ -376,7 +414,7 @@ func TestOperator_AutopilotCASConfiguration(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -444,7 +482,7 @@ func TestOperator_ServerHealth(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` raft_protocol = 3 `) defer a.Shutdown() @@ -476,7 +514,7 @@ func TestOperator_ServerHealth_Unhealthy(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` raft_protocol = 3 autopilot { last_contact_threshold = "-1s" diff -Nru consul-1.7.4+dfsg1/agent/pool/conn.go consul-1.8.7+dfsg1/agent/pool/conn.go --- consul-1.7.4+dfsg1/agent/pool/conn.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/pool/conn.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,29 @@ type RPCType byte +func (t RPCType) ALPNString() string { + switch t { + case RPCConsul: + return ALPN_RPCConsul + case RPCRaft: + return ALPN_RPCRaft + case RPCMultiplex: + return "" // unsupported + case RPCTLS: + return "" // unsupported + case RPCMultiplexV2: + return ALPN_RPCMultiplexV2 + case RPCSnapshot: + return ALPN_RPCSnapshot + case RPCGossip: + return ALPN_RPCGossip + case RPCTLSInsecure: + return "" // unsupported + default: + return "" // unsupported + } +} + const ( // keep numbers unique. RPCConsul RPCType = 0 @@ -13,18 +36,47 @@ RPCGossip = 6 // RPCTLSInsecure is used to flag RPC calls that require verify // incoming to be disabled, even when it is turned on in the - // configuration. At the time of writing there is only AutoEncryt.Sign + // configuration. At the time of writing there is only AutoEncrypt.Sign // that is supported and it might be the only one there // ever is. RPCTLSInsecure = 7 - // NOTE: Currently we use values between 0 and 7 for the different - // "protocols" that we may ride over our "rpc" port. We had an idea of - // using TLS + ALPN for negotiating the protocol instead of our own - // bytes as it could provide other benefits. Currently our 0-7 values - // are mutually exclusive with any valid first byte of a TLS header - // The first TLS header byte will content a TLS content type and the - // values 0-19 are all explicitly unassigned and marked as - // requiring coordination. RFC 7983 does the marking and goes into - // some details about multiplexing connections and identifying TLS. + // RPCMaxTypeValue is the maximum rpc type byte value currently used for + // the various protocols riding over our "rpc" port. + // + // Currently our 0-7 values are mutually exclusive with any valid first + // byte of a TLS header. The first TLS header byte will begin with a TLS + // content type and the values 0-19 are all explicitly unassigned and + // marked as requiring coordination. RFC 7983 does the marking and goes + // into some details about multiplexing connections and identifying TLS. + // + // We use this value to determine if the incoming request is actual real + // native TLS (where we can demultiplex based on ALPN protocol) or our + // older type-byte system when new connections are established. + // + // NOTE: if you add new RPCTypes beyond this value, you must similarly bump + // this value. + RPCMaxTypeValue = 7 ) + +const ( + // regular old rpc (note there is no equivalent of RPCMultiplex, RPCTLS, or RPCTLSInsecure) + ALPN_RPCConsul = "consul/rpc-single" // RPCConsul + ALPN_RPCRaft = "consul/raft" // RPCRaft + ALPN_RPCMultiplexV2 = "consul/rpc-multi" // RPCMultiplexV2 + ALPN_RPCSnapshot = "consul/rpc-snapshot" // RPCSnapshot + ALPN_RPCGossip = "consul/rpc-gossip" // RPCGossip + // wan federation additions + ALPN_WANGossipPacket = "consul/wan-gossip/packet" + ALPN_WANGossipStream = "consul/wan-gossip/stream" +) + +var RPCNextProtos = []string{ + ALPN_RPCConsul, + ALPN_RPCRaft, + ALPN_RPCMultiplexV2, + ALPN_RPCSnapshot, + ALPN_RPCGossip, + ALPN_WANGossipPacket, + ALPN_WANGossipStream, +} diff -Nru consul-1.7.4+dfsg1/agent/pool/peek.go consul-1.8.7+dfsg1/agent/pool/peek.go --- consul-1.7.4+dfsg1/agent/pool/peek.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/pool/peek.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,49 @@ "net" ) +// PeekForTLS will read the first byte on the conn to determine if the client +// request is a TLS connection request or a consul-specific framed rpc request. +// +// This function does not close the conn on an error. +// +// The returned conn has the initial read buffered internally for the purposes +// of not consuming the first byte. After that buffer is drained the conn is a +// pass through to the original conn. +// +// The TLS record layer governs the very first byte. The available options start +// at 20 as per: +// +// - v1.2: https://tools.ietf.org/html/rfc5246#appendix-A.1 +// - v1.3: https://tools.ietf.org/html/rfc8446#appendix-B.1 +// +// Note: this indicates that '0' is 'invalid'. Given that we only care about +// the first byte of a long-lived connection this is irrelevant, since you must +// always start out with a client hello handshake which is '22'. +func PeekForTLS(conn net.Conn) (net.Conn, bool, error) { + br := bufio.NewReader(conn) + + // Grab enough to read the first byte. Then drain the buffer so future + // reads can be direct. + peeked, err := br.Peek(1) + if err != nil { + return nil, false, err + } else if len(peeked) == 0 { + return conn, false, nil + } + + peeked, err = br.Peek(br.Buffered()) + if err != nil { + return nil, false, err + } + + isTLS := (peeked[0] > RPCMaxTypeValue) + + return &peekedConn{ + Peeked: peeked, + Conn: conn, + }, isTLS, nil +} + // PeekFirstByte will read the first byte on the conn. // // This function does not close the conn on an error. diff -Nru consul-1.7.4+dfsg1/agent/pool/peek_test.go consul-1.8.7+dfsg1/agent/pool/peek_test.go --- consul-1.7.4+dfsg1/agent/pool/peek_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/pool/peek_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,237 @@ +package pool + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/tls" + "crypto/x509" + "errors" + "fmt" + "io/ioutil" + "net" + "testing" + "time" + + "github.com/hashicorp/consul/tlsutil" + "github.com/stretchr/testify/require" +) + +func TestPeekForTLS_not_TLS(t *testing.T) { + type testcase struct { + name string + connData []byte + } + + var cases []testcase + for _, rpcType := range []RPCType{ + RPCConsul, + RPCRaft, + RPCMultiplex, + RPCTLS, + RPCMultiplexV2, + RPCSnapshot, + RPCGossip, + RPCTLSInsecure, + } { + cases = append(cases, testcase{ + name: fmt.Sprintf("tcp rpc type byte %d", rpcType), + connData: []byte{byte(rpcType), 'h', 'e', 'l', 'l', 'o'}, + }) + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + dead := time.Now().Add(1 * time.Second) + serverConn, clientConn, err := deadlineNetPipe(dead) + require.NoError(t, err) + go func() { + _, _ = clientConn.Write(tc.connData) + _ = clientConn.Close() + }() + defer serverConn.Close() + + wrapped, isTLS, err := PeekForTLS(serverConn) + require.NoError(t, err) + require.False(t, isTLS) + + all, err := ioutil.ReadAll(wrapped) + require.NoError(t, err) + require.Equal(t, tc.connData, all) + }) + } +} + +func TestPeekForTLS_actual_TLS(t *testing.T) { + type testcase struct { + name string + connData []byte + } + + var cases []testcase + for _, rpcType := range []RPCType{ + RPCConsul, + RPCRaft, + RPCMultiplex, + RPCTLS, + RPCMultiplexV2, + RPCSnapshot, + RPCGossip, + RPCTLSInsecure, + } { + cases = append(cases, testcase{ + name: fmt.Sprintf("tcp rpc type byte %d", rpcType), + connData: []byte{byte(rpcType), 'h', 'e', 'l', 'l', 'o'}, + }) + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + testPeekForTLS_withTLS(t, tc.connData) + }) + } +} + +func testPeekForTLS_withTLS(t *testing.T, connData []byte) { + t.Helper() + + cert, caPEM, err := generateTestCert("server.dc1.consul") + require.NoError(t, err) + + roots := x509.NewCertPool() + require.True(t, roots.AppendCertsFromPEM(caPEM)) + + dead := time.Now().Add(1 * time.Second) + serverConn, clientConn, err := deadlineNetPipe(dead) + require.NoError(t, err) + + var ( + clientErrCh = make(chan error, 1) + serverErrCh = make(chan error, 1) + serverGotPayload []byte + ) + go func(conn net.Conn) { // Client + config := &tls.Config{ + MinVersion: tls.VersionTLS12, + RootCAs: roots, + ServerName: "server.dc1.consul", + NextProtos: []string{"foo/bar"}, + } + + tlsConn := tls.Client(conn, config) + defer tlsConn.Close() + + if err := tlsConn.Handshake(); err != nil { + clientErrCh <- err + return + } + + _, err = tlsConn.Write(connData) + clientErrCh <- err + }(clientConn) + + go func(conn net.Conn) { // Server + defer conn.Close() + + wrapped, isTLS, err := PeekForTLS(conn) + if err != nil { + serverErrCh <- err + return + } else if !isTLS { + serverErrCh <- errors.New("expected to have peeked TLS but did not") + return + } + + config := &tls.Config{ + MinVersion: tls.VersionTLS12, + RootCAs: roots, + Certificates: []tls.Certificate{cert}, + ServerName: "server.dc1.consul", + NextProtos: []string{"foo/bar"}, + } + + tlsConn := tls.Server(wrapped, config) + defer tlsConn.Close() + + if err := tlsConn.Handshake(); err != nil { + serverErrCh <- err + return + } + + all, err := ioutil.ReadAll(tlsConn) + if err != nil { + serverErrCh <- err + return + } + + serverGotPayload = all + serverErrCh <- nil + }(serverConn) + + require.NoError(t, <-clientErrCh) + require.NoError(t, <-serverErrCh) + + require.Equal(t, connData, serverGotPayload) +} + +func deadlineNetPipe(deadline time.Time) (net.Conn, net.Conn, error) { + server, client := net.Pipe() + + if err := server.SetDeadline(deadline); err != nil { + server.Close() + client.Close() + return nil, nil, err + } + if err := client.SetDeadline(deadline); err != nil { + server.Close() + client.Close() + return nil, nil, err + } + + return server, client, nil +} + +func generateTestCert(serverName string) (cert tls.Certificate, caPEM []byte, err error) { + // generate CA + serial, err := tlsutil.GenerateSerialNumber() + if err != nil { + return tls.Certificate{}, nil, err + } + signer, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return tls.Certificate{}, nil, err + } + ca, err := tlsutil.GenerateCA(signer, serial, 365, nil) + if err != nil { + return tls.Certificate{}, nil, err + } + + // generate leaf + serial, err = tlsutil.GenerateSerialNumber() + if err != nil { + return tls.Certificate{}, nil, err + } + + certificate, privateKey, err := tlsutil.GenerateCert( + signer, + ca, + serial, + "Test Cert Name", + 365, + []string{serverName}, + nil, + []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + ) + if err != nil { + return tls.Certificate{}, nil, err + } + + cert, err = tls.X509KeyPair([]byte(certificate), []byte(privateKey)) + if err != nil { + return tls.Certificate{}, nil, err + } + + return cert, []byte(ca), nil +} diff -Nru consul-1.7.4+dfsg1/agent/pool/pool.go consul-1.8.7+dfsg1/agent/pool/pool.go --- consul-1.7.4+dfsg1/agent/pool/pool.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/pool/pool.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,7 +4,7 @@ "container/list" "crypto/tls" "fmt" - "io" + "log" "net" "net/rpc" "sync" @@ -42,10 +42,10 @@ refCount int32 shouldClose int32 + nodeName string addr net.Addr session muxSession lastUsed time.Time - version int pool *ConnPool @@ -126,8 +126,9 @@ // SrcAddr is the source address for outgoing connections. SrcAddr *net.TCPAddr - // LogOutput is used to control logging - LogOutput io.Writer + // Logger passed to yamux + // TODO: consider refactoring to accept a full yamux.Config instead of a logger + Logger *log.Logger // The maximum time to keep a connection open MaxTime time.Duration @@ -138,12 +139,21 @@ // TLSConfigurator TLSConfigurator *tlsutil.Configurator - // ForceTLS is used to enforce outgoing TLS verification - ForceTLS bool + // GatewayResolver is a function that returns a suitable random mesh + // gateway address for dialing servers in a given DC. This is only + // needed if wan federation via mesh gateways is enabled. + GatewayResolver func(string) string + + // Datacenter is the datacenter of the current agent. + Datacenter string + + // Server should be set to true if this connection pool is configured in a + // server instead of a client. + Server bool sync.Mutex - // pool maps an address to a open connection + // pool maps a nodeName+address to a open connection pool map[string]*Conn // limiter is used to throttle the number of connect attempts @@ -196,14 +206,20 @@ // wait for an existing connection attempt to finish, if one if in progress, // and will return that one if it succeeds. If all else fails, it will return a // newly-created connection and add it to the pool. -func (p *ConnPool) acquire(dc string, addr net.Addr, version int, useTLS bool) (*Conn, error) { +func (p *ConnPool) acquire(dc string, nodeName string, addr net.Addr) (*Conn, error) { + if nodeName == "" { + return nil, fmt.Errorf("pool: ConnPool.acquire requires a node name") + } + addrStr := addr.String() + poolKey := nodeName + ":" + addrStr + // Check to see if there's a pooled connection available. This is up // here since it should the vastly more common case than the rest // of the code here. p.Lock() - c := p.pool[addrStr] + c := p.pool[poolKey] if c != nil { c.markForUse() p.Unlock() @@ -225,7 +241,7 @@ // If we are the lead thread, make the new connection and then wake // everybody else up to see if we got it. if isLeadThread { - c, err := p.getNewConn(dc, addr, version, useTLS) + c, err := p.getNewConn(dc, nodeName, addr) p.Lock() delete(p.limiter, addrStr) close(wait) @@ -234,7 +250,7 @@ return nil, err } - p.pool[addrStr] = c + p.pool[poolKey] = c p.Unlock() return c, nil } @@ -249,7 +265,7 @@ // See if the lead thread was able to get us a connection. p.Lock() - if c := p.pool[addrStr]; c != nil { + if c := p.pool[poolKey]; c != nil { c.markForUse() p.Unlock() return c, nil @@ -267,29 +283,50 @@ // DialTimeout is used to establish a raw connection to the given server, with // given connection timeout. It also writes RPCTLS as the first byte. -func (p *ConnPool) DialTimeout(dc string, addr net.Addr, timeout time.Duration, useTLS bool) (net.Conn, HalfCloser, error) { - p.once.Do(p.init) - - return DialTimeoutWithRPCType(dc, addr, p.SrcAddr, timeout, useTLS || p.ForceTLS, p.TLSConfigurator.OutgoingRPCWrapper(), RPCTLS) -} - -// DialTimeoutInsecure is used to establish a raw connection to the given -// server, with given connection timeout. It also writes RPCTLSInsecure as the -// first byte to indicate that the client cannot provide a certificate. This is -// so far only used for AutoEncrypt.Sign. -func (p *ConnPool) DialTimeoutInsecure(dc string, addr net.Addr, timeout time.Duration, wrapper tlsutil.DCWrapper) (net.Conn, HalfCloser, error) { +func (p *ConnPool) DialTimeout( + dc string, + nodeName string, + addr net.Addr, + actualRPCType RPCType, +) (net.Conn, HalfCloser, error) { p.once.Do(p.init) - if wrapper == nil { - return nil, nil, fmt.Errorf("wrapper cannot be nil") - } - - return DialTimeoutWithRPCType(dc, addr, p.SrcAddr, timeout, true, wrapper, RPCTLSInsecure) -} - -func DialTimeoutWithRPCType(dc string, addr net.Addr, src *net.TCPAddr, timeout time.Duration, useTLS bool, wrapper tlsutil.DCWrapper, rpcType RPCType) (net.Conn, HalfCloser, error) { + if p.Server && p.GatewayResolver != nil && p.TLSConfigurator != nil && dc != p.Datacenter { + // NOTE: TLS is required on this branch. + return DialTimeoutWithRPCTypeViaMeshGateway( + dc, + nodeName, + addr, + p.SrcAddr, + p.TLSConfigurator.OutgoingALPNRPCWrapper(), + actualRPCType, + RPCTLS, + // gateway stuff + p.Server, + p.TLSConfigurator, + p.GatewayResolver, + p.Datacenter, + ) + } + + return p.dial( + dc, + nodeName, + addr, + actualRPCType, + RPCTLS, + ) +} + +func (p *ConnPool) dial( + dc string, + nodeName string, + addr net.Addr, + actualRPCType RPCType, + tlsRPCType RPCType, +) (net.Conn, HalfCloser, error) { // Try to dial the conn - d := &net.Dialer{LocalAddr: src, Timeout: timeout} + d := &net.Dialer{LocalAddr: p.SrcAddr, Timeout: defaultDialTimeout} conn, err := d.Dial("tcp", addr.String()) if err != nil { return nil, nil, err @@ -306,9 +343,10 @@ } // Check if TLS is enabled - if useTLS && wrapper != nil { + if p.TLSConfigurator.UseTLS(dc) { + wrapper := p.TLSConfigurator.OutgoingRPCWrapper() // Switch the connection into TLS mode - if _, err := conn.Write([]byte{byte(rpcType)}); err != nil { + if _, err := conn.Write([]byte{byte(tlsRPCType)}); err != nil { conn.Close() return nil, nil, err } @@ -327,45 +365,123 @@ } } + // Send the type-byte for the protocol if one is required. + // + // When using insecure TLS there is no inner type-byte as these connections + // aren't wrapped like the standard TLS ones are. + if tlsRPCType != RPCTLSInsecure { + if _, err := conn.Write([]byte{byte(actualRPCType)}); err != nil { + conn.Close() + return nil, nil, err + } + } + return conn, hc, nil } -// getNewConn is used to return a new connection -func (p *ConnPool) getNewConn(dc string, addr net.Addr, version int, useTLS bool) (*Conn, error) { - // Get a new, raw connection. - conn, _, err := p.DialTimeout(dc, addr, defaultDialTimeout, useTLS) +// DialTimeoutWithRPCTypeViaMeshGateway dials the destination node and sets up +// the connection to be the correct RPC type using ALPN. This currently is +// exclusively used to dial other servers in foreign datacenters via mesh +// gateways. +// +// NOTE: There is a close mirror of this method in agent/consul/wanfed/wanfed.go:dial +func DialTimeoutWithRPCTypeViaMeshGateway( + dc string, + nodeName string, + addr net.Addr, + src *net.TCPAddr, + wrapper tlsutil.ALPNWrapper, + actualRPCType RPCType, + tlsRPCType RPCType, + // gateway stuff + dialingFromServer bool, + tlsConfigurator *tlsutil.Configurator, + gatewayResolver func(string) string, + thisDatacenter string, +) (net.Conn, HalfCloser, error) { + if !dialingFromServer { + return nil, nil, fmt.Errorf("must dial via mesh gateways from a server agent") + } else if gatewayResolver == nil { + return nil, nil, fmt.Errorf("gatewayResolver is nil") + } else if tlsConfigurator == nil { + return nil, nil, fmt.Errorf("tlsConfigurator is nil") + } else if dc == thisDatacenter { + return nil, nil, fmt.Errorf("cannot dial servers in the same datacenter via a mesh gateway") + } else if wrapper == nil { + return nil, nil, fmt.Errorf("cannot dial via a mesh gateway when outgoing TLS is disabled") + } + + nextProto := actualRPCType.ALPNString() + if nextProto == "" { + return nil, nil, fmt.Errorf("rpc type %d cannot be routed through a mesh gateway", actualRPCType) + } + + gwAddr := gatewayResolver(dc) + if gwAddr == "" { + return nil, nil, structs.ErrDCNotAvailable + } + + dialer := &net.Dialer{LocalAddr: src, Timeout: defaultDialTimeout} + + rawConn, err := dialer.Dial("tcp", gwAddr) if err != nil { - return nil, err + return nil, nil, err } - // Switch the multiplexing based on version - var session muxSession - if version < 2 { - conn.Close() - return nil, fmt.Errorf("cannot make client connection, unsupported protocol version %d", version) + if tcp, ok := rawConn.(*net.TCPConn); ok { + _ = tcp.SetKeepAlive(true) + _ = tcp.SetNoDelay(true) } - // Write the Consul multiplex byte to set the mode - if _, err := conn.Write([]byte{byte(RPCMultiplexV2)}); err != nil { - conn.Close() + // NOTE: now we wrap the connection in a TLS client. + tlsConn, err := wrapper(dc, nodeName, nextProto, rawConn) + if err != nil { + return nil, nil, err + } + + var conn net.Conn = tlsConn + + var hc HalfCloser + if tlsConn, ok := conn.(*tls.Conn); ok { + // Expose *tls.Conn CloseWrite method on HalfCloser + hc = tlsConn + } + + return conn, hc, nil +} + +// getNewConn is used to return a new connection +func (p *ConnPool) getNewConn(dc string, nodeName string, addr net.Addr) (*Conn, error) { + if nodeName == "" { + return nil, fmt.Errorf("pool: ConnPool.getNewConn requires a node name") + } + + // Get a new, raw connection and write the Consul multiplex byte to set the mode + conn, _, err := p.DialTimeout(dc, nodeName, addr, RPCMultiplexV2) + if err != nil { return nil, err } - // Setup the logger conf := yamux.DefaultConfig() - conf.LogOutput = p.LogOutput + // override the default because LogOutput conflicts with Logger. + conf.LogOutput = nil + conf.Logger = p.Logger // Create a multiplexed session - session, _ = yamux.Client(conn, conf) + session, err := yamux.Client(conn, conf) + if err != nil { + conn.Close() + return nil, fmt.Errorf("Failed to create yamux client: %w", err) + } // Wrap the connection c := &Conn{ refCount: 1, + nodeName: nodeName, addr: addr, session: session, clients: list.New(), lastUsed: time.Now(), - version: version, pool: p, } return c, nil @@ -373,14 +489,19 @@ // clearConn is used to clear any cached connection, potentially in response to an error func (p *ConnPool) clearConn(conn *Conn) { + if conn.nodeName == "" { + panic("pool: ConnPool.acquire requires a node name") + } + // Ensure returned streams are closed atomic.StoreInt32(&conn.shouldClose, 1) // Clear from the cache addrStr := conn.addr.String() + poolKey := conn.nodeName + ":" + addrStr p.Lock() - if c, ok := p.pool[addrStr]; ok && c == conn { - delete(p.pool, addrStr) + if c, ok := p.pool[poolKey]; ok && c == conn { + delete(p.pool, poolKey) } p.Unlock() @@ -398,14 +519,14 @@ } } -// getClient is used to get a usable client for an address and protocol version -func (p *ConnPool) getClient(dc string, addr net.Addr, version int, useTLS bool) (*Conn, *StreamClient, error) { +// getClient is used to get a usable client for an address +func (p *ConnPool) getClient(dc string, nodeName string, addr net.Addr) (*Conn, *StreamClient, error) { retries := 0 START: // Try to get a conn first - conn, err := p.acquire(dc, addr, version, useTLS) + conn, err := p.acquire(dc, nodeName, addr) if err != nil { - return nil, nil, fmt.Errorf("failed to get conn: %v", err) + return nil, nil, fmt.Errorf("failed to get conn: %w", err) } // Get a client @@ -419,17 +540,32 @@ retries++ goto START } - return nil, nil, fmt.Errorf("failed to start stream: %v", err) + return nil, nil, fmt.Errorf("failed to start stream: %w", err) } return conn, client, nil } // RPC is used to make an RPC call to a remote host -func (p *ConnPool) RPC(dc string, addr net.Addr, version int, method string, args interface{}, reply interface{}) error { - if method == "AutoEncrypt.Sign" { - return p.rpcInsecure(dc, addr, method, args, reply) +func (p *ConnPool) RPC( + dc string, + nodeName string, + addr net.Addr, + method string, + args interface{}, + reply interface{}, +) error { + if nodeName == "" { + return fmt.Errorf("pool: ConnPool.RPC requires a node name") + } + + // TODO (autoconf) probably will want to have a way to invoke the + // secure or insecure variant depending on whether its an ongoing + // or first time config request. For now though this is fine until + // those ongoing requests are implemented. + if method == "AutoEncrypt.Sign" || method == "AutoConfig.InitialConfiguration" { + return p.rpcInsecure(dc, nodeName, addr, method, args, reply) } else { - return p.rpc(dc, addr, version, method, args, reply) + return p.rpc(dc, nodeName, addr, method, args, reply) } } @@ -438,31 +574,34 @@ // transparent for the consumer. The pool cannot be used because // AutoEncrypt.Sign is a one-off call and it doesn't make sense to pool that // connection if it is not being reused. -func (p *ConnPool) rpcInsecure(dc string, addr net.Addr, method string, args interface{}, reply interface{}) error { +func (p *ConnPool) rpcInsecure(dc string, nodeName string, addr net.Addr, method string, args interface{}, reply interface{}) error { + if dc != p.Datacenter { + return fmt.Errorf("insecure dialing prohibited between datacenters") + } + var codec rpc.ClientCodec - conn, _, err := p.DialTimeoutInsecure(dc, addr, 1*time.Second, p.TLSConfigurator.OutgoingRPCWrapper()) + conn, _, err := p.dial(dc, nodeName, addr, 0, RPCTLSInsecure) if err != nil { - return fmt.Errorf("rpcinsecure error establishing connection: %v", err) + return fmt.Errorf("rpcinsecure error establishing connection: %w", err) } codec = msgpackrpc.NewCodecFromHandle(true, true, conn, structs.MsgpackHandle) // Make the RPC call err = msgpackrpc.CallWithCodec(codec, method, args, reply) if err != nil { - return fmt.Errorf("rpcinsecure error making call: %v", err) + return fmt.Errorf("rpcinsecure error making call: %w", err) } return nil } -func (p *ConnPool) rpc(dc string, addr net.Addr, version int, method string, args interface{}, reply interface{}) error { +func (p *ConnPool) rpc(dc string, nodeName string, addr net.Addr, method string, args interface{}, reply interface{}) error { p.once.Do(p.init) // Get a usable client - useTLS := p.TLSConfigurator.UseTLS(dc) - conn, sc, err := p.getClient(dc, addr, version, useTLS) + conn, sc, err := p.getClient(dc, nodeName, addr) if err != nil { - return fmt.Errorf("rpc error getting client: %v", err) + return fmt.Errorf("rpc error getting client: %w", err) } // Make the RPC call @@ -479,7 +618,7 @@ } p.releaseConn(conn) - return fmt.Errorf("rpc error making call: %v", err) + return fmt.Errorf("rpc error making call: %w", err) } // Done with the connection @@ -490,9 +629,9 @@ // Ping sends a Status.Ping message to the specified server and // returns true if healthy, false if an error occurred -func (p *ConnPool) Ping(dc string, addr net.Addr, version int) (bool, error) { +func (p *ConnPool) Ping(dc string, nodeName string, addr net.Addr) (bool, error) { var out struct{} - err := p.RPC(dc, addr, version, "Status.Ping", struct{}{}, &out) + err := p.RPC(dc, nodeName, addr, "Status.Ping", struct{}{}, &out) return err == nil, err } diff -Nru consul-1.7.4+dfsg1/agent/prepared_query_endpoint.go consul-1.8.7+dfsg1/agent/prepared_query_endpoint.go --- consul-1.7.4+dfsg1/agent/prepared_query_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/prepared_query_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,7 +7,6 @@ "strings" cachetype "github.com/hashicorp/consul/agent/cache-types" - "github.com/hashicorp/consul/agent/consul" "github.com/hashicorp/consul/agent/structs" ) @@ -122,7 +121,7 @@ defer setMeta(resp, &reply.QueryMeta) if s.agent.config.HTTPUseCache && args.QueryOptions.UseCache { - raw, m, err := s.agent.cache.Get(cachetype.PreparedQueryName, &args) + raw, m, err := s.agent.cache.Get(req.Context(), cachetype.PreparedQueryName, &args) if err != nil { // Don't return error if StaleIfError is set and we are within it and had // a cached value. @@ -144,7 +143,7 @@ if err := s.agent.RPC("PreparedQuery.Execute", &args, &reply); err != nil { // We have to check the string since the RPC sheds // the specific error type. - if err.Error() == consul.ErrQueryNotFound.Error() { + if structs.IsErrQueryNotFound(err) { resp.WriteHeader(http.StatusNotFound) fmt.Fprint(resp, err.Error()) return nil, nil @@ -198,7 +197,7 @@ if err := s.agent.RPC("PreparedQuery.Explain", &args, &reply); err != nil { // We have to check the string since the RPC sheds // the specific error type. - if err.Error() == consul.ErrQueryNotFound.Error() { + if structs.IsErrQueryNotFound(err) { resp.WriteHeader(http.StatusNotFound) fmt.Fprint(resp, err.Error()) return nil, nil @@ -229,7 +228,7 @@ if err := s.agent.RPC("PreparedQuery.Get", &args, &reply); err != nil { // We have to check the string since the RPC sheds // the specific error type. - if err.Error() == consul.ErrQueryNotFound.Error() { + if structs.IsErrQueryNotFound(err) { resp.WriteHeader(http.StatusNotFound) fmt.Fprint(resp, err.Error()) return nil, nil diff -Nru consul-1.7.4+dfsg1/agent/prepared_query_endpoint_test.go consul-1.8.7+dfsg1/agent/prepared_query_endpoint_test.go --- consul-1.7.4+dfsg1/agent/prepared_query_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/prepared_query_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -75,7 +75,7 @@ func TestPreparedQuery_Create(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -164,7 +164,7 @@ func TestPreparedQuery_List(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -197,7 +197,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -247,7 +247,7 @@ func TestPreparedQuery_Execute(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -280,7 +280,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -335,7 +335,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -392,7 +392,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -468,7 +468,7 @@ // Ensure the proper params are set when no special args are passed t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -499,7 +499,7 @@ // Ensure WAN translation occurs for a response outside of the local DC. t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true `) @@ -553,7 +553,7 @@ // Ensure WAN translation doesn't occur for the local DC. t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` datacenter = "dc1" translate_wan_addrs = true `) @@ -602,7 +602,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -620,7 +620,7 @@ func TestPreparedQuery_ExecuteCached(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() failovers := int32(99) @@ -677,7 +677,7 @@ func TestPreparedQuery_Explain(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -732,7 +732,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -748,7 +748,7 @@ // Ensure that Connect is passed through t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() require := require.New(t) @@ -772,7 +772,7 @@ func TestPreparedQuery_Get(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -820,7 +820,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -837,7 +837,7 @@ func TestPreparedQuery_Update(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -915,7 +915,7 @@ func TestPreparedQuery_Delete(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() m := MockPreparedQuery{ @@ -992,7 +992,7 @@ // correctly when calling through to the real endpoints. func TestPreparedQuery_Integration(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/proxycfg/manager.go consul-1.8.7+dfsg1/agent/proxycfg/manager.go --- consul-1.7.4+dfsg1/agent/proxycfg/manager.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/proxycfg/manager.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,6 +7,7 @@ "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/local" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/go-hclog" ) @@ -64,8 +65,11 @@ // Datacenter name into other request types that need it. This is sufficient // for now and cleaner than passing the entire RuntimeConfig. Source *structs.QuerySource + // DNSConfig is the agent's relevant DNS config for any proxies. + DNSConfig DNSConfig // logger is the agent's logger to be used for logging logs. - Logger hclog.Logger + Logger hclog.Logger + TLSConfigurator *tlsutil.Configurator } // NewManager constructs a manager from the provided agent cache. @@ -131,7 +135,10 @@ // Traverse the local state and ensure all proxy services are registered services := m.State.Services(structs.WildcardEnterpriseMeta()) for sid, svc := range services { - if svc.Kind != structs.ServiceKindConnectProxy && svc.Kind != structs.ServiceKindMeshGateway { + if svc.Kind != structs.ServiceKindConnectProxy && + svc.Kind != structs.ServiceKindTerminatingGateway && + svc.Kind != structs.ServiceKindMeshGateway && + svc.Kind != structs.ServiceKindIngressGateway { continue } // TODO(banks): need to work out when to default some stuff. For example @@ -181,9 +188,13 @@ } // Set the necessary dependencies - state.logger = m.Logger + state.logger = m.Logger.With("service_id", sid.String()) state.cache = m.Cache state.source = m.Source + state.dnsConfig = m.DNSConfig + if m.TLSConfigurator != nil { + state.serverSNIFn = m.TLSConfigurator.ServerSNI + } ch, err := state.Watch() if err != nil { diff -Nru consul-1.7.4+dfsg1/agent/proxycfg/manager_test.go consul-1.8.7+dfsg1/agent/proxycfg/manager_test.go --- consul-1.7.4+dfsg1/agent/proxycfg/manager_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/proxycfg/manager_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,6 +7,7 @@ "github.com/mitchellh/copystructure" "github.com/stretchr/testify/require" + "golang.org/x/time/rate" "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" @@ -105,6 +106,7 @@ ID: "web-sidecar-proxy", Service: "web-sidecar-proxy", Port: 9999, + Meta: map[string]string{}, Proxy: structs.ConnectProxyConfig{ DestinationServiceID: "web", DestinationServiceName: "web", @@ -197,22 +199,25 @@ Address: webProxy.Address, Port: webProxy.Port, Proxy: mustCopyProxyConfig(t, webProxy), + ServiceMeta: webProxy.Meta, TaggedAddresses: make(map[string]structs.ServiceAddress), Roots: roots, ConnectProxy: configSnapshotConnectProxy{ - Leaf: leaf, - DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ - "db": dbDefaultChain(), - }, - WatchedUpstreams: nil, // Clone() clears this out - WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ - "db": { - "db.default.dc1": TestUpstreamNodes(t), + ConfigSnapshotUpstreams: ConfigSnapshotUpstreams{ + Leaf: leaf, + DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ + "db": dbDefaultChain(), + }, + WatchedUpstreams: nil, // Clone() clears this out + WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ + "db": { + "db.default.dc1": TestUpstreamNodes(t), + }, + }, + WatchedGateways: nil, // Clone() clears this out + WatchedGatewayEndpoints: map[string]map[string]structs.CheckServiceNodes{ + "db": {}, }, - }, - WatchedGateways: nil, // Clone() clears this out - WatchedGatewayEndpoints: map[string]map[string]structs.CheckServiceNodes{ - "db": {}, }, PreparedQueryEndpoints: map[string]structs.CheckServiceNodes{}, WatchedServiceChecks: map[structs.ServiceID][]structs.CheckType{}, @@ -241,23 +246,26 @@ Address: webProxy.Address, Port: webProxy.Port, Proxy: mustCopyProxyConfig(t, webProxy), + ServiceMeta: webProxy.Meta, TaggedAddresses: make(map[string]structs.ServiceAddress), Roots: roots, ConnectProxy: configSnapshotConnectProxy{ - Leaf: leaf, - DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ - "db": dbSplitChain(), - }, - WatchedUpstreams: nil, // Clone() clears this out - WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ - "db": { - "v1.db.default.dc1": TestUpstreamNodes(t), - "v2.db.default.dc1": TestUpstreamNodesAlternate(t), + ConfigSnapshotUpstreams: ConfigSnapshotUpstreams{ + Leaf: leaf, + DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ + "db": dbSplitChain(), + }, + WatchedUpstreams: nil, // Clone() clears this out + WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ + "db": { + "v1.db.default.dc1": TestUpstreamNodes(t), + "v2.db.default.dc1": TestUpstreamNodesAlternate(t), + }, + }, + WatchedGateways: nil, // Clone() clears this out + WatchedGatewayEndpoints: map[string]map[string]structs.CheckServiceNodes{ + "db": {}, }, - }, - WatchedGateways: nil, // Clone() clears this out - WatchedGatewayEndpoints: map[string]map[string]structs.CheckServiceNodes{ - "db": {}, }, PreparedQueryEndpoints: map[string]structs.CheckServiceNodes{}, WatchedServiceChecks: map[structs.ServiceID][]structs.CheckType{}, @@ -328,7 +336,7 @@ state.TriggerSyncChanges = func() {} // Create manager - m, err := NewManager(ManagerConfig{c, state, source, logger}) + m, err := NewManager(ManagerConfig{c, state, source, DNSConfig{}, logger, nil}) require.NoError(err) // And run it @@ -456,7 +464,7 @@ // None of these need to do anything to test this method just be valid logger := testutil.Logger(t) cfg := ManagerConfig{ - Cache: cache.New(nil), + Cache: cache.New(cache.Options{EntryFetchRate: rate.Inf, EntryFetchMaxBurst: 2}), State: local.NewState(local.Config{}, logger, &token.Store{}), Source: &structs.QuerySource{ Node: "node1", @@ -478,12 +486,6 @@ Port: 2222, } - // Put an overall time limit on this test case so we don't have to guard every - // call to ensure the whole test doesn't deadlock. - time.AfterFunc(100*time.Millisecond, func() { - t.Fatal("test timed out") - }) - // test 1 buffered chan ch1 := make(chan *ConfigSnapshot, 1) diff -Nru consul-1.7.4+dfsg1/agent/proxycfg/snapshot.go consul-1.8.7+dfsg1/agent/proxycfg/snapshot.go --- consul-1.7.4+dfsg1/agent/proxycfg/snapshot.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/proxycfg/snapshot.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,21 +2,46 @@ import ( "context" + "fmt" "github.com/hashicorp/consul/agent/structs" "github.com/mitchellh/copystructure" ) -type configSnapshotConnectProxy struct { - Leaf *structs.IssuedCert - DiscoveryChain map[string]*structs.CompiledDiscoveryChain // this is keyed by the Upstream.Identifier(), not the chain name - WatchedUpstreams map[string]map[string]context.CancelFunc +// TODO(ingress): Can we think of a better for this bag of data? +// A shared data structure that contains information about discovered upstreams +type ConfigSnapshotUpstreams struct { + Leaf *structs.IssuedCert + // DiscoveryChain is a map of upstream.Identifier() -> + // CompiledDiscoveryChain's, and is used to determine what services could be + // targeted by this upstream. We then instantiate watches for those targets. + DiscoveryChain map[string]*structs.CompiledDiscoveryChain + + // WatchedUpstreams is a map of upstream.Identifier() -> (map of TargetID -> + // CancelFunc's) in order to cancel any watches when the configuration is + // changed. + WatchedUpstreams map[string]map[string]context.CancelFunc + + // WatchedUpstreamEndpoints is a map of upstream.Identifier() -> (map of + // TargetID -> CheckServiceNodes) and is used to determine the backing + // endpoints of an upstream. WatchedUpstreamEndpoints map[string]map[string]structs.CheckServiceNodes - WatchedGateways map[string]map[string]context.CancelFunc - WatchedGatewayEndpoints map[string]map[string]structs.CheckServiceNodes - WatchedServiceChecks map[structs.ServiceID][]structs.CheckType // TODO: missing garbage collection - PreparedQueryEndpoints map[string]structs.CheckServiceNodes // DEPRECATED:see:WatchedUpstreamEndpoints + // WatchedGateways is a map of upstream.Identifier() -> (map of + // TargetID -> CancelFunc) in order to cancel watches for mesh gateways + WatchedGateways map[string]map[string]context.CancelFunc + + // WatchedGatewayEndpoints is a map of upstream.Identifier() -> (map of + // TargetID -> CheckServiceNodes) and is used to determine the backing + // endpoints of a mesh gateway. + WatchedGatewayEndpoints map[string]map[string]structs.CheckServiceNodes +} + +type configSnapshotConnectProxy struct { + ConfigSnapshotUpstreams + + WatchedServiceChecks map[structs.ServiceID][]structs.CheckType // TODO: missing garbage collection + PreparedQueryEndpoints map[string]structs.CheckServiceNodes // DEPRECATED:see:WatchedUpstreamEndpoints } func (c *configSnapshotConnectProxy) IsEmpty() bool { @@ -33,26 +58,132 @@ len(c.PreparedQueryEndpoints) == 0 } +type configSnapshotTerminatingGateway struct { + // WatchedServices is a map of service name to a cancel function. This cancel + // function is tied to the watch of linked service instances for the given + // id. If the linked services watch would indicate the removal of + // a service altogether we then cancel watching that service for its endpoints. + WatchedServices map[structs.ServiceName]context.CancelFunc + + // WatchedIntentions is a map of service name to a cancel function. + // This cancel function is tied to the watch of intentions for linked services. + // As with WatchedServices, intention watches will be cancelled when services + // are no longer linked to the gateway. + WatchedIntentions map[structs.ServiceName]context.CancelFunc + + // WatchedLeaves is a map of ServiceName to a cancel function. + // This cancel function is tied to the watch of leaf certs for linked services. + // As with WatchedServices, leaf watches will be cancelled when services + // are no longer linked to the gateway. + WatchedLeaves map[structs.ServiceName]context.CancelFunc + + // ServiceLeaves is a map of ServiceName to a leaf cert. + // Terminating gateways will present different certificates depending + // on the service that the caller is trying to reach. + ServiceLeaves map[structs.ServiceName]*structs.IssuedCert + + // WatchedResolvers is a map of ServiceName to a cancel function. + // This cancel function is tied to the watch of resolvers for linked services. + // As with WatchedServices, resolver watches will be cancelled when services + // are no longer linked to the gateway. + WatchedResolvers map[structs.ServiceName]context.CancelFunc + + // ServiceResolvers is a map of service name to an associated + // service-resolver config entry for that service. + ServiceResolvers map[structs.ServiceName]*structs.ServiceResolverConfigEntry + + // ServiceGroups is a map of service name to the service instances of that + // service in the local datacenter. + ServiceGroups map[structs.ServiceName]structs.CheckServiceNodes + + // GatewayServices is a map of service name to the config entry association + // between the gateway and a service. TLS configuration stored here is + // used for TLS origination from the gateway to the linked service. + GatewayServices map[structs.ServiceName]structs.GatewayService + + // HostnameServices is a map of service name to service instances with a hostname as the address. + // If hostnames are configured they must be provided to Envoy via CDS not EDS. + HostnameServices map[structs.ServiceName]structs.CheckServiceNodes +} + +func (c *configSnapshotTerminatingGateway) IsEmpty() bool { + if c == nil { + return true + } + return len(c.ServiceLeaves) == 0 && + len(c.WatchedLeaves) == 0 && + len(c.WatchedIntentions) == 0 && + len(c.ServiceGroups) == 0 && + len(c.WatchedServices) == 0 && + len(c.ServiceResolvers) == 0 && + len(c.WatchedResolvers) == 0 && + len(c.GatewayServices) == 0 && + len(c.HostnameServices) == 0 +} + type configSnapshotMeshGateway struct { - // map of service id to a cancel function. This cancel function is tied to the watch of - // connect enabled services for the given id. If the main datacenter services watch would - // indicate the removal of a service all together we then cancel watching that service for - // its connect endpoints. - WatchedServices map[structs.ServiceID]context.CancelFunc - // Indicates that the watch on the datacenters services has completed. Even when there - // are no connect services, this being set (and the Connect roots being available) will be enough for - // the config snapshot to be considered valid. In the case of Envoy, this allows it to start its listeners - // even when no services would be proxied and allow its health check to pass. + // WatchedServices is a map of service name to a cancel function. This cancel + // function is tied to the watch of connect enabled services for the given + // id. If the main datacenter services watch would indicate the removal of + // a service altogether we then cancel watching that service for its + // connect endpoints. + WatchedServices map[structs.ServiceName]context.CancelFunc + + // WatchedServicesSet indicates that the watch on the datacenters services + // has completed. Even when there are no connect services, this being set + // (and the Connect roots being available) will be enough for the config + // snapshot to be considered valid. In the case of Envoy, this allows it to + // start its listeners even when no services would be proxied and allow its + // health check to pass. WatchedServicesSet bool - // map of datacenter name to a cancel function. This cancel function is tied - // to the watch of mesh-gateway services in that datacenter. + + // WatchedDatacenters is a map of datacenter name to a cancel function. + // This cancel function is tied to the watch of mesh-gateway services in + // that datacenter. WatchedDatacenters map[string]context.CancelFunc - // map of service id to the service instances of that service in the local datacenter - ServiceGroups map[structs.ServiceID]structs.CheckServiceNodes - // map of service id to an associated service-resolver config entry for that service - ServiceResolvers map[structs.ServiceID]*structs.ServiceResolverConfigEntry - // map of datacenter names to services of kind mesh-gateway in that datacenter + + // ServiceGroups is a map of service name to the service instances of that + // service in the local datacenter. + ServiceGroups map[structs.ServiceName]structs.CheckServiceNodes + + // ServiceResolvers is a map of service name to an associated + // service-resolver config entry for that service. + ServiceResolvers map[structs.ServiceName]*structs.ServiceResolverConfigEntry + + // GatewayGroups is a map of datacenter names to services of kind + // mesh-gateway in that datacenter. GatewayGroups map[string]structs.CheckServiceNodes + + // FedStateGateways is a map of datacenter names to mesh gateways in that + // datacenter. + FedStateGateways map[string]structs.CheckServiceNodes + + // ConsulServers is the list of consul servers in this datacenter. + ConsulServers structs.CheckServiceNodes + + // HostnameDatacenters is a map of datacenters to mesh gateway instances with a hostname as the address. + // If hostnames are configured they must be provided to Envoy via CDS not EDS. + HostnameDatacenters map[string]structs.CheckServiceNodes +} + +func (c *configSnapshotMeshGateway) Datacenters() []string { + sz1, sz2 := len(c.GatewayGroups), len(c.FedStateGateways) + + sz := sz1 + if sz2 > sz1 { + sz = sz2 + } + + dcs := make([]string, 0, sz) + for dc, _ := range c.GatewayGroups { + dcs = append(dcs, dc) + } + for dc, _ := range c.FedStateGateways { + if _, ok := c.GatewayGroups[dc]; !ok { + dcs = append(dcs, dc) + } + } + return dcs } func (c *configSnapshotMeshGateway) IsEmpty() bool { @@ -64,7 +195,57 @@ len(c.WatchedDatacenters) == 0 && len(c.ServiceGroups) == 0 && len(c.ServiceResolvers) == 0 && - len(c.GatewayGroups) == 0 + len(c.GatewayGroups) == 0 && + len(c.FedStateGateways) == 0 && + len(c.ConsulServers) == 0 && + len(c.HostnameDatacenters) == 0 +} + +type configSnapshotIngressGateway struct { + ConfigSnapshotUpstreams + + // TLSEnabled is whether this gateway's listeners should have TLS configured. + TLSEnabled bool + TLSSet bool + + // Hosts is the list of extra host entries to add to our leaf cert's DNS SANs. + Hosts []string + HostsSet bool + + // LeafCertWatchCancel is a CancelFunc to use when refreshing this gateway's + // leaf cert watch with different parameters. + LeafCertWatchCancel context.CancelFunc + + // Upstreams is a list of upstreams this ingress gateway should serve traffic + // to. This is constructed from the ingress-gateway config entry, and uses + // the GatewayServices RPC to retrieve them. + Upstreams map[IngressListenerKey]structs.Upstreams + + // WatchedDiscoveryChains is a map of upstream.Identifier() -> CancelFunc's + // in order to cancel any watches when the ingress gateway configuration is + // changed. Ingress gateways need this because discovery chain watches are + // added and removed through the lifecycle of single proxycfg.state instance. + WatchedDiscoveryChains map[string]context.CancelFunc +} + +func (c *configSnapshotIngressGateway) IsEmpty() bool { + if c == nil { + return true + } + return len(c.Upstreams) == 0 && + len(c.DiscoveryChain) == 0 && + len(c.WatchedDiscoveryChains) == 0 && + len(c.WatchedUpstreams) == 0 && + len(c.WatchedUpstreamEndpoints) == 0 +} + +type IngressListenerKey struct { + Protocol string + Port int +} + +func (k *IngressListenerKey) RouteName() string { + return fmt.Sprintf("%d", k.Port) } // ConfigSnapshot captures all the resulting config needed for a proxy instance. @@ -76,18 +257,26 @@ ProxyID structs.ServiceID Address string Port int + ServiceMeta map[string]string TaggedAddresses map[string]structs.ServiceAddress Proxy structs.ConnectProxyConfig Datacenter string - Roots *structs.IndexedCARoots + ServerSNIFn ServerSNIFunc + Roots *structs.IndexedCARoots // connect-proxy specific ConnectProxy configSnapshotConnectProxy + // terminating-gateway specific + TerminatingGateway configSnapshotTerminatingGateway + // mesh-gateway specific MeshGateway configSnapshotMeshGateway + // ingress-gateway specific + IngressGateway configSnapshotIngressGateway + // Skip intentions for now as we don't push those down yet, just pre-warm them. } @@ -96,8 +285,20 @@ switch s.Kind { case structs.ServiceKindConnectProxy: return s.Roots != nil && s.ConnectProxy.Leaf != nil + case structs.ServiceKindTerminatingGateway: + return s.Roots != nil case structs.ServiceKindMeshGateway: + if s.ServiceMeta[structs.MetaWANFederationKey] == "1" { + if len(s.MeshGateway.ConsulServers) == 0 { + return false + } + } return s.Roots != nil && (s.MeshGateway.WatchedServicesSet || len(s.MeshGateway.ServiceGroups) > 0) + case structs.ServiceKindIngressGateway: + return s.Roots != nil && + s.IngressGateway.Leaf != nil && + s.IngressGateway.TLSSet && + s.IngressGateway.HostsSet default: return false } @@ -118,10 +319,30 @@ case structs.ServiceKindConnectProxy: snap.ConnectProxy.WatchedUpstreams = nil snap.ConnectProxy.WatchedGateways = nil + case structs.ServiceKindTerminatingGateway: + snap.TerminatingGateway.WatchedServices = nil + snap.TerminatingGateway.WatchedIntentions = nil + snap.TerminatingGateway.WatchedLeaves = nil case structs.ServiceKindMeshGateway: snap.MeshGateway.WatchedDatacenters = nil snap.MeshGateway.WatchedServices = nil + case structs.ServiceKindIngressGateway: + snap.IngressGateway.WatchedUpstreams = nil + snap.IngressGateway.WatchedGateways = nil + snap.IngressGateway.WatchedDiscoveryChains = nil + snap.IngressGateway.LeafCertWatchCancel = nil } return snap, nil } + +func (s *ConfigSnapshot) Leaf() *structs.IssuedCert { + switch s.Kind { + case structs.ServiceKindConnectProxy: + return s.ConnectProxy.Leaf + case structs.ServiceKindIngressGateway: + return s.IngressGateway.Leaf + default: + return nil + } +} diff -Nru consul-1.7.4+dfsg1/agent/proxycfg/state.go consul-1.8.7+dfsg1/agent/proxycfg/state.go --- consul-1.7.4+dfsg1/agent/proxycfg/state.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/proxycfg/state.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,6 +4,7 @@ "context" "errors" "fmt" + "net" "reflect" "strings" "time" @@ -23,17 +24,25 @@ } const ( - coalesceTimeout = 200 * time.Millisecond - rootsWatchID = "roots" - leafWatchID = "leaf" - intentionsWatchID = "intentions" - serviceListWatchID = "service-list" - datacentersWatchID = "datacenters" - serviceResolversWatchID = "service-resolvers" - svcChecksWatchIDPrefix = cachetype.ServiceHTTPChecksName + ":" - serviceIDPrefix = string(structs.UpstreamDestTypeService) + ":" - preparedQueryIDPrefix = string(structs.UpstreamDestTypePreparedQuery) + ":" - defaultPreparedQueryPollInterval = 30 * time.Second + coalesceTimeout = 200 * time.Millisecond + rootsWatchID = "roots" + leafWatchID = "leaf" + intentionsWatchID = "intentions" + serviceListWatchID = "service-list" + federationStateListGatewaysWatchID = "federation-state-list-mesh-gateways" + consulServerListWatchID = "consul-server-list" + datacentersWatchID = "datacenters" + serviceResolversWatchID = "service-resolvers" + gatewayServicesWatchID = "gateway-services" + gatewayConfigWatchID = "gateway-config" + externalServiceIDPrefix = "external-service:" + serviceLeafIDPrefix = "service-leaf:" + serviceResolverIDPrefix = "service-resolver:" + serviceIntentionsIDPrefix = "service-intentions:" + svcChecksWatchIDPrefix = cachetype.ServiceHTTPChecksName + ":" + serviceIDPrefix = string(structs.UpstreamDestTypeService) + ":" + preparedQueryIDPrefix = string(structs.UpstreamDestTypePreparedQuery) + ":" + defaultPreparedQueryPollInterval = 30 * time.Second ) // state holds all the state needed to maintain the config for a registered @@ -41,9 +50,11 @@ // is discarded and a new one created. type state struct { // logger, source and cache are required to be set before calling Watch. - logger hclog.Logger - source *structs.QuerySource - cache CacheNotifier + logger hclog.Logger + source *structs.QuerySource + cache CacheNotifier + dnsConfig DNSConfig + serverSNIFn ServerSNIFunc // ctx and cancel store the context created during initWatches call ctx context.Context @@ -54,6 +65,7 @@ proxyID structs.ServiceID address string port int + meta map[string]string taggedAddresses map[string]structs.ServiceAddress proxyCfg structs.ConnectProxyConfig token string @@ -63,6 +75,13 @@ reqCh chan chan *ConfigSnapshot } +type DNSConfig struct { + Domain string + AltDomain string +} + +type ServerSNIFunc func(dc, nodeName string) string + func copyProxyConfig(ns *structs.NodeService) (structs.ConnectProxyConfig, error) { if ns == nil { return structs.ConnectProxyConfig{}, nil @@ -100,8 +119,13 @@ // The returned state needs its required dependencies to be set before Watch // can be called. func newState(ns *structs.NodeService, token string) (*state, error) { - if ns.Kind != structs.ServiceKindConnectProxy && ns.Kind != structs.ServiceKindMeshGateway { - return nil, errors.New("not a connect-proxy or mesh-gateway") + switch ns.Kind { + case structs.ServiceKindConnectProxy: + case structs.ServiceKindTerminatingGateway: + case structs.ServiceKindMeshGateway: + case structs.ServiceKindIngressGateway: + default: + return nil, errors.New("not a connect-proxy, terminating-gateway, mesh-gateway, or ingress-gateway") } proxyCfg, err := copyProxyConfig(ns) @@ -114,12 +138,18 @@ taggedAddresses[k] = v } + meta := make(map[string]string) + for k, v := range ns.Meta { + meta[k] = v + } + return &state{ kind: ns.Kind, service: ns.Service, proxyID: ns.CompoundServiceID(), address: ns.Address, port: ns.Port, + meta: meta, taggedAddresses: taggedAddresses, proxyCfg: proxyCfg, token: token, @@ -167,8 +197,12 @@ switch s.kind { case structs.ServiceKindConnectProxy: return s.initWatchesConnectProxy() + case structs.ServiceKindTerminatingGateway: + return s.initWatchesTerminatingGateway() case structs.ServiceKindMeshGateway: return s.initWatchesMeshGateway() + case structs.ServiceKindIngressGateway: + return s.initWatchesIngressGateway() default: return fmt.Errorf("Unsupported service kind") } @@ -263,7 +297,6 @@ for _, u := range s.proxyCfg.Upstreams { dc := s.source.Datacenter if u.Datacenter != "" { - // TODO(rb): if we ASK for a specific datacenter, do we still use the chain? dc = u.Datacenter } @@ -341,6 +374,36 @@ return cfg, err } +// initWatchesTerminatingGateway sets up the initial watches needed based on the terminating-gateway registration +func (s *state) initWatchesTerminatingGateway() error { + // Watch for root changes + err := s.cache.Notify(s.ctx, cachetype.ConnectCARootName, &structs.DCSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + Source: *s.source, + }, rootsWatchID, s.ch) + if err != nil { + s.logger.Named(logging.TerminatingGateway). + Error("failed to register watch for root changes", "error", err) + return err + } + + // Watch for the terminating-gateway's linked services + err = s.cache.Notify(s.ctx, cachetype.GatewayServicesName, &structs.ServiceSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + ServiceName: s.service, + EnterpriseMeta: s.proxyID.EnterpriseMeta, + }, gatewayServicesWatchID, s.ch) + if err != nil { + s.logger.Named(logging.TerminatingGateway). + Error("failed to register watch for linked services", "error", err) + return err + } + + return nil +} + // initWatchesMeshGateway sets up the watches needed based on the current mesh gateway registration func (s *state) initWatchesMeshGateway() error { // Watch for root changes @@ -365,6 +428,29 @@ return err } + if s.meta[structs.MetaWANFederationKey] == "1" { + // Conveniently we can just use this service meta attribute in one + // place here to set the machinery in motion and leave the conditional + // behavior out of the rest of the package. + err = s.cache.Notify(s.ctx, cachetype.FederationStateListMeshGatewaysName, &structs.DCSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + Source: *s.source, + }, federationStateListGatewaysWatchID, s.ch) + if err != nil { + return err + } + + err = s.cache.Notify(s.ctx, cachetype.HealthServicesName, &structs.ServiceSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + ServiceName: structs.ConsulServiceName, + }, consulServerListWatchID, s.ch) + if err != nil { + return err + } + } + // Eventually we will have to watch connect enable instances for each service as well as the // destination services themselves but those notifications will be setup later. However we // cannot setup those watches until we know what the services are. from the service list @@ -398,6 +484,43 @@ return err } +func (s *state) initWatchesIngressGateway() error { + // Watch for root changes + err := s.cache.Notify(s.ctx, cachetype.ConnectCARootName, &structs.DCSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + Source: *s.source, + }, rootsWatchID, s.ch) + if err != nil { + return err + } + + // Watch this ingress gateway's config entry + err = s.cache.Notify(s.ctx, cachetype.ConfigEntryName, &structs.ConfigEntryQuery{ + Kind: structs.IngressGateway, + Name: s.service, + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + EnterpriseMeta: s.proxyID.EnterpriseMeta, + }, gatewayConfigWatchID, s.ch) + if err != nil { + return err + } + + // Watch the ingress-gateway's list of upstreams + err = s.cache.Notify(s.ctx, cachetype.GatewayServicesName, &structs.ServiceSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + ServiceName: s.service, + EnterpriseMeta: s.proxyID.EnterpriseMeta, + }, gatewayServicesWatchID, s.ch) + if err != nil { + return err + } + + return nil +} + func (s *state) initialConfigSnapshot() ConfigSnapshot { snap := ConfigSnapshot{ Kind: s.kind, @@ -405,9 +528,11 @@ ProxyID: s.proxyID, Address: s.address, Port: s.port, + ServiceMeta: s.meta, TaggedAddresses: s.taggedAddresses, Proxy: s.proxyCfg, Datacenter: s.source.Datacenter, + ServerSNIFn: s.serverSNIFn, } switch s.kind { @@ -418,16 +543,33 @@ snap.ConnectProxy.WatchedGateways = make(map[string]map[string]context.CancelFunc) snap.ConnectProxy.WatchedGatewayEndpoints = make(map[string]map[string]structs.CheckServiceNodes) snap.ConnectProxy.WatchedServiceChecks = make(map[structs.ServiceID][]structs.CheckType) - - snap.ConnectProxy.PreparedQueryEndpoints = make(map[string]structs.CheckServiceNodes) // TODO(rb): deprecated + snap.ConnectProxy.PreparedQueryEndpoints = make(map[string]structs.CheckServiceNodes) + case structs.ServiceKindTerminatingGateway: + snap.TerminatingGateway.WatchedServices = make(map[structs.ServiceName]context.CancelFunc) + snap.TerminatingGateway.WatchedLeaves = make(map[structs.ServiceName]context.CancelFunc) + snap.TerminatingGateway.WatchedIntentions = make(map[structs.ServiceName]context.CancelFunc) + snap.TerminatingGateway.WatchedResolvers = make(map[structs.ServiceName]context.CancelFunc) + snap.TerminatingGateway.ServiceLeaves = make(map[structs.ServiceName]*structs.IssuedCert) + snap.TerminatingGateway.ServiceGroups = make(map[structs.ServiceName]structs.CheckServiceNodes) + snap.TerminatingGateway.ServiceResolvers = make(map[structs.ServiceName]*structs.ServiceResolverConfigEntry) + snap.TerminatingGateway.GatewayServices = make(map[structs.ServiceName]structs.GatewayService) + snap.TerminatingGateway.HostnameServices = make(map[structs.ServiceName]structs.CheckServiceNodes) case structs.ServiceKindMeshGateway: - snap.MeshGateway.WatchedServices = make(map[structs.ServiceID]context.CancelFunc) + snap.MeshGateway.WatchedServices = make(map[structs.ServiceName]context.CancelFunc) snap.MeshGateway.WatchedDatacenters = make(map[string]context.CancelFunc) - snap.MeshGateway.ServiceGroups = make(map[structs.ServiceID]structs.CheckServiceNodes) + snap.MeshGateway.ServiceGroups = make(map[structs.ServiceName]structs.CheckServiceNodes) snap.MeshGateway.GatewayGroups = make(map[string]structs.CheckServiceNodes) - snap.MeshGateway.ServiceResolvers = make(map[structs.ServiceID]*structs.ServiceResolverConfigEntry) + snap.MeshGateway.ServiceResolvers = make(map[structs.ServiceName]*structs.ServiceResolverConfigEntry) + snap.MeshGateway.HostnameDatacenters = make(map[string]structs.CheckServiceNodes) // there is no need to initialize the map of service resolvers as we // fully rebuild it every time we get updates + case structs.ServiceKindIngressGateway: + snap.IngressGateway.WatchedDiscoveryChains = make(map[string]context.CancelFunc) + snap.IngressGateway.DiscoveryChain = make(map[string]*structs.CompiledDiscoveryChain) + snap.IngressGateway.WatchedUpstreams = make(map[string]map[string]context.CancelFunc) + snap.IngressGateway.WatchedUpstreamEndpoints = make(map[string]map[string]structs.CheckServiceNodes) + snap.IngressGateway.WatchedGateways = make(map[string]map[string]context.CancelFunc) + snap.IngressGateway.WatchedGatewayEndpoints = make(map[string]map[string]structs.CheckServiceNodes) } return snap @@ -525,8 +667,12 @@ switch s.kind { case structs.ServiceKindConnectProxy: return s.handleUpdateConnectProxy(u, snap) + case structs.ServiceKindTerminatingGateway: + return s.handleUpdateTerminatingGateway(u, snap) case structs.ServiceKindMeshGateway: return s.handleUpdateMeshGateway(u, snap) + case structs.ServiceKindIngressGateway: + return s.handleUpdateIngressGateway(u, snap) default: return fmt.Errorf("Unsupported service kind") } @@ -544,16 +690,42 @@ return fmt.Errorf("invalid type for response: %T", u.Result) } snap.Roots = roots + case u.CorrelationID == intentionsWatchID: + // no-op: Intentions don't get stored in the snapshot, calls to ConnectAuthorize will fetch them from the cache + case strings.HasPrefix(u.CorrelationID, "upstream:"+preparedQueryIDPrefix): + resp, ok := u.Result.(*structs.PreparedQueryExecuteResponse) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + pq := strings.TrimPrefix(u.CorrelationID, "upstream:") + snap.ConnectProxy.PreparedQueryEndpoints[pq] = resp.Nodes + + case strings.HasPrefix(u.CorrelationID, svcChecksWatchIDPrefix): + resp, ok := u.Result.([]structs.CheckType) + if !ok { + return fmt.Errorf("invalid type for service checks response: %T, want: []structs.CheckType", u.Result) + } + svcID := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, svcChecksWatchIDPrefix)) + snap.ConnectProxy.WatchedServiceChecks[svcID] = resp + default: + return s.handleUpdateUpstreams(u, &snap.ConnectProxy.ConfigSnapshotUpstreams) + } + return nil +} + +func (s *state) handleUpdateUpstreams(u cache.UpdateEvent, snap *ConfigSnapshotUpstreams) error { + if u.Err != nil { + return fmt.Errorf("error filling agent cache: %v", u.Err) + } + + switch { case u.CorrelationID == leafWatchID: leaf, ok := u.Result.(*structs.IssuedCert) if !ok { return fmt.Errorf("invalid type for response: %T", u.Result) } - snap.ConnectProxy.Leaf = leaf - - case u.CorrelationID == intentionsWatchID: - // Not in snapshot currently, no op + snap.Leaf = leaf case strings.HasPrefix(u.CorrelationID, "discovery-chain:"): resp, ok := u.Result.(*structs.DiscoveryChainResponse) @@ -561,7 +733,7 @@ return fmt.Errorf("invalid type for response: %T", u.Result) } svc := strings.TrimPrefix(u.CorrelationID, "discovery-chain:") - snap.ConnectProxy.DiscoveryChain[svc] = resp.Chain + snap.DiscoveryChain[svc] = resp.Chain if err := s.resetWatchesFromChain(svc, resp.Chain, snap); err != nil { return err @@ -578,12 +750,10 @@ return fmt.Errorf("invalid correlation id %q", u.CorrelationID) } - m, ok := snap.ConnectProxy.WatchedUpstreamEndpoints[svc] - if !ok { - m = make(map[string]structs.CheckServiceNodes) - snap.ConnectProxy.WatchedUpstreamEndpoints[svc] = m + if _, ok := snap.WatchedUpstreamEndpoints[svc]; !ok { + snap.WatchedUpstreamEndpoints[svc] = make(map[string]structs.CheckServiceNodes) } - snap.ConnectProxy.WatchedUpstreamEndpoints[svc][targetID] = resp.Nodes + snap.WatchedUpstreamEndpoints[svc][targetID] = resp.Nodes case strings.HasPrefix(u.CorrelationID, "mesh-gateway:"): resp, ok := u.Result.(*structs.IndexedCheckServiceNodes) @@ -595,29 +765,10 @@ if !ok { return fmt.Errorf("invalid correlation id %q", u.CorrelationID) } - m, ok := snap.ConnectProxy.WatchedGatewayEndpoints[svc] - if !ok { - m = make(map[string]structs.CheckServiceNodes) - snap.ConnectProxy.WatchedGatewayEndpoints[svc] = m - } - snap.ConnectProxy.WatchedGatewayEndpoints[svc][dc] = resp.Nodes - - case strings.HasPrefix(u.CorrelationID, "upstream:"+preparedQueryIDPrefix): - resp, ok := u.Result.(*structs.PreparedQueryExecuteResponse) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - pq := strings.TrimPrefix(u.CorrelationID, "upstream:") - snap.ConnectProxy.PreparedQueryEndpoints[pq] = resp.Nodes - - case strings.HasPrefix(u.CorrelationID, svcChecksWatchIDPrefix): - resp, ok := u.Result.([]structs.CheckType) - if !ok { - return fmt.Errorf("invalid type for service checks response: %T, want: []structs.CheckType", u.Result) + if _, ok = snap.WatchedGatewayEndpoints[svc]; !ok { + snap.WatchedGatewayEndpoints[svc] = make(map[string]structs.CheckServiceNodes) } - svcID := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, svcChecksWatchIDPrefix)) - snap.ConnectProxy.WatchedServiceChecks[svcID] = resp - + snap.WatchedGatewayEndpoints[svc][dc] = resp.Nodes default: return fmt.Errorf("unknown correlation ID: %s", u.CorrelationID) } @@ -635,7 +786,7 @@ func (s *state) resetWatchesFromChain( id string, chain *structs.CompiledDiscoveryChain, - snap *ConfigSnapshot, + snap *ConfigSnapshotUpstreams, ) error { s.logger.Trace("resetting watches for discovery chain", "id", id) if chain == nil { @@ -643,17 +794,17 @@ } // Initialize relevant sub maps. - if _, ok := snap.ConnectProxy.WatchedUpstreams[id]; !ok { - snap.ConnectProxy.WatchedUpstreams[id] = make(map[string]context.CancelFunc) + if _, ok := snap.WatchedUpstreams[id]; !ok { + snap.WatchedUpstreams[id] = make(map[string]context.CancelFunc) } - if _, ok := snap.ConnectProxy.WatchedUpstreamEndpoints[id]; !ok { - snap.ConnectProxy.WatchedUpstreamEndpoints[id] = make(map[string]structs.CheckServiceNodes) + if _, ok := snap.WatchedUpstreamEndpoints[id]; !ok { + snap.WatchedUpstreamEndpoints[id] = make(map[string]structs.CheckServiceNodes) } - if _, ok := snap.ConnectProxy.WatchedGateways[id]; !ok { - snap.ConnectProxy.WatchedGateways[id] = make(map[string]context.CancelFunc) + if _, ok := snap.WatchedGateways[id]; !ok { + snap.WatchedGateways[id] = make(map[string]context.CancelFunc) } - if _, ok := snap.ConnectProxy.WatchedGatewayEndpoints[id]; !ok { - snap.ConnectProxy.WatchedGatewayEndpoints[id] = make(map[string]structs.CheckServiceNodes) + if _, ok := snap.WatchedGatewayEndpoints[id]; !ok { + snap.WatchedGatewayEndpoints[id] = make(map[string]structs.CheckServiceNodes) } // We could invalidate this selectively based on a hash of the relevant @@ -661,14 +812,14 @@ // upstream when the chain changes in any way. // // TODO(rb): content hash based add/remove - for targetID, cancelFn := range snap.ConnectProxy.WatchedUpstreams[id] { + for targetID, cancelFn := range snap.WatchedUpstreams[id] { s.logger.Trace("stopping watch of target", "upstream", id, "chain", chain.ServiceName, "target", targetID, ) - delete(snap.ConnectProxy.WatchedUpstreams[id], targetID) - delete(snap.ConnectProxy.WatchedUpstreamEndpoints[id], targetID) + delete(snap.WatchedUpstreams[id], targetID) + delete(snap.WatchedUpstreamEndpoints[id], targetID) cancelFn() } @@ -704,11 +855,11 @@ return err } - snap.ConnectProxy.WatchedUpstreams[id][target.ID] = cancel + snap.WatchedUpstreams[id][target.ID] = cancel } for dc, _ := range needGateways { - if _, ok := snap.ConnectProxy.WatchedGateways[id][dc]; ok { + if _, ok := snap.WatchedGateways[id][dc]; ok { continue } @@ -725,10 +876,10 @@ return err } - snap.ConnectProxy.WatchedGateways[id][dc] = cancel + snap.WatchedGateways[id][dc] = cancel } - for dc, cancelFn := range snap.ConnectProxy.WatchedGateways[id] { + for dc, cancelFn := range snap.WatchedGateways[id] { if _, ok := needGateways[dc]; ok { continue } @@ -737,14 +888,246 @@ "chain", chain.ServiceName, "datacenter", dc, ) - delete(snap.ConnectProxy.WatchedGateways[id], dc) - delete(snap.ConnectProxy.WatchedGatewayEndpoints[id], dc) + delete(snap.WatchedGateways[id], dc) + delete(snap.WatchedGatewayEndpoints[id], dc) cancelFn() } return nil } +func (s *state) handleUpdateTerminatingGateway(u cache.UpdateEvent, snap *ConfigSnapshot) error { + if u.Err != nil { + return fmt.Errorf("error filling agent cache: %v", u.Err) + } + logger := s.logger.Named(logging.TerminatingGateway) + + switch { + case u.CorrelationID == rootsWatchID: + roots, ok := u.Result.(*structs.IndexedCARoots) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + snap.Roots = roots + + // Update watches based on the current list of services associated with the terminating-gateway + case u.CorrelationID == gatewayServicesWatchID: + services, ok := u.Result.(*structs.IndexedGatewayServices) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + + svcMap := make(map[structs.ServiceName]struct{}) + for _, svc := range services.Services { + // Make sure to add every service to this map, we use it to cancel watches below. + svcMap[svc.Service] = struct{}{} + + // Store the gateway <-> service mapping for TLS origination + snap.TerminatingGateway.GatewayServices[svc.Service] = *svc + + // Watch the health endpoint to discover endpoints for the service + if _, ok := snap.TerminatingGateway.WatchedServices[svc.Service]; !ok { + ctx, cancel := context.WithCancel(s.ctx) + err := s.cache.Notify(ctx, cachetype.HealthServicesName, &structs.ServiceSpecificRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + ServiceName: svc.Service.Name, + EnterpriseMeta: svc.Service.EnterpriseMeta, + + // The gateway acts as the service's proxy, so we do NOT want to discover other proxies + Connect: false, + }, externalServiceIDPrefix+svc.Service.String(), s.ch) + + if err != nil { + logger.Error("failed to register watch for external-service", + "service", svc.Service.String(), + "error", err, + ) + cancel() + return err + } + snap.TerminatingGateway.WatchedServices[svc.Service] = cancel + } + + // Watch intentions with this service as their destination + // The gateway will enforce intentions for connections to the service + if _, ok := snap.TerminatingGateway.WatchedIntentions[svc.Service]; !ok { + ctx, cancel := context.WithCancel(s.ctx) + err := s.cache.Notify(ctx, cachetype.IntentionMatchName, &structs.IntentionQueryRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + Match: &structs.IntentionQueryMatch{ + Type: structs.IntentionMatchDestination, + Entries: []structs.IntentionMatchEntry{ + { + Namespace: svc.Service.NamespaceOrDefault(), + Name: svc.Service.Name, + }, + }, + }, + }, serviceIntentionsIDPrefix+svc.Service.String(), s.ch) + + if err != nil { + logger.Error("failed to register watch for service-intentions", + "service", svc.Service.String(), + "error", err, + ) + cancel() + return err + } + snap.TerminatingGateway.WatchedIntentions[svc.Service] = cancel + } + + // Watch leaf certificate for the service + // This cert is used to terminate mTLS connections on the service's behalf + if _, ok := snap.TerminatingGateway.WatchedLeaves[svc.Service]; !ok { + ctx, cancel := context.WithCancel(s.ctx) + err := s.cache.Notify(ctx, cachetype.ConnectCALeafName, &cachetype.ConnectCALeafRequest{ + Datacenter: s.source.Datacenter, + Token: s.token, + Service: svc.Service.Name, + EnterpriseMeta: svc.Service.EnterpriseMeta, + }, serviceLeafIDPrefix+svc.Service.String(), s.ch) + + if err != nil { + logger.Error("failed to register watch for a service-leaf", + "service", svc.Service.String(), + "error", err, + ) + cancel() + return err + } + snap.TerminatingGateway.WatchedLeaves[svc.Service] = cancel + } + + // Watch service resolvers for the service + // These are used to create clusters and endpoints for the service subsets + if _, ok := snap.TerminatingGateway.WatchedResolvers[svc.Service]; !ok { + ctx, cancel := context.WithCancel(s.ctx) + err := s.cache.Notify(ctx, cachetype.ConfigEntriesName, &structs.ConfigEntryQuery{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + Kind: structs.ServiceResolver, + Name: svc.Service.Name, + EnterpriseMeta: svc.Service.EnterpriseMeta, + }, serviceResolverIDPrefix+svc.Service.String(), s.ch) + + if err != nil { + logger.Error("failed to register watch for a service-resolver", + "service", svc.Service.String(), + "error", err, + ) + cancel() + return err + } + snap.TerminatingGateway.WatchedResolvers[svc.Service] = cancel + } + } + + // Delete gateway service mapping for services that were not in the update + for sn, _ := range snap.TerminatingGateway.GatewayServices { + if _, ok := svcMap[sn]; !ok { + delete(snap.TerminatingGateway.GatewayServices, sn) + } + } + + // Clean up services with hostname mapping for services that were not in the update + for sn, _ := range snap.TerminatingGateway.HostnameServices { + if _, ok := svcMap[sn]; !ok { + delete(snap.TerminatingGateway.HostnameServices, sn) + } + } + + // Cancel service instance watches for services that were not in the update + for sn, cancelFn := range snap.TerminatingGateway.WatchedServices { + if _, ok := svcMap[sn]; !ok { + logger.Debug("canceling watch for service", "service", sn.String()) + delete(snap.TerminatingGateway.WatchedServices, sn) + delete(snap.TerminatingGateway.ServiceGroups, sn) + cancelFn() + } + } + + // Cancel leaf cert watches for services that were not in the update + for sn, cancelFn := range snap.TerminatingGateway.WatchedLeaves { + if _, ok := svcMap[sn]; !ok { + logger.Debug("canceling watch for leaf cert", "service", sn.String()) + delete(snap.TerminatingGateway.WatchedLeaves, sn) + delete(snap.TerminatingGateway.ServiceLeaves, sn) + cancelFn() + } + } + + // Cancel service-resolver watches for services that were not in the update + for sn, cancelFn := range snap.TerminatingGateway.WatchedResolvers { + if _, ok := svcMap[sn]; !ok { + logger.Debug("canceling watch for service-resolver", "service", sn.String()) + delete(snap.TerminatingGateway.WatchedResolvers, sn) + delete(snap.TerminatingGateway.ServiceResolvers, sn) + cancelFn() + } + } + + // Cancel intention watches for services that were not in the update + for sn, cancelFn := range snap.TerminatingGateway.WatchedIntentions { + if _, ok := svcMap[sn]; !ok { + logger.Debug("canceling watch for intention", "service", sn.String()) + delete(snap.TerminatingGateway.WatchedIntentions, sn) + + // No additional deletions needed, since intentions aren't stored in snapshot + + cancelFn() + } + } + + case strings.HasPrefix(u.CorrelationID, externalServiceIDPrefix): + resp, ok := u.Result.(*structs.IndexedCheckServiceNodes) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + + sn := structs.ServiceNameFromString(strings.TrimPrefix(u.CorrelationID, externalServiceIDPrefix)) + delete(snap.TerminatingGateway.ServiceGroups, sn) + delete(snap.TerminatingGateway.HostnameServices, sn) + + if len(resp.Nodes) > 0 { + snap.TerminatingGateway.ServiceGroups[sn] = resp.Nodes + snap.TerminatingGateway.HostnameServices[sn] = s.hostnameEndpoints(logging.TerminatingGateway, snap.Datacenter, resp.Nodes) + } + + // Store leaf cert for watched service + case strings.HasPrefix(u.CorrelationID, serviceLeafIDPrefix): + leaf, ok := u.Result.(*structs.IssuedCert) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + + sn := structs.ServiceNameFromString(strings.TrimPrefix(u.CorrelationID, serviceLeafIDPrefix)) + snap.TerminatingGateway.ServiceLeaves[sn] = leaf + + case strings.HasPrefix(u.CorrelationID, "service-resolver:"): + configEntries, ok := u.Result.(*structs.IndexedConfigEntries) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + // There should only ever be one entry for a service resolver within a namespace + if len(configEntries.Entries) == 1 { + if resolver, ok := configEntries.Entries[0].(*structs.ServiceResolverConfigEntry); ok { + snap.TerminatingGateway.ServiceResolvers[structs.NewServiceName(resolver.Name, &resolver.EnterpriseMeta)] = resolver + } + } + + // nolint: staticcheck // github.com/dominikh/go-tools/issues/580 + case strings.HasPrefix(u.CorrelationID, serviceIntentionsIDPrefix): + // no-op: Intentions don't get stored in the snapshot, calls to ConnectAuthorize will fetch them from the cache + + default: + // do nothing + } + + return nil +} + func (s *state) handleUpdateMeshGateway(u cache.UpdateEvent, snap *ConfigSnapshot) error { if u.Err != nil { return fmt.Errorf("error filling agent cache: %v", u.Err) @@ -759,44 +1142,62 @@ return fmt.Errorf("invalid type for response: %T", u.Result) } snap.Roots = roots + case federationStateListGatewaysWatchID: + dcIndexedNodes, ok := u.Result.(*structs.DatacenterIndexedCheckServiceNodes) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + snap.MeshGateway.FedStateGateways = dcIndexedNodes.DatacenterNodes + + for dc, nodes := range dcIndexedNodes.DatacenterNodes { + snap.MeshGateway.HostnameDatacenters[dc] = s.hostnameEndpoints(logging.MeshGateway, snap.Datacenter, nodes) + } + + for dc, _ := range snap.MeshGateway.HostnameDatacenters { + if _, ok := dcIndexedNodes.DatacenterNodes[dc]; !ok { + delete(snap.MeshGateway.HostnameDatacenters, dc) + } + } + case serviceListWatchID: services, ok := u.Result.(*structs.IndexedServiceList) if !ok { return fmt.Errorf("invalid type for response: %T", u.Result) } - svcMap := make(map[structs.ServiceID]struct{}) + svcMap := make(map[structs.ServiceName]struct{}) for _, svc := range services.Services { - sid := svc.ToServiceID() // Make sure to add every service to this map, we use it to cancel // watches below. - svcMap[sid] = struct{}{} + svcMap[svc] = struct{}{} - if _, ok := snap.MeshGateway.WatchedServices[sid]; !ok { + if _, ok := snap.MeshGateway.WatchedServices[svc]; !ok { ctx, cancel := context.WithCancel(s.ctx) err := s.cache.Notify(ctx, cachetype.HealthServicesName, &structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: svc.Name, Connect: true, - EnterpriseMeta: sid.EnterpriseMeta, - }, fmt.Sprintf("connect-service:%s", sid.String()), s.ch) + EnterpriseMeta: svc.EnterpriseMeta, + }, fmt.Sprintf("connect-service:%s", svc.String()), s.ch) if err != nil { meshLogger.Error("failed to register watch for connect-service", - "service", sid.String(), + "service", svc.String(), "error", err, ) cancel() return err } - snap.MeshGateway.WatchedServices[sid] = cancel + snap.MeshGateway.WatchedServices[svc] = cancel } } for sid, cancelFn := range snap.MeshGateway.WatchedServices { if _, ok := svcMap[sid]; !ok { meshLogger.Debug("canceling watch for service", "service", sid.String()) + // TODO (gateways) Should the sid also be deleted from snap.MeshGateway.ServiceGroups? + // Do those endpoints get cleaned up some other way? delete(snap.MeshGateway.WatchedServices, sid) cancelFn() } @@ -863,13 +1264,34 @@ return fmt.Errorf("invalid type for response: %T", u.Result) } - resolvers := make(map[structs.ServiceID]*structs.ServiceResolverConfigEntry) + resolvers := make(map[structs.ServiceName]*structs.ServiceResolverConfigEntry) for _, entry := range configEntries.Entries { if resolver, ok := entry.(*structs.ServiceResolverConfigEntry); ok { - resolvers[structs.NewServiceID(resolver.Name, &resolver.EnterpriseMeta)] = resolver + resolvers[structs.NewServiceName(resolver.Name, &resolver.EnterpriseMeta)] = resolver } } snap.MeshGateway.ServiceResolvers = resolvers + + case consulServerListWatchID: + resp, ok := u.Result.(*structs.IndexedCheckServiceNodes) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + + // Do some initial sanity checks to avoid doing something dumb. + for _, csn := range resp.Nodes { + if csn.Service.Service != structs.ConsulServiceName { + return fmt.Errorf("expected service name %q but got %q", + structs.ConsulServiceName, csn.Service.Service) + } + if csn.Node.Datacenter != snap.Datacenter { + return fmt.Errorf("expected datacenter %q but got %q", + snap.Datacenter, csn.Node.Datacenter) + } + } + + snap.MeshGateway.ConsulServers = resp.Nodes + default: switch { case strings.HasPrefix(u.CorrelationID, "connect-service:"): @@ -878,12 +1300,12 @@ return fmt.Errorf("invalid type for response: %T", u.Result) } - sid := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, "connect-service:")) + sn := structs.ServiceNameFromString(strings.TrimPrefix(u.CorrelationID, "connect-service:")) if len(resp.Nodes) > 0 { - snap.MeshGateway.ServiceGroups[sid] = resp.Nodes - } else if _, ok := snap.MeshGateway.ServiceGroups[sid]; ok { - delete(snap.MeshGateway.ServiceGroups, sid) + snap.MeshGateway.ServiceGroups[sn] = resp.Nodes + } else if _, ok := snap.MeshGateway.ServiceGroups[sn]; ok { + delete(snap.MeshGateway.ServiceGroups, sn) } case strings.HasPrefix(u.CorrelationID, "mesh-gateway:"): resp, ok := u.Result.(*structs.IndexedCheckServiceNodes) @@ -892,11 +1314,12 @@ } dc := strings.TrimPrefix(u.CorrelationID, "mesh-gateway:") + delete(snap.MeshGateway.GatewayGroups, dc) + delete(snap.MeshGateway.HostnameDatacenters, dc) if len(resp.Nodes) > 0 { snap.MeshGateway.GatewayGroups[dc] = resp.Nodes - } else if _, ok := snap.MeshGateway.GatewayGroups[dc]; ok { - delete(snap.MeshGateway.GatewayGroups, dc) + snap.MeshGateway.HostnameDatacenters[dc] = s.hostnameEndpoints(logging.MeshGateway, snap.Datacenter, resp.Nodes) } default: // do nothing for now @@ -906,6 +1329,183 @@ return nil } +func (s *state) handleUpdateIngressGateway(u cache.UpdateEvent, snap *ConfigSnapshot) error { + if u.Err != nil { + return fmt.Errorf("error filling agent cache: %v", u.Err) + } + + switch { + case u.CorrelationID == rootsWatchID: + roots, ok := u.Result.(*structs.IndexedCARoots) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + snap.Roots = roots + case u.CorrelationID == gatewayConfigWatchID: + resp, ok := u.Result.(*structs.ConfigEntryResponse) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + gatewayConf, ok := resp.Entry.(*structs.IngressGatewayConfigEntry) + if !ok { + return fmt.Errorf("invalid type for config entry: %T", resp.Entry) + } + + snap.IngressGateway.TLSEnabled = gatewayConf.TLS.Enabled + snap.IngressGateway.TLSSet = true + + if err := s.watchIngressLeafCert(snap); err != nil { + return err + } + + case u.CorrelationID == gatewayServicesWatchID: + services, ok := u.Result.(*structs.IndexedGatewayServices) + if !ok { + return fmt.Errorf("invalid type for response: %T", u.Result) + } + + // Update our upstreams and watches. + var hosts []string + watchedSvcs := make(map[string]struct{}) + upstreamsMap := make(map[IngressListenerKey]structs.Upstreams) + for _, service := range services.Services { + u := makeUpstream(service) + + err := s.watchIngressDiscoveryChain(snap, u) + if err != nil { + return err + } + watchedSvcs[u.Identifier()] = struct{}{} + + hosts = append(hosts, service.Hosts...) + + id := IngressListenerKey{Protocol: service.Protocol, Port: service.Port} + upstreamsMap[id] = append(upstreamsMap[id], u) + } + + snap.IngressGateway.Upstreams = upstreamsMap + snap.IngressGateway.Hosts = hosts + snap.IngressGateway.HostsSet = true + + for id, cancelFn := range snap.IngressGateway.WatchedDiscoveryChains { + if _, ok := watchedSvcs[id]; !ok { + cancelFn() + delete(snap.IngressGateway.WatchedDiscoveryChains, id) + } + } + + if err := s.watchIngressLeafCert(snap); err != nil { + return err + } + + default: + return s.handleUpdateUpstreams(u, &snap.IngressGateway.ConfigSnapshotUpstreams) + } + + return nil +} + +func makeUpstream(g *structs.GatewayService) structs.Upstream { + upstream := structs.Upstream{ + DestinationName: g.Service.Name, + DestinationNamespace: g.Service.NamespaceOrDefault(), + LocalBindPort: g.Port, + IngressHosts: g.Hosts, + // Pass the protocol that was configured on the ingress listener in order + // to force that protocol on the Envoy listener. + Config: map[string]interface{}{ + "protocol": g.Protocol, + }, + } + + return upstream +} + +func (s *state) watchIngressDiscoveryChain(snap *ConfigSnapshot, u structs.Upstream) error { + if _, ok := snap.IngressGateway.WatchedDiscoveryChains[u.Identifier()]; ok { + return nil + } + + ctx, cancel := context.WithCancel(s.ctx) + err := s.cache.Notify(ctx, cachetype.CompiledDiscoveryChainName, &structs.DiscoveryChainRequest{ + Datacenter: s.source.Datacenter, + QueryOptions: structs.QueryOptions{Token: s.token}, + Name: u.DestinationName, + EvaluateInDatacenter: s.source.Datacenter, + EvaluateInNamespace: u.DestinationNamespace, + }, "discovery-chain:"+u.Identifier(), s.ch) + if err != nil { + cancel() + return err + } + + snap.IngressGateway.WatchedDiscoveryChains[u.Identifier()] = cancel + return nil +} + +func (s *state) generateIngressDNSSANs(snap *ConfigSnapshot) []string { + // Update our leaf cert watch with wildcard entries for our DNS domains as well as any + // configured custom hostnames from the service. + if !snap.IngressGateway.TLSEnabled { + return nil + } + + var dnsNames []string + namespaces := make(map[string]struct{}) + for _, upstreams := range snap.IngressGateway.Upstreams { + for _, u := range upstreams { + namespaces[u.DestinationNamespace] = struct{}{} + } + } + + for ns := range namespaces { + // The default namespace is special cased in DNS resolution, so special + // case it here. + if ns == structs.IntentionDefaultNamespace { + ns = "" + } else { + ns = ns + "." + } + + dnsNames = append(dnsNames, fmt.Sprintf("*.ingress.%s%s", ns, s.dnsConfig.Domain)) + dnsNames = append(dnsNames, fmt.Sprintf("*.ingress.%s%s.%s", ns, s.source.Datacenter, s.dnsConfig.Domain)) + if s.dnsConfig.AltDomain != "" { + dnsNames = append(dnsNames, fmt.Sprintf("*.ingress.%s%s", ns, s.dnsConfig.AltDomain)) + dnsNames = append(dnsNames, fmt.Sprintf("*.ingress.%s%s.%s", ns, s.source.Datacenter, s.dnsConfig.AltDomain)) + } + } + + dnsNames = append(dnsNames, snap.IngressGateway.Hosts...) + + return dnsNames +} + +func (s *state) watchIngressLeafCert(snap *ConfigSnapshot) error { + if !snap.IngressGateway.TLSSet || !snap.IngressGateway.HostsSet { + return nil + } + + // Watch the leaf cert + if snap.IngressGateway.LeafCertWatchCancel != nil { + snap.IngressGateway.LeafCertWatchCancel() + } + ctx, cancel := context.WithCancel(s.ctx) + err := s.cache.Notify(ctx, cachetype.ConnectCALeafName, &cachetype.ConnectCALeafRequest{ + Datacenter: s.source.Datacenter, + Token: s.token, + Service: s.service, + DNSSAN: s.generateIngressDNSSANs(snap), + EnterpriseMeta: s.proxyID.EnterpriseMeta, + }, leafWatchID, s.ch) + if err != nil { + cancel() + return err + } + snap.IngressGateway.LeafCertWatchCancel = cancel + + return nil +} + // CurrentSnapshot synchronously returns the current ConfigSnapshot if there is // one ready. If we don't have one yet because not all necessary parts have been // returned (i.e. both roots and leaf cert), nil is returned. @@ -936,3 +1536,35 @@ !reflect.DeepEqual(s.proxyCfg, proxyCfg) || s.token != token } + +// hostnameEndpoints returns all CheckServiceNodes that have hostnames instead of IPs as the address. +// Envoy cannot resolve hostnames provided through EDS, so we exclusively use CDS for these clusters. +// If there is a mix of hostnames and addresses we exclusively use the hostnames, since clusters cannot discover +// services with both EDS and DNS. +func (s *state) hostnameEndpoints(loggerName string, localDC string, nodes structs.CheckServiceNodes) structs.CheckServiceNodes { + var ( + hasIP bool + hasHostname bool + resp structs.CheckServiceNodes + ) + + for _, n := range nodes { + addr, _ := n.BestAddress(localDC != n.Node.Datacenter) + if net.ParseIP(addr) != nil { + hasIP = true + continue + } + hasHostname = true + resp = append(resp, n) + } + + if hasHostname && hasIP { + dc := nodes[0].Node.Datacenter + sn := nodes[0].Service.CompoundServiceName() + + s.logger.Named(loggerName). + Warn("service contains instances with mix of hostnames and IP addresses; only hostnames will be passed to Envoy", + "dc", dc, "service", sn.String()) + } + return resp +} diff -Nru consul-1.7.4+dfsg1/agent/proxycfg/state_test.go consul-1.8.7+dfsg1/agent/proxycfg/state_test.go --- consul-1.7.4+dfsg1/agent/proxycfg/state_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/proxycfg/state_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -195,7 +195,7 @@ require.True(t, ok) } -func genVerifyLeafWatch(expectedService string, expectedDatacenter string) verifyWatchRequest { +func genVerifyLeafWatchWithDNSSANs(expectedService string, expectedDatacenter string, expectedDNSSANs []string) verifyWatchRequest { return func(t testing.TB, cacheType string, request cache.Request) { require.Equal(t, cachetype.ConnectCALeafName, cacheType) @@ -203,6 +203,23 @@ require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) require.Equal(t, expectedService, reqReal.Service) + require.ElementsMatch(t, expectedDNSSANs, reqReal.DNSSAN) + } +} + +func genVerifyLeafWatch(expectedService string, expectedDatacenter string) verifyWatchRequest { + return genVerifyLeafWatchWithDNSSANs(expectedService, expectedDatacenter, nil) +} + +func genVerifyResolverWatch(expectedService, expectedDatacenter, expectedKind string) verifyWatchRequest { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ConfigEntriesName, cacheType) + + reqReal, ok := request.(*structs.ConfigEntryQuery) + require.True(t, ok) + require.Equal(t, expectedDatacenter, reqReal.Datacenter) + require.Equal(t, expectedService, reqReal.Name) + require.Equal(t, expectedKind, reqReal.Kind) } } @@ -273,6 +290,36 @@ return genVerifyServiceSpecificRequest(cachetype.HealthServicesName, expectedService, expectedFilter, expectedDatacenter, connect) } +func genVerifyGatewayServiceWatch(expectedService, expectedDatacenter string) verifyWatchRequest { + return genVerifyServiceSpecificRequest(cachetype.GatewayServicesName, expectedService, "", expectedDatacenter, false) +} + +func genVerifyConfigEntryWatch(expectedKind, expectedName, expectedDatacenter string) verifyWatchRequest { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ConfigEntryName, cacheType) + + reqReal, ok := request.(*structs.ConfigEntryQuery) + require.True(t, ok) + require.Equal(t, expectedKind, reqReal.Kind) + require.Equal(t, expectedName, reqReal.Name) + require.Equal(t, expectedDatacenter, reqReal.Datacenter) + } +} + +func ingressConfigWatchEvent(tlsEnabled bool) cache.UpdateEvent { + return cache.UpdateEvent{ + CorrelationID: gatewayConfigWatchID, + Result: &structs.ConfigEntryResponse{ + Entry: &structs.IngressGatewayConfigEntry{ + TLS: structs.GatewayTLSConfig{ + Enabled: tlsEnabled, + }, + }, + }, + Err: nil, + } +} + // This test is meant to exercise the various parts of the cache watching done by the state as // well as its management of the ConfigSnapshot // @@ -548,6 +595,13 @@ } } + // Used in terminating-gateway cases to account for differences in OSS/ent implementations of ServiceID.String() + db := structs.NewServiceName("db", nil) + dbStr := db.String() + + api := structs.NewServiceName("api", nil) + apiStr := api.String() + cases := map[string]testCase{ "initial-gateway": testCase{ ns: structs.NodeService{ @@ -597,7 +651,7 @@ }, }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { - require.True(t, snap.Valid(), "gateway with empty service list is vaild") + require.True(t, snap.Valid(), "gateway with empty service list is valid") require.True(t, snap.ConnectProxy.IsEmpty()) require.Equal(t, indexedRoots, snap.Roots) require.Empty(t, snap.MeshGateway.WatchedServices) @@ -639,7 +693,7 @@ }, }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { - require.True(t, snap.Valid(), "gateway with service list is vaild") + require.True(t, snap.Valid(), "gateway with service list is valid") require.Len(t, snap.MeshGateway.WatchedServices, 1) require.True(t, snap.MeshGateway.WatchedServicesSet) }, @@ -658,11 +712,693 @@ }, }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { - require.True(t, snap.Valid(), "gateway with service list is vaild") + require.True(t, snap.Valid(), "gateway with service list is valid") require.Len(t, snap.MeshGateway.WatchedServices, 2) require.True(t, snap.MeshGateway.WatchedServicesSet) }, }, + verificationStage{ + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "mesh-gateway:dc4", + Result: &structs.IndexedCheckServiceNodes{ + Nodes: TestGatewayNodesDC4Hostname(t), + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid(), "gateway with service list is valid") + require.Len(t, snap.MeshGateway.WatchedServices, 2) + require.True(t, snap.MeshGateway.WatchedServicesSet) + + expect := structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-2", + Node: "mesh-gateway", + Address: "10.30.1.2", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.2", 8443, + structs.ServiceAddress{Address: "10.30.1.2", Port: 8443}, + structs.ServiceAddress{Address: "456.us-west-2.elb.notaws.com", Port: 443}), + }, + } + require.Equal(t, snap.MeshGateway.HostnameDatacenters["dc4"], expect) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: federationStateListGatewaysWatchID, + Result: &structs.DatacenterIndexedCheckServiceNodes{ + DatacenterNodes: map[string]structs.CheckServiceNodes{ + "dc5": TestGatewayNodesDC5Hostname(t), + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid(), "gateway with service list is valid") + require.Len(t, snap.MeshGateway.WatchedServices, 2) + require.True(t, snap.MeshGateway.WatchedServicesSet) + + expect := structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc5", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-2", + Node: "mesh-gateway", + Address: "10.30.1.2", + Datacenter: "dc5", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.2", 8443, + structs.ServiceAddress{Address: "10.30.1.2", Port: 8443}, + structs.ServiceAddress{Address: "456.us-west-2.elb.notaws.com", Port: 443}), + }, + } + require.Equal(t, snap.MeshGateway.HostnameDatacenters["dc5"], expect) + }, + }, + }, + }, + "ingress-gateway": testCase{ + ns: structs.NodeService{ + Kind: structs.ServiceKindIngressGateway, + ID: "ingress-gateway", + Service: "ingress-gateway", + Address: "10.0.1.1", + }, + sourceDC: "dc1", + stages: []verificationStage{ + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), + gatewayConfigWatchID: genVerifyConfigEntryWatch(structs.IngressGateway, "ingress-gateway", "dc1"), + gatewayServicesWatchID: genVerifyGatewayServiceWatch("ingress-gateway", "dc1"), + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.False(t, snap.Valid(), "gateway without root is not valid") + require.True(t, snap.IngressGateway.IsEmpty()) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + rootWatchEvent(), + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.False(t, snap.Valid(), "gateway without config entry is not valid") + require.Equal(t, indexedRoots, snap.Roots) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + ingressConfigWatchEvent(false), + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.False(t, snap.Valid(), "gateway without hosts set is not valid") + require.True(t, snap.IngressGateway.TLSSet) + require.False(t, snap.IngressGateway.TLSEnabled) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: gatewayServicesWatchID, + Result: &structs.IndexedGatewayServices{ + Services: structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress-gateway", nil), + Service: structs.NewServiceName("api", nil), + Port: 9999, + Protocol: "http", + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.False(t, snap.Valid(), "gateway without leaf is not valid") + require.True(t, snap.IngressGateway.HostsSet) + require.Len(t, snap.IngressGateway.Hosts, 0) + require.Len(t, snap.IngressGateway.Upstreams, 1) + key := IngressListenerKey{Protocol: "http", Port: 9999} + require.Equal(t, snap.IngressGateway.Upstreams[key], structs.Upstreams{ + { + DestinationNamespace: "default", + DestinationName: "api", + LocalBindPort: 9999, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + }) + require.Len(t, snap.IngressGateway.WatchedDiscoveryChains, 1) + require.Contains(t, snap.IngressGateway.WatchedDiscoveryChains, "api") + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + leafWatchID: genVerifyLeafWatch("ingress-gateway", "dc1"), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: issuedCert, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid(), "gateway with root and leaf certs is valid") + require.Equal(t, issuedCert, snap.IngressGateway.Leaf) + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + "discovery-chain:api": genVerifyDiscoveryChainWatch(&structs.DiscoveryChainRequest{ + Name: "api", + EvaluateInDatacenter: "dc1", + EvaluateInNamespace: "default", + Datacenter: "dc1", + }), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "discovery-chain:api", + Result: &structs.DiscoveryChainResponse{ + Chain: discoverychain.TestCompileConfigEntries(t, "api", "default", "dc1", "trustdomain.consul", "dc1", nil), + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.Len(t, snap.IngressGateway.WatchedUpstreams, 1) + require.Len(t, snap.IngressGateway.WatchedUpstreams["api"], 1) + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + "upstream-target:api.default.dc1:api": genVerifyServiceWatch("api", "", "dc1", true), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "upstream-target:api.default.dc1:api", + Result: &structs.IndexedCheckServiceNodes{ + Nodes: structs.CheckServiceNodes{ + { + Node: &structs.Node{ + Node: "node1", + Address: "127.0.0.1", + }, + Service: &structs.NodeService{ + ID: "api1", + Service: "api", + }, + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.Len(t, snap.IngressGateway.WatchedUpstreamEndpoints, 1) + require.Contains(t, snap.IngressGateway.WatchedUpstreamEndpoints, "api") + require.Len(t, snap.IngressGateway.WatchedUpstreamEndpoints["api"], 1) + require.Contains(t, snap.IngressGateway.WatchedUpstreamEndpoints["api"], "api.default.dc1") + require.Equal(t, snap.IngressGateway.WatchedUpstreamEndpoints["api"]["api.default.dc1"], + structs.CheckServiceNodes{ + { + Node: &structs.Node{ + Node: "node1", + Address: "127.0.0.1", + }, + Service: &structs.NodeService{ + ID: "api1", + Service: "api", + }, + }, + }, + ) + }, + }, + }, + }, + "ingress-gateway-with-tls-update-upstreams": testCase{ + ns: structs.NodeService{ + Kind: structs.ServiceKindIngressGateway, + ID: "ingress-gateway", + Service: "ingress-gateway", + Address: "10.0.1.1", + }, + sourceDC: "dc1", + stages: []verificationStage{ + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), + gatewayConfigWatchID: genVerifyConfigEntryWatch(structs.IngressGateway, "ingress-gateway", "dc1"), + gatewayServicesWatchID: genVerifyGatewayServiceWatch("ingress-gateway", "dc1"), + }, + events: []cache.UpdateEvent{ + rootWatchEvent(), + ingressConfigWatchEvent(true), + cache.UpdateEvent{ + CorrelationID: gatewayServicesWatchID, + Result: &structs.IndexedGatewayServices{ + Services: structs.GatewayServices{ + { + Gateway: structs.NewServiceName("ingress-gateway", nil), + Service: structs.NewServiceName("api", nil), + Hosts: []string{"test.example.com"}, + Port: 9999, + }, + }, + }, + Err: nil, + }, + cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: issuedCert, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid()) + require.True(t, snap.IngressGateway.TLSSet) + require.True(t, snap.IngressGateway.TLSEnabled) + require.True(t, snap.IngressGateway.HostsSet) + require.Len(t, snap.IngressGateway.Hosts, 1) + require.Len(t, snap.IngressGateway.Upstreams, 1) + require.Len(t, snap.IngressGateway.WatchedDiscoveryChains, 1) + require.Contains(t, snap.IngressGateway.WatchedDiscoveryChains, "api") + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + leafWatchID: genVerifyLeafWatchWithDNSSANs("ingress-gateway", "dc1", []string{ + "test.example.com", + "*.ingress.consul.", + "*.ingress.dc1.consul.", + "*.ingress.alt.consul.", + "*.ingress.dc1.alt.consul.", + }), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: gatewayServicesWatchID, + Result: &structs.IndexedGatewayServices{}, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid()) + require.Len(t, snap.IngressGateway.Upstreams, 0) + require.Len(t, snap.IngressGateway.WatchedDiscoveryChains, 0) + require.NotContains(t, snap.IngressGateway.WatchedDiscoveryChains, "api") + }, + }, + }, + }, + "terminating-gateway-initial": testCase{ + ns: structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + ID: "terminating-gateway", + Service: "terminating-gateway", + Address: "10.0.1.1", + }, + sourceDC: "dc1", + stages: []verificationStage{ + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), + gatewayServicesWatchID: genVerifyServiceSpecificRequest(gatewayServicesWatchID, + "terminating-gateway", "", "dc1", false), + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.False(t, snap.Valid(), "gateway without root is not valid") + require.True(t, snap.ConnectProxy.IsEmpty()) + require.True(t, snap.MeshGateway.IsEmpty()) + require.True(t, snap.IngressGateway.IsEmpty()) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + rootWatchEvent(), + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid(), "gateway without services is valid") + require.True(t, snap.ConnectProxy.IsEmpty()) + require.True(t, snap.MeshGateway.IsEmpty()) + require.True(t, snap.IngressGateway.IsEmpty()) + require.True(t, snap.TerminatingGateway.IsEmpty()) + require.Equal(t, indexedRoots, snap.Roots) + }, + }, + }, + }, + "terminating-gateway-handle-update": testCase{ + ns: structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + ID: "terminating-gateway", + Service: "terminating-gateway", + Address: "10.0.1.1", + }, + sourceDC: "dc1", + stages: []verificationStage{ + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), + gatewayServicesWatchID: genVerifyServiceSpecificRequest(gatewayServicesWatchID, + "terminating-gateway", "", "dc1", false), + }, + events: []cache.UpdateEvent{ + rootWatchEvent(), + cache.UpdateEvent{ + CorrelationID: gatewayServicesWatchID, + Result: &structs.IndexedGatewayServices{ + Services: structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("terminating-gateway", nil), + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.True(t, snap.Valid(), "gateway with service list is valid") + require.Len(t, snap.TerminatingGateway.WatchedServices, 1) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: gatewayServicesWatchID, + Result: &structs.IndexedGatewayServices{ + Services: structs.GatewayServices{ + { + Service: structs.NewServiceName("db", nil), + Gateway: structs.NewServiceName("terminating-gateway", nil), + }, + { + Service: structs.NewServiceName("billing", nil), + Gateway: structs.NewServiceName("terminating-gateway", nil), + }, + { + Service: structs.NewServiceName("api", nil), + Gateway: structs.NewServiceName("terminating-gateway", nil), + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + db := structs.NewServiceName("db", nil) + billing := structs.NewServiceName("billing", nil) + api := structs.NewServiceName("api", nil) + + require.True(t, snap.Valid(), "gateway with service list is valid") + require.Len(t, snap.TerminatingGateway.WatchedServices, 3) + require.Contains(t, snap.TerminatingGateway.WatchedServices, db) + require.Contains(t, snap.TerminatingGateway.WatchedServices, billing) + require.Contains(t, snap.TerminatingGateway.WatchedServices, api) + + require.Len(t, snap.TerminatingGateway.WatchedIntentions, 3) + require.Contains(t, snap.TerminatingGateway.WatchedIntentions, db) + require.Contains(t, snap.TerminatingGateway.WatchedIntentions, billing) + require.Contains(t, snap.TerminatingGateway.WatchedIntentions, api) + + require.Len(t, snap.TerminatingGateway.WatchedLeaves, 3) + require.Contains(t, snap.TerminatingGateway.WatchedLeaves, db) + require.Contains(t, snap.TerminatingGateway.WatchedLeaves, billing) + require.Contains(t, snap.TerminatingGateway.WatchedLeaves, api) + + require.Len(t, snap.TerminatingGateway.WatchedResolvers, 3) + require.Contains(t, snap.TerminatingGateway.WatchedResolvers, db) + require.Contains(t, snap.TerminatingGateway.WatchedResolvers, billing) + require.Contains(t, snap.TerminatingGateway.WatchedResolvers, api) + + require.Len(t, snap.TerminatingGateway.GatewayServices, 3) + require.Contains(t, snap.TerminatingGateway.GatewayServices, db) + require.Contains(t, snap.TerminatingGateway.GatewayServices, billing) + require.Contains(t, snap.TerminatingGateway.GatewayServices, api) + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + "external-service:" + dbStr: genVerifyServiceWatch("db", "", "dc1", false), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "external-service:" + dbStr, + Result: &structs.IndexedCheckServiceNodes{ + Nodes: structs.CheckServiceNodes{ + { + Node: &structs.Node{ + Node: "node1", + Address: "127.0.0.1", + }, + Service: &structs.NodeService{ + ID: "db", + Service: "db", + }, + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.Len(t, snap.TerminatingGateway.ServiceGroups, 1) + require.Equal(t, snap.TerminatingGateway.ServiceGroups[structs.NewServiceName("db", nil)], + structs.CheckServiceNodes{ + { + Node: &structs.Node{ + Node: "node1", + Address: "127.0.0.1", + }, + Service: &structs.NodeService{ + ID: "db", + Service: "db", + }, + }, + }, + ) + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + "external-service:" + apiStr: genVerifyServiceWatch("api", "", "dc1", false), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "external-service:" + apiStr, + Result: &structs.IndexedCheckServiceNodes{ + Nodes: structs.CheckServiceNodes{ + { + Node: &structs.Node{ + Node: "node1", + Address: "10.0.1.1", + }, + Service: &structs.NodeService{ + ID: "api", + Service: "api", + Address: "api.mydomain", + }, + }, + { + Node: &structs.Node{ + Node: "node2", + Address: "10.0.1.2", + }, + Service: &structs.NodeService{ + ID: "api", + Service: "api", + Address: "api.altdomain", + }, + }, + { + Node: &structs.Node{ + Node: "node3", + Address: "10.0.1.3", + }, + Service: &structs.NodeService{ + ID: "api", + Service: "api", + Address: "10.0.1.3", + }, + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.Len(t, snap.TerminatingGateway.ServiceGroups, 2) + expect := structs.CheckServiceNodes{ + { + Node: &structs.Node{ + Node: "node1", + Address: "10.0.1.1", + }, + Service: &structs.NodeService{ + ID: "api", + Service: "api", + Address: "api.mydomain", + }, + }, + { + Node: &structs.Node{ + Node: "node2", + Address: "10.0.1.2", + }, + Service: &structs.NodeService{ + ID: "api", + Service: "api", + Address: "api.altdomain", + }, + }, + { + Node: &structs.Node{ + Node: "node3", + Address: "10.0.1.3", + }, + Service: &structs.NodeService{ + ID: "api", + Service: "api", + Address: "10.0.1.3", + }, + }, + } + sn := structs.NewServiceName("api", nil) + require.Equal(t, snap.TerminatingGateway.ServiceGroups[sn], expect) + + // The instance in node3 should not be present in HostnameDatacenters because it has a valid IP + require.ElementsMatch(t, snap.TerminatingGateway.HostnameServices[sn], expect[:2]) + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + "service-leaf:" + dbStr: genVerifyLeafWatch("db", "dc1"), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "service-leaf:" + dbStr, + Result: issuedCert, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + require.Equal(t, snap.TerminatingGateway.ServiceLeaves[structs.NewServiceName("db", nil)], issuedCert) + }, + }, + verificationStage{ + requiredWatches: map[string]verifyWatchRequest{ + "service-resolver:" + dbStr: genVerifyResolverWatch("db", "dc1", structs.ServiceResolver), + }, + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: "service-resolver:" + dbStr, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Name: "db", + Kind: structs.ServiceResolver, + Redirect: &structs.ServiceResolverRedirect{ + Service: "db", + Datacenter: "dc2", + }, + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + want := &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + Redirect: &structs.ServiceResolverRedirect{ + Service: "db", + Datacenter: "dc2", + }, + } + require.Equal(t, want, snap.TerminatingGateway.ServiceResolvers[structs.NewServiceName("db", nil)]) + }, + }, + verificationStage{ + events: []cache.UpdateEvent{ + cache.UpdateEvent{ + CorrelationID: gatewayServicesWatchID, + Result: &structs.IndexedGatewayServices{ + Services: structs.GatewayServices{ + { + Service: structs.NewServiceName("billing", nil), + Gateway: structs.NewServiceName("terminating-gateway", nil), + }, + }, + }, + Err: nil, + }, + }, + verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { + billing := structs.NewServiceName("billing", nil) + + require.True(t, snap.Valid(), "gateway with service list is valid") + + // All the watches should have been cancelled for db + require.Len(t, snap.TerminatingGateway.WatchedServices, 1) + require.Contains(t, snap.TerminatingGateway.WatchedServices, billing) + + require.Len(t, snap.TerminatingGateway.WatchedIntentions, 1) + require.Contains(t, snap.TerminatingGateway.WatchedIntentions, billing) + + require.Len(t, snap.TerminatingGateway.WatchedLeaves, 1) + require.Contains(t, snap.TerminatingGateway.WatchedLeaves, billing) + + require.Len(t, snap.TerminatingGateway.WatchedResolvers, 1) + require.Contains(t, snap.TerminatingGateway.WatchedResolvers, billing) + + require.Len(t, snap.TerminatingGateway.GatewayServices, 1) + require.Contains(t, snap.TerminatingGateway.GatewayServices, billing) + + // There was no update event for billing's leaf/endpoints/resolvers, so length is 0 + require.Len(t, snap.TerminatingGateway.ServiceGroups, 0) + require.Len(t, snap.TerminatingGateway.ServiceLeaves, 0) + require.Len(t, snap.TerminatingGateway.ServiceResolvers, 0) + require.Len(t, snap.TerminatingGateway.HostnameServices, 0) + }, + }, }, }, "connect-proxy": newConnectProxyCase(structs.MeshGatewayModeDefault), @@ -689,6 +1425,11 @@ Datacenter: tc.sourceDC, } + state.dnsConfig = DNSConfig{ + Domain: "consul.", + AltDomain: "alt.consul.", + } + // setup the ctx as initWatches expects this to be there state.ctx, state.cancel = context.WithCancel(context.Background()) diff -Nru consul-1.7.4+dfsg1/agent/proxycfg/testing.go consul-1.8.7+dfsg1/agent/proxycfg/testing.go --- consul-1.7.4+dfsg1/agent/proxycfg/testing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/proxycfg/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,9 @@ import ( "context" "fmt" + "io/ioutil" "path" + "path/filepath" "sync" "sync/atomic" "time" @@ -13,6 +15,7 @@ "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" ) @@ -49,36 +52,14 @@ // TestCacheWithTypes registers ControllableCacheTypes for all types that // proxycfg will watch suitable for testing a proxycfg.State or Manager. func TestCacheWithTypes(t testing.T, types *TestCacheTypes) *cache.Cache { - c := cache.TestCache(t) - c.RegisterType(cachetype.ConnectCARootName, types.roots, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 10 * time.Minute, - }) - c.RegisterType(cachetype.ConnectCALeafName, types.leaf, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 10 * time.Minute, - }) - c.RegisterType(cachetype.IntentionMatchName, types.intentions, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 10 * time.Minute, - }) - c.RegisterType(cachetype.HealthServicesName, types.health, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 10 * time.Minute, - }) - c.RegisterType(cachetype.PreparedQueryName, types.query, &cache.RegisterOptions{ - Refresh: false, - }) - c.RegisterType(cachetype.CompiledDiscoveryChainName, types.compiledChain, &cache.RegisterOptions{ - Refresh: true, - RefreshTimer: 0, - RefreshTimeout: 10 * time.Minute, - }) - c.RegisterType(cachetype.ServiceHTTPChecksName, types.serviceHTTPChecks, &cache.RegisterOptions{}) + c := cache.New(cache.Options{}) + c.RegisterType(cachetype.ConnectCARootName, types.roots) + c.RegisterType(cachetype.ConnectCALeafName, types.leaf) + c.RegisterType(cachetype.IntentionMatchName, types.intentions) + c.RegisterType(cachetype.HealthServicesName, types.health) + c.RegisterType(cachetype.PreparedQueryName, types.query) + c.RegisterType(cachetype.CompiledDiscoveryChainName, types.compiledChain) + c.RegisterType(cachetype.ServiceHTTPChecksName, types.serviceHTTPChecks) return c } @@ -394,6 +375,110 @@ } } +func TestGatewayNodesDC4Hostname(t testing.T) structs.CheckServiceNodes { + return structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-2", + Node: "mesh-gateway", + Address: "10.30.1.2", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.2", 8443, + structs.ServiceAddress{Address: "10.30.1.2", Port: 8443}, + structs.ServiceAddress{Address: "456.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-3", + Node: "mesh-gateway", + Address: "10.30.1.3", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.3", 8443, + structs.ServiceAddress{Address: "10.30.1.3", Port: 8443}, + structs.ServiceAddress{Address: "198.38.1.1", Port: 443}), + }, + } +} + +func TestGatewayNodesDC5Hostname(t testing.T) structs.CheckServiceNodes { + return structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc5", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-2", + Node: "mesh-gateway", + Address: "10.30.1.2", + Datacenter: "dc5", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.2", 8443, + structs.ServiceAddress{Address: "10.30.1.2", Port: 8443}, + structs.ServiceAddress{Address: "456.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-3", + Node: "mesh-gateway", + Address: "10.30.1.3", + Datacenter: "dc5", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.3", 8443, + structs.ServiceAddress{Address: "10.30.1.3", Port: 8443}, + structs.ServiceAddress{Address: "198.38.1.1", Port: 443}), + }, + } +} + +func TestGatewayNodesDC6Hostname(t testing.T) structs.CheckServiceNodes { + return structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc6", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-east-1.elb.notaws.com", Port: 443}), + Checks: structs.HealthChecks{ + { + Status: api.HealthCritical, + }, + }, + }, + } +} + func TestGatewayServiceGroupBarDC1(t testing.T) structs.CheckServiceNodes { return structs.CheckServiceNodes{ structs.CheckServiceNode{ @@ -586,18 +671,20 @@ }, Roots: roots, ConnectProxy: configSnapshotConnectProxy{ - Leaf: leaf, - DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ - "db": dbChain, + ConfigSnapshotUpstreams: ConfigSnapshotUpstreams{ + Leaf: leaf, + DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ + "db": dbChain, + }, + WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ + "db": map[string]structs.CheckServiceNodes{ + "db.default.dc1": TestUpstreamNodes(t), + }, + }, }, PreparedQueryEndpoints: map[string]structs.CheckServiceNodes{ "prepared_query:geo-cache": TestUpstreamNodes(t), }, - WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ - "db": map[string]structs.CheckServiceNodes{ - "db.default.dc1": TestUpstreamNodes(t), - }, - }, }, Datacenter: "dc1", } @@ -664,14 +751,61 @@ return testConfigSnapshotDiscoveryChain(t, "default") } +func TestConfigSnapshotDiscoveryChainWithSplitter(t testing.T) *ConfigSnapshot { + return testConfigSnapshotDiscoveryChain(t, "chain-and-splitter") +} + +func TestConfigSnapshotDiscoveryChainWithGRPCRouter(t testing.T) *ConfigSnapshot { + return testConfigSnapshotDiscoveryChain(t, "grpc-router") +} + +func TestConfigSnapshotDiscoveryChainWithRouter(t testing.T) *ConfigSnapshot { + return testConfigSnapshotDiscoveryChain(t, "chain-and-router") +} + func testConfigSnapshotDiscoveryChain(t testing.T, variation string, additionalEntries ...structs.ConfigEntry) *ConfigSnapshot { roots, leaf := TestCerts(t) + snap := &ConfigSnapshot{ + Kind: structs.ServiceKindConnectProxy, + Service: "web-sidecar-proxy", + ProxyID: structs.NewServiceID("web-sidecar-proxy", nil), + Address: "0.0.0.0", + Port: 9999, + Proxy: structs.ConnectProxyConfig{ + DestinationServiceID: "web", + DestinationServiceName: "web", + LocalServiceAddress: "127.0.0.1", + LocalServicePort: 8080, + Config: map[string]interface{}{ + "foo": "bar", + }, + Upstreams: structs.TestUpstreams(t), + }, + Roots: roots, + ConnectProxy: configSnapshotConnectProxy{ + ConfigSnapshotUpstreams: setupTestVariationConfigEntriesAndSnapshot( + t, variation, leaf, additionalEntries..., + ), + }, + Datacenter: "dc1", + } + + return snap +} + +func setupTestVariationConfigEntriesAndSnapshot( + t testing.T, + variation string, + leaf *structs.IssuedCert, + additionalEntries ...structs.ConfigEntry, +) ConfigSnapshotUpstreams { // Compile a chain. var ( entries []structs.ConfigEntry compileSetup func(req *discoverychain.CompileRequest) ) + switch variation { case "default": // no config entries @@ -852,9 +986,272 @@ }, }, ) + case "chain-and-splitter": + entries = append(entries, + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + ConnectTimeout: 33 * time.Second, + }, + &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + &structs.ServiceSplitterConfigEntry{ + Kind: structs.ServiceSplitter, + Name: "db", + Splits: []structs.ServiceSplit{ + {Weight: 95.5, Service: "big-side"}, + {Weight: 4, Service: "goldilocks-side"}, + {Weight: 0.5, Service: "lil-bit-side"}, + }, + }, + ) + case "grpc-router": + entries = append(entries, + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + ConnectTimeout: 33 * time.Second, + }, + &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "grpc", + }, + }, + &structs.ServiceRouterConfigEntry{ + Kind: structs.ServiceRouter, + Name: "db", + Routes: []structs.ServiceRoute{ + { + Match: &structs.ServiceRouteMatch{ + HTTP: &structs.ServiceRouteHTTPMatch{ + PathExact: "/fgrpc.PingServer/Ping", + }, + }, + Destination: &structs.ServiceRouteDestination{ + Service: "prefix", + }, + }, + }, + }, + ) + case "chain-and-router": + entries = append(entries, + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "db", + ConnectTimeout: 33 * time.Second, + }, + &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + &structs.ServiceSplitterConfigEntry{ + Kind: structs.ServiceSplitter, + Name: "split-3-ways", + Splits: []structs.ServiceSplit{ + {Weight: 95.5, Service: "big-side"}, + {Weight: 4, Service: "goldilocks-side"}, + {Weight: 0.5, Service: "lil-bit-side"}, + }, + }, + &structs.ServiceRouterConfigEntry{ + Kind: structs.ServiceRouter, + Name: "db", + Routes: []structs.ServiceRoute{ + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/prefix", + }), + Destination: toService("prefix"), + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathExact: "/exact", + }), + Destination: toService("exact"), + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathRegex: "/regex", + }), + Destination: toService("regex"), + }, + { + Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ + Name: "x-debug", + Present: true, + }), + Destination: toService("hdr-present"), + }, + { + Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ + Name: "x-debug", + Present: true, + Invert: true, + }), + Destination: toService("hdr-not-present"), + }, + { + Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ + Name: "x-debug", + Exact: "exact", + }), + Destination: toService("hdr-exact"), + }, + { + Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ + Name: "x-debug", + Prefix: "prefix", + }), + Destination: toService("hdr-prefix"), + }, + { + Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ + Name: "x-debug", + Suffix: "suffix", + }), + Destination: toService("hdr-suffix"), + }, + { + Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ + Name: "x-debug", + Regex: "regex", + }), + Destination: toService("hdr-regex"), + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + Methods: []string{"GET", "PUT"}, + }), + Destination: toService("just-methods"), + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + Header: []structs.ServiceRouteHTTPMatchHeader{ + { + Name: "x-debug", + Exact: "exact", + }, + }, + Methods: []string{"GET", "PUT"}, + }), + Destination: toService("hdr-exact-with-method"), + }, + { + Match: httpMatchParam(structs.ServiceRouteHTTPMatchQueryParam{ + Name: "secretparam1", + Exact: "exact", + }), + Destination: toService("prm-exact"), + }, + { + Match: httpMatchParam(structs.ServiceRouteHTTPMatchQueryParam{ + Name: "secretparam2", + Regex: "regex", + }), + Destination: toService("prm-regex"), + }, + { + Match: httpMatchParam(structs.ServiceRouteHTTPMatchQueryParam{ + Name: "secretparam3", + Present: true, + }), + Destination: toService("prm-present"), + }, + { + Match: nil, + Destination: toService("nil-match"), + }, + { + Match: &structs.ServiceRouteMatch{}, + Destination: toService("empty-match-1"), + }, + { + Match: &structs.ServiceRouteMatch{ + HTTP: &structs.ServiceRouteHTTPMatch{}, + }, + Destination: toService("empty-match-2"), + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/prefix", + }), + Destination: &structs.ServiceRouteDestination{ + Service: "prefix-rewrite-1", + PrefixRewrite: "/", + }, + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/prefix", + }), + Destination: &structs.ServiceRouteDestination{ + Service: "prefix-rewrite-2", + PrefixRewrite: "/nested/newlocation", + }, + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/timeout", + }), + Destination: &structs.ServiceRouteDestination{ + Service: "req-timeout", + RequestTimeout: 33 * time.Second, + }, + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/retry-connect", + }), + Destination: &structs.ServiceRouteDestination{ + Service: "retry-connect", + NumRetries: 15, + RetryOnConnectFailure: true, + }, + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/retry-codes", + }), + Destination: &structs.ServiceRouteDestination{ + Service: "retry-codes", + NumRetries: 15, + RetryOnStatusCodes: []uint32{401, 409, 451}, + }, + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/retry-both", + }), + Destination: &structs.ServiceRouteDestination{ + Service: "retry-both", + RetryOnConnectFailure: true, + RetryOnStatusCodes: []uint32{401, 409, 451}, + }, + }, + { + Match: httpMatch(&structs.ServiceRouteHTTPMatch{ + PathPrefix: "/split-3-ways", + }), + Destination: toService("split-3-ways"), + }, + }, + }, + ) + case "http-multiple-services": default: t.Fatalf("unexpected variation: %q", variation) - return nil + return ConfigSnapshotUpstreams{} } if len(additionalEntries) > 0 { @@ -863,35 +1260,16 @@ dbChain := discoverychain.TestCompileConfigEntries(t, "db", "default", "dc1", connect.TestClusterID+".consul", "dc1", compileSetup, entries...) - snap := &ConfigSnapshot{ - Kind: structs.ServiceKindConnectProxy, - Service: "web-sidecar-proxy", - ProxyID: structs.NewServiceID("web-sidecar-proxy", nil), - Address: "0.0.0.0", - Port: 9999, - Proxy: structs.ConnectProxyConfig{ - DestinationServiceID: "web", - DestinationServiceName: "web", - LocalServiceAddress: "127.0.0.1", - LocalServicePort: 8080, - Config: map[string]interface{}{ - "foo": "bar", - }, - Upstreams: structs.TestUpstreams(t), + snap := ConfigSnapshotUpstreams{ + Leaf: leaf, + DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ + "db": dbChain, }, - Roots: roots, - ConnectProxy: configSnapshotConnectProxy{ - Leaf: leaf, - DiscoveryChain: map[string]*structs.CompiledDiscoveryChain{ - "db": dbChain, - }, - WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ - "db": map[string]structs.CheckServiceNodes{ - "db.default.dc1": TestUpstreamNodes(t), - }, + WatchedUpstreamEndpoints: map[string]map[string]structs.CheckServiceNodes{ + "db": map[string]structs.CheckServiceNodes{ + "db.default.dc1": TestUpstreamNodes(t), }, }, - Datacenter: "dc1", } switch variation { @@ -900,81 +1278,95 @@ case "simple": case "external-sni": case "failover": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["fail.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["fail.default.dc1"] = TestUpstreamNodesAlternate(t) case "failover-through-remote-gateway-triggered": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") fallthrough case "failover-through-remote-gateway": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = TestUpstreamNodesDC2(t) - snap.ConnectProxy.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ + snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": map[string]structs.CheckServiceNodes{ "dc2": TestGatewayNodesDC2(t), }, } case "failover-through-double-remote-gateway-triggered": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = TestUpstreamNodesInStatusDC2(t, "critical") fallthrough case "failover-through-double-remote-gateway": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc3"] = TestUpstreamNodesDC2(t) - snap.ConnectProxy.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ + snap.WatchedUpstreamEndpoints["db"]["db.default.dc3"] = TestUpstreamNodesDC2(t) + snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": map[string]structs.CheckServiceNodes{ "dc2": TestGatewayNodesDC2(t), "dc3": TestGatewayNodesDC3(t), }, } case "failover-through-local-gateway-triggered": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") fallthrough case "failover-through-local-gateway": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = TestUpstreamNodesDC2(t) - snap.ConnectProxy.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ + snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": map[string]structs.CheckServiceNodes{ "dc1": TestGatewayNodesDC1(t), }, } case "failover-through-double-local-gateway-triggered": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc1"] = TestUpstreamNodesInStatus(t, "critical") - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = + snap.WatchedUpstreamEndpoints["db"]["db.default.dc2"] = TestUpstreamNodesInStatusDC2(t, "critical") fallthrough case "failover-through-double-local-gateway": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"]["db.default.dc3"] = TestUpstreamNodesDC2(t) - snap.ConnectProxy.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ + snap.WatchedUpstreamEndpoints["db"]["db.default.dc3"] = TestUpstreamNodesDC2(t) + snap.WatchedGatewayEndpoints = map[string]map[string]structs.CheckServiceNodes{ "db": map[string]structs.CheckServiceNodes{ "dc1": TestGatewayNodesDC1(t), }, } case "splitter-with-resolver-redirect-multidc": - snap.ConnectProxy.WatchedUpstreamEndpoints["db"] = map[string]structs.CheckServiceNodes{ + snap.WatchedUpstreamEndpoints["db"] = map[string]structs.CheckServiceNodes{ "v1.db.default.dc1": TestUpstreamNodes(t), "v2.db.default.dc2": TestUpstreamNodesDC2(t), } + case "chain-and-splitter": + case "grpc-router": + case "chain-and-router": + case "http-multiple-services": + snap.WatchedUpstreamEndpoints["foo"] = map[string]structs.CheckServiceNodes{ + "foo.default.dc1": TestUpstreamNodes(t), + } + snap.WatchedUpstreamEndpoints["bar"] = map[string]structs.CheckServiceNodes{ + "bar.default.dc1": TestUpstreamNodesAlternate(t), + } default: t.Fatalf("unexpected variation: %q", variation) - return nil + return ConfigSnapshotUpstreams{} } return snap } func TestConfigSnapshotMeshGateway(t testing.T) *ConfigSnapshot { - return testConfigSnapshotMeshGateway(t, true) + return testConfigSnapshotMeshGateway(t, true, false) +} + +func TestConfigSnapshotMeshGatewayUsingFederationStates(t testing.T) *ConfigSnapshot { + return testConfigSnapshotMeshGateway(t, true, true) } func TestConfigSnapshotMeshGatewayNoServices(t testing.T) *ConfigSnapshot { - return testConfigSnapshotMeshGateway(t, false) + return testConfigSnapshotMeshGateway(t, false, false) } -func testConfigSnapshotMeshGateway(t testing.T, populateServices bool) *ConfigSnapshot { +func testConfigSnapshotMeshGateway(t testing.T, populateServices bool, useFederationStates bool) *ConfigSnapshot { roots, _ := TestCerts(t) snap := &ConfigSnapshot{ Kind: structs.ServiceKindMeshGateway, @@ -1004,27 +1396,203 @@ if populateServices { snap.MeshGateway = configSnapshotMeshGateway{ - WatchedServices: map[structs.ServiceID]context.CancelFunc{ - structs.NewServiceID("foo", nil): nil, - structs.NewServiceID("bar", nil): nil, + WatchedServices: map[structs.ServiceName]context.CancelFunc{ + structs.NewServiceName("foo", nil): nil, + structs.NewServiceName("bar", nil): nil, }, WatchedServicesSet: true, WatchedDatacenters: map[string]context.CancelFunc{ "dc2": nil, }, - ServiceGroups: map[structs.ServiceID]structs.CheckServiceNodes{ - structs.NewServiceID("foo", nil): TestGatewayServiceGroupFooDC1(t), - structs.NewServiceID("bar", nil): TestGatewayServiceGroupBarDC1(t), + ServiceGroups: map[structs.ServiceName]structs.CheckServiceNodes{ + structs.NewServiceName("foo", nil): TestGatewayServiceGroupFooDC1(t), + structs.NewServiceName("bar", nil): TestGatewayServiceGroupBarDC1(t), }, GatewayGroups: map[string]structs.CheckServiceNodes{ "dc2": TestGatewayNodesDC2(t), + "dc4": TestGatewayNodesDC4Hostname(t), + "dc6": TestGatewayNodesDC6Hostname(t), + }, + HostnameDatacenters: map[string]structs.CheckServiceNodes{ + "dc4": { + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-west-2.elb.notaws.com", Port: 443}), + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-2", + Node: "mesh-gateway", + Address: "10.30.1.2", + Datacenter: "dc4", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.2", 8443, + structs.ServiceAddress{Address: "10.30.1.2", Port: 8443}, + structs.ServiceAddress{Address: "456.us-west-2.elb.notaws.com", Port: 443}), + }, + }, + "dc6": { + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "mesh-gateway-1", + Node: "mesh-gateway", + Address: "10.30.1.1", + Datacenter: "dc6", + }, + Service: structs.TestNodeServiceMeshGatewayWithAddrs(t, + "10.30.1.1", 8443, + structs.ServiceAddress{Address: "10.0.1.1", Port: 8443}, + structs.ServiceAddress{Address: "123.us-east-1.elb.notaws.com", Port: 443}), + Checks: structs.HealthChecks{ + { + Status: api.HealthCritical, + }, + }, + }, + }, }, } + if useFederationStates { + snap.MeshGateway.FedStateGateways = map[string]structs.CheckServiceNodes{ + "dc2": TestGatewayNodesDC2(t), + "dc4": TestGatewayNodesDC4Hostname(t), + "dc6": TestGatewayNodesDC6Hostname(t), + } + + delete(snap.MeshGateway.GatewayGroups, "dc2") + } } return snap } +func TestConfigSnapshotIngress(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "simple") +} + +func TestConfigSnapshotIngressWithTLSListener(t testing.T) *ConfigSnapshot { + snap := testConfigSnapshotIngressGateway(t, true, "tcp", "default") + snap.IngressGateway.TLSEnabled = true + return snap +} + +func TestConfigSnapshotIngressWithOverrides(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "simple-with-overrides") +} +func TestConfigSnapshotIngress_SplitterWithResolverRedirectMultiDC(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "http", "splitter-with-resolver-redirect-multidc") +} + +func TestConfigSnapshotIngress_HTTPMultipleServices(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "http", "http-multiple-services") +} + +func TestConfigSnapshotIngressExternalSNI(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "external-sni") +} + +func TestConfigSnapshotIngressWithFailover(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover") +} + +func TestConfigSnapshotIngressWithFailoverThroughRemoteGateway(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-remote-gateway") +} + +func TestConfigSnapshotIngressWithFailoverThroughRemoteGatewayTriggered(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-remote-gateway-triggered") +} + +func TestConfigSnapshotIngressWithDoubleFailoverThroughRemoteGateway(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-double-remote-gateway") +} + +func TestConfigSnapshotIngressWithDoubleFailoverThroughRemoteGatewayTriggered(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-double-remote-gateway-triggered") +} + +func TestConfigSnapshotIngressWithFailoverThroughLocalGateway(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-local-gateway") +} + +func TestConfigSnapshotIngressWithFailoverThroughLocalGatewayTriggered(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-local-gateway-triggered") +} + +func TestConfigSnapshotIngressWithDoubleFailoverThroughLocalGateway(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-double-local-gateway") +} + +func TestConfigSnapshotIngressWithDoubleFailoverThroughLocalGatewayTriggered(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "failover-through-double-local-gateway-triggered") +} + +func TestConfigSnapshotIngressWithSplitter(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "http", "chain-and-splitter") +} + +func TestConfigSnapshotIngressWithGRPCRouter(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "http", "grpc-router") +} + +func TestConfigSnapshotIngressWithRouter(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "http", "chain-and-router") +} + +func TestConfigSnapshotIngressGateway(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "tcp", "default") +} + +func TestConfigSnapshotIngressGatewayNoServices(t testing.T) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, false, "tcp", "default") +} + +func TestConfigSnapshotIngressDiscoveryChainWithEntries(t testing.T, additionalEntries ...structs.ConfigEntry) *ConfigSnapshot { + return testConfigSnapshotIngressGateway(t, true, "http", "simple", additionalEntries...) +} + +func testConfigSnapshotIngressGateway( + t testing.T, populateServices bool, protocol, variation string, + additionalEntries ...structs.ConfigEntry, +) *ConfigSnapshot { + roots, leaf := TestCerts(t) + snap := &ConfigSnapshot{ + Kind: structs.ServiceKindIngressGateway, + Service: "ingress-gateway", + ProxyID: structs.NewServiceID("ingress-gateway", nil), + Address: "1.2.3.4", + Roots: roots, + Datacenter: "dc1", + } + if populateServices { + snap.IngressGateway = configSnapshotIngressGateway{ + ConfigSnapshotUpstreams: setupTestVariationConfigEntriesAndSnapshot( + t, variation, leaf, additionalEntries..., + ), + Upstreams: map[IngressListenerKey]structs.Upstreams{ + IngressListenerKey{protocol, 9191}: structs.Upstreams{ + { + // We rely on this one having default type in a few tests... + DestinationName: "db", + LocalBindPort: 9191, + LocalBindAddress: "2.3.4.5", + }, + }, + }, + } + } + return snap +} + func TestConfigSnapshotExposeConfig(t testing.T) *ConfigSnapshot { return &ConfigSnapshot{ Kind: structs.ServiceKindConnectProxy, @@ -1056,6 +1624,301 @@ } } +func TestConfigSnapshotTerminatingGateway(t testing.T) *ConfigSnapshot { + return testConfigSnapshotTerminatingGateway(t, true) +} + +func TestConfigSnapshotTerminatingGatewayNoServices(t testing.T) *ConfigSnapshot { + return testConfigSnapshotTerminatingGateway(t, false) +} + +func testConfigSnapshotTerminatingGateway(t testing.T, populateServices bool) *ConfigSnapshot { + roots, _ := TestCerts(t) + + snap := &ConfigSnapshot{ + Kind: structs.ServiceKindTerminatingGateway, + Service: "terminating-gateway", + ProxyID: structs.NewServiceID("terminating-gateway", nil), + Address: "1.2.3.4", + TaggedAddresses: map[string]structs.ServiceAddress{ + structs.TaggedAddressWAN: structs.ServiceAddress{ + Address: "198.18.0.1", + Port: 443, + }, + }, + Port: 8443, + Roots: roots, + Datacenter: "dc1", + } + if populateServices { + web := structs.NewServiceName("web", nil) + webNodes := TestUpstreamNodes(t) + webNodes[0].Service.Meta = map[string]string{ + "version": "1", + } + webNodes[1].Service.Meta = map[string]string{ + "version": "2", + } + + api := structs.NewServiceName("api", nil) + apiNodes := structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "api", + Node: "test1", + Address: "10.10.1.1", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "api", + Address: "api.mydomain", + Port: 8081, + }, + Checks: structs.HealthChecks{ + { + Status: "critical", + }, + }, + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "test2", + Node: "test2", + Address: "10.10.1.2", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "api", + Address: "api.altdomain", + Port: 8081, + Meta: map[string]string{ + "domain": "alt", + }, + }, + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "test3", + Node: "test3", + Address: "10.10.1.3", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "api", + Address: "10.10.1.3", + Port: 8081, + }, + }, + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "test4", + Node: "test4", + Address: "10.10.1.4", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "api", + Address: "api.thirddomain", + Port: 8081, + }, + }, + } + + // Has failing instance + db := structs.NewServiceName("db", nil) + dbNodes := structs.CheckServiceNodes{ + structs.CheckServiceNode{ + Node: &structs.Node{ + ID: "db", + Node: "test4", + Address: "10.10.1.4", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "db", + Address: "db.mydomain", + Port: 8081, + }, + Checks: structs.HealthChecks{ + { + Status: "critical", + }, + }, + }, + } + + // Has passing instance but failing subset + cache := structs.NewServiceName("cache", nil) + cacheNodes := structs.CheckServiceNodes{ + { + Node: &structs.Node{ + ID: "cache", + Node: "test5", + Address: "10.10.1.5", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "cache", + Address: "cache.mydomain", + Port: 8081, + }, + }, + { + Node: &structs.Node{ + ID: "cache", + Node: "test5", + Address: "10.10.1.5", + Datacenter: "dc1", + }, + Service: &structs.NodeService{ + Service: "cache", + Address: "cache.mydomain", + Port: 8081, + Meta: map[string]string{ + "Env": "prod", + }, + }, + Checks: structs.HealthChecks{ + { + Status: "critical", + }, + }, + }, + } + + snap.TerminatingGateway = configSnapshotTerminatingGateway{ + ServiceGroups: map[structs.ServiceName]structs.CheckServiceNodes{ + web: webNodes, + api: apiNodes, + db: dbNodes, + cache: cacheNodes, + }, + GatewayServices: map[structs.ServiceName]structs.GatewayService{ + web: { + Service: web, + CAFile: "ca.cert.pem", + }, + api: { + Service: api, + CAFile: "ca.cert.pem", + CertFile: "api.cert.pem", + KeyFile: "api.key.pem", + }, + db: { + Service: db, + }, + cache: { + Service: cache, + }, + }, + HostnameServices: map[structs.ServiceName]structs.CheckServiceNodes{ + api: {apiNodes[0], apiNodes[1]}, + db: {dbNodes[0]}, + cache: {cacheNodes[0], cacheNodes[1]}, + }, + } + snap.TerminatingGateway.ServiceLeaves = map[structs.ServiceName]*structs.IssuedCert{ + structs.NewServiceName("web", nil): { + CertPEM: golden(t, "test-leaf-cert"), + PrivateKeyPEM: golden(t, "test-leaf-key"), + }, + structs.NewServiceName("api", nil): { + CertPEM: golden(t, "alt-test-leaf-cert"), + PrivateKeyPEM: golden(t, "alt-test-leaf-key"), + }, + structs.NewServiceName("db", nil): { + CertPEM: golden(t, "db-test-leaf-cert"), + PrivateKeyPEM: golden(t, "db-test-leaf-key"), + }, + structs.NewServiceName("cache", nil): { + CertPEM: golden(t, "cache-test-leaf-cert"), + PrivateKeyPEM: golden(t, "cache-test-leaf-key"), + }, + } + } + return snap +} + +func TestConfigSnapshotGRPCExposeHTTP1(t testing.T) *ConfigSnapshot { + return &ConfigSnapshot{ + Kind: structs.ServiceKindConnectProxy, + Service: "grpc-proxy", + ProxyID: structs.NewServiceID("grpc-proxy", nil), + Address: "1.2.3.4", + Port: 8080, + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "grpc", + DestinationServiceID: "grpc", + LocalServicePort: 8080, + Config: map[string]interface{}{ + "protocol": "grpc", + }, + Expose: structs.ExposeConfig{ + Checks: false, + Paths: []structs.ExposePath{ + { + LocalPathPort: 8090, + Path: "/healthz", + ListenerPort: 21500, + Protocol: "http", + }, + }, + }, + }, + Datacenter: "dc1", + } +} + +func TestConfigSnapshotIngress_MultipleListenersDuplicateService(t testing.T) *ConfigSnapshot { + snap := TestConfigSnapshotIngress_HTTPMultipleServices(t) + + snap.IngressGateway.Upstreams = map[IngressListenerKey]structs.Upstreams{ + IngressListenerKey{Protocol: "http", Port: 8080}: structs.Upstreams{ + { + DestinationName: "foo", + LocalBindPort: 8080, + }, + { + DestinationName: "bar", + LocalBindPort: 8080, + }, + }, + IngressListenerKey{Protocol: "http", Port: 443}: structs.Upstreams{ + { + DestinationName: "foo", + LocalBindPort: 443, + }, + }, + } + + fooChain := discoverychain.TestCompileConfigEntries(t, "foo", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) + barChain := discoverychain.TestCompileConfigEntries(t, "bar", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil) + + snap.IngressGateway.DiscoveryChain = map[string]*structs.CompiledDiscoveryChain{ + "foo": fooChain, + "bar": barChain, + } + + return snap +} + +func httpMatch(http *structs.ServiceRouteHTTPMatch) *structs.ServiceRouteMatch { + return &structs.ServiceRouteMatch{HTTP: http} +} +func httpMatchHeader(headers ...structs.ServiceRouteHTTPMatchHeader) *structs.ServiceRouteMatch { + return httpMatch(&structs.ServiceRouteHTTPMatch{ + Header: headers, + }) +} +func httpMatchParam(params ...structs.ServiceRouteHTTPMatchQueryParam) *structs.ServiceRouteMatch { + return httpMatch(&structs.ServiceRouteHTTPMatch{ + QueryParam: params, + }) +} +func toService(svc string) *structs.ServiceRouteDestination { + return &structs.ServiceRouteDestination{Service: svc} +} + // ControllableCacheType is a cache.Type that simulates a typical blocking RPC // but lets us control the responses and when they are delivered easily. type ControllableCacheType struct { @@ -1128,7 +1991,21 @@ }, nil } -// SupportsBlocking implements cache.Type -func (ct *ControllableCacheType) SupportsBlocking() bool { - return ct.blocking +func (ct *ControllableCacheType) RegisterOptions() cache.RegisterOptions { + return cache.RegisterOptions{ + Refresh: ct.blocking, + SupportsBlocking: ct.blocking, + QueryTimeout: 10 * time.Minute, + } +} + +// golden is used to read golden files stores in consul/agent/xds/testdata +func golden(t testing.T, name string) string { + t.Helper() + + golden := filepath.Join("../xds/testdata", name+".golden") + expected, err := ioutil.ReadFile(golden) + require.NoError(t, err) + + return string(expected) } diff -Nru consul-1.7.4+dfsg1/agent/remote_exec_test.go consul-1.8.7+dfsg1/agent/remote_exec_test.go --- consul-1.7.4+dfsg1/agent/remote_exec_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/remote_exec_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -134,7 +134,7 @@ } func testRemoteExecGetSpec(t *testing.T, hcl string, token string, shouldSucceed bool, dc string) { - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() if dc != "" { testrpc.WaitForLeader(t, a.RPC, dc) @@ -208,7 +208,7 @@ } func testRemoteExecWrites(t *testing.T, hcl string, token string, shouldSucceed bool, dc string) { - a := NewTestAgent(t, t.Name(), hcl) + a := NewTestAgent(t, hcl) defer a.Shutdown() if dc != "" { testrpc.WaitForLeader(t, a.RPC, dc) @@ -270,7 +270,7 @@ } func testHandleRemoteExec(t *testing.T, command string, expectedSubstring string, expectedReturnCode string) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") retry.Run(t, func(r *retry.R) { diff -Nru consul-1.7.4+dfsg1/agent/retry_join.go consul-1.8.7+dfsg1/agent/retry_join.go --- consul-1.7.4+dfsg1/agent/retry_join.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/retry_join.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,7 @@ func (a *Agent) retryJoinLAN() { r := &retryJoiner{ + variant: retryJoinSerfVariant, cluster: "LAN", addrs: a.config.RetryJoinLAN, maxAttempts: a.config.RetryJoinMaxAttemptsLAN, @@ -26,9 +27,51 @@ } func (a *Agent) retryJoinWAN() { + if !a.config.ServerMode { + a.logger.Warn("(WAN) couldn't join: Err: Must be a server to join WAN cluster") + return + } + + isPrimary := a.config.PrimaryDatacenter == a.config.Datacenter + + var joinAddrs []string + if a.config.ConnectMeshGatewayWANFederationEnabled { + // When wanfed is activated each datacenter 100% relies upon flood-join + // to replicate the LAN members in a dc into the WAN pool. We + // completely hijack whatever the user configured to correctly + // implement the star-join. + // + // Elsewhere we enforce that start-join-wan and retry-join-wan cannot + // be set if wanfed is enabled so we don't have to emit any warnings + // related to that here. + + if isPrimary { + // Wanfed requires that secondaries join TO the primary and the + // primary doesn't explicitly join down to the secondaries, so as + // such in the primary a retry-join operation is a no-op. + return + } + + // First get a handle on dialing the primary + a.refreshPrimaryGatewayFallbackAddresses() + + // Then "retry join" a special address via the gateway which is + // load balanced to all servers in the primary datacenter + // + // Since this address is merely a placeholder we use an address from the + // TEST-NET-1 block as described in https://tools.ietf.org/html/rfc5735#section-3 + const placeholderIPAddress = "192.0.2.2" + joinAddrs = []string{ + fmt.Sprintf("*.%s/%s", a.config.PrimaryDatacenter, placeholderIPAddress), + } + } else { + joinAddrs = a.config.RetryJoinWAN + } + r := &retryJoiner{ + variant: retryJoinSerfVariant, cluster: "WAN", - addrs: a.config.RetryJoinWAN, + addrs: joinAddrs, maxAttempts: a.config.RetryJoinMaxAttemptsWAN, interval: a.config.RetryJoinIntervalWAN, join: a.JoinWAN, @@ -39,6 +82,27 @@ } } +func (a *Agent) refreshPrimaryGatewayFallbackAddresses() { + r := &retryJoiner{ + variant: retryJoinMeshGatewayVariant, + cluster: "primary", + addrs: a.config.PrimaryGateways, + maxAttempts: 0, + interval: a.config.PrimaryGatewaysInterval, + join: func(addrs []string) (int, error) { + if err := a.RefreshPrimaryGatewayFallbackAddresses(addrs); err != nil { + return 0, err + } + return len(addrs), nil + }, + logger: a.logger, + stopCh: a.PrimaryMeshGatewayAddressesReadyCh(), + } + if err := r.retryJoin(); err != nil { + a.retryJoinCh <- err + } +} + func newDiscover() (*discover.Discover, error) { providers := make(map[string]discover.Provider) for k, v := range discover.Providers { @@ -52,7 +116,7 @@ ) } -func retryJoinAddrs(disco *discover.Discover, cluster string, retryJoin []string, logger hclog.Logger) []string { +func retryJoinAddrs(disco *discover.Discover, variant, cluster string, retryJoin []string, logger hclog.Logger) []string { addrs := []string{} if disco == nil { return addrs @@ -73,10 +137,17 @@ } else { addrs = append(addrs, servers...) if logger != nil { - logger.Info("Discovered servers", - "cluster", cluster, - "servers", strings.Join(servers, " "), - ) + if variant == retryJoinMeshGatewayVariant { + logger.Info("Discovered mesh gateways", + "cluster", cluster, + "mesh_gateways", strings.Join(servers, " "), + ) + } else { + logger.Info("Discovered servers", + "cluster", cluster, + "servers", strings.Join(servers, " "), + ) + } } } @@ -88,9 +159,18 @@ return addrs } +const ( + retryJoinSerfVariant = "serf" + retryJoinMeshGatewayVariant = "mesh-gateway" +) + // retryJoiner is used to handle retrying a join until it succeeds or all // retries are exhausted. type retryJoiner struct { + // variant is either "serf" or "mesh-gateway" and just adjusts the log messaging + // emitted + variant string + // cluster is the name of the serf cluster, e.g. "LAN" or "WAN". cluster string @@ -108,8 +188,10 @@ // serf cluster. join func([]string) (int, error) - // logger is the agent logger. Log messages should contain the - // "agent: " prefix. + // stopCh is an optional stop channel to exit the retry loop early + stopCh <-chan struct{} + + // logger is the agent logger. logger hclog.Logger } @@ -123,32 +205,64 @@ return err } - r.logger.Info("Retry join is supported for the following discovery methods", - "discovery_methods", strings.Join(disco.Names(), " "), - ) - r.logger.Info("Joining cluster...") + if r.variant == retryJoinMeshGatewayVariant { + r.logger.Info("Refreshing mesh gateways is supported for the following discovery methods", + "discovery_methods", strings.Join(disco.Names(), " "), + ) + r.logger.Info("Refreshing mesh gateways...") + } else { + r.logger.Info("Retry join is supported for the following discovery methods", + "discovery_methods", strings.Join(disco.Names(), " "), + ) + r.logger.Info("Joining cluster...") + } + attempt := 0 for { - addrs := retryJoinAddrs(disco, r.cluster, r.addrs, r.logger) + addrs := retryJoinAddrs(disco, r.variant, r.cluster, r.addrs, r.logger) if len(addrs) > 0 { n, err := r.join(addrs) if err == nil { - r.logger.Info("Join cluster completed. Synced with initial agents", "num_agents", n) + if r.variant == retryJoinMeshGatewayVariant { + r.logger.Info("Refreshing mesh gateways completed") + } else { + r.logger.Info("Join cluster completed. Synced with initial agents", "num_agents", n) + } return nil } } else if len(addrs) == 0 { - err = fmt.Errorf("No servers to join") + if r.variant == retryJoinMeshGatewayVariant { + err = fmt.Errorf("No mesh gateways found") + } else { + err = fmt.Errorf("No servers to join") + } } attempt++ if r.maxAttempts > 0 && attempt > r.maxAttempts { - return fmt.Errorf("agent: max join %s retry exhausted, exiting", r.cluster) + if r.variant == retryJoinMeshGatewayVariant { + return fmt.Errorf("agent: max refresh of %s mesh gateways retry exhausted, exiting", r.cluster) + } else { + return fmt.Errorf("agent: max join %s retry exhausted, exiting", r.cluster) + } } - r.logger.Warn("Join cluster failed, will retry", - "retry_interval", r.interval, - "error", err, - ) - time.Sleep(r.interval) + if r.variant == retryJoinMeshGatewayVariant { + r.logger.Warn("Refreshing mesh gateways failed, will retry", + "retry_interval", r.interval, + "error", err, + ) + } else { + r.logger.Warn("Join cluster failed, will retry", + "retry_interval", r.interval, + "error", err, + ) + } + + select { + case <-time.After(r.interval): + case <-r.stopCh: + return nil + } } } diff -Nru consul-1.7.4+dfsg1/agent/retry_join_test.go consul-1.8.7+dfsg1/agent/retry_join_test.go --- consul-1.7.4+dfsg1/agent/retry_join_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/retry_join_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,7 +48,7 @@ var buf bytes.Buffer logger := testutil.LoggerWithOutput(t, &buf) - output := retryJoinAddrs(d, "LAN", test.input, logger) + output := retryJoinAddrs(d, retryJoinSerfVariant, "LAN", test.input, logger) bufout := buf.String() require.Equal(t, test.expected, output, bufout) if i == 4 { @@ -57,6 +57,6 @@ }) } t.Run("handles nil discover", func(t *testing.T) { - require.Equal(t, []string{}, retryJoinAddrs(nil, "LAN", []string{"a"}, nil)) + require.Equal(t, []string{}, retryJoinAddrs(nil, retryJoinSerfVariant, "LAN", []string{"a"}, nil)) }) } diff -Nru consul-1.7.4+dfsg1/agent/router/manager.go consul-1.8.7+dfsg1/agent/router/manager.go --- consul-1.7.4+dfsg1/agent/router/manager.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/router/manager.go 2020-12-10 21:46:52.000000000 +0000 @@ -61,7 +61,7 @@ // Pinger is an interface wrapping client.ConnPool to prevent a cyclic import // dependency. type Pinger interface { - Ping(dc string, addr net.Addr, version int) (bool, error) + Ping(dc, nodeName string, addr net.Addr) (bool, error) } // serverList is a local copy of the struct used to maintain the list of @@ -254,6 +254,9 @@ // getServerList is a convenience method which hides the locking semantics // of atomic.Value from the caller. func (m *Manager) getServerList() serverList { + if m == nil { + return serverList{} + } return m.listValue.Load().(serverList) } @@ -321,6 +324,25 @@ return len(l.servers) } +func (m *Manager) healthyServer(server *metadata.Server) bool { + // Check to see if the manager is trying to ping itself. This + // is a small optimization to avoid performing an unnecessary + // RPC call. + // If this is true, we know there are healthy servers for this + // manager and we don't need to continue. + if m.serverName != "" && server.Name == m.serverName { + return true + } + if ok, err := m.connPoolPinger.Ping(server.Datacenter, server.ShortName, server.Addr); !ok { + m.logger.Debug("pinging server failed", + "server", server.String(), + "error", err, + ) + return false + } + return true +} + // RebalanceServers shuffles the list of servers on this metadata. The server // at the front of the list is selected for the next RPC. RPC calls that // fail for a particular server are rotated to the end of the list. This @@ -345,19 +367,12 @@ // this loop mutates the server list in-place. var foundHealthyServer bool for i := 0; i < len(l.servers); i++ { - // Always test the first server. Failed servers are cycled + // Always test the first server. Failed servers are cycled // while Serf detects the node has failed. - srv := l.servers[0] - - ok, err := m.connPoolPinger.Ping(srv.Datacenter, srv.Addr, srv.Version) - if ok { + if m.healthyServer(l.servers[0]) { foundHealthyServer = true break } - m.logger.Debug("pinging server failed", - "server", srv.String(), - "error", err, - ) l.servers = l.cycleServer() } @@ -377,16 +392,17 @@ "number_of_servers", len(l.servers), "active_server", l.servers[0].String(), ) - } else { - // reconcileServerList failed because Serf removed the server - // that was at the front of the list that had successfully - // been Ping'ed. Between the Ping and reconcile, a Serf - // event had shown up removing the node. - // - // Instead of doing any heroics, "freeze in place" and - // continue to use the existing connection until the next - // rebalance occurs. } + // else { + // reconcileServerList failed because Serf removed the server + // that was at the front of the list that had successfully + // been Ping'ed. Between the Ping and reconcile, a Serf + // event had shown up removing the node. + // + // Instead of doing any heroics, "freeze in place" and + // continue to use the existing connection until the next + // rebalance occurs. + // } } // reconcileServerList returns true when the first server in serverList diff -Nru consul-1.7.4+dfsg1/agent/router/manager_internal_test.go consul-1.8.7+dfsg1/agent/router/manager_internal_test.go --- consul-1.7.4+dfsg1/agent/router/manager_internal_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/router/manager_internal_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,7 @@ "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/go-hclog" + "github.com/stretchr/testify/require" ) var ( @@ -33,7 +34,7 @@ failPct float64 } -func (cp *fauxConnPool) Ping(string, net.Addr, int) (bool, error) { +func (cp *fauxConnPool) Ping(string, string, net.Addr) (bool, error) { var success bool successProb := rand.Float64() if successProb > cp.failPct { @@ -179,7 +180,7 @@ // failPct of the servers for the reconcile. This // allows for the selected server to no longer be // healthy for the reconcile below. - if ok, _ := m.connPoolPinger.Ping(node.Datacenter, node.Addr, node.Version); ok { + if ok, _ := m.connPoolPinger.Ping(node.Datacenter, node.ShortName, node.Addr); ok { // Will still be present healthyServers = append(healthyServers, node) } else { @@ -350,3 +351,53 @@ } }() } + +func TestManager_healthyServer(t *testing.T) { + t.Run("checking itself", func(t *testing.T) { + m := testManager() + m.serverName = "s1" + server := metadata.Server{Name: m.serverName} + require.True(t, m.healthyServer(&server)) + }) + t.Run("checking another server with successful ping", func(t *testing.T) { + m := testManager() + server := metadata.Server{Name: "s1"} + require.True(t, m.healthyServer(&server)) + }) + t.Run("checking another server with failed ping", func(t *testing.T) { + m := testManagerFailProb(1) + server := metadata.Server{Name: "s1"} + require.False(t, m.healthyServer(&server)) + }) +} + +func TestManager_Rebalance(t *testing.T) { + t.Run("single server cluster checking itself", func(t *testing.T) { + m := testManager() + m.serverName = "s1" + m.AddServer(&metadata.Server{Name: m.serverName}) + m.RebalanceServers() + require.False(t, m.IsOffline()) + }) + t.Run("multi server cluster is unhealthy when pings always fail", func(t *testing.T) { + m := testManagerFailProb(1) + m.AddServer(&metadata.Server{Name: "s1"}) + m.AddServer(&metadata.Server{Name: "s2"}) + m.AddServer(&metadata.Server{Name: "s3"}) + for i := 0; i < 100; i++ { + m.RebalanceServers() + require.True(t, m.IsOffline()) + } + }) + t.Run("multi server cluster checking itself remains healthy despite pings always fail", func(t *testing.T) { + m := testManagerFailProb(1) + m.serverName = "s1" + m.AddServer(&metadata.Server{Name: m.serverName}) + m.AddServer(&metadata.Server{Name: "s2"}) + m.AddServer(&metadata.Server{Name: "s3"}) + for i := 0; i < 100; i++ { + m.RebalanceServers() + require.False(t, m.IsOffline()) + } + }) +} diff -Nru consul-1.7.4+dfsg1/agent/router/manager_test.go consul-1.8.7+dfsg1/agent/router/manager_test.go --- consul-1.7.4+dfsg1/agent/router/manager_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/router/manager_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ failAddr net.Addr } -func (cp *fauxConnPool) Ping(dc string, addr net.Addr, version int) (bool, error) { +func (cp *fauxConnPool) Ping(dc string, nodeName string, addr net.Addr) (bool, error) { var success bool successProb := rand.Float64() @@ -354,12 +354,10 @@ m.AddServer(s2) const maxServers = 19 - servers := make([]*metadata.Server, maxServers) // Already added two servers above for i := maxServers; i > 2; i-- { nodeName := fmt.Sprintf(nodeNameFmt, i) server := &metadata.Server{Name: nodeName} - servers = append(servers, server) m.AddServer(server) } if m.NumServers() != maxServers { diff -Nru consul-1.7.4+dfsg1/agent/router/router.go consul-1.8.7+dfsg1/agent/router/router.go --- consul-1.7.4+dfsg1/agent/router/router.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/router/router.go 2020-12-10 21:46:52.000000000 +0000 @@ -144,6 +144,12 @@ } r.areas[areaID] = area + // always ensure we have a started manager for the LAN area + if areaID == types.AreaLAN { + r.logger.Info("Initializing LAN area manager") + r.maybeInitializeManager(area, r.localDatacenter) + } + // Do an initial populate of the manager so that we don't have to wait // for events to fire. This lets us attempt to use all the known servers // initially, and then will quickly detect that they are failed if we @@ -151,10 +157,12 @@ for _, m := range cluster.Members() { ok, parts := metadata.IsConsulServer(m) if !ok { - r.logger.Warn("Non-server in server-only area", - "non_server", m.Name, - "area", areaID, - ) + if areaID != types.AreaLAN { + r.logger.Warn("Non-server in server-only area", + "non_server", m.Name, + "area", areaID, + ) + } continue } @@ -233,24 +241,35 @@ return nil } +// maybeInitializeManager will initialize a new manager for the given area/dc +// if its not already created. Calling this function should only be done if +// holding a write lock on the Router. +func (r *Router) maybeInitializeManager(area *areaInfo, dc string) *Manager { + info, ok := area.managers[dc] + if ok { + return info.manager + } + + shutdownCh := make(chan struct{}) + manager := New(r.logger, shutdownCh, area.cluster, area.pinger, r.serverName) + info = &managerInfo{ + manager: manager, + shutdownCh: shutdownCh, + } + area.managers[dc] = info + + managers := r.managers[dc] + r.managers[dc] = append(managers, manager) + go manager.Start() + + return manager +} + // addServer does the work of AddServer once the write lock is held. func (r *Router) addServer(area *areaInfo, s *metadata.Server) error { // Make the manager on the fly if this is the first we've seen of it, // and add it to the index. - info, ok := area.managers[s.Datacenter] - if !ok { - shutdownCh := make(chan struct{}) - manager := New(r.logger, shutdownCh, area.cluster, area.pinger, r.serverName) - info = &managerInfo{ - manager: manager, - shutdownCh: shutdownCh, - } - area.managers[s.Datacenter] = info - - managers := r.managers[s.Datacenter] - r.managers[s.Datacenter] = append(managers, manager) - go manager.Start() - } + manager := r.maybeInitializeManager(area, s.Datacenter) // If TLS is enabled for the area, set it on the server so the manager // knows to use TLS when pinging it. @@ -258,7 +277,7 @@ s.UseTLS = true } - info.manager.AddServer(s) + manager.AddServer(s) return nil } @@ -341,6 +360,28 @@ return r.routeFn(datacenter) } +// FindLANRoute returns a healthy server within the local datacenter. In some +// cases this may return a best-effort unhealthy server that can be used for a +// connection attempt. If any problem occurs with the given server, the caller +// should feed that back to the manager associated with the server, which is +// also returned, by calling NotifyFailedServer(). +func (r *Router) FindLANRoute() (*Manager, *metadata.Server) { + mgr := r.GetLANManager() + + if mgr == nil { + return nil, nil + } + + return mgr, mgr.FindServer() +} + +// FindLANServer will look for a server in the local datacenter. +// This function may return a nil value if no server is available. +func (r *Router) FindLANServer() *metadata.Server { + _, srv := r.FindLANRoute() + return srv +} + // findDirectRoute looks for a route to the given datacenter if it's directly // adjacent to the server. func (r *Router) findDirectRoute(datacenter string) (*Manager, *metadata.Server, bool) { @@ -406,6 +447,24 @@ return dcs } +// GetRemoteDatacenters returns a list of remote datacenters known to the router, sorted by +// name. +func (r *Router) GetRemoteDatacenters(local string) []string { + r.RLock() + defer r.RUnlock() + + dcs := make([]string, 0, len(r.managers)) + for dc := range r.managers { + if dc == local { + continue + } + dcs = append(dcs, dc) + } + + sort.Strings(dcs) + return dcs +} + // HasDatacenter checks whether dc is defined in WAN func (r *Router) HasDatacenter(dc string) bool { r.RLock() @@ -414,6 +473,24 @@ return ok } +// GetLANManager returns the Manager for the LAN area and the local datacenter +func (r *Router) GetLANManager() *Manager { + r.RLock() + defer r.RUnlock() + + area, ok := r.areas[types.AreaLAN] + if !ok { + return nil + } + + managerInfo, ok := area.managers[r.localDatacenter] + if !ok { + return nil + } + + return managerInfo.manager +} + // datacenterSorter takes a list of DC names and a parallel vector of distances // and implements sort.Interface, keeping both structures coherent and sorting // by distance. @@ -459,10 +536,13 @@ for _, m := range info.cluster.Members() { ok, parts := metadata.IsConsulServer(m) if !ok { - r.logger.Warn("Non-server in server-only area", - "non_server", m.Name, - "area", areaID, - ) + if areaID != types.AreaLAN { + r.logger.Warn("Non-server in server-only area", + "non_server", m.Name, + "area", areaID, + "func", "GetDatacentersByDistance", + ) + } continue } @@ -470,6 +550,7 @@ r.logger.Debug("server in area left, skipping", "server", m.Name, "area", areaID, + "func", "GetDatacentersByDistance", ) continue } @@ -530,10 +611,13 @@ for _, m := range info.cluster.Members() { ok, parts := metadata.IsConsulServer(m) if !ok { - r.logger.Warn("Non-server in server-only area", - "non_server", m.Name, - "area", areaID, - ) + if areaID != types.AreaLAN { + r.logger.Warn("Non-server in server-only area", + "non_server", m.Name, + "area", areaID, + "func", "GetDatacenterMaps", + ) + } continue } @@ -541,6 +625,7 @@ r.logger.Debug("server in area left, skipping", "server", m.Name, "area", areaID, + "func", "GetDatacenterMaps", ) continue } diff -Nru consul-1.7.4+dfsg1/agent/router/router_test.go consul-1.8.7+dfsg1/agent/router/router_test.go --- consul-1.7.4+dfsg1/agent/router/router_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/router/router_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,8 @@ "github.com/hashicorp/consul/types" "github.com/hashicorp/serf/coordinate" "github.com/hashicorp/serf/serf" + + "github.com/stretchr/testify/require" ) type mockCluster struct { @@ -69,6 +71,26 @@ m.addr++ } +func (m *mockCluster) AddLANMember(dc, name, role string, coord *coordinate.Coordinate) { + member := serf.Member{ + Name: name, + Addr: net.ParseIP(fmt.Sprintf("127.0.0.%d", m.addr)), + Port: 8300, + Tags: map[string]string{ + "dc": dc, + "role": role, + "port": "8300", + "build": "0.8.0", + "vsn": "3", + }, + } + m.members = append(m.members, member) + if coord != nil { + m.coords[member.Name] = coord + } + m.addr++ +} + // testCluster is used to generate a single WAN-like area with a known set of // member and RTT topology. // @@ -487,3 +509,22 @@ } } } + +func TestRouter_FindLANServer(t *testing.T) { + r := testRouter(t, "dc0") + + lan := newMockCluster("node4.dc0") + lan.AddLANMember("dc0", "node0", "consul", lib.GenerateCoordinate(10*time.Millisecond)) + lan.AddLANMember("dc0", "node1", "", lib.GenerateCoordinate(20*time.Millisecond)) + lan.AddLANMember("dc0", "node2", "", lib.GenerateCoordinate(21*time.Millisecond)) + + require.NoError(t, r.AddArea(types.AreaLAN, lan, &fauxConnPool{})) + + srv := r.FindLANServer() + require.NotNil(t, srv) + require.Equal(t, "127.0.0.1:8300", srv.Addr.String()) + + mgr, srv2 := r.FindLANRoute() + require.NotNil(t, mgr) + require.Equal(t, srv, srv2) +} diff -Nru consul-1.7.4+dfsg1/agent/router/serf_adapter.go consul-1.8.7+dfsg1/agent/router/serf_adapter.go --- consul-1.7.4+dfsg1/agent/router/serf_adapter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/router/serf_adapter.go 2020-12-10 21:46:52.000000000 +0000 @@ -67,9 +67,10 @@ case serf.EventMemberFailed: handleMemberEvent(logger, router.FailServer, areaID, e) - // All of these event types are ignored. case serf.EventMemberUpdate: handleMemberEvent(logger, router.AddServer, areaID, e) + + // All of these event types are ignored. case serf.EventUser: case serf.EventQuery: diff -Nru consul-1.7.4+dfsg1/agent/routine-leak-checker/leak_test.go consul-1.8.7+dfsg1/agent/routine-leak-checker/leak_test.go --- consul-1.7.4+dfsg1/agent/routine-leak-checker/leak_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/routine-leak-checker/leak_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,135 @@ +package leakcheck + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/x509" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/hashicorp/consul/agent" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/consul/tlsutil" + "github.com/stretchr/testify/require" + "go.uber.org/goleak" +) + +func testTLSCertificates(serverName string) (cert string, key string, cacert string, err error) { + // generate CA + serial, err := tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + signer, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return "", "", "", err + } + ca, err := tlsutil.GenerateCA(signer, serial, 365, nil) + if err != nil { + return "", "", "", err + } + + // generate leaf + serial, err = tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + + cert, privateKey, err := tlsutil.GenerateCert( + signer, + ca, + serial, + "Test Cert Name", + 365, + []string{serverName}, + nil, + []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + ) + if err != nil { + return "", "", "", err + } + + return cert, privateKey, ca, nil +} + +func setupPrimaryServer(t *testing.T) *agent.TestAgent { + d := testutil.TempDir(t, "leaks-primary-server") + t.Cleanup(func() { os.RemoveAll(d) }) + + certPEM, keyPEM, caPEM, err := testTLSCertificates("server.primary.consul") + require.NoError(t, err) + + certPath := filepath.Join(d, "cert.pem") + keyPath := filepath.Join(d, "key.pem") + caPath := filepath.Join(d, "cacert.pem") + + require.NoError(t, ioutil.WriteFile(certPath, []byte(certPEM), 0600)) + require.NoError(t, ioutil.WriteFile(keyPath, []byte(keyPEM), 0600)) + require.NoError(t, ioutil.WriteFile(caPath, []byte(caPEM), 0600)) + + aclParams := agent.DefaulTestACLConfigParams() + aclParams.PrimaryDatacenter = "primary" + aclParams.EnableTokenReplication = true + + config := ` + server = true + datacenter = "primary" + primary_datacenter = "primary" + enable_central_service_config = true + + connect { + enabled = true + } + + auto_encrypt { + allow_tls = true + } + ` + agent.TestACLConfigWithParams(aclParams) + + a := agent.NewTestAgent(t, config) + t.Cleanup(func() { a.Shutdown() }) + + testrpc.WaitForTestAgent(t, a.RPC, "primary", testrpc.WithToken(agent.TestDefaultMasterToken)) + + return a +} + +func TestTestAgentLeaks_Server(t *testing.T) { + /* + Eventually go routine leak checking should be moved into other packages such as the agent + and agent/consul packages. However there are too many leaks for the test to run properly. + + Many of the leaks are due to blocking queries from clients to servers being uncancellable. + Until we can move away from net/rpc and fix some of the other issues we don't want a + completely unbounded test which is guaranteed to fail 100% of the time. For now this + test will do. When we do update it we should add this in a *_test.go file in the packages + that we want to enable leak checking within: + + import ( + "testing" + + "go.uber.org/goleak" + ) + + func TestMain(m *testing.M) { + goleak.VerifyTestMain(m, + goleak.IgnoreTopFunction("k8s.io/klog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/hashicorp/consul/sdk/freeport.checkFreedPorts"), + ) + } + */ + + defer goleak.VerifyNone(t, + goleak.IgnoreTopFunction("k8s.io/klog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/hashicorp/consul/sdk/freeport.checkFreedPorts"), + ) + + primaryServer := setupPrimaryServer(t) + primaryServer.Shutdown() +} diff -Nru consul-1.7.4+dfsg1/agent/service_checks_test.go consul-1.8.7+dfsg1/agent/service_checks_test.go --- consul-1.7.4+dfsg1/agent/service_checks_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/service_checks_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestAgent_ServiceHTTPChecksNotification(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/service_manager.go consul-1.8.7+dfsg1/agent/service_manager.go --- consul-1.7.4+dfsg1/agent/service_manager.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/service_manager.go 2020-12-10 21:46:52.000000000 +0000 @@ -86,7 +86,11 @@ s.agent.stateLock.Lock() defer s.agent.stateLock.Unlock() - err := s.agent.addServiceInternal(args, s.agent.snapshotCheckState()) + if args.snap == nil { + args.snap = s.agent.snapshotCheckState() + } + + err := s.agent.addServiceInternal(args) if err != nil { return fmt.Errorf("error updating service registration: %v", err) } @@ -120,14 +124,14 @@ req.service.EnterpriseMeta.Normalize() - // For now only sidecar proxies have anything that can be configured + // For now only proxies have anything that can be configured // centrally. So bypass the whole manager for regular services. - if !req.service.IsSidecarProxy() && !req.service.IsMeshGateway() { + if !req.service.IsSidecarProxy() && !req.service.IsGateway() { // previousDefaults are ignored here because they are only relevant for central config. req.persistService = nil req.persistDefaults = nil req.persistServiceConfig = false - return s.agent.addServiceInternal(req, s.agent.snapshotCheckState()) + return s.agent.addServiceInternal(req) } var ( @@ -252,7 +256,7 @@ // operation. Either way the watcher will end up with something flagged // as defaults even if they don't actually reflect actual defaults. if waitForCentralConfig { - if err := w.fetchDefaults(); err != nil { + if err := w.fetchDefaults(ctx); err != nil { return fmt.Errorf("could not retrieve initial service_defaults config for service %q: %v", service.ID, err) } } else { @@ -279,7 +283,8 @@ token: w.registration.token, replaceExistingChecks: w.registration.replaceExistingChecks, source: w.registration.source, - }, w.agent.snapshotCheckState()) + snap: w.agent.snapshotCheckState(), + }) if err != nil { return fmt.Errorf("error updating service registration: %v", err) } @@ -290,10 +295,10 @@ } // NOTE: this is called while holding the Agent.stateLock -func (w *serviceConfigWatch) fetchDefaults() error { +func (w *serviceConfigWatch) fetchDefaults(ctx context.Context) error { req := makeConfigRequest(w.agent, w.registration) - raw, _, err := w.agent.cache.Get(cachetype.ResolvedServiceConfigName, req) + raw, _, err := w.agent.cache.Get(ctx, cachetype.ResolvedServiceConfigName, req) if err != nil { return err } diff -Nru consul-1.7.4+dfsg1/agent/service_manager_test.go consul-1.8.7+dfsg1/agent/service_manager_test.go --- consul-1.7.4+dfsg1/agent/service_manager_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/service_manager_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,6 @@ "testing" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/stretchr/testify/require" @@ -18,7 +17,7 @@ func TestServiceManager_RegisterService(t *testing.T) { require := require.New(t) - a := NewTestAgent(t, t.Name(), "enable_central_service_config = true") + a := NewTestAgent(t, "enable_central_service_config = true") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -65,7 +64,7 @@ func TestServiceManager_RegisterSidecar(t *testing.T) { require := require.New(t) - a := NewTestAgent(t, t.Name(), "enable_central_service_config = true") + a := NewTestAgent(t, "enable_central_service_config = true") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -152,7 +151,7 @@ func TestServiceManager_RegisterMeshGateway(t *testing.T) { require := require.New(t) - a := NewTestAgent(t, t.Name(), "enable_central_service_config = true") + a := NewTestAgent(t, "enable_central_service_config = true") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -205,6 +204,62 @@ }, gateway) } +func TestServiceManager_RegisterTerminatingGateway(t *testing.T) { + require := require.New(t) + + a := NewTestAgent(t, "enable_central_service_config = true") + defer a.Shutdown() + + testrpc.WaitForLeader(t, a.RPC, "dc1") + + // Register a global proxy and service config + testApplyConfigEntries(t, a, + &structs.ProxyConfigEntry{ + Config: map[string]interface{}{ + "foo": 1, + }, + }, + &structs.ServiceConfigEntry{ + Kind: structs.ServiceDefaults, + Name: "terminating-gateway", + Protocol: "http", + }, + ) + + // Now register a terminating-gateway. + svc := &structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + ID: "terminating-gateway", + Service: "terminating-gateway", + Port: 443, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + } + + require.NoError(a.AddService(svc, nil, false, "", ConfigSourceLocal)) + + // Verify gateway got global config loaded + gateway := a.State.Service(structs.NewServiceID("terminating-gateway", nil)) + require.NotNil(gateway) + require.Equal(&structs.NodeService{ + Kind: structs.ServiceKindTerminatingGateway, + ID: "terminating-gateway", + Service: "terminating-gateway", + Port: 443, + TaggedAddresses: map[string]structs.ServiceAddress{}, + Proxy: structs.ConnectProxyConfig{ + Config: map[string]interface{}{ + "foo": int64(1), + "protocol": "http", + }, + }, + Weights: &structs.Weights{ + Passing: 1, + Warning: 1, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, gateway) +} + func TestServiceManager_PersistService_API(t *testing.T) { // This is the ServiceManager version of TestAgent_PersistService and // TestAgent_PurgeService. @@ -213,7 +268,7 @@ require := require.New(t) // Launch a server to manage the config entries. - serverAgent := NewTestAgent(t, t.Name(), `enable_central_service_config = true`) + serverAgent := NewTestAgent(t, `enable_central_service_config = true`) defer serverAgent.Shutdown() testrpc.WaitForLeader(t, serverAgent.RPC, "dc1") @@ -237,16 +292,12 @@ ) // Now launch a single client agent - dataDir := testutil.TempDir(t, "agent") // we manage the data dir - defer os.RemoveAll(dataDir) - cfg := ` enable_central_service_config = true server = false bootstrap = false - data_dir = "` + dataDir + `" ` - a := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a := StartTestAgent(t, TestAgent{HCL: cfg}) defer a.Shutdown() // Join first @@ -409,7 +460,7 @@ serverAgent.Shutdown() // Should load it back during later start. - a2 := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a2 := StartTestAgent(t, TestAgent{HCL: cfg, DataDir: a.DataDir}) defer a2.Shutdown() { @@ -430,7 +481,7 @@ t.Parallel() // Launch a server to manage the config entries. - serverAgent := NewTestAgent(t, t.Name(), `enable_central_service_config = true`) + serverAgent := NewTestAgent(t, `enable_central_service_config = true`) defer serverAgent.Shutdown() testrpc.WaitForLeader(t, serverAgent.RPC, "dc1") @@ -454,9 +505,6 @@ ) // Now launch a single client agent - dataDir := testutil.TempDir(t, "agent") // we manage the data dir - defer os.RemoveAll(dataDir) - serviceSnippet := ` service = { kind = "connect-proxy" @@ -479,12 +527,11 @@ cfg := ` enable_central_service_config = true - data_dir = "` + dataDir + `" server = false bootstrap = false ` + serviceSnippet - a := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a := StartTestAgent(t, TestAgent{HCL: cfg}) defer a.Shutdown() // Join first @@ -583,7 +630,7 @@ serverAgent.Shutdown() // Should load it back during later start. - a2 := NewTestAgentWithFields(t, true, TestAgent{HCL: cfg, DataDir: dataDir}) + a2 := StartTestAgent(t, TestAgent{HCL: cfg, DataDir: a.DataDir}) defer a2.Shutdown() { @@ -601,7 +648,7 @@ func TestServiceManager_Disabled(t *testing.T) { require := require.New(t) - a := NewTestAgent(t, t.Name(), "enable_central_service_config = false") + a := NewTestAgent(t, "enable_central_service_config = false") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/session_endpoint_test.go consul-1.8.7+dfsg1/agent/session_endpoint_test.go --- consul-1.7.4+dfsg1/agent/session_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/session_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,6 +14,7 @@ "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" + "github.com/stretchr/testify/require" ) func verifySession(t *testing.T, r *retry.R, a *TestAgent, want structs.Session) { @@ -62,7 +63,7 @@ func TestSessionCreate(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -96,7 +97,7 @@ "Checks": []types.CheckID{"consul"}, "LockDelay": "20s", } - enc.Encode(raw) + require.NoError(r, enc.Encode(raw)) req, _ := http.NewRequest("PUT", "/v1/session/create", body) resp := httptest.NewRecorder() @@ -120,7 +121,7 @@ func TestSessionCreate_NodeChecks(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -157,7 +158,7 @@ "NodeChecks": []types.CheckID{structs.SerfCheckID}, "LockDelay": "20s", } - enc.Encode(raw) + require.NoError(r, enc.Encode(raw)) req, _ := http.NewRequest("PUT", "/v1/session/create", body) resp := httptest.NewRecorder() @@ -181,7 +182,7 @@ func TestSessionCreate_Delete(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -215,7 +216,7 @@ "LockDelay": "20s", "Behavior": structs.SessionKeysDelete, } - enc.Encode(raw) + require.NoError(r, enc.Encode(raw)) req, _ := http.NewRequest("PUT", "/v1/session/create", body) resp := httptest.NewRecorder() @@ -239,27 +240,25 @@ func TestSessionCreate_DefaultCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") - // Associate session with node and 2 health checks - body := bytes.NewBuffer(nil) - enc := json.NewEncoder(body) raw := map[string]interface{}{ "Name": "my-cool-session", "Node": a.Config.NodeName, "LockDelay": "20s", } - enc.Encode(raw) - req, _ := http.NewRequest("PUT", "/v1/session/create", body) - resp := httptest.NewRecorder() retry.Run(t, func(r *retry.R) { + body := bytes.NewBuffer(nil) + enc := json.NewEncoder(body) + require.NoError(r, enc.Encode(raw)) + req, _ := http.NewRequest("PUT", "/v1/session/create", body) + resp := httptest.NewRecorder() obj, err := a.srv.SessionCreate(resp, req) - if err != nil { - r.Fatalf("err: %v", err) - } + require.NoError(r, err) + require.Equal(r, resp.Code, http.StatusOK) want := structs.Session{ ID: obj.(sessionCreateResponse).ID, @@ -275,31 +274,28 @@ func TestSessionCreate_NoCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") - t.Run("no check fields should yield default serfHealth", func(t *testing.T) { - body := bytes.NewBuffer(nil) - enc := json.NewEncoder(body) - raw := map[string]interface{}{ - "Name": "my-cool-session", - "Node": a.Config.NodeName, - "LockDelay": "20s", - } - enc.Encode(raw) + raw := map[string]interface{}{ + "Name": "my-cool-session", + "Node": a.Config.NodeName, + "LockDelay": "20s", + } - req, _ := http.NewRequest("PUT", "/v1/session/create", body) - resp := httptest.NewRecorder() + t.Run("no check fields should yield default serfHealth", func(t *testing.T) { retry.Run(t, func(r *retry.R) { + body := bytes.NewBuffer(nil) + enc := json.NewEncoder(body) + require.NoError(r, enc.Encode(raw)) + + req, _ := http.NewRequest("PUT", "/v1/session/create", body) + resp := httptest.NewRecorder() obj, err := a.srv.SessionCreate(resp, req) - if err != nil { - r.Fatalf("err: %v", err) - } - if obj == nil { - r.Fatalf("expected a session") - } + require.NoError(r, err) + require.Equal(r, resp.Code, http.StatusOK, resp.Body.String()) want := structs.Session{ ID: obj.(sessionCreateResponse).ID, @@ -314,23 +310,22 @@ }) t.Run("overwrite nodechecks to associate with no checks", func(t *testing.T) { - body := bytes.NewBuffer(nil) - enc := json.NewEncoder(body) raw := map[string]interface{}{ "Name": "my-cool-session", "Node": a.Config.NodeName, "NodeChecks": []string{}, "LockDelay": "20s", } - enc.Encode(raw) - req, _ := http.NewRequest("PUT", "/v1/session/create", body) - resp := httptest.NewRecorder() retry.Run(t, func(r *retry.R) { + body := bytes.NewBuffer(nil) + enc := json.NewEncoder(body) + require.NoError(r, enc.Encode(raw)) + req, _ := http.NewRequest("PUT", "/v1/session/create", body) + resp := httptest.NewRecorder() obj, err := a.srv.SessionCreate(resp, req) - if err != nil { - r.Fatalf("err: %v", err) - } + require.NoError(r, err) + require.Equal(r, resp.Code, http.StatusOK) want := structs.Session{ ID: obj.(sessionCreateResponse).ID, @@ -345,23 +340,23 @@ }) t.Run("overwrite checks to associate with no checks", func(t *testing.T) { - body := bytes.NewBuffer(nil) - enc := json.NewEncoder(body) raw := map[string]interface{}{ "Name": "my-cool-session", "Node": a.Config.NodeName, "Checks": []string{}, "LockDelay": "20s", } - enc.Encode(raw) - req, _ := http.NewRequest("PUT", "/v1/session/create", body) - resp := httptest.NewRecorder() retry.Run(t, func(r *retry.R) { + body := bytes.NewBuffer(nil) + enc := json.NewEncoder(body) + require.NoError(r, enc.Encode(raw)) + + req, _ := http.NewRequest("PUT", "/v1/session/create", body) + resp := httptest.NewRecorder() obj, err := a.srv.SessionCreate(resp, req) - if err != nil { - r.Fatalf("err: %v", err) - } + require.NoError(r, err) + require.Equal(r, resp.Code, http.StatusOK) want := structs.Session{ ID: obj.(sessionCreateResponse).ID, @@ -378,6 +373,7 @@ } func makeTestSession(t *testing.T, srv *HTTPServer) string { + t.Helper() url := "/v1/session/create" req, _ := http.NewRequest("PUT", url, nil) resp := httptest.NewRecorder() @@ -390,13 +386,14 @@ } func makeTestSessionDelete(t *testing.T, srv *HTTPServer) string { + t.Helper() // Create Session with delete behavior body := bytes.NewBuffer(nil) enc := json.NewEncoder(body) raw := map[string]interface{}{ "Behavior": "delete", } - enc.Encode(raw) + require.NoError(t, enc.Encode(raw)) url := "/v1/session/create" req, _ := http.NewRequest("PUT", url, body) @@ -410,13 +407,14 @@ } func makeTestSessionTTL(t *testing.T, srv *HTTPServer, ttl string) string { + t.Helper() // Create Session with TTL body := bytes.NewBuffer(nil) enc := json.NewEncoder(body) raw := map[string]interface{}{ "TTL": ttl, } - enc.Encode(raw) + require.NoError(t, enc.Encode(raw)) url := "/v1/session/create" req, _ := http.NewRequest("PUT", url, body) @@ -431,7 +429,7 @@ func TestSessionDestroy(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -451,7 +449,7 @@ func TestSessionCustomTTL(t *testing.T) { t.Parallel() ttl := 250 * time.Millisecond - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` session_ttl_min = "250ms" `) defer a.Shutdown() @@ -486,16 +484,15 @@ r.Fatalf("err: %v", err) } respObj, ok = obj.(structs.Sessions) - if len(respObj) != 0 { - r.Fatalf("session '%s' should have been destroyed", id) - } + require.True(r, ok, "unexpected type: %T", obj) + require.Len(r, respObj, 0) }) } func TestSessionTTLRenew(t *testing.T) { // t.Parallel() // timing test. no parallel ttl := 250 * time.Millisecond - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` session_ttl_min = "250ms" `) defer a.Shutdown() @@ -582,13 +579,13 @@ func TestSessionGet(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") - req, _ := http.NewRequest("GET", "/v1/session/info/adf4238a-882b-9ddc-4a9d-5b6758e4159e", nil) - resp := httptest.NewRecorder() retry.Run(t, func(r *retry.R) { + req, _ := http.NewRequest("GET", "/v1/session/info/adf4238a-882b-9ddc-4a9d-5b6758e4159e", nil) + resp := httptest.NewRecorder() obj, err := a.srv.SessionGet(resp, req) if err != nil { r.Fatalf("err: %v", err) @@ -604,7 +601,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -628,7 +625,7 @@ func TestSessionList(t *testing.T) { t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -648,7 +645,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -667,16 +664,18 @@ if !ok { t.Fatalf("should work") } - if len(respObj) != 10 { - t.Fatalf("bad: %v", respObj) + respIDs := make([]string, 0, len(respObj)) + for _, obj := range respObj { + respIDs = append(respIDs, obj.ID) } + require.ElementsMatch(t, respIDs, ids) }) } func TestSessionsForNode(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -696,7 +695,7 @@ }) t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -715,15 +714,17 @@ if !ok { t.Fatalf("should work") } - if len(respObj) != 10 { - t.Fatalf("bad: %v", respObj) + respIDs := make([]string, 0, len(ids)) + for _, session := range respObj { + respIDs = append(respIDs, session.ID) } + require.ElementsMatch(t, ids, respIDs) }) } func TestSessionDeleteDestroy(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/setup.go consul-1.8.7+dfsg1/agent/setup.go --- consul-1.7.4+dfsg1/agent/setup.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/setup.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,126 @@ +package agent + +import ( + "fmt" + "io" + "net" + "net/http" + "time" + + autoconf "github.com/hashicorp/consul/agent/auto-config" + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/config" + "github.com/hashicorp/consul/agent/pool" + "github.com/hashicorp/consul/agent/router" + "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/ipaddr" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/logging" + "github.com/hashicorp/consul/tlsutil" + "github.com/hashicorp/go-hclog" + "google.golang.org/grpc/grpclog" +) + +// TODO: BaseDeps should be renamed in the future once more of Agent.Start +// has been moved out in front of Agent.New, and we can better see the setup +// dependencies. +type BaseDeps struct { + Logger hclog.InterceptLogger + TLSConfigurator *tlsutil.Configurator // TODO: use an interface + MetricsHandler MetricsHandler + RuntimeConfig *config.RuntimeConfig + Tokens *token.Store + Cache *cache.Cache + AutoConfig *autoconf.AutoConfig // TODO: use an interface + ConnPool *pool.ConnPool // TODO: use an interface + Router *router.Router +} + +// MetricsHandler provides an http.Handler for displaying metrics. +type MetricsHandler interface { + DisplayMetrics(resp http.ResponseWriter, req *http.Request) (interface{}, error) +} + +type ConfigLoader func(source config.Source) (cfg *config.RuntimeConfig, warnings []string, err error) + +func NewBaseDeps(configLoader ConfigLoader, logOut io.Writer) (BaseDeps, error) { + d := BaseDeps{} + cfg, warnings, err := configLoader(nil) + if err != nil { + return d, err + } + + logConf := cfg.Logging + logConf.Name = logging.Agent + d.Logger, err = logging.Setup(logConf, logOut) + if err != nil { + return d, err + } + grpclog.SetLoggerV2(logging.NewGRPCLogger(cfg.Logging.LogLevel, d.Logger)) + + for _, w := range warnings { + d.Logger.Warn(w) + } + + cfg.NodeID, err = newNodeIDFromConfig(cfg, d.Logger) + if err != nil { + return d, fmt.Errorf("failed to setup node ID: %w", err) + } + + d.MetricsHandler, err = lib.InitTelemetry(cfg.Telemetry) + if err != nil { + return d, fmt.Errorf("failed to initialize telemetry: %w", err) + } + + d.TLSConfigurator, err = tlsutil.NewConfigurator(cfg.ToTLSUtilConfig(), d.Logger) + if err != nil { + return d, err + } + + d.RuntimeConfig = cfg + d.Tokens = new(token.Store) + // cache-types are not registered yet, but they won't be used until the components are started. + d.Cache = cache.New(cfg.Cache) + d.ConnPool = newConnPool(cfg, d.Logger, d.TLSConfigurator) + + d.Router = router.NewRouter(d.Logger, cfg.Datacenter, fmt.Sprintf("%s.%s", cfg.NodeName, cfg.Datacenter)) + + acConf := autoconf.Config{ + DirectRPC: d.ConnPool, + Logger: d.Logger, + Loader: configLoader, + ServerProvider: d.Router, + TLSConfigurator: d.TLSConfigurator, + Cache: d.Cache, + Tokens: d.Tokens, + } + d.AutoConfig, err = autoconf.New(acConf) + if err != nil { + return d, err + } + + return d, nil +} + +func newConnPool(config *config.RuntimeConfig, logger hclog.Logger, tls *tlsutil.Configurator) *pool.ConnPool { + var rpcSrcAddr *net.TCPAddr + if !ipaddr.IsAny(config.RPCBindAddr) { + rpcSrcAddr = &net.TCPAddr{IP: config.RPCBindAddr.IP} + } + + pool := &pool.ConnPool{ + Server: config.ServerMode, + SrcAddr: rpcSrcAddr, + Logger: logger.StandardLogger(&hclog.StandardLoggerOptions{InferLevels: true}), + TLSConfigurator: tls, + Datacenter: config.Datacenter, + } + if config.ServerMode { + pool.MaxTime = 2 * time.Minute + pool.MaxStreams = 64 + } else { + pool.MaxTime = 127 * time.Second + pool.MaxStreams = 32 + } + return pool +} diff -Nru consul-1.7.4+dfsg1/agent/sidecar_service.go consul-1.8.7+dfsg1/agent/sidecar_service.go --- consul-1.7.4+dfsg1/agent/sidecar_service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/sidecar_service.go 2020-12-10 21:46:52.000000000 +0000 @@ -49,7 +49,7 @@ if sidecar.Meta != nil { // Meta is non-nil validate it before we add the special key so we can // enforce that user cannot add a consul- prefix one. - if err := structs.ValidateMetadata(sidecar.Meta, false); err != nil { + if err := structs.ValidateServiceMetadata(sidecar.Kind, sidecar.Meta, false); err != nil { return nil, nil, "", err } } diff -Nru consul-1.7.4+dfsg1/agent/sidecar_service_test.go consul-1.8.7+dfsg1/agent/sidecar_service_test.go --- consul-1.7.4+dfsg1/agent/sidecar_service_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/sidecar_service_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -325,7 +325,7 @@ } require := require.New(t) - a := NewTestAgent(t, "jones", hcl) + a := StartTestAgent(t, TestAgent{Name: "jones", HCL: hcl}) defer a.Shutdown() if tt.preRegister != nil { diff -Nru consul-1.7.4+dfsg1/agent/snapshot_endpoint.go consul-1.8.7+dfsg1/agent/snapshot_endpoint.go --- consul-1.7.4+dfsg1/agent/snapshot_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/snapshot_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,14 +31,14 @@ // Don't bother sending any request body through since it will // be ignored. var null bytes.Buffer - if err := s.agent.SnapshotRPC(&args, &null, resp, replyFn); err != nil { + if err := s.agent.delegate.SnapshotRPC(&args, &null, resp, replyFn); err != nil { return nil, err } return nil, nil case "PUT": args.Op = structs.SnapshotRestore - if err := s.agent.SnapshotRPC(&args, req.Body, resp, nil); err != nil { + if err := s.agent.delegate.SnapshotRPC(&args, req.Body, resp, nil); err != nil { return nil, err } return nil, nil diff -Nru consul-1.7.4+dfsg1/agent/snapshot_endpoint_test.go consul-1.8.7+dfsg1/agent/snapshot_endpoint_test.go --- consul-1.7.4+dfsg1/agent/snapshot_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/snapshot_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,7 @@ t.Parallel() var snap io.Reader t.Run("create snapshot", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -43,7 +43,7 @@ }) t.Run("restore snapshot", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -59,7 +59,7 @@ t.Parallel() for _, method := range []string{"GET", "PUT"} { t.Run(method, func(t *testing.T) { - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -72,7 +72,7 @@ }) t.Run(method, func(t *testing.T) { - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() body := bytes.NewBuffer(nil) @@ -85,7 +85,7 @@ }) t.Run(method, func(t *testing.T) { - a := NewTestAgent(t, t.Name(), TestACLConfig()) + a := NewTestAgent(t, TestACLConfig()) defer a.Shutdown() body := bytes.NewBuffer(nil) diff -Nru consul-1.7.4+dfsg1/agent/status_endpoint_test.go consul-1.8.7+dfsg1/agent/status_endpoint_test.go --- consul-1.7.4+dfsg1/agent/status_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/status_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,7 +12,7 @@ func TestStatusLeader(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -29,9 +29,9 @@ func TestStatusLeaderSecondary(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "datacenter = \"primary\"") + a1 := NewTestAgent(t, "datacenter = \"primary\"") defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "datacenter = \"secondary\"") + a2 := NewTestAgent(t, "datacenter = \"secondary\"") defer a2.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "primary") @@ -68,7 +68,7 @@ func TestStatusPeers(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() req, _ := http.NewRequest("GET", "/v1/status/peers", nil) @@ -85,9 +85,9 @@ func TestStatusPeersSecondary(t *testing.T) { t.Parallel() - a1 := NewTestAgent(t, t.Name(), "datacenter = \"primary\"") + a1 := NewTestAgent(t, "datacenter = \"primary\"") defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "datacenter = \"secondary\"") + a2 := NewTestAgent(t, "datacenter = \"secondary\"") defer a2.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "primary") diff -Nru consul-1.7.4+dfsg1/agent/structs/acl_cache_test.go consul-1.8.7+dfsg1/agent/structs/acl_cache_test.go --- consul-1.7.4+dfsg1/agent/structs/acl_cache_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/acl_cache_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,13 +8,10 @@ ) func TestStructs_ACLCaches(t *testing.T) { - t.Parallel() t.Run("New", func(t *testing.T) { - t.Parallel() t.Run("Valid Sizes", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{2, 2, 2, 2, 2} @@ -28,7 +25,6 @@ }) t.Run("Zero Sizes", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{0, 0, 0, 0, 0} @@ -43,7 +39,6 @@ }) t.Run("Identities", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{Identities: 4} @@ -58,7 +53,6 @@ }) t.Run("Policies", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{Policies: 4} @@ -73,7 +67,6 @@ }) t.Run("ParsedPolicies", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{ParsedPolicies: 4} @@ -88,7 +81,6 @@ }) t.Run("Authorizers", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{Authorizers: 4} @@ -104,7 +96,6 @@ }) t.Run("Roles", func(t *testing.T) { - t.Parallel() // 1 isn't valid due to a bug in golang-lru library config := ACLCachesConfig{Roles: 4} diff -Nru consul-1.7.4+dfsg1/agent/structs/acl.go consul-1.8.7+dfsg1/agent/structs/acl.go --- consul-1.7.4+dfsg1/agent/structs/acl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/acl.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ import ( "encoding/binary" + "encoding/json" "errors" "fmt" "hash" @@ -118,7 +119,9 @@ RoleIDs() []string EmbeddedPolicy() *ACLPolicy ServiceIdentityList() []*ACLServiceIdentity + NodeIdentityList() []*ACLNodeIdentity IsExpired(asOf time.Time) bool + IsLocal() bool EnterpriseMetadata() *EnterpriseMeta } @@ -148,7 +151,7 @@ func (s *ACLServiceIdentity) Clone() *ACLServiceIdentity { s2 := *s - s2.Datacenters = cloneStringSlice(s.Datacenters) + s2.Datacenters = CloneStringSlice(s.Datacenters) return &s2 } @@ -187,6 +190,50 @@ return policy } +// ACLNodeIdentity represents a high-level grant of all privileges +// necessary to assume the identity of that node and manage it. +type ACLNodeIdentity struct { + // NodeName identities the Node that this identity authorizes access to + NodeName string + + // Datacenter is required and specifies the datacenter of the node. + Datacenter string +} + +func (s *ACLNodeIdentity) Clone() *ACLNodeIdentity { + s2 := *s + return &s2 +} + +func (s *ACLNodeIdentity) AddToHash(h hash.Hash) { + h.Write([]byte(s.NodeName)) + h.Write([]byte(s.Datacenter)) +} + +func (s *ACLNodeIdentity) EstimateSize() int { + return len(s.NodeName) + len(s.Datacenter) +} + +func (s *ACLNodeIdentity) SyntheticPolicy() *ACLPolicy { + // Given that we validate this string name before persisting, we do not + // have to escape it before doing the following interpolation. + rules := fmt.Sprintf(aclPolicyTemplateNodeIdentity, s.NodeName) + + hasher := fnv.New128a() + hashID := fmt.Sprintf("%x", hasher.Sum([]byte(rules))) + + policy := &ACLPolicy{} + policy.ID = hashID + policy.Name = fmt.Sprintf("synthetic-policy-%s", hashID) + policy.Description = "synthetic policy" + policy.Rules = rules + policy.Syntax = acl.SyntaxCurrent + policy.Datacenters = []string{s.Datacenter} + policy.EnterpriseMeta = *DefaultEnterpriseMeta() + policy.SetHash(true) + return policy +} + type ACLToken struct { // This is the UUID used for tracking and management purposes AccessorID string @@ -210,6 +257,9 @@ // List of services to generate synthetic policies for. ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + // The node identities that this token should be allowed to manage. + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` + // Type is the V1 Token Type // DEPRECATED (ACL-Legacy-Compat) - remove once we no longer support v1 ACL compat // Even though we are going to auto upgrade management tokens we still @@ -300,6 +350,7 @@ t2.Policies = nil t2.Roles = nil t2.ServiceIdentities = nil + t2.NodeIdentities = nil if len(t.Policies) > 0 { t2.Policies = make([]ACLTokenPolicyLink, len(t.Policies)) @@ -315,6 +366,13 @@ t2.ServiceIdentities[i] = s.Clone() } } + if len(t.NodeIdentities) > 0 { + t2.NodeIdentities = make([]*ACLNodeIdentity, len(t.NodeIdentities)) + for i, n := range t.NodeIdentities { + t2.NodeIdentities[i] = n.Clone() + } + } + return &t2 } @@ -369,6 +427,10 @@ return t.ExpirationTime.Before(asOf) } +func (t *ACLToken) IsLocal() bool { + return t.Local +} + func (t *ACLToken) HasExpirationTime() bool { return t.ExpirationTime != nil && !t.ExpirationTime.IsZero() } @@ -376,6 +438,7 @@ func (t *ACLToken) UsesNonLegacyFields() bool { return len(t.Policies) > 0 || len(t.ServiceIdentities) > 0 || + len(t.NodeIdentities) > 0 || len(t.Roles) > 0 || t.Type == "" || t.HasExpirationTime() || @@ -456,6 +519,10 @@ srvid.AddToHash(hash) } + for _, nodeID := range t.NodeIdentities { + nodeID.AddToHash(hash) + } + t.EnterpriseMeta.addToHash(hash, false) // Finalize the hash @@ -479,6 +546,9 @@ for _, srvid := range t.ServiceIdentities { size += srvid.EstimateSize() } + for _, nodeID := range t.NodeIdentities { + size += nodeID.EstimateSize() + } return size + t.EnterpriseMeta.estimateSize() } @@ -491,6 +561,7 @@ Policies []ACLTokenPolicyLink `json:",omitempty"` Roles []ACLTokenRoleLink `json:",omitempty"` ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` Local bool AuthMethod string `json:",omitempty"` ExpirationTime *time.Time `json:",omitempty"` @@ -511,6 +582,7 @@ Policies: token.Policies, Roles: token.Roles, ServiceIdentities: token.ServiceIdentities, + NodeIdentities: token.NodeIdentities, Local: token.Local, AuthMethod: token.AuthMethod, ExpirationTime: token.ExpirationTime, @@ -594,7 +666,7 @@ func (p *ACLPolicy) Clone() *ACLPolicy { p2 := *p - p2.Datacenters = cloneStringSlice(p.Datacenters) + p2.Datacenters = CloneStringSlice(p.Datacenters) return &p2 } @@ -805,6 +877,9 @@ // List of services to generate synthetic policies for. ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + // List of nodes to generate synthetic policies for. + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` + // Hash of the contents of the role // This does not take into account the ID (which is immutable) // nor the raft metadata. @@ -843,6 +918,7 @@ r2 := *r r2.Policies = nil r2.ServiceIdentities = nil + r2.NodeIdentities = nil if len(r.Policies) > 0 { r2.Policies = make([]ACLRolePolicyLink, len(r.Policies)) @@ -854,6 +930,12 @@ r2.ServiceIdentities[i] = s.Clone() } } + if len(r.NodeIdentities) > 0 { + r2.NodeIdentities = make([]*ACLNodeIdentity, len(r.NodeIdentities)) + for i, n := range r.NodeIdentities { + r2.NodeIdentities[i] = n.Clone() + } + } return &r2 } @@ -882,6 +964,9 @@ for _, srvid := range r.ServiceIdentities { srvid.AddToHash(hash) } + for _, nodeID := range r.NodeIdentities { + nodeID.AddToHash(hash) + } r.EnterpriseMeta.addToHash(hash, false) @@ -906,6 +991,9 @@ for _, srvid := range r.ServiceIdentities { size += srvid.EstimateSize() } + for _, nodeID := range r.NodeIdentities { + size += nodeID.EstimateSize() + } return size + r.EnterpriseMeta.estimateSize() } @@ -939,6 +1027,21 @@ // // If it does not exist at login-time the rule is ignored. BindingRuleBindTypeRole = "role" + + // BindingRuleBindTypeNode is the binding rule bind type that assigns + // a Node Identity to the token that is created using the value of + // the computed BindName as the NodeName like: + // + // &ACLToken{ + // ...other fields... + // NodeIdentities: []*ACLNodeIdentity{ + // &ACLNodeIdentity{ + // NodeName: "", + // Datacenter: "" + // } + // } + // } + BindingRuleBindTypeNode = "node" ) type ACLBindingRule struct { @@ -989,8 +1092,9 @@ type ACLAuthMethodListStub struct { Name string - Description string Type string + DisplayName string `json:",omitempty"` + Description string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 EnterpriseMeta @@ -999,8 +1103,9 @@ func (p *ACLAuthMethod) Stub() *ACLAuthMethodListStub { return &ACLAuthMethodListStub{ Name: p.Name, - Description: p.Description, Type: p.Type, + DisplayName: p.DisplayName, + Description: p.Description, CreateIndex: p.CreateIndex, ModifyIndex: p.ModifyIndex, EnterpriseMeta: p.EnterpriseMeta, @@ -1033,8 +1138,20 @@ // Immutable once set and only settable during create. Type string + // DisplayName is an optional name to use instead of the Name field when + // displaying information about this auth method in any kind of user + // interface. + DisplayName string `json:",omitempty"` + // Description is just an optional bunch of explanatory text. - Description string + Description string `json:",omitempty"` + + // MaxTokenTTL this is the maximum life of a token created by this method. + MaxTokenTTL time.Duration `json:",omitempty"` + + // TokenLocality defines the kind of token that this auth method produces. + // This can be either 'local' or 'global'. If empty 'local' is assumed. + TokenLocality string `json:",omitempty"` // Configuration is arbitrary configuration for the auth method. This // should only contain primitive values and containers (such as lists and @@ -1044,10 +1161,53 @@ // Embedded Enterprise ACL Meta EnterpriseMeta `mapstructure:",squash"` + ACLAuthMethodEnterpriseFields `mapstructure:",squash"` + // Embedded Raft Metadata RaftIndex `hash:"ignore"` } +func (m *ACLAuthMethod) MarshalJSON() ([]byte, error) { + type Alias ACLAuthMethod + exported := &struct { + MaxTokenTTL string `json:",omitempty"` + *Alias + }{ + MaxTokenTTL: m.MaxTokenTTL.String(), + Alias: (*Alias)(m), + } + if m.MaxTokenTTL == 0 { + exported.MaxTokenTTL = "" + } + + return json.Marshal(exported) +} + +func (m *ACLAuthMethod) UnmarshalJSON(data []byte) (err error) { + type Alias ACLAuthMethod + aux := &struct { + MaxTokenTTL interface{} + *Alias + }{ + Alias: (*Alias)(m), + } + if err = lib.UnmarshalJSON(data, &aux); err != nil { + return err + } + if aux.MaxTokenTTL != nil { + switch v := aux.MaxTokenTTL.(type) { + case string: + if m.MaxTokenTTL, err = time.ParseDuration(v); err != nil { + return err + } + case float64: + m.MaxTokenTTL = time.Duration(v) + } + } + + return nil +} + type ACLReplicationType string const ( @@ -1171,6 +1331,7 @@ CAS bool AllowMissingLinks bool ProhibitUnprivileged bool + FromReplication bool } // ACLTokenBatchDeleteRequest is used only at the Raft layer @@ -1300,7 +1461,7 @@ PolicyIDs []string } -func cloneStringSlice(s []string) []string { +func CloneStringSlice(s []string) []string { if len(s) == 0 { return nil } diff -Nru consul-1.7.4+dfsg1/agent/structs/acl_legacy.go consul-1.8.7+dfsg1/agent/structs/acl_legacy.go --- consul-1.7.4+dfsg1/agent/structs/acl_legacy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/acl_legacy.go 2020-12-10 21:46:52.000000000 +0000 @@ -78,6 +78,7 @@ Description: a.Name, Policies: nil, ServiceIdentities: nil, + NodeIdentities: nil, Type: a.Type, Rules: a.Rules, Local: false, diff -Nru consul-1.7.4+dfsg1/agent/structs/acl_legacy_test.go consul-1.8.7+dfsg1/agent/structs/acl_legacy_test.go --- consul-1.7.4+dfsg1/agent/structs/acl_legacy_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/acl_legacy_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -54,7 +54,6 @@ } func TestStructs_ACL_Convert(t *testing.T) { - t.Parallel() acl := &ACL{ ID: "guid", @@ -77,10 +76,8 @@ } func TestStructs_ACLToken_Convert(t *testing.T) { - t.Parallel() t.Run("Management", func(t *testing.T) { - t.Parallel() token := &ACLToken{ AccessorID: "6c4eb178-c7f3-4620-b899-91eb8696c265", SecretID: "67c29ecd-cabc-42e0-a20e-771e9a1ab70c", @@ -102,7 +99,6 @@ }) t.Run("Client", func(t *testing.T) { - t.Parallel() token := &ACLToken{ AccessorID: "6c4eb178-c7f3-4620-b899-91eb8696c265", SecretID: "67c29ecd-cabc-42e0-a20e-771e9a1ab70c", @@ -121,7 +117,6 @@ }) t.Run("Unconvertible", func(t *testing.T) { - t.Parallel() token := &ACLToken{ AccessorID: "6c4eb178-c7f3-4620-b899-91eb8696c265", SecretID: "67c29ecd-cabc-42e0-a20e-771e9a1ab70c", diff -Nru consul-1.7.4+dfsg1/agent/structs/acl_oss.go consul-1.8.7+dfsg1/agent/structs/acl_oss.go --- consul-1.7.4+dfsg1/agent/structs/acl_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/acl_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,8 +26,28 @@ node_prefix "" { policy = "read" }` + + // A typical Consul node requires two permissions for itself. + // node:write + // - register itself in the catalog + // - update its network coordinates + // - potentially used to delete services during anti-entropy + // service:read + // - used during anti-entropy to discover all services that + // are registered to the node. That way the node can diff + // its local state against an accurate depiction of the + // remote state. + aclPolicyTemplateNodeIdentity = ` +node "%[1]s" { + policy = "write" +} +service_prefix "" { + policy = "read" +}` ) +type ACLAuthMethodEnterpriseFields struct{} + type ACLAuthMethodEnterpriseMeta struct{} func (_ *ACLAuthMethodEnterpriseMeta) FillWithEnterpriseMeta(_ *EnterpriseMeta) { @@ -49,3 +69,27 @@ func (m *ACLAuthMethod) TargetEnterpriseMeta(_ *EnterpriseMeta) *EnterpriseMeta { return &m.EnterpriseMeta } + +func (t *ACLToken) NodeIdentityList() []*ACLNodeIdentity { + if len(t.NodeIdentities) == 0 { + return nil + } + + out := make([]*ACLNodeIdentity, 0, len(t.NodeIdentities)) + for _, n := range t.NodeIdentities { + out = append(out, n.Clone()) + } + return out +} + +func (r *ACLRole) NodeIdentityList() []*ACLNodeIdentity { + if len(r.NodeIdentities) == 0 { + return nil + } + + out := make([]*ACLNodeIdentity, 0, len(r.NodeIdentities)) + for _, n := range r.NodeIdentities { + out = append(out, n.Clone()) + } + return out +} diff -Nru consul-1.7.4+dfsg1/agent/structs/acl_test.go consul-1.8.7+dfsg1/agent/structs/acl_test.go --- consul-1.7.4+dfsg1/agent/structs/acl_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/acl_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,10 +11,8 @@ ) func TestStructs_ACLToken_PolicyIDs(t *testing.T) { - t.Parallel() t.Run("Basic", func(t *testing.T) { - t.Parallel() token := &ACLToken{ Policies: []ACLTokenPolicyLink{ @@ -38,7 +36,6 @@ }) t.Run("Legacy Management", func(t *testing.T) { - t.Parallel() a := &ACL{ ID: "root", @@ -57,7 +54,6 @@ }) t.Run("Legacy Management With Rules", func(t *testing.T) { - t.Parallel() a := &ACL{ ID: "root", @@ -77,7 +73,6 @@ }) t.Run("No Policies", func(t *testing.T) { - t.Parallel() token := &ACLToken{} @@ -87,17 +82,14 @@ } func TestStructs_ACLToken_EmbeddedPolicy(t *testing.T) { - t.Parallel() t.Run("No Rules", func(t *testing.T) { - t.Parallel() token := &ACLToken{} require.Nil(t, token.EmbeddedPolicy()) }) t.Run("Legacy Client", func(t *testing.T) { - t.Parallel() // None of the other fields should be considered token := &ACLToken{ @@ -116,7 +108,6 @@ }) t.Run("Same Policy for Tokens with same Rules", func(t *testing.T) { - t.Parallel() token1 := &ACLToken{ AccessorID: "f55b260c-5e05-418e-ab19-d421d1ab4b52", @@ -141,7 +132,6 @@ } func TestStructs_ACLServiceIdentity_SyntheticPolicy(t *testing.T) { - t.Parallel() cases := []struct { serviceName string @@ -183,7 +173,6 @@ } func TestStructs_ACLToken_SetHash(t *testing.T) { - t.Parallel() token := ACLToken{ AccessorID: "09d1c059-961a-46bd-a2e4-76adebe35fa5", @@ -228,7 +217,6 @@ } func TestStructs_ACLToken_EstimateSize(t *testing.T) { - t.Parallel() // estimated size here should token := ACLToken{ @@ -254,10 +242,8 @@ } func TestStructs_ACLToken_Stub(t *testing.T) { - t.Parallel() t.Run("Basic", func(t *testing.T) { - t.Parallel() token := ACLToken{ AccessorID: "09d1c059-961a-46bd-a2e4-76adebe35fa5", @@ -290,7 +276,6 @@ }) t.Run("Legacy", func(t *testing.T) { - t.Parallel() token := ACLToken{ AccessorID: "09d1c059-961a-46bd-a2e4-76adebe35fa5", SecretID: "65e98e67-9b29-470c-8ffa-7c5a23cc67c8", @@ -313,7 +298,6 @@ } func TestStructs_ACLTokens_Sort(t *testing.T) { - t.Parallel() tokens := ACLTokens{ &ACLToken{ @@ -338,7 +322,6 @@ } func TestStructs_ACLTokenListStubs_Sort(t *testing.T) { - t.Parallel() tokens := ACLTokenListStubs{ &ACLTokenListStub{ @@ -363,7 +346,6 @@ } func TestStructs_ACLPolicy_Stub(t *testing.T) { - t.Parallel() policy := &ACLPolicy{ ID: "09d1c059-961a-46bd-a2e4-76adebe35fa5", @@ -384,7 +366,6 @@ } func TestStructs_ACLPolicy_SetHash(t *testing.T) { - t.Parallel() policy := &ACLPolicy{ ID: "09d1c059-961a-46bd-a2e4-76adebe35fa5", @@ -419,7 +400,6 @@ } func TestStructs_ACLPolicy_EstimateSize(t *testing.T) { - t.Parallel() policy := ACLPolicy{ ID: "09d1c059-961a-46bd-a2e4-76adebe35fa5", @@ -436,7 +416,6 @@ } func TestStructs_ACLPolicies_Sort(t *testing.T) { - t.Parallel() policies := ACLPolicies{ &ACLPolicy{ @@ -461,7 +440,6 @@ } func TestStructs_ACLPolicyListStubs_Sort(t *testing.T) { - t.Parallel() policies := ACLPolicyListStubs{ &ACLPolicyListStub{ @@ -486,7 +464,6 @@ } func TestStructs_ACLPolicies_resolveWithCache(t *testing.T) { - t.Parallel() config := ACLCachesConfig{ Identities: 0, @@ -579,7 +556,6 @@ } func TestStructs_ACLPolicies_Compile(t *testing.T) { - t.Parallel() config := ACLCachesConfig{ Identities: 0, diff -Nru consul-1.7.4+dfsg1/agent/structs/check_definition_test.go consul-1.8.7+dfsg1/agent/structs/check_definition_test.go --- consul-1.7.4+dfsg1/agent/structs/check_definition_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/check_definition_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,7 +12,6 @@ ) func TestCheckDefinition_Defaults(t *testing.T) { - t.Parallel() def := CheckDefinition{} check := def.HealthCheck("node1") @@ -47,7 +46,6 @@ } func TestCheckDefinition_CheckType(t *testing.T) { - t.Parallel() // Fuzz a definition to fill all its fields with data. var def CheckDefinition @@ -77,7 +75,6 @@ } func TestCheckDefinitionToCheckType(t *testing.T) { - t.Parallel() got := &CheckDefinition{ ID: "id", Name: "name", diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_discoverychain.go consul-1.8.7+dfsg1/agent/structs/config_entry_discoverychain.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_discoverychain.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_discoverychain.go 2020-12-10 21:46:52.000000000 +0000 @@ -38,6 +38,7 @@ // the default service. Routes []ServiceRoute + Meta map[string]string `json:",omitempty"` EnterpriseMeta `hcl:",squash" mapstructure:",squash"` RaftIndex } @@ -54,6 +55,13 @@ return e.Name } +func (e *ServiceRouterConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + func (e *ServiceRouterConfigEntry) Normalize() error { if e == nil { return fmt.Errorf("config entry is nil") @@ -89,6 +97,10 @@ return fmt.Errorf("Name is required") } + if err := validateConfigEntryMeta(e.Meta); err != nil { + return err + } + // Technically you can have no explicit routes at all where just the // catch-all is configured for you, but at that point maybe you should just // delete it so it will default? @@ -260,12 +272,12 @@ // ServiceRouteHTTPMatch is a set of http-specific match criteria. type ServiceRouteHTTPMatch struct { - PathExact string `json:",omitempty"` - PathPrefix string `json:",omitempty"` - PathRegex string `json:",omitempty"` + PathExact string `json:",omitempty" alias:"path_exact"` + PathPrefix string `json:",omitempty" alias:"path_prefix"` + PathRegex string `json:",omitempty" alias:"path_regex"` Header []ServiceRouteHTTPMatchHeader `json:",omitempty"` - QueryParam []ServiceRouteHTTPMatchQueryParam `json:",omitempty"` + QueryParam []ServiceRouteHTTPMatchQueryParam `json:",omitempty" alias:"query_param"` Methods []string `json:",omitempty"` } @@ -308,7 +320,7 @@ // // If this field is specified then this route is ineligible for further // splitting. - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` // Namespace is the namespace to resolve the service from instead of the // current namespace. If empty the current namespace is assumed. @@ -320,24 +332,24 @@ // PrefixRewrite allows for the proxied request to have its matching path // prefix modified before being sent to the destination. Described more // below in the envoy implementation section. - PrefixRewrite string `json:",omitempty"` + PrefixRewrite string `json:",omitempty" alias:"prefix_rewrite"` // RequestTimeout is the total amount of time permitted for the entire // downstream request (and retries) to be processed. - RequestTimeout time.Duration `json:",omitempty"` + RequestTimeout time.Duration `json:",omitempty" alias:"request_timeout"` // NumRetries is the number of times to retry the request when a retryable // result occurs. This seems fairly proxy agnostic. - NumRetries uint32 `json:",omitempty"` + NumRetries uint32 `json:",omitempty" alias:"num_retries"` // RetryOnConnectFailure allows for connection failure errors to trigger a // retry. This should be expressible in other proxies as it's just a layer // 4 failure bubbling up to layer 7. - RetryOnConnectFailure bool `json:",omitempty"` + RetryOnConnectFailure bool `json:",omitempty" alias:"retry_on_connect_failure"` // RetryOnStatusCodes is a flat list of http response status codes that are // eligible for retry. This again should be feasible in any sane proxy. - RetryOnStatusCodes []uint32 `json:",omitempty"` + RetryOnStatusCodes []uint32 `json:",omitempty" alias:"retry_on_status_codes"` } func (e *ServiceRouteDestination) MarshalJSON() ([]byte, error) { @@ -407,6 +419,7 @@ // to the FIRST split. Splits []ServiceSplit + Meta map[string]string `json:",omitempty"` EnterpriseMeta `hcl:",squash" mapstructure:",squash"` RaftIndex } @@ -423,6 +436,13 @@ return e.Name } +func (e *ServiceSplitterConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + func (e *ServiceSplitterConfigEntry) Normalize() error { if e == nil { return fmt.Errorf("config entry is nil") @@ -449,7 +469,7 @@ func NormalizeServiceSplitWeight(weight float32) float32 { weightScaled := scaleWeight(weight) - return float32(float32(weightScaled) / 100.0) + return float32(weightScaled) / 100.0 } func (e *ServiceSplitterConfigEntry) Validate() error { @@ -461,6 +481,10 @@ return fmt.Errorf("no splits configured") } + if err := validateConfigEntryMeta(e.Meta); err != nil { + return err + } + const maxScaledWeight = 100 * 100 copyAsKey := func(s ServiceSplit) ServiceSplit { @@ -576,7 +600,7 @@ // // If this field is specified then this route is ineligible for further // splitting. - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` // Namespace is the namespace to resolve the service from instead of the // current namespace. If empty the current namespace is assumed (optional). @@ -604,7 +628,7 @@ // DefaultSubset is the subset to use when no explicit subset is // requested. If empty the unnamed subset is used. - DefaultSubset string `json:",omitempty"` + DefaultSubset string `json:",omitempty" alias:"default_subset"` // Subsets is a map of subset name to subset definition for all // usable named subsets of this service. The map key is the name @@ -637,8 +661,9 @@ // ConnectTimeout is the timeout for establishing new network connections // to this service. - ConnectTimeout time.Duration `json:",omitempty"` + ConnectTimeout time.Duration `json:",omitempty" alias:"connect_timeout"` + Meta map[string]string `json:",omitempty"` EnterpriseMeta `hcl:",squash" mapstructure:",squash"` RaftIndex } @@ -710,6 +735,13 @@ return e.Name } +func (e *ServiceResolverConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + func (e *ServiceResolverConfigEntry) Normalize() error { if e == nil { return fmt.Errorf("config entry is nil") @@ -727,6 +759,10 @@ return fmt.Errorf("Name is required") } + if err := validateConfigEntryMeta(e.Meta); err != nil { + return err + } + if len(e.Subsets) > 0 { for name, _ := range e.Subsets { if name == "" { @@ -884,7 +920,7 @@ // to true, only instances with checks in the passing state will be // returned. (behaves identically to the similarly named field on prepared // queries). - OnlyPassing bool `json:",omitempty"` + OnlyPassing bool `json:",omitempty" alias:"only_passing"` } type ServiceResolverRedirect struct { @@ -898,7 +934,7 @@ // // If this is specified at least one of Service, Datacenter, or Namespace // should be configured. - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` // Namespace is the namespace to resolve the service from instead of the // current one (optional). @@ -926,7 +962,7 @@ // requested service is used (optional). // // This is a DESTINATION during failover. - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` // Namespace is the namespace to resolve the requested service from to form // the failover group of instances. If empty the current namespace is used diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_discoverychain_test.go consul-1.8.7+dfsg1/agent/structs/config_entry_discoverychain_test.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_discoverychain_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_discoverychain_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,6 @@ func TestConfigEntries_ListRelatedServices_AndACLs(t *testing.T) { // This test tests both of these because they are related functions. - t.Parallel() newServiceACL := func(t *testing.T, canRead, canWrite []string) acl.Authorizer { var buf bytes.Buffer @@ -248,7 +247,6 @@ } func TestServiceResolverConfigEntry(t *testing.T) { - t.Parallel() type testcase struct { name string @@ -538,7 +536,6 @@ } func TestServiceSplitterConfigEntry(t *testing.T) { - t.Parallel() makesplitter := func(splits ...ServiceSplit) *ServiceSplitterConfigEntry { return &ServiceSplitterConfigEntry{ @@ -723,7 +720,6 @@ } func TestServiceRouterConfigEntry(t *testing.T) { - t.Parallel() httpMatch := func(http *ServiceRouteHTTPMatch) *ServiceRouteMatch { return &ServiceRouteMatch{HTTP: http} diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_gateways.go consul-1.8.7+dfsg1/agent/structs/config_entry_gateways.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_gateways.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_gateways.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,492 @@ +package structs + +import ( + "fmt" + "sort" + "strings" + + "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/lib/stringslice" + "github.com/miekg/dns" +) + +// IngressGatewayConfigEntry manages the configuration for an ingress service +// with the given name. +type IngressGatewayConfigEntry struct { + // Kind of the config entry. This will be set to structs.IngressGateway. + Kind string + + // Name is used to match the config entry with its associated ingress gateway + // service. This should match the name provided in the service definition. + Name string + + // TLS holds the TLS configuration for this gateway. + TLS GatewayTLSConfig + + // Listeners declares what ports the ingress gateway should listen on, and + // what services to associated to those ports. + Listeners []IngressListener + + Meta map[string]string `json:",omitempty"` + EnterpriseMeta `hcl:",squash" mapstructure:",squash"` + RaftIndex +} + +type IngressListener struct { + // Port declares the port on which the ingress gateway should listen for traffic. + Port int + + // Protocol declares what type of traffic this listener is expected to + // receive. Depending on the protocol, a listener might support multiplexing + // services over a single port, or additional discovery chain features. The + // current supported values are: (tcp | http | http2 | grpc). + Protocol string + + // Services declares the set of services to which the listener forwards + // traffic. + // + // For "tcp" protocol listeners, only a single service is allowed. + // For "http" listeners, multiple services can be declared. + Services []IngressService +} + +type IngressService struct { + // Name declares the service to which traffic should be forwarded. + // + // This can either be a specific service, or the wildcard specifier, + // "*". If the wildcard specifier is provided, the listener must be of "http" + // protocol and means that the listener will forward traffic to all services. + // + // A name can be specified on multiple listeners, and will be exposed on both + // of the listeners + Name string + + // Hosts is a list of hostnames which should be associated to this service on + // the defined listener. Only allowed on layer 7 protocols, this will be used + // to route traffic to the service by matching the Host header of the HTTP + // request. + // + // If a host is provided for a service that also has a wildcard specifier + // defined, the host will override the wildcard-specifier-provided + // ".*" domain for that listener. + // + // This cannot be specified when using the wildcard specifier, "*", or when + // using a "tcp" listener. + Hosts []string + + Meta map[string]string `json:",omitempty"` + EnterpriseMeta `hcl:",squash" mapstructure:",squash"` +} + +type GatewayTLSConfig struct { + // Indicates that TLS should be enabled for this gateway service + Enabled bool +} + +func (e *IngressGatewayConfigEntry) GetKind() string { + return IngressGateway +} + +func (e *IngressGatewayConfigEntry) GetName() string { + if e == nil { + return "" + } + + return e.Name +} + +func (e *IngressGatewayConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + +func (e *IngressGatewayConfigEntry) Normalize() error { + if e == nil { + return fmt.Errorf("config entry is nil") + } + + e.Kind = IngressGateway + e.EnterpriseMeta.Normalize() + + for i, listener := range e.Listeners { + if listener.Protocol == "" { + listener.Protocol = "tcp" + } + + listener.Protocol = strings.ToLower(listener.Protocol) + for i := range listener.Services { + listener.Services[i].EnterpriseMeta.Merge(&e.EnterpriseMeta) + listener.Services[i].EnterpriseMeta.Normalize() + } + + // Make sure to set the item back into the array, since we are not using + // pointers to structs + e.Listeners[i] = listener + } + + return nil +} + +func (e *IngressGatewayConfigEntry) Validate() error { + if err := validateConfigEntryMeta(e.Meta); err != nil { + return err + } + + validProtocols := map[string]bool{ + "tcp": true, + "http": true, + "http2": true, + "grpc": true, + } + declaredPorts := make(map[int]bool) + + for _, listener := range e.Listeners { + if _, ok := declaredPorts[listener.Port]; ok { + return fmt.Errorf("port %d declared on two listeners", listener.Port) + } + declaredPorts[listener.Port] = true + + if _, ok := validProtocols[listener.Protocol]; !ok { + return fmt.Errorf("protocol must be 'tcp', 'http', 'http2', or 'grpc'. '%s' is an unsupported protocol", listener.Protocol) + } + + if len(listener.Services) == 0 { + return fmt.Errorf("No service declared for listener with port %d", listener.Port) + } + + // Validate that http features aren't being used with tcp or another non-supported protocol. + if listener.Protocol != "http" && len(listener.Services) > 1 { + return fmt.Errorf("Multiple services per listener are only supported for protocol = 'http' (listener on port %d)", + listener.Port) + } + + declaredHosts := make(map[string]bool) + for _, s := range listener.Services { + if listener.Protocol == "tcp" { + if s.Name == WildcardSpecifier { + return fmt.Errorf("Wildcard service name is only valid for protocol = 'http' (listener on port %d)", listener.Port) + } + if len(s.Hosts) != 0 { + return fmt.Errorf("Associating hosts to a service is not supported for the %s protocol (listener on port %d)", listener.Protocol, listener.Port) + } + } + if s.Name == "" { + return fmt.Errorf("Service name cannot be blank (listener on port %d)", listener.Port) + } + if s.Name == WildcardSpecifier && len(s.Hosts) != 0 { + return fmt.Errorf("Associating hosts to a wildcard service is not supported (listener on port %d)", listener.Port) + } + if s.NamespaceOrDefault() == WildcardSpecifier { + return fmt.Errorf("Wildcard namespace is not supported for ingress services (listener on port %d)", listener.Port) + } + + for _, h := range s.Hosts { + if declaredHosts[h] { + return fmt.Errorf("Hosts must be unique within a specific listener (listener on port %d)", listener.Port) + } + declaredHosts[h] = true + if err := validateHost(e.TLS.Enabled, h); err != nil { + return err + } + } + } + } + + return nil +} + +func validateHost(tlsEnabled bool, host string) error { + // Special case '*' so that non-TLS ingress gateways can use it. This allows + // an easy demo/testing experience. + if host == "*" { + if tlsEnabled { + return fmt.Errorf("Host '*' is not allowed when TLS is enabled, all hosts must be valid DNS records to add as a DNSSAN") + } + return nil + } + + wildcardPrefix := "*." + if _, ok := dns.IsDomainName(host); !ok { + return fmt.Errorf("Host %q must be a valid DNS hostname", host) + } + + if strings.ContainsRune(strings.TrimPrefix(host, wildcardPrefix), '*') { + return fmt.Errorf("Host %q is not valid, a wildcard specifier is only allowed as the leftmost label", host) + } + + return nil +} + +// ListRelatedServices implements discoveryChainConfigEntry +// +// For ingress-gateway config entries this only finds services that are +// explicitly linked in the ingress-gateway config entry. Wildcards will not +// expand to all services. +// +// This function is used during discovery chain graph validation to prevent +// erroneous sets of config entries from being created. Wildcard ingress +// filters out sets with protocol mismatch elsewhere so it isn't an issue here +// that needs fixing. +func (e *IngressGatewayConfigEntry) ListRelatedServices() []ServiceID { + found := make(map[ServiceID]struct{}) + + for _, listener := range e.Listeners { + for _, service := range listener.Services { + if service.Name == WildcardSpecifier { + continue + } + svcID := NewServiceID(service.Name, &service.EnterpriseMeta) + found[svcID] = struct{}{} + } + } + + if len(found) == 0 { + return nil + } + + out := make([]ServiceID, 0, len(found)) + for svc := range found { + out = append(out, svc) + } + sort.Slice(out, func(i, j int) bool { + return out[i].EnterpriseMeta.LessThan(&out[j].EnterpriseMeta) || + out[i].ID < out[j].ID + }) + return out +} + +func (e *IngressGatewayConfigEntry) CanRead(authz acl.Authorizer) bool { + var authzContext acl.AuthorizerContext + e.FillAuthzContext(&authzContext) + return authz.ServiceRead(e.Name, &authzContext) == acl.Allow +} + +func (e *IngressGatewayConfigEntry) CanWrite(authz acl.Authorizer) bool { + var authzContext acl.AuthorizerContext + e.FillAuthzContext(&authzContext) + return authz.OperatorWrite(&authzContext) == acl.Allow +} + +func (e *IngressGatewayConfigEntry) GetRaftIndex() *RaftIndex { + if e == nil { + return &RaftIndex{} + } + + return &e.RaftIndex +} + +func (e *IngressGatewayConfigEntry) GetEnterpriseMeta() *EnterpriseMeta { + if e == nil { + return nil + } + + return &e.EnterpriseMeta +} + +func (s *IngressService) ToServiceName() ServiceName { + return NewServiceName(s.Name, &s.EnterpriseMeta) +} + +// TerminatingGatewayConfigEntry manages the configuration for a terminating service +// with the given name. +type TerminatingGatewayConfigEntry struct { + Kind string + Name string + Services []LinkedService + + Meta map[string]string `json:",omitempty"` + EnterpriseMeta `hcl:",squash" mapstructure:",squash"` + RaftIndex +} + +// A LinkedService is a service represented by a terminating gateway +type LinkedService struct { + // Name is the name of the service, as defined in Consul's catalog + Name string `json:",omitempty"` + + // CAFile is the optional path to a CA certificate to use for TLS connections + // from the gateway to the linked service + CAFile string `json:",omitempty" alias:"ca_file"` + + // CertFile is the optional path to a client certificate to use for TLS connections + // from the gateway to the linked service + CertFile string `json:",omitempty" alias:"cert_file"` + + // KeyFile is the optional path to a private key to use for TLS connections + // from the gateway to the linked service + KeyFile string `json:",omitempty" alias:"key_file"` + + // SNI is the optional name to specify during the TLS handshake with a linked service + SNI string `json:",omitempty"` + + EnterpriseMeta `hcl:",squash" mapstructure:",squash"` +} + +func (e *TerminatingGatewayConfigEntry) GetKind() string { + return TerminatingGateway +} + +func (e *TerminatingGatewayConfigEntry) GetName() string { + if e == nil { + return "" + } + + return e.Name +} + +func (e *TerminatingGatewayConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + +func (e *TerminatingGatewayConfigEntry) Normalize() error { + if e == nil { + return fmt.Errorf("config entry is nil") + } + + e.Kind = TerminatingGateway + e.EnterpriseMeta.Normalize() + + for i := range e.Services { + e.Services[i].EnterpriseMeta.Merge(&e.EnterpriseMeta) + e.Services[i].EnterpriseMeta.Normalize() + } + + return nil +} + +func (e *TerminatingGatewayConfigEntry) Validate() error { + if err := validateConfigEntryMeta(e.Meta); err != nil { + return err + } + + seen := make(map[ServiceID]bool) + + for _, svc := range e.Services { + if svc.Name == "" { + return fmt.Errorf("Service name cannot be blank.") + } + + ns := svc.NamespaceOrDefault() + if ns == WildcardSpecifier { + return fmt.Errorf("Wildcard namespace is not supported for terminating gateway services") + } + + // Check for duplicates within the entry + cid := NewServiceID(svc.Name, &svc.EnterpriseMeta) + if ok := seen[cid]; ok { + return fmt.Errorf("Service %q was specified more than once within a namespace", cid.String()) + } + seen[cid] = true + + // If either client cert config file was specified then the CA file, client cert, and key file must be specified + // Specifying only a CAFile is allowed for one-way TLS + if (svc.CertFile != "" || svc.KeyFile != "") && + !(svc.CAFile != "" && svc.CertFile != "" && svc.KeyFile != "") { + + return fmt.Errorf("Service %q must have a CertFile, CAFile, and KeyFile specified for TLS origination", svc.Name) + } + } + return nil +} + +func (e *TerminatingGatewayConfigEntry) CanRead(authz acl.Authorizer) bool { + var authzContext acl.AuthorizerContext + e.FillAuthzContext(&authzContext) + + return authz.ServiceRead(e.Name, &authzContext) == acl.Allow +} + +func (e *TerminatingGatewayConfigEntry) CanWrite(authz acl.Authorizer) bool { + var authzContext acl.AuthorizerContext + e.FillAuthzContext(&authzContext) + + return authz.OperatorWrite(&authzContext) == acl.Allow +} + +func (e *TerminatingGatewayConfigEntry) GetRaftIndex() *RaftIndex { + if e == nil { + return &RaftIndex{} + } + + return &e.RaftIndex +} + +func (e *TerminatingGatewayConfigEntry) GetEnterpriseMeta() *EnterpriseMeta { + if e == nil { + return nil + } + + return &e.EnterpriseMeta +} + +// GatewayService is used to associate gateways with their linked services. +type GatewayService struct { + Gateway ServiceName + Service ServiceName + GatewayKind ServiceKind + Port int `json:",omitempty"` + Protocol string `json:",omitempty"` + Hosts []string `json:",omitempty"` + CAFile string `json:",omitempty"` + CertFile string `json:",omitempty"` + KeyFile string `json:",omitempty"` + SNI string `json:",omitempty"` + FromWildcard bool `json:",omitempty"` + RaftIndex +} + +type GatewayServices []*GatewayService + +func (g *GatewayService) Addresses(defaultHosts []string) []string { + if g.Port == 0 { + return nil + } + + hosts := g.Hosts + if len(hosts) == 0 { + hosts = defaultHosts + } + + var addresses []string + for _, h := range hosts { + addresses = append(addresses, fmt.Sprintf("%s:%d", h, g.Port)) + } + return addresses +} + +func (g *GatewayService) IsSame(o *GatewayService) bool { + return g.Gateway.Matches(&o.Gateway) && + g.Service.Matches(&o.Service) && + g.GatewayKind == o.GatewayKind && + g.Port == o.Port && + g.Protocol == o.Protocol && + stringslice.Equal(g.Hosts, o.Hosts) && + g.CAFile == o.CAFile && + g.CertFile == o.CertFile && + g.KeyFile == o.KeyFile && + g.SNI == o.SNI && + g.FromWildcard == o.FromWildcard +} + +func (g *GatewayService) Clone() *GatewayService { + return &GatewayService{ + Gateway: g.Gateway, + Service: g.Service, + GatewayKind: g.GatewayKind, + Port: g.Port, + Protocol: g.Protocol, + // See https://github.com/go101/go101/wiki/How-to-efficiently-clone-a-slice%3F + Hosts: append(g.Hosts[:0:0], g.Hosts...), + CAFile: g.CAFile, + CertFile: g.CertFile, + KeyFile: g.KeyFile, + SNI: g.SNI, + FromWildcard: g.FromWildcard, + RaftIndex: g.RaftIndex, + } +} diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_gateways_test.go consul-1.8.7+dfsg1/agent/structs/config_entry_gateways_test.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_gateways_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_gateways_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,692 @@ +package structs + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestIngressConfigEntry_Normalize(t *testing.T) { + + cases := []struct { + name string + entry IngressGatewayConfigEntry + expected IngressGatewayConfigEntry + }{ + { + name: "empty protocol", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "", + Services: []IngressService{}, + }, + }, + }, + expected: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{}, + }, + }, + EnterpriseMeta: *DefaultEnterpriseMeta(), + }, + }, + { + name: "lowercase protocols", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "TCP", + Services: []IngressService{}, + }, + { + Port: 1112, + Protocol: "HtTP", + Services: []IngressService{}, + }, + }, + }, + expected: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{}, + }, + { + Port: 1112, + Protocol: "http", + Services: []IngressService{}, + }, + }, + EnterpriseMeta: *DefaultEnterpriseMeta(), + }, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + err := tc.entry.Normalize() + require.NoError(t, err) + require.Equal(t, tc.expected, tc.entry) + }) + } +} + +func TestIngressConfigEntry_ListRelatedServices(t *testing.T) { + type testcase struct { + entry IngressGatewayConfigEntry + expectServices []ServiceID + } + + cases := map[string]testcase{ + "one exact": { + entry: IngressGatewayConfigEntry{ + Kind: IngressGateway, + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + {Name: "web"}, + }, + }, + }, + }, + expectServices: []ServiceID{NewServiceID("web", nil)}, + }, + "one wild": { + entry: IngressGatewayConfigEntry{ + Kind: IngressGateway, + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + {Name: "*"}, + }, + }, + }, + }, + expectServices: nil, + }, + "kitchen sink": { + entry: IngressGatewayConfigEntry{ + Kind: IngressGateway, + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + {Name: "api"}, + {Name: "web"}, + }, + }, + { + Port: 2222, + Protocol: "tcp", + Services: []IngressService{ + {Name: "web"}, + {Name: "*"}, + {Name: "db"}, + {Name: "blah"}, + }, + }, + }, + }, + expectServices: []ServiceID{ + NewServiceID("api", nil), + NewServiceID("blah", nil), + NewServiceID("db", nil), + NewServiceID("web", nil), + }, + }, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + got := tc.entry.ListRelatedServices() + require.Equal(t, tc.expectServices, got) + }) + } +} + +func TestIngressConfigEntry_Validate(t *testing.T) { + + cases := []struct { + name string + entry IngressGatewayConfigEntry + expectErr string + }{ + { + name: "port conflict", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + { + Name: "mysql", + }, + }, + }, + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + { + Name: "postgres", + }, + }, + }, + }, + }, + expectErr: "port 1111 declared on two listeners", + }, + { + name: "http features: wildcard", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "*", + }, + }, + }, + }, + }, + }, + { + name: "http features: wildcard service on invalid protocol", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + { + Name: "*", + }, + }, + }, + }, + }, + expectErr: "Wildcard service name is only valid for protocol", + }, + { + name: "http features: multiple services", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + { + Name: "db1", + }, + { + Name: "db2", + }, + }, + }, + }, + }, + expectErr: "multiple services per listener are only supported for protocol", + }, + { + name: "tcp listener requires a defined service", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{}, + }, + }, + }, + expectErr: "no service declared for listener with port 1111", + }, + { + name: "http listener requires a defined service", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{}, + }, + }, + }, + expectErr: "no service declared for listener with port 1111", + }, + { + name: "empty service name not supported", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + {}, + }, + }, + }, + }, + expectErr: "Service name cannot be blank", + }, + { + name: "protocol validation", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "asdf", + Services: []IngressService{ + { + Name: "db", + }, + }, + }, + }, + }, + expectErr: "protocol must be 'tcp', 'http', 'http2', or 'grpc'. 'asdf' is an unsupported protocol", + }, + { + name: "hosts cannot be set on a tcp listener", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "tcp", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"db.example.com"}, + }, + }, + }, + }, + }, + expectErr: "Associating hosts to a service is not supported for the tcp protocol", + }, + { + name: "hosts cannot be set on a wildcard specifier", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "*", + Hosts: []string{"db.example.com"}, + }, + }, + }, + }, + }, + expectErr: "Associating hosts to a wildcard service is not supported", + }, + { + name: "hosts must be unique per listener", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"test.example.com"}, + }, + { + Name: "api", + Hosts: []string{"test.example.com"}, + }, + }, + }, + }, + }, + expectErr: "Hosts must be unique within a specific listener", + }, + { + name: "hosts must be a valid DNS name", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"example..com"}, + }, + }, + }, + }, + }, + expectErr: `Host "example..com" must be a valid DNS hostname`, + }, + { + name: "wildcard specifier is only allowed in the leftmost label", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"*.example.com"}, + }, + }, + }, + }, + }, + }, + { + name: "wildcard specifier is not allowed in non-leftmost labels", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"example.*.com"}, + }, + }, + }, + }, + }, + expectErr: `Host "example.*.com" is not valid, a wildcard specifier is only allowed as the leftmost label`, + }, + { + name: "wildcard specifier is not allowed in leftmost labels as a partial", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"*-test.example.com"}, + }, + }, + }, + }, + }, + expectErr: `Host "*-test.example.com" is not valid, a wildcard specifier is only allowed as the leftmost label`, + }, + { + name: "wildcard specifier is allowed for hosts when TLS is disabled", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"*"}, + }, + }, + }, + }, + }, + }, + { + name: "wildcard specifier is not allowed for hosts when TLS is enabled", + entry: IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + TLS: GatewayTLSConfig{ + Enabled: true, + }, + Listeners: []IngressListener{ + { + Port: 1111, + Protocol: "http", + Services: []IngressService{ + { + Name: "db", + Hosts: []string{"*"}, + }, + }, + }, + }, + }, + expectErr: `Host '*' is not allowed when TLS is enabled, all hosts must be valid DNS records to add as a DNSSAN`, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + err := tc.entry.Validate() + if tc.expectErr != "" { + require.Error(t, err) + requireContainsLower(t, err.Error(), tc.expectErr) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestTerminatingConfigEntry_Validate(t *testing.T) { + + cases := []struct { + name string + entry TerminatingGatewayConfigEntry + expectErr string + }{ + { + name: "service conflict", + entry: TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Services: []LinkedService{ + { + Name: "foo", + }, + { + Name: "foo", + }, + }, + }, + expectErr: "specified more than once", + }, + { + name: "blank service name", + entry: TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Services: []LinkedService{ + { + Name: "", + }, + }, + }, + expectErr: "Service name cannot be blank.", + }, + { + name: "not all TLS options provided-1", + entry: TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Services: []LinkedService{ + { + Name: "web", + CertFile: "client.crt", + }, + }, + }, + expectErr: "must have a CertFile, CAFile, and KeyFile", + }, + { + name: "not all TLS options provided-2", + entry: TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Services: []LinkedService{ + { + Name: "web", + KeyFile: "tls.key", + }, + }, + }, + expectErr: "must have a CertFile, CAFile, and KeyFile", + }, + { + name: "all TLS options provided", + entry: TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Services: []LinkedService{ + { + Name: "web", + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "tls.key", + }, + }, + }, + }, + { + name: "only providing ca file is allowed", + entry: TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Services: []LinkedService{ + { + Name: "web", + CAFile: "ca.crt", + }, + }, + }, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + + err := tc.entry.Validate() + if tc.expectErr != "" { + require.Error(t, err) + requireContainsLower(t, err.Error(), tc.expectErr) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestGatewayService_Addresses(t *testing.T) { + cases := []struct { + name string + input GatewayService + argument []string + expected []string + }{ + { + name: "port is zero", + input: GatewayService{}, + expected: nil, + }, + { + name: "no hosts with empty array", + input: GatewayService{ + Port: 8080, + }, + expected: nil, + }, + { + name: "no hosts with default", + input: GatewayService{ + Port: 8080, + }, + argument: []string{ + "service.ingress.dc.domain", + "service.ingress.dc.alt.domain", + }, + expected: []string{ + "service.ingress.dc.domain:8080", + "service.ingress.dc.alt.domain:8080", + }, + }, + { + name: "user-defined hosts", + input: GatewayService{ + Port: 8080, + Hosts: []string{"*.test.example.com", "other.example.com"}, + }, + argument: []string{ + "service.ingress.dc.domain", + "service.ingress.alt.domain", + }, + expected: []string{"*.test.example.com:8080", "other.example.com:8080"}, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + addresses := tc.input.Addresses(tc.argument) + require.ElementsMatch(t, tc.expected, addresses) + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry.go consul-1.8.7+dfsg1/agent/structs/config_entry.go --- consul-1.7.4+dfsg1/agent/structs/config_entry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,6 +8,7 @@ "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/decode" "github.com/hashicorp/go-msgpack/codec" "github.com/hashicorp/go-multierror" "github.com/mitchellh/hashstructure" @@ -15,11 +16,13 @@ ) const ( - ServiceDefaults string = "service-defaults" - ProxyDefaults string = "proxy-defaults" - ServiceRouter string = "service-router" - ServiceSplitter string = "service-splitter" - ServiceResolver string = "service-resolver" + ServiceDefaults string = "service-defaults" + ProxyDefaults string = "proxy-defaults" + ServiceRouter string = "service-router" + ServiceSplitter string = "service-splitter" + ServiceResolver string = "service-resolver" + IngressGateway string = "ingress-gateway" + TerminatingGateway string = "terminating-gateway" ProxyConfigGlobal string = "global" @@ -41,6 +44,7 @@ CanRead(acl.Authorizer) bool CanWrite(acl.Authorizer) bool + GetMeta() map[string]string GetEnterpriseMeta() *EnterpriseMeta GetRaftIndex() *RaftIndex } @@ -51,10 +55,10 @@ Kind string Name string Protocol string - MeshGateway MeshGatewayConfig `json:",omitempty"` + MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` Expose ExposeConfig `json:",omitempty"` - ExternalSNI string `json:",omitempty"` + ExternalSNI string `json:",omitempty" alias:"external_sni"` // TODO(banks): enable this once we have upstreams supported too. Enabling // sidecars actually makes no sense and adds complications when you don't @@ -62,10 +66,17 @@ // // Connect ConnectConfiguration + Meta map[string]string `json:",omitempty"` EnterpriseMeta `hcl:",squash" mapstructure:",squash"` RaftIndex } +func (e *ServiceConfigEntry) Clone() *ServiceConfigEntry { + e2 := *e + e2.Expose = e.Expose.Clone() + return &e2 +} + func (e *ServiceConfigEntry) GetKind() string { return ServiceDefaults } @@ -78,6 +89,13 @@ return e.Name } +func (e *ServiceConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + func (e *ServiceConfigEntry) Normalize() error { if e == nil { return fmt.Errorf("config entry is nil") @@ -92,7 +110,7 @@ } func (e *ServiceConfigEntry) Validate() error { - return nil + return validateConfigEntryMeta(e.Meta) } func (e *ServiceConfigEntry) CanRead(authz acl.Authorizer) bool { @@ -132,9 +150,10 @@ Kind string Name string Config map[string]interface{} - MeshGateway MeshGatewayConfig `json:",omitempty"` + MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` Expose ExposeConfig `json:",omitempty"` + Meta map[string]string `json:",omitempty"` EnterpriseMeta `hcl:",squash" mapstructure:",squash"` RaftIndex } @@ -151,6 +170,13 @@ return e.Name } +func (e *ProxyConfigEntry) GetMeta() map[string]string { + if e == nil { + return nil + } + return e.Meta +} + func (e *ProxyConfigEntry) Normalize() error { if e == nil { return fmt.Errorf("config entry is nil") @@ -173,6 +199,10 @@ return fmt.Errorf("invalid name (%q), only %q is supported", e.Name, ProxyConfigGlobal) } + if err := validateConfigEntryMeta(e.Meta); err != nil { + return err + } + return e.validateEnterpriseMeta() } @@ -281,20 +311,13 @@ return nil, fmt.Errorf("Kind value in payload is not a string") } - skipWhenPatching, translateKeysDict, err := ConfigEntryDecodeRulesForKind(entry.GetKind()) - if err != nil { - return nil, err - } - - // lib.TranslateKeys doesn't understand []map[string]interface{} so we have - // to do this part first. - raw = lib.PatchSliceOfMaps(raw, skipWhenPatching, nil) - - lib.TranslateKeys(raw, translateKeysDict) - var md mapstructure.Metadata decodeConf := &mapstructure.DecoderConfig{ - DecodeHook: mapstructure.StringToTimeDurationHookFunc(), + DecodeHook: mapstructure.ComposeDecodeHookFunc( + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + mapstructure.StringToTimeDurationHookFunc(), + ), Metadata: &md, Result: &entry, WeaklyTypedInput: true, @@ -309,78 +332,12 @@ return nil, err } - for _, k := range md.Unused { - switch k { - case "CreateIndex", "ModifyIndex": - default: - err = multierror.Append(err, fmt.Errorf("invalid config key %q", k)) - } - } - if err != nil { + if err := validateUnusedKeys(md.Unused); err != nil { return nil, err } return entry, nil } -// ConfigEntryDecodeRulesForKind returns rules for 'fixing' config entry key -// formats by kind. This is shared between the 'structs' and 'api' variations -// of config entries. -func ConfigEntryDecodeRulesForKind(kind string) (skipWhenPatching []string, translateKeysDict map[string]string, err error) { - switch kind { - case ProxyDefaults: - return []string{ - "expose.paths", - "Expose.Paths", - }, map[string]string{ - "local_path_port": "localpathport", - "listener_port": "listenerport", - "mesh_gateway": "meshgateway", - "config": "", - }, nil - case ServiceDefaults: - return nil, map[string]string{ - "mesh_gateway": "meshgateway", - "external_sni": "externalsni", - }, nil - case ServiceRouter: - return []string{ - "routes", - "Routes", - "routes.match.http.header", - "Routes.Match.HTTP.Header", - "routes.match.http.query_param", - "Routes.Match.HTTP.QueryParam", - }, map[string]string{ - "num_retries": "numretries", - "path_exact": "pathexact", - "path_prefix": "pathprefix", - "path_regex": "pathregex", - "prefix_rewrite": "prefixrewrite", - "query_param": "queryparam", - "request_timeout": "requesttimeout", - "retry_on_connect_failure": "retryonconnectfailure", - "retry_on_status_codes": "retryonstatuscodes", - "service_subset": "servicesubset", - }, nil - case ServiceSplitter: - return []string{ - "splits", - "Splits", - }, map[string]string{ - "service_subset": "servicesubset", - }, nil - case ServiceResolver: - return nil, map[string]string{ - "connect_timeout": "connecttimeout", - "default_subset": "defaultsubset", - "only_passing": "onlypassing", - "service_subset": "servicesubset", - }, nil - default: - return nil, nil, fmt.Errorf("kind %q should be explicitly handled here", kind) - } -} - type ConfigEntryOp string const ( @@ -466,6 +423,10 @@ return &ServiceSplitterConfigEntry{Name: name}, nil case ServiceResolver: return &ServiceResolverConfigEntry{Name: name}, nil + case IngressGateway: + return &IngressGatewayConfigEntry{Name: name}, nil + case TerminatingGateway: + return &TerminatingGatewayConfigEntry{Name: name}, nil default: return nil, fmt.Errorf("invalid config entry kind: %s", kind) } @@ -477,6 +438,8 @@ return true case ServiceRouter, ServiceSplitter, ServiceResolver: return true + case IngressGateway, TerminatingGateway: + return true default: return false } @@ -731,4 +694,38 @@ type ConfigEntryKindName struct { Kind string Name string + EnterpriseMeta +} + +func NewConfigEntryKindName(kind, name string, entMeta *EnterpriseMeta) ConfigEntryKindName { + ret := ConfigEntryKindName{ + Kind: kind, + Name: name, + } + if entMeta == nil { + entMeta = DefaultEnterpriseMeta() + } + + ret.EnterpriseMeta = *entMeta + ret.EnterpriseMeta.Normalize() + return ret +} + +func validateConfigEntryMeta(meta map[string]string) error { + var err error + if len(meta) > metaMaxKeyPairs { + err = multierror.Append(err, fmt.Errorf( + "Meta exceeds maximum element count %d", metaMaxKeyPairs)) + } + for k, v := range meta { + if len(k) > metaKeyMaxLength { + err = multierror.Append(err, fmt.Errorf( + "Meta key %q exceeds maximum length %d", k, metaKeyMaxLength)) + } + if len(v) > metaValueMaxLength { + err = multierror.Append(err, fmt.Errorf( + "Meta value for key %q exceeds maximum length %d", k, metaValueMaxLength)) + } + } + return err } diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_oss.go consul-1.8.7+dfsg1/agent/structs/config_entry_oss.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,28 @@ package structs +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-multierror" +) + func (e *ProxyConfigEntry) validateEnterpriseMeta() error { return nil } + +func validateUnusedKeys(unused []string) error { + var err error + + for _, k := range unused { + switch { + case k == "CreateIndex" || k == "ModifyIndex": + case strings.HasSuffix(strings.ToLower(k), "namespace"): + err = multierror.Append(err, fmt.Errorf("invalid config key %q, namespaces are a consul enterprise feature", k)) + default: + err = multierror.Append(err, fmt.Errorf("invalid config key %q", k)) + } + } + return err +} diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_oss_test.go consul-1.8.7+dfsg1/agent/structs/config_entry_oss_test.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_oss_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_oss_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,99 @@ +// +build !consulent + +package structs + +import ( + "github.com/hashicorp/hcl" + "github.com/stretchr/testify/require" + "testing" +) + +func TestDecodeConfigEntry_OSS(t *testing.T) { + + for _, tc := range []struct { + name string + camel string + snake string + expect ConfigEntry + expectErr string + }{ + { + name: "namespaces invalid top level", + snake: ` + kind = "terminating-gateway" + name = "terminating-gateway" + namespace = "foo" + `, + camel: ` + Kind = "terminating-gateway" + Name = "terminating-gateway" + Namespace = "foo" + `, + expectErr: `invalid config key "namespace", namespaces are a consul enterprise feature`, + }, + { + name: "namespaces invalid deep", + snake: ` + kind = "ingress-gateway" + name = "ingress-web" + listeners = [ + { + port = 8080 + protocol = "http" + services = [ + { + name = "web" + hosts = ["test.example.com", "test2.example.com"] + namespace = "frontend" + }, + ] + } + ] + `, + camel: ` + Kind = "ingress-gateway" + Name = "ingress-web" + Namespace = "blah" + Listeners = [ + { + Port = 8080 + Protocol = "http" + Services = [ + { + Name = "web" + Hosts = ["test.example.com", "test2.example.com"] + Namespace = "frontend" + }, + ] + }, + ] + `, + expectErr: `* invalid config key "listeners[0].services[0].namespace", namespaces are a consul enterprise feature`, + }, + } { + tc := tc + + testbody := func(t *testing.T, body string) { + var raw map[string]interface{} + err := hcl.Decode(&raw, body) + require.NoError(t, err) + + got, err := DecodeConfigEntry(raw) + if tc.expectErr != "" { + require.Nil(t, got) + require.Error(t, err) + requireContainsLower(t, err.Error(), tc.expectErr) + } else { + require.NoError(t, err) + require.Equal(t, tc.expect, got) + } + } + + t.Run(tc.name+" (snake case)", func(t *testing.T) { + testbody(t, tc.snake) + }) + t.Run(tc.name+" (camel case)", func(t *testing.T) { + testbody(t, tc.camel) + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/structs/config_entry_test.go consul-1.8.7+dfsg1/agent/structs/config_entry_test.go --- consul-1.7.4+dfsg1/agent/structs/config_entry_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/config_entry_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,7 +14,6 @@ // TestDecodeConfigEntry is the 'structs' mirror image of // command/config/write/config_write_test.go:TestParseConfigEntry func TestDecodeConfigEntry(t *testing.T) { - t.Parallel() for _, tc := range []struct { name string @@ -47,6 +46,10 @@ snake: ` kind = "proxy-defaults" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } config { "foo" = 19 "bar" = "abc" @@ -61,6 +64,10 @@ camel: ` Kind = "proxy-defaults" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Config { "foo" = 19 "bar" = "abc" @@ -75,6 +82,10 @@ expect: &ProxyConfigEntry{ Kind: "proxy-defaults", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Config: map[string]interface{}{ "foo": 19, "bar": "abc", @@ -92,6 +103,10 @@ snake: ` kind = "service-defaults" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } protocol = "http" external_sni = "abc-123" mesh_gateway { @@ -101,6 +116,10 @@ camel: ` Kind = "service-defaults" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Protocol = "http" ExternalSNI = "abc-123" MeshGateway { @@ -108,8 +127,12 @@ } `, expect: &ServiceConfigEntry{ - Kind: "service-defaults", - Name: "main", + Kind: "service-defaults", + Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Protocol: "http", ExternalSNI: "abc-123", MeshGateway: MeshGatewayConfig{ @@ -122,6 +145,10 @@ snake: ` kind = "service-router" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } routes = [ { match { @@ -201,6 +228,10 @@ camel: ` Kind = "service-router" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Routes = [ { Match { @@ -280,6 +311,10 @@ expect: &ServiceRouterConfigEntry{ Kind: "service-router", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Routes: []ServiceRoute{ { Match: &ServiceRouteMatch{ @@ -362,6 +397,10 @@ snake: ` kind = "service-splitter" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } splits = [ { weight = 99.1 @@ -377,6 +416,10 @@ camel: ` Kind = "service-splitter" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Splits = [ { Weight = 99.1 @@ -392,6 +435,10 @@ expect: &ServiceSplitterConfigEntry{ Kind: ServiceSplitter, Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Splits: []ServiceSplit{ { Weight: 99.1, @@ -410,6 +457,10 @@ snake: ` kind = "service-resolver" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } default_subset = "v1" connect_timeout = "15s" subsets = { @@ -435,6 +486,10 @@ camel: ` Kind = "service-resolver" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } DefaultSubset = "v1" ConnectTimeout = "15s" Subsets = { @@ -458,8 +513,12 @@ } }`, expect: &ServiceResolverConfigEntry{ - Kind: "service-resolver", - Name: "main", + Kind: "service-resolver", + Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, DefaultSubset: "v1", ConnectTimeout: 15 * time.Second, Subsets: map[string]ServiceResolverSubset{ @@ -532,12 +591,222 @@ Name: "main", }, }, + { + name: "ingress-gateway: kitchen sink", + snake: ` + kind = "ingress-gateway" + name = "ingress-web" + meta { + "foo" = "bar" + "gir" = "zim" + } + + tls { + enabled = true + } + + listeners = [ + { + port = 8080 + protocol = "http" + services = [ + { + name = "web" + hosts = ["test.example.com", "test2.example.com"] + }, + { + name = "db" + } + ] + }, + { + port = 9999 + protocol = "tcp" + services = [ + { + name = "mysql" + } + ] + }, + { + port = 2234 + protocol = "tcp" + services = [ + { + name = "postgres" + } + ] + } + ] + `, + camel: ` + Kind = "ingress-gateway" + Name = "ingress-web" + Meta { + "foo" = "bar" + "gir" = "zim" + } + TLS { + Enabled = true + } + Listeners = [ + { + Port = 8080 + Protocol = "http" + Services = [ + { + Name = "web" + Hosts = ["test.example.com", "test2.example.com"] + }, + { + Name = "db" + } + ] + }, + { + Port = 9999 + Protocol = "tcp" + Services = [ + { + Name = "mysql" + } + ] + }, + { + Port = 2234 + Protocol = "tcp" + Services = [ + { + Name = "postgres" + } + ] + } + ] + `, + expect: &IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + TLS: GatewayTLSConfig{ + Enabled: true, + }, + Listeners: []IngressListener{ + IngressListener{ + Port: 8080, + Protocol: "http", + Services: []IngressService{ + IngressService{ + Name: "web", + Hosts: []string{"test.example.com", "test2.example.com"}, + }, + IngressService{ + Name: "db", + }, + }, + }, + IngressListener{ + Port: 9999, + Protocol: "tcp", + Services: []IngressService{ + IngressService{ + Name: "mysql", + }, + }, + }, + IngressListener{ + Port: 2234, + Protocol: "tcp", + Services: []IngressService{ + IngressService{ + Name: "postgres", + }, + }, + }, + }, + }, + }, + { + name: "terminating-gateway: kitchen sink", + snake: ` + kind = "terminating-gateway" + name = "terminating-gw-west" + meta { + "foo" = "bar" + "gir" = "zim" + } + services = [ + { + name = "payments", + ca_file = "/etc/payments/ca.pem", + cert_file = "/etc/payments/cert.pem", + key_file = "/etc/payments/tls.key", + sni = "mydomain", + }, + { + name = "*", + ca_file = "/etc/all/ca.pem", + cert_file = "/etc/all/cert.pem", + key_file = "/etc/all/tls.key", + sni = "my-alt-domain", + }, + ] + `, + camel: ` + Kind = "terminating-gateway" + Name = "terminating-gw-west" + Meta { + "foo" = "bar" + "gir" = "zim" + } + Services = [ + { + Name = "payments", + CAFile = "/etc/payments/ca.pem", + CertFile = "/etc/payments/cert.pem", + KeyFile = "/etc/payments/tls.key", + SNI = "mydomain", + }, + { + Name = "*", + CAFile = "/etc/all/ca.pem", + CertFile = "/etc/all/cert.pem", + KeyFile = "/etc/all/tls.key", + SNI = "my-alt-domain", + }, + ] + `, + expect: &TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + Services: []LinkedService{ + { + Name: "payments", + CAFile: "/etc/payments/ca.pem", + CertFile: "/etc/payments/cert.pem", + KeyFile: "/etc/payments/tls.key", + SNI: "mydomain", + }, + { + Name: "*", + CAFile: "/etc/all/ca.pem", + CertFile: "/etc/all/cert.pem", + KeyFile: "/etc/all/tls.key", + SNI: "my-alt-domain", + }, + }, + }, + }, } { tc := tc testbody := func(t *testing.T, body string) { - t.Helper() - var raw map[string]interface{} err := hcl.Decode(&raw, body) require.NoError(t, err) @@ -604,7 +873,6 @@ } func TestConfigEntryResponseMarshalling(t *testing.T) { - t.Parallel() cases := map[string]ConfigEntryResponse{ "nil entry": ConfigEntryResponse{}, @@ -631,7 +899,6 @@ name := name tcase := tcase t.Run(name, func(t *testing.T) { - t.Parallel() data, err := tcase.MarshalBinary() require.NoError(t, err) diff -Nru consul-1.7.4+dfsg1/agent/structs/connect_ca.go consul-1.8.7+dfsg1/agent/structs/connect_ca.go --- consul-1.7.4+dfsg1/agent/structs/connect_ca.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/connect_ca.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,6 +9,12 @@ "github.com/mitchellh/mapstructure" ) +const ( + DefaultCARotationPeriod = "2160h" + DefaultLeafCertTTL = "72h" + DefaultIntermediateCertTTL = "8760h" // 365 * 24h +) + // IndexedCARoots is the list of currently trusted CA Roots. type IndexedCARoots struct { // ActiveRootID is the ID of a root in Roots that is the active CA root. @@ -116,6 +122,16 @@ RaftIndex } +func (c *CARoot) Clone() *CARoot { + if c == nil { + return nil + } + + newCopy := *c + newCopy.IntermediateCerts = CloneStringSlice(c.IntermediateCerts) + return &newCopy +} + // CARoots is a list of CARoot structures. type CARoots []*CARoot @@ -308,7 +324,8 @@ } type CommonCAProviderConfig struct { - LeafCertTTL time.Duration + LeafCertTTL time.Duration + IntermediateCertTTL time.Duration SkipValidate bool @@ -354,6 +371,10 @@ var MinLeafCertTTL = time.Hour var MaxLeafCertTTL = 365 * 24 * time.Hour +// intermediateCertRenewInterval is the interval at which the expiration +// of the intermediate cert is checked and renewed if necessary. +var IntermediateCertRenewInterval = time.Hour + func (c CommonCAProviderConfig) Validate() error { if c.SkipValidate { return nil @@ -367,6 +388,33 @@ return fmt.Errorf("leaf cert TTL must be less than %s", MaxLeafCertTTL) } + if c.IntermediateCertTTL < (3 * IntermediateCertRenewInterval) { + // Intermediate Certificates are checked every + // hour(intermediateCertRenewInterval) if they are about to + // expire. Recreating an intermediate certs is started once + // more than half its lifetime has passed. + // If it would be 2h, worst case is that the check happens + // right before half time and when the check happens again, the + // certificate is very close to expiring, leaving only a small + // timeframe to renew. 3h leaves more than 30min to recreate. + // Right now the minimum LeafCertTTL is 1h, which means this + // check not strictly needed, because the same thing is covered + // in the next check too. But just in case minimum LeafCertTTL + // changes at some point, this validation must still be + // performed. + return fmt.Errorf("Intermediate Cert TTL must be greater or equal than %dh", 3*int(IntermediateCertRenewInterval.Hours())) + } + if c.IntermediateCertTTL < (3 * c.LeafCertTTL) { + // Intermediate Certificates are being sent to the proxy when + // the Leaf Certificate changes because they are bundled + // together. + // That means that the Intermediate Certificate TTL must be at + // a minimum of 3 * Leaf Certificate TTL to ensure that the new + // Intermediate is being set together with the Leaf Certificate + // before it expires. + return fmt.Errorf("Intermediate Cert TTL must be greater or equal than 3 * LeafCertTTL (>=%s).", 3*c.LeafCertTTL) + } + switch c.PrivateKeyType { case "ec": if c.PrivateKeyBits != 224 && c.PrivateKeyBits != 256 && c.PrivateKeyBits != 384 && c.PrivateKeyBits != 521 { @@ -386,10 +434,9 @@ type ConsulCAProviderConfig struct { CommonCAProviderConfig `mapstructure:",squash"` - PrivateKey string - RootCert string - RotationPeriod time.Duration - IntermediateCertTTL time.Duration + PrivateKey string + RootCert string + RotationPeriod time.Duration // DisableCrossSigning is really only useful in test code to use the built in // provider while exercising logic that depends on the CA provider ability to @@ -398,37 +445,7 @@ DisableCrossSigning bool } -// intermediateCertRenewInterval is the interval at which the expiration -// of the intermediate cert is checked and renewed if necessary. -var IntermediateCertRenewInterval = time.Hour - func (c *ConsulCAProviderConfig) Validate() error { - if c.IntermediateCertTTL < (3 * IntermediateCertRenewInterval) { - // Intermediate Certificates are checked every - // hour(intermediateCertRenewInterval) if they are about to - // expire. Recreating an intermediate certs is started once - // more than half its lifetime has passed. - // If it would be 2h, worst case is that the check happens - // right before half time and when the check happens again, the - // certificate is very close to expiring, leaving only a small - // timeframe to renew. 3h leaves more than 30min to recreate. - // Right now the minimum LeafCertTTL is 1h, which means this - // check not strictly needed, because the same thing is covered - // in the next check too. But just in case minimum LeafCertTTL - // changes at some point, this validation must still be - // performed. - return fmt.Errorf("Intermediate Cert TTL must be greater or equal than %dh", 3*int(IntermediateCertRenewInterval.Hours())) - } - if c.IntermediateCertTTL < (3 * c.CommonCAProviderConfig.LeafCertTTL) { - // Intermediate Certificates are being sent to the proxy when - // the Leaf Certificate changes because they are bundled - // together. - // That means that the Intermediate Certificate TTL must be at - // a minimum of 3 * Leaf Certificate TTL to ensure that the new - // Intermediate is being set together with the Leaf Certificate - // before it expires. - return fmt.Errorf("Intermediate Cert TTL must be greater or equal than 3 * LeafCertTTL (>=%s).", 3*c.CommonCAProviderConfig.LeafCertTTL) - } return nil } @@ -529,7 +546,7 @@ func Uint8ToString(bs []uint8) string { b := make([]byte, len(bs)) for i, v := range bs { - b[i] = byte(v) + b[i] = v } return string(b) } diff -Nru consul-1.7.4+dfsg1/agent/structs/connect_ca_test.go consul-1.8.7+dfsg1/agent/structs/connect_ca_test.go --- consul-1.7.4+dfsg1/agent/structs/connect_ca_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/connect_ca_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,14 +18,16 @@ name: "basic defaults", cfg: &CAConfiguration{ Config: map[string]interface{}{ - "RotationPeriod": "2160h", - "LeafCertTTL": "72h", - "CSRMaxPerSecond": "50", + "RotationPeriod": "2160h", + "LeafCertTTL": "72h", + "IntermediateCertTTL": "4320h", + "CSRMaxPerSecond": "50", }, }, want: &CommonCAProviderConfig{ - LeafCertTTL: 72 * time.Hour, - CSRMaxPerSecond: 50, + LeafCertTTL: 72 * time.Hour, + IntermediateCertTTL: 4320 * time.Hour, + CSRMaxPerSecond: 50, }, }, { @@ -38,13 +40,15 @@ name: "basic defaults after encoding fun", cfg: &CAConfiguration{ Config: map[string]interface{}{ - "RotationPeriod": []uint8("2160h"), - "LeafCertTTL": []uint8("72h"), + "RotationPeriod": []uint8("2160h"), + "LeafCertTTL": []uint8("72h"), + "IntermediateCertTTL": []uint8("4320h"), }, }, want: &CommonCAProviderConfig{ - LeafCertTTL: 72 * time.Hour, - CSRMaxPerSecond: 50, // The default value + LeafCertTTL: 72 * time.Hour, + IntermediateCertTTL: 4320 * time.Hour, + CSRMaxPerSecond: 50, // The default value }, }, } @@ -63,39 +67,60 @@ func TestCAProviderConfig_Validate(t *testing.T) { tests := []struct { name string - cfg *ConsulCAProviderConfig + cfg *CommonCAProviderConfig wantErr bool wantMsg string }{ { name: "defaults", - cfg: &ConsulCAProviderConfig{}, + cfg: &CommonCAProviderConfig{}, wantErr: true, - wantMsg: "Intermediate Cert TTL must be greater or equal than 3h", + wantMsg: "leaf cert TTL must be greater or equal than 1h0m0s", }, { name: "intermediate cert ttl too short", - cfg: &ConsulCAProviderConfig{ - CommonCAProviderConfig: CommonCAProviderConfig{LeafCertTTL: 2 * time.Hour}, - IntermediateCertTTL: 4 * time.Hour, + cfg: &CommonCAProviderConfig{ + LeafCertTTL: 2 * time.Hour, + IntermediateCertTTL: 4 * time.Hour, }, wantErr: true, wantMsg: "Intermediate Cert TTL must be greater or equal than 3 * LeafCertTTL (>=6h0m0s).", }, { name: "intermediate cert ttl too short", - cfg: &ConsulCAProviderConfig{ - CommonCAProviderConfig: CommonCAProviderConfig{LeafCertTTL: 5 * time.Hour}, - IntermediateCertTTL: 15*time.Hour - 1, + cfg: &CommonCAProviderConfig{ + LeafCertTTL: 5 * time.Hour, + IntermediateCertTTL: 15*time.Hour - 1, }, wantErr: true, wantMsg: "Intermediate Cert TTL must be greater or equal than 3 * LeafCertTTL (>=15h0m0s).", }, { - name: "good intermediate and leaf cert TTL", - cfg: &ConsulCAProviderConfig{ - CommonCAProviderConfig: CommonCAProviderConfig{LeafCertTTL: 1 * time.Hour}, - IntermediateCertTTL: 4 * time.Hour, + name: "good intermediate and leaf cert TTL, missing key type", + cfg: &CommonCAProviderConfig{ + LeafCertTTL: 1 * time.Hour, + IntermediateCertTTL: 4 * time.Hour, + }, + wantErr: true, + wantMsg: "private key type must be either 'ec' or 'rsa'", + }, + { + name: "good intermediate/leaf cert TTL/key type, missing bits", + cfg: &CommonCAProviderConfig{ + LeafCertTTL: 1 * time.Hour, + IntermediateCertTTL: 4 * time.Hour, + PrivateKeyType: "ec", + }, + wantErr: true, + wantMsg: "EC key length must be one of (224, 256, 384, 521) bits", + }, + { + name: "good intermediate/leaf cert TTL/key type/bits", + cfg: &CommonCAProviderConfig{ + LeafCertTTL: 1 * time.Hour, + IntermediateCertTTL: 4 * time.Hour, + PrivateKeyType: "ec", + PrivateKeyBits: 256, }, wantErr: false, }, diff -Nru consul-1.7.4+dfsg1/agent/structs/connect_proxy_config.go consul-1.8.7+dfsg1/agent/structs/connect_proxy_config.go --- consul-1.7.4+dfsg1/agent/structs/connect_proxy_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/connect_proxy_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -114,7 +114,7 @@ Upstreams Upstreams `json:",omitempty"` // MeshGateway defines the mesh gateway configuration for this upstream - MeshGateway MeshGatewayConfig `json:",omitempty"` + MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` // Expose defines whether checks or paths are exposed through the proxy Expose ExposeConfig `json:",omitempty"` @@ -247,6 +247,11 @@ // MeshGateway is the configuration for mesh gateway usage of this upstream MeshGateway MeshGatewayConfig `json:",omitempty"` + + // IngressHosts are a list of hosts that should route to this upstream from + // an ingress gateway. This cannot and should not be set by a user, it is + // used internally to store the association of hosts to an upstream service. + IngressHosts []string `json:"-" bexpr:"-"` } func (t *Upstream) UnmarshalJSON(data []byte) (err error) { @@ -358,7 +363,7 @@ name := u.DestinationName typ := u.DestinationType - if typ != UpstreamDestTypePreparedQuery && u.DestinationNamespace != "" && u.DestinationNamespace != "default" { + if typ != UpstreamDestTypePreparedQuery && u.DestinationNamespace != "" && u.DestinationNamespace != IntentionDefaultNamespace { name = u.DestinationNamespace + "/" + u.DestinationName } if u.Datacenter != "" { @@ -403,15 +408,26 @@ Paths []ExposePath `json:",omitempty"` } +func (e ExposeConfig) Clone() ExposeConfig { + e2 := e + if len(e.Paths) > 0 { + e2.Paths = make([]ExposePath, 0, len(e.Paths)) + for _, p := range e.Paths { + e2.Paths = append(e2.Paths, p) + } + } + return e2 +} + type ExposePath struct { // ListenerPort defines the port of the proxy's listener for exposed paths. - ListenerPort int `json:",omitempty"` + ListenerPort int `json:",omitempty" alias:"listener_port"` // ExposePath is the path to expose through the proxy, ie. "/metrics." Path string `json:",omitempty"` // LocalPathPort is the port that the service is listening on for the given path. - LocalPathPort int `json:",omitempty"` + LocalPathPort int `json:",omitempty" alias:"local_path_port"` // Protocol describes the upstream's service protocol. // Valid values are "http" and "http2", defaults to "http" diff -Nru consul-1.7.4+dfsg1/agent/structs/connect_proxy_config_test.go consul-1.8.7+dfsg1/agent/structs/connect_proxy_config_test.go --- consul-1.7.4+dfsg1/agent/structs/connect_proxy_config_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/connect_proxy_config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -100,6 +100,8 @@ DestinationName: "foo", Datacenter: "dc1", LocalBindPort: 1234, + // Test IngressHosts does not marshal + IngressHosts: []string{"test.example.com"}, }, want: `{ "DestinationType": "service", @@ -179,6 +181,22 @@ }, wantErr: false, }, + { + name: "ingress-hosts-do-not-unmarshal", + json: `{ + "DestinationType": "service", + "DestinationName": "foo", + "Datacenter": "dc1", + "IngressHosts": ["asdf"] + }`, + want: Upstream{ + DestinationType: UpstreamDestTypeService, + DestinationName: "foo", + Datacenter: "dc1", + IngressHosts: nil, // Make sure this doesn't get parsed + }, + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff -Nru consul-1.7.4+dfsg1/agent/structs/errors.go consul-1.8.7+dfsg1/agent/structs/errors.go --- consul-1.7.4+dfsg1/agent/structs/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/errors.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,6 +14,7 @@ errSegmentsNotSupported = "Network segments are not supported in this version of Consul" errRPCRateExceeded = "RPC rate limit exceeded" errServiceNotFound = "Service not found: " + errQueryNotFound = "Query not found" ) var ( @@ -24,8 +25,17 @@ ErrSegmentsNotSupported = errors.New(errSegmentsNotSupported) ErrRPCRateExceeded = errors.New(errRPCRateExceeded) ErrDCNotAvailable = errors.New(errDCNotAvailable) + ErrQueryNotFound = errors.New(errQueryNotFound) ) +func IsErrNoDCPath(err error) bool { + return err != nil && strings.Contains(err.Error(), errNoDCPath) +} + +func IsErrQueryNotFound(err error) bool { + return err != nil && strings.Contains(err.Error(), errQueryNotFound) +} + func IsErrNoLeader(err error) bool { return err != nil && strings.Contains(err.Error(), errNoLeader) } diff -Nru consul-1.7.4+dfsg1/agent/structs/federation_state.go consul-1.8.7+dfsg1/agent/structs/federation_state.go --- consul-1.7.4+dfsg1/agent/structs/federation_state.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/federation_state.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,143 @@ +package structs + +import ( + "sort" + "time" +) + +// FederationStateOp is the operation for a request related to federation states. +type FederationStateOp string + +const ( + FederationStateUpsert FederationStateOp = "upsert" + FederationStateDelete FederationStateOp = "delete" +) + +// FederationStateRequest is used to upsert and delete federation states. +type FederationStateRequest struct { + // Datacenter is the target for this request. + Datacenter string + + // Op is the type of operation being requested. + Op FederationStateOp + + // State is the federation state to upsert or in the case of a delete + // only the State.Datacenter field should be set. + State *FederationState + + // WriteRequest is a common struct containing ACL tokens and other + // write-related common elements for requests. + WriteRequest +} + +// RequestDatacenter returns the datacenter for a given request. +func (c *FederationStateRequest) RequestDatacenter() string { + return c.Datacenter +} + +// FederationStates is a list of federation states. +type FederationStates []*FederationState + +// Sort sorts federation states by their datacenter. +func (listings FederationStates) Sort() { + sort.Slice(listings, func(i, j int) bool { + return listings[i].Datacenter < listings[j].Datacenter + }) +} + +// FederationState defines some WAN federation related state that should be +// cross-shared between all datacenters joined on the WAN. One record exists +// per datacenter. +type FederationState struct { + // Datacenter is the name of the datacenter. + Datacenter string + + // MeshGateways is a snapshot of the catalog state for all mesh gateways in + // this datacenter. + MeshGateways CheckServiceNodes `json:",omitempty"` + + // UpdatedAt keeps track of when this record was modified. + UpdatedAt time.Time + + // PrimaryModifyIndex is the ModifyIndex of the original data as it exists + // in the primary datacenter. + PrimaryModifyIndex uint64 + + // RaftIndex is local raft data. + RaftIndex +} + +// IsSame is used to compare two federation states for the purposes of +// anti-entropy. +func (c *FederationState) IsSame(other *FederationState) bool { + if c.Datacenter != other.Datacenter { + return false + } + + // We don't include the UpdatedAt field in this comparison because that is + // only updated when we re-persist. + + if len(c.MeshGateways) != len(other.MeshGateways) { + return false + } + + // NOTE: we don't bother to sort these since the order is going to be + // already defined by how the catalog returns results which should be + // stable enough. + + for i := 0; i < len(c.MeshGateways); i++ { + a := c.MeshGateways[i] + b := other.MeshGateways[i] + + if !a.Node.IsSame(b.Node) { + return false + } + if !a.Service.IsSame(b.Service) { + return false + } + + if len(a.Checks) != len(b.Checks) { + return false + } + + for j := 0; j < len(a.Checks); j++ { + ca := a.Checks[j] + cb := b.Checks[j] + + if !ca.IsSame(cb) { + return false + } + } + } + + return true +} + +// FederationStateQuery is used to query federation states. +type FederationStateQuery struct { + // Datacenter is the target this request is intended for. + Datacenter string + + // TargetDatacenter is the name of a datacenter to fetch the federation state for. + TargetDatacenter string + + // Options for queries + QueryOptions +} + +// RequestDatacenter returns the datacenter for a given request. +func (c *FederationStateQuery) RequestDatacenter() string { + return c.TargetDatacenter +} + +// FederationStateResponse is the response to a FederationStateQuery request. +type FederationStateResponse struct { + State *FederationState + QueryMeta +} + +// IndexedFederationStates represents the list of all federation states. +type IndexedFederationStates struct { + States FederationStates + QueryMeta +} diff -Nru consul-1.7.4+dfsg1/agent/structs/intention.go consul-1.8.7+dfsg1/agent/structs/intention.go --- consul-1.7.4+dfsg1/agent/structs/intention.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/intention.go 2020-12-10 21:46:52.000000000 +0000 @@ -52,7 +52,7 @@ // SourceType is the type of the value for the source. SourceType IntentionSourceType - // Action is whether this is a whitelist or blacklist intention. + // Action is whether this is an allowlist or denylist intention. Action IntentionAction // DefaultAddr, DefaultPort of the local listening proxy (if any) to @@ -71,16 +71,16 @@ // CreatedAt and UpdatedAt keep track of when this record was created // or modified. - CreatedAt, UpdatedAt time.Time `mapstructure:"-"` + CreatedAt, UpdatedAt time.Time `mapstructure:"-" bexpr:"-"` // Hash of the contents of the intention // // This is needed mainly for replication purposes. When replicating from // one DC to another keeping the content Hash will allow us to detect // content changes more efficiently than checking every single field - Hash []byte + Hash []byte `bexpr:"-"` - RaftIndex + RaftIndex `bexpr:"-"` } func (t *Intention) UnmarshalJSON(data []byte) (err error) { @@ -103,6 +103,7 @@ return nil } +// nolint: staticcheck // should be fixed in https://github.com/hashicorp/consul/pull/7900 func (x *Intention) SetHash(force bool) []byte { if force || x.Hash == nil { hash, err := blake2b.New256(nil) @@ -348,7 +349,7 @@ } // IntentionAction is the action that the intention represents. This -// can be "allow" or "deny" to whitelist or blacklist intentions. +// can be "allow" or "deny". type IntentionAction string const ( diff -Nru consul-1.7.4+dfsg1/agent/structs/intention_test.go consul-1.8.7+dfsg1/agent/structs/intention_test.go --- consul-1.7.4+dfsg1/agent/structs/intention_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/intention_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,7 +11,6 @@ ) func TestIntention_ACLs(t *testing.T) { - t.Parallel() type testCase struct { intention Intention rules string diff -Nru consul-1.7.4+dfsg1/agent/structs/protobuf_compat.go consul-1.8.7+dfsg1/agent/structs/protobuf_compat.go --- consul-1.7.4+dfsg1/agent/structs/protobuf_compat.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/protobuf_compat.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,7 +5,7 @@ ) // QueryOptionsCompat is the interface that both the structs.QueryOptions -// and the agentpb.QueryOptions structs need to implement so that they +// and the proto/pbcommon.QueryOptions structs need to implement so that they // can be operated on interchangeably type QueryOptionsCompat interface { GetToken() string @@ -33,7 +33,7 @@ } // QueryMetaCompat is the interface that both the structs.QueryMeta -// and the agentpb.QueryMeta structs need to implement so that they +// and the proto/pbcommon.QueryMeta structs need to implement so that they // can be operated on interchangeably type QueryMetaCompat interface { GetLastContact() time.Duration @@ -47,7 +47,7 @@ } // GetToken helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetToken() string { if m != nil { return m.Token @@ -56,7 +56,7 @@ } // GetMinQueryIndex helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetMinQueryIndex() uint64 { if m != nil { return m.MinQueryIndex @@ -65,7 +65,7 @@ } // GetMaxQueryTime helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetMaxQueryTime() time.Duration { if m != nil { return m.MaxQueryTime @@ -74,7 +74,7 @@ } // GetAllowStale helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetAllowStale() bool { if m != nil { return m.AllowStale @@ -83,7 +83,7 @@ } // GetRequireConsistent helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetRequireConsistent() bool { if m != nil { return m.RequireConsistent @@ -92,7 +92,7 @@ } // GetUseCache helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetUseCache() bool { if m != nil { return m.UseCache @@ -101,7 +101,7 @@ } // GetMaxStaleDuration helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetMaxStaleDuration() time.Duration { if m != nil { return m.MaxStaleDuration @@ -110,7 +110,7 @@ } // GetMaxAge helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetMaxAge() time.Duration { if m != nil { return m.MaxAge @@ -119,7 +119,7 @@ } // GetMustRevalidate helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetMustRevalidate() bool { if m != nil { return m.MustRevalidate @@ -128,7 +128,7 @@ } // GetStaleIfError helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetStaleIfError() time.Duration { if m != nil { return m.StaleIfError @@ -137,7 +137,7 @@ } // GetFilter helps implement the QueryOptionsCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryOptions) GetFilter() string { if m != nil { return m.Filter @@ -146,67 +146,67 @@ } // SetToken is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetToken(token string) { q.Token = token } // SetMinQueryIndex is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetMinQueryIndex(minQueryIndex uint64) { q.MinQueryIndex = minQueryIndex } // SetMaxQueryTime is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetMaxQueryTime(maxQueryTime time.Duration) { q.MaxQueryTime = maxQueryTime } // SetAllowStale is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetAllowStale(allowStale bool) { q.AllowStale = allowStale } // SetRequireConsistent is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetRequireConsistent(requireConsistent bool) { q.RequireConsistent = requireConsistent } // SetUseCache is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetUseCache(useCache bool) { q.UseCache = useCache } // SetMaxStaleDuration is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetMaxStaleDuration(maxStaleDuration time.Duration) { q.MaxStaleDuration = maxStaleDuration } // SetMaxAge is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetMaxAge(maxAge time.Duration) { q.MaxAge = maxAge } // SetMustRevalidate is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetMustRevalidate(mustRevalidate bool) { q.MustRevalidate = mustRevalidate } // SetStaleIfError is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetStaleIfError(staleIfError time.Duration) { q.StaleIfError = staleIfError } // SetFilter is needed to implement the structs.QueryOptionsCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryOptions) SetFilter(filter string) { q.Filter = filter } @@ -220,7 +220,7 @@ } // GetLastContact helps implement the QueryMetaCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryMeta) GetLastContact() time.Duration { if m != nil { return m.LastContact @@ -229,7 +229,7 @@ } // GetKnownLeader helps implement the QueryMetaCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryMeta) GetKnownLeader() bool { if m != nil { return m.KnownLeader @@ -238,7 +238,7 @@ } // GetConsistencyLevel helps implement the QueryMetaCompat interface -// Copied from agent/agentpb/common.pb.go +// Copied from proto/pbcommon/common.pb.go func (m *QueryMeta) GetConsistencyLevel() string { if m != nil { return m.ConsistencyLevel @@ -247,25 +247,25 @@ } // SetLastContact is needed to implement the structs.QueryMetaCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryMeta) SetLastContact(lastContact time.Duration) { q.LastContact = lastContact } // SetKnownLeader is needed to implement the structs.QueryMetaCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryMeta) SetKnownLeader(knownLeader bool) { q.KnownLeader = knownLeader } // SetIndex is needed to implement the structs.QueryMetaCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryMeta) SetIndex(index uint64) { q.Index = index } // SetConsistencyLevel is needed to implement the structs.QueryMetaCompat interface -// Copied from agent/agentpb/common.go +// Copied from proto/pbcommon/common.go func (q *QueryMeta) SetConsistencyLevel(consistencyLevel string) { q.ConsistencyLevel = consistencyLevel } diff -Nru consul-1.7.4+dfsg1/agent/structs/service_definition_test.go consul-1.8.7+dfsg1/agent/structs/service_definition_test.go --- consul-1.7.4+dfsg1/agent/structs/service_definition_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/service_definition_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,7 +11,6 @@ ) func TestAgentStructs_CheckTypes(t *testing.T) { - t.Parallel() svc := new(ServiceDefinition) // Singular Check field works diff -Nru consul-1.7.4+dfsg1/agent/structs/structs_filtering_test.go consul-1.8.7+dfsg1/agent/structs/structs_filtering_test.go --- consul-1.7.4+dfsg1/agent/structs/structs_filtering_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/structs_filtering_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -525,6 +525,70 @@ }, } +var expectedFieldConfigIntention bexpr.FieldConfigurations = bexpr.FieldConfigurations{ + "ID": &bexpr.FieldConfiguration{ + StructFieldName: "ID", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "Description": &bexpr.FieldConfiguration{ + StructFieldName: "Description", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "SourceNS": &bexpr.FieldConfiguration{ + StructFieldName: "SourceNS", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "SourceName": &bexpr.FieldConfiguration{ + StructFieldName: "SourceName", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "DestinationNS": &bexpr.FieldConfiguration{ + StructFieldName: "DestinationNS", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "DestinationName": &bexpr.FieldConfiguration{ + StructFieldName: "DestinationName", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "SourceType": &bexpr.FieldConfiguration{ + StructFieldName: "SourceType", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "Action": &bexpr.FieldConfiguration{ + StructFieldName: "Action", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "DefaultAddr": &bexpr.FieldConfiguration{ + StructFieldName: "DefaultAddr", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, + }, + "DefaultPort": &bexpr.FieldConfiguration{ + StructFieldName: "DefaultPort", + CoerceFn: bexpr.CoerceInt, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual}, + }, + "Precedence": &bexpr.FieldConfiguration{ + StructFieldName: "Precedence", + CoerceFn: bexpr.CoerceInt, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual}, + }, + "Meta": &bexpr.FieldConfiguration{ + StructFieldName: "Meta", + CoerceFn: bexpr.CoerceString, + SupportedOperations: []bexpr.MatchOperator{bexpr.MatchIsEmpty, bexpr.MatchIsNotEmpty, bexpr.MatchIn, bexpr.MatchNotIn}, + SubFields: expectedFieldConfigMapStringValue, + }, +} + // Only need to generate the field configurations for the top level filtered types // The internal types will be checked within these. var fieldConfigTests map[string]fieldConfigTest = map[string]fieldConfigTest{ @@ -558,6 +622,10 @@ // registered with an agent stays in sync with our internal NodeService structure expected: expectedFieldConfigNodeService, }, + "Intention": fieldConfigTest{ + dataType: (*Intention)(nil), + expected: expectedFieldConfigIntention, + }, } func validateFieldConfigurationsRecurse(t *testing.T, expected, actual bexpr.FieldConfigurations, path string) bool { @@ -665,7 +733,6 @@ } func TestStructs_FilterFieldConfigurations(t *testing.T) { - t.Parallel() var d *fieldDumper if *dumpFieldConfig { diff -Nru consul-1.7.4+dfsg1/agent/structs/structs.go consul-1.8.7+dfsg1/agent/structs/structs.go --- consul-1.7.4+dfsg1/agent/structs/structs.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/structs.go 2020-12-10 21:46:52.000000000 +0000 @@ -67,6 +67,7 @@ ACLAuthMethodSetRequestType = 27 ACLAuthMethodDeleteRequestType = 28 ChunkingStateType = 29 + FederationStateRequestType = 30 ) const ( @@ -98,6 +99,10 @@ // MetaSegmentKey is the node metadata key used to store the node's network segment MetaSegmentKey = "consul-network-segment" + // MetaWANFederationKey is the mesh gateway metadata key that indicates a + // mesh gateway is usable for wan federation. + MetaWANFederationKey = "consul-wan-federation" + // MaxLockDelay provides a maximum LockDelay value for // a session. Any value above this will not be respected. MaxLockDelay = 60 * time.Second @@ -115,6 +120,8 @@ WildcardSpecifier = "*" ) +var allowedConsulMetaKeysForMeshGateway = map[string]struct{}{MetaWANFederationKey: struct{}{}} + var ( NodeMaintCheckID = NewCheckID(NodeMaint, nil) ) @@ -141,6 +148,7 @@ IsRead() bool AllowStaleRead() bool TokenSecret() string + SetTokenSecret(string) } // QueryOptions is used to specify various flags for read queries @@ -230,6 +238,10 @@ return q.Token } +func (q *QueryOptions) SetTokenSecret(s string) { + q.Token = s +} + type WriteRequest struct { // Token is the ACL token ID. If not provided, the 'anonymous' // token is assumed for backwards compatibility. @@ -249,6 +261,10 @@ return w.Token } +func (w *WriteRequest) SetTokenSecret(s string) { + w.Token = s +} + // QueryMeta allows a query response to include potentially // useful metadata about a query type QueryMeta struct { @@ -294,6 +310,7 @@ EnterpriseMeta `hcl:",squash" mapstructure:",squash"` WriteRequest + RaftIndex `bexpr:"-"` } func (r *RegisterRequest) RequestDatacenter() string { @@ -497,6 +514,9 @@ // Connect if true will only search for Connect-compatible services. Connect bool + // Ingress if true will only search for Ingress gateways for the given service. + Ingress bool + EnterpriseMeta `hcl:",squash" mapstructure:",squash"` QueryOptions } @@ -641,14 +661,30 @@ reflect.DeepEqual(n.Meta, other.Meta) } +// ValidateNodeMetadata validates a set of key/value pairs from the agent +// config for use on a Node. +func ValidateNodeMetadata(meta map[string]string, allowConsulPrefix bool) error { + return validateMetadata(meta, allowConsulPrefix, nil) +} + +// ValidateServiceMetadata validates a set of key/value pairs from the agent config for use on a Service. // ValidateMeta validates a set of key/value pairs from the agent config -func ValidateMetadata(meta map[string]string, allowConsulPrefix bool) error { +func ValidateServiceMetadata(kind ServiceKind, meta map[string]string, allowConsulPrefix bool) error { + switch kind { + case ServiceKindMeshGateway: + return validateMetadata(meta, allowConsulPrefix, allowedConsulMetaKeysForMeshGateway) + default: + return validateMetadata(meta, allowConsulPrefix, nil) + } +} + +func validateMetadata(meta map[string]string, allowConsulPrefix bool, allowedConsulKeys map[string]struct{}) error { if len(meta) > metaMaxKeyPairs { return fmt.Errorf("Node metadata cannot contain more than %d key/value pairs", metaMaxKeyPairs) } for key, value := range meta { - if err := validateMetaPair(key, value, allowConsulPrefix); err != nil { + if err := validateMetaPair(key, value, allowConsulPrefix, allowedConsulKeys); err != nil { return fmt.Errorf("Couldn't load metadata pair ('%s', '%s'): %s", key, value, err) } } @@ -674,7 +710,7 @@ } // validateMetaPair checks that the given key/value pair is in a valid format -func validateMetaPair(key, value string, allowConsulPrefix bool) error { +func validateMetaPair(key, value string, allowConsulPrefix bool, allowedConsulKeys map[string]struct{}) error { if key == "" { return fmt.Errorf("Key cannot be blank") } @@ -684,8 +720,10 @@ if len(key) > metaKeyMaxLength { return fmt.Errorf("Key is too long (limit: %d characters)", metaKeyMaxLength) } - if strings.HasPrefix(key, metaKeyReservedPrefix) && !allowConsulPrefix { - return fmt.Errorf("Key prefix '%s' is reserved for internal use", metaKeyReservedPrefix) + if strings.HasPrefix(key, metaKeyReservedPrefix) { + if _, ok := allowedConsulKeys[key]; !allowConsulPrefix && !ok { + return fmt.Errorf("Key prefix '%s' is reserved for internal use", metaKeyReservedPrefix) + } } if len(value) > metaValueMaxLength { return fmt.Errorf("Value is too long (limit: %d characters)", metaValueMaxLength) @@ -803,12 +841,10 @@ } } -func (sn *ServiceNode) compoundID(preferName bool) ServiceID { - var id string - if sn.ServiceID == "" || (preferName && sn.ServiceName != "") { +func (sn *ServiceNode) CompoundServiceID() ServiceID { + id := sn.ServiceID + if id == "" { id = sn.ServiceName - } else { - id = sn.ServiceID } // copy the ent meta and normalize it @@ -821,12 +857,20 @@ } } -func (sn *ServiceNode) CompoundServiceID() ServiceID { - return sn.compoundID(false) -} +func (sn *ServiceNode) CompoundServiceName() ServiceName { + name := sn.ServiceName + if name == "" { + name = sn.ServiceID + } + + // copy the ent meta and normalize it + entMeta := sn.EnterpriseMeta + entMeta.Normalize() -func (sn *ServiceNode) CompoundServiceName() ServiceID { - return sn.compoundID(true) + return ServiceName{ + Name: name, + EnterpriseMeta: entMeta, + } } // Weights represent the weight used by DNS for a given status @@ -856,21 +900,16 @@ // service will proxy connections based off the SNI header set by other // connect proxies ServiceKindMeshGateway ServiceKind = "mesh-gateway" -) -func ServiceKindFromString(kind string) (ServiceKind, error) { - switch kind { - case string(ServiceKindTypical): - return ServiceKindTypical, nil - case string(ServiceKindConnectProxy): - return ServiceKindConnectProxy, nil - case string(ServiceKindMeshGateway): - return ServiceKindMeshGateway, nil - default: - // have to return something and it may as well be typical - return ServiceKindTypical, fmt.Errorf("Invalid service kind: %s", kind) - } -} + // ServiceKindTerminatingGateway is a Terminating Gateway for the Connect + // feature. This service will proxy connections to services outside the mesh. + ServiceKindTerminatingGateway ServiceKind = "terminating-gateway" + + // ServiceKindIngressGateway is an Ingress Gateway for the Connect feature. + // This service allows external traffic to enter the mesh based on + // centralized configuration. + ServiceKindIngressGateway ServiceKind = "ingress-gateway" +) // Type to hold a address and port of a service type ServiceAddress struct { @@ -949,12 +988,10 @@ return addr, port } -func (ns *NodeService) compoundID(preferName bool) ServiceID { - var id string - if ns.ID == "" || (preferName && ns.Service != "") { +func (ns *NodeService) CompoundServiceID() ServiceID { + id := ns.ID + if id == "" { id = ns.Service - } else { - id = ns.ID } // copy the ent meta and normalize it @@ -967,12 +1004,20 @@ } } -func (ns *NodeService) CompoundServiceID() ServiceID { - return ns.compoundID(false) -} +func (ns *NodeService) CompoundServiceName() ServiceName { + name := ns.Service + if name == "" { + name = ns.ID + } -func (ns *NodeService) CompoundServiceName() ServiceID { - return ns.compoundID(true) + // copy the ent meta and normalize it + entMeta := ns.EnterpriseMeta + entMeta.Normalize() + + return ServiceName{ + Name: name, + EnterpriseMeta: entMeta, + } } // ServiceConnect are the shared Connect settings between all service @@ -1000,10 +1045,12 @@ }{ Alias: (*Alias)(t), } + if err = json.Unmarshal(data, &aux); err != nil { return err } - if t.SidecarService == nil { + + if t.SidecarService == nil && aux != nil { t.SidecarService = aux.SidecarServiceSnake } return nil @@ -1014,9 +1061,10 @@ return s.Kind == ServiceKindConnectProxy && s.Proxy.DestinationServiceID != "" } -func (s *NodeService) IsMeshGateway() bool { - // TODO (mesh-gateway) any other things to check? - return s.Kind == ServiceKindMeshGateway +func (s *NodeService) IsGateway() bool { + return s.Kind == ServiceKindMeshGateway || + s.Kind == ServiceKindTerminatingGateway || + s.Kind == ServiceKindIngressGateway } // Validate validates the node service configuration. @@ -1113,36 +1161,36 @@ } } - // MeshGateway validation - if s.Kind == ServiceKindMeshGateway { - // Gateways must have a port - if s.Port == 0 { - result = multierror.Append(result, fmt.Errorf("Port must be non-zero for a Mesh Gateway")) + // Gateway validation + if s.IsGateway() { + // Non-ingress gateways must have a port + if s.Port == 0 && s.Kind != ServiceKindIngressGateway { + result = multierror.Append(result, fmt.Errorf("Port must be non-zero for a %s", s.Kind)) } // Gateways cannot have sidecars if s.Connect.SidecarService != nil { - result = multierror.Append(result, fmt.Errorf("Mesh Gateways cannot have a sidecar service defined")) + result = multierror.Append(result, fmt.Errorf("A %s cannot have a sidecar service defined", s.Kind)) } if s.Proxy.DestinationServiceName != "" { - result = multierror.Append(result, fmt.Errorf("The Proxy.DestinationServiceName configuration is invalid for Mesh Gateways")) + result = multierror.Append(result, fmt.Errorf("The Proxy.DestinationServiceName configuration is invalid for a %s", s.Kind)) } if s.Proxy.DestinationServiceID != "" { - result = multierror.Append(result, fmt.Errorf("The Proxy.DestinationServiceID configuration is invalid for Mesh Gateways")) + result = multierror.Append(result, fmt.Errorf("The Proxy.DestinationServiceID configuration is invalid for a %s", s.Kind)) } if s.Proxy.LocalServiceAddress != "" { - result = multierror.Append(result, fmt.Errorf("The Proxy.LocalServiceAddress configuration is invalid for Mesh Gateways")) + result = multierror.Append(result, fmt.Errorf("The Proxy.LocalServiceAddress configuration is invalid for a %s", s.Kind)) } if s.Proxy.LocalServicePort != 0 { - result = multierror.Append(result, fmt.Errorf("The Proxy.LocalServicePort configuration is invalid for Mesh Gateways")) + result = multierror.Append(result, fmt.Errorf("The Proxy.LocalServicePort configuration is invalid for a %s", s.Kind)) } if len(s.Proxy.Upstreams) != 0 { - result = multierror.Append(result, fmt.Errorf("The Proxy.Upstreams configuration is invalid for Mesh Gateways")) + result = multierror.Append(result, fmt.Errorf("The Proxy.Upstreams configuration is invalid for a %s", s.Kind)) } } @@ -1518,6 +1566,27 @@ } } +func (nodes CheckServiceNodes) ToServiceDump() ServiceDump { + var ret ServiceDump + for i := range nodes { + svc := ServiceInfo{ + Node: nodes[i].Node, + Service: nodes[i].Service, + Checks: nodes[i].Checks, + GatewayService: nil, + } + ret = append(ret, &svc) + } + return ret +} + +// ShallowClone duplicates the slice and underlying array. +func (nodes CheckServiceNodes) ShallowClone() CheckServiceNodes { + dup := make(CheckServiceNodes, len(nodes)) + copy(dup, nodes) + return dup +} + // Filter removes nodes that are failing health checks (and any non-passing // check if that option is selected). Note that this returns the filtered // results AND modifies the receiver for performance. @@ -1574,6 +1643,15 @@ // as it is rather expensive to generate. type NodeDump []*NodeInfo +type ServiceInfo struct { + Node *Node + Service *NodeService + Checks HealthChecks + GatewayService *GatewayService +} + +type ServiceDump []*ServiceInfo + type CheckID struct { ID types.CheckID EnterpriseMeta @@ -1581,11 +1659,6 @@ func NewCheckID(id types.CheckID, entMeta *EnterpriseMeta) CheckID { var cid CheckID - cid.Init(id, entMeta) - return cid -} - -func (cid *CheckID) Init(id types.CheckID, entMeta *EnterpriseMeta) { cid.ID = id if entMeta == nil { entMeta = DefaultEnterpriseMeta() @@ -1593,6 +1666,7 @@ cid.EnterpriseMeta = *entMeta cid.EnterpriseMeta.Normalize() + return cid } // StringHash is used mainly to populate part of the filename of a check @@ -1611,11 +1685,6 @@ func NewServiceID(id string, entMeta *EnterpriseMeta) ServiceID { var sid ServiceID - sid.Init(id, entMeta) - return sid -} - -func (sid *ServiceID) Init(id string, entMeta *EnterpriseMeta) { sid.ID = id if entMeta == nil { entMeta = DefaultEnterpriseMeta() @@ -1623,6 +1692,7 @@ sid.EnterpriseMeta = *entMeta sid.EnterpriseMeta.Normalize() + return sid } func (sid *ServiceID) Matches(other *ServiceID) bool { @@ -1667,16 +1737,40 @@ QueryMeta } -type ServiceInfo struct { +type ServiceName struct { Name string EnterpriseMeta } -func (si *ServiceInfo) ToServiceID() ServiceID { +func NewServiceName(name string, entMeta *EnterpriseMeta) ServiceName { + var ret ServiceName + ret.Name = name + if entMeta == nil { + entMeta = DefaultEnterpriseMeta() + } + + ret.EnterpriseMeta = *entMeta + ret.EnterpriseMeta.Normalize() + return ret +} + +func (n *ServiceName) Matches(o *ServiceName) bool { + if n == nil && o == nil { + return true + } + + if n == nil || o == nil || n.Name != o.Name || !n.EnterpriseMeta.Matches(&o.EnterpriseMeta) { + return false + } + + return true +} + +func (si *ServiceName) ToServiceID() ServiceID { return ServiceID{ID: si.Name, EnterpriseMeta: si.EnterpriseMeta} } -type ServiceList []ServiceInfo +type ServiceList []ServiceName type IndexedServiceList struct { Services ServiceList @@ -1710,11 +1804,26 @@ QueryMeta } +type DatacenterIndexedCheckServiceNodes struct { + DatacenterNodes map[string]CheckServiceNodes + QueryMeta +} + type IndexedNodeDump struct { Dump NodeDump QueryMeta } +type IndexedServiceDump struct { + Dump ServiceDump + QueryMeta +} + +type IndexedGatewayServices struct { + Services GatewayServices + QueryMeta +} + // IndexedConfigEntries has its own encoding logic which differs from // ConfigEntryRequest as it has to send a slice of ConfigEntry. type IndexedConfigEntries struct { @@ -2231,13 +2340,14 @@ // KeyringResponse is a unified key response and can be used for install, // remove, use, as well as listing key queries. type KeyringResponse struct { - WAN bool - Datacenter string - Segment string - Messages map[string]string `json:",omitempty"` - Keys map[string]int - NumNodes int - Error string `json:",omitempty"` + WAN bool + Datacenter string + Segment string + Messages map[string]string `json:",omitempty"` + Keys map[string]int + PrimaryKeys map[string]int + NumNodes int + Error string `json:",omitempty"` } // KeyringResponses holds multiple responses to keyring queries. Each diff -Nru consul-1.7.4+dfsg1/agent/structs/structs_oss.go consul-1.8.7+dfsg1/agent/structs/structs_oss.go --- consul-1.7.4+dfsg1/agent/structs/structs_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/structs_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -43,7 +43,7 @@ } func (m *EnterpriseMeta) NamespaceOrDefault() string { - return "default" + return IntentionDefaultNamespace } func EnterpriseMetaInitializer(_ string) EnterpriseMeta { @@ -106,6 +106,19 @@ return ServiceID{ID: id} } +func ParseServiceNameString(input string) (string, *EnterpriseMeta) { + return input, DefaultEnterpriseMeta() +} + +func (n *ServiceName) String() string { + return n.Name +} + +func ServiceNameFromString(input string) ServiceName { + id, _ := ParseServiceNameString(input) + return ServiceName{Name: id} +} + func (cid *CheckID) String() string { return string(cid.ID) } diff -Nru consul-1.7.4+dfsg1/agent/structs/structs_test.go consul-1.8.7+dfsg1/agent/structs/structs_test.go --- consul-1.7.4+dfsg1/agent/structs/structs_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/structs_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,8 @@ "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -172,6 +174,46 @@ } } +func TestRegisterRequest_UnmarshalJSON_WithConnectNilDoesNotPanic(t *testing.T) { + in := ` +{ + "ID": "", + "Node": "k8s-sync", + "Address": "127.0.0.1", + "TaggedAddresses": null, + "NodeMeta": { + "external-source": "kubernetes" + }, + "Datacenter": "", + "Service": { + "Kind": "", + "ID": "test-service-f8fd5f0f4e6c", + "Service": "test-service", + "Tags": [ + "k8s" + ], + "Meta": { + "external-k8s-ns": "", + "external-source": "kubernetes", + "port-stats": "18080" + }, + "Port": 8080, + "Address": "192.0.2.10", + "EnableTagOverride": false, + "CreateIndex": 0, + "ModifyIndex": 0, + "Connect": null + }, + "Check": null, + "SkipNodeUpdate": true +} +` + + var req RegisterRequest + err := lib.DecodeJSON(strings.NewReader(in), &req) + require.NoError(t, err) +} + func TestNode_IsSame(t *testing.T) { id := types.NodeID("e62f3b31-9284-4e26-ab14-2a59dea85b55") node := "mynode1" @@ -415,6 +457,112 @@ } } +func TestStructs_NodeService_ValidateTerminatingGateway(t *testing.T) { + type testCase struct { + Modify func(*NodeService) + Err string + } + + cases := map[string]testCase{ + "valid": testCase{ + func(x *NodeService) {}, + "", + }, + "sidecar-service": testCase{ + func(x *NodeService) { x.Connect.SidecarService = &ServiceDefinition{} }, + "cannot have a sidecar service", + }, + "proxy-destination-name": testCase{ + func(x *NodeService) { x.Proxy.DestinationServiceName = "foo" }, + "Proxy.DestinationServiceName configuration is invalid", + }, + "proxy-destination-id": testCase{ + func(x *NodeService) { x.Proxy.DestinationServiceID = "foo" }, + "Proxy.DestinationServiceID configuration is invalid", + }, + "proxy-local-address": testCase{ + func(x *NodeService) { x.Proxy.LocalServiceAddress = "127.0.0.1" }, + "Proxy.LocalServiceAddress configuration is invalid", + }, + "proxy-local-port": testCase{ + func(x *NodeService) { x.Proxy.LocalServicePort = 36 }, + "Proxy.LocalServicePort configuration is invalid", + }, + "proxy-upstreams": testCase{ + func(x *NodeService) { x.Proxy.Upstreams = []Upstream{Upstream{}} }, + "Proxy.Upstreams configuration is invalid", + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + ns := TestNodeServiceTerminatingGateway(t, "10.0.0.5") + tc.Modify(ns) + + err := ns.Validate() + if tc.Err == "" { + require.NoError(t, err) + } else { + require.Error(t, err) + require.Contains(t, strings.ToLower(err.Error()), strings.ToLower(tc.Err)) + } + }) + } +} + +func TestStructs_NodeService_ValidateIngressGateway(t *testing.T) { + type testCase struct { + Modify func(*NodeService) + Err string + } + + cases := map[string]testCase{ + "valid": testCase{ + func(x *NodeService) {}, + "", + }, + "sidecar-service": testCase{ + func(x *NodeService) { x.Connect.SidecarService = &ServiceDefinition{} }, + "cannot have a sidecar service", + }, + "proxy-destination-name": testCase{ + func(x *NodeService) { x.Proxy.DestinationServiceName = "foo" }, + "Proxy.DestinationServiceName configuration is invalid", + }, + "proxy-destination-id": testCase{ + func(x *NodeService) { x.Proxy.DestinationServiceID = "foo" }, + "Proxy.DestinationServiceID configuration is invalid", + }, + "proxy-local-address": testCase{ + func(x *NodeService) { x.Proxy.LocalServiceAddress = "127.0.0.1" }, + "Proxy.LocalServiceAddress configuration is invalid", + }, + "proxy-local-port": testCase{ + func(x *NodeService) { x.Proxy.LocalServicePort = 36 }, + "Proxy.LocalServicePort configuration is invalid", + }, + "proxy-upstreams": testCase{ + func(x *NodeService) { x.Proxy.Upstreams = []Upstream{Upstream{}} }, + "Proxy.Upstreams configuration is invalid", + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + ns := TestNodeServiceIngressGateway(t, "10.0.0.5") + tc.Modify(ns) + + err := ns.Validate() + if tc.Err == "" { + require.NoError(t, err) + } else { + require.Error(t, err) + require.Contains(t, strings.ToLower(err.Error()), strings.ToLower(tc.Err)) + } + }) + } +} + func TestStructs_NodeService_ValidateExposeConfig(t *testing.T) { type testCase struct { Modify func(*NodeService) @@ -1164,45 +1312,102 @@ } } -func TestStructs_ValidateMetadata(t *testing.T) { - // Load a valid set of key/value pairs - meta := map[string]string{ - "key1": "value1", - "key2": "value2", - } - // Should succeed - if err := ValidateMetadata(meta, false); err != nil { - t.Fatalf("err: %s", err) - } - - // Should get error - meta = map[string]string{ - "": "value1", - } - if err := ValidateMetadata(meta, false); !strings.Contains(err.Error(), "Couldn't load metadata pair") { - t.Fatalf("should have failed") - } - - // Should get error - meta = make(map[string]string) +func TestStructs_ValidateServiceAndNodeMetadata(t *testing.T) { + tooMuchMeta := make(map[string]string) for i := 0; i < metaMaxKeyPairs+1; i++ { - meta[string(i)] = "value" + tooMuchMeta[string(i)] = "value" } - if err := ValidateMetadata(meta, false); !strings.Contains(err.Error(), "cannot contain more than") { - t.Fatalf("should have failed") + type testcase struct { + Meta map[string]string + AllowConsulPrefix bool + NodeError string + ServiceError string + GatewayError string + } + cases := map[string]testcase{ + "should succeed": { + map[string]string{ + "key1": "value1", + "key2": "value2", + }, + false, + "", + "", + "", + }, + "invalid key": { + map[string]string{ + "": "value1", + }, + false, + "Couldn't load metadata pair", + "Couldn't load metadata pair", + "Couldn't load metadata pair", + }, + "too many keys": { + tooMuchMeta, + false, + "cannot contain more than", + "cannot contain more than", + "cannot contain more than", + }, + "reserved key prefix denied": { + map[string]string{ + metaKeyReservedPrefix + "key": "value1", + }, + false, + "reserved for internal use", + "reserved for internal use", + "reserved for internal use", + }, + "reserved key prefix allowed": { + map[string]string{ + metaKeyReservedPrefix + "key": "value1", + }, + true, + "", + "", + "", + }, + "reserved key prefix allowed via an allowlist just for gateway - " + MetaWANFederationKey: { + map[string]string{ + MetaWANFederationKey: "value1", + }, + false, + "reserved for internal use", + "reserved for internal use", + "", + }, } - // Should not error - meta = map[string]string{ - metaKeyReservedPrefix + "key": "value1", - } - // Should fail - if err := ValidateMetadata(meta, false); err == nil || !strings.Contains(err.Error(), "reserved for internal use") { - t.Fatalf("err: %s", err) - } - // Should succeed - if err := ValidateMetadata(meta, true); err != nil { - t.Fatalf("err: %s", err) + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + t.Run("ValidateNodeMetadata", func(t *testing.T) { + err := ValidateNodeMetadata(tc.Meta, tc.AllowConsulPrefix) + if tc.NodeError == "" { + require.NoError(t, err) + } else { + testutil.RequireErrorContains(t, err, tc.NodeError) + } + }) + t.Run("ValidateServiceMetadata - typical", func(t *testing.T) { + err := ValidateServiceMetadata(ServiceKindTypical, tc.Meta, tc.AllowConsulPrefix) + if tc.ServiceError == "" { + require.NoError(t, err) + } else { + testutil.RequireErrorContains(t, err, tc.ServiceError) + } + }) + t.Run("ValidateServiceMetadata - mesh-gateway", func(t *testing.T) { + err := ValidateServiceMetadata(ServiceKindMeshGateway, tc.Meta, tc.AllowConsulPrefix) + if tc.GatewayError == "" { + require.NoError(t, err) + } else { + testutil.RequireErrorContains(t, err, tc.GatewayError) + } + }) + }) } } @@ -1214,27 +1419,32 @@ Value string Error string AllowConsulPrefix bool + AllowConsulKeys map[string]struct{} }{ // valid pair - {"key", "value", "", false}, + {"key", "value", "", false, nil}, // invalid, blank key - {"", "value", "cannot be blank", false}, + {"", "value", "cannot be blank", false, nil}, // allowed special chars in key name - {"k_e-y", "value", "", false}, + {"k_e-y", "value", "", false, nil}, // disallowed special chars in key name - {"(%key&)", "value", "invalid characters", false}, + {"(%key&)", "value", "invalid characters", false, nil}, // key too long - {longKey, "value", "Key is too long", false}, + {longKey, "value", "Key is too long", false, nil}, // reserved prefix - {metaKeyReservedPrefix + "key", "value", "reserved for internal use", false}, + {metaKeyReservedPrefix + "key", "value", "reserved for internal use", false, nil}, // reserved prefix, allowed - {metaKeyReservedPrefix + "key", "value", "", true}, + {metaKeyReservedPrefix + "key", "value", "", true, nil}, + // reserved prefix, not allowed via an allowlist + {metaKeyReservedPrefix + "bad", "value", "reserved for internal use", false, map[string]struct{}{metaKeyReservedPrefix + "good": struct{}{}}}, + // reserved prefix, allowed via an allowlist + {metaKeyReservedPrefix + "good", "value", "", true, map[string]struct{}{metaKeyReservedPrefix + "good": struct{}{}}}, // value too long - {"key", longValue, "Value is too long", false}, + {"key", longValue, "Value is too long", false, nil}, } for _, pair := range pairs { - err := validateMetaPair(pair.Key, pair.Value, pair.AllowConsulPrefix) + err := validateMetaPair(pair.Key, pair.Value, pair.AllowConsulPrefix, pair.AllowConsulKeys) if pair.Error == "" && err != nil { t.Fatalf("should have succeeded: %v, %v", pair, err) } else if pair.Error != "" && !strings.Contains(err.Error(), pair.Error) { @@ -1380,7 +1590,6 @@ } func TestNodeService_JSON_OmitTaggedAdddresses(t *testing.T) { - t.Parallel() cases := []struct { name string ns NodeService @@ -1403,7 +1612,6 @@ name := tc.name ns := tc.ns t.Run(name, func(t *testing.T) { - t.Parallel() data, err := json.Marshal(ns) require.NoError(t, err) var raw map[string]interface{} @@ -1416,7 +1624,6 @@ } func TestServiceNode_JSON_OmitServiceTaggedAdddresses(t *testing.T) { - t.Parallel() cases := []struct { name string sn ServiceNode @@ -1439,7 +1646,6 @@ name := tc.name sn := tc.sn t.Run(name, func(t *testing.T) { - t.Parallel() data, err := json.Marshal(sn) require.NoError(t, err) var raw map[string]interface{} @@ -1452,7 +1658,6 @@ } func TestNode_BestAddress(t *testing.T) { - t.Parallel() type testCase struct { input Node @@ -1489,7 +1694,6 @@ name := name tc := tc t.Run(name, func(t *testing.T) { - t.Parallel() require.Equal(t, tc.lanAddr, tc.input.BestAddress(false)) require.Equal(t, tc.wanAddr, tc.input.BestAddress(true)) @@ -1498,7 +1702,6 @@ } func TestNodeService_BestAddress(t *testing.T) { - t.Parallel() type testCase struct { input NodeService @@ -1591,7 +1794,6 @@ name := name tc := tc t.Run(name, func(t *testing.T) { - t.Parallel() addr, port := tc.input.BestAddress(false) require.Equal(t, tc.lanAddr, addr) @@ -1605,7 +1807,6 @@ } func TestCheckServiceNode_BestAddress(t *testing.T) { - t.Parallel() type testCase struct { input CheckServiceNode @@ -1759,7 +1960,6 @@ name := name tc := tc t.Run(name, func(t *testing.T) { - t.Parallel() addr, port := tc.input.BestAddress(false) require.Equal(t, tc.lanAddr, addr) @@ -1963,3 +2163,63 @@ }) } + +func TestGatewayService_IsSame(t *testing.T) { + gateway := NewServiceName("gateway", nil) + svc := NewServiceName("web", nil) + kind := ServiceKindTerminatingGateway + ca := "ca.pem" + cert := "client.pem" + key := "tls.key" + sni := "mydomain" + wildcard := false + + g := &GatewayService{ + Gateway: gateway, + Service: svc, + GatewayKind: kind, + CAFile: ca, + CertFile: cert, + KeyFile: key, + SNI: sni, + FromWildcard: wildcard, + } + other := &GatewayService{ + Gateway: gateway, + Service: svc, + GatewayKind: kind, + CAFile: ca, + CertFile: cert, + KeyFile: key, + SNI: sni, + FromWildcard: wildcard, + } + check := func(twiddle, restore func()) { + t.Helper() + if !g.IsSame(other) || !other.IsSame(g) { + t.Fatalf("should be the same") + } + + twiddle() + if g.IsSame(other) || other.IsSame(g) { + t.Fatalf("should be different, was %#v VS %#v", g, other) + } + + restore() + if !g.IsSame(other) || !other.IsSame(g) { + t.Fatalf("should be the same") + } + } + check(func() { other.Gateway = NewServiceName("other", nil) }, func() { other.Gateway = gateway }) + check(func() { other.Service = NewServiceName("other", nil) }, func() { other.Service = svc }) + check(func() { other.GatewayKind = ServiceKindIngressGateway }, func() { other.GatewayKind = kind }) + check(func() { other.CAFile = "/certs/cert.pem" }, func() { other.CAFile = ca }) + check(func() { other.CertFile = "/certs/cert.pem" }, func() { other.CertFile = cert }) + check(func() { other.KeyFile = "/certs/cert.pem" }, func() { other.KeyFile = key }) + check(func() { other.SNI = "alt-domain" }, func() { other.SNI = sni }) + check(func() { other.FromWildcard = true }, func() { other.FromWildcard = wildcard }) + + if !g.IsSame(other) { + t.Fatalf("should be equal, was %#v VS %#v", g, other) + } +} diff -Nru consul-1.7.4+dfsg1/agent/structs/testing_catalog.go consul-1.8.7+dfsg1/agent/structs/testing_catalog.go --- consul-1.7.4+dfsg1/agent/structs/testing_catalog.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/structs/testing_catalog.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,6 +29,17 @@ } } +// TestRegisterIngressGateway returns a RegisterRequest for registering an +// ingress gateway +func TestRegisterIngressGateway(t testing.T) *RegisterRequest { + return &RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: TestNodeServiceIngressGateway(t, ""), + } +} + // TestNodeService returns a *NodeService representing a valid regular service. func TestNodeService(t testing.T) *NodeService { return &NodeService{ @@ -85,6 +96,15 @@ ServiceAddress{Address: "198.18.4.5", Port: 443}) } +func TestNodeServiceTerminatingGateway(t testing.T, address string) *NodeService { + return &NodeService{ + Kind: ServiceKindTerminatingGateway, + Port: 8443, + Service: "terminating-gateway", + Address: address, + } +} + func TestNodeServiceMeshGatewayWithAddrs(t testing.T, address string, port int, lanAddr, wanAddr ServiceAddress) *NodeService { return &NodeService{ Kind: ServiceKindMeshGateway, @@ -103,6 +123,14 @@ } } +func TestNodeServiceIngressGateway(t testing.T, address string) *NodeService { + return &NodeService{ + Kind: ServiceKindIngressGateway, + Service: "ingress-gateway", + Address: address, + } +} + // TestNodeServiceSidecar returns a *NodeService representing a service // registration with a nested Sidecar registration. func TestNodeServiceSidecar(t testing.T) *NodeService { diff -Nru consul-1.7.4+dfsg1/agent/testagent.go consul-1.8.7+dfsg1/agent/testagent.go --- consul-1.7.4+dfsg1/agent/testagent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/testagent.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,40 +2,42 @@ import ( "bytes" + "context" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/x509" "fmt" "io" - "io/ioutil" "math/rand" "net/http/httptest" - "os" "path/filepath" "strconv" - "strings" "testing" "text/template" "time" metrics "github.com/armon/go-metrics" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/errwrap" "github.com/hashicorp/go-hclog" uuid "github.com/hashicorp/go-uuid" + "github.com/stretchr/testify/require" + "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/freeport" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/hashicorp/consul/tlsutil" ) func init() { rand.Seed(time.Now().UnixNano()) // seed random number generator } -// TempDir defines the base dir for temporary directories. -var TempDir = os.TempDir() - // TestAgent encapsulates an Agent with a default configuration and // startup procedure suitable for testing. It panics if there are errors // during creation or startup instead of returning errors. It manages a @@ -53,22 +55,16 @@ // when Shutdown() is called. Config *config.RuntimeConfig - // returnPortsFn will put the ports claimed for the test back into the - // general freeport pool - returnPortsFn func() - // LogOutput is the sink for the logs. If nil, logs are written // to os.Stderr. LogOutput io.Writer - // DataDir is the data directory which is used when Config.DataDir - // is not set. It is created automatically and removed when - // Shutdown() is called. + // DataDir may be set to a directory which exists. If is it not set, + // TestAgent.Start will create one and set DataDir to the directory path. + // In all cases the agent will be configured to use this path as the data directory, + // and the directory will be removed once the test ends. DataDir string - // Key is the optional encryption key for the LAN and WAN keyring. - Key string - // UseTLS, if true, will disable the HTTP port and enable the HTTPS // one. UseTLS bool @@ -81,38 +77,32 @@ // It is valid after Start(). srv *HTTPServer + // overrides is an hcl config source to use to override otherwise + // non-user settable configurations + Overrides string + // Agent is the embedded consul agent. // It is valid after Start(). *Agent } -// NewTestAgent returns a started agent with the given name and -// configuration. It fails the test if the Agent could not be started. The -// caller should call Shutdown() to stop the agent and remove temporary -// directories. -func NewTestAgent(t *testing.T, name string, hcl string) *TestAgent { - return NewTestAgentWithFields(t, true, TestAgent{Name: name, HCL: hcl}) -} - -// NewTestAgentWithFields takes a TestAgent struct with any number of fields set, -// and a boolean 'start', which indicates whether or not the TestAgent should -// be started. If no LogOutput is set, it will automatically be set to -// testutil.TestWriter(t). Name will default to t.Name() if not specified. -func NewTestAgentWithFields(t *testing.T, start bool, ta TestAgent) *TestAgent { - // copy values - a := ta - if a.Name == "" { - a.Name = t.Name() - } - if a.LogOutput == nil { - a.LogOutput = testutil.TestWriter(t) - } - if !start { - return nil - } +// NewTestAgent returns a started agent with the given configuration. It fails +// the test if the Agent could not be started. +// The caller is responsible for calling Shutdown() to stop the agent and remove +// temporary directories. +func NewTestAgent(t *testing.T, hcl string) *TestAgent { + return StartTestAgent(t, TestAgent{HCL: hcl}) +} +// StartTestAgent and wait for it to become available. If the agent fails to +// start the test will be marked failed and execution will stop. +// +// The caller is responsible for calling Shutdown() to stop the agent and remove +// temporary directories. +func StartTestAgent(t *testing.T, a TestAgent) *TestAgent { + t.Helper() retry.RunWith(retry.ThreeTimes(), t, func(r *retry.R) { - if err := a.Start(); err != nil { + if err := a.Start(t); err != nil { r.Fatal(err) } }) @@ -120,105 +110,102 @@ return &a } +func TestConfigHCL(nodeID string) string { + return fmt.Sprintf(` + bind_addr = "127.0.0.1" + advertise_addr = "127.0.0.1" + datacenter = "dc1" + bootstrap = true + server = true + node_id = "%[1]s" + node_name = "Node-%[1]s" + connect { + enabled = true + ca_config { + cluster_id = "%[2]s" + } + } + performance { + raft_multiplier = 1 + }`, nodeID, connect.TestClusterID, + ) +} + // Start starts a test agent. It returns an error if the agent could not be started. // If no error is returned, the caller must call Shutdown() when finished. -func (a *TestAgent) Start() (err error) { +func (a *TestAgent) Start(t *testing.T) (err error) { + t.Helper() if a.Agent != nil { return fmt.Errorf("TestAgent already started") } - var cleanupTmpDir = func() { - // Clean out the data dir if we are responsible for it before we - // try again, since the old ports may have gotten written to - // the data dir, such as in the Raft configuration. - if a.DataDir != "" { - if err := os.RemoveAll(a.DataDir); err != nil { - fmt.Printf("%s Error resetting data dir: %s", a.Name, err) - } - } + name := a.Name + if name == "" { + name = "TestAgent" } - var hclDataDir string if a.DataDir == "" { - name := "agent" - if a.Name != "" { - name = a.Name + "-agent" - } - name = strings.Replace(name, "/", "_", -1) - d, err := ioutil.TempDir(TempDir, name) - if err != nil { - return fmt.Errorf("Error creating data dir %s: %s", filepath.Join(TempDir, name), err) - } - // Convert windows style path to posix style path - // to avoid illegal char escape error when hcl - // parsing. - d = filepath.ToSlash(d) - hclDataDir = `data_dir = "` + d + `"` + dirname := name + "-agent" + a.DataDir = testutil.TempDir(t, dirname) } + // Convert windows style path to posix style path to avoid illegal char escape + // error when hcl parsing. + d := filepath.ToSlash(a.DataDir) + hclDataDir := fmt.Sprintf(`data_dir = "%s"`, d) logOutput := a.LogOutput if logOutput == nil { - logOutput = os.Stderr + logOutput = testutil.NewLogBuffer(t) } logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ - Name: a.Name, - Level: hclog.Debug, - Output: logOutput, + Level: hclog.Debug, + Output: logOutput, + TimeFormat: "04:05.000", + Name: name, }) portsConfig, returnPortsFn := randomPortsSource(a.UseTLS) - a.returnPortsFn = returnPortsFn - a.Config = TestConfig(logger, - portsConfig, - config.Source{Name: a.Name, Format: "hcl", Data: a.HCL}, - config.Source{Name: a.Name + ".data_dir", Format: "hcl", Data: hclDataDir}, - ) + t.Cleanup(returnPortsFn) - defer func() { - if err != nil && a.returnPortsFn != nil { - a.returnPortsFn() - a.returnPortsFn = nil - } - }() - - // write the keyring - if a.Key != "" { - writeKey := func(key, filename string) error { - path := filepath.Join(a.Config.DataDir, filename) - if err := initKeyring(path, key); err != nil { - cleanupTmpDir() - return fmt.Errorf("Error creating keyring %s: %s", path, err) - } - return nil - } - if err = writeKey(a.Key, SerfLANKeyring); err != nil { - cleanupTmpDir() - return err - } - if err = writeKey(a.Key, SerfWANKeyring); err != nil { - cleanupTmpDir() - return err - } - } + // Create NodeID outside the closure, so that it does not change + testHCLConfig := TestConfigHCL(NodeID()) + loader := func(source config.Source) (*config.RuntimeConfig, []string, error) { + opts := config.BuilderOpts{ + HCL: []string{testHCLConfig, portsConfig, a.HCL, hclDataDir}, + } + overrides := []config.Source{ + config.FileSource{ + Name: "test-overrides", + Format: "hcl", + Data: a.Overrides}, + config.DefaultConsulSource(), + config.DevConsulSource(), + } + cfg, warnings, err := config.Load(opts, source, overrides...) + if cfg != nil { + cfg.Telemetry.Disable = true + } + return cfg, warnings, err + } + bd, err := NewBaseDeps(loader, logOutput) + require.NoError(t, err) + + bd.Logger = logger + bd.MetricsHandler = metrics.NewInmemSink(1*time.Second, time.Minute) + a.Config = bd.RuntimeConfig - agent, err := New(a.Config, logger) + agent, err := New(bd) if err != nil { - cleanupTmpDir() return fmt.Errorf("Error creating agent: %s", err) } - agent.LogOutput = logOutput - agent.MemSink = metrics.NewInmemSink(1*time.Second, time.Minute) - id := string(a.Config.NodeID) - - if err := agent.Start(); err != nil { - cleanupTmpDir() + if err := agent.Start(context.Background()); err != nil { agent.ShutdownAgent() agent.ShutdownEndpoints() - return fmt.Errorf("%s %s Error starting agent: %s", id, a.Name, err) + return fmt.Errorf("%s %s Error starting agent: %s", id, name, err) } a.Agent = agent @@ -227,9 +214,9 @@ a.Agent.StartSync() if err := a.waitForUp(); err != nil { - cleanupTmpDir() a.Shutdown() - return err + t.Logf("Error while waiting for test agent to start: %v", err) + return errwrap.Wrapf(name+": {{err}}", err) } a.dns = a.dnsServers[0] @@ -247,7 +234,7 @@ var out structs.IndexedNodes for ; !time.Now().After(deadline); time.Sleep(timer.Wait) { if len(a.httpServers) == 0 { - retErr = fmt.Errorf("%s: waiting for server", a.Name) + retErr = fmt.Errorf("waiting for server") continue // fail, try again } if a.Config.Bootstrap && a.Config.ServerMode { @@ -264,11 +251,11 @@ continue // fail, try again } if !out.QueryMeta.KnownLeader { - retErr = fmt.Errorf("%s: No leader", a.Name) + retErr = fmt.Errorf("No leader") continue // fail, try again } if out.Index == 0 { - retErr = fmt.Errorf("%s: Consul index is 0", a.Name) + retErr = fmt.Errorf("Consul index is 0") continue // fail, try again } return nil // success @@ -276,8 +263,12 @@ req := httptest.NewRequest("GET", "/v1/agent/self", nil) resp := httptest.NewRecorder() _, err := a.httpServers[0].AgentSelf(resp, req) - if err != nil || resp.Code != 200 { - retErr = fmt.Errorf("%s: failed OK response: %v", a.Name, err) + if acl.IsErrPermissionDenied(err) || resp.Code == 403 { + // permission denied is enough to show that the client is + // connected to the servers as it would get a 503 if + // it couldn't connect to them. + } else if err != nil && resp.Code != 200 { + retErr = fmt.Errorf("failed OK response: %v", err) continue } return nil // success @@ -305,14 +296,6 @@ return nil } - // Return ports last of all - defer func() { - if a.returnPortsFn != nil { - a.returnPortsFn() - a.returnPortsFn = nil - } - }() - // shutdown agent before endpoints defer a.Agent.ShutdownEndpoints() if err := a.Agent.ShutdownAgent(); err != nil { @@ -361,8 +344,11 @@ } } +// FIXME: this should t.Fatal on error, not panic. +// TODO: rename to newConsulConfig +// TODO: remove TestAgent receiver, accept a.Agent.config as an arg func (a *TestAgent) consulConfig() *consul.Config { - c, err := a.Agent.consulConfig() + c, err := newConsulConfig(a.Agent.config, a.Agent.logger) if err != nil { panic(err) } @@ -377,8 +363,8 @@ // chance of port conflicts for concurrently executed test binaries. // Instead of relying on one set of ports to be sufficient we retry // starting the agent with different ports on port conflict. -func randomPortsSource(tls bool) (src config.Source, returnPortsFn func()) { - ports := freeport.MustTake(6) +func randomPortsSource(tls bool) (data string, returnPortsFn func()) { + ports := freeport.MustTake(7) var http, https int if tls { @@ -389,20 +375,17 @@ https = -1 } - return config.Source{ - Name: "ports", - Format: "hcl", - Data: ` - ports = { - dns = ` + strconv.Itoa(ports[0]) + ` - http = ` + strconv.Itoa(http) + ` - https = ` + strconv.Itoa(https) + ` - serf_lan = ` + strconv.Itoa(ports[3]) + ` - serf_wan = ` + strconv.Itoa(ports[4]) + ` - server = ` + strconv.Itoa(ports[5]) + ` - } - `, - }, func() { freeport.Return(ports) } + return ` + ports = { + dns = ` + strconv.Itoa(ports[0]) + ` + http = ` + strconv.Itoa(http) + ` + https = ` + strconv.Itoa(https) + ` + serf_lan = ` + strconv.Itoa(ports[3]) + ` + serf_wan = ` + strconv.Itoa(ports[4]) + ` + server = ` + strconv.Itoa(ports[5]) + ` + grpc = ` + strconv.Itoa(ports[6]) + ` + } + `, func() { freeport.Return(ports) } } func NodeID() string { @@ -417,7 +400,7 @@ // agent. func TestConfig(logger hclog.Logger, sources ...config.Source) *config.RuntimeConfig { nodeID := NodeID() - testsrc := config.Source{ + testsrc := config.FileSource{ Name: "test", Format: "hcl", Data: ` @@ -440,7 +423,7 @@ `, } - b, err := config.NewBuilder(config.Flags{}) + b, err := config.NewBuilder(config.BuilderOpts{}) if err != nil { panic("NewBuilder failed: " + err.Error()) } @@ -474,7 +457,6 @@ acl_master_token = "root" acl_agent_token = "root" acl_agent_master_token = "towel" - acl_enforce_version_8 = true ` } @@ -523,34 +505,34 @@ } var aclConfigTpl = template.Must(template.New("ACL Config").Parse(` - {{if ne .PrimaryDatacenter ""}} + {{- if ne .PrimaryDatacenter "" -}} primary_datacenter = "{{ .PrimaryDatacenter }}" - {{end}} + {{end -}} acl { enabled = true - {{if ne .DefaultPolicy ""}} + {{- if ne .DefaultPolicy ""}} default_policy = "{{ .DefaultPolicy }}" - {{end}} + {{- end}} enable_token_replication = {{printf "%t" .EnableTokenReplication }} - {{if .HasConfiguredTokens }} + {{- if .HasConfiguredTokens}} tokens { - {{if ne .MasterToken ""}} + {{- if ne .MasterToken ""}} master = "{{ .MasterToken }}" - {{end}} - {{if ne .AgentToken ""}} + {{- end}} + {{- if ne .AgentToken ""}} agent = "{{ .AgentToken }}" - {{end}} - {{if ne .AgentMasterToken "" }} + {{- end}} + {{- if ne .AgentMasterToken "" }} agent_master = "{{ .AgentMasterToken }}" - {{end}} - {{if ne .DefaultToken "" }} + {{- end}} + {{- if ne .DefaultToken "" }} default = "{{ .DefaultToken }}" - {{end}} - {{if ne .ReplicationToken "" }} + {{- end}} + {{- if ne .ReplicationToken "" }} replication = "{{ .ReplicationToken }}" - {{end}} + {{- end}} } - {{end}} + {{- end}} } `)) @@ -569,3 +551,43 @@ return buf.String() } + +// testTLSCertificates Generates a TLS CA and server key/cert and returns them +// in PEM encoded form. +func testTLSCertificates(serverName string) (cert string, key string, cacert string, err error) { + // generate CA + serial, err := tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + signer, err := ecdsa.GenerateKey(elliptic.P256(), rand.New(rand.NewSource(99))) + if err != nil { + return "", "", "", err + } + ca, err := tlsutil.GenerateCA(signer, serial, 365, nil) + if err != nil { + return "", "", "", err + } + + // generate leaf + serial, err = tlsutil.GenerateSerialNumber() + if err != nil { + return "", "", "", err + } + + cert, privateKey, err := tlsutil.GenerateCert( + signer, + ca, + serial, + "Test Cert Name", + 365, + []string{serverName}, + nil, + []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + ) + if err != nil { + return "", "", "", err + } + + return cert, privateKey, ca, nil +} diff -Nru consul-1.7.4+dfsg1/agent/testagent_test.go consul-1.8.7+dfsg1/agent/testagent_test.go --- consul-1.7.4+dfsg1/agent/testagent_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/testagent_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ t.Run("", func(t *testing.T) { t.Parallel() var c config.Config - data := config.DefaultSource().Data + data := config.DefaultSource().(config.FileSource).Data hcl.Decode(&c, data) hcl.Decode(&c, data) hcl.Decode(&c, data) diff -Nru consul-1.7.4+dfsg1/agent/token/store.go consul-1.8.7+dfsg1/agent/token/store.go --- consul-1.7.4+dfsg1/agent/token/store.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/token/store.go 2020-12-10 21:46:52.000000000 +0000 @@ -13,6 +13,28 @@ TokenSourceAPI TokenSource = true ) +type TokenKind int + +const ( + TokenKindAgent TokenKind = iota + TokenKindAgentMaster + TokenKindUser + TokenKindReplication +) + +type watcher struct { + kind TokenKind + ch chan<- struct{} +} + +// Notifier holds the channel used to notify a watcher +// of token updates as well as some internal tracking +// information to allow for deregistering the notifier. +type Notifier struct { + id int + Ch <-chan struct{} +} + // Store is used to hold the special ACL tokens used by Consul agents. It is // designed to update the tokens on the fly, so the token store itself should be // plumbed around and used to get tokens at runtime, don't save the resulting @@ -52,10 +74,86 @@ // replicationTokenSource indicates where this token originated from replicationTokenSource TokenSource + watchers map[int]watcher + watcherIndex int + // enterpriseTokens contains tokens only used in consul-enterprise enterpriseTokens } +// Notify will set up a watch for when tokens of the desired kind is changed +func (t *Store) Notify(kind TokenKind) Notifier { + // buffering ensures that notifications aren't missed if the watcher + // isn't already in a select and that our notifications don't + // block returning from the Update* methods. + ch := make(chan struct{}, 1) + + w := watcher{ + kind: kind, + ch: ch, + } + + t.l.Lock() + defer t.l.Unlock() + if t.watchers == nil { + t.watchers = make(map[int]watcher) + } + // we specifically want to avoid the zero-value to prevent accidental stop-notification requests + t.watcherIndex += 1 + t.watchers[t.watcherIndex] = w + + return Notifier{id: t.watcherIndex, Ch: ch} +} + +// StopNotify stops the token store from sending notifications to the specified notifiers chan +func (t *Store) StopNotify(n Notifier) { + t.l.Lock() + defer t.l.Unlock() + delete(t.watchers, n.id) +} + +// anyKindAllowed returns true if any of the kinds in the `check` list are +// set to be allowed in the `allowed` map. +// +// Note: this is mostly just a convenience to simplify the code in +// sendNotificationLocked and prevent more nested looping with breaks/continues +// and other state tracking. +func anyKindAllowed(allowed TokenKind, check []TokenKind) bool { + for _, kind := range check { + if allowed == kind { + return true + } + } + return false +} + +// sendNotificationLocked will iterate through all watchers and notify them that a +// token they are watching has been updated. +// +// NOTE: this function explicitly does not attempt to send the kind or new token value +// along through the channel. With that approach watchers could potentially miss updates +// if the buffered chan fills up. Instead with this approach we just notify that any +// token they care about has been udpated and its up to the caller to retrieve the +// new value (after receiving from the chan). With this approach its entirely possible +// for the watcher to be notified twice before actually retrieving the token after the first +// read from the chan. This is better behavior than missing events. It can cause some +// churn temporarily but in common cases its not expected that these tokens would be updated +// frequently enough to cause this to happen. +func (t *Store) sendNotificationLocked(kinds ...TokenKind) { + for _, watcher := range t.watchers { + if !anyKindAllowed(watcher.kind, kinds) { + // ignore this watcher as it doesn't want events for these kinds of token + continue + } + + select { + case watcher.ch <- struct{}{}: + default: + // its already pending a notification + } + } +} + // UpdateUserToken replaces the current user token in the store. // Returns true if it was changed. func (t *Store) UpdateUserToken(token string, source TokenSource) bool { @@ -63,6 +161,9 @@ changed := (t.userToken != token || t.userTokenSource != source) t.userToken = token t.userTokenSource = source + if changed { + t.sendNotificationLocked(TokenKindUser) + } t.l.Unlock() return changed } @@ -74,6 +175,9 @@ changed := (t.agentToken != token || t.agentTokenSource != source) t.agentToken = token t.agentTokenSource = source + if changed { + t.sendNotificationLocked(TokenKindAgent) + } t.l.Unlock() return changed } @@ -85,6 +189,9 @@ changed := (t.agentMasterToken != token || t.agentMasterTokenSource != source) t.agentMasterToken = token t.agentMasterTokenSource = source + if changed { + t.sendNotificationLocked(TokenKindAgentMaster) + } t.l.Unlock() return changed } @@ -96,6 +203,9 @@ changed := (t.replicationToken != token || t.replicationTokenSource != source) t.replicationToken = token t.replicationTokenSource = source + if changed { + t.sendNotificationLocked(TokenKindReplication) + } t.l.Unlock() return changed } diff -Nru consul-1.7.4+dfsg1/agent/token/store_test.go consul-1.8.7+dfsg1/agent/token/store_test.go --- consul-1.7.4+dfsg1/agent/token/store_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/token/store_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -150,3 +150,94 @@ s.UpdateAgentMasterToken("", TokenSourceConfig) verify(false, "", "nope", "master", "another") } + +func TestStore_Notify(t *testing.T) { + t.Parallel() + s := new(Store) + + newNotification := func(t *testing.T, s *Store, kind TokenKind) Notifier { + n := s.Notify(kind) + require.NotNil(t, n.Ch) + return n + } + + requireNotNotified := func(t *testing.T, ch <-chan struct{}) { + require.Empty(t, ch) + } + + requireNotifiedOnce := func(t *testing.T, ch <-chan struct{}) { + require.Len(t, ch, 1) + // drain the channel + <-ch + // just to be safe + require.Empty(t, ch) + } + + agentNotifier := newNotification(t, s, TokenKindAgent) + userNotifier := newNotification(t, s, TokenKindUser) + agentMasterNotifier := newNotification(t, s, TokenKindAgentMaster) + replicationNotifier := newNotification(t, s, TokenKindReplication) + replicationNotifier2 := newNotification(t, s, TokenKindReplication) + + // perform an update of the user token + require.True(t, s.UpdateUserToken("edcae2a2-3b51-4864-b412-c7a568f49cb1", TokenSourceConfig)) + // do it again to ensure it doesn't block even though nothing has read from the 1 buffered chan yet + require.True(t, s.UpdateUserToken("47788919-f944-476a-bda5-446d64be1df8", TokenSourceAPI)) + + // ensure notifications were sent to the user and all notifiers + requireNotNotified(t, agentNotifier.Ch) + requireNotifiedOnce(t, userNotifier.Ch) + requireNotNotified(t, replicationNotifier.Ch) + requireNotNotified(t, agentMasterNotifier.Ch) + requireNotNotified(t, replicationNotifier2.Ch) + + // now update the agent token which should send notificaitons to the agent and all notifier + require.True(t, s.UpdateAgentToken("5d748ec2-d536-461f-8e2a-1f7eae98d559", TokenSourceAPI)) + + requireNotifiedOnce(t, agentNotifier.Ch) + requireNotNotified(t, userNotifier.Ch) + requireNotNotified(t, replicationNotifier.Ch) + requireNotNotified(t, agentMasterNotifier.Ch) + requireNotNotified(t, replicationNotifier2.Ch) + + // now update the agent master token which should send notificaitons to the agent master and all notifier + require.True(t, s.UpdateAgentMasterToken("789badc8-f850-43e1-8742-9b9f484957cc", TokenSourceAPI)) + + requireNotNotified(t, agentNotifier.Ch) + requireNotNotified(t, userNotifier.Ch) + requireNotNotified(t, replicationNotifier.Ch) + requireNotifiedOnce(t, agentMasterNotifier.Ch) + requireNotNotified(t, replicationNotifier2.Ch) + + // now update the replication token which should send notificaitons to the replication and all notifier + require.True(t, s.UpdateReplicationToken("789badc8-f850-43e1-8742-9b9f484957cc", TokenSourceAPI)) + + requireNotNotified(t, agentNotifier.Ch) + requireNotNotified(t, userNotifier.Ch) + requireNotifiedOnce(t, replicationNotifier.Ch) + requireNotNotified(t, agentMasterNotifier.Ch) + requireNotifiedOnce(t, replicationNotifier2.Ch) + + s.StopNotify(replicationNotifier2) + + // now update the replication token which should send notificaitons to the replication and all notifier + require.True(t, s.UpdateReplicationToken("eb0b56b9-fa65-4ae1-902a-c64457c62ac6", TokenSourceAPI)) + + requireNotNotified(t, agentNotifier.Ch) + requireNotNotified(t, userNotifier.Ch) + requireNotifiedOnce(t, replicationNotifier.Ch) + requireNotNotified(t, agentMasterNotifier.Ch) + requireNotNotified(t, replicationNotifier2.Ch) + + // request updates but that are not changes + require.False(t, s.UpdateAgentToken("5d748ec2-d536-461f-8e2a-1f7eae98d559", TokenSourceAPI)) + require.False(t, s.UpdateAgentMasterToken("789badc8-f850-43e1-8742-9b9f484957cc", TokenSourceAPI)) + require.False(t, s.UpdateUserToken("47788919-f944-476a-bda5-446d64be1df8", TokenSourceAPI)) + require.False(t, s.UpdateReplicationToken("eb0b56b9-fa65-4ae1-902a-c64457c62ac6", TokenSourceAPI)) + + // ensure that notifications were not sent + requireNotNotified(t, agentNotifier.Ch) + requireNotNotified(t, userNotifier.Ch) + requireNotNotified(t, replicationNotifier.Ch) + requireNotNotified(t, agentMasterNotifier.Ch) +} diff -Nru consul-1.7.4+dfsg1/agent/txn_endpoint_test.go consul-1.8.7+dfsg1/agent/txn_endpoint_test.go --- consul-1.7.4+dfsg1/agent/txn_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/txn_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,7 +19,7 @@ func TestTxnEndpoint_Bad_JSON(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() buf := bytes.NewBuffer([]byte("{")) @@ -66,25 +66,25 @@ } t.Run("exceeds default limits", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") testIt(t, a, false) a.Shutdown() }) t.Run("exceeds configured max txn len", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "limits = { txn_max_req_len = 700000 }") + a := NewTestAgent(t, "limits = { txn_max_req_len = 700000 }") testIt(t, a, false) a.Shutdown() }) t.Run("exceeds default max kv value size", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "limits = { txn_max_req_len = 123456789 }") + a := NewTestAgent(t, "limits = { txn_max_req_len = 123456789 }") testIt(t, a, false) a.Shutdown() }) t.Run("allowed", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` limits = { txn_max_req_len = 123456789 kv_max_value_size = 123456789 @@ -139,25 +139,25 @@ } t.Run("exceeds default limits", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") testIt(a, false) a.Shutdown() }) t.Run("exceeds configured max txn len", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "limits = { txn_max_req_len = 700000 }") + a := NewTestAgent(t, "limits = { txn_max_req_len = 700000 }") testIt(a, false) a.Shutdown() }) t.Run("exceeds default max kv value size", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "limits = { txn_max_req_len = 123456789 }") + a := NewTestAgent(t, "limits = { txn_max_req_len = 123456789 }") testIt(a, false) a.Shutdown() }) t.Run("allowed", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` limits = { txn_max_req_len = 123456789 kv_max_value_size = 123456789 @@ -167,7 +167,7 @@ }) t.Run("allowed kv max backward compatible", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "limits = { kv_max_value_size = 123456789 }") + a := NewTestAgent(t, "limits = { kv_max_value_size = 123456789 }") testIt(a, true) a.Shutdown() }) @@ -175,7 +175,7 @@ func TestTxnEndpoint_Bad_Size_Ops(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() buf := bytes.NewBuffer([]byte(fmt.Sprintf(` @@ -203,7 +203,7 @@ func TestTxnEndpoint_KV_Actions(t *testing.T) { t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -446,7 +446,7 @@ // Verify an error inside a transaction. t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() buf := bytes.NewBuffer([]byte(` @@ -483,7 +483,7 @@ func TestTxnEndpoint_UpdateCheck(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/agent/ui_endpoint.go consul-1.8.7+dfsg1/agent/ui_endpoint.go --- consul-1.7.4+dfsg1/agent/ui_endpoint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/ui_endpoint.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ "sort" "strings" + "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" ) @@ -15,17 +16,27 @@ // to extract this. const metaExternalSource = "external-source" +type GatewayConfig struct { + Addresses []string `json:",omitempty"` + // internal to track uniqueness + addressesSet map[string]struct{} +} + // ServiceSummary is used to summarize a service type ServiceSummary struct { Kind structs.ServiceKind `json:",omitempty"` Name string Tags []string Nodes []string + InstanceCount int + ProxyFor []string `json:",omitempty"` + proxyForSet map[string]struct{} // internal to track uniqueness ChecksPassing int ChecksWarning int ChecksCritical int ExternalSources []string externalSourceSet map[string]struct{} // internal to track uniqueness + GatewayConfig GatewayConfig `json:",omitempty"` structs.EnterpriseMeta } @@ -152,10 +163,46 @@ } // Generate the summary - return summarizeServices(out.Nodes), nil + // TODO (gateways) (freddy) Have Internal.ServiceDump return ServiceDump instead. Need to add bexpr filtering for type. + return summarizeServices(out.Nodes.ToServiceDump(), s.agent.config, args.Datacenter), nil +} + +// UIGatewayServices is used to query all the nodes for services associated with a gateway along with their gateway config +func (s *HTTPServer) UIGatewayServicesNodes(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + // Parse arguments + args := structs.ServiceSpecificRequest{} + if err := s.parseEntMetaNoWildcard(req, &args.EnterpriseMeta); err != nil { + return nil, err + } + if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done { + return nil, nil + } + + // Pull out the service name + args.ServiceName = strings.TrimPrefix(req.URL.Path, "/v1/internal/ui/gateway-services-nodes/") + if args.ServiceName == "" { + resp.WriteHeader(http.StatusBadRequest) + fmt.Fprint(resp, "Missing gateway name") + return nil, nil + } + + // Make the RPC request + var out structs.IndexedServiceDump + defer setMeta(resp, &out.QueryMeta) +RPC: + if err := s.agent.RPC("Internal.GatewayServiceDump", &args, &out); err != nil { + // Retry the request allowing stale data if no leader + if strings.Contains(err.Error(), structs.ErrNoLeader.Error()) && !args.AllowStale { + args.AllowStale = true + goto RPC + } + return nil, err + } + + return summarizeServices(out.Dump, s.agent.config, args.Datacenter), nil } -func summarizeServices(dump structs.CheckServiceNodes) []*ServiceSummary { +func summarizeServices(dump structs.ServiceDump, cfg *config.RuntimeConfig, datacenter string) []*ServiceSummary { // Collect the summary information var services []structs.ServiceID summary := make(map[structs.ServiceID]*ServiceSummary) @@ -165,6 +212,9 @@ serv = &ServiceSummary{ Name: service.ID, EnterpriseMeta: service.EnterpriseMeta, + // the other code will increment this unconditionally so we + // shouldn't initialize it to 1 + InstanceCount: 0, } summary[service] = serv services = append(services, service) @@ -172,13 +222,33 @@ return serv } - var sid structs.ServiceID for _, csn := range dump { - svc := csn.Service - sid.Init(svc.Service, &svc.EnterpriseMeta) + if csn.GatewayService != nil { + gwsvc := csn.GatewayService + sum := getService(gwsvc.Service.ToServiceID()) + modifySummaryForGatewayService(cfg, datacenter, sum, gwsvc) + } + + // Will happen in cases where we only have the GatewayServices mapping + if csn.Service == nil { + continue + } + sid := structs.NewServiceID(csn.Service.Service, &csn.Service.EnterpriseMeta) sum := getService(sid) + + svc := csn.Service sum.Nodes = append(sum.Nodes, csn.Node.Node) sum.Kind = svc.Kind + sum.InstanceCount += 1 + if svc.Kind == structs.ServiceKindConnectProxy { + if _, ok := sum.proxyForSet[svc.Proxy.DestinationServiceName]; !ok { + if sum.proxyForSet == nil { + sum.proxyForSet = make(map[string]struct{}) + } + sum.proxyForSet[svc.Proxy.DestinationServiceName] = struct{}{} + sum.ProxyFor = append(sum.ProxyFor, svc.Proxy.DestinationServiceName) + } + } for _, tag := range svc.Tags { found := false for _, existing := range sum.Tags { @@ -226,10 +296,47 @@ }) output := make([]*ServiceSummary, len(summary)) for idx, service := range services { - // Sort the nodes + // Sort the nodes and tags sum := summary[service] sort.Strings(sum.Nodes) + sort.Strings(sum.Tags) output[idx] = sum } return output } + +func modifySummaryForGatewayService( + cfg *config.RuntimeConfig, + datacenter string, + sum *ServiceSummary, + gwsvc *structs.GatewayService, +) { + var dnsAddresses []string + for _, domain := range []string{cfg.DNSDomain, cfg.DNSAltDomain} { + // If the domain is empty, do not use it to construct a valid DNS + // address + if domain == "" { + continue + } + dnsAddresses = append(dnsAddresses, serviceIngressDNSName( + gwsvc.Service.Name, + datacenter, + domain, + &gwsvc.Service.EnterpriseMeta, + )) + } + + for _, addr := range gwsvc.Addresses(dnsAddresses) { + // check for duplicates, a service will have a ServiceInfo struct for + // every instance that is registered. + if _, ok := sum.GatewayConfig.addressesSet[addr]; !ok { + if sum.GatewayConfig.addressesSet == nil { + sum.GatewayConfig.addressesSet = make(map[string]struct{}) + } + sum.GatewayConfig.addressesSet[addr] = struct{}{} + sum.GatewayConfig.Addresses = append( + sum.GatewayConfig.Addresses, addr, + ) + } + } +} diff -Nru consul-1.7.4+dfsg1/agent/ui_endpoint_test.go consul-1.8.7+dfsg1/agent/ui_endpoint_test.go --- consul-1.7.4+dfsg1/agent/ui_endpoint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/ui_endpoint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,12 +12,13 @@ "path/filepath" "testing" - "github.com/hashicorp/consul/testrpc" - + "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/testrpc" cleanhttp "github.com/hashicorp/go-cleanhttp" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -28,7 +29,7 @@ defer os.RemoveAll(uiDir) // Make the server - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` ui_dir = "`+uiDir+`" `) defer a.Shutdown() @@ -36,7 +37,7 @@ // Create file path := filepath.Join(a.Config.UIDir, "my-file") - if err := ioutil.WriteFile(path, []byte("test"), 777); err != nil { + if err := ioutil.WriteFile(path, []byte("test"), 0777); err != nil { t.Fatalf("err: %v", err) } @@ -51,6 +52,7 @@ if err != nil { t.Fatalf("err: %v", err) } + defer resp.Body.Close() // Verify the response if resp.StatusCode != 200 { @@ -67,7 +69,7 @@ func TestUiNodes(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -105,7 +107,7 @@ func TestUiNodes_Filter(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -147,17 +149,15 @@ func TestUiNodeInfo(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") req, _ := http.NewRequest("GET", fmt.Sprintf("/v1/internal/ui/node/%s", a.Config.NodeName), nil) resp := httptest.NewRecorder() obj, err := a.srv.UINodeInfo(resp, req) - if err != nil { - t.Fatalf("err: %v", err) - } - + require.NoError(t, err) + require.Equal(t, resp.Code, http.StatusOK) assertIndex(t, resp) // Should be 1 node for the server @@ -197,7 +197,7 @@ func TestUiServices(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -314,6 +314,7 @@ // internal accounting that users don't see can be blown away for _, sum := range summary { sum.externalSourceSet = nil + sum.proxyForSet = nil } expected := []*ServiceSummary{ @@ -322,6 +323,7 @@ Name: "api", Tags: []string{"tag1", "tag2"}, Nodes: []string{"foo"}, + InstanceCount: 1, ChecksPassing: 2, ChecksWarning: 1, ChecksCritical: 0, @@ -332,6 +334,7 @@ Name: "cache", Tags: nil, Nodes: []string{"zip"}, + InstanceCount: 1, ChecksPassing: 0, ChecksWarning: 0, ChecksCritical: 0, @@ -342,6 +345,8 @@ Name: "web", Tags: nil, Nodes: []string{"bar", "foo"}, + InstanceCount: 2, + ProxyFor: []string{"api"}, ChecksPassing: 2, ChecksWarning: 1, ChecksCritical: 1, @@ -353,6 +358,7 @@ Name: "consul", Tags: nil, Nodes: []string{a.Config.NodeName}, + InstanceCount: 1, ChecksPassing: 1, ChecksWarning: 0, ChecksCritical: 0, @@ -377,6 +383,7 @@ // internal accounting that users don't see can be blown away for _, sum := range summary { sum.externalSourceSet = nil + sum.proxyForSet = nil } expected := []*ServiceSummary{ @@ -385,6 +392,7 @@ Name: "api", Tags: []string{"tag1", "tag2"}, Nodes: []string{"foo"}, + InstanceCount: 1, ChecksPassing: 2, ChecksWarning: 1, ChecksCritical: 0, @@ -395,6 +403,8 @@ Name: "web", Tags: nil, Nodes: []string{"bar", "foo"}, + InstanceCount: 2, + ProxyFor: []string{"api"}, ChecksPassing: 2, ChecksWarning: 1, ChecksCritical: 1, @@ -405,3 +415,297 @@ require.ElementsMatch(t, expected, summary) }) } + +func TestUIGatewayServiceNodes_Terminating(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, "") + defer a.Shutdown() + + // Register terminating gateway and a service that will be associated with it + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "terminating-gateway", + Service: "terminating-gateway", + Kind: structs.ServiceKindTerminatingGateway, + Port: 443, + }, + Check: &structs.HealthCheck{ + Name: "terminating connect", + Status: api.HealthPassing, + ServiceID: "terminating-gateway", + }, + } + var regOutput struct{} + require.NoError(t, a.RPC("Catalog.Register", &arg, ®Output)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + Tags: []string{"primary"}, + }, + Check: &structs.HealthCheck{ + Name: "db-warning", + Status: api.HealthWarning, + ServiceID: "db", + }, + } + require.NoError(t, a.RPC("Catalog.Register", &arg, ®Output)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "baz", + Address: "127.0.0.3", + Service: &structs.NodeService{ + ID: "db2", + Service: "db", + Tags: []string{"backup"}, + }, + Check: &structs.HealthCheck{ + Name: "db2-passing", + Status: api.HealthPassing, + ServiceID: "db2", + }, + } + require.NoError(t, a.RPC("Catalog.Register", &arg, ®Output)) + + // Register terminating-gateway config entry, linking it to db and redis (does not exist) + args := &structs.TerminatingGatewayConfigEntry{ + Name: "terminating-gateway", + Kind: structs.TerminatingGateway, + Services: []structs.LinkedService{ + { + Name: "db", + }, + { + Name: "redis", + CAFile: "/etc/certs/ca.pem", + CertFile: "/etc/certs/cert.pem", + KeyFile: "/etc/certs/key.pem", + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + } + var configOutput bool + require.NoError(t, a.RPC("ConfigEntry.Apply", &req, &configOutput)) + require.True(t, configOutput) + } + + // Request + req, _ := http.NewRequest("GET", "/v1/internal/ui/gateway-services-nodes/terminating-gateway", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.UIGatewayServicesNodes(resp, req) + assert.Nil(t, err) + assertIndex(t, resp) + + dump := obj.([]*ServiceSummary) + expect := []*ServiceSummary{ + { + Name: "redis", + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + { + Name: "db", + Tags: []string{"backup", "primary"}, + Nodes: []string{"bar", "baz"}, + InstanceCount: 2, + ChecksPassing: 1, + ChecksWarning: 1, + ChecksCritical: 0, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + } + assert.ElementsMatch(t, expect, dump) +} + +func TestUIGatewayServiceNodes_Ingress(t *testing.T) { + t.Parallel() + + a := NewTestAgent(t, `alt_domain = "alt.consul."`) + defer a.Shutdown() + + // Register ingress gateway and a service that will be associated with it + { + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "ingress-gateway", + Service: "ingress-gateway", + Kind: structs.ServiceKindIngressGateway, + Port: 8443, + }, + Check: &structs.HealthCheck{ + Name: "ingress connect", + Status: api.HealthPassing, + ServiceID: "ingress-gateway", + }, + } + var regOutput struct{} + require.NoError(t, a.RPC("Catalog.Register", &arg, ®Output)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + Tags: []string{"primary"}, + }, + Check: &structs.HealthCheck{ + Name: "db-warning", + Status: api.HealthWarning, + ServiceID: "db", + }, + } + require.NoError(t, a.RPC("Catalog.Register", &arg, ®Output)) + + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "baz", + Address: "127.0.0.3", + Service: &structs.NodeService{ + ID: "db2", + Service: "db", + Tags: []string{"backup"}, + }, + Check: &structs.HealthCheck{ + Name: "db2-passing", + Status: api.HealthPassing, + ServiceID: "db2", + }, + } + require.NoError(t, a.RPC("Catalog.Register", &arg, ®Output)) + + // Set web protocol to http + svcDefaultsReq := structs.ConfigEntryRequest{ + Datacenter: "dc1", + Entry: &structs.ServiceConfigEntry{ + Name: "web", + Protocol: "http", + }, + } + var configOutput bool + require.NoError(t, a.RPC("ConfigEntry.Apply", &svcDefaultsReq, &configOutput)) + require.True(t, configOutput) + + // Register ingress-gateway config entry, linking it to db and redis (does not exist) + args := &structs.IngressGatewayConfigEntry{ + Name: "ingress-gateway", + Kind: structs.IngressGateway, + Listeners: []structs.IngressListener{ + { + Port: 8888, + Protocol: "tcp", + Services: []structs.IngressService{ + { + Name: "db", + }, + }, + }, + { + Port: 8080, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "web", + }, + }, + }, + { + Port: 8081, + Protocol: "http", + Services: []structs.IngressService{ + { + Name: "web", + Hosts: []string{"*.test.example.com"}, + }, + }, + }, + }, + } + + req := structs.ConfigEntryRequest{ + Op: structs.ConfigEntryUpsert, + Datacenter: "dc1", + Entry: args, + } + require.NoError(t, a.RPC("ConfigEntry.Apply", &req, &configOutput)) + require.True(t, configOutput) + } + + // Request + req, _ := http.NewRequest("GET", "/v1/internal/ui/gateway-services-nodes/ingress-gateway", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.UIGatewayServicesNodes(resp, req) + assert.Nil(t, err) + assertIndex(t, resp) + + // Construct expected addresses so that differences between OSS/Ent are handled by code + webDNS := serviceIngressDNSName("web", "dc1", "consul.", structs.DefaultEnterpriseMeta()) + webDNSAlt := serviceIngressDNSName("web", "dc1", "alt.consul.", structs.DefaultEnterpriseMeta()) + dbDNS := serviceIngressDNSName("db", "dc1", "consul.", structs.DefaultEnterpriseMeta()) + dbDNSAlt := serviceIngressDNSName("db", "dc1", "alt.consul.", structs.DefaultEnterpriseMeta()) + + dump := obj.([]*ServiceSummary) + expect := []*ServiceSummary{ + { + Name: "web", + GatewayConfig: GatewayConfig{ + Addresses: []string{ + fmt.Sprintf("%s:8080", webDNS), + fmt.Sprintf("%s:8080", webDNSAlt), + "*.test.example.com:8081", + }, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + { + Name: "db", + Tags: []string{"backup", "primary"}, + Nodes: []string{"bar", "baz"}, + InstanceCount: 2, + ChecksPassing: 1, + ChecksWarning: 1, + ChecksCritical: 0, + GatewayConfig: GatewayConfig{ + Addresses: []string{ + fmt.Sprintf("%s:8888", dbDNS), + fmt.Sprintf("%s:8888", dbDNSAlt), + }, + }, + EnterpriseMeta: *structs.DefaultEnterpriseMeta(), + }, + } + + // internal accounting that users don't see can be blown away + for _, sum := range dump { + sum.GatewayConfig.addressesSet = nil + } + assert.ElementsMatch(t, expect, dump) +} + +func TestUIEndpoint_modifySummaryForGatewayService_UseRequestedDCInsteadOfConfigured(t *testing.T) { + dc := "dc2" + cfg := config.RuntimeConfig{Datacenter: "dc1", DNSDomain: "consul"} + sum := ServiceSummary{GatewayConfig: GatewayConfig{}} + gwsvc := structs.GatewayService{Service: structs.ServiceName{Name: "test"}, Port: 42} + modifySummaryForGatewayService(&cfg, dc, &sum, &gwsvc) + expected := serviceCanonicalDNSName("test", "ingress", "dc2", "consul", nil) + ":42" + require.Equal(t, expected, sum.GatewayConfig.Addresses[0]) +} diff -Nru consul-1.7.4+dfsg1/agent/user_event_test.go consul-1.8.7+dfsg1/agent/user_event_test.go --- consul-1.7.4+dfsg1/agent/user_event_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/user_event_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,13 +48,13 @@ func TestShouldProcessUserEvent(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() srv1 := &structs.NodeService{ ID: "mysql", Service: "mysql", - Tags: []string{"test", "foo", "bar", "master"}, + Tags: []string{"test", "foo", "bar", "primary"}, Port: 5000, } a.State.AddService(srv1, "") @@ -99,7 +99,7 @@ // Bad tag name p = &UserEvent{ ServiceFilter: ".*sql", - TagFilter: "slave", + TagFilter: "replica", } if a.shouldProcessUserEvent(p) { t.Fatalf("bad") @@ -108,7 +108,7 @@ // Good service name p = &UserEvent{ ServiceFilter: ".*sql", - TagFilter: "master", + TagFilter: "primary", } if !a.shouldProcessUserEvent(p) { t.Fatalf("bad") @@ -117,7 +117,7 @@ func TestIngestUserEvent(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() for i := 0; i < 512; i++ { @@ -148,13 +148,13 @@ func TestFireReceiveEvent(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() srv1 := &structs.NodeService{ ID: "mysql", Service: "mysql", - Tags: []string{"test", "foo", "bar", "master"}, + Tags: []string{"test", "foo", "bar", "primary"}, Port: 5000, } a.State.AddService(srv1, "") @@ -184,7 +184,7 @@ func TestUserEventToken(t *testing.T) { t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` acl_default_policy = "deny" `) defer a.Shutdown() diff -Nru consul-1.7.4+dfsg1/agent/util_test.go consul-1.8.7+dfsg1/agent/util_test.go --- consul-1.7.4+dfsg1/agent/util_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/util_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -165,7 +165,7 @@ defer os.Exit(0) args = args[1:] // strip sentinel value - cmd, args := args[0], args[1:] + cmd := args[0] switch cmd { case "parent-signal": @@ -202,7 +202,7 @@ limitProcessLifetime(2 * time.Minute) ch := make(chan os.Signal, 10) - signal.Notify(ch) + signal.Notify(ch, forwardSignals...) defer signal.Stop(ch) fmt.Fprintf(os.Stdout, "ready\n") diff -Nru consul-1.7.4+dfsg1/agent/watch_handler.go consul-1.8.7+dfsg1/agent/watch_handler.go --- consul-1.7.4+dfsg1/agent/watch_handler.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/watch_handler.go 2020-12-10 21:46:52.000000000 +0000 @@ -184,3 +184,59 @@ } return fn } + +// TODO: return a fully constructed watch.Plan with a Plan.Handler, so that Exempt +// can be ignored by the caller. +func makeWatchPlan(logger hclog.Logger, params map[string]interface{}) (*watch.Plan, error) { + wp, err := watch.ParseExempt(params, []string{"handler", "args"}) + if err != nil { + return nil, fmt.Errorf("Failed to parse watch (%#v): %v", params, err) + } + + handler, hasHandler := wp.Exempt["handler"] + if hasHandler { + logger.Warn("The 'handler' field in watches has been deprecated " + + "and replaced with the 'args' field. See https://www.consul.io/docs/agent/watches.html") + } + if _, ok := handler.(string); hasHandler && !ok { + return nil, fmt.Errorf("Watch handler must be a string") + } + + args, hasArgs := wp.Exempt["args"] + if hasArgs { + wp.Exempt["args"], err = parseWatchArgs(args) + if err != nil { + return nil, err + } + } + + if hasHandler && hasArgs || hasHandler && wp.HandlerType == "http" || hasArgs && wp.HandlerType == "http" { + return nil, fmt.Errorf("Only one watch handler allowed") + } + if !hasHandler && !hasArgs && wp.HandlerType != "http" { + return nil, fmt.Errorf("Must define a watch handler") + } + return wp, nil +} + +func parseWatchArgs(args interface{}) ([]string, error) { + switch args := args.(type) { + case string: + return []string{args}, nil + case []string: + return args, nil + case []interface{}: + result := make([]string, 0, len(args)) + for _, arg := range args { + v, ok := arg.(string) + if !ok { + return nil, fmt.Errorf("Watch args must be a list of strings") + } + + result = append(result, v) + } + return result, nil + default: + return nil, fmt.Errorf("Watch args must be a list of strings") + } +} diff -Nru consul-1.7.4+dfsg1/agent/watch_handler_test.go consul-1.8.7+dfsg1/agent/watch_handler_test.go --- consul-1.7.4+dfsg1/agent/watch_handler_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/watch_handler_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,10 +10,11 @@ "github.com/hashicorp/consul/api/watch" "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/go-hclog" + "github.com/stretchr/testify/require" ) func TestMakeWatchHandler(t *testing.T) { - t.Parallel() defer os.Remove("handler_out") defer os.Remove("handler_index_out") script := "bash -c 'echo $CONSUL_INDEX >> handler_index_out && cat >> handler_out'" @@ -36,7 +37,6 @@ } func TestMakeHTTPWatchHandler(t *testing.T) { - t.Parallel() server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { idx := r.Header.Get("X-Consul-Index") if idx != "100" { @@ -65,3 +65,113 @@ handler := makeHTTPWatchHandler(testutil.Logger(t), &config) handler(100, []string{"foo", "bar", "baz"}) } + +type raw map[string]interface{} + +func TestMakeWatchPlan(t *testing.T) { + type testCase struct { + name string + params map[string]interface{} + expected func(t *testing.T, plan *watch.Plan) + expectedErr string + } + fn := func(t *testing.T, tc testCase) { + plan, err := makeWatchPlan(hclog.New(nil), tc.params) + if tc.expectedErr != "" { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expectedErr) + return + } + require.NoError(t, err) + tc.expected(t, plan) + } + var testCases = []testCase{ + { + name: "handler_type script, with deprecated handler field", + params: raw{ + "type": "key", + "key": "foo", + "handler_type": "script", + "handler": "./script.sh", + }, + expected: func(t *testing.T, plan *watch.Plan) { + require.Equal(t, plan.HandlerType, "script") + require.Equal(t, plan.Exempt["handler"], "./script.sh") + }, + }, + { + name: "handler_type script, with single arg", + params: raw{ + "type": "key", + "key": "foo", + "handler_type": "script", + "args": "./script.sh", + }, + expected: func(t *testing.T, plan *watch.Plan) { + require.Equal(t, plan.HandlerType, "script") + require.Equal(t, plan.Exempt["args"], []string{"./script.sh"}) + }, + }, + { + name: "handler_type script, with multiple args from slice of interface", + params: raw{ + "type": "key", + "key": "foo", + "handler_type": "script", + "args": []interface{}{"./script.sh", "arg1"}, + }, + expected: func(t *testing.T, plan *watch.Plan) { + require.Equal(t, plan.HandlerType, "script") + require.Equal(t, plan.Exempt["args"], []string{"./script.sh", "arg1"}) + }, + }, + { + name: "handler_type script, with multiple args from slice of strings", + params: raw{ + "type": "key", + "key": "foo", + "handler_type": "script", + "args": []string{"./script.sh", "arg1"}, + }, + expected: func(t *testing.T, plan *watch.Plan) { + require.Equal(t, plan.HandlerType, "script") + require.Equal(t, plan.Exempt["args"], []string{"./script.sh", "arg1"}) + }, + }, + { + name: "handler_type script, with not string args", + params: raw{ + "type": "key", + "key": "foo", + "handler_type": "script", + "args": []interface{}{"./script.sh", true}, + }, + expectedErr: "Watch args must be a list of strings", + }, + { + name: "conflicting handler", + params: raw{ + "type": "key", + "key": "foo", + "handler_type": "script", + "handler": "./script.sh", + "args": []interface{}{"arg1"}, + }, + expectedErr: "Only one watch handler allowed", + }, + { + name: "no handler_type", + params: raw{ + "type": "key", + "key": "foo", + }, + expectedErr: "Must define a watch handler", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + fn(t, tc) + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/xds/clusters.go consul-1.8.7+dfsg1/agent/xds/clusters.go --- consul-1.7.4+dfsg1/agent/xds/clusters.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/clusters.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,26 +12,31 @@ envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" envoyendpoint "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" envoytype "github.com/envoyproxy/go-control-plane/envoy/type" - "github.com/gogo/protobuf/jsonpb" - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/types" - + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" + "github.com/golang/protobuf/ptypes/any" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/logging" ) // clustersFromSnapshot returns the xDS API representation of the "clusters" in the snapshot. -func (s *Server) clustersFromSnapshot(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) clustersFromSnapshot(_ connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { if cfgSnap == nil { return nil, errors.New("nil config given") } switch cfgSnap.Kind { case structs.ServiceKindConnectProxy: - return s.clustersFromSnapshotConnectProxy(cfgSnap, token) + return s.clustersFromSnapshotConnectProxy(cfgSnap) + case structs.ServiceKindTerminatingGateway: + return s.makeGatewayServiceClusters(cfgSnap) case structs.ServiceKindMeshGateway: - return s.clustersFromSnapshotMeshGateway(cfgSnap, token) + return s.clustersFromSnapshotMeshGateway(cfgSnap) + case structs.ServiceKindIngressGateway: + return s.clustersFromSnapshotIngressGateway(cfgSnap) default: return nil, fmt.Errorf("Invalid service kind: %v", cfgSnap.Kind) } @@ -39,7 +44,7 @@ // clustersFromSnapshot returns the xDS API representation of the "clusters" // (upstreams) in the snapshot. -func (s *Server) clustersFromSnapshotConnectProxy(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) clustersFromSnapshotConnectProxy(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { // TODO(rb): this sizing is a low bound. clusters := make([]proto.Message, 0, len(cfgSnap.Proxy.Upstreams)+1) @@ -63,7 +68,13 @@ } else { chain := cfgSnap.ConnectProxy.DiscoveryChain[id] - upstreamClusters, err := s.makeUpstreamClustersForDiscoveryChain(u, chain, cfgSnap) + chainEndpoints, ok := cfgSnap.ConnectProxy.WatchedUpstreamEndpoints[id] + if !ok { + // this should not happen + return nil, fmt.Errorf("no endpoint map for upstream %q", id) + } + + upstreamClusters, err := s.makeUpstreamClustersForDiscoveryChain(u, chain, chainEndpoints, cfgSnap) if err != nil { return nil, err } @@ -112,57 +123,175 @@ // clustersFromSnapshotMeshGateway returns the xDS API representation of the "clusters" // for a mesh gateway. This will include 1 cluster per remote datacenter as well as // 1 cluster for each service subset. -func (s *Server) clustersFromSnapshotMeshGateway(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) clustersFromSnapshotMeshGateway(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + datacenters := cfgSnap.MeshGateway.Datacenters() + // 1 cluster per remote dc + 1 cluster per local service (this is a lower bound - all subset specific clusters will be appended) - clusters := make([]proto.Message, 0, len(cfgSnap.MeshGateway.GatewayGroups)+len(cfgSnap.MeshGateway.ServiceGroups)) + clusters := make([]proto.Message, 0, len(datacenters)+len(cfgSnap.MeshGateway.ServiceGroups)) // generate the remote dc clusters - for dc, _ := range cfgSnap.MeshGateway.GatewayGroups { - clusterName := connect.DatacenterSNI(dc, cfgSnap.Roots.TrustDomain) + for _, dc := range datacenters { + if dc == cfgSnap.Datacenter { + continue // skip local + } - cluster, err := s.makeMeshGatewayCluster(clusterName, cfgSnap) - if err != nil { - return nil, err + opts := gatewayClusterOpts{ + name: connect.DatacenterSNI(dc, cfgSnap.Roots.TrustDomain), + hostnameEndpoints: cfgSnap.MeshGateway.HostnameDatacenters[dc], + isRemote: dc != cfgSnap.Datacenter, } + cluster := s.makeGatewayCluster(cfgSnap, opts) clusters = append(clusters, cluster) } - // generate the per-service clusters - for svc, _ := range cfgSnap.MeshGateway.ServiceGroups { - clusterName := connect.ServiceSNI(svc.ID, "", svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) - resolver, hasResolver := cfgSnap.MeshGateway.ServiceResolvers[svc] - - // Create the cluster for default/unnamed services - var cluster *envoy.Cluster - var err error - if hasResolver { - cluster, err = s.makeMeshGatewayClusterWithConnectTimeout(clusterName, cfgSnap, resolver.ConnectTimeout) - } else { - cluster, err = s.makeMeshGatewayCluster(clusterName, cfgSnap) + if cfgSnap.ServiceMeta[structs.MetaWANFederationKey] == "1" && cfgSnap.ServerSNIFn != nil { + // Add all of the remote wildcard datacenter mappings for servers. + for _, dc := range datacenters { + hostnameEndpoints := cfgSnap.MeshGateway.HostnameDatacenters[dc] + + // If the DC is our current DC then this cluster is for traffic from a remote DC to a local server. + // HostnameDatacenters is populated with gateway addresses, so it does not apply here. + if dc == cfgSnap.Datacenter { + hostnameEndpoints = nil + } + opts := gatewayClusterOpts{ + name: cfgSnap.ServerSNIFn(dc, ""), + hostnameEndpoints: hostnameEndpoints, + isRemote: dc != cfgSnap.Datacenter, + } + cluster := s.makeGatewayCluster(cfgSnap, opts) + clusters = append(clusters, cluster) } - if err != nil { - return nil, err + + // And for the current datacenter, send all flavors appropriately. + for _, srv := range cfgSnap.MeshGateway.ConsulServers { + opts := gatewayClusterOpts{ + name: cfgSnap.ServerSNIFn(cfgSnap.Datacenter, srv.Node.Node), + } + cluster := s.makeGatewayCluster(cfgSnap, opts) + clusters = append(clusters, cluster) + } + } + + // generate the per-service/subset clusters + c, err := s.makeGatewayServiceClusters(cfgSnap) + if err != nil { + return nil, err + } + clusters = append(clusters, c...) + + return clusters, nil +} + +func (s *Server) makeGatewayServiceClusters(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + var services map[structs.ServiceName]structs.CheckServiceNodes + var resolvers map[structs.ServiceName]*structs.ServiceResolverConfigEntry + var hostnameEndpoints structs.CheckServiceNodes + + switch cfgSnap.Kind { + case structs.ServiceKindTerminatingGateway: + services = cfgSnap.TerminatingGateway.ServiceGroups + resolvers = cfgSnap.TerminatingGateway.ServiceResolvers + case structs.ServiceKindMeshGateway: + services = cfgSnap.MeshGateway.ServiceGroups + resolvers = cfgSnap.MeshGateway.ServiceResolvers + default: + return nil, fmt.Errorf("unsupported gateway kind %q", cfgSnap.Kind) + } + + clusters := make([]proto.Message, 0, len(services)) + + for svc, _ := range services { + clusterName := connect.ServiceSNI(svc.Name, "", svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) + resolver, hasResolver := resolvers[svc] + + if !hasResolver { + // Use a zero value resolver with no timeout and no subsets + resolver = &structs.ServiceResolverConfigEntry{} + } + + // When making service clusters we only pass endpoints with hostnames if the kind is a terminating gateway + // This is because the services a mesh gateway will route to are not external services and are not addressed by a hostname. + if cfgSnap.Kind == structs.ServiceKindTerminatingGateway { + hostnameEndpoints = cfgSnap.TerminatingGateway.HostnameServices[svc] + } + + opts := gatewayClusterOpts{ + name: clusterName, + hostnameEndpoints: hostnameEndpoints, + connectTimeout: resolver.ConnectTimeout, + } + cluster := s.makeGatewayCluster(cfgSnap, opts) + + if cfgSnap.Kind == structs.ServiceKindTerminatingGateway { + injectTerminatingGatewayTLSContext(cfgSnap, cluster, svc) } clusters = append(clusters, cluster) - // if there is a service-resolver for this service then also setup subset clusters for it - if hasResolver { - // generate 1 cluster for each service subset - for subsetName := range resolver.Subsets { - clusterName := connect.ServiceSNI(svc.ID, subsetName, svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) - - cluster, err := s.makeMeshGatewayClusterWithConnectTimeout(clusterName, cfgSnap, resolver.ConnectTimeout) - if err != nil { - return nil, err - } - clusters = append(clusters, cluster) + // If there is a service-resolver for this service then also setup a cluster for each subset + for name, subset := range resolver.Subsets { + subsetHostnameEndpoints, err := s.filterSubsetEndpoints(&subset, hostnameEndpoints) + if err != nil { + return nil, err } + + opts := gatewayClusterOpts{ + name: connect.ServiceSNI(svc.Name, name, svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain), + hostnameEndpoints: subsetHostnameEndpoints, + onlyPassing: subset.OnlyPassing, + connectTimeout: resolver.ConnectTimeout, + } + cluster := s.makeGatewayCluster(cfgSnap, opts) + + if cfgSnap.Kind == structs.ServiceKindTerminatingGateway { + injectTerminatingGatewayTLSContext(cfgSnap, cluster, svc) + } + clusters = append(clusters, cluster) } } return clusters, nil } +func (s *Server) clustersFromSnapshotIngressGateway(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + var clusters []proto.Message + createdClusters := make(map[string]bool) + for _, upstreams := range cfgSnap.IngressGateway.Upstreams { + for _, u := range upstreams { + id := u.Identifier() + + // If we've already created a cluster for this upstream, skip it. Multiple listeners may + // reference the same upstream, so we don't need to create duplicate clusters in that case. + if createdClusters[id] { + continue + } + + chain, ok := cfgSnap.IngressGateway.DiscoveryChain[id] + if !ok { + // this should not happen + return nil, fmt.Errorf("no discovery chain for upstream %q", id) + } + + chainEndpoints, ok := cfgSnap.IngressGateway.WatchedUpstreamEndpoints[id] + if !ok { + // this should not happen + return nil, fmt.Errorf("no endpoint map for upstream %q", id) + } + + upstreamClusters, err := s.makeUpstreamClustersForDiscoveryChain(u, chain, chainEndpoints, cfgSnap) + if err != nil { + return nil, err + } + + for _, c := range upstreamClusters { + clusters = append(clusters, c) + } + createdClusters[id] = true + } + } + return clusters, nil +} + func (s *Server) makeAppCluster(cfgSnap *proxycfg.ConfigSnapshot, name, pathProtocol string, port int) (*envoy.Cluster, error) { var c *envoy.Cluster var err error @@ -185,13 +314,13 @@ } c = &envoy.Cluster{ Name: name, - ConnectTimeout: time.Duration(cfg.LocalConnectTimeoutMs) * time.Millisecond, + ConnectTimeout: ptypes.DurationProto(time.Duration(cfg.LocalConnectTimeoutMs) * time.Millisecond), ClusterDiscoveryType: &envoy.Cluster_Type{Type: envoy.Cluster_STATIC}, LoadAssignment: &envoy.ClusterLoadAssignment{ ClusterName: name, - Endpoints: []envoyendpoint.LocalityLbEndpoints{ + Endpoints: []*envoyendpoint.LocalityLbEndpoints{ { - LbEndpoints: []envoyendpoint.LbEndpoint{ + LbEndpoints: []*envoyendpoint.LbEndpoint{ makeEndpoint(name, addr, port), @@ -200,7 +329,11 @@ }, }, } - if cfg.Protocol == "http2" || cfg.Protocol == "grpc" || pathProtocol == "http2" { + protocol := pathProtocol + if protocol == "" { + protocol = cfg.Protocol + } + if protocol == "http2" || protocol == "grpc" { c.Http2ProtocolOptions = &envoycore.Http2ProtocolOptions{} } @@ -234,7 +367,7 @@ if c == nil { c = &envoy.Cluster{ Name: sni, - ConnectTimeout: time.Duration(cfg.ConnectTimeoutMs) * time.Millisecond, + ConnectTimeout: ptypes.DurationProto(time.Duration(cfg.ConnectTimeoutMs) * time.Millisecond), ClusterDiscoveryType: &envoy.Cluster_Type{Type: envoy.Cluster_EDS}, EdsClusterConfig: &envoy.Cluster_EdsClusterConfig{ EdsConfig: &envoycore.ConfigSource{ @@ -246,8 +379,7 @@ CircuitBreakers: &envoycluster.CircuitBreakers{ Thresholds: makeThresholdsIfNeeded(cfg.Limits), }, - // Having an empty config enables outlier detection with default config. - OutlierDetection: &envoycluster.OutlierDetection{}, + OutlierDetection: cfg.PassiveHealthCheck.AsOutlierDetection(), } if cfg.Protocol == "http2" || cfg.Protocol == "grpc" { c.Http2ProtocolOptions = &envoycore.Http2ProtocolOptions{} @@ -256,7 +388,7 @@ // Enable TLS upstream with the configured client certificate. c.TlsContext = &envoyauth.UpstreamTlsContext{ - CommonTlsContext: makeCommonTLSContext(cfgSnap), + CommonTlsContext: makeCommonTLSContextFromLeaf(cfgSnap, cfgSnap.Leaf()), Sni: sni, } @@ -266,6 +398,7 @@ func (s *Server) makeUpstreamClustersForDiscoveryChain( upstream structs.Upstream, chain *structs.CompiledDiscoveryChain, + chainEndpoints map[string]structs.CheckServiceNodes, cfgSnap *proxycfg.ConfigSnapshot, ) ([]*envoy.Cluster, error) { if chain == nil { @@ -296,15 +429,7 @@ } } - id := upstream.Identifier() - chainEndpointMap, ok := cfgSnap.ConnectProxy.WatchedUpstreamEndpoints[id] - if !ok { - // this should not happen - return nil, fmt.Errorf("no endpoint map for upstream %q", id) - } - var out []*envoy.Cluster - for _, node := range chain.Nodes { if node.Type != structs.DiscoveryGraphNodeTypeResolver { continue @@ -323,7 +448,7 @@ if failoverThroughMeshGateway { actualTargetID := firstHealthyTarget( chain.Targets, - chainEndpointMap, + chainEndpoints, targetID, failover.Targets, ) @@ -338,7 +463,7 @@ c := &envoy.Cluster{ Name: clusterName, AltStatName: clusterName, - ConnectTimeout: node.Resolver.ConnectTimeout, + ConnectTimeout: ptypes.DurationProto(node.Resolver.ConnectTimeout), ClusterDiscoveryType: &envoy.Cluster_Type{Type: envoy.Cluster_EDS}, CommonLbConfig: &envoy.Cluster_CommonLbConfig{ HealthyPanicThreshold: &envoytype.Percent{ @@ -355,8 +480,7 @@ CircuitBreakers: &envoycluster.CircuitBreakers{ Thresholds: makeThresholdsIfNeeded(cfg.Limits), }, - // Having an empty config enables outlier detection with default config. - OutlierDetection: &envoycluster.OutlierDetection{}, + OutlierDetection: cfg.PassiveHealthCheck.AsOutlierDetection(), } proto := cfg.Protocol @@ -374,7 +498,7 @@ // Enable TLS upstream with the configured client certificate. c.TlsContext = &envoyauth.UpstreamTlsContext{ - CommonTlsContext: makeCommonTLSContext(cfgSnap), + CommonTlsContext: makeCommonTLSContextFromLeaf(cfgSnap, cfgSnap.Leaf()), Sni: sni, } @@ -424,7 +548,7 @@ if _, ok := jsonFields["@type"]; ok { // Type field is present so decode it as a types.Any - var any types.Any + var any any.Any err := jsonpb.UnmarshalString(configJSON, &any) if err != nil { return nil, err @@ -442,40 +566,142 @@ return &c, err } -func (s *Server) makeMeshGatewayCluster(clusterName string, cfgSnap *proxycfg.ConfigSnapshot) (*envoy.Cluster, error) { - return s.makeMeshGatewayClusterWithConnectTimeout(clusterName, cfgSnap, 0) +type gatewayClusterOpts struct { + // name for the cluster + name string + + // isRemote determines whether the cluster is in a remote DC and we should prefer a WAN address + isRemote bool + + // onlyPassing determines whether endpoints that do not have a passing status should be considered unhealthy + onlyPassing bool + + // connectTimeout is the timeout for new network connections to hosts in the cluster + connectTimeout time.Duration + + // hostnameEndpoints is a list of endpoints with a hostname as their address + hostnameEndpoints structs.CheckServiceNodes } -// makeMeshGatewayClusterWithConnectTimeout initializes a mesh gateway cluster -// with the specified connect timeout. If the timeout is 0, the connect timeout -// defaults to use the mesh gateway timeout. -func (s *Server) makeMeshGatewayClusterWithConnectTimeout(clusterName string, cfgSnap *proxycfg.ConfigSnapshot, - connectTimeout time.Duration) (*envoy.Cluster, error) { - cfg, err := ParseMeshGatewayConfig(cfgSnap.Proxy.Config) +// makeGatewayCluster creates an Envoy cluster for a mesh or terminating gateway +func (s *Server) makeGatewayCluster(snap *proxycfg.ConfigSnapshot, opts gatewayClusterOpts) *envoy.Cluster { + cfg, err := ParseGatewayConfig(snap.Proxy.Config) if err != nil { // Don't hard fail on a config typo, just warn. The parse func returns // default config if there is an error so it's safe to continue. - s.Logger.Warn("failed to parse mesh gateway config", "error", err) + s.Logger.Warn("failed to parse gateway config", "error", err) + } + if opts.connectTimeout <= 0 { + opts.connectTimeout = time.Duration(cfg.ConnectTimeoutMs) * time.Millisecond + } + + cluster := &envoy.Cluster{ + Name: opts.name, + ConnectTimeout: ptypes.DurationProto(opts.connectTimeout), + + // Having an empty config enables outlier detection with default config. + OutlierDetection: &envoycluster.OutlierDetection{}, } - if connectTimeout <= 0 { - connectTimeout = time.Duration(cfg.ConnectTimeoutMs) * time.Millisecond + useEDS := true + if len(opts.hostnameEndpoints) > 0 { + useEDS = false } - return &envoy.Cluster{ - Name: clusterName, - ConnectTimeout: connectTimeout, - ClusterDiscoveryType: &envoy.Cluster_Type{Type: envoy.Cluster_EDS}, - EdsClusterConfig: &envoy.Cluster_EdsClusterConfig{ + // If none of the service instances are addressed by a hostname we provide the endpoint IP addresses via EDS + if useEDS { + cluster.ClusterDiscoveryType = &envoy.Cluster_Type{Type: envoy.Cluster_EDS} + cluster.EdsClusterConfig = &envoy.Cluster_EdsClusterConfig{ EdsConfig: &envoycore.ConfigSource{ ConfigSourceSpecifier: &envoycore.ConfigSource_Ads{ Ads: &envoycore.AggregatedConfigSource{}, }, }, + } + return cluster + } + + // When a service instance is addressed by a hostname we have Envoy do the DNS resolution + // by setting a DNS cluster type and passing the hostname endpoints via CDS. + rate := 10 * time.Second + cluster.DnsRefreshRate = ptypes.DurationProto(rate) + cluster.DnsLookupFamily = envoy.Cluster_V4_ONLY + + discoveryType := envoy.Cluster_Type{Type: envoy.Cluster_LOGICAL_DNS} + if cfg.DNSDiscoveryType == "strict_dns" { + discoveryType.Type = envoy.Cluster_STRICT_DNS + } + cluster.ClusterDiscoveryType = &discoveryType + + endpoints := make([]*envoyendpoint.LbEndpoint, 0, 1) + uniqueHostnames := make(map[string]bool) + + var ( + hostname string + idx int + fallback *envoyendpoint.LbEndpoint + ) + for i, e := range opts.hostnameEndpoints { + addr, port := e.BestAddress(opts.isRemote) + uniqueHostnames[addr] = true + + health, weight := calculateEndpointHealthAndWeight(e, opts.onlyPassing) + if health == envoycore.HealthStatus_UNHEALTHY { + fallback = makeLbEndpoint(addr, port, health, weight) + continue + } + + if len(endpoints) == 0 { + endpoints = append(endpoints, makeLbEndpoint(addr, port, health, weight)) + + hostname = addr + idx = i + break + } + } + + dc := opts.hostnameEndpoints[idx].Node.Datacenter + service := opts.hostnameEndpoints[idx].Service.CompoundServiceName() + + loggerName := logging.TerminatingGateway + if snap.Kind == structs.ServiceKindMeshGateway { + loggerName = logging.MeshGateway + } + + // Fall back to last unhealthy endpoint if none were healthy + if len(endpoints) == 0 { + s.Logger.Named(loggerName).Warn("upstream service does not contain any healthy instances", + "dc", dc, "service", service.String()) + + endpoints = append(endpoints, fallback) + } + if len(uniqueHostnames) > 1 { + s.Logger.Named(loggerName). + Warn(fmt.Sprintf("service contains instances with more than one unique hostname; only %q be resolved by Envoy", hostname), + "dc", dc, "service", service.String()) + } + + cluster.LoadAssignment = &envoy.ClusterLoadAssignment{ + ClusterName: cluster.Name, + Endpoints: []*envoyendpoint.LocalityLbEndpoints{ + { + LbEndpoints: endpoints, + }, }, - // Having an empty config enables outlier detection with default config. - OutlierDetection: &envoycluster.OutlierDetection{}, - }, nil + } + return cluster +} + +// injectTerminatingGatewayTLSContext adds an UpstreamTlsContext to a cluster for TLS origination +func injectTerminatingGatewayTLSContext(cfgSnap *proxycfg.ConfigSnapshot, cluster *envoy.Cluster, service structs.ServiceName) { + if mapping, ok := cfgSnap.TerminatingGateway.GatewayServices[service]; ok && mapping.CAFile != "" { + cluster.TlsContext = &envoyauth.UpstreamTlsContext{ + CommonTlsContext: makeCommonTLSContextFromFiles(mapping.CAFile, mapping.CertFile, mapping.KeyFile), + + // TODO (gateways) (freddy) If mapping.SNI is empty, does Envoy behave any differently if TlsContext.Sni is excluded? + Sni: mapping.SNI, + } + } } func makeThresholdsIfNeeded(limits UpstreamLimits) []*envoycluster.CircuitBreakers_Thresholds { @@ -501,3 +727,24 @@ return []*envoycluster.CircuitBreakers_Thresholds{threshold} } + +func makeLbEndpoint(addr string, port int, health envoycore.HealthStatus, weight int) *envoyendpoint.LbEndpoint { + return &envoyendpoint.LbEndpoint{ + HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ + Endpoint: &envoyendpoint.Endpoint{ + Address: &envoycore.Address{ + Address: &envoycore.Address_SocketAddress{ + SocketAddress: &envoycore.SocketAddress{ + Address: addr, + PortSpecifier: &envoycore.SocketAddress_PortValue{ + PortValue: uint32(port), + }, + }, + }, + }, + }, + }, + HealthStatus: health, + LoadBalancingWeight: makeUint32Value(weight), + } +} diff -Nru consul-1.7.4+dfsg1/agent/xds/clusters_test.go consul-1.8.7+dfsg1/agent/xds/clusters_test.go --- consul-1.7.4+dfsg1/agent/xds/clusters_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/clusters_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,7 @@ import ( "bytes" - "path" + "path/filepath" "sort" "testing" "text/template" @@ -11,6 +11,7 @@ envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxysupport" "github.com/hashicorp/consul/sdk/testutil" testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" @@ -246,11 +247,20 @@ }, }, { + name: "expose-paths-grpc-new-cluster-http1", + create: proxycfg.TestConfigSnapshotGRPCExposeHTTP1, + }, + { name: "mesh-gateway", create: proxycfg.TestConfigSnapshotMeshGateway, setup: nil, }, { + name: "mesh-gateway-using-federation-states", + create: proxycfg.TestConfigSnapshotMeshGatewayUsingFederationStates, + setup: nil, + }, + { name: "mesh-gateway-no-services", create: proxycfg.TestConfigSnapshotMeshGatewayNoServices, setup: nil, @@ -259,8 +269,8 @@ name: "mesh-gateway-service-subsets", create: proxycfg.TestConfigSnapshotMeshGateway, setup: func(snap *proxycfg.ConfigSnapshot) { - snap.MeshGateway.ServiceResolvers = map[structs.ServiceID]*structs.ServiceResolverConfigEntry{ - structs.NewServiceID("bar", nil): &structs.ServiceResolverConfigEntry{ + snap.MeshGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("bar", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "bar", Subsets: map[string]structs.ServiceResolverSubset{ @@ -280,8 +290,8 @@ name: "mesh-gateway-ignore-extra-resolvers", create: proxycfg.TestConfigSnapshotMeshGateway, setup: func(snap *proxycfg.ConfigSnapshot) { - snap.MeshGateway.ServiceResolvers = map[structs.ServiceID]*structs.ServiceResolverConfigEntry{ - structs.NewServiceID("bar", nil): &structs.ServiceResolverConfigEntry{ + snap.MeshGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("bar", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "bar", DefaultSubset: "v2", @@ -295,7 +305,7 @@ }, }, }, - structs.NewServiceID("notfound", nil): &structs.ServiceResolverConfigEntry{ + structs.NewServiceName("notfound", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "notfound", DefaultSubset: "v2", @@ -316,8 +326,8 @@ name: "mesh-gateway-service-timeouts", create: proxycfg.TestConfigSnapshotMeshGateway, setup: func(snap *proxycfg.ConfigSnapshot) { - snap.MeshGateway.ServiceResolvers = map[structs.ServiceID]*structs.ServiceResolverConfigEntry{ - structs.NewServiceID("bar", nil): &structs.ServiceResolverConfigEntry{ + snap.MeshGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("bar", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "bar", ConnectTimeout: 10 * time.Second, @@ -334,52 +344,237 @@ } }, }, + { + name: "ingress-gateway", + create: proxycfg.TestConfigSnapshotIngressGateway, + setup: nil, + }, + { + name: "ingress-gateway-no-services", + create: proxycfg.TestConfigSnapshotIngressGatewayNoServices, + setup: nil, + }, + { + name: "ingress-with-chain", + create: proxycfg.TestConfigSnapshotIngress, + setup: nil, + }, + { + name: "ingress-with-chain-external-sni", + create: proxycfg.TestConfigSnapshotIngressExternalSNI, + setup: nil, + }, + { + name: "ingress-with-chain-and-overrides", + create: proxycfg.TestConfigSnapshotIngressWithOverrides, + setup: nil, + }, + { + name: "ingress-with-chain-and-failover", + create: proxycfg.TestConfigSnapshotIngressWithFailover, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughRemoteGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughRemoteGatewayTriggered, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughRemoteGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughRemoteGatewayTriggered, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughLocalGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughLocalGatewayTriggered, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughLocalGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughLocalGatewayTriggered, + setup: nil, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: proxycfg.TestConfigSnapshotIngress_SplitterWithResolverRedirectMultiDC, + setup: nil, + }, + { + name: "terminating-gateway", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: nil, + }, + { + name: "terminating-gateway-no-services", + create: proxycfg.TestConfigSnapshotTerminatingGatewayNoServices, + setup: nil, + }, + { + name: "terminating-gateway-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("web", nil): { + Kind: structs.ServiceResolver, + Name: "web", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.Version == 1", + }, + "v2": { + Filter: "Service.Meta.Version == 2", + OnlyPassing: true, + }, + }, + }, + structs.NewServiceName("cache", nil): { + Kind: structs.ServiceResolver, + Name: "cache", + Subsets: map[string]structs.ServiceResolverSubset{ + "prod": { + Filter: "Service.Meta.Env == prod", + }, + }, + }, + } + }, + }, + { + name: "terminating-gateway-hostname-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("api", nil): { + Kind: structs.ServiceResolver, + Name: "api", + Subsets: map[string]structs.ServiceResolverSubset{ + "alt": { + Filter: "Service.Meta.domain == alt", + }, + }, + }, + structs.NewServiceName("cache", nil): { + Kind: structs.ServiceResolver, + Name: "cache", + Subsets: map[string]structs.ServiceResolverSubset{ + "prod": { + Filter: "Service.Meta.Env == prod", + }, + }, + }, + } + }, + }, + { + name: "terminating-gateway-ignore-extra-resolvers", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("web", nil): { + Kind: structs.ServiceResolver, + Name: "web", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.Version == 1", + }, + "v2": { + Filter: "Service.Meta.Version == 2", + OnlyPassing: true, + }, + }, + }, + structs.NewServiceName("notfound", nil): { + Kind: structs.ServiceResolver, + Name: "notfound", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.Version == 1", + }, + "v2": { + Filter: "Service.Meta.Version == 2", + OnlyPassing: true, + }, + }, + }, + } + }, + }, + { + name: "ingress-multiple-listeners-duplicate-service", + create: proxycfg.TestConfigSnapshotIngress_MultipleListenersDuplicateService, + setup: nil, + }, } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - require := require.New(t) - - // Sanity check default with no overrides first - snap := tt.create(t) - - // We need to replace the TLS certs with deterministic ones to make golden - // files workable. Note we don't update these otherwise they'd change - // golder files for every test case and so not be any use! - if snap.ConnectProxy.Leaf != nil { - snap.ConnectProxy.Leaf.CertPEM = golden(t, "test-leaf-cert", "") - snap.ConnectProxy.Leaf.PrivateKeyPEM = golden(t, "test-leaf-key", "") - } - if snap.Roots != nil { - snap.Roots.Roots[0].RootCert = golden(t, "test-root-cert", "") - } + for _, envoyVersion := range proxysupport.EnvoyVersions { + sf := determineSupportedProxyFeaturesFromString(envoyVersion) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + require := require.New(t) + + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golder files for every test case and so not be any use! + setupTLSRootsAndLeaf(t, snap) - if tt.setup != nil { - tt.setup(snap) - } + if tt.setup != nil { + tt.setup(snap) + } - // Need server just for logger dependency - logger := testutil.Logger(t) - s := Server{ - Logger: logger, - } + // Need server just for logger dependency + logger := testutil.Logger(t) + s := Server{ + Logger: logger, + } - clusters, err := s.clustersFromSnapshot(snap, "my-token") - require.NoError(err) - sort.Slice(clusters, func(i, j int) bool { - return clusters[i].(*envoy.Cluster).Name < clusters[j].(*envoy.Cluster).Name - }) - r, err := createResponse(ClusterType, "00000001", "00000001", clusters) - require.NoError(err) - - gotJSON := responseToJSON(t, r) - - gName := tt.name - if tt.overrideGoldenName != "" { - gName = tt.overrideGoldenName - } + cInfo := connectionInfo{ + Token: "my-token", + ProxyFeatures: sf, + } + clusters, err := s.clustersFromSnapshot(cInfo, snap) + require.NoError(err) + sort.Slice(clusters, func(i, j int) bool { + return clusters[i].(*envoy.Cluster).Name < clusters[j].(*envoy.Cluster).Name + }) + r, err := createResponse(ClusterType, "00000001", "00000001", clusters) + require.NoError(err) + + gotJSON := responseToJSON(t, r) - require.JSONEq(golden(t, path.Join("clusters", gName), gotJSON), gotJSON) + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + require.JSONEq(goldenEnvoy(t, filepath.Join("clusters", gName), envoyVersion, gotJSON), gotJSON) + }) + } }) } } @@ -500,35 +695,6 @@ TLSContext string } -var customEDSClusterJSONTpl = `{ - {{ if .IncludeType -}} - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - {{- end }} - {{ if .TLSContext -}} - "tlsContext": {{ .TLSContext }}, - {{- end }} - "name": "{{ .Name }}", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s" -}` - -var customEDSClusterJSONTemplate = template.Must(template.New("").Parse(customEDSClusterJSONTpl)) - -func customEDSClusterJSON(t *testing.T, opts customClusterJSONOptions) string { - t.Helper() - var buf bytes.Buffer - err := customEDSClusterJSONTemplate.Execute(&buf, opts) - require.NoError(t, err) - return buf.String() -} - var customAppClusterJSONTpl = `{ {{ if .IncludeType -}} "@type": "type.googleapis.com/envoy.api.v2.Cluster", @@ -557,3 +723,19 @@ require.NoError(t, err) return buf.String() } + +func setupTLSRootsAndLeaf(t *testing.T, snap *proxycfg.ConfigSnapshot) { + if snap.Leaf() != nil { + switch snap.Kind { + case structs.ServiceKindConnectProxy: + snap.ConnectProxy.Leaf.CertPEM = golden(t, "test-leaf-cert", "", "") + snap.ConnectProxy.Leaf.PrivateKeyPEM = golden(t, "test-leaf-key", "", "") + case structs.ServiceKindIngressGateway: + snap.IngressGateway.Leaf.CertPEM = golden(t, "test-leaf-cert", "", "") + snap.IngressGateway.Leaf.PrivateKeyPEM = golden(t, "test-leaf-key", "", "") + } + } + if snap.Roots != nil { + snap.Roots.Roots[0].RootCert = golden(t, "test-root-cert", "", "") + } +} diff -Nru consul-1.7.4+dfsg1/agent/xds/config.go consul-1.8.7+dfsg1/agent/xds/config.go --- consul-1.7.4+dfsg1/agent/xds/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,8 +2,13 @@ import ( "strings" + "time" + envoycluster "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster" + "github.com/golang/protobuf/ptypes" + "github.com/golang/protobuf/ptypes/wrappers" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/lib/decode" "github.com/mitchellh/mapstructure" ) @@ -54,7 +59,22 @@ // allows caller to choose whether and how to report the error. func ParseProxyConfig(m map[string]interface{}) (ProxyConfig, error) { var cfg ProxyConfig - err := mapstructure.WeakDecode(m, &cfg) + decodeConf := &mapstructure.DecoderConfig{ + DecodeHook: mapstructure.ComposeDecodeHookFunc( + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + ), + Result: &cfg, + WeaklyTypedInput: true, + } + decoder, err := mapstructure.NewDecoder(decodeConf) + if err != nil { + return cfg, err + } + if err := decoder.Decode(m); err != nil { + return cfg, err + } + // Set defaults (even if error is returned) if cfg.Protocol == "" { cfg.Protocol = "tcp" @@ -67,7 +87,7 @@ return cfg, err } -type MeshGatewayConfig struct { +type GatewayConfig struct { // BindTaggedAddresses when set will cause all of the services tagged // addresses to have listeners bound to them in addition to the main service // address listener. This is only suitable when the tagged addresses are IP @@ -75,32 +95,50 @@ // for those addresses or where an external entity maps that IP to the Envoy // (like AWS EC2 mapping a public IP to the private interface) then this // cannot be used. See the BindAddresses config instead - // - // TODO - wow this is a verbose setting name. Maybe shorten this - BindTaggedAddresses bool `mapstructure:"envoy_mesh_gateway_bind_tagged_addresses"` + BindTaggedAddresses bool `mapstructure:"envoy_gateway_bind_tagged_addresses" alias:"envoy_mesh_gateway_bind_tagged_addresses"` // BindAddresses additional bind addresses to configure listeners for - BindAddresses map[string]structs.ServiceAddress `mapstructure:"envoy_mesh_gateway_bind_addresses"` + BindAddresses map[string]structs.ServiceAddress `mapstructure:"envoy_gateway_bind_addresses" alias:"envoy_mesh_gateway_bind_addresses"` // NoDefaultBind indicates that we should not bind to the default address of the // gateway service - NoDefaultBind bool `mapstructure:"envoy_mesh_gateway_no_default_bind"` + NoDefaultBind bool `mapstructure:"envoy_gateway_no_default_bind" alias:"envoy_mesh_gateway_no_default_bind"` + + // DNSDiscoveryType indicates the DNS service discovery type. + // See: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/service_discovery#arch-overview-service-discovery-types + DNSDiscoveryType string `mapstructure:"envoy_dns_discovery_type"` // ConnectTimeoutMs is the number of milliseconds to timeout making a new // connection to this upstream. Defaults to 5000 (5 seconds) if not set. ConnectTimeoutMs int `mapstructure:"connect_timeout_ms"` } -// ParseMeshGatewayConfig returns the MeshGatewayConfig parsed from an opaque map. If an +// ParseGatewayConfig returns the GatewayConfig parsed from an opaque map. If an // error occurs during parsing, it is returned along with the default config. This // allows the caller to choose whether and how to report the error -func ParseMeshGatewayConfig(m map[string]interface{}) (MeshGatewayConfig, error) { - var cfg MeshGatewayConfig - err := mapstructure.WeakDecode(m, &cfg) +func ParseGatewayConfig(m map[string]interface{}) (GatewayConfig, error) { + var cfg GatewayConfig + d, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: mapstructure.ComposeDecodeHookFunc( + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + ), + Result: &cfg, + WeaklyTypedInput: true, + }) + if err != nil { + return cfg, err + } + if err := d.Decode(m); err != nil { + return cfg, err + } if cfg.ConnectTimeoutMs < 1 { cfg.ConnectTimeoutMs = 5000 } + + cfg.DNSDiscoveryType = strings.ToLower(cfg.DNSDiscoveryType) + return cfg, err } @@ -154,11 +192,52 @@ // Limits are the set of limits that are applied to the proxy for a specific upstream of a // service instance. Limits UpstreamLimits `mapstructure:"limits"` + + // PassiveHealthCheck configuration + PassiveHealthCheck PassiveHealthCheck `mapstructure:"passive_health_check"` +} + +type PassiveHealthCheck struct { + // Interval between health check analysis sweeps. Each sweep may remove + // hosts or return hosts to the pool. + Interval time.Duration + // MaxFailures is the count of consecutive failures that results in a host + // being removed from the pool. + MaxFailures uint32 `mapstructure:"max_failures"` +} + +// Return an envoy.OutlierDetection populated by the values from this struct. +// If all values are zero a default empty OutlierDetection will be returned to +// enable outlier detection with default values. +func (p PassiveHealthCheck) AsOutlierDetection() *envoycluster.OutlierDetection { + od := &envoycluster.OutlierDetection{} + if p.Interval != 0 { + od.Interval = ptypes.DurationProto(p.Interval) + } + if p.MaxFailures != 0 { + od.Consecutive_5Xx = &wrappers.UInt32Value{Value: p.MaxFailures} + } + return od } func ParseUpstreamConfigNoDefaults(m map[string]interface{}) (UpstreamConfig, error) { var cfg UpstreamConfig - err := mapstructure.WeakDecode(m, &cfg) + config := &mapstructure.DecoderConfig{ + DecodeHook: mapstructure.ComposeDecodeHookFunc( + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + mapstructure.StringToTimeDurationHookFunc(), + ), + Result: &cfg, + WeaklyTypedInput: true, + } + + decoder, err := mapstructure.NewDecoder(config) + if err != nil { + return cfg, err + } + + err = decoder.Decode(m) return cfg, err } diff -Nru consul-1.7.4+dfsg1/agent/xds/config_test.go consul-1.8.7+dfsg1/agent/xds/config_test.go --- consul-1.7.4+dfsg1/agent/xds/config_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,9 @@ import ( "testing" + "time" + "github.com/hashicorp/consul/agent/structs" "github.com/stretchr/testify/require" ) @@ -243,6 +245,23 @@ }, }, }, + { + name: "passive health check map", + input: map[string]interface{}{ + "passive_health_check": map[string]interface{}{ + "interval": "22s", + "max_failures": 7, + }, + }, + want: UpstreamConfig{ + ConnectTimeoutMs: 5000, + Protocol: "tcp", + PassiveHealthCheck: PassiveHealthCheck{ + Interval: 22 * time.Second, + MaxFailures: 7, + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -250,6 +269,98 @@ require.NoError(t, err) require.Equal(t, tt.want, got) }) + } +} + +func TestParseGatewayConfig(t *testing.T) { + tests := []struct { + name string + input map[string]interface{} + want GatewayConfig + }{ + { + name: "defaults - nil", + input: nil, + want: GatewayConfig{ + ConnectTimeoutMs: 5000, + }, + }, + { + name: "defaults - empty", + input: map[string]interface{}{}, + want: GatewayConfig{ + ConnectTimeoutMs: 5000, + }, + }, + { + name: "defaults - other stuff", + input: map[string]interface{}{ + "foo": "bar", + "envoy_foo": "envoy_bar", + }, + want: GatewayConfig{ + ConnectTimeoutMs: 5000, + }, + }, + { + name: "kitchen sink", + input: map[string]interface{}{ + "envoy_gateway_bind_tagged_addresses": true, + "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{"foo": {Address: "127.0.0.1", Port: 80}}, + "envoy_gateway_no_default_bind": true, + "envoy_dns_discovery_type": "StRiCt_DnS", + "connect_timeout_ms": 10, + }, + want: GatewayConfig{ + ConnectTimeoutMs: 10, + BindTaggedAddresses: true, + NoDefaultBind: true, + BindAddresses: map[string]structs.ServiceAddress{"foo": {Address: "127.0.0.1", Port: 80}}, + DNSDiscoveryType: "strict_dns", + }, + }, + { + name: "deprecated kitchen sink", + input: map[string]interface{}{ + "envoy_mesh_gateway_bind_tagged_addresses": true, + "envoy_mesh_gateway_bind_addresses": map[string]structs.ServiceAddress{"foo": {Address: "127.0.0.1", Port: 80}}, + "envoy_mesh_gateway_no_default_bind": true, + "connect_timeout_ms": 10, + }, + want: GatewayConfig{ + ConnectTimeoutMs: 10, + BindTaggedAddresses: true, + NoDefaultBind: true, + BindAddresses: map[string]structs.ServiceAddress{"foo": {Address: "127.0.0.1", Port: 80}}, + }, + }, + { + name: "new fields override deprecated ones", + input: map[string]interface{}{ + // Deprecated + "envoy_mesh_gateway_bind_tagged_addresses": true, + "envoy_mesh_gateway_bind_addresses": map[string]structs.ServiceAddress{"foo": {Address: "127.0.0.1", Port: 80}}, + "envoy_mesh_gateway_no_default_bind": true, + + // New + "envoy_gateway_bind_tagged_addresses": false, + "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{"bar": {Address: "127.0.0.1", Port: 8080}}, + "envoy_gateway_no_default_bind": false, + }, + want: GatewayConfig{ + ConnectTimeoutMs: 5000, + BindTaggedAddresses: false, + NoDefaultBind: false, + BindAddresses: map[string]structs.ServiceAddress{"bar": {Address: "127.0.0.1", Port: 8080}}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := ParseGatewayConfig(tt.input) + require.NoError(t, err) + require.Equal(t, tt.want, got) + }) } } diff -Nru consul-1.7.4+dfsg1/agent/xds/endpoints.go consul-1.8.7+dfsg1/agent/xds/endpoints.go --- consul-1.7.4+dfsg1/agent/xds/endpoints.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/endpoints.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,13 +7,11 @@ envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" envoyendpoint "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" - "github.com/gogo/protobuf/proto" - + "github.com/golang/protobuf/proto" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - bexpr "github.com/hashicorp/go-bexpr" ) @@ -22,16 +20,20 @@ ) // endpointsFromSnapshot returns the xDS API representation of the "endpoints" -func (s *Server) endpointsFromSnapshot(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) endpointsFromSnapshot(_ connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { if cfgSnap == nil { return nil, errors.New("nil config given") } switch cfgSnap.Kind { case structs.ServiceKindConnectProxy: - return s.endpointsFromSnapshotConnectProxy(cfgSnap, token) + return s.endpointsFromSnapshotConnectProxy(cfgSnap) + case structs.ServiceKindTerminatingGateway: + return s.endpointsFromSnapshotTerminatingGateway(cfgSnap) case structs.ServiceKindMeshGateway: - return s.endpointsFromSnapshotMeshGateway(cfgSnap, token) + return s.endpointsFromSnapshotMeshGateway(cfgSnap) + case structs.ServiceKindIngressGateway: + return s.endpointsFromSnapshotIngressGateway(cfgSnap) default: return nil, fmt.Errorf("Invalid service kind: %v", cfgSnap.Kind) } @@ -39,7 +41,7 @@ // endpointsFromSnapshotConnectProxy returns the xDS API representation of the "endpoints" // (upstream instances) in the snapshot. -func (s *Server) endpointsFromSnapshotConnectProxy(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) endpointsFromSnapshotConnectProxy(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { resources := make([]proto.Message, 0, len(cfgSnap.ConnectProxy.PreparedQueryEndpoints)+len(cfgSnap.ConnectProxy.WatchedUpstreamEndpoints)) @@ -74,79 +76,14 @@ } else { // Newfangled discovery chain plumbing. - - // Find all resolver nodes. - for _, node := range chain.Nodes { - if node.Type != structs.DiscoveryGraphNodeTypeResolver { - continue - } - failover := node.Resolver.Failover - targetID := node.Resolver.Target - - target := chain.Targets[targetID] - - clusterName := CustomizeClusterName(target.Name, chain) - - // Determine if we have to generate the entire cluster differently. - failoverThroughMeshGateway := chain.WillFailoverThroughMeshGateway(node) - - if failoverThroughMeshGateway { - actualTargetID := firstHealthyTarget( - chain.Targets, - cfgSnap.ConnectProxy.WatchedUpstreamEndpoints[id], - targetID, - failover.Targets, - ) - if actualTargetID != targetID { - targetID = actualTargetID - target = chain.Targets[actualTargetID] - } - - failover = nil - } - - primaryGroup, valid := makeLoadAssignmentEndpointGroup( - chain.Targets, - cfgSnap.ConnectProxy.WatchedUpstreamEndpoints[id], - cfgSnap.ConnectProxy.WatchedGatewayEndpoints[id], - targetID, - cfgSnap.Datacenter, - ) - if !valid { - continue // skip the cluster if we're still populating the snapshot - } - - var endpointGroups []loadAssignmentEndpointGroup - - if failover != nil && len(failover.Targets) > 0 { - endpointGroups = make([]loadAssignmentEndpointGroup, 0, len(failover.Targets)+1) - - endpointGroups = append(endpointGroups, primaryGroup) - - for _, failTargetID := range failover.Targets { - failoverGroup, valid := makeLoadAssignmentEndpointGroup( - chain.Targets, - cfgSnap.ConnectProxy.WatchedUpstreamEndpoints[id], - cfgSnap.ConnectProxy.WatchedGatewayEndpoints[id], - failTargetID, - cfgSnap.Datacenter, - ) - if !valid { - continue // skip the failover target if we're still populating the snapshot - } - endpointGroups = append(endpointGroups, failoverGroup) - } - } else { - endpointGroups = append(endpointGroups, primaryGroup) - } - - la := makeLoadAssignment( - clusterName, - endpointGroups, - cfgSnap.Datacenter, - ) - resources = append(resources, la) - } + es := s.endpointsFromDiscoveryChain( + u, + chain, + cfgSnap.Datacenter, + cfgSnap.ConnectProxy.WatchedUpstreamEndpoints[id], + cfgSnap.ConnectProxy.WatchedGatewayEndpoints[id], + ) + resources = append(resources, es...) } } @@ -170,55 +107,151 @@ return endpoints, nil } -func (s *Server) endpointsFromSnapshotMeshGateway(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { - resources := make([]proto.Message, 0, len(cfgSnap.MeshGateway.GatewayGroups)+len(cfgSnap.MeshGateway.ServiceGroups)) +func (s *Server) endpointsFromSnapshotTerminatingGateway(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + return s.endpointsFromServicesAndResolvers(cfgSnap, cfgSnap.TerminatingGateway.ServiceGroups, cfgSnap.TerminatingGateway.ServiceResolvers) +} + +func (s *Server) endpointsFromSnapshotMeshGateway(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + datacenters := cfgSnap.MeshGateway.Datacenters() + resources := make([]proto.Message, 0, len(datacenters)+len(cfgSnap.MeshGateway.ServiceGroups)) // generate the endpoints for the gateways in the remote datacenters - for dc, endpoints := range cfgSnap.MeshGateway.GatewayGroups { - clusterName := connect.DatacenterSNI(dc, cfgSnap.Roots.TrustDomain) - la := makeLoadAssignment( - clusterName, - []loadAssignmentEndpointGroup{ - {Endpoints: endpoints}, - }, - cfgSnap.Datacenter, - ) - resources = append(resources, la) + for _, dc := range datacenters { + // Skip creating endpoints for mesh gateways in local DC and gateways in remote DCs with a hostname as their address + // EDS cannot resolve hostnames so we provide them through CDS instead + if dc == cfgSnap.Datacenter || len(cfgSnap.MeshGateway.HostnameDatacenters[dc]) > 0 { + continue + } + + endpoints, ok := cfgSnap.MeshGateway.GatewayGroups[dc] + if !ok { + endpoints, ok = cfgSnap.MeshGateway.FedStateGateways[dc] + if !ok { // not possible + s.Logger.Error("skipping mesh gateway endpoints because no definition found", "datacenter", dc) + continue + } + } + + { // standard connect + clusterName := connect.DatacenterSNI(dc, cfgSnap.Roots.TrustDomain) + + la := makeLoadAssignment( + clusterName, + []loadAssignmentEndpointGroup{ + {Endpoints: endpoints}, + }, + cfgSnap.Datacenter, + ) + resources = append(resources, la) + } + + if cfgSnap.ServiceMeta[structs.MetaWANFederationKey] == "1" && cfgSnap.ServerSNIFn != nil { + clusterName := cfgSnap.ServerSNIFn(dc, "") + + la := makeLoadAssignment( + clusterName, + []loadAssignmentEndpointGroup{ + {Endpoints: endpoints}, + }, + cfgSnap.Datacenter, + ) + resources = append(resources, la) + } + } + + // generate endpoints for our servers if WAN federation is enabled + if cfgSnap.ServiceMeta[structs.MetaWANFederationKey] == "1" && cfgSnap.ServerSNIFn != nil { + var allServersLbEndpoints []*envoyendpoint.LbEndpoint + + for _, srv := range cfgSnap.MeshGateway.ConsulServers { + clusterName := cfgSnap.ServerSNIFn(cfgSnap.Datacenter, srv.Node.Node) + + addr, port := srv.BestAddress(false /*wan*/) + + lbEndpoint := &envoyendpoint.LbEndpoint{ + HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ + Endpoint: &envoyendpoint.Endpoint{ + Address: makeAddress(addr, port), + }, + }, + HealthStatus: envoycore.HealthStatus_UNKNOWN, + } + + cla := &envoy.ClusterLoadAssignment{ + ClusterName: clusterName, + Endpoints: []*envoyendpoint.LocalityLbEndpoints{{ + LbEndpoints: []*envoyendpoint.LbEndpoint{lbEndpoint}, + }}, + } + allServersLbEndpoints = append(allServersLbEndpoints, lbEndpoint) + + resources = append(resources, cla) + } + + // And add one catch all so that remote datacenters can dial ANY server + // in this datacenter without knowing its name. + resources = append(resources, &envoy.ClusterLoadAssignment{ + ClusterName: cfgSnap.ServerSNIFn(cfgSnap.Datacenter, ""), + Endpoints: []*envoyendpoint.LocalityLbEndpoints{{ + LbEndpoints: allServersLbEndpoints, + }}, + }) } // Generate the endpoints for each service and its subsets - for svc, endpoints := range cfgSnap.MeshGateway.ServiceGroups { - clusterEndpoints := make(map[string]loadAssignmentEndpointGroup) - clusterEndpoints[UnnamedSubset] = loadAssignmentEndpointGroup{Endpoints: endpoints, OnlyPassing: false} + e, err := s.endpointsFromServicesAndResolvers(cfgSnap, cfgSnap.MeshGateway.ServiceGroups, cfgSnap.MeshGateway.ServiceResolvers) + if err != nil { + return nil, err + } + resources = append(resources, e...) + + return resources, nil +} + +func (s *Server) endpointsFromServicesAndResolvers( + cfgSnap *proxycfg.ConfigSnapshot, + services map[structs.ServiceName]structs.CheckServiceNodes, + resolvers map[structs.ServiceName]*structs.ServiceResolverConfigEntry) ([]proto.Message, error) { + + resources := make([]proto.Message, 0, len(services)) + + // generate the endpoints for the linked service groups + for svc, endpoints := range services { + // Skip creating endpoints for services that have hostnames as addresses + // EDS cannot resolve hostnames so we provide them through CDS instead + if cfgSnap.Kind == structs.ServiceKindTerminatingGateway && len(cfgSnap.TerminatingGateway.HostnameServices[svc]) > 0 { + continue + } + + clusterEndpoints := make(map[string][]loadAssignmentEndpointGroup) + clusterEndpoints[UnnamedSubset] = []loadAssignmentEndpointGroup{{Endpoints: endpoints, OnlyPassing: false}} // Collect all of the loadAssignmentEndpointGroups for the various subsets. We do this before generating // the endpoints for the default/unnamed subset so that we can take into account the DefaultSubset on the // service-resolver which may prevent the default/unnamed cluster from creating endpoints for all service // instances. - if resolver, hasResolver := cfgSnap.MeshGateway.ServiceResolvers[svc]; hasResolver { + if resolver, hasResolver := resolvers[svc]; hasResolver { for subsetName, subset := range resolver.Subsets { subsetEndpoints, err := s.filterSubsetEndpoints(&subset, endpoints) if err != nil { return nil, err } - group := loadAssignmentEndpointGroup{Endpoints: subsetEndpoints, OnlyPassing: subset.OnlyPassing} - clusterEndpoints[subsetName] = group + groups := []loadAssignmentEndpointGroup{{Endpoints: subsetEndpoints, OnlyPassing: subset.OnlyPassing}} + clusterEndpoints[subsetName] = groups // if this subset is the default then override the unnamed subset with this configuration if subsetName == resolver.DefaultSubset { - clusterEndpoints[UnnamedSubset] = group + clusterEndpoints[UnnamedSubset] = groups } } } // now generate the load assignment for all subsets - for subsetName, group := range clusterEndpoints { - clusterName := connect.ServiceSNI(svc.ID, subsetName, svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) + for subsetName, groups := range clusterEndpoints { + clusterName := connect.ServiceSNI(svc.Name, subsetName, svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) la := makeLoadAssignment( clusterName, - []loadAssignmentEndpointGroup{ - group, - }, + groups, cfgSnap.Datacenter, ) resources = append(resources, la) @@ -228,16 +261,158 @@ return resources, nil } -func makeEndpoint(clusterName, host string, port int) envoyendpoint.LbEndpoint { - return envoyendpoint.LbEndpoint{ +func (s *Server) endpointsFromSnapshotIngressGateway(cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + var resources []proto.Message + createdClusters := make(map[string]bool) + for _, upstreams := range cfgSnap.IngressGateway.Upstreams { + for _, u := range upstreams { + id := u.Identifier() + + // If we've already created endpoints for this upstream, skip it. Multiple listeners may + // reference the same upstream, so we don't need to create duplicate endpoints in that case. + if createdClusters[id] { + continue + } + + es := s.endpointsFromDiscoveryChain( + u, + cfgSnap.IngressGateway.DiscoveryChain[id], + cfgSnap.Datacenter, + cfgSnap.IngressGateway.WatchedUpstreamEndpoints[id], + cfgSnap.IngressGateway.WatchedGatewayEndpoints[id], + ) + resources = append(resources, es...) + createdClusters[id] = true + } + } + return resources, nil +} + +func makeEndpoint(clusterName, host string, port int) *envoyendpoint.LbEndpoint { + return &envoyendpoint.LbEndpoint{ HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr(host, port), + Address: makeAddress(host, port), }, }, } } +func (s *Server) endpointsFromDiscoveryChain( + upstream structs.Upstream, + chain *structs.CompiledDiscoveryChain, + datacenter string, + upstreamEndpoints, gatewayEndpoints map[string]structs.CheckServiceNodes, +) []proto.Message { + var resources []proto.Message + + if chain == nil { + return resources + } + + cfg, err := ParseUpstreamConfigNoDefaults(upstream.Config) + if err != nil { + // Don't hard fail on a config typo, just warn. The parse func returns + // default config if there is an error so it's safe to continue. + s.Logger.Warn("failed to parse", "upstream", upstream.Identifier(), + "error", err) + } + + var escapeHatchCluster *envoy.Cluster + if cfg.ClusterJSON != "" { + if chain.IsDefault() { + // If you haven't done anything to setup the discovery chain, then + // you can use the envoy_cluster_json escape hatch. + escapeHatchCluster, err = makeClusterFromUserConfig(cfg.ClusterJSON) + if err != nil { + return resources + } + } else { + s.Logger.Warn("ignoring escape hatch setting, because a discovery chain is configued for", + "discovery chain", chain.ServiceName, "upstream", upstream.Identifier(), + "envoy_cluster_json", chain.ServiceName) + } + } + + // Find all resolver nodes. + for _, node := range chain.Nodes { + if node.Type != structs.DiscoveryGraphNodeTypeResolver { + continue + } + failover := node.Resolver.Failover + targetID := node.Resolver.Target + + target := chain.Targets[targetID] + + clusterName := CustomizeClusterName(target.Name, chain) + if escapeHatchCluster != nil { + clusterName = escapeHatchCluster.Name + } + s.Logger.Debug("generating endpoints for", "cluster", clusterName) + + // Determine if we have to generate the entire cluster differently. + failoverThroughMeshGateway := chain.WillFailoverThroughMeshGateway(node) + + if failoverThroughMeshGateway { + actualTargetID := firstHealthyTarget( + chain.Targets, + upstreamEndpoints, + targetID, + failover.Targets, + ) + if actualTargetID != targetID { + targetID = actualTargetID + } + + failover = nil + } + + primaryGroup, valid := makeLoadAssignmentEndpointGroup( + chain.Targets, + upstreamEndpoints, + gatewayEndpoints, + targetID, + datacenter, + ) + if !valid { + continue // skip the cluster if we're still populating the snapshot + } + + var endpointGroups []loadAssignmentEndpointGroup + + if failover != nil && len(failover.Targets) > 0 { + endpointGroups = make([]loadAssignmentEndpointGroup, 0, len(failover.Targets)+1) + + endpointGroups = append(endpointGroups, primaryGroup) + + for _, failTargetID := range failover.Targets { + failoverGroup, valid := makeLoadAssignmentEndpointGroup( + chain.Targets, + upstreamEndpoints, + gatewayEndpoints, + failTargetID, + datacenter, + ) + if !valid { + continue // skip the failover target if we're still populating the snapshot + } + endpointGroups = append(endpointGroups, failoverGroup) + } + } else { + endpointGroups = append(endpointGroups, primaryGroup) + } + + la := makeLoadAssignment( + clusterName, + endpointGroups, + datacenter, + ) + resources = append(resources, la) + } + + return resources +} + type loadAssignmentEndpointGroup struct { Endpoints structs.CheckServiceNodes OnlyPassing bool @@ -247,7 +422,7 @@ func makeLoadAssignment(clusterName string, endpointGroups []loadAssignmentEndpointGroup, localDatacenter string) *envoy.ClusterLoadAssignment { cla := &envoy.ClusterLoadAssignment{ ClusterName: clusterName, - Endpoints: make([]envoyendpoint.LocalityLbEndpoints, 0, len(endpointGroups)), + Endpoints: make([]*envoyendpoint.LocalityLbEndpoints, 0, len(endpointGroups)), } if len(endpointGroups) > 1 { @@ -260,7 +435,7 @@ for priority, endpointGroup := range endpointGroups { endpoints := endpointGroup.Endpoints - es := make([]envoyendpoint.LbEndpoint, 0, len(endpoints)) + es := make([]*envoyendpoint.LbEndpoint, 0, len(endpoints)) for _, ep := range endpoints { // TODO (mesh-gateway) - should we respect the translate_wan_addrs configuration here or just always use the wan for cross-dc? @@ -271,10 +446,10 @@ healthStatus = endpointGroup.OverrideHealth } - es = append(es, envoyendpoint.LbEndpoint{ + es = append(es, &envoyendpoint.LbEndpoint{ HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr(addr, port), + Address: makeAddress(addr, port), }, }, HealthStatus: healthStatus, @@ -282,7 +457,7 @@ }) } - cla.Endpoints = append(cla.Endpoints, envoyendpoint.LocalityLbEndpoints{ + cla.Endpoints = append(cla.Endpoints, &envoyendpoint.LocalityLbEndpoints{ Priority: uint32(priority), LbEndpoints: es, }) diff -Nru consul-1.7.4+dfsg1/agent/xds/endpoints_test.go consul-1.8.7+dfsg1/agent/xds/endpoints_test.go --- consul-1.7.4+dfsg1/agent/xds/endpoints_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/endpoints_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ package xds import ( - "path" + "path/filepath" "sort" "testing" @@ -10,10 +10,11 @@ "github.com/stretchr/testify/require" envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" - "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" envoyendpoint "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxysupport" "github.com/hashicorp/consul/sdk/testutil" testinf "github.com/mitchellh/go-testing-interface" ) @@ -108,8 +109,8 @@ }, want: &envoy.ClusterLoadAssignment{ ClusterName: "service:test", - Endpoints: []envoyendpoint.LocalityLbEndpoints{{ - LbEndpoints: []envoyendpoint.LbEndpoint{}, + Endpoints: []*envoyendpoint.LocalityLbEndpoints{{ + LbEndpoints: []*envoyendpoint.LbEndpoint{}, }}, }, }, @@ -121,22 +122,22 @@ }, want: &envoy.ClusterLoadAssignment{ ClusterName: "service:test", - Endpoints: []envoyendpoint.LocalityLbEndpoints{{ - LbEndpoints: []envoyendpoint.LbEndpoint{ - envoyendpoint.LbEndpoint{ + Endpoints: []*envoyendpoint.LocalityLbEndpoints{{ + LbEndpoints: []*envoyendpoint.LbEndpoint{ + { HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr("10.10.10.10", 1234), + Address: makeAddress("10.10.10.10", 1234), }}, - HealthStatus: core.HealthStatus_HEALTHY, + HealthStatus: envoycore.HealthStatus_HEALTHY, LoadBalancingWeight: makeUint32Value(1), }, - envoyendpoint.LbEndpoint{ + { HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr("10.10.10.20", 1234), + Address: makeAddress("10.10.10.20", 1234), }}, - HealthStatus: core.HealthStatus_HEALTHY, + HealthStatus: envoycore.HealthStatus_HEALTHY, LoadBalancingWeight: makeUint32Value(1), }, }, @@ -151,22 +152,22 @@ }, want: &envoy.ClusterLoadAssignment{ ClusterName: "service:test", - Endpoints: []envoyendpoint.LocalityLbEndpoints{{ - LbEndpoints: []envoyendpoint.LbEndpoint{ - envoyendpoint.LbEndpoint{ + Endpoints: []*envoyendpoint.LocalityLbEndpoints{{ + LbEndpoints: []*envoyendpoint.LbEndpoint{ + { HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr("10.10.10.10", 1234), + Address: makeAddress("10.10.10.10", 1234), }}, - HealthStatus: core.HealthStatus_HEALTHY, + HealthStatus: envoycore.HealthStatus_HEALTHY, LoadBalancingWeight: makeUint32Value(10), }, - envoyendpoint.LbEndpoint{ + { HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr("10.10.10.20", 1234), + Address: makeAddress("10.10.10.20", 1234), }}, - HealthStatus: core.HealthStatus_HEALTHY, + HealthStatus: envoycore.HealthStatus_HEALTHY, LoadBalancingWeight: makeUint32Value(5), }, }, @@ -181,22 +182,22 @@ }, want: &envoy.ClusterLoadAssignment{ ClusterName: "service:test", - Endpoints: []envoyendpoint.LocalityLbEndpoints{{ - LbEndpoints: []envoyendpoint.LbEndpoint{ - envoyendpoint.LbEndpoint{ + Endpoints: []*envoyendpoint.LocalityLbEndpoints{{ + LbEndpoints: []*envoyendpoint.LbEndpoint{ + { HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr("10.10.10.10", 1234), + Address: makeAddress("10.10.10.10", 1234), }}, - HealthStatus: core.HealthStatus_HEALTHY, + HealthStatus: envoycore.HealthStatus_HEALTHY, LoadBalancingWeight: makeUint32Value(1), }, - envoyendpoint.LbEndpoint{ + { HostIdentifier: &envoyendpoint.LbEndpoint_Endpoint{ Endpoint: &envoyendpoint.Endpoint{ - Address: makeAddressPtr("10.10.10.20", 1234), + Address: makeAddress("10.10.10.20", 1234), }}, - HealthStatus: core.HealthStatus_UNHEALTHY, + HealthStatus: envoycore.HealthStatus_UNHEALTHY, LoadBalancingWeight: makeUint32Value(1), }, }, @@ -238,6 +239,11 @@ setup: nil, }, { + name: "mesh-gateway-using-federation-states", + create: proxycfg.TestConfigSnapshotMeshGatewayUsingFederationStates, + setup: nil, + }, + { name: "mesh-gateway-no-services", create: proxycfg.TestConfigSnapshotMeshGatewayNoServices, }, @@ -302,6 +308,17 @@ setup: nil, }, { + name: "connect-proxy-with-default-chain-and-custom-cluster", + create: proxycfg.TestConfigSnapshotDiscoveryChainDefault, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.Proxy.Upstreams[0].Config["envoy_cluster_json"] = + customAppClusterJSON(t, customClusterJSONOptions{ + Name: "myservice", + IncludeType: false, + }) + }, + }, + { name: "splitter-with-resolver-redirect", create: proxycfg.TestConfigSnapshotDiscoveryChain_SplitterWithResolverRedirectMultiDC, setup: nil, @@ -310,8 +327,8 @@ name: "mesh-gateway-service-subsets", create: proxycfg.TestConfigSnapshotMeshGateway, setup: func(snap *proxycfg.ConfigSnapshot) { - snap.MeshGateway.ServiceResolvers = map[structs.ServiceID]*structs.ServiceResolverConfigEntry{ - structs.NewServiceID("bar", nil): &structs.ServiceResolverConfigEntry{ + snap.MeshGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("bar", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "bar", Subsets: map[string]structs.ServiceResolverSubset{ @@ -324,7 +341,7 @@ }, }, }, - structs.NewServiceID("foo", nil): &structs.ServiceResolverConfigEntry{ + structs.NewServiceName("foo", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "foo", Subsets: map[string]structs.ServiceResolverSubset{ @@ -344,8 +361,8 @@ name: "mesh-gateway-default-service-subset", create: proxycfg.TestConfigSnapshotMeshGateway, setup: func(snap *proxycfg.ConfigSnapshot) { - snap.MeshGateway.ServiceResolvers = map[structs.ServiceID]*structs.ServiceResolverConfigEntry{ - structs.NewServiceID("bar", nil): &structs.ServiceResolverConfigEntry{ + snap.MeshGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("bar", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "bar", DefaultSubset: "v2", @@ -359,7 +376,7 @@ }, }, }, - structs.NewServiceID("foo", nil): &structs.ServiceResolverConfigEntry{ + structs.NewServiceName("foo", nil): &structs.ServiceResolverConfigEntry{ Kind: structs.ServiceResolver, Name: "foo", DefaultSubset: "v2", @@ -376,52 +393,215 @@ } }, }, + { + name: "ingress-gateway", + create: proxycfg.TestConfigSnapshotIngressGateway, + setup: nil, + }, + { + name: "ingress-gateway-no-services", + create: proxycfg.TestConfigSnapshotIngressGatewayNoServices, + setup: nil, + }, + { + name: "ingress-with-chain", + create: proxycfg.TestConfigSnapshotIngress, + setup: nil, + }, + { + name: "ingress-with-chain-external-sni", + create: proxycfg.TestConfigSnapshotIngressExternalSNI, + setup: nil, + }, + { + name: "ingress-with-chain-and-overrides", + create: proxycfg.TestConfigSnapshotIngressWithOverrides, + setup: nil, + }, + { + name: "ingress-with-chain-and-failover", + create: proxycfg.TestConfigSnapshotIngressWithFailover, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughRemoteGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughRemoteGatewayTriggered, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughRemoteGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughRemoteGatewayTriggered, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughLocalGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughLocalGatewayTriggered, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughLocalGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway-triggered", + create: proxycfg.TestConfigSnapshotIngressWithDoubleFailoverThroughLocalGatewayTriggered, + setup: nil, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: proxycfg.TestConfigSnapshotIngress_SplitterWithResolverRedirectMultiDC, + setup: nil, + }, + { + name: "terminating-gateway", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: nil, + }, + { + name: "terminating-gateway-no-services", + create: proxycfg.TestConfigSnapshotTerminatingGatewayNoServices, + setup: nil, + }, + { + name: "terminating-gateway-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("web", nil): { + Kind: structs.ServiceResolver, + Name: "web", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, + }, + }, + structs.NewServiceName("web", nil): { + Kind: structs.ServiceResolver, + Name: "web", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, + }, + }, + } + }, + }, + { + name: "terminating-gateway-default-service-subset", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("web", nil): &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "web", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, + }, + }, + structs.NewServiceName("web", nil): &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "web", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, + }, + }, + } + }, + }, + { + name: "ingress-multiple-listeners-duplicate-service", + create: proxycfg.TestConfigSnapshotIngress_MultipleListenersDuplicateService, + setup: nil, + }, } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - require := require.New(t) + for _, envoyVersion := range proxysupport.EnvoyVersions { + sf := determineSupportedProxyFeaturesFromString(envoyVersion) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + require := require.New(t) + + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golden files for every test case and so not be any use! + setupTLSRootsAndLeaf(t, snap) + + if tt.setup != nil { + tt.setup(snap) + } + + // Need server just for logger dependency + logger := testutil.Logger(t) + s := Server{ + Logger: logger, + } + + cInfo := connectionInfo{ + Token: "my-token", + ProxyFeatures: sf, + } + endpoints, err := s.endpointsFromSnapshot(cInfo, snap) + sort.Slice(endpoints, func(i, j int) bool { + return endpoints[i].(*envoy.ClusterLoadAssignment).ClusterName < endpoints[j].(*envoy.ClusterLoadAssignment).ClusterName + }) + require.NoError(err) + r, err := createResponse(EndpointType, "00000001", "00000001", endpoints) + require.NoError(err) + + gotJSON := responseToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } - // Sanity check default with no overrides first - snap := tt.create(t) - - // We need to replace the TLS certs with deterministic ones to make golden - // files workable. Note we don't update these otherwise they'd change - // golden files for every test case and so not be any use! - if snap.ConnectProxy.Leaf != nil { - snap.ConnectProxy.Leaf.CertPEM = golden(t, "test-leaf-cert", "") - snap.ConnectProxy.Leaf.PrivateKeyPEM = golden(t, "test-leaf-key", "") - } - if snap.Roots != nil { - snap.Roots.Roots[0].RootCert = golden(t, "test-root-cert", "") + require.JSONEq(goldenEnvoy(t, filepath.Join("endpoints", gName), envoyVersion, gotJSON), gotJSON) + }) } - - if tt.setup != nil { - tt.setup(snap) - } - - // Need server just for logger dependency - logger := testutil.Logger(t) - s := Server{ - Logger: logger, - } - - endpoints, err := s.endpointsFromSnapshot(snap, "my-token") - sort.Slice(endpoints, func(i, j int) bool { - return endpoints[i].(*envoy.ClusterLoadAssignment).ClusterName < endpoints[j].(*envoy.ClusterLoadAssignment).ClusterName - }) - require.NoError(err) - r, err := createResponse(EndpointType, "00000001", "00000001", endpoints) - require.NoError(err) - - gotJSON := responseToJSON(t, r) - - gName := tt.name - if tt.overrideGoldenName != "" { - gName = tt.overrideGoldenName - } - - require.JSONEq(golden(t, path.Join("endpoints", gName), gotJSON), gotJSON) }) } } diff -Nru consul-1.7.4+dfsg1/agent/xds/envoy_versioning.go consul-1.8.7+dfsg1/agent/xds/envoy_versioning.go --- consul-1.7.4+dfsg1/agent/xds/envoy_versioning.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/envoy_versioning.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,83 @@ +package xds + +import ( + "fmt" + "regexp" + + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/hashicorp/go-version" +) + +var ( + // minSafeRegexVersion reflects the minimum version where we could use safe_regex instead of regex + // + // NOTE: the first version that no longer supported the old style was 1.13.0 + minSafeRegexVersion = version.Must(version.NewVersion("1.11.2")) +) + +type supportedProxyFeatures struct { + RouterMatchSafeRegex bool // use safe_regex instead of regex in http.router rules +} + +func determineSupportedProxyFeatures(node *envoycore.Node) supportedProxyFeatures { + version := determineEnvoyVersionFromNode(node) + if version == nil { + return supportedProxyFeatures{} + } + + return supportedProxyFeatures{ + RouterMatchSafeRegex: !version.LessThan(minSafeRegexVersion), + } +} + +// example: 1580db37e9a97c37e410bad0e1507ae1a0fd9e77/1.12.4/Clean/RELEASE/BoringSSL +var buildVersionPattern = regexp.MustCompile(`^[a-f0-9]{40}/([^/]+)/Clean/RELEASE/BoringSSL$`) + +func determineEnvoyVersionFromNode(node *envoycore.Node) *version.Version { + if node == nil { + return nil + } + + if node.UserAgentVersionType == nil { + if node.BuildVersion == "" { + return nil + } + + // Must be an older pre-1.13 envoy + m := buildVersionPattern.FindStringSubmatch(node.BuildVersion) + if m == nil { + return nil + } + + return version.Must(version.NewVersion(m[1])) + } + + if node.UserAgentName != "envoy" { + return nil + } + + bv, ok := node.UserAgentVersionType.(*envoycore.Node_UserAgentBuildVersion) + if !ok { + // NOTE: we could sniff for *envoycore.Node_UserAgentVersion and do more regex but official builds don't have this problem. + return nil + } + if bv.UserAgentBuildVersion == nil { + return nil + } + v := bv.UserAgentBuildVersion.Version + + return version.Must(version.NewVersion( + fmt.Sprintf("%d.%d.%d", + v.GetMajorNumber(), + v.GetMinorNumber(), + v.GetPatch(), + ), + )) +} + +func determineSupportedProxyFeaturesFromString(vs string) supportedProxyFeatures { + version := version.Must(version.NewVersion(vs)) + return supportedProxyFeatures{ + RouterMatchSafeRegex: !version.LessThan(minSafeRegexVersion), + } +} diff -Nru consul-1.7.4+dfsg1/agent/xds/envoy_versioning_test.go consul-1.8.7+dfsg1/agent/xds/envoy_versioning_test.go --- consul-1.7.4+dfsg1/agent/xds/envoy_versioning_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/envoy_versioning_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,70 @@ +package xds + +import ( + "testing" + + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + envoytype "github.com/envoyproxy/go-control-plane/envoy/type" + "github.com/hashicorp/go-version" + "github.com/stretchr/testify/require" +) + +func TestDetermineEnvoyVersionFromNode(t *testing.T) { + cases := map[string]struct { + node *envoycore.Node + expect *version.Version + }{ + "empty": { + node: &envoycore.Node{}, + expect: nil, + }, + "only build version": { + node: &envoycore.Node{ + BuildVersion: "1580db37e9a97c37e410bad0e1507ae1a0fd9e77/1.9.0/Clean/RELEASE/BoringSSL", + }, + expect: version.Must(version.NewVersion("1.9.0")), + }, + "user agent build version but no user agent": { + node: &envoycore.Node{ + UserAgentName: "", + UserAgentVersionType: &envoycore.Node_UserAgentBuildVersion{ + UserAgentBuildVersion: &envoycore.BuildVersion{ + Version: &envoytype.SemanticVersion{ + MajorNumber: 1, + MinorNumber: 14, + Patch: 4, + }, + }, + }, + }, + expect: nil, + }, + "user agent build version with user agent": { + node: &envoycore.Node{ + UserAgentName: "envoy", + UserAgentVersionType: &envoycore.Node_UserAgentBuildVersion{ + UserAgentBuildVersion: &envoycore.BuildVersion{ + Version: &envoytype.SemanticVersion{ + MajorNumber: 1, + MinorNumber: 14, + Patch: 4, + }, + }, + }, + }, + expect: version.Must(version.NewVersion("1.14.4")), + }, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + got := determineEnvoyVersionFromNode(tc.node) + if tc.expect != nil { + require.Equal(t, tc.expect, got) + } else { + require.Nil(t, got) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/agent/xds/golden_test.go consul-1.8.7+dfsg1/agent/xds/golden_test.go --- consul-1.7.4+dfsg1/agent/xds/golden_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/golden_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,25 +2,47 @@ import ( "flag" + "fmt" "io/ioutil" "path/filepath" "testing" envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" - "github.com/gogo/protobuf/jsonpb" - + "github.com/golang/protobuf/jsonpb" + "github.com/hashicorp/go-version" "github.com/stretchr/testify/require" ) // update allows golden files to be updated based on the current output. var update = flag.Bool("update", false, "update golden files") +// goldenEnvoy is a special variant of golden() that silos each named test by +// each supported envoy version +func goldenEnvoy(t *testing.T, name, envoyVersion, got string) string { + require.NotEmpty(t, envoyVersion) + + // We do version sniffing on the complete version, but only generate + // golden files ignoring the patch portion + version := version.Must(version.NewVersion(envoyVersion)) + segments := version.Segments() + require.Len(t, segments, 3) + + subname := fmt.Sprintf("envoy-%d-%d-x", segments[0], segments[1]) + + return golden(t, name, subname, got) +} + // golden reads and optionally writes the expected data to the golden file, // returning the contents as a string. -func golden(t *testing.T, name, got string) string { +func golden(t *testing.T, name, subname, got string) string { t.Helper() - golden := filepath.Join("testdata", name+".golden") + suffix := ".golden" + if subname != "" { + suffix = fmt.Sprintf(".%s.golden", subname) + } + + golden := filepath.Join("testdata", name+suffix) if *update && got != "" { err := ioutil.WriteFile(golden, []byte(got), 0644) require.NoError(t, err) diff -Nru consul-1.7.4+dfsg1/agent/xds/listeners.go consul-1.8.7+dfsg1/agent/xds/listeners.go --- consul-1.7.4+dfsg1/agent/xds/listeners.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/listeners.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,40 +19,48 @@ envoyhttp "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2" envoytcp "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2" envoytype "github.com/envoyproxy/go-control-plane/envoy/type" - "github.com/envoyproxy/go-control-plane/pkg/util" - "github.com/gogo/protobuf/jsonpb" - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/types" - + "github.com/envoyproxy/go-control-plane/pkg/conversion" + "github.com/envoyproxy/go-control-plane/pkg/wellknown" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/any" + pbstruct "github.com/golang/protobuf/ptypes/struct" + "github.com/golang/protobuf/ptypes/wrappers" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/logging" + "github.com/hashicorp/go-hclog" ) // listenersFromSnapshot returns the xDS API representation of the "listeners" in the snapshot. -func (s *Server) listenersFromSnapshot(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) listenersFromSnapshot(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { if cfgSnap == nil { return nil, errors.New("nil config given") } switch cfgSnap.Kind { case structs.ServiceKindConnectProxy: - return s.listenersFromSnapshotConnectProxy(cfgSnap, token) + return s.listenersFromSnapshotConnectProxy(cInfo, cfgSnap) + case structs.ServiceKindTerminatingGateway: + return s.listenersFromSnapshotGateway(cInfo, cfgSnap) case structs.ServiceKindMeshGateway: - return s.listenersFromSnapshotMeshGateway(cfgSnap, token) + return s.listenersFromSnapshotGateway(cInfo, cfgSnap) + case structs.ServiceKindIngressGateway: + return s.listenersFromSnapshotGateway(cInfo, cfgSnap) default: return nil, fmt.Errorf("Invalid service kind: %v", cfgSnap.Kind) } } // listenersFromSnapshotConnectProxy returns the "listeners" for a connect proxy service -func (s *Server) listenersFromSnapshotConnectProxy(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func (s *Server) listenersFromSnapshotConnectProxy(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { // One listener for each upstream plus the public one resources := make([]proto.Message, len(cfgSnap.Proxy.Upstreams)+1) // Configure public listener var err error - resources[0], err = s.makePublicListener(cfgSnap, token) + resources[0], err = s.makePublicListener(cInfo, cfgSnap) if err != nil { return nil, err } @@ -65,11 +73,13 @@ } var upstreamListener proto.Message - if chain == nil || chain.IsDefault() { - upstreamListener, err = s.makeUpstreamListenerIgnoreDiscoveryChain(&u, chain, cfgSnap) - } else { - upstreamListener, err = s.makeUpstreamListenerForDiscoveryChain(&u, chain, cfgSnap) - } + upstreamListener, err = s.makeUpstreamListenerForDiscoveryChain( + &u, + u.LocalBindAddress, + chain, + cfgSnap, + nil, + ) if err != nil { return nil, err } @@ -179,17 +189,23 @@ return path, nil } -// listenersFromSnapshotMeshGateway returns the "listener" for a mesh-gateway service -func (s *Server) listenersFromSnapshotMeshGateway(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { - cfg, err := ParseMeshGatewayConfig(cfgSnap.Proxy.Config) +// listenersFromSnapshotGateway returns the "listener" for a terminating-gateway or mesh-gateway service +func (s *Server) listenersFromSnapshotGateway(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + cfg, err := ParseGatewayConfig(cfgSnap.Proxy.Config) if err != nil { // Don't hard fail on a config typo, just warn. The parse func returns // default config if there is an error so it's safe to continue. s.Logger.Warn("failed to parse Connect.Proxy.Config", "error", err) } - // TODO - prevent invalid configurations of binding to the same port/addr - // twice including with the any addresses + // Prevent invalid configurations of binding to the same port/addr twice + // including with the any addresses + type namedAddress struct { + name string + structs.ServiceAddress + } + seen := make(map[structs.ServiceAddress]bool) + addrs := make([]namedAddress, 0) var resources []proto.Message if !cfg.NoDefaultBind { @@ -198,32 +214,124 @@ addr = "0.0.0.0" } - l, err := s.makeGatewayListener("default", addr, cfgSnap.Port, cfgSnap) - if err != nil { - return nil, err + a := structs.ServiceAddress{ + Address: addr, + Port: cfgSnap.Port, + } + if !seen[a] { + addrs = append(addrs, namedAddress{name: "default", ServiceAddress: a}) + seen[a] = true } - resources = append(resources, l) } if cfg.BindTaggedAddresses { for name, addrCfg := range cfgSnap.TaggedAddresses { - l, err := s.makeGatewayListener(name, addrCfg.Address, addrCfg.Port, cfgSnap) + a := structs.ServiceAddress{ + Address: addrCfg.Address, + Port: addrCfg.Port, + } + if !seen[a] { + addrs = append(addrs, namedAddress{name: name, ServiceAddress: a}) + seen[a] = true + } + } + } + + for name, addrCfg := range cfg.BindAddresses { + a := structs.ServiceAddress{ + Address: addrCfg.Address, + Port: addrCfg.Port, + } + if !seen[a] { + addrs = append(addrs, namedAddress{name: name, ServiceAddress: a}) + seen[a] = true + } + } + + // Make listeners once deduplicated + for _, a := range addrs { + var l *envoy.Listener + + switch cfgSnap.Kind { + case structs.ServiceKindTerminatingGateway: + l, err = s.makeTerminatingGatewayListener(cInfo, cfgSnap, a.name, a.Address, a.Port) if err != nil { return nil, err } + case structs.ServiceKindIngressGateway: + listeners, err := s.makeIngressGatewayListeners(a.Address, cfgSnap) + if err != nil { + return nil, err + } + resources = append(resources, listeners...) + case structs.ServiceKindMeshGateway: + l, err = s.makeMeshGatewayListener(a.name, a.Address, a.Port, cfgSnap) + if err != nil { + return nil, err + } + } + if l != nil { resources = append(resources, l) } } + return resources, err +} - for name, addrCfg := range cfg.BindAddresses { - l, err := s.makeGatewayListener(name, addrCfg.Address, addrCfg.Port, cfgSnap) - if err != nil { - return nil, err +func (s *Server) makeIngressGatewayListeners(address string, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + var resources []proto.Message + + for listenerKey, upstreams := range cfgSnap.IngressGateway.Upstreams { + var tlsContext *envoyauth.DownstreamTlsContext + if cfgSnap.IngressGateway.TLSEnabled { + tlsContext = &envoyauth.DownstreamTlsContext{ + CommonTlsContext: makeCommonTLSContextFromLeaf(cfgSnap, cfgSnap.Leaf()), + RequireClientCertificate: &wrappers.BoolValue{Value: false}, + } + } + + if listenerKey.Protocol == "tcp" { + // We rely on the invariant of upstreams slice always having at least 1 + // member, because this key/value pair is created only when a + // GatewayService is returned in the RPC + u := upstreams[0] + id := u.Identifier() + + chain := cfgSnap.IngressGateway.DiscoveryChain[id] + + var upstreamListener proto.Message + upstreamListener, err := s.makeUpstreamListenerForDiscoveryChain( + &u, + address, + chain, + cfgSnap, + tlsContext, + ) + if err != nil { + return nil, err + } + resources = append(resources, upstreamListener) + } else { + // If multiple upstreams share this port, make a special listener for the protocol. + listener := makeListener(listenerKey.Protocol, address, listenerKey.Port) + filter, err := makeListenerFilter( + true, listenerKey.Protocol, listenerKey.RouteName(), "", "ingress_upstream_", "", false) + if err != nil { + return nil, err + } + + listener.FilterChains = []*envoylistener.FilterChain{ + { + Filters: []*envoylistener.Filter{ + filter, + }, + TlsContext: tlsContext, + }, + } + resources = append(resources, listener) } - resources = append(resources, l) } - return resources, err + return resources, nil } // makeListener returns a listener with name and bind details set. Filters must @@ -263,7 +371,7 @@ // from rather than our slight variant in JSON/hcl. func makeListenerFromUserConfig(configJSON string) (*envoy.Listener, error) { // Figure out if there is an @type field. We don't require is since we know - // this will be a listener but unmarshalling into types.Any fails if it's not + // this will be a listener but unmarshalling into any.Any fails if it's not // there and unmarshalling into listener directly fails if it is... var jsonFields map[string]*json.RawMessage if err := json.Unmarshal([]byte(configJSON), &jsonFields); err != nil { @@ -273,8 +381,8 @@ var l envoy.Listener if _, ok := jsonFields["@type"]; ok { - // Type field is present so decode it as a types.Any - var any types.Any + // Type field is present so decode it as a any.Any + var any any.Any err := jsonpb.UnmarshalString(configJSON, &any) if err != nil { return nil, err @@ -299,26 +407,25 @@ // specify custom listener params in config but still get our certs delivered // dynamically and intentions enforced without coming up with some complicated // templating/merging solution. -func injectConnectFilters(cfgSnap *proxycfg.ConfigSnapshot, token string, listener *envoy.Listener) error { - authFilter, err := makeExtAuthFilter(token) +func injectConnectFilters(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot, listener *envoy.Listener) error { + authFilter, err := makeExtAuthFilter(cInfo.Token) if err != nil { return err } for idx := range listener.FilterChains { // Insert our authz filter before any others listener.FilterChains[idx].Filters = - append([]envoylistener.Filter{authFilter}, listener.FilterChains[idx].Filters...) + append([]*envoylistener.Filter{authFilter}, listener.FilterChains[idx].Filters...) - // Force our TLS for all filter chains on a public listener listener.FilterChains[idx].TlsContext = &envoyauth.DownstreamTlsContext{ - CommonTlsContext: makeCommonTLSContext(cfgSnap), - RequireClientCertificate: &types.BoolValue{Value: true}, + CommonTlsContext: makeCommonTLSContextFromLeaf(cfgSnap, cfgSnap.Leaf()), + RequireClientCertificate: &wrappers.BoolValue{Value: true}, } } return nil } -func (s *Server) makePublicListener(cfgSnap *proxycfg.ConfigSnapshot, token string) (proto.Message, error) { +func (s *Server) makePublicListener(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) (proto.Message, error) { var l *envoy.Listener var err error @@ -363,16 +470,16 @@ if err != nil { return nil, err } - l.FilterChains = []envoylistener.FilterChain{ + l.FilterChains = []*envoylistener.FilterChain{ { - Filters: []envoylistener.Filter{ + Filters: []*envoylistener.Filter{ filter, }, }, } } - err = injectConnectFilters(cfgSnap, token, l) + err = injectConnectFilters(cInfo, cfgSnap, l) return l, err } @@ -408,8 +515,8 @@ return nil, err } - chain := envoylistener.FilterChain{ - Filters: []envoylistener.Filter{f}, + chain := &envoylistener.FilterChain{ + Filters: []*envoylistener.Filter{f}, } // For registered checks restrict traffic sources to localhost and Consul's advertise addr @@ -427,67 +534,123 @@ chain.FilterChainMatch = &envoylistener.FilterChainMatch{ SourcePrefixRanges: []*envoycore.CidrRange{ - {AddressPrefix: "127.0.0.1", PrefixLen: &types.UInt32Value{Value: 8}}, - {AddressPrefix: "::1", PrefixLen: &types.UInt32Value{Value: 128}}, - {AddressPrefix: advertise, PrefixLen: &types.UInt32Value{Value: uint32(advertiseLen)}}, + {AddressPrefix: "127.0.0.1", PrefixLen: &wrappers.UInt32Value{Value: 8}}, + {AddressPrefix: "::1", PrefixLen: &wrappers.UInt32Value{Value: 128}}, + {AddressPrefix: advertise, PrefixLen: &wrappers.UInt32Value{Value: uint32(advertiseLen)}}, }, } } - l.FilterChains = []envoylistener.FilterChain{chain} + l.FilterChains = []*envoylistener.FilterChain{chain} return l, err } -// makeUpstreamListenerIgnoreDiscoveryChain counterintuitively takes an (optional) chain -func (s *Server) makeUpstreamListenerIgnoreDiscoveryChain( - u *structs.Upstream, - chain *structs.CompiledDiscoveryChain, +func (s *Server) makeTerminatingGatewayListener( + cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot, -) (proto.Message, error) { - cfg, err := ParseUpstreamConfig(u.Config) + name, addr string, + port int, +) (*envoy.Listener, error) { + l := makeListener(name, addr, port) + + tlsInspector, err := makeTLSInspectorListenerFilter() if err != nil { - // Don't hard fail on a config typo, just warn. The parse func returns - // default config if there is an error so it's safe to continue. - s.Logger.Warn("failed to parse", "upstream", u.Identifier(), "error", err) + return nil, err } - if cfg.ListenerJSON != "" { - return makeListenerFromUserConfig(cfg.ListenerJSON) + l.ListenerFilters = []*envoylistener.ListenerFilter{tlsInspector} + + // Make a FilterChain for each linked service + // Match on the cluster name, + for svc, _ := range cfgSnap.TerminatingGateway.ServiceGroups { + clusterName := connect.ServiceSNI(svc.Name, "", svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) + resolver, hasResolver := cfgSnap.TerminatingGateway.ServiceResolvers[svc] + + // Skip the service if we don't have a cert to present for mTLS + if cert, ok := cfgSnap.TerminatingGateway.ServiceLeaves[svc]; !ok || cert == nil { + // TODO (gateways) (freddy) Should the error suggest that the issue may be ACLs? (need service:write on service) + s.Logger.Named(logging.TerminatingGateway). + Error("no client certificate available for linked service, skipping filter chain creation", + "service", svc.String(), "error", err) + continue + } + + clusterChain, err := s.sniFilterChainTerminatingGateway(cInfo, cfgSnap, name, clusterName, svc) + if err != nil { + return nil, fmt.Errorf("failed to make filter chain for cluster %q: %v", clusterName, err) + } + l.FilterChains = append(l.FilterChains, clusterChain) + + // if there is a service-resolver for this service then also setup subset filter chains for it + if hasResolver { + // generate 1 filter chain for each service subset + for subsetName := range resolver.Subsets { + clusterName := connect.ServiceSNI(svc.Name, subsetName, svc.NamespaceOrDefault(), cfgSnap.Datacenter, cfgSnap.Roots.TrustDomain) + + clusterChain, err := s.sniFilterChainTerminatingGateway(cInfo, cfgSnap, name, clusterName, svc) + if err != nil { + return nil, fmt.Errorf("failed to make filter chain for cluster %q: %v", clusterName, err) + } + l.FilterChains = append(l.FilterChains, clusterChain) + } + } } - addr := u.LocalBindAddress - if addr == "" { - addr = "127.0.0.1" + // This fallback catch-all filter ensures a listener will be present for health checks to pass + // Envoy will reset these connections since known endpoints are caught by filter chain matches above + tcpProxy, err := makeTCPProxyFilter(name, "", "terminating_gateway_") + if err != nil { + return nil, err + } + fallback := &envoylistener.FilterChain{ + Filters: []*envoylistener.Filter{ + {Name: "envoy.filters.network.sni_cluster"}, + tcpProxy, + }, } + l.FilterChains = append(l.FilterChains, fallback) - upstreamID := u.Identifier() + return l, nil +} - dc := u.Datacenter - if dc == "" { - dc = cfgSnap.Datacenter - } - sni := connect.UpstreamSNI(u, "", dc, cfgSnap.Roots.TrustDomain) +func (s *Server) sniFilterChainTerminatingGateway( + cInfo connectionInfo, + cfgSnap *proxycfg.ConfigSnapshot, + listener, cluster string, + service structs.ServiceName, +) (*envoylistener.FilterChain, error) { - clusterName := CustomizeClusterName(sni, chain) + authFilter, err := makeExtAuthFilter(cInfo.Token) + if err != nil { + return nil, err + } + sniCluster, err := makeSNIClusterFilter() + if err != nil { + return nil, err + } - l := makeListener(upstreamID, addr, u.LocalBindPort) - filter, err := makeListenerFilter( - false, cfg.Protocol, upstreamID, clusterName, "upstream_", "", false) + // The cluster name here doesn't matter as the sni_cluster filter will fill it in for us. + statPrefix := fmt.Sprintf("terminating_gateway_%s_%s_", service.NamespaceOrDefault(), service.Name) + tcpProxy, err := makeTCPProxyFilter(listener, "", statPrefix) if err != nil { return nil, err } - l.FilterChains = []envoylistener.FilterChain{ - { - Filters: []envoylistener.Filter{ - filter, - }, + return &envoylistener.FilterChain{ + FilterChainMatch: makeSNIFilterChainMatch(cluster), + Filters: []*envoylistener.Filter{ + authFilter, + sniCluster, + tcpProxy, }, - } - return l, nil + TlsContext: &envoyauth.DownstreamTlsContext{ + CommonTlsContext: makeCommonTLSContextFromLeaf(cfgSnap, cfgSnap.TerminatingGateway.ServiceLeaves[service]), + RequireClientCertificate: &wrappers.BoolValue{Value: true}, + }, + }, err } -func (s *Server) makeGatewayListener(name, addr string, port int, cfgSnap *proxycfg.ConfigSnapshot) (*envoy.Listener, error) { +func (s *Server) makeMeshGatewayListener(name, addr string, port int, cfgSnap *proxycfg.ConfigSnapshot) (*envoy.Listener, error) { tlsInspector, err := makeTLSInspectorListenerFilter() if err != nil { return nil, err @@ -505,19 +668,23 @@ return nil, err } - sniClusterChain := envoylistener.FilterChain{ - Filters: []envoylistener.Filter{ + sniClusterChain := &envoylistener.FilterChain{ + Filters: []*envoylistener.Filter{ sniCluster, tcpProxy, }, } l := makeListener(name, addr, port) - l.ListenerFilters = []envoylistener.ListenerFilter{tlsInspector} + l.ListenerFilters = []*envoylistener.ListenerFilter{tlsInspector} // TODO (mesh-gateway) - Do we need to create clusters for all the old trust domains as well? // We need 1 Filter Chain per datacenter - for dc := range cfgSnap.MeshGateway.GatewayGroups { + datacenters := cfgSnap.MeshGateway.Datacenters() + for _, dc := range datacenters { + if dc == cfgSnap.Datacenter { + continue // skip local + } clusterName := connect.DatacenterSNI(dc, cfgSnap.Roots.TrustDomain) filterName := fmt.Sprintf("%s_%s", name, dc) dcTCPProxy, err := makeTCPProxyFilter(filterName, clusterName, "mesh_gateway_remote_") @@ -525,16 +692,59 @@ return nil, err } - l.FilterChains = append(l.FilterChains, envoylistener.FilterChain{ + l.FilterChains = append(l.FilterChains, &envoylistener.FilterChain{ FilterChainMatch: &envoylistener.FilterChainMatch{ ServerNames: []string{fmt.Sprintf("*.%s", clusterName)}, }, - Filters: []envoylistener.Filter{ + Filters: []*envoylistener.Filter{ dcTCPProxy, }, }) } + if cfgSnap.ServiceMeta[structs.MetaWANFederationKey] == "1" && cfgSnap.ServerSNIFn != nil { + for _, dc := range datacenters { + if dc == cfgSnap.Datacenter { + continue // skip local + } + clusterName := cfgSnap.ServerSNIFn(dc, "") + filterName := fmt.Sprintf("%s_%s", name, dc) + dcTCPProxy, err := makeTCPProxyFilter(filterName, clusterName, "mesh_gateway_remote_") + if err != nil { + return nil, err + } + + l.FilterChains = append(l.FilterChains, &envoylistener.FilterChain{ + FilterChainMatch: &envoylistener.FilterChainMatch{ + ServerNames: []string{fmt.Sprintf("*.%s", clusterName)}, + }, + Filters: []*envoylistener.Filter{ + dcTCPProxy, + }, + }) + } + + // Wildcard all flavors to each server. + for _, srv := range cfgSnap.MeshGateway.ConsulServers { + clusterName := cfgSnap.ServerSNIFn(cfgSnap.Datacenter, srv.Node.Node) + + filterName := fmt.Sprintf("%s_%s", name, cfgSnap.Datacenter) + dcTCPProxy, err := makeTCPProxyFilter(filterName, clusterName, "mesh_gateway_local_server_") + if err != nil { + return nil, err + } + + l.FilterChains = append(l.FilterChains, &envoylistener.FilterChain{ + FilterChainMatch: &envoylistener.FilterChainMatch{ + ServerNames: []string{fmt.Sprintf("%s", clusterName)}, + }, + Filters: []*envoylistener.Filter{ + dcTCPProxy, + }, + }) + } + } + // This needs to get tacked on at the end as it has no // matching and will act as a catch all l.FilterChains = append(l.FilterChains, sniClusterChain) @@ -544,72 +754,115 @@ func (s *Server) makeUpstreamListenerForDiscoveryChain( u *structs.Upstream, + address string, chain *structs.CompiledDiscoveryChain, cfgSnap *proxycfg.ConfigSnapshot, + tlsContext *envoyauth.DownstreamTlsContext, ) (proto.Message, error) { - cfg, err := ParseUpstreamConfigNoDefaults(u.Config) - if err != nil { - // Don't hard fail on a config typo, just warn. The parse func returns - // default config if there is an error so it's safe to continue. - s.Logger.Warn("failed to parse", "upstream", u.Identifier(), "error", err) - } - if cfg.ListenerJSON != "" { - s.Logger.Warn("ignoring escape hatch setting because already configured for", - "discovery chain", chain.ServiceName, "upstream", u.Identifier(), "config", "envoy_listener_json") + if address == "" { + address = "127.0.0.1" } - - addr := u.LocalBindAddress - if addr == "" { - addr = "127.0.0.1" - } - upstreamID := u.Identifier() + l := makeListener(upstreamID, address, u.LocalBindPort) - l := makeListener(upstreamID, addr, u.LocalBindPort) - - proto := cfg.Protocol - if proto == "" { - proto = chain.Protocol - } - - if proto == "" { - proto = "tcp" + cfg := getAndModifyUpstreamConfigForListener(s.Logger, u, chain) + if cfg.ListenerJSON != "" { + return makeListenerFromUserConfig(cfg.ListenerJSON) } useRDS := true clusterName := "" - if proto == "tcp" { + if chain == nil || chain.IsDefault() { + dc := u.Datacenter + if dc == "" { + dc = cfgSnap.Datacenter + } + sni := connect.UpstreamSNI(u, "", dc, cfgSnap.Roots.TrustDomain) + + useRDS = false + clusterName = CustomizeClusterName(sni, chain) + + } else if cfg.Protocol == "tcp" { startNode := chain.Nodes[chain.StartNode] if startNode == nil { - panic("missing first node in compiled discovery chain for: " + chain.ServiceName) + return nil, fmt.Errorf("missing first node in compiled discovery chain for: %s", chain.ServiceName) } else if startNode.Type != structs.DiscoveryGraphNodeTypeResolver { - panic(fmt.Sprintf("unexpected first node in discovery chain using protocol=%q: %s", proto, startNode.Type)) + return nil, fmt.Errorf("unexpected first node in discovery chain using protocol=%q: %s", cfg.Protocol, startNode.Type) } targetID := startNode.Resolver.Target target := chain.Targets[targetID] - clusterName = CustomizeClusterName(target.Name, chain) + useRDS = false + clusterName = CustomizeClusterName(target.Name, chain) } filter, err := makeListenerFilter( - useRDS, proto, upstreamID, clusterName, "upstream_", "", false) + useRDS, cfg.Protocol, upstreamID, clusterName, "upstream_", "", false) if err != nil { return nil, err } - l.FilterChains = []envoylistener.FilterChain{ + l.FilterChains = []*envoylistener.FilterChain{ { - Filters: []envoylistener.Filter{ + Filters: []*envoylistener.Filter{ filter, }, + TlsContext: tlsContext, }, } return l, nil } +func getAndModifyUpstreamConfigForListener(logger hclog.Logger, u *structs.Upstream, chain *structs.CompiledDiscoveryChain) UpstreamConfig { + var ( + cfg UpstreamConfig + err error + ) + + if chain == nil || chain.IsDefault() { + cfg, err = ParseUpstreamConfig(u.Config) + if err != nil { + // Don't hard fail on a config typo, just warn. The parse func returns + // default config if there is an error so it's safe to continue. + logger.Warn("failed to parse", "upstream", u.Identifier(), "error", err) + } + } else { + // Use NoDefaults here so that we can set the protocol to the chain + // protocol if necessary + cfg, err = ParseUpstreamConfigNoDefaults(u.Config) + if err != nil { + // Don't hard fail on a config typo, just warn. The parse func returns + // default config if there is an error so it's safe to continue. + logger.Warn("failed to parse", "upstream", u.Identifier(), "error", err) + } + + if cfg.ListenerJSON != "" { + logger.Warn("ignoring escape hatch setting because already configured for", + "discovery chain", chain.ServiceName, "upstream", u.Identifier(), "config", "envoy_listener_json") + + // Remove from config struct so we don't use it later on + cfg.ListenerJSON = "" + } + + proto := cfg.Protocol + if proto == "" { + proto = chain.Protocol + } + + if proto == "" { + proto = "tcp" + } + + // set back on the config so that we can use it from return value + cfg.Protocol = proto + } + + return cfg +} + func makeListenerFilter( useRDS bool, - protocol, filterName, cluster, statPrefix, routePath string, ingress bool) (envoylistener.Filter, error) { + protocol, filterName, cluster, statPrefix, routePath string, ingress bool) (*envoylistener.Filter, error) { switch protocol { case "grpc": @@ -622,31 +875,30 @@ fallthrough default: if useRDS { - return envoylistener.Filter{}, fmt.Errorf("RDS is not compatible with the tcp proxy filter") + return nil, fmt.Errorf("RDS is not compatible with the tcp proxy filter") } else if cluster == "" { - return envoylistener.Filter{}, fmt.Errorf("cluster name is required for a tcp proxy filter") + return nil, fmt.Errorf("cluster name is required for a tcp proxy filter") } return makeTCPProxyFilter(filterName, cluster, statPrefix) } } -func makeTLSInspectorListenerFilter() (envoylistener.ListenerFilter, error) { - return envoylistener.ListenerFilter{Name: util.TlsInspector}, nil +func makeTLSInspectorListenerFilter() (*envoylistener.ListenerFilter, error) { + return &envoylistener.ListenerFilter{Name: wellknown.TlsInspector}, nil } -// TODO(rb): should this be dead code? -func makeSNIFilterChainMatch(sniMatch string) (*envoylistener.FilterChainMatch, error) { +func makeSNIFilterChainMatch(sniMatch string) *envoylistener.FilterChainMatch { return &envoylistener.FilterChainMatch{ ServerNames: []string{sniMatch}, - }, nil + } } -func makeSNIClusterFilter() (envoylistener.Filter, error) { +func makeSNIClusterFilter() (*envoylistener.Filter, error) { // This filter has no config which is why we are not calling make - return envoylistener.Filter{Name: "envoy.filters.network.sni_cluster"}, nil + return &envoylistener.Filter{Name: "envoy.filters.network.sni_cluster"}, nil } -func makeTCPProxyFilter(filterName, cluster, statPrefix string) (envoylistener.Filter, error) { +func makeTCPProxyFilter(filterName, cluster, statPrefix string) (*envoylistener.Filter, error) { cfg := &envoytcp.TcpProxy{ StatPrefix: makeStatPrefix("tcp", statPrefix, filterName), ClusterSpecifier: &envoytcp.TcpProxy_Cluster{Cluster: cluster}, @@ -665,10 +917,10 @@ useRDS bool, filterName, cluster, statPrefix, routePath string, ingress, grpc, http2 bool, -) (envoylistener.Filter, error) { - op := envoyhttp.INGRESS +) (*envoylistener.Filter, error) { + op := envoyhttp.HttpConnectionManager_Tracing_INGRESS if !ingress { - op = envoyhttp.EGRESS + op = envoyhttp.HttpConnectionManager_Tracing_EGRESS } proto := "http" if grpc { @@ -677,7 +929,7 @@ cfg := &envoyhttp.HttpConnectionManager{ StatPrefix: makeStatPrefix(proto, statPrefix, filterName), - CodecType: envoyhttp.AUTO, + CodecType: envoyhttp.HttpConnectionManager_AUTO, HttpFilters: []*envoyhttp.HttpFilter{ &envoyhttp.HttpFilter{ Name: "envoy.router", @@ -694,12 +946,12 @@ if useRDS { if cluster != "" { - return envoylistener.Filter{}, fmt.Errorf("cannot specify cluster name when using RDS") + return nil, fmt.Errorf("cannot specify cluster name when using RDS") } cfg.RouteSpecifier = &envoyhttp.HttpConnectionManager_Rds{ Rds: &envoyhttp.Rds{ RouteConfigName: filterName, - ConfigSource: envoycore.ConfigSource{ + ConfigSource: &envoycore.ConfigSource{ ConfigSourceSpecifier: &envoycore.ConfigSource_Ads{ Ads: &envoycore.AggregatedConfigSource{}, }, @@ -708,10 +960,10 @@ } } else { if cluster == "" { - return envoylistener.Filter{}, fmt.Errorf("must specify cluster name when not using RDS") + return nil, fmt.Errorf("must specify cluster name when not using RDS") } - route := envoyroute.Route{ - Match: envoyroute.RouteMatch{ + route := &envoyroute.Route{ + Match: &envoyroute.RouteMatch{ PathSpecifier: &envoyroute.RouteMatch_Prefix{ Prefix: "/", }, @@ -737,11 +989,11 @@ cfg.RouteSpecifier = &envoyhttp.HttpConnectionManager_RouteConfig{ RouteConfig: &envoy.RouteConfiguration{ Name: filterName, - VirtualHosts: []envoyroute.VirtualHost{ + VirtualHosts: []*envoyroute.VirtualHost{ { Name: filterName, Domains: []string{"*"}, - Routes: []envoyroute.Route{ + Routes: []*envoyroute.Route{ route, }, }, @@ -758,14 +1010,14 @@ // Add grpc bridge before router cfg.HttpFilters = append([]*envoyhttp.HttpFilter{{ Name: "envoy.grpc_http1_bridge", - ConfigType: &envoyhttp.HttpFilter_Config{Config: &types.Struct{}}, + ConfigType: &envoyhttp.HttpFilter_Config{Config: &pbstruct.Struct{}}, }}, cfg.HttpFilters...) } return makeFilter("envoy.http_connection_manager", cfg) } -func makeExtAuthFilter(token string) (envoylistener.Filter, error) { +func makeExtAuthFilter(token string) (*envoylistener.Filter, error) { cfg := &extauthz.ExtAuthz{ StatPrefix: "connect_authz", GrpcService: &envoycore.GrpcService{ @@ -790,21 +1042,21 @@ return makeFilter("envoy.ext_authz", cfg) } -func makeFilter(name string, cfg proto.Message) (envoylistener.Filter, error) { - // Ridiculous dance to make that pbstruct into types.Struct by... encoding it +func makeFilter(name string, cfg proto.Message) (*envoylistener.Filter, error) { + // Ridiculous dance to make that struct into pbstruct.Struct by... encoding it // as JSON and decoding again!! - cfgStruct, err := util.MessageToStruct(cfg) + cfgStruct, err := conversion.MessageToStruct(cfg) if err != nil { - return envoylistener.Filter{}, err + return nil, err } - return envoylistener.Filter{ + return &envoylistener.Filter{ Name: name, ConfigType: &envoylistener.Filter_Config{Config: cfgStruct}, }, nil } -func makeCommonTLSContext(cfgSnap *proxycfg.ConfigSnapshot) *envoyauth.CommonTlsContext { +func makeCommonTLSContextFromLeaf(cfgSnap *proxycfg.ConfigSnapshot, leaf *structs.IssuedCert) *envoyauth.CommonTlsContext { // Concatenate all the root PEMs into one. // TODO(banks): verify this actually works with Envoy (docs are not clear). rootPEMS := "" @@ -821,12 +1073,12 @@ &envoyauth.TlsCertificate{ CertificateChain: &envoycore.DataSource{ Specifier: &envoycore.DataSource_InlineString{ - InlineString: cfgSnap.ConnectProxy.Leaf.CertPEM, + InlineString: leaf.CertPEM, }, }, PrivateKey: &envoycore.DataSource{ Specifier: &envoycore.DataSource_InlineString{ - InlineString: cfgSnap.ConnectProxy.Leaf.PrivateKeyPEM, + InlineString: leaf.PrivateKeyPEM, }, }, }, @@ -843,3 +1095,42 @@ }, } } + +func makeCommonTLSContextFromFiles(caFile, certFile, keyFile string) *envoyauth.CommonTlsContext { + ctx := envoyauth.CommonTlsContext{ + TlsParams: &envoyauth.TlsParameters{}, + } + + // Verify certificate of peer if caFile is specified + if caFile != "" { + ctx.ValidationContextType = &envoyauth.CommonTlsContext_ValidationContext{ + ValidationContext: &envoyauth.CertificateValidationContext{ + TrustedCa: &envoycore.DataSource{ + Specifier: &envoycore.DataSource_Filename{ + Filename: caFile, + }, + }, + }, + } + } + + // Present certificate for mTLS if cert and key files are specified + if certFile != "" && keyFile != "" { + ctx.TlsCertificates = []*envoyauth.TlsCertificate{ + { + CertificateChain: &envoycore.DataSource{ + Specifier: &envoycore.DataSource_Filename{ + Filename: certFile, + }, + }, + PrivateKey: &envoycore.DataSource{ + Specifier: &envoycore.DataSource_Filename{ + Filename: keyFile, + }, + }, + }, + } + } + + return &ctx +} diff -Nru consul-1.7.4+dfsg1/agent/xds/listeners_test.go consul-1.8.7+dfsg1/agent/xds/listeners_test.go --- consul-1.7.4+dfsg1/agent/xds/listeners_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/listeners_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import ( "bytes" "fmt" - "path" + "path/filepath" "sort" "testing" "text/template" @@ -11,6 +11,7 @@ envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxysupport" "github.com/hashicorp/consul/sdk/testutil" testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" @@ -129,6 +130,17 @@ }, }, { + name: "custom-upstream-typed-ignored-with-disco-chain", + create: proxycfg.TestConfigSnapshotDiscoveryChainWithFailover, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.Proxy.Upstreams[0].Config["envoy_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: "custom-upstream", + IncludeType: true, + }) + }, + }, + { name: "splitter-with-resolver-redirect", create: proxycfg.TestConfigSnapshotDiscoveryChain_SplitterWithResolverRedirectMultiDC, setup: nil, @@ -224,6 +236,10 @@ create: proxycfg.TestConfigSnapshotMeshGateway, }, { + name: "mesh-gateway-using-federation-states", + create: proxycfg.TestConfigSnapshotMeshGatewayUsingFederationStates, + }, + { name: "mesh-gateway-no-services", create: proxycfg.TestConfigSnapshotMeshGatewayNoServices, }, @@ -259,53 +275,226 @@ } }, }, + { + name: "ingress-gateway", + create: proxycfg.TestConfigSnapshotIngressGateway, + setup: nil, + }, + { + name: "ingress-gateway-bind-addrs", + create: proxycfg.TestConfigSnapshotIngressGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TaggedAddresses = map[string]structs.ServiceAddress{ + "lan": structs.ServiceAddress{Address: "10.0.0.1"}, + "wan": structs.ServiceAddress{Address: "172.16.0.1"}, + } + snap.Proxy.Config = map[string]interface{}{ + "envoy_gateway_no_default_bind": true, + "envoy_gateway_bind_tagged_addresses": true, + "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{ + "foo": structs.ServiceAddress{Address: "8.8.8.8"}, + }, + } + }, + }, + { + name: "ingress-gateway-no-services", + create: proxycfg.TestConfigSnapshotIngressGatewayNoServices, + setup: nil, + }, + { + name: "ingress-with-chain-external-sni", + create: proxycfg.TestConfigSnapshotIngressExternalSNI, + setup: nil, + }, + { + name: "ingress-with-chain-and-overrides", + create: proxycfg.TestConfigSnapshotIngressWithOverrides, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughRemoteGateway, + setup: nil, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway", + create: proxycfg.TestConfigSnapshotIngressWithFailoverThroughLocalGateway, + setup: nil, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: proxycfg.TestConfigSnapshotIngress_SplitterWithResolverRedirectMultiDC, + setup: nil, + }, + { + name: "terminating-gateway", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: nil, + }, + { + name: "terminating-gateway-no-services", + create: proxycfg.TestConfigSnapshotTerminatingGatewayNoServices, + setup: nil, + }, + { + name: "terminating-gateway-custom-and-tagged-addresses", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.Proxy.Config = map[string]interface{}{ + "envoy_gateway_no_default_bind": true, + "envoy_gateway_bind_tagged_addresses": true, + "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{ + "foo": { + Address: "198.17.2.3", + Port: 8080, + }, + // This bind address should not get a listener due to deduplication + "duplicate-of-tagged-wan-addr": { + Address: "198.18.0.1", + Port: 443, + }, + }, + } + }, + }, + { + name: "terminating-gateway-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceResolvers = map[structs.ServiceName]*structs.ServiceResolverConfigEntry{ + structs.NewServiceName("web", nil): { + Kind: structs.ServiceResolver, + Name: "web", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, + }, + }, + structs.NewServiceName("web", nil): { + Kind: structs.ServiceResolver, + Name: "web", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, + }, + }, + } + }, + }, + { + name: "ingress-http-multiple-services", + create: proxycfg.TestConfigSnapshotIngress_HTTPMultipleServices, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.IngressGateway.Upstreams = map[proxycfg.IngressListenerKey]structs.Upstreams{ + proxycfg.IngressListenerKey{Protocol: "http", Port: 8080}: structs.Upstreams{ + { + DestinationName: "foo", + LocalBindPort: 8080, + }, + { + DestinationName: "bar", + LocalBindPort: 8080, + }, + }, + proxycfg.IngressListenerKey{Protocol: "http", Port: 443}: structs.Upstreams{ + { + DestinationName: "baz", + LocalBindPort: 443, + }, + { + DestinationName: "qux", + LocalBindPort: 443, + }, + }, + } + }, + }, + { + name: "terminating-gateway-no-api-cert", + create: proxycfg.TestConfigSnapshotTerminatingGateway, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.TerminatingGateway.ServiceLeaves[structs.NewServiceName("api", nil)] = nil + }, + }, + { + name: "ingress-with-tls-listener", + create: proxycfg.TestConfigSnapshotIngressWithTLSListener, + setup: nil, + }, } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - require := require.New(t) - - // Sanity check default with no overrides first - snap := tt.create(t) - - // We need to replace the TLS certs with deterministic ones to make golden - // files workable. Note we don't update these otherwise they'd change - // golder files for every test case and so not be any use! - if snap.ConnectProxy.Leaf != nil { - snap.ConnectProxy.Leaf.CertPEM = golden(t, "test-leaf-cert", "") - snap.ConnectProxy.Leaf.PrivateKeyPEM = golden(t, "test-leaf-key", "") - } - if snap.Roots != nil { - snap.Roots.Roots[0].RootCert = golden(t, "test-root-cert", "") - } + for _, envoyVersion := range proxysupport.EnvoyVersions { + sf := determineSupportedProxyFeaturesFromString(envoyVersion) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + require := require.New(t) + + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golder files for every test case and so not be any use! + setupTLSRootsAndLeaf(t, snap) + + if tt.setup != nil { + tt.setup(snap) + } + + // Need server just for logger dependency + logger := testutil.Logger(t) + s := Server{ + Logger: logger, + } + + cInfo := connectionInfo{ + Token: "my-token", + ProxyFeatures: sf, + } + listeners, err := s.listenersFromSnapshot(cInfo, snap) + sort.Slice(listeners, func(i, j int) bool { + return listeners[i].(*envoy.Listener).Name < listeners[j].(*envoy.Listener).Name + }) - if tt.setup != nil { - tt.setup(snap) - } + // For terminating gateways we create filter chain matches for services/subsets from the ServiceGroups map + for i := 0; i < len(listeners); i++ { + l := listeners[i].(*envoy.Listener) + + if l.FilterChains != nil { + // Sort chains by the matched name with the exception of the last one + // The last chain is a fallback and does not have a FilterChainMatch + sort.Slice(l.FilterChains[:len(l.FilterChains)-1], func(i, j int) bool { + return l.FilterChains[i].FilterChainMatch.ServerNames[0] < l.FilterChains[j].FilterChainMatch.ServerNames[0] + }) + } + } + + require.NoError(err) + r, err := createResponse(ListenerType, "00000001", "00000001", listeners) + require.NoError(err) + + gotJSON := responseToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } - // Need server just for logger dependency - logger := testutil.Logger(t) - s := Server{ - Logger: logger, + require.JSONEq(goldenEnvoy(t, filepath.Join("listeners", gName), envoyVersion, gotJSON), gotJSON) + }) } - - listeners, err := s.listenersFromSnapshot(snap, "my-token") - sort.Slice(listeners, func(i, j int) bool { - return listeners[i].(*envoy.Listener).Name < listeners[j].(*envoy.Listener).Name - }) - - require.NoError(err) - r, err := createResponse(ListenerType, "00000001", "00000001", listeners) - require.NoError(err) - - gotJSON := responseToJSON(t, r) - - gName := tt.name - if tt.overrideGoldenName != "" { - gName = tt.overrideGoldenName - } - - require.JSONEq(golden(t, path.Join("listeners", gName), gotJSON), gotJSON) }) } } diff -Nru consul-1.7.4+dfsg1/agent/xds/proxysupport/proxysupport.go consul-1.8.7+dfsg1/agent/xds/proxysupport/proxysupport.go --- consul-1.7.4+dfsg1/agent/xds/proxysupport/proxysupport.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/proxysupport/proxysupport.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +package proxysupport + +// EnvoyVersions lists the latest officially supported versions of envoy. +// +// This list must be sorted by semver descending. Only one point release for +// each major release should be present. +// +// see: https://www.consul.io/docs/connect/proxies/envoy#supported-versions +var EnvoyVersions = []string{ + "1.14.5", + "1.13.6", + "1.12.7", + "1.11.2", +} diff -Nru consul-1.7.4+dfsg1/agent/xds/response.go consul-1.8.7+dfsg1/agent/xds/response.go --- consul-1.7.4+dfsg1/agent/xds/response.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/response.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,26 +3,26 @@ import ( envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/types" - prototypes "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/any" + "github.com/golang/protobuf/ptypes/wrappers" ) func createResponse(typeURL string, version, nonce string, resources []proto.Message) (*envoy.DiscoveryResponse, error) { - anys := make([]types.Any, 0, len(resources)) + anys := make([]*any.Any, 0, len(resources)) for _, r := range resources { if r == nil { continue } - if any, ok := r.(*types.Any); ok { - anys = append(anys, *any) + if any, ok := r.(*any.Any); ok { + anys = append(anys, any) continue } data, err := proto.Marshal(r) if err != nil { return nil, err } - anys = append(anys, types.Any{ + anys = append(anys, &any.Any{ TypeUrl: typeURL, Value: data, }) @@ -36,8 +36,8 @@ return resp, nil } -func makeAddress(ip string, port int) envoycore.Address { - return envoycore.Address{ +func makeAddress(ip string, port int) *envoycore.Address { + return &envoycore.Address{ Address: &envoycore.Address_SocketAddress{ SocketAddress: &envoycore.SocketAddress{ Address: ip, @@ -49,15 +49,10 @@ } } -func makeAddressPtr(ip string, port int) *envoycore.Address { - a := makeAddress(ip, port) - return &a +func makeUint32Value(n int) *wrappers.UInt32Value { + return &wrappers.UInt32Value{Value: uint32(n)} } -func makeUint32Value(n int) *prototypes.UInt32Value { - return &prototypes.UInt32Value{Value: uint32(n)} -} - -func makeBoolValue(n bool) *prototypes.BoolValue { - return &prototypes.BoolValue{Value: n} +func makeBoolValue(n bool) *wrappers.BoolValue { + return &wrappers.BoolValue{Value: n} } diff -Nru consul-1.7.4+dfsg1/agent/xds/routes.go consul-1.8.7+dfsg1/agent/xds/routes.go --- consul-1.7.4+dfsg1/agent/xds/routes.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/routes.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,26 +3,30 @@ import ( "errors" "fmt" + "net" "strings" - "github.com/gogo/protobuf/proto" - envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" envoyroute "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" + envoymatcher "github.com/envoyproxy/go-control-plane/envoy/type/matcher" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" ) // routesFromSnapshot returns the xDS API representation of the "routes" in the // snapshot. -func routesFromSnapshot(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func routesFromSnapshot(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { if cfgSnap == nil { return nil, errors.New("nil config given") } switch cfgSnap.Kind { case structs.ServiceKindConnectProxy: - return routesFromSnapshotConnectProxy(cfgSnap, token) + return routesFromSnapshotConnectProxy(cInfo, cfgSnap) + case structs.ServiceKindIngressGateway: + return routesFromSnapshotIngressGateway(cInfo, cfgSnap) default: return nil, fmt.Errorf("Invalid service kind: %v", cfgSnap.Kind) } @@ -30,13 +34,12 @@ // routesFromSnapshotConnectProxy returns the xDS API representation of the // "routes" in the snapshot. -func routesFromSnapshotConnectProxy(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) { +func routesFromSnapshotConnectProxy(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { if cfgSnap == nil { return nil, errors.New("nil config given") } var resources []proto.Message - for _, u := range cfgSnap.Proxy.Upstreams { upstreamID := u.Identifier() @@ -48,42 +51,134 @@ if chain == nil || chain.IsDefault() { // TODO(rb): make this do the old school stuff too } else { - upstreamRoute, err := makeUpstreamRouteForDiscoveryChain(&u, chain, cfgSnap) + virtualHost, err := makeUpstreamRouteForDiscoveryChain(cInfo, upstreamID, chain, []string{"*"}) if err != nil { return nil, err } - if upstreamRoute != nil { - resources = append(resources, upstreamRoute) + + route := &envoy.RouteConfiguration{ + Name: upstreamID, + VirtualHosts: []*envoyroute.VirtualHost{virtualHost}, + // ValidateClusters defaults to true when defined statically and false + // when done via RDS. Re-set the sane value of true to prevent + // null-routing traffic. + ValidateClusters: makeBoolValue(true), } + resources = append(resources, route) } } // TODO(rb): make sure we don't generate an empty result - return resources, nil } +// routesFromSnapshotIngressGateway returns the xDS API representation of the +// "routes" in the snapshot. +func routesFromSnapshotIngressGateway(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) { + if cfgSnap == nil { + return nil, errors.New("nil config given") + } + + var result []proto.Message + for listenerKey, upstreams := range cfgSnap.IngressGateway.Upstreams { + // Do not create any route configuration for TCP listeners + if listenerKey.Protocol == "tcp" { + continue + } + + upstreamRoute := &envoy.RouteConfiguration{ + Name: listenerKey.RouteName(), + // ValidateClusters defaults to true when defined statically and false + // when done via RDS. Re-set the sane value of true to prevent + // null-routing traffic. + ValidateClusters: makeBoolValue(true), + } + for _, u := range upstreams { + upstreamID := u.Identifier() + chain := cfgSnap.IngressGateway.DiscoveryChain[upstreamID] + if chain == nil { + continue + } + + domains := generateUpstreamIngressDomains(listenerKey, u) + virtualHost, err := makeUpstreamRouteForDiscoveryChain(cInfo, upstreamID, chain, domains) + if err != nil { + return nil, err + } + upstreamRoute.VirtualHosts = append(upstreamRoute.VirtualHosts, virtualHost) + } + + result = append(result, upstreamRoute) + } + + return result, nil +} + +func generateUpstreamIngressDomains(listenerKey proxycfg.IngressListenerKey, u structs.Upstream) []string { + var domains []string + domainsSet := make(map[string]bool) + + namespace := u.GetEnterpriseMeta().NamespaceOrDefault() + switch { + case len(u.IngressHosts) > 0: + // If a user has specified hosts, do not add the default + // ".ingress.*" prefixes + domains = u.IngressHosts + case namespace != structs.IntentionDefaultNamespace: + domains = []string{fmt.Sprintf("%s.ingress.%s.*", u.DestinationName, namespace)} + default: + domains = []string{fmt.Sprintf("%s.ingress.*", u.DestinationName)} + } + + for _, h := range domains { + domainsSet[h] = true + } + + // Host headers may contain port numbers in them, so we need to make sure + // we match on the host with and without the port number. Well-known + // ports like HTTP/HTTPS are stripped from Host headers, but other ports + // will be in the header. + for _, h := range domains { + _, _, err := net.SplitHostPort(h) + // Error message from Go's net/ipsock.go + // We check to see if a port is not missing, and ignore the + // error from SplitHostPort otherwise, since we have previously + // validated the Host values and should trust the user's input. + if err == nil || !strings.Contains(err.Error(), "missing port in address") { + continue + } + + domainWithPort := fmt.Sprintf("%s:%d", h, listenerKey.Port) + + // Do not add a duplicate domain if a hostname with port is already in the + // set + if !domainsSet[domainWithPort] { + domains = append(domains, domainWithPort) + } + } + + return domains +} + func makeUpstreamRouteForDiscoveryChain( - u *structs.Upstream, + cInfo connectionInfo, + routeName string, chain *structs.CompiledDiscoveryChain, - cfgSnap *proxycfg.ConfigSnapshot, -) (*envoy.RouteConfiguration, error) { - upstreamID := u.Identifier() - routeName := upstreamID - - var routes []envoyroute.Route + serviceDomains []string, +) (*envoyroute.VirtualHost, error) { + var routes []*envoyroute.Route startNode := chain.Nodes[chain.StartNode] if startNode == nil { - panic("missing first node in compiled discovery chain for: " + chain.ServiceName) + return nil, fmt.Errorf("missing first node in compiled discovery chain for: %s", chain.ServiceName) } switch startNode.Type { case structs.DiscoveryGraphNodeTypeRouter: - routes = make([]envoyroute.Route, 0, len(startNode.Routes)) + routes = make([]*envoyroute.Route, 0, len(startNode.Routes)) for _, discoveryRoute := range startNode.Routes { - routeMatch := makeRouteMatchForDiscoveryRoute(discoveryRoute, chain.Protocol) + routeMatch := makeRouteMatchForDiscoveryRoute(cInfo, discoveryRoute, chain.Protocol) var ( routeAction *envoyroute.Route_Route @@ -93,13 +188,13 @@ nextNode := chain.Nodes[discoveryRoute.NextNode] switch nextNode.Type { case structs.DiscoveryGraphNodeTypeSplitter: - routeAction, err = makeRouteActionForSplitter(nextNode.Splits, chain, cfgSnap) + routeAction, err = makeRouteActionForSplitter(nextNode.Splits, chain) if err != nil { return nil, err } case structs.DiscoveryGraphNodeTypeResolver: - routeAction = makeRouteActionForSingleCluster(nextNode.Resolver.Target, chain, cfgSnap) + routeAction = makeRouteActionForSingleCluster(nextNode.Resolver.Target, chain) default: return nil, fmt.Errorf("unexpected graph node after route %q", nextNode.Type) @@ -114,7 +209,7 @@ } if destination.RequestTimeout > 0 { - routeAction.Route.Timeout = &destination.RequestTimeout + routeAction.Route.Timeout = ptypes.DurationProto(destination.RequestTimeout) } if destination.HasRetryFeatures() { @@ -140,62 +235,55 @@ } } - routes = append(routes, envoyroute.Route{ + routes = append(routes, &envoyroute.Route{ Match: routeMatch, Action: routeAction, }) } case structs.DiscoveryGraphNodeTypeSplitter: - routeAction, err := makeRouteActionForSplitter(startNode.Splits, chain, cfgSnap) + routeAction, err := makeRouteActionForSplitter(startNode.Splits, chain) if err != nil { return nil, err } - defaultRoute := envoyroute.Route{ + defaultRoute := &envoyroute.Route{ Match: makeDefaultRouteMatch(), Action: routeAction, } - routes = []envoyroute.Route{defaultRoute} + routes = []*envoyroute.Route{defaultRoute} case structs.DiscoveryGraphNodeTypeResolver: - routeAction := makeRouteActionForSingleCluster(startNode.Resolver.Target, chain, cfgSnap) + routeAction := makeRouteActionForSingleCluster(startNode.Resolver.Target, chain) - defaultRoute := envoyroute.Route{ + defaultRoute := &envoyroute.Route{ Match: makeDefaultRouteMatch(), Action: routeAction, } - routes = []envoyroute.Route{defaultRoute} + routes = []*envoyroute.Route{defaultRoute} default: - panic("unknown first node in discovery chain of type: " + startNode.Type) + return nil, fmt.Errorf("unknown first node in discovery chain of type: %s", startNode.Type) } - return &envoy.RouteConfiguration{ - Name: routeName, - VirtualHosts: []envoyroute.VirtualHost{ - envoyroute.VirtualHost{ - Name: routeName, - Domains: []string{"*"}, - Routes: routes, - }, - }, - // ValidateClusters defaults to true when defined statically and false - // when done via RDS. Re-set the sane value of true to prevent - // null-routing traffic. - ValidateClusters: makeBoolValue(true), - }, nil + host := &envoyroute.VirtualHost{ + Name: routeName, + Domains: serviceDomains, + Routes: routes, + } + + return host, nil } -func makeRouteMatchForDiscoveryRoute(discoveryRoute *structs.DiscoveryRoute, protocol string) envoyroute.RouteMatch { +func makeRouteMatchForDiscoveryRoute(cInfo connectionInfo, discoveryRoute *structs.DiscoveryRoute, protocol string) *envoyroute.RouteMatch { match := discoveryRoute.Definition.Match if match == nil || match.IsEmpty() { return makeDefaultRouteMatch() } - em := envoyroute.RouteMatch{} + em := &envoyroute.RouteMatch{} switch { case match.HTTP.PathExact != "": @@ -207,8 +295,14 @@ Prefix: match.HTTP.PathPrefix, } case match.HTTP.PathRegex != "": - em.PathSpecifier = &envoyroute.RouteMatch_Regex{ - Regex: match.HTTP.PathRegex, + if cInfo.ProxyFeatures.RouterMatchSafeRegex { + em.PathSpecifier = &envoyroute.RouteMatch_SafeRegex{ + SafeRegex: makeEnvoyRegexMatch(match.HTTP.PathRegex), + } + } else { + em.PathSpecifier = &envoyroute.RouteMatch_Regex{ + Regex: match.HTTP.PathRegex, + } } default: em.PathSpecifier = &envoyroute.RouteMatch_Prefix{ @@ -229,8 +323,14 @@ ExactMatch: hdr.Exact, } case hdr.Regex != "": - eh.HeaderMatchSpecifier = &envoyroute.HeaderMatcher_RegexMatch{ - RegexMatch: hdr.Regex, + if cInfo.ProxyFeatures.RouterMatchSafeRegex { + eh.HeaderMatchSpecifier = &envoyroute.HeaderMatcher_SafeRegexMatch{ + SafeRegexMatch: makeEnvoyRegexMatch(hdr.Regex), + } + } else { + eh.HeaderMatchSpecifier = &envoyroute.HeaderMatcher_RegexMatch{ + RegexMatch: hdr.Regex, + } } case hdr.Prefix != "": eh.HeaderMatchSpecifier = &envoyroute.HeaderMatcher_PrefixMatch{ @@ -261,10 +361,17 @@ eh := &envoyroute.HeaderMatcher{ Name: ":method", - HeaderMatchSpecifier: &envoyroute.HeaderMatcher_RegexMatch{ + } + if cInfo.ProxyFeatures.RouterMatchSafeRegex { + eh.HeaderMatchSpecifier = &envoyroute.HeaderMatcher_SafeRegexMatch{ + SafeRegexMatch: makeEnvoyRegexMatch(methodHeaderRegex), + } + } else { + eh.HeaderMatchSpecifier = &envoyroute.HeaderMatcher_RegexMatch{ RegexMatch: methodHeaderRegex, - }, + } } + em.Headers = append(em.Headers, eh) } @@ -277,12 +384,38 @@ switch { case qm.Exact != "": - eq.Value = qm.Exact + if cInfo.ProxyFeatures.RouterMatchSafeRegex { + eq.QueryParameterMatchSpecifier = &envoyroute.QueryParameterMatcher_StringMatch{ + StringMatch: &envoymatcher.StringMatcher{ + MatchPattern: &envoymatcher.StringMatcher_Exact{ + Exact: qm.Exact, + }, + }, + } + } else { + eq.Value = qm.Exact + } case qm.Regex != "": - eq.Value = qm.Regex - eq.Regex = makeBoolValue(true) + if cInfo.ProxyFeatures.RouterMatchSafeRegex { + eq.QueryParameterMatchSpecifier = &envoyroute.QueryParameterMatcher_StringMatch{ + StringMatch: &envoymatcher.StringMatcher{ + MatchPattern: &envoymatcher.StringMatcher_SafeRegex{ + SafeRegex: makeEnvoyRegexMatch(qm.Regex), + }, + }, + } + } else { + eq.Value = qm.Regex + eq.Regex = makeBoolValue(true) + } case qm.Present: - eq.Value = "" + if cInfo.ProxyFeatures.RouterMatchSafeRegex { + eq.QueryParameterMatchSpecifier = &envoyroute.QueryParameterMatcher_PresentMatch{ + PresentMatch: true, + } + } else { + eq.Value = "" + } default: continue // skip this impossible situation } @@ -294,8 +427,8 @@ return em } -func makeDefaultRouteMatch() envoyroute.RouteMatch { - return envoyroute.RouteMatch{ +func makeDefaultRouteMatch() *envoyroute.RouteMatch { + return &envoyroute.RouteMatch{ PathSpecifier: &envoyroute.RouteMatch_Prefix{ Prefix: "/", }, @@ -307,7 +440,7 @@ } } -func makeRouteActionForSingleCluster(targetID string, chain *structs.CompiledDiscoveryChain, cfgSnap *proxycfg.ConfigSnapshot) *envoyroute.Route_Route { +func makeRouteActionForSingleCluster(targetID string, chain *structs.CompiledDiscoveryChain) *envoyroute.Route_Route { target := chain.Targets[targetID] clusterName := CustomizeClusterName(target.Name, chain) @@ -321,7 +454,7 @@ } } -func makeRouteActionForSplitter(splits []*structs.DiscoverySplit, chain *structs.CompiledDiscoveryChain, cfgSnap *proxycfg.ConfigSnapshot) (*envoyroute.Route_Route, error) { +func makeRouteActionForSplitter(splits []*structs.DiscoverySplit, chain *structs.CompiledDiscoveryChain) (*envoyroute.Route_Route, error) { clusters := make([]*envoyroute.WeightedCluster_ClusterWeight, 0, len(splits)) for _, split := range splits { nextNode := chain.Nodes[split.NextNode] @@ -356,3 +489,12 @@ }, }, nil } + +func makeEnvoyRegexMatch(patt string) *envoymatcher.RegexMatcher { + return &envoymatcher.RegexMatcher{ + EngineType: &envoymatcher.RegexMatcher_GoogleRe2{ + GoogleRe2: &envoymatcher.RegexMatcher_GoogleRE2{}, + }, + Regex: patt, + } +} diff -Nru consul-1.7.4+dfsg1/agent/xds/routes_test.go consul-1.8.7+dfsg1/agent/xds/routes_test.go --- consul-1.7.4+dfsg1/agent/xds/routes_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/routes_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,35 +1,22 @@ package xds import ( - "path" + "path/filepath" "sort" "testing" "time" envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxysupport" testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" ) func TestRoutesFromSnapshot(t *testing.T) { - httpMatch := func(http *structs.ServiceRouteHTTPMatch) *structs.ServiceRouteMatch { - return &structs.ServiceRouteMatch{HTTP: http} - } - httpMatchHeader := func(headers ...structs.ServiceRouteHTTPMatchHeader) *structs.ServiceRouteMatch { - return httpMatch(&structs.ServiceRouteHTTPMatch{ - Header: headers, - }) - } - httpMatchParam := func(params ...structs.ServiceRouteHTTPMatchQueryParam) *structs.ServiceRouteMatch { - return httpMatch(&structs.ServiceRouteHTTPMatch{ - QueryParam: params, - }) - } - toService := func(svc string) *structs.ServiceRouteDestination { - return &structs.ServiceRouteDestination{Service: svc} - } tests := []struct { name string @@ -66,59 +53,96 @@ setup: nil, }, { - name: "connect-proxy-with-chain-and-splitter", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChainWithEntries(t, - &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "http", - }, - }, - &structs.ServiceSplitterConfigEntry{ - Kind: structs.ServiceSplitter, - Name: "db", - Splits: []structs.ServiceSplit{ - {Weight: 95.5, Service: "big-side"}, - {Weight: 4, Service: "goldilocks-side"}, - {Weight: 0.5, Service: "lil-bit-side"}, - }, - }, - ) - }, - setup: nil, + name: "connect-proxy-with-chain-and-splitter", + create: proxycfg.TestConfigSnapshotDiscoveryChainWithSplitter, + setup: nil, }, { - name: "connect-proxy-with-grpc-router", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChainWithEntries(t, - &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "grpc", - }, - }, - &structs.ServiceRouterConfigEntry{ - Kind: structs.ServiceRouter, - Name: "db", - Routes: []structs.ServiceRoute{ - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathExact: "/fgrpc.PingServer/Ping", - }), - Destination: toService("prefix"), - }, - }, - }, - ) - }, + name: "connect-proxy-with-grpc-router", + create: proxycfg.TestConfigSnapshotDiscoveryChainWithGRPCRouter, + setup: nil, + }, + { + name: "connect-proxy-with-chain-and-router", + create: proxycfg.TestConfigSnapshotDiscoveryChainWithRouter, + setup: nil, + }, + // TODO(rb): test match stanza skipped for grpc + // Start ingress gateway test cases + { + name: "ingress-defaults-no-chain", + create: proxycfg.TestConfigSnapshotIngressGateway, + setup: nil, // Default snapshot + }, + { + name: "ingress-with-chain", + create: proxycfg.TestConfigSnapshotIngress, + setup: nil, + }, + { + name: "ingress-with-chain-external-sni", + create: proxycfg.TestConfigSnapshotIngressExternalSNI, + setup: nil, + }, + { + name: "ingress-with-chain-and-overrides", + create: proxycfg.TestConfigSnapshotIngressWithOverrides, + setup: nil, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: proxycfg.TestConfigSnapshotIngress_SplitterWithResolverRedirectMultiDC, + setup: nil, }, { - name: "connect-proxy-with-chain-and-router", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChainWithEntries(t, + name: "ingress-with-chain-and-splitter", + create: proxycfg.TestConfigSnapshotIngressWithSplitter, + setup: nil, + }, + { + name: "ingress-with-grpc-router", + create: proxycfg.TestConfigSnapshotIngressWithGRPCRouter, + setup: nil, + }, + { + name: "ingress-with-chain-and-router", + create: proxycfg.TestConfigSnapshotIngressWithRouter, + setup: nil, + }, + { + name: "ingress-http-multiple-services", + create: proxycfg.TestConfigSnapshotIngress_HTTPMultipleServices, + setup: func(snap *proxycfg.ConfigSnapshot) { + snap.IngressGateway.Upstreams = map[proxycfg.IngressListenerKey]structs.Upstreams{ + proxycfg.IngressListenerKey{Protocol: "http", Port: 8080}: structs.Upstreams{ + { + DestinationName: "foo", + LocalBindPort: 8080, + IngressHosts: []string{ + "test1.example.com", + "test2.example.com", + "test2.example.com:8080", + }, + }, + { + DestinationName: "bar", + LocalBindPort: 8080, + }, + }, + proxycfg.IngressListenerKey{Protocol: "http", Port: 443}: structs.Upstreams{ + { + DestinationName: "baz", + LocalBindPort: 443, + }, + { + DestinationName: "qux", + LocalBindPort: 443, + }, + }, + } + + // We do not add baz/qux here so that we test the chain.IsDefault() case + entries := []structs.ConfigEntry{ &structs.ProxyConfigEntry{ Kind: structs.ProxyDefaults, Name: structs.ProxyConfigGlobal, @@ -126,243 +150,73 @@ "protocol": "http", }, }, - &structs.ServiceSplitterConfigEntry{ - Kind: structs.ServiceSplitter, - Name: "split-3-ways", - Splits: []structs.ServiceSplit{ - {Weight: 95.5, Service: "big-side"}, - {Weight: 4, Service: "goldilocks-side"}, - {Weight: 0.5, Service: "lil-bit-side"}, - }, - }, - &structs.ServiceRouterConfigEntry{ - Kind: structs.ServiceRouter, - Name: "db", - Routes: []structs.ServiceRoute{ - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/prefix", - }), - Destination: toService("prefix"), - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathExact: "/exact", - }), - Destination: toService("exact"), - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathRegex: "/regex", - }), - Destination: toService("regex"), - }, - { - Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ - Name: "x-debug", - Present: true, - }), - Destination: toService("hdr-present"), - }, - { - Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ - Name: "x-debug", - Present: true, - Invert: true, - }), - Destination: toService("hdr-not-present"), - }, - { - Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ - Name: "x-debug", - Exact: "exact", - }), - Destination: toService("hdr-exact"), - }, - { - Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ - Name: "x-debug", - Prefix: "prefix", - }), - Destination: toService("hdr-prefix"), - }, - { - Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ - Name: "x-debug", - Suffix: "suffix", - }), - Destination: toService("hdr-suffix"), - }, - { - Match: httpMatchHeader(structs.ServiceRouteHTTPMatchHeader{ - Name: "x-debug", - Regex: "regex", - }), - Destination: toService("hdr-regex"), - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - Methods: []string{"GET", "PUT"}, - }), - Destination: toService("just-methods"), - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - Header: []structs.ServiceRouteHTTPMatchHeader{ - { - Name: "x-debug", - Exact: "exact", - }, - }, - Methods: []string{"GET", "PUT"}, - }), - Destination: toService("hdr-exact-with-method"), - }, - { - Match: httpMatchParam(structs.ServiceRouteHTTPMatchQueryParam{ - Name: "secretparam1", - Exact: "exact", - }), - Destination: toService("prm-exact"), - }, - { - Match: httpMatchParam(structs.ServiceRouteHTTPMatchQueryParam{ - Name: "secretparam2", - Regex: "regex", - }), - Destination: toService("prm-regex"), - }, - { - Match: httpMatchParam(structs.ServiceRouteHTTPMatchQueryParam{ - Name: "secretparam3", - Present: true, - }), - Destination: toService("prm-present"), - }, - { - Match: nil, - Destination: toService("nil-match"), - }, - { - Match: &structs.ServiceRouteMatch{}, - Destination: toService("empty-match-1"), - }, - { - Match: &structs.ServiceRouteMatch{ - HTTP: &structs.ServiceRouteHTTPMatch{}, - }, - Destination: toService("empty-match-2"), - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/prefix", - }), - Destination: &structs.ServiceRouteDestination{ - Service: "prefix-rewrite-1", - PrefixRewrite: "/", - }, - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/prefix", - }), - Destination: &structs.ServiceRouteDestination{ - Service: "prefix-rewrite-2", - PrefixRewrite: "/nested/newlocation", - }, - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/timeout", - }), - Destination: &structs.ServiceRouteDestination{ - Service: "req-timeout", - RequestTimeout: 33 * time.Second, - }, - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/retry-connect", - }), - Destination: &structs.ServiceRouteDestination{ - Service: "retry-connect", - NumRetries: 15, - RetryOnConnectFailure: true, - }, - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/retry-codes", - }), - Destination: &structs.ServiceRouteDestination{ - Service: "retry-codes", - NumRetries: 15, - RetryOnStatusCodes: []uint32{401, 409, 451}, - }, - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/retry-both", - }), - Destination: &structs.ServiceRouteDestination{ - Service: "retry-both", - RetryOnConnectFailure: true, - RetryOnStatusCodes: []uint32{401, 409, 451}, - }, - }, - { - Match: httpMatch(&structs.ServiceRouteHTTPMatch{ - PathPrefix: "/split-3-ways", - }), - Destination: toService("split-3-ways"), - }, - }, - }, - ) + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "foo", + ConnectTimeout: 22 * time.Second, + }, + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "bar", + ConnectTimeout: 22 * time.Second, + }, + } + fooChain := discoverychain.TestCompileConfigEntries(t, "foo", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + barChain := discoverychain.TestCompileConfigEntries(t, "bar", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + bazChain := discoverychain.TestCompileConfigEntries(t, "baz", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + quxChain := discoverychain.TestCompileConfigEntries(t, "qux", "default", "dc1", connect.TestClusterID+".consul", "dc1", nil, entries...) + + snap.IngressGateway.DiscoveryChain = map[string]*structs.CompiledDiscoveryChain{ + "foo": fooChain, + "bar": barChain, + "baz": bazChain, + "qux": quxChain, + } }, - setup: nil, }, - // TODO(rb): test match stanza skipped for grpc } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - require := require.New(t) - - // Sanity check default with no overrides first - snap := tt.create(t) - - // We need to replace the TLS certs with deterministic ones to make golden - // files workable. Note we don't update these otherwise they'd change - // golden files for every test case and so not be any use! - if snap.ConnectProxy.Leaf != nil { - snap.ConnectProxy.Leaf.CertPEM = golden(t, "test-leaf-cert", "") - snap.ConnectProxy.Leaf.PrivateKeyPEM = golden(t, "test-leaf-key", "") - } - if snap.Roots != nil { - snap.Roots.Roots[0].RootCert = golden(t, "test-root-cert", "") - } + for _, envoyVersion := range proxysupport.EnvoyVersions { + sf := determineSupportedProxyFeaturesFromString(envoyVersion) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + require := require.New(t) + + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golden files for every test case and so not be any use! + setupTLSRootsAndLeaf(t, snap) + + if tt.setup != nil { + tt.setup(snap) + } + + cInfo := connectionInfo{ + Token: "my-token", + ProxyFeatures: sf, + } + routes, err := routesFromSnapshot(cInfo, snap) + require.NoError(err) + sort.Slice(routes, func(i, j int) bool { + return routes[i].(*envoy.RouteConfiguration).Name < routes[j].(*envoy.RouteConfiguration).Name + }) + r, err := createResponse(RouteType, "00000001", "00000001", routes) + require.NoError(err) + + gotJSON := responseToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } - if tt.setup != nil { - tt.setup(snap) + require.JSONEq(goldenEnvoy(t, filepath.Join("routes", gName), envoyVersion, gotJSON), gotJSON) + }) } - - routes, err := routesFromSnapshot(snap, "my-token") - require.NoError(err) - sort.Slice(routes, func(i, j int) bool { - return routes[i].(*envoy.RouteConfiguration).Name < routes[j].(*envoy.RouteConfiguration).Name - }) - r, err := createResponse(RouteType, "00000001", "00000001", routes) - require.NoError(err) - - gotJSON := responseToJSON(t, r) - - gName := tt.name - if tt.overrideGoldenName != "" { - gName = tt.overrideGoldenName - } - - require.JSONEq(golden(t, path.Join("routes", gName), gotJSON), gotJSON) }) } } diff -Nru consul-1.7.4+dfsg1/agent/xds/server.go consul-1.8.7+dfsg1/agent/xds/server.go --- consul-1.7.4+dfsg1/agent/xds/server.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/server.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,18 +7,12 @@ "sync/atomic" "time" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/credentials" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - envoy "github.com/envoyproxy/go-control-plane/envoy/api/v2" + envoycore "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" envoyauthz "github.com/envoyproxy/go-control-plane/envoy/service/auth/v2" envoyauthzalpha "github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha" envoydisco "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2" - "github.com/gogo/googleapis/google/rpc" - "github.com/gogo/protobuf/proto" + "github.com/golang/protobuf/proto" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/connect" @@ -27,6 +21,12 @@ "github.com/hashicorp/consul/logging" "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/go-hclog" + rpcstatus "google.golang.org/genproto/googleapis/rpc/status" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" ) // ADSStream is a shorter way of referring to this thing... @@ -190,48 +190,61 @@ var nonce uint64 // xDS works with versions of configs. Internally we don't have a consistent - // version. We could just hash the config since versions don't have to be - // ordered as far as I can tell, but it's cheaper just to increment a counter + // version. We could hash the config since versions don't have to be + // ordered as far as I can tell, but it is cheaper to increment a counter // every time we observe a new config since the upstream proxycfg package only // delivers updates when there are actual changes. var configVersion uint64 // Loop state - var cfgSnap *proxycfg.ConfigSnapshot - var req *envoy.DiscoveryRequest - var ok bool - var stateCh <-chan *proxycfg.ConfigSnapshot - var watchCancel func() - var proxyID structs.ServiceID + var ( + cfgSnap *proxycfg.ConfigSnapshot + req *envoy.DiscoveryRequest + node *envoycore.Node + proxyFeatures supportedProxyFeatures + ok bool + stateCh <-chan *proxycfg.ConfigSnapshot + watchCancel func() + proxyID structs.ServiceID + ) // need to run a small state machine to get through initial authentication. var state = stateInit // Configure handlers for each type of request handlers := map[string]*xDSType{ - EndpointType: &xDSType{ + EndpointType: { typeURL: EndpointType, resources: s.endpointsFromSnapshot, stream: stream, }, - ClusterType: &xDSType{ + ClusterType: { typeURL: ClusterType, resources: s.clustersFromSnapshot, stream: stream, allowEmptyFn: func(cfgSnap *proxycfg.ConfigSnapshot) bool { - // Mesh gateways are allowed to inform CDS of no clusters. - return cfgSnap.Kind == structs.ServiceKindMeshGateway + // Mesh, Ingress, and Terminating gateways are allowed to inform CDS of + // no clusters. + return cfgSnap.Kind == structs.ServiceKindMeshGateway || + cfgSnap.Kind == structs.ServiceKindTerminatingGateway || + cfgSnap.Kind == structs.ServiceKindIngressGateway }, }, - RouteType: &xDSType{ + RouteType: { typeURL: RouteType, resources: routesFromSnapshot, stream: stream, + allowEmptyFn: func(cfgSnap *proxycfg.ConfigSnapshot) bool { + return cfgSnap.Kind == structs.ServiceKindIngressGateway + }, }, - ListenerType: &xDSType{ + ListenerType: { typeURL: ListenerType, resources: s.listenersFromSnapshot, stream: stream, + allowEmptyFn: func(cfgSnap *proxycfg.ConfigSnapshot) bool { + return cfgSnap.Kind == structs.ServiceKindIngressGateway + }, }, } @@ -245,8 +258,7 @@ return status.Errorf(codes.Unauthenticated, "unauthenticated: no config snapshot") } - token := tokenFromStream(stream) - rule, err := s.ResolveToken(token) + rule, err := s.ResolveToken(tokenFromContext(stream.Context())) if acl.IsErrNotFound(err) { return status.Errorf(codes.Unauthenticated, "unauthenticated: %v", err) @@ -263,7 +275,7 @@ if rule != nil && rule.ServiceWrite(cfgSnap.Proxy.DestinationServiceName, &authzContext) != acl.Allow { return status.Errorf(codes.PermissionDenied, "permission denied") } - case structs.ServiceKindMeshGateway: + case structs.ServiceKindMeshGateway, structs.ServiceKindTerminatingGateway, structs.ServiceKindIngressGateway: cfgSnap.ProxyID.EnterpriseMeta.FillAuthzContext(&authzContext) if rule != nil && rule.ServiceWrite(cfgSnap.Service, &authzContext) != acl.Allow { return status.Errorf(codes.PermissionDenied, "permission denied") @@ -296,8 +308,14 @@ if req.TypeUrl == "" { return status.Errorf(codes.InvalidArgument, "type URL is required for ADS") } + + if node == nil && req.Node != nil { + node = req.Node + proxyFeatures = determineSupportedProxyFeatures(req.Node) + } + if handler, ok := handlers[req.TypeUrl]; ok { - handler.Recv(req) + handler.Recv(req, node, proxyFeatures) } case cfgSnap = <-stateCh: // We got a new config, update the version counter @@ -367,10 +385,12 @@ } type xDSType struct { - typeURL string - stream ADSStream - req *envoy.DiscoveryRequest - lastNonce string + typeURL string + stream ADSStream + req *envoy.DiscoveryRequest + node *envoycore.Node + proxyFeatures supportedProxyFeatures + lastNonce string // lastVersion is the version that was last sent to the proxy. It is needed // because we don't want to send the same version more than once. // req.VersionInfo may be an older version than the most recent once sent in @@ -379,13 +399,21 @@ // last version we sent with a Nack then req.VersionInfo will be the older // version it's hanging on to. lastVersion uint64 - resources func(cfgSnap *proxycfg.ConfigSnapshot, token string) ([]proto.Message, error) + resources func(cInfo connectionInfo, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) allowEmptyFn func(cfgSnap *proxycfg.ConfigSnapshot) bool } -func (t *xDSType) Recv(req *envoy.DiscoveryRequest) { +// connectionInfo represents details specific to this connection +type connectionInfo struct { + Token string + ProxyFeatures supportedProxyFeatures +} + +func (t *xDSType) Recv(req *envoy.DiscoveryRequest, node *envoycore.Node, proxyFeatures supportedProxyFeatures) { if t.lastNonce == "" || t.lastNonce == req.GetResponseNonce() { t.req = req + t.node = node + t.proxyFeatures = proxyFeatures } } @@ -397,7 +425,12 @@ // Already sent this version return nil } - resources, err := t.resources(cfgSnap, tokenFromStream(t.stream)) + + cInfo := connectionInfo{ + Token: tokenFromContext(t.stream.Context()), + ProxyFeatures: t.proxyFeatures, + } + resources, err := t.resources(cInfo, cfgSnap) if err != nil { return err } @@ -436,10 +469,6 @@ return nil } -func tokenFromStream(stream ADSStream) string { - return tokenFromContext(stream.Context()) -} - func tokenFromContext(ctx context.Context) string { md, ok := metadata.FromIncomingContext(ctx) if !ok { @@ -459,8 +488,8 @@ func deniedResponse(reason string) (*envoyauthz.CheckResponse, error) { return &envoyauthz.CheckResponse{ - Status: &rpc.Status{ - Code: int32(rpc.PERMISSION_DENIED), + Status: &rpcstatus.Status{ + Code: int32(codes.PermissionDenied), Message: "Denied: " + reason, }, }, nil @@ -532,8 +561,8 @@ s.Logger.Debug("Connect AuthZ ALLOWED", "source", r.Attributes.Source.Principal, "destination", r.Attributes.Destination.Principal, "reason", reason) return &envoyauthz.CheckResponse{ - Status: &rpc.Status{ - Code: int32(rpc.OK), + Status: &rpcstatus.Status{ + Code: int32(codes.OK), Message: "ALLOWED: " + reason, }, }, nil diff -Nru consul-1.7.4+dfsg1/agent/xds/server_test.go consul-1.8.7+dfsg1/agent/xds/server_test.go --- consul-1.7.4+dfsg1/agent/xds/server_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/server_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -344,10 +344,10 @@ "tlsCertificates": [ { "certificateChain": { - "inlineString": "` + strings.Replace(snap.ConnectProxy.Leaf.CertPEM, "\n", "\\n", -1) + `" + "inlineString": "` + strings.Replace(snap.Leaf().CertPEM, "\n", "\\n", -1) + `" }, "privateKey": { - "inlineString": "` + strings.Replace(snap.ConnectProxy.Leaf.PrivateKeyPEM, "\n", "\\n", -1) + `" + "inlineString": "` + strings.Replace(snap.Leaf().PrivateKeyPEM, "\n", "\\n", -1) + `" } } ], @@ -400,6 +400,7 @@ acl string token string wantDenied bool + cfgSnap *proxycfg.ConfigSnapshot }{ // Note that although we've stubbed actual ACL checks in the testManager // ConnectAuthorize mock, by asserting against specific reason strings here @@ -437,6 +438,14 @@ token: "service-write-on-not-web", wantDenied: true, }, + { + name: "ingress default deny, write token on different service", + defaultDeny: true, + acl: `service "not-ingress" { policy = "write" }`, + token: "service-write-on-not-ingress", + wantDenied: true, + cfgSnap: proxycfg.TestConfigSnapshotIngressGateway(t), + }, } for _, tt := range tests { @@ -480,7 +489,10 @@ mgr.RegisterProxy(t, sid) // Deliver a new snapshot - snap := proxycfg.TestConfigSnapshot(t) + snap := tt.cfgSnap + if snap == nil { + snap = proxycfg.TestConfigSnapshot(t) + } mgr.DeliverConfig(t, sid, snap) // Send initial listener discover, in real life Envoy always sends cluster @@ -841,3 +853,70 @@ }) } } + +func TestServer_StreamAggregatedResources_IngressEmptyResponse(t *testing.T) { + logger := testutil.Logger(t) + mgr := newTestManager(t) + aclResolve := func(id string) (acl.Authorizer, error) { + // Allow all + return acl.RootAuthorizer("manage"), nil + } + envoy := NewTestEnvoy(t, "ingress-gateway", "") + defer envoy.Close() + + s := Server{ + Logger: logger, + CfgMgr: mgr, + Authz: mgr, + ResolveToken: aclResolve, + } + s.Initialize() + + sid := structs.NewServiceID("ingress-gateway", nil) + + go func() { + err := s.StreamAggregatedResources(envoy.stream) + require.NoError(t, err) + }() + + // Register the proxy to create state needed to Watch() on + mgr.RegisterProxy(t, sid) + + // Send initial cluster discover + envoy.SendReq(t, ClusterType, 0, 0) + + // Check no response sent yet + assertChanBlocked(t, envoy.stream.sendCh) + + // Deliver a new snapshot with no services + snap := proxycfg.TestConfigSnapshotIngressGatewayNoServices(t) + mgr.DeliverConfig(t, sid, snap) + + emptyClusterJSON := `{ + "versionInfo": "` + hexString(1) + `", + "resources": [], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "` + hexString(1) + `" + }` + emptyListenerJSON := `{ + "versionInfo": "` + hexString(1) + `", + "resources": [], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "` + hexString(2) + `" + }` + emptyRouteJSON := `{ + "versionInfo": "` + hexString(1) + `", + "resources": [], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "` + hexString(3) + `" + }` + + assertResponseSent(t, envoy.stream.sendCh, emptyClusterJSON) + + // Send initial listener discover + envoy.SendReq(t, ListenerType, 0, 0) + assertResponseSent(t, envoy.stream.sendCh, emptyListenerJSON) + + envoy.SendReq(t, RouteType, 0, 0) + assertResponseSent(t, envoy.stream.sendCh, emptyRouteJSON) +} diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/alt-test-leaf-cert.golden consul-1.8.7+dfsg1/agent/xds/testdata/alt-test-leaf-cert.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/alt-test-leaf-cert.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/alt-test-leaf-cert.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx +CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj +bzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw +FQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB +IDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx +NDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j +b25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l +0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+ +o4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB +BQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H +jSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ +y+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs +aG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah +LpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I +Dw== +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/alt-test-leaf-key.golden consul-1.8.7+dfsg1/agent/xds/testdata/alt-test-leaf-key.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/alt-test-leaf-key.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/alt-test-leaf-key.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49 +AwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88 +AppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg== +-----END EC PRIVATE KEY----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/alt-test-root-cert.golden consul-1.8.7+dfsg1/agent/xds/testdata/alt-test-root-cert.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/alt-test-root-cert.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/alt-test-root-cert.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC6zCCApGgAwIBAgIQSLPxgLmgVh30JCHk+3oypzAKBggqhkjOPQQDAjCBuDEL +MAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv +MRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV +BgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg +OTY2Mzg3MzUwOTM1NTk1MjA0OTcxNDA5NTcwNjUxNzQ5ODc0MzEwHhcNMjAwNDE0 +MjIzMTQ3WhcNMjUwNDEzMjIzMTQ3WjCBuDELMAkGA1UEBhMCVVMxCzAJBgNVBAgT +AkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRowGAYDVQQJExExMDEgU2Vjb25k +IFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAVBgNVBAoTDkhhc2hpQ29ycCBJbmMu +MT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0EgOTY2Mzg3MzUwOTM1NTk1MjA0OTcx +NDA5NTcwNjUxNzQ5ODc0MzEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATwxYvc +sS41PyFkQT/Ig8Wi0G7p38YcH8qCKL0irTwFou0MtFRbXLFzjfeSqjr9DbsZVFGf +Bbo0WVXZBsgb2OETo3sweTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zApBgNVHQ4EIgQgNKbPPepvRHXSAPTc+a/BXBzFX1qJy+Zi7qtjlFX7qtUwKwYD +VR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJy+Zi7qtjlFX7qtUwCgYIKoZI +zj0EAwIDSAAwRQIhAIknhzVE0ygBcVOHx1dqmQsZklWLDpKlAL3KkDuj0dQ+AiBU +OdRsTln8773X3OJkmAHhlgEKtWOVt9v+CtAZ8N6kww== +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/cache-test-leaf-cert.golden consul-1.8.7+dfsg1/agent/xds/testdata/cache-test-leaf-cert.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/cache-test-leaf-cert.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/cache-test-leaf-cert.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL +MAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv +MRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV +BgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg +ODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5 +MTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv +bnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH ++z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj +gccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF +BQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2 +tW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv +i4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo +b3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5 +IhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw== +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/cache-test-leaf-key.golden consul-1.8.7+dfsg1/agent/xds/testdata/cache-test-leaf-key.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/cache-test-leaf-key.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/cache-test-leaf-key.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49 +AwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T +TWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ== +-----END EC PRIVATE KEY----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-failover.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-and-overrides.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "66s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "http2ProtocolOptions": { - - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain-external-sni.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.some.other.service.mesh" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "33s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500, + "maxPendingRequests": 600, + "maxRequests": 700 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 500, - "maxPendingRequests": 600, - "maxRequests": 700 - } - ] - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 500, - "maxPendingRequests": 600, - "maxRequests": 700 - } - ] - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,130 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,130 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,130 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,130 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 500 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-max-connections-only.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,130 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 500 - } - ] - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 500 - } - ] - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + "thresholds": [ + { + "maxConnections": 0, + "maxPendingRequests": 0, + "maxRequests": 0 + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-limits-set-to-zero.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 0, - "maxPendingRequests": 0, - "maxRequests": 0 - } - ] - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 0, - "maxPendingRequests": 0, - "maxRequests": 0 - } - ] - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "mylocal", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "mylocal", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "mylocal", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "mylocal", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-local-app.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-local-app.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "mylocal", - "connectTimeout": "15s", - "hosts": [ - { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "1.234s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "1.234s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "1.234s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "1.234s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-timeouts.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-timeouts.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "1.234s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream-default-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "myservice", - "connectTimeout": "15s", - "hosts": [ - { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - ], - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "myservice", + "connectTimeout": "15s", + "hosts": [ + { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + ], + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/custom-upstream.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/custom-upstream.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "myservice", - "connectTimeout": "15s", - "hosts": [ - { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - ], - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/defaults.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/defaults.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_8090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_8090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8090 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_8090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_8090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8090 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_8090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_8090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8090 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-grpc-new-cluster-http1.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_8090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_8090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8090 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-local-app-paths.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_9090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_9090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_9090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_9090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_9090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_9090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "exposed_cluster_9090", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "exposed_cluster_9090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + "http2ProtocolOptions": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/expose-paths-new-cluster-http2.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "exposed_cluster_9090", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "exposed_cluster_9090", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9090 - } - } - } - } - ] - } - ] - }, - "http2ProtocolOptions": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,103 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-failover.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "66s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "http2ProtocolOptions": { + + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.some.other.service.mesh" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc3.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "33s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-ignore-extra-resolvers.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-no-services.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-subsets.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "10s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-service-timeouts.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "10s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "10s", - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "10s", - "outlierDetection": { - - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/mesh-gateway-using-federation-states.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,119 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-west-2.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "123.us-east-1.elb.notaws.com", + "portValue": 443 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,170 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,170 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,170 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,170 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "local_app", + "type": "STATIC", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "local_app", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "circuitBreakers": { + + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + }, + "outlierDetection": { + + }, + "commonLbConfig": { + "healthyPanicThreshold": { + + } + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/splitter-with-resolver-redirect.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,170 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "local_app", - "type": "STATIC", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Cluster", - "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "altStatName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": { - - } - } - }, - "connectTimeout": "5s", - "circuitBreakers": { - - }, - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "outlierDetection": { - - }, - "commonLbConfig": { - "healthyPanicThreshold": { - - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,153 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,153 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,153 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,153 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,239 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,239 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,239 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-hostname-service-subsets.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,239 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,209 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,209 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,209 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-ignore-extra-resolvers.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,209 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,241 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,241 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,241 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/clusters/terminating-gateway-service-subsets.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,241 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "api.altdomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "filename": "api.cert.pem" + }, + "privateKey": { + "filename": "api.key.pem" + } + } + ], + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "db.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "LOGICAL_DNS", + "connectTimeout": "5s", + "loadAssignment": { + "clusterName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "cache.mydomain", + "portValue": 8081 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + "dnsRefreshRate": "10s", + "dnsLookupFamily": "V4_ONLY", + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Cluster", + "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": { + + } + } + }, + "connectTimeout": "5s", + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "validationContext": { + "trustedCa": { + "filename": "ca.cert.pem" + } + } + } + }, + "outlierDetection": { + + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/db-test-leaf-cert.golden consul-1.8.7+dfsg1/agent/xds/testdata/db-test-leaf-cert.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/db-test-leaf-cert.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/db-test-leaf-cert.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx +CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj +bzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw +FQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB +IDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2 +MTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu +Y29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9 +tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk +kaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq +0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o +LzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh +bGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG +1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP +Sg== +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/db-test-leaf-key.golden consul-1.8.7+dfsg1/agent/xds/testdata/db-test-leaf-key.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/db-test-leaf-key.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/db-test-leaf-key.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49 +AwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ +bz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ== +-----END EC PRIVATE KEY----- diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-failover.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - }, - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ], - "priority": 1 - } - ], - "policy": { - "overprovisioningFactor": 100000 - } - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-overrides.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain-external-sni.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "myservice", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "myservice", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "myservice", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-default-chain-and-custom-cluster.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "myservice", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.38.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.38.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/defaults.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/defaults.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-multiple-listeners-duplicate-service.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-failover.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + }, + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ], + "priority": 1 + } + ], + "policy": { + "overprovisioningFactor": 100000 + } + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.38.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-local-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,221 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,221 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,221 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,221 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-default-service-subset.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-no-services.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,269 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,269 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,269 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,269 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,269 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/mesh-gateway-using-federation-states.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.1", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "198.18.1.2", + "portValue": 443 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.20.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/splitter-with-resolver-redirect.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "clusterName": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-default-service-subset.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/endpoints/terminating-gateway-service-subsets.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.1", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "10.10.1.2", + "portValue": 8080 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-and-overrides.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,139 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http2_protocol_options": { - }, - "http_filters": [ - { - "config": { - }, - "name": "envoy.grpc_http1_bridge" - }, - { - "name": "envoy.router" - } - ], - "rds": { - "config_source": { - "ads": { - } - }, - "route_config_name": "db" - }, - "stat_prefix": "upstream_db_grpc", - "tracing": { - "operation_name": "EGRESS", - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-chain-external-sni.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-grpc-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,139 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http2_protocol_options": { - }, - "http_filters": [ - { - "config": { - }, - "name": "envoy.grpc_http1_bridge" - }, - { - "name": "envoy.router" - } - ], - "rds": { - "config_source": { - "ads": { - } - }, - "route_config_name": "db" - }, - "stat_prefix": "upstream_db_grpc", - "tracing": { - "operation_name": "EGRESS", - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http2-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http2_protocol_options": { - }, - "http_filters": [ - { - "name": "envoy.router" - } - ], - "rds": { - "config_source": { - "ads": { - } - }, - "route_config_name": "db" - }, - "stat_prefix": "upstream_db_http", - "tracing": { - "operation_name": "EGRESS", - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-http-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "rds": { - "config_source": { - "ads": { - } - }, - "route_config_name": "db" - }, - "stat_prefix": "upstream_db_http", - "tracing": { - "operation_name": "EGRESS", - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-public-listen", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-public-listen", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-public-listen", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-public-listen", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-public-listener.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-public-listener.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "custom-public-listen", - "address": { - "socketAddress": { - "address": "11.11.11.11", - "portValue": 11111 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "random-cluster", - "stat_prefix": "foo-stats" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-upstream", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-upstream", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-upstream", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "custom-upstream", + "address": { + "socketAddress": { + "address": "11.11.11.11", + "portValue": 11111 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "random-cluster", + "stat_prefix": "foo-stats" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "custom-upstream", - "address": { - "socketAddress": { - "address": "11.11.11.11", - "portValue": 11111 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "random-cluster", - "stat_prefix": "foo-stats" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/custom-upstream-typed-ignored-with-disco-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/defaults.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/defaults.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,154 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health2:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health2_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health2_21501", + "routes": [ + { + "match": { + "path": "/health2" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health2_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,154 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health2:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health2_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health2_21501", + "routes": [ + { + "match": { + "path": "/health2" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health2_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,154 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health2:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health2_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health2_21501", + "routes": [ + { + "match": { + "path": "/health2" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health2_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,154 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health2:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health2_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health2_21501", + "routes": [ + { + "match": { + "path": "/health2" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health2_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-local-app-paths.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,154 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "exposed_path_health1:1.2.3.4:21500", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 21500 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "route_config": { - "name": "exposed_path_filter_health1_21500", - "virtual_hosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_filter_health1_21500", - "routes": [ - { - "match": { - "path": "/health1" - }, - "route": { - "cluster": "local_app" - } - } - ] - } - ] - }, - "stat_prefix": "exposed_path_filter_health1_21500_http", - "tracing": { - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "exposed_path_health2:1.2.3.4:21501", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 21501 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "route_config": { - "name": "exposed_path_filter_health2_21501", - "virtual_hosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_filter_health2_21501", - "routes": [ - { - "match": { - "path": "/health2" - }, - "route": { - "cluster": "local_app" - } - } - ] - } - ] - }, - "stat_prefix": "exposed_path_filter_health2_21501_http", - "tracing": { - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:1.2.3.4:8080", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "tlsContext": { - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,156 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_grpchealthv1HealthCheck:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "routes": [ + { + "match": { + "path": "/grpc.health.v1.Health/Check" + }, + "route": { + "cluster": "exposed_cluster_9090" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_grpchealthv1HealthCheck_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,156 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_grpchealthv1HealthCheck:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "routes": [ + { + "match": { + "path": "/grpc.health.v1.Health/Check" + }, + "route": { + "cluster": "exposed_cluster_9090" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_grpchealthv1HealthCheck_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,156 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_grpchealthv1HealthCheck:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "routes": [ + { + "match": { + "path": "/grpc.health.v1.Health/Check" + }, + "route": { + "cluster": "exposed_cluster_9090" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_grpchealthv1HealthCheck_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,156 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_grpchealthv1HealthCheck:1.2.3.4:21501", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21501 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", + "routes": [ + { + "match": { + "path": "/grpc.health.v1.Health/Check" + }, + "route": { + "cluster": "exposed_cluster_9090" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_grpchealthv1HealthCheck_21501_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "exposed_path_health1:1.2.3.4:21500", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 21500 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "exposed_path_filter_health1_21500", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "exposed_path_filter_health1_21500", + "routes": [ + { + "match": { + "path": "/health1" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "exposed_path_filter_health1_21500_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "tlsContext": { + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/expose-paths-new-cluster-http2.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,156 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "exposed_path_grpchealthv1HealthCheck:1.2.3.4:21501", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 21501 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http2_protocol_options": { - }, - "http_filters": [ - { - "name": "envoy.router" - } - ], - "route_config": { - "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", - "virtual_hosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_filter_grpchealthv1HealthCheck_21501", - "routes": [ - { - "match": { - "path": "/grpc.health.v1.Health/Check" - }, - "route": { - "cluster": "exposed_cluster_9090" - } - } - ] - } - ] - }, - "stat_prefix": "exposed_path_filter_grpchealthv1HealthCheck_21501_http", - "tracing": { - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "exposed_path_health1:1.2.3.4:21500", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 21500 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "route_config": { - "name": "exposed_path_filter_health1_21500", - "virtual_hosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_filter_health1_21500", - "routes": [ - { - "match": { - "path": "/health1" - }, - "route": { - "cluster": "local_app" - } - } - ] - } - ] - }, - "stat_prefix": "exposed_path_filter_health1_21500_http", - "tracing": { - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:1.2.3.4:8080", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "tlsContext": { - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "public_listener", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "public_listener", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "public_listener_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "public_listener", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "public_listener", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "public_listener_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "public_listener", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "public_listener", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "public_listener_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,145 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "public_listener", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "public_listener", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "stat_prefix": "public_listener_http", + "tracing": { + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-public-listener.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-public-listener.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "route_config": { - "name": "public_listener", - "virtual_hosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app" - } - } - ] - } - ] - }, - "stat_prefix": "public_listener_http", - "tracing": { - "random_sampling": { - } - } - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,146 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "db", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ] + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,146 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "db", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ] + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,146 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "db", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ] + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,146 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "route_config": { + "name": "db", + "virtual_hosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ] + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/http-upstream.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/http-upstream.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "route_config": { - "name": "db", - "virtual_hosts": [ - { - "domains": [ - "*" - ], - "name": "db", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - "stat_prefix": "upstream_db_http", - "tracing": { - "operation_name": "EGRESS", - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,76 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:10.0.0.1:9191", + "address": { + "socketAddress": { + "address": "10.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:172.16.0.1:9191", + "address": { + "socketAddress": { + "address": "172.16.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:8.8.8.8:9191", + "address": { + "socketAddress": { + "address": "8.8.8.8", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,76 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:10.0.0.1:9191", + "address": { + "socketAddress": { + "address": "10.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:172.16.0.1:9191", + "address": { + "socketAddress": { + "address": "172.16.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:8.8.8.8:9191", + "address": { + "socketAddress": { + "address": "8.8.8.8", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,76 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:10.0.0.1:9191", + "address": { + "socketAddress": { + "address": "10.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:172.16.0.1:9191", + "address": { + "socketAddress": { + "address": "172.16.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:8.8.8.8:9191", + "address": { + "socketAddress": { + "address": "8.8.8.8", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-bind-addrs.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,76 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:10.0.0.1:9191", + "address": { + "socketAddress": { + "address": "10.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:172.16.0.1:9191", + "address": { + "socketAddress": { + "address": "172.16.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:8.8.8.8:9191", + "address": { + "socketAddress": { + "address": "8.8.8.8", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "443" + }, + "stat_prefix": "ingress_upstream_443_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "8080" + }, + "stat_prefix": "ingress_upstream_8080_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "443" + }, + "stat_prefix": "ingress_upstream_443_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "8080" + }, + "stat_prefix": "ingress_upstream_8080_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "443" + }, + "stat_prefix": "ingress_upstream_443_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "8080" + }, + "stat_prefix": "ingress_upstream_8080_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-http-multiple-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "443" + }, + "stat_prefix": "ingress_upstream_443_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:8080", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "8080" + }, + "stat_prefix": "ingress_upstream_8080_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "9191" + }, + "stat_prefix": "ingress_upstream_9191_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "9191" + }, + "stat_prefix": "ingress_upstream_9191_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "9191" + }, + "stat_prefix": "ingress_upstream_9191_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "http:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "9191" + }, + "stat_prefix": "ingress_upstream_9191_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http2_protocol_options": { + }, + "http_filters": [ + { + "config": { + }, + "name": "envoy.grpc_http1_bridge" + }, + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_grpc", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": false + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": false + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": false + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/ingress-with-tls-listener.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:1.2.3.4:9191", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 9191 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": false + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:9999", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:9999", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:9999", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:9999", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:127.0.0.2:9999", - "address": { - "socketAddress": { - "address": "127.0.0.2", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:8888", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:8888", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:8888", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:127.0.0.2:8888", + "address": { + "socketAddress": { + "address": "127.0.0.2", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-address-port.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:127.0.0.2:8888", - "address": { - "socketAddress": { - "address": "127.0.0.2", - "portValue": 8888 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:8888", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:8888", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:8888", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_db_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:8888", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 8888 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/listener-bind-port.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/listener-bind-port.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_db_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:8888", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 8888 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,323 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "bar:2001:db8::ff:9999", + "address": { + "socketAddress": { + "address": "2001:db8::ff", + "portValue": 9999 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_bar_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "baz:127.0.0.1:8765", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8765 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_baz_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,323 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "bar:2001:db8::ff:9999", + "address": { + "socketAddress": { + "address": "2001:db8::ff", + "portValue": 9999 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_bar_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "baz:127.0.0.1:8765", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8765 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_baz_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,323 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "bar:2001:db8::ff:9999", + "address": { + "socketAddress": { + "address": "2001:db8::ff", + "portValue": 9999 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_bar_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "baz:127.0.0.1:8765", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8765 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_baz_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,323 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "bar:2001:db8::ff:9999", + "address": { + "socketAddress": { + "address": "2001:db8::ff", + "portValue": 9999 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_bar_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_bar_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "baz:127.0.0.1:8765", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8765 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_baz_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_baz_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_foo_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-custom-addresses.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "bar:2001:db8::ff:9999", - "address": { - "socketAddress": { - "address": "2001:db8::ff", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_bar_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_bar_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "baz:127.0.0.1:8765", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8765 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_baz_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_baz_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "default:1.2.3.4:8443", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_default_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "foo:198.17.2.3:8080", - "address": { - "socketAddress": { - "address": "198.17.2.3", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_foo_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_foo_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "default:1.2.3.4:8443", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_default_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-no-services.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "default:1.2.3.4:8443", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_default_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "lan:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_lan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "lan:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_lan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "lan:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_lan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "lan:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_lan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_lan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_wan_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-tagged-addresses.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "lan:1.2.3.4:8443", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_lan_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_lan_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "wan:198.18.0.1:443", - "address": { - "socketAddress": { - "address": "198.18.0.1", - "portValue": 443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "mesh_gateway_remote_wan_dc2_tcp" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster" - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "", - "stat_prefix": "mesh_gateway_local_wan_tcp" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.listener.tls_inspector" - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/mesh-gateway-using-federation-states.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc2_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc4_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "mesh_gateway_remote_default_dc6_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "mesh_gateway_local_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,132 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "db:127.0.0.1:9191", + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9191 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "http_filters": [ + { + "name": "envoy.router" + } + ], + "rds": { + "config_source": { + "ads": { + } + }, + "route_config_name": "db" + }, + "stat_prefix": "upstream_db_http", + "tracing": { + "operation_name": "EGRESS", + "random_sampling": { + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "prepared_query:geo-cache:127.10.10.10:8181", + "address": { + "socketAddress": { + "address": "127.10.10.10", + "portValue": 8181 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "stat_prefix": "upstream_prepared_query_geo-cache_tcp" + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "public_listener:0.0.0.0:9999", + "address": { + "socketAddress": { + "address": "0.0.0.0", + "portValue": 9999 + } + }, + "filterChains": [ + { + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "local_app", + "stat_prefix": "public_listener_tcp" + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/splitter-with-resolver-redirect.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "db:127.0.0.1:9191", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.http_connection_manager", - "config": { - "http_filters": [ - { - "name": "envoy.router" - } - ], - "rds": { - "config_source": { - "ads": { - } - }, - "route_config_name": "db" - }, - "stat_prefix": "upstream_db_http", - "tracing": { - "operation_name": "EGRESS", - "random_sampling": { - } - } - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "stat_prefix": "upstream_prepared_query_geo-cache_tcp" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.api.v2.Listener", - "name": "public_listener:0.0.0.0:9999", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "tlsContext": { - "commonTlsContext": { - "tlsParams": { - - }, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - }, - "filters": [ - { - "name": "envoy.ext_authz", - "config": { - "grpc_service": { - "envoy_grpc": { - "cluster_name": "local_agent" - }, - "initial_metadata": [ - { - "key": "x-consul-token", - "value": "my-token" - } - ] - }, - "stat_prefix": "connect_authz" - } - }, - { - "name": "envoy.tcp_proxy", - "config": { - "cluster": "local_app", - "stat_prefix": "public_listener_tcp" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,541 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_foo_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_wan_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,541 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_foo_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_wan_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,541 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_foo_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_wan_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-custom-and-tagged-addresses.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,541 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "foo:198.17.2.3:8080", + "address": { + "socketAddress": { + "address": "198.17.2.3", + "portValue": 8080 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_foo_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_foo_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_foo_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + }, + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "wan:198.18.0.1:443", + "address": { + "socketAddress": { + "address": "198.18.0.1", + "portValue": 443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_wan_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_wan_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_wan_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,274 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,274 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,274 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,274 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,215 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,215 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,215 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-api-cert.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,215 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-no-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,392 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,392 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,392 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/listeners/terminating-gateway-service-subsets.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,392 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.Listener", + "name": "default:1.2.3.4:8443", + "address": { + "socketAddress": { + "address": "1.2.3.4", + "portValue": 8443 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "serverNames": [ + "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_api_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_cache_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_db_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filterChainMatch": { + "serverNames": [ + "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + ] + }, + "tlsContext": { + "commonTlsContext": { + "tlsParams": { + + }, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" + } + } + }, + "requireClientCertificate": true + }, + "filters": [ + { + "name": "envoy.ext_authz", + "config": { + "grpc_service": { + "envoy_grpc": { + "cluster_name": "local_agent" + }, + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "my-token" + } + ] + }, + "stat_prefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_web_default_tcp" + } + } + ] + }, + { + "filters": [ + { + "name": "envoy.filters.network.sni_cluster" + }, + { + "name": "envoy.tcp_proxy", + "config": { + "cluster": "", + "stat_prefix": "terminating_gateway_default_tcp" + } + } + ] + } + ], + "listenerFilters": [ + { + "name": "envoy.listener.tls_inspector" + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.Listener", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-overrides.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "a236e964~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,362 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,362 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,362 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,362 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-router.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,333 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/prefix" - }, - "route": { - "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "path": "/exact" - }, - "route": { - "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "regex": "/regex" - }, - "route": { - "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "presentMatch": true - } - ] - }, - "route": { - "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "presentMatch": true, - "invertMatch": true - } - ] - }, - "route": { - "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "exactMatch": "exact" - } - ] - }, - "route": { - "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "prefixMatch": "prefix" - } - ] - }, - "route": { - "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "suffixMatch": "suffix" - } - ] - }, - "route": { - "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "regexMatch": "regex" - } - ] - }, - "route": { - "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": ":method", - "regexMatch": "GET|PUT" - } - ] - }, - "route": { - "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "headers": [ - { - "name": "x-debug", - "exactMatch": "exact" - }, - { - "name": ":method", - "regexMatch": "GET|PUT" - } - ] - }, - "route": { - "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "queryParameters": [ - { - "name": "secretparam1", - "value": "exact" - } - ] - }, - "route": { - "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "queryParameters": [ - { - "name": "secretparam2", - "value": "regex", - "regex": true - } - ] - }, - "route": { - "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/", - "queryParameters": [ - { - "name": "secretparam3" - } - ] - }, - "route": { - "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/prefix" - }, - "route": { - "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "prefixRewrite": "/" - } - }, - { - "match": { - "prefix": "/prefix" - }, - "route": { - "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "prefixRewrite": "/nested/newlocation" - } - }, - { - "match": { - "prefix": "/timeout" - }, - "route": { - "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "33s" - } - }, - { - "match": { - "prefix": "/retry-connect" - }, - "route": { - "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "retryPolicy": { - "retryOn": "connect-failure", - "numRetries": 15 - } - } - }, - { - "match": { - "prefix": "/retry-codes" - }, - "route": { - "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "retryPolicy": { - "retryOn": "retriable-status-codes", - "numRetries": 15, - "retriableStatusCodes": [ - 401, - 409, - 451 - ] - } - } - }, - { - "match": { - "prefix": "/retry-both" - }, - "route": { - "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "retryPolicy": { - "retryOn": "connect-failure,retriable-status-codes", - "retriableStatusCodes": [ - 401, - 409, - 451 - ] - } - } - }, - { - "match": { - "prefix": "/split-3-ways" - }, - "route": { - "weightedClusters": { - "clusters": [ - { - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 9550 - }, - { - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 400 - }, - { - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 50 - } - ], - "totalWeight": 10000 - } - } - }, - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-and-splitter.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "weightedClusters": { - "clusters": [ - { - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 9550 - }, - { - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 400 - }, - { - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 50 - } - ], - "totalWeight": 10000 - } - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/connect-proxy-with-grpc-router.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "path": "/fgrpc.PingServer/Ping" - }, - "route": { - "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/defaults-no-chain.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/defaults-no-chain.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-defaults-no-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,91 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "443", + "virtualHosts": [ + { + "name": "baz", + "domains": [ + "baz.ingress.*", + "baz.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "qux", + "domains": [ + "qux.ingress.*", + "qux.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "8080", + "virtualHosts": [ + { + "name": "foo", + "domains": [ + "test1.example.com", + "test2.example.com", + "test2.example.com:8080", + "test1.example.com:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "bar", + "domains": [ + "bar.ingress.*", + "bar.ingress.*:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,91 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "443", + "virtualHosts": [ + { + "name": "baz", + "domains": [ + "baz.ingress.*", + "baz.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "qux", + "domains": [ + "qux.ingress.*", + "qux.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "8080", + "virtualHosts": [ + { + "name": "foo", + "domains": [ + "test1.example.com", + "test2.example.com", + "test2.example.com:8080", + "test1.example.com:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "bar", + "domains": [ + "bar.ingress.*", + "bar.ingress.*:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,91 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "443", + "virtualHosts": [ + { + "name": "baz", + "domains": [ + "baz.ingress.*", + "baz.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "qux", + "domains": [ + "qux.ingress.*", + "qux.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "8080", + "virtualHosts": [ + { + "name": "foo", + "domains": [ + "test1.example.com", + "test2.example.com", + "test2.example.com:8080", + "test1.example.com:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "bar", + "domains": [ + "bar.ingress.*", + "bar.ingress.*:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-http-multiple-services.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,91 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "443", + "virtualHosts": [ + { + "name": "baz", + "domains": [ + "baz.ingress.*", + "baz.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "qux", + "domains": [ + "qux.ingress.*", + "qux.ingress.*:443" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "8080", + "virtualHosts": [ + { + "name": "foo", + "domains": [ + "test1.example.com", + "test2.example.com", + "test2.example.com:8080", + "test1.example.com:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, + { + "name": "bar", + "domains": [ + "bar.ingress.*", + "bar.ingress.*:8080" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-overrides.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,363 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,363 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,363 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-router.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,363 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "path": "/exact" + }, + "route": { + "cluster": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "/regex" + } + }, + "route": { + "cluster": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "presentMatch": true, + "invertMatch": true + } + ] + }, + "route": { + "cluster": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + } + ] + }, + "route": { + "cluster": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "prefixMatch": "prefix" + } + ] + }, + "route": { + "cluster": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "suffixMatch": "suffix" + } + ] + }, + "route": { + "cluster": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "regex" + } + } + ] + }, + "route": { + "cluster": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "headers": [ + { + "name": "x-debug", + "exactMatch": "exact" + }, + { + "name": ":method", + "safeRegexMatch": { + "googleRe2": { + + }, + "regex": "GET|PUT" + } + } + ] + }, + "route": { + "cluster": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam1", + "stringMatch": { + "exact": "exact" + } + } + ] + }, + "route": { + "cluster": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam2", + "stringMatch": { + "safeRegex": { + "googleRe2": { + + }, + "regex": "regex" + } + } + } + ] + }, + "route": { + "cluster": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/", + "queryParameters": [ + { + "name": "secretparam3", + "presentMatch": true + } + ] + }, + "route": { + "cluster": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/" + } + }, + { + "match": { + "prefix": "/prefix" + }, + "route": { + "cluster": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "prefixRewrite": "/nested/newlocation" + } + }, + { + "match": { + "prefix": "/timeout" + }, + "route": { + "cluster": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + }, + { + "match": { + "prefix": "/retry-connect" + }, + "route": { + "cluster": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure", + "numRetries": 15 + } + } + }, + { + "match": { + "prefix": "/retry-codes" + }, + "route": { + "cluster": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "retriable-status-codes", + "numRetries": 15, + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/retry-both" + }, + "route": { + "cluster": "retry-both.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "retryPolicy": { + "retryOn": "connect-failure,retriable-status-codes", + "retriableStatusCodes": [ + 401, + 409, + 451 + ] + } + } + }, + { + "match": { + "prefix": "/split-3-ways" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-and-splitter.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 9550 + }, + { + "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 400 + }, + { + "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 50 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-chain-external-sni.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "versionInfo": "00000001", + "resources": [ + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/ingress-with-grpc-router.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "9191", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "db.ingress.*", + "db.ingress.*:9191" + ], + "routes": [ + { + "match": { + "path": "/fgrpc.PingServer/Ping" + }, + "route": { + "cluster": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + }, + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-11-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-11-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-11-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-11-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-12-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-12-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-12-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-12-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-13-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-13-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-13-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-13-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-14-x.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-14-x.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-14-x.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.envoy-1-14-x.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "name": "db", + "virtualHosts": [ + { + "name": "db", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "weightedClusters": { + "clusters": [ + { + "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + }, + { + "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", + "weight": 5000 + } + ], + "totalWeight": 10000 + } + } + } + ] + } + ], + "validateClusters": true + } + ], + "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", + "nonce": "00000001" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.golden consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.golden --- consul-1.7.4+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testdata/routes/splitter-with-resolver-redirect.golden 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "name": "db", - "virtualHosts": [ - { - "name": "db", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "weightedClusters": { - "clusters": [ - { - "name": "v1.db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 5000 - }, - { - "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "weight": 5000 - } - ], - "totalWeight": 10000 - } - } - } - ] - } - ], - "validateClusters": true - } - ], - "typeUrl": "type.googleapis.com/envoy.api.v2.RouteConfiguration", - "nonce": "00000001" -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/agent/xds/testing.go consul-1.8.7+dfsg1/agent/xds/testing.go --- consul-1.7.4+dfsg1/agent/xds/testing.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -171,7 +171,7 @@ spiffeID := connect.TestSpiffeIDService(t, svc) return &envoyauth.AttributeContext_Peer{ // We don't care about IP for now might later though - Address: makeAddressPtr("10.0.0.1", 1234), + Address: makeAddress("10.0.0.1", 1234), // Note we don't set Service since that is an advisory only mechanism in // Envoy triggered by self-declared headers. We rely on the actual TLS Peer // identity. diff -Nru consul-1.7.4+dfsg1/agent/xds/xds.go consul-1.8.7+dfsg1/agent/xds/xds.go --- consul-1.7.4+dfsg1/agent/xds/xds.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/agent/xds/xds.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,4 @@ -// Package xds provides an impementation of a gRPC service that exports Envoy's +// Package xds provides an implementation of a gRPC service that exports Envoy's // xDS API for config discovery. Specifically we support the Aggregated // Discovery Service (ADS) only as we control all config. // diff -Nru consul-1.7.4+dfsg1/api/acl.go consul-1.8.7+dfsg1/api/acl.go --- consul-1.7.4+dfsg1/api/acl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/acl.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,7 @@ package api import ( + "encoding/json" "fmt" "io" "io/ioutil" @@ -36,7 +37,9 @@ Policies []*ACLTokenPolicyLink `json:",omitempty"` Roles []*ACLTokenRoleLink `json:",omitempty"` ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` Local bool + AuthMethod string `json:",omitempty"` ExpirationTTL time.Duration `json:",omitempty"` ExpirationTime *time.Time `json:",omitempty"` CreateTime time.Time `json:",omitempty"` @@ -47,7 +50,7 @@ Rules string `json:",omitempty"` // Namespace is the namespace the ACLToken is associated with. - // Namespaces is a Consul Enterprise feature. + // Namespaces are a Consul Enterprise feature. Namespace string `json:",omitempty"` } @@ -59,7 +62,9 @@ Policies []*ACLTokenPolicyLink `json:",omitempty"` Roles []*ACLTokenRoleLink `json:",omitempty"` ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` Local bool + AuthMethod string `json:",omitempty"` ExpirationTime *time.Time `json:",omitempty"` CreateTime time.Time Hash []byte @@ -102,6 +107,13 @@ Datacenters []string `json:",omitempty"` } +// ACLNodeIdentity represents a high-level grant of all necessary privileges +// to assume the identity of the named Node in the Catalog and within Connect. +type ACLNodeIdentity struct { + NodeName string + Datacenter string +} + // ACLPolicy represents an ACL Policy. type ACLPolicy struct { ID string @@ -141,6 +153,7 @@ Description string Policies []*ACLRolePolicyLink `json:",omitempty"` ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` Hash []byte CreateIndex uint64 ModifyIndex uint64 @@ -180,7 +193,13 @@ type ACLAuthMethod struct { Name string Type string - Description string + DisplayName string `json:",omitempty"` + Description string `json:",omitempty"` + MaxTokenTTL time.Duration `json:",omitempty"` + + // TokenLocality defines the kind of token that this auth method produces. + // This can be either 'local' or 'global'. If empty 'local' is assumed. + TokenLocality string `json:",omitempty"` // Configuration is arbitrary configuration for the auth method. This // should only contain primitive values and containers (such as lists and @@ -190,15 +209,69 @@ CreateIndex uint64 ModifyIndex uint64 + // NamespaceRules apply only on auth methods defined in the default namespace. + // Namespacing is a Consul Enterprise feature. + NamespaceRules []*ACLAuthMethodNamespaceRule `json:",omitempty"` + // Namespace is the namespace the ACLAuthMethod is associated with. // Namespacing is a Consul Enterprise feature. Namespace string `json:",omitempty"` } +func (m *ACLAuthMethod) MarshalJSON() ([]byte, error) { + type Alias ACLAuthMethod + exported := &struct { + MaxTokenTTL string `json:",omitempty"` + *Alias + }{ + MaxTokenTTL: m.MaxTokenTTL.String(), + Alias: (*Alias)(m), + } + if m.MaxTokenTTL == 0 { + exported.MaxTokenTTL = "" + } + + return json.Marshal(exported) +} + +func (m *ACLAuthMethod) UnmarshalJSON(data []byte) error { + type Alias ACLAuthMethod + aux := &struct { + MaxTokenTTL string + *Alias + }{ + Alias: (*Alias)(m), + } + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + var err error + if aux.MaxTokenTTL != "" { + if m.MaxTokenTTL, err = time.ParseDuration(aux.MaxTokenTTL); err != nil { + return err + } + } + + return nil +} + +type ACLAuthMethodNamespaceRule struct { + // Selector is an expression that matches against verified identity + // attributes returned from the auth method during login. + Selector string `json:",omitempty"` + + // BindNamespace is the target namespace of the binding. Can be lightly + // templated using HIL ${foo} syntax from available field names. + // + // If empty it's created in the same namespace as the auth method. + BindNamespace string `json:",omitempty"` +} + type ACLAuthMethodListEntry struct { Name string Type string - Description string + DisplayName string `json:",omitempty"` + Description string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 @@ -246,12 +319,73 @@ } } +// OIDCAuthMethodConfig is the config for the built-in Consul auth method for +// OIDC and JWT. +type OIDCAuthMethodConfig struct { + // common for type=oidc and type=jwt + JWTSupportedAlgs []string `json:",omitempty"` + BoundAudiences []string `json:",omitempty"` + ClaimMappings map[string]string `json:",omitempty"` + ListClaimMappings map[string]string `json:",omitempty"` + OIDCDiscoveryURL string `json:",omitempty"` + OIDCDiscoveryCACert string `json:",omitempty"` + // just for type=oidc + OIDCClientID string `json:",omitempty"` + OIDCClientSecret string `json:",omitempty"` + OIDCScopes []string `json:",omitempty"` + AllowedRedirectURIs []string `json:",omitempty"` + VerboseOIDCLogging bool `json:",omitempty"` + // just for type=jwt + JWKSURL string `json:",omitempty"` + JWKSCACert string `json:",omitempty"` + JWTValidationPubKeys []string `json:",omitempty"` + BoundIssuer string `json:",omitempty"` + ExpirationLeeway time.Duration `json:",omitempty"` + NotBeforeLeeway time.Duration `json:",omitempty"` + ClockSkewLeeway time.Duration `json:",omitempty"` +} + +// RenderToConfig converts this into a map[string]interface{} suitable for use +// in the ACLAuthMethod.Config field. +func (c *OIDCAuthMethodConfig) RenderToConfig() map[string]interface{} { + return map[string]interface{}{ + // common for type=oidc and type=jwt + "JWTSupportedAlgs": c.JWTSupportedAlgs, + "BoundAudiences": c.BoundAudiences, + "ClaimMappings": c.ClaimMappings, + "ListClaimMappings": c.ListClaimMappings, + "OIDCDiscoveryURL": c.OIDCDiscoveryURL, + "OIDCDiscoveryCACert": c.OIDCDiscoveryCACert, + // just for type=oidc + "OIDCClientID": c.OIDCClientID, + "OIDCClientSecret": c.OIDCClientSecret, + "OIDCScopes": c.OIDCScopes, + "AllowedRedirectURIs": c.AllowedRedirectURIs, + "VerboseOIDCLogging": c.VerboseOIDCLogging, + // just for type=jwt + "JWKSURL": c.JWKSURL, + "JWKSCACert": c.JWKSCACert, + "JWTValidationPubKeys": c.JWTValidationPubKeys, + "BoundIssuer": c.BoundIssuer, + "ExpirationLeeway": c.ExpirationLeeway, + "NotBeforeLeeway": c.NotBeforeLeeway, + "ClockSkewLeeway": c.ClockSkewLeeway, + } +} + type ACLLoginParams struct { AuthMethod string BearerToken string Meta map[string]string `json:",omitempty"` } +type ACLOIDCAuthURLParams struct { + AuthMethod string + RedirectURI string + ClientNonce string + Meta map[string]string `json:",omitempty"` +} + // ACL can be used to query the ACL endpoints type ACL struct { c *Client @@ -1168,3 +1302,62 @@ wm := &WriteMeta{RequestTime: rtt} return wm, nil } + +// OIDCAuthURL requests an authorization URL to start an OIDC login flow. +func (a *ACL) OIDCAuthURL(auth *ACLOIDCAuthURLParams, q *WriteOptions) (string, *WriteMeta, error) { + if auth.AuthMethod == "" { + return "", nil, fmt.Errorf("Must specify an auth method name") + } + + r := a.c.newRequest("POST", "/v1/acl/oidc/auth-url") + r.setWriteOptions(q) + r.obj = auth + + rtt, resp, err := requireOK(a.c.doRequest(r)) + if err != nil { + return "", nil, err + } + defer resp.Body.Close() + + wm := &WriteMeta{RequestTime: rtt} + var out aclOIDCAuthURLResponse + if err := decodeBody(resp, &out); err != nil { + return "", nil, err + } + return out.AuthURL, wm, nil +} + +type aclOIDCAuthURLResponse struct { + AuthURL string +} + +type ACLOIDCCallbackParams struct { + AuthMethod string + State string + Code string + ClientNonce string +} + +// OIDCCallback is the callback endpoint to complete an OIDC login. +func (a *ACL) OIDCCallback(auth *ACLOIDCCallbackParams, q *WriteOptions) (*ACLToken, *WriteMeta, error) { + if auth.AuthMethod == "" { + return nil, nil, fmt.Errorf("Must specify an auth method name") + } + + r := a.c.newRequest("POST", "/v1/acl/oidc/callback") + r.setWriteOptions(q) + r.obj = auth + + rtt, resp, err := requireOK(a.c.doRequest(r)) + if err != nil { + return nil, nil, err + } + defer resp.Body.Close() + + wm := &WriteMeta{RequestTime: rtt} + var out ACLToken + if err := decodeBody(resp, &out); err != nil { + return nil, nil, err + } + return &out, wm, nil +} diff -Nru consul-1.7.4+dfsg1/api/agent.go consul-1.8.7+dfsg1/api/agent.go --- consul-1.7.4+dfsg1/api/agent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/agent.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,6 +28,15 @@ // service will proxy connections based off the SNI header set by other // connect proxies ServiceKindMeshGateway ServiceKind = "mesh-gateway" + + // ServiceKindTerminatingGateway is a Terminating Gateway for the Connect + // feature. This service will proxy connections to services outside the mesh. + ServiceKindTerminatingGateway ServiceKind = "terminating-gateway" + + // ServiceKindIngressGateway is an Ingress Gateway for the Connect feature. + // This service will ingress connections based of configuration defined in + // the ingress-gateway config entry. + ServiceKindIngressGateway ServiceKind = "ingress-gateway" ) // UpstreamDestType is the type of upstream discovery mechanism. @@ -112,6 +121,70 @@ Expose ExposeConfig `json:",omitempty"` } +const ( + // MemberTagKeyACLMode is the key used to indicate what ACL mode the agent is + // operating in. The values of this key will be one of the MemberACLMode constants + // with the key not being present indicating ACLModeUnknown. + MemberTagKeyACLMode = "acls" + + // MemberTagRole is the key used to indicate that the member is a server or not. + MemberTagKeyRole = "role" + + // MemberTagValueRoleServer is the value of the MemberTagKeyRole used to indicate + // that the member represents a Consul server. + MemberTagValueRoleServer = "consul" + + // MemberTagKeySegment is the key name of the tag used to indicate which network + // segment this member is in. + // Network Segments are a Consul Enterprise feature. + MemberTagKeySegment = "segment" + + // MemberTagKeyBootstrap is the key name of the tag used to indicate whether this + // agent was started with the "bootstrap" configuration enabled + MemberTagKeyBootstrap = "bootstrap" + // MemberTagValueBootstrap is the value of the MemberTagKeyBootstrap key when the + // agent was started with the "bootstrap" configuration enabled. + MemberTagValueBootstrap = "1" + + // MemberTagKeyBootstrapExpect is the key name of the tag used to indicate whether + // this agent was started with the "bootstrap_expect" configuration set to a non-zero + // value. The value of this key will be the string for of that configuration value. + MemberTagKeyBootstrapExpect = "expect" + + // MemberTagKeyUseTLS is the key name of the tag used to indicate whther this agent + // was configured to use TLS. + MemberTagKeyUseTLS = "use_tls" + // MemberTagValueUseTLS is the value of the MemberTagKeyUseTLS when the agent was + // configured to use TLS. Any other value indicates that it was not setup in + // that manner. + MemberTagValueUseTLS = "1" + + // MemberTagKeyReadReplica is the key used to indicate that the member is a read + // replica server (will remain a Raft non-voter). + // Read Replicas are a Consul Enterprise feature. + MemberTagKeyReadReplica = "nonvoter" + // MemberTagValueReadReplica is the value of the MemberTagKeyReadReplica key when + // the member is in fact a read-replica. Any other value indicates that it is not. + // Read Replicas are a Consul Enterprise feature. + MemberTagValueReadReplica = "1" +) + +type MemberACLMode string + +const ( + // ACLModeDisables indicates that ACLs are disabled for this agent + ACLModeDisabled MemberACLMode = "0" + // ACLModeEnabled indicates that ACLs are enabled and operating in new ACL + // mode (v1.4.0+ ACLs) + ACLModeEnabled MemberACLMode = "1" + // ACLModeLegacy indicates that ACLs are enabled and operating in legacy mode. + ACLModeLegacy MemberACLMode = "2" + // ACLModeUnkown is used to indicate that the AgentMember.Tags didn't advertise + // an ACL mode at all. This is the case for Consul versions before v1.4.0 and + // should be treated similarly to ACLModeLegacy. + ACLModeUnknown MemberACLMode = "3" +) + // AgentMember represents a cluster member known to the agent type AgentMember struct { Name string @@ -127,6 +200,30 @@ DelegateCur uint8 } +// ACLMode returns the ACL mode this agent is operating in. +func (m *AgentMember) ACLMode() MemberACLMode { + mode := m.Tags[MemberTagKeyACLMode] + + // the key may not have existed but then an + // empty string will be returned and we will + // handle that in the default case of the switch + switch MemberACLMode(mode) { + case ACLModeDisabled: + return ACLModeDisabled + case ACLModeEnabled: + return ACLModeEnabled + case ACLModeLegacy: + return ACLModeLegacy + default: + return ACLModeUnknown + } +} + +// IsConsulServer returns true when this member is a Consul server. +func (m *AgentMember) IsConsulServer() bool { + return m.Tags[MemberTagKeyRole] == MemberTagValueRoleServer +} + // AllSegments is used to select for all segments in MembersOpts. const AllSegments = "_all" @@ -179,26 +276,28 @@ // AgentServiceCheck is used to define a node or service level check type AgentServiceCheck struct { - CheckID string `json:",omitempty"` - Name string `json:",omitempty"` - Args []string `json:"ScriptArgs,omitempty"` - DockerContainerID string `json:",omitempty"` - Shell string `json:",omitempty"` // Only supported for Docker. - Interval string `json:",omitempty"` - Timeout string `json:",omitempty"` - TTL string `json:",omitempty"` - HTTP string `json:",omitempty"` - Header map[string][]string `json:",omitempty"` - Method string `json:",omitempty"` - Body string `json:",omitempty"` - TCP string `json:",omitempty"` - Status string `json:",omitempty"` - Notes string `json:",omitempty"` - TLSSkipVerify bool `json:",omitempty"` - GRPC string `json:",omitempty"` - GRPCUseTLS bool `json:",omitempty"` - AliasNode string `json:",omitempty"` - AliasService string `json:",omitempty"` + CheckID string `json:",omitempty"` + Name string `json:",omitempty"` + Args []string `json:"ScriptArgs,omitempty"` + DockerContainerID string `json:",omitempty"` + Shell string `json:",omitempty"` // Only supported for Docker. + Interval string `json:",omitempty"` + Timeout string `json:",omitempty"` + TTL string `json:",omitempty"` + HTTP string `json:",omitempty"` + Header map[string][]string `json:",omitempty"` + Method string `json:",omitempty"` + Body string `json:",omitempty"` + TCP string `json:",omitempty"` + Status string `json:",omitempty"` + Notes string `json:",omitempty"` + TLSSkipVerify bool `json:",omitempty"` + GRPC string `json:",omitempty"` + GRPCUseTLS bool `json:",omitempty"` + AliasNode string `json:",omitempty"` + AliasService string `json:",omitempty"` + SuccessBeforePassing int `json:",omitempty"` + FailuresBeforeCritical int `json:",omitempty"` // In Consul 0.7 and later, checks that are associated with a service // may also contain this optional DeregisterCriticalServiceAfter field, diff -Nru consul-1.7.4+dfsg1/api/agent_test.go consul-1.8.7+dfsg1/api/agent_test.go --- consul-1.7.4+dfsg1/api/agent_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/agent_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -741,7 +741,7 @@ WaitTime: 100 * time.Millisecond, // Just long enough to be reliably measurable } start := time.Now() - got, qm, err = agent.Service("foo", &opts) + _, _, err = agent.Service("foo", &opts) elapsed := time.Since(start) require.NoError(err) require.True(elapsed >= opts.WaitTime) @@ -1186,15 +1186,26 @@ t.Fatalf("err: %v", err) } - // Wait for the first log message and validate it - select { - case log := <-logCh: - if !(strings.Contains(log, "[INFO]") || strings.Contains(log, "[DEBUG]")) { - t.Fatalf("bad: %q", log) + retry.Run(t, func(r *retry.R) { + { + // Register a service to be sure something happens in secs + serviceReg := &AgentServiceRegistration{ + Name: "redis", + } + if err := agent.ServiceRegister(serviceReg); err != nil { + r.Fatalf("err: %v", err) + } } - case <-time.After(10 * time.Second): - t.Fatalf("failed to get a log message") - } + // Wait for the first log message and validate it + select { + case log := <-logCh: + if !(strings.Contains(log, "[INFO]") || strings.Contains(log, "[DEBUG]")) { + r.Fatalf("bad: %q", log) + } + case <-time.After(10 * time.Second): + r.Fatalf("failed to get a log message") + } + }) } func TestAPI_AgentMonitorJSON(t *testing.T) { @@ -1716,6 +1727,37 @@ require.Equal(t, "bar", svc.Proxy.Config["foo"]) } +func TestAgentService_Register_TerminatingGateway(t *testing.T) { + t.Parallel() + c, s := makeClient(t) + defer s.Stop() + + agent := c.Agent() + + reg := AgentServiceRegistration{ + Kind: ServiceKindTerminatingGateway, + Name: "terminating-gateway", + Address: "10.1.2.3", + Port: 8443, + Proxy: &AgentServiceConnectProxyConfig{ + Config: map[string]interface{}{ + "foo": "bar", + }, + }, + } + + err := agent.ServiceRegister(®) + require.NoError(t, err) + + svc, _, err := agent.Service("terminating-gateway", nil) + require.NoError(t, err) + require.NotNil(t, svc) + require.Equal(t, ServiceKindTerminatingGateway, svc.Kind) + require.NotNil(t, svc.Proxy) + require.Contains(t, svc.Proxy.Config, "foo") + require.Equal(t, "bar", svc.Proxy.Config["foo"]) +} + func TestAgentService_ExposeChecks(t *testing.T) { t.Parallel() c, s := makeClient(t) @@ -1757,3 +1799,91 @@ require.True(t, svc.Proxy.Expose.Checks) require.Equal(t, path, svc.Proxy.Expose.Paths[0]) } + +func TestMemberACLMode(t *testing.T) { + type testCase struct { + tagValue string + expectedMode MemberACLMode + } + + cases := map[string]testCase{ + "disabled": { + tagValue: "0", + expectedMode: ACLModeDisabled, + }, + "enabled": { + tagValue: "1", + expectedMode: ACLModeEnabled, + }, + "legacy": { + tagValue: "2", + expectedMode: ACLModeLegacy, + }, + "unknown-3": { + tagValue: "3", + expectedMode: ACLModeUnknown, + }, + "unknown-other": { + tagValue: "77", + expectedMode: ACLModeUnknown, + }, + "unknown-not-present": { + tagValue: "", + expectedMode: ACLModeUnknown, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + tags := map[string]string{} + + if tcase.tagValue != "" { + tags[MemberTagKeyACLMode] = tcase.tagValue + } + + m := AgentMember{ + Tags: tags, + } + + require.Equal(t, tcase.expectedMode, m.ACLMode()) + }) + } +} + +func TestMemberIsConsulServer(t *testing.T) { + type testCase struct { + tagValue string + isServer bool + } + + cases := map[string]testCase{ + "not-present": { + tagValue: "", + isServer: false, + }, + "server": { + tagValue: MemberTagValueRoleServer, + isServer: true, + }, + "client": { + tagValue: "client", + isServer: false, + }, + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + tags := map[string]string{} + + if tcase.tagValue != "" { + tags[MemberTagKeyRole] = tcase.tagValue + } + + m := AgentMember{ + Tags: tags, + } + + require.Equal(t, tcase.isServer, m.IsConsulServer()) + }) + } +} diff -Nru consul-1.7.4+dfsg1/api/api.go consul-1.8.7+dfsg1/api/api.go --- consul-1.7.4+dfsg1/api/api.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/api.go 2020-12-10 21:46:52.000000000 +0000 @@ -551,11 +551,11 @@ // bootstrap the config defConfig := DefaultConfig() - if len(config.Address) == 0 { + if config.Address == "" { config.Address = defConfig.Address } - if len(config.Scheme) == 0 { + if config.Scheme == "" { config.Scheme = defConfig.Scheme } @@ -599,7 +599,7 @@ if len(parts) == 2 { switch parts[0] { case "http": - config.Scheme = "http" + // Never revert to http if TLS was explicitly requested. case "https": config.Scheme = "https" case "unix": @@ -607,9 +607,11 @@ trans.DialContext = func(_ context.Context, _, _ string) (net.Conn, error) { return net.Dial("unix", parts[1]) } - config.HttpClient = &http.Client{ - Transport: trans, + httpClient, err := NewHttpClient(trans, config.TLSConfig) + if err != nil { + return nil, err } + config.HttpClient = httpClient default: return nil, fmt.Errorf("Unknown protocol scheme: %s", parts[0]) } diff -Nru consul-1.7.4+dfsg1/api/api_test.go consul-1.8.7+dfsg1/api/api_test.go --- consul-1.7.4+dfsg1/api/api_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/api_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -38,9 +38,10 @@ clientConfig.Token = "root" }, func(serverConfig *testutil.TestServerConfig) { serverConfig.PrimaryDatacenter = "dc1" - serverConfig.ACLMasterToken = "root" + serverConfig.ACL.Tokens.Master = "root" + serverConfig.ACL.Tokens.Agent = "root" serverConfig.ACL.Enabled = true - serverConfig.ACLDefaultPolicy = "deny" + serverConfig.ACL.DefaultPolicy = "deny" }) } @@ -61,7 +62,7 @@ retry.RunWith(retry.ThreeTimes(), t, func(r *retry.R) { server, err = testutil.NewTestServerConfigT(t, cb2) if err != nil { - r.Fatal(err) + r.Fatalf("Failed to start server: %v", err.Error()) } }) if server.Config.Bootstrap { diff -Nru consul-1.7.4+dfsg1/api/catalog.go consul-1.8.7+dfsg1/api/catalog.go --- consul-1.7.4+dfsg1/api/catalog.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/catalog.go 2020-12-10 21:46:52.000000000 +0000 @@ -81,6 +81,29 @@ Namespace string `json:",omitempty"` } +type CompoundServiceName struct { + Name string + + // Namespacing is a Consul Enterprise feature. + Namespace string `json:",omitempty"` +} + +// GatewayService associates a gateway with a linked service. +// It also contains service-specific gateway configuration like ingress listener port and protocol. +type GatewayService struct { + Gateway CompoundServiceName + Service CompoundServiceName + GatewayKind ServiceKind + Port int `json:",omitempty"` + Protocol string `json:",omitempty"` + Hosts []string `json:",omitempty"` + CAFile string `json:",omitempty"` + CertFile string `json:",omitempty"` + KeyFile string `json:",omitempty"` + SNI string `json:",omitempty"` + FromWildcard bool `json:",omitempty"` +} + // Catalog can be used to query the Catalog endpoints type Catalog struct { c *Client @@ -280,6 +303,27 @@ if err := decodeBody(resp, &out); err != nil { return nil, nil, err } + return out, qm, nil +} + +// GatewayServices is used to query the services associated with an ingress gateway or terminating gateway. +func (c *Catalog) GatewayServices(gateway string, q *QueryOptions) ([]*GatewayService, *QueryMeta, error) { + r := c.c.newRequest("GET", "/v1/catalog/gateway-services/"+gateway) + r.setQueryOptions(q) + rtt, resp, err := requireOK(c.c.doRequest(r)) + if err != nil { + return nil, nil, err + } + defer resp.Body.Close() + + qm := &QueryMeta{} + parseQueryMeta(resp, qm) + qm.RequestTime = rtt + + var out []*GatewayService + if err := decodeBody(resp, &out); err != nil { + return nil, nil, err + } return out, qm, nil } diff -Nru consul-1.7.4+dfsg1/api/catalog_test.go consul-1.8.7+dfsg1/api/catalog_test.go --- consul-1.7.4+dfsg1/api/catalog_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/catalog_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,6 +7,7 @@ "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -1088,3 +1089,149 @@ } }) } + +func TestAPI_CatalogGatewayServices_Terminating(t *testing.T) { + t.Parallel() + c, s := makeClient(t) + defer s.Stop() + s.WaitForSerfCheck(t) + + catalog := c.Catalog() + + // Register a service to be covered by a wildcard in the config entry + svc := &AgentService{ + ID: "redis", + Service: "redis", + Port: 6379, + } + reg := &CatalogRegistration{ + Datacenter: "dc1", + Node: "bar", + Address: "192.168.10.11", + Service: svc, + } + retry.Run(t, func(r *retry.R) { + if _, err := catalog.Register(reg, nil); err != nil { + r.Fatal(err) + } + }) + + entries := c.ConfigEntries() + + // Associate the gateway and api/redis services + gwEntry := TerminatingGatewayConfigEntry{ + Kind: TerminatingGateway, + Name: "terminating", + Services: []LinkedService{ + { + Name: "api", + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Name: "*", + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + }, + }, + } + retry.Run(t, func(r *retry.R) { + if success, _, err := entries.Set(&gwEntry, nil); err != nil || !success { + r.Fatal(err) + } + }) + + expect := []*GatewayService{ + { + Service: CompoundServiceName{"api", defaultNamespace}, + Gateway: CompoundServiceName{"terminating", defaultNamespace}, + GatewayKind: ServiceKindTerminatingGateway, + CAFile: "api/ca.crt", + CertFile: "api/client.crt", + KeyFile: "api/client.key", + SNI: "my-domain", + }, + { + Service: CompoundServiceName{"redis", defaultNamespace}, + Gateway: CompoundServiceName{"terminating", defaultNamespace}, + GatewayKind: ServiceKindTerminatingGateway, + CAFile: "ca.crt", + CertFile: "client.crt", + KeyFile: "client.key", + SNI: "my-alt-domain", + FromWildcard: true, + }, + } + retry.Run(t, func(r *retry.R) { + resp, _, err := catalog.GatewayServices("terminating", nil) + assert.NoError(r, err) + assert.Equal(r, expect, resp) + }) +} + +func TestAPI_CatalogGatewayServices_Ingress(t *testing.T) { + t.Parallel() + c, s := makeClient(t) + defer s.Stop() + + s.WaitForSerfCheck(t) + + entries := c.ConfigEntries() + + // Associate the gateway and api/redis services + gwEntry := IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress", + Listeners: []IngressListener{ + { + Port: 8888, + Services: []IngressService{ + { + Name: "api", + }, + }, + }, + { + Port: 9999, + Services: []IngressService{ + { + Name: "redis", + }, + }, + }, + }, + } + retry.Run(t, func(r *retry.R) { + if success, _, err := entries.Set(&gwEntry, nil); err != nil || !success { + r.Fatal(err) + } + }) + + catalog := c.Catalog() + + expect := []*GatewayService{ + { + Service: CompoundServiceName{"api", defaultNamespace}, + Gateway: CompoundServiceName{"ingress", defaultNamespace}, + GatewayKind: ServiceKindIngressGateway, + Protocol: "tcp", + Port: 8888, + }, + { + Service: CompoundServiceName{"redis", defaultNamespace}, + Gateway: CompoundServiceName{"ingress", defaultNamespace}, + GatewayKind: ServiceKindIngressGateway, + Protocol: "tcp", + Port: 9999, + }, + } + retry.Run(t, func(r *retry.R) { + resp, _, err := catalog.GatewayServices("ingress", nil) + assert.NoError(r, err) + assert.Equal(r, expect, resp) + }) +} diff -Nru consul-1.7.4+dfsg1/api/config_entry_discoverychain.go consul-1.8.7+dfsg1/api/config_entry_discoverychain.go --- consul-1.7.4+dfsg1/api/config_entry_discoverychain.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/config_entry_discoverychain.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,6 +12,7 @@ Routes []ServiceRoute `json:",omitempty"` + Meta map[string]string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 } @@ -31,12 +32,12 @@ } type ServiceRouteHTTPMatch struct { - PathExact string `json:",omitempty"` - PathPrefix string `json:",omitempty"` - PathRegex string `json:",omitempty"` + PathExact string `json:",omitempty" alias:"path_exact"` + PathPrefix string `json:",omitempty" alias:"path_prefix"` + PathRegex string `json:",omitempty" alias:"path_regex"` Header []ServiceRouteHTTPMatchHeader `json:",omitempty"` - QueryParam []ServiceRouteHTTPMatchQueryParam `json:",omitempty"` + QueryParam []ServiceRouteHTTPMatchQueryParam `json:",omitempty" alias:"query_param"` Methods []string `json:",omitempty"` } @@ -59,13 +60,13 @@ type ServiceRouteDestination struct { Service string `json:",omitempty"` - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` Namespace string `json:",omitempty"` - PrefixRewrite string `json:",omitempty"` - RequestTimeout time.Duration `json:",omitempty"` - NumRetries uint32 `json:",omitempty"` - RetryOnConnectFailure bool `json:",omitempty"` - RetryOnStatusCodes []uint32 `json:",omitempty"` + PrefixRewrite string `json:",omitempty" alias:"prefix_rewrite"` + RequestTimeout time.Duration `json:",omitempty" alias:"request_timeout"` + NumRetries uint32 `json:",omitempty" alias:"num_retries"` + RetryOnConnectFailure bool `json:",omitempty" alias:"retry_on_connect_failure"` + RetryOnStatusCodes []uint32 `json:",omitempty" alias:"retry_on_status_codes"` } func (e *ServiceRouteDestination) MarshalJSON() ([]byte, error) { @@ -111,6 +112,7 @@ Splits []ServiceSplit `json:",omitempty"` + Meta map[string]string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 } @@ -123,7 +125,7 @@ type ServiceSplit struct { Weight float32 Service string `json:",omitempty"` - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` Namespace string `json:",omitempty"` } @@ -132,12 +134,13 @@ Name string Namespace string `json:",omitempty"` - DefaultSubset string `json:",omitempty"` + DefaultSubset string `json:",omitempty" alias:"default_subset"` Subsets map[string]ServiceResolverSubset `json:",omitempty"` Redirect *ServiceResolverRedirect `json:",omitempty"` Failover map[string]ServiceResolverFailover `json:",omitempty"` - ConnectTimeout time.Duration `json:",omitempty"` + ConnectTimeout time.Duration `json:",omitempty" alias:"connect_timeout"` + Meta map[string]string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 } @@ -185,19 +188,19 @@ type ServiceResolverSubset struct { Filter string `json:",omitempty"` - OnlyPassing bool `json:",omitempty"` + OnlyPassing bool `json:",omitempty" alias:"only_passing"` } type ServiceResolverRedirect struct { Service string `json:",omitempty"` - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` Namespace string `json:",omitempty"` Datacenter string `json:",omitempty"` } type ServiceResolverFailover struct { Service string `json:",omitempty"` - ServiceSubset string `json:",omitempty"` + ServiceSubset string `json:",omitempty" alias:"service_subset"` Namespace string `json:",omitempty"` Datacenters []string `json:",omitempty"` } diff -Nru consul-1.7.4+dfsg1/api/config_entry_gateways.go consul-1.8.7+dfsg1/api/config_entry_gateways.go --- consul-1.7.4+dfsg1/api/config_entry_gateways.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/api/config_entry_gateways.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,174 @@ +package api + +// IngressGatewayConfigEntry manages the configuration for an ingress service +// with the given name. +type IngressGatewayConfigEntry struct { + // Kind of the config entry. This should be set to api.IngressGateway. + Kind string + + // Name is used to match the config entry with its associated ingress gateway + // service. This should match the name provided in the service definition. + Name string + + // Namespace is the namespace the IngressGateway is associated with + // Namespacing is a Consul Enterprise feature. + Namespace string `json:",omitempty"` + + // TLS holds the TLS configuration for this gateway. + TLS GatewayTLSConfig + + // Listeners declares what ports the ingress gateway should listen on, and + // what services to associated to those ports. + Listeners []IngressListener + + Meta map[string]string `json:",omitempty"` + + // CreateIndex is the Raft index this entry was created at. This is a + // read-only field. + CreateIndex uint64 + + // ModifyIndex is used for the Check-And-Set operations and can also be fed + // back into the WaitIndex of the QueryOptions in order to perform blocking + // queries. + ModifyIndex uint64 +} + +type GatewayTLSConfig struct { + // Indicates that TLS should be enabled for this gateway service + Enabled bool +} + +// IngressListener manages the configuration for a listener on a specific port. +type IngressListener struct { + // Port declares the port on which the ingress gateway should listen for traffic. + Port int + + // Protocol declares what type of traffic this listener is expected to + // receive. Depending on the protocol, a listener might support multiplexing + // services over a single port, or additional discovery chain features. The + // current supported values are: (tcp | http | http2 | grpc). + Protocol string + + // Services declares the set of services to which the listener forwards + // traffic. + // + // For "tcp" protocol listeners, only a single service is allowed. + // For "http" listeners, multiple services can be declared. + Services []IngressService +} + +// IngressService manages configuration for services that are exposed to +// ingress traffic. +type IngressService struct { + // Name declares the service to which traffic should be forwarded. + // + // This can either be a specific service, or the wildcard specifier, + // "*". If the wildcard specifier is provided, the listener must be of "http" + // protocol and means that the listener will forward traffic to all services. + // + // A name can be specified on multiple listeners, and will be exposed on both + // of the listeners + Name string + + // Hosts is a list of hostnames which should be associated to this service on + // the defined listener. Only allowed on layer 7 protocols, this will be used + // to route traffic to the service by matching the Host header of the HTTP + // request. + // + // If a host is provided for a service that also has a wildcard specifier + // defined, the host will override the wildcard-specifier-provided + // ".*" domain for that listener. + // + // This cannot be specified when using the wildcard specifier, "*", or when + // using a "tcp" listener. + Hosts []string + + // Namespace is the namespace where the service is located. + // Namespacing is a Consul Enterprise feature. + Namespace string `json:",omitempty"` +} + +func (i *IngressGatewayConfigEntry) GetKind() string { + return i.Kind +} + +func (i *IngressGatewayConfigEntry) GetName() string { + return i.Name +} + +func (i *IngressGatewayConfigEntry) GetCreateIndex() uint64 { + return i.CreateIndex +} + +func (i *IngressGatewayConfigEntry) GetModifyIndex() uint64 { + return i.ModifyIndex +} + +// TerminatingGatewayConfigEntry manages the configuration for a terminating gateway +// with the given name. +type TerminatingGatewayConfigEntry struct { + // Kind of the config entry. This should be set to api.TerminatingGateway. + Kind string + + // Name is used to match the config entry with its associated terminating gateway + // service. This should match the name provided in the service definition. + Name string + + // Services is a list of service names represented by the terminating gateway. + Services []LinkedService `json:",omitempty"` + + Meta map[string]string `json:",omitempty"` + + // CreateIndex is the Raft index this entry was created at. This is a + // read-only field. + CreateIndex uint64 + + // ModifyIndex is used for the Check-And-Set operations and can also be fed + // back into the WaitIndex of the QueryOptions in order to perform blocking + // queries. + ModifyIndex uint64 + + // Namespace is the namespace the config entry is associated with + // Namespacing is a Consul Enterprise feature. + Namespace string `json:",omitempty"` +} + +// A LinkedService is a service represented by a terminating gateway +type LinkedService struct { + // The namespace the service is registered in + Namespace string `json:",omitempty"` + + // Name is the name of the service, as defined in Consul's catalog + Name string `json:",omitempty"` + + // CAFile is the optional path to a CA certificate to use for TLS connections + // from the gateway to the linked service + CAFile string `json:",omitempty" alias:"ca_file"` + + // CertFile is the optional path to a client certificate to use for TLS connections + // from the gateway to the linked service + CertFile string `json:",omitempty" alias:"cert_file"` + + // KeyFile is the optional path to a private key to use for TLS connections + // from the gateway to the linked service + KeyFile string `json:",omitempty" alias:"key_file"` + + // SNI is the optional name to specify during the TLS handshake with a linked service + SNI string `json:",omitempty"` +} + +func (g *TerminatingGatewayConfigEntry) GetKind() string { + return g.Kind +} + +func (g *TerminatingGatewayConfigEntry) GetName() string { + return g.Name +} + +func (g *TerminatingGatewayConfigEntry) GetCreateIndex() uint64 { + return g.CreateIndex +} + +func (g *TerminatingGatewayConfigEntry) GetModifyIndex() uint64 { + return g.ModifyIndex +} diff -Nru consul-1.7.4+dfsg1/api/config_entry_gateways_test.go consul-1.8.7+dfsg1/api/config_entry_gateways_test.go --- consul-1.7.4+dfsg1/api/config_entry_gateways_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/api/config_entry_gateways_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,284 @@ +package api + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestAPI_ConfigEntries_IngressGateway(t *testing.T) { + t.Parallel() + c, s := makeClient(t) + defer s.Stop() + + config_entries := c.ConfigEntries() + + ingress1 := &IngressGatewayConfigEntry{ + Kind: IngressGateway, + Name: "foo", + } + + ingress2 := &IngressGatewayConfigEntry{ + Kind: IngressGateway, + Name: "bar", + TLS: GatewayTLSConfig{ + Enabled: true, + }, + } + + global := &ProxyConfigEntry{ + Kind: ProxyDefaults, + Name: ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", + }, + } + // set default protocol to http so that ingress gateways pass validation + _, wm, err := config_entries.Set(global, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // set it + _, wm, err = config_entries.Set(ingress1, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // also set the second one + _, wm, err = config_entries.Set(ingress2, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // get it + entry, qm, err := config_entries.Get(IngressGateway, "foo", nil) + require.NoError(t, err) + require.NotNil(t, qm) + require.NotEqual(t, 0, qm.RequestTime) + + // verify it + readIngress, ok := entry.(*IngressGatewayConfigEntry) + require.True(t, ok) + require.Equal(t, ingress1.Kind, readIngress.Kind) + require.Equal(t, ingress1.Name, readIngress.Name) + + // update it + ingress1.Listeners = []IngressListener{ + { + Port: 2222, + Protocol: "http", + Services: []IngressService{ + { + Name: "asdf", + Hosts: []string{"test.example.com"}, + }, + }, + }, + } + + // CAS fail + written, _, err := config_entries.CAS(ingress1, 0, nil) + require.NoError(t, err) + require.False(t, written) + + // CAS success + written, wm, err = config_entries.CAS(ingress1, readIngress.ModifyIndex, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + require.True(t, written) + + // update no cas + ingress2.Listeners = []IngressListener{ + { + Port: 3333, + Protocol: "http", + Services: []IngressService{ + { + Name: "qwer", + }, + }, + }, + } + _, wm, err = config_entries.Set(ingress2, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // list them + entries, qm, err := config_entries.List(IngressGateway, nil) + require.NoError(t, err) + require.NotNil(t, qm) + require.NotEqual(t, 0, qm.RequestTime) + require.Len(t, entries, 2) + + for _, entry = range entries { + switch entry.GetName() { + case "foo": + // this also verifies that the update value was persisted and + // the updated values are seen + readIngress, ok = entry.(*IngressGatewayConfigEntry) + require.True(t, ok) + require.Equal(t, ingress1.Kind, readIngress.Kind) + require.Equal(t, ingress1.Name, readIngress.Name) + + require.Len(t, readIngress.Listeners, 1) + require.Len(t, readIngress.Listeners[0].Services, 1) + // Set namespace to blank so that OSS and ent can utilize the same tests + readIngress.Listeners[0].Services[0].Namespace = "" + + require.Equal(t, ingress1.Listeners, readIngress.Listeners) + case "bar": + readIngress, ok = entry.(*IngressGatewayConfigEntry) + require.True(t, ok) + require.Equal(t, ingress2.Kind, readIngress.Kind) + require.Equal(t, ingress2.Name, readIngress.Name) + require.Len(t, readIngress.Listeners, 1) + require.Len(t, readIngress.Listeners[0].Services, 1) + // Set namespace to blank so that OSS and ent can utilize the same tests + readIngress.Listeners[0].Services[0].Namespace = "" + + require.Equal(t, ingress2.Listeners, readIngress.Listeners) + } + } + + // delete it + wm, err = config_entries.Delete(IngressGateway, "foo", nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // verify deletion + _, _, err = config_entries.Get(IngressGateway, "foo", nil) + require.Error(t, err) +} + +func TestAPI_ConfigEntries_TerminatingGateway(t *testing.T) { + t.Parallel() + c, s := makeClient(t) + defer s.Stop() + + configEntries := c.ConfigEntries() + + terminating1 := &TerminatingGatewayConfigEntry{ + Kind: TerminatingGateway, + Name: "foo", + } + + terminating2 := &TerminatingGatewayConfigEntry{ + Kind: TerminatingGateway, + Name: "bar", + } + + // set it + _, wm, err := configEntries.Set(terminating1, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // also set the second one + _, wm, err = configEntries.Set(terminating2, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // get it + entry, qm, err := configEntries.Get(TerminatingGateway, "foo", nil) + require.NoError(t, err) + require.NotNil(t, qm) + require.NotEqual(t, 0, qm.RequestTime) + + // verify it + readTerminating, ok := entry.(*TerminatingGatewayConfigEntry) + require.True(t, ok) + require.Equal(t, terminating1.Kind, readTerminating.Kind) + require.Equal(t, terminating1.Name, readTerminating.Name) + + // update it + terminating1.Services = []LinkedService{ + { + Name: "web", + CAFile: "/etc/web/ca.crt", + CertFile: "/etc/web/client.crt", + KeyFile: "/etc/web/tls.key", + SNI: "mydomain", + }, + } + + // CAS fail + written, _, err := configEntries.CAS(terminating1, 0, nil) + require.NoError(t, err) + require.False(t, written) + + // CAS success + written, wm, err = configEntries.CAS(terminating1, readTerminating.ModifyIndex, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + require.True(t, written) + + // re-setting should not yield an error + _, wm, err = configEntries.Set(terminating1, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + terminating2.Services = []LinkedService{ + { + Name: "*", + CAFile: "/etc/certs/ca.crt", + CertFile: "/etc/certs/client.crt", + KeyFile: "/etc/certs/tls.key", + SNI: "mydomain", + }, + } + _, wm, err = configEntries.Set(terminating2, nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // list them + entries, qm, err := configEntries.List(TerminatingGateway, nil) + require.NoError(t, err) + require.NotNil(t, qm) + require.NotEqual(t, 0, qm.RequestTime) + require.Len(t, entries, 2) + + for _, entry = range entries { + switch entry.GetName() { + case "foo": + // this also verifies that the update value was persisted and + // the updated values are seen + readTerminating, ok = entry.(*TerminatingGatewayConfigEntry) + require.True(t, ok) + require.Equal(t, terminating1.Kind, readTerminating.Kind) + require.Equal(t, terminating1.Name, readTerminating.Name) + require.Len(t, readTerminating.Services, 1) + // Set namespace to blank so that OSS and ent can utilize the same tests + readTerminating.Services[0].Namespace = "" + + require.Equal(t, terminating1.Services, readTerminating.Services) + case "bar": + readTerminating, ok = entry.(*TerminatingGatewayConfigEntry) + require.True(t, ok) + require.Equal(t, terminating2.Kind, readTerminating.Kind) + require.Equal(t, terminating2.Name, readTerminating.Name) + require.Len(t, readTerminating.Services, 1) + // Set namespace to blank so that OSS and ent can utilize the same tests + readTerminating.Services[0].Namespace = "" + + require.Equal(t, terminating2.Services, readTerminating.Services) + } + } + + // delete it + wm, err = configEntries.Delete(TerminatingGateway, "foo", nil) + require.NoError(t, err) + require.NotNil(t, wm) + require.NotEqual(t, 0, wm.RequestTime) + + // verify deletion + _, _, err = configEntries.Get(TerminatingGateway, "foo", nil) + require.Error(t, err) +} diff -Nru consul-1.7.4+dfsg1/api/config_entry.go consul-1.8.7+dfsg1/api/config_entry.go --- consul-1.7.4+dfsg1/api/config_entry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/config_entry.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,11 +12,13 @@ ) const ( - ServiceDefaults string = "service-defaults" - ProxyDefaults string = "proxy-defaults" - ServiceRouter string = "service-router" - ServiceSplitter string = "service-splitter" - ServiceResolver string = "service-resolver" + ServiceDefaults string = "service-defaults" + ProxyDefaults string = "proxy-defaults" + ServiceRouter string = "service-router" + ServiceSplitter string = "service-splitter" + ServiceResolver string = "service-resolver" + IngressGateway string = "ingress-gateway" + TerminatingGateway string = "terminating-gateway" ProxyConfigGlobal string = "global" ) @@ -69,13 +71,13 @@ type ExposePath struct { // ListenerPort defines the port of the proxy's listener for exposed paths. - ListenerPort int `json:",omitempty"` + ListenerPort int `json:",omitempty" alias:"listener_port"` // Path is the path to expose through the proxy, ie. "/metrics." Path string `json:",omitempty"` // LocalPathPort is the port that the service is listening on for the given path. - LocalPathPort int `json:",omitempty"` + LocalPathPort int `json:",omitempty" alias:"local_path_port"` // Protocol describes the upstream's service protocol. // Valid values are "http" and "http2", defaults to "http" @@ -90,9 +92,10 @@ Name string Namespace string `json:",omitempty"` Protocol string `json:",omitempty"` - MeshGateway MeshGatewayConfig `json:",omitempty"` + MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` Expose ExposeConfig `json:",omitempty"` - ExternalSNI string `json:",omitempty"` + ExternalSNI string `json:",omitempty" alias:"external_sni"` + Meta map[string]string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 } @@ -118,8 +121,9 @@ Name string Namespace string `json:",omitempty"` Config map[string]interface{} `json:",omitempty"` - MeshGateway MeshGatewayConfig `json:",omitempty"` + MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` Expose ExposeConfig `json:",omitempty"` + Meta map[string]string `json:",omitempty"` CreateIndex uint64 ModifyIndex uint64 } @@ -140,11 +144,6 @@ return p.ModifyIndex } -type rawEntryListResponse struct { - kind string - Entries []map[string]interface{} -} - func makeConfigEntry(kind, name string) (ConfigEntry, error) { switch kind { case ServiceDefaults: @@ -157,6 +156,10 @@ return &ServiceSplitterConfigEntry{Kind: kind, Name: name}, nil case ServiceResolver: return &ServiceResolverConfigEntry{Kind: kind, Name: name}, nil + case IngressGateway: + return &IngressGatewayConfigEntry{Kind: kind, Name: name}, nil + case TerminatingGateway: + return &TerminatingGatewayConfigEntry{Kind: kind, Name: name}, nil default: return nil, fmt.Errorf("invalid config entry kind: %s", kind) } diff -Nru consul-1.7.4+dfsg1/api/config_entry_test.go consul-1.8.7+dfsg1/api/config_entry_test.go --- consul-1.7.4+dfsg1/api/config_entry_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/config_entry_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -83,7 +83,7 @@ require.NotNil(t, wm) require.NotEqual(t, 0, wm.RequestTime) - entry, qm, err = config_entries.Get(ProxyDefaults, ProxyConfigGlobal, nil) + _, _, err = config_entries.Get(ProxyDefaults, ProxyConfigGlobal, nil) require.Error(t, err) }) @@ -181,7 +181,7 @@ require.NotEqual(t, 0, wm.RequestTime) // verify deletion - entry, qm, err = config_entries.Get(ServiceDefaults, "foo", nil) + _, _, err = config_entries.Get(ServiceDefaults, "foo", nil) require.Error(t, err) }) } @@ -271,6 +271,10 @@ { "Kind": "proxy-defaults", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Config": { "foo": 19, "bar": "abc", @@ -286,6 +290,10 @@ expect: &ProxyConfigEntry{ Kind: "proxy-defaults", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Config: map[string]interface{}{ "foo": float64(19), "bar": "abc", @@ -304,6 +312,10 @@ { "Kind": "service-defaults", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Protocol": "http", "ExternalSNI": "abc-123", "MeshGateway": { @@ -312,8 +324,12 @@ } `, expect: &ServiceConfigEntry{ - Kind: "service-defaults", - Name: "main", + Kind: "service-defaults", + Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Protocol: "http", ExternalSNI: "abc-123", MeshGateway: MeshGatewayConfig{ @@ -327,6 +343,10 @@ { "Kind": "service-router", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Routes": [ { "Match": { @@ -407,6 +427,10 @@ expect: &ServiceRouterConfigEntry{ Kind: "service-router", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Routes: []ServiceRoute{ { Match: &ServiceRouteMatch{ @@ -490,6 +514,10 @@ { "Kind": "service-splitter", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Splits": [ { "Weight": 99.1, @@ -506,6 +534,10 @@ expect: &ServiceSplitterConfigEntry{ Kind: ServiceSplitter, Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Splits: []ServiceSplit{ { Weight: 99.1, @@ -525,6 +557,10 @@ { "Kind": "service-resolver", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "DefaultSubset": "v1", "ConnectTimeout": "15s", "Subsets": { @@ -549,8 +585,12 @@ } }`, expect: &ServiceResolverConfigEntry{ - Kind: "service-resolver", - Name: "main", + Kind: "service-resolver", + Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, DefaultSubset: "v1", ConnectTimeout: 15 * time.Second, Subsets: map[string]ServiceResolverSubset{ @@ -613,6 +653,135 @@ Name: "main", }, }, + { + name: "ingress-gateway", + body: ` + { + "Kind": "ingress-gateway", + "Name": "ingress-web", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, + "Tls": { + "Enabled": true + }, + "Listeners": [ + { + "Port": 8080, + "Protocol": "http", + "Services": [ + { + "Name": "web", + "Namespace": "foo" + }, + { + "Name": "db" + } + ] + }, + { + "Port": 9999, + "Protocol": "tcp", + "Services": [ + { + "Name": "mysql" + } + ] + } + ] + } + `, + expect: &IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + TLS: GatewayTLSConfig{ + Enabled: true, + }, + Listeners: []IngressListener{ + IngressListener{ + Port: 8080, + Protocol: "http", + Services: []IngressService{ + IngressService{ + Name: "web", + Namespace: "foo", + }, + IngressService{ + Name: "db", + }, + }, + }, + IngressListener{ + Port: 9999, + Protocol: "tcp", + Services: []IngressService{ + IngressService{ + Name: "mysql", + }, + }, + }, + }, + }, + }, + { + name: "terminating-gateway", + body: ` + { + "Kind": "terminating-gateway", + "Name": "terminating-west", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, + "Services": [ + { + "Namespace": "foo", + "Name": "web", + "CAFile": "/etc/ca.pem", + "CertFile": "/etc/cert.pem", + "KeyFile": "/etc/tls.key", + "SNI": "mydomain" + }, + { + "Name": "api" + }, + { + "Namespace": "bar", + "Name": "*" + } + ] + }`, + expect: &TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-west", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + Services: []LinkedService{ + { + Namespace: "foo", + Name: "web", + CAFile: "/etc/ca.pem", + CertFile: "/etc/cert.pem", + KeyFile: "/etc/tls.key", + SNI: "mydomain", + }, + { + Name: "api", + }, + { + Namespace: "bar", + Name: "*", + }, + }, + }, + }, } { tc := tc diff -Nru consul-1.7.4+dfsg1/api/connect_ca_test.go consul-1.8.7+dfsg1/api/connect_ca_test.go --- consul-1.7.4+dfsg1/api/connect_ca_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/connect_ca_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -40,7 +40,7 @@ connect := c.Connect() list, meta, err := connect.CARoots(nil) r.Check(err) - if meta.LastIndex <= 0 { + if meta.LastIndex == 0 { r.Fatalf("expected roots raft index to be > 0") } if v := len(list.Roots); v != 1 { diff -Nru consul-1.7.4+dfsg1/api/connect_intention.go consul-1.8.7+dfsg1/api/connect_intention.go --- consul-1.7.4+dfsg1/api/connect_intention.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/connect_intention.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ // SourceType is the type of the value for the source. SourceType IntentionSourceType - // Action is whether this is a whitelist or blacklist intention. + // Action is whether this is an allowlist or denylist intention. Action IntentionAction // DefaultAddr, DefaultPort of the local listening proxy (if any) to @@ -99,7 +99,7 @@ const IntentionDefaultNamespace = "default" // IntentionAction is the action that the intention represents. This -// can be "allow" or "deny" to whitelist or blacklist intentions. +// can be "allow" or "deny" to allowlist or denylist intentions. type IntentionAction string const ( diff -Nru consul-1.7.4+dfsg1/api/.golangci.yml consul-1.8.7+dfsg1/api/.golangci.yml --- consul-1.7.4+dfsg1/api/.golangci.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/api/.golangci.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +linters: + disable-all: true + enable: + - gofmt + - govet + - unconvert + - staticcheck + - ineffassign + +issues: + # Disable the default exclude list so that all excludes are explicitly + # defined in this file. + exclude-use-default: false + + exclude-rules: + # Temp Ignore SA9004: only the first constant in this group has an explicit type + # https://staticcheck.io/docs/checks#SA9004 + - linters: [staticcheck] + text: "SA9004:" + + # Temp ignore SA2002: the goroutine calls T.Fatalf, which must be called in the same goroutine as the test + - linters: [staticcheck] + text: "SA2002:" + +linters-settings: + gofmt: + simplify: false + +run: + timeout: 5m diff -Nru consul-1.7.4+dfsg1/api/go.mod consul-1.8.7+dfsg1/api/go.mod --- consul-1.7.4+dfsg1/api/go.mod 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/go.mod 2020-12-10 21:46:52.000000000 +0000 @@ -5,12 +5,12 @@ replace github.com/hashicorp/consul/sdk => ../sdk require ( - github.com/hashicorp/consul/sdk v0.4.0 + github.com/hashicorp/consul/sdk v0.6.0 github.com/hashicorp/go-cleanhttp v0.5.1 github.com/hashicorp/go-hclog v0.12.0 github.com/hashicorp/go-rootcerts v1.0.2 github.com/hashicorp/go-uuid v1.0.1 - github.com/hashicorp/serf v0.8.2 + github.com/hashicorp/serf v0.9.3 github.com/mitchellh/mapstructure v1.1.2 github.com/stretchr/testify v1.4.0 ) diff -Nru consul-1.7.4+dfsg1/api/go.sum consul-1.8.7+dfsg1/api/go.sum --- consul-1.7.4+dfsg1/api/go.sum 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/go.sum 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 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= @@ -24,6 +25,8 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= @@ -32,15 +35,14 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2 h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/serf v0.9.3 h1:AVF6JDQQens6nMHT9OGERBvK0f8rPrAGILnsKLr6lzM= +github.com/hashicorp/serf v0.9.3/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -49,6 +51,8 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= @@ -58,13 +62,13 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= 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-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -75,32 +79,48 @@ 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3 h1:KYQXGkl6vs02hK7pK4eIbw0NpNPedieTSTEiJ//bwGs= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc h1:a3CU5tJYVj92DY2LaA1kUkrsqD5/3mLDhx2NcNqyW+0= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5 h1:x6r4Jo0KNzOOzYd8lbcRsqjuqEASK6ob3auvWYM4/8U= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= 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-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= diff -Nru consul-1.7.4+dfsg1/api/health.go consul-1.8.7+dfsg1/api/health.go --- consul-1.7.4+dfsg1/api/health.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/health.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,6 +18,12 @@ ) const ( + serviceHealth = "service" + connectHealth = "connect" + ingressHealth = "ingress" +) + +const ( // NodeMaint is the special key set by a node in maintenance mode. NodeMaint = "_node_maintenance" @@ -170,7 +176,7 @@ func (c HealthChecks) AggregatedStatus() string { var passing, warning, critical, maintenance bool for _, check := range c { - id := string(check.CheckID) + id := check.CheckID if id == NodeMaint || strings.HasPrefix(id, ServiceMaintPrefix) { maintenance = true continue @@ -269,11 +275,11 @@ if tag != "" { tags = []string{tag} } - return h.service(service, tags, passingOnly, q, false) + return h.service(service, tags, passingOnly, q, serviceHealth) } func (h *Health) ServiceMultipleTags(service string, tags []string, passingOnly bool, q *QueryOptions) ([]*ServiceEntry, *QueryMeta, error) { - return h.service(service, tags, passingOnly, q, false) + return h.service(service, tags, passingOnly, q, serviceHealth) } // Connect is equivalent to Service except that it will only return services @@ -286,18 +292,31 @@ if tag != "" { tags = []string{tag} } - return h.service(service, tags, passingOnly, q, true) + return h.service(service, tags, passingOnly, q, connectHealth) } func (h *Health) ConnectMultipleTags(service string, tags []string, passingOnly bool, q *QueryOptions) ([]*ServiceEntry, *QueryMeta, error) { - return h.service(service, tags, passingOnly, q, true) + return h.service(service, tags, passingOnly, q, connectHealth) +} + +// Ingress is equivalent to Connect except that it will only return associated +// ingress gateways for the requested service. +func (h *Health) Ingress(service string, passingOnly bool, q *QueryOptions) ([]*ServiceEntry, *QueryMeta, error) { + var tags []string + return h.service(service, tags, passingOnly, q, ingressHealth) } -func (h *Health) service(service string, tags []string, passingOnly bool, q *QueryOptions, connect bool) ([]*ServiceEntry, *QueryMeta, error) { - path := "/v1/health/service/" + service - if connect { +func (h *Health) service(service string, tags []string, passingOnly bool, q *QueryOptions, healthType string) ([]*ServiceEntry, *QueryMeta, error) { + var path string + switch healthType { + case connectHealth: path = "/v1/health/connect/" + service + case ingressHealth: + path = "/v1/health/ingress/" + service + default: + path = "/v1/health/service/" + service } + r := h.c.newRequest("GET", path) r.setQueryOptions(q) if len(tags) > 0 { diff -Nru consul-1.7.4+dfsg1/api/health_test.go consul-1.8.7+dfsg1/api/health_test.go --- consul-1.7.4+dfsg1/api/health_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/health_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -211,7 +211,6 @@ if err := agent.ServiceRegister(reg); err != nil { t.Fatalf("err: %v", err) } - defer agent.ServiceDeregister("foo") retry.Run(t, func(r *retry.R) { checks := HealthChecks{ @@ -264,7 +263,6 @@ if err := agent.ServiceRegister(reg); err != nil { t.Fatalf("err: %v", err) } - defer agent.ServiceDeregister("foo") retry.Run(t, func(r *retry.R) { checks, meta, err := health.Checks("foo", &QueryOptions{NodeMeta: meta}) @@ -354,7 +352,6 @@ }, } require.NoError(t, agent.ServiceRegister(reg)) - defer agent.ServiceDeregister("foo1") retry.Run(t, func(r *retry.R) { services, meta, err := health.Service("foo", "bar", true, nil) require.NoError(r, err) @@ -390,7 +387,6 @@ }, } require.NoError(t, agent.ServiceRegister(reg)) - defer agent.ServiceDeregister("foo1") reg2 := &AgentServiceRegistration{ Name: "foo", @@ -402,7 +398,6 @@ }, } require.NoError(t, agent.ServiceRegister(reg2)) - defer agent.ServiceDeregister("foo2") // Test searching with one tag (two results) retry.Run(t, func(r *retry.R) { @@ -488,7 +483,6 @@ } err := agent.ServiceRegister(reg) require.NoError(t, err) - defer agent.ServiceDeregister("foo") // Register the proxy proxyReg := &AgentServiceRegistration{ @@ -501,7 +495,6 @@ } err = agent.ServiceRegister(proxyReg) require.NoError(t, err) - defer agent.ServiceDeregister("foo-proxy") retry.Run(t, func(r *retry.R) { services, meta, err := health.Connect("foo", "", true, nil) @@ -546,6 +539,67 @@ require.Len(t, services, 1) } +func TestAPI_HealthIngress(t *testing.T) { + t.Parallel() + c, s := makeClient(t) + defer s.Stop() + + agent := c.Agent() + health := c.Health() + + s.WaitForSerfCheck(t) + + // Make a service with a proxy + reg := &AgentServiceRegistration{ + Name: "foo", + Port: 8000, + } + err := agent.ServiceRegister(reg) + require.NoError(t, err) + + // Register the gateway + gatewayReg := &AgentServiceRegistration{ + Name: "foo-gateway", + Port: 8001, + Kind: ServiceKindIngressGateway, + } + err = agent.ServiceRegister(gatewayReg) + require.NoError(t, err) + + // Associate service and gateway + gatewayConfig := &IngressGatewayConfigEntry{ + Kind: IngressGateway, + Name: "foo-gateway", + Listeners: []IngressListener{ + { + Port: 2222, + Protocol: "tcp", + Services: []IngressService{ + { + Name: "foo", + }, + }, + }, + }, + } + _, wm, err := c.ConfigEntries().Set(gatewayConfig, nil) + require.NoError(t, err) + require.NotNil(t, wm) + + retry.Run(t, func(r *retry.R) { + services, meta, err := health.Ingress("foo", true, nil) + require.NoError(r, err) + + require.NotZero(r, meta.LastIndex) + + // Should be exactly 1 service - the original shouldn't show up as a connect + // endpoint, only it's proxy. + require.Len(r, services, 1) + require.Equal(r, services[0].Node.Datacenter, "dc1") + require.Equal(r, services[0].Service.Service, gatewayReg.Name) + }) +} + func TestAPI_HealthState(t *testing.T) { t.Parallel() c, s := makeClient(t) diff -Nru consul-1.7.4+dfsg1/api/lock.go consul-1.8.7+dfsg1/api/lock.go --- consul-1.7.4+dfsg1/api/lock.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/lock.go 2020-12-10 21:46:52.000000000 +0000 @@ -227,6 +227,9 @@ // Determine why the lock failed qOpts.WaitIndex = 0 pair, meta, err = kv.Get(l.opts.Key, &qOpts) + if err != nil { + return nil, err + } if pair != nil && pair.Session != "" { //If the session is not null, this means that a wait can safely happen //using a long poll diff -Nru consul-1.7.4+dfsg1/api/operator_keyring.go consul-1.8.7+dfsg1/api/operator_keyring.go --- consul-1.7.4+dfsg1/api/operator_keyring.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/operator_keyring.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,6 +22,9 @@ // A map of the encryption keys to the number of nodes they're installed on Keys map[string]int + // A map of the encryption primary keys to the number of nodes they're installed on + PrimaryKeys map[string]int + // The total number of nodes in this ring NumNodes int } diff -Nru consul-1.7.4+dfsg1/api/operator_license.go consul-1.8.7+dfsg1/api/operator_license.go --- consul-1.7.4+dfsg1/api/operator_license.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/operator_license.go 2020-12-10 21:46:52.000000000 +0000 @@ -36,6 +36,9 @@ // License Specific Flags Flags map[string]interface{} `json:"flags"` + // Modules is a list of the licensed enterprise modules + Modules []string `json:"modules"` + // List of features enabled by the license Features []string `json:"features"` } diff -Nru consul-1.7.4+dfsg1/api/operator_raft.go consul-1.8.7+dfsg1/api/operator_raft.go --- consul-1.7.4+dfsg1/api/operator_raft.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/operator_raft.go 2020-12-10 21:46:52.000000000 +0000 @@ -60,7 +60,7 @@ r := op.c.newRequest("DELETE", "/v1/operator/raft/peer") r.setWriteOptions(q) - r.params.Set("address", string(address)) + r.params.Set("address", address) _, resp, err := requireOK(op.c.doRequest(r)) if err != nil { @@ -77,7 +77,7 @@ r := op.c.newRequest("DELETE", "/v1/operator/raft/peer") r.setWriteOptions(q) - r.params.Set("id", string(id)) + r.params.Set("id", id) _, resp, err := requireOK(op.c.doRequest(r)) if err != nil { diff -Nru consul-1.7.4+dfsg1/api/semaphore_test.go consul-1.8.7+dfsg1/api/semaphore_test.go --- consul-1.7.4+dfsg1/api/semaphore_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/semaphore_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -225,7 +225,7 @@ s.WaitForSerfCheck(t) - sema, err := c.SemaphorePrefix("test/semaphore", 0) + _, err := c.SemaphorePrefix("test/semaphore", 0) if err == nil { t.Fatalf("should error, limit must be positive") } diff -Nru consul-1.7.4+dfsg1/api/session_test.go consul-1.8.7+dfsg1/api/session_test.go --- consul-1.7.4+dfsg1/api/session_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/session_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,10 +2,11 @@ import ( "context" - "github.com/stretchr/testify/assert" "strings" "testing" "time" + + "github.com/stretchr/testify/assert" ) func TestAPI_SessionCreateDestroy(t *testing.T) { @@ -411,7 +412,7 @@ } defer session.Destroy(id, nil) - info, qm, err := session.Info(id, nil) + info, _, err := session.Info(id, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -478,14 +479,14 @@ } session := c.Session() - id, _, err := session.Create(&se, nil) + _, _, err := session.Create(&se, nil) if err == nil { t.Fatalf("should have failed") } // Empty node check should lead to serf check se.NodeChecks = []string{} - id, _, err = session.Create(&se, nil) + id, _, err := session.Create(&se, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -588,7 +589,7 @@ } session := c.Session() - id, _, err := session.Create(&se, nil) + _, _, err := session.Create(&se, nil) if err == nil { t.Fatalf("should have failed") } @@ -624,7 +625,7 @@ {"redis:alive", ""}, } - id, _, err = session.Create(&se, nil) + id, _, err := session.Create(&se, nil) if err != nil { t.Fatalf("err: %v", err) } diff -Nru consul-1.7.4+dfsg1/api/watch/plan.go consul-1.8.7+dfsg1/api/watch/plan.go --- consul-1.7.4+dfsg1/api/watch/plan.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/watch/plan.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,8 +31,10 @@ // Run is used to run a watch plan func (p *Plan) RunWithConfig(address string, conf *consulapi.Config) error { - // Create the logger - logger := newWatchLogger(p.LogOutput) + logger := p.Logger + if logger == nil { + logger = newWatchLogger(p.LogOutput) + } // Setup the client p.address = address diff -Nru consul-1.7.4+dfsg1/api/watch/watch.go consul-1.8.7+dfsg1/api/watch/watch.go --- consul-1.7.4+dfsg1/api/watch/watch.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/api/watch/watch.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,6 +8,7 @@ "time" consulapi "github.com/hashicorp/consul/api" + "github.com/hashicorp/go-hclog" "github.com/mitchellh/mapstructure" ) @@ -29,7 +30,10 @@ // on index param. To support hash based watches, set HybridHandler instead. Handler HandlerFunc HybridHandler HybridHandlerFunc - LogOutput io.Writer + + Logger hclog.Logger + // Deprecated: use Logger + LogOutput io.Writer address string client *consulapi.Client diff -Nru consul-1.7.4+dfsg1/build-support/docker/Build-Go.dockerfile consul-1.8.7+dfsg1/build-support/docker/Build-Go.dockerfile --- consul-1.7.4+dfsg1/build-support/docker/Build-Go.dockerfile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/docker/Build-Go.dockerfile 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,4 @@ -ARG GOLANG_VERSION=1.13.7 +ARG GOLANG_VERSION=1.14.11 FROM golang:${GOLANG_VERSION} ARG GOTOOLS="github.com/elazarl/go-bindata-assetfs/... \ diff -Nru consul-1.7.4+dfsg1/build-support/docker/Build-UI.dockerfile consul-1.8.7+dfsg1/build-support/docker/Build-UI.dockerfile --- consul-1.7.4+dfsg1/build-support/docker/Build-UI.dockerfile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/docker/Build-UI.dockerfile 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ -ARG ALPINE_VERSION=3.9 +ARG ALPINE_VERSION=3.11 FROM alpine:${ALPINE_VERSION} -ARG NODEJS_VERSION=10.14.2-r0 +ARG NODEJS_VERSION=12.15.0-r1 ARG MAKE_VERSION=4.2.1-r2 ARG YARN_VERSION=1.19.1 diff -Nru consul-1.7.4+dfsg1/build-support/docker/Test-Flake.dockerfile consul-1.8.7+dfsg1/build-support/docker/Test-Flake.dockerfile --- consul-1.7.4+dfsg1/build-support/docker/Test-Flake.dockerfile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/docker/Test-Flake.dockerfile 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ FROM travisci/ci-garnet:packer-1512502276-986baf0 -ENV GOLANG_VERSION 1.13.7 +ENV GOLANG_VERSION 1.14.11 RUN mkdir -p /home/travis/go && chown -R travis /home/travis/go diff -Nru consul-1.7.4+dfsg1/build-support/functions/10-util.sh consul-1.8.7+dfsg1/build-support/functions/10-util.sh --- consul-1.7.4+dfsg1/build-support/functions/10-util.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/functions/10-util.sh 2020-12-10 21:46:52.000000000 +0000 @@ -110,7 +110,7 @@ # Arguments: # $1 - Path to the top level Consul source # $2 - boolean value for whether the release version should be parsed from the source - # $3 - boolean whether to use GIT_DESCRIBE and GIT_COMMIT environment variables + # $3 - boolean whether to use GIT_COMMIT environment variable # $4 - boolean whether to omit the version part of the version string. (optional) # # Return: @@ -134,7 +134,6 @@ local use_git_env="$3" local omit_version="$4" - local git_version="" local git_commit="" if test -z "${include_release}" @@ -149,7 +148,6 @@ if is_set "${use_git_env}" then - git_version="${GIT_DESCRIBE}" git_commit="${GIT_COMMIT}" fi @@ -172,11 +170,6 @@ done local version="${version_main}" - # override the version from source with the value of the GIT_DESCRIBE env var if present - if test -n "${git_version}" - then - version="${git_version}" - fi local rel_ver="" if is_set "${include_release}" @@ -184,9 +177,8 @@ # Default to pre-release from the source rel_ver="${release_main}" - # When no GIT_DESCRIBE env var is present and no release is in the source then we - # are definitely in dev mode - if test -z "${git_version}" -a -z "${rel_ver}" && is_set "${use_git_env}" + # When no release is in the source then we are definitely in dev mode + if test -z "${rel_ver}" && is_set "${use_git_env}" then rel_ver="dev" fi @@ -220,7 +212,7 @@ # Arguments: # $1 - Path to the top level Consul source # $2 - Whether the release version should be parsed from source (optional) - # $3 - Whether to use GIT_DESCRIBE and GIT_COMMIT environment variables + # $3 - Whether to use GIT_COMMIT environment variable # # Returns: # 0 - success (the version is also echoed to stdout) @@ -458,14 +450,14 @@ return ${ret} } -function git_remote_not_blacklisted { +function git_remote_not_denylisted { # Arguments: # $1 - path to the repo # $2 - the remote name # # Returns: - # 0 - not blacklisted - # * - blacklisted + # 0 - not denylisted + # * - denylisted return 0 } @@ -519,9 +511,8 @@ export GIT_COMMIT=$(git rev-parse --short HEAD) export GIT_DIRTY=$(test -n "$(git status --porcelain)" && echo "+CHANGES") - export GIT_DESCRIBE=$(git describe --tags --always --match "v*") export GIT_IMPORT=github.com/hashicorp/consul/version - export GOLDFLAGS="-X ${GIT_IMPORT}.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X ${GIT_IMPORT}.GitDescribe=${GIT_DESCRIBE}" + export GOLDFLAGS="-X ${GIT_IMPORT}.GitCommit=${GIT_COMMIT}${GIT_DIRTY}" return 0 } diff -Nru consul-1.7.4+dfsg1/build-support/functions/20-build.sh consul-1.8.7+dfsg1/build-support/functions/20-build.sh --- consul-1.7.4+dfsg1/build-support/functions/20-build.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/functions/20-build.sh 2020-12-10 21:46:52.000000000 +0000 @@ -64,13 +64,13 @@ then commit_hash=$(git rev-parse --short HEAD) fi - + local commit_year="${GIT_COMMIT_YEAR}" if test -z "${commit_year}" then commit_year=$(git show -s --format=%cd --date=format:%Y HEAD) fi - + local logo_type="${CONSUL_BINARY_TYPE}" if test "$logo_type" != "oss" then @@ -140,7 +140,7 @@ # * - error # # Note: - # The GIT_COMMIT, GIT_DIRTY and GIT_DESCRIBE environment variables will be used if present + # The GIT_COMMIT and GIT_DIRTY environment variables will be used if present if ! test -d "$1" then @@ -157,7 +157,7 @@ pushd ${sdir} > /dev/null status "Creating the Go Build Container with image: ${image_name}" - local container_id=$(docker create -it -e GIT_COMMIT=${GIT_COMMIT} -e GIT_DIRTY=${GIT_DIRTY} -e GIT_DESCRIBE=${GIT_DESCRIBE} ${image_name} make static-assets ASSETFS_PATH=bindata_assetfs.go) + local container_id=$(docker create -it -e GIT_COMMIT=${GIT_COMMIT} -e GIT_DIRTY=${GIT_DIRTY} ${image_name} make static-assets ASSETFS_PATH=bindata_assetfs.go) local ret=$? if test $ret -eq 0 then @@ -436,7 +436,7 @@ if test "${arch}" != "amd64" then continue - fi + fi ;; "linux" ) # build all the binaries for Linux @@ -444,7 +444,7 @@ *) continue ;; - esac + esac echo "---> ${osarch}" diff -Nru consul-1.7.4+dfsg1/build-support/functions/40-publish.sh consul-1.8.7+dfsg1/build-support/functions/40-publish.sh --- consul-1.7.4+dfsg1/build-support/functions/40-publish.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/functions/40-publish.sh 2020-12-10 21:46:52.000000000 +0000 @@ -399,9 +399,9 @@ status_stage "==> Confirming Git Changes" confirm_git_push_changes "$1" || return 1 - status_stage "==> Checking for blacklisted Git Remote" + status_stage "==> Checking for denylisted Git Remote" local remote=$(find_git_remote "${sdir}") || return 1 - git_remote_not_blacklisted "${sdir}" "${remote}" || return 1 + git_remote_not_denylisted "${sdir}" "${remote}" || return 1 status_stage "==> Confirming Git Remote" confirm_git_remote "${sdir}" "${remote}" || return 1 diff -Nru consul-1.7.4+dfsg1/build-support/scripts/proto-gen.sh consul-1.8.7+dfsg1/build-support/scripts/proto-gen.sh --- consul-1.7.4+dfsg1/build-support/scripts/proto-gen.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/build-support/scripts/proto-gen.sh 2020-12-10 21:46:52.000000000 +0000 @@ -80,17 +80,15 @@ local proto_go_path=${proto_path%%.proto}.pb.go local proto_go_bin_path=${proto_path%%.proto}.pb.binary.go - local go_proto_out="" - local sep="" + local go_proto_out="paths=source_relative" if is_set "${grpc}" then - go_proto_out="plugins=grpc" - sep="," + go_proto_out="${go_proto_out},plugins=grpc" fi if is_set "${imp_replace}" then - go_proto_out="${go_proto_out}${sep}${gogo_proto_imp_replace}" + go_proto_out="${go_proto_out},${gogo_proto_imp_replace}" fi if test -n "${go_proto_out}" @@ -98,15 +96,19 @@ go_proto_out="${go_proto_out}:" fi + # How we run protoc probably needs some documentation. + # + # This is the path to where + # -I="${gogo_proto_path}/protobuf" \ local -i ret=0 status_stage "Generating ${proto_path} into ${proto_go_path} and ${proto_go_bin_path}" debug_run protoc \ - -I="$(dirname ${proto_path})" \ -I="${gogo_proto_path}/protobuf" \ -I="${gogo_proto_path}" \ -I="${gogo_proto_mod_path}" \ - --gofast_out="${go_proto_out}$(dirname ${proto_path})" \ - --go-binary_out="$(dirname ${proto_path})" \ + -I="${SOURCE_DIR}" \ + --gofast_out="${go_proto_out}${SOURCE_DIR}" \ + --go-binary_out="${SOURCE_DIR}" \ "${proto_path}" if test $? -ne 0 then @@ -114,7 +116,7 @@ return 1 fi - BUILD_TAGS=$(sed -e '/^[:space:]*$/,$d' < "${proto_path}" | grep '// +build') + BUILD_TAGS=$(sed -e '/^[[:space:]]*$/,$d' < "${proto_path}" | grep '// +build') if test -n "${BUILD_TAGS}" then echo -e "${BUILD_TAGS}\n" >> "${proto_go_path}.new" diff -Nru consul-1.7.4+dfsg1/.changelog/_619.txt consul-1.8.7+dfsg1/.changelog/_619.txt --- consul-1.7.4+dfsg1/.changelog/_619.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/_619.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +license: (Enterprise only) Fixed an issue where the UI would see Namespaces and SSO as licensed when they were not. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/_666.txt consul-1.8.7+dfsg1/.changelog/_666.txt --- consul-1.7.4+dfsg1/.changelog/_666.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/_666.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +namespace: **(Enterprise Only)** Fixed an issue where namespaced services and checks were not being deleted when the containing namespace was deleted. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/_683.txt consul-1.8.7+dfsg1/.changelog/_683.txt --- consul-1.7.4+dfsg1/.changelog/_683.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/_683.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +license: **(Enterprise only)** Fixed an issue where warnings about Namespaces being unlicensed would be emitted erroneously. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/7628.txt consul-1.8.7+dfsg1/.changelog/7628.txt --- consul-1.7.4+dfsg1/.changelog/7628.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/7628.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +agent: Allow to restrict servers that can join a given Serf Consul cluster. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/7899.txt consul-1.8.7+dfsg1/.changelog/7899.txt --- consul-1.7.4+dfsg1/.changelog/7899.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/7899.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +acl: allow auth methods created in the primary datacenter to optionally create global tokens. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/7970.txt consul-1.8.7+dfsg1/.changelog/7970.txt --- consul-1.7.4+dfsg1/.changelog/7970.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/7970.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:feature +acl: Added ACL Node Identities for easier creation of Consul Agent tokens. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8158.txt consul-1.8.7+dfsg1/.changelog/8158.txt --- consul-1.7.4+dfsg1/.changelog/8158.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8158.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: fix crash that would result if a mesh or terminating gateway's upstream has a hostname as an address and no healthy service instances available. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8190.txt consul-1.8.7+dfsg1/.changelog/8190.txt --- consul-1.7.4+dfsg1/.changelog/8190.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8190.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +connect: Append port number to expected ingress hosts. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8194.txt consul-1.8.7+dfsg1/.changelog/8194.txt --- consul-1.7.4+dfsg1/.changelog/8194.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8194.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +connect: various changes to make namespaces for intentions work more like for other subsystems. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8211.txt consul-1.8.7+dfsg1/.changelog/8211.txt --- consul-1.7.4+dfsg1/.changelog/8211.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8211.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +```release-note:bug +agent: Fixed a bug where Consul could crash when `verify_outgoing` was set to true but no client certificate was used. +``` + +```release-note:bug +auto_encrypt: Fixed an issue where auto encrypt certificate signing wasn't using the connect signing rate limiter. +``` + +```release-note:bug +auto_encrypt: Fixed several issues around retrieving the first TLS certificate where it would have the wrong CN and SANs. This was being masked by a second bug (also fixed) causing that certificate to immediately be discarded with a second certificate request being made afterwards. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8216.txt consul-1.8.7+dfsg1/.changelog/8216.txt --- consul-1.7.4+dfsg1/.changelog/8216.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8216.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +connect: support Envoy v1.14.4, v1.13.4, v1.12.6. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8218.txt consul-1.8.7+dfsg1/.changelog/8218.txt --- consul-1.7.4+dfsg1/.changelog/8218.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8218.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +dns: Improve RCODE of response when query targets a non-existent datacenter. [[GH-8102](https://github.com/hashicorp/consul/issues/8102)] +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8222.txt consul-1.8.7+dfsg1/.changelog/8222.txt --- consul-1.7.4+dfsg1/.changelog/8222.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8222.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +xds: version sniff envoy and switch regular expressions from 'regex' to 'safe_regex' on newer envoy versions. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8268.txt consul-1.8.7+dfsg1/.changelog/8268.txt --- consul-1.7.4+dfsg1/.changelog/8268.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8268.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +version: The `version` CLI subcommand was altered to always show the git revision the binary was built from on the second line of output. Additionally the command gained a `-format` flag with the option now of outputting the version information in JSON form. **NOTE** This change has the potential to break any parsing done by users of the `version` commands output. In many cases nothing will need to be done but it is possible depending on how the output is parsed. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8311.txt consul-1.8.7+dfsg1/.changelog/8311.txt --- consul-1.7.4+dfsg1/.changelog/8311.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8311.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +auto_encrypt: Fixed an issue that caused auto encrypt certificates to not be updated properly if the agents token was changed and the old token was deleted. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8343.txt consul-1.8.7+dfsg1/.changelog/8343.txt --- consul-1.7.4+dfsg1/.changelog/8343.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8343.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +gossip: Avoid issue where two unique leave events for the same node could lead to infinite rebroadcast storms. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8371.txt consul-1.8.7+dfsg1/.changelog/8371.txt --- consul-1.7.4+dfsg1/.changelog/8371.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8371.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: Fixed issue where specifying a prometheus bind address would cause ingress gateways to fail to start up. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8458.txt consul-1.8.7+dfsg1/.changelog/8458.txt --- consul-1.7.4+dfsg1/.changelog/8458.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8458.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +connect: Add support for http2 and grpc to ingress gateways +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8494.txt consul-1.8.7+dfsg1/.changelog/8494.txt --- consul-1.7.4+dfsg1/.changelog/8494.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8494.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +[backport/1.8.x] connect: use stronger validation that ingress gateways have compatible protocols defined for their upstreams +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8522.txt consul-1.8.7+dfsg1/.changelog/8522.txt --- consul-1.7.4+dfsg1/.changelog/8522.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8522.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +```release-note:improvement +serf: update to `v0.9.4` which supports primary keys in the ListKeys operation. +``` + +```release-note:improvement +api: `GET v1/operator/keyring` also lists primary keys. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8537.txt consul-1.8.7+dfsg1/.changelog/8537.txt --- consul-1.7.4+dfsg1/.changelog/8537.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8537.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +api: Fixed a panic caused by an api request with Connect=null +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8545.txt consul-1.8.7+dfsg1/.changelog/8545.txt --- consul-1.7.4+dfsg1/.changelog/8545.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8545.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:feature +agent: expose the list of supported envoy versions on /v1/agent/self +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8547.txt consul-1.8.7+dfsg1/.changelog/8547.txt --- consul-1.7.4+dfsg1/.changelog/8547.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8547.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +agent: ensure that we normalize bootstrapped config entries +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8552.txt consul-1.8.7+dfsg1/.changelog/8552.txt --- consul-1.7.4+dfsg1/.changelog/8552.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8552.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:feature +cache: Config parameters for cache throttling are now reloaded automatically on agent reload. Restarting the agent is not needed anymore. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8560.txt consul-1.8.7+dfsg1/.changelog/8560.txt --- consul-1.7.4+dfsg1/.changelog/8560.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8560.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +connect: The Vault provider will now automatically renew the lease of the token used, if supported. +``` \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/.changelog/8575.txt consul-1.8.7+dfsg1/.changelog/8575.txt --- consul-1.7.4+dfsg1/.changelog/8575.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8575.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +```release-note:improvement +api: Added constants for common tag keys and values in the `Tags` field of the `AgentMember` struct. +``` + +```release-note:improvement +api: Added `IsConsulServer` method to the `AgentMember` type to easily determine whether the agent is a server. +``` + +```release-note:improvement +api: Added `ACLMode` method to the `AgentMember` type to determine what ACL mode the agent is operating in. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8588.txt consul-1.8.7+dfsg1/.changelog/8588.txt --- consul-1.7.4+dfsg1/.changelog/8588.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8588.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: fix renewing secondary intermediate certificates +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8596.txt consul-1.8.7+dfsg1/.changelog/8596.txt --- consul-1.7.4+dfsg1/.changelog/8596.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8596.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:feature +connect: all config entries pick up a meta field +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8601.txt consul-1.8.7+dfsg1/.changelog/8601.txt --- consul-1.7.4+dfsg1/.changelog/8601.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8601.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: fix bug in preventing some namespaced config entry modifications +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8602.txt consul-1.8.7+dfsg1/.changelog/8602.txt --- consul-1.7.4+dfsg1/.changelog/8602.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8602.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +api: Allow for the client to use TLS over a Unix domain socket. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8606.txt consul-1.8.7+dfsg1/.changelog/8606.txt --- consul-1.7.4+dfsg1/.changelog/8606.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8606.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: `connect envoy` command now respects the `-ca-path` flag +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8646.txt consul-1.8.7+dfsg1/.changelog/8646.txt --- consul-1.7.4+dfsg1/.changelog/8646.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8646.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: fix Vault provider not respecting IntermediateCertTTL +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8685.txt consul-1.8.7+dfsg1/.changelog/8685.txt --- consul-1.7.4+dfsg1/.changelog/8685.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8685.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +fixed a bug that caused logs to be flooded with `[WARN] agent.router: Non-server in server-only area` +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8704.txt consul-1.8.7+dfsg1/.changelog/8704.txt --- consul-1.7.4+dfsg1/.changelog/8704.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8704.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +ui: show correct datacenter for gateways +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8747.txt consul-1.8.7+dfsg1/.changelog/8747.txt --- consul-1.7.4+dfsg1/.changelog/8747.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8747.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +agent: when enable_central_service_config is enabled ensure agent reload doesn't revert check state to critical +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8774.txt consul-1.8.7+dfsg1/.changelog/8774.txt --- consul-1.7.4+dfsg1/.changelog/8774.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8774.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +api: The `v1/connect/ca/roots` endpoint now accepts a `pem=true` query parameter and will return a PEM encoded certificate chain of all the certificates that would normally be in the JSON version of the response. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8784.txt consul-1.8.7+dfsg1/.changelog/8784.txt --- consul-1.7.4+dfsg1/.changelog/8784.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8784.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: Fixed an issue where the Vault intermediate was not renewed in the primary datacenter. +``` \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/.changelog/8924.txt consul-1.8.7+dfsg1/.changelog/8924.txt --- consul-1.7.4+dfsg1/.changelog/8924.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8924.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: fix connect sidecars registered via the API not being automatically deregistered with their parent service after an agent restart by persisting the LocallyRegisteredAsSidecar property. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/8999.txt consul-1.8.7+dfsg1/.changelog/8999.txt --- consul-1.7.4+dfsg1/.changelog/8999.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/8999.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:improvement +connect: update supported envoy releases to 1.14.5, 1.13.6, 1.12.7, 1.11.2 for 1.8.x +``` diff -Nru consul-1.7.4+dfsg1/.changelog/9009.txt consul-1.8.7+dfsg1/.changelog/9009.txt --- consul-1.7.4+dfsg1/.changelog/9009.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9009.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: fixes a case when updating the CA config in a secondary datacenter to correctly trigger the creation of a new intermediate certificate +``` diff -Nru consul-1.7.4+dfsg1/.changelog/9024.txt consul-1.8.7+dfsg1/.changelog/9024.txt --- consul-1.7.4+dfsg1/.changelog/9024.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9024.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:security +Fix Consul Enterprise Namespace Config Entry Replication DoS. Previously an operator with service:write ACL permissions in a Consul Enterprise cluster could write a malicious config entry that caused infinite raft writes due to issues with the namespace replication logic. [[CVE-2020-25201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-25201)] +``` diff -Nru consul-1.7.4+dfsg1/.changelog/9156.txt consul-1.8.7+dfsg1/.changelog/9156.txt --- consul-1.7.4+dfsg1/.changelog/9156.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9156.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +namespace: **(Enterprise Only)** Fixed a bug that could case snapshot restoration to fail when it contained a namespace marked for deletion while still containing other resources in that namespace. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/9240.txt consul-1.8.7+dfsg1/.changelog/9240.txt --- consul-1.7.4+dfsg1/.changelog/9240.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9240.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:security +Increase the permissions to read from the `/connect/ca/configuration` endpoint to `operator:write`. Previously Connect CA configuration, including the private key, set via this endpoint could be read back by an operator with `operator:read` privileges. [CVE-2020-28053](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28053) +``` \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/.changelog/9271.txt consul-1.8.7+dfsg1/.changelog/9271.txt --- consul-1.7.4+dfsg1/.changelog/9271.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9271.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +namespaces: **(Enterprise only)** Prevent stalling of replication in secondary datacenters due to conflicts between the namespace replicator and other replicators. +``` diff -Nru consul-1.7.4+dfsg1/.changelog/9318.txt consul-1.8.7+dfsg1/.changelog/9318.txt --- consul-1.7.4+dfsg1/.changelog/9318.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9318.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +connect: only unset the active root in a secondary datacenter when a new one is replacing it +``` diff -Nru consul-1.7.4+dfsg1/.changelog/9351.txt consul-1.8.7+dfsg1/.changelog/9351.txt --- consul-1.7.4+dfsg1/.changelog/9351.txt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/9351.txt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +```release-note:bug +acl: global tokens created by auth methods now correctly replicate to secondary datacenters +``` diff -Nru consul-1.7.4+dfsg1/.changelog/changelog.tmpl consul-1.8.7+dfsg1/.changelog/changelog.tmpl --- consul-1.7.4+dfsg1/.changelog/changelog.tmpl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/changelog.tmpl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,40 @@ +{{- if index .NotesByType "breaking-change" -}} +BREAKING CHANGES: + +{{range index .NotesByType "breaking-change" -}} +* {{ template "note" .}} +{{ end -}} +{{- end -}} + +{{- if .NotesByType.security }} +SECURITY: + +{{range .NotesByType.security -}} +* {{ template "note" . }} +{{ end -}} +{{- end -}} + +{{- if .NotesByType.feature -}} +FEATURES: + +{{range .NotesByType.feature -}} +* {{ template "note" . }} +{{ end -}} +{{- end -}} + +{{- if .NotesByType.improvement }} +IMPROVEMENTS: + +{{range .NotesByType.improvement -}} +* {{ template "note" . }} +{{ end -}} +{{- end -}} + +{{- if .NotesByType.bug }} +BUG FIXES: + +{{range .NotesByType.bug -}} +* {{ template "note" . }} +{{ end -}} +{{- end -}} + diff -Nru consul-1.7.4+dfsg1/.changelog/note.tmpl consul-1.8.7+dfsg1/.changelog/note.tmpl --- consul-1.7.4+dfsg1/.changelog/note.tmpl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.changelog/note.tmpl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +{{- define "note" -}} +{{.Body}}{{if not (stringHasPrefix .Issue "_")}} [[GH-{{- .Issue -}}](https://github.com/hashicorp/consul/issues/{{- .Issue -}})]{{end}} +{{- end -}} diff -Nru consul-1.7.4+dfsg1/CHANGELOG.md consul-1.8.7+dfsg1/CHANGELOG.md --- consul-1.7.4+dfsg1/CHANGELOG.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/CHANGELOG.md 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,202 @@ +## 1.8.7 (December 10, 2020) + +BUG FIXES: + +* acl: global tokens created by auth methods now correctly replicate to secondary datacenters [[GH-9351](https://github.com/hashicorp/consul/issues/9351)] +* connect: fixes a case when updating the CA config in a secondary datacenter to correctly trigger the creation of a new intermediate certificate [[GH-9009](https://github.com/hashicorp/consul/issues/9009)] +* connect: only unset the active root in a secondary datacenter when a new one is replacing it [[GH-9318](https://github.com/hashicorp/consul/issues/9318)] +* license: (Enterprise only) Fixed an issue where the UI would see Namespaces and SSO as licensed when they were not. +* license: **(Enterprise only)** Fixed an issue where warnings about Namespaces being unlicensed would be emitted erroneously. +* namespace: **(Enterprise Only)** Fixed a bug that could case snapshot restoration to fail when it contained a namespace marked for deletion while still containing other resources in that namespace. [[GH-9156](https://github.com/hashicorp/consul/issues/9156)] +* namespace: **(Enterprise Only)** Fixed an issue where namespaced services and checks were not being deleted when the containing namespace was deleted. +* namespaces: **(Enterprise only)** Prevent stalling of replication in secondary datacenters due to conflicts between the namespace replicator and other replicators. [[GH-9271](https://github.com/hashicorp/consul/issues/9271)] + +## 1.8.6 (November 19, 2020) + +SECURITY: + +* Increase the permissions to read from the `/connect/ca/configuration` endpoint to `operator:write`. Previously Connect CA configuration, including the private key, set via this endpoint could be read back by an operator with `operator:read` privileges. [CVE-2020-28053](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28053) [[GH-9240](https://github.com/hashicorp/consul/issues/9240)] + +## 1.8.5 (October 23, 2020) + +SECURITY: + +* Fix Consul Enterprise Namespace Config Entry Replication DoS. Previously an operator with service:write ACL permissions in a Consul Enterprise cluster could write a malicious config entry that caused infinite raft writes due to issues with the namespace replication logic. [[CVE-2020-25201](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-25201)] [[GH-9024](https://github.com/hashicorp/consul/issues/9024)] + +IMPROVEMENTS: + +* api: The `v1/connect/ca/roots` endpoint now accepts a `pem=true` query parameter and will return a PEM encoded certificate chain of all the certificates that would normally be in the JSON version of the response. [[GH-8774](https://github.com/hashicorp/consul/issues/8774)] +* connect: The Vault provider will now automatically renew the lease of the token used, if supported. [[GH-8560](https://github.com/hashicorp/consul/issues/8560)] +* connect: update supported envoy releases to 1.14.5, 1.13.6, 1.12.7, 1.11.2 for 1.8.x [[GH-8999](https://github.com/hashicorp/consul/issues/8999)] + +BUG FIXES: + +* agent: when enable_central_service_config is enabled ensure agent reload doesn't revert check state to critical [[GH-8747](https://github.com/hashicorp/consul/issues/8747)] +* connect: Fixed an issue where the Vault intermediate was not renewed in the primary datacenter. [[GH-8784](https://github.com/hashicorp/consul/issues/8784)] +* connect: fix Vault provider not respecting IntermediateCertTTL [[GH-8646](https://github.com/hashicorp/consul/issues/8646)] +* connect: fix connect sidecars registered via the API not being automatically deregistered with their parent service after an agent restart by persisting the LocallyRegisteredAsSidecar property. [[GH-8924](https://github.com/hashicorp/consul/issues/8924)] +* fixed a bug that caused logs to be flooded with `[WARN] agent.router: Non-server in server-only area` [[GH-8685](https://github.com/hashicorp/consul/issues/8685)] +* license: (Enterprise only) Fixed an issue where the UI would see Namespaces and SSO as licensed when they were not. +* ui: show correct datacenter for gateways [[GH-8704](https://github.com/hashicorp/consul/issues/8704)] + +## 1.8.4 (September 11, 2020) + +FEATURES: + +* agent: expose the list of supported envoy versions on /v1/agent/self [[GH-8545](https://github.com/hashicorp/consul/issues/8545)] +* cache: Config parameters for cache throttling are now reloaded automatically on agent reload. Restarting the agent is not needed anymore. [[GH-8552](https://github.com/hashicorp/consul/issues/8552)] +* connect: all config entries pick up a meta field [[GH-8596](https://github.com/hashicorp/consul/issues/8596)] + +IMPROVEMENTS: + +* api: Added `ACLMode` method to the `AgentMember` type to determine what ACL mode the agent is operating in. [[GH-8575](https://github.com/hashicorp/consul/issues/8575)] +* api: Added `IsConsulServer` method to the `AgentMember` type to easily determine whether the agent is a server. [[GH-8575](https://github.com/hashicorp/consul/issues/8575)] +* api: Added constants for common tag keys and values in the `Tags` field of the `AgentMember` struct. [[GH-8575](https://github.com/hashicorp/consul/issues/8575)] +* api: Allow for the client to use TLS over a Unix domain socket. [[GH-8602](https://github.com/hashicorp/consul/issues/8602)] +* api: `GET v1/operator/keyring` also lists primary keys. [[GH-8522](https://github.com/hashicorp/consul/issues/8522)] +* connect: Add support for http2 and grpc to ingress gateways [[GH-8458](https://github.com/hashicorp/consul/issues/8458)] +* serf: update to `v0.9.4` which supports primary keys in the ListKeys operation. [[GH-8522](https://github.com/hashicorp/consul/issues/8522)] + +BUGFIXES: + +* [backport/1.8.x] connect: use stronger validation that ingress gateways have compatible protocols defined for their upstreams [[GH-8494](https://github.com/hashicorp/consul/issues/8494)] +* agent: ensure that we normalize bootstrapped config entries [[GH-8547](https://github.com/hashicorp/consul/issues/8547)] +* api: Fixed a panic caused by an api request with Connect=null [[GH-8537](https://github.com/hashicorp/consul/issues/8537)] +* connect: `connect envoy` command now respects the `-ca-path` flag [[GH-8606](https://github.com/hashicorp/consul/issues/8606)] +* connect: fix bug in preventing some namespaced config entry modifications [[GH-8601](https://github.com/hashicorp/consul/issues/8601)] +* connect: fix renewing secondary intermediate certificates [[GH-8588](https://github.com/hashicorp/consul/issues/8588)] +* ui: fixed a bug related to in-folder KV creation [[GH-8613](https://github.com/hashicorp/consul/issues/8613)](https://github.com/hashicorp/consul/pull/8613) + +## 1.8.3 (August 12, 2020) + +BUGFIXES: + +* [backport/1.8.x] catalog: fixed a bug where nodes, services, and checks would not be restored with the correct Create/ModifyIndex when restoring from a snapshot [[GH-8485](https://github.com/hashicorp/consul/issues/8485)](https://github.com/hashicorp/consul/pull/8474) +* [backport/1.8.x] vendor: update github.com/armon/go-metrics to v0.3.4 [[GH-8478](https://github.com/hashicorp/consul/issues/8478)](https://github.com/hashicorp/consul/pull/8478) +* connect: **(Consul Enterprise only)** Fixed a regression that prevented mesh gateways from routing to services in their local datacenter that reside outside of the default namespace. + +## 1.8.2 (August 07, 2020) + +BUGFIXES: + +* auto_config: Fixed an issue where auto-config could be enabled in secondary DCs without enabling token replication when ACLs were enabled. [[GH-8451](https://github.com/hashicorp/consul/pull/8451)] +* xds: revert setting set_node_on_first_message_only to true when generating envoy bootstrap config [[GH-8440](https://github.com/hashicorp/consul/issues/8440)] + +## 1.8.1 (July 30, 2020) + +FEATURES: + +* acl: Added ACL Node Identities for easier creation of Consul Agent tokens. [[GH-7970](https://github.com/hashicorp/consul/pull/7970)] +* agent: Added Consul client agent automatic configuration utilizing JWTs for authorizing the request to generate ACL tokens, TLS certificates and retrieval of the gossip encryption key. [[GH-8003](https://github.com/hashicorp/consul/pull/8003)], [[GH-8035](https://github.com/hashicorp/consul/pull/8035)], [[GH-8086](https://github.com/hashicorp/consul/pull/8086)], [[GH-8148](https://github.com/hashicorp/consul/pull/8148)], [[GH-8157](https://github.com/hashicorp/consul/pull/8157)], [[GH-8159](https://github.com/hashicorp/consul/pull/8159)], [[GH-8193](https://github.com/hashicorp/consul/pull/8193)], [[GH-8253](https://github.com/hashicorp/consul/pull/8253)], [[GH-8301](https://github.com/hashicorp/consul/pull/8301)], [[GH-8360](https://github.com/hashicorp/consul/pull/8360)], [[GH-8362](https://github.com/hashicorp/consul/pull/8362)], [[GH-8363](https://github.com/hashicorp/consul/pull/8363)], [[GH-8364](https://github.com/hashicorp/consul/pull/8364)], [[GH-8409](https://github.com/hashicorp/consul/pull/8409)] + +IMPROVEMENTS: + +* acl: allow auth methods created in the primary datacenter to optionally create global tokens [[GH-7899](https://github.com/hashicorp/consul/issues/7899)] +* agent: Allow to restrict servers that can join a given Serf Consul cluster. [[GH-7628](https://github.com/hashicorp/consul/issues/7628)] +* agent: new configuration options allow ratelimiting of the agent-cache: `cache.entry_fetch_rate` and `cache.entry_fetch_max_burst`. [[GH-8226](https://github.com/hashicorp/consul/pull/8226)] +* auto_config: when configuring auto_config, connect is turned on automatically [[GH-8433](https://github.com/hashicorp/consul/pull/8433)] +* cli: Output message on success when writing/deleting config entries. [[GH-7806](https://github.com/hashicorp/consul/pull/7806)] +* connect: Append port number to expected ingress hosts [[GH-8190](https://github.com/hashicorp/consul/pull/8190)] +* dns: Improve RCODE of response when query targets a non-existent datacenter. [[GH-8102](https://github.com/hashicorp/consul/issues/8102)],[[GH-8218](https://github.com/hashicorp/consul/pull/8218)] +* version: The `version` CLI subcommand was altered to always show the git revision the binary was built from on the second line of output. Additionally the command gained a `-format` flag with the option now of outputting the version information in JSON form. **NOTE** This change has the potential to break any parsing done by users of the `version` commands output. In many cases nothing will need to be done but it is possible depending on how the output is parsed. [[GH-8268](https://github.com/hashicorp/consul/pull/8268)] + +BUGFIXES: + +* agent: Fixed a bug where Consul could crash when `verify_outgoing` was set to true but no client certificate was used. [[GH-8211](https://github.com/hashicorp/consul/pull/8211)] +* agent: Fixed an issue with lock contention during RPCs when under load while using the Prometheus metrics sink. [[GH-8372](https://github.com/hashicorp/consul/pull/8372)] +* auto_encrypt: Fixed an issue where auto encrypt certificate signing wasn't using the connect signing rate limiter. [[GH-8211](https://github.com/hashicorp/consul/pull/8211)] +* auto_encrypt: Fixed several issues around retrieving the first TLS certificate where it would have the wrong CN and SANs. This was being masked by a second bug (also fixed) causing that certificate to immediately be discarded with a second certificate request being made afterwards. [[GH-8211](https://github.com/hashicorp/consul/pull/8211)] +* auto_encrypt: Fixed an issue that caused auto encrypt certificates to not be updated properly if the agents token was changed and the old token was deleted. [[GH-8311](https://github.com/hashicorp/consul/pull/8311)] +* autopilot: **(Consul Enterprise only)** Fixed an issue where using autopilot with redundancy zones wouldn't demote extra voters in a zone to match the "one voter per zone" desired state when rebalancing. +* connect: fix crash that would result if a mesh or terminating gateway's upstream has a hostname as an address and no healthy service instances available. [[GH-8158](https://github.com/hashicorp/consul/issues/8158)] +* connect: Fixed issue where specifying a prometheus bind address would cause ingress gateways to fail to start up [[GH-8371]](https://github.com/hashicorp/consul/pull/8371) +* gossip: Avoid issue where two unique leave events for the same node could lead to infinite rebroadcast storms [[GH-8343](https://github.com/hashicorp/consul/issues/8343)] +* router: Mark its own cluster as healthy when rebalancing. [[GH-8406](https://github.com/hashicorp/consul/pull/8406)] +* snapshot: **(Consul Enterprise only)** Fixed a regression when using Azure blob storage. +* xds: version sniff envoy and switch regular expressions from 'regex' to 'safe_regex' on newer envoy versions [[GH-8265](https://github.com/hashicorp/consul/issues/8265)] + +## 1.8.0 (June 18, 2020) + +BREAKING CHANGES: +* acl: Remove deprecated `acl_enforce_version_8` option [[GH-7991](https://github.com/hashicorp/consul/issues/7991)] + +FEATURES: + +* **Terminating Gateway**: Envoy can now be run as a gateway to enable services in a Consul service mesh to connect to external services through their local proxy. Terminating gateways unlock several of the benefits of a service mesh in the cases where a sidecar proxy cannot be deployed alongside services such as legacy applications or managed cloud databases. +* **Ingress Gateway**: Envoy can now be run as a gateway to ingress traffic into the Consul service mesh, enabling a more incremental transition for applications. +* **WAN Federation over Mesh Gateways**: Allows Consul datacenters to federate by forwarding WAN gossip and RPC traffic through Mesh Gateways rather than requiring the servers to be exposed to the WAN directly. +* **JSON Web Token (JWT) Auth Method**: Allows exchanging a signed JWT from a trusted external identity provider for a Consul ACL token. +* **Single Sign-On (SSO) [Enterprise]**: Lets an operator configure Consul to use an external OpenID Connect (OIDC) provider to automatically handle the lifecycle of creating, distributing and managing ACL tokens for performing CLI operations or accessing the UI. +* **Audit Logging [Enterprise]**: Adds instrumentation to record a trail of events (both attempted and authorized) by users of Consul’s HTTP API for purposes of regulatory compliance. + +* acl: add DisplayName field to auth methods [[GH-7769](https://github.com/hashicorp/consul/issues/7769)] +* acl: add MaxTokenTTL field to auth methods [[GH-7779](https://github.com/hashicorp/consul/issues/7779)] +* agent/xds: add support for configuring passive health checks [[GH-7713](https://github.com/hashicorp/consul/pull/7713)] +* cli: Add -config flag to "acl authmethod update/create" [[GH-7776](https://github.com/hashicorp/consul/pull/7776)] +* ui: Help menu to provide further documentation/learn links [[GH-7310](https://github.com/hashicorp/consul/pull/7310)] +* ui: **(Consul Enterprise only)** SSO support [[GH-7742](https://github.com/hashicorp/consul/pull/7742)] [[GH-7771](https://github.com/hashicorp/consul/pull/7771)] [[GH-7790](https://github.com/hashicorp/consul/pull/7790)] +* ui: Support for termininating and ingress gateways [[GH-7858](https://github.com/hashicorp/consul/pull/7858)] [[GH-7865](https://github.com/hashicorp/consul/pull/7865)] + +IMPROVEMENTS: + +* acl: change authmethod.Validator to take a logger [[GH-7758](https://github.com/hashicorp/consul/issues/7758)] +* agent: show warning when enable_script_checks is enabled without safety net [[GH-7437](https://github.com/hashicorp/consul/pull/7437)] +* api: Added filtering support to the v1/connect/intentions endpoint. [[GH-7478](https://github.com/hashicorp/consul/issues/7478)] +* auto_encrypt: add validations for auto_encrypt.{tls,allow_tls} [[GH-7704](https://github.com/hashicorp/consul/pull/7704)] +* build: switched to compile with Go 1.14.1 [[GH-7481](https://github.com/hashicorp/consul/pull/7481)] +* config: validate system limits against limits.http_max_conns_per_client [[GH-7434](https://github.com/hashicorp/consul/pull/7434)] +* connect: support envoy 1.12.3, 1.13.1, and 1.14.1. Envoy 1.10 is no longer officially supported. [[GH-7380](https://github.com/hashicorp/consul/pull/7380)],[[GH-7624](https://github.com/hashicorp/consul/pull/7624)] +* connect: add DNSSAN and IPSAN to cache key for ConnectCALeafRequest [[GH-7597](https://github.com/hashicorp/consul/pull/7597)] +* connect: Added a new expose CLI command for ingress gateways [[GH-8099](https://github.com/hashicorp/consul/issues/8099)] +* license: **(Consul Enterprise only)** Update licensing to align with the current modules licensing structure. +* logging: catch problems with the log destination earlier by creating the file immediately [[GH-7469](https://github.com/hashicorp/consul/pull/7469)] +* proxycfg: support path exposed with non-HTTP2 protocol [[GH-7510](https://github.com/hashicorp/consul/pull/7510)] +* tls: remove old ciphers [[GH-7282](https://github.com/hashicorp/consul/pull/7282)] +* ui: Show the last 8 characters of AccessorIDs in listing views [[GH-7327](https://github.com/hashicorp/consul/pull/7327)] +* ui: Make all tabs within the UI linkable/bookmarkable and include in history [[GH-7592](https://github.com/hashicorp/consul/pull/7592)] +* ui: Redesign of all service pages [[GH-7605](https://github.com/hashicorp/consul/pull/7605)] [[GH-7632](https://github.com/hashicorp/consul/pull/7632)] [[GH-7655](https://github.com/hashicorp/consul/pull/7655)] [[GH-7683](https://github.com/hashicorp/consul/pull/7683)] +* ui: Show intentions per individual service [[GH-7615](https://github.com/hashicorp/consul/pull/7615)] +* ui: Improved login/logout flow [[GH-7790](https://github.com/hashicorp/consul/pull/7790)] +* ui: Revert search to search as you type, add sort control for the service listing page [[GH-7489](https://github.com/hashicorp/consul/pull/7489)] +* ui: Omit proxy services from the service listing view and mark services as being proxied [[GH-7820](https://github.com/hashicorp/consul/pull/7820)] +* ui: Display proxies in a proxy info tab with the service instance detail page [[GH-7745](https://github.com/hashicorp/consul/pull/7745)] +* ui: Add live updates/blocking queries to gateway listings [[GH-7967](https://github.com/hashicorp/consul/pull/7967)] +* ui: Improved 'empty states' [[GH-7940](https://github.com/hashicorp/consul/pull/7940)] +* ui: Add ability to sort services based on health [[GH-7989](https://github.com/hashicorp/consul/pull/7989)] +* ui: Add explanatory tooltip panels for gateway services [[GH-8048]](https://github.com/hashicorp/consul/pull/8048) +* ui: Reduce discovery-chain log errors [[GH-8065]](https://github.com/hashicorp/consul/pull/8065) + +BUGFIXES: + +* agent: **(Consul Enterprise only)** Fixed several bugs related to Network Area and Network Segment compatibility with other features caused by incorrectly doing version or serf tag checking. [[GH-7491](https://github.com/hashicorp/consul/pull/7491)] +* agent: rewrite checks with proxy address, not local service address [[GH-7518](https://github.com/hashicorp/consul/pull/7518)] +* agent: Preserve ModifyIndex for unchanged entry in KV transaciton [[GH-7832](https://github.com/hashicorp/consul/pull/7832)] +* agent: use default resolver scheme for gRPC dialing [[GH-7617](https://github.com/hashicorp/consul/pull/7617)] +* cache: Fix go routine leak in the agent cache which could cause increasing memory usage. [[GH-8092](https://github.com/hashicorp/consul/pull/8092)] +* cli: enable TLS when `CONSUL_HTTP_ADDR` has an `https` scheme [[GH-7608](https://github.com/hashicorp/consul/pull/7608)] +* connect: Internal refactoring to allow Connect proxy config to contain lists of structured configuration [[GH-7963](https://github.com/hashicorp/consul/issues/7963)][[GH-7964](https://github.com/hashicorp/consul/issues/7964)] +* license: **(Consul Enterprise only)** Fixed a bug that would cause a license reset request to only be applied on the leader server. +* sdk: Fix race condition in freeport [[GH-7567](https://github.com/hashicorp/consul/issues/7567)] +* server: strip local ACL tokens from RPCs during forwarding if crossing datacenters [[GH-7419](https://github.com/hashicorp/consul/issues/7419)] +* ui: Quote service names when filtering intentions to prevent 500 errors when accessing a service [[GH-7896](https://github.com/hashicorp/consul/issues/7896)] [[GH-7888](https://github.com/hashicorp/consul/pull/7888)] +* ui: Miscellaneous amends for Safari and Firefox [[GH-7904](https://github.com/hashicorp/consul/issues/7904)] [[GH-7907](https://github.com/hashicorp/consul/pull/7907)] +* ui: Ensure a value is always passed to CONSUL_SSO_ENABLED [[GH-7913](https://github.com/hashicorp/consul/pull/7913)] + +## 1.7.6 (August 07, 2020) + +BUG FIXES: + +* [backport/1.7.x] xds: revert setting set_node_on_first_message_only to true when generating envoy bootstrap config [[GH-8441](https://github.com/hashicorp/consul/issues/8441)] + +## 1.7.5 (July 30, 2020) + +BUG FIXES: + +* agent: Fixed an issue with lock contention during RPCs when under load while using the Prometheus metrics sink. [[GH-8372](https://github.com/hashicorp/consul/pull/8372)] +* gossip: Avoid issue where two unique leave events for the same node could lead to infinite rebroadcast storms [[GH-8353](https://github.com/hashicorp/consul/issues/8353)] +* snapshot: **(Consul Enterprise only)** Fixed a regression when using Azure blob storage. +* Return a service splitter's weight or a zero [[GH-8355](https://github.com/hashicorp/consul/issues/8355)] + ## 1.7.4 (June 10, 2020) SECURITY: @@ -11,6 +210,7 @@ * acl: Fixed an issue where legacy management tokens could not be used in secondary datacenters. [[GH-7908](https://github.com/hashicorp/consul/pull/7908)] * agent: Fixed a race condition that could cause an agent to crash when first starting. [[GH-7955](https://github.com/hashicorp/consul/issues/7955)] +* connect: ensure proxy-defaults protocol is used for upstreams [[GH-7938](https://github.com/hashicorp/consul/issues/7938)] * connect: setup intermediate_pki_path on secondary when using vault [[GH-8001]](https://github.com/hashicorp/consul/pull/8001) ## 1.7.3 (May 05, 2020) @@ -50,11 +250,11 @@ IMPROVEMENTS: -* agent: add http_config.response header to the UI headers [[GH-7369](https://github.com/hashicorp/consul/pull/7369)] -* agent: Added documentation and error messages related to `kv_max_value_size` option [[GH-7405]](https://github.com/hashicorp/consul/pull/7405)] -* agent: Take Prometheus MINE-type header into account [[GH-7371]](https://github.com/hashicorp/consul/pull/7371)] * agent: add option to configure max request length for `/v1/txn` endpoint [[GH-7388](https://github.com/hashicorp/consul/pull/7388)] * build: bump the expected go language version of the main module to 1.13 [[GH-7429](https://github.com/hashicorp/consul/issues/7429)] +* agent: add http_config.response header to the UI headers [[GH-7369](https://github.com/hashicorp/consul/pull/7369)] +* agent: Added documentation and error messages related to `kv_max_value_size` option [[GH-7405]](https://github.com/hashicorp/consul/pull/7405)] +* agent: Take Prometheus MIME-type header into account [[GH-7371]](https://github.com/hashicorp/consul/pull/7371)] BUGFIXES: @@ -87,6 +287,7 @@ * sessions: Fixed an issue that was causing deletions of a non-existent session to return a 500 when ACLs were enabled. [[GH-6840](https://github.com/hashicorp/consul/issues/6840)] * xds: Fix envoy retryOn behavior when multiple behaviors are configured [[GH-7280](https://github.com/hashicorp/consul/pull/7280)] * xds: Mesh Gateway fixes to prevent configuring extra clusters and for properly handling a service-resolvers default subset. [[GH-7294](https://github.com/hashicorp/consul/pull/7294)] +* ui: Gracefully cope with errors in discovery-chain when connect is disabled [[GH-7291](https://github.com/hashicorp/consul/pull/7291)] ## 1.7.0 (February 11, 2020) @@ -171,6 +372,7 @@ * ui: Add ability to search nodes listing page with IP Address [[GH-7204](https://github.com/hashicorp/consul/pull/7204)] * xds: mesh gateway CDS requests are now allowed to receive an empty CDS reply [[GH-6787](https://github.com/hashicorp/consul/issues/6787)] * xds: Verified integration test suite with Envoy 1.12.2 & 1.13.0 [[GH-6947](https://github.com/hashicorp/consul/pull/7240)] +* agent: Added ACL token for Consul managed service providers [[GH-7218](https://github.com/hashicorp/consul/pull/7218)] BUGFIXES: @@ -197,6 +399,38 @@ * ui: Discovery-Chain: Improve parsing of redirects [[GH-7174](https://github.com/hashicorp/consul/pull/7174)] * ui: Fix styling of ‘duplicate intention’ error message [[GH6936]](https://github.com/hashicorp/consul/pull/6936) +## 1.6.7 (July 30, 2020) + +BUG FIXES: + +* agent: Fixed an issue with lock contention during RPCs when under load while using the Prometheus metrics sink. [[GH-8372](https://github.com/hashicorp/consul/pull/8372)] +* gossip: Avoid issue where two unique leave events for the same node could lead to infinite rebroadcast storms [[GH-8345](https://github.com/hashicorp/consul/issues/8345)] + +## 1.6.6 (June 10, 2020) + +SECURITY: + +* Adding an option `http_config.use_cache` to disable agent caching for http endpoints, because Consul’s DNS and HTTP API expose a caching feature susceptible to DoS. [CVE-2020-13250](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13250) [[GH-8023]](https://github.com/hashicorp/consul/pull/8023) +* Propagate and enforce changes to legacy ACL tokens rules in secondary data centers. [CVE-2020-12797](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-12797) [[GH-8047]](https://github.com/hashicorp/consul/pull/8047) +* Only resolve local acl token in the datacenter it belongs to. [CVE-2020-13170](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13170) [[GH-8068]](https://github.com/hashicorp/consul/pull/8068) + +BUG FIXES: + +* acl: Fixed an issue where legacy management tokens could not be used in secondary datacenters. [[GH-7908](https://github.com/hashicorp/consul/pull/7908)] +* agent: Fixed a race condition that could cause an agent to crash when first starting. [[GH-7955](https://github.com/hashicorp/consul/issues/7955)] + +## 1.6.5 (April 14, 2020) + +BUG FIXES: + +* agent: **(Consul Enterprise only)** Fixed several bugs related to Network Area and Network Segment compatibility with other features caused by incorrectly doing version or serf tag checking. [[GH-7551](https://github.com/hashicorp/consul/pull/7551)] + +## 1.6.4 (February 20, 2020) + +SECURITY: + +* dns: Updated miekg/dns dependency to fix a memory leak and CVE-2019-19794. [[GH-6984](https://github.com/hashicorp/consul/issues/6984)], [[GH-7261](https://github.com/hashicorp/consul/pull/7261)] + ## 1.6.3 (January 30, 2020) SECURITY diff -Nru consul-1.7.4+dfsg1/.circleci/bash_env.sh consul-1.8.7+dfsg1/.circleci/bash_env.sh --- consul-1.7.4+dfsg1/.circleci/bash_env.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/.circleci/bash_env.sh 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,5 @@ export GIT_COMMIT=$(git rev-parse --short HEAD) export GIT_COMMIT_YEAR=$(git show -s --format=%cd --date=format:%Y HEAD) export GIT_DIRTY=$(test -n "`git status --porcelain`" && echo "+CHANGES" || true) -export GIT_DESCRIBE=$(git describe --tags --always --match "v*") export GIT_IMPORT=github.com/hashicorp/consul/version -export GOLDFLAGS="-X ${GIT_IMPORT}.GitCommit=${GIT_COMMIT}${GIT_DIRTY} -X ${GIT_IMPORT}.GitDescribe=${GIT_DESCRIBE}" \ No newline at end of file +export GOLDFLAGS="-X ${GIT_IMPORT}.GitCommit=${GIT_COMMIT}${GIT_DIRTY}" diff -Nru consul-1.7.4+dfsg1/.circleci/config.yml consul-1.8.7+dfsg1/.circleci/config.yml --- consul-1.7.4+dfsg1/.circleci/config.yml 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/.circleci/config.yml 2020-12-10 21:46:52.000000000 +0000 @@ -3,27 +3,83 @@ references: images: - go: &GOLANG_IMAGE circleci/golang:1.13.7 - middleman: &MIDDLEMAN_IMAGE hashicorp/middleman-hashicorp:0.3.40 - ember: &EMBER_IMAGE circleci/node:8-browsers + go: &GOLANG_IMAGE docker.mirror.hashicorp.services/circleci/golang:1.14.11 + ember: &EMBER_IMAGE docker.mirror.hashicorp.services/circleci/node:12-browsers paths: test-results: &TEST_RESULTS_DIR /tmp/test-results cache: - yarn: &YARN_CACHE_KEY consul-ui-v1-{{ checksum "ui-v2/yarn.lock" }} + yarn: &YARN_CACHE_KEY consul-ui-v2-{{ checksum "ui-v2/yarn.lock" }} rubygem: &RUBYGEM_CACHE_KEY static-site-gems-v1-{{ checksum "Gemfile.lock" }} environment: &ENVIRONMENT TEST_RESULTS_DIR: *TEST_RESULTS_DIR - GOTESTSUM_RELEASE: 0.3.3 EMAIL: noreply@hashicorp.com GIT_AUTHOR_NAME: circleci-consul GIT_COMMITTER_NAME: circleci-consul - S3_ARTIFACT_BUCKET: consul-dev-artifacts + S3_ARTIFACT_BUCKET: consul-dev-artifacts-v2 BASH_ENV: .circleci/bash_env.sh VAULT_BINARY_VERSION: 1.2.2 +steps: + install-gotestsum: &install-gotestsum + name: install gotestsum + environment: + GOTESTSUM_RELEASE: 0.5.1 + command: | + url=https://github.com/gotestyourself/gotestsum/releases/download + curl -sSL "${url}/v${GOTESTSUM_RELEASE}/gotestsum_${GOTESTSUM_RELEASE}_linux_amd64.tar.gz" | \ + sudo tar -xz --overwrite -C /usr/local/bin gotestsum + + get-aws-cli: &get-aws-cli + run: + name: download and install AWS CLI + command: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + echo -e "${AWS_CLI_GPG_KEY}" | gpg --import + curl -o awscliv2.sig https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip.sig + gpg --verify awscliv2.sig awscliv2.zip + unzip awscliv2.zip + sudo ./aws/install + + aws-assume-role: &aws-assume-role + run: + name: assume-role aws creds + command: | + # assume role has duration of 15 min (the minimum allowed) + CREDENTIALS="$(aws sts assume-role --duration-seconds 900 --role-arn ${ROLE_ARN} --role-session-name build-${CIRCLE_SHA1} | jq '.Credentials')" + echo "export AWS_ACCESS_KEY_ID=$(echo $CREDENTIALS | jq -r '.AccessKeyId')" >> $BASH_ENV + echo "export AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIALS | jq -r '.SecretAccessKey')" >> $BASH_ENV + echo "export AWS_SESSION_TOKEN=$(echo $CREDENTIALS | jq -r '.SessionToken')" >> $BASH_ENV + + # This step MUST be at the end of any set of steps due to the 'when' condition + notify-slack-failure: ¬ify-slack-failure + name: notify-slack-failure + when: on_fail + command: | + if [[ $CIRCLE_BRANCH == "master" ]]; then + CIRCLE_ENDPOINT="https://app.circleci.com/pipelines/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}?branch=${CIRCLE_BRANCH}" + GITHUB_ENDPOINT="https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}" + COMMIT_MESSAGE=$(git log -1 --pretty=%B | head -n1) + SHORT_REF=$(git rev-parse --short "${CIRCLE_SHA1}") + curl -X POST -H 'Content-type: application/json' \ + --data \ + "{ \ + \"attachments\": [ \ + { \ + \"fallback\": \"CircleCI job failed!\", \ + \"text\": \"❌ Failed: \`${CIRCLE_USERNAME}\`'s <${CIRCLE_BUILD_URL}|${CIRCLE_STAGE}> job failed for commit <${GITHUB_ENDPOINT}|${SHORT_REF}> on \`${CIRCLE_BRANCH}\`!\n\n- <${COMMIT_MESSAGE}\", \ + \"footer\": \"${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}\", \ + \"ts\": \"$(date +%s)\", \ + \"color\": \"danger\" \ + } \ + ] \ + }" "${FEED_CONSUL_GH_URL}" + else + echo "Not posting slack failure notifications for non-master branch" + fi + jobs: # lint consul tests lint-consul-retry: @@ -33,37 +89,32 @@ - checkout - run: go get -u github.com/hashicorp/lint-consul-retry && lint-consul-retry - # Runs go fmt and go vet - go-fmt-and-vet: + # Runs Go linters + lint: docker: - image: *GOLANG_IMAGE + environment: + GOTAGS: "" # No tags for OSS but there are for enterprise steps: - checkout - - restore_cache: - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - - run: - command: go mod download - - save_cache: - key: consul-modcache-v1-{{ checksum "go.mod" }} - paths: - - /go/pkg/mod - run: - name: check go fmt + name: Install golangci-lint command: | - files="$(go fmt ./... ; (cd api && go fmt ./... | sed 's@^@api/@') ; (cd sdk && go fmt ./... | sed 's@^@sdk/@'))" - if [ -n "$files" ]; then - echo "The following file(s) do not conform to go fmt:" - echo "$files" - exit 1 - fi + download=https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh + wget -O- -q $download | sh -x -s -- -d -b /go/bin/ v1.23.6 + - run: go mod download + - run: + name: lint + command: &lintcmd | + golangci-lint run --build-tags="$GOTAGS" -v --concurrency 2 - run: - command: | - go vet ./... && \ - (cd api && go vet ./...) && \ - (cd sdk && go vet ./...) - environment: - <<: *ENVIRONMENT + name: lint api + working_directory: api + command: *lintcmd + - run: + name: lint sdk + working_directory: sdk + command: *lintcmd # checks vendor directory is correct check-vendor: @@ -73,21 +124,44 @@ <<: *ENVIRONMENT steps: - checkout - - restore_cache: - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - run: command: make update-vendor - - save_cache: - key: consul-modcache-v1-{{ checksum "go.mod" }} - paths: - - /go/pkg/mod - run: | if ! git diff --exit-code; then echo "Git directory has vendor changes" exit 1 fi + check-generated-protobuf: + docker: + - image: *GOLANG_IMAGE + environment: + <<: *ENVIRONMENT + steps: + - checkout + - run: + name: Install protobuf + command: | + wget https://github.com/protocolbuffers/protobuf/releases/download/v3.12.3/protoc-3.12.3-linux-x86_64.zip + sudo unzip -d /usr/local protoc-*.zip + sudo chmod +x /usr/local/bin/protoc + rm protoc-*.zip + - run: + name: Install gogo/protobuf + command: | + gogo_version=$(go list -m github.com/gogo/protobuf | awk '{print $2}') + mkdir -p .gotools; cd .gotools; go mod init consul-tools + go get -v github.com/hashicorp/protoc-gen-go-binary + go get -v github.com/gogo/protobuf/protoc-gen-gofast@${gogo_version} + + - run: + command: make --always-make proto + - run: | + if ! git diff --exit-code; then + echo "Generated code was not updated correctly" + exit 1 + fi + go-test: docker: - image: *GOLANG_IMAGE @@ -95,34 +169,43 @@ environment: <<: *ENVIRONMENT GOTAGS: "" # No tags for OSS but there are for enterprise - # GOMAXPROCS defaults to number of cores on underlying hardware, set explicitly to avoid OOM issues https://support.circleci.com/hc/en-us/articles/360034684273-common-GoLang-memory-issues - GOMAXPROCS: 2 # medium (default) boxes are 2 vCPUs, 4GB RAM https://circleci.com/docs/2.0/configuration-reference/#docker-executor + # GOMAXPROCS defaults to number of cores on underlying hardware, set + # explicitly to avoid OOM issues https://support.circleci.com/hc/en-us/articles/360034684273-common-GoLang-memory-issues + GOMAXPROCS: 4 + # The medium resource class (default) boxes are 2 vCPUs, 4GB RAM + # https://circleci.com/docs/2.0/configuration-reference/#docker-executor + # but we can run a little over that limit. steps: - checkout - - restore_cache: # restore cache from earlier job - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - attach_workspace: at: /go/bin - - run: mkdir -p $TEST_RESULTS_DIR - run: sudo apt-get update && sudo apt-get install -y rsyslog - run: sudo service rsyslog start - - run: | - PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname) - echo "Running $(echo $PACKAGE_NAMES | wc -w) packages" - echo $PACKAGE_NAMES - gotestsum --format=short-verbose --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- -tags="$GOTAGS" -p 2 -cover -coverprofile=cov_$CIRCLE_NODE_INDEX.part $PACKAGE_NAMES - - # save coverage report parts - - persist_to_workspace: - root: . - paths: - - cov_*.part + - run: *install-gotestsum + - run: go mod download + - run: + name: go test + command: | + mkdir -p $TEST_RESULTS_DIR + PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname) + echo "Running $(echo $PACKAGE_NAMES | wc -w) packages" + echo $PACKAGE_NAMES + gotestsum --format=short-verbose \ + --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- \ + -tags="$GOTAGS" -p 2 \ + -cover -coverprofile=coverage.txt \ + $PACKAGE_NAMES - store_test_results: path: *TEST_RESULTS_DIR - store_artifacts: path: *TEST_RESULTS_DIR + - run: &codecov_upload + name: codecov upload + when: always + # The -C flag shouldn't be necessary, but it fails to find the commit + # without it. + command: bash <(curl -s https://codecov.io/bash) -C "$CIRCLE_SHA1" # split off a job for the API package since it is separate go-test-api: @@ -133,28 +216,28 @@ GOTAGS: "" # No tags for OSS but there are for enterprise steps: - checkout - - restore_cache: # restore cache from dev-build job - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - attach_workspace: at: /go/bin - - run: mkdir -p $TEST_RESULTS_DIR + - run: *install-gotestsum - run: working_directory: api + command: go mod download + - run: + working_directory: api + name: go test command: | - PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname) - gotestsum --format=short-verbose --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- -tags="$GOTAGS" -cover -coverprofile=cov_api.part $PACKAGE_NAMES - - # save coverage report parts - - persist_to_workspace: - root: ./api - paths: - - cov_*.part + mkdir -p $TEST_RESULTS_DIR + gotestsum \ + --format=short-verbose \ + --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- \ + -tags="$GOTAGS" -cover -coverprofile=coverage.txt \ + ./... - store_test_results: path: *TEST_RESULTS_DIR - store_artifacts: path: *TEST_RESULTS_DIR + - run: *codecov_upload # split off a job for the SDK package since it is separate go-test-sdk: @@ -165,51 +248,28 @@ GOTAGS: "" # No tags for OSS but there are for enterprise steps: - checkout - - restore_cache: # restore cache from dev-build job - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - attach_workspace: at: /go/bin - - run: mkdir -p $TEST_RESULTS_DIR + - run: *install-gotestsum + - run: + working_directory: sdk + command: go mod download - run: working_directory: sdk + name: go test command: | - PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname) - gotestsum --format=short-verbose --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- -tags=$GOTAGS -cover -coverprofile=cov_sdk.part $PACKAGE_NAMES - - # save coverage report parts - - persist_to_workspace: - root: ./sdk - paths: - - cov_*.part + mkdir -p $TEST_RESULTS_DIR + gotestsum \ + --format=short-verbose \ + --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- \ + -tags=$GOTAGS -cover -coverprofile=coverage.txt \ + ./... - store_test_results: path: *TEST_RESULTS_DIR - store_artifacts: path: *TEST_RESULTS_DIR - - # combine code coverage results from the parallel circleci executors - coverage-merge: - docker: - - image: *GOLANG_IMAGE - environment: - <<: *ENVIRONMENT - steps: - - checkout - - attach_workspace: - at: . - - run: mkdir -p $TEST_RESULTS_DIR - - run: - name: merge coverage reports - command: | - echo "mode: set" > coverage.out - grep -h -v "mode: set" cov_*.part >> coverage.out - go tool cover -html=coverage.out -o $TEST_RESULTS_DIR/coverage.html - - run: - name: codecov upload - command: bash <(curl -s https://codecov.io/bash) -v -C $CIRCLE_SHA1 -f '!agent/bindata_assetfs.go' - - store_artifacts: - path: *TEST_RESULTS_DIR + - run: *codecov_upload # build all distros build-distros: &build-distros @@ -219,9 +279,6 @@ <<: *ENVIRONMENT steps: - checkout - - restore_cache: # restore cache from dev-build job - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - run: ./build-support/scripts/build-local.sh # save dev build to CircleCI @@ -260,18 +317,18 @@ GOARM: 5 CC: arm-linux-gnueabi-gcc GOARCH: arm - command: go build -o ./pkg/bin/linux_armel/consul -ldflags="${GOLDFLAGS}" + command: go build -o ./pkg/bin/linux_armel/consul -ldflags="-linkmode=external ${GOLDFLAGS}" - run: environment: GOARM: 6 CC: arm-linux-gnueabihf-gcc GOARCH: arm - command: go build -o ./pkg/bin/linux_armhf/consul -ldflags="${GOLDFLAGS}" + command: go build -o ./pkg/bin/linux_armhf/consul -ldflags="-linkmode=external ${GOLDFLAGS}" - run: environment: CC: aarch64-linux-gnu-gcc GOARCH: arm64 - command: go build -o ./pkg/bin/linux_aarch64/consul -ldflags="${GOLDFLAGS}" + command: go build -o ./pkg/bin/linux_aarch64/consul -ldflags="-linkmode=external ${GOLDFLAGS}" - store_artifacts: path: ./pkg/bin @@ -283,15 +340,10 @@ <<: *ENVIRONMENT steps: - checkout - - restore_cache: - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} + - attach_workspace: # this normally runs as the first job and has nothing to attach; only used in master branch after rebuilding UI + at: . - run: command: make dev - - save_cache: - key: consul-modcache-v1-{{ checksum "go.mod" }} - paths: - - /go/pkg/mod # save dev build to pass to downstream jobs - persist_to_workspace: @@ -302,13 +354,13 @@ # upload development build to s3 dev-upload-s3: docker: - - image: circleci/python:stretch + - image: *GOLANG_IMAGE environment: <<: *ENVIRONMENT steps: - - run: - name: Install awscli - command: sudo pip install awscli + - checkout + - *get-aws-cli + - *aws-assume-role # get consul binary - attach_workspace: at: bin/ @@ -330,7 +382,7 @@ # upload dev docker image dev-upload-docker: docker: - - image: circleci/golang:latest # use a circleci image so the attach_workspace step works (has ca-certs installed) + - image: *GOLANG_IMAGE # use a circleci image so the attach_workspace step works (has ca-certs installed) environment: <<: *ENVIRONMENT steps: @@ -345,7 +397,7 @@ # Run integration tests on nomad/v0.8.7 nomad-integration-0_8: docker: - - image: circleci/golang:1.10 + - image: docker.mirror.hashicorp.services/circleci/golang:1.10 environment: <<: *ENVIRONMENT NOMAD_WORKING_DIR: &NOMAD_WORKING_DIR /go/src/github.com/hashicorp/nomad @@ -357,20 +409,22 @@ - attach_workspace: at: /go/bin - # make test result directory - - run: mkdir -p $TEST_RESULTS_DIR - # make dev build of nomad - run: command: make pkg/linux_amd64/nomad working_directory: *NOMAD_WORKING_DIR - # update gotestsum - - run: curl -sSL "https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_RELEASE}/gotestsum_${GOTESTSUM_RELEASE}_linux_amd64.tar.gz" | sudo tar --overwrite -xz -C /usr/local/bin gotestsum + - run: *install-gotestsum # run integration tests - run: - command: gotestsum --format=short-verbose --junitfile $TEST_RESULTS_DIR/results.xml -- ./command/agent/consul -run TestConsul + name: go test + command: | + mkdir -p $TEST_RESULTS_DIR + gotestsum \ + --format=short-verbose \ + --junitfile $TEST_RESULTS_DIR/results.xml -- \ + ./command/agent/consul -run TestConsul working_directory: *NOMAD_WORKING_DIR # store test results for CircleCI @@ -389,101 +443,30 @@ NOMAD_VERSION: master steps: *NOMAD_INTEGRATION_TEST_STEPS - build-website: - # setting the working_directory along with the checkout path allows us to not have - # to cd into the website/ directory for commands - working_directory: ~/project/website - docker: - - image: *MIDDLEMAN_IMAGE - steps: - - checkout: - path: ~/project - - # restores gem cache - - restore_cache: - key: *RUBYGEM_CACHE_KEY - - - run: - name: install gems - command: bundle check || bundle install --path vendor/bundle --retry=3 - - # saves gem cache if we have changed the Gemfile - - save_cache: - key: *RUBYGEM_CACHE_KEY - paths: - - ~/project/website/vendor/bundle - - # exclude guides directory since they moved to learn.hashicorp.com - # keep index.html which points to learn - - run: - name: exclude guides - command: find ./source/docs/guides -type f -not -name 'index.html.md' -delete - - - run: - name: middleman build - command: bundle exec middleman build - - - run: - name: add missing tar binary - command: apk update && apk add tar - - # saves website build directory - - persist_to_workspace: - root: . - paths: - - build - - deploy-website: - # setting the working_directory along with the checkout path allows us to not have - # to cd into the website/ directory for commands - working_directory: ~/project/website - docker: - - image: *MIDDLEMAN_IMAGE - steps: - - checkout: - path: ~/project - - - run: - name: add missing tar binary - command: apk update && apk add tar - - # attach website build directory - - attach_workspace: - at: ~/project/website - - # restores gem cache - - restore_cache: - key: *RUBYGEM_CACHE_KEY - # rerun build with 'ENV=production' to add analytics - - run: - name: install gems - command: bundle check || bundle install --path vendor/bundle --retry=3 - - # exclude guides directory since they moved to learn.hashicorp.com - # keep index.html which points to learn - - run: - name: exclude guides - command: find ./source/docs/guides -type f -not -name 'index.html.md' -delete - - # rerun build with 'ENV=production' to add analytics - - run: - name: middleman build - command: bundle exec middleman build - - - run: - name: website deploy - command: ./scripts/deploy.sh - - # Link check on a temporary netlify deployed site - docs-link-checker: + build-website-docker-image: docker: - - image: circleci/node:lts + - image: docker.mirror.hashicorp.services/circleci/buildpack-deps + shell: /usr/bin/env bash -euo pipefail -c steps: - checkout - # attach website build directory - - attach_workspace: - at: ~/project/website - - run: ./website/scripts/link-check.sh + - setup_remote_docker + - run: + name: Build Docker Image if Necessary + command: | + # Ignore job if running an enterprise build + IMAGE_TAG=$(cat website/Dockerfile website/package-lock.json | sha256sum | awk '{print $1;}') + echo "Using $IMAGE_TAG" + if [ "$CIRCLE_REPOSITORY_URL" != "git@github.com:hashicorp/consul.git" ]; then + echo "Not Consul OSS Repo, not building website docker image" + elif curl https://hub.docker.com/v2/repositories/hashicorp/consul-website/tags/$IMAGE_TAG -fsL > /dev/null; then + echo "Dependencies have not changed, not building a new website docker image." + else + cd website/ + docker build -t hashicorp/consul-website:$IMAGE_TAG . + docker tag hashicorp/consul-website:$IMAGE_TAG hashicorp/consul-website:latest + docker login -u $WEBSITE_DOCKER_USER -p $WEBSITE_DOCKER_PASS + docker push hashicorp/consul-website + fi # build frontend yarn cache frontend-cache: @@ -506,9 +489,13 @@ - ui-v2/node_modules # build ember so frontend tests run faster - ember-build: + ember-build-oss: &ember-build-oss docker: - image: *EMBER_IMAGE + resource_class: medium+ + environment: + JOBS: 2 # limit parallelism for broccoli-babel-transpiler + CONSUL_NSPACES_ENABLED: 0 steps: - checkout - restore_cache: @@ -521,12 +508,85 @@ paths: - dist + # build ember so frontend tests run faster + ember-build-ent: + <<: *ember-build-oss + environment: + JOBS: 2 # limit parallelism for broccoli-babel-transpiler + CONSUL_NSPACES_ENABLED: 1 + + # rebuild UI for packaging + ember-build-prod: + docker: + - image: *EMBER_IMAGE + resource_class: medium+ + steps: + - checkout + - restore_cache: + key: *YARN_CACHE_KEY + - run: cd ui-v2 && make + + # saves the build to a workspace to be passed to a downstream job + - persist_to_workspace: + root: ui-v2 + paths: + - dist + + # build static-assets file + build-static-assets: + docker: + - image: *GOLANG_IMAGE + steps: + - checkout + - attach_workspace: + at: ./pkg + - run: mv pkg/dist pkg/web_ui # 'make static-assets' looks for the 'pkg/web_ui' path + - run: make tools + - run: make static-assets + - persist_to_workspace: + root: . + paths: + - ./agent/bindata_assetfs.go + + # commits static assets to git + publish-static-assets: + docker: + - image: *GOLANG_IMAGE + steps: + - checkout + - add_ssh_keys: # needs a key to push updated static asset commit back to github + fingerprints: + - "c9:04:b7:85:bf:0e:ce:93:5f:b8:0e:68:8e:16:f3:71" + - attach_workspace: + at: . + - run: + name: commit agent/bindata_assetfs.go if there are UI changes + command: | + # check if there are any changes in ui-v2/ + # if there are, we commit the ui static asset file + # HEAD^! is shorthand for HEAD^..HEAD (parent of HEAD and HEAD) + if ! git diff --quiet --exit-code HEAD^! ui-v2/; then + git config --local user.email "hashicorp-ci@users.noreply.github.com" + git config --local user.name "hashicorp-ci" + + short_sha=$(git rev-parse --short HEAD) + git add agent/bindata_assetfs.go + git commit -m "auto-updated agent/bindata_assetfs.go from commit ${short_sha}" + git push origin master + else + echo "no UI changes so no static assets to publish" + fi + - run: *notify-slack-failure + # run ember frontend tests ember-test-oss: docker: - image: *EMBER_IMAGE environment: EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary + EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam + CONSUL_NSPACES_ENABLED: 0 + parallelism: 4 steps: - checkout - restore_cache: @@ -535,7 +595,7 @@ at: ui-v2 - run: working_directory: ui-v2 - command: make test-oss-ci + command: node_modules/.bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit - store_test_results: path: ui-v2/test-results # run ember frontend tests @@ -544,6 +604,8 @@ - image: *EMBER_IMAGE environment: EMBER_TEST_REPORT: test-results/report-ent.xml #outputs test report for CircleCI test summary + EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam + parallelism: 4 steps: - checkout - restore_cache: @@ -552,17 +614,34 @@ at: ui-v2 - run: working_directory: ui-v2 - command: make test-ci + command: node_modules/.bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit - store_test_results: path: ui-v2/test-results + # run ember frontend unit tests to produce coverage report + ember-coverage: + docker: + - image: *EMBER_IMAGE + steps: + - checkout + - restore_cache: + key: *YARN_CACHE_KEY + - attach_workspace: + at: ui-v2 + - run: + working_directory: ui-v2 + command: make test-coverage-ci + - run: + name: codecov ui upload + working_directory: ui-v2 + command: bash <(curl -s https://codecov.io/bash) -v -c -C $CIRCLE_SHA1 -F ui - envoy-integration-test-1.10.0: + envoy-integration-test-1.11.2: docker: # We only really need bash and docker-compose which is installed on all # Circle images but pick Go since we have to pick one of them. - image: *GOLANG_IMAGE environment: - ENVOY_VERSIONS: "1.10.0" + ENVOY_VERSION: "1.11.2" steps: &ENVOY_INTEGRATION_TEST_STEPS - checkout # Get go binary from workspace @@ -573,116 +652,158 @@ - run: docker build -t consul-dev -f ./build-support/docker/Consul-Dev.dockerfile . - run: name: Envoy Integration Tests - command: make test-envoy-integ SKIP_DOCKER_BUILD=1 + command: | + mkdir -p /tmp/test-results/ + gotestsum -- -timeout=30m -tags integration ./test/integration/connect/envoy environment: + GOTESTSUM_JUNITFILE: /tmp/test-results/results.xml + GOTESTSUM_FORMAT: standard-verbose + COMPOSE_INTERACTIVE_NO_CLI: 1 # tput complains if this isn't set to something. TERM: ansi - store_artifacts: path: ./test/integration/connect/envoy/workdir/logs destination: container-logs + - store_test_results: + path: *TEST_RESULTS_DIR + - store_artifacts: + path: *TEST_RESULTS_DIR - envoy-integration-test-1.11.2: + envoy-integration-test-1.12.7: docker: - image: *GOLANG_IMAGE environment: - ENVOY_VERSIONS: "1.11.2" + ENVOY_VERSION: "1.12.7" steps: *ENVOY_INTEGRATION_TEST_STEPS - envoy-integration-test-1.12.2: + envoy-integration-test-1.13.6: docker: - image: *GOLANG_IMAGE environment: - ENVOY_VERSIONS: "1.12.2" + ENVOY_VERSION: "1.13.6" steps: *ENVOY_INTEGRATION_TEST_STEPS - envoy-integration-test-1.13.0: + envoy-integration-test-1.14.5: docker: - image: *GOLANG_IMAGE environment: - ENVOY_VERSIONS: "1.13.0" + ENVOY_VERSION: "1.14.5" steps: *ENVOY_INTEGRATION_TEST_STEPS - # run tests on vault ca provider integration tests - vault-ca-provider: + # run integration tests for the connect ca providers + test-connect-ca-providers: docker: - image: *GOLANG_IMAGE environment: <<: *ENVIRONMENT steps: - # Install vault - - run: | - wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_BINARY_VERSION}/vault_${VAULT_BINARY_VERSION}_linux_amd64.zip - sudo unzip -d /usr/local/bin /tmp/vault.zip - rm -rf /tmp/vault* - # Create directory to store test results - - run: mkdir -p $TEST_RESULTS_DIR - # Gather deps to run go tests + - run: + name: Install vault + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_BINARY_VERSION}/vault_${VAULT_BINARY_VERSION}_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* - checkout - - restore_cache: - keys: - - consul-modcache-v1-{{ checksum "go.mod" }} - # Run go tests - - run: make test-vault-ca-provider + - run: go mod download + - run: + name: go test + command: | + mkdir -p $TEST_RESULTS_DIR + make test-connect-ca-providers - store_test_results: path: *TEST_RESULTS_DIR + - run: *codecov_upload + + # only runs on master: checks latest commit to see if the PR associated has a backport/* or docs* label to cherry-pick + cherry-picker: + docker: + - image: docker.mirror.hashicorp.services/alpine:3.11 + steps: + - run: apk add --no-cache --no-progress git bash curl ncurses jq openssh-client + - checkout + - add_ssh_keys: # needs a key to push cherry-picked commits back to github + fingerprints: + - "c9:04:b7:85:bf:0e:ce:93:5f:b8:0e:68:8e:16:f3:71" + - run: .circleci/scripts/cherry-picker.sh + + trigger-oss-merge: + docker: + - image: alpine:3.11 + steps: + - run: apk add --no-cache --no-progress curl jq + - run: + name: trigger oss merge + command: | + curl -s -X POST \ + --header "Circle-Token: ${CIRCLECI_API_TOKEN}" \ + --header "Content-Type: application/json" \ + -d '{"build_parameters": {"CIRCLE_JOB": "oss-merge"}}' \ + "https://circleci.com/api/v1.1/project/github/hashicorp/consul-enterprise/tree/${CIRCLE_BRANCH}" | jq -r '.build_url' + - run: *notify-slack-failure workflows: version: 2 go-tests: jobs: - - check-vendor: + - check-vendor: &filter-ignore-non-go-branches filters: branches: ignore: - stable-website - /^docs\/.*/ - /^ui\/.*/ - - lint-consul-retry: + - check-generated-protobuf: *filter-ignore-non-go-branches + - lint-consul-retry: *filter-ignore-non-go-branches + - lint: *filter-ignore-non-go-branches + - test-connect-ca-providers: *filter-ignore-non-go-branches + - dev-build: *filter-ignore-non-go-branches + - go-test: + requires: [dev-build] + - go-test-api: + requires: [dev-build] + - go-test-sdk: *filter-ignore-non-go-branches + build-distros: + jobs: + - check-vendor: *filter-ignore-non-go-branches + - build-386: &require-check-vendor + requires: + - check-vendor + - build-amd64: *require-check-vendor + - build-arm: *require-check-vendor + # every commit on ui-staging and master will have a rebuilt UI + - frontend-cache: filters: branches: - ignore: - - stable-website - - /^docs\/.*/ - - /^ui\/.*/ - - go-fmt-and-vet: + only: + - master + - ui-staging + - ember-build-prod: requires: - - check-vendor + - frontend-cache + - build-static-assets: + requires: + - ember-build-prod + - publish-static-assets: + filters: + branches: + only: + - master + - /release\/\d+\.\d+\.x$/ + requires: + - build-static-assets - dev-build: requires: - - go-fmt-and-vet - - go-test: &go-test + - build-static-assets + - dev-upload-s3: requires: - dev-build - - go-test-api: *go-test - - go-test-sdk: *go-test - - coverage-merge: - requires: - - go-test - - go-test-api - - go-test-sdk - build-distros: - jobs: - - check-vendor: - filters: - branches: - ignore: - - stable-website - - /^docs\/.*/ - - /^ui\/.*/ - - build-386: &require-check-vendor + - dev-upload-docker: requires: - - check-vendor - - build-amd64: *require-check-vendor - - build-arm: *require-check-vendor + - dev-build + context: consul-ci test-integrations: jobs: - - dev-build: - filters: - branches: - ignore: - - stable-website - - /^docs\/.*/ - - /^ui\/.*/ + - dev-build: *filter-ignore-non-go-branches - dev-upload-s3: &dev-upload requires: - dev-build @@ -690,6 +811,8 @@ branches: ignore: - /^pull\/.*$/ # only push dev builds from non forks + - master # all master dev uploads will include a UI rebuild in build-distros + - ui-staging # all ui-staging dev uploads will include a UI rebuild in build-distros - dev-upload-docker: <<: *dev-upload context: consul-ci @@ -699,52 +822,62 @@ - nomad-integration-0_8: requires: - dev-build - - envoy-integration-test-1.10.0: - requires: - - dev-build - envoy-integration-test-1.11.2: requires: - dev-build - - envoy-integration-test-1.12.2: + - envoy-integration-test-1.12.7: requires: - dev-build - - envoy-integration-test-1.13.0: + - envoy-integration-test-1.13.6: requires: - dev-build - - vault-ca-provider: + - envoy-integration-test-1.14.5: requires: - dev-build website: jobs: - - build-website - - docs-link-checker: - requires: - - build-website + - build-website-docker-image: + context: website-docker-image filters: branches: - ignore: - - /^pull\/.*$/ # only run link checker on non forks - - deploy-website: - requires: - - docs-link-checker - context: static-sites - filters: - branches: - only: stable-website + only: + - master frontend: jobs: - frontend-cache: filters: branches: - ignore: - - stable-website - - /^docs\/.*/ - - ember-build: + only: + - master + - ui-staging + - /^ui\/.*/ + - ember-build-oss: + requires: + - frontend-cache + - ember-build-ent: requires: - frontend-cache - ember-test-oss: requires: - - ember-build + - ember-build-oss - ember-test-ent: requires: - - ember-build + - ember-build-ent + - ember-coverage: + requires: + - ember-build-ent + workflow-automation: + jobs: + - trigger-oss-merge: + context: team-consul + filters: + branches: + only: + - master + - /release\/\d+\.\d+\.x$/ + - cherry-picker: + context: team-consul + filters: + branches: + only: + - master diff -Nru consul-1.7.4+dfsg1/.circleci/scripts/cherry-picker.sh consul-1.8.7+dfsg1/.circleci/scripts/cherry-picker.sh --- consul-1.7.4+dfsg1/.circleci/scripts/cherry-picker.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.circleci/scripts/cherry-picker.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# +# This script is meant to run on every new commit to master in CircleCI. If the commit comes from a PR, it will +# check the PR associated with the commit for labels. If the label matches `docs*` it will be cherry-picked +# to stable-website. If the label matches `backport/*`, it will be cherry-picked to the appropriate `release/*` +# branch. + +# Requires $CIRCLE_PROJECT_USERNAME, $CIRCLE_PROJECT_REPONAME, and $CIRCLE_SHA1 from CircleCI + +set -e -o pipefail + +# colorized status prompt +function status { + tput setaf 4 + echo "$@" + tput sgr0 +} + +# This function will do the cherry-picking of a commit on a branch +# Exit 1 if cherry-picking fails +function cherry_pick_with_slack_notification { + # Arguments: + # $1 - branch to cherry-pick to + # $2 - commit to cherry-pick + # $3 - url to PR of commit + + local branch="$1" + local commit="$2" + local pr_url="$3" + + git checkout "$branch" || exit 1 + # If git cherry-pick fails, we send a failure notification + if ! git cherry-pick --mainline 1 "$commit"; then + status "🍒❌ Cherry pick of commit ${commit:0:7} from $pr_url onto $branch failed!" + curl -X POST -H 'Content-type: application/json' \ + --data \ + "{ \ + \"attachments\": [ \ + { \ + \"fallback\": \"Cherry pick failed!\", \ + \"text\": \"🍒❌ Cherry picking of <$pr_url|${commit:0:7}> to \`$branch\` failed!\n\nBuild Log: ${CIRCLE_BUILD_URL}\", \ + \"footer\": \"${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}\", \ + \"ts\": \"$(date +%s)\", \ + \"color\": \"danger\" \ + } \ + ] \ + }" "${CONSUL_SLACK_WEBHOOK_URL}" + git status + exit 1 + # Else we send a success notification + else + status "🍒✅ Cherry picking of PR commit ${commit:0:7} from $pr_url succeeded!" + # push changes to the specified branch + git push origin "$branch" + curl -X POST -H 'Content-type: application/json' \ + --data \ + "{ \ + \"attachments\": [ \ + { \ + \"fallback\": \"Cherry pick succeeded!\", \ + \"text\": \"🍒✅ Cherry picking of <$pr_url|${commit:0:7}> to \`$branch\` succeeded!\n\nBuild Log: ${CIRCLE_BUILD_URL}\", \ + \"footer\": \"${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}\", \ + \"ts\": \"$(date +%s)\", \ + \"color\": \"good\" \ + } \ + ] \ + }" "${CONSUL_SLACK_WEBHOOK_URL}" + fi +} + +# search for the PR labels applicable to the specified commit +resp=$(curl -f -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/search/issues?q=repo:$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME+sha:$CIRCLE_SHA1") +ret="$?" +if [[ "$ret" -ne 0 ]]; then + status "The GitHub API returned $ret which means it was probably rate limited." + exit $ret +fi + +# get the count from the GitHub API to check if the commit matched a PR +count=$(echo "$resp" | jq '.total_count') +if [[ "$count" -eq 0 ]]; then + status "This commit was not associated with a PR" + exit 0 +fi + +# If the API returned a non-zero count, we have found a PR with that commit so we find +# the labels from the PR +labels=$(echo "$resp" | jq --raw-output '.items[].labels[] | .name') +ret="$?" +pr_url=$(echo "$resp" | jq --raw-output '.items[].pull_request.html_url') +if [[ "$ret" -ne 0 ]]; then + status "jq exited with $ret when trying to find label names. Are there labels applied to the PR ($pr_url)?" + # This can be a valid error but usually this means we do not have any labels so it doesn't signal + # cherry-picking is possible. Exit 0 for now unless we run into cases where these failures are important. + exit 0 +fi + +# loop through all labels on the PR +for label in $labels; do + git config --local user.email "hashicorp-ci@users.noreply.github.com" + git config --local user.name "hashicorp-ci" + status "checking label: $label" + # TODO: enable this when replatform is merged into stable-website + # if the label matches docs-cherrypick, it will attempt to cherry-pick to stable-website + # if [[ $label == docs-cherrypick ]]; then + # status "backporting to stable-website" + # branch="stable-website" + # cherry_pick_with_slack_notification "$branch" "$CIRCLE_SHA1" "$pr_url" + # else if the label matches backport/*, it will attempt to cherry-pick to the release branch + if [[ $label =~ backport/* ]]; then + status "backporting to $label" + branch="${label/backport/release}.x" + cherry_pick_with_slack_notification "$branch" "$CIRCLE_SHA1" "$pr_url" + fi +done diff -Nru consul-1.7.4+dfsg1/codecov.yml consul-1.8.7+dfsg1/codecov.yml --- consul-1.7.4+dfsg1/codecov.yml 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/codecov.yml 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,8 @@ # https://docs.codecov.io/docs/commit-status#section-excluding-tests-example- # TODO: should any paths be excluded from coverage metrics? # paths: + ui: + informational: true # https://docs.codecov.io/docs/commit-status#section-changes-status # TODO: enable after eliminating current unexpected coverage changes? changes: off @@ -29,4 +31,11 @@ # https://docs.codecov.io/docs/flags # TODO: split out test coverage for API, SDK, UI, website? -# flags: +flags: + ui: + paths: /ui-v2/ + +ignore: + - "agent/bindata_assetfs.go" + - "vendor/**/*" + - "**/*.pb.go" diff -Nru consul-1.7.4+dfsg1/command/acl/acl_helpers.go consul-1.8.7+dfsg1/command/acl/acl_helpers.go --- consul-1.7.4+dfsg1/command/acl/acl_helpers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/acl_helpers.go 2020-12-10 21:46:52.000000000 +0000 @@ -217,6 +217,23 @@ return out, nil } +func ExtractNodeIdentities(nodeIdents []string) ([]*api.ACLNodeIdentity, error) { + var out []*api.ACLNodeIdentity + for _, nodeidRaw := range nodeIdents { + parts := strings.Split(nodeidRaw, ":") + switch len(parts) { + case 2: + out = append(out, &api.ACLNodeIdentity{ + NodeName: parts[0], + Datacenter: parts[1], + }) + default: + return nil, fmt.Errorf("Malformed -node-identity argument: %q", nodeidRaw) + } + } + return out, nil +} + // TestKubernetesJWT_A is a valid service account jwt extracted from a minikube setup. // // { diff -Nru consul-1.7.4+dfsg1/command/acl/agenttokens/agent_tokens_test.go consul-1.8.7+dfsg1/command/acl/agenttokens/agent_tokens_test.go --- consul-1.7.4+dfsg1/command/acl/agenttokens/agent_tokens_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/agenttokens/agent_tokens_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/authmethod.go consul-1.8.7+dfsg1/command/acl/authmethod/authmethod.go --- consul-1.7.4+dfsg1/command/acl/authmethod/authmethod.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/authmethod.go 2020-12-10 21:46:52.000000000 +0000 @@ -37,7 +37,7 @@ -name "my-k8s" \ -description "This is an example kube auth method" \ -kubernetes-host "https://apiserver.example.com:8443" \ - -kubernetes-ca-file /path/to/kube.ca.crt \ + -kubernetes-ca-cert @/path/to/kube.ca.crt \ -kubernetes-service-account-jwt "JWT_CONTENTS" List all auth methods: @@ -49,7 +49,7 @@ $ consul acl auth-method update -name "my-k8s" \ -description "new description" \ -kubernetes-host "https://new-apiserver.example.com:8443" \ - -kubernetes-ca-file /path/to/new-kube.ca.crt \ + -kubernetes-ca-cert @/path/to/new-kube.ca.crt \ -kubernetes-service-account-jwt "NEW_JWT_CONTENTS" Read an auth method: diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/create/authmethod_create.go consul-1.8.7+dfsg1/command/acl/authmethod/create/authmethod_create.go --- consul-1.7.4+dfsg1/command/acl/authmethod/create/authmethod_create.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/create/authmethod_create.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,10 +1,12 @@ package authmethodcreate import ( + "encoding/json" "flag" "fmt" "io" "strings" + "time" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/command/acl/authmethod" @@ -27,7 +29,11 @@ authMethodType string name string + displayName string description string + maxTokenTTL time.Duration + tokenLocality string + config string k8sHost string k8sCACert string @@ -37,6 +43,8 @@ format string testStdin io.Reader + + enterpriseCmd } func (c *cmd) init() { @@ -63,11 +71,30 @@ "The new auth method's name. This flag is required.", ) c.flags.StringVar( + &c.displayName, + "display-name", + "", + "An optional name to use instead of the name when displaying this auth method in a UI.", + ) + c.flags.StringVar( &c.description, "description", "", "A description of the auth method.", ) + c.flags.DurationVar( + &c.maxTokenTTL, + "max-token-ttl", + 0, + "Duration of time all tokens created by this auth method should be valid for", + ) + c.flags.StringVar( + &c.tokenLocality, + "token-locality", + "", + "Defines the kind of token that this auth method should produce. "+ + "This can be either 'local' or 'global'. If empty the value of 'local' is assumed.", + ) c.flags.StringVar( &c.k8sHost, @@ -98,6 +125,16 @@ authmethod.PrettyFormat, fmt.Sprintf("Output format {%s}", strings.Join(authmethod.GetSupportedFormats(), "|")), ) + c.flags.StringVar( + &c.config, + "config", + "", + "The configuration for the auth method. Must be JSON. May be prefixed with '@' "+ + "to indicate that the value is a file path to load the config from. '-' may also be "+ + "given to indicate that the config is available on stdin", + ) + + c.initEnterpriseFlags() c.http = &flags.HTTPFlags{} flags.Merge(c.flags, c.http.ClientFlags()) @@ -128,9 +165,37 @@ } newAuthMethod := &api.ACLAuthMethod{ - Type: c.authMethodType, - Name: c.name, - Description: c.description, + Type: c.authMethodType, + Name: c.name, + DisplayName: c.displayName, + Description: c.description, + TokenLocality: c.tokenLocality, + } + if c.maxTokenTTL > 0 { + newAuthMethod.MaxTokenTTL = c.maxTokenTTL + } + + if err := c.enterprisePopulateAuthMethod(newAuthMethod); err != nil { + c.UI.Error(err.Error()) + return 1 + } + + if c.config != "" { + if c.k8sHost != "" || c.k8sCACert != "" || c.k8sServiceAccountJWT != "" { + c.UI.Error(fmt.Sprintf("Cannot use command line arguments with '-config' flags")) + return 1 + } + data, err := helpers.LoadDataSource(c.config, c.testStdin) + if err != nil { + c.UI.Error(fmt.Sprintf("Error loading configuration file: %v", err)) + return 1 + } + err = json.Unmarshal([]byte(data), &newAuthMethod.Config) + if err != nil { + c.UI.Error(fmt.Sprintf("Error parsing JSON configuration file: %v", err)) + return 1 + } + } if c.authMethodType == "kubernetes" { @@ -204,6 +269,6 @@ -name "my-k8s" \ -description "This is an example kube method" \ -kubernetes-host "https://apiserver.example.com:8443" \ - -kubernetes-ca-file /path/to/kube.ca.crt \ + -kubernetes-ca-cert @/path/to/kube.ca.crt \ -kubernetes-service-account-jwt "JWT_CONTENTS" ` diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/create/authmethod_create_oss.go consul-1.8.7+dfsg1/command/acl/authmethod/create/authmethod_create_oss.go --- consul-1.7.4+dfsg1/command/acl/authmethod/create/authmethod_create_oss.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/create/authmethod_create_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +// +build !consulent + +package authmethodcreate + +import "github.com/hashicorp/consul/api" + +type enterpriseCmd struct { +} + +func (c *cmd) initEnterpriseFlags() {} + +func (c *cmd) enterprisePopulateAuthMethod(method *api.ACLAuthMethod) error { + return nil +} diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/create/authmethod_create_test.go consul-1.8.7+dfsg1/command/acl/authmethod/create/authmethod_create_test.go --- consul-1.7.4+dfsg1/command/acl/authmethod/create/authmethod_create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/create/authmethod_create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,19 +2,22 @@ import ( "encoding/json" + "io" "io/ioutil" "os" "path/filepath" "strings" "testing" + "time" "github.com/hashicorp/consul/agent" "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/command/acl" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/testrpc" + "github.com/hashicorp/go-uuid" "github.com/mitchellh/cli" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" // activate testing auth method @@ -35,7 +38,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -45,7 +48,8 @@ }`) defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") + testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) + client := a.Client() t.Run("type required", func(t *testing.T) { args := []string{ @@ -93,11 +97,14 @@ }) t.Run("create testing", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=testing", - "-name=test", + "-name", name, + "-description=desc", + "-display-name=display", } ui := cli.NewMockUi() @@ -106,6 +113,75 @@ code := cmd.Run(args) require.Equal(t, code, 0) require.Empty(t, ui.ErrorWriter.String()) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "display", + Description: "desc", + } + require.Equal(t, expect, got) + }) + + t.Run("create testing with max token ttl", func(t *testing.T) { + name := getTestName(t) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-description=desc", + "-display-name=display", + "-max-token-ttl=5m", + } + + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(args) + require.Equal(t, code, 0, "err: "+ui.ErrorWriter.String()) + require.Empty(t, ui.ErrorWriter.String()) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "display", + Description: "desc", + MaxTokenTTL: 5 * time.Minute, + } + require.Equal(t, expect, got) + }) + + t.Run("create testing with token type global", func(t *testing.T) { + name := getTestName(t) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-description=desc", + "-display-name=display", + "-token-locality=global", + } + + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(args) + require.Equal(t, code, 0, "err: "+ui.ErrorWriter.String()) + require.Empty(t, ui.ErrorWriter.String()) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "display", + Description: "desc", + TokenLocality: "global", + } + require.Equal(t, expect, got) }) } @@ -115,7 +191,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -125,7 +201,8 @@ }`) defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") + testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) + client := a.Client() t.Run("type required", func(t *testing.T) { args := []string{ @@ -143,11 +220,14 @@ }) t.Run("create testing", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=testing", - "-name=test", + "-name", name, + "-description=desc", + "-display-name=display", "-format=json", } @@ -159,11 +239,117 @@ require.Equal(t, code, 0) require.Empty(t, ui.ErrorWriter.String()) - require.Contains(t, out, "test") + require.Contains(t, out, name) var jsonOutput json.RawMessage - err := json.Unmarshal([]byte(out), &jsonOutput) - assert.NoError(t, err) + require.NoError(t, json.Unmarshal([]byte(out), &jsonOutput)) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "display", + Description: "desc", + } + require.Equal(t, expect, got) + }) + + t.Run("create testing with max token ttl", func(t *testing.T) { + name := getTestName(t) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-description=desc", + "-display-name=display", + "-max-token-ttl=5m", + "-format=json", + } + + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(args) + out := ui.OutputWriter.String() + + require.Equal(t, code, 0) + require.Empty(t, ui.ErrorWriter.String()) + require.Contains(t, out, name) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "display", + Description: "desc", + MaxTokenTTL: 5 * time.Minute, + } + require.Equal(t, expect, got) + + var raw map[string]interface{} + require.NoError(t, json.Unmarshal([]byte(out), &raw)) + delete(raw, "CreateIndex") + delete(raw, "ModifyIndex") + delete(raw, "Namespace") + + require.Equal(t, map[string]interface{}{ + "Name": name, + "Type": "testing", + "DisplayName": "display", + "Description": "desc", + "MaxTokenTTL": "5m0s", + "Config": nil, + }, raw) + }) + + t.Run("create testing with token type global", func(t *testing.T) { + name := getTestName(t) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-description=desc", + "-display-name=display", + "-token-locality=global", + "-format=json", + } + + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(args) + out := ui.OutputWriter.String() + + require.Equal(t, code, 0) + require.Empty(t, ui.ErrorWriter.String()) + require.Contains(t, out, name) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "display", + Description: "desc", + TokenLocality: "global", + } + require.Equal(t, expect, got) + + var raw map[string]interface{} + require.NoError(t, json.Unmarshal([]byte(out), &raw)) + delete(raw, "CreateIndex") + delete(raw, "ModifyIndex") + delete(raw, "Namespace") + + require.Equal(t, map[string]interface{}{ + "Name": name, + "Type": "testing", + "DisplayName": "display", + "Description": "desc", + "TokenLocality": "global", + "Config": nil, + }, raw) }) } @@ -173,7 +359,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -183,14 +369,16 @@ }`) defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") + testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) + client := a.Client() t.Run("k8s host required", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=kubernetes", - "-name=k8s", + "-name", name, } ui := cli.NewMockUi() @@ -202,11 +390,12 @@ }) t.Run("k8s ca cert required", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=kubernetes", - "-name=k8s", + "-name", name, "-kubernetes-host=https://foo.internal:8443", } @@ -221,11 +410,12 @@ ca := connect.TestCA(t, nil) t.Run("k8s jwt required", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=kubernetes", - "-name=k8s", + "-name", name, "-kubernetes-host=https://foo.internal:8443", "-kubernetes-ca-cert", ca.RootCert, } @@ -239,11 +429,12 @@ }) t.Run("create k8s", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=kubernetes", - "-name=k8s", + "-name", name, "-kubernetes-host", "https://foo.internal:8443", "-kubernetes-ca-cert", ca.RootCert, "-kubernetes-service-account-jwt", acl.TestKubernetesJWT_A, @@ -253,19 +444,32 @@ cmd := New(ui) code := cmd.Run(args) - require.Equal(t, code, 0) + require.Equal(t, 0, code) require.Empty(t, ui.ErrorWriter.String()) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "kubernetes", + Config: map[string]interface{}{ + "Host": "https://foo.internal:8443", + "CACert": ca.RootCert, + "ServiceAccountJWT": acl.TestKubernetesJWT_A, + }, + } + require.Equal(t, expect, got) }) caFile := filepath.Join(testDir, "ca.crt") require.NoError(t, ioutil.WriteFile(caFile, []byte(ca.RootCert), 0600)) t.Run("create k8s with cert file", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-type=kubernetes", - "-name=k8s", + "-name", name, "-kubernetes-host", "https://foo.internal:8443", "-kubernetes-ca-cert", "@" + caFile, "-kubernetes-service-account-jwt", acl.TestKubernetesJWT_A, @@ -277,5 +481,140 @@ code := cmd.Run(args) require.Equal(t, code, 0) require.Empty(t, ui.ErrorWriter.String()) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "kubernetes", + Config: map[string]interface{}{ + "Host": "https://foo.internal:8443", + "CACert": ca.RootCert, + "ServiceAccountJWT": acl.TestKubernetesJWT_A, + }, + } + require.Equal(t, expect, got) }) } + +func TestAuthMethodCreateCommand_config(t *testing.T) { + t.Parallel() + + testDir := testutil.TempDir(t, "auth-method") + defer os.RemoveAll(testDir) + + a := agent.NewTestAgent(t, ` + primary_datacenter = "dc1" + acl { + enabled = true + tokens { + master = "root" + } + }`) + + defer a.Shutdown() + testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) + client := a.Client() + + checkMethod := func(t *testing.T, methodName string) { + + method, _, err := client.ACL().AuthMethodRead( + methodName, + &api.QueryOptions{Token: "root"}, + ) + require.NoError(t, err) + require.NotNil(t, method) + require.Equal(t, "foo", method.Config["SessionID"]) + } + + t.Run("config file", func(t *testing.T) { + name := getTestName(t) + configFile := filepath.Join(testDir, "config.json") + jsonConfig := `{"SessionID":"foo"}` + require.NoError(t, ioutil.WriteFile(configFile, []byte(jsonConfig), 0644)) + + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-config=@" + configFile, + } + ui := cli.NewMockUi() + cmd := New(ui) + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + checkMethod(t, name) + }) + + t.Run("config std-in", func(t *testing.T) { + name := getTestName(t) + stdinR, stdinW := io.Pipe() + ui := cli.NewMockUi() + cmd := New(ui) + cmd.testStdin = stdinR + go func() { + stdinW.Write([]byte(`{"SessionID":"foo"}`)) + stdinW.Close() + }() + + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-config=-", + } + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + checkMethod(t, name) + + }) + t.Run("config string", func(t *testing.T) { + name := getTestName(t) + ui := cli.NewMockUi() + cmd := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-type=testing", + "-name", name, + "-config=" + `{"SessionID":"foo"}`, + } + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + checkMethod(t, name) + }) +} + +func getTestMethod(t *testing.T, client *api.Client, methodName string) *api.ACLAuthMethod { + t.Helper() + + method, _, err := client.ACL().AuthMethodRead( + methodName, + &api.QueryOptions{Token: "root"}, + ) + require.NoError(t, err) + require.NotNil(t, method) + + // zero these out since we don't really care + method.CreateIndex = 0 + method.ModifyIndex = 0 + + if method.Namespace == "default" { + method.Namespace = "" + } + + return method +} + +func getTestName(t *testing.T) string { + t.Helper() + + id, err := uuid.GenerateUUID() + require.NoError(t, err) + return "test-" + id + +} diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/delete/authmethod_delete_test.go consul-1.8.7+dfsg1/command/acl/authmethod/delete/authmethod_delete_test.go --- consul-1.7.4+dfsg1/command/acl/authmethod/delete/authmethod_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/delete/authmethod_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/formatter.go consul-1.8.7+dfsg1/command/acl/authmethod/formatter.go --- consul-1.7.4+dfsg1/command/acl/authmethod/formatter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/formatter.go 2020-12-10 21:46:52.000000000 +0000 @@ -49,15 +49,31 @@ func (f *prettyFormatter) FormatAuthMethod(method *api.ACLAuthMethod) (string, error) { var buffer bytes.Buffer - buffer.WriteString(fmt.Sprintf("Name: %s\n", method.Name)) - buffer.WriteString(fmt.Sprintf("Type: %s\n", method.Type)) + buffer.WriteString(fmt.Sprintf("Name: %s\n", method.Name)) + buffer.WriteString(fmt.Sprintf("Type: %s\n", method.Type)) if method.Namespace != "" { - buffer.WriteString(fmt.Sprintf("Namespace: %s\n", method.Namespace)) + buffer.WriteString(fmt.Sprintf("Namespace: %s\n", method.Namespace)) + } + if method.DisplayName != "" { + buffer.WriteString(fmt.Sprintf("DisplayName: %s\n", method.DisplayName)) + } + buffer.WriteString(fmt.Sprintf("Description: %s\n", method.Description)) + if method.MaxTokenTTL > 0 { + buffer.WriteString(fmt.Sprintf("MaxTokenTTL: %s\n", method.MaxTokenTTL)) + } + if method.TokenLocality != "" { + buffer.WriteString(fmt.Sprintf("TokenLocality: %s\n", method.TokenLocality)) + } + if len(method.NamespaceRules) > 0 { + buffer.WriteString(fmt.Sprintln("NamespaceRules:")) + for _, rule := range method.NamespaceRules { + buffer.WriteString(fmt.Sprintf(" Selector: %s\n", rule.Selector)) + buffer.WriteString(fmt.Sprintf(" BindNamespace: %s\n", rule.BindNamespace)) + } } - buffer.WriteString(fmt.Sprintf("Description: %s\n", method.Description)) if f.showMeta { - buffer.WriteString(fmt.Sprintf("Create Index: %d\n", method.CreateIndex)) - buffer.WriteString(fmt.Sprintf("Modify Index: %d\n", method.ModifyIndex)) + buffer.WriteString(fmt.Sprintf("Create Index: %d\n", method.CreateIndex)) + buffer.WriteString(fmt.Sprintf("Modify Index: %d\n", method.ModifyIndex)) } buffer.WriteString(fmt.Sprintln("Config:")) output, err := json.MarshalIndent(method.Config, "", " ") @@ -87,6 +103,9 @@ if method.Namespace != "" { buffer.WriteString(fmt.Sprintf(" Namespace: %s\n", method.Namespace)) } + if method.DisplayName != "" { + buffer.WriteString(fmt.Sprintf(" DisplayName: %s\n", method.DisplayName)) + } buffer.WriteString(fmt.Sprintf(" Description: %s\n", method.Description)) if f.showMeta { buffer.WriteString(fmt.Sprintf(" Create Index: %d\n", method.CreateIndex)) diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/list/authmethod_list_test.go consul-1.8.7+dfsg1/command/acl/authmethod/list/authmethod_list_test.go --- consul-1.7.4+dfsg1/command/acl/authmethod/list/authmethod_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/list/authmethod_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -113,7 +113,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/read/authmethod_read_test.go consul-1.8.7+dfsg1/command/acl/authmethod/read/authmethod_read_test.go --- consul-1.7.4+dfsg1/command/acl/authmethod/read/authmethod_read_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/read/authmethod_read_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -122,7 +122,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/update/authmethod_update.go consul-1.8.7+dfsg1/command/acl/authmethod/update/authmethod_update.go --- consul-1.7.4+dfsg1/command/acl/authmethod/update/authmethod_update.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/update/authmethod_update.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,10 +1,12 @@ package authmethodupdate import ( + "encoding/json" "flag" "fmt" "io" "strings" + "time" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/command/acl/authmethod" @@ -27,7 +29,11 @@ name string - description string + displayName string + description string + maxTokenTTL time.Duration + tokenLocality string + config string k8sHost string k8sCACert string @@ -38,6 +44,8 @@ format string testStdin io.Reader + + enterpriseCmd } func (c *cmd) init() { @@ -59,12 +67,42 @@ ) c.flags.StringVar( + &c.displayName, + "display-name", + "", + "An optional name to use instead of the name when displaying this auth method in a UI.", + ) + + c.flags.StringVar( &c.description, "description", "", "A description of the auth method.", ) + c.flags.DurationVar( + &c.maxTokenTTL, + "max-token-ttl", + 0, + "Duration of time all tokens created by this auth method should be valid for", + ) + c.flags.StringVar( + &c.tokenLocality, + "token-locality", + "", + "Defines the kind of token that this auth method should produce. "+ + "This can be either 'local' or 'global'. If empty the value of 'local' is assumed.", + ) + + c.flags.StringVar( + &c.config, + "config", + "", + "The configuration for the auth method. Must be JSON. The config is updated as one field"+ + "May be prefixed with '@' to indicate that the value is a file path to load the config from. "+ + "'-' may also be given to indicate that the config are available on stdin. ", + ) + c.flags.StringVar( &c.k8sHost, "kubernetes-host", @@ -92,12 +130,16 @@ c.flags.BoolVar(&c.noMerge, "no-merge", false, "Do not merge the current auth method "+ "information with what is provided to the command. Instead overwrite all fields "+ "with the exception of the name which is immutable.") + c.flags.StringVar( &c.format, "format", authmethod.PrettyFormat, fmt.Sprintf("Output format {%s}", strings.Join(authmethod.GetSupportedFormats(), "|")), ) + + c.initEnterpriseFlags() + c.http = &flags.HTTPFlags{} flags.Merge(c.flags, c.http.ClientFlags()) flags.Merge(c.flags, c.http.ServerFlags()) @@ -145,9 +187,35 @@ var method *api.ACLAuthMethod if c.noMerge { method = &api.ACLAuthMethod{ - Name: currentAuthMethod.Name, - Type: currentAuthMethod.Type, - Description: c.description, + Name: currentAuthMethod.Name, + Type: currentAuthMethod.Type, + DisplayName: c.displayName, + Description: c.description, + TokenLocality: c.tokenLocality, + } + if c.maxTokenTTL > 0 { + method.MaxTokenTTL = c.maxTokenTTL + } + + if err := c.enterprisePopulateAuthMethod(method); err != nil { + c.UI.Error(err.Error()) + return 1 + } + + if c.config != "" { + if c.k8sHost != "" || c.k8sCACert != "" || c.k8sServiceAccountJWT != "" { + c.UI.Error(fmt.Sprintf("Cannot use command line arguments with '-config' flag")) + return 1 + } + data, err := helpers.LoadDataSource(c.config, c.testStdin) + if err != nil { + c.UI.Error(fmt.Sprintf("Error loading configuration file: %v", err)) + return 1 + } + if err := json.Unmarshal([]byte(data), &method.Config); err != nil { + c.UI.Error(fmt.Sprintf("Error parsing JSON for auth method config: %v", err)) + return 1 + } } if currentAuthMethod.Type == "kubernetes" { @@ -171,10 +239,39 @@ } else { methodCopy := *currentAuthMethod method = &methodCopy - if c.description != "" { method.Description = c.description } + if c.displayName != "" { + method.DisplayName = c.displayName + } + if c.maxTokenTTL > 0 { + method.MaxTokenTTL = c.maxTokenTTL + } + if c.tokenLocality != "" { + method.TokenLocality = c.tokenLocality + } + if err := c.enterprisePopulateAuthMethod(method); err != nil { + c.UI.Error(err.Error()) + return 1 + } + if c.config != "" { + if c.k8sHost != "" || c.k8sCACert != "" || c.k8sServiceAccountJWT != "" { + c.UI.Error(fmt.Sprintf("Cannot use command line arguments with '-config' flag")) + return 1 + } + data, err := helpers.LoadDataSource(c.config, c.testStdin) + if err != nil { + c.UI.Error(fmt.Sprintf("Error loading configuration file: %v", err)) + return 1 + } + // Don't attempt a deep merge. + method.Config = make(map[string]interface{}) + if err := json.Unmarshal([]byte(data), &method.Config); err != nil { + c.UI.Error(fmt.Sprintf("Error parsing JSON for auth method config: %v", err)) + return 1 + } + } if method.Config == nil { method.Config = make(map[string]interface{}) } @@ -236,6 +333,6 @@ $ consul acl auth-method update -name "my-k8s" \ -description "new description" \ -kubernetes-host "https://new-apiserver.example.com:8443" \ - -kubernetes-ca-file /path/to/new-kube.ca.crt \ + -kubernetes-ca-cert @/path/to/new-kube.ca.crt \ -kubernetes-service-account-jwt "NEW_JWT_CONTENTS" ` diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/update/authmethod_update_oss.go consul-1.8.7+dfsg1/command/acl/authmethod/update/authmethod_update_oss.go --- consul-1.7.4+dfsg1/command/acl/authmethod/update/authmethod_update_oss.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/update/authmethod_update_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,15 @@ +// +build !consulent + +package authmethodupdate + +import "github.com/hashicorp/consul/api" + +type enterpriseCmd struct { +} + +func (c *cmd) initEnterpriseFlags() { +} + +func (c *cmd) enterprisePopulateAuthMethod(method *api.ACLAuthMethod) error { + return nil +} diff -Nru consul-1.7.4+dfsg1/command/acl/authmethod/update/authmethod_update_test.go consul-1.8.7+dfsg1/command/acl/authmethod/update/authmethod_update_test.go --- consul-1.7.4+dfsg1/command/acl/authmethod/update/authmethod_update_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/authmethod/update/authmethod_update_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ import ( "encoding/json" + "io" "io/ioutil" "os" "path/filepath" @@ -16,7 +17,6 @@ "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/go-uuid" "github.com/mitchellh/cli" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" // activate testing auth method @@ -37,7 +37,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -66,10 +66,11 @@ }) t.Run("update nonexistent method", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", - "-name=test", + "-name", name, } ui := cli.NewMockUi() @@ -99,14 +100,48 @@ return methodName } + finalName := createAuthMethod(t) + t.Run("update all fields", func(t *testing.T) { - name := createAuthMethod(t) + name := finalName + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-name=" + name, + "-display-name", "updated display", + "-description", "updated description", + "-config", `{ "SessionID": "foo" }`, + } + + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(args) + require.Equal(t, code, 0) + require.Empty(t, ui.ErrorWriter.String()) + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "updated display", + Description: "updated description", + Config: map[string]interface{}{ + "SessionID": "foo", + }, + } + require.Equal(t, expect, got) + }) + + t.Run("update config field and prove no merging happens", func(t *testing.T) { + name := finalName args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-name=" + name, + "-display-name", "updated display", "-description", "updated description", + "-config", `{ "Data": { "foo": "bar"} }`, } ui := cli.NewMockUi() @@ -116,13 +151,19 @@ require.Equal(t, code, 0) require.Empty(t, ui.ErrorWriter.String()) - method, _, err := client.ACL().AuthMethodRead( - name, - &api.QueryOptions{Token: "root"}, - ) - require.NoError(t, err) - require.NotNil(t, method) - require.Equal(t, "updated description", method.Description) + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "updated display", + Description: "updated description", + Config: map[string]interface{}{ + "Data": map[string]interface{}{ + "foo": "bar", + }, + }, + } + require.Equal(t, expect, got) }) } @@ -132,7 +173,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -187,6 +228,7 @@ "-http-addr=" + a.HTTPAddr(), "-token=root", "-name=" + name, + "-display-name", "updated display", "-description", "updated description", "-format=json", } @@ -195,22 +237,23 @@ cmd := New(ui) code := cmd.Run(args) + output := ui.OutputWriter.String() + require.Equal(t, code, 0) require.Empty(t, ui.ErrorWriter.String()) - method, _, err := client.ACL().AuthMethodRead( - name, - &api.QueryOptions{Token: "root"}, - ) - require.NoError(t, err) - require.NotNil(t, method) - require.Equal(t, "updated description", method.Description) - - output := ui.OutputWriter.String() - var jsonOutput json.RawMessage - err = json.Unmarshal([]byte(output), &jsonOutput) - assert.NoError(t, err) + require.NoError(t, json.Unmarshal([]byte(output), &jsonOutput)) + + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "updated display", + Description: "updated description", + Config: map[string]interface{}{}, + } + require.Equal(t, expect, got) }) } @@ -220,7 +263,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -250,11 +293,12 @@ }) t.Run("update nonexistent method", func(t *testing.T) { + name := getTestName(t) args := []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-no-merge", - "-name=test", + "-name", name, } ui := cli.NewMockUi() @@ -292,6 +336,7 @@ "-token=root", "-no-merge", "-name=" + name, + "-display-name", "updated display", "-description", "updated description", } @@ -302,13 +347,14 @@ require.Equal(t, code, 0, "err: %s", ui.ErrorWriter.String()) require.Empty(t, ui.ErrorWriter.String()) - method, _, err := client.ACL().AuthMethodRead( - name, - &api.QueryOptions{Token: "root"}, - ) - require.NoError(t, err) - require.NotNil(t, method) - require.Equal(t, "updated description", method.Description) + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "testing", + DisplayName: "updated display", + Description: "updated description", + } + require.Equal(t, expect, got) }) } @@ -318,7 +364,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -366,6 +412,7 @@ "-http-addr=" + a.HTTPAddr(), "-token=root", "-name=" + name, + "-display-name", "updated display", "-description", "updated description", "-kubernetes-host", "https://foo-new.internal:8443", "-kubernetes-ca-cert", ca2.RootCert, @@ -379,15 +426,22 @@ require.Equal(t, code, 0) require.Empty(t, ui.ErrorWriter.String()) - method, _, err := client.ACL().AuthMethodRead( - name, - &api.QueryOptions{Token: "root"}, - ) - require.NoError(t, err) - require.NotNil(t, method) - require.Equal(t, "updated description", method.Description) + got := getTestMethod(t, client, name) + expect := &api.ACLAuthMethod{ + Name: name, + Type: "kubernetes", + DisplayName: "updated display", + Description: "updated description", + Config: map[string]interface{}{ + "Host": "https://foo-new.internal:8443", + "CACert": ca2.RootCert, + "ServiceAccountJWT": acl.TestKubernetesJWT_B, + }, + } + require.Equal(t, expect, got) - config, err := api.ParseKubernetesAuthMethodConfig(method.Config) + // also just double check our convenience parsing + config, err := api.ParseKubernetesAuthMethodConfig(got.Config) require.NoError(t, err) require.Equal(t, "https://foo-new.internal:8443", config.Host) require.Equal(t, ca2.RootCert, config.CACert) @@ -545,7 +599,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -726,3 +780,165 @@ require.Equal(t, acl.TestKubernetesJWT_B, config.ServiceAccountJWT) }) } + +func TestAuthMethodUpdateCommand_config(t *testing.T) { + t.Parallel() + testDir := testutil.TempDir(t, "auth-method") + defer os.RemoveAll(testDir) + + a := agent.NewTestAgent(t, ` + primary_datacenter = "dc1" + acl { + enabled = true + tokens { + master = "root" + } + }`) + + defer a.Shutdown() + testrpc.WaitForLeader(t, a.RPC, "dc1") + + client := a.Client() + + createAuthMethod := func(t *testing.T) string { + id, err := uuid.GenerateUUID() + require.NoError(t, err) + + methodName := "test" + id + + _, _, err = client.ACL().AuthMethodCreate( + &api.ACLAuthMethod{ + Name: methodName, + Type: "testing", + Description: "test", + Config: map[string]interface{}{ + "SessionID": "big", + }, + }, + &api.WriteOptions{Token: "root"}, + ) + require.NoError(t, err) + + return methodName + } + + readUpdate := func(t *testing.T, methodName string) { + + method, _, err := client.ACL().AuthMethodRead( + methodName, + &api.QueryOptions{Token: "root"}, + ) + require.NoError(t, err) + require.NotNil(t, method) + require.Equal(t, "update", method.Config["SessionID"]) + } + + t.Run("config file", func(t *testing.T) { + methodName := createAuthMethod(t) + configFile := filepath.Join(testDir, "config.json") + jsonConfig := `{"SessionID":"update"}` + require.NoError(t, ioutil.WriteFile(configFile, []byte(jsonConfig), 0644)) + + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-name=" + methodName, + "-no-merge=true", + "-config=@" + configFile, + } + ui := cli.NewMockUi() + cmd := New(ui) + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + readUpdate(t, methodName) + }) + + t.Run("config stdin", func(t *testing.T) { + methodName := createAuthMethod(t) + ui := cli.NewMockUi() + cmd := New(ui) + stdinR, stdinW := io.Pipe() + cmd.testStdin = stdinR + + go func() { + stdinW.Write([]byte(`{"SessionID":"update"}`)) + stdinW.Close() + }() + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-name=" + methodName, + "-no-merge=true", + "-config=-", + } + + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + readUpdate(t, methodName) + }) + + t.Run("config string", func(t *testing.T) { + methodName := createAuthMethod(t) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-name=" + methodName, + "-no-merge=true", + "-config=" + `{"SessionID":"update"}`, + } + ui := cli.NewMockUi() + cmd := New(ui) + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + readUpdate(t, methodName) + }) + t.Run("config with no merge", func(t *testing.T) { + methodName := createAuthMethod(t) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-name=" + methodName, + "-no-merge=false", + "-config=" + `{"SessionID":"update"}`, + } + ui := cli.NewMockUi() + cmd := New(ui) + code := cmd.Run(args) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + readUpdate(t, methodName) + }) +} + +func getTestMethod(t *testing.T, client *api.Client, methodName string) *api.ACLAuthMethod { + t.Helper() + + method, _, err := client.ACL().AuthMethodRead( + methodName, + &api.QueryOptions{Token: "root"}, + ) + require.NoError(t, err) + require.NotNil(t, method) + + // zero these out since we don't really care + method.CreateIndex = 0 + method.ModifyIndex = 0 + + if method.Namespace == "default" { + method.Namespace = "" + } + + return method +} + +func getTestName(t *testing.T) string { + t.Helper() + + id, err := uuid.GenerateUUID() + require.NoError(t, err) + return "test-" + id + +} diff -Nru consul-1.7.4+dfsg1/command/acl/bindingrule/create/bindingrule_create_test.go consul-1.8.7+dfsg1/command/acl/bindingrule/create/bindingrule_create_test.go --- consul-1.7.4+dfsg1/command/acl/bindingrule/create/bindingrule_create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/bindingrule/create/bindingrule_create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -182,7 +182,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/bindingrule/delete/bindingrule_delete_test.go consul-1.8.7+dfsg1/command/acl/bindingrule/delete/bindingrule_delete_test.go --- consul-1.7.4+dfsg1/command/acl/bindingrule/delete/bindingrule_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/bindingrule/delete/bindingrule_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/bindingrule/list/bindingrule_list_test.go consul-1.8.7+dfsg1/command/acl/bindingrule/list/bindingrule_list_test.go --- consul-1.7.4+dfsg1/command/acl/bindingrule/list/bindingrule_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/bindingrule/list/bindingrule_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/bindingrule/read/bindingrule_read_test.go consul-1.8.7+dfsg1/command/acl/bindingrule/read/bindingrule_read_test.go --- consul-1.7.4+dfsg1/command/acl/bindingrule/read/bindingrule_read_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/bindingrule/read/bindingrule_read_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/bindingrule/update/bindingrule_update_test.go consul-1.8.7+dfsg1/command/acl/bindingrule/update/bindingrule_update_test.go --- consul-1.7.4+dfsg1/command/acl/bindingrule/update/bindingrule_update_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/bindingrule/update/bindingrule_update_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -473,7 +473,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/bootstrap/bootstrap_test.go consul-1.8.7+dfsg1/command/acl/bootstrap/bootstrap_test.go --- consul-1.7.4+dfsg1/command/acl/bootstrap/bootstrap_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/bootstrap/bootstrap_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -61,7 +61,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/policy/create/policy_create_test.go consul-1.8.7+dfsg1/command/acl/policy/create/policy_create_test.go --- consul-1.7.4+dfsg1/command/acl/policy/create/policy_create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/policy/create/policy_create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -68,7 +68,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/policy/delete/policy_delete_test.go consul-1.8.7+dfsg1/command/acl/policy/delete/policy_delete_test.go --- consul-1.7.4+dfsg1/command/acl/policy/delete/policy_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/policy/delete/policy_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/policy/list/policy_list_test.go consul-1.8.7+dfsg1/command/acl/policy/list/policy_list_test.go --- consul-1.7.4+dfsg1/command/acl/policy/list/policy_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/policy/list/policy_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -84,7 +84,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/policy/read/policy_read_test.go consul-1.8.7+dfsg1/command/acl/policy/read/policy_read_test.go --- consul-1.7.4+dfsg1/command/acl/policy/read/policy_read_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/policy/read/policy_read_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -40,7 +40,7 @@ }`) defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") + testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) ui := cli.NewMockUi() cmd := New(ui) @@ -76,7 +76,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -86,7 +86,7 @@ }`) defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") + testrpc.WaitForTestAgent(t, a.RPC, "dc1", testrpc.WithToken("root")) ui := cli.NewMockUi() cmd := New(ui) diff -Nru consul-1.7.4+dfsg1/command/acl/policy/update/policy_update_test.go consul-1.8.7+dfsg1/command/acl/policy/update/policy_update_test.go --- consul-1.7.4+dfsg1/command/acl/policy/update/policy_update_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/policy/update/policy_update_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -78,7 +78,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/role/create/role_create.go consul-1.8.7+dfsg1/command/acl/role/create/role_create.go --- consul-1.7.4+dfsg1/command/acl/role/create/role_create.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/create/role_create.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,6 +29,7 @@ policyIDs []string policyNames []string serviceIdents []string + nodeIdents []string showMeta bool format string @@ -47,6 +48,9 @@ c.flags.Var((*flags.AppendSliceValue)(&c.serviceIdents), "service-identity", "Name of a "+ "service identity to use for this role. May be specified multiple times. Format is "+ "the SERVICENAME or SERVICENAME:DATACENTER1,DATACENTER2,...") + c.flags.Var((*flags.AppendSliceValue)(&c.nodeIdents), "node-identity", "Name of a "+ + "node identity to use for this role. May be specified multiple times. Format is "+ + "NODENAME:DATACENTER") c.flags.StringVar( &c.format, "format", @@ -71,8 +75,8 @@ return 1 } - if len(c.policyNames) == 0 && len(c.policyIDs) == 0 && len(c.serviceIdents) == 0 { - c.UI.Error(fmt.Sprintf("Cannot create a role without specifying -policy-name, -policy-id, or -service-identity at least once")) + if len(c.policyNames) == 0 && len(c.policyIDs) == 0 && len(c.serviceIdents) == 0 && len(c.nodeIdents) == 0 { + c.UI.Error(fmt.Sprintf("Cannot create a role without specifying -policy-name, -policy-id, -service-identity, or -node-identity at least once")) return 1 } @@ -109,6 +113,13 @@ } newRole.ServiceIdentities = parsedServiceIdents + parsedNodeIdents, err := acl.ExtractNodeIdentities(c.nodeIdents) + if err != nil { + c.UI.Error(err.Error()) + return 1 + } + newRole.NodeIdentities = parsedNodeIdents + r, _, err := client.ACL().RoleCreate(newRole, nil) if err != nil { c.UI.Error(fmt.Sprintf("Failed to create new role: %v", err)) diff -Nru consul-1.7.4+dfsg1/command/acl/role/create/role_create_test.go consul-1.8.7+dfsg1/command/acl/role/create/role_create_test.go --- consul-1.7.4+dfsg1/command/acl/role/create/role_create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/create/role_create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -41,8 +41,18 @@ defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") - ui := cli.NewMockUi() - cmd := New(ui) + run := func(t *testing.T, args []string) *api.ACLRole { + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(append(args, "-format=json", "-http-addr="+a.HTTPAddr())) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + + var role api.ACLRole + require.NoError(t, json.Unmarshal(ui.OutputWriter.Bytes(), &role)) + return &role + } // Create a policy client := a.Client() @@ -54,64 +64,55 @@ require.NoError(t, err) // create with policy by name - { - args := []string{ - "-http-addr=" + a.HTTPAddr(), + t.Run("policy-name", func(t *testing.T) { + _ = run(t, []string{ "-token=root", "-name=role-with-policy-by-name", "-description=test-role", "-policy-name=" + policy.Name, - } - - code := cmd.Run(args) - require.Equal(t, code, 0) - require.Empty(t, ui.ErrorWriter.String()) - } + }) + }) // create with policy by id - { - args := []string{ - "-http-addr=" + a.HTTPAddr(), + t.Run("policy-id", func(t *testing.T) { + _ = run(t, []string{ "-token=root", "-name=role-with-policy-by-id", "-description=test-role", "-policy-id=" + policy.ID, - } - - code := cmd.Run(args) - require.Equal(t, code, 0) - require.Empty(t, ui.ErrorWriter.String()) - } + }) + }) // create with service identity - { - args := []string{ - "-http-addr=" + a.HTTPAddr(), + t.Run("service-identity", func(t *testing.T) { + _ = run(t, []string{ "-token=root", "-name=role-with-service-identity", "-description=test-role", "-service-identity=web", - } - - code := cmd.Run(args) - require.Equal(t, code, 0) - require.Empty(t, ui.ErrorWriter.String()) - } + }) + }) // create with service identity scoped to 2 DCs - { - args := []string{ - "-http-addr=" + a.HTTPAddr(), + t.Run("dc-scoped-service-identity", func(t *testing.T) { + _ = run(t, []string{ "-token=root", "-name=role-with-service-identity-in-2-dcs", "-description=test-role", "-service-identity=db:abc,xyz", - } + }) + }) - code := cmd.Run(args) - require.Equal(t, code, 0) - require.Empty(t, ui.ErrorWriter.String()) - } + t.Run("node-identity", func(t *testing.T) { + role := run(t, []string{ + "-token=root", + "-name=role-with-node-identity", + "-description=test-role", + "-node-identity=foo:bar", + }) + + require.Len(t, role.NodeIdentities, 1) + }) } func TestRoleCreateCommand_JSON(t *testing.T) { @@ -120,7 +121,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/role/delete/role_delete_test.go consul-1.8.7+dfsg1/command/acl/role/delete/role_delete_test.go --- consul-1.7.4+dfsg1/command/acl/role/delete/role_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/delete/role_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/role/formatter.go consul-1.8.7+dfsg1/command/acl/role/formatter.go --- consul-1.7.4+dfsg1/command/acl/role/formatter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/formatter.go 2020-12-10 21:46:52.000000000 +0000 @@ -77,6 +77,12 @@ } } } + if len(role.NodeIdentities) > 0 { + buffer.WriteString(fmt.Sprintln("Node Identities:")) + for _, nodeid := range role.NodeIdentities { + buffer.WriteString(fmt.Sprintf(" %s (Datacenter: %s)\n", nodeid.NodeName, nodeid.Datacenter)) + } + } return buffer.String(), nil } @@ -122,6 +128,13 @@ } } + if len(role.NodeIdentities) > 0 { + buffer.WriteString(fmt.Sprintln(" Node Identities:")) + for _, nodeid := range role.NodeIdentities { + buffer.WriteString(fmt.Sprintf(" %s (Datacenter: %s)\n", nodeid.NodeName, nodeid.Datacenter)) + } + } + return buffer.String() } diff -Nru consul-1.7.4+dfsg1/command/acl/role/formatter_test.go consul-1.8.7+dfsg1/command/acl/role/formatter_test.go --- consul-1.7.4+dfsg1/command/acl/role/formatter_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/formatter_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,195 @@ +package role + +import ( + "flag" + "fmt" + "io/ioutil" + "path" + "path/filepath" + "testing" + + "github.com/hashicorp/consul/api" + "github.com/stretchr/testify/require" +) + +// update allows golden files to be updated based on the current output. +var update = flag.Bool("update", false, "update golden files") + +// golden reads and optionally writes the expected data to the golden file, +// returning the contents as a string. +func golden(t *testing.T, name, got string) string { + t.Helper() + + golden := filepath.Join("testdata", name+".golden") + if *update && got != "" { + err := ioutil.WriteFile(golden, []byte(got), 0644) + require.NoError(t, err) + } + + expected, err := ioutil.ReadFile(golden) + require.NoError(t, err) + + return string(expected) +} + +func TestFormatRole(t *testing.T) { + type testCase struct { + role api.ACLRole + overrideGoldenName string + } + + cases := map[string]testCase{ + "basic": { + role: api.ACLRole{ + ID: "bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852", + Name: "basic", + Description: "test role", + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 42, + ModifyIndex: 100, + }, + }, + "complex": { + role: api.ACLRole{ + ID: "c29c4ee4-bca6-474e-be37-7d9606f9582a", + Name: "complex", + Namespace: "foo", + Description: "test role complex", + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 5, + ModifyIndex: 10, + Policies: []*api.ACLLink{ + &api.ACLLink{ + ID: "beb04680-815b-4d7c-9e33-3d707c24672c", + Name: "hobbiton", + }, + &api.ACLLink{ + ID: "18788457-584c-4812-80d3-23d403148a90", + Name: "bywater", + }, + }, + ServiceIdentities: []*api.ACLServiceIdentity{ + &api.ACLServiceIdentity{ + ServiceName: "gardener", + Datacenters: []string{"middleearth-northwest"}, + }, + }, + NodeIdentities: []*api.ACLNodeIdentity{ + &api.ACLNodeIdentity{ + NodeName: "bagend", + Datacenter: "middleearth-northwest", + }, + }, + }, + }, + } + + formatters := map[string]Formatter{ + "pretty": newPrettyFormatter(false), + "pretty-meta": newPrettyFormatter(true), + // the JSON formatter ignores the showMeta + "json": newJSONFormatter(false), + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + for fmtName, formatter := range formatters { + t.Run(fmtName, func(t *testing.T) { + actual, err := formatter.FormatRole(&tcase.role) + require.NoError(t, err) + + gName := fmt.Sprintf("%s.%s", name, fmtName) + if tcase.overrideGoldenName != "" { + gName = tcase.overrideGoldenName + } + + expected := golden(t, path.Join("FormatRole", gName), actual) + require.Equal(t, expected, actual) + }) + } + }) + } +} + +func TestFormatTokenList(t *testing.T) { + type testCase struct { + roles []*api.ACLRole + overrideGoldenName string + } + + cases := map[string]testCase{ + "basic": { + roles: []*api.ACLRole{ + &api.ACLRole{ + ID: "bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852", + Name: "basic", + Description: "test role", + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 42, + ModifyIndex: 100, + }, + }, + }, + "complex": { + roles: []*api.ACLRole{ + &api.ACLRole{ + ID: "c29c4ee4-bca6-474e-be37-7d9606f9582a", + Name: "complex", + Namespace: "foo", + Description: "test role complex", + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 5, + ModifyIndex: 10, + Policies: []*api.ACLLink{ + &api.ACLLink{ + ID: "beb04680-815b-4d7c-9e33-3d707c24672c", + Name: "hobbiton", + }, + &api.ACLLink{ + ID: "18788457-584c-4812-80d3-23d403148a90", + Name: "bywater", + }, + }, + ServiceIdentities: []*api.ACLServiceIdentity{ + &api.ACLServiceIdentity{ + ServiceName: "gardener", + Datacenters: []string{"middleearth-northwest"}, + }, + }, + NodeIdentities: []*api.ACLNodeIdentity{ + &api.ACLNodeIdentity{ + NodeName: "bagend", + Datacenter: "middleearth-northwest", + }, + }, + }, + }, + }, + } + + formatters := map[string]Formatter{ + "pretty": newPrettyFormatter(false), + "pretty-meta": newPrettyFormatter(true), + // the JSON formatter ignores the showMeta + "json": newJSONFormatter(false), + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + for fmtName, formatter := range formatters { + t.Run(fmtName, func(t *testing.T) { + actual, err := formatter.FormatRoleList(tcase.roles) + require.NoError(t, err) + + gName := fmt.Sprintf("%s.%s", name, fmtName) + if tcase.overrideGoldenName != "" { + gName = tcase.overrideGoldenName + } + + expected := golden(t, path.Join("FormatRoleList", gName), actual) + require.Equal(t, expected, actual) + }) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/command/acl/role/list/role_list_test.go consul-1.8.7+dfsg1/command/acl/role/list/role_list_test.go --- consul-1.7.4+dfsg1/command/acl/role/list/role_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/list/role_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -88,7 +88,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/role/read/role_read_test.go consul-1.8.7+dfsg1/command/acl/role/read/role_read_test.go --- consul-1.7.4+dfsg1/command/acl/role/read/role_read_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/read/role_read_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -198,7 +198,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/basic.json.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/basic.json.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/basic.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/basic.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +{ + "ID": "bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852", + "Name": "basic", + "Description": "test role", + "Hash": "YWJjZGVmZ2g=", + "CreateIndex": 42, + "ModifyIndex": 100 +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +ID: bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852 +Name: basic +Description: test role diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/basic.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +ID: bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852 +Name: basic +Description: test role +Hash: 6162636465666768 +Create Index: 42 +Modify Index: 100 diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/complex.json.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/complex.json.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/complex.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/complex.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,33 @@ +{ + "ID": "c29c4ee4-bca6-474e-be37-7d9606f9582a", + "Name": "complex", + "Description": "test role complex", + "Policies": [ + { + "ID": "beb04680-815b-4d7c-9e33-3d707c24672c", + "Name": "hobbiton" + }, + { + "ID": "18788457-584c-4812-80d3-23d403148a90", + "Name": "bywater" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "gardener", + "Datacenters": [ + "middleearth-northwest" + ] + } + ], + "NodeIdentities": [ + { + "NodeName": "bagend", + "Datacenter": "middleearth-northwest" + } + ], + "Hash": "YWJjZGVmZ2g=", + "CreateIndex": 5, + "ModifyIndex": 10, + "Namespace": "foo" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +ID: c29c4ee4-bca6-474e-be37-7d9606f9582a +Name: complex +Namespace: foo +Description: test role complex +Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater +Service Identities: + gardener (Datacenters: middleearth-northwest) +Node Identities: + bagend (Datacenter: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRole/complex.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +ID: c29c4ee4-bca6-474e-be37-7d9606f9582a +Name: complex +Namespace: foo +Description: test role complex +Hash: 6162636465666768 +Create Index: 5 +Modify Index: 10 +Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater +Service Identities: + gardener (Datacenters: middleearth-northwest) +Node Identities: + bagend (Datacenter: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/basic.json.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/basic.json.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/basic.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/basic.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +[ + { + "ID": "bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852", + "Name": "basic", + "Description": "test role", + "Hash": "YWJjZGVmZ2g=", + "CreateIndex": 42, + "ModifyIndex": 100 + } +] \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +basic: + ID: bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852 + Description: test role diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/basic.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +basic: + ID: bd6c9fb0-2d1a-4b96-acaf-669f5d7e7852 + Description: test role + Hash: 6162636465666768 + Create Index: 42 + Modify Index: 100 diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/complex.json.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/complex.json.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/complex.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/complex.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,35 @@ +[ + { + "ID": "c29c4ee4-bca6-474e-be37-7d9606f9582a", + "Name": "complex", + "Description": "test role complex", + "Policies": [ + { + "ID": "beb04680-815b-4d7c-9e33-3d707c24672c", + "Name": "hobbiton" + }, + { + "ID": "18788457-584c-4812-80d3-23d403148a90", + "Name": "bywater" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "gardener", + "Datacenters": [ + "middleearth-northwest" + ] + } + ], + "NodeIdentities": [ + { + "NodeName": "bagend", + "Datacenter": "middleearth-northwest" + } + ], + "Hash": "YWJjZGVmZ2g=", + "CreateIndex": 5, + "ModifyIndex": 10, + "Namespace": "foo" + } +] \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +complex: + ID: c29c4ee4-bca6-474e-be37-7d9606f9582a + Namespace: foo + Description: test role complex + Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater + Service Identities: + gardener (Datacenters: middleearth-northwest) + Node Identities: + bagend (Datacenter: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/testdata/FormatRoleList/complex.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +complex: + ID: c29c4ee4-bca6-474e-be37-7d9606f9582a + Namespace: foo + Description: test role complex + Hash: 6162636465666768 + Create Index: 5 + Modify Index: 10 + Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater + Service Identities: + gardener (Datacenters: middleearth-northwest) + Node Identities: + bagend (Datacenter: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/role/update/role_update.go consul-1.8.7+dfsg1/command/acl/role/update/role_update.go --- consul-1.7.4+dfsg1/command/acl/role/update/role_update.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/update/role_update.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,6 +30,7 @@ policyIDs []string policyNames []string serviceIdents []string + nodeIdents []string noMerge bool showMeta bool @@ -52,6 +53,9 @@ c.flags.Var((*flags.AppendSliceValue)(&c.serviceIdents), "service-identity", "Name of a "+ "service identity to use for this role. May be specified multiple times. Format is "+ "the SERVICENAME or SERVICENAME:DATACENTER1,DATACENTER2,...") + c.flags.Var((*flags.AppendSliceValue)(&c.nodeIdents), "node-identity", "Name of a "+ + "node identity to use for this role. May be specified multiple times. Format is "+ + "NODENAME:DATACENTER") c.flags.BoolVar(&c.noMerge, "no-merge", false, "Do not merge the current role "+ "information with what is provided to the command. Instead overwrite all fields "+ "with the exception of the role ID which is immutable.") @@ -97,6 +101,12 @@ return 1 } + parsedNodeIdents, err := acl.ExtractNodeIdentities(c.nodeIdents) + if err != nil { + c.UI.Error(err.Error()) + return 1 + } + // Read the current role in both cases so we can fail better if not found. currentRole, _, err := client.ACL().RoleRead(roleID, nil) if err != nil { @@ -114,6 +124,7 @@ Name: c.name, Description: c.description, ServiceIdentities: parsedServiceIdents, + NodeIdentities: parsedNodeIdents, } for _, policyName := range c.policyNames { @@ -192,6 +203,20 @@ r.ServiceIdentities = append(r.ServiceIdentities, svcid) } } + + for _, nodeid := range parsedNodeIdents { + found := false + for _, link := range r.NodeIdentities { + if link.NodeName == nodeid.NodeName && link.Datacenter != nodeid.Datacenter { + found = true + break + } + } + + if !found { + r.NodeIdentities = append(r.NodeIdentities, nodeid) + } + } } r, _, err = client.ACL().RoleUpdate(r, nil) diff -Nru consul-1.7.4+dfsg1/command/acl/role/update/role_update_test.go consul-1.8.7+dfsg1/command/acl/role/update/role_update_test.go --- consul-1.7.4+dfsg1/command/acl/role/update/role_update_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/role/update/role_update_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -71,6 +71,19 @@ ) require.NoError(t, err) + run := func(t *testing.T, args []string) *api.ACLRole { + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(append(args, "-format=json", "-http-addr="+a.HTTPAddr())) + require.Equal(t, 0, code, "err: %s", ui.ErrorWriter.String()) + require.Empty(t, ui.ErrorWriter.String()) + + var role api.ACLRole + require.NoError(t, json.Unmarshal(ui.OutputWriter.Bytes(), &role)) + return &role + } + t.Run("update a role that does not exist", func(t *testing.T) { fakeID, err := uuid.GenerateUUID() require.NoError(t, err) @@ -91,19 +104,12 @@ }) t.Run("update with policy by name", func(t *testing.T) { - ui := cli.NewMockUi() - cmd := New(ui) - args := []string{ - "-http-addr=" + a.HTTPAddr(), + _ = run(t, []string{ "-id=" + role.ID, "-token=root", "-policy-name=" + policy1.Name, "-description=test role edited", - } - - code := cmd.Run(args) - require.Equal(t, code, 0, "err: %s", ui.ErrorWriter.String()) - require.Empty(t, ui.ErrorWriter.String()) + }) role, _, err := client.ACL().RoleRead( role.ID, @@ -119,18 +125,11 @@ t.Run("update with policy by id", func(t *testing.T) { // also update with no description shouldn't delete the current // description - ui := cli.NewMockUi() - cmd := New(ui) - args := []string{ - "-http-addr=" + a.HTTPAddr(), + _ = run(t, []string{ "-id=" + role.ID, "-token=root", "-policy-id=" + policy2.ID, - } - - code := cmd.Run(args) - require.Equal(t, code, 0, "err: %s", ui.ErrorWriter.String()) - require.Empty(t, ui.ErrorWriter.String()) + }) role, _, err := client.ACL().RoleRead( role.ID, @@ -144,18 +143,11 @@ }) t.Run("update with service identity", func(t *testing.T) { - ui := cli.NewMockUi() - cmd := New(ui) - args := []string{ - "-http-addr=" + a.HTTPAddr(), + _ = run(t, []string{ "-id=" + role.ID, "-token=root", "-service-identity=web", - } - - code := cmd.Run(args) - require.Equal(t, code, 0, "err: %s", ui.ErrorWriter.String()) - require.Empty(t, ui.ErrorWriter.String()) + }) role, _, err := client.ACL().RoleRead( role.ID, @@ -169,18 +161,29 @@ }) t.Run("update with service identity scoped to 2 DCs", func(t *testing.T) { - ui := cli.NewMockUi() - cmd := New(ui) - args := []string{ - "-http-addr=" + a.HTTPAddr(), + _ = run(t, []string{ "-id=" + role.ID, "-token=root", "-service-identity=db:abc,xyz", - } + }) - code := cmd.Run(args) - require.Equal(t, code, 0, "err: %s", ui.ErrorWriter.String()) - require.Empty(t, ui.ErrorWriter.String()) + role, _, err := client.ACL().RoleRead( + role.ID, + &api.QueryOptions{Token: "root"}, + ) + require.NoError(t, err) + require.NotNil(t, role) + require.Equal(t, "test role edited", role.Description) + require.Len(t, role.Policies, 2) + require.Len(t, role.ServiceIdentities, 3) + }) + + t.Run("update with node identity", func(t *testing.T) { + _ = run(t, []string{ + "-id=" + role.ID, + "-token=root", + "-node-identity=foo:bar", + }) role, _, err := client.ACL().RoleRead( role.ID, @@ -191,6 +194,7 @@ require.Equal(t, "test role edited", role.Description) require.Len(t, role.Policies, 2) require.Len(t, role.ServiceIdentities, 3) + require.Len(t, role.NodeIdentities, 1) }) } @@ -200,7 +204,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -282,7 +286,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/rules/translate_test.go consul-1.8.7+dfsg1/command/acl/rules/translate_test.go --- consul-1.7.4+dfsg1/command/acl/rules/translate_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/rules/translate_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/token/clone/token_clone_test.go consul-1.8.7+dfsg1/command/acl/token/clone/token_clone_test.go --- consul-1.7.4+dfsg1/command/acl/token/clone/token_clone_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/clone/token_clone_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -66,7 +66,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -173,7 +173,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/token/create/token_create.go consul-1.8.7+dfsg1/command/acl/token/create/token_create.go --- consul-1.7.4+dfsg1/command/acl/token/create/token_create.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/create/token_create.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,6 +33,7 @@ roleIDs []string roleNames []string serviceIdents []string + nodeIdents []string expirationTTL time.Duration local bool showMeta bool @@ -60,6 +61,9 @@ c.flags.Var((*flags.AppendSliceValue)(&c.serviceIdents), "service-identity", "Name of a "+ "service identity to use for this token. May be specified multiple times. Format is "+ "the SERVICENAME or SERVICENAME:DATACENTER1,DATACENTER2,...") + c.flags.Var((*flags.AppendSliceValue)(&c.nodeIdents), "node-identity", "Name of a "+ + "node identity to use for this token. May be specified multiple times. Format is "+ + "NODENAME:DATACENTER") c.flags.DurationVar(&c.expirationTTL, "expires-ttl", 0, "Duration of time this "+ "token should be valid for") c.flags.StringVar( @@ -82,8 +86,8 @@ if len(c.policyNames) == 0 && len(c.policyIDs) == 0 && len(c.roleNames) == 0 && len(c.roleIDs) == 0 && - len(c.serviceIdents) == 0 { - c.UI.Error(fmt.Sprintf("Cannot create a token without specifying -policy-name, -policy-id, -role-name, -role-id, or -service-identity at least once")) + len(c.serviceIdents) == 0 && len(c.nodeIdents) == 0 { + c.UI.Error(fmt.Sprintf("Cannot create a token without specifying -policy-name, -policy-id, -role-name, -role-id, -service-identity, or -node-identity at least once")) return 1 } @@ -110,6 +114,13 @@ } newToken.ServiceIdentities = parsedServiceIdents + parsedNodeIdents, err := acl.ExtractNodeIdentities(c.nodeIdents) + if err != nil { + c.UI.Error(err.Error()) + return 1 + } + newToken.NodeIdentities = parsedNodeIdents + for _, policyName := range c.policyNames { // We could resolve names to IDs here but there isn't any reason why its would be better // than allowing the agent to do it. diff -Nru consul-1.7.4+dfsg1/command/acl/token/create/token_create_test.go consul-1.8.7+dfsg1/command/acl/token/create/token_create_test.go --- consul-1.7.4+dfsg1/command/acl/token/create/token_create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/create/token_create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,13 +24,13 @@ func TestTokenCreateCommand_Pretty(t *testing.T) { t.Parallel() - require := require.New(t) testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" + node_name = "test-node" acl { enabled = true tokens { @@ -41,9 +41,6 @@ defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") - ui := cli.NewMockUi() - cmd := New(ui) - // Create a policy client := a.Client() @@ -51,66 +48,75 @@ &api.ACLPolicy{Name: "test-policy"}, &api.WriteOptions{Token: "root"}, ) - require.NoError(err) + require.NoError(t, err) + + run := func(t *testing.T, args []string) *api.ACLToken { + ui := cli.NewMockUi() + cmd := New(ui) + + code := cmd.Run(append(args, "-format=json")) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + + var token api.ACLToken + require.NoError(t, json.Unmarshal(ui.OutputWriter.Bytes(), &token)) + return &token + } // create with policy by name - { - args := []string{ + t.Run("policy-name", func(t *testing.T) { + _ = run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-policy-name=" + policy.Name, "-description=test token", - } - - code := cmd.Run(args) - require.Equal(code, 0) - require.Empty(ui.ErrorWriter.String()) - } + }) + }) // create with policy by id - { - args := []string{ + t.Run("policy-id", func(t *testing.T) { + _ = run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-policy-id=" + policy.ID, "-description=test token", - } + }) + }) - code := cmd.Run(args) - require.Empty(ui.ErrorWriter.String()) - require.Equal(code, 0) - } + // create with a node identity + t.Run("node-identity", func(t *testing.T) { + token := run(t, []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-node-identity=" + a.Config.NodeName + ":" + a.Config.Datacenter, + }) + + conf := api.DefaultConfig() + conf.Address = a.HTTPAddr() + conf.Token = token.SecretID + client, err := api.NewClient(conf) + require.NoError(t, err) + + nodes, _, err := client.Catalog().Nodes(nil) + require.NoError(t, err) + require.Len(t, nodes, 1) + require.Equal(t, a.Config.NodeName, nodes[0].Node) + }) // create with accessor and secret - { - args := []string{ + t.Run("predefined-ids", func(t *testing.T) { + token := run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-token=root", "-policy-id=" + policy.ID, "-description=test token", "-accessor=3d852bb8-5153-4388-a3ca-8ca78661889f", "-secret=3a69a8d8-c4d4-485d-9b19-b5b61648ea0c", - } - - code := cmd.Run(args) - require.Empty(ui.ErrorWriter.String()) - require.Equal(code, 0) + }) - conf := api.DefaultConfig() - conf.Address = a.HTTPAddr() - conf.Token = "root" - - // going to use the API client to grab the token - we could potentially try to grab the values - // out of the command output but this seems easier. - client, err := api.NewClient(conf) - require.NoError(err) - require.NotNil(client) - - token, _, err := client.ACL().TokenRead("3d852bb8-5153-4388-a3ca-8ca78661889f", nil) - require.NoError(err) - require.Equal("3d852bb8-5153-4388-a3ca-8ca78661889f", token.AccessorID) - require.Equal("3a69a8d8-c4d4-485d-9b19-b5b61648ea0c", token.SecretID) - } + require.Equal(t, "3d852bb8-5153-4388-a3ca-8ca78661889f", token.AccessorID) + require.Equal(t, "3a69a8d8-c4d4-485d-9b19-b5b61648ea0c", token.SecretID) + }) } func TestTokenCreateCommand_JSON(t *testing.T) { @@ -120,7 +126,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/token/delete/token_delete_test.go consul-1.8.7+dfsg1/command/acl/token/delete/token_delete_test.go --- consul-1.7.4+dfsg1/command/acl/token/delete/token_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/delete/token_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/token/formatter.go consul-1.8.7+dfsg1/command/acl/token/formatter.go --- consul-1.7.4+dfsg1/command/acl/token/formatter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/formatter.go 2020-12-10 21:46:52.000000000 +0000 @@ -57,6 +57,9 @@ } buffer.WriteString(fmt.Sprintf("Description: %s\n", token.Description)) buffer.WriteString(fmt.Sprintf("Local: %t\n", token.Local)) + if token.AuthMethod != "" { + buffer.WriteString(fmt.Sprintf("Auth Method: %s\n", token.AuthMethod)) + } buffer.WriteString(fmt.Sprintf("Create Time: %v\n", token.CreateTime)) if token.ExpirationTime != nil && !token.ExpirationTime.IsZero() { buffer.WriteString(fmt.Sprintf("Expiration Time: %v\n", *token.ExpirationTime)) @@ -88,6 +91,12 @@ } } } + if len(token.NodeIdentities) > 0 { + buffer.WriteString(fmt.Sprintln("Node Identities:")) + for _, nodeid := range token.NodeIdentities { + buffer.WriteString(fmt.Sprintf(" %s (Datacenter: %s)\n", nodeid.NodeName, nodeid.Datacenter)) + } + } if token.Rules != "" { buffer.WriteString(fmt.Sprintln("Rules:")) buffer.WriteString(fmt.Sprintln(token.Rules)) @@ -121,6 +130,9 @@ } buffer.WriteString(fmt.Sprintf("Description: %s\n", token.Description)) buffer.WriteString(fmt.Sprintf("Local: %t\n", token.Local)) + if token.AuthMethod != "" { + buffer.WriteString(fmt.Sprintf("Auth Method: %s\n", token.AuthMethod)) + } buffer.WriteString(fmt.Sprintf("Create Time: %v\n", token.CreateTime)) if token.ExpirationTime != nil && !token.ExpirationTime.IsZero() { buffer.WriteString(fmt.Sprintf("Expiration Time: %v\n", *token.ExpirationTime)) @@ -147,6 +159,16 @@ buffer.WriteString(fmt.Sprintln("Service Identities:")) for _, svcid := range token.ServiceIdentities { if len(svcid.Datacenters) > 0 { + buffer.WriteString(fmt.Sprintf(" %s (Datacenters: %s)\n", svcid.ServiceName, strings.Join(svcid.Datacenters, ", "))) + } else { + buffer.WriteString(fmt.Sprintf(" %s (Datacenters: all)\n", svcid.ServiceName)) + } + } + } + if len(token.NodeIdentities) > 0 { + buffer.WriteString(fmt.Sprintln("Service Identities:")) + for _, svcid := range token.ServiceIdentities { + if len(svcid.Datacenters) > 0 { buffer.WriteString(fmt.Sprintf(" %s (Datacenters: %s)\n", svcid.ServiceName, strings.Join(svcid.Datacenters, ", "))) } else { buffer.WriteString(fmt.Sprintf(" %s (Datacenters: all)\n", svcid.ServiceName)) diff -Nru consul-1.7.4+dfsg1/command/acl/token/formatter_test.go consul-1.8.7+dfsg1/command/acl/token/formatter_test.go --- consul-1.7.4+dfsg1/command/acl/token/formatter_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/formatter_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,251 @@ +package token + +import ( + "flag" + "fmt" + "io/ioutil" + "path" + "path/filepath" + "testing" + "time" + + "github.com/hashicorp/consul/api" + "github.com/stretchr/testify/require" +) + +// update allows golden files to be updated based on the current output. +var update = flag.Bool("update", false, "update golden files") + +// golden reads and optionally writes the expected data to the golden file, +// returning the contents as a string. +func golden(t *testing.T, name, got string) string { + t.Helper() + + golden := filepath.Join("testdata", name+".golden") + if *update && got != "" { + err := ioutil.WriteFile(golden, []byte(got), 0644) + require.NoError(t, err) + } + + expected, err := ioutil.ReadFile(golden) + require.NoError(t, err) + + return string(expected) +} + +func TestFormatToken(t *testing.T) { + type testCase struct { + token api.ACLToken + overrideGoldenName string + } + + timeRef := func(in time.Time) *time.Time { + return &in + } + + cases := map[string]testCase{ + "basic": { + token: api.ACLToken{ + AccessorID: "fbd2447f-7479-4329-ad13-b021d74f86ba", + SecretID: "869c6e91-4de9-4dab-b56e-87548435f9c6", + Description: "test token", + Local: false, + CreateTime: time.Date(2020, 5, 22, 18, 52, 31, 0, time.UTC), + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 42, + ModifyIndex: 100, + }, + }, + "legacy": { + token: api.ACLToken{ + AccessorID: "8acc7486-ca54-4d3c-9aed-5cd85651b0ee", + SecretID: "legacy-secret", + Description: "legacy", + Rules: `operator = "read"`, + }, + }, + "complex": { + token: api.ACLToken{ + AccessorID: "fbd2447f-7479-4329-ad13-b021d74f86ba", + SecretID: "869c6e91-4de9-4dab-b56e-87548435f9c6", + Namespace: "foo", + Description: "test token", + Local: false, + AuthMethod: "bar", + CreateTime: time.Date(2020, 5, 22, 18, 52, 31, 0, time.UTC), + ExpirationTime: timeRef(time.Date(2020, 5, 22, 19, 52, 31, 0, time.UTC)), + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 5, + ModifyIndex: 10, + Policies: []*api.ACLLink{ + &api.ACLLink{ + ID: "beb04680-815b-4d7c-9e33-3d707c24672c", + Name: "hobbiton", + }, + &api.ACLLink{ + ID: "18788457-584c-4812-80d3-23d403148a90", + Name: "bywater", + }, + }, + Roles: []*api.ACLLink{ + &api.ACLLink{ + ID: "3b0a78fe-b9c3-40de-b8ea-7d4d6674b366", + Name: "shire", + }, + &api.ACLLink{ + ID: "6c9d1e1d-34bc-4d55-80f3-add0890ad791", + Name: "west-farthing", + }, + }, + ServiceIdentities: []*api.ACLServiceIdentity{ + &api.ACLServiceIdentity{ + ServiceName: "gardener", + Datacenters: []string{"middleearth-northwest"}, + }, + }, + NodeIdentities: []*api.ACLNodeIdentity{ + &api.ACLNodeIdentity{ + NodeName: "bagend", + Datacenter: "middleearth-northwest", + }, + }, + }, + }, + } + + formatters := map[string]Formatter{ + "pretty": newPrettyFormatter(false), + "pretty-meta": newPrettyFormatter(true), + // the JSON formatter ignores the showMeta + "json": newJSONFormatter(false), + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + for fmtName, formatter := range formatters { + t.Run(fmtName, func(t *testing.T) { + actual, err := formatter.FormatToken(&tcase.token) + require.NoError(t, err) + + gName := fmt.Sprintf("%s.%s", name, fmtName) + if tcase.overrideGoldenName != "" { + gName = tcase.overrideGoldenName + } + + expected := golden(t, path.Join("FormatToken", gName), actual) + require.Equal(t, expected, actual) + }) + } + }) + } +} + +func TestFormatTokenList(t *testing.T) { + type testCase struct { + tokens []*api.ACLTokenListEntry + overrideGoldenName string + } + + timeRef := func(in time.Time) *time.Time { + return &in + } + + cases := map[string]testCase{ + "basic": { + tokens: []*api.ACLTokenListEntry{ + &api.ACLTokenListEntry{ + AccessorID: "fbd2447f-7479-4329-ad13-b021d74f86ba", + Description: "test token", + Local: false, + CreateTime: time.Date(2020, 5, 22, 18, 52, 31, 0, time.UTC), + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 42, + ModifyIndex: 100, + }, + }, + }, + "legacy": { + tokens: []*api.ACLTokenListEntry{ + &api.ACLTokenListEntry{ + AccessorID: "8acc7486-ca54-4d3c-9aed-5cd85651b0ee", + Description: "legacy", + Legacy: true, + }, + }, + }, + "complex": { + tokens: []*api.ACLTokenListEntry{ + &api.ACLTokenListEntry{ + AccessorID: "fbd2447f-7479-4329-ad13-b021d74f86ba", + Namespace: "foo", + Description: "test token", + Local: false, + AuthMethod: "bar", + CreateTime: time.Date(2020, 5, 22, 18, 52, 31, 0, time.UTC), + ExpirationTime: timeRef(time.Date(2020, 5, 22, 19, 52, 31, 0, time.UTC)), + Hash: []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}, + CreateIndex: 5, + ModifyIndex: 10, + Policies: []*api.ACLLink{ + &api.ACLLink{ + ID: "beb04680-815b-4d7c-9e33-3d707c24672c", + Name: "hobbiton", + }, + &api.ACLLink{ + ID: "18788457-584c-4812-80d3-23d403148a90", + Name: "bywater", + }, + }, + Roles: []*api.ACLLink{ + &api.ACLLink{ + ID: "3b0a78fe-b9c3-40de-b8ea-7d4d6674b366", + Name: "shire", + }, + &api.ACLLink{ + ID: "6c9d1e1d-34bc-4d55-80f3-add0890ad791", + Name: "west-farthing", + }, + }, + ServiceIdentities: []*api.ACLServiceIdentity{ + &api.ACLServiceIdentity{ + ServiceName: "gardener", + Datacenters: []string{"middleearth-northwest"}, + }, + }, + NodeIdentities: []*api.ACLNodeIdentity{ + &api.ACLNodeIdentity{ + NodeName: "bagend", + Datacenter: "middleearth-northwest", + }, + }, + }, + }, + }, + } + + formatters := map[string]Formatter{ + "pretty": newPrettyFormatter(false), + "pretty-meta": newPrettyFormatter(true), + // the JSON formatter ignores the showMeta + "json": newJSONFormatter(false), + } + + for name, tcase := range cases { + t.Run(name, func(t *testing.T) { + for fmtName, formatter := range formatters { + t.Run(fmtName, func(t *testing.T) { + actual, err := formatter.FormatTokenList(tcase.tokens) + require.NoError(t, err) + + gName := fmt.Sprintf("%s.%s", name, fmtName) + if tcase.overrideGoldenName != "" { + gName = tcase.overrideGoldenName + } + + expected := golden(t, path.Join("FormatTokenList", gName), actual) + require.Equal(t, expected, actual) + }) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/command/acl/token/list/token_list_test.go consul-1.8.7+dfsg1/command/acl/token/list/token_list_test.go --- consul-1.7.4+dfsg1/command/acl/token/list/token_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/list/token_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -85,7 +85,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -126,7 +126,13 @@ assert.Equal(code, 0) assert.Empty(ui.ErrorWriter.String()) - var jsonOutput json.RawMessage + var jsonOutput []api.ACLTokenListEntry err := json.Unmarshal([]byte(ui.OutputWriter.String()), &jsonOutput) require.NoError(t, err, "token unmarshalling error") + + respIDs := make([]string, 0, len(jsonOutput)) + for _, obj := range jsonOutput { + respIDs = append(respIDs, obj.AccessorID) + } + require.Subset(t, respIDs, tokenIds) } diff -Nru consul-1.7.4+dfsg1/command/acl/token/read/token_read_test.go consul-1.8.7+dfsg1/command/acl/token/read/token_read_test.go --- consul-1.7.4+dfsg1/command/acl/token/read/token_read_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/read/token_read_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -78,7 +78,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/basic.json.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/basic.json.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/basic.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/basic.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +{ + "CreateIndex": 42, + "ModifyIndex": 100, + "AccessorID": "fbd2447f-7479-4329-ad13-b021d74f86ba", + "SecretID": "869c6e91-4de9-4dab-b56e-87548435f9c6", + "Description": "test token", + "Local": false, + "CreateTime": "2020-05-22T18:52:31Z", + "Hash": "YWJjZGVmZ2g=" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +SecretID: 869c6e91-4de9-4dab-b56e-87548435f9c6 +Description: test token +Local: false +Create Time: 2020-05-22 18:52:31 +0000 UTC diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/basic.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +SecretID: 869c6e91-4de9-4dab-b56e-87548435f9c6 +Description: test token +Local: false +Create Time: 2020-05-22 18:52:31 +0000 UTC +Hash: 6162636465666768 +Create Index: 42 +Modify Index: 100 diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/complex.json.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/complex.json.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/complex.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/complex.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +{ + "CreateIndex": 5, + "ModifyIndex": 10, + "AccessorID": "fbd2447f-7479-4329-ad13-b021d74f86ba", + "SecretID": "869c6e91-4de9-4dab-b56e-87548435f9c6", + "Description": "test token", + "Policies": [ + { + "ID": "beb04680-815b-4d7c-9e33-3d707c24672c", + "Name": "hobbiton" + }, + { + "ID": "18788457-584c-4812-80d3-23d403148a90", + "Name": "bywater" + } + ], + "Roles": [ + { + "ID": "3b0a78fe-b9c3-40de-b8ea-7d4d6674b366", + "Name": "shire" + }, + { + "ID": "6c9d1e1d-34bc-4d55-80f3-add0890ad791", + "Name": "west-farthing" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "gardener", + "Datacenters": [ + "middleearth-northwest" + ] + } + ], + "NodeIdentities": [ + { + "NodeName": "bagend", + "Datacenter": "middleearth-northwest" + } + ], + "Local": false, + "AuthMethod": "bar", + "ExpirationTime": "2020-05-22T19:52:31Z", + "CreateTime": "2020-05-22T18:52:31Z", + "Hash": "YWJjZGVmZ2g=", + "Namespace": "foo" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +SecretID: 869c6e91-4de9-4dab-b56e-87548435f9c6 +Namespace: foo +Description: test token +Local: false +Auth Method: bar +Create Time: 2020-05-22 18:52:31 +0000 UTC +Expiration Time: 2020-05-22 19:52:31 +0000 UTC +Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater +Roles: + 3b0a78fe-b9c3-40de-b8ea-7d4d6674b366 - shire + 6c9d1e1d-34bc-4d55-80f3-add0890ad791 - west-farthing +Service Identities: + gardener (Datacenters: middleearth-northwest) +Node Identities: + bagend (Datacenter: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/complex.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +SecretID: 869c6e91-4de9-4dab-b56e-87548435f9c6 +Namespace: foo +Description: test token +Local: false +Auth Method: bar +Create Time: 2020-05-22 18:52:31 +0000 UTC +Expiration Time: 2020-05-22 19:52:31 +0000 UTC +Hash: 6162636465666768 +Create Index: 5 +Modify Index: 10 +Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater +Roles: + 3b0a78fe-b9c3-40de-b8ea-7d4d6674b366 - shire + 6c9d1e1d-34bc-4d55-80f3-add0890ad791 - west-farthing +Service Identities: + gardener (Datacenters: middleearth-northwest) +Node Identities: + bagend (Datacenter: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/legacy.json.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/legacy.json.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/legacy.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/legacy.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +{ + "CreateIndex": 0, + "ModifyIndex": 0, + "AccessorID": "8acc7486-ca54-4d3c-9aed-5cd85651b0ee", + "SecretID": "legacy-secret", + "Description": "legacy", + "Local": false, + "CreateTime": "0001-01-01T00:00:00Z", + "Rules": "operator = \"read\"" +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +AccessorID: 8acc7486-ca54-4d3c-9aed-5cd85651b0ee +SecretID: legacy-secret +Description: legacy +Local: false +Create Time: 0001-01-01 00:00:00 +0000 UTC +Rules: +operator = "read" diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatToken/legacy.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +AccessorID: 8acc7486-ca54-4d3c-9aed-5cd85651b0ee +SecretID: legacy-secret +Description: legacy +Local: false +Create Time: 0001-01-01 00:00:00 +0000 UTC +Hash: +Create Index: 0 +Modify Index: 0 +Rules: +operator = "read" diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/basic.json.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/basic.json.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/basic.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/basic.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +[ + { + "CreateIndex": 42, + "ModifyIndex": 100, + "AccessorID": "fbd2447f-7479-4329-ad13-b021d74f86ba", + "Description": "test token", + "Local": false, + "CreateTime": "2020-05-22T18:52:31Z", + "Hash": "YWJjZGVmZ2g=", + "Legacy": false + } +] \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +Description: test token +Local: false +Create Time: 2020-05-22 18:52:31 +0000 UTC +Legacy: false diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/basic.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +Description: test token +Local: false +Create Time: 2020-05-22 18:52:31 +0000 UTC +Legacy: false +Hash: 6162636465666768 +Create Index: 42 +Modify Index: 100 diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/complex.json.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/complex.json.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/complex.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/complex.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,49 @@ +[ + { + "CreateIndex": 5, + "ModifyIndex": 10, + "AccessorID": "fbd2447f-7479-4329-ad13-b021d74f86ba", + "Description": "test token", + "Policies": [ + { + "ID": "beb04680-815b-4d7c-9e33-3d707c24672c", + "Name": "hobbiton" + }, + { + "ID": "18788457-584c-4812-80d3-23d403148a90", + "Name": "bywater" + } + ], + "Roles": [ + { + "ID": "3b0a78fe-b9c3-40de-b8ea-7d4d6674b366", + "Name": "shire" + }, + { + "ID": "6c9d1e1d-34bc-4d55-80f3-add0890ad791", + "Name": "west-farthing" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "gardener", + "Datacenters": [ + "middleearth-northwest" + ] + } + ], + "NodeIdentities": [ + { + "NodeName": "bagend", + "Datacenter": "middleearth-northwest" + } + ], + "Local": false, + "AuthMethod": "bar", + "ExpirationTime": "2020-05-22T19:52:31Z", + "CreateTime": "2020-05-22T18:52:31Z", + "Hash": "YWJjZGVmZ2g=", + "Legacy": false, + "Namespace": "foo" + } +] \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +Namespace: foo +Description: test token +Local: false +Auth Method: bar +Create Time: 2020-05-22 18:52:31 +0000 UTC +Expiration Time: 2020-05-22 19:52:31 +0000 UTC +Legacy: false +Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater +Roles: + 3b0a78fe-b9c3-40de-b8ea-7d4d6674b366 - shire + 6c9d1e1d-34bc-4d55-80f3-add0890ad791 - west-farthing +Service Identities: + gardener (Datacenters: middleearth-northwest) +Service Identities: + gardener (Datacenters: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/complex.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +AccessorID: fbd2447f-7479-4329-ad13-b021d74f86ba +Namespace: foo +Description: test token +Local: false +Auth Method: bar +Create Time: 2020-05-22 18:52:31 +0000 UTC +Expiration Time: 2020-05-22 19:52:31 +0000 UTC +Legacy: false +Hash: 6162636465666768 +Create Index: 5 +Modify Index: 10 +Policies: + beb04680-815b-4d7c-9e33-3d707c24672c - hobbiton + 18788457-584c-4812-80d3-23d403148a90 - bywater +Roles: + 3b0a78fe-b9c3-40de-b8ea-7d4d6674b366 - shire + 6c9d1e1d-34bc-4d55-80f3-add0890ad791 - west-farthing +Service Identities: + gardener (Datacenters: middleearth-northwest) +Service Identities: + gardener (Datacenters: middleearth-northwest) diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.json.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.json.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +[ + { + "CreateIndex": 0, + "ModifyIndex": 0, + "AccessorID": "8acc7486-ca54-4d3c-9aed-5cd85651b0ee", + "Description": "legacy", + "Local": false, + "CreateTime": "0001-01-01T00:00:00Z", + "Hash": null, + "Legacy": true + } +] \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +AccessorID: 8acc7486-ca54-4d3c-9aed-5cd85651b0ee +Description: legacy +Local: false +Create Time: 0001-01-01 00:00:00 +0000 UTC +Legacy: true diff -Nru consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty-meta.golden consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty-meta.golden --- consul-1.7.4+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty-meta.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/testdata/FormatTokenList/legacy.pretty-meta.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +AccessorID: 8acc7486-ca54-4d3c-9aed-5cd85651b0ee +Description: legacy +Local: false +Create Time: 0001-01-01 00:00:00 +0000 UTC +Legacy: true +Hash: +Create Index: 0 +Modify Index: 0 diff -Nru consul-1.7.4+dfsg1/command/acl/token/update/token_update.go consul-1.8.7+dfsg1/command/acl/token/update/token_update.go --- consul-1.7.4+dfsg1/command/acl/token/update/token_update.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/update/token_update.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,10 +30,12 @@ roleIDs []string roleNames []string serviceIdents []string + nodeIdents []string description string mergePolicies bool mergeRoles bool mergeServiceIdents bool + mergeNodeIdents bool showMeta bool upgradeLegacy bool format string @@ -49,6 +51,8 @@ "with the existing roles") c.flags.BoolVar(&c.mergeServiceIdents, "merge-service-identities", false, "Merge the new service identities "+ "with the existing service identities") + c.flags.BoolVar(&c.mergeNodeIdents, "merge-node-identities", false, "Merge the new node identities "+ + "with the existing node identities") c.flags.StringVar(&c.tokenID, "id", "", "The Accessor ID of the token to update. "+ "It may be specified as a unique ID prefix but will error if the prefix "+ "matches multiple token Accessor IDs") @@ -64,6 +68,9 @@ c.flags.Var((*flags.AppendSliceValue)(&c.serviceIdents), "service-identity", "Name of a "+ "service identity to use for this token. May be specified multiple times. Format is "+ "the SERVICENAME or SERVICENAME:DATACENTER1,DATACENTER2,...") + c.flags.Var((*flags.AppendSliceValue)(&c.nodeIdents), "node-identity", "Name of a "+ + "node identity to use for this token. May be specified multiple times. Format is "+ + "NODENAME:DATACENTER") c.flags.BoolVar(&c.upgradeLegacy, "upgrade-legacy", false, "Add new polices "+ "to a legacy token replacing all existing rules. This will cause the legacy "+ "token to behave exactly like a new token but keep the same Secret.\n"+ @@ -139,6 +146,12 @@ return 1 } + parsedNodeIdents, err := acl.ExtractNodeIdentities(c.nodeIdents) + if err != nil { + c.UI.Error(err.Error()) + return 1 + } + if c.mergePolicies { for _, policyName := range c.policyNames { found := false @@ -269,6 +282,24 @@ t.ServiceIdentities = parsedServiceIdents } + if c.mergeNodeIdents { + for _, nodeid := range parsedNodeIdents { + found := false + for _, link := range t.NodeIdentities { + if link.NodeName == nodeid.NodeName && link.Datacenter == nodeid.Datacenter { + found = true + break + } + } + + if !found { + t.NodeIdentities = append(t.NodeIdentities, nodeid) + } + } + } else { + t.NodeIdentities = parsedNodeIdents + } + t, _, err = client.ACL().TokenUpdate(t, nil) if err != nil { c.UI.Error(fmt.Sprintf("Failed to update token %s: %v", tokenID, err)) diff -Nru consul-1.7.4+dfsg1/command/acl/token/update/token_update_test.go consul-1.8.7+dfsg1/command/acl/token/update/token_update_test.go --- consul-1.7.4+dfsg1/command/acl/token/update/token_update_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/acl/token/update/token_update_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,8 +6,6 @@ "strings" "testing" - "github.com/stretchr/testify/require" - "github.com/hashicorp/consul/agent" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/testutil" @@ -15,6 +13,7 @@ "github.com/hashicorp/consul/testrpc" "github.com/mitchellh/cli" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestTokenUpdateCommand_noTabs(t *testing.T) { @@ -27,14 +26,11 @@ func TestTokenUpdateCommand(t *testing.T) { t.Parallel() - assert := assert.New(t) - // Alias because we need to access require package in Retry below - req := require.New(t) testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -46,8 +42,6 @@ defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") - ui := cli.NewMockUi() - // Create a policy client := a.Client() @@ -55,16 +49,17 @@ &api.ACLPolicy{Name: "test-policy"}, &api.WriteOptions{Token: "root"}, ) - req.NoError(err) + require.NoError(t, err) // create a token token, _, err := client.ACL().TokenCreate( &api.ACLToken{Description: "test"}, &api.WriteOptions{Token: "root"}, ) - req.NoError(err) + require.NoError(t, err) // create a legacy token + // nolint: staticcheck // we have to use the deprecated API to create a legacy token legacyTokenSecretID, _, err := client.ACL().Create(&api.ACLEntry{ Name: "Legacy token", Type: "client", @@ -72,79 +67,100 @@ }, &api.WriteOptions{Token: "root"}, ) - req.NoError(err) + require.NoError(t, err) // We fetch the legacy token later to give server time to async background // upgrade it. - // update with policy by name - { + run := func(t *testing.T, args []string) *api.ACLToken { + ui := cli.NewMockUi() cmd := New(ui) - args := []string{ + + code := cmd.Run(append(args, "-format=json")) + require.Equal(t, 0, code) + require.Empty(t, ui.ErrorWriter.String()) + + var token api.ACLToken + require.NoError(t, json.Unmarshal(ui.OutputWriter.Bytes(), &token)) + return &token + } + + // update with node identity + t.Run("node-identity", func(t *testing.T) { + token := run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-id=" + token.AccessorID, "-token=root", - "-policy-name=" + policy.Name, + "-node-identity=foo:bar", + "-description=test token", + }) + + require.Len(t, token.NodeIdentities, 1) + require.Equal(t, "foo", token.NodeIdentities[0].NodeName) + require.Equal(t, "bar", token.NodeIdentities[0].Datacenter) + }) + + t.Run("node-identity-merge", func(t *testing.T) { + token := run(t, []string{ + "-http-addr=" + a.HTTPAddr(), + "-id=" + token.AccessorID, + "-token=root", + "-node-identity=bar:baz", "-description=test token", + "-merge-node-identities", + }) + + require.Len(t, token.NodeIdentities, 2) + expected := []*api.ACLNodeIdentity{ + &api.ACLNodeIdentity{ + NodeName: "foo", + Datacenter: "bar", + }, + &api.ACLNodeIdentity{ + NodeName: "bar", + Datacenter: "baz", + }, } + require.ElementsMatch(t, expected, token.NodeIdentities) + }) - code := cmd.Run(args) - assert.Equal(code, 0) - assert.Empty(ui.ErrorWriter.String()) - - token, _, err := client.ACL().TokenRead( - token.AccessorID, - &api.QueryOptions{Token: "root"}, - ) - assert.NoError(err) - assert.NotNil(token) - } + // update with policy by name + t.Run("policy-name", func(t *testing.T) { + token := run(t, []string{ + "-http-addr=" + a.HTTPAddr(), + "-id=" + token.AccessorID, + "-token=root", + "-policy-name=" + policy.Name, + "-description=test token", + }) + + require.Len(t, token.Policies, 1) + }) // update with policy by id - { - cmd := New(ui) - args := []string{ + t.Run("policy-id", func(t *testing.T) { + token := run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-id=" + token.AccessorID, "-token=root", "-policy-id=" + policy.ID, "-description=test token", - } + }) - code := cmd.Run(args) - assert.Equal(code, 0) - assert.Empty(ui.ErrorWriter.String()) - - token, _, err := client.ACL().TokenRead( - token.AccessorID, - &api.QueryOptions{Token: "root"}, - ) - assert.NoError(err) - assert.NotNil(token) - } + require.Len(t, token.Policies, 1) + }) // update with no description shouldn't delete the current description - { - cmd := New(ui) - args := []string{ + t.Run("merge-description", func(t *testing.T) { + token := run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-id=" + token.AccessorID, "-token=root", "-policy-name=" + policy.Name, - } + }) - code := cmd.Run(args) - assert.Equal(code, 0) - assert.Empty(ui.ErrorWriter.String()) - - token, _, err := client.ACL().TokenRead( - token.AccessorID, - &api.QueryOptions{Token: "root"}, - ) - assert.NoError(err) - assert.NotNil(token) - assert.Equal("test token", token.Description) - } + require.Equal(t, "test token", token.Description) + }) // Need legacy token now, hopefully server had time to generate an accessor ID // in the background but wait for it if not. @@ -153,39 +169,28 @@ // Fetch the legacy token via new API so we can use it's accessor ID legacyToken, _, err = client.ACL().TokenReadSelf( &api.QueryOptions{Token: legacyTokenSecretID}) - r.Check(err) + require.NoError(r, err) require.NotEmpty(r, legacyToken.AccessorID) }) // upgrade legacy token should replace rules and leave token in a "new" state! - { - cmd := New(ui) - args := []string{ + t.Run("legacy-upgrade", func(t *testing.T) { + token := run(t, []string{ "-http-addr=" + a.HTTPAddr(), "-id=" + legacyToken.AccessorID, "-token=root", "-policy-name=" + policy.Name, "-upgrade-legacy", - } + }) - code := cmd.Run(args) - assert.Equal(code, 0) - assert.Empty(ui.ErrorWriter.String()) - - gotToken, _, err := client.ACL().TokenRead( - legacyToken.AccessorID, - &api.QueryOptions{Token: "root"}, - ) - assert.NoError(err) - assert.NotNil(gotToken) // Description shouldn't change - assert.Equal("Legacy token", gotToken.Description) - assert.Len(gotToken.Policies, 1) + require.Equal(t, "Legacy token", token.Description) + require.Len(t, token.Policies, 1) // Rules should now be empty meaning this is no longer a legacy token - assert.Empty(gotToken.Rules) + require.Empty(t, token.Rules) // Secret should not have changes - assert.Equal(legacyToken.SecretID, gotToken.SecretID) - } + require.Equal(t, legacyToken.SecretID, token.SecretID) + }) } func TestTokenUpdateCommand_JSON(t *testing.T) { @@ -197,7 +202,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/agent/agent.go consul-1.8.7+dfsg1/command/agent/agent.go --- consul-1.7.4+dfsg1/command/agent/agent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/agent/agent.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,9 +1,9 @@ package agent import ( + "context" "flag" "fmt" - "io" "os" "os/signal" "path/filepath" @@ -19,9 +19,7 @@ "github.com/hashicorp/consul/service_os" "github.com/hashicorp/go-checkpoint" "github.com/hashicorp/go-hclog" - multierror "github.com/hashicorp/go-multierror" "github.com/mitchellh/cli" - "google.golang.org/grpc/grpclog" ) func New(ui cli.Ui, revision, version, versionPre, versionHuman string, shutdownCh <-chan struct{}) *cmd { @@ -58,16 +56,10 @@ versionPrerelease string versionHuman string shutdownCh <-chan struct{} - flagArgs config.Flags - logOutput io.Writer + flagArgs config.BuilderOpts logger hclog.InterceptLogger } -type GatedUi struct { - JSONoutput bool - ui cli.Ui -} - func (c *cmd) init() { c.flags = flag.NewFlagSet("", flag.ContinueOnError) config.AddFlags(c.flags, &c.flagArgs) @@ -82,25 +74,6 @@ return code } -// readConfig is responsible for setup of our configuration using -// the command line and any file configs -func (c *cmd) readConfig() *config.RuntimeConfig { - b, err := config.NewBuilder(c.flagArgs) - if err != nil { - c.UI.Error(err.Error()) - return nil - } - cfg, err := b.BuildAndValidate() - if err != nil { - c.UI.Error(err.Error()) - return nil - } - for _, w := range b.Warnings { - c.UI.Warn(w) - } - return &cfg -} - // checkpointResults is used to handler periodic results from our update checker func (c *cmd) checkpointResults(results *checkpoint.CheckResponse, err error) { if err != nil { @@ -176,65 +149,44 @@ } func (c *cmd) run(args []string) int { - // Parse our configs if err := c.flags.Parse(args); err != nil { if !strings.Contains(err.Error(), "help requested") { c.UI.Error(fmt.Sprintf("error parsing flags: %v", err)) } return 1 } - c.flagArgs.Args = c.flags.Args() - config := c.readConfig() - if config == nil { + if len(c.flags.Args()) > 0 { + c.UI.Error(fmt.Sprintf("Unexpected extra arguments: %v", c.flags.Args())) return 1 } - // Setup the log outputs - logConfig := &logging.Config{ - LogLevel: config.LogLevel, - LogJSON: config.LogJSON, - Name: logging.Agent, - EnableSyslog: config.EnableSyslog, - SyslogFacility: config.SyslogFacility, - LogFilePath: config.LogFile, - LogRotateDuration: config.LogRotateDuration, - LogRotateBytes: config.LogRotateBytes, - LogRotateMaxFiles: config.LogRotateMaxFiles, + logGate := &logging.GatedWriter{Writer: &cli.UiWriter{Ui: c.UI}} + loader := func(source config.Source) (cfg *config.RuntimeConfig, warnings []string, err error) { + return config.Load(c.flagArgs, source) } - logger, logGate, logOutput, ok := logging.Setup(logConfig, c.UI) - if !ok { + bd, err := agent.NewBaseDeps(loader, logGate) + if err != nil { + c.UI.Error(err.Error()) return 1 } - c.logOutput = logOutput - c.logger = logger - - //Setup gate to check if we should output CLI information - cli := GatedUi{ - JSONoutput: config.LogJSON, - ui: c.UI, + c.logger = bd.Logger + agent, err := agent.New(bd) + if err != nil { + c.UI.Error(err.Error()) + return 1 } - // Setup gRPC logger to use the same output/filtering - grpclog.SetLoggerV2(logging.NewGRPCLogger(logConfig, c.logger)) + config := bd.RuntimeConfig - memSink, err := lib.InitTelemetry(config.Telemetry) - if err != nil { - c.logger.Error(err.Error()) - logGate.Flush() - return 1 + // Setup gate to check if we should output CLI information + cli := GatedUi{ + JSONoutput: config.Logging.LogJSON, + ui: c.UI, } // Create the agent cli.output("Starting Consul agent...") - agent, err := agent.New(config, c.logger) - if err != nil { - c.logger.Error("Error creating agent", "error", err) - logGate.Flush() - return 1 - } - agent.LogOutput = logOutput - agent.MemSink = memSink segment := config.SegmentName if config.ServerMode { @@ -258,16 +210,17 @@ // wait for signal signalCh := make(chan os.Signal, 10) - stopCh := make(chan struct{}) signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGPIPE) + ctx, cancel := context.WithCancel(context.Background()) + go func() { for { var sig os.Signal select { case s := <-signalCh: sig = s - case <-stopCh: + case <-ctx.Done(): return } @@ -281,18 +234,16 @@ default: c.logger.Info("Caught", "signal", sig) - agent.InterruptStartCh <- struct{}{} + cancel() return } } }() - err = agent.Start() + err = agent.Start(ctx) signal.Stop(signalCh) - select { - case stopCh <- struct{}{}: - default: - } + cancel() + if err != nil { c.logger.Error("Error starting agent", "error", err) return 1 @@ -327,13 +278,9 @@ for { var sig os.Signal - var reloadErrCh chan error select { case s := <-signalCh: sig = s - case ch := <-agent.ReloadCh(): - sig = syscall.SIGHUP - reloadErrCh = ch case <-service_os.Shutdown_Channel(): sig = os.Interrupt case <-c.shutdownCh: @@ -353,18 +300,11 @@ case syscall.SIGHUP: c.logger.Info("Caught", "signal", sig) - conf, err := c.handleReload(agent, config) - if conf != nil { - config = conf - } + err := agent.ReloadConfig() if err != nil { c.logger.Error("Reload config failed", "error", err) } - // Send result back if reload was called via HTTP - if reloadErrCh != nil { - reloadErrCh <- err - } - + config = agent.GetConfig() default: c.logger.Info("Caught", "signal", sig) @@ -400,35 +340,9 @@ } } -// handleReload is invoked when we should reload our configs, e.g. SIGHUP -func (c *cmd) handleReload(agent *agent.Agent, cfg *config.RuntimeConfig) (*config.RuntimeConfig, error) { - c.logger.Info("Reloading configuration...") - var errs error - newCfg := c.readConfig() - if newCfg == nil { - errs = multierror.Append(errs, fmt.Errorf("Failed to reload configs")) - return cfg, errs - } - - // Change the log level - if logging.ValidateLogLevel(newCfg.LogLevel) { - c.logger.SetLevel(logging.LevelFromString(newCfg.LogLevel)) - } else { - errs = multierror.Append(fmt.Errorf( - "Invalid log level: %s. Valid log levels are: %v", - newCfg.LogLevel, logging.AllowedLogLevels())) - - // Keep the current log level - newCfg.LogLevel = cfg.LogLevel - - } - - if err := agent.ReloadConfig(newCfg); err != nil { - errs = multierror.Append(fmt.Errorf( - "Failed to reload configs: %v", err)) - } - - return newCfg, errs +type GatedUi struct { + JSONoutput bool + ui cli.Ui } func (g *GatedUi) output(s string) { diff -Nru consul-1.7.4+dfsg1/command/agent/agent_test.go consul-1.8.7+dfsg1/command/agent/agent_test.go --- consul-1.7.4+dfsg1/command/agent/agent_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/agent/agent_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,7 +11,6 @@ "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/agent" - "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/mitchellh/cli" @@ -34,7 +33,7 @@ }, { args: []string{"agent", "-server", "-bind=10.0.0.1", "-datacenter=foo", "some-other-arg"}, - out: "==> config: Unknown extra arguments: [some-other-arg]\n", + out: "==> Unexpected extra arguments: [some-other-arg]\n", }, { args: []string{"agent", "-server", "-bind=10.0.0.1"}, @@ -81,10 +80,10 @@ } func TestRetryJoin(t *testing.T) { - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() - b := agent.NewTestAgent(t, t.Name(), ` + b := agent.NewTestAgent(t, ` retry_join = ["`+a.Config.SerfBindAddrLAN.String()+`"] retry_join_wan = ["`+a.Config.SerfBindAddrWAN.String()+`"] retry_interval = "100ms" @@ -205,67 +204,3 @@ t.Fatalf("expected permission denied error, got: %s", out) } } - -func TestReloadLoggerFail(t *testing.T) { - a := agent.NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - - ui := cli.NewMockUi() - cmd := New(ui, "", "", "", "", nil) - - bindAddr := a.Config.BindAddr.String() - cmd.flagArgs.Config.BindAddr = &bindAddr - cmd.flagArgs.Config.DataDir = &a.Config.DataDir - - cmd.logger = testutil.Logger(t) - - newLogLevel := "BLAH" - cmd.flagArgs.Config.LogLevel = &newLogLevel - - oldCfg := config.RuntimeConfig{ - LogLevel: "INFO", - } - cfg, err := cmd.handleReload(a.Agent, &oldCfg) - if err == nil { - t.Fatal("Should fail with bad log level") - } - - if !strings.Contains(err.Error(), "Invalid log level") { - t.Fatalf("expected invalid log level error, got: %s", err) - } - if cfg.LogLevel != "INFO" { - t.Fatalf("expected log level to stay the same, got: %s", cfg.LogLevel) - } -} - -func TestReloadLoggerSuccess(t *testing.T) { - a := agent.NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - - ui := cli.NewMockUi() - cmd := New(ui, "", "", "", "", nil) - - bindAddr := a.Config.BindAddr.String() - cmd.flagArgs.Config.BindAddr = &bindAddr - cmd.flagArgs.Config.DataDir = &a.Config.DataDir - - cmd.logger = testutil.Logger(t) - - newLogLevel := "ERROR" - cmd.flagArgs.Config.LogLevel = &newLogLevel - - oldCfg := config.RuntimeConfig{ - LogLevel: "INFO", - } - cfg, err := cmd.handleReload(a.Agent, &oldCfg) - if err != nil { - t.Fatalf("unexpected error: %s", err) - } - - if cfg.LogLevel != "ERROR" { - t.Fatalf("expected log level to change to 'ERROR', got: %s", cfg.LogLevel) - } - if cmd.logger.IsWarn() || !cmd.logger.IsError() { - t.Fatal("expected logger level to change to 'ERROR'") - } -} diff -Nru consul-1.7.4+dfsg1/command/catalog/list/dc/catalog_list_datacenters_test.go consul-1.8.7+dfsg1/command/catalog/list/dc/catalog_list_datacenters_test.go --- consul-1.7.4+dfsg1/command/catalog/list/dc/catalog_list_datacenters_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/catalog/list/dc/catalog_list_datacenters_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -53,7 +53,7 @@ func TestCatalogListDatacentersCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/catalog/list/nodes/catalog_list_nodes_test.go consul-1.8.7+dfsg1/command/catalog/list/nodes/catalog_list_nodes_test.go --- consul-1.7.4+dfsg1/command/catalog/list/nodes/catalog_list_nodes_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/catalog/list/nodes/catalog_list_nodes_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ func TestCatalogListNodesCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -168,9 +168,11 @@ t.Parallel() nodeName := "name|with|bars" - a := agent.NewTestAgent(t, "", `node_name = "`+nodeName+`"`) + a := agent.NewTestAgent(t, `node_name = "`+nodeName+`"`) defer a.Shutdown() + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + ui := cli.NewMockUi() c := New(ui) c.flags.SetOutput(ui.ErrorWriter) diff -Nru consul-1.7.4+dfsg1/command/catalog/list/services/catalog_list_services_test.go consul-1.8.7+dfsg1/command/catalog/list/services/catalog_list_services_test.go --- consul-1.7.4+dfsg1/command/catalog/list/services/catalog_list_services_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/catalog/list/services/catalog_list_services_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -34,7 +34,7 @@ func TestCatalogListServicesCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/commands_oss.go consul-1.8.7+dfsg1/command/commands_oss.go --- consul-1.7.4+dfsg1/command/commands_oss.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/commands_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -51,7 +51,8 @@ caget "github.com/hashicorp/consul/command/connect/ca/get" caset "github.com/hashicorp/consul/command/connect/ca/set" "github.com/hashicorp/consul/command/connect/envoy" - "github.com/hashicorp/consul/command/connect/envoy/pipe-bootstrap" + pipebootstrap "github.com/hashicorp/consul/command/connect/envoy/pipe-bootstrap" + "github.com/hashicorp/consul/command/connect/expose" "github.com/hashicorp/consul/command/connect/proxy" "github.com/hashicorp/consul/command/debug" "github.com/hashicorp/consul/command/event" @@ -169,6 +170,7 @@ Register("connect proxy", func(ui cli.Ui) (cli.Command, error) { return proxy.New(ui, MakeShutdownCh()), nil }) Register("connect envoy", func(ui cli.Ui) (cli.Command, error) { return envoy.New(ui), nil }) Register("connect envoy pipe-bootstrap", func(ui cli.Ui) (cli.Command, error) { return pipebootstrap.New(ui), nil }) + Register("connect expose", func(ui cli.Ui) (cli.Command, error) { return expose.New(ui), nil }) Register("debug", func(ui cli.Ui) (cli.Command, error) { return debug.New(ui, MakeShutdownCh()), nil }) Register("event", func(ui cli.Ui) (cli.Command, error) { return event.New(ui), nil }) Register("exec", func(ui cli.Ui) (cli.Command, error) { return exec.New(ui, MakeShutdownCh()), nil }) @@ -218,6 +220,6 @@ Register("tls cert", func(ui cli.Ui) (cli.Command, error) { return tlscert.New(), nil }) Register("tls cert create", func(ui cli.Ui) (cli.Command, error) { return tlscertcreate.New(ui), nil }) Register("validate", func(ui cli.Ui) (cli.Command, error) { return validate.New(ui), nil }) - Register("version", func(ui cli.Ui) (cli.Command, error) { return version.New(ui, verHuman), nil }) + Register("version", func(ui cli.Ui) (cli.Command, error) { return version.New(ui), nil }) Register("watch", func(ui cli.Ui) (cli.Command, error) { return watch.New(ui, MakeShutdownCh()), nil }) } diff -Nru consul-1.7.4+dfsg1/command/config/delete/config_delete.go consul-1.8.7+dfsg1/command/config/delete/config_delete.go --- consul-1.7.4+dfsg1/command/config/delete/config_delete.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/delete/config_delete.go 2020-12-10 21:46:52.000000000 +0000 @@ -58,11 +58,11 @@ _, err = client.ConfigEntries().Delete(c.kind, c.name, nil) if err != nil { - c.UI.Error(fmt.Sprintf("Error deleting config entry %q / %q: %v", c.kind, c.name, err)) + c.UI.Error(fmt.Sprintf("Error deleting config entry %s/%s: %v", c.kind, c.name, err)) return 1 } - // TODO (mkeeler) should we output anything when successful + c.UI.Info(fmt.Sprintf("Config entry deleted: %s/%s", c.kind, c.name)) return 0 } diff -Nru consul-1.7.4+dfsg1/command/config/delete/config_delete_test.go consul-1.8.7+dfsg1/command/config/delete/config_delete_test.go --- consul-1.7.4+dfsg1/command/config/delete/config_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/delete/config_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestConfigDelete(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -40,7 +40,8 @@ code := c.Run(args) require.Equal(t, 0, code) - require.Empty(t, ui.OutputWriter.String()) + require.Contains(t, ui.OutputWriter.String(), + "Config entry deleted: service-defaults/web") require.Empty(t, ui.ErrorWriter.String()) entry, _, err := client.ConfigEntries().Get(api.ServiceDefaults, "web", nil) diff -Nru consul-1.7.4+dfsg1/command/config/list/config_list_test.go consul-1.8.7+dfsg1/command/config/list/config_list_test.go --- consul-1.7.4+dfsg1/command/config/list/config_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/list/config_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ } func TestConfigList(t *testing.T) { - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/config/read/config_read.go consul-1.8.7+dfsg1/command/config/read/config_read.go --- consul-1.7.4+dfsg1/command/config/read/config_read.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/read/config_read.go 2020-12-10 21:46:52.000000000 +0000 @@ -61,7 +61,7 @@ entry, _, err := client.ConfigEntries().Get(c.kind, c.name, nil) if err != nil { - c.UI.Error(fmt.Sprintf("Error reading config entry %q / %q: %v", c.kind, c.name, err)) + c.UI.Error(fmt.Sprintf("Error reading config entry %s/%s: %v", c.kind, c.name, err)) return 1 } diff -Nru consul-1.7.4+dfsg1/command/config/read/config_read_test.go consul-1.8.7+dfsg1/command/config/read/config_read_test.go --- consul-1.7.4+dfsg1/command/config/read/config_read_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/read/config_read_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestConfigRead(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/config/write/config_write.go consul-1.8.7+dfsg1/command/config/write/config_write.go --- consul-1.7.4+dfsg1/command/config/write/config_write.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/write/config_write.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,11 +5,10 @@ "fmt" "io" - "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/command/flags" "github.com/hashicorp/consul/command/helpers" - "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/decode" "github.com/hashicorp/go-multierror" "github.com/mitchellh/cli" "github.com/mitchellh/mapstructure" @@ -65,7 +64,7 @@ return 1 } - entry, err := parseConfigEntry(string(data)) + entry, err := parseConfigEntry(data) if err != nil { c.UI.Error(fmt.Sprintf("Failed to decode config entry input: %v", err)) return 1 @@ -86,16 +85,16 @@ written, _, err = entries.Set(entry, nil) } if err != nil { - c.UI.Error(fmt.Sprintf("Error writing config entry %q / %q: %v", entry.GetKind(), entry.GetName(), err)) + c.UI.Error(fmt.Sprintf("Error writing config entry %s/%s: %v", entry.GetKind(), entry.GetName(), err)) return 1 } if !written { - c.UI.Error(fmt.Sprintf("Config entry %q / %q not updated", entry.GetKind(), entry.GetName())) + c.UI.Error(fmt.Sprintf("Config entry not updated: %s/%s", entry.GetKind(), entry.GetName())) return 1 } - // TODO (mkeeler) should we output anything when successful + c.UI.Info(fmt.Sprintf("Config entry written: %s/%s", entry.GetKind(), entry.GetName())) return 0 } @@ -132,23 +131,13 @@ return nil, fmt.Errorf("Kind value in payload is not a string") } - skipWhenPatching, translateKeysDict, err := structs.ConfigEntryDecodeRulesForKind(entry.GetKind()) - if err != nil { - return nil, err - } - - // lib.TranslateKeys doesn't understand []map[string]interface{} so we have - // to do this part first. - raw = lib.PatchSliceOfMaps(raw, skipWhenPatching, nil) - - // CamelCase is the canonical form for these, since this translation - // happens in the `consul config write` command and the JSON form is sent - // off to the server. - lib.TranslateKeys(raw, translateKeysDict) - var md mapstructure.Metadata decodeConf := &mapstructure.DecoderConfig{ - DecodeHook: mapstructure.StringToTimeDurationHookFunc(), + DecodeHook: mapstructure.ComposeDecodeHookFunc( + decode.HookWeakDecodeFromSlice, + decode.HookTranslateKeys, + mapstructure.StringToTimeDurationHookFunc(), + ), Metadata: &md, Result: &entry, WeaklyTypedInput: true, diff -Nru consul-1.7.4+dfsg1/command/config/write/config_write_test.go consul-1.8.7+dfsg1/command/config/write/config_write_test.go --- consul-1.7.4+dfsg1/command/config/write/config_write_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/config/write/config_write_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -23,7 +23,7 @@ func TestConfigWrite(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -48,6 +48,8 @@ code := c.Run(args) require.Empty(t, ui.ErrorWriter.String()) + require.Contains(t, ui.OutputWriter.String(), + `Config entry written: service-defaults/web`) require.Equal(t, 0, code) entry, _, err := client.ConfigEntries().Get("service-defaults", "web", nil) @@ -85,6 +87,8 @@ code := c.Run(args) require.Empty(t, ui.ErrorWriter.String()) + require.Contains(t, ui.OutputWriter.String(), + `Config entry written: proxy-defaults/global`) require.Equal(t, 0, code) entry, _, err := client.ConfigEntries().Get(api.ProxyDefaults, api.ProxyConfigGlobal, nil) @@ -159,6 +163,10 @@ snake: ` kind = "proxy-defaults" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } config { "foo" = 19 "bar" = "abc" @@ -173,6 +181,10 @@ camel: ` Kind = "proxy-defaults" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Config { "foo" = 19 "bar" = "abc" @@ -188,6 +200,10 @@ { "kind": "proxy-defaults", "name": "main", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "config": { "foo": 19, "bar": "abc", @@ -204,6 +220,10 @@ { "Kind": "proxy-defaults", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Config": { "foo": 19, "bar": "abc", @@ -219,6 +239,10 @@ expect: &api.ProxyConfigEntry{ Kind: "proxy-defaults", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Config: map[string]interface{}{ "foo": 19, "bar": "abc", @@ -233,6 +257,10 @@ expectJSON: &api.ProxyConfigEntry{ Kind: "proxy-defaults", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Config: map[string]interface{}{ "foo": float64(19), // json decoding gives float64 instead of int here "bar": "abc", @@ -246,10 +274,159 @@ }, }, { + name: "terminating-gateway", + snake: ` + kind = "terminating-gateway" + name = "terminating-gw-west" + namespace = "default" + meta { + "foo" = "bar" + "gir" = "zim" + } + services = [ + { + name = "billing" + namespace = "biz" + ca_file = "/etc/ca.crt" + cert_file = "/etc/client.crt" + key_file = "/etc/tls.key" + sni = "mydomain" + }, + { + name = "*" + namespace = "ops" + } + ] + `, + camel: ` + Kind = "terminating-gateway" + Name = "terminating-gw-west" + Namespace = "default" + Meta { + "foo" = "bar" + "gir" = "zim" + } + Services = [ + { + Name = "billing" + Namespace = "biz" + CAFile = "/etc/ca.crt" + CertFile = "/etc/client.crt" + KeyFile = "/etc/tls.key" + SNI = "mydomain" + }, + { + Name = "*" + Namespace = "ops" + } + ] + `, + snakeJSON: ` + { + "kind": "terminating-gateway", + "name": "terminating-gw-west", + "namespace": "default", + "meta" : { + "foo": "bar", + "gir": "zim" + }, + "services": [ + { + "name": "billing", + "namespace": "biz", + "ca_file": "/etc/ca.crt", + "cert_file": "/etc/client.crt", + "key_file": "/etc/tls.key", + "sni": "mydomain" + }, + { + "name": "*", + "namespace": "ops" + } + ] + } + `, + camelJSON: ` + { + "Kind": "terminating-gateway", + "Name": "terminating-gw-west", + "Namespace": "default", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, + "Services": [ + { + "Name": "billing", + "Namespace": "biz", + "CAFile": "/etc/ca.crt", + "CertFile": "/etc/client.crt", + "KeyFile": "/etc/tls.key", + "SNI": "mydomain" + }, + { + "Name": "*", + "Namespace": "ops" + } + ] + } + `, + expect: &api.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Namespace: "default", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + Services: []api.LinkedService{ + { + Name: "billing", + Namespace: "biz", + CAFile: "/etc/ca.crt", + CertFile: "/etc/client.crt", + KeyFile: "/etc/tls.key", + SNI: "mydomain", + }, + { + Name: "*", + Namespace: "ops", + }, + }, + }, + expectJSON: &api.TerminatingGatewayConfigEntry{ + Kind: "terminating-gateway", + Name: "terminating-gw-west", + Namespace: "default", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + Services: []api.LinkedService{ + { + Name: "billing", + Namespace: "biz", + CAFile: "/etc/ca.crt", + CertFile: "/etc/client.crt", + KeyFile: "/etc/tls.key", + SNI: "mydomain", + }, + { + Name: "*", + Namespace: "ops", + }, + }, + }, + }, + { name: "service-defaults", snake: ` kind = "service-defaults" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } protocol = "http" external_sni = "abc-123" mesh_gateway { @@ -259,6 +436,10 @@ camel: ` Kind = "service-defaults" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Protocol = "http" ExternalSNI = "abc-123" MeshGateway { @@ -269,6 +450,10 @@ { "kind": "service-defaults", "name": "main", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "protocol": "http", "external_sni": "abc-123", "mesh_gateway": { @@ -280,6 +465,10 @@ { "Kind": "service-defaults", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Protocol": "http", "ExternalSNI": "abc-123", "MeshGateway": { @@ -288,8 +477,12 @@ } `, expect: &api.ServiceConfigEntry{ - Kind: "service-defaults", - Name: "main", + Kind: "service-defaults", + Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Protocol: "http", ExternalSNI: "abc-123", MeshGateway: api.MeshGatewayConfig{ @@ -302,6 +495,10 @@ snake: ` kind = "service-router" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } routes = [ { match { @@ -381,6 +578,10 @@ camel: ` Kind = "service-router" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Routes = [ { Match { @@ -461,6 +662,10 @@ { "kind": "service-router", "name": "main", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "routes": [ { "match": { @@ -548,6 +753,10 @@ { "Kind": "service-router", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Routes": [ { "Match": { @@ -634,6 +843,10 @@ expect: &api.ServiceRouterConfigEntry{ Kind: "service-router", Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Routes: []api.ServiceRoute{ { Match: &api.ServiceRouteMatch{ @@ -716,6 +929,10 @@ snake: ` kind = "service-splitter" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } splits = [ { weight = 97.1 @@ -735,6 +952,10 @@ camel: ` Kind = "service-splitter" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } Splits = [ { Weight = 97.1 @@ -755,6 +976,10 @@ { "kind": "service-splitter", "name": "main", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "splits": [ { "weight": 97.1, @@ -776,6 +1001,10 @@ { "Kind": "service-splitter", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "Splits": [ { "Weight": 97.1, @@ -796,6 +1025,10 @@ expect: &api.ServiceSplitterConfigEntry{ Kind: api.ServiceSplitter, Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, Splits: []api.ServiceSplit{ { Weight: 97.1, @@ -818,6 +1051,10 @@ snake: ` kind = "service-resolver" name = "main" + meta { + "foo" = "bar" + "gir" = "zim" + } default_subset = "v1" connect_timeout = "15s" subsets = { @@ -843,6 +1080,10 @@ camel: ` Kind = "service-resolver" Name = "main" + Meta { + "foo" = "bar" + "gir" = "zim" + } DefaultSubset = "v1" ConnectTimeout = "15s" Subsets = { @@ -869,6 +1110,10 @@ { "kind": "service-resolver", "name": "main", + "meta" : { + "foo": "bar", + "gir": "zim" + }, "default_subset": "v1", "connect_timeout": "15s", "subsets": { @@ -902,6 +1147,10 @@ { "Kind": "service-resolver", "Name": "main", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, "DefaultSubset": "v1", "ConnectTimeout": "15s", "Subsets": { @@ -932,8 +1181,12 @@ } `, expect: &api.ServiceResolverConfigEntry{ - Kind: "service-resolver", - Name: "main", + Kind: "service-resolver", + Name: "main", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, DefaultSubset: "v1", ConnectTimeout: 15 * time.Second, Subsets: map[string]api.ServiceResolverSubset{ @@ -1055,6 +1308,12 @@ listener_port = 21500 path = "/healthz" protocol = "http2" + }, + { + local_path_port = 8000 + listener_port = 21501 + path = "/metrics" + protocol = "http" } ] }`, @@ -1069,6 +1328,12 @@ ListenerPort = 21500 Path = "/healthz" Protocol = "http2" + }, + { + LocalPathPort = 8000 + ListenerPort = 21501 + Path = "/metrics" + Protocol = "http" } ] }`, @@ -1084,6 +1349,12 @@ "listener_port": 21500, "path": "/healthz", "protocol": "http2" + }, + { + "local_path_port": 8000, + "listener_port": 21501, + "path": "/metrics", + "protocol": "http" } ] } @@ -1101,6 +1372,12 @@ "ListenerPort": 21500, "Path": "/healthz", "Protocol": "http2" + }, + { + "LocalPathPort": 8000, + "ListenerPort": 21501, + "Path": "/metrics", + "Protocol": "http" } ] } @@ -1118,6 +1395,264 @@ LocalPathPort: 8080, Protocol: "http2", }, + { + ListenerPort: 21501, + Path: "/metrics", + LocalPathPort: 8000, + Protocol: "http", + }, + }, + }, + }, + }, + { + name: "expose paths: kitchen sink service defaults", + snake: ` + kind = "service-defaults" + name = "web" + expose = { + checks = true + paths = [ + { + local_path_port = 8080 + listener_port = 21500 + path = "/healthz" + protocol = "http2" + }, + { + local_path_port = 8000 + listener_port = 21501 + path = "/metrics" + protocol = "http" + } + ] + }`, + camel: ` + Kind = "service-defaults" + Name = "web" + Expose = { + Checks = true + Paths = [ + { + LocalPathPort = 8080 + ListenerPort = 21500 + Path = "/healthz" + Protocol = "http2" + }, + { + LocalPathPort = 8000 + ListenerPort = 21501 + Path = "/metrics" + Protocol = "http" + } + ] + }`, + snakeJSON: ` + { + "kind": "service-defaults", + "name": "web", + "expose": { + "checks": true, + "paths": [ + { + "local_path_port": 8080, + "listener_port": 21500, + "path": "/healthz", + "protocol": "http2" + }, + { + "local_path_port": 8000, + "listener_port": 21501, + "path": "/metrics", + "protocol": "http" + } + ] + } + } + `, + camelJSON: ` + { + "Kind": "service-defaults", + "Name": "web", + "Expose": { + "Checks": true, + "Paths": [ + { + "LocalPathPort": 8080, + "ListenerPort": 21500, + "Path": "/healthz", + "Protocol": "http2" + }, + { + "LocalPathPort": 8000, + "ListenerPort": 21501, + "Path": "/metrics", + "Protocol": "http" + } + ] + } + } + `, + expect: &api.ServiceConfigEntry{ + Kind: "service-defaults", + Name: "web", + Expose: api.ExposeConfig{ + Checks: true, + Paths: []api.ExposePath{ + { + ListenerPort: 21500, + Path: "/healthz", + LocalPathPort: 8080, + Protocol: "http2", + }, + { + ListenerPort: 21501, + Path: "/metrics", + LocalPathPort: 8000, + Protocol: "http", + }, + }, + }, + }, + }, + { + name: "ingress-gateway: kitchen sink", + snake: ` + kind = "ingress-gateway" + name = "ingress-web" + meta { + "foo" = "bar" + "gir" = "zim" + } + tls { + enabled = true + } + listeners = [ + { + port = 8080 + protocol = "http" + services = [ + { + name = "web" + hosts = ["test.example.com"] + }, + { + name = "db" + namespace = "foo" + } + ] + } + ] + `, + camel: ` + Kind = "ingress-gateway" + Name = "ingress-web" + Meta { + "foo" = "bar" + "gir" = "zim" + } + Tls { + Enabled = true + } + Listeners = [ + { + Port = 8080 + Protocol = "http" + Services = [ + { + Name = "web" + Hosts = ["test.example.com"] + }, + { + Name = "db" + Namespace = "foo" + } + ] + } + ] + `, + snakeJSON: ` + { + "kind": "ingress-gateway", + "name": "ingress-web", + "meta" : { + "foo": "bar", + "gir": "zim" + }, + "tls": { + "enabled": true + }, + "listeners": [ + { + "port": 8080, + "protocol": "http", + "services": [ + { + "name": "web", + "hosts": ["test.example.com"] + }, + { + "name": "db", + "namespace": "foo" + } + ] + } + ] + } + `, + camelJSON: ` + { + "Kind": "ingress-gateway", + "Name": "ingress-web", + "Meta" : { + "foo": "bar", + "gir": "zim" + }, + "Tls": { + "Enabled": true + }, + "Listeners": [ + { + "Port": 8080, + "Protocol": "http", + "Services": [ + { + "Name": "web", + "Hosts": ["test.example.com"] + }, + { + "Name": "db", + "Namespace": "foo" + } + ] + } + ] + } + `, + expect: &api.IngressGatewayConfigEntry{ + Kind: "ingress-gateway", + Name: "ingress-web", + Meta: map[string]string{ + "foo": "bar", + "gir": "zim", + }, + TLS: api.GatewayTLSConfig{ + Enabled: true, + }, + Listeners: []api.IngressListener{ + { + Port: 8080, + Protocol: "http", + Services: []api.IngressService{ + { + Name: "web", + Hosts: []string{"test.example.com"}, + }, + { + Name: "db", + Namespace: "foo", + }, + }, }, }, }, diff -Nru consul-1.7.4+dfsg1/command/connect/ca/get/connect_ca_get_test.go consul-1.8.7+dfsg1/command/connect/ca/get/connect_ca_get_test.go --- consul-1.7.4+dfsg1/command/connect/ca/get/connect_ca_get_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/ca/get/connect_ca_get_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,7 +19,7 @@ func TestConnectCAGetConfigCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/connect/ca/set/connect_ca_set_test.go consul-1.8.7+dfsg1/command/connect/ca/set/connect_ca_set_test.go --- consul-1.7.4+dfsg1/command/connect/ca/set/connect_ca_set_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/ca/set/connect_ca_set_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,7 @@ func TestConnectCASetConfigCommand(t *testing.T) { t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/bootstrap_config.go consul-1.8.7+dfsg1/command/connect/envoy/bootstrap_config.go --- consul-1.7.4+dfsg1/command/connect/envoy/bootstrap_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/bootstrap_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,6 +11,10 @@ "text/template" ) +const ( + selfAdminName = "self_admin" +) + // BootstrapConfig is the set of keys we care about in a Connect.Proxy.Config // map. Note that this only includes config keys that affects Envoy bootstrap // generation. For Envoy config keys that affect runtime xDS behavior see @@ -65,6 +69,15 @@ // a 404. StatsBindAddr string `mapstructure:"envoy_stats_bind_addr"` + // ReadyBindAddr configures an : on which Envoy will listen and + // expose a single /ready HTTP endpoint. This is useful for checking the + // liveness of an Envoy instance when no other listeners are garaunteed to be + // configured, as is the case with ingress gateways. + // + // Note that we do not allow this to be configured via the service + // definition config map currently. + ReadyBindAddr string `mapstructure:"-"` + // OverrideJSONTpl allows replacing the base template used to render the // bootstrap. This is an "escape hatch" allowing arbitrary control over the // proxy's configuration but will the most effort to maintain and correctly @@ -196,13 +209,19 @@ } // Setup prometheus if needed. This MUST happen after the Static*JSON is set above if c.PrometheusBindAddr != "" { - if err := c.generateMetricsListenerConfig(args, c.PrometheusBindAddr, "envoy_prometheus_metrics", "path", "/metrics", "/stats/prometheus"); err != nil { + if err := c.generateListenerConfig(args, c.PrometheusBindAddr, "envoy_prometheus_metrics", "path", "/metrics", "/stats/prometheus"); err != nil { return err } } // Setup /stats proxy listener if needed. This MUST happen after the Static*JSON is set above if c.StatsBindAddr != "" { - if err := c.generateMetricsListenerConfig(args, c.StatsBindAddr, "envoy_metrics", "prefix", "/stats", "/stats"); err != nil { + if err := c.generateListenerConfig(args, c.StatsBindAddr, "envoy_metrics", "prefix", "/stats", "/stats"); err != nil { + return err + } + } + // Setup /ready proxy listener if needed. This MUST happen after the Static*JSON is set above + if c.ReadyBindAddr != "" { + if err := c.generateListenerConfig(args, c.ReadyBindAddr, "envoy_ready", "path", "/ready", "/ready"); err != nil { return err } } @@ -383,14 +402,14 @@ return nil } -func (c *BootstrapConfig) generateMetricsListenerConfig(args *BootstrapTplArgs, bindAddr, name, matchType, matchValue, prefixRewrite string) error { +func (c *BootstrapConfig) generateListenerConfig(args *BootstrapTplArgs, bindAddr, name, matchType, matchValue, prefixRewrite string) error { host, port, err := net.SplitHostPort(bindAddr) if err != nil { return fmt.Errorf("invalid %s bind address: %s", name, err) } clusterJSON := `{ - "name": "self_admin", + "name": "` + selfAdminName + `", "connect_timeout": "5s", "type": "STATIC", "http_protocol_options": {}, @@ -461,10 +480,18 @@ ] }` - if args.StaticClustersJSON != "" { - clusterJSON = ",\n" + clusterJSON + // Make sure we do not append the same cluster multiple times, as that will + // cause envoy startup to fail. + selfAdminClusterExists, err := containsSelfAdminCluster(args.StaticClustersJSON) + if err != nil { + return err + } + + if args.StaticClustersJSON == "" { + args.StaticClustersJSON = clusterJSON + } else if !selfAdminClusterExists { + args.StaticClustersJSON += ",\n" + clusterJSON } - args.StaticClustersJSON += clusterJSON if args.StaticListenersJSON != "" { listenerJSON = ",\n" + listenerJSON @@ -472,3 +499,24 @@ args.StaticListenersJSON += listenerJSON return nil } + +func containsSelfAdminCluster(clustersJSON string) (bool, error) { + clusterNames := []struct { + Name string + }{} + + // StaticClustersJSON is defined as a comma-separated list of clusters, so we + // need to wrap it in JSON array brackets + err := json.Unmarshal([]byte("["+clustersJSON+"]"), &clusterNames) + if err != nil { + return false, fmt.Errorf("failed to parse static clusters: %s", err) + } + + for _, cluster := range clusterNames { + if cluster.Name == selfAdminName { + return true, nil + } + } + + return false, nil +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/bootstrap_config_test.go consul-1.8.7+dfsg1/command/connect/envoy/bootstrap_config_test.go --- consul-1.7.4+dfsg1/command/connect/envoy/bootstrap_config_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/bootstrap_config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,6 +9,20 @@ ) const ( + expectedSelfAdminCluster = `{ + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + }` expectedPromListener = `{ "name": "envoy_prometheus_metrics_listener", "address": { @@ -66,20 +80,6 @@ } ] }` - expectedPromCluster = `{ - "name": "self_admin", - "connect_timeout": "5s", - "type": "STATIC", - "http_protocol_options": {}, - "hosts": [ - { - "socket_address": { - "address": "127.0.0.1", - "port_value": 19000 - } - } - ] - }` expectedStatsListener = `{ "name": "envoy_metrics_listener", "address": { @@ -137,17 +137,60 @@ } ] }` - expectedStatsCluster = `{ - "name": "self_admin", - "connect_timeout": "5s", - "type": "STATIC", - "http_protocol_options": {}, - "hosts": [ + expectedReadyListener = `{ + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "0.0.0.0", + "port_value": 4444 + } + }, + "filter_chains": [ { - "socket_address": { - "address": "127.0.0.1", - "port_value": 19000 - } + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] } ] }` @@ -392,7 +435,7 @@ AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", // Should add a static cluster for the self-proxy to admin - StaticClustersJSON: expectedPromCluster, + StaticClustersJSON: expectedSelfAdminCluster, // Should add a static http listener too StaticListenersJSON: expectedPromListener, StatsConfigJSON: defaultStatsConfigJSON, @@ -414,7 +457,7 @@ AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", // Should add a static cluster for the self-proxy to admin - StaticClustersJSON: `{"foo":"bar"},` + expectedPromCluster, + StaticClustersJSON: `{"foo":"bar"},` + expectedSelfAdminCluster, // Should add a static http listener too StaticListenersJSON: `{"baz":"qux"},` + expectedPromListener, StatsConfigJSON: defaultStatsConfigJSON, @@ -434,7 +477,7 @@ AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", // Should add a static cluster for the self-proxy to admin - StaticClustersJSON: expectedStatsCluster, + StaticClustersJSON: expectedSelfAdminCluster, // Should add a static http listener too StaticListenersJSON: expectedStatsListener, StatsConfigJSON: defaultStatsConfigJSON, @@ -456,7 +499,7 @@ AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", // Should add a static cluster for the self-proxy to admin - StaticClustersJSON: `{"foo":"bar"},` + expectedStatsCluster, + StaticClustersJSON: `{"foo":"bar"},` + expectedSelfAdminCluster, // Should add a static http listener too StaticListenersJSON: `{"baz":"qux"},` + expectedStatsListener, StatsConfigJSON: defaultStatsConfigJSON, @@ -513,6 +556,73 @@ }, wantErr: true, }, + { + name: "ready-bind-addr", + input: BootstrapConfig{ + ReadyBindAddr: "0.0.0.0:4444", + }, + baseArgs: BootstrapTplArgs{ + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + }, + wantArgs: BootstrapTplArgs{ + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + // Should add a static cluster for the self-proxy to admin + StaticClustersJSON: expectedSelfAdminCluster, + // Should add a static http listener too + StaticListenersJSON: expectedReadyListener, + StatsConfigJSON: defaultStatsConfigJSON, + }, + wantErr: false, + }, + { + name: "ready-bind-addr-with-overrides", + input: BootstrapConfig{ + ReadyBindAddr: "0.0.0.0:4444", + StaticClustersJSON: `{"foo":"bar"}`, + StaticListenersJSON: `{"baz":"qux"}`, + }, + baseArgs: BootstrapTplArgs{ + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + }, + wantArgs: BootstrapTplArgs{ + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + // Should add a static cluster for the self-proxy to admin + StaticClustersJSON: `{"foo":"bar"},` + expectedSelfAdminCluster, + // Should add a static http listener too + StaticListenersJSON: `{"baz":"qux"},` + expectedReadyListener, + StatsConfigJSON: defaultStatsConfigJSON, + }, + wantErr: false, + }, + { + name: "ready-bind-addr-and-prometheus-and-stats", + input: BootstrapConfig{ + ReadyBindAddr: "0.0.0.0:4444", + PrometheusBindAddr: "0.0.0.0:9000", + StatsBindAddr: "0.0.0.0:9000", + }, + baseArgs: BootstrapTplArgs{ + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + }, + wantArgs: BootstrapTplArgs{ + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + // Should add a static cluster for the self-proxy to admin + StaticClustersJSON: expectedSelfAdminCluster, + // Should add a static http listener too + StaticListenersJSON: strings.Join( + []string{expectedPromListener, expectedStatsListener, expectedReadyListener}, + ", ", + ), + StatsConfigJSON: defaultStatsConfigJSON, + }, + wantErr: false, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/bootstrap_tpl.go consul-1.8.7+dfsg1/command/connect/envoy/bootstrap_tpl.go --- consul-1.7.4+dfsg1/command/connect/envoy/bootstrap_tpl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/bootstrap_tpl.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,8 @@ // BootstrapTplArgs is the set of arguments that may be interpolated into the // Envoy bootstrap template. type BootstrapTplArgs struct { + GRPC + // ProxyCluster is the cluster name for the the Envoy `node` specification and // is typically the same as the ProxyID. ProxyCluster string @@ -12,26 +14,10 @@ // the agent to deliver the correct configuration. ProxyID string - // AgentAddress is the IP address of the local agent where the proxy instance - // is registered. - AgentAddress string - - // AgentPort is the gRPC port exposed on the local agent. - AgentPort string - - // AgentTLS is true if the local agent gRPC service should be accessed over - // TLS. - AgentTLS bool - // AgentCAPEM is the CA to use to verify the local agent gRPC service if // TLS is enabled. AgentCAPEM string - // AgentSocket is the path to a Unix Socket for communicating with the - // local agent's gRPC endpoint. Disabled if the empty (the default), - // but overrides AgentAddress and AgentPort if set. - AgentSocket string - // AdminAccessLogPath The path to write the access log for the // administration server. If no access log is desired specify // "/dev/null". By default it will use "/dev/null". @@ -102,6 +88,25 @@ EnvoyVersion string } +// GRPC settings used in the bootstrap template. +type GRPC struct { + // AgentAddress is the IP address of the local agent where the proxy instance + // is registered. + AgentAddress string + + // AgentPort is the gRPC port exposed on the local agent. + AgentPort string + + // AgentTLS is true if the local agent gRPC service should be accessed over + // TLS. + AgentTLS bool + + // AgentSocket is the path to a Unix Socket for communicating with the + // local agent's gRPC endpoint. Disabled if the empty (the default), + // but overrides AgentAddress and AgentPort if set. + AgentSocket string +} + const bootstrapTemplate = `{ "admin": { "access_log_path": "{{ .AdminAccessLogPath }}", diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/envoy.go consul-1.8.7+dfsg1/command/connect/envoy/envoy.go --- consul-1.7.4+dfsg1/command/connect/envoy/envoy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/envoy.go 2020-12-10 21:46:52.000000000 +0000 @@ -4,24 +4,22 @@ "errors" "flag" "fmt" - "io/ioutil" "net" "os" "os/exec" - "strconv" "strings" + "github.com/mitchellh/cli" "github.com/mitchellh/mapstructure" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/xds" + "github.com/hashicorp/consul/agent/xds/proxysupport" "github.com/hashicorp/consul/api" proxyCmd "github.com/hashicorp/consul/command/connect/proxy" "github.com/hashicorp/consul/command/flags" "github.com/hashicorp/consul/ipaddr" - "github.com/hashicorp/go-sockaddr/template" - - "github.com/mitchellh/cli" + "github.com/hashicorp/consul/tlsutil" ) func New(ui cli.Ui) *cmd { @@ -48,6 +46,7 @@ // flags meshGateway bool + gateway string proxyID string sidecarFor string adminAccessLogPath string @@ -60,24 +59,40 @@ // mesh gateway registration information register bool - address string - wanAddress string + lanAddress ServiceAddressValue + wanAddress ServiceAddressValue deregAfterCritical string - bindAddresses map[string]string + bindAddresses ServiceAddressMapValue + exposeServers bool + + gatewaySvcName string + gatewayKind api.ServiceKind +} + +const meshGatewayVal = "mesh" - meshGatewaySvcName string +var defaultEnvoyVersion = proxysupport.EnvoyVersions[0] + +var supportedGateways = map[string]api.ServiceKind{ + "mesh": api.ServiceKindMeshGateway, + "terminating": api.ServiceKindTerminatingGateway, + "ingress": api.ServiceKindIngressGateway, } func (c *cmd) init() { c.flags = flag.NewFlagSet("", flag.ContinueOnError) - c.flags.StringVar(&c.proxyID, "proxy-id", "", + c.flags.StringVar(&c.proxyID, "proxy-id", os.Getenv("CONNECT_PROXY_ID"), "The proxy's ID on the local agent.") + // Deprecated in favor of `gateway` c.flags.BoolVar(&c.meshGateway, "mesh-gateway", false, "Configure Envoy as a Mesh Gateway.") - c.flags.StringVar(&c.sidecarFor, "sidecar-for", "", + c.flags.StringVar(&c.gateway, "gateway", "", + "The type of gateway to register. One of: terminating, ingress, or mesh") + + c.flags.StringVar(&c.sidecarFor, "sidecar-for", os.Getenv("CONNECT_SIDECAR_FOR"), "The ID of a service instance on the local agent that this proxy should "+ "become a sidecar for. It requires that the proxy service is registered "+ "with the agent as a connect-proxy with Proxy.DestinationServiceID set "+ @@ -107,29 +122,33 @@ "cases where either assumption is violated this flag will prevent the "+ "command attempting to resolve config from the local agent.") - c.flags.StringVar(&c.grpcAddr, "grpc-addr", "", + c.flags.StringVar(&c.grpcAddr, "grpc-addr", os.Getenv(api.GRPCAddrEnvName), "Set the agent's gRPC address and port (in http(s)://host:port format). "+ "Alternatively, you can specify CONSUL_GRPC_ADDR in ENV.") - c.flags.StringVar(&c.envoyVersion, "envoy-version", "1.13.0", + c.flags.StringVar(&c.envoyVersion, "envoy-version", defaultEnvoyVersion, "Sets the envoy-version that the envoy binary has.") c.flags.BoolVar(&c.register, "register", false, - "Register a new Mesh Gateway service before configuring and starting Envoy") + "Register a new gateway service before configuring and starting Envoy") - c.flags.StringVar(&c.address, "address", "", - "LAN address to advertise in the Mesh Gateway service registration") + c.flags.Var(&c.lanAddress, "address", + "LAN address to advertise in the gateway service registration") - c.flags.StringVar(&c.wanAddress, "wan-address", "", - "WAN address to advertise in the Mesh Gateway service registration") + c.flags.Var(&c.wanAddress, "wan-address", + "WAN address to advertise in the gateway service registration. For ingress gateways, "+ + "only an IP address (without a port) is required.") - c.flags.Var((*flags.FlagMapValue)(&c.bindAddresses), "bind-address", "Bind "+ + c.flags.Var(&c.bindAddresses, "bind-address", "Bind "+ "address to use instead of the default binding rules given as `=:` "+ "pairs. This flag may be specified multiple times to add multiple bind addresses.") - c.flags.StringVar(&c.meshGatewaySvcName, "service", "mesh-gateway", + c.flags.StringVar(&c.gatewaySvcName, "service", "", "Service name to use for the registration") + c.flags.BoolVar(&c.exposeServers, "expose-servers", false, + "Expose the servers for WAN federation via this mesh gateway") + c.flags.StringVar(&c.deregAfterCritical, "deregister-after-critical", "6h", "The amount of time the gateway services health check can be failing before being deregistered") @@ -139,38 +158,6 @@ c.help = flags.Usage(help, c.flags) } -const ( - DefaultMeshGatewayPort int = 443 -) - -func parseAddress(addrStr string) (string, int, error) { - if addrStr == "" { - // defaulting the port to 443 - return "", DefaultMeshGatewayPort, nil - } - - x, err := template.Parse(addrStr) - if err != nil { - return "", DefaultMeshGatewayPort, fmt.Errorf("Error parsing address %q: %v", addrStr, err) - } - - addr, portStr, err := net.SplitHostPort(x) - if err != nil { - return "", DefaultMeshGatewayPort, fmt.Errorf("Error parsing address %q: %v", x, err) - } - - port := DefaultMeshGatewayPort - - if portStr != "" { - port, err = strconv.Atoi(portStr) - if err != nil { - return "", DefaultMeshGatewayPort, fmt.Errorf("Error parsing port %q: %v", portStr, err) - } - } - - return addr, port, nil -} - // canBindInternal is here mainly so we can unit test this with a constant net.Addr list func canBindInternal(addr string, ifAddrs []net.Addr) bool { if addr == "" { @@ -200,71 +187,115 @@ return false } -func canBind(addr string) bool { +func canBind(addr api.ServiceAddress) bool { ifAddrs, err := net.InterfaceAddrs() - if err != nil { return false } - return canBindInternal(addr, ifAddrs) + return canBindInternal(addr.Address, ifAddrs) } func (c *cmd) Run(args []string) int { if err := c.flags.Parse(args); err != nil { return 1 } - passThroughArgs := c.flags.Args() - - // Load the proxy ID and token from env vars if they're set - if c.proxyID == "" { - c.proxyID = os.Getenv("CONNECT_PROXY_ID") - } - if c.sidecarFor == "" { - c.sidecarFor = os.Getenv("CONNECT_SIDECAR_FOR") - } - if c.grpcAddr == "" { - c.grpcAddr = os.Getenv(api.GRPCAddrEnvName) - } // Setup Consul client - client, err := c.http.APIClient() + var err error + c.client, err = c.http.APIClient() if err != nil { c.UI.Error(fmt.Sprintf("Error connecting to Consul agent: %s", err)) return 1 } - c.client = client + // TODO: refactor + return c.run(c.flags.Args()) +} - if c.register { - if !c.meshGateway { - c.UI.Error("Auto-Registration can only be used for mesh gateways") +func (c *cmd) run(args []string) int { + // Fixup for deprecated mesh-gateway flag + if c.meshGateway && c.gateway != "" { + c.UI.Error("The mesh-gateway flag is deprecated and cannot be used alongside the gateway flag") + return 1 + } + + if c.meshGateway { + c.gateway = meshGatewayVal + } + + if c.exposeServers { + if c.gateway != meshGatewayVal { + c.UI.Error("'-expose-servers' can only be used for mesh gateways") return 1 } - - lanAddr, lanPort, err := parseAddress(c.address) - if err != nil { - c.UI.Error(fmt.Sprintf("Failed to parse the -address parameter: %v", err)) + if !c.register { + c.UI.Error("'-expose-servers' requires '-register'") return 1 } + } - taggedAddrs := make(map[string]api.ServiceAddress) + // Gateway kind is set so that it is available even if not auto-registering the gateway + if c.gateway != "" { + kind, ok := supportedGateways[c.gateway] + if !ok { + c.UI.Error("Gateway must be one of: terminating, mesh, or ingress") + return 1 + } + c.gatewayKind = kind - if lanAddr != "" { - taggedAddrs[structs.TaggedAddressLAN] = api.ServiceAddress{Address: lanAddr, Port: lanPort} + if c.gatewaySvcName == "" { + c.gatewaySvcName = string(c.gatewayKind) } + } + + if c.proxyID == "" { + switch { + case c.sidecarFor != "": + proxyID, err := proxyCmd.LookupProxyIDForSidecar(c.client, c.sidecarFor) + if err != nil { + c.UI.Error(err.Error()) + return 1 + } + c.proxyID = proxyID - wanAddr := "" - wanPort := lanPort - if c.wanAddress != "" { - wanAddr, wanPort, err = parseAddress(c.wanAddress) + case c.gateway != "" && !c.register: + gatewaySvc, err := proxyCmd.LookupGatewayProxy(c.client, c.gatewayKind) if err != nil { - c.UI.Error(fmt.Sprintf("Failed to parse the -wan-address parameter: %v", err)) + c.UI.Error(err.Error()) return 1 } - taggedAddrs[structs.TaggedAddressWAN] = api.ServiceAddress{Address: wanAddr, Port: wanPort} + c.proxyID = gatewaySvc.ID + c.gatewaySvcName = gatewaySvc.Service + + case c.gateway != "" && c.register: + c.proxyID = c.gatewaySvcName + + } + } + if c.proxyID == "" { + c.UI.Error("No proxy ID specified. One of -proxy-id, -sidecar-for, or -gateway is " + + "required") + return 1 + } + + if c.register { + if c.gateway == "" { + c.UI.Error("Auto-Registration can only be used for gateways") + return 1 + } + + taggedAddrs := make(map[string]api.ServiceAddress) + lanAddr := c.lanAddress.Value() + if lanAddr.Address != "" { + taggedAddrs[structs.TaggedAddressLAN] = lanAddr + } + + wanAddr := c.wanAddress.Value() + if wanAddr.Address != "" { + taggedAddrs[structs.TaggedAddressWAN] = wanAddr } - tcpCheckAddr := lanAddr + tcpCheckAddr := lanAddr.Address if tcpCheckAddr == "" { // fallback to localhost as the gateway has to reside in the same network namespace // as the agent @@ -272,25 +303,12 @@ } var proxyConf *api.AgentServiceConnectProxyConfig - - if len(c.bindAddresses) > 0 { + if len(c.bindAddresses.value) > 0 { // override all default binding rules and just bind to the user-supplied addresses - bindAddresses := make(map[string]api.ServiceAddress) - - for addrName, addrStr := range c.bindAddresses { - addr, port, err := parseAddress(addrStr) - if err != nil { - c.UI.Error(fmt.Sprintf("Failed to parse the bind address: %s=%s: %v", addrName, addrStr, err)) - return 1 - } - - bindAddresses[addrName] = api.ServiceAddress{Address: addr, Port: port} - } - proxyConf = &api.AgentServiceConnectProxyConfig{ Config: map[string]interface{}{ - "envoy_mesh_gateway_no_default_bind": true, - "envoy_mesh_gateway_bind_addresses": bindAddresses, + "envoy_gateway_no_default_bind": true, + "envoy_gateway_bind_addresses": c.bindAddresses.value, }, } } else if canBind(lanAddr) && canBind(wanAddr) { @@ -298,31 +316,38 @@ // for creating the envoy listeners proxyConf = &api.AgentServiceConnectProxyConfig{ Config: map[string]interface{}{ - "envoy_mesh_gateway_no_default_bind": true, - "envoy_mesh_gateway_bind_tagged_addresses": true, + "envoy_gateway_no_default_bind": true, + "envoy_gateway_bind_tagged_addresses": true, }, } - } else if !canBind(lanAddr) && lanAddr != "" { - c.UI.Error(fmt.Sprintf("The LAN address %q will not be bindable. Either set a bindable address or override the bind addresses with -bind-address", lanAddr)) + } else if !canBind(lanAddr) && lanAddr.Address != "" { + c.UI.Error(fmt.Sprintf("The LAN address %q will not be bindable. Either set a bindable address or override the bind addresses with -bind-address", lanAddr.Address)) return 1 } + var meta map[string]string + if c.exposeServers { + meta = map[string]string{structs.MetaWANFederationKey: "1"} + } + svc := api.AgentServiceRegistration{ - Kind: api.ServiceKindMeshGateway, - Name: c.meshGatewaySvcName, - Address: lanAddr, - Port: lanPort, + Kind: c.gatewayKind, + Name: c.gatewaySvcName, + ID: c.proxyID, + Address: lanAddr.Address, + Port: lanAddr.Port, + Meta: meta, TaggedAddresses: taggedAddrs, Proxy: proxyConf, Check: &api.AgentServiceCheck{ - Name: "Mesh Gateway Listening", - TCP: ipaddr.FormatAddressPort(tcpCheckAddr, lanPort), + Name: fmt.Sprintf("%s listening", c.gatewayKind), + TCP: ipaddr.FormatAddressPort(tcpCheckAddr, lanAddr.Port), Interval: "10s", DeregisterCriticalServiceAfter: c.deregAfterCritical, }, } - if err := client.Agent().ServiceRegister(&svc); err != nil { + if err := c.client.Agent().ServiceRegister(&svc); err != nil { c.UI.Error(fmt.Sprintf("Error registering service %q: %s", svc.Name, err)) return 1 } @@ -330,45 +355,6 @@ c.UI.Output(fmt.Sprintf("Registered service: %s", svc.Name)) } - // See if we need to lookup proxyID - if c.proxyID == "" && c.sidecarFor != "" { - proxyID, err := c.lookupProxyIDForSidecar() - if err != nil { - c.UI.Error(err.Error()) - return 1 - } - c.proxyID = proxyID - } else if c.proxyID == "" && c.meshGateway { - gatewaySvc, err := c.lookupGatewayProxy() - if err != nil { - c.UI.Error(err.Error()) - return 1 - } - c.proxyID = gatewaySvc.ID - c.meshGatewaySvcName = gatewaySvc.Service - } - - if c.proxyID == "" { - c.UI.Error("No proxy ID specified. One of -proxy-id or -sidecar-for/-mesh-gateway is " + - "required") - return 1 - } - - // See if we need to lookup grpcAddr - if c.grpcAddr == "" { - port, err := c.lookupGRPCPort() - if err != nil { - c.UI.Error(fmt.Sprintf("Error connecting to Consul agent: %s", err)) - } - if port <= 0 { - // This is the dev mode default and recommended production setting if - // enabled. - port = 8502 - c.UI.Info(fmt.Sprintf("Defaulting to grpc port = %d", port)) - } - c.grpcAddr = fmt.Sprintf("localhost:%v", port) - } - // Generate config bootstrapJson, err := c.generateConfig() if err != nil { @@ -389,7 +375,7 @@ return 1 } - err = execEnvoy(binary, nil, passThroughArgs, bootstrapJson) + err = execEnvoy(binary, nil, args, bootstrapJson) if err == errUnsupportedOS { c.UI.Error("Directly running Envoy is only supported on linux and macOS " + "since envoy itself doesn't build on other platforms currently.") @@ -417,58 +403,14 @@ httpCfg := api.DefaultConfig() c.http.MergeOntoConfig(httpCfg) - // Trigger the Client init to do any last-minute updates to the Config. + // api.NewClient normalizes some values (Token, Scheme) on the Config. if _, err := api.NewClient(httpCfg); err != nil { return nil, err } - // Decide on TLS if the scheme is provided and indicates it, if the HTTP env - // suggests TLS is supported explicitly (CONSUL_HTTP_SSL) or implicitly - // (CONSUL_HTTP_ADDR) is https:// - useTLS := false - if strings.HasPrefix(strings.ToLower(c.grpcAddr), "https://") { - useTLS = true - } else if useSSLEnv := os.Getenv(api.HTTPSSLEnvName); useSSLEnv != "" { - if enabled, err := strconv.ParseBool(useSSLEnv); err == nil { - useTLS = enabled - } - } else if strings.HasPrefix(strings.ToLower(httpCfg.Address), "https://") { - useTLS = true - } - - // We want to allow grpcAddr set as host:port with no scheme but if the host - // is an IP this will fail to parse as a URL with "parse 127.0.0.1:8500: first - // path segment in URL cannot contain colon". On the other hand we also - // support both http(s)://host:port and unix:///path/to/file. - var agentAddr, agentPort, agentSock string - if grpcAddr := strings.TrimPrefix(c.grpcAddr, "unix://"); grpcAddr != c.grpcAddr { - // Path to unix socket - agentSock = grpcAddr - } else { - // Parse as host:port with option http prefix - grpcAddr = strings.TrimPrefix(c.grpcAddr, "http://") - grpcAddr = strings.TrimPrefix(c.grpcAddr, "https://") - - var err error - agentAddr, agentPort, err = net.SplitHostPort(grpcAddr) - if err != nil { - return nil, fmt.Errorf("Invalid Consul HTTP address: %s", err) - } - if agentAddr == "" { - agentAddr = "127.0.0.1" - } - - // We use STATIC for agent which means we need to resolve DNS names like - // `localhost` ourselves. We could use STRICT_DNS or LOGICAL_DNS with envoy - // but Envoy resolves `localhost` differently to go on macOS at least which - // causes paper cuts like default dev agent (which binds specifically to - // 127.0.0.1) isn't reachable since Envoy resolves localhost to `[::]` and - // can't connect. - agentIP, err := net.ResolveIPAddr("ip", agentAddr) - if err != nil { - return nil, fmt.Errorf("Failed to resolve agent address: %s", err) - } - agentAddr = agentIP.String() + grpcAddr, err := c.grpcAddress(httpCfg) + if err != nil { + return nil, err } adminAddr, adminPort, err := net.SplitHostPort(c.adminBind) @@ -491,8 +433,8 @@ cluster := c.proxyID if c.sidecarFor != "" { cluster = c.sidecarFor - } else if c.meshGateway && c.meshGatewaySvcName != "" { - cluster = c.meshGatewaySvcName + } else if c.gateway != "" && c.gatewaySvcName != "" { + cluster = c.gatewaySvcName } adminAccessLogPath := c.adminAccessLogPath @@ -501,21 +443,16 @@ } var caPEM string - if httpCfg.TLSConfig.CAFile != "" { - content, err := ioutil.ReadFile(httpCfg.TLSConfig.CAFile) - if err != nil { - return nil, fmt.Errorf("Failed to read CA file: %s", err) - } - caPEM = strings.Replace(string(content), "\n", "\\n", -1) + pems, err := tlsutil.LoadCAs(httpCfg.TLSConfig.CAFile, httpCfg.TLSConfig.CAPath) + if err != nil { + return nil, err } + caPEM = strings.Replace(strings.Join(pems, ""), "\n", "\\n", -1) return &BootstrapTplArgs{ + GRPC: grpcAddr, ProxyCluster: cluster, ProxyID: c.proxyID, - AgentAddress: agentAddr, - AgentPort: agentPort, - AgentSocket: agentSock, - AgentTLS: useTLS, AgentCAPEM: caPEM, AdminAccessLogPath: adminAccessLogPath, AdminBindAddress: adminBindIP.String(), @@ -535,6 +472,17 @@ var bsCfg BootstrapConfig + // Setup ready listener for ingress gateway to pass healthcheck + if c.gatewayKind == api.ServiceKindIngressGateway { + lanAddr := c.lanAddress.String() + // Deal with possibility of address not being specified and defaulting to + // ":443" + if strings.HasPrefix(lanAddr, ":") { + lanAddr = "127.0.0.1" + lanAddr + } + bsCfg.ReadyBindAddr = lanAddr + } + if !c.disableCentralConfig { // Fetch any customization from the registration svc, _, err := c.client.Agent().Service(c.proxyID, nil) @@ -543,7 +491,7 @@ } if svc.Proxy == nil { - return nil, errors.New("service is not a Connect proxy or mesh gateway") + return nil, errors.New("service is not a Connect proxy or gateway") } // Parse the bootstrap config @@ -560,12 +508,70 @@ return bsCfg.GenerateJSON(args) } -func (c *cmd) lookupProxyIDForSidecar() (string, error) { - return proxyCmd.LookupProxyIDForSidecar(c.client, c.sidecarFor) -} +// TODO: make method a function +func (c *cmd) grpcAddress(httpCfg *api.Config) (GRPC, error) { + g := GRPC{} + + addr := c.grpcAddr + // See if we need to lookup grpcAddr + if addr == "" { + port, err := c.lookupGRPCPort() + if err != nil { + c.UI.Error(fmt.Sprintf("Error connecting to Consul agent: %s", err)) + } + if port <= 0 { + // This is the dev mode default and recommended production setting if + // enabled. + port = 8502 + c.UI.Info(fmt.Sprintf("Defaulting to grpc port = %d", port)) + } + addr = fmt.Sprintf("localhost:%v", port) + } + + // TODO: parse addr as a url instead of strings.HasPrefix/TrimPrefix + + // Decide on TLS if the scheme is provided and indicates it, if the HTTP env + // suggests TLS is supported explicitly (CONSUL_HTTP_SSL) or implicitly + // (CONSUL_HTTP_ADDR) is https:// + switch { + case strings.HasPrefix(strings.ToLower(addr), "https://"): + g.AgentTLS = true + case httpCfg.Scheme == "https": + g.AgentTLS = true + } + + // We want to allow grpcAddr set as host:port with no scheme but if the host + // is an IP this will fail to parse as a URL with "parse 127.0.0.1:8500: first + // path segment in URL cannot contain colon". On the other hand we also + // support both http(s)://host:port and unix:///path/to/file. + if grpcAddr := strings.TrimPrefix(addr, "unix://"); grpcAddr != addr { + // Path to unix socket + g.AgentSocket = grpcAddr + } else { + // Parse as host:port with option http prefix + grpcAddr = strings.TrimPrefix(addr, "http://") + grpcAddr = strings.TrimPrefix(grpcAddr, "https://") + + var err error + var host string + host, g.AgentPort, err = net.SplitHostPort(grpcAddr) + if err != nil { + return g, fmt.Errorf("Invalid Consul HTTP address: %s", err) + } -func (c *cmd) lookupGatewayProxy() (*api.AgentService, error) { - return proxyCmd.LookupGatewayProxy(c.client) + // We use STATIC for agent which means we need to resolve DNS names like + // `localhost` ourselves. We could use STRICT_DNS or LOGICAL_DNS with envoy + // but Envoy resolves `localhost` differently to go on macOS at least which + // causes paper cuts like default dev agent (which binds specifically to + // 127.0.0.1) isn't reachable since Envoy resolves localhost to `[::]` and + // can't connect. + agentIP, err := net.ResolveIPAddr("ip", host) + if err != nil { + return g, fmt.Errorf("Failed to resolve agent address: %s", err) + } + g.AgentAddress = agentIP.String() + } + return g, nil } func (c *cmd) lookupGRPCPort() (int, error) { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/envoy_test.go consul-1.8.7+dfsg1/command/connect/envoy/envoy_test.go --- consul-1.7.4+dfsg1/command/connect/envoy/envoy_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/envoy_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,7 @@ import ( "encoding/json" "flag" + "github.com/stretchr/testify/assert" "io/ioutil" "net" "net/http" @@ -29,6 +30,50 @@ } } +func TestEnvoyGateway_Validation(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + args []string + output string + }{ + { + "-register for non-gateway", + []string{"-register", "-proxy-id", "not-a-gateway"}, + "Auto-Registration can only be used for gateways", + }, + { + "-mesh-gateway and -gateway cannot be combined", + []string{"-register", "-mesh-gateway", "-gateway", "mesh"}, + "The mesh-gateway flag is deprecated and cannot be used alongside the gateway flag", + }, + { + "no proxy registration specified nor discovered", + []string{""}, + "No proxy ID specified", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + ui := cli.NewMockUi() + c := New(ui) + c.init() + + code := c.Run(tc.args) + if code == 0 { + t.Errorf("%s: expected non-zero exit", tc.name) + } + + output := ui.ErrorWriter.String() + if !strings.Contains(output, tc.output) { + t.Errorf("expected %q to contain %q", output, tc.output) + } + }) + } +} + // testSetAndResetEnv sets the env vars passed as KEY=value strings in the // current ENV and returns a func() that will undo it's work at the end of the // test for use with defer. @@ -81,13 +126,14 @@ { Name: "defaults", Flags: []string{"-proxy-id", "test-proxy"}, - Env: []string{}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", // Note this is the gRPC port + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", // Note this is the gRPC port + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -98,13 +144,14 @@ Name: "token-arg", Flags: []string{"-proxy-id", "test-proxy", "-token", "c9a52720-bf6c-4aa6-b8bc-66881a5ade95"}, - Env: []string{}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", // Note this is the gRPC port + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", // Note this is the gRPC port + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -119,11 +166,13 @@ "CONSUL_HTTP_TOKEN=c9a52720-bf6c-4aa6-b8bc-66881a5ade95", }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", // Note this is the gRPC port + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", // Note this is the gRPC port + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -136,16 +185,17 @@ Flags: []string{"-proxy-id", "test-proxy", "-token-file", "@@TEMPDIR@@token.txt", }, - Env: []string{}, Files: map[string]string{ "token.txt": "c9a52720-bf6c-4aa6-b8bc-66881a5ade95", }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", // Note this is the gRPC port + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", // Note this is the gRPC port + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -163,11 +213,13 @@ "token.txt": "c9a52720-bf6c-4aa6-b8bc-66881a5ade95", }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", // Note this is the gRPC port + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", // Note this is the gRPC port + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -179,16 +231,17 @@ Name: "grpc-addr-flag", Flags: []string{"-proxy-id", "test-proxy", "-grpc-addr", "localhost:9999"}, - Env: []string{}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", + EnvoyVersion: defaultEnvoyVersion, ProxyCluster: "test-proxy", ProxyID: "test-proxy", // Should resolve IP, note this might not resolve the same way // everywhere which might make this test brittle but not sure what else // to do. - AgentAddress: "127.0.0.1", - AgentPort: "9999", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "9999", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -202,14 +255,16 @@ "CONSUL_GRPC_ADDR=localhost:9999", }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", + EnvoyVersion: defaultEnvoyVersion, ProxyCluster: "test-proxy", ProxyID: "test-proxy", // Should resolve IP, note this might not resolve the same way // everywhere which might make this test brittle but not sure what else // to do. - AgentAddress: "127.0.0.1", - AgentPort: "9999", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "9999", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -220,12 +275,13 @@ Name: "grpc-addr-unix", Flags: []string{"-proxy-id", "test-proxy", "-grpc-addr", "unix:///var/run/consul.sock"}, - Env: []string{}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentSocket: "/var/run/consul.sock", + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentSocket: "/var/run/consul.sock", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -237,14 +293,16 @@ Flags: []string{"-proxy-id", "test-proxy"}, GRPCPort: 9999, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", + EnvoyVersion: defaultEnvoyVersion, ProxyCluster: "test-proxy", ProxyID: "test-proxy", // Should resolve IP, note this might not resolve the same way // everywhere which might make this test brittle but not sure what else // to do. - AgentAddress: "127.0.0.1", - AgentPort: "9999", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "9999", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -254,16 +312,17 @@ { Name: "access-log-path", Flags: []string{"-proxy-id", "test-proxy", "-admin-access-log-path", "/some/path/access.log"}, - Env: []string{}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", + EnvoyVersion: defaultEnvoyVersion, ProxyCluster: "test-proxy", ProxyID: "test-proxy", // Should resolve IP, note this might not resolve the same way // everywhere which might make this test brittle but not sure what else // to do. - AgentAddress: "127.0.0.1", - AgentPort: "8502", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, AdminAccessLogPath: "/some/path/access.log", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -273,16 +332,17 @@ { Name: "missing-ca-file", Flags: []string{"-proxy-id", "test-proxy", "-ca-file", "some/path"}, - Env: []string{}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", + EnvoyVersion: defaultEnvoyVersion, ProxyCluster: "test-proxy", ProxyID: "test-proxy", // Should resolve IP, note this might not resolve the same way // everywhere which might make this test brittle but not sure what else // to do. - AgentAddress: "127.0.0.1", - AgentPort: "8502", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, }, WantErr: "Error loading CA File: open some/path: no such file or directory", }, @@ -291,15 +351,17 @@ Flags: []string{"-proxy-id", "test-proxy", "-ca-file", "../../../test/ca/root.cer"}, Env: []string{"CONSUL_HTTP_SSL=1"}, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", + EnvoyVersion: defaultEnvoyVersion, ProxyCluster: "test-proxy", ProxyID: "test-proxy", // Should resolve IP, note this might not resolve the same way // everywhere which might make this test brittle but not sure what else // to do. - AgentAddress: "127.0.0.1", - AgentPort: "8502", - AgentTLS: true, + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + AgentTLS: true, + }, AgentCAPEM: `-----BEGIN CERTIFICATE-----\nMIIEtzCCA5+gAwIBAgIJAIewRMI8OnvTMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD\nVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xHDAa\nBgNVBAoTE0hhc2hpQ29ycCBUZXN0IENlcnQxDDAKBgNVBAsTA0RldjEWMBQGA1UE\nAxMNdGVzdC5pbnRlcm5hbDEgMB4GCSqGSIb3DQEJARYRdGVzdEBpbnRlcm5hbC5j\nb20wHhcNMTQwNDA3MTkwMTA4WhcNMjQwNDA0MTkwMTA4WjCBmDELMAkGA1UEBhMC\nVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRwwGgYDVQQK\nExNIYXNoaUNvcnAgVGVzdCBDZXJ0MQwwCgYDVQQLEwNEZXYxFjAUBgNVBAMTDXRl\nc3QuaW50ZXJuYWwxIDAeBgkqhkiG9w0BCQEWEXRlc3RAaW50ZXJuYWwuY29tMIIB\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrs6JK4NpiOItxrpNR/1ppUU\nmH7p2BgLCBZ6eHdclle9J56i68adt8J85zaqphCfz6VDP58DsFx+N50PZyjQaDsU\nd0HejRqfHRMtg2O+UQkv4Z66+Vo+gc6uGuANi2xMtSYDVTAqqzF48OOPQDgYkzcG\nxcFZzTRFFZt2vPnyHj8cHcaFo/NMNVh7C3yTXevRGNm9u2mrbxCEeiHzFC2WUnvg\nU2jQuC7Fhnl33Zd3B6d3mQH6O23ncmwxTcPUJe6xZaIRrDuzwUcyhLj5Z3faag/f\npFIIcHSiHRfoqHLGsGg+3swId/zVJSSDHr7pJUu7Cre+vZa63FqDaooqvnisrQID\nAQABo4IBADCB/TAdBgNVHQ4EFgQUo/nrOfqvbee2VklVKIFlyQEbuJUwgc0GA1Ud\nIwSBxTCBwoAUo/nrOfqvbee2VklVKIFlyQEbuJWhgZ6kgZswgZgxCzAJBgNVBAYT\nAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEcMBoGA1UE\nChMTSGFzaGlDb3JwIFRlc3QgQ2VydDEMMAoGA1UECxMDRGV2MRYwFAYDVQQDEw10\nZXN0LmludGVybmFsMSAwHgYJKoZIhvcNAQkBFhF0ZXN0QGludGVybmFsLmNvbYIJ\nAIewRMI8OnvTMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADa9fV9h\ngjapBlkNmu64WX0Ufub5dsJrdHS8672P30S7ILB7Mk0W8sL65IezRsZnG898yHf9\n2uzmz5OvNTM9K380g7xFlyobSVq+6yqmmSAlA/ptAcIIZT727P5jig/DB7fzJM3g\njctDlEGOmEe50GQXc25VKpcpjAsNQi5ER5gowQ0v3IXNZs+yU+LvxLHc0rUJ/XSp\nlFCAMOqd5uRoMOejnT51G6krvLNzPaQ3N9jQfNVY4Q0zfs0M+6dRWvqfqB9Vyq8/\nPOLMld+HyAZEBk9zK3ZVIXx6XS4dkDnSNR91njLq7eouf6M7+7s/oMQZZRtAfQ6r\nwlW975rYa1ZqEdA=\n-----END CERTIFICATE-----\n`, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", @@ -308,9 +370,48 @@ }, }, { + Name: "missing-ca-path", + Flags: []string{"-proxy-id", "test-proxy", "-ca-path", "some/path"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + // Should resolve IP, note this might not resolve the same way + // everywhere which might make this test brittle but not sure what else + // to do. + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, + }, + WantErr: "lstat some/path: no such file or directory", + }, + { + Name: "existing-ca-path", + Flags: []string{"-proxy-id", "test-proxy", "-ca-path", "../../../test/ca_path/"}, + Env: []string{"CONSUL_HTTP_SSL=1"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + // Should resolve IP, note this might not resolve the same way + // everywhere which might make this test brittle but not sure what else + // to do. + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + AgentTLS: true, + }, + AgentCAPEM: `-----BEGIN CERTIFICATE-----\nMIIFADCCAuqgAwIBAgIBATALBgkqhkiG9w0BAQswEzERMA8GA1UEAxMIQ2VydEF1\ndGgwHhcNMTUwNTExMjI0NjQzWhcNMjUwNTExMjI0NjU0WjATMREwDwYDVQQDEwhD\nZXJ0QXV0aDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALcMByyynHsA\n+K4PJwo5+XHygaEZAhPGvHiKQK2Cbc9NDm0ZTzx0rA/dRTZlvouhDyzcJHm+6R1F\nj6zQv7iaSC3qQtJiPnPsfZ+/0XhFZ3fQWMnfDiGbZpF1kJF01ofB6vnsuocFC0zG\naGC+SZiLAzs+QMP3Bebw1elCBIeoN+8NWnRYmLsYIaYGJGBSbNo/lCpLTuinofUn\nL3ehWEGv1INwpHnSVeN0Ml2GFe23d7PUlj/wNIHgUdpUR+KEJxIP3klwtsI3QpSH\nc4VjWdf4aIcka6K3IFuw+K0PUh3xAAPnMpAQOtCZk0AhF5rlvUbevC6jADxpKxLp\nOONmvCTer4LtyNURAoBH52vbK0r/DNcTpPEFV0IP66nXUFgkk0mRKsu8HTb4IOkC\nX3K4mp18EiWUUtrHZAnNct0iIniDBqKK0yhSNhztG6VakVt/1WdQY9Ey3mNtxN1O\nthqWFKdpKUzPKYC3P6PfVpiE7+VbWTLLXba+8BPe8BxWPsVkjJqGSGnCte4COusz\nM8/7bbTgifwJfsepwFtZG53tvwjWlO46Exl30VoDNTaIGvs1fO0GqJlh2A7FN5F2\nS1rS5VYHtPK8QdmUSvyq+7JDBc1HNT5I2zsIQbNcLwDTZ5EsbU6QR7NHDJKxjv/w\nbs3eTXJSSNcFD74wRU10pXjgE5wOFu9TAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIA\nBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQHazgZ3Puiuc6K2LzgcX5b6fAC\nPzAfBgNVHSMEGDAWgBQHazgZ3Puiuc6K2LzgcX5b6fACPzALBgkqhkiG9w0BAQsD\nggIBAEmeNrSUhpHg1I8dtfqu9hCU/6IZThjtcFA+QcPkkMa+Z1k0SOtsgW8MdlcA\ngCf5g5yQZ0DdpWM9nDB6xDIhQdccm91idHgf8wmpEHUj0an4uyn2ESCt8eqrAWf7\nAClYORCASTYfguJCxcfvwtI1uqaOeCxSOdmFay79UVitVsWeonbCRGsVgBDifJxw\nG2oCQqoYAmXPM4J6syk5GHhB1O9MMq+g1+hOx9s+XHyTui9FL4V+IUO1ygVqEQB5\nPSiRBvcIsajSGVao+vK0gf2XfcXzqr3y3NhBky9rFMp1g+ykb2yWekV4WiROJlCj\nTsWwWZDRyjiGahDbho/XW8JciouHZhJdjhmO31rqW3HdFviCTdXMiGk3GQIzz/Jg\nP+enOaHXoY9lcxzDvY9z1BysWBgNvNrMnVge/fLP9o+a0a0PRIIVl8T0Ef3zeg1O\nCLCSy/1Vae5Tx63ZTFvGFdOSusYkG9rlAUHXZE364JRCKzM9Bz0bM+t+LaO0MaEb\nYoxcXEPU+gB2IvmARpInN3oHexR6ekuYHVTRGdWrdmuHFzc7eFwygRqTFdoCCU+G\nQZEkd+lOEyv0zvQqYg+Jp0AEGz2B2zB53uBVECtn0EqrSdPtRzUBSByXVs6QhSXn\neVmy+z3U3MecP63X6oSPXekqSyZFuegXpNNuHkjNoL4ep2ix\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEtzCCA5+gAwIBAgIJAIewRMI8OnvTMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD\nVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xHDAa\nBgNVBAoTE0hhc2hpQ29ycCBUZXN0IENlcnQxDDAKBgNVBAsTA0RldjEWMBQGA1UE\nAxMNdGVzdC5pbnRlcm5hbDEgMB4GCSqGSIb3DQEJARYRdGVzdEBpbnRlcm5hbC5j\nb20wHhcNMTQwNDA3MTkwMTA4WhcNMjQwNDA0MTkwMTA4WjCBmDELMAkGA1UEBhMC\nVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRwwGgYDVQQK\nExNIYXNoaUNvcnAgVGVzdCBDZXJ0MQwwCgYDVQQLEwNEZXYxFjAUBgNVBAMTDXRl\nc3QuaW50ZXJuYWwxIDAeBgkqhkiG9w0BCQEWEXRlc3RAaW50ZXJuYWwuY29tMIIB\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrs6JK4NpiOItxrpNR/1ppUU\nmH7p2BgLCBZ6eHdclle9J56i68adt8J85zaqphCfz6VDP58DsFx+N50PZyjQaDsU\nd0HejRqfHRMtg2O+UQkv4Z66+Vo+gc6uGuANi2xMtSYDVTAqqzF48OOPQDgYkzcG\nxcFZzTRFFZt2vPnyHj8cHcaFo/NMNVh7C3yTXevRGNm9u2mrbxCEeiHzFC2WUnvg\nU2jQuC7Fhnl33Zd3B6d3mQH6O23ncmwxTcPUJe6xZaIRrDuzwUcyhLj5Z3faag/f\npFIIcHSiHRfoqHLGsGg+3swId/zVJSSDHr7pJUu7Cre+vZa63FqDaooqvnisrQID\nAQABo4IBADCB/TAdBgNVHQ4EFgQUo/nrOfqvbee2VklVKIFlyQEbuJUwgc0GA1Ud\nIwSBxTCBwoAUo/nrOfqvbee2VklVKIFlyQEbuJWhgZ6kgZswgZgxCzAJBgNVBAYT\nAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEcMBoGA1UE\nChMTSGFzaGlDb3JwIFRlc3QgQ2VydDEMMAoGA1UECxMDRGV2MRYwFAYDVQQDEw10\nZXN0LmludGVybmFsMSAwHgYJKoZIhvcNAQkBFhF0ZXN0QGludGVybmFsLmNvbYIJ\nAIewRMI8OnvTMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADa9fV9h\ngjapBlkNmu64WX0Ufub5dsJrdHS8672P30S7ILB7Mk0W8sL65IezRsZnG898yHf9\n2uzmz5OvNTM9K380g7xFlyobSVq+6yqmmSAlA/ptAcIIZT727P5jig/DB7fzJM3g\njctDlEGOmEe50GQXc25VKpcpjAsNQi5ER5gowQ0v3IXNZs+yU+LvxLHc0rUJ/XSp\nlFCAMOqd5uRoMOejnT51G6krvLNzPaQ3N9jQfNVY4Q0zfs0M+6dRWvqfqB9Vyq8/\nPOLMld+HyAZEBk9zK3ZVIXx6XS4dkDnSNR91njLq7eouf6M7+7s/oMQZZRtAfQ6r\nwlW975rYa1ZqEdA=\n-----END CERTIFICATE-----\n`, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { Name: "custom-bootstrap", Flags: []string{"-proxy-id", "test-proxy"}, - Env: []string{}, ProxyConfig: map[string]interface{}{ // Add a completely custom bootstrap template. Never mind if this is // invalid envoy config just as long as it works and gets the variables @@ -334,11 +435,13 @@ }`, }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -348,7 +451,6 @@ { Name: "extra_-single", Flags: []string{"-proxy-id", "test-proxy"}, - Env: []string{}, ProxyConfig: map[string]interface{}{ // Add a custom sections with interpolated variables. These are all // invalid config syntax too but we are just testing they have the right @@ -367,11 +469,13 @@ }`, }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -381,7 +485,6 @@ { Name: "extra_-multiple", Flags: []string{"-proxy-id", "test-proxy"}, - Env: []string{}, ProxyConfig: map[string]interface{}{ // Add a custom sections with interpolated variables. These are all // invalid config syntax too but we are just testing they have the right @@ -405,11 +508,13 @@ } , { "name": "fake_sink_2" }`, }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -419,7 +524,6 @@ { Name: "stats-config-override", Flags: []string{"-proxy-id", "test-proxy"}, - Env: []string{}, ProxyConfig: map[string]interface{}{ // Add a custom sections with interpolated variables. These are all // invalid config syntax too but we are just testing they have the right @@ -430,11 +534,13 @@ }`, }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -444,7 +550,6 @@ { Name: "zipkin-tracing-config", Flags: []string{"-proxy-id", "test-proxy"}, - Env: []string{}, ProxyConfig: map[string]interface{}{ // Add a custom sections with interpolated variables. These are all // invalid config syntax too but we are just testing they have the right @@ -485,11 +590,120 @@ }`, }, WantArgs: BootstrapTplArgs{ - EnvoyVersion: "1.13.0", - ProxyCluster: "test-proxy", - ProxyID: "test-proxy", - AgentAddress: "127.0.0.1", - AgentPort: "8502", + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { + Name: "CONSUL_HTTP_ADDR-with-https-scheme-enables-tls", + Flags: []string{"-proxy-id", "test-proxy"}, + Env: []string{"CONSUL_HTTP_ADDR=https://127.0.0.1:8888"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "test-proxy", + ProxyID: "test-proxy", + // Should resolve IP, note this might not resolve the same way + // everywhere which might make this test brittle but not sure what else + // to do. + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + AgentTLS: true, + }, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { + Name: "ingress-gateway", + Flags: []string{"-proxy-id", "ingress-gateway-1", "-gateway", "ingress"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "ingress-gateway", + ProxyID: "ingress-gateway-1", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { + Name: "ingress-gateway-address-specified", + Flags: []string{"-proxy-id", "ingress-gateway", "-gateway", "ingress", "-address", "1.2.3.4:7777"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "ingress-gateway", + ProxyID: "ingress-gateway", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { + Name: "ingress-gateway-register-with-service-without-proxy-id", + Flags: []string{"-gateway", "ingress", "-register", "-service", "my-gateway", "-address", "127.0.0.1:7777"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "my-gateway", + ProxyID: "my-gateway", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { + Name: "ingress-gateway-register-with-service-and-proxy-id", + Flags: []string{"-gateway", "ingress", "-register", "-service", "my-gateway", "-proxy-id", "my-gateway-123", "-address", "127.0.0.1:7777"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "my-gateway", + ProxyID: "my-gateway-123", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, + AdminAccessLogPath: "/dev/null", + AdminBindAddress: "127.0.0.1", + AdminBindPort: "19000", + LocalAgentClusterName: xds.LocalAgentClusterName, + }, + }, + { + Name: "ingress-gateway-no-auto-register", + Flags: []string{"-gateway", "ingress", "-address", "127.0.0.1:7777"}, + WantArgs: BootstrapTplArgs{ + EnvoyVersion: defaultEnvoyVersion, + ProxyCluster: "ingress-gateway", + ProxyID: "ingress-gateway", + GRPC: GRPC{ + AgentAddress: "127.0.0.1", + AgentPort: "8502", + }, AdminAccessLogPath: "/dev/null", AdminBindAddress: "127.0.0.1", AdminBindPort: "19000", @@ -520,27 +734,28 @@ } } - ui := cli.NewMockUi() - c := New(ui) - // Run a mock agent API that just always returns the proxy config in the // test. srv := httptest.NewServer(testMockAgent(tc.ProxyConfig, tc.GRPCPort)) defer srv.Close() - - // Set the agent HTTP address in ENV to be our mock - tc.Env = append(tc.Env, "CONSUL_HTTP_ADDR="+srv.URL) + client, err := api.NewClient(&api.Config{Address: srv.URL}) + require.NoError(err) testDirPrefix := testDir + string(filepath.Separator) - - myFlags := copyAndReplaceAll(tc.Flags, "@@TEMPDIR@@", testDirPrefix) myEnv := copyAndReplaceAll(tc.Env, "@@TEMPDIR@@", testDirPrefix) - defer testSetAndResetEnv(t, myEnv)() + ui := cli.NewMockUi() + c := New(ui) + // explicitly set the client to one which can connect to the httptest.Server + c.client = client + // Run the command + myFlags := copyAndReplaceAll(tc.Flags, "@@TEMPDIR@@", testDirPrefix) args := append([]string{"-bootstrap"}, myFlags...) - code := c.Run(args) + + require.NoError(c.flags.Parse(args)) + code := c.run(c.flags.Args()) if tc.WantErr == "" { require.Equal(0, code, ui.ErrorWriter.String()) } else { @@ -573,11 +788,105 @@ } } +func TestEnvoy_GatewayRegistration(t *testing.T) { + t.Parallel() + a := agent.NewTestAgent(t, ``) + defer a.Shutdown() + client := a.Client() + + tt := []struct { + name string + args []string + kind api.ServiceKind + id string + service string + }{ + { + name: "register gateway with proxy-id and name", + args: []string{ + "-http-addr=" + a.HTTPAddr(), + "-register", + "-bootstrap", + "-gateway", "ingress", + "-service", "us-ingress", + "-proxy-id", "us-ingress-1", + }, + kind: api.ServiceKindIngressGateway, + id: "us-ingress-1", + service: "us-ingress", + }, + { + name: "register gateway without proxy-id with name", + args: []string{ + "-http-addr=" + a.HTTPAddr(), + "-register", + "-bootstrap", + "-gateway", "ingress", + "-service", "us-ingress", + }, + kind: api.ServiceKindIngressGateway, + id: "us-ingress", + service: "us-ingress", + }, + { + name: "register gateway without proxy-id and without name", + args: []string{ + "-http-addr=" + a.HTTPAddr(), + "-register", + "-bootstrap", + "-gateway", "ingress", + }, + kind: api.ServiceKindIngressGateway, + id: "ingress-gateway", + service: "ingress-gateway", + }, + { + name: "register gateway with proxy-id without name", + args: []string{ + "-http-addr=" + a.HTTPAddr(), + "-register", + "-bootstrap", + "-gateway", "ingress", + "-proxy-id", "us-ingress-1", + }, + kind: api.ServiceKindIngressGateway, + id: "us-ingress-1", + service: "ingress-gateway", + }, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + ui := cli.NewMockUi() + c := New(ui) + + code := c.Run(tc.args) + if code != 0 { + t.Fatalf("bad exit code: %d. %#v", code, ui.ErrorWriter.String()) + } + + data, _, err := client.Agent().Service(tc.id, nil) + assert.NoError(t, err) + + assert.NotNil(t, data) + assert.Equal(t, tc.kind, data.Kind) + assert.Equal(t, tc.id, data.ID) + assert.Equal(t, tc.service, data.Service) + assert.Equal(t, defaultGatewayPort, data.Port) + }) + } +} + // testMockAgent combines testMockAgentProxyConfig and testMockAgentSelf, // routing /agent/service/... requests to testMockAgentProxyConfig and // routing /agent/self requests to testMockAgentSelf. func testMockAgent(agentCfg map[string]interface{}, grpcPort int) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if strings.Contains(r.URL.Path, "/agent/services") { + testMockAgentGatewayConfig()(w, r) + return + } + if strings.Contains(r.URL.Path, "/agent/service") { testMockAgentProxyConfig(agentCfg)(w, r) return @@ -592,6 +901,39 @@ }) } +func testMockAgentGatewayConfig() http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Parse the proxy-id from the end of the URL (blindly assuming it's correct + // format) + params := r.URL.Query() + filter := params["filter"][0] + + var kind api.ServiceKind + switch { + case strings.Contains(filter, string(api.ServiceKindTerminatingGateway)): + kind = api.ServiceKindTerminatingGateway + case strings.Contains(filter, string(api.ServiceKindIngressGateway)): + kind = api.ServiceKindIngressGateway + } + + svc := map[string]*api.AgentService{ + string(kind): { + Kind: kind, + ID: string(kind), + Service: string(kind), + }, + } + + cfgJSON, err := json.Marshal(svc) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + w.Write(cfgJSON) + }) +} + func testMockAgentProxyConfig(cfg map[string]interface{}) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Parse the proxy-id from the end of the URL (blindly assuming it's correct diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/flags.go consul-1.8.7+dfsg1/command/connect/envoy/flags.go --- consul-1.7.4+dfsg1/command/connect/envoy/flags.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/flags.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,104 @@ +package envoy + +import ( + "flag" + "fmt" + "net" + "strconv" + "strings" + + "github.com/hashicorp/consul/api" + "github.com/hashicorp/go-sockaddr/template" +) + +const defaultGatewayPort int = 443 + +// ServiceAddressValue implements a flag.Value that may be used to parse an +// addr:port string into an api.ServiceAddress. +type ServiceAddressValue struct { + value api.ServiceAddress +} + +func (s *ServiceAddressValue) String() string { + if s == nil || (s.value.Port == 0 && s.value.Address == "") { + return fmt.Sprintf(":%d", defaultGatewayPort) + } + return fmt.Sprintf("%v:%d", s.value.Address, s.value.Port) +} + +func (s *ServiceAddressValue) Value() api.ServiceAddress { + if s == nil || s.value.Port == 0 && s.value.Address == "" { + return api.ServiceAddress{Port: defaultGatewayPort} + } + return s.value +} + +func (s *ServiceAddressValue) Set(raw string) error { + var err error + s.value, err = parseAddress(raw) + return err +} + +func parseAddress(raw string) (api.ServiceAddress, error) { + result := api.ServiceAddress{} + x, err := template.Parse(raw) + if err != nil { + return result, fmt.Errorf("Error parsing address %q: %v", raw, err) + } + + addr, portStr, err := net.SplitHostPort(x) + // Error message from Go's net/ipsock.go + if err != nil { + if !strings.Contains(err.Error(), "missing port in address") { + return result, fmt.Errorf("Error parsing address %q: %v", x, err) + } + + // Use the whole input as the address if there wasn't a port. + if ip := net.ParseIP(x); ip == nil { + return result, fmt.Errorf("Error parsing address %q: not an IP address", x) + } + addr = x + } + + port := defaultGatewayPort + if portStr != "" { + port, err = strconv.Atoi(portStr) + if err != nil { + return result, fmt.Errorf("Error parsing port %q: %v", portStr, err) + } + } + + result.Address = addr + result.Port = port + return result, nil +} + +var _ flag.Value = (*ServiceAddressValue)(nil) + +type ServiceAddressMapValue struct { + value map[string]api.ServiceAddress +} + +func (s *ServiceAddressMapValue) String() string { + buf := new(strings.Builder) + for k, v := range s.value { + buf.WriteString(fmt.Sprintf("%v=%v:%d,", k, v.Address, v.Port)) + } + return buf.String() +} + +func (s *ServiceAddressMapValue) Set(raw string) error { + if s.value == nil { + s.value = make(map[string]api.ServiceAddress) + } + idx := strings.Index(raw, "=") + if idx == -1 { + return fmt.Errorf(`Missing "=" in argument: %s`, raw) + } + key, value := raw[0:idx], raw[idx+1:] + var err error + s.value[key], err = parseAddress(value) + return err +} + +var _ flag.Value = (*ServiceAddressMapValue)(nil) diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/flags_test.go consul-1.8.7+dfsg1/command/connect/envoy/flags_test.go --- consul-1.7.4+dfsg1/command/connect/envoy/flags_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/flags_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,106 @@ +package envoy + +import ( + "testing" + + "github.com/hashicorp/consul/api" + "github.com/stretchr/testify/require" +) + +func TestServiceAddressValue_Value(t *testing.T) { + t.Run("nil receiver", func(t *testing.T) { + var addr *ServiceAddressValue + require.Equal(t, addr.Value(), api.ServiceAddress{Port: defaultGatewayPort}) + }) + + t.Run("default value", func(t *testing.T) { + addr := &ServiceAddressValue{} + require.Equal(t, addr.Value(), api.ServiceAddress{Port: defaultGatewayPort}) + }) + + t.Run("set value", func(t *testing.T) { + addr := &ServiceAddressValue{} + require.NoError(t, addr.Set("localhost:3333")) + require.Equal(t, addr.Value(), api.ServiceAddress{ + Address: "localhost", + Port: 3333, + }) + }) +} + +func TestServiceAddressValue_String(t *testing.T) { + t.Run("nil receiver", func(t *testing.T) { + var addr *ServiceAddressValue + require.Equal(t, addr.String(), ":443") + }) + + t.Run("default value", func(t *testing.T) { + addr := &ServiceAddressValue{} + require.Equal(t, addr.String(), ":443") + }) + + t.Run("set value", func(t *testing.T) { + addr := &ServiceAddressValue{} + require.NoError(t, addr.Set("localhost:3333")) + require.Equal(t, addr.String(), "localhost:3333") + }) +} + +func TestServiceAddressValue_Set(t *testing.T) { + var testcases = []struct { + name string + input string + expectedErr string + expectedValue api.ServiceAddress + }{ + { + name: "default port", + input: "8.8.8.8:", + expectedValue: api.ServiceAddress{ + Address: "8.8.8.8", + Port: defaultGatewayPort, + }, + }, + { + name: "valid address", + input: "8.8.8.8:1234", + expectedValue: api.ServiceAddress{Address: "8.8.8.8", Port: 1234}, + }, + { + name: "address with no port", + input: "8.8.8.8", + expectedValue: api.ServiceAddress{ + Address: "8.8.8.8", + Port: defaultGatewayPort, + }, + }, + { + name: "invalid addres", + input: "not-an-ip-address", + expectedErr: "not an IP address", + }, + { + name: "invalid port", + input: "localhost:notaport", + expectedErr: `Error parsing port "notaport"`, + }, + { + name: "invalid address format", + input: "too:many:colons", + expectedErr: "address too:many:colons: too many colons", + }, + } + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + addr := &ServiceAddressValue{} + err := addr.Set(tc.input) + if tc.expectedErr != "" { + require.Error(t, err) + require.Contains(t, err.Error(), tc.expectedErr) + return + } + + require.Equal(t, addr.Value(), tc.expectedValue) + }) + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/access-log-path.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/access-log-path.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/access-log-path.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/access-log-path.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/CONSUL_HTTP_ADDR-with-https-scheme-enables-tls.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/CONSUL_HTTP_ADDR-with-https-scheme-enables-tls.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/CONSUL_HTTP_ADDR-with-https-scheme-enables-tls.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/CONSUL_HTTP_ADDR-with-https-scheme-enables-tls.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "test-proxy", + "id": "test-proxy", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "tls_context": { + "common_tls_context": { + "validation_context": { + "trusted_ca": { + "inline_string": "" + } + } + } + }, + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "test-proxy" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/defaults.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/defaults.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/defaults.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/defaults.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/existing-ca-file.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/existing-ca-file.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/existing-ca-file.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/existing-ca-file.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/existing-ca-path.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/existing-ca-path.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/existing-ca-path.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/existing-ca-path.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "test-proxy", + "id": "test-proxy", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "tls_context": { + "common_tls_context": { + "validation_context": { + "trusted_ca": { + "inline_string": "-----BEGIN CERTIFICATE-----\nMIIFADCCAuqgAwIBAgIBATALBgkqhkiG9w0BAQswEzERMA8GA1UEAxMIQ2VydEF1\ndGgwHhcNMTUwNTExMjI0NjQzWhcNMjUwNTExMjI0NjU0WjATMREwDwYDVQQDEwhD\nZXJ0QXV0aDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALcMByyynHsA\n+K4PJwo5+XHygaEZAhPGvHiKQK2Cbc9NDm0ZTzx0rA/dRTZlvouhDyzcJHm+6R1F\nj6zQv7iaSC3qQtJiPnPsfZ+/0XhFZ3fQWMnfDiGbZpF1kJF01ofB6vnsuocFC0zG\naGC+SZiLAzs+QMP3Bebw1elCBIeoN+8NWnRYmLsYIaYGJGBSbNo/lCpLTuinofUn\nL3ehWEGv1INwpHnSVeN0Ml2GFe23d7PUlj/wNIHgUdpUR+KEJxIP3klwtsI3QpSH\nc4VjWdf4aIcka6K3IFuw+K0PUh3xAAPnMpAQOtCZk0AhF5rlvUbevC6jADxpKxLp\nOONmvCTer4LtyNURAoBH52vbK0r/DNcTpPEFV0IP66nXUFgkk0mRKsu8HTb4IOkC\nX3K4mp18EiWUUtrHZAnNct0iIniDBqKK0yhSNhztG6VakVt/1WdQY9Ey3mNtxN1O\nthqWFKdpKUzPKYC3P6PfVpiE7+VbWTLLXba+8BPe8BxWPsVkjJqGSGnCte4COusz\nM8/7bbTgifwJfsepwFtZG53tvwjWlO46Exl30VoDNTaIGvs1fO0GqJlh2A7FN5F2\nS1rS5VYHtPK8QdmUSvyq+7JDBc1HNT5I2zsIQbNcLwDTZ5EsbU6QR7NHDJKxjv/w\nbs3eTXJSSNcFD74wRU10pXjgE5wOFu9TAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIA\nBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQHazgZ3Puiuc6K2LzgcX5b6fAC\nPzAfBgNVHSMEGDAWgBQHazgZ3Puiuc6K2LzgcX5b6fACPzALBgkqhkiG9w0BAQsD\nggIBAEmeNrSUhpHg1I8dtfqu9hCU/6IZThjtcFA+QcPkkMa+Z1k0SOtsgW8MdlcA\ngCf5g5yQZ0DdpWM9nDB6xDIhQdccm91idHgf8wmpEHUj0an4uyn2ESCt8eqrAWf7\nAClYORCASTYfguJCxcfvwtI1uqaOeCxSOdmFay79UVitVsWeonbCRGsVgBDifJxw\nG2oCQqoYAmXPM4J6syk5GHhB1O9MMq+g1+hOx9s+XHyTui9FL4V+IUO1ygVqEQB5\nPSiRBvcIsajSGVao+vK0gf2XfcXzqr3y3NhBky9rFMp1g+ykb2yWekV4WiROJlCj\nTsWwWZDRyjiGahDbho/XW8JciouHZhJdjhmO31rqW3HdFviCTdXMiGk3GQIzz/Jg\nP+enOaHXoY9lcxzDvY9z1BysWBgNvNrMnVge/fLP9o+a0a0PRIIVl8T0Ef3zeg1O\nCLCSy/1Vae5Tx63ZTFvGFdOSusYkG9rlAUHXZE364JRCKzM9Bz0bM+t+LaO0MaEb\nYoxcXEPU+gB2IvmARpInN3oHexR6ekuYHVTRGdWrdmuHFzc7eFwygRqTFdoCCU+G\nQZEkd+lOEyv0zvQqYg+Jp0AEGz2B2zB53uBVECtn0EqrSdPtRzUBSByXVs6QhSXn\neVmy+z3U3MecP63X6oSPXekqSyZFuegXpNNuHkjNoL4ep2ix\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEtzCCA5+gAwIBAgIJAIewRMI8OnvTMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD\nVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xHDAa\nBgNVBAoTE0hhc2hpQ29ycCBUZXN0IENlcnQxDDAKBgNVBAsTA0RldjEWMBQGA1UE\nAxMNdGVzdC5pbnRlcm5hbDEgMB4GCSqGSIb3DQEJARYRdGVzdEBpbnRlcm5hbC5j\nb20wHhcNMTQwNDA3MTkwMTA4WhcNMjQwNDA0MTkwMTA4WjCBmDELMAkGA1UEBhMC\nVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRwwGgYDVQQK\nExNIYXNoaUNvcnAgVGVzdCBDZXJ0MQwwCgYDVQQLEwNEZXYxFjAUBgNVBAMTDXRl\nc3QuaW50ZXJuYWwxIDAeBgkqhkiG9w0BCQEWEXRlc3RAaW50ZXJuYWwuY29tMIIB\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrs6JK4NpiOItxrpNR/1ppUU\nmH7p2BgLCBZ6eHdclle9J56i68adt8J85zaqphCfz6VDP58DsFx+N50PZyjQaDsU\nd0HejRqfHRMtg2O+UQkv4Z66+Vo+gc6uGuANi2xMtSYDVTAqqzF48OOPQDgYkzcG\nxcFZzTRFFZt2vPnyHj8cHcaFo/NMNVh7C3yTXevRGNm9u2mrbxCEeiHzFC2WUnvg\nU2jQuC7Fhnl33Zd3B6d3mQH6O23ncmwxTcPUJe6xZaIRrDuzwUcyhLj5Z3faag/f\npFIIcHSiHRfoqHLGsGg+3swId/zVJSSDHr7pJUu7Cre+vZa63FqDaooqvnisrQID\nAQABo4IBADCB/TAdBgNVHQ4EFgQUo/nrOfqvbee2VklVKIFlyQEbuJUwgc0GA1Ud\nIwSBxTCBwoAUo/nrOfqvbee2VklVKIFlyQEbuJWhgZ6kgZswgZgxCzAJBgNVBAYT\nAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEcMBoGA1UE\nChMTSGFzaGlDb3JwIFRlc3QgQ2VydDEMMAoGA1UECxMDRGV2MRYwFAYDVQQDEw10\nZXN0LmludGVybmFsMSAwHgYJKoZIhvcNAQkBFhF0ZXN0QGludGVybmFsLmNvbYIJ\nAIewRMI8OnvTMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADa9fV9h\ngjapBlkNmu64WX0Ufub5dsJrdHS8672P30S7ILB7Mk0W8sL65IezRsZnG898yHf9\n2uzmz5OvNTM9K380g7xFlyobSVq+6yqmmSAlA/ptAcIIZT727P5jig/DB7fzJM3g\njctDlEGOmEe50GQXc25VKpcpjAsNQi5ER5gowQ0v3IXNZs+yU+LvxLHc0rUJ/XSp\nlFCAMOqd5uRoMOejnT51G6krvLNzPaQ3N9jQfNVY4Q0zfs0M+6dRWvqfqB9Vyq8/\nPOLMld+HyAZEBk9zK3ZVIXx6XS4dkDnSNR91njLq7eouf6M7+7s/oMQZZRtAfQ6r\nwlW975rYa1ZqEdA=\n-----END CERTIFICATE-----\n" + } + } + } + }, + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "test-proxy" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/extra_-multiple.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/extra_-multiple.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/extra_-multiple.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/extra_-multiple.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/extra_-single.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/extra_-single.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/extra_-single.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/extra_-single.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-config.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-config.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-config.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-config.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-env.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-env.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-env.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-env.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-flag.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-flag.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-flag.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-flag.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-unix.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-unix.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/grpc-addr-unix.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/grpc-addr-unix.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-address-specified.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-address-specified.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-address-specified.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-address-specified.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "ingress-gateway", + "id": "ingress-gateway", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "1.2.3.4", + "port_value": 7777 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "ingress-gateway" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "ingress-gateway-1", + "id": "ingress-gateway-1", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 443 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "ingress-gateway-1" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-no-auto-register.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-no-auto-register.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-no-auto-register.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-no-auto-register.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "ingress-gateway", + "id": "ingress-gateway", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 7777 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "ingress-gateway" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-without-service-with-proxy-id.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-without-service-with-proxy-id.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-without-service-with-proxy-id.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-without-service-with-proxy-id.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "my-gateway", + "id": "my-gateway", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.2" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 7777 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "my-gateway" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-and-proxy-id.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-and-proxy-id.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-and-proxy-id.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-and-proxy-id.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "my-gateway-123", + "id": "my-gateway-123", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 7777 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "my-gateway-123" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-without-proxy-id.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-without-proxy-id.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-without-proxy-id.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-register-with-service-without-proxy-id.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "my-gateway", + "id": "my-gateway", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.5" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 7777 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "my-gateway" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-without-register.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-without-register.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/ingress-gateway-without-register.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/ingress-gateway-without-register.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,189 @@ +{ + "admin": { + "access_log_path": "/dev/null", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + }, + "node": { + "cluster": "ingress-gateway", + "id": "ingress-gateway", + "metadata": { + "namespace": "default", + "envoy_version": "1.14.2" + } + }, + "static_resources": { + "clusters": [ + { + "name": "local_agent", + "connect_timeout": "1s", + "type": "STATIC", + "http2_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 8502 + } + } + ] + }, + { + "name": "self_admin", + "connect_timeout": "5s", + "type": "STATIC", + "http_protocol_options": {}, + "hosts": [ + { + "socket_address": { + "address": "127.0.0.1", + "port_value": 19000 + } + } + ] + } + ], + "listeners": [ + { + "name": "envoy_ready_listener", + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 7777 + } + }, + "filter_chains": [ + { + "filters": [ + { + "name": "envoy.http_connection_manager", + "config": { + "stat_prefix": "envoy_ready", + "codec_type": "HTTP1", + "route_config": { + "name": "self_admin_route", + "virtual_hosts": [ + { + "name": "self_admin", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/ready" + }, + "route": { + "cluster": "self_admin", + "prefix_rewrite": "/ready" + } + }, + { + "match": { + "prefix": "/" + }, + "direct_response": { + "status": 404 + } + } + ] + } + ] + }, + "http_filters": [ + { + "name": "envoy.router" + } + ] + } + } + ] + } + ] + } + ] + }, + "stats_config": { + "stats_tags": [ + { + "regex": "^cluster\\.((?:([^.]+)~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.custom_hash" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:([^.]+)\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service_subset" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.service" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.namespace" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.datacenter" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.[^.]+\\.consul\\.)", + "tag_name": "consul.routing_type" + }, + { + "regex": "^cluster\\.((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.([^.]+)\\.consul\\.)", + "tag_name": "consul.trust_domain" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+)\\.[^.]+\\.[^.]+\\.consul\\.)", + "tag_name": "consul.target" + }, + { + "regex": "^cluster\\.(((?:[^.]+~)?(?:[^.]+\\.)?[^.]+\\.[^.]+\\.[^.]+\\.[^.]+\\.[^.]+)\\.consul\\.)", + "tag_name": "consul.full_target" + }, + { + "tag_name": "local_cluster", + "fixed_value": "ingress-gateway" + } + ], + "use_all_default_tags": true + }, + "dynamic_resources": { + "lds_config": { + "ads": {} + }, + "cds_config": { + "ads": {} + }, + "ads_config": { + "api_type": "GRPC", + "grpc_services": { + "initial_metadata": [ + { + "key": "x-consul-token", + "value": "" + } + ], + "envoy_grpc": { + "cluster_name": "local_agent" + } + } + } + }, + "layered_runtime": { + "layers": [ + { + "name": "static_layer", + "static_layer": { + "envoy.deprecated_features:envoy.api.v2.Cluster.tls_context": true, + "envoy.deprecated_features:envoy.config.trace.v2.ZipkinConfig.HTTP_JSON_V1": true, + "envoy.deprecated_features:envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.Tracing.operation_name": true + } + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/stats-config-override.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/stats-config-override.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/stats-config-override.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/stats-config-override.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-arg.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-arg.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-arg.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-arg.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-env.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-env.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-env.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-env.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-file-arg.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-file-arg.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-file-arg.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-file-arg.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-file-env.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-file-env.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/token-file-env.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/token-file-env.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/envoy/testdata/zipkin-tracing-config.golden consul-1.8.7+dfsg1/command/connect/envoy/testdata/zipkin-tracing-config.golden --- consul-1.7.4+dfsg1/command/connect/envoy/testdata/zipkin-tracing-config.golden 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/envoy/testdata/zipkin-tracing-config.golden 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,7 @@ "id": "test-proxy", "metadata": { "namespace": "default", - "envoy_version": "1.13.0" + "envoy_version": "1.14.5" } }, "static_resources": { diff -Nru consul-1.7.4+dfsg1/command/connect/expose/expose.go consul-1.8.7+dfsg1/command/connect/expose/expose.go --- consul-1.7.4+dfsg1/command/connect/expose/expose.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/expose/expose.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,251 @@ +package expose + +import ( + "flag" + "fmt" + "strings" + + "github.com/hashicorp/consul/agent" + "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/command/flags" + "github.com/hashicorp/consul/command/intention/create" + "github.com/hashicorp/consul/command/intention/finder" + "github.com/mitchellh/cli" +) + +func New(ui cli.Ui) *cmd { + c := &cmd{UI: ui} + c.init() + return c +} + +type cmd struct { + UI cli.Ui + flags *flag.FlagSet + http *flags.HTTPFlags + help string + + // flags + ingressGateway string + service string + port int + protocol string + hosts flags.AppendSliceValue +} + +func (c *cmd) init() { + c.flags = flag.NewFlagSet("", flag.ContinueOnError) + c.flags.StringVar(&c.ingressGateway, "ingress-gateway", "", + "(Required) The name of the ingress gateway service to use. A namespace "+ + "can optionally be specified as a prefix via the 'namespace/service' format.") + + c.flags.StringVar(&c.service, "service", "", + "(Required) The name of destination service to expose. A namespace "+ + "can optionally be specified as a prefix via the 'namespace/service' format.") + + c.flags.IntVar(&c.port, "port", 0, + "(Required) The listener port to use for the service on the Ingress gateway.") + + c.flags.StringVar(&c.protocol, "protocol", "tcp", + "The protocol for the service. Defaults to 'tcp'.") + + c.flags.Var(&c.hosts, "host", "Additional DNS hostname to use for routing to this service."+ + "Can be specified multiple times.") + + c.http = &flags.HTTPFlags{} + flags.Merge(c.flags, c.http.ClientFlags()) + flags.Merge(c.flags, c.http.ServerFlags()) + c.help = flags.Usage(help, c.flags) +} + +func (c *cmd) Run(args []string) int { + if err := c.flags.Parse(args); err != nil { + if err == flag.ErrHelp { + return 0 + } + c.UI.Error(fmt.Sprintf("Failed to parse args: %v", err)) + return 1 + } + + // Set up a client. + client, err := c.http.APIClient() + if err != nil { + c.UI.Error(fmt.Sprintf("Error initializing client: %s", err)) + return 1 + } + + // Check for any missing or invalid flag values. + if c.service == "" { + c.UI.Error("A service name must be given via the -service flag.") + return 1 + } + svc, svcNamespace, err := create.ParseIntentionTarget(c.service) + if err != nil { + c.UI.Error(fmt.Sprintf("Invalid service name: %s", err)) + return 1 + } + + if c.ingressGateway == "" { + c.UI.Error("An ingress gateway service must be given via the -ingress-gateway flag.") + return 1 + } + gateway, gatewayNamespace, err := create.ParseIntentionTarget(c.ingressGateway) + if err != nil { + c.UI.Error(fmt.Sprintf("Invalid ingress gateway name: %s", err)) + return 1 + } + + if c.port == 0 { + c.UI.Error("A port must be provided via the -port flag.") + return 1 + } + + // First get the config entry for the ingress gateway, if it exists. Don't error if it's a 404 as that + // just means we'll need to create a new config entry. + conf, _, err := client.ConfigEntries().Get(api.IngressGateway, gateway, nil) + if err != nil && !strings.Contains(err.Error(), agent.ConfigEntryNotFoundErr) { + c.UI.Error(fmt.Sprintf("Error fetching existing ingress gateway configuration: %s", err)) + return 1 + } + if conf == nil { + conf = &api.IngressGatewayConfigEntry{ + Kind: api.IngressGateway, + Name: gateway, + Namespace: gatewayNamespace, + } + } + + // Make sure the flags don't conflict with existing config. + ingressConf, ok := conf.(*api.IngressGatewayConfigEntry) + if !ok { + // This should never happen + c.UI.Error(fmt.Sprintf("Config entry is an invalid type: %T", conf)) + return 1 + } + + listenerIdx := -1 + serviceIdx := -1 + newService := api.IngressService{ + Name: svc, + Namespace: svcNamespace, + Hosts: c.hosts, + } + for i, listener := range ingressConf.Listeners { + // Find the listener for the specified port, if one exists. + if listener.Port != c.port { + continue + } + + // Make sure the given protocol matches the existing one. + listenerIdx = i + if listener.Protocol != c.protocol { + c.UI.Error(fmt.Sprintf("Listener on port %d already configured with conflicting protocol %q", listener.Port, listener.Protocol)) + return 1 + } + + // Make sure the service isn't already exposed in this gateway + for j, service := range listener.Services { + if service.Name == svc && namespaceMatch(service.Namespace, svcNamespace) { + serviceIdx = j + c.UI.Output(fmt.Sprintf("Updating service definition for %q on listener with port %d", c.service, listener.Port)) + break + } + } + } + + // Add a service to the existing listener for the port if one exists, or make a new listener. + if listenerIdx >= 0 { + if serviceIdx >= 0 { + ingressConf.Listeners[listenerIdx].Services[serviceIdx] = newService + } else { + ingressConf.Listeners[listenerIdx].Services = append(ingressConf.Listeners[listenerIdx].Services, newService) + } + } else { + ingressConf.Listeners = append(ingressConf.Listeners, api.IngressListener{ + Port: c.port, + Protocol: c.protocol, + Services: []api.IngressService{newService}, + }) + } + + // Write the updated config entry using a check-and-set, so it fails if the entry + // has been changed since we looked it up. + succeeded, _, err := client.ConfigEntries().CAS(ingressConf, ingressConf.GetModifyIndex(), nil) + if err != nil { + c.UI.Error(fmt.Sprintf("Error writing ingress config entry: %v", err)) + return 1 + } + if !succeeded { + c.UI.Error("Ingress config entry was changed while attempting to update, please try again.") + return 1 + } + c.UI.Output(fmt.Sprintf("Successfully updated config entry for ingress service %q", gateway)) + + // Check for an existing intention. + ixnFinder := finder.Finder{Client: client} + existing, err := ixnFinder.Find(c.ingressGateway, c.service) + if err != nil { + c.UI.Error(fmt.Sprintf("Error looking up existing intention: %s", err)) + return 1 + } + if existing != nil && existing.Action == api.IntentionActionAllow { + c.UI.Output(fmt.Sprintf("Intention already exists for %q -> %q", c.ingressGateway, c.service)) + return 0 + } + + // Add the intention between the gateway service and the destination. + ixn := &api.Intention{ + SourceName: gateway, + SourceNS: gatewayNamespace, + DestinationName: svc, + DestinationNS: svcNamespace, + SourceType: api.IntentionSourceConsul, + Action: api.IntentionActionAllow, + } + if existing == nil { + _, _, err = client.Connect().IntentionCreate(ixn, nil) + if err != nil { + c.UI.Error(fmt.Sprintf("Error creating intention: %s", err)) + return 1 + } + } else { + _, err = client.Connect().IntentionUpdate(ixn, nil) + if err != nil { + c.UI.Error(fmt.Sprintf("Error updating intention: %s", err)) + return 1 + } + } + + c.UI.Output(fmt.Sprintf("Successfully set up intention for %q -> %q", c.ingressGateway, c.service)) + return 0 +} + +func namespaceMatch(a, b string) bool { + namespaceA := a + namespaceB := b + if namespaceA == "" { + namespaceA = structs.IntentionDefaultNamespace + } + if namespaceB == "" { + namespaceB = structs.IntentionDefaultNamespace + } + + return namespaceA == namespaceB +} + +func (c *cmd) Synopsis() string { + return synopsis +} + +func (c *cmd) Help() string { + return c.help +} + +const synopsis = "Expose a Connect-enabled service through an Ingress gateway" +const help = ` +Usage: consul connect expose [options] + + Exposes a Connect-enabled service through the given ingress gateway, using the + given protocol and port. +` diff -Nru consul-1.7.4+dfsg1/command/connect/expose/expose_test.go consul-1.8.7+dfsg1/command/connect/expose/expose_test.go --- consul-1.7.4+dfsg1/command/connect/expose/expose_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/expose/expose_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,343 @@ +package expose + +import ( + "testing" + + "github.com/hashicorp/consul/agent" + "github.com/hashicorp/consul/api" + "github.com/hashicorp/consul/testrpc" + "github.com/mitchellh/cli" + "github.com/stretchr/testify/require" +) + +func TestConnectExpose(t *testing.T) { + t.Parallel() + require := require.New(t) + a := agent.NewTestAgent(t, ``) + client := a.Client() + defer a.Shutdown() + + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=foo", + "-ingress-gateway=ingress", + "-port=8888", + "-protocol=tcp", + } + + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + } + + // Make sure the config entry and intention have been created. + entry, _, err := client.ConfigEntries().Get(api.IngressGateway, "ingress", nil) + require.NoError(err) + ns := entry.(*api.IngressGatewayConfigEntry).Namespace + expected := &api.IngressGatewayConfigEntry{ + Kind: api.IngressGateway, + Name: "ingress", + Namespace: ns, + Listeners: []api.IngressListener{ + { + Port: 8888, + Protocol: "tcp", + Services: []api.IngressService{ + { + Name: "foo", + Namespace: ns, + }, + }, + }, + }, + } + expected.CreateIndex = entry.GetCreateIndex() + expected.ModifyIndex = entry.GetModifyIndex() + require.Equal(expected, entry) + + ixns, _, err := client.Connect().Intentions(nil) + require.NoError(err) + require.Len(ixns, 1) + require.Equal("ingress", ixns[0].SourceName) + require.Equal("foo", ixns[0].DestinationName) + + // Run the command again with a different port, make sure the config entry + // is updated while intentions are unmodified. + { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=foo", + "-ingress-gateway=ingress", + "-port=7777", + "-protocol=tcp", + } + + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + expected.Listeners = append(expected.Listeners, api.IngressListener{ + Port: 7777, + Protocol: "tcp", + Services: []api.IngressService{ + { + Name: "foo", + Namespace: ns, + }, + }, + }) + + // Make sure the config entry/intention weren't affected. + entry, _, err = client.ConfigEntries().Get(api.IngressGateway, "ingress", nil) + require.NoError(err) + expected.ModifyIndex = entry.GetModifyIndex() + require.Equal(expected, entry) + + ixns, _, err = client.Connect().Intentions(nil) + require.NoError(err) + require.Len(ixns, 1) + require.Equal("ingress", ixns[0].SourceName) + require.Equal("foo", ixns[0].DestinationName) + } + + // Run the command again with a conflicting protocol, should exit with an error and + // cause no changes to config entry/intentions. + { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=bar", + "-ingress-gateway=ingress", + "-port=8888", + "-protocol=http", + } + + code := c.Run(args) + if code != 1 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + require.Contains(ui.ErrorWriter.String(), `conflicting protocol "tcp"`) + + // Make sure the config entry/intention weren't affected. + entry, _, err = client.ConfigEntries().Get(api.IngressGateway, "ingress", nil) + require.NoError(err) + require.Equal(expected, entry) + + ixns, _, err = client.Connect().Intentions(nil) + require.NoError(err) + require.Len(ixns, 1) + require.Equal("ingress", ixns[0].SourceName) + require.Equal("foo", ixns[0].DestinationName) + } +} + +func TestConnectExpose_invalidFlags(t *testing.T) { + t.Parallel() + require := require.New(t) + a := agent.NewTestAgent(t, ``) + defer a.Shutdown() + + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + t.Run("missing service", func(t *testing.T) { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + } + + code := c.Run(args) + if code != 1 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + require.Contains(ui.ErrorWriter.String(), "A service name must be given") + }) + t.Run("missing gateway", func(t *testing.T) { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=foo", + } + + code := c.Run(args) + if code != 1 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + require.Contains(ui.ErrorWriter.String(), "An ingress gateway service must be given") + }) + t.Run("missing port", func(t *testing.T) { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=foo", + "-ingress-gateway=ingress", + } + + code := c.Run(args) + if code != 1 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + require.Contains(ui.ErrorWriter.String(), "A port must be provided") + }) +} + +func TestConnectExpose_existingConfig(t *testing.T) { + t.Parallel() + require := require.New(t) + a := agent.NewTestAgent(t, ``) + client := a.Client() + defer a.Shutdown() + + // Create some service config entries to set their protocol. + for _, service := range []string{"bar", "zoo"} { + _, _, err := client.ConfigEntries().Set(&api.ServiceConfigEntry{ + Kind: "service-defaults", + Name: service, + Protocol: "http", + }, nil) + require.NoError(err) + } + + // Create an existing ingress config entry with some services. + ingressConf := &api.IngressGatewayConfigEntry{ + Kind: api.IngressGateway, + Name: "ingress", + Listeners: []api.IngressListener{ + { + Port: 8888, + Protocol: "tcp", + Services: []api.IngressService{ + { + Name: "foo", + }, + }, + }, + { + Port: 9999, + Protocol: "http", + Services: []api.IngressService{ + { + Name: "bar", + }, + }, + }, + }, + } + _, _, err := client.ConfigEntries().Set(ingressConf, nil) + require.NoError(err) + + // Add a service on a new port. + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=baz", + "-ingress-gateway=ingress", + "-port=10000", + "-protocol=tcp", + } + + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + // Make sure the ingress config was updated and existing services preserved. + entry, _, err := client.ConfigEntries().Get(api.IngressGateway, "ingress", nil) + require.NoError(err) + + entryConf := entry.(*api.IngressGatewayConfigEntry) + ingressConf.Listeners = append(ingressConf.Listeners, api.IngressListener{ + Port: 10000, + Protocol: "tcp", + Services: []api.IngressService{ + { + Name: "baz", + }, + }, + }) + ingressConf.Namespace = entryConf.Namespace + for i, listener := range ingressConf.Listeners { + listener.Services[0].Namespace = entryConf.Listeners[i].Services[0].Namespace + } + ingressConf.CreateIndex = entry.GetCreateIndex() + ingressConf.ModifyIndex = entry.GetModifyIndex() + require.Equal(ingressConf, entry) + } + + // Add an service on a port shared with an existing listener. + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=zoo", + "-ingress-gateway=ingress", + "-port=9999", + "-protocol=http", + "-host=foo.com", + "-host=foo.net", + } + + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + // Make sure the ingress config was updated and existing services preserved. + entry, _, err := client.ConfigEntries().Get(api.IngressGateway, "ingress", nil) + require.NoError(err) + + entryConf := entry.(*api.IngressGatewayConfigEntry) + ingressConf.Listeners[1].Services = append(ingressConf.Listeners[1].Services, api.IngressService{ + Name: "zoo", + Namespace: entryConf.Listeners[1].Services[1].Namespace, + Hosts: []string{"foo.com", "foo.net"}, + }) + ingressConf.CreateIndex = entry.GetCreateIndex() + ingressConf.ModifyIndex = entry.GetModifyIndex() + require.Equal(ingressConf, entry) + } + + // Update the bar service and add a custom host. + testrpc.WaitForTestAgent(t, a.RPC, "dc1") + { + ui := cli.NewMockUi() + c := New(ui) + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-service=bar", + "-ingress-gateway=ingress", + "-port=9999", + "-protocol=http", + "-host=bar.com", + } + + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + // Make sure the ingress config was updated and existing services preserved. + entry, _, err := client.ConfigEntries().Get(api.IngressGateway, "ingress", nil) + require.NoError(err) + + ingressConf.Listeners[1].Services[0].Hosts = []string{"bar.com"} + ingressConf.CreateIndex = entry.GetCreateIndex() + ingressConf.ModifyIndex = entry.GetModifyIndex() + require.Equal(ingressConf, entry) + } +} diff -Nru consul-1.7.4+dfsg1/command/connect/proxy/proxy.go consul-1.8.7+dfsg1/command/connect/proxy/proxy.go --- consul-1.7.4+dfsg1/command/connect/proxy/proxy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/proxy/proxy.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,6 @@ import ( "flag" "fmt" - "io" "log" "net" "net/http" @@ -43,8 +42,7 @@ shutdownCh <-chan struct{} - logOutput io.Writer - logger hclog.Logger + logger hclog.Logger // flags logLevel string @@ -133,17 +131,19 @@ } // Setup the log outputs - logConfig := &logging.Config{ + logConfig := logging.Config{ LogLevel: c.logLevel, Name: logging.Proxy, LogJSON: c.logJSON, } - logger, logGate, logOutput, ok := logging.Setup(logConfig, c.UI) - if !ok { + + logGate := logging.GatedWriter{Writer: &cli.UiWriter{Ui: c.UI}} + + logger, err := logging.Setup(logConfig, &logGate) + if err != nil { + c.UI.Error(err.Error()) return 1 } - c.logOutput = logOutput - c.logger = logger // Enable Pprof if needed @@ -248,30 +248,25 @@ return proxyIDs[0], nil } -// LookupGatewayProxyID finds the mesh-gateway service registered with the local -// agent if any and returns its service ID. It will return an ID if and only if -// there is exactly one registered mesh-gateway registered to the agent. -func LookupGatewayProxy(client *api.Client) (*api.AgentService, error) { - svcs, err := client.Agent().ServicesWithFilter("Kind == `mesh-gateway`") +// LookupGatewayProxy finds the gateway service registered with the local +// agent. If exactly one gateway exists it will be returned, otherwise an error +// is returned. +func LookupGatewayProxy(client *api.Client, kind api.ServiceKind) (*api.AgentService, error) { + svcs, err := client.Agent().ServicesWithFilter(fmt.Sprintf("Kind == `%s`", kind)) if err != nil { - return nil, fmt.Errorf("Failed looking up mesh-gateway instances: %v", err) - } - - var proxyIDs []string - for _, svc := range svcs { - proxyIDs = append(proxyIDs, svc.ID) + return nil, fmt.Errorf("Failed looking up %s instances: %v", kind, err) } switch len(svcs) { case 0: - return nil, fmt.Errorf("No mesh-gateway services registered with this agent") + return nil, fmt.Errorf("No %s services registered with this agent", kind) case 1: for _, svc := range svcs { return svc, nil } return nil, fmt.Errorf("This should be unreachable") default: - return nil, fmt.Errorf("Cannot lookup the mesh-gateway's proxy ID because multiple are registered with the agent") + return nil, fmt.Errorf("Cannot lookup the %s's proxy ID because multiple are registered with the agent", kind) } } diff -Nru consul-1.7.4+dfsg1/command/connect/proxy/proxy_test.go consul-1.8.7+dfsg1/command/connect/proxy/proxy_test.go --- consul-1.7.4+dfsg1/command/connect/proxy/proxy_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/proxy/proxy_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -113,7 +113,7 @@ require := require.New(t) // Register a few services with 0, 1 and 2 sidecars - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` services { name = "no-sidecar" port = 1111 diff -Nru consul-1.7.4+dfsg1/command/connect/proxy/register_test.go consul-1.8.7+dfsg1/command/connect/proxy/register_test.go --- consul-1.7.4+dfsg1/command/connect/proxy/register_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/connect/proxy/register_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -39,7 +39,7 @@ func TestRegisterMonitor_heartbeat(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/debug/debug_test.go consul-1.8.7+dfsg1/command/debug/debug_test.go --- consul-1.7.4+dfsg1/command/debug/debug_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/debug/debug_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -30,7 +30,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` enable_debug = true `) @@ -67,7 +67,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` enable_debug = true `) defer a.Shutdown() @@ -152,7 +152,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -184,7 +184,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -265,7 +265,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` enable_debug = true `) @@ -331,7 +331,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` enable_debug = true `) defer a.Shutdown() @@ -409,7 +409,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") @@ -441,7 +441,7 @@ testDir := testutil.TempDir(t, "debug") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` enable_debug = false `) defer a.Shutdown() diff -Nru consul-1.7.4+dfsg1/command/event/event_test.go consul-1.8.7+dfsg1/command/event/event_test.go --- consul-1.7.4+dfsg1/command/event/event_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/event/event_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ func TestEventCommand(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ``) + a1 := agent.NewTestAgent(t, ``) defer a1.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/exec/exec_test.go consul-1.8.7+dfsg1/command/exec/exec_test.go --- consul-1.7.4+dfsg1/command/exec/exec_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/exec/exec_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,7 @@ func TestExecCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a.Shutdown() @@ -45,7 +45,7 @@ func TestExecCommand_NoShell(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a.Shutdown() @@ -68,14 +68,14 @@ func TestExecCommand_CrossDC(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ` + a1 := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a1.Shutdown() testrpc.WaitForTestAgent(t, a1.RPC, "dc1") - a2 := agent.NewTestAgent(t, t.Name(), ` + a2 := agent.NewTestAgent(t, ` datacenter = "dc2" disable_remote_exec = false `) @@ -150,7 +150,7 @@ func TestExecCommand_Sessions(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a.Shutdown() @@ -190,7 +190,7 @@ func TestExecCommand_Sessions_Foreign(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a.Shutdown() @@ -240,7 +240,7 @@ func TestExecCommand_UploadDestroy(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a.Shutdown() @@ -297,7 +297,7 @@ func TestExecCommand_StreamResults(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` disable_remote_exec = false `) defer a.Shutdown() diff -Nru consul-1.7.4+dfsg1/command/flags/http.go consul-1.8.7+dfsg1/command/flags/http.go --- consul-1.7.4+dfsg1/command/flags/http.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/flags/http.go 2020-12-10 21:46:52.000000000 +0000 @@ -79,7 +79,7 @@ fs.Var(&f.namespace, "namespace", "Specifies the namespace to query. If not provided, the namespace will be inferred "+ "from the request's ACL token, or will default to the `default` namespace. "+ - "Namespaces is a Consul Enterprise feature.") + "Namespaces are a Consul Enterprise feature.") return fs } diff -Nru consul-1.7.4+dfsg1/command/forceleave/forceleave_test.go consul-1.8.7+dfsg1/command/forceleave/forceleave_test.go --- consul-1.7.4+dfsg1/command/forceleave/forceleave_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/forceleave/forceleave_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,8 @@ func TestForceLeaveCommand(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ``) - a2 := agent.NewTestAgent(t, t.Name(), ``) + a1 := agent.NewTestAgent(t, ``) + a2 := agent.NewTestAgent(t, ``) defer a1.Shutdown() defer a2.Shutdown() @@ -58,7 +58,7 @@ func TestForceLeaveCommand_NoNodeWithName(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ``) + a1 := agent.NewTestAgent(t, ``) defer a1.Shutdown() ui := cli.NewMockUi() @@ -76,9 +76,9 @@ func TestForceLeaveCommand_prune(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name()+"-a1", ``) + a1 := agent.StartTestAgent(t, agent.TestAgent{Name: "Agent1"}) defer a1.Shutdown() - a2 := agent.NewTestAgent(t, t.Name()+"-a2", ``) + a2 := agent.StartTestAgent(t, agent.TestAgent{Name: "Agent2"}) defer a2.Shutdown() _, err := a2.JoinLAN([]string{a1.Config.SerfBindAddrLAN.String()}) diff -Nru consul-1.7.4+dfsg1/command/info/info_test.go consul-1.8.7+dfsg1/command/info/info_test.go --- consul-1.7.4+dfsg1/command/info/info_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/info/info_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ func TestInfoCommand(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ``) + a1 := agent.NewTestAgent(t, ``) defer a1.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/intention/check/check_test.go consul-1.8.7+dfsg1/command/intention/check/check_test.go --- consul-1.7.4+dfsg1/command/intention/check/check_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/check/check_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -68,7 +68,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/intention/create/create.go consul-1.8.7+dfsg1/command/intention/create/create.go --- consul-1.7.4+dfsg1/command/intention/create/create.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/create/create.go 2020-12-10 21:46:52.000000000 +0000 @@ -136,10 +136,10 @@ return 0 } -// parseIntentionTarget parses a target of the form / and returns +// ParseIntentionTarget parses a target of the form / and returns // the two distinct parts. In some cases the namespace may be elided and this function // will return the empty string for the namespace then. -func parseIntentionTarget(input string) (name string, namespace string, err error) { +func ParseIntentionTarget(input string) (name string, namespace string, err error) { // Get the index to the '/'. If it doesn't exist, we have just a name // so just set that and return. idx := strings.IndexByte(input, '/') @@ -171,12 +171,12 @@ return nil, fmt.Errorf("Must specify two arguments: source and destination") } - srcName, srcNamespace, err := parseIntentionTarget(args[0]) + srcName, srcNamespace, err := ParseIntentionTarget(args[0]) if err != nil { return nil, fmt.Errorf("Invalid intention source: %v", err) } - dstName, dstNamespace, err := parseIntentionTarget(args[1]) + dstName, dstNamespace, err := ParseIntentionTarget(args[1]) if err != nil { return nil, fmt.Errorf("Invalid intention destination: %v", err) } @@ -249,7 +249,7 @@ $ echo "{ ... }" | consul intention create -file - - An "allow" intention is created by default (whitelist). To create a + An "allow" intention is created by default (allowlist). To create a "deny" intention, the "-deny" flag should be specified. If a conflicting intention is found, creation will fail. To replace any diff -Nru consul-1.7.4+dfsg1/command/intention/create/create_test.go consul-1.8.7+dfsg1/command/intention/create/create_test.go --- consul-1.7.4+dfsg1/command/intention/create/create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/create/create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -60,7 +60,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -85,7 +85,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -111,7 +111,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -137,7 +137,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -171,7 +171,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -191,7 +191,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/intention/delete/delete_test.go consul-1.8.7+dfsg1/command/intention/delete/delete_test.go --- consul-1.7.4+dfsg1/command/intention/delete/delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/delete/delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -63,7 +63,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/intention/finder/finder_test.go consul-1.8.7+dfsg1/command/intention/finder/finder_test.go --- consul-1.7.4+dfsg1/command/intention/finder/finder_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/finder/finder_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,7 +12,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/intention/get/get_test.go consul-1.8.7+dfsg1/command/intention/get/get_test.go --- consul-1.7.4+dfsg1/command/intention/get/get_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/get/get_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -63,7 +63,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -95,7 +95,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -127,7 +127,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/intention/match/match_test.go consul-1.8.7+dfsg1/command/intention/match/match_test.go --- consul-1.7.4+dfsg1/command/intention/match/match_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/intention/match/match_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -68,7 +68,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -111,7 +111,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/join/join_test.go consul-1.8.7+dfsg1/command/join/join_test.go --- consul-1.7.4+dfsg1/command/join/join_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/join/join_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,8 +17,8 @@ func TestJoinCommandJoin_lan(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ``) - a2 := agent.NewTestAgent(t, t.Name(), ``) + a1 := agent.NewTestAgent(t, ``) + a2 := agent.NewTestAgent(t, ``) defer a1.Shutdown() defer a2.Shutdown() @@ -41,8 +41,8 @@ func TestJoinCommand_wan(t *testing.T) { t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ``) - a2 := agent.NewTestAgent(t, t.Name(), ``) + a1 := agent.NewTestAgent(t, ``) + a2 := agent.NewTestAgent(t, ``) defer a1.Shutdown() defer a2.Shutdown() diff -Nru consul-1.7.4+dfsg1/command/keyring/keyring.go consul-1.8.7+dfsg1/command/keyring/keyring.go --- consul-1.7.4+dfsg1/command/keyring/keyring.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/keyring/keyring.go 2020-12-10 21:46:52.000000000 +0000 @@ -3,6 +3,7 @@ import ( "flag" "fmt" + "strings" "github.com/hashicorp/consul/agent" consulapi "github.com/hashicorp/consul/api" @@ -23,12 +24,13 @@ help string // flags - installKey string - useKey string - removeKey string - listKeys bool - relay int - local bool + installKey string + useKey string + removeKey string + listKeys bool + listPrimaryKeys bool + relay int + local bool } func (c *cmd) init() { @@ -45,6 +47,8 @@ "performed on keys which are not currently the primary key.") c.flags.BoolVar(&c.listKeys, "list", false, "List all keys currently in use within the cluster.") + c.flags.BoolVar(&c.listPrimaryKeys, "list-primary", false, + "List all primary keys currently in use within the cluster.") c.flags.IntVar(&c.relay, "relay-factor", 0, "Setting this to a non-zero value will cause nodes to relay their response "+ "to the operation through this many randomly-chosen other nodes in the "+ @@ -58,6 +62,22 @@ c.help = flags.Usage(help, c.flags) } +func numberActions(listKeys, listPrimaryKeys bool, installKey, useKey, removeKey string) int { + count := 0 + if listKeys { + count++ + } + if listPrimaryKeys { + count++ + } + for _, arg := range []string{installKey, useKey, removeKey} { + if len(arg) > 0 { + count++ + } + } + return count +} + func (c *cmd) Run(args []string) int { if err := c.flags.Parse(args); err != nil { return 1 @@ -70,21 +90,15 @@ Ui: c.UI, } - // Only accept a single argument - found := c.listKeys - for _, arg := range []string{c.installKey, c.useKey, c.removeKey} { - if found && len(arg) > 0 { - c.UI.Error("Only a single action is allowed") - return 1 - } - found = found || len(arg) > 0 - } - - // Fail fast if no actionable args were passed - if !found { + num := numberActions(c.listKeys, c.listPrimaryKeys, c.installKey, c.useKey, c.removeKey) + if num == 0 { c.UI.Error(c.Help()) return 1 } + if num > 1 { + c.UI.Error("Only a single action is allowed") + return 1 + } // Validate the relay factor relayFactor, err := agent.ParseRelayFactor(c.relay) @@ -114,7 +128,22 @@ c.UI.Error(fmt.Sprintf("error: %s", err)) return 1 } - c.handleList(responses) + for _, response := range responses { + c.UI.Output(formatResponse(response, response.Keys)) + } + return 0 + } + + if c.listPrimaryKeys { + c.UI.Info("Gathering installed primary encryption keys...") + responses, err := client.Operator().KeyringList(&consulapi.QueryOptions{RelayFactor: relayFactor, LocalOnly: c.local}) + if err != nil { + c.UI.Error(fmt.Sprintf("error: %s", err)) + return 1 + } + for _, response := range responses { + c.UI.Output(formatResponse(response, response.PrimaryKeys)) + } return 0 } @@ -153,27 +182,40 @@ return 0 } -func (c *cmd) handleList(responses []*consulapi.KeyringResponse) { - for _, response := range responses { - pool := response.Datacenter + " (LAN)" - if response.Segment != "" { - pool += fmt.Sprintf(" [%s]", response.Segment) - } - if response.WAN { - pool = "WAN" - } +func formatResponse(response *consulapi.KeyringResponse, keys map[string]int) string { + b := new(strings.Builder) + b.WriteString("\n") + b.WriteString(poolName(response.Datacenter, response.WAN, response.Segment)) + b.WriteString(formatMessages(response.Messages)) + b.WriteString(formatKeys(keys, response.NumNodes)) + return strings.TrimRight(b.String(), "\n") +} - c.UI.Output("") - c.UI.Output(pool + ":") +func poolName(dc string, wan bool, segment string) string { + pool := fmt.Sprintf("%s (LAN)", dc) + if wan { + pool = "WAN" + } + if segment != "" { + segment = fmt.Sprintf(" [%s]", segment) + } + return fmt.Sprintf("%s%s:\n", pool, segment) +} - for from, msg := range response.Messages { - c.UI.Output(fmt.Sprintf(" ===> %s: %s", from, msg)) - } +func formatMessages(messages map[string]string) string { + b := new(strings.Builder) + for from, msg := range messages { + b.WriteString(fmt.Sprintf(" ===> %s: %s\n", from, msg)) + } + return b.String() +} - for key, num := range response.Keys { - c.UI.Output(fmt.Sprintf(" %s [%d/%d]", key, num, response.NumNodes)) - } +func formatKeys(keys map[string]int, total int) string { + b := new(strings.Builder) + for key, num := range keys { + b.WriteString(fmt.Sprintf(" %s [%d/%d]\n", key, num, total)) } + return b.String() } func (c *cmd) Synopsis() string { diff -Nru consul-1.7.4+dfsg1/command/keyring/keyring_test.go consul-1.8.7+dfsg1/command/keyring/keyring_test.go --- consul-1.7.4+dfsg1/command/keyring/keyring_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/keyring/keyring_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,7 +5,9 @@ "testing" "github.com/hashicorp/consul/agent" + consulapi "github.com/hashicorp/consul/api" "github.com/mitchellh/cli" + "github.com/stretchr/testify/require" ) func TestKeyringCommand_noTabs(t *testing.T) { @@ -21,7 +23,7 @@ key2 := "kZyFABeAmc64UMTrm9XuKA==" // Begin with a single key - a1 := agent.NewTestAgent(t, t.Name(), ` + a1 := agent.NewTestAgent(t, ` encrypt = "`+key1+`" `) defer a1.Shutdown() @@ -51,6 +53,16 @@ // Rotate to key2, remove key1 useKey(t, a1.HTTPAddr(), key2) + + // New key should be present + out = listPrimaryKeys(t, a1.HTTPAddr()) + if strings.Contains(out, key1) { + t.Fatalf("bad: %#v", out) + } + if !strings.Contains(out, key2) { + t.Fatalf("bad: %#v", out) + } + removeKey(t, a1.HTTPAddr(), key1) // Only key2 is present now @@ -132,6 +144,19 @@ return ui.OutputWriter.String() } +func listPrimaryKeys(t *testing.T, addr string) string { + ui := cli.NewMockUi() + c := New(ui) + + args := []string{"-list-primary", "-http-addr=" + addr} + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + return ui.OutputWriter.String() +} + func installKey(t *testing.T, addr string, key string) { ui := cli.NewMockUi() c := New(ui) @@ -164,3 +189,42 @@ t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) } } + +func TestKeyringCommand_poolName(t *testing.T) { + require.Equal(t, "dc1 (LAN):\n", poolName("dc1", false, "")) + require.Equal(t, "dc1 (LAN) [segment1]:\n", poolName("dc1", false, "segment1")) + require.Equal(t, "WAN:\n", poolName("dc1", true, "")) +} + +func TestKeyringCommand_formatKeys(t *testing.T) { + require.Equal(t, "", formatKeys(map[string]int{}, 0)) + keys := formatKeys(map[string]int{"key1": 1, "key2": 2}, 2) + require.Contains(t, keys, " key1 [1/2]\n") + require.Contains(t, keys, " key2 [2/2]\n") +} + +func TestKeyringCommand_formatMessages(t *testing.T) { + require.Equal(t, "", formatMessages(map[string]string{})) + messages := formatMessages(map[string]string{"n1": "hello", "n2": "world"}) + require.Contains(t, messages, " ===> n1: hello\n") + require.Contains(t, messages, " ===> n2: world\n") +} + +func TestKeyringCommand_formatResponse(t *testing.T) { + response := &consulapi.KeyringResponse{Datacenter: "dc1", NumNodes: 1} + keys := map[string]int{"key1": 1} + require.Equal(t, "\ndc1 (LAN):\n key1 [1/1]", formatResponse(response, keys)) + + response = &consulapi.KeyringResponse{WAN: true, Datacenter: "dc1", NumNodes: 1} + keys = map[string]int{"key1": 1} + require.Equal(t, "\nWAN:\n key1 [1/1]", formatResponse(response, keys)) +} + +func TestKeyringCommand_numActions(t *testing.T) { + require.Equal(t, 0, numberActions(false, false, "", "", "")) + require.Equal(t, 1, numberActions(true, false, "", "", "")) + require.Equal(t, 1, numberActions(false, true, "", "", "")) + require.Equal(t, 1, numberActions(false, false, "1", "", "")) + require.Equal(t, 2, numberActions(true, false, "1", "", "")) + require.Equal(t, 2, numberActions(false, false, "1", "1", "")) +} diff -Nru consul-1.7.4+dfsg1/command/kv/del/kv_delete_test.go consul-1.8.7+dfsg1/command/kv/del/kv_delete_test.go --- consul-1.7.4+dfsg1/command/kv/del/kv_delete_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/kv/del/kv_delete_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -72,7 +72,7 @@ func TestKVDeleteCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -109,7 +109,7 @@ func TestKVDeleteCommand_Recurse(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -153,7 +153,7 @@ func TestKVDeleteCommand_CAS(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/kv/exp/kv_export_test.go consul-1.8.7+dfsg1/command/kv/exp/kv_export_test.go --- consul-1.7.4+dfsg1/command/kv/exp/kv_export_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/kv/exp/kv_export_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ func TestKVExportCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/kv/get/kv_get.go consul-1.8.7+dfsg1/command/kv/get/kv_get.go --- consul-1.7.4+dfsg1/command/kv/get/kv_get.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/kv/get/kv_get.go 2020-12-10 21:46:52.000000000 +0000 @@ -109,7 +109,7 @@ } for _, k := range keys { - c.UI.Info(string(k)) + c.UI.Info(k) } return 0 diff -Nru consul-1.7.4+dfsg1/command/kv/get/kv_get_test.go consul-1.8.7+dfsg1/command/kv/get/kv_get_test.go --- consul-1.7.4+dfsg1/command/kv/get/kv_get_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/kv/get/kv_get_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -59,7 +59,7 @@ func TestKVGetCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -93,7 +93,7 @@ func TestKVGetCommand_Base64(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -128,7 +128,7 @@ func TestKVGetCommand_Missing(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -147,7 +147,7 @@ func TestKVGetCommand_Empty(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -176,7 +176,7 @@ func TestKVGetCommand_Detailed(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -220,7 +220,7 @@ func TestKVGetCommand_Keys(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -255,7 +255,7 @@ func TestKVGetCommand_Recurse(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -295,7 +295,7 @@ func TestKVGetCommand_RecurseBase64(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -336,7 +336,7 @@ func TestKVGetCommand_DetailedBase64(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/kv/imp/kv_import_test.go consul-1.8.7+dfsg1/command/kv/imp/kv_import_test.go --- consul-1.7.4+dfsg1/command/kv/imp/kv_import_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/kv/imp/kv_import_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ func TestKVImportCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/kv/put/kv_put_test.go consul-1.8.7+dfsg1/command/kv/put/kv_put_test.go --- consul-1.7.4+dfsg1/command/kv/put/kv_put_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/kv/put/kv_put_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -77,7 +77,7 @@ func TestKVPutCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -106,7 +106,7 @@ func TestKVPutCommand_EmptyDataQuoted(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -135,7 +135,7 @@ func TestKVPutCommand_Base64(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -172,7 +172,7 @@ func TestKVPutCommand_File(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -227,7 +227,7 @@ func TestKVPutCommand_Stdin(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -264,7 +264,7 @@ func TestKVPutCommand_NegativeVal(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -293,7 +293,7 @@ func TestKVPutCommand_Flags(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -323,7 +323,7 @@ func TestKVPutCommand_CAS(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/leave/leave_test.go consul-1.8.7+dfsg1/command/leave/leave_test.go --- consul-1.7.4+dfsg1/command/leave/leave_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/leave/leave_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ func TestLeaveCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -36,7 +36,7 @@ func TestLeaveCommand_FailOnNonFlagArgs(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/lock/lock_test.go consul-1.8.7+dfsg1/command/lock/lock_test.go --- consul-1.7.4+dfsg1/command/lock/lock_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/lock/lock_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -42,7 +42,7 @@ func TestLockCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -67,7 +67,7 @@ func TestLockCommand_NoShell(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -92,7 +92,7 @@ func TestLockCommand_TryLock(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -126,7 +126,7 @@ func TestLockCommand_TrySemaphore(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -160,7 +160,7 @@ func TestLockCommand_MonitorRetry_Lock_Default(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -195,7 +195,7 @@ func TestLockCommand_MonitorRetry_Semaphore_Default(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -230,7 +230,7 @@ func TestLockCommand_MonitorRetry_Lock_Arg(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -265,7 +265,7 @@ func TestLockCommand_MonitorRetry_Semaphore_Arg(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -300,7 +300,7 @@ func TestLockCommand_ChildExitCode(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/login/login.go consul-1.8.7+dfsg1/command/login/login.go --- consul-1.7.4+dfsg1/command/login/login.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/login/login.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,10 +29,14 @@ bearerToken string // flags - authMethodName string + authMethodName string + authMethodType string + bearerTokenFile string tokenSinkFile string meta map[string]string + + enterpriseCmd } func (c *cmd) init() { @@ -41,6 +45,9 @@ c.flags.StringVar(&c.authMethodName, "method", "", "Name of the auth method to login to.") + c.flags.StringVar(&c.authMethodType, "type", "", + "Type of the auth method to login to. This field is optional and defaults to no type.") + c.flags.StringVar(&c.bearerTokenFile, "bearer-token-file", "", "Path to a file containing a secret bearer token to use with this auth method.") @@ -51,6 +58,8 @@ "Metadata to set on the token, formatted as key=value. This flag "+ "may be specified multiple times to set multiple meta fields.") + c.initEnterpriseFlags() + c.http = &flags.HTTPFlags{} flags.Merge(c.flags, c.http.ClientFlags()) flags.Merge(c.flags, c.http.ServerFlags()) @@ -76,6 +85,10 @@ return 1 } + return c.login() +} + +func (c *cmd) bearerTokenLogin() int { if c.bearerTokenFile == "" { c.UI.Error(fmt.Sprintf("Missing required '-bearer-token-file' flag")) return 1 diff -Nru consul-1.7.4+dfsg1/command/login/login_oss.go consul-1.8.7+dfsg1/command/login/login_oss.go --- consul-1.7.4+dfsg1/command/login/login_oss.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/login/login_oss.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +//+build !consulent + +package login + +type enterpriseCmd struct { +} + +func (c *cmd) initEnterpriseFlags() { +} + +func (c *cmd) login() int { + return c.bearerTokenLogin() +} diff -Nru consul-1.7.4+dfsg1/command/login/login_test.go consul-1.8.7+dfsg1/command/login/login_test.go --- consul-1.7.4+dfsg1/command/login/login_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/login/login_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -6,16 +6,20 @@ "path/filepath" "strings" "testing" + "time" "github.com/hashicorp/consul/agent" "github.com/hashicorp/consul/agent/consul/authmethod/kubeauth" "github.com/hashicorp/consul/agent/consul/authmethod/testauth" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/command/acl" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/testrpc" "github.com/mitchellh/cli" "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2/jwt" ) func TestLoginCommand_noTabs(t *testing.T) { @@ -32,7 +36,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -226,7 +230,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -314,3 +318,154 @@ require.Len(t, token, 36, "must be a valid uid: %s", token) }) } + +func TestLoginCommand_jwt(t *testing.T) { + t.Parallel() + + testDir := testutil.TempDir(t, "acl") + defer os.RemoveAll(testDir) + + a := agent.NewTestAgent(t, ` + primary_datacenter = "dc1" + acl { + enabled = true + tokens { + master = "root" + } + }`) + + defer a.Shutdown() + testrpc.WaitForLeader(t, a.RPC, "dc1") + + client := a.Client() + + tokenSinkFile := filepath.Join(testDir, "test.token") + bearerTokenFile := filepath.Join(testDir, "bearer.token") + + // spin up a fake oidc server + oidcServer := startSSOTestServer(t) + pubKey, privKey := oidcServer.SigningKeys() + + type mConfig = map[string]interface{} + cases := map[string]struct { + f func(config mConfig) + issuer string + expectErr string + }{ + "success - jwt static keys": {func(config mConfig) { + config["BoundIssuer"] = "https://legit.issuer.internal/" + config["JWTValidationPubKeys"] = []string{pubKey} + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt jwks": {func(config mConfig) { + config["JWKSURL"] = oidcServer.Addr() + "/certs" + config["JWKSCACert"] = oidcServer.CACert() + }, + "https://legit.issuer.internal/", + ""}, + "success - jwt oidc discovery": {func(config mConfig) { + config["OIDCDiscoveryURL"] = oidcServer.Addr() + config["OIDCDiscoveryCACert"] = oidcServer.CACert() + }, + oidcServer.Addr(), + ""}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + method := &api.ACLAuthMethod{ + Name: "jwt", + Type: "jwt", + Config: map[string]interface{}{ + "JWTSupportedAlgs": []string{"ES256"}, + "ClaimMappings": map[string]string{ + "first_name": "name", + "/org/primary": "primary_org", + }, + "ListClaimMappings": map[string]string{ + "https://consul.test/groups": "groups", + }, + "BoundAudiences": []string{"https://consul.test"}, + }, + } + if tc.f != nil { + tc.f(method.Config) + } + _, _, err := client.ACL().AuthMethodCreate( + method, + &api.WriteOptions{Token: "root"}, + ) + require.NoError(t, err) + + _, _, err = client.ACL().BindingRuleCreate(&api.ACLBindingRule{ + AuthMethod: "jwt", + BindType: api.BindingRuleBindTypeService, + BindName: "test--${value.name}--${value.primary_org}", + Selector: "value.name == jeff2 and value.primary_org == engineering and foo in list.groups", + }, + &api.WriteOptions{Token: "root"}, + ) + require.NoError(t, err) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Audience: jwt.Audience{"https://consul.test"}, + Issuer: tc.issuer, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + type orgs struct { + Primary string `json:"primary"` + } + + privateCl := struct { + FirstName string `json:"first_name"` + Org orgs `json:"org"` + Groups []string `json:"https://consul.test/groups"` + }{ + FirstName: "jeff2", + Org: orgs{"engineering"}, + Groups: []string{"foo", "bar"}, + } + + // Drop a JWT on disk. + jwtData, err := oidcauthtest.SignJWT(privKey, cl, privateCl) + require.NoError(t, err) + require.NoError(t, ioutil.WriteFile(bearerTokenFile, []byte(jwtData), 0600)) + + defer os.Remove(tokenSinkFile) + ui := cli.NewMockUi() + cmd := New(ui) + + args := []string{ + "-http-addr=" + a.HTTPAddr(), + "-token=root", + "-method=jwt", + "-token-sink-file", tokenSinkFile, + "-bearer-token-file", bearerTokenFile, + } + + code := cmd.Run(args) + require.Equal(t, 0, code, "err: %s", ui.ErrorWriter.String()) + require.Empty(t, ui.ErrorWriter.String()) + require.Empty(t, ui.OutputWriter.String()) + + raw, err := ioutil.ReadFile(tokenSinkFile) + require.NoError(t, err) + + token := strings.TrimSpace(string(raw)) + require.Len(t, token, 36, "must be a valid uid: %s", token) + }) + } +} + +func startSSOTestServer(t *testing.T) *oidcauthtest.Server { + ports := freeport.MustTake(1) + return oidcauthtest.Start(t, oidcauthtest.WithPort( + ports[0], + func() { freeport.Return(ports) }, + )) +} diff -Nru consul-1.7.4+dfsg1/command/logout/logout_test.go consul-1.8.7+dfsg1/command/logout/logout_test.go --- consul-1.7.4+dfsg1/command/logout/logout_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/logout/logout_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true @@ -160,7 +160,7 @@ testDir := testutil.TempDir(t, "acl") defer os.RemoveAll(testDir) - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` primary_datacenter = "dc1" acl { enabled = true diff -Nru consul-1.7.4+dfsg1/command/maint/maint.go consul-1.8.7+dfsg1/command/maint/maint.go --- consul-1.7.4+dfsg1/command/maint/maint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/maint/maint.go 2020-12-10 21:46:52.000000000 +0000 @@ -72,13 +72,14 @@ return 1 } a := client.Agent() - nodeName, err := a.NodeName() - if err != nil { - c.UI.Error(fmt.Sprintf("Error querying Consul agent: %s", err)) - return 1 - } if !c.enable && !c.disable { + nodeName, err := a.NodeName() + if err != nil { + c.UI.Error(fmt.Sprintf("Error querying Consul agent: %s", err)) + return 1 + } + // List mode - list nodes/services in maintenance mode checks, err := a.Checks() if err != nil { @@ -92,7 +93,7 @@ c.UI.Output(" Name: " + nodeName) c.UI.Output(" Reason: " + check.Notes) c.UI.Output("") - } else if strings.HasPrefix(string(check.CheckID), "_service_maintenance:") { + } else if strings.HasPrefix(check.CheckID, "_service_maintenance:") { c.UI.Output("Service:") c.UI.Output(" ID: " + check.ServiceID) c.UI.Output(" Reason: " + check.Notes) diff -Nru consul-1.7.4+dfsg1/command/maint/maint_test.go consul-1.8.7+dfsg1/command/maint/maint_test.go --- consul-1.7.4+dfsg1/command/maint/maint_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/maint/maint_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -41,7 +41,7 @@ func TestMaintCommand_NoArgs(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() // Register the service and put it into maintenance mode @@ -90,7 +90,7 @@ func TestMaintCommand_EnableNodeMaintenance(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -114,7 +114,7 @@ func TestMaintCommand_DisableNodeMaintenance(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -137,7 +137,7 @@ func TestMaintCommand_EnableServiceMaintenance(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() // Register the service @@ -171,7 +171,7 @@ func TestMaintCommand_DisableServiceMaintenance(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() // Register the service @@ -204,7 +204,7 @@ func TestMaintCommand_ServiceMaintenance_NoService(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/members/members_test.go consul-1.8.7+dfsg1/command/members/members_test.go --- consul-1.7.4+dfsg1/command/members/members_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/members/members_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestMembersCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -50,7 +50,7 @@ func TestMembersCommand_WAN(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -71,7 +71,7 @@ func TestMembersCommand_statusFilter(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -95,7 +95,7 @@ func TestMembersCommand_statusFilter_failed(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() @@ -125,7 +125,7 @@ t.Parallel() nodeName := "name|with|bars" - a := agent.NewTestAgent(t, "", `node_name = "`+nodeName+`"`) + a := agent.NewTestAgent(t, `node_name = "`+nodeName+`"`) defer a.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/monitor/monitor_test.go consul-1.8.7+dfsg1/command/monitor/monitor_test.go --- consul-1.7.4+dfsg1/command/monitor/monitor_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/monitor/monitor_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,7 +11,7 @@ func TestMonitorCommand_exitsOnSignalBeforeLinesArrive(t *testing.T) { t.Parallel() - a := agent.NewTestAgentWithFields(t, true, agent.TestAgent{}) + a := agent.StartTestAgent(t, agent.TestAgent{}) defer a.Shutdown() shutdownCh := make(chan struct{}) @@ -64,7 +64,7 @@ func TestMonitorCommand_LogJSONValidFlag(t *testing.T) { t.Parallel() - a := agent.NewTestAgentWithFields(t, true, agent.TestAgent{}) + a := agent.StartTestAgent(t, agent.TestAgent{}) defer a.Shutdown() shutdownCh := make(chan struct{}) diff -Nru consul-1.7.4+dfsg1/command/operator/autopilot/get/operator_autopilot_get_test.go consul-1.8.7+dfsg1/command/operator/autopilot/get/operator_autopilot_get_test.go --- consul-1.7.4+dfsg1/command/operator/autopilot/get/operator_autopilot_get_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/operator/autopilot/get/operator_autopilot_get_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,7 +19,7 @@ func TestOperatorAutopilotGetConfigCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/operator/autopilot/set/operator_autopilot_set_test.go consul-1.8.7+dfsg1/command/operator/autopilot/set/operator_autopilot_set_test.go --- consul-1.7.4+dfsg1/command/operator/autopilot/set/operator_autopilot_set_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/operator/autopilot/set/operator_autopilot_set_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,7 @@ func TestOperatorAutopilotSetConfigCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/operator/raft/listpeers/operator_raft_list_test.go consul-1.8.7+dfsg1/command/operator/raft/listpeers/operator_raft_list_test.go --- consul-1.7.4+dfsg1/command/operator/raft/listpeers/operator_raft_list_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/operator/raft/listpeers/operator_raft_list_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ func TestOperatorRaftListPeersCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() expected := fmt.Sprintf("%s %s 127.0.0.1:%d leader true 3", @@ -43,7 +43,7 @@ t.Parallel() nodeName := "name|with|bars" - a := agent.NewTestAgent(t, "", `node_name = "`+nodeName+`"`) + a := agent.NewTestAgent(t, `node_name = "`+nodeName+`"`) defer a.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/command/operator/raft/removepeer/operator_raft_remove_test.go consul-1.8.7+dfsg1/command/operator/raft/removepeer/operator_raft_remove_test.go --- consul-1.7.4+dfsg1/command/operator/raft/removepeer/operator_raft_remove_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/operator/raft/removepeer/operator_raft_remove_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ func TestOperatorRaftRemovePeerCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() t.Run("Test the remove-peer subcommand directly", func(t *testing.T) { diff -Nru consul-1.7.4+dfsg1/command/reload/reload_test.go consul-1.8.7+dfsg1/command/reload/reload_test.go --- consul-1.7.4+dfsg1/command/reload/reload_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/reload/reload_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,15 +17,10 @@ func TestReloadCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() // Setup a dummy response to errCh to simulate a successful reload - go func() { - errCh := <-a.ReloadCh() - errCh <- nil - }() - ui := cli.NewMockUi() c := New(ui) args := []string{"-http-addr=" + a.HTTPAddr()} diff -Nru consul-1.7.4+dfsg1/command/rtt/rtt_test.go consul-1.8.7+dfsg1/command/rtt/rtt_test.go --- consul-1.7.4+dfsg1/command/rtt/rtt_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/rtt/rtt_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,7 +46,7 @@ func TestRTTCommand_LAN(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` + a := agent.NewTestAgent(t, ` consul = { coordinate = { update_period = "10ms" @@ -155,7 +155,7 @@ func TestRTTCommand_WAN(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForLeader(t, a.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/command/services/config.go consul-1.8.7+dfsg1/command/services/config.go --- consul-1.7.4+dfsg1/command/services/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/services/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,17 +7,18 @@ "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" + "github.com/mitchellh/cli" "github.com/mitchellh/mapstructure" ) // ServicesFromFiles returns the list of agent service registration structs // from a set of file arguments. -func ServicesFromFiles(files []string) ([]*api.AgentServiceRegistration, error) { +func ServicesFromFiles(ui cli.Ui, files []string) ([]*api.AgentServiceRegistration, error) { // We set devMode to true so we can get the basic valid default // configuration. devMode doesn't set any services by default so this // is okay since we only look at services. devMode := true - b, err := config.NewBuilder(config.Flags{ + b, err := config.NewBuilder(config.BuilderOpts{ ConfigFiles: files, DevMode: &devMode, }) @@ -29,6 +30,9 @@ if err != nil { return nil, err } + for _, w := range b.Warnings { + ui.Warn(w) + } // The services are now in "structs.ServiceDefinition" form and we need // them in "api.AgentServiceRegistration" form so do the conversion. diff -Nru consul-1.7.4+dfsg1/command/services/config_test.go consul-1.8.7+dfsg1/command/services/config_test.go --- consul-1.7.4+dfsg1/command/services/config_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/services/config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,7 +18,7 @@ require := require.New(t) devMode := true - b, err := config.NewBuilder(config.Flags{ + b, err := config.NewBuilder(config.BuilderOpts{ DevMode: &devMode, }) require.NoError(err) diff -Nru consul-1.7.4+dfsg1/command/services/deregister/deregister.go consul-1.8.7+dfsg1/command/services/deregister/deregister.go --- consul-1.7.4+dfsg1/command/services/deregister/deregister.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/services/deregister/deregister.go 2020-12-10 21:46:52.000000000 +0000 @@ -55,7 +55,7 @@ ID: c.flagId}} if len(args) > 0 { var err error - svcs, err = services.ServicesFromFiles(args) + svcs, err = services.ServicesFromFiles(c.UI, args) if err != nil { c.UI.Error(fmt.Sprintf("Error: %s", err)) return 1 diff -Nru consul-1.7.4+dfsg1/command/services/deregister/deregister_test.go consul-1.8.7+dfsg1/command/services/deregister/deregister_test.go --- consul-1.7.4+dfsg1/command/services/deregister/deregister_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/services/deregister/deregister_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -64,7 +64,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -101,7 +101,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -138,7 +138,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/services/register/register.go consul-1.8.7+dfsg1/command/services/register/register.go --- consul-1.7.4+dfsg1/command/services/register/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/services/register/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -103,7 +103,7 @@ if len(args) > 0 { var err error - svcs, err = services.ServicesFromFiles(args) + svcs, err = services.ServicesFromFiles(c.UI, args) if err != nil { c.UI.Error(fmt.Sprintf("Error: %s", err)) return 1 diff -Nru consul-1.7.4+dfsg1/command/services/register/register_test.go consul-1.8.7+dfsg1/command/services/register/register_test.go --- consul-1.7.4+dfsg1/command/services/register/register_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/services/register/register_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -63,7 +63,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -96,7 +96,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -122,7 +122,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -157,7 +157,7 @@ t.Parallel() require := require.New(t) - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/snapshot/inspect/snapshot_inspect_test.go consul-1.8.7+dfsg1/command/snapshot/inspect/snapshot_inspect_test.go --- consul-1.7.4+dfsg1/command/snapshot/inspect/snapshot_inspect_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/snapshot/inspect/snapshot_inspect_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -61,7 +61,7 @@ func TestSnapshotInspectCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/snapshot/restore/snapshot_restore_test.go consul-1.8.7+dfsg1/command/snapshot/restore/snapshot_restore_test.go --- consul-1.7.4+dfsg1/command/snapshot/restore/snapshot_restore_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/snapshot/restore/snapshot_restore_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -66,7 +66,7 @@ func TestSnapshotRestoreCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -108,7 +108,7 @@ func TestSnapshotRestoreCommand_TruncatedSnapshot(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/command/snapshot/save/snapshot_save_test.go consul-1.8.7+dfsg1/command/snapshot/save/snapshot_save_test.go --- consul-1.7.4+dfsg1/command/snapshot/save/snapshot_save_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/snapshot/save/snapshot_save_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -70,7 +70,7 @@ func TestSnapshotSaveCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -104,7 +104,7 @@ func TestSnapshotSaveCommand_TruncatedStream(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() client := a.Client() @@ -132,7 +132,7 @@ var fakeResult atomic.Value // Run a fake webserver to pretend to be the snapshot API. - fakeAddr, cleanup := lib.StartTestServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + fakeAddr := lib.StartTestServer(t, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { if req.URL.Path != "/v1/snapshot" { w.WriteHeader(http.StatusNotFound) return @@ -151,7 +151,6 @@ data := raw.([]byte) _, _ = w.Write(data) })) - defer cleanup() // Wait until the server is actually listening. retry.Run(t, func(r *retry.R) { diff -Nru consul-1.7.4+dfsg1/command/tls/cert/create/tls_cert_create.go consul-1.8.7+dfsg1/command/tls/cert/create/tls_cert_create.go --- consul-1.7.4+dfsg1/command/tls/cert/create/tls_cert_create.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/tls/cert/create/tls_cert_create.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,6 +33,7 @@ days int domain string help string + node string dnsnames flags.AppendSliceValue ipaddresses flags.AppendSliceValue prefix string @@ -44,6 +45,7 @@ c.flags.StringVar(&c.key, "key", "#DOMAIN#-agent-ca-key.pem", "Provide path to the key. Defaults to #DOMAIN#-agent-ca-key.pem.") c.flags.BoolVar(&c.server, "server", false, "Generate server certificate.") c.flags.BoolVar(&c.client, "client", false, "Generate client certificate.") + c.flags.StringVar(&c.node, "node", "", "When generating a server cert and this is set an additional dns name is included of the form .server...") c.flags.BoolVar(&c.cli, "cli", false, "Generate cli certificate.") c.flags.IntVar(&c.days, "days", 365, "Provide number of days the certificate is valid for from now on. Defaults to 1 year.") c.flags.StringVar(&c.dc, "dc", "dc1", "Provide the datacenter. Matters only for -server certificates. Defaults to dc1.") @@ -79,6 +81,11 @@ return 1 } + if c.node != "" && !c.server { + c.UI.Error("-node requires -server") + return 1 + } + var DNSNames []string var IPAddresses []net.IP var extKeyUsage []x509.ExtKeyUsage @@ -99,6 +106,10 @@ if c.server { name = fmt.Sprintf("server.%s.%s", c.dc, c.domain) + if c.node != "" { + nodeName := fmt.Sprintf("%s.server.%s.%s", c.node, c.dc, c.domain) + DNSNames = append(DNSNames, nodeName) + } DNSNames = append(DNSNames, name) DNSNames = append(DNSNames, "localhost") @@ -217,10 +228,10 @@ and all ACL tokens. Do not distribute them to production hosts that are not server nodes. Store them as securely as CA keys. ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem - ==> Saved consul-server-dc1-0.pem - ==> Saved consul-server-dc1-0-key.pem + ==> Saved dc1-server-consul-0.pem + ==> Saved dc1-server-consul-0-key.pem $ consul tls cert -client ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem - ==> Saved consul-client-dc1-0.pem - ==> Saved consul-client-dc1-0-key.pem + ==> Saved dc1-client-consul-0.pem + ==> Saved dc1-client-consul-0-key.pem ` diff -Nru consul-1.7.4+dfsg1/command/tls/cert/create/tls_cert_create_test.go consul-1.8.7+dfsg1/command/tls/cert/create/tls_cert_create_test.go --- consul-1.7.4+dfsg1/command/tls/cert/create/tls_cert_create_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/tls/cert/create/tls_cert_create_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,6 +48,11 @@ "Please provide either -server, -client, or -cli"}, "client+cli": {[]string{"-client", "-cli"}, "Please provide either -server, -client, or -cli"}, + + "client+node": {[]string{"-client", "-node", "foo"}, + "-node requires -server"}, + "cli+node": {[]string{"-cli", "-node", "foo"}, + "-node requires -server"}, } for name, tc := range cases { @@ -102,13 +107,14 @@ }, []net.IP{{127, 0, 0, 1}}, }, - {"server1", + {"server1-with-node", "server", - []string{"-server"}, + []string{"-server", "-node", "mysrv"}, "dc1-server-consul-1.pem", "dc1-server-consul-1-key.pem", "server.dc1.consul", []string{ + "mysrv.server.dc1.consul", "server.dc1.consul", "localhost", }, diff -Nru consul-1.7.4+dfsg1/command/tls/cert/tls_cert.go consul-1.8.7+dfsg1/command/tls/cert/tls_cert.go --- consul-1.7.4+dfsg1/command/tls/cert/tls_cert.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/tls/cert/tls_cert.go 2020-12-10 21:46:52.000000000 +0000 @@ -35,14 +35,14 @@ Create a certificate $ consul tls cert create -server - ==> saved consul-server-dc1.pem - ==> saved consul-server-dc1-key.pem + ==> saved dc1-server-consul.pem + ==> saved dc1-server-consul-key.pem Create a certificate with your own CA: $ consul tls cert create -server -ca-file my-ca.pem -ca-key-file my-ca-key.pem - ==> saved consul-server-dc1.pem - ==> saved consul-server-dc1-key.pem + ==> saved dc1-server-consul.pem + ==> saved dc1-server-consul-key.pem For more examples, ask for subcommand help or view the documentation. ` diff -Nru consul-1.7.4+dfsg1/command/validate/validate.go consul-1.8.7+dfsg1/command/validate/validate.go --- consul-1.7.4+dfsg1/command/validate/validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/validate/validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -51,7 +51,7 @@ return 1 } - b, err := config.NewBuilder(config.Flags{ConfigFiles: configFiles, ConfigFormat: &c.configFormat}) + b, err := config.NewBuilder(config.BuilderOpts{ConfigFiles: configFiles, ConfigFormat: c.configFormat}) if err != nil { c.UI.Error(fmt.Sprintf("Config validation failed: %v", err.Error())) return 1 @@ -61,6 +61,9 @@ return 1 } if !c.quiet { + for _, w := range b.Warnings { + c.UI.Warn(w) + } c.UI.Output("Configuration is valid!") } return 0 diff -Nru consul-1.7.4+dfsg1/command/version/formatter.go consul-1.8.7+dfsg1/command/version/formatter.go --- consul-1.7.4+dfsg1/command/version/formatter.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/version/formatter.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,69 @@ +package version + +import ( + "bytes" + "encoding/json" + "fmt" +) + +const ( + PrettyFormat string = "pretty" + JSONFormat string = "json" +) + +type Formatter interface { + Format(info *VersionInfo) (string, error) +} + +func GetSupportedFormats() []string { + return []string{PrettyFormat, JSONFormat} +} + +func NewFormatter(format string) (Formatter, error) { + switch format { + case PrettyFormat: + return newPrettyFormatter(), nil + case JSONFormat: + return newJSONFormatter(), nil + default: + return nil, fmt.Errorf("Unknown format: %s", format) + } +} + +type prettyFormatter struct{} + +func newPrettyFormatter() Formatter { + return &prettyFormatter{} +} + +func (_ *prettyFormatter) Format(info *VersionInfo) (string, error) { + var buffer bytes.Buffer + buffer.WriteString(fmt.Sprintf("Consul v%s\n", info.HumanVersion)) + if info.Revision != "" { + buffer.WriteString(fmt.Sprintf("Revision %s\n", info.Revision)) + } + + var supplement string + if info.RPC.Default < info.RPC.Max { + supplement = fmt.Sprintf(" (agent will automatically use protocol >%d when speaking to compatible agents)", + info.RPC.Default) + } + buffer.WriteString(fmt.Sprintf("Protocol %d spoken by default, understands %d to %d%s\n", + info.RPC.Default, info.RPC.Min, info.RPC.Max, supplement)) + + return buffer.String(), nil +} + +type jsonFormatter struct{} + +func newJSONFormatter() Formatter { + return &jsonFormatter{} +} + +func (_ *jsonFormatter) Format(info *VersionInfo) (string, error) { + b, err := json.MarshalIndent(info, "", " ") + if err != nil { + return "", fmt.Errorf("Failed to marshal version info: %v", err) + } + return string(b), nil +} diff -Nru consul-1.7.4+dfsg1/command/version/formatter_test.go consul-1.8.7+dfsg1/command/version/formatter_test.go --- consul-1.7.4+dfsg1/command/version/formatter_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/version/formatter_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,63 @@ +package version + +import ( + "flag" + "fmt" + "io/ioutil" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +// update allows golden files to be updated based on the current output. +var update = flag.Bool("update", false, "update golden files") + +// golden reads and optionally writes the expected data to the golden file, +// returning the contents as a string. +func golden(t *testing.T, name, got string) string { + t.Helper() + + golden := filepath.Join("testdata", name+".golden") + if *update && got != "" { + err := ioutil.WriteFile(golden, []byte(got), 0644) + require.NoError(t, err) + } + + expected, err := ioutil.ReadFile(golden) + require.NoError(t, err) + + return string(expected) +} + +func TestFormat(t *testing.T) { + info := VersionInfo{ + HumanVersion: "1.99.3-beta1", + Version: "1.99.3", + Prerelease: "beta1", + Revision: "5e5dbedd47a5f875b60e241c5555a9caab595246", + RPC: RPCVersionInfo{ + Default: 2, + Min: 1, + Max: 3, + }, + } + + formatters := map[string]Formatter{ + "pretty": newPrettyFormatter(), + // the JSON formatter ignores the showMeta + "json": newJSONFormatter(), + } + + for fmtName, formatter := range formatters { + t.Run(fmtName, func(t *testing.T) { + actual, err := formatter.Format(&info) + require.NoError(t, err) + + gName := fmt.Sprintf("%s", fmtName) + + expected := golden(t, gName, actual) + require.Equal(t, expected, actual) + }) + } +} diff -Nru consul-1.7.4+dfsg1/command/version/testdata/json.golden consul-1.8.7+dfsg1/command/version/testdata/json.golden --- consul-1.7.4+dfsg1/command/version/testdata/json.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/version/testdata/json.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +{ + "Version": "1.99.3", + "Revision": "5e5dbedd47a5f875b60e241c5555a9caab595246", + "Prerelease": "beta1", + "RPC": { + "Default": 2, + "Min": 1, + "Max": 3 + } +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/command/version/testdata/pretty.golden consul-1.8.7+dfsg1/command/version/testdata/pretty.golden --- consul-1.7.4+dfsg1/command/version/testdata/pretty.golden 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/command/version/testdata/pretty.golden 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +Consul v1.99.3-beta1 +Revision 5e5dbedd47a5f875b60e241c5555a9caab595246 +Protocol 2 spoken by default, understands 1 to 3 (agent will automatically use protocol >2 when speaking to compatible agents) diff -Nru consul-1.7.4+dfsg1/command/version/version.go consul-1.8.7+dfsg1/command/version/version.go --- consul-1.7.4+dfsg1/command/version/version.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/version/version.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,38 +1,80 @@ package version import ( + "flag" "fmt" + "strings" - "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/consul" + "github.com/hashicorp/consul/command/flags" + "github.com/hashicorp/consul/version" "github.com/mitchellh/cli" ) -func New(ui cli.Ui, version string) *cmd { - return &cmd{UI: ui, version: version} +func New(ui cli.Ui) *cmd { + c := &cmd{UI: ui} + c.init() + return c } type cmd struct { - UI cli.Ui - version string + UI cli.Ui + flags *flag.FlagSet + format string + help string } -func (c *cmd) Run(_ []string) int { - c.UI.Output(fmt.Sprintf("Consul %s", c.version)) +func (c *cmd) init() { + c.flags = flag.NewFlagSet("", flag.ContinueOnError) + c.flags.StringVar( + &c.format, + "format", + PrettyFormat, + fmt.Sprintf("Output format {%s}", strings.Join(GetSupportedFormats(), "|"))) + c.help = flags.Usage(help, c.flags) - rpcProtocol, err := config.DefaultRPCProtocol() +} + +type RPCVersionInfo struct { + Default int + Min int + Max int +} + +type VersionInfo struct { + HumanVersion string `json:"-"` + Version string + Revision string + Prerelease string + RPC RPCVersionInfo +} + +func (c *cmd) Run(args []string) int { + if err := c.flags.Parse(args); err != nil { + return 1 + } + + formatter, err := NewFormatter(c.format) if err != nil { c.UI.Error(err.Error()) - return 2 + return 1 } - var supplement string - if rpcProtocol < consul.ProtocolVersionMax { - supplement = fmt.Sprintf(" (agent will automatically use protocol >%d when speaking to compatible agents)", - rpcProtocol) + out, err := formatter.Format(&VersionInfo{ + HumanVersion: version.GetHumanVersion(), + Version: version.Version, + Revision: version.GitCommit, + Prerelease: version.VersionPrerelease, + RPC: RPCVersionInfo{ + Default: consul.DefaultRPCProtocol, + Min: int(consul.ProtocolVersionMin), + Max: consul.ProtocolVersionMax, + }, + }) + if err != nil { + c.UI.Error(err.Error()) + return 1 } - c.UI.Output(fmt.Sprintf("Protocol %d spoken by default, understands %d to %d%s", - rpcProtocol, consul.ProtocolVersionMin, consul.ProtocolVersionMax, supplement)) - + c.UI.Output(out) return 0 } @@ -41,5 +83,10 @@ } func (c *cmd) Help() string { - return "" + return flags.Usage(c.help, nil) } + +const synopsis = "Output Consul version information" +const help = ` +Usage: consul version [options] +` diff -Nru consul-1.7.4+dfsg1/command/version/version_test.go consul-1.8.7+dfsg1/command/version/version_test.go --- consul-1.7.4+dfsg1/command/version/version_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/version/version_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,7 @@ func TestVersionCommand_noTabs(t *testing.T) { t.Parallel() - if strings.ContainsRune(New(cli.NewMockUi(), "").Help(), '\t') { + if strings.ContainsRune(New(cli.NewMockUi()).Help(), '\t') { t.Fatal("help has tabs") } } diff -Nru consul-1.7.4+dfsg1/command/watch/watch_test.go consul-1.8.7+dfsg1/command/watch/watch_test.go --- consul-1.7.4+dfsg1/command/watch/watch_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/command/watch/watch_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -23,7 +23,7 @@ func TestWatchCommand(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -42,7 +42,7 @@ } func TestWatchCommand_loadToken(t *testing.T) { - a := agent.NewTestAgent(t, t.Name(), ` `) + a := agent.NewTestAgent(t, ` `) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -137,7 +137,7 @@ func TestWatchCommandNoConnect(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") @@ -158,7 +158,7 @@ func TestWatchCommandNoAgentService(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := agent.NewTestAgent(t, ``) defer a.Shutdown() ui := cli.NewMockUi() diff -Nru consul-1.7.4+dfsg1/connect/proxy/config_test.go consul-1.8.7+dfsg1/connect/proxy/config_test.go --- consul-1.7.4+dfsg1/connect/proxy/config_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/connect/proxy/config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -81,7 +81,7 @@ func TestAgentConfigWatcherSidecarProxy(t *testing.T) { t.Parallel() - a := agent.NewTestAgent(t, "agent_smith", ``) + a := agent.StartTestAgent(t, agent.TestAgent{Name: "agent_smith"}) defer a.Shutdown() client := a.Client() diff -Nru consul-1.7.4+dfsg1/connect/proxy/proxy_test.go consul-1.8.7+dfsg1/connect/proxy/proxy_test.go --- consul-1.7.4+dfsg1/connect/proxy/proxy_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/connect/proxy/proxy_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -25,7 +25,7 @@ ports := freeport.MustTake(1) defer freeport.Return(ports) - a := agent.NewTestAgent(t, t.Name(), "") + a := agent.NewTestAgent(t, "") defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") client := a.Client() diff -Nru consul-1.7.4+dfsg1/connect/resolver_test.go consul-1.8.7+dfsg1/connect/resolver_test.go --- consul-1.7.4+dfsg1/connect/resolver_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/connect/resolver_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -42,7 +42,7 @@ func TestConsulResolver_Resolve(t *testing.T) { // Setup a local test agent to query - agent := agent.NewTestAgent(t, "test-consul", "") + agent := agent.StartTestAgent(t, agent.TestAgent{Name: "test-consul"}) defer agent.Shutdown() cfg := api.DefaultConfig() diff -Nru consul-1.7.4+dfsg1/connect/service_test.go consul-1.8.7+dfsg1/connect/service_test.go --- consul-1.7.4+dfsg1/connect/service_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/connect/service_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -127,7 +127,11 @@ func TestService_ServerTLSConfig(t *testing.T) { require := require.New(t) - a := agent.NewTestAgent(t, "007", "") + a := agent.StartTestAgent(t, agent.TestAgent{Name: "007", Overrides: ` + connect { + test_ca_leaf_root_change_spread = "1ns" + } + `}) defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") client := a.Client() diff -Nru consul-1.7.4+dfsg1/connect/tls.go consul-1.8.7+dfsg1/connect/tls.go --- consul-1.7.4+dfsg1/connect/tls.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/connect/tls.go 2020-12-10 21:46:52.000000000 +0000 @@ -177,8 +177,7 @@ // verifyServerCertMatchesURI is used on tls connections dialed to a connect // server to ensure that the certificate it presented has the correct identity. -func verifyServerCertMatchesURI(certs []*x509.Certificate, - expected connect.CertURI) error { +func verifyServerCertMatchesURI(certs []*x509.Certificate, expected connect.CertURI) error { expectedStr := expected.URI().String() gotURI, err := extractCertURI(certs) @@ -192,8 +191,7 @@ // domains. expectURI := expected.URI() expectURI.Host = gotURI.Host - if strings.ToLower(gotURI.String()) == strings.ToLower(expectURI.String()) { - // OK! + if strings.EqualFold(gotURI.String(), expectURI.String()) { return nil } diff -Nru consul-1.7.4+dfsg1/connect/tls_test.go consul-1.8.7+dfsg1/connect/tls_test.go --- consul-1.7.4+dfsg1/connect/tls_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/connect/tls_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -152,7 +152,7 @@ apiCA2 := testCertPEMBlock(t, apiCA2PEM) // Setup a local test agent to query - agent := agent.NewTestAgent(t, "test-consul", "") + agent := agent.StartTestAgent(t, agent.TestAgent{Name: "test-consul"}) defer agent.Shutdown() testrpc.WaitForTestAgent(t, agent.RPC, "dc1") diff -Nru consul-1.7.4+dfsg1/debian/changelog consul-1.8.7+dfsg1/debian/changelog --- consul-1.7.4+dfsg1/debian/changelog 2020-06-11 05:43:28.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/changelog 2021-11-09 14:44:58.000000000 +0000 @@ -1,3 +1,70 @@ +consul (1.8.7+dfsg1-3) unstable; urgency=medium + + * Team upload. + + [ Lucas Kanashiro ] + * Add upstream patch to fix FTBFS (Closes: #997133) + + [ Reinhard Tartler ] + * Do install "github.com/hashicorp/consul/vendor" into dev package + + -- Lucas Kanashiro Tue, 09 Nov 2021 11:44:58 -0300 + +consul (1.8.7+dfsg1-2) unstable; urgency=medium + + * Add patch for CVE-2020-25864 (Closes: #987351) + + -- Valentin Vidic Sat, 24 Apr 2021 12:06:56 +0200 + +consul (1.8.7+dfsg1-1) unstable; urgency=medium + + [ Arnaud Rebillout ] + * New upstream release [1.8.7]. + * Drop obsolete Build-Depends and Files-Excluded, per uscan + * Rework Build-Depends and Files-Excluded + * Drop a few more Build-Depends + * Drop aws-sdk vendoring + * Drop custom dh_configure target + * Cleanup obsolete patches + * Add lintian-overrides for consul (field-too-long Built-Using) + * Tidy up debian/copyright a bit + * Adjust sections, consul -> 'admin', -dev -> 'golang' + * Drop obsolete Build-Depends requirements + * Bump Standards-Version + + [ Dmitry Smirnov ] + * Disabled unreliable "TestCacheRateLimit". + + [ Arnaud Rebillout ] + * Fix patch regarding "TestCacheRateLimit" + * Revert "Add upstream git details, feed it to the build command" + * Set git commit and git commit year from debian pkg info + + -- Arnaud Rebillout Sun, 10 Jan 2021 22:37:17 +0700 + +consul (1.8.6+dfsg1-1) unstable; urgency=medium + + [ Dmitry Smirnov ] + * New upstream release. + * Build-Depends: + + golang-github-coreos-go-oidc-dev + + golang-github-patrickmn-go-cache-dev + + golang-golang-x-time-dev (>= 0.0+git20200630~) + = golang-github-hashicorp-go-memdb-dev (>= 1.2.1~) + = golang-github-hashicorp-memberlist-dev (>= 0.2.2~) + = golang-github-hashicorp-serf-dev (>= 0.9.4~) + = golang-github-mitchellh-cli-dev (>= 1.1.1~) + = golang-github-mitchellh-go-testing-interface-dev (>= 1.14.1~) + + procps + * fixed hclog-related FTBFS (Closes: #964873). + + [ Arnaud Rebillout ] + * New upstream release [1.8.6] (Closes: #975584). + * Update patches + * Add upstream git details, feed it to the build command + + -- Arnaud Rebillout Thu, 03 Dec 2020 14:22:00 +0700 + consul (1.7.4+dfsg1-1) unstable; urgency=medium * New upstream release. diff -Nru consul-1.7.4+dfsg1/debian/consul.docs consul-1.8.7+dfsg1/debian/consul.docs --- consul-1.7.4+dfsg1/debian/consul.docs 2018-08-17 09:51:39.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/consul.docs 2021-11-08 20:05:18.000000000 +0000 @@ -1,3 +1,6 @@ -website/source/api -website/source/docs -website/source/intro +website/pages/api-docs +website/pages/commands +website/pages/docs +website/pages/intro + +vendor/github.com/envoyproxy/protoc-gen-validate/NOTICE diff -Nru consul-1.7.4+dfsg1/debian/consul.lintian-overrides consul-1.8.7+dfsg1/debian/consul.lintian-overrides --- consul-1.7.4+dfsg1/debian/consul.lintian-overrides 2019-11-18 04:27:49.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/consul.lintian-overrides 2021-11-08 20:05:18.000000000 +0000 @@ -1,2 +1 @@ -## Very long list indeed: -field-too-long Built-Using * +consul: field-too-long Built-Using * diff -Nru consul-1.7.4+dfsg1/debian/control consul-1.8.7+dfsg1/debian/control --- consul-1.7.4+dfsg1/debian/control 2020-04-10 01:21:20.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/control 2021-11-08 20:05:18.000000000 +0000 @@ -1,47 +1,44 @@ Source: consul -Section: devel +Section: admin Priority: optional -Standards-Version: 4.5.0 +Standards-Version: 4.5.1 Maintainer: Debian Go Packaging Team Uploaders: Dmitry Smirnov , Martín Ferrari , Tianon Gravi , Tim Potter , Build-Depends: debhelper-compat (= 12) ,bash-completion ,dh-golang (>= 1.42~) ,golang-any (>= 2:1.13~) - ,golang-github-asaskevich-govalidator-dev ,golang-github-armon-circbuf-dev ,golang-github-armon-go-metrics-dev (>= 0.0~git20171117~) ,golang-github-armon-go-radix-dev + ,golang-github-aws-aws-sdk-go-dev ,golang-github-azure-go-autorest-dev (>= 10.15.5~) # ,golang-github-beorn7-perks-dev ,golang-github-bgentry-speakeasy-dev + ,golang-github-census-instrumentation-opencensus-proto-dev ,golang-github-circonus-labs-circonus-gometrics-dev (>= 2.3.1~) ,golang-github-circonus-labs-circonusllhist-dev + ,golang-github-coreos-go-oidc-dev ,golang-github-datadog-datadog-go-dev ,golang-github-davecgh-go-spew-dev ,golang-github-denverdino-aliyungo-dev - ,golang-github-digitalocean-godo-dev ,golang-github-docker-go-connections-dev - ,golang-github-elazarl-go-bindata-assetfs-dev (>= 0.0~git20151224~) - ,golang-github-ghodss-yaml-dev - ,golang-github-gogo-googleapis-dev + ,golang-github-elazarl-go-bindata-assetfs-dev ,golang-github-gogo-protobuf-dev (>= 1.2.1~) ,golang-github-golang-snappy-dev ,golang-github-googleapis-gnostic-dev ,golang-github-google-gofuzz-dev ,golang-github-gophercloud-gophercloud-dev - ,golang-github-gregjones-httpcache-dev ,golang-github-hashicorp-go-bexpr-dev ,golang-github-hashicorp-go-checkpoint-dev ,golang-github-hashicorp-go-cleanhttp-dev (>= 0.5.1~) ,golang-github-hashicorp-go-discover-dev ,golang-github-hashicorp-go-hclog-dev (>= 0.9.2~) ,golang-github-hashicorp-go-immutable-radix-dev (>= 1.1.0~) - ,golang-github-hashicorp-golang-lru-dev (>= 0.0~git20160207~) - ,golang-github-hashicorp-go-memdb-dev (>= 0.0~git20180224~) + ,golang-github-hashicorp-golang-lru-dev + ,golang-github-hashicorp-go-memdb-dev (>= 1.2.1~) ,golang-github-hashicorp-go-msgpack-dev (>= 0.5.5~) ,golang-github-hashicorp-go-multierror-dev - ,golang-github-hashicorp-go-plugin-dev (>= 1.0.1~) ,golang-github-hashicorp-go-raftchunking-dev ,golang-github-hashicorp-go-retryablehttp-dev ,golang-github-hashicorp-go-rootcerts-dev (>= 1.0.2~) @@ -51,23 +48,19 @@ ,golang-github-hashicorp-go-version-dev ,golang-github-hashicorp-hcl-dev ,golang-github-hashicorp-hil-dev (>= 0.0~git20160711~) - ,golang-github-hashicorp-logutils-dev - ,golang-github-hashicorp-memberlist-dev (>= 0.1.5~) + ,golang-github-hashicorp-memberlist-dev (>= 0.2.2~) ,golang-github-hashicorp-net-rpc-msgpackrpc-dev ,golang-github-hashicorp-raft-boltdb-dev ,golang-github-hashicorp-raft-dev (>= 1.1.2~) - ,golang-github-hashicorp-scada-client-dev - ,golang-github-hashicorp-serf-dev (>= 0.8.4~) - ,golang-github-hashicorp-yamux-dev (>= 0.0~git20151129~) - ,golang-github-inconshreveable-muxado-dev + ,golang-github-hashicorp-serf-dev (>= 0.9.4~) + ,golang-github-hashicorp-yamux-dev ,golang-github-imdario-mergo-dev - ,golang-github-jefferai-jsonx-dev ,golang-github-json-iterator-go-dev ,golang-github-kr-text-dev ,golang-github-mattn-go-isatty-dev ,golang-github-miekg-dns-dev (>= 1.1.26~) - ,golang-github-mitchellh-cli-dev (>= 1.0.0~) - ,golang-github-mitchellh-go-testing-interface-dev + ,golang-github-mitchellh-cli-dev (>= 1.1.1~) + ,golang-github-mitchellh-go-testing-interface-dev (>= 1.14.1~) ,golang-github-mitchellh-copystructure-dev ,golang-github-mitchellh-hashstructure-dev ,golang-github-mitchellh-mapstructure-dev @@ -75,19 +68,21 @@ ,golang-github-nytimes-gziphandler-dev ,golang-github-packethost-packngo-dev ,golang-github-pascaldekloe-goe-dev - ,golang-github-peterbourgon-diskv-dev + ,golang-github-patrickmn-go-cache-dev ,golang-github-pierrec-lz4-dev ,golang-github-pmezard-go-difflib-dev ,golang-github-ryanuber-columnize-dev ,golang-github-ryanuber-go-glob-dev ,golang-github-shirou-gopsutil-dev - ,golang-github-spf13-pflag-dev - ,golang-golang-x-sys-dev (>= 0.0~git20161012~) + ,golang-go.opencensus-dev + ,golang-golang-x-sys-dev + ,golang-golang-x-time-dev (>= 0.0+git20200630~) ,golang-gopkg-inf.v0-dev ,golang-gopkg-square-go-jose.v2-dev + ,golang-k8s-sigs-yaml-dev ,mockery # tests: - ,golang-github-sap-go-hdb-dev + ,procps Homepage: https://github.com/hashicorp/consul Vcs-Browser: https://salsa.debian.org/go-team/packages/consul Vcs-Git: https://salsa.debian.org/go-team/packages/consul.git @@ -95,6 +90,7 @@ #Testsuite: autopkgtest-pkg-go Package: golang-github-hashicorp-consul-dev +Section: golang Architecture: all Depends: ${misc:Depends} ,golang-github-armon-go-metrics-dev (>= 0.0~git20171117~) @@ -102,7 +98,7 @@ ,golang-github-hashicorp-go-bexpr-dev ,golang-github-hashicorp-go-cleanhttp-dev (>= 0.5.1~) ,golang-github-hashicorp-go-hclog-dev (>= 0.9.2~) - ,golang-github-hashicorp-golang-lru-dev (>= 0.0~git20160207~) + ,golang-github-hashicorp-golang-lru-dev ,golang-github-hashicorp-go-memdb-dev ,golang-github-hashicorp-go-msgpack-dev (>= 0.5.5~) ,golang-github-hashicorp-go-rootcerts-dev (>= 1.0.2~) @@ -110,17 +106,16 @@ ,golang-github-hashicorp-hcl-dev ,golang-github-hashicorp-hil-dev (>= 0.0~git20160711~) ,golang-github-hashicorp-memberlist-dev (>= 0.1.5~) - ,golang-github-hashicorp-go-plugin-dev (>= 1.0.1~) ,golang-github-hashicorp-raft-boltdb-dev ,golang-github-hashicorp-raft-dev (>= 1.1.2~) - ,golang-github-hashicorp-serf-dev (>= 0.8.4~) - ,golang-github-hashicorp-yamux-dev (>= 0.0~git20151129~) + ,golang-github-hashicorp-serf-dev (>= 0.9.4~) + ,golang-github-hashicorp-yamux-dev ,golang-github-inconshreveable-muxado-dev ,golang-github-miekg-dns-dev (>= 1.1.26~) - ,golang-github-mitchellh-cli-dev (>= 1.0.0~) + ,golang-github-mitchellh-cli-dev (>= 1.1.1~) ,golang-github-mitchellh-copystructure-dev ,golang-github-pascaldekloe-goe-dev - ,golang-golang-x-sys-dev (>= 0.0~git20161012~) + ,golang-golang-x-sys-dev Description: tool for service discovery, monitoring and configuration (source) Consul is a tool for service discovery and configuration. Consul is distributed, highly available, and extremely scalable. diff -Nru consul-1.7.4+dfsg1/debian/copyright consul-1.8.7+dfsg1/debian/copyright --- consul-1.7.4+dfsg1/debian/copyright 2020-02-19 23:02:41.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/copyright 2021-11-08 20:05:18.000000000 +0000 @@ -2,56 +2,52 @@ Upstream-Name: consul Source: https://github.com/hashicorp/consul Files-Excluded: - ui/javascripts/libs + website/public website/scripts - website/source/assets - website/source/layouts vendor/cloud.google.com vendor/github.com/armon/circbuf vendor/github.com/armon/go-metrics vendor/github.com/armon/go-radix - vendor/github.com/asaskevich/govalidator - ~~vendor/github.com/aws/aws-sdk-go + vendor/github.com/aws/aws-sdk-go vendor/github.com/Azure/azure-sdk-for-go vendor/github.com/Azure/go-autorest vendor/github.com/dgrijalva/jwt-go vendor/github.com/beorn7/perks vendor/github.com/bgentry/speakeasy vendor/github.com/boltdb/bolt + vendor/github.com/census-instrumentation/opencensus-proto + vendor/github.com/cespare/xxhash vendor/github.com/circonus-labs/circonus-gometrics vendor/github.com/circonus-labs/circonusllhist + ~vendor/github.com/cncf/udpa + ~vendor/github.com/coredns/coredns + vendor/github.com/coreos/go-oidc vendor/github.com/DataDog/datadog-go vendor/github.com/davecgh/go-spew - vendor/github.com/denisenkom/go-mssqldb vendor/github.com/denverdino/aliyungo vendor/github.com/digitalocean/godo vendor/github.com/dimchansky/utfbom vendor/github.com/docker/go-connections vendor/github.com/elazarl/go-bindata-assetfs + ~vendor/github.com/envoyproxy/go-control-plane + ~vendor/github.com/envoyproxy/protoc-gen-validate vendor/github.com/fatih/color - vendor/github.com/fatih/structs - vendor/github.com/ghodss/yaml - vendor/github.com/gocql/gocql - vendor/github.com/gogo/googleapis vendor/github.com/gogo/protobuf - vendor/github.com/gogo/protobuf - vendor/github.com/go-ini/ini - vendor/github.com/golang/glog vendor/github.com/golang/protobuf vendor/github.com/golang/snappy + vendor/github.com/googleapis/gax-go vendor/github.com/googleapis/gnostic vendor/github.com/google/btree vendor/github.com/google/gofuzz vendor/github.com/google/go-querystring + ~vendor/github.com/google/tcpproxy vendor/github.com/go-ole/go-ole vendor/github.com/gophercloud/gophercloud - vendor/github.com/go-sql-driver/mysql - vendor/github.com/gregjones/httpcache - vendor/github.com/hailocab/go-hostpool vendor/github.com/hashicorp/errwrap vendor/github.com/hashicorp/go-bexpr vendor/github.com/hashicorp/go-checkpoint vendor/github.com/hashicorp/go-cleanhttp + ~vendor/github.com/hashicorp/go-connlimit vendor/github.com/hashicorp/go-discover vendor/github.com/hashicorp/go-discover/provider/*/vendor vendor/github.com/joyent/triton-go @@ -63,7 +59,6 @@ vendor/github.com/hashicorp/go-multierror vendor/github.com/hashicorp/go-raftchunking vendor/github.com/hashicorp/go-retryablehttp - vendor/github.com/hashicorp/go-plugin vendor/github.com/hashicorp/go-rootcerts vendor/github.com/hashicorp/go-sockaddr vendor/github.com/hashicorp/go-syslog @@ -71,24 +66,21 @@ vendor/github.com/hashicorp/go-version vendor/github.com/hashicorp/hcl vendor/github.com/hashicorp/hil - vendor/github.com/hashicorp/logutils vendor/github.com/hashicorp/mdns vendor/github.com/hashicorp/memberlist vendor/github.com/hashicorp/net-rpc-msgpackrpc vendor/github.com/hashicorp/raft vendor/github.com/hashicorp/raft-boltdb - vendor/github.com/hashicorp/scada-client vendor/github.com/hashicorp/serf + ~vendor/github.com/hashicorp/vault vendor/github.com/hashicorp/vic vendor/github.com/hashicorp/yamux vendor/github.com/imdario/mergo - vendor/github.com/Jeffail/gabs - vendor/github.com/jefferai/jsonx vendor/github.com/jmespath/go-jmespath vendor/github.com/json-iterator/go - vendor/github.com/keybase/go-crypto + vendor/github.com/konsorten/go-windows-terminal-sequences vendor/github.com/kr/text - vendor/github.com/lib/pq + ~vendor/github.com/linode/linode-go vendor/github.com/mattn/go-colorable vendor/github.com/mattn/go-isatty vendor/github.com/matttproud/golang_protobuf_extensions @@ -100,52 +92,49 @@ vendor/github.com/mitchellh/go-testing-interface vendor/github.com/mitchellh/hashstructure vendor/github.com/mitchellh/mapstructure + ~vendor/github.com/mitchellh/pointerstructure vendor/github.com/mitchellh/reflectwalk vendor/github.com/modern-go/concurrent vendor/github.com/modern-go/reflect2 vendor/github.com/nicolai86/scaleway-sdk vendor/github.com/NYTimes/gziphandler - vendor/github.com/oklog/run vendor/github.com/packethost/packngo vendor/github.com/pascaldekloe/goe vendor/github.com/patrickmn/go-cache - vendor/github.com/peterbourgon/diskv vendor/github.com/pierrec/lz4 vendor/github.com/pkg/errors vendor/github.com/pmezard/go-difflib vendor/github.com/posener/complete + vendor/github.com/pquerna/cachecontrol vendor/github.com/prometheus/client_golang vendor/github.com/prometheus/client_model vendor/github.com/prometheus/common vendor/github.com/prometheus/procfs + ~vendor/github.com/rboyer/safeio vendor/github.com/renier/xmlrpc vendor/github.com/ryanuber/columnize vendor/github.com/ryanuber/go-glob - vendor/github.com/SAP/go-hdb - ~vendor/github.com/sean- - vendor/github.com/sergi/go-diff - vendor/github.com/SermoDigital/jose + vendor/github.com/sean-/seed vendor/github.com/shirou/gopsutil - vendor/github.com/shirou/w32 vendor/github.com/sirupsen/logrus - vendor/github.com/Sirupsen/logrus vendor/github.com/softlayer/softlayer-go vendor/github.com/spf13/pflag vendor/github.com/StackExchange/wmi vendor/github.com/stretchr/objx vendor/github.com/stretchr/testify - vendor/github.com/tonnerre/golang-text + ~vendor/github.com/tencentcloud/tencentcloud-sdk-go vendor/github.com/tv42/httpunix vendor/github.com/vmware/govmomi - vendor/github.com/vmware/vic + vendor/go.opencensus.io + vendor/go.uber.org vendor/golang.org/x vendor/google.golang.org - vendor/google.golang.org/grpc vendor/gopkg.in/inf.v0 - vendor/gopkg.in/mgo.v2 - vendor/gopkg.in/square/go-jose.v2 + vendor/gopkg.in/resty.v1 + vendor/gopkg.in/square vendor/gopkg.in/yaml.v2 ~vendor/k8s.io + vendor/sigs.k8s.io Comment: "~~" : FTBFS "~" : Not packaged or NEW @@ -155,6 +144,12 @@ License: MPL-2.0 Files: + vendor/github.com/cncf/udpa/* +Copyright: + ???? +License: Apache-2.0 + +Files: vendor/github.com/coredns/coredns/* Copyright: CoreDNS authors @@ -169,47 +164,44 @@ Files: vendor/github.com/envoyproxy/protoc-gen-validate/* Copyright: - ???? + 2019 Envoy Project Authors License: Apache-2.0 Files: - vendor/github.com/oklog/run/* + vendor/github.com/google/tcpproxy/* Copyright: - 2017 OK Log + 2017 Google Inc. License: Apache-2.0 Files: - vendor/github.com/sean-/seed/* + vendor/github.com/linode/linodego/* Copyright: - 2017 Sean Chittenden - 2016 Alex Dadgar - 2009 The Go Authors -License: Expat and BSD-3-Clause~Google + 2017 Christopher "Chief" Najewicz +License: Expat Files: - vendor/k8s.io/* + vendor/github.com/mitchellh/pointerstructure/* Copyright: - 2014-2018 The Kubernetes Authors -License: Apache-2.0 + 2019 Mitchell Hashimoto +License: Expat Files: - vendor/github.com/linode/linodego/* + vendor/github.com/rboyer/safeio/* Copyright: - 2017 Christopher "Chief" Najewicz + 2020 Richard Boyer License: Expat Files: - vendor/github.com/aws/aws-sdk-go/* + vendor/github.com/tencentcloud/tencentcloud-sdk-go/* Copyright: - 2015 Amazon.com, Inc. or its affiliates. - 2014-2015 Stripe, Inc. + 2017-2018 Tencent Ltd. + 2017-2018 THL A29 Limited, a Tencent company. License: Apache-2.0 Files: - vendor/github.com/tencentcloud/tencentcloud-sdk-go/* + vendor/k8s.io/* Copyright: - 2017-2018 Tencent Ltd. - 2017-2018 THL A29 Limited, a Tencent company. + 2014-2018 The Kubernetes Authors License: Apache-2.0 Files: debian/* @@ -253,33 +245,6 @@ On Debian systems, the complete text of the Apache License, Version 2.0 can be found in "/usr/share/common-licenses/Apache-2.0". -License: BSD-3-Clause~Google - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - . - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - License: MPL-2.0 Mozilla Public License, version 2.0 . diff -Nru consul-1.7.4+dfsg1/debian/patches/CVE-2020-25864.patch consul-1.8.7+dfsg1/debian/patches/CVE-2020-25864.patch --- consul-1.7.4+dfsg1/debian/patches/CVE-2020-25864.patch 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/patches/CVE-2020-25864.patch 2021-11-08 20:05:18.000000000 +0000 @@ -0,0 +1,139 @@ +From 447dd528f64d8bf481da9ac8445dd446bd4aa5c0 Mon Sep 17 00:00:00 2001 +From: Kent 'picat' Gruber +Date: Wed, 14 Apr 2021 18:49:14 -0400 +Subject: [PATCH] Merge pull request #10023 from hashicorp/fix-raw-kv-xss + +Add content type headers to raw KV responses +--- + .changelog/10023.txt | 3 ++ + agent/kvs_endpoint.go | 13 +++++-- + agent/kvs_endpoint_test.go | 71 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 85 insertions(+), 2 deletions(-) + create mode 100644 .changelog/10023.txt + +diff --git a/.changelog/10023.txt b/.changelog/10023.txt +new file mode 100644 +index 00000000000..92d85dbd0b9 +--- /dev/null ++++ b/.changelog/10023.txt +@@ -0,0 +1,3 @@ ++```release-note:security ++Add content-type headers to raw KV responses to prevent XSS attacks [CVE-2020-25864](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-25864) ++``` +\ No newline at end of file +diff --git a/agent/kvs_endpoint.go b/agent/kvs_endpoint.go +index feb6b7bfd26..2b54fb783e2 100644 +--- a/agent/kvs_endpoint.go ++++ b/agent/kvs_endpoint.go +@@ -80,11 +80,20 @@ func (s *HTTPServer) KVSGet(resp http.ResponseWriter, req *http.Request, args *s + return nil, nil + } + +- // Check if we are in raw mode with a normal get, write out +- // the raw body ++ // Check if we are in raw mode with a normal get, write out the raw body ++ // while setting the Content-Type, Content-Security-Policy, and ++ // X-Content-Type-Options headers to prevent XSS attacks from malicious KV ++ // entries. Otherwise, the net/http server will sniff the body to set the ++ // Content-Type. The nosniff option then indicates to the browser that it ++ // should also skip sniffing the body, otherwise it might ignore the Content-Type ++ // header in some situations. The sandbox option provides another layer of defense ++ // using the browser's content security policy to prevent code execution. + if _, ok := params["raw"]; ok && method == "KVS.Get" { + body := out.Entries[0].Value + resp.Header().Set("Content-Length", strconv.FormatInt(int64(len(body)), 10)) ++ resp.Header().Set("Content-Type", "text/plain") ++ resp.Header().Set("X-Content-Type-Options", "nosniff") ++ resp.Header().Set("Content-Security-Policy", "sandbox") + resp.Write(body) + return nil, nil + } +diff --git a/agent/kvs_endpoint_test.go b/agent/kvs_endpoint_test.go +index ceb6d907f10..5a3017214a4 100644 +--- a/agent/kvs_endpoint_test.go ++++ b/agent/kvs_endpoint_test.go +@@ -422,6 +422,31 @@ func TestKVSEndpoint_GET_Raw(t *testing.T) { + } + assertIndex(t, resp) + ++ // Check the headers ++ contentTypeHdr := resp.Header().Values("Content-Type") ++ if len(contentTypeHdr) != 1 { ++ t.Fatalf("expected 1 value for Content-Type header, got %d: %+v", len(contentTypeHdr), contentTypeHdr) ++ } ++ if contentTypeHdr[0] != "text/plain" { ++ t.Fatalf("expected Content-Type header to be \"text/plain\", got %q", contentTypeHdr[0]) ++ } ++ ++ optionsHdr := resp.Header().Values("X-Content-Type-Options") ++ if len(optionsHdr) != 1 { ++ t.Fatalf("expected 1 value for X-Content-Type-Options header, got %d: %+v", len(optionsHdr), optionsHdr) ++ } ++ if optionsHdr[0] != "nosniff" { ++ t.Fatalf("expected X-Content-Type-Options header to be \"nosniff\", got %q", optionsHdr[0]) ++ } ++ ++ cspHeader := resp.Header().Values("Content-Security-Policy") ++ if len(cspHeader) != 1 { ++ t.Fatalf("expected 1 value for Content-Security-Policy header, got %d: %+v", len(optionsHdr), optionsHdr) ++ } ++ if cspHeader[0] != "sandbox" { ++ t.Fatalf("expected X-Content-Type-Options header to be \"sandbox\", got %q", optionsHdr[0]) ++ } ++ + // Check the body + if !bytes.Equal(resp.Body.Bytes(), []byte("test")) { + t.Fatalf("bad: %s", resp.Body.Bytes()) +@@ -447,6 +472,52 @@ func TestKVSEndpoint_PUT_ConflictingFlags(t *testing.T) { + } + } + ++func TestKVSEndpoint_GET(t *testing.T) { ++ if testing.Short() { ++ t.Skip("too slow for testing.Short") ++ } ++ ++ t.Parallel() ++ a := NewTestAgent(t, "") ++ defer a.Shutdown() ++ ++ buf := bytes.NewBuffer([]byte("test")) ++ req, _ := http.NewRequest("PUT", "/v1/kv/test", buf) ++ resp := httptest.NewRecorder() ++ obj, err := a.srv.KVSEndpoint(resp, req) ++ if err != nil { ++ t.Fatalf("err: %v", err) ++ } ++ if res := obj.(bool); !res { ++ t.Fatalf("should work") ++ } ++ ++ req, _ = http.NewRequest("GET", "/v1/kv/test", nil) ++ resp = httptest.NewRecorder() ++ _, err = a.srv.KVSEndpoint(resp, req) ++ if err != nil { ++ t.Fatalf("err: %v", err) ++ } ++ assertIndex(t, resp) ++ ++ // The following headers are only included when returning a raw KV response ++ ++ contentTypeHdr := resp.Header().Values("Content-Type") ++ if len(contentTypeHdr) != 0 { ++ t.Fatalf("expected no Content-Type header, got %d: %+v", len(contentTypeHdr), contentTypeHdr) ++ } ++ ++ optionsHdr := resp.Header().Values("X-Content-Type-Options") ++ if len(optionsHdr) != 0 { ++ t.Fatalf("expected no X-Content-Type-Options header, got %d: %+v", len(optionsHdr), optionsHdr) ++ } ++ ++ cspHeader := resp.Header().Values("Content-Security-Policy") ++ if len(cspHeader) != 0 { ++ t.Fatalf("expected no Content-Security-Policy header, got %d: %+v", len(optionsHdr), optionsHdr) ++ } ++} ++ + func TestKVSEndpoint_DELETE_ConflictingFlags(t *testing.T) { + t.Parallel() + a := NewTestAgent(t, "") diff -Nru consul-1.7.4+dfsg1/debian/patches/fix-test-for-go1.16.patch consul-1.8.7+dfsg1/debian/patches/fix-test-for-go1.16.patch --- consul-1.7.4+dfsg1/debian/patches/fix-test-for-go1.16.patch 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/patches/fix-test-for-go1.16.patch 2021-11-08 20:06:09.000000000 +0000 @@ -0,0 +1,65 @@ +From 3e20bd25bdbec9b1b50fb5b1e0591314ec0c5fe2 Mon Sep 17 00:00:00 2001 +From: Daniel Nephin +Date: Tue, 13 Apr 2021 13:25:45 -0400 +Subject: [PATCH] connect: fix test for go1.16 + +There is no way to compare x509.CertPools now that it has an unexpected +function field. This comparison is as close as we can get. + +See https://github.com/golang/go/issues/26614 for a related issue. + +Origin: upstream, https://github.com/hashicorp/consul/commit/3e20bd25bdbec9b +--- + connect/tls_test.go | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +--- a/connect/tls_test.go ++++ b/connect/tls_test.go +@@ -6,13 +6,15 @@ + "encoding/pem" + "testing" + +- "github.com/hashicorp/consul/sdk/testutil" +- "github.com/hashicorp/consul/testrpc" ++ "github.com/google/go-cmp/cmp" ++ "github.com/google/go-cmp/cmp/cmpopts" ++ "github.com/stretchr/testify/require" + + "github.com/hashicorp/consul/agent" + "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/api" +- "github.com/stretchr/testify/require" ++ "github.com/hashicorp/consul/sdk/testutil" ++ "github.com/hashicorp/consul/testrpc" + ) + + func Test_verifyServerCertMatchesURI(t *testing.T) { +@@ -260,7 +262,7 @@ + func requireEqualTLSConfig(t *testing.T, expect, got *tls.Config) { + require := require.New(t) + require.Equal(expect.RootCAs, got.RootCAs) +- require.Equal(expect.ClientCAs, got.ClientCAs) ++ assertDeepEqual(t, expect.ClientCAs, got.ClientCAs, cmpCertPool) + require.Equal(expect.InsecureSkipVerify, got.InsecureSkipVerify) + require.Equal(expect.MinVersion, got.MinVersion) + require.Equal(expect.CipherSuites, got.CipherSuites) +@@ -287,6 +289,19 @@ + require.Equal(expectLeaf, gotLeaf) + } + ++// lazyCerts has a func field which can't be compared. ++var cmpCertPool = cmp.Options{ ++ cmpopts.IgnoreFields(x509.CertPool{}, "lazyCerts"), ++ cmp.AllowUnexported(x509.CertPool{}), ++} ++ ++func assertDeepEqual(t *testing.T, x, y interface{}, opts ...cmp.Option) { ++ t.Helper() ++ if diff := cmp.Diff(x, y, opts...); diff != "" { ++ t.Fatalf("assertion failed: values are not equal\n--- expected\n+++ actual\n%v", diff) ++ } ++} ++ + // requireCorrectVerifier invokes got.VerifyPeerCertificate and expects the + // tls.Config arg to be returned on the provided channel. This ensures the + // correct verifier func was attached to got. diff -Nru consul-1.7.4+dfsg1/debian/patches/provider-no-k8s.patch consul-1.8.7+dfsg1/debian/patches/provider-no-k8s.patch --- consul-1.7.4+dfsg1/debian/patches/provider-no-k8s.patch 2020-02-19 22:24:35.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/patches/provider-no-k8s.patch 2021-11-08 20:05:18.000000000 +0000 @@ -15,7 +15,7 @@ ) func (a *Agent) retryJoinLAN() { -@@ -43,9 +42,8 @@ +@@ -107,9 +106,8 @@ providers := make(map[string]discover.Provider) for k, v := range discover.Providers { providers[k] = v @@ -25,3 +25,25 @@ return discover.New( discover.WithUserAgent(lib.UserAgent()), discover.WithProviders(providers), +--- a/agent/auto-config/server_addr.go ++++ b/agent/auto-config/server_addr.go +@@ -7,9 +7,8 @@ + "strings" + + "github.com/hashicorp/consul/lib" + "github.com/hashicorp/go-discover" +- discoverk8s "github.com/hashicorp/go-discover/provider/k8s" + + "github.com/hashicorp/go-hclog" + ) + +@@ -17,9 +16,8 @@ + providers := make(map[string]discover.Provider) + for k, v := range discover.Providers { + providers[k] = v + } +- providers["k8s"] = &discoverk8s.Provider{} + + disco, err := discover.New( + discover.WithUserAgent(lib.UserAgent()), + discover.WithProviders(providers), diff -Nru consul-1.7.4+dfsg1/debian/patches/series consul-1.8.7+dfsg1/debian/patches/series --- consul-1.7.4+dfsg1/debian/patches/series 2020-02-19 22:24:57.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/patches/series 2021-11-08 20:07:37.000000000 +0000 @@ -1,4 +1,4 @@ provider-no-k8s.patch - t-skip-unreliable-tests.patch -vendor-envoyproxy.patch +CVE-2020-25864.patch +fix-test-for-go1.16.patch diff -Nru consul-1.7.4+dfsg1/debian/patches/t-skip-unreliable-tests.patch consul-1.8.7+dfsg1/debian/patches/t-skip-unreliable-tests.patch --- consul-1.7.4+dfsg1/debian/patches/t-skip-unreliable-tests.patch 2020-06-11 05:43:28.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/patches/t-skip-unreliable-tests.patch 2021-11-08 20:05:18.000000000 +0000 @@ -5,7 +5,7 @@ --- a/agent/agent_endpoint_test.go +++ b/agent/agent_endpoint_test.go -@@ -272,8 +272,9 @@ +@@ -306,8 +306,9 @@ }) } @@ -13,39 +13,9 @@ +t.Skip("DM-skipped") t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()+` + a := NewTestAgent(t, TestACLConfig()+` services { -@@ -1570,8 +1571,9 @@ - } - } - - func TestAgent_Leave(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") - defer a1.Shutdown() - testrpc.WaitForLeader(t, a1.RPC, "dc1") -@@ -1637,8 +1639,9 @@ - }) - } - - func TestAgent_ForceLeave(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := NewTestAgent(t, t.Name(), "") - defer a1.Shutdown() - a2 := NewTestAgent(t, t.Name(), "") -@@ -1830,8 +1833,9 @@ - - // This verifies all the forms of the new args-style check that we need to - // support as a result of https://github.com/hashicorp/consul/issues/3587. - func TestAgent_RegisterCheck_Scripts(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), ` - enable_script_checks = true - `) -@@ -2374,8 +2378,9 @@ +@@ -2577,8 +2578,9 @@ }) } @@ -53,39 +23,9 @@ +t.Skip("DM-skipped") t.Parallel() maxChecksSize := 256 - a := NewTestAgent(t, t.Name(), fmt.Sprintf("check_output_max_size=%d", maxChecksSize)) + a := NewTestAgent(t, fmt.Sprintf("check_output_max_size=%d", maxChecksSize)) defer a.Shutdown() -@@ -3944,8 +3949,9 @@ - }) - } - - func TestAgent_ServiceMaintenance_Enable(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") -@@ -4024,8 +4030,9 @@ - } - } - - func TestAgent_ServiceMaintenance_ACLDeny(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -4201,8 +4208,9 @@ - } - } - - func TestAgent_Monitor(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") -@@ -4975,8 +4983,9 @@ +@@ -5181,8 +5183,9 @@ require.True(acl.IsErrPermissionDenied(err)) } @@ -95,7 +35,7 @@ assert := assert.New(t) require := require.New(t) -@@ -5078,8 +5087,9 @@ +@@ -5276,8 +5279,9 @@ // Test we can request a leaf cert for a service we have permission for // but is not local to this agent. @@ -107,27 +47,7 @@ require := require.New(t) --- a/agent/local/state_test.go +++ b/agent/local/state_test.go -@@ -1376,8 +1376,9 @@ - } - } - - func TestAgent_UpdateCheck_DiscardOutput(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ` - discard_check_output = true - check_update_interval = "0s" # set to "0s" since otherwise output checks are deferred -@@ -1427,8 +1428,9 @@ - } - } - - func TestAgentAntiEntropy_Check_DeferSync(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := &agent.TestAgent{Name: t.Name(), HCL: ` - check_update_interval = "500ms" - `} -@@ -1762,8 +1764,9 @@ +@@ -1776,8 +1776,9 @@ } } @@ -148,28 +68,8 @@ t.Parallel() // Fire up an agent with TLS enabled. - a := NewTestAgentWithFields(t, true, TestAgent{ -@@ -319,8 +320,9 @@ - } - } - - func TestHTTPAPI_Ban_Nonprintable_Characters(t *testing.T) { -+t.Skip("DM-skipped") - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - - req, err := http.NewRequest("GET", "/v1/kv/bad\x00ness", nil) -@@ -338,8 +340,9 @@ - } - } - - func TestHTTPAPI_Allow_Nonprintable_Characters_With_Flag(t *testing.T) { -+t.Skip("DM-skipped") - a := NewTestAgent(t, t.Name(), "disable_http_unprintable_char_filter = true") - defer a.Shutdown() - - req, err := http.NewRequest("GET", "/v1/kv/bad\x00ness", nil) -@@ -1159,8 +1162,9 @@ + a := StartTestAgent(t, TestAgent{ +@@ -1158,8 +1159,9 @@ } } @@ -202,8 +102,8 @@ t.Parallel() typ := TestType(t) - defer typ.AssertExpectations(t) -@@ -161,8 +162,9 @@ + typ.On("RegisterOptions").Return(RegisterOptions{}) +@@ -160,8 +161,9 @@ // important things to get working. } @@ -213,7 +113,7 @@ typ := TestTypeNonBlocking(t) defer typ.AssertExpectations(t) -@@ -339,8 +341,9 @@ +@@ -335,8 +337,9 @@ } // Test that a refresh performs a backoff. @@ -237,7 +137,7 @@ defer stop() --- a/agent/cache-types/connect_ca_leaf_test.go +++ b/agent/cache-types/connect_ca_leaf_test.go -@@ -143,8 +143,9 @@ +@@ -146,8 +146,9 @@ // Test that after an initial signing, new CA roots (new ID) will // trigger a blocking query to execute. @@ -247,7 +147,7 @@ require := require.New(t) rpc := TestRPC(t) -@@ -254,8 +255,9 @@ +@@ -257,8 +258,9 @@ // Tests that if the root change jitter is longer than the time left on the // timeout, we return normally but then still renew the cert on a subsequent // call. @@ -257,7 +157,7 @@ require := require.New(t) rpc := TestRPC(t) -@@ -403,8 +405,9 @@ +@@ -406,8 +408,9 @@ } // Tests that if the root changes in between blocking calls we still pick it up. @@ -267,7 +167,7 @@ require := require.New(t) rpc := TestRPC(t) -@@ -508,8 +511,9 @@ +@@ -511,8 +514,9 @@ } @@ -277,7 +177,7 @@ require := require.New(t) rpc := TestRPC(t) -@@ -689,8 +693,9 @@ +@@ -692,8 +696,9 @@ // This test runs multiple concurrent callers watching different leaf certs and // tries to ensure that the background root watch activity behaves correctly. @@ -287,7 +187,7 @@ require := require.New(t) rpc := TestRPC(t) -@@ -870,8 +875,9 @@ +@@ -873,8 +878,9 @@ // Test that after an initial signing, an expiringLeaf will trigger a // blocking query to resign. @@ -311,17 +211,7 @@ c.CoordinateUpdateBatchSize = 5 --- a/agent/dns_test.go +++ b/agent/dns_test.go -@@ -203,8 +203,9 @@ - require.Empty(t, in.Answer) - } - - func TestDNS_NodeLookup(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -447,8 +448,9 @@ +@@ -448,8 +448,9 @@ } verify.Values(t, "Answer", in.Answer, wantAnswer) } @@ -331,67 +221,7 @@ // Start 3 DNS recursors that returns a REFUSED status server1 := makeRecursor(t, dns.Msg{ MsgHdr: dns.MsgHdr{Rcode: dns.RcodeRefused}, -@@ -785,8 +787,9 @@ - } - } - - func TestDNS_EDNS0_ECS(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -999,8 +1002,9 @@ - } - } - - func TestDNS_ServiceReverseLookup(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -1226,8 +1230,9 @@ - } - } - - func TestDNS_ServiceLookupNoMultiCNAME(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -1848,8 +1853,9 @@ - } - } - - func TestDNS_NSRecords(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), ` - domain = "CONSUL." - node_name = "server1" -@@ -3203,8 +3209,9 @@ - } - } - - func TestDNS_ServiceLookup_Dedup(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -4097,8 +4104,9 @@ - } - } - - func TestDNS_TCP_and_UDP_Truncate(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), ` - dns_config { - enable_truncate = true -@@ -4547,8 +4555,9 @@ +@@ -4651,8 +4652,9 @@ return nil } @@ -401,7 +231,7 @@ tests := []struct { name string aRecordLimit int -@@ -4691,8 +4700,9 @@ +@@ -4795,8 +4797,9 @@ } } @@ -411,46 +241,6 @@ recursor := makeRecursor(t, dns.Msg{ Answer: []dns.RR{ dnsCNAME("www.google.com", "google.com"), -@@ -5210,8 +5220,9 @@ - expectResult("api-ttl.query.consul.", 18) - } - - func TestDNS_PreparedQuery_Failover(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` - datacenter = "dc1" - translate_wan_addrs = true -@@ -5322,8 +5333,9 @@ - } - } - - func TestDNS_ServiceLookup_SRV_RFC(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -5650,8 +5662,9 @@ - } - } - - func TestDNS_AddressLookupIPV6(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") -@@ -6924,8 +6937,9 @@ - } - } - - func TestDNS_ReloadConfig_DuringQuery(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") --- a/command/debug/debug_test.go +++ b/command/debug/debug_test.go @@ -24,8 +24,9 @@ @@ -473,21 +263,9 @@ cases := map[string]struct { // used in -target param ---- a/command/exec/exec_test.go -+++ b/command/exec/exec_test.go -@@ -66,8 +66,9 @@ - } - } - - func TestExecCommand_CrossDC(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := agent.NewTestAgent(t, t.Name(), ` - disable_remote_exec = false - `) --- a/agent/consul/leader_test.go +++ b/agent/consul/leader_test.go -@@ -390,8 +390,9 @@ +@@ -483,8 +483,9 @@ } } @@ -497,18 +275,6 @@ dir1, s1 := testServerWithConfig(t, func(c *Config) { c.ACLDatacenter = "dc1" c.ACLsEnabled = true ---- a/agent/prepared_query_endpoint_test.go -+++ b/agent/prepared_query_endpoint_test.go -@@ -990,8 +990,9 @@ - // Since we've done exhaustive testing of the calls into the endpoints above - // this is just a basic end-to-end sanity check to make sure things are wired - // correctly when calling through to the real endpoints. - func TestPreparedQuery_Integration(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") --- a/connect/proxy/proxy_test.go +++ b/connect/proxy/proxy_test.go @@ -17,8 +17,9 @@ @@ -553,11 +319,11 @@ +t.Skip("DM-skipped") require := require.New(t) - a := agent.NewTestAgent(t, "007", "") - defer a.Shutdown() + a := agent.StartTestAgent(t, agent.TestAgent{Name: "007", Overrides: ` + connect { --- a/agent/session_endpoint_test.go +++ b/agent/session_endpoint_test.go -@@ -492,8 +492,9 @@ +@@ -489,8 +489,9 @@ }) } @@ -565,9 +331,9 @@ +t.Skip("DM-skipped") // t.Parallel() // timing test. no parallel ttl := 250 * time.Millisecond - a := NewTestAgent(t, t.Name(), ` + a := NewTestAgent(t, ` session_ttl_min = "250ms" -@@ -673,8 +674,9 @@ +@@ -672,8 +673,9 @@ }) } @@ -575,7 +341,7 @@ +t.Skip("DM-skipped") t.Parallel() t.Run("", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() --- a/agent/consul/snapshot_endpoint_test.go +++ b/agent/consul/snapshot_endpoint_test.go @@ -591,7 +357,7 @@ defer s1.Shutdown() --- a/agent/consul/client_test.go +++ b/agent/consul/client_test.go -@@ -351,8 +351,9 @@ +@@ -364,8 +364,9 @@ wg.Wait() } @@ -599,11 +365,11 @@ +t.Skip("DM-skipped") t.Parallel() var servers []*Server - var serverDirs []string const numServers = 5 + --- a/agent/cache/cache_test.go +++ b/agent/cache/cache_test.go -@@ -437,8 +437,9 @@ +@@ -460,8 +460,9 @@ // Test that a type registered with a periodic refresh will perform // that refresh after the timer is up. @@ -611,9 +377,9 @@ +t.Skip("DM-skipped") t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) -@@ -524,8 +525,9 @@ + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ +@@ -549,8 +550,9 @@ } // Test that a refresh performs a backoff. @@ -621,9 +387,9 @@ +t.Skip("DM-skipped") t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) -@@ -565,8 +567,9 @@ + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ +@@ -591,8 +593,9 @@ } // Test that a badly behaved RPC that returns 0 index will perform a backoff. @@ -631,9 +397,9 @@ +t.Skip("DM-skipped") t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) -@@ -608,8 +611,9 @@ + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ +@@ -635,8 +638,9 @@ // with any index 0 loops from background refreshed while also returning // immediately on the initial request if there is no data written to that table // yet. @@ -641,9 +407,9 @@ +t.Skip("DM-skipped") t.Parallel() - typ := TestType(t) - defer typ.AssertExpectations(t) -@@ -878,8 +882,9 @@ + typ := &MockType{} + typ.On("RegisterOptions").Return(RegisterOptions{ +@@ -911,8 +915,9 @@ // Test that Get partitions the caches based on token so two equivalent requests // with different ACL tokens do not return the same result. @@ -651,9 +417,9 @@ +t.Skip("DM-skipped") t.Parallel() - c := TestCache(t) - c.RegisterType("t", &testPartitionType{}, nil) -@@ -913,8 +918,9 @@ + c := New(Options{}) + c.RegisterType("t", &testPartitionType{}) +@@ -948,8 +953,9 @@ // Test that background refreshing reports correct Age in failure and happy // states. @@ -663,7 +429,7 @@ require := require.New(t) -@@ -1030,8 +1036,9 @@ +@@ -1066,8 +1072,9 @@ require.False(timeout, "failed to observe update after %s", time.Since(t0)) } @@ -673,43 +439,19 @@ require := require.New(t) ---- a/command/kv/put/kv_put_test.go -+++ b/command/kv/put/kv_put_test.go -@@ -104,8 +104,9 @@ - } - } - - func TestKVPutCommand_EmptyDataQuoted(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) - defer a.Shutdown() - client := a.Client() ---- a/agent/coordinate_endpoint_test.go -+++ b/agent/coordinate_endpoint_test.go -@@ -50,8 +50,9 @@ +--- a/connect/proxy/listener_test.go ++++ b/connect/proxy/listener_test.go +@@ -106,8 +106,9 @@ } } - func TestCoordinate_Datacenters(t *testing.T) { + func TestPublicListener(t *testing.T) { +t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") -@@ -76,8 +77,9 @@ - } - } + // Can't enable t.Parallel since we rely on the global metrics instance. - func TestCoordinate_Nodes(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") ---- a/connect/proxy/listener_test.go -+++ b/connect/proxy/listener_test.go -@@ -159,8 +159,9 @@ + ca := agConnect.TestCA(t, nil) + ports := freeport.MustTake(1) +@@ -159,8 +160,9 @@ assertAllTimeCounterValue(t, sink, "consul.proxy.test.inbound.rx_bytes;dst=db", 11) } @@ -721,27 +463,7 @@ ports := freeport.MustTake(1) --- a/agent/catalog_endpoint_test.go +++ b/agent/catalog_endpoint_test.go -@@ -190,8 +190,9 @@ - require.Equal(t, v, "somevalue") - } - - func TestCatalogNodes_WanTranslation(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` - datacenter = "dc1" - translate_wan_addrs = true -@@ -808,8 +809,9 @@ - require.Len(t, nodes, 1) - } - - func TestCatalogServiceNodes_WanTranslation(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` - datacenter = "dc1" - translate_wan_addrs = true -@@ -1037,8 +1039,9 @@ +@@ -1038,8 +1038,9 @@ assert.Equal(args.Service.Proxy, nodes[0].ServiceProxy) } @@ -749,51 +471,41 @@ +t.Skip("DM-skipped") t.Parallel() - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() -@@ -1233,8 +1236,9 @@ - assert.Equal(structs.ServiceKindConnectProxy, v.Kind) - } - - func TestCatalogNodeServices_WanTranslation(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a1 := NewTestAgent(t, t.Name(), ` - datacenter = "dc1" - translate_wan_addrs = true --- a/agent/agent_test.go +++ b/agent/agent_test.go -@@ -1770,8 +1770,9 @@ - +@@ -745,8 +745,9 @@ + } } - func TestAgent_HTTPCheck_EnableAgentTLSForChecks(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() + func TestCacheRateLimit(test *testing.T) { ++test.Skip("DM-skipped") + test.Parallel() + tests := []struct { + // count := number of updates performed (1 every 10ms) + count int +@@ -1894,8 +1895,9 @@ - run := func(t *testing.T, ca string) { - a := NewTestAgentWithFields(t, true, TestAgent{ -@@ -2231,8 +2232,9 @@ - require.Equal(t, "mytoken", chkState.Token) } - func TestAgent_PurgeCheck(t *testing.T) { + func TestAgent_HTTPCheck_EnableAgentTLSForChecks(t *testing.T) { +t.Skip("DM-skipped") t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() -@@ -3437,8 +3439,9 @@ - require.Len(t, tlsConf.ClientCAs.Subjects(), 2) + run := func(t *testing.T, ca string) { + a := StartTestAgent(t, TestAgent{ +@@ -3638,8 +3640,9 @@ + }) } - func TestAgent_ReloadConfigAndKeepChecksStatus(t *testing.T) { + func testAgent_ReloadConfigAndKeepChecksStatus(t *testing.T, extraHCL string) { +t.Skip("DM-skipped") - t.Parallel() dataDir := testutil.TempDir(t, "agent") // we manage the data dir defer os.RemoveAll(dataDir) - waitDurationSeconds := 1 -@@ -4055,8 +4058,9 @@ + hcl := `data_dir = "` + dataDir + `" + enable_local_script_checks=true +@@ -4238,8 +4241,9 @@ }) } @@ -803,28 +515,6 @@ // Ensure that initial failures to fetch the discovery chain via the agent // cache using the notify API for a service with no config entries ---- a/agent/acl_endpoint_legacy_test.go -+++ b/agent/acl_endpoint_legacy_test.go -@@ -128,8 +128,9 @@ - } - } - - func TestACL_Legacy_Destroy(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) - defer a.Shutdown() - -@@ -249,8 +250,9 @@ - }) - } - - func TestACL_Legacy_List(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), TestACLConfig()) - defer a.Shutdown() - --- a/agent/health_endpoint_test.go +++ b/agent/health_endpoint_test.go @@ -19,8 +19,9 @@ @@ -835,28 +525,8 @@ +t.Skip("DM-skipped") t.Parallel() t.Run("warning", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") + a := NewTestAgent(t, "") defer a.Shutdown() -@@ -736,8 +737,9 @@ - } - } - - func TestHealthServiceNodes_Filter(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForTestAgent(t, a.RPC, "dc1") -@@ -877,8 +879,9 @@ - }) - } - - func TestHealthServiceNodes_PassingFilter(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - --- a/agent/snapshot_endpoint_test.go +++ b/agent/snapshot_endpoint_test.go @@ -12,8 +12,9 @@ @@ -868,31 +538,7 @@ t.Parallel() var snap io.Reader t.Run("create snapshot", func(t *testing.T) { - a := NewTestAgent(t, t.Name(), "") ---- a/agent/status_endpoint_test.go -+++ b/agent/status_endpoint_test.go -@@ -10,8 +10,9 @@ - "github.com/stretchr/testify/require" - ) - - func TestStatusLeader(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") ---- a/command/kv/get/kv_get_test.go -+++ b/command/kv/get/kv_get_test.go -@@ -334,8 +334,9 @@ - } - } - - func TestKVGetCommand_DetailedBase64(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) - defer a.Shutdown() - client := a.Client() + a := NewTestAgent(t, "") --- a/agent/xds/server_test.go +++ b/agent/xds/server_test.go @@ -392,8 +392,9 @@ @@ -941,30 +587,6 @@ writer := &rexecWriter{ BufCh: make(chan []byte, 16), BufSize: 16, ---- a/agent/operator_endpoint_test.go -+++ b/agent/operator_endpoint_test.go -@@ -346,8 +346,9 @@ - } - } - - func TestOperator_AutopilotSetConfiguration(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - ---- a/command/lock/lock_test.go -+++ b/command/lock/lock_test.go -@@ -298,8 +298,9 @@ - } - } - - func TestLockCommand_ChildExitCode(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) - defer a.Shutdown() - --- a/sdk/testutil/retry/retry_test.go +++ b/sdk/testutil/retry/retry_test.go @@ -8,8 +8,9 @@ @@ -977,63 +599,9 @@ desc string r Retryer }{ ---- a/agent/kvs_endpoint_test.go -+++ b/agent/kvs_endpoint_test.go -@@ -290,8 +290,9 @@ - } - } - - func TestKVSEndpoint_ListKeys(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - -@@ -398,8 +399,9 @@ - } - } - - func TestKVSEndpoint_GET_Raw(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() - ---- a/command/monitor/monitor_test.go -+++ b/command/monitor/monitor_test.go -@@ -9,8 +9,9 @@ - "github.com/mitchellh/cli" - ) - - func TestMonitorCommand_exitsOnSignalBeforeLinesArrive(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgentWithFields(t, true, agent.TestAgent{}) - defer a.Shutdown() - -@@ -62,8 +63,9 @@ - } - } - - func TestMonitorCommand_LogJSONValidFlag(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgentWithFields(t, true, agent.TestAgent{}) - defer a.Shutdown() - --- a/agent/config/runtime_test.go +++ b/agent/config/runtime_test.go -@@ -48,8 +48,9 @@ - // should check one option at a time if possible and should use generic - // values, e.g. 'a' or 1 instead of 'servicex' or 3306. - - func TestConfigFlagsAndEdgecases(t *testing.T) { -+t.Skip("DM-skipped") - dataDir := testutil.TempDir(t, "consul") - defer os.RemoveAll(dataDir) - - tests := []configTest{ -@@ -3663,8 +3664,9 @@ +@@ -4422,8 +4422,9 @@ // // random-string 8 // @@ -1045,7 +613,7 @@ cidr := func(s string) *net.IPNet { --- a/agent/proxycfg/manager_test.go +++ b/agent/proxycfg/manager_test.go -@@ -47,8 +47,9 @@ +@@ -48,8 +48,9 @@ require.Equal(t, source.Datacenter, intReq.(*structs.IntentionQueryRequest).Datacenter) } @@ -1090,7 +658,7 @@ t.Parallel() nodeName := "name|with|bars" - a := agent.NewTestAgent(t, "", `node_name = "`+nodeName+`"`) + a := agent.NewTestAgent(t, `node_name = "`+nodeName+`"`) --- a/agent/service_checks_test.go +++ b/agent/service_checks_test.go @@ -15,8 +15,9 @@ @@ -1101,20 +669,8 @@ +t.Skip("DM-Disabled") t.Parallel() - a := NewTestAgent(t, t.Name(), "") - defer a.Shutdown() ---- a/command/snapshot/save/snapshot_save_test.go -+++ b/command/snapshot/save/snapshot_save_test.go -@@ -102,8 +102,9 @@ - } - } - - func TestSnapshotSaveCommand_TruncatedStream(t *testing.T) { -+t.Skip("DM-skipped") - t.Parallel() - a := agent.NewTestAgent(t, t.Name(), ``) + a := NewTestAgent(t, "") defer a.Shutdown() - client := a.Client() --- a/agent/config/segment_oss_test.go +++ b/agent/config/segment_oss_test.go @@ -9,8 +9,9 @@ @@ -1129,7 +685,7 @@ tests := []configTest{ --- a/agent/service_manager_test.go +++ b/agent/service_manager_test.go -@@ -205,8 +205,9 @@ +@@ -260,8 +260,9 @@ }, gateway) } diff -Nru consul-1.7.4+dfsg1/debian/patches/vendor-envoyproxy.patch consul-1.8.7+dfsg1/debian/patches/vendor-envoyproxy.patch --- consul-1.7.4+dfsg1/debian/patches/vendor-envoyproxy.patch 2019-11-29 08:08:12.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/patches/vendor-envoyproxy.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -Last-Update: 2019-11-28 -Forwarded: not-needed -Bug-Upstream: https://github.com/hashicorp/consul/issues/6844 -Author: Dmitry Smirnov -Description: fix FTBFS due to move of sub-vendored library - ---- a/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.proto -+++ b/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.proto -@@ -1,8 +1,8 @@ - syntax = "proto2"; - package validate; - --option go_package = "github.com/lyft/protoc-gen-validate/validate"; -+option go_package = "github.com/envoyproxy/protoc-gen-validate/validate"; - option java_package = "com.lyft.pgv.validate"; - - import "google/protobuf/descriptor.proto"; - import "google/protobuf/duration.proto"; ---- a/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.pb.go -+++ b/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.pb.go -@@ -1,8 +1,8 @@ - // Code generated by protoc-gen-go. DO NOT EDIT. - // source: validate/validate.proto - --package validate // import "github.com/lyft/protoc-gen-validate/validate" -+package validate // import "github.com/envoyproxy/protoc-gen-validate/validate" - - import proto "github.com/golang/protobuf/proto" - import fmt "fmt" - import math "math" diff -Nru consul-1.7.4+dfsg1/debian/rules consul-1.8.7+dfsg1/debian/rules --- consul-1.7.4+dfsg1/debian/rules 2020-05-18 11:45:45.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/rules 2021-11-09 11:57:45.000000000 +0000 @@ -1,10 +1,12 @@ #!/usr/bin/make -f +include /usr/share/dpkg/pkg-info.mk + ## needs "mockery": export DH_GOLANG_GO_GENERATE := 1 -#~export GOPROXY=off -#~export GO111MODULE=off +export GOPROXY=off +export GO111MODULE=off export DH_GOLANG_INSTALL_EXTRA := \ command/connect/ca/set/test-fixtures \ @@ -32,15 +34,6 @@ -find vendor -type d -empty -delete -print $(RM) -r test/integration -override_dh_auto_configure: - dh_auto_configure - - mkdir -v -p _build/src/github.com/keybase/ - ln -sv /usr/share/gocode/src/golang.org/x/crypto _build/src/github.com/keybase/go-crypto - - mkdir -v -p _build/src/github.com/SermoDigital/ - ln -sv /usr/share/gocode/src/gopkg.in/square/go-jose.v1 _build/src/github.com/SermoDigital/jose - LIBSELF:=github.com/hashicorp/consul override_dh_auto_build: # ## https://salsa.debian.org/onlyjob/notes/wikis/golang @@ -51,8 +44,10 @@ # dh_auto_build -v # export GOPATH=$(CURDIR)/_build \ + GIT_COMMIT=$(DEB_VERSION_UPSTREAM) \ + GIT_COMMIT_YEAR=$(shell date -u -d @$(SOURCE_DATE_EPOCH) +%Y) \ && $(MAKE) -C _build/src/$(LIBSELF) --makefile=$(CURDIR)/GNUmakefile proto - + dh_auto_build -v ## Quoting upstream as per ".github/CONTRIBUTING.md": @@ -61,12 +56,11 @@ ## Note that "--max-parallel=2" translates to "-p 2" which is not the same as "-parallel 2". override_dh_auto_test: $(MINUS)PATH="$(CURDIR)/_build/bin:$${PATH}" \ - DH_GOLANG_EXCLUDES="${DH_GOLANG_EXCLUDES} api agent/cache agent/checks agent/connect agent/consul agent/proxycfg command/debug command/tls" \ + DH_GOLANG_EXCLUDES="${DH_GOLANG_EXCLUDES} api agent/cache agent/checks agent/connect agent/consul agent/proxycfg agent/routine-leak-checker command/debug command/tls command/flags command/monitor" \ dh_auto_test -v --max-parallel=4 -- -short -failfast -timeout 8m override_dh_install: - ## Do not install "github.com/hashicorp/consul/vendor" to -dev package. - dh_install -X/src/github.com/hashicorp/consul/vendor -Xcertgen + dh_install -Xcertgen override_dh_installsystemd: dh_installsystemd --no-enable --no-start diff -Nru consul-1.7.4+dfsg1/debian/source/lintian-overrides consul-1.8.7+dfsg1/debian/source/lintian-overrides --- consul-1.7.4+dfsg1/debian/source/lintian-overrides 2019-11-29 08:08:28.000000000 +0000 +++ consul-1.8.7+dfsg1/debian/source/lintian-overrides 2021-11-08 20:05:18.000000000 +0000 @@ -1,6 +1,2 @@ -source-contains-empty-directory vendor/* - ## False positives: -source-is-missing ui-v2/app/helpers/css-var.js line length * -source-is-missing ui-v2/lib/startup/index.js line length * source-is-missing ui-v2/lib/startup/templates/body.html.js line length * diff -Nru consul-1.7.4+dfsg1/.github/CONTRIBUTING.md consul-1.8.7+dfsg1/.github/CONTRIBUTING.md --- consul-1.7.4+dfsg1/.github/CONTRIBUTING.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/.github/CONTRIBUTING.md 2020-12-10 21:46:52.000000000 +0000 @@ -60,12 +60,11 @@ ## Building Consul If you wish to work on Consul itself, you'll first need [Go](https://golang.org) -installed (version 1.13 is _required_). Make sure you have Go properly installed, -including setting up your [GOPATH](https://golang.org/doc/code.html#GOPATH). +installed (version 1.14 is _required_). -Next, clone this repository into `$GOPATH/src/github.com/hashicorp/consul` and -then run `make dev`. In a few moments, you'll have a working `consul` executable -in `consul/bin` and `$GOPATH/bin`: + +Next, clone this repository and then run `make dev`. In a few moments, you'll have a working +`consul` executable in `consul/bin` and `$GOPATH/bin`: >Note: `make dev` will build for your local machine's os/architecture. If you wish to build for all os/architecture combinations use `make`. diff -Nru consul-1.7.4+dfsg1/.github/ISSUE_TEMPLATE/config.yml consul-1.8.7+dfsg1/.github/ISSUE_TEMPLATE/config.yml --- consul-1.7.4+dfsg1/.github/ISSUE_TEMPLATE/config.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.github/ISSUE_TEMPLATE/config.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Consul Community Support + url: https://discuss.hashicorp.com/c/consul/29 + about: If you have a question, or are looking for advice, please post on our Discuss forum! The community loves to chime in to help. Happy Coding! + - name: Consul-Helm GitHub Issues + url: https://github.com/hashicorp/consul-helm + about: Are you submitting an issue or feature enhancement for the Consul helm chart? Please post in the Consul-Helm GitHub Issues. + - name: Consul Learn Tracks + url: https://learn.hashicorp.com/consul?track=getting-started#getting-started + about: Please check out our Learn Guides. These hands on guides deal with many of the tasks common to using Consul \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/.github/ISSUE_TEMPLATE/question.md consul-1.8.7+dfsg1/.github/ISSUE_TEMPLATE/question.md --- consul-1.7.4+dfsg1/.github/ISSUE_TEMPLATE/question.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/.github/ISSUE_TEMPLATE/question.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- -name: Question -about: If you have a question, please do not create an issue. Instead check out our other community resources. - ---- - -Issues on GitHub are intended to be related to bugs or feature requests, so we recommend using our other community resources instead of asking here if you have a question. - -- Frequently asked questions: https://www.consul.io/docs/faq.html -- Consul Guides: https://www.consul.io/docs/guides/index.html -- Any other questions can be sent to the Consul section of the [HashiCorp forum]: (https://discuss.hashicorp.com/c/consul) diff -Nru consul-1.7.4+dfsg1/GNUmakefile consul-1.8.7+dfsg1/GNUmakefile --- consul-1.7.4+dfsg1/GNUmakefile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/GNUmakefile 2020-12-10 21:46:52.000000000 +0000 @@ -7,7 +7,8 @@ golang.org/x/tools/cmd/stringer \ github.com/gogo/protobuf/protoc-gen-gofast@$(GOGOVERSION) \ github.com/hashicorp/protoc-gen-go-binary \ - github.com/vektra/mockery/cmd/mockery + github.com/vektra/mockery/cmd/mockery \ + github.com/golangci/golangci-lint/cmd/golangci-lint@v1.23.6 GOTAGS ?= GOOS?=$(shell go env GOOS) @@ -20,9 +21,8 @@ GIT_COMMIT?=$(shell git rev-parse --short HEAD) GIT_COMMIT_YEAR?=$(shell git show -s --format=%cd --date=format:%Y HEAD) GIT_DIRTY?=$(shell test -n "`git status --porcelain`" && echo "+CHANGES" || true) -GIT_DESCRIBE?=$(shell git describe --tags --always --match "v*") GIT_IMPORT=github.com/hashicorp/consul/version -GOLDFLAGS=-X $(GIT_IMPORT).GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) -X $(GIT_IMPORT).GitDescribe=$(GIT_DESCRIBE) +GOLDFLAGS=-X $(GIT_IMPORT).GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) PROTOFILES?=$(shell find . -name '*.proto' | grep -v 'vendor/') PROTOGOFILES=$(PROTOFILES:.proto=.pb.go) @@ -123,7 +123,6 @@ export GIT_COMMIT export GIT_COMMIT_YEAR export GIT_DIRTY -export GIT_DESCRIBE export GOTAGS export GOLDFLAGS @@ -212,7 +211,7 @@ rm -f coverage.{sdk,api}.part go tool cover -html=coverage.out -test: other-consul dev-build vet test-internal +test: other-consul dev-build lint test-internal go-mod-tidy: @echo "--> Running go mod tidy" @@ -260,21 +259,7 @@ test-race: $(MAKE) GOTEST_FLAGS=-race -# Run tests with config for CI so `make test` can still be local-dev friendly. -test-ci: other-consul dev-build vet - @ if ! GOTEST_FLAGS="-short -timeout 8m -p 3 -parallel 4" make test-internal; then \ - echo " ============"; \ - echo " Retrying 1/2"; \ - echo " ============"; \ - if ! GOTEST_FLAGS="-timeout 9m -p 1 -parallel 1" make test-internal; then \ - echo " ============"; \ - echo " Retrying 2/2"; \ - echo " ============"; \ - GOTEST_FLAGS="-timeout 9m -p 1 -parallel 1" make test-internal; \ - fi \ - fi - -test-flake: other-consul vet +test-flake: other-consul lint @$(SHELL) $(CURDIR)/build-support/scripts/test-flake.sh --pkg "$(FLAKE_PKG)" --test "$(FLAKE_TEST)" --cpus "$(FLAKE_CPUS)" --n "$(FLAKE_N)" test-docker: linux go-build-image @@ -295,7 +280,6 @@ -e 'GIT_COMMIT=$(GIT_COMMIT)' \ -e 'GIT_COMMIT_YEAR=$(GIT_COMMIT_YEAR)' \ -e 'GIT_DIRTY=$(GIT_DIRTY)' \ - -e 'GIT_DESCRIBE=$(GIT_DESCRIBE)' \ $(TEST_PARALLELIZATION) \ $(TEST_DOCKER_RESOURCE_CONSTRAINTS) \ $(TEST_MODCACHE_VOL) \ @@ -312,23 +296,11 @@ exit 1 ; \ fi - -format: - @echo "--> Running go fmt" - @go fmt ./... - @cd api && go fmt ./... | sed 's@^@api/@' - @cd sdk && go fmt ./... | sed 's@^@sdk/@' - -vet: - @echo "--> Running go vet" - @go vet -tags '$(GOTAGS)' ./... && \ - (cd api && go vet -tags '$(GOTAGS)' ./...) && \ - (cd sdk && go vet -tags '$(GOTAGS)' ./...); if [ $$? -ne 0 ]; then \ - echo ""; \ - echo "Vet found suspicious constructs. Please check the reported constructs"; \ - echo "and fix them if necessary before submitting the code for review."; \ - exit 1; \ - fi +lint: + @echo "--> Running go golangci-lint" + @golangci-lint run --build-tags '$(GOTAGS)' && \ + (cd api && golangci-lint run --build-tags '$(GOTAGS)') && \ + (cd sdk && golangci-lint run --build-tags '$(GOTAGS)') # If you've run "make ui" manually then this will get called for you. This is # also run as part of the release build script when it verifies that there are no @@ -379,26 +351,20 @@ @$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh ui test-envoy-integ: $(ENVOY_INTEG_DEPS) - @$(SHELL) $(CURDIR)/test/integration/connect/envoy/run-tests.sh + @go test -v -timeout=30m -tags integration ./test/integration/connect/envoy -test-vault-ca-provider: +test-connect-ca-providers: ifeq ("$(CIRCLECI)","true") # Run in CI - gotestsum --format=short-verbose --junitfile "$(TEST_RESULTS_DIR)/gotestsum-report.xml" -- $(CURDIR)/agent/connect/ca/* -run 'TestVault(CA)?Provider' + gotestsum --format=short-verbose --junitfile "$(TEST_RESULTS_DIR)/gotestsum-report.xml" -- -cover -coverprofile=coverage.txt ./agent/connect/ca +# Run leader tests that require Vault + gotestsum --format=short-verbose --junitfile "$(TEST_RESULTS_DIR)/gotestsum-report-leader.xml" -- -cover -coverprofile=coverage-leader.txt -run TestLeader_Vault_ ./agent/consul else # Run locally - @echo "Running /agent/connect/ca TestVault(CA)?Provider tests in verbose mode" - @go test $(CURDIR)/agent/connect/ca/* -run 'TestVault(CA)?Provider' -v + @echo "Running /agent/connect/ca tests in verbose mode" + @go test -v ./agent/connect/ca endif -proto-delete: - @echo "Removing $(PROTOGOFILES)" - -@rm $(PROTOGOFILES) - @echo "Removing $(PROTOGOBINFILES)" - -@rm $(PROTOGOBINFILES) - -proto-rebuild: proto-delete proto - proto: $(PROTOGOFILES) $(PROTOGOBINFILES) @echo "Generated all protobuf Go files" @@ -407,6 +373,6 @@ @$(SHELL) $(CURDIR)/build-support/scripts/proto-gen.sh --grpc --import-replace "$<" -.PHONY: all ci bin dev dist cov test test-ci test-internal cover format vet ui static-assets tools +.PHONY: all ci bin dev dist cov test test-flake test-internal cover lint ui static-assets tools .PHONY: docker-images go-build-image ui-build-image static-assets-docker consul-docker ui-docker -.PHONY: version proto proto-rebuild proto-delete test-envoy-integ +.PHONY: version proto test-envoy-integ diff -Nru consul-1.7.4+dfsg1/.golangci.yml consul-1.8.7+dfsg1/.golangci.yml --- consul-1.7.4+dfsg1/.golangci.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/.golangci.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +linters: + disable-all: true + enable: + - gofmt + - govet + - unconvert + - staticcheck + - ineffassign + +issues: + # Disable the default exclude list so that all excludes are explicitly + # defined in this file. + exclude-use-default: false + + exclude-rules: + # Temp Ignore SA9004: only the first constant in this group has an explicit type + # https://staticcheck.io/docs/checks#SA9004 + - linters: [staticcheck] + text: "SA9004:" + + # Temp ignore SA2002: the goroutine calls T.Fatalf, which must be called in the same goroutine as the test + - linters: [staticcheck] + text: "SA2002:" + +linters-settings: + gofmt: + simplify: false + +run: + timeout: 5m diff -Nru consul-1.7.4+dfsg1/go.mod consul-1.8.7+dfsg1/go.mod --- consul-1.7.4+dfsg1/go.mod 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/go.mod 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ module github.com/hashicorp/consul -go 1.12 +go 1.13 replace github.com/hashicorp/consul/api => ./api @@ -9,80 +9,95 @@ replace launchpad.net/gocheck => github.com/go-check/check v0.0.0-20140225173054-eb6ee6f84d0a require ( - github.com/Azure/go-autorest v10.15.3+incompatible // indirect github.com/Microsoft/go-winio v0.4.3 // indirect github.com/NYTimes/gziphandler v1.0.1 github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e - github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 + github.com/armon/go-metrics v0.3.4 github.com/armon/go-radix v1.0.0 github.com/aws/aws-sdk-go v1.25.41 github.com/coredns/coredns v1.1.2 + github.com/coreos/go-oidc v2.1.0+incompatible github.com/digitalocean/godo v1.10.0 // indirect github.com/docker/go-connections v0.3.0 github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0 - github.com/envoyproxy/go-control-plane v0.8.0 + github.com/envoyproxy/go-control-plane v0.9.5 + github.com/frankban/quicktest v1.11.1 // indirect github.com/go-ole/go-ole v1.2.1 // indirect - github.com/gogo/googleapis v1.1.0 - github.com/gogo/protobuf v1.2.1 - github.com/golang/protobuf v1.3.1 - github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf - github.com/hashicorp/consul/api v1.4.0 - github.com/hashicorp/consul/sdk v0.4.0 + github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d + github.com/golang/protobuf v1.3.2 + github.com/google/go-querystring v1.0.0 // indirect + github.com/google/gofuzz v1.0.0 + github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2 + github.com/hashicorp/consul/api v1.7.0 + github.com/hashicorp/consul/sdk v0.6.0 + github.com/hashicorp/errwrap v1.0.0 github.com/hashicorp/go-bexpr v0.1.2 github.com/hashicorp/go-checkpoint v0.0.0-20171009173528-1545e56e46de github.com/hashicorp/go-cleanhttp v0.5.1 github.com/hashicorp/go-connlimit v0.2.0 - github.com/hashicorp/go-discover v0.0.0-20191202160150-7ec2cfbda7a2 + github.com/hashicorp/go-discover v0.0.0-20200501174627-ad1e96bde088 github.com/hashicorp/go-hclog v0.12.0 + github.com/hashicorp/go-immutable-radix v1.2.0 // indirect github.com/hashicorp/go-memdb v1.0.3 github.com/hashicorp/go-msgpack v0.5.5 github.com/hashicorp/go-multierror v1.1.0 github.com/hashicorp/go-raftchunking v0.6.1 + github.com/hashicorp/go-retryablehttp v0.6.7 // indirect github.com/hashicorp/go-sockaddr v1.0.2 github.com/hashicorp/go-syslog v1.0.0 - github.com/hashicorp/go-uuid v1.0.1 - github.com/hashicorp/go-version v1.1.0 - github.com/hashicorp/golang-lru v0.5.1 + github.com/hashicorp/go-uuid v1.0.2 + github.com/hashicorp/go-version v1.2.0 + github.com/hashicorp/golang-lru v0.5.4 github.com/hashicorp/hcl v1.0.0 github.com/hashicorp/hil v0.0.0-20160711231837-1e86c6b523c5 github.com/hashicorp/memberlist v0.2.2 github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69 github.com/hashicorp/raft v1.1.2 github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea - github.com/hashicorp/serf v0.9.2 - github.com/hashicorp/vault/api v1.0.4 + github.com/hashicorp/serf v0.9.4 + github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086 github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d github.com/imdario/mergo v0.3.6 + github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/kr/text v0.1.0 github.com/miekg/dns v1.1.26 github.com/mitchellh/cli v1.1.0 github.com/mitchellh/copystructure v1.0.0 - github.com/mitchellh/go-testing-interface v1.0.3 + github.com/mitchellh/go-testing-interface v1.14.0 github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452 - github.com/mitchellh/mapstructure v1.2.3 + github.com/mitchellh/mapstructure v1.3.3 + github.com/mitchellh/pointerstructure v1.0.0 github.com/mitchellh/reflectwalk v1.0.1 - github.com/onsi/gomega v1.4.2 // indirect github.com/pascaldekloe/goe v0.1.0 + github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/pierrec/lz4 v2.5.2+incompatible // indirect github.com/pkg/errors v0.8.1 - github.com/prometheus/client_golang v0.9.2 + github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect + github.com/prometheus/client_golang v1.4.0 github.com/rboyer/safeio v0.2.1 github.com/ryanuber/columnize v2.1.0+incompatible - github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880 - github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 // indirect - github.com/spf13/pflag v1.0.3 // indirect - github.com/stretchr/objx v0.1.1 // indirect - github.com/stretchr/testify v1.4.0 - golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 - golang.org/x/net v0.0.0-20190923162816-aa69164e4478 - golang.org/x/sync v0.0.0-20190423024810-112230192c58 - golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 - google.golang.org/grpc v1.23.0 - gopkg.in/square/go-jose.v2 v2.3.1 - k8s.io/api v0.0.0-20190325185214-7544f9db76f6 - k8s.io/apimachinery v0.0.0-20190223001710-c182ff3b9841 - k8s.io/client-go v8.0.0+incompatible + github.com/shirou/gopsutil v2.20.9+incompatible + github.com/stretchr/testify v1.5.1 + go.opencensus.io v0.22.0 // indirect + go.uber.org/goleak v1.0.0 + golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a + golang.org/x/net v0.0.0-20200904194848-62affa334b73 + golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 + golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a + golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf + golang.org/x/text v0.3.3 // indirect + golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e + golang.org/x/tools v0.0.0-20200513154647-78b527d18275 // indirect + google.golang.org/api v0.9.0 // indirect + google.golang.org/appengine v1.6.0 // indirect + google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 + google.golang.org/grpc v1.25.1 + gopkg.in/square/go-jose.v2 v2.5.1 + k8s.io/api v0.16.9 + k8s.io/apimachinery v0.16.9 + k8s.io/client-go v0.16.9 ) replace istio.io/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb => github.com/istio/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb diff -Nru consul-1.7.4+dfsg1/go.sum consul-1.8.7+dfsg1/go.sum --- consul-1.7.4+dfsg1/go.sum 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/go.sum 2020-12-10 21:46:52.000000000 +0000 @@ -1,46 +1,109 @@ -cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/Azure/azure-sdk-for-go v16.0.0+incompatible h1:gr1qKY/Ll72VjFTZmaBwRK1yQHAxCnV25ekOKroc9ws= -github.com/Azure/azure-sdk-for-go v16.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-autorest v10.7.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v10.15.3+incompatible h1:nhKI/bvazIs3C3TFGoSqKY6hZ8f5od5mb5/UcS6HVIY= -github.com/Azure/go-autorest v10.15.3+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +github.com/Azure/azure-sdk-for-go v40.3.0+incompatible h1:NthZg3psrLxvQLN6rVm07pZ9mv2wvGNaBNGQ3fnPvLE= +github.com/Azure/azure-sdk-for-go v40.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.10.0 h1:mvdtztBqcL8se7MdrUweNieTNi4kfNG6GOJuurQJpuY= +github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.2 h1:O1X4oexUxnZCaEUGsvMnr8ZGj8HI37tNezwY4npRqA0= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= +github.com/Azure/go-autorest/autorest/validation v0.2.0 h1:15vMO4y76dehZSq7pAaOLQxC6dZYsSrj2GQpflyM/L4= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Microsoft/go-winio v0.4.3 h1:M3NHMuPgMSUPdE5epwNUHlRPSVzHs8HpRTrVXhR0myo= github.com/Microsoft/go-winio v0.4.3/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.0.1 h1:iLrQrdwjDd52kHDA5op2UBJFjmOb9g+7scBan4RN8F0= github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af h1:DBNMBMuMiWYu0b+8KMJuWmfCkcxl09JwdlqwDZZ6U14= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= +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/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM= github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= +github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs= +github.com/armon/go-metrics v0.3.4 h1:Xqf+7f2Vhl9tsqDYmXhnXInUdcrtgpRNpIA15/uldSc= +github.com/armon/go-metrics v0.3.4/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.41 h1:/hj7nZ0586wFqpwjNpzWiUTwtaMgxAZNZKHay80MdXw= github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= +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/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20200313221541-5f7e5dd04533 h1:8wZizuKuZVu5COB7EsBYxBQz8nRcXXn5d4Gt91eJLvU= +github.com/cncf/udpa/go v0.0.0-20200313221541-5f7e5dd04533/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/coredns/coredns v1.1.2 h1:bAFHrSsBeTeRG5W3Nf2su3lUGw7Npw2UKeCJm/3A638= github.com/coredns/coredns v1.1.2/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -48,7 +111,7 @@ github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/digitalocean/godo v1.1.1 h1:v0A7yF3xmKLjjdJGIeBbINfMufcrrRhqZsxuVQMoT+U= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= github.com/digitalocean/godo v1.10.0 h1:uW1/FcvZE/hoixnJcnlmIUvTVNdZCLjRLzmDtRi1xXY= github.com/digitalocean/godo v1.10.0/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= @@ -58,61 +121,100 @@ github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/go-connections v0.3.0 h1:3lOnM9cSzgGwx8VfK/NGOW5fLQ0GjIlCkaktF+n1M6o= github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0 h1:ZoRgc53qJCfSLimXqJDrmBhnt5GChDsExMCK7t48o0Y= github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= -github.com/envoyproxy/go-control-plane v0.8.0 h1:uE6Fp4fOcAJdc1wTQXLJ+SYistkbG1dNoi6Zs1+Ybvk= -github.com/envoyproxy/go-control-plane v0.8.0/go.mod h1:GSSbY9P1neVhdY7G4wu+IK1rk/dqhiCC/4ExuWJZVuk= -github.com/envoyproxy/protoc-gen-validate v0.0.14 h1:YBW6/cKy9prEGRYLnaGa4IDhzxZhRCtKsax8srGKDnM= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.5 h1:lRJIqDD8yjV1YyPRqecMdytjDLs2fTXq363aCib5xPU= +github.com/envoyproxy/go-control-plane v0.9.5/go.mod h1:OXl5to++W0ctG+EHWTFUjiypVxC/Y4VLc/KFU+al13s= +github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/frankban/quicktest v1.11.1 h1:stwUsXhUGliQs9t0ZS39BWCltFdOHgABiIlihop8AD4= +github.com/frankban/quicktest v1.11.1/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-check/check v0.0.0-20140225173054-eb6ee6f84d0a/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-ldap/ldap v3.0.2+incompatible h1:kD5HQcAzlQ7yrhfn+h+MSABeAy/jAJhvIJ/QDllP44g= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= +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-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8= +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-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gogo/googleapis v1.1.0 h1:kFkMAZBNAn4j7K0GiZr8cRYzejq68VbheufiV3YuyFI= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/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 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 h1:zLTLjkaOFEFIOxY5BWLFLwh+cL8vOBW4XJ2aqLE/Tf0= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2 h1:AtvtonGEH/fZK0XPNNBdB6swgy7Iudfx88wzyIpwqJ8= +github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2/go.mod h1:DavVbd41y+b7ukKDmlnPR4nGYmkWXR6vHUkjQNiHPBs= +github.com/google/uuid v1.1.1/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 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca h1:wobTb8SE189AuxzEKClyYxiI4nUGWlpVtl13eLiFlOE= -github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= -github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c h1:16eHWuMGvCjSfgRJKqIzapE78onvvTbdi1rMkU00lZw= -github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.2 h1:ijMXI4qERbzxbCnkxmfUtwMyjrrk3y+Vt0MxojNCbBs= @@ -124,18 +226,19 @@ github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-connlimit v0.2.0 h1:OZjcfNxH/hPh/bT2Iw5yOJcLzz+zuIWpsp3I1S4Pjw4= github.com/hashicorp/go-connlimit v0.2.0/go.mod h1:OUj9FGL1tPIhl/2RCfzYHrIiWj+VVPGNyVPnUX8AqS0= -github.com/hashicorp/go-discover v0.0.0-20191202160150-7ec2cfbda7a2 h1:r7GtRT+VXoM5WqHMxSVDIKgVCfK9T8CoS51RDKeOjBM= -github.com/hashicorp/go-discover v0.0.0-20191202160150-7ec2cfbda7a2/go.mod h1:NnH5X4UCBEBdTuK2L8s4e4ilJm3UmGX0bANHCz0HSs0= +github.com/hashicorp/go-discover v0.0.0-20200501174627-ad1e96bde088 h1:jBvElOilnIl6mm8S6gva/dfeTJCcMs9TGO6/2C6k52E= +github.com/hashicorp/go-discover v0.0.0-20200501174627-ad1e96bde088/go.mod h1:vZu6Opqf49xX5lsFAu7iFNewkcVF1sn/wyapZh5ytlg= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.9.1 h1:9PZfAcVEvez4yhLH2TBU64/h/z4xlFI80cWXRrxuKuM= github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.2.0 h1:l6UW37iCXwZkZoAbEYnptSHVE/cQ5bOTPYG5W3vf9+8= +github.com/hashicorp/go-immutable-radix v1.2.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= github.com/hashicorp/go-memdb v1.0.3 h1:iiqzNk8jKB6/sLRj623Ui/Vi1zf21LOUpgzGjTge6a8= github.com/hashicorp/go-memdb v1.0.3/go.mod h1:LWQ8R70vPrS4OEY9k28D2z8/Zzyu34NVzeRibGAzHO0= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= @@ -149,9 +252,10 @@ github.com/hashicorp/go-raftchunking v0.6.1 h1:moEnaG3gcwsWNyIBJoD5PCByE+Ewkqxh6N05CT+MbwA= github.com/hashicorp/go-raftchunking v0.6.1/go.mod h1:cGlg3JtDy7qy6c/3Bu660Mic1JF+7lWqIwCFSb08fX0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.5.4 h1:1BZvpawXoJCWX6pNtow9+rpEj+3itIlutiqnntI6jOE= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= +github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.6.7 h1:8/CAEZt/+F7kR7GevNHulKkUjLht3CPmn7egmhieNKo= +github.com/hashicorp/go-retryablehttp v0.6.7/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -162,21 +266,23 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +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/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hil v0.0.0-20160711231837-1e86c6b523c5 h1:uk280DXEbQiCOZgCOI3elFSeNxf8YIZiNsbr2pQLYD0= github.com/hashicorp/hil v0.0.0-20160711231837-1e86c6b523c5/go.mod h1:KHvg/R2/dPtaePb16oW4qIyzkMxXOL38xjRN64adsts= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/mdns v1.0.1 h1:XFSOubp8KWB+Jd2PDyaX5xUd5bhSP/+pTDZVDMzZJM8= github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g= github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69 h1:lc3c72qGlIMDqQpQH82Y4vaglRMMFdJbziYWriR4UcE= @@ -186,50 +292,64 @@ github.com/hashicorp/raft v1.1.2/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea h1:xykPFhrBAS2J0VBzVa5e80b5ZtYuNQtgXjN40qBZlD4= github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.2 h1:yJoyfZXo4Pk2p/M/viW+YLibBFiIbKoP79gu7kDAFP0= -github.com/hashicorp/serf v0.9.2/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/vault/api v1.0.4 h1:j08Or/wryXT4AcHj1oCbMd7IijXcKzYUGw59LGu9onU= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13 h1:mOEPeOhT7jl0J4AMl1E705+BcmeRs1VmKNb9F0sMLy8= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= +github.com/hashicorp/serf v0.9.3 h1:AVF6JDQQens6nMHT9OGERBvK0f8rPrAGILnsKLr6lzM= +github.com/hashicorp/serf v0.9.3/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.4 h1:xrZ4ZR0wT5Dz8oQHHdfOzr0ei1jMToWlFFz3hh/DI7I= +github.com/hashicorp/serf v0.9.4/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086 h1:OKsyxKi2sNmqm1Gv93adf2AID2FOBFdCbbZn9fGtIdg= +github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086/go.mod h1:R3Umvhlxi2TN7Ex2hzOowyeNb+SfbVWI973N+ctaFMk= +github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 h1:e1ok06zGrWJW91rzRroyl5nRNqraaBe4d5hiKcVZuHM= +github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10= github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 h1:O/pT5C1Q3mVXMyuqg7yuAWUg/jMZR1/0QTzTRdNR6Uw= github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/istio/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb/go.mod h1:mvv8vRzGSduueppJLi6LhwN+hLFo0GeXquj6ixCv5xk= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= +github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da h1:FjHUJJ7oBW4G/9j1KzlHaXL09LyMVM9rupS39lncbXk= github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62 h1:JHCT6xuyPUrbbgAPE/3dqlvUKzRHMNuTBKKUb6OeR/k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= -github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE= -github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f h1:ENpDacvnr8faw5ugQmEF1QYk+f/Y9lXFvuYmRxykago= +github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f/go.mod h1:KDSfL7qe5ZfQqvlDMkVjCztbmcpp/c8M77vhQP8ZPvk= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +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.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/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 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/likexian/gokit v0.0.0-20190309162924-0a377eecf7aa/go.mod h1:QdfYv6y6qPA9pbBA2qXtoT8BMKha6UyNbxWGWl/9Jfk= -github.com/likexian/gokit v0.0.0-20190418170008-ace88ad0983b/go.mod h1:KKqSnk/VVSW8kEyO2vVCXoanzEutKdlBAPohmGXkxCk= -github.com/likexian/gokit v0.0.0-20190501133040-e77ea8b19cdc/go.mod h1:3kvONayqCaj+UgrRZGpgfXzHdMYCAO0KAt4/8n0L57Y= -github.com/likexian/gokit v0.20.16/go.mod h1:kn+nTv3tqh6yhor9BC4Lfiu58SmH8NmQ2PmEl+uM6nU= -github.com/likexian/simplejson-go v0.0.0-20190409170913-40473a74d76d/go.mod h1:Typ1BfnATYtZ/+/shXfFYLrovhFyuKvzwrdOnIDHlmg= -github.com/likexian/simplejson-go v0.0.0-20190419151922-c1f9f0b4f084/go.mod h1:U4O1vIJvIKwbMZKUJ62lppfdvkCdVd2nfMimHK81eec= -github.com/likexian/simplejson-go v0.0.0-20190502021454-d8787b4bfa0b/go.mod h1:3BWwtmKP9cXWwYCr5bkoVDEfLywacOv0s06OBEDpyt8= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/linode/linodego v0.7.1 h1:4WZmMpSA2NRwlPZcc0+4Gyn7rr99Evk9bnr0B3gXRKE= github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -239,6 +359,7 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -249,209 +370,370 @@ github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 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-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.3 h1:gqwbsGvc0jbhAPW/26WfEoSiPANAVlR49AAVdvaTjI4= -github.com/mitchellh/go-testing-interface v1.0.3/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.0 h1:/x0XQ6h+3U3nAyk1yx+bHPURrKa9sVVvYbuqZ7pIAtI= +github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452 h1:hOY53G+kBFhbYFpRVxHl5eS7laP6B1+Cq+Z9Dry1iMU= github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.2.3 h1:f/MjBEBDLttYCGfRaKBbKSRVF5aV2O6fnBpzknuE3jU= -github.com/mitchellh/mapstructure v1.2.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.0.0 h1:ATSdz4NWrmWPOF1CeCBU4sMCno2hgqdbSrRPFWQSVZI= +github.com/mitchellh/pointerstructure v1.0.0/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +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-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 h1:BQ1HW7hr4IVovMwWg0E0PYcyW8CzqDcVmaew9cujU4s= github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20180130162743-b8a9be070da4/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c h1:vwpFWvAO8DeIZfFeqASzZfsxuWPno9ncAebBEP0N3uE= github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= +github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 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/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0 h1:YVIb/fVcOTMSqtqZWSKnHpSLBxu8DKgxq8z6RuBZwqI= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +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.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rboyer/safeio v0.2.1 h1:05xhhdRNAdS3apYm7JRjOqngf4xruaW959jmRxGDuSU= github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig= github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 h1:Wdi9nwnhFNAlseAOekn6B5G/+GMtks9UKbvRU/CMM/o= github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/conswriter v0.0.0-20180208195008-f5ae3917a627/go.mod h1:7zjs06qF79/FKAJpBvFx3P8Ww4UTIMAe+lpNXDHziac= +github.com/sean-/pager v0.0.0-20180208200047-666be9bf53b5/go.mod h1:BeybITEsBEg6qbIiqJ6/Bqeq25bCLbL7YFmpaFfJDuM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880 h1:1Ge4j/3uB2rxzPWD3TC+daeCw+w91z8UCUL/7WH5gn8= -github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= -github.com/sirupsen/logrus v1.0.6 h1:hcP1GmhGigz/O7h1WVUM5KklBp1JoNS9FggWKdj/j3s= +github.com/shirou/gopsutil v2.20.9+incompatible h1:msXs2frUV+O/JLva9EDLpuJ84PrFsdCTCQex8PUdtkQ= +github.com/shirou/gopsutil v2.20.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d h1:bVQRCxQvfjNUeRqaY/uT0tFuvuFY0ulgnczuR684Xic= github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible h1:8uRvJleFpqLsO77WaAh2UrasMOzd8MxXrNj20e7El+Q= github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9/go.mod h1:RHkNRtSLfOK7qBTHaeSX1D6BNpI3qw7NTxsmNr4RvN8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/vmware/govmomi v0.18.0 h1:f7QxSmP7meCtoAmiKZogvVbLInT+CZx6Px6K5rYsJZo= github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/goleak v1.0.0 h1:qsup4IcBdlmsnGfqyLl4Ntn3C2XCCuKAE7DwHpScyUo= +go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 h1:PDpCLFAH/YIX0QpHPf2eO7L4rC2OOirBrKtXTLLiNTY= -golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/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 h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/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-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/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-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-20190522155817-f3200d17e092/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-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/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-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190508220229-2d0786266e9c/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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/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-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-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf h1:AvBTl0xbF/KtHyvm61X4gSPF7/dKJ/xQqJwKr1Qu9no= +golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/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-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +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-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/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-20200513154647-78b527d18275 h1:e7nYe9s94RHunFJ7b+mmPxiQMOKMVSqYASToWb1EcHs= +golang.org/x/tools v0.0.0-20200513154647-78b527d18275/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180829000535-087779f1d2c9 h1:z1TeLUmxf9ws9KLICfmX+KGXTs+rjm+aGWzfsv7MZ9w= -google.golang.org/api v0.0.0-20180829000535-087779f1d2c9/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.9.0 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= 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.0 h1:Tfd7cKwKbFRsI8RMAD3oqqw7JPFRrvFlOsfbgVkjOOw= +google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107 h1:xtNn7qFlagY2mQNFHMSRPjT2RkOV4OXM7P5TVy9xATo= -google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +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-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= 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.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 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 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= -k8s.io/api v0.0.0-20180806132203-61b11ee65332/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= -k8s.io/api v0.0.0-20190325185214-7544f9db76f6 h1:9MWtbqhwTyDvF4cS1qAhxDb9Mi8taXiAu+5nEacl7gY= -k8s.io/api v0.0.0-20190325185214-7544f9db76f6/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= -k8s.io/apimachinery v0.0.0-20180821005732-488889b0007f/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= -k8s.io/apimachinery v0.0.0-20190223001710-c182ff3b9841 h1:Q4RZrHNtlC/mSdC1sTrcZ5RchC/9vxLVj57pWiCBKv4= -k8s.io/apimachinery v0.0.0-20190223001710-c182ff3b9841/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= -k8s.io/client-go v8.0.0+incompatible h1:tTI4hRmb1DRMl4fG6Vclfdi6nTM82oIrTT7HfitmxC4= -k8s.io/client-go v8.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= +k8s.io/api v0.16.9 h1:3vCx0WX9qcg1Hv4aQ/G1tiIKectGVuimvPVTJU4VOCA= +k8s.io/api v0.16.9/go.mod h1:Y7dZNHs1Xy0mSwSlzL9QShi6qkljnN41yR8oWCRTDe8= +k8s.io/apimachinery v0.16.9 h1:ESUZ4hMBUKF2kn2HBFL5zM/wQv4j/0uRbR7AjgqGJ4o= +k8s.io/apimachinery v0.16.9/go.mod h1:Xk2vD2TRRpuWYLQNM6lT9R7DSFZUYG03SarNkbGrnKE= +k8s.io/client-go v0.16.9 h1:6Eh4lMDxFtDzBkqid1AOL3bQ/pPYrulx8l23DXw4mRU= +k8s.io/client-go v0.16.9/go.mod h1:ThjPlh7Kx+XoBFOCt775vx5J7atwY7F/zaFzTco5gL0= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff -Nru consul-1.7.4+dfsg1/internal/go-sso/go.mod.sample consul-1.8.7+dfsg1/internal/go-sso/go.mod.sample --- consul-1.7.4+dfsg1/internal/go-sso/go.mod.sample 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/go.mod.sample 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +module github.com/hashicorp/consul/go-sso + +go 1.13 + +require ( + github.com/coreos/go-oidc v2.1.0+incompatible + github.com/hashicorp/go-cleanhttp v0.5.1 + github.com/hashicorp/go-hclog v0.12.0 + github.com/hashicorp/go-uuid v1.0.2 + github.com/mitchellh/go-testing-interface v1.14.0 + github.com/mitchellh/pointerstructure v1.0.0 + github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect + github.com/stretchr/testify v1.2.2 + golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 // indirect + golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 + gopkg.in/square/go-jose.v2 v2.4.1 +) diff -Nru consul-1.7.4+dfsg1/internal/go-sso/go.sum.sample consul-1.8.7+dfsg1/internal/go-sso/go.sum.sample --- consul-1.7.4+dfsg1/internal/go-sso/go.sum.sample 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/go.sum.sample 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +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/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mitchellh/go-testing-interface v1.14.0 h1:/x0XQ6h+3U3nAyk1yx+bHPURrKa9sVVvYbuqZ7pIAtI= +github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/pointerstructure v1.0.0 h1:ATSdz4NWrmWPOF1CeCBU4sMCno2hgqdbSrRPFWQSVZI= +github.com/mitchellh/pointerstructure v1.0.0/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +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/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 h1:PDpCLFAH/YIX0QpHPf2eO7L4rC2OOirBrKtXTLLiNTY= +golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e h1:bRhVy7zSSasaqNksaRZiA5EEI+Ei4I1nO5Jh72wfHlg= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y= +gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/auth.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/auth.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/auth.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/auth.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,129 @@ +// package oidcauth bundles up an opinionated approach to authentication using +// both the OIDC authorization code workflow and simple JWT decoding (via +// static keys, JWKS, and OIDC discovery). +// +// NOTE: This was roughly forked from hashicorp/vault-plugin-auth-jwt +// originally at commit 825c85535e3832d254a74253a8e9ae105357778b with later +// backports of behavior in 0e93b06cecb0477d6ee004e44b04832d110096cf +package oidcauth + +import ( + "context" + "fmt" + "net/http" + "sync" + + "github.com/coreos/go-oidc" + "github.com/hashicorp/go-hclog" + "github.com/patrickmn/go-cache" +) + +// Claims represents a set of claims or assertions computed about a given +// authentication exchange. +type Claims struct { + // Values is a set of key/value string claims about the authentication + // exchange. + Values map[string]string + + // Lists is a set of key/value string list claims about the authentication + // exchange. + Lists map[string][]string +} + +// Authenticator allows for extracting a set of claims from either an OIDC +// authorization code exchange or a bare JWT. +type Authenticator struct { + config *Config + logger hclog.Logger + + // parsedJWTPubKeys is the parsed form of config.JWTValidationPubKeys + parsedJWTPubKeys []interface{} + provider *oidc.Provider + keySet oidc.KeySet + + // httpClient should be configured with all relevant root CA certs and be + // reused for all OIDC or JWKS operations. This will be nil for the static + // keys JWT configuration. + httpClient *http.Client + + l sync.Mutex + oidcStates *cache.Cache + + // backgroundCtx is a cancellable context primarily meant to be used for + // things that may spawn background goroutines and are not tied to a + // request/response lifecycle. Use backgroundCtxCancel to cancel this. + backgroundCtx context.Context + backgroundCtxCancel context.CancelFunc +} + +// New creates an authenticator suitable for use with either an OIDC +// authorization code workflow or a bare JWT workflow depending upon the value +// of the config Type. +func New(c *Config, logger hclog.Logger) (*Authenticator, error) { + if err := c.Validate(); err != nil { + return nil, err + } + + var parsedJWTPubKeys []interface{} + if c.Type == TypeJWT { + for _, v := range c.JWTValidationPubKeys { + key, err := parsePublicKeyPEM([]byte(v)) + if err != nil { + // This shouldn't happen as the keys are already validated in Validate(). + return nil, fmt.Errorf("error parsing public key: %v", err) + } + parsedJWTPubKeys = append(parsedJWTPubKeys, key) + } + } + + a := &Authenticator{ + config: c, + logger: logger, + parsedJWTPubKeys: parsedJWTPubKeys, + } + a.backgroundCtx, a.backgroundCtxCancel = context.WithCancel(context.Background()) + + if c.Type == TypeOIDC { + a.oidcStates = cache.New(oidcStateTimeout, oidcStateCleanupInterval) + } + + var err error + switch c.authType() { + case authOIDCDiscovery, authOIDCFlow: + a.httpClient, err = createHTTPClient(a.config.OIDCDiscoveryCACert) + if err != nil { + return nil, fmt.Errorf("error parsing OIDCDiscoveryCACert: %v", err) + } + + provider, err := oidc.NewProvider( + contextWithHttpClient(a.backgroundCtx, a.httpClient), + a.config.OIDCDiscoveryURL, + ) + if err != nil { + return nil, fmt.Errorf("error creating provider: %v", err) + } + a.provider = provider + case authJWKS: + a.httpClient, err = createHTTPClient(a.config.JWKSCACert) + if err != nil { + return nil, fmt.Errorf("error parsing JWKSCACert: %v", err) + } + + a.keySet = oidc.NewRemoteKeySet( + contextWithHttpClient(a.backgroundCtx, a.httpClient), + a.config.JWKSURL, + ) + } + + return a, nil +} + +// Stop stops any background goroutines and does cleanup. +func (a *Authenticator) Stop() { + a.l.Lock() + defer a.l.Unlock() + if a.backgroundCtxCancel != nil { + a.backgroundCtxCancel() + a.backgroundCtxCancel = nil + } +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/config.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/config.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/config.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,348 @@ +package oidcauth + +import ( + "context" + "errors" + "fmt" + "net/url" + "strings" + "time" + + "github.com/coreos/go-oidc" +) + +const ( + // TypeOIDC is the config type to specify if the OIDC authorization code + // workflow is desired. The Authenticator methods GetAuthCodeURL and + // ClaimsFromAuthCode are activated with the type. + TypeOIDC = "oidc" + + // TypeJWT is the config type to specify if simple JWT decoding (via static + // keys, JWKS, and OIDC discovery) is desired. The Authenticator method + // ClaimsFromJWT is activated with this type. + TypeJWT = "jwt" +) + +// Config is the collection of all settings that pertain to doing OIDC-based +// authentication and direct JWT-based authentication processes. +type Config struct { + // Type defines which kind of authentication will be happening, OIDC-based + // or JWT-based. Allowed values are either 'oidc' or 'jwt'. + // + // Defaults to 'oidc' if unset. + Type string + + // ------- + // common for type=oidc and type=jwt + // ------- + + // JWTSupportedAlgs is a list of supported signing algorithms. Defaults to + // RS256. + JWTSupportedAlgs []string + + // Comma-separated list of 'aud' claims that are valid for login; any match + // is sufficient + // TODO(sso): actually just send these down as string claims? + BoundAudiences []string + + // Mappings of claims (key) that will be copied to a metadata field + // (value). Use this if the claim you are capturing is singular (such as an + // attribute). + // + // When mapped, the values can be any of a number, string, or boolean and + // will all be stringified when returned. + ClaimMappings map[string]string + + // Mappings of claims (key) that will be copied to a metadata field + // (value). Use this if the claim you are capturing is list-like (such as + // groups). + // + // When mapped, the values in each list can be any of a number, string, or + // boolean and will all be stringified when returned. + ListClaimMappings map[string]string + + // OIDCDiscoveryURL is the OIDC Discovery URL, without any .well-known + // component (base path). Cannot be used with "JWKSURL" or + // "JWTValidationPubKeys". + OIDCDiscoveryURL string + + // OIDCDiscoveryCACert is the CA certificate or chain of certificates, in + // PEM format, to use to validate connections to the OIDC Discovery URL. If + // not set, system certificates are used. + OIDCDiscoveryCACert string + + // ------- + // just for type=oidc + // ------- + + // OIDCClientID is the OAuth Client ID configured with your OIDC provider. + // + // Valid only if Type=oidc + OIDCClientID string + + // The OAuth Client Secret configured with your OIDC provider. + // + // Valid only if Type=oidc + OIDCClientSecret string + + // Comma-separated list of OIDC scopes + // + // Valid only if Type=oidc + OIDCScopes []string + + // Comma-separated list of allowed values for redirect_uri + // + // Valid only if Type=oidc + AllowedRedirectURIs []string + + // Log received OIDC tokens and claims when debug-level logging is active. + // Not recommended in production since sensitive information may be present + // in OIDC responses. + // + // Valid only if Type=oidc + VerboseOIDCLogging bool + + // ------- + // just for type=jwt + // ------- + + // JWKSURL is the JWKS URL to use to authenticate signatures. Cannot be + // used with "OIDCDiscoveryURL" or "JWTValidationPubKeys". + // + // Valid only if Type=jwt + JWKSURL string + + // JWKSCACert is the CA certificate or chain of certificates, in PEM + // format, to use to validate connections to the JWKS URL. If not set, + // system certificates are used. + // + // Valid only if Type=jwt + JWKSCACert string + + // JWTValidationPubKeys is a list of PEM-encoded public keys to use to + // authenticate signatures locally. Cannot be used with "JWKSURL" or + // "OIDCDiscoveryURL". + // + // Valid only if Type=jwt + JWTValidationPubKeys []string + + // BoundIssuer is the value against which to match the 'iss' claim in a + // JWT. Optional. + // + // Valid only if Type=jwt + BoundIssuer string + + // Duration in seconds of leeway when validating expiration of + // a token to account for clock skew. + // + // Defaults to 150 (2.5 minutes) if set to 0 and can be disabled if set to -1.`, + // + // Valid only if Type=jwt + ExpirationLeeway time.Duration + + // Duration in seconds of leeway when validating not before values of a + // token to account for clock skew. + // + // Defaults to 150 (2.5 minutes) if set to 0 and can be disabled if set to + // -1.`, + // + // Valid only if Type=jwt + NotBeforeLeeway time.Duration + + // Duration in seconds of leeway when validating all claims to account for + // clock skew. + // + // Defaults to 60 (1 minute) if set to 0 and can be disabled if set to + // -1.`, + // + // Valid only if Type=jwt + ClockSkewLeeway time.Duration +} + +// Validate returns an error if the config is not valid. +func (c *Config) Validate() error { + validateCtx, validateCtxCancel := context.WithCancel(context.Background()) + defer validateCtxCancel() + + switch c.Type { + case TypeOIDC, "": + // required + switch { + case c.OIDCDiscoveryURL == "": + return fmt.Errorf("'OIDCDiscoveryURL' must be set for type %q", c.Type) + case c.OIDCClientID == "": + return fmt.Errorf("'OIDCClientID' must be set for type %q", c.Type) + case c.OIDCClientSecret == "": + return fmt.Errorf("'OIDCClientSecret' must be set for type %q", c.Type) + case len(c.AllowedRedirectURIs) == 0: + return fmt.Errorf("'AllowedRedirectURIs' must be set for type %q", c.Type) + } + + // not allowed + switch { + case c.JWKSURL != "": + return fmt.Errorf("'JWKSURL' must not be set for type %q", c.Type) + case c.JWKSCACert != "": + return fmt.Errorf("'JWKSCACert' must not be set for type %q", c.Type) + case len(c.JWTValidationPubKeys) != 0: + return fmt.Errorf("'JWTValidationPubKeys' must not be set for type %q", c.Type) + case c.BoundIssuer != "": + return fmt.Errorf("'BoundIssuer' must not be set for type %q", c.Type) + case c.ExpirationLeeway != 0: + return fmt.Errorf("'ExpirationLeeway' must not be set for type %q", c.Type) + case c.NotBeforeLeeway != 0: + return fmt.Errorf("'NotBeforeLeeway' must not be set for type %q", c.Type) + case c.ClockSkewLeeway != 0: + return fmt.Errorf("'ClockSkewLeeway' must not be set for type %q", c.Type) + } + + var bad []string + for _, allowed := range c.AllowedRedirectURIs { + if _, err := url.Parse(allowed); err != nil { + bad = append(bad, allowed) + } + } + if len(bad) > 0 { + return fmt.Errorf("Invalid AllowedRedirectURIs provided: %v", bad) + } + + case TypeJWT: + // not allowed + switch { + case c.OIDCClientID != "": + return fmt.Errorf("'OIDCClientID' must not be set for type %q", c.Type) + case c.OIDCClientSecret != "": + return fmt.Errorf("'OIDCClientSecret' must not be set for type %q", c.Type) + case len(c.OIDCScopes) != 0: + return fmt.Errorf("'OIDCScopes' must not be set for type %q", c.Type) + case len(c.AllowedRedirectURIs) != 0: + return fmt.Errorf("'AllowedRedirectURIs' must not be set for type %q", c.Type) + case c.VerboseOIDCLogging: + return fmt.Errorf("'VerboseOIDCLogging' must not be set for type %q", c.Type) + } + + methodCount := 0 + if c.OIDCDiscoveryURL != "" { + methodCount++ + } + if len(c.JWTValidationPubKeys) != 0 { + methodCount++ + } + if c.JWKSURL != "" { + methodCount++ + } + + if methodCount != 1 { + return fmt.Errorf("exactly one of 'JWTValidationPubKeys', 'JWKSURL', or 'OIDCDiscoveryURL' must be set for type %q", c.Type) + } + + if c.JWKSURL != "" { + httpClient, err := createHTTPClient(c.JWKSCACert) + if err != nil { + return fmt.Errorf("error checking JWKSCACert: %v", err) + } + + ctx := contextWithHttpClient(validateCtx, httpClient) + keyset := oidc.NewRemoteKeySet(ctx, c.JWKSURL) + + // Try to verify a correctly formatted JWT. The signature will fail + // to match, but other errors with fetching the remote keyset + // should be reported. + _, err = keyset.VerifySignature(ctx, testJWT) + if err == nil { + err = errors.New("unexpected verification of JWT") + } + + if !strings.Contains(err.Error(), "failed to verify id token signature") { + return fmt.Errorf("error checking JWKSURL: %v", err) + } + } else if c.JWKSCACert != "" { + return fmt.Errorf("'JWKSCACert' should not be set unless 'JWKSURL' is set") + } + + if len(c.JWTValidationPubKeys) != 0 { + for i, v := range c.JWTValidationPubKeys { + if _, err := parsePublicKeyPEM([]byte(v)); err != nil { + return fmt.Errorf("error parsing public key JWTValidationPubKeys[%d]: %v", i, err) + } + } + } + + default: + return fmt.Errorf("authenticator type should be %q or %q", TypeOIDC, TypeJWT) + } + + if c.OIDCDiscoveryURL != "" { + httpClient, err := createHTTPClient(c.OIDCDiscoveryCACert) + if err != nil { + return fmt.Errorf("error checking OIDCDiscoveryCACert: %v", err) + } + + ctx := contextWithHttpClient(validateCtx, httpClient) + if _, err := oidc.NewProvider(ctx, c.OIDCDiscoveryURL); err != nil { + return fmt.Errorf("error checking OIDCDiscoveryURL: %v", err) + } + } else if c.OIDCDiscoveryCACert != "" { + return fmt.Errorf("'OIDCDiscoveryCACert' should not be set unless 'OIDCDiscoveryURL' is set") + } + + for _, a := range c.JWTSupportedAlgs { + switch a { + case oidc.RS256, oidc.RS384, oidc.RS512, + oidc.ES256, oidc.ES384, oidc.ES512, + oidc.PS256, oidc.PS384, oidc.PS512: + default: + return fmt.Errorf("Invalid supported algorithm: %s", a) + } + } + + if len(c.ClaimMappings) > 0 { + targets := make(map[string]bool) + for _, mappedKey := range c.ClaimMappings { + if targets[mappedKey] { + return fmt.Errorf("ClaimMappings contains multiple mappings for key %q", mappedKey) + } + targets[mappedKey] = true + } + } + + if len(c.ListClaimMappings) > 0 { + targets := make(map[string]bool) + for _, mappedKey := range c.ListClaimMappings { + if targets[mappedKey] { + return fmt.Errorf("ListClaimMappings contains multiple mappings for key %q", mappedKey) + } + targets[mappedKey] = true + } + } + + return nil +} + +const ( + authUnconfigured = iota + authStaticKeys + authJWKS + authOIDCDiscovery + authOIDCFlow +) + +// authType classifies the authorization type/flow based on config parameters. +// It is only valid to invoke if Validate() returns a nil error. +func (c *Config) authType() int { + switch { + case len(c.JWTValidationPubKeys) > 0: + return authStaticKeys + case c.JWKSURL != "": + return authJWKS + case c.OIDCDiscoveryURL != "": + if c.OIDCClientID != "" && c.OIDCClientSecret != "" { + return authOIDCFlow + } + return authOIDCDiscovery + default: + return authUnconfigured + } +} + +const testJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.Hf3E3iCHzqC5QIQ0nCqS1kw78IiQTRVzsLTuKoDIpdk" diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/config_test.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/config_test.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/config_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,655 @@ +package oidcauth + +import ( + "strings" + "testing" + "time" + + "github.com/coreos/go-oidc" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/stretchr/testify/require" +) + +func TestConfigValidate(t *testing.T) { + type testcase struct { + config Config + expectAuthType int + expectErr string + } + + srv := oidcauthtest.Start(t) + + oidcCases := map[string]testcase{ + "all required": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectAuthType: authOIDCFlow, + }, + "missing required OIDCDiscoveryURL": { + config: Config{ + Type: TypeOIDC, + // OIDCDiscoveryURL: srv.Addr(), + // OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectErr: "must be set for type", + }, + "missing required OIDCClientID": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + // OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectErr: "must be set for type", + }, + "missing required OIDCClientSecret": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + // OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectErr: "must be set for type", + }, + "missing required AllowedRedirectURIs": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{}, + }, + expectErr: "must be set for type", + }, + "incompatible with JWKSURL": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + JWKSURL: srv.Addr() + "/certs", + }, + expectErr: "must not be set for type", + }, + "incompatible with JWKSCACert": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + JWKSCACert: srv.CACert(), + }, + expectErr: "must not be set for type", + }, + "incompatible with JWTValidationPubKeys": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + JWTValidationPubKeys: []string{testJWTPubKey}, + }, + expectErr: "must not be set for type", + }, + "incompatible with BoundIssuer": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + BoundIssuer: "foo", + }, + expectErr: "must not be set for type", + }, + "incompatible with ExpirationLeeway": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + ExpirationLeeway: 1 * time.Second, + }, + expectErr: "must not be set for type", + }, + "incompatible with NotBeforeLeeway": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + NotBeforeLeeway: 1 * time.Second, + }, + expectErr: "must not be set for type", + }, + "incompatible with ClockSkewLeeway": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + ClockSkewLeeway: 1 * time.Second, + }, + expectErr: "must not be set for type", + }, + "bad discovery cert": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: oidcBadCACerts, + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectErr: "certificate signed by unknown authority", + }, + "garbage discovery cert": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: garbageCACert, + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectErr: "could not parse CA PEM value successfully", + }, + "good discovery cert": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectAuthType: authOIDCFlow, + }, + "valid redirect uris": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{ + "http://foo.test", + "https://example.com", + "https://evilcorp.com:8443", + }, + }, + expectAuthType: authOIDCFlow, + }, + "invalid redirect uris": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{ + "%%%%", + "http://foo.test", + "https://example.com", + "https://evilcorp.com:8443", + }, + }, + expectErr: "Invalid AllowedRedirectURIs provided: [%%%%]", + }, + "valid algorithm": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + JWTSupportedAlgs: []string{ + oidc.RS256, oidc.RS384, oidc.RS512, + oidc.ES256, oidc.ES384, oidc.ES512, + oidc.PS256, oidc.PS384, oidc.PS512, + }, + }, + expectAuthType: authOIDCFlow, + }, + "invalid algorithm": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + JWTSupportedAlgs: []string{ + oidc.RS256, oidc.RS384, oidc.RS512, + oidc.ES256, oidc.ES384, oidc.ES512, + oidc.PS256, oidc.PS384, oidc.PS512, + "foo", + }, + }, + expectErr: "Invalid supported algorithm", + }, + "valid claim mappings": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + ClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + ListClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + }, + expectAuthType: authOIDCFlow, + }, + "invalid repeated value claim mappings": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + ClaimMappings: map[string]string{ + "foo": "bar", + "bling": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + ListClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + }, + expectErr: "ClaimMappings contains multiple mappings for key", + }, + "invalid repeated list claim mappings": { + config: Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + AllowedRedirectURIs: []string{"http://foo.test"}, + ClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + ListClaimMappings: map[string]string{ + "foo": "bar", + "bling": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + }, + expectErr: "ListClaimMappings contains multiple mappings for key", + }, + } + + jwtCases := map[string]testcase{ + "all required for oidc discovery": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + }, + expectAuthType: authOIDCDiscovery, + }, + "all required for jwks": { + config: Config{ + Type: TypeJWT, + JWKSURL: srv.Addr() + "/certs", + JWKSCACert: srv.CACert(), // needed to avoid self signed cert issue + }, + expectAuthType: authJWKS, + }, + "all required for public keys": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + }, + expectAuthType: authStaticKeys, + }, + "incompatible with OIDCClientID": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + OIDCClientID: "abc", + }, + expectErr: "must not be set for type", + }, + "incompatible with OIDCClientSecret": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + OIDCClientSecret: "abc", + }, + expectErr: "must not be set for type", + }, + "incompatible with OIDCScopes": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + OIDCScopes: []string{"blah"}, + }, + expectErr: "must not be set for type", + }, + "incompatible with AllowedRedirectURIs": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + AllowedRedirectURIs: []string{"http://foo.test"}, + }, + expectErr: "must not be set for type", + }, + "incompatible with VerboseOIDCLogging": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + VerboseOIDCLogging: true, + }, + expectErr: "must not be set for type", + }, + "too many methods (discovery + jwks)": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + JWKSURL: srv.Addr() + "/certs", + JWKSCACert: srv.CACert(), + // JWTValidationPubKeys: []string{testJWTPubKey}, + }, + expectErr: "exactly one of", + }, + "too many methods (discovery + pubkeys)": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + // JWKSURL: srv.Addr() + "/certs", + // JWKSCACert: srv.CACert(), + JWTValidationPubKeys: []string{testJWTPubKey}, + }, + expectErr: "exactly one of", + }, + "too many methods (jwks + pubkeys)": { + config: Config{ + Type: TypeJWT, + // OIDCDiscoveryURL: srv.Addr(), + // OIDCDiscoveryCACert: srv.CACert(), + JWKSURL: srv.Addr() + "/certs", + JWKSCACert: srv.CACert(), + JWTValidationPubKeys: []string{testJWTPubKey}, + }, + expectErr: "exactly one of", + }, + "too many methods (discovery + jwks + pubkeys)": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + JWKSURL: srv.Addr() + "/certs", + JWKSCACert: srv.CACert(), + JWTValidationPubKeys: []string{testJWTPubKey}, + }, + expectErr: "exactly one of", + }, + "incompatible with JWKSCACert": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + JWKSCACert: srv.CACert(), + }, + expectErr: "should not be set unless", + }, + "invalid pubkey": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKeyBad}, + }, + expectErr: "error parsing public key", + }, + "incompatible with OIDCDiscoveryCACert": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + OIDCDiscoveryCACert: srv.CACert(), + }, + expectErr: "should not be set unless", + }, + "bad discovery cert": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: oidcBadCACerts, + }, + expectErr: "certificate signed by unknown authority", + }, + "good discovery cert": { + config: Config{ + Type: TypeJWT, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + }, + expectAuthType: authOIDCDiscovery, + }, + "jwks invalid 404": { + config: Config{ + Type: TypeJWT, + JWKSURL: srv.Addr() + "/certs_missing", + JWKSCACert: srv.CACert(), + }, + expectErr: "get keys failed", + }, + "jwks mismatched certs": { + config: Config{ + Type: TypeJWT, + JWKSURL: srv.Addr() + "/certs_invalid", + JWKSCACert: srv.CACert(), + }, + expectErr: "failed to decode keys", + }, + "jwks bad certs": { + config: Config{ + Type: TypeJWT, + JWKSURL: srv.Addr() + "/certs_invalid", + JWKSCACert: garbageCACert, + }, + expectErr: "could not parse CA PEM value successfully", + }, + "valid algorithm": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + JWTSupportedAlgs: []string{ + oidc.RS256, oidc.RS384, oidc.RS512, + oidc.ES256, oidc.ES384, oidc.ES512, + oidc.PS256, oidc.PS384, oidc.PS512, + }, + }, + expectAuthType: authStaticKeys, + }, + "invalid algorithm": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + JWTSupportedAlgs: []string{ + oidc.RS256, oidc.RS384, oidc.RS512, + oidc.ES256, oidc.ES384, oidc.ES512, + oidc.PS256, oidc.PS384, oidc.PS512, + "foo", + }, + }, + expectErr: "Invalid supported algorithm", + }, + "valid claim mappings": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + ClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + ListClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + }, + expectAuthType: authStaticKeys, + }, + "invalid repeated value claim mappings": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + ClaimMappings: map[string]string{ + "foo": "bar", + "bling": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + ListClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + }, + expectErr: "ClaimMappings contains multiple mappings for key", + }, + "invalid repeated list claim mappings": { + config: Config{ + Type: TypeJWT, + JWTValidationPubKeys: []string{testJWTPubKey}, + ClaimMappings: map[string]string{ + "foo": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + ListClaimMappings: map[string]string{ + "foo": "bar", + "bling": "bar", + "peanutbutter": "jelly", + "wd40": "ducttape", + }, + }, + expectErr: "ListClaimMappings contains multiple mappings for key", + }, + } + + cases := map[string]testcase{ + "bad type": { + config: Config{Type: "invalid"}, + expectErr: "authenticator type should be", + }, + } + + for k, v := range oidcCases { + cases["type=oidc/"+k] = v + + v2 := v + v2.config.Type = "" + cases["type=inferred_oidc/"+k] = v2 + } + for k, v := range jwtCases { + cases["type=jwt/"+k] = v + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + err := tc.config.Validate() + if tc.expectErr != "" { + require.Error(t, err) + requireErrorContains(t, err, tc.expectErr) + } else { + require.NoError(t, err) + require.Equal(t, tc.expectAuthType, tc.config.authType()) + } + }) + } +} + +func requireErrorContains(t *testing.T, err error, expectedErrorMessage string) { + t.Helper() + if err == nil { + t.Fatal("An error is expected but got nil.") + } + if !strings.Contains(err.Error(), expectedErrorMessage) { + t.Fatalf("unexpected error: %v", err) + } +} + +const ( + testJWTPubKey = `-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEVs/o5+uQbTjL3chynL4wXgUg2R9 +q9UU8I5mEovUf86QZ7kOBIjJwqnzD1omageEHWwHdBO6B+dFabmdT9POxg== +-----END PUBLIC KEY-----` + + testJWTPubKeyBad = `-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIrollingyourricksEVs/o5+uQbTjL3chynL4wXgUg2R9 +q9UU8I5mEovUf86QZ7kOBIjJwqnzD1omageEHWwHdBO6B+dFabmdT9POxg== +-----END PUBLIC KEY-----` + + garbageCACert = `this is not a key` + + oidcBadCACerts = `-----BEGIN CERTIFICATE----- +MIIDYDCCAkigAwIBAgIJAK8uAVsPxWKGMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQwHhcNMTgwNzA5MTgwODI5WhcNMjgwNzA2MTgwODI5WjBF +MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA1eaEmIHKQqDlSadCtg6YY332qIMoeSb2iZTRhBRYBXRhMIKF3HoLXlI8 +/3veheMnBQM7zxIeLwtJ4VuZVZcpJlqHdsXQVj6A8+8MlAzNh3+Xnv0tjZ83QLwZ +D6FWvMEzihxATD9uTCu2qRgeKnMYQFq4EG72AGb5094zfsXTAiwCfiRPVumiNbs4 +Mr75vf+2DEhqZuyP7GR2n3BKzrWo62yAmgLQQ07zfd1u1buv8R72HCYXYpFul5qx +slZHU3yR+tLiBKOYB+C/VuB7hJZfVx25InIL1HTpIwWvmdk3QzpSpAGIAxWMXSzS +oRmBYGnsgR6WTymfXuokD4ZhHOpFZQIDAQABo1MwUTAdBgNVHQ4EFgQURh/QFJBn +hMXcgB1bWbGiU9B2VBQwHwYDVR0jBBgwFoAURh/QFJBnhMXcgB1bWbGiU9B2VBQw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAr8CZLA3MQjMDWweS +ax9S1fRb8ifxZ4RqDcLj3dw5KZqnjEo8ggczR66T7vVXet/2TFBKYJAM0np26Z4A +WjZfrDT7/bHXseWQAUhw/k2d39o+Um4aXkGpg1Paky9D+ddMdbx1hFkYxDq6kYGd +PlBYSEiYQvVxDx7s7H0Yj9FWKO8WIO6BRUEvLlG7k/Xpp1OI6dV3nqwJ9CbcbqKt +ff4hAtoAmN0/x6yFclFFWX8s7bRGqmnoj39/r98kzeGFb/lPKgQjSVcBJuE7UO4k +8HP6vsnr/ruSlzUMv6XvHtT68kGC1qO3MfqiPhdSa4nxf9g/1xyBmAw/Uf90BJrm +sj9DpQ== +-----END CERTIFICATE-----` +) diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/internal/strutil/util.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/internal/strutil/util.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/internal/strutil/util.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/internal/strutil/util.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +package strutil + +// StrListContains looks for a string in a list of strings. +func StrListContains(haystack []string, needle string) bool { + for _, item := range haystack { + if item == needle { + return true + } + } + return false +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/internal/strutil/util_test.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/internal/strutil/util_test.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/internal/strutil/util_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/internal/strutil/util_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +package strutil + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestStrListContains(t *testing.T) { + tests := []struct { + haystack []string + needle string + expected bool + }{ + // found + {[]string{"a"}, "a", true}, + {[]string{"a", "b", "c"}, "a", true}, + {[]string{"a", "b", "c"}, "b", true}, + {[]string{"a", "b", "c"}, "c", true}, + + // not found + {nil, "", false}, + {[]string{}, "", false}, + {[]string{"a"}, "", false}, + {[]string{"a"}, "b", false}, + {[]string{"a", "b", "c"}, "x", false}, + } + for _, test := range tests { + ok := StrListContains(test.haystack, test.needle) + assert.Equal(t, test.expected, ok, "failed on %s/%v", test.needle, test.haystack) + } +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/jwt.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/jwt.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/jwt.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/jwt.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,207 @@ +package oidcauth + +import ( + "context" + "crypto/ecdsa" + "crypto/ed25519" + "crypto/rsa" + "crypto/x509" + "encoding/json" + "encoding/pem" + "errors" + "fmt" + "time" + + "gopkg.in/square/go-jose.v2/jwt" +) + +const claimDefaultLeeway = 150 + +// ClaimsFromJWT is unrelated to the OIDC authorization code workflow. This +// allows for a JWT to be directly validated and decoded into a set of claims. +// +// Requires the authenticator's config type be set to 'jwt'. +func (a *Authenticator) ClaimsFromJWT(ctx context.Context, jwt string) (*Claims, error) { + if a.config.authType() == authOIDCFlow { + return nil, fmt.Errorf("ClaimsFromJWT is incompatible with type %q", TypeOIDC) + } + if jwt == "" { + return nil, errors.New("missing jwt") + } + + // Here is where things diverge. If it is using OIDC Discovery, validate that way; + // otherwise validate against the locally configured or JWKS keys. Once things are + // validated, we re-unify the request path when evaluating the claims. + var ( + allClaims map[string]interface{} + err error + ) + switch a.config.authType() { + case authStaticKeys, authJWKS: + allClaims, err = a.verifyVanillaJWT(ctx, jwt) + if err != nil { + return nil, err + } + + case authOIDCDiscovery: + allClaims, err = a.verifyOIDCToken(ctx, jwt) + if err != nil { + return nil, err + } + + default: + return nil, errors.New("unhandled case during login") + } + + c, err := a.extractClaims(allClaims) + if err != nil { + return nil, err + } + + if a.config.VerboseOIDCLogging && a.logger != nil { + a.logger.Debug("OIDC provider response", "extracted_claims", c) + } + + return c, nil +} + +func (a *Authenticator) verifyVanillaJWT(ctx context.Context, loginToken string) (map[string]interface{}, error) { + var ( + allClaims = map[string]interface{}{} + claims = jwt.Claims{} + ) + // TODO(sso): handle JWTSupportedAlgs + switch a.config.authType() { + case authJWKS: + // Verify signature (and only signature... other elements are checked later) + payload, err := a.keySet.VerifySignature(ctx, loginToken) + if err != nil { + return nil, fmt.Errorf("error verifying token: %v", err) + } + + // Unmarshal payload into two copies: public claims for library verification, and a set + // of all received claims. + if err := json.Unmarshal(payload, &claims); err != nil { + return nil, fmt.Errorf("failed to unmarshal claims: %v", err) + } + if err := json.Unmarshal(payload, &allClaims); err != nil { + return nil, fmt.Errorf("failed to unmarshal claims: %v", err) + } + case authStaticKeys: + parsedJWT, err := jwt.ParseSigned(loginToken) + if err != nil { + return nil, fmt.Errorf("error parsing token: %v", err) + } + + var valid bool + for _, key := range a.parsedJWTPubKeys { + if err := parsedJWT.Claims(key, &claims, &allClaims); err == nil { + valid = true + break + } + } + if !valid { + return nil, errors.New("no known key successfully validated the token signature") + } + default: + return nil, fmt.Errorf("unsupported auth type for this verifyVanillaJWT: %d", a.config.authType()) + } + + // We require notbefore or expiry; if only one is provided, we allow 5 minutes of leeway by default. + // Configurable by ExpirationLeeway and NotBeforeLeeway + if claims.IssuedAt == nil { + claims.IssuedAt = new(jwt.NumericDate) + } + if claims.Expiry == nil { + claims.Expiry = new(jwt.NumericDate) + } + if claims.NotBefore == nil { + claims.NotBefore = new(jwt.NumericDate) + } + if *claims.IssuedAt == 0 && *claims.Expiry == 0 && *claims.NotBefore == 0 { + return nil, errors.New("no issue time, notbefore, or expiration time encoded in token") + } + + if *claims.Expiry == 0 { + latestStart := *claims.IssuedAt + if *claims.NotBefore > *claims.IssuedAt { + latestStart = *claims.NotBefore + } + leeway := a.config.ExpirationLeeway.Seconds() + if a.config.ExpirationLeeway.Seconds() < 0 { + leeway = 0 + } else if a.config.ExpirationLeeway.Seconds() == 0 { + leeway = claimDefaultLeeway + } + *claims.Expiry = jwt.NumericDate(int64(latestStart) + int64(leeway)) + } + + if *claims.NotBefore == 0 { + if *claims.IssuedAt != 0 { + *claims.NotBefore = *claims.IssuedAt + } else { + leeway := a.config.NotBeforeLeeway.Seconds() + if a.config.NotBeforeLeeway.Seconds() < 0 { + leeway = 0 + } else if a.config.NotBeforeLeeway.Seconds() == 0 { + leeway = claimDefaultLeeway + } + *claims.NotBefore = jwt.NumericDate(int64(*claims.Expiry) - int64(leeway)) + } + } + + expected := jwt.Expected{ + Issuer: a.config.BoundIssuer, + // Subject: a.config.BoundSubject, + Time: time.Now(), + } + + cksLeeway := a.config.ClockSkewLeeway + if a.config.ClockSkewLeeway.Seconds() < 0 { + cksLeeway = 0 + } else if a.config.ClockSkewLeeway.Seconds() == 0 { + cksLeeway = jwt.DefaultLeeway + } + + if err := claims.ValidateWithLeeway(expected, cksLeeway); err != nil { + return nil, fmt.Errorf("error validating claims: %v", err) + } + + if err := validateAudience(a.config.BoundAudiences, claims.Audience, true); err != nil { + return nil, fmt.Errorf("error validating claims: %v", err) + } + + return allClaims, nil +} + +// parsePublicKeyPEM is used to parse RSA, ECDSA, and Ed25519 public keys from PEMs +// +// Extracted from "github.com/hashicorp/vault/sdk/helper/certutil" +// +// go-sso added support for ed25519 (EdDSA) +func parsePublicKeyPEM(data []byte) (interface{}, error) { + block, _ := pem.Decode(data) + if block != nil { + var rawKey interface{} + var err error + if rawKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { + if cert, err := x509.ParseCertificate(block.Bytes); err == nil { + rawKey = cert.PublicKey + } else { + return nil, err + } + } + + if rsaPublicKey, ok := rawKey.(*rsa.PublicKey); ok { + return rsaPublicKey, nil + } + if ecPublicKey, ok := rawKey.(*ecdsa.PublicKey); ok { + return ecPublicKey, nil + } + if edPublicKey, ok := rawKey.(ed25519.PublicKey); ok { + return edPublicKey, nil + } + } + + return nil, errors.New("data does not contain any valid RSA, ECDSA, or ED25519 public keys") +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/jwt_test.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/jwt_test.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/jwt_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/jwt_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,695 @@ +package oidcauth + +import ( + "context" + "crypto/ecdsa" + "crypto/ed25519" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "testing" + "time" + + "github.com/coreos/go-oidc" + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/go-hclog" + "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2/jwt" +) + +func setupForJWT(t *testing.T, authType int, f func(c *Config)) (*Authenticator, string) { + t.Helper() + + config := &Config{ + Type: TypeJWT, + JWTSupportedAlgs: []string{oidc.ES256}, + ClaimMappings: map[string]string{ + "first_name": "name", + "/org/primary": "primary_org", + "/nested/Size": "size", + "Age": "age", + "Admin": "is_admin", + "/nested/division": "division", + "/nested/remote": "is_remote", + }, + ListClaimMappings: map[string]string{ + "https://go-sso/groups": "groups", + }, + } + + var issuer string + switch authType { + case authOIDCDiscovery: + srv := oidcauthtest.Start(t) + config.OIDCDiscoveryURL = srv.Addr() + config.OIDCDiscoveryCACert = srv.CACert() + + issuer = config.OIDCDiscoveryURL + + // TODO(sso): is this a bug in vault? + // config.BoundIssuer = issuer + case authStaticKeys: + pubKey, _ := oidcauthtest.SigningKeys() + config.BoundIssuer = "https://legit.issuer.internal/" + config.JWTValidationPubKeys = []string{pubKey} + issuer = config.BoundIssuer + case authJWKS: + srv := oidcauthtest.Start(t) + config.JWKSURL = srv.Addr() + "/certs" + config.JWKSCACert = srv.CACert() + + issuer = "https://legit.issuer.internal/" + + // TODO(sso): is this a bug in vault? + // config.BoundIssuer = issuer + default: + require.Fail(t, "inappropriate authType: %d", authType) + } + + if f != nil { + f(config) + } + + require.NoError(t, config.Validate()) + + oa, err := New(config, hclog.NewNullLogger()) + require.NoError(t, err) + t.Cleanup(oa.Stop) + + return oa, issuer +} + +func TestJWT_OIDC_Functions_Fail(t *testing.T) { + t.Run("static", func(t *testing.T) { + testJWT_OIDC_Functions_Fail(t, authStaticKeys) + }) + t.Run("JWKS", func(t *testing.T) { + testJWT_OIDC_Functions_Fail(t, authJWKS) + }) + t.Run("oidc discovery", func(t *testing.T) { + testJWT_OIDC_Functions_Fail(t, authOIDCDiscovery) + }) +} + +func testJWT_OIDC_Functions_Fail(t *testing.T, authType int) { + t.Helper() + + t.Run("GetAuthCodeURL", func(t *testing.T) { + oa, _ := setupForJWT(t, authType, nil) + + _, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + map[string]string{"foo": "bar"}, + ) + requireErrorContains(t, err, `GetAuthCodeURL is incompatible with type "jwt"`) + }) + + t.Run("ClaimsFromAuthCode", func(t *testing.T) { + oa, _ := setupForJWT(t, authType, nil) + + _, _, err := oa.ClaimsFromAuthCode( + context.Background(), + "abc", "def", + ) + requireErrorContains(t, err, `ClaimsFromAuthCode is incompatible with type "jwt"`) + }) +} + +func TestJWT_ClaimsFromJWT(t *testing.T) { + t.Run("static", func(t *testing.T) { + testJWT_ClaimsFromJWT(t, authStaticKeys) + }) + t.Run("JWKS", func(t *testing.T) { + testJWT_ClaimsFromJWT(t, authJWKS) + }) + t.Run("oidc discovery", func(t *testing.T) { + // TODO(sso): the vault versions of these tests did not run oidc-discovery + testJWT_ClaimsFromJWT(t, authOIDCDiscovery) + }) +} + +func testJWT_ClaimsFromJWT(t *testing.T, authType int) { + t.Helper() + + t.Run("missing audience", func(t *testing.T) { + if authType == authOIDCDiscovery { + // TODO(sso): why isn't this strict? + t.Skip("why?") + return + } + oa, issuer := setupForJWT(t, authType, nil) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: issuer, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Audience: jwt.Audience{"https://go-sso.test"}, + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + }{ + "jeff", + []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + _, err = oa.ClaimsFromJWT(context.Background(), jwtData) + requireErrorContains(t, err, "audience claim found in JWT but no audiences are bound") + }) + + t.Run("valid inputs", func(t *testing.T) { + oa, issuer := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: issuer, + Audience: jwt.Audience{"https://go-sso.test"}, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + type orgs struct { + Primary string `json:"primary"` + } + + type nested struct { + Division int64 `json:"division"` + Remote bool `json:"remote"` + Size string `json:"Size"` + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + FirstName string `json:"first_name"` + Org orgs `json:"org"` + Color string `json:"color"` + Age int64 `json:"Age"` + Admin bool `json:"Admin"` + Nested nested `json:"nested"` + }{ + User: "jeff", + Groups: []string{"foo", "bar"}, + FirstName: "jeff2", + Org: orgs{"engineering"}, + Color: "green", + Age: 85, + Admin: true, + Nested: nested{ + Division: 3, + Remote: true, + Size: "medium", + }, + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + claims, err := oa.ClaimsFromJWT(context.Background(), jwtData) + require.NoError(t, err) + + expectedClaims := &Claims{ + Values: map[string]string{ + "name": "jeff2", + "primary_org": "engineering", + "size": "medium", + "age": "85", + "is_admin": "true", + "division": "3", + "is_remote": "true", + }, + Lists: map[string][]string{ + "groups": []string{"foo", "bar"}, + }, + } + + require.Equal(t, expectedClaims, claims) + }) + + t.Run("unusable claims", func(t *testing.T) { + oa, issuer := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: issuer, + Audience: jwt.Audience{"https://go-sso.test"}, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + type orgs struct { + Primary string `json:"primary"` + } + + type nested struct { + Division int64 `json:"division"` + Remote bool `json:"remote"` + Size []string `json:"Size"` + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + FirstName string `json:"first_name"` + Org orgs `json:"org"` + Color string `json:"color"` + Age int64 `json:"Age"` + Admin bool `json:"Admin"` + Nested nested `json:"nested"` + }{ + User: "jeff", + Groups: []string{"foo", "bar"}, + FirstName: "jeff2", + Org: orgs{"engineering"}, + Color: "green", + Age: 85, + Admin: true, + Nested: nested{ + Division: 3, + Remote: true, + Size: []string{"medium"}, + }, + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + _, err = oa.ClaimsFromJWT(context.Background(), jwtData) + requireErrorContains(t, err, "error converting claim '/nested/Size' to string from unknown type []interface {}") + }) + + t.Run("bad signature", func(t *testing.T) { + oa, issuer := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: issuer, + Audience: jwt.Audience{"https://go-sso.test"}, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + }{ + "jeff", + []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT(badPrivKey, cl, privateCl) + require.NoError(t, err) + + _, err = oa.ClaimsFromJWT(context.Background(), jwtData) + + switch authType { + case authOIDCDiscovery, authJWKS: + requireErrorContains(t, err, "failed to verify id token signature") + case authStaticKeys: + requireErrorContains(t, err, "no known key successfully validated the token signature") + default: + require.Fail(t, "unexpected type: %d", authType) + } + }) + + t.Run("bad issuer", func(t *testing.T) { + oa, _ := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: "https://not.real.issuer.internal/", + Audience: jwt.Audience{"https://go-sso.test"}, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + }{ + "jeff", + []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + claims, err := oa.ClaimsFromJWT(context.Background(), jwtData) + switch authType { + case authOIDCDiscovery: + requireErrorContains(t, err, "error validating signature: oidc: id token issued by a different provider") + case authStaticKeys: + requireErrorContains(t, err, "validation failed, invalid issuer claim (iss)") + case authJWKS: + // requireErrorContains(t, err, "validation failed, invalid issuer claim (iss)") + // TODO(sso) The original vault test doesn't care about bound issuer. + require.NoError(t, err) + expectedClaims := &Claims{ + Values: map[string]string{}, + Lists: map[string][]string{ + "groups": []string{"foo", "bar"}, + }, + } + require.Equal(t, expectedClaims, claims) + default: + require.Fail(t, "unexpected type: %d", authType) + } + }) + + t.Run("bad audience", func(t *testing.T) { + oa, issuer := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + }) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: issuer, + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Audience: jwt.Audience{"https://fault.plugin.auth.jwt.test"}, + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + }{ + "jeff", + []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + _, err = oa.ClaimsFromJWT(context.Background(), jwtData) + requireErrorContains(t, err, "error validating claims: aud claim does not match any bound audience") + }) +} + +func TestJWT_ClaimsFromJWT_ExpiryClaims(t *testing.T) { + t.Run("static", func(t *testing.T) { + t.Parallel() + testJWT_ClaimsFromJWT_ExpiryClaims(t, authStaticKeys) + }) + t.Run("JWKS", func(t *testing.T) { + t.Parallel() + testJWT_ClaimsFromJWT_ExpiryClaims(t, authJWKS) + }) + // TODO(sso): the vault versions of these tests did not run oidc-discovery + // t.Run("oidc discovery", func(t *testing.T) { + // t.Parallel() + // testJWT_ClaimsFromJWT_ExpiryClaims(t, authOIDCDiscovery) + // }) +} + +func testJWT_ClaimsFromJWT_ExpiryClaims(t *testing.T, authType int) { + t.Helper() + + tests := map[string]struct { + Valid bool + IssuedAt time.Time + NotBefore time.Time + Expiration time.Time + DefaultLeeway int + ExpLeeway int + }{ + // iat, auto clock_skew_leeway (60s), auto expiration leeway (150s) + "auto expire leeway using iat with auto clock_skew_leeway": {true, time.Now().Add(-205 * time.Second), time.Time{}, time.Time{}, 0, 0}, + "expired auto expire leeway using iat with auto clock_skew_leeway": {false, time.Now().Add(-215 * time.Second), time.Time{}, time.Time{}, 0, 0}, + + // iat, clock_skew_leeway (10s), auto expiration leeway (150s) + "auto expire leeway using iat with custom clock_skew_leeway": {true, time.Now().Add(-150 * time.Second), time.Time{}, time.Time{}, 10, 0}, + "expired auto expire leeway using iat with custom clock_skew_leeway": {false, time.Now().Add(-165 * time.Second), time.Time{}, time.Time{}, 10, 0}, + + // iat, no clock_skew_leeway (0s), auto expiration leeway (150s) + "auto expire leeway using iat with no clock_skew_leeway": {true, time.Now().Add(-145 * time.Second), time.Time{}, time.Time{}, -1, 0}, + "expired auto expire leeway using iat with no clock_skew_leeway": {false, time.Now().Add(-155 * time.Second), time.Time{}, time.Time{}, -1, 0}, + + // nbf, auto clock_skew_leeway (60s), auto expiration leeway (150s) + "auto expire leeway using nbf with auto clock_skew_leeway": {true, time.Time{}, time.Now().Add(-205 * time.Second), time.Time{}, 0, 0}, + "expired auto expire leeway using nbf with auto clock_skew_leeway": {false, time.Time{}, time.Now().Add(-215 * time.Second), time.Time{}, 0, 0}, + + // nbf, clock_skew_leeway (10s), auto expiration leeway (150s) + "auto expire leeway using nbf with custom clock_skew_leeway": {true, time.Time{}, time.Now().Add(-145 * time.Second), time.Time{}, 10, 0}, + "expired auto expire leeway using nbf with custom clock_skew_leeway": {false, time.Time{}, time.Now().Add(-165 * time.Second), time.Time{}, 10, 0}, + + // nbf, no clock_skew_leeway (0s), auto expiration leeway (150s) + "auto expire leeway using nbf with no clock_skew_leeway": {true, time.Time{}, time.Now().Add(-145 * time.Second), time.Time{}, -1, 0}, + "expired auto expire leeway using nbf with no clock_skew_leeway": {false, time.Time{}, time.Now().Add(-155 * time.Second), time.Time{}, -1, 0}, + + // iat, auto clock_skew_leeway (60s), custom expiration leeway (10s) + "custom expire leeway using iat with clock_skew_leeway": {true, time.Now().Add(-65 * time.Second), time.Time{}, time.Time{}, 0, 10}, + "expired custom expire leeway using iat with clock_skew_leeway": {false, time.Now().Add(-75 * time.Second), time.Time{}, time.Time{}, 0, 10}, + + // iat, clock_skew_leeway (10s), custom expiration leeway (10s) + "custom expire leeway using iat with clock_skew_leeway with default leeway": {true, time.Now().Add(-5 * time.Second), time.Time{}, time.Time{}, 10, 10}, + "expired custom expire leeway using iat with clock_skew_leeway with default leeway": {false, time.Now().Add(-25 * time.Second), time.Time{}, time.Time{}, 10, 10}, + + // iat, clock_skew_leeway (10s), no expiration leeway (10s) + "no expire leeway using iat with clock_skew_leeway": {true, time.Now().Add(-5 * time.Second), time.Time{}, time.Time{}, 10, -1}, + "expired no expire leeway using iat with clock_skew_leeway": {false, time.Now().Add(-15 * time.Second), time.Time{}, time.Time{}, 10, -1}, + + // nbf, default clock_skew_leeway (60s), custom expiration leeway (10s) + "custom expire leeway using nbf with clock_skew_leeway": {true, time.Time{}, time.Now().Add(-65 * time.Second), time.Time{}, 0, 10}, + "expired custom expire leeway using nbf with clock_skew_leeway": {false, time.Time{}, time.Now().Add(-75 * time.Second), time.Time{}, 0, 10}, + + // nbf, clock_skew_leeway (10s), custom expiration leeway (0s) + "custom expire leeway using nbf with clock_skew_leeway with default leeway": {true, time.Time{}, time.Now().Add(-5 * time.Second), time.Time{}, 10, 10}, + "expired custom expire leeway using nbf with clock_skew_leeway with default leeway": {false, time.Time{}, time.Now().Add(-25 * time.Second), time.Time{}, 10, 10}, + + // nbf, clock_skew_leeway (10s), no expiration leeway (0s) + "no expire leeway using nbf with clock_skew_leeway with default leeway": {true, time.Time{}, time.Now().Add(-5 * time.Second), time.Time{}, 10, -1}, + "no expire leeway using nbf with clock_skew_leeway with default leeway and nbf": {true, time.Time{}, time.Now().Add(-5 * time.Second), time.Time{}, 10, -100}, + "expired no expire leeway using nbf with clock_skew_leeway": {false, time.Time{}, time.Now().Add(-15 * time.Second), time.Time{}, 10, -1}, + "expired no expire leeway using nbf with clock_skew_leeway with default leeway and nbf": {false, time.Time{}, time.Now().Add(-15 * time.Second), time.Time{}, 10, -100}, + } + + for name, tt := range tests { + tt := tt + t.Run(name, func(t *testing.T) { + t.Parallel() + oa, issuer := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + c.ClockSkewLeeway = time.Duration(tt.DefaultLeeway) * time.Second + c.ExpirationLeeway = time.Duration(tt.ExpLeeway) * time.Second + c.NotBeforeLeeway = 0 + }) + + jwtData := setupLogin(t, tt.IssuedAt, tt.Expiration, tt.NotBefore, issuer) + + _, err := oa.ClaimsFromJWT(context.Background(), jwtData) + if tt.Valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} + +func TestJWT_ClaimsFromJWT_NotBeforeClaims(t *testing.T) { + t.Run("static", func(t *testing.T) { + t.Parallel() + testJWT_ClaimsFromJWT_NotBeforeClaims(t, authStaticKeys) + }) + t.Run("JWKS", func(t *testing.T) { + t.Parallel() + testJWT_ClaimsFromJWT_NotBeforeClaims(t, authJWKS) + }) + // TODO(sso): the vault versions of these tests did not run oidc-discovery + // t.Run("oidc discovery", func(t *testing.T) { + // t.Parallel() + // testJWT_ClaimsFromJWT_NotBeforeClaims(t, authOIDCDiscovery) + // }) +} + +func testJWT_ClaimsFromJWT_NotBeforeClaims(t *testing.T, authType int) { + t.Helper() + + tests := map[string]struct { + Valid bool + IssuedAt time.Time + NotBefore time.Time + Expiration time.Time + DefaultLeeway int + NBFLeeway int + }{ + // iat, auto clock_skew_leeway (60s), no nbf leeway (0) + "no nbf leeway using iat with auto clock_skew_leeway": {true, time.Now().Add(55 * time.Second), time.Time{}, time.Now(), 0, -1}, + "not yet valid no nbf leeway using iat with auto clock_skew_leeway": {false, time.Now().Add(65 * time.Second), time.Time{}, time.Now(), 0, -1}, + + // iat, clock_skew_leeway (10s), no nbf leeway (0s) + "no nbf leeway using iat with custom clock_skew_leeway": {true, time.Now().Add(5 * time.Second), time.Time{}, time.Time{}, 10, -1}, + "not yet valid no nbf leeway using iat with custom clock_skew_leeway": {false, time.Now().Add(15 * time.Second), time.Time{}, time.Time{}, 10, -1}, + + // iat, no clock_skew_leeway (0s), nbf leeway (5s) + "nbf leeway using iat with no clock_skew_leeway": {true, time.Now(), time.Time{}, time.Time{}, -1, 5}, + "not yet valid nbf leeway using iat with no clock_skew_leeway": {false, time.Now().Add(6 * time.Second), time.Time{}, time.Time{}, -1, 5}, + + // exp, auto clock_skew_leeway (60s), auto nbf leeway (150s) + "auto nbf leeway using exp with auto clock_skew_leeway": {true, time.Time{}, time.Time{}, time.Now().Add(205 * time.Second), 0, 0}, + "not yet valid auto nbf leeway using exp with auto clock_skew_leeway": {false, time.Time{}, time.Time{}, time.Now().Add(215 * time.Second), 0, 0}, + + // exp, clock_skew_leeway (10s), auto nbf leeway (150s) + "auto nbf leeway using exp with custom clock_skew_leeway": {true, time.Time{}, time.Time{}, time.Now().Add(150 * time.Second), 10, 0}, + "not yet valid auto nbf leeway using exp with custom clock_skew_leeway": {false, time.Time{}, time.Time{}, time.Now().Add(165 * time.Second), 10, 0}, + + // exp, no clock_skew_leeway (0s), auto nbf leeway (150s) + "auto nbf leeway using exp with no clock_skew_leeway": {true, time.Time{}, time.Time{}, time.Now().Add(145 * time.Second), -1, 0}, + "not yet valid auto nbf leeway using exp with no clock_skew_leeway": {false, time.Time{}, time.Time{}, time.Now().Add(152 * time.Second), -1, 0}, + + // exp, auto clock_skew_leeway (60s), custom nbf leeway (10s) + "custom nbf leeway using exp with auto clock_skew_leeway": {true, time.Time{}, time.Time{}, time.Now().Add(65 * time.Second), 0, 10}, + "not yet valid custom nbf leeway using exp with auto clock_skew_leeway": {false, time.Time{}, time.Time{}, time.Now().Add(75 * time.Second), 0, 10}, + + // exp, clock_skew_leeway (10s), custom nbf leeway (10s) + "custom nbf leeway using exp with custom clock_skew_leeway": {true, time.Time{}, time.Time{}, time.Now().Add(15 * time.Second), 10, 10}, + "not yet valid custom nbf leeway using exp with custom clock_skew_leeway": {false, time.Time{}, time.Time{}, time.Now().Add(25 * time.Second), 10, 10}, + + // exp, no clock_skew_leeway (0s), custom nbf leeway (5s) + "custom nbf leeway using exp with no clock_skew_leeway": {true, time.Time{}, time.Time{}, time.Now().Add(3 * time.Second), -1, 5}, + "custom nbf leeway using exp with no clock_skew_leeway with default leeway": {true, time.Time{}, time.Time{}, time.Now().Add(3 * time.Second), -100, 5}, + "not yet valid custom nbf leeway using exp with no clock_skew_leeway": {false, time.Time{}, time.Time{}, time.Now().Add(7 * time.Second), -1, 5}, + "not yet valid custom nbf leeway using exp with no clock_skew_leeway with default leeway": {false, time.Time{}, time.Time{}, time.Now().Add(7 * time.Second), -100, 5}, + } + + for name, tt := range tests { + tt := tt + t.Run(name, func(t *testing.T) { + t.Parallel() + + oa, issuer := setupForJWT(t, authType, func(c *Config) { + c.BoundAudiences = []string{ + "https://go-sso.test", + "another_audience", + } + c.ClockSkewLeeway = time.Duration(tt.DefaultLeeway) * time.Second + c.ExpirationLeeway = 0 + c.NotBeforeLeeway = time.Duration(tt.NBFLeeway) * time.Second + }) + + jwtData := setupLogin(t, tt.IssuedAt, tt.Expiration, tt.NotBefore, issuer) + + _, err := oa.ClaimsFromJWT(context.Background(), jwtData) + if tt.Valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} + +func setupLogin(t *testing.T, iat, exp, nbf time.Time, issuer string) string { + cl := jwt.Claims{ + Audience: jwt.Audience{"https://go-sso.test"}, + Issuer: issuer, + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + IssuedAt: jwt.NewNumericDate(iat), + Expiry: jwt.NewNumericDate(exp), + NotBefore: jwt.NewNumericDate(nbf), + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + Color string `json:"color"` + }{ + "foobar", + []string{"foo", "bar"}, + "green", + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + return jwtData +} + +func TestParsePublicKeyPEM(t *testing.T) { + getPublicPEM := func(t *testing.T, pub interface{}) string { + derBytes, err := x509.MarshalPKIXPublicKey(pub) + require.NoError(t, err) + pemBlock := &pem.Block{ + Type: "PUBLIC KEY", + Bytes: derBytes, + } + return string(pem.EncodeToMemory(pemBlock)) + } + + t.Run("rsa", func(t *testing.T) { + privateKey, err := rsa.GenerateKey(rand.Reader, 2048) + require.NoError(t, err) + + pub := privateKey.Public() + pubPEM := getPublicPEM(t, pub) + + got, err := parsePublicKeyPEM([]byte(pubPEM)) + require.NoError(t, err) + require.Equal(t, pub, got) + }) + + t.Run("ecdsa", func(t *testing.T) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + require.NoError(t, err) + + pub := privateKey.Public() + pubPEM := getPublicPEM(t, pub) + + got, err := parsePublicKeyPEM([]byte(pubPEM)) + require.NoError(t, err) + require.Equal(t, pub, got) + }) + + t.Run("ed25519", func(t *testing.T) { + pub, _, err := ed25519.GenerateKey(rand.Reader) + require.NoError(t, err) + + pubPEM := getPublicPEM(t, pub) + + got, err := parsePublicKeyPEM([]byte(pubPEM)) + require.NoError(t, err) + require.Equal(t, pub, got) + }) +} + +const ( + badPrivKey string = `-----BEGIN EC PRIVATE KEY----- +MHcCAQEEILTAHJm+clBKYCrRDc74Pt7uF7kH+2x2TdL5cH23FEcsoAoGCCqGSM49 +AwEHoUQDQgAE+C3CyjVWdeYtIqgluFJlwZmoonphsQbj9Nfo5wrEutv+3RTFnDQh +vttUajcFAcl4beR+jHFYC00vSO4i5jZ64g== +-----END EC PRIVATE KEY-----` +) diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidcauthtest/testing.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidcauthtest/testing.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidcauthtest/testing.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidcauthtest/testing.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,529 @@ +// package oidcauthtest exposes tools to assist in writing unit tests of OIDC +// and JWT authentication workflows. +// +// When the package is loaded it will randomly generate an ECDSA signing +// keypair used to sign JWTs both via the Server and the SignJWT method. +package oidcauthtest + +import ( + "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/x509" + "encoding/json" + "encoding/pem" + "fmt" + "io/ioutil" + "log" + "net" + "net/http" + "net/http/httptest" + "net/url" + "strconv" + "sync" + "time" + + "github.com/hashicorp/consul/internal/go-sso/oidcauth/internal/strutil" + "github.com/mitchellh/go-testing-interface" + "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2" + "gopkg.in/square/go-jose.v2/jwt" +) + +// Server is local server the mocks the endpoints used by the OIDC and +// JWKS process. +type Server struct { + httpServer *httptest.Server + caCert string + returnFunc func() + + jwks *jose.JSONWebKeySet + allowedRedirectURIs []string + replySubject string + replyUserinfo map[string]interface{} + + mu sync.Mutex + clientID string + clientSecret string + expectedAuthCode string + expectedAuthNonce string + customClaims map[string]interface{} + customAudience string + omitIDToken bool + disableUserInfo bool +} + +type startOption struct { + port int + returnFunc func() +} + +// WithPort is a option for Start that lets the caller control the port +// allocation. The returnFunc parameter is used when the provider is stopped to +// return the port in whatever bookkeeping system the caller wants to use. +func WithPort(port int, returnFunc func()) startOption { + return startOption{ + port: port, + returnFunc: returnFunc, + } +} + +// Start creates a disposable Server. If the port provided is +// zero it will bind to a random free port, otherwise the provided port is +// used. +func Start(t testing.T, options ...startOption) *Server { + s := &Server{ + allowedRedirectURIs: []string{ + "https://example.com", + }, + replySubject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + replyUserinfo: map[string]interface{}{ + "color": "red", + "temperature": "76", + "flavor": "umami", + }, + } + + jwks, err := newJWKS(ecdsaPublicKey) + require.NoError(t, err) + s.jwks = jwks + + var ( + port int + returnFunc func() + ) + for _, option := range options { + if option.port > 0 { + port = option.port + returnFunc = option.returnFunc + } + } + + s.httpServer = httptestNewUnstartedServerWithPort(s, port) + s.httpServer.Config.ErrorLog = log.New(ioutil.Discard, "", 0) + s.httpServer.StartTLS() + if returnFunc != nil { + t.Cleanup(returnFunc) + } + t.Cleanup(s.httpServer.Close) + + cert := s.httpServer.Certificate() + + var buf bytes.Buffer + require.NoError(t, pem.Encode(&buf, &pem.Block{Type: "CERTIFICATE", Bytes: cert.Raw})) + s.caCert = buf.String() + + return s +} + +// SetClientCreds is for configuring the client information required for the +// OIDC workflows. +func (s *Server) SetClientCreds(clientID, clientSecret string) { + s.mu.Lock() + defer s.mu.Unlock() + s.clientID = clientID + s.clientSecret = clientSecret +} + +// SetExpectedAuthCode configures the auth code to return from /auth and the +// allowed auth code for /token. +func (s *Server) SetExpectedAuthCode(code string) { + s.mu.Lock() + defer s.mu.Unlock() + s.expectedAuthCode = code +} + +// SetExpectedAuthNonce configures the nonce value required for /auth. +func (s *Server) SetExpectedAuthNonce(nonce string) { + s.mu.Lock() + defer s.mu.Unlock() + s.expectedAuthNonce = nonce +} + +// SetAllowedRedirectURIs allows you to configure the allowed redirect URIs for +// the OIDC workflow. If not configured a sample of "https://example.com" is +// used. +func (s *Server) SetAllowedRedirectURIs(uris []string) { + s.mu.Lock() + defer s.mu.Unlock() + s.allowedRedirectURIs = uris +} + +// SetCustomClaims lets you set claims to return in the JWT issued by the OIDC +// workflow. +func (s *Server) SetCustomClaims(customClaims map[string]interface{}) { + s.mu.Lock() + defer s.mu.Unlock() + s.customClaims = customClaims +} + +// SetCustomAudience configures what audience value to embed in the JWT issued +// by the OIDC workflow. +func (s *Server) SetCustomAudience(customAudience string) { + s.mu.Lock() + defer s.mu.Unlock() + s.customAudience = customAudience +} + +// OmitIDTokens forces an error state where the /token endpoint does not return +// id_token. +func (s *Server) OmitIDTokens() { + s.mu.Lock() + defer s.mu.Unlock() + s.omitIDToken = true +} + +// DisableUserInfo makes the userinfo endpoint return 404 and omits it from the +// discovery config. +func (s *Server) DisableUserInfo() { + s.mu.Lock() + defer s.mu.Unlock() + s.disableUserInfo = true +} + +// Stop stops the running Server. +func (s *Server) Stop() { + s.httpServer.Close() +} + +// Addr returns the current base URL for the running webserver. +func (s *Server) Addr() string { return s.httpServer.URL } + +// CACert returns the pem-encoded CA certificate used by the HTTPS server. +func (s *Server) CACert() string { return s.caCert } + +// SigningKeys returns the pem-encoded keys used to sign JWTs. +func (s *Server) SigningKeys() (pub, priv string) { + return SigningKeys() +} + +// ServeHTTP implements http.Handler. +func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { + s.mu.Lock() + defer s.mu.Unlock() + + w.Header().Set("Content-Type", "application/json") + + switch req.URL.Path { + case "/.well-known/openid-configuration": + if req.Method != "GET" { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + reply := struct { + Issuer string `json:"issuer"` + AuthEndpoint string `json:"authorization_endpoint"` + TokenEndpoint string `json:"token_endpoint"` + JWKSURI string `json:"jwks_uri"` + UserinfoEndpoint string `json:"userinfo_endpoint,omitempty"` + }{ + Issuer: s.Addr(), + AuthEndpoint: s.Addr() + "/auth", + TokenEndpoint: s.Addr() + "/token", + JWKSURI: s.Addr() + "/certs", + UserinfoEndpoint: s.Addr() + "/userinfo", + } + if s.disableUserInfo { + reply.UserinfoEndpoint = "" + } + + if err := writeJSON(w, &reply); err != nil { + return + } + + case "/auth": + if req.Method != "GET" { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + qv := req.URL.Query() + + if qv.Get("response_type") != "code" { + writeAuthErrorResponse(w, req, "unsupported_response_type", "") + return + } + if qv.Get("scope") != "openid" { + writeAuthErrorResponse(w, req, "invalid_scope", "") + return + } + + if s.expectedAuthCode == "" { + writeAuthErrorResponse(w, req, "access_denied", "") + return + } + + nonce := qv.Get("nonce") + if s.expectedAuthNonce != "" && s.expectedAuthNonce != nonce { + writeAuthErrorResponse(w, req, "access_denied", "") + return + } + + state := qv.Get("state") + if state == "" { + writeAuthErrorResponse(w, req, "invalid_request", "missing state parameter") + return + } + + redirectURI := qv.Get("redirect_uri") + if redirectURI == "" { + writeAuthErrorResponse(w, req, "invalid_request", "missing redirect_uri parameter") + return + } + + redirectURI += "?state=" + url.QueryEscape(state) + + "&code=" + url.QueryEscape(s.expectedAuthCode) + + http.Redirect(w, req, redirectURI, http.StatusFound) + + return + + case "/certs": + if req.Method != "GET" { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + if err := writeJSON(w, s.jwks); err != nil { + return + } + + case "/certs_missing": + w.WriteHeader(http.StatusNotFound) + + case "/certs_invalid": + w.Write([]byte("It's not a keyset!")) + + case "/token": + if req.Method != "POST" { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + switch { + case req.FormValue("grant_type") != "authorization_code": + _ = writeTokenErrorResponse(w, req, http.StatusBadRequest, "invalid_request", "bad grant_type") + return + case !strutil.StrListContains(s.allowedRedirectURIs, req.FormValue("redirect_uri")): + _ = writeTokenErrorResponse(w, req, http.StatusBadRequest, "invalid_request", "redirect_uri is not allowed") + return + case req.FormValue("code") != s.expectedAuthCode: + _ = writeTokenErrorResponse(w, req, http.StatusUnauthorized, "invalid_grant", "unexpected auth code") + return + } + + stdClaims := jwt.Claims{ + Subject: s.replySubject, + Issuer: s.Addr(), + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Expiry: jwt.NewNumericDate(time.Now().Add(5 * time.Second)), + Audience: jwt.Audience{s.clientID}, + } + if s.customAudience != "" { + stdClaims.Audience = jwt.Audience{s.customAudience} + } + + jwtData, err := SignJWT("", stdClaims, s.customClaims) + if err != nil { + _ = writeTokenErrorResponse(w, req, http.StatusInternalServerError, "server_error", err.Error()) + return + } + + reply := struct { + AccessToken string `json:"access_token"` + IDToken string `json:"id_token,omitempty"` + }{ + AccessToken: jwtData, + IDToken: jwtData, + } + if s.omitIDToken { + reply.IDToken = "" + } + if err := writeJSON(w, &reply); err != nil { + return + } + + case "/userinfo": + if s.disableUserInfo { + w.WriteHeader(http.StatusNotFound) + return + } + if req.Method != "GET" { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + if err := writeJSON(w, s.replyUserinfo); err != nil { + return + } + + default: + w.WriteHeader(http.StatusNotFound) + } +} + +func writeAuthErrorResponse(w http.ResponseWriter, req *http.Request, errorCode, errorMessage string) { + qv := req.URL.Query() + + redirectURI := qv.Get("redirect_uri") + + "?state=" + url.QueryEscape(qv.Get("state")) + + "&error=" + url.QueryEscape(errorCode) + + if errorMessage != "" { + redirectURI += "&error_description=" + url.QueryEscape(errorMessage) + } + + http.Redirect(w, req, redirectURI, http.StatusFound) +} + +func writeTokenErrorResponse(w http.ResponseWriter, req *http.Request, statusCode int, errorCode, errorMessage string) error { + body := struct { + Code string `json:"error"` + Desc string `json:"error_description,omitempty"` + }{ + Code: errorCode, + Desc: errorMessage, + } + + w.WriteHeader(statusCode) + return writeJSON(w, &body) +} + +// newJWKS converts a pem-encoded public key into JWKS data suitable for a +// verification endpoint response +func newJWKS(pubKey string) (*jose.JSONWebKeySet, error) { + block, _ := pem.Decode([]byte(pubKey)) + if block == nil { + return nil, fmt.Errorf("unable to decode public key") + } + input := block.Bytes + + pub, err := x509.ParsePKIXPublicKey(input) + if err != nil { + return nil, err + } + return &jose.JSONWebKeySet{ + Keys: []jose.JSONWebKey{ + jose.JSONWebKey{ + Key: pub, + }, + }, + }, nil +} + +func writeJSON(w http.ResponseWriter, out interface{}) error { + enc := json.NewEncoder(w) + return enc.Encode(out) +} + +// SignJWT will bundle the provided claims into a signed JWT. The provided key +// is assumed to be ECDSA. +// +// If no private key is provided, the default package keys are used. These can +// be retrieved via the SigningKeys() method. +func SignJWT(privKey string, claims jwt.Claims, privateClaims interface{}) (string, error) { + if privKey == "" { + privKey = ecdsaPrivateKey + } + var key *ecdsa.PrivateKey + block, _ := pem.Decode([]byte(privKey)) + if block != nil { + var err error + key, err = x509.ParseECPrivateKey(block.Bytes) + if err != nil { + return "", err + } + } + + sig, err := jose.NewSigner( + jose.SigningKey{Algorithm: jose.ES256, Key: key}, + (&jose.SignerOptions{}).WithType("JWT"), + ) + if err != nil { + return "", err + } + + raw, err := jwt.Signed(sig). + Claims(claims). + Claims(privateClaims). + CompactSerialize() + if err != nil { + return "", err + } + + return raw, nil +} + +// httptestNewUnstartedServerWithPort is roughly the same as +// httptest.NewUnstartedServer() but allows the caller to explicitly choose the +// port if desired. +func httptestNewUnstartedServerWithPort(handler http.Handler, port int) *httptest.Server { + if port == 0 { + return httptest.NewUnstartedServer(handler) + } + addr := net.JoinHostPort("127.0.0.1", strconv.Itoa(port)) + l, err := net.Listen("tcp", addr) + if err != nil { + panic(fmt.Sprintf("httptest: failed to listen on a port: %v", err)) + } + + return &httptest.Server{ + Listener: l, + Config: &http.Server{Handler: handler}, + } +} + +// SigningKeys returns the pem-encoded keys used to sign JWTs by default. +func SigningKeys() (pub, priv string) { + return ecdsaPublicKey, ecdsaPrivateKey +} + +var ( + ecdsaPublicKey string + ecdsaPrivateKey string +) + +func init() { + // Each time we run tests we generate a unique set of keys for use in the + // test. These are cached between runs but do not persist between restarts + // of the test binary. + var err error + ecdsaPublicKey, ecdsaPrivateKey, err = GenerateKey() + if err != nil { + panic(err) + } +} + +func GenerateKey() (pub, priv string, err error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return "", "", fmt.Errorf("error generating private key: %v", err) + } + + { + derBytes, err := x509.MarshalECPrivateKey(privateKey) + if err != nil { + return "", "", fmt.Errorf("error marshaling private key: %v", err) + } + pemBlock := &pem.Block{ + Type: "EC PRIVATE KEY", + Bytes: derBytes, + } + priv = string(pem.EncodeToMemory(pemBlock)) + } + { + derBytes, err := x509.MarshalPKIXPublicKey(privateKey.Public()) + if err != nil { + return "", "", fmt.Errorf("error marshaling public key: %v", err) + } + pemBlock := &pem.Block{ + Type: "PUBLIC KEY", + Bytes: derBytes, + } + pub = string(pem.EncodeToMemory(pemBlock)) + } + + return pub, priv, nil +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidc.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidc.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,282 @@ +package oidcauth + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "strings" + "time" + + "github.com/coreos/go-oidc" + "github.com/hashicorp/go-uuid" + "golang.org/x/oauth2" +) + +var ( + oidcStateTimeout = 10 * time.Minute + oidcStateCleanupInterval = 1 * time.Minute +) + +// GetAuthCodeURL is the first part of the OIDC authorization code workflow. +// The statePayload field is stored in the Authenticator instance keyed by the +// "state" key so it can be returned during a future call to +// ClaimsFromAuthCode. +// +// Requires the authenticator's config type be set to 'oidc'. +func (a *Authenticator) GetAuthCodeURL(ctx context.Context, redirectURI string, statePayload interface{}) (string, error) { + if a.config.authType() != authOIDCFlow { + return "", fmt.Errorf("GetAuthCodeURL is incompatible with type %q", TypeJWT) + } + if redirectURI == "" { + return "", errors.New("missing redirect_uri") + } + + if !validRedirect(redirectURI, a.config.AllowedRedirectURIs) { + return "", fmt.Errorf("unauthorized redirect_uri: %s", redirectURI) + } + + // "openid" is a required scope for OpenID Connect flows + scopes := append([]string{oidc.ScopeOpenID}, a.config.OIDCScopes...) + + // Configure an OpenID Connect aware OAuth2 client + oauth2Config := oauth2.Config{ + ClientID: a.config.OIDCClientID, + ClientSecret: a.config.OIDCClientSecret, + RedirectURL: redirectURI, + Endpoint: a.provider.Endpoint(), + Scopes: scopes, + } + + stateID, nonce, err := a.createOIDCState(redirectURI, statePayload) + if err != nil { + return "", fmt.Errorf("error generating OAuth state: %v", err) + } + + authCodeOpts := []oauth2.AuthCodeOption{ + oidc.Nonce(nonce), + } + + return oauth2Config.AuthCodeURL(stateID, authCodeOpts...), nil +} + +// ClaimsFromAuthCode is the second part of the OIDC authorization code +// workflow. The interface{} return value is the statePayload previously passed +// via GetAuthCodeURL. +// +// The error may be of type *ProviderLoginFailedError or +// *TokenVerificationFailedError which can be detected via errors.As(). +// +// Requires the authenticator's config type be set to 'oidc'. +func (a *Authenticator) ClaimsFromAuthCode(ctx context.Context, stateParam, code string) (*Claims, interface{}, error) { + if a.config.authType() != authOIDCFlow { + return nil, nil, fmt.Errorf("ClaimsFromAuthCode is incompatible with type %q", TypeJWT) + } + + // TODO(sso): this could be because we ACTUALLY are getting OIDC error responses and + // should handle them elsewhere! + if code == "" { + return nil, nil, &ProviderLoginFailedError{ + Err: fmt.Errorf("OAuth code parameter not provided"), + } + } + + state := a.verifyOIDCState(stateParam) + if state == nil { + return nil, nil, &ProviderLoginFailedError{ + Err: fmt.Errorf("Expired or missing OAuth state."), + } + } + + oidcCtx := contextWithHttpClient(ctx, a.httpClient) + + var oauth2Config = oauth2.Config{ + ClientID: a.config.OIDCClientID, + ClientSecret: a.config.OIDCClientSecret, + RedirectURL: state.redirectURI, + Endpoint: a.provider.Endpoint(), + Scopes: []string{oidc.ScopeOpenID}, + } + + oauth2Token, err := oauth2Config.Exchange(oidcCtx, code) + if err != nil { + return nil, nil, &ProviderLoginFailedError{ + Err: fmt.Errorf("Error exchanging oidc code: %w", err), + } + } + + // Extract the ID Token from OAuth2 token. + rawToken, ok := oauth2Token.Extra("id_token").(string) + if !ok { + return nil, nil, &TokenVerificationFailedError{ + Err: errors.New("No id_token found in response."), + } + } + + if a.config.VerboseOIDCLogging && a.logger != nil { + a.logger.Debug("OIDC provider response", "ID token", rawToken) + } + + // Parse and verify ID Token payload. + allClaims, err := a.verifyOIDCToken(ctx, rawToken) // TODO(sso): should this use oidcCtx? + if err != nil { + return nil, nil, &TokenVerificationFailedError{ + Err: err, + } + } + + if allClaims["nonce"] != state.nonce { // TODO(sso): does this need a cast? + return nil, nil, &TokenVerificationFailedError{ + Err: errors.New("Invalid ID token nonce."), + } + } + delete(allClaims, "nonce") + + // Attempt to fetch information from the /userinfo endpoint and merge it with + // the existing claims data. A failure to fetch additional information from this + // endpoint will not invalidate the authorization flow. + if userinfo, err := a.provider.UserInfo(oidcCtx, oauth2.StaticTokenSource(oauth2Token)); err == nil { + _ = userinfo.Claims(&allClaims) + } else { + if a.logger != nil { + logFunc := a.logger.Warn + if strings.Contains(err.Error(), "user info endpoint is not supported") { + logFunc = a.logger.Info + } + logFunc("error reading /userinfo endpoint", "error", err) + } + } + + if a.config.VerboseOIDCLogging && a.logger != nil { + if c, err := json.Marshal(allClaims); err == nil { + a.logger.Debug("OIDC provider response", "claims", string(c)) + } else { + a.logger.Debug("OIDC provider response", "marshalling error", err.Error()) + } + } + + c, err := a.extractClaims(allClaims) + if err != nil { + return nil, nil, &TokenVerificationFailedError{ + Err: err, + } + } + + if a.config.VerboseOIDCLogging && a.logger != nil { + a.logger.Debug("OIDC provider response", "extracted_claims", c) + } + + return c, state.payload, nil +} + +// ProviderLoginFailedError is an error type sometimes returned from +// ClaimsFromAuthCode(). +// +// It represents a failure to complete the authorization code workflow with the +// provider such as losing important OIDC parameters or a failure to fetch an +// id_token. +// +// You can check for it with errors.As(). +type ProviderLoginFailedError struct { + Err error +} + +func (e *ProviderLoginFailedError) Error() string { + return fmt.Sprintf("Provider login failed: %v", e.Err) +} + +func (e *ProviderLoginFailedError) Unwrap() error { return e.Err } + +// TokenVerificationFailedError is an error type sometimes returned from +// ClaimsFromAuthCode(). +// +// It represents a failure to vet the returned OIDC credentials for validity +// such as the id_token not passing verification or using an mismatched nonce. +// +// You can check for it with errors.As(). +type TokenVerificationFailedError struct { + Err error +} + +func (e *TokenVerificationFailedError) Error() string { + return fmt.Sprintf("Token verification failed: %v", e.Err) +} + +func (e *TokenVerificationFailedError) Unwrap() error { return e.Err } + +func (a *Authenticator) verifyOIDCToken(ctx context.Context, rawToken string) (map[string]interface{}, error) { + allClaims := make(map[string]interface{}) + + oidcConfig := &oidc.Config{ + SupportedSigningAlgs: a.config.JWTSupportedAlgs, + } + switch a.config.authType() { + case authOIDCFlow: + oidcConfig.ClientID = a.config.OIDCClientID + case authOIDCDiscovery: + oidcConfig.SkipClientIDCheck = true + default: + return nil, fmt.Errorf("unsupported auth type for this verifyOIDCToken: %d", a.config.authType()) + } + + verifier := a.provider.Verifier(oidcConfig) + + idToken, err := verifier.Verify(ctx, rawToken) + if err != nil { + return nil, fmt.Errorf("error validating signature: %v", err) + } + + if err := idToken.Claims(&allClaims); err != nil { + return nil, fmt.Errorf("unable to successfully parse all claims from token: %v", err) + } + // TODO(sso): why isn't this strict for OIDC? + if err := validateAudience(a.config.BoundAudiences, idToken.Audience, false); err != nil { + return nil, fmt.Errorf("error validating claims: %v", err) + } + + return allClaims, nil +} + +// verifyOIDCState tests whether the provided state ID is valid and returns the +// associated state object if so. A nil state is returned if the ID is not found +// or expired. The state should only ever be retrieved once and is deleted as +// part of this request. +func (a *Authenticator) verifyOIDCState(stateID string) *oidcState { + defer a.oidcStates.Delete(stateID) + + if stateRaw, ok := a.oidcStates.Get(stateID); ok { + return stateRaw.(*oidcState) + } + + return nil +} + +// createOIDCState make an expiring state object, associated with a random state ID +// that is passed throughout the OAuth process. A nonce is also included in the +// auth process, and for simplicity will be identical in length/format as the state ID. +func (a *Authenticator) createOIDCState(redirectURI string, payload interface{}) (string, string, error) { + // Get enough bytes for 2 160-bit IDs (per rfc6749#section-10.10) + bytes, err := uuid.GenerateRandomBytes(2 * 20) + if err != nil { + return "", "", err + } + + stateID := fmt.Sprintf("%x", bytes[:20]) + nonce := fmt.Sprintf("%x", bytes[20:]) + + a.oidcStates.SetDefault(stateID, &oidcState{ + nonce: nonce, + redirectURI: redirectURI, + payload: payload, + }) + + return stateID, nonce, nil +} + +// oidcState is created when an authURL is requested. The state +// identifier is passed throughout the OAuth process. +type oidcState struct { + nonce string + redirectURI string + payload interface{} +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidcjwt.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidcjwt.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidcjwt.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidcjwt.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,252 @@ +package oidcauth + +import ( + "context" + "crypto/tls" + "crypto/x509" + "encoding/json" + "errors" + "fmt" + "net/http" + "strconv" + "strings" + + "github.com/hashicorp/consul/internal/go-sso/oidcauth/internal/strutil" + "github.com/hashicorp/go-cleanhttp" + "github.com/hashicorp/go-hclog" + "github.com/mitchellh/pointerstructure" + "golang.org/x/oauth2" +) + +func contextWithHttpClient(ctx context.Context, client *http.Client) context.Context { + return context.WithValue(ctx, oauth2.HTTPClient, client) +} + +func createHTTPClient(caCert string) (*http.Client, error) { + tr := cleanhttp.DefaultPooledTransport() + + if caCert != "" { + certPool := x509.NewCertPool() + if ok := certPool.AppendCertsFromPEM([]byte(caCert)); !ok { + return nil, errors.New("could not parse CA PEM value successfully") + } + + tr.TLSClientConfig = &tls.Config{ + RootCAs: certPool, + } + } + + return &http.Client{ + Transport: tr, + }, nil +} + +// extractClaims extracts all configured claims from the received claims. +func (a *Authenticator) extractClaims(allClaims map[string]interface{}) (*Claims, error) { + metadata, err := extractStringMetadata(a.logger, allClaims, a.config.ClaimMappings) + if err != nil { + return nil, err + } + + listMetadata, err := extractListMetadata(a.logger, allClaims, a.config.ListClaimMappings) + if err != nil { + return nil, err + } + + return &Claims{ + Values: metadata, + Lists: listMetadata, + }, nil +} + +// extractStringMetadata builds a metadata map of string values from a set of +// claims and claims mappings. The referenced claims must be strings and the +// claims mappings must be of the structure: +// +// { +// "/some/claim/pointer": "metadata_key1", +// "another_claim": "metadata_key2", +// ... +// } +func extractStringMetadata(logger hclog.Logger, allClaims map[string]interface{}, claimMappings map[string]string) (map[string]string, error) { + metadata := make(map[string]string) + for source, target := range claimMappings { + rawValue := getClaim(logger, allClaims, source) + if rawValue == nil { + continue + } + + strValue, ok := stringifyMetadataValue(rawValue) + if !ok { + return nil, fmt.Errorf("error converting claim '%s' to string from unknown type %T", source, rawValue) + } + + metadata[target] = strValue + } + return metadata, nil +} + +// extractListMetadata builds a metadata map of string list values from a set +// of claims and claims mappings. The referenced claims must be strings and +// the claims mappings must be of the structure: +// +// { +// "/some/claim/pointer": "metadata_key1", +// "another_claim": "metadata_key2", +// ... +// } +func extractListMetadata(logger hclog.Logger, allClaims map[string]interface{}, listClaimMappings map[string]string) (map[string][]string, error) { + out := make(map[string][]string) + for source, target := range listClaimMappings { + if rawValue := getClaim(logger, allClaims, source); rawValue != nil { + rawList, ok := normalizeList(rawValue) + if !ok { + return nil, fmt.Errorf("%q list claim could not be converted to string list", source) + } + + list := make([]string, 0, len(rawList)) + for _, raw := range rawList { + value, ok := stringifyMetadataValue(raw) + if !ok { + return nil, fmt.Errorf("value %v in %q list claim could not be parsed as string", raw, source) + } + + if value == "" { + continue + } + list = append(list, value) + } + + out[target] = list + } + } + return out, nil +} + +// getClaim returns a claim value from allClaims given a provided claim string. +// If this string is a valid JSONPointer, it will be interpreted as such to +// locate the claim. Otherwise, the claim string will be used directly. +// +// There is no fixup done to the returned data type here. That happens a layer +// up in the caller. +func getClaim(logger hclog.Logger, allClaims map[string]interface{}, claim string) interface{} { + if !strings.HasPrefix(claim, "/") { + return allClaims[claim] + } + + val, err := pointerstructure.Get(allClaims, claim) + if err != nil { + if logger != nil { + logger.Warn("unable to locate claim", "claim", claim, "error", err) + } + return nil + } + + return val +} + +// normalizeList takes an item or a slice and returns a slice. This is useful +// when providers are expected to return a list (typically of strings) but +// reduce it to a non-slice type when the list count is 1. +// +// There is no fixup done to elements of the returned slice here. That happens +// a layer up in the caller. +func normalizeList(raw interface{}) ([]interface{}, bool) { + switch v := raw.(type) { + case []interface{}: + return v, true + case string, // note: this list should be the same as stringifyMetadataValue + bool, + json.Number, + float64, + float32, + int8, + int16, + int32, + int64, + int, + uint8, + uint16, + uint32, + uint64, + uint: + return []interface{}{v}, true + default: + return nil, false + } + +} + +// stringifyMetadataValue will try to convert the provided raw value into a +// faithful string representation of that value per these rules: +// +// - strings => unchanged +// - bool => "true" / "false" +// - json.Number => String() +// - float32/64 => truncated to int64 and then formatted as an ascii string +// - intXX/uintXX => casted to int64 and then formatted as an ascii string +// +// If successful the string value and true are returned. otherwise an empty +// string and false are returned. +func stringifyMetadataValue(rawValue interface{}) (string, bool) { + switch v := rawValue.(type) { + case string: + return v, true + case bool: + return strconv.FormatBool(v), true + case json.Number: + return v.String(), true + case float64: + // The claims unmarshalled by go-oidc don't use UseNumber, so + // they'll come in as float64 instead of an integer or json.Number. + return strconv.FormatInt(int64(v), 10), true + + // The numerical type cases following here are only here for the sake + // of numerical type completion. Everything is truncated to an integer + // before being stringified. + case float32: + return strconv.FormatInt(int64(v), 10), true + case int8: + return strconv.FormatInt(int64(v), 10), true + case int16: + return strconv.FormatInt(int64(v), 10), true + case int32: + return strconv.FormatInt(int64(v), 10), true + case int64: + return strconv.FormatInt(v, 10), true + case int: + return strconv.FormatInt(int64(v), 10), true + case uint8: + return strconv.FormatInt(int64(v), 10), true + case uint16: + return strconv.FormatInt(int64(v), 10), true + case uint32: + return strconv.FormatInt(int64(v), 10), true + case uint64: + return strconv.FormatInt(int64(v), 10), true + case uint: + return strconv.FormatInt(int64(v), 10), true + default: + return "", false + } +} + +// validateAudience checks whether any of the audiences in audClaim match those +// in boundAudiences. If strict is true and there are no bound audiences, then +// the presence of any audience in the received claim is considered an error. +func validateAudience(boundAudiences, audClaim []string, strict bool) error { + if strict && len(boundAudiences) == 0 && len(audClaim) > 0 { + return errors.New("audience claim found in JWT but no audiences are bound") + } + + if len(boundAudiences) > 0 { + for _, v := range boundAudiences { + if strutil.StrListContains(audClaim, v) { + return nil + } + } + return errors.New("aud claim does not match any bound audience") + } + + return nil +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidcjwt_test.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidcjwt_test.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidcjwt_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidcjwt_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,614 @@ +package oidcauth + +import ( + "encoding/json" + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestExtractStringMetadata(t *testing.T) { + emptyMap := make(map[string]string) + + tests := map[string]struct { + allClaims map[string]interface{} + claimMappings map[string]string + expected map[string]string + errExpected bool + }{ + "empty": {nil, nil, emptyMap, false}, + "all": { + map[string]interface{}{ + "data1": "foo", + "data2": "bar", + }, + map[string]string{ + "data1": "val1", + "data2": "val2", + }, + map[string]string{ + "val1": "foo", + "val2": "bar", + }, + false, + }, + "some": { + map[string]interface{}{ + "data1": "foo", + "data2": "bar", + }, + map[string]string{ + "data1": "val1", + "data3": "val2", + }, + map[string]string{ + "val1": "foo", + }, + false, + }, + "none": { + map[string]interface{}{ + "data1": "foo", + "data2": "bar", + }, + map[string]string{ + "data8": "val1", + "data9": "val2", + }, + emptyMap, + false, + }, + + "nested data": { + map[string]interface{}{ + "data1": "foo", + "data2": map[string]interface{}{ + "child": "bar", + }, + "data3": true, + "data4": false, + "data5": float64(7.9), + "data6": json.Number("-12345"), + "data7": int(42), + }, + map[string]string{ + "data1": "val1", + "/data2/child": "val2", + "data3": "val3", + "data4": "val4", + "data5": "val5", + "data6": "val6", + "data7": "val7", + }, + map[string]string{ + "val1": "foo", + "val2": "bar", + "val3": "true", + "val4": "false", + "val5": "7", + "val6": "-12345", + "val7": "42", + }, + false, + }, + + "error: a struct isn't stringifiable": { + map[string]interface{}{ + "data1": map[string]interface{}{ + "child": "bar", + }, + }, + map[string]string{ + "data1": "val1", + }, + nil, + true, + }, + "error: a slice isn't stringifiable": { + map[string]interface{}{ + "data1": []interface{}{ + "child", "bar", + }, + }, + map[string]string{ + "data1": "val1", + }, + nil, + true, + }, + } + + for name, test := range tests { + test := test + t.Run(name, func(t *testing.T) { + actual, err := extractStringMetadata(nil, test.allClaims, test.claimMappings) + if test.errExpected { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, test.expected, actual) + } + }) + } +} + +func TestExtractListMetadata(t *testing.T) { + emptyMap := make(map[string][]string) + + tests := map[string]struct { + allClaims map[string]interface{} + claimMappings map[string]string + expected map[string][]string + errExpected bool + }{ + "empty": {nil, nil, emptyMap, false}, + "all - singular": { + map[string]interface{}{ + "data1": "foo", + "data2": "bar", + }, + map[string]string{ + "data1": "val1", + "data2": "val2", + }, + map[string][]string{ + "val1": []string{"foo"}, + "val2": []string{"bar"}, + }, + false, + }, + "some - singular": { + map[string]interface{}{ + "data1": "foo", + "data2": "bar", + }, + map[string]string{ + "data1": "val1", + "data3": "val2", + }, + map[string][]string{ + "val1": []string{"foo"}, + }, + false, + }, + "none - singular": { + map[string]interface{}{ + "data1": "foo", + "data2": "bar", + }, + map[string]string{ + "data8": "val1", + "data9": "val2", + }, + emptyMap, + false, + }, + + "nested data - singular": { + map[string]interface{}{ + "data1": "foo", + "data2": map[string]interface{}{ + "child": "bar", + }, + "data3": true, + "data4": false, + "data5": float64(7.9), + "data6": json.Number("-12345"), + "data7": int(42), + "data8": []interface{}{ // mixed + "foo", true, float64(7.9), json.Number("-12345"), int(42), + }, + }, + map[string]string{ + "data1": "val1", + "/data2/child": "val2", + "data3": "val3", + "data4": "val4", + "data5": "val5", + "data6": "val6", + "data7": "val7", + "data8": "val8", + }, + map[string][]string{ + "val1": []string{"foo"}, + "val2": []string{"bar"}, + "val3": []string{"true"}, + "val4": []string{"false"}, + "val5": []string{"7"}, + "val6": []string{"-12345"}, + "val7": []string{"42"}, + "val8": []string{ + "foo", "true", "7", "-12345", "42", + }, + }, + false, + }, + + "error: a struct isn't stringifiable (singular)": { + map[string]interface{}{ + "data1": map[string]interface{}{ + "child": map[string]interface{}{ + "inner": "bar", + }, + }, + }, + map[string]string{ + "data1": "val1", + }, + nil, + true, + }, + "error: a slice isn't stringifiable (singular)": { + map[string]interface{}{ + "data1": []interface{}{ + "child", []interface{}{"bar"}, + }, + }, + map[string]string{ + "data1": "val1", + }, + nil, + true, + }, + + "non-string-slice data (string)": { + map[string]interface{}{ + "data1": "foo", + }, + map[string]string{ + "data1": "val1", + }, + map[string][]string{ + "val1": []string{"foo"}, // singular values become lists + }, + false, + }, + + "all - list": { + map[string]interface{}{ + "data1": []interface{}{"foo", "otherFoo"}, + "data2": []interface{}{"bar", "otherBar"}, + }, + map[string]string{ + "data1": "val1", + "data2": "val2", + }, + map[string][]string{ + "val1": []string{"foo", "otherFoo"}, + "val2": []string{"bar", "otherBar"}, + }, + false, + }, + "some - list": { + map[string]interface{}{ + "data1": []interface{}{"foo", "otherFoo"}, + "data2": map[string]interface{}{ + "child": []interface{}{"bar", "otherBar"}, + }, + }, + map[string]string{ + "data1": "val1", + "/data2/child": "val2", + }, + map[string][]string{ + "val1": []string{"foo", "otherFoo"}, + "val2": []string{"bar", "otherBar"}, + }, + false, + }, + "none - list": { + map[string]interface{}{ + "data1": []interface{}{"foo"}, + "data2": []interface{}{"bar"}, + }, + map[string]string{ + "data8": "val1", + "data9": "val2", + }, + emptyMap, + false, + }, + "list omits empty strings": { + map[string]interface{}{ + "data1": []interface{}{"foo", "", "otherFoo", ""}, + "data2": "", + }, + map[string]string{ + "data1": "val1", + "data2": "val2", + }, + map[string][]string{ + "val1": []string{"foo", "otherFoo"}, + "val2": []string{}, + }, + false, + }, + + "nested data - list": { + map[string]interface{}{ + "data1": []interface{}{"foo"}, + "data2": map[string]interface{}{ + "child": []interface{}{"bar"}, + }, + "data3": []interface{}{true}, + "data4": []interface{}{false}, + "data5": []interface{}{float64(7.9)}, + "data6": []interface{}{json.Number("-12345")}, + "data7": []interface{}{int(42)}, + "data8": []interface{}{ // mixed + "foo", true, float64(7.9), json.Number("-12345"), int(42), + }, + }, + map[string]string{ + "data1": "val1", + "/data2/child": "val2", + "data3": "val3", + "data4": "val4", + "data5": "val5", + "data6": "val6", + "data7": "val7", + "data8": "val8", + }, + map[string][]string{ + "val1": []string{"foo"}, + "val2": []string{"bar"}, + "val3": []string{"true"}, + "val4": []string{"false"}, + "val5": []string{"7"}, + "val6": []string{"-12345"}, + "val7": []string{"42"}, + "val8": []string{ + "foo", "true", "7", "-12345", "42", + }, + }, + false, + }, + + "JSONPointer": { + map[string]interface{}{ + "foo": "a", + "bar": map[string]interface{}{ + "baz": []string{"x", "y", "z"}, + }, + }, + map[string]string{ + "foo": "val1", + "/bar/baz/1": "val2", + }, + map[string][]string{ + "val1": []string{"a"}, + "val2": []string{"y"}, + }, + false, + }, + "JSONPointer not found": { + map[string]interface{}{ + "foo": "a", + "bar": map[string]interface{}{ + "baz": []string{"x", "y", "z"}, + }, + }, + map[string]string{ + "foo": "val1", + "/bar/XXX/1243": "val2", + }, + map[string][]string{ + "val1": []string{"a"}, + }, + false, + }, + } + + for name, test := range tests { + test := test + t.Run(name, func(t *testing.T) { + actual, err := extractListMetadata(nil, test.allClaims, test.claimMappings) + if test.errExpected { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, test.expected, actual) + } + }) + } +} + +func TestGetClaim(t *testing.T) { + data := `{ + "a": 42, + "b": "bar", + "c": { + "d": 95, + "e": [ + "dog", + "cat", + "bird" + ], + "f": { + "g": "zebra" + } + }, + "h": true, + "i": false + }` + var claims map[string]interface{} + require.NoError(t, json.Unmarshal([]byte(data), &claims)) + + tests := []struct { + claim string + value interface{} + }{ + {"a", float64(42)}, + {"/a", float64(42)}, + {"b", "bar"}, + {"/c/d", float64(95)}, + {"/c/e/1", "cat"}, + {"/c/f/g", "zebra"}, + {"nope", nil}, + {"/c/f/h", nil}, + {"", nil}, + {"\\", nil}, + {"h", true}, + {"i", false}, + {"/c/e", []interface{}{"dog", "cat", "bird"}}, + {"/c/f", map[string]interface{}{"g": "zebra"}}, + } + + for _, test := range tests { + t.Run(test.claim, func(t *testing.T) { + v := getClaim(nil, claims, test.claim) + require.Equal(t, test.value, v) + }) + } +} + +func TestNormalizeList(t *testing.T) { + tests := []struct { + raw interface{} + normalized []interface{} + ok bool + }{ + { + raw: []interface{}{"green", 42}, + normalized: []interface{}{"green", 42}, + ok: true, + }, + { + raw: []interface{}{"green"}, + normalized: []interface{}{"green"}, + ok: true, + }, + { + raw: []interface{}{}, + normalized: []interface{}{}, + ok: true, + }, + { + raw: "green", + normalized: []interface{}{"green"}, + ok: true, + }, + { + raw: "", + normalized: []interface{}{""}, + ok: true, + }, + { + raw: 42, + normalized: []interface{}{42}, + ok: true, + }, + { + raw: struct{ A int }{A: 5}, + normalized: nil, + ok: false, + }, + { + raw: nil, + normalized: nil, + ok: false, + }, + } + for _, tc := range tests { + tc := tc + t.Run(fmt.Sprintf("%#v", tc.raw), func(t *testing.T) { + normalized, ok := normalizeList(tc.raw) + assert.Equal(t, tc.normalized, normalized) + assert.Equal(t, tc.ok, ok) + }) + } +} + +func TestStringifyMetadataValue(t *testing.T) { + cases := map[string]struct { + value interface{} + expect string + expectFailure bool + }{ + "empty string": {"", "", false}, + "string": {"foo", "foo", false}, + "true": {true, "true", false}, + "false": {false, "false", false}, + "json number": {json.Number("-12345"), "-12345", false}, + "float64": {float64(7.9), "7", false}, + // + "float32": {float32(7.9), "7", false}, + "int8": {int8(42), "42", false}, + "int16": {int16(42), "42", false}, + "int32": {int32(42), "42", false}, + "int64": {int64(42), "42", false}, + "int": {int(42), "42", false}, + "uint8": {uint8(42), "42", false}, + "uint16": {uint16(42), "42", false}, + "uint32": {uint32(42), "42", false}, + "uint64": {uint64(42), "42", false}, + "uint": {uint(42), "42", false}, + // fail + "string slice": {[]string{"a"}, "", true}, + "int slice": {[]int64{99}, "", true}, + "map": {map[string]int{"a": 99}, "", true}, + "nil": {nil, "", true}, + "struct": {struct{ A int }{A: 5}, "", true}, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + got, ok := stringifyMetadataValue(tc.value) + if tc.expectFailure { + require.False(t, ok) + } else { + require.True(t, ok) + require.Equal(t, tc.expect, got) + } + }) + } +} + +func TestValidateAudience(t *testing.T) { + tests := []struct { + boundAudiences []string + audience []string + errExpectedLax bool + errExpectedStrict bool + }{ + {[]string{"a"}, []string{"a"}, false, false}, + {[]string{"a"}, []string{"b"}, true, true}, + {[]string{"a"}, []string{""}, true, true}, + {[]string{}, []string{"a"}, false, true}, + {[]string{"a", "b"}, []string{"a"}, false, false}, + {[]string{"a", "b"}, []string{"b"}, false, false}, + {[]string{"a", "b"}, []string{"a", "b", "c"}, false, false}, + {[]string{"a", "b"}, []string{"c", "d"}, true, true}, + } + + for _, tc := range tests { + tc := tc + + t.Run(fmt.Sprintf( + "boundAudiences=%#v audience=%#v strict=false", + tc.boundAudiences, tc.audience, + ), func(t *testing.T) { + err := validateAudience(tc.boundAudiences, tc.audience, false) + if tc.errExpectedLax { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + + t.Run(fmt.Sprintf( + "boundAudiences=%#v audience=%#v strict=true", + tc.boundAudiences, tc.audience, + ), func(t *testing.T) { + err := validateAudience(tc.boundAudiences, tc.audience, true) + if tc.errExpectedStrict { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidc_test.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidc_test.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/oidc_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/oidc_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,507 @@ +package oidcauth + +import ( + "context" + "errors" + "net/url" + "strings" + "testing" + "time" + + "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" + "github.com/hashicorp/go-hclog" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/square/go-jose.v2/jwt" +) + +func setupForOIDC(t *testing.T) (*Authenticator, *oidcauthtest.Server) { + t.Helper() + + srv := oidcauthtest.Start(t) + srv.SetClientCreds("abc", "def") + + config := &Config{ + Type: TypeOIDC, + OIDCDiscoveryURL: srv.Addr(), + OIDCDiscoveryCACert: srv.CACert(), + OIDCClientID: "abc", + OIDCClientSecret: "def", + JWTSupportedAlgs: []string{"ES256"}, + BoundAudiences: []string{"abc"}, + AllowedRedirectURIs: []string{"https://example.com"}, + ClaimMappings: map[string]string{ + "COLOR": "color", + "/nested/Size": "size", + "Age": "age", + "Admin": "is_admin", + "/nested/division": "division", + "/nested/remote": "is_remote", + "flavor": "flavor", // userinfo + }, + ListClaimMappings: map[string]string{ + "/nested/Groups": "groups", + }, + } + require.NoError(t, config.Validate()) + + oa, err := New(config, hclog.NewNullLogger()) + require.NoError(t, err) + t.Cleanup(oa.Stop) + + return oa, srv +} + +func TestOIDC_AuthURL(t *testing.T) { + t.Run("normal case", func(t *testing.T) { + t.Parallel() + + oa, _ := setupForOIDC(t) + + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + map[string]string{"foo": "bar"}, + ) + require.NoError(t, err) + + require.True(t, strings.HasPrefix(authURL, oa.config.OIDCDiscoveryURL+"/auth?")) + + expected := map[string]string{ + "client_id": "abc", + "redirect_uri": "https://example.com", + "response_type": "code", + "scope": "openid", + } + + au, err := url.Parse(authURL) + require.NoError(t, err) + + for k, v := range expected { + assert.Equal(t, v, au.Query().Get(k), "key %q is incorrect", k) + } + + assert.Regexp(t, `^[a-z0-9]{40}$`, au.Query().Get("nonce")) + assert.Regexp(t, `^[a-z0-9]{40}$`, au.Query().Get("state")) + + }) + + t.Run("invalid RedirectURI", func(t *testing.T) { + t.Parallel() + + oa, _ := setupForOIDC(t) + + _, err := oa.GetAuthCodeURL( + context.Background(), + "http://bitc0in-4-less.cx", + map[string]string{"foo": "bar"}, + ) + requireErrorContains(t, err, "unauthorized redirect_uri: http://bitc0in-4-less.cx") + }) + + t.Run("missing RedirectURI", func(t *testing.T) { + t.Parallel() + + oa, _ := setupForOIDC(t) + + _, err := oa.GetAuthCodeURL( + context.Background(), + "", + map[string]string{"foo": "bar"}, + ) + requireErrorContains(t, err, "missing redirect_uri") + }) +} + +func TestOIDC_JWT_Functions_Fail(t *testing.T) { + oa, srv := setupForOIDC(t) + + cl := jwt.Claims{ + Subject: "r3qXcK2bix9eFECzsU3Sbmh0K16fatW6@clients", + Issuer: srv.Addr(), + NotBefore: jwt.NewNumericDate(time.Now().Add(-5 * time.Second)), + Audience: jwt.Audience{"https://go-sso.test"}, + } + + privateCl := struct { + User string `json:"https://go-sso/user"` + Groups []string `json:"https://go-sso/groups"` + }{ + "jeff", + []string{"foo", "bar"}, + } + + jwtData, err := oidcauthtest.SignJWT("", cl, privateCl) + require.NoError(t, err) + + _, err = oa.ClaimsFromJWT(context.Background(), jwtData) + requireErrorContains(t, err, `ClaimsFromJWT is incompatible with type "oidc"`) +} + +func TestOIDC_ClaimsFromAuthCode(t *testing.T) { + requireProviderError := func(t *testing.T, err error) { + var provErr *ProviderLoginFailedError + if !errors.As(err, &provErr) { + t.Fatalf("error was not a *ProviderLoginFailedError") + } + } + requireTokenVerificationError := func(t *testing.T, err error) { + var tokErr *TokenVerificationFailedError + if !errors.As(err, &tokErr) { + t.Fatalf("error was not a *TokenVerificationFailedError") + } + } + + t.Run("successful login", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + nonce := getQueryParam(t, authURL, "nonce") + + // set provider claims that will be returned by the mock server + srv.SetCustomClaims(sampleClaims(nonce)) + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + claims, payload, err := oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + require.NoError(t, err) + + require.Equal(t, origPayload, payload) + + expectedClaims := &Claims{ + Values: map[string]string{ + "color": "green", + "size": "medium", + "age": "85", + "is_admin": "true", + "division": "3", + "is_remote": "true", + "flavor": "umami", // from userinfo + }, + Lists: map[string][]string{ + "groups": []string{"a", "b"}, + }, + } + + require.Equal(t, expectedClaims, claims) + }) + + t.Run("failed login unusable claims", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + nonce := getQueryParam(t, authURL, "nonce") + + // set provider claims that will be returned by the mock server + customClaims := sampleClaims(nonce) + customClaims["COLOR"] = []interface{}{"yellow"} + srv.SetCustomClaims(customClaims) + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + requireErrorContains(t, err, "error converting claim 'COLOR' to string from unknown type []interface {}") + requireTokenVerificationError(t, err) + }) + + t.Run("successful login - no userinfo", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + srv.DisableUserInfo() + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + nonce := getQueryParam(t, authURL, "nonce") + + // set provider claims that will be returned by the mock server + srv.SetCustomClaims(sampleClaims(nonce)) + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + claims, payload, err := oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + require.NoError(t, err) + + require.Equal(t, origPayload, payload) + + expectedClaims := &Claims{ + Values: map[string]string{ + "color": "green", + "size": "medium", + "age": "85", + "is_admin": "true", + "division": "3", + "is_remote": "true", + // "flavor": "umami", // from userinfo + }, + Lists: map[string][]string{ + "groups": []string{"a", "b"}, + }, + } + + require.Equal(t, expectedClaims, claims) + }) + + t.Run("failed login - bad nonce", func(t *testing.T) { + t.Parallel() + + oa, srv := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + + srv.SetCustomClaims(sampleClaims("bad nonce")) + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + requireErrorContains(t, err, "Invalid ID token nonce") + requireTokenVerificationError(t, err) + }) + + t.Run("missing state", func(t *testing.T) { + oa, _ := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + _, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + "", "abc", + ) + requireErrorContains(t, err, "Expired or missing OAuth state") + requireProviderError(t, err) + }) + + t.Run("unknown state", func(t *testing.T) { + oa, _ := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + _, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + "not_a_state", "abc", + ) + requireErrorContains(t, err, "Expired or missing OAuth state") + requireProviderError(t, err) + }) + + t.Run("valid state, missing code", func(t *testing.T) { + oa, _ := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "", + ) + requireErrorContains(t, err, "OAuth code parameter not provided") + requireProviderError(t, err) + }) + + t.Run("failed code exchange", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "wrong_code", + ) + requireErrorContains(t, err, "cannot fetch token") + requireProviderError(t, err) + }) + + t.Run("no id_token returned", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + nonce := getQueryParam(t, authURL, "nonce") + + // set provider claims that will be returned by the mock server + srv.SetCustomClaims(sampleClaims(nonce)) + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + srv.OmitIDTokens() + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + requireErrorContains(t, err, "No id_token found in response") + requireTokenVerificationError(t, err) + }) + + t.Run("no response from provider", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + + // close the server prematurely + srv.Stop() + srv.SetExpectedAuthCode("abc") + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + requireErrorContains(t, err, "connection refused") + requireProviderError(t, err) + }) + + t.Run("invalid bound audience", func(t *testing.T) { + oa, srv := setupForOIDC(t) + + srv.SetClientCreds("not_gonna_match", "def") + + origPayload := map[string]string{"foo": "bar"} + authURL, err := oa.GetAuthCodeURL( + context.Background(), + "https://example.com", + origPayload, + ) + require.NoError(t, err) + + state := getQueryParam(t, authURL, "state") + nonce := getQueryParam(t, authURL, "nonce") + + // set provider claims that will be returned by the mock server + srv.SetCustomClaims(sampleClaims(nonce)) + + // set mock provider's expected code + srv.SetExpectedAuthCode("abc") + + _, _, err = oa.ClaimsFromAuthCode( + context.Background(), + state, "abc", + ) + requireErrorContains(t, err, `error validating signature: oidc: expected audience "abc" got ["not_gonna_match"]`) + requireTokenVerificationError(t, err) + }) +} + +func sampleClaims(nonce string) map[string]interface{} { + return map[string]interface{}{ + "nonce": nonce, + "email": "bob@example.com", + "COLOR": "green", + "sk": "42", + "Age": 85, + "Admin": true, + "nested": map[string]interface{}{ + "Size": "medium", + "division": 3, + "remote": true, + "Groups": []string{"a", "b"}, + "secret_code": "bar", + }, + "password": "foo", + } +} + +func getQueryParam(t *testing.T, inputURL, param string) string { + t.Helper() + + m, err := url.ParseQuery(inputURL) + if err != nil { + t.Fatal(err) + } + v, ok := m[param] + if !ok { + t.Fatalf("query param %q not found", param) + } + return v[0] +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/util.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/util.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/util.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/util.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +package oidcauth + +import ( + "net/url" + + "github.com/hashicorp/consul/internal/go-sso/oidcauth/internal/strutil" +) + +// validRedirect checks whether uri is in allowed using special handling for loopback uris. +// Ref: https://tools.ietf.org/html/rfc8252#section-7.3 +func validRedirect(uri string, allowed []string) bool { + inputURI, err := url.Parse(uri) + if err != nil { + return false + } + + // if uri isn't a loopback, just string search the allowed list + if !strutil.StrListContains([]string{"localhost", "127.0.0.1", "::1"}, inputURI.Hostname()) { + return strutil.StrListContains(allowed, uri) + } + + // otherwise, search for a match in a port-agnostic manner, per the OAuth RFC. + inputURI.Host = inputURI.Hostname() + + for _, a := range allowed { + allowedURI, err := url.Parse(a) + if err != nil { + return false // shouldn't happen due to (*Config).Validate checks + } + allowedURI.Host = allowedURI.Hostname() + + if inputURI.String() == allowedURI.String() { + return true + } + } + + return false +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/oidcauth/util_test.go consul-1.8.7+dfsg1/internal/go-sso/oidcauth/util_test.go --- consul-1.7.4+dfsg1/internal/go-sso/oidcauth/util_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/oidcauth/util_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,44 @@ +package oidcauth + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestValidRedirect(t *testing.T) { + tests := []struct { + uri string + allowed []string + expected bool + }{ + // valid + {"https://example.com", []string{"https://example.com"}, true}, + {"https://example.com:5000", []string{"a", "b", "https://example.com:5000"}, true}, + {"https://example.com/a/b/c", []string{"a", "b", "https://example.com/a/b/c"}, true}, + {"https://localhost:9000", []string{"a", "b", "https://localhost:5000"}, true}, + {"https://127.0.0.1:9000", []string{"a", "b", "https://127.0.0.1:5000"}, true}, + {"https://[::1]:9000", []string{"a", "b", "https://[::1]:5000"}, true}, + {"https://[::1]:9000/x/y?r=42", []string{"a", "b", "https://[::1]:5000/x/y?r=42"}, true}, + + // invalid + {"https://example.com", []string{}, false}, + {"http://example.com", []string{"a", "b", "https://example.com"}, false}, + {"https://example.com:9000", []string{"a", "b", "https://example.com:5000"}, false}, + {"https://[::2]:9000", []string{"a", "b", "https://[::2]:5000"}, false}, + {"https://localhost:5000", []string{"a", "b", "https://127.0.0.1:5000"}, false}, + {"https://localhost:5000", []string{"a", "b", "https://127.0.0.1:5000"}, false}, + {"https://localhost:5000", []string{"a", "b", "http://localhost:5000"}, false}, + {"https://[::1]:5000/x/y?r=42", []string{"a", "b", "https://[::1]:5000/x/y?r=43"}, false}, + + // extra invalid + {"%%%%%%%%%%%", []string{}, false}, + } + for _, tc := range tests { + tc := tc + t.Run(fmt.Sprintf("uri=%q allowed=%#v", tc.uri, tc.allowed), func(t *testing.T) { + require.Equal(t, tc.expected, validRedirect(tc.uri, tc.allowed)) + }) + } +} diff -Nru consul-1.7.4+dfsg1/internal/go-sso/README.md consul-1.8.7+dfsg1/internal/go-sso/README.md --- consul-1.7.4+dfsg1/internal/go-sso/README.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/internal/go-sso/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +# go-sso + +This is a Go library that is being incubated in Consul to assist in doing +opinionated OIDC-based single sign on. + +The `go.mod.sample` and `go.sum.sample` files are what the overall real +`go.mod` and `go.sum` files should end up being when extracted from the Consul +codebase. diff -Nru consul-1.7.4+dfsg1/lib/decode/decode.go consul-1.8.7+dfsg1/lib/decode/decode.go --- consul-1.7.4+dfsg1/lib/decode/decode.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/decode/decode.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,187 @@ +/* +Package decode provides tools for customizing the decoding of configuration, +into structures using mapstructure. +*/ +package decode + +import ( + "reflect" + "strings" + + "github.com/mitchellh/reflectwalk" +) + +// HookTranslateKeys is a mapstructure decode hook which translates keys in a +// map to their canonical value. +// +// Any struct field with a field tag of `alias` may be loaded from any of the +// values keyed by any of the aliases. A field may have one or more alias. +// Aliases must be lowercase, as keys are compared case-insensitive. +// +// Example alias tag: +// MyField []string `alias:"old_field_name,otherfieldname"` +// +// This hook should ONLY be used to maintain backwards compatibility with +// deprecated keys. For new structures use mapstructure struct tags to set the +// desired serialization key. +// +// IMPORTANT: This function assumes that mapstructure is being used with the +// default struct field tag of `mapstructure`. If mapstructure.DecoderConfig.TagName +// is set to a different value this function will need to be parameterized with +// that value to correctly find the canonical data key. +func HookTranslateKeys(_, to reflect.Type, data interface{}) (interface{}, error) { + // Return immediately if target is not a struct, as only structs can have + // field tags. If the target is a pointer to a struct, mapstructure will call + // the hook again with the struct. + if to.Kind() != reflect.Struct { + return data, nil + } + + // Avoid doing any work if data is not a map + source, ok := data.(map[string]interface{}) + if !ok { + return data, nil + } + + rules := translationsForType(to) + // Avoid making a copy if there are no translation rules + if len(rules) == 0 { + return data, nil + } + result := make(map[string]interface{}, len(source)) + for k, v := range source { + lowerK := strings.ToLower(k) + canonKey, ok := rules[lowerK] + if !ok { + result[k] = v + continue + } + + // if there is a value for the canonical key then keep it + if canonValue, ok := source[canonKey]; ok { + // Assign the value for the case where canonKey == k + result[canonKey] = canonValue + continue + } + result[canonKey] = v + } + return result, nil +} + +// TODO: could be cached if it is too slow +func translationsForType(to reflect.Type) map[string]string { + translations := map[string]string{} + for i := 0; i < to.NumField(); i++ { + field := to.Field(i) + tag, ok := field.Tag.Lookup("alias") + if !ok { + continue + } + + canonKey := strings.ToLower(canonicalFieldKey(field)) + for _, alias := range strings.Split(tag, ",") { + translations[strings.ToLower(alias)] = canonKey + } + } + return translations +} + +func canonicalFieldKey(field reflect.StructField) string { + tag, ok := field.Tag.Lookup("mapstructure") + if !ok { + return field.Name + } + parts := strings.SplitN(tag, ",", 2) + switch { + case len(parts) < 1: + return field.Name + case parts[0] == "": + return field.Name + } + return parts[0] +} + +// HookWeakDecodeFromSlice looks for []map[string]interface{} and []interface{} +// in the source data. If the target is not a slice or array it attempts to unpack +// 1 item out of the slice. If there are more items the source data is left +// unmodified, allowing mapstructure to handle and report the decode error caused by +// mismatched types. The []interface{} is handled so that all slice types are +// behave the same way, and for the rare case when a raw structure is re-encoded +// to JSON, which will produce the []interface{}. +// +// If this hook is being used on a "second pass" decode to decode an opaque +// configuration into a type, the DecodeConfig should set WeaklyTypedInput=true, +// (or another hook) to convert any scalar values into a slice of one value when +// the target is a slice. This is necessary because this hook would have converted +// the initial slices into single values on the first pass. +// +// Background +// +// HCL allows for repeated blocks which forces it to store structures +// as []map[string]interface{} instead of map[string]interface{}. This is an +// ambiguity which makes the generated structures incompatible with the +// corresponding JSON data. +// +// This hook allows config to be read from the HCL format into a raw structure, +// and later decoded into a strongly typed structure. +func HookWeakDecodeFromSlice(from, to reflect.Type, data interface{}) (interface{}, error) { + if from.Kind() == reflect.Slice && (to.Kind() == reflect.Slice || to.Kind() == reflect.Array) { + return data, nil + } + + switch d := data.(type) { + case []map[string]interface{}: + switch { + case len(d) != 1: + return data, nil + case to == typeOfEmptyInterface: + return unSlice(d[0]) + default: + return d[0], nil + } + + // a slice map be encoded as []interface{} in some cases + case []interface{}: + switch { + case len(d) != 1: + return data, nil + case to == typeOfEmptyInterface: + return unSlice(d[0]) + default: + return d[0], nil + } + } + return data, nil +} + +var typeOfEmptyInterface = reflect.TypeOf((*interface{})(nil)).Elem() + +func unSlice(data interface{}) (interface{}, error) { + err := reflectwalk.Walk(data, &unSliceWalker{}) + return data, err +} + +type unSliceWalker struct{} + +func (u *unSliceWalker) Map(_ reflect.Value) error { + return nil +} + +func (u *unSliceWalker) MapElem(m, k, v reflect.Value) error { + if !v.IsValid() || v.Kind() != reflect.Interface { + return nil + } + + v = v.Elem() // unpack the value from the interface{} + if v.Kind() != reflect.Slice || v.Len() != 1 { + return nil + } + + first := v.Index(0) + // The value should always be assignable, but double check to avoid a panic. + if !first.Type().AssignableTo(m.Type().Elem()) { + return nil + } + m.SetMapIndex(k, first) + return nil +} diff -Nru consul-1.7.4+dfsg1/lib/decode/decode_test.go consul-1.8.7+dfsg1/lib/decode/decode_test.go --- consul-1.7.4+dfsg1/lib/decode/decode_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/decode/decode_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,391 @@ +package decode + +import ( + "reflect" + "testing" + + "github.com/hashicorp/hcl" + "github.com/mitchellh/mapstructure" + "github.com/stretchr/testify/require" +) + +func TestHookTranslateKeys(t *testing.T) { + var testcases = []struct { + name string + data interface{} + expected interface{} + }{ + { + name: "target of type struct, with struct receiver", + data: map[string]interface{}{ + "S": map[string]interface{}{ + "None": "no translation", + "OldOne": "value1", + "oldtwo": "value2", + }, + }, + expected: Config{ + S: TypeStruct{ + One: "value1", + Two: "value2", + None: "no translation", + }, + }, + }, + { + name: "target of type ptr, with struct receiver", + data: map[string]interface{}{ + "PS": map[string]interface{}{ + "None": "no translation", + "OldOne": "value1", + "oldtwo": "value2", + }, + }, + expected: Config{ + PS: &TypeStruct{ + One: "value1", + Two: "value2", + None: "no translation", + }, + }, + }, + { + name: "target of type ptr, with ptr receiver", + data: map[string]interface{}{ + "PTR": map[string]interface{}{ + "None": "no translation", + "old_THREE": "value3", + "oldfour": "value4", + }, + }, + expected: Config{ + PTR: &TypePtrToStruct{ + Three: "value3", + Four: "value4", + None: "no translation", + }, + }, + }, + { + name: "target of type ptr, with struct receiver", + data: map[string]interface{}{ + "PTRS": map[string]interface{}{ + "None": "no translation", + "old_THREE": "value3", + "old_four": "value4", + }, + }, + expected: Config{ + PTRS: TypePtrToStruct{ + Three: "value3", + Four: "value4", + None: "no translation", + }, + }, + }, + { + name: "target of type map", + data: map[string]interface{}{ + "Blob": map[string]interface{}{ + "one": 1, + "two": 2, + }, + }, + expected: Config{ + Blob: map[string]interface{}{ + "one": 1, + "two": 2, + }, + }, + }, + { + name: "value already exists for canonical key", + data: map[string]interface{}{ + "PS": map[string]interface{}{ + "OldOne": "value1", + "One": "original1", + "oldTWO": "value2", + "two": "original2", + }, + }, + expected: Config{ + PS: &TypeStruct{ + One: "original1", + Two: "original2", + }, + }, + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + cfg := Config{} + md := new(mapstructure.Metadata) + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookTranslateKeys, + Metadata: md, + Result: &cfg, + }) + require.NoError(t, err) + + require.NoError(t, decoder.Decode(tc.data)) + require.Equal(t, cfg, tc.expected, "decode metadata: %#v", md) + }) + } +} + +type Config struct { + S TypeStruct + PS *TypeStruct + PTR *TypePtrToStruct + PTRS TypePtrToStruct + Blob map[string]interface{} +} + +type TypeStruct struct { + One string `alias:"oldone"` + Two string `alias:"oldtwo"` + None string +} + +type TypePtrToStruct struct { + Three string `alias:"old_three"` + Four string `alias:"old_four,oldfour"` + None string +} + +func TestHookTranslateKeys_TargetStructHasPointerReceiver(t *testing.T) { + target := &TypePtrToStruct{} + md := new(mapstructure.Metadata) + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookTranslateKeys, + Metadata: md, + Result: target, + }) + require.NoError(t, err) + + data := map[string]interface{}{ + "None": "no translation", + "Old_Three": "value3", + "OldFour": "value4", + } + expected := &TypePtrToStruct{ + None: "no translation", + Three: "value3", + Four: "value4", + } + require.NoError(t, decoder.Decode(data)) + require.Equal(t, expected, target, "decode metadata: %#v", md) +} + +func TestHookTranslateKeys_DoesNotModifySourceData(t *testing.T) { + raw := map[string]interface{}{ + "S": map[string]interface{}{ + "None": "no translation", + "OldOne": "value1", + "oldtwo": "value2", + }, + } + + cfg := Config{} + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookTranslateKeys, + Result: &cfg, + }) + require.NoError(t, err) + require.NoError(t, decoder.Decode(raw)) + + expected := map[string]interface{}{ + "S": map[string]interface{}{ + "None": "no translation", + "OldOne": "value1", + "oldtwo": "value2", + }, + } + require.Equal(t, raw, expected) +} + +type translateExample struct { + FieldDefaultCanonical string `alias:"first"` + FieldWithMapstructureTag string `alias:"second" mapstructure:"field_with_mapstruct_tag"` + FieldWithMapstructureTagOmit string `mapstructure:"field_with_mapstruct_omit,omitempty" alias:"third"` + FieldWithEmptyTag string `mapstructure:"" alias:"forth"` +} + +func TestTranslationsForType(t *testing.T) { + to := reflect.TypeOf(translateExample{}) + actual := translationsForType(to) + expected := map[string]string{ + "first": "fielddefaultcanonical", + "second": "field_with_mapstruct_tag", + "third": "field_with_mapstruct_omit", + "forth": "fieldwithemptytag", + } + require.Equal(t, expected, actual) +} + +type nested struct { + O map[string]interface{} + Slice []Item + Item Item + OSlice []map[string]interface{} + Sub *nested +} + +type Item struct { + Name string +} + +func TestHookWeakDecodeFromSlice_DoesNotModifySliceTargets(t *testing.T) { + source := ` +slice { + name = "first" +} +slice { + name = "second" +} +item { + name = "solo" +} +sub { + oslice { + something = "v1" + } +} +` + target := &nested{} + err := decodeHCLToMapStructure(source, target) + require.NoError(t, err) + + expected := &nested{ + Slice: []Item{{Name: "first"}, {Name: "second"}}, + Item: Item{Name: "solo"}, + Sub: &nested{ + OSlice: []map[string]interface{}{ + {"something": "v1"}, + }, + }, + } + require.Equal(t, target, expected) +} + +func decodeHCLToMapStructure(source string, target interface{}) error { + raw := map[string]interface{}{} + err := hcl.Decode(&raw, source) + if err != nil { + return err + } + + md := new(mapstructure.Metadata) + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookWeakDecodeFromSlice, + Metadata: md, + Result: target, + }) + if err != nil { + return err + } + return decoder.Decode(&raw) +} + +func TestHookWeakDecodeFromSlice_DoesNotModifySliceTargetsFromSliceInterface(t *testing.T) { + raw := map[string]interface{}{ + "slice": []interface{}{map[string]interface{}{"name": "first"}}, + "item": []interface{}{map[string]interface{}{"name": "solo"}}, + "sub": []interface{}{ + map[string]interface{}{ + "OSlice": []interface{}{ + map[string]interface{}{"something": "v1"}, + }, + "item": []interface{}{map[string]interface{}{"name": "subitem"}}, + }, + }, + } + target := &nested{} + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookWeakDecodeFromSlice, + Result: target, + }) + require.NoError(t, err) + err = decoder.Decode(&raw) + require.NoError(t, err) + + expected := &nested{ + Slice: []Item{{Name: "first"}}, + Item: Item{Name: "solo"}, + Sub: &nested{ + OSlice: []map[string]interface{}{ + {"something": "v1"}, + }, + Item: Item{Name: "subitem"}, + }, + } + require.Equal(t, target, expected) +} + +func TestHookWeakDecodeFromSlice_ErrorsWithMultipleNestedBlocks(t *testing.T) { + source := ` +item { + name = "first" +} +item { + name = "second" +} +` + target := &nested{} + err := decodeHCLToMapStructure(source, target) + require.Error(t, err) + require.Contains(t, err.Error(), "'Item' expected a map, got 'slice'") +} + +func TestHookWeakDecodeFromSlice_UnpacksNestedBlocks(t *testing.T) { + source := ` +item { + name = "first" +} +` + target := &nested{} + err := decodeHCLToMapStructure(source, target) + require.NoError(t, err) + + expected := &nested{ + Item: Item{Name: "first"}, + } + require.Equal(t, target, expected) +} + +func TestHookWeakDecodeFromSlice_NestedOpaqueConfig(t *testing.T) { + source := ` +service { + proxy { + config { + envoy_gateway_bind_addresses { + all-interfaces { + address = "0.0.0.0" + port = 8443 + } + } + } + } +}` + + target := map[string]interface{}{} + err := decodeHCLToMapStructure(source, &target) + require.NoError(t, err) + + expected := map[string]interface{}{ + "service": map[string]interface{}{ + "proxy": map[string]interface{}{ + "config": map[string]interface{}{ + "envoy_gateway_bind_addresses": map[string]interface{}{ + "all-interfaces": map[string]interface{}{ + "address": "0.0.0.0", + "port": 8443, + }, + }, + }, + }, + }, + } + require.Equal(t, target, expected) +} diff -Nru consul-1.7.4+dfsg1/lib/math.go consul-1.8.7+dfsg1/lib/math.go --- consul-1.7.4+dfsg1/lib/math.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/math.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,3 +20,10 @@ } return a } + +func MaxUint64(a, b uint64) uint64 { + if a > b { + return a + } + return b +} diff -Nru consul-1.7.4+dfsg1/lib/math_test.go consul-1.8.7+dfsg1/lib/math_test.go --- consul-1.7.4+dfsg1/lib/math_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/math_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -36,3 +36,14 @@ } } } + +func TestMathMaxUint64(t *testing.T) { + tests := [][3]uint64{{1, 2, 2}, {0, 1, 1}, {2, 0, 2}} + for _, test := range tests { + expected := test[2] + actual := lib.MaxUint64(test[0], test[1]) + if expected != actual { + t.Fatalf("expected %d, got %d", expected, actual) + } + } +} diff -Nru consul-1.7.4+dfsg1/lib/patch_hcl.go consul-1.8.7+dfsg1/lib/patch_hcl.go --- consul-1.7.4+dfsg1/lib/patch_hcl.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/patch_hcl.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -package lib - -import ( - "fmt" - "strings" -) - -func PatchSliceOfMaps(m map[string]interface{}, skip []string, skipTree []string) map[string]interface{} { - lowerSkip := make([]string, len(skip)) - lowerSkipTree := make([]string, len(skipTree)) - - for i, val := range skip { - lowerSkip[i] = strings.ToLower(val) - } - - for i, val := range skipTree { - lowerSkipTree[i] = strings.ToLower(val) - } - - return patchValue("", m, lowerSkip, lowerSkipTree).(map[string]interface{}) -} - -func patchValue(name string, v interface{}, skip []string, skipTree []string) interface{} { - switch x := v.(type) { - case map[string]interface{}: - if len(x) == 0 { - return x - } - mm := make(map[string]interface{}) - for k, v := range x { - key := k - if name != "" { - key = name + "." + k - } - mm[k] = patchValue(key, v, skip, skipTree) - } - return mm - - case []interface{}: - if len(x) == 0 { - return nil - } - if strSliceContains(name, skipTree) { - return x - } - if strSliceContains(name, skip) { - for i, y := range x { - x[i] = patchValue(name, y, skip, skipTree) - } - return x - } - if _, ok := x[0].(map[string]interface{}); !ok { - return x - } - if len(x) > 1 { - panic(fmt.Sprintf("%s: []map[string]interface{} with more than one element not supported: %s", name, v)) - } - return patchValue(name, x[0], skip, skipTree) - - case []map[string]interface{}: - if len(x) == 0 { - return nil - } - if strSliceContains(name, skipTree) { - return x - } - if strSliceContains(name, skip) { - for i, y := range x { - x[i] = patchValue(name, y, skip, skipTree).(map[string]interface{}) - } - return x - } - if len(x) > 1 { - panic(fmt.Sprintf("%s: []map[string]interface{} with more than one element not supported: %s", name, v)) - } - return patchValue(name, x[0], skip, skipTree) - - default: - return v - } -} - -func strSliceContains(s string, v []string) bool { - lower := strings.ToLower(s) - for _, vv := range v { - if lower == vv { - return true - } - } - return false -} diff -Nru consul-1.7.4+dfsg1/lib/patch_hcl_test.go consul-1.8.7+dfsg1/lib/patch_hcl_test.go --- consul-1.7.4+dfsg1/lib/patch_hcl_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/patch_hcl_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -package lib - -import ( - "encoding/json" - "fmt" - "reflect" - "testing" -) - -func parse(s string) map[string]interface{} { - var m map[string]interface{} - if err := json.Unmarshal([]byte(s), &m); err != nil { - panic(s + ":" + err.Error()) - } - return m -} - -func TestPatchSliceOfMaps(t *testing.T) { - tests := []struct { - in, out string - skip []string - skipTree []string - }{ - { - in: `{"a":{"b":"c"}}`, - out: `{"a":{"b":"c"}}`, - }, - { - in: `{"a":[{"b":"c"}]}`, - out: `{"a":{"b":"c"}}`, - }, - { - in: `{"a":[{"b":[{"c":"d"}]}]}`, - out: `{"a":{"b":{"c":"d"}}}`, - }, - { - in: `{"a":[{"b":"c"}]}`, - out: `{"a":[{"b":"c"}]}`, - skip: []string{"a"}, - }, - { - in: `{ - "Services": [ - { - "checks": [ - { - "header": [ - {"a":"b"} - ] - } - ] - } - ] - }`, - out: `{ - "Services": [ - { - "checks": [ - { - "header": {"a":"b"} - } - ] - } - ] - }`, - skip: []string{"services", "services.checks"}, - }, - { - // inspired by the 'config_entries.bootstrap.*' structure for configs - in: ` - { - "a": [ - { - "b": [ - { - "c": "val1", - "d": { - "foo": "bar" - }, - "e": [ - { - "super": "duper" - } - ] - } - ] - } - ] - } - `, - out: ` - { - "a": { - "b": [ - { - "c": "val1", - "d": { - "foo": "bar" - }, - "e": [ - { - "super": "duper" - } - ] - } - ] - } - } - `, - skipTree: []string{"a.b"}, - }, - } - - for i, tt := range tests { - desc := fmt.Sprintf("%02d: %s -> %s skip: %v", i, tt.in, tt.out, tt.skip) - t.Run(desc, func(t *testing.T) { - out := PatchSliceOfMaps(parse(tt.in), tt.skip, tt.skipTree) - if got, want := out, parse(tt.out); !reflect.DeepEqual(got, want) { - t.Fatalf("\ngot %#v\nwant %#v", got, want) - } - }) - } -} diff -Nru consul-1.7.4+dfsg1/lib/stop_context_test.go consul-1.8.7+dfsg1/lib/stop_context_test.go --- consul-1.7.4+dfsg1/lib/stop_context_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/stop_context_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,36 @@ +package lib + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestStopChannelContext(t *testing.T) { + ch := make(chan struct{}) + + ctx := StopChannelContext{StopCh: ch} + + select { + case <-ctx.Done(): + require.FailNow(t, "StopChannelContext should not be done yet") + default: + // do nothing things are good + } + + close(ch) + + select { + case <-ctx.Done(): + // things are good, as we are done + default: + require.FailNow(t, "StopChannelContext should be done") + } + + // issue it twice to ensure that we indefinitely return the + // same value - this is what the context interface says is + // the correct behavior. + require.Equal(t, context.Canceled, ctx.Err()) + require.Equal(t, context.Canceled, ctx.Err()) +} diff -Nru consul-1.7.4+dfsg1/lib/string.go consul-1.8.7+dfsg1/lib/string.go --- consul-1.7.4+dfsg1/lib/string.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/string.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -package lib - -// StrContains checks if a list contains a string -func StrContains(l []string, s string) bool { - for _, v := range l { - if v == s { - return true - } - } - return false -} diff -Nru consul-1.7.4+dfsg1/lib/stringslice/stringslice.go consul-1.8.7+dfsg1/lib/stringslice/stringslice.go --- consul-1.7.4+dfsg1/lib/stringslice/stringslice.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/stringslice/stringslice.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,70 @@ +package stringslice + +// StrContains => Contains +// StringSliceEqual => Equal +// StringSliceMergeSorted => MergeSorted + +// Contains checks if a list contains a string +func Contains(l []string, s string) bool { + for _, v := range l { + if v == s { + return true + } + } + return false +} + +// Equal compares two string slices for equality. Both the existence +// of the elements and the order of those elements matter for equality. Empty +// slices are treated identically to nil slices. +func Equal(a, b []string) bool { + if len(a) != len(b) { + return false + } + + for i := 0; i < len(a); i++ { + if a[i] != b[i] { + return false + } + } + return true +} + +// MergeSorted takes two string slices that are assumed to be sorted +// and does a zipper merge of the two sorted slices, removing any cross-slice +// duplicates. If any individual slice contained duplicates those will be +// retained. +func MergeSorted(a, b []string) []string { + if len(a) == 0 && len(b) == 0 { + return nil + } else if len(a) == 0 { + return b + } else if len(b) == 0 { + return a + } + + out := make([]string, 0, len(a)+len(b)) + + i, j := 0, 0 + for i < len(a) && j < len(b) { + switch { + case a[i] < b[j]: + out = append(out, a[i]) + i++ + case a[i] > b[j]: + out = append(out, b[j]) + j++ + default: + out = append(out, a[i]) + i++ + j++ + } + } + if i < len(a) { + out = append(out, a[i:]...) + } + if j < len(b) { + out = append(out, b[j:]...) + } + return out +} diff -Nru consul-1.7.4+dfsg1/lib/stringslice/stringslice_test.go consul-1.8.7+dfsg1/lib/stringslice/stringslice_test.go --- consul-1.7.4+dfsg1/lib/stringslice/stringslice_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/stringslice/stringslice_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,62 @@ +package stringslice + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestContains(t *testing.T) { + l := []string{"a", "b", "c"} + if !Contains(l, "b") { + t.Fatalf("should contain") + } + if Contains(l, "d") { + t.Fatalf("should not contain") + } +} + +func TestEqual(t *testing.T) { + for _, tc := range []struct { + a, b []string + equal bool + }{ + {nil, nil, true}, + {nil, []string{}, true}, + {[]string{}, []string{}, true}, + {[]string{"a"}, []string{"a"}, true}, + {[]string{}, []string{"a"}, false}, + {[]string{"a"}, []string{"a", "b"}, false}, + {[]string{"a", "b"}, []string{"a", "b"}, true}, + {[]string{"a", "b"}, []string{"b", "a"}, false}, + } { + name := fmt.Sprintf("%#v =?= %#v", tc.a, tc.b) + t.Run(name, func(t *testing.T) { + require.Equal(t, tc.equal, Equal(tc.a, tc.b)) + require.Equal(t, tc.equal, Equal(tc.b, tc.a)) + }) + } +} + +func TestMergeSorted(t *testing.T) { + for name, tc := range map[string]struct { + a, b []string + expect []string + }{ + "nil": {nil, nil, nil}, + "empty": {[]string{}, []string{}, nil}, + "one and none": {[]string{"foo"}, []string{}, []string{"foo"}}, + "one and one dupe": {[]string{"foo"}, []string{"foo"}, []string{"foo"}}, + "one and one": {[]string{"foo"}, []string{"bar"}, []string{"bar", "foo"}}, + "two and one": {[]string{"baz", "foo"}, []string{"bar"}, []string{"bar", "baz", "foo"}}, + "two and two": {[]string{"baz", "foo"}, []string{"bar", "egg"}, []string{"bar", "baz", "egg", "foo"}}, + "two and two dupe": {[]string{"bar", "foo"}, []string{"bar", "egg"}, []string{"bar", "egg", "foo"}}, + } { + tc := tc + t.Run(name, func(t *testing.T) { + require.Equal(t, tc.expect, MergeSorted(tc.a, tc.b)) + require.Equal(t, tc.expect, MergeSorted(tc.b, tc.a)) + }) + } +} diff -Nru consul-1.7.4+dfsg1/lib/string_test.go consul-1.8.7+dfsg1/lib/string_test.go --- consul-1.7.4+dfsg1/lib/string_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/string_test.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -package lib - -import ( - "testing" -) - -func TestStrContains(t *testing.T) { - l := []string{"a", "b", "c"} - if !StrContains(l, "b") { - t.Fatalf("should contain") - } - if StrContains(l, "d") { - t.Fatalf("should not contain") - } -} diff -Nru consul-1.7.4+dfsg1/lib/telemetry.go consul-1.8.7+dfsg1/lib/telemetry.go --- consul-1.7.4+dfsg1/lib/telemetry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/telemetry.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,10 @@ // the shared InitTelemetry functions below, but we can't import agent/config // due to a dependency cycle. type TelemetryConfig struct { + // Disable may be set to true to have InitTelemetry to skip initialization + // and return a nil MetricsSink. + Disable bool + // Circonus*: see https://github.com/circonus-labs/circonus-gometrics // for more details on the various configuration options. // Valid configuration combinations: @@ -326,6 +330,9 @@ // InitTelemetry configures go-metrics based on map of telemetry config // values as returned by Runtimecfg.Config(). func InitTelemetry(cfg TelemetryConfig) (*metrics.InmemSink, error) { + if cfg.Disable { + return nil, nil + } // Setup telemetry // Aggregate on 10 second intervals for 1 minute. Expose the // metrics over stderr when there is a SIGUSR1 received. diff -Nru consul-1.7.4+dfsg1/lib/template/hil.go consul-1.8.7+dfsg1/lib/template/hil.go --- consul-1.7.4+dfsg1/lib/template/hil.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/template/hil.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,51 @@ +package template + +import ( + "fmt" + "strings" + + "github.com/hashicorp/hil" + "github.com/hashicorp/hil/ast" +) + +// InterpolateHIL processes the string as if it were HIL and interpolates only +// the provided string->string map as possible variables. +func InterpolateHIL(s string, vars map[string]string, lowercase bool) (string, error) { + if strings.Index(s, "${") == -1 { + // Skip going to the trouble of parsing something that has no HIL. + return s, nil + } + + tree, err := hil.Parse(s) + if err != nil { + return "", err + } + + vm := make(map[string]ast.Variable) + for k, v := range vars { + if lowercase { + v = strings.ToLower(v) + } + vm[k] = ast.Variable{ + Type: ast.TypeString, + Value: v, + } + } + + config := &hil.EvalConfig{ + GlobalScope: &ast.BasicScope{ + VarMap: vm, + }, + } + + result, err := hil.Eval(tree, config) + if err != nil { + return "", err + } + + if result.Type != hil.TypeString { + return "", fmt.Errorf("generated unexpected hil type: %s", result.Type) + } + + return result.Value.(string), nil +} diff -Nru consul-1.7.4+dfsg1/lib/template/hil_test.go consul-1.8.7+dfsg1/lib/template/hil_test.go --- consul-1.7.4+dfsg1/lib/template/hil_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/template/hil_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,162 @@ +package template + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestInterpolateHIL(t *testing.T) { + for name, test := range map[string]struct { + in string + vars map[string]string + exp string // when lower=false + expLower string // when lower=true + ok bool + }{ + // valid HIL + "empty": { + "", + map[string]string{}, + "", + "", + true, + }, + "no vars": { + "nothing", + map[string]string{}, + "nothing", + "nothing", + true, + }, + "just lowercase var": { + "${item}", + map[string]string{"item": "value"}, + "value", + "value", + true, + }, + "just uppercase var": { + "${item}", + map[string]string{"item": "VaLuE"}, + "VaLuE", + "value", + true, + }, + "lowercase var in middle": { + "before ${item}after", + map[string]string{"item": "value"}, + "before valueafter", + "before valueafter", + true, + }, + "uppercase var in middle": { + "before ${item}after", + map[string]string{"item": "VaLuE"}, + "before VaLuEafter", + "before valueafter", + true, + }, + "two vars": { + "before ${item}after ${more}", + map[string]string{"item": "value", "more": "xyz"}, + "before valueafter xyz", + "before valueafter xyz", + true, + }, + "missing map val": { + "${item}", + map[string]string{"item": ""}, + "", + "", + true, + }, + // "weird" HIL, but not technically invalid + "just end": { + "}", + map[string]string{}, + "}", + "}", + true, + }, + "var without start": { + " item }", + map[string]string{"item": "value"}, + " item }", + " item }", + true, + }, + "two vars missing second start": { + "before ${ item }after more }", + map[string]string{"item": "value", "more": "xyz"}, + "before valueafter more }", + "before valueafter more }", + true, + }, + // invalid HIL + "just start": { + "${", + map[string]string{}, + "", + "", + false, + }, + "backwards": { + "}${", + map[string]string{}, + "", + "", + false, + }, + "no varname": { + "${}", + map[string]string{}, + "", + "", + false, + }, + "missing map key": { + "${item}", + map[string]string{}, + "", + "", + false, + }, + "var without end": { + "${ item ", + map[string]string{"item": "value"}, + "", + "", + false, + }, + "two vars missing first end": { + "before ${ item after ${ more }", + map[string]string{"item": "value", "more": "xyz"}, + "", + "", + false, + }, + } { + test := test + t.Run(name+" lower=false", func(t *testing.T) { + out, err := InterpolateHIL(test.in, test.vars, false) + if test.ok { + require.NoError(t, err) + require.Equal(t, test.exp, out) + } else { + require.NotNil(t, err) + require.Equal(t, out, "") + } + }) + t.Run(name+" lower=true", func(t *testing.T) { + out, err := InterpolateHIL(test.in, test.vars, true) + if test.ok { + require.NoError(t, err) + require.Equal(t, test.expLower, out) + } else { + require.NotNil(t, err) + require.Equal(t, out, "") + } + }) + } +} diff -Nru consul-1.7.4+dfsg1/lib/testing_httpserver.go consul-1.8.7+dfsg1/lib/testing_httpserver.go --- consul-1.7.4+dfsg1/lib/testing_httpserver.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/testing_httpserver.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,6 +5,7 @@ "github.com/hashicorp/consul/ipaddr" "github.com/hashicorp/consul/sdk/freeport" + "github.com/mitchellh/go-testing-interface" ) // StartTestServer fires up a web server on a random unused port to serve the @@ -16,15 +17,20 @@ // `sdk/freeport` so you can have one part of the test try to use a port and // _know_ nothing is listening. If you simply assumed unbound ports were free // you'd end up with test cross-talk and weirdness. -func StartTestServer(handler http.Handler) (string, func()) { +func StartTestServer(t testing.T, handler http.Handler) string { ports := freeport.MustTake(1) + t.Cleanup(func() { + freeport.Return(ports) + }) + addr := ipaddr.FormatAddressPort("127.0.0.1", ports[0]) server := &http.Server{Addr: addr, Handler: handler} + t.Cleanup(func() { + server.Close() + }) + go server.ListenAndServe() - return addr, func() { - server.Close() - freeport.Return(ports) - } + return addr } diff -Nru consul-1.7.4+dfsg1/lib/translate.go consul-1.8.7+dfsg1/lib/translate.go --- consul-1.7.4+dfsg1/lib/translate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/lib/translate.go 2020-12-10 21:46:52.000000000 +0000 @@ -34,6 +34,8 @@ // // item's config field // "widgets.config": "", // }) +// +// Deprecated: Use lib/decode.HookTranslateKeys instead. func TranslateKeys(v map[string]interface{}, dict map[string]string) { // Convert all dict keys for exclusions to lower. so we can match against them // unambiguously with a single lookup. diff -Nru consul-1.7.4+dfsg1/logging/grpc.go consul-1.8.7+dfsg1/logging/grpc.go --- consul-1.7.4+dfsg1/logging/grpc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/logging/grpc.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,11 +17,11 @@ // logger with Severity/Verbosity level appropriate for the given config. // // Note that grpclog has Info, Warning, Error, Fatal severity levels AND integer -// verbosity levels for additional info. Verbose logs in glog are always INFO +// verbosity levels for additional info. Verbose logs in hclog are always DEBUG // severity so we map Info,V0 to INFO, Info,V1 to DEBUG, and Info,V>1 to TRACE. -func NewGRPCLogger(config *Config, logger hclog.Logger) *GRPCLogger { +func NewGRPCLogger(logLevel string, logger hclog.Logger) *GRPCLogger { return &GRPCLogger{ - level: config.LogLevel, + level: logLevel, logger: logger, } } diff -Nru consul-1.7.4+dfsg1/logging/grpc_test.go consul-1.8.7+dfsg1/logging/grpc_test.go --- consul-1.7.4+dfsg1/logging/grpc_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/logging/grpc_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,7 @@ Output: &out, TimeFormat: "timeformat", }) - grpclog.SetLoggerV2(NewGRPCLogger(&Config{LogLevel: "TRACE"}, logger)) + grpclog.SetLoggerV2(NewGRPCLogger("TRACE", logger)) // All of these should output something grpclog.Info("Info,") @@ -92,7 +92,7 @@ Level: hclog.Trace, Output: &out, }) - grpclog.SetLoggerV2(NewGRPCLogger(&Config{LogLevel: tt.level}, logger)) + grpclog.SetLoggerV2(NewGRPCLogger(tt.level, logger)) assert.Equal(t, tt.want, grpclog.V(tt.v)) }) diff -Nru consul-1.7.4+dfsg1/logging/logger.go consul-1.8.7+dfsg1/logging/logger.go --- consul-1.7.4+dfsg1/logging/logger.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/logging/logger.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,7 +8,6 @@ "github.com/hashicorp/go-hclog" gsyslog "github.com/hashicorp/go-syslog" - "github.com/mitchellh/cli" ) // Config is used to set up logging. @@ -51,59 +50,38 @@ logRotateBytes int ) -// Setup is used to perform setup of several logging objects: -// -// * A hclog.Logger is used to perform filtering by log level and write to io.Writer. -// * A GatedWriter is used to buffer logs until startup UI operations are -// complete. After this is flushed then logs flow directly to output -// destinations. -// * An io.Writer is provided as the sink for all logs to flow to. -// -// The provided ui object will get any log messages related to setting up -// logging itself, and will also be hooked up to the gated logger. The final bool -// parameter indicates if logging was set up successfully. -func Setup(config *Config, ui cli.Ui) (hclog.InterceptLogger, *GatedWriter, io.Writer, bool) { - // The gated writer buffers logs at startup and holds until it's flushed. - logGate := &GatedWriter{ - Writer: &cli.UiWriter{Ui: ui}, - } +type LogSetupErrorFn func(string) +// Setup logging from Config, and return an hclog Logger. +// +// Logs may be written to out, and optionally to syslog, and a file. +func Setup(config Config, out io.Writer) (hclog.InterceptLogger, error) { if !ValidateLogLevel(config.LogLevel) { - ui.Error(fmt.Sprintf( - "Invalid log level: %s. Valid log levels are: %v", - config.LogLevel, allowedLogLevels)) - return nil, nil, nil, false + return nil, fmt.Errorf("Invalid log level: %s. Valid log levels are: %v", + config.LogLevel, + allowedLogLevels) } - // Set up syslog if it's enabled. - var syslog io.Writer + writers := []io.Writer{out} + if config.EnableSyslog { retries := 12 delay := 5 * time.Second for i := 0; i <= retries; i++ { - l, err := gsyslog.NewLogger(gsyslog.LOG_NOTICE, config.SyslogFacility, "consul") + syslog, err := gsyslog.NewLogger(gsyslog.LOG_NOTICE, config.SyslogFacility, "consul") if err == nil { - syslog = &SyslogWrapper{l} + writers = append(writers, syslog) break } - ui.Error(fmt.Sprintf("Syslog setup error: %v", err)) if i == retries { timeout := time.Duration(retries) * delay - ui.Error(fmt.Sprintf("Syslog setup did not succeed within timeout (%s).", timeout.String())) - return nil, nil, nil, false + return nil, fmt.Errorf("Syslog setup did not succeed within timeout (%s).", timeout.String()) } - ui.Error(fmt.Sprintf("Retrying syslog setup in %s...", delay.String())) time.Sleep(delay) } } - writers := []io.Writer{logGate} - - var logOutput io.Writer - if syslog != nil { - writers = append(writers, syslog) - } // Create a file logger if the user has specified the path to the log file if config.LogFilePath != "" { @@ -130,17 +108,17 @@ MaxBytes: logRotateBytes, MaxFiles: config.LogRotateMaxFiles, } + if err := logFile.openNew(); err != nil { + return nil, fmt.Errorf("Failed to setup logging: %w", err) + } writers = append(writers, logFile) } - logOutput = io.MultiWriter(writers...) - logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ Level: LevelFromString(config.LogLevel), Name: config.Name, - Output: logOutput, + Output: io.MultiWriter(writers...), JSONFormat: config.LogJSON, }) - - return logger, logGate, logOutput, true + return logger, nil } diff -Nru consul-1.7.4+dfsg1/logging/logger_test.go consul-1.8.7+dfsg1/logging/logger_test.go --- consul-1.7.4+dfsg1/logging/logger_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/logging/logger_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,37 +1,32 @@ package logging import ( + "bytes" "encoding/json" + "errors" + "os" "testing" - "github.com/mitchellh/cli" + "github.com/hashicorp/consul/sdk/testutil" "github.com/stretchr/testify/require" ) func TestLogger_SetupBasic(t *testing.T) { t.Parallel() require := require.New(t) - cfg := &Config{ - LogLevel: "INFO", - } - ui := cli.NewMockUi() + cfg := Config{LogLevel: "INFO"} - logger, gatedWriter, writer, ok := Setup(cfg, ui) - require.True(ok) - require.NotNil(gatedWriter) - require.NotNil(writer) + logger, err := Setup(cfg, nil) + require.NoError(err) require.NotNil(logger) } func TestLogger_SetupInvalidLogLevel(t *testing.T) { t.Parallel() - require := require.New(t) - cfg := &Config{} - ui := cli.NewMockUi() + cfg := Config{} - _, _, _, ok := Setup(cfg, ui) - require.False(ok) - require.Contains(ui.ErrorWriter.String(), "Invalid log level") + _, err := Setup(cfg, nil) + testutil.RequireErrorContains(t, err, "Invalid log level") } func TestLogger_SetupLoggerErrorLevel(t *testing.T) { @@ -61,20 +56,19 @@ c.before(&cfg) require := require.New(t) - ui := cli.NewMockUi() + var buf bytes.Buffer - logger, gatedWriter, _, ok := Setup(&cfg, ui) - require.True(ok) + logger, err := Setup(cfg, &buf) + require.NoError(err) require.NotNil(logger) - require.NotNil(gatedWriter) - - gatedWriter.Flush() logger.Error("test error msg") logger.Info("test info msg") - require.Contains(ui.OutputWriter.String(), "[ERROR] test error msg") - require.NotContains(ui.OutputWriter.String(), "[INFO] test info msg") + output := buf.String() + + require.Contains(output, "[ERROR] test error msg") + require.NotContains(output, "[INFO] test info msg") }) } } @@ -82,70 +76,116 @@ func TestLogger_SetupLoggerDebugLevel(t *testing.T) { t.Parallel() require := require.New(t) - cfg := &Config{ - LogLevel: "DEBUG", - } - ui := cli.NewMockUi() + cfg := Config{LogLevel: "DEBUG"} + var buf bytes.Buffer - logger, gatedWriter, _, ok := Setup(cfg, ui) - require.True(ok) + logger, err := Setup(cfg, &buf) + require.NoError(err) require.NotNil(logger) - require.NotNil(gatedWriter) - - gatedWriter.Flush() logger.Info("test info msg") logger.Debug("test debug msg") - require.Contains(ui.OutputWriter.String(), "[INFO] test info msg") - require.Contains(ui.OutputWriter.String(), "[DEBUG] test debug msg") + output := buf.String() + + require.Contains(output, "[INFO] test info msg") + require.Contains(output, "[DEBUG] test debug msg") } func TestLogger_SetupLoggerWithName(t *testing.T) { t.Parallel() require := require.New(t) - cfg := &Config{ + cfg := Config{ LogLevel: "DEBUG", Name: "test-system", } - ui := cli.NewMockUi() + var buf bytes.Buffer - logger, gatedWriter, _, ok := Setup(cfg, ui) - require.True(ok) + logger, err := Setup(cfg, &buf) + require.NoError(err) require.NotNil(logger) - require.NotNil(gatedWriter) - - gatedWriter.Flush() logger.Warn("test warn msg") - require.Contains(ui.OutputWriter.String(), "[WARN] test-system: test warn msg") + require.Contains(buf.String(), "[WARN] test-system: test warn msg") } func TestLogger_SetupLoggerWithJSON(t *testing.T) { t.Parallel() require := require.New(t) - cfg := &Config{ + cfg := Config{ LogLevel: "DEBUG", LogJSON: true, Name: "test-system", } - ui := cli.NewMockUi() + var buf bytes.Buffer - logger, gatedWriter, _, ok := Setup(cfg, ui) - require.True(ok) + logger, err := Setup(cfg, &buf) + require.NoError(err) require.NotNil(logger) - require.NotNil(gatedWriter) - - gatedWriter.Flush() logger.Warn("test warn msg") var jsonOutput map[string]string - err := json.Unmarshal(ui.OutputWriter.Bytes(), &jsonOutput) + err = json.Unmarshal(buf.Bytes(), &jsonOutput) require.NoError(err) require.Contains(jsonOutput, "@level") require.Equal(jsonOutput["@level"], "warn") require.Contains(jsonOutput, "@message") require.Equal(jsonOutput["@message"], "test warn msg") } + +func TestLogger_SetupLoggerWithValidLogPath(t *testing.T) { + t.Parallel() + require := require.New(t) + + tmpDir := testutil.TempDir(t, t.Name()) + defer os.RemoveAll(tmpDir) + + cfg := Config{ + LogLevel: "INFO", + LogFilePath: tmpDir + "/", + } + var buf bytes.Buffer + + logger, err := Setup(cfg, &buf) + require.NoError(err) + require.NotNil(logger) +} + +func TestLogger_SetupLoggerWithInValidLogPath(t *testing.T) { + t.Parallel() + require := require.New(t) + + cfg := Config{ + LogLevel: "INFO", + LogFilePath: "nonexistentdir/", + } + var buf bytes.Buffer + + logger, err := Setup(cfg, &buf) + require.Error(err) + require.True(errors.Is(err, os.ErrNotExist)) + require.Nil(logger) +} + +func TestLogger_SetupLoggerWithInValidLogPathPermission(t *testing.T) { + t.Parallel() + require := require.New(t) + + tmpDir := "/tmp/" + t.Name() + + os.Mkdir(tmpDir, 0000) + defer os.RemoveAll(tmpDir) + + cfg := Config{ + LogLevel: "INFO", + LogFilePath: tmpDir + "/", + } + var buf bytes.Buffer + + logger, err := Setup(cfg, &buf) + require.Error(err) + require.True(errors.Is(err, os.ErrPermission)) + require.Nil(logger) +} diff -Nru consul-1.7.4+dfsg1/logging/monitor/monitor.go consul-1.8.7+dfsg1/logging/monitor/monitor.go --- consul-1.7.4+dfsg1/logging/monitor/monitor.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/logging/monitor/monitor.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,7 +14,7 @@ // ever time a log message occurs Start() <-chan []byte - // Stop de-registers the sink from the InterceptLogger and closes the log + // Stop deregisters the sink from the InterceptLogger and closes the log // channels. This returns a count of the number of log messages that were // dropped during streaming. Stop() int diff -Nru consul-1.7.4+dfsg1/logging/names.go consul-1.8.7+dfsg1/logging/names.go --- consul-1.7.4+dfsg1/logging/names.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/logging/names.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,51 +1,57 @@ package logging const ( - ACL string = "acl" - Agent string = "agent" - AntiEntropy string = "anti_entropy" - AutoEncrypt string = "auto_encrypt" - Autopilot string = "autopilot" - AWS string = "aws" - Azure string = "azure" - CA string = "ca" - CentralConfig string = "central_config" - ConfigEntry string = "config_entry" - Connect string = "connect" - Consul string = "consul" - ConsulClient string = "client" - ConsulServer string = "server" - Coordinate string = "coordinate" - DNS string = "dns" - Envoy string = "envoy" - FSM string = "fsm" - HTTP string = "http" - Intentions string = "intentions" - Internal string = "internal" - KV string = "kvs" - LAN string = "lan" - Leader string = "leader" - Legacy string = "legacy" - License string = "license" - Manager string = "manager" - Memberlist string = "memberlist" - MeshGateway string = "mesh_gateway" - Namespace string = "namespace" - NetworkAreas string = "network_areas" - Operator string = "operator" - PreparedQuery string = "prepared_query" - Proxy string = "proxy" - ProxyConfig string = "proxycfg" - Raft string = "raft" - Replication string = "replication" - Router string = "router" - RPC string = "rpc" - Serf string = "serf" - Session string = "session" - Sentinel string = "sentinel" - Snapshot string = "snapshot" - TLSUtil string = "tlsutil" - Transaction string = "txn" - WAN string = "wan" - Watch string = "watch" + ACL string = "acl" + Agent string = "agent" + AntiEntropy string = "anti_entropy" + AutoEncrypt string = "auto_encrypt" + AutoConfig string = "auto_config" + Autopilot string = "autopilot" + AWS string = "aws" + Azure string = "azure" + CA string = "ca" + Catalog string = "catalog" + CentralConfig string = "central_config" + ConfigEntry string = "config_entry" + Connect string = "connect" + Consul string = "consul" + ConsulClient string = "client" + ConsulServer string = "server" + Coordinate string = "coordinate" + DNS string = "dns" + Envoy string = "envoy" + FederationState string = "federation_state" + FSM string = "fsm" + GatewayLocator string = "gateway_locator" + HTTP string = "http" + Intentions string = "intentions" + Internal string = "internal" + KV string = "kvs" + LAN string = "lan" + Leader string = "leader" + Legacy string = "legacy" + License string = "license" + Manager string = "manager" + Memberlist string = "memberlist" + MeshGateway string = "mesh_gateway" + Namespace string = "namespace" + NetworkAreas string = "network_areas" + Operator string = "operator" + PreparedQuery string = "prepared_query" + Proxy string = "proxy" + ProxyConfig string = "proxycfg" + Raft string = "raft" + Replication string = "replication" + Router string = "router" + RPC string = "rpc" + Serf string = "serf" + Session string = "session" + Sentinel string = "sentinel" + Snapshot string = "snapshot" + TerminatingGateway string = "terminating_gateway" + TLSUtil string = "tlsutil" + Transaction string = "txn" + WAN string = "wan" + Watch string = "watch" + Vault string = "vault" ) diff -Nru consul-1.7.4+dfsg1/main.go consul-1.8.7+dfsg1/main.go --- consul-1.7.4+dfsg1/main.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/main.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,6 +7,7 @@ "os" "github.com/hashicorp/consul/command" + "github.com/hashicorp/consul/command/version" "github.com/hashicorp/consul/lib" _ "github.com/hashicorp/consul/service_os" "github.com/mitchellh/cli" @@ -23,18 +24,6 @@ func realMain() int { log.SetOutput(ioutil.Discard) - args := os.Args[1:] - for _, arg := range args { - if arg == "--" { - break - } - - if arg == "-v" || arg == "--version" { - args = []string{"version"} - break - } - } - ui := &cli.BasicUi{Writer: os.Stdout, ErrorWriter: os.Stderr} cmds := command.Map(ui) var names []string @@ -43,11 +32,18 @@ } cli := &cli.CLI{ - Args: args, + Args: os.Args[1:], Commands: cmds, Autocomplete: true, Name: "consul", HelpFunc: cli.FilteredHelpFunc(names, cli.BasicHelpFunc("consul")), + HelpWriter: os.Stdout, + ErrorWriter: os.Stderr, + } + + if cli.IsVersion() { + cmd := version.New(ui) + return cmd.Run(nil) } exitCode, err := cli.Run() diff -Nru consul-1.7.4+dfsg1/proto/pbacl/acl.pb.binary.go consul-1.8.7+dfsg1/proto/pbacl/acl.pb.binary.go --- consul-1.7.4+dfsg1/proto/pbacl/acl.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbacl/acl.pb.binary.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +// Code generated by protoc-gen-go-binary. DO NOT EDIT. +// source: proto/pbacl/acl.proto + +package pbacl + +import ( + "github.com/golang/protobuf/proto" +) + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *ACLLink) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *ACLLink) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} diff -Nru consul-1.7.4+dfsg1/proto/pbacl/acl.pb.go consul-1.8.7+dfsg1/proto/pbacl/acl.pb.go --- consul-1.7.4+dfsg1/proto/pbacl/acl.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbacl/acl.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,384 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: proto/pbacl/acl.proto + +package pbacl + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/golang/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type ACLLink struct { + ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty" hash:"ignore"` +} + +func (m *ACLLink) Reset() { *m = ACLLink{} } +func (m *ACLLink) String() string { return proto.CompactTextString(m) } +func (*ACLLink) ProtoMessage() {} +func (*ACLLink) Descriptor() ([]byte, []int) { + return fileDescriptor_ad2d2c73a6a0d8b5, []int{0} +} +func (m *ACLLink) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ACLLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ACLLink.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ACLLink) XXX_Merge(src proto.Message) { + xxx_messageInfo_ACLLink.Merge(m, src) +} +func (m *ACLLink) XXX_Size() int { + return m.Size() +} +func (m *ACLLink) XXX_DiscardUnknown() { + xxx_messageInfo_ACLLink.DiscardUnknown(m) +} + +var xxx_messageInfo_ACLLink proto.InternalMessageInfo + +func init() { + proto.RegisterType((*ACLLink)(nil), "acl.ACLLink") +} + +func init() { proto.RegisterFile("proto/pbacl/acl.proto", fileDescriptor_ad2d2c73a6a0d8b5) } + +var fileDescriptor_ad2d2c73a6a0d8b5 = []byte{ + // 193 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2d, 0x28, 0xca, 0x2f, + 0xc9, 0xd7, 0x2f, 0x48, 0x4a, 0x4c, 0xce, 0xd1, 0x4f, 0x4c, 0xce, 0xd1, 0x03, 0xf3, 0x85, 0x98, + 0x13, 0x93, 0x73, 0xa4, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0x21, 0xf2, 0x20, 0x16, 0x44, 0x4a, 0xc9, + 0x81, 0x8b, 0xdd, 0xd1, 0xd9, 0xc7, 0x27, 0x33, 0x2f, 0x5b, 0x88, 0x8f, 0x8b, 0xc9, 0xd3, 0x45, + 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x88, 0xc9, 0xd3, 0x45, 0x48, 0x95, 0x8b, 0xc5, 0x2f, 0x31, + 0x37, 0x55, 0x82, 0x09, 0x24, 0xe2, 0x24, 0xf8, 0xe9, 0x9e, 0x3c, 0x6f, 0x46, 0x62, 0x71, 0x86, + 0x95, 0x52, 0x66, 0x7a, 0x5e, 0x7e, 0x51, 0xaa, 0x52, 0x10, 0x58, 0xda, 0xc9, 0xf3, 0xc4, 0x43, + 0x39, 0x86, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, + 0x63, 0x39, 0x86, 0x19, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, + 0x4a, 0x3d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x1f, 0x64, 0x42, 0x66, + 0x72, 0x7e, 0x51, 0x81, 0x7e, 0x72, 0x7e, 0x5e, 0x71, 0x69, 0x8e, 0x3e, 0x92, 0x8b, 0x93, 0xd8, + 0xc0, 0x1c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x29, 0x0f, 0xd4, 0xf1, 0xc7, 0x00, 0x00, + 0x00, +} + +func (m *ACLLink) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ACLLink) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ACLLink) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintAcl(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + } + if len(m.ID) > 0 { + i -= len(m.ID) + copy(dAtA[i:], m.ID) + i = encodeVarintAcl(dAtA, i, uint64(len(m.ID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintAcl(dAtA []byte, offset int, v uint64) int { + offset -= sovAcl(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ACLLink) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ID) + if l > 0 { + n += 1 + l + sovAcl(uint64(l)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovAcl(uint64(l)) + } + return n +} + +func sovAcl(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAcl(x uint64) (n int) { + return sovAcl(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ACLLink) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAcl + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ACLLink: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ACLLink: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAcl + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAcl + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAcl + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAcl + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAcl + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAcl + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAcl(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAcl + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthAcl + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAcl(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAcl + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAcl + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAcl + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAcl + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthAcl + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAcl + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipAcl(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthAcl + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthAcl = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAcl = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/proto/pbacl/acl.proto consul-1.8.7+dfsg1/proto/pbacl/acl.proto --- consul-1.7.4+dfsg1/proto/pbacl/acl.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbacl/acl.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +syntax = "proto3"; + +package acl; + +option go_package = "github.com/hashicorp/consul/proto/pbacl"; + + +// Go Modules now includes the version in the filepath for packages within GOPATH/pkg/mode +// Therefore unless we want to hardcode a version here like +// github.com/gogo/protobuf@v1.3.0/gogoproto/gogo.proto then the only other choice is to +// have a more relative import and pass the right import path to protoc. I don't like it +// but its necessary. +import "gogoproto/gogo.proto"; + +option (gogoproto.goproto_unkeyed_all) = false; +option (gogoproto.goproto_unrecognized_all) = false; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_sizecache_all) = false; + +message ACLLink { + string ID = 1; + string Name = 2 + [(gogoproto.moretags) = "hash:\"ignore\""]; +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.go consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.go --- consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +package pbautoconf + +func (req *AutoConfigRequest) RequestDatacenter() string { + return req.Datacenter +} + +func (req *AutoConfigRequest) IsRead() bool { + return false +} + +func (req *AutoConfigRequest) AllowStaleRead() bool { + return false +} + +func (req *AutoConfigRequest) TokenSecret() string { + return req.ConsulToken +} + +func (req *AutoConfigRequest) SetTokenSecret(token string) { + req.ConsulToken = token +} diff -Nru consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.pb.binary.go consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.pb.binary.go --- consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.pb.binary.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +// Code generated by protoc-gen-go-binary. DO NOT EDIT. +// source: proto/pbautoconf/auto_config.proto + +package pbautoconf + +import ( + "github.com/golang/protobuf/proto" +) + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *AutoConfigRequest) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *AutoConfigRequest) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *AutoConfigResponse) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *AutoConfigResponse) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} diff -Nru consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.pb.go consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.pb.go --- consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1013 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: proto/pbautoconf/auto_config.proto + +package pbautoconf + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + pbconfig "github.com/hashicorp/consul/proto/pbconfig" + pbconnect "github.com/hashicorp/consul/proto/pbconnect" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// AutoConfigRequest is the data structure to be sent along with the +// AutoConfig.InitialConfiguration RPC +type AutoConfigRequest struct { + // Datacenter is the local datacenter name. This wont actually be set by clients + // but rather will be set by the servers to allow for forwarding to + // the leader. If it ever happens to be set and differs from the local datacenters + // name then an error should be returned. + Datacenter string `protobuf:"bytes,1,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` + // Node is the node name that the requester would like to assume + // the identity of. + Node string `protobuf:"bytes,2,opt,name=Node,proto3" json:"Node,omitempty"` + // Segment is the network segment that the requester would like to join + Segment string `protobuf:"bytes,4,opt,name=Segment,proto3" json:"Segment,omitempty"` + // JWT is a signed JSON Web Token used to authorize the request + JWT string `protobuf:"bytes,5,opt,name=JWT,proto3" json:"JWT,omitempty"` + // ConsulToken is a Consul ACL token that the agent requesting the + // configuration already has. + ConsulToken string `protobuf:"bytes,6,opt,name=ConsulToken,proto3" json:"ConsulToken,omitempty"` + // CSR is a certificate signing request to be used when generating the + // agents TLS certificate + CSR string `protobuf:"bytes,7,opt,name=CSR,proto3" json:"CSR,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AutoConfigRequest) Reset() { *m = AutoConfigRequest{} } +func (m *AutoConfigRequest) String() string { return proto.CompactTextString(m) } +func (*AutoConfigRequest) ProtoMessage() {} +func (*AutoConfigRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_ccc5af992e5daf69, []int{0} +} +func (m *AutoConfigRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AutoConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AutoConfigRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AutoConfigRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AutoConfigRequest.Merge(m, src) +} +func (m *AutoConfigRequest) XXX_Size() int { + return m.Size() +} +func (m *AutoConfigRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AutoConfigRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AutoConfigRequest proto.InternalMessageInfo + +func (m *AutoConfigRequest) GetDatacenter() string { + if m != nil { + return m.Datacenter + } + return "" +} + +func (m *AutoConfigRequest) GetNode() string { + if m != nil { + return m.Node + } + return "" +} + +func (m *AutoConfigRequest) GetSegment() string { + if m != nil { + return m.Segment + } + return "" +} + +func (m *AutoConfigRequest) GetJWT() string { + if m != nil { + return m.JWT + } + return "" +} + +func (m *AutoConfigRequest) GetConsulToken() string { + if m != nil { + return m.ConsulToken + } + return "" +} + +func (m *AutoConfigRequest) GetCSR() string { + if m != nil { + return m.CSR + } + return "" +} + +// AutoConfigResponse is the data structure sent in response to a AutoConfig.InitialConfiguration request +type AutoConfigResponse struct { + // Config is the partial Consul configuration to inject into the agents own configuration + Config *pbconfig.Config `protobuf:"bytes,1,opt,name=Config,proto3" json:"Config,omitempty"` + // CARoots is the current list of Connect CA Roots + CARoots *pbconnect.CARoots `protobuf:"bytes,2,opt,name=CARoots,proto3" json:"CARoots,omitempty"` + // Certificate is the TLS certificate issued for the agent + Certificate *pbconnect.IssuedCert `protobuf:"bytes,3,opt,name=Certificate,proto3" json:"Certificate,omitempty"` + // ExtraCACertificates holds non-Connect certificates that may be necessary + // to verify TLS connections with the Consul servers + ExtraCACertificates []string `protobuf:"bytes,4,rep,name=ExtraCACertificates,proto3" json:"ExtraCACertificates,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AutoConfigResponse) Reset() { *m = AutoConfigResponse{} } +func (m *AutoConfigResponse) String() string { return proto.CompactTextString(m) } +func (*AutoConfigResponse) ProtoMessage() {} +func (*AutoConfigResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ccc5af992e5daf69, []int{1} +} +func (m *AutoConfigResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AutoConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AutoConfigResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AutoConfigResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AutoConfigResponse.Merge(m, src) +} +func (m *AutoConfigResponse) XXX_Size() int { + return m.Size() +} +func (m *AutoConfigResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AutoConfigResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AutoConfigResponse proto.InternalMessageInfo + +func (m *AutoConfigResponse) GetConfig() *pbconfig.Config { + if m != nil { + return m.Config + } + return nil +} + +func (m *AutoConfigResponse) GetCARoots() *pbconnect.CARoots { + if m != nil { + return m.CARoots + } + return nil +} + +func (m *AutoConfigResponse) GetCertificate() *pbconnect.IssuedCert { + if m != nil { + return m.Certificate + } + return nil +} + +func (m *AutoConfigResponse) GetExtraCACertificates() []string { + if m != nil { + return m.ExtraCACertificates + } + return nil +} + +func init() { + proto.RegisterType((*AutoConfigRequest)(nil), "autoconf.AutoConfigRequest") + proto.RegisterType((*AutoConfigResponse)(nil), "autoconf.AutoConfigResponse") +} + +func init() { + proto.RegisterFile("proto/pbautoconf/auto_config.proto", fileDescriptor_ccc5af992e5daf69) +} + +var fileDescriptor_ccc5af992e5daf69 = []byte{ + // 347 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x4a, 0xc3, 0x30, + 0x18, 0xc7, 0x8d, 0x9b, 0x9b, 0x4b, 0x41, 0x66, 0x76, 0x09, 0x13, 0xcb, 0xd8, 0x41, 0x86, 0x48, + 0x2b, 0x13, 0xaf, 0xc2, 0x8c, 0x1e, 0xf4, 0xe0, 0x21, 0x1b, 0x08, 0x5e, 0xa4, 0xeb, 0xb2, 0xad, + 0xb8, 0x25, 0xb5, 0xf9, 0x02, 0x3e, 0x8a, 0x6f, 0xe0, 0xab, 0x78, 0xd4, 0x37, 0x90, 0xf9, 0x22, + 0xd2, 0xb4, 0x95, 0x20, 0x9e, 0xfa, 0xef, 0xff, 0xf7, 0xfb, 0xe0, 0x6b, 0x13, 0xdc, 0x4f, 0x33, + 0x05, 0x2a, 0x4c, 0xa7, 0x91, 0x01, 0x15, 0x2b, 0x39, 0x0f, 0xf3, 0xf0, 0x98, 0xa7, 0x64, 0x11, + 0x58, 0x48, 0x76, 0x2b, 0xd6, 0x3d, 0xa8, 0xec, 0x82, 0x87, 0xae, 0xd6, 0x3d, 0x74, 0xa0, 0x14, + 0x31, 0x84, 0xe5, 0xb3, 0xc0, 0xfd, 0x37, 0x84, 0xf7, 0x47, 0x06, 0x14, 0xb3, 0x33, 0x5c, 0x3c, + 0x1b, 0xa1, 0x81, 0xf8, 0x18, 0x5f, 0x45, 0x10, 0xc5, 0x42, 0x82, 0xc8, 0x28, 0xea, 0xa1, 0x41, + 0x8b, 0x3b, 0x0d, 0x21, 0xb8, 0x7e, 0xa7, 0x66, 0x82, 0x6e, 0x5b, 0x62, 0x33, 0xa1, 0xb8, 0x39, + 0x16, 0x8b, 0xb5, 0x90, 0x40, 0xeb, 0xb6, 0xae, 0x5e, 0x49, 0x1b, 0xd7, 0x6e, 0xef, 0x27, 0x74, + 0xc7, 0xb6, 0x79, 0x24, 0x3d, 0xec, 0x31, 0x25, 0xb5, 0x59, 0x4d, 0xd4, 0x93, 0x90, 0xb4, 0x61, + 0x89, 0x5b, 0xe5, 0x33, 0x6c, 0xcc, 0x69, 0xb3, 0x98, 0x61, 0x63, 0xde, 0xff, 0x44, 0x98, 0xb8, + 0x9b, 0xea, 0x54, 0x49, 0x2d, 0xc8, 0x11, 0x6e, 0x14, 0x8d, 0x5d, 0xd3, 0x1b, 0xee, 0x05, 0xe5, + 0xe7, 0x97, 0x5e, 0x49, 0xc9, 0x31, 0x6e, 0xb2, 0x11, 0x57, 0x0a, 0xb4, 0xdd, 0xda, 0x1b, 0xb6, + 0x83, 0xea, 0x4f, 0x94, 0x3d, 0xaf, 0x04, 0x72, 0x8e, 0x3d, 0x26, 0x32, 0x48, 0xe6, 0x49, 0x1c, + 0x81, 0xa0, 0x35, 0xeb, 0x77, 0x7e, 0xfd, 0x1b, 0xad, 0x8d, 0x98, 0xe5, 0x06, 0x77, 0x3d, 0x72, + 0x8a, 0x3b, 0xd7, 0x2f, 0x90, 0x45, 0x6c, 0xe4, 0xb4, 0x9a, 0xd6, 0x7b, 0xb5, 0x41, 0x8b, 0xff, + 0x87, 0x2e, 0x2f, 0xde, 0x37, 0x3e, 0xfa, 0xd8, 0xf8, 0xe8, 0x6b, 0xe3, 0xa3, 0xd7, 0x6f, 0x7f, + 0xeb, 0xe1, 0x64, 0x91, 0xc0, 0xd2, 0x4c, 0x83, 0x58, 0xad, 0xc3, 0x65, 0xa4, 0x97, 0x49, 0xac, + 0xb2, 0x34, 0x3f, 0x33, 0x6d, 0x56, 0xe1, 0xdf, 0x5b, 0x31, 0x6d, 0xd8, 0xe6, 0xec, 0x27, 0x00, + 0x00, 0xff, 0xff, 0xe2, 0x1d, 0x6e, 0x48, 0x30, 0x02, 0x00, 0x00, +} + +func (m *AutoConfigRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AutoConfigRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AutoConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.CSR) > 0 { + i -= len(m.CSR) + copy(dAtA[i:], m.CSR) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.CSR))) + i-- + dAtA[i] = 0x3a + } + if len(m.ConsulToken) > 0 { + i -= len(m.ConsulToken) + copy(dAtA[i:], m.ConsulToken) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.ConsulToken))) + i-- + dAtA[i] = 0x32 + } + if len(m.JWT) > 0 { + i -= len(m.JWT) + copy(dAtA[i:], m.JWT) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.JWT))) + i-- + dAtA[i] = 0x2a + } + if len(m.Segment) > 0 { + i -= len(m.Segment) + copy(dAtA[i:], m.Segment) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.Segment))) + i-- + dAtA[i] = 0x22 + } + if len(m.Node) > 0 { + i -= len(m.Node) + copy(dAtA[i:], m.Node) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.Node))) + i-- + dAtA[i] = 0x12 + } + if len(m.Datacenter) > 0 { + i -= len(m.Datacenter) + copy(dAtA[i:], m.Datacenter) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.Datacenter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AutoConfigResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AutoConfigResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AutoConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.ExtraCACertificates) > 0 { + for iNdEx := len(m.ExtraCACertificates) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ExtraCACertificates[iNdEx]) + copy(dAtA[i:], m.ExtraCACertificates[iNdEx]) + i = encodeVarintAutoConfig(dAtA, i, uint64(len(m.ExtraCACertificates[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if m.Certificate != nil { + { + size, err := m.Certificate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAutoConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.CARoots != nil { + { + size, err := m.CARoots.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAutoConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Config != nil { + { + size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAutoConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintAutoConfig(dAtA []byte, offset int, v uint64) int { + offset -= sovAutoConfig(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AutoConfigRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Datacenter) + if l > 0 { + n += 1 + l + sovAutoConfig(uint64(l)) + } + l = len(m.Node) + if l > 0 { + n += 1 + l + sovAutoConfig(uint64(l)) + } + l = len(m.Segment) + if l > 0 { + n += 1 + l + sovAutoConfig(uint64(l)) + } + l = len(m.JWT) + if l > 0 { + n += 1 + l + sovAutoConfig(uint64(l)) + } + l = len(m.ConsulToken) + if l > 0 { + n += 1 + l + sovAutoConfig(uint64(l)) + } + l = len(m.CSR) + if l > 0 { + n += 1 + l + sovAutoConfig(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *AutoConfigResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovAutoConfig(uint64(l)) + } + if m.CARoots != nil { + l = m.CARoots.Size() + n += 1 + l + sovAutoConfig(uint64(l)) + } + if m.Certificate != nil { + l = m.Certificate.Size() + n += 1 + l + sovAutoConfig(uint64(l)) + } + if len(m.ExtraCACertificates) > 0 { + for _, s := range m.ExtraCACertificates { + l = len(s) + n += 1 + l + sovAutoConfig(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovAutoConfig(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAutoConfig(x uint64) (n int) { + return sovAutoConfig(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *AutoConfigRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AutoConfigRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AutoConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Datacenter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Datacenter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Node = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Segment", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Segment = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JWT", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JWT = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsulToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsulToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CSR", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CSR = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAutoConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAutoConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthAutoConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AutoConfigResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AutoConfigResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AutoConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Config == nil { + m.Config = &pbconfig.Config{} + } + if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CARoots", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CARoots == nil { + m.CARoots = &pbconnect.CARoots{} + } + if err := m.CARoots.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Certificate == nil { + m.Certificate = &pbconnect.IssuedCert{} + } + if err := m.Certificate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExtraCACertificates", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAutoConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAutoConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExtraCACertificates = append(m.ExtraCACertificates, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAutoConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAutoConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthAutoConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAutoConfig(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAutoConfig + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthAutoConfig + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAutoConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipAutoConfig(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthAutoConfig + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthAutoConfig = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAutoConfig = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.proto consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.proto --- consul-1.7.4+dfsg1/proto/pbautoconf/auto_config.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbautoconf/auto_config.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,51 @@ +syntax = "proto3"; + +package autoconf; + +option go_package = "github.com/hashicorp/consul/proto/pbautoconf"; + +import "proto/pbconfig/config.proto"; +import "proto/pbconnect/connect.proto"; + +// AutoConfigRequest is the data structure to be sent along with the +// AutoConfig.InitialConfiguration RPC +message AutoConfigRequest { + // Datacenter is the local datacenter name. This wont actually be set by clients + // but rather will be set by the servers to allow for forwarding to + // the leader. If it ever happens to be set and differs from the local datacenters + // name then an error should be returned. + string Datacenter = 1; + + // Node is the node name that the requester would like to assume + // the identity of. + string Node = 2; + + // Segment is the network segment that the requester would like to join + string Segment = 4; + + // JWT is a signed JSON Web Token used to authorize the request + string JWT = 5; + + // ConsulToken is a Consul ACL token that the agent requesting the + // configuration already has. + string ConsulToken = 6; + + // CSR is a certificate signing request to be used when generating the + // agents TLS certificate + string CSR = 7; +} + +// AutoConfigResponse is the data structure sent in response to a AutoConfig.InitialConfiguration request +message AutoConfigResponse { + // Config is the partial Consul configuration to inject into the agents own configuration + config.Config Config = 1; + + // CARoots is the current list of Connect CA Roots + connect.CARoots CARoots = 2; + // Certificate is the TLS certificate issued for the agent + connect.IssuedCert Certificate = 3; + + // ExtraCACertificates holds non-Connect certificates that may be necessary + // to verify TLS connections with the Consul servers + repeated string ExtraCACertificates = 4; +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common.go consul-1.8.7+dfsg1/proto/pbcommon/common.go --- consul-1.7.4+dfsg1/proto/pbcommon/common.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,120 @@ +package pbcommon + +import ( + "time" +) + +// IsRead is always true for QueryOption +func (q *QueryOptions) IsRead() bool { + return true +} + +// AllowStaleRead returns whether a stale read should be allowed +func (q *QueryOptions) AllowStaleRead() bool { + return q.AllowStale +} + +func (q *QueryOptions) TokenSecret() string { + return q.Token +} + +func (q *QueryOptions) SetTokenSecret(s string) { + q.Token = s +} + +// SetToken is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetToken(token string) { + q.Token = token +} + +// SetMinQueryIndex is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetMinQueryIndex(minQueryIndex uint64) { + q.MinQueryIndex = minQueryIndex +} + +// SetMaxQueryTime is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetMaxQueryTime(maxQueryTime time.Duration) { + q.MaxQueryTime = maxQueryTime +} + +// SetAllowStale is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetAllowStale(allowStale bool) { + q.AllowStale = allowStale +} + +// SetRequireConsistent is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetRequireConsistent(requireConsistent bool) { + q.RequireConsistent = requireConsistent +} + +// SetUseCache is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetUseCache(useCache bool) { + q.UseCache = useCache +} + +// SetMaxStaleDuration is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetMaxStaleDuration(maxStaleDuration time.Duration) { + q.MaxStaleDuration = maxStaleDuration +} + +// SetMaxAge is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetMaxAge(maxAge time.Duration) { + q.MaxAge = maxAge +} + +// SetMustRevalidate is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetMustRevalidate(mustRevalidate bool) { + q.MustRevalidate = mustRevalidate +} + +// SetStaleIfError is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetStaleIfError(staleIfError time.Duration) { + q.StaleIfError = staleIfError +} + +// SetFilter is needed to implement the structs.QueryOptionsCompat interface +func (q *QueryOptions) SetFilter(filter string) { + q.Filter = filter +} + +// SetLastContact is needed to implement the structs.QueryMetaCompat interface +func (q *QueryMeta) SetLastContact(lastContact time.Duration) { + q.LastContact = lastContact +} + +// SetKnownLeader is needed to implement the structs.QueryMetaCompat interface +func (q *QueryMeta) SetKnownLeader(knownLeader bool) { + q.KnownLeader = knownLeader +} + +// SetIndex is needed to implement the structs.QueryMetaCompat interface +func (q *QueryMeta) SetIndex(index uint64) { + q.Index = index +} + +// SetConsistencyLevel is needed to implement the structs.QueryMetaCompat interface +func (q *QueryMeta) SetConsistencyLevel(consistencyLevel string) { + q.ConsistencyLevel = consistencyLevel +} + +// WriteRequest only applies to writes, always false +func (w WriteRequest) IsRead() bool { + return false +} + +func (w WriteRequest) TokenSecret() string { + return w.Token +} + +func (w *WriteRequest) SetTokenSecret(s string) { + w.Token = s +} + +// AllowStaleRead returns whether a stale read should be allowed +func (w WriteRequest) AllowStaleRead() bool { + return false +} + +func (td TargetDatacenter) RequestDatacenter() string { + return td.Datacenter +} diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common_oss.pb.binary.go consul-1.8.7+dfsg1/proto/pbcommon/common_oss.pb.binary.go --- consul-1.7.4+dfsg1/proto/pbcommon/common_oss.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common_oss.pb.binary.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +// +build !consulent + +// Code generated by protoc-gen-go-binary. DO NOT EDIT. +// source: proto/pbcommon/common_oss.proto + +package pbcommon + +import ( + "github.com/golang/protobuf/proto" +) + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *EnterpriseMeta) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *EnterpriseMeta) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common_oss.pb.go consul-1.8.7+dfsg1/proto/pbcommon/common_oss.pb.go --- consul-1.7.4+dfsg1/proto/pbcommon/common_oss.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common_oss.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,303 @@ +// +build !consulent + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: proto/pbcommon/common_oss.proto + +package pbcommon + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type EnterpriseMeta struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EnterpriseMeta) Reset() { *m = EnterpriseMeta{} } +func (m *EnterpriseMeta) String() string { return proto.CompactTextString(m) } +func (*EnterpriseMeta) ProtoMessage() {} +func (*EnterpriseMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_8f9d7cd54dd4e173, []int{0} +} +func (m *EnterpriseMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EnterpriseMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EnterpriseMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EnterpriseMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnterpriseMeta.Merge(m, src) +} +func (m *EnterpriseMeta) XXX_Size() int { + return m.Size() +} +func (m *EnterpriseMeta) XXX_DiscardUnknown() { + xxx_messageInfo_EnterpriseMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_EnterpriseMeta proto.InternalMessageInfo + +func init() { + proto.RegisterType((*EnterpriseMeta)(nil), "common.EnterpriseMeta") +} + +func init() { proto.RegisterFile("proto/pbcommon/common_oss.proto", fileDescriptor_8f9d7cd54dd4e173) } + +var fileDescriptor_8f9d7cd54dd4e173 = []byte{ + // 127 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2f, 0x28, 0xca, 0x2f, + 0xc9, 0xd7, 0x2f, 0x48, 0x4a, 0xce, 0xcf, 0xcd, 0xcd, 0xcf, 0xd3, 0x87, 0x50, 0xf1, 0xf9, 0xc5, + 0xc5, 0x7a, 0x60, 0x19, 0x21, 0x36, 0x88, 0x88, 0x92, 0x00, 0x17, 0x9f, 0x6b, 0x5e, 0x49, 0x6a, + 0x51, 0x41, 0x51, 0x66, 0x71, 0xaa, 0x6f, 0x6a, 0x49, 0xa2, 0x93, 0xcd, 0x89, 0x47, 0x72, 0x8c, + 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x56, 0x7a, + 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x46, 0x62, 0x71, 0x46, 0x66, 0x72, + 0x7e, 0x51, 0x81, 0x7e, 0x72, 0x7e, 0x5e, 0x71, 0x69, 0x8e, 0x3e, 0xaa, 0x45, 0x49, 0x6c, 0x60, + 0xbe, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x9b, 0x6f, 0x83, 0x81, 0x00, 0x00, 0x00, +} + +func (m *EnterpriseMeta) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EnterpriseMeta) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EnterpriseMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + return len(dAtA) - i, nil +} + +func encodeVarintCommonOss(dAtA []byte, offset int, v uint64) int { + offset -= sovCommonOss(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *EnterpriseMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovCommonOss(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCommonOss(x uint64) (n int) { + return sovCommonOss(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *EnterpriseMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommonOss + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EnterpriseMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EnterpriseMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommonOss(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthCommonOss + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthCommonOss + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCommonOss(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommonOss + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommonOss + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommonOss + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCommonOss + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthCommonOss + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommonOss + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipCommonOss(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthCommonOss + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthCommonOss = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCommonOss = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common_oss.proto consul-1.8.7+dfsg1/proto/pbcommon/common_oss.proto --- consul-1.7.4+dfsg1/proto/pbcommon/common_oss.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common_oss.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +// +build !consulent + +syntax = "proto3"; + +package common; + +option go_package = "github.com/hashicorp/consul/proto/pbcommon"; + +message EnterpriseMeta { + // no fields in oss +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common.pb.binary.go consul-1.8.7+dfsg1/proto/pbcommon/common.pb.binary.go --- consul-1.7.4+dfsg1/proto/pbcommon/common.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common.pb.binary.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ +// Code generated by protoc-gen-go-binary. DO NOT EDIT. +// source: proto/pbcommon/common.proto + +package pbcommon + +import ( + "github.com/golang/protobuf/proto" +) + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *RaftIndex) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *RaftIndex) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *TargetDatacenter) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *TargetDatacenter) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *WriteRequest) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *WriteRequest) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *QueryOptions) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *QueryOptions) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *QueryMeta) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *QueryMeta) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common.pb.go consul-1.8.7+dfsg1/proto/pbcommon/common.pb.go --- consul-1.7.4+dfsg1/proto/pbcommon/common.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1700 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: proto/pbcommon/common.proto + +package pbcommon + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + _ "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// RaftIndex is used to track the index used while creating +// or modifying a given struct type. +type RaftIndex struct { + CreateIndex uint64 `protobuf:"varint,1,opt,name=CreateIndex,proto3" json:"CreateIndex,omitempty" bexpr:"-"` + ModifyIndex uint64 `protobuf:"varint,2,opt,name=ModifyIndex,proto3" json:"ModifyIndex,omitempty" bexpr:"-"` +} + +func (m *RaftIndex) Reset() { *m = RaftIndex{} } +func (m *RaftIndex) String() string { return proto.CompactTextString(m) } +func (*RaftIndex) ProtoMessage() {} +func (*RaftIndex) Descriptor() ([]byte, []int) { + return fileDescriptor_a6f5ac44994d718c, []int{0} +} +func (m *RaftIndex) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RaftIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RaftIndex.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RaftIndex) XXX_Merge(src proto.Message) { + xxx_messageInfo_RaftIndex.Merge(m, src) +} +func (m *RaftIndex) XXX_Size() int { + return m.Size() +} +func (m *RaftIndex) XXX_DiscardUnknown() { + xxx_messageInfo_RaftIndex.DiscardUnknown(m) +} + +var xxx_messageInfo_RaftIndex proto.InternalMessageInfo + +// TargetDatacenter is intended to be used within other messages used for RPC routing +// amongst the various Consul datacenters +type TargetDatacenter struct { + Datacenter string `protobuf:"bytes,1,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` +} + +func (m *TargetDatacenter) Reset() { *m = TargetDatacenter{} } +func (m *TargetDatacenter) String() string { return proto.CompactTextString(m) } +func (*TargetDatacenter) ProtoMessage() {} +func (*TargetDatacenter) Descriptor() ([]byte, []int) { + return fileDescriptor_a6f5ac44994d718c, []int{1} +} +func (m *TargetDatacenter) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TargetDatacenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TargetDatacenter.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TargetDatacenter) XXX_Merge(src proto.Message) { + xxx_messageInfo_TargetDatacenter.Merge(m, src) +} +func (m *TargetDatacenter) XXX_Size() int { + return m.Size() +} +func (m *TargetDatacenter) XXX_DiscardUnknown() { + xxx_messageInfo_TargetDatacenter.DiscardUnknown(m) +} + +var xxx_messageInfo_TargetDatacenter proto.InternalMessageInfo + +type WriteRequest struct { + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + Token string `protobuf:"bytes,1,opt,name=Token,proto3" json:"Token,omitempty"` +} + +func (m *WriteRequest) Reset() { *m = WriteRequest{} } +func (m *WriteRequest) String() string { return proto.CompactTextString(m) } +func (*WriteRequest) ProtoMessage() {} +func (*WriteRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a6f5ac44994d718c, []int{2} +} +func (m *WriteRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WriteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_WriteRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *WriteRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_WriteRequest.Merge(m, src) +} +func (m *WriteRequest) XXX_Size() int { + return m.Size() +} +func (m *WriteRequest) XXX_DiscardUnknown() { + xxx_messageInfo_WriteRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_WriteRequest proto.InternalMessageInfo + +func (m *WriteRequest) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +// QueryOptions is used to specify various flags for read queries +type QueryOptions struct { + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + Token string `protobuf:"bytes,1,opt,name=Token,proto3" json:"Token,omitempty"` + // If set, wait until query exceeds given index. Must be provided + // with MaxQueryTime. + MinQueryIndex uint64 `protobuf:"varint,2,opt,name=MinQueryIndex,proto3" json:"MinQueryIndex,omitempty"` + // Provided with MinQueryIndex to wait for change. + MaxQueryTime time.Duration `protobuf:"bytes,3,opt,name=MaxQueryTime,proto3,stdduration" json:"MaxQueryTime"` + // If set, any follower can service the request. Results + // may be arbitrarily stale. + AllowStale bool `protobuf:"varint,4,opt,name=AllowStale,proto3" json:"AllowStale,omitempty"` + // If set, the leader must verify leadership prior to + // servicing the request. Prevents a stale read. + RequireConsistent bool `protobuf:"varint,5,opt,name=RequireConsistent,proto3" json:"RequireConsistent,omitempty"` + // If set, the local agent may respond with an arbitrarily stale locally + // cached response. The semantics differ from AllowStale since the agent may + // be entirely partitioned from the servers and still considered "healthy" by + // operators. Stale responses from Servers are also arbitrarily stale, but can + // provide additional bounds on the last contact time from the leader. It's + // expected that servers that are partitioned are noticed and replaced in a + // timely way by operators while the same may not be true for client agents. + UseCache bool `protobuf:"varint,6,opt,name=UseCache,proto3" json:"UseCache,omitempty"` + // If set and AllowStale is true, will try first a stale + // read, and then will perform a consistent read if stale + // read is older than value. + MaxStaleDuration time.Duration `protobuf:"bytes,7,opt,name=MaxStaleDuration,proto3,stdduration" json:"MaxStaleDuration"` + // MaxAge limits how old a cached value will be returned if UseCache is true. + // If there is a cached response that is older than the MaxAge, it is treated + // as a cache miss and a new fetch invoked. If the fetch fails, the error is + // returned. Clients that wish to allow for stale results on error can set + // StaleIfError to a longer duration to change this behavior. It is ignored + // if the endpoint supports background refresh caching. See + // https://www.consul.io/api/index.html#agent-caching for more details. + MaxAge time.Duration `protobuf:"bytes,8,opt,name=MaxAge,proto3,stdduration" json:"MaxAge"` + // MustRevalidate forces the agent to fetch a fresh version of a cached + // resource or at least validate that the cached version is still fresh. It is + // implied by either max-age=0 or must-revalidate Cache-Control headers. It + // only makes sense when UseCache is true. We store it since MaxAge = 0 is the + // default unset value. + MustRevalidate bool `protobuf:"varint,9,opt,name=MustRevalidate,proto3" json:"MustRevalidate,omitempty"` + // StaleIfError specifies how stale the client will accept a cached response + // if the servers are unavailable to fetch a fresh one. Only makes sense when + // UseCache is true and MaxAge is set to a lower, non-zero value. It is + // ignored if the endpoint supports background refresh caching. See + // https://www.consul.io/api/index.html#agent-caching for more details. + StaleIfError time.Duration `protobuf:"bytes,10,opt,name=StaleIfError,proto3,stdduration" json:"StaleIfError"` + // Filter specifies the go-bexpr filter expression to be used for + // filtering the data prior to returning a response + Filter string `protobuf:"bytes,11,opt,name=Filter,proto3" json:"Filter,omitempty"` +} + +func (m *QueryOptions) Reset() { *m = QueryOptions{} } +func (m *QueryOptions) String() string { return proto.CompactTextString(m) } +func (*QueryOptions) ProtoMessage() {} +func (*QueryOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_a6f5ac44994d718c, []int{3} +} +func (m *QueryOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOptions.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOptions.Merge(m, src) +} +func (m *QueryOptions) XXX_Size() int { + return m.Size() +} +func (m *QueryOptions) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOptions proto.InternalMessageInfo + +func (m *QueryOptions) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +func (m *QueryOptions) GetMinQueryIndex() uint64 { + if m != nil { + return m.MinQueryIndex + } + return 0 +} + +func (m *QueryOptions) GetMaxQueryTime() time.Duration { + if m != nil { + return m.MaxQueryTime + } + return 0 +} + +func (m *QueryOptions) GetAllowStale() bool { + if m != nil { + return m.AllowStale + } + return false +} + +func (m *QueryOptions) GetRequireConsistent() bool { + if m != nil { + return m.RequireConsistent + } + return false +} + +func (m *QueryOptions) GetUseCache() bool { + if m != nil { + return m.UseCache + } + return false +} + +func (m *QueryOptions) GetMaxStaleDuration() time.Duration { + if m != nil { + return m.MaxStaleDuration + } + return 0 +} + +func (m *QueryOptions) GetMaxAge() time.Duration { + if m != nil { + return m.MaxAge + } + return 0 +} + +func (m *QueryOptions) GetMustRevalidate() bool { + if m != nil { + return m.MustRevalidate + } + return false +} + +func (m *QueryOptions) GetStaleIfError() time.Duration { + if m != nil { + return m.StaleIfError + } + return 0 +} + +func (m *QueryOptions) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// QueryMeta allows a query response to include potentially +// useful metadata about a query +type QueryMeta struct { + // This is the index associated with the read + Index uint64 `protobuf:"varint,1,opt,name=Index,proto3" json:"Index,omitempty"` + // If AllowStale is used, this is time elapsed since + // last contact between the follower and leader. This + // can be used to gauge staleness. + LastContact time.Duration `protobuf:"bytes,2,opt,name=LastContact,proto3,stdduration" json:"LastContact"` + // Used to indicate if there is a known leader node + KnownLeader bool `protobuf:"varint,3,opt,name=KnownLeader,proto3" json:"KnownLeader,omitempty"` + // Consistencylevel returns the consistency used to serve the query + // Having `discovery_max_stale` on the agent can affect whether + // the request was served by a leader. + ConsistencyLevel string `protobuf:"bytes,4,opt,name=ConsistencyLevel,proto3" json:"ConsistencyLevel,omitempty"` +} + +func (m *QueryMeta) Reset() { *m = QueryMeta{} } +func (m *QueryMeta) String() string { return proto.CompactTextString(m) } +func (*QueryMeta) ProtoMessage() {} +func (*QueryMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_a6f5ac44994d718c, []int{4} +} +func (m *QueryMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMeta.Merge(m, src) +} +func (m *QueryMeta) XXX_Size() int { + return m.Size() +} +func (m *QueryMeta) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryMeta proto.InternalMessageInfo + +func (m *QueryMeta) GetIndex() uint64 { + if m != nil { + return m.Index + } + return 0 +} + +func (m *QueryMeta) GetLastContact() time.Duration { + if m != nil { + return m.LastContact + } + return 0 +} + +func (m *QueryMeta) GetKnownLeader() bool { + if m != nil { + return m.KnownLeader + } + return false +} + +func (m *QueryMeta) GetConsistencyLevel() string { + if m != nil { + return m.ConsistencyLevel + } + return "" +} + +func init() { + proto.RegisterType((*RaftIndex)(nil), "common.RaftIndex") + proto.RegisterType((*TargetDatacenter)(nil), "common.TargetDatacenter") + proto.RegisterType((*WriteRequest)(nil), "common.WriteRequest") + proto.RegisterType((*QueryOptions)(nil), "common.QueryOptions") + proto.RegisterType((*QueryMeta)(nil), "common.QueryMeta") +} + +func init() { proto.RegisterFile("proto/pbcommon/common.proto", fileDescriptor_a6f5ac44994d718c) } + +var fileDescriptor_a6f5ac44994d718c = []byte{ + // 569 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x41, 0x8f, 0xd2, 0x40, + 0x18, 0x6d, 0x95, 0x45, 0xfa, 0xc1, 0x1a, 0x9c, 0x6c, 0x4c, 0xc5, 0xa4, 0x90, 0xc6, 0x18, 0x42, + 0x94, 0x26, 0xeb, 0x6d, 0x3d, 0x2d, 0xec, 0x6a, 0x36, 0xd2, 0x6c, 0xac, 0x18, 0x13, 0x6f, 0x43, + 0xf9, 0x28, 0x8d, 0xa5, 0x83, 0xd3, 0xe9, 0x2e, 0xfc, 0x03, 0x8f, 0x1e, 0x37, 0x9e, 0xfc, 0x21, + 0xfe, 0x00, 0x8e, 0x7b, 0xf4, 0xb4, 0x2a, 0xfc, 0x03, 0x7f, 0x81, 0xe9, 0x14, 0xd6, 0x22, 0x7b, + 0xc0, 0x53, 0xfb, 0x5e, 0xdf, 0x9b, 0x79, 0xf3, 0xcd, 0x4b, 0xe1, 0xe1, 0x98, 0x33, 0xc1, 0xac, + 0x71, 0xcf, 0x65, 0xa3, 0x11, 0x0b, 0xad, 0xf4, 0xd1, 0x94, 0x2c, 0xc9, 0xa7, 0xa8, 0x62, 0x78, + 0x8c, 0x79, 0x01, 0x5a, 0x92, 0xed, 0xc5, 0x03, 0xab, 0x1f, 0x73, 0x2a, 0xfc, 0x95, 0xae, 0xb2, + 0xe7, 0x31, 0x8f, 0xa5, 0x0b, 0x25, 0x6f, 0x29, 0x6b, 0x8e, 0x40, 0x73, 0xe8, 0x40, 0x9c, 0x84, + 0x7d, 0x9c, 0x10, 0x0b, 0x8a, 0x6d, 0x8e, 0x54, 0xa0, 0x84, 0xba, 0x5a, 0x53, 0xeb, 0xb9, 0xd6, + 0xee, 0xef, 0xab, 0xaa, 0xd6, 0xc3, 0xc9, 0x98, 0x1f, 0x98, 0x4f, 0x4d, 0x27, 0xab, 0x48, 0x0c, + 0x36, 0xeb, 0xfb, 0x83, 0x69, 0x6a, 0xb8, 0x75, 0xa3, 0x21, 0xa3, 0x30, 0xf7, 0xa1, 0xdc, 0xa5, + 0xdc, 0x43, 0x71, 0x44, 0x05, 0x75, 0x31, 0x14, 0xc8, 0x89, 0x01, 0xf0, 0x17, 0xc9, 0x4d, 0x35, + 0x27, 0xc3, 0x98, 0x0d, 0x28, 0xbd, 0xe3, 0xbe, 0x40, 0x07, 0x3f, 0xc6, 0x18, 0x09, 0xb2, 0x07, + 0x3b, 0x5d, 0xf6, 0x01, 0xc3, 0xa5, 0x34, 0x05, 0x07, 0xb9, 0x4f, 0x5f, 0xab, 0xaa, 0xf9, 0x25, + 0x07, 0xa5, 0xd7, 0x31, 0xf2, 0xe9, 0xe9, 0x38, 0x39, 0x7a, 0x74, 0xb3, 0x98, 0x3c, 0x82, 0x5d, + 0xdb, 0x0f, 0xa5, 0x30, 0x93, 0xdc, 0x59, 0x27, 0xc9, 0x4b, 0x28, 0xd9, 0x74, 0x22, 0x89, 0xae, + 0x3f, 0x42, 0xfd, 0x76, 0x4d, 0xad, 0x17, 0xf7, 0x1f, 0x34, 0xd3, 0x41, 0x37, 0x57, 0x83, 0x6e, + 0x1e, 0x2d, 0x07, 0xdd, 0x2a, 0xcc, 0xae, 0xaa, 0xca, 0xc5, 0x8f, 0xaa, 0xea, 0xac, 0x19, 0x93, + 0x13, 0x1e, 0x06, 0x01, 0x3b, 0x7f, 0x23, 0x68, 0x80, 0x7a, 0xae, 0xa6, 0xd6, 0x0b, 0x4e, 0x86, + 0x21, 0x4f, 0xe0, 0x5e, 0x72, 0x38, 0x9f, 0x63, 0x9b, 0x85, 0x91, 0x1f, 0x09, 0x0c, 0x85, 0xbe, + 0x23, 0x65, 0x9b, 0x1f, 0x48, 0x05, 0x0a, 0x6f, 0x23, 0x6c, 0x53, 0x77, 0x88, 0x7a, 0x5e, 0x8a, + 0xae, 0x31, 0x39, 0x85, 0xb2, 0x4d, 0x27, 0x72, 0xd5, 0x55, 0x2a, 0xfd, 0xce, 0xf6, 0xb1, 0x37, + 0xcc, 0xe4, 0x39, 0xe4, 0x6d, 0x3a, 0x39, 0xf4, 0x50, 0x2f, 0x6c, 0xbf, 0xcc, 0xd2, 0x42, 0x1e, + 0xc3, 0x5d, 0x3b, 0x8e, 0x84, 0x83, 0x67, 0x34, 0xf0, 0xfb, 0x54, 0xa0, 0xae, 0xc9, 0xbc, 0xff, + 0xb0, 0xc9, 0xa0, 0xe5, 0xae, 0x27, 0x83, 0x63, 0xce, 0x19, 0xd7, 0xe1, 0x3f, 0x06, 0x9d, 0x35, + 0x92, 0xfb, 0x90, 0x7f, 0xe1, 0x07, 0x49, 0x8d, 0x8a, 0xf2, 0xba, 0x97, 0x68, 0x59, 0x8e, 0x6f, + 0x2a, 0x68, 0xf2, 0x52, 0x6c, 0x14, 0x34, 0x69, 0x46, 0xa6, 0xe6, 0x4e, 0x0a, 0xc8, 0x31, 0x14, + 0x3b, 0x34, 0x12, 0x6d, 0x16, 0x0a, 0xea, 0x0a, 0xd9, 0x8b, 0x2d, 0x93, 0x64, 0x7d, 0xa4, 0x06, + 0xc5, 0x57, 0x21, 0x3b, 0x0f, 0x3b, 0x48, 0xfb, 0xc8, 0x65, 0x73, 0x0a, 0x4e, 0x96, 0x22, 0x0d, + 0x28, 0x5f, 0xdf, 0xa9, 0x3b, 0xed, 0xe0, 0x19, 0x06, 0xb2, 0x19, 0x9a, 0xb3, 0xc1, 0xa7, 0xf1, + 0x5b, 0x9d, 0xd9, 0x2f, 0x43, 0x99, 0xcd, 0x0d, 0xf5, 0x72, 0x6e, 0xa8, 0x3f, 0xe7, 0x86, 0xfa, + 0x79, 0x61, 0x28, 0x17, 0x0b, 0x43, 0xb9, 0x5c, 0x18, 0xca, 0xf7, 0x85, 0xa1, 0xbc, 0x6f, 0x78, + 0xbe, 0x18, 0xc6, 0xbd, 0xa6, 0xcb, 0x46, 0xd6, 0x90, 0x46, 0x43, 0xdf, 0x65, 0x7c, 0x6c, 0xb9, + 0x2c, 0x8c, 0xe2, 0xc0, 0x5a, 0xff, 0x87, 0xf4, 0xf2, 0x12, 0x3f, 0xfb, 0x13, 0x00, 0x00, 0xff, + 0xff, 0x33, 0x18, 0xfc, 0x09, 0x5c, 0x04, 0x00, 0x00, +} + +func (m *RaftIndex) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RaftIndex) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RaftIndex) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ModifyIndex != 0 { + i = encodeVarintCommon(dAtA, i, uint64(m.ModifyIndex)) + i-- + dAtA[i] = 0x10 + } + if m.CreateIndex != 0 { + i = encodeVarintCommon(dAtA, i, uint64(m.CreateIndex)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TargetDatacenter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TargetDatacenter) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TargetDatacenter) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Datacenter) > 0 { + i -= len(m.Datacenter) + copy(dAtA[i:], m.Datacenter) + i = encodeVarintCommon(dAtA, i, uint64(len(m.Datacenter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *WriteRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WriteRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WriteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Token) > 0 { + i -= len(m.Token) + copy(dAtA[i:], m.Token) + i = encodeVarintCommon(dAtA, i, uint64(len(m.Token))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Filter) > 0 { + i -= len(m.Filter) + copy(dAtA[i:], m.Filter) + i = encodeVarintCommon(dAtA, i, uint64(len(m.Filter))) + i-- + dAtA[i] = 0x5a + } + n1, err1 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.StaleIfError, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.StaleIfError):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintCommon(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x52 + if m.MustRevalidate { + i-- + if m.MustRevalidate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + } + n2, err2 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxAge, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxAge):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintCommon(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x42 + n3, err3 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxStaleDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxStaleDuration):]) + if err3 != nil { + return 0, err3 + } + i -= n3 + i = encodeVarintCommon(dAtA, i, uint64(n3)) + i-- + dAtA[i] = 0x3a + if m.UseCache { + i-- + if m.UseCache { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if m.RequireConsistent { + i-- + if m.RequireConsistent { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } + if m.AllowStale { + i-- + if m.AllowStale { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + n4, err4 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxQueryTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxQueryTime):]) + if err4 != nil { + return 0, err4 + } + i -= n4 + i = encodeVarintCommon(dAtA, i, uint64(n4)) + i-- + dAtA[i] = 0x1a + if m.MinQueryIndex != 0 { + i = encodeVarintCommon(dAtA, i, uint64(m.MinQueryIndex)) + i-- + dAtA[i] = 0x10 + } + if len(m.Token) > 0 { + i -= len(m.Token) + copy(dAtA[i:], m.Token) + i = encodeVarintCommon(dAtA, i, uint64(len(m.Token))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryMeta) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryMeta) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ConsistencyLevel) > 0 { + i -= len(m.ConsistencyLevel) + copy(dAtA[i:], m.ConsistencyLevel) + i = encodeVarintCommon(dAtA, i, uint64(len(m.ConsistencyLevel))) + i-- + dAtA[i] = 0x22 + } + if m.KnownLeader { + i-- + if m.KnownLeader { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + n5, err5 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.LastContact, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.LastContact):]) + if err5 != nil { + return 0, err5 + } + i -= n5 + i = encodeVarintCommon(dAtA, i, uint64(n5)) + i-- + dAtA[i] = 0x12 + if m.Index != 0 { + i = encodeVarintCommon(dAtA, i, uint64(m.Index)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintCommon(dAtA []byte, offset int, v uint64) int { + offset -= sovCommon(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *RaftIndex) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CreateIndex != 0 { + n += 1 + sovCommon(uint64(m.CreateIndex)) + } + if m.ModifyIndex != 0 { + n += 1 + sovCommon(uint64(m.ModifyIndex)) + } + return n +} + +func (m *TargetDatacenter) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Datacenter) + if l > 0 { + n += 1 + l + sovCommon(uint64(l)) + } + return n +} + +func (m *WriteRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Token) + if l > 0 { + n += 1 + l + sovCommon(uint64(l)) + } + return n +} + +func (m *QueryOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Token) + if l > 0 { + n += 1 + l + sovCommon(uint64(l)) + } + if m.MinQueryIndex != 0 { + n += 1 + sovCommon(uint64(m.MinQueryIndex)) + } + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxQueryTime) + n += 1 + l + sovCommon(uint64(l)) + if m.AllowStale { + n += 2 + } + if m.RequireConsistent { + n += 2 + } + if m.UseCache { + n += 2 + } + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxStaleDuration) + n += 1 + l + sovCommon(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxAge) + n += 1 + l + sovCommon(uint64(l)) + if m.MustRevalidate { + n += 2 + } + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.StaleIfError) + n += 1 + l + sovCommon(uint64(l)) + l = len(m.Filter) + if l > 0 { + n += 1 + l + sovCommon(uint64(l)) + } + return n +} + +func (m *QueryMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Index != 0 { + n += 1 + sovCommon(uint64(m.Index)) + } + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.LastContact) + n += 1 + l + sovCommon(uint64(l)) + if m.KnownLeader { + n += 2 + } + l = len(m.ConsistencyLevel) + if l > 0 { + n += 1 + l + sovCommon(uint64(l)) + } + return n +} + +func sovCommon(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCommon(x uint64) (n int) { + return sovCommon(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *RaftIndex) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RaftIndex: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RaftIndex: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreateIndex", wireType) + } + m.CreateIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CreateIndex |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ModifyIndex", wireType) + } + m.ModifyIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ModifyIndex |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCommon(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TargetDatacenter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TargetDatacenter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TargetDatacenter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Datacenter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Datacenter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommon(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WriteRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WriteRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WriteRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Token = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommon(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Token = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinQueryIndex", wireType) + } + m.MinQueryIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinQueryIndex |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxQueryTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxQueryTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowStale", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowStale = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RequireConsistent", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequireConsistent = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UseCache", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UseCache = bool(v != 0) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxStaleDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxStaleDuration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxAge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.MaxAge, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MustRevalidate", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MustRevalidate = bool(v != 0) + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StaleIfError", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.StaleIfError, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommon(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) + } + m.Index = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Index |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastContact", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.LastContact, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field KnownLeader", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.KnownLeader = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsistencyLevel", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommon + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommon + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommon + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsistencyLevel = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommon(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthCommon + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCommon(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommon + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommon + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommon + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCommon + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthCommon + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCommon + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipCommon(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthCommon + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthCommon = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCommon = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/proto/pbcommon/common.proto consul-1.8.7+dfsg1/proto/pbcommon/common.proto --- consul-1.7.4+dfsg1/proto/pbcommon/common.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbcommon/common.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,135 @@ +syntax = "proto3"; + +package common; + +option go_package = "github.com/hashicorp/consul/proto/pbcommon"; + +import "google/protobuf/duration.proto"; +// Go Modules now includes the version in the filepath for packages within GOPATH/pkg/mode +// Therefore unless we want to hardcode a version here like +// github.com/gogo/protobuf@v1.3.0/gogoproto/gogo.proto then the only other choice is to +// have a more relative import and pass the right import path to protoc. I don't like it +// but its necessary. +import "gogoproto/gogo.proto"; + +option (gogoproto.goproto_unkeyed_all) = false; +option (gogoproto.goproto_unrecognized_all) = false; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_sizecache_all) = false; + +// RaftIndex is used to track the index used while creating +// or modifying a given struct type. +message RaftIndex { + uint64 CreateIndex = 1 [(gogoproto.moretags) = "bexpr:\"-\""]; + uint64 ModifyIndex = 2 [(gogoproto.moretags) = "bexpr:\"-\""]; +} + +// TargetDatacenter is intended to be used within other messages used for RPC routing +// amongst the various Consul datacenters +message TargetDatacenter { + string Datacenter = 1; +} + +message WriteRequest { + option (gogoproto.goproto_getters) = true; + + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + string Token = 1; +} + +// QueryOptions is used to specify various flags for read queries +message QueryOptions { + // The autogenerated getters will implement half of the + // structs.QueryOptionsCompat interface + option (gogoproto.goproto_getters) = true; + + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + string Token = 1; + + // If set, wait until query exceeds given index. Must be provided + // with MaxQueryTime. + uint64 MinQueryIndex = 2; + + // Provided with MinQueryIndex to wait for change. + google.protobuf.Duration MaxQueryTime = 3 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + // If set, any follower can service the request. Results + // may be arbitrarily stale. + bool AllowStale = 4; + + // If set, the leader must verify leadership prior to + // servicing the request. Prevents a stale read. + bool RequireConsistent = 5; + + // If set, the local agent may respond with an arbitrarily stale locally + // cached response. The semantics differ from AllowStale since the agent may + // be entirely partitioned from the servers and still considered "healthy" by + // operators. Stale responses from Servers are also arbitrarily stale, but can + // provide additional bounds on the last contact time from the leader. It's + // expected that servers that are partitioned are noticed and replaced in a + // timely way by operators while the same may not be true for client agents. + bool UseCache = 6; + + // If set and AllowStale is true, will try first a stale + // read, and then will perform a consistent read if stale + // read is older than value. + google.protobuf.Duration MaxStaleDuration = 7 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + // MaxAge limits how old a cached value will be returned if UseCache is true. + // If there is a cached response that is older than the MaxAge, it is treated + // as a cache miss and a new fetch invoked. If the fetch fails, the error is + // returned. Clients that wish to allow for stale results on error can set + // StaleIfError to a longer duration to change this behavior. It is ignored + // if the endpoint supports background refresh caching. See + // https://www.consul.io/api/index.html#agent-caching for more details. + google.protobuf.Duration MaxAge = 8 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + // MustRevalidate forces the agent to fetch a fresh version of a cached + // resource or at least validate that the cached version is still fresh. It is + // implied by either max-age=0 or must-revalidate Cache-Control headers. It + // only makes sense when UseCache is true. We store it since MaxAge = 0 is the + // default unset value. + bool MustRevalidate = 9; + + // StaleIfError specifies how stale the client will accept a cached response + // if the servers are unavailable to fetch a fresh one. Only makes sense when + // UseCache is true and MaxAge is set to a lower, non-zero value. It is + // ignored if the endpoint supports background refresh caching. See + // https://www.consul.io/api/index.html#agent-caching for more details. + google.protobuf.Duration StaleIfError = 10 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + // Filter specifies the go-bexpr filter expression to be used for + // filtering the data prior to returning a response + string Filter = 11; +} + +// QueryMeta allows a query response to include potentially +// useful metadata about a query +message QueryMeta { + // The auto-generated getters will implement half of the + // structs.QueryMetaCompat interface + option (gogoproto.goproto_getters) = true; + + // This is the index associated with the read + uint64 Index = 1; + + // If AllowStale is used, this is time elapsed since + // last contact between the follower and leader. This + // can be used to gauge staleness. + google.protobuf.Duration LastContact = 2 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + + // Used to indicate if there is a known leader node + bool KnownLeader = 3; + + // Consistencylevel returns the consistency used to serve the query + // Having `discovery_max_stale` on the agent can affect whether + // the request was served by a leader. + string ConsistencyLevel = 4; +} diff -Nru consul-1.7.4+dfsg1/proto/pbconfig/config.pb.binary.go consul-1.8.7+dfsg1/proto/pbconfig/config.pb.binary.go --- consul-1.7.4+dfsg1/proto/pbconfig/config.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbconfig/config.pb.binary.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,88 @@ +// Code generated by protoc-gen-go-binary. DO NOT EDIT. +// source: proto/pbconfig/config.proto + +package pbconfig + +import ( + "github.com/golang/protobuf/proto" +) + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *Config) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *Config) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *Gossip) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *Gossip) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *GossipEncryption) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *GossipEncryption) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *TLS) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *TLS) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *ACL) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *ACL) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *ACLTokens) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *ACLTokens) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *ACLServiceProviderToken) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *ACLServiceProviderToken) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *AutoEncrypt) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *AutoEncrypt) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} diff -Nru consul-1.7.4+dfsg1/proto/pbconfig/config.pb.go consul-1.8.7+dfsg1/proto/pbconfig/config.pb.go --- consul-1.7.4+dfsg1/proto/pbconfig/config.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbconfig/config.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3332 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: proto/pbconfig/config.proto + +package pbconfig + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type Config struct { + Datacenter string `protobuf:"bytes,1,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` + PrimaryDatacenter string `protobuf:"bytes,2,opt,name=PrimaryDatacenter,proto3" json:"PrimaryDatacenter,omitempty"` + NodeName string `protobuf:"bytes,3,opt,name=NodeName,proto3" json:"NodeName,omitempty"` + SegmentName string `protobuf:"bytes,4,opt,name=SegmentName,proto3" json:"SegmentName,omitempty"` + ACL *ACL `protobuf:"bytes,5,opt,name=ACL,proto3" json:"ACL,omitempty"` + AutoEncrypt *AutoEncrypt `protobuf:"bytes,6,opt,name=AutoEncrypt,proto3" json:"AutoEncrypt,omitempty"` + Gossip *Gossip `protobuf:"bytes,7,opt,name=Gossip,proto3" json:"Gossip,omitempty"` + TLS *TLS `protobuf:"bytes,8,opt,name=TLS,proto3" json:"TLS,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Config) Reset() { *m = Config{} } +func (m *Config) String() string { return proto.CompactTextString(m) } +func (*Config) ProtoMessage() {} +func (*Config) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{0} +} +func (m *Config) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Config.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Config) XXX_Merge(src proto.Message) { + xxx_messageInfo_Config.Merge(m, src) +} +func (m *Config) XXX_Size() int { + return m.Size() +} +func (m *Config) XXX_DiscardUnknown() { + xxx_messageInfo_Config.DiscardUnknown(m) +} + +var xxx_messageInfo_Config proto.InternalMessageInfo + +func (m *Config) GetDatacenter() string { + if m != nil { + return m.Datacenter + } + return "" +} + +func (m *Config) GetPrimaryDatacenter() string { + if m != nil { + return m.PrimaryDatacenter + } + return "" +} + +func (m *Config) GetNodeName() string { + if m != nil { + return m.NodeName + } + return "" +} + +func (m *Config) GetSegmentName() string { + if m != nil { + return m.SegmentName + } + return "" +} + +func (m *Config) GetACL() *ACL { + if m != nil { + return m.ACL + } + return nil +} + +func (m *Config) GetAutoEncrypt() *AutoEncrypt { + if m != nil { + return m.AutoEncrypt + } + return nil +} + +func (m *Config) GetGossip() *Gossip { + if m != nil { + return m.Gossip + } + return nil +} + +func (m *Config) GetTLS() *TLS { + if m != nil { + return m.TLS + } + return nil +} + +type Gossip struct { + Encryption *GossipEncryption `protobuf:"bytes,1,opt,name=Encryption,proto3" json:"Encryption,omitempty"` + RetryJoinLAN []string `protobuf:"bytes,2,rep,name=RetryJoinLAN,proto3" json:"RetryJoinLAN,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Gossip) Reset() { *m = Gossip{} } +func (m *Gossip) String() string { return proto.CompactTextString(m) } +func (*Gossip) ProtoMessage() {} +func (*Gossip) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{1} +} +func (m *Gossip) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Gossip) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Gossip.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Gossip) XXX_Merge(src proto.Message) { + xxx_messageInfo_Gossip.Merge(m, src) +} +func (m *Gossip) XXX_Size() int { + return m.Size() +} +func (m *Gossip) XXX_DiscardUnknown() { + xxx_messageInfo_Gossip.DiscardUnknown(m) +} + +var xxx_messageInfo_Gossip proto.InternalMessageInfo + +func (m *Gossip) GetEncryption() *GossipEncryption { + if m != nil { + return m.Encryption + } + return nil +} + +func (m *Gossip) GetRetryJoinLAN() []string { + if m != nil { + return m.RetryJoinLAN + } + return nil +} + +type GossipEncryption struct { + Key string `protobuf:"bytes,1,opt,name=Key,proto3" json:"Key,omitempty"` + VerifyIncoming bool `protobuf:"varint,2,opt,name=VerifyIncoming,proto3" json:"VerifyIncoming,omitempty"` + VerifyOutgoing bool `protobuf:"varint,3,opt,name=VerifyOutgoing,proto3" json:"VerifyOutgoing,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GossipEncryption) Reset() { *m = GossipEncryption{} } +func (m *GossipEncryption) String() string { return proto.CompactTextString(m) } +func (*GossipEncryption) ProtoMessage() {} +func (*GossipEncryption) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{2} +} +func (m *GossipEncryption) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GossipEncryption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GossipEncryption.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GossipEncryption) XXX_Merge(src proto.Message) { + xxx_messageInfo_GossipEncryption.Merge(m, src) +} +func (m *GossipEncryption) XXX_Size() int { + return m.Size() +} +func (m *GossipEncryption) XXX_DiscardUnknown() { + xxx_messageInfo_GossipEncryption.DiscardUnknown(m) +} + +var xxx_messageInfo_GossipEncryption proto.InternalMessageInfo + +func (m *GossipEncryption) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *GossipEncryption) GetVerifyIncoming() bool { + if m != nil { + return m.VerifyIncoming + } + return false +} + +func (m *GossipEncryption) GetVerifyOutgoing() bool { + if m != nil { + return m.VerifyOutgoing + } + return false +} + +type TLS struct { + VerifyOutgoing bool `protobuf:"varint,1,opt,name=VerifyOutgoing,proto3" json:"VerifyOutgoing,omitempty"` + VerifyServerHostname bool `protobuf:"varint,2,opt,name=VerifyServerHostname,proto3" json:"VerifyServerHostname,omitempty"` + CipherSuites string `protobuf:"bytes,3,opt,name=CipherSuites,proto3" json:"CipherSuites,omitempty"` + MinVersion string `protobuf:"bytes,4,opt,name=MinVersion,proto3" json:"MinVersion,omitempty"` + PreferServerCipherSuites bool `protobuf:"varint,5,opt,name=PreferServerCipherSuites,proto3" json:"PreferServerCipherSuites,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TLS) Reset() { *m = TLS{} } +func (m *TLS) String() string { return proto.CompactTextString(m) } +func (*TLS) ProtoMessage() {} +func (*TLS) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{3} +} +func (m *TLS) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TLS) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TLS.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TLS) XXX_Merge(src proto.Message) { + xxx_messageInfo_TLS.Merge(m, src) +} +func (m *TLS) XXX_Size() int { + return m.Size() +} +func (m *TLS) XXX_DiscardUnknown() { + xxx_messageInfo_TLS.DiscardUnknown(m) +} + +var xxx_messageInfo_TLS proto.InternalMessageInfo + +func (m *TLS) GetVerifyOutgoing() bool { + if m != nil { + return m.VerifyOutgoing + } + return false +} + +func (m *TLS) GetVerifyServerHostname() bool { + if m != nil { + return m.VerifyServerHostname + } + return false +} + +func (m *TLS) GetCipherSuites() string { + if m != nil { + return m.CipherSuites + } + return "" +} + +func (m *TLS) GetMinVersion() string { + if m != nil { + return m.MinVersion + } + return "" +} + +func (m *TLS) GetPreferServerCipherSuites() bool { + if m != nil { + return m.PreferServerCipherSuites + } + return false +} + +type ACL struct { + Enabled bool `protobuf:"varint,1,opt,name=Enabled,proto3" json:"Enabled,omitempty"` + PolicyTTL string `protobuf:"bytes,2,opt,name=PolicyTTL,proto3" json:"PolicyTTL,omitempty"` + RoleTTL string `protobuf:"bytes,3,opt,name=RoleTTL,proto3" json:"RoleTTL,omitempty"` + TokenTTL string `protobuf:"bytes,4,opt,name=TokenTTL,proto3" json:"TokenTTL,omitempty"` + DownPolicy string `protobuf:"bytes,5,opt,name=DownPolicy,proto3" json:"DownPolicy,omitempty"` + DefaultPolicy string `protobuf:"bytes,6,opt,name=DefaultPolicy,proto3" json:"DefaultPolicy,omitempty"` + EnableKeyListPolicy bool `protobuf:"varint,7,opt,name=EnableKeyListPolicy,proto3" json:"EnableKeyListPolicy,omitempty"` + Tokens *ACLTokens `protobuf:"bytes,8,opt,name=Tokens,proto3" json:"Tokens,omitempty"` + DisabledTTL string `protobuf:"bytes,9,opt,name=DisabledTTL,proto3" json:"DisabledTTL,omitempty"` + EnableTokenPersistence bool `protobuf:"varint,10,opt,name=EnableTokenPersistence,proto3" json:"EnableTokenPersistence,omitempty"` + MSPDisableBootstrap bool `protobuf:"varint,11,opt,name=MSPDisableBootstrap,proto3" json:"MSPDisableBootstrap,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ACL) Reset() { *m = ACL{} } +func (m *ACL) String() string { return proto.CompactTextString(m) } +func (*ACL) ProtoMessage() {} +func (*ACL) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{4} +} +func (m *ACL) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ACL) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ACL.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ACL) XXX_Merge(src proto.Message) { + xxx_messageInfo_ACL.Merge(m, src) +} +func (m *ACL) XXX_Size() int { + return m.Size() +} +func (m *ACL) XXX_DiscardUnknown() { + xxx_messageInfo_ACL.DiscardUnknown(m) +} + +var xxx_messageInfo_ACL proto.InternalMessageInfo + +func (m *ACL) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *ACL) GetPolicyTTL() string { + if m != nil { + return m.PolicyTTL + } + return "" +} + +func (m *ACL) GetRoleTTL() string { + if m != nil { + return m.RoleTTL + } + return "" +} + +func (m *ACL) GetTokenTTL() string { + if m != nil { + return m.TokenTTL + } + return "" +} + +func (m *ACL) GetDownPolicy() string { + if m != nil { + return m.DownPolicy + } + return "" +} + +func (m *ACL) GetDefaultPolicy() string { + if m != nil { + return m.DefaultPolicy + } + return "" +} + +func (m *ACL) GetEnableKeyListPolicy() bool { + if m != nil { + return m.EnableKeyListPolicy + } + return false +} + +func (m *ACL) GetTokens() *ACLTokens { + if m != nil { + return m.Tokens + } + return nil +} + +func (m *ACL) GetDisabledTTL() string { + if m != nil { + return m.DisabledTTL + } + return "" +} + +func (m *ACL) GetEnableTokenPersistence() bool { + if m != nil { + return m.EnableTokenPersistence + } + return false +} + +func (m *ACL) GetMSPDisableBootstrap() bool { + if m != nil { + return m.MSPDisableBootstrap + } + return false +} + +type ACLTokens struct { + Master string `protobuf:"bytes,1,opt,name=Master,proto3" json:"Master,omitempty"` + Replication string `protobuf:"bytes,2,opt,name=Replication,proto3" json:"Replication,omitempty"` + AgentMaster string `protobuf:"bytes,3,opt,name=AgentMaster,proto3" json:"AgentMaster,omitempty"` + Default string `protobuf:"bytes,4,opt,name=Default,proto3" json:"Default,omitempty"` + Agent string `protobuf:"bytes,5,opt,name=Agent,proto3" json:"Agent,omitempty"` + ManagedServiceProvider []*ACLServiceProviderToken `protobuf:"bytes,6,rep,name=ManagedServiceProvider,proto3" json:"ManagedServiceProvider,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ACLTokens) Reset() { *m = ACLTokens{} } +func (m *ACLTokens) String() string { return proto.CompactTextString(m) } +func (*ACLTokens) ProtoMessage() {} +func (*ACLTokens) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{5} +} +func (m *ACLTokens) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ACLTokens) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ACLTokens.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ACLTokens) XXX_Merge(src proto.Message) { + xxx_messageInfo_ACLTokens.Merge(m, src) +} +func (m *ACLTokens) XXX_Size() int { + return m.Size() +} +func (m *ACLTokens) XXX_DiscardUnknown() { + xxx_messageInfo_ACLTokens.DiscardUnknown(m) +} + +var xxx_messageInfo_ACLTokens proto.InternalMessageInfo + +func (m *ACLTokens) GetMaster() string { + if m != nil { + return m.Master + } + return "" +} + +func (m *ACLTokens) GetReplication() string { + if m != nil { + return m.Replication + } + return "" +} + +func (m *ACLTokens) GetAgentMaster() string { + if m != nil { + return m.AgentMaster + } + return "" +} + +func (m *ACLTokens) GetDefault() string { + if m != nil { + return m.Default + } + return "" +} + +func (m *ACLTokens) GetAgent() string { + if m != nil { + return m.Agent + } + return "" +} + +func (m *ACLTokens) GetManagedServiceProvider() []*ACLServiceProviderToken { + if m != nil { + return m.ManagedServiceProvider + } + return nil +} + +type ACLServiceProviderToken struct { + AccessorID string `protobuf:"bytes,1,opt,name=AccessorID,proto3" json:"AccessorID,omitempty"` + SecretID string `protobuf:"bytes,2,opt,name=SecretID,proto3" json:"SecretID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ACLServiceProviderToken) Reset() { *m = ACLServiceProviderToken{} } +func (m *ACLServiceProviderToken) String() string { return proto.CompactTextString(m) } +func (*ACLServiceProviderToken) ProtoMessage() {} +func (*ACLServiceProviderToken) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{6} +} +func (m *ACLServiceProviderToken) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ACLServiceProviderToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ACLServiceProviderToken.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ACLServiceProviderToken) XXX_Merge(src proto.Message) { + xxx_messageInfo_ACLServiceProviderToken.Merge(m, src) +} +func (m *ACLServiceProviderToken) XXX_Size() int { + return m.Size() +} +func (m *ACLServiceProviderToken) XXX_DiscardUnknown() { + xxx_messageInfo_ACLServiceProviderToken.DiscardUnknown(m) +} + +var xxx_messageInfo_ACLServiceProviderToken proto.InternalMessageInfo + +func (m *ACLServiceProviderToken) GetAccessorID() string { + if m != nil { + return m.AccessorID + } + return "" +} + +func (m *ACLServiceProviderToken) GetSecretID() string { + if m != nil { + return m.SecretID + } + return "" +} + +type AutoEncrypt struct { + TLS bool `protobuf:"varint,1,opt,name=TLS,proto3" json:"TLS,omitempty"` + DNSSAN []string `protobuf:"bytes,2,rep,name=DNSSAN,proto3" json:"DNSSAN,omitempty"` + IPSAN []string `protobuf:"bytes,3,rep,name=IPSAN,proto3" json:"IPSAN,omitempty"` + AllowTLS bool `protobuf:"varint,4,opt,name=AllowTLS,proto3" json:"AllowTLS,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AutoEncrypt) Reset() { *m = AutoEncrypt{} } +func (m *AutoEncrypt) String() string { return proto.CompactTextString(m) } +func (*AutoEncrypt) ProtoMessage() {} +func (*AutoEncrypt) Descriptor() ([]byte, []int) { + return fileDescriptor_aefa824db7b74d77, []int{7} +} +func (m *AutoEncrypt) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AutoEncrypt) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AutoEncrypt.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AutoEncrypt) XXX_Merge(src proto.Message) { + xxx_messageInfo_AutoEncrypt.Merge(m, src) +} +func (m *AutoEncrypt) XXX_Size() int { + return m.Size() +} +func (m *AutoEncrypt) XXX_DiscardUnknown() { + xxx_messageInfo_AutoEncrypt.DiscardUnknown(m) +} + +var xxx_messageInfo_AutoEncrypt proto.InternalMessageInfo + +func (m *AutoEncrypt) GetTLS() bool { + if m != nil { + return m.TLS + } + return false +} + +func (m *AutoEncrypt) GetDNSSAN() []string { + if m != nil { + return m.DNSSAN + } + return nil +} + +func (m *AutoEncrypt) GetIPSAN() []string { + if m != nil { + return m.IPSAN + } + return nil +} + +func (m *AutoEncrypt) GetAllowTLS() bool { + if m != nil { + return m.AllowTLS + } + return false +} + +func init() { + proto.RegisterType((*Config)(nil), "config.Config") + proto.RegisterType((*Gossip)(nil), "config.Gossip") + proto.RegisterType((*GossipEncryption)(nil), "config.GossipEncryption") + proto.RegisterType((*TLS)(nil), "config.TLS") + proto.RegisterType((*ACL)(nil), "config.ACL") + proto.RegisterType((*ACLTokens)(nil), "config.ACLTokens") + proto.RegisterType((*ACLServiceProviderToken)(nil), "config.ACLServiceProviderToken") + proto.RegisterType((*AutoEncrypt)(nil), "config.AutoEncrypt") +} + +func init() { proto.RegisterFile("proto/pbconfig/config.proto", fileDescriptor_aefa824db7b74d77) } + +var fileDescriptor_aefa824db7b74d77 = []byte{ + // 787 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x55, 0xdd, 0x6e, 0xe2, 0x46, + 0x14, 0xae, 0xe3, 0xc4, 0x09, 0x43, 0x1b, 0x25, 0x93, 0x88, 0x5a, 0xfd, 0xa1, 0xc8, 0xaa, 0x22, + 0x5a, 0x55, 0xa1, 0xa2, 0x6a, 0x55, 0x55, 0xbd, 0x21, 0x10, 0xb5, 0x34, 0x40, 0x91, 0x4d, 0x53, + 0xa9, 0x77, 0xc6, 0x0c, 0x30, 0xaa, 0x99, 0xb1, 0xc6, 0x43, 0x22, 0xde, 0xa4, 0xd7, 0x7d, 0x83, + 0x7d, 0x8b, 0xbd, 0xdc, 0x47, 0xd8, 0xcd, 0xbe, 0xc0, 0x3e, 0xc2, 0xea, 0xcc, 0x8c, 0x8d, 0x9d, + 0x85, 0x2b, 0x38, 0xdf, 0xf7, 0xcd, 0x99, 0x6f, 0xe6, 0x9c, 0x33, 0x46, 0x9f, 0x27, 0x82, 0x4b, + 0xde, 0x4a, 0xa6, 0x11, 0x67, 0x73, 0xba, 0x68, 0xe9, 0x9f, 0x6b, 0x85, 0x62, 0x47, 0x47, 0xde, + 0x8b, 0x03, 0xe4, 0x74, 0xd5, 0x5f, 0x5c, 0x47, 0xa8, 0x17, 0xca, 0x30, 0x22, 0x4c, 0x12, 0xe1, + 0x5a, 0x0d, 0xab, 0x59, 0xf1, 0x0b, 0x08, 0xfe, 0x0e, 0x9d, 0x8f, 0x05, 0x5d, 0x85, 0x62, 0x53, + 0x90, 0x1d, 0x28, 0xd9, 0x87, 0x04, 0xfe, 0x0c, 0x9d, 0x8c, 0xf8, 0x8c, 0x8c, 0xc2, 0x15, 0x71, + 0x6d, 0x25, 0xca, 0x63, 0xdc, 0x40, 0xd5, 0x80, 0x2c, 0x56, 0x84, 0x49, 0x45, 0x1f, 0x2a, 0xba, + 0x08, 0xe1, 0x2f, 0x91, 0xdd, 0xe9, 0x0e, 0xdc, 0xa3, 0x86, 0xd5, 0xac, 0xb6, 0xab, 0xd7, 0xc6, + 0x7a, 0xa7, 0x3b, 0xf0, 0x01, 0xc7, 0x3f, 0xa2, 0x6a, 0x67, 0x2d, 0xf9, 0x2d, 0x8b, 0xc4, 0x26, + 0x91, 0xae, 0xa3, 0x64, 0x17, 0xb9, 0x6c, 0x4b, 0xf9, 0x45, 0x1d, 0xbe, 0x42, 0xce, 0x6f, 0x3c, + 0x4d, 0x69, 0xe2, 0x1e, 0xab, 0x15, 0xa7, 0xd9, 0x0a, 0x8d, 0xfa, 0x86, 0x85, 0xdd, 0x27, 0x83, + 0xc0, 0x3d, 0x29, 0xef, 0x3e, 0x19, 0x04, 0x3e, 0xe0, 0xde, 0x3c, 0x4b, 0x83, 0x7f, 0x46, 0xc8, + 0xe4, 0xa6, 0x9c, 0xa9, 0x2b, 0xab, 0xb6, 0xdd, 0x72, 0xd2, 0x2d, 0xef, 0x17, 0xb4, 0xd8, 0x43, + 0x1f, 0xfb, 0x44, 0x8a, 0xcd, 0x1f, 0x9c, 0xb2, 0x41, 0x67, 0xe4, 0x1e, 0x34, 0xec, 0x66, 0xc5, + 0x2f, 0x61, 0x9e, 0x44, 0x67, 0xcf, 0x73, 0xe0, 0x33, 0x64, 0xdf, 0x91, 0x8d, 0xa9, 0x0e, 0xfc, + 0xc5, 0x57, 0xe8, 0xf4, 0x9e, 0x08, 0x3a, 0xdf, 0xf4, 0x59, 0xc4, 0x57, 0x94, 0x2d, 0x54, 0x4d, + 0x4e, 0xfc, 0x67, 0xe8, 0x56, 0xf7, 0xe7, 0x5a, 0x2e, 0x38, 0xe8, 0xec, 0xa2, 0x2e, 0x43, 0xbd, + 0x37, 0x96, 0x3a, 0xfd, 0x0e, 0xbd, 0xb5, 0x4b, 0x8f, 0xdb, 0xe8, 0x52, 0x23, 0x01, 0x11, 0x0f, + 0x44, 0xfc, 0xce, 0x53, 0xc9, 0xa0, 0xaa, 0xda, 0xc5, 0x4e, 0x0e, 0x4e, 0xdf, 0xa5, 0xc9, 0x92, + 0x88, 0x60, 0x4d, 0x25, 0x49, 0x4d, 0x83, 0x94, 0x30, 0x68, 0xc7, 0x21, 0x65, 0xf7, 0x44, 0xa4, + 0x70, 0xb7, 0xba, 0x47, 0x0a, 0x08, 0xfe, 0x05, 0xb9, 0x63, 0x41, 0xe6, 0x44, 0xe8, 0xdc, 0xa5, + 0x7c, 0x47, 0x6a, 0xef, 0xbd, 0xbc, 0xf7, 0xbf, 0xad, 0xfa, 0x0b, 0xbb, 0xe8, 0xf8, 0x96, 0x85, + 0xd3, 0x98, 0xcc, 0xcc, 0xe1, 0xb2, 0x10, 0x7f, 0x81, 0x2a, 0x63, 0x1e, 0xd3, 0x68, 0x33, 0x99, + 0x0c, 0x4c, 0x93, 0x6f, 0x01, 0x58, 0xe7, 0xf3, 0x98, 0x00, 0xa7, 0xad, 0x67, 0x21, 0xb4, 0xfd, + 0x84, 0xff, 0x4b, 0x18, 0x50, 0xda, 0x73, 0x1e, 0xab, 0x01, 0xe3, 0x8f, 0x4c, 0xa7, 0x51, 0x1e, + 0x61, 0xc0, 0x72, 0x04, 0x7f, 0x8d, 0x3e, 0xe9, 0x91, 0x79, 0xb8, 0x8e, 0xa5, 0x91, 0x38, 0x4a, + 0x52, 0x06, 0xf1, 0xf7, 0xe8, 0x42, 0x9b, 0xbc, 0x23, 0x9b, 0x01, 0x4d, 0x33, 0xed, 0xb1, 0xf2, + 0xbf, 0x8b, 0xc2, 0xdf, 0x20, 0x47, 0x79, 0x48, 0x4d, 0x47, 0x9f, 0x17, 0xe6, 0x49, 0x13, 0xbe, + 0x11, 0xc0, 0x64, 0xf6, 0x68, 0xaa, 0xae, 0x00, 0x4e, 0x50, 0xd1, 0x93, 0x59, 0x80, 0xf0, 0x4f, + 0xa8, 0xa6, 0xf7, 0x50, 0x2b, 0xc6, 0x50, 0x8c, 0x54, 0x12, 0x16, 0x11, 0x17, 0x29, 0x07, 0x7b, + 0x58, 0xb0, 0x3d, 0x0c, 0xc6, 0x26, 0xd3, 0x0d, 0xe7, 0x32, 0x95, 0x22, 0x4c, 0xdc, 0xaa, 0xb6, + 0xbd, 0x83, 0xf2, 0xde, 0x59, 0xa8, 0x92, 0x3b, 0xc4, 0x35, 0xe4, 0x0c, 0xc3, 0x74, 0xfb, 0x32, + 0x99, 0x08, 0x1c, 0xfb, 0x24, 0x89, 0x69, 0x14, 0xaa, 0x19, 0xd4, 0xa5, 0x2a, 0x42, 0xa0, 0xe8, + 0x2c, 0x08, 0x93, 0x66, 0xb9, 0x2e, 0x58, 0x11, 0x82, 0x72, 0x9a, 0x3b, 0x36, 0x35, 0xcb, 0x42, + 0x7c, 0x89, 0x8e, 0x94, 0xd0, 0x54, 0x4b, 0x07, 0xf8, 0x6f, 0x54, 0x1b, 0x86, 0x2c, 0x5c, 0x90, + 0x19, 0xf4, 0x16, 0x8d, 0xc8, 0x58, 0xf0, 0x07, 0x3a, 0x23, 0xc2, 0x75, 0x1a, 0x76, 0xb3, 0xda, + 0xfe, 0xaa, 0x70, 0xc1, 0xcf, 0x14, 0xea, 0x34, 0xfe, 0x9e, 0xe5, 0xde, 0x5f, 0xe8, 0xd3, 0x3d, + 0x4b, 0xa0, 0x79, 0x3a, 0x51, 0x44, 0xd2, 0x94, 0x8b, 0x7e, 0x2f, 0x7b, 0x9d, 0xb7, 0x08, 0x34, + 0x5e, 0x40, 0x22, 0x41, 0x64, 0xbf, 0x67, 0x2e, 0x21, 0x8f, 0x3d, 0x5a, 0x7a, 0x2e, 0xe1, 0x0d, + 0x81, 0xe7, 0x4d, 0x77, 0xbc, 0x9a, 0xf5, 0x1a, 0x72, 0x7a, 0xa3, 0x20, 0xc8, 0xdf, 0x21, 0x13, + 0xc1, 0xf1, 0xfb, 0x63, 0x80, 0x6d, 0x05, 0xeb, 0x00, 0xb6, 0xea, 0xc4, 0x31, 0x7f, 0x84, 0x24, + 0x87, 0x2a, 0x49, 0x1e, 0xdf, 0xfc, 0xfa, 0xf2, 0xa9, 0x6e, 0xbd, 0x7a, 0xaa, 0x5b, 0xaf, 0x9f, + 0xea, 0xd6, 0x7f, 0x6f, 0xeb, 0x1f, 0xfd, 0xf3, 0xed, 0x82, 0xca, 0xe5, 0x7a, 0x7a, 0x1d, 0xf1, + 0x55, 0x6b, 0x19, 0xa6, 0x4b, 0x1a, 0x71, 0x91, 0xc0, 0xc7, 0x28, 0x5d, 0xc7, 0xad, 0xf2, 0x27, + 0x6a, 0xea, 0xa8, 0xf8, 0x87, 0xf7, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xef, 0x32, 0xac, 0xbb, + 0x06, 0x00, 0x00, +} + +func (m *Config) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Config) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Config) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.TLS != nil { + { + size, err := m.TLS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.Gossip != nil { + { + size, err := m.Gossip.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.AutoEncrypt != nil { + { + size, err := m.AutoEncrypt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.ACL != nil { + { + size, err := m.ACL.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.SegmentName) > 0 { + i -= len(m.SegmentName) + copy(dAtA[i:], m.SegmentName) + i = encodeVarintConfig(dAtA, i, uint64(len(m.SegmentName))) + i-- + dAtA[i] = 0x22 + } + if len(m.NodeName) > 0 { + i -= len(m.NodeName) + copy(dAtA[i:], m.NodeName) + i = encodeVarintConfig(dAtA, i, uint64(len(m.NodeName))) + i-- + dAtA[i] = 0x1a + } + if len(m.PrimaryDatacenter) > 0 { + i -= len(m.PrimaryDatacenter) + copy(dAtA[i:], m.PrimaryDatacenter) + i = encodeVarintConfig(dAtA, i, uint64(len(m.PrimaryDatacenter))) + i-- + dAtA[i] = 0x12 + } + if len(m.Datacenter) > 0 { + i -= len(m.Datacenter) + copy(dAtA[i:], m.Datacenter) + i = encodeVarintConfig(dAtA, i, uint64(len(m.Datacenter))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Gossip) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Gossip) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Gossip) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.RetryJoinLAN) > 0 { + for iNdEx := len(m.RetryJoinLAN) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RetryJoinLAN[iNdEx]) + copy(dAtA[i:], m.RetryJoinLAN[iNdEx]) + i = encodeVarintConfig(dAtA, i, uint64(len(m.RetryJoinLAN[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.Encryption != nil { + { + size, err := m.Encryption.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GossipEncryption) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GossipEncryption) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GossipEncryption) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.VerifyOutgoing { + i-- + if m.VerifyOutgoing { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.VerifyIncoming { + i-- + if m.VerifyIncoming { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.Key) > 0 { + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintConfig(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TLS) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TLS) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TLS) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.PreferServerCipherSuites { + i-- + if m.PreferServerCipherSuites { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } + if len(m.MinVersion) > 0 { + i -= len(m.MinVersion) + copy(dAtA[i:], m.MinVersion) + i = encodeVarintConfig(dAtA, i, uint64(len(m.MinVersion))) + i-- + dAtA[i] = 0x22 + } + if len(m.CipherSuites) > 0 { + i -= len(m.CipherSuites) + copy(dAtA[i:], m.CipherSuites) + i = encodeVarintConfig(dAtA, i, uint64(len(m.CipherSuites))) + i-- + dAtA[i] = 0x1a + } + if m.VerifyServerHostname { + i-- + if m.VerifyServerHostname { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if m.VerifyOutgoing { + i-- + if m.VerifyOutgoing { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ACL) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ACL) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ACL) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.MSPDisableBootstrap { + i-- + if m.MSPDisableBootstrap { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + } + if m.EnableTokenPersistence { + i-- + if m.EnableTokenPersistence { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + } + if len(m.DisabledTTL) > 0 { + i -= len(m.DisabledTTL) + copy(dAtA[i:], m.DisabledTTL) + i = encodeVarintConfig(dAtA, i, uint64(len(m.DisabledTTL))) + i-- + dAtA[i] = 0x4a + } + if m.Tokens != nil { + { + size, err := m.Tokens.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.EnableKeyListPolicy { + i-- + if m.EnableKeyListPolicy { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if len(m.DefaultPolicy) > 0 { + i -= len(m.DefaultPolicy) + copy(dAtA[i:], m.DefaultPolicy) + i = encodeVarintConfig(dAtA, i, uint64(len(m.DefaultPolicy))) + i-- + dAtA[i] = 0x32 + } + if len(m.DownPolicy) > 0 { + i -= len(m.DownPolicy) + copy(dAtA[i:], m.DownPolicy) + i = encodeVarintConfig(dAtA, i, uint64(len(m.DownPolicy))) + i-- + dAtA[i] = 0x2a + } + if len(m.TokenTTL) > 0 { + i -= len(m.TokenTTL) + copy(dAtA[i:], m.TokenTTL) + i = encodeVarintConfig(dAtA, i, uint64(len(m.TokenTTL))) + i-- + dAtA[i] = 0x22 + } + if len(m.RoleTTL) > 0 { + i -= len(m.RoleTTL) + copy(dAtA[i:], m.RoleTTL) + i = encodeVarintConfig(dAtA, i, uint64(len(m.RoleTTL))) + i-- + dAtA[i] = 0x1a + } + if len(m.PolicyTTL) > 0 { + i -= len(m.PolicyTTL) + copy(dAtA[i:], m.PolicyTTL) + i = encodeVarintConfig(dAtA, i, uint64(len(m.PolicyTTL))) + i-- + dAtA[i] = 0x12 + } + if m.Enabled { + i-- + if m.Enabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ACLTokens) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ACLTokens) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ACLTokens) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.ManagedServiceProvider) > 0 { + for iNdEx := len(m.ManagedServiceProvider) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ManagedServiceProvider[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConfig(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + if len(m.Agent) > 0 { + i -= len(m.Agent) + copy(dAtA[i:], m.Agent) + i = encodeVarintConfig(dAtA, i, uint64(len(m.Agent))) + i-- + dAtA[i] = 0x2a + } + if len(m.Default) > 0 { + i -= len(m.Default) + copy(dAtA[i:], m.Default) + i = encodeVarintConfig(dAtA, i, uint64(len(m.Default))) + i-- + dAtA[i] = 0x22 + } + if len(m.AgentMaster) > 0 { + i -= len(m.AgentMaster) + copy(dAtA[i:], m.AgentMaster) + i = encodeVarintConfig(dAtA, i, uint64(len(m.AgentMaster))) + i-- + dAtA[i] = 0x1a + } + if len(m.Replication) > 0 { + i -= len(m.Replication) + copy(dAtA[i:], m.Replication) + i = encodeVarintConfig(dAtA, i, uint64(len(m.Replication))) + i-- + dAtA[i] = 0x12 + } + if len(m.Master) > 0 { + i -= len(m.Master) + copy(dAtA[i:], m.Master) + i = encodeVarintConfig(dAtA, i, uint64(len(m.Master))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ACLServiceProviderToken) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ACLServiceProviderToken) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ACLServiceProviderToken) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.SecretID) > 0 { + i -= len(m.SecretID) + copy(dAtA[i:], m.SecretID) + i = encodeVarintConfig(dAtA, i, uint64(len(m.SecretID))) + i-- + dAtA[i] = 0x12 + } + if len(m.AccessorID) > 0 { + i -= len(m.AccessorID) + copy(dAtA[i:], m.AccessorID) + i = encodeVarintConfig(dAtA, i, uint64(len(m.AccessorID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AutoEncrypt) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AutoEncrypt) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AutoEncrypt) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.AllowTLS { + i-- + if m.AllowTLS { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if len(m.IPSAN) > 0 { + for iNdEx := len(m.IPSAN) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.IPSAN[iNdEx]) + copy(dAtA[i:], m.IPSAN[iNdEx]) + i = encodeVarintConfig(dAtA, i, uint64(len(m.IPSAN[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.DNSSAN) > 0 { + for iNdEx := len(m.DNSSAN) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DNSSAN[iNdEx]) + copy(dAtA[i:], m.DNSSAN[iNdEx]) + i = encodeVarintConfig(dAtA, i, uint64(len(m.DNSSAN[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.TLS { + i-- + if m.TLS { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintConfig(dAtA []byte, offset int, v uint64) int { + offset -= sovConfig(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Config) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Datacenter) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.PrimaryDatacenter) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.NodeName) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.SegmentName) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.ACL != nil { + l = m.ACL.Size() + n += 1 + l + sovConfig(uint64(l)) + } + if m.AutoEncrypt != nil { + l = m.AutoEncrypt.Size() + n += 1 + l + sovConfig(uint64(l)) + } + if m.Gossip != nil { + l = m.Gossip.Size() + n += 1 + l + sovConfig(uint64(l)) + } + if m.TLS != nil { + l = m.TLS.Size() + n += 1 + l + sovConfig(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Gossip) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Encryption != nil { + l = m.Encryption.Size() + n += 1 + l + sovConfig(uint64(l)) + } + if len(m.RetryJoinLAN) > 0 { + for _, s := range m.RetryJoinLAN { + l = len(s) + n += 1 + l + sovConfig(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *GossipEncryption) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.VerifyIncoming { + n += 2 + } + if m.VerifyOutgoing { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TLS) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.VerifyOutgoing { + n += 2 + } + if m.VerifyServerHostname { + n += 2 + } + l = len(m.CipherSuites) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.MinVersion) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.PreferServerCipherSuites { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ACL) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Enabled { + n += 2 + } + l = len(m.PolicyTTL) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.RoleTTL) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.TokenTTL) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.DownPolicy) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.DefaultPolicy) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.EnableKeyListPolicy { + n += 2 + } + if m.Tokens != nil { + l = m.Tokens.Size() + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.DisabledTTL) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.EnableTokenPersistence { + n += 2 + } + if m.MSPDisableBootstrap { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ACLTokens) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Master) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.Replication) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.AgentMaster) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.Default) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.Agent) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if len(m.ManagedServiceProvider) > 0 { + for _, e := range m.ManagedServiceProvider { + l = e.Size() + n += 1 + l + sovConfig(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ACLServiceProviderToken) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AccessorID) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + l = len(m.SecretID) + if l > 0 { + n += 1 + l + sovConfig(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *AutoEncrypt) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TLS { + n += 2 + } + if len(m.DNSSAN) > 0 { + for _, s := range m.DNSSAN { + l = len(s) + n += 1 + l + sovConfig(uint64(l)) + } + } + if len(m.IPSAN) > 0 { + for _, s := range m.IPSAN { + l = len(s) + n += 1 + l + sovConfig(uint64(l)) + } + } + if m.AllowTLS { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovConfig(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozConfig(x uint64) (n int) { + return sovConfig(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Config) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Config: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Config: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Datacenter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Datacenter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrimaryDatacenter", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrimaryDatacenter = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NodeName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SegmentName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SegmentName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ACL", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ACL == nil { + m.ACL = &ACL{} + } + if err := m.ACL.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AutoEncrypt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AutoEncrypt == nil { + m.AutoEncrypt = &AutoEncrypt{} + } + if err := m.AutoEncrypt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Gossip", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Gossip == nil { + m.Gossip = &Gossip{} + } + if err := m.Gossip.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TLS == nil { + m.TLS = &TLS{} + } + if err := m.TLS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Gossip) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Gossip: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Gossip: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Encryption", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Encryption == nil { + m.Encryption = &GossipEncryption{} + } + if err := m.Encryption.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryJoinLAN", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RetryJoinLAN = append(m.RetryJoinLAN, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GossipEncryption) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GossipEncryption: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GossipEncryption: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VerifyIncoming", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.VerifyIncoming = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VerifyOutgoing", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.VerifyOutgoing = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TLS) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TLS: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TLS: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VerifyOutgoing", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.VerifyOutgoing = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VerifyServerHostname", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.VerifyServerHostname = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CipherSuites", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CipherSuites = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MinVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferServerCipherSuites", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PreferServerCipherSuites = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ACL) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ACL: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ACL: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Enabled = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PolicyTTL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PolicyTTL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleTTL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RoleTTL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenTTL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenTTL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DownPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DownPolicy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DefaultPolicy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EnableKeyListPolicy", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EnableKeyListPolicy = bool(v != 0) + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tokens", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Tokens == nil { + m.Tokens = &ACLTokens{} + } + if err := m.Tokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DisabledTTL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DisabledTTL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EnableTokenPersistence", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EnableTokenPersistence = bool(v != 0) + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MSPDisableBootstrap", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MSPDisableBootstrap = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ACLTokens) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ACLTokens: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ACLTokens: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Master", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Master = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Replication", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Replication = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AgentMaster", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AgentMaster = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Default", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Default = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Agent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Agent = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ManagedServiceProvider", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ManagedServiceProvider = append(m.ManagedServiceProvider, &ACLServiceProviderToken{}) + if err := m.ManagedServiceProvider[len(m.ManagedServiceProvider)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ACLServiceProviderToken) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ACLServiceProviderToken: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ACLServiceProviderToken: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessorID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccessorID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AutoEncrypt) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AutoEncrypt: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AutoEncrypt: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TLS = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DNSSAN", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DNSSAN = append(m.DNSSAN, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IPSAN", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConfig + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConfig + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IPSAN = append(m.IPSAN, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowTLS", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConfig + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowTLS = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipConfig(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConfig + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipConfig(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthConfig + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthConfig + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConfig + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipConfig(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthConfig + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthConfig = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowConfig = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/proto/pbconfig/config.proto consul-1.8.7+dfsg1/proto/pbconfig/config.proto --- consul-1.7.4+dfsg1/proto/pbconfig/config.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbconfig/config.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,70 @@ +syntax = "proto3"; + +package config; + +option go_package = "github.com/hashicorp/consul/proto/pbconfig"; + +message Config { + string Datacenter = 1; + string PrimaryDatacenter = 2; + string NodeName = 3; + string SegmentName = 4; + ACL ACL = 5; + AutoEncrypt AutoEncrypt = 6; + Gossip Gossip = 7; + TLS TLS = 8; +} + +message Gossip { + GossipEncryption Encryption = 1; + repeated string RetryJoinLAN = 2; +} + +message GossipEncryption { + string Key = 1; + bool VerifyIncoming = 2; + bool VerifyOutgoing = 3; +} + +message TLS { + bool VerifyOutgoing = 1; + bool VerifyServerHostname = 2; + string CipherSuites = 3; + string MinVersion = 4; + bool PreferServerCipherSuites = 5; +} + +message ACL { + bool Enabled = 1; + string PolicyTTL = 2; + string RoleTTL = 3; + string TokenTTL = 4; + string DownPolicy = 5; + string DefaultPolicy = 6; + bool EnableKeyListPolicy = 7; + ACLTokens Tokens = 8; + string DisabledTTL = 9; + bool EnableTokenPersistence = 10; + bool MSPDisableBootstrap = 11; +} + +message ACLTokens { + string Master = 1; + string Replication = 2; + string AgentMaster = 3; + string Default = 4; + string Agent = 5; + repeated ACLServiceProviderToken ManagedServiceProvider = 6; +} + +message ACLServiceProviderToken { + string AccessorID = 1; + string SecretID = 2; +} + +message AutoEncrypt { + bool TLS = 1; + repeated string DNSSAN = 2; + repeated string IPSAN = 3; + bool AllowTLS = 4; +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/proto/pbconnect/connect.pb.binary.go consul-1.8.7+dfsg1/proto/pbconnect/connect.pb.binary.go --- consul-1.7.4+dfsg1/proto/pbconnect/connect.pb.binary.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbconnect/connect.pb.binary.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,38 @@ +// Code generated by protoc-gen-go-binary. DO NOT EDIT. +// source: proto/pbconnect/connect.proto + +package pbconnect + +import ( + "github.com/golang/protobuf/proto" +) + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *CARoots) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *CARoots) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *CARoot) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *CARoot) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *IssuedCert) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *IssuedCert) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} diff -Nru consul-1.7.4+dfsg1/proto/pbconnect/connect.pb.go consul-1.8.7+dfsg1/proto/pbconnect/connect.pb.go --- consul-1.7.4+dfsg1/proto/pbconnect/connect.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbconnect/connect.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2316 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: proto/pbconnect/connect.proto + +package pbconnect + +import ( + fmt "fmt" + types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + pbcommon "github.com/hashicorp/consul/proto/pbcommon" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// CARoots is the list of all currently trusted CA Roots. +type CARoots struct { + // ActiveRootID is the ID of a root in Roots that is the active CA root. + // Other roots are still valid if they're in the Roots list but are in + // the process of being rotated out. + ActiveRootID string `protobuf:"bytes,1,opt,name=ActiveRootID,proto3" json:"ActiveRootID,omitempty"` + // TrustDomain is the identification root for this Consul cluster. All + // certificates signed by the cluster's CA must have their identifying URI in + // this domain. + // + // This does not include the protocol (currently spiffe://) since we may + // implement other protocols in future with equivalent semantics. It should be + // compared against the "authority" section of a URI (i.e. host:port). + // + // We need to support migrating a cluster between trust domains to support + // Multi-DC migration in Enterprise. In this case the current trust domain is + // here but entries in Roots may also have ExternalTrustDomain set to a + // non-empty value implying they were previous roots that are still trusted + // but under a different trust domain. + // + // Note that we DON'T validate trust domain during AuthZ since it causes + // issues of loss of connectivity during migration between trust domains. The + // only time the additional validation adds value is where the cluster shares + // an external root (e.g. organization-wide root) with another distinct Consul + // cluster or PKI system. In this case, x509 Name Constraints can be added to + // enforce that Consul's CA can only validly sign or trust certs within the + // same trust-domain. Name constraints as enforced by TLS handshake also allow + // seamless rotation between trust domains thanks to cross-signing. + TrustDomain string `protobuf:"bytes,2,opt,name=TrustDomain,proto3" json:"TrustDomain,omitempty"` + // Roots is a list of root CA certs to trust. + Roots []*CARoot `protobuf:"bytes,3,rep,name=Roots,proto3" json:"Roots,omitempty"` + // QueryMeta here is mainly used to contain the latest Raft Index that could + // be used to perform a blocking query. + QueryMeta *pbcommon.QueryMeta `protobuf:"bytes,4,opt,name=QueryMeta,proto3" json:"QueryMeta,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CARoots) Reset() { *m = CARoots{} } +func (m *CARoots) String() string { return proto.CompactTextString(m) } +func (*CARoots) ProtoMessage() {} +func (*CARoots) Descriptor() ([]byte, []int) { + return fileDescriptor_80627e709958eb04, []int{0} +} +func (m *CARoots) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CARoots) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CARoots.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CARoots) XXX_Merge(src proto.Message) { + xxx_messageInfo_CARoots.Merge(m, src) +} +func (m *CARoots) XXX_Size() int { + return m.Size() +} +func (m *CARoots) XXX_DiscardUnknown() { + xxx_messageInfo_CARoots.DiscardUnknown(m) +} + +var xxx_messageInfo_CARoots proto.InternalMessageInfo + +func (m *CARoots) GetActiveRootID() string { + if m != nil { + return m.ActiveRootID + } + return "" +} + +func (m *CARoots) GetTrustDomain() string { + if m != nil { + return m.TrustDomain + } + return "" +} + +func (m *CARoots) GetRoots() []*CARoot { + if m != nil { + return m.Roots + } + return nil +} + +func (m *CARoots) GetQueryMeta() *pbcommon.QueryMeta { + if m != nil { + return m.QueryMeta + } + return nil +} + +type CARoot struct { + // ID is a globally unique ID (UUID) representing this CA root. + ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` + // Name is a human-friendly name for this CA root. This value is + // opaque to Consul and is not used for anything internally. + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` + // SerialNumber is the x509 serial number of the certificate. + SerialNumber uint64 `protobuf:"varint,3,opt,name=SerialNumber,proto3" json:"SerialNumber,omitempty"` + // SigningKeyID is the ID of the public key that corresponds to the private + // key used to sign leaf certificates. Is is the HexString format of the + // raw AuthorityKeyID bytes. + SigningKeyID string `protobuf:"bytes,4,opt,name=SigningKeyID,proto3" json:"SigningKeyID,omitempty"` + // ExternalTrustDomain is the trust domain this root was generated under. It + // is usually empty implying "the current cluster trust-domain". It is set + // only in the case that a cluster changes trust domain and then all old roots + // that are still trusted have the old trust domain set here. + // + // We currently DON'T validate these trust domains explicitly anywhere, see + // IndexedRoots.TrustDomain doc. We retain this information for debugging and + // future flexibility. + ExternalTrustDomain string `protobuf:"bytes,5,opt,name=ExternalTrustDomain,proto3" json:"ExternalTrustDomain,omitempty"` + // Time validity bounds. + NotBefore *types.Timestamp `protobuf:"bytes,6,opt,name=NotBefore,proto3" json:"NotBefore,omitempty"` + NotAfter *types.Timestamp `protobuf:"bytes,7,opt,name=NotAfter,proto3" json:"NotAfter,omitempty"` + // RootCert is the PEM-encoded public certificate. + RootCert string `protobuf:"bytes,8,opt,name=RootCert,proto3" json:"RootCert,omitempty"` + // IntermediateCerts is a list of PEM-encoded intermediate certs to + // attach to any leaf certs signed by this CA. + IntermediateCerts []string `protobuf:"bytes,9,rep,name=IntermediateCerts,proto3" json:"IntermediateCerts,omitempty"` + // SigningCert is the PEM-encoded signing certificate and SigningKey + // is the PEM-encoded private key for the signing certificate. These + // may actually be empty if the CA plugin in use manages these for us. + SigningCert string `protobuf:"bytes,10,opt,name=SigningCert,proto3" json:"SigningCert,omitempty"` + SigningKey string `protobuf:"bytes,11,opt,name=SigningKey,proto3" json:"SigningKey,omitempty"` + // Active is true if this is the current active CA. This must only + // be true for exactly one CA. For any method that modifies roots in the + // state store, tests should be written to verify that multiple roots + // cannot be active. + Active bool `protobuf:"varint,12,opt,name=Active,proto3" json:"Active,omitempty"` + // RotatedOutAt is the time at which this CA was removed from the state. + // This will only be set on roots that have been rotated out from being the + // active root. + RotatedOutAt *types.Timestamp `protobuf:"bytes,13,opt,name=RotatedOutAt,proto3" json:"RotatedOutAt,omitempty"` + // PrivateKeyType is the type of the private key used to sign certificates. It + // may be "rsa" or "ec". This is provided as a convenience to avoid parsing + // the public key to from the certificate to infer the type. + PrivateKeyType string `protobuf:"bytes,14,opt,name=PrivateKeyType,proto3" json:"PrivateKeyType,omitempty"` + // PrivateKeyBits is the length of the private key used to sign certificates. + // This is provided as a convenience to avoid parsing the public key from the + // certificate to infer the type. + PrivateKeyBits int32 `protobuf:"varint,15,opt,name=PrivateKeyBits,proto3" json:"PrivateKeyBits,omitempty"` + RaftIndex *pbcommon.RaftIndex `protobuf:"bytes,16,opt,name=RaftIndex,proto3" json:"RaftIndex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CARoot) Reset() { *m = CARoot{} } +func (m *CARoot) String() string { return proto.CompactTextString(m) } +func (*CARoot) ProtoMessage() {} +func (*CARoot) Descriptor() ([]byte, []int) { + return fileDescriptor_80627e709958eb04, []int{1} +} +func (m *CARoot) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CARoot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CARoot.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CARoot) XXX_Merge(src proto.Message) { + xxx_messageInfo_CARoot.Merge(m, src) +} +func (m *CARoot) XXX_Size() int { + return m.Size() +} +func (m *CARoot) XXX_DiscardUnknown() { + xxx_messageInfo_CARoot.DiscardUnknown(m) +} + +var xxx_messageInfo_CARoot proto.InternalMessageInfo + +func (m *CARoot) GetID() string { + if m != nil { + return m.ID + } + return "" +} + +func (m *CARoot) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CARoot) GetSerialNumber() uint64 { + if m != nil { + return m.SerialNumber + } + return 0 +} + +func (m *CARoot) GetSigningKeyID() string { + if m != nil { + return m.SigningKeyID + } + return "" +} + +func (m *CARoot) GetExternalTrustDomain() string { + if m != nil { + return m.ExternalTrustDomain + } + return "" +} + +func (m *CARoot) GetNotBefore() *types.Timestamp { + if m != nil { + return m.NotBefore + } + return nil +} + +func (m *CARoot) GetNotAfter() *types.Timestamp { + if m != nil { + return m.NotAfter + } + return nil +} + +func (m *CARoot) GetRootCert() string { + if m != nil { + return m.RootCert + } + return "" +} + +func (m *CARoot) GetIntermediateCerts() []string { + if m != nil { + return m.IntermediateCerts + } + return nil +} + +func (m *CARoot) GetSigningCert() string { + if m != nil { + return m.SigningCert + } + return "" +} + +func (m *CARoot) GetSigningKey() string { + if m != nil { + return m.SigningKey + } + return "" +} + +func (m *CARoot) GetActive() bool { + if m != nil { + return m.Active + } + return false +} + +func (m *CARoot) GetRotatedOutAt() *types.Timestamp { + if m != nil { + return m.RotatedOutAt + } + return nil +} + +func (m *CARoot) GetPrivateKeyType() string { + if m != nil { + return m.PrivateKeyType + } + return "" +} + +func (m *CARoot) GetPrivateKeyBits() int32 { + if m != nil { + return m.PrivateKeyBits + } + return 0 +} + +func (m *CARoot) GetRaftIndex() *pbcommon.RaftIndex { + if m != nil { + return m.RaftIndex + } + return nil +} + +type IssuedCert struct { + // SerialNumber is the unique serial number for this certificate. + // This is encoded in standard hex separated by :. + SerialNumber string `protobuf:"bytes,1,opt,name=SerialNumber,proto3" json:"SerialNumber,omitempty"` + // CertPEM and PrivateKeyPEM are the PEM-encoded certificate and private + // key for that cert, respectively. This should not be stored in the + // state store, but is present in the sign API response. + CertPEM string `protobuf:"bytes,2,opt,name=CertPEM,proto3" json:"CertPEM,omitempty"` + PrivateKeyPEM string `protobuf:"bytes,3,opt,name=PrivateKeyPEM,proto3" json:"PrivateKeyPEM,omitempty"` + // Service is the name of the service for which the cert was issued. + // ServiceURI is the cert URI value. + Service string `protobuf:"bytes,4,opt,name=Service,proto3" json:"Service,omitempty"` + ServiceURI string `protobuf:"bytes,5,opt,name=ServiceURI,proto3" json:"ServiceURI,omitempty"` + // Agent is the name of the node for which the cert was issued. + // AgentURI is the cert URI value. + Agent string `protobuf:"bytes,6,opt,name=Agent,proto3" json:"Agent,omitempty"` + AgentURI string `protobuf:"bytes,7,opt,name=AgentURI,proto3" json:"AgentURI,omitempty"` + // ValidAfter and ValidBefore are the validity periods for the + // certificate. + ValidAfter *types.Timestamp `protobuf:"bytes,8,opt,name=ValidAfter,proto3" json:"ValidAfter,omitempty"` + ValidBefore *types.Timestamp `protobuf:"bytes,9,opt,name=ValidBefore,proto3" json:"ValidBefore,omitempty"` + // EnterpriseMeta is the Consul Enterprise specific metadata + EnterpriseMeta *pbcommon.EnterpriseMeta `protobuf:"bytes,10,opt,name=EnterpriseMeta,proto3" json:"EnterpriseMeta,omitempty"` + RaftIndex *pbcommon.RaftIndex `protobuf:"bytes,11,opt,name=RaftIndex,proto3" json:"RaftIndex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IssuedCert) Reset() { *m = IssuedCert{} } +func (m *IssuedCert) String() string { return proto.CompactTextString(m) } +func (*IssuedCert) ProtoMessage() {} +func (*IssuedCert) Descriptor() ([]byte, []int) { + return fileDescriptor_80627e709958eb04, []int{2} +} +func (m *IssuedCert) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IssuedCert) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_IssuedCert.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *IssuedCert) XXX_Merge(src proto.Message) { + xxx_messageInfo_IssuedCert.Merge(m, src) +} +func (m *IssuedCert) XXX_Size() int { + return m.Size() +} +func (m *IssuedCert) XXX_DiscardUnknown() { + xxx_messageInfo_IssuedCert.DiscardUnknown(m) +} + +var xxx_messageInfo_IssuedCert proto.InternalMessageInfo + +func (m *IssuedCert) GetSerialNumber() string { + if m != nil { + return m.SerialNumber + } + return "" +} + +func (m *IssuedCert) GetCertPEM() string { + if m != nil { + return m.CertPEM + } + return "" +} + +func (m *IssuedCert) GetPrivateKeyPEM() string { + if m != nil { + return m.PrivateKeyPEM + } + return "" +} + +func (m *IssuedCert) GetService() string { + if m != nil { + return m.Service + } + return "" +} + +func (m *IssuedCert) GetServiceURI() string { + if m != nil { + return m.ServiceURI + } + return "" +} + +func (m *IssuedCert) GetAgent() string { + if m != nil { + return m.Agent + } + return "" +} + +func (m *IssuedCert) GetAgentURI() string { + if m != nil { + return m.AgentURI + } + return "" +} + +func (m *IssuedCert) GetValidAfter() *types.Timestamp { + if m != nil { + return m.ValidAfter + } + return nil +} + +func (m *IssuedCert) GetValidBefore() *types.Timestamp { + if m != nil { + return m.ValidBefore + } + return nil +} + +func (m *IssuedCert) GetEnterpriseMeta() *pbcommon.EnterpriseMeta { + if m != nil { + return m.EnterpriseMeta + } + return nil +} + +func (m *IssuedCert) GetRaftIndex() *pbcommon.RaftIndex { + if m != nil { + return m.RaftIndex + } + return nil +} + +func init() { + proto.RegisterType((*CARoots)(nil), "connect.CARoots") + proto.RegisterType((*CARoot)(nil), "connect.CARoot") + proto.RegisterType((*IssuedCert)(nil), "connect.IssuedCert") +} + +func init() { proto.RegisterFile("proto/pbconnect/connect.proto", fileDescriptor_80627e709958eb04) } + +var fileDescriptor_80627e709958eb04 = []byte{ + // 667 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xdf, 0x6a, 0x13, 0x4f, + 0x14, 0xfe, 0x6d, 0xf3, 0x77, 0x4f, 0xda, 0xf4, 0xd7, 0xf9, 0xfd, 0x28, 0x43, 0xc4, 0x74, 0x09, + 0x2a, 0x01, 0x25, 0x2b, 0x15, 0x44, 0x44, 0x0b, 0x69, 0xd3, 0x8b, 0x50, 0x1a, 0xeb, 0xb4, 0x7a, + 0xe1, 0x8d, 0x6c, 0x92, 0x93, 0x74, 0x20, 0xbb, 0x13, 0x66, 0x67, 0x4b, 0xf3, 0x26, 0xbe, 0x81, + 0x8f, 0xa2, 0x97, 0x3e, 0x82, 0xd4, 0xe7, 0x10, 0x64, 0x66, 0x77, 0x93, 0xdd, 0x58, 0xc8, 0x55, + 0xe6, 0x7c, 0xdf, 0x37, 0xb3, 0xe7, 0xcc, 0xf7, 0x65, 0xe0, 0xe1, 0x5c, 0x0a, 0x25, 0xdc, 0xf9, + 0x70, 0x24, 0x82, 0x00, 0x47, 0xca, 0x4d, 0x7e, 0x3b, 0x06, 0x27, 0x95, 0xa4, 0x6c, 0x1c, 0x4c, + 0x85, 0x98, 0xce, 0xd0, 0x35, 0xf0, 0x30, 0x9a, 0xb8, 0x8a, 0xfb, 0x18, 0x2a, 0xcf, 0x9f, 0xc7, + 0xca, 0xc6, 0x83, 0xd5, 0x41, 0xbe, 0x2f, 0x02, 0x37, 0xfe, 0x49, 0xc8, 0x83, 0x7b, 0xc9, 0xcf, + 0x22, 0x0c, 0x63, 0x41, 0xeb, 0xab, 0x05, 0x95, 0x93, 0x2e, 0x13, 0x42, 0x85, 0xa4, 0x05, 0xdb, + 0xdd, 0x91, 0xe2, 0x37, 0xa8, 0xcb, 0x7e, 0x8f, 0x5a, 0x8e, 0xd5, 0xb6, 0x59, 0x0e, 0x23, 0x0e, + 0xd4, 0xae, 0x64, 0x14, 0xaa, 0x9e, 0xf0, 0x3d, 0x1e, 0xd0, 0x2d, 0x23, 0xc9, 0x42, 0xe4, 0x31, + 0x94, 0xcc, 0x71, 0xb4, 0xe0, 0x14, 0xda, 0xb5, 0xc3, 0xdd, 0x4e, 0x3a, 0x58, 0xfc, 0x19, 0x16, + 0xb3, 0xc4, 0x05, 0xfb, 0x7d, 0x84, 0x72, 0x71, 0x8e, 0xca, 0xa3, 0x45, 0xc7, 0x6a, 0xd7, 0x0e, + 0xf7, 0x3a, 0x49, 0xef, 0x4b, 0x82, 0xad, 0x34, 0xad, 0xdf, 0x45, 0x28, 0xc7, 0x47, 0x90, 0x3a, + 0x6c, 0x2d, 0xdb, 0xdb, 0xea, 0xf7, 0x08, 0x81, 0xe2, 0xc0, 0xf3, 0x31, 0xe9, 0xc6, 0xac, 0xf5, + 0x30, 0x97, 0x28, 0xb9, 0x37, 0x1b, 0x44, 0xfe, 0x10, 0x25, 0x2d, 0x38, 0x56, 0xbb, 0xc8, 0x72, + 0x98, 0xd1, 0xf0, 0x69, 0xc0, 0x83, 0xe9, 0x19, 0x2e, 0xfa, 0x3d, 0xd3, 0x86, 0xcd, 0x72, 0x18, + 0x79, 0x0e, 0xff, 0x9d, 0xde, 0x2a, 0x94, 0x81, 0x37, 0xcb, 0x0e, 0x5e, 0x32, 0xd2, 0xfb, 0x28, + 0xf2, 0x0a, 0xec, 0x81, 0x50, 0xc7, 0x38, 0x11, 0x12, 0x69, 0xd9, 0x4c, 0xd6, 0xe8, 0xc4, 0x2e, + 0x76, 0x52, 0x17, 0x3b, 0x57, 0xa9, 0x8b, 0x6c, 0x25, 0x26, 0x2f, 0xa1, 0x3a, 0x10, 0xaa, 0x3b, + 0x51, 0x28, 0x69, 0x65, 0xe3, 0xc6, 0xa5, 0x96, 0x34, 0xa0, 0xaa, 0xef, 0xe5, 0x04, 0xa5, 0xa2, + 0x55, 0xd3, 0xd8, 0xb2, 0x26, 0xcf, 0x60, 0xaf, 0x1f, 0x28, 0x94, 0x3e, 0x8e, 0xb9, 0xa7, 0x50, + 0x63, 0x21, 0xb5, 0x9d, 0x42, 0xdb, 0x66, 0x7f, 0x13, 0xda, 0xde, 0x64, 0x7a, 0x73, 0x18, 0xc4, + 0xf6, 0x66, 0x20, 0xd2, 0x04, 0x58, 0xdd, 0x0f, 0xad, 0x19, 0x41, 0x06, 0x21, 0xfb, 0x50, 0x8e, + 0x03, 0x43, 0xb7, 0x1d, 0xab, 0x5d, 0x65, 0x49, 0x45, 0x8e, 0x60, 0x9b, 0x09, 0xe5, 0x29, 0x1c, + 0xbf, 0x8b, 0x54, 0x57, 0xd1, 0x9d, 0x8d, 0xf3, 0xe5, 0xf4, 0xe4, 0x09, 0xd4, 0x2f, 0x24, 0xbf, + 0xf1, 0x14, 0x9e, 0xe1, 0xe2, 0x6a, 0x31, 0x47, 0x5a, 0x37, 0xdf, 0x5e, 0x43, 0xf3, 0xba, 0x63, + 0xae, 0x42, 0xba, 0xeb, 0x58, 0xed, 0x12, 0x5b, 0x43, 0x75, 0xfe, 0x98, 0x37, 0x51, 0xfd, 0x60, + 0x8c, 0xb7, 0xf4, 0xdf, 0x7c, 0xfe, 0x96, 0x04, 0x5b, 0x69, 0x5a, 0xdf, 0x0a, 0x00, 0xfd, 0x30, + 0x8c, 0x70, 0x6c, 0xee, 0x61, 0x3d, 0x5f, 0xc9, 0x9f, 0x25, 0x97, 0x2f, 0x0a, 0x15, 0xad, 0xbd, + 0x38, 0x3d, 0x4f, 0xa2, 0x99, 0x96, 0xe4, 0x11, 0xec, 0xac, 0xfa, 0xd1, 0x7c, 0xc1, 0xf0, 0x79, + 0x50, 0xef, 0xbf, 0x44, 0x79, 0xc3, 0x47, 0x98, 0x44, 0x33, 0x2d, 0x8d, 0x0b, 0xf1, 0xf2, 0x03, + 0xeb, 0x27, 0x61, 0xcc, 0x20, 0xe4, 0x7f, 0x28, 0x75, 0xa7, 0x18, 0x28, 0x93, 0x3f, 0x9b, 0xc5, + 0x85, 0xce, 0x89, 0x59, 0xe8, 0x3d, 0x95, 0x38, 0x27, 0x69, 0x4d, 0x5e, 0x03, 0x7c, 0xf4, 0x66, + 0x7c, 0x1c, 0xa7, 0xaf, 0xba, 0xd1, 0x9d, 0x8c, 0x9a, 0xbc, 0x81, 0x9a, 0xa9, 0x92, 0xcc, 0xdb, + 0x1b, 0x37, 0x67, 0xe5, 0xe4, 0x08, 0xea, 0xa7, 0x3a, 0x88, 0x73, 0xc9, 0x43, 0x34, 0xcf, 0x01, + 0x98, 0x03, 0xf6, 0x53, 0x3b, 0xf2, 0x2c, 0x5b, 0x53, 0xe7, 0x9d, 0xac, 0x6d, 0x76, 0xf2, 0xf8, + 0xed, 0xf7, 0xbb, 0xa6, 0xf5, 0xe3, 0xae, 0x69, 0xfd, 0xbc, 0x6b, 0x5a, 0x5f, 0x7e, 0x35, 0xff, + 0xf9, 0xf4, 0x74, 0xca, 0xd5, 0x75, 0x34, 0xd4, 0xbb, 0xdc, 0x6b, 0x2f, 0xbc, 0xe6, 0x23, 0x21, + 0xe7, 0xfa, 0x45, 0x0e, 0xa3, 0x99, 0xbb, 0xf6, 0x50, 0x0f, 0xcb, 0x06, 0x78, 0xf1, 0x27, 0x00, + 0x00, 0xff, 0xff, 0xcf, 0xc8, 0x31, 0xb3, 0xc2, 0x05, 0x00, 0x00, +} + +func (m *CARoots) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CARoots) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CARoots) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.QueryMeta != nil { + { + size, err := m.QueryMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.Roots) > 0 { + for iNdEx := len(m.Roots) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Roots[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.TrustDomain) > 0 { + i -= len(m.TrustDomain) + copy(dAtA[i:], m.TrustDomain) + i = encodeVarintConnect(dAtA, i, uint64(len(m.TrustDomain))) + i-- + dAtA[i] = 0x12 + } + if len(m.ActiveRootID) > 0 { + i -= len(m.ActiveRootID) + copy(dAtA[i:], m.ActiveRootID) + i = encodeVarintConnect(dAtA, i, uint64(len(m.ActiveRootID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CARoot) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CARoot) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CARoot) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.RaftIndex != nil { + { + size, err := m.RaftIndex.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if m.PrivateKeyBits != 0 { + i = encodeVarintConnect(dAtA, i, uint64(m.PrivateKeyBits)) + i-- + dAtA[i] = 0x78 + } + if len(m.PrivateKeyType) > 0 { + i -= len(m.PrivateKeyType) + copy(dAtA[i:], m.PrivateKeyType) + i = encodeVarintConnect(dAtA, i, uint64(len(m.PrivateKeyType))) + i-- + dAtA[i] = 0x72 + } + if m.RotatedOutAt != nil { + { + size, err := m.RotatedOutAt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + if m.Active { + i-- + if m.Active { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + } + if len(m.SigningKey) > 0 { + i -= len(m.SigningKey) + copy(dAtA[i:], m.SigningKey) + i = encodeVarintConnect(dAtA, i, uint64(len(m.SigningKey))) + i-- + dAtA[i] = 0x5a + } + if len(m.SigningCert) > 0 { + i -= len(m.SigningCert) + copy(dAtA[i:], m.SigningCert) + i = encodeVarintConnect(dAtA, i, uint64(len(m.SigningCert))) + i-- + dAtA[i] = 0x52 + } + if len(m.IntermediateCerts) > 0 { + for iNdEx := len(m.IntermediateCerts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.IntermediateCerts[iNdEx]) + copy(dAtA[i:], m.IntermediateCerts[iNdEx]) + i = encodeVarintConnect(dAtA, i, uint64(len(m.IntermediateCerts[iNdEx]))) + i-- + dAtA[i] = 0x4a + } + } + if len(m.RootCert) > 0 { + i -= len(m.RootCert) + copy(dAtA[i:], m.RootCert) + i = encodeVarintConnect(dAtA, i, uint64(len(m.RootCert))) + i-- + dAtA[i] = 0x42 + } + if m.NotAfter != nil { + { + size, err := m.NotAfter.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.NotBefore != nil { + { + size, err := m.NotBefore.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if len(m.ExternalTrustDomain) > 0 { + i -= len(m.ExternalTrustDomain) + copy(dAtA[i:], m.ExternalTrustDomain) + i = encodeVarintConnect(dAtA, i, uint64(len(m.ExternalTrustDomain))) + i-- + dAtA[i] = 0x2a + } + if len(m.SigningKeyID) > 0 { + i -= len(m.SigningKeyID) + copy(dAtA[i:], m.SigningKeyID) + i = encodeVarintConnect(dAtA, i, uint64(len(m.SigningKeyID))) + i-- + dAtA[i] = 0x22 + } + if m.SerialNumber != 0 { + i = encodeVarintConnect(dAtA, i, uint64(m.SerialNumber)) + i-- + dAtA[i] = 0x18 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintConnect(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + } + if len(m.ID) > 0 { + i -= len(m.ID) + copy(dAtA[i:], m.ID) + i = encodeVarintConnect(dAtA, i, uint64(len(m.ID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *IssuedCert) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IssuedCert) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IssuedCert) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.RaftIndex != nil { + { + size, err := m.RaftIndex.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + if m.EnterpriseMeta != nil { + { + size, err := m.EnterpriseMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if m.ValidBefore != nil { + { + size, err := m.ValidBefore.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if m.ValidAfter != nil { + { + size, err := m.ValidAfter.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnect(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if len(m.AgentURI) > 0 { + i -= len(m.AgentURI) + copy(dAtA[i:], m.AgentURI) + i = encodeVarintConnect(dAtA, i, uint64(len(m.AgentURI))) + i-- + dAtA[i] = 0x3a + } + if len(m.Agent) > 0 { + i -= len(m.Agent) + copy(dAtA[i:], m.Agent) + i = encodeVarintConnect(dAtA, i, uint64(len(m.Agent))) + i-- + dAtA[i] = 0x32 + } + if len(m.ServiceURI) > 0 { + i -= len(m.ServiceURI) + copy(dAtA[i:], m.ServiceURI) + i = encodeVarintConnect(dAtA, i, uint64(len(m.ServiceURI))) + i-- + dAtA[i] = 0x2a + } + if len(m.Service) > 0 { + i -= len(m.Service) + copy(dAtA[i:], m.Service) + i = encodeVarintConnect(dAtA, i, uint64(len(m.Service))) + i-- + dAtA[i] = 0x22 + } + if len(m.PrivateKeyPEM) > 0 { + i -= len(m.PrivateKeyPEM) + copy(dAtA[i:], m.PrivateKeyPEM) + i = encodeVarintConnect(dAtA, i, uint64(len(m.PrivateKeyPEM))) + i-- + dAtA[i] = 0x1a + } + if len(m.CertPEM) > 0 { + i -= len(m.CertPEM) + copy(dAtA[i:], m.CertPEM) + i = encodeVarintConnect(dAtA, i, uint64(len(m.CertPEM))) + i-- + dAtA[i] = 0x12 + } + if len(m.SerialNumber) > 0 { + i -= len(m.SerialNumber) + copy(dAtA[i:], m.SerialNumber) + i = encodeVarintConnect(dAtA, i, uint64(len(m.SerialNumber))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintConnect(dAtA []byte, offset int, v uint64) int { + offset -= sovConnect(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CARoots) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ActiveRootID) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.TrustDomain) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if len(m.Roots) > 0 { + for _, e := range m.Roots { + l = e.Size() + n += 1 + l + sovConnect(uint64(l)) + } + } + if m.QueryMeta != nil { + l = m.QueryMeta.Size() + n += 1 + l + sovConnect(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *CARoot) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ID) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if m.SerialNumber != 0 { + n += 1 + sovConnect(uint64(m.SerialNumber)) + } + l = len(m.SigningKeyID) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.ExternalTrustDomain) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if m.NotBefore != nil { + l = m.NotBefore.Size() + n += 1 + l + sovConnect(uint64(l)) + } + if m.NotAfter != nil { + l = m.NotAfter.Size() + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.RootCert) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if len(m.IntermediateCerts) > 0 { + for _, s := range m.IntermediateCerts { + l = len(s) + n += 1 + l + sovConnect(uint64(l)) + } + } + l = len(m.SigningCert) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.SigningKey) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if m.Active { + n += 2 + } + if m.RotatedOutAt != nil { + l = m.RotatedOutAt.Size() + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.PrivateKeyType) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if m.PrivateKeyBits != 0 { + n += 1 + sovConnect(uint64(m.PrivateKeyBits)) + } + if m.RaftIndex != nil { + l = m.RaftIndex.Size() + n += 2 + l + sovConnect(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *IssuedCert) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SerialNumber) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.CertPEM) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.PrivateKeyPEM) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.Service) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.ServiceURI) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.Agent) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + l = len(m.AgentURI) + if l > 0 { + n += 1 + l + sovConnect(uint64(l)) + } + if m.ValidAfter != nil { + l = m.ValidAfter.Size() + n += 1 + l + sovConnect(uint64(l)) + } + if m.ValidBefore != nil { + l = m.ValidBefore.Size() + n += 1 + l + sovConnect(uint64(l)) + } + if m.EnterpriseMeta != nil { + l = m.EnterpriseMeta.Size() + n += 1 + l + sovConnect(uint64(l)) + } + if m.RaftIndex != nil { + l = m.RaftIndex.Size() + n += 1 + l + sovConnect(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovConnect(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozConnect(x uint64) (n int) { + return sovConnect(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *CARoots) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CARoots: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CARoots: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActiveRootID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ActiveRootID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrustDomain", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrustDomain = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Roots", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Roots = append(m.Roots, &CARoot{}) + if err := m.Roots[len(m.Roots)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.QueryMeta == nil { + m.QueryMeta = &pbcommon.QueryMeta{} + } + if err := m.QueryMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConnect(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConnect + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConnect + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CARoot) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CARoot: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CARoot: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SerialNumber", wireType) + } + m.SerialNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SerialNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SigningKeyID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SigningKeyID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalTrustDomain", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExternalTrustDomain = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NotBefore", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NotBefore == nil { + m.NotBefore = &types.Timestamp{} + } + if err := m.NotBefore.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NotAfter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NotAfter == nil { + m.NotAfter = &types.Timestamp{} + } + if err := m.NotAfter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RootCert", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RootCert = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IntermediateCerts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IntermediateCerts = append(m.IntermediateCerts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SigningCert", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SigningCert = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SigningKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SigningKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Active = bool(v != 0) + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RotatedOutAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RotatedOutAt == nil { + m.RotatedOutAt = &types.Timestamp{} + } + if err := m.RotatedOutAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrivateKeyType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrivateKeyType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PrivateKeyBits", wireType) + } + m.PrivateKeyBits = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PrivateKeyBits |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RaftIndex", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RaftIndex == nil { + m.RaftIndex = &pbcommon.RaftIndex{} + } + if err := m.RaftIndex.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConnect(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConnect + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConnect + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IssuedCert) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IssuedCert: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IssuedCert: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SerialNumber", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SerialNumber = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CertPEM", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CertPEM = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrivateKeyPEM", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrivateKeyPEM = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Service = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceURI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Agent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Agent = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AgentURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AgentURI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidAfter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ValidAfter == nil { + m.ValidAfter = &types.Timestamp{} + } + if err := m.ValidAfter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidBefore", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ValidBefore == nil { + m.ValidBefore = &types.Timestamp{} + } + if err := m.ValidBefore.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EnterpriseMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EnterpriseMeta == nil { + m.EnterpriseMeta = &pbcommon.EnterpriseMeta{} + } + if err := m.EnterpriseMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RaftIndex", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConnect + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConnect + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConnect + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RaftIndex == nil { + m.RaftIndex = &pbcommon.RaftIndex{} + } + if err := m.RaftIndex.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConnect(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthConnect + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthConnect + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipConnect(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConnect + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConnect + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConnect + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthConnect + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthConnect + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowConnect + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipConnect(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthConnect + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthConnect = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowConnect = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/proto/pbconnect/connect.proto consul-1.8.7+dfsg1/proto/pbconnect/connect.proto --- consul-1.7.4+dfsg1/proto/pbconnect/connect.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/pbconnect/connect.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,147 @@ +syntax = "proto3"; + +package connect; + +option go_package = "github.com/hashicorp/consul/proto/pbconnect"; + +import "google/protobuf/timestamp.proto"; +import "proto/pbcommon/common.proto"; +import "proto/pbcommon/common_oss.proto"; + +// CARoots is the list of all currently trusted CA Roots. +message CARoots { + // ActiveRootID is the ID of a root in Roots that is the active CA root. + // Other roots are still valid if they're in the Roots list but are in + // the process of being rotated out. + string ActiveRootID = 1; + + // TrustDomain is the identification root for this Consul cluster. All + // certificates signed by the cluster's CA must have their identifying URI in + // this domain. + // + // This does not include the protocol (currently spiffe://) since we may + // implement other protocols in future with equivalent semantics. It should be + // compared against the "authority" section of a URI (i.e. host:port). + // + // We need to support migrating a cluster between trust domains to support + // Multi-DC migration in Enterprise. In this case the current trust domain is + // here but entries in Roots may also have ExternalTrustDomain set to a + // non-empty value implying they were previous roots that are still trusted + // but under a different trust domain. + // + // Note that we DON'T validate trust domain during AuthZ since it causes + // issues of loss of connectivity during migration between trust domains. The + // only time the additional validation adds value is where the cluster shares + // an external root (e.g. organization-wide root) with another distinct Consul + // cluster or PKI system. In this case, x509 Name Constraints can be added to + // enforce that Consul's CA can only validly sign or trust certs within the + // same trust-domain. Name constraints as enforced by TLS handshake also allow + // seamless rotation between trust domains thanks to cross-signing. + string TrustDomain = 2; + + // Roots is a list of root CA certs to trust. + repeated CARoot Roots = 3; + + // QueryMeta here is mainly used to contain the latest Raft Index that could + // be used to perform a blocking query. + common.QueryMeta QueryMeta = 4; +} + +message CARoot { + // ID is a globally unique ID (UUID) representing this CA root. + string ID = 1; + + // Name is a human-friendly name for this CA root. This value is + // opaque to Consul and is not used for anything internally. + string Name = 2; + + // SerialNumber is the x509 serial number of the certificate. + uint64 SerialNumber = 3; + + // SigningKeyID is the ID of the public key that corresponds to the private + // key used to sign leaf certificates. Is is the HexString format of the + // raw AuthorityKeyID bytes. + string SigningKeyID = 4; + + // ExternalTrustDomain is the trust domain this root was generated under. It + // is usually empty implying "the current cluster trust-domain". It is set + // only in the case that a cluster changes trust domain and then all old roots + // that are still trusted have the old trust domain set here. + // + // We currently DON'T validate these trust domains explicitly anywhere, see + // IndexedRoots.TrustDomain doc. We retain this information for debugging and + // future flexibility. + string ExternalTrustDomain = 5; + + // Time validity bounds. + google.protobuf.Timestamp NotBefore = 6; + google.protobuf.Timestamp NotAfter = 7; + + // RootCert is the PEM-encoded public certificate. + string RootCert = 8; + + // IntermediateCerts is a list of PEM-encoded intermediate certs to + // attach to any leaf certs signed by this CA. + repeated string IntermediateCerts = 9; + + // SigningCert is the PEM-encoded signing certificate and SigningKey + // is the PEM-encoded private key for the signing certificate. These + // may actually be empty if the CA plugin in use manages these for us. + string SigningCert = 10; + string SigningKey = 11; + + // Active is true if this is the current active CA. This must only + // be true for exactly one CA. For any method that modifies roots in the + // state store, tests should be written to verify that multiple roots + // cannot be active. + bool Active = 12; + + // RotatedOutAt is the time at which this CA was removed from the state. + // This will only be set on roots that have been rotated out from being the + // active root. + google.protobuf.Timestamp RotatedOutAt = 13; + + // PrivateKeyType is the type of the private key used to sign certificates. It + // may be "rsa" or "ec". This is provided as a convenience to avoid parsing + // the public key to from the certificate to infer the type. + string PrivateKeyType = 14; + + // PrivateKeyBits is the length of the private key used to sign certificates. + // This is provided as a convenience to avoid parsing the public key from the + // certificate to infer the type. + int32 PrivateKeyBits = 15; + + common.RaftIndex RaftIndex = 16; +} + +message IssuedCert { + // SerialNumber is the unique serial number for this certificate. + // This is encoded in standard hex separated by :. + string SerialNumber = 1; + + // CertPEM and PrivateKeyPEM are the PEM-encoded certificate and private + // key for that cert, respectively. This should not be stored in the + // state store, but is present in the sign API response. + string CertPEM = 2; + string PrivateKeyPEM = 3; + + // Service is the name of the service for which the cert was issued. + // ServiceURI is the cert URI value. + string Service = 4; + string ServiceURI = 5; + + // Agent is the name of the node for which the cert was issued. + // AgentURI is the cert URI value. + string Agent = 6; + string AgentURI = 7; + + // ValidAfter and ValidBefore are the validity periods for the + // certificate. + google.protobuf.Timestamp ValidAfter = 8; + google.protobuf.Timestamp ValidBefore = 9; + + // EnterpriseMeta is the Consul Enterprise specific metadata + common.EnterpriseMeta EnterpriseMeta = 10; + + common.RaftIndex RaftIndex = 11; +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/proto/translate.go consul-1.8.7+dfsg1/proto/translate.go --- consul-1.7.4+dfsg1/proto/translate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/translate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,68 @@ +package proto + +import ( + "reflect" + "time" + + "github.com/gogo/protobuf/types" +) + +var ( + tsType = reflect.TypeOf((*types.Timestamp)(nil)) + timePtrType = reflect.TypeOf((*time.Time)(nil)) + timeType = timePtrType.Elem() + mapStrInf = reflect.TypeOf((map[string]interface{})(nil)) + + epoch1970 = time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC) +) + +// HookPBTimestampToTime is a mapstructure decode hook to translate a protobuf timestamp +// to a time.Time value +func HookPBTimestampToTime(from, to reflect.Type, data interface{}) (interface{}, error) { + if to == timeType && from == tsType { + ts := data.(*types.Timestamp) + if ts.Seconds == 0 && ts.Nanos == 0 { + return time.Time{}, nil + } + return time.Unix(ts.Seconds, int64(ts.Nanos)).UTC(), nil + } + + return data, nil +} + +// HookTimeToPBtimestamp is a mapstructure decode hook to translate a time.Time value to +// a protobuf Timestamp value. +func HookTimeToPBTimestamp(from, to reflect.Type, data interface{}) (interface{}, error) { + // Note that mapstructure doesn't do direct struct to struct conversion in this case. I + // still don't completely understand why converting the PB TS to time.Time does but + // I suspect it has something to do with the struct containing a concrete time.Time + // as opposed to a pointer to a time.Time. Regardless this path through mapstructure + // first will decode the concrete time.Time into a map[string]interface{} before + // eventually decoding that map[string]interface{} into the *types.Timestamp. One + // other note is that mapstructure ends up creating a new Value and sets it it to + // the time.Time value and thats what gets passed to us. That is why we end up + // seeing a *time.Time instead of a time.Time. + if from == timePtrType && to == mapStrInf { + ts := data.(*time.Time) + + // protobuf only supports times from Jan 1 1970 onward but the time.Time type + // can represent values back to year 1. Basically + if ts.Before(epoch1970) { + return map[string]interface{}{}, nil + } + + nanos := ts.UnixNano() + if nanos < 0 { + return map[string]interface{}{}, nil + } + + seconds := nanos / 1000000000 + nanos = nanos % 1000000000 + + return map[string]interface{}{ + "Seconds": seconds, + "Nanos": int32(nanos), + }, nil + } + return data, nil +} diff -Nru consul-1.7.4+dfsg1/proto/translate_test.go consul-1.8.7+dfsg1/proto/translate_test.go --- consul-1.7.4+dfsg1/proto/translate_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/proto/translate_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,86 @@ +package proto + +import ( + "testing" + "time" + + "github.com/gogo/protobuf/types" + "github.com/mitchellh/mapstructure" + + "github.com/stretchr/testify/require" +) + +type pbTSWrapper struct { + Timestamp *types.Timestamp +} + +type timeTSWrapper struct { + Timestamp time.Time +} + +func TestHookPBTimestampToTime(t *testing.T) { + in := pbTSWrapper{ + Timestamp: &types.Timestamp{ + Seconds: 1000, + Nanos: 42, + }, + } + + expected := timeTSWrapper{ + Timestamp: time.Unix(1000, 42).UTC(), + } + + var actual timeTSWrapper + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookPBTimestampToTime, + Result: &actual, + }) + require.NoError(t, err) + require.NoError(t, decoder.Decode(in)) + + require.Equal(t, expected, actual) +} + +func TestHookTimeToPBTimestamp(t *testing.T) { + in := timeTSWrapper{ + Timestamp: time.Unix(999999, 123456).UTC(), + } + + expected := pbTSWrapper{ + Timestamp: &types.Timestamp{ + Seconds: 999999, + Nanos: 123456, + }, + } + + var actual pbTSWrapper + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookTimeToPBTimestamp, + Result: &actual, + }) + require.NoError(t, err) + require.NoError(t, decoder.Decode(in)) + + require.Equal(t, expected, actual) +} + +func TestHookTimeToPBTimestamp_ZeroTime(t *testing.T) { + in := timeTSWrapper{} + + expected := pbTSWrapper{ + Timestamp: &types.Timestamp{ + Seconds: 0, + Nanos: 0, + }, + } + + var actual pbTSWrapper + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: HookTimeToPBTimestamp, + Result: &actual, + }) + require.NoError(t, err) + require.NoError(t, decoder.Decode(in)) + + require.Equal(t, expected, actual) +} diff -Nru consul-1.7.4+dfsg1/README.md consul-1.8.7+dfsg1/README.md --- consul-1.7.4+dfsg1/README.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -1,13 +1,21 @@ # Consul [![CircleCI](https://circleci.com/gh/hashicorp/consul/tree/master.svg?style=svg)](https://circleci.com/gh/hashicorp/consul/tree/master) [![Discuss](https://img.shields.io/badge/discuss-consul-ca2171.svg?style=flat)](https://discuss.hashicorp.com/c/consul) * Website: https://www.consul.io +* Tutorials: [HashiCorp Learn](https://learn.hashicorp.com/consul) * Forum: [Discuss](https://discuss.hashicorp.com/c/consul) -Consul is a tool for service discovery and configuration. Consul is -distributed, highly available, and extremely scalable. +Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. Consul provides several key features: +* **Multi-Datacenter** - Consul is built to be datacenter aware, and can + support any number of regions without complex configuration. + +* **Service Mesh/Service Segmentation** - Consul Connect enables secure service-to-service + communication with automatic TLS encryption and identity-based authorization. Applications + can use sidecar proxies in a service mesh configuration to establish TLS + connections for inbound and outbound connections without being aware of Connect at all. + * **Service Discovery** - Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. External services such as SaaS providers can be registered as well. @@ -21,14 +29,6 @@ dynamic configuration, feature flagging, coordination, leader election and more. The simple HTTP API makes it easy to use anywhere. -* **Multi-Datacenter** - Consul is built to be datacenter aware, and can - support any number of regions without complex configuration. - -* **Service Segmentation/Service Mesh** - Consul Connect enables secure service-to-service - communication with automatic TLS encryption and identity-based authorization. Applications - can use sidecar proxies in a service mesh configuration to establish TLS - connections for inbound and outbound connections without being aware of Connect at all. - Consul runs on Linux, Mac OS X, FreeBSD, Solaris, and Windows. A commercial version called [Consul Enterprise](https://www.hashicorp.com/products/consul) is also available. @@ -41,9 +41,10 @@ A few quick start guides are available on the Consul website: -* **Standalone binary install:** https://learn.hashicorp.com/consul/getting-started/install.html -* **Kubernetes install:** https://learn.hashicorp.com/consul/kubernetes/kubernetes-deployment-guide -* **Minikube install:** https://learn.hashicorp.com/consul/kubernetes/minikube +* **Standalone binary install:** https://learn.hashicorp.com/tutorials/consul/get-started-install +* **Minikube install:** https://learn.hashicorp.com/tutorials/consul/kubernetes-minikube +* **Kind install:** https://learn.hashicorp.com/tutorials/consul/kubernetes-kind +* **Kubernetes install:** https://learn.hashicorp.com/tutorials/consul/kubernetes-deployment-guide ## Documentation diff -Nru consul-1.7.4+dfsg1/sdk/freeport/ephemeral_darwin.go consul-1.8.7+dfsg1/sdk/freeport/ephemeral_darwin.go --- consul-1.7.4+dfsg1/sdk/freeport/ephemeral_darwin.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/freeport/ephemeral_darwin.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,37 @@ +//+build darwin + +package freeport + +import ( + "fmt" + "os/exec" + "regexp" + "strconv" +) + +const ephemeralPortRangeSysctlFirst = "net.inet.ip.portrange.first" +const ephemeralPortRangeSysctlLast = "net.inet.ip.portrange.last" + +var ephemeralPortRangePatt = regexp.MustCompile(`^\s*(\d+)\s+(\d+)\s*$`) + +func getEphemeralPortRange() (int, int, error) { + cmd := exec.Command("/usr/sbin/sysctl", "-n", ephemeralPortRangeSysctlFirst, ephemeralPortRangeSysctlLast) + out, err := cmd.Output() + if err != nil { + return 0, 0, err + } + + val := string(out) + + m := ephemeralPortRangePatt.FindStringSubmatch(val) + if m != nil { + min, err1 := strconv.Atoi(m[1]) + max, err2 := strconv.Atoi(m[2]) + + if err1 == nil && err2 == nil { + return min, max, nil + } + } + + return 0, 0, fmt.Errorf("unexpected sysctl value %q for keys %q, %q", val, ephemeralPortRangeSysctlFirst, ephemeralPortRangeSysctlLast) +} diff -Nru consul-1.7.4+dfsg1/sdk/freeport/ephemeral_darwin_test.go consul-1.8.7+dfsg1/sdk/freeport/ephemeral_darwin_test.go --- consul-1.7.4+dfsg1/sdk/freeport/ephemeral_darwin_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/freeport/ephemeral_darwin_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +//+build darwin + +package freeport + +import ( + "testing" +) + +func TestGetEphemeralPortRange(t *testing.T) { + min, max, err := getEphemeralPortRange() + if err != nil { + t.Fatalf("err: %v", err) + } + if min <= 0 || max <= 0 || min > max { + t.Fatalf("unexpected values: min=%d, max=%d", min, max) + } + t.Logf("min=%d, max=%d", min, max) +} diff -Nru consul-1.7.4+dfsg1/sdk/freeport/ephemeral_fallback.go consul-1.8.7+dfsg1/sdk/freeport/ephemeral_fallback.go --- consul-1.7.4+dfsg1/sdk/freeport/ephemeral_fallback.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/freeport/ephemeral_fallback.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,4 @@ -//+build !linux +//+build !linux,!darwin package freeport diff -Nru consul-1.7.4+dfsg1/sdk/freeport/freeport.go consul-1.8.7+dfsg1/sdk/freeport/freeport.go --- consul-1.7.4+dfsg1/sdk/freeport/freeport.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/freeport/freeport.go 2020-12-10 21:46:52.000000000 +0000 @@ -66,6 +66,14 @@ // total is the total number of available ports in the block for use. total int + + // stopCh is used to signal to background goroutines to terminate. Only + // really exists for the safety of reset() during unit tests. + stopCh chan struct{} + + // stopWg is used to keep track of background goroutines that are still + // alive. Only really exists for the safety of reset() during unit tests. + stopWg sync.WaitGroup ) // initialize is used to initialize freeport. @@ -108,16 +116,36 @@ } total = freePorts.Len() - go checkFreedPorts() + stopWg.Add(1) + stopCh = make(chan struct{}) + // Note: we pass this param explicitly to the goroutine so that we can + // freely recreate the underlying stop channel during reset() after closing + // the original. + go checkFreedPorts(stopCh) +} + +func shutdownGoroutine() { + mu.Lock() + if stopCh == nil { + mu.Unlock() + return + } + + close(stopCh) + stopCh = nil + mu.Unlock() + + stopWg.Wait() } // reset will reverse the setup from initialize() and then redo it (for tests) func reset() { + logf("INFO", "resetting the freeport package state") + shutdownGoroutine() + mu.Lock() defer mu.Unlock() - logf("INFO", "resetting the freeport package state") - effectiveMaxBlocks = 0 firstPort = 0 if lockLn != nil { @@ -132,11 +160,18 @@ total = 0 } -func checkFreedPorts() { +func checkFreedPorts(stopCh <-chan struct{}) { + defer stopWg.Done() + ticker := time.NewTicker(250 * time.Millisecond) for { - <-ticker.C - checkFreedPortsOnce() + select { + case <-stopCh: + logf("INFO", "Closing checkFreedPorts()") + return + case <-ticker.C: + checkFreedPortsOnce() + } } } diff -Nru consul-1.7.4+dfsg1/sdk/.golangci.yml consul-1.8.7+dfsg1/sdk/.golangci.yml --- consul-1.7.4+dfsg1/sdk/.golangci.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/.golangci.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +linters: + disable-all: true + enable: + - gofmt + - govet + - unconvert + - staticcheck + - ineffassign + +issues: + # Disable the default exclude list so that all excludes are explicitly + # defined in this file. + exclude-use-default: false + + exclude-rules: + # Temp Ignore SA9004: only the first constant in this group has an explicit type + # https://staticcheck.io/docs/checks#SA9004 + - linters: [staticcheck] + text: "SA9004:" + + # Temp ignore SA2002: the goroutine calls T.Fatalf, which must be called in the same goroutine as the test + - linters: [staticcheck] + text: "SA2002:" + +linters-settings: + gofmt: + simplify: false + +run: + timeout: 5m diff -Nru consul-1.7.4+dfsg1/sdk/testutil/assertions.go consul-1.8.7+dfsg1/sdk/testutil/assertions.go --- consul-1.7.4+dfsg1/sdk/testutil/assertions.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/testutil/assertions.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ +package testutil + +import ( + "strings" + "testing" +) + +// RequireErrorContains is a test helper for asserting that an error occurred +// and the error message returned contains the expected error message as a +// substring. +func RequireErrorContains(t *testing.T, err error, expectedErrorMessage string) { + t.Helper() + if err == nil { + t.Fatal("An error is expected but got nil.") + } + if !strings.Contains(err.Error(), expectedErrorMessage) { + t.Fatalf("unexpected error: %v", err) + } +} diff -Nru consul-1.7.4+dfsg1/sdk/testutil/io.go consul-1.8.7+dfsg1/sdk/testutil/io.go --- consul-1.7.4+dfsg1/sdk/testutil/io.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/testutil/io.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,21 +29,28 @@ } } +var noCleanup = strings.ToLower(os.Getenv("TEST_NOCLEANUP")) == "true" + // TempDir creates a temporary directory within tmpdir // with the name 'testname-name'. If the directory cannot // be created t.Fatal is called. func TempDir(t *testing.T, name string) string { - if t != nil && t.Name() != "" { - name = t.Name() + "-" + name + if t == nil { + panic("argument t must be non-nil") } + name = t.Name() + "-" + name name = strings.Replace(name, "/", "_", -1) d, err := ioutil.TempDir(tmpdir, name) if err != nil { - if t == nil { - panic(err) - } t.Fatalf("err: %s", err) } + t.Cleanup(func() { + if noCleanup { + t.Logf("skipping cleanup because TEST_NOCLEANUP was enabled") + return + } + os.RemoveAll(d) + }) return d } diff -Nru consul-1.7.4+dfsg1/sdk/testutil/README.md consul-1.8.7+dfsg1/sdk/testutil/README.md --- consul-1.7.4+dfsg1/sdk/testutil/README.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/testutil/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -27,7 +27,7 @@ func TestFoo_bar(t *testing.T) { // Create a test Consul server - srv1, err := testutil.NewTestServerT(t) + srv1, err := testutil.NewTestServerConfigT(t, nil) if err != nil { t.Fatal(err) } diff -Nru consul-1.7.4+dfsg1/sdk/testutil/retry/retry.go consul-1.8.7+dfsg1/sdk/testutil/retry/retry.go --- consul-1.7.4+dfsg1/sdk/testutil/retry/retry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/testutil/retry/retry.go 2020-12-10 21:46:52.000000000 +0000 @@ -23,6 +23,8 @@ // Failer is an interface compatible with testing.T. type Failer interface { + Helper() + // Log is called for the final test output Log(args ...interface{}) @@ -116,6 +118,7 @@ func run(r Retryer, t Failer, f func(r *R)) { rr := &R{} fail := func() { + t.Helper() out := dedup(rr.output) if out != "" { t.Log(out) diff -Nru consul-1.7.4+dfsg1/sdk/testutil/server.go consul-1.8.7+dfsg1/sdk/testutil/server.go --- consul-1.7.4+dfsg1/sdk/testutil/server.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/testutil/server.go 2020-12-10 21:46:52.000000000 +0000 @@ -88,7 +88,6 @@ ACLDatacenter string `json:"acl_datacenter,omitempty"` PrimaryDatacenter string `json:"primary_datacenter,omitempty"` ACLDefaultPolicy string `json:"acl_default_policy,omitempty"` - ACLEnforceVersion8 bool `json:"acl_enforce_version_8"` ACL TestACLs `json:"acl,omitempty"` Encrypt string `json:"encrypt,omitempty"` CAFile string `json:"ca_file,omitempty"` @@ -102,7 +101,8 @@ Connect map[string]interface{} `json:"connect,omitempty"` EnableDebug bool `json:"enable_debug,omitempty"` ReadyTimeout time.Duration `json:"-"` - Stdout, Stderr io.Writer `json:"-"` + Stdout io.Writer `json:"-"` + Stderr io.Writer `json:"-"` Args []string `json:"-"` ReturnPorts func() `json:"-"` } @@ -133,13 +133,14 @@ // defaultServerConfig returns a new TestServerConfig struct // with all of the listen ports incremented by one. -func defaultServerConfig() *TestServerConfig { +func defaultServerConfig(t CleanupT) *TestServerConfig { nodeID, err := uuid.GenerateUUID() if err != nil { panic(err) } ports := freeport.MustTake(6) + logBuffer := NewLogBuffer(t) return &TestServerConfig{ NodeName: "node-" + nodeID, @@ -172,6 +173,8 @@ ReturnPorts: func() { freeport.Return(ports) }, + Stdout: logBuffer, + Stderr: logBuffer, } } @@ -212,34 +215,11 @@ tmpdir string } -// Deprecated: Use NewTestServerT instead. -func NewTestServer() (*TestServer, error) { - return NewTestServerConfigT(nil, nil) -} - -// NewTestServerT is an easy helper method to create a new Consul -// test server with the most basic configuration. -func NewTestServerT(t *testing.T) (*TestServer, error) { - if t == nil { - return nil, errors.New("testutil: a non-nil *testing.T is required") - } - return NewTestServerConfigT(t, nil) -} - -func NewTestServerConfig(cb ServerConfigCallback) (*TestServer, error) { - return NewTestServerConfigT(nil, cb) -} - // NewTestServerConfig creates a new TestServer, and makes a call to an optional // callback function to modify the configuration. If there is an error // configuring or starting the server, the server will NOT be running when the // function returns (thus you do not need to stop it). func NewTestServerConfigT(t testing.TB, cb ServerConfigCallback) (*TestServer, error) { - return newTestServerConfigT(t, cb) -} - -// newTestServerConfigT is the internal helper for NewTestServerConfigT. -func newTestServerConfigT(t testing.TB, cb ServerConfigCallback) (*TestServer, error) { path, err := exec.LookPath("consul") if err != nil || path == "" { return nil, fmt.Errorf("consul not found on $PATH - download and install " + @@ -256,11 +236,7 @@ return nil, errors.Wrap(err, "failed to create tempdir") } - cfg := defaultServerConfig() - testWriter := TestWriter(t) - cfg.Stdout = testWriter - cfg.Stderr = testWriter - + cfg := defaultServerConfig(t) cfg.DataDir = filepath.Join(tmpdir, "data") if cb != nil { cb(cfg) @@ -273,10 +249,7 @@ return nil, errors.Wrap(err, "failed marshaling json") } - if t != nil { - // if you really want this output ensure to pass a valid t - t.Logf("CONFIG JSON: %s", string(b)) - } + t.Logf("CONFIG JSON: %s", string(b)) configFile := filepath.Join(tmpdir, "config.json") if err := ioutil.WriteFile(configFile, b, 0644); err != nil { cfg.ReturnPorts() @@ -284,21 +257,12 @@ return nil, errors.Wrap(err, "failed writing config content") } - stdout := testWriter - if cfg.Stdout != nil { - stdout = cfg.Stdout - } - stderr := testWriter - if cfg.Stderr != nil { - stderr = cfg.Stderr - } - // Start the server args := []string{"agent", "-config-file", configFile} args = append(args, cfg.Args...) cmd := exec.Command("consul", args...) - cmd.Stdout = stdout - cmd.Stderr = stderr + cmd.Stdout = cfg.Stdout + cmd.Stderr = cfg.Stderr if err := cmd.Start(); err != nil { cfg.ReturnPorts() os.RemoveAll(tmpdir) @@ -332,7 +296,9 @@ // Wait for the server to be ready if err := server.waitForAPI(); err != nil { - server.Stop() + if err := server.Stop(); err != nil { + t.Logf("server stop failed with: %v", err) + } return nil, err } @@ -367,9 +333,12 @@ return s.cmd.Wait() } -// waitForAPI waits for only the agent HTTP endpoint to start +// waitForAPI waits for the /status/leader HTTP endpoint to start // responding. This is an indication that the agent has started, // but will likely return before a leader is elected. +// Note: We do not check for a successful response status because +// we want this function to return without error even when +// there's no leader elected. func (s *TestServer) waitForAPI() error { var failed bool @@ -381,17 +350,13 @@ for !time.Now().After(deadline) { time.Sleep(timer.Wait) - resp, err := s.HTTPClient.Get(s.url("/v1/agent/self")) + url := s.url("/v1/status/leader") + _, err := s.masterGet(url) if err != nil { failed = true continue } - resp.Body.Close() - if err = s.requireOK(resp); err != nil { - failed = true - continue - } failed = false } if failed { @@ -407,7 +372,7 @@ retry.Run(t, func(r *retry.R) { // Query the API and check the status code. url := s.url("/v1/catalog/nodes") - resp, err := s.HTTPClient.Get(url) + resp, err := s.masterGet(url) if err != nil { r.Fatalf("failed http get '%s': %v", url, err) } @@ -443,7 +408,7 @@ retry.Run(t, func(r *retry.R) { // Query the API and check the status code. url := s.url("/v1/agent/connect/ca/roots") - resp, err := s.HTTPClient.Get(url) + resp, err := s.masterGet(url) if err != nil { r.Fatalf("failed http get '%s': %v", url, err) } @@ -475,7 +440,7 @@ retry.Run(t, func(r *retry.R) { // Query the API and check the status code. url := s.url("/v1/catalog/nodes?index=0") - resp, err := s.HTTPClient.Get(url) + resp, err := s.masterGet(url) if err != nil { r.Fatal("failed http get", err) } @@ -496,7 +461,7 @@ // Ensure the serfHealth check is registered url = s.url(fmt.Sprintf("/v1/health/node/%s", payload[0]["Node"])) - resp, err = s.HTTPClient.Get(url) + resp, err = s.masterGet(url) if err != nil { r.Fatal("failed http get", err) } @@ -521,3 +486,14 @@ } }) } + +func (s *TestServer) masterGet(url string) (*http.Response, error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + if s.Config.ACL.Tokens.Master != "" { + req.Header.Set("x-consul-token", s.Config.ACL.Tokens.Master) + } + return s.HTTPClient.Do(req) +} diff -Nru consul-1.7.4+dfsg1/sdk/testutil/testlog.go consul-1.8.7+dfsg1/sdk/testutil/testlog.go --- consul-1.7.4+dfsg1/sdk/testutil/testlog.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/sdk/testutil/testlog.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,37 +1,17 @@ package testutil import ( - "fmt" + "bytes" "io" - "io/ioutil" - "log" "os" - "strings" + "sync" "testing" "github.com/hashicorp/go-hclog" ) -var sendTestLogsToStdout bool - -func init() { - sendTestLogsToStdout = os.Getenv("NOLOGBUFFER") == "1" -} - -// Deprecated: use Logger(t) -func TestLogger(t testing.TB) *log.Logger { - return log.New(&testWriter{t}, t.Name()+": ", log.LstdFlags) -} - -func NewDiscardLogger() hclog.Logger { - return hclog.New(&hclog.LoggerOptions{ - Level: 0, - Output: ioutil.Discard, - }) -} - func Logger(t testing.TB) hclog.InterceptLogger { - return LoggerWithOutput(t, &testWriter{t}) + return LoggerWithOutput(t, NewLogBuffer(t)) } func LoggerWithOutput(t testing.TB, output io.Writer) hclog.InterceptLogger { @@ -42,48 +22,41 @@ }) } -// Deprecated: use LoggerWithName(t) -func TestLoggerWithName(t testing.TB, name string) *log.Logger { - return log.New(&testWriter{t}, "test["+name+"]: ", log.LstdFlags) -} +var sendTestLogsToStdout = os.Getenv("NOLOGBUFFER") == "1" -func LoggerWithName(t testing.TB, name string) hclog.InterceptLogger { - return hclog.NewInterceptLogger(&hclog.LoggerOptions{ - Name: "test[" + name + "]", - Level: hclog.Debug, - Output: &testWriter{t}, +// NewLogBuffer returns an io.Writer which buffers all writes. When the test +// ends, t.Failed is checked. If the test has failed or has been run in verbose +// mode all log output is printed to stdout. +// +// Set the env var NOLOGBUFFER=1 to disable buffering, resulting in all log +// output being written immediately to stdout. +func NewLogBuffer(t CleanupT) io.Writer { + if sendTestLogsToStdout { + return os.Stdout + } + buf := &logBuffer{buf: new(bytes.Buffer)} + t.Cleanup(func() { + if t.Failed() || testing.Verbose() { + buf.Lock() + defer buf.Unlock() + buf.buf.WriteTo(os.Stdout) + } }) + return buf } -func TestWriter(t testing.TB) io.Writer { - return &testWriter{t} +type CleanupT interface { + Cleanup(f func()) + Failed() bool } -type testWriter struct { - t testing.TB +type logBuffer struct { + buf *bytes.Buffer + sync.Mutex } -func (tw *testWriter) Write(p []byte) (n int, err error) { - if tw.t != nil { - tw.t.Helper() - } - if sendTestLogsToStdout || tw.t == nil { - fmt.Fprint(os.Stdout, strings.TrimSpace(string(p))+"\n") - } else { - defer func() { - if r := recover(); r != nil { - if sr, ok := r.(string); ok { - if strings.HasPrefix(sr, "Log in goroutine after ") { - // These sorts of panics are undesirable, but requires - // total control over goroutine lifetimes to correct. - fmt.Fprint(os.Stdout, "SUPPRESSED PANIC: "+sr+"\n") - return - } - } - panic(r) - } - }() - tw.t.Log(strings.TrimSpace(string(p))) - } - return len(p), nil +func (lb *logBuffer) Write(p []byte) (n int, err error) { + lb.Lock() + defer lb.Unlock() + return lb.buf.Write(p) } diff -Nru consul-1.7.4+dfsg1/snapshot/snapshot_test.go consul-1.8.7+dfsg1/snapshot/snapshot_test.go --- consul-1.7.4+dfsg1/snapshot/snapshot_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/snapshot/snapshot_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -239,7 +239,6 @@ // Make a Raft and populate it with some data. We tee everything we // apply off to a buffer for checking post-snapshot. - var expected []bytes.Buffer entries := 64 * 1024 before, _ := makeRaft(t, filepath.Join(dir, "before")) defer before.Shutdown() @@ -253,7 +252,6 @@ future := before.Apply(log.Bytes(), time.Second) require.NoError(t, future.Error()) - expected = append(expected, copy) } // Take a snapshot. diff -Nru consul-1.7.4+dfsg1/test/hostname/Betty.cfg consul-1.8.7+dfsg1/test/hostname/Betty.cfg --- consul-1.7.4+dfsg1/test/hostname/Betty.cfg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Betty.cfg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +[req] +prompt = no +distinguished_name = dn +req_extensions = v3_req + +[dn] +C = US +ST = California +L = Los Angeles +O = End Point +OU = Testing +emailAddress = do-not-reply@hashicorp.com +CN = Betty + +[v3_req] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = server.dc2.consul +DNS.2 = betty.server.dc2.consul diff -Nru consul-1.7.4+dfsg1/test/hostname/Betty.crt consul-1.8.7+dfsg1/test/hostname/Betty.crt --- consul-1.7.4+dfsg1/test/hostname/Betty.crt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Betty.crt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID7DCCAtSgAwIBAgIBHDANBgkqhkiG9w0BAQUFADCBmTELMAkGA1UEBhMCVVMx +EzARBgNVBAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMRkwFwYD +VQQKExBIYWhpQ29ycCBUZXN0IENBMQ0wCwYDVQQLEwRUZXN0MREwDwYDVQQDEwhD +ZXJ0QXV0aDEiMCAGCSqGSIb3DQEJARYTamFtZXNAaGFzaGljb3JwLmNvbTAgFw0x +OTEyMTEyMTQzMzlaGA8yMTE5MTExNzIxNDMzOVowgYMxDjAMBgNVBAMMBUJldHR5 +MRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYDVQQGEwJVUzEpMCcGCSqGSIb3DQEJ +ARYaZG8tbm90LXJlcGx5QGhhc2hpY29ycC5jb20xEjAQBgNVBAoMCUVuZCBQb2lu +dDEQMA4GA1UECwwHVGVzdGluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAPU04u9/94fgQZMwCHR9gX6yBfJV6m7hTxR7rQv8GXaaCYVVisH2NmW6KcrZ +hjUqsvPpm63vEZasYC2blqlLnQCmJyOemnx9v0WEX9SLM3w8ihjbGhSq6VqaCeGH +s3jaxe9Bx8anR1tWiz2AoEEP1SzHgBQv08swDdWZsFKqnXntwqKqZcegIQMelxW+ +iofAtSRZcwhbQUrpgaarxStuvpxqt1y/rbS27H1cf9U4CLysKClOIIJE3l7rqKCb +R5uYyQd07nZC+R7/83TX1AGFvk55QujB9Pm9p6RbjHJWZ5CLPtpiQhpMwYw1JluN +1KSwnpDDreCWMw+yEchlAnpw3/cCAwEAAaNRME8wCQYDVR0TBAIwADALBgNVHQ8E +BAMCBeAwNQYDVR0RBC4wLIIRc2VydmVyLmRjMi5jb25zdWyCF2JldHR5LnNlcnZl +ci5kYzIuY29uc3VsMA0GCSqGSIb3DQEBBQUAA4IBAQBvGhMpUHmw3j7+sj0D+mCz ++bBhZH6HEpy6TLjS1GfO0/fyO2DIcPMHNTdNqmoDTt33scS53155jEhCI8Wtb6LY +Mvoo0wwnQtGvuqyscnJldAQ++08N2bjJq9iQoG1gB9oPWOxRe4tjbSoJNl1X3a0u +jwjKwOl0HX23WMy3S5mIKuOBuT79/nY/rVlFP1fsna4TKO1ocXjK5JnQ9TKdGTRH +9STT/RPIIQvWg+zeDS+ZlMocZEq7NT63d2BzH2ZiV6VRZM0PSyEixE0fqfxPxA2D ++fqeDl8iRR4tPIifkDFZLoMiHDa7Ciqh1hgdMUk1tkPZpxy+XP+AzI/K/3Tnceer +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/test/hostname/Betty.ext consul-1.8.7+dfsg1/test/hostname/Betty.ext --- consul-1.7.4+dfsg1/test/hostname/Betty.ext 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Betty.ext 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = server.dc2.consul +DNS.2 = betty.server.dc2.consul diff -Nru consul-1.7.4+dfsg1/test/hostname/Betty.key consul-1.8.7+dfsg1/test/hostname/Betty.key --- consul-1.7.4+dfsg1/test/hostname/Betty.key 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Betty.key 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD1NOLvf/eH4EGT +MAh0fYF+sgXyVepu4U8Ue60L/Bl2mgmFVYrB9jZluinK2YY1KrLz6Zut7xGWrGAt +m5apS50Apicjnpp8fb9FhF/UizN8PIoY2xoUqulamgnhh7N42sXvQcfGp0dbVos9 +gKBBD9Usx4AUL9PLMA3VmbBSqp157cKiqmXHoCEDHpcVvoqHwLUkWXMIW0FK6YGm +q8Urbr6cardcv620tux9XH/VOAi8rCgpTiCCRN5e66igm0ebmMkHdO52Qvke//N0 +19QBhb5OeULowfT5vaekW4xyVmeQiz7aYkIaTMGMNSZbjdSksJ6Qw63gljMPshHI +ZQJ6cN/3AgMBAAECggEARpwMHVuENCRnvbK/PIxHlew9uiLzdyp6UzOqCSF3U6fX +xgV0B5aW44RQNJGfDABXt9U1d0i4j+Ljbz62i9myRFWUP7WUVvT+902/Kr1K/iOQ +wMeXIwx0Vhq1bbReAhc9mEAg/xt8eNjbD8LSYunkQRjR0P5UxtX3peKz25o17r3w +U5lpvbYzm/k376Dhr2RBr30jrrf2rh06+FQCc2dF2mK1j7+YKbIHK+BKQYtQeVyg +XYpJfJTsuHFojwZNGXEuidkGApuokTS0HiAuAjrCQsn4cUftXnUtE2HJgsCum/Bp +Kb74ahBbZCITXCRSKZCi6p9oFcHQ30JDCCz4Qy9HgQKBgQD/dzWYKzI29ihQmeLN +ntHRl4RTjO4LfCs6lr8ul5nFOcgGwSwaFaTbqq0oJefCqEH+wmH1Jbd5nfRi7PWr +uGibeZnLdiseHHMsvN8l6PY3tVCm3kJL5Ze2TY+n8/7eUPcmH60CFikqO53ahjV3 +9PtUBr5BUe1xUJ6T4zegqZKWbwKBgQD1uC8PfrIMGLmq9l3x3T2pAbmfz0N3DfUs +ncY+JCQRkBkWJk3oW8ITBZagCwvg4AnhbGvNgbAaPGEQ9HL7f19ieJeHxEaVtTY2 +kKDwelPHT06oCu2AZ8h1Zqfn55O/HtGO/MuTdFa9IKjGYJTUvSBy3VVd8gnK9MBV +fhUtEqNS+QKBgQC33NR18KDzbbcWS6sw0l2wu5xBhezN11BFmrl+jx3dFPkh42Ya +X/mHIBAAFUf4kaDt+nkGN18V6Nk7WdB3BwJC5AIMrb/arB8407bHUiPjdFvXvZ95 +gITwcGI0PyfwWdWHWsTp+4klHENAQ9e3vlok37WOzahXJe78AUzIFUOrgQKBgQCb +qC3Htw67Mv6LGr6wdOKWqY0Ze4bVaHYj6V6oBuUCazI5IdLAmz/6JNQiVl0T+1jH +AJPZ/4m7VPx4bSJZx3p5OsNjMic0tzK8pioNrLBd1hORyDpj2VrXZEyBT+X8cF14 +IxQjONOpw4KnCI+/pH9lxGhLtwQVGa6tec2YW/IyoQKBgQCMr00Z1/+edBh/s+Ho +p87Wwf3vRtRZLniVdc1jVk9raK6azrFS+vBzpkWZatLu5Grtwl/9HYNTu+AnfKGP +jyRkCx0i5qgEQobYkiAJeFocyDVbzaDdZBhTAINN9uaSDH1JpGNlIBxIflzT0adf +OCBbgQ6SaTH+MWvYJ1KJPsQVkw== +-----END PRIVATE KEY----- diff -Nru consul-1.7.4+dfsg1/test/hostname/Bob.cfg consul-1.8.7+dfsg1/test/hostname/Bob.cfg --- consul-1.7.4+dfsg1/test/hostname/Bob.cfg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bob.cfg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +[req] +prompt = no +distinguished_name = dn +req_extensions = v3_req + +[dn] +C = US +ST = California +L = Los Angeles +O = End Point +OU = Testing +emailAddress = do-not-reply@hashicorp.com +CN = Bob + +[v3_req] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = server.dc1.consul +DNS.2 = bob.server.dc1.consul diff -Nru consul-1.7.4+dfsg1/test/hostname/Bob.crt consul-1.8.7+dfsg1/test/hostname/Bob.crt --- consul-1.7.4+dfsg1/test/hostname/Bob.crt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bob.crt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID6DCCAtCgAwIBAgIBGzANBgkqhkiG9w0BAQUFADCBmTELMAkGA1UEBhMCVVMx +EzARBgNVBAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMRkwFwYD +VQQKExBIYWhpQ29ycCBUZXN0IENBMQ0wCwYDVQQLEwRUZXN0MREwDwYDVQQDEwhD +ZXJ0QXV0aDEiMCAGCSqGSIb3DQEJARYTamFtZXNAaGFzaGljb3JwLmNvbTAgFw0x +OTEyMDQyMDMzMjhaGA8yMTE5MTExMDIwMzMyOFowgYExDDAKBgNVBAMMA0JvYjET +MBEGA1UECAwKQ2FsaWZvcm5pYTELMAkGA1UEBhMCVVMxKTAnBgkqhkiG9w0BCQEW +GmRvLW5vdC1yZXBseUBoYXNoaWNvcnAuY29tMRIwEAYDVQQKDAlFbmQgUG9pbnQx +EDAOBgNVBAsMB1Rlc3RpbmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQC+TMR+iyWgqvEmaqDTS7AaK5M18oPF47dDPm/o6/RbPRDO1KfcXXaJCk14tTd2 +BbgUPHyuOf5CfEQIBc3JgI8Aj4nTY56Fo7Zz0igEOd2tXBe0scx0dXZPrRnnUfg1 +tG8kBJGYL4wR7Bd8N0xCpZK4+6NWyEkGmiTCI+NoVevhadGDrTlLbs+1GvzuufUB +OnVsam28beDfFI7JoGFpV/wbu93C3BUs2yg7wvHrAw2uvA0K5A05Vk+w61gW9bKW +HNGvOzTIr5ZWYFLYO2xNq/9vbmnX/teYiMWd7OkZbwTssbV2L9NJ0hML7fd48Rb9 +3jjXAXCqHQgliqUZ45aTQEqlAgMBAAGjTzBNMAkGA1UdEwQCMAAwCwYDVR0PBAQD +AgXgMDMGA1UdEQQsMCqCEXNlcnZlci5kYzEuY29uc3VsghVib2Iuc2VydmVyLmRj +MS5jb25zdWwwDQYJKoZIhvcNAQEFBQADggEBAGx4NH6cUIfLf4e/lvBDZFmd2qI9 ++uYC0kjdbf8mZuyVvpbtaWHqVUdfGRXjYJUi6+T7MSzhx5hhtXEwkKRDQWO3DPkE +kOOh+NEfeWm0Qsz41TlEJmZnpZP4sF37qO8uquFL4gVO4fHlybjL43XoaUiGsJ6o +jDQWqPZTArUDKz3SfvRc00VLc2TQ0neLVcAl24m5t3MNaN1UZ4PI2cXfC6HtAiVz +9V7IgRtM38YTYe8MzkiXCwFUVubTSyOOexxtoY8TuYEvyGcUocsz+G+SzK3gieB7 +D4MxZbgQzSOGtlDx9G7K5AWw+rqzReehDuzkI9itFXBAHKjudycE25a3xUQ= +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/test/hostname/Bob.ext consul-1.8.7+dfsg1/test/hostname/Bob.ext --- consul-1.7.4+dfsg1/test/hostname/Bob.ext 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bob.ext 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = server.dc1.consul +DNS.2 = bob.server.dc1.consul diff -Nru consul-1.7.4+dfsg1/test/hostname/Bob.key consul-1.8.7+dfsg1/test/hostname/Bob.key --- consul-1.7.4+dfsg1/test/hostname/Bob.key 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bob.key 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+TMR+iyWgqvEm +aqDTS7AaK5M18oPF47dDPm/o6/RbPRDO1KfcXXaJCk14tTd2BbgUPHyuOf5CfEQI +Bc3JgI8Aj4nTY56Fo7Zz0igEOd2tXBe0scx0dXZPrRnnUfg1tG8kBJGYL4wR7Bd8 +N0xCpZK4+6NWyEkGmiTCI+NoVevhadGDrTlLbs+1GvzuufUBOnVsam28beDfFI7J +oGFpV/wbu93C3BUs2yg7wvHrAw2uvA0K5A05Vk+w61gW9bKWHNGvOzTIr5ZWYFLY +O2xNq/9vbmnX/teYiMWd7OkZbwTssbV2L9NJ0hML7fd48Rb93jjXAXCqHQgliqUZ +45aTQEqlAgMBAAECggEAWrzeAHy2r1py699x2e5ABOp8IgAF5wjCbHTMBaLke9Ct +QAHUHFYQXB2mfQTjcgoeEMAarzSF0QvRoIWr7wW2qgzHKh1ZC93Y9Hbjj8hLtAqy +Xv1cQLd1d15ReKP0Fx920xS+m3Moda8+L4NqgGjUghGye4G6mERNfKiCGVDGzU7F +5ayIHR60BRiwsODJ7jr5ajcXoTHQ34gRLz/hB6S72sLAwEjGedpqpd79LNXkSdiP +axEW9nJVodc286WToR2YSSDezvIKgpZDy9onvBFmIyZIKuALmk10YNTrL1SfgR2C +wIjeHmfukgnlWzNFLB8bx0PBnaINSgxfdDa6ZYaaIQKBgQDmFWvmXUcW+SOidjUV +QTS5gjejYdDmB49y9x4eUffyHwA0wJWpiXE9TCy+PjLi1WIineHiaAmNngEU/IHF +NBi127opbU6CftvW7dGdv2IJxaN2IePSmlsLD8XItD+ZbhcZnHy4bLF8gIdttxXS +GZPHzesY0EqKCyb5ygjQ1wjZmQKBgQDTvCj6cLmVbV89wJMB2rSTglD9B2iwJnHX +wiX7bedc579odjUpTOmbPTxn9aI1MJeE9aKFuQP6NspOSXKQqlXjheXCs4d4jWmD +EQpL8dtHzXVdZf/2+RtuCYafpMRXFvraQjg5TdHT7ezQco74tW3CW2YUVdKyslNn +R1EWlzyY7QKBgQCotlyAdzWBqv5uSq9x/nZi8RFLRJahljmh24LCSOi/KexEwlL8 +FkRq5kiI16MIod9r8smH8zHOHmY8tUuTBzh3Yb+IURaYqd0aJRjny0ZgVAQgw4kD +DRxlaBNnsIRSRV+67/ykX09mM/kagn4Fqaurf1s8vr9pqfPShksgmA1tQQKBgE98 +lLmn9dOl8ppBIC8TBrVVt8e1r1RpqlVAOngQQ0n6aj3yGnT9vbkcnP++E/351vgA +KtoeoeKeDQakxhCPEZ1Pl/im4xWbqN+eVwo5qoNjG0tLznLOA8EkbFikR10WcGfd +cjP5BeuUp1F9oDS4D5NmMoUxzt5s2ais+kEL16DlAoGBAKoyjZDTv8mG0YCv4W92 +Quv8+KxE5+7qGjckDZh1tZGQjU6br1QccPAXZmlRbAJD1c90uUO+Kkx27FFJrB4t +A9jCUpXUv78PyvqX3IUW8H555n/a0M37A0xnkqm91LddkKmAbkQvt6oel5rNbt2+ +QeYzS1O8PX+zTLGf64h8Ajwt +-----END PRIVATE KEY----- diff -Nru consul-1.7.4+dfsg1/test/hostname/Bonnie.cfg consul-1.8.7+dfsg1/test/hostname/Bonnie.cfg --- consul-1.7.4+dfsg1/test/hostname/Bonnie.cfg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bonnie.cfg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +[req] +prompt = no +distinguished_name = dn +req_extensions = v3_req + +[dn] +C = US +ST = California +L = Los Angeles +O = End Point +OU = Testing +emailAddress = do-not-reply@hashicorp.com +CN = Bonnie + +[v3_req] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = server.dc3.consul +DNS.2 = bonnie.server.dc3.consul diff -Nru consul-1.7.4+dfsg1/test/hostname/Bonnie.crt consul-1.8.7+dfsg1/test/hostname/Bonnie.crt --- consul-1.7.4+dfsg1/test/hostname/Bonnie.crt 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bonnie.crt 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID7jCCAtagAwIBAgIBHTANBgkqhkiG9w0BAQUFADCBmTELMAkGA1UEBhMCVVMx +EzARBgNVBAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMRkwFwYD +VQQKExBIYWhpQ29ycCBUZXN0IENBMQ0wCwYDVQQLEwRUZXN0MREwDwYDVQQDEwhD +ZXJ0QXV0aDEiMCAGCSqGSIb3DQEJARYTamFtZXNAaGFzaGljb3JwLmNvbTAgFw0x +OTEyMTIyMTA0MzZaGA8yMTE5MTExODIxMDQzNlowgYQxDzANBgNVBAMMBkJvbm5p +ZTETMBEGA1UECAwKQ2FsaWZvcm5pYTELMAkGA1UEBhMCVVMxKTAnBgkqhkiG9w0B +CQEWGmRvLW5vdC1yZXBseUBoYXNoaWNvcnAuY29tMRIwEAYDVQQKDAlFbmQgUG9p +bnQxEDAOBgNVBAsMB1Rlc3RpbmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDpxsOS28WlhI9l3rXf1m8hRJEM/OW3o1Nt/s/G7yCGu+VORmIWZrwgX+TY +B7p7/uWSA20pOPfJjgSxQOY5V3w3Tj6JfjEiknPY0iVVBXT6/EMw8DkXUe4N8Txc +YHV59VeMBg0IwPDQg5RqvAmzCGIqn5wky0DQXu1f62qzotpwTtEvy61MAovoZOCQ +myX4M6eg/eWTG50A9X56ZTuUUo/5teVFZy/7xDt5qASZl00h9vOZ4VAmMpaxOGYh +abPX6pfhROtyjwb28w+f5hoEP0p+FChF5NJL10iFQBXxAnL+Sty1fL8+2Wt2bG3L +iA2PyRCSpTXnS/Z6yBw6b8OUNCzpAgMBAAGjUjBQMAkGA1UdEwQCMAAwCwYDVR0P +BAQDAgXgMDYGA1UdEQQvMC2CEXNlcnZlci5kYzMuY29uc3Vsghhib25uaWUuc2Vy +dmVyLmRjMy5jb25zdWwwDQYJKoZIhvcNAQEFBQADggEBABQhVUQmuqwqPLcSOumf +wl0Zr271DM8s/L1+DuOpqhlxRk1EwoEE/ADpy6bQ5RrASx/SEK8ufMu+0Dwil+xR +Oq+JyIreOuRNRrs2vwj9bB/flOm14URjqOo04tOnyfp0EhUlFLGTjBP8tIzZlXqq +CTePLBJi/Lwjo13Q7zGdB8jJ9FC5PS7A3SbeW8dzZyiL/vW5UpNY20tNSnCr8zj4 +/7e9lA5PTW1CLOUEndIhmWb0CKaxikDZiQX/9GK2O6M9+Pi6URVQ3NHP3CEoVrKs +0icCXKyetRx98ipGEEPFQENDx0obZ0Sp93LkFwy9sjSFcV9i/rK4PnNJtNmEFRY9 +SqA= +-----END CERTIFICATE----- diff -Nru consul-1.7.4+dfsg1/test/hostname/Bonnie.ext consul-1.8.7+dfsg1/test/hostname/Bonnie.ext --- consul-1.7.4+dfsg1/test/hostname/Bonnie.ext 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bonnie.ext 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = server.dc3.consul +DNS.2 = bonnie.server.dc3.consul diff -Nru consul-1.7.4+dfsg1/test/hostname/Bonnie.key consul-1.8.7+dfsg1/test/hostname/Bonnie.key --- consul-1.7.4+dfsg1/test/hostname/Bonnie.key 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/Bonnie.key 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDpxsOS28WlhI9l +3rXf1m8hRJEM/OW3o1Nt/s/G7yCGu+VORmIWZrwgX+TYB7p7/uWSA20pOPfJjgSx +QOY5V3w3Tj6JfjEiknPY0iVVBXT6/EMw8DkXUe4N8TxcYHV59VeMBg0IwPDQg5Rq +vAmzCGIqn5wky0DQXu1f62qzotpwTtEvy61MAovoZOCQmyX4M6eg/eWTG50A9X56 +ZTuUUo/5teVFZy/7xDt5qASZl00h9vOZ4VAmMpaxOGYhabPX6pfhROtyjwb28w+f +5hoEP0p+FChF5NJL10iFQBXxAnL+Sty1fL8+2Wt2bG3LiA2PyRCSpTXnS/Z6yBw6 +b8OUNCzpAgMBAAECggEBAJg3A0CsOJT9KyF5UZLdXJ6ctpVuVWSsw7XrI/6z1Mnl +rfi5e0R6wCOUTL0cyx/RaEkaUgl1PmHORt/jEgRkIk0gdTexIu0Pzr5ulkA1vWVu +u5Ex2PqGLiqF2HeNlvBB/y79AZ+hgStDgW+939LisohuRIzwitMh/A1oi6FLeE+G +w3JpkomArYWpGDWY9UF5WU/LquriLYDlgqsLFwLiVg73qFHCroN80ZYmQ1DF6x9W +JD6t4INk7brAoDzb2XiJtr246xcz9Fy7bPR59706vQvGS4vUB0W/+x8glVDlSYqi +2gnqHpTRl/0r/MwMwN28tqDd6TNB+qpYOUoCpVnEYcECgYEA/yRhV1wUZh46Bi89 +nq2RRTFsPnNfR/abMwNw3Jz6L3RftqlC6oqUjR9twV3mEYP+X9fHYa/MVASi9YTD +0hIeGcMX6nker0YfYxacc/cfh+8jrh/rMFbfng1fKWESMgyT8v2ZhCAFiqow4JWe +JgKpc9TlnlBSUg+QtaO15gREL4cCgYEA6o/+IKU7eMgEFjBO+BxgYETroBPZwAxy +RTjdISl9qafn8bJw3jfQPRGdEtAhXxniSVatkN3XhQD3kda+g0tMi4L3GgbJci3m +hoaO+YSErX93Grk5KHkyBXhiYp5eezWZgzj3bvXW+AjG9l1/2zOtXEB08vabrrYq +a6mo+bVQfA8CgYAVnU9hxzszK3xe6cGen7We1wEEiWGZBxs+xxvYlLPdMU6qesxg +cj0Dd5Yku3+yHCyAkhch/3Kf64SiqAyuzzodlJmCE6C12IrwKgo3CMhzC59KMQoL +nlBzY06cgsy30Lj37OQEfXH6vVBGtmYfcjpIxdBuCP/wU8E+og/W3KWqIQKBgBDf +Lp5WhEKZ0IFwFB4QnHYQPwqSovUHcCi+gFlkTJ+pbiuadDfnt9jMrYmu4teeWwJ/ +c5iZ/GiauzQISEfVYLogP3nlxxOpbY17nEkiWRDJvF11uUDKBukR0bHaRl2Ca3pe +3J1knYPVzcnmy82OmAesszzOtEAK5l48I+ViP1nNAoGAJMB2QRhrYQqjQtC4oHdp +6tGRBIS2ElgdILlXdHhvUyxvUONWEoymODeBXABMUUgiwLU/kGyt6pcjMMOStJnR +gTfGhjYIT+L5C7Ivz0OQU+CYV2i0W+c4xgjBKbuscisgg2CurS3cF1tera1Qve/Y +UtVBRnZ8/v/NisLFbtum/+Y= +-----END PRIVATE KEY----- diff -Nru consul-1.7.4+dfsg1/test/hostname/certindex consul-1.8.7+dfsg1/test/hostname/certindex --- consul-1.7.4+dfsg1/test/hostname/certindex 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/certindex 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,6 @@ V 180512061548Z 18 unknown /CN=Alice/ST=California/C=US/emailAddress=james@hashicorp.com/O=End Point/OU=Testing V 190512090339Z 19 unknown /CN=Alice/ST=California/C=US/emailAddress=james@hashicorp.com/O=End Point/OU=Testing V 21180418090432Z 1A unknown /CN=Alice/ST=California/C=US/emailAddress=james@hashicorp.com/O=End Point/OU=Testing +V 21191110203328Z 1B unknown /CN=Bob/ST=California/C=US/emailAddress=do-not-reply@hashicorp.com/O=End Point/OU=Testing +V 21191117214339Z 1C unknown /CN=Betty/ST=California/C=US/emailAddress=do-not-reply@hashicorp.com/O=End Point/OU=Testing +V 21191118210436Z 1D unknown /CN=Bonnie/ST=California/C=US/emailAddress=do-not-reply@hashicorp.com/O=End Point/OU=Testing diff -Nru consul-1.7.4+dfsg1/test/hostname/certindex.attr consul-1.8.7+dfsg1/test/hostname/certindex.attr --- consul-1.7.4+dfsg1/test/hostname/certindex.attr 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/certindex.attr 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +unique_subject = no diff -Nru consul-1.7.4+dfsg1/test/hostname/generate.sh consul-1.8.7+dfsg1/test/hostname/generate.sh --- consul-1.7.4+dfsg1/test/hostname/generate.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/generate.sh 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,40 @@ #!/bin/bash -set -e -openssl req -new -sha256 -nodes -out Alice.csr -newkey rsa:2048 -keyout Alice.key -config Alice.cfg -openssl ca -batch -config myca.conf -extfile Alice.ext -notext -in Alice.csr -out Alice.crt -rm Alice.csr +set -euo pipefail + + +# server.dc1.consul +if [[ ! -f Alice.crt ]] || [[ ! -f Alice.key ]]; then + echo "Regenerating Alice.{crt,key}..." + rm -f Alice.crt Alice.key + openssl req -new -sha256 -nodes -out Alice.csr -newkey rsa:2048 -keyout Alice.key -config Alice.cfg + openssl ca -batch -config myca.conf -extfile Alice.ext -notext -in Alice.csr -out Alice.crt + rm -f Alice.csr +fi + +# bob.server.dc1.consul +if [[ ! -f Bob.crt ]] || [[ ! -f Bob.key ]]; then + echo "Regenerating Bob.{crt,key}..." + rm -f Bob.crt Bob.key + openssl req -new -sha256 -nodes -out Bob.csr -newkey rsa:2048 -keyout Bob.key -config Bob.cfg + openssl ca -batch -config myca.conf -extfile Bob.ext -notext -in Bob.csr -out Bob.crt + rm -f Bob.csr +fi + +# betty.server.dc2.consul +if [[ ! -f Betty.crt ]] || [[ ! -f Betty.key ]]; then + echo "Regenerating Betty.{crt,key}..." + rm -f Betty.crt Betty.key + openssl req -new -sha256 -nodes -out Betty.csr -newkey rsa:2048 -keyout Betty.key -config Betty.cfg + openssl ca -batch -config myca.conf -extfile Betty.ext -notext -in Betty.csr -out Betty.crt + rm -f Betty.csr +fi + +# bonnie.server.dc3.consul +if [[ ! -f Bonnie.crt ]] || [[ ! -f Bonnie.key ]]; then + echo "Regenerating Bonnie.{crt,key}..." + rm -f Bonnie.crt Bonnie.key + openssl req -new -sha256 -nodes -out Bonnie.csr -newkey rsa:2048 -keyout Bonnie.key -config Bonnie.cfg + openssl ca -batch -config myca.conf -extfile Bonnie.ext -notext -in Bonnie.csr -out Bonnie.crt + rm -f Bonnie.csr +fi diff -Nru consul-1.7.4+dfsg1/test/hostname/serialfile consul-1.8.7+dfsg1/test/hostname/serialfile --- consul-1.7.4+dfsg1/test/hostname/serialfile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/hostname/serialfile 2020-12-10 21:46:52.000000000 +0000 @@ -1 +1 @@ -1B +1E diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-centralconf/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-centralconf/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-centralconf/s1.hcl 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-centralconf/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -13,4 +13,4 @@ } } } -} \ No newline at end of file +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-none/primary/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-none/primary/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-none/primary/verify.bats 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-none/primary/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -71,6 +71,6 @@ assert_expected_fortio_name s2-secondary } -@test "s1 upstream made 1 connection" { +@test "s1 upstream made 1 connection to s2" { assert_envoy_metric_at_least 127.0.0.1:19000 "cluster.s2.default.primary.*cx_total" 1 } diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-remote/primary/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-remote/primary/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-remote/primary/verify.bats 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-dc-failover-gateways-remote/primary/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -74,6 +74,6 @@ assert_expected_fortio_name s2-secondary } -@test "s1 upstream made 1 connection" { +@test "s1 upstream made 1 connection again" { assert_envoy_metric_at_least 127.0.0.1:19000 "cluster.s2.default.primary.*cx_total" 1 } diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:19000 s1 primary || true +snapshot_envoy_admin localhost:19001 s2-v1 primary || true +snapshot_envoy_admin localhost:19002 s2-v2 primary || true +snapshot_envoy_admin localhost:19003 s2 primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "proxy-defaults" + name = "global" + + config { + protocol = "http" + } + } + + bootstrap { + kind = "service-resolver" + name = "s2" + default_subset = "v2" + connect_timeout = "30s" + + subsets = { + "v1" = { + filter = "Service.Meta.version == v1" + } + + "v2" = { + filter = "Service.Meta.version == v2" + } + } + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + id = "s2-v1" + name = "s2" + port = 8182 + + meta { + version = "v1" + } + + connect { + sidecar_service {} + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/s2-v2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + id = "s2-v2" + name = "s2" + port = 8183 + + meta { + version = "v2" + } + + connect { + sidecar_service {} + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry proxy-defaults global +wait_for_config_entry service-resolver s2 + +# s2 is retained just to have a honeypot for bad envoy configs to route into +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2-v1 19001 +gen_envoy_bootstrap s2-v2 19002 +gen_envoy_bootstrap s2 19003 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +#!/bin/bash + +export REQUIRED_SERVICES=" +$DEFAULT_REQUIRED_SERVICES +s2-v1 s2-v1-sidecar-proxy +s2-v2 s2-v2-sidecar-proxy +" + diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-resolver-features/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,49 @@ +#!/usr/bin/env bats + +load helpers + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2-v1 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s2-v2 proxy admin is up on :19002" { + retry_default curl -f -s localhost:19002/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19003" { + retry_default curl -f -s localhost:19003/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2-v1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + +@test "s2-v2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21002 s2 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21003 s2 +} + +@test "s2 proxies should be healthy" { + assert_service_has_healthy_instances s2 3 +} + +@test "s1 upstream should have healthy endpoints for v2.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 v2.s2.default.primary HEALTHY 1 +} + +#### NOTE: only use this to test stuff that isn't already handled by more complicated resolver tests +# +@test "s1 upstream should be able to connect to s2-v2 via upstream s2" { + assert_expected_fortio_name s2-v2 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:19000 s1 primary || true +snapshot_envoy_admin localhost:19001 s2-v1 primary || true +snapshot_envoy_admin localhost:19002 s2-v2 primary || true +snapshot_envoy_admin localhost:19003 s2 primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,298 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "proxy-defaults" + name = "global" + + config { + protocol = "http" + } + } + + bootstrap { + kind = "service-resolver" + name = "s2" + default_subset = "v1" + + subsets = { + "v1" = { + filter = "Service.Meta.version == v1" + } + + "v2" = { + filter = "Service.Meta.version == v2" + } + } + } + + bootstrap { + kind = "service-router" + name = "s2" + + routes = [ + { + match { http { path_exact = "/exact/debug" } } + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { path_exact = "/exact-alt/debug" } } + destination { + service_subset = "v1" + prefix_rewrite = "/debug" + } + }, + { + match { http { path_prefix = "/prefix/" } } + destination { + service_subset = "v2" + prefix_rewrite = "/" + } + }, + { + match { http { path_prefix = "/prefix-alt/" } } + destination { + service_subset = "v1" + prefix_rewrite = "/" + } + }, + { + match { http { + path_regex = "/deb[ug]{2}" + header = [{ + name = "x-test-debug" + exact = "regex-path" + }] + } } + destination { + service_subset = "v2" + retry_on_connect_failure = true # TODO: test + retry_on_status_codes = [500, 512] # TODO: test + } + }, + { + match { http { + path_exact = "/hdr-present/debug" + header = [ + { + name = "x-test-debug" + present = true + }, + ] + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-present/debug" + header = [ + { + name = "x-test-debug" + present = true + invert = true + }, + ] + } }, + destination { + service_subset = "v1" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-exact/debug" + header = [ + { + name = "x-test-debug" + exact = "exact" + }, + ] + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-exact/debug" + header = [ + { + name = "x-test-debug" + exact = "exact-alt" + }, + ] + } }, + destination { + service_subset = "v1" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-prefix/debug" + header = [ + { + name = "x-test-debug" + prefix = "prefi" + }, + ] } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-prefix/debug" + header = [ + { + name = "x-test-debug" + prefix = "alt-prefi" + }, + ] } }, + destination { + service_subset = "v1" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-suffix/debug" + header = [ + { + name = "x-test-debug" + suffix = "uffix" + }, + ] + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-suffix/debug" + header = [ + { + name = "x-test-debug" + suffix = "uffix-alt" + }, + ] + } }, + destination { + service_subset = "v1" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-regex/debug" + header = [ + { + name = "x-test-debug" + regex = "reg[ex]{2}" + }, + ] + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-regex/debug" + header = [ + { + name = "x-test-debug" + regex = "reg[ex]{3}" + }, + ] + } }, + destination { + service_subset = "v1" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/hdr-invert/debug" + header = [ + { + name = "x-test-debug" + exact = "not-this" + invert = true + }, + ], + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/qp-present/debug" + query_param = [ + { + name = "env" + present = true + }, + ], + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/qp-exact/debug" + query_param = [ + { + name = "env" + exact = "dump" + }, + ], + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/qp-regex/debug" + query_param = [ + { + name = "env" + regex = "du[mp]{2}" + }, + ], + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + { + match { http { + path_exact = "/method-match/debug" + methods = ["GET", "PUT"] + } }, + destination { + service_subset = "v2" + prefix_rewrite = "/debug" + } + }, + ] + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + id = "s2-v1" + name = "s2" + port = 8182 + + meta { + version = "v1" + } + + connect { + sidecar_service {} + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/s2-v2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + id = "s2-v2" + name = "s2" + port = 8183 + + meta { + version = "v2" + } + + connect { + sidecar_service {} + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry proxy-defaults global +wait_for_config_entry service-resolver s2 +wait_for_config_entry service-router s2 + +# s2 is retained just to have a honeypot for bad envoy configs to route into +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2-v1 19001 +gen_envoy_bootstrap s2-v2 19002 +gen_envoy_bootstrap s2 19003 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +#!/bin/bash + +export REQUIRED_SERVICES=" +$DEFAULT_REQUIRED_SERVICES +s2-v1 s2-v1-sidecar-proxy +s2-v2 s2-v2-sidecar-proxy +" + diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-router-features/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-router-features/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,106 @@ +#!/usr/bin/env bats + +load helpers + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2-v1 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s2-v2 proxy admin is up on :19002" { + retry_default curl -f -s localhost:19002/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19003" { + retry_default curl -f -s localhost:19003/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2-v1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + +@test "s2-v2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21002 s2 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21003 s2 +} + +@test "s2 proxies should be healthy" { + assert_service_has_healthy_instances s2 3 +} + +@test "s1 upstream should have healthy endpoints for v2.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 v2.s2.default.primary HEALTHY 1 +} + +### the router fallthrough logic sends you to v1, otherwise you go to v2 + +# these all use the same context: "s1 upstream should be able to connect to s2-v2 via upstream s2" + +@test "test exact path" { + assert_expected_fortio_name s2-v2 localhost 5000 /exact + assert_expected_fortio_name s2-v1 localhost 5000 /exact-alt +} + +@test "test prefix path" { + assert_expected_fortio_name s2-v2 localhost 5000 /prefix + assert_expected_fortio_name s2-v1 localhost 5000 /prefix-alt +} + +@test "test regex path" { + assert_expected_fortio_name s2-v2 localhost 5000 "" regex-path +} + +@test "test present header" { + assert_expected_fortio_name s2-v2 localhost 5000 /hdr-present anything + assert_expected_fortio_name s2-v1 localhost 5000 /hdr-present "" +} + +@test "test exact header" { + assert_expected_fortio_name s2-v2 localhost 5000 /hdr-exact exact + assert_expected_fortio_name s2-v1 localhost 5000 /hdr-exact exact-alt +} + +@test "test prefix header" { + assert_expected_fortio_name s2-v2 localhost 5000 /hdr-prefix prefix + assert_expected_fortio_name s2-v1 localhost 5000 /hdr-prefix alt-prefix +} + +@test "test suffix header" { + assert_expected_fortio_name s2-v2 localhost 5000 /hdr-suffix suffix + assert_expected_fortio_name s2-v1 localhost 5000 /hdr-suffix suffix-alt +} + +@test "test regex header" { + assert_expected_fortio_name s2-v2 localhost 5000 /hdr-regex regex + assert_expected_fortio_name s2-v1 localhost 5000 /hdr-regex regexx +} + +@test "test inverted header" { + assert_expected_fortio_name s2-v2 localhost 5000 /hdr-invert something-else +} + +@test "test present query param" { + assert_expected_fortio_name s2-v2 localhost 5000 /qp-present +} + +@test "test exact query param" { + assert_expected_fortio_name s2-v2 localhost 5000 /qp-exact +} + +@test "test regex query param" { + assert_expected_fortio_name s2-v2 localhost 5000 /qp-regex +} + +@test "test method match" { + assert_expected_fortio_name s2-v2 localhost 5000 /method-match +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:19000 s1 primary || true +snapshot_envoy_admin localhost:19001 s2-v1 primary || true +snapshot_envoy_admin localhost:19002 s2-v2 primary || true +snapshot_envoy_admin localhost:19003 s2 primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "proxy-defaults" + name = "global" + + config { + protocol = "http" + } + } + + bootstrap { + kind = "service-resolver" + name = "s2" + + subsets = { + "v1" = { + filter = "Service.Meta.version == v1" + } + + "v2" = { + filter = "Service.Meta.version == v2" + } + } + } + + bootstrap { + kind = "service-splitter" + name = "s2" + + splits = [ + { + weight = 50, + service_subset = "v2" + }, + { + weight = 50, + service_subset = "v1" + }, + ] + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + id = "s2-v1" + name = "s2" + port = 8182 + + meta { + version = "v1" + } + + connect { + sidecar_service {} + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/s2-v2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + id = "s2-v2" + name = "s2" + port = 8183 + + meta { + version = "v2" + } + + connect { + sidecar_service {} + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry proxy-defaults global +wait_for_config_entry service-resolver s2 +wait_for_config_entry service-splitter s2 + +# s2 is retained just to have a honeypot for bad envoy configs to route into +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2-v1 19001 +gen_envoy_bootstrap s2-v2 19002 +gen_envoy_bootstrap s2 19003 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +#!/bin/bash + +export REQUIRED_SERVICES=" +$DEFAULT_REQUIRED_SERVICES +s2-v1 s2-v1-sidecar-proxy +s2-v2 s2-v2-sidecar-proxy +" + diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-cfg-splitter-features/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +#!/usr/bin/env bats + +load helpers + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2-v1 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s2-v2 proxy admin is up on :19002" { + retry_default curl -f -s localhost:19002/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19003" { + retry_default curl -f -s localhost:19003/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2-v1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + +@test "s2-v2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21002 s2 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21003 s2 +} + +@test "s2 proxies should be healthy" { + assert_service_has_healthy_instances s2 3 +} + +@test "s1 upstream should have healthy endpoints for v2.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 v2.s2.default.primary HEALTHY 1 +} + +@test "s1 upstream should have healthy endpoints for v1.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 v1.s2.default.primary HEALTHY 1 +} + +### the splitter sends you to v1 or v2 but never the default +@test "s1 upstream should be able to connect to s2-v1 or s2-v2 via upstream s2" { + assert_expected_fortio_name_pattern ^FORTIO_NAME=s2-v[12]$ +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-grpc/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-grpc/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-grpc/verify.bats 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-grpc/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,14 @@ retry_default curl -f -s localhost:19001/stats -o /dev/null } +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + @test "s2 proxy should be healthy" { assert_service_has_healthy_instances s2 1 } @@ -20,6 +28,7 @@ } @test "s1 upstream should be able to connect to s2 via grpc" { + # This test also covers http2 since gRPC always uses http2 run fortio grpcping localhost:5000 echo "OUTPUT: $output" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/capture.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/capture.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -#!/bin/bash - -snapshot_envoy_admin localhost:19000 s1 primary || true -snapshot_envoy_admin localhost:19001 s2 primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/s1.hcl 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/s1.hcl 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -services { - name = "s1" - port = 8080 - connect { - sidecar_service { - proxy { - upstreams = [ - { - destination_name = "s2" - local_bind_port = 5000 - config { - protocol = "http2" - } - } - ] - config { - protocol = "http2" - } - } - } - } -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/s2.hcl 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/s2.hcl 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -services { - name = "s2" - # Advertise gRPC (http2) port - port = 8179 - connect { - sidecar_service { - proxy { - config { - protocol = "http2" - } - } - } - } -} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/setup.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/setup.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#!/bin/bash - -set -eEuo pipefail - -gen_envoy_bootstrap s1 19000 primary -gen_envoy_bootstrap s2 19001 primary \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-http2/verify.bats 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-http2/verify.bats 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -@test "s1 proxy admin is up on :19000" { - retry_default curl -f -s localhost:19000/stats -o /dev/null -} - -@test "s2 proxy admin is up on :19001" { - retry_default curl -f -s localhost:19001/stats -o /dev/null -} - -@test "s1 proxy listener should be up and have right cert" { - assert_proxy_presents_cert_uri localhost:21000 s1 -} - -@test "s2 proxy listener should be up and have right cert" { - assert_proxy_presents_cert_uri localhost:21001 s2 -} - -@test "s2 proxy should be healthy" { - assert_service_has_healthy_instances s2 1 -} - -@test "s1 upstream should have healthy endpoints for s2" { - # protocol is configured in an upstream override so the cluster name is customized here - assert_upstream_has_endpoints_in_status 127.0.0.1:19000 49c19fe6~s2.default.primary HEALTHY 1 -} - -@test "s1 upstream should be able to connect to s2 via http2" { - # We use grpc here because it's the easiest way to test http2. The server - # needs to support h2c since the proxy doesn't talk TLS to the local app. - # Most http2 servers don't support that but gRPC does. We could use curl - run curl -f -s -X POST localhost:5000/PingServer.Ping/ - - echo "OUTPUT: $output" - - [ "$status" == 0 ] -} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "service-defaults" + name = "s1" + protocol = "grpc" + } + bootstrap { + kind = "ingress-gateway" + name = "ingress-gateway" + + listeners = [ + { + port = 9999 + protocol = "grpc" + services = [ + { + name = "s1" + hosts = ["localhost:9999"] + } + ] + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +services { + name = "s1" + port = 8079 + connect { + sidecar_service { + proxy { + config { + protocol = "grpc" + } + } + } + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway + +gen_envoy_bootstrap ingress-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2 19001 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES ingress-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +#!/usr/bin/env bats + +load helpers + +@test "ingress proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "ingress-gateway should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 +} + +@test "ingress should be able to connect to s1 via grpc" { + # This test also covers http2 since gRPC always uses http2 + run fortio grpcping localhost:9999 + + echo "OUTPUT: $output" + + [ "$status" == 0 ] +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,62 @@ +enable_central_service_config = true + +config_entries { + bootstrap = [ + { + kind = "proxy-defaults" + name = "global" + config { + protocol = "http" + } + }, + { + kind = "ingress-gateway" + name = "ingress-gateway" + + listeners = [ + { + port = 9999 + protocol = "http" + services = [ + { + name = "router" + } + ] + } + ] + }, + { + kind = "service-router" + // This is a "virtual" service name and will not have a backing + // service definition. It must match the name defined in the ingress + // configuration. + name = "router" + routes = [ + { + match { + http { + path_prefix = "/s1/" + } + } + + destination { + service = "s1" + prefix_rewrite = "/" + } + }, + { + match { + http { + path_prefix = "/s2/" + } + } + + destination { + service = "s2" + prefix_rewrite = "/" + } + } + ] + } + ] +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway +wait_for_config_entry proxy-defaults global +wait_for_config_entry service-router router + +gen_envoy_bootstrap ingress-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2 19001 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES ingress-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-http/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,40 @@ +#!/usr/bin/env bats + +load helpers + +@test "ingress proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + +@test "ingress-gateway should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 +} + +@test "ingress-gateway should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s2 HEALTHY 1 +} + +@test "ingress should be able to connect to s1 via configured path" { + assert_expected_fortio_name s1 router.ingress.consul 9999 /s1 +} + +@test "ingress should be able to connect to s2 via configured path" { + assert_expected_fortio_name s2 router.ingress.consul 9999 /s2 +} + diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +enable_central_service_config = true + +config_entries { + bootstrap = [ + { + kind = "proxy-defaults" + name = "global" + config { + protocol = "http" + } + }, + { + kind = "ingress-gateway" + name = "ingress-gateway" + + listeners = [ + { + port = 9999 + protocol = "http" + services = [ + { + name = "*" + } + ] + }, + { + port = 9998 + protocol = "http" + services = [ + { + name = "s1" + hosts = ["test.example.com"] + } + ] + } + ] + } + ] +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway +wait_for_config_entry proxy-defaults global + +gen_envoy_bootstrap ingress-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2 19001 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES ingress-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-multiple-services/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +#!/usr/bin/env bats + +load helpers + +@test "ingress proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + +@test "ingress-gateway should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 +} + +@test "ingress-gateway should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s2 HEALTHY 1 +} + +@test "ingress should be able to connect to s1 using Host header" { + assert_expected_fortio_name s1 s1.ingress.consul 9999 +} + +@test "ingress should be able to connect to s2 using Host header" { + assert_expected_fortio_name s2 s2.ingress.consul 9999 +} + +@test "ingress should be able to connect to s1 using a user-specified Host" { + assert_expected_fortio_name s1 test.example.com 9998 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "ingress-gateway" + name = "ingress-gateway" + + listeners = [ + { + port = 9999 + protocol = "tcp" + services = [ + { + name = "s1" + } + ] + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway + +gen_envoy_bootstrap ingress-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2 19001 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES ingress-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-simple/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +#!/usr/bin/env bats + +load helpers + +@test "ingress proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "ingress-gateway should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 +} + +@test "ingress should be able to connect to s1 via configured port" { + run retry_default curl -s -f -d hello localhost:9999 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +enable_central_service_config = true + +config_entries { + bootstrap = [ + { + kind = "proxy-defaults" + name = "global" + config { + protocol = "http" + } + }, + { + kind = "ingress-gateway" + name = "ingress-gateway" + + tls { + enabled = true + } + + listeners = [ + { + port = 9998 + protocol = "http" + services = [ + { + name = "s1" + } + ] + }, + { + port = 9999 + protocol = "http" + services = [ + { + name = "s1" + hosts = ["test.example.com"] + } + ] + } + ] + } + ] +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway + +gen_envoy_bootstrap ingress-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2 19001 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES ingress-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-gateway-tls/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +#!/usr/bin/env bats + +load helpers + +@test "ingress proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "ingress-gateway should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 +} + +@test "should be able to connect to s1 through the TLS-enabled ingress port" { + assert_dnssan_in_cert localhost:9998 '\*.ingress.consul' + # Use the --resolve argument to fake dns resolution for now so we can use the + # s1.ingress.consul domain to validate the cert + run retry_default curl --cacert <(get_ca_root) -s -f -d hello \ + --resolve s1.ingress.consul:9998:127.0.0.1 \ + https://s1.ingress.consul:9998 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} + +@test "should be able to connect to s1 through the TLS-enabled ingress port using the custom host" { + assert_dnssan_in_cert localhost:9999 'test.example.com' + run retry_default curl --cacert <(get_ca_root) -s -f -d hello \ + --resolve test.example.com:9999:127.0.0.1 \ + https://test.example.com:9999 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/bind.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/bind.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/bind.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/bind.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +bind_addr = "0.0.0.0" +advertise_addr = "{{ GetInterfaceIP \"eth0\" }}" \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true +snapshot_envoy_admin localhost:19001 s2 secondary || true +snapshot_envoy_admin localhost:19002 mesh-gateway primary || true +snapshot_envoy_admin localhost:19003 mesh-gateway secondary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,63 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "ingress-gateway" + name = "ingress-gateway" + + listeners = [ + { + protocol = "tcp" + port = 9999 + services = [ + { + name = "s2" + } + ] + }, + { + protocol = "tcp" + port = 10000 + services = [ + { + name = "s1" + } + ] + } + ] + } + + bootstrap { + kind = "proxy-defaults" + name = "global" + mesh_gateway { + mode = "local" + } + } + + bootstrap { + kind = "service-resolver" + name = "s2" + redirect { + service = "s2" + datacenter = "secondary" + } + } + + bootstrap { + kind = "service-defaults" + name = "s1" + mesh_gateway { + mode = "remote" + } + } + + bootstrap { + kind = "service-resolver" + name = "s1" + redirect { + service = "s1" + datacenter = "secondary" + } + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +services { + name = "mesh-gateway" + kind = "mesh-gateway" + port = 4431 +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/ingress.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/ingress.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/ingress.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/ingress.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s1 service in the primary dc diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/s2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s2 service in the primary dc \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +#!/bin/bash + +set -eEuo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway +wait_for_config_entry proxy-defaults global + +gen_envoy_bootstrap mesh-gateway 19002 primary true +gen_envoy_bootstrap ingress-gateway 20000 primary true +retry_default docker_consul primary curl -s "http://localhost:8500/v1/catalog/service/consul?dc=secondary" >/dev/null + diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/primary/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,59 @@ +#!/usr/bin/env bats + +load helpers + +@test "gateway-primary proxy admin is up on :19002" { + retry_default curl -f -s localhost:19002/stats -o /dev/null +} + +@test "ingress-primary proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "ingress should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1.default.secondary HEALTHY 1 +} + +@test "ingress should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s2.default.secondary HEALTHY 1 +} + +@test "gateway-primary should have healthy endpoints for secondary" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19002 secondary HEALTHY 1 +} + +@test "gateway-secondary should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status consul-secondary:19003 s1 HEALTHY 1 +} + +@test "gateway-secondary should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status consul-secondary:19003 s2 HEALTHY 1 +} + +@test "ingress should be able to connect to s1" { + run retry_default curl -s -f -d hello localhost:10000 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} + +@test "ingress made 1 connection to s1" { + assert_envoy_metric_at_least 127.0.0.1:20000 "cluster.s1.default.secondary.*cx_total" 1 +} + +@test "gateway-primary is not used for the upstream connection to s1" { + assert_envoy_metric 127.0.0.1:19002 "cluster.secondary.*cx_total" 0 +} + +@test "ingress should be able to connect to s2" { + run retry_default curl -s -f -d hello localhost:9999 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} + +@test "ingress made 1 connection to s2" { + assert_envoy_metric_at_least 127.0.0.1:20000 "cluster.s2.default.secondary.*cx_total" 1 +} + +@test "gateway-primary is used for the upstream connection to s2" { + assert_envoy_metric_at_least 127.0.0.1:19002 "cluster.secondary.*cx_total" 1 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +services { + name = "mesh-gateway" + kind = "mesh-gateway" + port = 4432 +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/join.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/join.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/join.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/join.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +retry_join_wan = ["consul-primary"] \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +#!/bin/bash + +set -eEuo pipefail + +gen_envoy_bootstrap s1 19001 secondary +gen_envoy_bootstrap s2 19002 secondary +gen_envoy_bootstrap mesh-gateway 19003 secondary true +retry_default docker_consul secondary curl -s "http://localhost:8500/v1/catalog/service/consul?dc=primary" >/dev/null diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/secondary/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +#!/usr/bin/env bats + +load helpers + +@test "s1 proxy is running correct version" { + assert_envoy_version 19001 +} + +@test "s2 proxy is running correct version" { + assert_envoy_version 19002 +} + +@test "s1 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19002" { + retry_default curl -f -s localhost:19002/stats -o /dev/null +} + +@test "gateway-secondary proxy admin is up on :19003" { + retry_default curl -f -s localhost:19003/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 secondary +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 secondary +} + +@test "s1 proxy should be healthy" { + assert_service_has_healthy_instances s1 1 secondary +} + +@test "s2 proxy should be healthy" { + assert_service_has_healthy_instances s2 1 secondary +} + +@test "gateway-secondary is used for the upstream connection for s1" { + assert_envoy_metric_at_least 127.0.0.1:19003 "cluster.s1.default.secondary.*cx_total" 1 +} + +@test "gateway-secondary is used for the upstream connection for s2" { + assert_envoy_metric_at_least 127.0.0.1:19003 "cluster.s2.default.secondary.*cx_total" 1 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-ingress-mesh-gateways-resolver/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/bash + +export REQUIRED_SERVICES="gateway-primary s1-secondary s1-sidecar-proxy-secondary s2-secondary s2-sidecar-proxy-secondary gateway-secondary ingress-gateway-primary" +export REQUIRE_SECONDARY=1 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 terminating-gateway primary || true +snapshot_envoy_admin localhost:19000 s1 primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "terminating-gateway" + name = "terminating-gateway" + + services = [ + { + name = "s4" + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +services { + name = "terminating-gateway" + kind = "terminating-gateway" + port = 8443 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,16 @@ +services { + name = "s1" + port = 8080 + connect { + sidecar_service { + proxy { + upstreams = [ + { + destination_name = "s4" + local_bind_port = 5000 + } + ] + } + } + } +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s4.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s4.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s4.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/s4.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +services { + name = "s4" + + // EDS cannot resolve localhost to an IP address + address = "localhost" + port = 8382 +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry terminating-gateway terminating-gateway + +gen_envoy_bootstrap terminating-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/bash + +# There is no sidecar proxy for s2, since the terminating gateway acts as the proxy +export REQUIRED_SERVICES="s1 s1-sidecar-proxy s4 terminating-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-hostnames/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,33 @@ +#!/usr/bin/env bats + +load helpers + +@test "terminating proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "terminating-gateway-primary listener is up on :8443" { + retry_default nc -z localhost:8443 +} + +@test "terminating-gateway should have healthy endpoints for s4" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s4 HEALTHY 1 +} + +@test "s1 upstream should have healthy endpoints for s4" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 s4.default.primary HEALTHY 1 +} + +@test "s1 upstream should be able to connect to s4" { + run retry_default curl -s -f -d hello localhost:5000 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} + +@test "terminating-gateway is used for the upstream connection" { + assert_envoy_metric_at_least 127.0.0.1:20000 "s4.default.primary.*cx_total" 1 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,14 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "terminating-gateway" + name = "terminating-gateway" + + services = [ + { + name = "s2" + } + ] + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +services { + name = "terminating-gateway" + kind = "terminating-gateway" + port = 8443 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry terminating-gateway terminating-gateway + +gen_envoy_bootstrap terminating-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/bash + +# There is no sidecar proxy for s2, since the terminating gateway acts as the proxy +export REQUIRED_SERVICES="s1 s1-sidecar-proxy s2 terminating-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-simple/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,33 @@ +#!/usr/bin/env bats + +load helpers + +@test "terminating proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "terminating-gateway-primary listener is up on :8443" { + retry_default nc -z localhost:8443 +} + +@test "terminating-gateway should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s2 HEALTHY 1 +} + +@test "s1 upstream should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 s2.default.primary HEALTHY 1 +} + +@test "s1 upstream should be able to connect to s2" { + run retry_default curl -s -f -d hello localhost:5000 + [ "$status" -eq 0 ] + [ "$output" = "hello" ] +} + +@test "terminating-gateway is used for the upstream connection" { + assert_envoy_metric_at_least 127.0.0.1:20000 "s2.default.primary.*cx_total" 1 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/capture.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/capture.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/capture.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/capture.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 terminating-gateway primary || true +snapshot_envoy_admin localhost:19000 s1 primary || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/config_entries.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/config_entries.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/config_entries.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/config_entries.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,37 @@ +config_entries { + bootstrap { + kind = "terminating-gateway" + name = "terminating-gateway" + + services = [ + { + name = "s2" + } + ] + } + + bootstrap { + kind = "proxy-defaults" + name = "global" + + config { + protocol = "http" + } + } + + bootstrap { + kind = "service-resolver" + name = "s2" + + default_subset = "v1" + + subsets = { + "v1" = { + filter = "Service.Meta.version == v1" + } + "v2" = { + filter = "Service.Meta.version == v2" + } + } + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +services { + name = "terminating-gateway" + kind = "terminating-gateway" + port = 8443 + + meta { + version = "v1" + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +services { + id = "s2-v1" + name = "s2" + port = 8182 + + meta { + version = "v1" + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/s2-v2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +services { + id = "s2-v2" + name = "s2" + port = 8183 + + meta { + version = "v2" + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry terminating-gateway terminating-gateway +wait_for_config_entry proxy-defaults global +wait_for_config_entry service-resolver s2 + +# terminating gateway will act as s2's proxy +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap terminating-gateway 20000 primary true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +#!/bin/bash + +# There is no sidecar proxy for s2-v1, since the terminating gateway acts as the proxy +export REQUIRED_SERVICES=" +s1 s1-sidecar-proxy +s2-v1 +terminating-gateway-primary +" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-subsets/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,40 @@ +#!/usr/bin/env bats + +load helpers + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "terminating proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "terminating-gateway-primary listener is up on :8443" { + retry_default nc -z localhost:8443 +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s1 upstream should have healthy endpoints for v1.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 v1.s2 HEALTHY 1 +} + +@test "terminating-gateway should have healthy endpoints for v1.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 v1.s2 HEALTHY 1 +} + +@test "terminating-gateway should have healthy endpoints for v2.s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 v2.s2 HEALTHY 1 +} + +@test "s1 upstream should be able to connect to s2-v1 via terminating-gateway" { + assert_expected_fortio_name s2-v1 +} + +@test "terminating-gateway is used for the upstream connection" { + assert_envoy_metric_at_least 127.0.0.1:20000 "v1.s2.default.primary.*cx_total" 1 +} + diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/bind.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/bind.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/bind.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/bind.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +bind_addr = "0.0.0.0" +advertise_addr = "{{ GetInterfaceIP \"eth0\" }}" \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +services { + name = "terminating-gateway" + kind = "terminating-gateway" + port = 4431 +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s1 service diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/s2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s2 service diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +#!/bin/bash + +set -eEuo pipefail + +gen_envoy_bootstrap terminating-gateway 19000 primary true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="terminating-gateway-primary" diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-terminating-gateway-without-services/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +#!/usr/bin/env bats + +load helpers + +@test "terminating-gateway-primary proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "terminating-gateway-primary listener is up on :4431" { + retry_default nc -z localhost:4431 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +services { + name = "s1" + port = 8080 + connect { + sidecar_service { + proxy { + upstreams = [ + { + destination_name = "s2" + local_bind_port = 5000 + config { + limits { + max_connections = 3 + max_pending_requests = 4 + max_concurrent_requests = 5 + } + passive_health_check { + interval = "22s" + max_failures = 4 + } + } + } + ] + } + } + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/s2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/s2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +services { + name = "s2" + port = 8181 + connect { sidecar_service {} } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +set -eEuo pipefail + +gen_envoy_bootstrap s1 19000 primary +gen_envoy_bootstrap s2 19001 primary diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-config/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-config/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +#!/usr/bin/env bats + +load helpers + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "s2 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21001 s2 +} + +@test "s2 proxy should be healthy" { + assert_service_has_healthy_instances s2 1 +} + +@test "s1 upstream should have healthy endpoints for s2" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 s2.default.primary HEALTHY 1 +} + +@test "s1 proxy should have been configured with max_connections on the cluster" { + CLUSTER_THRESHOLD=$(get_envoy_cluster_config localhost:19000 s2.default.primary | jq '.circuit_breakers.thresholds[0]') + echo $CLUSTER_THRESHOLD + + MAX_CONNS=$(echo $CLUSTER_THRESHOLD | jq --raw-output '.max_connections') + MAX_PENDING_REQS=$(echo $CLUSTER_THRESHOLD | jq --raw-output '.max_pending_requests') + MAX_REQS=$(echo $CLUSTER_THRESHOLD | jq --raw-output '.max_requests') + + echo "MAX_CONNS = $MAX_CONNS" + echo "MAX_PENDING_REQS = $MAX_PENDING_REQS" + echo "MAX_REQS = $MAX_REQS" + + [ "$MAX_CONNS" = "3" ] + [ "$MAX_PENDING_REQS" = "4" ] + [ "$MAX_REQS" = "5" ] +} + +@test "s1 proxy should have been configured with passive_health_check" { + CLUSTER_CONFIG=$(get_envoy_cluster_config localhost:19000 s2.default.primary) + echo $CLUSTER_CONFIG + + [ "$(echo $CLUSTER_CONFIG | jq --raw-output '.outlier_detection.consecutive_5xx')" = "4" ] + [ "$(echo $CLUSTER_CONFIG | jq --raw-output '.outlier_detection.interval')" = "22s" ] +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s1.hcl 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s1.hcl 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -services { - name = "s1" - port = 8080 - connect { - sidecar_service { - proxy { - upstreams = [ - { - destination_name = "s2" - local_bind_port = 5000 - config { - limits { - max_connections = 3 - max_pending_requests = 4 - max_concurrent_requests = 5 - } - } - } - ] - } - } - } -} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s2.hcl 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/s2.hcl 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -services { - name = "s2" - port = 8181 - connect { sidecar_service {} } -} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/setup.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/setup.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -#!/bin/bash - -set -eEuo pipefail - -gen_envoy_bootstrap s1 19000 primary -gen_envoy_bootstrap s2 19001 primary diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/verify.bats 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-upstream-connection-limits/verify.bats 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -@test "s1 proxy admin is up on :19000" { - retry_default curl -f -s localhost:19000/stats -o /dev/null -} - -@test "s2 proxy admin is up on :19001" { - retry_default curl -f -s localhost:19001/stats -o /dev/null -} - -@test "s1 proxy listener should be up and have right cert" { - assert_proxy_presents_cert_uri localhost:21000 s1 -} - -@test "s2 proxy listener should be up and have right cert" { - assert_proxy_presents_cert_uri localhost:21001 s2 -} - -@test "s2 proxy should be healthy" { - assert_service_has_healthy_instances s2 1 -} - -@test "s1 upstream should have healthy endpoints for s2" { - assert_upstream_has_endpoints_in_status 127.0.0.1:19000 s2.default.primary HEALTHY 1 -} - -@test "s1 proxy should have been configured with max_connections on the cluster" { - CLUSTER_THRESHOLD=$(get_envoy_cluster_threshold localhost:19000 s2.default.primary) - echo $CLUSTER_THRESHOLD - - MAX_CONNS=$(echo $CLUSTER_THRESHOLD | jq --raw-output '.max_connections') - MAX_PENDING_REQS=$(echo $CLUSTER_THRESHOLD | jq --raw-output '.max_pending_requests') - MAX_REQS=$(echo $CLUSTER_THRESHOLD | jq --raw-output '.max_requests') - - echo "MAX_CONNS = $MAX_CONNS" - echo "MAX_PENDING_REQS = $MAX_PENDING_REQS" - echo "MAX_REQS = $MAX_REQS" - - [ "$MAX_CONNS" = "3" ] - [ "$MAX_PENDING_REQS" = "4" ] - [ "$MAX_REQS" = "5" ] -} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/bind.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/bind.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/bind.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/bind.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +bind_addr = "0.0.0.0" +advertise_addr = "{{ GetInterfaceIP \"eth0\" }}" \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/global-setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/global-setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/global-setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/global-setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,40 @@ +#!/bin/bash + +# initialize the outputs for each dc +for dc in primary secondary; do + rm -rf "workdir/${dc}/tls" + mkdir -p "workdir/${dc}/tls" +done + +container="consul-envoy-integ-tls-init--${CASE_NAME}" + +scriptlet=" +mkdir /out ; +cd /out ; +consul tls ca create ; +consul tls cert create -dc=primary -server -node=pri ; +consul tls cert create -dc=secondary -server -node=sec +" + +docker rm -f "$container" &>/dev/null || true +docker run -i --net=none --name="$container" consul-dev:latest sh -c "${scriptlet}" + +# primary +for f in \ + consul-agent-ca.pem \ + primary-server-consul-0-key.pem \ + primary-server-consul-0.pem \ + ; do + docker cp "${container}:/out/$f" workdir/primary/tls +done + +# secondary +for f in \ + consul-agent-ca.pem \ + secondary-server-consul-0-key.pem \ + secondary-server-consul-0.pem \ + ; do + docker cp "${container}:/out/$f" workdir/secondary/tls +done + +docker rm -f "$container" >/dev/null || true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +services { + name = "mesh-gateway" + kind = "mesh-gateway" + port = 4431 + meta { + consul-wan-federation = "1" + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s1 service diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/s2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s2 service diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/server.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/server.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/server.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/server.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +node_name = "pri" +connect { + enabled = true + enable_mesh_gateway_wan_federation = true +} +ca_file = "/workdir/primary/tls/consul-agent-ca.pem" +cert_file = "/workdir/primary/tls/primary-server-consul-0.pem" +key_file = "/workdir/primary/tls/primary-server-consul-0-key.pem" +verify_incoming = true +verify_outgoing = true +verify_server_hostname = true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +set -eEuo pipefail + +gen_envoy_bootstrap mesh-gateway 19000 primary true +retry_default docker_consul primary curl -s "http://localhost:8500/v1/catalog/service/consul?dc=secondary" >/dev/null diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/primary/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ +#!/usr/bin/env bats + +load helpers + +@test "gateway-primary proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "gateway-primary should have healthy endpoints for secondary" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19000 secondary HEALTHY 1 +} + +@test "primary should be able to rpc to the secondary" { + retry_default curl -sL -f -XPUT localhost:8500/v1/kv/foo?dc=secondary -d'{"Value":"bar"}' +} + +@test "wan pool should show 2 healthy nodes" { + assert_alive_wan_member_count 2 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/gateway.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/gateway.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/gateway.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/gateway.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +services { + name = "mesh-gateway" + kind = "mesh-gateway" + port = 4432 + meta { + consul-wan-federation = "1" + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s1.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s1.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s1.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s1.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s1 service diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s2.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s2.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s2.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/s2.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +# We don't want an s2 service diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/server.hcl consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/server.hcl --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/server.hcl 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/server.hcl 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,15 @@ +node_name = "sec" +connect { + enabled = true + enable_mesh_gateway_wan_federation = true +} +primary_gateways = [ + "consul-primary:4431", +] +primary_gateways_interval = "5s" +ca_file = "/workdir/secondary/tls/consul-agent-ca.pem" +cert_file = "/workdir/secondary/tls/secondary-server-consul-0.pem" +key_file = "/workdir/secondary/tls/secondary-server-consul-0-key.pem" +verify_incoming = true +verify_outgoing = true +verify_server_hostname = true diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/setup.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/setup.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/setup.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/setup.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +#!/bin/bash + +set -eEuo pipefail + +gen_envoy_bootstrap mesh-gateway 19001 secondary true +retry_default docker_consul secondary curl -s "http://localhost:8500/v1/catalog/service/consul?dc=primary" >/dev/null diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/verify.bats consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/verify.bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/verify.bats 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/secondary/verify.bats 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ +#!/usr/bin/env bats + +load helpers + +@test "gateway-secondary proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "gateway-secondary should have healthy endpoints for primary" { + assert_upstream_has_endpoints_in_status 127.0.0.1:19001 primary HEALTHY 1 +} + +@test "secondary should be able to rpc to the primary" { + retry_default curl -sL -f -XPUT localhost:8500/v1/kv/oof?dc=primary -d'{"Value":"rab"}' +} + +@test "wan pool should show 2 healthy nodes" { + assert_alive_wan_member_count 2 +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/vars.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/vars.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/case-wanfed-gw/vars.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/case-wanfed-gw/vars.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/bash + +export REQUIRED_SERVICES="gateway-primary gateway-secondary" +export REQUIRE_SECONDARY=1 diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/docker-compose.yml consul-1.8.7+dfsg1/test/integration/connect/envoy/docker-compose.yml --- consul-1.7.4+dfsg1/test/integration/connect/envoy/docker-compose.yml 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/docker-compose.yml 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ # This is a dummy container that we use to create volume and keep it # accessible while other containers are down. workdir: - image: alpine + image: docker.mirror.hashicorp.services/alpine volumes: - *workdir-volume command: @@ -47,7 +47,7 @@ s1: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s1" command: @@ -63,7 +63,7 @@ s2: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s2" command: @@ -79,7 +79,7 @@ s2-v1: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s2-v1" command: @@ -95,7 +95,7 @@ s2-v2: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s2-v2" command: @@ -111,7 +111,7 @@ s3: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s3" command: @@ -127,7 +127,7 @@ s3-v1: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s3-v1" command: @@ -143,7 +143,7 @@ s3-v2: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s3-v2" command: @@ -159,7 +159,7 @@ s3-alt: depends_on: - consul-primary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s3-alt" command: @@ -172,10 +172,26 @@ - "disabled" network_mode: service:consul-primary + s4: + depends_on: + - consul-primary + image: "docker.mirror.hashicorp.services/fortio/fortio" + environment: + - "FORTIO_NAME=s4" + command: + - "server" + - "-http-port" + - ":8382" + - "-grpc-port" + - ":8281" + - "-redirect-port" + - "disabled" + network_mode: service:consul-primary + s1-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -196,7 +212,7 @@ s2-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -217,7 +233,7 @@ s2-v1-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -238,7 +254,7 @@ s2-v2-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -259,7 +275,7 @@ s3-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -280,7 +296,7 @@ s3-v1-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -301,7 +317,7 @@ s3-v2-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -322,7 +338,7 @@ s3-alt-sidecar-proxy: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -381,7 +397,7 @@ fake-statsd: depends_on: - consul-primary - image: "alpine/socat" + image: "docker.mirror.hashicorp.services/alpine/socat" command: - -u - UDP-RECVFROM:8125,fork,reuseaddr @@ -396,7 +412,7 @@ wipe-volumes: volumes: - *workdir-volume - image: alpine + image: docker.mirror.hashicorp.services/alpine command: - sh - -c @@ -408,7 +424,7 @@ volumes: - *workdir-volume - ./:/cwd - image: alpine + image: docker.mirror.hashicorp.services/alpine command: - cp - -r @@ -418,13 +434,13 @@ zipkin: volumes: - *workdir-volume - image: openzipkin/zipkin + image: docker.mirror.hashicorp.services/openzipkin/zipkin network_mode: service:consul-primary jaeger: volumes: - *workdir-volume - image: jaegertracing/all-in-one:1.11 + image: docker.mirror.hashicorp.services/jaegertracing/all-in-one:1.11 network_mode: service:consul-primary command: - --collector.zipkin.http-port=9411 @@ -450,7 +466,7 @@ s1-secondary: depends_on: - consul-secondary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s1-secondary" command: @@ -466,7 +482,7 @@ s2-secondary: depends_on: - consul-secondary - image: "fortio/fortio" + image: "docker.mirror.hashicorp.services/fortio/fortio" environment: - "FORTIO_NAME=s2-secondary" command: @@ -482,7 +498,7 @@ s1-sidecar-proxy-secondary: depends_on: - consul-secondary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -503,7 +519,7 @@ s2-sidecar-proxy-secondary: depends_on: - consul-secondary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -524,7 +540,7 @@ gateway-primary: depends_on: - consul-primary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -545,7 +561,7 @@ gateway-secondary: depends_on: - consul-secondary - image: "envoyproxy/envoy:v${ENVOY_VERSION}" + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" command: - "envoy" - "-c" @@ -563,6 +579,40 @@ - *workdir-volume network_mode: service:consul-secondary + ingress-gateway-primary: + depends_on: + - consul-primary + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" + command: + - "envoy" + - "-c" + - "/workdir/primary/envoy/ingress-gateway-bootstrap.json" + - "-l" + - "debug" + - "--disable-hot-restart" + - "--drain-time-s" + - "1" + volumes: + - *workdir-volume + network_mode: service:consul-primary + + terminating-gateway-primary: + depends_on: + - consul-primary + image: "docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION}" + command: + - "envoy" + - "-c" + - "/workdir/primary/envoy/terminating-gateway-bootstrap.json" + - "-l" + - "debug" + - "--disable-hot-restart" + - "--drain-time-s" + - "1" + volumes: + - *workdir-volume + network_mode: service:consul-primary + verify-primary: depends_on: - consul-primary diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/Dockerfile-bats consul-1.8.7+dfsg1/test/integration/connect/envoy/Dockerfile-bats --- consul-1.7.4+dfsg1/test/integration/connect/envoy/Dockerfile-bats 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/Dockerfile-bats 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ -FROM fortio/fortio AS fortio +FROM docker.mirror.hashicorp.services/fortio/fortio AS fortio -FROM bats/bats:latest +FROM docker.mirror.hashicorp.services/bats/bats:latest RUN apk add curl RUN apk add openssl diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/Dockerfile-consul-envoy consul-1.8.7+dfsg1/test/integration/connect/envoy/Dockerfile-consul-envoy --- consul-1.7.4+dfsg1/test/integration/connect/envoy/Dockerfile-consul-envoy 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/Dockerfile-consul-envoy 2020-12-10 21:46:52.000000000 +0000 @@ -3,5 +3,5 @@ FROM consul-dev as consul -FROM envoyproxy/envoy:v${ENVOY_VERSION} +FROM docker.mirror.hashicorp.services/envoyproxy/envoy:v${ENVOY_VERSION} COPY --from=consul /bin/consul /bin/consul diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/Dockerfile-tcpdump consul-1.8.7+dfsg1/test/integration/connect/envoy/Dockerfile-tcpdump --- consul-1.7.4+dfsg1/test/integration/connect/envoy/Dockerfile-tcpdump 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/Dockerfile-tcpdump 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,4 @@ -FROM alpine:latest +FROM docker.mirror.hashicorp.services/alpine:latest RUN apk add --no-cache tcpdump VOLUME [ "/data" ] diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/helpers.bash consul-1.8.7+dfsg1/test/integration/connect/envoy/helpers.bash --- consul-1.7.4+dfsg1/test/integration/connect/envoy/helpers.bash 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/helpers.bash 2020-12-10 21:46:52.000000000 +0000 @@ -100,7 +100,7 @@ function get_cert { local HOSTPORT=$1 - CERT=$(openssl s_client -connect $HOSTPORT -showcerts ) + CERT=$(openssl s_client -connect $HOSTPORT -showcerts "./workdir/${DC}/envoy/${ENVOY_NAME}-config_dump.json" - docker_wget "$DC" "http://${HOSTPORT}/clusters?format=json" -q -O - > "./workdir/${DC}/envoy/${ENVOY_NAME}-clusters.json" - docker_wget "$DC" "http://${HOSTPORT}/stats" -q -O - > "./workdir/${DC}/envoy/${ENVOY_NAME}-stats.txt" + mkdir -p "${OUTDIR}" + docker_wget "$DC" "http://${HOSTPORT}/config_dump" -q -O - > "${OUTDIR}/config_dump.json" + docker_wget "$DC" "http://${HOSTPORT}/clusters?format=json" -q -O - > "${OUTDIR}/clusters.json" + docker_wget "$DC" "http://${HOSTPORT}/stats" -q -O - > "${OUTDIR}/stats.txt" } function reset_envoy_metrics { @@ -337,6 +353,27 @@ echo "$output" | jq --raw-output '. | length' } +function assert_alive_wan_member_count { + local EXPECT_COUNT=$1 + run retry_long assert_alive_wan_member_count_once $EXPECT_COUNT + [ "$status" -eq 0 ] +} + +function assert_alive_wan_member_count_once { + local EXPECT_COUNT=$1 + + GOT_COUNT=$(get_alive_wan_member_count) + + [ "$GOT_COUNT" -eq "$EXPECT_COUNT" ] +} + +function get_alive_wan_member_count { + run retry_default curl -sL -f "127.0.0.1:8500/v1/agent/members?wan=1" + [ "$status" -eq 0 ] + # echo "$output" >&3 + echo "$output" | jq '.[] | select(.Status == 1) | .Name' | wc -l +} + function assert_service_has_healthy_instances_once { local SERVICE_NAME=$1 local EXPECT_COUNT=$2 @@ -388,13 +425,13 @@ function docker_wget { local DC=$1 shift 1 - docker run -ti --rm --network container:envoy_consul-${DC}_1 alpine:3.9 wget "$@" + docker run --rm --network container:envoy_consul-${DC}_1 docker.mirror.hashicorp.services/alpine:3.9 wget "$@" } function docker_curl { local DC=$1 shift 1 - docker run -ti --rm --network container:envoy_consul-${DC}_1 --entrypoint curl consul-dev "$@" + docker run --rm --network container:envoy_consul-${DC}_1 --entrypoint curl consul-dev "$@" } function docker_exec { @@ -504,11 +541,11 @@ SERVICE=$1 ADMIN_PORT=$2 DC=${3:-primary} - IS_MGW=${4:-0} + IS_GW=${4:-0} EXTRA_ENVOY_BS_ARGS="${5-}" PROXY_ID="$SERVICE" - if ! is_set "$IS_MGW" + if ! is_set "$IS_GW" then PROXY_ID="$SERVICE-sidecar-proxy" fi @@ -537,6 +574,12 @@ docker_consul "$DC" config read -kind $KIND -name $NAME } +function wait_for_namespace { + local NS="${1}" + local DC=${2:-primary} + retry_default docker_curl "$DC" -sLf "http://127.0.0.1:8500/v1/namespace/${NS}" >/dev/null +} + function wait_for_config_entry { retry_default read_config_entry "$@" >/dev/null } @@ -595,6 +638,10 @@ return $? } +function get_ca_root { + curl -s -f "http://localhost:8500/v1/connect/ca/roots" | jq -r ".Roots[0].RootCert" +} + function wait_for_agent_service_register { local SERVICE_ID=$1 local DC=${2:-primary} @@ -622,18 +669,48 @@ } function get_upstream_fortio_name { - run retry_default curl -v -s -f localhost:5000/debug?env=dump + local HOST=$1 + local PORT=$2 + local PREFIX=$3 + local DEBUG_HEADER_VALUE="${4:-""}" + local extra_args + if [[ -n "${DEBUG_HEADER_VALUE}" ]]; then + extra_args="-H x-test-debug:${DEBUG_HEADER_VALUE}" + fi + run retry_default curl -v -s -f -H"Host: ${HOST}" $extra_args \ + "localhost:${PORT}${PREFIX}/debug?env=dump" [ "$status" == 0 ] echo "$output" | grep -E "^FORTIO_NAME=" } function assert_expected_fortio_name { local EXPECT_NAME=$1 + local HOST=${2:-"localhost"} + local PORT=${3:-5000} + local URL_PREFIX=${4:-""} + local DEBUG_HEADER_VALUE="${5:-""}" - GOT=$(get_upstream_fortio_name) + GOT=$(get_upstream_fortio_name ${HOST} ${PORT} "${URL_PREFIX}" "${DEBUG_HEADER_VALUE}") if [ "$GOT" != "FORTIO_NAME=${EXPECT_NAME}" ]; then echo "expected name: $EXPECT_NAME, actual name: $GOT" 1>&2 return 1 fi } + +function assert_expected_fortio_name_pattern { + local EXPECT_NAME_PATTERN=$1 + local HOST=${2:-"localhost"} + local PORT=${3:-5000} + local URL_PREFIX=${4:-""} + local DEBUG_HEADER_VALUE="${5:-""}" + + GOT=$(get_upstream_fortio_name ${HOST} ${PORT} "${URL_PREFIX}" "${DEBUG_HEADER_VALUE}") + + if [[ "$GOT" =~ $EXPECT_NAME_PATTERN ]]; then + : + else + echo "expected name pattern: $EXPECT_NAME_PATTERN, actual name: $GOT" 1>&2 + return 1 + fi +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/main_test.go consul-1.8.7+dfsg1/test/integration/connect/envoy/main_test.go --- consul-1.7.4+dfsg1/test/integration/connect/envoy/main_test.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/main_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,74 @@ +// +build integration + +package envoy + +import ( + "os" + "os/exec" + "testing" +) + +func TestEnvoy(t *testing.T) { + var testcases = []string{ + "case-badauthz", + "case-basic", + "case-centralconf", + "case-cfg-resolver-dc-failover-gateways-none", + "case-cfg-resolver-dc-failover-gateways-remote", + "case-cfg-resolver-defaultsubset", + "case-cfg-resolver-features", + "case-cfg-resolver-subset-onlypassing", + "case-cfg-resolver-subset-redirect", + "case-cfg-resolver-svc-failover", + "case-cfg-resolver-svc-redirect-http", + "case-cfg-resolver-svc-redirect-tcp", + "case-cfg-router-features", + "case-cfg-splitter-features", + "case-consul-exec", + "case-dogstatsd-udp", + "case-gateways-local", + "case-gateways-remote", + "case-gateway-without-services", + "case-grpc", + "case-http", + "case-http-badauthz", + "case-ingress-gateway-http", + "case-ingress-gateway-grpc", + "case-ingress-gateway-multiple-services", + "case-ingress-gateway-simple", + "case-ingress-gateway-tls", + "case-ingress-mesh-gateways-resolver", + "case-multidc-rsa-ca", + "case-prometheus", + "case-statsd-udp", + "case-stats-proxy", + "case-terminating-gateway-hostnames", + "case-terminating-gateway-simple", + "case-terminating-gateway-subsets", + "case-terminating-gateway-without-services", + "case-upstream-config", + "case-wanfed-gw", + "case-zipkin", + } + + runCmd(t, "suite_setup") + defer runCmd(t, "suite_teardown") + + for _, tc := range testcases { + t.Run(tc, func(t *testing.T) { + runCmd(t, "run_tests", "CASE_DIR="+tc) + }) + } +} + +func runCmd(t *testing.T, c string, env ...string) { + t.Helper() + + cmd := exec.Command("./run-tests.sh", c) + cmd.Env = append(os.Environ(), env...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + t.Fatalf("command failed: %v", err) + } +} diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/run-tests.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/run-tests.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/run-tests.sh 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/run-tests.sh 2020-12-10 21:46:52.000000000 +0000 @@ -1,57 +1,20 @@ -#!/bin/bash +#!/usr/bin/env bash set -eEuo pipefail # DEBUG=1 enables set -x for this script so echos every command run DEBUG=${DEBUG:-} -# FILTER_TESTS="" skips any test whose CASENAME doesn't match the -# pattern. CASENAME is combination of the name from the case- dir and the -# envoy version for example: "http, envoy 1.8.0". The pattern is passed to grep -# over that string. -FILTER_TESTS=${FILTER_TESTS:-} - -# STOP_ON_FAIL exits after a case fails so the workdir state can be viewed and -# the components interacted with to debug the failure. This is useful when tests -# only fail when run as part of a whole suite but work in isolation. -STOP_ON_FAIL=${STOP_ON_FAIL:-} - -# ENVOY_VERSIONS is the list of envoy versions to run each test against -ENVOY_VERSIONS=${ENVOY_VERSIONS:-"1.10.0 1.11.2 1.12.2 1.13.0"} +# ENVOY_VERSION to run each test against +ENVOY_VERSION=${ENVOY_VERSION:-"1.14.5"} +export ENVOY_VERSION if [ ! -z "$DEBUG" ] ; then set -x fi -DIR=$(cd -P -- "$(dirname -- "$0")" && pwd -P) - -cd $DIR - -LEAVE_CONSUL_UP=${LEAVE_CONSUL_UP:-} -PROXY_LOGS_ON_FAIL=${PROXY_LOGS_ON_FAIL:-} - source helpers.bash -RESULT=1 -CLEANED_UP=0 - -function cleanup { - local STATUS="$?" - - if [ "$CLEANED_UP" != 0 ] ; then - return - fi - CLEANED_UP=1 - - if [ "$STATUS" -ne 0 ] - then - capture_logs - fi - - docker-compose down -v --remove-orphans -} -trap cleanup EXIT - function command_error { echo "ERR: command exited with status $1" 1>&2 echo " command: $2" 1>&2 @@ -65,12 +28,6 @@ trap 'command_error $? "${BASH_COMMAND}" "${LINENO}" "${FUNCNAME[0]:-main}" "${BASH_SOURCE[0]}:${BASH_LINENO[0]}"' ERR -# Cleanup from any previous unclean runs. -docker-compose down -v --remove-orphans - -# Start the volume container -docker-compose up -d workdir - function init_workdir { local DC="$1" @@ -102,12 +59,12 @@ find ${CASE_DIR}/${DC} -type f -name '*.hcl' -exec cp -f {} workdir/${DC}/consul \; find ${CASE_DIR}/${DC} -type f -name '*.bats' -exec cp -f {} workdir/${DC}/bats \; fi - + if test -d "${CASE_DIR}/data" then cp -r ${CASE_DIR}/data/* workdir/${DC}/data fi - + return 0 } @@ -123,11 +80,11 @@ local DC=${1:-primary} # Run test case setup (e.g. generating Envoy bootstrap, starting containers) - if [ -f "${CASE_DIR}${DC}/setup.sh" ] + if [ -f "${CASE_DIR}/${DC}/setup.sh" ] then - source ${CASE_DIR}${DC}/setup.sh + source ${CASE_DIR}/${DC}/setup.sh else - source ${CASE_DIR}setup.sh + source ${CASE_DIR}/setup.sh fi } @@ -147,18 +104,13 @@ function verify { local DC=$1 - if test -z "$DC" - then + if test -z "$DC"; then DC=primary fi # Execute tests res=0 - echo "- - - - - - - - - - - - - - - - - - - - - - - -" - echoblue -n "CASE $CASE_STR" - echo -n ": " - # Nuke any previous case's verify container. docker-compose rm -s -v -f verify-${DC} || true @@ -168,13 +120,12 @@ echored "⨯ FAIL" res=1 fi - echo "================================================" return $res } function capture_logs { - echo "Capturing Logs for $CASE_STR" + echo "Capturing Logs" mkdir -p "$LOG_DIR" services="$REQUIRED_SERVICES consul-primary" if is_set $REQUIRE_SECONDARY @@ -182,10 +133,10 @@ services="$services consul-secondary" fi - if [ -f "${CASE_DIR}capture.sh" ] + if [ -f "${CASE_DIR}/capture.sh" ] then - echo "Executing ${CASE_DIR}capture.sh" - source ${CASE_DIR}capture.sh || true + echo "Executing ${CASE_DIR}/capture.sh" + source ${CASE_DIR}/capture.sh || true fi @@ -197,23 +148,34 @@ } function stop_services { - # Teardown - if [ -f "${CASE_DIR}teardown.sh" ] ; then - source "${CASE_DIR}teardown.sh" + if [ -f "${CASE_DIR}/teardown.sh" ] ; then + source "${CASE_DIR}/teardown.sh" fi docker-compose rm -s -v -f $REQUIRED_SERVICES || true } -function initVars { +function init_vars { source "defaults.sh" - if [ -f "${CASE_DIR}vars.sh" ] ; then - source "${CASE_DIR}vars.sh" + if [ -f "${CASE_DIR}/vars.sh" ] ; then + source "${CASE_DIR}/vars.sh" fi } -function runTest { - initVars +function global_setup { + if [ -f "${CASE_DIR}/global-setup.sh" ] ; then + source "${CASE_DIR}/global-setup.sh" + fi +} + +function run_tests { + CASE_DIR="${CASE_DIR?CASE_DIR must be set to the path of the test case}" + CASE_NAME=$( basename $CASE_DIR | cut -c6- ) + export CASE_NAME + + export LOG_DIR="workdir/logs/${CASE_DIR}/${ENVOY_VERSION}" + + init_vars # Initialize the workdir init_workdir primary @@ -223,6 +185,8 @@ init_workdir secondary fi + global_setup + # Wipe state docker-compose up wipe-volumes @@ -307,43 +271,29 @@ return $TESTRESULT } +function suite_setup { + # Set a log dir to prevent docker-compose warning about unset var + export LOG_DIR="workdir/logs/" + # Cleanup from any previous unclean runs. + docker-compose down --volumes --timeout 0 --remove-orphans -RESULT=0 + # Start the volume container + docker-compose up -d workdir +} -for c in ./case-*/ ; do - for ev in $ENVOY_VERSIONS ; do - export CASE_DIR="${c}" - export CASE_NAME=$( basename $c | cut -c6- ) - export CASE_ENVOY_VERSION="envoy $ev" - export CASE_STR="$CASE_NAME, $CASE_ENVOY_VERSION" - export ENVOY_VERSION="${ev}" - export LOG_DIR="workdir/logs/${CASE_DIR}/${ENVOY_VERSION}" - echo "================================================" - echoblue "CASE $CASE_STR" - echo "- - - - - - - - - - - - - - - - - - - - - - - -" - - if [ ! -z "$FILTER_TESTS" ] && echo "$CASE_STR" | grep -v "$FILTER_TESTS" > /dev/null ; then - echo " SKIPPED: doesn't match FILTER_TESTS=$FILTER_TESTS" - continue 1 - fi +function suite_teardown { + # Set a log dir to prevent docker-compose warning about unset var + export LOG_DIR="workdir/logs/" - if ! runTest - then - RESULT=1 - fi + docker-compose down --volumes --timeout 0 --remove-orphans +} - if [ $RESULT -ne 0 ] && [ ! -z "$STOP_ON_FAIL" ] ; then - echo " => STOPPING because STOP_ON_FAIL set" - break 2 - fi - done -done -cleanup +case "${1-}" in + "") + echo "command required" + exit 1 ;; + *) + "$@" ;; +esac -if [ $RESULT -eq 0 ] ; then - echogreen "✓ PASS" -else - echored "⨯ FAIL" - exit 1 -fi diff -Nru consul-1.7.4+dfsg1/test/integration/connect/envoy/test-envoy-versions.sh consul-1.8.7+dfsg1/test/integration/connect/envoy/test-envoy-versions.sh --- consul-1.7.4+dfsg1/test/integration/connect/envoy/test-envoy-versions.sh 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/test/integration/connect/envoy/test-envoy-versions.sh 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +#!/bin/bash + +set -euo pipefail + +unset CDPATH + +cd "$(dirname "$0")" + +# MISSING: 1.14.0 +# MISSING: 1.13.5 +versions=( + 1.14.5 + 1.14.4 + 1.14.3 + 1.14.2 + 1.14.1 + 1.13.6 + 1.13.4 + 1.13.3 + 1.13.2 + 1.13.1 + 1.13.0 + 1.12.7 + 1.12.6 + 1.12.5 + 1.12.4 + 1.12.3 + 1.12.2 + 1.12.1 + 1.12.0 + 1.11.2 + 1.11.1 + 1.11.0 + 1.10.0 +) + +for v in "${versions[@]}"; do + echo "ENVOY_VERSION=${v}" + export ENVOY_VERSION="${v}" + go test -tags integration +done diff -Nru consul-1.7.4+dfsg1/testrpc/wait.go consul-1.8.7+dfsg1/testrpc/wait.go --- consul-1.7.4+dfsg1/testrpc/wait.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/testrpc/wait.go 2020-12-10 21:46:52.000000000 +0000 @@ -11,12 +11,20 @@ type rpcFn func(string, interface{}, interface{}) error // WaitForLeader ensures we have a leader and a node registration. -func WaitForLeader(t *testing.T, rpc rpcFn, dc string) { +func WaitForLeader(t *testing.T, rpc rpcFn, dc string, options ...waitOption) { t.Helper() + flat := flattenOptions(options) + if flat.WaitForAntiEntropySync { + t.Fatalf("WaitForLeader doesn't accept the WaitForAntiEntropySync option") + } + var out structs.IndexedNodes retry.Run(t, func(r *retry.R) { - args := &structs.DCSpecificRequest{Datacenter: dc} + args := &structs.DCSpecificRequest{ + Datacenter: dc, + QueryOptions: structs.QueryOptions{Token: flat.Token}, + } if err := rpc("Catalog.ListNodes", args, &out); err != nil { r.Fatalf("Catalog.ListNodes failed: %v", err) } @@ -30,12 +38,20 @@ } // WaitUntilNoLeader ensures no leader is present, useful for testing lost leadership. -func WaitUntilNoLeader(t *testing.T, rpc rpcFn, dc string) { +func WaitUntilNoLeader(t *testing.T, rpc rpcFn, dc string, options ...waitOption) { t.Helper() + flat := flattenOptions(options) + if flat.WaitForAntiEntropySync { + t.Fatalf("WaitUntilNoLeader doesn't accept the WaitForAntiEntropySync option") + } + var out structs.IndexedNodes retry.Run(t, func(r *retry.R) { - args := &structs.DCSpecificRequest{Datacenter: dc} + args := &structs.DCSpecificRequest{ + Datacenter: dc, + QueryOptions: structs.QueryOptions{Token: flat.Token}, + } if err := rpc("Catalog.ListNodes", args, &out); err == nil { r.Fatalf("It still has a leader: %#v", out) } @@ -58,30 +74,32 @@ return waitOption{WaitForAntiEntropySync: true} } -// WaitForTestAgent ensures we have a node with serfHealth check registered -func WaitForTestAgent(t *testing.T, rpc rpcFn, dc string, options ...waitOption) { - t.Helper() - - var nodes structs.IndexedNodes - var checks structs.IndexedHealthChecks - - var ( - token string - waitForAntiEntropySync bool - ) +func flattenOptions(options []waitOption) waitOption { + var flat waitOption for _, opt := range options { if opt.Token != "" { - token = opt.Token + flat.Token = opt.Token } if opt.WaitForAntiEntropySync { - waitForAntiEntropySync = true + flat.WaitForAntiEntropySync = true } } + return flat +} + +// WaitForTestAgent ensures we have a node with serfHealth check registered +func WaitForTestAgent(t *testing.T, rpc rpcFn, dc string, options ...waitOption) { + t.Helper() + + flat := flattenOptions(options) + + var nodes structs.IndexedNodes + var checks structs.IndexedHealthChecks retry.Run(t, func(r *retry.R) { dcReq := &structs.DCSpecificRequest{ Datacenter: dc, - QueryOptions: structs.QueryOptions{Token: token}, + QueryOptions: structs.QueryOptions{Token: flat.Token}, } if err := rpc("Catalog.ListNodes", dcReq, &nodes); err != nil { r.Fatalf("Catalog.ListNodes failed: %v", err) @@ -90,7 +108,7 @@ r.Fatalf("No registered nodes") } - if waitForAntiEntropySync { + if flat.WaitForAntiEntropySync { if len(nodes.Nodes[0].TaggedAddresses) == 0 { r.Fatalf("Not synced via anti entropy yet") } @@ -100,7 +118,7 @@ nodeReq := &structs.NodeSpecificRequest{ Datacenter: dc, Node: nodes.Nodes[0].Node, - QueryOptions: structs.QueryOptions{Token: token}, + QueryOptions: structs.QueryOptions{Token: flat.Token}, } if err := rpc("Health.NodeChecks", nodeReq, &checks); err != nil { r.Fatalf("Health.NodeChecks failed: %v", err) diff -Nru consul-1.7.4+dfsg1/tlsutil/config.go consul-1.8.7+dfsg1/tlsutil/config.go --- consul-1.7.4+dfsg1/tlsutil/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/tlsutil/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,12 @@ "github.com/hashicorp/go-hclog" ) +// ALPNWrapper is a function that is used to wrap a non-TLS connection and +// returns an appropriate TLS connection or error. This taks a datacenter and +// node name as argument to configure the desired SNI value and the desired +// next proto for configuring ALPN. +type ALPNWrapper func(dc, nodeName, alpnProto string, conn net.Conn) (net.Conn, error) + // DCWrapper is a function that is used to wrap a non-TLS connection // and returns an appropriate TLS connection or error. This takes // a datacenter as an argument. @@ -121,9 +127,9 @@ // and key). EnableAgentTLSForChecks bool - // AutoEncryptTLS opts the agent into provisioning agent + // AutoTLS opts the agent into provisioning agent // TLS certificates. - AutoEncryptTLS bool + AutoTLS bool } func tlsVersions() []string { @@ -153,14 +159,14 @@ } } -type autoEncrypt struct { +type autoTLS struct { manualCAPems []string connectCAPems []string cert *tls.Certificate verifyServerHostname bool } -func (a *autoEncrypt) caPems() []string { +func (a *autoTLS) caPems() []string { return append(a.manualCAPems, a.connectCAPems...) } @@ -174,7 +180,7 @@ type Configurator struct { sync.RWMutex base *Config - autoEncrypt *autoEncrypt + autoTLS *autoTLS manual *manual peerDatacenterUseTLS map[string]bool @@ -195,7 +201,7 @@ c := &Configurator{ logger: logger.Named(logging.TLSUtil), manual: &manual{}, - autoEncrypt: &autoEncrypt{}, + autoTLS: &autoTLS{}, peerDatacenterUseTLS: map[string]bool{}, } err := c.Update(config) @@ -209,7 +215,7 @@ func (c *Configurator) CAPems() []string { c.RLock() defer c.RUnlock() - return append(c.manual.caPems, c.autoEncrypt.caPems()...) + return append(c.manual.caPems, c.autoTLS.caPems()...) } // ManualCAPems returns the currently loaded CAs in PEM format. @@ -232,11 +238,11 @@ if err != nil { return err } - pems, err := loadCAs(config.CAFile, config.CAPath) + pems, err := LoadCAs(config.CAFile, config.CAPath) if err != nil { return err } - pool, err := pool(append(pems, c.autoEncrypt.caPems()...)) + pool, err := pool(append(pems, c.autoTLS.caPems()...)) if err != nil { return err } @@ -251,17 +257,17 @@ return nil } -// UpdateAutoEncryptCA updates the autoEncrypt.caPems. This is supposed to be called +// UpdateAutoTLSCA updates the autoEncrypt.caPems. This is supposed to be called // from the server in order to be able to accept TLS connections with TLS // certificates. // Or it is being called on the client side when CA changes are detected. -func (c *Configurator) UpdateAutoEncryptCA(connectCAPems []string) error { +func (c *Configurator) UpdateAutoTLSCA(connectCAPems []string) error { c.Lock() // order of defers matters because log acquires a RLock() defer c.log("UpdateAutoEncryptCA") defer c.Unlock() - pool, err := pool(append(c.manual.caPems, append(c.autoEncrypt.manualCAPems, connectCAPems...)...)) + pool, err := pool(append(c.manual.caPems, append(c.autoTLS.manualCAPems, connectCAPems...)...)) if err != nil { c.RUnlock() return err @@ -270,14 +276,14 @@ c.RUnlock() return err } - c.autoEncrypt.connectCAPems = connectCAPems + c.autoTLS.connectCAPems = connectCAPems c.caPool = pool c.version++ return nil } -// UpdateAutoEncryptCert -func (c *Configurator) UpdateAutoEncryptCert(pub, priv string) error { +// UpdateAutoTLSCert +func (c *Configurator) UpdateAutoTLSCert(pub, priv string) error { // order of defers matters because log acquires a RLock() defer c.log("UpdateAutoEncryptCert") cert, err := tls.X509KeyPair([]byte(pub), []byte(priv)) @@ -288,14 +294,14 @@ c.Lock() defer c.Unlock() - c.autoEncrypt.cert = &cert + c.autoTLS.cert = &cert c.version++ return nil } -// UpdateAutoEncrypt sets everything under autoEncrypt. This is being called on the -// client when it received its cert from AutoEncrypt endpoint. -func (c *Configurator) UpdateAutoEncrypt(manualCAPems, connectCAPems []string, pub, priv string, verifyServerHostname bool) error { +// UpdateAutoTLS sets everything under autoEncrypt. This is being called on the +// client when it received its cert from AutoEncrypt/AutoConfig endpoints. +func (c *Configurator) UpdateAutoTLS(manualCAPems, connectCAPems []string, pub, priv string, verifyServerHostname bool) error { // order of defers matters because log acquires a RLock() defer c.log("UpdateAutoEncrypt") cert, err := tls.X509KeyPair([]byte(pub), []byte(priv)) @@ -310,11 +316,11 @@ if err != nil { return err } - c.autoEncrypt.manualCAPems = manualCAPems - c.autoEncrypt.connectCAPems = connectCAPems - c.autoEncrypt.cert = &cert + c.autoTLS.manualCAPems = manualCAPems + c.autoTLS.connectCAPems = connectCAPems + c.autoTLS.cert = &cert c.caPool = pool - c.autoEncrypt.verifyServerHostname = verifyServerHostname + c.autoTLS.verifyServerHostname = verifyServerHostname c.version++ return nil } @@ -369,20 +375,19 @@ // Ensure we have a CA and cert if VerifyIncoming is set if config.anyVerifyIncoming() { - autoEncryptMsg := " AutoEncrypt only secures the connection between client and server and doesn't affect incoming connections on the client." if pool == nil { - errMsg := "VerifyIncoming set, and no CA certificate provided!" - if config.AutoEncryptTLS { - errMsg += autoEncryptMsg - } - return fmt.Errorf(errMsg) + // both auto-config and auto-encrypt require verifying the connection from the client to the server for secure + // operation. In order to be able to verify the servers certificate we must have some CA certs already provided. + // Therefore, even though both of those features can push down extra CA certificates which could be used to + // verify incoming connections, we still must consider it an error if none are provided in the initial configuration + // as those features cannot be successfully enabled without providing CA certificates to use those features. + return fmt.Errorf("VerifyIncoming set but no CA certificates were provided") } - if cert == nil { - errMsg := "VerifyIncoming set, and no Cert/Key pair provided!" - if config.AutoEncryptTLS { - errMsg += autoEncryptMsg - } - return fmt.Errorf(errMsg) + + // We will use the auto_encrypt/auto_config cert for TLS in the incoming APIs when available. Therefore the check + // here will ensure that either we enabled one of those two features or a certificate and key were provided manually + if cert == nil && !config.AutoTLS { + return fmt.Errorf("VerifyIncoming requires either a Cert and Key pair in the configuration file, or auto_encrypt/auto_config be enabled") } } return nil @@ -415,7 +420,7 @@ return &cert, nil } -func loadCAs(caFile, caPath string) ([]string, error) { +func LoadCAs(caFile, caPath string) ([]string, error) { if caFile == "" && caPath == "" { return nil, nil } @@ -494,11 +499,17 @@ // to a server requesting a certificate. Return the autoEncrypt certificate // if possible, otherwise default to the manually provisioned one. tlsConfig.GetClientCertificate = func(*tls.CertificateRequestInfo) (*tls.Certificate, error) { - cert := c.autoEncrypt.cert + cert := c.autoTLS.cert if cert == nil { cert = c.manual.cert } + if cert == nil { + // the return value MUST not be nil but an empty certificate will be + // treated the same as having no client certificate + cert = &tls.Certificate{} + } + return cert, nil } @@ -524,7 +535,7 @@ defer c.RUnlock() cert := c.manual.cert if cert == nil { - cert = c.autoEncrypt.cert + cert = c.autoTLS.cert } return cert } @@ -542,7 +553,7 @@ defer c.RUnlock() // if AutoEncrypt enabled, always use TLS - if c.base.AutoEncryptTLS { + if c.base.AutoTLS { return false } @@ -554,6 +565,17 @@ return true } +func (c *Configurator) MutualTLSCapable() bool { + return c.mutualTLSCapable() +} + +// This function acquires a read lock because it reads from the config. +func (c *Configurator) mutualTLSCapable() bool { + c.RLock() + defer c.RUnlock() + return c.caPool != nil && (c.autoTLS.cert != nil || c.manual.cert != nil) +} + // This function acquires a read lock because it reads from the config. func (c *Configurator) verifyOutgoing() bool { c.RLock() @@ -561,13 +583,24 @@ // If AutoEncryptTLS is enabled and there is a CA, then verify // outgoing. - if c.base.AutoEncryptTLS && c.caPool != nil { + if c.base.AutoTLS && c.caPool != nil { return true } return c.base.VerifyOutgoing } +func (c *Configurator) ServerSNI(dc, nodeName string) string { + // Strip the trailing '.' from the domain if any + domain := strings.TrimSuffix(c.domain(), ".") + + if nodeName == "" || nodeName == "*" { + return "server." + dc + "." + domain + } + + return nodeName + ".server." + dc + "." + domain +} + // This function acquires a read lock because it reads from the config. func (c *Configurator) domain() string { c.RLock() @@ -610,7 +643,7 @@ func (c *Configurator) VerifyServerHostname() bool { c.RLock() defer c.RUnlock() - return c.base.VerifyServerHostname || c.autoEncrypt.verifyServerHostname + return c.base.VerifyServerHostname || c.autoTLS.verifyServerHostname } // IncomingGRPCConfig generates a *tls.Config for incoming GRPC connections. @@ -639,6 +672,22 @@ return config } +// IncomingALPNRPCConfig generates a *tls.Config for incoming RPC connections +// directly using TLS with ALPN instead of the older byte-prefixed protocol. +func (c *Configurator) IncomingALPNRPCConfig(alpnProtos []string) *tls.Config { + c.log("IncomingALPNRPCConfig") + // Since the ALPN-RPC variation is indirectly exposed to the internet via + // mesh gateways we force mTLS and full server name verification. + config := c.commonTLSConfig(true) + config.InsecureSkipVerify = false + + config.GetConfigForClient = func(*tls.ClientHelloInfo) (*tls.Config, error) { + return c.IncomingALPNRPCConfig(alpnProtos), nil + } + config.NextProtos = alpnProtos + return config +} + // IncomingInsecureRPCConfig means that it doesn't verify incoming even thought // it might have been configured. This is only supposed to be used by the // servers for the insecure RPC server. At the time of writing only the @@ -694,6 +743,24 @@ return c.commonTLSConfig(false) } +// OutgoingALPNRPCConfig generates a *tls.Config for outgoing RPC connections +// directly using TLS with ALPN instead of the older byte-prefixed protocol. +// If there is a CA or VerifyOutgoing is set, a *tls.Config will be provided, +// otherwise we assume that no TLS should be used which completely disables the +// ALPN variation. +func (c *Configurator) OutgoingALPNRPCConfig() *tls.Config { + c.log("OutgoingALPNRPCConfig") + if !c.mutualTLSCapable() { + return nil // ultimately this will hard-fail as TLS is required + } + + // Since the ALPN-RPC variation is indirectly exposed to the internet via + // mesh gateways we force mTLS and full server name verification. + config := c.commonTLSConfig(true) + config.InsecureSkipVerify = false + return config +} + // OutgoingRPCWrapper wraps the result of OutgoingRPCConfig in a DCWrapper. It // decides if verify server hostname should be used. func (c *Configurator) OutgoingRPCWrapper() DCWrapper { @@ -712,12 +779,25 @@ return !c.outgoingRPCTLSDisabled() && c.getAreaForPeerDatacenterUseTLS(dc) } +// OutgoingALPNRPCWrapper wraps the result of OutgoingALPNRPCConfig in an +// ALPNWrapper. It configures all of the negotiation plumbing. +func (c *Configurator) OutgoingALPNRPCWrapper() ALPNWrapper { + c.log("OutgoingALPNRPCWrapper") + if !c.mutualTLSCapable() { + return nil + } + + return func(dc, nodeName, alpnProto string, conn net.Conn) (net.Conn, error) { + return c.wrapALPNTLSClient(dc, nodeName, alpnProto, conn) + } +} + // AutoEncryptCertNotAfter returns NotAfter from the auto_encrypt cert. In case // there is no cert, it will return a time in the past. func (c *Configurator) AutoEncryptCertNotAfter() time.Time { c.RLock() defer c.RUnlock() - tlsCert := c.autoEncrypt.cert + tlsCert := c.autoTLS.cert if tlsCert == nil || tlsCert.Certificate == nil { return time.Now().AddDate(0, 0, -1) } @@ -738,7 +818,7 @@ if c.logger != nil { c.RLock() defer c.RUnlock() - c.logger.Debug(name, "version", c.version) + c.logger.Trace(name, "version", c.version) } } @@ -808,6 +888,48 @@ return tlsConn, err } +// Wrap a net.Conn into a client tls connection suitable for secure ALPN-RPC, +// performing any additional verification as needed. +func (c *Configurator) wrapALPNTLSClient(dc, nodeName, alpnProto string, conn net.Conn) (net.Conn, error) { + if dc == "" { + return nil, fmt.Errorf("cannot dial using ALPN-RPC without a target datacenter") + } else if nodeName == "" { + return nil, fmt.Errorf("cannot dial using ALPN-RPC without a target node") + } else if alpnProto == "" { + return nil, fmt.Errorf("cannot dial using ALPN-RPC without a target alpn protocol") + } + + config := c.OutgoingALPNRPCConfig() + if config == nil { + return nil, fmt.Errorf("cannot dial via a mesh gateway when outgoing TLS is disabled") + } + + // Since the ALPN-RPC variation is indirectly exposed to the internet via + // mesh gateways we force mTLS and full hostname validation (forcing + // verify_server_hostname and verify_outgoing to be effectively true). + + config.ServerName = c.ServerSNI(dc, nodeName) + config.NextProtos = []string{alpnProto} + + tlsConn := tls.Client(conn, config) + + // NOTE: For this handshake to succeed the server must have key material + // for either ".server.." or + // "*.server.." in addition to the + // "server.." required for standard TLS'd RPC. + if err := tlsConn.Handshake(); err != nil { + tlsConn.Close() + return nil, err + } + + if cs := tlsConn.ConnectionState(); !cs.NegotiatedProtocolIsMutual { + tlsConn.Close() + return nil, fmt.Errorf("could not negotiate ALPN protocol %q with %q", alpnProto, config.ServerName) + } + + return tlsConn, nil +} + // ParseCiphers parse ciphersuites from the comma-separated string into // recognized slice func ParseCiphers(cipherStr string) ([]uint16, error) { @@ -819,29 +941,18 @@ } ciphers := strings.Split(cipherStr, ",") + // Note: this needs to be kept up to date with the cipherMap in CipherString cipherMap := map[string]uint16{ - "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, - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_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_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + "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_RSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - "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_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_RSA_WITH_AES_128_CBC_SHA256, - "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_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - "TLS_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, - "TLS_RSA_WITH_RC4_128_SHA": tls.TLS_RSA_WITH_RC4_128_SHA, - "TLS_ECDHE_RSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, } for _, cipher := range ciphers { if v, ok := cipherMap[cipher]; ok { @@ -853,3 +964,31 @@ return suites, nil } + +// CipherString performs the inverse operation of ParseCiphers +func CipherString(ciphers []uint16) (string, error) { + // Note: this needs to be kept up to date with the cipherMap in ParseCiphers + cipherMap := map[uint16]string{ + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + } + + cipherStrings := make([]string, len(ciphers)) + for i, cipher := range ciphers { + if v, ok := cipherMap[cipher]; ok { + cipherStrings[i] = v + } else { + return "", fmt.Errorf("unsupported cipher %d", cipher) + } + } + + return strings.Join(cipherStrings, ","), nil +} diff -Nru consul-1.7.4+dfsg1/tlsutil/config_test.go consul-1.8.7+dfsg1/tlsutil/config_test.go --- consul-1.7.4+dfsg1/tlsutil/config_test.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/tlsutil/config_test.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,15 @@ "github.com/stretchr/testify/require" ) -func startTLSServer(config *Config) (net.Conn, chan error) { +func startRPCTLSServer(config *Config) (net.Conn, chan error) { + return startTLSServer(config, nil, false) +} + +func startALPNRPCTLSServer(config *Config, alpnProtos []string) (net.Conn, chan error) { + return startTLSServer(config, alpnProtos, true) +} + +func startTLSServer(config *Config, alpnProtos []string, doAlpnVariant bool) (net.Conn, chan error) { errc := make(chan error, 1) c, err := NewConfigurator(*config, nil) @@ -24,7 +32,12 @@ errc <- err return nil, errc } - tlsConfigServer := c.IncomingRPCConfig() + var tlsConfigServer *tls.Config + if doAlpnVariant { + tlsConfigServer = c.IncomingALPNRPCConfig(alpnProtos) + } else { + tlsConfigServer = c.IncomingRPCConfig() + } client, server := net.Pipe() // Use yamux to buffer the reads, otherwise it's easy to deadlock @@ -63,7 +76,7 @@ Domain: "consul", } - client, errc := startTLSServer(&config) + client, errc := startRPCTLSServer(&config) if client == nil { t.Fatalf("startTLSServer err: %v", <-errc) } @@ -93,7 +106,7 @@ Domain: "consul", } - client, errc := startTLSServer(&config) + client, errc := startRPCTLSServer(&config) if client == nil { t.Fatalf("startTLSServer err: %v", <-errc) } @@ -124,7 +137,7 @@ Domain: "consul", } - client, errc := startTLSServer(&config) + client, errc := startRPCTLSServer(&config) if client == nil { t.Fatalf("startTLSServer err: %v", <-errc) } @@ -154,7 +167,7 @@ Domain: "consul", } - client, errc := startTLSServer(&config) + client, errc := startRPCTLSServer(&config) if client == nil { t.Fatalf("startTLSServer err: %v", <-errc) } @@ -175,6 +188,133 @@ <-errc } +func TestConfigurator_outgoingWrapperALPN_OK(t *testing.T) { + config := Config{ + CAFile: "../test/hostname/CertAuth.crt", + CertFile: "../test/hostname/Bob.crt", + KeyFile: "../test/hostname/Bob.key", + VerifyServerHostname: false, // doesn't matter + VerifyOutgoing: false, // doesn't matter + Domain: "consul", + } + + client, errc := startALPNRPCTLSServer(&config, []string{"foo", "bar"}) + if client == nil { + t.Fatalf("startTLSServer err: %v", <-errc) + } + + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + wrap := c.OutgoingALPNRPCWrapper() + require.NotNil(t, wrap) + + tlsClient, err := wrap("dc1", "bob", "foo", client) + require.NoError(t, err) + defer tlsClient.Close() + + tlsConn := tlsClient.(*tls.Conn) + cs := tlsConn.ConnectionState() + require.Equal(t, "foo", cs.NegotiatedProtocol) + require.True(t, cs.NegotiatedProtocolIsMutual) + + err = <-errc + require.NoError(t, err) +} + +func TestConfigurator_outgoingWrapperALPN_serverHasNoNodeNameInSAN(t *testing.T) { + srvConfig := Config{ + CAFile: "../test/hostname/CertAuth.crt", + CertFile: "../test/hostname/Alice.crt", + KeyFile: "../test/hostname/Alice.key", + VerifyServerHostname: false, // doesn't matter + VerifyOutgoing: false, // doesn't matter + Domain: "consul", + } + + client, errc := startALPNRPCTLSServer(&srvConfig, []string{"foo", "bar"}) + if client == nil { + t.Fatalf("startTLSServer err: %v", <-errc) + } + + config := Config{ + CAFile: "../test/hostname/CertAuth.crt", + CertFile: "../test/hostname/Bob.crt", + KeyFile: "../test/hostname/Bob.key", + VerifyServerHostname: false, // doesn't matter + VerifyOutgoing: false, // doesn't matter + Domain: "consul", + } + + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + wrap := c.OutgoingALPNRPCWrapper() + require.NotNil(t, wrap) + + _, err = wrap("dc1", "bob", "foo", client) + require.Error(t, err) + _, ok := err.(x509.HostnameError) + require.True(t, ok) + client.Close() + + <-errc +} + +func TestConfigurator_outgoingWrapperALPN_BadDC(t *testing.T) { + config := Config{ + CAFile: "../test/hostname/CertAuth.crt", + CertFile: "../test/hostname/Bob.crt", + KeyFile: "../test/hostname/Bob.key", + VerifyServerHostname: false, // doesn't matter + VerifyOutgoing: false, // doesn't matter + Domain: "consul", + } + + client, errc := startALPNRPCTLSServer(&config, []string{"foo", "bar"}) + if client == nil { + t.Fatalf("startTLSServer err: %v", <-errc) + } + + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + wrap := c.OutgoingALPNRPCWrapper() + + _, err = wrap("dc2", "bob", "foo", client) + require.Error(t, err) + _, ok := err.(x509.HostnameError) + require.True(t, ok) + client.Close() + + <-errc +} + +func TestConfigurator_outgoingWrapperALPN_BadCert(t *testing.T) { + config := Config{ + CAFile: "../test/ca/root.cer", + CertFile: "../test/key/ourdomain.cer", + KeyFile: "../test/key/ourdomain.key", + VerifyServerHostname: false, // doesn't matter + VerifyOutgoing: false, // doesn't matter + Domain: "consul", + } + + client, errc := startALPNRPCTLSServer(&config, []string{"foo", "bar"}) + if client == nil { + t.Fatalf("startTLSServer err: %v", <-errc) + } + + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + wrap := c.OutgoingALPNRPCWrapper() + + _, err = wrap("dc1", "bob", "foo", client) + require.Error(t, err) + _, ok := err.(x509.HostnameError) + require.True(t, ok) + client.Close() + + <-errc +} + func TestConfigurator_wrapTLS_OK(t *testing.T) { config := Config{ CAFile: "../test/ca/root.cer", @@ -183,7 +323,7 @@ VerifyOutgoing: true, } - client, errc := startTLSServer(&config) + client, errc := startRPCTLSServer(&config) if client == nil { t.Fatalf("startTLSServer err: %v", <-errc) } @@ -205,7 +345,7 @@ KeyFile: "../test/key/ssl-cert-snakeoil.key", } - client, errc := startTLSServer(serverConfig) + client, errc := startRPCTLSServer(serverConfig) if client == nil { t.Fatalf("startTLSServer err: %v", <-errc) } @@ -227,52 +367,28 @@ func TestConfig_ParseCiphers(t *testing.T) { testOk := strings.Join([]string{ - "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", - "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", - "TLS_RSA_WITH_AES_128_GCM_SHA256", - "TLS_RSA_WITH_AES_256_GCM_SHA384", - "TLS_RSA_WITH_AES_128_CBC_SHA256", - "TLS_RSA_WITH_AES_128_CBC_SHA", - "TLS_RSA_WITH_AES_256_CBC_SHA", - "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_RSA_WITH_RC4_128_SHA", - "TLS_ECDHE_RSA_WITH_RC4_128_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", }, ",") ciphers := []uint16{ - tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, - tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - tls.TLS_RSA_WITH_AES_128_GCM_SHA256, - tls.TLS_RSA_WITH_AES_256_GCM_SHA384, - tls.TLS_RSA_WITH_AES_128_CBC_SHA256, - tls.TLS_RSA_WITH_AES_128_CBC_SHA, - tls.TLS_RSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, - tls.TLS_RSA_WITH_RC4_128_SHA, - tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, - tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, } v, err := ParseCiphers(testOk) require.NoError(t, err) @@ -384,15 +500,16 @@ {Config{VerifyIncoming: true, CAFile: "", CAPath: capath}, true, false}, // 18 {Config{VerifyIncoming: true, CAFile: "", CAPath: capath, CertFile: certfile, KeyFile: keyfile}, false, false}, // 19 - {Config{CertFile: "bogus", KeyFile: "bogus"}, true, true}, // 20 - {Config{CAFile: "bogus"}, true, true}, // 21 - {Config{CAPath: "bogus"}, true, true}, // 22 + {Config{CertFile: "bogus", KeyFile: "bogus"}, true, true}, // 20 + {Config{CAFile: "bogus"}, true, true}, // 21 + {Config{CAPath: "bogus"}, true, true}, // 22 + {Config{VerifyIncoming: true, CAFile: cafile, AutoTLS: true}, false, false}, // 22 } for _, v := range tlsVersions() { variants = append(variants, variant{Config{TLSMinVersion: v}, false, false}) } - c := Configurator{autoEncrypt: &autoEncrypt{}, manual: &manual{}} + c := Configurator{autoTLS: &autoTLS{}, manual: &manual{}} for i, v := range variants { info := fmt.Sprintf("case %d, config: %+v", i, v.config) _, err1 := NewConfigurator(v.config, nil) @@ -402,7 +519,7 @@ if !v.excludeCheck { cert, err := v.config.KeyPair() require.NoError(t, err, info) - pems, err := loadCAs(v.config.CAFile, v.config.CAPath) + pems, err := LoadCAs(v.config.CAFile, v.config.CAPath) require.NoError(t, err, info) pool, err := pool(pems) require.NoError(t, err, info) @@ -445,7 +562,7 @@ } } -func TestConfigurator_loadCAs(t *testing.T) { +func TestConfigurator_LoadCAs(t *testing.T) { type variant struct { cafile, capath string shouldErr bool @@ -462,7 +579,7 @@ {"../test/ca/root.cer", "../test/ca_path", false, false, 1}, } for i, v := range variants { - pems, err1 := loadCAs(v.cafile, v.capath) + pems, err1 := LoadCAs(v.cafile, v.capath) pool, err2 := pool(pems) info := fmt.Sprintf("case %d", i) if v.shouldErr { @@ -533,7 +650,8 @@ cert, err := c.commonTLSConfig(false).GetClientCertificate(nil) require.NoError(t, err) - require.Nil(t, cert) + require.NotNil(t, cert) + require.Empty(t, cert.Certificate) c1, err := loadKeyPair("../test/key/something_expired.cer", "../test/key/something_expired.key") require.NoError(t, err) @@ -544,10 +662,10 @@ c2, err := loadKeyPair("../test/key/ourdomain.cer", "../test/key/ourdomain.key") require.NoError(t, err) - c.autoEncrypt.cert = c2 + c.autoTLS.cert = c2 cert, err = c.commonTLSConfig(false).GetClientCertificate(nil) require.NoError(t, err) - require.Equal(t, c.autoEncrypt.cert, cert) + require.Equal(t, c.autoTLS.cert, cert) } func TestConfigurator_CommonTLSConfigGetCertificate(t *testing.T) { @@ -561,10 +679,10 @@ // Setting a certificate as the auto-encrypt cert will return it as the regular server certificate c1, err := loadKeyPair("../test/key/something_expired.cer", "../test/key/something_expired.key") require.NoError(t, err) - c.autoEncrypt.cert = c1 + c.autoTLS.cert = c1 cert, err = c.commonTLSConfig(false).GetCertificate(nil) require.NoError(t, err) - require.Equal(t, c.autoEncrypt.cert, cert) + require.Equal(t, c.autoTLS.cert, cert) // Setting a different certificate as a manual cert will override the auto-encrypt cert and instead return the manual cert c2, err := loadKeyPair("../test/key/ourdomain.cer", "../test/key/ourdomain.key") @@ -601,7 +719,7 @@ } func TestConfigurator_CommonTLSConfigVerifyIncoming(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := Configurator{base: &Config{}, autoTLS: &autoTLS{}} type variant struct { verify bool expected tls.ClientAuthType @@ -616,7 +734,7 @@ } func TestConfigurator_OutgoingRPCTLSDisabled(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := Configurator{base: &Config{}, autoTLS: &autoTLS{}} type variant struct { verify bool autoEncryptTLS bool @@ -638,11 +756,82 @@ info := fmt.Sprintf("case %d", i) c.caPool = v.pool c.base.VerifyOutgoing = v.verify - c.base.AutoEncryptTLS = v.autoEncryptTLS + c.base.AutoTLS = v.autoEncryptTLS require.Equal(t, v.expected, c.outgoingRPCTLSDisabled(), info) } } +func TestConfigurator_MutualTLSCapable(t *testing.T) { + t.Run("no ca", func(t *testing.T) { + config := Config{ + Domain: "consul", + } + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + + require.False(t, c.mutualTLSCapable()) + }) + + t.Run("ca and no keys", func(t *testing.T) { + config := Config{ + CAFile: "../test/hostname/CertAuth.crt", + Domain: "consul", + } + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + + require.False(t, c.mutualTLSCapable()) + }) + + t.Run("ca and manual key", func(t *testing.T) { + config := Config{ + CAFile: "../test/hostname/CertAuth.crt", + CertFile: "../test/hostname/Bob.crt", + KeyFile: "../test/hostname/Bob.key", + Domain: "consul", + } + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + + require.True(t, c.mutualTLSCapable()) + }) + + loadFile := func(t *testing.T, path string) string { + data, err := ioutil.ReadFile(path) + require.NoError(t, err) + return string(data) + } + + t.Run("autoencrypt ca and no autoencrypt keys", func(t *testing.T) { + config := Config{ + Domain: "consul", + } + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + + caPEM := loadFile(t, "../test/hostname/CertAuth.crt") + require.NoError(t, c.UpdateAutoTLSCA([]string{caPEM})) + + require.False(t, c.mutualTLSCapable()) + }) + + t.Run("autoencrypt ca and autoencrypt key", func(t *testing.T) { + config := Config{ + Domain: "consul", + } + c, err := NewConfigurator(config, nil) + require.NoError(t, err) + + caPEM := loadFile(t, "../test/hostname/CertAuth.crt") + certPEM := loadFile(t, "../test/hostname/Bob.crt") + keyPEM := loadFile(t, "../test/hostname/Bob.key") + require.NoError(t, c.UpdateAutoTLSCA([]string{caPEM})) + require.NoError(t, c.UpdateAutoTLSCert(certPEM, keyPEM)) + + require.True(t, c.mutualTLSCapable()) + }) +} + func TestConfigurator_VerifyIncomingRPC(t *testing.T) { c := Configurator{base: &Config{ VerifyIncomingRPC: true, @@ -677,14 +866,42 @@ require.NoError(t, err) tlsConf := c.IncomingRPCConfig() require.Equal(t, tls.RequireAndVerifyClientCert, tlsConf.ClientAuth) + require.Empty(t, tlsConf.NextProtos) + require.Empty(t, tlsConf.ServerName) + + require.NotNil(t, tlsConf.GetConfigForClient) + tlsConf, err = tlsConf.GetConfigForClient(nil) + require.NoError(t, err) + require.Equal(t, tls.RequireAndVerifyClientCert, tlsConf.ClientAuth) + require.Empty(t, tlsConf.NextProtos) + require.Empty(t, tlsConf.ServerName) +} + +func TestConfigurator_IncomingALPNRPCConfig(t *testing.T) { + c, err := NewConfigurator(Config{ + VerifyIncomingRPC: false, // ignored, assumed true + CAFile: "../test/ca/root.cer", + CertFile: "../test/key/ourdomain.cer", + KeyFile: "../test/key/ourdomain.key", + }, nil) + require.NoError(t, err) + tlsConf := c.IncomingALPNRPCConfig([]string{"foo/1", "bar/2"}) + require.Equal(t, tls.RequireAndVerifyClientCert, tlsConf.ClientAuth) + require.False(t, tlsConf.InsecureSkipVerify) + require.Equal(t, []string{"foo/1", "bar/2"}, tlsConf.NextProtos) + require.Empty(t, tlsConf.ServerName) + require.NotNil(t, tlsConf.GetConfigForClient) tlsConf, err = tlsConf.GetConfigForClient(nil) require.NoError(t, err) require.Equal(t, tls.RequireAndVerifyClientCert, tlsConf.ClientAuth) + require.False(t, tlsConf.InsecureSkipVerify) + require.Equal(t, []string{"foo/1", "bar/2"}, tlsConf.NextProtos) + require.Empty(t, tlsConf.ServerName) } func TestConfigurator_IncomingHTTPSConfig(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := Configurator{base: &Config{}, autoTLS: &autoTLS{}} require.Equal(t, []string{"h2", "http/1.1"}, c.IncomingHTTPSConfig().NextProtos) } @@ -692,7 +909,7 @@ c := Configurator{base: &Config{ TLSMinVersion: "tls12", EnableAgentTLSForChecks: false, - }, autoEncrypt: &autoEncrypt{}} + }, autoTLS: &autoTLS{}} tlsConf := c.OutgoingTLSConfigForCheck(true) require.Equal(t, true, tlsConf.InsecureSkipVerify) require.Equal(t, uint16(0), tlsConf.MinVersion) @@ -706,18 +923,72 @@ } func TestConfigurator_OutgoingRPCConfig(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := &Configurator{base: &Config{}, autoTLS: &autoTLS{}} require.Nil(t, c.OutgoingRPCConfig()) - c.base.VerifyOutgoing = true - require.NotNil(t, c.OutgoingRPCConfig()) + + c, err := NewConfigurator(Config{ + VerifyOutgoing: true, + CAFile: "../test/ca/root.cer", + }, nil) + require.NoError(t, err) + + tlsConf := c.OutgoingRPCConfig() + require.NotNil(t, tlsConf) + require.Equal(t, tls.NoClientCert, tlsConf.ClientAuth) + require.True(t, tlsConf.InsecureSkipVerify) + require.Empty(t, tlsConf.NextProtos) + require.Empty(t, tlsConf.ServerName) +} + +func TestConfigurator_OutgoingALPNRPCConfig(t *testing.T) { + c := &Configurator{base: &Config{}, autoTLS: &autoTLS{}} + require.Nil(t, c.OutgoingALPNRPCConfig()) + + c, err := NewConfigurator(Config{ + VerifyOutgoing: false, // ignored, assumed true + CAFile: "../test/ca/root.cer", + CertFile: "../test/key/ourdomain.cer", + KeyFile: "../test/key/ourdomain.key", + }, nil) + require.NoError(t, err) + + tlsConf := c.OutgoingALPNRPCConfig() + require.NotNil(t, tlsConf) + require.Equal(t, tls.RequireAndVerifyClientCert, tlsConf.ClientAuth) + require.False(t, tlsConf.InsecureSkipVerify) + require.Empty(t, tlsConf.NextProtos) + require.Empty(t, tlsConf.ServerName) } func TestConfigurator_OutgoingRPCWrapper(t *testing.T) { - c := &Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := &Configurator{base: &Config{}, autoTLS: &autoTLS{}} wrapper := c.OutgoingRPCWrapper() require.NotNil(t, wrapper) conn := &net.TCPConn{} cWrap, err := wrapper("", conn) + require.NoError(t, err) + require.Equal(t, conn, cWrap) + + c, err = NewConfigurator(Config{ + VerifyOutgoing: true, + CAFile: "../test/ca/root.cer", + }, nil) + require.NoError(t, err) + + wrapper = c.OutgoingRPCWrapper() + require.NotNil(t, wrapper) + cWrap, err = wrapper("", conn) + require.EqualError(t, err, "invalid argument") + require.NotEqual(t, conn, cWrap) +} + +func TestConfigurator_OutgoingALPNRPCWrapper(t *testing.T) { + c := &Configurator{base: &Config{}, autoTLS: &autoTLS{}} + wrapper := c.OutgoingRPCWrapper() + require.NotNil(t, wrapper) + conn := &net.TCPConn{} + cWrap, err := wrapper("", conn) + require.NoError(t, err) require.Equal(t, conn, cWrap) c, err = NewConfigurator(Config{ @@ -729,6 +1000,7 @@ wrapper = c.OutgoingRPCWrapper() require.NotNil(t, wrapper) cWrap, err = wrapper("", conn) + require.EqualError(t, err, "invalid argument") require.NotEqual(t, conn, cWrap) } @@ -787,7 +1059,7 @@ } func TestConfigurator_VerifyOutgoing(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := Configurator{base: &Config{}, autoTLS: &autoTLS{}} type variant struct { verify bool autoEncryptTLS bool @@ -809,7 +1081,7 @@ info := fmt.Sprintf("case %d", i) c.caPool = v.pool c.base.VerifyOutgoing = v.verify - c.base.AutoEncryptTLS = v.autoEncryptTLS + c.base.AutoTLS = v.autoEncryptTLS require.Equal(t, v.expected, c.verifyOutgoing(), info) } } @@ -820,34 +1092,34 @@ } func TestConfigurator_VerifyServerHostname(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := Configurator{base: &Config{}, autoTLS: &autoTLS{}} require.False(t, c.VerifyServerHostname()) c.base.VerifyServerHostname = true - c.autoEncrypt.verifyServerHostname = false + c.autoTLS.verifyServerHostname = false require.True(t, c.VerifyServerHostname()) c.base.VerifyServerHostname = false - c.autoEncrypt.verifyServerHostname = true + c.autoTLS.verifyServerHostname = true require.True(t, c.VerifyServerHostname()) c.base.VerifyServerHostname = true - c.autoEncrypt.verifyServerHostname = true + c.autoTLS.verifyServerHostname = true require.True(t, c.VerifyServerHostname()) } func TestConfigurator_AutoEncrytCertExpired(t *testing.T) { - c := Configurator{base: &Config{}, autoEncrypt: &autoEncrypt{}} + c := Configurator{base: &Config{}, autoTLS: &autoTLS{}} require.True(t, c.AutoEncryptCertExpired()) cert, err := loadKeyPair("../test/key/something_expired.cer", "../test/key/something_expired.key") require.NoError(t, err) - c.autoEncrypt.cert = cert + c.autoTLS.cert = cert require.True(t, c.AutoEncryptCertExpired()) cert, err = loadKeyPair("../test/key/ourdomain.cer", "../test/key/ourdomain.key") require.NoError(t, err) - c.autoEncrypt.cert = cert + c.autoTLS.cert = cert require.False(t, c.AutoEncryptCertExpired()) } diff -Nru consul-1.7.4+dfsg1/tlsutil/generate.go consul-1.8.7+dfsg1/tlsutil/generate.go --- consul-1.7.4+dfsg1/tlsutil/generate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/tlsutil/generate.go 2020-12-10 21:46:52.000000000 +0000 @@ -191,7 +191,7 @@ } opts := x509.VerifyOptions{ - DNSName: fmt.Sprintf(dns), + DNSName: fmt.Sprint(dns), Roots: roots, } diff -Nru consul-1.7.4+dfsg1/types/area.go consul-1.8.7+dfsg1/types/area.go --- consul-1.7.4+dfsg1/types/area.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/types/area.go 2020-12-10 21:46:52.000000000 +0000 @@ -7,3 +7,7 @@ // This represents the existing WAN area that's built in to Consul. Consul // Enterprise generalizes areas, which are represented with UUIDs. const AreaWAN AreaID = "wan" + +// This represents the existing LAN area that's built in to Consul. Consul +// Enterprise generalizes areas, which are represented with UUIDs. +const AreaLAN AreaID = "lan" diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/application.js consul-1.8.7+dfsg1/ui-v2/app/adapters/application.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/application.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/application.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,14 +1,13 @@ import Adapter from './http'; import { inject as service } from '@ember/service'; -import { env } from 'consul-ui/env'; export const DATACENTER_QUERY_PARAM = 'dc'; export const NSPACE_QUERY_PARAM = 'ns'; export default Adapter.extend({ - repo: service('settings'), client: service('client/http'), + env: service('env'), formatNspace: function(nspace) { - if (env('CONSUL_NSPACES_ENABLED')) { + if (this.env.env('CONSUL_NSPACES_ENABLED')) { return nspace !== '' ? { [NSPACE_QUERY_PARAM]: nspace } : undefined; } }, @@ -17,45 +16,9 @@ [DATACENTER_QUERY_PARAM]: dc, }; }, - // TODO: kinda protected for the moment - // decide where this should go either read/write from http - // should somehow use this or vice versa + // TODO: Deprecated, remove `request` usage from everywhere and replace with + // `HTTPAdapter.rpc` request: function(req, resp, obj, modelName) { - const client = this.client; - const store = this.store; - const adapter = this; - - let unserialized, serialized; - const serializer = store.serializerFor(modelName); - // workable way to decide whether this is a snapshot - // essentially 'is attributable'. - // Snapshot is private so we can't do instanceof here - // and using obj.constructor.name gets changed/minified - // during compilation so you can't rely on it - // checking for `attributes` being a function is more - // reliable as that is the thing we need to call - if (typeof obj.attributes === 'function') { - unserialized = obj.attributes(); - serialized = serializer.serialize(obj, {}); - } else { - unserialized = obj; - serialized = unserialized; - } - - return client - .request(function(request) { - return req(adapter, request, serialized, unserialized); - }) - .catch(function(e) { - return adapter.error(e); - }) - .then(function(respond) { - // TODO: When HTTPAdapter:responder changes, this will also need to change - return resp(serializer, respond, serialized, unserialized); - }); - // TODO: Potentially add specific serializer errors here - // .catch(function(e) { - // return Promise.reject(e); - // }); + return this.rpc(...arguments); }, }); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/coordinate.js consul-1.8.7+dfsg1/ui-v2/app/adapters/coordinate.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/coordinate.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/coordinate.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,9 +1,10 @@ import Adapter from './application'; // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQuery: function(request, { dc, index }) { + requestForQuery: function(request, { dc, index, uri }) { return request` GET /v1/coordinate/nodes?${{ dc }} + X-Request-ID: ${uri} ${{ index }} `; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/dc.js consul-1.8.7+dfsg1/ui-v2/app/adapters/dc.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/dc.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/dc.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ import Adapter from './application'; export default Adapter.extend({ - requestForFindAll: function(request) { + requestForQuery: function(request) { return request` GET /v1/catalog/datacenters `; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/discovery-chain.js consul-1.8.7+dfsg1/ui-v2/app/adapters/discovery-chain.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/discovery-chain.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/discovery-chain.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,12 +2,13 @@ // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQueryRecord: function(request, { dc, ns, index, id }) { + requestForQueryRecord: function(request, { dc, ns, index, id, uri }) { if (typeof id === 'undefined') { throw new Error('You must specify an id'); } return request` GET /v1/discovery-chain/${id}?${{ dc }} + X-Request-ID: ${uri} ${{ ...this.formatNspace(ns), diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/http.js consul-1.8.7+dfsg1/ui-v2/app/adapters/http.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/http.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/http.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,4 @@ +import { inject as service } from '@ember/service'; import Adapter from 'ember-data/adapter'; import AdapterError from '@ember-data/adapter/error'; import { @@ -10,47 +11,79 @@ ConflictError, InvalidError, } from 'ember-data/adapters/errors'; -// TODO: This is a little skeleton cb function -// is to be replaced soon with something slightly more involved -const responder = function(response) { - return response; -}; -const read = function(adapter, serializer, client, type, query) { - return client - .request(function(request) { + +// TODO These are now exactly the same, apart from the fact that one uses +// `serialized, unserialized` and the other just `query` +// they could actually be one function now, but would be nice to think about +// the naming of things (serialized vs query etc) +const read = function(adapter, modelName, type, query = {}) { + return adapter.rpc( + function(adapter, request, query) { return adapter[`requestFor${type}`](request, query); - }) - .catch(function(e) { - return adapter.error(e); - }) - .then(function(response) { - return serializer[`respondFor${type}`](responder(response), query); - }); - // TODO: Potentially add specific serializer errors here - // .catch(function(e) { - // return Promise.reject(e); - // }); + }, + function(serializer, respond, query) { + return serializer[`respondFor${type}`](respond, query); + }, + query, + modelName + ); }; -const write = function(adapter, serializer, client, type, snapshot) { - const unserialized = snapshot.attributes(); - const serialized = serializer.serialize(snapshot, {}); - return client - .request(function(request) { +const write = function(adapter, modelName, type, snapshot) { + return adapter.rpc( + function(adapter, request, serialized, unserialized) { return adapter[`requestFor${type}`](request, serialized, unserialized); - }) - .catch(function(e) { - return adapter.error(e); - }) - .then(function(response) { - return serializer[`respondFor${type}`](responder(response), serialized, unserialized); - }); - // TODO: Potentially add specific serializer errors here - // .catch(function(e) { - // return Promise.reject(e); - // }); + }, + function(serializer, respond, serialized, unserialized) { + return serializer[`respondFor${type}`](respond, serialized, unserialized); + }, + snapshot, + modelName + ); }; export default Adapter.extend({ + client: service('client/http'), + rpc: function(req, resp, obj, modelName) { + const client = this.client; + const store = this.store; + const adapter = this; + + let unserialized, serialized; + const serializer = store.serializerFor(modelName); + // workable way to decide whether this is a snapshot + // essentially 'is attributable'. + // Snapshot is private so we can't do instanceof here + // and using obj.constructor.name gets changed/minified + // during compilation so you can't rely on it + // checking for `attributes` being a function is more + // reliable as that is the thing we need to call + if (typeof obj.attributes === 'function') { + unserialized = obj.attributes(); + serialized = serializer.serialize(obj, {}); + } else { + unserialized = obj; + serialized = unserialized; + } + + return client + .request(function(request) { + return req(adapter, request, serialized, unserialized); + }) + .catch(function(e) { + return adapter.error(e); + }) + .then(function(respond) { + // TODO: When HTTPAdapter:responder changes, this will also need to change + return resp(serializer, respond, serialized, unserialized); + }); + // TODO: Potentially add specific serializer errors here + // .catch(function(e) { + // return Promise.reject(e); + // }); + }, error: function(err) { + if (err instanceof TypeError) { + throw err; + } const errors = [ { status: `${err.statusCode}`, @@ -94,24 +127,28 @@ } catch (e) { error = e; } + // TODO: This comes originates from ember-data + // This can be confusing if you need to use this with Promise.reject + // Consider changing this to return the error and then + // throw from the call site instead throw error; }, query: function(store, type, query) { - return read(this, store.serializerFor(type.modelName), this.client, 'Query', query); + return read(this, type.modelName, 'Query', query); }, queryRecord: function(store, type, query) { - return read(this, store.serializerFor(type.modelName), this.client, 'QueryRecord', query); + return read(this, type.modelName, 'QueryRecord', query); }, findAll: function(store, type) { - return read(this, store.serializerFor(type.modelName), this.client, 'FindAll'); + return read(this, type.modelName, 'FindAll'); }, createRecord: function(store, type, snapshot) { - return write(this, store.serializerFor(type.modelName), this.client, 'CreateRecord', snapshot); + return write(this, type.modelName, 'CreateRecord', snapshot); }, updateRecord: function(store, type, snapshot) { - return write(this, store.serializerFor(type.modelName), this.client, 'UpdateRecord', snapshot); + return write(this, type.modelName, 'UpdateRecord', snapshot); }, deleteRecord: function(store, type, snapshot) { - return write(this, store.serializerFor(type.modelName), this.client, 'DeleteRecord', snapshot); + return write(this, type.modelName, 'DeleteRecord', snapshot); }, }); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/intention.js consul-1.8.7+dfsg1/ui-v2/app/adapters/intention.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/intention.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/intention.js 2020-12-10 21:46:52.000000000 +0000 @@ -6,11 +6,20 @@ // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQuery: function(request, { dc, index, id }) { + requestForQuery: function(request, { dc, filter, index, uri }) { return request` GET /v1/connect/intentions?${{ dc }} + X-Request-ID: ${uri}${ + typeof filter !== 'undefined' + ? ` + X-Range: ${filter}` + : `` + } - ${{ index }} + ${{ + index, + filter, + }} `; }, requestForQueryRecord: function(request, { dc, index, id }) { @@ -19,6 +28,7 @@ } return request` GET /v1/connect/intentions/${id}?${{ dc }} + Cache-Control: no-store ${{ index }} `; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/node.js consul-1.8.7+dfsg1/ui-v2/app/adapters/node.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/node.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/node.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,21 @@ import Adapter from './application'; // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQuery: function(request, { dc, index, id }) { + requestForQuery: function(request, { dc, index, id, uri }) { return request` GET /v1/internal/ui/nodes?${{ dc }} + X-Request-ID: ${uri} ${{ index }} `; }, - requestForQueryRecord: function(request, { dc, index, id }) { + requestForQueryRecord: function(request, { dc, index, id, uri }) { if (typeof id === 'undefined') { throw new Error('You must specify an id'); } return request` GET /v1/internal/ui/node/${id}?${{ dc }} + X-Request-ID: ${uri} ${{ index }} `; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/nspace.js consul-1.8.7+dfsg1/ui-v2/app/adapters/nspace.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/nspace.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/nspace.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,9 +3,10 @@ // namespaces aren't categorized by datacenter, therefore no dc export default Adapter.extend({ - requestForQuery: function(request, { index }) { + requestForQuery: function(request, { index, uri }) { return request` GET /v1/namespaces + X-Request-ID: ${uri} ${{ index }} `; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/oidc-provider.js consul-1.8.7+dfsg1/ui-v2/app/adapters/oidc-provider.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/oidc-provider.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/oidc-provider.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,98 @@ +import Adapter from './application'; +import { inject as service } from '@ember/service'; + +import { env } from 'consul-ui/env'; +import nonEmptySet from 'consul-ui/utils/non-empty-set'; + +let Namespace; +if (env('CONSUL_NSPACES_ENABLED')) { + Namespace = nonEmptySet('Namespace'); +} else { + Namespace = () => ({}); +} +export default Adapter.extend({ + env: service('env'), + requestForQuery: function(request, { dc, ns, index, uri }) { + return request` + GET /v1/internal/ui/oidc-auth-methods?${{ dc }} + X-Request-ID: ${uri} + + ${{ + index, + ...this.formatNspace(ns), + }} + `; + }, + requestForQueryRecord: function(request, { dc, ns, id }) { + if (typeof id === 'undefined') { + throw new Error('You must specify an id'); + } + return request` + POST /v1/acl/oidc/auth-url?${{ dc }} + Cache-Control: no-store + + ${{ + ...Namespace(ns), + AuthMethod: id, + RedirectURI: `${this.env.var('CONSUL_BASE_UI_URL')}/oidc/callback`, + }} + `; + }, + requestForAuthorize: function(request, { dc, ns, id, code, state }) { + if (typeof id === 'undefined') { + throw new Error('You must specify an id'); + } + if (typeof code === 'undefined') { + throw new Error('You must specify an code'); + } + if (typeof state === 'undefined') { + throw new Error('You must specify an state'); + } + return request` + POST /v1/acl/oidc/callback?${{ dc }} + Cache-Control: no-store + + ${{ + ...Namespace(ns), + AuthMethod: id, + Code: code, + State: state, + }} + `; + }, + requestForLogout: function(request, { id }) { + if (typeof id === 'undefined') { + throw new Error('You must specify an id'); + } + return request` + POST /v1/acl/logout + Cache-Control: no-store + X-Consul-Token: ${id} + `; + }, + authorize: function(store, type, id, snapshot) { + return this.request( + function(adapter, request, serialized, unserialized) { + return adapter.requestForAuthorize(request, serialized, unserialized); + }, + function(serializer, respond, serialized, unserialized) { + return serializer.respondForAuthorize(respond, serialized, unserialized); + }, + snapshot, + type.modelName + ); + }, + logout: function(store, type, id, snapshot) { + return this.request( + function(adapter, request, serialized, unserialized) { + return adapter.requestForLogout(request, serialized, unserialized); + }, + function(serializer, respond, serialized, unserialized) { + // its ok to return nothing here for the moment at least + return {}; + }, + snapshot, + type.modelName + ); + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/proxy.js consul-1.8.7+dfsg1/ui-v2/app/adapters/proxy.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/proxy.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/proxy.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,12 +1,13 @@ import Adapter from './application'; // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQuery: function(request, { dc, ns, index, id }) { + requestForQuery: function(request, { dc, ns, index, id, uri }) { if (typeof id === 'undefined') { throw new Error('You must specify an id'); } return request` GET /v1/catalog/connect/${id}?${{ dc }} + X-Request-ID: ${uri} ${{ ...this.formatNspace(ns), diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/role.js consul-1.8.7+dfsg1/ui-v2/app/adapters/role.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/role.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/role.js 2020-12-10 21:46:52.000000000 +0000 @@ -50,6 +50,7 @@ Description: serialized.Description, Policies: serialized.Policies, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, ...Namespace(serialized.Namespace), }} `; @@ -66,6 +67,7 @@ Description: serialized.Description, Policies: serialized.Policies, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, ...Namespace(serialized.Namespace), }} `; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/service.js consul-1.8.7+dfsg1/ui-v2/app/adapters/service.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/service.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/service.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,22 +1,37 @@ import Adapter from './application'; // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQuery: function(request, { dc, ns, index }) { - return request` - GET /v1/internal/ui/services?${{ dc }} + requestForQuery: function(request, { dc, ns, index, gateway, uri }) { + if (typeof gateway !== 'undefined') { + return request` + GET /v1/internal/ui/gateway-services-nodes/${gateway}?${{ dc }} + X-Range: ${gateway} + X-Request-ID: ${uri} - ${{ - ...this.formatNspace(ns), - index, - }} + ${{ + ...this.formatNspace(ns), + index, + }} + `; + } else { + return request` + GET /v1/internal/ui/services?${{ dc }} + X-Request-ID: ${uri} + + ${{ + ...this.formatNspace(ns), + index, + }} `; + } }, - requestForQueryRecord: function(request, { dc, ns, index, id }) { + requestForQueryRecord: function(request, { dc, ns, index, id, uri }) { if (typeof id === 'undefined') { throw new Error('You must specify an id'); } return request` GET /v1/health/service/${id}?${{ dc }} + X-Request-ID: ${uri} ${{ ...this.formatNspace(ns), diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/session.js consul-1.8.7+dfsg1/ui-v2/app/adapters/session.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/session.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/session.js 2020-12-10 21:46:52.000000000 +0000 @@ -6,12 +6,13 @@ // TODO: Update to use this.formatDatacenter() export default Adapter.extend({ - requestForQuery: function(request, { dc, ns, index, id }) { + requestForQuery: function(request, { dc, ns, index, id, uri }) { if (typeof id === 'undefined') { throw new Error('You must specify an id'); } return request` GET /v1/session/node/${id}?${{ dc }} + X-Request-ID: ${uri} ${{ ...this.formatNspace(ns), diff -Nru consul-1.7.4+dfsg1/ui-v2/app/adapters/token.js consul-1.8.7+dfsg1/ui-v2/app/adapters/token.js --- consul-1.7.4+dfsg1/ui-v2/app/adapters/token.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/adapters/token.js 2020-12-10 21:46:52.000000000 +0000 @@ -53,6 +53,7 @@ Policies: serialized.Policies, Roles: serialized.Roles, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, Local: serialized.Local, ...Namespace(serialized.Namespace), }} @@ -84,6 +85,7 @@ Policies: serialized.Policies, Roles: serialized.Roles, ServiceIdentities: serialized.ServiceIdentities, + NodeIdentities: serialized.NodeIdentities, Local: serialized.Local, ...Namespace(serialized.Namespace), }} @@ -104,6 +106,7 @@ return request` GET /v1/acl/token/self?${{ dc }} X-Consul-Token: ${secret} + Cache-Control: no-store ${{ index }} `; @@ -132,7 +135,7 @@ return adapter.requestForSelf(request, serialized, data); }, function(serializer, respond, serialized, data) { - return serializer.respondForQueryRecord(respond, serialized, data); + return serializer.respondForSelf(respond, serialized, data); }, unserialized, type.modelName diff -Nru consul-1.7.4+dfsg1/ui-v2/app/app.js consul-1.8.7+dfsg1/ui-v2/app/app.js --- consul-1.7.4+dfsg1/ui-v2/app/app.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/app.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,14 +1,12 @@ import Application from '@ember/application'; -import Resolver from './resolver'; +import Resolver from 'ember-resolver'; import loadInitializers from 'ember-load-initializers'; import config from './config/environment'; -const App = Application.extend({ - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, - Resolver, -}); +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver; +} loadInitializers(App, config.modulePrefix); - -export default App; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/acl-filter.js consul-1.8.7+dfsg1/ui-v2/app/components/acl-filter.js --- consul-1.7.4+dfsg1/ui-v2/app/components/acl-filter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/acl-filter.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - tagName: 'form', - classNames: ['filter-bar'], - 'data-test-acl-filter': true, - onchange: function() {}, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/action-group.js consul-1.8.7+dfsg1/ui-v2/app/components/action-group.js --- consul-1.7.4+dfsg1/ui-v2/app/components/action-group.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/action-group.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - classNames: ['action-group'], - onchange: function() {}, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/app-error/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/app-error/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/app-error/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/app-error/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ + + +

+ Error {{error.status}} +

+
+ + + +
diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/app-error/index.js consul-1.8.7+dfsg1/ui-v2/app/components/app-error/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/app-error/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/app-error/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/app-view/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/app-view/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/app-view/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/app-view/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,90 @@ +{{yield}} +
+{{#each flashMessages.queue as |flash|}} + + {{#if flash.dom}} + {{{flash.dom}}} + {{else}} + {{#let (lowercase component.flashType) (lowercase flash.action) as |status type|}} + {{! flashes automatically ucfirst the type }} + + + {{/let}} + {{/if}} + +{{/each}} +
+
+ {{#if authorized}} + + {{/if}} +
+ + {{yield}} + +
+ {{#if authorized}} + + + {{yield}} + + {{/if}} +
+
+ + {{yield}} + +
+
+ {{#if authorized}} + + + {{yield}} + + {{/if}} +
+
+ {{#if (not enabled) }} + {{yield}} + {{else if (not authorized)}} + {{yield}} + {{else}} + {{yield}} + {{/if}} +
diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/app-view/index.js consul-1.8.7+dfsg1/ui-v2/app/components/app-view/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/app-view/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/app-view/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +import Component from '@ember/component'; +import SlotsMixin from 'block-slots'; +import { inject as service } from '@ember/service'; +import templatize from 'consul-ui/utils/templatize'; +export default Component.extend(SlotsMixin, { + authorized: true, + enabled: true, + classNames: ['app-view'], + classNameBindings: ['enabled::disabled', 'authorized::unauthorized'], + dom: service('dom'), + didReceiveAttrs: function() { + this._super(...arguments); + // right now only manually added classes are hoisted to + const $root = this.dom.root(); + if (this.loading) { + $root.classList.add('loading'); + } else { + $root.classList.remove('loading'); + } + let cls = this['class'] || ''; + if (cls) { + // its possible for 'layout' templates to change after insert + // check for these specific layouts and clear them out + const receivedClasses = new Set(templatize(cls.split(' '))); + const difference = new Set([...$root.classList].filter(item => !receivedClasses.has(item))); + [...difference].forEach(function(item, i) { + if (templatize(['edit', 'show', 'list']).indexOf(item) !== -1) { + $root.classList.remove(item); + } + }); + $root.classList.add(...receivedClasses); + } + }, + didInsertElement: function() { + this._super(...arguments); + this.didReceiveAttrs(); + }, + didDestroyElement: function() { + this._super(...arguments); + const cls = this['class'] + ' loading'; + if (cls) { + const $root = this.dom.root(); + $root.classList.remove(...templatize(cls.split(' '))); + } + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/app-view.js consul-1.8.7+dfsg1/ui-v2/app/components/app-view.js --- consul-1.7.4+dfsg1/ui-v2/app/components/app-view.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/app-view.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -import Component from '@ember/component'; -import SlotsMixin from 'block-slots'; -import { inject as service } from '@ember/service'; -import templatize from 'consul-ui/utils/templatize'; -export default Component.extend(SlotsMixin, { - loading: false, - authorized: true, - enabled: true, - classNames: ['app-view'], - classNameBindings: ['enabled::disabled', 'authorized::unauthorized'], - dom: service('dom'), - didReceiveAttrs: function() { - this._super(...arguments); - // right now only manually added classes are hoisted to - const $root = this.dom.root(); - let cls = this['class'] || ''; - if (this.loading) { - cls += ' loading'; - } else { - $root.classList.remove(...templatize(['loading'])); - } - if (cls) { - // its possible for 'layout' templates to change after insert - // check for these specific layouts and clear them out - const receivedClasses = new Set(templatize(cls.split(' '))); - const difference = new Set([...$root.classList].filter(item => !receivedClasses.has(item))); - [...difference].forEach(function(item, i) { - if (templatize(['edit', 'show', 'list']).indexOf(item) !== -1) { - $root.classList.remove(item); - } - }); - $root.classList.add(...receivedClasses); - } - }, - didInsertElement: function() { - this._super(...arguments); - this.didReceiveAttrs(); - }, - didDestroyElement: function() { - this._super(...arguments); - const cls = this['class'] + ' loading'; - if (cls) { - const $root = this.dom.root(); - $root.classList.remove(...templatize(cls.split(' '))); - } - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/aria-menu/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/aria-menu/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/aria-menu/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/aria-menu/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +{{yield + (action 'change') + (action 'keypress') + (concat 'component-aria-menu-trigger-' guid) + (concat 'component-aria-menu-menu-' guid) + (if expanded 'true' undefined) + (action 'keypressClick') +}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/aria-menu/index.js consul-1.8.7+dfsg1/ui-v2/app/components/aria-menu/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/aria-menu/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/aria-menu/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,152 @@ +import Component from '@ember/component'; +import { inject as service } from '@ember/service'; +import { set } from '@ember/object'; +import { next } from '@ember/runloop'; + +const TAB = 9; +const ENTER = 13; +const ESC = 27; +const SPACE = 32; +const END = 35; +const HOME = 36; +const ARROW_UP = 38; +const ARROW_DOWN = 40; + +const keys = { + vertical: { + [ARROW_DOWN]: function($items, i = -1) { + return (i + 1) % $items.length; + }, + [ARROW_UP]: function($items, i = 0) { + if (i === 0) { + return $items.length - 1; + } else { + return i - 1; + } + }, + [HOME]: function($items, i) { + return 0; + }, + [END]: function($items, i) { + return $items.length - 1; + }, + }, + horizontal: {}, +}; +const COMPONENT_ID = 'component-aria-menu-'; +// ^menuitem supports menuitemradio and menuitemcheckbox +const MENU_ITEMS = '[role^="menuitem"]'; +export default Component.extend({ + tagName: '', + dom: service('dom'), + router: service('router'), + guid: '', + expanded: false, + orientation: 'vertical', + keyboardAccess: true, + init: function() { + this._super(...arguments); + set(this, 'guid', this.dom.guid(this)); + this._listeners = this.dom.listeners(); + this._routelisteners = this.dom.listeners(); + }, + didInsertElement: function() { + // TODO: How do you detect whether the children have changed? + // For now we know that these elements exist and never change + this.$menu = this.dom.element(`#${COMPONENT_ID}menu-${this.guid}`); + const labelledBy = this.$menu.getAttribute('aria-labelledby'); + this.$trigger = this.dom.element(`#${labelledBy}`); + this._routelisteners.add(this.router, { + routeWillChange: () => this.actions.close.apply(this, [{}]), + }); + }, + willDestroyElement: function() { + this._super(...arguments); + this._listeners.remove(); + this._routelisteners.remove(); + }, + actions: { + keypressClick: function(e) { + e.target.dispatchEvent(new MouseEvent('click')); + }, + keypress: function(e) { + // If the event is from the trigger and its not an opening/closing + // key then don't do anything + if (![ENTER, SPACE, ARROW_UP, ARROW_DOWN].includes(e.keyCode)) { + return; + } + e.stopPropagation(); + // Also we may do this but not need it if we return early below + // although once we add support for [A-Za-z] it unlikely we won't use + // the keypress + // TODO: We need to use > somehow here so we don't select submenus + const $items = [...this.dom.elements(MENU_ITEMS, this.$menu)]; + if (!this.expanded) { + if (e.keyCode === ENTER || e.keyCode === SPACE) { + next(() => { + $items[0].focus(); + }); + return; + } + } + // this will prevent anything happening if you haven't pushed a + // configurable key + if (typeof keys[this.orientation][e.keyCode] === 'undefined') { + return; + } + // prevent any scroll, or default actions + e.preventDefault(); + const $focused = this.dom.element(`${MENU_ITEMS}:focus`, this.$menu); + let i; + if ($focused) { + i = $items.findIndex(function($item) { + return $item === $focused; + }); + } + const $next = $items[keys[this.orientation][e.keyCode]($items, i)]; + $next.focus(); + }, + // TODO: The argument here needs to change to an event + // see toggle-button.change + change: function(e) { + const open = e.target.checked; + if (open) { + this.actions.open.apply(this, [e]); + } else { + this.actions.close.apply(this, [e]); + } + }, + close: function(e) { + this._listeners.remove(); + set(this, 'expanded', false); + // TODO: Find a better way to do this without using next + // This is needed so when you press shift tab to leave the menu + // and go to the previous button, it doesn't focus the trigger for + // the menu itself + next(() => { + this.$trigger.removeAttribute('tabindex'); + }); + }, + open: function(e) { + set(this, 'expanded', true); + // Take the trigger out of the tabbing whilst the menu is open + this.$trigger.setAttribute('tabindex', '-1'); + this._listeners.add(this.dom.document(), { + keydown: e => { + // Keep focus on the trigger when you close via ESC + if (e.keyCode === ESC) { + this.$trigger.focus(); + } + if (e.keyCode === TAB || e.keyCode === ESC) { + this.$trigger.dispatchEvent(new MouseEvent('click')); + return; + } + if (!this.keyboardAccess) { + return; + } + this.actions.keypress.apply(this, [e]); + }, + }); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/aria-menu.js consul-1.8.7+dfsg1/ui-v2/app/components/aria-menu.js --- consul-1.7.4+dfsg1/ui-v2/app/components/aria-menu.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/aria-menu.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,151 +0,0 @@ -import Component from '@ember/component'; -import { inject as service } from '@ember/service'; -import { set } from '@ember/object'; -import { next } from '@ember/runloop'; - -const TAB = 9; -const ENTER = 13; -const ESC = 27; -const SPACE = 32; -const END = 35; -const HOME = 36; -const ARROW_UP = 38; -const ARROW_DOWN = 40; - -const keys = { - vertical: { - [ARROW_DOWN]: function($items, i = -1) { - return (i + 1) % $items.length; - }, - [ARROW_UP]: function($items, i = 0) { - if (i === 0) { - return $items.length - 1; - } else { - return i - 1; - } - }, - [HOME]: function($items, i) { - return 0; - }, - [END]: function($items, i) { - return $items.length - 1; - }, - }, - horizontal: {}, -}; -const COMPONENT_ID = 'component-aria-menu-'; -// ^menuitem supports menuitemradio and menuitemcheckbox -const MENU_ITEMS = '[role^="menuitem"]'; -export default Component.extend({ - tagName: '', - dom: service('dom'), - router: service('router'), - guid: '', - expanded: false, - orientation: 'vertical', - keyboardAccess: true, - init: function() { - this._super(...arguments); - set(this, 'guid', this.dom.guid(this)); - this._listeners = this.dom.listeners(); - this._routelisteners = this.dom.listeners(); - }, - didInsertElement: function() { - // TODO: How do you detect whether the children have changed? - // For now we know that these elements exist and never change - this.$menu = this.dom.element(`#${COMPONENT_ID}menu-${this.guid}`); - const labelledBy = this.$menu.getAttribute('aria-labelledby'); - this.$trigger = this.dom.element(`#${labelledBy}`); - this._routelisteners.add(this.router, { - routeWillChange: () => this.actions.close.apply(this, [{}]), - }); - }, - willDestroyElement: function() { - this._super(...arguments); - this._listeners.remove(); - this._routelisteners.remove(); - }, - actions: { - keypressClick: function(e) { - e.target.dispatchEvent(new MouseEvent('click')); - }, - keypress: function(e) { - // If the event is from the trigger and its not an opening/closing - // key then don't do anything - if (![ENTER, SPACE, ARROW_UP, ARROW_DOWN].includes(e.keyCode)) { - return; - } - e.stopPropagation(); - // Also we may do this but not need it if we return early below - // although once we add support for [A-Za-z] it unlikely we won't use - // the keypress - // TODO: We need to use > somehow here so we don't select submenus - const $items = [...this.dom.elements(MENU_ITEMS, this.$menu)]; - if (!this.expanded) { - this.$trigger.dispatchEvent(new MouseEvent('click')); - if (e.keyCode === ENTER || e.keyCode === SPACE) { - $items[0].focus(); - return; - } - } - // this will prevent anything happening if you haven't pushed a - // configurable key - if (typeof keys[this.orientation][e.keyCode] === 'undefined') { - return; - } - // prevent any scroll, or default actions - e.preventDefault(); - const $focused = this.dom.element(`${MENU_ITEMS}:focus`, this.$menu); - let i; - if ($focused) { - i = $items.findIndex(function($item) { - return $item === $focused; - }); - } - const $next = $items[keys[this.orientation][e.keyCode]($items, i)]; - $next.focus(); - }, - // TODO: The argument here needs to change to an event - // see toggle-button.change - change: function(e) { - const open = e.target.checked; - if (open) { - this.actions.open.apply(this, [e]); - } else { - this.actions.close.apply(this, [e]); - } - }, - close: function(e) { - this._listeners.remove(); - set(this, 'expanded', false); - // TODO: Find a better way to do this without using next - // This is needed so when you press shift tab to leave the menu - // and go to the previous button, it doesn't focus the trigger for - // the menu itself - next(() => { - this.$trigger.removeAttribute('tabindex'); - }); - }, - open: function(e) { - set(this, 'expanded', true); - // Take the trigger out of the tabbing whilst the menu is open - this.$trigger.setAttribute('tabindex', '-1'); - this._listeners.add(this.dom.document(), { - keydown: e => { - // Keep focus on the trigger when you close via ESC - if (e.keyCode === ESC) { - this.$trigger.focus(); - } - if (e.keyCode === TAB || e.keyCode === ESC) { - this.$trigger.dispatchEvent(new MouseEvent('click')); - return; - } - if (!this.keyboardAccess) { - return; - } - this.actions.keypress.apply(this, [e]); - }, - }); - }, - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/chart.xstate.js consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/chart.xstate.js --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/chart.xstate.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/chart.xstate.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,34 @@ +export default { + id: 'auth-dialog', + initial: 'idle', + on: { + CHANGE: [ + { + target: 'authorized', + cond: 'hasToken', + actions: ['login'], + }, + { + target: 'unauthorized', + actions: ['logout'], + }, + ], + }, + states: { + idle: { + on: { + CHANGE: [ + { + target: 'authorized', + cond: 'hasToken', + }, + { + target: 'unauthorized', + }, + ], + }, + }, + unauthorized: {}, + authorized: {}, + }, +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,40 @@ + + + + + + {{! This DataSource just permanently listens to any changes to the users }} + {{! token, whether thats a new token, a changed token or a deleted token }} + + {{! This DataSink is just used for logging in from the form, }} + {{! or logging out via the exposed logout function }} + + {{yield}} + {{#let (hash + login=(action sink.open) + logout=(action sink.open null) + token=token + ) (hash + AuthProfile=(component 'auth-profile' item=token) + AuthForm=(component 'auth-form' dc=dc nspace=nspace onsubmit=(action sink.open value="data")) + ) as |api components|}} + + {{#yield-slot name="authorized"}} + {{yield api components}} + {{/yield-slot}} + + + + {{#yield-slot name="unauthorized"}} + {{yield api components}} + {{/yield-slot}} + + {{/let}} + + diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/index.js consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +import Component from '@ember/component'; +import Slotted from 'block-slots'; +import { inject as service } from '@ember/service'; +import { get } from '@ember/object'; +import chart from './chart.xstate'; + +export default Component.extend(Slotted, { + tagName: '', + repo: service('repository/oidc-provider'), + init: function() { + this._super(...arguments); + this.chart = chart; + }, + actions: { + hasToken: function() { + return typeof this.token.AccessorID !== 'undefined'; + }, + login: function() { + let prev = get(this, 'previousToken.AccessorID'); + let current = get(this, 'token.AccessorID'); + if (prev === null) { + prev = get(this, 'previousToken.SecretID'); + } + if (current === null) { + current = get(this, 'token.SecretID'); + } + let type = 'authorize'; + if (typeof prev !== 'undefined' && prev !== current) { + type = 'use'; + } + this.onchange({ data: get(this, 'token'), type: type }); + }, + logout: function() { + if (typeof get(this, 'previousToken.AuthMethod') !== 'undefined') { + // we are ok to fire and forget here + this.repo.logout(get(this, 'previousToken.SecretID')); + } + this.previousToken = null; + this.onchange({ data: null, type: 'logout' }); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-dialog/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-dialog/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +## AuthDialog + +```handlebars + + {{#let components.AuthForm components.AuthProfile as |AuthForm AuthProfile|}} + + Here's the login form: + + + + Here's your profile: + + + Contact your administrator for login credentials. + +{{#if (env 'CONSUL_SSO_ENABLED')}} + + {{#if (gt providers.length 0)}} +

+ or +

+ {{/if}} + +{{/if}} + + + + + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-form/index.js consul-1.8.7+dfsg1/ui-v2/app/components/auth-form/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-form/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-form/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +import Component from '@ember/component'; +import { computed } from '@ember/object'; +import Ember from 'ember'; + +import chart from './chart.xstate'; + +export default Component.extend({ + tagName: '', + onsubmit: function(e) {}, + onchange: function(e) {}, + // Blink/Webkit based seem to leak password inputs + // this will only occur during acceptance testing so + // turn them into text inputs during acceptance testing + inputType: computed(function() { + return Ember.testing ? 'text' : 'password'; + }), + init: function() { + this._super(...arguments); + this.chart = chart; + }, + actions: { + hasValue: function(context, event, meta) { + return this.value !== '' && typeof this.value !== 'undefined'; + }, + focus: function() { + this.input.focus(); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-form/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/auth-form/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-form/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-form/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +export default (submitable, clickable, attribute) => (scope = '.auth-form') => { + return { + scope: scope, + ...submitable(), + }; +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-form/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/auth-form/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-form/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-form/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +## AuthForm + +```handlebars + +``` + +### Methods/Actions/api + +| Method/Action | Description | +| --- | --- | +| `reset` | Reset the form back to its original empty/non-error state | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-profile/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/auth-profile/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-profile/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-profile/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +
+
+ My ACL Token
+ AccessorID +
+
+ {{substr item.AccessorID -8}} +
+
\ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-profile/index.js consul-1.8.7+dfsg1/ui-v2/app/components/auth-profile/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-profile/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-profile/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/auth-profile/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/auth-profile/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/auth-profile/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/auth-profile/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +## AuthProfile + +```handlebars + +``` + +A straightforward partial-like component for rendering a user profile. + +### Arguments + +| Argument | Type | Default | Description | +| --- | --- | --- | --- | +| `item` | `Object` | | A Consul shaped token object (currently only requires an AccessorID property to be set | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/catalog-filter.js consul-1.8.7+dfsg1/ui-v2/app/components/catalog-filter.js --- consul-1.7.4+dfsg1/ui-v2/app/components/catalog-filter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/catalog-filter.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - tagName: 'form', - classNames: ['filter-bar'], - 'data-test-catalog-filter': true, - onchange: function() {}, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/changeable-set/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/changeable-set/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/changeable-set/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/changeable-set/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +{{yield}} + {{yield}} +{{#if (gt items.length 0)}} + {{yield}} +{{else}} + {{yield}} +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/changeable-set/index.js consul-1.8.7+dfsg1/ui-v2/app/components/changeable-set/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/changeable-set/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/changeable-set/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +import Component from '@ember/component'; +import { get, set } from '@ember/object'; +import { inject as service } from '@ember/service'; +import Slotted from 'block-slots'; + +export default Component.extend(Slotted, { + tagName: '', + dom: service('dom'), + init: function() { + this._super(...arguments); + this._listeners = this.dom.listeners(); + }, + willDestroyElement: function() { + this._listeners.remove(); + this._super(...arguments); + }, + didReceiveAttrs: function() { + this._super(...arguments); + if (this.items !== this.dispatcher.data) { + this._listeners.remove(); + this._listeners.add(this.dispatcher, { + change: e => set(this, 'items', e.target.data), + }); + set(this, 'items', get(this.dispatcher, 'data')); + } + this.dispatcher.search(this.terms); + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/changeable-set.js consul-1.8.7+dfsg1/ui-v2/app/components/changeable-set.js --- consul-1.7.4+dfsg1/ui-v2/app/components/changeable-set.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/changeable-set.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -import Component from '@ember/component'; -import { get, set } from '@ember/object'; -import SlotsMixin from 'block-slots'; -import WithListeners from 'consul-ui/mixins/with-listeners'; - -export default Component.extend(WithListeners, SlotsMixin, { - tagName: '', - didReceiveAttrs: function() { - this._super(...arguments); - this.removeListeners(); - const dispatcher = this.dispatcher; - if (dispatcher) { - this.listen(dispatcher, 'change', e => { - set(this, 'items', e.target.data); - }); - set(this, 'items', get(dispatcher, 'data')); - } - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/child-selector/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/child-selector/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/child-selector/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/child-selector/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +
+{{yield}} + {{yield}} + +{{#if (gt items.length 0)}} + {{yield}} +{{else}} + +{{/if}} +
\ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/child-selector/index.js consul-1.8.7+dfsg1/ui-v2/app/components/child-selector/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/child-selector/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/child-selector/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,120 @@ +import Component from '@ember/component'; +import { get, set, computed } from '@ember/object'; +import { alias } from '@ember/object/computed'; +import { inject as service } from '@ember/service'; + +import Slotted from 'block-slots'; + +export default Component.extend(Slotted, { + onchange: function() {}, + tagName: '', + + error: function() {}, + type: '', + + dom: service('dom'), + container: service('search'), + formContainer: service('form'), + + item: alias('form.data'), + + selectedOptions: alias('items'), + + init: function() { + this._super(...arguments); + this._listeners = this.dom.listeners(); + this.searchable = this.container.searchable(this.type); + this.form = this.formContainer.form(this.type); + this.form.clear({ Datacenter: this.dc, Namespace: this.nspace }); + }, + willDestroyElement: function() { + this._super(...arguments); + this._listeners.remove(); + }, + options: computed('selectedOptions.[]', 'allOptions.[]', function() { + // It's not massively important here that we are defaulting `items` and + // losing reference as its just to figure out the diff + let options = this.allOptions || []; + const items = this.selectedOptions || []; + if (get(items, 'length') > 0) { + // find a proper ember-data diff + options = options.filter(item => !items.findBy('ID', get(item, 'ID'))); + this.searchable.add(options); + } + return options; + }), + actions: { + search: function(term) { + // TODO: make sure we can either search before things are loaded + // or wait until we are loaded, guess power select take care of that + return new Promise(resolve => { + const remove = this._listeners.add(this.searchable, { + change: e => { + remove(); + resolve(e.target.data); + }, + }); + this.searchable.search(term); + }); + }, + reset: function() { + this.form.clear({ Datacenter: this.dc, Namespace: this.nspace }); + }, + save: function(item, items, success = function() {}) { + // Specifically this saves an 'new' option/child + // and then adds it to the selectedOptions, not options + const repo = this.repo; + set(item, 'CreateTime', new Date().getTime()); + // TODO: temporary async + // this should be `set(this, 'item', repo.persist(item));` + // need to be sure that its saved before adding/closing the modal for now + // and we don't open the modal on prop change yet + item = repo.persist(item); + this._listeners.add(item, { + message: e => { + this.actions.change.apply(this, [ + { + target: { + name: 'items[]', + value: items, + }, + }, + items, + e.data, + ]); + item.willDestroy(); + success(); + }, + error: e => { + item.willDestroy(); + this.error(e); + }, + }); + }, + remove: function(item, items) { + const prop = this.repo.getSlugKey(); + const value = get(item, prop); + const pos = items.findIndex(function(item) { + return get(item, prop) === value; + }); + if (pos !== -1) { + return items.removeAt(pos, 1); + } + this.onchange({ target: this }); + }, + change: function(e, value, item) { + const event = this.dom.normalizeEvent(...arguments); + const items = value; + switch (event.target.name) { + case 'items[]': + set(item, 'CreateTime', new Date().getTime()); + // this always happens synchronously + items.pushObject(item); + // TODO: Fire a proper event + this.onchange({ target: this }); + break; + default: + } + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/child-selector.js consul-1.8.7+dfsg1/ui-v2/app/components/child-selector.js --- consul-1.7.4+dfsg1/ui-v2/app/components/child-selector.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/child-selector.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -import Component from '@ember/component'; -import { get, set, computed } from '@ember/object'; -import { alias } from '@ember/object/computed'; -import { inject as service } from '@ember/service'; -import { Promise } from 'rsvp'; - -import SlotsMixin from 'block-slots'; -import WithListeners from 'consul-ui/mixins/with-listeners'; - -export default Component.extend(SlotsMixin, WithListeners, { - onchange: function() {}, - - error: function() {}, - type: '', - - dom: service('dom'), - container: service('search'), - formContainer: service('form'), - - item: alias('form.data'), - - selectedOptions: alias('items'), - - init: function() { - this._super(...arguments); - this.searchable = this.container.searchable(this.type); - this.form = this.formContainer.form(this.type); - this.form.clear({ Datacenter: this.dc, Namespace: this.nspace }); - }, - options: computed('selectedOptions.[]', 'allOptions.[]', function() { - // It's not massively important here that we are defaulting `items` and - // losing reference as its just to figure out the diff - let options = this.allOptions || []; - const items = this.selectedOptions || []; - if (get(items, 'length') > 0) { - // find a proper ember-data diff - options = options.filter(item => !items.findBy('ID', get(item, 'ID'))); - this.searchable.add(options); - } - return options; - }), - actions: { - search: function(term) { - // TODO: make sure we can either search before things are loaded - // or wait until we are loaded, guess power select take care of that - return new Promise(resolve => { - const remove = this.listen(this.searchable, 'change', function(e) { - remove(); - resolve(e.target.data); - }); - this.searchable.search(term); - }); - }, - reset: function() { - this.form.clear({ Datacenter: this.dc, Namespace: this.nspace }); - }, - open: function() { - if (!get(this, 'allOptions.closed')) { - set(this, 'allOptions', this.repo.findAllByDatacenter(this.dc, this.nspace)); - } - }, - save: function(item, items, success = function() {}) { - // Specifically this saves an 'new' option/child - // and then adds it to the selectedOptions, not options - const repo = this.repo; - set(item, 'CreateTime', new Date().getTime()); - // TODO: temporary async - // this should be `set(this, 'item', repo.persist(item));` - // need to be sure that its saved before adding/closing the modal for now - // and we don't open the modal on prop change yet - item = repo.persist(item); - this.listen(item, 'message', e => { - this.actions.change.bind(this)( - { - target: { - name: 'items[]', - value: items, - }, - }, - items, - e.data - ); - success(); - }); - this.listen(item, 'error', this.error.bind(this)); - }, - remove: function(item, items) { - const prop = this.repo.getSlugKey(); - const value = get(item, prop); - const pos = items.findIndex(function(item) { - return get(item, prop) === value; - }); - if (pos !== -1) { - return items.removeAt(pos, 1); - } - this.onchange({ target: this }); - }, - change: function(e, value, item) { - const event = this.dom.normalizeEvent(...arguments); - const items = value; - switch (event.target.name) { - case 'items[]': - set(item, 'CreateTime', new Date().getTime()); - // this always happens synchronously - items.pushObject(item); - // TODO: Fire a proper event - this.onchange({ target: this }); - break; - default: - } - }, - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/code-editor/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/code-editor/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/code-editor/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/code-editor/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ + +
{{yield}}
+{{#if (and (not readonly) (not syntax))}} + + {{mode.name}} + +{{/if}} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/code-editor/index.js consul-1.8.7+dfsg1/ui-v2/app/components/code-editor/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/code-editor/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/code-editor/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +import Component from '@ember/component'; +import { set } from '@ember/object'; +import { inject as service } from '@ember/service'; +const DEFAULTS = { + tabSize: 2, + lineNumbers: true, + theme: 'hashi', + showCursorWhenSelecting: true, + gutters: ['CodeMirror-lint-markers'], + lint: true, +}; +export default Component.extend({ + settings: service('settings'), + dom: service('dom'), + helper: service('code-mirror/linter'), + classNames: ['code-editor'], + readonly: false, + syntax: '', + // TODO: Change this to oninput to be consistent? We'll have to do it throughout the templates + onkeyup: function() {}, + oninput: function() {}, + init: function() { + this._super(...arguments); + set(this, 'modes', this.helper.modes()); + }, + didReceiveAttrs: function() { + this._super(...arguments); + const editor = this.editor; + if (editor) { + editor.setOption('readOnly', this.readonly); + } + }, + setMode: function(mode) { + set(this, 'options', { + ...DEFAULTS, + mode: mode.mime, + readOnly: this.readonly, + }); + const editor = this.editor; + editor.setOption('mode', mode.mime); + this.helper.lint(editor, mode.mode); + set(this, 'mode', mode); + }, + willDestroyElement: function() { + this._super(...arguments); + if (this.observer) { + this.observer.disconnect(); + } + }, + didInsertElement: function() { + this._super(...arguments); + const $code = this.dom.element('textarea ~ pre code', this.element); + if ($code.firstChild) { + this.observer = new MutationObserver(([e]) => { + this.oninput(set(this, 'value', e.target.wholeText)); + }); + this.observer.observe($code, { + attributes: false, + subtree: true, + childList: false, + characterData: true, + }); + set(this, 'value', $code.firstChild.wholeText); + } + set(this, 'editor', this.helper.getEditor(this.element)); + this.settings.findBySlug('code-editor').then(mode => { + const modes = this.modes; + const syntax = this.syntax; + if (syntax) { + mode = modes.find(function(item) { + return item.name.toLowerCase() == syntax.toLowerCase(); + }); + } + mode = !mode ? modes[0] : mode; + this.setMode(mode); + }); + }, + didAppear: function() { + this.editor.refresh(); + }, + actions: { + change: function(value) { + this.settings.persist({ + 'code-editor': value, + }); + this.setMode(value); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/code-editor.js consul-1.8.7+dfsg1/ui-v2/app/components/code-editor.js --- consul-1.7.4+dfsg1/ui-v2/app/components/code-editor.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/code-editor.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -import Component from '@ember/component'; -import { set } from '@ember/object'; -import { inject as service } from '@ember/service'; -const DEFAULTS = { - tabSize: 2, - lineNumbers: true, - theme: 'hashi', - showCursorWhenSelecting: true, - gutters: ['CodeMirror-lint-markers'], - lint: true, -}; -export default Component.extend({ - settings: service('settings'), - dom: service('dom'), - helper: service('code-mirror/linter'), - classNames: ['code-editor'], - readonly: false, - syntax: '', - // TODO: Change this to oninput to be consistent? We'll have to do it throughout the templates - onkeyup: function() {}, - oninput: function() {}, - init: function() { - this._super(...arguments); - set(this, 'modes', this.helper.modes()); - }, - didReceiveAttrs: function() { - this._super(...arguments); - const editor = this.editor; - if (editor) { - editor.setOption('readOnly', this.readonly); - } - }, - setMode: function(mode) { - set(this, 'options', { - ...DEFAULTS, - mode: mode.mime, - readOnly: this.readonly, - }); - const editor = this.editor; - editor.setOption('mode', mode.mime); - this.helper.lint(editor, mode.mode); - set(this, 'mode', mode); - }, - willDestroyElement: function() { - this._super(...arguments); - if (this.observer) { - this.observer.disconnect(); - } - }, - didInsertElement: function() { - this._super(...arguments); - const $code = this.dom.element('textarea ~ pre code', this.element); - if ($code.firstChild) { - this.observer = new MutationObserver(([e]) => { - this.oninput(set(this, 'value', e.target.wholeText)); - }); - this.observer.observe($code, { - attributes: false, - subtree: true, - childList: false, - characterData: true, - }); - set(this, 'value', $code.firstChild.wholeText); - } - set(this, 'editor', this.helper.getEditor(this.element)); - this.settings.findBySlug('code-editor').then(mode => { - const modes = this.modes; - const syntax = this.syntax; - if (syntax) { - mode = modes.find(function(item) { - return item.name.toLowerCase() == syntax.toLowerCase(); - }); - } - mode = !mode ? modes[0] : mode; - this.setMode(mode); - }); - }, - didAppear: function() { - this.editor.refresh(); - }, - actions: { - change: function(value) { - this.settings.persist({ - 'code-editor': value, - }); - this.setMode(value); - }, - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/action/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/action/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/action/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/action/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +
  • + +
  • diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/action/index.js consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/action/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/action/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/action/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +{{yield}} +
    +
    +
    + {{yield}} +
    + {{yield}} +
    +
      + + {{yield}} + +
    • + +
    • +
    +
    \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/index.js consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-alert/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-alert/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-dialog/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-dialog/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-dialog/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-dialog/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +
    +{{yield}} + +{{#if (or permanent (not confirming))}} + {{yield}} +{{/if}} + + +{{#if confirming }} + {{yield}} +{{/if}} + +
    \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-dialog/index.js consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-dialog/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-dialog/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-dialog/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +/*eslint ember/closure-actions: "warn"*/ +import Component from '@ember/component'; + +import Slotted from 'block-slots'; +import { set } from '@ember/object'; + +export default Component.extend(Slotted, { + tagName: '', + message: 'Are you sure?', + confirming: false, + permanent: false, + actions: { + cancel: function() { + set(this, 'confirming', false); + }, + execute: function() { + set(this, 'confirming', false); + this.sendAction(...['actionName', ...this['arguments']]); + }, + confirm: function() { + const [action, ...args] = arguments; + set(this, 'actionName', action); + set(this, 'arguments', args); + set(this, 'confirming', true); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-dialog.js consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-dialog.js --- consul-1.7.4+dfsg1/ui-v2/app/components/confirmation-dialog.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/confirmation-dialog.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/*eslint ember/closure-actions: "warn"*/ -import Component from '@ember/component'; - -import SlotsMixin from 'block-slots'; -import { set } from '@ember/object'; - -const cancel = function() { - set(this, 'confirming', false); -}; -const execute = function() { - this.sendAction(...['actionName', ...this['arguments']]); -}; -const confirm = function() { - const [action, ...args] = arguments; - set(this, 'actionName', action); - set(this, 'arguments', args); - set(this, 'confirming', true); -}; -export default Component.extend(SlotsMixin, { - classNameBindings: ['confirming'], - classNames: ['with-confirmation'], - message: 'Are you sure?', - confirming: false, - permanent: false, - init: function() { - this._super(...arguments); - this.cancel = cancel.bind(this); - this.execute = execute.bind(this); - this.confirm = confirm.bind(this); - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,69 @@ +
      +{{#each items as |path|}} +
    • +
      + {{#let (concat address ':' path.Path) as |combinedAddress|}} +

      + + {{combinedAddress}} + + +

      + {{/let}} +
      +
      + {{#if path.Protocol}} +
      +
      + + Protocol + +
      +
      + {{path.Protocol}} +
      +
      + {{/if}} + {{#if path.ListenerPort}} +
      +
      + + Port + +
      +
      + listening on :{{path.ListenerPort}} +
      +
      + {{/if}} + {{#if path.LocalPathPort}} +
      +
      + + Port + +
      +
      + local port :{{path.LocalPathPort}} +
      +
      + {{/if}} + {{#if path.Path}} +
      +
      + + Path + +
      +
      + {{path.Path}} +
      +
      + {{/if}} +
      +
    • +{{/each}} +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-exposed-path-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-external-source/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-external-source/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-external-source/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-external-source/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ +{{#if item}} + {{#let (if _externalSource _externalSource (service/external-source item)) as |externalSource|}} + {{#if externalSource}} + {{#if (has-block)}} + {{yield + (component 'consul-external-source' item=item _externalSource=externalSource) + }} + {{else}} + + {{#if (eq externalSource 'aws')}} + Registered via {{uppercase externalSource}} + {{else}} + Registered via {{capitalize externalSource}} + {{/if}} + + {{/if}} + {{/if}} + {{/let}} +{{/if}} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-external-source/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-external-source/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-external-source/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-external-source/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-instance-checks/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-instance-checks/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-instance-checks/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-instance-checks/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +{{#if (gt items.length 0)}} + {{#if (eq healthCheck.check 'empty') }} +
    +
    + + {{capitalize type}} Checks + +
    +
    No {{type}} checks
    +
    + {{else}} + {{#if (eq healthCheck.count items.length)}} +
    +
    + + {{capitalize type}} Checks + +
    +
    All {{type}} checks {{healthCheck.status}}
    +
    + {{else}} +
    +
    + + {{capitalize type}} Checks + +
    +
    {{healthCheck.count}}/{{items.length}} {{type}} checks {{healthCheck.status}}
    +
    + {{/if}} + {{/if}} +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-instance-checks/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-instance-checks/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-instance-checks/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-instance-checks/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +import Component from '@ember/component'; +import { computed } from '@ember/object'; + +export default Component.extend({ + tagName: '', + healthCheck: computed('items.[]', function() { + let ChecksCritical = 0; + let ChecksWarning = 0; + let ChecksPassing = 0; + + this.items.forEach(item => { + switch (item.Status) { + case 'critical': + ChecksCritical += 1; + break; + case 'warning': + ChecksWarning += 1; + break; + case 'passing': + ChecksPassing += 1; + break; + default: + break; + } + }); + + switch (true) { + case ChecksCritical !== 0: + return { + check: 'critical', + status: 'failing', + count: ChecksCritical, + }; + case ChecksWarning !== 0: + return { + check: 'warning', + status: 'with warning', + count: ChecksWarning, + }; + case ChecksPassing !== 0: + return { + check: 'passing', + status: 'passing', + count: ChecksPassing, + }; + default: + return { + check: 'empty', + }; + } + }), +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-form/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-form/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-form/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-form/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,168 @@ + + + + + + + + + + + + {{#if (env 'CONSUL_NSPACES_ENABLED')}} + + {{/if}} + +
    + +
    +
    +
    +

    Source

    + + {{#if (env 'CONSUL_NSPACES_ENABLED')}} + + {{/if}} +
    +
    +

    Destination

    + + {{#if (env 'CONSUL_NSPACES_ENABLED')}} + + {{/if}} +
    +
    +
    + {{#each (array 'allow' 'deny') as |intent|}} + + {{/each}} +
    + +
    + +
    + + + {{#if (not api.isCreate)}} + {{#if (not-eq form.item.ID 'anonymous') }} + + + + + + + + + {{/if}} + {{/if}} +
    + +
    + +
    +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-form/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-form/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-form/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-form/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,118 @@ +import Component from '@ember/component'; +import { setProperties, set, get } from '@ember/object'; + +export default Component.extend({ + tagName: '', + ondelete: function() { + this.onsubmit(...arguments); + }, + oncancel: function() { + this.onsubmit(...arguments); + }, + onsubmit: function() {}, + actions: { + createServices: function(item, e) { + // Services in the menus should: + // 1. Be unique (they potentially could be duplicated due to services from different namespaces) + // 2. Only include services that shold have intentions + // 3. Include an 'All Services' option + // 4. Include the current Source and Destination incase they are virtual services/don't exist yet + let items = e.data + .uniqBy('Name') + .toArray() + .filter( + item => !['connect-proxy', 'mesh-gateway', 'terminating-gateway'].includes(item.Kind) + ) + .sort((a, b) => a.Name.localeCompare(b.Name)); + items = [{ Name: '*' }].concat(items); + let source = items.findBy('Name', item.SourceName); + if (!source) { + source = { Name: item.SourceName }; + items = [source].concat(items); + } + let destination = items.findBy('Name', item.DestinationName); + if (!destination) { + destination = { Name: item.DestinationName }; + items = [destination].concat(items); + } + setProperties(this, { + services: items, + SourceName: source, + DestinationName: destination, + }); + }, + createNspaces: function(item, e) { + // Nspaces in the menus should: + // 1. Include an 'All Namespaces' option + // 2. Include the current SourceNS and DestinationNS incase they don't exist yet + let items = e.data.toArray().sort((a, b) => a.Name.localeCompare(b.Name)); + items = [{ Name: '*' }].concat(items); + let source = items.findBy('Name', item.SourceNS); + if (!source) { + source = { Name: item.SourceNS }; + items = [source].concat(items); + } + let destination = items.findBy('Name', item.DestinationNS); + if (!destination) { + destination = { Name: item.DestinationNS }; + items = [destination].concat(items); + } + setProperties(this, { + nspaces: items, + SourceNS: source, + DestinationNS: destination, + }); + }, + createNewLabel: function(template, term) { + return template.replace(/{{term}}/g, term); + }, + isUnique: function(items, term) { + return !items.findBy('Name', term); + }, + change: function(e, form, item) { + const target = e.target; + + let name, selected, match; + switch (target.name) { + case 'SourceName': + case 'DestinationName': + case 'SourceNS': + case 'DestinationNS': + name = selected = target.value; + // Names can be selected Service EmberObjects or typed in strings + // if its not a string, use the `Name` from the Service EmberObject + if (typeof name !== 'string') { + name = get(target.value, 'Name'); + } + // mutate the value with the string name + // which will be handled by the form + target.value = name; + // these are 'non-form' variables so not on `item` + // these variables also exist in the template so we know + // the current selection + // basically the difference between + // `item.DestinationName` and just `DestinationName` + // see if the name is already in the list + match = this.services.filterBy('Name', name); + if (match.length === 0) { + // if its not make a new 'fake' Service that doesn't exist yet + // and add it to the possible services to make an intention between + selected = { Name: name }; + switch (target.name) { + case 'SourceName': + case 'DestinationName': + set(this, 'services', [selected].concat(this.services.toArray())); + break; + case 'SourceNS': + case 'DestinationNS': + set(this, 'nspaces', [selected].concat(this.nspaces.toArray())); + break; + } + } + set(this, target.name, selected); + break; + } + form.handleEvent(e); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,87 @@ + + +{{#if (gt items.length 0)}} + + + + Source +   + Destination + Precedence + + + + + {{#if (eq item.SourceName '*') }} + All Services (*) + {{else}} + {{item.SourceName}} + {{/if}} + {{! TODO: slugify }} + {{or item.SourceNS 'default'}} + + + + {{item.Action}} + + + + {{#if (eq item.DestinationName '*') }} + All Services (*) + {{else}} + {{item.DestinationName}} + {{/if}} + {{! TODO: slugify }} + {{or item.DestinationNS 'default'}} + + + + {{item.Precedence}} + + + + + + More + + +
  • + Edit +
  • +
  • + +
    +
    +
    +
    + Confirm Delete +
    +

    + Are you sure you want to delete this intention? +

    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
  • +
    +
    +
    +
    + +{{else}} + {{yield}} +{{/if}} +
    +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', + ondelete: function() {}, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-list/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-list/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-intention-list/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-intention-list/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +export default (collection, clickable, attribute, deletable) => () => { + return collection('.consul-intention-list [data-test-tabular-row]', { + source: attribute('data-test-intention-source', '[data-test-intention-source]'), + destination: attribute('data-test-intention-destination', '[data-test-intention-destination]'), + action: attribute('data-test-intention-action', '[data-test-intention-action]'), + intention: clickable('a'), + actions: clickable('label'), + ...deletable(), + }); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kind/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-kind/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kind/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kind/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,95 @@ +{{#if item.Kind}} + {{#let (titleize (humanize item.Kind)) as |Name|}} + {{#if (has-block)}} + {{yield + (component 'consul-kind' item=item withInfo=withInfo) + }} + {{else}} + {{#if withInfo}} +
    +
    + + {{Name}} + +
    +
    + + + {{#if (eq item.Kind 'ingress-gateway')}} + Ingress gateways enable ingress traffic from services outside the Consul service mesh to services inside the Consul service mesh. + {{else if (eq item.Kind 'terminating-gateway')}} + Terminating gateways allow connect-enabled services in Consul service mesh to communicate with services outside the service mesh. + {{else}} + Mesh gateways enable routing of Connect traffic between different Consul datacenters. + {{/if}} + + +
  • + {{#if (eq item.Kind 'ingress-gateway')}} + About Ingress gateways + {{else if (eq item.Kind 'terminating-gateway')}} + About Terminating gateways + {{else}} + About Mesh gateways + {{/if}} +
  • + {{#let (from-entries (array + (array 'ingress-gateway' '/consul/developer-mesh/ingress-gateways') + (array 'terminating-gateway' '/consul/developer-mesh/understand-terminating-gateways') + (array 'mesh-gateway' '/consul/developer-mesh/connect-gateways') + ) + ) as |link|}} + + {{/let}} + {{#let (from-entries (array + (array 'ingress-gateway' '/connect/ingress-gateway') + (array 'terminating-gateway' '/connect/terminating-gateway') + (array 'mesh-gateway' '/connect/mesh-gateway') + ) + ) as |link|}} + +
  • + Other gateway types +
  • + {{#if (not-eq item.Kind 'mesh-gateway')}} + + {{/if}} + {{#if (not-eq item.Kind 'terminating-gateway')}} + + {{/if}} + {{#if (not-eq item.Kind 'ingress-gateway')}} + + {{/if}} + {{/let}} +
    +
    +
    +
    + {{else}} + + {{Name}} + + {{/if}} + {{/if}} + {{/let}} +{{/if}} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kind/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-kind/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kind/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kind/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-form/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-form/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-form/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-form/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,59 @@ + + +
    +
    +{{#if api.isCreate}} + +{{/if}} +{{#if (or (eq (left-trim api.data.Key parent.Key) '') (not-eq (last api.data.Key) '/'))}} +
    +
    + +
    + +
    +{{/if}} +
    + {{#if api.isCreate}} + + + {{else}} + + + + + + + + + + + {{/if}} +
    +
    +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-form/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-form/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-form/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-form/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +import Component from '@ember/component'; +import { get, set } from '@ember/object'; +import { inject as service } from '@ember/service'; + +export default Component.extend({ + tagName: '', + encoder: service('btoa'), + json: true, + ondelete: function() { + this.onsubmit(...arguments); + }, + oncancel: function() { + this.onsubmit(...arguments); + }, + onsubmit: function() {}, + actions: { + change: function(e, form) { + const item = form.getData(); + try { + form.handleEvent(e); + } catch (err) { + const target = e.target; + let parent; + switch (target.name) { + case 'value': + set(item, 'Value', this.encoder.execute(target.value)); + break; + case 'additional': + parent = get(this, 'parent.Key'); + set(item, 'Key', `${parent !== '/' ? parent : ''}${target.value}`); + break; + case 'json': + // TODO: Potentially save whether json has been clicked to the model, + // setting set(this, 'json', true) here will force the form to always default to code=on + // even if the user has selected code=off on another KV + // ideally we would save the value per KV, but I'd like to not do that on the model + // a set(this, 'json', valueFromSomeStorageJustForThisKV) would be added here + set(this, 'json', !this.json); + break; + default: + throw err; + } + } + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ + + +{{#if (gt items.length 0)}} + + + Name + + + + {{right-trim (left-trim item.Key parent.Key) '/'}} + + + + + + More + + +
  • + {{if item.isFolder 'View' 'Edit'}} +
  • +
  • + +
    +
    +
    +
    + Confirm Delete +
    +

    + Are you sure you want to delete this key? +

    +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
  • +
    +
    +
    +
    +{{else}} + {{yield}} +{{/if}} +
    +
    \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', + ondelete: function() {}, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-list/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-list/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-kv-list/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-kv-list/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +export default (collection, clickable, attribute, deletable) => () => { + return collection('.consul-kv-list [data-test-tabular-row]', { + name: attribute('data-test-kv', '[data-test-kv]'), + kv: clickable('a'), + actions: clickable('label'), + ...deletable(), + }); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-loader/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-loader/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-loader/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-loader/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-loader/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-loader/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-loader/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-loader/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-loader/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-loader/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-loader/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-loader/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,16 @@ +## ConsulLoader + +`` + +Simple template-only component to show the circulr animated Consul loader animation. + +| Argument | Type | Default | Description | +| --- | --- | --- | --- | + + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-metadata-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-metadata-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-metadata-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-metadata-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ + diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-metadata-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-metadata-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-metadata-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-metadata-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-metadata-list/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-metadata-list/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-metadata-list/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-metadata-list/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +## ConsulMetadataList + +`` + +A presentational component for presenting Consul Metadata + +### Arguments + +| Argument/Attribute | Type | Default | Description | +| --- | --- | --- | --- | +| `items` | `array` | | An array of entries or `[key, value]` pairs as returned by `Object.entries()` | + +### Example + +The following example shows how to construct the required structure from the +Consul API using a `object-entries` helper. + +```handlebars + +``` + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +{{#if (gt items.length 0)}} + + +{{#if item.DeletedAt}} +

    + Deleting {{item.Name}}... +

    +{{else}} + {{item.Name}} +{{/if}} +
    + +
    +
    Description
    +
    + {{item.Description}} +
    +
    + {{#if (env 'CONSUL_ACLS_ENABLED')}} + + {{/if}} +
    + + + + + Edit + + + {{#if (not-eq item.Name 'default') }} + + + Delete + + + + + Confirm delete + + +

    + Are you sure you want to delete this namespace? +

    +
    + + Delete + +
    +
    +
    + {{/if}} +
    +
    +
    +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', + actions: { + isLinkable: function(item) { + return !item.DeletedAt; + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +export default (collection, clickable, attribute, text, actions) => () => { + return collection('.consul-nspace-list [data-test-list-row]', { + nspace: clickable('a'), + name: attribute('data-test-nspace', '[data-test-nspace]'), + description: text('[data-test-description]'), + ...actions(['edit', 'delete']), + }); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-nspace-list/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-nspace-list/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +## ConsulNspaceList + +``` + +``` + +A presentational component for rendering Consul Namespaces + +### Arguments + +| Argument/Attribute | Type | Default | Description | +| --- | --- | --- | --- | +| `items` | `array` | | An array of Namespaces | +| `ondelete` | `function` | | An action to execute when the `Delete` action is clicked | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,67 @@ +{{#if (gt items.length 0)}} + + +{{#if (eq (policy/typeof item) 'policy-management')}} +
    +
    + + Global Management Policy + +
    +
    +{{/if}} + {{item.Name}} +
    + +
    +
    + Datacenters +
    +
    + {{join ', ' (policy/datacenters item)}} +
    +
    +
    +
    Description
    +
    + {{item.Description}} +
    +
    +
    + + + + +{{#if (eq (policy/typeof item) 'policy-management')}} + View +{{else}} + Edit +{{/if}} + + +{{#if (not-eq (policy/typeof item) 'policy-management')}} + + + Delete + + + + + Confirm delete + + +

    + Are you sure you want to delete this policy? +

    +
    + + Delete + +
    +
    +
    +{{/if}} +
    +
    +
    +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +export default (collection, clickable, attribute, text, actions) => () => { + return collection('.consul-policy-list [data-test-list-row]', { + name: attribute('data-test-policy', '[data-test-policy]'), + description: text('[data-test-description]'), + policy: clickable('a'), + ...actions(['edit', 'delete']), + }); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-policy-list/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-policy-list/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +## ConsulPolicyList + +``` + +``` + +A presentational component for rendering Consul ACL policies + +### Arguments + +| Argument/Attribute | Type | Default | Description | +| --- | --- | --- | --- | +| `items` | `array` | | An array of ACL policies | +| `ondelete` | `function` | | An action to execute when the `Delete` action is clicked | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,45 @@ +{{#if (gt items.length 0)}} + + + {{item.Name}} + + + +
    +
    Description
    +
    + {{item.Description}} +
    +
    +
    + + + + + Edit + + + + + Delete + + + + + Confirm delete + + +

    + Are you sure you want to delete this role? +

    +
    + + Delete + +
    +
    +
    +
    +
    +
    +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +export default (collection, clickable, attribute, text, actions) => () => { + return collection('.consul-role-list [data-test-list-row]', { + role: clickable('a'), + name: attribute('data-test-role', '[data-test-role]'), + description: text('[data-test-description]'), + policy: text('[data-test-policy].policy', { multiple: true }), + serviceIdentity: text('[data-test-policy].policy-service-identity', { multiple: true }), + ...actions(['edit', 'delete']), + }); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-role-list/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-role-list/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +## ConsulRoleList + +``` + +``` + +A presentational component for rendering Consul ACL roles + +### Arguments + +| Argument/Attribute | Type | Default | Description | +| --- | --- | --- | --- | +| `items` | `array` | | An array of ACL roles | +| `ondelete` | `function` | | An action to execute when the `Delete` action is clicked | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-instance-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-instance-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-instance-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-instance-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,81 @@ +{{#if (gt items.length 0)}} + + + {{#if (eq routeName "dc.services.show")}} + + {{item.ID}} + + {{else}} + + {{item.Service.ID}} + + {{/if}} + + + {{#if checks}} + + + {{else}} + + + + {{/if}} +{{#if (get proxies item.Service.ID)}} +
    +
    + + Proxy + +
    +
    + connected with proxy +
    +
    +{{/if}} +{{#if (gt item.Node.Node.length 0)}} +
    +
    + + Node + +
    +
    + {{item.Node.Node}} +
    +
    +{{/if}} +{{#if item.Service.Port}} +
    +
    + + IP Address and Port + +
    +
    + {{#if (not-eq item.Service.Address '')}} + {{item.Service.Address}}:{{item.Service.Port}} + {{else}} + {{item.Node.Address}}:{{item.Service.Port}} + {{/if}} +
    +
    +{{/if}} +{{#if (and checks item.Port)}} +
    +
    + +
    +
    :{{item.Port}}
    +
    +{{/if}} +{{#if checks}} + +{{else}} + +{{/if}} +
    +
    +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-instance-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-instance-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-instance-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-instance-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,79 @@ +{{#if (gt items.length 0)}} + + +
    +
    + Health +
    +
    + + {{#if (eq 'critical' item.MeshStatus)}} + At least one health check on one instance is failing. + {{else if (eq 'warning' item.MeshStatus)}} + At least one health check on one instance has a warning. + {{else if (eq 'passing' item.MeshStatus)}} + All health checks are passing. + {{else}} + There are no health checks. + {{/if}} + +
    +
    +{{#if (gt item.InstanceCount 0)}} + {{#if (eq item.Kind 'terminating-gateway')}} + + {{item.Name}} + + {{else if (eq item.Kind 'ingress-gateway')}} + + {{item.Name}} + + {{else}} + + {{item.Name}} + + {{/if}} +{{else}} +

    + {{item.Name}} +

    +{{/if}} +
    + +{{#if (and nspace (env 'CONSUL_NSPACES_ENABLED'))}} + {{#if (not-eq item.Namespace nspace)}} +
    +
    + + Namespace + +
    +
    + {{item.Namespace}} +
    +
    + {{/if}} +{{/if}} + + + {{#if (not-eq item.InstanceCount 0)}} + + {{format-number item.InstanceCount}} {{pluralize item.InstanceCount 'Instance' without-count=true}} + + {{/if}} + {{#if item.Proxy}} +
    +
    + + This service uses a proxy for the Consul service mesh + +
    +
    + connected with proxy +
    +
    + {{/if}} + +
    +
    +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-service-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-service-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +import Component from '@ember/component'; +import { get } from '@ember/object'; + +export default Component.extend({ + tagName: '', + actions: { + isLinkable: function(item) { + return get(item, 'InstanceCount') > 0; + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-session-form/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-session-form/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-session-form/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-session-form/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,54 @@ + + +
    +

    + Lock Session +

    +
    +
    Name
    +
    {{api.data.Name}}
    +
    Agent
    +
    + {{api.data.Node}} +
    +
    ID
    +
    {{api.data.ID}}
    +
    Behavior
    +
    {{api.data.Behavior}}
    +{{#if form.data.Delay }} +
    Delay
    +
    {{api.data.LockDelay}}
    +{{/if}} +{{#if form.data.TTL }} +
    TTL
    +
    {{api.data.TTL}}
    +{{/if}} +{{#if (gt api.data.Checks.length 0)}} +
    Health Checks
    +
    + {{ join ', ' api.data.Checks}} +
    +{{/if}} +
    + + + + + +

    + {{message}} +

    + + +
    +
    +
    +
    +
    \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-session-form/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-session-form/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-session-form/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-session-form/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +import Component from '@ember/component'; + +export default Component.extend({}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,112 @@ +{{#if (gt items.length 0)}} + + +{{#if (eq item.AccessorID token.AccessorID)}} +
    +
    + + Your token + +
    +
    +{{/if}} + {{substr item.AccessorID -8}} +
    + +
    +
    Scope
    +
    + {{if item.Local 'local' 'global' }} +
    +
    + +
    +
    Description
    +
    + {{or item.Description item.Name}} +
    +
    +
    + + + + + Edit + + + {{#if (not (token/is-legacy item))}} + + + Duplicate + + + {{/if}} + {{#if (eq item.AccessorID token.AccessorID)}} + + + Logout + + + + + Confirm logout + + +

    + Are you sure you want to stop using this ACL token? This will log you out. +

    +
    + + Logout + +
    +
    +
    + {{else}} + + + Use + + + + + Confirm use + + +

    + Are you sure you want to use this ACL token? +

    +
    + + Use + +
    +
    +
    + {{/if}} + {{#if (not (or (token/is-anonymous item) (eq item.AccessorID token.AccessorID)))}} + + + Delete + + + + + Confirm delete + + +

    + Are you sure you want to delete this token? +

    +
    + + Delete + +
    +
    +
    + {{/if}} +
    +
    +
    +{{/if}} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/pageobject.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/pageobject.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/pageobject.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/pageobject.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +export default (collection, clickable, attribute, text, actions) => () => { + return collection('.consul-token-list [data-test-list-row]', { + id: attribute('data-test-token', '[data-test-token]'), + description: text('[data-test-description]'), + policy: text('[data-test-policy].policy', { multiple: true }), + role: text('[data-test-policy].role', { multiple: true }), + serviceIdentity: text('[data-test-policy].policy-service-identity', { multiple: true }), + token: clickable('a'), + ...actions(['edit', 'delete', 'use', 'logout', 'clone']), + }); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-list/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-list/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +## ConsulTokenList + +``` + +``` + +A presentational component for rendering Consul ACL tokens + +### Arguments + +| Argument/Attribute | Type | Default | Description | +| --- | --- | --- | --- | +| `items` | `array` | | An array of ACL tokens | +| `token` | `Token` | | A token object to use for comparision for current token, usually the users current token | +| `onuse` | `function` | | An action to execute when the `Use` action is clicked | +| `ondelete` | `function` | | An action to execute when the `Delete` action is clicked | +| `onlogout` | `function` | | An action to execute when the `Logout` action is clicked | +| `onclone` | `function` | | An action to execute when the `Clone/Duplicate` action is clicked | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,49 @@ +{{#let (policy/group (or item.Policies item.ACLs.PolicyDefaults (array))) as |policies|}} + {{#let (get policies 'management') as |management|}} + {{#if (gt management.length 0)}} +
    +
    + Management +
    +
    + {{#each (get policies 'management') as |item|}} + {{item.Name}} + {{/each}} +
    +
    + {{/if}} + {{/let}} + {{#let (get policies 'identities') as |identities|}} + {{#if (gt identities.length 0)}} +
    +
    Identities
    +
    + {{#each identities as |item|}} + {{item.Name}} + {{/each}} +
    +
    + {{/if}} + {{/let}} + {{#if (token/is-legacy item) }} +
    +
    Rules
    +
    + Legacy tokens have embedded rules. +
    +
    + {{else}} + {{#let (append (get policies 'policies') (or item.Roles item.ACLs.RoleDefaults (array))) as |policies|}} + {{#if (gt policies.length 0)}} +
    +
    Rules
    +
    + {{#each policies as |item|}} + {{item.Name}} + {{/each}} +
    +
    + {{/if}} + {{/let}} + {{/if}} +{{/let}} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-ruleset-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-ruleset-list/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-ruleset-list/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-token-ruleset-list/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-token-ruleset-list/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +## ConsulTokenRulesetList + +``` + +``` + +A presentational component for rendering Consul ACL token 'rulesets'. Rulesets are the various 'rule-type' things that belong to a token such as policies, identities and roles, and in the case of legacy tokens, the old style string based rules property. + +### Arguments + +| Argument/Attribute | Type | Default | Description | +| --- | --- | --- | --- | +| `item` | `array` | | An ACL token | + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +
      +{{#each items as |item|}} +
    • +
      +

      + {{item.DestinationName}} +

      +
      +
      + {{#if (env 'CONSUL_NSPACES_ENABLED')}} + {{#if (not-eq item.DestinationType 'prepared_query')}} +
      +
      + + Namespace + +
      +
      + {{or item.DestinationNamespace 'default'}} +
      +
      + {{/if}} + {{/if}} + {{#if (and (not-eq item.Datacenter dc) (not-eq item.Datacenter ""))}} +
      +
      + + Datacenter + +
      +
      + {{item.Datacenter}} +
      +
      + {{/if}} + {{#if (gt item.LocalBindPort 0)}} + {{#let (concat (or item.LocalBindAddress '127.0.0.1') ':' item.LocalBindPort) as |combinedAddress|}} +
      +
      + +
      +
      {{combinedAddress}}
      +
      + {{/let}} + {{/if}} +
      +
    • +{{/each}} +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-instance-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-list/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-list/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-list/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-list/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,64 @@ + + + {{#if (gt item.InstanceCount 0)}} +
    +
    + Health +
    +
    + + {{#if (eq 'critical' item.MeshStatus)}} + At least one health check on one instance is failing. + {{else if (eq 'warning' item.MeshStatus)}} + At least one health check on one instance has a warning. + {{else if (eq 'passing' item.MeshStatus)}} + All health checks are passing. + {{else}} + There are no health checks. + {{/if}} + +
    +
    + {{#if (and (env 'CONSUL_NSPACES_ENABLED') (not-eq item.Namespace nspace))}} + + {{item.Name}} + + {{else}} + + {{item.Name}} + + {{/if}} + {{else}} +

    + {{item.Name}} +

    + {{/if}} +
    + + {{#if (and (env 'CONSUL_NSPACES_ENABLED') (not-eq item.Namespace nspace))}} +
    +
    + + Namespace + +
    +
    + {{item.Namespace}} +
    +
    + {{/if}} +{{#if (gt item.GatewayConfig.Addresses.length 0)}} + {{#each item.GatewayConfig.Addresses as |address|}} +
    +
    + +
    +
    {{address}}
    +
    + {{/each}} +{{/if}} +
    +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-list/index.js consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-list/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/consul-upstream-list/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/consul-upstream-list/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +import Component from '@ember/component'; +import { get } from '@ember/object'; + +export default Component.extend({ + tagName: '', + actions: { + isLinkable: function(item) { + return get(item, 'InstanceCount') > 0; + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/chart.xstate.js consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/chart.xstate.js --- consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/chart.xstate.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/chart.xstate.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +export default { + id: 'copy-button', + initial: 'idle', + on: { + RESET: [ + { + target: 'idle', + }, + ], + }, + states: { + idle: { + on: { + SUCCESS: [ + { + target: 'success', + }, + ], + ERROR: [ + { + target: 'error', + }, + ], + }, + }, + success: {}, + error: {}, + }, +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,16 @@ + + + + + Copied {{name}}! + + + + + There was an problem! + + +
    + +
    +
    diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/index.js consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +import Component from '@ember/component'; +import { inject as service } from '@ember/service'; +import chart from './chart.xstate'; + +export default Component.extend({ + clipboard: service('clipboard/os'), + dom: service('dom'), + tagName: '', + init: function() { + this._super(...arguments); + this.chart = chart; + this.guid = this.dom.guid(this); + this._listeners = this.dom.listeners(); + }, + willDestroyElement: function() { + this._super(...arguments); + this._listeners.remove(); + }, + didInsertElement: function() { + this._super(...arguments); + this._listeners.add(this.clipboard.execute(`#${this.guid} button`), { + success: () => this.dispatch('SUCCESS'), + error: () => this.dispatch('ERROR'), + }); + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/copy-button/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/copy-button/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +## CopyButton + +```handlebars +{{! inline }} + + + + Copy me! + +``` + +### Arguments + +| Argument | Type | Default | Description | +| --- | --- | --- | --- | +| `value` | `String` | | The string to be copied to the clipboard on click | +| `name` | `String` | | The 'Name' of the string to be copied. Mainly used for giving feedback to the user | + +This component renders a simple button, when clicked copies the value (the `@value` attribute) to the users clipboard. A simple piece of feedback is given to the user in the form of a tooltip. When used inline an empty button is rendered. + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/copy-button-feedback.js consul-1.8.7+dfsg1/ui-v2/app/components/copy-button-feedback.js --- consul-1.7.4+dfsg1/ui-v2/app/components/copy-button-feedback.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/copy-button-feedback.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/copy-button.js consul-1.8.7+dfsg1/ui-v2/app/components/copy-button.js --- consul-1.7.4+dfsg1/ui-v2/app/components/copy-button.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/copy-button.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -import Component from '@ember/component'; -import { inject as service } from '@ember/service'; - -import WithListeners from 'consul-ui/mixins/with-listeners'; - -export default Component.extend(WithListeners, { - clipboard: service('clipboard/os'), - tagName: 'button', - classNames: ['copy-btn'], - buttonType: 'button', - disabled: false, - error: function() {}, - success: function() {}, - attributeBindings: [ - 'clipboardText:data-clipboard-text', - 'clipboardTarget:data-clipboard-target', - 'clipboardAction:data-clipboard-action', - 'buttonType:type', - 'disabled', - 'aria-label', - 'title', - ], - delegateClickEvent: true, - - didInsertElement: function() { - this._super(...arguments); - const clipboard = this.clipboard.execute( - this.delegateClickEvent ? `#${this.elementId}` : this.element - ); - ['success', 'error'].map(event => { - return this.listen(clipboard, event, () => { - if (!this.disabled) { - this[event](...arguments); - } - }); - }); - }, -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-form/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/data-form/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/data-form/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-form/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ + + + + + +{{#let (hash + data=data + change=(action "change") + isCreate=create + error=writer.error + disabled=writer.inflight + submit=(action writer.persist data) + delete=(action writer.delete data) +) as |api|}} + + {{yield api}} + {{#if hasError}} + + + {{yield api}} + + + {{/if}} + + + + {{yield api}} + + + +{{/let}} + + + + + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-form/index.js consul-1.8.7+dfsg1/ui-v2/app/components/data-form/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/data-form/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-form/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,63 @@ +import Component from '@ember/component'; +import { inject as service } from '@ember/service'; +import { set, get } from '@ember/object'; +import Slotted from 'block-slots'; + +export default Component.extend(Slotted, { + tagName: '', + dom: service('dom'), + builder: service('form'), + create: false, + ondelete: function() { + return this.onsubmit(...arguments); + }, + oncancel: function() { + return this.onsubmit(...arguments); + }, + onsubmit: function() {}, + onchange: function(e, form) { + return form.handleEvent(e); + }, + didReceiveAttrs: function() { + this._super(...arguments); + try { + this.form = this.builder.form(this.type); + } catch (e) { + // passthrough + // this lets us load view only data that doesn't have a form + } + }, + willRender: function() { + this._super(...arguments); + set(this, 'hasError', this._isRegistered('error')); + }, + willDestroyElement: function() { + this._super(...arguments); + if (get(this, 'data.isNew')) { + this.data.rollbackAttributes(); + } + }, + actions: { + setData: function(data) { + let changeset = data; + // convert to a real changeset + if (typeof this.form !== 'undefined') { + changeset = this.form.setData(data).getData(); + } + // mark as creating + // and autofill the new record if required + if (get(changeset, 'isNew')) { + set(this, 'create', true); + changeset = Object.entries(this.autofill || {}).reduce(function(prev, [key, value]) { + set(prev, key, value); + return prev; + }, changeset); + } + set(this, 'data', changeset); + return this.data; + }, + change: function(e, value, item) { + this.onchange(this.dom.normalizeEvent(e, value), this.form, this.form.getData()); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-loader/chart.xstate.js consul-1.8.7+dfsg1/ui-v2/app/components/data-loader/chart.xstate.js --- consul-1.7.4+dfsg1/ui-v2/app/components/data-loader/chart.xstate.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-loader/chart.xstate.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +export default { + id: 'data-loader', + initial: 'load', + on: { + ERROR: { + target: 'disconnected', + }, + LOAD: [ + { + target: 'idle', + cond: 'loaded', + }, + { + target: 'loading', + }, + ], + }, + states: { + load: {}, + loading: { + on: { + SUCCESS: { + target: 'idle', + }, + ERROR: { + target: 'error', + }, + }, + }, + idle: {}, + error: { + on: { + RETRY: { + target: 'load', + }, + }, + }, + disconnected: { + on: { + RETRY: { + target: 'load', + }, + }, + }, + }, +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-loader/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/data-loader/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/data-loader/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-loader/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +{{yield}} + + + + + + {{did-update (fn dispatch "LOAD") src=src}} + +{{#let (hash + data=data + error=error + dispatchError=(queue (action (mut error) value="error.errors.firstObject") (action dispatch "ERROR")) +) as |api|}} + + {{#yield-slot name="data"}} + {{yield api}} + {{else}} + {{! if we didn't specify any data}} + {{#if (not items)}} + {{! try and load the data if we aren't in an error state}} + + {{! but only if we only asked for a single load and we are in loading state}} + {{#if (and src (or (not once) (state-matches state "loading")))}} + + {{/if}} + + {{/if}} + {{/yield-slot}} + + + {{#yield-slot name="loading"}} + {{yield api}} + {{else}} + + {{/yield-slot}} + + + + {{#yield-slot name="error"}} + {{yield api}} + {{else}} + + {{/yield-slot}} + + + + + + {{#yield-slot name="disconnected" params=(block-params (component 'notification' after=(action dispatch "RESET")))}} + {{yield api}} + {{else}} + + + + {{/yield-slot}} + + + + {{yield api}} + + + + +{{/let}} + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-loader/index.js consul-1.8.7+dfsg1/ui-v2/app/components/data-loader/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/data-loader/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-loader/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,31 @@ +import Component from '@ember/component'; +import { set } from '@ember/object'; +import Slotted from 'block-slots'; + +import chart from './chart.xstate'; +export default Component.extend(Slotted, { + tagName: '', + onchange: data => data, + init: function() { + this._super(...arguments); + this.chart = chart; + }, + didReceiveAttrs: function() { + this._super(...arguments); + if (typeof this.items !== 'undefined') { + this.actions.change.apply(this, [this.items]); + } + }, + didInsertElement: function() { + this._super(...arguments); + this.dispatch('LOAD'); + }, + actions: { + isLoaded: function() { + return typeof this.items !== 'undefined' || typeof this.src === 'undefined'; + }, + change: function(data) { + set(this, 'data', this.onchange(data)); + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-sink/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/data-sink/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/data-sink/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-sink/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +{{yield (hash + open=(action 'open') + state=state +)}} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-sink/index.js consul-1.8.7+dfsg1/ui-v2/app/components/data-sink/index.js --- consul-1.7.4+dfsg1/ui-v2/app/components/data-sink/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-sink/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,109 @@ +import Component from '@ember/component'; +import { inject as service } from '@ember/service'; +import { set, get, computed } from '@ember/object'; + +import { once } from 'consul-ui/utils/dom/event-source'; + +export default Component.extend({ + tagName: '', + + service: service('data-sink/service'), + dom: service('dom'), + logger: service('logger'), + + onchange: function(e) {}, + onerror: function(e) {}, + + state: computed('instance', 'instance.{dirtyType,isSaving}', function() { + let id; + const isSaving = get(this, 'instance.isSaving'); + const dirtyType = get(this, 'instance.dirtyType'); + if (typeof isSaving === 'undefined' && typeof dirtyType === 'undefined') { + id = 'idle'; + } else { + switch (dirtyType) { + case 'created': + id = isSaving ? 'creating' : 'create'; + break; + case 'updated': + id = isSaving ? 'updating' : 'update'; + break; + case 'deleted': + case undefined: + id = isSaving ? 'removing' : 'remove'; + break; + } + id = `active.${id}`; + } + return { + matches: name => id.indexOf(name) !== -1, + }; + }), + + init: function() { + this._super(...arguments); + this._listeners = this.dom.listeners(); + }, + willDestroyElement: function() { + this._super(...arguments); + this._listeners.remove(); + }, + source: function(cb) { + const source = once(cb); + const error = err => { + set(this, 'instance', undefined); + try { + this.onerror(err); + this.logger.execute(err); + } catch (err) { + this.logger.execute(err); + } + }; + this._listeners.add(source, { + message: e => { + try { + set(this, 'instance', undefined); + this.onchange(e); + } catch (err) { + error(err); + } + }, + error: e => error(e), + }); + return source; + }, + didInsertElement: function() { + this._super(...arguments); + if (typeof this.data !== 'undefined' || typeof this.item !== 'undefined') { + this.actions.open.apply(this, [this.data, this.item]); + } + }, + persist: function(data, instance) { + if (typeof data !== 'undefined') { + set(this, 'instance', this.service.prepare(this.sink, data, instance)); + } else { + set(this, 'instance', instance); + } + this.source(() => this.service.persist(this.sink, this.instance)); + }, + remove: function(instance) { + set(this, 'instance', instance); + this.source(() => this.service.remove(this.sink, instance)); + }, + actions: { + open: function(data, item) { + if (item instanceof Event) { + item = undefined; + } + if (typeof data === 'undefined' && typeof item === 'undefined') { + throw new Error('You must specify data to save, or null to remove'); + } + // potentially allow {} and "" as 'remove' flags + if (data === null || data === '') { + this.remove(item); + } else { + this.persist(data, item); + } + }, + }, +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-sink/README.mdx consul-1.8.7+dfsg1/ui-v2/app/components/data-sink/README.mdx --- consul-1.7.4+dfsg1/ui-v2/app/components/data-sink/README.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-sink/README.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,62 @@ +## DataSink + +```handlebars + +``` + +### Arguments + +| Argument | Type | Default | Description | +| --- | --- | --- | --- | +| `sink` | `String` | | The location of the sink, this should map to a string based URI | +| `data` | `Object` | | The data to be saved to the current instance, null or an empty string means remove | +| `onchange` | `Function` | | The action to fire when the data has arrived to the sink. Emits an Event-like object with a `data` property containing the data, if the data was deleted this is `undefined`. | +| `onerror` | `Function` | | The action to fire when an error occurs. Emits ErrorEvent object with an `error` property containing the Error. | + +### Methods/Actions/api + +| Method/Action | Description | +| --- | --- | +| `open` | Manually add or remove fom the data sink | + +The component takes a `sink` or an identifier (a uri) for the location of a sink and then emits `onchange` events whenever that data has been arrived to the sink (whether persisted or removed). If an error occurs whilst listening for data changes, an `onerror` event is emitted. + +Behind the scenes in the Consul UI we map URIs back to our `ember-data` backed `Repositories` meaning we can essentially redesign the URIs used for our data to more closely fit our needs. For example we currently require that **all** HTTP API URIs begin with `/dc/nspace/` values whether they require them or not. + +`DataSink` is not just restricted to HTTP API data, and can be configured to listen for data changes using a variety of methods and sources. For example we have also configured `DataSink` to send data to `LocalStorage` using the `settings://` pseudo-protocol in the URI (See examples below). + + +### Examples + +```handlebars + + + + + {{item.Name}} +``` + +```handlebars + + {{item.Name}} +``` + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff -Nru consul-1.7.4+dfsg1/ui-v2/app/components/data-source/index.hbs consul-1.8.7+dfsg1/ui-v2/app/components/data-source/index.hbs --- consul-1.7.4+dfsg1/ui-v2/app/components/data-source/index.hbs 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/components/data-source/index.hbs 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +{{#if (eq loading "lazy")}} +{{! in order to use intersection observer we need a DOM element on the page}} +
    + diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/components/discovery-chain/index.js consul-1.8.7+dfsg1/ui-v2/app/utils/components/discovery-chain/index.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/components/discovery-chain/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/components/discovery-chain/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -const getNodesByType = function(nodes = {}, type) { - return Object.values(nodes).filter(item => item.Type === type); -}; -const findResolver = function(resolvers, service, nspace = 'default', dc) { - if (typeof resolvers[service] === 'undefined') { - resolvers[service] = { - ID: `${service}.${nspace}.${dc}`, - Name: service, - Children: [], - }; - } - return resolvers[service]; -}; -export const getAlternateServices = function(targets, a) { - let type; - const Targets = targets.map(function(b) { - // TODO: this isn't going to work past namespace for services - // with dots in the name, but by the time that becomes an issue - // we might have more data from the endpoint so we don't have to guess - // right now the backend also doesn't support dots in service names - const [aRev, bRev] = [a, b].map(item => item.split('.').reverse()); - const types = ['Datacenter', 'Namespace', 'Service', 'Subset']; - return bRev.find(function(item, i) { - const res = item !== aRev[i]; - if (res) { - type = types[i]; - } - return res; - }); - }); - return { - Type: type, - Targets: Targets, - }; -}; - -export const getSplitters = function(nodes) { - return getNodesByType(nodes, 'splitter').map(function(item) { - // Splitters need IDs adding so we can find them in the DOM later - // splitters have a service.nspace as a name - // do the reverse dance to ensure we don't mess up any - // serivice names with dots in them - const temp = item.Name.split('.'); - temp.reverse(); - temp.shift(); - temp.reverse(); - return { - ...item, - ID: `splitter:${item.Name}`, - Name: temp.join('.'), - }; - }); -}; -export const getRoutes = function(nodes, uid) { - return getNodesByType(nodes, 'router').reduce(function(prev, item) { - return prev.concat( - item.Routes.map(function(route, i) { - // Routes also have IDs added via createRoute - return createRoute(route, item.Name, uid); - }) - ); - }, []); -}; -export const getResolvers = function(dc, nspace = 'default', targets = {}, nodes = {}) { - const resolvers = {}; - // make all our resolver nodes - Object.values(nodes) - .filter(item => item.Type === 'resolver') - .forEach(function(item) { - const parts = item.Name.split('.'); - let subset; - // this will leave behind the service.name.nspace.dc even if the service name contains a dot - if (parts.length > 3) { - subset = parts.shift(); - } - parts.reverse(); - // slice off from dc.nspace onwards leaving the potentially dot containing service name - // const nodeDc = - parts.shift(); - // const nodeNspace = - parts.shift(); - // if it does contain a dot put it back to the correct order - parts.reverse(); - const service = parts.join('.'); - const resolver = findResolver(resolvers, service, nspace, dc); - let failovers; - if (typeof item.Resolver.Failover !== 'undefined') { - // figure out what type of failover this is - failovers = getAlternateServices(item.Resolver.Failover.Targets, item.Name); - } - if (subset) { - const child = { - Subset: true, - ID: item.Name, - Name: subset, - }; - if (typeof failovers !== 'undefined') { - child.Failover = failovers; - } - resolver.Children.push(child); - } else { - if (typeof failovers !== 'undefined') { - resolver.Failover = failovers; - } - } - }); - Object.values(targets).forEach(target => { - // Failovers don't have a specific node - if (typeof nodes[`resolver:${target.ID}`] !== 'undefined') { - // We use this to figure out whether this target is a redirect target - const alternate = getAlternateServices([target.ID], `service.${nspace}.${dc}`); - // as Failovers don't make it here, we know anything that has alternateServices - // must be a redirect - if (alternate.Type !== 'Service') { - // find the already created resolver - const resolver = findResolver(resolvers, target.Service, nspace, dc); - // and add the redirect as a child, redirects are always children - const child = { - Redirect: true, - ID: target.ID, - Name: target[alternate.Type], - }; - // redirects can then also have failovers - // so it this one does, figure out what type they are and add them - // to the redirect - if (typeof nodes[`resolver:${target.ID}`].Resolver.Failover !== 'undefined') { - child.Failover = getAlternateServices( - nodes[`resolver:${target.ID}`].Resolver.Failover.Targets, - target.ID - ); - } - resolver.Children.push(child); - } - } - }); - return Object.values(resolvers); -}; -export const createRoute = function(route, router, uid) { - return { - ...route, - Default: typeof route.Definition.Match === 'undefined', - ID: `route:${router}-${uid(route.Definition)}`, - }; -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/computed/purify.js consul-1.8.7+dfsg1/ui-v2/app/utils/computed/purify.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/computed/purify.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/computed/purify.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -import { get, computed } from '@ember/object'; - -/** - * Converts a conventional non-pure Ember `computed` function into a pure one - * (see https://github.com/emberjs/rfcs/blob/be351b059f08ac0fe709bc7697860d5064717a7f/text/0000-tracked-properties.md#avoiding-dependency-hell) - * - * @param {function} computed - a computed function to 'purify' (convert to a pure function) - * @param {function} filter - Optional string filter function to pre-process the names of computed properties - * @returns {function} - A pure `computed` function - */ -const _success = function(value) { - return value; -}; -const purify = function(computed, filter = args => args) { - return function() { - let args = [...arguments]; - let success = _success; - // pop the user function off the end - if (typeof args[args.length - 1] === 'function') { - success = args.pop(); - } - args = filter(args); - // this is the 'conventional' `computed` - const cb = function(name) { - return success.apply( - this, - args.map(item => { - // Right now this just takes the first part of the path so: - // `items.[]` or `items.@each.prop` etc - // gives you `items` which is 'probably' what you expect - // it won't work with something like `item.objects.[]` - // it could potentially be made to do so, but we don't need that right now at least - return get(this, item.split('.')[0]); - }) - ); - }; - // concat/push the user function back on - return computed(...args.concat([cb])); - }; -}; -export const subscribe = purify(computed); -export default purify; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/create-fingerprinter.js consul-1.8.7+dfsg1/ui-v2/app/utils/create-fingerprinter.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/create-fingerprinter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/create-fingerprinter.js 2020-12-10 21:46:52.000000000 +0000 @@ -4,16 +4,20 @@ throw new Error('Unable to create fingerprint, missing foreignKey value'); } return function(item) { - if (item[slugKey] == null || item[slugKey].length < 1) { - throw new Error('Unable to create fingerprint, missing slug'); - } + const slugKeys = slugKey.split(','); + const slugValues = slugKeys.map(function(slugKey) { + if (item[slugKey] == null || item[slugKey].length < 1) { + throw new Error('Unable to create fingerprint, missing slug'); + } + return item[slugKey]; + }); const nspaceValue = item[nspaceKey] || 'default'; return { ...item, ...{ [nspaceKey]: nspaceValue, [foreignKey]: foreignKeyValue, - [primaryKey]: hash([nspaceValue, foreignKeyValue, item[slugKey]]), + [primaryKey]: hash([nspaceValue, foreignKeyValue].concat(slugValues)), }, }; }; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/createURL.js consul-1.8.7+dfsg1/ui-v2/app/utils/createURL.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/createURL.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/createURL.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -export default function(encode) { - return function(strs, ...values) { - return strs - .map(function(item, i) { - let val = typeof values[i] === 'undefined' ? '' : values[i]; - switch (true) { - case typeof val === 'string': - val = encode(val); - break; - case Array.isArray(val): - val = val - .map(function(item) { - return `${encode(item)}`; - }, '') - .join('/'); - break; - case typeof val === 'object': - val = Object.keys(val) - .reduce(function(prev, key) { - if (val[key] === null) { - return prev.concat(`${encode(key)}`); - } else if (typeof val[key] !== 'undefined') { - return prev.concat(`${encode(key)}=${encode(val[key])}`); - } - return prev; - }, []) - .join('&'); - break; - } - return `${item}${val}`; - }) - .join('') - .trim(); - }; -} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/dom/click-first-anchor.js consul-1.8.7+dfsg1/ui-v2/app/utils/dom/click-first-anchor.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/dom/click-first-anchor.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/dom/click-first-anchor.js 2020-12-10 21:46:52.000000000 +0000 @@ -14,7 +14,11 @@ export default function(closest, click = clickEvent) { // TODO: Decide whether we should use `e` for ease // or `target`/`el` - return function(e) { + // TODO: currently, using a string stopElement to tell the func + // where to stop looking and currenlty default is 'tr' because + // it's backwards compatible. + // Long-term this func shouldn't default to 'tr' + return function(e, stopElement = 'tr') { // click on row functionality // so if you click the actual row but not a link // find the first link and fire that instead @@ -26,9 +30,7 @@ case 'button': return; } - // TODO: why should this be restricted to a tr - // closest should probably be relaced with a finder function - const $a = closest('tr', e.target).querySelector('a'); + const $a = closest(stopElement, e.target).querySelector('a'); if ($a) { click($a); } diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/blocking.js consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/blocking.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/blocking.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/blocking.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,9 +1,10 @@ import { get } from '@ember/object'; -import { Promise } from 'rsvp'; const pause = 2000; // native EventSource retry is ~3s wait -export const create5xxBackoff = function(ms = 3000, P = Promise, wait = setTimeout) { +// any specified errors here will mean that the blocking query will attempt +// a reconnection every 3s until it reconnects to Consul +export const createErrorBackoff = function(ms = 3000, P = Promise, wait = setTimeout) { // This expects an ember-data like error return function(err) { const status = get(err, 'errors.firstObject.status'); @@ -11,6 +12,11 @@ switch (true) { // Any '5xx' (not 500) errors should back off and try again case status.indexOf('5') === 0 && status.length === 3 && status !== '500': + // fallsthrough + case status === '0': + // TODO: Move this to the view layer so we can show a connection error + // and reconnection success to the user + // Any 0 aborted connections should back off and try again return new P(function(resolve) { wait(function() { resolve(err); @@ -52,9 +58,9 @@ * Wraps an EventSource with functionality to add native EventSource-like functionality * * @param {Class} [CallableEventSource] - CallableEventSource Class - * @param {Function} [backoff] - Default backoff function for all instances, defaults to create5xxBackoff + * @param {Function} [backoff] - Default backoff function for all instances, defaults to createErrorBackoff */ -export default function(EventSource, backoff = create5xxBackoff()) { +export default function(EventSource, backoff = createErrorBackoff()) { /** * An EventSource implementation to add native EventSource-like functionality with just callbacks (`cursor` and 5xx backoff) * @@ -97,10 +103,13 @@ // pick off the `cursor` from the meta and add it to configuration // along with cursor validation configuration.cursor = validateCursor(meta.cursor, configuration.cursor); + configuration.cacheControl = meta.cacheControl; } - this.currentEvent = event; - this.dispatchEvent(this.currentEvent); - const throttledResolve = throttle(configuration, this.currentEvent, this.previousEvent); + if ((configuration.cacheControl || '').indexOf('no-store') === -1) { + this.currentEvent = event; + } + this.dispatchEvent(event); + const throttledResolve = throttle(configuration, event, this.previousEvent); this.previousEvent = this.currentEvent; return throttledResolve(result); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/callable.js consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/callable.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/callable.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/callable.js 2020-12-10 21:46:52.000000000 +0000 @@ -57,6 +57,7 @@ // close after the dispatch so we can tell if it was an error whilst closed or not // but make sure its before the promise tick this.readyState = 2; // CLOSE + this.dispatchEvent({ type: 'close' }); }) .then(() => { // This only gets called when the promise chain completely finishes diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/index.js consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/index.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,5 @@ import ObjectProxy from '@ember/object/proxy'; import ArrayProxy from '@ember/array/proxy'; -import { Promise } from 'rsvp'; import createListeners from 'consul-ui/utils/dom/create-listeners'; @@ -132,3 +131,16 @@ cb(remove); }); }; +export const once = function(cb, configuration, Source = OpenableEventSource) { + return new Source(function(configuration, source) { + return cb(configuration, source) + .then(function(data) { + source.dispatchEvent({ type: 'message', data: data }); + source.close(); + }) + .catch(function(e) { + source.dispatchEvent({ type: 'error', error: e }); + source.close(); + }); + }, configuration); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/proxy.js consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/proxy.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/proxy.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/proxy.js 2020-12-10 21:46:52.000000000 +0000 @@ -4,36 +4,24 @@ export default function(ObjProxy, ArrProxy, createListeners) { return function(source, data = []) { let Proxy = ObjProxy; - // TODO: Why are these two separate? - // And when is data ever a string? - if (typeof data !== 'string' && typeof get(data, 'length') !== 'undefined') { - data = data.filter(function(item) { - return !get(item, 'isDestroyed') && !get(item, 'isDeleted') && get(item, 'isLoaded'); - }); - } + // TODO: When is data ever a string? let type = 'object'; if (typeof data !== 'string' && typeof get(data, 'length') !== 'undefined') { Proxy = ArrProxy; type = 'array'; + data = data.filter(function(item) { + return !get(item, 'isDestroyed') && !get(item, 'isDeleted') && get(item, 'isLoaded'); + }); } if (typeof proxies[type] === 'undefined') { proxies[type] = Proxy.extend({ - closed: false, - error: null, init: function() { this.listeners = createListeners(); this.listeners.add(this._source, 'message', e => set(this, 'content', e.data)); - this.listeners.add(this._source, 'open', () => set(this, 'closed', false)); - this.listeners.add(this._source, 'close', () => set(this, 'closed', true)); - this.listeners.add(this._source, 'error', e => set(this, 'error', e.error)); this._super(...arguments); }, addEventListener: function(type, handler) { - // Force use of computed for messages - // Temporarily disable this restriction - // if (type !== 'message') { this.listeners.add(this._source, type, handler); - // } }, getCurrentEvent: function() { return this._source.getCurrentEvent(...arguments); @@ -51,6 +39,8 @@ return this._source.open(...arguments); }, willDestroy: function() { + this._super(...arguments); + this.close(); this.listeners.remove(); }, }); diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/storage.js consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/storage.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/dom/event-source/storage.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/dom/event-source/storage.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,20 +1,27 @@ export default function(EventTarget, P = Promise) { const handler = function(e) { - if (e.key === this.configuration.key) { - P.resolve(this.getCurrentEvent()).then(event => { - this.configuration.cursor++; - this.dispatchEvent(event); - }); + // e is undefined on the opening call + if (typeof e === 'undefined' || e.key === this.configuration.key) { + if (this.readyState === 1) { + const res = this.source(this.configuration); + P.resolve(res).then(data => { + this.configuration.cursor++; + this._currentEvent = { type: 'message', data: data }; + this.dispatchEvent({ type: 'message', data: data }); + }); + } } }; return class extends EventTarget { constructor(cb, configuration) { super(...arguments); + this.readyState = 2; + this.target = configuration.target || window; + this.name = 'storage'; this.source = cb; this.handler = handler.bind(this); this.configuration = configuration; this.configuration.cursor = 1; - this.dispatcher = configuration.dispatcher; this.open(); } dispatchEvent() { @@ -23,18 +30,19 @@ } } close() { - this.dispatcher.removeEventListener('storage', this.handler); + this.target.removeEventListener(this.name, this.handler); this.readyState = 2; } - reopen() { - this.dispatcher.addEventListener('storage', this.handler); - this.readyState = 1; - } getCurrentEvent() { - return { - type: 'message', - data: this.source(this.configuration), - }; + return this._currentEvent; + } + open() { + const state = this.readyState; + this.readyState = 1; + if (state !== 1) { + this.target.addEventListener(this.name, this.handler); + this.handler(); + } } }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/get-environment.js consul-1.8.7+dfsg1/ui-v2/app/utils/get-environment.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/get-environment.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/get-environment.js 2020-12-10 21:46:52.000000000 +0000 @@ -21,15 +21,23 @@ } }; const scripts = doc.getElementsByTagName('script'); + // we use the currently executing script as a reference + // to figure out where we are for other things such as + // base url, api url etc const currentSrc = scripts[scripts.length - 1].src; let resource; - - // TODO: Look to see if we can pull in HTTP headers here - // so we can let things be controlled via HTTP proxies, for example - // turning off blocking queries if its a busy cluster etc + // TODO: Potentially use ui_config {}, for example + // turning off blocking queries if its a busy cluster + // forcing/providing amount of possible HTTP connections + // re-setting the base url for the API etc const operator = function(str, env) { let protocol; switch (str) { + case 'CONSUL_BASE_UI_URL': + return currentSrc + .split('/') + .slice(0, -2) + .join('/'); case 'CONSUL_HTTP_PROTOCOL': if (typeof resource === 'undefined') { // resource needs to be retrieved lazily as entries aren't guaranteed @@ -74,6 +82,9 @@ case 'CONSUL_NSPACES_ENABLE': prev['CONSUL_NSPACES_ENABLED'] = !!JSON.parse(String(value).toLowerCase()); break; + case 'CONSUL_SSO_ENABLE': + prev['CONSUL_SSO_ENABLED'] = !!JSON.parse(String(value).toLowerCase()); + break; default: prev[key] = value; } @@ -99,6 +110,7 @@ // these are strings return user(str) || ui(str); + case 'CONSUL_BASE_UI_URL': case 'CONSUL_HTTP_PROTOCOL': case 'CONSUL_HTTP_MAX_CONNECTIONS': // We allow the operator to set these ones via various methods diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/get-object-pool.js consul-1.8.7+dfsg1/ui-v2/app/utils/get-object-pool.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/get-object-pool.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/get-object-pool.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -export default function(dispose = function() {}, max, objects = []) { - return { - acquire: function(obj, id) { - // TODO: what should happen if an ID already exists - // should we ignore and release both? Or prevent from acquiring? Or generate a unique ID? - // what happens if we can't get an id via getId or .id? - // could potentially use Set - objects.push(obj); - if (typeof max !== 'undefined') { - if (objects.length > max) { - return dispose(objects.shift()); - } - } - return id; - }, - // release releases the obj from the pool but **doesn't** dispose it - release: function(obj) { - let index = -1; - let id; - if (typeof obj === 'string') { - id = obj; - } else { - id = obj.id; - } - objects.forEach(function(item, i) { - let itemId; - if (typeof item.getId === 'function') { - itemId = item.getId(); - } else { - itemId = item.id; - } - if (itemId === id) { - index = i; - } - }); - if (index !== -1) { - return objects.splice(index, 1)[0]; - } - }, - purge: function() { - let obj; - const objs = []; - while ((obj = objects.shift())) { - objs.push(dispose(obj)); - } - return objs; - }, - dispose: function(id) { - return dispose(this.release(id)); - }, - }; -} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/hasStatus.js consul-1.8.7+dfsg1/ui-v2/app/utils/hasStatus.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/hasStatus.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/hasStatus.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -import { get } from '@ember/object'; -export default function(checks, status) { - let num = 0; - switch (status) { - case 'passing': - case 'critical': - case 'warning': - num = get(checks.filterBy('Status', status), 'length'); - break; - case '': // all - num = 1; - break; - } - return num > 0; -} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/consul.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/consul.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/consul.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/consul.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,8 @@ // TODO: Need to make all these headers capital case export const HEADERS_NAMESPACE = 'X-Consul-Namespace'; -export const HEADERS_DATACENTER = 'x-consul-datacenter'; -export const HEADERS_INDEX = 'x-consul-index'; -export const HEADERS_DIGEST = 'x-consul-contenthash'; +export const HEADERS_DATACENTER = 'X-Consul-Datacenter'; +export const HEADERS_INDEX = 'X-Consul-Index'; +export const HEADERS_TOKEN = 'X-Consul-Token'; +export const HEADERS_DIGEST = 'X-Consul-ContentHash'; // export const HEADERS_SYMBOL = '__consul_ui_http_headers__'; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/create-headers.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/create-headers.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/create-headers.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/create-headers.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,11 @@ +export default function() { + return function(lines) { + return lines.reduce(function(prev, item) { + const temp = item.split(':'); + if (temp.length > 1) { + prev[temp[0].trim()] = temp[1].trim(); + } + return prev; + }, {}); + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/create-query-params.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/create-query-params.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/create-query-params.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/create-query-params.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +export default function(encode) { + return function stringify(obj, parent) { + return Object.entries(obj) + .reduce(function(prev, [key, value], i) { + // if the value is undefined do nothing + if (typeof value === 'undefined') { + return prev; + } + let prop = encode(key); + // if we have a parent, prefix the property with that + if (typeof parent !== 'undefined') { + prop = `${parent}[${prop}]`; + } + // if the value is null just print the prop + if (value === null) { + return prev.concat(prop); + } + // anything nested, recur + if (typeof value === 'object') { + return prev.concat(stringify(value, prop)); + } + // anything else print prop=value + return prev.concat(`${prop}=${encode(value)}`); + }, []) + .join('&'); + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/create-url.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/create-url.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/create-url.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/create-url.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,72 @@ +// const METHOD_PARSING = 0; +const PATH_PARSING = 1; +const QUERY_PARSING = 2; +const HEADER_PARSING = 3; +const BODY_PARSING = 4; +export default function(encode, queryParams) { + return function(strs, ...values) { + // TODO: Potentially url should check if any of the params + // passed to it are undefined (null is fine). We could then get rid of the + // multitude of checks we do throughout the adapters + // right now create-url converts undefined to '' so we need to check thats not needed + // anywhere + let state = PATH_PARSING; + return strs + .map(function(item, i, arr) { + if (i === 0) { + item = item.trimStart(); + } + // if(item.indexOf(' ') !== -1 && state === METHOD_PARSING) { + // state = PATH_PARSING; + // } + if (item.indexOf('?') !== -1 && state === PATH_PARSING) { + state = QUERY_PARSING; + } + if (item.indexOf('\n\n') !== -1) { + state = BODY_PARSING; + } + if (item.indexOf('\n') !== -1 && state !== BODY_PARSING) { + state = HEADER_PARSING; + } + let val = typeof values[i] !== 'undefined' ? values[i] : ''; + switch (state) { + case PATH_PARSING: + switch (true) { + // encode strings + case typeof val === 'string': + val = encode(val); + break; + // split encode and join arrays by `/` + case Array.isArray(val): + val = val + .map(function(item) { + return `${encode(item)}`; + }, '') + .join('/'); + break; + } + break; + case QUERY_PARSING: + switch (true) { + case typeof val === 'string': + val = encode(val); + break; + // objects offload to queryParams for encoding + case typeof val === 'object': + val = queryParams(val); + break; + } + break; + case BODY_PARSING: + // ignore body until we parse it here + return item.split('\n\n')[0]; + // case METHOD_PARSING: + case HEADER_PARSING: + // passthrough/ignore method and headers until we parse them here + } + return `${item}${val}`; + }) + .join('') + .trim(); + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/error.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/error.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/error.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/error.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +export default class extends Error { + constructor(statusCode, message) { + super(message); + this.statusCode = statusCode; + } +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/headers.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/headers.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/headers.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/headers.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +export const CACHE_CONTROL = 'Cache-Control'; +export const CONTENT_TYPE = 'Content-Type'; diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/request.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/request.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/request.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/request.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,13 +1,13 @@ -export default class { - constructor(method, url, headers, xhr) { - this._xhr = xhr; +import EventTarget from 'consul-ui/utils/dom/event-target/rsvp'; +export default class extends EventTarget { + constructor(method, url, headers) { + super(); this._url = url; this._method = method; this._headers = headers; this._headers = { ...headers, 'content-type': 'application/json', - 'x-request-id': `${this._method} ${this._url}?${JSON.stringify(headers.body)}`, }; if (typeof this._headers.body.index !== 'undefined') { // this should probably be in a response @@ -17,13 +17,43 @@ headers() { return this._headers; } - getId() { - return this._headers['x-request-id']; + open(xhr) { + this._xhr = xhr; + this.dispatchEvent({ type: 'open' }); + } + respond(data) { + this.dispatchEvent({ type: 'message', data: data }); } - abort() { - this._xhr.abort(); + error(error) { + // if the xhr was aborted (status = 0) + // and this requests was aborted with a different status + // switch the status + if (error.statusCode === 0 && typeof this.statusCode !== 'undefined') { + error.statusCode = this.statusCode; + } + this.dispatchEvent({ type: 'error', error: error }); + } + close() { + this.dispatchEvent({ type: 'close' }); } connection() { return this._xhr; } + abort(statusCode = 0) { + if (this.headers()['content-type'] === 'text/event-stream') { + this.statusCode = statusCode; + const xhr = this.connection(); + // unsent and opened get aborted + // headers and loading means wait for it + // to finish for the moment + if (xhr.readyState) { + switch (xhr.readyState) { + case 0: + case 1: + xhr.abort(); + break; + } + } + } + } } diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/http/xhr.js consul-1.8.7+dfsg1/ui-v2/app/utils/http/xhr.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/http/xhr.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/http/xhr.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +export default function(parseHeaders, XHR) { + return function(options) { + const xhr = new (XHR || XMLHttpRequest)(); + xhr.onreadystatechange = function() { + if (this.readyState === 4) { + const headers = parseHeaders(this.getAllResponseHeaders().split('\n')); + if (this.status >= 200 && this.status < 400) { + const response = options.converters['text json'](this.response); + options.success(headers, response, this.status, this.statusText); + } else { + options.error(headers, this.responseText, this.status, this.statusText, this.error); + } + options.complete(this.status); + } + }; + xhr.open(options.method, options.url, true); + if (typeof options.headers === 'undefined') { + options.headers = {}; + } + const headers = { + ...options.headers, + 'X-Requested-With': 'XMLHttpRequest', + }; + Object.entries(headers).forEach(([key, value]) => xhr.setRequestHeader(key, value)); + options.beforeSend(xhr); + xhr.send(options.body); + return xhr; + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/maybe-call.js consul-1.8.7+dfsg1/ui-v2/app/utils/maybe-call.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/maybe-call.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/maybe-call.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,17 @@ +/** + * Promise aware conditional function call + * + * @param {function} cb - The function to possibily call + * @param {function} [what] - A function returning a boolean resolving promise + * @returns {function} - function when called returns a Promise that resolves the argument it is called with + */ +export default function(cb, what) { + return function(res) { + return what.then(function(bool) { + if (bool) { + cb(); + } + return res; + }); + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/model/writable.js consul-1.8.7+dfsg1/ui-v2/app/utils/model/writable.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/model/writable.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/model/writable.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -export default function(model, props, attr = {}) { - model.eachAttribute(function(item) { - attr[item] = { - ...attr[item], - ...{ - serialize: props.indexOf(item) !== -1, - }, - }; - }); - return attr; -} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/right-trim.js consul-1.8.7+dfsg1/ui-v2/app/utils/right-trim.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/right-trim.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/right-trim.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,7 @@ export default function rightTrim(str = '', search = '') { const pos = str.length - search.length; - return str.lastIndexOf(search) === pos ? str.substr(0, pos) : str; + if (pos >= 0) { + return str.lastIndexOf(search) === pos ? str.substr(0, pos) : str; + } + return str; } diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/routing/redirect-to.js consul-1.8.7+dfsg1/ui-v2/app/utils/routing/redirect-to.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/routing/redirect-to.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/routing/redirect-to.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +export default function(to, route) { + return function(model, transition) { + const parent = this.routeName + .split('.') + .slice(0, -1) + .join('.'); + this.replaceWith(`${parent}.${to}`, model); + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/search/filterable.js consul-1.8.7+dfsg1/ui-v2/app/utils/search/filterable.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/search/filterable.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/search/filterable.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,12 @@ -import RSVP, { Promise } from 'rsvp'; +import RSVP from 'rsvp'; export default function(EventTarget = RSVP.EventTarget, P = Promise) { // TODO: Class-ify return function(filter) { return EventTarget.mixin({ value: '', + _data: [], add: function(data) { - this.data = data; + this.data = this._data = data; return this; }, find: function(terms = []) { @@ -21,7 +22,7 @@ return prev.filter(item => { return filter(item, { s: term }); }); - }, this.data) + }, this._data) ); }, search: function(terms = []) { @@ -30,6 +31,7 @@ // flow now for later on this.find(Array.isArray(terms) ? terms : [terms]).then(data => { // TODO: For the moment, lets just fake a target + this.data = data; this.trigger('change', { target: { value: this.value.join('\n'), diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/storage/local-storage.js consul-1.8.7+dfsg1/ui-v2/app/utils/storage/local-storage.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/storage/local-storage.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/storage/local-storage.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,10 @@ scheme = '', storage = window.localStorage, encode = JSON.stringify, - decode = JSON.parse + decode = JSON.parse, + dispatch = function(key) { + window.dispatchEvent(new StorageEvent('storage', { key: key })); + } ) { const prefix = `${scheme}:`; return { @@ -27,10 +30,14 @@ } catch (e) { value = '""'; } - return storage.setItem(`${prefix}${path}`, value); + const res = storage.setItem(`${prefix}${path}`, value); + dispatch(`${prefix}${path}`); + return res; }, removeValue: function(path) { - return storage.removeItem(`${prefix}${path}`); + const res = storage.removeItem(`${prefix}${path}`); + dispatch(`${prefix}${path}`); + return res; }, all: function() { return Object.keys(storage).reduce((prev, item, i, arr) => { diff -Nru consul-1.7.4+dfsg1/ui-v2/app/utils/sumOfUnhealthy.js consul-1.8.7+dfsg1/ui-v2/app/utils/sumOfUnhealthy.js --- consul-1.7.4+dfsg1/ui-v2/app/utils/sumOfUnhealthy.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/utils/sumOfUnhealthy.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -import { get } from '@ember/object'; -export default function(items) { - return items.reduce(function(sum, check) { - const status = get(check, 'Status'); - return status === 'critical' || status === 'warning' ? sum + 1 : sum; - }, 0); -} diff -Nru consul-1.7.4+dfsg1/ui-v2/app/validations/intention.js consul-1.8.7+dfsg1/ui-v2/app/validations/intention.js --- consul-1.7.4+dfsg1/ui-v2/app/validations/intention.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/app/validations/intention.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,15 +1,6 @@ import { validatePresence, validateLength } from 'ember-changeset-validations/validators'; -import config from 'consul-ui/config/environment'; -export default Object.assign( - { - SourceName: [validatePresence(true), validateLength({ min: 1 })], - DestinationName: [validatePresence(true), validateLength({ min: 1 })], - Action: validatePresence(true), - }, - config.CONSUL_NAMESPACES_ENABLED - ? { - SourceNS: [validatePresence(true), validateLength({ min: 1 })], - DestinationNS: [validatePresence(true), validateLength({ min: 1 })], - } - : {} -); +export default { + SourceName: [validatePresence(true), validateLength({ min: 1 })], + DestinationName: [validatePresence(true), validateLength({ min: 1 })], + Action: validatePresence(true), +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/adapter/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/adapter/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/adapter/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/adapter/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,6 @@ 'use strict'; const path = require('path'); -const isModuleUnificationProject = require('@ember-data/-build-infra/src/utilities/module-unification').isModuleUnificationProject; module.exports = { description: 'Generates a Consul HTTP ember-data adapter', @@ -11,19 +10,6 @@ root: __dirname, fileMapTokens(options) { - if (isModuleUnificationProject(this.project)) { - return { - __root__() { - return 'src'; - }, - __path__(options) { - return path.join('data', 'models', options.dasherizedModuleName); - }, - __name__() { - return 'adapter'; - }, - }; - } }, locals(options) { // Return custom template variables here. diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/adapter-test/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/adapter-test/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/adapter-test/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/adapter-test/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,10 @@ -/*eslint node/no-extraneous-require: "off"*/ -'use strict'; - -const useTestFrameworkDetector = require('@ember-data/-build-infra/src/utilities/test-framework-detector'); const path = require('path'); +const testInfo = require('ember-cli-test-info'); +const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); + module.exports = useTestFrameworkDetector({ - description: 'Generates a Consul HTTP ember-data adapter unit and integration tests', + description: 'Generates Consul HTTP ember-data adapter unit and integration tests', root: __dirname, @@ -16,7 +15,7 @@ }, __path__() { return ''; - } + }, }; }, diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/index.scss consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/index.scss --- consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/index.scss 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/index.scss 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +@import './skin'; +@import './layout'; diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/layout.scss consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/layout.scss --- consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/layout.scss 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/layout.scss 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +%<%= dasherizedModuleName %> { + +} diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/skin.scss consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/skin.scss --- consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/skin.scss 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__/skin.scss 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +%<%= dasherizedModuleName %> { + +} + diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__.scss consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__.scss --- consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__.scss 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/files/__root__/__path__/__name__.scss 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +@import './<%= dasherizedModuleName %>/index'; +.<%= dasherizedModuleName %> { + @extend %<%= dasherizedModuleName %>; +} + diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/css-component/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/css-component/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +'use strict'; + +const path = require('path'); +module.exports = { + description: 'Generates a CSS component', + + availableOptions: [], + + root: __dirname, + + fileMapTokens(options) { + return { + __path__() { + return path.join('styles', 'components'); + } + }; + }, + locals(options) { + // Return custom template variables here. + return { + }; + } + + // afterInstall(options) { + // // Perform extra work here. + // } +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/model/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/model/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/model/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/model/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,6 @@ 'use strict'; const path = require('path'); -const isModuleUnificationProject = require('@ember-data/-build-infra/src/utilities/module-unification').isModuleUnificationProject; module.exports = { description: 'Generates a Consul HTTP ember-data model', @@ -10,21 +9,6 @@ root: __dirname, - fileMapTokens(options) { - if (isModuleUnificationProject(this.project)) { - return { - __root__() { - return 'src'; - }, - __path__(options) { - return path.join('data', 'models', options.dasherizedModuleName); - }, - __name__() { - return 'model'; - }, - }; - } - }, locals(options) { // Return custom template variables here. return { diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/model-test/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/model-test/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/model-test/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/model-test/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,9 @@ -/*eslint node/no-extraneous-require: "off"*/ -'use strict'; - -const useTestFrameworkDetector = require('@ember-data/-build-infra/src/utilities/test-framework-detector'); const path = require('path'); +const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); + module.exports = useTestFrameworkDetector({ - description: 'Generates a Consul ember-data model unit tests', + description: 'Generates a Consul ember-data model unit test.', root: __dirname, @@ -16,7 +14,7 @@ }, __path__() { return ''; - } + }, }; }, diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/repository-test/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/repository-test/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/repository-test/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/repository-test/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,9 @@ -/*eslint node/no-extraneous-require: "off"*/ -'use strict'; - -const useTestFrameworkDetector = require('@ember-data/-build-infra/src/utilities/test-framework-detector'); const path = require('path'); +const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); + module.exports = useTestFrameworkDetector({ - description: 'Generates a Consul HTTP ember-data serializer unit and integration tests', + description: 'Generates Consul repository unit and integration tests', root: __dirname, @@ -16,7 +14,7 @@ }, __path__() { return ''; - } + }, }; }, diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/integration/services/repository/__test__.js consul-1.8.7+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/integration/services/repository/__test__.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/integration/services/repository/__test__.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/integration/services/repository/__test__.js 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,7 @@ const id = 'slug'; const now = new Date().getTime(); test('findByDatacenter returns the correct data for list endpoint', function(assert) { - get(this.subject(), 'store').serializerFor('<%= dasherizedModuleName %>').timestamp = function() { + this.subject().store.serializerFor('<%= dasherizedModuleName %>').timestamp = function() { return now; }; return repo( diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/unit/services/repository/__test__.js consul-1.8.7+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/unit/services/repository/__test__.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/unit/services/repository/__test__.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/repository-test/qunit-files/__root__/__path__/unit/services/repository/__test__.js 2020-12-10 21:46:52.000000000 +0000 @@ -6,7 +6,7 @@ // Replace this with your real tests. test('it exists', function(assert) { - let repo = this.owner.lookup('service:repository/<%= dasherizedModuleName %>'); + const repo = this.owner.lookup('service:repository/<%= dasherizedModuleName %>'); assert.ok(repo); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/serializer/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/serializer/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/serializer/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/serializer/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,6 @@ 'use strict'; const path = require('path'); -const isModuleUnificationProject = require('@ember-data/-build-infra/src/utilities/module-unification').isModuleUnificationProject; module.exports = { description: 'Generates a Consul HTTP ember-data serializer', @@ -11,19 +10,6 @@ root: __dirname, fileMapTokens(options) { - if (isModuleUnificationProject(this.project)) { - return { - __root__() { - return 'src'; - }, - __path__(options) { - return path.join('data', 'models', options.dasherizedModuleName); - }, - __name__() { - return 'serializer'; - }, - }; - } }, locals(options) { // Return custom template variables here. diff -Nru consul-1.7.4+dfsg1/ui-v2/blueprints/serializer-test/index.js consul-1.8.7+dfsg1/ui-v2/blueprints/serializer-test/index.js --- consul-1.7.4+dfsg1/ui-v2/blueprints/serializer-test/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/blueprints/serializer-test/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,9 @@ -/*eslint node/no-extraneous-require: "off"*/ -'use strict'; - -const useTestFrameworkDetector = require('@ember-data/-build-infra/src/utilities/test-framework-detector'); const path = require('path'); +const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); + module.exports = useTestFrameworkDetector({ - description: 'Generates a Consul HTTP ember-data serializer unit and integration tests', + description: 'Generates Consul HTTP ember-data serializer unit and integration tests.', root: __dirname, @@ -16,7 +14,7 @@ }, __path__() { return ''; - } + }, }; }, diff -Nru consul-1.7.4+dfsg1/ui-v2/config/environment.js consul-1.8.7+dfsg1/ui-v2/config/environment.js --- consul-1.7.4+dfsg1/ui-v2/config/environment.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/config/environment.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,12 +1,16 @@ 'use strict'; const fs = require('fs'); const path = require('path'); -module.exports = function(environment, $ = process.env) { +module.exports = function (environment, $ = process.env) { let ENV = { modulePrefix: 'consul-ui', environment, rootURL: '/ui/', locationType: 'auto', + // We use a complete dynamically (from Consul) configured + // torii provider. We provide this object here to + // prevent ember from giving a log message when starting ember up + torii: {}, EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build @@ -30,7 +34,7 @@ CONSUL_UI_DISABLE_REALTIME: typeof process.env.CONSUL_UI_DISABLE_REALTIME !== 'undefined', CONSUL_UI_DISABLE_ANCHOR_SELECTION: typeof process.env.CONSUL_UI_DISABLE_ANCHOR_SELECTION !== 'undefined', - CONSUL_COPYRIGHT_YEAR: (function(val) { + CONSUL_COPYRIGHT_YEAR: (function (val) { if (val) { return val; } @@ -41,7 +45,7 @@ .split('-') .shift(); })(process.env.CONSUL_COPYRIGHT_YEAR), - CONSUL_GIT_SHA: (function(val) { + CONSUL_GIT_SHA: (function (val) { if (val) { return val; } @@ -51,7 +55,7 @@ .toString() .trim(); })(process.env.CONSUL_GIT_SHA), - CONSUL_VERSION: (function(val) { + CONSUL_VERSION: (function (val) { if (val) { return val; } @@ -60,7 +64,7 @@ const contents = fs.readFileSync(version_go).toString(); return contents .split('\n') - .find(function(item, i, arr) { + .find(function (item, i, arr) { return item.indexOf('Version =') !== -1; }) .trim() @@ -69,13 +73,16 @@ CONSUL_BINARY_TYPE: process.env.CONSUL_BINARY_TYPE ? process.env.CONSUL_BINARY_TYPE : 'oss', CONSUL_ACLS_ENABLED: false, CONSUL_NSPACES_ENABLED: false, + CONSUL_SSO_ENABLED: false, CONSUL_HOME_URL: 'https://www.consul.io', + CONSUL_REPO_ISSUES_URL: 'https://github.com/hashicorp/consul/issues/new/choose', CONSUL_DOCS_URL: 'https://www.consul.io/docs', - CONSUL_DOCS_LEARN_URL: 'https://learn.hashicorp.com/consul', + CONSUL_DOCS_LEARN_URL: 'https://learn.hashicorp.com', CONSUL_DOCS_API_URL: 'https://www.consul.io/api', CONSUL_COPYRIGHT_URL: 'https://www.hashicorp.com', }); + const isTestLike = ['staging', 'test'].indexOf(environment) > -1; const isDevLike = ['development', 'staging', 'test'].indexOf(environment) > -1; const isProdLike = ['production', 'staging'].indexOf(environment) > -1; switch (true) { @@ -87,10 +94,16 @@ typeof $['CONSUL_NSPACES_ENABLED'] !== 'undefined' ? !!JSON.parse(String($['CONSUL_NSPACES_ENABLED']).toLowerCase()) : true, + CONSUL_SSO_ENABLED: + typeof $['CONSUL_SSO_ENABLED'] !== 'undefined' + ? !!JSON.parse(String($['CONSUL_SSO_ENABLED']).toLowerCase()) + : false, '@hashicorp/ember-cli-api-double': { 'auto-import': false, enabled: true, - endpoints: ['/node_modules/@hashicorp/consul-api-double/v1'], + endpoints: { + '/v1': '/node_modules/@hashicorp/consul-api-double/v1', + }, }, APP: Object.assign({}, ENV.APP, { LOG_ACTIVE_GENERATION: false, @@ -104,22 +117,28 @@ case environment === 'staging': ENV = Object.assign({}, ENV, { CONSUL_NSPACES_ENABLED: true, + CONSUL_SSO_ENABLED: true, '@hashicorp/ember-cli-api-double': { enabled: true, - endpoints: ['/node_modules/@hashicorp/consul-api-double/v1'], + endpoints: { + '/v1': '/node_modules/@hashicorp/consul-api-double/v1', + }, }, }); break; case environment === 'production': + // Make sure all templated variables check for existence first + // before outputting them, this means they all should be conditionals ENV = Object.assign({}, ENV, { - CONSUL_ACLS_ENABLED: '{{.ACLsEnabled}}', + CONSUL_ACLS_ENABLED: '{{ if .ACLsEnabled }}{{.ACLsEnabled}}{{ else }}false{{ end }}', + CONSUL_SSO_ENABLED: '{{ if .SSOEnabled }}{{.SSOEnabled}}{{ else }}false{{ end }}', CONSUL_NSPACES_ENABLED: '{{ if .NamespacesEnabled }}{{.NamespacesEnabled}}{{ else }}false{{ end }}', }); break; } switch (true) { - case isDevLike: + case isTestLike: ENV = Object.assign({}, ENV, { CONSUL_ACLS_ENABLED: true, // 'APP': Object.assign({}, ENV.APP, { diff -Nru consul-1.7.4+dfsg1/ui-v2/config/optional-features.json consul-1.8.7+dfsg1/ui-v2/config/optional-features.json --- consul-1.7.4+dfsg1/ui-v2/config/optional-features.json 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/config/optional-features.json 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,6 @@ { - "jquery-integration": true + "application-template-wrapper": false, + "default-async-observers": true, + "jquery-integration": false, + "template-only-glimmer-components": true } diff -Nru consul-1.7.4+dfsg1/ui-v2/.editorconfig consul-1.8.7+dfsg1/ui-v2/.editorconfig --- consul-1.7.4+dfsg1/ui-v2/.editorconfig 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.editorconfig 2020-12-10 21:46:52.000000000 +0000 @@ -4,7 +4,6 @@ root = true - [*] end_of_line = lf charset = utf-8 diff -Nru consul-1.7.4+dfsg1/ui-v2/.ember-cli consul-1.8.7+dfsg1/ui-v2/.ember-cli --- consul-1.7.4+dfsg1/ui-v2/.ember-cli 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.ember-cli 2020-12-10 21:46:52.000000000 +0000 @@ -5,5 +5,14 @@ Setting `disableAnalytics` to true will prevent any data from being sent. */ - "disableAnalytics": false + "disableAnalytics": false, + /** + We use a nested in /components folder structure: + /components/component-name/index.{hbs,js} + */ + "componentStructure": "nested", + /** + We currently use classic components + */ + "componentClass": "@ember/component" } diff -Nru consul-1.7.4+dfsg1/ui-v2/ember-cli-build.js consul-1.8.7+dfsg1/ui-v2/ember-cli-build.js --- consul-1.7.4+dfsg1/ui-v2/ember-cli-build.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/ember-cli-build.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,65 +1,76 @@ 'use strict'; - +const Funnel = require('broccoli-funnel'); const EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = function(defaults) { const env = EmberApp.env(); const prodlike = ['production', 'staging']; const isProd = env === 'production'; - // if we ever need a 'prodlike' staging environment with staging settings - // const isProdLike = prodlike.indexOf(env) > -1; + const isProdLike = prodlike.indexOf(env) > -1; const sourcemaps = !isProd; - let app = new EmberApp( - Object.assign( - {}, - defaults, + let trees = {}; + if(isProdLike) { + // exclude any component/pageobject.js files from production-like environments + trees.app = new Funnel( + 'app', { - productionEnvironments: prodlike + exclude: ['components/**/pageobject.js'] } - ), { - 'ember-cli-babel': { - includePolyfill: true - }, - 'ember-cli-string-helpers': { - only: ['capitalize', 'lowercase', 'truncate'] - }, - 'ember-cli-math-helpers': { - only: ['div'] - }, - 'babel': { - plugins: [ - '@babel/plugin-proposal-object-rest-spread' - ] - }, - 'codemirror': { - keyMaps: ['sublime'], - addonFiles: [ - 'lint/lint.css', - 'lint/lint.js', - 'lint/json-lint.js', - 'lint/yaml-lint.js', - 'mode/loadmode.js' - ] - }, - 'ember-cli-uglify': { - uglify: { - compress: { - keep_fargs: false, + ); + } + let app = new EmberApp( + Object.assign({}, defaults, { + productionEnvironments: prodlike, + }), + { + trees: trees, + 'ember-cli-babel': { + includePolyfill: true, + }, + 'ember-cli-string-helpers': { + only: [ + 'capitalize', + 'lowercase', + 'truncate', + 'uppercase', + 'humanize', + 'titleize' + ], + }, + 'ember-cli-math-helpers': { + only: ['div'], + }, + babel: { + plugins: ['@babel/plugin-proposal-object-rest-spread'], + sourceMaps: sourcemaps ? 'inline' : false, + }, + codemirror: { + keyMaps: ['sublime'], + addonFiles: [ + 'lint/lint.css', + 'lint/lint.js', + 'lint/json-lint.js', + 'lint/yaml-lint.js', + 'mode/loadmode.js', + ], + }, + 'ember-cli-uglify': { + uglify: { + compress: { + keep_fargs: false, + }, }, }, - }, - 'sassOptions': { - implementation: require('node-sass'), - sourceMapEmbed: sourcemaps, - }, - 'autoprefixer': { - sourcemap: sourcemaps, - grid: true, - browsers: [ - "defaults", - "ie 11" - ] - }, - }); + sassOptions: { + implementation: require('dart-sass'), + sourceMapEmbed: sourcemaps, + }, + autoprefixer: { + sourcemap: sourcemaps, + grid: true, + browsers: ['defaults', 'ie 11'], + }, + } + ); // Use `app.import` to add additional libraries to the generated // output files. // @@ -74,21 +85,33 @@ // along with the exports of each module as its value. // TextEncoder/Decoder polyfill. See assets/index.html - app.import('node_modules/text-encoding/lib/encoding-indexes.js', {outputFile: 'assets/encoding-indexes.js'}); + app.import('node_modules/text-encoding/lib/encoding-indexes.js', { + outputFile: 'assets/encoding-indexes.js', + }); // CSS.escape polyfill - app.import('node_modules/css.escape/css.escape.js', {outputFile: 'assets/css.escape.js'}); + app.import('node_modules/css.escape/css.escape.js', { outputFile: 'assets/css.escape.js' }); // JSON linting support. Possibly dynamically loaded via CodeMirror linting. See components/code-editor.js - app.import('node_modules/jsonlint/lib/jsonlint.js', {outputFile: 'assets/codemirror/mode/javascript/javascript.js'}); - app.import('node_modules/codemirror/mode/javascript/javascript.js', {outputFile: 'assets/codemirror/mode/javascript/javascript.js'}); + app.import('node_modules/jsonlint/lib/jsonlint.js', { + outputFile: 'assets/codemirror/mode/javascript/javascript.js', + }); + app.import('node_modules/codemirror/mode/javascript/javascript.js', { + outputFile: 'assets/codemirror/mode/javascript/javascript.js', + }); // HCL/Ruby linting support. Possibly dynamically loaded via CodeMirror linting. See components/code-editor.js - app.import('node_modules/codemirror/mode/ruby/ruby.js', {outputFile: 'assets/codemirror/mode/ruby/ruby.js'}); + app.import('node_modules/codemirror/mode/ruby/ruby.js', { + outputFile: 'assets/codemirror/mode/ruby/ruby.js', + }); // YAML linting support. Possibly dynamically loaded via CodeMirror linting. See components/code-editor.js - app.import('node_modules/js-yaml/dist/js-yaml.js', {outputFile: 'assets/codemirror/mode/yaml/yaml.js'}); - app.import('node_modules/codemirror/mode/yaml/yaml.js', {outputFile: 'assets/codemirror/mode/yaml/yaml.js'}); + app.import('node_modules/js-yaml/dist/js-yaml.js', { + outputFile: 'assets/codemirror/mode/yaml/yaml.js', + }); + app.import('node_modules/codemirror/mode/yaml/yaml.js', { + outputFile: 'assets/codemirror/mode/yaml/yaml.js', + }); let tree = app.toTree(); return tree; }; diff -Nru consul-1.7.4+dfsg1/ui-v2/.eslintrc.js consul-1.8.7+dfsg1/ui-v2/.eslintrc.js --- consul-1.7.4+dfsg1/ui-v2/.eslintrc.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.eslintrc.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,8 +1,12 @@ module.exports = { root: true, + parser: 'babel-eslint', parserOptions: { ecmaVersion: 2018, - sourceType: 'module' + sourceType: 'module', + ecmaFeatures: { + legacyDecorators: true + } }, plugins: ['ember'], extends: ['eslint:recommended', 'plugin:ember/recommended'], @@ -11,7 +15,9 @@ }, rules: { 'no-unused-vars': ['error', { args: 'none' }], - 'ember/no-new-mixins': ['warn'] + 'ember/no-new-mixins': ['warn'], + 'ember/no-jquery': 'warn', + 'ember/no-global-jquery': 'warn' }, overrides: [ // node files diff -Nru consul-1.7.4+dfsg1/ui-v2/GNUmakefile consul-1.8.7+dfsg1/ui-v2/GNUmakefile --- consul-1.7.4+dfsg1/ui-v2/GNUmakefile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/GNUmakefile 2020-12-10 21:46:52.000000000 +0000 @@ -65,6 +65,15 @@ test-node: yarn run test:node +test-coverage: deps + yarn run test:coverage + +test-coverage-view: deps + yarn run test:coverage:view + +test-coverage-ci: deps + yarn run test:coverage:ci + test-parallel: deps yarn run test:parallel diff -Nru consul-1.7.4+dfsg1/ui-v2/.istanbul.yml consul-1.8.7+dfsg1/ui-v2/.istanbul.yml --- consul-1.7.4+dfsg1/ui-v2/.istanbul.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.istanbul.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +instrumentation: + excludes: [ + "!app/+(utils|search)/**/*" + ] diff -Nru consul-1.7.4+dfsg1/ui-v2/lib/startup/index.js consul-1.8.7+dfsg1/ui-v2/lib/startup/index.js --- consul-1.7.4+dfsg1/ui-v2/lib/startup/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/lib/startup/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -11,10 +11,14 @@ const apiDoubleHeaders = require('@hashicorp/api-double/lib/headers'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); + // module.exports = { name: 'startup', serverMiddleware: function(server) { + // TODO: see if we can move these into the project specific `/server` directory + // instead of inside an addon + // TODO: This should all be moved out into ember-cli-api-double // and we should figure out a way to get to the settings here for // so we can set this path name centrally in config diff -Nru consul-1.7.4+dfsg1/ui-v2/lib/startup/templates/head.html.js consul-1.8.7+dfsg1/ui-v2/lib/startup/templates/head.html.js --- consul-1.7.4+dfsg1/ui-v2/lib/startup/templates/head.html.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/lib/startup/templates/head.html.js 2020-12-10 21:46:52.000000000 +0000 @@ -25,7 +25,8 @@ { rootURL: '${rootURL}', CONSUL_ACLS_ENABLED: ${config.CONSUL_ACLS_ENABLED}, - CONSUL_NSPACES_ENABLED: ${config.CONSUL_NSPACES_ENABLED} + CONSUL_NSPACES_ENABLED: ${config.CONSUL_NSPACES_ENABLED}, + CONSUL_SSO_ENABLED: ${config.CONSUL_SSO_ENABLED} } ); diff -Nru consul-1.7.4+dfsg1/ui-v2/node-tests/config/environment.js consul-1.8.7+dfsg1/ui-v2/node-tests/config/environment.js --- consul-1.7.4+dfsg1/ui-v2/node-tests/config/environment.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/node-tests/config/environment.js 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,8 @@ { environment: 'production', CONSUL_BINARY_TYPE: 'oss', - CONSUL_ACLS_ENABLED: '{{.ACLsEnabled}}', + CONSUL_ACLS_ENABLED: '{{ if .ACLsEnabled }}{{.ACLsEnabled}}{{ else }}false{{ end }}', + CONSUL_SSO_ENABLED: '{{ if .SSOEnabled }}{{.SSOEnabled}}{{ else }}false{{ end }}', CONSUL_NSPACES_ENABLED: '{{ if .NamespacesEnabled }}{{.NamespacesEnabled}}{{ else }}false{{ end }}', }, { @@ -17,6 +18,7 @@ CONSUL_BINARY_TYPE: 'oss', CONSUL_ACLS_ENABLED: true, CONSUL_NSPACES_ENABLED: true, + CONSUL_SSO_ENABLED: false, }, { $: { @@ -26,12 +28,24 @@ CONSUL_BINARY_TYPE: 'oss', CONSUL_ACLS_ENABLED: true, CONSUL_NSPACES_ENABLED: false, + CONSUL_SSO_ENABLED: false, + }, + { + $: { + CONSUL_SSO_ENABLED: 0 + }, + environment: 'test', + CONSUL_BINARY_TYPE: 'oss', + CONSUL_ACLS_ENABLED: true, + CONSUL_NSPACES_ENABLED: true, + CONSUL_SSO_ENABLED: false, }, { environment: 'staging', CONSUL_BINARY_TYPE: 'oss', CONSUL_ACLS_ENABLED: true, CONSUL_NSPACES_ENABLED: true, + CONSUL_SSO_ENABLED: true, } ].forEach( function(item) { diff -Nru consul-1.7.4+dfsg1/ui-v2/.nvmrc consul-1.8.7+dfsg1/ui-v2/.nvmrc --- consul-1.7.4+dfsg1/ui-v2/.nvmrc 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.nvmrc 2020-12-10 21:46:52.000000000 +0000 @@ -1 +1 @@ -10 +12 diff -Nru consul-1.7.4+dfsg1/ui-v2/package.json consul-1.8.7+dfsg1/ui-v2/package.json --- consul-1.7.4+dfsg1/ui-v2/package.json 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/package.json 2020-12-10 21:46:52.000000000 +0000 @@ -9,7 +9,7 @@ "test": "tests" }, "scripts": { - "build": "ember build --environment production", + "build": "ember build --environment=production", "build:staging": "ember build --environment staging", "build:ci": "ember build --environment test", "lint:dev:js": "eslint -c .dev.eslintrc.js --fix ./*.js ./.*.js app config lib server tests", @@ -29,8 +29,9 @@ "test:view": "ember test --server --test-port=${EMBER_TEST_PORT:-7357}", "test:oss:view": "CONSUL_NSPACES_ENABLED=0 ember test --server --test-port=${EMBER_TEST_PORT:-7357}", "test:node": "tape ./node-tests/**/*.js", - "test:coverage": "COVERAGE=true ember test --test-port=${EMBER_TEST_PORT:-7357}", - "test:view:coverage": "COVERAGE=true ember test --server --test-port=${EMBER_TEST_PORT:-7357}", + "test:coverage": "COVERAGE=true ember test --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", + "test:coverage:ci": "COVERAGE=true ember test --environment test --filter=Unit --path dist --test-port=${EMBER_TEST_PORT:-7357}", + "test:coverage:view": "COVERAGE=true ember test --server --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", "steps:list": "node ./lib/commands/bin/list.js" }, "husky": { @@ -40,84 +41,100 @@ }, "lint-staged": { "{app,config,lib,server,tests}/**/*.js": [ - "prettier --write", - "git add" + "prettier --write" ], "app/styles/**/*.*": [ - "prettier --write", - "git add" + "prettier --write" ] }, "devDependencies": { "@babel/core": "^7.2.2", + "@babel/helper-call-delegate": "^7.10.1", + "@babel/plugin-proposal-class-properties": "^7.10.1", "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@ember/jquery": "^0.6.0", - "@ember/optional-features": "^0.7.0", - "@hashicorp/consul-api-double": "^2.6.2", - "@hashicorp/ember-cli-api-double": "^2.0.0", + "@ember/optional-features": "^1.3.0", + "@glimmer/component": "^1.0.0", + "@glimmer/tracking": "^1.0.0", + "@hashicorp/consul-api-double": "^3.0.0", + "@hashicorp/ember-cli-api-double": "^3.1.0", + "@xstate/fsm": "^1.4.0", + "babel-eslint": "^10.0.3", "base64-js": "^1.3.0", "broccoli-asset-rev": "^3.0.0", - "chalk": "^2.4.2", + "broccoli-funnel": "^3.0.3", + "chalk": "^4.1.0", "clipboard": "^2.0.4", "css.escape": "^1.5.1", - "ember-auto-import": "^1.4.0", - "ember-changeset-validations": "^2.1.0", - "ember-cli": "~3.12.0", + "dart-sass": "^1.25.0", + "ember-auto-import": "^1.5.3", + "ember-changeset-validations": "^3.0.2", + "ember-cli": "~3.16.0", "ember-cli-app-version": "^3.2.0", "ember-cli-autoprefixer": "^0.8.1", - "ember-cli-babel": "^7.7.3", + "ember-cli-babel": "^7.17.2", "ember-cli-code-coverage": "^1.0.0-beta.4", - "ember-cli-dependency-checker": "^3.1.0", + "ember-cli-dependency-checker": "^3.2.0", "ember-cli-eslint": "^5.1.0", "ember-cli-flash": "^1.6.3", - "ember-cli-htmlbars": "^3.0.1", - "ember-cli-htmlbars-inline-precompile": "^3.0.0", - "ember-cli-inject-live-reload": "^2.0.1", - "ember-cli-page-object": "^1.15.0-beta.2", + "ember-cli-htmlbars": "^5.2.0", + "ember-cli-inject-live-reload": "^2.0.2", + "ember-cli-page-object": "^1.16.2", "ember-cli-sass": "^10.0.1", "ember-cli-sri": "^2.1.1", - "ember-cli-string-helpers": "^4.0.3", - "ember-cli-template-lint": "^1.0.0-beta.1", + "ember-cli-string-helpers": "^5.0.0", + "ember-cli-template-lint": "^2.0.1", "ember-cli-uglify": "^3.0.0", "ember-cli-yadda": "^0.5.0", "ember-collection": "^1.0.0-alpha.9", - "ember-composable-helpers": "^2.1.0", + "ember-composable-helpers": "~4.0.0", "ember-computed-style": "^0.3.0", - "ember-data": "~3.12.0", + "ember-data": "~3.16.0", "ember-exam": "^4.0.0", - "ember-export-application-global": "^2.0.0", + "ember-export-application-global": "^2.0.1", "ember-href-to": "^3.1.0", "ember-inflector": "^3.0.0", - "ember-load-initializers": "^2.0.0", + "ember-load-initializers": "^2.1.1", "ember-math-helpers": "^2.4.0", "ember-maybe-import-regenerator": "^0.1.6", + "ember-on-helper": "^0.1.0", "ember-page-title": "^5.1.0", - "ember-power-select": "^3.0.3", - "ember-power-select-with-create": "^0.6.0", - "ember-qunit": "^4.4.1", - "ember-resolver": "^5.0.1", - "ember-sinon-qunit": "^3.4.0", - "ember-source": "~3.12.0", - "ember-test-selectors": "^2.1.0", + "ember-power-select": "^4.0.3", + "ember-power-select-with-create": "^0.8.0", + "ember-qunit": "^4.6.0", + "ember-ref-modifier": "^1.0.0", + "ember-render-helpers": "^0.1.1", + "ember-resolver": "^8.0.0", + "ember-router-helpers": "^0.4.0", + "ember-sinon-qunit": "5.0.0", + "ember-source": "~3.16.0", + "ember-stargate": "^0.2.0", + "ember-test-selectors": "^4.0.0", + "ember-tooltips": "^3.4.3", "ember-truth-helpers": "^2.0.0", - "eslint-plugin-ember": "^7.0.0", - "eslint-plugin-node": "^10.0.0", - "flat": "^4.1.0", - "husky": "^3.0.5", + "eslint-plugin-ember": "^7.7.2", + "eslint-plugin-node": "^11.0.0", + "flat": "^5.0.0", + "husky": "^4.2.5", "ivy-codemirror": "^2.1.0", "js-yaml": "^3.13.1", "jsonlint": "^1.6.3", - "lint-staged": "^9.2.5", + "lint-staged": "^10.2.11", "loader.js": "^4.7.0", - "ngraph.graph": "^18.0.3", + "mnemonist": "^0.38.0", + "ngraph.graph": "^19.1.0", "node-sass": "^4.9.3", + "pretender": "^3.2.0", "prettier": "^1.10.2", - "qunit-dom": "^0.9.0", - "tape": "^4.13.0", - "text-encoding": "^0.7.0" + "qunit-dom": "^1.0.0", + "tape": "^5.0.1", + "text-encoding": "^0.7.0", + "torii": "^0.10.1" }, "engines": { - "node": "8.* || >= 10.*" + "node": "10.* || >= 12" + }, + "ember": { + "edition": "octane" }, "ember-addon": { "paths": [ diff -Nru consul-1.7.4+dfsg1/ui-v2/public/oidc/callback consul-1.8.7+dfsg1/ui-v2/public/oidc/callback --- consul-1.7.4+dfsg1/ui-v2/public/oidc/callback 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/public/oidc/callback 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ + + + + + Consul + + + diff -Nru consul-1.7.4+dfsg1/ui-v2/server/index.js consul-1.8.7+dfsg1/ui-v2/server/index.js --- consul-1.7.4+dfsg1/ui-v2/server/index.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/server/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,29 @@ +'use strict'; +const fs = require('fs'); +const promisify = require('util').promisify; +const read = promisify(fs.readFile); +const express = require('express'); + +module.exports = function(app, options) { + // During development the proxy server has no way of + // knowing the content/mime type of our `oidc/callback` file + // as it has no extension. + // This shims the default server to set the correct headers + // just for this file + + const file = `/oidc/callback`; + const rootURL = options.rootURL; + const url = `${rootURL.substr(0, rootURL.length - 1)}${file}`; + app.use(function(req, resp, next) { + if (req.url.split('?')[0] === url) { + return read(`${process.cwd()}/public${file}`).then(function(buffer) { + resp.header('Content-Type', 'text/html'); + resp.write(buffer.toString()); + resp.end(); + }); + } + next(); + }); + // Serve the coverage folder for easy viewing during development + app.use('/coverage', express.static('coverage')); +}; diff -Nru consul-1.7.4+dfsg1/ui-v2/.template-lintrc.js consul-1.8.7+dfsg1/ui-v2/.template-lintrc.js --- consul-1.7.4+dfsg1/ui-v2/.template-lintrc.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.template-lintrc.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ 'use strict'; module.exports = { - extends: 'recommended', + extends: 'octane', rules: { 'no-partial': false, @@ -10,6 +10,7 @@ 'self-closing-void-elements': false, 'no-unnecessary-concat': false, + 'no-quoteless-attributes': false, 'no-nested-interactive': false, 'block-indentation': false, @@ -19,6 +20,15 @@ 'no-triple-curlies': false, 'no-unused-block-params': false, 'style-concatenation': false, - 'link-rel-noopener': false + 'link-rel-noopener': false, + + 'no-implicit-this': false, + 'no-curly-component-invocation': false, + 'no-action': false, + 'no-negated-condition': false, + 'no-invalid-role': false, + + 'no-unnecessary-component-helper': false, + 'link-href-attributes': false }, }; diff -Nru consul-1.7.4+dfsg1/ui-v2/testem.js consul-1.8.7+dfsg1/ui-v2/testem.js --- consul-1.7.4+dfsg1/ui-v2/testem.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/testem.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,8 +1,13 @@ module.exports = { test_page: 'tests/index.html?hidepassed', disable_watching: true, - launch_in_ci: ['Chrome'], - launch_in_dev: ['Chrome'], + launch_in_ci: [ + 'Chrome' + ], + launch_in_dev: [ + 'Chrome' + ], + browser_start_timeout: 120, browser_args: { Chrome: { ci: [ diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/catalog-filter.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/catalog-filter.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/catalog-filter.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/catalog-filter.feature 2020-12-10 21:46:52.000000000 +0000 @@ -90,8 +90,8 @@ node: node-0 --- # And I see 3 healthcheck model with the name "Disk Util" - When I click services on the tabs - And I see servicesIsSelected on the tabs + When I click serviceInstances on the tabs + And I see serviceInstancesIsSelected on the tabs Then I fill in with yaml --- @@ -101,12 +101,6 @@ And I see 1 [Model] model with the port "65535" Then I fill in with yaml --- - s: service-0-with-id - --- - And I see 1 [Model] model - And I see 1 [Model] model with the id "service-0-with-id" - Then I fill in with yaml - --- s: hard drive --- And I see 1 [Model] model with the name "[Model]-1" @@ -129,18 +123,26 @@ Given 1 datacenter model with the value "dc-1" And 3 service models from yaml --- - - Tags: ['one', 'two', 'three'] + - Name: Service-0 + Tags: ['one', 'two', 'three'] ChecksPassing: 0 ChecksWarning: 0 ChecksCritical: 1 - - Tags: ['two', 'three'] + Kind: ~ + - Name: Service-1 + Tags: ['two', 'three'] ChecksPassing: 0 ChecksWarning: 1 ChecksCritical: 0 - - Tags: ['three'] + Kind: ~ + - Name: Service-2 + Tags: ['three'] ChecksPassing: 1 ChecksWarning: 0 ChecksCritical: 0 + Kind: ~ + + --- When I visit the services page for yaml --- @@ -162,4 +164,4 @@ --- s: 'status:critical' --- - And I see 1 service model + And I see 1 service model \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/copy-button.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/copy-button.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/copy-button.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/copy-button.feature 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,5 @@ @setupApplicationTest +@ignore Feature: components / copy-button Background: Given 1 datacenter model with the value "dc-1" @@ -20,6 +21,6 @@ dc: dc-1 node: node-0 --- - Then the url should be /dc-1/nodes/node-0 + Then the url should be /dc-1/nodes/node-0/health-checks When I click ".healthcheck-output:nth-child(1) button.copy-btn" - Then I see the text "Copied output!" in ".healthcheck-output:nth-child(1) p.feedback-dialog-out" + Then I copied "The output" diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/intention-filter.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/intention-filter.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/intention-filter.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/intention-filter.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -@setupApplicationTest -Feature: components / intention-filter: Intention Filter - In order to find the intention I'm looking for easier - As a user - I should be able to filter by 'policy' (allow/deny) and freetext search tokens by source and destination - Scenario: Filtering [Model] - Given 1 datacenter model with the value "dc-1" - And 2 [Model] models - When I visit the [Page] page for yaml - --- - dc: dc-1 - --- - Then the url should be [Url] - - Then I see 2 [Model] models - And I see allIsSelected on the filter - - When I click allow on the filter - Then I see allowIsSelected on the filter - And I see 1 [Model] model - And I see 1 [Model] model with the action "allow" - - When I click deny on the filter - Then I see denyIsSelected on the filter - And I see 1 [Model] model - And I see 1 [Model] model with the action "deny" - - When I click all on the filter - Then I see 2 [Model] models - Then I see allIsSelected on the filter - Then I fill in with yaml - --- - s: alarm - --- - And I see 1 [Model] model - And I see 1 [Model] model with the source "alarm" - Then I fill in with yaml - --- - s: feed - --- - And I see 1 [Model] model - And I see 1 [Model] model with the destination "feed" - Then I fill in with yaml - --- - s: transmitter - --- - And I see 2 [Model] models - And I see 1 [Model] model with the source "transmitter" - And I see 1 [Model] model with the destination "transmitter" - - Where: - --------------------------------------------- - | Model | Page | Url | - | intention | intentions | /dc-1/intentions | - --------------------------------------------- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/kv-filter.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/kv-filter.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/kv-filter.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/kv-filter.feature 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ @setupApplicationTest Feature: components / kv-filter - Scenario: Filtering using the freetext filter + Scenario: Filtering using the freetext filter with [Text] Given 1 datacenter model with the value "dc-1" And 2 [Model] models from yaml --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/text-input.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/text-input.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/components/text-input.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/components/text-input.feature 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,7 @@ Feature: components / text-input: Text input Background: Given 1 datacenter model with the value "dc-1" - Scenario: + Scenario: KV page When I visit the kv page for yaml --- dc: dc-1 @@ -15,7 +15,7 @@ {"additional": "hi", "value": "there"} --- Then I see submitIsEnabled - Scenario: + Scenario: ACL page When I visit the acl page for yaml --- dc: dc-1 diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-existing.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-existing.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-existing.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-existing.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ --- Policies: ~ ServiceIdentities: ~ + NodeIdentities: ~ --- And 2 policy models from yaml --- @@ -20,10 +21,10 @@ [Model]: key --- Then the url should be /datacenter/acls/[Model]s/key - And I click "#policies .ember-power-select-trigger" + And I click "form > #policies .ember-power-select-trigger" And I click ".ember-power-select-option:first-child" And I see 1 policy model on the policies component - And I click "#policies .ember-power-select-trigger" + And I click "form > #policies .ember-power-select-trigger" And I click ".ember-power-select-option:nth-child(1)" And I see 2 policy models on the policies component And I submit diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-new.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-new.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-new.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/add-new.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ --- Policies: ~ ServiceIdentities: ~ + NodeIdentities: ~ --- When I visit the [Model] page for yaml --- @@ -52,7 +53,6 @@ Then I fill in the policies.form with yaml --- Name: New-Service-Identity - Description: New Service Identity Description --- And I click serviceIdentity on the policies.form And I click submit on the policies.form @@ -73,6 +73,31 @@ | token | | role | ------------- + Scenario: Adding a new node identity as a child of [Model] + Then I fill in the policies.form with yaml + --- + Name: New-Node-Identity + --- + And I click nodeIdentity on the policies.form + And I click submit on the policies.form + And I submit + Then a PUT request was made to "/v1/acl/[Model]/key?dc=datacenter" from yaml + --- + body: + Namespace: @namespace + NodeIdentities: + - NodeName: New-Node-Identity + Datacenter: datacenter + --- + Then the url should be /datacenter/acls/[Model]s + And "[data-notification]" has the "notification-update" class + And "[data-notification]" has the "success" class + Where: + ------------- + | Model | + | token | + | role | + ------------- Scenario: Adding a new policy as a child of [Model] and getting an error Given the url "/v1/acl/policy" responds with from yaml --- @@ -106,6 +131,18 @@ Then I can't fill in the policies.form with yaml --- Rules: key {} + --- + Where: + ------------- + | Model | + | token | + | role | + ------------- + Scenario: Try to edit the Node Identity using the code editor + And I click nodeIdentity on the policies.form + Then I can't fill in the policies.form with yaml + --- + Rules: key {} --- Where: ------------- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/list.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/list.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/list.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/list.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,8 +6,8 @@ --- ServiceIdentities: - ServiceName: Service-Identity - - ServiceName: Service-Identity 2 - - ServiceName: Service-Identity 3 + NodeIdentities: + - NodeName: Node-Identity Policies: - Name: Policy ID: 0000 @@ -22,8 +22,8 @@ [Model]: key --- Then the url should be /datacenter/acls/[Model]s/key - # ServiceIdentities turn into policies - Then I see 6 policy models on the policies component + # Identities turn into policies + Then I see 5 policy models on the policies component Where: ------------- | Model | diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/remove.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/remove.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/remove.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/as-many/remove.feature 2020-12-10 21:46:52.000000000 +0000 @@ -5,6 +5,7 @@ And 1 [Model] model from yaml --- ServiceIdentities: ~ + NodeIdentities: ~ Policies: - Name: Policy ID: 00000000-0000-0000-0000-000000000001 @@ -17,7 +18,9 @@ Then the url should be /datacenter/acls/[Model]s/key And I see 1 policy model on the policies component And I click expand on the policies.selectedOptions - And a GET request was made to "/v1/acl/policy/00000000-0000-0000-0000-000000000001?dc=datacenter&ns=@namespace" + # Until we have a reliable way of mocking out and controlling IntersectionObserver + # this will need to stay commented out + # And a GET request was made to "/v1/acl/policy/00000000-0000-0000-0000-000000000001?dc=datacenter&ns=@namespace" And I click delete on the policies.selectedOptions And I click confirmDelete on the policies.selectedOptions And I see 0 policy models on the policies component diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/navigation.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/navigation.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/navigation.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/navigation.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,15 @@ +@setupApplicationTest +Feature: dc / policies / navigation + Scenario: Clicking a policy in the listing and back again + Given 1 datacenter model with the value "dc-1" + And 3 policy models + When I visit the policies page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/policies + And the title should be "Policies - Consul" + Then I see 3 policy models + When I click policy on the policies + And I click "[data-test-back]" + Then the url should be /dc-1/acls/policies diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/sorting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/sorting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/sorting.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/policies/sorting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,36 @@ +@setupApplicationTest +Feature: dc / acls / policies / sorting + Scenario: Sorting Policies + Given 1 datacenter model with the value "dc-1" + And 4 policy models from yaml + --- + - Name: "system-A" + - Name: "system-D" + - Name: "system-C" + - Name: "system-B" + --- + When I visit the policies page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/policies + Then I see 4 policy models + When I click selected on the sort + When I click options.1.button on the sort + Then I see name on the policies vertically like yaml + --- + - "system-D" + - "system-C" + - "system-B" + - "system-A" + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see name on the policies vertically like yaml + --- + - "system-A" + - "system-B" + - "system-C" + - "system-D" + --- + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/as-many/add-existing.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/as-many/add-existing.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/as-many/add-existing.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/as-many/add-existing.feature 2020-12-10 21:46:52.000000000 +0000 @@ -21,10 +21,10 @@ token: key --- Then the url should be /datacenter/acls/tokens/key - And I click "#roles .ember-power-select-trigger" + And I click "form > #roles .ember-power-select-trigger" And I click ".ember-power-select-option:first-child" And I see 1 role model on the roles component - And I click "#roles .ember-power-select-trigger" + And I click "form > #roles .ember-power-select-trigger" And I click ".ember-power-select-option:nth-child(1)" And I see 2 role models on the roles component Then I fill in with yaml diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/navigation.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/navigation.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/navigation.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/navigation.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,16 @@ +@setupApplicationTest +Feature: dc / roles / navigation + Scenario: Clicking a role in the listing and back again + Given 1 datacenter model with the value "dc-1" + And 3 role models + When I visit the roles page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/roles + And the title should be "Roles - Consul" + Then I see 3 role models + When I click role on the roles + And I click "[data-test-back]" + Then the url should be /dc-1/acls/roles + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/sorting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/sorting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/sorting.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/roles/sorting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,57 @@ +@setupApplicationTest +Feature: dc / acls / roles / sorting + Scenario: Sorting Roles + Given 1 datacenter model with the value "dc-1" + And 4 role models from yaml + --- + - Name: "system-A" + CreateIndex: 3 + - Name: "system-D" + CreateIndex: 2 + - Name: "system-C" + CreateIndex: 1 + - Name: "system-B" + CreateIndex: 4 + --- + When I visit the roles page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/roles + Then I see 4 role models + When I click selected on the sort + When I click options.1.button on the sort + Then I see name on the roles vertically like yaml + --- + - "system-D" + - "system-C" + - "system-B" + - "system-A" + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see name on the roles vertically like yaml + --- + - "system-A" + - "system-B" + - "system-C" + - "system-D" + --- + When I click selected on the sort + When I click options.2.button on the sort + Then I see name on the roles vertically like yaml + --- + - "system-C" + - "system-D" + - "system-A" + - "system-B" + --- + When I click selected on the sort + When I click options.3.button on the sort + Then I see name on the roles vertically like yaml + --- + - "system-B" + - "system-A" + - "system-D" + - "system-C" + --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/clone.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/clone.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/clone.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/clone.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ --- AccessorID: token SecretID: ee52203d-989f-4f7a-ab5a-2bef004164ca + Legacy: ~ --- Scenario: Cloning an ACL token from the listing page When I visit the tokens page for yaml diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login-errors.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login-errors.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login-errors.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login-errors.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -@setupApplicationTest -Feature: dc / acls / tokens / login-errors: ACL Login Errors - - Scenario: I get any 500 error that is not the specific legacy token cluster one - Given 1 datacenter model with the value "dc-1" - Given the url "/v1/acl/tokens?ns=@namespace" responds with a 500 status - When I visit the tokens page for yaml - --- - dc: dc-1 - --- - Then the url should be /dc-1/acls/tokens - Then I see the text "500 (The backend responded with an error)" in "[data-test-error]" - Scenario: I get a 500 error from acl/tokens that is the specific legacy one - Given 1 datacenter model with the value "dc-1" - And the url "/v1/acl/tokens?ns=@namespace" responds with from yaml - --- - status: 500 - body: "rpc error making call: rpc: can't find method ACL.TokenRead" - --- - When I visit the tokens page for yaml - --- - dc: dc-1 - --- - Then the url should be /dc-1/acls/tokens - Then ".app-view" has the "unauthorized" class - @notNamespaceable - Scenario: I get a 500 error from acl/token/self that is the specific legacy one - Given 1 datacenter model with the value "dc-1" - Given the url "/v1/acl/tokens?ns=@namespace" responds with from yaml - --- - status: 500 - body: "rpc error making call: rpc: can't find method ACL.TokenRead" - --- - And the url "/v1/acl/token/self" responds with from yaml - --- - status: 500 - body: "rpc error making call: rpc: can't find method ACL.TokenRead" - --- - And the url "/v1/acl/list" responds with a 403 status - When I visit the tokens page for yaml - --- - dc: dc-1 - --- - Then the url should be /dc-1/acls/tokens - Then ".app-view" has the "unauthorized" class - Then I fill in with yaml - --- - secret: something - --- - And I submit - Then ".app-view" has the "unauthorized" class - And "[data-notification]" has the "error" class - diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/login.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -@setupApplicationTest -Feature: dc / acls / tokens / login - Scenario: Logging into the ACLs login page - Given 1 datacenter model with the value "dc-1" - And the url "/v1/acl/tokens" responds with a 403 status - When I visit the tokens page for yaml - --- - dc: dc-1 - --- - Then the url should be /dc-1/acls/tokens - And I fill in with yaml - --- - secret: something - --- - And I submit - Then a GET request was made to "/v1/acl/token/self?dc=dc-1" from yaml - --- - headers: - X-Consul-Token: something - --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/navigation.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/navigation.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/navigation.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/navigation.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,15 @@ +@setupApplicationTest +Feature: dc / tokens / navigation + Scenario: Clicking a token in the listing and back again + Given 1 datacenter model with the value "dc-1" + And 3 token models + When I visit the tokens page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/tokens + And the title should be "Tokens - Consul" + Then I see 3 token models + When I click token on the tokens + And I click "[data-test-back]" + Then the url should be /dc-1/acls/tokens diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/own-no-delete.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/own-no-delete.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/own-no-delete.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/own-no-delete.feature 2020-12-10 21:46:52.000000000 +0000 @@ -8,9 +8,12 @@ SecretID: ee52203d-989f-4f7a-ab5a-2bef004164ca --- Scenario: On the listing page - Then I have settings like yaml + Given settings from yaml --- - consul:token: ~ + consul:token: + SecretID: secret + AccessorID: accessor + Namespace: default --- When I visit the tokens page for yaml --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/sorting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/sorting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/sorting.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/sorting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,39 @@ +@setupApplicationTest +Feature: dc / acls / tokens / sorting + Scenario: Sorting Tokens + Given 1 datacenter model with the value "dc-1" + And 4 token models from yaml + --- + - AccessorID: "00000000-0000-0000-0000-000000000001" + CreateTime: "2018-09-15T11:58:09.197Z" + - AccessorID: "00000000-0000-0000-0000-000000000002" + CreateTime: "2020-09-15T11:58:09.197Z" + - AccessorID: "00000000-0000-0000-0000-000000000003" + CreateTime: "2007-09-15T11:58:09.197Z" + - AccessorID: "00000000-0000-0000-0000-000000000004" + CreateTime: "2011-09-15T11:58:09.197Z" + --- + When I visit the tokens page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/tokens + Then I see 4 token models + When I click selected on the sort + When I click options.1.button on the sort + Then I see id on the tokens vertically like yaml + --- + - "00000000-0000-0000-0000-000000000003" + - "00000000-0000-0000-0000-000000000004" + - "00000000-0000-0000-0000-000000000001" + - "00000000-0000-0000-0000-000000000002" + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see id on the tokens vertically like yaml + --- + - "00000000-0000-0000-0000-000000000002" + - "00000000-0000-0000-0000-000000000001" + - "00000000-0000-0000-0000-000000000004" + - "00000000-0000-0000-0000-000000000003" + --- \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/use.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/use.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/use.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/acls/tokens/use.feature 2020-12-10 21:46:52.000000000 +0000 @@ -7,15 +7,18 @@ AccessorID: token SecretID: ee52203d-989f-4f7a-ab5a-2bef004164ca --- + And settings from yaml + --- + consul:token: + SecretID: secret + AccessorID: accessor + Namespace: default + --- Scenario: Using an ACL token from the listing page When I visit the tokens page for yaml --- dc: datacenter --- - Then I have settings like yaml - --- - consul:token: ~ - --- And I click actions on the tokens And I click use on the tokens And I click confirmUse on the tokens @@ -31,10 +34,6 @@ dc: datacenter token: token --- - Then I have settings like yaml - --- - consul:token: ~ - --- And I click use And I click confirmUse Then "[data-notification]" has the "notification-use" class diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/error.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/error.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/error.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/error.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,7 +6,15 @@ - dc-1 - dc-500 --- - And 3 service models + And 3 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-1 + Kind: ~ + - Name: Service-2 + Kind: ~ + --- And the url "/v1/internal/ui/services" responds with a 500 status When I visit the services page for yaml --- @@ -14,7 +22,7 @@ --- Then the url should be /dc-500/services And the title should be "Consul" - Then I see the text "500 (The backend responded with an error)" in "[data-test-error]" + Then I see status on the error like "500" Scenario: Clicking the back to root button Given the url "/v1/internal/ui/services" responds with a 200 status When I click home diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/create.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/create.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/create.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/create.feature 2020-12-10 21:46:52.000000000 +0000 @@ -33,13 +33,14 @@ # Specifically set deny And I click "[value=deny]" And I submit - Then a POST request was made to "/v1/connect/intentions?dc=datacenter" with the body from yaml + Then a POST request was made to "/v1/connect/intentions?dc=datacenter" from yaml --- - SourceName: web - DestinationName: db - Action: deny + body: + SourceName: web + DestinationName: db + Action: deny --- Then the url should be /datacenter/intentions And the title should be "Intentions - Consul" - And "[data-notification]" has the "notification-create" class + And "[data-notification]" has the "notification-update" class And "[data-notification]" has the "success" class diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/delete.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/delete.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/delete.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/delete.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,58 @@ +@setupApplicationTest +Feature: dc / intentions / deleting: Deleting items with confirmations, success and error notifications + Background: + Given 1 datacenter model with the value "datacenter" + Scenario: Deleting a intention model from the intention listing page + Given 1 intention model from yaml + --- + SourceName: name + ID: ee52203d-989f-4f7a-ab5a-2bef004164ca + --- + When I visit the intentions page for yaml + --- + dc: datacenter + --- + And I click actions on the intentions + And I click delete on the intentions + And I click confirmDelete on the intentions + Then a DELETE request was made to "/v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter" + And "[data-notification]" has the "notification-delete" class + And "[data-notification]" has the "success" class + Scenario: Deleting an intention from the intention detail page + When I visit the intention page for yaml + --- + dc: datacenter + intention: ee52203d-989f-4f7a-ab5a-2bef004164ca + --- + And I click delete + And I click confirmDelete + Then a DELETE request was made to "/v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter" + And "[data-notification]" has the "notification-delete" class + And "[data-notification]" has the "success" class + Scenario: Deleting an intention from the intention detail page and getting an error + When I visit the intention page for yaml + --- + dc: datacenter + intention: ee52203d-989f-4f7a-ab5a-2bef004164ca + --- + Given the url "/v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter" responds with a 500 status + And I click delete + And I click confirmDelete + And "[data-notification]" has the "notification-update" class + And "[data-notification]" has the "error" class + Scenario: Deleting an intention from the intention detail page and getting an error due to a duplicate intention + When I visit the intention page for yaml + --- + dc: datacenter + intention: ee52203d-989f-4f7a-ab5a-2bef004164ca + --- + Given the url "/v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter" responds with from yaml + --- + status: 500 + body: "duplicate intention found:" + --- + And I click delete + And I click confirmDelete + And "[data-notification]" has the "notification-update" class + And "[data-notification]" has the "error" class + And I see the text "Intention exists" in "[data-notification] strong" diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/filtered-select.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/filtered-select.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/filtered-select.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/filtered-select.feature 2020-12-10 21:46:52.000000000 +0000 @@ -8,14 +8,19 @@ And 4 service models from yaml --- - Name: service-0 - Kind: consul + Kind: ~ - Name: service-1 - Kind: consul + Kind: ~ - Name: service-2 Kind: connect-proxy - Name: service-3 Kind: connect-proxy --- + And 1 intention model from yaml + --- + SourceName: 'service-0' + DestinationName: 'service-1' + --- When I visit the intention page for yaml --- dc: datacenter @@ -29,6 +34,36 @@ Where: --------------- | Name | + | source | + | destination | + --------------- + Scenario: Opening the [Name] dropdown with 2 services with the same name from different nspaces + Given 1 datacenter model with the value "datacenter" + And 2 service models from yaml + --- + - Name: service-0 + Kind: ~ + - Name: service-0 + Namespace: nspace + Kind: ~ + --- + And 1 intention model from yaml + --- + SourceName: 'service-0' + DestinationName: 'service-0' + --- + When I visit the intention page for yaml + --- + dc: datacenter + intention: intention + --- + Then the url should be /datacenter/intentions/intention + And I click "[data-test-[Name]-element] .ember-power-select-trigger" + Then I see the text "* (All Services)" in ".ember-power-select-option:nth-last-child(2)" + Then I see the text "service-0" in ".ember-power-select-option:last-child" + Where: + --------------- + | Name | | source | | destination | --------------- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/index.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/index.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/index.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/index.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +@setupApplicationTest +Feature: dc / intentions / index + Scenario: Viewing intentions in the listing + Given 1 datacenter model with the value "dc-1" + And 3 intention models + When I visit the intentions page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/intentions + And the title should be "Intentions - Consul" + Then I see 3 intention models diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/navigation.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/navigation.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/navigation.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/navigation.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,30 @@ +@setupApplicationTest +Feature: dc / intentions / navigation + Scenario: Clicking a intention in the listing and back again + Given 1 datacenter model with the value "dc-1" + And 3 intention models + When I visit the intentions page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/intentions + And the title should be "Intentions - Consul" + Then I see 3 intention models + When I click intention on the intentions + Then a GET request was made to "/v1/internal/ui/services?dc=dc-1&ns=*" + And I click "[data-test-back]" + Then the url should be /dc-1/intentions + Scenario: Clicking the create button and back again + Given 1 datacenter model with the value "dc-1" + And 3 intention models + When I visit the intentions page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/intentions + And the title should be "Intentions - Consul" + Then I see 3 intention models + When I click create + Then the url should be /dc-1/intentions/create + And I click "[data-test-back]" + Then the url should be /dc-1/intentions diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/sorting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/sorting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/intentions/sorting.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/intentions/sorting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +@setupApplicationTest +@notNamespaceable +Feature: dc / intentions / sorting + Scenario: Sorting Intentions + Given 1 datacenter model with the value "dc-1" + And 6 intention models from yaml + --- + - Action: "allow" + - Action: "allow" + - Action: "deny" + - Action: "deny" + - Action: "allow" + - Action: "deny" + --- + When I visit the intentions page for yaml + --- + dc: dc-1 + --- + Then I see 6 intention models + When I click selected on the sort + When I click options.1.button on the sort + Then I see action on the intentions vertically like yaml + --- + - "deny" + - "deny" + - "deny" + - "allow" + - "allow" + - "allow" + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see action on the intentions vertically like yaml + --- + - "allow" + - "allow" + - "allow" + - "deny" + - "deny" + - "deny" + --- + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/create.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/create.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/create.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/create.feature 2020-12-10 21:46:52.000000000 +0000 @@ -1,14 +1,50 @@ -@setupApplicationTest -Feature: dc / kvs / create - Scenario: - Given 1 datacenter model with the value "datacenter" - When I visit the kv page for yaml - --- - dc: datacenter - --- - Then the url should be /datacenter/kv/create - And the title should be "New Key/Value - Consul" - -@ignore - Scenario: Test we can create a KV - Then ok +@setupApplicationTest +Feature: dc / kvs / create + Scenario: Creating a root KV + Given 1 datacenter model with the value "datacenter" + When I visit the kv page for yaml + --- + dc: datacenter + --- + Then the url should be /datacenter/kv/create + And the title should be "New Key/Value - Consul" + Then I fill in with yaml + --- + additional: key-value + value: value + --- + And I submit + Then the url should be /datacenter/kv + Then a PUT request was made to "/v1/kv/key-value?dc=datacenter&ns=@namespace" + And "[data-notification]" has the "notification-update" class + And "[data-notification]" has the "success" class + Scenario: Creating a folder + Given 1 datacenter model with the value "datacenter" + When I visit the kv page for yaml + --- + dc: datacenter + --- + Then the url should be /datacenter/kv/create + And the title should be "New Key/Value - Consul" + Then I fill in with yaml + --- + additional: key-value/ + --- + And I submit + Then the url should be /datacenter/kv + Then a PUT request was made to "/v1/kv/key-value/?dc=datacenter&ns=@namespace" + And "[data-notification]" has the "notification-update" class + And "[data-notification]" has the "success" class + Scenario: Clicking create from within a folder + Given 1 datacenter model with the value "datacenter" + And 1 kv model from yaml + --- + - key-value/ + --- + When I visit the kvs page for yaml + --- + dc: datacenter + --- + And I click kv on the kvs + And I click create + And I see the text "New Key / Value" in "h1" diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/delete.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/delete.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/delete.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/delete.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +@setupApplicationTest +Feature: dc / kvs / deleting: Deleting items with confirmations, success and error notifications + Background: + Given 1 datacenter model with the value "datacenter" + Scenario: Deleting a kv model from the kv listing page + Given 1 kv model from yaml + --- + ["key-name"] + --- + When I visit the kvs page for yaml + --- + dc: datacenter + --- + And I click actions on the kvs + And I click delete on the kvs + And I click confirmDelete on the kvs + Then a DELETE request was made to "/v1/kv/key-name?dc=datacenter&ns=@!namespace" + And "[data-notification]" has the "notification-delete" class + And "[data-notification]" has the "success" class + Scenario: Deleting an kv from the kv detail page + When I visit the kv page for yaml + --- + dc: datacenter + kv: key-name + --- + And I click delete + And I click confirmDelete + Then a DELETE request was made to "/v1/kv/key-name?dc=datacenter&ns=@!namespace" + And "[data-notification]" has the "notification-delete" class + And "[data-notification]" has the "success" class + Scenario: Deleting an kv from the kv detail page and getting an error + When I visit the kv page for yaml + --- + dc: datacenter + kv: key-name + --- + Given the url "/v1/kv/key-name?dc=datacenter&ns=@!namespace" responds with a 500 status + And I click delete + And I click confirmDelete + And "[data-notification]" has the "notification-update" class + And "[data-notification]" has the "error" class + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/sessions/invalidate.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/sessions/invalidate.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/sessions/invalidate.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/sessions/invalidate.feature 2020-12-10 21:46:52.000000000 +0000 @@ -21,12 +21,12 @@ And I click confirmDelete on the session Then a PUT request was made to "/v1/session/destroy/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter&ns=@!namespace" Then the url should be /datacenter/kv/key/edit - And "[data-notification]" has the "notification-deletesession" class + And "[data-notification]" has the "notification-delete" class And "[data-notification]" has the "success" class Scenario: Invalidating a lock session and receiving an error Given the url "/v1/session/destroy/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter&ns=@!namespace" responds with a 500 status And I click delete on the session And I click confirmDelete on the session Then the url should be /datacenter/kv/key/edit - And "[data-notification]" has the "notification-deletesession" class + And "[data-notification]" has the "notification-update" class And "[data-notification]" has the "error" class diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/trailing-slash.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/trailing-slash.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/kvs/trailing-slash.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/kvs/trailing-slash.feature 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ @setupApplicationTest Feature: dc / kvs / trailing-slash - Scenario: I have 10 folders + Scenario: I have 10 folders and I visit without a trailing slash Given 1 datacenter model with the value "datacenter" And 10 kv models from yaml When I visit the kvs page for yaml @@ -10,6 +10,9 @@ --- Then the url should be /datacenter/kv/foo/bar/ And a GET request was made to "/v1/kv/foo/bar/?keys&dc=datacenter&separator=%2F&ns=@namespace" + Scenario: I have 10 folders and I visit with a trailing slash + Given 1 datacenter model with the value "datacenter" + And 10 kv models from yaml When I visit the kvs page for yaml --- dc: datacenter diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/list-blocking.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/list-blocking.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/list-blocking.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/list-blocking.feature 2020-12-10 21:46:52.000000000 +0000 @@ -23,7 +23,6 @@ Where: ------------------------------------------------ | Page | Model | Url | - | services | service | services | | nodes | node | nodes | | intentions | intention | intentions | ------------------------------------------------ @@ -33,7 +32,7 @@ When I visit the [Page] page for yaml --- dc: dc-1 - service: service-0 + service: service --- Then the url should be /dc-1/[Url] And pause until I see 3 [Model] models @@ -44,7 +43,7 @@ And an external edit results in 0 [Model] models And pause until I see the text "deregistered" in "[data-notification]" Where: - ------------------------------------------------- - | Page | Model | Url | - | service | instance | services/service-0 | - ------------------------------------------------- + ----------------------------------------------------------------- + | Page | Model | Url | + | service | instance | services/service/instances | + ----------------------------------------------------------------- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/list.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/list.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/list.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/list.feature 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,6 @@ Where: ------------------------------------------------- | Model | Page | Url | - | service | services | /dc-1/services | | node | nodes | /dc-1/nodes | | kv | kvs | /dc-1/kv | # | acl | acls | /dc-1/acls | diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nodes/services/list.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nodes/services/list.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nodes/services/list.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nodes/services/list.feature 2020-12-10 21:46:52.000000000 +0000 @@ -30,24 +30,18 @@ Tags: [] Meta: external-source: kubernetes - - ID: 'service-4' - Port: 3 - Service: 'service-4' - Tags: [] - Meta: ~ --- When I visit the node page for yaml --- dc: dc1 node: node-0 --- - When I click services on the tabs - And I see servicesIsSelected on the tabs + When I click serviceInstances on the tabs + And I see serviceInstancesIsSelected on the tabs And I see externalSource on the services like yaml --- - consul - nomad - terraform - kubernetes - - ~ --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature 2020-12-10 21:46:52.000000000 +0000 @@ -19,20 +19,20 @@ dc: dc1 node: node-0 --- - Then the url should be /dc1/nodes/node-0 + Then the url should be /dc1/nodes/node-0/health-checks And I click lockSessions on the tabs Then I see lockSessionsIsSelected on the tabs Scenario: Invalidating the lock session And I click delete on the sessions And I click confirmDelete on the sessions Then a PUT request was made to "/v1/session/destroy/7bbbd8bb-fff3-4292-b6e3-cfedd788546a?dc=dc1&ns=@!namespace" - Then the url should be /dc1/nodes/node-0 + Then the url should be /dc1/nodes/node-0/lock-sessions And "[data-notification]" has the "notification-delete" class And "[data-notification]" has the "success" class Scenario: Invalidating a lock session and receiving an error Given the url "/v1/session/destroy/7bbbd8bb-fff3-4292-b6e3-cfedd788546a?dc=dc1&ns=@!namespace" responds with a 500 status And I click delete on the sessions And I click confirmDelete on the sessions - Then the url should be /dc1/nodes/node-0 + Then the url should be /dc1/nodes/node-0/lock-sessions And "[data-notification]" has the "notification-delete" class And "[data-notification]" has the "error" class diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nodes/show.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nodes/show.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nodes/show.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nodes/show.feature 2020-12-10 21:46:52.000000000 +0000 @@ -11,8 +11,8 @@ --- And I see healthChecksIsSelected on the tabs - When I click services on the tabs - And I see servicesIsSelected on the tabs + When I click serviceInstances on the tabs + And I see serviceInstancesIsSelected on the tabs When I click roundTripTime on the tabs And I see roundTripTimeIsSelected on the tabs @@ -20,8 +20,8 @@ When I click lockSessions on the tabs And I see lockSessionsIsSelected on the tabs - When I click metaData on the tabs - And I see metaDataIsSelected on the tabs + When I click metadata on the tabs + And I see metadataIsSelected on the tabs Scenario: Given 1 node all the tabs are visible and clickable and the RTT one isn't there Given 1 node models from yaml --- @@ -34,14 +34,14 @@ --- And I see healthChecksIsSelected on the tabs - When I click services on the tabs - And I see servicesIsSelected on the tabs + When I click serviceInstances on the tabs + And I see serviceInstancesIsSelected on the tabs And I don't see roundTripTime on the tabs When I click lockSessions on the tabs And I see lockSessionsIsSelected on the tabs - Scenario: Given 1 node with no checks all the tabs are visible but the Services tab is selected + Scenario: Given 1 node with no checks all the tabs are visible but the serviceInstances tab is selected Given 1 node models from yaml --- ID: node-0 @@ -53,10 +53,10 @@ node: node-0 --- And I see healthChecks on the tabs - And I see services on the tabs - And I see roundTripTime on the tabs + And I see serviceInstances on the tabs + And I don't see roundTripTime on the tabs And I see lockSessions on the tabs - And I see servicesIsSelected on the tabs + And I see serviceInstancesIsSelected on the tabs Scenario: A node warns when deregistered whilst blocking Given 1 node model from yaml --- @@ -74,7 +74,7 @@ dc: dc1 node: node-0 --- - Then the url should be /dc1/nodes/node-0 + Then the url should be /dc1/nodes/node-0/health-checks And the title should be "node-0 - Consul" And the url "/v1/internal/ui/node/node-0" responds with a 404 status And pause until I see the text "no longer exists" in "[data-notification]" diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nspaces/index.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nspaces/index.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nspaces/index.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nspaces/index.feature 2020-12-10 21:46:52.000000000 +0000 @@ -10,7 +10,15 @@ Namespace: default --- And 1 datacenter model with the value "dc-1" - And 3 nspace models + And 3 nspace models from yaml + --- + - Name: a-namespace + Description: a namespace + - Name: default + Description: The default namespace + - Name: z-namespace + Description: z namespace + --- When I visit the nspaces page for yaml --- dc: dc-1 @@ -29,5 +37,5 @@ And I see 1 nspace model with the description "The default namespace" Scenario: The default namespace can't be deleted Then I see 3 nspace models - And I click actions on the nspaces - Then I don't see delete on the nspaces + And I click nspaces.1.actions + Then I don't see nspaces.1.delete diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nspaces/manage.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nspaces/manage.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nspaces/manage.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nspaces/manage.feature 2020-12-10 21:46:52.000000000 +0000 @@ -13,7 +13,22 @@ --- - dc-1 --- - And 6 service models + And 6 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-1 + Kind: ~ + - Name: Service-2 + Kind: ~ + - Name: Service-3 + Kind: ~ + - Name: Service-4 + Kind: ~ + - Name: Service-5 + Kind: ~ + --- + When I visit the services page for yaml --- dc: dc-1 diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nspaces/sorting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nspaces/sorting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/nspaces/sorting.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/nspaces/sorting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,49 @@ +@setupApplicationTest +@onlyNamespaceable +Feature: dc / nspaces / sorting + Scenario: Sorting Namespaces + Given settings from yaml + --- + consul:token: + SecretID: secret + AccessorID: accessor + Namespace: default + --- + Given 1 datacenter model with the value "dc-1" + And 6 nspace models from yaml + --- + - Name: "nspace-5" + - Name: "nspace-3" + - Name: "nspace-1" + - Name: "nspace-4" + - Name: "nspace-2" + - Name: "nspace-6" + --- + When I visit the nspaces page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/namespaces + Then I see 6 nspace models + When I click selected on the sort + When I click options.1.button on the sort + Then I see name on the nspaces vertically like yaml + --- + - "nspace-6" + - "nspace-5" + - "nspace-4" + - "nspace-3" + - "nspace-2" + - "nspace-1" + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see name on the nspaces vertically like yaml + --- + - "nspace-1" + - "nspace-2" + - "nspace-3" + - "nspace-4" + - "nspace-5" + - "nspace-6" + --- \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/dc-switch.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/dc-switch.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/dc-switch.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/dc-switch.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,7 +6,22 @@ - dc-1 - dc-2 --- - And 6 service models + And 6 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-1 + Kind: ~ + - Name: Service-2 + Kind: ~ + - Name: Service-3 + Kind: ~ + - Name: Service-4 + Kind: ~ + - Name: Service-5 + Kind: ~ + --- + When I visit the services page for yaml --- dc: dc-1 diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/error.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/error.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/error.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/error.feature 2020-12-10 21:46:52.000000000 +0000 @@ -10,7 +10,7 @@ --- dc: 404-datacenter --- - Then I see the text "404 (Page not found)" in "[data-test-error]" + Then I see status on the error like "404" @notNamespaceable Scenario: Arriving at the service page Given 2 datacenter models from yaml @@ -23,7 +23,7 @@ --- dc: dc-1 --- - Then I see the text "500 (The backend responded with an error)" in "[data-test-error]" + Then I see status on the error like "500" # This is the actual step that works slightly differently # When running through namespaces as the dc menu says 'Error' # which is still kind of ok diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/index.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/index.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/index.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/index.feature 2020-12-10 21:46:52.000000000 +0000 @@ -1,40 +1,99 @@ @setupApplicationTest Feature: dc / services / index: List Services - Scenario: + Scenario: Viewing the service list page with services Given 1 datacenter model with the value "dc-1" - And 6 service models from yaml + And 10 service models from yaml --- - - Name: Service 1 - ExternalSources: - - consul - - Name: Service 2 - ExternalSources: - - nomad - - Name: Service 3 - ExternalSources: - - terraform - - Name: Service 4 - ExternalSources: - - kubernetes - - Name: Service 5 - ExternalSources: [] - - Name: Service 6 - ExternalSources: ~ + - Name: Service-0 + ExternalSources: + - consul + Kind: ~ + - Name: Service-0-proxy + Kind: 'connect-proxy' + - Name: Service-1 + ExternalSources: + - nomad + Kind: ~ + - Name: Service-1-proxy + Kind: 'connect-proxy' + - Name: Service-2 + ExternalSources: + - terraform + Kind: ~ + - Name: Service-2-proxy + Kind: 'connect-proxy' + - Name: Service-3 + ExternalSources: + - kubernetes + Kind: ~ + - Name: Service-3-proxy + Kind: 'connect-proxy' + - Name: Service-4 + ExternalSources: + - aws + Kind: ~ + - Name: Service-4-proxy + Kind: 'connect-proxy' --- + When I visit the services page for yaml --- dc: dc-1 --- Then the url should be /dc-1/services And the title should be "Services - Consul" - Then I see 6 service models + Then I see 5 service models And I see externalSource on the services like yaml --- - consul - nomad - terraform - kubernetes - - ~ - - ~ + - aws + --- + Scenario: Viewing the service list page with gateways + Given 1 datacenter model with the value "dc-1" + And 3 service models from yaml + --- + - Name: Service-0-proxy + Kind: 'connect-proxy' + - Name: Service-1-ingress-gateway + Kind: 'ingress-gateway' + - Name: Service-2-terminating-gateway + Kind: 'terminating-gateway' + --- + + When I visit the services page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/services + And the title should be "Services - Consul" + Then I see 2 service models + And I see kind on the services like yaml + --- + - ingress-gateway + - terminating-gateway + --- + Scenario: View a Service with a proxy + Given 1 datacenter model with the value "dc-1" + And 3 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-0-proxy + Kind: connect-proxy + ProxyFor: ['Service-0'] + - Name: Service-1 + Kind: ~ --- + When I visit the services page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/services + And the title should be "Services - Consul" + Then I see 2 service models + And I see proxy on the services.0 + And I don't see proxy on the services.1 diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/error.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/error.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/error.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/error.feature 2020-12-10 21:46:52.000000000 +0000 @@ -10,7 +10,7 @@ node: node-0 id: id-that-doesnt-exist --- - Then the url should be /dc1/services/service-0/node-0/id-that-doesnt-exist - And I see the text "404 (Unable to find instance)" in "[data-test-error]" + Then the url should be /dc1/services/service-0/instances/node-0/id-that-doesnt-exist + Then I see status on the error like "404" diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/gateway.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/gateway.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/gateway.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/gateway.feature 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,12 @@ Feature: dc / services / instances / gateway: Show Gateway Service Instance Scenario: A Gateway Service instance Given 1 datacenter model with the value "dc1" + Given 1 proxy model from yaml + --- + - ServiceProxy: + DestinationServiceName: service-1 + DestinationServiceID: ~ + --- And 1 instance model from yaml --- - Service: @@ -23,9 +29,9 @@ node: node-0 id: gateway-with-id --- - Then the url should be /dc1/services/gateway/node-0/gateway-with-id + Then the url should be /dc1/services/gateway/instances/node-0/gateway-with-id/health-checks - And I see serviceChecksIsSelected on the tabs + And I see healthChecksIsSelected on the tabs When I click addresses on the tabs And I see addressesIsSelected on the tabs diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxy.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxy.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxy.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxy.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,176 +0,0 @@ -@setupApplicationTest -Feature: dc / services / instances / proxy: Show Proxy Service Instance - @onlyNamespaceable - Scenario: A Proxy Service instance with a namespace - Given 1 datacenter model with the value "dc1" - And 1 instance model from yaml - --- - - Service: - Kind: connect-proxy - Name: service-0-proxy - ID: service-0-proxy-with-id - Proxy: - DestinationServiceName: service-0 - Expose: - Checks: false - Paths: [] - Upstreams: - - DestinationType: service - DestinationName: service-1 - DestinationNamespace: default - LocalBindAddress: 127.0.0.1 - LocalBindPort: 1111 - - DestinationType: prepared_query - DestinationName: service-group - LocalBindAddress: 127.0.0.1 - LocalBindPort: 1112 - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0-proxy - node: node-0 - id: service-0-proxy-with-id - --- - - When I click upstreams on the tabs - And I see upstreamsIsSelected on the tabs - And I see 2 of the upstreams object - And I see name on the upstreams like yaml - --- - - service-1 default - - service-group - --- - @notNamespaceable - Scenario: A Proxy Service instance with no exposed checks - Given 1 datacenter model with the value "dc1" - And 1 instance model from yaml - --- - - Service: - Kind: connect-proxy - Name: service-0-proxy - ID: service-0-proxy-with-id - Proxy: - DestinationServiceName: service-0 - Expose: - Checks: false - Paths: [] - Upstreams: - - DestinationType: service - DestinationName: service-1 - DestinationNamespace: default - LocalBindAddress: 127.0.0.1 - LocalBindPort: 1111 - - DestinationType: prepared_query - DestinationName: service-group - LocalBindAddress: 127.0.0.1 - LocalBindPort: 1112 - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0-proxy - node: node-0 - id: service-0-proxy-with-id - --- - Then the url should be /dc1/services/service-0-proxy/node-0/service-0-proxy-with-id - And I see destination on the proxy like "service" - - And I see serviceChecksIsSelected on the tabs - - When I click serviceChecks on the tabs - And I don't see exposed on the serviceChecks - - When I click upstreams on the tabs - And I see upstreamsIsSelected on the tabs - And I see 2 of the upstreams object - And I see name on the upstreams like yaml - --- - - service-1 - - service-group - --- - And I see type on the upstreams like yaml - --- - - service - - prepared_query - --- - And I don't see exposedPaths on the tabs - - Scenario: A Proxy Service instance with no automatically exposed checks but with paths - Given 1 datacenter model with the value "dc1" - And 1 instance model from yaml - --- - - Service: - Kind: connect-proxy - Name: service-0-proxy - ID: service-0-proxy-with-id - Address: 10.0.0.1 - Proxy: - DestinationServiceName: service-0 - Expose: - Paths: - - Path: /grpc-metrics - Protocol: grpc - LocalPathPort: 8081 - ListenerPort: 8080 - - Path: /http-metrics - Protocol: http - LocalPathPort: 8082 - ListenerPort: 8083 - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0-proxy - node: node-0 - id: service-0-proxy-with-id - --- - Then the url should be /dc1/services/service-0-proxy/node-0/service-0-proxy-with-id - And I see serviceChecksIsSelected on the tabs - - When I click serviceChecks on the tabs - And I don't see exposed on the serviceChecks - - When I click exposedPaths on the tabs - And I see exposedPaths on the tabs - And I see 2 of the exposedPaths object - And I see combinedAddress on the exposedPaths like yaml - --- - - 10.0.0.1:8080/grpc-metrics - - 10.0.0.1:8083/http-metrics - --- - Scenario: A Proxy Service instance with only automatically exposed checks but no paths - Given 1 datacenter model with the value "dc1" - And 1 instance model from yaml - --- - - Service: - Kind: connect-proxy - Name: service-0-proxy - ID: service-0-proxy-with-id - Address: 10.0.0.1 - Proxy: - DestinationServiceName: service-0 - Expose: - Checks: true - Paths: [] - Checks: - - Name: http-check - Type: http - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0-proxy - node: node-0 - id: service-0-proxy-with-id - --- - Then the url should be /dc1/services/service-0-proxy/node-0/service-0-proxy-with-id - And I see serviceChecksIsSelected on the tabs - - And I don't see exposedPaths on the tabs - - When I click serviceChecks on the tabs - And I don't see exposed on the serviceChecks - - When I click nodeChecks on the tabs - And I don't see exposed on the nodeChecks diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxyinfo.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxyinfo.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxyinfo.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/proxyinfo.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,214 @@ +@setupApplicationTest +Feature: dc / services / instances / proxyinfo: Proxy Info tab + Background: + Given 1 datacenter model with the value "dc1" + Scenario: A Service instance without a Proxy does not display Proxy Info tab + Given 1 proxy model from yaml + --- + - ServiceProxy: + DestinationServiceName: service-1 + DestinationServiceID: ~ + --- + When I visit the instance page for yaml + --- + dc: dc1 + service: service-0 + node: node-0 + id: service-0-with-id + --- + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I don't see proxyInfo on the tabs + Scenario: A Service instance with a Proxy displays Proxy Info tab + When I visit the instance page for yaml + --- + dc: dc1 + service: service-0 + node: node-0 + id: service-0-with-id + --- + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I see proxyInfo on the tabs + + When I click proxyInfo on the tabs + + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/proxy + And I see proxyInfoIsSelected on the tabs + Scenario: A Proxy with health checks, upstreams, and exposed paths displays all info + Given 2 instance models from yaml + --- + - Service: + ID: service-0-with-id + Kind: consul + Node: + Node: node-0 + - Service: + ID: service-0-with-id-proxy + Kind: connect-proxy + Proxy: + DestinationServiceName: service-0 + Expose: + Checks: false + Paths: + - Path: /grpc-metrics + Protocol: grpc + LocalPathPort: 8081 + ListenerPort: 8080 + - Path: /http-metrics + Protocol: http + LocalPathPort: 8082 + ListenerPort: 8083 + - Path: /http-metrics-2 + Protocol: http + LocalPathPort: 8083 + ListenerPort: 8084 + Upstreams: + - DestinationType: service + DestinationName: service-2 + DestinationNamespace: default + LocalBindAddress: 127.0.0.1 + LocalBindPort: 1111 + - DestinationType: prepared_query + DestinationName: service-3 + LocalBindAddress: 127.0.0.1 + LocalBindPort: 1112 + Node: + Node: node-0 + Checks: + - Name: Service check + ServiceID: service-0-proxy + Output: Output of check + Status: passing + - Name: Service check + ServiceID: service-0-proxy + Output: Output of check + Status: warning + - Name: Service check + Type: http + ServiceID: service-0-proxy + Output: Output of check + Status: critical + - Name: Node check + ServiceID: "" + Output: Output of check + Status: passing + - Name: Node check + ServiceID: "" + Output: Output of check + Status: warning + - Name: Node check + ServiceID: "" + Output: Output of check + Status: critical + --- + When I visit the instance page for yaml + --- + dc: dc1 + service: service-0 + node: node-0 + id: service-0-with-id + --- + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I see proxyInfo on the tabs + + When I click proxyInfo on the tabs + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/proxy + + And I see 6 of the proxyChecks object + + And I see 2 of the upstreams object + And I see name on the upstreams like yaml + --- + - service-2 + - service-3 + --- + Scenario: A Proxy without health checks does not display Proxy Health section + And 2 instance models from yaml + --- + - Service: + ID: service-0-with-id + Kind: consul + Node: + Node: node-0 + - Service: + ID: service-0-with-id-proxy + Kind: connect-proxy + Node: + Node: node-0 + Checks: [] + --- + When I visit the instance page for yaml + --- + dc: dc1 + service: service-0 + node: node-0 + id: service-0-with-id + --- + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I see proxyInfo on the tabs + + When I click proxyInfo on the tabs + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/proxy + And I see 0 of the proxyChecks object + Scenario: A Proxy without upstreams does not display Upstreams section + And 2 instance models from yaml + --- + - Service: + ID: service-0-with-id + Kind: consul + Node: + Node: node-0 + - Service: + ID: service-0-with-id-proxy + Kind: connect-proxy + Proxy: + Upstreams: [] + Node: + Node: node-0 + --- + When I visit the instance page for yaml + --- + dc: dc1 + service: service-0 + node: node-0 + id: service-0-with-id + --- + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I see proxyInfo on the tabs + + When I click proxyInfo on the tabs + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/proxy + And I see 0 of the upstreams object + Scenario: A Proxy without exposed path does not display Exposed Paths section + And 2 instance models from yaml + --- + - Service: + ID: service-0-with-id + Kind: consul + Node: + Node: node-0 + - Service: + ID: service-0-with-id-proxy + Kind: connect-proxy + Proxy: + Expose: + Checks: false + Paths: [] + Node: + Node: node-0 + --- + When I visit the instance page for yaml + --- + dc: dc1 + service: service-0 + node: node-0 + id: service-0-with-id + --- + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I see proxyInfo on the tabs + + When I click proxyInfo on the tabs + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/proxy + And I see 0 of the exposedPaths object + + + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/show.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/show.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/show.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/show.feature 2020-12-10 21:46:52.000000000 +0000 @@ -11,7 +11,7 @@ Node: Node: node-0 - Service: - ID: service-0-with-id + ID: service-1-with-id Tags: ['Tag1', 'Tag2'] Meta: consul-dashboard-url: http://url.com @@ -47,43 +47,42 @@ Status: critical --- Scenario: A Service instance has no Proxy - Given 1 proxy model from yaml - --- - - ServiceProxy: - DestinationServiceName: service-1 - DestinationServiceID: ~ + Given 1 proxy model from yaml + --- + - ServiceProxy: + DestinationServiceName: service-1 + DestinationServiceID: ~ --- When I visit the instance page for yaml --- dc: dc1 service: service-0 node: another-node - id: service-0-with-id + id: service-1-with-id --- - Then the url should be /dc1/services/service-0/another-node/service-0-with-id - Then I don't see type on the proxy + Then the url should be /dc1/services/service-0/instances/another-node/service-1-with-id/health-checks Then I see externalSource like "nomad" And I don't see upstreams on the tabs - And I see serviceChecksIsSelected on the tabs + And I see healthChecksIsSelected on the tabs And I see 3 of the serviceChecks object - - When I click nodeChecks on the tabs - And I see nodeChecksIsSelected on the tabs And I see 3 of the nodeChecks object - When I click tags on the tabs - And I see tagsIsSelected on the tabs + When I click tags&Meta on the tabs + And I see tags&MetaIsSelected on the tabs Then I see the text "Tag1" in "[data-test-tags] span:nth-child(1)" Then I see the text "Tag2" in "[data-test-tags] span:nth-child(2)" - - When I click metaData on the tabs - And I see metaDataIsSelected on the tabs - And I see 3 of the metaData object - And the title should be "service-0-with-id - Consul" + And I see 3 of the metadata object + And the title should be "service-1-with-id - Consul" Scenario: A Service instance warns when deregistered whilst blocking + Given 1 proxy model from yaml + --- + - ServiceProxy: + DestinationServiceName: service-1 + DestinationServiceID: ~ + --- Given settings from yaml --- consul:client: @@ -98,67 +97,22 @@ node: node-0 id: service-0-with-id --- - Then the url should be /dc1/services/service-0/node-0/service-0-with-id + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks And an external edit results in 0 instance models And pause until I see the text "deregistered" in "[data-notification]" - - Scenario: A Service instance with a Proxy with only automatically exposed checks but no paths - Given 1 proxy model from yaml - --- - - ServiceProxy: - DestinationServiceName: service-0 - DestinationServiceID: ~ - Expose: - Checks: true - Paths: [] - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0 - node: another-node - id: service-0-with-id - --- - Then the url should be /dc1/services/service-0/another-node/service-0-with-id - And I see serviceChecksIsSelected on the tabs - - And I don't see exposedPaths on the tabs - - When I click serviceChecks on the tabs - And I see exposed on the serviceChecks - - When I click nodeChecks on the tabs - And I don't see exposed on the nodeChecks - - Scenario: A Service Instance with a Proxy with no automatically exposed checks + Scenario: A Service instance without a Proxy does not display Proxy Info tab Given 1 proxy model from yaml - --- - - ServiceProxy: - DestinationServiceName: service-0 - DestinationServiceID: ~ - Expose: - Checks: false - Paths: [] + --- + - ServiceProxy: + DestinationServiceName: service-1 + DestinationServiceID: ~ --- When I visit the instance page for yaml --- dc: dc1 service: service-0 - node: another-node + node: node-0 id: service-0-with-id --- - Then the url should be /dc1/services/service-0/another-node/service-0-with-id - And I see serviceChecksIsSelected on the tabs - - And I don't see exposedPaths on the tabs - - When I click serviceChecks on the tabs - And I don't see exposed on the serviceChecks - - When I click nodeChecks on the tabs - And I don't see exposed on the nodeChecks - - @ignore - Scenario: A Service Instance's proxy blocking query is closed when the instance is deregistered - Then ok - + Then the url should be /dc1/services/service-0/instances/node-0/service-0-with-id/health-checks + And I don't see proxy on the tabs \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/sidecar-proxy.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/sidecar-proxy.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/sidecar-proxy.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/sidecar-proxy.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -@setupApplicationTest -Feature: dc / services / instances / sidecar-proxy: Show Sidecar Proxy Service Instance - Scenario: A Sidecar Proxy Service instance - Given 1 datacenter model with the value "dc1" - And 1 service model from yaml - --- - - Service: - Kind: connect-proxy - Name: service-0-sidecar-proxy - ID: service-0-sidecar-proxy-with-id - Proxy: - DestinationServiceName: service-0 - DestinationServiceID: service-0-with-id - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0-sidecar-proxy - node: node-0 - id: service-0-sidecar-proxy-with-id - --- - Then the url should be /dc1/services/service-0-sidecar-proxy/node-0/service-0-sidecar-proxy-with-id - And I see destination on the proxy like "instance" - - And I see serviceChecksIsSelected on the tabs - - When I click upstreams on the tabs - And I see upstreamsIsSelected on the tabs - - diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-proxy.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-proxy.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-proxy.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-proxy.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -@setupApplicationTest -Feature: dc / services / instances / with-proxy: Show Service Instance with a proxy - Scenario: A Service instance has a Proxy (no DestinationServiceID) - Given 1 datacenter model with the value "dc1" - And 1 proxy model from yaml - --- - - ServiceProxy: - DestinationServiceID: ~ - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0 - node: node-0 - id: service-0-with-id - --- - Then the url should be /dc1/services/service-0/node-0/service-0-with-id - And I see type on the proxy like "proxy" - - And I see serviceChecksIsSelected on the tabs - And I don't see upstreams on the tabs diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-sidecar.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-sidecar.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-sidecar.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/instances/with-sidecar.feature 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -@setupApplicationTest -Feature: dc / services / instances / with-sidecar: Show Service Instance with a Sidecar Proxy - Scenario: A Service instance has a Sidecar Proxy (a DestinationServiceID) - Given 1 datacenter model with the value "dc1" - And 1 proxy model from yaml - --- - - Node: node-0 - ServiceProxy: - DestinationServiceID: service-0-with-id - DestinationServiceName: ~ - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0 - node: node-0 - id: service-0-with-id - --- - Then the url should be /dc1/services/service-0/node-0/service-0-with-id - And I see type on the proxy like "sidecar-proxy" - And I see serviceChecksIsSelected on the tabs - And I don't see upstreams on the tabs - Scenario: A Service instance has no Sidecar Proxy (a DestinationServiceID) on the same node - Given 1 datacenter model with the value "dc1" - And 1 proxy model from yaml - --- - - Node: node-1 - ServiceProxy: - DestinationServiceID: service-0-with-id - DestinationServiceName: ~ - --- - When I visit the instance page for yaml - --- - dc: dc1 - service: service-0 - node: node-0 - id: service-0-with-id - --- - Then the url should be /dc1/services/service-0/node-0/service-0-with-id - Then I don't see type on the proxy - - diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/list-blocking.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/list-blocking.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/list-blocking.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/list-blocking.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +@setupApplicationTest +Feature: dc / services / list blocking + Scenario: Viewing the listing pages for service + Given 1 datacenter model with the value "dc-1" + And 3 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-1 + Kind: ~ + - Name: Service-2 + Kind: ~ + --- + And a network latency of 100 + When I visit the services page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/services + And pause until I see 3 service models + And an external edit results in 5 service models + And pause until I see 3 service models + And an external edit results in 1 service model + And pause until I see 1 service model + And an external edit results in 0 service models + And pause until I see 0 service models diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/list.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/list.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/list.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/list.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +@setupApplicationTest +Feature: dc / services / list + Scenario: Listing service + Given 1 datacenter model with the value "dc-1" + And 3 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-1 + Kind: ~ + - Name: Service-2 + Kind: ~ + --- + When I visit the services page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/services + + Then I see 3 service models \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/dc-switch.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/dc-switch.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/dc-switch.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/dc-switch.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +@setupApplicationTest +Feature: dc / services / show / dc-switch : Switching Datacenters + Scenario: Seeing all services when switching datacenters + Given 2 datacenter models from yaml + --- + - dc-1 + - dc-2 + --- + And 1 node model + And 1 service model from yaml + --- + - Service: + Service: consul + Kind: ~ + --- + + When I visit the service page for yaml + --- + dc: dc-1 + service: consul + --- + Then the url should be /dc-1/services/consul/instances + And I see instancesUrl on the tabs contains "/dc-1/services/consul/instances" + When I click dc on the navigation + And I click dcs.1.name + Then the url should be /dc-2/services/consul/instances + And I see instancesUrl on the tabs contains "/dc-2/services/consul/instances" diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions-error.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions-error.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions-error.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions-error.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +@setupApplicationTest +Feature: dc / services / intentions-error: An error with intentions doesn't 500 the page + Scenario: + Given 1 datacenter model with the value "dc1" + And 1 node model + And 1 service model from yaml + --- + - Service: + Kind: ~ + Name: service-0 + ID: service-0-with-id + --- + And the url "/v1/connect/intentions" responds with a 500 status + When I visit the service page for yaml + --- + dc: dc1 + service: service-0 + --- + And the title should be "service-0 - Consul" + And I see 1 instance model diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/intentions.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,31 @@ +@setupApplicationTest +Feature: dc / services / intentions: Intentions per service + Background: + Given 1 datacenter model with the value "dc1" + And 1 node models + And 1 service model from yaml + --- + - Service: + Kind: ~ + Name: service-0 + ID: service-0-with-id + --- + And 3 intention models + When I visit the service page for yaml + --- + dc: dc1 + service: service-0 + --- + And the title should be "service-0 - Consul" + And I see intentions on the tabs + When I click intentions on the tabs + And I see intentionsIsSelected on the tabs + Scenario: I can see intentions + And I see 3 intention models + Scenario: I can delete intentions + And I click actions on the intentions + And I click delete on the intentions + And I click confirmDelete on the intentions + Then a DELETE request was made to "/v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=dc1" + And "[data-notification]" has the "notification-delete" class + And "[data-notification]" has the "success" class diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/services.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/services.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/services.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/services.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,57 @@ +@setupApplicationTest +Feature: dc / services / show / services + Background: + Given 1 datacenter model with the value "dc1" + And 1 node models + And 1 service model from yaml + --- + - Service: + Name: terminating-gateway-1 + Kind: terminating-gateway + --- + Scenario: Seeing the Linked Services tab + When I visit the service page for yaml + --- + dc: dc1 + service: terminating-gateway-1 + --- + And the title should be "terminating-gateway-1 - Consul" + And I see linkedServices on the tabs + When I click linkedServices on the tabs + And I see linkedServicesIsSelected on the tabs + Scenario: Seeing the list of Linked Services + Given 3 service models from yaml + When I visit the service page for yaml + --- + dc: dc1 + service: terminating-gateway-1 + --- + And the title should be "terminating-gateway-1 - Consul" + When I click linkedServices on the tabs + Then I see 3 service models on the tabs.linkedServicesTab component + Scenario: Don't see the Linked Services tab + Given 1 datacenter model with the value "dc1" + And 1 node models + And 1 service model from yaml + --- + - Service: + Name: [Name] + Kind: [Kind] + --- + When I visit the service page for yaml + --- + dc: dc1 + service: [Name] + --- + And the title should be "[Name] - Consul" + And I don't see linkedServices on the tabs + Where: + --------------------------------------------- + | Name | Kind | + | service | ~ | + | ingress-gateway | ingress-gateway | + | mesh-gateway | mesh-gateway | + --------------------------------------------- + + + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/upstreams.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/upstreams.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show/upstreams.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show/upstreams.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,54 @@ +@setupApplicationTest +Feature: dc / services / show / upstreams + Background: + Given 1 datacenter model with the value "dc1" + And 1 node models + And 1 service model from yaml + --- + - Service: + Name: ingress-gateway-1 + Kind: ingress-gateway + --- + Scenario: Seeing the Upstreams tab + When I visit the service page for yaml + --- + dc: dc1 + service: ingress-gateway-1 + --- + And the title should be "ingress-gateway-1 - Consul" + And I see upstreams on the tabs + When I click upstreams on the tabs + And I see upstreamsIsSelected on the tabs + Scenario: Seeing the list of Upstreams + Given 3 service models + When I visit the service page for yaml + --- + dc: dc1 + service: ingress-gateway-1 + --- + And the title should be "ingress-gateway-1 - Consul" + When I click upstreams on the tabs + Then I see 3 service models on the tabs.upstreamsTab component + Scenario: Don't see the Upstreams tab + Given 1 datacenter model with the value "dc1" + And 1 node models + And 1 service model from yaml + --- + - Service: + Name: [Name] + Kind: [Kind] + --- + When I visit the service page for yaml + --- + dc: dc1 + service: [Name] + --- + And the title should be "[Name] - Consul" + And I don't see upstreams on the tabs + Where: + --------------------------------------------- + | Name | Kind | + | service | ~ | + | terminating-gateway | terminating-gateway | + | mesh-gateway | mesh-gateway | + --------------------------------------------- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show.feature 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ And 1 service model from yaml --- - Service: + Kind: ~ Tags: ['Tag1', 'Tag2'] Meta: external-source: consul @@ -24,6 +25,7 @@ And 1 service model from yaml --- - Service: + Kind: ~ Tags: ['Tag1', 'Tag2'] Meta: external-source: 'not-supported' @@ -40,10 +42,13 @@ And 1 service model from yaml --- - Service: + Kind: ~ Tags: ['Tag1', 'Tag2'] - Service: + Kind: ~ Tags: ['Tag3', 'Tag1'] - Service: + Kind: ~ Tags: ['Tag2', 'Tag3'] --- When I visit the service page for yaml @@ -51,6 +56,7 @@ dc: dc1 service: service-0 --- + And I click tags on the tabs Then I see the text "Tag1" in "[data-test-tags] span:nth-child(1)" Then I see the text "Tag2" in "[data-test-tags] span:nth-child(2)" Then I see the text "Tag3" in "[data-test-tags] span:nth-child(3)" @@ -62,18 +68,21 @@ - Checks: - Status: passing Service: + Kind: ~ ID: passing-service-8080 Port: 8080 Address: 1.1.1.1 Node: Address: 1.2.2.2 - Service: + Kind: ~ ID: service-8000 Port: 8000 Address: 2.2.2.2 Node: Address: 2.3.3.3 - Service: + Kind: ~ ID: service-8888 Port: 8888 Address: 3.3.3.3 diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show-routing.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show-routing.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show-routing.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show-routing.feature 2020-12-10 21:46:52.000000000 +0000 @@ -1,12 +1,11 @@ @setupApplicationTest -Feature: dc / services / Show Routing for Service +Feature: dc / services / show-routing: Show Routing for Service Scenario: Given a service, the Routing tab should display Given 1 datacenter model with the value "dc1" And 1 node models And 1 service model from yaml --- - Service: - Kind: consul Name: service-0 ID: service-0-with-id --- @@ -17,33 +16,21 @@ --- And the title should be "service-0 - Consul" And I see routing on the tabs - Scenario: Given a service proxy, the Routing tab should not display - Given 1 datacenter model with the value "dc1" - And 1 node models - And 1 service model from yaml - --- - - Service: - Kind: connect-proxy - Name: service-0-proxy - ID: service-0-proxy-with-id - --- - When I visit the service page for yaml + Scenario: Given connect is disabled, the Routing tab should not display or error + Given 2 datacenter models from yaml --- - dc: dc1 - service: service-0-proxy + - dc1 + - dc2 --- - And the title should be "service-0-proxy - Consul" - And I don't see routing on the tabs - - Scenario: Given connect is disabled, the Routing tab should not display or error - Given 1 datacenter model with the value "dc1" And 1 node models - And 1 service model from yaml + And 2 service model from yaml --- - Service: - Kind: consul Name: service-0 ID: service-0-with-id + - Service: + Name: service-1 + ID: service-1-with-id --- And the url "/v1/discovery-chain/service-0?dc=dc1&ns=@namespace" responds with from yaml --- @@ -57,4 +44,17 @@ --- And I don't see routing on the tabs And I don't see the "[data-test-error]" element - + And I visit the service page for yaml + --- + dc: dc2 + service: service-1 + --- + And I see routing on the tabs + And I visit the service page for yaml + --- + dc: dc1 + service: service-0 + --- + Then a GET request wasn't made to "/v1/discovery-chain/service-0?dc=dc1&ns=@namespace" + And I don't see routing on the tabs + And I don't see the "[data-test-error]" element diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show-with-slashes.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show-with-slashes.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/show-with-slashes.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/show-with-slashes.feature 2020-12-10 21:46:52.000000000 +0000 @@ -17,5 +17,5 @@ Then the url should be /dc1/services Then I see 1 service model And I click service on the services - Then the url should be /dc1/services/hashicorp%2Fservice%2Fservice-0 + Then the url should be /dc1/services/hashicorp%2Fservice%2Fservice-0/instances diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/sorting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/sorting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/dc/services/sorting.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/dc/services/sorting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +@setupApplicationTest +Feature: dc / services / sorting + Scenario: + Given 1 datacenter model with the value "dc-1" + And 6 service models from yaml + --- + - Name: Service-A + Kind: ~ + ChecksPassing: 1 + ChecksWarning: 1 + ChecksCritical: 3 + - Name: Service-B + Kind: ~ + ChecksPassing: 1 + ChecksWarning: 1 + ChecksCritical: 5 + - Name: Service-C + Kind: ~ + ChecksPassing: 1 + ChecksWarning: 1 + ChecksCritical: 4 + - Name: Service-D + Kind: ~ + ChecksPassing: 1 + ChecksWarning: 5 + ChecksCritical: 1 + - Name: Service-E + Kind: ~ + ChecksPassing: 1 + ChecksWarning: 3 + ChecksCritical: 1 + - Name: Service-F + Kind: ~ + ChecksPassing: 1 + ChecksWarning: 4 + ChecksCritical: 1 + --- + When I visit the services page for yaml + --- + dc: dc-1 + --- + When I click selected on the sort + When I click options.1.button on the sort + Then I see name on the services vertically like yaml + --- + - Service-F + - Service-E + - Service-D + - Service-C + - Service-B + - Service-A + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see name on the services vertically like yaml + --- + - Service-A + - Service-B + - Service-C + - Service-D + - Service-E + - Service-F + --- + When I click selected on the sort + When I click options.2.button on the sort + Then I see name on the services vertically like yaml + --- + - Service-B + - Service-C + - Service-A + - Service-D + - Service-F + - Service-E + --- + When I click selected on the sort + When I click options.3.button on the sort + Then I see name on the services vertically like yaml + --- + - Service-E + - Service-F + - Service-D + - Service-A + - Service-C + - Service-B + --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/deleting.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/deleting.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/deleting.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/deleting.feature 2020-12-10 21:46:52.000000000 +0000 @@ -23,8 +23,6 @@ Where: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Edit | Listing | Method | URL | Data | - | kv | kvs | DELETE | /v1/kv/key-name?dc=datacenter&ns=@!namespace | ["key-name"] | - | intention | intentions | DELETE | /v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter | {"SourceName": "name", "ID": "ee52203d-989f-4f7a-ab5a-2bef004164ca"} | | token | tokens | DELETE | /v1/acl/token/001fda31-194e-4ff1-a5ec-589abf2cafd0?dc=datacenter&ns=@!namespace | {"AccessorID": "001fda31-194e-4ff1-a5ec-589abf2cafd0"} | # | acl | acls | PUT | /v1/acl/destroy/something?dc=datacenter | {"Name": "something", "ID": "something"} | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -52,11 +50,6 @@ Where: ----------------------------------------------------------------------------------------------------------------------------------------------------------- | Model | Method | URL | Slug | - | kv | DELETE | /v1/kv/key-name?dc=datacenter&ns=@!namespace | kv: key-name | - | intention | DELETE | /v1/connect/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=datacenter | intention: ee52203d-989f-4f7a-ab5a-2bef004164ca | | token | DELETE | /v1/acl/token/001fda31-194e-4ff1-a5ec-589abf2cafd0?dc=datacenter&ns=@!namespace | token: 001fda31-194e-4ff1-a5ec-589abf2cafd0 | # | acl | PUT | /v1/acl/destroy/something?dc=datacenter | acl: something | ----------------------------------------------------------------------------------------------------------------------------------------------------------- -@ignore - Scenario: Sort out the wide tables ^ - Then ok diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/login-errors.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/login-errors.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/login-errors.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/login-errors.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +@setupApplicationTest +Feature: login-errors: Login Errors + + Scenario: I get any 500 error that is not the specific legacy token cluster one + Given 1 datacenter model with the value "dc-1" + Given the url "/v1/acl/tokens?ns=@namespace" responds with a 500 status + When I visit the tokens page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/tokens + Then I see status on the error like "500" + Scenario: I get a 500 error from acl/tokens that is the specific legacy one + Given 1 datacenter model with the value "dc-1" + And the url "/v1/acl/tokens?ns=@namespace" responds with from yaml + --- + status: 500 + body: "rpc error making call: rpc: can't find method ACL.TokenRead" + --- + When I visit the tokens page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/tokens + Then ".app-view" has the "unauthorized" class + @notNamespaceable + Scenario: I get a 500 error from acl/token/self that is the specific legacy one + Given 1 datacenter model with the value "dc-1" + Given the url "/v1/acl/tokens?ns=@namespace" responds with from yaml + --- + status: 500 + body: "rpc error making call: rpc: can't find method ACL.TokenRead" + --- + And the url "/v1/acl/token/self" responds with from yaml + --- + status: 500 + body: "rpc error making call: rpc: can't find method ACL.TokenRead" + --- + And the url "/v1/acl/list" responds with a 403 status + When I visit the tokens page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/tokens + Then ".app-view" has the "unauthorized" class + And I click login on the navigation + And I fill in the auth form with yaml + --- + SecretID: something + --- + And I click submit on the authdialog.form + Then I see status on the error like "403" + diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/login.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/login.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/login.feature 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/login.feature 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +@setupApplicationTest +Feature: login + Scenario: Logging into the login page from ACLs tokens + Given 1 datacenter model with the value "dc-1" + And the url "/v1/acl/tokens" responds with a 403 status + When I visit the tokens page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/acls/tokens + And I click login on the navigation + And I fill in the auth form with yaml + --- + SecretID: something + --- + And I click submit on the authdialog.form + Then a GET request was made to "/v1/acl/token/self?dc=dc-1" from yaml + --- + headers: + X-Consul-Token: something + --- diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/page-navigation.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/page-navigation.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/page-navigation.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/page-navigation.feature 2020-12-10 21:46:52.000000000 +0000 @@ -42,24 +42,18 @@ Where: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Item | Model | URL | Endpoint | Back | - | service | services | /dc-1/services/service-0 | /v1/discovery-chain/service-0?dc=dc-1&ns=@namespace | /dc-1/services | - | node | nodes | /dc-1/nodes/node-0 | /v1/session/node/node-0?dc=dc-1&ns=@namespace | /dc-1/nodes | + | service | services | /dc-1/services/service-0/instances | /v1/discovery-chain/service-0?dc=dc-1&ns=@namespace | /dc-1/services | + | node | nodes | /dc-1/nodes/node-0/health-checks | /v1/session/node/node-0?dc=dc-1&ns=@namespace | /dc-1/nodes | | kv | kvs | /dc-1/kv/0-key-value/edit | /v1/session/info/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=dc-1&ns=@namespace | /dc-1/kv | # | acl | acls | /dc-1/acls/anonymous | /v1/acl/info/anonymous?dc=dc-1 | /dc-1/acls | - | intention | intentions | /dc-1/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca | /v1/internal/ui/services?dc=dc-1&ns=* | /dc-1/intentions | -# These Endpoints will be datacenters due to the datacenters checkbox selectors - | token | tokens | /dc-1/acls/tokens/ee52203d-989f-4f7a-ab5a-2bef004164ca | /v1/catalog/datacenters | /dc-1/acls/tokens | - | policy | policies | /dc-1/acls/policies/ee52203d-989f-4f7a-ab5a-2bef004164ca | /v1/catalog/datacenters | /dc-1/acls/policies | - # | token | tokens | /dc-1/acls/tokens/00000000-0000-0000-0000-000000000000 | /v1/acl/token/00000000-0000-0000-0000-000000000000?dc=dc-1 | /dc-1/acls/tokens | - # | policy | policies | /dc-1/acls/policies/ee52203d-989f-4f7a-ab5a-2bef004164ca | /v1/acl/policy/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=dc-1 | /dc-1/acls/policies | - -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Scenario: The node detail page calls the correct API endpoints When I visit the node page for yaml --- dc: dc-1 node: node-0 --- - Then the url should be /dc-1/nodes/node-0 + Then the url should be /dc-1/nodes/node-0/health-checks Then the last GET requests included from yaml --- - /v1/catalog/datacenters @@ -123,7 +117,7 @@ | Item | Model | URL | Back | | kv | kvs | /dc-1/kv/0-key-value/edit | /dc-1/kv | # | acl | acls | /dc-1/acls/anonymous | /dc-1/acls | - | intention | intentions | /dc-1/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca | /dc-1/intentions | + # | intention | intentions | /dc-1/intentions/ee52203d-989f-4f7a-ab5a-2bef004164ca | /dc-1/intentions | -------------------------------------------------------------------------------------------------------- @ignore Scenario: Clicking items in the listings, without depending on the salt ^ diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/components/intention-filter-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/components/intention-filter-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/components/intention-filter-steps.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/components/intention-filter-steps.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -import steps from '../steps'; - -// step definitions that are shared between features should be moved to the -// tests/acceptance/steps/steps.js file - -export default function(assert) { - return steps(assert).then('I should find a file', function() { - assert.ok(true, this.step); - }); -} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/navigation-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/navigation-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/navigation-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/navigation-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/sorting-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/sorting-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/sorting-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/policies/sorting-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/navigation-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/navigation-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/navigation-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/navigation-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/sorting-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/sorting-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/sorting-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/roles/sorting-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/navigation-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/navigation-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/navigation-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/navigation-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/sorting-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/sorting-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/sorting-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/acls/tokens/sorting-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/delete-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/delete-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/delete-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/delete-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/index-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/index-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/index-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/index-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/navigation-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/navigation-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/navigation-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/navigation-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/sorting-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/sorting-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/sorting-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/intentions/sorting-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/kvs/delete-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/kvs/delete-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/kvs/delete-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/kvs/delete-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/nspaces/sorting-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/nspaces/sorting-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/nspaces/sorting-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/nspaces/sorting-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/instances/proxyinfo-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/instances/proxyinfo-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/instances/proxyinfo-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/instances/proxyinfo-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-blocking-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-blocking-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-blocking-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-blocking-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/list-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/dc-switch-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/dc-switch-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/dc-switch-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/dc-switch-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-error-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-error-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-error-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-error-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/intentions-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/services-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/services-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/services-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/services-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/upstreams-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/upstreams-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/upstreams-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/show/upstreams-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/login-errors-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/login-errors-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/login-errors-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/login-errors-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from './steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/login-steps.js consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/login-steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/steps/login-steps.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/steps/login-steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import steps from './steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/submit-blank.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/submit-blank.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/submit-blank.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/submit-blank.feature 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,6 @@ | Model | Slug | | kv | kv | | acl | acls | - | intention | intentions | -------------------------- @ignore Scenario: The button is disabled diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/acceptance/token-header.feature consul-1.8.7+dfsg1/ui-v2/tests/acceptance/token-header.feature --- consul-1.7.4+dfsg1/ui-v2/tests/acceptance/token-header.feature 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/acceptance/token-header.feature 2020-12-10 21:46:52.000000000 +0000 @@ -21,11 +21,12 @@ dc: datacenter --- Then the url should be /datacenter/acls/tokens - Then I fill in with yaml + And I click login on the navigation + And I fill in the auth form with yaml --- - secret: [Token] + SecretID: [Token] --- - And I submit + And I click submit on the authdialog.form When I visit the index page Then the url should be /datacenter/services And a GET request was made to "/v1/internal/ui/services?dc=datacenter&ns=@namespace" from yaml diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/helpers/api.js consul-1.8.7+dfsg1/ui-v2/tests/helpers/api.js --- consul-1.7.4+dfsg1/ui-v2/tests/helpers/api.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/helpers/api.js 2020-12-10 21:46:52.000000000 +0000 @@ -5,10 +5,7 @@ import typeToURL from 'consul-ui/tests/helpers/type-to-url'; const addon = config['@hashicorp/ember-cli-api-double']; -const temp = addon.endpoints[0].split('/'); -temp.pop(); -const path = temp.join('/'); -const api = apiDouble(path, setCookies, typeToURL); +const api = apiDouble(addon, setCookies, typeToURL); export const get = function(_url, options = { headers: { cookie: {} } }) { const url = new URL(_url, 'http://localhost'); return new Promise(function(resolve) { diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/helpers/get-nspace-runner.js consul-1.8.7+dfsg1/ui-v2/tests/helpers/get-nspace-runner.js --- consul-1.7.4+dfsg1/ui-v2/tests/helpers/get-nspace-runner.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/helpers/get-nspace-runner.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +import Service from '@ember/service'; +export default function(type) { + return function(cb, withNspaces, withoutNspaces, container, assert) { + let CONSUL_NSPACES_ENABLED = true; + container.owner.register( + 'service:env', + Service.extend({ + env: function() { + return CONSUL_NSPACES_ENABLED; + }, + var: function() { + return CONSUL_NSPACES_ENABLED; + }, + }) + ); + const adapter = container.owner.lookup(`adapter:${type}`); + const serializer = container.owner.lookup(`serializer:${type}`); + const client = container.owner.lookup('service:client/http'); + let actual; + + actual = cb(adapter, serializer, client); + assert.deepEqual(actual[0], withNspaces); + + CONSUL_NSPACES_ENABLED = false; + actual = cb(adapter, serializer, client); + assert.deepEqual(actual[0], withoutNspaces); + }; +} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/helpers/normalizers.js consul-1.8.7+dfsg1/ui-v2/tests/helpers/normalizers.js --- consul-1.7.4+dfsg1/ui-v2/tests/helpers/normalizers.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/helpers/normalizers.js 2020-12-10 21:46:52.000000000 +0000 @@ -4,16 +4,27 @@ template: '', ...item, }; - }).concat( - item.ServiceIdentities.map(function(item) { - const policy = { - template: 'service-identity', - Name: item.ServiceName, - }; - if (typeof item.Datacenters !== 'undefined') { - policy.Datacenters = item.Datacenters; - } - return policy; - }) - ); + }) + .concat( + item.ServiceIdentities.map(function(item) { + const policy = { + template: 'service-identity', + Name: item.ServiceName, + }; + if (typeof item.Datacenters !== 'undefined') { + policy.Datacenters = item.Datacenters; + } + return policy; + }) + ) + .concat( + item.NodeIdentities.map(function(item) { + const policy = { + template: 'node-identity', + Name: item.NodeName, + Datacenter: item.Datacenter, + }; + return policy; + }) + ); }; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/helpers/type-to-url.js consul-1.8.7+dfsg1/ui-v2/tests/helpers/type-to-url.js --- consul-1.7.4+dfsg1/ui-v2/tests/helpers/type-to-url.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/helpers/type-to-url.js 2020-12-10 21:46:52.000000000 +0000 @@ -11,6 +11,9 @@ case 'proxy': requests = ['/v1/catalog/connect']; break; + case 'intention': + requests = ['/v1/connect/intentions']; + break; case 'node': requests = ['/v1/internal/ui/nodes', '/v1/internal/ui/node/']; break; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/helpers/yadda-annotations.js consul-1.8.7+dfsg1/ui-v2/tests/helpers/yadda-annotations.js --- consul-1.7.4+dfsg1/ui-v2/tests/helpers/yadda-annotations.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/helpers/yadda-annotations.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,5 @@ import { skip, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import { Promise } from 'rsvp'; import Yadda from 'yadda'; import { env } from '../../env'; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/coordinate-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/coordinate-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/coordinate-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/coordinate-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -7,9 +7,21 @@ const adapter = this.owner.lookup('adapter:coordinate'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/coordinate/nodes?dc=${dc}`; - const actual = adapter.requestForQuery(client.url, { + const actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, }); - assert.equal(actual, expected); + assert.equal(`${actual.method} ${actual.url}`, expected); + }); + test('requestForQuery returns the correct body', function(assert) { + const adapter = this.owner.lookup('adapter:coordinate'); + const client = this.owner.lookup('service:client/http'); + const expected = { + index: 1, + }; + const [actual] = adapter.requestForQuery(client.body, { + dc: dc, + index: 1, + }); + assert.deepEqual(actual, expected); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/dc-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/dc-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/dc-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/dc-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,11 +2,11 @@ import { setupTest } from 'ember-qunit'; module('Integration | Adapter | dc', function(hooks) { setupTest(hooks); - test('requestForFindAll returns the correct url', function(assert) { + test('requestForQuery returns the correct url', function(assert) { const adapter = this.owner.lookup('adapter:dc'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/catalog/datacenters`; - const actual = adapter.requestForFindAll(client.url); + const actual = adapter.requestForQuery(client.url); assert.equal(actual, expected); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/discovery-chain-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/discovery-chain-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/discovery-chain-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/discovery-chain-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,8 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; +import getNspaceRunner from 'consul-ui/tests/helpers/get-nspace-runner'; +const nspaceRunner = getNspaceRunner('discovery-chain'); module('Integration | Adapter | discovery-chain', function(hooks) { setupTest(hooks); const dc = 'dc-1'; @@ -9,11 +11,11 @@ const adapter = this.owner.lookup('adapter:discovery-chain'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/discovery-chain/${id}?dc=${dc}`; - const actual = adapter.requestForQueryRecord(client.url, { + const actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, }); - assert.equal(actual, expected); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test("requestForQueryRecord throws if you don't specify an id", function(assert) { const adapter = this.owner.lookup('adapter:discovery-chain'); @@ -24,4 +26,25 @@ }); }); }); + test('requestForQueryRecord returns the correct body', function(assert) { + return nspaceRunner( + (adapter, serializer, client) => { + return adapter.requestForQueryRecord(client.body, { + id: id, + dc: dc, + ns: 'team-1', + index: 1, + }); + }, + { + index: 1, + ns: 'team-1', + }, + { + index: 1, + }, + this, + assert + ); + }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/intention-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/intention-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/intention-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/intention-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -8,19 +8,21 @@ const adapter = this.owner.lookup('adapter:intention'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/connect/intentions?dc=${dc}`; - const actual = adapter.requestForQuery(client.url, { + const actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, }); - assert.equal(actual, expected); + assert.equal(`${actual.method} ${actual.url}`, expected); }); - test('urlForQueryRecord returns the correct url', function(assert) { + test('requestForQueryRecord returns the correct url', function(assert) { const adapter = this.owner.lookup('adapter:intention'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/connect/intentions/${id}?dc=${dc}`; - const actual = adapter.requestForQueryRecord(client.url, { - dc: dc, - id: id, - }); + const actual = adapter + .requestForQueryRecord(client.url, { + dc: dc, + id: id, + }) + .split('\n')[0]; assert.equal(actual, expected); }); test("requestForQueryRecord throws if you don't specify an id", function(assert) { diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/kv-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/kv-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/kv-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/kv-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -13,30 +13,28 @@ test(`requestForQuery returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:kv'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/kv/${id}?keys&dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/kv/${id}?keys&dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQueryRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:kv'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/kv/${id}?dc=${dc}`; - let actual = adapter.requestForQueryRecord(client.url, { + const expected = `GET /v1/kv/${id}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForCreateRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:kv'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/node-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/node-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/node-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/node-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -8,20 +8,20 @@ const adapter = this.owner.lookup('adapter:node'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/internal/ui/nodes?dc=${dc}`; - const actual = adapter.requestForQuery(client.url, { + const actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, }); - assert.equal(actual, expected); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test('requestForQueryRecord returns the correct url', function(assert) { const adapter = this.owner.lookup('adapter:node'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/internal/ui/node/${id}?dc=${dc}`; - const actual = adapter.requestForQueryRecord(client.url, { + const actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, }); - assert.equal(actual, expected); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test("requestForQueryRecord throws if you don't specify an id", function(assert) { const adapter = this.owner.lookup('adapter:node'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/nspace-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/nspace-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/nspace-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/nspace-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -9,8 +9,8 @@ const adapter = this.owner.lookup('adapter:nspace'); const client = this.owner.lookup('service:client/http'); const expected = `GET /v1/namespaces`; - const actual = adapter.requestForQuery(client.url, {}); - assert.equal(actual, expected); + const actual = adapter.requestForQuery(client.requestParams.bind(client), {}); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test('requestForQueryRecord returns the correct url/method', function(assert) { const adapter = this.owner.lookup('adapter:nspace'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/oidc-provider-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/oidc-provider-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/oidc-provider-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/oidc-provider-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,78 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +import { env } from '../../../env'; +const shouldHaveNspace = function(nspace) { + return typeof nspace !== 'undefined' && env('CONSUL_NSPACES_ENABLED'); +}; +module('Integration | Adapter | oidc-provider', function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const id = 'slug'; + const undefinedNspace = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test('requestForQuery returns the correct url/method', function(assert) { + const adapter = this.owner.lookup('adapter:oidc-provider'); + const client = this.owner.lookup('service:client/http'); + const expected = `GET /v1/internal/ui/oidc-auth-methods?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { + dc: dc, + ns: nspace, + }); + assert.equal(`${actual.method} ${actual.url}`, expected); + }); + test('requestForQueryRecord returns the correct url/method', function(assert) { + const adapter = this.owner.lookup('adapter:oidc-provider'); + const client = this.owner.lookup('service:client/http'); + const expected = `POST /v1/acl/oidc/auth-url?dc=${dc}`; + const actual = adapter + .requestForQueryRecord(client.url, { + dc: dc, + id: id, + ns: nspace, + }) + .split('\n') + .shift(); + assert.equal(actual, expected); + }); + test("requestForQueryRecord throws if you don't specify an id", function(assert) { + const adapter = this.owner.lookup('adapter:oidc-provider'); + const client = this.owner.lookup('service:client/http'); + assert.throws(function() { + adapter.requestForQueryRecord(client.url, { + dc: dc, + }); + }); + }); + test('requestForAuthorize returns the correct url/method', function(assert) { + const adapter = this.owner.lookup('adapter:oidc-provider'); + const client = this.owner.lookup('service:client/http'); + const expected = `POST /v1/acl/oidc/callback?dc=${dc}`; + const actual = adapter + .requestForAuthorize(client.url, { + dc: dc, + id: id, + code: 'code', + state: 'state', + ns: nspace, + }) + .split('\n') + .shift(); + assert.equal(actual, expected); + }); + test('requestForLogout returns the correct url/method', function(assert) { + const adapter = this.owner.lookup('adapter:oidc-provider'); + const client = this.owner.lookup('service:client/http'); + const expected = `POST /v1/acl/logout`; + const actual = adapter + .requestForLogout(client.url, { + id: id, + }) + .split('\n') + .shift(); + assert.equal(actual, expected); + }); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/policy-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/policy-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/policy-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/policy-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -20,29 +20,27 @@ test(`requestForQuery returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:policy'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/policies?dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/acl/policies?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQueryRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:policy'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/policy/${id}?dc=${dc}`; - let actual = adapter.requestForQueryRecord(client.url, { + const expected = `GET /v1/acl/policy/${id}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForCreateRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:policy'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/role-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/role-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/role-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/role-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -13,29 +13,27 @@ test(`requestForQuery returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:role'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/roles?dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/acl/roles?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQueryRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:role'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/role/${id}?dc=${dc}`; - let actual = adapter.requestForQueryRecord(client.url, { + const expected = `GET /v1/acl/role/${id}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForCreateRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:role'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/service-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/service-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/service-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/service-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -13,29 +13,41 @@ test(`requestForQuery returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:service'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/internal/ui/services?dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/internal/ui/services?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); + }); + test(`requestForQuery returns the correct url/method when called with gateway when nspace is ${nspace}`, function(assert) { + const adapter = this.owner.lookup('adapter:service'); + const client = this.owner.lookup('service:client/http'); + const gateway = 'gateway'; + const expected = `GET /v1/internal/ui/gateway-services-nodes/${gateway}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { + dc: dc, + ns: nspace, + gateway: gateway, + }); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQueryRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:service'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/health/service/${id}?dc=${dc}`; - let actual = adapter.requestForQueryRecord(client.url, { + const expected = `GET /v1/health/service/${id}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); }); test("requestForQueryRecord throws if you don't specify an id", function(assert) { diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/session-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/session-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/session-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/session-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -14,30 +14,28 @@ const adapter = this.owner.lookup('adapter:session'); const client = this.owner.lookup('service:client/http'); const node = 'node-id'; - const expected = `GET /v1/session/node/${node}?dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/session/node/${node}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, id: node, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQueryRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:session'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/session/info/${id}?dc=${dc}`; - let actual = adapter.requestForQueryRecord(client.url, { + const expected = `GET /v1/session/info/${id}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForDeleteRecord returns the correct url/method when the nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:session'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/token-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/token-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/adapters/token-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/adapters/token-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -13,57 +13,53 @@ test(`requestForQuery returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:token'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/tokens?dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/acl/tokens?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQuery returns the correct url/method when a policy is specified when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:token'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/tokens?policy=${id}&dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/acl/tokens?policy=${id}&dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, policy: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQuery returns the correct url/method when a role is specified when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:token'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/tokens?role=${id}&dc=${dc}`; - let actual = adapter.requestForQuery(client.url, { + const expected = `GET /v1/acl/tokens?role=${id}&dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQuery(client.requestParams.bind(client), { dc: dc, role: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForQueryRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:token'); const client = this.owner.lookup('service:client/http'); - const expected = `GET /v1/acl/token/${id}?dc=${dc}`; - let actual = adapter.requestForQueryRecord(client.url, { + const expected = `GET /v1/acl/token/${id}?dc=${dc}${ + shouldHaveNspace(nspace) ? `&ns=${nspace}` : `` + }`; + let actual = adapter.requestForQueryRecord(client.requestParams.bind(client), { dc: dc, id: id, ns: nspace, }); - actual = actual.split('\n'); - assert.equal(actual.shift().trim(), expected); - actual = actual.join('\n').trim(); - assert.equal(actual, `${shouldHaveNspace(nspace) ? `ns=${nspace}` : ``}`); + assert.equal(`${actual.method} ${actual.url}`, expected); }); test(`requestForCreateRecord returns the correct url/method when nspace is ${nspace}`, function(assert) { const adapter = this.owner.lookup('adapter:token'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/acl-filter-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/acl-filter-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/acl-filter-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/acl-filter-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | acl filter', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{acl-filter}}`); - - assert.dom('*').hasText('Search'); - - // Template block usage: - await render(hbs` - {{#acl-filter}}{{/acl-filter}} - `); - - assert.dom('*').hasText('Search'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/action-group-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/action-group-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/action-group-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/action-group-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | action group', function(hooks) { - setupRenderingTest(hooks); - - test("it doesn't render anything when used inline", async function(assert) { - await render(hbs`{{action-group}}`); - - assert.dom('*').hasText(''); - }); - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - // this.render(hbs`{{action-group}}`); - - // assert.equal( - // this.$() - // .text() - // .trim(), - // '' - // ); - - // Template block usage: - await render(hbs` - {{#action-group}}{{/action-group}} - `); - - assert.notEqual( - find('*') - .textContent.trim() - .indexOf('Open'), - -1 - ); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/auth-dialog-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/auth-dialog-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/auth-dialog-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/auth-dialog-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | auth-dialog', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/auth-profile-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/auth-profile-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/auth-profile-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/auth-profile-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | auth-profile', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.ok(this.element.textContent.indexOf('AccessorID') !== -1); + + // Template block usage: + await render(hbs` + + `); + + assert.ok(this.element.textContent.indexOf('AccessorID') !== -1); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/catalog-filter-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/catalog-filter-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/catalog-filter-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/catalog-filter-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | catalog filter', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{catalog-filter}}`); - - assert.equal(this.$().find('form').length, 1); - - // Template block usage: - await render(hbs` - {{#catalog-filter}}{{/catalog-filter}} - `); - - assert.equal(this.$().find('form').length, 1); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/changeable-set-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/changeable-set-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/changeable-set-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/changeable-set-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,4 @@ -import { module, test } from 'qunit'; +import { module, skip } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; @@ -6,20 +6,19 @@ module('Integration | Component | changeable set', function(hooks) { setupRenderingTest(hooks); - test('it renders', async function(assert) { + skip('it renders', async function(assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); await render(hbs`{{changeable-set}}`); - assert.dom('*').hasText(''); + assert.equal(this.element.textContent.trim(), ''); // Template block usage: await render(hbs` {{#changeable-set}} {{/changeable-set}} `); - - assert.dom('*').hasText(''); + assert.equal(this.element.textContent.trim(), ''); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/code-editor-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/code-editor-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/code-editor-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/code-editor-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -15,12 +15,12 @@ // this test is just to prove it renders something without producing // an error. It renders the number 1, but seems to also render some sort of trailing space // so just check for presence of CodeMirror - assert.equal(this.$().find('.CodeMirror').length, 1); + assert.equal(this.element.querySelectorAll('.CodeMirror').length, 1); // Template block usage: await render(hbs` {{#code-editor}}{{/code-editor}} `); - assert.equal(this.$().find('.CodeMirror').length, 1); + assert.equal(this.element.querySelectorAll('.CodeMirror').length, 1); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-external-source-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-external-source-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-external-source-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-external-source-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +import { module, skip } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | consul-external-source', function(hooks) { + setupRenderingTest(hooks); + + skip('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-instance-checks-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-instance-checks-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-instance-checks-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-instance-checks-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,25 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | consul-instance-checks', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + + `); + + assert.equal(this.element.textContent.trim(), ''); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-service-instance-list-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-service-instance-list-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-service-instance-list-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-service-instance-list-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +import { module, skip } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | consul-service-instance-list', function(hooks) { + setupRenderingTest(hooks); + + skip('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-service-list-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-service-list-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/consul-service-list-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/consul-service-list-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Component | consul-service-list', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs`{{consul-service-list}}`); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + {{#consul-service-list}}{{/consul-service-list}} + `); + + assert.equal(this.element.textContent.trim(), ''); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/copy-button-feedback-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/copy-button-feedback-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/copy-button-feedback-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/copy-button-feedback-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | copy button feedback', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{copy-button-feedback value='Click Me'}}`); - - assert.dom('*').hasText('Click Me'); - - // Template block usage: - await render(hbs` - {{#copy-button-feedback}}Click Me{{/copy-button-feedback}} - `); - - assert.dom('*').hasText('Click Me'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/data-source-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/data-source-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/data-source-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/data-source-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,121 @@ +import { module } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { clearRender, render, waitUntil } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +import test from 'ember-sinon-qunit/test-support/test'; +import Service from '@ember/service'; + +import { BlockingEventSource as RealEventSource } from 'consul-ui/utils/dom/event-source'; + +const createFakeBlockingEventSource = function() { + const EventSource = function(cb) { + this.readyState = 1; + this.source = cb; + }; + const o = EventSource.prototype; + [ + 'addEventListener', + 'removeEventListener', + 'dispatchEvent', + 'close', + 'open', + 'getCurrentEvent', + ].forEach(function(item) { + o[item] = function() {}; + }); + return EventSource; +}; +const BlockingEventSource = createFakeBlockingEventSource(); +module('Integration | Component | data-source', function(hooks) { + setupRenderingTest(hooks); + + hooks.beforeEach(function() { + this.actions = {}; + this.send = (actionName, ...args) => this.actions[actionName].apply(this, args); + }); + test('open and closed are called correctly when the src is changed', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + assert.expect(9); + const close = this.stub(); + const open = this.stub(); + const addEventListener = this.stub(); + const removeEventListener = this.stub(); + let count = 0; + const fakeService = Service.extend({ + open: function(uri, obj) { + open(uri); + const source = new BlockingEventSource(); + source.getCurrentEvent = function() { + return { data: uri }; + }; + source.addEventListener = addEventListener; + source.removeEventListener = removeEventListener; + return source; + }, + close: close, + }); + this.owner.register('service:data-source/fake-service', fakeService); + this.owner.inject('component:data-source', 'data', 'service:data-source/fake-service'); + this.actions.change = data => { + count++; + switch (count) { + case 1: + assert.equal(data, 'a', 'change was called first with "a"'); + setTimeout(() => this.set('src', 'b'), 0); + break; + case 2: + assert.equal(data, 'b', 'change was called second with "b"'); + break; + } + }; + + this.set('src', 'a'); + await render(hbs``); + assert.equal(this.element.textContent.trim(), ''); + await waitUntil(() => { + return close.calledTwice; + }); + assert.ok(open.calledTwice, 'open is called when src is set'); + assert.ok(close.calledTwice, 'close is called as open is called'); + await clearRender(); + await waitUntil(() => { + return close.calledThrice; + }); + assert.ok(open.calledTwice, 'open is _still_ only called when src is set'); + assert.ok(close.calledThrice, 'close is called an extra time as the component is destroyed'); + assert.equal(addEventListener.callCount, 4, 'all event listeners were added'); + assert.equal(removeEventListener.callCount, 4, 'all event listeners were removed'); + }); + test('error actions are triggered when errors are dispatched', async function(assert) { + const source = new RealEventSource(); + const error = this.stub(); + const close = this.stub(); + const fakeService = Service.extend({ + open: function(uri, obj) { + source.getCurrentEvent = function() { + return {}; + }; + return source; + }, + close: close, + }); + this.owner.register('service:data-source/fake-service', fakeService); + this.owner.inject('component:data-source', 'data', 'service:data-source/fake-service'); + this.actions.change = data => { + source.dispatchEvent({ type: 'error', error: {} }); + }; + this.actions.error = error; + await render( + hbs`` + ); + await waitUntil(() => { + return error.calledOnce; + }); + assert.ok(error.calledOnce, 'error action was called'); + assert.ok(close.calledOnce, 'close was called before the open'); + await clearRender(); + assert.ok(close.calledTwice, 'close was also called when the component is destroyed'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/dom-buffer-flush-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/dom-buffer-flush-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/dom-buffer-flush-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/dom-buffer-flush-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | dom buffer flush', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{dom-buffer-flush}}`); - - assert.dom('*').hasText(''); - - // Template block usage: - await render(hbs` - {{#dom-buffer-flush}} - template block text - {{/dom-buffer-flush}} - `); - - assert.dom('*').hasText('template block text'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/dom-buffer-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/dom-buffer-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/dom-buffer-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/dom-buffer-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | dom buffer', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{dom-buffer}}`); - - assert.dom('*').hasText(''); - - // Template block usage: - await render(hbs` - {{#dom-buffer}} - template block text - {{/dom-buffer}} - `); - - assert.dom('*').hasText('template block text'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/event-source-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/event-source-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/event-source-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/event-source-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | event-source', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/feedback-dialog-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/feedback-dialog-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/feedback-dialog-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/feedback-dialog-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -import { module, skip, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | feedback dialog', function(hooks) { - setupRenderingTest(hooks); - - skip("it doesn't render anything when used inline"); - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{feedback-dialog}}`); - - assert.dom('*').hasText(''); - - // Template block usage: - await render(hbs` - {{#feedback-dialog}} - {{#block-slot name='success'}} - {{/block-slot}} - {{#block-slot name='error'}} - {{/block-slot}} - {{/feedback-dialog}} - `); - - assert.dom('*').hasText(''); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/healthcheck-output-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/healthcheck-output-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/healthcheck-output-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/healthcheck-output-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | healthcheck output', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{healthcheck-output}}`); - - assert.equal(find('*').textContent.trim(), ''); - - // Template block usage: - await render(hbs` - {{#healthcheck-output}}{{/healthcheck-output}} - `); - assert.equal(find('*').textContent.trim(), ''); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/intention-filter-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/intention-filter-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/intention-filter-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/intention-filter-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | intention filter', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{intention-filter}}`); - - assert.dom('*').hasText('Search'); - - // // Template block usage: - // this.render(hbs` - // {{#intention-filter}} - // template block text - // {{/intention-filter}} - // `); - - // assert.equal(this.$().text().trim(), 'template block text'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/jwt-source-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/jwt-source-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/jwt-source-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/jwt-source-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,17 @@ +import { module, skip } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Component | jwt-source', function(hooks) { + setupRenderingTest(hooks); + + skip('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/modal-dialog-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/modal-dialog-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/modal-dialog-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/modal-dialog-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -10,7 +10,7 @@ // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - await render(hbs`{{modal-dialog}}`); + await render(hbs``); assert.ok( find('*') @@ -20,8 +20,7 @@ // Template block usage: await render(hbs` - {{#modal-dialog}} - {{/modal-dialog}} + `); assert.ok( diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/oidc-select-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/oidc-select-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/oidc-select-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/oidc-select-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +import { module, skip } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | oidc-select', function(hooks) { + setupRenderingTest(hooks); + + skip('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/phrase-editor-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/phrase-editor-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/phrase-editor-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/phrase-editor-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | phrase editor', function(hooks) { - setupRenderingTest(hooks); - - hooks.beforeEach(function() { - this.actions = {}; - this.send = (actionName, ...args) => this.actions[actionName].apply(this, args); - }); - - test('it renders a phrase', async function(assert) { - this.set('value', ['phrase']); - await render(hbs`{{phrase-editor value=value}}`); - assert.notEqual( - find('*') - .textContent.trim() - .indexOf('phrase'), - -1 - ); - }); - test('it calls onchange when a phrase is removed by clicking the phrase remove button and refocuses', async function(assert) { - assert.expect(3); - this.set('value', ['phrase']); - this.actions.change = function(e) { - assert.equal(e.target.value.length, 0); - }; - await render(hbs`{{phrase-editor value=value onchange=(action 'change')}}`); - assert.notEqual( - find('*') - .textContent.trim() - .indexOf('phrase'), - -1 - ); - const $input = this.$('input'); - const $button = this.$('button'); - $button.trigger('click'); - assert.equal(document.activeElement, $input.get(0)); - }); - test('it calls onchange when a phrase is added', async function(assert) { - assert.expect(1); - this.actions.change = function(e) { - assert.equal(e.target.value.length, 2); - }; - this.set('value', ['phrase']); - await render(hbs`{{phrase-editor value=value onchange=(action 'change')}}`); - const $input = this.$('input'); - $input.get(0).value = 'phrase 2'; - $input.trigger('input'); - $input.trigger('search'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/ref-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/ref-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/ref-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/ref-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,35 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | ref', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + const componentAction = function() {}; + // yield the action in the component, optionally changing the name + // {{ yield (hash + // publicAction=(action 'componentAction') + // )}} + const _yield = { + publicAction: componentAction, + }; + this.set('api', _yield); + await render(hbs``); + // the value is now available on the target + // in most cases `this` i.e. the scope of the template (component/controller) + assert.deepEqual(this.api, _yield); + + assert.equal(this.element.textContent.trim(), ''); + + // // Template block usage: + // await render(hbs` + // + // `); + + // assert.equal(this.element.textContent.trim(), ''); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/search-bar-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/search-bar-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/search-bar-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/search-bar-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | search-bar', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + this.set('search', function(e) {}); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), 'Search'); + + // Template block usage: + await render(hbs` + + `); + + assert.equal(this.element.textContent.trim(), 'Search'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/service-identity-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/service-identity-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/service-identity-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/service-identity-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; +import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; module('Integration | Component | service identity', function(hooks) { @@ -12,23 +12,13 @@ await render(hbs`{{service-identity}}`); - assert.ok( - find('*') - .textContent.trim() - .indexOf('service_prefix') !== -1, - '' - ); + assert.ok(this.element.textContent.trim().indexOf('service_prefix') !== -1); // Template block usage: await render(hbs` {{#service-identity}}{{/service-identity}} `); - assert.ok( - find('*') - .textContent.trim() - .indexOf('service_prefix') !== -1, - '' - ); + assert.ok(this.element.textContent.trim().indexOf('service_prefix') !== -1); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/sort-control-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/sort-control-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/sort-control-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/sort-control-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | sort control', function(hooks) { - setupRenderingTest(hooks); - - hooks.beforeEach(function() { - this.actions = {}; - this.send = (actionName, ...args) => this.actions[actionName].apply(this, args); - }); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{sort-control}}`); - - assert.dom('*').hasText(''); - - // Template block usage: - await render(hbs` - {{#sort-control}} - template block text - {{/sort-control}} - `); - - assert.dom('*').hasText('template block text'); - }); - test('it changes direction and calls onchange when clicked/activated', async function(assert) { - assert.expect(2); - let count = 0; - this.actions.change = e => { - if (count === 0) { - assert.equal(e.target.value, 'sort:desc'); - } else { - assert.equal(e.target.value, 'sort:asc'); - } - count++; - }; - await render(hbs`{{sort-control checked=true value='sort' onchange=(action 'change')}}`); - const $label = this.$('label'); - $label.trigger('click'); - $label.trigger('click'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/state-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/state-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/state-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/state-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,33 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | state', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + this.set('state', { + matches: function(id) { + return id === 'idle'; + }, + }); + await render(hbs` + + Currently Idle + + `); + + assert.equal(this.element.textContent.trim(), 'Currently Idle'); + await render(hbs` + + Currently Idle + + `); + + assert.equal(this.element.textContent.trim(), ''); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/tab-nav-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/tab-nav-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/tab-nav-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/tab-nav-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -10,15 +10,15 @@ // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - await render(hbs`{{tab-nav}}`); - - assert.dom('*').hasText(''); - - // Template block usage: await render(hbs` - {{#tab-nav}}{{/tab-nav}} + `); - assert.dom('*').hasText(''); + assert.dom('*').hasText('Tab Label'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/tag-list-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/tag-list-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/tag-list-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/tag-list-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -10,16 +10,17 @@ // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - await render(hbs`{{tag-list}}`); + await render(hbs``); - assert.dom('*').hasText(''); + assert.dom('dd').hasText('tag'); // Template block usage: await render(hbs` - {{#tag-list}} - {{/tag-list}} + + + `); - assert.dom('*').hasText(''); + assert.dom('dd').hasText('tag'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/token-list-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/token-list-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/token-list-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/token-list-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -12,7 +12,7 @@ await render(hbs`{{token-list}}`); - assert.dom('*').hasText(''); + assert.equal(this.element.textContent.trim(), ''); // Template block usage: await render(hbs` @@ -20,6 +20,6 @@ {{/token-list}} `); - assert.dom('*').hasText(''); + assert.equal(this.element.textContent.trim(), ''); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/components/tooltip-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/components/tooltip-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/components/tooltip-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/components/tooltip-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,25 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | tooltip', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + + + `); + + assert.equal(this.element.textContent.trim(), ''); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/atob-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/atob-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/atob-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/atob-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:atob', function(hooks) { +module('Integration | Helper | atob', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -11,6 +11,6 @@ this.set('inputValue', 'MTIzNA=='); await render(hbs`{{atob inputValue}}`); - assert.dom('*').hasText('1234'); + assert.equal(this.element.textContent.trim(), '1234'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/css-var-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/css-var-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/css-var-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/css-var-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('helper:css-var', function(hooks) { - setupRenderingTest(hooks); - - // Replace this with your real tests. - test("it renders nothing if the variable doesn't exist", async function(assert) { - this.set('inputValue', '1234'); - - await render(hbs`{{css-var inputValue}}`); - - assert.dom('*').hasText(''); - }); - test("it renders a default if the variable doesn't exist", async function(assert) { - this.set('inputValue', '1234'); - - await render(hbs`{{css-var inputValue 'none'}}`); - - assert.dom('*').hasText('none'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/default-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/default-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/default-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/default-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:default', function(hooks) { +module('Integration | Helper | default', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,13 +12,13 @@ await render(hbs`{{default inputValue}}`); - assert.dom('*').hasText('1234'); + assert.equal(this.element.textContent.trim(), '1234'); }); test('it renders the default value', async function(assert) { this.set('inputValue', ''); await render(hbs`{{default inputValue '1234'}}`); - assert.dom('*').hasText('1234'); + assert.equal(this.element.textContent.trim(), '1234'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/env-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/env-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/env-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/env-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:env', function(hooks) { +module('Integration | Helper | env', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{env inputValue}}`); - assert.dom('*').hasText('https://www.hashicorp.com'); + assert.equal(this.element.textContent.trim(), 'https://www.hashicorp.com'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/format-number-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/format-number-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/format-number-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/format-number-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:format-number', function(hooks) { +module('Integration | Helper | format-number', function(hooks) { setupRenderingTest(hooks); test('it renders a formatted number when passed a number', async function(assert) { @@ -11,6 +11,6 @@ await render(hbs`{{format-number inputValue}}`); - assert.dom('*').hasText('1,234'); + assert.equal(this.element.textContent.trim(), '1,234'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/is-href-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/is-href-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/is-href-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/is-href-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -2,7 +2,7 @@ import { setupRenderingTest } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; -module('helper:is-href', function(hooks) { +module('Integration | Helper | is-href', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -11,6 +11,6 @@ this.render(hbs`{{is-href inputValue}}`); - assert.dom('*').hasText('1234'); + assert.equal(this.element.textContent.trim(), '1234'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/last-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/last-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/last-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/last-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:last', function(hooks) { +module('Integration | Helper | last', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{last inputValue}}`); - assert.dom('*').hasText('/'); + assert.equal(this.element.textContent.trim(), '/'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/left-trim-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/left-trim-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/left-trim-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/left-trim-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:left-trim', function(hooks) { +module('Integration | Helper | left-trim', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{left-trim inputValue}}`); - assert.dom('*').hasText('1234'); + assert.equal(this.element.textContent.trim(), '1234'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/object-entries-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/object-entries-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/object-entries-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/object-entries-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:object-entries', function(hooks) { +module('Integration | Helper | object-entries', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{object-entries inputValue}}`); - assert.dom('*').hasText(Object.entries('1234').toString()); + assert.equal(this.element.textContent.trim(), Object.entries('1234').toString()); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/policy/datacenters-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/policy/datacenters-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/policy/datacenters-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/policy/datacenters-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:policy/datacenters', function(hooks) { +module('Integration | Helper | policy/datacenters', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{policy/datacenters inputValue}}`); - assert.dom('*').hasText('All'); + assert.equal(this.element.textContent.trim(), 'All'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/policy/typeof-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/policy/typeof-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/policy/typeof-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/policy/typeof-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:policy/typeof', function(hooks) { +module('Integration | Helper | policy/typeof', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{policy/typeof inputValue}}`); - assert.dom('*').hasText('role'); + assert.equal(this.element.textContent.trim(), 'role'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/right-trim-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/right-trim-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/right-trim-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/right-trim-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:right-trim', function(hooks) { +module('Integration | Helper | right-trim', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{right-trim inputValue}}`); - assert.dom('*').hasText('1234'); + assert.equal(this.element.textContent.trim(), '1234'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/searchable-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/searchable-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/searchable-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/searchable-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,17 @@ +import { module, skip } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Helper | searchable', function(hooks) { + setupRenderingTest(hooks); + + // Replace this with your real tests. + skip('it renders', async function(assert) { + this.set('inputValue', '1234'); + + await render(hbs`{{searchable inputValue}}`); + + assert.equal(this.element.textContent.trim(), '1234'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/service/external-source-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/service/external-source-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/service/external-source-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/service/external-source-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:service/external-source', function(hooks) { +module('Integration | Helper | service/external-source', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,13 +12,13 @@ await render(hbs`{{service/external-source inputValue}}`); - assert.dom('*').hasText('consul'); + assert.equal(this.element.textContent.trim(), 'consul'); }); test('it renders prefixed', async function(assert) { this.set('inputValue', { Meta: { 'external-source': 'consul' } }); await render(hbs`{{service/external-source inputValue prefix='external-source-'}}`); - assert.dom('*').hasText('external-source-consul'); + assert.equal(this.element.textContent.trim(), 'external-source-consul'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/slugify-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/slugify-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/slugify-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/slugify-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:slugify', function(hooks) { +module('Integration | Helper | slugify', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,7 +12,7 @@ await render(hbs`{{slugify inputValue}}`); - assert.dom('*').hasText('hi-there'); + assert.equal(this.element.textContent.trim(), 'hi-there'); }); skip("it copes with more values such as ' etc"); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/split-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/split-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/split-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/split-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:split', function(hooks) { +module('Integration | Helper | split', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{split inputValue}}`); - assert.dom('*').hasText('a,string,split,by,a,comma'); + assert.equal(this.element.textContent.trim(), 'a,string,split,by,a,comma'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/starts-with-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/starts-with-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/starts-with-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/starts-with-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:starts-with', function(hooks) { +module('Integration | Helper | starts-with', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{starts-with inputValue}}`); - assert.dom('*').hasText('false'); + assert.equal(this.element.textContent.trim(), 'false'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/state-matches-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/state-matches-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/state-matches-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/state-matches-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Helper | state-matches', function(hooks) { + setupRenderingTest(hooks); + + // Replace this with your real tests. + test('it returns true/false when the state or state in an array matches', async function(assert) { + this.set('state', { + matches: function(id) { + return id === 'idle'; + }, + }); + + await render(hbs`{{state-matches state 'idle'}}`); + assert.equal(this.element.textContent.trim(), 'true'); + + await render(hbs`{{state-matches state 'loading'}}`); + assert.equal(this.element.textContent.trim(), 'false'); + + await render(hbs`{{state-matches state (array 'idle' 'loading')}}`); + assert.equal(this.element.textContent.trim(), 'true'); + + await render(hbs`{{state-matches state (array 'loading' 'idle')}}`); + assert.equal(this.element.textContent.trim(), 'true'); + + await render(hbs`{{state-matches state (array 'loading' 'deleting')}}`); + assert.equal(this.element.textContent.trim(), 'false'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/substr-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/substr-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/substr-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/substr-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,17 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Helper | substr', function(hooks) { + setupRenderingTest(hooks); + + // Replace this with your real tests. + test('it returns last 2 characters of string', async function(assert) { + this.set('inputValue', 'd9a54409-648b-4327-974f-62a45c8c65f1'); + + await render(hbs`{{substr inputValue -4}}`); + + assert.equal(this.element.textContent.trim(), '65f1'); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/token/is-anonymous-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/token/is-anonymous-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/token/is-anonymous-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/token/is-anonymous-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:token/is-anonymous', function(hooks) { +module('Integration | Helper | token/is-anonymous', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{token/is-anonymous inputValue}}`); - assert.dom('*').hasText('false'); + assert.equal(this.element.textContent.trim(), 'false'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/token/is-legacy-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/token/is-legacy-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/helpers/token/is-legacy-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/helpers/token/is-legacy-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,7 +3,7 @@ import { render } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('helper:token/is-legacy', function(hooks) { +module('Integration | Helper | token/is-legacy', function(hooks) { setupRenderingTest(hooks); // Replace this with your real tests. @@ -12,6 +12,6 @@ await render(hbs`{{token/is-legacy inputValue}}`); - assert.dom('*').hasText('false'); + assert.equal(this.element.textContent.trim(), 'false'); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/mixins/with-resizing-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/mixins/with-resizing-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/mixins/with-resizing-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/mixins/with-resizing-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; -import { setupTest } from 'ember-qunit'; -import EmberObject from '@ember/object'; -import Mixin from 'consul-ui/mixins/with-resizing'; -module('Integration | Mixin | with-resizing', function(hooks) { - setupTest(hooks); - test('window.addEventListener, resize and window.removeEventListener are called once each through the entire lifecycle', function(assert) { - const win = { - innerWidth: 0, - innerHeight: 0, - addEventListener: this.stub(), - removeEventListener: this.stub(), - }; - const dom = { - viewport: function() { - return win; - }, - }; - const subject = EmberObject.extend(Mixin, { - dom: dom, - }).create(); - const resize = this.stub(subject, 'resize'); - subject.didInsertElement(); - subject.willDestroyElement(); - assert.ok(win.addEventListener.calledOnce); - assert.ok(resize.calledOnce); - assert.ok(resize.calledWith({ detail: { width: 0, height: 0 } })); - assert.ok(win.removeEventListener.calledOnce); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/serializers/dc-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/serializers/dc-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/serializers/dc-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/serializers/dc-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -3,14 +3,14 @@ import { get } from 'consul-ui/tests/helpers/api'; module('Integration | Serializer | dc', function(hooks) { setupTest(hooks); - test('respondForFindAll returns the correct data for list endpoint', function(assert) { + test('respondForQuery returns the correct data for list endpoint', function(assert) { const serializer = this.owner.lookup('serializer:dc'); const request = { url: `/v1/catalog/datacenters`, }; return get(request.url).then(function(payload) { const expected = payload; - const actual = serializer.respondForFindAll(function(cb) { + const actual = serializer.respondForQuery(function(cb) { const headers = {}; const body = payload; return cb(headers, body); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/serializers/oidc-provider-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/serializers/oidc-provider-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/serializers/oidc-provider-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/serializers/oidc-provider-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +import { get } from 'consul-ui/tests/helpers/api'; +import { + HEADERS_SYMBOL as META, + HEADERS_DATACENTER as DC, + HEADERS_NAMESPACE as NSPACE, +} from 'consul-ui/utils/http/consul'; + +module('Integration | Serializer | oidc-provider', function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const undefinedNspace = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`respondForQuery returns the correct data for list endpoint when the nspace is ${nspace}`, function(assert) { + const serializer = this.owner.lookup('serializer:oidc-provider'); + const request = { + url: `/v1/internal/ui/oidc-auth-methods?dc=${dc}`, + }; + return get(request.url).then(function(payload) { + const expected = payload.map(item => + Object.assign({}, item, { + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`, + }) + ); + const actual = serializer.respondForQuery( + function(cb) { + const headers = {}; + const body = payload; + return cb(headers, body); + }, + { + dc: dc, + } + ); + assert.deepEqual(actual, expected); + }); + }); + test(`respondForQueryRecord returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { + const serializer = this.owner.lookup('serializer:oidc-provider'); + const dc = 'dc-1'; + const id = 'slug'; + const request = { + url: `/v1/acl/oidc/auth-url?dc=${dc}`, + }; + return get(request.url).then(function(payload) { + const expected = Object.assign({}, payload, { + Name: id, + Datacenter: dc, + [META]: { + [DC.toLowerCase()]: dc, + [NSPACE.toLowerCase()]: payload.Namespace || undefinedNspace, + }, + Namespace: payload.Namespace || undefinedNspace, + uid: `["${payload.Namespace || undefinedNspace}","${dc}","${id}"]`, + }); + const actual = serializer.respondForQueryRecord( + function(cb) { + const headers = {}; + const body = payload; + return cb(headers, body); + }, + { + dc: dc, + id: id, + } + ); + assert.deepEqual(actual, expected); + }); + }); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/serializers/service-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/serializers/service-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/serializers/service-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/serializers/service-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -37,6 +37,39 @@ ns: nspace, } ); + assert.equal(actual[0].Namespace, expected[0].Namespace); + assert.equal(actual[0].Datacenter, expected[0].Datacenter); + assert.equal(actual[0].uid, expected[0].uid); + }); + }); + test(`respondForQuery returns the correct data for list endpoint when gateway is set when nspace is ${nspace}`, function(assert) { + const serializer = this.owner.lookup('serializer:service'); + const gateway = 'gateway'; + const request = { + url: `/v1/internal/ui/gateway-services-nodes/${gateway}?dc=${dc}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }`, + }; + return get(request.url).then(function(payload) { + const expected = payload.map(item => + Object.assign({}, item, { + Namespace: item.Namespace || undefinedNspace, + Datacenter: dc, + uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`, + }) + ); + const actual = serializer.respondForQuery( + function(cb) { + const headers = {}; + const body = payload; + return cb(headers, body); + }, + { + dc: dc, + ns: nspace, + gateway: gateway, + } + ); assert.deepEqual(actual, expected); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/dc-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/dc-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/dc-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/dc-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -24,11 +24,7 @@ assert.deepEqual( actual, expected(function(payload) { - return payload.map(item => ({ Name: item })).sort(function(a, b) { - if (a.Name < b.Name) return -1; - if (a.Name > b.Name) return 1; - return 0; - }); + return payload.map(item => ({ Name: item })); }) ); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/discovery-chain-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/discovery-chain-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/discovery-chain-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/discovery-chain-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -28,6 +28,7 @@ Datacenter: dc, uid: `["default","${dc}","${id}"]`, meta: { + cacheControl: undefined, cursor: undefined, }, }, diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/intention-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/intention-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/intention-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/intention-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,14 +1,19 @@ import { moduleFor, test } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; +import { get } from '@ember/object'; const NAME = 'intention'; moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { integration: true, }); +const now = new Date().getTime(); const dc = 'dc-1'; const id = 'token-name'; const nspace = 'default'; test('findAllByDatacenter returns the correct data for list endpoint', function(assert) { + get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { + return now; + }; return repo( 'Intention', 'findAllByDatacenter', @@ -29,6 +34,7 @@ Object.assign({}, item, { CreatedAt: new Date(item.CreatedAt), UpdatedAt: new Date(item.UpdatedAt), + SyncTime: now, Datacenter: dc, // TODO: nspace isn't required here, once we've // refactored out our Serializer this can go diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/node-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/node-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/node-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/node-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -63,6 +63,7 @@ Datacenter: dc, uid: `["${nspace}","${dc}","${item.ID}"]`, meta: { + cacheControl: undefined, cursor: undefined, dc: dc, nspace: nspace, diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/policy-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/policy-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/policy-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/policy-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,5 @@ import { moduleFor, test, skip } from 'ember-qunit'; +import { get } from '@ember/object'; import repo from 'consul-ui/tests/helpers/repo'; const NAME = 'policy'; moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { @@ -6,11 +7,15 @@ integration: true, }); skip('translate returns the correct data for the translate endpoint'); +const now = new Date().getTime(); const dc = 'dc-1'; const id = 'policy-name'; const undefinedNspace = 'default'; [undefinedNspace, 'team-1', undefined].forEach(nspace => { test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { + return now; + }; return repo( 'Policy', 'findAllByDatacenter', @@ -32,6 +37,7 @@ expected(function(payload) { return payload.map(item => Object.assign({}, item, { + SyncTime: now, Datacenter: dc, Namespace: item.Namespace || undefinedNspace, uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.ID}"]`, @@ -64,6 +70,12 @@ Datacenter: dc, Namespace: item.Namespace || undefinedNspace, uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.ID}"]`, + meta: { + cacheControl: undefined, + cursor: undefined, + dc: dc, + nspace: item.Namespace || undefinedNspace, + }, }); }) ); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/role-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/role-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/role-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/role-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,4 +1,5 @@ import { moduleFor, test } from 'ember-qunit'; +import { get } from '@ember/object'; import repo from 'consul-ui/tests/helpers/repo'; import { createPolicies } from 'consul-ui/tests/helpers/normalizers'; @@ -7,11 +8,15 @@ // Specify the other units that are required for this test. integration: true, }); +const now = new Date().getTime(); const dc = 'dc-1'; const id = 'role-name'; const undefinedNspace = 'default'; [undefinedNspace, 'team-1', undefined].forEach(nspace => { test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { + return now; + }; return repo( 'Role', 'findAllByDatacenter', @@ -33,6 +38,7 @@ expected(function(payload) { return payload.map(item => Object.assign({}, item, { + SyncTime: now, Datacenter: dc, Namespace: item.Namespace || undefinedNspace, uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.ID}"]`, diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/service-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/service-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/service-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/service-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,5 +1,4 @@ import { moduleFor, test } from 'ember-qunit'; -import { skip } from 'qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { get } from '@ember/object'; const NAME = 'service'; @@ -7,7 +6,6 @@ // Specify the other units that are required for this test. integration: true, }); -skip('findBySlug returns a sane tree'); const dc = 'dc-1'; const id = 'token-name'; const now = new Date().getTime(); @@ -41,44 +39,6 @@ }); }); - test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Service', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/internal/ui/services?dc=${dc}${ - typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` - }`, - { - CONSUL_SERVICE_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findAllByDatacenter(dc, nspace || undefinedNspace); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(item => - Object.assign({}, item, { - SyncTime: now, - Datacenter: dc, - Namespace: item.Namespace || undefinedNspace, - uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`, - }) - ); - }) - ); - } - ); - }); test(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { return repo( 'Service', @@ -118,6 +78,7 @@ service.Tags = [...new Set(payload.Nodes[0].Service.Tags)]; service.Namespace = payload.Namespace; service.meta = { + cacheControl: undefined, cursor: undefined, dc: dc, nspace: payload.Namespace, @@ -127,6 +88,48 @@ }) ); } + ); + }); + test(`findGatewayBySlug returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { + return now; + }; + const gateway = 'gateway'; + const conf = { + cursor: 1, + }; + return repo( + 'Service', + 'findGatewayBySlug', + this.subject(), + function retrieveStub(stub) { + return stub( + `/v1/internal/ui/gateway-services-nodes/${gateway}?dc=${dc}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }`, + { + CONSUL_SERVICE_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findGatewayBySlug(gateway, dc, nspace || undefinedNspace, conf); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(item => + Object.assign({}, item, { + SyncTime: now, + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`, + }) + ); + }) + ); + } ); }); }); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/token-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/token-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/services/repository/token-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/services/repository/token-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -69,6 +69,12 @@ CreateTime: new Date(item.CreateTime), Namespace: item.Namespace || undefinedNspace, uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.AccessorID}"]`, + meta: { + cacheControl: undefined, + cursor: undefined, + dc: dc, + nspace: item.Namespace || undefinedNspace, + }, Policies: createPolicies(item), }); }) diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/integration/utils/dom/event-source/callable-test.js consul-1.8.7+dfsg1/ui-v2/tests/integration/utils/dom/event-source/callable-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/integration/utils/dom/event-source/callable-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/integration/utils/dom/event-source/callable-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,5 @@ import domEventSourceCallable from 'consul-ui/utils/dom/event-source/callable'; import EventTarget from 'consul-ui/utils/dom/event-target/rsvp'; -import { Promise } from 'rsvp'; import { module, skip } from 'qunit'; import { setupTest } from 'ember-qunit'; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/lib/page-object/radiogroup.js consul-1.8.7+dfsg1/ui-v2/tests/lib/page-object/radiogroup.js --- consul-1.7.4+dfsg1/ui-v2/tests/lib/page-object/radiogroup.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/lib/page-object/radiogroup.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -import { is, clickable } from 'ember-cli-page-object'; -import ucfirst from 'consul-ui/utils/ucfirst'; -export default function(name, items, blankKey = 'all') { - return items.reduce(function(prev, item, i, arr) { - // if item is empty then it means 'all' - // otherwise camelCase based on something-here = somethingHere for the key - const key = - item === '' - ? blankKey - : item.split('-').reduce(function(prev, item, i, arr) { - if (i === 0) { - return item; - } - return prev + ucfirst(item); - }); - return { - ...prev, - ...{ - [`${key}IsSelected`]: is( - ':checked', - `[data-test-radiobutton="${name}_${item}"] > input[type="radio"]` - ), - [key]: clickable(`[data-test-radiobutton="${name}_${item}"]`), - }, - }; - }, {}); -} diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/acl-filter.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/acl-filter.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/acl-filter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/acl-filter.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -import { triggerable } from 'ember-cli-page-object'; -import radiogroup from 'consul-ui/tests/lib/page-object/radiogroup'; -export default { - ...radiogroup('type', ['', 'management', 'client']), - ...{ - scope: '[data-test-acl-filter]', - search: triggerable('keypress', '[name="s"]'), - }, -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/catalog-filter.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/catalog-filter.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/catalog-filter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/catalog-filter.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -import { triggerable } from 'ember-cli-page-object'; -import radiogroup from 'consul-ui/tests/lib/page-object/radiogroup'; -export default { - ...radiogroup('status', ['', 'passing', 'warning', 'critical']), - ...{ - scope: '[data-test-catalog-filter]', - search: triggerable('keypress', '[name="s"]'), - }, -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/freetext-filter.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/freetext-filter.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/freetext-filter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/freetext-filter.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -import { triggerable } from 'ember-cli-page-object'; -export default { - search: triggerable('keypress', '[name="s"]'), -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/intention-filter.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/intention-filter.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/intention-filter.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/intention-filter.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -import { triggerable } from 'ember-cli-page-object'; -import radiogroup from 'consul-ui/tests/lib/page-object/radiogroup'; -export default { - ...radiogroup('action', ['', 'allow', 'deny']), - ...{ - scope: '[data-test-intention-filter]', - search: triggerable('keypress', '[name="s"]'), - }, -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/page.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/page.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/page.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/page.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -import { clickable, is } from 'ember-cli-page-object'; -const page = { - navigation: ['services', 'nodes', 'kvs', 'acls', 'intentions', 'docs', 'settings'].reduce( - function(prev, item, i, arr) { - const key = item; - return Object.assign({}, prev, { - [key]: clickable(`[data-test-main-nav-${item}] a`), - }); - }, - { - scope: '[data-test-navigation]', - } - ), - footer: ['copyright', 'docs'].reduce( - function(prev, item, i, arr) { - const key = item; - return Object.assign({}, prev, { - [key]: clickable(`[data-test-main-nav-${item}`), - }); - }, - { - scope: '[data-test-footer]', - } - ), -}; -page.navigation.dc = clickable('[data-test-datacenter-menu] button'); -page.navigation.nspace = clickable('[data-test-nspace-menu] button'); -page.navigation.manageNspaces = clickable('[data-test-main-nav-nspaces] a'); -page.navigation.manageNspacesIsVisible = is( - ':checked', - '[data-test-nspace-menu] > input[type="checkbox"]' -); -export default page; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/policy-form.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/policy-form.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/policy-form.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/policy-form.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -export default (submitable, cancelable, radiogroup, text) => ( - scope = '[data-test-policy-form]' -) => { - return { - // this should probably be settable - resetScope: true, - scope: scope, - prefix: 'policy', - ...submitable(), - ...cancelable(), - ...radiogroup('template', ['', 'service-identity'], 'policy'), - rules: { - error: text('[data-test-rules] strong'), - }, - }; -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/policy-selector.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/policy-selector.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/policy-selector.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/policy-selector.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -export default (clickable, deletable, collection, alias, policyForm) => ( - scope = '#policies', - createSelector = '[for="new-policy-toggle"]' -) => { - return { - scope: scope, - create: clickable(createSelector), - form: policyForm('#new-policy-toggle + div'), - policies: alias('selectedOptions'), - selectedOptions: collection( - '[data-test-policies] [data-test-tabular-row]', - deletable( - { - expand: clickable('label'), - }, - '+ tr' - ) - ), - }; -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/role-form.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/role-form.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/role-form.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/role-form.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -export default (submitable, cancelable, policySelector) => () => { - return { - // this should probably be settable - resetScope: true, - scope: '[data-test-role-form]', - prefix: 'role', - ...submitable(), - ...cancelable(), - policies: policySelector('', '[data-test-create-policy]'), - }; -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/role-selector.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/role-selector.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/role-selector.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/role-selector.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -export default (clickable, deletable, collection, alias, roleForm) => (scope = '#roles') => { - return { - scope: scope, - create: clickable('[for="new-role-toggle"]'), - form: roleForm(), - roles: alias('selectedOptions'), - selectedOptions: collection( - '[data-test-roles] [data-test-tabular-row]', - deletable({ - actions: clickable('label'), - }) - ), - }; -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/components/token-list.js consul-1.8.7+dfsg1/ui-v2/tests/pages/components/token-list.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/components/token-list.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/components/token-list.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -export default (clickable, attribute, collection, deletable) => () => { - return collection('[data-test-tokens] [data-test-tabular-row]', { - id: attribute('data-test-token', '[data-test-token]'), - token: clickable('a'), - ...deletable(), - }); -}; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -6,6 +6,7 @@ use: clickable('[data-test-use]'), confirmUse: clickable('button.type-delete'), }) - ) + ), + 'main' ); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -11,6 +11,6 @@ confirmUse: clickable('[data-test-confirm-use]'), }) ), - filter: filter, + filter: filter('[data-test-acl-filter]'), }); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/policies/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/policies/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/policies/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/policies/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,9 +1,9 @@ export default function(visitable, submitable, deletable, cancelable, clickable, tokenList) { return { visit: visitable(['/:dc/acls/policies/:policy', '/:dc/acls/policies/create']), - ...submitable({}, 'form > div'), - ...cancelable({}, 'form > div'), - ...deletable({}, 'form > div'), + ...submitable({}, 'main form > div'), + ...cancelable({}, 'main form > div'), + ...deletable({}, 'main form > div'), tokens: tokenList(), validDatacenters: clickable('[name="policy[isScoped]"]'), datacenter: clickable('[name="policy[Datacenters]"]'), diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/policies/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/policies/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/policies/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/policies/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,24 +1,7 @@ -export default function( - visitable, - deletable, - creatable, - clickable, - attribute, - collection, - text, - filter -) { +export default function(visitable, creatable, policies, popoverSelect) { return creatable({ visit: visitable('/:dc/acls/policies'), - policies: collection( - '[data-test-tabular-row]', - deletable({ - name: attribute('data-test-policy', '[data-test-policy]'), - description: text('[data-test-description]'), - policy: clickable('a'), - actions: clickable('label'), - }) - ), - filter: filter, + policies: policies(), + sort: popoverSelect(), }); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/roles/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/roles/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/roles/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/roles/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,9 +1,9 @@ export default function(visitable, submitable, deletable, cancelable, policySelector, tokenList) { return { visit: visitable(['/:dc/acls/roles/:role', '/:dc/acls/roles/create']), - ...submitable({}, 'form > div'), - ...cancelable({}, 'form > div'), - ...deletable({}, 'form > div'), + ...submitable({}, 'main form > div'), + ...cancelable({}, 'main form > div'), + ...deletable({}, 'main form > div'), policies: policySelector(''), tokens: tokenList(), }; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/roles/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/roles/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/roles/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/roles/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,25 +1,8 @@ -export default function( - visitable, - deletable, - creatable, - clickable, - attribute, - collection, - text, - filter -) { - return creatable({ +export default function(visitable, creatable, roles, popoverSelect) { + return { visit: visitable('/:dc/acls/roles'), - roles: collection( - '[data-test-tabular-row]', - deletable({ - name: attribute('data-test-role', '[data-test-role]'), - description: text('[data-test-description]'), - policy: text('[data-test-policy].policy', { multiple: true }), - serviceIdentity: text('[data-test-policy].policy-service-identity', { multiple: true }), - actions: clickable('label'), - }) - ), - filter: filter, - }); + roles: roles(), + sort: popoverSelect(), + ...creatable(), + }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/tokens/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/tokens/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/tokens/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/tokens/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -9,9 +9,9 @@ ) { return { visit: visitable(['/:dc/acls/tokens/:token', '/:dc/acls/tokens/create']), - ...submitable({}, 'form > div'), - ...cancelable({}, 'form > div'), - ...deletable({}, 'form > div'), + ...submitable({}, 'main form > div'), + ...cancelable({}, 'main form > div'), + ...deletable({}, 'main form > div'), use: clickable('[data-test-use]'), confirmUse: clickable('button.type-delete'), clone: clickable('[data-test-clone]'), diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/tokens/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/tokens/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/acls/tokens/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/acls/tokens/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,34 +1,9 @@ -export default function( - visitable, - submitable, - deletable, - creatable, - clickable, - attribute, - collection, - text, - filter -) { - return submitable( - creatable({ - visit: visitable('/:dc/acls/tokens'), - update: text('[data-test-notification-update]'), - tokens: collection( - '[data-test-tabular-row]', - deletable({ - id: attribute('data-test-token', '[data-test-token]'), - description: text('[data-test-description]'), - policy: text('[data-test-policy].policy', { multiple: true }), - role: text('[data-test-policy].role', { multiple: true }), - serviceIdentity: text('[data-test-policy].policy-service-identity', { multiple: true }), - token: clickable('a'), - actions: clickable('label'), - use: clickable('[data-test-use]'), - confirmUse: clickable('[data-test-confirm-use]'), - clone: clickable('[data-test-clone]'), - }) - ), - filter: filter, - }) - ); +export default function(visitable, creatable, text, tokens, popoverSelect) { + return { + visit: visitable('/:dc/acls/tokens'), + update: text('[data-test-notification-update]'), + tokens: tokens(), + sort: popoverSelect(), + ...creatable(), + }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/intentions/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/intentions/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/intentions/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/intentions/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -4,6 +4,7 @@ deletable({ visit: visitable(['/:dc/intentions/:intention', '/:dc/intentions/create']), }) - ) + ), + 'main' ); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/intentions/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/intentions/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/intentions/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/intentions/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,8 @@ -export default function(visitable, deletable, creatable, clickable, attribute, collection, filter) { +export default function(visitable, creatable, clickable, intentions, popoverSelect) { return creatable({ visit: visitable('/:dc/intentions'), - intentions: collection( - '[data-test-tabular-row]', - deletable({ - source: attribute('data-test-intention-source', '[data-test-intention-source]'), - destination: attribute( - 'data-test-intention-destination', - '[data-test-intention-destination]' - ), - action: attribute('data-test-intention-action', '[data-test-intention-action]'), - intention: clickable('a'), - actions: clickable('label'), - }) - ), - filter: filter, + intentions: intentions(), + sort: popoverSelect(), + create: clickable('[data-test-create]'), }); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/kv/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/kv/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/kv/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/kv/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -8,7 +8,7 @@ .map(encodeURIComponent) .join('/'); }), - ...submitable(), + ...submitable({}, 'main'), ...cancelable(), ...deletable(), session: { diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/kv/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/kv/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/kv/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/kv/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,13 +1,6 @@ -export default function(visitable, deletable, creatable, clickable, attribute, collection) { +export default function(visitable, creatable, kvs) { return creatable({ visit: visitable(['/:dc/kv/:kv', '/:dc/kv'], str => str), - kvs: collection( - '[data-test-tabular-row]', - deletable({ - name: attribute('data-test-kv', '[data-test-kv]'), - kv: clickable('a'), - actions: clickable('label'), - }) - ), + kvs: kvs(), }); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nodes/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nodes/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nodes/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nodes/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -9,6 +9,6 @@ nodes: collection('[data-test-node]', node), healthyNodes: collection('.healthy [data-test-node]', node), unHealthyNodes: collection('.unhealthy [data-test-node]', node), - filter: filter, + filter: filter('[data-test-catalog-filter]'), }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nodes/show.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nodes/show.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nodes/show.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nodes/show.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,20 @@ -export default function(visitable, deletable, clickable, attribute, collection, radiogroup) { +export default function(visitable, deletable, clickable, attribute, collection, tabs, text) { return { visit: visitable('/:dc/nodes/:node'), - tabs: radiogroup('tab', [ + tabs: tabs('tab', [ 'health-checks', - 'services', + 'service-instances', 'round-trip-time', 'lock-sessions', - 'meta-data', + 'metadata', ]), healthchecks: collection('[data-test-node-healthcheck]', { name: attribute('data-test-node-healthcheck'), }), - services: collection('#services [data-test-tabular-row]', { - id: attribute('data-test-service-id', '[data-test-service-id]'), - name: attribute('data-test-service-name', '[data-test-service-name]'), - port: attribute('data-test-service-port', '.port'), - externalSource: attribute('data-test-external-source', 'a span'), + services: collection('.consul-service-instance-list > ul > li:not(:first-child)', { + name: text('[data-test-service-name]'), + port: attribute('data-test-service-port', '[data-test-service-port]'), + externalSource: attribute('data-test-external-source', '[data-test-external-source]'), }), sessions: collection( '#lock-sessions [data-test-tabular-row]', @@ -23,6 +22,6 @@ TTL: attribute('data-test-session-ttl', '[data-test-session-ttl]'), }) ), - metaData: collection('#meta-data [data-test-tabular-row]', {}), + metadata: collection('#metadata [data-test-tabular-row]', {}), }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nspaces/edit.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nspaces/edit.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nspaces/edit.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nspaces/edit.js 2020-12-10 21:46:52.000000000 +0000 @@ -8,9 +8,9 @@ ) { return { visit: visitable(['/:dc/namespaces/:namespace', '/:dc/namespaces/create']), - ...submitable({}, 'form > div'), - ...cancelable({}, 'form > div'), - ...deletable({}, 'form > div'), + ...submitable({}, 'main form > div'), + ...cancelable({}, 'main form > div'), + ...deletable({}, 'main form > div'), policies: policySelector(), roles: roleSelector(), }; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nspaces/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nspaces/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/nspaces/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/nspaces/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,24 +1,7 @@ -export default function( - visitable, - deletable, - creatable, - clickable, - attribute, - collection, - text, - filter -) { +export default function(visitable, creatable, nspaces, popoverSelect) { return creatable({ visit: visitable('/:dc/namespaces'), - nspaces: collection( - '[data-test-tabular-row]', - deletable({ - action: attribute('data-test-nspace-action', '[data-test-nspace-action]'), - description: text('[data-test-description]'), - nspace: clickable('a'), - actions: clickable('label'), - }) - ), - filter: filter, + nspaces: nspaces(), + sort: popoverSelect(), }); } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/services/index.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/services/index.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/services/index.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/services/index.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,16 +1,18 @@ -export default function(visitable, clickable, attribute, collection, page, filter) { +export default function(visitable, clickable, text, attribute, present, collection, popoverSelect) { + const service = { + name: text('[data-test-service-name]'), + service: clickable('a'), + externalSource: attribute('data-test-external-source', '[data-test-external-source]'), + kind: attribute('data-test-kind', '[data-test-kind]'), + proxy: present('[data-test-proxy]'), + }; return { visit: visitable('/:dc/services'), - services: collection('[data-test-service]', { - name: attribute('data-test-service'), - service: clickable('a'), - externalSource: attribute('data-test-external-source', 'a span'), - }), + services: collection('.consul-service-list > ul > li:not(:first-child)', service), dcs: collection('[data-test-datacenter-picker]', { name: clickable('a'), }), - navigation: page.navigation, - filter: filter, home: clickable('[data-test-home]'), + sort: popoverSelect(), }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/services/instance.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/services/instance.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/services/instance.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/services/instance.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,38 +1,22 @@ -export default function(visitable, attribute, collection, text, radiogroup) { +export default function(visitable, attribute, collection, text, tabs) { return { - visit: visitable('/:dc/services/:service/:node/:id'), - externalSource: attribute('data-test-external-source', 'h1 span'), - tabs: radiogroup('tab', [ - 'service-checks', - 'node-checks', - 'addresses', - 'upstreams', - 'exposed-paths', - 'tags', - 'meta-data', - ]), - serviceChecks: collection('#service-checks [data-test-healthchecks] li', { - exposed: attribute('data-test-exposed', '[data-test-exposed]'), + visit: visitable('/:dc/services/:service/instances/:node/:id'), + externalSource: attribute('data-test-external-source', '[data-test-external-source]', { + scope: '.title', }), - nodeChecks: collection('#node-checks [data-test-healthchecks] li', { - exposed: attribute('data-test-exposed', '[data-test-exposed]'), - }), - upstreams: collection('#upstreams [data-test-tabular-row]', { + tabs: tabs('tab', ['health-checks', 'proxy-info', 'addresses', 'tags-&-meta']), + serviceChecks: collection('[data-test-service-checks] li'), + nodeChecks: collection('[data-test-node-checks] li'), + upstreams: collection('[data-test-proxy-upstreams] > li', { name: text('[data-test-destination-name]'), - datacenter: text('[data-test-destination-datacenter]'), - type: text('[data-test-destination-type]'), - address: text('[data-test-local-bind-address]'), }), - exposedPaths: collection('#exposed-paths [data-test-tabular-row]', { + exposedPaths: collection('[data-test-proxy-exposed-paths] > tbody tr', { combinedAddress: text('[data-test-combined-address]'), }), + proxyChecks: collection('[data-test-proxy-checks] li'), addresses: collection('#addresses [data-test-tabular-row]', { address: text('[data-test-address]'), }), - metaData: collection('#meta-data [data-test-tabular-row]', {}), - proxy: { - type: attribute('data-test-proxy-type', '[data-test-proxy-type]'), - destination: attribute('data-test-proxy-destination', '[data-test-proxy-destination]'), - }, + metadata: collection('.metadata [data-test-tabular-row]', {}), }; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/services/show.js consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/services/show.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages/dc/services/show.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages/dc/services/show.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,14 +1,50 @@ -export default function(visitable, attribute, collection, text, filter, radiogroup) { - return { +export default function( + visitable, + clickable, + attribute, + collection, + text, + intentions, + filter, + tabs +) { + const page = { visit: visitable('/:dc/services/:service'), - externalSource: attribute('data-test-external-source', 'h1 span'), - instances: collection('#instances [data-test-tabular-row]', { - address: text('[data-test-address]'), + externalSource: attribute('data-test-external-source', '[data-test-external-source]', { + scope: '.title', }), dashboardAnchor: { href: attribute('href', '[data-test-dashboard-anchor]'), }, - tabs: radiogroup('tab', ['instances', 'routing', 'tags']), - filter: filter, + tabs: tabs('tab', [ + 'instances', + 'linked-services', + 'upstreams', + 'intentions', + 'routing', + 'tags', + ]), + filter: filter(), + + dcs: collection('[data-test-datacenter-picker]', { + name: clickable('a'), + }), + + // TODO: These need to somehow move to subpages + instances: collection('.consul-service-instance-list > ul > li:not(:first-child)', { + address: text('[data-test-address]'), + }), + intentions: intentions(), + }; + page.tabs.upstreamsTab = { + services: collection('.consul-upstream-list > ul > li:not(:first-child)', { + name: text('[data-test-service-name]'), + }), + }; + page.tabs.linkedServicesTab = { + services: collection('.consul-service-list > ul > li:not(:first-child)', { + name: text('[data-test-service-name]'), + }), }; + return page; } diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/pages.js consul-1.8.7+dfsg1/ui-v2/tests/pages.js --- consul-1.7.4+dfsg1/ui-v2/tests/pages.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/pages.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,33 +1,50 @@ import { - create, + create as createPage, clickable, is, attribute, collection, text, isPresent, + triggerable, } from 'ember-cli-page-object'; + import { alias } from 'ember-cli-page-object/macros'; import { visitable } from 'consul-ui/tests/lib/page-object/visitable'; + +// utils import createDeletable from 'consul-ui/tests/lib/page-object/createDeletable'; import createSubmitable from 'consul-ui/tests/lib/page-object/createSubmitable'; import createCreatable from 'consul-ui/tests/lib/page-object/createCreatable'; import createCancelable from 'consul-ui/tests/lib/page-object/createCancelable'; -import page from 'consul-ui/tests/pages/components/page'; -import radiogroup from 'consul-ui/tests/lib/page-object/radiogroup'; -import freetextFilter from 'consul-ui/tests/pages/components/freetext-filter'; -import catalogFilter from 'consul-ui/tests/pages/components/catalog-filter'; -import aclFilter from 'consul-ui/tests/pages/components/acl-filter'; -import intentionFilter from 'consul-ui/tests/pages/components/intention-filter'; -import tokenListFactory from 'consul-ui/tests/pages/components/token-list'; -import policyFormFactory from 'consul-ui/tests/pages/components/policy-form'; -import policySelectorFactory from 'consul-ui/tests/pages/components/policy-selector'; -import roleFormFactory from 'consul-ui/tests/pages/components/role-form'; -import roleSelectorFactory from 'consul-ui/tests/pages/components/role-selector'; -// TODO: should this specifically be modal or form? -// should all forms be forms? +// components +import pageFactory from 'consul-ui/components/hashicorp-consul/pageobject'; + +import radiogroup from 'consul-ui/components/radio-group/pageobject'; +import tabgroup from 'consul-ui/components/tab-nav/pageobject'; +import authFormFactory from 'consul-ui/components/auth-form/pageobject'; +import freetextFilterFactory from 'consul-ui/components/freetext-filter/pageobject'; + +import searchBarFactory from 'consul-ui/components/search-bar/pageobject'; + +import policyFormFactory from 'consul-ui/components/policy-form/pageobject'; +import policySelectorFactory from 'consul-ui/components/policy-selector/pageobject'; +import roleFormFactory from 'consul-ui/components/role-form/pageobject'; +import roleSelectorFactory from 'consul-ui/components/role-selector/pageobject'; + +import popoverSelectFactory from 'consul-ui/components/popover-select/pageobject'; +import morePopoverMenuFactory from 'consul-ui/components/more-popover-menu/pageobject'; + +import tokenListFactory from 'consul-ui/components/token-list/pageobject'; +import consulTokenListFactory from 'consul-ui/components/consul-token-list/pageobject'; +import consulRoleListFactory from 'consul-ui/components/consul-role-list/pageobject'; +import consulPolicyListFactory from 'consul-ui/components/consul-policy-list/pageobject'; +import consulIntentionListFactory from 'consul-ui/components/consul-intention-list/pageobject'; +import consulNspaceListFactory from 'consul-ui/components/consul-nspace-list/pageobject'; +import consulKvListFactory from 'consul-ui/components/consul-kv-list/pageobject'; +// pages import index from 'consul-ui/tests/pages/index'; import dcs from 'consul-ui/tests/pages/dc'; import settings from 'consul-ui/tests/pages/settings'; @@ -51,74 +68,120 @@ import nspaces from 'consul-ui/tests/pages/dc/nspaces/index'; import nspace from 'consul-ui/tests/pages/dc/nspaces/edit'; +// utils const deletable = createDeletable(clickable); const submitable = createSubmitable(clickable, is); const creatable = createCreatable(clickable, is); const cancelable = createCancelable(clickable, is); +// components const tokenList = tokenListFactory(clickable, attribute, collection, deletable); - +const authForm = authFormFactory(submitable, clickable, attribute); +const freetextFilter = freetextFilterFactory(triggerable); +const catalogToolbar = searchBarFactory(freetextFilter); +const catalogFilter = searchBarFactory(freetextFilter, () => + radiogroup('status', ['', 'passing', 'warning', 'critical']) +); +const aclFilter = searchBarFactory(freetextFilter, () => + radiogroup('type', ['', 'management', 'client']) +); const policyForm = policyFormFactory(submitable, cancelable, radiogroup, text); const policySelector = policySelectorFactory(clickable, deletable, collection, alias, policyForm); - const roleForm = roleFormFactory(submitable, cancelable, policySelector); const roleSelector = roleSelectorFactory(clickable, deletable, collection, alias, roleForm); +const morePopoverMenu = morePopoverMenuFactory(clickable); +const popoverSelect = popoverSelectFactory(clickable, collection); + +const consulIntentionList = consulIntentionListFactory(collection, clickable, attribute, deletable); +const consulNspaceList = consulNspaceListFactory( + collection, + clickable, + attribute, + text, + morePopoverMenu +); +const consulKvList = consulKvListFactory(collection, clickable, attribute, deletable); +const consulTokenList = consulTokenListFactory( + collection, + clickable, + attribute, + text, + morePopoverMenu +); +const consulRoleList = consulRoleListFactory( + collection, + clickable, + attribute, + text, + morePopoverMenu +); +const consulPolicyList = consulPolicyListFactory( + collection, + clickable, + attribute, + text, + morePopoverMenu +); + +const page = pageFactory(clickable, attribute, is, authForm); + +// pages +const create = function(appView) { + appView = { + ...page(), + ...appView, + }; + return createPage(appView); +}; export default { index: create(index(visitable, collection)), dcs: create(dcs(visitable, clickable, attribute, collection)), services: create( - services(visitable, clickable, attribute, collection, page, catalogFilter, radiogroup) - ), - service: create(service(visitable, attribute, collection, text, catalogFilter, radiogroup)), - instance: create(instance(visitable, attribute, collection, text, radiogroup)), - nodes: create(nodes(visitable, clickable, attribute, collection, catalogFilter)), - node: create(node(visitable, deletable, clickable, attribute, collection, radiogroup)), - kvs: create(kvs(visitable, deletable, creatable, clickable, attribute, collection)), - kv: create(kv(visitable, attribute, submitable, deletable, cancelable, clickable)), - acls: create(acls(visitable, deletable, creatable, clickable, attribute, collection, aclFilter)), - acl: create(acl(visitable, submitable, deletable, cancelable, clickable)), - policies: create( - policies( + services( visitable, - deletable, - creatable, clickable, + text, attribute, + isPresent, collection, - text, - freetextFilter + popoverSelect, + radiogroup ) ), - policy: create(policy(visitable, submitable, deletable, cancelable, clickable, tokenList)), - roles: create( - roles(visitable, deletable, creatable, clickable, attribute, collection, text, freetextFilter) - ), - // TODO: This needs a policyList - role: create(role(visitable, submitable, deletable, cancelable, policySelector, tokenList)), - tokens: create( - tokens( + service: create( + service( visitable, - submitable, - deletable, - creatable, clickable, attribute, collection, text, - freetextFilter + consulIntentionList, + catalogToolbar, + tabgroup ) ), + instance: create(instance(visitable, attribute, collection, text, tabgroup)), + nodes: create(nodes(visitable, clickable, attribute, collection, catalogFilter)), + node: create(node(visitable, deletable, clickable, attribute, collection, tabgroup, text)), + kvs: create(kvs(visitable, creatable, consulKvList)), + kv: create(kv(visitable, attribute, submitable, deletable, cancelable, clickable)), + acls: create(acls(visitable, deletable, creatable, clickable, attribute, collection, aclFilter)), + acl: create(acl(visitable, submitable, deletable, cancelable, clickable)), + policies: create(policies(visitable, creatable, consulPolicyList, popoverSelect)), + policy: create(policy(visitable, submitable, deletable, cancelable, clickable, tokenList)), + roles: create(roles(visitable, creatable, consulRoleList, popoverSelect)), + // TODO: This needs a policyList + role: create(role(visitable, submitable, deletable, cancelable, policySelector, tokenList)), + tokens: create(tokens(visitable, creatable, text, consulTokenList, popoverSelect)), token: create( token(visitable, submitable, deletable, cancelable, clickable, policySelector, roleSelector) ), intentions: create( - intentions(visitable, deletable, creatable, clickable, attribute, collection, intentionFilter) + intentions(visitable, creatable, clickable, consulIntentionList, popoverSelect) ), intention: create(intention(visitable, submitable, deletable, cancelable)), - nspaces: create( - nspaces(visitable, deletable, creatable, clickable, attribute, collection, text, freetextFilter) - ), + nspaces: create(nspaces(visitable, creatable, consulNspaceList, popoverSelect)), nspace: create( nspace(visitable, submitable, deletable, cancelable, policySelector, roleSelector) ), diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/dom.js consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/dom.js --- consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/dom.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/dom.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,16 +1,17 @@ export default function(scenario, assert, pauseUntil, find, currentURL, clipboard) { scenario .then('pause until I see the text "$text" in "$selector"', function(text, selector) { - return pauseUntil(function(resolve) { + return pauseUntil(function(resolve, reject, retry) { const $el = find(selector); if ($el) { const hasText = $el.textContent.indexOf(text) !== -1; if (hasText) { - assert.ok(hasText, `Expected to see "${text}" in "${selector}"`); - resolve(); + return resolve(); } + return reject(); } - }); + return retry(); + }, `Expected to see "${text}" in "${selector}"`); }) .then(['I see the text "$text" in "$selector"'], function(text, selector) { const textContent = find(selector).textContent; diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/http.js consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/http.js --- consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/http.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/http.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,4 @@ +const not = `(n't| not)?`; export default function(scenario, assert, lastNthRequest) { // lastNthRequest should return a // { @@ -21,12 +22,17 @@ ); assert.equal(diff.size, 0, `Expected requests "${[...diff].join(', ')}"`); }) - .then('a $method request was made to "$endpoint"', function(method, url) { + .then(`a $method request was${not} made to "$endpoint"`, function(method, negative, url) { + const isNegative = typeof negative !== 'undefined'; const requests = lastNthRequest(null, method); - const request = requests.find(function(item) { + const request = requests.some(function(item) { return method === item.method && url === item.url; }); - assert.ok(request, `Expected a ${method} request url to ${url}`); + if (isNegative) { + assert.notOk(request, `Didn't expect a ${method} request url to ${url}`); + } else { + assert.ok(request, `Expected a ${method} request url to ${url}`); + } }) .then('a $method request was made to "$endpoint" with no body', function(method, url) { const requests = lastNthRequest(null, method); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/model.js consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/model.js --- consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/model.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/model.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,20 @@ export default function(scenario, assert, find, currentPage, pauseUntil, pluralize) { scenario .then('pause until I see $number $model model[s]?', function(num, model) { - return pauseUntil(function(resolve) { + return pauseUntil(function(resolve, reject, retry) { const len = currentPage()[pluralize(model)].filter(function(item) { return item.isVisible; }).length; if (len === num) { - assert.equal(len, num, `Expected ${num} ${model}s, saw ${len}`); - resolve(); + return resolve(); } - }); + return retry(); + }, `Expected ${num} ${model}s`); }) .then(['I see $num $model model[s]?'], function(num, model) { const len = currentPage()[pluralize(model)].filter(function(item) { return item.isVisible; }).length; - assert.equal(len, num, `Expected ${num} ${pluralize(model)}, saw ${len}`); }) .then(['I see $num $model model[s]? on the $component component'], function( diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/page.js consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/page.js --- consul-1.7.4+dfsg1/ui-v2/tests/steps/assertions/page.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/steps/assertions/page.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,12 @@ /* eslint no-console: "off" */ -const notFound = 'Element not found'; +import $ from '-jquery'; + +const elementNotFound = 'Element not found'; +// this error comes from our pageObject `find `function +const pageObjectNotFound = 'PageObject not found'; const cannotDestructure = "Cannot destructure property 'context'"; const cannotReadContext = "Cannot read property 'context' of undefined"; + // checking for existence of pageObjects is pretty difficult // errors are thrown but we should check to make sure its the error that we // want and not another real error @@ -22,11 +27,20 @@ // that real errors are picked up by the tests, so if this gets unmanageable at any point // look at checking for the instance of e being TypeError or similar const isExpectedError = function(e) { - return [notFound, cannotDestructure, cannotReadContext].some(item => e.message.startsWith(item)); + return [pageObjectNotFound, elementNotFound, cannotDestructure, cannotReadContext].some(item => + e.message.startsWith(item) + ); }; - +const dont = `( don't| shouldn't| can't)?`; export default function(scenario, assert, find, currentPage) { scenario + .then(['I see $num of the $component object'], function(num, component) { + assert.equal( + currentPage()[component].length, + num, + `Expected to see ${num} items in the ${component} object` + ); + }) .then('I see $property on the $component like yaml\n$yaml', function( property, component, @@ -57,106 +71,98 @@ ); }); }) - .then(['I see $property on the $component'], function(property, component) { - // TODO: Time to work on repetition - // Collection - var obj; - if (typeof currentPage()[component].objectAt === 'function') { - obj = currentPage()[component].objectAt(0); - } else { - obj = currentPage()[component]; - } - let _component; - if (typeof obj === 'function') { - const func = obj[property].bind(obj); - try { - _component = func(); - } catch (e) { - console.error(e); - throw new Error( - `The '${property}' property on the '${component}' page object doesn't exist` - ); - } - } else { - _component = obj; - } - assert.ok(_component[property], `Expected to see ${property} on ${component}`); - }) - .then(['I see $num of the $component object'], function(num, component) { - assert.equal( - currentPage()[component].length, - num, - `Expected to see ${num} items in the ${component} object` - ); + .then('I see $property on the $component vertically like yaml\n$yaml', function( + property, + component, + yaml + ) { + const _component = currentPage()[component]; + const iterator = new Array(_component.length).fill(true); + assert.ok(iterator.length > 0); + + const items = _component.toArray().sort((a, b) => { + return ( + $(a.scope) + .get(0) + .getBoundingClientRect().top - + $(b.scope) + .get(0) + .getBoundingClientRect().top + ); + }); + + iterator.forEach(function(item, i, arr) { + const actual = typeof items[i][property] === 'undefined' ? null : items[i][property]; + + const expected = typeof yaml[i] === 'number' ? yaml[i].toString() : yaml[i]; + + assert.deepEqual( + actual, + expected, + `Expected to see ${property} on ${component}[${i}] as ${JSON.stringify( + expected + )}, was ${JSON.stringify(actual)}` + ); + }); }) - .then(["I don't see $property on the $component"], function(property, component) { - const message = `Expected to not see ${property} on ${component}`; - // Cope with collections - let obj; - if (typeof currentPage()[component].objectAt === 'function') { - obj = currentPage()[component].objectAt(0); - } else { - obj = currentPage()[component]; - } - let prop; + .then([`I${dont} see $property`, `I${dont} see $property on the $component`], function( + negative, + property, + component + ) { + const isNegative = typeof negative !== 'undefined'; + let message = `Expected to${isNegative ? ' not' : ''} see ${property}`; + let target; try { - prop = obj[property]; + if (typeof component === 'string') { + property = `${component}.${property}`; + message = `${message} on ${component}`; + } + target = find(property); } catch (e) { - if (isExpectedError(e)) { - assert.ok(true, message); + if (isNegative) { + if (isExpectedError(e)) { + assert.ok(true, message); + return Promise.resolve(); + } else { + console.error(e); + throw e; + } } else { + console.error(e); throw e; } } - if (typeof prop === 'function') { - assert.throws( - function() { - prop(); - }, - function(e) { - return isExpectedError(e); - }, - message - ); - } else { - assert.notOk(prop); - } - }) - .then(["I don't see $property"], function(property) { - const message = `Expected to not see ${property}`; - let prop; - try { - prop = currentPage()[property]; - } catch (e) { - if (isExpectedError(e)) { - assert.ok(true, message); + if (typeof target === 'function') { + if (isNegative) { + assert.throws( + function() { + target(); + }, + function(e) { + return isExpectedError(e); + }, + message + ); + return Promise.resolve(); } else { - throw e; + try { + target = target(); + } catch (e) { + console.error(e); + throw new Error(`The '${property}' page object doesn't exist`); + } } } - if (typeof prop === 'function') { - assert.throws( - function() { - prop(); - }, - function(e) { - return isExpectedError(e); - }, - message - ); - } else { - assert.notOk(prop); - } - }) - .then(['I see $property'], function(property) { - assert.ok(currentPage()[property], `Expected to see ${property}`); + assert[isNegative ? 'notOk' : 'ok'](target, message); + return Promise.resolve(); }) .then( [ - 'I see $property on the $component like "$value"', - "I see $property on the $component like '$value'", + `I see $property on the $component (contains|like) "$value"`, + `I see $property on the $component (contains|like) '$value'`, ], - function(property, component, value) { + function(property, component, containsLike, value) { let target; try { if (typeof component === 'string') { @@ -166,11 +172,18 @@ } catch (e) { throw e; } - assert.equal( - target, - value, - `Expected to see ${property} on ${component} as ${value}, was ${target}` - ); + if (containsLike === 'like') { + assert.equal( + target, + value, + `Expected to see ${property} on ${component} as ${value}, was ${target}` + ); + } else { + assert.ok( + target.indexOf(value) !== -1, + `Expected to see ${property} on ${component} within ${value}, was ${target}` + ); + } } ) .then(['I see $property like "$value"'], function(property, value) { diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/steps.js consul-1.8.7+dfsg1/ui-v2/tests/steps.js --- consul-1.7.4+dfsg1/ui-v2/tests/steps.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/steps.js 2020-12-10 21:46:52.000000000 +0000 @@ -21,9 +21,11 @@ const pluralize = function(str) { return Inflector.inflector.pluralize(str); }; -const getLastNthRequest = function(arr) { +const getLastNthRequest = function(getRequests) { return function(n, method) { - let requests = arr.slice(0).reverse(); + let requests = getRequests() + .slice(0) + .reverse(); if (method) { requests = requests.filter(function(item) { return item.method === method; @@ -50,23 +52,39 @@ }; }; export default function(assert, library) { - const pauseUntil = function(cb) { - return new Promise(function(resolve, reject) { + const pauseUntil = function(run, message = 'assertion timed out') { + return new Promise(function(r) { let count = 0; - const interval = setInterval(function() { - if (++count >= 50) { - clearInterval(interval); - assert.ok(false); - reject(); - } - cb(function() { - clearInterval(interval); - resolve(); + let resolved = false; + const retry = function() { + return Promise.resolve(); + }; + const reject = function() { + return Promise.reject(); + }; + const resolve = function(str = message) { + resolved = true; + assert.ok(resolved, str); + r(); + return Promise.resolve(); + }; + (function tick() { + run(resolve, reject, retry).then(function() { + if (!resolved) { + setTimeout(function() { + if (++count >= 50) { + assert.ok(false, message); + reject(); + return; + } + tick(); + }, 100); + } }); - }, 100); + })(); }); }; - const lastNthRequest = getLastNthRequest(api.server.history); + const lastNthRequest = getLastNthRequest(() => api.server.history); const create = function(number, name, value) { // don't return a promise here as // I don't need it to wait @@ -83,6 +101,7 @@ return currentPage; }; const setCurrentPage = function(page) { + api.server.clearHistory(); currentPage = page; return page; }; @@ -98,7 +117,7 @@ } obj = parent[last]; if (typeof obj === 'undefined') { - throw new Error(`The '${path}' object doesn't exist`); + throw new Error(`PageObject not found: The '${path}' object doesn't exist`); } if (typeof obj === 'function') { obj = obj.bind(parent); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/test-helper.js consul-1.8.7+dfsg1/ui-v2/tests/test-helper.js --- consul-1.7.4+dfsg1/ui-v2/tests/test-helper.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/test-helper.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,11 +1,36 @@ import Application from '../app'; import config from '../config/environment'; import { setApplication } from '@ember/test-helpers'; -import { start } from 'ember-qunit'; +import { registerWaiter } from '@ember/test'; import './helpers/flash-message'; -import loadEmberExam from 'ember-exam/test-support/load'; +import start from 'ember-exam/test-support/start'; -loadEmberExam(); +import ClientConnections from 'consul-ui/services/client/connections'; + +let activeRequests = 0; +registerWaiter(function() { + return activeRequests === 0; +}); +ClientConnections.reopen({ + addVisibilityChange: function() { + // for the moment don't listen for tab hiding during testing + // TODO: make this controllable from testing so we can fake a tab hide + }, + purge: function() { + const res = this._super(...arguments); + activeRequests = 0; + return res; + }, + acquire: function() { + activeRequests++; + return this._super(...arguments); + }, + release: function() { + const res = this._super(...arguments); + activeRequests--; + return res; + }, +}); const application = Application.create(config.APP); application.inject('component:copy-button', 'clipboard', 'service:clipboard/local-storage'); setApplication(application); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/adapters/oidc-provider-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/adapters/oidc-provider-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/adapters/oidc-provider-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/adapters/oidc-provider-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Adapter | oidc-provider', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let adapter = this.owner.lookup('adapter:oidc-provider'); + assert.ok(adapter); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-alternate-services-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-alternate-services-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-alternate-services-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-alternate-services-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +import { getAlternateServices } from 'consul-ui/components/discovery-chain/utils'; +import { module, test } from 'qunit'; + +module('Unit | Component | discovery-chain/get-alternative-services', function() { + test('it guesses a different namespace', function(assert) { + const expected = { + Type: 'Namespace', + Targets: ['different-ns', 'different-ns2'], + }; + const actual = getAlternateServices( + ['service.different-ns.dc', 'service.different-ns2.dc'], + 'service.namespace.dc' + ); + assert.equal(actual.Type, expected.Type); + assert.deepEqual(actual.Targets, expected.Targets); + }); + test('it guesses a different datacenter', function(assert) { + const expected = { + Type: 'Datacenter', + Targets: ['dc1', 'dc2'], + }; + const actual = getAlternateServices( + ['service.namespace.dc1', 'service.namespace.dc2'], + 'service.namespace.dc' + ); + assert.equal(actual.Type, expected.Type); + assert.deepEqual(actual.Targets, expected.Targets); + }); + test('it guesses a different service', function(assert) { + const expected = { + Type: 'Service', + Targets: ['service-2', 'service-3'], + }; + const actual = getAlternateServices( + ['service-2.namespace.dc', 'service-3.namespace.dc'], + 'service.namespace.dc' + ); + assert.equal(actual.Type, expected.Type); + assert.deepEqual(actual.Targets, expected.Targets); + }); + test('it guesses a different subset', function(assert) { + const expected = { + Type: 'Subset', + Targets: ['v3', 'v2'], + }; + const actual = getAlternateServices( + ['v3.service.namespace.dc', 'v2.service.namespace.dc'], + 'v1.service.namespace.dc' + ); + assert.equal(actual.Type, expected.Type); + assert.deepEqual(actual.Targets, expected.Targets); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-resolvers-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-resolvers-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-resolvers-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-resolvers-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,255 @@ +import { getResolvers } from 'consul-ui/components/discovery-chain/utils'; +import { module, test } from 'qunit'; +import { get } from 'consul-ui/tests/helpers/api'; + +const dc = 'dc-1'; +const nspace = 'default'; +const request = { + url: `/v1/discovery-chain/service-name?dc=${dc}`, +}; +module('Unit | Component | discovery-chain/get-resolvers', function() { + test('it assigns Subsets correctly', function(assert) { + return get(request.url, { + headers: { + cookie: { + CONSUL_RESOLVER_COUNT: 1, + CONSUL_SUBSET_COUNT: 1, + CONSUL_REDIRECT_COUNT: 0, + CONSUL_FAILOVER_COUNT: 0, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + const childId = Object.keys(Chain.Targets)[1]; + const target = Chain.Targets[`${childId}`]; + const firstChild = actual[0].Children[0]; + assert.equal(firstChild.Subset, true); + assert.equal(firstChild.ID, target.ID); + assert.equal(firstChild.Name, target.ServiceSubset); + }); + }); + test('it assigns Redirects correctly', function(assert) { + return get(request.url, { + headers: { + cookie: { + CONSUL_RESOLVER_COUNT: 1, + CONSUL_REDIRECT_COUNT: 1, + CONSUL_FAILOVER_COUNT: 0, + CONSUL_SUBSET_COUNT: 0, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + const childId = Object.keys(Chain.Targets)[1]; + const target = Chain.Targets[`${childId}`]; + const firstChild = actual[0].Children[0]; + assert.equal(firstChild.Redirect, true); + assert.equal(firstChild.ID, target.ID); + }); + }); + test('it assigns Failovers to Subsets correctly', function(assert) { + return Promise.all( + ['Datacenter', 'Namespace'].map(function(failoverType) { + return get(request.url, { + headers: { + cookie: { + CONSUL_RESOLVER_COUNT: 1, + CONSUL_REDIRECT_COUNT: 0, + CONSUL_SUBSET_COUNT: 1, + CONSUL_FAILOVER_COUNT: 1, + CONSUL_FAILOVER_TYPE: failoverType, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + const actualSubset = actual[0].Children[0]; + assert.equal(actualSubset.Subset, true); + assert.equal(actualSubset.Failover.Type, failoverType); + }); + }) + ); + }); + test('it assigns Failovers correctly', function(assert) { + return Promise.all( + ['Datacenter', 'Namespace'].map(function(failoverType, i) { + return get(request.url, { + headers: { + cookie: { + CONSUL_RESOLVER_COUNT: 1, + CONSUL_REDIRECT_COUNT: 0, + CONSUL_SUBSET_COUNT: 0, + CONSUL_FAILOVER_COUNT: 1, + CONSUL_FAILOVER_TYPE: failoverType, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + const node = Chain.Nodes[`resolver:${Object.keys(Chain.Targets)[0]}`]; + const expected = node.Resolver.Failover.Targets.map(item => item.split('.').reverse()[i]); + assert.equal(actual[0].Failover.Type, failoverType); + assert.deepEqual(actual[0].Failover.Targets, expected); + }); + }) + ); + }); + test('it finds subsets with failovers correctly', function(assert) { + return Promise.resolve({ + Chain: { + ServiceName: 'service-name', + Namespace: 'default', + Datacenter: 'dc-1', + Protocol: 'http', + StartNode: '', + Nodes: { + 'resolver:v2.dc-failover.default.dc-1': { + Type: 'resolver', + Name: 'v2.dc-failover.default.dc-1', + Resolver: { + Target: 'v2.dc-failover.default.dc-1', + Failover: { + Targets: ['v2.dc-failover.default.dc-5', 'v2.dc-failover.default.dc-6'], + }, + }, + }, + }, + Targets: { + 'v2.dc-failover.default.dc-1': { + ID: 'v2.dc-failover.default.dc-1', + Service: 'dc-failover', + Namespace: 'default', + Datacenter: 'dc-1', + Subset: { + Filter: '', + }, + }, + 'v2.dc-failover.default.dc-6': { + ID: 'v2.dc-failover.default.dc-6', + Service: 'dc-failover', + Namespace: 'default', + Datacenter: 'dc-6', + Subset: { + Filter: '', + }, + }, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + const expected = { + ID: 'dc-failover.default.dc-1', + Name: 'dc-failover', + Children: [ + { + Subset: true, + ID: 'v2.dc-failover.default.dc-1', + Name: 'v2', + Failover: { + Type: 'Datacenter', + Targets: ['dc-5', 'dc-6'], + }, + }, + ], + }; + assert.deepEqual(actual[0], expected); + }); + }); + test('it finds services with failovers correctly', function(assert) { + return Promise.resolve({ + Chain: { + ServiceName: 'service-name', + Namespace: 'default', + Datacenter: 'dc-1', + Protocol: 'http', + StartNode: '', + Nodes: { + 'resolver:dc-failover.default.dc-1': { + Type: 'resolver', + Name: 'dc-failover.default.dc-1', + Resolver: { + Target: 'dc-failover.default.dc-1', + Failover: { + Targets: ['dc-failover.default.dc-5', 'dc-failover.default.dc-6'], + }, + }, + }, + }, + Targets: { + 'dc-failover.default.dc-1': { + ID: 'dc-failover.default.dc-1', + Service: 'dc-failover', + Namespace: 'default', + Datacenter: 'dc-1', + }, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + const expected = { + ID: 'dc-failover.default.dc-1', + Name: 'dc-failover', + Children: [], + Failover: { + Type: 'Datacenter', + Targets: ['dc-5', 'dc-6'], + }, + }; + assert.deepEqual(actual[0], expected); + }); + }); + test('it finds services with redirects with failovers correctly', function(assert) { + return Promise.resolve({ + Chain: { + ServiceName: 'service-name', + Namespace: 'default', + Datacenter: 'dc-1', + Protocol: 'http', + StartNode: '', + Nodes: { + 'resolver:dc-failover.default.redirect-dc-1': { + Type: 'resolver', + Name: 'dc-failover.default.redirect-dc-1', + Resolver: { + Target: 'dc-failover.default.redirect-dc-1', + Failover: { + Targets: ['dc-failover.default.redirect-dc-5', 'dc-failover.default.redirect-dc-6'], + }, + }, + }, + }, + Targets: { + 'dc-failover.default.redirect-dc-1': { + ID: 'dc-failover.default.redirect-dc-1', + Service: 'dc-failover', + Namespace: 'default', + Datacenter: 'redirect-dc-1', + }, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + // Both the parent and the child should have a Failover property + // as in order for a redirect to have failovers it must redirect to a + // service that already has failovers + const expected = { + ID: 'dc-failover.default.dc-1', + Name: 'dc-failover', + Failover: { + Targets: ['redirect-dc-5', 'redirect-dc-6'], + Type: 'Datacenter', + }, + Children: [ + { + Failover: { + Targets: ['redirect-dc-5', 'redirect-dc-6'], + Type: 'Datacenter', + }, + ID: 'dc-failover.default.redirect-dc-1', + Name: 'redirect-dc-1', + Redirect: true, + }, + ], + }; + assert.deepEqual(actual[0], expected); + }); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-splitters-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-splitters-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-splitters-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/components/discovery-chain/get-splitters-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,54 @@ +import { getSplitters } from 'consul-ui/components/discovery-chain/utils'; +import { module, test } from 'qunit'; + +module('Unit | Component | discovery-chain/get-splitters', function() { + test('it collects and correctly parses splitter Names', function(assert) { + const actual = getSplitters({ + 'splitter:splitter-name.default': { + Type: 'splitter', + Name: 'splitter-name.default', + Splits: [ + { + Weight: 50, + NextNode: '', + }, + { + Weight: 50, + NextNode: '', + }, + ], + }, + 'splitter:not-splitter-name.default': { + Type: 'not-splitter', + Name: 'splitter-name.default', + Splits: [ + { + Weight: 50, + NextNode: '', + }, + { + Weight: 50, + NextNode: '', + }, + ], + }, + }); + const expected = { + Type: 'splitter', + Name: 'splitter-name', + ID: 'splitter:splitter-name.default', + Splits: [ + { + Weight: 50, + NextNode: '', + }, + { + Weight: 50, + NextNode: '', + }, + ], + }; + assert.equal(actual.length, 1); + assert.deepEqual(actual[0], expected); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/application-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/application-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/application-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/application-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Controller | application', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let controller = this.owner.lookup('controller:application'); + assert.ok(controller); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/create-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/create-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/create-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/create-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/intentions/create', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/intentions/create'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/edit-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/edit-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/edit-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/intentions/edit-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/intentions/edit', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/intentions/edit'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/create-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/create-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/create-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/create-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/kv/create', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/kv/create'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/edit-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/edit-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/edit-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/edit-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/kv/edit', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/kv/edit'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/folder-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/folder-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/folder-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/folder-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/kv/folder', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/kv/folder'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/root-create-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/root-create-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/kv/root-create-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/kv/root-create-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/kv/root-create', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/kv/root-create'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/nodes/show-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/nodes/show-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/controllers/dc/nodes/show-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/controllers/dc/nodes/show-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Controller | dc/nodes/show', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:dc/nodes/show'); - assert.ok(controller); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/helpers/selectable-key-values-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/helpers/selectable-key-values-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/helpers/selectable-key-values-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/helpers/selectable-key-values-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,34 @@ +import { selectableKeyValues } from 'consul-ui/helpers/selectable-key-values'; +import { module, test } from 'qunit'; + +module('Unit | Helper | selectable-key-values', function() { + test('it turns arrays into key values and selects the first item by default', function(assert) { + const actual = selectableKeyValues([['key-1', 'value-1'], ['key-2', 'value-2']]); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'key-1', value: 'value-1' }); + }); + test('it turns arrays into key values and selects the defined key', function(assert) { + const actual = selectableKeyValues([['key-1', 'value-1'], ['key-2', 'value-2']], { + selected: 'key-2', + }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'key-2', value: 'value-2' }); + }); + test('it turns arrays into key values and selects the defined index', function(assert) { + const actual = selectableKeyValues([['key-1', 'value-1'], ['key-2', 'value-2']], { + selected: 1, + }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'key-2', value: 'value-2' }); + }); + test('it turns arrays with only one element into key values and selects the defined index', function(assert) { + const actual = selectableKeyValues([['Value 1'], ['Value 2']], { selected: 1 }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'value-2', value: 'Value 2' }); + }); + test('it turns strings into key values and selects the defined index', function(assert) { + const actual = selectableKeyValues(['Value 1', 'Value 2'], { selected: 1 }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'value-2', value: 'Value 2' }); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/acl/with-actions-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/acl/with-actions-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/acl/with-actions-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/acl/with-actions-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -22,36 +22,24 @@ const subject = this.subject(); assert.ok(subject); }); - test('use persists the token and calls transitionTo correctly', function(assert) { - assert.expect(4); - this.owner.register( - 'service:feedback', - Service.extend({ - execute: function(cb, name) { - assert.equal(name, 'use'); - return cb(); - }, - }) - ); + test('use persists the token', function(assert) { + assert.expect(2); const item = { ID: 'id' }; - const expectedToken = { Namespace: 'default', AccessorID: null, SecretID: item.ID }; + const expected = { Namespace: 'default', AccessorID: null, SecretID: item.ID }; this.owner.register( 'service:settings', Service.extend({ persist: function(actual) { - assert.deepEqual(actual.token, expectedToken); + assert.deepEqual(actual.token, expected); return Promise.resolve(actual); }, }) ); const subject = this.subject(); - const expected = 'dc.services'; - const transitionTo = this.stub(subject, 'transitionTo').returnsArg(0); return subject.actions.use .bind(subject)(item) .then(function(actual) { - assert.ok(transitionTo.calledOnce); - assert.equal(actual, expected); + assert.deepEqual(actual.token, expected); }); }); test('clone clones the token and calls afterDelete correctly', function(assert) { diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/intention/with-actions-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/intention/with-actions-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/intention/with-actions-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/intention/with-actions-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -import { module } from 'qunit'; -import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; -import Route from '@ember/routing/route'; -import Mixin from 'consul-ui/mixins/intention/with-actions'; - -module('Unit | Mixin | intention/with actions', function(hooks) { - setupTest(hooks); - - hooks.beforeEach(function() { - this.subject = function() { - const MixedIn = Route.extend(Mixin); - this.owner.register('test-container:intention/with-actions-object', MixedIn); - return this.owner.lookup('test-container:intention/with-actions-object'); - }; - }); - - // Replace this with your real tests. - test('it works', function(assert) { - const subject = this.subject(); - assert.ok(subject); - }); - test('errorCreate returns a different status code if a duplicate intention is found', function(assert) { - const subject = this.subject(); - const expected = 'exists'; - const actual = subject.errorCreate('error', { - errors: [{ status: '500', detail: 'duplicate intention found:' }], - }); - assert.equal(actual, expected); - }); - test('errorCreate returns the same code if there is no error', function(assert) { - const subject = this.subject(); - const expected = 'error'; - const actual = subject.errorCreate('error', {}); - assert.equal(actual, expected); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/kv/with-actions-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/kv/with-actions-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/kv/with-actions-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/kv/with-actions-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -import { module, skip } from 'qunit'; -import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; -import Route from '@ember/routing/route'; -import Mixin from 'consul-ui/mixins/kv/with-actions'; - -module('Unit | Mixin | kv/with actions', function(hooks) { - setupTest(hooks); - - hooks.beforeEach(function() { - this.subject = function() { - const MixedIn = Route.extend(Mixin); - this.owner.register('test-container:kv/with-actions-object', MixedIn); - return this.owner.lookup('test-container:kv/with-actions-object'); - }; - }); - - // Replace this with your real tests. - test('it works', function(assert) { - const subject = this.subject(); - assert.ok(subject); - }); - test('afterUpdate calls transitionTo index when the key is a single slash', function(assert) { - const subject = this.subject(); - const expected = 'dc.kv.index'; - const transitionTo = this.stub(subject, 'transitionTo').returnsArg(0); - const actual = subject.afterUpdate({}, { Key: '/' }); - assert.equal(actual, expected); - assert.ok(transitionTo.calledOnce); - }); - test('afterUpdate calls transitionTo folder when the key is not a single slash', function(assert) { - const subject = this.subject(); - const expected = 'dc.kv.folder'; - const transitionTo = this.stub(subject, 'transitionTo').returnsArg(0); - ['', '/key', 'key/name'].forEach(item => { - const actual = subject.afterUpdate({}, { Key: item }); - assert.equal(actual, expected); - }); - assert.ok(transitionTo.calledThrice); - }); - test('afterDelete calls refresh folder when the routeName is `folder`', function(assert) { - const subject = this.subject(); - subject.routeName = 'dc.kv.folder'; - const refresh = this.stub(subject, 'refresh'); - subject.afterDelete({}, {}); - assert.ok(refresh.calledOnce); - }); - skip('action invalidateSession test'); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-filtering-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-filtering-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-filtering-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-filtering-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import EmberObject from '@ember/object'; -import WithFilteringMixin from 'consul-ui/mixins/with-filtering'; -import { module, test } from 'qunit'; - -module('Unit | Mixin | with filtering', function() { - // Replace this with your real tests. - test('it works', function(assert) { - let WithFilteringObject = EmberObject.extend(WithFilteringMixin); - let subject = WithFilteringObject.create(); - assert.ok(subject); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-health-filtering-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-health-filtering-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-health-filtering-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-health-filtering-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import EmberObject from '@ember/object'; -import WithHealthFilteringMixin from 'consul-ui/mixins/with-health-filtering'; -import { module, test } from 'qunit'; - -module('Unit | Mixin | with health filtering', function() { - // Replace this with your real tests. - test('it works', function(assert) { - let WithHealthFilteringObject = EmberObject.extend(WithHealthFilteringMixin); - let subject = WithHealthFilteringObject.create(); - assert.ok(subject); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-listeners-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-listeners-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-listeners-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-listeners-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -import { module } from 'qunit'; -import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; -import Controller from '@ember/controller'; -import Mixin from 'consul-ui/mixins/with-listeners'; - -module('Unit | Mixin | with listeners', function(hooks) { - setupTest(hooks); - - hooks.beforeEach(function() { - this.subject = function() { - const MixedIn = Controller.extend(Mixin); - this.owner.register('test-container:with-listeners-object', MixedIn); - return this.owner.lookup('test-container:with-listeners-object'); - }; - }); - - // Replace this with your real tests. - test('it works', function(assert) { - const subject = this.subject(); - assert.ok(subject); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-resizing-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-resizing-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-resizing-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-resizing-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import EmberObject from '@ember/object'; -import WithResizingMixin from 'consul-ui/mixins/with-resizing'; -import { module, test } from 'qunit'; - -module('Unit | Mixin | with resizing', function() { - // Replace this with your real tests. - test('it works', function(assert) { - let WithResizingObject = EmberObject.extend(WithResizingMixin); - let subject = WithResizingObject.create(); - assert.ok(subject); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-searching-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-searching-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/mixins/with-searching-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/mixins/with-searching-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -import { module } from 'qunit'; -import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; -import Controller from '@ember/controller'; -import Mixin from 'consul-ui/mixins/with-searching'; - -module('Unit | Mixin | with searching', function(hooks) { - setupTest(hooks); - - hooks.beforeEach(function() { - this.subject = function() { - const MixedIn = Controller.extend(Mixin); - this.owner.register('test-container:with-searching-object', MixedIn); - return this.owner.lookup('test-container:with-searching-object'); - }; - }); - - // Replace this with your real tests. - test('it works', function(assert) { - const subject = this.subject(); - assert.ok(subject); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/models/oidc-provider-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/models/oidc-provider-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/models/oidc-provider-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/models/oidc-provider-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,13 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Model | oidc-provider', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let store = this.owner.lookup('service:store'); + let model = store.createRecord('oidc-provider', {}); + assert.ok(model); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/serializers/oidc-provider-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/serializers/oidc-provider-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/serializers/oidc-provider-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/serializers/oidc-provider-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Serializer | oidc-provider', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let store = this.owner.lookup('service:store'); + let serializer = store.serializerFor('oidc-provider'); + + assert.ok(serializer); + }); + + test('it serializes records', function(assert) { + let store = this.owner.lookup('service:store'); + let record = store.createRecord('oidc-provider', {}); + + let serializedRecord = record.serialize(); + + assert.ok(serializedRecord); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/client/connections-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/client/connections-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/client/connections-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/client/connections-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | client/connections', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:client/connections'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/client/transports/xhr-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/client/transports/xhr-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/client/transports/xhr-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/client/transports/xhr-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | client/transports/xhr', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:client/transports/xhr'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/data-source/protocols/http-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/data-source/protocols/http-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/data-source/protocols/http-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/data-source/protocols/http-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | data-source/protocols/http', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:data-source/protocols/http'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/data-source/protocols/local-storage-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/data-source/protocols/local-storage-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/data-source/protocols/local-storage-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/data-source/protocols/local-storage-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | data-source/protocols/local-storage', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:data-source/protocols/local-storage'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/dom-buffer-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/dom-buffer-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/dom-buffer-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/dom-buffer-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Service | dom buffer', function(hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function(assert) { - let service = this.owner.lookup('service:dom-buffer'); - assert.ok(service); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/encoder-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/encoder-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/encoder-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/encoder-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | encoder', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:encoder'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/env-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/env-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/env-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/env-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | env', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:env'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/sort-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/sort-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/sort-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/sort-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | sort', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:sort'); + assert.ok(service); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/services/state-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/services/state-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/services/state-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/services/state-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | state', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('.state creates a state matchable object', function(assert) { + const service = this.owner.lookup('service:state'); + const actual = service.state(id => id === 'idle'); + assert.equal(typeof actual, 'object'); + assert.equal(typeof actual.matches, 'function'); + }); + test('.matches performs a match correctly', function(assert) { + const service = this.owner.lookup('service:state'); + const state = service.state(id => id === 'idle'); + assert.equal(service.matches(state, 'idle'), true); + assert.equal(service.matches(state, 'loading'), false); + }); + test('.matches performs a match correctly when passed an array', function(assert) { + const service = this.owner.lookup('service:state'); + const state = service.state(id => id === 'idle'); + assert.equal(service.matches(state, ['idle']), true); + assert.equal(service.matches(state, ['loading', 'idle']), true); + assert.equal(service.matches(state, ['loading', 'deleting']), false); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/sort/comparators/service-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/sort/comparators/service-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/sort/comparators/service-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/sort/comparators/service-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +import comparatorFactory from 'consul-ui/sort/comparators/service'; +import { module, test } from 'qunit'; + +module('Unit | Sort | Comparator | service', function() { + const comparator = comparatorFactory(); + test('Passing anything but Status: just returns what you gave it', function(assert) { + const expected = 'Name:asc'; + const actual = comparator(expected); + assert.equal(actual, expected); + }); + test('items are sorted by a fake Status which uses MeshChecks{Passing,Warning,Critical}', function(assert) { + const items = [ + { + MeshChecksPassing: 1, + MeshChecksWarning: 1, + MeshChecksCritical: 1, + }, + { + MeshChecksPassing: 1, + MeshChecksWarning: 1, + MeshChecksCritical: 2, + }, + { + MeshChecksPassing: 1, + MeshChecksWarning: 1, + MeshChecksCritical: 3, + }, + ]; + const comp = comparator('Status:asc'); + assert.equal(typeof comp, 'function'); + + const expected = [ + { + MeshChecksPassing: 1, + MeshChecksWarning: 1, + MeshChecksCritical: 3, + }, + { + MeshChecksPassing: 1, + MeshChecksWarning: 1, + MeshChecksCritical: 2, + }, + { + MeshChecksPassing: 1, + MeshChecksWarning: 1, + MeshChecksCritical: 1, + }, + ]; + let actual = items.sort(comp); + assert.deepEqual(actual, expected); + + expected.reverse(); + actual = items.sort(comparator('Status:desc')); + assert.deepEqual(actual, expected); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-alternate-services-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-alternate-services-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-alternate-services-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-alternate-services-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -import { getAlternateServices } from 'consul-ui/utils/components/discovery-chain/index'; -import { module, test } from 'qunit'; - -module('Unit | Utility | components/discovery-chain/get-alternative-services', function() { - test('it guesses a different namespace', function(assert) { - const expected = { - Type: 'Namespace', - Targets: ['different-ns', 'different-ns2'], - }; - const actual = getAlternateServices( - ['service.different-ns.dc', 'service.different-ns2.dc'], - 'service.namespace.dc' - ); - assert.equal(actual.Type, expected.Type); - assert.deepEqual(actual.Targets, expected.Targets); - }); - test('it guesses a different datacenter', function(assert) { - const expected = { - Type: 'Datacenter', - Targets: ['dc1', 'dc2'], - }; - const actual = getAlternateServices( - ['service.namespace.dc1', 'service.namespace.dc2'], - 'service.namespace.dc' - ); - assert.equal(actual.Type, expected.Type); - assert.deepEqual(actual.Targets, expected.Targets); - }); - test('it guesses a different service', function(assert) { - const expected = { - Type: 'Service', - Targets: ['service-2', 'service-3'], - }; - const actual = getAlternateServices( - ['service-2.namespace.dc', 'service-3.namespace.dc'], - 'service.namespace.dc' - ); - assert.equal(actual.Type, expected.Type); - assert.deepEqual(actual.Targets, expected.Targets); - }); - test('it guesses a different subset', function(assert) { - const expected = { - Type: 'Subset', - Targets: ['v3', 'v2'], - }; - const actual = getAlternateServices( - ['v3.service.namespace.dc', 'v2.service.namespace.dc'], - 'v1.service.namespace.dc' - ); - assert.equal(actual.Type, expected.Type); - assert.deepEqual(actual.Targets, expected.Targets); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,199 +0,0 @@ -import { getResolvers } from 'consul-ui/utils/components/discovery-chain/index'; -import { module, test } from 'qunit'; -import { get } from 'consul-ui/tests/helpers/api'; - -const dc = 'dc-1'; -const nspace = 'default'; -const request = { - url: `/v1/discovery-chain/service-name?dc=${dc}`, -}; -module('Unit | Utility | components/discovery-chain/get-resolvers', function() { - test('it assigns Subsets correctly', function(assert) { - return get(request.url, { - headers: { - cookie: { - CONSUL_RESOLVER_COUNT: 1, - CONSUL_SUBSET_COUNT: 1, - CONSUL_REDIRECT_COUNT: 0, - CONSUL_FAILOVER_COUNT: 0, - }, - }, - }).then(function({ Chain }) { - const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); - const childId = Object.keys(Chain.Targets)[1]; - const target = Chain.Targets[`${childId}`]; - const firstChild = actual[0].Children[0]; - assert.equal(firstChild.Subset, true); - assert.equal(firstChild.ID, target.ID); - assert.equal(firstChild.Name, target.ServiceSubset); - }); - }); - test('it assigns Redirects correctly', function(assert) { - return get(request.url, { - headers: { - cookie: { - CONSUL_RESOLVER_COUNT: 1, - CONSUL_REDIRECT_COUNT: 1, - CONSUL_FAILOVER_COUNT: 0, - CONSUL_SUBSET_COUNT: 0, - }, - }, - }).then(function({ Chain }) { - const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); - const childId = Object.keys(Chain.Targets)[1]; - const target = Chain.Targets[`${childId}`]; - const firstChild = actual[0].Children[0]; - assert.equal(firstChild.Redirect, true); - assert.equal(firstChild.ID, target.ID); - }); - }); - test('it assigns Failovers to Subsets correctly', function(assert) { - return Promise.all( - ['Datacenter', 'Namespace'].map(function(failoverType) { - return get(request.url, { - headers: { - cookie: { - CONSUL_RESOLVER_COUNT: 1, - CONSUL_REDIRECT_COUNT: 0, - CONSUL_SUBSET_COUNT: 1, - CONSUL_FAILOVER_COUNT: 1, - CONSUL_FAILOVER_TYPE: failoverType, - }, - }, - }).then(function({ Chain }) { - const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); - const actualSubset = actual[0].Children[0]; - assert.equal(actualSubset.Subset, true); - assert.equal(actualSubset.Failover.Type, failoverType); - }); - }) - ); - }); - test('it assigns Failovers correctly', function(assert) { - return Promise.all( - ['Datacenter', 'Namespace'].map(function(failoverType, i) { - return get(request.url, { - headers: { - cookie: { - CONSUL_RESOLVER_COUNT: 1, - CONSUL_REDIRECT_COUNT: 0, - CONSUL_SUBSET_COUNT: 0, - CONSUL_FAILOVER_COUNT: 1, - CONSUL_FAILOVER_TYPE: failoverType, - }, - }, - }).then(function({ Chain }) { - const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); - const node = Chain.Nodes[`resolver:${Object.keys(Chain.Targets)[0]}`]; - const expected = node.Resolver.Failover.Targets.map(item => item.split('.').reverse()[i]); - assert.equal(actual[0].Failover.Type, failoverType); - assert.deepEqual(actual[0].Failover.Targets, expected); - }); - }) - ); - }); - test('it finds subsets with failovers correctly', function(assert) { - return Promise.resolve({ - Chain: { - ServiceName: 'service-name', - Namespace: 'default', - Datacenter: 'dc-1', - Protocol: 'http', - StartNode: '', - Nodes: { - 'resolver:v2.dc-failover.default.dc-1': { - Type: 'resolver', - Name: 'v2.dc-failover.default.dc-1', - Resolver: { - Target: 'v2.dc-failover.defauilt.dc-1', - Failover: { - Targets: ['v2.dc-failover.default.dc-5', 'v2.dc-failover.default.dc-6'], - }, - }, - }, - }, - Targets: { - 'v2.dc-failover.default.dc-1': { - ID: 'v2.dc-failover.default.dc-1', - Service: 'dc-failover', - Namespace: 'default', - Datacenter: 'dc-1', - Subset: { - Filter: '', - }, - }, - 'v2.dc-failover.default.dc-6': { - ID: 'v2.dc-failover.default.dc-6', - Service: 'dc-failover', - Namespace: 'default', - Datacenter: 'dc-6', - Subset: { - Filter: '', - }, - }, - }, - }, - }).then(function({ Chain }) { - const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); - const expected = { - ID: 'dc-failover.default.dc-1', - Name: 'dc-failover', - Children: [ - { - Subset: true, - ID: 'v2.dc-failover.default.dc-1', - Name: 'v2', - Failover: { - Type: 'Datacenter', - Targets: ['dc-5', 'dc-6'], - }, - }, - ], - }; - assert.deepEqual(actual[0], expected); - }); - }); - test('it finds services with failovers correctly', function(assert) { - return Promise.resolve({ - Chain: { - ServiceName: 'service-name', - Namespace: 'default', - Datacenter: 'dc-1', - Protocol: 'http', - StartNode: '', - Nodes: { - 'resolver:dc-failover.default.dc-1': { - Type: 'resolver', - Name: 'dc-failover.default.dc-1', - Resolver: { - Target: 'dc-failover.defauilt.dc-1', - Failover: { - Targets: ['dc-failover.default.dc-5', 'dc-failover.default.dc-6'], - }, - }, - }, - }, - Targets: { - 'dc-failover.default.dc-1': { - ID: 'dc-failover.default.dc-1', - Service: 'dc-failover', - Namespace: 'default', - Datacenter: 'dc-1', - }, - }, - }, - }).then(function({ Chain }) { - const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); - const expected = { - ID: 'dc-failover.default.dc-1', - Name: 'dc-failover', - Children: [], - Failover: { - Type: 'Datacenter', - Targets: ['dc-5', 'dc-6'], - }, - }; - assert.deepEqual(actual[0], expected); - }); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/createURL-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/createURL-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/createURL-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/createURL-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -import { module, skip } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; -import createURL from 'consul-ui/utils/createURL'; - -module('Unit | Utils | createURL', function() { - skip("it isn't isolated enough, mock encodeURIComponent"); - test('it passes the values to encode', function(assert) { - const url = createURL(encodeURIComponent); - const actual = url`/v1/url?${{ query: 'to encode', 'key with': ' spaces ' }}`; - const expected = '/v1/url?query=to%20encode&key%20with=%20spaces%20'; - assert.equal(actual, expected); - }); - test('it adds a query string key without an `=` if the query value is `null`', function(assert) { - const url = createURL(encodeURIComponent); - const actual = url`/v1/url?${{ 'key with space': null }}`; - const expected = '/v1/url?key%20with%20space'; - assert.equal(actual, expected); - }); - test('it returns a string when passing an array', function(assert) { - const url = createURL(encodeURIComponent); - const actual = url`/v1/url/${['raw values', 'to', 'encode']}`; - const expected = '/v1/url/raw%20values/to/encode'; - assert.equal(actual, expected); - }); - test('it returns a string when passing a string', function(assert) { - const url = createURL(encodeURIComponent); - const actual = url`/v1/url/${'raw values to encode'}`; - const expected = '/v1/url/raw%20values%20to%20encode'; - assert.equal(actual, expected); - }); - test("it doesn't add a query string prop/value is the value is undefined", function(assert) { - const url = createURL(encodeURIComponent); - const actual = url`/v1/url?${{ key: undefined }}`; - const expected = '/v1/url?'; - assert.equal(actual, expected); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/dom/event-source/blocking-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/dom/event-source/blocking-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/dom/event-source/blocking-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/dom/event-source/blocking-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -1,6 +1,6 @@ import domEventSourceBlocking, { validateCursor, - create5xxBackoff, + createErrorBackoff, } from 'consul-ui/utils/dom/event-source/blocking'; import { module } from 'qunit'; import test from 'ember-sinon-qunit/test-support/test'; @@ -46,13 +46,12 @@ assert.ok(source instanceof EventSource); }); test("the 5xx backoff continues to throw when it's not a 5xx", function(assert) { - const backoff = create5xxBackoff(); + const backoff = createErrorBackoff(); [ undefined, null, new Error(), { errors: [] }, - { errors: [{ status: '0' }] }, { errors: [{ status: 501 }] }, { errors: [{ status: '401' }] }, { errors: [{ status: '500' }] }, @@ -76,7 +75,7 @@ const timeout = this.stub().callsArg(0); const resolve = this.stub().withArgs(item); const Promise = createPromise(resolve); - const backoff = create5xxBackoff(undefined, Promise, timeout); + const backoff = createErrorBackoff(undefined, Promise, timeout); const promise = backoff(item); assert.ok(promise instanceof Promise, 'a promise was returned'); assert.ok(resolve.calledOnce, 'the promise was resolved with the correct arguments'); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/get-environment-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/get-environment-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/get-environment-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/get-environment-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -9,12 +9,14 @@ }, ]; }; -const getElementsByTagName = function(name) { - return [ - { - src: '', - }, - ]; +const makeGetElementsByTagName = function(src) { + return function(name) { + return [ + { + src: src, + }, + ]; + }; }; const win = { performance: { @@ -26,7 +28,7 @@ }; const doc = { cookie: '', - getElementsByTagName: getElementsByTagName, + getElementsByTagName: makeGetElementsByTagName(''), }; module('Unit | Utility | getEnvironment', function() { test('it returns a function', function(assert) { @@ -46,6 +48,26 @@ const env = getEnvironment(config, win, doc); assert.equal(env('CONSUL_HTTP_PROTOCOL'), 'hq'); }); + test('it returns the correct URL for the root of the UI', function(assert) { + let config = { + environment: 'production', + }; + let expected = 'http://localhost/ui'; + let doc = { + cookie: '', + getElementsByTagName: makeGetElementsByTagName(`${expected}/assets/consul-ui.js`), + }; + let env = getEnvironment(config, win, doc); + assert.equal(env('CONSUL_BASE_UI_URL'), expected); + expected = 'http://localhost/somewhere/else'; + doc = { + cookie: '', + getElementsByTagName: makeGetElementsByTagName(`${expected}/assets/consul-ui.js`), + }; + env = getEnvironment(config, win, doc); + assert.equal(env('CONSUL_BASE_UI_URL'), expected); + }); + test('it returns the correct max connections depending on protocol', function(assert) { let config = { CONSUL_HTTP_PROTOCOL: 'hq', @@ -113,7 +135,7 @@ }; let doc = { cookie: 'CONSUL_NSPACES_ENABLE=1', - getElementsByTagName: getElementsByTagName, + getElementsByTagName: makeGetElementsByTagName(''), }; let env = getEnvironment(config, win, doc); assert.ok(env('CONSUL_NSPACES_ENABLED')); @@ -123,7 +145,7 @@ }; doc = { cookie: 'CONSUL_NSPACES_ENABLE=0', - getElementsByTagName: getElementsByTagName, + getElementsByTagName: makeGetElementsByTagName(''), }; env = getEnvironment(config, win, doc); assert.notOk(env('CONSUL_NSPACES_ENABLED')); @@ -147,7 +169,7 @@ }; let doc = { cookie: 'CONSUL_NSPACES_ENABLE=1', - getElementsByTagName: getElementsByTagName, + getElementsByTagName: makeGetElementsByTagName(''), }; let env = getEnvironment(config, win, doc); assert.notOk(env('CONSUL_NSPACES_ENABLED')); @@ -157,7 +179,7 @@ }; doc = { cookie: 'CONSUL_NSPACES_ENABLE=0', - getElementsByTagName: getElementsByTagName, + getElementsByTagName: makeGetElementsByTagName(''), }; env = getEnvironment(config, win, doc); assert.ok(env('CONSUL_NSPACES_ENABLED')); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/get-object-pool-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/get-object-pool-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/get-object-pool-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/get-object-pool-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -import getObjectPool from 'consul-ui/utils/get-object-pool'; -import { module, skip } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; - -module('Unit | Utility | get object pool', function() { - skip('Decide what to do if you add 2 objects with the same id'); - test('acquire adds objects', function(assert) { - const actual = []; - const expected = { - hi: 'there', - id: 'hi-there-123', - }; - const expected2 = { - hi: 'there', - id: 'hi-there-456', - }; - const pool = getObjectPool(function() {}, 10, actual); - pool.acquire(expected, expected.id); - assert.deepEqual(actual[0], expected); - pool.acquire(expected2, expected2.id); - assert.deepEqual(actual[1], expected2); - }); - test('acquire adds objects and returns the id', function(assert) { - const arr = []; - const expected = 'hi-there-123'; - const obj = { - hi: 'there', - id: expected, - }; - const pool = getObjectPool(function() {}, 10, arr); - const actual = pool.acquire(obj, expected); - assert.equal(actual, expected); - }); - test('acquire adds objects, and disposes when there is no room', function(assert) { - const actual = []; - const expected = { - hi: 'there', - id: 'hi-there-123', - }; - const expected2 = { - hi: 'there', - id: 'hi-there-456', - }; - const dispose = this.stub() - .withArgs(expected) - .returnsArg(0); - const pool = getObjectPool(dispose, 1, actual); - pool.acquire(expected, expected.id); - assert.deepEqual(actual[0], expected); - pool.acquire(expected2, expected2.id); - assert.deepEqual(actual[0], expected2); - assert.ok(dispose.calledOnce); - }); - test('it disposes', function(assert) { - const arr = []; - const expected = { - hi: 'there', - id: 'hi-there-123', - }; - const expected2 = { - hi: 'there', - id: 'hi-there-456', - }; - const dispose = this.stub().returnsArg(0); - const pool = getObjectPool(dispose, 2, arr); - const id = pool.acquire(expected, expected.id); - assert.deepEqual(arr[0], expected); - pool.acquire(expected2, expected2.id); - assert.deepEqual(arr[1], expected2); - const actual = pool.dispose(id); - assert.ok(dispose.calledOnce); - assert.equal(arr.length, 1, 'object was removed from array'); - assert.deepEqual(actual, expected, 'returned object is expected object'); - assert.deepEqual(arr[0], expected2, 'object in the pool is expected object'); - }); - test('it purges', function(assert) { - const arr = []; - const expected = { - hi: 'there', - id: 'hi-there-123', - }; - const expected2 = { - hi: 'there', - id: 'hi-there-456', - }; - const dispose = this.stub().returnsArg(0); - const pool = getObjectPool(dispose, 2, arr); - pool.acquire(expected, expected.id); - assert.deepEqual(arr[0], expected); - pool.acquire(expected2, expected2.id); - assert.deepEqual(arr[1], expected2); - const actual = pool.purge(); - assert.ok(dispose.calledTwice, 'dispose was called on everything'); - assert.equal(arr.length, 0, 'the pool is empty'); - assert.deepEqual(actual[0], expected, 'the first purged object is correct'); - assert.deepEqual(actual[1], expected2, 'the second purged object is correct'); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/hasStatus-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/hasStatus-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/hasStatus-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/hasStatus-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -import hasStatus from 'consul-ui/utils/hasStatus'; -import { module, test, skip } from 'qunit'; - -module('Unit | Utility | has status', function() { - const checks = { - filterBy: function(prop, value) { - return { length: 0 }; - }, - }; - test('it returns true when passing an empty string (therefore "all")', function(assert) { - assert.ok(hasStatus(checks, '')); - }); - test('it returns false when passing an actual status', function(assert) { - ['passing', 'critical', 'warning'].forEach(function(item) { - assert.ok(!hasStatus(checks, item), `, with ${item}`); - }); - }); - skip('it works as a factory, passing ember `get` in to create the function'); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/create-headers-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/create-headers-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/create-headers-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/create-headers-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +import createHeaders from 'consul-ui/utils/http/create-headers'; +import { module, test } from 'qunit'; + +module('Unit | Utility | http/create-headers', function() { + const parseHeaders = createHeaders(); + test('it converts lines of header-like strings into an object', function(assert) { + const expected = { + 'Content-Type': 'application/json', + 'X-Consul-Index': '1', + }; + const lines = ` + Content-Type: application/json + X-Consul-Index: 1 + `.split('\n'); + const actual = parseHeaders(lines); + assert.deepEqual(actual, expected); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/create-query-params-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/create-query-params-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/create-query-params-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/create-query-params-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +import createQueryParams from 'consul-ui/utils/http/create-query-params'; +import { module, test } from 'qunit'; + +module('Unit | Utility | http/create-query-params', function() { + const stringifyQueryParams = createQueryParams(str => str); + test('it turns objects into query params formatted strings', function(assert) { + const expected = 'something=here&another=variable'; + const actual = stringifyQueryParams({ + something: 'here', + another: 'variable', + }); + assert.equal(actual, expected); + }); + test('it ignores undefined properties', function(assert) { + const expected = 'something=here'; + const actual = stringifyQueryParams({ + something: 'here', + another: undefined, + }); + assert.equal(actual, expected); + }); + test('it stringifies nested objects', function(assert) { + const expected = 'something=here&another[something]=here&another[another][something]=here'; + const actual = stringifyQueryParams({ + something: 'here', + another: { + something: 'here', + another: { + something: 'here', + }, + }, + }); + assert.equal(actual, expected); + }); + test('it only adds the property if the value is null', function(assert) { + const expected = 'something&another=here'; + const actual = stringifyQueryParams({ + something: null, + another: 'here', + }); + assert.equal(actual, expected); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/create-url-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/create-url-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/create-url-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/create-url-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,43 @@ +import { module, skip } from 'qunit'; +import test from 'ember-sinon-qunit/test-support/test'; +import createURL from 'consul-ui/utils/http/create-url'; +import createQueryParams from 'consul-ui/utils/http/create-query-params'; + +module('Unit | Utils | http/create-url', function() { + skip("it isn't isolated enough, mock encodeURIComponent"); + const url = createURL(encodeURIComponent, createQueryParams(encodeURIComponent)); + test('it passes the values to encode', function(assert) { + const actual = url`/v1/url?${{ query: 'to encode', 'key with': ' spaces ' }}`; + const expected = '/v1/url?query=to%20encode&key%20with=%20spaces%20'; + assert.equal(actual, expected); + }); + test('it adds a query string key without an `=` if the query value is `null`', function(assert) { + const actual = url`/v1/url?${{ 'key with space': null }}`; + const expected = '/v1/url?key%20with%20space'; + assert.equal(actual, expected); + }); + test('it returns a string when passing an array', function(assert) { + const actual = url`/v1/url/${['raw values', 'to', 'encode']}`; + const expected = '/v1/url/raw%20values/to/encode'; + assert.equal(actual, expected); + }); + test('it returns a string when passing a string', function(assert) { + const actual = url`/v1/url/${'raw values to encode'}`; + const expected = '/v1/url/raw%20values%20to%20encode'; + assert.equal(actual, expected); + }); + test("it doesn't add a query string prop/value is the value is undefined", function(assert) { + const actual = url`/v1/url?${{ key: undefined }}`; + const expected = '/v1/url?'; + assert.equal(actual, expected); + }); + test("it doesn't encode headers", function(assert) { + const actual = url` + /v1/url/${'raw values to encode'} + Header: %value + `; + const expected = `/v1/url/raw%20values%20to%20encode + Header: %value`; + assert.equal(actual, expected); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/error-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/error-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/error-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/error-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import HttpError from 'consul-ui/utils/http/error'; +import { module, test } from 'qunit'; + +module('Unit | Utility | http/error', function() { + // Replace this with your real tests. + test('it works', function(assert) { + const result = new HttpError(); + assert.ok(result); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/xhr-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/xhr-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/http/xhr-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/http/xhr-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ +import httpXhr from 'consul-ui/utils/http/xhr'; +import { module, test } from 'qunit'; + +module('Unit | Utility | http/xhr', function() { + // Replace this with your real tests. + test('it works', function(assert) { + let result = httpXhr(); + assert.ok(result); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/maybe-call-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/maybe-call-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/maybe-call-test.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/maybe-call-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +import maybeCall from 'consul-ui/utils/maybe-call'; +import { module, test } from 'qunit'; +import { Promise } from 'rsvp'; + +module('Unit | Utility | maybe-call', function() { + test('it calls a function when the resolved value is true', function(assert) { + assert.expect(1); + return maybeCall(() => { + assert.ok(true); + }, Promise.resolve(true))(); + }); + test("it doesn't call a function when the resolved value is false", function(assert) { + assert.expect(0); + return maybeCall(() => { + assert.ok(true); + }, Promise.resolve(false))(); + }); +}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/model/writable-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/model/writable-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/model/writable-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/model/writable-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -import writable from 'consul-ui/utils/model/writable'; -import { module, test } from 'qunit'; - -module('Unit | Utility | model/writable', function() { - test('it correctly marks attrs as serialize:true|false', function(assert) { - const yes = { - Props: true, - That: true, - Should: true, - Be: true, - Writable: true, - }; - const no = { - Others: true, - Read: true, - Only: true, - }; - const expectedYes = Object.keys(yes); - const expectedNo = Object.keys(no); - const model = { - eachAttribute: function(cb) { - expectedYes.concat(expectedNo).forEach(function(item) { - cb(item, {}); // we aren't testing the meta here, just use the same api - }); - }, - }; - let attrs = writable(model, Object.keys(yes)); - const actualYes = Object.keys(attrs).filter(item => attrs[item].serialize); - const actualNo = Object.keys(attrs).filter(item => !attrs[item].serialize); - assert.deepEqual(actualYes, expectedYes, 'writable props are marked as serializable'); - assert.deepEqual(actualNo, expectedNo, 'writable props are marked as not serializable'); - attrs = writable(model, Object.keys(yes), { - Props: { - another: 'property', - }, - }); - assert.equal( - attrs.Props.another, - 'property', - 'previous attrs objects can be passed without being overwritten' - ); - }); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/right-trim-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/right-trim-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/right-trim-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/right-trim-test.js 2020-12-10 21:46:52.000000000 +0000 @@ -37,6 +37,22 @@ args: ['/a/folder/here/', '/a/folder/here/'], expected: '', }, + { + args: ['/a/folder/here/', '-'], + expected: '/a/folder/here/', + }, + { + args: ['/a/folder/here/', 'here'], + expected: '/a/folder/here/', + }, + { + args: ['here', '/here'], + expected: 'here', + }, + { + args: ['/here', '/here'], + expected: '', + }, ].forEach(function(item) { const actual = rightTrim(...item.args); assert.equal(actual, item.expected); diff -Nru consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/sumOfUnhealthy-test.js consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/sumOfUnhealthy-test.js --- consul-1.7.4+dfsg1/ui-v2/tests/unit/utils/sumOfUnhealthy-test.js 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/tests/unit/utils/sumOfUnhealthy-test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -import sumOfUnhealthy from 'consul-ui/utils/sumOfUnhealthy'; -import { module, test, skip } from 'qunit'; - -module('Unit | Utility | sum of unhealthy', function() { - test('it returns the correct single count', function(assert) { - const expected = 1; - [ - [ - { - Status: 'critical', - }, - ], - [ - { - Status: 'warning', - }, - ], - ].forEach(function(checks) { - const actual = sumOfUnhealthy(checks); - assert.equal(actual, expected); - }); - }); - test('it returns the correct single count when there are none', function(assert) { - const expected = 0; - [ - [ - { - Status: 'passing', - }, - { - Status: 'passing', - }, - { - Status: 'passing', - }, - { - Status: 'passing', - }, - ], - [ - { - Status: 'passing', - }, - ], - ].forEach(function(checks) { - const actual = sumOfUnhealthy(checks); - assert.equal(actual, expected); - }); - }); - test('it returns the correct multiple count', function(assert) { - const expected = 3; - [ - [ - { - Status: 'critical', - }, - { - Status: 'warning', - }, - { - Status: 'warning', - }, - { - Status: 'passing', - }, - ], - [ - { - Status: 'passing', - }, - { - Status: 'critical', - }, - { - Status: 'passing', - }, - { - Status: 'warning', - }, - { - Status: 'warning', - }, - { - Status: 'passing', - }, - ], - ].forEach(function(checks) { - const actual = sumOfUnhealthy(checks); - assert.equal(actual, expected); - }); - }); - skip('it works as a factory, passing ember `get` in to create the function'); -}); diff -Nru consul-1.7.4+dfsg1/ui-v2/.travis.yml consul-1.8.7+dfsg1/ui-v2/.travis.yml --- consul-1.7.4+dfsg1/ui-v2/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/.travis.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,27 @@ +--- +language: node_js +node_js: + - "10" + +dist: trusty + +addons: + chrome: stable + +cache: + directories: + - $HOME/.npm + +env: + global: + # See https://git.io/vdao3 for details. + - JOBS=1 + +branches: + only: + - master + +script: + - npm run lint:hbs + - npm run lint:js + - npm test diff -Nru consul-1.7.4+dfsg1/ui-v2/yarn.lock consul-1.8.7+dfsg1/ui-v2/yarn.lock --- consul-1.7.4+dfsg1/ui-v2/yarn.lock 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/ui-v2/yarn.lock 2020-12-10 21:46:52.000000000 +0000 @@ -2,596 +2,714 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.4.tgz#706a6484ee6f910b719b696a9194f8da7d7ac241" + integrity sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw== dependencies: - "@babel/highlight" "^7.0.0" + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" -"@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.2.2", "@babel/core@^7.3.3", "@babel/core@^7.3.4", "@babel/core@^7.4.3": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - convert-source-map "^1.1.0" +"@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.10.2", "@babel/core@^7.2.2", "@babel/core@^7.3.4", "@babel/core@^7.7.7": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d" + integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + convert-source-map "^1.7.0" debug "^4.1.0" - json5 "^2.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== +"@babel/generator@^7.10.4", "@babel/generator@^7.4.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243" + integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.10.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" - integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-call-delegate@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.10.4.tgz#300ae262c6ad7e4da91d47e20d77152e84a8201e" + integrity sha512-Tn9r7FUOcBYJi7gZOcYZQtMgh/EzGQ13Z8Bc2Mwzlcuo/edUcwt9YneF/hHs7mv8GJv64VqXErClQLQeGDxDlg== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.2", "@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz#2d4015d0136bd314103a70d84a7183e4b344a355" + integrity sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz#f037ad794264f729eda1889f4ee210b870999092" + integrity sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.4" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4" + integrity sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d" + integrity sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + lodash "^4.17.13" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d" + integrity sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ== dependencies: - "@babel/types" "^7.0.0" + lodash "^4.17.13" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" + integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: - "@babel/types" "^7.4.4" + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== - dependencies: - "@babel/types" "^7.5.5" +"@babel/parser@^7.10.4", "@babel/parser@^7.3.4", "@babel/parser@^7.4.3", "@babel/parser@^7.4.5", "@babel/parser@^7.7.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" + integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" + integrity sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.10.1", "@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" - lodash "^4.17.13" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/plugin-proposal-decorators@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.4.tgz#fe20ef10cc73f386f70910fca48798041cd357c7" + integrity sha512-JHTWjQngOPv+ZQQqOGv2x6sCCr4IYWy7S1/VH6BE9ZfkoLrdQ2GpEP3tfb5M++G9PwvqjhY8VC/C3tXm+/eHvA== dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.10.4" -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== dependencies: - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== +"@babel/plugin-proposal-object-rest-spread@^7.10.4", "@babel/plugin-proposal-object-rest-spread@^7.5.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.3.4", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-optional-chaining@^7.10.4", "@babel/plugin-proposal-optional-chaining@^7.6.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz#750f1255e930a1f82d8cdde45031f81a0d0adff7" + integrity sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.3.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-decorators@^7.3.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" - integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" - integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== +"@babel/plugin-syntax-decorators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" + integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-decorators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== +"@babel/plugin-syntax-typescript@^7.10.4", "@babel/plugin-syntax-typescript@^7.2.0", "@babel/plugin-syntax-typescript@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" + integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce" - integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg== +"@babel/plugin-transform-block-scoping@^7.10.4", "@babel/plugin-transform-block-scoping@^7.7.4", "@babel/plugin-transform-block-scoping@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz#a670d1364bb5019a621b9ea2001482876d734787" + integrity sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" - integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.2.0", "@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" - integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-amd@^7.10.1", "@babel/plugin-transform-modules-amd@^7.10.4", "@babel/plugin-transform-modules-amd@^7.7.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz#cb407c68b862e4c1d13a2fc738c7ec5ed75fc520" + integrity sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== dependencies: - regexp-tree "^0.1.6" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz#8f576afd943ac2f789b35ded0a6312f929c633f9" + integrity sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-object-assign@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.4.tgz#f7c8f54ce8052ccd8b9da9b3358848423221c338" + integrity sha512-6zccDhYEICfMeQqIjuY5G09/yhKzG30DKHJeYBQUHIsJH7c2jXSGvgwRalufLAXAq432OSlsEfAOLlzEsQzxVw== dependencies: - regenerator-transform "^0.14.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-runtime@^7.2.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz#a6331afbfc59189d2135b2e09474457a8e3d28bc" - integrity sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w== +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz#7b4d137c87ea7adc2a0f3ebf53266871daa6fced" + integrity sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + regenerator-transform "^0.14.2" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-runtime@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.4.tgz#594fb53453ea1b6f0779cceb48ce0718a447feb7" + integrity sha512-8ULlGv8p+Vuxu+kz2Y1dk6MYS2b/Dki+NO6/0ZlfSj5tMalfDL7jI/o/2a+rrWLqSXvnadEqc2WguB4gdQIxZw== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" + integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz#e6375407b30fcb7fcfdbba3bb98ef3e9d36df7bc" + integrity sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.4.tgz#8b01cb8d77f795422277cc3fcf45af72bc68ba78" + integrity sha512-3WpXIKDJl/MHoAN0fNkSr7iHdUMHZoppXjf2HJ9/ed5Xht5wNIsXllJXdityKOxeA3Z8heYRb1D3p2H5rfCdPw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.10.4" "@babel/plugin-transform-typescript@~7.4.0": version "7.4.5" @@ -601,135 +719,252 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-typescript@~7.5.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8" + integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w== dependencies: + "@babel/helper-create-class-features-plugin" "^7.5.5" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/polyfill@^7.0.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893" - integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg== +"@babel/plugin-transform-typescript@~7.8.0": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.7.tgz#48bccff331108a7b3a28c3a4adc89e036dc3efda" + integrity sha512-7O0UsPQVNKqpHeHLpfvOG4uXmlw+MOxYvUv6Otc9uH5SYMIxvF6eBdjkWvC3f9G+VXe0RsNExyAQBeTRug/wqQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-typescript" "^7.8.3" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/polyfill@^7.10.1": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.4.tgz#915e5bfe61490ac0199008e35ca9d7d151a8e45a" + integrity sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg== dependencies: core-js "^2.6.5" - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" - browserslist "^4.6.0" - core-js-compat "^3.1.1" +"@babel/preset-env@^7.10.2": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f" + integrity sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw== + dependencies: + "@babel/compat-data" "^7.10.4" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.10.4" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.10.4" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.10.4" + browserslist "^4.12.0" + core-js-compat "^3.6.2" invariant "^2.2.2" - js-levenshtein "^1.1.3" + levenary "^1.1.1" semver "^5.5.0" -"@babel/runtime@^7.2.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" - integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" + esutils "^2.0.2" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== +"@babel/register@^7.6.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.4.tgz#53004ba8b04c4af3cbd84508e03ad150669746e4" + integrity sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g== dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" + find-cache-dir "^2.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/runtime-corejs3@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.4.tgz#f29fc1990307c4c57b10dbd6ce667b27159d9e0d" + integrity sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.8.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99" + integrity sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.4.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818" + integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee" + integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== dependencies: - esutils "^2.0.2" + "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.13" to-fast-properties "^2.0.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" -"@ember-data/-build-infra@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/-build-infra/-/-build-infra-3.12.0.tgz#474e50c72553006e7dd25fb2585f79dc41e47123" - integrity sha512-v2lxJo3uKabi5tPd9YcL5JSp64/guUOjgUq6LmzeIZI9kY62UxHEMpuLC/q2LjzBB/EJRbQAR8DXTcgfhmQCmA== - dependencies: - babel-plugin-debug-macros "^0.3.2" - babel-plugin-feature-flags "^0.3.1" - babel-plugin-filter-imports "^3.0.0" +"@ember-data/adapter@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.16.8.tgz#487d546301093298ec6bc6032324c858cbf2754f" + integrity sha512-mc8g3Xl0y/sJKuXruE+V4qHVUUth/iyt4AVZeJqoMcGZsA44WNWcnJsEFjo2ZBfm3kRSqyXvYW0iXjA0IOiKdA== + dependencies: + "@ember-data/private-build-infra" "3.16.8" + "@ember-data/store" "3.16.8" + "@ember/edition-utils" "^1.2.0" + ember-cli-babel "^7.20.5" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^3.1.3" + +"@ember-data/canary-features@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.16.8.tgz#52b7c8edeee58579491d5f32ace895c12e081cf9" + integrity sha512-VfQZ16jyjbnts/9fO4l39kz7EMHGinwDNQvI/ZENdYHETCy/Y4K89n+GhhnexptTxcnrKIRSqp2gTy7RkXpxwA== + dependencies: + ember-cli-babel "^7.20.5" + ember-cli-typescript "^3.1.3" + +"@ember-data/debug@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/debug/-/debug-3.16.8.tgz#bab866112d53371fbceadee1461cf75a78f11c84" + integrity sha512-VVQGRq4Z/7rVd/XRI7jkx3RRY8pUFCjlVDn0AEGXO3z06RqxUUVFcDEly3z9ye7FB19TatRpGgX+BZNAu/iIAA== + dependencies: + "@ember-data/private-build-infra" "3.16.8" + "@ember/edition-utils" "^1.2.0" + ember-cli-babel "^7.20.5" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^3.1.3" + +"@ember-data/model@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.16.8.tgz#f80ff4e4cf3cd3389f2ef652b0422cd233911391" + integrity sha512-hrvjSc2w5Y35Dvm55lhomYrIi/klLUA7YBB45f/s04XRTLSK6FapQAqRxLybNi77pu8SlvmVBgT6toi4ShoCIg== + dependencies: + "@ember-data/canary-features" "3.16.8" + "@ember-data/private-build-infra" "3.16.8" + "@ember-data/store" "3.16.8" + "@ember/edition-utils" "^1.2.0" + ember-cli-babel "^7.20.5" + ember-cli-string-utils "^1.1.0" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^3.1.3" + ember-compatibility-helpers "^1.2.0" + inflection "1.12.0" + +"@ember-data/private-build-infra@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/private-build-infra/-/private-build-infra-3.16.8.tgz#d5bd40cfc2a27c5ad401baa49fe3b8c6c6c389e5" + integrity sha512-TxZhJiLJ/i/48MG9xJH1Moq1y3tXB9AD8m7p8K2AdFG3SBl/jeT2lWlV1z37P3yFJBcow9FB9ddps0RD2U/Qww== + dependencies: + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@ember-data/canary-features" "3.16.8" + "@ember/edition-utils" "^1.2.0" + babel-plugin-debug-macros "^0.3.3" + babel-plugin-filter-imports "^4.0.0" babel6-plugin-strip-class-callcheck "^6.0.0" broccoli-debug "^0.6.5" broccoli-file-creator "^2.1.1" @@ -737,116 +972,94 @@ broccoli-merge-trees "^3.0.2" broccoli-rollup "^4.1.1" calculate-cache-key-for-tree "^2.0.0" - chalk "^2.4.1" + chalk "^3.0.0" + ember-cli-babel "^7.20.5" ember-cli-path-utils "^1.0.0" ember-cli-string-utils "^1.1.0" + ember-cli-typescript "^3.1.3" ember-cli-version-checker "^3.1.2" esm "^3.2.25" - git-repo-info "^2.0.0" - glob "^7.1.4" + git-repo-info "^2.1.1" + glob "^7.1.6" npm-git-info "^1.0.3" - rimraf "^2.6.2" + rimraf "^3.0.0" rsvp "^4.8.5" + semver "^6.3.0" silent-error "^1.1.1" -"@ember-data/adapter@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.12.0.tgz#5e160019d7959e87ad6b4287c0adc79c546a9e3a" - integrity sha512-2djnTDFXnKyX16B69RHJmevUH4RR04X0+2bkhOt2tRsGoYYiXt7vxb1vpjZkpgZkhg37/gPdG95Yc6m5EJQB7Q== - dependencies: - "@ember-data/-build-infra" "3.12.0" - ember-cli-babel "^7.8.0" - ember-cli-test-info "^1.0.0" - ember-cli-typescript "^2.0.2" - -"@ember-data/canary-features@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.12.0.tgz#325ca9ef12a59b69cfd7f320767e8513f0ed05e0" - integrity sha512-tgTY/Nbj8uSRzHk+TxOtmsnk0Hv25p+6B4KE68mwSNZO6dKFbaKvjPXfdgWkIclLaIEIP0rgfUPXqiiLJ71tDg== - dependencies: - ember-cli-babel "^7.8.0" - -"@ember-data/model@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.12.0.tgz#252dd52b39945d9a15a7e2eb3c26cffac43fa224" - integrity sha512-nprNXgfPRh6GPJdxvbrKTKFbbEcaxLgHux2xxsldpyCO7tkEMTvg4U5ezxLHfcxzsTwVFSg3hGn740USsTg/Tg== - dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/store" "3.12.0" - ember-cli-babel "^7.8.0" - ember-cli-string-utils "^1.1.0" +"@ember-data/record-data@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/record-data/-/record-data-3.16.8.tgz#b1ab3623e962794d0683bb513ef90d37753211e7" + integrity sha512-LDFcEb/W0hH9xDzx8bSa59JvNmURWRAiUMnzLwtPEPHkT3CoyCksO6VgLDBdo/7ObvJNlneenEJlxN6XWQygUQ== + dependencies: + "@ember-data/canary-features" "3.16.8" + "@ember-data/private-build-infra" "3.16.8" + "@ember-data/store" "3.16.8" + "@ember/edition-utils" "^1.2.0" + "@ember/ordered-set" "^2.0.3" + ember-cli-babel "^7.20.5" ember-cli-test-info "^1.0.0" - ember-cli-typescript "^2.0.2" - inflection "1.12.0" + ember-cli-typescript "^3.1.3" "@ember-data/rfc395-data@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843" integrity sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ== -"@ember-data/serializer@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.12.0.tgz#3c97ccc931a5bf12125a948d8a9137de3071bec8" - integrity sha512-4B4m8Iv0bqjFPcv3w3Amd9FqzH1DdBUxuuKNSPQiS08mterDKgFklIqaWcsRuycnBCRog8MLgJRFrxq2sKUjag== - dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/store" "3.12.0" - ember-cli-babel "^7.8.0" +"@ember-data/serializer@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.16.8.tgz#60016162a2ffd2387596a426cf9ea6499905259a" + integrity sha512-kEftiSkiwPSllj2KLzfCYEjl6GfBBLFU1XysYnih5ZKMV7tZx9Qr/jJtACwDqmN8qFMUbP9nzjQpKBsQFKKb8A== + dependencies: + "@ember-data/private-build-infra" "3.16.8" + "@ember-data/store" "3.16.8" + ember-cli-babel "^7.20.5" ember-cli-test-info "^1.0.0" - ember-cli-typescript "^2.0.2" + ember-cli-typescript "^3.1.3" -"@ember-data/store@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.12.0.tgz#0b1e6a25b5ff79e96faded4de176f65837b8a40c" - integrity sha512-7KXYAzjL7UYeeWNK2WsV0C9wAMwv2KNQH77Grt5UFb7nLk1NbM3Ct1uUQw7A/aubfI15PcHk3n7c5MFx2WVjTg== - dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/adapter" "3.12.0" - "@ember-data/canary-features" "3.12.0" - ember-cli-babel "^7.8.0" +"@ember-data/store@3.16.8": + version "3.16.8" + resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.16.8.tgz#ad647e7e981ca73ba29fe8d62b39424350ae6e1c" + integrity sha512-VawjRNhB+HZEKdwrExQxeh0ZlCHwXeFEN0GovmBsFR6pdY9AYLAt0rdgqNdTdWIHiCSnuIj4UA/k2sFz5J7F8Q== + dependencies: + "@ember-data/canary-features" "3.16.8" + "@ember-data/private-build-infra" "3.16.8" + ember-cli-babel "^7.20.5" ember-cli-path-utils "^1.0.0" - ember-cli-typescript "^2.0.2" + ember-cli-typescript "^3.1.3" heimdalljs "^0.3.0" -"@ember-decorators/component@^6.0.0", "@ember-decorators/component@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@ember-decorators/component/-/component-6.1.0.tgz#fe1f449bf1407387ddc6c48fe9488ca8b261f6cf" - integrity sha512-htRW62o+lE92cagoIRsHJAq4gTJk41BSOjid2DEejqKBp8tA/fkARcLTYwC5gXjDfYXvWlUAHX2GSlhN3hDqIw== +"@ember-decorators/component@^6.1.0": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/component/-/component-6.1.1.tgz#b360dc4fa8e576ee1c840879399ef1745fd96e06" + integrity sha512-Cj8tY/c0MC/rsipqsiWLh3YVN72DK92edPYamD/HzvftwzC6oDwawWk8RmStiBnG9PG/vntAt41l3S7HSSA+1Q== dependencies: - "@ember-decorators/utils" "^6.1.0" + "@ember-decorators/utils" "^6.1.1" ember-cli-babel "^7.1.3" -"@ember-decorators/utils@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@ember-decorators/utils/-/utils-6.1.0.tgz#3bfa930c7129cfcd3d803fb150aa4afb64ee5005" - integrity sha512-5uq65VnqxU0gMynI/C2vX4VrxLRwnuTgwvp0bWaJr62K+u6Rnb641MdtW5aDxzMli2C+r8f7SOHXMj10KB7ZcA== +"@ember-decorators/utils@^6.1.0", "@ember-decorators/utils@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/utils/-/utils-6.1.1.tgz#6b619814942b4fb3747cfa9f540c9f05283d7c5e" + integrity sha512-0KqnoeoLKb6AyoSU65TRF5T85wmS4uDn06oARddwNPxxf/lt5jQlh41uX3W7V/fWL9tPu8x1L1Vvpc80MN1+YA== dependencies: ember-cli-babel "^7.1.3" -"@ember/jquery@^0.6.0": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@ember/jquery/-/jquery-0.6.1.tgz#eef89ebc8d7b49bddc176f2a646746c8f5d93978" - integrity sha512-XMgfUYag97YOYLsC0Ys4/H6mHO2U2wra/92eVIug+5eYBloYSDhv2MY/iq/ocwXVSB2dQaphJx5pFXqdrjEzWQ== - dependencies: - broccoli-funnel "^2.0.2" - broccoli-merge-trees "^3.0.2" - ember-cli-babel "^7.7.3" - ember-cli-version-checker "^3.1.3" - jquery "^3.4.1" - resolve "^1.11.1" +"@ember/edition-utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6" + integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog== -"@ember/optional-features@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-0.7.0.tgz#f65a858007020ddfb8342f586112750c32abd2d9" - integrity sha512-qLXvL/Kq/COb43oQmCrKx7Fy8k1XJDI2RlgbCnZHH26AGVgJT/sZugx1A2AIxKdamtl/Mi+rQSjGIuscSjqjDw== +"@ember/optional-features@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-1.3.0.tgz#d7da860417b85a56cec88419f30da5ee1dde2756" + integrity sha512-Lrfojy4xKwTX+J4EAylmxZY2TO6bQtP4Lg5C8/z2priVqiT0X5fVB1+4WQCJbRBetctO1lMDnqjmhWCVKB8bmQ== dependencies: - chalk "^2.3.0" - co "^4.6.0" - ember-cli-version-checker "^2.1.0" - glob "^7.1.2" - inquirer "^3.3.0" + chalk "^3.0.0" + ember-cli-version-checker "^3.1.3" + glob "^7.1.6" + inquirer "^7.0.1" mkdirp "^0.5.1" - silent-error "^1.1.0" + silent-error "^1.1.1" util.promisify "^1.0.0" "@ember/ordered-set@^2.0.3": @@ -857,25 +1070,25 @@ ember-cli-babel "^6.16.0" ember-compatibility-helpers "^1.1.1" -"@ember/render-modifiers@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-1.0.1.tgz#a85e746e4bb9fd51302cc43e726e2c641261a7c2" - integrity sha512-HHZwL84jCVAaIDFtPZHAnM41aB8XgvDiutD1tKnll43fw7/rhejGj/LDWdB1jrPF+vryFSSQwSJ85gk4J7W86g== +"@ember/render-modifiers@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-1.0.2.tgz#2e87c48db49d922ce4850d707215caaac60d8444" + integrity sha512-6tEnHl5+62NTSAG2mwhGMFPhUrJQjoVqV+slsn+rlTknm2Zik+iwxBQEbwaiQOU1FUYxkS8RWcieovRNMR8inQ== dependencies: ember-cli-babel "^7.10.0" ember-modifier-manager-polyfill "^1.1.0" -"@ember/test-helpers@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.6.1.tgz#5eb0b58486524c54f1b617a83e4ab327b7c62f07" - integrity sha512-gXLXR0XdZKfyXHFP+QLpG55TlrDtvrZI6TMQVQxdZwsz589kN8idmc01rDjyy53jx430tZTEsdhJvC2LrHXPwg== +"@ember/test-helpers@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.7.1.tgz#cc22a954b3b46856518f034bd492a74e0482389f" + integrity sha512-+ioumnanSRJzZ0ZH30FIkB0r41UhVyuWQ9R9Yp1phDWJQDLumxg+25WDr40relwcH6z0Cn6LIEzeTVujO/0Rww== dependencies: broccoli-debug "^0.6.5" broccoli-funnel "^2.0.2" ember-assign-polyfill "^2.6.0" ember-cli-babel "^7.7.3" ember-cli-htmlbars-inline-precompile "^2.1.0" - ember-test-waiters "^1.0.0" + ember-test-waiters "^1.1.1" "@embroider/core@0.4.3", "@embroider/core@^0.4.3": version "0.4.3" @@ -923,62 +1136,80 @@ resolve "^1.8.1" semver "^5.6.0" -"@glimmer/compiler@^0.42.0": - version "0.42.0" - resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.42.0.tgz#8c3852e27177bbecd3eed5bdbd15ec729e09ef8a" - integrity sha512-3YkZkVuSv3e78WLYOz9YA1wKa/azFnBKADwcCNRhYpVOp9CHBJq4CzZ2pFcceYrCvL1CGgJ1crZJeuXfpkJyOw== - dependencies: - "@glimmer/interfaces" "^0.42.0" - "@glimmer/syntax" "^0.42.0" - "@glimmer/util" "^0.42.0" - "@glimmer/wire-format" "^0.42.0" +"@glimmer/component@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-1.0.0.tgz#f9052c8e99fb7b3d48d27c65891c5f0e59084a82" + integrity sha512-1ERZYNLZRuC8RYbcfkJeAWn3Ly7W2VdoHLQIHCmhQH/m7ubkNOdLQcTnUzje7OnRUs9EJ6DjfoN57XRX9Ux4rA== + dependencies: + "@glimmer/di" "^0.1.9" + "@glimmer/env" "^0.1.7" + "@glimmer/util" "^0.44.0" + broccoli-file-creator "^2.1.1" + broccoli-merge-trees "^3.0.2" + ember-cli-babel "^7.7.3" + ember-cli-get-component-path-option "^1.0.0" + ember-cli-is-package-missing "^1.0.0" + ember-cli-normalize-entity-name "^1.0.0" + ember-cli-path-utils "^1.0.0" + ember-cli-string-utils "^1.1.0" + ember-cli-typescript "3.0.0" + ember-compatibility-helpers "^1.1.2" -"@glimmer/di@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.2.1.tgz#5286b6b32040232b751138f6d006130c728d4b3d" - integrity sha512-0D53YVuEgGdHfTl9LGWDZqVzGhn4cT0CXqyAuOYkKFLvqboJXz6SnkRhQNPhhA2hLVrPnvUz3+choQmPhHLGGQ== +"@glimmer/di@^0.1.9": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.1.11.tgz#a6878c07a13a2c2c76fcde598a5c97637bfc4280" + integrity sha1-poeMB6E6LCx2/N5ZilyXY3v8QoA= -"@glimmer/env@^0.1.7": +"@glimmer/env@0.1.7", "@glimmer/env@^0.1.7": version "0.1.7" resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc= -"@glimmer/interfaces@^0.42.0": - version "0.42.0" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.42.0.tgz#525f5352dd78011eef7b3eb0e3fb61b981c94319" - integrity sha512-lZlydeRRK3yL6pco0gCstPVuC5XYjBUtql1vSvWTRd+MUO0Chg8kxIvduFVg6f+Xfr1kqWd2YQq1MCMdmfzfvg== +"@glimmer/interfaces@^0.51.1": + version "0.51.1" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.51.1.tgz#c5637669ff83c630d91c700598b9963225d656f2" + integrity sha512-ImwkFNj92RaeANQPlnSQ5kTtK18JzkY2FPE7N7Ktn3AvdXgM4P3puQzPuXhTn4UCBl6NZtN8YqCAy7kQ6eRC0w== + dependencies: + "@simple-dom/interface" "^1.4.0" + +"@glimmer/syntax@^0.51.1": + version "0.51.1" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.51.1.tgz#24cb4f01693bd934075d03087bdc76ab6bff0524" + integrity sha512-z5XSbLgMKGU8tgSm9Ju4mimSAJ6/SZrY2Xw2znEAmUJOIPte+tmkdpggpgj7lAjD5u2YVBVHDbz6RaZDhYASsw== + dependencies: + "@glimmer/interfaces" "^0.51.1" + "@glimmer/util" "^0.51.1" + handlebars "^4.7.4" + simple-html-tokenizer "^0.5.9" -"@glimmer/resolver@^0.4.1": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.3.tgz#b1baae5c3291b4621002ccf8d7870466097e841d" - integrity sha512-UhX6vlZbWRMq6pCquSC3wfWLM9kO0PhQPD1dZ3XnyZkmsvEE94Cq+EncA9JalUuevKoJrfUFRvrZ0xaz+yar3g== +"@glimmer/tracking@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@glimmer/tracking/-/tracking-1.0.0.tgz#aba9feeb47c48d5aadc1226b7e8d19e34031a6bc" + integrity sha512-OuF04ihYD/Rjvf++Rf7MzJVnawMSax/SZXEj4rlsQoMRwtQafgtkWjlFBcbBNQkJ3rev1zzfNN+3mdD2BFIaNg== dependencies: - "@glimmer/di" "^0.2.0" + "@glimmer/env" "^0.1.7" + "@glimmer/validator" "^0.44.0" -"@glimmer/syntax@^0.42.0": - version "0.42.0" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.42.0.tgz#65d38f6f6339e0e00cfbb34bc08ed3ff94f080c6" - integrity sha512-H0vydEQjlSqlVyjUmQxOy9BMBdL8OAII4GQjTXHWOQKmQBreZ05Dpr2EbXusiby6E2lMgbcPOqxGXdB/VVUBew== - dependencies: - "@glimmer/interfaces" "^0.42.0" - "@glimmer/util" "^0.42.0" - handlebars "^4.0.13" - simple-html-tokenizer "^0.5.8" - -"@glimmer/util@^0.42.0": - version "0.42.0" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.42.0.tgz#3f3a647ecaa16bbe4fc0545923d3b0a527319d78" - integrity sha512-rvXxKVb7BoQUvdrEQgxyvIeqGRUFM4LZAc7X1OmIpMnoaEh3fyx/e8Bz0blF0Yk6QvHpfV/GKirhlGmfum/ISA== - -"@glimmer/wire-format@^0.42.0": - version "0.42.0" - resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.42.0.tgz#53f9a6cbcb9882af3a55aed83929f71799f73fab" - integrity sha512-/SmRH98Jm4NyvyWoBj05fqyz52pGDGHq91uX5Fn7sT4xgHDe8smlT+5Ht3Ewl4t2Pmtwqx/4YzitOy/1EKv0aA== - dependencies: - "@glimmer/interfaces" "^0.42.0" - "@glimmer/util" "^0.42.0" +"@glimmer/util@^0.44.0": + version "0.44.0" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.44.0.tgz#45df98d73812440206ae7bda87cfe04aaae21ed9" + integrity sha512-duAsm30uVK9jSysElCbLyU6QQYO2X9iLDLBIBUcCqck9qN1o3tK2qWiHbGK5d6g8E2AJ4H88UrfElkyaJlGrwg== + +"@glimmer/util@^0.51.1": + version "0.51.1" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.51.1.tgz#db27afd2ee7191e8e399c272b9f7fbe05cc26691" + integrity sha512-MCwUvV3z4pqLpeXcv5Mbchdgw0GeEPH8jUEkUTG837b5XlC2M/NO893E5A8AZbGNSP7CDsYibDExz7mjaLqq/A== + dependencies: + "@glimmer/env" "0.1.7" + "@glimmer/interfaces" "^0.51.1" + "@simple-dom/interface" "^1.4.0" + +"@glimmer/validator@^0.44.0": + version "0.44.0" + resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.44.0.tgz#03d127097dc9cb23052cdb7fcae59d0a9dca53e1" + integrity sha512-i01plR0EgFVz69GDrEuFgq1NheIjZcyTy3c7q+w7d096ddPVeVcRzU3LKaqCfovvLJ+6lJx40j45ecycASUUyw== -"@hashicorp/api-double@^1.3.0": +"@hashicorp/api-double@^1.6.1": version "1.6.1" resolved "https://registry.yarnpkg.com/@hashicorp/api-double/-/api-double-1.6.1.tgz#67c4c4c5cbf9f51f3b8bc992ab2df21acf63b318" integrity sha512-JkQZIsH/2B9T2oK5SQNDakvqlHjxQHu0I9ftmmrxqkxYvYoLN+Whp7dzQ8HswOp1vIJyqbvUhSw06XfH/eimZA== @@ -991,139 +1222,219 @@ faker "^4.1.0" js-yaml "^3.13.1" -"@hashicorp/consul-api-double@^2.6.2": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-2.12.0.tgz#725078f770bbd0ef75a5f2498968c5c8891f90a2" - integrity sha512-8OcgesUjWQ8AjaXzbz3tGJQn1kM0sN6pLidGM7isNPUyYmIjIEXQzaeUQYzsfv0N2Ko9ZuOXYUsaBl8IK1KGow== +"@hashicorp/consul-api-double@^3.0.0": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-3.1.6.tgz#46095438b6989a12cab382a88fdb7b227d834794" + integrity sha512-mRH7X7k1zSu/Aq+rs5VoJYrIhD3pO57d+j98dicfs+3KaMO1mQYFYKgyugY/g0kY9FQH3+vySeZ0W5nQs45V1Q== -"@hashicorp/ember-cli-api-double@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-2.0.0.tgz#259b13c89150b852f2ebe3b7c182dd16d3ee4c42" - integrity sha512-ZQ+0exG43jnuxEg5dkPkdsaRPX3je5AU+0KQUOmIug6KQ21nSw3KXmMj9+z6dGymdYBaiXaMY2WNTtj+r1Ajuw== +"@hashicorp/ember-cli-api-double@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.1.0.tgz#ce228ac5c8a46c7a10112f5bc0fb782c47775b60" + integrity sha512-G8dDSewInFZOeD5sprdZPw7ZKUYlkJ9bJxPkEaMRPbC6ZN4ZHqeFWB1xXeq2ROtR07J6Xbs+BrFIE6GHTshpEg== dependencies: - "@hashicorp/api-double" "^1.3.0" + "@hashicorp/api-double" "^1.6.1" array-range "^1.0.1" broccoli-file-creator "^2.1.1" broccoli-merge-trees "^3.0.2" - ember-auto-import "^1.4.0" + ember-auto-import "^1.5.3" ember-cli-babel "^6.6.0" merge-options "^1.0.1" - pretender "^2.0.0" + pretender "^3.2.0" recursive-readdir-sync "^1.0.6" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" - integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: - "@nodelib/fs.stat" "2.0.2" + "@nodelib/fs.stat" "2.0.3" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" - integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== -"@nodelib/fs.walk@^1.2.1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" - integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: - "@nodelib/fs.scandir" "2.1.2" + "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" - integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== - dependencies: - any-observable "^0.3.0" +"@simple-dom/interface@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@simple-dom/interface/-/interface-1.4.0.tgz#e8feea579232017f89b0138e2726facda6fbb71f" + integrity sha512-l5qumKFWU0S+4ZzMaLXFU8tQZsicHEMEyAxI5kDFGhJsRqDwe0a7/iPA/GdxlGyDKseQQAgIz5kzU7eXTrlSpA== "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.6.0.tgz#ec7670432ae9c8eb710400d112c201a362d83393" - integrity sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg== +"@sinonjs/commons@^1", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.7.2": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d" + integrity sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q== dependencies: type-detect "4.0.8" -"@sinonjs/formatio@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" - integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== +"@sinonjs/fake-timers@^6.0.0", "@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@sinonjs/formatio@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-5.0.1.tgz#f13e713cb3313b1ab965901b01b0828ea6b77089" + integrity sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ== dependencies: "@sinonjs/commons" "^1" - "@sinonjs/samsam" "^3.1.0" + "@sinonjs/samsam" "^5.0.2" -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" - integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== +"@sinonjs/samsam@^5.0.2", "@sinonjs/samsam@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-5.0.3.tgz#86f21bdb3d52480faf0892a480c9906aa5a52938" + integrity sha512-QucHkc2uMJ0pFGjJUDP3F9dq5dx8QIaqISl9QgwLOh6P9yv877uONPGXh/OH/0zmM3tW1JjuJltAZV2l7zU+uQ== dependencies: - "@sinonjs/commons" "^1.3.0" - array-from "^2.1.1" - lodash "^4.17.15" + "@sinonjs/commons" "^1.6.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" "@sinonjs/text-encoding@^0.7.1": version "0.7.1" resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/broccoli-plugin@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@types/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#38f8462fecaebc4e09a32e4d4ed1b9808f75bbca" integrity sha512-SLk4/hFc2kGvgwNFrpn2O1juxFOllcHAywvlo7VwxfExLzoz1GGJ0oIZCwj5fwSpvHw4AWpZjJ1fUvb62PDayQ== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== +"@types/chai-as-promised@^7.1.2": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz#779166b90fda611963a3adbfd00b339d03b747bd" + integrity sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.2.9": + version "4.2.11" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.11.tgz#d3614d6c5f500142358e6ed24e1bf16657536c50" + integrity sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/connect@*": + version "3.4.33" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" + integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== + dependencies: + "@types/node" "*" + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/express-serve-static-core@*": + version "4.17.8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.8.tgz#b8f7b714138536742da222839892e203df569d1c" + integrity sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.2": + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.7.tgz#42045be6475636d9801369cd4418ef65cdb0dd59" + integrity sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fs-extra@^5.0.5": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1" + integrity sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ== + dependencies: + "@types/node" "*" + +"@types/glob@*", "@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" +"@types/json-schema@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + +"@types/mime@*": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.2.tgz#857a118d8634c84bba7ae14088e4508490cd5da5" + integrity sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q== + "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^12.7.2": - version "12.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" - integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== +"@types/node@*": + version "14.0.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.20.tgz#0da05cddbc761e1fa98af88a17244c8c1ff37231" + integrity sha512-MRn/NP3dee8yL5QhbSA6riuwkS+UOcsPUMOIOG3KMUQpuor/2TopdRBu8QaaB4fGU+gz/bzyDWt0FtUbeJ8H1A== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/qs@*": + version "6.9.3" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.3.tgz#b755a0934564a200d3efdf88546ec93c369abd03" + integrity sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/rimraf@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46" + integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q== + dependencies: + "@types/glob" "*" + "@types/node" "*" + +"@types/serve-static@*": + version "1.13.4" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.4.tgz#6662a93583e5a6cabca1b23592eb91e12fa80e7c" + integrity sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug== + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" "@types/symlink-or-copy@^1.2.0": version "1.2.0" @@ -1273,10 +1584,10 @@ "@webassemblyjs/wast-parser" "1.7.11" "@xtuc/long" "4.2.1" -"@xg-wang/whatwg-fetch@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@xg-wang/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#f7b222c012a238e7d6e89ed3d72a1e0edb58453d" - integrity sha512-ULtqA6L75RLzTNW68IiOja0XYv4Ebc3OGMzfia1xxSEMpD0mk/pMvkQX0vbCFyQmKc5xGp80Ms2WiSlXLh8hbA== +"@xstate/fsm@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@xstate/fsm/-/fsm-1.4.0.tgz#6fd082336fde4d026e9e448576189ee5265fa51a" + integrity sha512-uTHDeu2xI5E1IFwf37JFQM31RrH7mY7877RqPBS4ZqSNUwoLDuct8AhBWaXGnVizBAYyimVwgCyGa9z/NiRhXA== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1294,9 +1605,9 @@ integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= abab@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.1.tgz#3fa17797032b71410ec372e11668f4b4ffc86a82" - integrity sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== abbrev@1: version "1.1.1" @@ -1319,17 +1630,17 @@ acorn "^5.0.0" acorn-globals@^4.3.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" - integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" acorn-jsx@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" - integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn-walk@^6.0.1: version "6.2.0" @@ -1337,19 +1648,19 @@ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^5.0.0, acorn@^5.6.2: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== - -acorn@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" - integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== after@0.8.2: version "0.8.2" @@ -1357,29 +1668,29 @@ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= aggregate-error@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" - integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" - indent-string "^3.2.0" + indent-string "^4.0.0" ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.1.tgz#b83ca89c5d42d69031f424cad49aada0236c6957" + integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5, ajv@^6.9.1: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -1404,11 +1715,23 @@ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -1429,6 +1752,11 @@ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1441,28 +1769,31 @@ dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= ansi-to-html@^0.6.6: - version "0.6.11" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.11.tgz#5093fc4962186c0e9343dec572a4f71abdc93439" - integrity sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA== + version "0.6.14" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.14.tgz#65fe6d08bba5dd9db33f44a20aec331e0010dad8" + integrity sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== dependencies: - entities "^1.1.1" + entities "^1.1.2" ansicolors@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" integrity sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8= -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1471,6 +1802,14 @@ micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aot-test-generators@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/aot-test-generators/-/aot-test-generators-0.1.0.tgz#43f0f615f97cb298d7919c1b0b4e6b7310b03cd0" @@ -1525,6 +1864,11 @@ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -1535,11 +1879,6 @@ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -array-from@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" - integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= - array-range@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-range/-/array-range-1.0.1.tgz#f56e46591843611c6a56f77ef02eda7c50089bfc" @@ -1557,23 +1896,11 @@ resolved "https://registry.yarnpkg.com/array-to-sentence/-/array-to-sentence-1.1.0.tgz#c804956dafa53232495b205a9452753a258d39fc" integrity sha1-yASVba+lMjJJWyBalFJ1OiWNOfw= -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1601,9 +1928,9 @@ safer-buffer "~2.1.0" assert-never@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.0.tgz#e6597ed9e357f7e62c074dfa7c71e30ed7b67a8b" - integrity sha512-61QPxh2lfV5j2dBsEtwhz8/sUj+baAIuCpQxeWorGeMxlTkbeyGyq7igxJB8yij1JdzUhyoiekNHMXrMYnkjvA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" + integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" @@ -1623,16 +1950,21 @@ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= +ast-types@0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" + integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-disk-cache@^1.2.1: version "1.3.5" resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.5.tgz#cc6206ed79bb6982b878fc52e0505e4f52b62a02" @@ -1646,6 +1978,19 @@ rsvp "^3.0.18" username-sync "^1.0.2" +async-disk-cache@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-2.1.0.tgz#e0f37b187ed8c41a5991518a9556d206ae2843a2" + integrity sha512-iH+boep2xivfD9wMaZWkywYIURSmsL96d6MoqrC94BnGSvXE4Quf8hnJiHGFYhw/nLeIa1XyRaf4vvcvkwAefg== + dependencies: + debug "^4.1.1" + heimdalljs "^0.2.3" + istextorbinary "^2.5.1" + mkdirp "^0.5.0" + rimraf "^3.0.0" + rsvp "^4.8.5" + username-sync "^1.0.2" + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1661,7 +2006,7 @@ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-promise-queue@^1.0.3, async-promise-queue@^1.0.4: +async-promise-queue@^1.0.3, async-promise-queue@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.5.tgz#cb23bce9fce903a133946a700cc85f27f09ea49d" integrity sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw== @@ -1669,11 +2014,6 @@ async "^2.4.1" debug "^2.6.8" -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@^2.4.1, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1691,7 +2031,7 @@ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -1708,15 +2048,22 @@ postcss "^6.0.17" postcss-value-parser "^3.2.3" +available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== babel-code-frame@^6.26.0: version "6.26.0" @@ -1727,7 +2074,7 @@ esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.24.1, babel-core@^6.26.0, babel-core@^6.26.3: +babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -1752,6 +2099,18 @@ slash "^1.0.0" source-map "^0.5.7" +babel-eslint@^10.0.3: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -1880,14 +2239,15 @@ babel-template "^6.24.1" babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" pify "^4.0.1" + schema-utils "^2.6.5" babel-messages@^6.23.0: version "6.23.0" @@ -1903,13 +2263,6 @@ dependencies: babel-runtime "^6.22.0" -babel-plugin-debug-macros@^0.1.10: - version "0.1.11" - resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.1.11.tgz#6c562bf561fccd406ce14ab04f42c218cf956605" - integrity sha512-hZw5qNNGAR02Y+yBUrtsnJHh8OXavkayPRqKGAXnIm4t5rWVpj3ArwsC7TWdpZsBguQvHAeyTxZ7s23yY60HHg== - dependencies: - semver "^5.3.0" - babel-plugin-debug-macros@^0.2.0, babel-plugin-debug-macros@^0.2.0-beta.6: version "0.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz#0120ac20ce06ccc57bf493b667cf24b85c28da7a" @@ -1917,31 +2270,33 @@ dependencies: semver "^5.3.0" -babel-plugin-debug-macros@^0.3.0, babel-plugin-debug-macros@^0.3.2: +babel-plugin-debug-macros@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.3.tgz#29c3449d663f61c7385f5b8c72d8015b069a5cb7" integrity sha512-E+NI8TKpxJDBbVkdWkwHrKgJi696mnRL8XYrOPYw82veNHPDORM9WIQifl6TpIo8PNy2tU2skPqbfkmHXrHKQA== dependencies: semver "^5.3.0" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" -babel-plugin-ember-modules-api-polyfill@^2.12.0, babel-plugin-ember-modules-api-polyfill@^2.6.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.12.0.tgz#a5e703205ba4e625a7fab9bb1aea64ef3222cf75" - integrity sha512-ZQU4quX0TJ1yYyosPy5PFigKdCFEVHJ6H0b3hwjxekIP9CDwzk0OhQuKhCOPti+d52VWjjCjxu2BrXEih29mFw== +babel-plugin-ember-data-packages-polyfill@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-data-packages-polyfill/-/babel-plugin-ember-data-packages-polyfill-0.1.2.tgz#21154c095ddc703722b1fb8bb06c126c0b6d77dc" + integrity sha512-kTHnOwoOXfPXi00Z8yAgyD64+jdSXk3pknnS7NlqnCKAU6YDkXZ4Y7irl66kaZjZn0FBBt0P4YOZFZk85jYOww== dependencies: - ember-rfc176-data "^0.3.12" + "@ember-data/rfc395-data" "^0.0.4" -babel-plugin-feature-flags@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-feature-flags/-/babel-plugin-feature-flags-0.3.1.tgz#9c827cf9a4eb9a19f725ccb239e85cab02036fc1" - integrity sha1-nIJ8+aTrmhn3JcyyOehcqwIDb8E= +babel-plugin-ember-modules-api-polyfill@^2.13.4, babel-plugin-ember-modules-api-polyfill@^2.6.0: + version "2.13.4" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.13.4.tgz#cf62bc9bfd808c48d810d5194f4329e9453bd603" + integrity sha512-uxQPkEQAzCYdwhZk16O9m1R4xtCRNy4oEUTBrccOPfzlIahRZJic/JeP/ZEL0BC6Mfq6r55eOg6gMF/zdFoCvA== + dependencies: + ember-rfc176-data "^0.3.13" babel-plugin-filter-imports@^3.0.0: version "3.0.0" @@ -1951,17 +2306,30 @@ "@babel/types" "^7.4.0" lodash "^4.17.11" +babel-plugin-filter-imports@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-4.0.0.tgz#068f8da15236a96a9602c36dc6f4a6eeca70a4f4" + integrity sha512-jDLlxI8QnfKd7PtieH6pl4tZJzymzfCDCPGdTq/grgbiYAikwDPp/oL0IlFJn0HQjLpcLkyYhPKkUVneRESw5w== + dependencies: + "@babel/types" "^7.7.2" + lodash "^4.17.15" + babel-plugin-htmlbars-inline-precompile@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz#a9d2f6eaad8a3f3d361602de593a8cbef8179c22" integrity sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ== -babel-plugin-htmlbars-inline-precompile@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-2.0.0.tgz#e08e0107468637f93625d159d3670dc19cf55e4f" - integrity sha512-08vtZNHseQ+uxN5DxK0ca1Qs1MWqzieuWF+pYkEzFohF+WxVNLiM1FN6ss5YP3BrigE68sI/yFrbJlO0bSb1XA== +babel-plugin-htmlbars-inline-precompile@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.1.0.tgz#85085b50385277f2b331ebd54e22fa91aadc24e8" + integrity sha512-ar6c4YVX6OV7Dzpq7xRyllQrHwVEzJf41qysYULnD6tu6TS+y1FxT2VcEvMC6b9Rq9xoHMzvB79HO3av89JCGg== -babel-plugin-istanbul@^5.1.0: +babel-plugin-htmlbars-inline-precompile@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-4.1.0.tgz#11796422e65d900a968481fa3fb37e0425c928dd" + integrity sha512-gM+UP6HO5RlGiOQzJVGRUHgAsefJeOdh5Pn+rZRS6Tr1MnEqVgTJ2G2ywnl+G+Zcuec18fz7XA+O2tHhsmct6w== + +babel-plugin-istanbul@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== @@ -1971,7 +2339,7 @@ istanbul-lib-instrument "^3.3.0" test-exclude "^5.2.3" -babel-plugin-module-resolver@^3.1.1, babel-plugin-module-resolver@^3.2.0: +babel-plugin-module-resolver@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== @@ -1982,6 +2350,17 @@ reselect "^3.0.1" resolve "^1.4.0" +babel-plugin-module-resolver@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.0.0.tgz#8f3a3d9d48287dc1d3b0d5595113adabd36a847f" + integrity sha512-3pdEq3PXALilSJ6dnC4wMWr0AZixHRM4utpdpBR9g5QG7B7JwWyukQv7a9hVxkbGFl+nQbrHDqqQOIBtTXTP/Q== + dependencies: + find-babel-config "^1.2.0" + glob "^7.1.6" + pkg-up "^3.1.0" + reselect "^4.0.0" + resolve "^1.13.1" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -2369,10 +2748,10 @@ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== base@^0.11.1: version "0.11.2" @@ -2387,7 +2766,7 @@ mixin-deep "^1.2.0" pascalcase "^0.1.1" -basic-auth@~2.0.0: +basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== @@ -2418,10 +2797,22 @@ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -"binaryextensions@1 || 2": - version "2.2.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.2.0.tgz#e7c6ba82d4f5f5758c26078fe8eea28881233311" - integrity sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw== +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +"binaryextensions@1 || 2", binaryextensions@^2.1.2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.3.0.tgz#1d269cbf7e6243ea886aa41453c3651ccbe13c22" + integrity sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" blank-object@^1.0.1: version "1.0.2" @@ -2441,16 +2832,26 @@ inherits "~2.0.0" bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +blueimp-md5@^2.10.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.16.0.tgz#9018bb805e4ee05512e0e8cbdb9305eeecbdc87c" + integrity sha512-j4nzWIqEFpLSbdhUApHRGDwfXbV8ALhqOn+FY5L6XBdKPAXU9BpGgFSbDsgqogfqPPR9R2WooseWCsfhfEC6uQ== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== -body-parser@1.19.0, body-parser@^1.18.3, body-parser@^1.19.0: +body-parser@1.19.0, body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -2477,15 +2878,16 @@ safe-json-parse "~1.0.1" bower-config@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.1.tgz#85fd9df367c2b8dbbd0caa4c5f2bad40cd84c2cc" - integrity sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw= + version "1.4.3" + resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.3.tgz#3454fecdc5f08e7aa9cc6d556e492be0669689ae" + integrity sha512-MVyyUk3d1S7d2cl6YISViwJBc2VXCkxF5AUFykvN0PQj5FsUiMNSgAYTso18oRFfyZ6XEtjrgg9MAaufHbOwNw== dependencies: graceful-fs "^4.1.3" + minimist "^0.2.1" mout "^1.0.0" - optimist "^0.6.1" osenv "^0.1.3" untildify "^2.1.0" + wordwrap "^0.0.3" bower-endpoint-parser@0.2.2: version "0.2.2" @@ -2516,7 +2918,7 @@ split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2575,18 +2977,19 @@ rsvp "^4.8.2" workerpool "^2.3.0" -broccoli-babel-transpiler@^7.1.2, broccoli-babel-transpiler@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.2.0.tgz#5c0d694c4055106abb385e2d3d88936d35b7cb18" - integrity sha512-lkP9dNFfK810CRHHWsNl9rjyYqcXH3qg0kArnA6tV9Owx3nlZm3Eyr0cGo6sMUQCNLH+2oKrRjOdUGSc6Um6Cw== +broccoli-babel-transpiler@^7.3.0, broccoli-babel-transpiler@^7.5.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.6.0.tgz#819e6d228b8aa3b4f3b6dfc4b546c13dd304b462" + integrity sha512-VjqIl4qe3zEkGjsPA2jgw/jakjfLjw2IpQ62d4f1kArZyMW/cQ6o54VD0Cd6cai4J08nb4WPLu4cr4Z62vr5uw== dependencies: - "@babel/core" "^7.3.3" - "@babel/polyfill" "^7.0.0" + "@babel/core" "^7.10.2" + "@babel/polyfill" "^7.10.1" broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.2" broccoli-persistent-filter "^2.2.1" clone "^2.1.2" hash-for-dep "^1.4.7" + heimdalljs "^0.2.1" heimdalljs-logger "^0.1.9" json-stable-stringify "^1.0.1" rsvp "^4.8.4" @@ -2639,10 +3042,10 @@ inline-source-map-comment "^1.0.5" json-stable-stringify "^1.0.0" -broccoli-concat@^3.2.2, broccoli-concat@^3.7.1, broccoli-concat@^3.7.3: - version "3.7.4" - resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.4.tgz#7371e846eb7a97cb44ccff10f68582bcadcafacd" - integrity sha512-9gRv1tyCQuq2+48DT9DQyxRNLOuwDtHybDeYuWA3g26HFqZd0PGAOeXcLXHpKRhxzrEbU6Gm28dZ/KolMr04cQ== +broccoli-concat@^3.2.2, broccoli-concat@^3.7.4: + version "3.7.5" + resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.5.tgz#223beda8c1184252cf08ae020a3d45ffa6a48218" + integrity sha512-rDs1Mej3Ej0Cy5yIO9oIQq5+BCv0opAwS2NW7M0BeCsAMeFM42Z/zacDUC6jKc5OV5wiHvGTyCPLnZkMe0h6kQ== dependencies: broccoli-debug "^0.6.5" broccoli-kitchen-sink-helpers "^0.3.1" @@ -2657,6 +3060,23 @@ lodash.uniq "^4.2.0" walk-sync "^0.3.2" +broccoli-concat@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-4.2.4.tgz#78e359ddc540b999d815355163bf3cfb6bd67322" + integrity sha512-NgdBIE57r+U/AslBohQr0mCS7PopIWL8dihMI1CzqffQkisAgqWMuddjYmizqRBQlml7crBFaBeUnPDHhf4/RQ== + dependencies: + broccoli-debug "^0.6.5" + broccoli-kitchen-sink-helpers "^0.3.1" + broccoli-plugin "^4.0.2" + ensure-posix-path "^1.0.2" + fast-sourcemap-concat "^2.1.0" + find-index "^1.1.0" + fs-extra "^8.1.0" + fs-tree-diff "^2.0.1" + lodash.merge "^4.6.2" + lodash.omit "^4.1.0" + lodash.uniq "^4.2.0" + broccoli-config-loader@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/broccoli-config-loader/-/broccoli-config-loader-1.0.1.tgz#d10aaf8ebc0cb45c1da5baa82720e1d88d28c80a" @@ -2780,6 +3200,22 @@ symlink-or-copy "^1.0.0" walk-sync "^0.3.1" +broccoli-funnel@^3.0.1, broccoli-funnel@^3.0.2, broccoli-funnel@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-3.0.3.tgz#26fd42632471f67a91f4770d1987118087219937" + integrity sha512-LPzZ91BwStoHZXdXHQAJeYORl189OrRKM5NdIi86SDU9wZ4s/3lV1PRFOiobDT/jKM10voM7CDzfvicHbCYxAQ== + dependencies: + array-equal "^1.0.0" + blank-object "^1.0.1" + broccoli-plugin "^4.0.1" + debug "^4.1.1" + fast-ordered-set "^1.0.0" + fs-tree-diff "^2.0.1" + heimdalljs "^0.2.0" + minimatch "^3.0.0" + path-posix "^1.0.0" + walk-sync "^2.0.2" + broccoli-kitchen-sink-helpers@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.2.9.tgz#a5e0986ed8d76fb5984b68c3f0450d3a96e36ecc" @@ -2839,10 +3275,18 @@ broccoli-plugin "^1.3.0" merge-trees "^2.0.0" -broccoli-middleware@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/broccoli-middleware/-/broccoli-middleware-2.1.0.tgz#cbb458cb6360bdd79aa75a54057f10fe918157e6" - integrity sha512-ymuDaxQBKG51hKfAeDf8G0Y70rRSPS5Pu77u5HO0YsYTSSAjdZuYT2ALIlWTm+MFXYRQJIlMsqDdDNBzsvy0BQ== +broccoli-merge-trees@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-4.2.0.tgz#692d3c163ecea08c5714a9434d664e628919f47c" + integrity sha512-nTrQe5AQtCrW4enLRvbD/vTLHqyW2tz+vsLXQe4IEaUhepuMGVKJJr+I8n34Vu6fPjmPLwTjzNC8izMIDMtHPw== + dependencies: + broccoli-plugin "^4.0.2" + merge-trees "^2.0.0" + +broccoli-middleware@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/broccoli-middleware/-/broccoli-middleware-2.1.1.tgz#183635bbef4dc1241533ee001a162f013d776cb9" + integrity sha512-BK8aPhQpOLsHWiftrqXQr84XsvzUqeaN4PlCQOYg5yM0M+WKAHtX2WFXmicSQZOVgKDyh5aeoNTFkHjBAEBzwQ== dependencies: ansi-html "^0.0.7" handlebars "^4.0.4" @@ -2868,6 +3312,11 @@ mkdirp "^0.5.1" walk-sync "^0.3.2" +broccoli-node-api@^1.6.0, broccoli-node-api@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/broccoli-node-api/-/broccoli-node-api-1.7.0.tgz#391aa6edecd2a42c63c111b4162956b2fa288cb6" + integrity sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw== + broccoli-node-info@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-1.1.0.tgz#3aa2e31e07e5bdb516dd25214f7c45ba1c459412" @@ -2878,7 +3327,23 @@ resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-2.1.0.tgz#ca84560e8570ff78565bea1699866ddbf58ad644" integrity sha512-l6qDuboJThHfRVVWQVaTs++bFdrFTP0gJXgsWenczc1PavRVUmL1Eyb2swTAXXMpDOnr2zhNOBLx4w9AxkqbPQ== -broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: +broccoli-output-wrapper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/broccoli-output-wrapper/-/broccoli-output-wrapper-2.0.0.tgz#f1e0b9b2f259a67fd41a380141c3c20b096828e6" + integrity sha512-V/ozejo+snzNf75i/a6iTmp71k+rlvqjE3+jYfimuMwR1tjNNRdtfno+NGNQB2An9bIAeqZnKhMDurAznHAdtA== + dependencies: + heimdalljs-logger "^0.1.10" + +broccoli-output-wrapper@^3.2.1: + version "3.2.3" + resolved "https://registry.yarnpkg.com/broccoli-output-wrapper/-/broccoli-output-wrapper-3.2.3.tgz#e5c9de7c881570eb4c0b0d194bb12d9671b25a9b" + integrity sha512-vzbm4j59Wr5vr/O50LD43Np1jbLBWJ/vhppzL/UXWf39xac9grJtrlx9SSy+pDRNT2LGBHNIGPOhdqwp94q2Pg== + dependencies: + fs-extra "^8.1.0" + heimdalljs-logger "^0.1.10" + symlink-or-copy "^1.2.0" + +broccoli-persistent-filter@^1.1.5, broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: version "1.4.6" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz#80762d19000880a77da33c34373299c0f6a3e615" integrity sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw== @@ -2897,7 +3362,7 @@ symlink-or-copy "^1.0.1" walk-sync "^0.3.1" -broccoli-persistent-filter@^2.1.0, broccoli-persistent-filter@^2.1.1, broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.2.2, broccoli-persistent-filter@^2.3.1: +broccoli-persistent-filter@^2.1.0, broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.2.2, broccoli-persistent-filter@^2.3.0, broccoli-persistent-filter@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== @@ -2917,6 +3382,24 @@ sync-disk-cache "^1.3.3" walk-sync "^1.0.0" +broccoli-persistent-filter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-3.1.0.tgz#5812abbc000b2409ef40addeeed16a2a9482696e" + integrity sha512-yHHPv7M04qb9ajo3QkbGWetpshekVYG8sSjNdgAPQQ3spiRvS6RthYBddni5iw9b2DidSCpe/YPGRnp7LL4OIQ== + dependencies: + async-disk-cache "^2.0.0" + async-promise-queue "^1.0.3" + broccoli-plugin "^4.0.3" + fs-tree-diff "^2.0.0" + hash-for-dep "^1.5.0" + heimdalljs "^0.2.1" + heimdalljs-logger "^0.1.7" + mkdirp "^0.5.1" + promise-map-series "^0.2.1" + rimraf "^3.0.0" + symlink-or-copy "^1.0.1" + sync-disk-cache "^2.0.0" + broccoli-plugin@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.1.0.tgz#73e2cfa05f8ea1e3fc1420c40c3d9e7dc724bf02" @@ -2927,7 +3410,7 @@ rimraf "^2.3.4" symlink-or-copy "^1.0.1" -broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0, broccoli-plugin@^1.3.1: +broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz#a26315732fb99ed2d9fb58f12a1e14e986b4fabd" integrity sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ== @@ -2937,7 +3420,7 @@ rimraf "^2.3.4" symlink-or-copy "^1.1.8" -broccoli-plugin@^2.0.0: +broccoli-plugin@^2.0.0, broccoli-plugin@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz#2fab6c578219cfcc64f773e9616073313fc8b334" integrity sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw== @@ -2947,6 +3430,32 @@ rimraf "^2.3.4" symlink-or-copy "^1.1.8" +broccoli-plugin@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-3.1.0.tgz#54ba6dd90a42ec3db5624063292610e326b1e542" + integrity sha512-7w7FP8WJYjLvb0eaw27LO678TGGaom++49O1VYIuzjhXjK5kn2+AMlDm7CaUFw4F7CLGoVQeZ84d8gICMJa4lA== + dependencies: + broccoli-node-api "^1.6.0" + broccoli-output-wrapper "^2.0.0" + fs-merger "^3.0.1" + promise-map-series "^0.2.1" + quick-temp "^0.1.3" + rimraf "^2.3.4" + symlink-or-copy "^1.1.8" + +broccoli-plugin@^4.0.1, broccoli-plugin@^4.0.2, broccoli-plugin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-4.0.3.tgz#9dcfbfb6a1b27a37cc22e65c071719ce9f92bc1e" + integrity sha512-CtAIEYq5K+4yQv8c/BHymOteuyjDAJfvy/asu4LudIWcMSS7dTn3yGI5gNBkwHG+qlRangYkHJNVAcDZMQbSVQ== + dependencies: + broccoli-node-api "^1.6.0" + broccoli-output-wrapper "^3.2.1" + fs-merger "^3.1.0" + promise-map-series "^0.2.1" + quick-temp "^0.1.3" + rimraf "^3.0.0" + symlink-or-copy "^1.3.0" + broccoli-rollup@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-4.1.1.tgz#7531a24d88ddab9f1bace1c6ee6e6ca74a38d36f" @@ -2974,9 +3483,9 @@ rsvp "^3.0.6" broccoli-slow-trees@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/broccoli-slow-trees/-/broccoli-slow-trees-3.0.1.tgz#9bf2a9e2f8eb3ed3a3f2abdde988da437ccdc9b4" - integrity sha1-m/Kp4vjrPtOj8qvd6YjaQ3zNybQ= + version "3.1.0" + resolved "https://registry.yarnpkg.com/broccoli-slow-trees/-/broccoli-slow-trees-3.1.0.tgz#8e48903f59e061bf1213963733b9e61dec2ee5d7" + integrity sha512-FRI7mRTk2wjIDrdNJd6znS7Kmmne4VkAkl8Ix1R/VoePFMD0g0tEl671xswzFqaRjpT9Qu+CC4hdXDLDJBuzMw== dependencies: heimdalljs "^0.2.1" @@ -2985,6 +3494,18 @@ resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-1.1.0.tgz#54f0e82c8b73f46580cbbc4f578f0b32fca8f809" integrity sha1-VPDoLItz9GWAy7xPV48LMvyo+Ak= +broccoli-source@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-2.1.2.tgz#e9ae834f143b607e9ec114ade66731500c38b90b" + integrity sha512-1lLayO4wfS0c0Sj50VfHJXNWf94FYY0WUhxj0R77thbs6uWI7USiOWFqQV5dRmhAJnoKaGN4WyLGQbgjgiYFwQ== + +broccoli-source@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-3.0.0.tgz#c7c9ba24505941b72a0244568285bc859f69dfbd" + integrity sha512-G4Zc8HngZIdASyQOiz/9H/0Gjc2F02EFwhWF4wiueaI+/FBrM9Ixj6Prno/1aiLIYcN0JvRC3oytN9uOVonTww== + dependencies: + broccoli-node-api "^1.6.0" + broccoli-sri-hash@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/broccoli-sri-hash/-/broccoli-sri-hash-2.1.2.tgz#bc69905ed7a381ad325cc0d02ded071328ebf3f3" @@ -2996,80 +3517,90 @@ sri-toolbox "^0.2.0" symlink-or-copy "^1.0.1" -broccoli-stew@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-2.1.0.tgz#ba73add17fda3b9b01d8cfb343a8b613b7136a0a" - integrity sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw== +broccoli-stew@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-3.0.0.tgz#fd1d19d162ad9490b42e5c563b78c26eb1e80b95" + integrity sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg== dependencies: broccoli-debug "^0.6.5" broccoli-funnel "^2.0.0" broccoli-merge-trees "^3.0.1" - broccoli-persistent-filter "^2.1.1" - broccoli-plugin "^1.3.1" + broccoli-persistent-filter "^2.3.0" + broccoli-plugin "^2.1.0" chalk "^2.4.1" - debug "^3.1.0" + debug "^4.1.1" ensure-posix-path "^1.0.1" - fs-extra "^6.0.1" + fs-extra "^8.0.1" minimatch "^3.0.4" - resolve "^1.8.1" - rsvp "^4.8.4" + resolve "^1.11.1" + rsvp "^4.8.5" symlink-or-copy "^1.2.0" - walk-sync "^0.3.3" + walk-sync "^1.1.3" + +broccoli-string-replace@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/broccoli-string-replace/-/broccoli-string-replace-0.1.2.tgz#1ed92f85680af8d503023925e754e4e33676b91f" + integrity sha1-HtkvhWgK+NUDAjkl51Tk4zZ2uR8= + dependencies: + broccoli-persistent-filter "^1.1.5" + minimatch "^3.0.3" broccoli-uglify-sourcemap@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-3.1.1.tgz#c99342fe1da09ff79653b6184ef8efe0b9bac793" - integrity sha512-X0GkGz75DFPVwRj7LCUaa1hFOPd6STveaHRCOSXIyq076AZzLVAc08zxhbbMHQOxCer8aRD1pHfuU72fQBCzcA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-3.2.0.tgz#d96f1d41f6c18e9a5d49af1a5ab9489cdcac1c6c" + integrity sha512-kkkn8v7kXdWwnZNekq+3ILuTAGkZoaoEMUYCKoER5/uokuoyTjtdYLHaE7UxHkuPEuLfjvJYv21sCCePZ74/2g== dependencies: - async-promise-queue "^1.0.4" + async-promise-queue "^1.0.5" broccoli-plugin "^1.2.1" debug "^4.1.0" - lodash.defaultsdeep "^4.6.0" + lodash.defaultsdeep "^4.6.1" matcher-collection "^2.0.0" mkdirp "^0.5.0" source-map-url "^0.4.0" symlink-or-copy "^1.0.1" - terser "^3.17.0" + terser "^4.3.9" walk-sync "^1.1.3" - workerpool "^3.1.2" + workerpool "^5.0.1" -broccoli@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-3.2.0.tgz#6b5a89b8d6d0c733d39aa23ac5b43d85f56fafab" - integrity sha512-n58yqAbV2Zbg+HXmBGBOUoDOgbCM0hMJtqvnPDF89Jwk3ZBVhD5/UKW0diY6l3DbB5+j92NCDQVd9HqO+WYFYA== - dependencies: +broccoli@^3.3.3: + version "3.4.2" + resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-3.4.2.tgz#a0c2605bea285c50cac304f482b86670630f4701" + integrity sha512-OZ0QEyL2i08xJWwhg9Fe0x5IScjBur986QRWrj5mAyHRZqF1nShEz01BPFoLt6L2tqJT0gyZsf8nfUvm8CcJgA== + dependencies: + "@types/chai" "^4.2.9" + "@types/chai-as-promised" "^7.1.2" + "@types/express" "^4.17.2" ansi-html "^0.0.7" broccoli-node-info "^2.1.0" broccoli-slow-trees "^3.0.1" - broccoli-source "^1.1.0" - commander "^2.15.1" + broccoli-source "^3.0.0" + commander "^4.1.1" connect "^3.6.6" console-ui "^3.0.4" esm "^3.2.4" - findup-sync "^2.0.0" - handlebars "^4.0.11" + findup-sync "^4.0.0" + handlebars "^4.7.3" heimdalljs "^0.2.6" heimdalljs-logger "^0.1.9" https "^1.0.0" - mime-types "^2.1.19" - promise.prototype.finally "^3.1.0" + mime-types "^2.1.26" resolve-path "^1.4.0" - rimraf "^2.6.2" + rimraf "^3.0.2" sane "^4.0.0" - tmp "0.0.33" - tree-sync "^1.2.2" + tmp "^0.0.33" + tree-sync "^2.0.0" underscore.string "^3.2.2" - watch-detector "^0.1.0" + watch-detector "^1.0.0" brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -3102,7 +3633,7 @@ inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= @@ -3111,17 +3642,19 @@ randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -3146,19 +3679,20 @@ caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.6.0, browserslist@^4.6.6: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" -bser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" - integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" @@ -3191,9 +3725,9 @@ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -3225,9 +3759,9 @@ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -3275,40 +3809,16 @@ calculate-cache-key-for-tree@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" - integrity sha512-Quw8a6y8CPmRd6eU+mwypktYCwUcf8yVFIRbNZ6tPQEckX9yd+EBVEPC/GSZZrMWH9e7Vz4pT7XhpmyApRByLQ== - dependencies: - json-stable-stringify "^1.0.1" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" + integrity sha512-Quw8a6y8CPmRd6eU+mwypktYCwUcf8yVFIRbNZ6tPQEckX9yd+EBVEPC/GSZZrMWH9e7Vz4pT7XhpmyApRByLQ== dependencies: - caller-callsite "^2.0.0" + json-stable-stringify "^1.0.1" callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3327,10 +3837,10 @@ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== can-symlink@^1.0.0: version "1.0.0" @@ -3339,15 +3849,10 @@ dependencies: tmp "0.0.28" -caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000989: - version "1.0.30000989" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" - integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== - -caniuse-lite@^1.0.30000844: - version "1.0.30001022" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6" - integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A== +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001093: + version "1.0.30001096" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz#5a4541af5317dc21f91f5b24d453030a35f919c0" + integrity sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w== capture-exit@^2.0.0: version "2.0.0" @@ -3394,6 +3899,22 @@ escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" @@ -3403,11 +3924,6 @@ has-color "~0.1.0" strip-ansi "~0.1.0" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3420,7 +3936,22 @@ dependencies: inherits "^2.0.1" -chokidar@^2.0.2: +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -3440,9 +3971,9 @@ fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.0: version "1.0.2" @@ -3506,17 +4037,24 @@ resolved "https://registry.yarnpkg.com/clean-up-path/-/clean-up-path-1.0.0.tgz#de9e8196519912e749c9eaf67c13d64fac72a3e5" integrity sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw== -cli-cursor@^2.0.0, cli-cursor@^2.1.0: +cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" -cli-spinners@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" - integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.0.0, cli-spinners@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" + integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== cli-table3@^0.5.1: version "0.5.1" @@ -3535,36 +4073,50 @@ dependencies: colors "1.0.3" -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= +cli-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" + slice-ansi "^3.0.0" + string-width "^4.2.0" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== clipboard@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" - integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== dependencies: good-listener "^1.2.2" select "^1.1.2" tiny-emitter "^2.0.0" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" clone-response@1.0.2: version "1.0.2" @@ -3613,20 +4165,32 @@ dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= -colors@^1.1.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== +colors@^1.1.2, colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" @@ -3647,12 +4211,22 @@ dependencies: graceful-readlink ">= 1.0.0" -commander@^2.15.1, commander@^2.19.0, commander@^2.20.0, commander@^2.6.0, commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.20.0, commander@^2.6.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -common-tags@^1.4.0: +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +common-tags@^1.4.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -3662,10 +4236,10 @@ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-versions@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.5.1.tgz#26e1f5cf0d48a77eced5046b9f67b6b61075a393" - integrity sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg== +compare-versions@^3.4.0, compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== component-bind@1.0.0: version "1.0.0" @@ -3677,7 +4251,7 @@ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -3688,11 +4262,11 @@ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.40.0 < 2" + mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" @@ -3722,17 +4296,17 @@ readable-stream "^2.2.2" typedarray "^0.0.6" -configstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" - integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== +configstore@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: - dot-prop "^4.1.0" + dot-prop "^5.2.0" graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" connect@^3.6.6: version "3.7.0" @@ -3745,18 +4319,16 @@ utils-merge "1.0.1" console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -console-ui@^3.0.2, console-ui@^3.0.4: +console-ui@^3.0.4, console-ui@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-3.1.1.tgz#681a0414e8b0a23ed679d0a2802e39d920801171" integrity sha512-22y+uk4AGq9quz6kofKQjkeCIAm86+MTxT/RZMFm8fMArP2lAkzxjUjNyrw7S6wXnnB+qRnC+/2ANMTke68RTQ== @@ -3796,14 +4368,7 @@ resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.1.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.5.1: +convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -3811,11 +4376,11 @@ safe-buffer "~5.1.1" cookie-parser@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.4.tgz#e6363de4ea98c3def9697b93421c09f30cf5d188" - integrity sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw== + version "1.4.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" + integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== dependencies: - cookie "0.3.1" + cookie "0.4.0" cookie-signature "1.0.6" cookie-signature@1.0.6: @@ -3855,29 +4420,29 @@ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" - integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== - dependencies: - browserslist "^4.6.6" - semver "^6.3.0" +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== core-js@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= -core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-js@^2.6.5: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - core-object@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" @@ -3890,15 +4455,16 @@ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" create-ecdh@^4.0.0: version "4.0.3" @@ -3908,7 +4474,7 @@ bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -3919,7 +4485,7 @@ ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -3950,6 +4516,15 @@ shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -3967,10 +4542,10 @@ randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css.escape@^1.5.1: version "1.5.1" @@ -4006,6 +4581,13 @@ resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-2.0.2.tgz#9714b472de82a1843de2fba9b6876938cab44c68" integrity sha1-lxS0ct6CoYQ94vuptodpOMq0TGg= +dart-sass@^1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/dart-sass/-/dart-sass-1.25.0.tgz#e00c0348118916e9d81cb485297184c131af1dad" + integrity sha512-syNOAstJXAmvD3RifcDk3fiPMyYE2fY8so6w9gf2/wNlKpG0zyH+oiXubEYVOy1WAWkzOc72pbAxwx+3OU4JJA== + dependencies: + chokidar ">=2.0.0 <4.0.0" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -4022,16 +4604,6 @@ whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4039,7 +4611,7 @@ dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.0.1, debug@^3.1.0, debug@^3.2.6: +debug@^3.0.1, debug@^3.1.0, debug@^3.1.1: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -4060,11 +4632,18 @@ dependencies: ms "2.0.0" -decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decamelize@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851" + integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw== + dependencies: + xregexp "^4.2.4" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -4082,22 +4661,25 @@ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== +deep-equal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.3.tgz#cad1c15277ad78a5c01c49c2dee0f54de8a6a7b0" + integrity sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA== dependencies: + es-abstract "^1.17.5" + es-get-iterator "^1.1.0" is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" + is-date-object "^1.0.2" + is-regex "^1.0.5" + isarray "^2.0.5" + object-is "^1.1.2" object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + object.assign "^4.1.0" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + which-boxed-primitive "^1.0.1" + which-collection "^1.0.1" + which-typed-array "^1.1.2" deep-is@~0.1.3: version "0.1.3" @@ -4147,25 +4729,11 @@ is-descriptor "^1.0.2" isobject "^3.0.1" -defined@~1.0.0: +defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= -del@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" - integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== - dependencies: - globby "^10.0.1" - graceful-fs "^4.2.2" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.1" - p-map "^3.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -4186,10 +4754,15 @@ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -4211,25 +4784,20 @@ dependencies: repeating "^2.0.0" -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== -diff@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +detect-newline@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== +diff@^4.0.1, diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" @@ -4240,13 +4808,6 @@ miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4273,14 +4834,22 @@ dependencies: webidl-conversions "^4.0.2" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== dependencies: - is-obj "^1.0.0" + no-case "^3.0.3" + tslib "^1.10.0" -dotignore@~0.1.2: +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +dotignore@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== @@ -4315,30 +4884,28 @@ resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" integrity sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg== +editions@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/editions/-/editions-2.3.1.tgz#3bc9962f1978e801312fbd0aebfed63b49bfe698" + integrity sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA== + dependencies: + errlop "^2.0.0" + semver "^6.3.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.30: - version "1.3.252" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz#5b6261965b564a0f4df0f1c86246487897017f52" - integrity sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg== - -electron-to-chromium@^1.3.47: - version "1.3.340" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" - integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.488: + version "1.3.494" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.494.tgz#0d2dba65b69d696c5b71abb37552ff055fb32a5c" + integrity sha512-EOZuaDT3L1sCIMAVN5J0nGuGWVq5dThrdl0d8XeDYf4MOzbXqZ19OLKesN8TZj0RxtpYjqHpiw/fR6BKWdMwYA== -elliptic@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -4348,6 +4915,14 @@ minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +ember-assign-helper@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ember-assign-helper/-/ember-assign-helper-0.3.0.tgz#7a023dd165ef56b28f77f70fd20e88261380aca7" + integrity sha512-kDY0IRP6PUSJjghM2gIq24OD7d6XcZ1666zmZrywxEVjCenhaR0Oi/BXUU8JEATrIcXIExMIu34GKrHHlCLw0Q== + dependencies: + ember-cli-babel "^7.19.0" + ember-cli-htmlbars "^4.3.1" + ember-assign-polyfill@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.6.0.tgz#07847e3357ee35b33f886a0b5fbec6873f6860eb" @@ -4356,13 +4931,13 @@ ember-cli-babel "^6.16.0" ember-cli-version-checker "^2.0.0" -ember-auto-import@^1.2.13, ember-auto-import@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.5.2.tgz#e97ed96b600caa6090ffed83e4611c3e7ec9bad7" - integrity sha512-skVQpfdc6G5OVRsyemDn3vI1nj/iBBgnoqRLRka0ZbDT2GqelmyJ86bp+Bd/ztJe45Le3we+LXbR7T54RU5A9w== +ember-auto-import@^1.2.13, ember-auto-import@^1.5.2, ember-auto-import@^1.5.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.6.0.tgz#00a498172b04f7084a5d2a327f76f577038ed403" + integrity sha512-BRBrmbDXRuXG/WYbn/2DXM7bFNyQuT80du1scUrrX0+xFVkDOU08s46ZPCvzYprzSg2htgrztQ/nVdnfbIBV+Q== dependencies: "@babel/core" "^7.1.6" - "@babel/preset-env" "^7.0.0" + "@babel/preset-env" "^7.10.2" "@babel/traverse" "^7.1.6" "@babel/types" "^7.1.6" "@embroider/core" "^0.4.3" @@ -4378,7 +4953,7 @@ enhanced-resolve "^4.0.0" fs-extra "^6.0.1" fs-tree-diff "^1.0.0" - handlebars "~4.1.2" + handlebars "^4.3.1" js-string-escape "^1.0.1" lodash "^4.17.10" mkdirp "^0.5.1" @@ -4390,46 +4965,41 @@ walk-sync "^0.3.3" webpack "~4.28" -ember-basic-dropdown@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-1.1.3.tgz#0506045ccc60db4972fc78b963c1324f6415818a" - integrity sha512-zIFk5yzu31L4E5lz3DfXF1IGGMcMAGYssh7hCoemjB7iqkL7Sf1UhUg/yEHcr5aEdfyGc1V3G2s740cRY+VLiQ== - dependencies: - ember-cli-babel "^7.2.0" - ember-cli-htmlbars "^3.0.1" - ember-maybe-in-element "^0.2.0" - -ember-basic-dropdown@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-2.0.5.tgz#72a8a9c1196d5f84f6b849aa21c3cf8ea7830668" - integrity sha512-wG7v9uk5uIozLFx919Wa40xmLXE5jL1d+HKkUxWQJ1vqZCh8S7MjmYIAuluxNFfegEnCtLd+9iDSdZzEEwTtPg== +ember-basic-dropdown@^3.0.3: + version "3.0.6" + resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-3.0.6.tgz#31c6f959864a03093800a265890f3c9db9fc30d7" + integrity sha512-2lUp/EZTTceRytDTtTuEg53i9fUYBfTq/ty4NlnF9EkQS1Shz98VNL3FOkFjvSzPyLG9/26tkmtqLBXmja43ug== dependencies: - "@ember-decorators/component" "^6.1.0" - "@ember/render-modifiers" "^1.0.0" - ember-cli-babel "^7.11.0" - ember-cli-htmlbars "^3.1.0" - ember-element-helper "^0.1.1" + "@ember/render-modifiers" "^1.0.2" + "@glimmer/component" "^1.0.0" + "@glimmer/tracking" "^1.0.0" + ember-cli-babel "^7.13.0" + ember-cli-htmlbars "^4.2.0" + ember-cli-typescript "^3.1.2" + ember-element-helper "^0.2.0" ember-maybe-in-element "^0.4.0" ember-truth-helpers "2.1.0" -ember-changeset-validations@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-changeset-validations/-/ember-changeset-validations-2.1.0.tgz#454b5adc1e4b4bcb0bdf1896a5d50f0bee77b1f0" - integrity sha512-LOAA8KSjpmZkDFvUkFJwDlgiJrQGUwtYAM3ZBTEpbQ8uKo5KEkZ1KkV2hNBV3U9Dv6AEauKp/RpwB9Pn10fzdA== +ember-changeset-validations@^3.0.2: + version "3.7.0" + resolved "https://registry.yarnpkg.com/ember-changeset-validations/-/ember-changeset-validations-3.7.0.tgz#74875705128f56ffe22bf54fe6856838dc9caa7d" + integrity sha512-E4Um4IV5UO72FdT1GWcI8EbNOHE7eS16XFokk6UaKpXs3MLuI1Ev6Zb8Q9Z20g/9/IieBI4XddnGd+1FpXz6aA== dependencies: - ember-changeset "^2.0.0" - ember-cli-babel "^6.16.0" - ember-cli-htmlbars "^3.0.0" + ember-changeset "^3.7.0" + ember-cli-babel "^7.8.0" + ember-cli-htmlbars "^4.0.5" ember-get-config "^0.2.4" ember-validators "^2.0.0" -ember-changeset@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ember-changeset/-/ember-changeset-2.1.2.tgz#8313db829905299e78fe2c5e3df1563551a4c81d" - integrity sha512-zUp9cx/jggV5/HH58AnsoYHvxd9Lea0gPcf98gIYKEJb/yoA034eWUxnL5gMZ9cW0wZg+GxdF3I592K8GBpYoQ== +ember-changeset@^3.7.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/ember-changeset/-/ember-changeset-3.7.1.tgz#5826e2bb7151f85494208aedac25a00400bddf13" + integrity sha512-vYkF9LHoFwQJb9yytfbA9J888a82/4i+NQUeYtyuLtoD4Zty6Z1NzZ5eWwVU/RbsbK45x85T5FKmsxSS1/1cgw== dependencies: - ember-cli-babel "^6.16.0" - ember-deep-set "^0.2.0" + "@glimmer/tracking" "^1.0.0" + ember-auto-import "^1.5.2" + ember-cli-babel "^7.19.0" + validated-changeset "~0.7.1" ember-cli-app-version@^3.2.0: version "3.2.0" @@ -4452,7 +5022,7 @@ resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac" integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA== -ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.10.0, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.0, ember-cli-babel@^6.9.2: +ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.0, ember-cli-babel@^6.9.2: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -4471,64 +5041,59 @@ ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.2.0, ember-cli-babel@^7.7.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.11.0.tgz#a2f4e4f123a4690968b512b87b4ff4bfa57ec244" - integrity sha512-ykEsr7XoEPaADCBCJMViycCok1grtBRGvZ1k/atlL/gQYCQ1W4E4OROY/Mm2YBgyLftBv6buH7IZsULyQRZUmg== - dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.3.4" - "@babel/plugin-proposal-decorators" "^7.3.0" - "@babel/plugin-transform-modules-amd" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.2.0" - "@babel/polyfill" "^7.0.0" - "@babel/preset-env" "^7.0.0" - "@babel/runtime" "^7.2.0" +ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: + version "7.21.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.21.0.tgz#c79e888876aee87dfc3260aee7cb580b74264bbc" + integrity sha512-jHVi9melAibo0DrAG3GAxid+29xEyjBoU53652B4qcu3Xp58feZGTH/JGXovH7TjvbeNn65zgNyoV3bk1onULw== + dependencies: + "@babel/core" "^7.10.2" + "@babel/helper-compilation-targets" "^7.10.2" + "@babel/plugin-proposal-class-properties" "^7.10.1" + "@babel/plugin-proposal-decorators" "^7.10.1" + "@babel/plugin-transform-modules-amd" "^7.10.1" + "@babel/plugin-transform-runtime" "^7.10.1" + "@babel/plugin-transform-typescript" "^7.10.1" + "@babel/polyfill" "^7.10.1" + "@babel/preset-env" "^7.10.2" + "@babel/runtime" "^7.10.2" amd-name-resolver "^1.2.1" - babel-plugin-debug-macros "^0.3.0" - babel-plugin-ember-modules-api-polyfill "^2.12.0" + babel-plugin-debug-macros "^0.3.3" + babel-plugin-ember-data-packages-polyfill "^0.1.2" + babel-plugin-ember-modules-api-polyfill "^2.13.4" babel-plugin-module-resolver "^3.1.1" - broccoli-babel-transpiler "^7.1.2" + broccoli-babel-transpiler "^7.5.0" broccoli-debug "^0.6.4" broccoli-funnel "^2.0.1" broccoli-source "^1.1.0" clone "^2.1.2" ember-cli-babel-plugin-helpers "^1.1.0" - ember-cli-version-checker "^2.1.2" + ember-cli-version-checker "^4.1.0" ensure-posix-path "^1.0.2" + fixturify-project "^1.10.0" + rimraf "^3.0.1" semver "^5.5.0" -ember-cli-broccoli-sane-watcher@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-3.0.0.tgz#dc1812c047e1ceec4413d3c41b51a9ffc61b4cfe" - integrity sha512-sLn+wy6FJpGMHtSwAGUjQK3nJFvw2b6H8bR2EgMIXxkUI3DYFLi6Xnyxm02XlMTcfTxF10yHFhHJe0O+PcJM7A== - dependencies: - broccoli-slow-trees "^3.0.1" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - rsvp "^3.0.18" - sane "^4.0.0" - ember-cli-code-coverage@^1.0.0-beta.4: - version "1.0.0-beta.8" - resolved "https://registry.yarnpkg.com/ember-cli-code-coverage/-/ember-cli-code-coverage-1.0.0-beta.8.tgz#e24abd751be5abababb29400f4ad61ef5fb1c385" - integrity sha512-9MXbaM0iIfTJT5HFrT9v0XouykZu3EKnrz7YiZNRd6JPMr7aBbZTX7ScHUD9OnsuCfuuzgeHE0nUNoU/NGoNDg== + version "1.0.0-beta.9" + resolved "https://registry.yarnpkg.com/ember-cli-code-coverage/-/ember-cli-code-coverage-1.0.0-beta.9.tgz#4a4ca60e88fbf1895de99e3b439f46c129417ab7" + integrity sha512-BHgpstojD05NSKt6HAMRW5V6wQI/VrSgvTzbBnX6DKrxLbY+P/ivzLIU7Zt3lvnMvPhmxlranC2Z/CYS5rdaSw== dependencies: - babel-plugin-istanbul "^5.1.0" + "@babel/register" "^7.6.0" + babel-plugin-istanbul "^5.2.0" babel-plugin-transform-async-to-generator "^6.24.1" - body-parser "^1.18.3" + body-parser "^1.19.0" co "^4.6.0" - ember-cli-babel "^7.1.0" - ember-cli-version-checker "^2.1.2" + ember-cli-babel "^7.11.0" + ember-cli-version-checker "^3.1.3" extend "^3.0.2" - fs-extra "^5.0.0" - istanbul-api "^2.0.6" + fs-extra "^8.1.0" + istanbul-api "^2.1.6" lodash.concat "^4.5.0" - node-dir "^0.1.16" - rsvp "^4.8.3" - walk-sync "^0.3.3" + node-dir "^0.1.17" + rsvp "^4.8.5" + walk-sync "^2.0.2" -ember-cli-dependency-checker@^3.1.0: +ember-cli-dependency-checker@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-3.2.0.tgz#9202ad9e14d6fda33cffc22a11c343c2a8885330" integrity sha512-dkSmcJ/jY/2ms/S6ph2jXSfOW5VfOpLfg5DFEbra0SaMNgYkNDFF1o0U4OdTsG37L5h/AXWNuVtnOa4TMabz9Q== @@ -4550,12 +5115,12 @@ walk-sync "^1.0.0" ember-cli-flash@^1.6.3: - version "1.7.2" - resolved "https://registry.yarnpkg.com/ember-cli-flash/-/ember-cli-flash-1.7.2.tgz#b08cc694103510c42945a8444ce104e426e0b904" - integrity sha512-0TOCG1aOhGs6kWfKJmrBpdKQNjKYkKIEnX8qqRpqSfHsLCINWCETBlNL34vf65xUfEKUrHwWOqgfaxGdqUCR5Q== + version "1.9.0" + resolved "https://registry.yarnpkg.com/ember-cli-flash/-/ember-cli-flash-1.9.0.tgz#d414ea55c869d405a46f1e26983309d3943a13cf" + integrity sha512-sTVsPDUS8NF7HDJPFFCMUZT6UnYi422R7ED/9FrnIjxlCbOABea4EgoQTqKFmLNhST482zMnsfBqdN2hpybn4A== dependencies: - ember-cli-babel "^6.10.0" - ember-cli-htmlbars "^2.0.1" + ember-cli-babel "^7.1.2" + ember-cli-htmlbars "^3.0.0" ember-runtime-enumerable-includes-polyfill "^2.0.0" ember-cli-get-component-path-option@^1.0.0: @@ -4582,18 +5147,7 @@ heimdalljs-logger "^0.1.9" silent-error "^1.1.0" -ember-cli-htmlbars-inline-precompile@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-3.0.0.tgz#df67c7c3e69406063d57d3d9b7a27812bb2835de" - integrity sha512-OI/xDQkYm+uo0rbMAtRFWwuYv+MKekyzDac4xm42kWKNVClCABL56U7X7Z18BEWXhp5twYVbc3PSnjwA/eZN3w== - dependencies: - babel-plugin-htmlbars-inline-precompile "^2.0.0" - ember-cli-version-checker "^3.1.3" - hash-for-dep "^1.5.1" - heimdalljs-logger "^0.1.9" - silent-error "^1.1.0" - -ember-cli-htmlbars@^2.0.1, ember-cli-htmlbars@^2.0.3: +ember-cli-htmlbars@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.5.tgz#b5a105429a6bce4f7c9c97b667e3b8926e31397f" integrity sha512-3f3PAxdnQ/fhQa8XP/3z4RLRgLHxV8j4Ln75aHbRdemOCjBa048KxL9l+acRLhCulbGQCMnLiIUIC89PAzLrcA== @@ -4603,7 +5157,7 @@ json-stable-stringify "^1.0.0" strip-bom "^3.0.0" -ember-cli-htmlbars@^3.0.0, ember-cli-htmlbars@^3.0.1, ember-cli-htmlbars@^3.1.0: +ember-cli-htmlbars@^3.0.0, ember-cli-htmlbars@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz#87806c2a0bca2ab52d4fb8af8e2215c1ca718a99" integrity sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA== @@ -4613,13 +5167,54 @@ json-stable-stringify "^1.0.1" strip-bom "^3.0.0" -ember-cli-inject-live-reload@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.1.tgz#1bf3a6ea1747bceddc9f62f7ca8575de6b53ddaf" - integrity sha512-vrW/3KSrku+Prqmp7ZkpCxYkabnLrTHDEvV9B1yphTP++dhiV7n7Dv9NrmyubkoF3Inm0xrbbhB5mScvvuTQSg== +ember-cli-htmlbars@^4.0.5, ember-cli-htmlbars@^4.2.0, ember-cli-htmlbars@^4.2.2, ember-cli-htmlbars@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-4.3.1.tgz#4af8adc21ab3c4953f768956b7f7d207782cb175" + integrity sha512-CW6AY/yzjeVqoRtItOKj3hcYzc5dWPRETmeCzr2Iqjt5vxiVtpl0z5VTqHqIlT5fsFx6sGWBQXNHIe+ivYsxXQ== + dependencies: + "@ember/edition-utils" "^1.2.0" + babel-plugin-htmlbars-inline-precompile "^3.0.1" + broccoli-debug "^0.6.5" + broccoli-persistent-filter "^2.3.1" + broccoli-plugin "^3.1.0" + common-tags "^1.8.0" + ember-cli-babel-plugin-helpers "^1.1.0" + fs-tree-diff "^2.0.1" + hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.10" + json-stable-stringify "^1.0.1" + semver "^6.3.0" + strip-bom "^4.0.0" + walk-sync "^2.0.2" + +ember-cli-htmlbars@^5.0.0, ember-cli-htmlbars@^5.1.2, ember-cli-htmlbars@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-5.2.0.tgz#5ceccd0d18163dd810dea29f6fd777d0baa01e23" + integrity sha512-EdjuUc7sq9ve6sgsG59qIzOj4svWjgYhO/QEhuV1UbOQ3ATeqNPiD++bFeAGjUhravw9HPhQPPoHnMlAikqLIw== + dependencies: + "@ember/edition-utils" "^1.2.0" + babel-plugin-htmlbars-inline-precompile "^4.1.0" + broccoli-debug "^0.6.5" + broccoli-persistent-filter "^3.1.0" + broccoli-plugin "^4.0.3" + common-tags "^1.8.0" + ember-cli-babel-plugin-helpers "^1.1.0" + fs-tree-diff "^2.0.1" + hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.10" + json-stable-stringify "^1.0.1" + semver "^7.3.2" + silent-error "^1.1.1" + strip-bom "^4.0.0" + walk-sync "^2.1.0" + +ember-cli-inject-live-reload@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.2.tgz#95edb543b386239d35959e5ea9579f5382976ac7" + integrity sha512-HDD6o/kBHT/kUtazklU0OW23q2jigIN42QmcpFdXUSvJ2/2SYA6yIqSUxWfJgISmtn5gTNZ2KPq1p3dLkhJxSQ== dependencies: clean-base-url "^1.0.0" - ember-cli-version-checker "^2.1.2" + ember-cli-version-checker "^3.1.3" ember-cli-is-package-missing@^1.0.0: version "1.0.0" @@ -4650,18 +5245,18 @@ dependencies: silent-error "^1.0.0" -ember-cli-page-object@^1.15.0-beta.2: - version "1.15.3" - resolved "https://registry.yarnpkg.com/ember-cli-page-object/-/ember-cli-page-object-1.15.3.tgz#4b1814e270367a455353aeb81019fb8d8c641886" - integrity sha512-wGZqQnsyFHcJilf0xcWa53my/bprtZWHXg7m6wZPbWbnJCXNf1aAouj9uwH77r3PnE+/uYt0MIKMfX3Cnd607g== +ember-cli-page-object@^1.16.2: + version "1.17.3" + resolved "https://registry.yarnpkg.com/ember-cli-page-object/-/ember-cli-page-object-1.17.3.tgz#d3758e60fe7375571aafd2c545951cbc46898cfe" + integrity sha512-Y/zyvBLUxE+6h9DLdyOsY1lh3vmYPcCqN5OEEJS3xMxXzpkEfHnOjhbkhFPp68DielDltrVQHeAhDyUiQwEmxQ== dependencies: broccoli-file-creator "^2.1.1" broccoli-merge-trees "^2.0.0" ceibo "~2.0.0" ember-cli-babel "^6.16.0" ember-cli-node-assets "^0.2.2" - ember-native-dom-helpers "^0.5.3" - jquery "^3.2.1" + ember-native-dom-helpers "^0.6.3" + jquery "^3.4.1" rsvp "^4.7.0" ember-cli-path-utils@^1.0.0: @@ -4696,12 +5291,12 @@ dependencies: broccoli-sri-hash "^2.1.0" -ember-cli-string-helpers@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/ember-cli-string-helpers/-/ember-cli-string-helpers-4.0.3.tgz#c4f877cf9fd2ddf445cbde1fd786e92f6c758523" - integrity sha512-TH3yI0QhBlT0i5p/85oOApaZkL1+atFyhjsWVI7JL4d+TIcn41sS4Oe8X0YQQesUWpwRY6dLOxQPBKSdWEFwxg== +ember-cli-string-helpers@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-string-helpers/-/ember-cli-string-helpers-5.0.0.tgz#b1e08ec3ca1c9a457f9fd9aafff60b5939fbf91d" + integrity sha512-PodD3Uf7BkOXIu95E6cWEC0ERroTiUOAwOr828Vb+fPFtV7WYNSC27C9Ds1ggCyyRqnXmpS0JSqCTN1gPZfkWQ== dependencies: - broccoli-funnel "^2.0.2" + broccoli-funnel "^3.0.3" ember-cli-babel "^7.7.3" ember-cli-string-utils@^1.0.0, ember-cli-string-utils@^1.1.0: @@ -4709,22 +5304,22 @@ resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" integrity sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE= -ember-cli-template-lint@^1.0.0-beta.1: - version "1.0.0-beta.3" - resolved "https://registry.yarnpkg.com/ember-cli-template-lint/-/ember-cli-template-lint-1.0.0-beta.3.tgz#48f2fa43e7ad0172685fa171e5acd4d75b873792" - integrity sha512-ivrvYih+cx7VUlyyMQBmk61Ki+gT5axfppWrk6fSvHaoxHZadXU3zRJMT5DPkeRaayRu0y1dls4wqfrUhzQ1PA== +ember-cli-template-lint@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ember-cli-template-lint/-/ember-cli-template-lint-2.0.2.tgz#729436e71f45e31a9237bab4bbc9a9ef67401c24" + integrity sha512-q/aXIYC9cxWRT3B+VX/45EPzYni5OuctxR9ePhZA1//bjaZtwcnKQtwYk7H4oEDrIKce5KMb0CMco2gvGYmAjA== dependencies: aot-test-generators "^0.1.0" - broccoli-concat "^3.7.1" + broccoli-concat "^4.2.2" broccoli-persistent-filter "^2.1.0" - chalk "^2.4.1" + chalk "^3.0.0" debug "^4.0.1" - ember-cli-version-checker "^3.0.1" - ember-template-lint "^1.1.0" + ember-cli-version-checker "^5.0.1" + ember-template-lint "^2.0.1" json-stable-stringify "^1.0.1" - md5-hex "^2.0.0" - strip-ansi "^4.0.0" - walk-sync "^1.1.3" + md5-hex "^3.0.1" + strip-ansi "^6.0.0" + walk-sync "^2.0.2" ember-cli-test-info@^1.0.0: version "1.0.0" @@ -4740,7 +5335,24 @@ dependencies: ember-cli-babel "^6.8.1" -ember-cli-typescript@^2.0.0, ember-cli-typescript@^2.0.2: +ember-cli-typescript@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-3.0.0.tgz#3b838d1ce9e4d22a98e68da22ceac6dc0cfd9bfc" + integrity sha512-lo5YArbJzJi5ssvaGqTt6+FnhTALnSvYVuxM7lfyL1UCMudyNJ94ovH5C7n5il7ATd6WsNiAPRUO/v+s5Jq/aA== + dependencies: + "@babel/plugin-transform-typescript" "~7.5.0" + ansi-to-html "^0.6.6" + debug "^4.0.0" + ember-cli-babel-plugin-helpers "^1.0.0" + execa "^2.0.0" + fs-extra "^8.0.0" + resolve "^1.5.0" + rsvp "^4.8.1" + semver "^6.0.0" + stagehand "^1.0.0" + walk-sync "^2.0.0" + +ember-cli-typescript@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d" integrity sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA== @@ -4758,6 +5370,26 @@ stagehand "^1.0.0" walk-sync "^1.0.0" +ember-cli-typescript@^3.1.1, ember-cli-typescript@^3.1.2, ember-cli-typescript@^3.1.3, ember-cli-typescript@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-3.1.4.tgz#21d6ccd670d1f2e34c9cce68c6e32c442f46806b" + integrity sha512-HJ73kL45OGRmIkPhBNFt31I1SGUvdZND+LCH21+qpq3pPlFpJG8GORyXpP+2ze8PbnITNLzwe5AwUrpyuRswdQ== + dependencies: + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.4.4" + "@babel/plugin-proposal-optional-chaining" "^7.6.0" + "@babel/plugin-transform-typescript" "~7.8.0" + ansi-to-html "^0.6.6" + broccoli-stew "^3.0.0" + debug "^4.0.0" + ember-cli-babel-plugin-helpers "^1.0.0" + execa "^3.0.0" + fs-extra "^8.0.0" + resolve "^1.5.0" + rsvp "^4.8.1" + semver "^6.3.0" + stagehand "^1.0.0" + walk-sync "^2.0.0" + ember-cli-uglify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz#8819665b2cc5fe70e3ba9fe7a94645209bc42fd6" @@ -4774,7 +5406,7 @@ resolve "^1.3.3" semver "^5.3.0" -ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.0.1, ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: +ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-3.1.3.tgz#7c9b4f5ff30fdebcd480b1c06c4de43bb51c522c" integrity sha512-PZNSvpzwWgv68hcXxyjREpj3WWb81A7rtYNQq1lLEgrWIchF8ApKJjWP3NBpHjaatwILkZAV8klair5WFlXAKg== @@ -4782,6 +5414,24 @@ resolve-package-path "^1.2.6" semver "^5.6.0" +ember-cli-version-checker@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-4.1.1.tgz#27b938228306cb0dbc4f74e95c536cdd6448e499" + integrity sha512-bzEWsTMXUGEJfxcAGWPe6kI7oHEGD3jaxUWDYPTqzqGhNkgPwXTBgoWs9zG1RaSMaOPFnloWuxRcoHi4TrYS3Q== + dependencies: + resolve-package-path "^2.0.0" + semver "^6.3.0" + silent-error "^1.1.1" + +ember-cli-version-checker@^5.0.1, ember-cli-version-checker@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-5.1.1.tgz#3185c526c14671609cbd22ab0d0925787fc84f3d" + integrity sha512-YziSW1MgOuVdJSyUY2CKSC4vXrGQIHF6FgygHkJOxYGjZNQYwf5MK0sbliKatvJf7kzDSnXs+r8JLrD74W/A8A== + dependencies: + resolve-package-path "^2.0.0" + semver "^7.3.2" + silent-error "^1.1.1" + ember-cli-yadda@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/ember-cli-yadda/-/ember-cli-yadda-0.5.0.tgz#bbf564b996bd05f0ad4c7422a89795eca3ea3b47" @@ -4793,130 +5443,129 @@ ember-cli-babel "^6.6.0" yadda "*" -ember-cli@~3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.12.0.tgz#e6d27e4c57fc44eb7963fe4611b3b0cfb9d9558d" - integrity sha512-hON3/thKAIcwzHX9SWIvf+UR2sQTWyXzyECYw20NDvUSydZMVtggK4GQncu7LSiUs+5zIxT8ZPzanpUZMINuCg== +ember-cli@~3.16.0: + version "3.16.2" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.16.2.tgz#97fcf7f5109a0cc5e9f8ee8e971d3420d670eedb" + integrity sha512-x8czGIdRnS7bPRYY7PEhhVGakHTDGF1arKlgw8yBSch29hCuxmbMrxjQxEkvkTtQ8cb7a840N4eVyEujeYPQIw== dependencies: - "@babel/core" "^7.4.3" - "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/core" "^7.7.7" + "@babel/plugin-transform-modules-amd" "^7.7.5" amd-name-resolver "^1.3.1" - babel-plugin-module-resolver "^3.2.0" + babel-plugin-module-resolver "^4.0.0" bower-config "^1.4.1" bower-endpoint-parser "0.2.2" - broccoli "^3.1.1" + broccoli "^3.3.3" broccoli-amd-funnel "^2.0.1" - broccoli-babel-transpiler "^7.2.0" + broccoli-babel-transpiler "^7.3.0" broccoli-builder "^0.18.14" - broccoli-concat "^3.7.3" + broccoli-concat "^3.7.4" broccoli-config-loader "^1.0.1" broccoli-config-replace "^1.1.2" broccoli-debug "^0.6.5" broccoli-funnel "^2.0.2" broccoli-funnel-reducer "^1.0.0" broccoli-merge-trees "^3.0.2" - broccoli-middleware "^2.0.1" + broccoli-middleware "^2.1.1" broccoli-module-normalizer "^1.3.0" broccoli-module-unification-reexporter "^1.0.0" broccoli-slow-trees "^3.0.1" - broccoli-source "^1.1.0" - broccoli-stew "^2.1.0" + broccoli-source "^3.0.0" + broccoli-stew "^3.0.0" calculate-cache-key-for-tree "^2.0.0" capture-exit "^2.0.0" - chalk "^2.4.2" + chalk "^3.0.0" ci-info "^2.0.0" clean-base-url "^1.0.0" compression "^1.7.4" - configstore "^4.0.0" - console-ui "^3.0.2" + configstore "^5.0.0" + console-ui "^3.1.1" core-object "^3.1.5" dag-map "^2.0.2" diff "^4.0.1" - ember-cli-broccoli-sane-watcher "^3.0.0" ember-cli-is-package-missing "^1.0.0" ember-cli-lodash-subset "^2.0.1" ember-cli-normalize-entity-name "^1.0.0" ember-cli-preprocess-registry "^3.3.0" ember-cli-string-utils "^1.1.0" - ember-source-channel-url "^1.1.0" + ember-source-channel-url "^2.0.1" ensure-posix-path "^1.0.2" execa "^1.0.0" exit "^0.1.2" express "^4.16.4" - filesize "^4.1.2" - find-up "^3.0.0" + filesize "^4.2.0" + find-up "^4.1.0" find-yarn-workspace-root "^1.2.1" - fs-extra "^7.0.1" + fs-extra "^8.1.0" fs-tree-diff "^2.0.1" get-caller-file "^2.0.5" - git-repo-info "^2.1.0" + git-repo-info "^2.1.1" glob "^7.1.4" heimdalljs "^0.2.6" - heimdalljs-fs-monitor "^0.2.2" - heimdalljs-graph "^0.3.5" + heimdalljs-fs-monitor "^0.2.3" + heimdalljs-graph "^1.0.0" heimdalljs-logger "^0.1.10" - http-proxy "^1.17.0" + http-proxy "^1.18.0" inflection "^1.12.0" is-git-url "^1.0.0" isbinaryfile "^3.0.3" js-yaml "^3.13.1" json-stable-stringify "^1.0.1" leek "0.0.24" - lodash.template "^4.4.0" - markdown-it "^8.4.2" + lodash.template "^4.5.0" + markdown-it "^9.1.0" markdown-it-terminal "0.1.0" minimatch "^3.0.4" morgan "^1.9.1" nopt "^3.0.6" - npm-package-arg "^6.1.0" - p-defer "^2.1.0" - portfinder "^1.0.20" - promise-map-series "^0.2.3" - promise.prototype.finally "^3.1.0" + npm-package-arg "^6.1.1" + p-defer "^3.0.0" + portfinder "^1.0.25" + promise-map-series "^0.3.0" + promise.prototype.finally "^3.1.2" quick-temp "^0.1.8" - resolve "^1.10.1" - resolve-package-path "^1.2.7" - rsvp "^4.8.4" + resolve "^1.12.0" + resolve-package-path "^2.0.0" + rsvp "^4.8.5" sane "^4.1.0" - semver "^6.0.0" + semver "^6.3.0" silent-error "^1.1.1" - sort-package-json "^1.22.1" + sort-package-json "^1.39.1" symlink-or-copy "^1.2.0" - temp "0.9.0" - testem "^2.14.0" + temp "0.9.1" + testem "^3.0.1" tiny-lr "^1.1.1" - tree-sync "^1.4.0" - uuid "^3.3.2" - walk-sync "^1.1.3" - watch-detector "^0.1.0" + tree-sync "^2.0.0" + uuid "^3.4.0" + walk-sync "^2.0.2" + watch-detector "^1.0.0" yam "^1.0.0" ember-collection@^1.0.0-alpha.9: - version "1.0.0-alpha.9" - resolved "https://registry.yarnpkg.com/ember-collection/-/ember-collection-1.0.0-alpha.9.tgz#30fa340a58f4154cef1cda54f11041c5a2cd2e6c" - integrity sha512-q6hp8tGvdgETeYLsmb+3ocw5jbY56janWhNYyS83NGmfuOoKo6UYXGo0g6lPkP2umb6y6QOyKQUQqlSBmSVVVw== + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-collection/-/ember-collection-1.0.0.tgz#2ec570a49b70098ab68fbaaca940f9302b39af98" + integrity sha512-Yb7ZoPBc9rdDv1m72PDQeqbKzKVejAetkqRWUEXRa6tV75ud46ozGhX/1kyVJz2tNYL5XlgnqP8hg5UA9YNR0w== dependencies: - ember-cli-babel "^6.8.2" - ember-cli-htmlbars "^2.0.1" + ember-cli-babel "^7.7.3" + ember-cli-htmlbars "^3.0.1" layout-bin-packer "^1.4.0" -ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.0.tgz#feee16c5e9ef1b1f1e53903b241740ad4b01097e" - integrity sha512-pUW4MzJdcaQtwGsErYmitFRs0rlCYBAnunVzlFFUBr4xhjlCjgHJo0b53gFnhTgenNM3d3/NqLarzRhDTjXRTg== +ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.1.tgz#87c92c4303f990ff455c28ca39fb3ee11441aa16" + integrity sha512-6wzYvnhg1ihQUT5yGqnLtleq3Nv5KNv79WhrEuNU9SwR4uIxCO+KpyC7r3d5VI0EM7/Nmv9Nd0yTkzmTMdVG1A== dependencies: babel-plugin-debug-macros "^0.2.0" ember-cli-version-checker "^2.1.1" semver "^5.4.1" -ember-composable-helpers@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ember-composable-helpers/-/ember-composable-helpers-2.3.1.tgz#db98ad8b55d053e2ac216b9da091c9e7a3b9f453" - integrity sha512-Eltj5yt2CtHhBMrdsjKQTP1zFyfEXQ5/v85ObV2zh0eIJZa1t/gImHN+GIHHuJ+9xOrCUAy60/2TJZjadpoPBQ== +ember-composable-helpers@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ember-composable-helpers/-/ember-composable-helpers-4.0.0.tgz#856cf4d86f2245feeb69ae1684e5a58ec742fcca" + integrity sha512-SF/mrLEoB0W7Mf+G2ye13K1I9IgkUaeFaWDVDTRzSAX7xmjBiPepLsqZvNJ1WcXimFTodGffku4AbQ2D0t+/2Q== dependencies: "@babel/core" "^7.0.0" broccoli-funnel "2.0.1" - ember-cli-babel "^7.1.0" + ember-cli-babel "^7.11.1" resolve "^1.10.0" ember-computed-style@^0.3.0: @@ -4926,15 +5575,24 @@ dependencies: ember-cli-babel "^6.6.0" -"ember-concurrency@^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0", ember-concurrency@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.0.0.tgz#3b650672fdd5dc1d45007626119135829076c2b6" - integrity sha512-76aKC0lo2LAPoQYz7vMRlpolWTIQerszr8PPf3JMM5cTOzPwXUtzDcjfso3JAEDdhyUF9fkv2V1DmHagFbC2YQ== +ember-concurrency-decorators@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-concurrency-decorators/-/ember-concurrency-decorators-2.0.0.tgz#119934636927ad0b4d1c751e35688d7596cf85e3" + integrity sha512-9gJmLwTIkOcBQIOub8k3Y1TCUPzlk/fv3gTGJc9QhcmBvBb22l6Z+TptaqSmR+06XqTITYnPfGpk+tqmrHyYug== dependencies: - babel-core "^6.24.1" - ember-cli-babel "^6.8.2" + "@ember-decorators/utils" "^6.1.0" + ember-cli-babel "^7.19.0" + ember-cli-htmlbars "^4.3.1" + ember-cli-typescript "^3.1.4" + +ember-concurrency@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.2.1.tgz#54fb234579638c5c43d4153a4e14567fe2b2e325" + integrity sha512-6zlK3BndPPZlSVWq6xBohwobpDKrI58nMMDfD8OqjoeBwnaznuyVHJqDZ46NRJrvSqYX6R96XBBVpDGCCcbK+w== + dependencies: + ember-cli-babel "^7.7.3" ember-compatibility-helpers "^1.2.0" - ember-maybe-import-regenerator "^0.1.5" + ember-maybe-import-regenerator "^0.1.6" ember-copy@^1.0.0: version "1.0.0" @@ -4943,58 +5601,54 @@ dependencies: ember-cli-babel "^6.6.0" -ember-data@~3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.12.0.tgz#ce20c41163ce50124d12a4370641fd9b4a21c3e2" - integrity sha512-muSyUGQXxxd3jyGwLJetKdI1X15Vi/HjdBSg02oj5m9tKRVEfDtE133c+KohgHbut9ko1fsBUXxy7pMdY2d5jQ== - dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/adapter" "3.12.0" - "@ember-data/model" "3.12.0" - "@ember-data/serializer" "3.12.0" - "@ember-data/store" "3.12.0" +ember-data@~3.16.0: + version "3.16.8" + resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.16.8.tgz#2d25a2cd37f4952ea92df464a5b10c70cd0b20e1" + integrity sha512-6eyx5gDECdzzibFgzSks+NeZJg2TYE7p35Iv7EH8aFFKMIy0kDoUgADqkQjCuWXy5W2Jli8Xq1/HVJB4RqcxYA== + dependencies: + "@ember-data/adapter" "3.16.8" + "@ember-data/debug" "3.16.8" + "@ember-data/model" "3.16.8" + "@ember-data/private-build-infra" "3.16.8" + "@ember-data/record-data" "3.16.8" + "@ember-data/serializer" "3.16.8" + "@ember-data/store" "3.16.8" + "@ember/edition-utils" "^1.2.0" "@ember/ordered-set" "^2.0.3" "@glimmer/env" "^0.1.7" - ember-cli-babel "^7.8.0" - ember-cli-typescript "^2.0.2" + broccoli-merge-trees "^3.0.2" + ember-cli-babel "^7.20.5" + ember-cli-typescript "^3.1.3" ember-inflector "^3.0.1" -ember-deep-set@^0.2.0: +ember-element-helper@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/ember-deep-set/-/ember-deep-set-0.2.0.tgz#93428b599f884c3da0550cbcc062b9ec5969a71e" - integrity sha512-3vg9Cw4CIInXzufZMQmScClg23mUw+2ybO53L51spFYP/eGaVmGduWmhrVljyl4lHKN7hW/jvG/YVWtwTPSTKA== - dependencies: - ember-cli-babel "^7.1.2" - -ember-element-helper@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ember-element-helper/-/ember-element-helper-0.1.1.tgz#ffd2a0566b22a13c0e7780ae96443f4ffda2e63d" - integrity sha512-MfES7MbZ5UcHTo1lutJCcz6hI+/CadurWcOR3kOQl0jKcBKdAWyYIJXK4u0FDXzlgKczX9vL3R2eJUtnGe144w== + resolved "https://registry.yarnpkg.com/ember-element-helper/-/ember-element-helper-0.2.0.tgz#eacdf4d8507d6708812623206e24ad37bad487e7" + integrity sha512-/WV0PNLyxDvLX/YETb/8KICFTr719OYqFWXqV5XUkh9YhhBGDU/mr1OtlQaWOlsx+sHm42HD2UAICecqex8ziw== dependencies: ember-cli-babel "^6.16.0" ember-exam@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ember-exam/-/ember-exam-4.0.0.tgz#e7698ba4d792ba2e25a6dc8d92865cea94d2b65b" - integrity sha512-VVDlIYRy4rjzXhFEI8a7uw7hByN2Zaoom0Yl96m/IyDe9PXIT6qYGrn3XCRjjnFU6WC4+2jQWbM5CpXsRA3AVQ== + version "4.0.9" + resolved "https://registry.yarnpkg.com/ember-exam/-/ember-exam-4.0.9.tgz#a3a9a85647654549490e73365adb9f64ce9c285f" + integrity sha512-tbKoQDTxl79KuCm7PmDWRUt12eDfOJ+uojg5m2NypMvnfN3QHavx/zz8fSTwoBkGoQhK6ae4YXY2HmMnaZH9Fw== dependencies: - chalk "^2.1.0" + chalk "^3.0.0" cli-table3 "^0.5.1" debug "^4.1.0" - ember-cli-babel "^7.8.0" - execa "^1.0.0" + ember-cli-babel "^7.13.0" + execa "^3.4.0" fs-extra "^8.0.1" js-yaml "^3.13.1" - rimraf "^2.6.2" - semver "^6.1.2" + npmlog "^4.1.2" + rimraf "^3.0.0" + semver "^6.3.0" silent-error "^1.1.1" -ember-export-application-global@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.0.tgz#8d6d7619ac8a1a3f8c43003549eb21ebed685bd2" - integrity sha1-jW12GayKGj+MQwA1Sesh6+1oW9I= - dependencies: - ember-cli-babel "^6.0.0-beta.7" +ember-export-application-global@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.1.tgz#b120a70e322ab208defc9e2daebe8d0dfc2dcd46" + integrity sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw== ember-get-config@^0.2.4: version "0.2.4" @@ -5011,6 +5665,16 @@ dependencies: ember-cli-babel "^7.1.2" +ember-in-element-polyfill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-in-element-polyfill/-/ember-in-element-polyfill-1.0.0.tgz#10365af6fe31bc59e71ec463ed209d4ba4caecda" + integrity sha512-0eSfWWgkOMvj7lcjo20VX8uX4HYxSOxm6MY3bAzqW5RpnHcpcrRf6o4y80xLGh5pp9z8FobiUfFwubphACP8mQ== + dependencies: + debug "^4.1.1" + ember-cli-babel "^7.19.0" + ember-cli-htmlbars "^4.3.1" + ember-cli-version-checker "^5.0.2" + ember-inflector@^3.0.0, ember-inflector@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-3.0.1.tgz#04be6df4d7e4000f6d6bd70787cdc995f77be4ab" @@ -5018,24 +5682,24 @@ dependencies: ember-cli-babel "^6.6.0" -ember-load-initializers@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.0.tgz#b402815ab9c823ff48a1369b52633721987e72d4" - integrity sha512-zvcq35U2EPyjonCPdDBISZbeuxP3OXf+asmj2bNucFwo1ej7gYJCJacy6N8oABEG2EmrU/8jMDoZndWIAGn0cQ== +ember-load-initializers@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.1.tgz#d1a8bead00bc44222b0ab181840869992beb30f5" + integrity sha512-Ho5sBeaZPN3HmZkYkcLrjSBF3DTNmzC5h0DizzDj8cjpnCvaqeofphJDnH41k6kLv/QHMk4pMRISPcwc+bOceQ== dependencies: - ember-cli-babel "^7.10.0" - ember-cli-typescript "^2.0.0" + ember-cli-babel "^7.11.0" + ember-cli-typescript "^2.0.2" ember-math-helpers@^2.4.0: - version "2.11.3" - resolved "https://registry.yarnpkg.com/ember-math-helpers/-/ember-math-helpers-2.11.3.tgz#32a2523c7408787a6029b64c25b6ece88b320142" - integrity sha512-4Ky2MvDZMNg4YGyARt/09z7oNdDjSyVHLI0163WcJ62a8EvlikWVLVBx9B7eoiRwUxTdmgW8I5p9EvY+042UkA== + version "2.14.0" + resolved "https://registry.yarnpkg.com/ember-math-helpers/-/ember-math-helpers-2.14.0.tgz#5845eaa52f3d258aa1369e9cf614b4b9bcf45d8f" + integrity sha512-ZgDnTx1Za//qRtWpDM6ZAKjG2jhR1pQuo/txA2BZKIiKudJ4CWeXnKDOb498s7tQDsr2UNgo4+5bVG3EHmfazw== dependencies: - broccoli-funnel "^2.0.2" - ember-cli-babel "^7.7.3" - ember-cli-htmlbars "^3.0.1" + broccoli-funnel "^3.0.1" + ember-cli-babel "^7.17.2" + ember-cli-htmlbars "^4.2.2" -ember-maybe-import-regenerator@^0.1.5, ember-maybe-import-regenerator@^0.1.6: +ember-maybe-import-regenerator@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ember-maybe-import-regenerator/-/ember-maybe-import-regenerator-0.1.6.tgz#35d41828afa6d6a59bc0da3ce47f34c573d776ca" integrity sha1-NdQYKK+m1qWbwNo85H80xXPXdso= @@ -5045,13 +5709,6 @@ ember-cli-babel "^6.0.0-beta.4" regenerator-runtime "^0.9.5" -ember-maybe-in-element@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ember-maybe-in-element/-/ember-maybe-in-element-0.2.0.tgz#9ac51cbbd9d83d6230ad996c11e33f0eca3032e0" - integrity sha512-R5e6N8yDbfNbA/3lMZsFs2KEzv/jt80TsATiKMCqdqKuSG82KrD25cRdU5VkaE8dTQbziyBeuJs90bBiqOnakQ== - dependencies: - ember-cli-babel "^7.1.0" - ember-maybe-in-element@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/ember-maybe-in-element/-/ember-maybe-in-element-0.4.0.tgz#fe1994c60ee64527d2b2f3b4479ebf8806928bd8" @@ -5060,78 +5717,93 @@ ember-cli-babel "^7.1.0" ember-modifier-manager-polyfill@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-modifier-manager-polyfill/-/ember-modifier-manager-polyfill-1.1.0.tgz#06397b05a3f9a5868b05fca11fe10c7f6b78a328" - integrity sha512-fCEumUwdAnwk8rGSEww1/NkIHbmLOS8kRmEZyO9mxeIy+BtdYqdSIMrn3tSnt9QeacWQm2zdR8KXBqc2bc1G6A== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ember-modifier-manager-polyfill/-/ember-modifier-manager-polyfill-1.2.0.tgz#cf4444e11a42ac84f5c8badd85e635df57565dda" + integrity sha512-bnaKF1LLKMkBNeDoetvIJ4vhwRPKIIumWr6dbVuW6W6p4QV8ZiO+GdF8J7mxDNlog9CeL9Z/7wam4YS86G8BYA== dependencies: ember-cli-babel "^7.10.0" ember-cli-version-checker "^2.1.2" ember-compatibility-helpers "^1.2.0" -ember-native-dom-helpers@^0.5.3: - version "0.5.10" - resolved "https://registry.yarnpkg.com/ember-native-dom-helpers/-/ember-native-dom-helpers-0.5.10.tgz#9c7172e4ddfa5dd86830c46a936e2f8eca3e5896" - integrity sha512-bPJX49vlgnBGwFn/3WJPPJjjyd7/atvzW5j01u1dbyFf3bXvHg9Rs1qaZJdk8js0qZ1FINadIEC9vWtgN3w7tg== +ember-native-dom-helpers@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/ember-native-dom-helpers/-/ember-native-dom-helpers-0.6.3.tgz#31c88b6eb8e1bb99ee594d19de8f0270d1d5eb35" + integrity sha512-eQTHSV4OBS5YmGLvjgCcit79akG98YVRrcNq/rOVntPX1oq0LQqlPiXtDvDcqSdDur8GyUz6jY1Jy8Y6DLFiSw== dependencies: broccoli-funnel "^1.1.0" ember-cli-babel "^6.6.0" +ember-on-helper@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ember-on-helper/-/ember-on-helper-0.1.0.tgz#c8b1fef9173fc8546c4933b57ecd7ffbcebad99e" + integrity sha512-jjafBnWfoA4VSSje476ft5G+urlvvuSDddwAJjKDCjKY9mbe3hAEsJiMBAaPObJRMm1FOglCuKjQZfwDDls6MQ== + dependencies: + ember-cli-babel "^7.7.3" + ember-page-title@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ember-page-title/-/ember-page-title-5.1.0.tgz#baf9fc00f95faf638f8493740a1f80daaa5007e9" - integrity sha512-Ou2kwvwlQdDxre20WUMDym54e+5r9g0lTINFiBZUavoBCOUYdBP711LbmmUIIlYblZTOb/TWadNEQZpd2DkIAg== + version "5.2.3" + resolved "https://registry.yarnpkg.com/ember-page-title/-/ember-page-title-5.2.3.tgz#63b039d70d4a5d7db9c00de5b2108823fb90bb9d" + integrity sha512-2ErWCJsTawaKJy7fzZqIsrUTNaNtDgEboiiL4OcqEg2A3gKmuuaDFSWz0w9njFRxWISvfPfRw1df0kpYAr98ng== dependencies: ember-cli-babel "^7.7.3" ember-cli-head "^0.4.0" ember-cli-htmlbars "^3.0.1" ember-copy "^1.0.0" -ember-power-select-with-create@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/ember-power-select-with-create/-/ember-power-select-with-create-0.6.2.tgz#05faf361c435f5c2c61c24e687aebddefd569897" - integrity sha512-8OKUJWpLTImP+N+SkUqTYJByaZ7XDhePdhjqZtcimc6O1eEAdEGkh8itOLMLw95+X51Wua1DwfdoRycu+iqqQQ== - dependencies: - ember-cli-babel "^7.1.2" - ember-cli-htmlbars "^3.0.0" - ember-power-select "^2.0.0" - -ember-power-select@^2.0.0: - version "2.3.5" - resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-2.3.5.tgz#c702d5cf5b2c6c2fd422f0a8253e982cecbdd048" - integrity sha512-75QJklWSthm9gedcbpKC0ZALaQXEfKlIRRy5pb87GsXcykFn0rBgxlnGsITWO+IX9u2V0oojQPorIa/ZYKVd3Q== - dependencies: - ember-basic-dropdown "^1.1.0" - ember-cli-babel "^7.7.3" - ember-cli-htmlbars "^3.0.1" - ember-concurrency "^0.8.27 || ^0.9.0 || ^0.10.0 || ^1.0.0" - ember-text-measurer "^0.5.0" - ember-truth-helpers "^2.1.0" +ember-power-select-with-create@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/ember-power-select-with-create/-/ember-power-select-with-create-0.8.0.tgz#973e26db8f76c650a6d166ea1c03ec00453150be" + integrity sha512-9xJTgaju4NyADJb6RjkUpIhLFx/5ORmAK3R/zuTyc2ILyOY7+SvDw8LuFNTnOVAFOcT3g+TJKEL8nzBuwnEi7g== + dependencies: + ember-cli-babel "^7.20.0" + ember-cli-htmlbars "^5.0.0" + ember-power-select "^4.0.0" -ember-power-select@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-3.0.3.tgz#384073b87a8f5740df470c16592b03ddd9e357fa" - integrity sha512-uSUsE8yYpWH+fFnBa3KyNJ+Y85vBrTe6yUFlEcDRTIZXnS3Uls1+r/xsZMuoCMAzQoXi53uMYR4DBRx++TQT2w== +ember-power-select@^4.0.0, ember-power-select@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-4.0.3.tgz#73a98154abf9c5c19c11cdae98294a94d082b381" + integrity sha512-WkMq2eLUgq3oBW/6lxBS5u0oBu8sh9Y0ACgMPe2hP3YmZKnfXCuUzV2QrttbeNnxehmyiXKAleuev7J4BvObdA== dependencies: - "@ember-decorators/component" "^6.0.0" - ember-basic-dropdown "^2.0.0" - ember-cli-babel "^7.8.0" - ember-cli-htmlbars "^3.1.0" - ember-concurrency "^1.0.0" - ember-text-measurer "^0.5.0" + "@ember-decorators/component" "^6.1.0" + "@glimmer/component" "^1.0.0" + "@glimmer/tracking" "^1.0.0" + ember-assign-helper "^0.3.0" + ember-basic-dropdown "^3.0.3" + ember-cli-babel "^7.21.0" + ember-cli-htmlbars "^5.2.0" + ember-cli-typescript "^3.1.4" + ember-concurrency "^1.2.1" + ember-concurrency-decorators "^2.0.0" + ember-text-measurer "^0.6.0" ember-truth-helpers "^2.1.0" -ember-qunit@^4.4.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-4.5.1.tgz#dc4b0a794fbeb6702a02f28bf19091de0f90fd5a" - integrity sha512-fOxXQLFdellP0yiMd9f3n7pIGggiDo8kBuswdGvsCrqTKq5aB1Cb49eeoNyBDQYGlhcxY0pOGUe+xElppChDBA== +ember-qunit@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-4.6.0.tgz#ad79fd3ff00073a8779400cc5a4b44829517590f" + integrity sha512-i5VOGn0RP8XH+5qkYDOZshbqAvO6lHgF65D0gz8vRx4DszCIvJMJO+bbftBTfYMxp6rqG85etAA6pfNxE0DqsQ== dependencies: - "@ember/test-helpers" "^1.6.0" + "@ember/test-helpers" "^1.7.1" broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.2" common-tags "^1.4.0" - ember-cli-babel "^7.8.0" + ember-cli-babel "^7.12.0" ember-cli-test-loader "^2.2.0" - qunit "^2.9.2" + qunit "^2.9.3" + +ember-ref-modifier@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ember-ref-modifier/-/ember-ref-modifier-1.0.1.tgz#aeca56798ebc0fb750f0ccd36e86d667f5b1bc44" + integrity sha512-qmEFY/4WOWWXABRWvX50jLPleH30p/LPLUXEvaSlIj41F23e3Vul91IqZ1PFdw1Rxpkb8DHWO5BRchN8vnz4+Q== + dependencies: + ember-cli-babel "^7.20.5" + +ember-render-helpers@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ember-render-helpers/-/ember-render-helpers-0.1.1.tgz#616a04d317b4a8a6958432f6af37674ebaecfa3f" + integrity sha512-i+6gcWa1hCxI9qGHdacrXjfTUJdR8VCPbOXG8SFNjpqfMFlkh6SNeCMjXgSzRG2Xt7YNSSXEzr0ZvK+C7RUuJw== + dependencies: + ember-cli-babel "^7.12.0" + ember-cli-typescript "^3.1.1" ember-require-module@^0.3.0: version "0.3.0" @@ -5140,30 +5812,38 @@ dependencies: ember-cli-babel "^6.9.2" -ember-resolver@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-5.2.1.tgz#538d7a29351316d9550864ff06fcbe55bdd92774" - integrity sha512-Ciz5qsrtILr7AGXO9mTSFs3/XKXpMYJqISNCfvIY0C8PlMgq+9RYbmUoBpAlvBUc/mUi3ORZKJ4csd9qchvxZw== - dependencies: - "@glimmer/resolver" "^0.4.1" - babel-plugin-debug-macros "^0.1.10" - broccoli-funnel "^2.0.2" - broccoli-merge-trees "^3.0.0" - ember-cli-babel "^6.16.0" - ember-cli-version-checker "^3.1.3" - resolve "^1.12.0" - -ember-rfc176-data@^0.3.11, ember-rfc176-data@^0.3.12: - version "0.3.12" - resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.12.tgz#90d82878e69e2ac9a5438e8ce14d12c6031c5bd2" - integrity sha512-g9HeZj/gU5bfIIrGXkP7MhS2b3Vu5DfNUrYr14hy99TgIvtZETO+96QF4WOEUXGjIJdfTRjerVnQlqngPQSv1g== +ember-resolver@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-8.0.0.tgz#cc48682c1e2f5d208499b1ecdcac1e43839683bd" + integrity sha512-M0P1++26h9KuEpg14VDrg37daneXrj9Hv9kuM0Xzsm38guma9JzO1+BvJcL/u5EGiJSUjtLtYvakk/6feFlo6A== + dependencies: + babel-plugin-debug-macros "^0.3.3" + broccoli-funnel "^3.0.2" + broccoli-merge-trees "^4.2.0" + ember-cli-babel "^7.18.0" + ember-cli-version-checker "^5.0.2" + resolve "^1.15.1" + +ember-rfc176-data@^0.3.12, ember-rfc176-data@^0.3.13: + version "0.3.13" + resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.13.tgz#ed1712a26e65fec703655f35410414aa1982cf3b" + integrity sha512-m9JbwQlT6PjY7x/T8HslnXP7Sz9bx/pz3FrNfNi2NesJnbNISly0Lix6NV1fhfo46572cpq4jrM+/6yYlMefTQ== + +ember-router-generator@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0" + integrity sha512-89oVHVJwmLDvGvAUWgS87KpBoRhy3aZ6U0Ql6HOmU4TrPkyaa8pM0W81wj9cIwjYprcQtN9EwzZMHnq46+oUyw== + dependencies: + "@babel/parser" "^7.4.5" + "@babel/traverse" "^7.4.5" + recast "^0.18.1" -ember-router-generator@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-1.2.3.tgz#8ed2ca86ff323363120fc14278191e9e8f1315ee" - integrity sha1-jtLKhv8yM2MSD8FCeBkeno8TFe4= +ember-router-helpers@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/ember-router-helpers/-/ember-router-helpers-0.4.0.tgz#6ef86cc75e38c3455ab916c78d5a38293e94c12f" + integrity sha512-DiPyncEAACKV/XcmYqUwh0iHBPvGW75Fw1uerDudblofXTtAH/+QzeE/0wK2G6MUBWKyn0HyIuLXE3pJm0zKFg== dependencies: - recast "^0.11.3" + ember-cli-babel "^7.20.0" ember-runtime-enumerable-includes-polyfill@^2.0.0: version "2.1.0" @@ -5173,84 +5853,145 @@ ember-cli-babel "^6.9.0" ember-cli-version-checker "^2.1.0" -ember-sinon-qunit@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ember-sinon-qunit/-/ember-sinon-qunit-3.4.0.tgz#6c6ea96273572825e8789c7214e3fd3d9ef4c376" - integrity sha512-Xn8+GEkxBNngtfOYy3qo5Mw1m0o3PJgd1/veGU2BdixxWrEd2U5ZolYFxd6vNHM1/EVx5urlDqWl6jeedJr/Xw== +ember-sinon-qunit@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ember-sinon-qunit/-/ember-sinon-qunit-5.0.0.tgz#d6585ee691f73c5733783a0583f87840d1323cb1" + integrity sha512-7Q938adhhHcUHFg41fwj6g5Q6Iyt8eyo7c0D1r7uOeKSFlobcm1FiD/dCmjNZx224KiI6KYh/0EwqoaIyWAawA== dependencies: - ember-cli-babel "^7.1.2" - ember-sinon "~3.1.0" + broccoli-funnel "^3.0.2" + ember-cli-babel "^7.17.2" + ember-sinon "^5.0.0" -ember-sinon@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ember-sinon/-/ember-sinon-3.1.0.tgz#76733aae1cc32c9426202bdc0f5b61552753a7df" - integrity sha512-/UARfA4UBlhhmtvk6Vcvj3CH2foThqCORbXiUiQUBISNxqtZFdwGpnJMt4vY8etyArmop18B33UTmZzNKbfhmg== +ember-sinon@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ember-sinon/-/ember-sinon-5.0.0.tgz#990bcafa65403d2b2e3e7f14bb547862197e97d5" + integrity sha512-dTP2vhao1xWm3OlfpOALooso/OLM71SFg7PIBmZ6JdwKCC+CzcPb4BYRAXuoAFYzmhH8z28p8HdemjZBb0B3Bw== dependencies: broccoli-funnel "^2.0.0" broccoli-merge-trees "^3.0.0" - ember-cli-babel "^7.1.3" - sinon "^7.1.1" + ember-cli-babel "^7.17.2" + sinon "^9.0.0" -ember-source-channel-url@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-1.2.0.tgz#77eb9d0889e5f5370e6c70fcb2696c63ff4a34a1" - integrity sha512-CLClcHzVf+8GoFk4176R16nwXoel70bd7DKVAY6D8M0m5fJJhbTrAPYpDA0lY8A60HZo9j/s8A8LWiGh1YmdZg== +ember-source-channel-url@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-2.0.1.tgz#18b88f8a00b7746e7a456b3551abb3aea18729cc" + integrity sha512-YlLUHW9gNvxEaohIj5exykoTZb4xj9ZRTcR4J3svv9S8rjAHJUnHmqC5Fd9onCs+NGxHo7KwR/fDwsfadbDu5Q== dependencies: got "^8.0.1" -ember-source@~3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.12.0.tgz#92f72894836d4497e704901c1d061c61b066bddf" - integrity sha512-4iA2BgYmNLWysifLyt2LCQgU9ux/NiTR/MT7KTt9HUyTDJyivcdyKNtfrUQst/1InUvn+MxuQ0ZsbQICJkX6yA== - dependencies: +ember-source@~3.16.0: + version "3.16.8" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.16.8.tgz#83f1a55a2b9835b272d7ec5b121a7af490c86725" + integrity sha512-vI9l5uKhDjGfulSZUfWfcnocqwlngujFLq+2yUkvi6XhO7P4F7eAgTBsb8avGVjBacKeJLjx7fb9uSEQvZXIwQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-object-assign" "^7.8.3" + "@ember/edition-utils" "^1.2.0" + babel-plugin-debug-macros "^0.3.3" + babel-plugin-filter-imports "^3.0.0" + broccoli-concat "^3.7.4" + broccoli-debug "^0.6.4" broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.2" chalk "^2.4.2" - ember-cli-babel "^7.7.0" + ember-cli-babel "^7.18.0" ember-cli-get-component-path-option "^1.0.0" ember-cli-is-package-missing "^1.0.0" ember-cli-normalize-entity-name "^1.0.0" ember-cli-path-utils "^1.0.0" ember-cli-string-utils "^1.1.0" ember-cli-version-checker "^3.1.3" - ember-router-generator "^1.2.3" + ember-router-generator "^2.0.0" inflection "^1.12.0" jquery "^3.4.1" resolve "^1.11.1" + semver "^6.1.1" + silent-error "^1.1.1" -ember-template-lint@^1.1.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-1.5.3.tgz#0ebcd9e48e0b9c385ebdce3b56a0d38de804e598" - integrity sha512-t/Bm21UVQHYqeexQTUSqAf1xyJnimhLMCIhNPtysjbuI9y7g275AnrJvSGI8H+RiJlH/RpR59TEwvPPt4cA4Qw== +ember-stargate@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ember-stargate/-/ember-stargate-0.2.0.tgz#3b4594e1745dcd49372e3a8d6d06dada1dc6bf9a" + integrity sha512-AJxj4GVfW1pADk2Re6eKq5qhsWNEPWOy9jj0as3wnJFjUe0OeMvnOIqmyhwT2zpX6eLL+hIJ9cazP+j9/DvMQg== dependencies: - "@glimmer/compiler" "^0.42.0" - chalk "^2.0.0" - globby "^9.0.0" - minimatch "^3.0.4" - resolve "^1.1.3" - strip-bom "^3.0.0" + "@ember/render-modifiers" "^1.0.2" + "@glimmer/component" "^1.0.0" + ember-cli-babel "^7.21.0" + ember-cli-htmlbars "^5.1.2" + ember-in-element-polyfill "^1.0.0" + tracked-maps-and-sets "^2.1.0" + +ember-template-lint@^2.0.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-2.9.0.tgz#0580468e052c53451c1e983578beb7ee59885141" + integrity sha512-O+SeYRcG1Ka1VvHIOzRShYq4ZP9hjnOifpat/5ZOElEN40avv+YhOq5iCLZIUtRN3ryceP1W0Pmsnxuaqsq0Pg== + dependencies: + chalk "^4.0.0" + ember-template-recast "^4.1.4" + find-up "^4.1.0" + get-stdin "^8.0.0" + globby "^11.0.1" + is-valid-glob "^1.0.0" + micromatch "^4.0.2" + resolve "^1.17.0" + yargs "^15.3.1" -ember-test-selectors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-test-selectors/-/ember-test-selectors-2.1.0.tgz#faebdf06702aaa0bc510d55eb721ce54d2e85793" - integrity sha512-c5HmvefmeABH8hg380TSNZiE9VAK1CBeXWrgyXy+IXHtsew4lZHHw7GnqCAqsakxwvmaMARbAKY9KfSAE91s1g== +ember-template-recast@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/ember-template-recast/-/ember-template-recast-4.1.4.tgz#0552f4f27d33b17ac05a48107f369032eb45fb97" + integrity sha512-jw38ncM5uJu7INVWYCmm4GNIEdGVLkjABWbj451A83Ag4lBfXIbIHq+5IM7rFzUlw/Ho39WxeKhKZ5KTvIVljQ== + dependencies: + "@glimmer/syntax" "^0.51.1" + async-promise-queue "^1.0.5" + colors "^1.4.0" + commander "^5.1.0" + globby "^11.0.0" + ora "^4.0.4" + slash "^3.0.0" + tmp "^0.1.0" + workerpool "^5.0.4" + +ember-test-selectors@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ember-test-selectors/-/ember-test-selectors-4.1.0.tgz#0416c9ebdbd5ded4585643ba121115e45932dfc2" + integrity sha512-njyopeK018CP4PUWvkRdNFcP+56B7yfVYGt6k+71+4t8WscUzWPqgJvDYaJ64avn5EvrI+QBSWb80NC7Q++WDA== dependencies: - ember-cli-babel "^6.8.2" - ember-cli-version-checker "^3.1.2" + calculate-cache-key-for-tree "^2.0.0" + ember-cli-babel "^7.19.0" + ember-cli-version-checker "^5.0.2" -ember-test-waiters@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ember-test-waiters/-/ember-test-waiters-1.1.1.tgz#7df6e7a47e0fdca814aa351f7f7f9a006e15fdcd" - integrity sha512-ra71ZWTGBGLeDPa308aeAg9+/nYxv2fk4OEzmXdhvbSa5Dtbei94sr5pbLXx2IiK3Re2gDAvDzxg9PVhLy9fig== +ember-test-waiters@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ember-test-waiters/-/ember-test-waiters-1.2.0.tgz#c12ead4313934c24cff41857020cacdbf8e6effe" + integrity sha512-aEw7YuutLuJT4NUuPTNiGFwgTYl23ThqmBxSkfFimQAn+keWjAftykk3dlFELuhsJhYW/S8YoVjN0bSAQRLNtw== dependencies: - ember-cli-babel "^7.1.2" + ember-cli-babel "^7.11.0" + semver "^6.3.0" -ember-text-measurer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/ember-text-measurer/-/ember-text-measurer-0.5.0.tgz#b907aeb8cbc04560e5070dc0347cdd35d0040d0d" - integrity sha512-YhcOcce8kaHp4K0frKW7xlPJxz82RegGQCVNTcFftEL/jpEflZyFJx17FWVINfDFRL4K8wXtlzDXFgMOg8vmtQ== +ember-text-measurer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/ember-text-measurer/-/ember-text-measurer-0.6.0.tgz#140eda044fd7d4d7f60f654dd30da79c06922b2e" + integrity sha512-/aZs2x2i6kT4a5tAW+zenH2wg8AbRK9jKxLkbVsKl/1ublNl27idVRdov1gJ+zgWu3DNK7whcfVycXtlaybYQw== dependencies: - ember-cli-babel "^7.1.0" + ember-cli-babel "^7.19.0" + ember-cli-htmlbars "^4.3.1" + +ember-tooltips@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/ember-tooltips/-/ember-tooltips-3.4.3.tgz#a017de33e53a9b9ca6d38b8c2f829cc3024b8f8b" + integrity sha512-/swhfhodVvpKi6R+tkcqLgS0YTMo3S6Mzb8qtfTneFSz+tBhY/kd/+eI8OIZf9qocpJ9b54dbbqTw5ZBkeZe2g== + dependencies: + broccoli-file-creator "^2.1.1" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^2.0.0" + broccoli-source "^2.0.0" + broccoli-string-replace "^0.1.2" + ember-cli-babel "^7.13.0" + ember-cli-htmlbars "^4.2.0" + ember-maybe-in-element "^0.4.0" + popper.js "^1.12.5" + resolve "^1.10.1" + tooltip.js "^1.1.5" ember-truth-helpers@2.1.0, ember-truth-helpers@^2.0.0, ember-truth-helpers@^2.1.0: version "2.1.0" @@ -5272,10 +6013,15 @@ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.2: version "1.0.2" @@ -5283,21 +6029,21 @@ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -engine.io-client@~3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa" - integrity sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ== +engine.io-client@~3.4.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" + integrity sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" has-cors "1.1.0" indexof "0.0.1" parseqs "0.0.5" @@ -5306,10 +6052,10 @@ xmlhttprequest-ssl "~1.5.4" yeast "0.1.2" -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== +engine.io-parser@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" + integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== dependencies: after "0.8.2" arraybuffer.slice "~0.0.7" @@ -5317,37 +6063,49 @@ blob "0.0.5" has-binary2 "~1.0.2" -engine.io@~3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59" - integrity sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w== +engine.io@~3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.2.tgz#8fc84ee00388e3e228645e0a7d3dfaeed5bd122c" + integrity sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg== dependencies: accepts "~1.3.4" - base64id "1.0.0" + base64id "2.0.0" cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~6.1.0" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + version "4.2.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz#5d43bda4a0fd447cb0ebbe71bef8deff8805ad0d" + integrity sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ== dependencies: graceful-fs "^4.1.2" - memory-fs "^0.4.0" + memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, ensure-posix-path@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== -entities@^1.1.1, entities@~1.1.1: +entities@^1.1.2, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +errlop@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/errlop/-/errlop-2.2.0.tgz#1ff383f8f917ae328bebb802d6ca69666a42d21b" + integrity sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw== + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -5363,54 +6121,41 @@ is-arrayish "^0.2.1" error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + version "7.2.1" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" + integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== dependencies: string-template "~0.2.1" - xtend "~4.0.0" - -es-abstract@^1.13.0, es-abstract@^1.5.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.1.tgz#6e8d84b445ec9c610781e74a6d52cc31aac5b4ca" - integrity sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.0.0" - string.prototype.trimright "^2.0.0" -es-abstract@^1.17.0-next.1: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== +es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" + is-callable "^1.2.0" + is-regex "^1.1.0" object-inspect "^1.7.0" object-keys "^1.1.1" object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +es-get-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" + integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + es-abstract "^1.17.4" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" es-to-primitive@^1.2.1: version "1.2.1" @@ -5421,6 +6166,11 @@ is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.1.tgz#52568a77443f6927cd0ab9c73129137533c965ed" + integrity sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -5432,41 +6182,41 @@ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" -eslint-plugin-ember@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-7.0.0.tgz#75412b62501a8489b5b6345ccb6adfb877ceb38a" - integrity sha512-cMdYuKs46hpF5DEPQ2cccNjgC5xy0C1GcFfP47qiHTKAAAkHUttD/6DdEH3OwlreK/uFbF4fFaHxuq84xkaOgA== +eslint-plugin-ember@^7.7.2: + version "7.13.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-7.13.0.tgz#a1df7794f06cdc6e1b8acfe6c59db5cf861f53dc" + integrity sha512-qIbw4uP0qUJoiWF4+7MTJWqwEN86RGmBNId0cwSoHoVNWtcw50R1ajYgxM1Q5FVUdoisVeSl9lKVRh5zkDFl+g== dependencies: "@ember-data/rfc395-data" "^0.0.4" - ember-rfc176-data "^0.3.11" - snake-case "^2.1.0" + ember-rfc176-data "^0.3.12" + snake-case "^3.0.3" -eslint-plugin-es@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" - integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== dependencies: - eslint-utils "^1.4.2" + eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-node@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" - integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== +eslint-plugin-node@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== dependencies: - eslint-plugin-es "^2.0.0" - eslint-utils "^1.4.2" + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" ignore "^5.1.1" minimatch "^3.0.4" resolve "^1.10.1" @@ -5480,17 +6230,24 @@ esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1, eslint-utils@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: - eslint-visitor-keys "^1.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint@^5.6.0: version "5.16.0" @@ -5548,12 +6305,7 @@ acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -esprima@^3.1.3, esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5564,11 +6316,11 @@ integrity sha1-U88kes2ncxPlUcOqLnM0LT+099k= esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -5577,11 +6329,16 @@ dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" @@ -5597,10 +6354,10 @@ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eventemitter3@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== events-to-array@^1.0.1: version "1.1.2" @@ -5608,9 +6365,9 @@ integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -5621,9 +6378,9 @@ safe-buffer "^5.1.1" exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@^1.0.0: version "1.0.0" @@ -5638,12 +6395,12 @@ signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/execa/-/execa-2.0.4.tgz#2f5cc589c81db316628627004ea4e37b93391d8e" - integrity sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ== +execa@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== dependencies: - cross-spawn "^6.0.5" + cross-spawn "^7.0.0" get-stream "^5.0.0" is-stream "^2.0.0" merge-stream "^2.0.0" @@ -5653,6 +6410,37 @@ signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^3.0.0, execa@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exists-sync@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" @@ -5739,15 +6527,6 @@ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -5781,51 +6560,39 @@ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fake-xml-http-request@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.0.1.tgz#e4a7f256af055d8059deb23c9d7ae721d28cf078" - integrity sha512-KzT+G4aLM1Btg25QRGxB6yGLGOVZXXzrH8I4OG3KHwsdoqFclyW3alieqh5NaYGcmbQvNOn/ldGO1rGKf7CNdA== +fake-xml-http-request@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.1.1.tgz#279fdac235840d7a4dff77d98ec44bce9fc690a6" + integrity sha512-Kn2WYYS6cDBS5jq/voOfSGCA0TafOYAUPbEp8mUVpD/DVV5bQIDjlq+MLLvNUokkbTpjBVlLDaM5PnX+PwZMlw== faker@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" integrity sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8= -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" - integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== +fast-glob@^3.0.3, fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== dependencies: - "@nodelib/fs.stat" "^2.0.1" - "@nodelib/fs.walk" "^1.2.1" - glob-parent "^5.0.0" - is-glob "^4.0.1" - merge2 "^1.2.3" + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" micromatch "^4.0.2" + picomatch "^2.2.1" fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -5851,12 +6618,26 @@ source-map-url "^0.3.0" sourcemap-validator "^1.1.0" +fast-sourcemap-concat@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-sourcemap-concat/-/fast-sourcemap-concat-2.1.0.tgz#12dd36bfc38c804093e4bd1de61dd6216f574211" + integrity sha512-L9uADEnnHOeF4U5Kc3gzEs3oFpNCFkiTJXvT+nKmR0zcFqHZJJbszWT7dv4t9558FJRGpCj8UxUpTgz2zwiIZA== + dependencies: + chalk "^2.0.0" + fs-extra "^5.0.0" + heimdalljs-logger "^0.1.9" + memory-streams "^0.1.3" + mkdirp "^0.5.0" + source-map "^0.4.2" + source-map-url "^0.3.0" + sourcemap-validator "^1.1.0" + fastq@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" - integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== dependencies: - reusify "^1.0.0" + reusify "^1.0.4" faye-websocket@~0.10.0: version "0.10.0" @@ -5866,24 +6647,16 @@ websocket-driver ">=0.5.1" fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - bser "^2.0.0" + bser "2.1.1" figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^2.0.0: version "2.0.0" @@ -5892,6 +6665,13 @@ dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0, figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -5899,6 +6679,11 @@ dependencies: flat-cache "^2.0.1" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" @@ -5907,10 +6692,10 @@ glob "^7.0.3" minimatch "^3.0.3" -filesize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.1.2.tgz#fcd570af1353cea97897be64f56183adb995994b" - integrity sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw== +filesize@^4.1.2, filesize@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.1.tgz#ab1cb2069db5d415911c1a13e144c0e743bc89bc" + integrity sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== fill-range@^4.0.0: version "4.0.0" @@ -5942,7 +6727,7 @@ statuses "~1.5.0" unpipe "~1.0.0" -find-babel-config@^1.1.0: +find-babel-config@^1.1.0, find-babel-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== @@ -5986,7 +6771,7 @@ dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -5994,6 +6779,13 @@ locate-path "^5.0.0" path-exists "^4.0.0" +find-versions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + find-yarn-workspace-root@^1.1.0, find-yarn-workspace-root@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" @@ -6002,14 +6794,14 @@ fs-extra "^4.0.3" micromatch "^3.1.4" -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" + is-glob "^4.0.0" + micromatch "^4.0.2" resolve-dir "^1.0.1" fireworm@^0.7.0: @@ -6023,6 +6815,25 @@ lodash.flatten "^3.0.2" minimatch "^3.0.2" +fixturify-project@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fixturify-project/-/fixturify-project-1.10.0.tgz#091c452a9bb15f09b6b9cc7cf5c0ad559f1d9aad" + integrity sha512-L1k9uiBQuN0Yr8tA9Noy2VSQ0dfg0B8qMdvT7Wb5WQKc7f3dn3bzCbSrqlb+etLW+KDV4cBC7R1OvcMg3kcxmA== + dependencies: + fixturify "^1.2.0" + tmp "^0.0.33" + +fixturify@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fixturify/-/fixturify-1.3.0.tgz#163c468093c7c4d90b70cde39fd6325f6528b25d" + integrity sha512-tL0svlOy56pIMMUQ4bU1xRe6NZbFSa/ABTWMxW2mH38lFGc9TrNAKWcMBQ7eIjo3wqSS8f2ICabFaatFyFmrVQ== + dependencies: + "@types/fs-extra" "^5.0.5" + "@types/minimatch" "^3.0.3" + "@types/rimraf" "^2.0.2" + fs-extra "^7.0.1" + matcher-collection "^2.0.0" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -6032,17 +6843,17 @@ rimraf "2.6.3" write "1.0.3" -flat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== +flat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.0.tgz#dab7d71d60413becb0ac2de9bf4304495e3af6af" + integrity sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA== dependencies: - is-buffer "~2.0.3" + is-buffer "~2.0.4" flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flush-write-stream@^1.0.0: version "1.1.1" @@ -6053,13 +6864,11 @@ readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.8.1.tgz#24804f9eaab67160b0e840c085885d606371a35b" - integrity sha512-micCIbldHioIegeKs41DoH0KS3AXfFzgS30qVkM6z/XOE/GJgvmsoc839NUqa1B9udYe9dQxgv7KFwng6+p/dw== - dependencies: - debug "^3.0.0" + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== -for-each@~0.3.3: +for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== @@ -6071,6 +6880,11 @@ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -6156,7 +6970,7 @@ jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1: +fs-extra@^8.0.0, fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -6165,12 +6979,17 @@ jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== +fs-merger@^3.0.1, fs-merger@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fs-merger/-/fs-merger-3.1.0.tgz#f30f74f6c70b2ff7333ec074f3d2f22298152f3b" + integrity sha512-RZ9JtqugaE8Rkt7idO5NSwcxEGSDZpLmVFjtVQUm3f+bWun7JAU6fKyU6ZJUeUnKdJwGx8uaro+K4QQfOR7vpA== dependencies: - minipass "^2.2.1" + broccoli-node-api "^1.7.0" + broccoli-node-info "^2.1.0" + fs-extra "^8.0.1" + fs-tree-diff "^2.0.1" + rimraf "^2.6.3" + walk-sync "^2.0.2" fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5.6, fs-tree-diff@^0.5.7: version "0.5.9" @@ -6230,12 +7049,17 @@ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" @@ -6247,7 +7071,7 @@ mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -6278,30 +7102,30 @@ dependencies: globule "^1.0.0" -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" @@ -6334,15 +7158,20 @@ dependencies: assert-plus "^1.0.0" +git-hooks-list@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156" + integrity sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ== + git-repo-info@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.4.1.tgz#2a072823254aaf62fcf0766007d7b6651bd41943" integrity sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM= -git-repo-info@^2.0.0, git-repo-info@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.0.tgz#13d1f753c75bc2994432e65a71e35377ff563813" - integrity sha512-+kigfDB7j3W80f74BoOUX+lKOmf4pR3/i2Ww6baKTCPe2hD4FRdjhV3s4P5Dy0Tak1uY1891QhKoYNtnyX2VvA== +git-repo-info@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058" + integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg== git-repo-version@^1.0.2: version "1.0.2" @@ -6359,18 +7188,13 @@ is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== +glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - glob@^5.0.10: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -6382,19 +7206,7 @@ once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.4, glob@~7.1.1: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3, glob@~7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6436,10 +7248,10 @@ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globby@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== +globby@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.0.tgz#abfcd0630037ae174a88590132c2f6804e291072" + integrity sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw== dependencies: "@types/glob" "^7.1.1" array-union "^2.1.0" @@ -6450,24 +7262,22 @@ merge2 "^1.2.3" slash "^3.0.0" -globby@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== +globby@^11.0.0, globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== dependencies: glob "~7.1.1" lodash "~4.17.10" @@ -6503,10 +7313,10 @@ url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -6518,25 +7328,15 @@ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.11, handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" - integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -handlebars@~4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== +handlebars@^4.0.11, handlebars@^4.0.4, handlebars@^4.3.1, handlebars@^4.7.3, handlebars@^4.7.4: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== dependencies: + minimist "^1.2.5" neo-async "^2.6.0" - optimist "^0.6.1" source-map "^0.6.1" + wordwrap "^1.0.0" optionalDependencies: uglify-js "^3.1.4" @@ -6545,7 +7345,7 @@ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -6589,17 +7389,17 @@ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-symbols@^1.0.1: +has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -6647,7 +7447,7 @@ is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3, has@~1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -6655,12 +7455,13 @@ function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5.0, hash-for-dep@^1.5.1: version "1.5.1" @@ -6682,7 +7483,7 @@ inherits "^2.0.3" minimalistic-assert "^1.0.1" -heimdalljs-fs-monitor@^0.2.2: +heimdalljs-fs-monitor@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-0.2.3.tgz#1aedd4b1c61d86c51f6141fb75c5a3350dc41b15" integrity sha512-fYAvqSP0CxeOjLrt61B4wux/jqZzdZnS2xfb2oc14NP6BTZ8gtgtR2op6gKFakOR8lm8GN9Xhz1K4A1ZvJ4RQw== @@ -6690,10 +7491,10 @@ heimdalljs "^0.2.3" heimdalljs-logger "^0.1.7" -heimdalljs-graph@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/heimdalljs-graph/-/heimdalljs-graph-0.3.5.tgz#420fbbc8fc3aec5963ddbbf1a5fb47921c4a5927" - integrity sha512-szOy9WZUc7eUInEBQEsoa1G2d+oYHrn6ndZPf76eh8A9ID1zWUCEEsxP3F+CvQx9+EDrg1srdyLUmfVAr8EB4g== +heimdalljs-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/heimdalljs-graph/-/heimdalljs-graph-1.0.0.tgz#0059857952988e54f3a74bb23edaf669f8eaf6af" + integrity sha512-v2AsTERBss0ukm/Qv4BmXrkwsT5x6M1V5Om6E8NcDQ/ruGkERsfsuLi5T8jx8qWzKMGYlwzAd7c/idymxRaPzA== heimdalljs-logger@^0.1.10, heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: version "0.1.10" @@ -6742,9 +7543,9 @@ parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" - integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== html-encoding-sniffer@^1.0.2: version "1.0.2" @@ -6753,6 +7554,11 @@ dependencies: whatwg-encoding "^1.0.1" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -6790,17 +7596,17 @@ statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== -http-proxy@^1.13.1, http-proxy@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== +http-proxy@^1.13.1, http-proxy@^1.18.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" @@ -6823,24 +7629,28 @@ resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" integrity sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q= -husky@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.5.tgz#d7db27c346645a8dc52df02aa534a377ad7925e0" - integrity sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg== +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +husky@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" + integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== dependencies: - chalk "^2.4.2" - cosmiconfig "^5.2.1" - execa "^1.0.0" - get-stdin "^7.0.0" - is-ci "^2.0.0" + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^6.0.0" + find-versions "^3.2.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" please-upgrade-node "^3.2.0" - read-pkg "^5.1.1" - run-node "^1.0.0" slash "^3.0.0" + which-pm-runs "^1.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6857,35 +7667,20 @@ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== +ignore@^5.1.1, ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -6896,9 +7691,9 @@ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= + version "2.0.1" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== include-path-searcher@^0.1.0: version "0.1.0" @@ -6912,10 +7707,10 @@ dependencies: repeating "^2.0.0" -indent-string@^3.0.0, indent-string@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== indexof@0.0.1: version "0.0.1" @@ -6940,7 +7735,7 @@ once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6955,7 +7750,7 @@ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@~1.3.0: +ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -6971,26 +7766,6 @@ sum-up "^1.0.1" xtend "^4.0.0" -inquirer@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - inquirer@^6, inquirer@^6.2.2: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -7010,6 +7785,25 @@ strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^7.0.1: + version "7.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.0.tgz#aa3e7cb0c18a410c3c16cdd2bc9dcbe83c4d333e" + integrity sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + into-stream@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" @@ -7018,22 +7812,17 @@ from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-accessor-descriptor@^0.1.6: version "0.1.6" @@ -7059,6 +7848,11 @@ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.0.tgz#73da8c33208d00f130e9b5e15d23eac9215601c4" + integrity sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -7066,32 +7860,32 @@ dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" + integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -is-callable@^1.1.3, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-buffer@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== is-data-descriptor@^0.1.4: version "0.1.4" @@ -7107,10 +7901,10 @@ dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-date-object@^1.0.1, is-date-object@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" @@ -7130,11 +7924,6 @@ is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -7153,11 +7942,9 @@ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -7171,6 +7958,11 @@ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-git-url@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-1.0.0.tgz#53f684cd143285b52c3244b4e6f28253527af66b" @@ -7183,13 +7975,28 @@ dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + +is-number-object@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -7202,32 +8009,25 @@ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0, is-obj@^1.0.1: +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" - integrity sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg== +is-plain-obj@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-obj@^1.0.0, is-plain-obj@^1.1: version "1.1.0" @@ -7241,24 +8041,12 @@ dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regex@^1.0.5, is-regex@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.0.5, is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-regexp@^1.0.0: version "1.0.0" @@ -7266,9 +8054,14 @@ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-retry-allowed@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-set@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== is-stream@^1.1.0: version "1.1.0" @@ -7280,12 +8073,17 @@ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string@^1.0.4, is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" is-type@0.0.1: version "0.0.1" @@ -7294,7 +8092,17 @@ dependencies: core-util-is "~1.0.0" -is-typedarray@~1.0.0: +is-typed-array@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.3.tgz#a4ff5a5e672e1a55f99c7f54e59597af5c1df04d" + integrity sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ== + dependencies: + available-typed-arrays "^1.0.0" + es-abstract "^1.17.4" + foreach "^2.0.5" + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -7304,6 +8112,21 @@ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" + integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw== + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -7329,6 +8152,11 @@ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isbinaryfile@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" @@ -7358,10 +8186,10 @@ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-api@^2.0.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f" - integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA== +istanbul-api@^2.1.6: + version "2.1.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.7.tgz#82786b79f3b93d481349c7aa1e2c2b4eeb48c8a8" + integrity sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw== dependencies: async "^2.6.2" compare-versions "^3.4.0" @@ -7371,7 +8199,7 @@ istanbul-lib-instrument "^3.3.0" istanbul-lib-report "^2.0.8" istanbul-lib-source-maps "^3.0.6" - istanbul-reports "^2.2.4" + istanbul-reports "^2.2.5" js-yaml "^3.13.1" make-dir "^2.1.0" minimatch "^3.0.4" @@ -7422,12 +8250,12 @@ rimraf "^2.6.3" source-map "^0.6.1" -istanbul-reports@^2.2.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== +istanbul-reports@^2.2.5: + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" istextorbinary@2.1.0: version "2.1.0" @@ -7438,6 +8266,15 @@ editions "^1.1.1" textextensions "1 || 2" +istextorbinary@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.6.0.tgz#60776315fb0fa3999add276c02c69557b9ca28ab" + integrity sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA== + dependencies: + binaryextensions "^2.1.2" + editions "^2.2.0" + textextensions "^2.5.0" + isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" @@ -7455,20 +8292,15 @@ ember-cli-babel "^6.0.0" ember-cli-node-assets "^0.2.2" -jquery@^3.2.1, jquery@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" - integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== +jquery@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== js-base64@^2.1.8: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + version "2.6.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.3.tgz#7afdb9b57aa7717e15d370b66e8f36a9cb835dc3" + integrity sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg== js-reporters@1.2.1: version "1.2.1" @@ -7491,9 +8323,9 @@ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -7603,12 +8435,12 @@ dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: - minimist "^1.2.0" + minimist "^1.2.5" jsonfile@^2.1.0: version "2.4.0" @@ -7648,9 +8480,9 @@ verror "1.10.0" just-extend@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" - integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== + version "4.1.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4" + integrity sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA== keyv@3.0.0: version "3.0.0" @@ -7679,9 +8511,9 @@ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== layout-bin-packer@^1.4.0: version "1.5.0" @@ -7690,13 +8522,6 @@ dependencies: ember-cli-babel "^6.8.2" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - leek@0.0.24: version "0.0.24" resolved "https://registry.yarnpkg.com/leek/-/leek-0.0.24.tgz#e400e57f0e60d8ef2bd4d068dc428a54345dbcda" @@ -7706,6 +8531,18 @@ lodash.assign "^3.2.0" rsvp "^3.0.21" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -7726,69 +8563,40 @@ dependencies: uc.micro "^1.0.1" -lint-staged@^9.2.5: - version "9.2.5" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.2.5.tgz#5a3e1e0a539a403bd7f88542bc3d34ce52efdbb3" - integrity sha512-d99gTBFMJ29159+9iRvaMEQstmNcPAbQbhHSYw6D/1FncvFdIj8lWHztaq3Uq+tbZPABHXQ/fyN7Rp1QwF8HIw== - dependencies: - chalk "^2.4.2" - commander "^2.20.0" - cosmiconfig "^5.2.1" +lint-staged@^10.2.11: + version "10.2.11" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.11.tgz#713c80877f2dc8b609b05bc59020234e766c9720" + integrity sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA== + dependencies: + chalk "^4.0.0" + cli-truncate "2.1.0" + commander "^5.1.0" + cosmiconfig "^6.0.0" debug "^4.1.1" dedent "^0.7.0" - del "^5.0.0" - execa "^2.0.3" - listr "^0.14.3" - log-symbols "^3.0.0" + enquirer "^2.3.5" + execa "^4.0.1" + listr2 "^2.1.0" + log-symbols "^4.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" - please-upgrade-node "^3.1.1" - string-argv "^0.3.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" stringify-object "^3.3.0" -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== +listr2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.2.0.tgz#cb88631258abc578c7fb64e590fe5742f28e4aac" + integrity sha512-Q8qbd7rgmEwDo1nSyHaWQeztfGsdL6rb4uh7BA+Q80AZiDET5rVntiU1+13mu2ZTDVaBVbvAD1Db11rnu3l9sg== dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" + chalk "^4.0.0" + cli-truncate "^2.1.0" + figures "^3.2.0" + indent-string "^4.0.0" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.5.5" + through "^2.3.8" livereload-js@^2.3.0: version "2.4.0" @@ -7821,13 +8629,13 @@ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== +loader-utils@^1.1.0, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: big.js "^5.2.2" - emojis-list "^2.0.0" + emojis-list "^3.0.0" json5 "^1.0.1" loader.js@^4.7.0: @@ -7944,7 +8752,7 @@ dependencies: lodash._getnative "^3.0.0" -lodash.defaultsdeep@^4.6.0: +lodash.defaultsdeep@^4.6.0, lodash.defaultsdeep@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== @@ -7967,6 +8775,11 @@ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -8006,7 +8819,7 @@ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.4.0, lodash.template@^4.5.0: +lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== @@ -8031,17 +8844,10 @@ resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.10: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" +lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.5.1, lodash@~4.17.10: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== log-symbols@^2.2.0: version "2.2.0" @@ -8057,19 +8863,22 @@ dependencies: chalk "^2.4.2" -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= +log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" + chalk "^4.0.0" -lolex@^4.1.0, lolex@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" - integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" loose-envify@^1.0.0: version "1.4.0" @@ -8086,10 +8895,12 @@ currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" lowercase-keys@1.0.0: version "1.0.0" @@ -8116,13 +8927,6 @@ dependencies: yallist "^3.0.2" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -8131,6 +8935,13 @@ pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -8166,7 +8977,7 @@ lodash.merge "^4.6.0" markdown-it "^8.3.1" -markdown-it@^8.3.1, markdown-it@^8.4.2: +markdown-it@^8.3.1: version "8.4.2" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== @@ -8177,6 +8988,17 @@ mdurl "^1.0.1" uc.micro "^1.0.5" +markdown-it@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-9.1.0.tgz#df9601c168568704d554b1fff9af0c5b561168d9" + integrity sha512-xHKG4C8iPriyfu/jc2hsCC045fKrMQ0VexX2F1FGYiRxDxqMB2aAhF8WauJ3fltn2kb90moGBkiiEdooGIg55w== + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + matcher-collection@^1.0.0, matcher-collection@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" @@ -8185,9 +9007,9 @@ minimatch "^3.0.2" matcher-collection@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-2.0.0.tgz#470ae263c793e897b3f1e72c695016b7aea355c4" - integrity sha512-wSi4BgQGTFfBN5J+pIaS78rEKk4qIkjrw+NfJYdHsd2cRVIQsbDi3BZtNAXTFA2WHvlbS9kLGtTjv3cPJKuRSw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-2.0.1.tgz#90be1a4cf58d6f2949864f65bb3b0f3e41303b29" + integrity sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ== dependencies: "@types/minimatch" "^3.0.3" minimatch "^3.0.2" @@ -8199,6 +9021,13 @@ dependencies: md5-o-matic "^0.1.1" +md5-hex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== + dependencies: + blueimp-md5 "^2.10.0" + md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" @@ -8223,7 +9052,15 @@ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -8291,17 +9128,17 @@ fs-updater "^1.0.4" heimdalljs "^0.2.5" -merge2@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" - integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -8336,34 +9173,17 @@ bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -mime-db@1.43.0: - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - -"mime-db@>= 1.40.0 < 2": - version "1.41.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" - integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== - -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.19, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.26, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" @@ -8402,36 +9222,24 @@ dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minimist@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" + integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg== -minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857" - integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q== +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.2.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -8456,12 +9264,12 @@ for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - minimist "0.0.8" + minimist "^1.2.5" mkdirp@^0.3.5: version "0.3.5" @@ -8473,21 +9281,28 @@ resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b" integrity sha1-bQUVYRyKjITkhKogABKbmOmB/ws= +mnemonist@^0.38.0: + version "0.38.0" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.0.tgz#ea1c32c22f26956dab7a8c5acc56c03b802b9b50" + integrity sha512-OrqILDYOEGVFooAbGid3/P9jdjWuZONlGHVyjfZnvg65+ZQ/QM5dOms+yADY/WURd1NFhCqjf/VJGFlnJToLJQ== + dependencies: + obliterator "^1.6.1" + morgan@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + version "1.10.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: - basic-auth "~2.0.0" + basic-auth "~2.0.1" debug "2.6.9" - depd "~1.1.2" + depd "~2.0.0" on-finished "~2.3.0" - on-headers "~1.0.1" + on-headers "~1.0.2" mout@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mout/-/mout-1.1.0.tgz#0b29d41e6a80fa9e2d4a5be9d602e1d9d02177f6" - integrity sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d" + integrity sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA== move-concurrently@^1.0.1: version "1.0.1" @@ -8517,19 +9332,24 @@ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mustache@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.0.3.tgz#ee4fb971887fa6cc1b6b6d219a74b5e3c7535f32" - integrity sha512-vM5FkMHamTYmVYeAujypihuPrJQDtaUIlKeeVb1AMJ73OZLtWiF7GprqrjxD0gJWT53W9JfqXxf97nXQjMQkqA== + version "3.2.1" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.2.1.tgz#89e78a9d207d78f2799b1e95764a25bf71a28322" + integrity sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA== mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.12.1, nan@^2.13.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanomatch@^1.2.9: version "1.2.13" @@ -8553,15 +9373,6 @@ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -8572,42 +9383,43 @@ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -ngraph.events@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ngraph.events/-/ngraph.events-1.0.0.tgz#260b638f1d8b1394a10ce1dda9e5d9d9c85001b1" - integrity sha512-Z7wyywdw8IKjOW0bDiOG4FUqX5fwqW7SDMO1huemDXho7Qy1b02RoBkPS43KLIZU2wrW2orju99k8wIr+xXvVA== +ngraph.events@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ngraph.events/-/ngraph.events-1.2.1.tgz#6e40425ef9dec1e074bbef6da56c8d79b9188fd8" + integrity sha512-D4C+nXH/RFxioGXQdHu8ELDtC6EaCiNsZtih0IvyGN81OZSUby4jXoJ5+RNWasfsd0FnKxxpAROyUMzw64QNsw== -ngraph.graph@^18.0.3: - version "18.0.3" - resolved "https://registry.yarnpkg.com/ngraph.graph/-/ngraph.graph-18.0.3.tgz#5cab1502be4b3d5ac5470083596a070bd85ec8ba" - integrity sha512-IjGOWvYSUi1Oj3V1JrhhLGPY/rqvbvhUOa5tgOzIQo/LxO4wcBOSjZGZWeTTBUNLPt6R5hpkWKrUBaqPxgY4Ew== +ngraph.graph@^19.1.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/ngraph.graph/-/ngraph.graph-19.1.0.tgz#88910ed53f6b4bc374f1b67296f4f81aab814e24" + integrity sha512-9cws84qfPkrYa7BaBtT+KgZfLXrd6pNL9Gl5Do+MBO/0Hm6rOM7qK78MZaO1uEoIK6p2pgUs6lu29zn/6tP59w== dependencies: - ngraph.events "1.0.0" + ngraph.events "^1.2.1" nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.2.tgz#b6d29af10e48b321b307e10e065199338eeb2652" - integrity sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA== +nise@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/nise/-/nise-4.0.4.tgz#d73dea3e5731e6561992b8f570be9e363c4512dd" + integrity sha512-bTTRUNlemx6deJa+ZyoCUTRvH3liK5+N6VQZ4NIw90AgDXY6iPnsqplNFf6STcj+ePk0H/xqxnP75Lr0J0Fq3A== dependencies: - "@sinonjs/formatio" "^3.2.1" + "@sinonjs/commons" "^1.7.0" + "@sinonjs/fake-timers" "^6.0.0" "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" - lolex "^4.1.0" path-to-regexp "^1.7.0" -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== dependencies: - lower-case "^1.1.1" + lower-case "^2.0.1" + tslib "^1.10.0" -node-dir@^0.1.16: +node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= @@ -8671,6 +9483,11 @@ resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.2.tgz#e3acede9b7baf4bc336e3496b58e5b40d517056e" integrity sha512-6Gbjq+d7uhkO7epaKi5DNgUJn7H0gEyA4Jg0Mo1uQOi3Rk50G83LtmhhFyw0LxnAFhtlspkiiw52ISP13qzcBg== +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + node-notifier@^5.0.1: version "5.4.3" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" @@ -8682,33 +9499,15 @@ shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.29: - version "1.1.29" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.29.tgz#86a57c6587a30ecd6726449e5d293466b0a0bb86" - integrity sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ== - dependencies: - semver "^5.3.0" +node-releases@^1.1.58: + version "1.1.59" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" + integrity sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== node-sass@^4.9.3: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -8717,21 +9516,21 @@ get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" node-gyp "^3.8.0" npmlog "^4.0.0" request "^2.88.0" - sass-graph "^2.2.4" + sass-graph "2.2.5" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -node-watch@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.6.0.tgz#ab0703b60cd270783698e57a428faa0010ed8fd0" - integrity sha512-XAgTL05z75ptd7JSVejH1a2Dm1zmXYhuDr9l230Qk6Z7/7GPcnAs/UyJJ4ggsXSvWil8iOzwQLW0zuGUvHpG8g== +node-watch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.6.1.tgz#b9874111ce9f5841b1c7596120206c7b825be0e9" + integrity sha512-gwQiR7weFRV8mAtT0x0kXkZ18dfRLB45xH7q0hCOVQMLfLb2f1ZaSvR57q4/b/Vj6B0RwMNJYbvb69e1yM7qEA== nomnom@^1.5.x: version "1.8.1" @@ -8748,15 +9547,7 @@ dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -8773,7 +9564,7 @@ dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -8792,17 +9583,12 @@ query-string "^5.0.1" sort-keys "^2.0.0" -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - npm-git-info@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/npm-git-info/-/npm-git-info-1.0.3.tgz#a933c42ec321e80d3646e0d6e844afe94630e1d5" integrity sha1-qTPELsMh6A02RuDW6ESv6UYw4dU= -npm-package-arg@^6.1.0: +npm-package-arg@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== @@ -8812,14 +9598,6 @@ semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -8834,7 +9612,14 @@ dependencies: path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -8855,9 +9640,9 @@ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.9: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" @@ -8893,20 +9678,18 @@ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== - -object-inspect@^1.7.0, object-inspect@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== -object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== +object-is@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -8930,13 +9713,13 @@ has-symbols "^1.0.0" object-keys "^1.0.11" -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -8945,6 +9728,11 @@ dependencies: isobject "^3.0.1" +obliterator@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" + integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -8952,7 +9740,7 @@ dependencies: ee-first "1.1.1" -on-headers@~1.0.1, on-headers@~1.0.2: +on-headers@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== @@ -8979,29 +9767,21 @@ mimic-fn "^2.1.0" opencollective-postinstall@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" - integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" ora@^3.4.0: version "3.4.0" @@ -9015,6 +9795,20 @@ strip-ansi "^5.2.0" wcwidth "^1.0.1" +ora@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" + integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -9025,19 +9819,12 @@ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.3, osenv@^0.1.4, osenv@^0.1.5: +osenv@0, osenv@^0.1.3, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -9050,10 +9837,10 @@ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== -p-defer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-2.1.0.tgz#d9c97b40f8fb5c256a70b4aabec3c1c8c42f1fae" - integrity sha512-xMwL9id1bHn/UfNGFEMFwlULOprQUEOg6vhqSfr6oKxPFB0oSh0zhGq/9/tPSE+cyij2+RW6H8+0Ke4xsPdZ7Q== +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== p-finally@^1.0.0: version "1.0.0" @@ -9078,9 +9865,9 @@ p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -9105,15 +9892,10 @@ dependencies: p-limit "^2.2.0" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" @@ -9135,9 +9917,9 @@ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -9155,10 +9937,10 @@ dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -9268,10 +10050,10 @@ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" - integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" @@ -9301,9 +10083,9 @@ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" @@ -9329,9 +10111,9 @@ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -9344,10 +10126,10 @@ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" @@ -9376,6 +10158,13 @@ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -9397,7 +10186,14 @@ dependencies: find-up "^2.1.0" -please-upgrade-node@^3.1.1, please-upgrade-node@^3.2.0: +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== @@ -9409,14 +10205,19 @@ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -portfinder@^1.0.20: - version "1.0.23" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.23.tgz#894db4bcc5daf02b6614517ce89cd21a38226b82" - integrity sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ== +popper.js@^1.0.2, popper.js@^1.12.5: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portfinder@^1.0.25: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" posix-character-classes@^0.1.0: version "0.1.1" @@ -9447,26 +10248,25 @@ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -pretender@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretender/-/pretender-2.1.2.tgz#02d7c0a3f18cb0ce376dfc4fb0043ca288f50316" - integrity sha512-5Jx7kBalWDn8oEKfw6nAcx2KK4GkDSQXG3WhgaPsDtak6Rv6nTeQjOdvOM9PEvauS+9Ur+DLfZTDWBtqK6lFVA== +pretender@^3.2.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/pretender/-/pretender-3.4.3.tgz#a3b4160516007075d29127262f3a0063d19896e9" + integrity sha512-AlbkBly9R8KR+R0sTCJ/ToOeEoUMtt52QVCetui5zoSmeLOU3S8oobFsyPLm1O2txR6t58qDNysqPnA1vVi8Hg== dependencies: - "@xg-wang/whatwg-fetch" "^3.0.0" - fake-xml-http-request "~2.0.0" + fake-xml-http-request "^2.1.1" route-recognizer "^0.3.3" prettier@^1.10.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== printf@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/printf/-/printf-0.5.2.tgz#8546e01a1f647b1dff510ae92bdc92beb8c9b2f9" - integrity sha512-Hn0UuWqTRd94HiCJoiCNGZTnSyXJdIF3t4/4I293hezIzyH4pQ3ai4TlH/SmRCiMvR5aNMxSYWshjQWWW6J8MQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/printf/-/printf-0.5.3.tgz#8b7eec278d886833312238b2bf42b2b6f250880a" + integrity sha512-t3lYN6vPU5PZXDiEZZqoyXvN8wCsBfi8gPoxTKo2e5hhV673t/KUh+mfO8P8lCOCDC/BWcOGIxKyebxc5FuqLA== -private@^0.1.6, private@^0.1.8, private@~0.1.5: +private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -9498,29 +10298,34 @@ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-map-series@^0.2.1, promise-map-series@^0.2.3: +promise-map-series@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.2.3.tgz#c2d377afc93253f6bd03dbb77755eb88ab20a847" integrity sha1-wtN3r8kyU/a9A9u3d1XriKsgqEc= dependencies: rsvp "^3.0.14" -promise.prototype.finally@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz#cb279d3a5020ca6403b3d92357f8e22d50ed92aa" - integrity sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw== +promise-map-series@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.3.0.tgz#41873ca3652bb7a042b387d538552da9b576f8a1" + integrity sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA== + +promise.prototype.finally@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" + integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== dependencies: define-properties "^1.1.3" - es-abstract "^1.13.0" + es-abstract "^1.17.0-next.0" function-bind "^1.1.1" proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.9.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" @@ -9532,10 +10337,10 @@ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24, psl@^1.1.28: - version "1.3.1" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.1.tgz#d5aa3873a35ec450bc7db9012ad5a7246f6fc8bd" - integrity sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA== +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== public-encrypt@^4.0.0: version "4.0.3" @@ -9579,7 +10384,7 @@ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -9595,9 +10400,9 @@ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.4.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.8.0.tgz#87b763f0d37ca54200334cd57bb2ef8f68a1d081" - integrity sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w== + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== qs@~6.5.2: version "6.5.2" @@ -9632,26 +10437,26 @@ rimraf "^2.5.4" underscore.string "~3.3.4" -qunit-dom@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/qunit-dom/-/qunit-dom-0.9.0.tgz#99d15fffbf06059e543bb93dae8fe0a3f42a27b9" - integrity sha512-MvVEoCcf8BHVPD3gXg5GBfNy3JMZ3U3yOha4MB1rFs698EpvxMprOfC+NMEGvOF9Epm6GrsA0BFOdCKHd8Orrw== +qunit-dom@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qunit-dom/-/qunit-dom-1.2.0.tgz#464cca19e9976c4cee4b14b06da6645c03026880" + integrity sha512-8UqSimcDIo19nokb3eh+Z5hov07xDeLnwsWAgCYPFGcpUF/eiZAIHbLDPCixH0SM1YqCm4YGCLVCojY6sJD5xQ== dependencies: - broccoli-funnel "^2.0.2" - broccoli-merge-trees "^3.0.1" + broccoli-funnel "^3.0.2" + broccoli-merge-trees "^4.2.0" -qunit@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.9.2.tgz#97919440c9c0ae838bcd3c33a2ee42f35c5ef4a0" - integrity sha512-wTOYHnioWHcx5wa85Wl15IE7D6zTZe2CQlsodS14yj7s2FZ3MviRnQluspBZsueIDEO7doiuzKlv05yfky1R7w== +qunit@^2.9.3: + version "2.10.1" + resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.10.1.tgz#929dbc7cab975dda5537bc6b1321392d061c18ae" + integrity sha512-6ntXpabAW+ycodADqsC2QWPr6xLubag3WBujaAfOlltgwkBVDmM0gkB5dS2Mc4RAszmvtYzyYDSMZX5ibwkNWw== dependencies: commander "2.12.2" js-reporters "1.2.1" minimatch "3.0.4" - node-watch "0.6.0" + node-watch "0.6.1" resolve "1.9.0" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -9689,16 +10494,6 @@ bytes "1" string_decoder "0.10" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9733,20 +10528,10 @@ normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9756,10 +10541,10 @@ string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3": - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== +"readable-stream@2 || 3", readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -9784,15 +10569,22 @@ micromatch "^3.1.10" readable-stream "^2.0.2" -recast@^0.11.3: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +recast@^0.18.1: + version "0.18.10" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.10.tgz#605ebbe621511eb89b6356a7e224bff66ed91478" + integrity sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ== + dependencies: + ast-types "0.13.3" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" recursive-readdir-sync@^1.0.6: version "1.0.6" @@ -9814,17 +10606,17 @@ dependencies: esprima "~3.0.0" -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== regenerator-runtime@^0.10.5: version "0.10.5" @@ -9836,10 +10628,10 @@ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== regenerator-runtime@^0.9.5: version "0.9.6" @@ -9855,12 +10647,12 @@ babel-types "^6.19.0" private "^0.1.6" -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -9870,12 +10662,7 @@ extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.6: - version "0.1.13" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" - integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw== - -regexp.prototype.flags@^1.2.0: +regexp.prototype.flags@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== @@ -9889,9 +10676,9 @@ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" - integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== regexpu-core@^2.0.0: version "2.0.0" @@ -9902,27 +10689,27 @@ regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" + unicode-match-property-value-ecmascript "^1.2.0" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.1.4: version "0.1.5" @@ -9931,10 +10718,10 @@ dependencies: jsesc "~0.5.0" -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" @@ -9960,26 +10747,26 @@ dependencies: is-finite "^1.0.0" -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - lodash "^4.17.11" + lodash "^4.17.15" request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: - request-promise-core "1.1.2" + request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -9988,7 +10775,7 @@ extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -9998,7 +10785,7 @@ performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -10007,11 +10794,6 @@ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -10027,6 +10809,11 @@ resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= +reselect@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" + integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -10035,17 +10822,12 @@ expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-package-path@^1.0.11, resolve-package-path@^1.2.2, resolve-package-path@^1.2.6, resolve-package-path@^1.2.7: +resolve-package-path@^1.0.11, resolve-package-path@^1.2.2, resolve-package-path@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== @@ -10053,6 +10835,14 @@ path-root "^0.1.1" resolve "^1.10.0" +resolve-package-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-2.0.0.tgz#7f258ab86ff074fff4ff8027a28f94d17d6fb1df" + integrity sha512-/CLuzodHO2wyyHTzls5Qr+EFeG6RcW4u6//gjYvUfcfyuplIX1SSccU+A5A9A78Gmezkl3NBkFAMxLbzTY9TJA== + dependencies: + path-root "^0.1.1" + resolve "^1.13.1" + resolve-path@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" @@ -10073,24 +10863,10 @@ dependencies: path-parse "^1.0.6" -resolve@^1.1.3, resolve@^1.1.7, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.3.3: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== - dependencies: - path-parse "^1.0.6" - -resolve@~1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" - integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" @@ -10109,7 +10885,15 @@ onetime "^2.0.0" signal-exit "^3.0.2" -resumer@~0.0.0: +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +resumer@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= @@ -10121,7 +10905,7 @@ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -reusify@^1.0.0: +reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== @@ -10140,10 +10924,10 @@ dependencies: glob "^7.1.3" -rimraf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== +rimraf@^3.0.0, rimraf@^3.0.1, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -10156,20 +10940,20 @@ inherits "^2.0.1" rollup-pluginutils@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" - integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: estree-walker "^0.6.1" rollup@^1.12.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.20.3.tgz#6243f6c118ca05f56b2d9433112400cd834a1eb8" - integrity sha512-/OMCkY0c6E8tleeVm4vQVDz24CkVgvueK3r8zTYu2AQNpjrcaPwO9hE+pWj5LTFrvvkaxt4MYIp2zha4y0lRvg== - dependencies: - "@types/estree" "0.0.39" - "@types/node" "^12.7.2" - acorn "^7.0.0" + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" route-recognizer@^0.3.3: version "0.3.4" @@ -10181,7 +10965,7 @@ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== -rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.3, rsvp@^4.8.4, rsvp@^4.8.5: +rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.4, rsvp@^4.8.5: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== @@ -10191,17 +10975,10 @@ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" integrity sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo= -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.1.9" @@ -10215,22 +10992,10 @@ dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - -rxjs@^6.3.3, rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== +rxjs@^6.4.0, rxjs@^6.5.5, rxjs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== dependencies: tslib "^1.9.0" @@ -10239,10 +11004,10 @@ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-json-parse@~1.0.1: version "1.0.1" @@ -10276,20 +11041,15 @@ minimist "^1.1.1" walker "~1.0.5" -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== dependencies: glob "^7.0.0" lodash "^4.0.0" scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + yargs "^13.3.2" saxes@^3.1.3: version "3.1.11" @@ -10315,6 +11075,15 @@ ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.6.5: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -10333,16 +11102,31 @@ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -10367,10 +11151,12 @@ range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" serve-static@1.14.1: version "1.14.1" @@ -10427,20 +11213,40 @@ dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0, silent-error@^1.1.1: version "1.1.1" @@ -10449,44 +11255,34 @@ dependencies: debug "^2.2.0" -simple-html-tokenizer@^0.5.8: - version "0.5.8" - resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.8.tgz#3417382f75954ee34515cc4fd32d9918e693f173" - integrity sha512-0Sq4FvLlQEQODVA6PH2MIrc7tzYO0KT2HzzwvaVLYClWgIsuvaNUOrhrAvTi1pZHrcq7GDB4WiI3ukjqBMxcGQ== - -sinon@^7.1.1: - version "7.4.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.2.tgz#ecd54158fef2fcfbdb231a3fa55140e8cb02ad6c" - integrity sha512-pY5RY99DKelU3pjNxcWo6XqeB1S118GBcVIIdDi6V+h6hevn1izcg2xv1hTHW/sViRXU7sUOxt4wTUJ3gsW2CQ== - dependencies: - "@sinonjs/commons" "^1.4.0" - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.3" - diff "^3.5.0" - lolex "^4.2.0" - nise "^1.5.2" - supports-color "^5.5.0" +simple-html-tokenizer@^0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.9.tgz#1a83fe97f5a3e39b335fddf71cfe9b0263b581c2" + integrity sha512-w/3FEDN94r4JQ9WoYrIr8RqDIPZdyNkdpbK9glFady1CAEyD97XWCv8HFetQO21w81e7h7Nh59iYTyG1mUJftg== + +sinon@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.0.2.tgz#b9017e24633f4b1c98dfb6e784a5f0509f5fd85d" + integrity sha512-0uF8Q/QHkizNUmbK3LRFqx5cpTttEVXudywY9Uwzy8bTfZUhljZ7ARzSxnRHWYWtVTeh4Cw+tTb3iU21FQVO9A== + dependencies: + "@sinonjs/commons" "^1.7.2" + "@sinonjs/fake-timers" "^6.0.1" + "@sinonjs/formatio" "^5.0.1" + "@sinonjs/samsam" "^5.0.3" + diff "^4.0.2" + nise "^4.0.1" + supports-color "^7.1.0" slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -10496,12 +11292,31 @@ astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snake-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.3.tgz#c598b822ab443fcbb145ae8a82c5e43526d5bbee" + integrity sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q== dependencies: - no-case "^2.2.0" + dot-case "^3.0.3" + tslib "^1.10.0" snapdragon-node@^2.0.1: version "2.1.1" @@ -10534,21 +11349,21 @@ use "^3.1.0" socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== -socket.io-client@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7" - integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA== +socket.io-client@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== dependencies: backo2 "1.0.2" base64-arraybuffer "0.1.5" component-bind "1.0.0" component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.3.1" + debug "~4.1.0" + engine.io-client "~3.4.0" has-binary2 "~1.0.2" has-cors "1.1.0" indexof "0.0.1" @@ -10567,17 +11382,26 @@ debug "~3.1.0" isarray "2.0.1" +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + socket.io@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b" - integrity sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w== + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== dependencies: debug "~4.1.0" - engine.io "~3.3.1" + engine.io "~3.4.0" has-binary2 "~1.0.2" socket.io-adapter "~1.1.0" - socket.io-client "2.2.0" - socket.io-parser "~3.3.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" sort-keys@^2.0.0: version "2.0.0" @@ -10586,18 +11410,22 @@ dependencies: is-plain-obj "^1.0.0" -sort-object-keys@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.2.tgz#d3a6c48dc2ac97e6bc94367696e03f6d09d37952" - integrity sha1-06bEjcKsl+a8lDZ2luA/bQnTeVI= +sort-object-keys@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" + integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== -sort-package-json@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.22.1.tgz#384ce7a098cd13be4109800d5ce2f0cf7826052e" - integrity sha512-uVINQraFQvnlzNHFnQOT4MYy0qonIEzKwhrI2yrTiQjNo5QF4h3ffrnCk7a95QAwoK/RdkO/w8W9tJIcaOWC7g== - dependencies: - detect-indent "^5.0.0" - sort-object-keys "^1.1.2" +sort-package-json@^1.39.1: + version "1.44.0" + resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.44.0.tgz#470330be868f8a524a4607b26f2a0233e93d8b6d" + integrity sha512-u9GUZvpavUCXV5SbEqXu9FRbsJrYU6WM10r3zA0gymGPufK5X82MblCLh9GW9l46pXKEZvK+FA3eVTqC4oMp4A== + dependencies: + detect-indent "^6.0.0" + detect-newline "3.1.0" + git-hooks-list "1.0.3" + globby "10.0.0" + is-plain-obj "2.1.0" + sort-object-keys "^1.1.3" source-list-map@^2.0.0: version "2.0.1" @@ -10605,11 +11433,11 @@ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -10622,10 +11450,10 @@ dependencies: source-map "^0.5.6" -source-map-support@~0.5.10, source-map-support@~0.5.12: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== +source-map-support@^0.5.16, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -10647,7 +11475,7 @@ dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -10680,22 +11508,22 @@ integrity sha1-+30L0dcP1DFr2ePew4nmX51jYbs= spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -10809,16 +11637,16 @@ xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-argv@^0.3.0: +string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== @@ -10828,7 +11656,7 @@ resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -10845,7 +11673,7 @@ is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -10854,7 +11682,16 @@ is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trim@~1.2.1: +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trim@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== @@ -10863,37 +11700,21 @@ es-abstract "^1.17.0-next.1" function-bind "^1.1.1" -string.prototype.trimleft@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff" - integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8= - dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" - -string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" - -string.prototype.trimright@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd" - integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0= - dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" + es-abstract "^1.17.5" -string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" @@ -10937,13 +11758,20 @@ dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -10961,6 +11789,11 @@ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -10978,7 +11811,7 @@ dependencies: get-stdin "^4.0.1" -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -11000,7 +11833,7 @@ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -11014,30 +11847,27 @@ dependencies: has-flag "^3.0.0" -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8: +symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0, symlink-or-copy@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA== -symlink-or-copy@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#5d49108e2ab824a34069b68974486c290020b393" - integrity sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg== - sync-disk-cache@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.3.tgz#481933461623fdc2bdf46cfc87872ba215a7e246" - integrity sha512-Kp7DFemXDPRUbFW856CKamtX7bJuThZPa2dwnK2RfNqMew7Ah8xDc52SdooNlfN8oydDdDHlBPLsXTrtmA7HKw== + version "1.3.4" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.4.tgz#53a2c5a09d8f4bb53160bce182a456ad71574024" + integrity sha512-GlkGeM81GPPEKz/lH7QUTbvqLq7K/IUTuaKDSMulP9XQ42glqNJIN/RKgSOw4y8vxL1gOVvj+W7ruEO4s36eCw== dependencies: debug "^2.1.3" heimdalljs "^0.2.3" @@ -11045,6 +11875,17 @@ rimraf "^2.2.8" username-sync "^1.0.2" +sync-disk-cache@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-2.1.0.tgz#01e879edc41c34a01fcdda5b39d47dd496e154a6" + integrity sha512-vngT2JmkSapgq0z7uIoYtB9kWOOzMihAAYq/D3Pjm/ODOGMgS4r++B+OZ09U4hWR6EaOdy9eqQ7/8ygbH3wehA== + dependencies: + debug "^4.1.1" + heimdalljs "^0.2.6" + mkdirp "^0.5.0" + rimraf "^3.0.0" + username-sync "^1.0.2" + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -11069,26 +11910,28 @@ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tape@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.0.tgz#e2f581ff5f12a7cbd787e9f83c76c2851782fce2" - integrity sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw== +tape@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/tape/-/tape-5.0.1.tgz#0d70ce90a586387c4efda4393e72872672a416a3" + integrity sha512-wVsOl2shKPcjdJdc8a+PwacvrOdJZJ57cLUXlxW4TQ2R6aihXwG0m0bKm4mA4wjtQNTaLMCrYNEb4f9fjHKUYQ== dependencies: - deep-equal "~1.1.1" - defined "~1.0.0" - dotignore "~0.1.2" - for-each "~0.3.3" - function-bind "~1.1.1" - glob "~7.1.6" - has "~1.0.3" - inherits "~2.0.4" - is-regex "~1.0.5" - minimist "~1.2.0" - object-inspect "~1.7.0" - resolve "~1.14.2" - resumer "~0.0.0" - string.prototype.trim "~1.2.1" - through "~2.3.8" + deep-equal "^2.0.3" + defined "^1.0.0" + dotignore "^0.1.2" + for-each "^0.3.3" + function-bind "^1.1.1" + glob "^7.1.6" + has "^1.0.3" + inherits "^2.0.4" + is-regex "^1.0.5" + minimist "^1.2.5" + object-inspect "^1.7.0" + object-is "^1.1.2" + object.assign "^4.1.0" + resolve "^1.17.0" + resumer "^0.0.0" + string.prototype.trim "^1.2.1" + through "^2.3.8" tar@^2.0.0: version "2.2.2" @@ -11099,54 +11942,32 @@ fstream "^1.0.12" inherits "2" -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -temp@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.0.tgz#61391795a11bd9738d4c4d7f55f012cb8f55edaa" - integrity sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ== +temp@0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697" + integrity sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA== dependencies: rimraf "~2.6.2" terser-webpack-plugin@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^3.1.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^3.17.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" - integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== - dependencies: - commander "^2.19.0" - source-map "~0.6.1" - source-map-support "~0.5.10" - -terser@^4.1.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1" - integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A== +terser@^4.1.2, terser@^4.3.9: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -11162,10 +11983,10 @@ read-pkg-up "^4.0.0" require-main-filename "^2.0.0" -testem@^2.14.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/testem/-/testem-2.17.0.tgz#1cb4a2a90524a088803dfe52fbf197a6fd73c883" - integrity sha512-PLkIlT523w5rTJPWwR4TL1EiAEa941ECV7d4pMqsB0YdnH+sCTz0loWMKCUSdhR+VijveAZ6anE/JHehE7KqMQ== +testem@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/testem/-/testem-3.2.0.tgz#9924481f6a3b23e350fa77bb251c64d801c4c9a7" + integrity sha512-FkFzNRCIzCxjbNSTxIQSC2tWn1Q2MTR/GTxusSw6uZA4byEQ7wc86TKutNnoCyZ5XIaD9wo4q+dmlK0GUEqFVA== dependencies: backbone "^1.1.2" bluebird "^3.4.6" @@ -11207,7 +12028,7 @@ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -"textextensions@1 || 2": +"textextensions@1 || 2", textextensions@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== @@ -11221,13 +12042,14 @@ xtend "~4.0.1" through2@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== dependencies: + inherits "^2.0.4" readable-stream "2 || 3" -through@^2.3.6, through@~2.3.4, through@~2.3.8: +through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -11275,6 +12097,13 @@ dependencies: os-tmpdir "~1.0.2" +tmp@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -11337,7 +12166,21 @@ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@^2.4.3: +tooltip.js@^1.1.5: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tooltip.js/-/tooltip.js-1.3.3.tgz#2ad0d77bb6776a76e117eac0afcd3c7d3a237121" + integrity sha512-XWWuy/dBdF/F/YpRE955yqBZ4VdLfiTAUdOqoU+wJm6phJlMpEzl/iYHZ+qJswbeT9VG822bNfsETF9wzmoy5A== + dependencies: + popper.js "^1.0.2" + +torii@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/torii/-/torii-0.10.1.tgz#caad0a81e82189fc0483b65e68ee28041ad3590f" + integrity sha512-csUz/coeSumt9FjyIXLpRj0ii7TfH3fUm3x9rdf+XXnJ0tVTKqwCRynwY0HKuNkGzACyR84hog3B9a8BQefBHA== + dependencies: + ember-cli-babel "^6.11.0" + +tough-cookie@^2.3.3, tough-cookie@^2.4.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -11345,14 +12188,6 @@ psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -11360,7 +12195,15 @@ dependencies: punycode "^2.1.0" -tree-sync@^1.2.2, tree-sync@^1.4.0: +tracked-maps-and-sets@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tracked-maps-and-sets/-/tracked-maps-and-sets-2.1.0.tgz#762cf89fb22ca16aa4b1a7198c03e844e0ef238d" + integrity sha512-N8v0ulJfyTD0Ew4omtO1JZTDql7qh/9ZqM+YIhygVDuvwLQjTa29QBO4eIfdyx/ZnRDNgBl9FBAZIuc/2R9UKQ== + dependencies: + "@glimmer/tracking" "^1.0.0" + ember-cli-babel "^7.17.2" + +tree-sync@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" integrity sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ== @@ -11371,6 +12214,17 @@ quick-temp "^0.1.5" walk-sync "^0.3.3" +tree-sync@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-2.1.0.tgz#31cbbd41f2936f5390b61e8c9d7cb27e75a212fe" + integrity sha512-OLWW+Nd99NOM53aZ8ilT/YpEiOo6mXD3F4/wLbARqybSZ3Jb8IxHK5UGVbZaae0wtXAyQshVV+SeqVBik+Fbmw== + dependencies: + debug "^4.1.1" + fs-tree-diff "^2.0.1" + mkdirp "^0.5.5" + quick-temp "^0.1.5" + walk-sync "^0.3.3" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -11388,10 +12242,10 @@ dependencies: glob "^7.1.2" -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tslib@^1.10.0, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== tty-browserify@0.0.0: version "0.0.0" @@ -11417,15 +12271,15 @@ dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" @@ -11435,6 +12289,13 @@ media-typer "0.3.0" mime-types "~2.1.24" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -11453,12 +12314,9 @@ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== - dependencies: - commander "~2.20.0" - source-map "~0.6.1" + version "3.10.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" + integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== underscore.string@^3.2.2, underscore.string@~3.3.4: version "3.3.5" @@ -11469,9 +12327,9 @@ util-deprecate "^1.0.2" underscore@>=1.8.3: - version "1.9.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" - integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + version "1.10.2" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.10.2.tgz#73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf" + integrity sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg== underscore@~1.6.0: version "1.6.0" @@ -11491,15 +12349,15 @@ unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== union-value@^1.0.0: version "1.0.1" @@ -11525,12 +12383,12 @@ dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - crypto-random-string "^1.0.0" + crypto-random-string "^2.0.0" universalify@^0.1.0: version "0.1.2" @@ -11610,12 +12468,14 @@ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" util@0.10.3: version "0.10.3" @@ -11636,10 +12496,10 @@ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -11656,6 +12516,11 @@ dependencies: builtins "^1.0.3" +validated-changeset@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/validated-changeset/-/validated-changeset-0.7.1.tgz#cb2c11c93d5acfb2286e5bfca07f4a516f83c844" + integrity sha512-BbFK98Cp7WunEwLOW/oAi6qDZZFBOLkae0q5RZ3ne8ZkwB1sskOYfF5IqQhqubwxRb4emMhA2UgN5rdfOaZxXQ== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -11671,16 +12536,16 @@ extsprintf "^1.2.0" vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - browser-process-hrtime "^0.1.2" + browser-process-hrtime "^1.0.0" walk-sync@^0.2.5: version "0.2.7" @@ -11707,6 +12572,16 @@ ensure-posix-path "^1.1.0" matcher-collection "^1.1.1" +walk-sync@^2.0.0, walk-sync@^2.0.2, walk-sync@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.2.0.tgz#80786b0657fcc8c0e1c0b1a042a09eae2966387a" + integrity sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg== + dependencies: + "@types/minimatch" "^3.0.3" + ensure-posix-path "^1.1.0" + matcher-collection "^2.0.0" + minimatch "^3.0.4" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -11714,25 +12589,33 @@ dependencies: makeerror "1.0.x" -watch-detector@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/watch-detector/-/watch-detector-0.1.0.tgz#e37b410d149e2a8bf263a4f8b71e2f667633dbf8" - integrity sha512-vfzMMfpjQc88xjETwl2HuE6PjEuxCBeyC4bQmqrHrofdfYWi/4mEJklYbNgSzpqM9PxubsiPIrE5SZ1FDyiQ2w== +watch-detector@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/watch-detector/-/watch-detector-1.0.0.tgz#c7b722d8695fee9ab6071e0f38f258e6adb22609" + integrity sha512-siywMl3fXK30Tlpu/dUBHhlpxhQmHdguZ8OIb813eU9lrVmmsJa9k0+n1HtJ+7p3SzFCPq2XbmR3GUYpPC3TBA== dependencies: - heimdalljs-logger "^0.1.9" - quick-temp "^0.1.8" - rsvp "^4.7.0" - semver "^5.4.1" - silent-error "^1.1.0" + heimdalljs-logger "^0.1.10" + semver "^6.3.0" + silent-error "^1.1.1" + tmp "^0.1.0" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" watchpack@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" wcwidth@^1.0.1: version "1.0.1" @@ -11785,18 +12668,18 @@ webpack-sources "^1.3.0" websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" @@ -11811,18 +12694,56 @@ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-module@^1.0.0: +which-boxed-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz#cbe8f838ebe91ba2471bb69e9edbda67ab5a5ec1" + integrity sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ== + dependencies: + is-bigint "^1.0.0" + is-boolean-object "^1.0.0" + is-number-object "^1.0.3" + is-string "^1.0.4" + is-symbol "^1.0.2" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-pm-runs@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + +which-typed-array@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2" + integrity sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ== + dependencies: + available-typed-arrays "^1.0.2" + es-abstract "^1.17.5" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" @@ -11831,6 +12752,13 @@ dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -11838,12 +12766,17 @@ dependencies: string-width "^1.0.2 || 2" -wordwrap@~0.0.2: +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrap@~1.0.0: +wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= @@ -11862,7 +12795,7 @@ dependencies: object-assign "4.1.1" -workerpool@^3.1.1, workerpool@^3.1.2: +workerpool@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-3.1.2.tgz#b34e79243647decb174b7481ab5b351dc565c426" integrity sha512-WJFA0dGqIK7qj7xPTqciWBH5DlJQzoPjsANvc3Y4hNB0SScT+Emjvt0jPPkDBUjBNngX1q9hHgt1Gfwytu6pug== @@ -11871,35 +12804,43 @@ object-assign "4.1.1" rsvp "^4.8.4" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= +workerpool@^5.0.1, workerpool@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-5.0.4.tgz#4f67cb70ff7550a27ab94de25b0b843cd92059a2" + integrity sha512-Sywova24Ow2NQ24JPB68bI89EdqMDjUXo4OpofK/QMD7C2ZVMloYBgQ5J3PChcBJHj2vspsmGx1/3nBKXtUkXQ== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" write@1.0.3: version "1.0.3" @@ -11915,6 +12856,11 @@ dependencies: async-limiter "~1.0.0" +ws@^7.1.2: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + ws@~6.1.0: version "6.1.4" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" @@ -11922,10 +12868,10 @@ dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xml-name-validator@^3.0.0: version "3.0.0" @@ -11933,30 +12879,32 @@ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlchars@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.1.1.tgz#ef1a81c05bff629c2280007f12daca21bd6f6c93" - integrity sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w== + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xmldom@^0.1.19: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= + version "0.1.31" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" + integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +xregexp@^4.2.4: + version "4.3.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -11972,10 +12920,10 @@ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.0, yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yam@^1.0.0: version "1.0.0" @@ -11985,31 +12933,59 @@ fs-extra "^4.0.2" lodash.merge "^4.6.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" +yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.3.1: + version "15.4.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.0.tgz#53949fb768309bac1843de9b17b80051e9805ec2" + integrity sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw== + dependencies: + cliui "^6.0.0" + decamelize "^3.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" yeast@0.1.2: version "0.1.2" diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -// Package awserr represents API error interface accessors for the SDK. -package awserr - -// An Error wraps lower level errors with code, message and an original error. -// The underlying concrete error type may also satisfy other interfaces which -// can be to used to obtain more specific information about the error. -// -// Calling Error() or String() will always include the full information about -// an error based on its underlying type. -// -// Example: -// -// output, err := s3manage.Upload(svc, input, opts) -// if err != nil { -// if awsErr, ok := err.(awserr.Error); ok { -// // Get error details -// log.Println("Error:", awsErr.Code(), awsErr.Message()) -// -// // Prints out full error message, including original error if there was one. -// log.Println("Error:", awsErr.Error()) -// -// // Get original error -// if origErr := awsErr.OrigErr(); origErr != nil { -// // operate on original error. -// } -// } else { -// fmt.Println(err.Error()) -// } -// } -// -type Error interface { - // Satisfy the generic error interface. - error - - // Returns the short phrase depicting the classification of the error. - Code() string - - // Returns the error details message. - Message() string - - // Returns the original error if one was set. Nil is returned if not set. - OrigErr() error -} - -// BatchError is a batch of errors which also wraps lower level errors with -// code, message, and original errors. Calling Error() will include all errors -// that occurred in the batch. -// -// Deprecated: Replaced with BatchedErrors. Only defined for backwards -// compatibility. -type BatchError interface { - // Satisfy the generic error interface. - error - - // Returns the short phrase depicting the classification of the error. - Code() string - - // Returns the error details message. - Message() string - - // Returns the original error if one was set. Nil is returned if not set. - OrigErrs() []error -} - -// BatchedErrors is a batch of errors which also wraps lower level errors with -// code, message, and original errors. Calling Error() will include all errors -// that occurred in the batch. -// -// Replaces BatchError -type BatchedErrors interface { - // Satisfy the base Error interface. - Error - - // Returns the original error if one was set. Nil is returned if not set. - OrigErrs() []error -} - -// New returns an Error object described by the code, message, and origErr. -// -// If origErr satisfies the Error interface it will not be wrapped within a new -// Error object and will instead be returned. -func New(code, message string, origErr error) Error { - var errs []error - if origErr != nil { - errs = append(errs, origErr) - } - return newBaseError(code, message, errs) -} - -// NewBatchError returns an BatchedErrors with a collection of errors as an -// array of errors. -func NewBatchError(code, message string, errs []error) BatchedErrors { - return newBaseError(code, message, errs) -} - -// A RequestFailure is an interface to extract request failure information from -// an Error such as the request ID of the failed request returned by a service. -// RequestFailures may not always have a requestID value if the request failed -// prior to reaching the service such as a connection error. -// -// Example: -// -// output, err := s3manage.Upload(svc, input, opts) -// if err != nil { -// if reqerr, ok := err.(RequestFailure); ok { -// log.Println("Request failed", reqerr.Code(), reqerr.Message(), reqerr.RequestID()) -// } else { -// log.Println("Error:", err.Error()) -// } -// } -// -// Combined with awserr.Error: -// -// output, err := s3manage.Upload(svc, input, opts) -// if err != nil { -// if awsErr, ok := err.(awserr.Error); ok { -// // Generic AWS Error with Code, Message, and original error (if any) -// fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) -// -// if reqErr, ok := err.(awserr.RequestFailure); ok { -// // A service error occurred -// fmt.Println(reqErr.StatusCode(), reqErr.RequestID()) -// } -// } else { -// fmt.Println(err.Error()) -// } -// } -// -type RequestFailure interface { - Error - - // The status code of the HTTP response. - StatusCode() int - - // The request ID returned by the service for a request failure. This will - // be empty if no request ID is available such as the request failed due - // to a connection error. - RequestID() string -} - -// NewRequestFailure returns a wrapped error with additional information for -// request status code, and service requestID. -// -// Should be used to wrap all request which involve service requests. Even if -// the request failed without a service response, but had an HTTP status code -// that may be meaningful. -func NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure { - return newRequestError(err, statusCode, reqID) -} - -// UnmarshalError provides the interface for the SDK failing to unmarshal data. -type UnmarshalError interface { - awsError - Bytes() []byte -} - -// NewUnmarshalError returns an initialized UnmarshalError error wrapper adding -// the bytes that fail to unmarshal to the error. -func NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalError { - return &unmarshalError{ - awsError: New("UnmarshalError", msg, err), - bytes: bytes, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -package awserr - -import ( - "encoding/hex" - "fmt" -) - -// SprintError returns a string of the formatted error code. -// -// Both extra and origErr are optional. If they are included their lines -// will be added, but if they are not included their lines will be ignored. -func SprintError(code, message, extra string, origErr error) string { - msg := fmt.Sprintf("%s: %s", code, message) - if extra != "" { - msg = fmt.Sprintf("%s\n\t%s", msg, extra) - } - if origErr != nil { - msg = fmt.Sprintf("%s\ncaused by: %s", msg, origErr.Error()) - } - return msg -} - -// A baseError wraps the code and message which defines an error. It also -// can be used to wrap an original error object. -// -// Should be used as the root for errors satisfying the awserr.Error. Also -// for any error which does not fit into a specific error wrapper type. -type baseError struct { - // Classification of error - code string - - // Detailed information about error - message string - - // Optional original error this error is based off of. Allows building - // chained errors. - errs []error -} - -// newBaseError returns an error object for the code, message, and errors. -// -// code is a short no whitespace phrase depicting the classification of -// the error that is being created. -// -// message is the free flow string containing detailed information about the -// error. -// -// origErrs is the error objects which will be nested under the new errors to -// be returned. -func newBaseError(code, message string, origErrs []error) *baseError { - b := &baseError{ - code: code, - message: message, - errs: origErrs, - } - - return b -} - -// Error returns the string representation of the error. -// -// See ErrorWithExtra for formatting. -// -// Satisfies the error interface. -func (b baseError) Error() string { - size := len(b.errs) - if size > 0 { - return SprintError(b.code, b.message, "", errorList(b.errs)) - } - - return SprintError(b.code, b.message, "", nil) -} - -// String returns the string representation of the error. -// Alias for Error to satisfy the stringer interface. -func (b baseError) String() string { - return b.Error() -} - -// Code returns the short phrase depicting the classification of the error. -func (b baseError) Code() string { - return b.code -} - -// Message returns the error details message. -func (b baseError) Message() string { - return b.message -} - -// OrigErr returns the original error if one was set. Nil is returned if no -// error was set. This only returns the first element in the list. If the full -// list is needed, use BatchedErrors. -func (b baseError) OrigErr() error { - switch len(b.errs) { - case 0: - return nil - case 1: - return b.errs[0] - default: - if err, ok := b.errs[0].(Error); ok { - return NewBatchError(err.Code(), err.Message(), b.errs[1:]) - } - return NewBatchError("BatchedErrors", - "multiple errors occurred", b.errs) - } -} - -// OrigErrs returns the original errors if one was set. An empty slice is -// returned if no error was set. -func (b baseError) OrigErrs() []error { - return b.errs -} - -// So that the Error interface type can be included as an anonymous field -// in the requestError struct and not conflict with the error.Error() method. -type awsError Error - -// A requestError wraps a request or service error. -// -// Composed of baseError for code, message, and original error. -type requestError struct { - awsError - statusCode int - requestID string - bytes []byte -} - -// newRequestError returns a wrapped error with additional information for -// request status code, and service requestID. -// -// Should be used to wrap all request which involve service requests. Even if -// the request failed without a service response, but had an HTTP status code -// that may be meaningful. -// -// Also wraps original errors via the baseError. -func newRequestError(err Error, statusCode int, requestID string) *requestError { - return &requestError{ - awsError: err, - statusCode: statusCode, - requestID: requestID, - } -} - -// Error returns the string representation of the error. -// Satisfies the error interface. -func (r requestError) Error() string { - extra := fmt.Sprintf("status code: %d, request id: %s", - r.statusCode, r.requestID) - return SprintError(r.Code(), r.Message(), extra, r.OrigErr()) -} - -// String returns the string representation of the error. -// Alias for Error to satisfy the stringer interface. -func (r requestError) String() string { - return r.Error() -} - -// StatusCode returns the wrapped status code for the error -func (r requestError) StatusCode() int { - return r.statusCode -} - -// RequestID returns the wrapped requestID -func (r requestError) RequestID() string { - return r.requestID -} - -// OrigErrs returns the original errors if one was set. An empty slice is -// returned if no error was set. -func (r requestError) OrigErrs() []error { - if b, ok := r.awsError.(BatchedErrors); ok { - return b.OrigErrs() - } - return []error{r.OrigErr()} -} - -type unmarshalError struct { - awsError - bytes []byte -} - -// Error returns the string representation of the error. -// Satisfies the error interface. -func (e unmarshalError) Error() string { - extra := hex.Dump(e.bytes) - return SprintError(e.Code(), e.Message(), extra, e.OrigErr()) -} - -// String returns the string representation of the error. -// Alias for Error to satisfy the stringer interface. -func (e unmarshalError) String() string { - return e.Error() -} - -// Bytes returns the bytes that failed to unmarshal. -func (e unmarshalError) Bytes() []byte { - return e.bytes -} - -// An error list that satisfies the golang interface -type errorList []error - -// Error returns the string representation of the error. -// -// Satisfies the error interface. -func (e errorList) Error() string { - msg := "" - // How do we want to handle the array size being zero - if size := len(e); size > 0 { - for i := 0; i < size; i++ { - msg += e[i].Error() - // We check the next index to see if it is within the slice. - // If it is, then we append a newline. We do this, because unit tests - // could be broken with the additional '\n' - if i+1 < size { - msg += "\n" - } - } - } - return msg -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -package awsutil - -import ( - "io" - "reflect" - "time" -) - -// Copy deeply copies a src structure to dst. Useful for copying request and -// response structures. -// -// Can copy between structs of different type, but will only copy fields which -// are assignable, and exist in both structs. Fields which are not assignable, -// or do not exist in both structs are ignored. -func Copy(dst, src interface{}) { - dstval := reflect.ValueOf(dst) - if !dstval.IsValid() { - panic("Copy dst cannot be nil") - } - - rcopy(dstval, reflect.ValueOf(src), true) -} - -// CopyOf returns a copy of src while also allocating the memory for dst. -// src must be a pointer type or this operation will fail. -func CopyOf(src interface{}) (dst interface{}) { - dsti := reflect.New(reflect.TypeOf(src).Elem()) - dst = dsti.Interface() - rcopy(dsti, reflect.ValueOf(src), true) - return -} - -// rcopy performs a recursive copy of values from the source to destination. -// -// root is used to skip certain aspects of the copy which are not valid -// for the root node of a object. -func rcopy(dst, src reflect.Value, root bool) { - if !src.IsValid() { - return - } - - switch src.Kind() { - case reflect.Ptr: - if _, ok := src.Interface().(io.Reader); ok { - if dst.Kind() == reflect.Ptr && dst.Elem().CanSet() { - dst.Elem().Set(src) - } else if dst.CanSet() { - dst.Set(src) - } - } else { - e := src.Type().Elem() - if dst.CanSet() && !src.IsNil() { - if _, ok := src.Interface().(*time.Time); !ok { - dst.Set(reflect.New(e)) - } else { - tempValue := reflect.New(e) - tempValue.Elem().Set(src.Elem()) - // Sets time.Time's unexported values - dst.Set(tempValue) - } - } - if src.Elem().IsValid() { - // Keep the current root state since the depth hasn't changed - rcopy(dst.Elem(), src.Elem(), root) - } - } - case reflect.Struct: - t := dst.Type() - for i := 0; i < t.NumField(); i++ { - name := t.Field(i).Name - srcVal := src.FieldByName(name) - dstVal := dst.FieldByName(name) - if srcVal.IsValid() && dstVal.CanSet() { - rcopy(dstVal, srcVal, false) - } - } - case reflect.Slice: - if src.IsNil() { - break - } - - s := reflect.MakeSlice(src.Type(), src.Len(), src.Cap()) - dst.Set(s) - for i := 0; i < src.Len(); i++ { - rcopy(dst.Index(i), src.Index(i), false) - } - case reflect.Map: - if src.IsNil() { - break - } - - s := reflect.MakeMap(src.Type()) - dst.Set(s) - for _, k := range src.MapKeys() { - v := src.MapIndex(k) - v2 := reflect.New(v.Type()).Elem() - rcopy(v2, v, false) - dst.SetMapIndex(k, v2) - } - default: - // Assign the value if possible. If its not assignable, the value would - // need to be converted and the impact of that may be unexpected, or is - // not compatible with the dst type. - if src.Type().AssignableTo(dst.Type()) { - dst.Set(src) - } - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -package awsutil - -import ( - "reflect" -) - -// DeepEqual returns if the two values are deeply equal like reflect.DeepEqual. -// In addition to this, this method will also dereference the input values if -// possible so the DeepEqual performed will not fail if one parameter is a -// pointer and the other is not. -// -// DeepEqual will not perform indirection of nested values of the input parameters. -func DeepEqual(a, b interface{}) bool { - ra := reflect.Indirect(reflect.ValueOf(a)) - rb := reflect.Indirect(reflect.ValueOf(b)) - - if raValid, rbValid := ra.IsValid(), rb.IsValid(); !raValid && !rbValid { - // If the elements are both nil, and of the same type they are equal - // If they are of different types they are not equal - return reflect.TypeOf(a) == reflect.TypeOf(b) - } else if raValid != rbValid { - // Both values must be valid to be equal - return false - } - - return reflect.DeepEqual(ra.Interface(), rb.Interface()) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -package awsutil - -import ( - "reflect" - "regexp" - "strconv" - "strings" - - "github.com/jmespath/go-jmespath" -) - -var indexRe = regexp.MustCompile(`(.+)\[(-?\d+)?\]$`) - -// rValuesAtPath returns a slice of values found in value v. The values -// in v are explored recursively so all nested values are collected. -func rValuesAtPath(v interface{}, path string, createPath, caseSensitive, nilTerm bool) []reflect.Value { - pathparts := strings.Split(path, "||") - if len(pathparts) > 1 { - for _, pathpart := range pathparts { - vals := rValuesAtPath(v, pathpart, createPath, caseSensitive, nilTerm) - if len(vals) > 0 { - return vals - } - } - return nil - } - - values := []reflect.Value{reflect.Indirect(reflect.ValueOf(v))} - components := strings.Split(path, ".") - for len(values) > 0 && len(components) > 0 { - var index *int64 - var indexStar bool - c := strings.TrimSpace(components[0]) - if c == "" { // no actual component, illegal syntax - return nil - } else if caseSensitive && c != "*" && strings.ToLower(c[0:1]) == c[0:1] { - // TODO normalize case for user - return nil // don't support unexported fields - } - - // parse this component - if m := indexRe.FindStringSubmatch(c); m != nil { - c = m[1] - if m[2] == "" { - index = nil - indexStar = true - } else { - i, _ := strconv.ParseInt(m[2], 10, 32) - index = &i - indexStar = false - } - } - - nextvals := []reflect.Value{} - for _, value := range values { - // pull component name out of struct member - if value.Kind() != reflect.Struct { - continue - } - - if c == "*" { // pull all members - for i := 0; i < value.NumField(); i++ { - if f := reflect.Indirect(value.Field(i)); f.IsValid() { - nextvals = append(nextvals, f) - } - } - continue - } - - value = value.FieldByNameFunc(func(name string) bool { - if c == name { - return true - } else if !caseSensitive && strings.EqualFold(name, c) { - return true - } - return false - }) - - if nilTerm && value.Kind() == reflect.Ptr && len(components[1:]) == 0 { - if !value.IsNil() { - value.Set(reflect.Zero(value.Type())) - } - return []reflect.Value{value} - } - - if createPath && value.Kind() == reflect.Ptr && value.IsNil() { - // TODO if the value is the terminus it should not be created - // if the value to be set to its position is nil. - value.Set(reflect.New(value.Type().Elem())) - value = value.Elem() - } else { - value = reflect.Indirect(value) - } - - if value.Kind() == reflect.Slice || value.Kind() == reflect.Map { - if !createPath && value.IsNil() { - value = reflect.ValueOf(nil) - } - } - - if value.IsValid() { - nextvals = append(nextvals, value) - } - } - values = nextvals - - if indexStar || index != nil { - nextvals = []reflect.Value{} - for _, valItem := range values { - value := reflect.Indirect(valItem) - if value.Kind() != reflect.Slice { - continue - } - - if indexStar { // grab all indices - for i := 0; i < value.Len(); i++ { - idx := reflect.Indirect(value.Index(i)) - if idx.IsValid() { - nextvals = append(nextvals, idx) - } - } - continue - } - - // pull out index - i := int(*index) - if i >= value.Len() { // check out of bounds - if createPath { - // TODO resize slice - } else { - continue - } - } else if i < 0 { // support negative indexing - i = value.Len() + i - } - value = reflect.Indirect(value.Index(i)) - - if value.Kind() == reflect.Slice || value.Kind() == reflect.Map { - if !createPath && value.IsNil() { - value = reflect.ValueOf(nil) - } - } - - if value.IsValid() { - nextvals = append(nextvals, value) - } - } - values = nextvals - } - - components = components[1:] - } - return values -} - -// ValuesAtPath returns a list of values at the case insensitive lexical -// path inside of a structure. -func ValuesAtPath(i interface{}, path string) ([]interface{}, error) { - result, err := jmespath.Search(path, i) - if err != nil { - return nil, err - } - - v := reflect.ValueOf(result) - if !v.IsValid() || (v.Kind() == reflect.Ptr && v.IsNil()) { - return nil, nil - } - if s, ok := result.([]interface{}); ok { - return s, err - } - if v.Kind() == reflect.Map && v.Len() == 0 { - return nil, nil - } - if v.Kind() == reflect.Slice { - out := make([]interface{}, v.Len()) - for i := 0; i < v.Len(); i++ { - out[i] = v.Index(i).Interface() - } - return out, nil - } - - return []interface{}{result}, nil -} - -// SetValueAtPath sets a value at the case insensitive lexical path inside -// of a structure. -func SetValueAtPath(i interface{}, path string, v interface{}) { - rvals := rValuesAtPath(i, path, true, false, v == nil) - for _, rval := range rvals { - if rval.Kind() == reflect.Ptr && rval.IsNil() { - continue - } - setValue(rval, v) - } -} - -func setValue(dstVal reflect.Value, src interface{}) { - if dstVal.Kind() == reflect.Ptr { - dstVal = reflect.Indirect(dstVal) - } - srcVal := reflect.ValueOf(src) - - if !srcVal.IsValid() { // src is literal nil - if dstVal.CanAddr() { - // Convert to pointer so that pointer's value can be nil'ed - // dstVal = dstVal.Addr() - } - dstVal.Set(reflect.Zero(dstVal.Type())) - - } else if srcVal.Kind() == reflect.Ptr { - if srcVal.IsNil() { - srcVal = reflect.Zero(dstVal.Type()) - } else { - srcVal = reflect.ValueOf(src).Elem() - } - dstVal.Set(srcVal) - } else { - dstVal.Set(srcVal) - } - -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -package awsutil - -import ( - "bytes" - "fmt" - "io" - "reflect" - "strings" -) - -// Prettify returns the string representation of a value. -func Prettify(i interface{}) string { - var buf bytes.Buffer - prettify(reflect.ValueOf(i), 0, &buf) - return buf.String() -} - -// prettify will recursively walk value v to build a textual -// representation of the value. -func prettify(v reflect.Value, indent int, buf *bytes.Buffer) { - for v.Kind() == reflect.Ptr { - v = v.Elem() - } - - switch v.Kind() { - case reflect.Struct: - strtype := v.Type().String() - if strtype == "time.Time" { - fmt.Fprintf(buf, "%s", v.Interface()) - break - } else if strings.HasPrefix(strtype, "io.") { - buf.WriteString("") - break - } - - buf.WriteString("{\n") - - names := []string{} - for i := 0; i < v.Type().NumField(); i++ { - name := v.Type().Field(i).Name - f := v.Field(i) - if name[0:1] == strings.ToLower(name[0:1]) { - continue // ignore unexported fields - } - if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice || f.Kind() == reflect.Map) && f.IsNil() { - continue // ignore unset fields - } - names = append(names, name) - } - - for i, n := range names { - val := v.FieldByName(n) - buf.WriteString(strings.Repeat(" ", indent+2)) - buf.WriteString(n + ": ") - prettify(val, indent+2, buf) - - if i < len(names)-1 { - buf.WriteString(",\n") - } - } - - buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") - case reflect.Slice: - strtype := v.Type().String() - if strtype == "[]uint8" { - fmt.Fprintf(buf, " len %d", v.Len()) - break - } - - nl, id, id2 := "", "", "" - if v.Len() > 3 { - nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2) - } - buf.WriteString("[" + nl) - for i := 0; i < v.Len(); i++ { - buf.WriteString(id2) - prettify(v.Index(i), indent+2, buf) - - if i < v.Len()-1 { - buf.WriteString("," + nl) - } - } - - buf.WriteString(nl + id + "]") - case reflect.Map: - buf.WriteString("{\n") - - for i, k := range v.MapKeys() { - buf.WriteString(strings.Repeat(" ", indent+2)) - buf.WriteString(k.String() + ": ") - prettify(v.MapIndex(k), indent+2, buf) - - if i < v.Len()-1 { - buf.WriteString(",\n") - } - } - - buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") - default: - if !v.IsValid() { - fmt.Fprint(buf, "") - return - } - format := "%v" - switch v.Interface().(type) { - case string: - format = "%q" - case io.ReadSeeker, io.Reader: - format = "buffer(%p)" - } - fmt.Fprintf(buf, format, v.Interface()) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -package awsutil - -import ( - "bytes" - "fmt" - "reflect" - "strings" -) - -// StringValue returns the string representation of a value. -func StringValue(i interface{}) string { - var buf bytes.Buffer - stringValue(reflect.ValueOf(i), 0, &buf) - return buf.String() -} - -func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) { - for v.Kind() == reflect.Ptr { - v = v.Elem() - } - - switch v.Kind() { - case reflect.Struct: - buf.WriteString("{\n") - - for i := 0; i < v.Type().NumField(); i++ { - ft := v.Type().Field(i) - fv := v.Field(i) - - if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) { - continue // ignore unexported fields - } - if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() { - continue // ignore unset fields - } - - buf.WriteString(strings.Repeat(" ", indent+2)) - buf.WriteString(ft.Name + ": ") - - if tag := ft.Tag.Get("sensitive"); tag == "true" { - buf.WriteString("") - } else { - stringValue(fv, indent+2, buf) - } - - buf.WriteString(",\n") - } - - buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") - case reflect.Slice: - nl, id, id2 := "", "", "" - if v.Len() > 3 { - nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2) - } - buf.WriteString("[" + nl) - for i := 0; i < v.Len(); i++ { - buf.WriteString(id2) - stringValue(v.Index(i), indent+2, buf) - - if i < v.Len()-1 { - buf.WriteString("," + nl) - } - } - - buf.WriteString(nl + id + "]") - case reflect.Map: - buf.WriteString("{\n") - - for i, k := range v.MapKeys() { - buf.WriteString(strings.Repeat(" ", indent+2)) - buf.WriteString(k.String() + ": ") - stringValue(v.MapIndex(k), indent+2, buf) - - if i < v.Len()-1 { - buf.WriteString(",\n") - } - } - - buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") - default: - format := "%v" - switch v.Interface().(type) { - case string: - format = "%q" - } - fmt.Fprintf(buf, format, v.Interface()) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/client.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/client.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/client.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -package client - -import ( - "fmt" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/request" -) - -// A Config provides configuration to a service client instance. -type Config struct { - Config *aws.Config - Handlers request.Handlers - PartitionID string - Endpoint string - SigningRegion string - SigningName string - - // States that the signing name did not come from a modeled source but - // was derived based on other data. Used by service client constructors - // to determine if the signin name can be overridden based on metadata the - // service has. - SigningNameDerived bool -} - -// ConfigProvider provides a generic way for a service client to receive -// the ClientConfig without circular dependencies. -type ConfigProvider interface { - ClientConfig(serviceName string, cfgs ...*aws.Config) Config -} - -// ConfigNoResolveEndpointProvider same as ConfigProvider except it will not -// resolve the endpoint automatically. The service client's endpoint must be -// provided via the aws.Config.Endpoint field. -type ConfigNoResolveEndpointProvider interface { - ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) Config -} - -// A Client implements the base client request and response handling -// used by all service clients. -type Client struct { - request.Retryer - metadata.ClientInfo - - Config aws.Config - Handlers request.Handlers -} - -// New will return a pointer to a new initialized service client. -func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, options ...func(*Client)) *Client { - svc := &Client{ - Config: cfg, - ClientInfo: info, - Handlers: handlers.Copy(), - } - - switch retryer, ok := cfg.Retryer.(request.Retryer); { - case ok: - svc.Retryer = retryer - case cfg.Retryer != nil && cfg.Logger != nil: - s := fmt.Sprintf("WARNING: %T does not implement request.Retryer; using DefaultRetryer instead", cfg.Retryer) - cfg.Logger.Log(s) - fallthrough - default: - maxRetries := aws.IntValue(cfg.MaxRetries) - if cfg.MaxRetries == nil || maxRetries == aws.UseServiceDefaultRetries { - maxRetries = DefaultRetryerMaxNumRetries - } - svc.Retryer = DefaultRetryer{NumMaxRetries: maxRetries} - } - - svc.AddDebugHandlers() - - for _, option := range options { - option(svc) - } - - return svc -} - -// NewRequest returns a new Request pointer for the service API -// operation and parameters. -func (c *Client) NewRequest(operation *request.Operation, params interface{}, data interface{}) *request.Request { - return request.New(c.Config, c.ClientInfo, c.Handlers, c.Retryer, operation, params, data) -} - -// AddDebugHandlers injects debug logging handlers into the service to log request -// debug information. -func (c *Client) AddDebugHandlers() { - if !c.Config.LogLevel.AtLeast(aws.LogDebug) { - return - } - - c.Handlers.Send.PushFrontNamed(LogHTTPRequestHandler) - c.Handlers.Send.PushBackNamed(LogHTTPResponseHandler) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -package client - -import ( - "math" - "strconv" - "time" - - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/internal/sdkrand" -) - -// DefaultRetryer implements basic retry logic using exponential backoff for -// most services. If you want to implement custom retry logic, you can implement the -// request.Retryer interface. -// -type DefaultRetryer struct { - // Num max Retries is the number of max retries that will be performed. - // By default, this is zero. - NumMaxRetries int - - // MinRetryDelay is the minimum retry delay after which retry will be performed. - // If not set, the value is 0ns. - MinRetryDelay time.Duration - - // MinThrottleRetryDelay is the minimum retry delay when throttled. - // If not set, the value is 0ns. - MinThrottleDelay time.Duration - - // MaxRetryDelay is the maximum retry delay before which retry must be performed. - // If not set, the value is 0ns. - MaxRetryDelay time.Duration - - // MaxThrottleDelay is the maximum retry delay when throttled. - // If not set, the value is 0ns. - MaxThrottleDelay time.Duration -} - -const ( - // DefaultRetryerMaxNumRetries sets maximum number of retries - DefaultRetryerMaxNumRetries = 3 - - // DefaultRetryerMinRetryDelay sets minimum retry delay - DefaultRetryerMinRetryDelay = 30 * time.Millisecond - - // DefaultRetryerMinThrottleDelay sets minimum delay when throttled - DefaultRetryerMinThrottleDelay = 500 * time.Millisecond - - // DefaultRetryerMaxRetryDelay sets maximum retry delay - DefaultRetryerMaxRetryDelay = 300 * time.Second - - // DefaultRetryerMaxThrottleDelay sets maximum delay when throttled - DefaultRetryerMaxThrottleDelay = 300 * time.Second -) - -// MaxRetries returns the number of maximum returns the service will use to make -// an individual API request. -func (d DefaultRetryer) MaxRetries() int { - return d.NumMaxRetries -} - -// setRetryerDefaults sets the default values of the retryer if not set -func (d *DefaultRetryer) setRetryerDefaults() { - if d.MinRetryDelay == 0 { - d.MinRetryDelay = DefaultRetryerMinRetryDelay - } - if d.MaxRetryDelay == 0 { - d.MaxRetryDelay = DefaultRetryerMaxRetryDelay - } - if d.MinThrottleDelay == 0 { - d.MinThrottleDelay = DefaultRetryerMinThrottleDelay - } - if d.MaxThrottleDelay == 0 { - d.MaxThrottleDelay = DefaultRetryerMaxThrottleDelay - } -} - -// RetryRules returns the delay duration before retrying this request again -func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration { - - // if number of max retries is zero, no retries will be performed. - if d.NumMaxRetries == 0 { - return 0 - } - - // Sets default value for retryer members - d.setRetryerDefaults() - - // minDelay is the minimum retryer delay - minDelay := d.MinRetryDelay - - var initialDelay time.Duration - - isThrottle := r.IsErrorThrottle() - if isThrottle { - if delay, ok := getRetryAfterDelay(r); ok { - initialDelay = delay - } - minDelay = d.MinThrottleDelay - } - - retryCount := r.RetryCount - - // maxDelay the maximum retryer delay - maxDelay := d.MaxRetryDelay - - if isThrottle { - maxDelay = d.MaxThrottleDelay - } - - var delay time.Duration - - // Logic to cap the retry count based on the minDelay provided - actualRetryCount := int(math.Log2(float64(minDelay))) + 1 - if actualRetryCount < 63-retryCount { - delay = time.Duration(1< maxDelay { - delay = getJitterDelay(maxDelay / 2) - } - } else { - delay = getJitterDelay(maxDelay / 2) - } - return delay + initialDelay -} - -// getJitterDelay returns a jittered delay for retry -func getJitterDelay(duration time.Duration) time.Duration { - return time.Duration(sdkrand.SeededRand.Int63n(int64(duration)) + int64(duration)) -} - -// ShouldRetry returns true if the request should be retried. -func (d DefaultRetryer) ShouldRetry(r *request.Request) bool { - - // ShouldRetry returns false if number of max retries is 0. - if d.NumMaxRetries == 0 { - return false - } - - // If one of the other handlers already set the retry state - // we don't want to override it based on the service's state - if r.Retryable != nil { - return *r.Retryable - } - return r.IsErrorRetryable() || r.IsErrorThrottle() -} - -// This will look in the Retry-After header, RFC 7231, for how long -// it will wait before attempting another request -func getRetryAfterDelay(r *request.Request) (time.Duration, bool) { - if !canUseRetryAfterHeader(r) { - return 0, false - } - - delayStr := r.HTTPResponse.Header.Get("Retry-After") - if len(delayStr) == 0 { - return 0, false - } - - delay, err := strconv.Atoi(delayStr) - if err != nil { - return 0, false - } - - return time.Duration(delay) * time.Second, true -} - -// Will look at the status code to see if the retry header pertains to -// the status code. -func canUseRetryAfterHeader(r *request.Request) bool { - switch r.HTTPResponse.StatusCode { - case 429: - case 503: - default: - return false - } - - return true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,194 +0,0 @@ -package client - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "net/http/httputil" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" -) - -const logReqMsg = `DEBUG: Request %s/%s Details: ----[ REQUEST POST-SIGN ]----------------------------- -%s ------------------------------------------------------` - -const logReqErrMsg = `DEBUG ERROR: Request %s/%s: ----[ REQUEST DUMP ERROR ]----------------------------- -%s -------------------------------------------------------` - -type logWriter struct { - // Logger is what we will use to log the payload of a response. - Logger aws.Logger - // buf stores the contents of what has been read - buf *bytes.Buffer -} - -func (logger *logWriter) Write(b []byte) (int, error) { - return logger.buf.Write(b) -} - -type teeReaderCloser struct { - // io.Reader will be a tee reader that is used during logging. - // This structure will read from a body and write the contents to a logger. - io.Reader - // Source is used just to close when we are done reading. - Source io.ReadCloser -} - -func (reader *teeReaderCloser) Close() error { - return reader.Source.Close() -} - -// LogHTTPRequestHandler is a SDK request handler to log the HTTP request sent -// to a service. Will include the HTTP request body if the LogLevel of the -// request matches LogDebugWithHTTPBody. -var LogHTTPRequestHandler = request.NamedHandler{ - Name: "awssdk.client.LogRequest", - Fn: logRequest, -} - -func logRequest(r *request.Request) { - logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) - bodySeekable := aws.IsReaderSeekable(r.Body) - - b, err := httputil.DumpRequestOut(r.HTTPRequest, logBody) - if err != nil { - r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, - r.ClientInfo.ServiceName, r.Operation.Name, err)) - return - } - - if logBody { - if !bodySeekable { - r.SetReaderBody(aws.ReadSeekCloser(r.HTTPRequest.Body)) - } - // Reset the request body because dumpRequest will re-wrap the - // r.HTTPRequest's Body as a NoOpCloser and will not be reset after - // read by the HTTP client reader. - if err := r.Error; err != nil { - r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, - r.ClientInfo.ServiceName, r.Operation.Name, err)) - return - } - } - - r.Config.Logger.Log(fmt.Sprintf(logReqMsg, - r.ClientInfo.ServiceName, r.Operation.Name, string(b))) -} - -// LogHTTPRequestHeaderHandler is a SDK request handler to log the HTTP request sent -// to a service. Will only log the HTTP request's headers. The request payload -// will not be read. -var LogHTTPRequestHeaderHandler = request.NamedHandler{ - Name: "awssdk.client.LogRequestHeader", - Fn: logRequestHeader, -} - -func logRequestHeader(r *request.Request) { - b, err := httputil.DumpRequestOut(r.HTTPRequest, false) - if err != nil { - r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, - r.ClientInfo.ServiceName, r.Operation.Name, err)) - return - } - - r.Config.Logger.Log(fmt.Sprintf(logReqMsg, - r.ClientInfo.ServiceName, r.Operation.Name, string(b))) -} - -const logRespMsg = `DEBUG: Response %s/%s Details: ----[ RESPONSE ]-------------------------------------- -%s ------------------------------------------------------` - -const logRespErrMsg = `DEBUG ERROR: Response %s/%s: ----[ RESPONSE DUMP ERROR ]----------------------------- -%s ------------------------------------------------------` - -// LogHTTPResponseHandler is a SDK request handler to log the HTTP response -// received from a service. Will include the HTTP response body if the LogLevel -// of the request matches LogDebugWithHTTPBody. -var LogHTTPResponseHandler = request.NamedHandler{ - Name: "awssdk.client.LogResponse", - Fn: logResponse, -} - -func logResponse(r *request.Request) { - lw := &logWriter{r.Config.Logger, bytes.NewBuffer(nil)} - - if r.HTTPResponse == nil { - lw.Logger.Log(fmt.Sprintf(logRespErrMsg, - r.ClientInfo.ServiceName, r.Operation.Name, "request's HTTPResponse is nil")) - return - } - - logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) - if logBody { - r.HTTPResponse.Body = &teeReaderCloser{ - Reader: io.TeeReader(r.HTTPResponse.Body, lw), - Source: r.HTTPResponse.Body, - } - } - - handlerFn := func(req *request.Request) { - b, err := httputil.DumpResponse(req.HTTPResponse, false) - if err != nil { - lw.Logger.Log(fmt.Sprintf(logRespErrMsg, - req.ClientInfo.ServiceName, req.Operation.Name, err)) - return - } - - lw.Logger.Log(fmt.Sprintf(logRespMsg, - req.ClientInfo.ServiceName, req.Operation.Name, string(b))) - - if logBody { - b, err := ioutil.ReadAll(lw.buf) - if err != nil { - lw.Logger.Log(fmt.Sprintf(logRespErrMsg, - req.ClientInfo.ServiceName, req.Operation.Name, err)) - return - } - - lw.Logger.Log(string(b)) - } - } - - const handlerName = "awsdk.client.LogResponse.ResponseBody" - - r.Handlers.Unmarshal.SetBackNamed(request.NamedHandler{ - Name: handlerName, Fn: handlerFn, - }) - r.Handlers.UnmarshalError.SetBackNamed(request.NamedHandler{ - Name: handlerName, Fn: handlerFn, - }) -} - -// LogHTTPResponseHeaderHandler is a SDK request handler to log the HTTP -// response received from a service. Will only log the HTTP response's headers. -// The response payload will not be read. -var LogHTTPResponseHeaderHandler = request.NamedHandler{ - Name: "awssdk.client.LogResponseHeader", - Fn: logResponseHeader, -} - -func logResponseHeader(r *request.Request) { - if r.Config.Logger == nil { - return - } - - b, err := httputil.DumpResponse(r.HTTPResponse, false) - if err != nil { - r.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, - r.ClientInfo.ServiceName, r.Operation.Name, err)) - return - } - - r.Config.Logger.Log(fmt.Sprintf(logRespMsg, - r.ClientInfo.ServiceName, r.Operation.Name, string(b))) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -package metadata - -// ClientInfo wraps immutable data from the client.Client structure. -type ClientInfo struct { - ServiceName string - ServiceID string - APIVersion string - PartitionID string - Endpoint string - SigningName string - SigningRegion string - JSONVersion string - TargetPrefix string -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -package client - -import ( - "time" - - "github.com/aws/aws-sdk-go/aws/request" -) - -// NoOpRetryer provides a retryer that performs no retries. -// It should be used when we do not want retries to be performed. -type NoOpRetryer struct{} - -// MaxRetries returns the number of maximum returns the service will use to make -// an individual API; For NoOpRetryer the MaxRetries will always be zero. -func (d NoOpRetryer) MaxRetries() int { - return 0 -} - -// ShouldRetry will always return false for NoOpRetryer, as it should never retry. -func (d NoOpRetryer) ShouldRetry(_ *request.Request) bool { - return false -} - -// RetryRules returns the delay duration before retrying this request again; -// since NoOpRetryer does not retry, RetryRules always returns 0. -func (d NoOpRetryer) RetryRules(_ *request.Request) time.Duration { - return 0 -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/config.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/config.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/config.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,564 +0,0 @@ -package aws - -import ( - "net/http" - "time" - - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/endpoints" -) - -// UseServiceDefaultRetries instructs the config to use the service's own -// default number of retries. This will be the default action if -// Config.MaxRetries is nil also. -const UseServiceDefaultRetries = -1 - -// RequestRetryer is an alias for a type that implements the request.Retryer -// interface. -type RequestRetryer interface{} - -// A Config provides service configuration for service clients. By default, -// all clients will use the defaults.DefaultConfig structure. -// -// // Create Session with MaxRetries configuration to be shared by multiple -// // service clients. -// sess := session.Must(session.NewSession(&aws.Config{ -// MaxRetries: aws.Int(3), -// })) -// -// // Create S3 service client with a specific Region. -// svc := s3.New(sess, &aws.Config{ -// Region: aws.String("us-west-2"), -// }) -type Config struct { - // Enables verbose error printing of all credential chain errors. - // Should be used when wanting to see all errors while attempting to - // retrieve credentials. - CredentialsChainVerboseErrors *bool - - // The credentials object to use when signing requests. Defaults to a - // chain of credential providers to search for credentials in environment - // variables, shared credential file, and EC2 Instance Roles. - Credentials *credentials.Credentials - - // An optional endpoint URL (hostname only or fully qualified URI) - // that overrides the default generated endpoint for a client. Set this - // to `""` to use the default generated endpoint. - // - // Note: You must still provide a `Region` value when specifying an - // endpoint for a client. - Endpoint *string - - // The resolver to use for looking up endpoints for AWS service clients - // to use based on region. - EndpointResolver endpoints.Resolver - - // EnforceShouldRetryCheck is used in the AfterRetryHandler to always call - // ShouldRetry regardless of whether or not if request.Retryable is set. - // This will utilize ShouldRetry method of custom retryers. If EnforceShouldRetryCheck - // is not set, then ShouldRetry will only be called if request.Retryable is nil. - // Proper handling of the request.Retryable field is important when setting this field. - EnforceShouldRetryCheck *bool - - // The region to send requests to. This parameter is required and must - // be configured globally or on a per-client basis unless otherwise - // noted. A full list of regions is found in the "Regions and Endpoints" - // document. - // - // See http://docs.aws.amazon.com/general/latest/gr/rande.html for AWS - // Regions and Endpoints. - Region *string - - // Set this to `true` to disable SSL when sending requests. Defaults - // to `false`. - DisableSSL *bool - - // The HTTP client to use when sending requests. Defaults to - // `http.DefaultClient`. - HTTPClient *http.Client - - // An integer value representing the logging level. The default log level - // is zero (LogOff), which represents no logging. To enable logging set - // to a LogLevel Value. - LogLevel *LogLevelType - - // The logger writer interface to write logging messages to. Defaults to - // standard out. - Logger Logger - - // The maximum number of times that a request will be retried for failures. - // Defaults to -1, which defers the max retry setting to the service - // specific configuration. - MaxRetries *int - - // Retryer guides how HTTP requests should be retried in case of - // recoverable failures. - // - // When nil or the value does not implement the request.Retryer interface, - // the client.DefaultRetryer will be used. - // - // When both Retryer and MaxRetries are non-nil, the former is used and - // the latter ignored. - // - // To set the Retryer field in a type-safe manner and with chaining, use - // the request.WithRetryer helper function: - // - // cfg := request.WithRetryer(aws.NewConfig(), myRetryer) - // - Retryer RequestRetryer - - // Disables semantic parameter validation, which validates input for - // missing required fields and/or other semantic request input errors. - DisableParamValidation *bool - - // Disables the computation of request and response checksums, e.g., - // CRC32 checksums in Amazon DynamoDB. - DisableComputeChecksums *bool - - // Set this to `true` to force the request to use path-style addressing, - // i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client - // will use virtual hosted bucket addressing when possible - // (`http://BUCKET.s3.amazonaws.com/KEY`). - // - // Note: This configuration option is specific to the Amazon S3 service. - // - // See http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html - // for Amazon S3: Virtual Hosting of Buckets - S3ForcePathStyle *bool - - // Set this to `true` to disable the SDK adding the `Expect: 100-Continue` - // header to PUT requests over 2MB of content. 100-Continue instructs the - // HTTP client not to send the body until the service responds with a - // `continue` status. This is useful to prevent sending the request body - // until after the request is authenticated, and validated. - // - // http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html - // - // 100-Continue is only enabled for Go 1.6 and above. See `http.Transport`'s - // `ExpectContinueTimeout` for information on adjusting the continue wait - // timeout. https://golang.org/pkg/net/http/#Transport - // - // You should use this flag to disble 100-Continue if you experience issues - // with proxies or third party S3 compatible services. - S3Disable100Continue *bool - - // Set this to `true` to enable S3 Accelerate feature. For all operations - // compatible with S3 Accelerate will use the accelerate endpoint for - // requests. Requests not compatible will fall back to normal S3 requests. - // - // The bucket must be enable for accelerate to be used with S3 client with - // accelerate enabled. If the bucket is not enabled for accelerate an error - // will be returned. The bucket name must be DNS compatible to also work - // with accelerate. - S3UseAccelerate *bool - - // S3DisableContentMD5Validation config option is temporarily disabled, - // For S3 GetObject API calls, #1837. - // - // Set this to `true` to disable the S3 service client from automatically - // adding the ContentMD5 to S3 Object Put and Upload API calls. This option - // will also disable the SDK from performing object ContentMD5 validation - // on GetObject API calls. - S3DisableContentMD5Validation *bool - - // Set this to `true` to disable the EC2Metadata client from overriding the - // default http.Client's Timeout. This is helpful if you do not want the - // EC2Metadata client to create a new http.Client. This options is only - // meaningful if you're not already using a custom HTTP client with the - // SDK. Enabled by default. - // - // Must be set and provided to the session.NewSession() in order to disable - // the EC2Metadata overriding the timeout for default credentials chain. - // - // Example: - // sess := session.Must(session.NewSession(aws.NewConfig() - // .WithEC2MetadataDiableTimeoutOverride(true))) - // - // svc := s3.New(sess) - // - EC2MetadataDisableTimeoutOverride *bool - - // Instructs the endpoint to be generated for a service client to - // be the dual stack endpoint. The dual stack endpoint will support - // both IPv4 and IPv6 addressing. - // - // Setting this for a service which does not support dual stack will fail - // to make requets. It is not recommended to set this value on the session - // as it will apply to all service clients created with the session. Even - // services which don't support dual stack endpoints. - // - // If the Endpoint config value is also provided the UseDualStack flag - // will be ignored. - // - // Only supported with. - // - // sess := session.Must(session.NewSession()) - // - // svc := s3.New(sess, &aws.Config{ - // UseDualStack: aws.Bool(true), - // }) - UseDualStack *bool - - // SleepDelay is an override for the func the SDK will call when sleeping - // during the lifecycle of a request. Specifically this will be used for - // request delays. This value should only be used for testing. To adjust - // the delay of a request see the aws/client.DefaultRetryer and - // aws/request.Retryer. - // - // SleepDelay will prevent any Context from being used for canceling retry - // delay of an API operation. It is recommended to not use SleepDelay at all - // and specify a Retryer instead. - SleepDelay func(time.Duration) - - // DisableRestProtocolURICleaning will not clean the URL path when making rest protocol requests. - // Will default to false. This would only be used for empty directory names in s3 requests. - // - // Example: - // sess := session.Must(session.NewSession(&aws.Config{ - // DisableRestProtocolURICleaning: aws.Bool(true), - // })) - // - // svc := s3.New(sess) - // out, err := svc.GetObject(&s3.GetObjectInput { - // Bucket: aws.String("bucketname"), - // Key: aws.String("//foo//bar//moo"), - // }) - DisableRestProtocolURICleaning *bool - - // EnableEndpointDiscovery will allow for endpoint discovery on operations that - // have the definition in its model. By default, endpoint discovery is off. - // - // Example: - // sess := session.Must(session.NewSession(&aws.Config{ - // EnableEndpointDiscovery: aws.Bool(true), - // })) - // - // svc := s3.New(sess) - // out, err := svc.GetObject(&s3.GetObjectInput { - // Bucket: aws.String("bucketname"), - // Key: aws.String("/foo/bar/moo"), - // }) - EnableEndpointDiscovery *bool - - // DisableEndpointHostPrefix will disable the SDK's behavior of prefixing - // request endpoint hosts with modeled information. - // - // Disabling this feature is useful when you want to use local endpoints - // for testing that do not support the modeled host prefix pattern. - DisableEndpointHostPrefix *bool - - // STSRegionalEndpoint will enable regional or legacy endpoint resolving - STSRegionalEndpoint endpoints.STSRegionalEndpoint - - // S3UsEast1RegionalEndpoint will enable regional or legacy endpoint resolving - S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint -} - -// NewConfig returns a new Config pointer that can be chained with builder -// methods to set multiple configuration values inline without using pointers. -// -// // Create Session with MaxRetries configuration to be shared by multiple -// // service clients. -// sess := session.Must(session.NewSession(aws.NewConfig(). -// WithMaxRetries(3), -// )) -// -// // Create S3 service client with a specific Region. -// svc := s3.New(sess, aws.NewConfig(). -// WithRegion("us-west-2"), -// ) -func NewConfig() *Config { - return &Config{} -} - -// WithCredentialsChainVerboseErrors sets a config verbose errors boolean and returning -// a Config pointer. -func (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *Config { - c.CredentialsChainVerboseErrors = &verboseErrs - return c -} - -// WithCredentials sets a config Credentials value returning a Config pointer -// for chaining. -func (c *Config) WithCredentials(creds *credentials.Credentials) *Config { - c.Credentials = creds - return c -} - -// WithEndpoint sets a config Endpoint value returning a Config pointer for -// chaining. -func (c *Config) WithEndpoint(endpoint string) *Config { - c.Endpoint = &endpoint - return c -} - -// WithEndpointResolver sets a config EndpointResolver value returning a -// Config pointer for chaining. -func (c *Config) WithEndpointResolver(resolver endpoints.Resolver) *Config { - c.EndpointResolver = resolver - return c -} - -// WithRegion sets a config Region value returning a Config pointer for -// chaining. -func (c *Config) WithRegion(region string) *Config { - c.Region = ®ion - return c -} - -// WithDisableSSL sets a config DisableSSL value returning a Config pointer -// for chaining. -func (c *Config) WithDisableSSL(disable bool) *Config { - c.DisableSSL = &disable - return c -} - -// WithHTTPClient sets a config HTTPClient value returning a Config pointer -// for chaining. -func (c *Config) WithHTTPClient(client *http.Client) *Config { - c.HTTPClient = client - return c -} - -// WithMaxRetries sets a config MaxRetries value returning a Config pointer -// for chaining. -func (c *Config) WithMaxRetries(max int) *Config { - c.MaxRetries = &max - return c -} - -// WithDisableParamValidation sets a config DisableParamValidation value -// returning a Config pointer for chaining. -func (c *Config) WithDisableParamValidation(disable bool) *Config { - c.DisableParamValidation = &disable - return c -} - -// WithDisableComputeChecksums sets a config DisableComputeChecksums value -// returning a Config pointer for chaining. -func (c *Config) WithDisableComputeChecksums(disable bool) *Config { - c.DisableComputeChecksums = &disable - return c -} - -// WithLogLevel sets a config LogLevel value returning a Config pointer for -// chaining. -func (c *Config) WithLogLevel(level LogLevelType) *Config { - c.LogLevel = &level - return c -} - -// WithLogger sets a config Logger value returning a Config pointer for -// chaining. -func (c *Config) WithLogger(logger Logger) *Config { - c.Logger = logger - return c -} - -// WithS3ForcePathStyle sets a config S3ForcePathStyle value returning a Config -// pointer for chaining. -func (c *Config) WithS3ForcePathStyle(force bool) *Config { - c.S3ForcePathStyle = &force - return c -} - -// WithS3Disable100Continue sets a config S3Disable100Continue value returning -// a Config pointer for chaining. -func (c *Config) WithS3Disable100Continue(disable bool) *Config { - c.S3Disable100Continue = &disable - return c -} - -// WithS3UseAccelerate sets a config S3UseAccelerate value returning a Config -// pointer for chaining. -func (c *Config) WithS3UseAccelerate(enable bool) *Config { - c.S3UseAccelerate = &enable - return c - -} - -// WithS3DisableContentMD5Validation sets a config -// S3DisableContentMD5Validation value returning a Config pointer for chaining. -func (c *Config) WithS3DisableContentMD5Validation(enable bool) *Config { - c.S3DisableContentMD5Validation = &enable - return c - -} - -// WithUseDualStack sets a config UseDualStack value returning a Config -// pointer for chaining. -func (c *Config) WithUseDualStack(enable bool) *Config { - c.UseDualStack = &enable - return c -} - -// WithEC2MetadataDisableTimeoutOverride sets a config EC2MetadataDisableTimeoutOverride value -// returning a Config pointer for chaining. -func (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *Config { - c.EC2MetadataDisableTimeoutOverride = &enable - return c -} - -// WithSleepDelay overrides the function used to sleep while waiting for the -// next retry. Defaults to time.Sleep. -func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config { - c.SleepDelay = fn - return c -} - -// WithEndpointDiscovery will set whether or not to use endpoint discovery. -func (c *Config) WithEndpointDiscovery(t bool) *Config { - c.EnableEndpointDiscovery = &t - return c -} - -// WithDisableEndpointHostPrefix will set whether or not to use modeled host prefix -// when making requests. -func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config { - c.DisableEndpointHostPrefix = &t - return c -} - -// MergeIn merges the passed in configs into the existing config object. -func (c *Config) MergeIn(cfgs ...*Config) { - for _, other := range cfgs { - mergeInConfig(c, other) - } -} - -// WithSTSRegionalEndpoint will set whether or not to use regional endpoint flag -// when resolving the endpoint for a service -func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndpoint) *Config { - c.STSRegionalEndpoint = sre - return c -} - -// WithS3UsEast1RegionalEndpoint will set whether or not to use regional endpoint flag -// when resolving the endpoint for a service -func (c *Config) WithS3UsEast1RegionalEndpoint(sre endpoints.S3UsEast1RegionalEndpoint) *Config { - c.S3UsEast1RegionalEndpoint = sre - return c -} - -func mergeInConfig(dst *Config, other *Config) { - if other == nil { - return - } - - if other.CredentialsChainVerboseErrors != nil { - dst.CredentialsChainVerboseErrors = other.CredentialsChainVerboseErrors - } - - if other.Credentials != nil { - dst.Credentials = other.Credentials - } - - if other.Endpoint != nil { - dst.Endpoint = other.Endpoint - } - - if other.EndpointResolver != nil { - dst.EndpointResolver = other.EndpointResolver - } - - if other.Region != nil { - dst.Region = other.Region - } - - if other.DisableSSL != nil { - dst.DisableSSL = other.DisableSSL - } - - if other.HTTPClient != nil { - dst.HTTPClient = other.HTTPClient - } - - if other.LogLevel != nil { - dst.LogLevel = other.LogLevel - } - - if other.Logger != nil { - dst.Logger = other.Logger - } - - if other.MaxRetries != nil { - dst.MaxRetries = other.MaxRetries - } - - if other.Retryer != nil { - dst.Retryer = other.Retryer - } - - if other.DisableParamValidation != nil { - dst.DisableParamValidation = other.DisableParamValidation - } - - if other.DisableComputeChecksums != nil { - dst.DisableComputeChecksums = other.DisableComputeChecksums - } - - if other.S3ForcePathStyle != nil { - dst.S3ForcePathStyle = other.S3ForcePathStyle - } - - if other.S3Disable100Continue != nil { - dst.S3Disable100Continue = other.S3Disable100Continue - } - - if other.S3UseAccelerate != nil { - dst.S3UseAccelerate = other.S3UseAccelerate - } - - if other.S3DisableContentMD5Validation != nil { - dst.S3DisableContentMD5Validation = other.S3DisableContentMD5Validation - } - - if other.UseDualStack != nil { - dst.UseDualStack = other.UseDualStack - } - - if other.EC2MetadataDisableTimeoutOverride != nil { - dst.EC2MetadataDisableTimeoutOverride = other.EC2MetadataDisableTimeoutOverride - } - - if other.SleepDelay != nil { - dst.SleepDelay = other.SleepDelay - } - - if other.DisableRestProtocolURICleaning != nil { - dst.DisableRestProtocolURICleaning = other.DisableRestProtocolURICleaning - } - - if other.EnforceShouldRetryCheck != nil { - dst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck - } - - if other.EnableEndpointDiscovery != nil { - dst.EnableEndpointDiscovery = other.EnableEndpointDiscovery - } - - if other.DisableEndpointHostPrefix != nil { - dst.DisableEndpointHostPrefix = other.DisableEndpointHostPrefix - } - - if other.STSRegionalEndpoint != endpoints.UnsetSTSEndpoint { - dst.STSRegionalEndpoint = other.STSRegionalEndpoint - } - - if other.S3UsEast1RegionalEndpoint != endpoints.UnsetS3UsEast1Endpoint { - dst.S3UsEast1RegionalEndpoint = other.S3UsEast1RegionalEndpoint - } -} - -// Copy will return a shallow copy of the Config object. If any additional -// configurations are provided they will be merged into the new config returned. -func (c *Config) Copy(cfgs ...*Config) *Config { - dst := &Config{} - dst.MergeIn(c) - - for _, cfg := range cfgs { - dst.MergeIn(cfg) - } - - return dst -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -// +build !go1.9 - -package aws - -import "time" - -// Context is an copy of the Go v1.7 stdlib's context.Context interface. -// It is represented as a SDK interface to enable you to use the "WithContext" -// API methods with Go v1.6 and a Context type such as golang.org/x/net/context. -// -// See https://golang.org/pkg/context on how to use contexts. -type Context interface { - // Deadline returns the time when work done on behalf of this context - // should be canceled. Deadline returns ok==false when no deadline is - // set. Successive calls to Deadline return the same results. - Deadline() (deadline time.Time, ok bool) - - // Done returns a channel that's closed when work done on behalf of this - // context should be canceled. Done may return nil if this context can - // never be canceled. Successive calls to Done return the same value. - Done() <-chan struct{} - - // Err returns a non-nil error value after Done is closed. Err returns - // Canceled if the context was canceled or DeadlineExceeded if the - // context's deadline passed. No other values for Err are defined. - // After Done is closed, successive calls to Err return the same value. - Err() error - - // Value returns the value associated with this context for key, or nil - // if no value is associated with key. Successive calls to Value with - // the same key returns the same result. - // - // Use context values only for request-scoped data that transits - // processes and API boundaries, not for passing optional parameters to - // functions. - Value(key interface{}) interface{} -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -// +build go1.9 - -package aws - -import "context" - -// Context is an alias of the Go stdlib's context.Context interface. -// It can be used within the SDK's API operation "WithContext" methods. -// -// See https://golang.org/pkg/context on how to use contexts. -type Context = context.Context diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -// +build !go1.7 - -package aws - -import "time" - -// An emptyCtx is a copy of the Go 1.7 context.emptyCtx type. This is copied to -// provide a 1.6 and 1.5 safe version of context that is compatible with Go -// 1.7's Context. -// -// An emptyCtx is never canceled, has no values, and has no deadline. It is not -// struct{}, since vars of this type must have distinct addresses. -type emptyCtx int - -func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { - return -} - -func (*emptyCtx) Done() <-chan struct{} { - return nil -} - -func (*emptyCtx) Err() error { - return nil -} - -func (*emptyCtx) Value(key interface{}) interface{} { - return nil -} - -func (e *emptyCtx) String() string { - switch e { - case backgroundCtx: - return "aws.BackgroundContext" - } - return "unknown empty Context" -} - -var ( - backgroundCtx = new(emptyCtx) -) - -// BackgroundContext returns a context that will never be canceled, has no -// values, and no deadline. This context is used by the SDK to provide -// backwards compatibility with non-context API operations and functionality. -// -// Go 1.6 and before: -// This context function is equivalent to context.Background in the Go stdlib. -// -// Go 1.7 and later: -// The context returned will be the value returned by context.Background() -// -// See https://golang.org/pkg/context for more information on Contexts. -func BackgroundContext() Context { - return backgroundCtx -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -// +build go1.7 - -package aws - -import "context" - -// BackgroundContext returns a context that will never be canceled, has no -// values, and no deadline. This context is used by the SDK to provide -// backwards compatibility with non-context API operations and functionality. -// -// Go 1.6 and before: -// This context function is equivalent to context.Background in the Go stdlib. -// -// Go 1.7 and later: -// The context returned will be the value returned by context.Background() -// -// See https://golang.org/pkg/context for more information on Contexts. -func BackgroundContext() Context { - return context.Background() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -package aws - -import ( - "time" -) - -// SleepWithContext will wait for the timer duration to expire, or the context -// is canceled. Which ever happens first. If the context is canceled the Context's -// error will be returned. -// -// Expects Context to always return a non-nil error if the Done channel is closed. -func SleepWithContext(ctx Context, dur time.Duration) error { - t := time.NewTimer(dur) - defer t.Stop() - - select { - case <-t.C: - break - case <-ctx.Done(): - return ctx.Err() - } - - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,918 +0,0 @@ -package aws - -import "time" - -// String returns a pointer to the string value passed in. -func String(v string) *string { - return &v -} - -// StringValue returns the value of the string pointer passed in or -// "" if the pointer is nil. -func StringValue(v *string) string { - if v != nil { - return *v - } - return "" -} - -// StringSlice converts a slice of string values into a slice of -// string pointers -func StringSlice(src []string) []*string { - dst := make([]*string, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// StringValueSlice converts a slice of string pointers into a slice of -// string values -func StringValueSlice(src []*string) []string { - dst := make([]string, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// StringMap converts a string map of string values into a string -// map of string pointers -func StringMap(src map[string]string) map[string]*string { - dst := make(map[string]*string) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// StringValueMap converts a string map of string pointers into a string -// map of string values -func StringValueMap(src map[string]*string) map[string]string { - dst := make(map[string]string) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Bool returns a pointer to the bool value passed in. -func Bool(v bool) *bool { - return &v -} - -// BoolValue returns the value of the bool pointer passed in or -// false if the pointer is nil. -func BoolValue(v *bool) bool { - if v != nil { - return *v - } - return false -} - -// BoolSlice converts a slice of bool values into a slice of -// bool pointers -func BoolSlice(src []bool) []*bool { - dst := make([]*bool, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// BoolValueSlice converts a slice of bool pointers into a slice of -// bool values -func BoolValueSlice(src []*bool) []bool { - dst := make([]bool, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// BoolMap converts a string map of bool values into a string -// map of bool pointers -func BoolMap(src map[string]bool) map[string]*bool { - dst := make(map[string]*bool) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// BoolValueMap converts a string map of bool pointers into a string -// map of bool values -func BoolValueMap(src map[string]*bool) map[string]bool { - dst := make(map[string]bool) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Int returns a pointer to the int value passed in. -func Int(v int) *int { - return &v -} - -// IntValue returns the value of the int pointer passed in or -// 0 if the pointer is nil. -func IntValue(v *int) int { - if v != nil { - return *v - } - return 0 -} - -// IntSlice converts a slice of int values into a slice of -// int pointers -func IntSlice(src []int) []*int { - dst := make([]*int, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// IntValueSlice converts a slice of int pointers into a slice of -// int values -func IntValueSlice(src []*int) []int { - dst := make([]int, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// IntMap converts a string map of int values into a string -// map of int pointers -func IntMap(src map[string]int) map[string]*int { - dst := make(map[string]*int) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// IntValueMap converts a string map of int pointers into a string -// map of int values -func IntValueMap(src map[string]*int) map[string]int { - dst := make(map[string]int) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Uint returns a pointer to the uint value passed in. -func Uint(v uint) *uint { - return &v -} - -// UintValue returns the value of the uint pointer passed in or -// 0 if the pointer is nil. -func UintValue(v *uint) uint { - if v != nil { - return *v - } - return 0 -} - -// UintSlice converts a slice of uint values uinto a slice of -// uint pointers -func UintSlice(src []uint) []*uint { - dst := make([]*uint, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// UintValueSlice converts a slice of uint pointers uinto a slice of -// uint values -func UintValueSlice(src []*uint) []uint { - dst := make([]uint, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// UintMap converts a string map of uint values uinto a string -// map of uint pointers -func UintMap(src map[string]uint) map[string]*uint { - dst := make(map[string]*uint) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// UintValueMap converts a string map of uint pointers uinto a string -// map of uint values -func UintValueMap(src map[string]*uint) map[string]uint { - dst := make(map[string]uint) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Int8 returns a pointer to the int8 value passed in. -func Int8(v int8) *int8 { - return &v -} - -// Int8Value returns the value of the int8 pointer passed in or -// 0 if the pointer is nil. -func Int8Value(v *int8) int8 { - if v != nil { - return *v - } - return 0 -} - -// Int8Slice converts a slice of int8 values into a slice of -// int8 pointers -func Int8Slice(src []int8) []*int8 { - dst := make([]*int8, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Int8ValueSlice converts a slice of int8 pointers into a slice of -// int8 values -func Int8ValueSlice(src []*int8) []int8 { - dst := make([]int8, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Int8Map converts a string map of int8 values into a string -// map of int8 pointers -func Int8Map(src map[string]int8) map[string]*int8 { - dst := make(map[string]*int8) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Int8ValueMap converts a string map of int8 pointers into a string -// map of int8 values -func Int8ValueMap(src map[string]*int8) map[string]int8 { - dst := make(map[string]int8) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Int16 returns a pointer to the int16 value passed in. -func Int16(v int16) *int16 { - return &v -} - -// Int16Value returns the value of the int16 pointer passed in or -// 0 if the pointer is nil. -func Int16Value(v *int16) int16 { - if v != nil { - return *v - } - return 0 -} - -// Int16Slice converts a slice of int16 values into a slice of -// int16 pointers -func Int16Slice(src []int16) []*int16 { - dst := make([]*int16, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Int16ValueSlice converts a slice of int16 pointers into a slice of -// int16 values -func Int16ValueSlice(src []*int16) []int16 { - dst := make([]int16, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Int16Map converts a string map of int16 values into a string -// map of int16 pointers -func Int16Map(src map[string]int16) map[string]*int16 { - dst := make(map[string]*int16) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Int16ValueMap converts a string map of int16 pointers into a string -// map of int16 values -func Int16ValueMap(src map[string]*int16) map[string]int16 { - dst := make(map[string]int16) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Int32 returns a pointer to the int32 value passed in. -func Int32(v int32) *int32 { - return &v -} - -// Int32Value returns the value of the int32 pointer passed in or -// 0 if the pointer is nil. -func Int32Value(v *int32) int32 { - if v != nil { - return *v - } - return 0 -} - -// Int32Slice converts a slice of int32 values into a slice of -// int32 pointers -func Int32Slice(src []int32) []*int32 { - dst := make([]*int32, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Int32ValueSlice converts a slice of int32 pointers into a slice of -// int32 values -func Int32ValueSlice(src []*int32) []int32 { - dst := make([]int32, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Int32Map converts a string map of int32 values into a string -// map of int32 pointers -func Int32Map(src map[string]int32) map[string]*int32 { - dst := make(map[string]*int32) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Int32ValueMap converts a string map of int32 pointers into a string -// map of int32 values -func Int32ValueMap(src map[string]*int32) map[string]int32 { - dst := make(map[string]int32) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Int64 returns a pointer to the int64 value passed in. -func Int64(v int64) *int64 { - return &v -} - -// Int64Value returns the value of the int64 pointer passed in or -// 0 if the pointer is nil. -func Int64Value(v *int64) int64 { - if v != nil { - return *v - } - return 0 -} - -// Int64Slice converts a slice of int64 values into a slice of -// int64 pointers -func Int64Slice(src []int64) []*int64 { - dst := make([]*int64, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Int64ValueSlice converts a slice of int64 pointers into a slice of -// int64 values -func Int64ValueSlice(src []*int64) []int64 { - dst := make([]int64, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Int64Map converts a string map of int64 values into a string -// map of int64 pointers -func Int64Map(src map[string]int64) map[string]*int64 { - dst := make(map[string]*int64) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Int64ValueMap converts a string map of int64 pointers into a string -// map of int64 values -func Int64ValueMap(src map[string]*int64) map[string]int64 { - dst := make(map[string]int64) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Uint8 returns a pointer to the uint8 value passed in. -func Uint8(v uint8) *uint8 { - return &v -} - -// Uint8Value returns the value of the uint8 pointer passed in or -// 0 if the pointer is nil. -func Uint8Value(v *uint8) uint8 { - if v != nil { - return *v - } - return 0 -} - -// Uint8Slice converts a slice of uint8 values into a slice of -// uint8 pointers -func Uint8Slice(src []uint8) []*uint8 { - dst := make([]*uint8, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Uint8ValueSlice converts a slice of uint8 pointers into a slice of -// uint8 values -func Uint8ValueSlice(src []*uint8) []uint8 { - dst := make([]uint8, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Uint8Map converts a string map of uint8 values into a string -// map of uint8 pointers -func Uint8Map(src map[string]uint8) map[string]*uint8 { - dst := make(map[string]*uint8) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Uint8ValueMap converts a string map of uint8 pointers into a string -// map of uint8 values -func Uint8ValueMap(src map[string]*uint8) map[string]uint8 { - dst := make(map[string]uint8) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Uint16 returns a pointer to the uint16 value passed in. -func Uint16(v uint16) *uint16 { - return &v -} - -// Uint16Value returns the value of the uint16 pointer passed in or -// 0 if the pointer is nil. -func Uint16Value(v *uint16) uint16 { - if v != nil { - return *v - } - return 0 -} - -// Uint16Slice converts a slice of uint16 values into a slice of -// uint16 pointers -func Uint16Slice(src []uint16) []*uint16 { - dst := make([]*uint16, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Uint16ValueSlice converts a slice of uint16 pointers into a slice of -// uint16 values -func Uint16ValueSlice(src []*uint16) []uint16 { - dst := make([]uint16, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Uint16Map converts a string map of uint16 values into a string -// map of uint16 pointers -func Uint16Map(src map[string]uint16) map[string]*uint16 { - dst := make(map[string]*uint16) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Uint16ValueMap converts a string map of uint16 pointers into a string -// map of uint16 values -func Uint16ValueMap(src map[string]*uint16) map[string]uint16 { - dst := make(map[string]uint16) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Uint32 returns a pointer to the uint32 value passed in. -func Uint32(v uint32) *uint32 { - return &v -} - -// Uint32Value returns the value of the uint32 pointer passed in or -// 0 if the pointer is nil. -func Uint32Value(v *uint32) uint32 { - if v != nil { - return *v - } - return 0 -} - -// Uint32Slice converts a slice of uint32 values into a slice of -// uint32 pointers -func Uint32Slice(src []uint32) []*uint32 { - dst := make([]*uint32, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Uint32ValueSlice converts a slice of uint32 pointers into a slice of -// uint32 values -func Uint32ValueSlice(src []*uint32) []uint32 { - dst := make([]uint32, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Uint32Map converts a string map of uint32 values into a string -// map of uint32 pointers -func Uint32Map(src map[string]uint32) map[string]*uint32 { - dst := make(map[string]*uint32) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Uint32ValueMap converts a string map of uint32 pointers into a string -// map of uint32 values -func Uint32ValueMap(src map[string]*uint32) map[string]uint32 { - dst := make(map[string]uint32) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Uint64 returns a pointer to the uint64 value passed in. -func Uint64(v uint64) *uint64 { - return &v -} - -// Uint64Value returns the value of the uint64 pointer passed in or -// 0 if the pointer is nil. -func Uint64Value(v *uint64) uint64 { - if v != nil { - return *v - } - return 0 -} - -// Uint64Slice converts a slice of uint64 values into a slice of -// uint64 pointers -func Uint64Slice(src []uint64) []*uint64 { - dst := make([]*uint64, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Uint64ValueSlice converts a slice of uint64 pointers into a slice of -// uint64 values -func Uint64ValueSlice(src []*uint64) []uint64 { - dst := make([]uint64, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Uint64Map converts a string map of uint64 values into a string -// map of uint64 pointers -func Uint64Map(src map[string]uint64) map[string]*uint64 { - dst := make(map[string]*uint64) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Uint64ValueMap converts a string map of uint64 pointers into a string -// map of uint64 values -func Uint64ValueMap(src map[string]*uint64) map[string]uint64 { - dst := make(map[string]uint64) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Float32 returns a pointer to the float32 value passed in. -func Float32(v float32) *float32 { - return &v -} - -// Float32Value returns the value of the float32 pointer passed in or -// 0 if the pointer is nil. -func Float32Value(v *float32) float32 { - if v != nil { - return *v - } - return 0 -} - -// Float32Slice converts a slice of float32 values into a slice of -// float32 pointers -func Float32Slice(src []float32) []*float32 { - dst := make([]*float32, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Float32ValueSlice converts a slice of float32 pointers into a slice of -// float32 values -func Float32ValueSlice(src []*float32) []float32 { - dst := make([]float32, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Float32Map converts a string map of float32 values into a string -// map of float32 pointers -func Float32Map(src map[string]float32) map[string]*float32 { - dst := make(map[string]*float32) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Float32ValueMap converts a string map of float32 pointers into a string -// map of float32 values -func Float32ValueMap(src map[string]*float32) map[string]float32 { - dst := make(map[string]float32) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Float64 returns a pointer to the float64 value passed in. -func Float64(v float64) *float64 { - return &v -} - -// Float64Value returns the value of the float64 pointer passed in or -// 0 if the pointer is nil. -func Float64Value(v *float64) float64 { - if v != nil { - return *v - } - return 0 -} - -// Float64Slice converts a slice of float64 values into a slice of -// float64 pointers -func Float64Slice(src []float64) []*float64 { - dst := make([]*float64, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// Float64ValueSlice converts a slice of float64 pointers into a slice of -// float64 values -func Float64ValueSlice(src []*float64) []float64 { - dst := make([]float64, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// Float64Map converts a string map of float64 values into a string -// map of float64 pointers -func Float64Map(src map[string]float64) map[string]*float64 { - dst := make(map[string]*float64) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// Float64ValueMap converts a string map of float64 pointers into a string -// map of float64 values -func Float64ValueMap(src map[string]*float64) map[string]float64 { - dst := make(map[string]float64) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} - -// Time returns a pointer to the time.Time value passed in. -func Time(v time.Time) *time.Time { - return &v -} - -// TimeValue returns the value of the time.Time pointer passed in or -// time.Time{} if the pointer is nil. -func TimeValue(v *time.Time) time.Time { - if v != nil { - return *v - } - return time.Time{} -} - -// SecondsTimeValue converts an int64 pointer to a time.Time value -// representing seconds since Epoch or time.Time{} if the pointer is nil. -func SecondsTimeValue(v *int64) time.Time { - if v != nil { - return time.Unix((*v / 1000), 0) - } - return time.Time{} -} - -// MillisecondsTimeValue converts an int64 pointer to a time.Time value -// representing milliseconds sinch Epoch or time.Time{} if the pointer is nil. -func MillisecondsTimeValue(v *int64) time.Time { - if v != nil { - return time.Unix(0, (*v * 1000000)) - } - return time.Time{} -} - -// TimeUnixMilli returns a Unix timestamp in milliseconds from "January 1, 1970 UTC". -// The result is undefined if the Unix time cannot be represented by an int64. -// Which includes calling TimeUnixMilli on a zero Time is undefined. -// -// This utility is useful for service API's such as CloudWatch Logs which require -// their unix time values to be in milliseconds. -// -// See Go stdlib https://golang.org/pkg/time/#Time.UnixNano for more information. -func TimeUnixMilli(t time.Time) int64 { - return t.UnixNano() / int64(time.Millisecond/time.Nanosecond) -} - -// TimeSlice converts a slice of time.Time values into a slice of -// time.Time pointers -func TimeSlice(src []time.Time) []*time.Time { - dst := make([]*time.Time, len(src)) - for i := 0; i < len(src); i++ { - dst[i] = &(src[i]) - } - return dst -} - -// TimeValueSlice converts a slice of time.Time pointers into a slice of -// time.Time values -func TimeValueSlice(src []*time.Time) []time.Time { - dst := make([]time.Time, len(src)) - for i := 0; i < len(src); i++ { - if src[i] != nil { - dst[i] = *(src[i]) - } - } - return dst -} - -// TimeMap converts a string map of time.Time values into a string -// map of time.Time pointers -func TimeMap(src map[string]time.Time) map[string]*time.Time { - dst := make(map[string]*time.Time) - for k, val := range src { - v := val - dst[k] = &v - } - return dst -} - -// TimeValueMap converts a string map of time.Time pointers into a string -// map of time.Time values -func TimeValueMap(src map[string]*time.Time) map[string]time.Time { - dst := make(map[string]time.Time) - for k, val := range src { - if val != nil { - dst[k] = *val - } - } - return dst -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,230 +0,0 @@ -package corehandlers - -import ( - "bytes" - "fmt" - "io/ioutil" - "net/http" - "net/url" - "regexp" - "strconv" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/request" -) - -// Interface for matching types which also have a Len method. -type lener interface { - Len() int -} - -// BuildContentLengthHandler builds the content length of a request based on the body, -// or will use the HTTPRequest.Header's "Content-Length" if defined. If unable -// to determine request body length and no "Content-Length" was specified it will panic. -// -// The Content-Length will only be added to the request if the length of the body -// is greater than 0. If the body is empty or the current `Content-Length` -// header is <= 0, the header will also be stripped. -var BuildContentLengthHandler = request.NamedHandler{Name: "core.BuildContentLengthHandler", Fn: func(r *request.Request) { - var length int64 - - if slength := r.HTTPRequest.Header.Get("Content-Length"); slength != "" { - length, _ = strconv.ParseInt(slength, 10, 64) - } else { - if r.Body != nil { - var err error - length, err = aws.SeekerLen(r.Body) - if err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, "failed to get request body's length", err) - return - } - } - } - - if length > 0 { - r.HTTPRequest.ContentLength = length - r.HTTPRequest.Header.Set("Content-Length", fmt.Sprintf("%d", length)) - } else { - r.HTTPRequest.ContentLength = 0 - r.HTTPRequest.Header.Del("Content-Length") - } -}} - -var reStatusCode = regexp.MustCompile(`^(\d{3})`) - -// ValidateReqSigHandler is a request handler to ensure that the request's -// signature doesn't expire before it is sent. This can happen when a request -// is built and signed significantly before it is sent. Or significant delays -// occur when retrying requests that would cause the signature to expire. -var ValidateReqSigHandler = request.NamedHandler{ - Name: "core.ValidateReqSigHandler", - Fn: func(r *request.Request) { - // Unsigned requests are not signed - if r.Config.Credentials == credentials.AnonymousCredentials { - return - } - - signedTime := r.Time - if !r.LastSignedAt.IsZero() { - signedTime = r.LastSignedAt - } - - // 5 minutes to allow for some clock skew/delays in transmission. - // Would be improved with aws/aws-sdk-go#423 - if signedTime.Add(5 * time.Minute).After(time.Now()) { - return - } - - fmt.Println("request expired, resigning") - r.Sign() - }, -} - -// SendHandler is a request handler to send service request using HTTP client. -var SendHandler = request.NamedHandler{ - Name: "core.SendHandler", - Fn: func(r *request.Request) { - sender := sendFollowRedirects - if r.DisableFollowRedirects { - sender = sendWithoutFollowRedirects - } - - if request.NoBody == r.HTTPRequest.Body { - // Strip off the request body if the NoBody reader was used as a - // place holder for a request body. This prevents the SDK from - // making requests with a request body when it would be invalid - // to do so. - // - // Use a shallow copy of the http.Request to ensure the race condition - // of transport on Body will not trigger - reqOrig, reqCopy := r.HTTPRequest, *r.HTTPRequest - reqCopy.Body = nil - r.HTTPRequest = &reqCopy - defer func() { - r.HTTPRequest = reqOrig - }() - } - - var err error - r.HTTPResponse, err = sender(r) - if err != nil { - handleSendError(r, err) - } - }, -} - -func sendFollowRedirects(r *request.Request) (*http.Response, error) { - return r.Config.HTTPClient.Do(r.HTTPRequest) -} - -func sendWithoutFollowRedirects(r *request.Request) (*http.Response, error) { - transport := r.Config.HTTPClient.Transport - if transport == nil { - transport = http.DefaultTransport - } - - return transport.RoundTrip(r.HTTPRequest) -} - -func handleSendError(r *request.Request, err error) { - // Prevent leaking if an HTTPResponse was returned. Clean up - // the body. - if r.HTTPResponse != nil { - r.HTTPResponse.Body.Close() - } - // Capture the case where url.Error is returned for error processing - // response. e.g. 301 without location header comes back as string - // error and r.HTTPResponse is nil. Other URL redirect errors will - // comeback in a similar method. - if e, ok := err.(*url.Error); ok && e.Err != nil { - if s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil { - code, _ := strconv.ParseInt(s[1], 10, 64) - r.HTTPResponse = &http.Response{ - StatusCode: int(code), - Status: http.StatusText(int(code)), - Body: ioutil.NopCloser(bytes.NewReader([]byte{})), - } - return - } - } - if r.HTTPResponse == nil { - // Add a dummy request response object to ensure the HTTPResponse - // value is consistent. - r.HTTPResponse = &http.Response{ - StatusCode: int(0), - Status: http.StatusText(int(0)), - Body: ioutil.NopCloser(bytes.NewReader([]byte{})), - } - } - // Catch all request errors, and let the default retrier determine - // if the error is retryable. - r.Error = awserr.New("RequestError", "send request failed", err) - - // Override the error with a context canceled error, if that was canceled. - ctx := r.Context() - select { - case <-ctx.Done(): - r.Error = awserr.New(request.CanceledErrorCode, - "request context canceled", ctx.Err()) - r.Retryable = aws.Bool(false) - default: - } -} - -// ValidateResponseHandler is a request handler to validate service response. -var ValidateResponseHandler = request.NamedHandler{Name: "core.ValidateResponseHandler", Fn: func(r *request.Request) { - if r.HTTPResponse.StatusCode == 0 || r.HTTPResponse.StatusCode >= 300 { - // this may be replaced by an UnmarshalError handler - r.Error = awserr.New("UnknownError", "unknown error", nil) - } -}} - -// AfterRetryHandler performs final checks to determine if the request should -// be retried and how long to delay. -var AfterRetryHandler = request.NamedHandler{ - Name: "core.AfterRetryHandler", - Fn: func(r *request.Request) { - // If one of the other handlers already set the retry state - // we don't want to override it based on the service's state - if r.Retryable == nil || aws.BoolValue(r.Config.EnforceShouldRetryCheck) { - r.Retryable = aws.Bool(r.ShouldRetry(r)) - } - - if r.WillRetry() { - r.RetryDelay = r.RetryRules(r) - - if sleepFn := r.Config.SleepDelay; sleepFn != nil { - // Support SleepDelay for backwards compatibility and testing - sleepFn(r.RetryDelay) - } else if err := aws.SleepWithContext(r.Context(), r.RetryDelay); err != nil { - r.Error = awserr.New(request.CanceledErrorCode, - "request context canceled", err) - r.Retryable = aws.Bool(false) - return - } - - // when the expired token exception occurs the credentials - // need to be expired locally so that the next request to - // get credentials will trigger a credentials refresh. - if r.IsErrorExpired() { - r.Config.Credentials.Expire() - } - - r.RetryCount++ - r.Error = nil - } - }} - -// ValidateEndpointHandler is a request handler to validate a request had the -// appropriate Region and Endpoint set. Will set r.Error if the endpoint or -// region is not valid. -var ValidateEndpointHandler = request.NamedHandler{Name: "core.ValidateEndpointHandler", Fn: func(r *request.Request) { - if r.ClientInfo.SigningRegion == "" && aws.StringValue(r.Config.Region) == "" { - r.Error = aws.ErrMissingRegion - } else if r.ClientInfo.Endpoint == "" { - r.Error = aws.ErrMissingEndpoint - } -}} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -package corehandlers - -import "github.com/aws/aws-sdk-go/aws/request" - -// ValidateParametersHandler is a request handler to validate the input parameters. -// Validating parameters only has meaning if done prior to the request being sent. -var ValidateParametersHandler = request.NamedHandler{Name: "core.ValidateParametersHandler", Fn: func(r *request.Request) { - if !r.ParamsFilled() { - return - } - - if v, ok := r.Params.(request.Validator); ok { - if err := v.Validate(); err != nil { - r.Error = err - } - } -}} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -package corehandlers - -import ( - "os" - "runtime" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" -) - -// SDKVersionUserAgentHandler is a request handler for adding the SDK Version -// to the user agent. -var SDKVersionUserAgentHandler = request.NamedHandler{ - Name: "core.SDKVersionUserAgentHandler", - Fn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion, - runtime.Version(), runtime.GOOS, runtime.GOARCH), -} - -const execEnvVar = `AWS_EXECUTION_ENV` -const execEnvUAKey = `exec-env` - -// AddHostExecEnvUserAgentHander is a request handler appending the SDK's -// execution environment to the user agent. -// -// If the environment variable AWS_EXECUTION_ENV is set, its value will be -// appended to the user agent string. -var AddHostExecEnvUserAgentHander = request.NamedHandler{ - Name: "core.AddHostExecEnvUserAgentHander", - Fn: func(r *request.Request) { - v := os.Getenv(execEnvVar) - if len(v) == 0 { - return - } - - request.AddToUserAgent(r, execEnvUAKey+"/"+v) - }, -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -package credentials - -import ( - "github.com/aws/aws-sdk-go/aws/awserr" -) - -var ( - // ErrNoValidProvidersFoundInChain Is returned when there are no valid - // providers in the ChainProvider. - // - // This has been deprecated. For verbose error messaging set - // aws.Config.CredentialsChainVerboseErrors to true. - ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders", - `no valid providers in chain. Deprecated. - For verbose messaging see aws.Config.CredentialsChainVerboseErrors`, - nil) -) - -// A ChainProvider will search for a provider which returns credentials -// and cache that provider until Retrieve is called again. -// -// The ChainProvider provides a way of chaining multiple providers together -// which will pick the first available using priority order of the Providers -// in the list. -// -// If none of the Providers retrieve valid credentials Value, ChainProvider's -// Retrieve() will return the error ErrNoValidProvidersFoundInChain. -// -// If a Provider is found which returns valid credentials Value ChainProvider -// will cache that Provider for all calls to IsExpired(), until Retrieve is -// called again. -// -// Example of ChainProvider to be used with an EnvProvider and EC2RoleProvider. -// In this example EnvProvider will first check if any credentials are available -// via the environment variables. If there are none ChainProvider will check -// the next Provider in the list, EC2RoleProvider in this case. If EC2RoleProvider -// does not return any credentials ChainProvider will return the error -// ErrNoValidProvidersFoundInChain -// -// creds := credentials.NewChainCredentials( -// []credentials.Provider{ -// &credentials.EnvProvider{}, -// &ec2rolecreds.EC2RoleProvider{ -// Client: ec2metadata.New(sess), -// }, -// }) -// -// // Usage of ChainCredentials with aws.Config -// svc := ec2.New(session.Must(session.NewSession(&aws.Config{ -// Credentials: creds, -// }))) -// -type ChainProvider struct { - Providers []Provider - curr Provider - VerboseErrors bool -} - -// NewChainCredentials returns a pointer to a new Credentials object -// wrapping a chain of providers. -func NewChainCredentials(providers []Provider) *Credentials { - return NewCredentials(&ChainProvider{ - Providers: append([]Provider{}, providers...), - }) -} - -// Retrieve returns the credentials value or error if no provider returned -// without error. -// -// If a provider is found it will be cached and any calls to IsExpired() -// will return the expired state of the cached provider. -func (c *ChainProvider) Retrieve() (Value, error) { - var errs []error - for _, p := range c.Providers { - creds, err := p.Retrieve() - if err == nil { - c.curr = p - return creds, nil - } - errs = append(errs, err) - } - c.curr = nil - - var err error - err = ErrNoValidProvidersFoundInChain - if c.VerboseErrors { - err = awserr.NewBatchError("NoCredentialProviders", "no valid providers in chain", errs) - } - return Value{}, err -} - -// IsExpired will returned the expired state of the currently cached provider -// if there is one. If there is no current provider, true will be returned. -func (c *ChainProvider) IsExpired() bool { - if c.curr != nil { - return c.curr.IsExpired() - } - - return true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,299 +0,0 @@ -// Package credentials provides credential retrieval and management -// -// The Credentials is the primary method of getting access to and managing -// credentials Values. Using dependency injection retrieval of the credential -// values is handled by a object which satisfies the Provider interface. -// -// By default the Credentials.Get() will cache the successful result of a -// Provider's Retrieve() until Provider.IsExpired() returns true. At which -// point Credentials will call Provider's Retrieve() to get new credential Value. -// -// The Provider is responsible for determining when credentials Value have expired. -// It is also important to note that Credentials will always call Retrieve the -// first time Credentials.Get() is called. -// -// Example of using the environment variable credentials. -// -// creds := credentials.NewEnvCredentials() -// -// // Retrieve the credentials value -// credValue, err := creds.Get() -// if err != nil { -// // handle error -// } -// -// Example of forcing credentials to expire and be refreshed on the next Get(). -// This may be helpful to proactively expire credentials and refresh them sooner -// than they would naturally expire on their own. -// -// creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{}) -// creds.Expire() -// credsValue, err := creds.Get() -// // New credentials will be retrieved instead of from cache. -// -// -// Custom Provider -// -// Each Provider built into this package also provides a helper method to generate -// a Credentials pointer setup with the provider. To use a custom Provider just -// create a type which satisfies the Provider interface and pass it to the -// NewCredentials method. -// -// type MyProvider struct{} -// func (m *MyProvider) Retrieve() (Value, error) {...} -// func (m *MyProvider) IsExpired() bool {...} -// -// creds := credentials.NewCredentials(&MyProvider{}) -// credValue, err := creds.Get() -// -package credentials - -import ( - "fmt" - "sync" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// AnonymousCredentials is an empty Credential object that can be used as -// dummy placeholder credentials for requests that do not need signed. -// -// This Credentials can be used to configure a service to not sign requests -// when making service API calls. For example, when accessing public -// s3 buckets. -// -// svc := s3.New(session.Must(session.NewSession(&aws.Config{ -// Credentials: credentials.AnonymousCredentials, -// }))) -// // Access public S3 buckets. -var AnonymousCredentials = NewStaticCredentials("", "", "") - -// A Value is the AWS credentials value for individual credential fields. -type Value struct { - // AWS Access key ID - AccessKeyID string - - // AWS Secret Access Key - SecretAccessKey string - - // AWS Session Token - SessionToken string - - // Provider used to get credentials - ProviderName string -} - -// HasKeys returns if the credentials Value has both AccessKeyID and -// SecretAccessKey value set. -func (v Value) HasKeys() bool { - return len(v.AccessKeyID) != 0 && len(v.SecretAccessKey) != 0 -} - -// A Provider is the interface for any component which will provide credentials -// Value. A provider is required to manage its own Expired state, and what to -// be expired means. -// -// The Provider should not need to implement its own mutexes, because -// that will be managed by Credentials. -type Provider interface { - // Retrieve returns nil if it successfully retrieved the value. - // Error is returned if the value were not obtainable, or empty. - Retrieve() (Value, error) - - // IsExpired returns if the credentials are no longer valid, and need - // to be retrieved. - IsExpired() bool -} - -// An Expirer is an interface that Providers can implement to expose the expiration -// time, if known. If the Provider cannot accurately provide this info, -// it should not implement this interface. -type Expirer interface { - // The time at which the credentials are no longer valid - ExpiresAt() time.Time -} - -// An ErrorProvider is a stub credentials provider that always returns an error -// this is used by the SDK when construction a known provider is not possible -// due to an error. -type ErrorProvider struct { - // The error to be returned from Retrieve - Err error - - // The provider name to set on the Retrieved returned Value - ProviderName string -} - -// Retrieve will always return the error that the ErrorProvider was created with. -func (p ErrorProvider) Retrieve() (Value, error) { - return Value{ProviderName: p.ProviderName}, p.Err -} - -// IsExpired will always return not expired. -func (p ErrorProvider) IsExpired() bool { - return false -} - -// A Expiry provides shared expiration logic to be used by credentials -// providers to implement expiry functionality. -// -// The best method to use this struct is as an anonymous field within the -// provider's struct. -// -// Example: -// type EC2RoleProvider struct { -// Expiry -// ... -// } -type Expiry struct { - // The date/time when to expire on - expiration time.Time - - // If set will be used by IsExpired to determine the current time. - // Defaults to time.Now if CurrentTime is not set. Available for testing - // to be able to mock out the current time. - CurrentTime func() time.Time -} - -// SetExpiration sets the expiration IsExpired will check when called. -// -// If window is greater than 0 the expiration time will be reduced by the -// window value. -// -// Using a window is helpful to trigger credentials to expire sooner than -// the expiration time given to ensure no requests are made with expired -// tokens. -func (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) { - e.expiration = expiration - if window > 0 { - e.expiration = e.expiration.Add(-window) - } -} - -// IsExpired returns if the credentials are expired. -func (e *Expiry) IsExpired() bool { - curTime := e.CurrentTime - if curTime == nil { - curTime = time.Now - } - return e.expiration.Before(curTime()) -} - -// ExpiresAt returns the expiration time of the credential -func (e *Expiry) ExpiresAt() time.Time { - return e.expiration -} - -// A Credentials provides concurrency safe retrieval of AWS credentials Value. -// Credentials will cache the credentials value until they expire. Once the value -// expires the next Get will attempt to retrieve valid credentials. -// -// Credentials is safe to use across multiple goroutines and will manage the -// synchronous state so the Providers do not need to implement their own -// synchronization. -// -// The first Credentials.Get() will always call Provider.Retrieve() to get the -// first instance of the credentials Value. All calls to Get() after that -// will return the cached credentials Value until IsExpired() returns true. -type Credentials struct { - creds Value - forceRefresh bool - - m sync.RWMutex - - provider Provider -} - -// NewCredentials returns a pointer to a new Credentials with the provider set. -func NewCredentials(provider Provider) *Credentials { - return &Credentials{ - provider: provider, - forceRefresh: true, - } -} - -// Get returns the credentials value, or error if the credentials Value failed -// to be retrieved. -// -// Will return the cached credentials Value if it has not expired. If the -// credentials Value has expired the Provider's Retrieve() will be called -// to refresh the credentials. -// -// If Credentials.Expire() was called the credentials Value will be force -// expired, and the next call to Get() will cause them to be refreshed. -func (c *Credentials) Get() (Value, error) { - // Check the cached credentials first with just the read lock. - c.m.RLock() - if !c.isExpired() { - creds := c.creds - c.m.RUnlock() - return creds, nil - } - c.m.RUnlock() - - // Credentials are expired need to retrieve the credentials taking the full - // lock. - c.m.Lock() - defer c.m.Unlock() - - if c.isExpired() { - creds, err := c.provider.Retrieve() - if err != nil { - return Value{}, err - } - c.creds = creds - c.forceRefresh = false - } - - return c.creds, nil -} - -// Expire expires the credentials and forces them to be retrieved on the -// next call to Get(). -// -// This will override the Provider's expired state, and force Credentials -// to call the Provider's Retrieve(). -func (c *Credentials) Expire() { - c.m.Lock() - defer c.m.Unlock() - - c.forceRefresh = true -} - -// IsExpired returns if the credentials are no longer valid, and need -// to be retrieved. -// -// If the Credentials were forced to be expired with Expire() this will -// reflect that override. -func (c *Credentials) IsExpired() bool { - c.m.RLock() - defer c.m.RUnlock() - - return c.isExpired() -} - -// isExpired helper method wrapping the definition of expired credentials. -func (c *Credentials) isExpired() bool { - return c.forceRefresh || c.provider.IsExpired() -} - -// ExpiresAt provides access to the functionality of the Expirer interface of -// the underlying Provider, if it supports that interface. Otherwise, it returns -// an error. -func (c *Credentials) ExpiresAt() (time.Time, error) { - c.m.RLock() - defer c.m.RUnlock() - - expirer, ok := c.provider.(Expirer) - if !ok { - return time.Time{}, awserr.New("ProviderNotExpirer", - fmt.Sprintf("provider %s does not support ExpiresAt()", c.creds.ProviderName), - nil) - } - if c.forceRefresh { - // set expiration time to the distant past - return time.Time{}, nil - } - return expirer.ExpiresAt(), nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ -package ec2rolecreds - -import ( - "bufio" - "encoding/json" - "fmt" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/ec2metadata" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/internal/sdkuri" -) - -// ProviderName provides a name of EC2Role provider -const ProviderName = "EC2RoleProvider" - -// A EC2RoleProvider retrieves credentials from the EC2 service, and keeps track if -// those credentials are expired. -// -// Example how to configure the EC2RoleProvider with custom http Client, Endpoint -// or ExpiryWindow -// -// p := &ec2rolecreds.EC2RoleProvider{ -// // Pass in a custom timeout to be used when requesting -// // IAM EC2 Role credentials. -// Client: ec2metadata.New(sess, aws.Config{ -// HTTPClient: &http.Client{Timeout: 10 * time.Second}, -// }), -// -// // Do not use early expiry of credentials. If a non zero value is -// // specified the credentials will be expired early -// ExpiryWindow: 0, -// } -type EC2RoleProvider struct { - credentials.Expiry - - // Required EC2Metadata client to use when connecting to EC2 metadata service. - Client *ec2metadata.EC2Metadata - - // ExpiryWindow will allow the credentials to trigger refreshing prior to - // the credentials actually expiring. This is beneficial so race conditions - // with expiring credentials do not cause request to fail unexpectedly - // due to ExpiredTokenException exceptions. - // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true - // 10 seconds before the credentials are actually expired. - // - // If ExpiryWindow is 0 or less it will be ignored. - ExpiryWindow time.Duration -} - -// NewCredentials returns a pointer to a new Credentials object wrapping -// the EC2RoleProvider. Takes a ConfigProvider to create a EC2Metadata client. -// The ConfigProvider is satisfied by the session.Session type. -func NewCredentials(c client.ConfigProvider, options ...func(*EC2RoleProvider)) *credentials.Credentials { - p := &EC2RoleProvider{ - Client: ec2metadata.New(c), - } - - for _, option := range options { - option(p) - } - - return credentials.NewCredentials(p) -} - -// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping -// the EC2RoleProvider. Takes a EC2Metadata client to use when connecting to EC2 -// metadata service. -func NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ...func(*EC2RoleProvider)) *credentials.Credentials { - p := &EC2RoleProvider{ - Client: client, - } - - for _, option := range options { - option(p) - } - - return credentials.NewCredentials(p) -} - -// Retrieve retrieves credentials from the EC2 service. -// Error will be returned if the request fails, or unable to extract -// the desired credentials. -func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) { - credsList, err := requestCredList(m.Client) - if err != nil { - return credentials.Value{ProviderName: ProviderName}, err - } - - if len(credsList) == 0 { - return credentials.Value{ProviderName: ProviderName}, awserr.New("EmptyEC2RoleList", "empty EC2 Role list", nil) - } - credsName := credsList[0] - - roleCreds, err := requestCred(m.Client, credsName) - if err != nil { - return credentials.Value{ProviderName: ProviderName}, err - } - - m.SetExpiration(roleCreds.Expiration, m.ExpiryWindow) - - return credentials.Value{ - AccessKeyID: roleCreds.AccessKeyID, - SecretAccessKey: roleCreds.SecretAccessKey, - SessionToken: roleCreds.Token, - ProviderName: ProviderName, - }, nil -} - -// A ec2RoleCredRespBody provides the shape for unmarshaling credential -// request responses. -type ec2RoleCredRespBody struct { - // Success State - Expiration time.Time - AccessKeyID string - SecretAccessKey string - Token string - - // Error state - Code string - Message string -} - -const iamSecurityCredsPath = "iam/security-credentials/" - -// requestCredList requests a list of credentials from the EC2 service. -// If there are no credentials, or there is an error making or receiving the request -func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) { - resp, err := client.GetMetadata(iamSecurityCredsPath) - if err != nil { - return nil, awserr.New("EC2RoleRequestError", "no EC2 instance role found", err) - } - - credsList := []string{} - s := bufio.NewScanner(strings.NewReader(resp)) - for s.Scan() { - credsList = append(credsList, s.Text()) - } - - if err := s.Err(); err != nil { - return nil, awserr.New(request.ErrCodeSerialization, - "failed to read EC2 instance role from metadata service", err) - } - - return credsList, nil -} - -// requestCred requests the credentials for a specific credentials from the EC2 service. -// -// If the credentials cannot be found, or there is an error reading the response -// and error will be returned. -func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) { - resp, err := client.GetMetadata(sdkuri.PathJoin(iamSecurityCredsPath, credsName)) - if err != nil { - return ec2RoleCredRespBody{}, - awserr.New("EC2RoleRequestError", - fmt.Sprintf("failed to get %s EC2 instance role credentials", credsName), - err) - } - - respCreds := ec2RoleCredRespBody{} - if err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil { - return ec2RoleCredRespBody{}, - awserr.New(request.ErrCodeSerialization, - fmt.Sprintf("failed to decode %s EC2 instance role credentials", credsName), - err) - } - - if respCreds.Code != "Success" { - // If an error code was returned something failed requesting the role. - return ec2RoleCredRespBody{}, awserr.New(respCreds.Code, respCreds.Message, nil) - } - - return respCreds, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,203 +0,0 @@ -// Package endpointcreds provides support for retrieving credentials from an -// arbitrary HTTP endpoint. -// -// The credentials endpoint Provider can receive both static and refreshable -// credentials that will expire. Credentials are static when an "Expiration" -// value is not provided in the endpoint's response. -// -// Static credentials will never expire once they have been retrieved. The format -// of the static credentials response: -// { -// "AccessKeyId" : "MUA...", -// "SecretAccessKey" : "/7PC5om....", -// } -// -// Refreshable credentials will expire within the "ExpiryWindow" of the Expiration -// value in the response. The format of the refreshable credentials response: -// { -// "AccessKeyId" : "MUA...", -// "SecretAccessKey" : "/7PC5om....", -// "Token" : "AQoDY....=", -// "Expiration" : "2016-02-25T06:03:31Z" -// } -// -// Errors should be returned in the following format and only returned with 400 -// or 500 HTTP status codes. -// { -// "code": "ErrorCode", -// "message": "Helpful error message." -// } -package endpointcreds - -import ( - "encoding/json" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" -) - -// ProviderName is the name of the credentials provider. -const ProviderName = `CredentialsEndpointProvider` - -// Provider satisfies the credentials.Provider interface, and is a client to -// retrieve credentials from an arbitrary endpoint. -type Provider struct { - staticCreds bool - credentials.Expiry - - // Requires a AWS Client to make HTTP requests to the endpoint with. - // the Endpoint the request will be made to is provided by the aws.Config's - // Endpoint value. - Client *client.Client - - // ExpiryWindow will allow the credentials to trigger refreshing prior to - // the credentials actually expiring. This is beneficial so race conditions - // with expiring credentials do not cause request to fail unexpectedly - // due to ExpiredTokenException exceptions. - // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true - // 10 seconds before the credentials are actually expired. - // - // If ExpiryWindow is 0 or less it will be ignored. - ExpiryWindow time.Duration - - // Optional authorization token value if set will be used as the value of - // the Authorization header of the endpoint credential request. - AuthorizationToken string -} - -// NewProviderClient returns a credentials Provider for retrieving AWS credentials -// from arbitrary endpoint. -func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) credentials.Provider { - p := &Provider{ - Client: client.New( - cfg, - metadata.ClientInfo{ - ServiceName: "CredentialsEndpoint", - Endpoint: endpoint, - }, - handlers, - ), - } - - p.Client.Handlers.Unmarshal.PushBack(unmarshalHandler) - p.Client.Handlers.UnmarshalError.PushBack(unmarshalError) - p.Client.Handlers.Validate.Clear() - p.Client.Handlers.Validate.PushBack(validateEndpointHandler) - - for _, option := range options { - option(p) - } - - return p -} - -// NewCredentialsClient returns a pointer to a new Credentials object -// wrapping the endpoint credentials Provider. -func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) *credentials.Credentials { - return credentials.NewCredentials(NewProviderClient(cfg, handlers, endpoint, options...)) -} - -// IsExpired returns true if the credentials retrieved are expired, or not yet -// retrieved. -func (p *Provider) IsExpired() bool { - if p.staticCreds { - return false - } - return p.Expiry.IsExpired() -} - -// Retrieve will attempt to request the credentials from the endpoint the Provider -// was configured for. And error will be returned if the retrieval fails. -func (p *Provider) Retrieve() (credentials.Value, error) { - resp, err := p.getCredentials() - if err != nil { - return credentials.Value{ProviderName: ProviderName}, - awserr.New("CredentialsEndpointError", "failed to load credentials", err) - } - - if resp.Expiration != nil { - p.SetExpiration(*resp.Expiration, p.ExpiryWindow) - } else { - p.staticCreds = true - } - - return credentials.Value{ - AccessKeyID: resp.AccessKeyID, - SecretAccessKey: resp.SecretAccessKey, - SessionToken: resp.Token, - ProviderName: ProviderName, - }, nil -} - -type getCredentialsOutput struct { - Expiration *time.Time - AccessKeyID string - SecretAccessKey string - Token string -} - -type errorOutput struct { - Code string `json:"code"` - Message string `json:"message"` -} - -func (p *Provider) getCredentials() (*getCredentialsOutput, error) { - op := &request.Operation{ - Name: "GetCredentials", - HTTPMethod: "GET", - } - - out := &getCredentialsOutput{} - req := p.Client.NewRequest(op, nil, out) - req.HTTPRequest.Header.Set("Accept", "application/json") - if authToken := p.AuthorizationToken; len(authToken) != 0 { - req.HTTPRequest.Header.Set("Authorization", authToken) - } - - return out, req.Send() -} - -func validateEndpointHandler(r *request.Request) { - if len(r.ClientInfo.Endpoint) == 0 { - r.Error = aws.ErrMissingEndpoint - } -} - -func unmarshalHandler(r *request.Request) { - defer r.HTTPResponse.Body.Close() - - out := r.Data.(*getCredentialsOutput) - if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, - "failed to decode endpoint credentials", - err, - ) - } -} - -func unmarshalError(r *request.Request) { - defer r.HTTPResponse.Body.Close() - - var errOut errorOutput - err := jsonutil.UnmarshalJSONError(&errOut, r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, - "failed to decode error message", err), - r.HTTPResponse.StatusCode, - r.RequestID, - ) - return - } - - // Response body format is not consistent between metadata endpoints. - // Grab the error message as a string and include that as the source error - r.Error = awserr.New(errOut.Code, errOut.Message, nil) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -package credentials - -import ( - "os" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// EnvProviderName provides a name of Env provider -const EnvProviderName = "EnvProvider" - -var ( - // ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be - // found in the process's environment. - ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil) - - // ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key - // can't be found in the process's environment. - ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil) -) - -// A EnvProvider retrieves credentials from the environment variables of the -// running process. Environment credentials never expire. -// -// Environment variables used: -// -// * Access Key ID: AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY -// -// * Secret Access Key: AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY -type EnvProvider struct { - retrieved bool -} - -// NewEnvCredentials returns a pointer to a new Credentials object -// wrapping the environment variable provider. -func NewEnvCredentials() *Credentials { - return NewCredentials(&EnvProvider{}) -} - -// Retrieve retrieves the keys from the environment. -func (e *EnvProvider) Retrieve() (Value, error) { - e.retrieved = false - - id := os.Getenv("AWS_ACCESS_KEY_ID") - if id == "" { - id = os.Getenv("AWS_ACCESS_KEY") - } - - secret := os.Getenv("AWS_SECRET_ACCESS_KEY") - if secret == "" { - secret = os.Getenv("AWS_SECRET_KEY") - } - - if id == "" { - return Value{ProviderName: EnvProviderName}, ErrAccessKeyIDNotFound - } - - if secret == "" { - return Value{ProviderName: EnvProviderName}, ErrSecretAccessKeyNotFound - } - - e.retrieved = true - return Value{ - AccessKeyID: id, - SecretAccessKey: secret, - SessionToken: os.Getenv("AWS_SESSION_TOKEN"), - ProviderName: EnvProviderName, - }, nil -} - -// IsExpired returns if the credentials have been retrieved. -func (e *EnvProvider) IsExpired() bool { - return !e.retrieved -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -[default] -aws_access_key_id = accessKey -aws_secret_access_key = secret -aws_session_token = token - -[no_token] -aws_access_key_id = accessKey -aws_secret_access_key = secret - -[with_colon] -aws_access_key_id: accessKey -aws_secret_access_key: secret diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,425 +0,0 @@ -/* -Package processcreds is a credential Provider to retrieve `credential_process` -credentials. - -WARNING: The following describes a method of sourcing credentials from an external -process. This can potentially be dangerous, so proceed with caution. Other -credential providers should be preferred if at all possible. If using this -option, you should make sure that the config file is as locked down as possible -using security best practices for your operating system. - -You can use credentials from a `credential_process` in a variety of ways. - -One way is to setup your shared config file, located in the default -location, with the `credential_process` key and the command you want to be -called. You also need to set the AWS_SDK_LOAD_CONFIG environment variable -(e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file. - - [default] - credential_process = /command/to/call - -Creating a new session will use the credential process to retrieve credentials. -NOTE: If there are credentials in the profile you are using, the credential -process will not be used. - - // Initialize a session to load credentials. - sess, _ := session.NewSession(&aws.Config{ - Region: aws.String("us-east-1")}, - ) - - // Create S3 service client to use the credentials. - svc := s3.New(sess) - -Another way to use the `credential_process` method is by using -`credentials.NewCredentials()` and providing a command to be executed to -retrieve credentials: - - // Create credentials using the ProcessProvider. - creds := processcreds.NewCredentials("/path/to/command") - - // Create service client value configured for credentials. - svc := s3.New(sess, &aws.Config{Credentials: creds}) - -You can set a non-default timeout for the `credential_process` with another -constructor, `credentials.NewCredentialsTimeout()`, providing the timeout. To -set a one minute timeout: - - // Create credentials using the ProcessProvider. - creds := processcreds.NewCredentialsTimeout( - "/path/to/command", - time.Duration(500) * time.Millisecond) - -If you need more control, you can set any configurable options in the -credentials using one or more option functions. For example, you can set a two -minute timeout, a credential duration of 60 minutes, and a maximum stdout -buffer size of 2k. - - creds := processcreds.NewCredentials( - "/path/to/command", - func(opt *ProcessProvider) { - opt.Timeout = time.Duration(2) * time.Minute - opt.Duration = time.Duration(60) * time.Minute - opt.MaxBufSize = 2048 - }) - -You can also use your own `exec.Cmd`: - - // Create an exec.Cmd - myCommand := exec.Command("/path/to/command") - - // Create credentials using your exec.Cmd and custom timeout - creds := processcreds.NewCredentialsCommand( - myCommand, - func(opt *processcreds.ProcessProvider) { - opt.Timeout = time.Duration(1) * time.Second - }) -*/ -package processcreds - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "runtime" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/credentials" -) - -const ( - // ProviderName is the name this credentials provider will label any - // returned credentials Value with. - ProviderName = `ProcessProvider` - - // ErrCodeProcessProviderParse error parsing process output - ErrCodeProcessProviderParse = "ProcessProviderParseError" - - // ErrCodeProcessProviderVersion version error in output - ErrCodeProcessProviderVersion = "ProcessProviderVersionError" - - // ErrCodeProcessProviderRequired required attribute missing in output - ErrCodeProcessProviderRequired = "ProcessProviderRequiredError" - - // ErrCodeProcessProviderExecution execution of command failed - ErrCodeProcessProviderExecution = "ProcessProviderExecutionError" - - // errMsgProcessProviderTimeout process took longer than allowed - errMsgProcessProviderTimeout = "credential process timed out" - - // errMsgProcessProviderProcess process error - errMsgProcessProviderProcess = "error in credential_process" - - // errMsgProcessProviderParse problem parsing output - errMsgProcessProviderParse = "parse failed of credential_process output" - - // errMsgProcessProviderVersion version error in output - errMsgProcessProviderVersion = "wrong version in process output (not 1)" - - // errMsgProcessProviderMissKey missing access key id in output - errMsgProcessProviderMissKey = "missing AccessKeyId in process output" - - // errMsgProcessProviderMissSecret missing secret acess key in output - errMsgProcessProviderMissSecret = "missing SecretAccessKey in process output" - - // errMsgProcessProviderPrepareCmd prepare of command failed - errMsgProcessProviderPrepareCmd = "failed to prepare command" - - // errMsgProcessProviderEmptyCmd command must not be empty - errMsgProcessProviderEmptyCmd = "command must not be empty" - - // errMsgProcessProviderPipe failed to initialize pipe - errMsgProcessProviderPipe = "failed to initialize pipe" - - // DefaultDuration is the default amount of time in minutes that the - // credentials will be valid for. - DefaultDuration = time.Duration(15) * time.Minute - - // DefaultBufSize limits buffer size from growing to an enormous - // amount due to a faulty process. - DefaultBufSize = 1024 - - // DefaultTimeout default limit on time a process can run. - DefaultTimeout = time.Duration(1) * time.Minute -) - -// ProcessProvider satisfies the credentials.Provider interface, and is a -// client to retrieve credentials from a process. -type ProcessProvider struct { - staticCreds bool - credentials.Expiry - originalCommand []string - - // Expiry duration of the credentials. Defaults to 15 minutes if not set. - Duration time.Duration - - // ExpiryWindow will allow the credentials to trigger refreshing prior to - // the credentials actually expiring. This is beneficial so race conditions - // with expiring credentials do not cause request to fail unexpectedly - // due to ExpiredTokenException exceptions. - // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true - // 10 seconds before the credentials are actually expired. - // - // If ExpiryWindow is 0 or less it will be ignored. - ExpiryWindow time.Duration - - // A string representing an os command that should return a JSON with - // credential information. - command *exec.Cmd - - // MaxBufSize limits memory usage from growing to an enormous - // amount due to a faulty process. - MaxBufSize int - - // Timeout limits the time a process can run. - Timeout time.Duration -} - -// NewCredentials returns a pointer to a new Credentials object wrapping the -// ProcessProvider. The credentials will expire every 15 minutes by default. -func NewCredentials(command string, options ...func(*ProcessProvider)) *credentials.Credentials { - p := &ProcessProvider{ - command: exec.Command(command), - Duration: DefaultDuration, - Timeout: DefaultTimeout, - MaxBufSize: DefaultBufSize, - } - - for _, option := range options { - option(p) - } - - return credentials.NewCredentials(p) -} - -// NewCredentialsTimeout returns a pointer to a new Credentials object with -// the specified command and timeout, and default duration and max buffer size. -func NewCredentialsTimeout(command string, timeout time.Duration) *credentials.Credentials { - p := NewCredentials(command, func(opt *ProcessProvider) { - opt.Timeout = timeout - }) - - return p -} - -// NewCredentialsCommand returns a pointer to a new Credentials object with -// the specified command, and default timeout, duration and max buffer size. -func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessProvider)) *credentials.Credentials { - p := &ProcessProvider{ - command: command, - Duration: DefaultDuration, - Timeout: DefaultTimeout, - MaxBufSize: DefaultBufSize, - } - - for _, option := range options { - option(p) - } - - return credentials.NewCredentials(p) -} - -type credentialProcessResponse struct { - Version int - AccessKeyID string `json:"AccessKeyId"` - SecretAccessKey string - SessionToken string - Expiration *time.Time -} - -// Retrieve executes the 'credential_process' and returns the credentials. -func (p *ProcessProvider) Retrieve() (credentials.Value, error) { - out, err := p.executeCredentialProcess() - if err != nil { - return credentials.Value{ProviderName: ProviderName}, err - } - - // Serialize and validate response - resp := &credentialProcessResponse{} - if err = json.Unmarshal(out, resp); err != nil { - return credentials.Value{ProviderName: ProviderName}, awserr.New( - ErrCodeProcessProviderParse, - fmt.Sprintf("%s: %s", errMsgProcessProviderParse, string(out)), - err) - } - - if resp.Version != 1 { - return credentials.Value{ProviderName: ProviderName}, awserr.New( - ErrCodeProcessProviderVersion, - errMsgProcessProviderVersion, - nil) - } - - if len(resp.AccessKeyID) == 0 { - return credentials.Value{ProviderName: ProviderName}, awserr.New( - ErrCodeProcessProviderRequired, - errMsgProcessProviderMissKey, - nil) - } - - if len(resp.SecretAccessKey) == 0 { - return credentials.Value{ProviderName: ProviderName}, awserr.New( - ErrCodeProcessProviderRequired, - errMsgProcessProviderMissSecret, - nil) - } - - // Handle expiration - p.staticCreds = resp.Expiration == nil - if resp.Expiration != nil { - p.SetExpiration(*resp.Expiration, p.ExpiryWindow) - } - - return credentials.Value{ - ProviderName: ProviderName, - AccessKeyID: resp.AccessKeyID, - SecretAccessKey: resp.SecretAccessKey, - SessionToken: resp.SessionToken, - }, nil -} - -// IsExpired returns true if the credentials retrieved are expired, or not yet -// retrieved. -func (p *ProcessProvider) IsExpired() bool { - if p.staticCreds { - return false - } - return p.Expiry.IsExpired() -} - -// prepareCommand prepares the command to be executed. -func (p *ProcessProvider) prepareCommand() error { - - var cmdArgs []string - if runtime.GOOS == "windows" { - cmdArgs = []string{"cmd.exe", "/C"} - } else { - cmdArgs = []string{"sh", "-c"} - } - - if len(p.originalCommand) == 0 { - p.originalCommand = make([]string, len(p.command.Args)) - copy(p.originalCommand, p.command.Args) - - // check for empty command because it succeeds - if len(strings.TrimSpace(p.originalCommand[0])) < 1 { - return awserr.New( - ErrCodeProcessProviderExecution, - fmt.Sprintf( - "%s: %s", - errMsgProcessProviderPrepareCmd, - errMsgProcessProviderEmptyCmd), - nil) - } - } - - cmdArgs = append(cmdArgs, p.originalCommand...) - p.command = exec.Command(cmdArgs[0], cmdArgs[1:]...) - p.command.Env = os.Environ() - - return nil -} - -// executeCredentialProcess starts the credential process on the OS and -// returns the results or an error. -func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) { - - if err := p.prepareCommand(); err != nil { - return nil, err - } - - // Setup the pipes - outReadPipe, outWritePipe, err := os.Pipe() - if err != nil { - return nil, awserr.New( - ErrCodeProcessProviderExecution, - errMsgProcessProviderPipe, - err) - } - - p.command.Stderr = os.Stderr // display stderr on console for MFA - p.command.Stdout = outWritePipe // get creds json on process's stdout - p.command.Stdin = os.Stdin // enable stdin for MFA - - output := bytes.NewBuffer(make([]byte, 0, p.MaxBufSize)) - - stdoutCh := make(chan error, 1) - go readInput( - io.LimitReader(outReadPipe, int64(p.MaxBufSize)), - output, - stdoutCh) - - execCh := make(chan error, 1) - go executeCommand(*p.command, execCh) - - finished := false - var errors []error - for !finished { - select { - case readError := <-stdoutCh: - errors = appendError(errors, readError) - finished = true - case execError := <-execCh: - err := outWritePipe.Close() - errors = appendError(errors, err) - errors = appendError(errors, execError) - if errors != nil { - return output.Bytes(), awserr.NewBatchError( - ErrCodeProcessProviderExecution, - errMsgProcessProviderProcess, - errors) - } - case <-time.After(p.Timeout): - finished = true - return output.Bytes(), awserr.NewBatchError( - ErrCodeProcessProviderExecution, - errMsgProcessProviderTimeout, - errors) // errors can be nil - } - } - - out := output.Bytes() - - if runtime.GOOS == "windows" { - // windows adds slashes to quotes - out = []byte(strings.Replace(string(out), `\"`, `"`, -1)) - } - - return out, nil -} - -// appendError conveniently checks for nil before appending slice -func appendError(errors []error, err error) []error { - if err != nil { - return append(errors, err) - } - return errors -} - -func executeCommand(cmd exec.Cmd, exec chan error) { - // Start the command - err := cmd.Start() - if err == nil { - err = cmd.Wait() - } - - exec <- err -} - -func readInput(r io.Reader, w io.Writer, read chan error) { - tee := io.TeeReader(r, w) - - _, err := ioutil.ReadAll(tee) - - if err == io.EOF { - err = nil - } - - read <- err // will only arrive here when write end of pipe is closed -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -package credentials - -import ( - "fmt" - "os" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/internal/ini" - "github.com/aws/aws-sdk-go/internal/shareddefaults" -) - -// SharedCredsProviderName provides a name of SharedCreds provider -const SharedCredsProviderName = "SharedCredentialsProvider" - -var ( - // ErrSharedCredentialsHomeNotFound is emitted when the user directory cannot be found. - ErrSharedCredentialsHomeNotFound = awserr.New("UserHomeNotFound", "user home directory not found.", nil) -) - -// A SharedCredentialsProvider retrieves credentials from the current user's home -// directory, and keeps track if those credentials are expired. -// -// Profile ini file example: $HOME/.aws/credentials -type SharedCredentialsProvider struct { - // Path to the shared credentials file. - // - // If empty will look for "AWS_SHARED_CREDENTIALS_FILE" env variable. If the - // env value is empty will default to current user's home directory. - // Linux/OSX: "$HOME/.aws/credentials" - // Windows: "%USERPROFILE%\.aws\credentials" - Filename string - - // AWS Profile to extract credentials from the shared credentials file. If empty - // will default to environment variable "AWS_PROFILE" or "default" if - // environment variable is also not set. - Profile string - - // retrieved states if the credentials have been successfully retrieved. - retrieved bool -} - -// NewSharedCredentials returns a pointer to a new Credentials object -// wrapping the Profile file provider. -func NewSharedCredentials(filename, profile string) *Credentials { - return NewCredentials(&SharedCredentialsProvider{ - Filename: filename, - Profile: profile, - }) -} - -// Retrieve reads and extracts the shared credentials from the current -// users home directory. -func (p *SharedCredentialsProvider) Retrieve() (Value, error) { - p.retrieved = false - - filename, err := p.filename() - if err != nil { - return Value{ProviderName: SharedCredsProviderName}, err - } - - creds, err := loadProfile(filename, p.profile()) - if err != nil { - return Value{ProviderName: SharedCredsProviderName}, err - } - - p.retrieved = true - return creds, nil -} - -// IsExpired returns if the shared credentials have expired. -func (p *SharedCredentialsProvider) IsExpired() bool { - return !p.retrieved -} - -// loadProfiles loads from the file pointed to by shared credentials filename for profile. -// The credentials retrieved from the profile will be returned or error. Error will be -// returned if it fails to read from the file, or the data is invalid. -func loadProfile(filename, profile string) (Value, error) { - config, err := ini.OpenFile(filename) - if err != nil { - return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err) - } - - iniProfile, ok := config.GetSection(profile) - if !ok { - return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", nil) - } - - id := iniProfile.String("aws_access_key_id") - if len(id) == 0 { - return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey", - fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename), - nil) - } - - secret := iniProfile.String("aws_secret_access_key") - if len(secret) == 0 { - return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret", - fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename), - nil) - } - - // Default to empty string if not found - token := iniProfile.String("aws_session_token") - - return Value{ - AccessKeyID: id, - SecretAccessKey: secret, - SessionToken: token, - ProviderName: SharedCredsProviderName, - }, nil -} - -// filename returns the filename to use to read AWS shared credentials. -// -// Will return an error if the user's home directory path cannot be found. -func (p *SharedCredentialsProvider) filename() (string, error) { - if len(p.Filename) != 0 { - return p.Filename, nil - } - - if p.Filename = os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); len(p.Filename) != 0 { - return p.Filename, nil - } - - if home := shareddefaults.UserHomeDir(); len(home) == 0 { - // Backwards compatibility of home directly not found error being returned. - // This error is too verbose, failure when opening the file would of been - // a better error to return. - return "", ErrSharedCredentialsHomeNotFound - } - - p.Filename = shareddefaults.SharedCredentialsFilename() - - return p.Filename, nil -} - -// profile returns the AWS shared credentials profile. If empty will read -// environment variable "AWS_PROFILE". If that is not set profile will -// return "default". -func (p *SharedCredentialsProvider) profile() string { - if p.Profile == "" { - p.Profile = os.Getenv("AWS_PROFILE") - } - if p.Profile == "" { - p.Profile = "default" - } - - return p.Profile -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -package credentials - -import ( - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// StaticProviderName provides a name of Static provider -const StaticProviderName = "StaticProvider" - -var ( - // ErrStaticCredentialsEmpty is emitted when static credentials are empty. - ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil) -) - -// A StaticProvider is a set of credentials which are set programmatically, -// and will never expire. -type StaticProvider struct { - Value -} - -// NewStaticCredentials returns a pointer to a new Credentials object -// wrapping a static credentials value provider. -func NewStaticCredentials(id, secret, token string) *Credentials { - return NewCredentials(&StaticProvider{Value: Value{ - AccessKeyID: id, - SecretAccessKey: secret, - SessionToken: token, - }}) -} - -// NewStaticCredentialsFromCreds returns a pointer to a new Credentials object -// wrapping the static credentials value provide. Same as NewStaticCredentials -// but takes the creds Value instead of individual fields -func NewStaticCredentialsFromCreds(creds Value) *Credentials { - return NewCredentials(&StaticProvider{Value: creds}) -} - -// Retrieve returns the credentials or error if the credentials are invalid. -func (s *StaticProvider) Retrieve() (Value, error) { - if s.AccessKeyID == "" || s.SecretAccessKey == "" { - return Value{ProviderName: StaticProviderName}, ErrStaticCredentialsEmpty - } - - if len(s.Value.ProviderName) == 0 { - s.Value.ProviderName = StaticProviderName - } - return s.Value, nil -} - -// IsExpired returns if the credentials are expired. -// -// For StaticProvider, the credentials never expired. -func (s *StaticProvider) IsExpired() bool { - return false -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,312 +0,0 @@ -/* -Package stscreds are credential Providers to retrieve STS AWS credentials. - -STS provides multiple ways to retrieve credentials which can be used when making -future AWS service API operation calls. - -The SDK will ensure that per instance of credentials.Credentials all requests -to refresh the credentials will be synchronized. But, the SDK is unable to -ensure synchronous usage of the AssumeRoleProvider if the value is shared -between multiple Credentials, Sessions or service clients. - -Assume Role - -To assume an IAM role using STS with the SDK you can create a new Credentials -with the SDKs's stscreds package. - - // Initial credentials loaded from SDK's default credential chain. Such as - // the environment, shared credentials (~/.aws/credentials), or EC2 Instance - // Role. These credentials will be used to to make the STS Assume Role API. - sess := session.Must(session.NewSession()) - - // Create the credentials from AssumeRoleProvider to assume the role - // referenced by the "myRoleARN" ARN. - creds := stscreds.NewCredentials(sess, "myRoleArn") - - // Create service client value configured for credentials - // from assumed role. - svc := s3.New(sess, &aws.Config{Credentials: creds}) - -Assume Role with static MFA Token - -To assume an IAM role with a MFA token you can either specify a MFA token code -directly or provide a function to prompt the user each time the credentials -need to refresh the role's credentials. Specifying the TokenCode should be used -for short lived operations that will not need to be refreshed, and when you do -not want to have direct control over the user provides their MFA token. - -With TokenCode the AssumeRoleProvider will be not be able to refresh the role's -credentials. - - // Create the credentials from AssumeRoleProvider to assume the role - // referenced by the "myRoleARN" ARN using the MFA token code provided. - creds := stscreds.NewCredentials(sess, "myRoleArn", func(p *stscreds.AssumeRoleProvider) { - p.SerialNumber = aws.String("myTokenSerialNumber") - p.TokenCode = aws.String("00000000") - }) - - // Create service client value configured for credentials - // from assumed role. - svc := s3.New(sess, &aws.Config{Credentials: creds}) - -Assume Role with MFA Token Provider - -To assume an IAM role with MFA for longer running tasks where the credentials -may need to be refreshed setting the TokenProvider field of AssumeRoleProvider -will allow the credential provider to prompt for new MFA token code when the -role's credentials need to be refreshed. - -The StdinTokenProvider function is available to prompt on stdin to retrieve -the MFA token code from the user. You can also implement custom prompts by -satisfing the TokenProvider function signature. - -Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will -have undesirable results as the StdinTokenProvider will not be synchronized. A -single Credentials with an AssumeRoleProvider can be shared safely. - - // Create the credentials from AssumeRoleProvider to assume the role - // referenced by the "myRoleARN" ARN. Prompting for MFA token from stdin. - creds := stscreds.NewCredentials(sess, "myRoleArn", func(p *stscreds.AssumeRoleProvider) { - p.SerialNumber = aws.String("myTokenSerialNumber") - p.TokenProvider = stscreds.StdinTokenProvider - }) - - // Create service client value configured for credentials - // from assumed role. - svc := s3.New(sess, &aws.Config{Credentials: creds}) - -*/ -package stscreds - -import ( - "fmt" - "os" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/internal/sdkrand" - "github.com/aws/aws-sdk-go/service/sts" -) - -// StdinTokenProvider will prompt on stderr and read from stdin for a string value. -// An error is returned if reading from stdin fails. -// -// Use this function go read MFA tokens from stdin. The function makes no attempt -// to make atomic prompts from stdin across multiple gorouties. -// -// Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will -// have undesirable results as the StdinTokenProvider will not be synchronized. A -// single Credentials with an AssumeRoleProvider can be shared safely -// -// Will wait forever until something is provided on the stdin. -func StdinTokenProvider() (string, error) { - var v string - fmt.Fprintf(os.Stderr, "Assume Role MFA token code: ") - _, err := fmt.Scanln(&v) - - return v, err -} - -// ProviderName provides a name of AssumeRole provider -const ProviderName = "AssumeRoleProvider" - -// AssumeRoler represents the minimal subset of the STS client API used by this provider. -type AssumeRoler interface { - AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) -} - -// DefaultDuration is the default amount of time in minutes that the credentials -// will be valid for. -var DefaultDuration = time.Duration(15) * time.Minute - -// AssumeRoleProvider retrieves temporary credentials from the STS service, and -// keeps track of their expiration time. -// -// This credential provider will be used by the SDKs default credential change -// when shared configuration is enabled, and the shared config or shared credentials -// file configure assume role. See Session docs for how to do this. -// -// AssumeRoleProvider does not provide any synchronization and it is not safe -// to share this value across multiple Credentials, Sessions, or service clients -// without also sharing the same Credentials instance. -type AssumeRoleProvider struct { - credentials.Expiry - - // STS client to make assume role request with. - Client AssumeRoler - - // Role to be assumed. - RoleARN string - - // Session name, if you wish to reuse the credentials elsewhere. - RoleSessionName string - - // Expiry duration of the STS credentials. Defaults to 15 minutes if not set. - Duration time.Duration - - // Optional ExternalID to pass along, defaults to nil if not set. - ExternalID *string - - // The policy plain text must be 2048 bytes or shorter. However, an internal - // conversion compresses it into a packed binary format with a separate limit. - // The PackedPolicySize response element indicates by percentage how close to - // the upper size limit the policy is, with 100% equaling the maximum allowed - // size. - Policy *string - - // The identification number of the MFA device that is associated with the user - // who is making the AssumeRole call. Specify this value if the trust policy - // of the role being assumed includes a condition that requires MFA authentication. - // The value is either the serial number for a hardware device (such as GAHT12345678) - // or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user). - SerialNumber *string - - // The value provided by the MFA device, if the trust policy of the role being - // assumed requires MFA (that is, if the policy includes a condition that tests - // for MFA). If the role being assumed requires MFA and if the TokenCode value - // is missing or expired, the AssumeRole call returns an "access denied" error. - // - // If SerialNumber is set and neither TokenCode nor TokenProvider are also - // set an error will be returned. - TokenCode *string - - // Async method of providing MFA token code for assuming an IAM role with MFA. - // The value returned by the function will be used as the TokenCode in the Retrieve - // call. See StdinTokenProvider for a provider that prompts and reads from stdin. - // - // This token provider will be called when ever the assumed role's - // credentials need to be refreshed when SerialNumber is also set and - // TokenCode is not set. - // - // If both TokenCode and TokenProvider is set, TokenProvider will be used and - // TokenCode is ignored. - TokenProvider func() (string, error) - - // ExpiryWindow will allow the credentials to trigger refreshing prior to - // the credentials actually expiring. This is beneficial so race conditions - // with expiring credentials do not cause request to fail unexpectedly - // due to ExpiredTokenException exceptions. - // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true - // 10 seconds before the credentials are actually expired. - // - // If ExpiryWindow is 0 or less it will be ignored. - ExpiryWindow time.Duration - - // MaxJitterFrac reduces the effective Duration of each credential requested - // by a random percentage between 0 and MaxJitterFraction. MaxJitterFrac must - // have a value between 0 and 1. Any other value may lead to expected behavior. - // With a MaxJitterFrac value of 0, default) will no jitter will be used. - // - // For example, with a Duration of 30m and a MaxJitterFrac of 0.1, the - // AssumeRole call will be made with an arbitrary Duration between 27m and - // 30m. - // - // MaxJitterFrac should not be negative. - MaxJitterFrac float64 -} - -// NewCredentials returns a pointer to a new Credentials object wrapping the -// AssumeRoleProvider. The credentials will expire every 15 minutes and the -// role will be named after a nanosecond timestamp of this operation. -// -// Takes a Config provider to create the STS client. The ConfigProvider is -// satisfied by the session.Session type. -// -// It is safe to share the returned Credentials with multiple Sessions and -// service clients. All access to the credentials and refreshing them -// will be synchronized. -func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials { - p := &AssumeRoleProvider{ - Client: sts.New(c), - RoleARN: roleARN, - Duration: DefaultDuration, - } - - for _, option := range options { - option(p) - } - - return credentials.NewCredentials(p) -} - -// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping the -// AssumeRoleProvider. The credentials will expire every 15 minutes and the -// role will be named after a nanosecond timestamp of this operation. -// -// Takes an AssumeRoler which can be satisfied by the STS client. -// -// It is safe to share the returned Credentials with multiple Sessions and -// service clients. All access to the credentials and refreshing them -// will be synchronized. -func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials { - p := &AssumeRoleProvider{ - Client: svc, - RoleARN: roleARN, - Duration: DefaultDuration, - } - - for _, option := range options { - option(p) - } - - return credentials.NewCredentials(p) -} - -// Retrieve generates a new set of temporary credentials using STS. -func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) { - // Apply defaults where parameters are not set. - if p.RoleSessionName == "" { - // Try to work out a role name that will hopefully end up unique. - p.RoleSessionName = fmt.Sprintf("%d", time.Now().UTC().UnixNano()) - } - if p.Duration == 0 { - // Expire as often as AWS permits. - p.Duration = DefaultDuration - } - jitter := time.Duration(sdkrand.SeededRand.Float64() * p.MaxJitterFrac * float64(p.Duration)) - input := &sts.AssumeRoleInput{ - DurationSeconds: aws.Int64(int64((p.Duration - jitter) / time.Second)), - RoleArn: aws.String(p.RoleARN), - RoleSessionName: aws.String(p.RoleSessionName), - ExternalId: p.ExternalID, - } - if p.Policy != nil { - input.Policy = p.Policy - } - if p.SerialNumber != nil { - if p.TokenCode != nil { - input.SerialNumber = p.SerialNumber - input.TokenCode = p.TokenCode - } else if p.TokenProvider != nil { - input.SerialNumber = p.SerialNumber - code, err := p.TokenProvider() - if err != nil { - return credentials.Value{ProviderName: ProviderName}, err - } - input.TokenCode = aws.String(code) - } else { - return credentials.Value{ProviderName: ProviderName}, - awserr.New("AssumeRoleTokenNotAvailable", - "assume role with MFA enabled, but neither TokenCode nor TokenProvider are set", nil) - } - } - - roleOutput, err := p.Client.AssumeRole(input) - if err != nil { - return credentials.Value{ProviderName: ProviderName}, err - } - - // We will proactively generate new credentials before they expire. - p.SetExpiration(*roleOutput.Credentials.Expiration, p.ExpiryWindow) - - return credentials.Value{ - AccessKeyID: *roleOutput.Credentials.AccessKeyId, - SecretAccessKey: *roleOutput.Credentials.SecretAccessKey, - SessionToken: *roleOutput.Credentials.SessionToken, - ProviderName: ProviderName, - }, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -package stscreds - -import ( - "fmt" - "io/ioutil" - "strconv" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/service/sts" - "github.com/aws/aws-sdk-go/service/sts/stsiface" -) - -const ( - // ErrCodeWebIdentity will be used as an error code when constructing - // a new error to be returned during session creation or retrieval. - ErrCodeWebIdentity = "WebIdentityErr" - - // WebIdentityProviderName is the web identity provider name - WebIdentityProviderName = "WebIdentityCredentials" -) - -// now is used to return a time.Time object representing -// the current time. This can be used to easily test and -// compare test values. -var now = time.Now - -// WebIdentityRoleProvider is used to retrieve credentials using -// an OIDC token. -type WebIdentityRoleProvider struct { - credentials.Expiry - - client stsiface.STSAPI - ExpiryWindow time.Duration - - tokenFilePath string - roleARN string - roleSessionName string -} - -// NewWebIdentityCredentials will return a new set of credentials with a given -// configuration, role arn, and token file path. -func NewWebIdentityCredentials(c client.ConfigProvider, roleARN, roleSessionName, path string) *credentials.Credentials { - svc := sts.New(c) - p := NewWebIdentityRoleProvider(svc, roleARN, roleSessionName, path) - return credentials.NewCredentials(p) -} - -// NewWebIdentityRoleProvider will return a new WebIdentityRoleProvider with the -// provided stsiface.STSAPI -func NewWebIdentityRoleProvider(svc stsiface.STSAPI, roleARN, roleSessionName, path string) *WebIdentityRoleProvider { - return &WebIdentityRoleProvider{ - client: svc, - tokenFilePath: path, - roleARN: roleARN, - roleSessionName: roleSessionName, - } -} - -// Retrieve will attempt to assume a role from a token which is located at -// 'WebIdentityTokenFilePath' specified destination and if that is empty an -// error will be returned. -func (p *WebIdentityRoleProvider) Retrieve() (credentials.Value, error) { - b, err := ioutil.ReadFile(p.tokenFilePath) - if err != nil { - errMsg := fmt.Sprintf("unable to read file at %s", p.tokenFilePath) - return credentials.Value{}, awserr.New(ErrCodeWebIdentity, errMsg, err) - } - - sessionName := p.roleSessionName - if len(sessionName) == 0 { - // session name is used to uniquely identify a session. This simply - // uses unix time in nanoseconds to uniquely identify sessions. - sessionName = strconv.FormatInt(now().UnixNano(), 10) - } - req, resp := p.client.AssumeRoleWithWebIdentityRequest(&sts.AssumeRoleWithWebIdentityInput{ - RoleArn: &p.roleARN, - RoleSessionName: &sessionName, - WebIdentityToken: aws.String(string(b)), - }) - // InvalidIdentityToken error is a temporary error that can occur - // when assuming an Role with a JWT web identity token. - req.RetryErrorCodes = append(req.RetryErrorCodes, sts.ErrCodeInvalidIdentityTokenException) - if err := req.Send(); err != nil { - return credentials.Value{}, awserr.New(ErrCodeWebIdentity, "failed to retrieve credentials", err) - } - - p.SetExpiration(aws.TimeValue(resp.Credentials.Expiration), p.ExpiryWindow) - - value := credentials.Value{ - AccessKeyID: aws.StringValue(resp.Credentials.AccessKeyId), - SecretAccessKey: aws.StringValue(resp.Credentials.SecretAccessKey), - SessionToken: aws.StringValue(resp.Credentials.SessionToken), - ProviderName: WebIdentityProviderName, - } - return value, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -// Package csm provides the Client Side Monitoring (CSM) client which enables -// sending metrics via UDP connection to the CSM agent. This package provides -// control options, and configuration for the CSM client. The client can be -// controlled manually, or automatically via the SDK's Session configuration. -// -// Enabling CSM client via SDK's Session configuration -// -// The CSM client can be enabled automatically via SDK's Session configuration. -// The SDK's session configuration enables the CSM client if the AWS_CSM_PORT -// environment variable is set to a non-empty value. -// -// The configuration options for the CSM client via the SDK's session -// configuration are: -// -// * AWS_CSM_PORT= -// The port number the CSM agent will receive metrics on. -// -// * AWS_CSM_HOST= -// The hostname, or IP address the CSM agent will receive metrics on. -// Without port number. -// -// Manually enabling the CSM client -// -// The CSM client can be started, paused, and resumed manually. The Start -// function will enable the CSM client to publish metrics to the CSM agent. It -// is safe to call Start concurrently, but if Start is called additional times -// with different ClientID or address it will panic. -// -// r, err := csm.Start("clientID", ":31000") -// if err != nil { -// panic(fmt.Errorf("failed starting CSM: %v", err)) -// } -// -// When controlling the CSM client manually, you must also inject its request -// handlers into the SDK's Session configuration for the SDK's API clients to -// publish metrics. -// -// sess, err := session.NewSession(&aws.Config{}) -// if err != nil { -// panic(fmt.Errorf("failed loading session: %v", err)) -// } -// -// // Add CSM client's metric publishing request handlers to the SDK's -// // Session Configuration. -// r.InjectHandlers(&sess.Handlers) -// -// Controlling CSM client -// -// Once the CSM client has been enabled the Get function will return a Reporter -// value that you can use to pause and resume the metrics published to the CSM -// agent. If Get function is called before the reporter is enabled with the -// Start function or via SDK's Session configuration nil will be returned. -// -// The Pause method can be called to stop the CSM client publishing metrics to -// the CSM agent. The Continue method will resume metric publishing. -// -// // Get the CSM client Reporter. -// r := csm.Get() -// -// // Will pause monitoring -// r.Pause() -// resp, err = client.GetObject(&s3.GetObjectInput{ -// Bucket: aws.String("bucket"), -// Key: aws.String("key"), -// }) -// -// // Resume monitoring -// r.Continue() -package csm diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -package csm - -import ( - "fmt" - "strings" - "sync" -) - -var ( - lock sync.Mutex -) - -const ( - // DefaultPort is used when no port is specified. - DefaultPort = "31000" - - // DefaultHost is the host that will be used when none is specified. - DefaultHost = "127.0.0.1" -) - -// AddressWithDefaults returns a CSM address built from the host and port -// values. If the host or port is not set, default values will be used -// instead. If host is "localhost" it will be replaced with "127.0.0.1". -func AddressWithDefaults(host, port string) string { - if len(host) == 0 || strings.EqualFold(host, "localhost") { - host = DefaultHost - } - - if len(port) == 0 { - port = DefaultPort - } - - // Only IP6 host can contain a colon - if strings.Contains(host, ":") { - return "[" + host + "]:" + port - } - - return host + ":" + port -} - -// Start will start a long running go routine to capture -// client side metrics. Calling start multiple time will only -// start the metric listener once and will panic if a different -// client ID or port is passed in. -// -// r, err := csm.Start("clientID", "127.0.0.1:31000") -// if err != nil { -// panic(fmt.Errorf("expected no error, but received %v", err)) -// } -// sess := session.NewSession() -// r.InjectHandlers(sess.Handlers) -// -// svc := s3.New(sess) -// out, err := svc.GetObject(&s3.GetObjectInput{ -// Bucket: aws.String("bucket"), -// Key: aws.String("key"), -// }) -func Start(clientID string, url string) (*Reporter, error) { - lock.Lock() - defer lock.Unlock() - - if sender == nil { - sender = newReporter(clientID, url) - } else { - if sender.clientID != clientID { - panic(fmt.Errorf("inconsistent client IDs. %q was expected, but received %q", sender.clientID, clientID)) - } - - if sender.url != url { - panic(fmt.Errorf("inconsistent URLs. %q was expected, but received %q", sender.url, url)) - } - } - - if err := connect(url); err != nil { - sender = nil - return nil, err - } - - return sender, nil -} - -// Get will return a reporter if one exists, if one does not exist, nil will -// be returned. -func Get() *Reporter { - lock.Lock() - defer lock.Unlock() - - return sender -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -package csm - -import ( - "sync/atomic" -) - -const ( - runningEnum = iota - pausedEnum -) - -var ( - // MetricsChannelSize of metrics to hold in the channel - MetricsChannelSize = 100 -) - -type metricChan struct { - ch chan metric - paused *int64 -} - -func newMetricChan(size int) metricChan { - return metricChan{ - ch: make(chan metric, size), - paused: new(int64), - } -} - -func (ch *metricChan) Pause() { - atomic.StoreInt64(ch.paused, pausedEnum) -} - -func (ch *metricChan) Continue() { - atomic.StoreInt64(ch.paused, runningEnum) -} - -func (ch *metricChan) IsPaused() bool { - v := atomic.LoadInt64(ch.paused) - return v == pausedEnum -} - -// Push will push metrics to the metric channel if the channel -// is not paused -func (ch *metricChan) Push(m metric) bool { - if ch.IsPaused() { - return false - } - - select { - case ch.ch <- m: - return true - default: - return false - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -package csm - -type metricException interface { - Exception() string - Message() string -} - -type requestException struct { - exception string - message string -} - -func (e requestException) Exception() string { - return e.exception -} -func (e requestException) Message() string { - return e.message -} - -type awsException struct { - requestException -} - -type sdkException struct { - requestException -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -package csm - -import ( - "strconv" - "time" - - "github.com/aws/aws-sdk-go/aws" -) - -type metricTime time.Time - -func (t metricTime) MarshalJSON() ([]byte, error) { - ns := time.Duration(time.Time(t).UnixNano()) - return []byte(strconv.FormatInt(int64(ns/time.Millisecond), 10)), nil -} - -type metric struct { - ClientID *string `json:"ClientId,omitempty"` - API *string `json:"Api,omitempty"` - Service *string `json:"Service,omitempty"` - Timestamp *metricTime `json:"Timestamp,omitempty"` - Type *string `json:"Type,omitempty"` - Version *int `json:"Version,omitempty"` - - AttemptCount *int `json:"AttemptCount,omitempty"` - Latency *int `json:"Latency,omitempty"` - - Fqdn *string `json:"Fqdn,omitempty"` - UserAgent *string `json:"UserAgent,omitempty"` - AttemptLatency *int `json:"AttemptLatency,omitempty"` - - SessionToken *string `json:"SessionToken,omitempty"` - Region *string `json:"Region,omitempty"` - AccessKey *string `json:"AccessKey,omitempty"` - HTTPStatusCode *int `json:"HttpStatusCode,omitempty"` - XAmzID2 *string `json:"XAmzId2,omitempty"` - XAmzRequestID *string `json:"XAmznRequestId,omitempty"` - - AWSException *string `json:"AwsException,omitempty"` - AWSExceptionMessage *string `json:"AwsExceptionMessage,omitempty"` - SDKException *string `json:"SdkException,omitempty"` - SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"` - - FinalHTTPStatusCode *int `json:"FinalHttpStatusCode,omitempty"` - FinalAWSException *string `json:"FinalAwsException,omitempty"` - FinalAWSExceptionMessage *string `json:"FinalAwsExceptionMessage,omitempty"` - FinalSDKException *string `json:"FinalSdkException,omitempty"` - FinalSDKExceptionMessage *string `json:"FinalSdkExceptionMessage,omitempty"` - - DestinationIP *string `json:"DestinationIp,omitempty"` - ConnectionReused *int `json:"ConnectionReused,omitempty"` - - AcquireConnectionLatency *int `json:"AcquireConnectionLatency,omitempty"` - ConnectLatency *int `json:"ConnectLatency,omitempty"` - RequestLatency *int `json:"RequestLatency,omitempty"` - DNSLatency *int `json:"DnsLatency,omitempty"` - TCPLatency *int `json:"TcpLatency,omitempty"` - SSLLatency *int `json:"SslLatency,omitempty"` - - MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"` -} - -func (m *metric) TruncateFields() { - m.ClientID = truncateString(m.ClientID, 255) - m.UserAgent = truncateString(m.UserAgent, 256) - - m.AWSException = truncateString(m.AWSException, 128) - m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512) - - m.SDKException = truncateString(m.SDKException, 128) - m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512) - - m.FinalAWSException = truncateString(m.FinalAWSException, 128) - m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512) - - m.FinalSDKException = truncateString(m.FinalSDKException, 128) - m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512) -} - -func truncateString(v *string, l int) *string { - if v != nil && len(*v) > l { - nv := (*v)[:l] - return &nv - } - - return v -} - -func (m *metric) SetException(e metricException) { - switch te := e.(type) { - case awsException: - m.AWSException = aws.String(te.exception) - m.AWSExceptionMessage = aws.String(te.message) - case sdkException: - m.SDKException = aws.String(te.exception) - m.SDKExceptionMessage = aws.String(te.message) - } -} - -func (m *metric) SetFinalException(e metricException) { - switch te := e.(type) { - case awsException: - m.FinalAWSException = aws.String(te.exception) - m.FinalAWSExceptionMessage = aws.String(te.message) - case sdkException: - m.FinalSDKException = aws.String(te.exception) - m.FinalSDKExceptionMessage = aws.String(te.message) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,264 +0,0 @@ -package csm - -import ( - "encoding/json" - "net" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" -) - -// Reporter will gather metrics of API requests made and -// send those metrics to the CSM endpoint. -type Reporter struct { - clientID string - url string - conn net.Conn - metricsCh metricChan - done chan struct{} -} - -var ( - sender *Reporter -) - -func connect(url string) error { - const network = "udp" - if err := sender.connect(network, url); err != nil { - return err - } - - if sender.done == nil { - sender.done = make(chan struct{}) - go sender.start() - } - - return nil -} - -func newReporter(clientID, url string) *Reporter { - return &Reporter{ - clientID: clientID, - url: url, - metricsCh: newMetricChan(MetricsChannelSize), - } -} - -func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) { - if rep == nil { - return - } - - now := time.Now() - creds, _ := r.Config.Credentials.Get() - - m := metric{ - ClientID: aws.String(rep.clientID), - API: aws.String(r.Operation.Name), - Service: aws.String(r.ClientInfo.ServiceID), - Timestamp: (*metricTime)(&now), - UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")), - Region: r.Config.Region, - Type: aws.String("ApiCallAttempt"), - Version: aws.Int(1), - - XAmzRequestID: aws.String(r.RequestID), - - AttemptLatency: aws.Int(int(now.Sub(r.AttemptTime).Nanoseconds() / int64(time.Millisecond))), - AccessKey: aws.String(creds.AccessKeyID), - } - - if r.HTTPResponse != nil { - m.HTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode) - } - - if r.Error != nil { - if awserr, ok := r.Error.(awserr.Error); ok { - m.SetException(getMetricException(awserr)) - } - } - - m.TruncateFields() - rep.metricsCh.Push(m) -} - -func getMetricException(err awserr.Error) metricException { - msg := err.Error() - code := err.Code() - - switch code { - case "RequestError", - request.ErrCodeSerialization, - request.CanceledErrorCode: - return sdkException{ - requestException{exception: code, message: msg}, - } - default: - return awsException{ - requestException{exception: code, message: msg}, - } - } -} - -func (rep *Reporter) sendAPICallMetric(r *request.Request) { - if rep == nil { - return - } - - now := time.Now() - m := metric{ - ClientID: aws.String(rep.clientID), - API: aws.String(r.Operation.Name), - Service: aws.String(r.ClientInfo.ServiceID), - Timestamp: (*metricTime)(&now), - UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")), - Type: aws.String("ApiCall"), - AttemptCount: aws.Int(r.RetryCount + 1), - Region: r.Config.Region, - Latency: aws.Int(int(time.Since(r.Time) / time.Millisecond)), - XAmzRequestID: aws.String(r.RequestID), - MaxRetriesExceeded: aws.Int(boolIntValue(r.RetryCount >= r.MaxRetries())), - } - - if r.HTTPResponse != nil { - m.FinalHTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode) - } - - if r.Error != nil { - if awserr, ok := r.Error.(awserr.Error); ok { - m.SetFinalException(getMetricException(awserr)) - } - } - - m.TruncateFields() - - // TODO: Probably want to figure something out for logging dropped - // metrics - rep.metricsCh.Push(m) -} - -func (rep *Reporter) connect(network, url string) error { - if rep.conn != nil { - rep.conn.Close() - } - - conn, err := net.Dial(network, url) - if err != nil { - return awserr.New("UDPError", "Could not connect", err) - } - - rep.conn = conn - - return nil -} - -func (rep *Reporter) close() { - if rep.done != nil { - close(rep.done) - } - - rep.metricsCh.Pause() -} - -func (rep *Reporter) start() { - defer func() { - rep.metricsCh.Pause() - }() - - for { - select { - case <-rep.done: - rep.done = nil - return - case m := <-rep.metricsCh.ch: - // TODO: What to do with this error? Probably should just log - b, err := json.Marshal(m) - if err != nil { - continue - } - - rep.conn.Write(b) - } - } -} - -// Pause will pause the metric channel preventing any new metrics from being -// added. It is safe to call concurrently with other calls to Pause, but if -// called concurently with Continue can lead to unexpected state. -func (rep *Reporter) Pause() { - lock.Lock() - defer lock.Unlock() - - if rep == nil { - return - } - - rep.close() -} - -// Continue will reopen the metric channel and allow for monitoring to be -// resumed. It is safe to call concurrently with other calls to Continue, but -// if called concurently with Pause can lead to unexpected state. -func (rep *Reporter) Continue() { - lock.Lock() - defer lock.Unlock() - if rep == nil { - return - } - - if !rep.metricsCh.IsPaused() { - return - } - - rep.metricsCh.Continue() -} - -// Client side metric handler names -const ( - APICallMetricHandlerName = "awscsm.SendAPICallMetric" - APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric" -) - -// InjectHandlers will will enable client side metrics and inject the proper -// handlers to handle how metrics are sent. -// -// InjectHandlers is NOT safe to call concurrently. Calling InjectHandlers -// multiple times may lead to unexpected behavior, (e.g. duplicate metrics). -// -// // Start must be called in order to inject the correct handlers -// r, err := csm.Start("clientID", "127.0.0.1:8094") -// if err != nil { -// panic(fmt.Errorf("expected no error, but received %v", err)) -// } -// -// sess := session.NewSession() -// r.InjectHandlers(&sess.Handlers) -// -// // create a new service client with our client side metric session -// svc := s3.New(sess) -func (rep *Reporter) InjectHandlers(handlers *request.Handlers) { - if rep == nil { - return - } - - handlers.Complete.PushFrontNamed(request.NamedHandler{ - Name: APICallMetricHandlerName, - Fn: rep.sendAPICallMetric, - }) - - handlers.CompleteAttempt.PushFrontNamed(request.NamedHandler{ - Name: APICallAttemptMetricHandlerName, - Fn: rep.sendAPICallAttemptMetric, - }) -} - -// boolIntValue return 1 for true and 0 for false. -func boolIntValue(b bool) int { - if b { - return 1 - } - - return 0 -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -// Package defaults is a collection of helpers to retrieve the SDK's default -// configuration and handlers. -// -// Generally this package shouldn't be used directly, but session.Session -// instead. This package is useful when you need to reset the defaults -// of a session or service client to the SDK defaults before setting -// additional parameters. -package defaults - -import ( - "fmt" - "net" - "net/http" - "net/url" - "os" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/corehandlers" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds" - "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds" - "github.com/aws/aws-sdk-go/aws/ec2metadata" - "github.com/aws/aws-sdk-go/aws/endpoints" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/internal/shareddefaults" -) - -// A Defaults provides a collection of default values for SDK clients. -type Defaults struct { - Config *aws.Config - Handlers request.Handlers -} - -// Get returns the SDK's default values with Config and handlers pre-configured. -func Get() Defaults { - cfg := Config() - handlers := Handlers() - cfg.Credentials = CredChain(cfg, handlers) - - return Defaults{ - Config: cfg, - Handlers: handlers, - } -} - -// Config returns the default configuration without credentials. -// To retrieve a config with credentials also included use -// `defaults.Get().Config` instead. -// -// Generally you shouldn't need to use this method directly, but -// is available if you need to reset the configuration of an -// existing service client or session. -func Config() *aws.Config { - return aws.NewConfig(). - WithCredentials(credentials.AnonymousCredentials). - WithRegion(os.Getenv("AWS_REGION")). - WithHTTPClient(http.DefaultClient). - WithMaxRetries(aws.UseServiceDefaultRetries). - WithLogger(aws.NewDefaultLogger()). - WithLogLevel(aws.LogOff). - WithEndpointResolver(endpoints.DefaultResolver()) -} - -// Handlers returns the default request handlers. -// -// Generally you shouldn't need to use this method directly, but -// is available if you need to reset the request handlers of an -// existing service client or session. -func Handlers() request.Handlers { - var handlers request.Handlers - - handlers.Validate.PushBackNamed(corehandlers.ValidateEndpointHandler) - handlers.Validate.AfterEachFn = request.HandlerListStopOnError - handlers.Build.PushBackNamed(corehandlers.SDKVersionUserAgentHandler) - handlers.Build.PushBackNamed(corehandlers.AddHostExecEnvUserAgentHander) - handlers.Build.AfterEachFn = request.HandlerListStopOnError - handlers.Sign.PushBackNamed(corehandlers.BuildContentLengthHandler) - handlers.Send.PushBackNamed(corehandlers.ValidateReqSigHandler) - handlers.Send.PushBackNamed(corehandlers.SendHandler) - handlers.AfterRetry.PushBackNamed(corehandlers.AfterRetryHandler) - handlers.ValidateResponse.PushBackNamed(corehandlers.ValidateResponseHandler) - - return handlers -} - -// CredChain returns the default credential chain. -// -// Generally you shouldn't need to use this method directly, but -// is available if you need to reset the credentials of an -// existing service client or session's Config. -func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials { - return credentials.NewCredentials(&credentials.ChainProvider{ - VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), - Providers: CredProviders(cfg, handlers), - }) -} - -// CredProviders returns the slice of providers used in -// the default credential chain. -// -// For applications that need to use some other provider (for example use -// different environment variables for legacy reasons) but still fall back -// on the default chain of providers. This allows that default chaint to be -// automatically updated -func CredProviders(cfg *aws.Config, handlers request.Handlers) []credentials.Provider { - return []credentials.Provider{ - &credentials.EnvProvider{}, - &credentials.SharedCredentialsProvider{Filename: "", Profile: ""}, - RemoteCredProvider(*cfg, handlers), - } -} - -const ( - httpProviderAuthorizationEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN" - httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI" -) - -// RemoteCredProvider returns a credentials provider for the default remote -// endpoints such as EC2 or ECS Roles. -func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider { - if u := os.Getenv(httpProviderEnvVar); len(u) > 0 { - return localHTTPCredProvider(cfg, handlers, u) - } - - if uri := os.Getenv(shareddefaults.ECSCredsProviderEnvVar); len(uri) > 0 { - u := fmt.Sprintf("%s%s", shareddefaults.ECSContainerCredentialsURI, uri) - return httpCredProvider(cfg, handlers, u) - } - - return ec2RoleProvider(cfg, handlers) -} - -var lookupHostFn = net.LookupHost - -func isLoopbackHost(host string) (bool, error) { - ip := net.ParseIP(host) - if ip != nil { - return ip.IsLoopback(), nil - } - - // Host is not an ip, perform lookup - addrs, err := lookupHostFn(host) - if err != nil { - return false, err - } - for _, addr := range addrs { - if !net.ParseIP(addr).IsLoopback() { - return false, nil - } - } - - return true, nil -} - -func localHTTPCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider { - var errMsg string - - parsed, err := url.Parse(u) - if err != nil { - errMsg = fmt.Sprintf("invalid URL, %v", err) - } else { - host := aws.URLHostname(parsed) - if len(host) == 0 { - errMsg = "unable to parse host from local HTTP cred provider URL" - } else if isLoopback, loopbackErr := isLoopbackHost(host); loopbackErr != nil { - errMsg = fmt.Sprintf("failed to resolve host %q, %v", host, loopbackErr) - } else if !isLoopback { - errMsg = fmt.Sprintf("invalid endpoint host, %q, only loopback hosts are allowed.", host) - } - } - - if len(errMsg) > 0 { - if cfg.Logger != nil { - cfg.Logger.Log("Ignoring, HTTP credential provider", errMsg, err) - } - return credentials.ErrorProvider{ - Err: awserr.New("CredentialsEndpointError", errMsg, err), - ProviderName: endpointcreds.ProviderName, - } - } - - return httpCredProvider(cfg, handlers, u) -} - -func httpCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider { - return endpointcreds.NewProviderClient(cfg, handlers, u, - func(p *endpointcreds.Provider) { - p.ExpiryWindow = 5 * time.Minute - p.AuthorizationToken = os.Getenv(httpProviderAuthorizationEnvVar) - }, - ) -} - -func ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider { - resolver := cfg.EndpointResolver - if resolver == nil { - resolver = endpoints.DefaultResolver() - } - - e, _ := resolver.EndpointFor(endpoints.Ec2metadataServiceID, "") - return &ec2rolecreds.EC2RoleProvider{ - Client: ec2metadata.NewClient(cfg, handlers, e.URL, e.SigningRegion), - ExpiryWindow: 5 * time.Minute, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -package defaults - -import ( - "github.com/aws/aws-sdk-go/internal/shareddefaults" -) - -// SharedCredentialsFilename returns the SDK's default file path -// for the shared credentials file. -// -// Builds the shared config file path based on the OS's platform. -// -// - Linux/Unix: $HOME/.aws/credentials -// - Windows: %USERPROFILE%\.aws\credentials -func SharedCredentialsFilename() string { - return shareddefaults.SharedCredentialsFilename() -} - -// SharedConfigFilename returns the SDK's default file path for -// the shared config file. -// -// Builds the shared config file path based on the OS's platform. -// -// - Linux/Unix: $HOME/.aws/config -// - Windows: %USERPROFILE%\.aws\config -func SharedConfigFilename() string { - return shareddefaults.SharedConfigFilename() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -// Package aws provides the core SDK's utilities and shared types. Use this package's -// utilities to simplify setting and reading API operations parameters. -// -// Value and Pointer Conversion Utilities -// -// This package includes a helper conversion utility for each scalar type the SDK's -// API use. These utilities make getting a pointer of the scalar, and dereferencing -// a pointer easier. -// -// Each conversion utility comes in two forms. Value to Pointer and Pointer to Value. -// The Pointer to value will safely dereference the pointer and return its value. -// If the pointer was nil, the scalar's zero value will be returned. -// -// The value to pointer functions will be named after the scalar type. So get a -// *string from a string value use the "String" function. This makes it easy to -// to get pointer of a literal string value, because getting the address of a -// literal requires assigning the value to a variable first. -// -// var strPtr *string -// -// // Without the SDK's conversion functions -// str := "my string" -// strPtr = &str -// -// // With the SDK's conversion functions -// strPtr = aws.String("my string") -// -// // Convert *string to string value -// str = aws.StringValue(strPtr) -// -// In addition to scalars the aws package also includes conversion utilities for -// map and slice for commonly types used in API parameters. The map and slice -// conversion functions use similar naming pattern as the scalar conversion -// functions. -// -// var strPtrs []*string -// var strs []string = []string{"Go", "Gophers", "Go"} -// -// // Convert []string to []*string -// strPtrs = aws.StringSlice(strs) -// -// // Convert []*string to []string -// strs = aws.StringValueSlice(strPtrs) -// -// SDK Default HTTP Client -// -// The SDK will use the http.DefaultClient if a HTTP client is not provided to -// the SDK's Session, or service client constructor. This means that if the -// http.DefaultClient is modified by other components of your application the -// modifications will be picked up by the SDK as well. -// -// In some cases this might be intended, but it is a better practice to create -// a custom HTTP Client to share explicitly through your application. You can -// configure the SDK to use the custom HTTP Client by setting the HTTPClient -// value of the SDK's Config type when creating a Session or service client. -package aws diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,199 +0,0 @@ -package ec2metadata - -import ( - "encoding/json" - "fmt" - "net/http" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/internal/sdkuri" -) - -// getToken uses the duration to return a token for EC2 metadata service, -// or an error if the request failed. -func (c *EC2Metadata) getToken(duration time.Duration) (tokenOutput, error) { - op := &request.Operation{ - Name: "GetToken", - HTTPMethod: "PUT", - HTTPPath: "/api/token", - } - - var output tokenOutput - req := c.NewRequest(op, nil, &output) - - // remove the fetch token handler from the request handlers to avoid infinite recursion - req.Handlers.Sign.RemoveByName(fetchTokenHandlerName) - - // Swap the unmarshalMetadataHandler with unmarshalTokenHandler on this request. - req.Handlers.Unmarshal.Swap(unmarshalMetadataHandlerName, unmarshalTokenHandler) - - ttl := strconv.FormatInt(int64(duration / time.Second),10) - req.HTTPRequest.Header.Set(ttlHeader, ttl) - - err := req.Send() - - // Errors with bad request status should be returned. - if err != nil { - err = awserr.NewRequestFailure( - awserr.New(req.HTTPResponse.Status, http.StatusText(req.HTTPResponse.StatusCode), err), - req.HTTPResponse.StatusCode, req.RequestID) - } - - return output, err -} - -// GetMetadata uses the path provided to request information from the EC2 -// instance metadata service. The content will be returned as a string, or -// error if the request failed. -func (c *EC2Metadata) GetMetadata(p string) (string, error) { - op := &request.Operation{ - Name: "GetMetadata", - HTTPMethod: "GET", - HTTPPath: sdkuri.PathJoin("/meta-data", p), - } - output := &metadataOutput{} - - req := c.NewRequest(op, nil, output) - - err := req.Send() - return output.Content, err -} - -// GetUserData returns the userdata that was configured for the service. If -// there is no user-data setup for the EC2 instance a "NotFoundError" error -// code will be returned. -func (c *EC2Metadata) GetUserData() (string, error) { - op := &request.Operation{ - Name: "GetUserData", - HTTPMethod: "GET", - HTTPPath: "/user-data", - } - - output := &metadataOutput{} - req := c.NewRequest(op, nil, output) - - err := req.Send() - return output.Content, err -} - -// GetDynamicData uses the path provided to request information from the EC2 -// instance metadata service for dynamic data. The content will be returned -// as a string, or error if the request failed. -func (c *EC2Metadata) GetDynamicData(p string) (string, error) { - op := &request.Operation{ - Name: "GetDynamicData", - HTTPMethod: "GET", - HTTPPath: sdkuri.PathJoin("/dynamic", p), - } - - output := &metadataOutput{} - req := c.NewRequest(op, nil, output) - - err := req.Send() - return output.Content, err -} - -// GetInstanceIdentityDocument retrieves an identity document describing an -// instance. Error is returned if the request fails or is unable to parse -// the response. -func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentityDocument, error) { - resp, err := c.GetDynamicData("instance-identity/document") - if err != nil { - return EC2InstanceIdentityDocument{}, - awserr.New("EC2MetadataRequestError", - "failed to get EC2 instance identity document", err) - } - - doc := EC2InstanceIdentityDocument{} - if err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil { - return EC2InstanceIdentityDocument{}, - awserr.New(request.ErrCodeSerialization, - "failed to decode EC2 instance identity document", err) - } - - return doc, nil -} - -// IAMInfo retrieves IAM info from the metadata API -func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) { - resp, err := c.GetMetadata("iam/info") - if err != nil { - return EC2IAMInfo{}, - awserr.New("EC2MetadataRequestError", - "failed to get EC2 IAM info", err) - } - - info := EC2IAMInfo{} - if err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil { - return EC2IAMInfo{}, - awserr.New(request.ErrCodeSerialization, - "failed to decode EC2 IAM info", err) - } - - if info.Code != "Success" { - errMsg := fmt.Sprintf("failed to get EC2 IAM Info (%s)", info.Code) - return EC2IAMInfo{}, - awserr.New("EC2MetadataError", errMsg, nil) - } - - return info, nil -} - -// Region returns the region the instance is running in. -func (c *EC2Metadata) Region() (string, error) { - resp, err := c.GetMetadata("placement/availability-zone") - if err != nil { - return "", err - } - - if len(resp) == 0 { - return "", awserr.New("EC2MetadataError", "invalid Region response", nil) - } - - // returns region without the suffix. Eg: us-west-2a becomes us-west-2 - return resp[:len(resp)-1], nil -} - -// Available returns if the application has access to the EC2 Metadata service. -// Can be used to determine if application is running within an EC2 Instance and -// the metadata service is available. -func (c *EC2Metadata) Available() bool { - if _, err := c.GetMetadata("instance-id"); err != nil { - return false - } - - return true -} - -// An EC2IAMInfo provides the shape for unmarshaling -// an IAM info from the metadata API -type EC2IAMInfo struct { - Code string - LastUpdated time.Time - InstanceProfileArn string - InstanceProfileID string -} - -// An EC2InstanceIdentityDocument provides the shape for unmarshaling -// an instance identity document -type EC2InstanceIdentityDocument struct { - DevpayProductCodes []string `json:"devpayProductCodes"` - MarketplaceProductCodes []string `json:"marketplaceProductCodes"` - AvailabilityZone string `json:"availabilityZone"` - PrivateIP string `json:"privateIp"` - Version string `json:"version"` - Region string `json:"region"` - InstanceID string `json:"instanceId"` - BillingProducts []string `json:"billingProducts"` - InstanceType string `json:"instanceType"` - AccountID string `json:"accountId"` - PendingTime time.Time `json:"pendingTime"` - ImageID string `json:"imageId"` - KernelID string `json:"kernelId"` - RamdiskID string `json:"ramdiskId"` - Architecture string `json:"architecture"` -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ -// Package ec2metadata provides the client for making API calls to the -// EC2 Metadata service. -// -// This package's client can be disabled completely by setting the environment -// variable "AWS_EC2_METADATA_DISABLED=true". This environment variable set to -// true instructs the SDK to disable the EC2 Metadata client. The client cannot -// be used while the environment variable is set to true, (case insensitive). -package ec2metadata - -import ( - "bytes" - "errors" - "io" - "net/http" - "os" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/corehandlers" - "github.com/aws/aws-sdk-go/aws/request" -) - -const ( - // ServiceName is the name of the service. - ServiceName = "ec2metadata" - disableServiceEnvVar = "AWS_EC2_METADATA_DISABLED" - - // Headers for Token and TTL - ttlHeader = "x-aws-ec2-metadata-token-ttl-seconds" - tokenHeader = "x-aws-ec2-metadata-token" - - // Named Handler constants - fetchTokenHandlerName = "FetchTokenHandler" - unmarshalMetadataHandlerName = "unmarshalMetadataHandler" - unmarshalTokenHandlerName = "unmarshalTokenHandler" - enableTokenProviderHandlerName = "enableTokenProviderHandler" - - // TTL constants - defaultTTL = 21600 * time.Second - ttlExpirationWindow = 30 * time.Second -) - -// A EC2Metadata is an EC2 Metadata service Client. -type EC2Metadata struct { - *client.Client -} - -// New creates a new instance of the EC2Metadata client with a session. -// This client is safe to use across multiple goroutines. -// -// -// Example: -// // Create a EC2Metadata client from just a session. -// svc := ec2metadata.New(mySession) -// -// // Create a EC2Metadata client with additional configuration -// svc := ec2metadata.New(mySession, aws.NewConfig().WithLogLevel(aws.LogDebugHTTPBody)) -func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata { - c := p.ClientConfig(ServiceName, cfgs...) - return NewClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion) -} - -// NewClient returns a new EC2Metadata client. Should be used to create -// a client when not using a session. Generally using just New with a session -// is preferred. -// -// If an unmodified HTTP client is provided from the stdlib default, or no client -// the EC2RoleProvider's EC2Metadata HTTP client's timeout will be shortened. -// To disable this set Config.EC2MetadataDisableTimeoutOverride to false. Enabled by default. -func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion string, opts ...func(*client.Client)) *EC2Metadata { - if !aws.BoolValue(cfg.EC2MetadataDisableTimeoutOverride) && httpClientZero(cfg.HTTPClient) { - // If the http client is unmodified and this feature is not disabled - // set custom timeouts for EC2Metadata requests. - cfg.HTTPClient = &http.Client{ - // use a shorter timeout than default because the metadata - // service is local if it is running, and to fail faster - // if not running on an ec2 instance. - Timeout: 5 * time.Second, - } - } - - svc := &EC2Metadata{ - Client: client.New( - cfg, - metadata.ClientInfo{ - ServiceName: ServiceName, - ServiceID: ServiceName, - Endpoint: endpoint, - APIVersion: "latest", - }, - handlers, - ), - } - - // token provider instance - tp := newTokenProvider(svc, defaultTTL) - - // NamedHandler for fetching token - svc.Handlers.Sign.PushBackNamed(request.NamedHandler{ - Name: fetchTokenHandlerName, - Fn: tp.fetchTokenHandler, - }) - // NamedHandler for enabling token provider - svc.Handlers.Complete.PushBackNamed(request.NamedHandler{ - Name: enableTokenProviderHandlerName, - Fn: tp.enableTokenProviderHandler, - }) - - svc.Handlers.Unmarshal.PushBackNamed(unmarshalHandler) - svc.Handlers.UnmarshalError.PushBack(unmarshalError) - svc.Handlers.Validate.Clear() - svc.Handlers.Validate.PushBack(validateEndpointHandler) - - // Disable the EC2 Metadata service if the environment variable is set. - // This short-circuits the service's functionality to always fail to send - // requests. - if strings.ToLower(os.Getenv(disableServiceEnvVar)) == "true" { - svc.Handlers.Send.SwapNamed(request.NamedHandler{ - Name: corehandlers.SendHandler.Name, - Fn: func(r *request.Request) { - r.HTTPResponse = &http.Response{ - Header: http.Header{}, - } - r.Error = awserr.New( - request.CanceledErrorCode, - "EC2 IMDS access disabled via "+disableServiceEnvVar+" env var", - nil) - }, - }) - } - - // Add additional options to the service config - for _, option := range opts { - option(svc.Client) - } - return svc -} - -func httpClientZero(c *http.Client) bool { - return c == nil || (c.Transport == nil && c.CheckRedirect == nil && c.Jar == nil && c.Timeout == 0) -} - -type metadataOutput struct { - Content string -} - -type tokenOutput struct { - Token string - TTL time.Duration -} - -// unmarshal token handler is used to parse the response of a getToken operation -var unmarshalTokenHandler = request.NamedHandler{ - Name: unmarshalTokenHandlerName, - Fn: func(r *request.Request) { - defer r.HTTPResponse.Body.Close() - var b bytes.Buffer - if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { - r.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization, - "unable to unmarshal EC2 metadata response", err), r.HTTPResponse.StatusCode, r.RequestID) - return - } - - v := r.HTTPResponse.Header.Get(ttlHeader) - data, ok := r.Data.(*tokenOutput) - if !ok { - return - } - - data.Token = b.String() - // TTL is in seconds - i, err := strconv.ParseInt(v, 10, 64) - if err != nil { - r.Error = awserr.NewRequestFailure(awserr.New(request.ParamFormatErrCode, - "unable to parse EC2 token TTL response", err), r.HTTPResponse.StatusCode, r.RequestID) - return - } - t := time.Duration(i) * time.Second - data.TTL = t - }, -} - -var unmarshalHandler = request.NamedHandler{ - Name: unmarshalMetadataHandlerName, - Fn: func(r *request.Request) { - defer r.HTTPResponse.Body.Close() - var b bytes.Buffer - if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { - r.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization, - "unable to unmarshal EC2 metadata response", err), r.HTTPResponse.StatusCode, r.RequestID) - return - } - - if data, ok := r.Data.(*metadataOutput); ok { - data.Content = b.String() - } - }, -} - -func unmarshalError(r *request.Request) { - defer r.HTTPResponse.Body.Close() - var b bytes.Buffer - - if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { - r.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, "unable to unmarshal EC2 metadata error response", err), - r.HTTPResponse.StatusCode, r.RequestID) - return - } - - // Response body format is not consistent between metadata endpoints. - // Grab the error message as a string and include that as the source error - r.Error = awserr.NewRequestFailure(awserr.New("EC2MetadataError", "failed to make EC2Metadata request", errors.New(b.String())), - r.HTTPResponse.StatusCode, r.RequestID) -} - -func validateEndpointHandler(r *request.Request) { - if r.ClientInfo.Endpoint == "" { - r.Error = aws.ErrMissingEndpoint - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -package ec2metadata - -import ( - "net/http" - "sync/atomic" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/request" -) - -// A tokenProvider struct provides access to EC2Metadata client -// and atomic instance of a token, along with configuredTTL for it. -// tokenProvider also provides an atomic flag to disable the -// fetch token operation. -// The disabled member will use 0 as false, and 1 as true. -type tokenProvider struct { - client *EC2Metadata - token atomic.Value - configuredTTL time.Duration - disabled uint32 -} - -// A ec2Token struct helps use of token in EC2 Metadata service ops -type ec2Token struct { - token string - credentials.Expiry -} - -// newTokenProvider provides a pointer to a tokenProvider instance -func newTokenProvider(c *EC2Metadata, duration time.Duration) *tokenProvider { - return &tokenProvider{client: c, configuredTTL: duration} -} - -// fetchTokenHandler fetches token for EC2Metadata service client by default. -func (t *tokenProvider) fetchTokenHandler(r *request.Request) { - - // short-circuits to insecure data flow if tokenProvider is disabled. - if v := atomic.LoadUint32(&t.disabled); v == 1 { - return - } - - if ec2Token, ok := t.token.Load().(ec2Token); ok && !ec2Token.IsExpired() { - r.HTTPRequest.Header.Set(tokenHeader, ec2Token.token) - return - } - - output, err := t.client.getToken(t.configuredTTL) - - if err != nil { - - // change the disabled flag on token provider to true, - // when error is request timeout error. - if requestFailureError, ok := err.(awserr.RequestFailure); ok { - switch requestFailureError.StatusCode() { - case http.StatusForbidden, http.StatusNotFound, http.StatusMethodNotAllowed: - atomic.StoreUint32(&t.disabled, 1) - case http.StatusBadRequest: - r.Error = requestFailureError - } - - // Check if request timed out while waiting for response - if e, ok := requestFailureError.OrigErr().(awserr.Error); ok { - if e.Code() == "RequestError" { - atomic.StoreUint32(&t.disabled, 1) - } - } - } - return - } - - newToken := ec2Token{ - token: output.Token, - } - newToken.SetExpiration(time.Now().Add(output.TTL), ttlExpirationWindow) - t.token.Store(newToken) - - // Inject token header to the request. - if ec2Token, ok := t.token.Load().(ec2Token); ok { - r.HTTPRequest.Header.Set(tokenHeader, ec2Token.token) - } -} - -// enableTokenProviderHandler enables the token provider -func (t *tokenProvider) enableTokenProviderHandler(r *request.Request) { - // If the error code status is 401, we enable the token provider - if e, ok := r.Error.(awserr.RequestFailure); ok && e != nil && - e.StatusCode() == http.StatusUnauthorized { - atomic.StoreUint32(&t.disabled, 0) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -package endpoints - -import ( - "encoding/json" - "fmt" - "io" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -type modelDefinition map[string]json.RawMessage - -// A DecodeModelOptions are the options for how the endpoints model definition -// are decoded. -type DecodeModelOptions struct { - SkipCustomizations bool -} - -// Set combines all of the option functions together. -func (d *DecodeModelOptions) Set(optFns ...func(*DecodeModelOptions)) { - for _, fn := range optFns { - fn(d) - } -} - -// DecodeModel unmarshals a Regions and Endpoint model definition file into -// a endpoint Resolver. If the file format is not supported, or an error occurs -// when unmarshaling the model an error will be returned. -// -// Casting the return value of this func to a EnumPartitions will -// allow you to get a list of the partitions in the order the endpoints -// will be resolved in. -// -// resolver, err := endpoints.DecodeModel(reader) -// -// partitions := resolver.(endpoints.EnumPartitions).Partitions() -// for _, p := range partitions { -// // ... inspect partitions -// } -func DecodeModel(r io.Reader, optFns ...func(*DecodeModelOptions)) (Resolver, error) { - var opts DecodeModelOptions - opts.Set(optFns...) - - // Get the version of the partition file to determine what - // unmarshaling model to use. - modelDef := modelDefinition{} - if err := json.NewDecoder(r).Decode(&modelDef); err != nil { - return nil, newDecodeModelError("failed to decode endpoints model", err) - } - - var version string - if b, ok := modelDef["version"]; ok { - version = string(b) - } else { - return nil, newDecodeModelError("endpoints version not found in model", nil) - } - - if version == "3" { - return decodeV3Endpoints(modelDef, opts) - } - - return nil, newDecodeModelError( - fmt.Sprintf("endpoints version %s, not supported", version), nil) -} - -func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resolver, error) { - b, ok := modelDef["partitions"] - if !ok { - return nil, newDecodeModelError("endpoints model missing partitions", nil) - } - - ps := partitions{} - if err := json.Unmarshal(b, &ps); err != nil { - return nil, newDecodeModelError("failed to decode endpoints model", err) - } - - if opts.SkipCustomizations { - return ps, nil - } - - // Customization - for i := 0; i < len(ps); i++ { - p := &ps[i] - custAddEC2Metadata(p) - custAddS3DualStack(p) - custRegionalS3(p) - custRmIotDataService(p) - custFixAppAutoscalingChina(p) - custFixAppAutoscalingUsGov(p) - } - - return ps, nil -} - -func custAddS3DualStack(p *partition) { - if p.ID != "aws" { - return - } - - custAddDualstack(p, "s3") - custAddDualstack(p, "s3-control") -} - -func custRegionalS3(p *partition) { - if p.ID != "aws" { - return - } - - service, ok := p.Services["s3"] - if !ok { - return - } - - // If global endpoint already exists no customization needed. - if _, ok := service.Endpoints["aws-global"]; ok { - return - } - - service.PartitionEndpoint = "aws-global" - service.Endpoints["us-east-1"] = endpoint{} - service.Endpoints["aws-global"] = endpoint{ - Hostname: "s3.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - } - - p.Services["s3"] = service -} - -func custAddDualstack(p *partition, svcName string) { - s, ok := p.Services[svcName] - if !ok { - return - } - - s.Defaults.HasDualStack = boxedTrue - s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}" - - p.Services[svcName] = s -} - -func custAddEC2Metadata(p *partition) { - p.Services["ec2metadata"] = service{ - IsRegionalized: boxedFalse, - PartitionEndpoint: "aws-global", - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, - }, - }, - } -} - -func custRmIotDataService(p *partition) { - delete(p.Services, "data.iot") -} - -func custFixAppAutoscalingChina(p *partition) { - if p.ID != "aws-cn" { - return - } - - const serviceName = "application-autoscaling" - s, ok := p.Services[serviceName] - if !ok { - return - } - - const expectHostname = `autoscaling.{region}.amazonaws.com` - if e, a := s.Defaults.Hostname, expectHostname; e != a { - fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a) - return - } - - s.Defaults.Hostname = expectHostname + ".cn" - p.Services[serviceName] = s -} - -func custFixAppAutoscalingUsGov(p *partition) { - if p.ID != "aws-us-gov" { - return - } - - const serviceName = "application-autoscaling" - s, ok := p.Services[serviceName] - if !ok { - return - } - - if a := s.Defaults.CredentialScope.Service; a != "" { - fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty credential scope service, got %s\n", a) - return - } - - if a := s.Defaults.Hostname; a != "" { - fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty hostname, got %s\n", a) - return - } - - s.Defaults.CredentialScope.Service = "application-autoscaling" - s.Defaults.Hostname = "autoscaling.{region}.amazonaws.com" - - p.Services[serviceName] = s -} - -type decodeModelError struct { - awsError -} - -func newDecodeModelError(msg string, err error) decodeModelError { - return decodeModelError{ - awsError: awserr.New("DecodeEndpointsModelError", msg, err), - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,6098 +0,0 @@ -// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT. - -package endpoints - -import ( - "regexp" -) - -// Partition identifiers -const ( - AwsPartitionID = "aws" // AWS Standard partition. - AwsCnPartitionID = "aws-cn" // AWS China partition. - AwsUsGovPartitionID = "aws-us-gov" // AWS GovCloud (US) partition. - AwsIsoPartitionID = "aws-iso" // AWS ISO (US) partition. - AwsIsoBPartitionID = "aws-iso-b" // AWS ISOB (US) partition. -) - -// AWS Standard partition's regions. -const ( - ApEast1RegionID = "ap-east-1" // Asia Pacific (Hong Kong). - ApNortheast1RegionID = "ap-northeast-1" // Asia Pacific (Tokyo). - ApNortheast2RegionID = "ap-northeast-2" // Asia Pacific (Seoul). - ApSouth1RegionID = "ap-south-1" // Asia Pacific (Mumbai). - ApSoutheast1RegionID = "ap-southeast-1" // Asia Pacific (Singapore). - ApSoutheast2RegionID = "ap-southeast-2" // Asia Pacific (Sydney). - CaCentral1RegionID = "ca-central-1" // Canada (Central). - EuCentral1RegionID = "eu-central-1" // EU (Frankfurt). - EuNorth1RegionID = "eu-north-1" // EU (Stockholm). - EuWest1RegionID = "eu-west-1" // EU (Ireland). - EuWest2RegionID = "eu-west-2" // EU (London). - EuWest3RegionID = "eu-west-3" // EU (Paris). - MeSouth1RegionID = "me-south-1" // Middle East (Bahrain). - SaEast1RegionID = "sa-east-1" // South America (Sao Paulo). - UsEast1RegionID = "us-east-1" // US East (N. Virginia). - UsEast2RegionID = "us-east-2" // US East (Ohio). - UsWest1RegionID = "us-west-1" // US West (N. California). - UsWest2RegionID = "us-west-2" // US West (Oregon). -) - -// AWS China partition's regions. -const ( - CnNorth1RegionID = "cn-north-1" // China (Beijing). - CnNorthwest1RegionID = "cn-northwest-1" // China (Ningxia). -) - -// AWS GovCloud (US) partition's regions. -const ( - UsGovEast1RegionID = "us-gov-east-1" // AWS GovCloud (US-East). - UsGovWest1RegionID = "us-gov-west-1" // AWS GovCloud (US). -) - -// AWS ISO (US) partition's regions. -const ( - UsIsoEast1RegionID = "us-iso-east-1" // US ISO East. -) - -// AWS ISOB (US) partition's regions. -const ( - UsIsobEast1RegionID = "us-isob-east-1" // US ISOB East (Ohio). -) - -// DefaultResolver returns an Endpoint resolver that will be able -// to resolve endpoints for: AWS Standard, AWS China, AWS GovCloud (US), AWS ISO (US), and AWS ISOB (US). -// -// Use DefaultPartitions() to get the list of the default partitions. -func DefaultResolver() Resolver { - return defaultPartitions -} - -// DefaultPartitions returns a list of the partitions the SDK is bundled -// with. The available partitions are: AWS Standard, AWS China, AWS GovCloud (US), AWS ISO (US), and AWS ISOB (US). -// -// partitions := endpoints.DefaultPartitions -// for _, p := range partitions { -// // ... inspect partitions -// } -func DefaultPartitions() []Partition { - return defaultPartitions.Partitions() -} - -var defaultPartitions = partitions{ - awsPartition, - awscnPartition, - awsusgovPartition, - awsisoPartition, - awsisobPartition, -} - -// AwsPartition returns the Resolver for AWS Standard. -func AwsPartition() Partition { - return awsPartition.Partition() -} - -var awsPartition = partition{ - ID: "aws", - Name: "AWS Standard", - DNSSuffix: "amazonaws.com", - RegionRegex: regionRegex{ - Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^(us|eu|ap|sa|ca|me)\\-\\w+\\-\\d+$") - return reg - }(), - }, - Defaults: endpoint{ - Hostname: "{service}.{region}.{dnsSuffix}", - Protocols: []string{"https"}, - SignatureVersions: []string{"v4"}, - }, - Regions: regions{ - "ap-east-1": region{ - Description: "Asia Pacific (Hong Kong)", - }, - "ap-northeast-1": region{ - Description: "Asia Pacific (Tokyo)", - }, - "ap-northeast-2": region{ - Description: "Asia Pacific (Seoul)", - }, - "ap-south-1": region{ - Description: "Asia Pacific (Mumbai)", - }, - "ap-southeast-1": region{ - Description: "Asia Pacific (Singapore)", - }, - "ap-southeast-2": region{ - Description: "Asia Pacific (Sydney)", - }, - "ca-central-1": region{ - Description: "Canada (Central)", - }, - "eu-central-1": region{ - Description: "EU (Frankfurt)", - }, - "eu-north-1": region{ - Description: "EU (Stockholm)", - }, - "eu-west-1": region{ - Description: "EU (Ireland)", - }, - "eu-west-2": region{ - Description: "EU (London)", - }, - "eu-west-3": region{ - Description: "EU (Paris)", - }, - "me-south-1": region{ - Description: "Middle East (Bahrain)", - }, - "sa-east-1": region{ - Description: "South America (Sao Paulo)", - }, - "us-east-1": region{ - Description: "US East (N. Virginia)", - }, - "us-east-2": region{ - Description: "US East (Ohio)", - }, - "us-west-1": region{ - Description: "US West (N. California)", - }, - "us-west-2": region{ - Description: "US West (Oregon)", - }, - }, - Services: services{ - "a4b": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "acm": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "acm-pca": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "api.ecr": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{ - Hostname: "api.ecr.ap-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-east-1", - }, - }, - "ap-northeast-1": endpoint{ - Hostname: "api.ecr.ap-northeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-1", - }, - }, - "ap-northeast-2": endpoint{ - Hostname: "api.ecr.ap-northeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-2", - }, - }, - "ap-south-1": endpoint{ - Hostname: "api.ecr.ap-south-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-south-1", - }, - }, - "ap-southeast-1": endpoint{ - Hostname: "api.ecr.ap-southeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "api.ecr.ap-southeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "ca-central-1": endpoint{ - Hostname: "api.ecr.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{ - Hostname: "api.ecr.eu-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-north-1": endpoint{ - Hostname: "api.ecr.eu-north-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-north-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "api.ecr.eu-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "api.ecr.eu-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "eu-west-3": endpoint{ - Hostname: "api.ecr.eu-west-3.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-3", - }, - }, - "me-south-1": endpoint{ - Hostname: "api.ecr.me-south-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "me-south-1", - }, - }, - "sa-east-1": endpoint{ - Hostname: "api.ecr.sa-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "sa-east-1", - }, - }, - "us-east-1": endpoint{ - Hostname: "api.ecr.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "api.ecr.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{ - Hostname: "api.ecr.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{ - Hostname: "api.ecr.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "api.mediatailor": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "api.pricing": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "pricing", - }, - }, - Endpoints: endpoints{ - "ap-south-1": endpoint{}, - "us-east-1": endpoint{}, - }, - }, - "api.sagemaker": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "api-fips.sagemaker.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "api-fips.sagemaker.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "api-fips.sagemaker.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "api-fips.sagemaker.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "apigateway": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "application-autoscaling": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "appmesh": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "appstream2": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - CredentialScope: credentialScope{ - Service: "appstream", - }, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "fips": endpoint{ - Hostname: "appstream2-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "appsync": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "athena": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "autoscaling": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "autoscaling-plans": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "backup": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "batch": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "budgets": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "budgets.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "ce": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "ce.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "chime": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - Defaults: endpoint{ - SSLCommonName: "service.chime.aws.amazon.com", - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "service.chime.aws.amazon.com", - Protocols: []string{"https"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "cloud9": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "clouddirectory": service{ - - Endpoints: endpoints{ - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cloudformation": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cloudfront": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "cloudfront.amazonaws.com", - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "cloudhsm": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cloudhsmv2": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "cloudhsm", - }, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cloudsearch": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cloudtrail": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "codebuild": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "codebuild-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "codebuild-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "codebuild-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "codebuild-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "codecommit": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips": endpoint{ - Hostname: "codecommit-fips.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "codedeploy": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "codedeploy-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "codedeploy-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "codedeploy-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "codedeploy-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "codepipeline": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "codestar": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cognito-identity": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cognito-idp": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cognito-sync": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "comprehend": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "comprehendmedical": service{ - - Endpoints: endpoints{ - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "config": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "connect": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "cur": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "data.mediastore": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "dataexchange": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "datapipeline": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "datasync": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips-us-east-1": endpoint{ - Hostname: "datasync-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "fips-us-east-2": endpoint{ - Hostname: "datasync-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "fips-us-west-1": endpoint{ - Hostname: "datasync-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "fips-us-west-2": endpoint{ - Hostname: "datasync-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "dax": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "devicefarm": service{ - - Endpoints: endpoints{ - "us-west-2": endpoint{}, - }, - }, - "directconnect": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "discovery": service{ - - Endpoints: endpoints{ - "eu-central-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "dms": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "docdb": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{ - Hostname: "rds.ap-northeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-1", - }, - }, - "ap-northeast-2": endpoint{ - Hostname: "rds.ap-northeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-2", - }, - }, - "ap-south-1": endpoint{ - Hostname: "rds.ap-south-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-south-1", - }, - }, - "ap-southeast-1": endpoint{ - Hostname: "rds.ap-southeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "rds.ap-southeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "eu-central-1": endpoint{ - Hostname: "rds.eu-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "rds.eu-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "rds.eu-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "eu-west-3": endpoint{ - Hostname: "rds.eu-west-3.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-3", - }, - }, - "us-east-1": endpoint{ - Hostname: "rds.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "rds.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-2": endpoint{ - Hostname: "rds.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "ds": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "ca-central-1-fips": endpoint{ - Hostname: "dynamodb-fips.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "local": endpoint{ - Hostname: "localhost:8000", - Protocols: []string{"http"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "dynamodb-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "dynamodb-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "dynamodb-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "dynamodb-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "ec2": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "ec2metadata": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, - }, - }, - }, - "ecs": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elasticache": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips": endpoint{ - Hostname: "elasticache-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elasticbeanstalk": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elasticfilesystem": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elasticloadbalancing": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elasticmapreduce": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.{service}.{dnsSuffix}", - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{ - SSLCommonName: "{service}.{region}.{dnsSuffix}", - }, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - SSLCommonName: "{service}.{region}.{dnsSuffix}", - }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elastictranscoder": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "email": service{ - - Endpoints: endpoints{ - "ap-south-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "entitlement.marketplace": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "aws-marketplace", - }, - }, - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "es": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips": endpoint{ - Hostname: "es-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "events": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "firehose": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "fms": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "forecast": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "forecastquery": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "fsx": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "gamelift": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "glacier": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "glue": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "greengrass": service{ - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "groundstation": service{ - - Endpoints: endpoints{ - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "guardduty": service{ - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "guardduty-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "guardduty-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "guardduty-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "guardduty-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "health": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "iam": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "iam.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "importexport": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "importexport.amazonaws.com", - SignatureVersions: []string{"v2", "v4"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - Service: "IngestionService", - }, - }, - }, - }, - "inspector": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "iot": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "execute-api", - }, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "iotanalytics": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "iotevents": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "ioteventsdata": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{ - Hostname: "data.iotevents.ap-northeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-1", - }, - }, - "ap-northeast-2": endpoint{ - Hostname: "data.iotevents.ap-northeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-2", - }, - }, - "ap-southeast-1": endpoint{ - Hostname: "data.iotevents.ap-southeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "data.iotevents.ap-southeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "eu-central-1": endpoint{ - Hostname: "data.iotevents.eu-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "data.iotevents.eu-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "data.iotevents.eu-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "us-east-1": endpoint{ - Hostname: "data.iotevents.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "data.iotevents.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-2": endpoint{ - Hostname: "data.iotevents.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "iotthingsgraph": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "iotthingsgraph", - }, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "kafka": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "kinesis": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "kinesisanalytics": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "kinesisvideo": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "kms": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "lakeformation": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "lambda": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "license-manager": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "lightsail": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "logs": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "machinelearning": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - }, - }, - "marketplacecommerceanalytics": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "mediaconnect": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mediaconvert": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "medialive": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mediapackage": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mediastore": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "metering.marketplace": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "aws-marketplace", - }, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mgh": service{ - - Endpoints: endpoints{ - "eu-central-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mobileanalytics": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "models.lex": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "lex", - }, - }, - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "monitoring": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mq": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips-us-east-1": endpoint{ - Hostname: "mq-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "fips-us-east-2": endpoint{ - Hostname: "mq-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "fips-us-west-1": endpoint{ - Hostname: "mq-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "fips-us-west-2": endpoint{ - Hostname: "mq-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "mturk-requester": service{ - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "sandbox": endpoint{ - Hostname: "mturk-requester-sandbox.us-east-1.amazonaws.com", - }, - "us-east-1": endpoint{}, - }, - }, - "neptune": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{ - Hostname: "rds.ap-northeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-1", - }, - }, - "ap-northeast-2": endpoint{ - Hostname: "rds.ap-northeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-2", - }, - }, - "ap-south-1": endpoint{ - Hostname: "rds.ap-south-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-south-1", - }, - }, - "ap-southeast-1": endpoint{ - Hostname: "rds.ap-southeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "rds.ap-southeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "ca-central-1": endpoint{ - Hostname: "rds.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{ - Hostname: "rds.eu-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-north-1": endpoint{ - Hostname: "rds.eu-north-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-north-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "rds.eu-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "rds.eu-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "me-south-1": endpoint{ - Hostname: "rds.me-south-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "me-south-1", - }, - }, - "us-east-1": endpoint{ - Hostname: "rds.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "rds.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-2": endpoint{ - Hostname: "rds.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "oidc": service{ - - Endpoints: endpoints{ - "ap-southeast-1": endpoint{ - Hostname: "oidc.ap-southeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "oidc.ap-southeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "ca-central-1": endpoint{ - Hostname: "oidc.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{ - Hostname: "oidc.eu-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "oidc.eu-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "oidc.eu-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "us-east-1": endpoint{ - Hostname: "oidc.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "oidc.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-2": endpoint{ - Hostname: "oidc.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "opsworks": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "opsworks-cm": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "organizations": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "organizations.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "pinpoint": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "mobiletargeting", - }, - }, - Endpoints: endpoints{ - "ap-south-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "polly": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "portal.sso": service{ - - Endpoints: endpoints{ - "ap-southeast-1": endpoint{ - Hostname: "portal.sso.ap-southeast-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "portal.sso.ap-southeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "ca-central-1": endpoint{ - Hostname: "portal.sso.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{ - Hostname: "portal.sso.eu-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "portal.sso.eu-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "portal.sso.eu-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "us-east-1": endpoint{ - Hostname: "portal.sso.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "portal.sso.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-2": endpoint{ - Hostname: "portal.sso.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "projects.iot1click": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "qldb": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "ram": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "rds": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - SSLCommonName: "{service}.{dnsSuffix}", - }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "redshift": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "rekognition": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "resource-groups": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips-us-east-1": endpoint{ - Hostname: "resource-groups-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "fips-us-east-2": endpoint{ - Hostname: "resource-groups-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "fips-us-west-1": endpoint{ - Hostname: "resource-groups-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "fips-us-west-2": endpoint{ - Hostname: "resource-groups-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "robomaker": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "route53": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "route53.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "route53domains": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "route53resolver": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "runtime.lex": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "lex", - }, - }, - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "runtime.sagemaker": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "runtime-fips.sagemaker.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "runtime-fips.sagemaker.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "runtime-fips.sagemaker.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "runtime-fips.sagemaker.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "s3": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"s3v4"}, - - HasDualStack: boxedTrue, - DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{ - Hostname: "s3.ap-northeast-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{ - Hostname: "s3.ap-southeast-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - "ap-southeast-2": endpoint{ - Hostname: "s3.ap-southeast-2.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - "aws-global": endpoint{ - Hostname: "s3.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{ - Hostname: "s3.eu-west-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "s3-external-1": endpoint{ - Hostname: "s3-external-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "sa-east-1": endpoint{ - Hostname: "s3.sa-east-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{ - Hostname: "s3.us-west-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - "us-west-2": endpoint{ - Hostname: "s3.us-west-2.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - }, - }, - "s3-control": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - SignatureVersions: []string{"s3v4"}, - - HasDualStack: boxedTrue, - DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{ - Hostname: "s3-control.ap-northeast-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "ap-northeast-1", - }, - }, - "ap-northeast-2": endpoint{ - Hostname: "s3-control.ap-northeast-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "ap-northeast-2", - }, - }, - "ap-south-1": endpoint{ - Hostname: "s3-control.ap-south-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "ap-south-1", - }, - }, - "ap-southeast-1": endpoint{ - Hostname: "s3-control.ap-southeast-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "ap-southeast-1", - }, - }, - "ap-southeast-2": endpoint{ - Hostname: "s3-control.ap-southeast-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "ap-southeast-2", - }, - }, - "ca-central-1": endpoint{ - Hostname: "s3-control.ca-central-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{ - Hostname: "s3-control.eu-central-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "eu-central-1", - }, - }, - "eu-north-1": endpoint{ - Hostname: "s3-control.eu-north-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "eu-north-1", - }, - }, - "eu-west-1": endpoint{ - Hostname: "s3-control.eu-west-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "eu-west-1", - }, - }, - "eu-west-2": endpoint{ - Hostname: "s3-control.eu-west-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "eu-west-2", - }, - }, - "eu-west-3": endpoint{ - Hostname: "s3-control.eu-west-3.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "eu-west-3", - }, - }, - "sa-east-1": endpoint{ - Hostname: "s3-control.sa-east-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "sa-east-1", - }, - }, - "us-east-1": endpoint{ - Hostname: "s3-control.us-east-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-1-fips": endpoint{ - Hostname: "s3-control-fips.us-east-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{ - Hostname: "s3-control.us-east-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-east-2-fips": endpoint{ - Hostname: "s3-control-fips.us-east-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{ - Hostname: "s3-control.us-west-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-1-fips": endpoint{ - Hostname: "s3-control-fips.us-west-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{ - Hostname: "s3-control.us-west-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - "us-west-2-fips": endpoint{ - Hostname: "s3-control-fips.us-west-2.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "savingsplans": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "savingsplans.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "sdb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"v2"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - Hostname: "sdb.amazonaws.com", - }, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "secretsmanager": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "secretsmanager-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "secretsmanager-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "secretsmanager-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "secretsmanager-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "securityhub": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "serverlessrepo": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{ - Protocols: []string{"https"}, - }, - "ap-northeast-1": endpoint{ - Protocols: []string{"https"}, - }, - "ap-northeast-2": endpoint{ - Protocols: []string{"https"}, - }, - "ap-south-1": endpoint{ - Protocols: []string{"https"}, - }, - "ap-southeast-1": endpoint{ - Protocols: []string{"https"}, - }, - "ap-southeast-2": endpoint{ - Protocols: []string{"https"}, - }, - "ca-central-1": endpoint{ - Protocols: []string{"https"}, - }, - "eu-central-1": endpoint{ - Protocols: []string{"https"}, - }, - "eu-north-1": endpoint{ - Protocols: []string{"https"}, - }, - "eu-west-1": endpoint{ - Protocols: []string{"https"}, - }, - "eu-west-2": endpoint{ - Protocols: []string{"https"}, - }, - "eu-west-3": endpoint{ - Protocols: []string{"https"}, - }, - "me-south-1": endpoint{ - Protocols: []string{"https"}, - }, - "sa-east-1": endpoint{ - Protocols: []string{"https"}, - }, - "us-east-1": endpoint{ - Protocols: []string{"https"}, - }, - "us-east-2": endpoint{ - Protocols: []string{"https"}, - }, - "us-west-1": endpoint{ - Protocols: []string{"https"}, - }, - "us-west-2": endpoint{ - Protocols: []string{"https"}, - }, - }, - }, - "servicecatalog": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "servicecatalog-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "servicecatalog-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "servicecatalog-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "servicecatalog-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "servicediscovery": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "session.qldb": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "shield": service{ - IsRegionalized: boxedFalse, - Defaults: endpoint{ - SSLCommonName: "shield.us-east-1.amazonaws.com", - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "sms": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "snowball": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "sns": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "sqs": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "fips-us-east-1": endpoint{ - Hostname: "sqs-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "fips-us-east-2": endpoint{ - Hostname: "sqs-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "fips-us-west-1": endpoint{ - Hostname: "sqs-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "fips-us-west-2": endpoint{ - Hostname: "sqs-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - SSLCommonName: "queue.{dnsSuffix}", - }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "ssm": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "states": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "storagegateway": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "streams.dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Service: "dynamodb", - }, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "ca-central-1-fips": endpoint{ - Hostname: "dynamodb-fips.ca-central-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ca-central-1", - }, - }, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "local": endpoint{ - Hostname: "localhost:8000", - Protocols: []string{"http"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "dynamodb-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "dynamodb-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "dynamodb-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "dynamodb-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "sts": service{ - PartitionEndpoint: "aws-global", - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "aws-global": endpoint{ - Hostname: "sts.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "sts-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "sts-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-1": endpoint{}, - "us-west-1-fips": endpoint{ - Hostname: "sts-fips.us-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-1", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "sts-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "support": service{ - PartitionEndpoint: "aws-global", - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "support.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "swf": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "tagging": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "transcribe": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "transcribestreaming": service{ - - Endpoints: endpoints{ - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "transfer": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "translate": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-1-fips": endpoint{ - Hostname: "translate-fips.us-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "us-east-2": endpoint{}, - "us-east-2-fips": endpoint{ - Hostname: "translate-fips.us-east-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-2", - }, - }, - "us-west-2": endpoint{}, - "us-west-2-fips": endpoint{ - Hostname: "translate-fips.us-west-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-west-2", - }, - }, - }, - }, - "waf": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "waf.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "waf-regional": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "workdocs": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "workmail": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "workspaces": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "xray": service{ - - Endpoints: endpoints{ - "ap-east-1": endpoint{}, - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-north-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "eu-west-3": endpoint{}, - "me-south-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - }, -} - -// AwsCnPartition returns the Resolver for AWS China. -func AwsCnPartition() Partition { - return awscnPartition.Partition() -} - -var awscnPartition = partition{ - ID: "aws-cn", - Name: "AWS China", - DNSSuffix: "amazonaws.com.cn", - RegionRegex: regionRegex{ - Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^cn\\-\\w+\\-\\d+$") - return reg - }(), - }, - Defaults: endpoint{ - Hostname: "{service}.{region}.{dnsSuffix}", - Protocols: []string{"https"}, - SignatureVersions: []string{"v4"}, - }, - Regions: regions{ - "cn-north-1": region{ - Description: "China (Beijing)", - }, - "cn-northwest-1": region{ - Description: "China (Ningxia)", - }, - }, - Services: services{ - "api.ecr": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{ - Hostname: "api.ecr.cn-north-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-north-1", - }, - }, - "cn-northwest-1": endpoint{ - Hostname: "api.ecr.cn-northwest-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-northwest-1", - }, - }, - }, - }, - "apigateway": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "application-autoscaling": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "autoscaling": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "batch": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "cloudformation": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "cloudfront": service{ - PartitionEndpoint: "aws-cn-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-cn-global": endpoint{ - Hostname: "cloudfront.cn-northwest-1.amazonaws.com.cn", - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Region: "cn-northwest-1", - }, - }, - }, - }, - "cloudtrail": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "codebuild": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "codedeploy": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "cognito-identity": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - }, - }, - "config": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "dax": service{ - - Endpoints: endpoints{ - "cn-northwest-1": endpoint{}, - }, - }, - "directconnect": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "dms": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "ds": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "ec2": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "ec2metadata": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, - }, - }, - }, - "ecs": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "elasticache": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "elasticbeanstalk": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "elasticloadbalancing": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "elasticmapreduce": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "es": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "events": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "firehose": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "gamelift": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - }, - }, - "glacier": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "glue": service{ - - Endpoints: endpoints{ - "cn-northwest-1": endpoint{}, - }, - }, - "greengrass": service{ - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - }, - }, - "iam": service{ - PartitionEndpoint: "aws-cn-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-cn-global": endpoint{ - Hostname: "iam.cn-north-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-north-1", - }, - }, - }, - }, - "iot": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "execute-api", - }, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "kinesis": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "kms": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "lambda": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "license-manager": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "logs": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "mediaconvert": service{ - - Endpoints: endpoints{ - "cn-northwest-1": endpoint{ - Hostname: "subscribe.mediaconvert.cn-northwest-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-northwest-1", - }, - }, - }, - }, - "monitoring": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "polly": service{ - - Endpoints: endpoints{ - "cn-northwest-1": endpoint{}, - }, - }, - "rds": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "redshift": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "s3": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"s3v4"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "s3-control": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - SignatureVersions: []string{"s3v4"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{ - Hostname: "s3-control.cn-north-1.amazonaws.com.cn", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "cn-north-1", - }, - }, - "cn-northwest-1": endpoint{ - Hostname: "s3-control.cn-northwest-1.amazonaws.com.cn", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "cn-northwest-1", - }, - }, - }, - }, - "sms": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "snowball": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - }, - }, - "sns": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "sqs": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "ssm": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "states": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "storagegateway": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - }, - }, - "streams.dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Service: "dynamodb", - }, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "sts": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "support": service{ - PartitionEndpoint: "aws-cn-global", - - Endpoints: endpoints{ - "aws-cn-global": endpoint{ - Hostname: "support.cn-north-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-north-1", - }, - }, - }, - }, - "swf": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "tagging": service{ - - Endpoints: endpoints{ - "cn-north-1": endpoint{}, - "cn-northwest-1": endpoint{}, - }, - }, - "transcribe": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "cn-north-1": endpoint{ - Hostname: "cn.transcribe.cn-north-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-north-1", - }, - }, - "cn-northwest-1": endpoint{ - Hostname: "cn.transcribe.cn-northwest-1.amazonaws.com.cn", - CredentialScope: credentialScope{ - Region: "cn-northwest-1", - }, - }, - }, - }, - "workspaces": service{ - - Endpoints: endpoints{ - "cn-northwest-1": endpoint{}, - }, - }, - }, -} - -// AwsUsGovPartition returns the Resolver for AWS GovCloud (US). -func AwsUsGovPartition() Partition { - return awsusgovPartition.Partition() -} - -var awsusgovPartition = partition{ - ID: "aws-us-gov", - Name: "AWS GovCloud (US)", - DNSSuffix: "amazonaws.com", - RegionRegex: regionRegex{ - Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^us\\-gov\\-\\w+\\-\\d+$") - return reg - }(), - }, - Defaults: endpoint{ - Hostname: "{service}.{region}.{dnsSuffix}", - Protocols: []string{"https"}, - SignatureVersions: []string{"v4"}, - }, - Regions: regions{ - "us-gov-east-1": region{ - Description: "AWS GovCloud (US-East)", - }, - "us-gov-west-1": region{ - Description: "AWS GovCloud (US)", - }, - }, - Services: services{ - "acm": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "acm-pca": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "api.ecr": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{ - Hostname: "api.ecr.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{ - Hostname: "api.ecr.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "api.sagemaker": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "apigateway": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "application-autoscaling": service{ - Defaults: endpoint{ - Hostname: "autoscaling.{region}.amazonaws.com", - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Service: "application-autoscaling", - }, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "appstream2": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - CredentialScope: credentialScope{ - Service: "appstream", - }, - }, - Endpoints: endpoints{ - "fips": endpoint{ - Hostname: "appstream2-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-west-1": endpoint{}, - }, - }, - "athena": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "autoscaling": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "clouddirectory": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "cloudformation": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "cloudhsm": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "cloudhsmv2": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "cloudhsm", - }, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "cloudtrail": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "codebuild": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "codecommit": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "codedeploy": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-east-1-fips": endpoint{ - Hostname: "codedeploy-fips.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{}, - "us-gov-west-1-fips": endpoint{ - Hostname: "codedeploy-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "comprehend": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "config": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "datasync": service{ - - Endpoints: endpoints{ - "fips-us-gov-west-1": endpoint{ - Hostname: "datasync-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "directconnect": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "dms": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "ds": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "dynamodb": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-east-1-fips": endpoint{ - Hostname: "dynamodb.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{}, - "us-gov-west-1-fips": endpoint{ - Hostname: "dynamodb.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "ec2": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "ec2metadata": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, - }, - }, - }, - "ecs": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "elasticache": service{ - - Endpoints: endpoints{ - "fips": endpoint{ - Hostname: "elasticache-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "elasticbeanstalk": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "elasticfilesystem": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "elasticloadbalancing": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "elasticmapreduce": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{ - Protocols: []string{"https"}, - }, - }, - }, - "es": service{ - - Endpoints: endpoints{ - "fips": endpoint{ - Hostname: "es-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "events": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "firehose": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "glacier": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "glue": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "greengrass": service{ - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "guardduty": service{ - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "health": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "iam": service{ - PartitionEndpoint: "aws-us-gov-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-us-gov-global": endpoint{ - Hostname: "iam.us-gov.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "inspector": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "iot": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "execute-api", - }, - }, - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "kinesis": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "kms": service{ - - Endpoints: endpoints{ - "ProdFips": endpoint{ - Hostname: "kms-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "lambda": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "license-manager": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "logs": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "mediaconvert": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "metering.marketplace": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "aws-marketplace", - }, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "monitoring": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "neptune": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{ - Hostname: "rds.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{ - Hostname: "rds.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "organizations": service{ - PartitionEndpoint: "aws-us-gov-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-us-gov-global": endpoint{ - Hostname: "organizations.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "polly": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "ram": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "rds": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "redshift": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "rekognition": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "resource-groups": service{ - - Endpoints: endpoints{ - "fips-us-gov-east-1": endpoint{ - Hostname: "resource-groups.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "fips-us-gov-west-1": endpoint{ - Hostname: "resource-groups.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "route53": service{ - PartitionEndpoint: "aws-us-gov-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-us-gov-global": endpoint{ - Hostname: "route53.us-gov.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "route53resolver": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "runtime.sagemaker": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "s3": service{ - Defaults: endpoint{ - SignatureVersions: []string{"s3", "s3v4"}, - }, - Endpoints: endpoints{ - "fips-us-gov-west-1": endpoint{ - Hostname: "s3-fips-us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-east-1": endpoint{ - Hostname: "s3.us-gov-east-1.amazonaws.com", - Protocols: []string{"http", "https"}, - }, - "us-gov-west-1": endpoint{ - Hostname: "s3.us-gov-west-1.amazonaws.com", - Protocols: []string{"http", "https"}, - }, - }, - }, - "s3-control": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - SignatureVersions: []string{"s3v4"}, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{ - Hostname: "s3-control.us-gov-east-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-east-1-fips": endpoint{ - Hostname: "s3-control-fips.us-gov-east-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{ - Hostname: "s3-control.us-gov-west-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-west-1-fips": endpoint{ - Hostname: "s3-control-fips.us-gov-west-1.amazonaws.com", - SignatureVersions: []string{"s3v4"}, - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "secretsmanager": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-east-1-fips": endpoint{ - Hostname: "secretsmanager-fips.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{}, - "us-gov-west-1-fips": endpoint{ - Hostname: "secretsmanager-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "serverlessrepo": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{ - Protocols: []string{"https"}, - }, - "us-gov-west-1": endpoint{ - Protocols: []string{"https"}, - }, - }, - }, - "servicecatalog": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - "us-gov-west-1-fips": endpoint{ - Hostname: "servicecatalog-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "sms": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "snowball": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "sns": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "sqs": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, - }, - }, - "ssm": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "states": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "storagegateway": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "streams.dynamodb": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "dynamodb", - }, - }, - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-east-1-fips": endpoint{ - Hostname: "dynamodb.us-gov-east-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-east-1", - }, - }, - "us-gov-west-1": endpoint{}, - "us-gov-west-1-fips": endpoint{ - Hostname: "dynamodb.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "sts": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "swf": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "tagging": service{ - - Endpoints: endpoints{ - "us-gov-east-1": endpoint{}, - "us-gov-west-1": endpoint{}, - }, - }, - "transcribe": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "translate": service{ - Defaults: endpoint{ - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - "us-gov-west-1-fips": endpoint{ - Hostname: "translate-fips.us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - }, - }, - "waf-regional": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - "workspaces": service{ - - Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, - }, - }, - }, -} - -// AwsIsoPartition returns the Resolver for AWS ISO (US). -func AwsIsoPartition() Partition { - return awsisoPartition.Partition() -} - -var awsisoPartition = partition{ - ID: "aws-iso", - Name: "AWS ISO (US)", - DNSSuffix: "c2s.ic.gov", - RegionRegex: regionRegex{ - Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^us\\-iso\\-\\w+\\-\\d+$") - return reg - }(), - }, - Defaults: endpoint{ - Hostname: "{service}.{region}.{dnsSuffix}", - Protocols: []string{"https"}, - SignatureVersions: []string{"v4"}, - }, - Regions: regions{ - "us-iso-east-1": region{ - Description: "US ISO East", - }, - }, - Services: services{ - "api.ecr": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Hostname: "api.ecr.us-iso-east-1.c2s.ic.gov", - CredentialScope: credentialScope{ - Region: "us-iso-east-1", - }, - }, - }, - }, - "api.sagemaker": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "apigateway": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "application-autoscaling": service{ - Defaults: endpoint{ - Hostname: "autoscaling.us-iso-east-1.c2s.ic.gov", - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "autoscaling": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "cloudformation": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "cloudtrail": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "codedeploy": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "config": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "datapipeline": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "directconnect": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "dms": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "ds": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "dynamodb": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "ec2": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "ec2metadata": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, - }, - }, - }, - "ecs": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "elasticache": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "elasticloadbalancing": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "elasticmapreduce": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"https"}, - }, - }, - }, - "events": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "glacier": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "health": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "iam": service{ - PartitionEndpoint: "aws-iso-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-iso-global": endpoint{ - Hostname: "iam.us-iso-east-1.c2s.ic.gov", - CredentialScope: credentialScope{ - Region: "us-iso-east-1", - }, - }, - }, - }, - "kinesis": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "kms": service{ - - Endpoints: endpoints{ - "ProdFips": endpoint{ - Hostname: "kms-fips.us-iso-east-1.c2s.ic.gov", - CredentialScope: credentialScope{ - Region: "us-iso-east-1", - }, - }, - "us-iso-east-1": endpoint{}, - }, - }, - "lambda": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "logs": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "monitoring": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "rds": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "redshift": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "route53": service{ - PartitionEndpoint: "aws-iso-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-iso-global": endpoint{ - Hostname: "route53.c2s.ic.gov", - CredentialScope: credentialScope{ - Region: "us-iso-east-1", - }, - }, - }, - }, - "runtime.sagemaker": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "s3": service{ - Defaults: endpoint{ - SignatureVersions: []string{"s3v4"}, - }, - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"s3v4"}, - }, - }, - }, - "snowball": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "sns": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "sqs": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "states": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "streams.dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Service: "dynamodb", - }, - }, - Endpoints: endpoints{ - "us-iso-east-1": endpoint{ - Protocols: []string{"http", "https"}, - }, - }, - }, - "sts": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "support": service{ - PartitionEndpoint: "aws-iso-global", - - Endpoints: endpoints{ - "aws-iso-global": endpoint{ - Hostname: "support.us-iso-east-1.c2s.ic.gov", - CredentialScope: credentialScope{ - Region: "us-iso-east-1", - }, - }, - }, - }, - "swf": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - "workspaces": service{ - - Endpoints: endpoints{ - "us-iso-east-1": endpoint{}, - }, - }, - }, -} - -// AwsIsoBPartition returns the Resolver for AWS ISOB (US). -func AwsIsoBPartition() Partition { - return awsisobPartition.Partition() -} - -var awsisobPartition = partition{ - ID: "aws-iso-b", - Name: "AWS ISOB (US)", - DNSSuffix: "sc2s.sgov.gov", - RegionRegex: regionRegex{ - Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^us\\-isob\\-\\w+\\-\\d+$") - return reg - }(), - }, - Defaults: endpoint{ - Hostname: "{service}.{region}.{dnsSuffix}", - Protocols: []string{"https"}, - SignatureVersions: []string{"v4"}, - }, - Regions: regions{ - "us-isob-east-1": region{ - Description: "US ISOB East (Ohio)", - }, - }, - Services: services{ - "application-autoscaling": service{ - Defaults: endpoint{ - Hostname: "autoscaling.us-isob-east-1.sc2s.sgov.gov", - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "autoscaling": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "cloudformation": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "cloudtrail": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "config": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "directconnect": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "dms": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "ec2": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "ec2metadata": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, - }, - }, - }, - "elasticache": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "elasticloadbalancing": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{ - Protocols: []string{"https"}, - }, - }, - }, - "elasticmapreduce": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "events": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "glacier": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "health": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "iam": service{ - PartitionEndpoint: "aws-iso-b-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-iso-b-global": endpoint{ - Hostname: "iam.us-isob-east-1.sc2s.sgov.gov", - CredentialScope: credentialScope{ - Region: "us-isob-east-1", - }, - }, - }, - }, - "kinesis": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "kms": service{ - - Endpoints: endpoints{ - "ProdFips": endpoint{ - Hostname: "kms-fips.us-isob-east-1.sc2s.sgov.gov", - CredentialScope: credentialScope{ - Region: "us-isob-east-1", - }, - }, - "us-isob-east-1": endpoint{}, - }, - }, - "logs": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "monitoring": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "rds": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "redshift": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "s3": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"s3v4"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "snowball": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "sns": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "sqs": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "states": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "streams.dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Service: "dynamodb", - }, - }, - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "sts": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - "support": service{ - PartitionEndpoint: "aws-iso-b-global", - - Endpoints: endpoints{ - "aws-iso-b-global": endpoint{ - Hostname: "support.us-isob-east-1.sc2s.sgov.gov", - CredentialScope: credentialScope{ - Region: "us-isob-east-1", - }, - }, - }, - }, - "swf": service{ - - Endpoints: endpoints{ - "us-isob-east-1": endpoint{}, - }, - }, - }, -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -package endpoints - -// Service identifiers -// -// Deprecated: Use client package's EndpointsID value instead of these -// ServiceIDs. These IDs are not maintained, and are out of date. -const ( - A4bServiceID = "a4b" // A4b. - AcmServiceID = "acm" // Acm. - AcmPcaServiceID = "acm-pca" // AcmPca. - ApiMediatailorServiceID = "api.mediatailor" // ApiMediatailor. - ApiPricingServiceID = "api.pricing" // ApiPricing. - ApiSagemakerServiceID = "api.sagemaker" // ApiSagemaker. - ApigatewayServiceID = "apigateway" // Apigateway. - ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling. - Appstream2ServiceID = "appstream2" // Appstream2. - AppsyncServiceID = "appsync" // Appsync. - AthenaServiceID = "athena" // Athena. - AutoscalingServiceID = "autoscaling" // Autoscaling. - AutoscalingPlansServiceID = "autoscaling-plans" // AutoscalingPlans. - BatchServiceID = "batch" // Batch. - BudgetsServiceID = "budgets" // Budgets. - CeServiceID = "ce" // Ce. - ChimeServiceID = "chime" // Chime. - Cloud9ServiceID = "cloud9" // Cloud9. - ClouddirectoryServiceID = "clouddirectory" // Clouddirectory. - CloudformationServiceID = "cloudformation" // Cloudformation. - CloudfrontServiceID = "cloudfront" // Cloudfront. - CloudhsmServiceID = "cloudhsm" // Cloudhsm. - Cloudhsmv2ServiceID = "cloudhsmv2" // Cloudhsmv2. - CloudsearchServiceID = "cloudsearch" // Cloudsearch. - CloudtrailServiceID = "cloudtrail" // Cloudtrail. - CodebuildServiceID = "codebuild" // Codebuild. - CodecommitServiceID = "codecommit" // Codecommit. - CodedeployServiceID = "codedeploy" // Codedeploy. - CodepipelineServiceID = "codepipeline" // Codepipeline. - CodestarServiceID = "codestar" // Codestar. - CognitoIdentityServiceID = "cognito-identity" // CognitoIdentity. - CognitoIdpServiceID = "cognito-idp" // CognitoIdp. - CognitoSyncServiceID = "cognito-sync" // CognitoSync. - ComprehendServiceID = "comprehend" // Comprehend. - ConfigServiceID = "config" // Config. - CurServiceID = "cur" // Cur. - DatapipelineServiceID = "datapipeline" // Datapipeline. - DaxServiceID = "dax" // Dax. - DevicefarmServiceID = "devicefarm" // Devicefarm. - DirectconnectServiceID = "directconnect" // Directconnect. - DiscoveryServiceID = "discovery" // Discovery. - DmsServiceID = "dms" // Dms. - DsServiceID = "ds" // Ds. - DynamodbServiceID = "dynamodb" // Dynamodb. - Ec2ServiceID = "ec2" // Ec2. - Ec2metadataServiceID = "ec2metadata" // Ec2metadata. - EcrServiceID = "ecr" // Ecr. - EcsServiceID = "ecs" // Ecs. - ElasticacheServiceID = "elasticache" // Elasticache. - ElasticbeanstalkServiceID = "elasticbeanstalk" // Elasticbeanstalk. - ElasticfilesystemServiceID = "elasticfilesystem" // Elasticfilesystem. - ElasticloadbalancingServiceID = "elasticloadbalancing" // Elasticloadbalancing. - ElasticmapreduceServiceID = "elasticmapreduce" // Elasticmapreduce. - ElastictranscoderServiceID = "elastictranscoder" // Elastictranscoder. - EmailServiceID = "email" // Email. - EntitlementMarketplaceServiceID = "entitlement.marketplace" // EntitlementMarketplace. - EsServiceID = "es" // Es. - EventsServiceID = "events" // Events. - FirehoseServiceID = "firehose" // Firehose. - FmsServiceID = "fms" // Fms. - GameliftServiceID = "gamelift" // Gamelift. - GlacierServiceID = "glacier" // Glacier. - GlueServiceID = "glue" // Glue. - GreengrassServiceID = "greengrass" // Greengrass. - GuarddutyServiceID = "guardduty" // Guardduty. - HealthServiceID = "health" // Health. - IamServiceID = "iam" // Iam. - ImportexportServiceID = "importexport" // Importexport. - InspectorServiceID = "inspector" // Inspector. - IotServiceID = "iot" // Iot. - IotanalyticsServiceID = "iotanalytics" // Iotanalytics. - KinesisServiceID = "kinesis" // Kinesis. - KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics. - KinesisvideoServiceID = "kinesisvideo" // Kinesisvideo. - KmsServiceID = "kms" // Kms. - LambdaServiceID = "lambda" // Lambda. - LightsailServiceID = "lightsail" // Lightsail. - LogsServiceID = "logs" // Logs. - MachinelearningServiceID = "machinelearning" // Machinelearning. - MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics" // Marketplacecommerceanalytics. - MediaconvertServiceID = "mediaconvert" // Mediaconvert. - MedialiveServiceID = "medialive" // Medialive. - MediapackageServiceID = "mediapackage" // Mediapackage. - MediastoreServiceID = "mediastore" // Mediastore. - MeteringMarketplaceServiceID = "metering.marketplace" // MeteringMarketplace. - MghServiceID = "mgh" // Mgh. - MobileanalyticsServiceID = "mobileanalytics" // Mobileanalytics. - ModelsLexServiceID = "models.lex" // ModelsLex. - MonitoringServiceID = "monitoring" // Monitoring. - MturkRequesterServiceID = "mturk-requester" // MturkRequester. - NeptuneServiceID = "neptune" // Neptune. - OpsworksServiceID = "opsworks" // Opsworks. - OpsworksCmServiceID = "opsworks-cm" // OpsworksCm. - OrganizationsServiceID = "organizations" // Organizations. - PinpointServiceID = "pinpoint" // Pinpoint. - PollyServiceID = "polly" // Polly. - RdsServiceID = "rds" // Rds. - RedshiftServiceID = "redshift" // Redshift. - RekognitionServiceID = "rekognition" // Rekognition. - ResourceGroupsServiceID = "resource-groups" // ResourceGroups. - Route53ServiceID = "route53" // Route53. - Route53domainsServiceID = "route53domains" // Route53domains. - RuntimeLexServiceID = "runtime.lex" // RuntimeLex. - RuntimeSagemakerServiceID = "runtime.sagemaker" // RuntimeSagemaker. - S3ServiceID = "s3" // S3. - S3ControlServiceID = "s3-control" // S3Control. - SagemakerServiceID = "api.sagemaker" // Sagemaker. - SdbServiceID = "sdb" // Sdb. - SecretsmanagerServiceID = "secretsmanager" // Secretsmanager. - ServerlessrepoServiceID = "serverlessrepo" // Serverlessrepo. - ServicecatalogServiceID = "servicecatalog" // Servicecatalog. - ServicediscoveryServiceID = "servicediscovery" // Servicediscovery. - ShieldServiceID = "shield" // Shield. - SmsServiceID = "sms" // Sms. - SnowballServiceID = "snowball" // Snowball. - SnsServiceID = "sns" // Sns. - SqsServiceID = "sqs" // Sqs. - SsmServiceID = "ssm" // Ssm. - StatesServiceID = "states" // States. - StoragegatewayServiceID = "storagegateway" // Storagegateway. - StreamsDynamodbServiceID = "streams.dynamodb" // StreamsDynamodb. - StsServiceID = "sts" // Sts. - SupportServiceID = "support" // Support. - SwfServiceID = "swf" // Swf. - TaggingServiceID = "tagging" // Tagging. - TransferServiceID = "transfer" // Transfer. - TranslateServiceID = "translate" // Translate. - WafServiceID = "waf" // Waf. - WafRegionalServiceID = "waf-regional" // WafRegional. - WorkdocsServiceID = "workdocs" // Workdocs. - WorkmailServiceID = "workmail" // Workmail. - WorkspacesServiceID = "workspaces" // Workspaces. - XrayServiceID = "xray" // Xray. -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -// Package endpoints provides the types and functionality for defining regions -// and endpoints, as well as querying those definitions. -// -// The SDK's Regions and Endpoints metadata is code generated into the endpoints -// package, and is accessible via the DefaultResolver function. This function -// returns a endpoint Resolver will search the metadata and build an associated -// endpoint if one is found. The default resolver will search all partitions -// known by the SDK. e.g AWS Standard (aws), AWS China (aws-cn), and -// AWS GovCloud (US) (aws-us-gov). -// . -// -// Enumerating Regions and Endpoint Metadata -// -// Casting the Resolver returned by DefaultResolver to a EnumPartitions interface -// will allow you to get access to the list of underlying Partitions with the -// Partitions method. This is helpful if you want to limit the SDK's endpoint -// resolving to a single partition, or enumerate regions, services, and endpoints -// in the partition. -// -// resolver := endpoints.DefaultResolver() -// partitions := resolver.(endpoints.EnumPartitions).Partitions() -// -// for _, p := range partitions { -// fmt.Println("Regions for", p.ID()) -// for id, _ := range p.Regions() { -// fmt.Println("*", id) -// } -// -// fmt.Println("Services for", p.ID()) -// for id, _ := range p.Services() { -// fmt.Println("*", id) -// } -// } -// -// Using Custom Endpoints -// -// The endpoints package also gives you the ability to use your own logic how -// endpoints are resolved. This is a great way to define a custom endpoint -// for select services, without passing that logic down through your code. -// -// If a type implements the Resolver interface it can be used to resolve -// endpoints. To use this with the SDK's Session and Config set the value -// of the type to the EndpointsResolver field of aws.Config when initializing -// the session, or service client. -// -// In addition the ResolverFunc is a wrapper for a func matching the signature -// of Resolver.EndpointFor, converting it to a type that satisfies the -// Resolver interface. -// -// -// myCustomResolver := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) { -// if service == endpoints.S3ServiceID { -// return endpoints.ResolvedEndpoint{ -// URL: "s3.custom.endpoint.com", -// SigningRegion: "custom-signing-region", -// }, nil -// } -// -// return endpoints.DefaultResolver().EndpointFor(service, region, optFns...) -// } -// -// sess := session.Must(session.NewSession(&aws.Config{ -// Region: aws.String("us-west-2"), -// EndpointResolver: endpoints.ResolverFunc(myCustomResolver), -// })) -package endpoints diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,564 +0,0 @@ -package endpoints - -import ( - "fmt" - "regexp" - "strings" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// Options provide the configuration needed to direct how the -// endpoints will be resolved. -type Options struct { - // DisableSSL forces the endpoint to be resolved as HTTP. - // instead of HTTPS if the service supports it. - DisableSSL bool - - // Sets the resolver to resolve the endpoint as a dualstack endpoint - // for the service. If dualstack support for a service is not known and - // StrictMatching is not enabled a dualstack endpoint for the service will - // be returned. This endpoint may not be valid. If StrictMatching is - // enabled only services that are known to support dualstack will return - // dualstack endpoints. - UseDualStack bool - - // Enables strict matching of services and regions resolved endpoints. - // If the partition doesn't enumerate the exact service and region an - // error will be returned. This option will prevent returning endpoints - // that look valid, but may not resolve to any real endpoint. - StrictMatching bool - - // Enables resolving a service endpoint based on the region provided if the - // service does not exist. The service endpoint ID will be used as the service - // domain name prefix. By default the endpoint resolver requires the service - // to be known when resolving endpoints. - // - // If resolving an endpoint on the partition list the provided region will - // be used to determine which partition's domain name pattern to the service - // endpoint ID with. If both the service and region are unknown and resolving - // the endpoint on partition list an UnknownEndpointError error will be returned. - // - // If resolving and endpoint on a partition specific resolver that partition's - // domain name pattern will be used with the service endpoint ID. If both - // region and service do not exist when resolving an endpoint on a specific - // partition the partition's domain pattern will be used to combine the - // endpoint and region together. - // - // This option is ignored if StrictMatching is enabled. - ResolveUnknownService bool - - // STS Regional Endpoint flag helps with resolving the STS endpoint - STSRegionalEndpoint STSRegionalEndpoint - - // S3 Regional Endpoint flag helps with resolving the S3 endpoint - S3UsEast1RegionalEndpoint S3UsEast1RegionalEndpoint -} - -// STSRegionalEndpoint is an enum for the states of the STS Regional Endpoint -// options. -type STSRegionalEndpoint int - -func (e STSRegionalEndpoint) String() string { - switch e { - case LegacySTSEndpoint: - return "legacy" - case RegionalSTSEndpoint: - return "regional" - case UnsetSTSEndpoint: - return "" - default: - return "unknown" - } -} - -const ( - - // UnsetSTSEndpoint represents that STS Regional Endpoint flag is not specified. - UnsetSTSEndpoint STSRegionalEndpoint = iota - - // LegacySTSEndpoint represents when STS Regional Endpoint flag is specified - // to use legacy endpoints. - LegacySTSEndpoint - - // RegionalSTSEndpoint represents when STS Regional Endpoint flag is specified - // to use regional endpoints. - RegionalSTSEndpoint -) - -// GetSTSRegionalEndpoint function returns the STSRegionalEndpointFlag based -// on the input string provided in env config or shared config by the user. -// -// `legacy`, `regional` are the only case-insensitive valid strings for -// resolving the STS regional Endpoint flag. -func GetSTSRegionalEndpoint(s string) (STSRegionalEndpoint, error) { - switch { - case strings.EqualFold(s, "legacy"): - return LegacySTSEndpoint, nil - case strings.EqualFold(s, "regional"): - return RegionalSTSEndpoint, nil - default: - return UnsetSTSEndpoint, fmt.Errorf("unable to resolve the value of STSRegionalEndpoint for %v", s) - } -} - -// S3UsEast1RegionalEndpoint is an enum for the states of the S3 us-east-1 -// Regional Endpoint options. -type S3UsEast1RegionalEndpoint int - -func (e S3UsEast1RegionalEndpoint) String() string { - switch e { - case LegacyS3UsEast1Endpoint: - return "legacy" - case RegionalS3UsEast1Endpoint: - return "regional" - case UnsetS3UsEast1Endpoint: - return "" - default: - return "unknown" - } -} - -const ( - - // UnsetS3UsEast1Endpoint represents that S3 Regional Endpoint flag is not - // specified. - UnsetS3UsEast1Endpoint S3UsEast1RegionalEndpoint = iota - - // LegacyS3UsEast1Endpoint represents when S3 Regional Endpoint flag is - // specified to use legacy endpoints. - LegacyS3UsEast1Endpoint - - // RegionalS3UsEast1Endpoint represents when S3 Regional Endpoint flag is - // specified to use regional endpoints. - RegionalS3UsEast1Endpoint -) - -// GetS3UsEast1RegionalEndpoint function returns the S3UsEast1RegionalEndpointFlag based -// on the input string provided in env config or shared config by the user. -// -// `legacy`, `regional` are the only case-insensitive valid strings for -// resolving the S3 regional Endpoint flag. -func GetS3UsEast1RegionalEndpoint(s string) (S3UsEast1RegionalEndpoint, error) { - switch { - case strings.EqualFold(s, "legacy"): - return LegacyS3UsEast1Endpoint, nil - case strings.EqualFold(s, "regional"): - return RegionalS3UsEast1Endpoint, nil - default: - return UnsetS3UsEast1Endpoint, - fmt.Errorf("unable to resolve the value of S3UsEast1RegionalEndpoint for %v", s) - } -} - -// Set combines all of the option functions together. -func (o *Options) Set(optFns ...func(*Options)) { - for _, fn := range optFns { - fn(o) - } -} - -// DisableSSLOption sets the DisableSSL options. Can be used as a functional -// option when resolving endpoints. -func DisableSSLOption(o *Options) { - o.DisableSSL = true -} - -// UseDualStackOption sets the UseDualStack option. Can be used as a functional -// option when resolving endpoints. -func UseDualStackOption(o *Options) { - o.UseDualStack = true -} - -// StrictMatchingOption sets the StrictMatching option. Can be used as a functional -// option when resolving endpoints. -func StrictMatchingOption(o *Options) { - o.StrictMatching = true -} - -// ResolveUnknownServiceOption sets the ResolveUnknownService option. Can be used -// as a functional option when resolving endpoints. -func ResolveUnknownServiceOption(o *Options) { - o.ResolveUnknownService = true -} - -// STSRegionalEndpointOption enables the STS endpoint resolver behavior to resolve -// STS endpoint to their regional endpoint, instead of the global endpoint. -func STSRegionalEndpointOption(o *Options) { - o.STSRegionalEndpoint = RegionalSTSEndpoint -} - -// A Resolver provides the interface for functionality to resolve endpoints. -// The build in Partition and DefaultResolver return value satisfy this interface. -type Resolver interface { - EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) -} - -// ResolverFunc is a helper utility that wraps a function so it satisfies the -// Resolver interface. This is useful when you want to add additional endpoint -// resolving logic, or stub out specific endpoints with custom values. -type ResolverFunc func(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) - -// EndpointFor wraps the ResolverFunc function to satisfy the Resolver interface. -func (fn ResolverFunc) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { - return fn(service, region, opts...) -} - -var schemeRE = regexp.MustCompile("^([^:]+)://") - -// AddScheme adds the HTTP or HTTPS schemes to a endpoint URL if there is no -// scheme. If disableSSL is true HTTP will set HTTP instead of the default HTTPS. -// -// If disableSSL is set, it will only set the URL's scheme if the URL does not -// contain a scheme. -func AddScheme(endpoint string, disableSSL bool) string { - if !schemeRE.MatchString(endpoint) { - scheme := "https" - if disableSSL { - scheme = "http" - } - endpoint = fmt.Sprintf("%s://%s", scheme, endpoint) - } - - return endpoint -} - -// EnumPartitions a provides a way to retrieve the underlying partitions that -// make up the SDK's default Resolver, or any resolver decoded from a model -// file. -// -// Use this interface with DefaultResolver and DecodeModels to get the list of -// Partitions. -type EnumPartitions interface { - Partitions() []Partition -} - -// RegionsForService returns a map of regions for the partition and service. -// If either the partition or service does not exist false will be returned -// as the second parameter. -// -// This example shows how to get the regions for DynamoDB in the AWS partition. -// rs, exists := endpoints.RegionsForService(endpoints.DefaultPartitions(), endpoints.AwsPartitionID, endpoints.DynamodbServiceID) -// -// This is equivalent to using the partition directly. -// rs := endpoints.AwsPartition().Services()[endpoints.DynamodbServiceID].Regions() -func RegionsForService(ps []Partition, partitionID, serviceID string) (map[string]Region, bool) { - for _, p := range ps { - if p.ID() != partitionID { - continue - } - if _, ok := p.p.Services[serviceID]; !ok { - break - } - - s := Service{ - id: serviceID, - p: p.p, - } - return s.Regions(), true - } - - return map[string]Region{}, false -} - -// PartitionForRegion returns the first partition which includes the region -// passed in. This includes both known regions and regions which match -// a pattern supported by the partition which may include regions that are -// not explicitly known by the partition. Use the Regions method of the -// returned Partition if explicit support is needed. -func PartitionForRegion(ps []Partition, regionID string) (Partition, bool) { - for _, p := range ps { - if _, ok := p.p.Regions[regionID]; ok || p.p.RegionRegex.MatchString(regionID) { - return p, true - } - } - - return Partition{}, false -} - -// A Partition provides the ability to enumerate the partition's regions -// and services. -type Partition struct { - id, dnsSuffix string - p *partition -} - -// DNSSuffix returns the base domain name of the partition. -func (p Partition) DNSSuffix() string { return p.dnsSuffix } - -// ID returns the identifier of the partition. -func (p Partition) ID() string { return p.id } - -// EndpointFor attempts to resolve the endpoint based on service and region. -// See Options for information on configuring how the endpoint is resolved. -// -// If the service cannot be found in the metadata the UnknownServiceError -// error will be returned. This validation will occur regardless if -// StrictMatching is enabled. To enable resolving unknown services set the -// "ResolveUnknownService" option to true. When StrictMatching is disabled -// this option allows the partition resolver to resolve a endpoint based on -// the service endpoint ID provided. -// -// When resolving endpoints you can choose to enable StrictMatching. This will -// require the provided service and region to be known by the partition. -// If the endpoint cannot be strictly resolved an error will be returned. This -// mode is useful to ensure the endpoint resolved is valid. Without -// StrictMatching enabled the endpoint returned may look valid but may not work. -// StrictMatching requires the SDK to be updated if you want to take advantage -// of new regions and services expansions. -// -// Errors that can be returned. -// * UnknownServiceError -// * UnknownEndpointError -func (p Partition) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { - return p.p.EndpointFor(service, region, opts...) -} - -// Regions returns a map of Regions indexed by their ID. This is useful for -// enumerating over the regions in a partition. -func (p Partition) Regions() map[string]Region { - rs := map[string]Region{} - for id, r := range p.p.Regions { - rs[id] = Region{ - id: id, - desc: r.Description, - p: p.p, - } - } - - return rs -} - -// Services returns a map of Service indexed by their ID. This is useful for -// enumerating over the services in a partition. -func (p Partition) Services() map[string]Service { - ss := map[string]Service{} - for id := range p.p.Services { - ss[id] = Service{ - id: id, - p: p.p, - } - } - - return ss -} - -// A Region provides information about a region, and ability to resolve an -// endpoint from the context of a region, given a service. -type Region struct { - id, desc string - p *partition -} - -// ID returns the region's identifier. -func (r Region) ID() string { return r.id } - -// Description returns the region's description. The region description -// is free text, it can be empty, and it may change between SDK releases. -func (r Region) Description() string { return r.desc } - -// ResolveEndpoint resolves an endpoint from the context of the region given -// a service. See Partition.EndpointFor for usage and errors that can be returned. -func (r Region) ResolveEndpoint(service string, opts ...func(*Options)) (ResolvedEndpoint, error) { - return r.p.EndpointFor(service, r.id, opts...) -} - -// Services returns a list of all services that are known to be in this region. -func (r Region) Services() map[string]Service { - ss := map[string]Service{} - for id, s := range r.p.Services { - if _, ok := s.Endpoints[r.id]; ok { - ss[id] = Service{ - id: id, - p: r.p, - } - } - } - - return ss -} - -// A Service provides information about a service, and ability to resolve an -// endpoint from the context of a service, given a region. -type Service struct { - id string - p *partition -} - -// ID returns the identifier for the service. -func (s Service) ID() string { return s.id } - -// ResolveEndpoint resolves an endpoint from the context of a service given -// a region. See Partition.EndpointFor for usage and errors that can be returned. -func (s Service) ResolveEndpoint(region string, opts ...func(*Options)) (ResolvedEndpoint, error) { - return s.p.EndpointFor(s.id, region, opts...) -} - -// Regions returns a map of Regions that the service is present in. -// -// A region is the AWS region the service exists in. Whereas a Endpoint is -// an URL that can be resolved to a instance of a service. -func (s Service) Regions() map[string]Region { - rs := map[string]Region{} - for id := range s.p.Services[s.id].Endpoints { - if r, ok := s.p.Regions[id]; ok { - rs[id] = Region{ - id: id, - desc: r.Description, - p: s.p, - } - } - } - - return rs -} - -// Endpoints returns a map of Endpoints indexed by their ID for all known -// endpoints for a service. -// -// A region is the AWS region the service exists in. Whereas a Endpoint is -// an URL that can be resolved to a instance of a service. -func (s Service) Endpoints() map[string]Endpoint { - es := map[string]Endpoint{} - for id := range s.p.Services[s.id].Endpoints { - es[id] = Endpoint{ - id: id, - serviceID: s.id, - p: s.p, - } - } - - return es -} - -// A Endpoint provides information about endpoints, and provides the ability -// to resolve that endpoint for the service, and the region the endpoint -// represents. -type Endpoint struct { - id string - serviceID string - p *partition -} - -// ID returns the identifier for an endpoint. -func (e Endpoint) ID() string { return e.id } - -// ServiceID returns the identifier the endpoint belongs to. -func (e Endpoint) ServiceID() string { return e.serviceID } - -// ResolveEndpoint resolves an endpoint from the context of a service and -// region the endpoint represents. See Partition.EndpointFor for usage and -// errors that can be returned. -func (e Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEndpoint, error) { - return e.p.EndpointFor(e.serviceID, e.id, opts...) -} - -// A ResolvedEndpoint is an endpoint that has been resolved based on a partition -// service, and region. -type ResolvedEndpoint struct { - // The endpoint URL - URL string - - // The endpoint partition - PartitionID string - - // The region that should be used for signing requests. - SigningRegion string - - // The service name that should be used for signing requests. - SigningName string - - // States that the signing name for this endpoint was derived from metadata - // passed in, but was not explicitly modeled. - SigningNameDerived bool - - // The signing method that should be used for signing requests. - SigningMethod string -} - -// So that the Error interface type can be included as an anonymous field -// in the requestError struct and not conflict with the error.Error() method. -type awsError awserr.Error - -// A EndpointNotFoundError is returned when in StrictMatching mode, and the -// endpoint for the service and region cannot be found in any of the partitions. -type EndpointNotFoundError struct { - awsError - Partition string - Service string - Region string -} - -// A UnknownServiceError is returned when the service does not resolve to an -// endpoint. Includes a list of all known services for the partition. Returned -// when a partition does not support the service. -type UnknownServiceError struct { - awsError - Partition string - Service string - Known []string -} - -// NewUnknownServiceError builds and returns UnknownServiceError. -func NewUnknownServiceError(p, s string, known []string) UnknownServiceError { - return UnknownServiceError{ - awsError: awserr.New("UnknownServiceError", - "could not resolve endpoint for unknown service", nil), - Partition: p, - Service: s, - Known: known, - } -} - -// String returns the string representation of the error. -func (e UnknownServiceError) Error() string { - extra := fmt.Sprintf("partition: %q, service: %q", - e.Partition, e.Service) - if len(e.Known) > 0 { - extra += fmt.Sprintf(", known: %v", e.Known) - } - return awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr()) -} - -// String returns the string representation of the error. -func (e UnknownServiceError) String() string { - return e.Error() -} - -// A UnknownEndpointError is returned when in StrictMatching mode and the -// service is valid, but the region does not resolve to an endpoint. Includes -// a list of all known endpoints for the service. -type UnknownEndpointError struct { - awsError - Partition string - Service string - Region string - Known []string -} - -// NewUnknownEndpointError builds and returns UnknownEndpointError. -func NewUnknownEndpointError(p, s, r string, known []string) UnknownEndpointError { - return UnknownEndpointError{ - awsError: awserr.New("UnknownEndpointError", - "could not resolve endpoint", nil), - Partition: p, - Service: s, - Region: r, - Known: known, - } -} - -// String returns the string representation of the error. -func (e UnknownEndpointError) Error() string { - extra := fmt.Sprintf("partition: %q, service: %q, region: %q", - e.Partition, e.Service, e.Region) - if len(e.Known) > 0 { - extra += fmt.Sprintf(", known: %v", e.Known) - } - return awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr()) -} - -// String returns the string representation of the error. -func (e UnknownEndpointError) String() string { - return e.Error() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -package endpoints - -var legacyGlobalRegions = map[string]map[string]struct{}{ - "sts": { - "ap-northeast-1": {}, - "ap-south-1": {}, - "ap-southeast-1": {}, - "ap-southeast-2": {}, - "ca-central-1": {}, - "eu-central-1": {}, - "eu-north-1": {}, - "eu-west-1": {}, - "eu-west-2": {}, - "eu-west-3": {}, - "sa-east-1": {}, - "us-east-1": {}, - "us-east-2": {}, - "us-west-1": {}, - "us-west-2": {}, - }, - "s3": { - "us-east-1": {}, - }, -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,351 +0,0 @@ -// +build codegen - -package endpoints - -import ( - "fmt" - "io" - "reflect" - "strings" - "text/template" - "unicode" -) - -// A CodeGenOptions are the options for code generating the endpoints into -// Go code from the endpoints model definition. -type CodeGenOptions struct { - // Options for how the model will be decoded. - DecodeModelOptions DecodeModelOptions - - // Disables code generation of the service endpoint prefix IDs defined in - // the model. - DisableGenerateServiceIDs bool -} - -// Set combines all of the option functions together -func (d *CodeGenOptions) Set(optFns ...func(*CodeGenOptions)) { - for _, fn := range optFns { - fn(d) - } -} - -// CodeGenModel given a endpoints model file will decode it and attempt to -// generate Go code from the model definition. Error will be returned if -// the code is unable to be generated, or decoded. -func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func(*CodeGenOptions)) error { - var opts CodeGenOptions - opts.Set(optFns...) - - resolver, err := DecodeModel(modelFile, func(d *DecodeModelOptions) { - *d = opts.DecodeModelOptions - }) - if err != nil { - return err - } - - v := struct { - Resolver - CodeGenOptions - }{ - Resolver: resolver, - CodeGenOptions: opts, - } - - tmpl := template.Must(template.New("tmpl").Funcs(funcMap).Parse(v3Tmpl)) - if err := tmpl.ExecuteTemplate(outFile, "defaults", v); err != nil { - return fmt.Errorf("failed to execute template, %v", err) - } - - return nil -} - -func toSymbol(v string) string { - out := []rune{} - for _, c := range strings.Title(v) { - if !(unicode.IsNumber(c) || unicode.IsLetter(c)) { - continue - } - - out = append(out, c) - } - - return string(out) -} - -func quoteString(v string) string { - return fmt.Sprintf("%q", v) -} - -func regionConstName(p, r string) string { - return toSymbol(p) + toSymbol(r) -} - -func partitionGetter(id string) string { - return fmt.Sprintf("%sPartition", toSymbol(id)) -} - -func partitionVarName(id string) string { - return fmt.Sprintf("%sPartition", strings.ToLower(toSymbol(id))) -} - -func listPartitionNames(ps partitions) string { - names := []string{} - switch len(ps) { - case 1: - return ps[0].Name - case 2: - return fmt.Sprintf("%s and %s", ps[0].Name, ps[1].Name) - default: - for i, p := range ps { - if i == len(ps)-1 { - names = append(names, "and "+p.Name) - } else { - names = append(names, p.Name) - } - } - return strings.Join(names, ", ") - } -} - -func boxedBoolIfSet(msg string, v boxedBool) string { - switch v { - case boxedTrue: - return fmt.Sprintf(msg, "boxedTrue") - case boxedFalse: - return fmt.Sprintf(msg, "boxedFalse") - default: - return "" - } -} - -func stringIfSet(msg, v string) string { - if len(v) == 0 { - return "" - } - - return fmt.Sprintf(msg, v) -} - -func stringSliceIfSet(msg string, vs []string) string { - if len(vs) == 0 { - return "" - } - - names := []string{} - for _, v := range vs { - names = append(names, `"`+v+`"`) - } - - return fmt.Sprintf(msg, strings.Join(names, ",")) -} - -func endpointIsSet(v endpoint) bool { - return !reflect.DeepEqual(v, endpoint{}) -} - -func serviceSet(ps partitions) map[string]struct{} { - set := map[string]struct{}{} - for _, p := range ps { - for id := range p.Services { - set[id] = struct{}{} - } - } - - return set -} - -var funcMap = template.FuncMap{ - "ToSymbol": toSymbol, - "QuoteString": quoteString, - "RegionConst": regionConstName, - "PartitionGetter": partitionGetter, - "PartitionVarName": partitionVarName, - "ListPartitionNames": listPartitionNames, - "BoxedBoolIfSet": boxedBoolIfSet, - "StringIfSet": stringIfSet, - "StringSliceIfSet": stringSliceIfSet, - "EndpointIsSet": endpointIsSet, - "ServicesSet": serviceSet, -} - -const v3Tmpl = ` -{{ define "defaults" -}} -// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT. - -package endpoints - -import ( - "regexp" -) - - {{ template "partition consts" $.Resolver }} - - {{ range $_, $partition := $.Resolver }} - {{ template "partition region consts" $partition }} - {{ end }} - - {{ if not $.DisableGenerateServiceIDs -}} - {{ template "service consts" $.Resolver }} - {{- end }} - - {{ template "endpoint resolvers" $.Resolver }} -{{- end }} - -{{ define "partition consts" }} - // Partition identifiers - const ( - {{ range $_, $p := . -}} - {{ ToSymbol $p.ID }}PartitionID = {{ QuoteString $p.ID }} // {{ $p.Name }} partition. - {{ end -}} - ) -{{- end }} - -{{ define "partition region consts" }} - // {{ .Name }} partition's regions. - const ( - {{ range $id, $region := .Regions -}} - {{ ToSymbol $id }}RegionID = {{ QuoteString $id }} // {{ $region.Description }}. - {{ end -}} - ) -{{- end }} - -{{ define "service consts" }} - // Service identifiers - const ( - {{ $serviceSet := ServicesSet . -}} - {{ range $id, $_ := $serviceSet -}} - {{ ToSymbol $id }}ServiceID = {{ QuoteString $id }} // {{ ToSymbol $id }}. - {{ end -}} - ) -{{- end }} - -{{ define "endpoint resolvers" }} - // DefaultResolver returns an Endpoint resolver that will be able - // to resolve endpoints for: {{ ListPartitionNames . }}. - // - // Use DefaultPartitions() to get the list of the default partitions. - func DefaultResolver() Resolver { - return defaultPartitions - } - - // DefaultPartitions returns a list of the partitions the SDK is bundled - // with. The available partitions are: {{ ListPartitionNames . }}. - // - // partitions := endpoints.DefaultPartitions - // for _, p := range partitions { - // // ... inspect partitions - // } - func DefaultPartitions() []Partition { - return defaultPartitions.Partitions() - } - - var defaultPartitions = partitions{ - {{ range $_, $partition := . -}} - {{ PartitionVarName $partition.ID }}, - {{ end }} - } - - {{ range $_, $partition := . -}} - {{ $name := PartitionGetter $partition.ID -}} - // {{ $name }} returns the Resolver for {{ $partition.Name }}. - func {{ $name }}() Partition { - return {{ PartitionVarName $partition.ID }}.Partition() - } - var {{ PartitionVarName $partition.ID }} = {{ template "gocode Partition" $partition }} - {{ end }} -{{ end }} - -{{ define "default partitions" }} - func DefaultPartitions() []Partition { - return []partition{ - {{ range $_, $partition := . -}} - // {{ ToSymbol $partition.ID}}Partition(), - {{ end }} - } - } -{{ end }} - -{{ define "gocode Partition" -}} -partition{ - {{ StringIfSet "ID: %q,\n" .ID -}} - {{ StringIfSet "Name: %q,\n" .Name -}} - {{ StringIfSet "DNSSuffix: %q,\n" .DNSSuffix -}} - RegionRegex: {{ template "gocode RegionRegex" .RegionRegex }}, - {{ if EndpointIsSet .Defaults -}} - Defaults: {{ template "gocode Endpoint" .Defaults }}, - {{- end }} - Regions: {{ template "gocode Regions" .Regions }}, - Services: {{ template "gocode Services" .Services }}, -} -{{- end }} - -{{ define "gocode RegionRegex" -}} -regionRegex{ - Regexp: func() *regexp.Regexp{ - reg, _ := regexp.Compile({{ QuoteString .Regexp.String }}) - return reg - }(), -} -{{- end }} - -{{ define "gocode Regions" -}} -regions{ - {{ range $id, $region := . -}} - "{{ $id }}": {{ template "gocode Region" $region }}, - {{ end -}} -} -{{- end }} - -{{ define "gocode Region" -}} -region{ - {{ StringIfSet "Description: %q,\n" .Description -}} -} -{{- end }} - -{{ define "gocode Services" -}} -services{ - {{ range $id, $service := . -}} - "{{ $id }}": {{ template "gocode Service" $service }}, - {{ end }} -} -{{- end }} - -{{ define "gocode Service" -}} -service{ - {{ StringIfSet "PartitionEndpoint: %q,\n" .PartitionEndpoint -}} - {{ BoxedBoolIfSet "IsRegionalized: %s,\n" .IsRegionalized -}} - {{ if EndpointIsSet .Defaults -}} - Defaults: {{ template "gocode Endpoint" .Defaults -}}, - {{- end }} - {{ if .Endpoints -}} - Endpoints: {{ template "gocode Endpoints" .Endpoints }}, - {{- end }} -} -{{- end }} - -{{ define "gocode Endpoints" -}} -endpoints{ - {{ range $id, $endpoint := . -}} - "{{ $id }}": {{ template "gocode Endpoint" $endpoint }}, - {{ end }} -} -{{- end }} - -{{ define "gocode Endpoint" -}} -endpoint{ - {{ StringIfSet "Hostname: %q,\n" .Hostname -}} - {{ StringIfSet "SSLCommonName: %q,\n" .SSLCommonName -}} - {{ StringSliceIfSet "Protocols: []string{%s},\n" .Protocols -}} - {{ StringSliceIfSet "SignatureVersions: []string{%s},\n" .SignatureVersions -}} - {{ if or .CredentialScope.Region .CredentialScope.Service -}} - CredentialScope: credentialScope{ - {{ StringIfSet "Region: %q,\n" .CredentialScope.Region -}} - {{ StringIfSet "Service: %q,\n" .CredentialScope.Service -}} - }, - {{- end }} - {{ BoxedBoolIfSet "HasDualStack: %s,\n" .HasDualStack -}} - {{ StringIfSet "DualStackHostname: %q,\n" .DualStackHostname -}} - -} -{{- end }} -` diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,341 +0,0 @@ -package endpoints - -import ( - "fmt" - "regexp" - "strconv" - "strings" -) - -type partitions []partition - -func (ps partitions) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { - var opt Options - opt.Set(opts...) - - for i := 0; i < len(ps); i++ { - if !ps[i].canResolveEndpoint(service, region, opt.StrictMatching) { - continue - } - - return ps[i].EndpointFor(service, region, opts...) - } - - // If loose matching fallback to first partition format to use - // when resolving the endpoint. - if !opt.StrictMatching && len(ps) > 0 { - return ps[0].EndpointFor(service, region, opts...) - } - - return ResolvedEndpoint{}, NewUnknownEndpointError("all partitions", service, region, []string{}) -} - -// Partitions satisfies the EnumPartitions interface and returns a list -// of Partitions representing each partition represented in the SDK's -// endpoints model. -func (ps partitions) Partitions() []Partition { - parts := make([]Partition, 0, len(ps)) - for i := 0; i < len(ps); i++ { - parts = append(parts, ps[i].Partition()) - } - - return parts -} - -type partition struct { - ID string `json:"partition"` - Name string `json:"partitionName"` - DNSSuffix string `json:"dnsSuffix"` - RegionRegex regionRegex `json:"regionRegex"` - Defaults endpoint `json:"defaults"` - Regions regions `json:"regions"` - Services services `json:"services"` -} - -func (p partition) Partition() Partition { - return Partition{ - dnsSuffix: p.DNSSuffix, - id: p.ID, - p: &p, - } -} - -func (p partition) canResolveEndpoint(service, region string, strictMatch bool) bool { - s, hasService := p.Services[service] - _, hasEndpoint := s.Endpoints[region] - - if hasEndpoint && hasService { - return true - } - - if strictMatch { - return false - } - - return p.RegionRegex.MatchString(region) -} - -func allowLegacyEmptyRegion(service string) bool { - legacy := map[string]struct{}{ - "budgets": {}, - "ce": {}, - "chime": {}, - "cloudfront": {}, - "ec2metadata": {}, - "iam": {}, - "importexport": {}, - "organizations": {}, - "route53": {}, - "sts": {}, - "support": {}, - "waf": {}, - } - - _, allowed := legacy[service] - return allowed -} - -func (p partition) EndpointFor(service, region string, opts ...func(*Options)) (resolved ResolvedEndpoint, err error) { - var opt Options - opt.Set(opts...) - - s, hasService := p.Services[service] - if len(service) == 0 || !(hasService || opt.ResolveUnknownService) { - // Only return error if the resolver will not fallback to creating - // endpoint based on service endpoint ID passed in. - return resolved, NewUnknownServiceError(p.ID, service, serviceList(p.Services)) - } - - if len(region) == 0 && allowLegacyEmptyRegion(service) && len(s.PartitionEndpoint) != 0 { - region = s.PartitionEndpoint - } - - if (service == "sts" && opt.STSRegionalEndpoint != RegionalSTSEndpoint) || - (service == "s3" && opt.S3UsEast1RegionalEndpoint != RegionalS3UsEast1Endpoint) { - if _, ok := legacyGlobalRegions[service][region]; ok { - region = "aws-global" - } - } - - e, hasEndpoint := s.endpointForRegion(region) - if len(region) == 0 || (!hasEndpoint && opt.StrictMatching) { - return resolved, NewUnknownEndpointError(p.ID, service, region, endpointList(s.Endpoints)) - } - - defs := []endpoint{p.Defaults, s.Defaults} - - return e.resolve(service, p.ID, region, p.DNSSuffix, defs, opt), nil -} - -func serviceList(ss services) []string { - list := make([]string, 0, len(ss)) - for k := range ss { - list = append(list, k) - } - return list -} -func endpointList(es endpoints) []string { - list := make([]string, 0, len(es)) - for k := range es { - list = append(list, k) - } - return list -} - -type regionRegex struct { - *regexp.Regexp -} - -func (rr *regionRegex) UnmarshalJSON(b []byte) (err error) { - // Strip leading and trailing quotes - regex, err := strconv.Unquote(string(b)) - if err != nil { - return fmt.Errorf("unable to strip quotes from regex, %v", err) - } - - rr.Regexp, err = regexp.Compile(regex) - if err != nil { - return fmt.Errorf("unable to unmarshal region regex, %v", err) - } - return nil -} - -type regions map[string]region - -type region struct { - Description string `json:"description"` -} - -type services map[string]service - -type service struct { - PartitionEndpoint string `json:"partitionEndpoint"` - IsRegionalized boxedBool `json:"isRegionalized,omitempty"` - Defaults endpoint `json:"defaults"` - Endpoints endpoints `json:"endpoints"` -} - -func (s *service) endpointForRegion(region string) (endpoint, bool) { - if s.IsRegionalized == boxedFalse { - return s.Endpoints[s.PartitionEndpoint], region == s.PartitionEndpoint - } - - if e, ok := s.Endpoints[region]; ok { - return e, true - } - - // Unable to find any matching endpoint, return - // blank that will be used for generic endpoint creation. - return endpoint{}, false -} - -type endpoints map[string]endpoint - -type endpoint struct { - Hostname string `json:"hostname"` - Protocols []string `json:"protocols"` - CredentialScope credentialScope `json:"credentialScope"` - - // Custom fields not modeled - HasDualStack boxedBool `json:"-"` - DualStackHostname string `json:"-"` - - // Signature Version not used - SignatureVersions []string `json:"signatureVersions"` - - // SSLCommonName not used. - SSLCommonName string `json:"sslCommonName"` -} - -const ( - defaultProtocol = "https" - defaultSigner = "v4" -) - -var ( - protocolPriority = []string{"https", "http"} - signerPriority = []string{"v4", "v2"} -) - -func getByPriority(s []string, p []string, def string) string { - if len(s) == 0 { - return def - } - - for i := 0; i < len(p); i++ { - for j := 0; j < len(s); j++ { - if s[j] == p[i] { - return s[j] - } - } - } - - return s[0] -} - -func (e endpoint) resolve(service, partitionID, region, dnsSuffix string, defs []endpoint, opts Options) ResolvedEndpoint { - var merged endpoint - for _, def := range defs { - merged.mergeIn(def) - } - merged.mergeIn(e) - e = merged - - signingRegion := e.CredentialScope.Region - if len(signingRegion) == 0 { - signingRegion = region - } - - signingName := e.CredentialScope.Service - var signingNameDerived bool - if len(signingName) == 0 { - signingName = service - signingNameDerived = true - } - - hostname := e.Hostname - // Offset the hostname for dualstack if enabled - if opts.UseDualStack && e.HasDualStack == boxedTrue { - hostname = e.DualStackHostname - region = signingRegion - } - - u := strings.Replace(hostname, "{service}", service, 1) - u = strings.Replace(u, "{region}", region, 1) - u = strings.Replace(u, "{dnsSuffix}", dnsSuffix, 1) - - scheme := getEndpointScheme(e.Protocols, opts.DisableSSL) - u = fmt.Sprintf("%s://%s", scheme, u) - - return ResolvedEndpoint{ - URL: u, - PartitionID: partitionID, - SigningRegion: signingRegion, - SigningName: signingName, - SigningNameDerived: signingNameDerived, - SigningMethod: getByPriority(e.SignatureVersions, signerPriority, defaultSigner), - } -} - -func getEndpointScheme(protocols []string, disableSSL bool) string { - if disableSSL { - return "http" - } - - return getByPriority(protocols, protocolPriority, defaultProtocol) -} - -func (e *endpoint) mergeIn(other endpoint) { - if len(other.Hostname) > 0 { - e.Hostname = other.Hostname - } - if len(other.Protocols) > 0 { - e.Protocols = other.Protocols - } - if len(other.SignatureVersions) > 0 { - e.SignatureVersions = other.SignatureVersions - } - if len(other.CredentialScope.Region) > 0 { - e.CredentialScope.Region = other.CredentialScope.Region - } - if len(other.CredentialScope.Service) > 0 { - e.CredentialScope.Service = other.CredentialScope.Service - } - if len(other.SSLCommonName) > 0 { - e.SSLCommonName = other.SSLCommonName - } - if other.HasDualStack != boxedBoolUnset { - e.HasDualStack = other.HasDualStack - } - if len(other.DualStackHostname) > 0 { - e.DualStackHostname = other.DualStackHostname - } -} - -type credentialScope struct { - Region string `json:"region"` - Service string `json:"service"` -} - -type boxedBool int - -func (b *boxedBool) UnmarshalJSON(buf []byte) error { - v, err := strconv.ParseBool(string(buf)) - if err != nil { - return err - } - - if v { - *b = boxedTrue - } else { - *b = boxedFalse - } - - return nil -} - -const ( - boxedBoolUnset boxedBool = iota - boxedFalse - boxedTrue -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/errors.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/errors.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/errors.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -package aws - -import "github.com/aws/aws-sdk-go/aws/awserr" - -var ( - // ErrMissingRegion is an error that is returned if region configuration is - // not found. - ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil) - - // ErrMissingEndpoint is an error that is returned if an endpoint cannot be - // resolved for a service. - ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil) -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -package aws - -// JSONValue is a representation of a grab bag type that will be marshaled -// into a json string. This type can be used just like any other map. -// -// Example: -// -// values := aws.JSONValue{ -// "Foo": "Bar", -// } -// values["Baz"] = "Qux" -type JSONValue map[string]interface{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/logger.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/logger.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/logger.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/logger.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -package aws - -import ( - "log" - "os" -) - -// A LogLevelType defines the level logging should be performed at. Used to instruct -// the SDK which statements should be logged. -type LogLevelType uint - -// LogLevel returns the pointer to a LogLevel. Should be used to workaround -// not being able to take the address of a non-composite literal. -func LogLevel(l LogLevelType) *LogLevelType { - return &l -} - -// Value returns the LogLevel value or the default value LogOff if the LogLevel -// is nil. Safe to use on nil value LogLevelTypes. -func (l *LogLevelType) Value() LogLevelType { - if l != nil { - return *l - } - return LogOff -} - -// Matches returns true if the v LogLevel is enabled by this LogLevel. Should be -// used with logging sub levels. Is safe to use on nil value LogLevelTypes. If -// LogLevel is nil, will default to LogOff comparison. -func (l *LogLevelType) Matches(v LogLevelType) bool { - c := l.Value() - return c&v == v -} - -// AtLeast returns true if this LogLevel is at least high enough to satisfies v. -// Is safe to use on nil value LogLevelTypes. If LogLevel is nil, will default -// to LogOff comparison. -func (l *LogLevelType) AtLeast(v LogLevelType) bool { - c := l.Value() - return c >= v -} - -const ( - // LogOff states that no logging should be performed by the SDK. This is the - // default state of the SDK, and should be use to disable all logging. - LogOff LogLevelType = iota * 0x1000 - - // LogDebug state that debug output should be logged by the SDK. This should - // be used to inspect request made and responses received. - LogDebug -) - -// Debug Logging Sub Levels -const ( - // LogDebugWithSigning states that the SDK should log request signing and - // presigning events. This should be used to log the signing details of - // requests for debugging. Will also enable LogDebug. - LogDebugWithSigning LogLevelType = LogDebug | (1 << iota) - - // LogDebugWithHTTPBody states the SDK should log HTTP request and response - // HTTP bodys in addition to the headers and path. This should be used to - // see the body content of requests and responses made while using the SDK - // Will also enable LogDebug. - LogDebugWithHTTPBody - - // LogDebugWithRequestRetries states the SDK should log when service requests will - // be retried. This should be used to log when you want to log when service - // requests are being retried. Will also enable LogDebug. - LogDebugWithRequestRetries - - // LogDebugWithRequestErrors states the SDK should log when service requests fail - // to build, send, validate, or unmarshal. - LogDebugWithRequestErrors - - // LogDebugWithEventStreamBody states the SDK should log EventStream - // request and response bodys. This should be used to log the EventStream - // wire unmarshaled message content of requests and responses made while - // using the SDK Will also enable LogDebug. - LogDebugWithEventStreamBody -) - -// A Logger is a minimalistic interface for the SDK to log messages to. Should -// be used to provide custom logging writers for the SDK to use. -type Logger interface { - Log(...interface{}) -} - -// A LoggerFunc is a convenience type to convert a function taking a variadic -// list of arguments and wrap it so the Logger interface can be used. -// -// Example: -// s3.New(sess, &aws.Config{Logger: aws.LoggerFunc(func(args ...interface{}) { -// fmt.Fprintln(os.Stdout, args...) -// })}) -type LoggerFunc func(...interface{}) - -// Log calls the wrapped function with the arguments provided -func (f LoggerFunc) Log(args ...interface{}) { - f(args...) -} - -// NewDefaultLogger returns a Logger which will write log messages to stdout, and -// use same formatting runes as the stdlib log.Logger -func NewDefaultLogger() Logger { - return &defaultLogger{ - logger: log.New(os.Stdout, "", log.LstdFlags), - } -} - -// A defaultLogger provides a minimalistic logger satisfying the Logger interface. -type defaultLogger struct { - logger *log.Logger -} - -// Log logs the parameters to the stdlib logger. See log.Println. -func (l defaultLogger) Log(args ...interface{}) { - l.logger.Println(args...) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -package request - -import ( - "strings" -) - -func isErrConnectionReset(err error) bool { - if strings.Contains(err.Error(), "read: connection reset") { - return false - } - - if strings.Contains(err.Error(), "connection reset") || - strings.Contains(err.Error(), "broken pipe") { - return true - } - - return false -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,322 +0,0 @@ -package request - -import ( - "fmt" - "strings" -) - -// A Handlers provides a collection of request handlers for various -// stages of handling requests. -type Handlers struct { - Validate HandlerList - Build HandlerList - Sign HandlerList - Send HandlerList - ValidateResponse HandlerList - Unmarshal HandlerList - UnmarshalStream HandlerList - UnmarshalMeta HandlerList - UnmarshalError HandlerList - Retry HandlerList - AfterRetry HandlerList - CompleteAttempt HandlerList - Complete HandlerList -} - -// Copy returns a copy of this handler's lists. -func (h *Handlers) Copy() Handlers { - return Handlers{ - Validate: h.Validate.copy(), - Build: h.Build.copy(), - Sign: h.Sign.copy(), - Send: h.Send.copy(), - ValidateResponse: h.ValidateResponse.copy(), - Unmarshal: h.Unmarshal.copy(), - UnmarshalStream: h.UnmarshalStream.copy(), - UnmarshalError: h.UnmarshalError.copy(), - UnmarshalMeta: h.UnmarshalMeta.copy(), - Retry: h.Retry.copy(), - AfterRetry: h.AfterRetry.copy(), - CompleteAttempt: h.CompleteAttempt.copy(), - Complete: h.Complete.copy(), - } -} - -// Clear removes callback functions for all handlers. -func (h *Handlers) Clear() { - h.Validate.Clear() - h.Build.Clear() - h.Send.Clear() - h.Sign.Clear() - h.Unmarshal.Clear() - h.UnmarshalStream.Clear() - h.UnmarshalMeta.Clear() - h.UnmarshalError.Clear() - h.ValidateResponse.Clear() - h.Retry.Clear() - h.AfterRetry.Clear() - h.CompleteAttempt.Clear() - h.Complete.Clear() -} - -// IsEmpty returns if there are no handlers in any of the handlerlists. -func (h *Handlers) IsEmpty() bool { - if h.Validate.Len() != 0 { - return false - } - if h.Build.Len() != 0 { - return false - } - if h.Send.Len() != 0 { - return false - } - if h.Sign.Len() != 0 { - return false - } - if h.Unmarshal.Len() != 0 { - return false - } - if h.UnmarshalStream.Len() != 0 { - return false - } - if h.UnmarshalMeta.Len() != 0 { - return false - } - if h.UnmarshalError.Len() != 0 { - return false - } - if h.ValidateResponse.Len() != 0 { - return false - } - if h.Retry.Len() != 0 { - return false - } - if h.AfterRetry.Len() != 0 { - return false - } - if h.CompleteAttempt.Len() != 0 { - return false - } - if h.Complete.Len() != 0 { - return false - } - - return true -} - -// A HandlerListRunItem represents an entry in the HandlerList which -// is being run. -type HandlerListRunItem struct { - Index int - Handler NamedHandler - Request *Request -} - -// A HandlerList manages zero or more handlers in a list. -type HandlerList struct { - list []NamedHandler - - // Called after each request handler in the list is called. If set - // and the func returns true the HandlerList will continue to iterate - // over the request handlers. If false is returned the HandlerList - // will stop iterating. - // - // Should be used if extra logic to be performed between each handler - // in the list. This can be used to terminate a list's iteration - // based on a condition such as error like, HandlerListStopOnError. - // Or for logging like HandlerListLogItem. - AfterEachFn func(item HandlerListRunItem) bool -} - -// A NamedHandler is a struct that contains a name and function callback. -type NamedHandler struct { - Name string - Fn func(*Request) -} - -// copy creates a copy of the handler list. -func (l *HandlerList) copy() HandlerList { - n := HandlerList{ - AfterEachFn: l.AfterEachFn, - } - if len(l.list) == 0 { - return n - } - - n.list = append(make([]NamedHandler, 0, len(l.list)), l.list...) - return n -} - -// Clear clears the handler list. -func (l *HandlerList) Clear() { - l.list = l.list[0:0] -} - -// Len returns the number of handlers in the list. -func (l *HandlerList) Len() int { - return len(l.list) -} - -// PushBack pushes handler f to the back of the handler list. -func (l *HandlerList) PushBack(f func(*Request)) { - l.PushBackNamed(NamedHandler{"__anonymous", f}) -} - -// PushBackNamed pushes named handler f to the back of the handler list. -func (l *HandlerList) PushBackNamed(n NamedHandler) { - if cap(l.list) == 0 { - l.list = make([]NamedHandler, 0, 5) - } - l.list = append(l.list, n) -} - -// PushFront pushes handler f to the front of the handler list. -func (l *HandlerList) PushFront(f func(*Request)) { - l.PushFrontNamed(NamedHandler{"__anonymous", f}) -} - -// PushFrontNamed pushes named handler f to the front of the handler list. -func (l *HandlerList) PushFrontNamed(n NamedHandler) { - if cap(l.list) == len(l.list) { - // Allocating new list required - l.list = append([]NamedHandler{n}, l.list...) - } else { - // Enough room to prepend into list. - l.list = append(l.list, NamedHandler{}) - copy(l.list[1:], l.list) - l.list[0] = n - } -} - -// Remove removes a NamedHandler n -func (l *HandlerList) Remove(n NamedHandler) { - l.RemoveByName(n.Name) -} - -// RemoveByName removes a NamedHandler by name. -func (l *HandlerList) RemoveByName(name string) { - for i := 0; i < len(l.list); i++ { - m := l.list[i] - if m.Name == name { - // Shift array preventing creating new arrays - copy(l.list[i:], l.list[i+1:]) - l.list[len(l.list)-1] = NamedHandler{} - l.list = l.list[:len(l.list)-1] - - // decrement list so next check to length is correct - i-- - } - } -} - -// SwapNamed will swap out any existing handlers with the same name as the -// passed in NamedHandler returning true if handlers were swapped. False is -// returned otherwise. -func (l *HandlerList) SwapNamed(n NamedHandler) (swapped bool) { - for i := 0; i < len(l.list); i++ { - if l.list[i].Name == n.Name { - l.list[i].Fn = n.Fn - swapped = true - } - } - - return swapped -} - -// Swap will swap out all handlers matching the name passed in. The matched -// handlers will be swapped in. True is returned if the handlers were swapped. -func (l *HandlerList) Swap(name string, replace NamedHandler) bool { - var swapped bool - - for i := 0; i < len(l.list); i++ { - if l.list[i].Name == name { - l.list[i] = replace - swapped = true - } - } - - return swapped -} - -// SetBackNamed will replace the named handler if it exists in the handler list. -// If the handler does not exist the handler will be added to the end of the list. -func (l *HandlerList) SetBackNamed(n NamedHandler) { - if !l.SwapNamed(n) { - l.PushBackNamed(n) - } -} - -// SetFrontNamed will replace the named handler if it exists in the handler list. -// If the handler does not exist the handler will be added to the beginning of -// the list. -func (l *HandlerList) SetFrontNamed(n NamedHandler) { - if !l.SwapNamed(n) { - l.PushFrontNamed(n) - } -} - -// Run executes all handlers in the list with a given request object. -func (l *HandlerList) Run(r *Request) { - for i, h := range l.list { - h.Fn(r) - item := HandlerListRunItem{ - Index: i, Handler: h, Request: r, - } - if l.AfterEachFn != nil && !l.AfterEachFn(item) { - return - } - } -} - -// HandlerListLogItem logs the request handler and the state of the -// request's Error value. Always returns true to continue iterating -// request handlers in a HandlerList. -func HandlerListLogItem(item HandlerListRunItem) bool { - if item.Request.Config.Logger == nil { - return true - } - item.Request.Config.Logger.Log("DEBUG: RequestHandler", - item.Index, item.Handler.Name, item.Request.Error) - - return true -} - -// HandlerListStopOnError returns false to stop the HandlerList iterating -// over request handlers if Request.Error is not nil. True otherwise -// to continue iterating. -func HandlerListStopOnError(item HandlerListRunItem) bool { - return item.Request.Error == nil -} - -// WithAppendUserAgent will add a string to the user agent prefixed with a -// single white space. -func WithAppendUserAgent(s string) Option { - return func(r *Request) { - r.Handlers.Build.PushBack(func(r2 *Request) { - AddToUserAgent(r, s) - }) - } -} - -// MakeAddToUserAgentHandler will add the name/version pair to the User-Agent request -// header. If the extra parameters are provided they will be added as metadata to the -// name/version pair resulting in the following format. -// "name/version (extra0; extra1; ...)" -// The user agent part will be concatenated with this current request's user agent string. -func MakeAddToUserAgentHandler(name, version string, extra ...string) func(*Request) { - ua := fmt.Sprintf("%s/%s", name, version) - if len(extra) > 0 { - ua += fmt.Sprintf(" (%s)", strings.Join(extra, "; ")) - } - return func(r *Request) { - AddToUserAgent(r, ua) - } -} - -// MakeAddToUserAgentFreeFormHandler adds the input to the User-Agent request header. -// The input string will be concatenated with the current request's user agent string. -func MakeAddToUserAgentFreeFormHandler(s string) func(*Request) { - return func(r *Request) { - AddToUserAgent(r, s) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -package request - -import ( - "io" - "net/http" - "net/url" -) - -func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request { - req := new(http.Request) - *req = *r - req.URL = &url.URL{} - *req.URL = *r.URL - req.Body = body - - req.Header = http.Header{} - for k, v := range r.Header { - for _, vv := range v { - req.Header.Add(k, vv) - } - } - - return req -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -package request - -import ( - "io" - "sync" - - "github.com/aws/aws-sdk-go/internal/sdkio" -) - -// offsetReader is a thread-safe io.ReadCloser to prevent racing -// with retrying requests -type offsetReader struct { - buf io.ReadSeeker - lock sync.Mutex - closed bool -} - -func newOffsetReader(buf io.ReadSeeker, offset int64) (*offsetReader, error) { - reader := &offsetReader{} - _, err := buf.Seek(offset, sdkio.SeekStart) - if err != nil { - return nil, err - } - - reader.buf = buf - return reader, nil -} - -// Close will close the instance of the offset reader's access to -// the underlying io.ReadSeeker. -func (o *offsetReader) Close() error { - o.lock.Lock() - defer o.lock.Unlock() - o.closed = true - return nil -} - -// Read is a thread-safe read of the underlying io.ReadSeeker -func (o *offsetReader) Read(p []byte) (int, error) { - o.lock.Lock() - defer o.lock.Unlock() - - if o.closed { - return 0, io.EOF - } - - return o.buf.Read(p) -} - -// Seek is a thread-safe seeking operation. -func (o *offsetReader) Seek(offset int64, whence int) (int64, error) { - o.lock.Lock() - defer o.lock.Unlock() - - return o.buf.Seek(offset, whence) -} - -// CloseAndCopy will return a new offsetReader with a copy of the old buffer -// and close the old buffer. -func (o *offsetReader) CloseAndCopy(offset int64) (*offsetReader, error) { - if err := o.Close(); err != nil { - return nil, err - } - return newOffsetReader(o.buf, offset) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -// +build !go1.8 - -package request - -import "io" - -// NoBody is an io.ReadCloser with no bytes. Read always returns EOF -// and Close always returns nil. It can be used in an outgoing client -// request to explicitly signal that a request has zero bytes. -// An alternative, however, is to simply set Request.Body to nil. -// -// Copy of Go 1.8 NoBody type from net/http/http.go -type noBody struct{} - -func (noBody) Read([]byte) (int, error) { return 0, io.EOF } -func (noBody) Close() error { return nil } -func (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil } - -// NoBody is an empty reader that will trigger the Go HTTP client to not include -// and body in the HTTP request. -var NoBody = noBody{} - -// ResetBody rewinds the request body back to its starting position, and -// sets the HTTP Request body reference. When the body is read prior -// to being sent in the HTTP request it will need to be rewound. -// -// ResetBody will automatically be called by the SDK's build handler, but if -// the request is being used directly ResetBody must be called before the request -// is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically -// call ResetBody. -func (r *Request) ResetBody() { - body, err := r.getNextRequestBody() - if err != nil { - r.Error = err - return - } - - r.HTTPRequest.Body = body -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -// +build go1.8 - -package request - -import ( - "net/http" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// NoBody is a http.NoBody reader instructing Go HTTP client to not include -// and body in the HTTP request. -var NoBody = http.NoBody - -// ResetBody rewinds the request body back to its starting position, and -// sets the HTTP Request body reference. When the body is read prior -// to being sent in the HTTP request it will need to be rewound. -// -// ResetBody will automatically be called by the SDK's build handler, but if -// the request is being used directly ResetBody must be called before the request -// is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically -// call ResetBody. -// -// Will also set the Go 1.8's http.Request.GetBody member to allow retrying -// PUT/POST redirects. -func (r *Request) ResetBody() { - body, err := r.getNextRequestBody() - if err != nil { - r.Error = awserr.New(ErrCodeSerialization, - "failed to reset request body", err) - return - } - - r.HTTPRequest.Body = body - r.HTTPRequest.GetBody = r.getNextRequestBody -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// +build !go1.7 - -package request - -import "github.com/aws/aws-sdk-go/aws" - -// setContext updates the Request to use the passed in context for cancellation. -// Context will also be used for request retry delay. -// -// Creates shallow copy of the http.Request with the WithContext method. -func setRequestContext(r *Request, ctx aws.Context) { - r.context = ctx - r.HTTPRequest.Cancel = ctx.Done() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -// +build go1.7 - -package request - -import "github.com/aws/aws-sdk-go/aws" - -// setContext updates the Request to use the passed in context for cancellation. -// Context will also be used for request retry delay. -// -// Creates shallow copy of the http.Request with the WithContext method. -func setRequestContext(r *Request, ctx aws.Context) { - r.context = ctx - r.HTTPRequest = r.HTTPRequest.WithContext(ctx) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,678 +0,0 @@ -package request - -import ( - "bytes" - "fmt" - "io" - "net/http" - "net/url" - "reflect" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/internal/sdkio" -) - -const ( - // ErrCodeSerialization is the serialization error code that is received - // during protocol unmarshaling. - ErrCodeSerialization = "SerializationError" - - // ErrCodeRead is an error that is returned during HTTP reads. - ErrCodeRead = "ReadError" - - // ErrCodeResponseTimeout is the connection timeout error that is received - // during body reads. - ErrCodeResponseTimeout = "ResponseTimeout" - - // ErrCodeInvalidPresignExpire is returned when the expire time provided to - // presign is invalid - ErrCodeInvalidPresignExpire = "InvalidPresignExpireError" - - // CanceledErrorCode is the error code that will be returned by an - // API request that was canceled. Requests given a aws.Context may - // return this error when canceled. - CanceledErrorCode = "RequestCanceled" -) - -// A Request is the service request to be made. -type Request struct { - Config aws.Config - ClientInfo metadata.ClientInfo - Handlers Handlers - - Retryer - AttemptTime time.Time - Time time.Time - Operation *Operation - HTTPRequest *http.Request - HTTPResponse *http.Response - Body io.ReadSeeker - BodyStart int64 // offset from beginning of Body that the request body starts - Params interface{} - Error error - Data interface{} - RequestID string - RetryCount int - Retryable *bool - RetryDelay time.Duration - NotHoist bool - SignedHeaderVals http.Header - LastSignedAt time.Time - DisableFollowRedirects bool - - // Additional API error codes that should be retried. IsErrorRetryable - // will consider these codes in addition to its built in cases. - RetryErrorCodes []string - - // Additional API error codes that should be retried with throttle backoff - // delay. IsErrorThrottle will consider these codes in addition to its - // built in cases. - ThrottleErrorCodes []string - - // A value greater than 0 instructs the request to be signed as Presigned URL - // You should not set this field directly. Instead use Request's - // Presign or PresignRequest methods. - ExpireTime time.Duration - - context aws.Context - - built bool - - // Need to persist an intermediate body between the input Body and HTTP - // request body because the HTTP Client's transport can maintain a reference - // to the HTTP request's body after the client has returned. This value is - // safe to use concurrently and wrap the input Body for each HTTP request. - safeBody *offsetReader -} - -// An Operation is the service API operation to be made. -type Operation struct { - Name string - HTTPMethod string - HTTPPath string - *Paginator - - BeforePresignFn func(r *Request) error -} - -// New returns a new Request pointer for the service API operation and -// parameters. -// -// A Retryer should be provided to direct how the request is retried. If -// Retryer is nil, a default no retry value will be used. You can use -// NoOpRetryer in the Client package to disable retry behavior directly. -// -// Params is any value of input parameters to be the request payload. -// Data is pointer value to an object which the request's response -// payload will be deserialized to. -func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, - retryer Retryer, operation *Operation, params interface{}, data interface{}) *Request { - - if retryer == nil { - retryer = noOpRetryer{} - } - - method := operation.HTTPMethod - if method == "" { - method = "POST" - } - - httpReq, _ := http.NewRequest(method, "", nil) - - var err error - httpReq.URL, err = url.Parse(clientInfo.Endpoint + operation.HTTPPath) - if err != nil { - httpReq.URL = &url.URL{} - err = awserr.New("InvalidEndpointURL", "invalid endpoint uri", err) - } - - SanitizeHostForHeader(httpReq) - - r := &Request{ - Config: cfg, - ClientInfo: clientInfo, - Handlers: handlers.Copy(), - - Retryer: retryer, - Time: time.Now(), - ExpireTime: 0, - Operation: operation, - HTTPRequest: httpReq, - Body: nil, - Params: params, - Error: err, - Data: data, - } - r.SetBufferBody([]byte{}) - - return r -} - -// A Option is a functional option that can augment or modify a request when -// using a WithContext API operation method. -type Option func(*Request) - -// WithGetResponseHeader builds a request Option which will retrieve a single -// header value from the HTTP Response. If there are multiple values for the -// header key use WithGetResponseHeaders instead to access the http.Header -// map directly. The passed in val pointer must be non-nil. -// -// This Option can be used multiple times with a single API operation. -// -// var id2, versionID string -// svc.PutObjectWithContext(ctx, params, -// request.WithGetResponseHeader("x-amz-id-2", &id2), -// request.WithGetResponseHeader("x-amz-version-id", &versionID), -// ) -func WithGetResponseHeader(key string, val *string) Option { - return func(r *Request) { - r.Handlers.Complete.PushBack(func(req *Request) { - *val = req.HTTPResponse.Header.Get(key) - }) - } -} - -// WithGetResponseHeaders builds a request Option which will retrieve the -// headers from the HTTP response and assign them to the passed in headers -// variable. The passed in headers pointer must be non-nil. -// -// var headers http.Header -// svc.PutObjectWithContext(ctx, params, request.WithGetResponseHeaders(&headers)) -func WithGetResponseHeaders(headers *http.Header) Option { - return func(r *Request) { - r.Handlers.Complete.PushBack(func(req *Request) { - *headers = req.HTTPResponse.Header - }) - } -} - -// WithLogLevel is a request option that will set the request to use a specific -// log level when the request is made. -// -// svc.PutObjectWithContext(ctx, params, request.WithLogLevel(aws.LogDebugWithHTTPBody) -func WithLogLevel(l aws.LogLevelType) Option { - return func(r *Request) { - r.Config.LogLevel = aws.LogLevel(l) - } -} - -// ApplyOptions will apply each option to the request calling them in the order -// the were provided. -func (r *Request) ApplyOptions(opts ...Option) { - for _, opt := range opts { - opt(r) - } -} - -// Context will always returns a non-nil context. If Request does not have a -// context aws.BackgroundContext will be returned. -func (r *Request) Context() aws.Context { - if r.context != nil { - return r.context - } - return aws.BackgroundContext() -} - -// SetContext adds a Context to the current request that can be used to cancel -// a in-flight request. The Context value must not be nil, or this method will -// panic. -// -// Unlike http.Request.WithContext, SetContext does not return a copy of the -// Request. It is not safe to use use a single Request value for multiple -// requests. A new Request should be created for each API operation request. -// -// Go 1.6 and below: -// The http.Request's Cancel field will be set to the Done() value of -// the context. This will overwrite the Cancel field's value. -// -// Go 1.7 and above: -// The http.Request.WithContext will be used to set the context on the underlying -// http.Request. This will create a shallow copy of the http.Request. The SDK -// may create sub contexts in the future for nested requests such as retries. -func (r *Request) SetContext(ctx aws.Context) { - if ctx == nil { - panic("context cannot be nil") - } - setRequestContext(r, ctx) -} - -// WillRetry returns if the request's can be retried. -func (r *Request) WillRetry() bool { - if !aws.IsReaderSeekable(r.Body) && r.HTTPRequest.Body != NoBody { - return false - } - return r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries() -} - -func fmtAttemptCount(retryCount, maxRetries int) string { - return fmt.Sprintf("attempt %v/%v", retryCount, maxRetries) -} - -// ParamsFilled returns if the request's parameters have been populated -// and the parameters are valid. False is returned if no parameters are -// provided or invalid. -func (r *Request) ParamsFilled() bool { - return r.Params != nil && reflect.ValueOf(r.Params).Elem().IsValid() -} - -// DataFilled returns true if the request's data for response deserialization -// target has been set and is a valid. False is returned if data is not -// set, or is invalid. -func (r *Request) DataFilled() bool { - return r.Data != nil && reflect.ValueOf(r.Data).Elem().IsValid() -} - -// SetBufferBody will set the request's body bytes that will be sent to -// the service API. -func (r *Request) SetBufferBody(buf []byte) { - r.SetReaderBody(bytes.NewReader(buf)) -} - -// SetStringBody sets the body of the request to be backed by a string. -func (r *Request) SetStringBody(s string) { - r.SetReaderBody(strings.NewReader(s)) -} - -// SetReaderBody will set the request's body reader. -func (r *Request) SetReaderBody(reader io.ReadSeeker) { - r.Body = reader - - if aws.IsReaderSeekable(reader) { - var err error - // Get the Bodies current offset so retries will start from the same - // initial position. - r.BodyStart, err = reader.Seek(0, sdkio.SeekCurrent) - if err != nil { - r.Error = awserr.New(ErrCodeSerialization, - "failed to determine start of request body", err) - return - } - } - r.ResetBody() -} - -// Presign returns the request's signed URL. Error will be returned -// if the signing fails. The expire parameter is only used for presigned Amazon -// S3 API requests. All other AWS services will use a fixed expiration -// time of 15 minutes. -// -// It is invalid to create a presigned URL with a expire duration 0 or less. An -// error is returned if expire duration is 0 or less. -func (r *Request) Presign(expire time.Duration) (string, error) { - r = r.copy() - - // Presign requires all headers be hoisted. There is no way to retrieve - // the signed headers not hoisted without this. Making the presigned URL - // useless. - r.NotHoist = false - - u, _, err := getPresignedURL(r, expire) - return u, err -} - -// PresignRequest behaves just like presign, with the addition of returning a -// set of headers that were signed. The expire parameter is only used for -// presigned Amazon S3 API requests. All other AWS services will use a fixed -// expiration time of 15 minutes. -// -// It is invalid to create a presigned URL with a expire duration 0 or less. An -// error is returned if expire duration is 0 or less. -// -// Returns the URL string for the API operation with signature in the query string, -// and the HTTP headers that were included in the signature. These headers must -// be included in any HTTP request made with the presigned URL. -// -// To prevent hoisting any headers to the query string set NotHoist to true on -// this Request value prior to calling PresignRequest. -func (r *Request) PresignRequest(expire time.Duration) (string, http.Header, error) { - r = r.copy() - return getPresignedURL(r, expire) -} - -// IsPresigned returns true if the request represents a presigned API url. -func (r *Request) IsPresigned() bool { - return r.ExpireTime != 0 -} - -func getPresignedURL(r *Request, expire time.Duration) (string, http.Header, error) { - if expire <= 0 { - return "", nil, awserr.New( - ErrCodeInvalidPresignExpire, - "presigned URL requires an expire duration greater than 0", - nil, - ) - } - - r.ExpireTime = expire - - if r.Operation.BeforePresignFn != nil { - if err := r.Operation.BeforePresignFn(r); err != nil { - return "", nil, err - } - } - - if err := r.Sign(); err != nil { - return "", nil, err - } - - return r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil -} - -const ( - notRetrying = "not retrying" -) - -func debugLogReqError(r *Request, stage, retryStr string, err error) { - if !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) { - return - } - - r.Config.Logger.Log(fmt.Sprintf("DEBUG: %s %s/%s failed, %s, error %v", - stage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err)) -} - -// Build will build the request's object so it can be signed and sent -// to the service. Build will also validate all the request's parameters. -// Any additional build Handlers set on this request will be run -// in the order they were set. -// -// The request will only be built once. Multiple calls to build will have -// no effect. -// -// If any Validate or Build errors occur the build will stop and the error -// which occurred will be returned. -func (r *Request) Build() error { - if !r.built { - r.Handlers.Validate.Run(r) - if r.Error != nil { - debugLogReqError(r, "Validate Request", notRetrying, r.Error) - return r.Error - } - r.Handlers.Build.Run(r) - if r.Error != nil { - debugLogReqError(r, "Build Request", notRetrying, r.Error) - return r.Error - } - r.built = true - } - - return r.Error -} - -// Sign will sign the request, returning error if errors are encountered. -// -// Sign will build the request prior to signing. All Sign Handlers will -// be executed in the order they were set. -func (r *Request) Sign() error { - r.Build() - if r.Error != nil { - debugLogReqError(r, "Build Request", notRetrying, r.Error) - return r.Error - } - - r.Handlers.Sign.Run(r) - return r.Error -} - -func (r *Request) getNextRequestBody() (body io.ReadCloser, err error) { - if r.safeBody != nil { - r.safeBody.Close() - } - - r.safeBody, err = newOffsetReader(r.Body, r.BodyStart) - if err != nil { - return nil, awserr.New(ErrCodeSerialization, - "failed to get next request body reader", err) - } - - // Go 1.8 tightened and clarified the rules code needs to use when building - // requests with the http package. Go 1.8 removed the automatic detection - // of if the Request.Body was empty, or actually had bytes in it. The SDK - // always sets the Request.Body even if it is empty and should not actually - // be sent. This is incorrect. - // - // Go 1.8 did add a http.NoBody value that the SDK can use to tell the http - // client that the request really should be sent without a body. The - // Request.Body cannot be set to nil, which is preferable, because the - // field is exported and could introduce nil pointer dereferences for users - // of the SDK if they used that field. - // - // Related golang/go#18257 - l, err := aws.SeekerLen(r.Body) - if err != nil { - return nil, awserr.New(ErrCodeSerialization, - "failed to compute request body size", err) - } - - if l == 0 { - body = NoBody - } else if l > 0 { - body = r.safeBody - } else { - // Hack to prevent sending bodies for methods where the body - // should be ignored by the server. Sending bodies on these - // methods without an associated ContentLength will cause the - // request to socket timeout because the server does not handle - // Transfer-Encoding: chunked bodies for these methods. - // - // This would only happen if a aws.ReaderSeekerCloser was used with - // a io.Reader that was not also an io.Seeker, or did not implement - // Len() method. - switch r.Operation.HTTPMethod { - case "GET", "HEAD", "DELETE": - body = NoBody - default: - body = r.safeBody - } - } - - return body, nil -} - -// GetBody will return an io.ReadSeeker of the Request's underlying -// input body with a concurrency safe wrapper. -func (r *Request) GetBody() io.ReadSeeker { - return r.safeBody -} - -// Send will send the request, returning error if errors are encountered. -// -// Send will sign the request prior to sending. All Send Handlers will -// be executed in the order they were set. -// -// Canceling a request is non-deterministic. If a request has been canceled, -// then the transport will choose, randomly, one of the state channels during -// reads or getting the connection. -// -// readLoop() and getConn(req *Request, cm connectMethod) -// https://github.com/golang/go/blob/master/src/net/http/transport.go -// -// Send will not close the request.Request's body. -func (r *Request) Send() error { - defer func() { - // Regardless of success or failure of the request trigger the Complete - // request handlers. - r.Handlers.Complete.Run(r) - }() - - if err := r.Error; err != nil { - return err - } - - for { - r.Error = nil - r.AttemptTime = time.Now() - - if err := r.Sign(); err != nil { - debugLogReqError(r, "Sign Request", notRetrying, err) - return err - } - - if err := r.sendRequest(); err == nil { - return nil - } - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - - if r.Error != nil || !aws.BoolValue(r.Retryable) { - return r.Error - } - - if err := r.prepareRetry(); err != nil { - r.Error = err - return err - } - } -} - -func (r *Request) prepareRetry() error { - if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) { - r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d", - r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount)) - } - - // The previous http.Request will have a reference to the r.Body - // and the HTTP Client's Transport may still be reading from - // the request's body even though the Client's Do returned. - r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil) - r.ResetBody() - if err := r.Error; err != nil { - return awserr.New(ErrCodeSerialization, - "failed to prepare body for retry", err) - - } - - // Closing response body to ensure that no response body is leaked - // between retry attempts. - if r.HTTPResponse != nil && r.HTTPResponse.Body != nil { - r.HTTPResponse.Body.Close() - } - - return nil -} - -func (r *Request) sendRequest() (sendErr error) { - defer r.Handlers.CompleteAttempt.Run(r) - - r.Retryable = nil - r.Handlers.Send.Run(r) - if r.Error != nil { - debugLogReqError(r, "Send Request", - fmtAttemptCount(r.RetryCount, r.MaxRetries()), - r.Error) - return r.Error - } - - r.Handlers.UnmarshalMeta.Run(r) - r.Handlers.ValidateResponse.Run(r) - if r.Error != nil { - r.Handlers.UnmarshalError.Run(r) - debugLogReqError(r, "Validate Response", - fmtAttemptCount(r.RetryCount, r.MaxRetries()), - r.Error) - return r.Error - } - - r.Handlers.Unmarshal.Run(r) - if r.Error != nil { - debugLogReqError(r, "Unmarshal Response", - fmtAttemptCount(r.RetryCount, r.MaxRetries()), - r.Error) - return r.Error - } - - return nil -} - -// copy will copy a request which will allow for local manipulation of the -// request. -func (r *Request) copy() *Request { - req := &Request{} - *req = *r - req.Handlers = r.Handlers.Copy() - op := *r.Operation - req.Operation = &op - return req -} - -// AddToUserAgent adds the string to the end of the request's current user agent. -func AddToUserAgent(r *Request, s string) { - curUA := r.HTTPRequest.Header.Get("User-Agent") - if len(curUA) > 0 { - s = curUA + " " + s - } - r.HTTPRequest.Header.Set("User-Agent", s) -} - -// SanitizeHostForHeader removes default port from host and updates request.Host -func SanitizeHostForHeader(r *http.Request) { - host := getHost(r) - port := portOnly(host) - if port != "" && isDefaultPort(r.URL.Scheme, port) { - r.Host = stripPort(host) - } -} - -// Returns host from request -func getHost(r *http.Request) string { - if r.Host != "" { - return r.Host - } - - return r.URL.Host -} - -// Hostname returns u.Host, without any port number. -// -// If Host is an IPv6 literal with a port number, Hostname returns the -// IPv6 literal without the square brackets. IPv6 literals may include -// a zone identifier. -// -// Copied from the Go 1.8 standard library (net/url) -func stripPort(hostport string) string { - colon := strings.IndexByte(hostport, ':') - if colon == -1 { - return hostport - } - if i := strings.IndexByte(hostport, ']'); i != -1 { - return strings.TrimPrefix(hostport[:i], "[") - } - return hostport[:colon] -} - -// Port returns the port part of u.Host, without the leading colon. -// If u.Host doesn't contain a port, Port returns an empty string. -// -// Copied from the Go 1.8 standard library (net/url) -func portOnly(hostport string) string { - colon := strings.IndexByte(hostport, ':') - if colon == -1 { - return "" - } - if i := strings.Index(hostport, "]:"); i != -1 { - return hostport[i+len("]:"):] - } - if strings.Contains(hostport, "]") { - return "" - } - return hostport[colon+len(":"):] -} - -// Returns true if the specified URI is using the standard port -// (i.e. port 80 for HTTP URIs or 443 for HTTPS URIs) -func isDefaultPort(scheme, port string) bool { - if port == "" { - return true - } - - lowerCaseScheme := strings.ToLower(scheme) - if (lowerCaseScheme == "http" && port == "80") || (lowerCaseScheme == "https" && port == "443") { - return true - } - - return false -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,266 +0,0 @@ -package request - -import ( - "reflect" - "sync/atomic" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awsutil" -) - -// A Pagination provides paginating of SDK API operations which are paginatable. -// Generally you should not use this type directly, but use the "Pages" API -// operations method to automatically perform pagination for you. Such as, -// "S3.ListObjectsPages", and "S3.ListObjectsPagesWithContext" methods. -// -// Pagination differs from a Paginator type in that pagination is the type that -// does the pagination between API operations, and Paginator defines the -// configuration that will be used per page request. -// -// for p.Next() { -// data := p.Page().(*s3.ListObjectsOutput) -// // process the page's data -// // ... -// // break out of loop to stop fetching additional pages -// } -// -// return p.Err() -// -// See service client API operation Pages methods for examples how the SDK will -// use the Pagination type. -type Pagination struct { - // Function to return a Request value for each pagination request. - // Any configuration or handlers that need to be applied to the request - // prior to getting the next page should be done here before the request - // returned. - // - // NewRequest should always be built from the same API operations. It is - // undefined if different API operations are returned on subsequent calls. - NewRequest func() (*Request, error) - // EndPageOnSameToken, when enabled, will allow the paginator to stop on - // token that are the same as its previous tokens. - EndPageOnSameToken bool - - started bool - prevTokens []interface{} - nextTokens []interface{} - - err error - curPage interface{} -} - -// HasNextPage will return true if Pagination is able to determine that the API -// operation has additional pages. False will be returned if there are no more -// pages remaining. -// -// Will always return true if Next has not been called yet. -func (p *Pagination) HasNextPage() bool { - if !p.started { - return true - } - - hasNextPage := len(p.nextTokens) != 0 - if p.EndPageOnSameToken { - return hasNextPage && !awsutil.DeepEqual(p.nextTokens, p.prevTokens) - } - return hasNextPage -} - -// Err returns the error Pagination encountered when retrieving the next page. -func (p *Pagination) Err() error { - return p.err -} - -// Page returns the current page. Page should only be called after a successful -// call to Next. It is undefined what Page will return if Page is called after -// Next returns false. -func (p *Pagination) Page() interface{} { - return p.curPage -} - -// Next will attempt to retrieve the next page for the API operation. When a page -// is retrieved true will be returned. If the page cannot be retrieved, or there -// are no more pages false will be returned. -// -// Use the Page method to retrieve the current page data. The data will need -// to be cast to the API operation's output type. -// -// Use the Err method to determine if an error occurred if Page returns false. -func (p *Pagination) Next() bool { - if !p.HasNextPage() { - return false - } - - req, err := p.NewRequest() - if err != nil { - p.err = err - return false - } - - if p.started { - for i, intok := range req.Operation.InputTokens { - awsutil.SetValueAtPath(req.Params, intok, p.nextTokens[i]) - } - } - p.started = true - - err = req.Send() - if err != nil { - p.err = err - return false - } - - p.prevTokens = p.nextTokens - p.nextTokens = req.nextPageTokens() - p.curPage = req.Data - - return true -} - -// A Paginator is the configuration data that defines how an API operation -// should be paginated. This type is used by the API service models to define -// the generated pagination config for service APIs. -// -// The Pagination type is what provides iterating between pages of an API. It -// is only used to store the token metadata the SDK should use for performing -// pagination. -type Paginator struct { - InputTokens []string - OutputTokens []string - LimitToken string - TruncationToken string -} - -// nextPageTokens returns the tokens to use when asking for the next page of data. -func (r *Request) nextPageTokens() []interface{} { - if r.Operation.Paginator == nil { - return nil - } - if r.Operation.TruncationToken != "" { - tr, _ := awsutil.ValuesAtPath(r.Data, r.Operation.TruncationToken) - if len(tr) == 0 { - return nil - } - - switch v := tr[0].(type) { - case *bool: - if !aws.BoolValue(v) { - return nil - } - case bool: - if !v { - return nil - } - } - } - - tokens := []interface{}{} - tokenAdded := false - for _, outToken := range r.Operation.OutputTokens { - vs, _ := awsutil.ValuesAtPath(r.Data, outToken) - if len(vs) == 0 { - tokens = append(tokens, nil) - continue - } - v := vs[0] - - switch tv := v.(type) { - case *string: - if len(aws.StringValue(tv)) == 0 { - tokens = append(tokens, nil) - continue - } - case string: - if len(tv) == 0 { - tokens = append(tokens, nil) - continue - } - } - - tokenAdded = true - tokens = append(tokens, v) - } - if !tokenAdded { - return nil - } - - return tokens -} - -// Ensure a deprecated item is only logged once instead of each time its used. -func logDeprecatedf(logger aws.Logger, flag *int32, msg string) { - if logger == nil { - return - } - if atomic.CompareAndSwapInt32(flag, 0, 1) { - logger.Log(msg) - } -} - -var ( - logDeprecatedHasNextPage int32 - logDeprecatedNextPage int32 - logDeprecatedEachPage int32 -) - -// HasNextPage returns true if this request has more pages of data available. -// -// Deprecated Use Pagination type for configurable pagination of API operations -func (r *Request) HasNextPage() bool { - logDeprecatedf(r.Config.Logger, &logDeprecatedHasNextPage, - "Request.HasNextPage deprecated. Use Pagination type for configurable pagination of API operations") - - return len(r.nextPageTokens()) > 0 -} - -// NextPage returns a new Request that can be executed to return the next -// page of result data. Call .Send() on this request to execute it. -// -// Deprecated Use Pagination type for configurable pagination of API operations -func (r *Request) NextPage() *Request { - logDeprecatedf(r.Config.Logger, &logDeprecatedNextPage, - "Request.NextPage deprecated. Use Pagination type for configurable pagination of API operations") - - tokens := r.nextPageTokens() - if len(tokens) == 0 { - return nil - } - - data := reflect.New(reflect.TypeOf(r.Data).Elem()).Interface() - nr := New(r.Config, r.ClientInfo, r.Handlers, r.Retryer, r.Operation, awsutil.CopyOf(r.Params), data) - for i, intok := range nr.Operation.InputTokens { - awsutil.SetValueAtPath(nr.Params, intok, tokens[i]) - } - return nr -} - -// EachPage iterates over each page of a paginated request object. The fn -// parameter should be a function with the following sample signature: -// -// func(page *T, lastPage bool) bool { -// return true // return false to stop iterating -// } -// -// Where "T" is the structure type matching the output structure of the given -// operation. For example, a request object generated by -// DynamoDB.ListTablesRequest() would expect to see dynamodb.ListTablesOutput -// as the structure "T". The lastPage value represents whether the page is -// the last page of data or not. The return value of this function should -// return true to keep iterating or false to stop. -// -// Deprecated Use Pagination type for configurable pagination of API operations -func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error { - logDeprecatedf(r.Config.Logger, &logDeprecatedEachPage, - "Request.EachPage deprecated. Use Pagination type for configurable pagination of API operations") - - for page := r; page != nil; page = page.NextPage() { - if err := page.Send(); err != nil { - return err - } - if getNextPage := fn(page.Data, !page.HasNextPage()); !getNextPage { - return page.Error - } - } - - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,307 +0,0 @@ -package request - -import ( - "net" - "net/url" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// Retryer provides the interface drive the SDK's request retry behavior. The -// Retryer implementation is responsible for implementing exponential backoff, -// and determine if a request API error should be retried. -// -// client.DefaultRetryer is the SDK's default implementation of the Retryer. It -// uses the which uses the Request.IsErrorRetryable and Request.IsErrorThrottle -// methods to determine if the request is retried. -type Retryer interface { - // RetryRules return the retry delay that should be used by the SDK before - // making another request attempt for the failed request. - RetryRules(*Request) time.Duration - - // ShouldRetry returns if the failed request is retryable. - // - // Implementations may consider request attempt count when determining if a - // request is retryable, but the SDK will use MaxRetries to limit the - // number of attempts a request are made. - ShouldRetry(*Request) bool - - // MaxRetries is the number of times a request may be retried before - // failing. - MaxRetries() int -} - -// WithRetryer sets a Retryer value to the given Config returning the Config -// value for chaining. The value must not be nil. -func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config { - if retryer == nil { - if cfg.Logger != nil { - cfg.Logger.Log("ERROR: Request.WithRetryer called with nil retryer. Replacing with retry disabled Retryer.") - } - retryer = noOpRetryer{} - } - cfg.Retryer = retryer - return cfg - -} - -// noOpRetryer is a internal no op retryer used when a request is created -// without a retryer. -// -// Provides a retryer that performs no retries. -// It should be used when we do not want retries to be performed. -type noOpRetryer struct{} - -// MaxRetries returns the number of maximum returns the service will use to make -// an individual API; For NoOpRetryer the MaxRetries will always be zero. -func (d noOpRetryer) MaxRetries() int { - return 0 -} - -// ShouldRetry will always return false for NoOpRetryer, as it should never retry. -func (d noOpRetryer) ShouldRetry(_ *Request) bool { - return false -} - -// RetryRules returns the delay duration before retrying this request again; -// since NoOpRetryer does not retry, RetryRules always returns 0. -func (d noOpRetryer) RetryRules(_ *Request) time.Duration { - return 0 -} - -// retryableCodes is a collection of service response codes which are retry-able -// without any further action. -var retryableCodes = map[string]struct{}{ - "RequestError": {}, - "RequestTimeout": {}, - ErrCodeResponseTimeout: {}, - "RequestTimeoutException": {}, // Glacier's flavor of RequestTimeout -} - -var throttleCodes = map[string]struct{}{ - "ProvisionedThroughputExceededException": {}, - "Throttling": {}, - "ThrottlingException": {}, - "RequestLimitExceeded": {}, - "RequestThrottled": {}, - "RequestThrottledException": {}, - "TooManyRequestsException": {}, // Lambda functions - "PriorRequestNotComplete": {}, // Route53 - "TransactionInProgressException": {}, -} - -// credsExpiredCodes is a collection of error codes which signify the credentials -// need to be refreshed. Expired tokens require refreshing of credentials, and -// resigning before the request can be retried. -var credsExpiredCodes = map[string]struct{}{ - "ExpiredToken": {}, - "ExpiredTokenException": {}, - "RequestExpired": {}, // EC2 Only -} - -func isCodeThrottle(code string) bool { - _, ok := throttleCodes[code] - return ok -} - -func isCodeRetryable(code string) bool { - if _, ok := retryableCodes[code]; ok { - return true - } - - return isCodeExpiredCreds(code) -} - -func isCodeExpiredCreds(code string) bool { - _, ok := credsExpiredCodes[code] - return ok -} - -var validParentCodes = map[string]struct{}{ - ErrCodeSerialization: {}, - ErrCodeRead: {}, -} - -func isNestedErrorRetryable(parentErr awserr.Error) bool { - if parentErr == nil { - return false - } - - if _, ok := validParentCodes[parentErr.Code()]; !ok { - return false - } - - err := parentErr.OrigErr() - if err == nil { - return false - } - - if aerr, ok := err.(awserr.Error); ok { - return isCodeRetryable(aerr.Code()) - } - - if t, ok := err.(temporary); ok { - return t.Temporary() || isErrConnectionReset(err) - } - - return isErrConnectionReset(err) -} - -// IsErrorRetryable returns whether the error is retryable, based on its Code. -// Returns false if error is nil. -func IsErrorRetryable(err error) bool { - if err == nil { - return false - } - return shouldRetryError(err) -} - -type temporary interface { - Temporary() bool -} - -func shouldRetryError(origErr error) bool { - switch err := origErr.(type) { - case awserr.Error: - if err.Code() == CanceledErrorCode { - return false - } - if isNestedErrorRetryable(err) { - return true - } - - origErr := err.OrigErr() - var shouldRetry bool - if origErr != nil { - shouldRetry := shouldRetryError(origErr) - if err.Code() == "RequestError" && !shouldRetry { - return false - } - } - if isCodeRetryable(err.Code()) { - return true - } - return shouldRetry - - case *url.Error: - if strings.Contains(err.Error(), "connection refused") { - // Refused connections should be retried as the service may not yet - // be running on the port. Go TCP dial considers refused - // connections as not temporary. - return true - } - // *url.Error only implements Temporary after golang 1.6 but since - // url.Error only wraps the error: - return shouldRetryError(err.Err) - - case temporary: - if netErr, ok := err.(*net.OpError); ok && netErr.Op == "dial" { - return true - } - // If the error is temporary, we want to allow continuation of the - // retry process - return err.Temporary() || isErrConnectionReset(origErr) - - case nil: - // `awserr.Error.OrigErr()` can be nil, meaning there was an error but - // because we don't know the cause, it is marked as retryable. See - // TestRequest4xxUnretryable for an example. - return true - - default: - switch err.Error() { - case "net/http: request canceled", - "net/http: request canceled while waiting for connection": - // known 1.5 error case when an http request is cancelled - return false - } - // here we don't know the error; so we allow a retry. - return true - } -} - -// IsErrorThrottle returns whether the error is to be throttled based on its code. -// Returns false if error is nil. -func IsErrorThrottle(err error) bool { - if aerr, ok := err.(awserr.Error); ok && aerr != nil { - return isCodeThrottle(aerr.Code()) - } - return false -} - -// IsErrorExpiredCreds returns whether the error code is a credential expiry -// error. Returns false if error is nil. -func IsErrorExpiredCreds(err error) bool { - if aerr, ok := err.(awserr.Error); ok && aerr != nil { - return isCodeExpiredCreds(aerr.Code()) - } - return false -} - -// IsErrorRetryable returns whether the error is retryable, based on its Code. -// Returns false if the request has no Error set. -// -// Alias for the utility function IsErrorRetryable -func (r *Request) IsErrorRetryable() bool { - if isErrCode(r.Error, r.RetryErrorCodes) { - return true - } - - // HTTP response status code 501 should not be retried. - // 501 represents Not Implemented which means the request method is not - // supported by the server and cannot be handled. - if r.HTTPResponse != nil { - // HTTP response status code 500 represents internal server error and - // should be retried without any throttle. - if r.HTTPResponse.StatusCode == 500 { - return true - } - } - return IsErrorRetryable(r.Error) -} - -// IsErrorThrottle returns whether the error is to be throttled based on its -// code. Returns false if the request has no Error set. -// -// Alias for the utility function IsErrorThrottle -func (r *Request) IsErrorThrottle() bool { - if isErrCode(r.Error, r.ThrottleErrorCodes) { - return true - } - - if r.HTTPResponse != nil { - switch r.HTTPResponse.StatusCode { - case - 429, // error caused due to too many requests - 502, // Bad Gateway error should be throttled - 503, // caused when service is unavailable - 504: // error occurred due to gateway timeout - return true - } - } - - return IsErrorThrottle(r.Error) -} - -func isErrCode(err error, codes []string) bool { - if aerr, ok := err.(awserr.Error); ok && aerr != nil { - for _, code := range codes { - if code == aerr.Code() { - return true - } - } - } - - return false -} - -// IsErrorExpired returns whether the error code is a credential expiry error. -// Returns false if the request has no Error set. -// -// Alias for the utility function IsErrorExpiredCreds -func (r *Request) IsErrorExpired() bool { - return IsErrorExpiredCreds(r.Error) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -package request - -import ( - "io" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -var timeoutErr = awserr.New( - ErrCodeResponseTimeout, - "read on body has reached the timeout limit", - nil, -) - -type readResult struct { - n int - err error -} - -// timeoutReadCloser will handle body reads that take too long. -// We will return a ErrReadTimeout error if a timeout occurs. -type timeoutReadCloser struct { - reader io.ReadCloser - duration time.Duration -} - -// Read will spin off a goroutine to call the reader's Read method. We will -// select on the timer's channel or the read's channel. Whoever completes first -// will be returned. -func (r *timeoutReadCloser) Read(b []byte) (int, error) { - timer := time.NewTimer(r.duration) - c := make(chan readResult, 1) - - go func() { - n, err := r.reader.Read(b) - timer.Stop() - c <- readResult{n: n, err: err} - }() - - select { - case data := <-c: - return data.n, data.err - case <-timer.C: - return 0, timeoutErr - } -} - -func (r *timeoutReadCloser) Close() error { - return r.reader.Close() -} - -const ( - // HandlerResponseTimeout is what we use to signify the name of the - // response timeout handler. - HandlerResponseTimeout = "ResponseTimeoutHandler" -) - -// adaptToResponseTimeoutError is a handler that will replace any top level error -// to a ErrCodeResponseTimeout, if its child is that. -func adaptToResponseTimeoutError(req *Request) { - if err, ok := req.Error.(awserr.Error); ok { - aerr, ok := err.OrigErr().(awserr.Error) - if ok && aerr.Code() == ErrCodeResponseTimeout { - req.Error = aerr - } - } -} - -// WithResponseReadTimeout is a request option that will wrap the body in a timeout read closer. -// This will allow for per read timeouts. If a timeout occurred, we will return the -// ErrCodeResponseTimeout. -// -// svc.PutObjectWithContext(ctx, params, request.WithTimeoutReadCloser(30 * time.Second) -func WithResponseReadTimeout(duration time.Duration) Option { - return func(r *Request) { - - var timeoutHandler = NamedHandler{ - HandlerResponseTimeout, - func(req *Request) { - req.HTTPResponse.Body = &timeoutReadCloser{ - reader: req.HTTPResponse.Body, - duration: duration, - } - }} - - // remove the handler so we are not stomping over any new durations. - r.Handlers.Send.RemoveByName(HandlerResponseTimeout) - r.Handlers.Send.PushBackNamed(timeoutHandler) - - r.Handlers.Unmarshal.PushBack(adaptToResponseTimeoutError) - r.Handlers.UnmarshalError.PushBack(adaptToResponseTimeoutError) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,286 +0,0 @@ -package request - -import ( - "bytes" - "fmt" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -const ( - // InvalidParameterErrCode is the error code for invalid parameters errors - InvalidParameterErrCode = "InvalidParameter" - // ParamRequiredErrCode is the error code for required parameter errors - ParamRequiredErrCode = "ParamRequiredError" - // ParamMinValueErrCode is the error code for fields with too low of a - // number value. - ParamMinValueErrCode = "ParamMinValueError" - // ParamMinLenErrCode is the error code for fields without enough elements. - ParamMinLenErrCode = "ParamMinLenError" - // ParamMaxLenErrCode is the error code for value being too long. - ParamMaxLenErrCode = "ParamMaxLenError" - - // ParamFormatErrCode is the error code for a field with invalid - // format or characters. - ParamFormatErrCode = "ParamFormatInvalidError" -) - -// Validator provides a way for types to perform validation logic on their -// input values that external code can use to determine if a type's values -// are valid. -type Validator interface { - Validate() error -} - -// An ErrInvalidParams provides wrapping of invalid parameter errors found when -// validating API operation input parameters. -type ErrInvalidParams struct { - // Context is the base context of the invalid parameter group. - Context string - errs []ErrInvalidParam -} - -// Add adds a new invalid parameter error to the collection of invalid -// parameters. The context of the invalid parameter will be updated to reflect -// this collection. -func (e *ErrInvalidParams) Add(err ErrInvalidParam) { - err.SetContext(e.Context) - e.errs = append(e.errs, err) -} - -// AddNested adds the invalid parameter errors from another ErrInvalidParams -// value into this collection. The nested errors will have their nested context -// updated and base context to reflect the merging. -// -// Use for nested validations errors. -func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInvalidParams) { - for _, err := range nested.errs { - err.SetContext(e.Context) - err.AddNestedContext(nestedCtx) - e.errs = append(e.errs, err) - } -} - -// Len returns the number of invalid parameter errors -func (e ErrInvalidParams) Len() int { - return len(e.errs) -} - -// Code returns the code of the error -func (e ErrInvalidParams) Code() string { - return InvalidParameterErrCode -} - -// Message returns the message of the error -func (e ErrInvalidParams) Message() string { - return fmt.Sprintf("%d validation error(s) found.", len(e.errs)) -} - -// Error returns the string formatted form of the invalid parameters. -func (e ErrInvalidParams) Error() string { - w := &bytes.Buffer{} - fmt.Fprintf(w, "%s: %s\n", e.Code(), e.Message()) - - for _, err := range e.errs { - fmt.Fprintf(w, "- %s\n", err.Message()) - } - - return w.String() -} - -// OrigErr returns the invalid parameters as a awserr.BatchedErrors value -func (e ErrInvalidParams) OrigErr() error { - return awserr.NewBatchError( - InvalidParameterErrCode, e.Message(), e.OrigErrs()) -} - -// OrigErrs returns a slice of the invalid parameters -func (e ErrInvalidParams) OrigErrs() []error { - errs := make([]error, len(e.errs)) - for i := 0; i < len(errs); i++ { - errs[i] = e.errs[i] - } - - return errs -} - -// An ErrInvalidParam represents an invalid parameter error type. -type ErrInvalidParam interface { - awserr.Error - - // Field name the error occurred on. - Field() string - - // SetContext updates the context of the error. - SetContext(string) - - // AddNestedContext updates the error's context to include a nested level. - AddNestedContext(string) -} - -type errInvalidParam struct { - context string - nestedContext string - field string - code string - msg string -} - -// Code returns the error code for the type of invalid parameter. -func (e *errInvalidParam) Code() string { - return e.code -} - -// Message returns the reason the parameter was invalid, and its context. -func (e *errInvalidParam) Message() string { - return fmt.Sprintf("%s, %s.", e.msg, e.Field()) -} - -// Error returns the string version of the invalid parameter error. -func (e *errInvalidParam) Error() string { - return fmt.Sprintf("%s: %s", e.code, e.Message()) -} - -// OrigErr returns nil, Implemented for awserr.Error interface. -func (e *errInvalidParam) OrigErr() error { - return nil -} - -// Field Returns the field and context the error occurred. -func (e *errInvalidParam) Field() string { - field := e.context - if len(field) > 0 { - field += "." - } - if len(e.nestedContext) > 0 { - field += fmt.Sprintf("%s.", e.nestedContext) - } - field += e.field - - return field -} - -// SetContext updates the base context of the error. -func (e *errInvalidParam) SetContext(ctx string) { - e.context = ctx -} - -// AddNestedContext prepends a context to the field's path. -func (e *errInvalidParam) AddNestedContext(ctx string) { - if len(e.nestedContext) == 0 { - e.nestedContext = ctx - } else { - e.nestedContext = fmt.Sprintf("%s.%s", ctx, e.nestedContext) - } - -} - -// An ErrParamRequired represents an required parameter error. -type ErrParamRequired struct { - errInvalidParam -} - -// NewErrParamRequired creates a new required parameter error. -func NewErrParamRequired(field string) *ErrParamRequired { - return &ErrParamRequired{ - errInvalidParam{ - code: ParamRequiredErrCode, - field: field, - msg: fmt.Sprintf("missing required field"), - }, - } -} - -// An ErrParamMinValue represents a minimum value parameter error. -type ErrParamMinValue struct { - errInvalidParam - min float64 -} - -// NewErrParamMinValue creates a new minimum value parameter error. -func NewErrParamMinValue(field string, min float64) *ErrParamMinValue { - return &ErrParamMinValue{ - errInvalidParam: errInvalidParam{ - code: ParamMinValueErrCode, - field: field, - msg: fmt.Sprintf("minimum field value of %v", min), - }, - min: min, - } -} - -// MinValue returns the field's require minimum value. -// -// float64 is returned for both int and float min values. -func (e *ErrParamMinValue) MinValue() float64 { - return e.min -} - -// An ErrParamMinLen represents a minimum length parameter error. -type ErrParamMinLen struct { - errInvalidParam - min int -} - -// NewErrParamMinLen creates a new minimum length parameter error. -func NewErrParamMinLen(field string, min int) *ErrParamMinLen { - return &ErrParamMinLen{ - errInvalidParam: errInvalidParam{ - code: ParamMinLenErrCode, - field: field, - msg: fmt.Sprintf("minimum field size of %v", min), - }, - min: min, - } -} - -// MinLen returns the field's required minimum length. -func (e *ErrParamMinLen) MinLen() int { - return e.min -} - -// An ErrParamMaxLen represents a maximum length parameter error. -type ErrParamMaxLen struct { - errInvalidParam - max int -} - -// NewErrParamMaxLen creates a new maximum length parameter error. -func NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen { - return &ErrParamMaxLen{ - errInvalidParam: errInvalidParam{ - code: ParamMaxLenErrCode, - field: field, - msg: fmt.Sprintf("maximum size of %v, %v", max, value), - }, - max: max, - } -} - -// MaxLen returns the field's required minimum length. -func (e *ErrParamMaxLen) MaxLen() int { - return e.max -} - -// An ErrParamFormat represents a invalid format parameter error. -type ErrParamFormat struct { - errInvalidParam - format string -} - -// NewErrParamFormat creates a new invalid format parameter error. -func NewErrParamFormat(field string, format, value string) *ErrParamFormat { - return &ErrParamFormat{ - errInvalidParam: errInvalidParam{ - code: ParamFormatErrCode, - field: field, - msg: fmt.Sprintf("format %v, %v", format, value), - }, - format: format, - } -} - -// Format returns the field's required format. -func (e *ErrParamFormat) Format() string { - return e.format -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,295 +0,0 @@ -package request - -import ( - "fmt" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/awsutil" -) - -// WaiterResourceNotReadyErrorCode is the error code returned by a waiter when -// the waiter's max attempts have been exhausted. -const WaiterResourceNotReadyErrorCode = "ResourceNotReady" - -// A WaiterOption is a function that will update the Waiter value's fields to -// configure the waiter. -type WaiterOption func(*Waiter) - -// WithWaiterMaxAttempts returns the maximum number of times the waiter should -// attempt to check the resource for the target state. -func WithWaiterMaxAttempts(max int) WaiterOption { - return func(w *Waiter) { - w.MaxAttempts = max - } -} - -// WaiterDelay will return a delay the waiter should pause between attempts to -// check the resource state. The passed in attempt is the number of times the -// Waiter has checked the resource state. -// -// Attempt is the number of attempts the Waiter has made checking the resource -// state. -type WaiterDelay func(attempt int) time.Duration - -// ConstantWaiterDelay returns a WaiterDelay that will always return a constant -// delay the waiter should use between attempts. It ignores the number of -// attempts made. -func ConstantWaiterDelay(delay time.Duration) WaiterDelay { - return func(attempt int) time.Duration { - return delay - } -} - -// WithWaiterDelay will set the Waiter to use the WaiterDelay passed in. -func WithWaiterDelay(delayer WaiterDelay) WaiterOption { - return func(w *Waiter) { - w.Delay = delayer - } -} - -// WithWaiterLogger returns a waiter option to set the logger a waiter -// should use to log warnings and errors to. -func WithWaiterLogger(logger aws.Logger) WaiterOption { - return func(w *Waiter) { - w.Logger = logger - } -} - -// WithWaiterRequestOptions returns a waiter option setting the request -// options for each request the waiter makes. Appends to waiter's request -// options already set. -func WithWaiterRequestOptions(opts ...Option) WaiterOption { - return func(w *Waiter) { - w.RequestOptions = append(w.RequestOptions, opts...) - } -} - -// A Waiter provides the functionality to perform a blocking call which will -// wait for a resource state to be satisfied by a service. -// -// This type should not be used directly. The API operations provided in the -// service packages prefixed with "WaitUntil" should be used instead. -type Waiter struct { - Name string - Acceptors []WaiterAcceptor - Logger aws.Logger - - MaxAttempts int - Delay WaiterDelay - - RequestOptions []Option - NewRequest func([]Option) (*Request, error) - SleepWithContext func(aws.Context, time.Duration) error -} - -// ApplyOptions updates the waiter with the list of waiter options provided. -func (w *Waiter) ApplyOptions(opts ...WaiterOption) { - for _, fn := range opts { - fn(w) - } -} - -// WaiterState are states the waiter uses based on WaiterAcceptor definitions -// to identify if the resource state the waiter is waiting on has occurred. -type WaiterState int - -// String returns the string representation of the waiter state. -func (s WaiterState) String() string { - switch s { - case SuccessWaiterState: - return "success" - case FailureWaiterState: - return "failure" - case RetryWaiterState: - return "retry" - default: - return "unknown waiter state" - } -} - -// States the waiter acceptors will use to identify target resource states. -const ( - SuccessWaiterState WaiterState = iota // waiter successful - FailureWaiterState // waiter failed - RetryWaiterState // waiter needs to be retried -) - -// WaiterMatchMode is the mode that the waiter will use to match the WaiterAcceptor -// definition's Expected attribute. -type WaiterMatchMode int - -// Modes the waiter will use when inspecting API response to identify target -// resource states. -const ( - PathAllWaiterMatch WaiterMatchMode = iota // match on all paths - PathWaiterMatch // match on specific path - PathAnyWaiterMatch // match on any path - PathListWaiterMatch // match on list of paths - StatusWaiterMatch // match on status code - ErrorWaiterMatch // match on error -) - -// String returns the string representation of the waiter match mode. -func (m WaiterMatchMode) String() string { - switch m { - case PathAllWaiterMatch: - return "pathAll" - case PathWaiterMatch: - return "path" - case PathAnyWaiterMatch: - return "pathAny" - case PathListWaiterMatch: - return "pathList" - case StatusWaiterMatch: - return "status" - case ErrorWaiterMatch: - return "error" - default: - return "unknown waiter match mode" - } -} - -// WaitWithContext will make requests for the API operation using NewRequest to -// build API requests. The request's response will be compared against the -// Waiter's Acceptors to determine the successful state of the resource the -// waiter is inspecting. -// -// The passed in context must not be nil. If it is nil a panic will occur. The -// Context will be used to cancel the waiter's pending requests and retry delays. -// Use aws.BackgroundContext if no context is available. -// -// The waiter will continue until the target state defined by the Acceptors, -// or the max attempts expires. -// -// Will return the WaiterResourceNotReadyErrorCode error code if the waiter's -// retryer ShouldRetry returns false. This normally will happen when the max -// wait attempts expires. -func (w Waiter) WaitWithContext(ctx aws.Context) error { - - for attempt := 1; ; attempt++ { - req, err := w.NewRequest(w.RequestOptions) - if err != nil { - waiterLogf(w.Logger, "unable to create request %v", err) - return err - } - req.Handlers.Build.PushBack(MakeAddToUserAgentFreeFormHandler("Waiter")) - err = req.Send() - - // See if any of the acceptors match the request's response, or error - for _, a := range w.Acceptors { - if matched, matchErr := a.match(w.Name, w.Logger, req, err); matched { - return matchErr - } - } - - // The Waiter should only check the resource state MaxAttempts times - // This is here instead of in the for loop above to prevent delaying - // unnecessary when the waiter will not retry. - if attempt == w.MaxAttempts { - break - } - - // Delay to wait before inspecting the resource again - delay := w.Delay(attempt) - if sleepFn := req.Config.SleepDelay; sleepFn != nil { - // Support SleepDelay for backwards compatibility and testing - sleepFn(delay) - } else { - sleepCtxFn := w.SleepWithContext - if sleepCtxFn == nil { - sleepCtxFn = aws.SleepWithContext - } - - if err := sleepCtxFn(ctx, delay); err != nil { - return awserr.New(CanceledErrorCode, "waiter context canceled", err) - } - } - } - - return awserr.New(WaiterResourceNotReadyErrorCode, "exceeded wait attempts", nil) -} - -// A WaiterAcceptor provides the information needed to wait for an API operation -// to complete. -type WaiterAcceptor struct { - State WaiterState - Matcher WaiterMatchMode - Argument string - Expected interface{} -} - -// match returns if the acceptor found a match with the passed in request -// or error. True is returned if the acceptor made a match, error is returned -// if there was an error attempting to perform the match. -func (a *WaiterAcceptor) match(name string, l aws.Logger, req *Request, err error) (bool, error) { - result := false - var vals []interface{} - - switch a.Matcher { - case PathAllWaiterMatch, PathWaiterMatch: - // Require all matches to be equal for result to match - vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) - if len(vals) == 0 { - break - } - result = true - for _, val := range vals { - if !awsutil.DeepEqual(val, a.Expected) { - result = false - break - } - } - case PathAnyWaiterMatch: - // Only a single match needs to equal for the result to match - vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) - for _, val := range vals { - if awsutil.DeepEqual(val, a.Expected) { - result = true - break - } - } - case PathListWaiterMatch: - // ignored matcher - case StatusWaiterMatch: - s := a.Expected.(int) - result = s == req.HTTPResponse.StatusCode - case ErrorWaiterMatch: - if aerr, ok := err.(awserr.Error); ok { - result = aerr.Code() == a.Expected.(string) - } - default: - waiterLogf(l, "WARNING: Waiter %s encountered unexpected matcher: %s", - name, a.Matcher) - } - - if !result { - // If there was no matching result found there is nothing more to do - // for this response, retry the request. - return false, nil - } - - switch a.State { - case SuccessWaiterState: - // waiter completed - return true, nil - case FailureWaiterState: - // Waiter failure state triggered - return true, awserr.New(WaiterResourceNotReadyErrorCode, - "failed waiting for successful resource state", err) - case RetryWaiterState: - // clear the error and retry the operation - return false, nil - default: - waiterLogf(l, "WARNING: Waiter %s encountered unexpected state: %s", - name, a.State) - return false, nil - } -} - -func waiterLogf(logger aws.Logger, msg string, args ...interface{}) { - if logger != nil { - logger.Log(fmt.Sprintf(msg, args...)) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -// +build !go1.6,go1.5 - -package session - -import ( - "net" - "net/http" - "time" -) - -// Transport that should be used when a custom CA bundle is specified with the -// SDK. -func getCABundleTransport() *http.Transport { - return &http.Transport{ - Proxy: http.ProxyFromEnvironment, - Dial: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, - }).Dial, - TLSHandshakeTimeout: 10 * time.Second, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -// +build !go1.7,go1.6 - -package session - -import ( - "net" - "net/http" - "time" -) - -// Transport that should be used when a custom CA bundle is specified with the -// SDK. -func getCABundleTransport() *http.Transport { - return &http.Transport{ - Proxy: http.ProxyFromEnvironment, - Dial: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, - }).Dial, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -// +build go1.7 - -package session - -import ( - "net" - "net/http" - "time" -) - -// Transport that should be used when a custom CA bundle is specified with the -// SDK. -func getCABundleTransport() *http.Transport { - return &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, - DualStack: true, - }).DialContext, - MaxIdleConns: 100, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -package session - -import ( - "fmt" - "os" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/credentials/processcreds" - "github.com/aws/aws-sdk-go/aws/credentials/stscreds" - "github.com/aws/aws-sdk-go/aws/defaults" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/internal/shareddefaults" -) - -func resolveCredentials(cfg *aws.Config, - envCfg envConfig, sharedCfg sharedConfig, - handlers request.Handlers, - sessOpts Options, -) (*credentials.Credentials, error) { - - switch { - case len(sessOpts.Profile) != 0: - // User explicitly provided an Profile in the session's configuration - // so load that profile from shared config first. - // Github(aws/aws-sdk-go#2727) - return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts) - - case envCfg.Creds.HasKeys(): - // Environment credentials - return credentials.NewStaticCredentialsFromCreds(envCfg.Creds), nil - - case len(envCfg.WebIdentityTokenFilePath) != 0: - // Web identity token from environment, RoleARN required to also be - // set. - return assumeWebIdentity(cfg, handlers, - envCfg.WebIdentityTokenFilePath, - envCfg.RoleARN, - envCfg.RoleSessionName, - ) - - default: - // Fallback to the "default" credential resolution chain. - return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts) - } -} - -// WebIdentityEmptyRoleARNErr will occur if 'AWS_WEB_IDENTITY_TOKEN_FILE' was set but -// 'AWS_ROLE_ARN' was not set. -var WebIdentityEmptyRoleARNErr = awserr.New(stscreds.ErrCodeWebIdentity, "role ARN is not set", nil) - -// WebIdentityEmptyTokenFilePathErr will occur if 'AWS_ROLE_ARN' was set but -// 'AWS_WEB_IDENTITY_TOKEN_FILE' was not set. -var WebIdentityEmptyTokenFilePathErr = awserr.New(stscreds.ErrCodeWebIdentity, "token file path is not set", nil) - -func assumeWebIdentity(cfg *aws.Config, handlers request.Handlers, - filepath string, - roleARN, sessionName string, -) (*credentials.Credentials, error) { - - if len(filepath) == 0 { - return nil, WebIdentityEmptyTokenFilePathErr - } - - if len(roleARN) == 0 { - return nil, WebIdentityEmptyRoleARNErr - } - - creds := stscreds.NewWebIdentityCredentials( - &Session{ - Config: cfg, - Handlers: handlers.Copy(), - }, - roleARN, - sessionName, - filepath, - ) - - return creds, nil -} - -func resolveCredsFromProfile(cfg *aws.Config, - envCfg envConfig, sharedCfg sharedConfig, - handlers request.Handlers, - sessOpts Options, -) (creds *credentials.Credentials, err error) { - - switch { - case sharedCfg.SourceProfile != nil: - // Assume IAM role with credentials source from a different profile. - creds, err = resolveCredsFromProfile(cfg, envCfg, - *sharedCfg.SourceProfile, handlers, sessOpts, - ) - - case sharedCfg.Creds.HasKeys(): - // Static Credentials from Shared Config/Credentials file. - creds = credentials.NewStaticCredentialsFromCreds( - sharedCfg.Creds, - ) - - case len(sharedCfg.CredentialProcess) != 0: - // Get credentials from CredentialProcess - creds = processcreds.NewCredentials(sharedCfg.CredentialProcess) - - case len(sharedCfg.CredentialSource) != 0: - creds, err = resolveCredsFromSource(cfg, envCfg, - sharedCfg, handlers, sessOpts, - ) - - case len(sharedCfg.WebIdentityTokenFile) != 0: - // Credentials from Assume Web Identity token require an IAM Role, and - // that roll will be assumed. May be wrapped with another assume role - // via SourceProfile. - return assumeWebIdentity(cfg, handlers, - sharedCfg.WebIdentityTokenFile, - sharedCfg.RoleARN, - sharedCfg.RoleSessionName, - ) - - default: - // Fallback to default credentials provider, include mock errors for - // the credential chain so user can identify why credentials failed to - // be retrieved. - creds = credentials.NewCredentials(&credentials.ChainProvider{ - VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), - Providers: []credentials.Provider{ - &credProviderError{ - Err: awserr.New("EnvAccessKeyNotFound", - "failed to find credentials in the environment.", nil), - }, - &credProviderError{ - Err: awserr.New("SharedCredsLoad", - fmt.Sprintf("failed to load profile, %s.", envCfg.Profile), nil), - }, - defaults.RemoteCredProvider(*cfg, handlers), - }, - }) - } - if err != nil { - return nil, err - } - - if len(sharedCfg.RoleARN) > 0 { - cfgCp := *cfg - cfgCp.Credentials = creds - return credsFromAssumeRole(cfgCp, handlers, sharedCfg, sessOpts) - } - - return creds, nil -} - -// valid credential source values -const ( - credSourceEc2Metadata = "Ec2InstanceMetadata" - credSourceEnvironment = "Environment" - credSourceECSContainer = "EcsContainer" -) - -func resolveCredsFromSource(cfg *aws.Config, - envCfg envConfig, sharedCfg sharedConfig, - handlers request.Handlers, - sessOpts Options, -) (creds *credentials.Credentials, err error) { - - switch sharedCfg.CredentialSource { - case credSourceEc2Metadata: - p := defaults.RemoteCredProvider(*cfg, handlers) - creds = credentials.NewCredentials(p) - - case credSourceEnvironment: - creds = credentials.NewStaticCredentialsFromCreds(envCfg.Creds) - - case credSourceECSContainer: - if len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 { - return nil, ErrSharedConfigECSContainerEnvVarEmpty - } - - p := defaults.RemoteCredProvider(*cfg, handlers) - creds = credentials.NewCredentials(p) - - default: - return nil, ErrSharedConfigInvalidCredSource - } - - return creds, nil -} - -func credsFromAssumeRole(cfg aws.Config, - handlers request.Handlers, - sharedCfg sharedConfig, - sessOpts Options, -) (*credentials.Credentials, error) { - - if len(sharedCfg.MFASerial) != 0 && sessOpts.AssumeRoleTokenProvider == nil { - // AssumeRole Token provider is required if doing Assume Role - // with MFA. - return nil, AssumeRoleTokenProviderNotSetError{} - } - - return stscreds.NewCredentials( - &Session{ - Config: &cfg, - Handlers: handlers.Copy(), - }, - sharedCfg.RoleARN, - func(opt *stscreds.AssumeRoleProvider) { - opt.RoleSessionName = sharedCfg.RoleSessionName - opt.Duration = sessOpts.AssumeRoleDuration - - // Assume role with external ID - if len(sharedCfg.ExternalID) > 0 { - opt.ExternalID = aws.String(sharedCfg.ExternalID) - } - - // Assume role with MFA - if len(sharedCfg.MFASerial) > 0 { - opt.SerialNumber = aws.String(sharedCfg.MFASerial) - opt.TokenProvider = sessOpts.AssumeRoleTokenProvider - } - }, - ), nil -} - -// AssumeRoleTokenProviderNotSetError is an error returned when creating a -// session when the MFAToken option is not set when shared config is configured -// load assume a role with an MFA token. -type AssumeRoleTokenProviderNotSetError struct{} - -// Code is the short id of the error. -func (e AssumeRoleTokenProviderNotSetError) Code() string { - return "AssumeRoleTokenProviderNotSetError" -} - -// Message is the description of the error -func (e AssumeRoleTokenProviderNotSetError) Message() string { - return fmt.Sprintf("assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.") -} - -// OrigErr is the underlying error that caused the failure. -func (e AssumeRoleTokenProviderNotSetError) OrigErr() error { - return nil -} - -// Error satisfies the error interface. -func (e AssumeRoleTokenProviderNotSetError) Error() string { - return awserr.SprintError(e.Code(), e.Message(), "", nil) -} - -type credProviderError struct { - Err error -} - -func (c credProviderError) Retrieve() (credentials.Value, error) { - return credentials.Value{}, c.Err -} -func (c credProviderError) IsExpired() bool { - return true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,245 +0,0 @@ -/* -Package session provides configuration for the SDK's service clients. Sessions -can be shared across service clients that share the same base configuration. - -Sessions are safe to use concurrently as long as the Session is not being -modified. Sessions should be cached when possible, because creating a new -Session will load all configuration values from the environment, and config -files each time the Session is created. Sharing the Session value across all of -your service clients will ensure the configuration is loaded the fewest number -of times possible. - -Sessions options from Shared Config - -By default NewSession will only load credentials from the shared credentials -file (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is -set to a truthy value the Session will be created from the configuration -values from the shared config (~/.aws/config) and shared credentials -(~/.aws/credentials) files. Using the NewSessionWithOptions with -SharedConfigState set to SharedConfigEnable will create the session as if the -AWS_SDK_LOAD_CONFIG environment variable was set. - -Credential and config loading order - -The Session will attempt to load configuration and credentials from the -environment, configuration files, and other credential sources. The order -configuration is loaded in is: - - * Environment Variables - * Shared Credentials file - * Shared Configuration file (if SharedConfig is enabled) - * EC2 Instance Metadata (credentials only) - -The Environment variables for credentials will have precedence over shared -config even if SharedConfig is enabled. To override this behavior, and use -shared config credentials instead specify the session.Options.Profile, (e.g. -when using credential_source=Environment to assume a role). - - sess, err := session.NewSessionWithOptions(session.Options{ - Profile: "myProfile", - }) - -Creating Sessions - -Creating a Session without additional options will load credentials region, and -profile loaded from the environment and shared config automatically. See, -"Environment Variables" section for information on environment variables used -by Session. - - // Create Session - sess, err := session.NewSession() - - -When creating Sessions optional aws.Config values can be passed in that will -override the default, or loaded, config values the Session is being created -with. This allows you to provide additional, or case based, configuration -as needed. - - // Create a Session with a custom region - sess, err := session.NewSession(&aws.Config{ - Region: aws.String("us-west-2"), - }) - -Use NewSessionWithOptions to provide additional configuration driving how the -Session's configuration will be loaded. Such as, specifying shared config -profile, or override the shared config state, (AWS_SDK_LOAD_CONFIG). - - // Equivalent to session.NewSession() - sess, err := session.NewSessionWithOptions(session.Options{ - // Options - }) - - sess, err := session.NewSessionWithOptions(session.Options{ - // Specify profile to load for the session's config - Profile: "profile_name", - - // Provide SDK Config options, such as Region. - Config: aws.Config{ - Region: aws.String("us-west-2"), - }, - - // Force enable Shared Config support - SharedConfigState: session.SharedConfigEnable, - }) - -Adding Handlers - -You can add handlers to a session to decorate API operation, (e.g. adding HTTP -headers). All clients that use the Session receive a copy of the Session's -handlers. For example, the following request handler added to the Session logs -every requests made. - - // Create a session, and add additional handlers for all service - // clients created with the Session to inherit. Adds logging handler. - sess := session.Must(session.NewSession()) - - sess.Handlers.Send.PushFront(func(r *request.Request) { - // Log every request made and its payload - logger.Printf("Request: %s/%s, Params: %s", - r.ClientInfo.ServiceName, r.Operation, r.Params) - }) - -Shared Config Fields - -By default the SDK will only load the shared credentials file's -(~/.aws/credentials) credentials values, and all other config is provided by -the environment variables, SDK defaults, and user provided aws.Config values. - -If the AWS_SDK_LOAD_CONFIG environment variable is set, or SharedConfigEnable -option is used to create the Session the full shared config values will be -loaded. This includes credentials, region, and support for assume role. In -addition the Session will load its configuration from both the shared config -file (~/.aws/config) and shared credentials file (~/.aws/credentials). Both -files have the same format. - -If both config files are present the configuration from both files will be -read. The Session will be created from configuration values from the shared -credentials file (~/.aws/credentials) over those in the shared config file -(~/.aws/config). - -Credentials are the values the SDK uses to authenticating requests with AWS -Services. When specified in a file, both aws_access_key_id and -aws_secret_access_key must be provided together in the same file to be -considered valid. They will be ignored if both are not present. -aws_session_token is an optional field that can be provided in addition to the -other two fields. - - aws_access_key_id = AKID - aws_secret_access_key = SECRET - aws_session_token = TOKEN - - ; region only supported if SharedConfigEnabled. - region = us-east-1 - -Assume Role configuration - -The role_arn field allows you to configure the SDK to assume an IAM role using -a set of credentials from another source. Such as when paired with static -credentials, "profile_source", "credential_process", or "credential_source" -fields. If "role_arn" is provided, a source of credentials must also be -specified, such as "source_profile", "credential_source", or -"credential_process". - - role_arn = arn:aws:iam:::role/ - source_profile = profile_with_creds - external_id = 1234 - mfa_serial = - role_session_name = session_name - - -The SDK supports assuming a role with MFA token. If "mfa_serial" is set, you -must also set the Session Option.AssumeRoleTokenProvider. The Session will fail -to load if the AssumeRoleTokenProvider is not specified. - - sess := session.Must(session.NewSessionWithOptions(session.Options{ - AssumeRoleTokenProvider: stscreds.StdinTokenProvider, - })) - -To setup Assume Role outside of a session see the stscreds.AssumeRoleProvider -documentation. - -Environment Variables - -When a Session is created several environment variables can be set to adjust -how the SDK functions, and what configuration data it loads when creating -Sessions. All environment values are optional, but some values like credentials -require multiple of the values to set or the partial values will be ignored. -All environment variable values are strings unless otherwise noted. - -Environment configuration values. If set both Access Key ID and Secret Access -Key must be provided. Session Token and optionally also be provided, but is -not required. - - # Access Key ID - AWS_ACCESS_KEY_ID=AKID - AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set. - - # Secret Access Key - AWS_SECRET_ACCESS_KEY=SECRET - AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set. - - # Session Token - AWS_SESSION_TOKEN=TOKEN - -Region value will instruct the SDK where to make service API requests to. If is -not provided in the environment the region must be provided before a service -client request is made. - - AWS_REGION=us-east-1 - - # AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set, - # and AWS_REGION is not also set. - AWS_DEFAULT_REGION=us-east-1 - -Profile name the SDK should load use when loading shared config from the -configuration files. If not provided "default" will be used as the profile name. - - AWS_PROFILE=my_profile - - # AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set, - # and AWS_PROFILE is not also set. - AWS_DEFAULT_PROFILE=my_profile - -SDK load config instructs the SDK to load the shared config in addition to -shared credentials. This also expands the configuration loaded so the shared -credentials will have parity with the shared config file. This also enables -Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE -env values as well. - - AWS_SDK_LOAD_CONFIG=1 - -Shared credentials file path can be set to instruct the SDK to use an alternative -file for the shared credentials. If not set the file will be loaded from -$HOME/.aws/credentials on Linux/Unix based systems, and -%USERPROFILE%\.aws\credentials on Windows. - - AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials - -Shared config file path can be set to instruct the SDK to use an alternative -file for the shared config. If not set the file will be loaded from -$HOME/.aws/config on Linux/Unix based systems, and -%USERPROFILE%\.aws\config on Windows. - - AWS_CONFIG_FILE=$HOME/my_shared_config - -Path to a custom Credentials Authority (CA) bundle PEM file that the SDK -will use instead of the default system's root CA bundle. Use this only -if you want to replace the CA bundle the SDK uses for TLS requests. - - AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle - -Enabling this option will attempt to merge the Transport into the SDK's HTTP -client. If the client's Transport is not a http.Transport an error will be -returned. If the Transport's TLS config is set this option will cause the SDK -to overwrite the Transport's TLS config's RootCAs value. If the CA bundle file -contains multiple certificates all of them will be loaded. - -The Session option CustomCABundle is also available when creating sessions -to also enable this feature. CustomCABundle session option field has priority -over the AWS_CA_BUNDLE environment variable, and will be used if both are set. - -Setting a custom HTTPClient in the aws.Config options will override this setting. -To use this option and custom HTTP client, the HTTP client needs to be provided -when creating the session. Not the service client. -*/ -package session diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,320 +0,0 @@ -package session - -import ( - "fmt" - "os" - "strconv" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/defaults" - "github.com/aws/aws-sdk-go/aws/endpoints" -) - -// EnvProviderName provides a name of the provider when config is loaded from environment. -const EnvProviderName = "EnvConfigCredentials" - -// envConfig is a collection of environment values the SDK will read -// setup config from. All environment values are optional. But some values -// such as credentials require multiple values to be complete or the values -// will be ignored. -type envConfig struct { - // Environment configuration values. If set both Access Key ID and Secret Access - // Key must be provided. Session Token and optionally also be provided, but is - // not required. - // - // # Access Key ID - // AWS_ACCESS_KEY_ID=AKID - // AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set. - // - // # Secret Access Key - // AWS_SECRET_ACCESS_KEY=SECRET - // AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set. - // - // # Session Token - // AWS_SESSION_TOKEN=TOKEN - Creds credentials.Value - - // Region value will instruct the SDK where to make service API requests to. If is - // not provided in the environment the region must be provided before a service - // client request is made. - // - // AWS_REGION=us-east-1 - // - // # AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set, - // # and AWS_REGION is not also set. - // AWS_DEFAULT_REGION=us-east-1 - Region string - - // Profile name the SDK should load use when loading shared configuration from the - // shared configuration files. If not provided "default" will be used as the - // profile name. - // - // AWS_PROFILE=my_profile - // - // # AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set, - // # and AWS_PROFILE is not also set. - // AWS_DEFAULT_PROFILE=my_profile - Profile string - - // SDK load config instructs the SDK to load the shared config in addition to - // shared credentials. This also expands the configuration loaded from the shared - // credentials to have parity with the shared config file. This also enables - // Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE - // env values as well. - // - // AWS_SDK_LOAD_CONFIG=1 - EnableSharedConfig bool - - // Shared credentials file path can be set to instruct the SDK to use an alternate - // file for the shared credentials. If not set the file will be loaded from - // $HOME/.aws/credentials on Linux/Unix based systems, and - // %USERPROFILE%\.aws\credentials on Windows. - // - // AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials - SharedCredentialsFile string - - // Shared config file path can be set to instruct the SDK to use an alternate - // file for the shared config. If not set the file will be loaded from - // $HOME/.aws/config on Linux/Unix based systems, and - // %USERPROFILE%\.aws\config on Windows. - // - // AWS_CONFIG_FILE=$HOME/my_shared_config - SharedConfigFile string - - // Sets the path to a custom Credentials Authority (CA) Bundle PEM file - // that the SDK will use instead of the system's root CA bundle. - // Only use this if you want to configure the SDK to use a custom set - // of CAs. - // - // Enabling this option will attempt to merge the Transport - // into the SDK's HTTP client. If the client's Transport is - // not a http.Transport an error will be returned. If the - // Transport's TLS config is set this option will cause the - // SDK to overwrite the Transport's TLS config's RootCAs value. - // - // Setting a custom HTTPClient in the aws.Config options will override this setting. - // To use this option and custom HTTP client, the HTTP client needs to be provided - // when creating the session. Not the service client. - // - // AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle - CustomCABundle string - - csmEnabled string - CSMEnabled *bool - CSMPort string - CSMHost string - CSMClientID string - - // Enables endpoint discovery via environment variables. - // - // AWS_ENABLE_ENDPOINT_DISCOVERY=true - EnableEndpointDiscovery *bool - enableEndpointDiscovery string - - // Specifies the WebIdentity token the SDK should use to assume a role - // with. - // - // AWS_WEB_IDENTITY_TOKEN_FILE=file_path - WebIdentityTokenFilePath string - - // Specifies the IAM role arn to use when assuming an role. - // - // AWS_ROLE_ARN=role_arn - RoleARN string - - // Specifies the IAM role session name to use when assuming a role. - // - // AWS_ROLE_SESSION_NAME=session_name - RoleSessionName string - - // Specifies the STS Regional Endpoint flag for the SDK to resolve the endpoint - // for a service. - // - // AWS_STS_REGIONAL_ENDPOINTS=regional - // This can take value as `regional` or `legacy` - STSRegionalEndpoint endpoints.STSRegionalEndpoint - - // Specifies the S3 Regional Endpoint flag for the SDK to resolve the - // endpoint for a service. - // - // AWS_S3_US_EAST_1_REGIONAL_ENDPOINT=regional - // This can take value as `regional` or `legacy` - S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint -} - -var ( - csmEnabledEnvKey = []string{ - "AWS_CSM_ENABLED", - } - csmHostEnvKey = []string{ - "AWS_CSM_HOST", - } - csmPortEnvKey = []string{ - "AWS_CSM_PORT", - } - csmClientIDEnvKey = []string{ - "AWS_CSM_CLIENT_ID", - } - credAccessEnvKey = []string{ - "AWS_ACCESS_KEY_ID", - "AWS_ACCESS_KEY", - } - credSecretEnvKey = []string{ - "AWS_SECRET_ACCESS_KEY", - "AWS_SECRET_KEY", - } - credSessionEnvKey = []string{ - "AWS_SESSION_TOKEN", - } - - enableEndpointDiscoveryEnvKey = []string{ - "AWS_ENABLE_ENDPOINT_DISCOVERY", - } - - regionEnvKeys = []string{ - "AWS_REGION", - "AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set - } - profileEnvKeys = []string{ - "AWS_PROFILE", - "AWS_DEFAULT_PROFILE", // Only read if AWS_SDK_LOAD_CONFIG is also set - } - sharedCredsFileEnvKey = []string{ - "AWS_SHARED_CREDENTIALS_FILE", - } - sharedConfigFileEnvKey = []string{ - "AWS_CONFIG_FILE", - } - webIdentityTokenFilePathEnvKey = []string{ - "AWS_WEB_IDENTITY_TOKEN_FILE", - } - roleARNEnvKey = []string{ - "AWS_ROLE_ARN", - } - roleSessionNameEnvKey = []string{ - "AWS_ROLE_SESSION_NAME", - } - stsRegionalEndpointKey = []string{ - "AWS_STS_REGIONAL_ENDPOINTS", - } - s3UsEast1RegionalEndpoint = []string{ - "AWS_S3_US_EAST_1_REGIONAL_ENDPOINT", - } -) - -// loadEnvConfig retrieves the SDK's environment configuration. -// See `envConfig` for the values that will be retrieved. -// -// If the environment variable `AWS_SDK_LOAD_CONFIG` is set to a truthy value -// the shared SDK config will be loaded in addition to the SDK's specific -// configuration values. -func loadEnvConfig() (envConfig, error) { - enableSharedConfig, _ := strconv.ParseBool(os.Getenv("AWS_SDK_LOAD_CONFIG")) - return envConfigLoad(enableSharedConfig) -} - -// loadEnvSharedConfig retrieves the SDK's environment configuration, and the -// SDK shared config. See `envConfig` for the values that will be retrieved. -// -// Loads the shared configuration in addition to the SDK's specific configuration. -// This will load the same values as `loadEnvConfig` if the `AWS_SDK_LOAD_CONFIG` -// environment variable is set. -func loadSharedEnvConfig() (envConfig, error) { - return envConfigLoad(true) -} - -func envConfigLoad(enableSharedConfig bool) (envConfig, error) { - cfg := envConfig{} - - cfg.EnableSharedConfig = enableSharedConfig - - // Static environment credentials - var creds credentials.Value - setFromEnvVal(&creds.AccessKeyID, credAccessEnvKey) - setFromEnvVal(&creds.SecretAccessKey, credSecretEnvKey) - setFromEnvVal(&creds.SessionToken, credSessionEnvKey) - if creds.HasKeys() { - // Require logical grouping of credentials - creds.ProviderName = EnvProviderName - cfg.Creds = creds - } - - // Role Metadata - setFromEnvVal(&cfg.RoleARN, roleARNEnvKey) - setFromEnvVal(&cfg.RoleSessionName, roleSessionNameEnvKey) - - // Web identity environment variables - setFromEnvVal(&cfg.WebIdentityTokenFilePath, webIdentityTokenFilePathEnvKey) - - // CSM environment variables - setFromEnvVal(&cfg.csmEnabled, csmEnabledEnvKey) - setFromEnvVal(&cfg.CSMHost, csmHostEnvKey) - setFromEnvVal(&cfg.CSMPort, csmPortEnvKey) - setFromEnvVal(&cfg.CSMClientID, csmClientIDEnvKey) - - if len(cfg.csmEnabled) != 0 { - v, _ := strconv.ParseBool(cfg.csmEnabled) - cfg.CSMEnabled = &v - } - - regionKeys := regionEnvKeys - profileKeys := profileEnvKeys - if !cfg.EnableSharedConfig { - regionKeys = regionKeys[:1] - profileKeys = profileKeys[:1] - } - - setFromEnvVal(&cfg.Region, regionKeys) - setFromEnvVal(&cfg.Profile, profileKeys) - - // endpoint discovery is in reference to it being enabled. - setFromEnvVal(&cfg.enableEndpointDiscovery, enableEndpointDiscoveryEnvKey) - if len(cfg.enableEndpointDiscovery) > 0 { - cfg.EnableEndpointDiscovery = aws.Bool(cfg.enableEndpointDiscovery != "false") - } - - setFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey) - setFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey) - - if len(cfg.SharedCredentialsFile) == 0 { - cfg.SharedCredentialsFile = defaults.SharedCredentialsFilename() - } - if len(cfg.SharedConfigFile) == 0 { - cfg.SharedConfigFile = defaults.SharedConfigFilename() - } - - cfg.CustomCABundle = os.Getenv("AWS_CA_BUNDLE") - - var err error - // STS Regional Endpoint variable - for _, k := range stsRegionalEndpointKey { - if v := os.Getenv(k); len(v) != 0 { - cfg.STSRegionalEndpoint, err = endpoints.GetSTSRegionalEndpoint(v) - if err != nil { - return cfg, fmt.Errorf("failed to load, %v from env config, %v", k, err) - } - } - } - - // S3 Regional Endpoint variable - for _, k := range s3UsEast1RegionalEndpoint { - if v := os.Getenv(k); len(v) != 0 { - cfg.S3UsEast1RegionalEndpoint, err = endpoints.GetS3UsEast1RegionalEndpoint(v) - if err != nil { - return cfg, fmt.Errorf("failed to load, %v from env config, %v", k, err) - } - } - } - - return cfg, nil -} - -func setFromEnvVal(dst *string, keys []string) { - for _, k := range keys { - if v := os.Getenv(k); len(v) != 0 { - *dst = v - break - } - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/session.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/session.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/session.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/session.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,719 +0,0 @@ -package session - -import ( - "crypto/tls" - "crypto/x509" - "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/corehandlers" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/csm" - "github.com/aws/aws-sdk-go/aws/defaults" - "github.com/aws/aws-sdk-go/aws/endpoints" - "github.com/aws/aws-sdk-go/aws/request" -) - -const ( - // ErrCodeSharedConfig represents an error that occurs in the shared - // configuration logic - ErrCodeSharedConfig = "SharedConfigErr" -) - -// ErrSharedConfigSourceCollision will be returned if a section contains both -// source_profile and credential_source -var ErrSharedConfigSourceCollision = awserr.New(ErrCodeSharedConfig, "only source profile or credential source can be specified, not both", nil) - -// ErrSharedConfigECSContainerEnvVarEmpty will be returned if the environment -// variables are empty and Environment was set as the credential source -var ErrSharedConfigECSContainerEnvVarEmpty = awserr.New(ErrCodeSharedConfig, "EcsContainer was specified as the credential_source, but 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' was not set", nil) - -// ErrSharedConfigInvalidCredSource will be returned if an invalid credential source was provided -var ErrSharedConfigInvalidCredSource = awserr.New(ErrCodeSharedConfig, "credential source values must be EcsContainer, Ec2InstanceMetadata, or Environment", nil) - -// A Session provides a central location to create service clients from and -// store configurations and request handlers for those services. -// -// Sessions are safe to create service clients concurrently, but it is not safe -// to mutate the Session concurrently. -// -// The Session satisfies the service client's client.ConfigProvider. -type Session struct { - Config *aws.Config - Handlers request.Handlers -} - -// New creates a new instance of the handlers merging in the provided configs -// on top of the SDK's default configurations. Once the Session is created it -// can be mutated to modify the Config or Handlers. The Session is safe to be -// read concurrently, but it should not be written to concurrently. -// -// If the AWS_SDK_LOAD_CONFIG environment is set to a truthy value, the New -// method could now encounter an error when loading the configuration. When -// The environment variable is set, and an error occurs, New will return a -// session that will fail all requests reporting the error that occurred while -// loading the session. Use NewSession to get the error when creating the -// session. -// -// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value -// the shared config file (~/.aws/config) will also be loaded, in addition to -// the shared credentials file (~/.aws/credentials). Values set in both the -// shared config, and shared credentials will be taken from the shared -// credentials file. -// -// Deprecated: Use NewSession functions to create sessions instead. NewSession -// has the same functionality as New except an error can be returned when the -// func is called instead of waiting to receive an error until a request is made. -func New(cfgs ...*aws.Config) *Session { - // load initial config from environment - envCfg, envErr := loadEnvConfig() - - if envCfg.EnableSharedConfig { - var cfg aws.Config - cfg.MergeIn(cfgs...) - s, err := NewSessionWithOptions(Options{ - Config: cfg, - SharedConfigState: SharedConfigEnable, - }) - if err != nil { - // Old session.New expected all errors to be discovered when - // a request is made, and would report the errors then. This - // needs to be replicated if an error occurs while creating - // the session. - msg := "failed to create session with AWS_SDK_LOAD_CONFIG enabled. " + - "Use session.NewSession to handle errors occurring during session creation." - - // Session creation failed, need to report the error and prevent - // any requests from succeeding. - s = &Session{Config: defaults.Config()} - s.logDeprecatedNewSessionError(msg, err, cfgs) - } - - return s - } - - s := deprecatedNewSession(cfgs...) - if envErr != nil { - msg := "failed to load env config" - s.logDeprecatedNewSessionError(msg, envErr, cfgs) - } - - if csmCfg, err := loadCSMConfig(envCfg, []string{}); err != nil { - if l := s.Config.Logger; l != nil { - l.Log(fmt.Sprintf("ERROR: failed to load CSM configuration, %v", err)) - } - } else if csmCfg.Enabled { - err := enableCSM(&s.Handlers, csmCfg, s.Config.Logger) - if err != nil { - msg := "failed to enable CSM" - s.logDeprecatedNewSessionError(msg, err, cfgs) - } - } - - return s -} - -// NewSession returns a new Session created from SDK defaults, config files, -// environment, and user provided config files. Once the Session is created -// it can be mutated to modify the Config or Handlers. The Session is safe to -// be read concurrently, but it should not be written to concurrently. -// -// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value -// the shared config file (~/.aws/config) will also be loaded in addition to -// the shared credentials file (~/.aws/credentials). Values set in both the -// shared config, and shared credentials will be taken from the shared -// credentials file. Enabling the Shared Config will also allow the Session -// to be built with retrieving credentials with AssumeRole set in the config. -// -// See the NewSessionWithOptions func for information on how to override or -// control through code how the Session will be created, such as specifying the -// config profile, and controlling if shared config is enabled or not. -func NewSession(cfgs ...*aws.Config) (*Session, error) { - opts := Options{} - opts.Config.MergeIn(cfgs...) - - return NewSessionWithOptions(opts) -} - -// SharedConfigState provides the ability to optionally override the state -// of the session's creation based on the shared config being enabled or -// disabled. -type SharedConfigState int - -const ( - // SharedConfigStateFromEnv does not override any state of the - // AWS_SDK_LOAD_CONFIG env var. It is the default value of the - // SharedConfigState type. - SharedConfigStateFromEnv SharedConfigState = iota - - // SharedConfigDisable overrides the AWS_SDK_LOAD_CONFIG env var value - // and disables the shared config functionality. - SharedConfigDisable - - // SharedConfigEnable overrides the AWS_SDK_LOAD_CONFIG env var value - // and enables the shared config functionality. - SharedConfigEnable -) - -// Options provides the means to control how a Session is created and what -// configuration values will be loaded. -// -type Options struct { - // Provides config values for the SDK to use when creating service clients - // and making API requests to services. Any value set in with this field - // will override the associated value provided by the SDK defaults, - // environment or config files where relevant. - // - // If not set, configuration values from from SDK defaults, environment, - // config will be used. - Config aws.Config - - // Overrides the config profile the Session should be created from. If not - // set the value of the environment variable will be loaded (AWS_PROFILE, - // or AWS_DEFAULT_PROFILE if the Shared Config is enabled). - // - // If not set and environment variables are not set the "default" - // (DefaultSharedConfigProfile) will be used as the profile to load the - // session config from. - Profile string - - // Instructs how the Session will be created based on the AWS_SDK_LOAD_CONFIG - // environment variable. By default a Session will be created using the - // value provided by the AWS_SDK_LOAD_CONFIG environment variable. - // - // Setting this value to SharedConfigEnable or SharedConfigDisable - // will allow you to override the AWS_SDK_LOAD_CONFIG environment variable - // and enable or disable the shared config functionality. - SharedConfigState SharedConfigState - - // Ordered list of files the session will load configuration from. - // It will override environment variable AWS_SHARED_CREDENTIALS_FILE, AWS_CONFIG_FILE. - SharedConfigFiles []string - - // When the SDK's shared config is configured to assume a role with MFA - // this option is required in order to provide the mechanism that will - // retrieve the MFA token. There is no default value for this field. If - // it is not set an error will be returned when creating the session. - // - // This token provider will be called when ever the assumed role's - // credentials need to be refreshed. Within the context of service clients - // all sharing the same session the SDK will ensure calls to the token - // provider are atomic. When sharing a token provider across multiple - // sessions additional synchronization logic is needed to ensure the - // token providers do not introduce race conditions. It is recommend to - // share the session where possible. - // - // stscreds.StdinTokenProvider is a basic implementation that will prompt - // from stdin for the MFA token code. - // - // This field is only used if the shared configuration is enabled, and - // the config enables assume role wit MFA via the mfa_serial field. - AssumeRoleTokenProvider func() (string, error) - - // When the SDK's shared config is configured to assume a role this option - // may be provided to set the expiry duration of the STS credentials. - // Defaults to 15 minutes if not set as documented in the - // stscreds.AssumeRoleProvider. - AssumeRoleDuration time.Duration - - // Reader for a custom Credentials Authority (CA) bundle in PEM format that - // the SDK will use instead of the default system's root CA bundle. Use this - // only if you want to replace the CA bundle the SDK uses for TLS requests. - // - // Enabling this option will attempt to merge the Transport into the SDK's HTTP - // client. If the client's Transport is not a http.Transport an error will be - // returned. If the Transport's TLS config is set this option will cause the SDK - // to overwrite the Transport's TLS config's RootCAs value. If the CA - // bundle reader contains multiple certificates all of them will be loaded. - // - // The Session option CustomCABundle is also available when creating sessions - // to also enable this feature. CustomCABundle session option field has priority - // over the AWS_CA_BUNDLE environment variable, and will be used if both are set. - CustomCABundle io.Reader - - // The handlers that the session and all API clients will be created with. - // This must be a complete set of handlers. Use the defaults.Handlers() - // function to initialize this value before changing the handlers to be - // used by the SDK. - Handlers request.Handlers -} - -// NewSessionWithOptions returns a new Session created from SDK defaults, config files, -// environment, and user provided config files. This func uses the Options -// values to configure how the Session is created. -// -// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value -// the shared config file (~/.aws/config) will also be loaded in addition to -// the shared credentials file (~/.aws/credentials). Values set in both the -// shared config, and shared credentials will be taken from the shared -// credentials file. Enabling the Shared Config will also allow the Session -// to be built with retrieving credentials with AssumeRole set in the config. -// -// // Equivalent to session.New -// sess := session.Must(session.NewSessionWithOptions(session.Options{})) -// -// // Specify profile to load for the session's config -// sess := session.Must(session.NewSessionWithOptions(session.Options{ -// Profile: "profile_name", -// })) -// -// // Specify profile for config and region for requests -// sess := session.Must(session.NewSessionWithOptions(session.Options{ -// Config: aws.Config{Region: aws.String("us-east-1")}, -// Profile: "profile_name", -// })) -// -// // Force enable Shared Config support -// sess := session.Must(session.NewSessionWithOptions(session.Options{ -// SharedConfigState: session.SharedConfigEnable, -// })) -func NewSessionWithOptions(opts Options) (*Session, error) { - var envCfg envConfig - var err error - if opts.SharedConfigState == SharedConfigEnable { - envCfg, err = loadSharedEnvConfig() - if err != nil { - return nil, fmt.Errorf("failed to load shared config, %v", err) - } - } else { - envCfg, err = loadEnvConfig() - if err != nil { - return nil, fmt.Errorf("failed to load environment config, %v", err) - } - } - - if len(opts.Profile) != 0 { - envCfg.Profile = opts.Profile - } - - switch opts.SharedConfigState { - case SharedConfigDisable: - envCfg.EnableSharedConfig = false - case SharedConfigEnable: - envCfg.EnableSharedConfig = true - } - - // Only use AWS_CA_BUNDLE if session option is not provided. - if len(envCfg.CustomCABundle) != 0 && opts.CustomCABundle == nil { - f, err := os.Open(envCfg.CustomCABundle) - if err != nil { - return nil, awserr.New("LoadCustomCABundleError", - "failed to open custom CA bundle PEM file", err) - } - defer f.Close() - opts.CustomCABundle = f - } - - return newSession(opts, envCfg, &opts.Config) -} - -// Must is a helper function to ensure the Session is valid and there was no -// error when calling a NewSession function. -// -// This helper is intended to be used in variable initialization to load the -// Session and configuration at startup. Such as: -// -// var sess = session.Must(session.NewSession()) -func Must(sess *Session, err error) *Session { - if err != nil { - panic(err) - } - - return sess -} - -func deprecatedNewSession(cfgs ...*aws.Config) *Session { - cfg := defaults.Config() - handlers := defaults.Handlers() - - // Apply the passed in configs so the configuration can be applied to the - // default credential chain - cfg.MergeIn(cfgs...) - if cfg.EndpointResolver == nil { - // An endpoint resolver is required for a session to be able to provide - // endpoints for service client configurations. - cfg.EndpointResolver = endpoints.DefaultResolver() - } - cfg.Credentials = defaults.CredChain(cfg, handlers) - - // Reapply any passed in configs to override credentials if set - cfg.MergeIn(cfgs...) - - s := &Session{ - Config: cfg, - Handlers: handlers, - } - - initHandlers(s) - return s -} - -func enableCSM(handlers *request.Handlers, cfg csmConfig, logger aws.Logger) error { - if logger != nil { - logger.Log("Enabling CSM") - } - - r, err := csm.Start(cfg.ClientID, csm.AddressWithDefaults(cfg.Host, cfg.Port)) - if err != nil { - return err - } - r.InjectHandlers(handlers) - - return nil -} - -func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*Session, error) { - cfg := defaults.Config() - - handlers := opts.Handlers - if handlers.IsEmpty() { - handlers = defaults.Handlers() - } - - // Get a merged version of the user provided config to determine if - // credentials were. - userCfg := &aws.Config{} - userCfg.MergeIn(cfgs...) - cfg.MergeIn(userCfg) - - // Ordered config files will be loaded in with later files overwriting - // previous config file values. - var cfgFiles []string - if opts.SharedConfigFiles != nil { - cfgFiles = opts.SharedConfigFiles - } else { - cfgFiles = []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile} - if !envCfg.EnableSharedConfig { - // The shared config file (~/.aws/config) is only loaded if instructed - // to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG). - cfgFiles = cfgFiles[1:] - } - } - - // Load additional config from file(s) - sharedCfg, err := loadSharedConfig(envCfg.Profile, cfgFiles, envCfg.EnableSharedConfig) - if err != nil { - if len(envCfg.Profile) == 0 && !envCfg.EnableSharedConfig && (envCfg.Creds.HasKeys() || userCfg.Credentials != nil) { - // Special case where the user has not explicitly specified an AWS_PROFILE, - // or session.Options.profile, shared config is not enabled, and the - // environment has credentials, allow the shared config file to fail to - // load since the user has already provided credentials, and nothing else - // is required to be read file. Github(aws/aws-sdk-go#2455) - } else if _, ok := err.(SharedConfigProfileNotExistsError); !ok { - return nil, err - } - } - - if err := mergeConfigSrcs(cfg, userCfg, envCfg, sharedCfg, handlers, opts); err != nil { - return nil, err - } - - s := &Session{ - Config: cfg, - Handlers: handlers, - } - - initHandlers(s) - - if csmCfg, err := loadCSMConfig(envCfg, cfgFiles); err != nil { - if l := s.Config.Logger; l != nil { - l.Log(fmt.Sprintf("ERROR: failed to load CSM configuration, %v", err)) - } - } else if csmCfg.Enabled { - err = enableCSM(&s.Handlers, csmCfg, s.Config.Logger) - if err != nil { - return nil, err - } - } - - // Setup HTTP client with custom cert bundle if enabled - if opts.CustomCABundle != nil { - if err := loadCustomCABundle(s, opts.CustomCABundle); err != nil { - return nil, err - } - } - - return s, nil -} - -type csmConfig struct { - Enabled bool - Host string - Port string - ClientID string -} - -var csmProfileName = "aws_csm" - -func loadCSMConfig(envCfg envConfig, cfgFiles []string) (csmConfig, error) { - if envCfg.CSMEnabled != nil { - if *envCfg.CSMEnabled { - return csmConfig{ - Enabled: true, - ClientID: envCfg.CSMClientID, - Host: envCfg.CSMHost, - Port: envCfg.CSMPort, - }, nil - } - return csmConfig{}, nil - } - - sharedCfg, err := loadSharedConfig(csmProfileName, cfgFiles, false) - if err != nil { - if _, ok := err.(SharedConfigProfileNotExistsError); !ok { - return csmConfig{}, err - } - } - if sharedCfg.CSMEnabled != nil && *sharedCfg.CSMEnabled == true { - return csmConfig{ - Enabled: true, - ClientID: sharedCfg.CSMClientID, - Host: sharedCfg.CSMHost, - Port: sharedCfg.CSMPort, - }, nil - } - - return csmConfig{}, nil -} - -func loadCustomCABundle(s *Session, bundle io.Reader) error { - var t *http.Transport - switch v := s.Config.HTTPClient.Transport.(type) { - case *http.Transport: - t = v - default: - if s.Config.HTTPClient.Transport != nil { - return awserr.New("LoadCustomCABundleError", - "unable to load custom CA bundle, HTTPClient's transport unsupported type", nil) - } - } - if t == nil { - // Nil transport implies `http.DefaultTransport` should be used. Since - // the SDK cannot modify, nor copy the `DefaultTransport` specifying - // the values the next closest behavior. - t = getCABundleTransport() - } - - p, err := loadCertPool(bundle) - if err != nil { - return err - } - if t.TLSClientConfig == nil { - t.TLSClientConfig = &tls.Config{} - } - t.TLSClientConfig.RootCAs = p - - s.Config.HTTPClient.Transport = t - - return nil -} - -func loadCertPool(r io.Reader) (*x509.CertPool, error) { - b, err := ioutil.ReadAll(r) - if err != nil { - return nil, awserr.New("LoadCustomCABundleError", - "failed to read custom CA bundle PEM file", err) - } - - p := x509.NewCertPool() - if !p.AppendCertsFromPEM(b) { - return nil, awserr.New("LoadCustomCABundleError", - "failed to load custom CA bundle PEM file", err) - } - - return p, nil -} - -func mergeConfigSrcs(cfg, userCfg *aws.Config, - envCfg envConfig, sharedCfg sharedConfig, - handlers request.Handlers, - sessOpts Options, -) error { - - // Region if not already set by user - if len(aws.StringValue(cfg.Region)) == 0 { - if len(envCfg.Region) > 0 { - cfg.WithRegion(envCfg.Region) - } else if envCfg.EnableSharedConfig && len(sharedCfg.Region) > 0 { - cfg.WithRegion(sharedCfg.Region) - } - } - - if cfg.EnableEndpointDiscovery == nil { - if envCfg.EnableEndpointDiscovery != nil { - cfg.WithEndpointDiscovery(*envCfg.EnableEndpointDiscovery) - } else if envCfg.EnableSharedConfig && sharedCfg.EnableEndpointDiscovery != nil { - cfg.WithEndpointDiscovery(*sharedCfg.EnableEndpointDiscovery) - } - } - - // Regional Endpoint flag for STS endpoint resolving - mergeSTSRegionalEndpointConfig(cfg, []endpoints.STSRegionalEndpoint{ - userCfg.STSRegionalEndpoint, - envCfg.STSRegionalEndpoint, - sharedCfg.STSRegionalEndpoint, - endpoints.LegacySTSEndpoint, - }) - - // Regional Endpoint flag for S3 endpoint resolving - mergeS3UsEast1RegionalEndpointConfig(cfg, []endpoints.S3UsEast1RegionalEndpoint{ - userCfg.S3UsEast1RegionalEndpoint, - envCfg.S3UsEast1RegionalEndpoint, - sharedCfg.S3UsEast1RegionalEndpoint, - endpoints.LegacyS3UsEast1Endpoint, - }) - - // Configure credentials if not already set by the user when creating the - // Session. - if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil { - creds, err := resolveCredentials(cfg, envCfg, sharedCfg, handlers, sessOpts) - if err != nil { - return err - } - cfg.Credentials = creds - } - - return nil -} - -func mergeSTSRegionalEndpointConfig(cfg *aws.Config, values []endpoints.STSRegionalEndpoint) { - for _, v := range values { - if v != endpoints.UnsetSTSEndpoint { - cfg.STSRegionalEndpoint = v - break - } - } -} - -func mergeS3UsEast1RegionalEndpointConfig(cfg *aws.Config, values []endpoints.S3UsEast1RegionalEndpoint) { - for _, v := range values { - if v != endpoints.UnsetS3UsEast1Endpoint { - cfg.S3UsEast1RegionalEndpoint = v - break - } - } -} - -func initHandlers(s *Session) { - // Add the Validate parameter handler if it is not disabled. - s.Handlers.Validate.Remove(corehandlers.ValidateParametersHandler) - if !aws.BoolValue(s.Config.DisableParamValidation) { - s.Handlers.Validate.PushBackNamed(corehandlers.ValidateParametersHandler) - } -} - -// Copy creates and returns a copy of the current Session, copying the config -// and handlers. If any additional configs are provided they will be merged -// on top of the Session's copied config. -// -// // Create a copy of the current Session, configured for the us-west-2 region. -// sess.Copy(&aws.Config{Region: aws.String("us-west-2")}) -func (s *Session) Copy(cfgs ...*aws.Config) *Session { - newSession := &Session{ - Config: s.Config.Copy(cfgs...), - Handlers: s.Handlers.Copy(), - } - - initHandlers(newSession) - - return newSession -} - -// ClientConfig satisfies the client.ConfigProvider interface and is used to -// configure the service client instances. Passing the Session to the service -// client's constructor (New) will use this method to configure the client. -func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Config { - s = s.Copy(cfgs...) - - region := aws.StringValue(s.Config.Region) - resolved, err := s.resolveEndpoint(service, region, s.Config) - if err != nil && s.Config.Logger != nil { - s.Config.Logger.Log(fmt.Sprintf( - "ERROR: unable to resolve endpoint for service %q, region %q, err: %v", - service, region, err)) - } - - return client.Config{ - Config: s.Config, - Handlers: s.Handlers, - Endpoint: resolved.URL, - SigningRegion: resolved.SigningRegion, - SigningNameDerived: resolved.SigningNameDerived, - SigningName: resolved.SigningName, - } -} - -func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endpoints.ResolvedEndpoint, error) { - - if ep := aws.StringValue(cfg.Endpoint); len(ep) != 0 { - return endpoints.ResolvedEndpoint{ - URL: endpoints.AddScheme(ep, aws.BoolValue(cfg.DisableSSL)), - SigningRegion: region, - }, nil - } - - resolved, err := cfg.EndpointResolver.EndpointFor(service, region, - func(opt *endpoints.Options) { - opt.DisableSSL = aws.BoolValue(cfg.DisableSSL) - opt.UseDualStack = aws.BoolValue(cfg.UseDualStack) - // Support for STSRegionalEndpoint where the STSRegionalEndpoint is - // provided in envConfig or sharedConfig with envConfig getting - // precedence. - opt.STSRegionalEndpoint = cfg.STSRegionalEndpoint - - // Support for S3UsEast1RegionalEndpoint where the S3UsEast1RegionalEndpoint is - // provided in envConfig or sharedConfig with envConfig getting - // precedence. - opt.S3UsEast1RegionalEndpoint = cfg.S3UsEast1RegionalEndpoint - - // Support the condition where the service is modeled but its - // endpoint metadata is not available. - opt.ResolveUnknownService = true - }, - ) - if err != nil { - return endpoints.ResolvedEndpoint{}, err - } - - return resolved, nil -} - -// ClientConfigNoResolveEndpoint is the same as ClientConfig with the exception -// that the EndpointResolver will not be used to resolve the endpoint. The only -// endpoint set must come from the aws.Config.Endpoint field. -func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Config { - s = s.Copy(cfgs...) - - var resolved endpoints.ResolvedEndpoint - if ep := aws.StringValue(s.Config.Endpoint); len(ep) > 0 { - resolved.URL = endpoints.AddScheme(ep, aws.BoolValue(s.Config.DisableSSL)) - resolved.SigningRegion = aws.StringValue(s.Config.Region) - } - - return client.Config{ - Config: s.Config, - Handlers: s.Handlers, - Endpoint: resolved.URL, - SigningRegion: resolved.SigningRegion, - SigningNameDerived: resolved.SigningNameDerived, - SigningName: resolved.SigningName, - } -} - -// logDeprecatedNewSessionError function enables error handling for session -func (s *Session) logDeprecatedNewSessionError(msg string, err error, cfgs []*aws.Config) { - // Session creation failed, need to report the error and prevent - // any requests from succeeding. - s.Config.MergeIn(cfgs...) - s.Config.Logger.Log("ERROR:", msg, "Error:", err) - s.Handlers.Validate.PushBack(func(r *request.Request) { - r.Error = err - }) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,526 +0,0 @@ -package session - -import ( - "fmt" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/endpoints" - "github.com/aws/aws-sdk-go/internal/ini" -) - -const ( - // Static Credentials group - accessKeyIDKey = `aws_access_key_id` // group required - secretAccessKey = `aws_secret_access_key` // group required - sessionTokenKey = `aws_session_token` // optional - - // Assume Role Credentials group - roleArnKey = `role_arn` // group required - sourceProfileKey = `source_profile` // group required (or credential_source) - credentialSourceKey = `credential_source` // group required (or source_profile) - externalIDKey = `external_id` // optional - mfaSerialKey = `mfa_serial` // optional - roleSessionNameKey = `role_session_name` // optional - - // CSM options - csmEnabledKey = `csm_enabled` - csmHostKey = `csm_host` - csmPortKey = `csm_port` - csmClientIDKey = `csm_client_id` - - // Additional Config fields - regionKey = `region` - - // endpoint discovery group - enableEndpointDiscoveryKey = `endpoint_discovery_enabled` // optional - - // External Credential Process - credentialProcessKey = `credential_process` // optional - - // Web Identity Token File - webIdentityTokenFileKey = `web_identity_token_file` // optional - - // Additional config fields for regional or legacy endpoints - stsRegionalEndpointSharedKey = `sts_regional_endpoints` - - // Additional config fields for regional or legacy endpoints - s3UsEast1RegionalSharedKey = `s3_us_east_1_regional_endpoint` - - // DefaultSharedConfigProfile is the default profile to be used when - // loading configuration from the config files if another profile name - // is not provided. - DefaultSharedConfigProfile = `default` -) - -// sharedConfig represents the configuration fields of the SDK config files. -type sharedConfig struct { - // Credentials values from the config file. Both aws_access_key_id and - // aws_secret_access_key must be provided together in the same file to be - // considered valid. The values will be ignored if not a complete group. - // aws_session_token is an optional field that can be provided if both of - // the other two fields are also provided. - // - // aws_access_key_id - // aws_secret_access_key - // aws_session_token - Creds credentials.Value - - CredentialSource string - CredentialProcess string - WebIdentityTokenFile string - - RoleARN string - RoleSessionName string - ExternalID string - MFASerial string - - SourceProfileName string - SourceProfile *sharedConfig - - // Region is the region the SDK should use for looking up AWS service - // endpoints and signing requests. - // - // region - Region string - - // EnableEndpointDiscovery can be enabled in the shared config by setting - // endpoint_discovery_enabled to true - // - // endpoint_discovery_enabled = true - EnableEndpointDiscovery *bool - // CSM Options - CSMEnabled *bool - CSMHost string - CSMPort string - CSMClientID string - - // Specifies the Regional Endpoint flag for the SDK to resolve the endpoint for a service - // - // sts_regional_endpoints = regional - // This can take value as `LegacySTSEndpoint` or `RegionalSTSEndpoint` - STSRegionalEndpoint endpoints.STSRegionalEndpoint - - // Specifies the Regional Endpoint flag for the SDK to resolve the endpoint for a service - // - // s3_us_east_1_regional_endpoint = regional - // This can take value as `LegacyS3UsEast1Endpoint` or `RegionalS3UsEast1Endpoint` - S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint -} - -type sharedConfigFile struct { - Filename string - IniData ini.Sections -} - -// loadSharedConfig retrieves the configuration from the list of files using -// the profile provided. The order the files are listed will determine -// precedence. Values in subsequent files will overwrite values defined in -// earlier files. -// -// For example, given two files A and B. Both define credentials. If the order -// of the files are A then B, B's credential values will be used instead of -// A's. -// -// See sharedConfig.setFromFile for information how the config files -// will be loaded. -func loadSharedConfig(profile string, filenames []string, exOpts bool) (sharedConfig, error) { - if len(profile) == 0 { - profile = DefaultSharedConfigProfile - } - - files, err := loadSharedConfigIniFiles(filenames) - if err != nil { - return sharedConfig{}, err - } - - cfg := sharedConfig{} - profiles := map[string]struct{}{} - if err = cfg.setFromIniFiles(profiles, profile, files, exOpts); err != nil { - return sharedConfig{}, err - } - - return cfg, nil -} - -func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) { - files := make([]sharedConfigFile, 0, len(filenames)) - - for _, filename := range filenames { - sections, err := ini.OpenFile(filename) - if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ini.ErrCodeUnableToReadFile { - // Skip files which can't be opened and read for whatever reason - continue - } else if err != nil { - return nil, SharedConfigLoadError{Filename: filename, Err: err} - } - - files = append(files, sharedConfigFile{ - Filename: filename, IniData: sections, - }) - } - - return files, nil -} - -func (cfg *sharedConfig) setFromIniFiles(profiles map[string]struct{}, profile string, files []sharedConfigFile, exOpts bool) error { - // Trim files from the list that don't exist. - var skippedFiles int - var profileNotFoundErr error - for _, f := range files { - if err := cfg.setFromIniFile(profile, f, exOpts); err != nil { - if _, ok := err.(SharedConfigProfileNotExistsError); ok { - // Ignore profiles not defined in individual files. - profileNotFoundErr = err - skippedFiles++ - continue - } - return err - } - } - if skippedFiles == len(files) { - // If all files were skipped because the profile is not found, return - // the original profile not found error. - return profileNotFoundErr - } - - if _, ok := profiles[profile]; ok { - // if this is the second instance of the profile the Assume Role - // options must be cleared because they are only valid for the - // first reference of a profile. The self linked instance of the - // profile only have credential provider options. - cfg.clearAssumeRoleOptions() - } else { - // First time a profile has been seen, It must either be a assume role - // or credentials. Assert if the credential type requires a role ARN, - // the ARN is also set. - if err := cfg.validateCredentialsRequireARN(profile); err != nil { - return err - } - } - profiles[profile] = struct{}{} - - if err := cfg.validateCredentialType(); err != nil { - return err - } - - // Link source profiles for assume roles - if len(cfg.SourceProfileName) != 0 { - // Linked profile via source_profile ignore credential provider - // options, the source profile must provide the credentials. - cfg.clearCredentialOptions() - - srcCfg := &sharedConfig{} - err := srcCfg.setFromIniFiles(profiles, cfg.SourceProfileName, files, exOpts) - if err != nil { - // SourceProfile that doesn't exist is an error in configuration. - if _, ok := err.(SharedConfigProfileNotExistsError); ok { - err = SharedConfigAssumeRoleError{ - RoleARN: cfg.RoleARN, - SourceProfile: cfg.SourceProfileName, - } - } - return err - } - - if !srcCfg.hasCredentials() { - return SharedConfigAssumeRoleError{ - RoleARN: cfg.RoleARN, - SourceProfile: cfg.SourceProfileName, - } - } - - cfg.SourceProfile = srcCfg - } - - return nil -} - -// setFromFile loads the configuration from the file using the profile -// provided. A sharedConfig pointer type value is used so that multiple config -// file loadings can be chained. -// -// Only loads complete logically grouped values, and will not set fields in cfg -// for incomplete grouped values in the config. Such as credentials. For -// example if a config file only includes aws_access_key_id but no -// aws_secret_access_key the aws_access_key_id will be ignored. -func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile, exOpts bool) error { - section, ok := file.IniData.GetSection(profile) - if !ok { - // Fallback to to alternate profile name: profile - section, ok = file.IniData.GetSection(fmt.Sprintf("profile %s", profile)) - if !ok { - return SharedConfigProfileNotExistsError{Profile: profile, Err: nil} - } - } - - if exOpts { - // Assume Role Parameters - updateString(&cfg.RoleARN, section, roleArnKey) - updateString(&cfg.ExternalID, section, externalIDKey) - updateString(&cfg.MFASerial, section, mfaSerialKey) - updateString(&cfg.RoleSessionName, section, roleSessionNameKey) - updateString(&cfg.SourceProfileName, section, sourceProfileKey) - updateString(&cfg.CredentialSource, section, credentialSourceKey) - updateString(&cfg.Region, section, regionKey) - - if v := section.String(stsRegionalEndpointSharedKey); len(v) != 0 { - sre, err := endpoints.GetSTSRegionalEndpoint(v) - if err != nil { - return fmt.Errorf("failed to load %s from shared config, %s, %v", - stsRegionalEndpointSharedKey, file.Filename, err) - } - cfg.STSRegionalEndpoint = sre - } - - if v := section.String(s3UsEast1RegionalSharedKey); len(v) != 0 { - sre, err := endpoints.GetS3UsEast1RegionalEndpoint(v) - if err != nil { - return fmt.Errorf("failed to load %s from shared config, %s, %v", - s3UsEast1RegionalSharedKey, file.Filename, err) - } - cfg.S3UsEast1RegionalEndpoint = sre - } - } - - updateString(&cfg.CredentialProcess, section, credentialProcessKey) - updateString(&cfg.WebIdentityTokenFile, section, webIdentityTokenFileKey) - - // Shared Credentials - creds := credentials.Value{ - AccessKeyID: section.String(accessKeyIDKey), - SecretAccessKey: section.String(secretAccessKey), - SessionToken: section.String(sessionTokenKey), - ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename), - } - if creds.HasKeys() { - cfg.Creds = creds - } - - // Endpoint discovery - updateBoolPtr(&cfg.EnableEndpointDiscovery, section, enableEndpointDiscoveryKey) - - // CSM options - updateBoolPtr(&cfg.CSMEnabled, section, csmEnabledKey) - updateString(&cfg.CSMHost, section, csmHostKey) - updateString(&cfg.CSMPort, section, csmPortKey) - updateString(&cfg.CSMClientID, section, csmClientIDKey) - - return nil -} - -func (cfg *sharedConfig) validateCredentialsRequireARN(profile string) error { - var credSource string - - switch { - case len(cfg.SourceProfileName) != 0: - credSource = sourceProfileKey - case len(cfg.CredentialSource) != 0: - credSource = credentialSourceKey - case len(cfg.WebIdentityTokenFile) != 0: - credSource = webIdentityTokenFileKey - } - - if len(credSource) != 0 && len(cfg.RoleARN) == 0 { - return CredentialRequiresARNError{ - Type: credSource, - Profile: profile, - } - } - - return nil -} - -func (cfg *sharedConfig) validateCredentialType() error { - // Only one or no credential type can be defined. - if !oneOrNone( - len(cfg.SourceProfileName) != 0, - len(cfg.CredentialSource) != 0, - len(cfg.CredentialProcess) != 0, - len(cfg.WebIdentityTokenFile) != 0, - ) { - return ErrSharedConfigSourceCollision - } - - return nil -} - -func (cfg *sharedConfig) hasCredentials() bool { - switch { - case len(cfg.SourceProfileName) != 0: - case len(cfg.CredentialSource) != 0: - case len(cfg.CredentialProcess) != 0: - case len(cfg.WebIdentityTokenFile) != 0: - case cfg.Creds.HasKeys(): - default: - return false - } - - return true -} - -func (cfg *sharedConfig) clearCredentialOptions() { - cfg.CredentialSource = "" - cfg.CredentialProcess = "" - cfg.WebIdentityTokenFile = "" - cfg.Creds = credentials.Value{} -} - -func (cfg *sharedConfig) clearAssumeRoleOptions() { - cfg.RoleARN = "" - cfg.ExternalID = "" - cfg.MFASerial = "" - cfg.RoleSessionName = "" - cfg.SourceProfileName = "" -} - -func oneOrNone(bs ...bool) bool { - var count int - - for _, b := range bs { - if b { - count++ - if count > 1 { - return false - } - } - } - - return true -} - -// updateString will only update the dst with the value in the section key, key -// is present in the section. -func updateString(dst *string, section ini.Section, key string) { - if !section.Has(key) { - return - } - *dst = section.String(key) -} - -// updateBoolPtr will only update the dst with the value in the section key, -// key is present in the section. -func updateBoolPtr(dst **bool, section ini.Section, key string) { - if !section.Has(key) { - return - } - *dst = new(bool) - **dst = section.Bool(key) -} - -// SharedConfigLoadError is an error for the shared config file failed to load. -type SharedConfigLoadError struct { - Filename string - Err error -} - -// Code is the short id of the error. -func (e SharedConfigLoadError) Code() string { - return "SharedConfigLoadError" -} - -// Message is the description of the error -func (e SharedConfigLoadError) Message() string { - return fmt.Sprintf("failed to load config file, %s", e.Filename) -} - -// OrigErr is the underlying error that caused the failure. -func (e SharedConfigLoadError) OrigErr() error { - return e.Err -} - -// Error satisfies the error interface. -func (e SharedConfigLoadError) Error() string { - return awserr.SprintError(e.Code(), e.Message(), "", e.Err) -} - -// SharedConfigProfileNotExistsError is an error for the shared config when -// the profile was not find in the config file. -type SharedConfigProfileNotExistsError struct { - Profile string - Err error -} - -// Code is the short id of the error. -func (e SharedConfigProfileNotExistsError) Code() string { - return "SharedConfigProfileNotExistsError" -} - -// Message is the description of the error -func (e SharedConfigProfileNotExistsError) Message() string { - return fmt.Sprintf("failed to get profile, %s", e.Profile) -} - -// OrigErr is the underlying error that caused the failure. -func (e SharedConfigProfileNotExistsError) OrigErr() error { - return e.Err -} - -// Error satisfies the error interface. -func (e SharedConfigProfileNotExistsError) Error() string { - return awserr.SprintError(e.Code(), e.Message(), "", e.Err) -} - -// SharedConfigAssumeRoleError is an error for the shared config when the -// profile contains assume role information, but that information is invalid -// or not complete. -type SharedConfigAssumeRoleError struct { - RoleARN string - SourceProfile string -} - -// Code is the short id of the error. -func (e SharedConfigAssumeRoleError) Code() string { - return "SharedConfigAssumeRoleError" -} - -// Message is the description of the error -func (e SharedConfigAssumeRoleError) Message() string { - return fmt.Sprintf( - "failed to load assume role for %s, source profile %s has no shared credentials", - e.RoleARN, e.SourceProfile, - ) -} - -// OrigErr is the underlying error that caused the failure. -func (e SharedConfigAssumeRoleError) OrigErr() error { - return nil -} - -// Error satisfies the error interface. -func (e SharedConfigAssumeRoleError) Error() string { - return awserr.SprintError(e.Code(), e.Message(), "", nil) -} - -// CredentialRequiresARNError provides the error for shared config credentials -// that are incorrectly configured in the shared config or credentials file. -type CredentialRequiresARNError struct { - // type of credentials that were configured. - Type string - - // Profile name the credentials were in. - Profile string -} - -// Code is the short id of the error. -func (e CredentialRequiresARNError) Code() string { - return "CredentialRequiresARNError" -} - -// Message is the description of the error -func (e CredentialRequiresARNError) Message() string { - return fmt.Sprintf( - "credential type %s requires role_arn, profile %s", - e.Type, e.Profile, - ) -} - -// OrigErr is the underlying error that caused the failure. -func (e CredentialRequiresARNError) OrigErr() error { - return nil -} - -// Error satisfies the error interface. -func (e CredentialRequiresARNError) Error() string { - return awserr.SprintError(e.Code(), e.Message(), "", nil) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -package v4 - -import ( - "net/http" - "strings" -) - -// validator houses a set of rule needed for validation of a -// string value -type rules []rule - -// rule interface allows for more flexible rules and just simply -// checks whether or not a value adheres to that rule -type rule interface { - IsValid(value string) bool -} - -// IsValid will iterate through all rules and see if any rules -// apply to the value and supports nested rules -func (r rules) IsValid(value string) bool { - for _, rule := range r { - if rule.IsValid(value) { - return true - } - } - return false -} - -// mapRule generic rule for maps -type mapRule map[string]struct{} - -// IsValid for the map rule satisfies whether it exists in the map -func (m mapRule) IsValid(value string) bool { - _, ok := m[value] - return ok -} - -// whitelist is a generic rule for whitelisting -type whitelist struct { - rule -} - -// IsValid for whitelist checks if the value is within the whitelist -func (w whitelist) IsValid(value string) bool { - return w.rule.IsValid(value) -} - -// blacklist is a generic rule for blacklisting -type blacklist struct { - rule -} - -// IsValid for whitelist checks if the value is within the whitelist -func (b blacklist) IsValid(value string) bool { - return !b.rule.IsValid(value) -} - -type patterns []string - -// IsValid for patterns checks each pattern and returns if a match has -// been found -func (p patterns) IsValid(value string) bool { - for _, pattern := range p { - if strings.HasPrefix(http.CanonicalHeaderKey(value), pattern) { - return true - } - } - return false -} - -// inclusiveRules rules allow for rules to depend on one another -type inclusiveRules []rule - -// IsValid will return true if all rules are true -func (r inclusiveRules) IsValid(value string) bool { - for _, rule := range r { - if !rule.IsValid(value) { - return false - } - } - return true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -package v4 - -// WithUnsignedPayload will enable and set the UnsignedPayload field to -// true of the signer. -func WithUnsignedPayload(v4 *Signer) { - v4.UnsignedPayload = true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -// +build go1.5 - -package v4 - -import ( - "net/url" - "strings" -) - -func getURIPath(u *url.URL) string { - var uri string - - if len(u.Opaque) > 0 { - uri = "/" + strings.Join(strings.Split(u.Opaque, "/")[3:], "/") - } else { - uri = u.EscapedPath() - } - - if len(uri) == 0 { - uri = "/" - } - - return uri -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,806 +0,0 @@ -// Package v4 implements signing for AWS V4 signer -// -// Provides request signing for request that need to be signed with -// AWS V4 Signatures. -// -// Standalone Signer -// -// Generally using the signer outside of the SDK should not require any additional -// logic when using Go v1.5 or higher. The signer does this by taking advantage -// of the URL.EscapedPath method. If your request URI requires additional escaping -// you many need to use the URL.Opaque to define what the raw URI should be sent -// to the service as. -// -// The signer will first check the URL.Opaque field, and use its value if set. -// The signer does require the URL.Opaque field to be set in the form of: -// -// "///" -// -// // e.g. -// "//example.com/some/path" -// -// The leading "//" and hostname are required or the URL.Opaque escaping will -// not work correctly. -// -// If URL.Opaque is not set the signer will fallback to the URL.EscapedPath() -// method and using the returned value. If you're using Go v1.4 you must set -// URL.Opaque if the URI path needs escaping. If URL.Opaque is not set with -// Go v1.5 the signer will fallback to URL.Path. -// -// AWS v4 signature validation requires that the canonical string's URI path -// element must be the URI escaped form of the HTTP request's path. -// http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html -// -// The Go HTTP client will perform escaping automatically on the request. Some -// of these escaping may cause signature validation errors because the HTTP -// request differs from the URI path or query that the signature was generated. -// https://golang.org/pkg/net/url/#URL.EscapedPath -// -// Because of this, it is recommended that when using the signer outside of the -// SDK that explicitly escaping the request prior to being signed is preferable, -// and will help prevent signature validation errors. This can be done by setting -// the URL.Opaque or URL.RawPath. The SDK will use URL.Opaque first and then -// call URL.EscapedPath() if Opaque is not set. -// -// If signing a request intended for HTTP2 server, and you're using Go 1.6.2 -// through 1.7.4 you should use the URL.RawPath as the pre-escaped form of the -// request URL. https://github.com/golang/go/issues/16847 points to a bug in -// Go pre 1.8 that fails to make HTTP2 requests using absolute URL in the HTTP -// message. URL.Opaque generally will force Go to make requests with absolute URL. -// URL.RawPath does not do this, but RawPath must be a valid escaping of Path -// or url.EscapedPath will ignore the RawPath escaping. -// -// Test `TestStandaloneSign` provides a complete example of using the signer -// outside of the SDK and pre-escaping the URI path. -package v4 - -import ( - "crypto/hmac" - "crypto/sha256" - "encoding/hex" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "sort" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/internal/sdkio" - "github.com/aws/aws-sdk-go/private/protocol/rest" -) - -const ( - authHeaderPrefix = "AWS4-HMAC-SHA256" - timeFormat = "20060102T150405Z" - shortTimeFormat = "20060102" - - // emptyStringSHA256 is a SHA256 of an empty string - emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` -) - -var ignoredHeaders = rules{ - blacklist{ - mapRule{ - "Authorization": struct{}{}, - "User-Agent": struct{}{}, - "X-Amzn-Trace-Id": struct{}{}, - }, - }, -} - -// requiredSignedHeaders is a whitelist for build canonical headers. -var requiredSignedHeaders = rules{ - whitelist{ - mapRule{ - "Cache-Control": struct{}{}, - "Content-Disposition": struct{}{}, - "Content-Encoding": struct{}{}, - "Content-Language": struct{}{}, - "Content-Md5": struct{}{}, - "Content-Type": struct{}{}, - "Expires": struct{}{}, - "If-Match": struct{}{}, - "If-Modified-Since": struct{}{}, - "If-None-Match": struct{}{}, - "If-Unmodified-Since": struct{}{}, - "Range": struct{}{}, - "X-Amz-Acl": struct{}{}, - "X-Amz-Copy-Source": struct{}{}, - "X-Amz-Copy-Source-If-Match": struct{}{}, - "X-Amz-Copy-Source-If-Modified-Since": struct{}{}, - "X-Amz-Copy-Source-If-None-Match": struct{}{}, - "X-Amz-Copy-Source-If-Unmodified-Since": struct{}{}, - "X-Amz-Copy-Source-Range": struct{}{}, - "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{}, - "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{}, - "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{}, - "X-Amz-Grant-Full-control": struct{}{}, - "X-Amz-Grant-Read": struct{}{}, - "X-Amz-Grant-Read-Acp": struct{}{}, - "X-Amz-Grant-Write": struct{}{}, - "X-Amz-Grant-Write-Acp": struct{}{}, - "X-Amz-Metadata-Directive": struct{}{}, - "X-Amz-Mfa": struct{}{}, - "X-Amz-Request-Payer": struct{}{}, - "X-Amz-Server-Side-Encryption": struct{}{}, - "X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id": struct{}{}, - "X-Amz-Server-Side-Encryption-Customer-Algorithm": struct{}{}, - "X-Amz-Server-Side-Encryption-Customer-Key": struct{}{}, - "X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{}, - "X-Amz-Storage-Class": struct{}{}, - "X-Amz-Tagging": struct{}{}, - "X-Amz-Website-Redirect-Location": struct{}{}, - "X-Amz-Content-Sha256": struct{}{}, - }, - }, - patterns{"X-Amz-Meta-"}, -} - -// allowedHoisting is a whitelist for build query headers. The boolean value -// represents whether or not it is a pattern. -var allowedQueryHoisting = inclusiveRules{ - blacklist{requiredSignedHeaders}, - patterns{"X-Amz-"}, -} - -// Signer applies AWS v4 signing to given request. Use this to sign requests -// that need to be signed with AWS V4 Signatures. -type Signer struct { - // The authentication credentials the request will be signed against. - // This value must be set to sign requests. - Credentials *credentials.Credentials - - // Sets the log level the signer should use when reporting information to - // the logger. If the logger is nil nothing will be logged. See - // aws.LogLevelType for more information on available logging levels - // - // By default nothing will be logged. - Debug aws.LogLevelType - - // The logger loging information will be written to. If there the logger - // is nil, nothing will be logged. - Logger aws.Logger - - // Disables the Signer's moving HTTP header key/value pairs from the HTTP - // request header to the request's query string. This is most commonly used - // with pre-signed requests preventing headers from being added to the - // request's query string. - DisableHeaderHoisting bool - - // Disables the automatic escaping of the URI path of the request for the - // siganture's canonical string's path. For services that do not need additional - // escaping then use this to disable the signer escaping the path. - // - // S3 is an example of a service that does not need additional escaping. - // - // http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html - DisableURIPathEscaping bool - - // Disables the automatical setting of the HTTP request's Body field with the - // io.ReadSeeker passed in to the signer. This is useful if you're using a - // custom wrapper around the body for the io.ReadSeeker and want to preserve - // the Body value on the Request.Body. - // - // This does run the risk of signing a request with a body that will not be - // sent in the request. Need to ensure that the underlying data of the Body - // values are the same. - DisableRequestBodyOverwrite bool - - // currentTimeFn returns the time value which represents the current time. - // This value should only be used for testing. If it is nil the default - // time.Now will be used. - currentTimeFn func() time.Time - - // UnsignedPayload will prevent signing of the payload. This will only - // work for services that have support for this. - UnsignedPayload bool -} - -// NewSigner returns a Signer pointer configured with the credentials and optional -// option values provided. If not options are provided the Signer will use its -// default configuration. -func NewSigner(credentials *credentials.Credentials, options ...func(*Signer)) *Signer { - v4 := &Signer{ - Credentials: credentials, - } - - for _, option := range options { - option(v4) - } - - return v4 -} - -type signingCtx struct { - ServiceName string - Region string - Request *http.Request - Body io.ReadSeeker - Query url.Values - Time time.Time - ExpireTime time.Duration - SignedHeaderVals http.Header - - DisableURIPathEscaping bool - - credValues credentials.Value - isPresign bool - formattedTime string - formattedShortTime string - unsignedPayload bool - - bodyDigest string - signedHeaders string - canonicalHeaders string - canonicalString string - credentialString string - stringToSign string - signature string - authorization string -} - -// Sign signs AWS v4 requests with the provided body, service name, region the -// request is made to, and time the request is signed at. The signTime allows -// you to specify that a request is signed for the future, and cannot be -// used until then. -// -// Returns a list of HTTP headers that were included in the signature or an -// error if signing the request failed. Generally for signed requests this value -// is not needed as the full request context will be captured by the http.Request -// value. It is included for reference though. -// -// Sign will set the request's Body to be the `body` parameter passed in. If -// the body is not already an io.ReadCloser, it will be wrapped within one. If -// a `nil` body parameter passed to Sign, the request's Body field will be -// also set to nil. Its important to note that this functionality will not -// change the request's ContentLength of the request. -// -// Sign differs from Presign in that it will sign the request using HTTP -// header values. This type of signing is intended for http.Request values that -// will not be shared, or are shared in a way the header values on the request -// will not be lost. -// -// The requests body is an io.ReadSeeker so the SHA256 of the body can be -// generated. To bypass the signer computing the hash you can set the -// "X-Amz-Content-Sha256" header with a precomputed value. The signer will -// only compute the hash if the request header value is empty. -func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, region string, signTime time.Time) (http.Header, error) { - return v4.signWithBody(r, body, service, region, 0, false, signTime) -} - -// Presign signs AWS v4 requests with the provided body, service name, region -// the request is made to, and time the request is signed at. The signTime -// allows you to specify that a request is signed for the future, and cannot -// be used until then. -// -// Returns a list of HTTP headers that were included in the signature or an -// error if signing the request failed. For presigned requests these headers -// and their values must be included on the HTTP request when it is made. This -// is helpful to know what header values need to be shared with the party the -// presigned request will be distributed to. -// -// Presign differs from Sign in that it will sign the request using query string -// instead of header values. This allows you to share the Presigned Request's -// URL with third parties, or distribute it throughout your system with minimal -// dependencies. -// -// Presign also takes an exp value which is the duration the -// signed request will be valid after the signing time. This is allows you to -// set when the request will expire. -// -// The requests body is an io.ReadSeeker so the SHA256 of the body can be -// generated. To bypass the signer computing the hash you can set the -// "X-Amz-Content-Sha256" header with a precomputed value. The signer will -// only compute the hash if the request header value is empty. -// -// Presigning a S3 request will not compute the body's SHA256 hash by default. -// This is done due to the general use case for S3 presigned URLs is to share -// PUT/GET capabilities. If you would like to include the body's SHA256 in the -// presigned request's signature you can set the "X-Amz-Content-Sha256" -// HTTP header and that will be included in the request's signature. -func (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, signTime time.Time) (http.Header, error) { - return v4.signWithBody(r, body, service, region, exp, true, signTime) -} - -func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, isPresign bool, signTime time.Time) (http.Header, error) { - currentTimeFn := v4.currentTimeFn - if currentTimeFn == nil { - currentTimeFn = time.Now - } - - ctx := &signingCtx{ - Request: r, - Body: body, - Query: r.URL.Query(), - Time: signTime, - ExpireTime: exp, - isPresign: isPresign, - ServiceName: service, - Region: region, - DisableURIPathEscaping: v4.DisableURIPathEscaping, - unsignedPayload: v4.UnsignedPayload, - } - - for key := range ctx.Query { - sort.Strings(ctx.Query[key]) - } - - if ctx.isRequestSigned() { - ctx.Time = currentTimeFn() - ctx.handlePresignRemoval() - } - - var err error - ctx.credValues, err = v4.Credentials.Get() - if err != nil { - return http.Header{}, err - } - - ctx.sanitizeHostForHeader() - ctx.assignAmzQueryValues() - if err := ctx.build(v4.DisableHeaderHoisting); err != nil { - return nil, err - } - - // If the request is not presigned the body should be attached to it. This - // prevents the confusion of wanting to send a signed request without - // the body the request was signed for attached. - if !(v4.DisableRequestBodyOverwrite || ctx.isPresign) { - var reader io.ReadCloser - if body != nil { - var ok bool - if reader, ok = body.(io.ReadCloser); !ok { - reader = ioutil.NopCloser(body) - } - } - r.Body = reader - } - - if v4.Debug.Matches(aws.LogDebugWithSigning) { - v4.logSigningInfo(ctx) - } - - return ctx.SignedHeaderVals, nil -} - -func (ctx *signingCtx) sanitizeHostForHeader() { - request.SanitizeHostForHeader(ctx.Request) -} - -func (ctx *signingCtx) handlePresignRemoval() { - if !ctx.isPresign { - return - } - - // The credentials have expired for this request. The current signing - // is invalid, and needs to be request because the request will fail. - ctx.removePresign() - - // Update the request's query string to ensure the values stays in - // sync in the case retrieving the new credentials fails. - ctx.Request.URL.RawQuery = ctx.Query.Encode() -} - -func (ctx *signingCtx) assignAmzQueryValues() { - if ctx.isPresign { - ctx.Query.Set("X-Amz-Algorithm", authHeaderPrefix) - if ctx.credValues.SessionToken != "" { - ctx.Query.Set("X-Amz-Security-Token", ctx.credValues.SessionToken) - } else { - ctx.Query.Del("X-Amz-Security-Token") - } - - return - } - - if ctx.credValues.SessionToken != "" { - ctx.Request.Header.Set("X-Amz-Security-Token", ctx.credValues.SessionToken) - } -} - -// SignRequestHandler is a named request handler the SDK will use to sign -// service client request with using the V4 signature. -var SignRequestHandler = request.NamedHandler{ - Name: "v4.SignRequestHandler", Fn: SignSDKRequest, -} - -// SignSDKRequest signs an AWS request with the V4 signature. This -// request handler should only be used with the SDK's built in service client's -// API operation requests. -// -// This function should not be used on its on its own, but in conjunction with -// an AWS service client's API operation call. To sign a standalone request -// not created by a service client's API operation method use the "Sign" or -// "Presign" functions of the "Signer" type. -// -// If the credentials of the request's config are set to -// credentials.AnonymousCredentials the request will not be signed. -func SignSDKRequest(req *request.Request) { - SignSDKRequestWithCurrentTime(req, time.Now) -} - -// BuildNamedHandler will build a generic handler for signing. -func BuildNamedHandler(name string, opts ...func(*Signer)) request.NamedHandler { - return request.NamedHandler{ - Name: name, - Fn: func(req *request.Request) { - SignSDKRequestWithCurrentTime(req, time.Now, opts...) - }, - } -} - -// SignSDKRequestWithCurrentTime will sign the SDK's request using the time -// function passed in. Behaves the same as SignSDKRequest with the exception -// the request is signed with the value returned by the current time function. -func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) { - // If the request does not need to be signed ignore the signing of the - // request if the AnonymousCredentials object is used. - if req.Config.Credentials == credentials.AnonymousCredentials { - return - } - - region := req.ClientInfo.SigningRegion - if region == "" { - region = aws.StringValue(req.Config.Region) - } - - name := req.ClientInfo.SigningName - if name == "" { - name = req.ClientInfo.ServiceName - } - - v4 := NewSigner(req.Config.Credentials, func(v4 *Signer) { - v4.Debug = req.Config.LogLevel.Value() - v4.Logger = req.Config.Logger - v4.DisableHeaderHoisting = req.NotHoist - v4.currentTimeFn = curTimeFn - if name == "s3" { - // S3 service should not have any escaping applied - v4.DisableURIPathEscaping = true - } - // Prevents setting the HTTPRequest's Body. Since the Body could be - // wrapped in a custom io.Closer that we do not want to be stompped - // on top of by the signer. - v4.DisableRequestBodyOverwrite = true - }) - - for _, opt := range opts { - opt(v4) - } - - curTime := curTimeFn() - signedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(), - name, region, req.ExpireTime, req.ExpireTime > 0, curTime, - ) - if err != nil { - req.Error = err - req.SignedHeaderVals = nil - return - } - - req.SignedHeaderVals = signedHeaders - req.LastSignedAt = curTime -} - -const logSignInfoMsg = `DEBUG: Request Signature: ----[ CANONICAL STRING ]----------------------------- -%s ----[ STRING TO SIGN ]-------------------------------- -%s%s ------------------------------------------------------` -const logSignedURLMsg = ` ----[ SIGNED URL ]------------------------------------ -%s` - -func (v4 *Signer) logSigningInfo(ctx *signingCtx) { - signedURLMsg := "" - if ctx.isPresign { - signedURLMsg = fmt.Sprintf(logSignedURLMsg, ctx.Request.URL.String()) - } - msg := fmt.Sprintf(logSignInfoMsg, ctx.canonicalString, ctx.stringToSign, signedURLMsg) - v4.Logger.Log(msg) -} - -func (ctx *signingCtx) build(disableHeaderHoisting bool) error { - ctx.buildTime() // no depends - ctx.buildCredentialString() // no depends - - if err := ctx.buildBodyDigest(); err != nil { - return err - } - - unsignedHeaders := ctx.Request.Header - if ctx.isPresign { - if !disableHeaderHoisting { - urlValues := url.Values{} - urlValues, unsignedHeaders = buildQuery(allowedQueryHoisting, unsignedHeaders) // no depends - for k := range urlValues { - ctx.Query[k] = urlValues[k] - } - } - } - - ctx.buildCanonicalHeaders(ignoredHeaders, unsignedHeaders) - ctx.buildCanonicalString() // depends on canon headers / signed headers - ctx.buildStringToSign() // depends on canon string - ctx.buildSignature() // depends on string to sign - - if ctx.isPresign { - ctx.Request.URL.RawQuery += "&X-Amz-Signature=" + ctx.signature - } else { - parts := []string{ - authHeaderPrefix + " Credential=" + ctx.credValues.AccessKeyID + "/" + ctx.credentialString, - "SignedHeaders=" + ctx.signedHeaders, - "Signature=" + ctx.signature, - } - ctx.Request.Header.Set("Authorization", strings.Join(parts, ", ")) - } - - return nil -} - -func (ctx *signingCtx) buildTime() { - ctx.formattedTime = ctx.Time.UTC().Format(timeFormat) - ctx.formattedShortTime = ctx.Time.UTC().Format(shortTimeFormat) - - if ctx.isPresign { - duration := int64(ctx.ExpireTime / time.Second) - ctx.Query.Set("X-Amz-Date", ctx.formattedTime) - ctx.Query.Set("X-Amz-Expires", strconv.FormatInt(duration, 10)) - } else { - ctx.Request.Header.Set("X-Amz-Date", ctx.formattedTime) - } -} - -func (ctx *signingCtx) buildCredentialString() { - ctx.credentialString = strings.Join([]string{ - ctx.formattedShortTime, - ctx.Region, - ctx.ServiceName, - "aws4_request", - }, "/") - - if ctx.isPresign { - ctx.Query.Set("X-Amz-Credential", ctx.credValues.AccessKeyID+"/"+ctx.credentialString) - } -} - -func buildQuery(r rule, header http.Header) (url.Values, http.Header) { - query := url.Values{} - unsignedHeaders := http.Header{} - for k, h := range header { - if r.IsValid(k) { - query[k] = h - } else { - unsignedHeaders[k] = h - } - } - - return query, unsignedHeaders -} -func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Header) { - var headers []string - headers = append(headers, "host") - for k, v := range header { - canonicalKey := http.CanonicalHeaderKey(k) - if !r.IsValid(canonicalKey) { - continue // ignored header - } - if ctx.SignedHeaderVals == nil { - ctx.SignedHeaderVals = make(http.Header) - } - - lowerCaseKey := strings.ToLower(k) - if _, ok := ctx.SignedHeaderVals[lowerCaseKey]; ok { - // include additional values - ctx.SignedHeaderVals[lowerCaseKey] = append(ctx.SignedHeaderVals[lowerCaseKey], v...) - continue - } - - headers = append(headers, lowerCaseKey) - ctx.SignedHeaderVals[lowerCaseKey] = v - } - sort.Strings(headers) - - ctx.signedHeaders = strings.Join(headers, ";") - - if ctx.isPresign { - ctx.Query.Set("X-Amz-SignedHeaders", ctx.signedHeaders) - } - - headerValues := make([]string, len(headers)) - for i, k := range headers { - if k == "host" { - if ctx.Request.Host != "" { - headerValues[i] = "host:" + ctx.Request.Host - } else { - headerValues[i] = "host:" + ctx.Request.URL.Host - } - } else { - headerValues[i] = k + ":" + - strings.Join(ctx.SignedHeaderVals[k], ",") - } - } - stripExcessSpaces(headerValues) - ctx.canonicalHeaders = strings.Join(headerValues, "\n") -} - -func (ctx *signingCtx) buildCanonicalString() { - ctx.Request.URL.RawQuery = strings.Replace(ctx.Query.Encode(), "+", "%20", -1) - - uri := getURIPath(ctx.Request.URL) - - if !ctx.DisableURIPathEscaping { - uri = rest.EscapePath(uri, false) - } - - ctx.canonicalString = strings.Join([]string{ - ctx.Request.Method, - uri, - ctx.Request.URL.RawQuery, - ctx.canonicalHeaders + "\n", - ctx.signedHeaders, - ctx.bodyDigest, - }, "\n") -} - -func (ctx *signingCtx) buildStringToSign() { - ctx.stringToSign = strings.Join([]string{ - authHeaderPrefix, - ctx.formattedTime, - ctx.credentialString, - hex.EncodeToString(makeSha256([]byte(ctx.canonicalString))), - }, "\n") -} - -func (ctx *signingCtx) buildSignature() { - secret := ctx.credValues.SecretAccessKey - date := makeHmac([]byte("AWS4"+secret), []byte(ctx.formattedShortTime)) - region := makeHmac(date, []byte(ctx.Region)) - service := makeHmac(region, []byte(ctx.ServiceName)) - credentials := makeHmac(service, []byte("aws4_request")) - signature := makeHmac(credentials, []byte(ctx.stringToSign)) - ctx.signature = hex.EncodeToString(signature) -} - -func (ctx *signingCtx) buildBodyDigest() error { - hash := ctx.Request.Header.Get("X-Amz-Content-Sha256") - if hash == "" { - includeSHA256Header := ctx.unsignedPayload || - ctx.ServiceName == "s3" || - ctx.ServiceName == "glacier" - - s3Presign := ctx.isPresign && ctx.ServiceName == "s3" - - if ctx.unsignedPayload || s3Presign { - hash = "UNSIGNED-PAYLOAD" - includeSHA256Header = !s3Presign - } else if ctx.Body == nil { - hash = emptyStringSHA256 - } else { - if !aws.IsReaderSeekable(ctx.Body) { - return fmt.Errorf("cannot use unseekable request body %T, for signed request with body", ctx.Body) - } - hashBytes, err := makeSha256Reader(ctx.Body) - if err != nil { - return err - } - hash = hex.EncodeToString(hashBytes) - } - - if includeSHA256Header { - ctx.Request.Header.Set("X-Amz-Content-Sha256", hash) - } - } - ctx.bodyDigest = hash - - return nil -} - -// isRequestSigned returns if the request is currently signed or presigned -func (ctx *signingCtx) isRequestSigned() bool { - if ctx.isPresign && ctx.Query.Get("X-Amz-Signature") != "" { - return true - } - if ctx.Request.Header.Get("Authorization") != "" { - return true - } - - return false -} - -// unsign removes signing flags for both signed and presigned requests. -func (ctx *signingCtx) removePresign() { - ctx.Query.Del("X-Amz-Algorithm") - ctx.Query.Del("X-Amz-Signature") - ctx.Query.Del("X-Amz-Security-Token") - ctx.Query.Del("X-Amz-Date") - ctx.Query.Del("X-Amz-Expires") - ctx.Query.Del("X-Amz-Credential") - ctx.Query.Del("X-Amz-SignedHeaders") -} - -func makeHmac(key []byte, data []byte) []byte { - hash := hmac.New(sha256.New, key) - hash.Write(data) - return hash.Sum(nil) -} - -func makeSha256(data []byte) []byte { - hash := sha256.New() - hash.Write(data) - return hash.Sum(nil) -} - -func makeSha256Reader(reader io.ReadSeeker) (hashBytes []byte, err error) { - hash := sha256.New() - start, err := reader.Seek(0, sdkio.SeekCurrent) - if err != nil { - return nil, err - } - defer func() { - // ensure error is return if unable to seek back to start of payload. - _, err = reader.Seek(start, sdkio.SeekStart) - }() - - // Use CopyN to avoid allocating the 32KB buffer in io.Copy for bodies - // smaller than 32KB. Fall back to io.Copy if we fail to determine the size. - size, err := aws.SeekerLen(reader) - if err != nil { - io.Copy(hash, reader) - } else { - io.CopyN(hash, reader, size) - } - - return hash.Sum(nil), nil -} - -const doubleSpace = " " - -// stripExcessSpaces will rewrite the passed in slice's string values to not -// contain multiple side-by-side spaces. -func stripExcessSpaces(vals []string) { - var j, k, l, m, spaces int - for i, str := range vals { - // Trim trailing spaces - for j = len(str) - 1; j >= 0 && str[j] == ' '; j-- { - } - - // Trim leading spaces - for k = 0; k < j && str[k] == ' '; k++ { - } - str = str[k : j+1] - - // Strip multiple spaces. - j = strings.Index(str, doubleSpace) - if j < 0 { - vals[i] = str - continue - } - - buf := []byte(str) - for k, m, l = j, j, len(buf); k < l; k++ { - if buf[k] == ' ' { - if spaces == 0 { - // First space. - buf[m] = buf[k] - m++ - } - spaces++ - } else { - // End of multiple spaces. - spaces = 0 - buf[m] = buf[k] - m++ - } - } - - vals[i] = string(buf[:m]) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/types.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/types.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/types.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -package aws - -import ( - "io" - "sync" - - "github.com/aws/aws-sdk-go/internal/sdkio" -) - -// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Allows the -// SDK to accept an io.Reader that is not also an io.Seeker for unsigned -// streaming payload API operations. -// -// A ReadSeekCloser wrapping an nonseekable io.Reader used in an API -// operation's input will prevent that operation being retried in the case of -// network errors, and cause operation requests to fail if the operation -// requires payload signing. -// -// Note: If using With S3 PutObject to stream an object upload The SDK's S3 -// Upload manager (s3manager.Uploader) provides support for streaming with the -// ability to retry network errors. -func ReadSeekCloser(r io.Reader) ReaderSeekerCloser { - return ReaderSeekerCloser{r} -} - -// ReaderSeekerCloser represents a reader that can also delegate io.Seeker and -// io.Closer interfaces to the underlying object if they are available. -type ReaderSeekerCloser struct { - r io.Reader -} - -// IsReaderSeekable returns if the underlying reader type can be seeked. A -// io.Reader might not actually be seekable if it is the ReaderSeekerCloser -// type. -func IsReaderSeekable(r io.Reader) bool { - switch v := r.(type) { - case ReaderSeekerCloser: - return v.IsSeeker() - case *ReaderSeekerCloser: - return v.IsSeeker() - case io.ReadSeeker: - return true - default: - return false - } -} - -// Read reads from the reader up to size of p. The number of bytes read, and -// error if it occurred will be returned. -// -// If the reader is not an io.Reader zero bytes read, and nil error will be -// returned. -// -// Performs the same functionality as io.Reader Read -func (r ReaderSeekerCloser) Read(p []byte) (int, error) { - switch t := r.r.(type) { - case io.Reader: - return t.Read(p) - } - return 0, nil -} - -// Seek sets the offset for the next Read to offset, interpreted according to -// whence: 0 means relative to the origin of the file, 1 means relative to the -// current offset, and 2 means relative to the end. Seek returns the new offset -// and an error, if any. -// -// If the ReaderSeekerCloser is not an io.Seeker nothing will be done. -func (r ReaderSeekerCloser) Seek(offset int64, whence int) (int64, error) { - switch t := r.r.(type) { - case io.Seeker: - return t.Seek(offset, whence) - } - return int64(0), nil -} - -// IsSeeker returns if the underlying reader is also a seeker. -func (r ReaderSeekerCloser) IsSeeker() bool { - _, ok := r.r.(io.Seeker) - return ok -} - -// HasLen returns the length of the underlying reader if the value implements -// the Len() int method. -func (r ReaderSeekerCloser) HasLen() (int, bool) { - type lenner interface { - Len() int - } - - if lr, ok := r.r.(lenner); ok { - return lr.Len(), true - } - - return 0, false -} - -// GetLen returns the length of the bytes remaining in the underlying reader. -// Checks first for Len(), then io.Seeker to determine the size of the -// underlying reader. -// -// Will return -1 if the length cannot be determined. -func (r ReaderSeekerCloser) GetLen() (int64, error) { - if l, ok := r.HasLen(); ok { - return int64(l), nil - } - - if s, ok := r.r.(io.Seeker); ok { - return seekerLen(s) - } - - return -1, nil -} - -// SeekerLen attempts to get the number of bytes remaining at the seeker's -// current position. Returns the number of bytes remaining or error. -func SeekerLen(s io.Seeker) (int64, error) { - // Determine if the seeker is actually seekable. ReaderSeekerCloser - // hides the fact that a io.Readers might not actually be seekable. - switch v := s.(type) { - case ReaderSeekerCloser: - return v.GetLen() - case *ReaderSeekerCloser: - return v.GetLen() - } - - return seekerLen(s) -} - -func seekerLen(s io.Seeker) (int64, error) { - curOffset, err := s.Seek(0, sdkio.SeekCurrent) - if err != nil { - return 0, err - } - - endOffset, err := s.Seek(0, sdkio.SeekEnd) - if err != nil { - return 0, err - } - - _, err = s.Seek(curOffset, sdkio.SeekStart) - if err != nil { - return 0, err - } - - return endOffset - curOffset, nil -} - -// Close closes the ReaderSeekerCloser. -// -// If the ReaderSeekerCloser is not an io.Closer nothing will be done. -func (r ReaderSeekerCloser) Close() error { - switch t := r.r.(type) { - case io.Closer: - return t.Close() - } - return nil -} - -// A WriteAtBuffer provides a in memory buffer supporting the io.WriterAt interface -// Can be used with the s3manager.Downloader to download content to a buffer -// in memory. Safe to use concurrently. -type WriteAtBuffer struct { - buf []byte - m sync.Mutex - - // GrowthCoeff defines the growth rate of the internal buffer. By - // default, the growth rate is 1, where expanding the internal - // buffer will allocate only enough capacity to fit the new expected - // length. - GrowthCoeff float64 -} - -// NewWriteAtBuffer creates a WriteAtBuffer with an internal buffer -// provided by buf. -func NewWriteAtBuffer(buf []byte) *WriteAtBuffer { - return &WriteAtBuffer{buf: buf} -} - -// WriteAt writes a slice of bytes to a buffer starting at the position provided -// The number of bytes written will be returned, or error. Can overwrite previous -// written slices if the write ats overlap. -func (b *WriteAtBuffer) WriteAt(p []byte, pos int64) (n int, err error) { - pLen := len(p) - expLen := pos + int64(pLen) - b.m.Lock() - defer b.m.Unlock() - if int64(len(b.buf)) < expLen { - if int64(cap(b.buf)) < expLen { - if b.GrowthCoeff < 1 { - b.GrowthCoeff = 1 - } - newBuf := make([]byte, expLen, int64(b.GrowthCoeff*float64(expLen))) - copy(newBuf, b.buf) - b.buf = newBuf - } - b.buf = b.buf[:expLen] - } - copy(b.buf[pos:], p) - return pLen, nil -} - -// Bytes returns a slice of bytes written to the buffer. -func (b *WriteAtBuffer) Bytes() []byte { - b.m.Lock() - defer b.m.Unlock() - return b.buf -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -// +build !go1.8 - -package aws - -import ( - "net/url" - "strings" -) - -// URLHostname will extract the Hostname without port from the URL value. -// -// Copy of Go 1.8's net/url#URL.Hostname functionality. -func URLHostname(url *url.URL) string { - return stripPort(url.Host) - -} - -// stripPort is copy of Go 1.8 url#URL.Hostname functionality. -// https://golang.org/src/net/url/url.go -func stripPort(hostport string) string { - colon := strings.IndexByte(hostport, ':') - if colon == -1 { - return hostport - } - if i := strings.IndexByte(hostport, ']'); i != -1 { - return strings.TrimPrefix(hostport[:i], "[") - } - return hostport[:colon] -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/url.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -// +build go1.8 - -package aws - -import "net/url" - -// URLHostname will extract the Hostname without port from the URL value. -// -// Wrapper of net/url#URL.Hostname for backwards Go version compatibility. -func URLHostname(url *url.URL) string { - return url.Hostname() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/version.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/version.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/version.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/aws/version.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -// Package aws provides core functionality for making requests to AWS services. -package aws - -// SDKName is the name of this AWS SDK -const SDKName = "aws-sdk-go" - -// SDKVersion is the version of this SDK -const SDKVersion = "1.25.41" diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -package ini - -// ASTKind represents different states in the parse table -// and the type of AST that is being constructed -type ASTKind int - -// ASTKind* is used in the parse table to transition between -// the different states -const ( - ASTKindNone = ASTKind(iota) - ASTKindStart - ASTKindExpr - ASTKindEqualExpr - ASTKindStatement - ASTKindSkipStatement - ASTKindExprStatement - ASTKindSectionStatement - ASTKindNestedSectionStatement - ASTKindCompletedNestedSectionStatement - ASTKindCommentStatement - ASTKindCompletedSectionStatement -) - -func (k ASTKind) String() string { - switch k { - case ASTKindNone: - return "none" - case ASTKindStart: - return "start" - case ASTKindExpr: - return "expr" - case ASTKindStatement: - return "stmt" - case ASTKindSectionStatement: - return "section_stmt" - case ASTKindExprStatement: - return "expr_stmt" - case ASTKindCommentStatement: - return "comment" - case ASTKindNestedSectionStatement: - return "nested_section_stmt" - case ASTKindCompletedSectionStatement: - return "completed_stmt" - case ASTKindSkipStatement: - return "skip" - default: - return "" - } -} - -// AST interface allows us to determine what kind of node we -// are on and casting may not need to be necessary. -// -// The root is always the first node in Children -type AST struct { - Kind ASTKind - Root Token - RootToken bool - Children []AST -} - -func newAST(kind ASTKind, root AST, children ...AST) AST { - return AST{ - Kind: kind, - Children: append([]AST{root}, children...), - } -} - -func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST { - return AST{ - Kind: kind, - Root: root, - RootToken: true, - Children: children, - } -} - -// AppendChild will append to the list of children an AST has. -func (a *AST) AppendChild(child AST) { - a.Children = append(a.Children, child) -} - -// GetRoot will return the root AST which can be the first entry -// in the children list or a token. -func (a *AST) GetRoot() AST { - if a.RootToken { - return *a - } - - if len(a.Children) == 0 { - return AST{} - } - - return a.Children[0] -} - -// GetChildren will return the current AST's list of children -func (a *AST) GetChildren() []AST { - if len(a.Children) == 0 { - return []AST{} - } - - if a.RootToken { - return a.Children - } - - return a.Children[1:] -} - -// SetChildren will set and override all children of the AST. -func (a *AST) SetChildren(children []AST) { - if a.RootToken { - a.Children = children - } else { - a.Children = append(a.Children[:1], children...) - } -} - -// Start is used to indicate the starting state of the parse table. -var Start = newAST(ASTKindStart, AST{}) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -package ini - -var commaRunes = []rune(",") - -func isComma(b rune) bool { - return b == ',' -} - -func newCommaToken() Token { - return newToken(TokenComma, commaRunes, NoneType) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -package ini - -// isComment will return whether or not the next byte(s) is a -// comment. -func isComment(b []rune) bool { - if len(b) == 0 { - return false - } - - switch b[0] { - case ';': - return true - case '#': - return true - } - - return false -} - -// newCommentToken will create a comment token and -// return how many bytes were read. -func newCommentToken(b []rune) (Token, int, error) { - i := 0 - for ; i < len(b); i++ { - if b[i] == '\n' { - break - } - - if len(b)-i > 2 && b[i] == '\r' && b[i+1] == '\n' { - break - } - } - - return newToken(TokenComment, b[:i], NoneType), i, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -// Package ini is an LL(1) parser for configuration files. -// -// Example: -// sections, err := ini.OpenFile("/path/to/file") -// if err != nil { -// panic(err) -// } -// -// profile := "foo" -// section, ok := sections.GetSection(profile) -// if !ok { -// fmt.Printf("section %q could not be found", profile) -// } -// -// Below is the BNF that describes this parser -// Grammar: -// stmt -> value stmt' -// stmt' -> epsilon | op stmt -// value -> number | string | boolean | quoted_string -// -// section -> [ section' -// section' -> value section_close -// section_close -> ] -// -// SkipState will skip (NL WS)+ -// -// comment -> # comment' | ; comment' -// comment' -> epsilon | value -package ini diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -package ini - -// emptyToken is used to satisfy the Token interface -var emptyToken = newToken(TokenNone, []rune{}, NoneType) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -package ini - -// newExpression will return an expression AST. -// Expr represents an expression -// -// grammar: -// expr -> string | number -func newExpression(tok Token) AST { - return newASTWithRootToken(ASTKindExpr, tok) -} - -func newEqualExpr(left AST, tok Token) AST { - return newASTWithRootToken(ASTKindEqualExpr, tok, left) -} - -// EqualExprKey will return a LHS value in the equal expr -func EqualExprKey(ast AST) string { - children := ast.GetChildren() - if len(children) == 0 || ast.Kind != ASTKindEqualExpr { - return "" - } - - return string(children[0].Root.Raw()) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -// +build gofuzz - -package ini - -import ( - "bytes" -) - -func Fuzz(data []byte) int { - b := bytes.NewReader(data) - - if _, err := Parse(b); err != nil { - return 0 - } - - return 1 -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -package ini - -import ( - "io" - "os" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -// OpenFile takes a path to a given file, and will open and parse -// that file. -func OpenFile(path string) (Sections, error) { - f, err := os.Open(path) - if err != nil { - return Sections{}, awserr.New(ErrCodeUnableToReadFile, "unable to open file", err) - } - defer f.Close() - - return Parse(f) -} - -// Parse will parse the given file using the shared config -// visitor. -func Parse(f io.Reader) (Sections, error) { - tree, err := ParseAST(f) - if err != nil { - return Sections{}, err - } - - v := NewDefaultVisitor() - if err = Walk(tree, v); err != nil { - return Sections{}, err - } - - return v.Sections, nil -} - -// ParseBytes will parse the given bytes and return the parsed sections. -func ParseBytes(b []byte) (Sections, error) { - tree, err := ParseASTBytes(b) - if err != nil { - return Sections{}, err - } - - v := NewDefaultVisitor() - if err = Walk(tree, v); err != nil { - return Sections{}, err - } - - return v.Sections, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -package ini - -import ( - "bytes" - "io" - "io/ioutil" - - "github.com/aws/aws-sdk-go/aws/awserr" -) - -const ( - // ErrCodeUnableToReadFile is used when a file is failed to be - // opened or read from. - ErrCodeUnableToReadFile = "FailedRead" -) - -// TokenType represents the various different tokens types -type TokenType int - -func (t TokenType) String() string { - switch t { - case TokenNone: - return "none" - case TokenLit: - return "literal" - case TokenSep: - return "sep" - case TokenOp: - return "op" - case TokenWS: - return "ws" - case TokenNL: - return "newline" - case TokenComment: - return "comment" - case TokenComma: - return "comma" - default: - return "" - } -} - -// TokenType enums -const ( - TokenNone = TokenType(iota) - TokenLit - TokenSep - TokenComma - TokenOp - TokenWS - TokenNL - TokenComment -) - -type iniLexer struct{} - -// Tokenize will return a list of tokens during lexical analysis of the -// io.Reader. -func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) { - b, err := ioutil.ReadAll(r) - if err != nil { - return nil, awserr.New(ErrCodeUnableToReadFile, "unable to read file", err) - } - - return l.tokenize(b) -} - -func (l *iniLexer) tokenize(b []byte) ([]Token, error) { - runes := bytes.Runes(b) - var err error - n := 0 - tokenAmount := countTokens(runes) - tokens := make([]Token, tokenAmount) - count := 0 - - for len(runes) > 0 && count < tokenAmount { - switch { - case isWhitespace(runes[0]): - tokens[count], n, err = newWSToken(runes) - case isComma(runes[0]): - tokens[count], n = newCommaToken(), 1 - case isComment(runes): - tokens[count], n, err = newCommentToken(runes) - case isNewline(runes): - tokens[count], n, err = newNewlineToken(runes) - case isSep(runes): - tokens[count], n, err = newSepToken(runes) - case isOp(runes): - tokens[count], n, err = newOpToken(runes) - default: - tokens[count], n, err = newLitToken(runes) - } - - if err != nil { - return nil, err - } - - count++ - - runes = runes[n:] - } - - return tokens[:count], nil -} - -func countTokens(runes []rune) int { - count, n := 0, 0 - var err error - - for len(runes) > 0 { - switch { - case isWhitespace(runes[0]): - _, n, err = newWSToken(runes) - case isComma(runes[0]): - _, n = newCommaToken(), 1 - case isComment(runes): - _, n, err = newCommentToken(runes) - case isNewline(runes): - _, n, err = newNewlineToken(runes) - case isSep(runes): - _, n, err = newSepToken(runes) - case isOp(runes): - _, n, err = newOpToken(runes) - default: - _, n, err = newLitToken(runes) - } - - if err != nil { - return 0 - } - - count++ - runes = runes[n:] - } - - return count + 1 -} - -// Token indicates a metadata about a given value. -type Token struct { - t TokenType - ValueType ValueType - base int - raw []rune -} - -var emptyValue = Value{} - -func newToken(t TokenType, raw []rune, v ValueType) Token { - return Token{ - t: t, - raw: raw, - ValueType: v, - } -} - -// Raw return the raw runes that were consumed -func (tok Token) Raw() []rune { - return tok.raw -} - -// Type returns the token type -func (tok Token) Type() TokenType { - return tok.t -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,356 +0,0 @@ -package ini - -import ( - "fmt" - "io" -) - -// State enums for the parse table -const ( - InvalidState = iota - // stmt -> value stmt' - StatementState - // stmt' -> MarkComplete | op stmt - StatementPrimeState - // value -> number | string | boolean | quoted_string - ValueState - // section -> [ section' - OpenScopeState - // section' -> value section_close - SectionState - // section_close -> ] - CloseScopeState - // SkipState will skip (NL WS)+ - SkipState - // SkipTokenState will skip any token and push the previous - // state onto the stack. - SkipTokenState - // comment -> # comment' | ; comment' - // comment' -> MarkComplete | value - CommentState - // MarkComplete state will complete statements and move that - // to the completed AST list - MarkCompleteState - // TerminalState signifies that the tokens have been fully parsed - TerminalState -) - -// parseTable is a state machine to dictate the grammar above. -var parseTable = map[ASTKind]map[TokenType]int{ - ASTKindStart: map[TokenType]int{ - TokenLit: StatementState, - TokenSep: OpenScopeState, - TokenWS: SkipTokenState, - TokenNL: SkipTokenState, - TokenComment: CommentState, - TokenNone: TerminalState, - }, - ASTKindCommentStatement: map[TokenType]int{ - TokenLit: StatementState, - TokenSep: OpenScopeState, - TokenWS: SkipTokenState, - TokenNL: SkipTokenState, - TokenComment: CommentState, - TokenNone: MarkCompleteState, - }, - ASTKindExpr: map[TokenType]int{ - TokenOp: StatementPrimeState, - TokenLit: ValueState, - TokenSep: OpenScopeState, - TokenWS: ValueState, - TokenNL: SkipState, - TokenComment: CommentState, - TokenNone: MarkCompleteState, - }, - ASTKindEqualExpr: map[TokenType]int{ - TokenLit: ValueState, - TokenWS: SkipTokenState, - TokenNL: SkipState, - }, - ASTKindStatement: map[TokenType]int{ - TokenLit: SectionState, - TokenSep: CloseScopeState, - TokenWS: SkipTokenState, - TokenNL: SkipTokenState, - TokenComment: CommentState, - TokenNone: MarkCompleteState, - }, - ASTKindExprStatement: map[TokenType]int{ - TokenLit: ValueState, - TokenSep: OpenScopeState, - TokenOp: ValueState, - TokenWS: ValueState, - TokenNL: MarkCompleteState, - TokenComment: CommentState, - TokenNone: TerminalState, - TokenComma: SkipState, - }, - ASTKindSectionStatement: map[TokenType]int{ - TokenLit: SectionState, - TokenOp: SectionState, - TokenSep: CloseScopeState, - TokenWS: SectionState, - TokenNL: SkipTokenState, - }, - ASTKindCompletedSectionStatement: map[TokenType]int{ - TokenWS: SkipTokenState, - TokenNL: SkipTokenState, - TokenLit: StatementState, - TokenSep: OpenScopeState, - TokenComment: CommentState, - TokenNone: MarkCompleteState, - }, - ASTKindSkipStatement: map[TokenType]int{ - TokenLit: StatementState, - TokenSep: OpenScopeState, - TokenWS: SkipTokenState, - TokenNL: SkipTokenState, - TokenComment: CommentState, - TokenNone: TerminalState, - }, -} - -// ParseAST will parse input from an io.Reader using -// an LL(1) parser. -func ParseAST(r io.Reader) ([]AST, error) { - lexer := iniLexer{} - tokens, err := lexer.Tokenize(r) - if err != nil { - return []AST{}, err - } - - return parse(tokens) -} - -// ParseASTBytes will parse input from a byte slice using -// an LL(1) parser. -func ParseASTBytes(b []byte) ([]AST, error) { - lexer := iniLexer{} - tokens, err := lexer.tokenize(b) - if err != nil { - return []AST{}, err - } - - return parse(tokens) -} - -func parse(tokens []Token) ([]AST, error) { - start := Start - stack := newParseStack(3, len(tokens)) - - stack.Push(start) - s := newSkipper() - -loop: - for stack.Len() > 0 { - k := stack.Pop() - - var tok Token - if len(tokens) == 0 { - // this occurs when all the tokens have been processed - // but reduction of what's left on the stack needs to - // occur. - tok = emptyToken - } else { - tok = tokens[0] - } - - step := parseTable[k.Kind][tok.Type()] - if s.ShouldSkip(tok) { - // being in a skip state with no tokens will break out of - // the parse loop since there is nothing left to process. - if len(tokens) == 0 { - break loop - } - // if should skip is true, we skip the tokens until should skip is set to false. - step = SkipTokenState - } - - switch step { - case TerminalState: - // Finished parsing. Push what should be the last - // statement to the stack. If there is anything left - // on the stack, an error in parsing has occurred. - if k.Kind != ASTKindStart { - stack.MarkComplete(k) - } - break loop - case SkipTokenState: - // When skipping a token, the previous state was popped off the stack. - // To maintain the correct state, the previous state will be pushed - // onto the stack. - stack.Push(k) - case StatementState: - if k.Kind != ASTKindStart { - stack.MarkComplete(k) - } - expr := newExpression(tok) - stack.Push(expr) - case StatementPrimeState: - if tok.Type() != TokenOp { - stack.MarkComplete(k) - continue - } - - if k.Kind != ASTKindExpr { - return nil, NewParseError( - fmt.Sprintf("invalid expression: expected Expr type, but found %T type", k), - ) - } - - k = trimSpaces(k) - expr := newEqualExpr(k, tok) - stack.Push(expr) - case ValueState: - // ValueState requires the previous state to either be an equal expression - // or an expression statement. - // - // This grammar occurs when the RHS is a number, word, or quoted string. - // equal_expr -> lit op equal_expr' - // equal_expr' -> number | string | quoted_string - // quoted_string -> " quoted_string' - // quoted_string' -> string quoted_string_end - // quoted_string_end -> " - // - // otherwise - // expr_stmt -> equal_expr (expr_stmt')* - // expr_stmt' -> ws S | op S | MarkComplete - // S -> equal_expr' expr_stmt' - switch k.Kind { - case ASTKindEqualExpr: - // assigning a value to some key - k.AppendChild(newExpression(tok)) - stack.Push(newExprStatement(k)) - case ASTKindExpr: - k.Root.raw = append(k.Root.raw, tok.Raw()...) - stack.Push(k) - case ASTKindExprStatement: - root := k.GetRoot() - children := root.GetChildren() - if len(children) == 0 { - return nil, NewParseError( - fmt.Sprintf("invalid expression: AST contains no children %s", k.Kind), - ) - } - - rhs := children[len(children)-1] - - if rhs.Root.ValueType != QuotedStringType { - rhs.Root.ValueType = StringType - rhs.Root.raw = append(rhs.Root.raw, tok.Raw()...) - - } - - children[len(children)-1] = rhs - k.SetChildren(children) - - stack.Push(k) - } - case OpenScopeState: - if !runeCompare(tok.Raw(), openBrace) { - return nil, NewParseError("expected '['") - } - // If OpenScopeState is not at the start, we must mark the previous ast as complete - // - // for example: if previous ast was a skip statement; - // we should mark it as complete before we create a new statement - if k.Kind != ASTKindStart { - stack.MarkComplete(k) - } - - stmt := newStatement() - stack.Push(stmt) - case CloseScopeState: - if !runeCompare(tok.Raw(), closeBrace) { - return nil, NewParseError("expected ']'") - } - - k = trimSpaces(k) - stack.Push(newCompletedSectionStatement(k)) - case SectionState: - var stmt AST - - switch k.Kind { - case ASTKindStatement: - // If there are multiple literals inside of a scope declaration, - // then the current token's raw value will be appended to the Name. - // - // This handles cases like [ profile default ] - // - // k will represent a SectionStatement with the children representing - // the label of the section - stmt = newSectionStatement(tok) - case ASTKindSectionStatement: - k.Root.raw = append(k.Root.raw, tok.Raw()...) - stmt = k - default: - return nil, NewParseError( - fmt.Sprintf("invalid statement: expected statement: %v", k.Kind), - ) - } - - stack.Push(stmt) - case MarkCompleteState: - if k.Kind != ASTKindStart { - stack.MarkComplete(k) - } - - if stack.Len() == 0 { - stack.Push(start) - } - case SkipState: - stack.Push(newSkipStatement(k)) - s.Skip() - case CommentState: - if k.Kind == ASTKindStart { - stack.Push(k) - } else { - stack.MarkComplete(k) - } - - stmt := newCommentStatement(tok) - stack.Push(stmt) - default: - return nil, NewParseError( - fmt.Sprintf("invalid state with ASTKind %v and TokenType %v", - k, tok.Type())) - } - - if len(tokens) > 0 { - tokens = tokens[1:] - } - } - - // this occurs when a statement has not been completed - if stack.top > 1 { - return nil, NewParseError(fmt.Sprintf("incomplete ini expression")) - } - - // returns a sublist which excludes the start symbol - return stack.List(), nil -} - -// trimSpaces will trim spaces on the left and right hand side of -// the literal. -func trimSpaces(k AST) AST { - // trim left hand side of spaces - for i := 0; i < len(k.Root.raw); i++ { - if !isWhitespace(k.Root.raw[i]) { - break - } - - k.Root.raw = k.Root.raw[1:] - i-- - } - - // trim right hand side of spaces - for i := len(k.Root.raw) - 1; i >= 0; i-- { - if !isWhitespace(k.Root.raw[i]) { - break - } - - k.Root.raw = k.Root.raw[:len(k.Root.raw)-1] - } - - return k -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,324 +0,0 @@ -package ini - -import ( - "fmt" - "strconv" - "strings" -) - -var ( - runesTrue = []rune("true") - runesFalse = []rune("false") -) - -var literalValues = [][]rune{ - runesTrue, - runesFalse, -} - -func isBoolValue(b []rune) bool { - for _, lv := range literalValues { - if isLitValue(lv, b) { - return true - } - } - return false -} - -func isLitValue(want, have []rune) bool { - if len(have) < len(want) { - return false - } - - for i := 0; i < len(want); i++ { - if want[i] != have[i] { - return false - } - } - - return true -} - -// isNumberValue will return whether not the leading characters in -// a byte slice is a number. A number is delimited by whitespace or -// the newline token. -// -// A number is defined to be in a binary, octal, decimal (int | float), hex format, -// or in scientific notation. -func isNumberValue(b []rune) bool { - negativeIndex := 0 - helper := numberHelper{} - needDigit := false - - for i := 0; i < len(b); i++ { - negativeIndex++ - - switch b[i] { - case '-': - if helper.IsNegative() || negativeIndex != 1 { - return false - } - helper.Determine(b[i]) - needDigit = true - continue - case 'e', 'E': - if err := helper.Determine(b[i]); err != nil { - return false - } - negativeIndex = 0 - needDigit = true - continue - case 'b': - if helper.numberFormat == hex { - break - } - fallthrough - case 'o', 'x': - needDigit = true - if i == 0 { - return false - } - - fallthrough - case '.': - if err := helper.Determine(b[i]); err != nil { - return false - } - needDigit = true - continue - } - - if i > 0 && (isNewline(b[i:]) || isWhitespace(b[i])) { - return !needDigit - } - - if !helper.CorrectByte(b[i]) { - return false - } - needDigit = false - } - - return !needDigit -} - -func isValid(b []rune) (bool, int, error) { - if len(b) == 0 { - // TODO: should probably return an error - return false, 0, nil - } - - return isValidRune(b[0]), 1, nil -} - -func isValidRune(r rune) bool { - return r != ':' && r != '=' && r != '[' && r != ']' && r != ' ' && r != '\n' -} - -// ValueType is an enum that will signify what type -// the Value is -type ValueType int - -func (v ValueType) String() string { - switch v { - case NoneType: - return "NONE" - case DecimalType: - return "FLOAT" - case IntegerType: - return "INT" - case StringType: - return "STRING" - case BoolType: - return "BOOL" - } - - return "" -} - -// ValueType enums -const ( - NoneType = ValueType(iota) - DecimalType - IntegerType - StringType - QuotedStringType - BoolType -) - -// Value is a union container -type Value struct { - Type ValueType - raw []rune - - integer int64 - decimal float64 - boolean bool - str string -} - -func newValue(t ValueType, base int, raw []rune) (Value, error) { - v := Value{ - Type: t, - raw: raw, - } - var err error - - switch t { - case DecimalType: - v.decimal, err = strconv.ParseFloat(string(raw), 64) - case IntegerType: - if base != 10 { - raw = raw[2:] - } - - v.integer, err = strconv.ParseInt(string(raw), base, 64) - case StringType: - v.str = string(raw) - case QuotedStringType: - v.str = string(raw[1 : len(raw)-1]) - case BoolType: - v.boolean = runeCompare(v.raw, runesTrue) - } - - // issue 2253 - // - // if the value trying to be parsed is too large, then we will use - // the 'StringType' and raw value instead. - if nerr, ok := err.(*strconv.NumError); ok && nerr.Err == strconv.ErrRange { - v.Type = StringType - v.str = string(raw) - err = nil - } - - return v, err -} - -// Append will append values and change the type to a string -// type. -func (v *Value) Append(tok Token) { - r := tok.Raw() - if v.Type != QuotedStringType { - v.Type = StringType - r = tok.raw[1 : len(tok.raw)-1] - } - if tok.Type() != TokenLit { - v.raw = append(v.raw, tok.Raw()...) - } else { - v.raw = append(v.raw, r...) - } -} - -func (v Value) String() string { - switch v.Type { - case DecimalType: - return fmt.Sprintf("decimal: %f", v.decimal) - case IntegerType: - return fmt.Sprintf("integer: %d", v.integer) - case StringType: - return fmt.Sprintf("string: %s", string(v.raw)) - case QuotedStringType: - return fmt.Sprintf("quoted string: %s", string(v.raw)) - case BoolType: - return fmt.Sprintf("bool: %t", v.boolean) - default: - return "union not set" - } -} - -func newLitToken(b []rune) (Token, int, error) { - n := 0 - var err error - - token := Token{} - if b[0] == '"' { - n, err = getStringValue(b) - if err != nil { - return token, n, err - } - - token = newToken(TokenLit, b[:n], QuotedStringType) - } else if isNumberValue(b) { - var base int - base, n, err = getNumericalValue(b) - if err != nil { - return token, 0, err - } - - value := b[:n] - vType := IntegerType - if contains(value, '.') || hasExponent(value) { - vType = DecimalType - } - token = newToken(TokenLit, value, vType) - token.base = base - } else if isBoolValue(b) { - n, err = getBoolValue(b) - - token = newToken(TokenLit, b[:n], BoolType) - } else { - n, err = getValue(b) - token = newToken(TokenLit, b[:n], StringType) - } - - return token, n, err -} - -// IntValue returns an integer value -func (v Value) IntValue() int64 { - return v.integer -} - -// FloatValue returns a float value -func (v Value) FloatValue() float64 { - return v.decimal -} - -// BoolValue returns a bool value -func (v Value) BoolValue() bool { - return v.boolean -} - -func isTrimmable(r rune) bool { - switch r { - case '\n', ' ': - return true - } - return false -} - -// StringValue returns the string value -func (v Value) StringValue() string { - switch v.Type { - case StringType: - return strings.TrimFunc(string(v.raw), isTrimmable) - case QuotedStringType: - // preserve all characters in the quotes - return string(removeEscapedCharacters(v.raw[1 : len(v.raw)-1])) - default: - return strings.TrimFunc(string(v.raw), isTrimmable) - } -} - -func contains(runes []rune, c rune) bool { - for i := 0; i < len(runes); i++ { - if runes[i] == c { - return true - } - } - - return false -} - -func runeCompare(v1 []rune, v2 []rune) bool { - if len(v1) != len(v2) { - return false - } - - for i := 0; i < len(v1); i++ { - if v1[i] != v2[i] { - return false - } - } - - return true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -package ini - -func isNewline(b []rune) bool { - if len(b) == 0 { - return false - } - - if b[0] == '\n' { - return true - } - - if len(b) < 2 { - return false - } - - return b[0] == '\r' && b[1] == '\n' -} - -func newNewlineToken(b []rune) (Token, int, error) { - i := 1 - if b[0] == '\r' && isNewline(b[1:]) { - i++ - } - - if !isNewline([]rune(b[:i])) { - return emptyToken, 0, NewParseError("invalid new line token") - } - - return newToken(TokenNL, b[:i], NoneType), i, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -package ini - -import ( - "bytes" - "fmt" - "strconv" -) - -const ( - none = numberFormat(iota) - binary - octal - decimal - hex - exponent -) - -type numberFormat int - -// numberHelper is used to dictate what format a number is in -// and what to do for negative values. Since -1e-4 is a valid -// number, we cannot just simply check for duplicate negatives. -type numberHelper struct { - numberFormat numberFormat - - negative bool - negativeExponent bool -} - -func (b numberHelper) Exists() bool { - return b.numberFormat != none -} - -func (b numberHelper) IsNegative() bool { - return b.negative || b.negativeExponent -} - -func (b *numberHelper) Determine(c rune) error { - if b.Exists() { - return NewParseError(fmt.Sprintf("multiple number formats: 0%v", string(c))) - } - - switch c { - case 'b': - b.numberFormat = binary - case 'o': - b.numberFormat = octal - case 'x': - b.numberFormat = hex - case 'e', 'E': - b.numberFormat = exponent - case '-': - if b.numberFormat != exponent { - b.negative = true - } else { - b.negativeExponent = true - } - case '.': - b.numberFormat = decimal - default: - return NewParseError(fmt.Sprintf("invalid number character: %v", string(c))) - } - - return nil -} - -func (b numberHelper) CorrectByte(c rune) bool { - switch { - case b.numberFormat == binary: - if !isBinaryByte(c) { - return false - } - case b.numberFormat == octal: - if !isOctalByte(c) { - return false - } - case b.numberFormat == hex: - if !isHexByte(c) { - return false - } - case b.numberFormat == decimal: - if !isDigit(c) { - return false - } - case b.numberFormat == exponent: - if !isDigit(c) { - return false - } - case b.negativeExponent: - if !isDigit(c) { - return false - } - case b.negative: - if !isDigit(c) { - return false - } - default: - if !isDigit(c) { - return false - } - } - - return true -} - -func (b numberHelper) Base() int { - switch b.numberFormat { - case binary: - return 2 - case octal: - return 8 - case hex: - return 16 - default: - return 10 - } -} - -func (b numberHelper) String() string { - buf := bytes.Buffer{} - i := 0 - - switch b.numberFormat { - case binary: - i++ - buf.WriteString(strconv.Itoa(i) + ": binary format\n") - case octal: - i++ - buf.WriteString(strconv.Itoa(i) + ": octal format\n") - case hex: - i++ - buf.WriteString(strconv.Itoa(i) + ": hex format\n") - case exponent: - i++ - buf.WriteString(strconv.Itoa(i) + ": exponent format\n") - default: - i++ - buf.WriteString(strconv.Itoa(i) + ": integer format\n") - } - - if b.negative { - i++ - buf.WriteString(strconv.Itoa(i) + ": negative format\n") - } - - if b.negativeExponent { - i++ - buf.WriteString(strconv.Itoa(i) + ": negative exponent format\n") - } - - return buf.String() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -package ini - -import ( - "fmt" -) - -var ( - equalOp = []rune("=") - equalColonOp = []rune(":") -) - -func isOp(b []rune) bool { - if len(b) == 0 { - return false - } - - switch b[0] { - case '=': - return true - case ':': - return true - default: - return false - } -} - -func newOpToken(b []rune) (Token, int, error) { - tok := Token{} - - switch b[0] { - case '=': - tok = newToken(TokenOp, equalOp, NoneType) - case ':': - tok = newToken(TokenOp, equalColonOp, NoneType) - default: - return tok, 0, NewParseError(fmt.Sprintf("unexpected op type, %v", b[0])) - } - return tok, 1, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -package ini - -import "fmt" - -const ( - // ErrCodeParseError is returned when a parsing error - // has occurred. - ErrCodeParseError = "INIParseError" -) - -// ParseError is an error which is returned during any part of -// the parsing process. -type ParseError struct { - msg string -} - -// NewParseError will return a new ParseError where message -// is the description of the error. -func NewParseError(message string) *ParseError { - return &ParseError{ - msg: message, - } -} - -// Code will return the ErrCodeParseError -func (err *ParseError) Code() string { - return ErrCodeParseError -} - -// Message returns the error's message -func (err *ParseError) Message() string { - return err.msg -} - -// OrigError return nothing since there will never be any -// original error. -func (err *ParseError) OrigError() error { - return nil -} - -func (err *ParseError) Error() string { - return fmt.Sprintf("%s: %s", err.Code(), err.Message()) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -package ini - -import ( - "bytes" - "fmt" -) - -// ParseStack is a stack that contains a container, the stack portion, -// and the list which is the list of ASTs that have been successfully -// parsed. -type ParseStack struct { - top int - container []AST - list []AST - index int -} - -func newParseStack(sizeContainer, sizeList int) ParseStack { - return ParseStack{ - container: make([]AST, sizeContainer), - list: make([]AST, sizeList), - } -} - -// Pop will return and truncate the last container element. -func (s *ParseStack) Pop() AST { - s.top-- - return s.container[s.top] -} - -// Push will add the new AST to the container -func (s *ParseStack) Push(ast AST) { - s.container[s.top] = ast - s.top++ -} - -// MarkComplete will append the AST to the list of completed statements -func (s *ParseStack) MarkComplete(ast AST) { - s.list[s.index] = ast - s.index++ -} - -// List will return the completed statements -func (s ParseStack) List() []AST { - return s.list[:s.index] -} - -// Len will return the length of the container -func (s *ParseStack) Len() int { - return s.top -} - -func (s ParseStack) String() string { - buf := bytes.Buffer{} - for i, node := range s.list { - buf.WriteString(fmt.Sprintf("%d: %v\n", i+1, node)) - } - - return buf.String() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -package ini - -import ( - "fmt" -) - -var ( - emptyRunes = []rune{} -) - -func isSep(b []rune) bool { - if len(b) == 0 { - return false - } - - switch b[0] { - case '[', ']': - return true - default: - return false - } -} - -var ( - openBrace = []rune("[") - closeBrace = []rune("]") -) - -func newSepToken(b []rune) (Token, int, error) { - tok := Token{} - - switch b[0] { - case '[': - tok = newToken(TokenSep, openBrace, NoneType) - case ']': - tok = newToken(TokenSep, closeBrace, NoneType) - default: - return tok, 0, NewParseError(fmt.Sprintf("unexpected sep type, %v", b[0])) - } - return tok, 1, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -package ini - -// skipper is used to skip certain blocks of an ini file. -// Currently skipper is used to skip nested blocks of ini -// files. See example below -// -// [ foo ] -// nested = ; this section will be skipped -// a=b -// c=d -// bar=baz ; this will be included -type skipper struct { - shouldSkip bool - TokenSet bool - prevTok Token -} - -func newSkipper() skipper { - return skipper{ - prevTok: emptyToken, - } -} - -func (s *skipper) ShouldSkip(tok Token) bool { - // should skip state will be modified only if previous token was new line (NL); - // and the current token is not WhiteSpace (WS). - if s.shouldSkip && - s.prevTok.Type() == TokenNL && - tok.Type() != TokenWS { - s.Continue() - return false - } - s.prevTok = tok - return s.shouldSkip -} - -func (s *skipper) Skip() { - s.shouldSkip = true -} - -func (s *skipper) Continue() { - s.shouldSkip = false - // empty token is assigned as we return to default state, when should skip is false - s.prevTok = emptyToken -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -package ini - -// Statement is an empty AST mostly used for transitioning states. -func newStatement() AST { - return newAST(ASTKindStatement, AST{}) -} - -// SectionStatement represents a section AST -func newSectionStatement(tok Token) AST { - return newASTWithRootToken(ASTKindSectionStatement, tok) -} - -// ExprStatement represents a completed expression AST -func newExprStatement(ast AST) AST { - return newAST(ASTKindExprStatement, ast) -} - -// CommentStatement represents a comment in the ini definition. -// -// grammar: -// comment -> #comment' | ;comment' -// comment' -> epsilon | value -func newCommentStatement(tok Token) AST { - return newAST(ASTKindCommentStatement, newExpression(tok)) -} - -// CompletedSectionStatement represents a completed section -func newCompletedSectionStatement(ast AST) AST { - return newAST(ASTKindCompletedSectionStatement, ast) -} - -// SkipStatement is used to skip whole statements -func newSkipStatement(ast AST) AST { - return newAST(ASTKindSkipStatement, ast) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,284 +0,0 @@ -package ini - -import ( - "fmt" -) - -// getStringValue will return a quoted string and the amount -// of bytes read -// -// an error will be returned if the string is not properly formatted -func getStringValue(b []rune) (int, error) { - if b[0] != '"' { - return 0, NewParseError("strings must start with '\"'") - } - - endQuote := false - i := 1 - - for ; i < len(b) && !endQuote; i++ { - if escaped := isEscaped(b[:i], b[i]); b[i] == '"' && !escaped { - endQuote = true - break - } else if escaped { - /*c, err := getEscapedByte(b[i]) - if err != nil { - return 0, err - } - - b[i-1] = c - b = append(b[:i], b[i+1:]...) - i--*/ - - continue - } - } - - if !endQuote { - return 0, NewParseError("missing '\"' in string value") - } - - return i + 1, nil -} - -// getBoolValue will return a boolean and the amount -// of bytes read -// -// an error will be returned if the boolean is not of a correct -// value -func getBoolValue(b []rune) (int, error) { - if len(b) < 4 { - return 0, NewParseError("invalid boolean value") - } - - n := 0 - for _, lv := range literalValues { - if len(lv) > len(b) { - continue - } - - if isLitValue(lv, b) { - n = len(lv) - } - } - - if n == 0 { - return 0, NewParseError("invalid boolean value") - } - - return n, nil -} - -// getNumericalValue will return a numerical string, the amount -// of bytes read, and the base of the number -// -// an error will be returned if the number is not of a correct -// value -func getNumericalValue(b []rune) (int, int, error) { - if !isDigit(b[0]) { - return 0, 0, NewParseError("invalid digit value") - } - - i := 0 - helper := numberHelper{} - -loop: - for negativeIndex := 0; i < len(b); i++ { - negativeIndex++ - - if !isDigit(b[i]) { - switch b[i] { - case '-': - if helper.IsNegative() || negativeIndex != 1 { - return 0, 0, NewParseError("parse error '-'") - } - - n := getNegativeNumber(b[i:]) - i += (n - 1) - helper.Determine(b[i]) - continue - case '.': - if err := helper.Determine(b[i]); err != nil { - return 0, 0, err - } - case 'e', 'E': - if err := helper.Determine(b[i]); err != nil { - return 0, 0, err - } - - negativeIndex = 0 - case 'b': - if helper.numberFormat == hex { - break - } - fallthrough - case 'o', 'x': - if i == 0 && b[i] != '0' { - return 0, 0, NewParseError("incorrect base format, expected leading '0'") - } - - if i != 1 { - return 0, 0, NewParseError(fmt.Sprintf("incorrect base format found %s at %d index", string(b[i]), i)) - } - - if err := helper.Determine(b[i]); err != nil { - return 0, 0, err - } - default: - if isWhitespace(b[i]) { - break loop - } - - if isNewline(b[i:]) { - break loop - } - - if !(helper.numberFormat == hex && isHexByte(b[i])) { - if i+2 < len(b) && !isNewline(b[i:i+2]) { - return 0, 0, NewParseError("invalid numerical character") - } else if !isNewline([]rune{b[i]}) { - return 0, 0, NewParseError("invalid numerical character") - } - - break loop - } - } - } - } - - return helper.Base(), i, nil -} - -// isDigit will return whether or not something is an integer -func isDigit(b rune) bool { - return b >= '0' && b <= '9' -} - -func hasExponent(v []rune) bool { - return contains(v, 'e') || contains(v, 'E') -} - -func isBinaryByte(b rune) bool { - switch b { - case '0', '1': - return true - default: - return false - } -} - -func isOctalByte(b rune) bool { - switch b { - case '0', '1', '2', '3', '4', '5', '6', '7': - return true - default: - return false - } -} - -func isHexByte(b rune) bool { - if isDigit(b) { - return true - } - return (b >= 'A' && b <= 'F') || - (b >= 'a' && b <= 'f') -} - -func getValue(b []rune) (int, error) { - i := 0 - - for i < len(b) { - if isNewline(b[i:]) { - break - } - - if isOp(b[i:]) { - break - } - - valid, n, err := isValid(b[i:]) - if err != nil { - return 0, err - } - - if !valid { - break - } - - i += n - } - - return i, nil -} - -// getNegativeNumber will return a negative number from a -// byte slice. This will iterate through all characters until -// a non-digit has been found. -func getNegativeNumber(b []rune) int { - if b[0] != '-' { - return 0 - } - - i := 1 - for ; i < len(b); i++ { - if !isDigit(b[i]) { - return i - } - } - - return i -} - -// isEscaped will return whether or not the character is an escaped -// character. -func isEscaped(value []rune, b rune) bool { - if len(value) == 0 { - return false - } - - switch b { - case '\'': // single quote - case '"': // quote - case 'n': // newline - case 't': // tab - case '\\': // backslash - default: - return false - } - - return value[len(value)-1] == '\\' -} - -func getEscapedByte(b rune) (rune, error) { - switch b { - case '\'': // single quote - return '\'', nil - case '"': // quote - return '"', nil - case 'n': // newline - return '\n', nil - case 't': // table - return '\t', nil - case '\\': // backslash - return '\\', nil - default: - return b, NewParseError(fmt.Sprintf("invalid escaped character %c", b)) - } -} - -func removeEscapedCharacters(b []rune) []rune { - for i := 0; i < len(b); i++ { - if isEscaped(b[:i], b[i]) { - c, err := getEscapedByte(b[i]) - if err != nil { - return b - } - - b[i-1] = c - b = append(b[:i], b[i+1:]...) - i-- - } - } - - return b -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ -package ini - -import ( - "fmt" - "sort" -) - -// Visitor is an interface used by walkers that will -// traverse an array of ASTs. -type Visitor interface { - VisitExpr(AST) error - VisitStatement(AST) error -} - -// DefaultVisitor is used to visit statements and expressions -// and ensure that they are both of the correct format. -// In addition, upon visiting this will build sections and populate -// the Sections field which can be used to retrieve profile -// configuration. -type DefaultVisitor struct { - scope string - Sections Sections -} - -// NewDefaultVisitor return a DefaultVisitor -func NewDefaultVisitor() *DefaultVisitor { - return &DefaultVisitor{ - Sections: Sections{ - container: map[string]Section{}, - }, - } -} - -// VisitExpr visits expressions... -func (v *DefaultVisitor) VisitExpr(expr AST) error { - t := v.Sections.container[v.scope] - if t.values == nil { - t.values = values{} - } - - switch expr.Kind { - case ASTKindExprStatement: - opExpr := expr.GetRoot() - switch opExpr.Kind { - case ASTKindEqualExpr: - children := opExpr.GetChildren() - if len(children) <= 1 { - return NewParseError("unexpected token type") - } - - rhs := children[1] - - if rhs.Root.Type() != TokenLit { - return NewParseError("unexpected token type") - } - - key := EqualExprKey(opExpr) - v, err := newValue(rhs.Root.ValueType, rhs.Root.base, rhs.Root.Raw()) - if err != nil { - return err - } - - t.values[key] = v - default: - return NewParseError(fmt.Sprintf("unsupported expression %v", expr)) - } - default: - return NewParseError(fmt.Sprintf("unsupported expression %v", expr)) - } - - v.Sections.container[v.scope] = t - return nil -} - -// VisitStatement visits statements... -func (v *DefaultVisitor) VisitStatement(stmt AST) error { - switch stmt.Kind { - case ASTKindCompletedSectionStatement: - child := stmt.GetRoot() - if child.Kind != ASTKindSectionStatement { - return NewParseError(fmt.Sprintf("unsupported child statement: %T", child)) - } - - name := string(child.Root.Raw()) - v.Sections.container[name] = Section{} - v.scope = name - default: - return NewParseError(fmt.Sprintf("unsupported statement: %s", stmt.Kind)) - } - - return nil -} - -// Sections is a map of Section structures that represent -// a configuration. -type Sections struct { - container map[string]Section -} - -// GetSection will return section p. If section p does not exist, -// false will be returned in the second parameter. -func (t Sections) GetSection(p string) (Section, bool) { - v, ok := t.container[p] - return v, ok -} - -// values represents a map of union values. -type values map[string]Value - -// List will return a list of all sections that were successfully -// parsed. -func (t Sections) List() []string { - keys := make([]string, len(t.container)) - i := 0 - for k := range t.container { - keys[i] = k - i++ - } - - sort.Strings(keys) - return keys -} - -// Section contains a name and values. This represent -// a sectioned entry in a configuration file. -type Section struct { - Name string - values values -} - -// Has will return whether or not an entry exists in a given section -func (t Section) Has(k string) bool { - _, ok := t.values[k] - return ok -} - -// ValueType will returned what type the union is set to. If -// k was not found, the NoneType will be returned. -func (t Section) ValueType(k string) (ValueType, bool) { - v, ok := t.values[k] - return v.Type, ok -} - -// Bool returns a bool value at k -func (t Section) Bool(k string) bool { - return t.values[k].BoolValue() -} - -// Int returns an integer value at k -func (t Section) Int(k string) int64 { - return t.values[k].IntValue() -} - -// Float64 returns a float value at k -func (t Section) Float64(k string) float64 { - return t.values[k].FloatValue() -} - -// String returns the string value at k -func (t Section) String(k string) string { - _, ok := t.values[k] - if !ok { - return "" - } - return t.values[k].StringValue() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -package ini - -// Walk will traverse the AST using the v, the Visitor. -func Walk(tree []AST, v Visitor) error { - for _, node := range tree { - switch node.Kind { - case ASTKindExpr, - ASTKindExprStatement: - - if err := v.VisitExpr(node); err != nil { - return err - } - case ASTKindStatement, - ASTKindCompletedSectionStatement, - ASTKindNestedSectionStatement, - ASTKindCompletedNestedSectionStatement: - - if err := v.VisitStatement(node); err != nil { - return err - } - } - } - - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -package ini - -import ( - "unicode" -) - -// isWhitespace will return whether or not the character is -// a whitespace character. -// -// Whitespace is defined as a space or tab. -func isWhitespace(c rune) bool { - return unicode.IsSpace(c) && c != '\n' && c != '\r' -} - -func newWSToken(b []rune) (Token, int, error) { - i := 0 - for ; i < len(b); i++ { - if !isWhitespace(b[i]) { - break - } - } - - return newToken(TokenWS, b[:i], NoneType), i, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -package sdkio - -const ( - // Byte is 8 bits - Byte int64 = 1 - // KibiByte (KiB) is 1024 Bytes - KibiByte = Byte * 1024 - // MebiByte (MiB) is 1024 KiB - MebiByte = KibiByte * 1024 - // GibiByte (GiB) is 1024 MiB - GibiByte = MebiByte * 1024 -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -// +build !go1.7 - -package sdkio - -// Copy of Go 1.7 io package's Seeker constants. -const ( - SeekStart = 0 // seek relative to the origin of the file - SeekCurrent = 1 // seek relative to the current offset - SeekEnd = 2 // seek relative to the end -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -// +build go1.7 - -package sdkio - -import "io" - -// Alias for Go 1.7 io package Seeker constants -const ( - SeekStart = io.SeekStart // seek relative to the origin of the file - SeekCurrent = io.SeekCurrent // seek relative to the current offset - SeekEnd = io.SeekEnd // seek relative to the end -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -// +build go1.10 - -package sdkmath - -import "math" - -// Round returns the nearest integer, rounding half away from zero. -// -// Special cases are: -// Round(±0) = ±0 -// Round(±Inf) = ±Inf -// Round(NaN) = NaN -func Round(x float64) float64 { - return math.Round(x) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -// +build !go1.10 - -package sdkmath - -import "math" - -// Copied from the Go standard library's (Go 1.12) math/floor.go for use in -// Go version prior to Go 1.10. -const ( - uvone = 0x3FF0000000000000 - mask = 0x7FF - shift = 64 - 11 - 1 - bias = 1023 - signMask = 1 << 63 - fracMask = 1<= 0.5 { - // return t + Copysign(1, x) - // } - // return t - // } - bits := math.Float64bits(x) - e := uint(bits>>shift) & mask - if e < bias { - // Round abs(x) < 1 including denormals. - bits &= signMask // +-0 - if e == bias-1 { - bits |= uvone // +-1 - } - } else if e < bias+shift { - // Round any abs(x) >= 1 containing a fractional component [0,1). - // - // Numbers with larger exponents are returned unchanged since they - // must be either an integer, infinity, or NaN. - const half = 1 << (shift - 1) - e -= bias - bits += half >> e - bits &^= fracMask >> e - } - return math.Float64frombits(bits) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -package sdkrand - -import ( - "math/rand" - "sync" - "time" -) - -// lockedSource is a thread-safe implementation of rand.Source -type lockedSource struct { - lk sync.Mutex - src rand.Source -} - -func (r *lockedSource) Int63() (n int64) { - r.lk.Lock() - n = r.src.Int63() - r.lk.Unlock() - return -} - -func (r *lockedSource) Seed(seed int64) { - r.lk.Lock() - r.src.Seed(seed) - r.lk.Unlock() -} - -// SeededRand is a new RNG using a thread safe implementation of rand.Source -var SeededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())}) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -// +build !go1.6 - -package sdkrand - -import "math/rand" - -// Read backfills Go 1.6's math.Rand.Reader for Go 1.5 -func Read(r *rand.Rand, p []byte) (n int, err error) { - // Copy of Go standard libraries math package's read function not added to - // standard library until Go 1.6. - var pos int8 - var val int64 - for n = 0; n < len(p); n++ { - if pos == 0 { - val = r.Int63() - pos = 7 - } - p[n] = byte(val) - val >>= 8 - pos-- - } - - return n, err -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -// +build go1.6 - -package sdkrand - -import "math/rand" - -// Read provides the stub for math.Rand.Read method support for go version's -// 1.6 and greater. -func Read(r *rand.Rand, p []byte) (int, error) { - return r.Read(p) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -package sdkuri - -import ( - "path" - "strings" -) - -// PathJoin will join the elements of the path delimited by the "/" -// character. Similar to path.Join with the exception the trailing "/" -// character is preserved if present. -func PathJoin(elems ...string) string { - if len(elems) == 0 { - return "" - } - - hasTrailing := strings.HasSuffix(elems[len(elems)-1], "/") - str := path.Join(elems...) - if hasTrailing && str != "/" { - str += "/" - } - - return str -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -package shareddefaults - -const ( - // ECSCredsProviderEnvVar is an environmental variable key used to - // determine which path needs to be hit. - ECSCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -) - -// ECSContainerCredentialsURI is the endpoint to retrieve container -// credentials. This can be overridden to test to ensure the credential process -// is behaving correctly. -var ECSContainerCredentialsURI = "http://169.254.170.2" diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -package shareddefaults - -import ( - "os" - "path/filepath" - "runtime" -) - -// SharedCredentialsFilename returns the SDK's default file path -// for the shared credentials file. -// -// Builds the shared config file path based on the OS's platform. -// -// - Linux/Unix: $HOME/.aws/credentials -// - Windows: %USERPROFILE%\.aws\credentials -func SharedCredentialsFilename() string { - return filepath.Join(UserHomeDir(), ".aws", "credentials") -} - -// SharedConfigFilename returns the SDK's default file path for -// the shared config file. -// -// Builds the shared config file path based on the OS's platform. -// -// - Linux/Unix: $HOME/.aws/config -// - Windows: %USERPROFILE%\.aws\config -func SharedConfigFilename() string { - return filepath.Join(UserHomeDir(), ".aws", "config") -} - -// UserHomeDir returns the home directory for the user the process is -// running under. -func UserHomeDir() string { - if runtime.GOOS == "windows" { // Windows - return os.Getenv("USERPROFILE") - } - - // *nix - return os.Getenv("HOME") -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/LICENSE.txt consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/LICENSE.txt --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/LICENSE.txt 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/LICENSE.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/NOTICE.txt consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/NOTICE.txt --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/NOTICE.txt 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/NOTICE.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -AWS SDK for Go -Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. -Copyright 2014-2015 Stripe, Inc. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -// Package ec2query provides serialization of AWS EC2 requests and responses. -package ec2query - -//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/ec2.json build_test.go - -import ( - "net/url" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/query/queryutil" -) - -// BuildHandler is a named request handler for building ec2query protocol requests -var BuildHandler = request.NamedHandler{Name: "awssdk.ec2query.Build", Fn: Build} - -// Build builds a request for the EC2 protocol. -func Build(r *request.Request) { - body := url.Values{ - "Action": {r.Operation.Name}, - "Version": {r.ClientInfo.APIVersion}, - } - if err := queryutil.Parse(body, r.Params, true); err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, - "failed encoding EC2 Query request", err) - } - - if !r.IsPresigned() { - r.HTTPRequest.Method = "POST" - r.HTTPRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") - r.SetBufferBody([]byte(body.Encode())) - } else { // This is a pre-signed request - r.HTTPRequest.Method = "GET" - r.HTTPRequest.URL.RawQuery = body.Encode() - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -package ec2query - -//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/ec2.json unmarshal_test.go - -import ( - "encoding/xml" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" -) - -// UnmarshalHandler is a named request handler for unmarshaling ec2query protocol requests -var UnmarshalHandler = request.NamedHandler{Name: "awssdk.ec2query.Unmarshal", Fn: Unmarshal} - -// UnmarshalMetaHandler is a named request handler for unmarshaling ec2query protocol request metadata -var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.ec2query.UnmarshalMeta", Fn: UnmarshalMeta} - -// UnmarshalErrorHandler is a named request handler for unmarshaling ec2query protocol request errors -var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.ec2query.UnmarshalError", Fn: UnmarshalError} - -// Unmarshal unmarshals a response body for the EC2 protocol. -func Unmarshal(r *request.Request) { - defer r.HTTPResponse.Body.Close() - if r.DataFilled() { - decoder := xml.NewDecoder(r.HTTPResponse.Body) - err := xmlutil.UnmarshalXML(r.Data, decoder, "") - if err != nil { - r.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, - "failed decoding EC2 Query response", err), - r.HTTPResponse.StatusCode, - r.RequestID, - ) - return - } - } -} - -// UnmarshalMeta unmarshals response headers for the EC2 protocol. -func UnmarshalMeta(r *request.Request) { - r.RequestID = r.HTTPResponse.Header.Get("X-Amzn-Requestid") - if r.RequestID == "" { - // Alternative version of request id in the header - r.RequestID = r.HTTPResponse.Header.Get("X-Amz-Request-Id") - } -} - -type xmlErrorResponse struct { - XMLName xml.Name `xml:"Response"` - Code string `xml:"Errors>Error>Code"` - Message string `xml:"Errors>Error>Message"` - RequestID string `xml:"RequestID"` -} - -// UnmarshalError unmarshals a response error for the EC2 protocol. -func UnmarshalError(r *request.Request) { - defer r.HTTPResponse.Body.Close() - - var respErr xmlErrorResponse - err := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, - "failed to unmarshal error message", err), - r.HTTPResponse.StatusCode, - r.RequestID, - ) - return - } - - r.Error = awserr.NewRequestFailure( - awserr.New(respErr.Code, respErr.Message, nil), - r.HTTPResponse.StatusCode, - respErr.RequestID, - ) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -package protocol - -import ( - "strings" - - "github.com/aws/aws-sdk-go/aws/request" -) - -// ValidateEndpointHostHandler is a request handler that will validate the -// request endpoint's hosts is a valid RFC 3986 host. -var ValidateEndpointHostHandler = request.NamedHandler{ - Name: "awssdk.protocol.ValidateEndpointHostHandler", - Fn: func(r *request.Request) { - err := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host) - if err != nil { - r.Error = err - } - }, -} - -// ValidateEndpointHost validates that the host string passed in is a valid RFC -// 3986 host. Returns error if the host is not valid. -func ValidateEndpointHost(opName, host string) error { - paramErrs := request.ErrInvalidParams{Context: opName} - labels := strings.Split(host, ".") - - for i, label := range labels { - if i == len(labels)-1 && len(label) == 0 { - // Allow trailing dot for FQDN hosts. - continue - } - - if !ValidHostLabel(label) { - paramErrs.Add(request.NewErrParamFormat( - "endpoint host label", "[a-zA-Z0-9-]{1,63}", label)) - } - } - - if len(host) > 255 { - paramErrs.Add(request.NewErrParamMaxLen( - "endpoint host", 255, host, - )) - } - - if paramErrs.Len() > 0 { - return paramErrs - } - return nil -} - -// ValidHostLabel returns if the label is a valid RFC 3986 host label. -func ValidHostLabel(label string) bool { - if l := len(label); l == 0 || l > 63 { - return false - } - for _, r := range label { - switch { - case r >= '0' && r <= '9': - case r >= 'A' && r <= 'Z': - case r >= 'a' && r <= 'z': - case r == '-': - default: - return false - } - } - - return true -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -package protocol - -import ( - "strings" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" -) - -// HostPrefixHandlerName is the handler name for the host prefix request -// handler. -const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler" - -// NewHostPrefixHandler constructs a build handler -func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler { - builder := HostPrefixBuilder{ - Prefix: prefix, - LabelsFn: labelsFn, - } - - return request.NamedHandler{ - Name: HostPrefixHandlerName, - Fn: builder.Build, - } -} - -// HostPrefixBuilder provides the request handler to expand and prepend -// the host prefix into the operation's request endpoint host. -type HostPrefixBuilder struct { - Prefix string - LabelsFn func() map[string]string -} - -// Build updates the passed in Request with the HostPrefix template expanded. -func (h HostPrefixBuilder) Build(r *request.Request) { - if aws.BoolValue(r.Config.DisableEndpointHostPrefix) { - return - } - - var labels map[string]string - if h.LabelsFn != nil { - labels = h.LabelsFn() - } - - prefix := h.Prefix - for name, value := range labels { - prefix = strings.Replace(prefix, "{"+name+"}", value, -1) - } - - r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host - if len(r.HTTPRequest.Host) > 0 { - r.HTTPRequest.Host = prefix + r.HTTPRequest.Host - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -package protocol - -import ( - "crypto/rand" - "fmt" - "reflect" -) - -// RandReader is the random reader the protocol package will use to read -// random bytes from. This is exported for testing, and should not be used. -var RandReader = rand.Reader - -const idempotencyTokenFillTag = `idempotencyToken` - -// CanSetIdempotencyToken returns true if the struct field should be -// automatically populated with a Idempotency token. -// -// Only *string and string type fields that are tagged with idempotencyToken -// which are not already set can be auto filled. -func CanSetIdempotencyToken(v reflect.Value, f reflect.StructField) bool { - switch u := v.Interface().(type) { - // To auto fill an Idempotency token the field must be a string, - // tagged for auto fill, and have a zero value. - case *string: - return u == nil && len(f.Tag.Get(idempotencyTokenFillTag)) != 0 - case string: - return len(u) == 0 && len(f.Tag.Get(idempotencyTokenFillTag)) != 0 - } - - return false -} - -// GetIdempotencyToken returns a randomly generated idempotency token. -func GetIdempotencyToken() string { - b := make([]byte, 16) - RandReader.Read(b) - - return UUIDVersion4(b) -} - -// SetIdempotencyToken will set the value provided with a Idempotency Token. -// Given that the value can be set. Will panic if value is not setable. -func SetIdempotencyToken(v reflect.Value) { - if v.Kind() == reflect.Ptr { - if v.IsNil() && v.CanSet() { - v.Set(reflect.New(v.Type().Elem())) - } - v = v.Elem() - } - v = reflect.Indirect(v) - - if !v.CanSet() { - panic(fmt.Sprintf("unable to set idempotnecy token %v", v)) - } - - b := make([]byte, 16) - _, err := rand.Read(b) - if err != nil { - // TODO handle error - return - } - - v.Set(reflect.ValueOf(UUIDVersion4(b))) -} - -// UUIDVersion4 returns a Version 4 random UUID from the byte slice provided -func UUIDVersion4(u []byte) string { - // https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 - // 13th character is "4" - u[6] = (u[6] | 0x40) & 0x4F - // 17th character is "8", "9", "a", or "b" - u[8] = (u[8] | 0x80) & 0xBF - - return fmt.Sprintf(`%X-%X-%X-%X-%X`, u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,296 +0,0 @@ -// Package jsonutil provides JSON serialization of AWS requests and responses. -package jsonutil - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/private/protocol" -) - -var timeType = reflect.ValueOf(time.Time{}).Type() -var byteSliceType = reflect.ValueOf([]byte{}).Type() - -// BuildJSON builds a JSON string for a given object v. -func BuildJSON(v interface{}) ([]byte, error) { - var buf bytes.Buffer - - err := buildAny(reflect.ValueOf(v), &buf, "") - return buf.Bytes(), err -} - -func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { - origVal := value - value = reflect.Indirect(value) - if !value.IsValid() { - return nil - } - - vtype := value.Type() - - t := tag.Get("type") - if t == "" { - switch vtype.Kind() { - case reflect.Struct: - // also it can't be a time object - if value.Type() != timeType { - t = "structure" - } - case reflect.Slice: - // also it can't be a byte slice - if _, ok := value.Interface().([]byte); !ok { - t = "list" - } - case reflect.Map: - // cannot be a JSONValue map - if _, ok := value.Interface().(aws.JSONValue); !ok { - t = "map" - } - } - } - - switch t { - case "structure": - if field, ok := vtype.FieldByName("_"); ok { - tag = field.Tag - } - return buildStruct(value, buf, tag) - case "list": - return buildList(value, buf, tag) - case "map": - return buildMap(value, buf, tag) - default: - return buildScalar(origVal, buf, tag) - } -} - -func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { - if !value.IsValid() { - return nil - } - - // unwrap payloads - if payload := tag.Get("payload"); payload != "" { - field, _ := value.Type().FieldByName(payload) - tag = field.Tag - value = elemOf(value.FieldByName(payload)) - - if !value.IsValid() { - return nil - } - } - - buf.WriteByte('{') - - t := value.Type() - first := true - for i := 0; i < t.NumField(); i++ { - member := value.Field(i) - - // This allocates the most memory. - // Additionally, we cannot skip nil fields due to - // idempotency auto filling. - field := t.Field(i) - - if field.PkgPath != "" { - continue // ignore unexported fields - } - if field.Tag.Get("json") == "-" { - continue - } - if field.Tag.Get("location") != "" { - continue // ignore non-body elements - } - if field.Tag.Get("ignore") != "" { - continue - } - - if protocol.CanSetIdempotencyToken(member, field) { - token := protocol.GetIdempotencyToken() - member = reflect.ValueOf(&token) - } - - if (member.Kind() == reflect.Ptr || member.Kind() == reflect.Slice || member.Kind() == reflect.Map) && member.IsNil() { - continue // ignore unset fields - } - - if first { - first = false - } else { - buf.WriteByte(',') - } - - // figure out what this field is called - name := field.Name - if locName := field.Tag.Get("locationName"); locName != "" { - name = locName - } - - writeString(name, buf) - buf.WriteString(`:`) - - err := buildAny(member, buf, field.Tag) - if err != nil { - return err - } - - } - - buf.WriteString("}") - - return nil -} - -func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { - buf.WriteString("[") - - for i := 0; i < value.Len(); i++ { - buildAny(value.Index(i), buf, "") - - if i < value.Len()-1 { - buf.WriteString(",") - } - } - - buf.WriteString("]") - - return nil -} - -type sortedValues []reflect.Value - -func (sv sortedValues) Len() int { return len(sv) } -func (sv sortedValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] } -func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < sv[j].String() } - -func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { - buf.WriteString("{") - - sv := sortedValues(value.MapKeys()) - sort.Sort(sv) - - for i, k := range sv { - if i > 0 { - buf.WriteByte(',') - } - - writeString(k.String(), buf) - buf.WriteString(`:`) - - buildAny(value.MapIndex(k), buf, "") - } - - buf.WriteString("}") - - return nil -} - -func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { - // prevents allocation on the heap. - scratch := [64]byte{} - switch value := reflect.Indirect(v); value.Kind() { - case reflect.String: - writeString(value.String(), buf) - case reflect.Bool: - if value.Bool() { - buf.WriteString("true") - } else { - buf.WriteString("false") - } - case reflect.Int64: - buf.Write(strconv.AppendInt(scratch[:0], value.Int(), 10)) - case reflect.Float64: - f := value.Float() - if math.IsInf(f, 0) || math.IsNaN(f) { - return &json.UnsupportedValueError{Value: v, Str: strconv.FormatFloat(f, 'f', -1, 64)} - } - buf.Write(strconv.AppendFloat(scratch[:0], f, 'f', -1, 64)) - default: - switch converted := value.Interface().(type) { - case time.Time: - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.UnixTimeFormatName - } - - ts := protocol.FormatTime(format, converted) - if format != protocol.UnixTimeFormatName { - ts = `"` + ts + `"` - } - - buf.WriteString(ts) - case []byte: - if !value.IsNil() { - buf.WriteByte('"') - if len(converted) < 1024 { - // for small buffers, using Encode directly is much faster. - dst := make([]byte, base64.StdEncoding.EncodedLen(len(converted))) - base64.StdEncoding.Encode(dst, converted) - buf.Write(dst) - } else { - // for large buffers, avoid unnecessary extra temporary - // buffer space. - enc := base64.NewEncoder(base64.StdEncoding, buf) - enc.Write(converted) - enc.Close() - } - buf.WriteByte('"') - } - case aws.JSONValue: - str, err := protocol.EncodeJSONValue(converted, protocol.QuotedEscape) - if err != nil { - return fmt.Errorf("unable to encode JSONValue, %v", err) - } - buf.WriteString(str) - default: - return fmt.Errorf("unsupported JSON value %v (%s)", value.Interface(), value.Type()) - } - } - return nil -} - -var hex = "0123456789abcdef" - -func writeString(s string, buf *bytes.Buffer) { - buf.WriteByte('"') - for i := 0; i < len(s); i++ { - if s[i] == '"' { - buf.WriteString(`\"`) - } else if s[i] == '\\' { - buf.WriteString(`\\`) - } else if s[i] == '\b' { - buf.WriteString(`\b`) - } else if s[i] == '\f' { - buf.WriteString(`\f`) - } else if s[i] == '\r' { - buf.WriteString(`\r`) - } else if s[i] == '\t' { - buf.WriteString(`\t`) - } else if s[i] == '\n' { - buf.WriteString(`\n`) - } else if s[i] < 32 { - buf.WriteString("\\u00") - buf.WriteByte(hex[s[i]>>4]) - buf.WriteByte(hex[s[i]&0xF]) - } else { - buf.WriteByte(s[i]) - } - } - buf.WriteByte('"') -} - -// Returns the reflection element of a value, if it is a pointer. -func elemOf(value reflect.Value) reflect.Value { - for value.Kind() == reflect.Ptr { - value = value.Elem() - } - return value -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,250 +0,0 @@ -package jsonutil - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "reflect" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/private/protocol" -) - -// UnmarshalJSONError unmarshal's the reader's JSON document into the passed in -// type. The value to unmarshal the json document into must be a pointer to the -// type. -func UnmarshalJSONError(v interface{}, stream io.Reader) error { - var errBuf bytes.Buffer - body := io.TeeReader(stream, &errBuf) - - err := json.NewDecoder(body).Decode(v) - if err != nil { - msg := "failed decoding error message" - if err == io.EOF { - msg = "error message missing" - err = nil - } - return awserr.NewUnmarshalError(err, msg, errBuf.Bytes()) - } - - return nil -} - -// UnmarshalJSON reads a stream and unmarshals the results in object v. -func UnmarshalJSON(v interface{}, stream io.Reader) error { - var out interface{} - - err := json.NewDecoder(stream).Decode(&out) - if err == io.EOF { - return nil - } else if err != nil { - return err - } - - return unmarshalAny(reflect.ValueOf(v), out, "") -} - -func unmarshalAny(value reflect.Value, data interface{}, tag reflect.StructTag) error { - vtype := value.Type() - if vtype.Kind() == reflect.Ptr { - vtype = vtype.Elem() // check kind of actual element type - } - - t := tag.Get("type") - if t == "" { - switch vtype.Kind() { - case reflect.Struct: - // also it can't be a time object - if _, ok := value.Interface().(*time.Time); !ok { - t = "structure" - } - case reflect.Slice: - // also it can't be a byte slice - if _, ok := value.Interface().([]byte); !ok { - t = "list" - } - case reflect.Map: - // cannot be a JSONValue map - if _, ok := value.Interface().(aws.JSONValue); !ok { - t = "map" - } - } - } - - switch t { - case "structure": - if field, ok := vtype.FieldByName("_"); ok { - tag = field.Tag - } - return unmarshalStruct(value, data, tag) - case "list": - return unmarshalList(value, data, tag) - case "map": - return unmarshalMap(value, data, tag) - default: - return unmarshalScalar(value, data, tag) - } -} - -func unmarshalStruct(value reflect.Value, data interface{}, tag reflect.StructTag) error { - if data == nil { - return nil - } - mapData, ok := data.(map[string]interface{}) - if !ok { - return fmt.Errorf("JSON value is not a structure (%#v)", data) - } - - t := value.Type() - if value.Kind() == reflect.Ptr { - if value.IsNil() { // create the structure if it's nil - s := reflect.New(value.Type().Elem()) - value.Set(s) - value = s - } - - value = value.Elem() - t = t.Elem() - } - - // unwrap any payloads - if payload := tag.Get("payload"); payload != "" { - field, _ := t.FieldByName(payload) - return unmarshalAny(value.FieldByName(payload), data, field.Tag) - } - - for i := 0; i < t.NumField(); i++ { - field := t.Field(i) - if field.PkgPath != "" { - continue // ignore unexported fields - } - - // figure out what this field is called - name := field.Name - if locName := field.Tag.Get("locationName"); locName != "" { - name = locName - } - - member := value.FieldByIndex(field.Index) - err := unmarshalAny(member, mapData[name], field.Tag) - if err != nil { - return err - } - } - return nil -} - -func unmarshalList(value reflect.Value, data interface{}, tag reflect.StructTag) error { - if data == nil { - return nil - } - listData, ok := data.([]interface{}) - if !ok { - return fmt.Errorf("JSON value is not a list (%#v)", data) - } - - if value.IsNil() { - l := len(listData) - value.Set(reflect.MakeSlice(value.Type(), l, l)) - } - - for i, c := range listData { - err := unmarshalAny(value.Index(i), c, "") - if err != nil { - return err - } - } - - return nil -} - -func unmarshalMap(value reflect.Value, data interface{}, tag reflect.StructTag) error { - if data == nil { - return nil - } - mapData, ok := data.(map[string]interface{}) - if !ok { - return fmt.Errorf("JSON value is not a map (%#v)", data) - } - - if value.IsNil() { - value.Set(reflect.MakeMap(value.Type())) - } - - for k, v := range mapData { - kvalue := reflect.ValueOf(k) - vvalue := reflect.New(value.Type().Elem()).Elem() - - unmarshalAny(vvalue, v, "") - value.SetMapIndex(kvalue, vvalue) - } - - return nil -} - -func unmarshalScalar(value reflect.Value, data interface{}, tag reflect.StructTag) error { - - switch d := data.(type) { - case nil: - return nil // nothing to do here - case string: - switch value.Interface().(type) { - case *string: - value.Set(reflect.ValueOf(&d)) - case []byte: - b, err := base64.StdEncoding.DecodeString(d) - if err != nil { - return err - } - value.Set(reflect.ValueOf(b)) - case *time.Time: - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.ISO8601TimeFormatName - } - - t, err := protocol.ParseTime(format, d) - if err != nil { - return err - } - value.Set(reflect.ValueOf(&t)) - case aws.JSONValue: - // No need to use escaping as the value is a non-quoted string. - v, err := protocol.DecodeJSONValue(d, protocol.NoEscape) - if err != nil { - return err - } - value.Set(reflect.ValueOf(v)) - default: - return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) - } - case float64: - switch value.Interface().(type) { - case *int64: - di := int64(d) - value.Set(reflect.ValueOf(&di)) - case *float64: - value.Set(reflect.ValueOf(&d)) - case *time.Time: - // Time unmarshaled from a float64 can only be epoch seconds - t := time.Unix(int64(d), 0).UTC() - value.Set(reflect.ValueOf(&t)) - default: - return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) - } - case bool: - switch value.Interface().(type) { - case *bool: - value.Set(reflect.ValueOf(&d)) - default: - return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) - } - default: - return fmt.Errorf("unsupported JSON value (%v)", data) - } - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -// Package jsonrpc provides JSON RPC utilities for serialization of AWS -// requests and responses. -package jsonrpc - -//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/json.json build_test.go -//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/json.json unmarshal_test.go - -import ( - "strings" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" - "github.com/aws/aws-sdk-go/private/protocol/rest" -) - -var emptyJSON = []byte("{}") - -// BuildHandler is a named request handler for building jsonrpc protocol requests -var BuildHandler = request.NamedHandler{Name: "awssdk.jsonrpc.Build", Fn: Build} - -// UnmarshalHandler is a named request handler for unmarshaling jsonrpc protocol requests -var UnmarshalHandler = request.NamedHandler{Name: "awssdk.jsonrpc.Unmarshal", Fn: Unmarshal} - -// UnmarshalMetaHandler is a named request handler for unmarshaling jsonrpc protocol request metadata -var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.jsonrpc.UnmarshalMeta", Fn: UnmarshalMeta} - -// UnmarshalErrorHandler is a named request handler for unmarshaling jsonrpc protocol request errors -var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.jsonrpc.UnmarshalError", Fn: UnmarshalError} - -// Build builds a JSON payload for a JSON RPC request. -func Build(req *request.Request) { - var buf []byte - var err error - if req.ParamsFilled() { - buf, err = jsonutil.BuildJSON(req.Params) - if err != nil { - req.Error = awserr.New(request.ErrCodeSerialization, "failed encoding JSON RPC request", err) - return - } - } else { - buf = emptyJSON - } - - if req.ClientInfo.TargetPrefix != "" || string(buf) != "{}" { - req.SetBufferBody(buf) - } - - if req.ClientInfo.TargetPrefix != "" { - target := req.ClientInfo.TargetPrefix + "." + req.Operation.Name - req.HTTPRequest.Header.Add("X-Amz-Target", target) - } - - // Only set the content type if one is not already specified and an - // JSONVersion is specified. - if ct, v := req.HTTPRequest.Header.Get("Content-Type"), req.ClientInfo.JSONVersion; len(ct) == 0 && len(v) != 0 { - jsonVersion := req.ClientInfo.JSONVersion - req.HTTPRequest.Header.Set("Content-Type", "application/x-amz-json-"+jsonVersion) - } -} - -// Unmarshal unmarshals a response for a JSON RPC service. -func Unmarshal(req *request.Request) { - defer req.HTTPResponse.Body.Close() - if req.DataFilled() { - err := jsonutil.UnmarshalJSON(req.Data, req.HTTPResponse.Body) - if err != nil { - req.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, "failed decoding JSON RPC response", err), - req.HTTPResponse.StatusCode, - req.RequestID, - ) - } - } - return -} - -// UnmarshalMeta unmarshals headers from a response for a JSON RPC service. -func UnmarshalMeta(req *request.Request) { - rest.UnmarshalMeta(req) -} - -// UnmarshalError unmarshals an error response for a JSON RPC service. -func UnmarshalError(req *request.Request) { - defer req.HTTPResponse.Body.Close() - - var jsonErr jsonErrorResponse - err := jsonutil.UnmarshalJSONError(&jsonErr, req.HTTPResponse.Body) - if err != nil { - req.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, - "failed to unmarshal error message", err), - req.HTTPResponse.StatusCode, - req.RequestID, - ) - return - } - - codes := strings.SplitN(jsonErr.Code, "#", 2) - req.Error = awserr.NewRequestFailure( - awserr.New(codes[len(codes)-1], jsonErr.Message, nil), - req.HTTPResponse.StatusCode, - req.RequestID, - ) -} - -type jsonErrorResponse struct { - Code string `json:"__type"` - Message string `json:"message"` -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -package protocol - -import ( - "encoding/base64" - "encoding/json" - "fmt" - "strconv" - - "github.com/aws/aws-sdk-go/aws" -) - -// EscapeMode is the mode that should be use for escaping a value -type EscapeMode uint - -// The modes for escaping a value before it is marshaled, and unmarshaled. -const ( - NoEscape EscapeMode = iota - Base64Escape - QuotedEscape -) - -// EncodeJSONValue marshals the value into a JSON string, and optionally base64 -// encodes the string before returning it. -// -// Will panic if the escape mode is unknown. -func EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) { - b, err := json.Marshal(v) - if err != nil { - return "", err - } - - switch escape { - case NoEscape: - return string(b), nil - case Base64Escape: - return base64.StdEncoding.EncodeToString(b), nil - case QuotedEscape: - return strconv.Quote(string(b)), nil - } - - panic(fmt.Sprintf("EncodeJSONValue called with unknown EscapeMode, %v", escape)) -} - -// DecodeJSONValue will attempt to decode the string input as a JSONValue. -// Optionally decoding base64 the value first before JSON unmarshaling. -// -// Will panic if the escape mode is unknown. -func DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) { - var b []byte - var err error - - switch escape { - case NoEscape: - b = []byte(v) - case Base64Escape: - b, err = base64.StdEncoding.DecodeString(v) - case QuotedEscape: - var u string - u, err = strconv.Unquote(v) - b = []byte(u) - default: - panic(fmt.Sprintf("DecodeJSONValue called with unknown EscapeMode, %v", escape)) - } - - if err != nil { - return nil, err - } - - m := aws.JSONValue{} - err = json.Unmarshal(b, &m) - if err != nil { - return nil, err - } - - return m, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -package protocol - -import ( - "io" - "io/ioutil" - "net/http" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/request" -) - -// PayloadUnmarshaler provides the interface for unmarshaling a payload's -// reader into a SDK shape. -type PayloadUnmarshaler interface { - UnmarshalPayload(io.Reader, interface{}) error -} - -// HandlerPayloadUnmarshal implements the PayloadUnmarshaler from a -// HandlerList. This provides the support for unmarshaling a payload reader to -// a shape without needing a SDK request first. -type HandlerPayloadUnmarshal struct { - Unmarshalers request.HandlerList -} - -// UnmarshalPayload unmarshals the io.Reader payload into the SDK shape using -// the Unmarshalers HandlerList provided. Returns an error if unable -// unmarshaling fails. -func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v interface{}) error { - req := &request.Request{ - HTTPRequest: &http.Request{}, - HTTPResponse: &http.Response{ - StatusCode: 200, - Header: http.Header{}, - Body: ioutil.NopCloser(r), - }, - Data: v, - } - - h.Unmarshalers.Run(req) - - return req.Error -} - -// PayloadMarshaler provides the interface for marshaling a SDK shape into and -// io.Writer. -type PayloadMarshaler interface { - MarshalPayload(io.Writer, interface{}) error -} - -// HandlerPayloadMarshal implements the PayloadMarshaler from a HandlerList. -// This provides support for marshaling a SDK shape into an io.Writer without -// needing a SDK request first. -type HandlerPayloadMarshal struct { - Marshalers request.HandlerList -} - -// MarshalPayload marshals the SDK shape into the io.Writer using the -// Marshalers HandlerList provided. Returns an error if unable if marshal -// fails. -func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface{}) error { - req := request.New( - aws.Config{}, - metadata.ClientInfo{}, - request.Handlers{}, - nil, - &request.Operation{HTTPMethod: "GET"}, - v, - nil, - ) - - h.Marshalers.Run(req) - - if req.Error != nil { - return req.Error - } - - io.Copy(w, req.GetBody()) - - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -// Package query provides serialization of AWS query requests, and responses. -package query - -//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/query.json build_test.go - -import ( - "net/url" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/query/queryutil" -) - -// BuildHandler is a named request handler for building query protocol requests -var BuildHandler = request.NamedHandler{Name: "awssdk.query.Build", Fn: Build} - -// Build builds a request for an AWS Query service. -func Build(r *request.Request) { - body := url.Values{ - "Action": {r.Operation.Name}, - "Version": {r.ClientInfo.APIVersion}, - } - if err := queryutil.Parse(body, r.Params, false); err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, "failed encoding Query request", err) - return - } - - if !r.IsPresigned() { - r.HTTPRequest.Method = "POST" - r.HTTPRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") - r.SetBufferBody([]byte(body.Encode())) - } else { // This is a pre-signed request - r.HTTPRequest.Method = "GET" - r.HTTPRequest.URL.RawQuery = body.Encode() - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,246 +0,0 @@ -package queryutil - -import ( - "encoding/base64" - "fmt" - "net/url" - "reflect" - "sort" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/private/protocol" -) - -// Parse parses an object i and fills a url.Values object. The isEC2 flag -// indicates if this is the EC2 Query sub-protocol. -func Parse(body url.Values, i interface{}, isEC2 bool) error { - q := queryParser{isEC2: isEC2} - return q.parseValue(body, reflect.ValueOf(i), "", "") -} - -func elemOf(value reflect.Value) reflect.Value { - for value.Kind() == reflect.Ptr { - value = value.Elem() - } - return value -} - -type queryParser struct { - isEC2 bool -} - -func (q *queryParser) parseValue(v url.Values, value reflect.Value, prefix string, tag reflect.StructTag) error { - value = elemOf(value) - - // no need to handle zero values - if !value.IsValid() { - return nil - } - - t := tag.Get("type") - if t == "" { - switch value.Kind() { - case reflect.Struct: - t = "structure" - case reflect.Slice: - t = "list" - case reflect.Map: - t = "map" - } - } - - switch t { - case "structure": - return q.parseStruct(v, value, prefix) - case "list": - return q.parseList(v, value, prefix, tag) - case "map": - return q.parseMap(v, value, prefix, tag) - default: - return q.parseScalar(v, value, prefix, tag) - } -} - -func (q *queryParser) parseStruct(v url.Values, value reflect.Value, prefix string) error { - if !value.IsValid() { - return nil - } - - t := value.Type() - for i := 0; i < value.NumField(); i++ { - elemValue := elemOf(value.Field(i)) - field := t.Field(i) - - if field.PkgPath != "" { - continue // ignore unexported fields - } - if field.Tag.Get("ignore") != "" { - continue - } - - if protocol.CanSetIdempotencyToken(value.Field(i), field) { - token := protocol.GetIdempotencyToken() - elemValue = reflect.ValueOf(token) - } - - var name string - if q.isEC2 { - name = field.Tag.Get("queryName") - } - if name == "" { - if field.Tag.Get("flattened") != "" && field.Tag.Get("locationNameList") != "" { - name = field.Tag.Get("locationNameList") - } else if locName := field.Tag.Get("locationName"); locName != "" { - name = locName - } - if name != "" && q.isEC2 { - name = strings.ToUpper(name[0:1]) + name[1:] - } - } - if name == "" { - name = field.Name - } - - if prefix != "" { - name = prefix + "." + name - } - - if err := q.parseValue(v, elemValue, name, field.Tag); err != nil { - return err - } - } - return nil -} - -func (q *queryParser) parseList(v url.Values, value reflect.Value, prefix string, tag reflect.StructTag) error { - // If it's empty, generate an empty value - if !value.IsNil() && value.Len() == 0 { - v.Set(prefix, "") - return nil - } - - if _, ok := value.Interface().([]byte); ok { - return q.parseScalar(v, value, prefix, tag) - } - - // check for unflattened list member - if !q.isEC2 && tag.Get("flattened") == "" { - if listName := tag.Get("locationNameList"); listName == "" { - prefix += ".member" - } else { - prefix += "." + listName - } - } - - for i := 0; i < value.Len(); i++ { - slicePrefix := prefix - if slicePrefix == "" { - slicePrefix = strconv.Itoa(i + 1) - } else { - slicePrefix = slicePrefix + "." + strconv.Itoa(i+1) - } - if err := q.parseValue(v, value.Index(i), slicePrefix, ""); err != nil { - return err - } - } - return nil -} - -func (q *queryParser) parseMap(v url.Values, value reflect.Value, prefix string, tag reflect.StructTag) error { - // If it's empty, generate an empty value - if !value.IsNil() && value.Len() == 0 { - v.Set(prefix, "") - return nil - } - - // check for unflattened list member - if !q.isEC2 && tag.Get("flattened") == "" { - prefix += ".entry" - } - - // sort keys for improved serialization consistency. - // this is not strictly necessary for protocol support. - mapKeyValues := value.MapKeys() - mapKeys := map[string]reflect.Value{} - mapKeyNames := make([]string, len(mapKeyValues)) - for i, mapKey := range mapKeyValues { - name := mapKey.String() - mapKeys[name] = mapKey - mapKeyNames[i] = name - } - sort.Strings(mapKeyNames) - - for i, mapKeyName := range mapKeyNames { - mapKey := mapKeys[mapKeyName] - mapValue := value.MapIndex(mapKey) - - kname := tag.Get("locationNameKey") - if kname == "" { - kname = "key" - } - vname := tag.Get("locationNameValue") - if vname == "" { - vname = "value" - } - - // serialize key - var keyName string - if prefix == "" { - keyName = strconv.Itoa(i+1) + "." + kname - } else { - keyName = prefix + "." + strconv.Itoa(i+1) + "." + kname - } - - if err := q.parseValue(v, mapKey, keyName, ""); err != nil { - return err - } - - // serialize value - var valueName string - if prefix == "" { - valueName = strconv.Itoa(i+1) + "." + vname - } else { - valueName = prefix + "." + strconv.Itoa(i+1) + "." + vname - } - - if err := q.parseValue(v, mapValue, valueName, ""); err != nil { - return err - } - } - - return nil -} - -func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name string, tag reflect.StructTag) error { - switch value := r.Interface().(type) { - case string: - v.Set(name, value) - case []byte: - if !r.IsNil() { - v.Set(name, base64.StdEncoding.EncodeToString(value)) - } - case bool: - v.Set(name, strconv.FormatBool(value)) - case int64: - v.Set(name, strconv.FormatInt(value, 10)) - case int: - v.Set(name, strconv.Itoa(value)) - case float64: - v.Set(name, strconv.FormatFloat(value, 'f', -1, 64)) - case float32: - v.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32)) - case time.Time: - const ISO8601UTC = "2006-01-02T15:04:05Z" - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.ISO8601TimeFormatName - } - - v.Set(name, protocol.FormatTime(format, value)) - default: - return fmt.Errorf("unsupported value for param %s: %v (%s)", name, r.Interface(), r.Type().Name()) - } - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -package query - -import ( - "encoding/xml" - "fmt" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" -) - -// UnmarshalErrorHandler is a name request handler to unmarshal request errors -var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalError", Fn: UnmarshalError} - -type xmlErrorResponse struct { - Code string `xml:"Error>Code"` - Message string `xml:"Error>Message"` - RequestID string `xml:"RequestId"` -} - -type xmlResponseError struct { - xmlErrorResponse -} - -func (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - const svcUnavailableTagName = "ServiceUnavailableException" - const errorResponseTagName = "ErrorResponse" - - switch start.Name.Local { - case svcUnavailableTagName: - e.Code = svcUnavailableTagName - e.Message = "service is unavailable" - return d.Skip() - - case errorResponseTagName: - return d.DecodeElement(&e.xmlErrorResponse, &start) - - default: - return fmt.Errorf("unknown error response tag, %v", start) - } -} - -// UnmarshalError unmarshals an error response for an AWS Query service. -func UnmarshalError(r *request.Request) { - defer r.HTTPResponse.Body.Close() - - var respErr xmlResponseError - err := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, - "failed to unmarshal error message", err), - r.HTTPResponse.StatusCode, - r.RequestID, - ) - return - } - - reqID := respErr.RequestID - if len(reqID) == 0 { - reqID = r.RequestID - } - - r.Error = awserr.NewRequestFailure( - awserr.New(respErr.Code, respErr.Message, nil), - r.HTTPResponse.StatusCode, - reqID, - ) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -package query - -//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/query.json unmarshal_test.go - -import ( - "encoding/xml" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" -) - -// UnmarshalHandler is a named request handler for unmarshaling query protocol requests -var UnmarshalHandler = request.NamedHandler{Name: "awssdk.query.Unmarshal", Fn: Unmarshal} - -// UnmarshalMetaHandler is a named request handler for unmarshaling query protocol request metadata -var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalMeta", Fn: UnmarshalMeta} - -// Unmarshal unmarshals a response for an AWS Query service. -func Unmarshal(r *request.Request) { - defer r.HTTPResponse.Body.Close() - if r.DataFilled() { - decoder := xml.NewDecoder(r.HTTPResponse.Body) - err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result") - if err != nil { - r.Error = awserr.NewRequestFailure( - awserr.New(request.ErrCodeSerialization, "failed decoding Query response", err), - r.HTTPResponse.StatusCode, - r.RequestID, - ) - return - } - } -} - -// UnmarshalMeta unmarshals header response values for an AWS Query service. -func UnmarshalMeta(r *request.Request) { - r.RequestID = r.HTTPResponse.Header.Get("X-Amzn-Requestid") -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,310 +0,0 @@ -// Package rest provides RESTful serialization of AWS requests and responses. -package rest - -import ( - "bytes" - "encoding/base64" - "fmt" - "io" - "net/http" - "net/url" - "path" - "reflect" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol" -) - -// Whether the byte value can be sent without escaping in AWS URLs -var noEscape [256]bool - -var errValueNotSet = fmt.Errorf("value not set") - -var byteSliceType = reflect.TypeOf([]byte{}) - -func init() { - for i := 0; i < len(noEscape); i++ { - // AWS expects every character except these to be escaped - noEscape[i] = (i >= 'A' && i <= 'Z') || - (i >= 'a' && i <= 'z') || - (i >= '0' && i <= '9') || - i == '-' || - i == '.' || - i == '_' || - i == '~' - } -} - -// BuildHandler is a named request handler for building rest protocol requests -var BuildHandler = request.NamedHandler{Name: "awssdk.rest.Build", Fn: Build} - -// Build builds the REST component of a service request. -func Build(r *request.Request) { - if r.ParamsFilled() { - v := reflect.ValueOf(r.Params).Elem() - buildLocationElements(r, v, false) - buildBody(r, v) - } -} - -// BuildAsGET builds the REST component of a service request with the ability to hoist -// data from the body. -func BuildAsGET(r *request.Request) { - if r.ParamsFilled() { - v := reflect.ValueOf(r.Params).Elem() - buildLocationElements(r, v, true) - buildBody(r, v) - } -} - -func buildLocationElements(r *request.Request, v reflect.Value, buildGETQuery bool) { - query := r.HTTPRequest.URL.Query() - - // Setup the raw path to match the base path pattern. This is needed - // so that when the path is mutated a custom escaped version can be - // stored in RawPath that will be used by the Go client. - r.HTTPRequest.URL.RawPath = r.HTTPRequest.URL.Path - - for i := 0; i < v.NumField(); i++ { - m := v.Field(i) - if n := v.Type().Field(i).Name; n[0:1] == strings.ToLower(n[0:1]) { - continue - } - - if m.IsValid() { - field := v.Type().Field(i) - name := field.Tag.Get("locationName") - if name == "" { - name = field.Name - } - if kind := m.Kind(); kind == reflect.Ptr { - m = m.Elem() - } else if kind == reflect.Interface { - if !m.Elem().IsValid() { - continue - } - } - if !m.IsValid() { - continue - } - if field.Tag.Get("ignore") != "" { - continue - } - - // Support the ability to customize values to be marshaled as a - // blob even though they were modeled as a string. Required for S3 - // API operations like SSECustomerKey is modeled as stirng but - // required to be base64 encoded in request. - if field.Tag.Get("marshal-as") == "blob" { - m = m.Convert(byteSliceType) - } - - var err error - switch field.Tag.Get("location") { - case "headers": // header maps - err = buildHeaderMap(&r.HTTPRequest.Header, m, field.Tag) - case "header": - err = buildHeader(&r.HTTPRequest.Header, m, name, field.Tag) - case "uri": - err = buildURI(r.HTTPRequest.URL, m, name, field.Tag) - case "querystring": - err = buildQueryString(query, m, name, field.Tag) - default: - if buildGETQuery { - err = buildQueryString(query, m, name, field.Tag) - } - } - r.Error = err - } - if r.Error != nil { - return - } - } - - r.HTTPRequest.URL.RawQuery = query.Encode() - if !aws.BoolValue(r.Config.DisableRestProtocolURICleaning) { - cleanPath(r.HTTPRequest.URL) - } -} - -func buildBody(r *request.Request, v reflect.Value) { - if field, ok := v.Type().FieldByName("_"); ok { - if payloadName := field.Tag.Get("payload"); payloadName != "" { - pfield, _ := v.Type().FieldByName(payloadName) - if ptag := pfield.Tag.Get("type"); ptag != "" && ptag != "structure" { - payload := reflect.Indirect(v.FieldByName(payloadName)) - if payload.IsValid() && payload.Interface() != nil { - switch reader := payload.Interface().(type) { - case io.ReadSeeker: - r.SetReaderBody(reader) - case []byte: - r.SetBufferBody(reader) - case string: - r.SetStringBody(reader) - default: - r.Error = awserr.New(request.ErrCodeSerialization, - "failed to encode REST request", - fmt.Errorf("unknown payload type %s", payload.Type())) - } - } - } - } - } -} - -func buildHeader(header *http.Header, v reflect.Value, name string, tag reflect.StructTag) error { - str, err := convertType(v, tag) - if err == errValueNotSet { - return nil - } else if err != nil { - return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) - } - - name = strings.TrimSpace(name) - str = strings.TrimSpace(str) - - header.Add(name, str) - - return nil -} - -func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.StructTag) error { - prefix := tag.Get("locationName") - for _, key := range v.MapKeys() { - str, err := convertType(v.MapIndex(key), tag) - if err == errValueNotSet { - continue - } else if err != nil { - return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) - - } - keyStr := strings.TrimSpace(key.String()) - str = strings.TrimSpace(str) - - header.Add(prefix+keyStr, str) - } - return nil -} - -func buildURI(u *url.URL, v reflect.Value, name string, tag reflect.StructTag) error { - value, err := convertType(v, tag) - if err == errValueNotSet { - return nil - } else if err != nil { - return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) - } - - u.Path = strings.Replace(u.Path, "{"+name+"}", value, -1) - u.Path = strings.Replace(u.Path, "{"+name+"+}", value, -1) - - u.RawPath = strings.Replace(u.RawPath, "{"+name+"}", EscapePath(value, true), -1) - u.RawPath = strings.Replace(u.RawPath, "{"+name+"+}", EscapePath(value, false), -1) - - return nil -} - -func buildQueryString(query url.Values, v reflect.Value, name string, tag reflect.StructTag) error { - switch value := v.Interface().(type) { - case []*string: - for _, item := range value { - query.Add(name, *item) - } - case map[string]*string: - for key, item := range value { - query.Add(key, *item) - } - case map[string][]*string: - for key, items := range value { - for _, item := range items { - query.Add(key, *item) - } - } - default: - str, err := convertType(v, tag) - if err == errValueNotSet { - return nil - } else if err != nil { - return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) - } - query.Set(name, str) - } - - return nil -} - -func cleanPath(u *url.URL) { - hasSlash := strings.HasSuffix(u.Path, "/") - - // clean up path, removing duplicate `/` - u.Path = path.Clean(u.Path) - u.RawPath = path.Clean(u.RawPath) - - if hasSlash && !strings.HasSuffix(u.Path, "/") { - u.Path += "/" - u.RawPath += "/" - } -} - -// EscapePath escapes part of a URL path in Amazon style -func EscapePath(path string, encodeSep bool) string { - var buf bytes.Buffer - for i := 0; i < len(path); i++ { - c := path[i] - if noEscape[c] || (c == '/' && !encodeSep) { - buf.WriteByte(c) - } else { - fmt.Fprintf(&buf, "%%%02X", c) - } - } - return buf.String() -} - -func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error) { - v = reflect.Indirect(v) - if !v.IsValid() { - return "", errValueNotSet - } - - switch value := v.Interface().(type) { - case string: - str = value - case []byte: - str = base64.StdEncoding.EncodeToString(value) - case bool: - str = strconv.FormatBool(value) - case int64: - str = strconv.FormatInt(value, 10) - case float64: - str = strconv.FormatFloat(value, 'f', -1, 64) - case time.Time: - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.RFC822TimeFormatName - if tag.Get("location") == "querystring" { - format = protocol.ISO8601TimeFormatName - } - } - str = protocol.FormatTime(format, value) - case aws.JSONValue: - if len(value) == 0 { - return "", errValueNotSet - } - escaping := protocol.NoEscape - if tag.Get("location") == "header" { - escaping = protocol.Base64Escape - } - str, err = protocol.EncodeJSONValue(value, escaping) - if err != nil { - return "", fmt.Errorf("unable to encode JSONValue, %v", err) - } - default: - err := fmt.Errorf("unsupported value for param %v (%s)", v.Interface(), v.Type()) - return "", err - } - return str, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -package rest - -import "reflect" - -// PayloadMember returns the payload field member of i if there is one, or nil. -func PayloadMember(i interface{}) interface{} { - if i == nil { - return nil - } - - v := reflect.ValueOf(i).Elem() - if !v.IsValid() { - return nil - } - if field, ok := v.Type().FieldByName("_"); ok { - if payloadName := field.Tag.Get("payload"); payloadName != "" { - field, _ := v.Type().FieldByName(payloadName) - if field.Tag.Get("type") != "structure" { - return nil - } - - payload := v.FieldByName(payloadName) - if payload.IsValid() || (payload.Kind() == reflect.Ptr && !payload.IsNil()) { - return payload.Interface() - } - } - } - return nil -} - -// PayloadType returns the type of a payload field member of i if there is one, or "". -func PayloadType(i interface{}) string { - v := reflect.Indirect(reflect.ValueOf(i)) - if !v.IsValid() { - return "" - } - if field, ok := v.Type().FieldByName("_"); ok { - if payloadName := field.Tag.Get("payload"); payloadName != "" { - if member, ok := v.Type().FieldByName(payloadName); ok { - return member.Tag.Get("type") - } - } - } - return "" -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -package rest - -import ( - "bytes" - "encoding/base64" - "fmt" - "io" - "io/ioutil" - "net/http" - "reflect" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol" -) - -// UnmarshalHandler is a named request handler for unmarshaling rest protocol requests -var UnmarshalHandler = request.NamedHandler{Name: "awssdk.rest.Unmarshal", Fn: Unmarshal} - -// UnmarshalMetaHandler is a named request handler for unmarshaling rest protocol request metadata -var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.rest.UnmarshalMeta", Fn: UnmarshalMeta} - -// Unmarshal unmarshals the REST component of a response in a REST service. -func Unmarshal(r *request.Request) { - if r.DataFilled() { - v := reflect.Indirect(reflect.ValueOf(r.Data)) - unmarshalBody(r, v) - } -} - -// UnmarshalMeta unmarshals the REST metadata of a response in a REST service -func UnmarshalMeta(r *request.Request) { - r.RequestID = r.HTTPResponse.Header.Get("X-Amzn-Requestid") - if r.RequestID == "" { - // Alternative version of request id in the header - r.RequestID = r.HTTPResponse.Header.Get("X-Amz-Request-Id") - } - if r.DataFilled() { - v := reflect.Indirect(reflect.ValueOf(r.Data)) - unmarshalLocationElements(r, v) - } -} - -func unmarshalBody(r *request.Request, v reflect.Value) { - if field, ok := v.Type().FieldByName("_"); ok { - if payloadName := field.Tag.Get("payload"); payloadName != "" { - pfield, _ := v.Type().FieldByName(payloadName) - if ptag := pfield.Tag.Get("type"); ptag != "" && ptag != "structure" { - payload := v.FieldByName(payloadName) - if payload.IsValid() { - switch payload.Interface().(type) { - case []byte: - defer r.HTTPResponse.Body.Close() - b, err := ioutil.ReadAll(r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) - } else { - payload.Set(reflect.ValueOf(b)) - } - case *string: - defer r.HTTPResponse.Body.Close() - b, err := ioutil.ReadAll(r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) - } else { - str := string(b) - payload.Set(reflect.ValueOf(&str)) - } - default: - switch payload.Type().String() { - case "io.ReadCloser": - payload.Set(reflect.ValueOf(r.HTTPResponse.Body)) - case "io.ReadSeeker": - b, err := ioutil.ReadAll(r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, - "failed to read response body", err) - return - } - payload.Set(reflect.ValueOf(ioutil.NopCloser(bytes.NewReader(b)))) - default: - io.Copy(ioutil.Discard, r.HTTPResponse.Body) - defer r.HTTPResponse.Body.Close() - r.Error = awserr.New(request.ErrCodeSerialization, - "failed to decode REST response", - fmt.Errorf("unknown payload type %s", payload.Type())) - } - } - } - } - } - } -} - -func unmarshalLocationElements(r *request.Request, v reflect.Value) { - for i := 0; i < v.NumField(); i++ { - m, field := v.Field(i), v.Type().Field(i) - if n := field.Name; n[0:1] == strings.ToLower(n[0:1]) { - continue - } - - if m.IsValid() { - name := field.Tag.Get("locationName") - if name == "" { - name = field.Name - } - - switch field.Tag.Get("location") { - case "statusCode": - unmarshalStatusCode(m, r.HTTPResponse.StatusCode) - case "header": - err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name), field.Tag) - if err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) - break - } - case "headers": - prefix := field.Tag.Get("locationName") - err := unmarshalHeaderMap(m, r.HTTPResponse.Header, prefix) - if err != nil { - r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) - break - } - } - } - if r.Error != nil { - return - } - } -} - -func unmarshalStatusCode(v reflect.Value, statusCode int) { - if !v.IsValid() { - return - } - - switch v.Interface().(type) { - case *int64: - s := int64(statusCode) - v.Set(reflect.ValueOf(&s)) - } -} - -func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix string) error { - if len(headers) == 0 { - return nil - } - switch r.Interface().(type) { - case map[string]*string: // we only support string map value types - out := map[string]*string{} - for k, v := range headers { - k = http.CanonicalHeaderKey(k) - if strings.HasPrefix(strings.ToLower(k), strings.ToLower(prefix)) { - out[k[len(prefix):]] = &v[0] - } - } - if len(out) != 0 { - r.Set(reflect.ValueOf(out)) - } - - } - return nil -} - -func unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) error { - switch tag.Get("type") { - case "jsonvalue": - if len(header) == 0 { - return nil - } - case "blob": - if len(header) == 0 { - return nil - } - default: - if !v.IsValid() || (header == "" && v.Elem().Kind() != reflect.String) { - return nil - } - } - - switch v.Interface().(type) { - case *string: - v.Set(reflect.ValueOf(&header)) - case []byte: - b, err := base64.StdEncoding.DecodeString(header) - if err != nil { - return err - } - v.Set(reflect.ValueOf(b)) - case *bool: - b, err := strconv.ParseBool(header) - if err != nil { - return err - } - v.Set(reflect.ValueOf(&b)) - case *int64: - i, err := strconv.ParseInt(header, 10, 64) - if err != nil { - return err - } - v.Set(reflect.ValueOf(&i)) - case *float64: - f, err := strconv.ParseFloat(header, 64) - if err != nil { - return err - } - v.Set(reflect.ValueOf(&f)) - case *time.Time: - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.RFC822TimeFormatName - } - t, err := protocol.ParseTime(format, header) - if err != nil { - return err - } - v.Set(reflect.ValueOf(&t)) - case aws.JSONValue: - escaping := protocol.NoEscape - if tag.Get("location") == "header" { - escaping = protocol.Base64Escape - } - m, err := protocol.DecodeJSONValue(header, escaping) - if err != nil { - return err - } - v.Set(reflect.ValueOf(m)) - default: - err := fmt.Errorf("Unsupported value for param %v (%s)", v.Interface(), v.Type()) - return err - } - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -package protocol - -import ( - "math" - "strconv" - "time" - - "github.com/aws/aws-sdk-go/internal/sdkmath" -) - -// Names of time formats supported by the SDK -const ( - RFC822TimeFormatName = "rfc822" - ISO8601TimeFormatName = "iso8601" - UnixTimeFormatName = "unixTimestamp" -) - -// Time formats supported by the SDK -// Output time is intended to not contain decimals -const ( - // RFC 7231#section-7.1.1.1 timetamp format. e.g Tue, 29 Apr 2014 18:30:38 GMT - RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT" - - // This format is used for output time without seconds precision - RFC822OutputTimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT" - - // RFC3339 a subset of the ISO8601 timestamp format. e.g 2014-04-29T18:30:38Z - ISO8601TimeFormat = "2006-01-02T15:04:05.999999999Z" - - // This format is used for output time without seconds precision - ISO8601OutputTimeFormat = "2006-01-02T15:04:05Z" -) - -// IsKnownTimestampFormat returns if the timestamp format name -// is know to the SDK's protocols. -func IsKnownTimestampFormat(name string) bool { - switch name { - case RFC822TimeFormatName: - fallthrough - case ISO8601TimeFormatName: - fallthrough - case UnixTimeFormatName: - return true - default: - return false - } -} - -// FormatTime returns a string value of the time. -func FormatTime(name string, t time.Time) string { - t = t.UTC() - - switch name { - case RFC822TimeFormatName: - return t.Format(RFC822OutputTimeFormat) - case ISO8601TimeFormatName: - return t.Format(ISO8601OutputTimeFormat) - case UnixTimeFormatName: - return strconv.FormatInt(t.Unix(), 10) - default: - panic("unknown timestamp format name, " + name) - } -} - -// ParseTime attempts to parse the time given the format. Returns -// the time if it was able to be parsed, and fails otherwise. -func ParseTime(formatName, value string) (time.Time, error) { - switch formatName { - case RFC822TimeFormatName: - return time.Parse(RFC822TimeFormat, value) - case ISO8601TimeFormatName: - return time.Parse(ISO8601TimeFormat, value) - case UnixTimeFormatName: - v, err := strconv.ParseFloat(value, 64) - _, dec := math.Modf(v) - dec = sdkmath.Round(dec*1e3) / 1e3 //Rounds 0.1229999 to 0.123 - if err != nil { - return time.Time{}, err - } - return time.Unix(int64(v), int64(dec*(1e9))), nil - default: - panic("unknown timestamp format name, " + formatName) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -package protocol - -import ( - "io" - "io/ioutil" - - "github.com/aws/aws-sdk-go/aws/request" -) - -// UnmarshalDiscardBodyHandler is a named request handler to empty and close a response's body -var UnmarshalDiscardBodyHandler = request.NamedHandler{Name: "awssdk.shared.UnmarshalDiscardBody", Fn: UnmarshalDiscardBody} - -// UnmarshalDiscardBody is a request handler to empty a response's body and closing it. -func UnmarshalDiscardBody(r *request.Request) { - if r.HTTPResponse == nil || r.HTTPResponse.Body == nil { - return - } - - io.Copy(ioutil.Discard, r.HTTPResponse.Body) - r.HTTPResponse.Body.Close() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,306 +0,0 @@ -// Package xmlutil provides XML serialization of AWS requests and responses. -package xmlutil - -import ( - "encoding/base64" - "encoding/xml" - "fmt" - "reflect" - "sort" - "strconv" - "time" - - "github.com/aws/aws-sdk-go/private/protocol" -) - -// BuildXML will serialize params into an xml.Encoder. Error will be returned -// if the serialization of any of the params or nested values fails. -func BuildXML(params interface{}, e *xml.Encoder) error { - return buildXML(params, e, false) -} - -func buildXML(params interface{}, e *xml.Encoder, sorted bool) error { - b := xmlBuilder{encoder: e, namespaces: map[string]string{}} - root := NewXMLElement(xml.Name{}) - if err := b.buildValue(reflect.ValueOf(params), root, ""); err != nil { - return err - } - for _, c := range root.Children { - for _, v := range c { - return StructToXML(e, v, sorted) - } - } - return nil -} - -// Returns the reflection element of a value, if it is a pointer. -func elemOf(value reflect.Value) reflect.Value { - for value.Kind() == reflect.Ptr { - value = value.Elem() - } - return value -} - -// A xmlBuilder serializes values from Go code to XML -type xmlBuilder struct { - encoder *xml.Encoder - namespaces map[string]string -} - -// buildValue generic XMLNode builder for any type. Will build value for their specific type -// struct, list, map, scalar. -// -// Also takes a "type" tag value to set what type a value should be converted to XMLNode as. If -// type is not provided reflect will be used to determine the value's type. -func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { - value = elemOf(value) - if !value.IsValid() { // no need to handle zero values - return nil - } else if tag.Get("location") != "" { // don't handle non-body location values - return nil - } - - t := tag.Get("type") - if t == "" { - switch value.Kind() { - case reflect.Struct: - t = "structure" - case reflect.Slice: - t = "list" - case reflect.Map: - t = "map" - } - } - - switch t { - case "structure": - if field, ok := value.Type().FieldByName("_"); ok { - tag = tag + reflect.StructTag(" ") + field.Tag - } - return b.buildStruct(value, current, tag) - case "list": - return b.buildList(value, current, tag) - case "map": - return b.buildMap(value, current, tag) - default: - return b.buildScalar(value, current, tag) - } -} - -// buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested -// types are converted to XMLNodes also. -func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { - if !value.IsValid() { - return nil - } - - // unwrap payloads - if payload := tag.Get("payload"); payload != "" { - field, _ := value.Type().FieldByName(payload) - tag = field.Tag - value = elemOf(value.FieldByName(payload)) - - if !value.IsValid() { - return nil - } - } - - child := NewXMLElement(xml.Name{Local: tag.Get("locationName")}) - - // there is an xmlNamespace associated with this struct - if prefix, uri := tag.Get("xmlPrefix"), tag.Get("xmlURI"); uri != "" { - ns := xml.Attr{ - Name: xml.Name{Local: "xmlns"}, - Value: uri, - } - if prefix != "" { - b.namespaces[prefix] = uri // register the namespace - ns.Name.Local = "xmlns:" + prefix - } - - child.Attr = append(child.Attr, ns) - } - - var payloadFields, nonPayloadFields int - - t := value.Type() - for i := 0; i < value.NumField(); i++ { - member := elemOf(value.Field(i)) - field := t.Field(i) - - if field.PkgPath != "" { - continue // ignore unexported fields - } - if field.Tag.Get("ignore") != "" { - continue - } - - mTag := field.Tag - if mTag.Get("location") != "" { // skip non-body members - nonPayloadFields++ - continue - } - payloadFields++ - - if protocol.CanSetIdempotencyToken(value.Field(i), field) { - token := protocol.GetIdempotencyToken() - member = reflect.ValueOf(token) - } - - memberName := mTag.Get("locationName") - if memberName == "" { - memberName = field.Name - mTag = reflect.StructTag(string(mTag) + ` locationName:"` + memberName + `"`) - } - if err := b.buildValue(member, child, mTag); err != nil { - return err - } - } - - // Only case where the child shape is not added is if the shape only contains - // non-payload fields, e.g headers/query. - if !(payloadFields == 0 && nonPayloadFields > 0) { - current.AddChild(child) - } - - return nil -} - -// buildList adds the value's list items to the current XMLNode as children nodes. All -// nested values in the list are converted to XMLNodes also. -func (b *xmlBuilder) buildList(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { - if value.IsNil() { // don't build omitted lists - return nil - } - - // check for unflattened list member - flattened := tag.Get("flattened") != "" - - xname := xml.Name{Local: tag.Get("locationName")} - if flattened { - for i := 0; i < value.Len(); i++ { - child := NewXMLElement(xname) - current.AddChild(child) - if err := b.buildValue(value.Index(i), child, ""); err != nil { - return err - } - } - } else { - list := NewXMLElement(xname) - current.AddChild(list) - - for i := 0; i < value.Len(); i++ { - iname := tag.Get("locationNameList") - if iname == "" { - iname = "member" - } - - child := NewXMLElement(xml.Name{Local: iname}) - list.AddChild(child) - if err := b.buildValue(value.Index(i), child, ""); err != nil { - return err - } - } - } - - return nil -} - -// buildMap adds the value's key/value pairs to the current XMLNode as children nodes. All -// nested values in the map are converted to XMLNodes also. -// -// Error will be returned if it is unable to build the map's values into XMLNodes -func (b *xmlBuilder) buildMap(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { - if value.IsNil() { // don't build omitted maps - return nil - } - - maproot := NewXMLElement(xml.Name{Local: tag.Get("locationName")}) - current.AddChild(maproot) - current = maproot - - kname, vname := "key", "value" - if n := tag.Get("locationNameKey"); n != "" { - kname = n - } - if n := tag.Get("locationNameValue"); n != "" { - vname = n - } - - // sorting is not required for compliance, but it makes testing easier - keys := make([]string, value.Len()) - for i, k := range value.MapKeys() { - keys[i] = k.String() - } - sort.Strings(keys) - - for _, k := range keys { - v := value.MapIndex(reflect.ValueOf(k)) - - mapcur := current - if tag.Get("flattened") == "" { // add "entry" tag to non-flat maps - child := NewXMLElement(xml.Name{Local: "entry"}) - mapcur.AddChild(child) - mapcur = child - } - - kchild := NewXMLElement(xml.Name{Local: kname}) - kchild.Text = k - vchild := NewXMLElement(xml.Name{Local: vname}) - mapcur.AddChild(kchild) - mapcur.AddChild(vchild) - - if err := b.buildValue(v, vchild, ""); err != nil { - return err - } - } - - return nil -} - -// buildScalar will convert the value into a string and append it as a attribute or child -// of the current XMLNode. -// -// The value will be added as an attribute if tag contains a "xmlAttribute" attribute value. -// -// Error will be returned if the value type is unsupported. -func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { - var str string - switch converted := value.Interface().(type) { - case string: - str = converted - case []byte: - if !value.IsNil() { - str = base64.StdEncoding.EncodeToString(converted) - } - case bool: - str = strconv.FormatBool(converted) - case int64: - str = strconv.FormatInt(converted, 10) - case int: - str = strconv.Itoa(converted) - case float64: - str = strconv.FormatFloat(converted, 'f', -1, 64) - case float32: - str = strconv.FormatFloat(float64(converted), 'f', -1, 32) - case time.Time: - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.ISO8601TimeFormatName - } - - str = protocol.FormatTime(format, converted) - default: - return fmt.Errorf("unsupported value for param %s: %v (%s)", - tag.Get("locationName"), value.Interface(), value.Type().Name()) - } - - xname := xml.Name{Local: tag.Get("locationName")} - if tag.Get("xmlAttribute") != "" { // put into current node's attribute list - attr := xml.Attr{Name: xname, Value: str} - current.Attr = append(current.Attr, attr) - } else { // regular text node - current.AddChild(&XMLNode{Name: xname, Text: str}) - } - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -package xmlutil - -import ( - "encoding/xml" - "strings" -) - -type xmlAttrSlice []xml.Attr - -func (x xmlAttrSlice) Len() int { - return len(x) -} - -func (x xmlAttrSlice) Less(i, j int) bool { - spaceI, spaceJ := x[i].Name.Space, x[j].Name.Space - localI, localJ := x[i].Name.Local, x[j].Name.Local - valueI, valueJ := x[i].Value, x[j].Value - - spaceCmp := strings.Compare(spaceI, spaceJ) - localCmp := strings.Compare(localI, localJ) - valueCmp := strings.Compare(valueI, valueJ) - - if spaceCmp == -1 || (spaceCmp == 0 && (localCmp == -1 || (localCmp == 0 && valueCmp == -1))) { - return true - } - - return false -} - -func (x xmlAttrSlice) Swap(i, j int) { - x[i], x[j] = x[j], x[i] -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,291 +0,0 @@ -package xmlutil - -import ( - "bytes" - "encoding/base64" - "encoding/xml" - "fmt" - "io" - "reflect" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/private/protocol" -) - -// UnmarshalXMLError unmarshals the XML error from the stream into the value -// type specified. The value must be a pointer. If the message fails to -// unmarshal, the message content will be included in the returned error as a -// awserr.UnmarshalError. -func UnmarshalXMLError(v interface{}, stream io.Reader) error { - var errBuf bytes.Buffer - body := io.TeeReader(stream, &errBuf) - - err := xml.NewDecoder(body).Decode(v) - if err != nil && err != io.EOF { - return awserr.NewUnmarshalError(err, - "failed to unmarshal error message", errBuf.Bytes()) - } - - return nil -} - -// UnmarshalXML deserializes an xml.Decoder into the container v. V -// needs to match the shape of the XML expected to be decoded. -// If the shape doesn't match unmarshaling will fail. -func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error { - n, err := XMLToStruct(d, nil) - if err != nil { - return err - } - if n.Children != nil { - for _, root := range n.Children { - for _, c := range root { - if wrappedChild, ok := c.Children[wrapper]; ok { - c = wrappedChild[0] // pull out wrapped element - } - - err = parse(reflect.ValueOf(v), c, "") - if err != nil { - if err == io.EOF { - return nil - } - return err - } - } - } - return nil - } - return nil -} - -// parse deserializes any value from the XMLNode. The type tag is used to infer the type, or reflect -// will be used to determine the type from r. -func parse(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { - rtype := r.Type() - if rtype.Kind() == reflect.Ptr { - rtype = rtype.Elem() // check kind of actual element type - } - - t := tag.Get("type") - if t == "" { - switch rtype.Kind() { - case reflect.Struct: - // also it can't be a time object - if _, ok := r.Interface().(*time.Time); !ok { - t = "structure" - } - case reflect.Slice: - // also it can't be a byte slice - if _, ok := r.Interface().([]byte); !ok { - t = "list" - } - case reflect.Map: - t = "map" - } - } - - switch t { - case "structure": - if field, ok := rtype.FieldByName("_"); ok { - tag = field.Tag - } - return parseStruct(r, node, tag) - case "list": - return parseList(r, node, tag) - case "map": - return parseMap(r, node, tag) - default: - return parseScalar(r, node, tag) - } -} - -// parseStruct deserializes a structure and its fields from an XMLNode. Any nested -// types in the structure will also be deserialized. -func parseStruct(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { - t := r.Type() - if r.Kind() == reflect.Ptr { - if r.IsNil() { // create the structure if it's nil - s := reflect.New(r.Type().Elem()) - r.Set(s) - r = s - } - - r = r.Elem() - t = t.Elem() - } - - // unwrap any payloads - if payload := tag.Get("payload"); payload != "" { - field, _ := t.FieldByName(payload) - return parseStruct(r.FieldByName(payload), node, field.Tag) - } - - for i := 0; i < t.NumField(); i++ { - field := t.Field(i) - if c := field.Name[0:1]; strings.ToLower(c) == c { - continue // ignore unexported fields - } - - // figure out what this field is called - name := field.Name - if field.Tag.Get("flattened") != "" && field.Tag.Get("locationNameList") != "" { - name = field.Tag.Get("locationNameList") - } else if locName := field.Tag.Get("locationName"); locName != "" { - name = locName - } - - // try to find the field by name in elements - elems := node.Children[name] - - if elems == nil { // try to find the field in attributes - if val, ok := node.findElem(name); ok { - elems = []*XMLNode{{Text: val}} - } - } - - member := r.FieldByName(field.Name) - for _, elem := range elems { - err := parse(member, elem, field.Tag) - if err != nil { - return err - } - } - } - return nil -} - -// parseList deserializes a list of values from an XML node. Each list entry -// will also be deserialized. -func parseList(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { - t := r.Type() - - if tag.Get("flattened") == "" { // look at all item entries - mname := "member" - if name := tag.Get("locationNameList"); name != "" { - mname = name - } - - if Children, ok := node.Children[mname]; ok { - if r.IsNil() { - r.Set(reflect.MakeSlice(t, len(Children), len(Children))) - } - - for i, c := range Children { - err := parse(r.Index(i), c, "") - if err != nil { - return err - } - } - } - } else { // flattened list means this is a single element - if r.IsNil() { - r.Set(reflect.MakeSlice(t, 0, 0)) - } - - childR := reflect.Zero(t.Elem()) - r.Set(reflect.Append(r, childR)) - err := parse(r.Index(r.Len()-1), node, "") - if err != nil { - return err - } - } - - return nil -} - -// parseMap deserializes a map from an XMLNode. The direct children of the XMLNode -// will also be deserialized as map entries. -func parseMap(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { - if r.IsNil() { - r.Set(reflect.MakeMap(r.Type())) - } - - if tag.Get("flattened") == "" { // look at all child entries - for _, entry := range node.Children["entry"] { - parseMapEntry(r, entry, tag) - } - } else { // this element is itself an entry - parseMapEntry(r, node, tag) - } - - return nil -} - -// parseMapEntry deserializes a map entry from a XML node. -func parseMapEntry(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { - kname, vname := "key", "value" - if n := tag.Get("locationNameKey"); n != "" { - kname = n - } - if n := tag.Get("locationNameValue"); n != "" { - vname = n - } - - keys, ok := node.Children[kname] - values := node.Children[vname] - if ok { - for i, key := range keys { - keyR := reflect.ValueOf(key.Text) - value := values[i] - valueR := reflect.New(r.Type().Elem()).Elem() - - parse(valueR, value, "") - r.SetMapIndex(keyR, valueR) - } - } - return nil -} - -// parseScaller deserializes an XMLNode value into a concrete type based on the -// interface type of r. -// -// Error is returned if the deserialization fails due to invalid type conversion, -// or unsupported interface type. -func parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { - switch r.Interface().(type) { - case *string: - r.Set(reflect.ValueOf(&node.Text)) - return nil - case []byte: - b, err := base64.StdEncoding.DecodeString(node.Text) - if err != nil { - return err - } - r.Set(reflect.ValueOf(b)) - case *bool: - v, err := strconv.ParseBool(node.Text) - if err != nil { - return err - } - r.Set(reflect.ValueOf(&v)) - case *int64: - v, err := strconv.ParseInt(node.Text, 10, 64) - if err != nil { - return err - } - r.Set(reflect.ValueOf(&v)) - case *float64: - v, err := strconv.ParseFloat(node.Text, 64) - if err != nil { - return err - } - r.Set(reflect.ValueOf(&v)) - case *time.Time: - format := tag.Get("timestampFormat") - if len(format) == 0 { - format = protocol.ISO8601TimeFormatName - } - - t, err := protocol.ParseTime(format, node.Text) - if err != nil { - return err - } - r.Set(reflect.ValueOf(&t)) - default: - return fmt.Errorf("unsupported value: %v (%s)", r.Interface(), r.Type()) - } - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -package xmlutil - -import ( - "encoding/xml" - "fmt" - "io" - "sort" -) - -// A XMLNode contains the values to be encoded or decoded. -type XMLNode struct { - Name xml.Name `json:",omitempty"` - Children map[string][]*XMLNode `json:",omitempty"` - Text string `json:",omitempty"` - Attr []xml.Attr `json:",omitempty"` - - namespaces map[string]string - parent *XMLNode -} - -// NewXMLElement returns a pointer to a new XMLNode initialized to default values. -func NewXMLElement(name xml.Name) *XMLNode { - return &XMLNode{ - Name: name, - Children: map[string][]*XMLNode{}, - Attr: []xml.Attr{}, - } -} - -// AddChild adds child to the XMLNode. -func (n *XMLNode) AddChild(child *XMLNode) { - child.parent = n - if _, ok := n.Children[child.Name.Local]; !ok { - n.Children[child.Name.Local] = []*XMLNode{} - } - n.Children[child.Name.Local] = append(n.Children[child.Name.Local], child) -} - -// XMLToStruct converts a xml.Decoder stream to XMLNode with nested values. -func XMLToStruct(d *xml.Decoder, s *xml.StartElement) (*XMLNode, error) { - out := &XMLNode{} - for { - tok, err := d.Token() - if err != nil { - if err == io.EOF { - break - } else { - return out, err - } - } - - if tok == nil { - break - } - - switch typed := tok.(type) { - case xml.CharData: - out.Text = string(typed.Copy()) - case xml.StartElement: - el := typed.Copy() - out.Attr = el.Attr - if out.Children == nil { - out.Children = map[string][]*XMLNode{} - } - - name := typed.Name.Local - slice := out.Children[name] - if slice == nil { - slice = []*XMLNode{} - } - node, e := XMLToStruct(d, &el) - out.findNamespaces() - if e != nil { - return out, e - } - node.Name = typed.Name - node.findNamespaces() - tempOut := *out - // Save into a temp variable, simply because out gets squashed during - // loop iterations - node.parent = &tempOut - slice = append(slice, node) - out.Children[name] = slice - case xml.EndElement: - if s != nil && s.Name.Local == typed.Name.Local { // matching end token - return out, nil - } - out = &XMLNode{} - } - } - return out, nil -} - -func (n *XMLNode) findNamespaces() { - ns := map[string]string{} - for _, a := range n.Attr { - if a.Name.Space == "xmlns" { - ns[a.Value] = a.Name.Local - } - } - - n.namespaces = ns -} - -func (n *XMLNode) findElem(name string) (string, bool) { - for node := n; node != nil; node = node.parent { - for _, a := range node.Attr { - namespace := a.Name.Space - if v, ok := node.namespaces[namespace]; ok { - namespace = v - } - if name == fmt.Sprintf("%s:%s", namespace, a.Name.Local) { - return a.Value, true - } - } - } - return "", false -} - -// StructToXML writes an XMLNode to a xml.Encoder as tokens. -func StructToXML(e *xml.Encoder, node *XMLNode, sorted bool) error { - // Sort Attributes - attrs := node.Attr - if sorted { - sortedAttrs := make([]xml.Attr, len(attrs)) - for _, k := range node.Attr { - sortedAttrs = append(sortedAttrs, k) - } - sort.Sort(xmlAttrSlice(sortedAttrs)) - attrs = sortedAttrs - } - - e.EncodeToken(xml.StartElement{Name: node.Name, Attr: attrs}) - - if node.Text != "" { - e.EncodeToken(xml.CharData([]byte(node.Text))) - } else if sorted { - sortedNames := []string{} - for k := range node.Children { - sortedNames = append(sortedNames, k) - } - sort.Strings(sortedNames) - - for _, k := range sortedNames { - for _, v := range node.Children[k] { - StructToXML(e, v, sorted) - } - } - } else { - for _, c := range node.Children { - for _, v := range c { - StructToXML(e, v, sorted) - } - } - } - - e.EncodeToken(xml.EndElement{Name: node.Name}) - return e.Flush() -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/api.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/api.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/api.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/api.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,5005 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package acmpca - -import ( - "fmt" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awsutil" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol" - "github.com/aws/aws-sdk-go/private/protocol/jsonrpc" -) - -const opCreateCertificateAuthority = "CreateCertificateAuthority" - -// CreateCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the CreateCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateCertificateAuthority for more information on using the CreateCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateCertificateAuthorityRequest method. -// req, resp := client.CreateCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/CreateCertificateAuthority -func (c *ACMPCA) CreateCertificateAuthorityRequest(input *CreateCertificateAuthorityInput) (req *request.Request, output *CreateCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opCreateCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateCertificateAuthorityInput{} - } - - output = &CreateCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Creates a root or subordinate private certificate authority (CA). You must -// specify the CA configuration, the certificate revocation list (CRL) configuration, -// the CA type, and an optional idempotency token to avoid accidental creation -// of multiple CAs. The CA configuration specifies the name of the algorithm -// and key size to be used to create the CA private key, the type of signing -// algorithm that the CA uses, and X.500 subject information. The CRL configuration -// specifies the CRL expiration period in days (the validity period of the CRL), -// the Amazon S3 bucket that will contain the CRL, and a CNAME alias for the -// S3 bucket that is included in certificates issued by the CA. If successful, -// this action returns the Amazon Resource Name (ARN) of the CA. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation CreateCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeInvalidArgsException "InvalidArgsException" -// One or more of the specified arguments was not valid. -// -// * ErrCodeInvalidPolicyException "InvalidPolicyException" -// The S3 bucket policy is not valid. The policy must give ACM Private CA rights -// to read from and write to the bucket and find the bucket location. -// -// * ErrCodeInvalidTagException "InvalidTagException" -// The tag associated with the CA is not valid. The invalid argument is contained -// in the message field. -// -// * ErrCodeLimitExceededException "LimitExceededException" -// An ACM Private CA limit has been exceeded. See the exception message returned -// to determine the limit that was exceeded. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/CreateCertificateAuthority -func (c *ACMPCA) CreateCertificateAuthority(input *CreateCertificateAuthorityInput) (*CreateCertificateAuthorityOutput, error) { - req, out := c.CreateCertificateAuthorityRequest(input) - return out, req.Send() -} - -// CreateCertificateAuthorityWithContext is the same as CreateCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See CreateCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) CreateCertificateAuthorityWithContext(ctx aws.Context, input *CreateCertificateAuthorityInput, opts ...request.Option) (*CreateCertificateAuthorityOutput, error) { - req, out := c.CreateCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateCertificateAuthorityAuditReport = "CreateCertificateAuthorityAuditReport" - -// CreateCertificateAuthorityAuditReportRequest generates a "aws/request.Request" representing the -// client's request for the CreateCertificateAuthorityAuditReport operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateCertificateAuthorityAuditReport for more information on using the CreateCertificateAuthorityAuditReport -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateCertificateAuthorityAuditReportRequest method. -// req, resp := client.CreateCertificateAuthorityAuditReportRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/CreateCertificateAuthorityAuditReport -func (c *ACMPCA) CreateCertificateAuthorityAuditReportRequest(input *CreateCertificateAuthorityAuditReportInput) (req *request.Request, output *CreateCertificateAuthorityAuditReportOutput) { - op := &request.Operation{ - Name: opCreateCertificateAuthorityAuditReport, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateCertificateAuthorityAuditReportInput{} - } - - output = &CreateCertificateAuthorityAuditReportOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateCertificateAuthorityAuditReport API operation for AWS Certificate Manager Private Certificate Authority. -// -// Creates an audit report that lists every time that your CA private key is -// used. The report is saved in the Amazon S3 bucket that you specify on input. -// The IssueCertificate and RevokeCertificate actions use the private key. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation CreateCertificateAuthorityAuditReport for usage and error information. -// -// Returned Error Codes: -// * ErrCodeRequestInProgressException "RequestInProgressException" -// Your request is already in progress. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidArgsException "InvalidArgsException" -// One or more of the specified arguments was not valid. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/CreateCertificateAuthorityAuditReport -func (c *ACMPCA) CreateCertificateAuthorityAuditReport(input *CreateCertificateAuthorityAuditReportInput) (*CreateCertificateAuthorityAuditReportOutput, error) { - req, out := c.CreateCertificateAuthorityAuditReportRequest(input) - return out, req.Send() -} - -// CreateCertificateAuthorityAuditReportWithContext is the same as CreateCertificateAuthorityAuditReport with the addition of -// the ability to pass a context and additional request options. -// -// See CreateCertificateAuthorityAuditReport for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) CreateCertificateAuthorityAuditReportWithContext(ctx aws.Context, input *CreateCertificateAuthorityAuditReportInput, opts ...request.Option) (*CreateCertificateAuthorityAuditReportOutput, error) { - req, out := c.CreateCertificateAuthorityAuditReportRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreatePermission = "CreatePermission" - -// CreatePermissionRequest generates a "aws/request.Request" representing the -// client's request for the CreatePermission operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreatePermission for more information on using the CreatePermission -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreatePermissionRequest method. -// req, resp := client.CreatePermissionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/CreatePermission -func (c *ACMPCA) CreatePermissionRequest(input *CreatePermissionInput) (req *request.Request, output *CreatePermissionOutput) { - op := &request.Operation{ - Name: opCreatePermission, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreatePermissionInput{} - } - - output = &CreatePermissionOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CreatePermission API operation for AWS Certificate Manager Private Certificate Authority. -// -// Assigns permissions from a private CA to a designated AWS service. Services -// are specified by their service principals and can be given permission to -// create and retrieve certificates on a private CA. Services can also be given -// permission to list the active permissions that the private CA has granted. -// For ACM to automatically renew your private CA's certificates, you must assign -// all possible permissions from the CA to the ACM service principal. -// -// At this time, you can only assign permissions to ACM (acm.amazonaws.com). -// Permissions can be revoked with the DeletePermission action and listed with -// the ListPermissions action. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation CreatePermission for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodePermissionAlreadyExistsException "PermissionAlreadyExistsException" -// The designated permission has already been given to the user. -// -// * ErrCodeLimitExceededException "LimitExceededException" -// An ACM Private CA limit has been exceeded. See the exception message returned -// to determine the limit that was exceeded. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/CreatePermission -func (c *ACMPCA) CreatePermission(input *CreatePermissionInput) (*CreatePermissionOutput, error) { - req, out := c.CreatePermissionRequest(input) - return out, req.Send() -} - -// CreatePermissionWithContext is the same as CreatePermission with the addition of -// the ability to pass a context and additional request options. -// -// See CreatePermission for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) CreatePermissionWithContext(ctx aws.Context, input *CreatePermissionInput, opts ...request.Option) (*CreatePermissionOutput, error) { - req, out := c.CreatePermissionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteCertificateAuthority = "DeleteCertificateAuthority" - -// DeleteCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the DeleteCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteCertificateAuthority for more information on using the DeleteCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteCertificateAuthorityRequest method. -// req, resp := client.DeleteCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DeleteCertificateAuthority -func (c *ACMPCA) DeleteCertificateAuthorityRequest(input *DeleteCertificateAuthorityInput) (req *request.Request, output *DeleteCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opDeleteCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteCertificateAuthorityInput{} - } - - output = &DeleteCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Deletes a private certificate authority (CA). You must provide the Amazon -// Resource Name (ARN) of the private CA that you want to delete. You can find -// the ARN by calling the ListCertificateAuthorities action. -// -// Deleting a CA will invalidate other CAs and certificates below it in your -// CA hierarchy. -// -// Before you can delete a CA that you have created and activated, you must -// disable it. To do this, call the UpdateCertificateAuthority action and set -// the CertificateAuthorityStatus parameter to DISABLED. -// -// Additionally, you can delete a CA if you are waiting for it to be created -// (that is, the status of the CA is CREATING). You can also delete it if the -// CA has been created but you haven't yet imported the signed certificate into -// ACM Private CA (that is, the status of the CA is PENDING_CERTIFICATE). -// -// When you successfully call DeleteCertificateAuthority, the CA's status changes -// to DELETED. However, the CA won't be permanently deleted until the restoration -// period has passed. By default, if you do not set the PermanentDeletionTimeInDays -// parameter, the CA remains restorable for 30 days. You can set the parameter -// from 7 to 30 days. The DescribeCertificateAuthority action returns the time -// remaining in the restoration window of a private CA in the DELETED state. -// To restore an eligible CA, call the RestoreCertificateAuthority action. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation DeleteCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeConcurrentModificationException "ConcurrentModificationException" -// A previous update to your private CA is still ongoing. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DeleteCertificateAuthority -func (c *ACMPCA) DeleteCertificateAuthority(input *DeleteCertificateAuthorityInput) (*DeleteCertificateAuthorityOutput, error) { - req, out := c.DeleteCertificateAuthorityRequest(input) - return out, req.Send() -} - -// DeleteCertificateAuthorityWithContext is the same as DeleteCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) DeleteCertificateAuthorityWithContext(ctx aws.Context, input *DeleteCertificateAuthorityInput, opts ...request.Option) (*DeleteCertificateAuthorityOutput, error) { - req, out := c.DeleteCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeletePermission = "DeletePermission" - -// DeletePermissionRequest generates a "aws/request.Request" representing the -// client's request for the DeletePermission operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeletePermission for more information on using the DeletePermission -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeletePermissionRequest method. -// req, resp := client.DeletePermissionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DeletePermission -func (c *ACMPCA) DeletePermissionRequest(input *DeletePermissionInput) (req *request.Request, output *DeletePermissionOutput) { - op := &request.Operation{ - Name: opDeletePermission, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeletePermissionInput{} - } - - output = &DeletePermissionOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeletePermission API operation for AWS Certificate Manager Private Certificate Authority. -// -// Revokes permissions that a private CA assigned to a designated AWS service. -// Permissions can be created with the CreatePermission action and listed with -// the ListPermissions action. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation DeletePermission for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DeletePermission -func (c *ACMPCA) DeletePermission(input *DeletePermissionInput) (*DeletePermissionOutput, error) { - req, out := c.DeletePermissionRequest(input) - return out, req.Send() -} - -// DeletePermissionWithContext is the same as DeletePermission with the addition of -// the ability to pass a context and additional request options. -// -// See DeletePermission for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) DeletePermissionWithContext(ctx aws.Context, input *DeletePermissionInput, opts ...request.Option) (*DeletePermissionOutput, error) { - req, out := c.DeletePermissionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeCertificateAuthority = "DescribeCertificateAuthority" - -// DescribeCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the DescribeCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeCertificateAuthority for more information on using the DescribeCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeCertificateAuthorityRequest method. -// req, resp := client.DescribeCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DescribeCertificateAuthority -func (c *ACMPCA) DescribeCertificateAuthorityRequest(input *DescribeCertificateAuthorityInput) (req *request.Request, output *DescribeCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opDescribeCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeCertificateAuthorityInput{} - } - - output = &DescribeCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Lists information about your private certificate authority (CA). You specify -// the private CA on input by its ARN (Amazon Resource Name). The output contains -// the status of your CA. This can be any of the following: -// -// * CREATING - ACM Private CA is creating your private certificate authority. -// -// * PENDING_CERTIFICATE - The certificate is pending. You must use your -// ACM Private CA-hosted or on-premises root or subordinate CA to sign your -// private CA CSR and then import it into PCA. -// -// * ACTIVE - Your private CA is active. -// -// * DISABLED - Your private CA has been disabled. -// -// * EXPIRED - Your private CA certificate has expired. -// -// * FAILED - Your private CA has failed. Your CA can fail because of problems -// such a network outage or backend AWS failure or other errors. A failed -// CA can never return to the pending state. You must create a new CA. -// -// * DELETED - Your private CA is within the restoration period, after which -// it is permanently deleted. The length of time remaining in the CA's restoration -// period is also included in this action's output. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation DescribeCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DescribeCertificateAuthority -func (c *ACMPCA) DescribeCertificateAuthority(input *DescribeCertificateAuthorityInput) (*DescribeCertificateAuthorityOutput, error) { - req, out := c.DescribeCertificateAuthorityRequest(input) - return out, req.Send() -} - -// DescribeCertificateAuthorityWithContext is the same as DescribeCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) DescribeCertificateAuthorityWithContext(ctx aws.Context, input *DescribeCertificateAuthorityInput, opts ...request.Option) (*DescribeCertificateAuthorityOutput, error) { - req, out := c.DescribeCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeCertificateAuthorityAuditReport = "DescribeCertificateAuthorityAuditReport" - -// DescribeCertificateAuthorityAuditReportRequest generates a "aws/request.Request" representing the -// client's request for the DescribeCertificateAuthorityAuditReport operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeCertificateAuthorityAuditReport for more information on using the DescribeCertificateAuthorityAuditReport -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeCertificateAuthorityAuditReportRequest method. -// req, resp := client.DescribeCertificateAuthorityAuditReportRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DescribeCertificateAuthorityAuditReport -func (c *ACMPCA) DescribeCertificateAuthorityAuditReportRequest(input *DescribeCertificateAuthorityAuditReportInput) (req *request.Request, output *DescribeCertificateAuthorityAuditReportOutput) { - op := &request.Operation{ - Name: opDescribeCertificateAuthorityAuditReport, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeCertificateAuthorityAuditReportInput{} - } - - output = &DescribeCertificateAuthorityAuditReportOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeCertificateAuthorityAuditReport API operation for AWS Certificate Manager Private Certificate Authority. -// -// Lists information about a specific audit report created by calling the CreateCertificateAuthorityAuditReport -// action. Audit information is created every time the certificate authority -// (CA) private key is used. The private key is used when you call the IssueCertificate -// action or the RevokeCertificate action. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation DescribeCertificateAuthorityAuditReport for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidArgsException "InvalidArgsException" -// One or more of the specified arguments was not valid. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/DescribeCertificateAuthorityAuditReport -func (c *ACMPCA) DescribeCertificateAuthorityAuditReport(input *DescribeCertificateAuthorityAuditReportInput) (*DescribeCertificateAuthorityAuditReportOutput, error) { - req, out := c.DescribeCertificateAuthorityAuditReportRequest(input) - return out, req.Send() -} - -// DescribeCertificateAuthorityAuditReportWithContext is the same as DescribeCertificateAuthorityAuditReport with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeCertificateAuthorityAuditReport for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) DescribeCertificateAuthorityAuditReportWithContext(ctx aws.Context, input *DescribeCertificateAuthorityAuditReportInput, opts ...request.Option) (*DescribeCertificateAuthorityAuditReportOutput, error) { - req, out := c.DescribeCertificateAuthorityAuditReportRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetCertificate = "GetCertificate" - -// GetCertificateRequest generates a "aws/request.Request" representing the -// client's request for the GetCertificate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetCertificate for more information on using the GetCertificate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetCertificateRequest method. -// req, resp := client.GetCertificateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/GetCertificate -func (c *ACMPCA) GetCertificateRequest(input *GetCertificateInput) (req *request.Request, output *GetCertificateOutput) { - op := &request.Operation{ - Name: opGetCertificate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetCertificateInput{} - } - - output = &GetCertificateOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetCertificate API operation for AWS Certificate Manager Private Certificate Authority. -// -// Retrieves a certificate from your private CA. The ARN of the certificate -// is returned when you call the IssueCertificate action. You must specify both -// the ARN of your private CA and the ARN of the issued certificate when calling -// the GetCertificate action. You can retrieve the certificate if it is in the -// ISSUED state. You can call the CreateCertificateAuthorityAuditReport action -// to create a report that contains information about all of the certificates -// issued and revoked by your private CA. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation GetCertificate for usage and error information. -// -// Returned Error Codes: -// * ErrCodeRequestInProgressException "RequestInProgressException" -// Your request is already in progress. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/GetCertificate -func (c *ACMPCA) GetCertificate(input *GetCertificateInput) (*GetCertificateOutput, error) { - req, out := c.GetCertificateRequest(input) - return out, req.Send() -} - -// GetCertificateWithContext is the same as GetCertificate with the addition of -// the ability to pass a context and additional request options. -// -// See GetCertificate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) GetCertificateWithContext(ctx aws.Context, input *GetCertificateInput, opts ...request.Option) (*GetCertificateOutput, error) { - req, out := c.GetCertificateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetCertificateAuthorityCertificate = "GetCertificateAuthorityCertificate" - -// GetCertificateAuthorityCertificateRequest generates a "aws/request.Request" representing the -// client's request for the GetCertificateAuthorityCertificate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetCertificateAuthorityCertificate for more information on using the GetCertificateAuthorityCertificate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetCertificateAuthorityCertificateRequest method. -// req, resp := client.GetCertificateAuthorityCertificateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/GetCertificateAuthorityCertificate -func (c *ACMPCA) GetCertificateAuthorityCertificateRequest(input *GetCertificateAuthorityCertificateInput) (req *request.Request, output *GetCertificateAuthorityCertificateOutput) { - op := &request.Operation{ - Name: opGetCertificateAuthorityCertificate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetCertificateAuthorityCertificateInput{} - } - - output = &GetCertificateAuthorityCertificateOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetCertificateAuthorityCertificate API operation for AWS Certificate Manager Private Certificate Authority. -// -// Retrieves the certificate and certificate chain for your private certificate -// authority (CA). Both the certificate and the chain are base64 PEM-encoded. -// The chain does not include the CA certificate. Each certificate in the chain -// signs the one before it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation GetCertificateAuthorityCertificate for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/GetCertificateAuthorityCertificate -func (c *ACMPCA) GetCertificateAuthorityCertificate(input *GetCertificateAuthorityCertificateInput) (*GetCertificateAuthorityCertificateOutput, error) { - req, out := c.GetCertificateAuthorityCertificateRequest(input) - return out, req.Send() -} - -// GetCertificateAuthorityCertificateWithContext is the same as GetCertificateAuthorityCertificate with the addition of -// the ability to pass a context and additional request options. -// -// See GetCertificateAuthorityCertificate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) GetCertificateAuthorityCertificateWithContext(ctx aws.Context, input *GetCertificateAuthorityCertificateInput, opts ...request.Option) (*GetCertificateAuthorityCertificateOutput, error) { - req, out := c.GetCertificateAuthorityCertificateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetCertificateAuthorityCsr = "GetCertificateAuthorityCsr" - -// GetCertificateAuthorityCsrRequest generates a "aws/request.Request" representing the -// client's request for the GetCertificateAuthorityCsr operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetCertificateAuthorityCsr for more information on using the GetCertificateAuthorityCsr -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetCertificateAuthorityCsrRequest method. -// req, resp := client.GetCertificateAuthorityCsrRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/GetCertificateAuthorityCsr -func (c *ACMPCA) GetCertificateAuthorityCsrRequest(input *GetCertificateAuthorityCsrInput) (req *request.Request, output *GetCertificateAuthorityCsrOutput) { - op := &request.Operation{ - Name: opGetCertificateAuthorityCsr, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetCertificateAuthorityCsrInput{} - } - - output = &GetCertificateAuthorityCsrOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetCertificateAuthorityCsr API operation for AWS Certificate Manager Private Certificate Authority. -// -// Retrieves the certificate signing request (CSR) for your private certificate -// authority (CA). The CSR is created when you call the CreateCertificateAuthority -// action. Sign the CSR with your ACM Private CA-hosted or on-premises root -// or subordinate CA. Then import the signed certificate back into ACM Private -// CA by calling the ImportCertificateAuthorityCertificate action. The CSR is -// returned as a base64 PEM-encoded string. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation GetCertificateAuthorityCsr for usage and error information. -// -// Returned Error Codes: -// * ErrCodeRequestInProgressException "RequestInProgressException" -// Your request is already in progress. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/GetCertificateAuthorityCsr -func (c *ACMPCA) GetCertificateAuthorityCsr(input *GetCertificateAuthorityCsrInput) (*GetCertificateAuthorityCsrOutput, error) { - req, out := c.GetCertificateAuthorityCsrRequest(input) - return out, req.Send() -} - -// GetCertificateAuthorityCsrWithContext is the same as GetCertificateAuthorityCsr with the addition of -// the ability to pass a context and additional request options. -// -// See GetCertificateAuthorityCsr for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) GetCertificateAuthorityCsrWithContext(ctx aws.Context, input *GetCertificateAuthorityCsrInput, opts ...request.Option) (*GetCertificateAuthorityCsrOutput, error) { - req, out := c.GetCertificateAuthorityCsrRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opImportCertificateAuthorityCertificate = "ImportCertificateAuthorityCertificate" - -// ImportCertificateAuthorityCertificateRequest generates a "aws/request.Request" representing the -// client's request for the ImportCertificateAuthorityCertificate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportCertificateAuthorityCertificate for more information on using the ImportCertificateAuthorityCertificate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportCertificateAuthorityCertificateRequest method. -// req, resp := client.ImportCertificateAuthorityCertificateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ImportCertificateAuthorityCertificate -func (c *ACMPCA) ImportCertificateAuthorityCertificateRequest(input *ImportCertificateAuthorityCertificateInput) (req *request.Request, output *ImportCertificateAuthorityCertificateOutput) { - op := &request.Operation{ - Name: opImportCertificateAuthorityCertificate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportCertificateAuthorityCertificateInput{} - } - - output = &ImportCertificateAuthorityCertificateOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ImportCertificateAuthorityCertificate API operation for AWS Certificate Manager Private Certificate Authority. -// -// Imports a signed private CA certificate into ACM Private CA. This action -// is used when you are using a chain of trust whose root is located outside -// ACM Private CA. Before you can call this action, the following preparations -// must in place: -// -// In ACM Private CA, call the CreateCertificateAuthority action to create the -// private CA that that you plan to back with the imported certificate. -// -// Call the GetCertificateAuthorityCsr action to generate a certificate signing -// request (CSR). -// -// Sign the CSR using a root or intermediate CA hosted either by an on-premises -// PKI hierarchy or a commercial CA.. -// -// Create a certificate chain and copy the signed certificate and the certificate -// chain to your working directory. -// -// The following requirements apply when you import a CA certificate. -// -// * You cannot import a non-self-signed certificate for use as a root CA. -// -// * You cannot import a self-signed certificate for use as a subordinate -// CA. -// -// * Your certificate chain must not include the private CA certificate that -// you are importing. -// -// * Your ACM Private CA-hosted or on-premises CA certificate must be the -// last certificate in your chain. The subordinate certificate, if any, that -// your root CA signed must be next to last. The subordinate certificate -// signed by the preceding subordinate CA must come next, and so on until -// your chain is built. -// -// * The chain must be PEM-encoded. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation ImportCertificateAuthorityCertificate for usage and error information. -// -// Returned Error Codes: -// * ErrCodeConcurrentModificationException "ConcurrentModificationException" -// A previous update to your private CA is still ongoing. -// -// * ErrCodeRequestInProgressException "RequestInProgressException" -// Your request is already in progress. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidRequestException "InvalidRequestException" -// The request action cannot be performed or is prohibited. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeMalformedCertificateException "MalformedCertificateException" -// One or more fields in the certificate are invalid. -// -// * ErrCodeCertificateMismatchException "CertificateMismatchException" -// The certificate authority certificate you are importing does not comply with -// conditions specified in the certificate that signed it. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ImportCertificateAuthorityCertificate -func (c *ACMPCA) ImportCertificateAuthorityCertificate(input *ImportCertificateAuthorityCertificateInput) (*ImportCertificateAuthorityCertificateOutput, error) { - req, out := c.ImportCertificateAuthorityCertificateRequest(input) - return out, req.Send() -} - -// ImportCertificateAuthorityCertificateWithContext is the same as ImportCertificateAuthorityCertificate with the addition of -// the ability to pass a context and additional request options. -// -// See ImportCertificateAuthorityCertificate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ImportCertificateAuthorityCertificateWithContext(ctx aws.Context, input *ImportCertificateAuthorityCertificateInput, opts ...request.Option) (*ImportCertificateAuthorityCertificateOutput, error) { - req, out := c.ImportCertificateAuthorityCertificateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opIssueCertificate = "IssueCertificate" - -// IssueCertificateRequest generates a "aws/request.Request" representing the -// client's request for the IssueCertificate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See IssueCertificate for more information on using the IssueCertificate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the IssueCertificateRequest method. -// req, resp := client.IssueCertificateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/IssueCertificate -func (c *ACMPCA) IssueCertificateRequest(input *IssueCertificateInput) (req *request.Request, output *IssueCertificateOutput) { - op := &request.Operation{ - Name: opIssueCertificate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &IssueCertificateInput{} - } - - output = &IssueCertificateOutput{} - req = c.newRequest(op, input, output) - return -} - -// IssueCertificate API operation for AWS Certificate Manager Private Certificate Authority. -// -// Uses your private certificate authority (CA) to issue a client certificate. -// This action returns the Amazon Resource Name (ARN) of the certificate. You -// can retrieve the certificate by calling the GetCertificate action and specifying -// the ARN. -// -// You cannot use the ACM ListCertificateAuthorities action to retrieve the -// ARNs of the certificates that you issue by using ACM Private CA. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation IssueCertificate for usage and error information. -// -// Returned Error Codes: -// * ErrCodeLimitExceededException "LimitExceededException" -// An ACM Private CA limit has been exceeded. See the exception message returned -// to determine the limit that was exceeded. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidArgsException "InvalidArgsException" -// One or more of the specified arguments was not valid. -// -// * ErrCodeMalformedCSRException "MalformedCSRException" -// The certificate signing request is invalid. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/IssueCertificate -func (c *ACMPCA) IssueCertificate(input *IssueCertificateInput) (*IssueCertificateOutput, error) { - req, out := c.IssueCertificateRequest(input) - return out, req.Send() -} - -// IssueCertificateWithContext is the same as IssueCertificate with the addition of -// the ability to pass a context and additional request options. -// -// See IssueCertificate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) IssueCertificateWithContext(ctx aws.Context, input *IssueCertificateInput, opts ...request.Option) (*IssueCertificateOutput, error) { - req, out := c.IssueCertificateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opListCertificateAuthorities = "ListCertificateAuthorities" - -// ListCertificateAuthoritiesRequest generates a "aws/request.Request" representing the -// client's request for the ListCertificateAuthorities operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ListCertificateAuthorities for more information on using the ListCertificateAuthorities -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ListCertificateAuthoritiesRequest method. -// req, resp := client.ListCertificateAuthoritiesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ListCertificateAuthorities -func (c *ACMPCA) ListCertificateAuthoritiesRequest(input *ListCertificateAuthoritiesInput) (req *request.Request, output *ListCertificateAuthoritiesOutput) { - op := &request.Operation{ - Name: opListCertificateAuthorities, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &ListCertificateAuthoritiesInput{} - } - - output = &ListCertificateAuthoritiesOutput{} - req = c.newRequest(op, input, output) - return -} - -// ListCertificateAuthorities API operation for AWS Certificate Manager Private Certificate Authority. -// -// Lists the private certificate authorities that you created by using the CreateCertificateAuthority -// action. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation ListCertificateAuthorities for usage and error information. -// -// Returned Error Codes: -// * ErrCodeInvalidNextTokenException "InvalidNextTokenException" -// The token specified in the NextToken argument is not valid. Use the token -// returned from your previous call to ListCertificateAuthorities. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ListCertificateAuthorities -func (c *ACMPCA) ListCertificateAuthorities(input *ListCertificateAuthoritiesInput) (*ListCertificateAuthoritiesOutput, error) { - req, out := c.ListCertificateAuthoritiesRequest(input) - return out, req.Send() -} - -// ListCertificateAuthoritiesWithContext is the same as ListCertificateAuthorities with the addition of -// the ability to pass a context and additional request options. -// -// See ListCertificateAuthorities for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ListCertificateAuthoritiesWithContext(ctx aws.Context, input *ListCertificateAuthoritiesInput, opts ...request.Option) (*ListCertificateAuthoritiesOutput, error) { - req, out := c.ListCertificateAuthoritiesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// ListCertificateAuthoritiesPages iterates over the pages of a ListCertificateAuthorities operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See ListCertificateAuthorities method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a ListCertificateAuthorities operation. -// pageNum := 0 -// err := client.ListCertificateAuthoritiesPages(params, -// func(page *acmpca.ListCertificateAuthoritiesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *ACMPCA) ListCertificateAuthoritiesPages(input *ListCertificateAuthoritiesInput, fn func(*ListCertificateAuthoritiesOutput, bool) bool) error { - return c.ListCertificateAuthoritiesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// ListCertificateAuthoritiesPagesWithContext same as ListCertificateAuthoritiesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ListCertificateAuthoritiesPagesWithContext(ctx aws.Context, input *ListCertificateAuthoritiesInput, fn func(*ListCertificateAuthoritiesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *ListCertificateAuthoritiesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.ListCertificateAuthoritiesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*ListCertificateAuthoritiesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opListPermissions = "ListPermissions" - -// ListPermissionsRequest generates a "aws/request.Request" representing the -// client's request for the ListPermissions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ListPermissions for more information on using the ListPermissions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ListPermissionsRequest method. -// req, resp := client.ListPermissionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ListPermissions -func (c *ACMPCA) ListPermissionsRequest(input *ListPermissionsInput) (req *request.Request, output *ListPermissionsOutput) { - op := &request.Operation{ - Name: opListPermissions, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &ListPermissionsInput{} - } - - output = &ListPermissionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ListPermissions API operation for AWS Certificate Manager Private Certificate Authority. -// -// Lists all the permissions, if any, that have been assigned by a private CA. -// Permissions can be granted with the CreatePermission action and revoked with -// the DeletePermission action. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation ListPermissions for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidNextTokenException "InvalidNextTokenException" -// The token specified in the NextToken argument is not valid. Use the token -// returned from your previous call to ListCertificateAuthorities. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ListPermissions -func (c *ACMPCA) ListPermissions(input *ListPermissionsInput) (*ListPermissionsOutput, error) { - req, out := c.ListPermissionsRequest(input) - return out, req.Send() -} - -// ListPermissionsWithContext is the same as ListPermissions with the addition of -// the ability to pass a context and additional request options. -// -// See ListPermissions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ListPermissionsWithContext(ctx aws.Context, input *ListPermissionsInput, opts ...request.Option) (*ListPermissionsOutput, error) { - req, out := c.ListPermissionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// ListPermissionsPages iterates over the pages of a ListPermissions operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See ListPermissions method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a ListPermissions operation. -// pageNum := 0 -// err := client.ListPermissionsPages(params, -// func(page *acmpca.ListPermissionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *ACMPCA) ListPermissionsPages(input *ListPermissionsInput, fn func(*ListPermissionsOutput, bool) bool) error { - return c.ListPermissionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// ListPermissionsPagesWithContext same as ListPermissionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ListPermissionsPagesWithContext(ctx aws.Context, input *ListPermissionsInput, fn func(*ListPermissionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *ListPermissionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.ListPermissionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*ListPermissionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opListTags = "ListTags" - -// ListTagsRequest generates a "aws/request.Request" representing the -// client's request for the ListTags operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ListTags for more information on using the ListTags -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ListTagsRequest method. -// req, resp := client.ListTagsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ListTags -func (c *ACMPCA) ListTagsRequest(input *ListTagsInput) (req *request.Request, output *ListTagsOutput) { - op := &request.Operation{ - Name: opListTags, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &ListTagsInput{} - } - - output = &ListTagsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ListTags API operation for AWS Certificate Manager Private Certificate Authority. -// -// Lists the tags, if any, that are associated with your private CA. Tags are -// labels that you can use to identify and organize your CAs. Each tag consists -// of a key and an optional value. Call the TagCertificateAuthority action to -// add one or more tags to your CA. Call the UntagCertificateAuthority action -// to remove tags. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation ListTags for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/ListTags -func (c *ACMPCA) ListTags(input *ListTagsInput) (*ListTagsOutput, error) { - req, out := c.ListTagsRequest(input) - return out, req.Send() -} - -// ListTagsWithContext is the same as ListTags with the addition of -// the ability to pass a context and additional request options. -// -// See ListTags for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ListTagsWithContext(ctx aws.Context, input *ListTagsInput, opts ...request.Option) (*ListTagsOutput, error) { - req, out := c.ListTagsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// ListTagsPages iterates over the pages of a ListTags operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See ListTags method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a ListTags operation. -// pageNum := 0 -// err := client.ListTagsPages(params, -// func(page *acmpca.ListTagsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *ACMPCA) ListTagsPages(input *ListTagsInput, fn func(*ListTagsOutput, bool) bool) error { - return c.ListTagsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// ListTagsPagesWithContext same as ListTagsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) ListTagsPagesWithContext(ctx aws.Context, input *ListTagsInput, fn func(*ListTagsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *ListTagsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.ListTagsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*ListTagsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opRestoreCertificateAuthority = "RestoreCertificateAuthority" - -// RestoreCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the RestoreCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RestoreCertificateAuthority for more information on using the RestoreCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RestoreCertificateAuthorityRequest method. -// req, resp := client.RestoreCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/RestoreCertificateAuthority -func (c *ACMPCA) RestoreCertificateAuthorityRequest(input *RestoreCertificateAuthorityInput) (req *request.Request, output *RestoreCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opRestoreCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RestoreCertificateAuthorityInput{} - } - - output = &RestoreCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// RestoreCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Restores a certificate authority (CA) that is in the DELETED state. You can -// restore a CA during the period that you defined in the PermanentDeletionTimeInDays -// parameter of the DeleteCertificateAuthority action. Currently, you can specify -// 7 to 30 days. If you did not specify a PermanentDeletionTimeInDays value, -// by default you can restore the CA at any time in a 30 day period. You can -// check the time remaining in the restoration period of a private CA in the -// DELETED state by calling the DescribeCertificateAuthority or ListCertificateAuthorities -// actions. The status of a restored CA is set to its pre-deletion status when -// the RestoreCertificateAuthority action returns. To change its status to ACTIVE, -// call the UpdateCertificateAuthority action. If the private CA was in the -// PENDING_CERTIFICATE state at deletion, you must use the ImportCertificateAuthorityCertificate -// action to import a certificate authority into the private CA before it can -// be activated. You cannot restore a CA after the restoration period has ended. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation RestoreCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/RestoreCertificateAuthority -func (c *ACMPCA) RestoreCertificateAuthority(input *RestoreCertificateAuthorityInput) (*RestoreCertificateAuthorityOutput, error) { - req, out := c.RestoreCertificateAuthorityRequest(input) - return out, req.Send() -} - -// RestoreCertificateAuthorityWithContext is the same as RestoreCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See RestoreCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) RestoreCertificateAuthorityWithContext(ctx aws.Context, input *RestoreCertificateAuthorityInput, opts ...request.Option) (*RestoreCertificateAuthorityOutput, error) { - req, out := c.RestoreCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRevokeCertificate = "RevokeCertificate" - -// RevokeCertificateRequest generates a "aws/request.Request" representing the -// client's request for the RevokeCertificate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RevokeCertificate for more information on using the RevokeCertificate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RevokeCertificateRequest method. -// req, resp := client.RevokeCertificateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/RevokeCertificate -func (c *ACMPCA) RevokeCertificateRequest(input *RevokeCertificateInput) (req *request.Request, output *RevokeCertificateOutput) { - op := &request.Operation{ - Name: opRevokeCertificate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RevokeCertificateInput{} - } - - output = &RevokeCertificateOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// RevokeCertificate API operation for AWS Certificate Manager Private Certificate Authority. -// -// Revokes a certificate that was issued inside ACM Private CA. If you enable -// a certificate revocation list (CRL) when you create or update your private -// CA, information about the revoked certificates will be included in the CRL. -// ACM Private CA writes the CRL to an S3 bucket that you specify. For more -// information about revocation, see the CrlConfiguration structure. ACM Private -// CA also writes revocation information to the audit report. For more information, -// see CreateCertificateAuthorityAuditReport. -// -// You cannot revoke a root CA self-signed certificate. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation RevokeCertificate for usage and error information. -// -// Returned Error Codes: -// * ErrCodeConcurrentModificationException "ConcurrentModificationException" -// A previous update to your private CA is still ongoing. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidRequestException "InvalidRequestException" -// The request action cannot be performed or is prohibited. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeLimitExceededException "LimitExceededException" -// An ACM Private CA limit has been exceeded. See the exception message returned -// to determine the limit that was exceeded. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeRequestAlreadyProcessedException "RequestAlreadyProcessedException" -// Your request has already been completed. -// -// * ErrCodeRequestInProgressException "RequestInProgressException" -// Your request is already in progress. -// -// * ErrCodeRequestFailedException "RequestFailedException" -// The request has failed for an unspecified reason. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/RevokeCertificate -func (c *ACMPCA) RevokeCertificate(input *RevokeCertificateInput) (*RevokeCertificateOutput, error) { - req, out := c.RevokeCertificateRequest(input) - return out, req.Send() -} - -// RevokeCertificateWithContext is the same as RevokeCertificate with the addition of -// the ability to pass a context and additional request options. -// -// See RevokeCertificate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) RevokeCertificateWithContext(ctx aws.Context, input *RevokeCertificateInput, opts ...request.Option) (*RevokeCertificateOutput, error) { - req, out := c.RevokeCertificateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opTagCertificateAuthority = "TagCertificateAuthority" - -// TagCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the TagCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See TagCertificateAuthority for more information on using the TagCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the TagCertificateAuthorityRequest method. -// req, resp := client.TagCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/TagCertificateAuthority -func (c *ACMPCA) TagCertificateAuthorityRequest(input *TagCertificateAuthorityInput) (req *request.Request, output *TagCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opTagCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &TagCertificateAuthorityInput{} - } - - output = &TagCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// TagCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Adds one or more tags to your private CA. Tags are labels that you can use -// to identify and organize your AWS resources. Each tag consists of a key and -// an optional value. You specify the private CA on input by its Amazon Resource -// Name (ARN). You specify the tag by using a key-value pair. You can apply -// a tag to just one private CA if you want to identify a specific characteristic -// of that CA, or you can apply the same tag to multiple private CAs if you -// want to filter for a common relationship among those CAs. To remove one or -// more tags, use the UntagCertificateAuthority action. Call the ListTags action -// to see what tags are associated with your CA. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation TagCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeInvalidTagException "InvalidTagException" -// The tag associated with the CA is not valid. The invalid argument is contained -// in the message field. -// -// * ErrCodeTooManyTagsException "TooManyTagsException" -// You can associate up to 50 tags with a private CA. Exception information -// is contained in the exception message field. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/TagCertificateAuthority -func (c *ACMPCA) TagCertificateAuthority(input *TagCertificateAuthorityInput) (*TagCertificateAuthorityOutput, error) { - req, out := c.TagCertificateAuthorityRequest(input) - return out, req.Send() -} - -// TagCertificateAuthorityWithContext is the same as TagCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See TagCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) TagCertificateAuthorityWithContext(ctx aws.Context, input *TagCertificateAuthorityInput, opts ...request.Option) (*TagCertificateAuthorityOutput, error) { - req, out := c.TagCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUntagCertificateAuthority = "UntagCertificateAuthority" - -// UntagCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the UntagCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UntagCertificateAuthority for more information on using the UntagCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UntagCertificateAuthorityRequest method. -// req, resp := client.UntagCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/UntagCertificateAuthority -func (c *ACMPCA) UntagCertificateAuthorityRequest(input *UntagCertificateAuthorityInput) (req *request.Request, output *UntagCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opUntagCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UntagCertificateAuthorityInput{} - } - - output = &UntagCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// UntagCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Remove one or more tags from your private CA. A tag consists of a key-value -// pair. If you do not specify the value portion of the tag when calling this -// action, the tag will be removed regardless of value. If you specify a value, -// the tag is removed only if it is associated with the specified value. To -// add tags to a private CA, use the TagCertificateAuthority. Call the ListTags -// action to see what tags are associated with your CA. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation UntagCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeInvalidTagException "InvalidTagException" -// The tag associated with the CA is not valid. The invalid argument is contained -// in the message field. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/UntagCertificateAuthority -func (c *ACMPCA) UntagCertificateAuthority(input *UntagCertificateAuthorityInput) (*UntagCertificateAuthorityOutput, error) { - req, out := c.UntagCertificateAuthorityRequest(input) - return out, req.Send() -} - -// UntagCertificateAuthorityWithContext is the same as UntagCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See UntagCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) UntagCertificateAuthorityWithContext(ctx aws.Context, input *UntagCertificateAuthorityInput, opts ...request.Option) (*UntagCertificateAuthorityOutput, error) { - req, out := c.UntagCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUpdateCertificateAuthority = "UpdateCertificateAuthority" - -// UpdateCertificateAuthorityRequest generates a "aws/request.Request" representing the -// client's request for the UpdateCertificateAuthority operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UpdateCertificateAuthority for more information on using the UpdateCertificateAuthority -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UpdateCertificateAuthorityRequest method. -// req, resp := client.UpdateCertificateAuthorityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/UpdateCertificateAuthority -func (c *ACMPCA) UpdateCertificateAuthorityRequest(input *UpdateCertificateAuthorityInput) (req *request.Request, output *UpdateCertificateAuthorityOutput) { - op := &request.Operation{ - Name: opUpdateCertificateAuthority, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UpdateCertificateAuthorityInput{} - } - - output = &UpdateCertificateAuthorityOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// UpdateCertificateAuthority API operation for AWS Certificate Manager Private Certificate Authority. -// -// Updates the status or configuration of a private certificate authority (CA). -// Your private CA must be in the ACTIVE or DISABLED state before you can update -// it. You can disable a private CA that is in the ACTIVE state or make a CA -// that is in the DISABLED state active again. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Certificate Manager Private Certificate Authority's -// API operation UpdateCertificateAuthority for usage and error information. -// -// Returned Error Codes: -// * ErrCodeConcurrentModificationException "ConcurrentModificationException" -// A previous update to your private CA is still ongoing. -// -// * ErrCodeResourceNotFoundException "ResourceNotFoundException" -// A resource such as a private CA, S3 bucket, certificate, or audit report -// cannot be found. -// -// * ErrCodeInvalidArgsException "InvalidArgsException" -// One or more of the specified arguments was not valid. -// -// * ErrCodeInvalidArnException "InvalidArnException" -// The requested Amazon Resource Name (ARN) does not refer to an existing resource. -// -// * ErrCodeInvalidStateException "InvalidStateException" -// The private CA is in a state during which a report or certificate cannot -// be generated. -// -// * ErrCodeInvalidPolicyException "InvalidPolicyException" -// The S3 bucket policy is not valid. The policy must give ACM Private CA rights -// to read from and write to the bucket and find the bucket location. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22/UpdateCertificateAuthority -func (c *ACMPCA) UpdateCertificateAuthority(input *UpdateCertificateAuthorityInput) (*UpdateCertificateAuthorityOutput, error) { - req, out := c.UpdateCertificateAuthorityRequest(input) - return out, req.Send() -} - -// UpdateCertificateAuthorityWithContext is the same as UpdateCertificateAuthority with the addition of -// the ability to pass a context and additional request options. -// -// See UpdateCertificateAuthority for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) UpdateCertificateAuthorityWithContext(ctx aws.Context, input *UpdateCertificateAuthorityInput, opts ...request.Option) (*UpdateCertificateAuthorityOutput, error) { - req, out := c.UpdateCertificateAuthorityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// Contains information about the certificate subject. The certificate can be -// one issued by your private certificate authority (CA) or it can be your private -// CA certificate. The Subject field in the certificate identifies the entity -// that owns or controls the public key in the certificate. The entity can be -// a user, computer, device, or service. The Subject must contain an X.500 distinguished -// name (DN). A DN is a sequence of relative distinguished names (RDNs). The -// RDNs are separated by commas in the certificate. The DN must be unique for -// each entity, but your private CA can issue more than one certificate with -// the same DN to the same entity. -type ASN1Subject struct { - _ struct{} `type:"structure"` - - // Fully qualified domain name (FQDN) associated with the certificate subject. - CommonName *string `type:"string"` - - // Two-digit code that specifies the country in which the certificate subject - // located. - Country *string `type:"string"` - - // Disambiguating information for the certificate subject. - DistinguishedNameQualifier *string `type:"string"` - - // Typically a qualifier appended to the name of an individual. Examples include - // Jr. for junior, Sr. for senior, and III for third. - GenerationQualifier *string `type:"string"` - - // First name. - GivenName *string `type:"string"` - - // Concatenation that typically contains the first letter of the GivenName, - // the first letter of the middle name if one exists, and the first letter of - // the SurName. - Initials *string `type:"string"` - - // The locality (such as a city or town) in which the certificate subject is - // located. - Locality *string `type:"string"` - - // Legal name of the organization with which the certificate subject is affiliated. - Organization *string `type:"string"` - - // A subdivision or unit of the organization (such as sales or finance) with - // which the certificate subject is affiliated. - OrganizationalUnit *string `type:"string"` - - // Typically a shortened version of a longer GivenName. For example, Jonathan - // is often shortened to John. Elizabeth is often shortened to Beth, Liz, or - // Eliza. - Pseudonym *string `type:"string"` - - // The certificate serial number. - SerialNumber *string `type:"string"` - - // State in which the subject of the certificate is located. - State *string `type:"string"` - - // Family name. In the US and the UK, for example, the surname of an individual - // is ordered last. In Asian cultures the surname is typically ordered first. - Surname *string `type:"string"` - - // A title such as Mr. or Ms., which is pre-pended to the name to refer formally - // to the certificate subject. - Title *string `type:"string"` -} - -// String returns the string representation -func (s ASN1Subject) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ASN1Subject) GoString() string { - return s.String() -} - -// SetCommonName sets the CommonName field's value. -func (s *ASN1Subject) SetCommonName(v string) *ASN1Subject { - s.CommonName = &v - return s -} - -// SetCountry sets the Country field's value. -func (s *ASN1Subject) SetCountry(v string) *ASN1Subject { - s.Country = &v - return s -} - -// SetDistinguishedNameQualifier sets the DistinguishedNameQualifier field's value. -func (s *ASN1Subject) SetDistinguishedNameQualifier(v string) *ASN1Subject { - s.DistinguishedNameQualifier = &v - return s -} - -// SetGenerationQualifier sets the GenerationQualifier field's value. -func (s *ASN1Subject) SetGenerationQualifier(v string) *ASN1Subject { - s.GenerationQualifier = &v - return s -} - -// SetGivenName sets the GivenName field's value. -func (s *ASN1Subject) SetGivenName(v string) *ASN1Subject { - s.GivenName = &v - return s -} - -// SetInitials sets the Initials field's value. -func (s *ASN1Subject) SetInitials(v string) *ASN1Subject { - s.Initials = &v - return s -} - -// SetLocality sets the Locality field's value. -func (s *ASN1Subject) SetLocality(v string) *ASN1Subject { - s.Locality = &v - return s -} - -// SetOrganization sets the Organization field's value. -func (s *ASN1Subject) SetOrganization(v string) *ASN1Subject { - s.Organization = &v - return s -} - -// SetOrganizationalUnit sets the OrganizationalUnit field's value. -func (s *ASN1Subject) SetOrganizationalUnit(v string) *ASN1Subject { - s.OrganizationalUnit = &v - return s -} - -// SetPseudonym sets the Pseudonym field's value. -func (s *ASN1Subject) SetPseudonym(v string) *ASN1Subject { - s.Pseudonym = &v - return s -} - -// SetSerialNumber sets the SerialNumber field's value. -func (s *ASN1Subject) SetSerialNumber(v string) *ASN1Subject { - s.SerialNumber = &v - return s -} - -// SetState sets the State field's value. -func (s *ASN1Subject) SetState(v string) *ASN1Subject { - s.State = &v - return s -} - -// SetSurname sets the Surname field's value. -func (s *ASN1Subject) SetSurname(v string) *ASN1Subject { - s.Surname = &v - return s -} - -// SetTitle sets the Title field's value. -func (s *ASN1Subject) SetTitle(v string) *ASN1Subject { - s.Title = &v - return s -} - -// Contains information about your private certificate authority (CA). Your -// private CA can issue and revoke X.509 digital certificates. Digital certificates -// verify that the entity named in the certificate Subject field owns or controls -// the public key contained in the Subject Public Key Info field. Call the CreateCertificateAuthority -// action to create your private CA. You must then call the GetCertificateAuthorityCertificate -// action to retrieve a private CA certificate signing request (CSR). Sign the -// CSR with your ACM Private CA-hosted or on-premises root or subordinate CA -// certificate. Call the ImportCertificateAuthorityCertificate action to import -// the signed certificate into AWS Certificate Manager (ACM). -type CertificateAuthority struct { - _ struct{} `type:"structure"` - - // Amazon Resource Name (ARN) for your private certificate authority (CA). The - // format is 12345678-1234-1234-1234-123456789012 . - Arn *string `min:"5" type:"string"` - - // Your private CA configuration. - CertificateAuthorityConfiguration *CertificateAuthorityConfiguration `type:"structure"` - - // Date and time at which your private CA was created. - CreatedAt *time.Time `type:"timestamp"` - - // Reason the request to create your private CA failed. - FailureReason *string `type:"string" enum:"FailureReason"` - - // Date and time at which your private CA was last updated. - LastStateChangeAt *time.Time `type:"timestamp"` - - // Date and time after which your private CA certificate is not valid. - NotAfter *time.Time `type:"timestamp"` - - // Date and time before which your private CA certificate is not valid. - NotBefore *time.Time `type:"timestamp"` - - // The period during which a deleted CA can be restored. For more information, - // see the PermanentDeletionTimeInDays parameter of the DeleteCertificateAuthorityRequest - // action. - RestorableUntil *time.Time `type:"timestamp"` - - // Information about the certificate revocation list (CRL) created and maintained - // by your private CA. - RevocationConfiguration *RevocationConfiguration `type:"structure"` - - // Serial number of your private CA. - Serial *string `type:"string"` - - // Status of your private CA. - Status *string `type:"string" enum:"CertificateAuthorityStatus"` - - // Type of your private CA. - Type *string `type:"string" enum:"CertificateAuthorityType"` -} - -// String returns the string representation -func (s CertificateAuthority) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CertificateAuthority) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *CertificateAuthority) SetArn(v string) *CertificateAuthority { - s.Arn = &v - return s -} - -// SetCertificateAuthorityConfiguration sets the CertificateAuthorityConfiguration field's value. -func (s *CertificateAuthority) SetCertificateAuthorityConfiguration(v *CertificateAuthorityConfiguration) *CertificateAuthority { - s.CertificateAuthorityConfiguration = v - return s -} - -// SetCreatedAt sets the CreatedAt field's value. -func (s *CertificateAuthority) SetCreatedAt(v time.Time) *CertificateAuthority { - s.CreatedAt = &v - return s -} - -// SetFailureReason sets the FailureReason field's value. -func (s *CertificateAuthority) SetFailureReason(v string) *CertificateAuthority { - s.FailureReason = &v - return s -} - -// SetLastStateChangeAt sets the LastStateChangeAt field's value. -func (s *CertificateAuthority) SetLastStateChangeAt(v time.Time) *CertificateAuthority { - s.LastStateChangeAt = &v - return s -} - -// SetNotAfter sets the NotAfter field's value. -func (s *CertificateAuthority) SetNotAfter(v time.Time) *CertificateAuthority { - s.NotAfter = &v - return s -} - -// SetNotBefore sets the NotBefore field's value. -func (s *CertificateAuthority) SetNotBefore(v time.Time) *CertificateAuthority { - s.NotBefore = &v - return s -} - -// SetRestorableUntil sets the RestorableUntil field's value. -func (s *CertificateAuthority) SetRestorableUntil(v time.Time) *CertificateAuthority { - s.RestorableUntil = &v - return s -} - -// SetRevocationConfiguration sets the RevocationConfiguration field's value. -func (s *CertificateAuthority) SetRevocationConfiguration(v *RevocationConfiguration) *CertificateAuthority { - s.RevocationConfiguration = v - return s -} - -// SetSerial sets the Serial field's value. -func (s *CertificateAuthority) SetSerial(v string) *CertificateAuthority { - s.Serial = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *CertificateAuthority) SetStatus(v string) *CertificateAuthority { - s.Status = &v - return s -} - -// SetType sets the Type field's value. -func (s *CertificateAuthority) SetType(v string) *CertificateAuthority { - s.Type = &v - return s -} - -// Contains configuration information for your private certificate authority -// (CA). This includes information about the class of public key algorithm and -// the key pair that your private CA creates when it issues a certificate. It -// also includes the signature algorithm that it uses when issuing certificates, -// and its X.500 distinguished name. You must specify this information when -// you call the CreateCertificateAuthority action. -type CertificateAuthorityConfiguration struct { - _ struct{} `type:"structure"` - - // Type of the public key algorithm and size, in bits, of the key pair that - // your CA creates when it issues a certificate. When you create a subordinate - // CA, you must use a key algorithm supported by the parent CA. - // - // KeyAlgorithm is a required field - KeyAlgorithm *string `type:"string" required:"true" enum:"KeyAlgorithm"` - - // Name of the algorithm your private CA uses to sign certificate requests. - // - // SigningAlgorithm is a required field - SigningAlgorithm *string `type:"string" required:"true" enum:"SigningAlgorithm"` - - // Structure that contains X.500 distinguished name information for your private - // CA. - // - // Subject is a required field - Subject *ASN1Subject `type:"structure" required:"true"` -} - -// String returns the string representation -func (s CertificateAuthorityConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CertificateAuthorityConfiguration) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CertificateAuthorityConfiguration) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CertificateAuthorityConfiguration"} - if s.KeyAlgorithm == nil { - invalidParams.Add(request.NewErrParamRequired("KeyAlgorithm")) - } - if s.SigningAlgorithm == nil { - invalidParams.Add(request.NewErrParamRequired("SigningAlgorithm")) - } - if s.Subject == nil { - invalidParams.Add(request.NewErrParamRequired("Subject")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetKeyAlgorithm sets the KeyAlgorithm field's value. -func (s *CertificateAuthorityConfiguration) SetKeyAlgorithm(v string) *CertificateAuthorityConfiguration { - s.KeyAlgorithm = &v - return s -} - -// SetSigningAlgorithm sets the SigningAlgorithm field's value. -func (s *CertificateAuthorityConfiguration) SetSigningAlgorithm(v string) *CertificateAuthorityConfiguration { - s.SigningAlgorithm = &v - return s -} - -// SetSubject sets the Subject field's value. -func (s *CertificateAuthorityConfiguration) SetSubject(v *ASN1Subject) *CertificateAuthorityConfiguration { - s.Subject = v - return s -} - -type CreateCertificateAuthorityAuditReportInput struct { - _ struct{} `type:"structure"` - - // The format in which to create the report. This can be either JSON or CSV. - // - // AuditReportResponseFormat is a required field - AuditReportResponseFormat *string `type:"string" required:"true" enum:"AuditReportResponseFormat"` - - // The Amazon Resource Name (ARN) of the CA to be audited. This is of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // The name of the S3 bucket that will contain the audit report. - // - // S3BucketName is a required field - S3BucketName *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateCertificateAuthorityAuditReportInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCertificateAuthorityAuditReportInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateCertificateAuthorityAuditReportInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateCertificateAuthorityAuditReportInput"} - if s.AuditReportResponseFormat == nil { - invalidParams.Add(request.NewErrParamRequired("AuditReportResponseFormat")) - } - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.S3BucketName == nil { - invalidParams.Add(request.NewErrParamRequired("S3BucketName")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAuditReportResponseFormat sets the AuditReportResponseFormat field's value. -func (s *CreateCertificateAuthorityAuditReportInput) SetAuditReportResponseFormat(v string) *CreateCertificateAuthorityAuditReportInput { - s.AuditReportResponseFormat = &v - return s -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *CreateCertificateAuthorityAuditReportInput) SetCertificateAuthorityArn(v string) *CreateCertificateAuthorityAuditReportInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetS3BucketName sets the S3BucketName field's value. -func (s *CreateCertificateAuthorityAuditReportInput) SetS3BucketName(v string) *CreateCertificateAuthorityAuditReportInput { - s.S3BucketName = &v - return s -} - -type CreateCertificateAuthorityAuditReportOutput struct { - _ struct{} `type:"structure"` - - // An alphanumeric string that contains a report identifier. - AuditReportId *string `min:"36" type:"string"` - - // The key that uniquely identifies the report file in your S3 bucket. - S3Key *string `type:"string"` -} - -// String returns the string representation -func (s CreateCertificateAuthorityAuditReportOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCertificateAuthorityAuditReportOutput) GoString() string { - return s.String() -} - -// SetAuditReportId sets the AuditReportId field's value. -func (s *CreateCertificateAuthorityAuditReportOutput) SetAuditReportId(v string) *CreateCertificateAuthorityAuditReportOutput { - s.AuditReportId = &v - return s -} - -// SetS3Key sets the S3Key field's value. -func (s *CreateCertificateAuthorityAuditReportOutput) SetS3Key(v string) *CreateCertificateAuthorityAuditReportOutput { - s.S3Key = &v - return s -} - -type CreateCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // Name and bit size of the private key algorithm, the name of the signing algorithm, - // and X.500 certificate subject information. - // - // CertificateAuthorityConfiguration is a required field - CertificateAuthorityConfiguration *CertificateAuthorityConfiguration `type:"structure" required:"true"` - - // The type of the certificate authority. - // - // CertificateAuthorityType is a required field - CertificateAuthorityType *string `type:"string" required:"true" enum:"CertificateAuthorityType"` - - // Alphanumeric string that can be used to distinguish between calls to CreateCertificateAuthority. - // Idempotency tokens time out after five minutes. Therefore, if you call CreateCertificateAuthority - // multiple times with the same idempotency token within a five minute period, - // ACM Private CA recognizes that you are requesting only one certificate. As - // a result, ACM Private CA issues only one. If you change the idempotency token - // for each call, however, ACM Private CA recognizes that you are requesting - // multiple certificates. - IdempotencyToken *string `min:"1" type:"string"` - - // Contains a Boolean value that you can use to enable a certification revocation - // list (CRL) for the CA, the name of the S3 bucket to which ACM Private CA - // will write the CRL, and an optional CNAME alias that you can use to hide - // the name of your bucket in the CRL Distribution Points extension of your - // CA certificate. For more information, see the CrlConfiguration structure. - RevocationConfiguration *RevocationConfiguration `type:"structure"` - - // Key-value pairs that will be attached to the new private CA. You can associate - // up to 50 tags with a private CA. For information using tags with - // - // IAM to manage permissions, see Controlling Access Using IAM Tags (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html). - Tags []*Tag `min:"1" type:"list"` -} - -// String returns the string representation -func (s CreateCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateCertificateAuthorityInput"} - if s.CertificateAuthorityConfiguration == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityConfiguration")) - } - if s.CertificateAuthorityType == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityType")) - } - if s.IdempotencyToken != nil && len(*s.IdempotencyToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("IdempotencyToken", 1)) - } - if s.Tags != nil && len(s.Tags) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Tags", 1)) - } - if s.CertificateAuthorityConfiguration != nil { - if err := s.CertificateAuthorityConfiguration.Validate(); err != nil { - invalidParams.AddNested("CertificateAuthorityConfiguration", err.(request.ErrInvalidParams)) - } - } - if s.RevocationConfiguration != nil { - if err := s.RevocationConfiguration.Validate(); err != nil { - invalidParams.AddNested("RevocationConfiguration", err.(request.ErrInvalidParams)) - } - } - if s.Tags != nil { - for i, v := range s.Tags { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityConfiguration sets the CertificateAuthorityConfiguration field's value. -func (s *CreateCertificateAuthorityInput) SetCertificateAuthorityConfiguration(v *CertificateAuthorityConfiguration) *CreateCertificateAuthorityInput { - s.CertificateAuthorityConfiguration = v - return s -} - -// SetCertificateAuthorityType sets the CertificateAuthorityType field's value. -func (s *CreateCertificateAuthorityInput) SetCertificateAuthorityType(v string) *CreateCertificateAuthorityInput { - s.CertificateAuthorityType = &v - return s -} - -// SetIdempotencyToken sets the IdempotencyToken field's value. -func (s *CreateCertificateAuthorityInput) SetIdempotencyToken(v string) *CreateCertificateAuthorityInput { - s.IdempotencyToken = &v - return s -} - -// SetRevocationConfiguration sets the RevocationConfiguration field's value. -func (s *CreateCertificateAuthorityInput) SetRevocationConfiguration(v *RevocationConfiguration) *CreateCertificateAuthorityInput { - s.RevocationConfiguration = v - return s -} - -// SetTags sets the Tags field's value. -func (s *CreateCertificateAuthorityInput) SetTags(v []*Tag) *CreateCertificateAuthorityInput { - s.Tags = v - return s -} - -type CreateCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` - - // If successful, the Amazon Resource Name (ARN) of the certificate authority - // (CA). This is of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - CertificateAuthorityArn *string `min:"5" type:"string"` -} - -// String returns the string representation -func (s CreateCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCertificateAuthorityOutput) GoString() string { - return s.String() -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *CreateCertificateAuthorityOutput) SetCertificateAuthorityArn(v string) *CreateCertificateAuthorityOutput { - s.CertificateAuthorityArn = &v - return s -} - -type CreatePermissionInput struct { - _ struct{} `type:"structure"` - - // The actions that the specified AWS service principal can use. These include - // IssueCertificate, GetCertificate, and ListPermissions. - // - // Actions is a required field - Actions []*string `min:"1" type:"list" required:"true"` - - // The Amazon Resource Name (ARN) of the CA that grants the permissions. You - // can find the ARN by calling the ListCertificateAuthorities action. This must - // have the following form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // The AWS service or identity that receives the permission. At this time, the - // only valid principal is acm.amazonaws.com. - // - // Principal is a required field - Principal *string `type:"string" required:"true"` - - // The ID of the calling account. - SourceAccount *string `min:"12" type:"string"` -} - -// String returns the string representation -func (s CreatePermissionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreatePermissionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreatePermissionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreatePermissionInput"} - if s.Actions == nil { - invalidParams.Add(request.NewErrParamRequired("Actions")) - } - if s.Actions != nil && len(s.Actions) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Actions", 1)) - } - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.Principal == nil { - invalidParams.Add(request.NewErrParamRequired("Principal")) - } - if s.SourceAccount != nil && len(*s.SourceAccount) < 12 { - invalidParams.Add(request.NewErrParamMinLen("SourceAccount", 12)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetActions sets the Actions field's value. -func (s *CreatePermissionInput) SetActions(v []*string) *CreatePermissionInput { - s.Actions = v - return s -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *CreatePermissionInput) SetCertificateAuthorityArn(v string) *CreatePermissionInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetPrincipal sets the Principal field's value. -func (s *CreatePermissionInput) SetPrincipal(v string) *CreatePermissionInput { - s.Principal = &v - return s -} - -// SetSourceAccount sets the SourceAccount field's value. -func (s *CreatePermissionInput) SetSourceAccount(v string) *CreatePermissionInput { - s.SourceAccount = &v - return s -} - -type CreatePermissionOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CreatePermissionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreatePermissionOutput) GoString() string { - return s.String() -} - -// Contains configuration information for a certificate revocation list (CRL). -// Your private certificate authority (CA) creates base CRLs. Delta CRLs are -// not supported. You can enable CRLs for your new or an existing private CA -// by setting the Enabled parameter to true. Your private CA writes CRLs to -// an S3 bucket that you specify in the S3BucketName parameter. You can hide -// the name of your bucket by specifying a value for the CustomCname parameter. -// Your private CA copies the CNAME or the S3 bucket name to the CRL Distribution -// Points extension of each certificate it issues. Your S3 bucket policy must -// give write permission to ACM Private CA. -// -// Your private CA uses the value in the ExpirationInDays parameter to calculate -// the nextUpdate field in the CRL. The CRL is refreshed at 1/2 the age of next -// update or when a certificate is revoked. When a certificate is revoked, it -// is recorded in the next CRL that is generated and in the next audit report. -// Only time valid certificates are listed in the CRL. Expired certificates -// are not included. -// -// CRLs contain the following fields: -// -// * Version: The current version number defined in RFC 5280 is V2. The integer -// value is 0x1. -// -// * Signature Algorithm: The name of the algorithm used to sign the CRL. -// -// * Issuer: The X.500 distinguished name of your private CA that issued -// the CRL. -// -// * Last Update: The issue date and time of this CRL. -// -// * Next Update: The day and time by which the next CRL will be issued. -// -// * Revoked Certificates: List of revoked certificates. Each list item contains -// the following information. Serial Number: The serial number, in hexadecimal -// format, of the revoked certificate. Revocation Date: Date and time the -// certificate was revoked. CRL Entry Extensions: Optional extensions for -// the CRL entry. X509v3 CRL Reason Code: Reason the certificate was revoked. -// -// * CRL Extensions: Optional extensions for the CRL. X509v3 Authority Key -// Identifier: Identifies the public key associated with the private key -// used to sign the certificate. X509v3 CRL Number:: Decimal sequence number -// for the CRL. -// -// * Signature Algorithm: Algorithm used by your private CA to sign the CRL. -// -// * Signature Value: Signature computed over the CRL. -// -// Certificate revocation lists created by ACM Private CA are DER-encoded. You -// can use the following OpenSSL command to list a CRL. -// -// openssl crl -inform DER -text -in crl_path -noout -type CrlConfiguration struct { - _ struct{} `type:"structure"` - - // Name inserted into the certificate CRL Distribution Points extension that - // enables the use of an alias for the CRL distribution point. Use this value - // if you don't want the name of your S3 bucket to be public. - CustomCname *string `type:"string"` - - // Boolean value that specifies whether certificate revocation lists (CRLs) - // are enabled. You can use this value to enable certificate revocation for - // a new CA when you call the CreateCertificateAuthority action or for an existing - // CA when you call the UpdateCertificateAuthority action. - // - // Enabled is a required field - Enabled *bool `type:"boolean" required:"true"` - - // Number of days until a certificate expires. - ExpirationInDays *int64 `min:"1" type:"integer"` - - // Name of the S3 bucket that contains the CRL. If you do not provide a value - // for the CustomCname argument, the name of your S3 bucket is placed into the - // CRL Distribution Points extension of the issued certificate. You can change - // the name of your bucket by calling the UpdateCertificateAuthority action. - // You must specify a bucket policy that allows ACM Private CA to write the - // CRL to your bucket. - S3BucketName *string `min:"3" type:"string"` -} - -// String returns the string representation -func (s CrlConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CrlConfiguration) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CrlConfiguration) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CrlConfiguration"} - if s.Enabled == nil { - invalidParams.Add(request.NewErrParamRequired("Enabled")) - } - if s.ExpirationInDays != nil && *s.ExpirationInDays < 1 { - invalidParams.Add(request.NewErrParamMinValue("ExpirationInDays", 1)) - } - if s.S3BucketName != nil && len(*s.S3BucketName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("S3BucketName", 3)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCustomCname sets the CustomCname field's value. -func (s *CrlConfiguration) SetCustomCname(v string) *CrlConfiguration { - s.CustomCname = &v - return s -} - -// SetEnabled sets the Enabled field's value. -func (s *CrlConfiguration) SetEnabled(v bool) *CrlConfiguration { - s.Enabled = &v - return s -} - -// SetExpirationInDays sets the ExpirationInDays field's value. -func (s *CrlConfiguration) SetExpirationInDays(v int64) *CrlConfiguration { - s.ExpirationInDays = &v - return s -} - -// SetS3BucketName sets the S3BucketName field's value. -func (s *CrlConfiguration) SetS3BucketName(v string) *CrlConfiguration { - s.S3BucketName = &v - return s -} - -type DeleteCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must have the following form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // The number of days to make a CA restorable after it has been deleted. This - // can be anywhere from 7 to 30 days, with 30 being the default. - PermanentDeletionTimeInDays *int64 `min:"7" type:"integer"` -} - -// String returns the string representation -func (s DeleteCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteCertificateAuthorityInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.PermanentDeletionTimeInDays != nil && *s.PermanentDeletionTimeInDays < 7 { - invalidParams.Add(request.NewErrParamMinValue("PermanentDeletionTimeInDays", 7)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *DeleteCertificateAuthorityInput) SetCertificateAuthorityArn(v string) *DeleteCertificateAuthorityInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetPermanentDeletionTimeInDays sets the PermanentDeletionTimeInDays field's value. -func (s *DeleteCertificateAuthorityInput) SetPermanentDeletionTimeInDays(v int64) *DeleteCertificateAuthorityInput { - s.PermanentDeletionTimeInDays = &v - return s -} - -type DeleteCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteCertificateAuthorityOutput) GoString() string { - return s.String() -} - -type DeletePermissionInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Number (ARN) of the private CA that issued the permissions. - // You can find the CA's ARN by calling the ListCertificateAuthorities action. - // This must have the following form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // The AWS service or identity that will have its CA permissions revoked. At - // this time, the only valid service principal is acm.amazonaws.com - // - // Principal is a required field - Principal *string `type:"string" required:"true"` - - // The AWS account that calls this action. - SourceAccount *string `min:"12" type:"string"` -} - -// String returns the string representation -func (s DeletePermissionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeletePermissionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeletePermissionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeletePermissionInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.Principal == nil { - invalidParams.Add(request.NewErrParamRequired("Principal")) - } - if s.SourceAccount != nil && len(*s.SourceAccount) < 12 { - invalidParams.Add(request.NewErrParamMinLen("SourceAccount", 12)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *DeletePermissionInput) SetCertificateAuthorityArn(v string) *DeletePermissionInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetPrincipal sets the Principal field's value. -func (s *DeletePermissionInput) SetPrincipal(v string) *DeletePermissionInput { - s.Principal = &v - return s -} - -// SetSourceAccount sets the SourceAccount field's value. -func (s *DeletePermissionInput) SetSourceAccount(v string) *DeletePermissionInput { - s.SourceAccount = &v - return s -} - -type DeletePermissionOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeletePermissionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeletePermissionOutput) GoString() string { - return s.String() -} - -type DescribeCertificateAuthorityAuditReportInput struct { - _ struct{} `type:"structure"` - - // The report ID returned by calling the CreateCertificateAuthorityAuditReport - // action. - // - // AuditReportId is a required field - AuditReportId *string `min:"36" type:"string" required:"true"` - - // The Amazon Resource Name (ARN) of the private CA. This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeCertificateAuthorityAuditReportInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCertificateAuthorityAuditReportInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeCertificateAuthorityAuditReportInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeCertificateAuthorityAuditReportInput"} - if s.AuditReportId == nil { - invalidParams.Add(request.NewErrParamRequired("AuditReportId")) - } - if s.AuditReportId != nil && len(*s.AuditReportId) < 36 { - invalidParams.Add(request.NewErrParamMinLen("AuditReportId", 36)) - } - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAuditReportId sets the AuditReportId field's value. -func (s *DescribeCertificateAuthorityAuditReportInput) SetAuditReportId(v string) *DescribeCertificateAuthorityAuditReportInput { - s.AuditReportId = &v - return s -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *DescribeCertificateAuthorityAuditReportInput) SetCertificateAuthorityArn(v string) *DescribeCertificateAuthorityAuditReportInput { - s.CertificateAuthorityArn = &v - return s -} - -type DescribeCertificateAuthorityAuditReportOutput struct { - _ struct{} `type:"structure"` - - // Specifies whether report creation is in progress, has succeeded, or has failed. - AuditReportStatus *string `type:"string" enum:"AuditReportStatus"` - - // The date and time at which the report was created. - CreatedAt *time.Time `type:"timestamp"` - - // Name of the S3 bucket that contains the report. - S3BucketName *string `type:"string"` - - // S3 key that uniquely identifies the report file in your S3 bucket. - S3Key *string `type:"string"` -} - -// String returns the string representation -func (s DescribeCertificateAuthorityAuditReportOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCertificateAuthorityAuditReportOutput) GoString() string { - return s.String() -} - -// SetAuditReportStatus sets the AuditReportStatus field's value. -func (s *DescribeCertificateAuthorityAuditReportOutput) SetAuditReportStatus(v string) *DescribeCertificateAuthorityAuditReportOutput { - s.AuditReportStatus = &v - return s -} - -// SetCreatedAt sets the CreatedAt field's value. -func (s *DescribeCertificateAuthorityAuditReportOutput) SetCreatedAt(v time.Time) *DescribeCertificateAuthorityAuditReportOutput { - s.CreatedAt = &v - return s -} - -// SetS3BucketName sets the S3BucketName field's value. -func (s *DescribeCertificateAuthorityAuditReportOutput) SetS3BucketName(v string) *DescribeCertificateAuthorityAuditReportOutput { - s.S3BucketName = &v - return s -} - -// SetS3Key sets the S3Key field's value. -func (s *DescribeCertificateAuthorityAuditReportOutput) SetS3Key(v string) *DescribeCertificateAuthorityAuditReportOutput { - s.S3Key = &v - return s -} - -type DescribeCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeCertificateAuthorityInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *DescribeCertificateAuthorityInput) SetCertificateAuthorityArn(v string) *DescribeCertificateAuthorityInput { - s.CertificateAuthorityArn = &v - return s -} - -type DescribeCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` - - // A CertificateAuthority structure that contains information about your private - // CA. - CertificateAuthority *CertificateAuthority `type:"structure"` -} - -// String returns the string representation -func (s DescribeCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCertificateAuthorityOutput) GoString() string { - return s.String() -} - -// SetCertificateAuthority sets the CertificateAuthority field's value. -func (s *DescribeCertificateAuthorityOutput) SetCertificateAuthority(v *CertificateAuthority) *DescribeCertificateAuthorityOutput { - s.CertificateAuthority = v - return s -} - -type GetCertificateAuthorityCertificateInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of your private CA. This is of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` -} - -// String returns the string representation -func (s GetCertificateAuthorityCertificateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCertificateAuthorityCertificateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetCertificateAuthorityCertificateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetCertificateAuthorityCertificateInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *GetCertificateAuthorityCertificateInput) SetCertificateAuthorityArn(v string) *GetCertificateAuthorityCertificateInput { - s.CertificateAuthorityArn = &v - return s -} - -type GetCertificateAuthorityCertificateOutput struct { - _ struct{} `type:"structure"` - - // Base64-encoded certificate authority (CA) certificate. - Certificate *string `type:"string"` - - // Base64-encoded certificate chain that includes any intermediate certificates - // and chains up to root on-premises certificate that you used to sign your - // private CA certificate. The chain does not include your private CA certificate. - // If this is a root CA, the value will be null. - CertificateChain *string `type:"string"` -} - -// String returns the string representation -func (s GetCertificateAuthorityCertificateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCertificateAuthorityCertificateOutput) GoString() string { - return s.String() -} - -// SetCertificate sets the Certificate field's value. -func (s *GetCertificateAuthorityCertificateOutput) SetCertificate(v string) *GetCertificateAuthorityCertificateOutput { - s.Certificate = &v - return s -} - -// SetCertificateChain sets the CertificateChain field's value. -func (s *GetCertificateAuthorityCertificateOutput) SetCertificateChain(v string) *GetCertificateAuthorityCertificateOutput { - s.CertificateChain = &v - return s -} - -type GetCertificateAuthorityCsrInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called the CreateCertificateAuthority - // action. This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` -} - -// String returns the string representation -func (s GetCertificateAuthorityCsrInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCertificateAuthorityCsrInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetCertificateAuthorityCsrInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetCertificateAuthorityCsrInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *GetCertificateAuthorityCsrInput) SetCertificateAuthorityArn(v string) *GetCertificateAuthorityCsrInput { - s.CertificateAuthorityArn = &v - return s -} - -type GetCertificateAuthorityCsrOutput struct { - _ struct{} `type:"structure"` - - // The base64 PEM-encoded certificate signing request (CSR) for your private - // CA certificate. - Csr *string `type:"string"` -} - -// String returns the string representation -func (s GetCertificateAuthorityCsrOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCertificateAuthorityCsrOutput) GoString() string { - return s.String() -} - -// SetCsr sets the Csr field's value. -func (s *GetCertificateAuthorityCsrOutput) SetCsr(v string) *GetCertificateAuthorityCsrOutput { - s.Csr = &v - return s -} - -type GetCertificateInput struct { - _ struct{} `type:"structure"` - - // The ARN of the issued certificate. The ARN contains the certificate serial - // number and must be in the following form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/286535153982981100925020015808220737245 - // - // CertificateArn is a required field - CertificateArn *string `min:"5" type:"string" required:"true"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 . - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` -} - -// String returns the string representation -func (s GetCertificateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCertificateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetCertificateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetCertificateInput"} - if s.CertificateArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateArn")) - } - if s.CertificateArn != nil && len(*s.CertificateArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateArn", 5)) - } - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateArn sets the CertificateArn field's value. -func (s *GetCertificateInput) SetCertificateArn(v string) *GetCertificateInput { - s.CertificateArn = &v - return s -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *GetCertificateInput) SetCertificateAuthorityArn(v string) *GetCertificateInput { - s.CertificateAuthorityArn = &v - return s -} - -type GetCertificateOutput struct { - _ struct{} `type:"structure"` - - // The base64 PEM-encoded certificate specified by the CertificateArn parameter. - Certificate *string `type:"string"` - - // The base64 PEM-encoded certificate chain that chains up to the on-premises - // root CA certificate that you used to sign your private CA certificate. - CertificateChain *string `type:"string"` -} - -// String returns the string representation -func (s GetCertificateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCertificateOutput) GoString() string { - return s.String() -} - -// SetCertificate sets the Certificate field's value. -func (s *GetCertificateOutput) SetCertificate(v string) *GetCertificateOutput { - s.Certificate = &v - return s -} - -// SetCertificateChain sets the CertificateChain field's value. -func (s *GetCertificateOutput) SetCertificateChain(v string) *GetCertificateOutput { - s.CertificateChain = &v - return s -} - -type ImportCertificateAuthorityCertificateInput struct { - _ struct{} `type:"structure"` - - // The PEM-encoded certificate for a private CA. This may be a self-signed certificate - // in the case of a root CA, or it may be signed by another CA that you control. - // - // Certificate is automatically base64 encoded/decoded by the SDK. - // - // Certificate is a required field - Certificate []byte `min:"1" type:"blob" required:"true"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // A PEM-encoded file that contains all of your certificates, other than the - // certificate you're importing, chaining up to your root CA. Your ACM Private - // CA-hosted or on-premises root certificate is the last in the chain, and each - // certificate in the chain signs the one preceding. - // - // This parameter must be supplied when you import a subordinate CA. When you - // import a root CA, there is no chain. - // - // CertificateChain is automatically base64 encoded/decoded by the SDK. - CertificateChain []byte `type:"blob"` -} - -// String returns the string representation -func (s ImportCertificateAuthorityCertificateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportCertificateAuthorityCertificateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ImportCertificateAuthorityCertificateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportCertificateAuthorityCertificateInput"} - if s.Certificate == nil { - invalidParams.Add(request.NewErrParamRequired("Certificate")) - } - if s.Certificate != nil && len(s.Certificate) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Certificate", 1)) - } - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificate sets the Certificate field's value. -func (s *ImportCertificateAuthorityCertificateInput) SetCertificate(v []byte) *ImportCertificateAuthorityCertificateInput { - s.Certificate = v - return s -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *ImportCertificateAuthorityCertificateInput) SetCertificateAuthorityArn(v string) *ImportCertificateAuthorityCertificateInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetCertificateChain sets the CertificateChain field's value. -func (s *ImportCertificateAuthorityCertificateInput) SetCertificateChain(v []byte) *ImportCertificateAuthorityCertificateInput { - s.CertificateChain = v - return s -} - -type ImportCertificateAuthorityCertificateOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ImportCertificateAuthorityCertificateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportCertificateAuthorityCertificateOutput) GoString() string { - return s.String() -} - -type IssueCertificateInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // The certificate signing request (CSR) for the certificate you want to issue. - // You can use the following OpenSSL command to create the CSR and a 2048 bit - // RSA private key. - // - // openssl req -new -newkey rsa:2048 -days 365 -keyout private/test_cert_priv_key.pem - // -out csr/test_cert_.csr - // - // If you have a configuration file, you can use the following OpenSSL command. - // The usr_cert block in the configuration file contains your X509 version 3 - // extensions. - // - // openssl req -new -config openssl_rsa.cnf -extensions usr_cert -newkey rsa:2048 - // -days -365 -keyout private/test_cert_priv_key.pem -out csr/test_cert_.csr - // - // Csr is automatically base64 encoded/decoded by the SDK. - // - // Csr is a required field - Csr []byte `min:"1" type:"blob" required:"true"` - - // Custom string that can be used to distinguish between calls to the IssueCertificate - // action. Idempotency tokens time out after one hour. Therefore, if you call - // IssueCertificate multiple times with the same idempotency token within 5 - // minutes, ACM Private CA recognizes that you are requesting only one certificate - // and will issue only one. If you change the idempotency token for each call, - // PCA recognizes that you are requesting multiple certificates. - IdempotencyToken *string `min:"1" type:"string"` - - // The name of the algorithm that will be used to sign the certificate to be - // issued. - // - // SigningAlgorithm is a required field - SigningAlgorithm *string `type:"string" required:"true" enum:"SigningAlgorithm"` - - // Specifies a custom configuration template to use when issuing a certificate. - // If this parameter is not provided, ACM Private CA defaults to the EndEntityCertificate/V1 - // template. - // - // The following service-owned TemplateArn values are supported by ACM Private - // CA: - // - // * arn:aws:acm-pca:::template/EndEntityCertificate/V1 - // - // * arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen0/V1 - // - // * arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen1/V1 - // - // * arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen2/V1 - // - // * arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen3/V1 - // - // * arn:aws:acm-pca:::template/RootCACertificate/V1 - // - // For more information, see Using Templates (https://docs.aws.amazon.com/acm-pca/latest/userguide/UsingTemplates.html). - TemplateArn *string `min:"5" type:"string"` - - // The type of the validity period. - // - // Validity is a required field - Validity *Validity `type:"structure" required:"true"` -} - -// String returns the string representation -func (s IssueCertificateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IssueCertificateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *IssueCertificateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "IssueCertificateInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.Csr == nil { - invalidParams.Add(request.NewErrParamRequired("Csr")) - } - if s.Csr != nil && len(s.Csr) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Csr", 1)) - } - if s.IdempotencyToken != nil && len(*s.IdempotencyToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("IdempotencyToken", 1)) - } - if s.SigningAlgorithm == nil { - invalidParams.Add(request.NewErrParamRequired("SigningAlgorithm")) - } - if s.TemplateArn != nil && len(*s.TemplateArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("TemplateArn", 5)) - } - if s.Validity == nil { - invalidParams.Add(request.NewErrParamRequired("Validity")) - } - if s.Validity != nil { - if err := s.Validity.Validate(); err != nil { - invalidParams.AddNested("Validity", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *IssueCertificateInput) SetCertificateAuthorityArn(v string) *IssueCertificateInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetCsr sets the Csr field's value. -func (s *IssueCertificateInput) SetCsr(v []byte) *IssueCertificateInput { - s.Csr = v - return s -} - -// SetIdempotencyToken sets the IdempotencyToken field's value. -func (s *IssueCertificateInput) SetIdempotencyToken(v string) *IssueCertificateInput { - s.IdempotencyToken = &v - return s -} - -// SetSigningAlgorithm sets the SigningAlgorithm field's value. -func (s *IssueCertificateInput) SetSigningAlgorithm(v string) *IssueCertificateInput { - s.SigningAlgorithm = &v - return s -} - -// SetTemplateArn sets the TemplateArn field's value. -func (s *IssueCertificateInput) SetTemplateArn(v string) *IssueCertificateInput { - s.TemplateArn = &v - return s -} - -// SetValidity sets the Validity field's value. -func (s *IssueCertificateInput) SetValidity(v *Validity) *IssueCertificateInput { - s.Validity = v - return s -} - -type IssueCertificateOutput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the issued certificate and the certificate - // serial number. This is of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/286535153982981100925020015808220737245 - CertificateArn *string `min:"5" type:"string"` -} - -// String returns the string representation -func (s IssueCertificateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IssueCertificateOutput) GoString() string { - return s.String() -} - -// SetCertificateArn sets the CertificateArn field's value. -func (s *IssueCertificateOutput) SetCertificateArn(v string) *IssueCertificateOutput { - s.CertificateArn = &v - return s -} - -type ListCertificateAuthoritiesInput struct { - _ struct{} `type:"structure"` - - // Use this parameter when paginating results to specify the maximum number - // of items to return in the response on each page. If additional items exist - // beyond the number you specify, the NextToken element is sent in the response. - // Use this NextToken value in a subsequent request to retrieve additional items. - MaxResults *int64 `min:"1" type:"integer"` - - // Use this parameter when paginating results in a subsequent request after - // you receive a response with truncated results. Set it to the value of the - // NextToken parameter from the response you just received. - NextToken *string `min:"1" type:"string"` -} - -// String returns the string representation -func (s ListCertificateAuthoritiesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ListCertificateAuthoritiesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ListCertificateAuthoritiesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ListCertificateAuthoritiesInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetMaxResults sets the MaxResults field's value. -func (s *ListCertificateAuthoritiesInput) SetMaxResults(v int64) *ListCertificateAuthoritiesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *ListCertificateAuthoritiesInput) SetNextToken(v string) *ListCertificateAuthoritiesInput { - s.NextToken = &v - return s -} - -type ListCertificateAuthoritiesOutput struct { - _ struct{} `type:"structure"` - - // Summary information about each certificate authority you have created. - CertificateAuthorities []*CertificateAuthority `type:"list"` - - // When the list is truncated, this value is present and should be used for - // the NextToken parameter in a subsequent pagination request. - NextToken *string `min:"1" type:"string"` -} - -// String returns the string representation -func (s ListCertificateAuthoritiesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ListCertificateAuthoritiesOutput) GoString() string { - return s.String() -} - -// SetCertificateAuthorities sets the CertificateAuthorities field's value. -func (s *ListCertificateAuthoritiesOutput) SetCertificateAuthorities(v []*CertificateAuthority) *ListCertificateAuthoritiesOutput { - s.CertificateAuthorities = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *ListCertificateAuthoritiesOutput) SetNextToken(v string) *ListCertificateAuthoritiesOutput { - s.NextToken = &v - return s -} - -type ListPermissionsInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Number (ARN) of the private CA to inspect. You can find - // the ARN by calling the ListCertificateAuthorities action. This must be of - // the form: arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // You can get a private CA's ARN by running the ListCertificateAuthorities - // action. - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // When paginating results, use this parameter to specify the maximum number - // of items to return in the response. If additional items exist beyond the - // number you specify, the NextToken element is sent in the response. Use this - // NextToken value in a subsequent request to retrieve additional items. - MaxResults *int64 `min:"1" type:"integer"` - - // When paginating results, use this parameter in a subsequent request after - // you receive a response with truncated results. Set it to the value of NextToken - // from the response you just received. - NextToken *string `min:"1" type:"string"` -} - -// String returns the string representation -func (s ListPermissionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ListPermissionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ListPermissionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ListPermissionsInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *ListPermissionsInput) SetCertificateAuthorityArn(v string) *ListPermissionsInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *ListPermissionsInput) SetMaxResults(v int64) *ListPermissionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *ListPermissionsInput) SetNextToken(v string) *ListPermissionsInput { - s.NextToken = &v - return s -} - -type ListPermissionsOutput struct { - _ struct{} `type:"structure"` - - // When the list is truncated, this value is present and should be used for - // the NextToken parameter in a subsequent pagination request. - NextToken *string `min:"1" type:"string"` - - // Summary information about each permission assigned by the specified private - // CA, including the action enabled, the policy provided, and the time of creation. - Permissions []*Permission `type:"list"` -} - -// String returns the string representation -func (s ListPermissionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ListPermissionsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *ListPermissionsOutput) SetNextToken(v string) *ListPermissionsOutput { - s.NextToken = &v - return s -} - -// SetPermissions sets the Permissions field's value. -func (s *ListPermissionsOutput) SetPermissions(v []*Permission) *ListPermissionsOutput { - s.Permissions = v - return s -} - -type ListTagsInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called the CreateCertificateAuthority - // action. This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // Use this parameter when paginating results to specify the maximum number - // of items to return in the response. If additional items exist beyond the - // number you specify, the NextToken element is sent in the response. Use this - // NextToken value in a subsequent request to retrieve additional items. - MaxResults *int64 `min:"1" type:"integer"` - - // Use this parameter when paginating results in a subsequent request after - // you receive a response with truncated results. Set it to the value of NextToken - // from the response you just received. - NextToken *string `min:"1" type:"string"` -} - -// String returns the string representation -func (s ListTagsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ListTagsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ListTagsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ListTagsInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *ListTagsInput) SetCertificateAuthorityArn(v string) *ListTagsInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *ListTagsInput) SetMaxResults(v int64) *ListTagsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *ListTagsInput) SetNextToken(v string) *ListTagsInput { - s.NextToken = &v - return s -} - -type ListTagsOutput struct { - _ struct{} `type:"structure"` - - // When the list is truncated, this value is present and should be used for - // the NextToken parameter in a subsequent pagination request. - NextToken *string `min:"1" type:"string"` - - // The tags associated with your private CA. - Tags []*Tag `min:"1" type:"list"` -} - -// String returns the string representation -func (s ListTagsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ListTagsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *ListTagsOutput) SetNextToken(v string) *ListTagsOutput { - s.NextToken = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *ListTagsOutput) SetTags(v []*Tag) *ListTagsOutput { - s.Tags = v - return s -} - -// Permissions designate which private CA actions can be performed by an AWS -// service or entity. In order for ACM to automatically renew private certificates, -// you must give the ACM service principal all available permissions (IssueCertificate, -// GetCertificate, and ListPermissions). Permissions can be assigned with the -// CreatePermission action, removed with the DeletePermission action, and listed -// with the ListPermissions action. -type Permission struct { - _ struct{} `type:"structure"` - - // The private CA actions that can be performed by the designated AWS service. - Actions []*string `min:"1" type:"list"` - - // The Amazon Resource Number (ARN) of the private CA from which the permission - // was issued. - CertificateAuthorityArn *string `min:"5" type:"string"` - - // The time at which the permission was created. - CreatedAt *time.Time `type:"timestamp"` - - // The name of the policy that is associated with the permission. - Policy *string `type:"string"` - - // The AWS service or entity that holds the permission. At this time, the only - // valid principal is acm.amazonaws.com. - Principal *string `type:"string"` - - // The ID of the account that assigned the permission. - SourceAccount *string `type:"string"` -} - -// String returns the string representation -func (s Permission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Permission) GoString() string { - return s.String() -} - -// SetActions sets the Actions field's value. -func (s *Permission) SetActions(v []*string) *Permission { - s.Actions = v - return s -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *Permission) SetCertificateAuthorityArn(v string) *Permission { - s.CertificateAuthorityArn = &v - return s -} - -// SetCreatedAt sets the CreatedAt field's value. -func (s *Permission) SetCreatedAt(v time.Time) *Permission { - s.CreatedAt = &v - return s -} - -// SetPolicy sets the Policy field's value. -func (s *Permission) SetPolicy(v string) *Permission { - s.Policy = &v - return s -} - -// SetPrincipal sets the Principal field's value. -func (s *Permission) SetPrincipal(v string) *Permission { - s.Principal = &v - return s -} - -// SetSourceAccount sets the SourceAccount field's value. -func (s *Permission) SetSourceAccount(v string) *Permission { - s.SourceAccount = &v - return s -} - -type RestoreCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called the CreateCertificateAuthority - // action. This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` -} - -// String returns the string representation -func (s RestoreCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RestoreCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RestoreCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RestoreCertificateAuthorityInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *RestoreCertificateAuthorityInput) SetCertificateAuthorityArn(v string) *RestoreCertificateAuthorityInput { - s.CertificateAuthorityArn = &v - return s -} - -type RestoreCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RestoreCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RestoreCertificateAuthorityOutput) GoString() string { - return s.String() -} - -// Certificate revocation information used by the CreateCertificateAuthority -// and UpdateCertificateAuthority actions. Your private certificate authority -// (CA) can create and maintain a certificate revocation list (CRL). A CRL contains -// information about certificates revoked by your CA. For more information, -// see RevokeCertificate. -type RevocationConfiguration struct { - _ struct{} `type:"structure"` - - // Configuration of the certificate revocation list (CRL), if any, maintained - // by your private CA. - CrlConfiguration *CrlConfiguration `type:"structure"` -} - -// String returns the string representation -func (s RevocationConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevocationConfiguration) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RevocationConfiguration) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RevocationConfiguration"} - if s.CrlConfiguration != nil { - if err := s.CrlConfiguration.Validate(); err != nil { - invalidParams.AddNested("CrlConfiguration", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCrlConfiguration sets the CrlConfiguration field's value. -func (s *RevocationConfiguration) SetCrlConfiguration(v *CrlConfiguration) *RevocationConfiguration { - s.CrlConfiguration = v - return s -} - -type RevokeCertificateInput struct { - _ struct{} `type:"structure"` - - // Amazon Resource Name (ARN) of the private CA that issued the certificate - // to be revoked. This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // Serial number of the certificate to be revoked. This must be in hexadecimal - // format. You can retrieve the serial number by calling GetCertificate with - // the Amazon Resource Name (ARN) of the certificate you want and the ARN of - // your private CA. The GetCertificate action retrieves the certificate in the - // PEM format. You can use the following OpenSSL command to list the certificate - // in text format and copy the hexadecimal serial number. - // - // openssl x509 -in file_path -text -noout - // - // You can also copy the serial number from the console or use the DescribeCertificate - // (https://docs.aws.amazon.com/acm/latest/APIReference/API_DescribeCertificate.html) - // action in the AWS Certificate Manager API Reference. - // - // CertificateSerial is a required field - CertificateSerial *string `type:"string" required:"true"` - - // Specifies why you revoked the certificate. - // - // RevocationReason is a required field - RevocationReason *string `type:"string" required:"true" enum:"RevocationReason"` -} - -// String returns the string representation -func (s RevokeCertificateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeCertificateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RevokeCertificateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RevokeCertificateInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.CertificateSerial == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateSerial")) - } - if s.RevocationReason == nil { - invalidParams.Add(request.NewErrParamRequired("RevocationReason")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *RevokeCertificateInput) SetCertificateAuthorityArn(v string) *RevokeCertificateInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetCertificateSerial sets the CertificateSerial field's value. -func (s *RevokeCertificateInput) SetCertificateSerial(v string) *RevokeCertificateInput { - s.CertificateSerial = &v - return s -} - -// SetRevocationReason sets the RevocationReason field's value. -func (s *RevokeCertificateInput) SetRevocationReason(v string) *RevokeCertificateInput { - s.RevocationReason = &v - return s -} - -type RevokeCertificateOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RevokeCertificateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeCertificateOutput) GoString() string { - return s.String() -} - -// Tags are labels that you can use to identify and organize your private CAs. -// Each tag consists of a key and an optional value. You can associate up to -// 50 tags with a private CA. To add one or more tags to a private CA, call -// the TagCertificateAuthority action. To remove a tag, call the UntagCertificateAuthority -// action. -type Tag struct { - _ struct{} `type:"structure"` - - // Key (name) of the tag. - // - // Key is a required field - Key *string `min:"1" type:"string" required:"true"` - - // Value of the tag. - Value *string `type:"string"` -} - -// String returns the string representation -func (s Tag) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Tag) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *Tag) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "Tag"} - if s.Key == nil { - invalidParams.Add(request.NewErrParamRequired("Key")) - } - if s.Key != nil && len(*s.Key) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Key", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetKey sets the Key field's value. -func (s *Tag) SetKey(v string) *Tag { - s.Key = &v - return s -} - -// SetValue sets the Value field's value. -func (s *Tag) SetValue(v string) *Tag { - s.Value = &v - return s -} - -type TagCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // List of tags to be associated with the CA. - // - // Tags is a required field - Tags []*Tag `min:"1" type:"list" required:"true"` -} - -// String returns the string representation -func (s TagCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TagCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *TagCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TagCertificateAuthorityInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.Tags == nil { - invalidParams.Add(request.NewErrParamRequired("Tags")) - } - if s.Tags != nil && len(s.Tags) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Tags", 1)) - } - if s.Tags != nil { - for i, v := range s.Tags { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *TagCertificateAuthorityInput) SetCertificateAuthorityArn(v string) *TagCertificateAuthorityInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TagCertificateAuthorityInput) SetTags(v []*Tag) *TagCertificateAuthorityInput { - s.Tags = v - return s -} - -type TagCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s TagCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TagCertificateAuthorityOutput) GoString() string { - return s.String() -} - -type UntagCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) that was returned when you called CreateCertificateAuthority. - // This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // List of tags to be removed from the CA. - // - // Tags is a required field - Tags []*Tag `min:"1" type:"list" required:"true"` -} - -// String returns the string representation -func (s UntagCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UntagCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UntagCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UntagCertificateAuthorityInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.Tags == nil { - invalidParams.Add(request.NewErrParamRequired("Tags")) - } - if s.Tags != nil && len(s.Tags) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Tags", 1)) - } - if s.Tags != nil { - for i, v := range s.Tags { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *UntagCertificateAuthorityInput) SetCertificateAuthorityArn(v string) *UntagCertificateAuthorityInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *UntagCertificateAuthorityInput) SetTags(v []*Tag) *UntagCertificateAuthorityInput { - s.Tags = v - return s -} - -type UntagCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s UntagCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UntagCertificateAuthorityOutput) GoString() string { - return s.String() -} - -type UpdateCertificateAuthorityInput struct { - _ struct{} `type:"structure"` - - // Amazon Resource Name (ARN) of the private CA that issued the certificate - // to be revoked. This must be of the form: - // - // arn:aws:acm-pca:region:account:certificate-authority/12345678-1234-1234-1234-123456789012 - // - // CertificateAuthorityArn is a required field - CertificateAuthorityArn *string `min:"5" type:"string" required:"true"` - - // Revocation information for your private CA. - RevocationConfiguration *RevocationConfiguration `type:"structure"` - - // Status of your private CA. - Status *string `type:"string" enum:"CertificateAuthorityStatus"` -} - -// String returns the string representation -func (s UpdateCertificateAuthorityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UpdateCertificateAuthorityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UpdateCertificateAuthorityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UpdateCertificateAuthorityInput"} - if s.CertificateAuthorityArn == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateAuthorityArn")) - } - if s.CertificateAuthorityArn != nil && len(*s.CertificateAuthorityArn) < 5 { - invalidParams.Add(request.NewErrParamMinLen("CertificateAuthorityArn", 5)) - } - if s.RevocationConfiguration != nil { - if err := s.RevocationConfiguration.Validate(); err != nil { - invalidParams.AddNested("RevocationConfiguration", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateAuthorityArn sets the CertificateAuthorityArn field's value. -func (s *UpdateCertificateAuthorityInput) SetCertificateAuthorityArn(v string) *UpdateCertificateAuthorityInput { - s.CertificateAuthorityArn = &v - return s -} - -// SetRevocationConfiguration sets the RevocationConfiguration field's value. -func (s *UpdateCertificateAuthorityInput) SetRevocationConfiguration(v *RevocationConfiguration) *UpdateCertificateAuthorityInput { - s.RevocationConfiguration = v - return s -} - -// SetStatus sets the Status field's value. -func (s *UpdateCertificateAuthorityInput) SetStatus(v string) *UpdateCertificateAuthorityInput { - s.Status = &v - return s -} - -type UpdateCertificateAuthorityOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s UpdateCertificateAuthorityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UpdateCertificateAuthorityOutput) GoString() string { - return s.String() -} - -// Length of time for which the certificate issued by your private certificate -// authority (CA), or by the private CA itself, is valid in days, months, or -// years. You can issue a certificate by calling the IssueCertificate action. -type Validity struct { - _ struct{} `type:"structure"` - - // Specifies whether the Value parameter represents days, months, or years. - // - // Type is a required field - Type *string `type:"string" required:"true" enum:"ValidityPeriodType"` - - // Time period. - // - // Value is a required field - Value *int64 `min:"1" type:"long" required:"true"` -} - -// String returns the string representation -func (s Validity) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Validity) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *Validity) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "Validity"} - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - if s.Value == nil { - invalidParams.Add(request.NewErrParamRequired("Value")) - } - if s.Value != nil && *s.Value < 1 { - invalidParams.Add(request.NewErrParamMinValue("Value", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetType sets the Type field's value. -func (s *Validity) SetType(v string) *Validity { - s.Type = &v - return s -} - -// SetValue sets the Value field's value. -func (s *Validity) SetValue(v int64) *Validity { - s.Value = &v - return s -} - -const ( - // ActionTypeIssueCertificate is a ActionType enum value - ActionTypeIssueCertificate = "IssueCertificate" - - // ActionTypeGetCertificate is a ActionType enum value - ActionTypeGetCertificate = "GetCertificate" - - // ActionTypeListPermissions is a ActionType enum value - ActionTypeListPermissions = "ListPermissions" -) - -const ( - // AuditReportResponseFormatJson is a AuditReportResponseFormat enum value - AuditReportResponseFormatJson = "JSON" - - // AuditReportResponseFormatCsv is a AuditReportResponseFormat enum value - AuditReportResponseFormatCsv = "CSV" -) - -const ( - // AuditReportStatusCreating is a AuditReportStatus enum value - AuditReportStatusCreating = "CREATING" - - // AuditReportStatusSuccess is a AuditReportStatus enum value - AuditReportStatusSuccess = "SUCCESS" - - // AuditReportStatusFailed is a AuditReportStatus enum value - AuditReportStatusFailed = "FAILED" -) - -const ( - // CertificateAuthorityStatusCreating is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusCreating = "CREATING" - - // CertificateAuthorityStatusPendingCertificate is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusPendingCertificate = "PENDING_CERTIFICATE" - - // CertificateAuthorityStatusActive is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusActive = "ACTIVE" - - // CertificateAuthorityStatusDeleted is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusDeleted = "DELETED" - - // CertificateAuthorityStatusDisabled is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusDisabled = "DISABLED" - - // CertificateAuthorityStatusExpired is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusExpired = "EXPIRED" - - // CertificateAuthorityStatusFailed is a CertificateAuthorityStatus enum value - CertificateAuthorityStatusFailed = "FAILED" -) - -const ( - // CertificateAuthorityTypeRoot is a CertificateAuthorityType enum value - CertificateAuthorityTypeRoot = "ROOT" - - // CertificateAuthorityTypeSubordinate is a CertificateAuthorityType enum value - CertificateAuthorityTypeSubordinate = "SUBORDINATE" -) - -const ( - // FailureReasonRequestTimedOut is a FailureReason enum value - FailureReasonRequestTimedOut = "REQUEST_TIMED_OUT" - - // FailureReasonUnsupportedAlgorithm is a FailureReason enum value - FailureReasonUnsupportedAlgorithm = "UNSUPPORTED_ALGORITHM" - - // FailureReasonOther is a FailureReason enum value - FailureReasonOther = "OTHER" -) - -const ( - // KeyAlgorithmRsa2048 is a KeyAlgorithm enum value - KeyAlgorithmRsa2048 = "RSA_2048" - - // KeyAlgorithmRsa4096 is a KeyAlgorithm enum value - KeyAlgorithmRsa4096 = "RSA_4096" - - // KeyAlgorithmEcPrime256v1 is a KeyAlgorithm enum value - KeyAlgorithmEcPrime256v1 = "EC_prime256v1" - - // KeyAlgorithmEcSecp384r1 is a KeyAlgorithm enum value - KeyAlgorithmEcSecp384r1 = "EC_secp384r1" -) - -const ( - // RevocationReasonUnspecified is a RevocationReason enum value - RevocationReasonUnspecified = "UNSPECIFIED" - - // RevocationReasonKeyCompromise is a RevocationReason enum value - RevocationReasonKeyCompromise = "KEY_COMPROMISE" - - // RevocationReasonCertificateAuthorityCompromise is a RevocationReason enum value - RevocationReasonCertificateAuthorityCompromise = "CERTIFICATE_AUTHORITY_COMPROMISE" - - // RevocationReasonAffiliationChanged is a RevocationReason enum value - RevocationReasonAffiliationChanged = "AFFILIATION_CHANGED" - - // RevocationReasonSuperseded is a RevocationReason enum value - RevocationReasonSuperseded = "SUPERSEDED" - - // RevocationReasonCessationOfOperation is a RevocationReason enum value - RevocationReasonCessationOfOperation = "CESSATION_OF_OPERATION" - - // RevocationReasonPrivilegeWithdrawn is a RevocationReason enum value - RevocationReasonPrivilegeWithdrawn = "PRIVILEGE_WITHDRAWN" - - // RevocationReasonAACompromise is a RevocationReason enum value - RevocationReasonAACompromise = "A_A_COMPROMISE" -) - -const ( - // SigningAlgorithmSha256withecdsa is a SigningAlgorithm enum value - SigningAlgorithmSha256withecdsa = "SHA256WITHECDSA" - - // SigningAlgorithmSha384withecdsa is a SigningAlgorithm enum value - SigningAlgorithmSha384withecdsa = "SHA384WITHECDSA" - - // SigningAlgorithmSha512withecdsa is a SigningAlgorithm enum value - SigningAlgorithmSha512withecdsa = "SHA512WITHECDSA" - - // SigningAlgorithmSha256withrsa is a SigningAlgorithm enum value - SigningAlgorithmSha256withrsa = "SHA256WITHRSA" - - // SigningAlgorithmSha384withrsa is a SigningAlgorithm enum value - SigningAlgorithmSha384withrsa = "SHA384WITHRSA" - - // SigningAlgorithmSha512withrsa is a SigningAlgorithm enum value - SigningAlgorithmSha512withrsa = "SHA512WITHRSA" -) - -const ( - // ValidityPeriodTypeEndDate is a ValidityPeriodType enum value - ValidityPeriodTypeEndDate = "END_DATE" - - // ValidityPeriodTypeAbsolute is a ValidityPeriodType enum value - ValidityPeriodTypeAbsolute = "ABSOLUTE" - - // ValidityPeriodTypeDays is a ValidityPeriodType enum value - ValidityPeriodTypeDays = "DAYS" - - // ValidityPeriodTypeMonths is a ValidityPeriodType enum value - ValidityPeriodTypeMonths = "MONTHS" - - // ValidityPeriodTypeYears is a ValidityPeriodType enum value - ValidityPeriodTypeYears = "YEARS" -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -// Package acmpca provides the client and types for making API -// requests to AWS Certificate Manager Private Certificate Authority. -// -// This is the ACM Private CA API Reference. It provides descriptions, syntax, -// and usage examples for each of the actions and data types involved in creating -// and managing private certificate authorities (CA) for your organization. -// -// The documentation for each action shows the Query API request parameters -// and the XML response. Alternatively, you can use one of the AWS SDKs to access -// an API that's tailored to the programming language or platform that you're -// using. For more information, see AWS SDKs (https://aws.amazon.com/tools/#SDKs). -// -// Each ACM Private CA API action has a throttling limit which determines the -// number of times the action can be called per second. For more information, -// see API Rate Limits in ACM Private CA (https://docs.aws.amazon.com/acm-pca/latest/userguide/PcaLimits.html#PcaLimits-api) -// in the ACM Private CA user guide. -// -// See https://docs.aws.amazon.com/goto/WebAPI/acm-pca-2017-08-22 for more information on this service. -// -// See acmpca package documentation for more information. -// https://docs.aws.amazon.com/sdk-for-go/api/service/acmpca/ -// -// Using the Client -// -// To contact AWS Certificate Manager Private Certificate Authority with the SDK use the New function to create -// a new service client. With that client you can make API requests to the service. -// These clients are safe to use concurrently. -// -// See the SDK's documentation for more information on how to use the SDK. -// https://docs.aws.amazon.com/sdk-for-go/api/ -// -// See aws.Config documentation for more information on configuring SDK clients. -// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config -// -// See the AWS Certificate Manager Private Certificate Authority client ACMPCA for more -// information on creating client for this service. -// https://docs.aws.amazon.com/sdk-for-go/api/service/acmpca/#New -package acmpca diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/errors.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/errors.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/errors.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package acmpca - -const ( - - // ErrCodeCertificateMismatchException for service response error code - // "CertificateMismatchException". - // - // The certificate authority certificate you are importing does not comply with - // conditions specified in the certificate that signed it. - ErrCodeCertificateMismatchException = "CertificateMismatchException" - - // ErrCodeConcurrentModificationException for service response error code - // "ConcurrentModificationException". - // - // A previous update to your private CA is still ongoing. - ErrCodeConcurrentModificationException = "ConcurrentModificationException" - - // ErrCodeInvalidArgsException for service response error code - // "InvalidArgsException". - // - // One or more of the specified arguments was not valid. - ErrCodeInvalidArgsException = "InvalidArgsException" - - // ErrCodeInvalidArnException for service response error code - // "InvalidArnException". - // - // The requested Amazon Resource Name (ARN) does not refer to an existing resource. - ErrCodeInvalidArnException = "InvalidArnException" - - // ErrCodeInvalidNextTokenException for service response error code - // "InvalidNextTokenException". - // - // The token specified in the NextToken argument is not valid. Use the token - // returned from your previous call to ListCertificateAuthorities. - ErrCodeInvalidNextTokenException = "InvalidNextTokenException" - - // ErrCodeInvalidPolicyException for service response error code - // "InvalidPolicyException". - // - // The S3 bucket policy is not valid. The policy must give ACM Private CA rights - // to read from and write to the bucket and find the bucket location. - ErrCodeInvalidPolicyException = "InvalidPolicyException" - - // ErrCodeInvalidRequestException for service response error code - // "InvalidRequestException". - // - // The request action cannot be performed or is prohibited. - ErrCodeInvalidRequestException = "InvalidRequestException" - - // ErrCodeInvalidStateException for service response error code - // "InvalidStateException". - // - // The private CA is in a state during which a report or certificate cannot - // be generated. - ErrCodeInvalidStateException = "InvalidStateException" - - // ErrCodeInvalidTagException for service response error code - // "InvalidTagException". - // - // The tag associated with the CA is not valid. The invalid argument is contained - // in the message field. - ErrCodeInvalidTagException = "InvalidTagException" - - // ErrCodeLimitExceededException for service response error code - // "LimitExceededException". - // - // An ACM Private CA limit has been exceeded. See the exception message returned - // to determine the limit that was exceeded. - ErrCodeLimitExceededException = "LimitExceededException" - - // ErrCodeMalformedCSRException for service response error code - // "MalformedCSRException". - // - // The certificate signing request is invalid. - ErrCodeMalformedCSRException = "MalformedCSRException" - - // ErrCodeMalformedCertificateException for service response error code - // "MalformedCertificateException". - // - // One or more fields in the certificate are invalid. - ErrCodeMalformedCertificateException = "MalformedCertificateException" - - // ErrCodePermissionAlreadyExistsException for service response error code - // "PermissionAlreadyExistsException". - // - // The designated permission has already been given to the user. - ErrCodePermissionAlreadyExistsException = "PermissionAlreadyExistsException" - - // ErrCodeRequestAlreadyProcessedException for service response error code - // "RequestAlreadyProcessedException". - // - // Your request has already been completed. - ErrCodeRequestAlreadyProcessedException = "RequestAlreadyProcessedException" - - // ErrCodeRequestFailedException for service response error code - // "RequestFailedException". - // - // The request has failed for an unspecified reason. - ErrCodeRequestFailedException = "RequestFailedException" - - // ErrCodeRequestInProgressException for service response error code - // "RequestInProgressException". - // - // Your request is already in progress. - ErrCodeRequestInProgressException = "RequestInProgressException" - - // ErrCodeResourceNotFoundException for service response error code - // "ResourceNotFoundException". - // - // A resource such as a private CA, S3 bucket, certificate, or audit report - // cannot be found. - ErrCodeResourceNotFoundException = "ResourceNotFoundException" - - // ErrCodeTooManyTagsException for service response error code - // "TooManyTagsException". - // - // You can associate up to 50 tags with a private CA. Exception information - // is contained in the exception message field. - ErrCodeTooManyTagsException = "TooManyTagsException" -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/service.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/service.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/service.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package acmpca - -import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/aws/signer/v4" - "github.com/aws/aws-sdk-go/private/protocol/jsonrpc" -) - -// ACMPCA provides the API operation methods for making requests to -// AWS Certificate Manager Private Certificate Authority. See this package's package overview docs -// for details on the service. -// -// ACMPCA methods are safe to use concurrently. It is not safe to -// modify mutate any of the struct's properties though. -type ACMPCA struct { - *client.Client -} - -// Used for custom client initialization logic -var initClient func(*client.Client) - -// Used for custom request initialization logic -var initRequest func(*request.Request) - -// Service information constants -const ( - ServiceName = "acm-pca" // Name of service. - EndpointsID = ServiceName // ID to lookup a service endpoint with. - ServiceID = "ACM PCA" // ServiceID is a unique identifer of a specific service. -) - -// New creates a new instance of the ACMPCA client with a session. -// If additional configuration is needed for the client instance use the optional -// aws.Config parameter to add your extra config. -// -// Example: -// mySession := session.Must(session.NewSession()) -// -// // Create a ACMPCA client from just a session. -// svc := acmpca.New(mySession) -// -// // Create a ACMPCA client with additional configuration -// svc := acmpca.New(mySession, aws.NewConfig().WithRegion("us-west-2")) -func New(p client.ConfigProvider, cfgs ...*aws.Config) *ACMPCA { - c := p.ClientConfig(EndpointsID, cfgs...) - return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) -} - -// newClient creates, initializes and returns a new service client instance. -func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *ACMPCA { - svc := &ACMPCA{ - Client: client.New( - cfg, - metadata.ClientInfo{ - ServiceName: ServiceName, - ServiceID: ServiceID, - SigningName: signingName, - SigningRegion: signingRegion, - PartitionID: partitionID, - Endpoint: endpoint, - APIVersion: "2017-08-22", - JSONVersion: "1.1", - TargetPrefix: "ACMPrivateCA", - }, - handlers, - ), - } - - // Handlers - svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) - svc.Handlers.Build.PushBackNamed(jsonrpc.BuildHandler) - svc.Handlers.Unmarshal.PushBackNamed(jsonrpc.UnmarshalHandler) - svc.Handlers.UnmarshalMeta.PushBackNamed(jsonrpc.UnmarshalMetaHandler) - svc.Handlers.UnmarshalError.PushBackNamed(jsonrpc.UnmarshalErrorHandler) - - // Run custom client initialization if present - if initClient != nil { - initClient(svc.Client) - } - - return svc -} - -// newRequest creates a new request for a ACMPCA operation and runs any -// custom request initialization. -func (c *ACMPCA) newRequest(op *request.Operation, params, data interface{}) *request.Request { - req := c.NewRequest(op, params, data) - - // Run custom request initialization if present - if initRequest != nil { - initRequest(req) - } - - return req -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/waiters.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/waiters.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/waiters.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/acmpca/waiters.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package acmpca - -import ( - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" -) - -// WaitUntilAuditReportCreated uses the ACM-PCA API operation -// DescribeCertificateAuthorityAuditReport to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *ACMPCA) WaitUntilAuditReportCreated(input *DescribeCertificateAuthorityAuditReportInput) error { - return c.WaitUntilAuditReportCreatedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilAuditReportCreatedWithContext is an extended version of WaitUntilAuditReportCreated. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) WaitUntilAuditReportCreatedWithContext(ctx aws.Context, input *DescribeCertificateAuthorityAuditReportInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilAuditReportCreated", - MaxAttempts: 60, - Delay: request.ConstantWaiterDelay(3 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathWaiterMatch, Argument: "AuditReportStatus", - Expected: "SUCCESS", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathWaiterMatch, Argument: "AuditReportStatus", - Expected: "FAILED", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeCertificateAuthorityAuditReportInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeCertificateAuthorityAuditReportRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilCertificateAuthorityCSRCreated uses the ACM-PCA API operation -// GetCertificateAuthorityCsr to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *ACMPCA) WaitUntilCertificateAuthorityCSRCreated(input *GetCertificateAuthorityCsrInput) error { - return c.WaitUntilCertificateAuthorityCSRCreatedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilCertificateAuthorityCSRCreatedWithContext is an extended version of WaitUntilCertificateAuthorityCSRCreated. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) WaitUntilCertificateAuthorityCSRCreatedWithContext(ctx aws.Context, input *GetCertificateAuthorityCsrInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilCertificateAuthorityCSRCreated", - MaxAttempts: 60, - Delay: request.ConstantWaiterDelay(3 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.StatusWaiterMatch, - Expected: 200, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "RequestInProgressException", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *GetCertificateAuthorityCsrInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.GetCertificateAuthorityCsrRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilCertificateIssued uses the ACM-PCA API operation -// GetCertificate to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *ACMPCA) WaitUntilCertificateIssued(input *GetCertificateInput) error { - return c.WaitUntilCertificateIssuedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilCertificateIssuedWithContext is an extended version of WaitUntilCertificateIssued. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *ACMPCA) WaitUntilCertificateIssuedWithContext(ctx aws.Context, input *GetCertificateInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilCertificateIssued", - MaxAttempts: 60, - Delay: request.ConstantWaiterDelay(3 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.StatusWaiterMatch, - Expected: 200, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "RequestInProgressException", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *GetCertificateInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.GetCertificateRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,101801 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package ec2 - -import ( - "fmt" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awsutil" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol" - "github.com/aws/aws-sdk-go/private/protocol/ec2query" -) - -const opAcceptReservedInstancesExchangeQuote = "AcceptReservedInstancesExchangeQuote" - -// AcceptReservedInstancesExchangeQuoteRequest generates a "aws/request.Request" representing the -// client's request for the AcceptReservedInstancesExchangeQuote operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AcceptReservedInstancesExchangeQuote for more information on using the AcceptReservedInstancesExchangeQuote -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AcceptReservedInstancesExchangeQuoteRequest method. -// req, resp := client.AcceptReservedInstancesExchangeQuoteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuote -func (c *EC2) AcceptReservedInstancesExchangeQuoteRequest(input *AcceptReservedInstancesExchangeQuoteInput) (req *request.Request, output *AcceptReservedInstancesExchangeQuoteOutput) { - op := &request.Operation{ - Name: opAcceptReservedInstancesExchangeQuote, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AcceptReservedInstancesExchangeQuoteInput{} - } - - output = &AcceptReservedInstancesExchangeQuoteOutput{} - req = c.newRequest(op, input, output) - return -} - -// AcceptReservedInstancesExchangeQuote API operation for Amazon Elastic Compute Cloud. -// -// Accepts the Convertible Reserved Instance exchange quote described in the -// GetReservedInstancesExchangeQuote call. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AcceptReservedInstancesExchangeQuote for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuote -func (c *EC2) AcceptReservedInstancesExchangeQuote(input *AcceptReservedInstancesExchangeQuoteInput) (*AcceptReservedInstancesExchangeQuoteOutput, error) { - req, out := c.AcceptReservedInstancesExchangeQuoteRequest(input) - return out, req.Send() -} - -// AcceptReservedInstancesExchangeQuoteWithContext is the same as AcceptReservedInstancesExchangeQuote with the addition of -// the ability to pass a context and additional request options. -// -// See AcceptReservedInstancesExchangeQuote for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AcceptReservedInstancesExchangeQuoteWithContext(ctx aws.Context, input *AcceptReservedInstancesExchangeQuoteInput, opts ...request.Option) (*AcceptReservedInstancesExchangeQuoteOutput, error) { - req, out := c.AcceptReservedInstancesExchangeQuoteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAcceptTransitGatewayVpcAttachment = "AcceptTransitGatewayVpcAttachment" - -// AcceptTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the -// client's request for the AcceptTransitGatewayVpcAttachment operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AcceptTransitGatewayVpcAttachment for more information on using the AcceptTransitGatewayVpcAttachment -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AcceptTransitGatewayVpcAttachmentRequest method. -// req, resp := client.AcceptTransitGatewayVpcAttachmentRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayVpcAttachment -func (c *EC2) AcceptTransitGatewayVpcAttachmentRequest(input *AcceptTransitGatewayVpcAttachmentInput) (req *request.Request, output *AcceptTransitGatewayVpcAttachmentOutput) { - op := &request.Operation{ - Name: opAcceptTransitGatewayVpcAttachment, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AcceptTransitGatewayVpcAttachmentInput{} - } - - output = &AcceptTransitGatewayVpcAttachmentOutput{} - req = c.newRequest(op, input, output) - return -} - -// AcceptTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. -// -// Accepts a request to attach a VPC to a transit gateway. -// -// The VPC attachment must be in the pendingAcceptance state. Use DescribeTransitGatewayVpcAttachments -// to view your pending VPC attachment requests. Use RejectTransitGatewayVpcAttachment -// to reject a VPC attachment request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AcceptTransitGatewayVpcAttachment for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayVpcAttachment -func (c *EC2) AcceptTransitGatewayVpcAttachment(input *AcceptTransitGatewayVpcAttachmentInput) (*AcceptTransitGatewayVpcAttachmentOutput, error) { - req, out := c.AcceptTransitGatewayVpcAttachmentRequest(input) - return out, req.Send() -} - -// AcceptTransitGatewayVpcAttachmentWithContext is the same as AcceptTransitGatewayVpcAttachment with the addition of -// the ability to pass a context and additional request options. -// -// See AcceptTransitGatewayVpcAttachment for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AcceptTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *AcceptTransitGatewayVpcAttachmentInput, opts ...request.Option) (*AcceptTransitGatewayVpcAttachmentOutput, error) { - req, out := c.AcceptTransitGatewayVpcAttachmentRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAcceptVpcEndpointConnections = "AcceptVpcEndpointConnections" - -// AcceptVpcEndpointConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the AcceptVpcEndpointConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AcceptVpcEndpointConnections for more information on using the AcceptVpcEndpointConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AcceptVpcEndpointConnectionsRequest method. -// req, resp := client.AcceptVpcEndpointConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcEndpointConnections -func (c *EC2) AcceptVpcEndpointConnectionsRequest(input *AcceptVpcEndpointConnectionsInput) (req *request.Request, output *AcceptVpcEndpointConnectionsOutput) { - op := &request.Operation{ - Name: opAcceptVpcEndpointConnections, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AcceptVpcEndpointConnectionsInput{} - } - - output = &AcceptVpcEndpointConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// AcceptVpcEndpointConnections API operation for Amazon Elastic Compute Cloud. -// -// Accepts one or more interface VPC endpoint connection requests to your VPC -// endpoint service. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AcceptVpcEndpointConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcEndpointConnections -func (c *EC2) AcceptVpcEndpointConnections(input *AcceptVpcEndpointConnectionsInput) (*AcceptVpcEndpointConnectionsOutput, error) { - req, out := c.AcceptVpcEndpointConnectionsRequest(input) - return out, req.Send() -} - -// AcceptVpcEndpointConnectionsWithContext is the same as AcceptVpcEndpointConnections with the addition of -// the ability to pass a context and additional request options. -// -// See AcceptVpcEndpointConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AcceptVpcEndpointConnectionsWithContext(ctx aws.Context, input *AcceptVpcEndpointConnectionsInput, opts ...request.Option) (*AcceptVpcEndpointConnectionsOutput, error) { - req, out := c.AcceptVpcEndpointConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAcceptVpcPeeringConnection = "AcceptVpcPeeringConnection" - -// AcceptVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the AcceptVpcPeeringConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AcceptVpcPeeringConnection for more information on using the AcceptVpcPeeringConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AcceptVpcPeeringConnectionRequest method. -// req, resp := client.AcceptVpcPeeringConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnection -func (c *EC2) AcceptVpcPeeringConnectionRequest(input *AcceptVpcPeeringConnectionInput) (req *request.Request, output *AcceptVpcPeeringConnectionOutput) { - op := &request.Operation{ - Name: opAcceptVpcPeeringConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AcceptVpcPeeringConnectionInput{} - } - - output = &AcceptVpcPeeringConnectionOutput{} - req = c.newRequest(op, input, output) - return -} - -// AcceptVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. -// -// Accept a VPC peering connection request. To accept a request, the VPC peering -// connection must be in the pending-acceptance state, and you must be the owner -// of the peer VPC. Use DescribeVpcPeeringConnections to view your outstanding -// VPC peering connection requests. -// -// For an inter-Region VPC peering connection request, you must accept the VPC -// peering connection in the Region of the accepter VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AcceptVpcPeeringConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnection -func (c *EC2) AcceptVpcPeeringConnection(input *AcceptVpcPeeringConnectionInput) (*AcceptVpcPeeringConnectionOutput, error) { - req, out := c.AcceptVpcPeeringConnectionRequest(input) - return out, req.Send() -} - -// AcceptVpcPeeringConnectionWithContext is the same as AcceptVpcPeeringConnection with the addition of -// the ability to pass a context and additional request options. -// -// See AcceptVpcPeeringConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AcceptVpcPeeringConnectionWithContext(ctx aws.Context, input *AcceptVpcPeeringConnectionInput, opts ...request.Option) (*AcceptVpcPeeringConnectionOutput, error) { - req, out := c.AcceptVpcPeeringConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAdvertiseByoipCidr = "AdvertiseByoipCidr" - -// AdvertiseByoipCidrRequest generates a "aws/request.Request" representing the -// client's request for the AdvertiseByoipCidr operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AdvertiseByoipCidr for more information on using the AdvertiseByoipCidr -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AdvertiseByoipCidrRequest method. -// req, resp := client.AdvertiseByoipCidrRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdvertiseByoipCidr -func (c *EC2) AdvertiseByoipCidrRequest(input *AdvertiseByoipCidrInput) (req *request.Request, output *AdvertiseByoipCidrOutput) { - op := &request.Operation{ - Name: opAdvertiseByoipCidr, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AdvertiseByoipCidrInput{} - } - - output = &AdvertiseByoipCidrOutput{} - req = c.newRequest(op, input, output) - return -} - -// AdvertiseByoipCidr API operation for Amazon Elastic Compute Cloud. -// -// Advertises an IPv4 address range that is provisioned for use with your AWS -// resources through bring your own IP addresses (BYOIP). -// -// You can perform this operation at most once every 10 seconds, even if you -// specify different address ranges each time. -// -// We recommend that you stop advertising the BYOIP CIDR from other locations -// when you advertise it from AWS. To minimize down time, you can configure -// your AWS resources to use an address from a BYOIP CIDR before it is advertised, -// and then simultaneously stop advertising it from the current location and -// start advertising it through AWS. -// -// It can take a few minutes before traffic to the specified addresses starts -// routing to AWS because of BGP propagation delays. -// -// To stop advertising the BYOIP CIDR, use WithdrawByoipCidr. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AdvertiseByoipCidr for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdvertiseByoipCidr -func (c *EC2) AdvertiseByoipCidr(input *AdvertiseByoipCidrInput) (*AdvertiseByoipCidrOutput, error) { - req, out := c.AdvertiseByoipCidrRequest(input) - return out, req.Send() -} - -// AdvertiseByoipCidrWithContext is the same as AdvertiseByoipCidr with the addition of -// the ability to pass a context and additional request options. -// -// See AdvertiseByoipCidr for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AdvertiseByoipCidrWithContext(ctx aws.Context, input *AdvertiseByoipCidrInput, opts ...request.Option) (*AdvertiseByoipCidrOutput, error) { - req, out := c.AdvertiseByoipCidrRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAllocateAddress = "AllocateAddress" - -// AllocateAddressRequest generates a "aws/request.Request" representing the -// client's request for the AllocateAddress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AllocateAddress for more information on using the AllocateAddress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AllocateAddressRequest method. -// req, resp := client.AllocateAddressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddress -func (c *EC2) AllocateAddressRequest(input *AllocateAddressInput) (req *request.Request, output *AllocateAddressOutput) { - op := &request.Operation{ - Name: opAllocateAddress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AllocateAddressInput{} - } - - output = &AllocateAddressOutput{} - req = c.newRequest(op, input, output) - return -} - -// AllocateAddress API operation for Amazon Elastic Compute Cloud. -// -// Allocates an Elastic IP address to your AWS account. After you allocate the -// Elastic IP address you can associate it with an instance or network interface. -// After you release an Elastic IP address, it is released to the IP address -// pool and can be allocated to a different AWS account. -// -// You can allocate an Elastic IP address from an address pool owned by AWS -// or from an address pool created from a public IPv4 address range that you -// have brought to AWS for use with your AWS resources using bring your own -// IP addresses (BYOIP). For more information, see Bring Your Own IP Addresses -// (BYOIP) (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// [EC2-VPC] If you release an Elastic IP address, you might be able to recover -// it. You cannot recover an Elastic IP address that you released after it is -// allocated to another AWS account. You cannot recover an Elastic IP address -// for EC2-Classic. To attempt to recover an Elastic IP address that you released, -// specify it in this operation. -// -// An Elastic IP address is for use either in the EC2-Classic platform or in -// a VPC. By default, you can allocate 5 Elastic IP addresses for EC2-Classic -// per Region and 5 Elastic IP addresses for EC2-VPC per Region. -// -// For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AllocateAddress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddress -func (c *EC2) AllocateAddress(input *AllocateAddressInput) (*AllocateAddressOutput, error) { - req, out := c.AllocateAddressRequest(input) - return out, req.Send() -} - -// AllocateAddressWithContext is the same as AllocateAddress with the addition of -// the ability to pass a context and additional request options. -// -// See AllocateAddress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AllocateAddressWithContext(ctx aws.Context, input *AllocateAddressInput, opts ...request.Option) (*AllocateAddressOutput, error) { - req, out := c.AllocateAddressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAllocateHosts = "AllocateHosts" - -// AllocateHostsRequest generates a "aws/request.Request" representing the -// client's request for the AllocateHosts operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AllocateHosts for more information on using the AllocateHosts -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AllocateHostsRequest method. -// req, resp := client.AllocateHostsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHosts -func (c *EC2) AllocateHostsRequest(input *AllocateHostsInput) (req *request.Request, output *AllocateHostsOutput) { - op := &request.Operation{ - Name: opAllocateHosts, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AllocateHostsInput{} - } - - output = &AllocateHostsOutput{} - req = c.newRequest(op, input, output) - return -} - -// AllocateHosts API operation for Amazon Elastic Compute Cloud. -// -// Allocates a Dedicated Host to your account. At a minimum, specify the supported -// instance type or instance family, the Availability Zone in which to allocate -// the host, and the number of hosts to allocate. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AllocateHosts for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHosts -func (c *EC2) AllocateHosts(input *AllocateHostsInput) (*AllocateHostsOutput, error) { - req, out := c.AllocateHostsRequest(input) - return out, req.Send() -} - -// AllocateHostsWithContext is the same as AllocateHosts with the addition of -// the ability to pass a context and additional request options. -// -// See AllocateHosts for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AllocateHostsWithContext(ctx aws.Context, input *AllocateHostsInput, opts ...request.Option) (*AllocateHostsOutput, error) { - req, out := c.AllocateHostsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opApplySecurityGroupsToClientVpnTargetNetwork = "ApplySecurityGroupsToClientVpnTargetNetwork" - -// ApplySecurityGroupsToClientVpnTargetNetworkRequest generates a "aws/request.Request" representing the -// client's request for the ApplySecurityGroupsToClientVpnTargetNetwork operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ApplySecurityGroupsToClientVpnTargetNetwork for more information on using the ApplySecurityGroupsToClientVpnTargetNetwork -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ApplySecurityGroupsToClientVpnTargetNetworkRequest method. -// req, resp := client.ApplySecurityGroupsToClientVpnTargetNetworkRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ApplySecurityGroupsToClientVpnTargetNetwork -func (c *EC2) ApplySecurityGroupsToClientVpnTargetNetworkRequest(input *ApplySecurityGroupsToClientVpnTargetNetworkInput) (req *request.Request, output *ApplySecurityGroupsToClientVpnTargetNetworkOutput) { - op := &request.Operation{ - Name: opApplySecurityGroupsToClientVpnTargetNetwork, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ApplySecurityGroupsToClientVpnTargetNetworkInput{} - } - - output = &ApplySecurityGroupsToClientVpnTargetNetworkOutput{} - req = c.newRequest(op, input, output) - return -} - -// ApplySecurityGroupsToClientVpnTargetNetwork API operation for Amazon Elastic Compute Cloud. -// -// Applies a security group to the association between the target network and -// the Client VPN endpoint. This action replaces the existing security groups -// with the specified security groups. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ApplySecurityGroupsToClientVpnTargetNetwork for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ApplySecurityGroupsToClientVpnTargetNetwork -func (c *EC2) ApplySecurityGroupsToClientVpnTargetNetwork(input *ApplySecurityGroupsToClientVpnTargetNetworkInput) (*ApplySecurityGroupsToClientVpnTargetNetworkOutput, error) { - req, out := c.ApplySecurityGroupsToClientVpnTargetNetworkRequest(input) - return out, req.Send() -} - -// ApplySecurityGroupsToClientVpnTargetNetworkWithContext is the same as ApplySecurityGroupsToClientVpnTargetNetwork with the addition of -// the ability to pass a context and additional request options. -// -// See ApplySecurityGroupsToClientVpnTargetNetwork for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ApplySecurityGroupsToClientVpnTargetNetworkWithContext(ctx aws.Context, input *ApplySecurityGroupsToClientVpnTargetNetworkInput, opts ...request.Option) (*ApplySecurityGroupsToClientVpnTargetNetworkOutput, error) { - req, out := c.ApplySecurityGroupsToClientVpnTargetNetworkRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssignIpv6Addresses = "AssignIpv6Addresses" - -// AssignIpv6AddressesRequest generates a "aws/request.Request" representing the -// client's request for the AssignIpv6Addresses operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssignIpv6Addresses for more information on using the AssignIpv6Addresses -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssignIpv6AddressesRequest method. -// req, resp := client.AssignIpv6AddressesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6Addresses -func (c *EC2) AssignIpv6AddressesRequest(input *AssignIpv6AddressesInput) (req *request.Request, output *AssignIpv6AddressesOutput) { - op := &request.Operation{ - Name: opAssignIpv6Addresses, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssignIpv6AddressesInput{} - } - - output = &AssignIpv6AddressesOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssignIpv6Addresses API operation for Amazon Elastic Compute Cloud. -// -// Assigns one or more IPv6 addresses to the specified network interface. You -// can specify one or more specific IPv6 addresses, or you can specify the number -// of IPv6 addresses to be automatically assigned from within the subnet's IPv6 -// CIDR block range. You can assign as many IPv6 addresses to a network interface -// as you can assign private IPv4 addresses, and the limit varies per instance -// type. For information, see IP Addresses Per Network Interface Per Instance -// Type (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssignIpv6Addresses for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6Addresses -func (c *EC2) AssignIpv6Addresses(input *AssignIpv6AddressesInput) (*AssignIpv6AddressesOutput, error) { - req, out := c.AssignIpv6AddressesRequest(input) - return out, req.Send() -} - -// AssignIpv6AddressesWithContext is the same as AssignIpv6Addresses with the addition of -// the ability to pass a context and additional request options. -// -// See AssignIpv6Addresses for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssignIpv6AddressesWithContext(ctx aws.Context, input *AssignIpv6AddressesInput, opts ...request.Option) (*AssignIpv6AddressesOutput, error) { - req, out := c.AssignIpv6AddressesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssignPrivateIpAddresses = "AssignPrivateIpAddresses" - -// AssignPrivateIpAddressesRequest generates a "aws/request.Request" representing the -// client's request for the AssignPrivateIpAddresses operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssignPrivateIpAddresses for more information on using the AssignPrivateIpAddresses -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssignPrivateIpAddressesRequest method. -// req, resp := client.AssignPrivateIpAddressesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddresses -func (c *EC2) AssignPrivateIpAddressesRequest(input *AssignPrivateIpAddressesInput) (req *request.Request, output *AssignPrivateIpAddressesOutput) { - op := &request.Operation{ - Name: opAssignPrivateIpAddresses, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssignPrivateIpAddressesInput{} - } - - output = &AssignPrivateIpAddressesOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssignPrivateIpAddresses API operation for Amazon Elastic Compute Cloud. -// -// Assigns one or more secondary private IP addresses to the specified network -// interface. -// -// You can specify one or more specific secondary IP addresses, or you can specify -// the number of secondary IP addresses to be automatically assigned within -// the subnet's CIDR block range. The number of secondary IP addresses that -// you can assign to an instance varies by instance type. For information about -// instance types, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) -// in the Amazon Elastic Compute Cloud User Guide. For more information about -// Elastic IP addresses, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// When you move a secondary private IP address to another network interface, -// any Elastic IP address that is associated with the IP address is also moved. -// -// Remapping an IP address is an asynchronous operation. When you move an IP -// address from one network interface to another, check network/interfaces/macs/mac/local-ipv4s -// in the instance metadata to confirm that the remapping is complete. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssignPrivateIpAddresses for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddresses -func (c *EC2) AssignPrivateIpAddresses(input *AssignPrivateIpAddressesInput) (*AssignPrivateIpAddressesOutput, error) { - req, out := c.AssignPrivateIpAddressesRequest(input) - return out, req.Send() -} - -// AssignPrivateIpAddressesWithContext is the same as AssignPrivateIpAddresses with the addition of -// the ability to pass a context and additional request options. -// -// See AssignPrivateIpAddresses for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssignPrivateIpAddressesWithContext(ctx aws.Context, input *AssignPrivateIpAddressesInput, opts ...request.Option) (*AssignPrivateIpAddressesOutput, error) { - req, out := c.AssignPrivateIpAddressesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateAddress = "AssociateAddress" - -// AssociateAddressRequest generates a "aws/request.Request" representing the -// client's request for the AssociateAddress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateAddress for more information on using the AssociateAddress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateAddressRequest method. -// req, resp := client.AssociateAddressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddress -func (c *EC2) AssociateAddressRequest(input *AssociateAddressInput) (req *request.Request, output *AssociateAddressOutput) { - op := &request.Operation{ - Name: opAssociateAddress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateAddressInput{} - } - - output = &AssociateAddressOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateAddress API operation for Amazon Elastic Compute Cloud. -// -// Associates an Elastic IP address with an instance or a network interface. -// Before you can use an Elastic IP address, you must allocate it to your account. -// -// An Elastic IP address is for use in either the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// [EC2-Classic, VPC in an EC2-VPC-only account] If the Elastic IP address is -// already associated with a different instance, it is disassociated from that -// instance and associated with the specified instance. If you associate an -// Elastic IP address with an instance that has an existing Elastic IP address, -// the existing address is disassociated from the instance, but remains allocated -// to your account. -// -// [VPC in an EC2-Classic account] If you don't specify a private IP address, -// the Elastic IP address is associated with the primary IP address. If the -// Elastic IP address is already associated with a different instance or a network -// interface, you get an error unless you allow reassociation. You cannot associate -// an Elastic IP address with an instance or network interface that has an existing -// Elastic IP address. -// -// This is an idempotent operation. If you perform the operation more than once, -// Amazon EC2 doesn't return an error, and you may be charged for each time -// the Elastic IP address is remapped to the same instance. For more information, -// see the Elastic IP Addresses section of Amazon EC2 Pricing (http://aws.amazon.com/ec2/pricing/). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateAddress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddress -func (c *EC2) AssociateAddress(input *AssociateAddressInput) (*AssociateAddressOutput, error) { - req, out := c.AssociateAddressRequest(input) - return out, req.Send() -} - -// AssociateAddressWithContext is the same as AssociateAddress with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateAddress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateAddressWithContext(ctx aws.Context, input *AssociateAddressInput, opts ...request.Option) (*AssociateAddressOutput, error) { - req, out := c.AssociateAddressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateClientVpnTargetNetwork = "AssociateClientVpnTargetNetwork" - -// AssociateClientVpnTargetNetworkRequest generates a "aws/request.Request" representing the -// client's request for the AssociateClientVpnTargetNetwork operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateClientVpnTargetNetwork for more information on using the AssociateClientVpnTargetNetwork -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateClientVpnTargetNetworkRequest method. -// req, resp := client.AssociateClientVpnTargetNetworkRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateClientVpnTargetNetwork -func (c *EC2) AssociateClientVpnTargetNetworkRequest(input *AssociateClientVpnTargetNetworkInput) (req *request.Request, output *AssociateClientVpnTargetNetworkOutput) { - op := &request.Operation{ - Name: opAssociateClientVpnTargetNetwork, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateClientVpnTargetNetworkInput{} - } - - output = &AssociateClientVpnTargetNetworkOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateClientVpnTargetNetwork API operation for Amazon Elastic Compute Cloud. -// -// Associates a target network with a Client VPN endpoint. A target network -// is a subnet in a VPC. You can associate multiple subnets from the same VPC -// with a Client VPN endpoint. You can associate only one subnet in each Availability -// Zone. We recommend that you associate at least two subnets to provide Availability -// Zone redundancy. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateClientVpnTargetNetwork for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateClientVpnTargetNetwork -func (c *EC2) AssociateClientVpnTargetNetwork(input *AssociateClientVpnTargetNetworkInput) (*AssociateClientVpnTargetNetworkOutput, error) { - req, out := c.AssociateClientVpnTargetNetworkRequest(input) - return out, req.Send() -} - -// AssociateClientVpnTargetNetworkWithContext is the same as AssociateClientVpnTargetNetwork with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateClientVpnTargetNetwork for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateClientVpnTargetNetworkWithContext(ctx aws.Context, input *AssociateClientVpnTargetNetworkInput, opts ...request.Option) (*AssociateClientVpnTargetNetworkOutput, error) { - req, out := c.AssociateClientVpnTargetNetworkRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateDhcpOptions = "AssociateDhcpOptions" - -// AssociateDhcpOptionsRequest generates a "aws/request.Request" representing the -// client's request for the AssociateDhcpOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateDhcpOptions for more information on using the AssociateDhcpOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateDhcpOptionsRequest method. -// req, resp := client.AssociateDhcpOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptions -func (c *EC2) AssociateDhcpOptionsRequest(input *AssociateDhcpOptionsInput) (req *request.Request, output *AssociateDhcpOptionsOutput) { - op := &request.Operation{ - Name: opAssociateDhcpOptions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateDhcpOptionsInput{} - } - - output = &AssociateDhcpOptionsOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// AssociateDhcpOptions API operation for Amazon Elastic Compute Cloud. -// -// Associates a set of DHCP options (that you've previously created) with the -// specified VPC, or associates no DHCP options with the VPC. -// -// After you associate the options with the VPC, any existing instances and -// all new instances that you launch in that VPC use the options. You don't -// need to restart or relaunch the instances. They automatically pick up the -// changes within a few hours, depending on how frequently the instance renews -// its DHCP lease. You can explicitly renew the lease using the operating system -// on the instance. -// -// For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateDhcpOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptions -func (c *EC2) AssociateDhcpOptions(input *AssociateDhcpOptionsInput) (*AssociateDhcpOptionsOutput, error) { - req, out := c.AssociateDhcpOptionsRequest(input) - return out, req.Send() -} - -// AssociateDhcpOptionsWithContext is the same as AssociateDhcpOptions with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateDhcpOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateDhcpOptionsWithContext(ctx aws.Context, input *AssociateDhcpOptionsInput, opts ...request.Option) (*AssociateDhcpOptionsOutput, error) { - req, out := c.AssociateDhcpOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateIamInstanceProfile = "AssociateIamInstanceProfile" - -// AssociateIamInstanceProfileRequest generates a "aws/request.Request" representing the -// client's request for the AssociateIamInstanceProfile operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateIamInstanceProfile for more information on using the AssociateIamInstanceProfile -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateIamInstanceProfileRequest method. -// req, resp := client.AssociateIamInstanceProfileRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfile -func (c *EC2) AssociateIamInstanceProfileRequest(input *AssociateIamInstanceProfileInput) (req *request.Request, output *AssociateIamInstanceProfileOutput) { - op := &request.Operation{ - Name: opAssociateIamInstanceProfile, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateIamInstanceProfileInput{} - } - - output = &AssociateIamInstanceProfileOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateIamInstanceProfile API operation for Amazon Elastic Compute Cloud. -// -// Associates an IAM instance profile with a running or stopped instance. You -// cannot associate more than one IAM instance profile with an instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateIamInstanceProfile for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfile -func (c *EC2) AssociateIamInstanceProfile(input *AssociateIamInstanceProfileInput) (*AssociateIamInstanceProfileOutput, error) { - req, out := c.AssociateIamInstanceProfileRequest(input) - return out, req.Send() -} - -// AssociateIamInstanceProfileWithContext is the same as AssociateIamInstanceProfile with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateIamInstanceProfile for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateIamInstanceProfileWithContext(ctx aws.Context, input *AssociateIamInstanceProfileInput, opts ...request.Option) (*AssociateIamInstanceProfileOutput, error) { - req, out := c.AssociateIamInstanceProfileRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateRouteTable = "AssociateRouteTable" - -// AssociateRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the AssociateRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateRouteTable for more information on using the AssociateRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateRouteTableRequest method. -// req, resp := client.AssociateRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTable -func (c *EC2) AssociateRouteTableRequest(input *AssociateRouteTableInput) (req *request.Request, output *AssociateRouteTableOutput) { - op := &request.Operation{ - Name: opAssociateRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateRouteTableInput{} - } - - output = &AssociateRouteTableOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Associates a subnet with a route table. The subnet and route table must be -// in the same VPC. This association causes traffic originating from the subnet -// to be routed according to the routes in the route table. The action returns -// an association ID, which you need in order to disassociate the route table -// from the subnet later. A route table can be associated with multiple subnets. -// -// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTable -func (c *EC2) AssociateRouteTable(input *AssociateRouteTableInput) (*AssociateRouteTableOutput, error) { - req, out := c.AssociateRouteTableRequest(input) - return out, req.Send() -} - -// AssociateRouteTableWithContext is the same as AssociateRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateRouteTableWithContext(ctx aws.Context, input *AssociateRouteTableInput, opts ...request.Option) (*AssociateRouteTableOutput, error) { - req, out := c.AssociateRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateSubnetCidrBlock = "AssociateSubnetCidrBlock" - -// AssociateSubnetCidrBlockRequest generates a "aws/request.Request" representing the -// client's request for the AssociateSubnetCidrBlock operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateSubnetCidrBlock for more information on using the AssociateSubnetCidrBlock -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateSubnetCidrBlockRequest method. -// req, resp := client.AssociateSubnetCidrBlockRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlock -func (c *EC2) AssociateSubnetCidrBlockRequest(input *AssociateSubnetCidrBlockInput) (req *request.Request, output *AssociateSubnetCidrBlockOutput) { - op := &request.Operation{ - Name: opAssociateSubnetCidrBlock, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateSubnetCidrBlockInput{} - } - - output = &AssociateSubnetCidrBlockOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateSubnetCidrBlock API operation for Amazon Elastic Compute Cloud. -// -// Associates a CIDR block with your subnet. You can only associate a single -// IPv6 CIDR block with your subnet. An IPv6 CIDR block must have a prefix length -// of /64. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateSubnetCidrBlock for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlock -func (c *EC2) AssociateSubnetCidrBlock(input *AssociateSubnetCidrBlockInput) (*AssociateSubnetCidrBlockOutput, error) { - req, out := c.AssociateSubnetCidrBlockRequest(input) - return out, req.Send() -} - -// AssociateSubnetCidrBlockWithContext is the same as AssociateSubnetCidrBlock with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateSubnetCidrBlock for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateSubnetCidrBlockWithContext(ctx aws.Context, input *AssociateSubnetCidrBlockInput, opts ...request.Option) (*AssociateSubnetCidrBlockOutput, error) { - req, out := c.AssociateSubnetCidrBlockRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateTransitGatewayRouteTable = "AssociateTransitGatewayRouteTable" - -// AssociateTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the AssociateTransitGatewayRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateTransitGatewayRouteTable for more information on using the AssociateTransitGatewayRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateTransitGatewayRouteTableRequest method. -// req, resp := client.AssociateTransitGatewayRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayRouteTable -func (c *EC2) AssociateTransitGatewayRouteTableRequest(input *AssociateTransitGatewayRouteTableInput) (req *request.Request, output *AssociateTransitGatewayRouteTableOutput) { - op := &request.Operation{ - Name: opAssociateTransitGatewayRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateTransitGatewayRouteTableInput{} - } - - output = &AssociateTransitGatewayRouteTableOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Associates the specified attachment with the specified transit gateway route -// table. You can associate only one route table with an attachment. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateTransitGatewayRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayRouteTable -func (c *EC2) AssociateTransitGatewayRouteTable(input *AssociateTransitGatewayRouteTableInput) (*AssociateTransitGatewayRouteTableOutput, error) { - req, out := c.AssociateTransitGatewayRouteTableRequest(input) - return out, req.Send() -} - -// AssociateTransitGatewayRouteTableWithContext is the same as AssociateTransitGatewayRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateTransitGatewayRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateTransitGatewayRouteTableWithContext(ctx aws.Context, input *AssociateTransitGatewayRouteTableInput, opts ...request.Option) (*AssociateTransitGatewayRouteTableOutput, error) { - req, out := c.AssociateTransitGatewayRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssociateVpcCidrBlock = "AssociateVpcCidrBlock" - -// AssociateVpcCidrBlockRequest generates a "aws/request.Request" representing the -// client's request for the AssociateVpcCidrBlock operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssociateVpcCidrBlock for more information on using the AssociateVpcCidrBlock -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssociateVpcCidrBlockRequest method. -// req, resp := client.AssociateVpcCidrBlockRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlock -func (c *EC2) AssociateVpcCidrBlockRequest(input *AssociateVpcCidrBlockInput) (req *request.Request, output *AssociateVpcCidrBlockOutput) { - op := &request.Operation{ - Name: opAssociateVpcCidrBlock, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssociateVpcCidrBlockInput{} - } - - output = &AssociateVpcCidrBlockOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssociateVpcCidrBlock API operation for Amazon Elastic Compute Cloud. -// -// Associates a CIDR block with your VPC. You can associate a secondary IPv4 -// CIDR block, or you can associate an Amazon-provided IPv6 CIDR block. The -// IPv6 CIDR block size is fixed at /56. -// -// For more information about associating CIDR blocks with your VPC and applicable -// restrictions, see VPC and Subnet Sizing (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AssociateVpcCidrBlock for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlock -func (c *EC2) AssociateVpcCidrBlock(input *AssociateVpcCidrBlockInput) (*AssociateVpcCidrBlockOutput, error) { - req, out := c.AssociateVpcCidrBlockRequest(input) - return out, req.Send() -} - -// AssociateVpcCidrBlockWithContext is the same as AssociateVpcCidrBlock with the addition of -// the ability to pass a context and additional request options. -// -// See AssociateVpcCidrBlock for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AssociateVpcCidrBlockWithContext(ctx aws.Context, input *AssociateVpcCidrBlockInput, opts ...request.Option) (*AssociateVpcCidrBlockOutput, error) { - req, out := c.AssociateVpcCidrBlockRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAttachClassicLinkVpc = "AttachClassicLinkVpc" - -// AttachClassicLinkVpcRequest generates a "aws/request.Request" representing the -// client's request for the AttachClassicLinkVpc operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AttachClassicLinkVpc for more information on using the AttachClassicLinkVpc -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AttachClassicLinkVpcRequest method. -// req, resp := client.AttachClassicLinkVpcRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpc -func (c *EC2) AttachClassicLinkVpcRequest(input *AttachClassicLinkVpcInput) (req *request.Request, output *AttachClassicLinkVpcOutput) { - op := &request.Operation{ - Name: opAttachClassicLinkVpc, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AttachClassicLinkVpcInput{} - } - - output = &AttachClassicLinkVpcOutput{} - req = c.newRequest(op, input, output) - return -} - -// AttachClassicLinkVpc API operation for Amazon Elastic Compute Cloud. -// -// Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or -// more of the VPC's security groups. You cannot link an EC2-Classic instance -// to more than one VPC at a time. You can only link an instance that's in the -// running state. An instance is automatically unlinked from a VPC when it's -// stopped - you can link it to the VPC again when you restart it. -// -// After you've linked an instance, you cannot change the VPC security groups -// that are associated with it. To change the security groups, you must first -// unlink the instance, and then link it again. -// -// Linking your instance to a VPC is sometimes referred to as attaching your -// instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AttachClassicLinkVpc for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpc -func (c *EC2) AttachClassicLinkVpc(input *AttachClassicLinkVpcInput) (*AttachClassicLinkVpcOutput, error) { - req, out := c.AttachClassicLinkVpcRequest(input) - return out, req.Send() -} - -// AttachClassicLinkVpcWithContext is the same as AttachClassicLinkVpc with the addition of -// the ability to pass a context and additional request options. -// -// See AttachClassicLinkVpc for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AttachClassicLinkVpcWithContext(ctx aws.Context, input *AttachClassicLinkVpcInput, opts ...request.Option) (*AttachClassicLinkVpcOutput, error) { - req, out := c.AttachClassicLinkVpcRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAttachInternetGateway = "AttachInternetGateway" - -// AttachInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the AttachInternetGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AttachInternetGateway for more information on using the AttachInternetGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AttachInternetGatewayRequest method. -// req, resp := client.AttachInternetGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGateway -func (c *EC2) AttachInternetGatewayRequest(input *AttachInternetGatewayInput) (req *request.Request, output *AttachInternetGatewayOutput) { - op := &request.Operation{ - Name: opAttachInternetGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AttachInternetGatewayInput{} - } - - output = &AttachInternetGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// AttachInternetGateway API operation for Amazon Elastic Compute Cloud. -// -// Attaches an internet gateway to a VPC, enabling connectivity between the -// internet and the VPC. For more information about your VPC and internet gateway, -// see the Amazon Virtual Private Cloud User Guide (https://docs.aws.amazon.com/vpc/latest/userguide/). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AttachInternetGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGateway -func (c *EC2) AttachInternetGateway(input *AttachInternetGatewayInput) (*AttachInternetGatewayOutput, error) { - req, out := c.AttachInternetGatewayRequest(input) - return out, req.Send() -} - -// AttachInternetGatewayWithContext is the same as AttachInternetGateway with the addition of -// the ability to pass a context and additional request options. -// -// See AttachInternetGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AttachInternetGatewayWithContext(ctx aws.Context, input *AttachInternetGatewayInput, opts ...request.Option) (*AttachInternetGatewayOutput, error) { - req, out := c.AttachInternetGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAttachNetworkInterface = "AttachNetworkInterface" - -// AttachNetworkInterfaceRequest generates a "aws/request.Request" representing the -// client's request for the AttachNetworkInterface operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AttachNetworkInterface for more information on using the AttachNetworkInterface -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AttachNetworkInterfaceRequest method. -// req, resp := client.AttachNetworkInterfaceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterface -func (c *EC2) AttachNetworkInterfaceRequest(input *AttachNetworkInterfaceInput) (req *request.Request, output *AttachNetworkInterfaceOutput) { - op := &request.Operation{ - Name: opAttachNetworkInterface, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AttachNetworkInterfaceInput{} - } - - output = &AttachNetworkInterfaceOutput{} - req = c.newRequest(op, input, output) - return -} - -// AttachNetworkInterface API operation for Amazon Elastic Compute Cloud. -// -// Attaches a network interface to an instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AttachNetworkInterface for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterface -func (c *EC2) AttachNetworkInterface(input *AttachNetworkInterfaceInput) (*AttachNetworkInterfaceOutput, error) { - req, out := c.AttachNetworkInterfaceRequest(input) - return out, req.Send() -} - -// AttachNetworkInterfaceWithContext is the same as AttachNetworkInterface with the addition of -// the ability to pass a context and additional request options. -// -// See AttachNetworkInterface for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AttachNetworkInterfaceWithContext(ctx aws.Context, input *AttachNetworkInterfaceInput, opts ...request.Option) (*AttachNetworkInterfaceOutput, error) { - req, out := c.AttachNetworkInterfaceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAttachVolume = "AttachVolume" - -// AttachVolumeRequest generates a "aws/request.Request" representing the -// client's request for the AttachVolume operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AttachVolume for more information on using the AttachVolume -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AttachVolumeRequest method. -// req, resp := client.AttachVolumeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolume -func (c *EC2) AttachVolumeRequest(input *AttachVolumeInput) (req *request.Request, output *VolumeAttachment) { - op := &request.Operation{ - Name: opAttachVolume, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AttachVolumeInput{} - } - - output = &VolumeAttachment{} - req = c.newRequest(op, input, output) - return -} - -// AttachVolume API operation for Amazon Elastic Compute Cloud. -// -// Attaches an EBS volume to a running or stopped instance and exposes it to -// the instance with the specified device name. -// -// Encrypted EBS volumes must be attached to instances that support Amazon EBS -// encryption. For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// After you attach an EBS volume, you must make it available. For more information, -// see Making an EBS Volume Available For Use (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html). -// -// If a volume has an AWS Marketplace product code: -// -// * The volume can be attached only to a stopped instance. -// -// * AWS Marketplace product codes are copied from the volume to the instance. -// -// * You must be subscribed to the product. -// -// * The instance type and operating system of the instance must support -// the product. For example, you can't detach a volume from a Windows instance -// and attach it to a Linux instance. -// -// For more information, see Attaching Amazon EBS Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AttachVolume for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolume -func (c *EC2) AttachVolume(input *AttachVolumeInput) (*VolumeAttachment, error) { - req, out := c.AttachVolumeRequest(input) - return out, req.Send() -} - -// AttachVolumeWithContext is the same as AttachVolume with the addition of -// the ability to pass a context and additional request options. -// -// See AttachVolume for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AttachVolumeWithContext(ctx aws.Context, input *AttachVolumeInput, opts ...request.Option) (*VolumeAttachment, error) { - req, out := c.AttachVolumeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAttachVpnGateway = "AttachVpnGateway" - -// AttachVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the AttachVpnGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AttachVpnGateway for more information on using the AttachVpnGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AttachVpnGatewayRequest method. -// req, resp := client.AttachVpnGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGateway -func (c *EC2) AttachVpnGatewayRequest(input *AttachVpnGatewayInput) (req *request.Request, output *AttachVpnGatewayOutput) { - op := &request.Operation{ - Name: opAttachVpnGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AttachVpnGatewayInput{} - } - - output = &AttachVpnGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// AttachVpnGateway API operation for Amazon Elastic Compute Cloud. -// -// Attaches a virtual private gateway to a VPC. You can attach one virtual private -// gateway to one VPC at a time. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AttachVpnGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGateway -func (c *EC2) AttachVpnGateway(input *AttachVpnGatewayInput) (*AttachVpnGatewayOutput, error) { - req, out := c.AttachVpnGatewayRequest(input) - return out, req.Send() -} - -// AttachVpnGatewayWithContext is the same as AttachVpnGateway with the addition of -// the ability to pass a context and additional request options. -// -// See AttachVpnGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AttachVpnGatewayWithContext(ctx aws.Context, input *AttachVpnGatewayInput, opts ...request.Option) (*AttachVpnGatewayOutput, error) { - req, out := c.AttachVpnGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAuthorizeClientVpnIngress = "AuthorizeClientVpnIngress" - -// AuthorizeClientVpnIngressRequest generates a "aws/request.Request" representing the -// client's request for the AuthorizeClientVpnIngress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AuthorizeClientVpnIngress for more information on using the AuthorizeClientVpnIngress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AuthorizeClientVpnIngressRequest method. -// req, resp := client.AuthorizeClientVpnIngressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeClientVpnIngress -func (c *EC2) AuthorizeClientVpnIngressRequest(input *AuthorizeClientVpnIngressInput) (req *request.Request, output *AuthorizeClientVpnIngressOutput) { - op := &request.Operation{ - Name: opAuthorizeClientVpnIngress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AuthorizeClientVpnIngressInput{} - } - - output = &AuthorizeClientVpnIngressOutput{} - req = c.newRequest(op, input, output) - return -} - -// AuthorizeClientVpnIngress API operation for Amazon Elastic Compute Cloud. -// -// Adds an ingress authorization rule to a Client VPN endpoint. Ingress authorization -// rules act as firewall rules that grant access to networks. You must configure -// ingress authorization rules to enable clients to access resources in AWS -// or on-premises networks. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AuthorizeClientVpnIngress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeClientVpnIngress -func (c *EC2) AuthorizeClientVpnIngress(input *AuthorizeClientVpnIngressInput) (*AuthorizeClientVpnIngressOutput, error) { - req, out := c.AuthorizeClientVpnIngressRequest(input) - return out, req.Send() -} - -// AuthorizeClientVpnIngressWithContext is the same as AuthorizeClientVpnIngress with the addition of -// the ability to pass a context and additional request options. -// -// See AuthorizeClientVpnIngress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AuthorizeClientVpnIngressWithContext(ctx aws.Context, input *AuthorizeClientVpnIngressInput, opts ...request.Option) (*AuthorizeClientVpnIngressOutput, error) { - req, out := c.AuthorizeClientVpnIngressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAuthorizeSecurityGroupEgress = "AuthorizeSecurityGroupEgress" - -// AuthorizeSecurityGroupEgressRequest generates a "aws/request.Request" representing the -// client's request for the AuthorizeSecurityGroupEgress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AuthorizeSecurityGroupEgress for more information on using the AuthorizeSecurityGroupEgress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AuthorizeSecurityGroupEgressRequest method. -// req, resp := client.AuthorizeSecurityGroupEgressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgress -func (c *EC2) AuthorizeSecurityGroupEgressRequest(input *AuthorizeSecurityGroupEgressInput) (req *request.Request, output *AuthorizeSecurityGroupEgressOutput) { - op := &request.Operation{ - Name: opAuthorizeSecurityGroupEgress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AuthorizeSecurityGroupEgressInput{} - } - - output = &AuthorizeSecurityGroupEgressOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// AuthorizeSecurityGroupEgress API operation for Amazon Elastic Compute Cloud. -// -// [VPC only] Adds the specified egress rules to a security group for use with -// a VPC. -// -// An outbound rule permits instances to send traffic to the specified IPv4 -// or IPv6 CIDR address ranges, or to the instances associated with the specified -// destination security groups. -// -// You specify a protocol for each rule (for example, TCP). For the TCP and -// UDP protocols, you must also specify the destination port or port range. -// For the ICMP protocol, you must also specify the ICMP type and code. You -// can use -1 for the type or code to mean all types or all codes. -// -// Rule changes are propagated to affected instances as quickly as possible. -// However, a small delay might occur. -// -// For more information about VPC security group limits, see Amazon VPC Limits -// (https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AuthorizeSecurityGroupEgress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgress -func (c *EC2) AuthorizeSecurityGroupEgress(input *AuthorizeSecurityGroupEgressInput) (*AuthorizeSecurityGroupEgressOutput, error) { - req, out := c.AuthorizeSecurityGroupEgressRequest(input) - return out, req.Send() -} - -// AuthorizeSecurityGroupEgressWithContext is the same as AuthorizeSecurityGroupEgress with the addition of -// the ability to pass a context and additional request options. -// -// See AuthorizeSecurityGroupEgress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AuthorizeSecurityGroupEgressWithContext(ctx aws.Context, input *AuthorizeSecurityGroupEgressInput, opts ...request.Option) (*AuthorizeSecurityGroupEgressOutput, error) { - req, out := c.AuthorizeSecurityGroupEgressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAuthorizeSecurityGroupIngress = "AuthorizeSecurityGroupIngress" - -// AuthorizeSecurityGroupIngressRequest generates a "aws/request.Request" representing the -// client's request for the AuthorizeSecurityGroupIngress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AuthorizeSecurityGroupIngress for more information on using the AuthorizeSecurityGroupIngress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AuthorizeSecurityGroupIngressRequest method. -// req, resp := client.AuthorizeSecurityGroupIngressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngress -func (c *EC2) AuthorizeSecurityGroupIngressRequest(input *AuthorizeSecurityGroupIngressInput) (req *request.Request, output *AuthorizeSecurityGroupIngressOutput) { - op := &request.Operation{ - Name: opAuthorizeSecurityGroupIngress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AuthorizeSecurityGroupIngressInput{} - } - - output = &AuthorizeSecurityGroupIngressOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// AuthorizeSecurityGroupIngress API operation for Amazon Elastic Compute Cloud. -// -// Adds the specified ingress rules to a security group. -// -// An inbound rule permits instances to receive traffic from the specified IPv4 -// or IPv6 CIDR address ranges, or from the instances associated with the specified -// destination security groups. -// -// You specify a protocol for each rule (for example, TCP). For TCP and UDP, -// you must also specify the destination port or port range. For ICMP/ICMPv6, -// you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean -// all types or all codes. -// -// Rule changes are propagated to instances within the security group as quickly -// as possible. However, a small delay might occur. -// -// For more information about VPC security group limits, see Amazon VPC Limits -// (https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation AuthorizeSecurityGroupIngress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngress -func (c *EC2) AuthorizeSecurityGroupIngress(input *AuthorizeSecurityGroupIngressInput) (*AuthorizeSecurityGroupIngressOutput, error) { - req, out := c.AuthorizeSecurityGroupIngressRequest(input) - return out, req.Send() -} - -// AuthorizeSecurityGroupIngressWithContext is the same as AuthorizeSecurityGroupIngress with the addition of -// the ability to pass a context and additional request options. -// -// See AuthorizeSecurityGroupIngress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) AuthorizeSecurityGroupIngressWithContext(ctx aws.Context, input *AuthorizeSecurityGroupIngressInput, opts ...request.Option) (*AuthorizeSecurityGroupIngressOutput, error) { - req, out := c.AuthorizeSecurityGroupIngressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opBundleInstance = "BundleInstance" - -// BundleInstanceRequest generates a "aws/request.Request" representing the -// client's request for the BundleInstance operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See BundleInstance for more information on using the BundleInstance -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the BundleInstanceRequest method. -// req, resp := client.BundleInstanceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstance -func (c *EC2) BundleInstanceRequest(input *BundleInstanceInput) (req *request.Request, output *BundleInstanceOutput) { - op := &request.Operation{ - Name: opBundleInstance, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &BundleInstanceInput{} - } - - output = &BundleInstanceOutput{} - req = c.newRequest(op, input, output) - return -} - -// BundleInstance API operation for Amazon Elastic Compute Cloud. -// -// Bundles an Amazon instance store-backed Windows instance. -// -// During bundling, only the root device volume (C:\) is bundled. Data on other -// instance store volumes is not preserved. -// -// This action is not applicable for Linux/Unix instances or Windows instances -// that are backed by Amazon EBS. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation BundleInstance for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstance -func (c *EC2) BundleInstance(input *BundleInstanceInput) (*BundleInstanceOutput, error) { - req, out := c.BundleInstanceRequest(input) - return out, req.Send() -} - -// BundleInstanceWithContext is the same as BundleInstance with the addition of -// the ability to pass a context and additional request options. -// -// See BundleInstance for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) BundleInstanceWithContext(ctx aws.Context, input *BundleInstanceInput, opts ...request.Option) (*BundleInstanceOutput, error) { - req, out := c.BundleInstanceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelBundleTask = "CancelBundleTask" - -// CancelBundleTaskRequest generates a "aws/request.Request" representing the -// client's request for the CancelBundleTask operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelBundleTask for more information on using the CancelBundleTask -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelBundleTaskRequest method. -// req, resp := client.CancelBundleTaskRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTask -func (c *EC2) CancelBundleTaskRequest(input *CancelBundleTaskInput) (req *request.Request, output *CancelBundleTaskOutput) { - op := &request.Operation{ - Name: opCancelBundleTask, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelBundleTaskInput{} - } - - output = &CancelBundleTaskOutput{} - req = c.newRequest(op, input, output) - return -} - -// CancelBundleTask API operation for Amazon Elastic Compute Cloud. -// -// Cancels a bundling operation for an instance store-backed Windows instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelBundleTask for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTask -func (c *EC2) CancelBundleTask(input *CancelBundleTaskInput) (*CancelBundleTaskOutput, error) { - req, out := c.CancelBundleTaskRequest(input) - return out, req.Send() -} - -// CancelBundleTaskWithContext is the same as CancelBundleTask with the addition of -// the ability to pass a context and additional request options. -// -// See CancelBundleTask for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelBundleTaskWithContext(ctx aws.Context, input *CancelBundleTaskInput, opts ...request.Option) (*CancelBundleTaskOutput, error) { - req, out := c.CancelBundleTaskRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelCapacityReservation = "CancelCapacityReservation" - -// CancelCapacityReservationRequest generates a "aws/request.Request" representing the -// client's request for the CancelCapacityReservation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelCapacityReservation for more information on using the CancelCapacityReservation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelCapacityReservationRequest method. -// req, resp := client.CancelCapacityReservationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservation -func (c *EC2) CancelCapacityReservationRequest(input *CancelCapacityReservationInput) (req *request.Request, output *CancelCapacityReservationOutput) { - op := &request.Operation{ - Name: opCancelCapacityReservation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelCapacityReservationInput{} - } - - output = &CancelCapacityReservationOutput{} - req = c.newRequest(op, input, output) - return -} - -// CancelCapacityReservation API operation for Amazon Elastic Compute Cloud. -// -// Cancels the specified Capacity Reservation, releases the reserved capacity, -// and changes the Capacity Reservation's state to cancelled. -// -// Instances running in the reserved capacity continue running until you stop -// them. Stopped instances that target the Capacity Reservation can no longer -// launch. Modify these instances to either target a different Capacity Reservation, -// launch On-Demand Instance capacity, or run in any open Capacity Reservation -// that has matching attributes and sufficient capacity. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelCapacityReservation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservation -func (c *EC2) CancelCapacityReservation(input *CancelCapacityReservationInput) (*CancelCapacityReservationOutput, error) { - req, out := c.CancelCapacityReservationRequest(input) - return out, req.Send() -} - -// CancelCapacityReservationWithContext is the same as CancelCapacityReservation with the addition of -// the ability to pass a context and additional request options. -// -// See CancelCapacityReservation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelCapacityReservationWithContext(ctx aws.Context, input *CancelCapacityReservationInput, opts ...request.Option) (*CancelCapacityReservationOutput, error) { - req, out := c.CancelCapacityReservationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelConversionTask = "CancelConversionTask" - -// CancelConversionTaskRequest generates a "aws/request.Request" representing the -// client's request for the CancelConversionTask operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelConversionTask for more information on using the CancelConversionTask -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelConversionTaskRequest method. -// req, resp := client.CancelConversionTaskRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTask -func (c *EC2) CancelConversionTaskRequest(input *CancelConversionTaskInput) (req *request.Request, output *CancelConversionTaskOutput) { - op := &request.Operation{ - Name: opCancelConversionTask, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelConversionTaskInput{} - } - - output = &CancelConversionTaskOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CancelConversionTask API operation for Amazon Elastic Compute Cloud. -// -// Cancels an active conversion task. The task can be the import of an instance -// or volume. The action removes all artifacts of the conversion, including -// a partially uploaded volume or instance. If the conversion is complete or -// is in the process of transferring the final disk image, the command fails -// and returns an exception. -// -// For more information, see Importing a Virtual Machine Using the Amazon EC2 -// CLI (https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelConversionTask for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTask -func (c *EC2) CancelConversionTask(input *CancelConversionTaskInput) (*CancelConversionTaskOutput, error) { - req, out := c.CancelConversionTaskRequest(input) - return out, req.Send() -} - -// CancelConversionTaskWithContext is the same as CancelConversionTask with the addition of -// the ability to pass a context and additional request options. -// -// See CancelConversionTask for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelConversionTaskWithContext(ctx aws.Context, input *CancelConversionTaskInput, opts ...request.Option) (*CancelConversionTaskOutput, error) { - req, out := c.CancelConversionTaskRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelExportTask = "CancelExportTask" - -// CancelExportTaskRequest generates a "aws/request.Request" representing the -// client's request for the CancelExportTask operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelExportTask for more information on using the CancelExportTask -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelExportTaskRequest method. -// req, resp := client.CancelExportTaskRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTask -func (c *EC2) CancelExportTaskRequest(input *CancelExportTaskInput) (req *request.Request, output *CancelExportTaskOutput) { - op := &request.Operation{ - Name: opCancelExportTask, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelExportTaskInput{} - } - - output = &CancelExportTaskOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CancelExportTask API operation for Amazon Elastic Compute Cloud. -// -// Cancels an active export task. The request removes all artifacts of the export, -// including any partially-created Amazon S3 objects. If the export task is -// complete or is in the process of transferring the final disk image, the command -// fails and returns an error. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelExportTask for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTask -func (c *EC2) CancelExportTask(input *CancelExportTaskInput) (*CancelExportTaskOutput, error) { - req, out := c.CancelExportTaskRequest(input) - return out, req.Send() -} - -// CancelExportTaskWithContext is the same as CancelExportTask with the addition of -// the ability to pass a context and additional request options. -// -// See CancelExportTask for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelExportTaskWithContext(ctx aws.Context, input *CancelExportTaskInput, opts ...request.Option) (*CancelExportTaskOutput, error) { - req, out := c.CancelExportTaskRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelImportTask = "CancelImportTask" - -// CancelImportTaskRequest generates a "aws/request.Request" representing the -// client's request for the CancelImportTask operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelImportTask for more information on using the CancelImportTask -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelImportTaskRequest method. -// req, resp := client.CancelImportTaskRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTask -func (c *EC2) CancelImportTaskRequest(input *CancelImportTaskInput) (req *request.Request, output *CancelImportTaskOutput) { - op := &request.Operation{ - Name: opCancelImportTask, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelImportTaskInput{} - } - - output = &CancelImportTaskOutput{} - req = c.newRequest(op, input, output) - return -} - -// CancelImportTask API operation for Amazon Elastic Compute Cloud. -// -// Cancels an in-process import virtual machine or import snapshot task. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelImportTask for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTask -func (c *EC2) CancelImportTask(input *CancelImportTaskInput) (*CancelImportTaskOutput, error) { - req, out := c.CancelImportTaskRequest(input) - return out, req.Send() -} - -// CancelImportTaskWithContext is the same as CancelImportTask with the addition of -// the ability to pass a context and additional request options. -// -// See CancelImportTask for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelImportTaskWithContext(ctx aws.Context, input *CancelImportTaskInput, opts ...request.Option) (*CancelImportTaskOutput, error) { - req, out := c.CancelImportTaskRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelReservedInstancesListing = "CancelReservedInstancesListing" - -// CancelReservedInstancesListingRequest generates a "aws/request.Request" representing the -// client's request for the CancelReservedInstancesListing operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelReservedInstancesListing for more information on using the CancelReservedInstancesListing -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelReservedInstancesListingRequest method. -// req, resp := client.CancelReservedInstancesListingRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListing -func (c *EC2) CancelReservedInstancesListingRequest(input *CancelReservedInstancesListingInput) (req *request.Request, output *CancelReservedInstancesListingOutput) { - op := &request.Operation{ - Name: opCancelReservedInstancesListing, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelReservedInstancesListingInput{} - } - - output = &CancelReservedInstancesListingOutput{} - req = c.newRequest(op, input, output) - return -} - -// CancelReservedInstancesListing API operation for Amazon Elastic Compute Cloud. -// -// Cancels the specified Reserved Instance listing in the Reserved Instance -// Marketplace. -// -// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelReservedInstancesListing for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListing -func (c *EC2) CancelReservedInstancesListing(input *CancelReservedInstancesListingInput) (*CancelReservedInstancesListingOutput, error) { - req, out := c.CancelReservedInstancesListingRequest(input) - return out, req.Send() -} - -// CancelReservedInstancesListingWithContext is the same as CancelReservedInstancesListing with the addition of -// the ability to pass a context and additional request options. -// -// See CancelReservedInstancesListing for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelReservedInstancesListingWithContext(ctx aws.Context, input *CancelReservedInstancesListingInput, opts ...request.Option) (*CancelReservedInstancesListingOutput, error) { - req, out := c.CancelReservedInstancesListingRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelSpotFleetRequests = "CancelSpotFleetRequests" - -// CancelSpotFleetRequestsRequest generates a "aws/request.Request" representing the -// client's request for the CancelSpotFleetRequests operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelSpotFleetRequests for more information on using the CancelSpotFleetRequests -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelSpotFleetRequestsRequest method. -// req, resp := client.CancelSpotFleetRequestsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequests -func (c *EC2) CancelSpotFleetRequestsRequest(input *CancelSpotFleetRequestsInput) (req *request.Request, output *CancelSpotFleetRequestsOutput) { - op := &request.Operation{ - Name: opCancelSpotFleetRequests, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelSpotFleetRequestsInput{} - } - - output = &CancelSpotFleetRequestsOutput{} - req = c.newRequest(op, input, output) - return -} - -// CancelSpotFleetRequests API operation for Amazon Elastic Compute Cloud. -// -// Cancels the specified Spot Fleet requests. -// -// After you cancel a Spot Fleet request, the Spot Fleet launches no new Spot -// Instances. You must specify whether the Spot Fleet should also terminate -// its Spot Instances. If you terminate the instances, the Spot Fleet request -// enters the cancelled_terminating state. Otherwise, the Spot Fleet request -// enters the cancelled_running state and the instances continue to run until -// they are interrupted or you terminate them manually. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelSpotFleetRequests for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequests -func (c *EC2) CancelSpotFleetRequests(input *CancelSpotFleetRequestsInput) (*CancelSpotFleetRequestsOutput, error) { - req, out := c.CancelSpotFleetRequestsRequest(input) - return out, req.Send() -} - -// CancelSpotFleetRequestsWithContext is the same as CancelSpotFleetRequests with the addition of -// the ability to pass a context and additional request options. -// -// See CancelSpotFleetRequests for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelSpotFleetRequestsWithContext(ctx aws.Context, input *CancelSpotFleetRequestsInput, opts ...request.Option) (*CancelSpotFleetRequestsOutput, error) { - req, out := c.CancelSpotFleetRequestsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCancelSpotInstanceRequests = "CancelSpotInstanceRequests" - -// CancelSpotInstanceRequestsRequest generates a "aws/request.Request" representing the -// client's request for the CancelSpotInstanceRequests operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CancelSpotInstanceRequests for more information on using the CancelSpotInstanceRequests -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CancelSpotInstanceRequestsRequest method. -// req, resp := client.CancelSpotInstanceRequestsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequests -func (c *EC2) CancelSpotInstanceRequestsRequest(input *CancelSpotInstanceRequestsInput) (req *request.Request, output *CancelSpotInstanceRequestsOutput) { - op := &request.Operation{ - Name: opCancelSpotInstanceRequests, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CancelSpotInstanceRequestsInput{} - } - - output = &CancelSpotInstanceRequestsOutput{} - req = c.newRequest(op, input, output) - return -} - -// CancelSpotInstanceRequests API operation for Amazon Elastic Compute Cloud. -// -// Cancels one or more Spot Instance requests. -// -// Canceling a Spot Instance request does not terminate running Spot Instances -// associated with the request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CancelSpotInstanceRequests for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequests -func (c *EC2) CancelSpotInstanceRequests(input *CancelSpotInstanceRequestsInput) (*CancelSpotInstanceRequestsOutput, error) { - req, out := c.CancelSpotInstanceRequestsRequest(input) - return out, req.Send() -} - -// CancelSpotInstanceRequestsWithContext is the same as CancelSpotInstanceRequests with the addition of -// the ability to pass a context and additional request options. -// -// See CancelSpotInstanceRequests for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CancelSpotInstanceRequestsWithContext(ctx aws.Context, input *CancelSpotInstanceRequestsInput, opts ...request.Option) (*CancelSpotInstanceRequestsOutput, error) { - req, out := c.CancelSpotInstanceRequestsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opConfirmProductInstance = "ConfirmProductInstance" - -// ConfirmProductInstanceRequest generates a "aws/request.Request" representing the -// client's request for the ConfirmProductInstance operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ConfirmProductInstance for more information on using the ConfirmProductInstance -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ConfirmProductInstanceRequest method. -// req, resp := client.ConfirmProductInstanceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstance -func (c *EC2) ConfirmProductInstanceRequest(input *ConfirmProductInstanceInput) (req *request.Request, output *ConfirmProductInstanceOutput) { - op := &request.Operation{ - Name: opConfirmProductInstance, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ConfirmProductInstanceInput{} - } - - output = &ConfirmProductInstanceOutput{} - req = c.newRequest(op, input, output) - return -} - -// ConfirmProductInstance API operation for Amazon Elastic Compute Cloud. -// -// Determines whether a product code is associated with an instance. This action -// can only be used by the owner of the product code. It is useful when a product -// code owner must verify whether another user's instance is eligible for support. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ConfirmProductInstance for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstance -func (c *EC2) ConfirmProductInstance(input *ConfirmProductInstanceInput) (*ConfirmProductInstanceOutput, error) { - req, out := c.ConfirmProductInstanceRequest(input) - return out, req.Send() -} - -// ConfirmProductInstanceWithContext is the same as ConfirmProductInstance with the addition of -// the ability to pass a context and additional request options. -// -// See ConfirmProductInstance for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ConfirmProductInstanceWithContext(ctx aws.Context, input *ConfirmProductInstanceInput, opts ...request.Option) (*ConfirmProductInstanceOutput, error) { - req, out := c.ConfirmProductInstanceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCopyFpgaImage = "CopyFpgaImage" - -// CopyFpgaImageRequest generates a "aws/request.Request" representing the -// client's request for the CopyFpgaImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CopyFpgaImage for more information on using the CopyFpgaImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CopyFpgaImageRequest method. -// req, resp := client.CopyFpgaImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyFpgaImage -func (c *EC2) CopyFpgaImageRequest(input *CopyFpgaImageInput) (req *request.Request, output *CopyFpgaImageOutput) { - op := &request.Operation{ - Name: opCopyFpgaImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CopyFpgaImageInput{} - } - - output = &CopyFpgaImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// CopyFpgaImage API operation for Amazon Elastic Compute Cloud. -// -// Copies the specified Amazon FPGA Image (AFI) to the current Region. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CopyFpgaImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyFpgaImage -func (c *EC2) CopyFpgaImage(input *CopyFpgaImageInput) (*CopyFpgaImageOutput, error) { - req, out := c.CopyFpgaImageRequest(input) - return out, req.Send() -} - -// CopyFpgaImageWithContext is the same as CopyFpgaImage with the addition of -// the ability to pass a context and additional request options. -// -// See CopyFpgaImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CopyFpgaImageWithContext(ctx aws.Context, input *CopyFpgaImageInput, opts ...request.Option) (*CopyFpgaImageOutput, error) { - req, out := c.CopyFpgaImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCopyImage = "CopyImage" - -// CopyImageRequest generates a "aws/request.Request" representing the -// client's request for the CopyImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CopyImage for more information on using the CopyImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CopyImageRequest method. -// req, resp := client.CopyImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImage -func (c *EC2) CopyImageRequest(input *CopyImageInput) (req *request.Request, output *CopyImageOutput) { - op := &request.Operation{ - Name: opCopyImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CopyImageInput{} - } - - output = &CopyImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// CopyImage API operation for Amazon Elastic Compute Cloud. -// -// Initiates the copy of an AMI from the specified source Region to the current -// Region. You specify the destination Region by using its endpoint when making -// the request. -// -// Copies of encrypted backing snapshots for the AMI are encrypted. Copies of -// unencrypted backing snapshots remain unencrypted, unless you set Encrypted -// during the copy operation. You cannot create an unencrypted copy of an encrypted -// backing snapshot. -// -// For more information about the prerequisites and limits when copying an AMI, -// see Copying an AMI (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CopyImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImage -func (c *EC2) CopyImage(input *CopyImageInput) (*CopyImageOutput, error) { - req, out := c.CopyImageRequest(input) - return out, req.Send() -} - -// CopyImageWithContext is the same as CopyImage with the addition of -// the ability to pass a context and additional request options. -// -// See CopyImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CopyImageWithContext(ctx aws.Context, input *CopyImageInput, opts ...request.Option) (*CopyImageOutput, error) { - req, out := c.CopyImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCopySnapshot = "CopySnapshot" - -// CopySnapshotRequest generates a "aws/request.Request" representing the -// client's request for the CopySnapshot operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CopySnapshot for more information on using the CopySnapshot -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CopySnapshotRequest method. -// req, resp := client.CopySnapshotRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshot -func (c *EC2) CopySnapshotRequest(input *CopySnapshotInput) (req *request.Request, output *CopySnapshotOutput) { - op := &request.Operation{ - Name: opCopySnapshot, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CopySnapshotInput{} - } - - output = &CopySnapshotOutput{} - req = c.newRequest(op, input, output) - return -} - -// CopySnapshot API operation for Amazon Elastic Compute Cloud. -// -// Copies a point-in-time snapshot of an EBS volume and stores it in Amazon -// S3. You can copy the snapshot within the same Region or from one Region to -// another. You can use the snapshot to create EBS volumes or Amazon Machine -// Images (AMIs). -// -// Copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted -// snapshots remain unencrypted, unless you enable encryption for the snapshot -// copy operation. By default, encrypted snapshot copies use the default AWS -// Key Management Service (AWS KMS) customer master key (CMK); however, you -// can specify a different CMK. -// -// To copy an encrypted snapshot that has been shared from another account, -// you must have permissions for the CMK used to encrypt the snapshot. -// -// Snapshots created by copying another snapshot have an arbitrary volume ID -// that should not be used for any purpose. -// -// For more information, see Copying an Amazon EBS Snapshot (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CopySnapshot for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshot -func (c *EC2) CopySnapshot(input *CopySnapshotInput) (*CopySnapshotOutput, error) { - req, out := c.CopySnapshotRequest(input) - return out, req.Send() -} - -// CopySnapshotWithContext is the same as CopySnapshot with the addition of -// the ability to pass a context and additional request options. -// -// See CopySnapshot for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CopySnapshotWithContext(ctx aws.Context, input *CopySnapshotInput, opts ...request.Option) (*CopySnapshotOutput, error) { - req, out := c.CopySnapshotRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateCapacityReservation = "CreateCapacityReservation" - -// CreateCapacityReservationRequest generates a "aws/request.Request" representing the -// client's request for the CreateCapacityReservation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateCapacityReservation for more information on using the CreateCapacityReservation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateCapacityReservationRequest method. -// req, resp := client.CreateCapacityReservationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservation -func (c *EC2) CreateCapacityReservationRequest(input *CreateCapacityReservationInput) (req *request.Request, output *CreateCapacityReservationOutput) { - op := &request.Operation{ - Name: opCreateCapacityReservation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateCapacityReservationInput{} - } - - output = &CreateCapacityReservationOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateCapacityReservation API operation for Amazon Elastic Compute Cloud. -// -// Creates a new Capacity Reservation with the specified attributes. -// -// Capacity Reservations enable you to reserve capacity for your Amazon EC2 -// instances in a specific Availability Zone for any duration. This gives you -// the flexibility to selectively add capacity reservations and still get the -// Regional RI discounts for that usage. By creating Capacity Reservations, -// you ensure that you always have access to Amazon EC2 capacity when you need -// it, for as long as you need it. For more information, see Capacity Reservations -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Your request to create a Capacity Reservation could fail if Amazon EC2 does -// not have sufficient capacity to fulfill the request. If your request fails -// due to Amazon EC2 capacity constraints, either try again at a later time, -// try in a different Availability Zone, or request a smaller capacity reservation. -// If your application is flexible across instance types and sizes, try to create -// a Capacity Reservation with different instance attributes. -// -// Your request could also fail if the requested quantity exceeds your On-Demand -// Instance limit for the selected instance type. If your request fails due -// to limit constraints, increase your On-Demand Instance limit for the required -// instance type and try again. For more information about increasing your instance -// limits, see Amazon EC2 Service Limits (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateCapacityReservation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservation -func (c *EC2) CreateCapacityReservation(input *CreateCapacityReservationInput) (*CreateCapacityReservationOutput, error) { - req, out := c.CreateCapacityReservationRequest(input) - return out, req.Send() -} - -// CreateCapacityReservationWithContext is the same as CreateCapacityReservation with the addition of -// the ability to pass a context and additional request options. -// -// See CreateCapacityReservation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateCapacityReservationWithContext(ctx aws.Context, input *CreateCapacityReservationInput, opts ...request.Option) (*CreateCapacityReservationOutput, error) { - req, out := c.CreateCapacityReservationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateClientVpnEndpoint = "CreateClientVpnEndpoint" - -// CreateClientVpnEndpointRequest generates a "aws/request.Request" representing the -// client's request for the CreateClientVpnEndpoint operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateClientVpnEndpoint for more information on using the CreateClientVpnEndpoint -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateClientVpnEndpointRequest method. -// req, resp := client.CreateClientVpnEndpointRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnEndpoint -func (c *EC2) CreateClientVpnEndpointRequest(input *CreateClientVpnEndpointInput) (req *request.Request, output *CreateClientVpnEndpointOutput) { - op := &request.Operation{ - Name: opCreateClientVpnEndpoint, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateClientVpnEndpointInput{} - } - - output = &CreateClientVpnEndpointOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateClientVpnEndpoint API operation for Amazon Elastic Compute Cloud. -// -// Creates a Client VPN endpoint. A Client VPN endpoint is the resource you -// create and configure to enable and manage client VPN sessions. It is the -// destination endpoint at which all client VPN sessions are terminated. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateClientVpnEndpoint for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnEndpoint -func (c *EC2) CreateClientVpnEndpoint(input *CreateClientVpnEndpointInput) (*CreateClientVpnEndpointOutput, error) { - req, out := c.CreateClientVpnEndpointRequest(input) - return out, req.Send() -} - -// CreateClientVpnEndpointWithContext is the same as CreateClientVpnEndpoint with the addition of -// the ability to pass a context and additional request options. -// -// See CreateClientVpnEndpoint for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateClientVpnEndpointWithContext(ctx aws.Context, input *CreateClientVpnEndpointInput, opts ...request.Option) (*CreateClientVpnEndpointOutput, error) { - req, out := c.CreateClientVpnEndpointRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateClientVpnRoute = "CreateClientVpnRoute" - -// CreateClientVpnRouteRequest generates a "aws/request.Request" representing the -// client's request for the CreateClientVpnRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateClientVpnRoute for more information on using the CreateClientVpnRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateClientVpnRouteRequest method. -// req, resp := client.CreateClientVpnRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnRoute -func (c *EC2) CreateClientVpnRouteRequest(input *CreateClientVpnRouteInput) (req *request.Request, output *CreateClientVpnRouteOutput) { - op := &request.Operation{ - Name: opCreateClientVpnRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateClientVpnRouteInput{} - } - - output = &CreateClientVpnRouteOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateClientVpnRoute API operation for Amazon Elastic Compute Cloud. -// -// Adds a route to a network to a Client VPN endpoint. Each Client VPN endpoint -// has a route table that describes the available destination network routes. -// Each route in the route table specifies the path for traffic to specific -// resources or networks. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateClientVpnRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnRoute -func (c *EC2) CreateClientVpnRoute(input *CreateClientVpnRouteInput) (*CreateClientVpnRouteOutput, error) { - req, out := c.CreateClientVpnRouteRequest(input) - return out, req.Send() -} - -// CreateClientVpnRouteWithContext is the same as CreateClientVpnRoute with the addition of -// the ability to pass a context and additional request options. -// -// See CreateClientVpnRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateClientVpnRouteWithContext(ctx aws.Context, input *CreateClientVpnRouteInput, opts ...request.Option) (*CreateClientVpnRouteOutput, error) { - req, out := c.CreateClientVpnRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateCustomerGateway = "CreateCustomerGateway" - -// CreateCustomerGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateCustomerGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateCustomerGateway for more information on using the CreateCustomerGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateCustomerGatewayRequest method. -// req, resp := client.CreateCustomerGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGateway -func (c *EC2) CreateCustomerGatewayRequest(input *CreateCustomerGatewayInput) (req *request.Request, output *CreateCustomerGatewayOutput) { - op := &request.Operation{ - Name: opCreateCustomerGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateCustomerGatewayInput{} - } - - output = &CreateCustomerGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateCustomerGateway API operation for Amazon Elastic Compute Cloud. -// -// Provides information to AWS about your VPN customer gateway device. The customer -// gateway is the appliance at your end of the VPN connection. (The device on -// the AWS side of the VPN connection is the virtual private gateway.) You must -// provide the Internet-routable IP address of the customer gateway's external -// interface. The IP address must be static and can be behind a device performing -// network address translation (NAT). -// -// For devices that use Border Gateway Protocol (BGP), you can also provide -// the device's BGP Autonomous System Number (ASN). You can use an existing -// ASN assigned to your network. If you don't have an ASN already, you can use -// a private ASN (in the 64512 - 65534 range). -// -// Amazon EC2 supports all 2-byte ASN numbers in the range of 1 - 65534, with -// the exception of 7224, which is reserved in the us-east-1 Region, and 9059, -// which is reserved in the eu-west-1 Region. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// To create more than one customer gateway with the same VPN type, IP address, -// and BGP ASN, specify a unique device name for each customer gateway. Identical -// requests return information about the existing customer gateway and do not -// create new customer gateways. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateCustomerGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGateway -func (c *EC2) CreateCustomerGateway(input *CreateCustomerGatewayInput) (*CreateCustomerGatewayOutput, error) { - req, out := c.CreateCustomerGatewayRequest(input) - return out, req.Send() -} - -// CreateCustomerGatewayWithContext is the same as CreateCustomerGateway with the addition of -// the ability to pass a context and additional request options. -// -// See CreateCustomerGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateCustomerGatewayWithContext(ctx aws.Context, input *CreateCustomerGatewayInput, opts ...request.Option) (*CreateCustomerGatewayOutput, error) { - req, out := c.CreateCustomerGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateDefaultSubnet = "CreateDefaultSubnet" - -// CreateDefaultSubnetRequest generates a "aws/request.Request" representing the -// client's request for the CreateDefaultSubnet operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateDefaultSubnet for more information on using the CreateDefaultSubnet -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateDefaultSubnetRequest method. -// req, resp := client.CreateDefaultSubnetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultSubnet -func (c *EC2) CreateDefaultSubnetRequest(input *CreateDefaultSubnetInput) (req *request.Request, output *CreateDefaultSubnetOutput) { - op := &request.Operation{ - Name: opCreateDefaultSubnet, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateDefaultSubnetInput{} - } - - output = &CreateDefaultSubnetOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateDefaultSubnet API operation for Amazon Elastic Compute Cloud. -// -// Creates a default subnet with a size /20 IPv4 CIDR block in the specified -// Availability Zone in your default VPC. You can have only one default subnet -// per Availability Zone. For more information, see Creating a Default Subnet -// (https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateDefaultSubnet for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultSubnet -func (c *EC2) CreateDefaultSubnet(input *CreateDefaultSubnetInput) (*CreateDefaultSubnetOutput, error) { - req, out := c.CreateDefaultSubnetRequest(input) - return out, req.Send() -} - -// CreateDefaultSubnetWithContext is the same as CreateDefaultSubnet with the addition of -// the ability to pass a context and additional request options. -// -// See CreateDefaultSubnet for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateDefaultSubnetWithContext(ctx aws.Context, input *CreateDefaultSubnetInput, opts ...request.Option) (*CreateDefaultSubnetOutput, error) { - req, out := c.CreateDefaultSubnetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateDefaultVpc = "CreateDefaultVpc" - -// CreateDefaultVpcRequest generates a "aws/request.Request" representing the -// client's request for the CreateDefaultVpc operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateDefaultVpc for more information on using the CreateDefaultVpc -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateDefaultVpcRequest method. -// req, resp := client.CreateDefaultVpcRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultVpc -func (c *EC2) CreateDefaultVpcRequest(input *CreateDefaultVpcInput) (req *request.Request, output *CreateDefaultVpcOutput) { - op := &request.Operation{ - Name: opCreateDefaultVpc, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateDefaultVpcInput{} - } - - output = &CreateDefaultVpcOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateDefaultVpc API operation for Amazon Elastic Compute Cloud. -// -// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet -// in each Availability Zone. For more information about the components of a -// default VPC, see Default VPC and Default Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) -// in the Amazon Virtual Private Cloud User Guide. You cannot specify the components -// of the default VPC yourself. -// -// If you deleted your previous default VPC, you can create a default VPC. You -// cannot have more than one default VPC per Region. -// -// If your account supports EC2-Classic, you cannot use this action to create -// a default VPC in a Region that supports EC2-Classic. If you want a default -// VPC in a Region that supports EC2-Classic, see "I really want a default VPC -// for my existing EC2 account. Is that possible?" in the Default VPCs FAQ (http://aws.amazon.com/vpc/faqs/#Default_VPCs). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateDefaultVpc for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultVpc -func (c *EC2) CreateDefaultVpc(input *CreateDefaultVpcInput) (*CreateDefaultVpcOutput, error) { - req, out := c.CreateDefaultVpcRequest(input) - return out, req.Send() -} - -// CreateDefaultVpcWithContext is the same as CreateDefaultVpc with the addition of -// the ability to pass a context and additional request options. -// -// See CreateDefaultVpc for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateDefaultVpcWithContext(ctx aws.Context, input *CreateDefaultVpcInput, opts ...request.Option) (*CreateDefaultVpcOutput, error) { - req, out := c.CreateDefaultVpcRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateDhcpOptions = "CreateDhcpOptions" - -// CreateDhcpOptionsRequest generates a "aws/request.Request" representing the -// client's request for the CreateDhcpOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateDhcpOptions for more information on using the CreateDhcpOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateDhcpOptionsRequest method. -// req, resp := client.CreateDhcpOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptions -func (c *EC2) CreateDhcpOptionsRequest(input *CreateDhcpOptionsInput) (req *request.Request, output *CreateDhcpOptionsOutput) { - op := &request.Operation{ - Name: opCreateDhcpOptions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateDhcpOptionsInput{} - } - - output = &CreateDhcpOptionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateDhcpOptions API operation for Amazon Elastic Compute Cloud. -// -// Creates a set of DHCP options for your VPC. After creating the set, you must -// associate it with the VPC, causing all existing and new instances that you -// launch in the VPC to use this set of DHCP options. The following are the -// individual DHCP options you can specify. For more information about the options, -// see RFC 2132 (http://www.ietf.org/rfc/rfc2132.txt). -// -// * domain-name-servers - The IP addresses of up to four domain name servers, -// or AmazonProvidedDNS. The default DHCP option set specifies AmazonProvidedDNS. -// If specifying more than one domain name server, specify the IP addresses -// in a single parameter, separated by commas. To have your instance receive -// a custom DNS hostname as specified in domain-name, you must set domain-name-servers -// to a custom DNS server. -// -// * domain-name - If you're using AmazonProvidedDNS in us-east-1, specify -// ec2.internal. If you're using AmazonProvidedDNS in another Region, specify -// region.compute.internal (for example, ap-northeast-1.compute.internal). -// Otherwise, specify a domain name (for example, MyCompany.com). This value -// is used to complete unqualified DNS hostnames. Important: Some Linux operating -// systems accept multiple domain names separated by spaces. However, Windows -// and other Linux operating systems treat the value as a single domain, -// which results in unexpected behavior. If your DHCP options set is associated -// with a VPC that has instances with multiple operating systems, specify -// only one domain name. -// -// * ntp-servers - The IP addresses of up to four Network Time Protocol (NTP) -// servers. -// -// * netbios-name-servers - The IP addresses of up to four NetBIOS name servers. -// -// * netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend -// that you specify 2 (broadcast and multicast are not currently supported). -// For more information about these node types, see RFC 2132 (http://www.ietf.org/rfc/rfc2132.txt). -// -// Your VPC automatically starts out with a set of DHCP options that includes -// only a DNS server that we provide (AmazonProvidedDNS). If you create a set -// of options, and if your VPC has an internet gateway, make sure to set the -// domain-name-servers option either to AmazonProvidedDNS or to a domain name -// server of your choice. For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateDhcpOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptions -func (c *EC2) CreateDhcpOptions(input *CreateDhcpOptionsInput) (*CreateDhcpOptionsOutput, error) { - req, out := c.CreateDhcpOptionsRequest(input) - return out, req.Send() -} - -// CreateDhcpOptionsWithContext is the same as CreateDhcpOptions with the addition of -// the ability to pass a context and additional request options. -// -// See CreateDhcpOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateDhcpOptionsWithContext(ctx aws.Context, input *CreateDhcpOptionsInput, opts ...request.Option) (*CreateDhcpOptionsOutput, error) { - req, out := c.CreateDhcpOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateEgressOnlyInternetGateway = "CreateEgressOnlyInternetGateway" - -// CreateEgressOnlyInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateEgressOnlyInternetGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateEgressOnlyInternetGateway for more information on using the CreateEgressOnlyInternetGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateEgressOnlyInternetGatewayRequest method. -// req, resp := client.CreateEgressOnlyInternetGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGateway -func (c *EC2) CreateEgressOnlyInternetGatewayRequest(input *CreateEgressOnlyInternetGatewayInput) (req *request.Request, output *CreateEgressOnlyInternetGatewayOutput) { - op := &request.Operation{ - Name: opCreateEgressOnlyInternetGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateEgressOnlyInternetGatewayInput{} - } - - output = &CreateEgressOnlyInternetGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateEgressOnlyInternetGateway API operation for Amazon Elastic Compute Cloud. -// -// [IPv6 only] Creates an egress-only internet gateway for your VPC. An egress-only -// internet gateway is used to enable outbound communication over IPv6 from -// instances in your VPC to the internet, and prevents hosts outside of your -// VPC from initiating an IPv6 connection with your instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateEgressOnlyInternetGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGateway -func (c *EC2) CreateEgressOnlyInternetGateway(input *CreateEgressOnlyInternetGatewayInput) (*CreateEgressOnlyInternetGatewayOutput, error) { - req, out := c.CreateEgressOnlyInternetGatewayRequest(input) - return out, req.Send() -} - -// CreateEgressOnlyInternetGatewayWithContext is the same as CreateEgressOnlyInternetGateway with the addition of -// the ability to pass a context and additional request options. -// -// See CreateEgressOnlyInternetGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateEgressOnlyInternetGatewayWithContext(ctx aws.Context, input *CreateEgressOnlyInternetGatewayInput, opts ...request.Option) (*CreateEgressOnlyInternetGatewayOutput, error) { - req, out := c.CreateEgressOnlyInternetGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateFleet = "CreateFleet" - -// CreateFleetRequest generates a "aws/request.Request" representing the -// client's request for the CreateFleet operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateFleet for more information on using the CreateFleet -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateFleetRequest method. -// req, resp := client.CreateFleetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleet -func (c *EC2) CreateFleetRequest(input *CreateFleetInput) (req *request.Request, output *CreateFleetOutput) { - op := &request.Operation{ - Name: opCreateFleet, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateFleetInput{} - } - - output = &CreateFleetOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateFleet API operation for Amazon Elastic Compute Cloud. -// -// Launches an EC2 Fleet. -// -// You can create a single EC2 Fleet that includes multiple launch specifications -// that vary by instance type, AMI, Availability Zone, or subnet. -// -// For more information, see Launching an EC2 Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateFleet for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleet -func (c *EC2) CreateFleet(input *CreateFleetInput) (*CreateFleetOutput, error) { - req, out := c.CreateFleetRequest(input) - return out, req.Send() -} - -// CreateFleetWithContext is the same as CreateFleet with the addition of -// the ability to pass a context and additional request options. -// -// See CreateFleet for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateFleetWithContext(ctx aws.Context, input *CreateFleetInput, opts ...request.Option) (*CreateFleetOutput, error) { - req, out := c.CreateFleetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateFlowLogs = "CreateFlowLogs" - -// CreateFlowLogsRequest generates a "aws/request.Request" representing the -// client's request for the CreateFlowLogs operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateFlowLogs for more information on using the CreateFlowLogs -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateFlowLogsRequest method. -// req, resp := client.CreateFlowLogsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogs -func (c *EC2) CreateFlowLogsRequest(input *CreateFlowLogsInput) (req *request.Request, output *CreateFlowLogsOutput) { - op := &request.Operation{ - Name: opCreateFlowLogs, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateFlowLogsInput{} - } - - output = &CreateFlowLogsOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateFlowLogs API operation for Amazon Elastic Compute Cloud. -// -// Creates one or more flow logs to capture information about IP traffic for -// a specific network interface, subnet, or VPC. -// -// Flow log data for a monitored network interface is recorded as flow log records, -// which are log events consisting of fields that describe the traffic flow. -// For more information, see Flow Log Records (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) -// in the Amazon Virtual Private Cloud User Guide. -// -// When publishing to CloudWatch Logs, flow log records are published to a log -// group, and each network interface has a unique log stream in the log group. -// When publishing to Amazon S3, flow log records for all of the monitored network -// interfaces are published to a single log file object that is stored in the -// specified bucket. -// -// For more information, see VPC Flow Logs (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateFlowLogs for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogs -func (c *EC2) CreateFlowLogs(input *CreateFlowLogsInput) (*CreateFlowLogsOutput, error) { - req, out := c.CreateFlowLogsRequest(input) - return out, req.Send() -} - -// CreateFlowLogsWithContext is the same as CreateFlowLogs with the addition of -// the ability to pass a context and additional request options. -// -// See CreateFlowLogs for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateFlowLogsWithContext(ctx aws.Context, input *CreateFlowLogsInput, opts ...request.Option) (*CreateFlowLogsOutput, error) { - req, out := c.CreateFlowLogsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateFpgaImage = "CreateFpgaImage" - -// CreateFpgaImageRequest generates a "aws/request.Request" representing the -// client's request for the CreateFpgaImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateFpgaImage for more information on using the CreateFpgaImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateFpgaImageRequest method. -// req, resp := client.CreateFpgaImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFpgaImage -func (c *EC2) CreateFpgaImageRequest(input *CreateFpgaImageInput) (req *request.Request, output *CreateFpgaImageOutput) { - op := &request.Operation{ - Name: opCreateFpgaImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateFpgaImageInput{} - } - - output = &CreateFpgaImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateFpgaImage API operation for Amazon Elastic Compute Cloud. -// -// Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP). -// -// The create operation is asynchronous. To verify that the AFI is ready for -// use, check the output logs. -// -// An AFI contains the FPGA bitstream that is ready to download to an FPGA. -// You can securely deploy an AFI on multiple FPGA-accelerated instances. For -// more information, see the AWS FPGA Hardware Development Kit (https://github.com/aws/aws-fpga/). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateFpgaImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFpgaImage -func (c *EC2) CreateFpgaImage(input *CreateFpgaImageInput) (*CreateFpgaImageOutput, error) { - req, out := c.CreateFpgaImageRequest(input) - return out, req.Send() -} - -// CreateFpgaImageWithContext is the same as CreateFpgaImage with the addition of -// the ability to pass a context and additional request options. -// -// See CreateFpgaImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateFpgaImageWithContext(ctx aws.Context, input *CreateFpgaImageInput, opts ...request.Option) (*CreateFpgaImageOutput, error) { - req, out := c.CreateFpgaImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateImage = "CreateImage" - -// CreateImageRequest generates a "aws/request.Request" representing the -// client's request for the CreateImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateImage for more information on using the CreateImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateImageRequest method. -// req, resp := client.CreateImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImage -func (c *EC2) CreateImageRequest(input *CreateImageInput) (req *request.Request, output *CreateImageOutput) { - op := &request.Operation{ - Name: opCreateImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateImageInput{} - } - - output = &CreateImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateImage API operation for Amazon Elastic Compute Cloud. -// -// Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that -// is either running or stopped. -// -// If you customized your instance with instance store volumes or EBS volumes -// in addition to the root device volume, the new AMI contains block device -// mapping information for those volumes. When you launch an instance from this -// new AMI, the instance automatically launches with those additional volumes. -// -// For more information, see Creating Amazon EBS-Backed Linux AMIs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImage -func (c *EC2) CreateImage(input *CreateImageInput) (*CreateImageOutput, error) { - req, out := c.CreateImageRequest(input) - return out, req.Send() -} - -// CreateImageWithContext is the same as CreateImage with the addition of -// the ability to pass a context and additional request options. -// -// See CreateImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateImageWithContext(ctx aws.Context, input *CreateImageInput, opts ...request.Option) (*CreateImageOutput, error) { - req, out := c.CreateImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateInstanceExportTask = "CreateInstanceExportTask" - -// CreateInstanceExportTaskRequest generates a "aws/request.Request" representing the -// client's request for the CreateInstanceExportTask operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateInstanceExportTask for more information on using the CreateInstanceExportTask -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateInstanceExportTaskRequest method. -// req, resp := client.CreateInstanceExportTaskRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTask -func (c *EC2) CreateInstanceExportTaskRequest(input *CreateInstanceExportTaskInput) (req *request.Request, output *CreateInstanceExportTaskOutput) { - op := &request.Operation{ - Name: opCreateInstanceExportTask, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateInstanceExportTaskInput{} - } - - output = &CreateInstanceExportTaskOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateInstanceExportTask API operation for Amazon Elastic Compute Cloud. -// -// Exports a running or stopped instance to an S3 bucket. -// -// For information about the supported operating systems, image formats, and -// known limitations for the types of instances you can export, see Exporting -// an Instance as a VM Using VM Import/Export (https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) -// in the VM Import/Export User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateInstanceExportTask for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTask -func (c *EC2) CreateInstanceExportTask(input *CreateInstanceExportTaskInput) (*CreateInstanceExportTaskOutput, error) { - req, out := c.CreateInstanceExportTaskRequest(input) - return out, req.Send() -} - -// CreateInstanceExportTaskWithContext is the same as CreateInstanceExportTask with the addition of -// the ability to pass a context and additional request options. -// -// See CreateInstanceExportTask for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateInstanceExportTaskWithContext(ctx aws.Context, input *CreateInstanceExportTaskInput, opts ...request.Option) (*CreateInstanceExportTaskOutput, error) { - req, out := c.CreateInstanceExportTaskRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateInternetGateway = "CreateInternetGateway" - -// CreateInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateInternetGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateInternetGateway for more information on using the CreateInternetGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateInternetGatewayRequest method. -// req, resp := client.CreateInternetGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGateway -func (c *EC2) CreateInternetGatewayRequest(input *CreateInternetGatewayInput) (req *request.Request, output *CreateInternetGatewayOutput) { - op := &request.Operation{ - Name: opCreateInternetGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateInternetGatewayInput{} - } - - output = &CreateInternetGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateInternetGateway API operation for Amazon Elastic Compute Cloud. -// -// Creates an internet gateway for use with a VPC. After creating the internet -// gateway, you attach it to a VPC using AttachInternetGateway. -// -// For more information about your VPC and internet gateway, see the Amazon -// Virtual Private Cloud User Guide (https://docs.aws.amazon.com/vpc/latest/userguide/). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateInternetGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGateway -func (c *EC2) CreateInternetGateway(input *CreateInternetGatewayInput) (*CreateInternetGatewayOutput, error) { - req, out := c.CreateInternetGatewayRequest(input) - return out, req.Send() -} - -// CreateInternetGatewayWithContext is the same as CreateInternetGateway with the addition of -// the ability to pass a context and additional request options. -// -// See CreateInternetGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateInternetGatewayWithContext(ctx aws.Context, input *CreateInternetGatewayInput, opts ...request.Option) (*CreateInternetGatewayOutput, error) { - req, out := c.CreateInternetGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateKeyPair = "CreateKeyPair" - -// CreateKeyPairRequest generates a "aws/request.Request" representing the -// client's request for the CreateKeyPair operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateKeyPair for more information on using the CreateKeyPair -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateKeyPairRequest method. -// req, resp := client.CreateKeyPairRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPair -func (c *EC2) CreateKeyPairRequest(input *CreateKeyPairInput) (req *request.Request, output *CreateKeyPairOutput) { - op := &request.Operation{ - Name: opCreateKeyPair, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateKeyPairInput{} - } - - output = &CreateKeyPairOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateKeyPair API operation for Amazon Elastic Compute Cloud. -// -// Creates a 2048-bit RSA key pair with the specified name. Amazon EC2 stores -// the public key and displays the private key for you to save to a file. The -// private key is returned as an unencrypted PEM encoded PKCS#1 private key. -// If a key with the specified name already exists, Amazon EC2 returns an error. -// -// You can have up to five thousand key pairs per Region. -// -// The key pair returned to you is available only in the Region in which you -// create it. If you prefer, you can create your own key pair using a third-party -// tool and upload it to any Region using ImportKeyPair. -// -// For more information, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateKeyPair for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPair -func (c *EC2) CreateKeyPair(input *CreateKeyPairInput) (*CreateKeyPairOutput, error) { - req, out := c.CreateKeyPairRequest(input) - return out, req.Send() -} - -// CreateKeyPairWithContext is the same as CreateKeyPair with the addition of -// the ability to pass a context and additional request options. -// -// See CreateKeyPair for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateKeyPairWithContext(ctx aws.Context, input *CreateKeyPairInput, opts ...request.Option) (*CreateKeyPairOutput, error) { - req, out := c.CreateKeyPairRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateLaunchTemplate = "CreateLaunchTemplate" - -// CreateLaunchTemplateRequest generates a "aws/request.Request" representing the -// client's request for the CreateLaunchTemplate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateLaunchTemplate for more information on using the CreateLaunchTemplate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateLaunchTemplateRequest method. -// req, resp := client.CreateLaunchTemplateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplate -func (c *EC2) CreateLaunchTemplateRequest(input *CreateLaunchTemplateInput) (req *request.Request, output *CreateLaunchTemplateOutput) { - op := &request.Operation{ - Name: opCreateLaunchTemplate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateLaunchTemplateInput{} - } - - output = &CreateLaunchTemplateOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateLaunchTemplate API operation for Amazon Elastic Compute Cloud. -// -// Creates a launch template. A launch template contains the parameters to launch -// an instance. When you launch an instance using RunInstances, you can specify -// a launch template instead of providing the launch parameters in the request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateLaunchTemplate for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplate -func (c *EC2) CreateLaunchTemplate(input *CreateLaunchTemplateInput) (*CreateLaunchTemplateOutput, error) { - req, out := c.CreateLaunchTemplateRequest(input) - return out, req.Send() -} - -// CreateLaunchTemplateWithContext is the same as CreateLaunchTemplate with the addition of -// the ability to pass a context and additional request options. -// -// See CreateLaunchTemplate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateLaunchTemplateWithContext(ctx aws.Context, input *CreateLaunchTemplateInput, opts ...request.Option) (*CreateLaunchTemplateOutput, error) { - req, out := c.CreateLaunchTemplateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateLaunchTemplateVersion = "CreateLaunchTemplateVersion" - -// CreateLaunchTemplateVersionRequest generates a "aws/request.Request" representing the -// client's request for the CreateLaunchTemplateVersion operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateLaunchTemplateVersion for more information on using the CreateLaunchTemplateVersion -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateLaunchTemplateVersionRequest method. -// req, resp := client.CreateLaunchTemplateVersionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateVersion -func (c *EC2) CreateLaunchTemplateVersionRequest(input *CreateLaunchTemplateVersionInput) (req *request.Request, output *CreateLaunchTemplateVersionOutput) { - op := &request.Operation{ - Name: opCreateLaunchTemplateVersion, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateLaunchTemplateVersionInput{} - } - - output = &CreateLaunchTemplateVersionOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateLaunchTemplateVersion API operation for Amazon Elastic Compute Cloud. -// -// Creates a new version for a launch template. You can specify an existing -// version of launch template from which to base the new version. -// -// Launch template versions are numbered in the order in which they are created. -// You cannot specify, change, or replace the numbering of launch template versions. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateLaunchTemplateVersion for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateVersion -func (c *EC2) CreateLaunchTemplateVersion(input *CreateLaunchTemplateVersionInput) (*CreateLaunchTemplateVersionOutput, error) { - req, out := c.CreateLaunchTemplateVersionRequest(input) - return out, req.Send() -} - -// CreateLaunchTemplateVersionWithContext is the same as CreateLaunchTemplateVersion with the addition of -// the ability to pass a context and additional request options. -// -// See CreateLaunchTemplateVersion for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateLaunchTemplateVersionWithContext(ctx aws.Context, input *CreateLaunchTemplateVersionInput, opts ...request.Option) (*CreateLaunchTemplateVersionOutput, error) { - req, out := c.CreateLaunchTemplateVersionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateNatGateway = "CreateNatGateway" - -// CreateNatGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateNatGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateNatGateway for more information on using the CreateNatGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateNatGatewayRequest method. -// req, resp := client.CreateNatGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGateway -func (c *EC2) CreateNatGatewayRequest(input *CreateNatGatewayInput) (req *request.Request, output *CreateNatGatewayOutput) { - op := &request.Operation{ - Name: opCreateNatGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateNatGatewayInput{} - } - - output = &CreateNatGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateNatGateway API operation for Amazon Elastic Compute Cloud. -// -// Creates a NAT gateway in the specified public subnet. This action creates -// a network interface in the specified subnet with a private IP address from -// the IP address range of the subnet. Internet-bound traffic from a private -// subnet can be routed to the NAT gateway, therefore enabling instances in -// the private subnet to connect to the internet. For more information, see -// NAT Gateways (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateNatGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGateway -func (c *EC2) CreateNatGateway(input *CreateNatGatewayInput) (*CreateNatGatewayOutput, error) { - req, out := c.CreateNatGatewayRequest(input) - return out, req.Send() -} - -// CreateNatGatewayWithContext is the same as CreateNatGateway with the addition of -// the ability to pass a context and additional request options. -// -// See CreateNatGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateNatGatewayWithContext(ctx aws.Context, input *CreateNatGatewayInput, opts ...request.Option) (*CreateNatGatewayOutput, error) { - req, out := c.CreateNatGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateNetworkAcl = "CreateNetworkAcl" - -// CreateNetworkAclRequest generates a "aws/request.Request" representing the -// client's request for the CreateNetworkAcl operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateNetworkAcl for more information on using the CreateNetworkAcl -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateNetworkAclRequest method. -// req, resp := client.CreateNetworkAclRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAcl -func (c *EC2) CreateNetworkAclRequest(input *CreateNetworkAclInput) (req *request.Request, output *CreateNetworkAclOutput) { - op := &request.Operation{ - Name: opCreateNetworkAcl, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateNetworkAclInput{} - } - - output = &CreateNetworkAclOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateNetworkAcl API operation for Amazon Elastic Compute Cloud. -// -// Creates a network ACL in a VPC. Network ACLs provide an optional layer of -// security (in addition to security groups) for the instances in your VPC. -// -// For more information, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateNetworkAcl for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAcl -func (c *EC2) CreateNetworkAcl(input *CreateNetworkAclInput) (*CreateNetworkAclOutput, error) { - req, out := c.CreateNetworkAclRequest(input) - return out, req.Send() -} - -// CreateNetworkAclWithContext is the same as CreateNetworkAcl with the addition of -// the ability to pass a context and additional request options. -// -// See CreateNetworkAcl for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateNetworkAclWithContext(ctx aws.Context, input *CreateNetworkAclInput, opts ...request.Option) (*CreateNetworkAclOutput, error) { - req, out := c.CreateNetworkAclRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateNetworkAclEntry = "CreateNetworkAclEntry" - -// CreateNetworkAclEntryRequest generates a "aws/request.Request" representing the -// client's request for the CreateNetworkAclEntry operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateNetworkAclEntry for more information on using the CreateNetworkAclEntry -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateNetworkAclEntryRequest method. -// req, resp := client.CreateNetworkAclEntryRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntry -func (c *EC2) CreateNetworkAclEntryRequest(input *CreateNetworkAclEntryInput) (req *request.Request, output *CreateNetworkAclEntryOutput) { - op := &request.Operation{ - Name: opCreateNetworkAclEntry, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateNetworkAclEntryInput{} - } - - output = &CreateNetworkAclEntryOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CreateNetworkAclEntry API operation for Amazon Elastic Compute Cloud. -// -// Creates an entry (a rule) in a network ACL with the specified rule number. -// Each network ACL has a set of numbered ingress rules and a separate set of -// numbered egress rules. When determining whether a packet should be allowed -// in or out of a subnet associated with the ACL, we process the entries in -// the ACL according to the rule numbers, in ascending order. Each network ACL -// has a set of ingress rules and a separate set of egress rules. -// -// We recommend that you leave room between the rule numbers (for example, 100, -// 110, 120, ...), and not number them one right after the other (for example, -// 101, 102, 103, ...). This makes it easier to add a rule between existing -// ones without having to renumber the rules. -// -// After you add an entry, you can't modify it; you must either replace it, -// or create an entry and delete the old one. -// -// For more information about network ACLs, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateNetworkAclEntry for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntry -func (c *EC2) CreateNetworkAclEntry(input *CreateNetworkAclEntryInput) (*CreateNetworkAclEntryOutput, error) { - req, out := c.CreateNetworkAclEntryRequest(input) - return out, req.Send() -} - -// CreateNetworkAclEntryWithContext is the same as CreateNetworkAclEntry with the addition of -// the ability to pass a context and additional request options. -// -// See CreateNetworkAclEntry for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateNetworkAclEntryWithContext(ctx aws.Context, input *CreateNetworkAclEntryInput, opts ...request.Option) (*CreateNetworkAclEntryOutput, error) { - req, out := c.CreateNetworkAclEntryRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateNetworkInterface = "CreateNetworkInterface" - -// CreateNetworkInterfaceRequest generates a "aws/request.Request" representing the -// client's request for the CreateNetworkInterface operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateNetworkInterface for more information on using the CreateNetworkInterface -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateNetworkInterfaceRequest method. -// req, resp := client.CreateNetworkInterfaceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterface -func (c *EC2) CreateNetworkInterfaceRequest(input *CreateNetworkInterfaceInput) (req *request.Request, output *CreateNetworkInterfaceOutput) { - op := &request.Operation{ - Name: opCreateNetworkInterface, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateNetworkInterfaceInput{} - } - - output = &CreateNetworkInterfaceOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateNetworkInterface API operation for Amazon Elastic Compute Cloud. -// -// Creates a network interface in the specified subnet. -// -// For more information about network interfaces, see Elastic Network Interfaces -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) in the -// Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateNetworkInterface for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterface -func (c *EC2) CreateNetworkInterface(input *CreateNetworkInterfaceInput) (*CreateNetworkInterfaceOutput, error) { - req, out := c.CreateNetworkInterfaceRequest(input) - return out, req.Send() -} - -// CreateNetworkInterfaceWithContext is the same as CreateNetworkInterface with the addition of -// the ability to pass a context and additional request options. -// -// See CreateNetworkInterface for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateNetworkInterfaceWithContext(ctx aws.Context, input *CreateNetworkInterfaceInput, opts ...request.Option) (*CreateNetworkInterfaceOutput, error) { - req, out := c.CreateNetworkInterfaceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateNetworkInterfacePermission = "CreateNetworkInterfacePermission" - -// CreateNetworkInterfacePermissionRequest generates a "aws/request.Request" representing the -// client's request for the CreateNetworkInterfacePermission operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateNetworkInterfacePermission for more information on using the CreateNetworkInterfacePermission -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateNetworkInterfacePermissionRequest method. -// req, resp := client.CreateNetworkInterfacePermissionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfacePermission -func (c *EC2) CreateNetworkInterfacePermissionRequest(input *CreateNetworkInterfacePermissionInput) (req *request.Request, output *CreateNetworkInterfacePermissionOutput) { - op := &request.Operation{ - Name: opCreateNetworkInterfacePermission, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateNetworkInterfacePermissionInput{} - } - - output = &CreateNetworkInterfacePermissionOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateNetworkInterfacePermission API operation for Amazon Elastic Compute Cloud. -// -// Grants an AWS-authorized account permission to attach the specified network -// interface to an instance in their account. -// -// You can grant permission to a single AWS account only, and only one account -// at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateNetworkInterfacePermission for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfacePermission -func (c *EC2) CreateNetworkInterfacePermission(input *CreateNetworkInterfacePermissionInput) (*CreateNetworkInterfacePermissionOutput, error) { - req, out := c.CreateNetworkInterfacePermissionRequest(input) - return out, req.Send() -} - -// CreateNetworkInterfacePermissionWithContext is the same as CreateNetworkInterfacePermission with the addition of -// the ability to pass a context and additional request options. -// -// See CreateNetworkInterfacePermission for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateNetworkInterfacePermissionWithContext(ctx aws.Context, input *CreateNetworkInterfacePermissionInput, opts ...request.Option) (*CreateNetworkInterfacePermissionOutput, error) { - req, out := c.CreateNetworkInterfacePermissionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreatePlacementGroup = "CreatePlacementGroup" - -// CreatePlacementGroupRequest generates a "aws/request.Request" representing the -// client's request for the CreatePlacementGroup operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreatePlacementGroup for more information on using the CreatePlacementGroup -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreatePlacementGroupRequest method. -// req, resp := client.CreatePlacementGroupRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroup -func (c *EC2) CreatePlacementGroupRequest(input *CreatePlacementGroupInput) (req *request.Request, output *CreatePlacementGroupOutput) { - op := &request.Operation{ - Name: opCreatePlacementGroup, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreatePlacementGroupInput{} - } - - output = &CreatePlacementGroupOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CreatePlacementGroup API operation for Amazon Elastic Compute Cloud. -// -// Creates a placement group in which to launch instances. The strategy of the -// placement group determines how the instances are organized within the group. -// -// A cluster placement group is a logical grouping of instances within a single -// Availability Zone that benefit from low network latency, high network throughput. -// A spread placement group places instances on distinct hardware. A partition -// placement group places groups of instances in different partitions, where -// instances in one partition do not share the same hardware with instances -// in another partition. -// -// For more information, see Placement Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreatePlacementGroup for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroup -func (c *EC2) CreatePlacementGroup(input *CreatePlacementGroupInput) (*CreatePlacementGroupOutput, error) { - req, out := c.CreatePlacementGroupRequest(input) - return out, req.Send() -} - -// CreatePlacementGroupWithContext is the same as CreatePlacementGroup with the addition of -// the ability to pass a context and additional request options. -// -// See CreatePlacementGroup for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreatePlacementGroupWithContext(ctx aws.Context, input *CreatePlacementGroupInput, opts ...request.Option) (*CreatePlacementGroupOutput, error) { - req, out := c.CreatePlacementGroupRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateReservedInstancesListing = "CreateReservedInstancesListing" - -// CreateReservedInstancesListingRequest generates a "aws/request.Request" representing the -// client's request for the CreateReservedInstancesListing operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateReservedInstancesListing for more information on using the CreateReservedInstancesListing -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateReservedInstancesListingRequest method. -// req, resp := client.CreateReservedInstancesListingRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListing -func (c *EC2) CreateReservedInstancesListingRequest(input *CreateReservedInstancesListingInput) (req *request.Request, output *CreateReservedInstancesListingOutput) { - op := &request.Operation{ - Name: opCreateReservedInstancesListing, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateReservedInstancesListingInput{} - } - - output = &CreateReservedInstancesListingOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateReservedInstancesListing API operation for Amazon Elastic Compute Cloud. -// -// Creates a listing for Amazon EC2 Standard Reserved Instances to be sold in -// the Reserved Instance Marketplace. You can submit one Standard Reserved Instance -// listing at a time. To get a list of your Standard Reserved Instances, you -// can use the DescribeReservedInstances operation. -// -// Only Standard Reserved Instances can be sold in the Reserved Instance Marketplace. -// Convertible Reserved Instances cannot be sold. -// -// The Reserved Instance Marketplace matches sellers who want to resell Standard -// Reserved Instance capacity that they no longer need with buyers who want -// to purchase additional capacity. Reserved Instances bought and sold through -// the Reserved Instance Marketplace work like any other Reserved Instances. -// -// To sell your Standard Reserved Instances, you must first register as a seller -// in the Reserved Instance Marketplace. After completing the registration process, -// you can create a Reserved Instance Marketplace listing of some or all of -// your Standard Reserved Instances, and specify the upfront price to receive -// for them. Your Standard Reserved Instance listings then become available -// for purchase. To view the details of your Standard Reserved Instance listing, -// you can use the DescribeReservedInstancesListings operation. -// -// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateReservedInstancesListing for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListing -func (c *EC2) CreateReservedInstancesListing(input *CreateReservedInstancesListingInput) (*CreateReservedInstancesListingOutput, error) { - req, out := c.CreateReservedInstancesListingRequest(input) - return out, req.Send() -} - -// CreateReservedInstancesListingWithContext is the same as CreateReservedInstancesListing with the addition of -// the ability to pass a context and additional request options. -// -// See CreateReservedInstancesListing for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateReservedInstancesListingWithContext(ctx aws.Context, input *CreateReservedInstancesListingInput, opts ...request.Option) (*CreateReservedInstancesListingOutput, error) { - req, out := c.CreateReservedInstancesListingRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateRoute = "CreateRoute" - -// CreateRouteRequest generates a "aws/request.Request" representing the -// client's request for the CreateRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateRoute for more information on using the CreateRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateRouteRequest method. -// req, resp := client.CreateRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRoute -func (c *EC2) CreateRouteRequest(input *CreateRouteInput) (req *request.Request, output *CreateRouteOutput) { - op := &request.Operation{ - Name: opCreateRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateRouteInput{} - } - - output = &CreateRouteOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateRoute API operation for Amazon Elastic Compute Cloud. -// -// Creates a route in a route table within a VPC. -// -// You must specify one of the following targets: internet gateway or virtual -// private gateway, NAT instance, NAT gateway, VPC peering connection, network -// interface, or egress-only internet gateway. -// -// When determining how to route traffic, we use the route with the most specific -// match. For example, traffic is destined for the IPv4 address 192.0.2.3, and -// the route table includes the following two IPv4 routes: -// -// * 192.0.2.0/24 (goes to some target A) -// -// * 192.0.2.0/28 (goes to some target B) -// -// Both routes apply to the traffic destined for 192.0.2.3. However, the second -// route in the list covers a smaller number of IP addresses and is therefore -// more specific, so we use that route to determine where to target the traffic. -// -// For more information about route tables, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRoute -func (c *EC2) CreateRoute(input *CreateRouteInput) (*CreateRouteOutput, error) { - req, out := c.CreateRouteRequest(input) - return out, req.Send() -} - -// CreateRouteWithContext is the same as CreateRoute with the addition of -// the ability to pass a context and additional request options. -// -// See CreateRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateRouteWithContext(ctx aws.Context, input *CreateRouteInput, opts ...request.Option) (*CreateRouteOutput, error) { - req, out := c.CreateRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateRouteTable = "CreateRouteTable" - -// CreateRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the CreateRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateRouteTable for more information on using the CreateRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateRouteTableRequest method. -// req, resp := client.CreateRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTable -func (c *EC2) CreateRouteTableRequest(input *CreateRouteTableInput) (req *request.Request, output *CreateRouteTableOutput) { - op := &request.Operation{ - Name: opCreateRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateRouteTableInput{} - } - - output = &CreateRouteTableOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Creates a route table for the specified VPC. After you create a route table, -// you can add routes and associate the table with a subnet. -// -// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTable -func (c *EC2) CreateRouteTable(input *CreateRouteTableInput) (*CreateRouteTableOutput, error) { - req, out := c.CreateRouteTableRequest(input) - return out, req.Send() -} - -// CreateRouteTableWithContext is the same as CreateRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See CreateRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateRouteTableWithContext(ctx aws.Context, input *CreateRouteTableInput, opts ...request.Option) (*CreateRouteTableOutput, error) { - req, out := c.CreateRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateSecurityGroup = "CreateSecurityGroup" - -// CreateSecurityGroupRequest generates a "aws/request.Request" representing the -// client's request for the CreateSecurityGroup operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateSecurityGroup for more information on using the CreateSecurityGroup -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateSecurityGroupRequest method. -// req, resp := client.CreateSecurityGroupRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroup -func (c *EC2) CreateSecurityGroupRequest(input *CreateSecurityGroupInput) (req *request.Request, output *CreateSecurityGroupOutput) { - op := &request.Operation{ - Name: opCreateSecurityGroup, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateSecurityGroupInput{} - } - - output = &CreateSecurityGroupOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateSecurityGroup API operation for Amazon Elastic Compute Cloud. -// -// Creates a security group. -// -// A security group acts as a virtual firewall for your instance to control -// inbound and outbound traffic. For more information, see Amazon EC2 Security -// Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) -// in the Amazon Elastic Compute Cloud User Guide and Security Groups for Your -// VPC (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// When you create a security group, you specify a friendly name of your choice. -// You can have a security group for use in EC2-Classic with the same name as -// a security group for use in a VPC. However, you can't have two security groups -// for use in EC2-Classic with the same name or two security groups for use -// in a VPC with the same name. -// -// You have a default security group for use in EC2-Classic and a default security -// group for use in your VPC. If you don't specify a security group when you -// launch an instance, the instance is launched into the appropriate default -// security group. A default security group includes a default rule that grants -// instances unrestricted network access to each other. -// -// You can add or remove rules from your security groups using AuthorizeSecurityGroupIngress, -// AuthorizeSecurityGroupEgress, RevokeSecurityGroupIngress, and RevokeSecurityGroupEgress. -// -// For more information about VPC security group limits, see Amazon VPC Limits -// (https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateSecurityGroup for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroup -func (c *EC2) CreateSecurityGroup(input *CreateSecurityGroupInput) (*CreateSecurityGroupOutput, error) { - req, out := c.CreateSecurityGroupRequest(input) - return out, req.Send() -} - -// CreateSecurityGroupWithContext is the same as CreateSecurityGroup with the addition of -// the ability to pass a context and additional request options. -// -// See CreateSecurityGroup for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateSecurityGroupWithContext(ctx aws.Context, input *CreateSecurityGroupInput, opts ...request.Option) (*CreateSecurityGroupOutput, error) { - req, out := c.CreateSecurityGroupRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateSnapshot = "CreateSnapshot" - -// CreateSnapshotRequest generates a "aws/request.Request" representing the -// client's request for the CreateSnapshot operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateSnapshot for more information on using the CreateSnapshot -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateSnapshotRequest method. -// req, resp := client.CreateSnapshotRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshot -func (c *EC2) CreateSnapshotRequest(input *CreateSnapshotInput) (req *request.Request, output *Snapshot) { - op := &request.Operation{ - Name: opCreateSnapshot, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateSnapshotInput{} - } - - output = &Snapshot{} - req = c.newRequest(op, input, output) - return -} - -// CreateSnapshot API operation for Amazon Elastic Compute Cloud. -// -// Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use -// snapshots for backups, to make copies of EBS volumes, and to save data before -// shutting down an instance. -// -// When a snapshot is created, any AWS Marketplace product codes that are associated -// with the source volume are propagated to the snapshot. -// -// You can take a snapshot of an attached volume that is in use. However, snapshots -// only capture data that has been written to your EBS volume at the time the -// snapshot command is issued; this may exclude any data that has been cached -// by any applications or the operating system. If you can pause any file systems -// on the volume long enough to take a snapshot, your snapshot should be complete. -// However, if you cannot pause all file writes to the volume, you should unmount -// the volume from within the instance, issue the snapshot command, and then -// remount the volume to ensure a consistent and complete snapshot. You may -// remount and use your volume while the snapshot status is pending. -// -// To create a snapshot for EBS volumes that serve as root devices, you should -// stop the instance before taking the snapshot. -// -// Snapshots that are taken from encrypted volumes are automatically encrypted. -// Volumes that are created from encrypted snapshots are also automatically -// encrypted. Your encrypted volumes and any associated snapshots always remain -// protected. -// -// You can tag your snapshots during creation. For more information, see Tagging -// Your Amazon EC2 Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// For more information, see Amazon Elastic Block Store (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) -// and Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateSnapshot for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshot -func (c *EC2) CreateSnapshot(input *CreateSnapshotInput) (*Snapshot, error) { - req, out := c.CreateSnapshotRequest(input) - return out, req.Send() -} - -// CreateSnapshotWithContext is the same as CreateSnapshot with the addition of -// the ability to pass a context and additional request options. -// -// See CreateSnapshot for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateSnapshotWithContext(ctx aws.Context, input *CreateSnapshotInput, opts ...request.Option) (*Snapshot, error) { - req, out := c.CreateSnapshotRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateSnapshots = "CreateSnapshots" - -// CreateSnapshotsRequest generates a "aws/request.Request" representing the -// client's request for the CreateSnapshots operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateSnapshots for more information on using the CreateSnapshots -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateSnapshotsRequest method. -// req, resp := client.CreateSnapshotsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshots -func (c *EC2) CreateSnapshotsRequest(input *CreateSnapshotsInput) (req *request.Request, output *CreateSnapshotsOutput) { - op := &request.Operation{ - Name: opCreateSnapshots, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateSnapshotsInput{} - } - - output = &CreateSnapshotsOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateSnapshots API operation for Amazon Elastic Compute Cloud. -// -// Creates crash-consistent snapshots of multiple EBS volumes and stores the -// data in S3. Volumes are chosen by specifying an instance. Any attached volumes -// will produce one snapshot each that is crash-consistent across the instance. -// Boot volumes can be excluded by changing the parameters. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateSnapshots for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshots -func (c *EC2) CreateSnapshots(input *CreateSnapshotsInput) (*CreateSnapshotsOutput, error) { - req, out := c.CreateSnapshotsRequest(input) - return out, req.Send() -} - -// CreateSnapshotsWithContext is the same as CreateSnapshots with the addition of -// the ability to pass a context and additional request options. -// -// See CreateSnapshots for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateSnapshotsWithContext(ctx aws.Context, input *CreateSnapshotsInput, opts ...request.Option) (*CreateSnapshotsOutput, error) { - req, out := c.CreateSnapshotsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateSpotDatafeedSubscription = "CreateSpotDatafeedSubscription" - -// CreateSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the -// client's request for the CreateSpotDatafeedSubscription operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateSpotDatafeedSubscription for more information on using the CreateSpotDatafeedSubscription -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateSpotDatafeedSubscriptionRequest method. -// req, resp := client.CreateSpotDatafeedSubscriptionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscription -func (c *EC2) CreateSpotDatafeedSubscriptionRequest(input *CreateSpotDatafeedSubscriptionInput) (req *request.Request, output *CreateSpotDatafeedSubscriptionOutput) { - op := &request.Operation{ - Name: opCreateSpotDatafeedSubscription, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateSpotDatafeedSubscriptionInput{} - } - - output = &CreateSpotDatafeedSubscriptionOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. -// -// Creates a data feed for Spot Instances, enabling you to view Spot Instance -// usage logs. You can create one data feed per AWS account. For more information, -// see Spot Instance Data Feed (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) -// in the Amazon EC2 User Guide for Linux Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateSpotDatafeedSubscription for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscription -func (c *EC2) CreateSpotDatafeedSubscription(input *CreateSpotDatafeedSubscriptionInput) (*CreateSpotDatafeedSubscriptionOutput, error) { - req, out := c.CreateSpotDatafeedSubscriptionRequest(input) - return out, req.Send() -} - -// CreateSpotDatafeedSubscriptionWithContext is the same as CreateSpotDatafeedSubscription with the addition of -// the ability to pass a context and additional request options. -// -// See CreateSpotDatafeedSubscription for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateSpotDatafeedSubscriptionWithContext(ctx aws.Context, input *CreateSpotDatafeedSubscriptionInput, opts ...request.Option) (*CreateSpotDatafeedSubscriptionOutput, error) { - req, out := c.CreateSpotDatafeedSubscriptionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateSubnet = "CreateSubnet" - -// CreateSubnetRequest generates a "aws/request.Request" representing the -// client's request for the CreateSubnet operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateSubnet for more information on using the CreateSubnet -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateSubnetRequest method. -// req, resp := client.CreateSubnetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnet -func (c *EC2) CreateSubnetRequest(input *CreateSubnetInput) (req *request.Request, output *CreateSubnetOutput) { - op := &request.Operation{ - Name: opCreateSubnet, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateSubnetInput{} - } - - output = &CreateSubnetOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateSubnet API operation for Amazon Elastic Compute Cloud. -// -// Creates a subnet in an existing VPC. -// -// When you create each subnet, you provide the VPC ID and IPv4 CIDR block for -// the subnet. After you create a subnet, you can't change its CIDR block. The -// size of the subnet's IPv4 CIDR block can be the same as a VPC's IPv4 CIDR -// block, or a subset of a VPC's IPv4 CIDR block. If you create more than one -// subnet in a VPC, the subnets' CIDR blocks must not overlap. The smallest -// IPv4 subnet (and VPC) you can create uses a /28 netmask (16 IPv4 addresses), -// and the largest uses a /16 netmask (65,536 IPv4 addresses). -// -// If you've associated an IPv6 CIDR block with your VPC, you can create a subnet -// with an IPv6 CIDR block that uses a /64 prefix length. -// -// AWS reserves both the first four and the last IPv4 address in each subnet's -// CIDR block. They're not available for use. -// -// If you add more than one subnet to a VPC, they're set up in a star topology -// with a logical router in the middle. -// -// If you launch an instance in a VPC using an Amazon EBS-backed AMI, the IP -// address doesn't change if you stop and restart the instance (unlike a similar -// instance launched outside a VPC, which gets a new IP address when restarted). -// It's therefore possible to have a subnet with no running instances (they're -// all stopped), but no remaining IP addresses available. -// -// For more information about subnets, see Your VPC and Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateSubnet for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnet -func (c *EC2) CreateSubnet(input *CreateSubnetInput) (*CreateSubnetOutput, error) { - req, out := c.CreateSubnetRequest(input) - return out, req.Send() -} - -// CreateSubnetWithContext is the same as CreateSubnet with the addition of -// the ability to pass a context and additional request options. -// -// See CreateSubnet for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateSubnetWithContext(ctx aws.Context, input *CreateSubnetInput, opts ...request.Option) (*CreateSubnetOutput, error) { - req, out := c.CreateSubnetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTags = "CreateTags" - -// CreateTagsRequest generates a "aws/request.Request" representing the -// client's request for the CreateTags operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTags for more information on using the CreateTags -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTagsRequest method. -// req, resp := client.CreateTagsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTags -func (c *EC2) CreateTagsRequest(input *CreateTagsInput) (req *request.Request, output *CreateTagsOutput) { - op := &request.Operation{ - Name: opCreateTags, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTagsInput{} - } - - output = &CreateTagsOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CreateTags API operation for Amazon Elastic Compute Cloud. -// -// Adds or overwrites the specified tags for the specified Amazon EC2 resource -// or resources. Each resource can have a maximum of 50 tags. Each tag consists -// of a key and optional value. Tag keys must be unique per resource. -// -// For more information about tags, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. For more information about -// creating IAM policies that control users' access to resources based on tags, -// see Supported Resource-Level Permissions for Amazon EC2 API Actions (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTags for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTags -func (c *EC2) CreateTags(input *CreateTagsInput) (*CreateTagsOutput, error) { - req, out := c.CreateTagsRequest(input) - return out, req.Send() -} - -// CreateTagsWithContext is the same as CreateTags with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTags for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTagsWithContext(ctx aws.Context, input *CreateTagsInput, opts ...request.Option) (*CreateTagsOutput, error) { - req, out := c.CreateTagsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTrafficMirrorFilter = "CreateTrafficMirrorFilter" - -// CreateTrafficMirrorFilterRequest generates a "aws/request.Request" representing the -// client's request for the CreateTrafficMirrorFilter operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTrafficMirrorFilter for more information on using the CreateTrafficMirrorFilter -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTrafficMirrorFilterRequest method. -// req, resp := client.CreateTrafficMirrorFilterRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilter -func (c *EC2) CreateTrafficMirrorFilterRequest(input *CreateTrafficMirrorFilterInput) (req *request.Request, output *CreateTrafficMirrorFilterOutput) { - op := &request.Operation{ - Name: opCreateTrafficMirrorFilter, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTrafficMirrorFilterInput{} - } - - output = &CreateTrafficMirrorFilterOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTrafficMirrorFilter API operation for Amazon Elastic Compute Cloud. -// -// Creates a Traffic Mirror filter. -// -// A Traffic Mirror filter is a set of rules that defines the traffic to mirror. -// -// By default, no traffic is mirrored. To mirror traffic, use CreateTrafficMirrorFilterRule -// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilterRule.htm) -// to add Traffic Mirror rules to the filter. The rules you add define what -// traffic gets mirrored. You can also use ModifyTrafficMirrorFilterNetworkServices -// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyTrafficMirrorFilterNetworkServices.html) -// to mirror supported network services. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTrafficMirrorFilter for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilter -func (c *EC2) CreateTrafficMirrorFilter(input *CreateTrafficMirrorFilterInput) (*CreateTrafficMirrorFilterOutput, error) { - req, out := c.CreateTrafficMirrorFilterRequest(input) - return out, req.Send() -} - -// CreateTrafficMirrorFilterWithContext is the same as CreateTrafficMirrorFilter with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTrafficMirrorFilter for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTrafficMirrorFilterWithContext(ctx aws.Context, input *CreateTrafficMirrorFilterInput, opts ...request.Option) (*CreateTrafficMirrorFilterOutput, error) { - req, out := c.CreateTrafficMirrorFilterRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTrafficMirrorFilterRule = "CreateTrafficMirrorFilterRule" - -// CreateTrafficMirrorFilterRuleRequest generates a "aws/request.Request" representing the -// client's request for the CreateTrafficMirrorFilterRule operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTrafficMirrorFilterRule for more information on using the CreateTrafficMirrorFilterRule -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTrafficMirrorFilterRuleRequest method. -// req, resp := client.CreateTrafficMirrorFilterRuleRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRule -func (c *EC2) CreateTrafficMirrorFilterRuleRequest(input *CreateTrafficMirrorFilterRuleInput) (req *request.Request, output *CreateTrafficMirrorFilterRuleOutput) { - op := &request.Operation{ - Name: opCreateTrafficMirrorFilterRule, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTrafficMirrorFilterRuleInput{} - } - - output = &CreateTrafficMirrorFilterRuleOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTrafficMirrorFilterRule API operation for Amazon Elastic Compute Cloud. -// -// Creates a Traffic Mirror filter rule. -// -// A Traffic Mirror rule defines the Traffic Mirror source traffic to mirror. -// -// You need the Traffic Mirror filter ID when you create the rule. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTrafficMirrorFilterRule for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRule -func (c *EC2) CreateTrafficMirrorFilterRule(input *CreateTrafficMirrorFilterRuleInput) (*CreateTrafficMirrorFilterRuleOutput, error) { - req, out := c.CreateTrafficMirrorFilterRuleRequest(input) - return out, req.Send() -} - -// CreateTrafficMirrorFilterRuleWithContext is the same as CreateTrafficMirrorFilterRule with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTrafficMirrorFilterRule for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTrafficMirrorFilterRuleWithContext(ctx aws.Context, input *CreateTrafficMirrorFilterRuleInput, opts ...request.Option) (*CreateTrafficMirrorFilterRuleOutput, error) { - req, out := c.CreateTrafficMirrorFilterRuleRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTrafficMirrorSession = "CreateTrafficMirrorSession" - -// CreateTrafficMirrorSessionRequest generates a "aws/request.Request" representing the -// client's request for the CreateTrafficMirrorSession operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTrafficMirrorSession for more information on using the CreateTrafficMirrorSession -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTrafficMirrorSessionRequest method. -// req, resp := client.CreateTrafficMirrorSessionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorSession -func (c *EC2) CreateTrafficMirrorSessionRequest(input *CreateTrafficMirrorSessionInput) (req *request.Request, output *CreateTrafficMirrorSessionOutput) { - op := &request.Operation{ - Name: opCreateTrafficMirrorSession, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTrafficMirrorSessionInput{} - } - - output = &CreateTrafficMirrorSessionOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTrafficMirrorSession API operation for Amazon Elastic Compute Cloud. -// -// Creates a Traffic Mirror session. -// -// A Traffic Mirror session actively copies packets from a Traffic Mirror source -// to a Traffic Mirror target. Create a filter, and then assign it to the session -// to define a subset of the traffic to mirror, for example all TCP traffic. -// -// The Traffic Mirror source and the Traffic Mirror target (monitoring appliances) -// can be in the same VPC, or in a different VPC connected via VPC peering or -// a transit gateway. -// -// By default, no traffic is mirrored. Use CreateTrafficMirrorFilter (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilter.htm) -// to create filter rules that specify the traffic to mirror. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTrafficMirrorSession for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorSession -func (c *EC2) CreateTrafficMirrorSession(input *CreateTrafficMirrorSessionInput) (*CreateTrafficMirrorSessionOutput, error) { - req, out := c.CreateTrafficMirrorSessionRequest(input) - return out, req.Send() -} - -// CreateTrafficMirrorSessionWithContext is the same as CreateTrafficMirrorSession with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTrafficMirrorSession for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTrafficMirrorSessionWithContext(ctx aws.Context, input *CreateTrafficMirrorSessionInput, opts ...request.Option) (*CreateTrafficMirrorSessionOutput, error) { - req, out := c.CreateTrafficMirrorSessionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTrafficMirrorTarget = "CreateTrafficMirrorTarget" - -// CreateTrafficMirrorTargetRequest generates a "aws/request.Request" representing the -// client's request for the CreateTrafficMirrorTarget operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTrafficMirrorTarget for more information on using the CreateTrafficMirrorTarget -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTrafficMirrorTargetRequest method. -// req, resp := client.CreateTrafficMirrorTargetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorTarget -func (c *EC2) CreateTrafficMirrorTargetRequest(input *CreateTrafficMirrorTargetInput) (req *request.Request, output *CreateTrafficMirrorTargetOutput) { - op := &request.Operation{ - Name: opCreateTrafficMirrorTarget, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTrafficMirrorTargetInput{} - } - - output = &CreateTrafficMirrorTargetOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTrafficMirrorTarget API operation for Amazon Elastic Compute Cloud. -// -// Creates a target for your Traffic Mirror session. -// -// A Traffic Mirror target is the destination for mirrored traffic. The Traffic -// Mirror source and the Traffic Mirror target (monitoring appliances) can be -// in the same VPC, or in different VPCs connected via VPC peering or a transit -// gateway. -// -// A Traffic Mirror target can be a network interface, or a Network Load Balancer. -// -// To use the target in a Traffic Mirror session, use CreateTrafficMirrorSession -// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorSession.htm). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTrafficMirrorTarget for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorTarget -func (c *EC2) CreateTrafficMirrorTarget(input *CreateTrafficMirrorTargetInput) (*CreateTrafficMirrorTargetOutput, error) { - req, out := c.CreateTrafficMirrorTargetRequest(input) - return out, req.Send() -} - -// CreateTrafficMirrorTargetWithContext is the same as CreateTrafficMirrorTarget with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTrafficMirrorTarget for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTrafficMirrorTargetWithContext(ctx aws.Context, input *CreateTrafficMirrorTargetInput, opts ...request.Option) (*CreateTrafficMirrorTargetOutput, error) { - req, out := c.CreateTrafficMirrorTargetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTransitGateway = "CreateTransitGateway" - -// CreateTransitGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateTransitGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTransitGateway for more information on using the CreateTransitGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTransitGatewayRequest method. -// req, resp := client.CreateTransitGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGateway -func (c *EC2) CreateTransitGatewayRequest(input *CreateTransitGatewayInput) (req *request.Request, output *CreateTransitGatewayOutput) { - op := &request.Operation{ - Name: opCreateTransitGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTransitGatewayInput{} - } - - output = &CreateTransitGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTransitGateway API operation for Amazon Elastic Compute Cloud. -// -// Creates a transit gateway. -// -// You can use a transit gateway to interconnect your virtual private clouds -// (VPC) and on-premises networks. After the transit gateway enters the available -// state, you can attach your VPCs and VPN connections to the transit gateway. -// -// To attach your VPCs, use CreateTransitGatewayVpcAttachment. -// -// To attach a VPN connection, use CreateCustomerGateway to create a customer -// gateway and specify the ID of the customer gateway and the ID of the transit -// gateway in a call to CreateVpnConnection. -// -// When you create a transit gateway, we create a default transit gateway route -// table and use it as the default association route table and the default propagation -// route table. You can use CreateTransitGatewayRouteTable to create additional -// transit gateway route tables. If you disable automatic route propagation, -// we do not create a default transit gateway route table. You can use EnableTransitGatewayRouteTablePropagation -// to propagate routes from a resource attachment to a transit gateway route -// table. If you disable automatic associations, you can use AssociateTransitGatewayRouteTable -// to associate a resource attachment with a transit gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTransitGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGateway -func (c *EC2) CreateTransitGateway(input *CreateTransitGatewayInput) (*CreateTransitGatewayOutput, error) { - req, out := c.CreateTransitGatewayRequest(input) - return out, req.Send() -} - -// CreateTransitGatewayWithContext is the same as CreateTransitGateway with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTransitGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTransitGatewayWithContext(ctx aws.Context, input *CreateTransitGatewayInput, opts ...request.Option) (*CreateTransitGatewayOutput, error) { - req, out := c.CreateTransitGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTransitGatewayRoute = "CreateTransitGatewayRoute" - -// CreateTransitGatewayRouteRequest generates a "aws/request.Request" representing the -// client's request for the CreateTransitGatewayRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTransitGatewayRoute for more information on using the CreateTransitGatewayRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTransitGatewayRouteRequest method. -// req, resp := client.CreateTransitGatewayRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRoute -func (c *EC2) CreateTransitGatewayRouteRequest(input *CreateTransitGatewayRouteInput) (req *request.Request, output *CreateTransitGatewayRouteOutput) { - op := &request.Operation{ - Name: opCreateTransitGatewayRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTransitGatewayRouteInput{} - } - - output = &CreateTransitGatewayRouteOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTransitGatewayRoute API operation for Amazon Elastic Compute Cloud. -// -// Creates a static route for the specified transit gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTransitGatewayRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRoute -func (c *EC2) CreateTransitGatewayRoute(input *CreateTransitGatewayRouteInput) (*CreateTransitGatewayRouteOutput, error) { - req, out := c.CreateTransitGatewayRouteRequest(input) - return out, req.Send() -} - -// CreateTransitGatewayRouteWithContext is the same as CreateTransitGatewayRoute with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTransitGatewayRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTransitGatewayRouteWithContext(ctx aws.Context, input *CreateTransitGatewayRouteInput, opts ...request.Option) (*CreateTransitGatewayRouteOutput, error) { - req, out := c.CreateTransitGatewayRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTransitGatewayRouteTable = "CreateTransitGatewayRouteTable" - -// CreateTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the CreateTransitGatewayRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTransitGatewayRouteTable for more information on using the CreateTransitGatewayRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTransitGatewayRouteTableRequest method. -// req, resp := client.CreateTransitGatewayRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTable -func (c *EC2) CreateTransitGatewayRouteTableRequest(input *CreateTransitGatewayRouteTableInput) (req *request.Request, output *CreateTransitGatewayRouteTableOutput) { - op := &request.Operation{ - Name: opCreateTransitGatewayRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTransitGatewayRouteTableInput{} - } - - output = &CreateTransitGatewayRouteTableOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Creates a route table for the specified transit gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTransitGatewayRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTable -func (c *EC2) CreateTransitGatewayRouteTable(input *CreateTransitGatewayRouteTableInput) (*CreateTransitGatewayRouteTableOutput, error) { - req, out := c.CreateTransitGatewayRouteTableRequest(input) - return out, req.Send() -} - -// CreateTransitGatewayRouteTableWithContext is the same as CreateTransitGatewayRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTransitGatewayRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTransitGatewayRouteTableWithContext(ctx aws.Context, input *CreateTransitGatewayRouteTableInput, opts ...request.Option) (*CreateTransitGatewayRouteTableOutput, error) { - req, out := c.CreateTransitGatewayRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateTransitGatewayVpcAttachment = "CreateTransitGatewayVpcAttachment" - -// CreateTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the -// client's request for the CreateTransitGatewayVpcAttachment operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateTransitGatewayVpcAttachment for more information on using the CreateTransitGatewayVpcAttachment -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateTransitGatewayVpcAttachmentRequest method. -// req, resp := client.CreateTransitGatewayVpcAttachmentRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachment -func (c *EC2) CreateTransitGatewayVpcAttachmentRequest(input *CreateTransitGatewayVpcAttachmentInput) (req *request.Request, output *CreateTransitGatewayVpcAttachmentOutput) { - op := &request.Operation{ - Name: opCreateTransitGatewayVpcAttachment, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateTransitGatewayVpcAttachmentInput{} - } - - output = &CreateTransitGatewayVpcAttachmentOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. -// -// Attaches the specified VPC to the specified transit gateway. -// -// If you attach a VPC with a CIDR range that overlaps the CIDR range of a VPC -// that is already attached, the new VPC CIDR range is not propagated to the -// default propagation route table. -// -// To send VPC traffic to an attached transit gateway, add a route to the VPC -// route table using CreateRoute. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateTransitGatewayVpcAttachment for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachment -func (c *EC2) CreateTransitGatewayVpcAttachment(input *CreateTransitGatewayVpcAttachmentInput) (*CreateTransitGatewayVpcAttachmentOutput, error) { - req, out := c.CreateTransitGatewayVpcAttachmentRequest(input) - return out, req.Send() -} - -// CreateTransitGatewayVpcAttachmentWithContext is the same as CreateTransitGatewayVpcAttachment with the addition of -// the ability to pass a context and additional request options. -// -// See CreateTransitGatewayVpcAttachment for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *CreateTransitGatewayVpcAttachmentInput, opts ...request.Option) (*CreateTransitGatewayVpcAttachmentOutput, error) { - req, out := c.CreateTransitGatewayVpcAttachmentRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVolume = "CreateVolume" - -// CreateVolumeRequest generates a "aws/request.Request" representing the -// client's request for the CreateVolume operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVolume for more information on using the CreateVolume -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVolumeRequest method. -// req, resp := client.CreateVolumeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolume -func (c *EC2) CreateVolumeRequest(input *CreateVolumeInput) (req *request.Request, output *Volume) { - op := &request.Operation{ - Name: opCreateVolume, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVolumeInput{} - } - - output = &Volume{} - req = c.newRequest(op, input, output) - return -} - -// CreateVolume API operation for Amazon Elastic Compute Cloud. -// -// Creates an EBS volume that can be attached to an instance in the same Availability -// Zone. The volume is created in the regional endpoint that you send the HTTP -// request to. For more information see Regions and Endpoints (https://docs.aws.amazon.com/general/latest/gr/rande.html). -// -// You can create a new empty volume or restore a volume from an EBS snapshot. -// Any AWS Marketplace product codes from the snapshot are propagated to the -// volume. -// -// You can create encrypted volumes. Encrypted volumes must be attached to instances -// that support Amazon EBS encryption. Volumes that are created from encrypted -// snapshots are also automatically encrypted. For more information, see Amazon -// EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// You can tag your volumes during creation. For more information, see Tagging -// Your Amazon EC2 Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// For more information, see Creating an Amazon EBS Volume (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVolume for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolume -func (c *EC2) CreateVolume(input *CreateVolumeInput) (*Volume, error) { - req, out := c.CreateVolumeRequest(input) - return out, req.Send() -} - -// CreateVolumeWithContext is the same as CreateVolume with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVolume for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVolumeWithContext(ctx aws.Context, input *CreateVolumeInput, opts ...request.Option) (*Volume, error) { - req, out := c.CreateVolumeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpc = "CreateVpc" - -// CreateVpcRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpc operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpc for more information on using the CreateVpc -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpcRequest method. -// req, resp := client.CreateVpcRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpc -func (c *EC2) CreateVpcRequest(input *CreateVpcInput) (req *request.Request, output *CreateVpcOutput) { - op := &request.Operation{ - Name: opCreateVpc, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpcInput{} - } - - output = &CreateVpcOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpc API operation for Amazon Elastic Compute Cloud. -// -// Creates a VPC with the specified IPv4 CIDR block. The smallest VPC you can -// create uses a /28 netmask (16 IPv4 addresses), and the largest uses a /16 -// netmask (65,536 IPv4 addresses). For more information about how large to -// make your VPC, see Your VPC and Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// You can optionally request an Amazon-provided IPv6 CIDR block for the VPC. -// The IPv6 CIDR block uses a /56 prefix length, and is allocated from Amazon's -// pool of IPv6 addresses. You cannot choose the IPv6 range for your VPC. -// -// By default, each instance you launch in the VPC has the default DHCP options, -// which include only a default DNS server that we provide (AmazonProvidedDNS). -// For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// You can specify the instance tenancy value for the VPC when you create it. -// You can't change this value for the VPC after you create it. For more information, -// see Dedicated Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpc for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpc -func (c *EC2) CreateVpc(input *CreateVpcInput) (*CreateVpcOutput, error) { - req, out := c.CreateVpcRequest(input) - return out, req.Send() -} - -// CreateVpcWithContext is the same as CreateVpc with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpc for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpcWithContext(ctx aws.Context, input *CreateVpcInput, opts ...request.Option) (*CreateVpcOutput, error) { - req, out := c.CreateVpcRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpcEndpoint = "CreateVpcEndpoint" - -// CreateVpcEndpointRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpcEndpoint operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpcEndpoint for more information on using the CreateVpcEndpoint -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpcEndpointRequest method. -// req, resp := client.CreateVpcEndpointRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpoint -func (c *EC2) CreateVpcEndpointRequest(input *CreateVpcEndpointInput) (req *request.Request, output *CreateVpcEndpointOutput) { - op := &request.Operation{ - Name: opCreateVpcEndpoint, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpcEndpointInput{} - } - - output = &CreateVpcEndpointOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpcEndpoint API operation for Amazon Elastic Compute Cloud. -// -// Creates a VPC endpoint for a specified service. An endpoint enables you to -// create a private connection between your VPC and the service. The service -// may be provided by AWS, an AWS Marketplace partner, or another AWS account. -// For more information, see VPC Endpoints (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// A gateway endpoint serves as a target for a route in your route table for -// traffic destined for the AWS service. You can specify an endpoint policy -// to attach to the endpoint that will control access to the service from your -// VPC. You can also specify the VPC route tables that use the endpoint. -// -// An interface endpoint is a network interface in your subnet that serves as -// an endpoint for communicating with the specified service. You can specify -// the subnets in which to create an endpoint, and the security groups to associate -// with the endpoint network interface. -// -// Use DescribeVpcEndpointServices to get a list of supported services. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpcEndpoint for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpoint -func (c *EC2) CreateVpcEndpoint(input *CreateVpcEndpointInput) (*CreateVpcEndpointOutput, error) { - req, out := c.CreateVpcEndpointRequest(input) - return out, req.Send() -} - -// CreateVpcEndpointWithContext is the same as CreateVpcEndpoint with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpcEndpoint for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpcEndpointWithContext(ctx aws.Context, input *CreateVpcEndpointInput, opts ...request.Option) (*CreateVpcEndpointOutput, error) { - req, out := c.CreateVpcEndpointRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpcEndpointConnectionNotification = "CreateVpcEndpointConnectionNotification" - -// CreateVpcEndpointConnectionNotificationRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpcEndpointConnectionNotification operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpcEndpointConnectionNotification for more information on using the CreateVpcEndpointConnectionNotification -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpcEndpointConnectionNotificationRequest method. -// req, resp := client.CreateVpcEndpointConnectionNotificationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointConnectionNotification -func (c *EC2) CreateVpcEndpointConnectionNotificationRequest(input *CreateVpcEndpointConnectionNotificationInput) (req *request.Request, output *CreateVpcEndpointConnectionNotificationOutput) { - op := &request.Operation{ - Name: opCreateVpcEndpointConnectionNotification, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpcEndpointConnectionNotificationInput{} - } - - output = &CreateVpcEndpointConnectionNotificationOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpcEndpointConnectionNotification API operation for Amazon Elastic Compute Cloud. -// -// Creates a connection notification for a specified VPC endpoint or VPC endpoint -// service. A connection notification notifies you of specific endpoint events. -// You must create an SNS topic to receive notifications. For more information, -// see Create a Topic (https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) -// in the Amazon Simple Notification Service Developer Guide. -// -// You can create a connection notification for interface endpoints only. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpcEndpointConnectionNotification for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointConnectionNotification -func (c *EC2) CreateVpcEndpointConnectionNotification(input *CreateVpcEndpointConnectionNotificationInput) (*CreateVpcEndpointConnectionNotificationOutput, error) { - req, out := c.CreateVpcEndpointConnectionNotificationRequest(input) - return out, req.Send() -} - -// CreateVpcEndpointConnectionNotificationWithContext is the same as CreateVpcEndpointConnectionNotification with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpcEndpointConnectionNotification for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpcEndpointConnectionNotificationWithContext(ctx aws.Context, input *CreateVpcEndpointConnectionNotificationInput, opts ...request.Option) (*CreateVpcEndpointConnectionNotificationOutput, error) { - req, out := c.CreateVpcEndpointConnectionNotificationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpcEndpointServiceConfiguration = "CreateVpcEndpointServiceConfiguration" - -// CreateVpcEndpointServiceConfigurationRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpcEndpointServiceConfiguration operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpcEndpointServiceConfiguration for more information on using the CreateVpcEndpointServiceConfiguration -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpcEndpointServiceConfigurationRequest method. -// req, resp := client.CreateVpcEndpointServiceConfigurationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointServiceConfiguration -func (c *EC2) CreateVpcEndpointServiceConfigurationRequest(input *CreateVpcEndpointServiceConfigurationInput) (req *request.Request, output *CreateVpcEndpointServiceConfigurationOutput) { - op := &request.Operation{ - Name: opCreateVpcEndpointServiceConfiguration, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpcEndpointServiceConfigurationInput{} - } - - output = &CreateVpcEndpointServiceConfigurationOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpcEndpointServiceConfiguration API operation for Amazon Elastic Compute Cloud. -// -// Creates a VPC endpoint service configuration to which service consumers (AWS -// accounts, IAM users, and IAM roles) can connect. Service consumers can create -// an interface VPC endpoint to connect to your service. -// -// To create an endpoint service configuration, you must first create a Network -// Load Balancer for your service. For more information, see VPC Endpoint Services -// (https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpcEndpointServiceConfiguration for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointServiceConfiguration -func (c *EC2) CreateVpcEndpointServiceConfiguration(input *CreateVpcEndpointServiceConfigurationInput) (*CreateVpcEndpointServiceConfigurationOutput, error) { - req, out := c.CreateVpcEndpointServiceConfigurationRequest(input) - return out, req.Send() -} - -// CreateVpcEndpointServiceConfigurationWithContext is the same as CreateVpcEndpointServiceConfiguration with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpcEndpointServiceConfiguration for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpcEndpointServiceConfigurationWithContext(ctx aws.Context, input *CreateVpcEndpointServiceConfigurationInput, opts ...request.Option) (*CreateVpcEndpointServiceConfigurationOutput, error) { - req, out := c.CreateVpcEndpointServiceConfigurationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpcPeeringConnection = "CreateVpcPeeringConnection" - -// CreateVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpcPeeringConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpcPeeringConnection for more information on using the CreateVpcPeeringConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpcPeeringConnectionRequest method. -// req, resp := client.CreateVpcPeeringConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnection -func (c *EC2) CreateVpcPeeringConnectionRequest(input *CreateVpcPeeringConnectionInput) (req *request.Request, output *CreateVpcPeeringConnectionOutput) { - op := &request.Operation{ - Name: opCreateVpcPeeringConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpcPeeringConnectionInput{} - } - - output = &CreateVpcPeeringConnectionOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. -// -// Requests a VPC peering connection between two VPCs: a requester VPC that -// you own and an accepter VPC with which to create the connection. The accepter -// VPC can belong to another AWS account and can be in a different Region to -// the requester VPC. The requester VPC and accepter VPC cannot have overlapping -// CIDR blocks. -// -// Limitations and rules apply to a VPC peering connection. For more information, -// see the limitations (https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations) -// section in the VPC Peering Guide. -// -// The owner of the accepter VPC must accept the peering request to activate -// the peering connection. The VPC peering connection request expires after -// 7 days, after which it cannot be accepted or rejected. -// -// If you create a VPC peering connection request between VPCs with overlapping -// CIDR blocks, the VPC peering connection has a status of failed. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpcPeeringConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnection -func (c *EC2) CreateVpcPeeringConnection(input *CreateVpcPeeringConnectionInput) (*CreateVpcPeeringConnectionOutput, error) { - req, out := c.CreateVpcPeeringConnectionRequest(input) - return out, req.Send() -} - -// CreateVpcPeeringConnectionWithContext is the same as CreateVpcPeeringConnection with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpcPeeringConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpcPeeringConnectionWithContext(ctx aws.Context, input *CreateVpcPeeringConnectionInput, opts ...request.Option) (*CreateVpcPeeringConnectionOutput, error) { - req, out := c.CreateVpcPeeringConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpnConnection = "CreateVpnConnection" - -// CreateVpnConnectionRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpnConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpnConnection for more information on using the CreateVpnConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpnConnectionRequest method. -// req, resp := client.CreateVpnConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnection -func (c *EC2) CreateVpnConnectionRequest(input *CreateVpnConnectionInput) (req *request.Request, output *CreateVpnConnectionOutput) { - op := &request.Operation{ - Name: opCreateVpnConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpnConnectionInput{} - } - - output = &CreateVpnConnectionOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpnConnection API operation for Amazon Elastic Compute Cloud. -// -// Creates a VPN connection between an existing virtual private gateway and -// a VPN customer gateway. The supported connection type is ipsec.1. -// -// The response includes information that you need to give to your network administrator -// to configure your customer gateway. -// -// We strongly recommend that you use HTTPS when calling this operation because -// the response contains sensitive cryptographic information for configuring -// your customer gateway. -// -// If you decide to shut down your VPN connection for any reason and later create -// a new VPN connection, you must reconfigure your customer gateway with the -// new information returned from this call. -// -// This is an idempotent operation. If you perform the operation more than once, -// Amazon EC2 doesn't return an error. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpnConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnection -func (c *EC2) CreateVpnConnection(input *CreateVpnConnectionInput) (*CreateVpnConnectionOutput, error) { - req, out := c.CreateVpnConnectionRequest(input) - return out, req.Send() -} - -// CreateVpnConnectionWithContext is the same as CreateVpnConnection with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpnConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpnConnectionWithContext(ctx aws.Context, input *CreateVpnConnectionInput, opts ...request.Option) (*CreateVpnConnectionOutput, error) { - req, out := c.CreateVpnConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpnConnectionRoute = "CreateVpnConnectionRoute" - -// CreateVpnConnectionRouteRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpnConnectionRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpnConnectionRoute for more information on using the CreateVpnConnectionRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpnConnectionRouteRequest method. -// req, resp := client.CreateVpnConnectionRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRoute -func (c *EC2) CreateVpnConnectionRouteRequest(input *CreateVpnConnectionRouteInput) (req *request.Request, output *CreateVpnConnectionRouteOutput) { - op := &request.Operation{ - Name: opCreateVpnConnectionRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpnConnectionRouteInput{} - } - - output = &CreateVpnConnectionRouteOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// CreateVpnConnectionRoute API operation for Amazon Elastic Compute Cloud. -// -// Creates a static route associated with a VPN connection between an existing -// virtual private gateway and a VPN customer gateway. The static route allows -// traffic to be routed from the virtual private gateway to the VPN customer -// gateway. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpnConnectionRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRoute -func (c *EC2) CreateVpnConnectionRoute(input *CreateVpnConnectionRouteInput) (*CreateVpnConnectionRouteOutput, error) { - req, out := c.CreateVpnConnectionRouteRequest(input) - return out, req.Send() -} - -// CreateVpnConnectionRouteWithContext is the same as CreateVpnConnectionRoute with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpnConnectionRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpnConnectionRouteWithContext(ctx aws.Context, input *CreateVpnConnectionRouteInput, opts ...request.Option) (*CreateVpnConnectionRouteOutput, error) { - req, out := c.CreateVpnConnectionRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opCreateVpnGateway = "CreateVpnGateway" - -// CreateVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpnGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See CreateVpnGateway for more information on using the CreateVpnGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the CreateVpnGatewayRequest method. -// req, resp := client.CreateVpnGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGateway -func (c *EC2) CreateVpnGatewayRequest(input *CreateVpnGatewayInput) (req *request.Request, output *CreateVpnGatewayOutput) { - op := &request.Operation{ - Name: opCreateVpnGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &CreateVpnGatewayInput{} - } - - output = &CreateVpnGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// CreateVpnGateway API operation for Amazon Elastic Compute Cloud. -// -// Creates a virtual private gateway. A virtual private gateway is the endpoint -// on the VPC side of your VPN connection. You can create a virtual private -// gateway before creating the VPC itself. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpnGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGateway -func (c *EC2) CreateVpnGateway(input *CreateVpnGatewayInput) (*CreateVpnGatewayOutput, error) { - req, out := c.CreateVpnGatewayRequest(input) - return out, req.Send() -} - -// CreateVpnGatewayWithContext is the same as CreateVpnGateway with the addition of -// the ability to pass a context and additional request options. -// -// See CreateVpnGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) CreateVpnGatewayWithContext(ctx aws.Context, input *CreateVpnGatewayInput, opts ...request.Option) (*CreateVpnGatewayOutput, error) { - req, out := c.CreateVpnGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteClientVpnEndpoint = "DeleteClientVpnEndpoint" - -// DeleteClientVpnEndpointRequest generates a "aws/request.Request" representing the -// client's request for the DeleteClientVpnEndpoint operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteClientVpnEndpoint for more information on using the DeleteClientVpnEndpoint -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteClientVpnEndpointRequest method. -// req, resp := client.DeleteClientVpnEndpointRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnEndpoint -func (c *EC2) DeleteClientVpnEndpointRequest(input *DeleteClientVpnEndpointInput) (req *request.Request, output *DeleteClientVpnEndpointOutput) { - op := &request.Operation{ - Name: opDeleteClientVpnEndpoint, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteClientVpnEndpointInput{} - } - - output = &DeleteClientVpnEndpointOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteClientVpnEndpoint API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified Client VPN endpoint. You must disassociate all target -// networks before you can delete a Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteClientVpnEndpoint for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnEndpoint -func (c *EC2) DeleteClientVpnEndpoint(input *DeleteClientVpnEndpointInput) (*DeleteClientVpnEndpointOutput, error) { - req, out := c.DeleteClientVpnEndpointRequest(input) - return out, req.Send() -} - -// DeleteClientVpnEndpointWithContext is the same as DeleteClientVpnEndpoint with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteClientVpnEndpoint for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteClientVpnEndpointWithContext(ctx aws.Context, input *DeleteClientVpnEndpointInput, opts ...request.Option) (*DeleteClientVpnEndpointOutput, error) { - req, out := c.DeleteClientVpnEndpointRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteClientVpnRoute = "DeleteClientVpnRoute" - -// DeleteClientVpnRouteRequest generates a "aws/request.Request" representing the -// client's request for the DeleteClientVpnRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteClientVpnRoute for more information on using the DeleteClientVpnRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteClientVpnRouteRequest method. -// req, resp := client.DeleteClientVpnRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnRoute -func (c *EC2) DeleteClientVpnRouteRequest(input *DeleteClientVpnRouteInput) (req *request.Request, output *DeleteClientVpnRouteOutput) { - op := &request.Operation{ - Name: opDeleteClientVpnRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteClientVpnRouteInput{} - } - - output = &DeleteClientVpnRouteOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteClientVpnRoute API operation for Amazon Elastic Compute Cloud. -// -// Deletes a route from a Client VPN endpoint. You can only delete routes that -// you manually added using the CreateClientVpnRoute action. You cannot delete -// routes that were automatically added when associating a subnet. To remove -// routes that have been automatically added, disassociate the target subnet -// from the Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteClientVpnRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnRoute -func (c *EC2) DeleteClientVpnRoute(input *DeleteClientVpnRouteInput) (*DeleteClientVpnRouteOutput, error) { - req, out := c.DeleteClientVpnRouteRequest(input) - return out, req.Send() -} - -// DeleteClientVpnRouteWithContext is the same as DeleteClientVpnRoute with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteClientVpnRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteClientVpnRouteWithContext(ctx aws.Context, input *DeleteClientVpnRouteInput, opts ...request.Option) (*DeleteClientVpnRouteOutput, error) { - req, out := c.DeleteClientVpnRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteCustomerGateway = "DeleteCustomerGateway" - -// DeleteCustomerGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteCustomerGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteCustomerGateway for more information on using the DeleteCustomerGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteCustomerGatewayRequest method. -// req, resp := client.DeleteCustomerGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGateway -func (c *EC2) DeleteCustomerGatewayRequest(input *DeleteCustomerGatewayInput) (req *request.Request, output *DeleteCustomerGatewayOutput) { - op := &request.Operation{ - Name: opDeleteCustomerGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteCustomerGatewayInput{} - } - - output = &DeleteCustomerGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteCustomerGateway API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified customer gateway. You must delete the VPN connection -// before you can delete the customer gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteCustomerGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGateway -func (c *EC2) DeleteCustomerGateway(input *DeleteCustomerGatewayInput) (*DeleteCustomerGatewayOutput, error) { - req, out := c.DeleteCustomerGatewayRequest(input) - return out, req.Send() -} - -// DeleteCustomerGatewayWithContext is the same as DeleteCustomerGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteCustomerGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteCustomerGatewayWithContext(ctx aws.Context, input *DeleteCustomerGatewayInput, opts ...request.Option) (*DeleteCustomerGatewayOutput, error) { - req, out := c.DeleteCustomerGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteDhcpOptions = "DeleteDhcpOptions" - -// DeleteDhcpOptionsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteDhcpOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteDhcpOptions for more information on using the DeleteDhcpOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteDhcpOptionsRequest method. -// req, resp := client.DeleteDhcpOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptions -func (c *EC2) DeleteDhcpOptionsRequest(input *DeleteDhcpOptionsInput) (req *request.Request, output *DeleteDhcpOptionsOutput) { - op := &request.Operation{ - Name: opDeleteDhcpOptions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteDhcpOptionsInput{} - } - - output = &DeleteDhcpOptionsOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteDhcpOptions API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified set of DHCP options. You must disassociate the set -// of DHCP options before you can delete it. You can disassociate the set of -// DHCP options by associating either a new set of options or the default set -// of options with the VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteDhcpOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptions -func (c *EC2) DeleteDhcpOptions(input *DeleteDhcpOptionsInput) (*DeleteDhcpOptionsOutput, error) { - req, out := c.DeleteDhcpOptionsRequest(input) - return out, req.Send() -} - -// DeleteDhcpOptionsWithContext is the same as DeleteDhcpOptions with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteDhcpOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteDhcpOptionsWithContext(ctx aws.Context, input *DeleteDhcpOptionsInput, opts ...request.Option) (*DeleteDhcpOptionsOutput, error) { - req, out := c.DeleteDhcpOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteEgressOnlyInternetGateway = "DeleteEgressOnlyInternetGateway" - -// DeleteEgressOnlyInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteEgressOnlyInternetGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteEgressOnlyInternetGateway for more information on using the DeleteEgressOnlyInternetGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteEgressOnlyInternetGatewayRequest method. -// req, resp := client.DeleteEgressOnlyInternetGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGateway -func (c *EC2) DeleteEgressOnlyInternetGatewayRequest(input *DeleteEgressOnlyInternetGatewayInput) (req *request.Request, output *DeleteEgressOnlyInternetGatewayOutput) { - op := &request.Operation{ - Name: opDeleteEgressOnlyInternetGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteEgressOnlyInternetGatewayInput{} - } - - output = &DeleteEgressOnlyInternetGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteEgressOnlyInternetGateway API operation for Amazon Elastic Compute Cloud. -// -// Deletes an egress-only internet gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteEgressOnlyInternetGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGateway -func (c *EC2) DeleteEgressOnlyInternetGateway(input *DeleteEgressOnlyInternetGatewayInput) (*DeleteEgressOnlyInternetGatewayOutput, error) { - req, out := c.DeleteEgressOnlyInternetGatewayRequest(input) - return out, req.Send() -} - -// DeleteEgressOnlyInternetGatewayWithContext is the same as DeleteEgressOnlyInternetGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteEgressOnlyInternetGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteEgressOnlyInternetGatewayWithContext(ctx aws.Context, input *DeleteEgressOnlyInternetGatewayInput, opts ...request.Option) (*DeleteEgressOnlyInternetGatewayOutput, error) { - req, out := c.DeleteEgressOnlyInternetGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteFleets = "DeleteFleets" - -// DeleteFleetsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteFleets operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteFleets for more information on using the DeleteFleets -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteFleetsRequest method. -// req, resp := client.DeleteFleetsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleets -func (c *EC2) DeleteFleetsRequest(input *DeleteFleetsInput) (req *request.Request, output *DeleteFleetsOutput) { - op := &request.Operation{ - Name: opDeleteFleets, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteFleetsInput{} - } - - output = &DeleteFleetsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteFleets API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified EC2 Fleet. -// -// After you delete an EC2 Fleet, it launches no new instances. You must specify -// whether an EC2 Fleet should also terminate its instances. If you terminate -// the instances, the EC2 Fleet enters the deleted_terminating state. Otherwise, -// the EC2 Fleet enters the deleted_running state, and the instances continue -// to run until they are interrupted or you terminate them manually. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteFleets for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleets -func (c *EC2) DeleteFleets(input *DeleteFleetsInput) (*DeleteFleetsOutput, error) { - req, out := c.DeleteFleetsRequest(input) - return out, req.Send() -} - -// DeleteFleetsWithContext is the same as DeleteFleets with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteFleets for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteFleetsWithContext(ctx aws.Context, input *DeleteFleetsInput, opts ...request.Option) (*DeleteFleetsOutput, error) { - req, out := c.DeleteFleetsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteFlowLogs = "DeleteFlowLogs" - -// DeleteFlowLogsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteFlowLogs operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteFlowLogs for more information on using the DeleteFlowLogs -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteFlowLogsRequest method. -// req, resp := client.DeleteFlowLogsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogs -func (c *EC2) DeleteFlowLogsRequest(input *DeleteFlowLogsInput) (req *request.Request, output *DeleteFlowLogsOutput) { - op := &request.Operation{ - Name: opDeleteFlowLogs, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteFlowLogsInput{} - } - - output = &DeleteFlowLogsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteFlowLogs API operation for Amazon Elastic Compute Cloud. -// -// Deletes one or more flow logs. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteFlowLogs for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogs -func (c *EC2) DeleteFlowLogs(input *DeleteFlowLogsInput) (*DeleteFlowLogsOutput, error) { - req, out := c.DeleteFlowLogsRequest(input) - return out, req.Send() -} - -// DeleteFlowLogsWithContext is the same as DeleteFlowLogs with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteFlowLogs for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteFlowLogsWithContext(ctx aws.Context, input *DeleteFlowLogsInput, opts ...request.Option) (*DeleteFlowLogsOutput, error) { - req, out := c.DeleteFlowLogsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteFpgaImage = "DeleteFpgaImage" - -// DeleteFpgaImageRequest generates a "aws/request.Request" representing the -// client's request for the DeleteFpgaImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteFpgaImage for more information on using the DeleteFpgaImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteFpgaImageRequest method. -// req, resp := client.DeleteFpgaImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFpgaImage -func (c *EC2) DeleteFpgaImageRequest(input *DeleteFpgaImageInput) (req *request.Request, output *DeleteFpgaImageOutput) { - op := &request.Operation{ - Name: opDeleteFpgaImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteFpgaImageInput{} - } - - output = &DeleteFpgaImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteFpgaImage API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified Amazon FPGA Image (AFI). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteFpgaImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFpgaImage -func (c *EC2) DeleteFpgaImage(input *DeleteFpgaImageInput) (*DeleteFpgaImageOutput, error) { - req, out := c.DeleteFpgaImageRequest(input) - return out, req.Send() -} - -// DeleteFpgaImageWithContext is the same as DeleteFpgaImage with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteFpgaImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteFpgaImageWithContext(ctx aws.Context, input *DeleteFpgaImageInput, opts ...request.Option) (*DeleteFpgaImageOutput, error) { - req, out := c.DeleteFpgaImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteInternetGateway = "DeleteInternetGateway" - -// DeleteInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteInternetGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteInternetGateway for more information on using the DeleteInternetGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteInternetGatewayRequest method. -// req, resp := client.DeleteInternetGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGateway -func (c *EC2) DeleteInternetGatewayRequest(input *DeleteInternetGatewayInput) (req *request.Request, output *DeleteInternetGatewayOutput) { - op := &request.Operation{ - Name: opDeleteInternetGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteInternetGatewayInput{} - } - - output = &DeleteInternetGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteInternetGateway API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified internet gateway. You must detach the internet gateway -// from the VPC before you can delete it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteInternetGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGateway -func (c *EC2) DeleteInternetGateway(input *DeleteInternetGatewayInput) (*DeleteInternetGatewayOutput, error) { - req, out := c.DeleteInternetGatewayRequest(input) - return out, req.Send() -} - -// DeleteInternetGatewayWithContext is the same as DeleteInternetGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteInternetGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteInternetGatewayWithContext(ctx aws.Context, input *DeleteInternetGatewayInput, opts ...request.Option) (*DeleteInternetGatewayOutput, error) { - req, out := c.DeleteInternetGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteKeyPair = "DeleteKeyPair" - -// DeleteKeyPairRequest generates a "aws/request.Request" representing the -// client's request for the DeleteKeyPair operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteKeyPair for more information on using the DeleteKeyPair -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteKeyPairRequest method. -// req, resp := client.DeleteKeyPairRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPair -func (c *EC2) DeleteKeyPairRequest(input *DeleteKeyPairInput) (req *request.Request, output *DeleteKeyPairOutput) { - op := &request.Operation{ - Name: opDeleteKeyPair, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteKeyPairInput{} - } - - output = &DeleteKeyPairOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteKeyPair API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified key pair, by removing the public key from Amazon EC2. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteKeyPair for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPair -func (c *EC2) DeleteKeyPair(input *DeleteKeyPairInput) (*DeleteKeyPairOutput, error) { - req, out := c.DeleteKeyPairRequest(input) - return out, req.Send() -} - -// DeleteKeyPairWithContext is the same as DeleteKeyPair with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteKeyPair for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteKeyPairWithContext(ctx aws.Context, input *DeleteKeyPairInput, opts ...request.Option) (*DeleteKeyPairOutput, error) { - req, out := c.DeleteKeyPairRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteLaunchTemplate = "DeleteLaunchTemplate" - -// DeleteLaunchTemplateRequest generates a "aws/request.Request" representing the -// client's request for the DeleteLaunchTemplate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteLaunchTemplate for more information on using the DeleteLaunchTemplate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteLaunchTemplateRequest method. -// req, resp := client.DeleteLaunchTemplateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplate -func (c *EC2) DeleteLaunchTemplateRequest(input *DeleteLaunchTemplateInput) (req *request.Request, output *DeleteLaunchTemplateOutput) { - op := &request.Operation{ - Name: opDeleteLaunchTemplate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteLaunchTemplateInput{} - } - - output = &DeleteLaunchTemplateOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteLaunchTemplate API operation for Amazon Elastic Compute Cloud. -// -// Deletes a launch template. Deleting a launch template deletes all of its -// versions. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteLaunchTemplate for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplate -func (c *EC2) DeleteLaunchTemplate(input *DeleteLaunchTemplateInput) (*DeleteLaunchTemplateOutput, error) { - req, out := c.DeleteLaunchTemplateRequest(input) - return out, req.Send() -} - -// DeleteLaunchTemplateWithContext is the same as DeleteLaunchTemplate with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteLaunchTemplate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteLaunchTemplateWithContext(ctx aws.Context, input *DeleteLaunchTemplateInput, opts ...request.Option) (*DeleteLaunchTemplateOutput, error) { - req, out := c.DeleteLaunchTemplateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteLaunchTemplateVersions = "DeleteLaunchTemplateVersions" - -// DeleteLaunchTemplateVersionsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteLaunchTemplateVersions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteLaunchTemplateVersions for more information on using the DeleteLaunchTemplateVersions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteLaunchTemplateVersionsRequest method. -// req, resp := client.DeleteLaunchTemplateVersionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersions -func (c *EC2) DeleteLaunchTemplateVersionsRequest(input *DeleteLaunchTemplateVersionsInput) (req *request.Request, output *DeleteLaunchTemplateVersionsOutput) { - op := &request.Operation{ - Name: opDeleteLaunchTemplateVersions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteLaunchTemplateVersionsInput{} - } - - output = &DeleteLaunchTemplateVersionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteLaunchTemplateVersions API operation for Amazon Elastic Compute Cloud. -// -// Deletes one or more versions of a launch template. You cannot delete the -// default version of a launch template; you must first assign a different version -// as the default. If the default version is the only version for the launch -// template, you must delete the entire launch template using DeleteLaunchTemplate. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteLaunchTemplateVersions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersions -func (c *EC2) DeleteLaunchTemplateVersions(input *DeleteLaunchTemplateVersionsInput) (*DeleteLaunchTemplateVersionsOutput, error) { - req, out := c.DeleteLaunchTemplateVersionsRequest(input) - return out, req.Send() -} - -// DeleteLaunchTemplateVersionsWithContext is the same as DeleteLaunchTemplateVersions with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteLaunchTemplateVersions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteLaunchTemplateVersionsWithContext(ctx aws.Context, input *DeleteLaunchTemplateVersionsInput, opts ...request.Option) (*DeleteLaunchTemplateVersionsOutput, error) { - req, out := c.DeleteLaunchTemplateVersionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteNatGateway = "DeleteNatGateway" - -// DeleteNatGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNatGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteNatGateway for more information on using the DeleteNatGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteNatGatewayRequest method. -// req, resp := client.DeleteNatGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGateway -func (c *EC2) DeleteNatGatewayRequest(input *DeleteNatGatewayInput) (req *request.Request, output *DeleteNatGatewayOutput) { - op := &request.Operation{ - Name: opDeleteNatGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteNatGatewayInput{} - } - - output = &DeleteNatGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteNatGateway API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified NAT gateway. Deleting a NAT gateway disassociates its -// Elastic IP address, but does not release the address from your account. Deleting -// a NAT gateway does not delete any NAT gateway routes in your route tables. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNatGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGateway -func (c *EC2) DeleteNatGateway(input *DeleteNatGatewayInput) (*DeleteNatGatewayOutput, error) { - req, out := c.DeleteNatGatewayRequest(input) - return out, req.Send() -} - -// DeleteNatGatewayWithContext is the same as DeleteNatGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteNatGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteNatGatewayWithContext(ctx aws.Context, input *DeleteNatGatewayInput, opts ...request.Option) (*DeleteNatGatewayOutput, error) { - req, out := c.DeleteNatGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteNetworkAcl = "DeleteNetworkAcl" - -// DeleteNetworkAclRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkAcl operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteNetworkAcl for more information on using the DeleteNetworkAcl -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteNetworkAclRequest method. -// req, resp := client.DeleteNetworkAclRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAcl -func (c *EC2) DeleteNetworkAclRequest(input *DeleteNetworkAclInput) (req *request.Request, output *DeleteNetworkAclOutput) { - op := &request.Operation{ - Name: opDeleteNetworkAcl, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteNetworkAclInput{} - } - - output = &DeleteNetworkAclOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteNetworkAcl API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified network ACL. You can't delete the ACL if it's associated -// with any subnets. You can't delete the default network ACL. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkAcl for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAcl -func (c *EC2) DeleteNetworkAcl(input *DeleteNetworkAclInput) (*DeleteNetworkAclOutput, error) { - req, out := c.DeleteNetworkAclRequest(input) - return out, req.Send() -} - -// DeleteNetworkAclWithContext is the same as DeleteNetworkAcl with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteNetworkAcl for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteNetworkAclWithContext(ctx aws.Context, input *DeleteNetworkAclInput, opts ...request.Option) (*DeleteNetworkAclOutput, error) { - req, out := c.DeleteNetworkAclRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteNetworkAclEntry = "DeleteNetworkAclEntry" - -// DeleteNetworkAclEntryRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkAclEntry operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteNetworkAclEntry for more information on using the DeleteNetworkAclEntry -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteNetworkAclEntryRequest method. -// req, resp := client.DeleteNetworkAclEntryRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntry -func (c *EC2) DeleteNetworkAclEntryRequest(input *DeleteNetworkAclEntryInput) (req *request.Request, output *DeleteNetworkAclEntryOutput) { - op := &request.Operation{ - Name: opDeleteNetworkAclEntry, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteNetworkAclEntryInput{} - } - - output = &DeleteNetworkAclEntryOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteNetworkAclEntry API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified ingress or egress entry (rule) from the specified network -// ACL. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkAclEntry for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntry -func (c *EC2) DeleteNetworkAclEntry(input *DeleteNetworkAclEntryInput) (*DeleteNetworkAclEntryOutput, error) { - req, out := c.DeleteNetworkAclEntryRequest(input) - return out, req.Send() -} - -// DeleteNetworkAclEntryWithContext is the same as DeleteNetworkAclEntry with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteNetworkAclEntry for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteNetworkAclEntryWithContext(ctx aws.Context, input *DeleteNetworkAclEntryInput, opts ...request.Option) (*DeleteNetworkAclEntryOutput, error) { - req, out := c.DeleteNetworkAclEntryRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteNetworkInterface = "DeleteNetworkInterface" - -// DeleteNetworkInterfaceRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkInterface operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteNetworkInterface for more information on using the DeleteNetworkInterface -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteNetworkInterfaceRequest method. -// req, resp := client.DeleteNetworkInterfaceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterface -func (c *EC2) DeleteNetworkInterfaceRequest(input *DeleteNetworkInterfaceInput) (req *request.Request, output *DeleteNetworkInterfaceOutput) { - op := &request.Operation{ - Name: opDeleteNetworkInterface, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteNetworkInterfaceInput{} - } - - output = &DeleteNetworkInterfaceOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteNetworkInterface API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified network interface. You must detach the network interface -// before you can delete it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkInterface for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterface -func (c *EC2) DeleteNetworkInterface(input *DeleteNetworkInterfaceInput) (*DeleteNetworkInterfaceOutput, error) { - req, out := c.DeleteNetworkInterfaceRequest(input) - return out, req.Send() -} - -// DeleteNetworkInterfaceWithContext is the same as DeleteNetworkInterface with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteNetworkInterface for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteNetworkInterfaceWithContext(ctx aws.Context, input *DeleteNetworkInterfaceInput, opts ...request.Option) (*DeleteNetworkInterfaceOutput, error) { - req, out := c.DeleteNetworkInterfaceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteNetworkInterfacePermission = "DeleteNetworkInterfacePermission" - -// DeleteNetworkInterfacePermissionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkInterfacePermission operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteNetworkInterfacePermission for more information on using the DeleteNetworkInterfacePermission -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteNetworkInterfacePermissionRequest method. -// req, resp := client.DeleteNetworkInterfacePermissionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfacePermission -func (c *EC2) DeleteNetworkInterfacePermissionRequest(input *DeleteNetworkInterfacePermissionInput) (req *request.Request, output *DeleteNetworkInterfacePermissionOutput) { - op := &request.Operation{ - Name: opDeleteNetworkInterfacePermission, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteNetworkInterfacePermissionInput{} - } - - output = &DeleteNetworkInterfacePermissionOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteNetworkInterfacePermission API operation for Amazon Elastic Compute Cloud. -// -// Deletes a permission for a network interface. By default, you cannot delete -// the permission if the account for which you're removing the permission has -// attached the network interface to an instance. However, you can force delete -// the permission, regardless of any attachment. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkInterfacePermission for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfacePermission -func (c *EC2) DeleteNetworkInterfacePermission(input *DeleteNetworkInterfacePermissionInput) (*DeleteNetworkInterfacePermissionOutput, error) { - req, out := c.DeleteNetworkInterfacePermissionRequest(input) - return out, req.Send() -} - -// DeleteNetworkInterfacePermissionWithContext is the same as DeleteNetworkInterfacePermission with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteNetworkInterfacePermission for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteNetworkInterfacePermissionWithContext(ctx aws.Context, input *DeleteNetworkInterfacePermissionInput, opts ...request.Option) (*DeleteNetworkInterfacePermissionOutput, error) { - req, out := c.DeleteNetworkInterfacePermissionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeletePlacementGroup = "DeletePlacementGroup" - -// DeletePlacementGroupRequest generates a "aws/request.Request" representing the -// client's request for the DeletePlacementGroup operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeletePlacementGroup for more information on using the DeletePlacementGroup -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeletePlacementGroupRequest method. -// req, resp := client.DeletePlacementGroupRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroup -func (c *EC2) DeletePlacementGroupRequest(input *DeletePlacementGroupInput) (req *request.Request, output *DeletePlacementGroupOutput) { - op := &request.Operation{ - Name: opDeletePlacementGroup, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeletePlacementGroupInput{} - } - - output = &DeletePlacementGroupOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeletePlacementGroup API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified placement group. You must terminate all instances in -// the placement group before you can delete the placement group. For more information, -// see Placement Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeletePlacementGroup for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroup -func (c *EC2) DeletePlacementGroup(input *DeletePlacementGroupInput) (*DeletePlacementGroupOutput, error) { - req, out := c.DeletePlacementGroupRequest(input) - return out, req.Send() -} - -// DeletePlacementGroupWithContext is the same as DeletePlacementGroup with the addition of -// the ability to pass a context and additional request options. -// -// See DeletePlacementGroup for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeletePlacementGroupWithContext(ctx aws.Context, input *DeletePlacementGroupInput, opts ...request.Option) (*DeletePlacementGroupOutput, error) { - req, out := c.DeletePlacementGroupRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteQueuedReservedInstances = "DeleteQueuedReservedInstances" - -// DeleteQueuedReservedInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DeleteQueuedReservedInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteQueuedReservedInstances for more information on using the DeleteQueuedReservedInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteQueuedReservedInstancesRequest method. -// req, resp := client.DeleteQueuedReservedInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstances -func (c *EC2) DeleteQueuedReservedInstancesRequest(input *DeleteQueuedReservedInstancesInput) (req *request.Request, output *DeleteQueuedReservedInstancesOutput) { - op := &request.Operation{ - Name: opDeleteQueuedReservedInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteQueuedReservedInstancesInput{} - } - - output = &DeleteQueuedReservedInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteQueuedReservedInstances API operation for Amazon Elastic Compute Cloud. -// -// Deletes the queued purchases for the specified Reserved Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteQueuedReservedInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstances -func (c *EC2) DeleteQueuedReservedInstances(input *DeleteQueuedReservedInstancesInput) (*DeleteQueuedReservedInstancesOutput, error) { - req, out := c.DeleteQueuedReservedInstancesRequest(input) - return out, req.Send() -} - -// DeleteQueuedReservedInstancesWithContext is the same as DeleteQueuedReservedInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteQueuedReservedInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteQueuedReservedInstancesWithContext(ctx aws.Context, input *DeleteQueuedReservedInstancesInput, opts ...request.Option) (*DeleteQueuedReservedInstancesOutput, error) { - req, out := c.DeleteQueuedReservedInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteRoute = "DeleteRoute" - -// DeleteRouteRequest generates a "aws/request.Request" representing the -// client's request for the DeleteRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteRoute for more information on using the DeleteRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteRouteRequest method. -// req, resp := client.DeleteRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRoute -func (c *EC2) DeleteRouteRequest(input *DeleteRouteInput) (req *request.Request, output *DeleteRouteOutput) { - op := &request.Operation{ - Name: opDeleteRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteRouteInput{} - } - - output = &DeleteRouteOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteRoute API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified route from the specified route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRoute -func (c *EC2) DeleteRoute(input *DeleteRouteInput) (*DeleteRouteOutput, error) { - req, out := c.DeleteRouteRequest(input) - return out, req.Send() -} - -// DeleteRouteWithContext is the same as DeleteRoute with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteRouteWithContext(ctx aws.Context, input *DeleteRouteInput, opts ...request.Option) (*DeleteRouteOutput, error) { - req, out := c.DeleteRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteRouteTable = "DeleteRouteTable" - -// DeleteRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the DeleteRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteRouteTable for more information on using the DeleteRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteRouteTableRequest method. -// req, resp := client.DeleteRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTable -func (c *EC2) DeleteRouteTableRequest(input *DeleteRouteTableInput) (req *request.Request, output *DeleteRouteTableOutput) { - op := &request.Operation{ - Name: opDeleteRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteRouteTableInput{} - } - - output = &DeleteRouteTableOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified route table. You must disassociate the route table -// from any subnets before you can delete it. You can't delete the main route -// table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTable -func (c *EC2) DeleteRouteTable(input *DeleteRouteTableInput) (*DeleteRouteTableOutput, error) { - req, out := c.DeleteRouteTableRequest(input) - return out, req.Send() -} - -// DeleteRouteTableWithContext is the same as DeleteRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteRouteTableWithContext(ctx aws.Context, input *DeleteRouteTableInput, opts ...request.Option) (*DeleteRouteTableOutput, error) { - req, out := c.DeleteRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteSecurityGroup = "DeleteSecurityGroup" - -// DeleteSecurityGroupRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSecurityGroup operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteSecurityGroup for more information on using the DeleteSecurityGroup -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteSecurityGroupRequest method. -// req, resp := client.DeleteSecurityGroupRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroup -func (c *EC2) DeleteSecurityGroupRequest(input *DeleteSecurityGroupInput) (req *request.Request, output *DeleteSecurityGroupOutput) { - op := &request.Operation{ - Name: opDeleteSecurityGroup, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteSecurityGroupInput{} - } - - output = &DeleteSecurityGroupOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteSecurityGroup API operation for Amazon Elastic Compute Cloud. -// -// Deletes a security group. -// -// If you attempt to delete a security group that is associated with an instance, -// or is referenced by another security group, the operation fails with InvalidGroup.InUse -// in EC2-Classic or DependencyViolation in EC2-VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSecurityGroup for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroup -func (c *EC2) DeleteSecurityGroup(input *DeleteSecurityGroupInput) (*DeleteSecurityGroupOutput, error) { - req, out := c.DeleteSecurityGroupRequest(input) - return out, req.Send() -} - -// DeleteSecurityGroupWithContext is the same as DeleteSecurityGroup with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteSecurityGroup for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteSecurityGroupWithContext(ctx aws.Context, input *DeleteSecurityGroupInput, opts ...request.Option) (*DeleteSecurityGroupOutput, error) { - req, out := c.DeleteSecurityGroupRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteSnapshot = "DeleteSnapshot" - -// DeleteSnapshotRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSnapshot operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteSnapshot for more information on using the DeleteSnapshot -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteSnapshotRequest method. -// req, resp := client.DeleteSnapshotRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshot -func (c *EC2) DeleteSnapshotRequest(input *DeleteSnapshotInput) (req *request.Request, output *DeleteSnapshotOutput) { - op := &request.Operation{ - Name: opDeleteSnapshot, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteSnapshotInput{} - } - - output = &DeleteSnapshotOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteSnapshot API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified snapshot. -// -// When you make periodic snapshots of a volume, the snapshots are incremental, -// and only the blocks on the device that have changed since your last snapshot -// are saved in the new snapshot. When you delete a snapshot, only the data -// not needed for any other snapshot is removed. So regardless of which prior -// snapshots have been deleted, all active snapshots will have access to all -// the information needed to restore the volume. -// -// You cannot delete a snapshot of the root device of an EBS volume used by -// a registered AMI. You must first de-register the AMI before you can delete -// the snapshot. -// -// For more information, see Deleting an Amazon EBS Snapshot (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSnapshot for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshot -func (c *EC2) DeleteSnapshot(input *DeleteSnapshotInput) (*DeleteSnapshotOutput, error) { - req, out := c.DeleteSnapshotRequest(input) - return out, req.Send() -} - -// DeleteSnapshotWithContext is the same as DeleteSnapshot with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteSnapshot for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteSnapshotWithContext(ctx aws.Context, input *DeleteSnapshotInput, opts ...request.Option) (*DeleteSnapshotOutput, error) { - req, out := c.DeleteSnapshotRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteSpotDatafeedSubscription = "DeleteSpotDatafeedSubscription" - -// DeleteSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSpotDatafeedSubscription operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteSpotDatafeedSubscription for more information on using the DeleteSpotDatafeedSubscription -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteSpotDatafeedSubscriptionRequest method. -// req, resp := client.DeleteSpotDatafeedSubscriptionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscription -func (c *EC2) DeleteSpotDatafeedSubscriptionRequest(input *DeleteSpotDatafeedSubscriptionInput) (req *request.Request, output *DeleteSpotDatafeedSubscriptionOutput) { - op := &request.Operation{ - Name: opDeleteSpotDatafeedSubscription, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteSpotDatafeedSubscriptionInput{} - } - - output = &DeleteSpotDatafeedSubscriptionOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. -// -// Deletes the data feed for Spot Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSpotDatafeedSubscription for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscription -func (c *EC2) DeleteSpotDatafeedSubscription(input *DeleteSpotDatafeedSubscriptionInput) (*DeleteSpotDatafeedSubscriptionOutput, error) { - req, out := c.DeleteSpotDatafeedSubscriptionRequest(input) - return out, req.Send() -} - -// DeleteSpotDatafeedSubscriptionWithContext is the same as DeleteSpotDatafeedSubscription with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteSpotDatafeedSubscription for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteSpotDatafeedSubscriptionWithContext(ctx aws.Context, input *DeleteSpotDatafeedSubscriptionInput, opts ...request.Option) (*DeleteSpotDatafeedSubscriptionOutput, error) { - req, out := c.DeleteSpotDatafeedSubscriptionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteSubnet = "DeleteSubnet" - -// DeleteSubnetRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSubnet operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteSubnet for more information on using the DeleteSubnet -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteSubnetRequest method. -// req, resp := client.DeleteSubnetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnet -func (c *EC2) DeleteSubnetRequest(input *DeleteSubnetInput) (req *request.Request, output *DeleteSubnetOutput) { - op := &request.Operation{ - Name: opDeleteSubnet, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteSubnetInput{} - } - - output = &DeleteSubnetOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteSubnet API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified subnet. You must terminate all running instances in -// the subnet before you can delete the subnet. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSubnet for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnet -func (c *EC2) DeleteSubnet(input *DeleteSubnetInput) (*DeleteSubnetOutput, error) { - req, out := c.DeleteSubnetRequest(input) - return out, req.Send() -} - -// DeleteSubnetWithContext is the same as DeleteSubnet with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteSubnet for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteSubnetWithContext(ctx aws.Context, input *DeleteSubnetInput, opts ...request.Option) (*DeleteSubnetOutput, error) { - req, out := c.DeleteSubnetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTags = "DeleteTags" - -// DeleteTagsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTags operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTags for more information on using the DeleteTags -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTagsRequest method. -// req, resp := client.DeleteTagsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTags -func (c *EC2) DeleteTagsRequest(input *DeleteTagsInput) (req *request.Request, output *DeleteTagsOutput) { - op := &request.Operation{ - Name: opDeleteTags, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTagsInput{} - } - - output = &DeleteTagsOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteTags API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified set of tags from the specified set of resources. -// -// To list the current tags, use DescribeTags. For more information about tags, -// see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTags for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTags -func (c *EC2) DeleteTags(input *DeleteTagsInput) (*DeleteTagsOutput, error) { - req, out := c.DeleteTagsRequest(input) - return out, req.Send() -} - -// DeleteTagsWithContext is the same as DeleteTags with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTags for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTagsWithContext(ctx aws.Context, input *DeleteTagsInput, opts ...request.Option) (*DeleteTagsOutput, error) { - req, out := c.DeleteTagsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTrafficMirrorFilter = "DeleteTrafficMirrorFilter" - -// DeleteTrafficMirrorFilterRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTrafficMirrorFilter operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTrafficMirrorFilter for more information on using the DeleteTrafficMirrorFilter -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTrafficMirrorFilterRequest method. -// req, resp := client.DeleteTrafficMirrorFilterRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilter -func (c *EC2) DeleteTrafficMirrorFilterRequest(input *DeleteTrafficMirrorFilterInput) (req *request.Request, output *DeleteTrafficMirrorFilterOutput) { - op := &request.Operation{ - Name: opDeleteTrafficMirrorFilter, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTrafficMirrorFilterInput{} - } - - output = &DeleteTrafficMirrorFilterOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTrafficMirrorFilter API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified Traffic Mirror filter. -// -// You cannot delete a Traffic Mirror filter that is in use by a Traffic Mirror -// session. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTrafficMirrorFilter for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilter -func (c *EC2) DeleteTrafficMirrorFilter(input *DeleteTrafficMirrorFilterInput) (*DeleteTrafficMirrorFilterOutput, error) { - req, out := c.DeleteTrafficMirrorFilterRequest(input) - return out, req.Send() -} - -// DeleteTrafficMirrorFilterWithContext is the same as DeleteTrafficMirrorFilter with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTrafficMirrorFilter for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTrafficMirrorFilterWithContext(ctx aws.Context, input *DeleteTrafficMirrorFilterInput, opts ...request.Option) (*DeleteTrafficMirrorFilterOutput, error) { - req, out := c.DeleteTrafficMirrorFilterRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTrafficMirrorFilterRule = "DeleteTrafficMirrorFilterRule" - -// DeleteTrafficMirrorFilterRuleRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTrafficMirrorFilterRule operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTrafficMirrorFilterRule for more information on using the DeleteTrafficMirrorFilterRule -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTrafficMirrorFilterRuleRequest method. -// req, resp := client.DeleteTrafficMirrorFilterRuleRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRule -func (c *EC2) DeleteTrafficMirrorFilterRuleRequest(input *DeleteTrafficMirrorFilterRuleInput) (req *request.Request, output *DeleteTrafficMirrorFilterRuleOutput) { - op := &request.Operation{ - Name: opDeleteTrafficMirrorFilterRule, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTrafficMirrorFilterRuleInput{} - } - - output = &DeleteTrafficMirrorFilterRuleOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTrafficMirrorFilterRule API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified Traffic Mirror rule. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTrafficMirrorFilterRule for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRule -func (c *EC2) DeleteTrafficMirrorFilterRule(input *DeleteTrafficMirrorFilterRuleInput) (*DeleteTrafficMirrorFilterRuleOutput, error) { - req, out := c.DeleteTrafficMirrorFilterRuleRequest(input) - return out, req.Send() -} - -// DeleteTrafficMirrorFilterRuleWithContext is the same as DeleteTrafficMirrorFilterRule with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTrafficMirrorFilterRule for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTrafficMirrorFilterRuleWithContext(ctx aws.Context, input *DeleteTrafficMirrorFilterRuleInput, opts ...request.Option) (*DeleteTrafficMirrorFilterRuleOutput, error) { - req, out := c.DeleteTrafficMirrorFilterRuleRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTrafficMirrorSession = "DeleteTrafficMirrorSession" - -// DeleteTrafficMirrorSessionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTrafficMirrorSession operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTrafficMirrorSession for more information on using the DeleteTrafficMirrorSession -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTrafficMirrorSessionRequest method. -// req, resp := client.DeleteTrafficMirrorSessionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorSession -func (c *EC2) DeleteTrafficMirrorSessionRequest(input *DeleteTrafficMirrorSessionInput) (req *request.Request, output *DeleteTrafficMirrorSessionOutput) { - op := &request.Operation{ - Name: opDeleteTrafficMirrorSession, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTrafficMirrorSessionInput{} - } - - output = &DeleteTrafficMirrorSessionOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTrafficMirrorSession API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified Traffic Mirror session. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTrafficMirrorSession for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorSession -func (c *EC2) DeleteTrafficMirrorSession(input *DeleteTrafficMirrorSessionInput) (*DeleteTrafficMirrorSessionOutput, error) { - req, out := c.DeleteTrafficMirrorSessionRequest(input) - return out, req.Send() -} - -// DeleteTrafficMirrorSessionWithContext is the same as DeleteTrafficMirrorSession with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTrafficMirrorSession for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTrafficMirrorSessionWithContext(ctx aws.Context, input *DeleteTrafficMirrorSessionInput, opts ...request.Option) (*DeleteTrafficMirrorSessionOutput, error) { - req, out := c.DeleteTrafficMirrorSessionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTrafficMirrorTarget = "DeleteTrafficMirrorTarget" - -// DeleteTrafficMirrorTargetRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTrafficMirrorTarget operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTrafficMirrorTarget for more information on using the DeleteTrafficMirrorTarget -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTrafficMirrorTargetRequest method. -// req, resp := client.DeleteTrafficMirrorTargetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorTarget -func (c *EC2) DeleteTrafficMirrorTargetRequest(input *DeleteTrafficMirrorTargetInput) (req *request.Request, output *DeleteTrafficMirrorTargetOutput) { - op := &request.Operation{ - Name: opDeleteTrafficMirrorTarget, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTrafficMirrorTargetInput{} - } - - output = &DeleteTrafficMirrorTargetOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTrafficMirrorTarget API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified Traffic Mirror target. -// -// You cannot delete a Traffic Mirror target that is in use by a Traffic Mirror -// session. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTrafficMirrorTarget for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorTarget -func (c *EC2) DeleteTrafficMirrorTarget(input *DeleteTrafficMirrorTargetInput) (*DeleteTrafficMirrorTargetOutput, error) { - req, out := c.DeleteTrafficMirrorTargetRequest(input) - return out, req.Send() -} - -// DeleteTrafficMirrorTargetWithContext is the same as DeleteTrafficMirrorTarget with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTrafficMirrorTarget for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTrafficMirrorTargetWithContext(ctx aws.Context, input *DeleteTrafficMirrorTargetInput, opts ...request.Option) (*DeleteTrafficMirrorTargetOutput, error) { - req, out := c.DeleteTrafficMirrorTargetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTransitGateway = "DeleteTransitGateway" - -// DeleteTransitGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTransitGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTransitGateway for more information on using the DeleteTransitGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTransitGatewayRequest method. -// req, resp := client.DeleteTransitGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGateway -func (c *EC2) DeleteTransitGatewayRequest(input *DeleteTransitGatewayInput) (req *request.Request, output *DeleteTransitGatewayOutput) { - op := &request.Operation{ - Name: opDeleteTransitGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTransitGatewayInput{} - } - - output = &DeleteTransitGatewayOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTransitGateway API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified transit gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTransitGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGateway -func (c *EC2) DeleteTransitGateway(input *DeleteTransitGatewayInput) (*DeleteTransitGatewayOutput, error) { - req, out := c.DeleteTransitGatewayRequest(input) - return out, req.Send() -} - -// DeleteTransitGatewayWithContext is the same as DeleteTransitGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTransitGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTransitGatewayWithContext(ctx aws.Context, input *DeleteTransitGatewayInput, opts ...request.Option) (*DeleteTransitGatewayOutput, error) { - req, out := c.DeleteTransitGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTransitGatewayRoute = "DeleteTransitGatewayRoute" - -// DeleteTransitGatewayRouteRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTransitGatewayRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTransitGatewayRoute for more information on using the DeleteTransitGatewayRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTransitGatewayRouteRequest method. -// req, resp := client.DeleteTransitGatewayRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRoute -func (c *EC2) DeleteTransitGatewayRouteRequest(input *DeleteTransitGatewayRouteInput) (req *request.Request, output *DeleteTransitGatewayRouteOutput) { - op := &request.Operation{ - Name: opDeleteTransitGatewayRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTransitGatewayRouteInput{} - } - - output = &DeleteTransitGatewayRouteOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTransitGatewayRoute API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified route from the specified transit gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTransitGatewayRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRoute -func (c *EC2) DeleteTransitGatewayRoute(input *DeleteTransitGatewayRouteInput) (*DeleteTransitGatewayRouteOutput, error) { - req, out := c.DeleteTransitGatewayRouteRequest(input) - return out, req.Send() -} - -// DeleteTransitGatewayRouteWithContext is the same as DeleteTransitGatewayRoute with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTransitGatewayRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTransitGatewayRouteWithContext(ctx aws.Context, input *DeleteTransitGatewayRouteInput, opts ...request.Option) (*DeleteTransitGatewayRouteOutput, error) { - req, out := c.DeleteTransitGatewayRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTransitGatewayRouteTable = "DeleteTransitGatewayRouteTable" - -// DeleteTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTransitGatewayRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTransitGatewayRouteTable for more information on using the DeleteTransitGatewayRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTransitGatewayRouteTableRequest method. -// req, resp := client.DeleteTransitGatewayRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTable -func (c *EC2) DeleteTransitGatewayRouteTableRequest(input *DeleteTransitGatewayRouteTableInput) (req *request.Request, output *DeleteTransitGatewayRouteTableOutput) { - op := &request.Operation{ - Name: opDeleteTransitGatewayRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTransitGatewayRouteTableInput{} - } - - output = &DeleteTransitGatewayRouteTableOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified transit gateway route table. You must disassociate -// the route table from any transit gateway route tables before you can delete -// it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTransitGatewayRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTable -func (c *EC2) DeleteTransitGatewayRouteTable(input *DeleteTransitGatewayRouteTableInput) (*DeleteTransitGatewayRouteTableOutput, error) { - req, out := c.DeleteTransitGatewayRouteTableRequest(input) - return out, req.Send() -} - -// DeleteTransitGatewayRouteTableWithContext is the same as DeleteTransitGatewayRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTransitGatewayRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTransitGatewayRouteTableWithContext(ctx aws.Context, input *DeleteTransitGatewayRouteTableInput, opts ...request.Option) (*DeleteTransitGatewayRouteTableOutput, error) { - req, out := c.DeleteTransitGatewayRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteTransitGatewayVpcAttachment = "DeleteTransitGatewayVpcAttachment" - -// DeleteTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTransitGatewayVpcAttachment operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteTransitGatewayVpcAttachment for more information on using the DeleteTransitGatewayVpcAttachment -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteTransitGatewayVpcAttachmentRequest method. -// req, resp := client.DeleteTransitGatewayVpcAttachmentRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayVpcAttachment -func (c *EC2) DeleteTransitGatewayVpcAttachmentRequest(input *DeleteTransitGatewayVpcAttachmentInput) (req *request.Request, output *DeleteTransitGatewayVpcAttachmentOutput) { - op := &request.Operation{ - Name: opDeleteTransitGatewayVpcAttachment, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteTransitGatewayVpcAttachmentInput{} - } - - output = &DeleteTransitGatewayVpcAttachmentOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified VPC attachment. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTransitGatewayVpcAttachment for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayVpcAttachment -func (c *EC2) DeleteTransitGatewayVpcAttachment(input *DeleteTransitGatewayVpcAttachmentInput) (*DeleteTransitGatewayVpcAttachmentOutput, error) { - req, out := c.DeleteTransitGatewayVpcAttachmentRequest(input) - return out, req.Send() -} - -// DeleteTransitGatewayVpcAttachmentWithContext is the same as DeleteTransitGatewayVpcAttachment with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteTransitGatewayVpcAttachment for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *DeleteTransitGatewayVpcAttachmentInput, opts ...request.Option) (*DeleteTransitGatewayVpcAttachmentOutput, error) { - req, out := c.DeleteTransitGatewayVpcAttachmentRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVolume = "DeleteVolume" - -// DeleteVolumeRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVolume operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVolume for more information on using the DeleteVolume -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVolumeRequest method. -// req, resp := client.DeleteVolumeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolume -func (c *EC2) DeleteVolumeRequest(input *DeleteVolumeInput) (req *request.Request, output *DeleteVolumeOutput) { - op := &request.Operation{ - Name: opDeleteVolume, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVolumeInput{} - } - - output = &DeleteVolumeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteVolume API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified EBS volume. The volume must be in the available state -// (not attached to an instance). -// -// The volume can remain in the deleting state for several minutes. -// -// For more information, see Deleting an Amazon EBS Volume (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVolume for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolume -func (c *EC2) DeleteVolume(input *DeleteVolumeInput) (*DeleteVolumeOutput, error) { - req, out := c.DeleteVolumeRequest(input) - return out, req.Send() -} - -// DeleteVolumeWithContext is the same as DeleteVolume with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVolume for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVolumeWithContext(ctx aws.Context, input *DeleteVolumeInput, opts ...request.Option) (*DeleteVolumeOutput, error) { - req, out := c.DeleteVolumeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpc = "DeleteVpc" - -// DeleteVpcRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpc operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpc for more information on using the DeleteVpc -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpcRequest method. -// req, resp := client.DeleteVpcRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpc -func (c *EC2) DeleteVpcRequest(input *DeleteVpcInput) (req *request.Request, output *DeleteVpcOutput) { - op := &request.Operation{ - Name: opDeleteVpc, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpcInput{} - } - - output = &DeleteVpcOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteVpc API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified VPC. You must detach or delete all gateways and resources -// that are associated with the VPC before you can delete it. For example, you -// must terminate all instances running in the VPC, delete all security groups -// associated with the VPC (except the default one), delete all route tables -// associated with the VPC (except the default one), and so on. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpc for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpc -func (c *EC2) DeleteVpc(input *DeleteVpcInput) (*DeleteVpcOutput, error) { - req, out := c.DeleteVpcRequest(input) - return out, req.Send() -} - -// DeleteVpcWithContext is the same as DeleteVpc with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpc for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpcWithContext(ctx aws.Context, input *DeleteVpcInput, opts ...request.Option) (*DeleteVpcOutput, error) { - req, out := c.DeleteVpcRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpcEndpointConnectionNotifications = "DeleteVpcEndpointConnectionNotifications" - -// DeleteVpcEndpointConnectionNotificationsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpcEndpointConnectionNotifications operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpcEndpointConnectionNotifications for more information on using the DeleteVpcEndpointConnectionNotifications -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpcEndpointConnectionNotificationsRequest method. -// req, resp := client.DeleteVpcEndpointConnectionNotificationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointConnectionNotifications -func (c *EC2) DeleteVpcEndpointConnectionNotificationsRequest(input *DeleteVpcEndpointConnectionNotificationsInput) (req *request.Request, output *DeleteVpcEndpointConnectionNotificationsOutput) { - op := &request.Operation{ - Name: opDeleteVpcEndpointConnectionNotifications, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpcEndpointConnectionNotificationsInput{} - } - - output = &DeleteVpcEndpointConnectionNotificationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteVpcEndpointConnectionNotifications API operation for Amazon Elastic Compute Cloud. -// -// Deletes one or more VPC endpoint connection notifications. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpcEndpointConnectionNotifications for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointConnectionNotifications -func (c *EC2) DeleteVpcEndpointConnectionNotifications(input *DeleteVpcEndpointConnectionNotificationsInput) (*DeleteVpcEndpointConnectionNotificationsOutput, error) { - req, out := c.DeleteVpcEndpointConnectionNotificationsRequest(input) - return out, req.Send() -} - -// DeleteVpcEndpointConnectionNotificationsWithContext is the same as DeleteVpcEndpointConnectionNotifications with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpcEndpointConnectionNotifications for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpcEndpointConnectionNotificationsWithContext(ctx aws.Context, input *DeleteVpcEndpointConnectionNotificationsInput, opts ...request.Option) (*DeleteVpcEndpointConnectionNotificationsOutput, error) { - req, out := c.DeleteVpcEndpointConnectionNotificationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpcEndpointServiceConfigurations = "DeleteVpcEndpointServiceConfigurations" - -// DeleteVpcEndpointServiceConfigurationsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpcEndpointServiceConfigurations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpcEndpointServiceConfigurations for more information on using the DeleteVpcEndpointServiceConfigurations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpcEndpointServiceConfigurationsRequest method. -// req, resp := client.DeleteVpcEndpointServiceConfigurationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointServiceConfigurations -func (c *EC2) DeleteVpcEndpointServiceConfigurationsRequest(input *DeleteVpcEndpointServiceConfigurationsInput) (req *request.Request, output *DeleteVpcEndpointServiceConfigurationsOutput) { - op := &request.Operation{ - Name: opDeleteVpcEndpointServiceConfigurations, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpcEndpointServiceConfigurationsInput{} - } - - output = &DeleteVpcEndpointServiceConfigurationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteVpcEndpointServiceConfigurations API operation for Amazon Elastic Compute Cloud. -// -// Deletes one or more VPC endpoint service configurations in your account. -// Before you delete the endpoint service configuration, you must reject any -// Available or PendingAcceptance interface endpoint connections that are attached -// to the service. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpcEndpointServiceConfigurations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointServiceConfigurations -func (c *EC2) DeleteVpcEndpointServiceConfigurations(input *DeleteVpcEndpointServiceConfigurationsInput) (*DeleteVpcEndpointServiceConfigurationsOutput, error) { - req, out := c.DeleteVpcEndpointServiceConfigurationsRequest(input) - return out, req.Send() -} - -// DeleteVpcEndpointServiceConfigurationsWithContext is the same as DeleteVpcEndpointServiceConfigurations with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpcEndpointServiceConfigurations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpcEndpointServiceConfigurationsWithContext(ctx aws.Context, input *DeleteVpcEndpointServiceConfigurationsInput, opts ...request.Option) (*DeleteVpcEndpointServiceConfigurationsOutput, error) { - req, out := c.DeleteVpcEndpointServiceConfigurationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpcEndpoints = "DeleteVpcEndpoints" - -// DeleteVpcEndpointsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpcEndpoints operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpcEndpoints for more information on using the DeleteVpcEndpoints -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpcEndpointsRequest method. -// req, resp := client.DeleteVpcEndpointsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpoints -func (c *EC2) DeleteVpcEndpointsRequest(input *DeleteVpcEndpointsInput) (req *request.Request, output *DeleteVpcEndpointsOutput) { - op := &request.Operation{ - Name: opDeleteVpcEndpoints, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpcEndpointsInput{} - } - - output = &DeleteVpcEndpointsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteVpcEndpoints API operation for Amazon Elastic Compute Cloud. -// -// Deletes one or more specified VPC endpoints. Deleting a gateway endpoint -// also deletes the endpoint routes in the route tables that were associated -// with the endpoint. Deleting an interface endpoint deletes the endpoint network -// interfaces. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpcEndpoints for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpoints -func (c *EC2) DeleteVpcEndpoints(input *DeleteVpcEndpointsInput) (*DeleteVpcEndpointsOutput, error) { - req, out := c.DeleteVpcEndpointsRequest(input) - return out, req.Send() -} - -// DeleteVpcEndpointsWithContext is the same as DeleteVpcEndpoints with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpcEndpoints for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpcEndpointsWithContext(ctx aws.Context, input *DeleteVpcEndpointsInput, opts ...request.Option) (*DeleteVpcEndpointsOutput, error) { - req, out := c.DeleteVpcEndpointsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpcPeeringConnection = "DeleteVpcPeeringConnection" - -// DeleteVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpcPeeringConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpcPeeringConnection for more information on using the DeleteVpcPeeringConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpcPeeringConnectionRequest method. -// req, resp := client.DeleteVpcPeeringConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnection -func (c *EC2) DeleteVpcPeeringConnectionRequest(input *DeleteVpcPeeringConnectionInput) (req *request.Request, output *DeleteVpcPeeringConnectionOutput) { - op := &request.Operation{ - Name: opDeleteVpcPeeringConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpcPeeringConnectionInput{} - } - - output = &DeleteVpcPeeringConnectionOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeleteVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. -// -// Deletes a VPC peering connection. Either the owner of the requester VPC or -// the owner of the accepter VPC can delete the VPC peering connection if it's -// in the active state. The owner of the requester VPC can delete a VPC peering -// connection in the pending-acceptance state. You cannot delete a VPC peering -// connection that's in the failed state. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpcPeeringConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnection -func (c *EC2) DeleteVpcPeeringConnection(input *DeleteVpcPeeringConnectionInput) (*DeleteVpcPeeringConnectionOutput, error) { - req, out := c.DeleteVpcPeeringConnectionRequest(input) - return out, req.Send() -} - -// DeleteVpcPeeringConnectionWithContext is the same as DeleteVpcPeeringConnection with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpcPeeringConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpcPeeringConnectionWithContext(ctx aws.Context, input *DeleteVpcPeeringConnectionInput, opts ...request.Option) (*DeleteVpcPeeringConnectionOutput, error) { - req, out := c.DeleteVpcPeeringConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpnConnection = "DeleteVpnConnection" - -// DeleteVpnConnectionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpnConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpnConnection for more information on using the DeleteVpnConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpnConnectionRequest method. -// req, resp := client.DeleteVpnConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnection -func (c *EC2) DeleteVpnConnectionRequest(input *DeleteVpnConnectionInput) (req *request.Request, output *DeleteVpnConnectionOutput) { - op := &request.Operation{ - Name: opDeleteVpnConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpnConnectionInput{} - } - - output = &DeleteVpnConnectionOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteVpnConnection API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified VPN connection. -// -// If you're deleting the VPC and its associated components, we recommend that -// you detach the virtual private gateway from the VPC and delete the VPC before -// deleting the VPN connection. If you believe that the tunnel credentials for -// your VPN connection have been compromised, you can delete the VPN connection -// and create a new one that has new keys, without needing to delete the VPC -// or virtual private gateway. If you create a new VPN connection, you must -// reconfigure the customer gateway using the new configuration information -// returned with the new VPN connection ID. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpnConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnection -func (c *EC2) DeleteVpnConnection(input *DeleteVpnConnectionInput) (*DeleteVpnConnectionOutput, error) { - req, out := c.DeleteVpnConnectionRequest(input) - return out, req.Send() -} - -// DeleteVpnConnectionWithContext is the same as DeleteVpnConnection with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpnConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpnConnectionWithContext(ctx aws.Context, input *DeleteVpnConnectionInput, opts ...request.Option) (*DeleteVpnConnectionOutput, error) { - req, out := c.DeleteVpnConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpnConnectionRoute = "DeleteVpnConnectionRoute" - -// DeleteVpnConnectionRouteRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpnConnectionRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpnConnectionRoute for more information on using the DeleteVpnConnectionRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpnConnectionRouteRequest method. -// req, resp := client.DeleteVpnConnectionRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRoute -func (c *EC2) DeleteVpnConnectionRouteRequest(input *DeleteVpnConnectionRouteInput) (req *request.Request, output *DeleteVpnConnectionRouteOutput) { - op := &request.Operation{ - Name: opDeleteVpnConnectionRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpnConnectionRouteInput{} - } - - output = &DeleteVpnConnectionRouteOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteVpnConnectionRoute API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified static route associated with a VPN connection between -// an existing virtual private gateway and a VPN customer gateway. The static -// route allows traffic to be routed from the virtual private gateway to the -// VPN customer gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpnConnectionRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRoute -func (c *EC2) DeleteVpnConnectionRoute(input *DeleteVpnConnectionRouteInput) (*DeleteVpnConnectionRouteOutput, error) { - req, out := c.DeleteVpnConnectionRouteRequest(input) - return out, req.Send() -} - -// DeleteVpnConnectionRouteWithContext is the same as DeleteVpnConnectionRoute with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpnConnectionRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpnConnectionRouteWithContext(ctx aws.Context, input *DeleteVpnConnectionRouteInput, opts ...request.Option) (*DeleteVpnConnectionRouteOutput, error) { - req, out := c.DeleteVpnConnectionRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeleteVpnGateway = "DeleteVpnGateway" - -// DeleteVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpnGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeleteVpnGateway for more information on using the DeleteVpnGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeleteVpnGatewayRequest method. -// req, resp := client.DeleteVpnGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGateway -func (c *EC2) DeleteVpnGatewayRequest(input *DeleteVpnGatewayInput) (req *request.Request, output *DeleteVpnGatewayOutput) { - op := &request.Operation{ - Name: opDeleteVpnGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeleteVpnGatewayInput{} - } - - output = &DeleteVpnGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeleteVpnGateway API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified virtual private gateway. We recommend that before you -// delete a virtual private gateway, you detach it from the VPC and delete the -// VPN connection. Note that you don't need to delete the virtual private gateway -// if you plan to delete and recreate the VPN connection between your VPC and -// your network. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpnGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGateway -func (c *EC2) DeleteVpnGateway(input *DeleteVpnGatewayInput) (*DeleteVpnGatewayOutput, error) { - req, out := c.DeleteVpnGatewayRequest(input) - return out, req.Send() -} - -// DeleteVpnGatewayWithContext is the same as DeleteVpnGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DeleteVpnGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeleteVpnGatewayWithContext(ctx aws.Context, input *DeleteVpnGatewayInput, opts ...request.Option) (*DeleteVpnGatewayOutput, error) { - req, out := c.DeleteVpnGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeprovisionByoipCidr = "DeprovisionByoipCidr" - -// DeprovisionByoipCidrRequest generates a "aws/request.Request" representing the -// client's request for the DeprovisionByoipCidr operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeprovisionByoipCidr for more information on using the DeprovisionByoipCidr -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeprovisionByoipCidrRequest method. -// req, resp := client.DeprovisionByoipCidrRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionByoipCidr -func (c *EC2) DeprovisionByoipCidrRequest(input *DeprovisionByoipCidrInput) (req *request.Request, output *DeprovisionByoipCidrOutput) { - op := &request.Operation{ - Name: opDeprovisionByoipCidr, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeprovisionByoipCidrInput{} - } - - output = &DeprovisionByoipCidrOutput{} - req = c.newRequest(op, input, output) - return -} - -// DeprovisionByoipCidr API operation for Amazon Elastic Compute Cloud. -// -// Releases the specified address range that you provisioned for use with your -// AWS resources through bring your own IP addresses (BYOIP) and deletes the -// corresponding address pool. -// -// Before you can release an address range, you must stop advertising it using -// WithdrawByoipCidr and you must not have any IP addresses allocated from its -// address range. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeprovisionByoipCidr for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionByoipCidr -func (c *EC2) DeprovisionByoipCidr(input *DeprovisionByoipCidrInput) (*DeprovisionByoipCidrOutput, error) { - req, out := c.DeprovisionByoipCidrRequest(input) - return out, req.Send() -} - -// DeprovisionByoipCidrWithContext is the same as DeprovisionByoipCidr with the addition of -// the ability to pass a context and additional request options. -// -// See DeprovisionByoipCidr for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeprovisionByoipCidrWithContext(ctx aws.Context, input *DeprovisionByoipCidrInput, opts ...request.Option) (*DeprovisionByoipCidrOutput, error) { - req, out := c.DeprovisionByoipCidrRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDeregisterImage = "DeregisterImage" - -// DeregisterImageRequest generates a "aws/request.Request" representing the -// client's request for the DeregisterImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DeregisterImage for more information on using the DeregisterImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DeregisterImageRequest method. -// req, resp := client.DeregisterImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImage -func (c *EC2) DeregisterImageRequest(input *DeregisterImageInput) (req *request.Request, output *DeregisterImageOutput) { - op := &request.Operation{ - Name: opDeregisterImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DeregisterImageInput{} - } - - output = &DeregisterImageOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DeregisterImage API operation for Amazon Elastic Compute Cloud. -// -// Deregisters the specified AMI. After you deregister an AMI, it can't be used -// to launch new instances; however, it doesn't affect any instances that you've -// already launched from the AMI. You'll continue to incur usage costs for those -// instances until you terminate them. -// -// When you deregister an Amazon EBS-backed AMI, it doesn't affect the snapshot -// that was created for the root volume of the instance during the AMI creation -// process. When you deregister an instance store-backed AMI, it doesn't affect -// the files that you uploaded to Amazon S3 when you created the AMI. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeregisterImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImage -func (c *EC2) DeregisterImage(input *DeregisterImageInput) (*DeregisterImageOutput, error) { - req, out := c.DeregisterImageRequest(input) - return out, req.Send() -} - -// DeregisterImageWithContext is the same as DeregisterImage with the addition of -// the ability to pass a context and additional request options. -// -// See DeregisterImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DeregisterImageWithContext(ctx aws.Context, input *DeregisterImageInput, opts ...request.Option) (*DeregisterImageOutput, error) { - req, out := c.DeregisterImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeAccountAttributes = "DescribeAccountAttributes" - -// DescribeAccountAttributesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAccountAttributes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeAccountAttributes for more information on using the DescribeAccountAttributes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeAccountAttributesRequest method. -// req, resp := client.DescribeAccountAttributesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributes -func (c *EC2) DescribeAccountAttributesRequest(input *DescribeAccountAttributesInput) (req *request.Request, output *DescribeAccountAttributesOutput) { - op := &request.Operation{ - Name: opDescribeAccountAttributes, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeAccountAttributesInput{} - } - - output = &DescribeAccountAttributesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeAccountAttributes API operation for Amazon Elastic Compute Cloud. -// -// Describes attributes of your AWS account. The following are the supported -// account attributes: -// -// * supported-platforms: Indicates whether your account can launch instances -// into EC2-Classic and EC2-VPC, or only into EC2-VPC. -// -// * default-vpc: The ID of the default VPC for your account, or none. -// -// * max-instances: The maximum number of On-Demand Instances that you can -// run. -// -// * vpc-max-security-groups-per-interface: The maximum number of security -// groups that you can assign to a network interface. -// -// * max-elastic-ips: The maximum number of Elastic IP addresses that you -// can allocate for use with EC2-Classic. -// -// * vpc-max-elastic-ips: The maximum number of Elastic IP addresses that -// you can allocate for use with EC2-VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAccountAttributes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributes -func (c *EC2) DescribeAccountAttributes(input *DescribeAccountAttributesInput) (*DescribeAccountAttributesOutput, error) { - req, out := c.DescribeAccountAttributesRequest(input) - return out, req.Send() -} - -// DescribeAccountAttributesWithContext is the same as DescribeAccountAttributes with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeAccountAttributes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeAccountAttributesWithContext(ctx aws.Context, input *DescribeAccountAttributesInput, opts ...request.Option) (*DescribeAccountAttributesOutput, error) { - req, out := c.DescribeAccountAttributesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeAddresses = "DescribeAddresses" - -// DescribeAddressesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAddresses operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeAddresses for more information on using the DescribeAddresses -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeAddressesRequest method. -// req, resp := client.DescribeAddressesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddresses -func (c *EC2) DescribeAddressesRequest(input *DescribeAddressesInput) (req *request.Request, output *DescribeAddressesOutput) { - op := &request.Operation{ - Name: opDescribeAddresses, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeAddressesInput{} - } - - output = &DescribeAddressesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeAddresses API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified Elastic IP addresses or all of your Elastic IP addresses. -// -// An Elastic IP address is for use in either the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAddresses for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddresses -func (c *EC2) DescribeAddresses(input *DescribeAddressesInput) (*DescribeAddressesOutput, error) { - req, out := c.DescribeAddressesRequest(input) - return out, req.Send() -} - -// DescribeAddressesWithContext is the same as DescribeAddresses with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeAddresses for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeAddressesWithContext(ctx aws.Context, input *DescribeAddressesInput, opts ...request.Option) (*DescribeAddressesOutput, error) { - req, out := c.DescribeAddressesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeAggregateIdFormat = "DescribeAggregateIdFormat" - -// DescribeAggregateIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAggregateIdFormat operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeAggregateIdFormat for more information on using the DescribeAggregateIdFormat -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeAggregateIdFormatRequest method. -// req, resp := client.DescribeAggregateIdFormatRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAggregateIdFormat -func (c *EC2) DescribeAggregateIdFormatRequest(input *DescribeAggregateIdFormatInput) (req *request.Request, output *DescribeAggregateIdFormatOutput) { - op := &request.Operation{ - Name: opDescribeAggregateIdFormat, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeAggregateIdFormatInput{} - } - - output = &DescribeAggregateIdFormatOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeAggregateIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Describes the longer ID format settings for all resource types in a specific -// Region. This request is useful for performing a quick audit to determine -// whether a specific Region is fully opted in for longer IDs (17-character -// IDs). -// -// This request only returns information about resource types that support longer -// IDs. -// -// The following resource types support longer IDs: bundle | conversion-task -// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association -// | export-task | flow-log | image | import-task | instance | internet-gateway -// | network-acl | network-acl-association | network-interface | network-interface-attachment -// | prefix-list | reservation | route-table | route-table-association | security-group -// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association -// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAggregateIdFormat for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAggregateIdFormat -func (c *EC2) DescribeAggregateIdFormat(input *DescribeAggregateIdFormatInput) (*DescribeAggregateIdFormatOutput, error) { - req, out := c.DescribeAggregateIdFormatRequest(input) - return out, req.Send() -} - -// DescribeAggregateIdFormatWithContext is the same as DescribeAggregateIdFormat with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeAggregateIdFormat for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeAggregateIdFormatWithContext(ctx aws.Context, input *DescribeAggregateIdFormatInput, opts ...request.Option) (*DescribeAggregateIdFormatOutput, error) { - req, out := c.DescribeAggregateIdFormatRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeAvailabilityZones = "DescribeAvailabilityZones" - -// DescribeAvailabilityZonesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAvailabilityZones operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeAvailabilityZones for more information on using the DescribeAvailabilityZones -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeAvailabilityZonesRequest method. -// req, resp := client.DescribeAvailabilityZonesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZones -func (c *EC2) DescribeAvailabilityZonesRequest(input *DescribeAvailabilityZonesInput) (req *request.Request, output *DescribeAvailabilityZonesOutput) { - op := &request.Operation{ - Name: opDescribeAvailabilityZones, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeAvailabilityZonesInput{} - } - - output = &DescribeAvailabilityZonesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeAvailabilityZones API operation for Amazon Elastic Compute Cloud. -// -// Describes the Availability Zones that are available to you. The results include -// zones only for the Region you're currently using. If there is an event impacting -// an Availability Zone, you can use this request to view the state and any -// provided message for that Availability Zone. -// -// For more information, see Regions and Availability Zones (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAvailabilityZones for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZones -func (c *EC2) DescribeAvailabilityZones(input *DescribeAvailabilityZonesInput) (*DescribeAvailabilityZonesOutput, error) { - req, out := c.DescribeAvailabilityZonesRequest(input) - return out, req.Send() -} - -// DescribeAvailabilityZonesWithContext is the same as DescribeAvailabilityZones with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeAvailabilityZones for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeAvailabilityZonesWithContext(ctx aws.Context, input *DescribeAvailabilityZonesInput, opts ...request.Option) (*DescribeAvailabilityZonesOutput, error) { - req, out := c.DescribeAvailabilityZonesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeBundleTasks = "DescribeBundleTasks" - -// DescribeBundleTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeBundleTasks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeBundleTasks for more information on using the DescribeBundleTasks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeBundleTasksRequest method. -// req, resp := client.DescribeBundleTasksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasks -func (c *EC2) DescribeBundleTasksRequest(input *DescribeBundleTasksInput) (req *request.Request, output *DescribeBundleTasksOutput) { - op := &request.Operation{ - Name: opDescribeBundleTasks, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeBundleTasksInput{} - } - - output = &DescribeBundleTasksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeBundleTasks API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified bundle tasks or all of your bundle tasks. -// -// Completed bundle tasks are listed for only a limited time. If your bundle -// task is no longer in the list, you can still register an AMI from it. Just -// use RegisterImage with the Amazon S3 bucket name and image manifest name -// you provided to the bundle task. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeBundleTasks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasks -func (c *EC2) DescribeBundleTasks(input *DescribeBundleTasksInput) (*DescribeBundleTasksOutput, error) { - req, out := c.DescribeBundleTasksRequest(input) - return out, req.Send() -} - -// DescribeBundleTasksWithContext is the same as DescribeBundleTasks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeBundleTasks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeBundleTasksWithContext(ctx aws.Context, input *DescribeBundleTasksInput, opts ...request.Option) (*DescribeBundleTasksOutput, error) { - req, out := c.DescribeBundleTasksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeByoipCidrs = "DescribeByoipCidrs" - -// DescribeByoipCidrsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeByoipCidrs operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeByoipCidrs for more information on using the DescribeByoipCidrs -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeByoipCidrsRequest method. -// req, resp := client.DescribeByoipCidrsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeByoipCidrs -func (c *EC2) DescribeByoipCidrsRequest(input *DescribeByoipCidrsInput) (req *request.Request, output *DescribeByoipCidrsOutput) { - op := &request.Operation{ - Name: opDescribeByoipCidrs, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeByoipCidrsInput{} - } - - output = &DescribeByoipCidrsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeByoipCidrs API operation for Amazon Elastic Compute Cloud. -// -// Describes the IP address ranges that were specified in calls to ProvisionByoipCidr. -// -// To describe the address pools that were created when you provisioned the -// address ranges, use DescribePublicIpv4Pools. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeByoipCidrs for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeByoipCidrs -func (c *EC2) DescribeByoipCidrs(input *DescribeByoipCidrsInput) (*DescribeByoipCidrsOutput, error) { - req, out := c.DescribeByoipCidrsRequest(input) - return out, req.Send() -} - -// DescribeByoipCidrsWithContext is the same as DescribeByoipCidrs with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeByoipCidrs for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeByoipCidrsWithContext(ctx aws.Context, input *DescribeByoipCidrsInput, opts ...request.Option) (*DescribeByoipCidrsOutput, error) { - req, out := c.DescribeByoipCidrsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeByoipCidrsPages iterates over the pages of a DescribeByoipCidrs operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeByoipCidrs method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeByoipCidrs operation. -// pageNum := 0 -// err := client.DescribeByoipCidrsPages(params, -// func(page *ec2.DescribeByoipCidrsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeByoipCidrsPages(input *DescribeByoipCidrsInput, fn func(*DescribeByoipCidrsOutput, bool) bool) error { - return c.DescribeByoipCidrsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeByoipCidrsPagesWithContext same as DescribeByoipCidrsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeByoipCidrsPagesWithContext(ctx aws.Context, input *DescribeByoipCidrsInput, fn func(*DescribeByoipCidrsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeByoipCidrsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeByoipCidrsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeByoipCidrsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeCapacityReservations = "DescribeCapacityReservations" - -// DescribeCapacityReservationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeCapacityReservations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeCapacityReservations for more information on using the DescribeCapacityReservations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeCapacityReservationsRequest method. -// req, resp := client.DescribeCapacityReservationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservations -func (c *EC2) DescribeCapacityReservationsRequest(input *DescribeCapacityReservationsInput) (req *request.Request, output *DescribeCapacityReservationsOutput) { - op := &request.Operation{ - Name: opDescribeCapacityReservations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeCapacityReservationsInput{} - } - - output = &DescribeCapacityReservationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeCapacityReservations API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your Capacity Reservations. The results describe -// only the Capacity Reservations in the AWS Region that you're currently using. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeCapacityReservations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservations -func (c *EC2) DescribeCapacityReservations(input *DescribeCapacityReservationsInput) (*DescribeCapacityReservationsOutput, error) { - req, out := c.DescribeCapacityReservationsRequest(input) - return out, req.Send() -} - -// DescribeCapacityReservationsWithContext is the same as DescribeCapacityReservations with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeCapacityReservations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeCapacityReservationsWithContext(ctx aws.Context, input *DescribeCapacityReservationsInput, opts ...request.Option) (*DescribeCapacityReservationsOutput, error) { - req, out := c.DescribeCapacityReservationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeCapacityReservationsPages iterates over the pages of a DescribeCapacityReservations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeCapacityReservations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeCapacityReservations operation. -// pageNum := 0 -// err := client.DescribeCapacityReservationsPages(params, -// func(page *ec2.DescribeCapacityReservationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeCapacityReservationsPages(input *DescribeCapacityReservationsInput, fn func(*DescribeCapacityReservationsOutput, bool) bool) error { - return c.DescribeCapacityReservationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeCapacityReservationsPagesWithContext same as DescribeCapacityReservationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeCapacityReservationsPagesWithContext(ctx aws.Context, input *DescribeCapacityReservationsInput, fn func(*DescribeCapacityReservationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeCapacityReservationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeCapacityReservationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeCapacityReservationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeClassicLinkInstances = "DescribeClassicLinkInstances" - -// DescribeClassicLinkInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClassicLinkInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeClassicLinkInstances for more information on using the DescribeClassicLinkInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeClassicLinkInstancesRequest method. -// req, resp := client.DescribeClassicLinkInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstances -func (c *EC2) DescribeClassicLinkInstancesRequest(input *DescribeClassicLinkInstancesInput) (req *request.Request, output *DescribeClassicLinkInstancesOutput) { - op := &request.Operation{ - Name: opDescribeClassicLinkInstances, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeClassicLinkInstancesInput{} - } - - output = &DescribeClassicLinkInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeClassicLinkInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your linked EC2-Classic instances. This request -// only returns information about EC2-Classic instances linked to a VPC through -// ClassicLink. You cannot use this request to return information about other -// instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClassicLinkInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstances -func (c *EC2) DescribeClassicLinkInstances(input *DescribeClassicLinkInstancesInput) (*DescribeClassicLinkInstancesOutput, error) { - req, out := c.DescribeClassicLinkInstancesRequest(input) - return out, req.Send() -} - -// DescribeClassicLinkInstancesWithContext is the same as DescribeClassicLinkInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeClassicLinkInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClassicLinkInstancesWithContext(ctx aws.Context, input *DescribeClassicLinkInstancesInput, opts ...request.Option) (*DescribeClassicLinkInstancesOutput, error) { - req, out := c.DescribeClassicLinkInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeClassicLinkInstancesPages iterates over the pages of a DescribeClassicLinkInstances operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeClassicLinkInstances method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeClassicLinkInstances operation. -// pageNum := 0 -// err := client.DescribeClassicLinkInstancesPages(params, -// func(page *ec2.DescribeClassicLinkInstancesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeClassicLinkInstancesPages(input *DescribeClassicLinkInstancesInput, fn func(*DescribeClassicLinkInstancesOutput, bool) bool) error { - return c.DescribeClassicLinkInstancesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeClassicLinkInstancesPagesWithContext same as DescribeClassicLinkInstancesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClassicLinkInstancesPagesWithContext(ctx aws.Context, input *DescribeClassicLinkInstancesInput, fn func(*DescribeClassicLinkInstancesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeClassicLinkInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeClassicLinkInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeClassicLinkInstancesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeClientVpnAuthorizationRules = "DescribeClientVpnAuthorizationRules" - -// DescribeClientVpnAuthorizationRulesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClientVpnAuthorizationRules operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeClientVpnAuthorizationRules for more information on using the DescribeClientVpnAuthorizationRules -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeClientVpnAuthorizationRulesRequest method. -// req, resp := client.DescribeClientVpnAuthorizationRulesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnAuthorizationRules -func (c *EC2) DescribeClientVpnAuthorizationRulesRequest(input *DescribeClientVpnAuthorizationRulesInput) (req *request.Request, output *DescribeClientVpnAuthorizationRulesOutput) { - op := &request.Operation{ - Name: opDescribeClientVpnAuthorizationRules, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeClientVpnAuthorizationRulesInput{} - } - - output = &DescribeClientVpnAuthorizationRulesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeClientVpnAuthorizationRules API operation for Amazon Elastic Compute Cloud. -// -// Describes the authorization rules for a specified Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClientVpnAuthorizationRules for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnAuthorizationRules -func (c *EC2) DescribeClientVpnAuthorizationRules(input *DescribeClientVpnAuthorizationRulesInput) (*DescribeClientVpnAuthorizationRulesOutput, error) { - req, out := c.DescribeClientVpnAuthorizationRulesRequest(input) - return out, req.Send() -} - -// DescribeClientVpnAuthorizationRulesWithContext is the same as DescribeClientVpnAuthorizationRules with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeClientVpnAuthorizationRules for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnAuthorizationRulesWithContext(ctx aws.Context, input *DescribeClientVpnAuthorizationRulesInput, opts ...request.Option) (*DescribeClientVpnAuthorizationRulesOutput, error) { - req, out := c.DescribeClientVpnAuthorizationRulesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeClientVpnAuthorizationRulesPages iterates over the pages of a DescribeClientVpnAuthorizationRules operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeClientVpnAuthorizationRules method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeClientVpnAuthorizationRules operation. -// pageNum := 0 -// err := client.DescribeClientVpnAuthorizationRulesPages(params, -// func(page *ec2.DescribeClientVpnAuthorizationRulesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeClientVpnAuthorizationRulesPages(input *DescribeClientVpnAuthorizationRulesInput, fn func(*DescribeClientVpnAuthorizationRulesOutput, bool) bool) error { - return c.DescribeClientVpnAuthorizationRulesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeClientVpnAuthorizationRulesPagesWithContext same as DescribeClientVpnAuthorizationRulesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnAuthorizationRulesPagesWithContext(ctx aws.Context, input *DescribeClientVpnAuthorizationRulesInput, fn func(*DescribeClientVpnAuthorizationRulesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeClientVpnAuthorizationRulesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeClientVpnAuthorizationRulesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeClientVpnAuthorizationRulesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeClientVpnConnections = "DescribeClientVpnConnections" - -// DescribeClientVpnConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClientVpnConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeClientVpnConnections for more information on using the DescribeClientVpnConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeClientVpnConnectionsRequest method. -// req, resp := client.DescribeClientVpnConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnConnections -func (c *EC2) DescribeClientVpnConnectionsRequest(input *DescribeClientVpnConnectionsInput) (req *request.Request, output *DescribeClientVpnConnectionsOutput) { - op := &request.Operation{ - Name: opDescribeClientVpnConnections, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeClientVpnConnectionsInput{} - } - - output = &DescribeClientVpnConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeClientVpnConnections API operation for Amazon Elastic Compute Cloud. -// -// Describes active client connections and connections that have been terminated -// within the last 60 minutes for the specified Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClientVpnConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnConnections -func (c *EC2) DescribeClientVpnConnections(input *DescribeClientVpnConnectionsInput) (*DescribeClientVpnConnectionsOutput, error) { - req, out := c.DescribeClientVpnConnectionsRequest(input) - return out, req.Send() -} - -// DescribeClientVpnConnectionsWithContext is the same as DescribeClientVpnConnections with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeClientVpnConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnConnectionsWithContext(ctx aws.Context, input *DescribeClientVpnConnectionsInput, opts ...request.Option) (*DescribeClientVpnConnectionsOutput, error) { - req, out := c.DescribeClientVpnConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeClientVpnConnectionsPages iterates over the pages of a DescribeClientVpnConnections operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeClientVpnConnections method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeClientVpnConnections operation. -// pageNum := 0 -// err := client.DescribeClientVpnConnectionsPages(params, -// func(page *ec2.DescribeClientVpnConnectionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeClientVpnConnectionsPages(input *DescribeClientVpnConnectionsInput, fn func(*DescribeClientVpnConnectionsOutput, bool) bool) error { - return c.DescribeClientVpnConnectionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeClientVpnConnectionsPagesWithContext same as DescribeClientVpnConnectionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnConnectionsPagesWithContext(ctx aws.Context, input *DescribeClientVpnConnectionsInput, fn func(*DescribeClientVpnConnectionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeClientVpnConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeClientVpnConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeClientVpnConnectionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeClientVpnEndpoints = "DescribeClientVpnEndpoints" - -// DescribeClientVpnEndpointsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClientVpnEndpoints operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeClientVpnEndpoints for more information on using the DescribeClientVpnEndpoints -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeClientVpnEndpointsRequest method. -// req, resp := client.DescribeClientVpnEndpointsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnEndpoints -func (c *EC2) DescribeClientVpnEndpointsRequest(input *DescribeClientVpnEndpointsInput) (req *request.Request, output *DescribeClientVpnEndpointsOutput) { - op := &request.Operation{ - Name: opDescribeClientVpnEndpoints, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeClientVpnEndpointsInput{} - } - - output = &DescribeClientVpnEndpointsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeClientVpnEndpoints API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more Client VPN endpoints in the account. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClientVpnEndpoints for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnEndpoints -func (c *EC2) DescribeClientVpnEndpoints(input *DescribeClientVpnEndpointsInput) (*DescribeClientVpnEndpointsOutput, error) { - req, out := c.DescribeClientVpnEndpointsRequest(input) - return out, req.Send() -} - -// DescribeClientVpnEndpointsWithContext is the same as DescribeClientVpnEndpoints with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeClientVpnEndpoints for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnEndpointsWithContext(ctx aws.Context, input *DescribeClientVpnEndpointsInput, opts ...request.Option) (*DescribeClientVpnEndpointsOutput, error) { - req, out := c.DescribeClientVpnEndpointsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeClientVpnEndpointsPages iterates over the pages of a DescribeClientVpnEndpoints operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeClientVpnEndpoints method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeClientVpnEndpoints operation. -// pageNum := 0 -// err := client.DescribeClientVpnEndpointsPages(params, -// func(page *ec2.DescribeClientVpnEndpointsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeClientVpnEndpointsPages(input *DescribeClientVpnEndpointsInput, fn func(*DescribeClientVpnEndpointsOutput, bool) bool) error { - return c.DescribeClientVpnEndpointsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeClientVpnEndpointsPagesWithContext same as DescribeClientVpnEndpointsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnEndpointsPagesWithContext(ctx aws.Context, input *DescribeClientVpnEndpointsInput, fn func(*DescribeClientVpnEndpointsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeClientVpnEndpointsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeClientVpnEndpointsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeClientVpnEndpointsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeClientVpnRoutes = "DescribeClientVpnRoutes" - -// DescribeClientVpnRoutesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClientVpnRoutes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeClientVpnRoutes for more information on using the DescribeClientVpnRoutes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeClientVpnRoutesRequest method. -// req, resp := client.DescribeClientVpnRoutesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnRoutes -func (c *EC2) DescribeClientVpnRoutesRequest(input *DescribeClientVpnRoutesInput) (req *request.Request, output *DescribeClientVpnRoutesOutput) { - op := &request.Operation{ - Name: opDescribeClientVpnRoutes, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeClientVpnRoutesInput{} - } - - output = &DescribeClientVpnRoutesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeClientVpnRoutes API operation for Amazon Elastic Compute Cloud. -// -// Describes the routes for the specified Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClientVpnRoutes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnRoutes -func (c *EC2) DescribeClientVpnRoutes(input *DescribeClientVpnRoutesInput) (*DescribeClientVpnRoutesOutput, error) { - req, out := c.DescribeClientVpnRoutesRequest(input) - return out, req.Send() -} - -// DescribeClientVpnRoutesWithContext is the same as DescribeClientVpnRoutes with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeClientVpnRoutes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnRoutesWithContext(ctx aws.Context, input *DescribeClientVpnRoutesInput, opts ...request.Option) (*DescribeClientVpnRoutesOutput, error) { - req, out := c.DescribeClientVpnRoutesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeClientVpnRoutesPages iterates over the pages of a DescribeClientVpnRoutes operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeClientVpnRoutes method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeClientVpnRoutes operation. -// pageNum := 0 -// err := client.DescribeClientVpnRoutesPages(params, -// func(page *ec2.DescribeClientVpnRoutesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeClientVpnRoutesPages(input *DescribeClientVpnRoutesInput, fn func(*DescribeClientVpnRoutesOutput, bool) bool) error { - return c.DescribeClientVpnRoutesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeClientVpnRoutesPagesWithContext same as DescribeClientVpnRoutesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnRoutesPagesWithContext(ctx aws.Context, input *DescribeClientVpnRoutesInput, fn func(*DescribeClientVpnRoutesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeClientVpnRoutesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeClientVpnRoutesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeClientVpnRoutesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeClientVpnTargetNetworks = "DescribeClientVpnTargetNetworks" - -// DescribeClientVpnTargetNetworksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClientVpnTargetNetworks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeClientVpnTargetNetworks for more information on using the DescribeClientVpnTargetNetworks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeClientVpnTargetNetworksRequest method. -// req, resp := client.DescribeClientVpnTargetNetworksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnTargetNetworks -func (c *EC2) DescribeClientVpnTargetNetworksRequest(input *DescribeClientVpnTargetNetworksInput) (req *request.Request, output *DescribeClientVpnTargetNetworksOutput) { - op := &request.Operation{ - Name: opDescribeClientVpnTargetNetworks, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeClientVpnTargetNetworksInput{} - } - - output = &DescribeClientVpnTargetNetworksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeClientVpnTargetNetworks API operation for Amazon Elastic Compute Cloud. -// -// Describes the target networks associated with the specified Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClientVpnTargetNetworks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnTargetNetworks -func (c *EC2) DescribeClientVpnTargetNetworks(input *DescribeClientVpnTargetNetworksInput) (*DescribeClientVpnTargetNetworksOutput, error) { - req, out := c.DescribeClientVpnTargetNetworksRequest(input) - return out, req.Send() -} - -// DescribeClientVpnTargetNetworksWithContext is the same as DescribeClientVpnTargetNetworks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeClientVpnTargetNetworks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnTargetNetworksWithContext(ctx aws.Context, input *DescribeClientVpnTargetNetworksInput, opts ...request.Option) (*DescribeClientVpnTargetNetworksOutput, error) { - req, out := c.DescribeClientVpnTargetNetworksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeClientVpnTargetNetworksPages iterates over the pages of a DescribeClientVpnTargetNetworks operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeClientVpnTargetNetworks method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeClientVpnTargetNetworks operation. -// pageNum := 0 -// err := client.DescribeClientVpnTargetNetworksPages(params, -// func(page *ec2.DescribeClientVpnTargetNetworksOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeClientVpnTargetNetworksPages(input *DescribeClientVpnTargetNetworksInput, fn func(*DescribeClientVpnTargetNetworksOutput, bool) bool) error { - return c.DescribeClientVpnTargetNetworksPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeClientVpnTargetNetworksPagesWithContext same as DescribeClientVpnTargetNetworksPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeClientVpnTargetNetworksPagesWithContext(ctx aws.Context, input *DescribeClientVpnTargetNetworksInput, fn func(*DescribeClientVpnTargetNetworksOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeClientVpnTargetNetworksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeClientVpnTargetNetworksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeClientVpnTargetNetworksOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeConversionTasks = "DescribeConversionTasks" - -// DescribeConversionTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeConversionTasks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeConversionTasks for more information on using the DescribeConversionTasks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeConversionTasksRequest method. -// req, resp := client.DescribeConversionTasksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasks -func (c *EC2) DescribeConversionTasksRequest(input *DescribeConversionTasksInput) (req *request.Request, output *DescribeConversionTasksOutput) { - op := &request.Operation{ - Name: opDescribeConversionTasks, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeConversionTasksInput{} - } - - output = &DescribeConversionTasksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeConversionTasks API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified conversion tasks or all your conversion tasks. For -// more information, see the VM Import/Export User Guide (https://docs.aws.amazon.com/vm-import/latest/userguide/). -// -// For information about the import manifest referenced by this API action, -// see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeConversionTasks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasks -func (c *EC2) DescribeConversionTasks(input *DescribeConversionTasksInput) (*DescribeConversionTasksOutput, error) { - req, out := c.DescribeConversionTasksRequest(input) - return out, req.Send() -} - -// DescribeConversionTasksWithContext is the same as DescribeConversionTasks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeConversionTasks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeConversionTasksWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.Option) (*DescribeConversionTasksOutput, error) { - req, out := c.DescribeConversionTasksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeCustomerGateways = "DescribeCustomerGateways" - -// DescribeCustomerGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeCustomerGateways operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeCustomerGateways for more information on using the DescribeCustomerGateways -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeCustomerGatewaysRequest method. -// req, resp := client.DescribeCustomerGatewaysRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGateways -func (c *EC2) DescribeCustomerGatewaysRequest(input *DescribeCustomerGatewaysInput) (req *request.Request, output *DescribeCustomerGatewaysOutput) { - op := &request.Operation{ - Name: opDescribeCustomerGateways, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeCustomerGatewaysInput{} - } - - output = &DescribeCustomerGatewaysOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeCustomerGateways API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPN customer gateways. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeCustomerGateways for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGateways -func (c *EC2) DescribeCustomerGateways(input *DescribeCustomerGatewaysInput) (*DescribeCustomerGatewaysOutput, error) { - req, out := c.DescribeCustomerGatewaysRequest(input) - return out, req.Send() -} - -// DescribeCustomerGatewaysWithContext is the same as DescribeCustomerGateways with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeCustomerGateways for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeCustomerGatewaysWithContext(ctx aws.Context, input *DescribeCustomerGatewaysInput, opts ...request.Option) (*DescribeCustomerGatewaysOutput, error) { - req, out := c.DescribeCustomerGatewaysRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeDhcpOptions = "DescribeDhcpOptions" - -// DescribeDhcpOptionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeDhcpOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeDhcpOptions for more information on using the DescribeDhcpOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeDhcpOptionsRequest method. -// req, resp := client.DescribeDhcpOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptions -func (c *EC2) DescribeDhcpOptionsRequest(input *DescribeDhcpOptionsInput) (req *request.Request, output *DescribeDhcpOptionsOutput) { - op := &request.Operation{ - Name: opDescribeDhcpOptions, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeDhcpOptionsInput{} - } - - output = &DescribeDhcpOptionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeDhcpOptions API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your DHCP options sets. -// -// For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeDhcpOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptions -func (c *EC2) DescribeDhcpOptions(input *DescribeDhcpOptionsInput) (*DescribeDhcpOptionsOutput, error) { - req, out := c.DescribeDhcpOptionsRequest(input) - return out, req.Send() -} - -// DescribeDhcpOptionsWithContext is the same as DescribeDhcpOptions with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeDhcpOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeDhcpOptionsWithContext(ctx aws.Context, input *DescribeDhcpOptionsInput, opts ...request.Option) (*DescribeDhcpOptionsOutput, error) { - req, out := c.DescribeDhcpOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeDhcpOptionsPages iterates over the pages of a DescribeDhcpOptions operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeDhcpOptions method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeDhcpOptions operation. -// pageNum := 0 -// err := client.DescribeDhcpOptionsPages(params, -// func(page *ec2.DescribeDhcpOptionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeDhcpOptionsPages(input *DescribeDhcpOptionsInput, fn func(*DescribeDhcpOptionsOutput, bool) bool) error { - return c.DescribeDhcpOptionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeDhcpOptionsPagesWithContext same as DescribeDhcpOptionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeDhcpOptionsPagesWithContext(ctx aws.Context, input *DescribeDhcpOptionsInput, fn func(*DescribeDhcpOptionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeDhcpOptionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeDhcpOptionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeDhcpOptionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeEgressOnlyInternetGateways = "DescribeEgressOnlyInternetGateways" - -// DescribeEgressOnlyInternetGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeEgressOnlyInternetGateways operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeEgressOnlyInternetGateways for more information on using the DescribeEgressOnlyInternetGateways -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeEgressOnlyInternetGatewaysRequest method. -// req, resp := client.DescribeEgressOnlyInternetGatewaysRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGateways -func (c *EC2) DescribeEgressOnlyInternetGatewaysRequest(input *DescribeEgressOnlyInternetGatewaysInput) (req *request.Request, output *DescribeEgressOnlyInternetGatewaysOutput) { - op := &request.Operation{ - Name: opDescribeEgressOnlyInternetGateways, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeEgressOnlyInternetGatewaysInput{} - } - - output = &DescribeEgressOnlyInternetGatewaysOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeEgressOnlyInternetGateways API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your egress-only internet gateways. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeEgressOnlyInternetGateways for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGateways -func (c *EC2) DescribeEgressOnlyInternetGateways(input *DescribeEgressOnlyInternetGatewaysInput) (*DescribeEgressOnlyInternetGatewaysOutput, error) { - req, out := c.DescribeEgressOnlyInternetGatewaysRequest(input) - return out, req.Send() -} - -// DescribeEgressOnlyInternetGatewaysWithContext is the same as DescribeEgressOnlyInternetGateways with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeEgressOnlyInternetGateways for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeEgressOnlyInternetGatewaysWithContext(ctx aws.Context, input *DescribeEgressOnlyInternetGatewaysInput, opts ...request.Option) (*DescribeEgressOnlyInternetGatewaysOutput, error) { - req, out := c.DescribeEgressOnlyInternetGatewaysRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeEgressOnlyInternetGatewaysPages iterates over the pages of a DescribeEgressOnlyInternetGateways operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeEgressOnlyInternetGateways method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeEgressOnlyInternetGateways operation. -// pageNum := 0 -// err := client.DescribeEgressOnlyInternetGatewaysPages(params, -// func(page *ec2.DescribeEgressOnlyInternetGatewaysOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeEgressOnlyInternetGatewaysPages(input *DescribeEgressOnlyInternetGatewaysInput, fn func(*DescribeEgressOnlyInternetGatewaysOutput, bool) bool) error { - return c.DescribeEgressOnlyInternetGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeEgressOnlyInternetGatewaysPagesWithContext same as DescribeEgressOnlyInternetGatewaysPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeEgressOnlyInternetGatewaysPagesWithContext(ctx aws.Context, input *DescribeEgressOnlyInternetGatewaysInput, fn func(*DescribeEgressOnlyInternetGatewaysOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeEgressOnlyInternetGatewaysInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeEgressOnlyInternetGatewaysRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeEgressOnlyInternetGatewaysOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeElasticGpus = "DescribeElasticGpus" - -// DescribeElasticGpusRequest generates a "aws/request.Request" representing the -// client's request for the DescribeElasticGpus operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeElasticGpus for more information on using the DescribeElasticGpus -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeElasticGpusRequest method. -// req, resp := client.DescribeElasticGpusRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeElasticGpus -func (c *EC2) DescribeElasticGpusRequest(input *DescribeElasticGpusInput) (req *request.Request, output *DescribeElasticGpusOutput) { - op := &request.Operation{ - Name: opDescribeElasticGpus, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeElasticGpusInput{} - } - - output = &DescribeElasticGpusOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeElasticGpus API operation for Amazon Elastic Compute Cloud. -// -// Describes the Elastic Graphics accelerator associated with your instances. -// For more information about Elastic Graphics, see Amazon Elastic Graphics -// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeElasticGpus for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeElasticGpus -func (c *EC2) DescribeElasticGpus(input *DescribeElasticGpusInput) (*DescribeElasticGpusOutput, error) { - req, out := c.DescribeElasticGpusRequest(input) - return out, req.Send() -} - -// DescribeElasticGpusWithContext is the same as DescribeElasticGpus with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeElasticGpus for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeElasticGpusWithContext(ctx aws.Context, input *DescribeElasticGpusInput, opts ...request.Option) (*DescribeElasticGpusOutput, error) { - req, out := c.DescribeElasticGpusRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeExportImageTasks = "DescribeExportImageTasks" - -// DescribeExportImageTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeExportImageTasks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeExportImageTasks for more information on using the DescribeExportImageTasks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeExportImageTasksRequest method. -// req, resp := client.DescribeExportImageTasksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportImageTasks -func (c *EC2) DescribeExportImageTasksRequest(input *DescribeExportImageTasksInput) (req *request.Request, output *DescribeExportImageTasksOutput) { - op := &request.Operation{ - Name: opDescribeExportImageTasks, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeExportImageTasksInput{} - } - - output = &DescribeExportImageTasksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeExportImageTasks API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified export image tasks or all your export image tasks. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeExportImageTasks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportImageTasks -func (c *EC2) DescribeExportImageTasks(input *DescribeExportImageTasksInput) (*DescribeExportImageTasksOutput, error) { - req, out := c.DescribeExportImageTasksRequest(input) - return out, req.Send() -} - -// DescribeExportImageTasksWithContext is the same as DescribeExportImageTasks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeExportImageTasks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeExportImageTasksWithContext(ctx aws.Context, input *DescribeExportImageTasksInput, opts ...request.Option) (*DescribeExportImageTasksOutput, error) { - req, out := c.DescribeExportImageTasksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeExportImageTasksPages iterates over the pages of a DescribeExportImageTasks operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeExportImageTasks method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeExportImageTasks operation. -// pageNum := 0 -// err := client.DescribeExportImageTasksPages(params, -// func(page *ec2.DescribeExportImageTasksOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeExportImageTasksPages(input *DescribeExportImageTasksInput, fn func(*DescribeExportImageTasksOutput, bool) bool) error { - return c.DescribeExportImageTasksPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeExportImageTasksPagesWithContext same as DescribeExportImageTasksPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeExportImageTasksPagesWithContext(ctx aws.Context, input *DescribeExportImageTasksInput, fn func(*DescribeExportImageTasksOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeExportImageTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeExportImageTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeExportImageTasksOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeExportTasks = "DescribeExportTasks" - -// DescribeExportTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeExportTasks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeExportTasks for more information on using the DescribeExportTasks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeExportTasksRequest method. -// req, resp := client.DescribeExportTasksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasks -func (c *EC2) DescribeExportTasksRequest(input *DescribeExportTasksInput) (req *request.Request, output *DescribeExportTasksOutput) { - op := &request.Operation{ - Name: opDescribeExportTasks, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeExportTasksInput{} - } - - output = &DescribeExportTasksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeExportTasks API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified export instance tasks or all your export instance -// tasks. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeExportTasks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasks -func (c *EC2) DescribeExportTasks(input *DescribeExportTasksInput) (*DescribeExportTasksOutput, error) { - req, out := c.DescribeExportTasksRequest(input) - return out, req.Send() -} - -// DescribeExportTasksWithContext is the same as DescribeExportTasks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeExportTasks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeExportTasksWithContext(ctx aws.Context, input *DescribeExportTasksInput, opts ...request.Option) (*DescribeExportTasksOutput, error) { - req, out := c.DescribeExportTasksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeFastSnapshotRestores = "DescribeFastSnapshotRestores" - -// DescribeFastSnapshotRestoresRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFastSnapshotRestores operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFastSnapshotRestores for more information on using the DescribeFastSnapshotRestores -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFastSnapshotRestoresRequest method. -// req, resp := client.DescribeFastSnapshotRestoresRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestores -func (c *EC2) DescribeFastSnapshotRestoresRequest(input *DescribeFastSnapshotRestoresInput) (req *request.Request, output *DescribeFastSnapshotRestoresOutput) { - op := &request.Operation{ - Name: opDescribeFastSnapshotRestores, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeFastSnapshotRestoresInput{} - } - - output = &DescribeFastSnapshotRestoresOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFastSnapshotRestores API operation for Amazon Elastic Compute Cloud. -// -// Describes the state of fast snapshot restores for your snapshots. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFastSnapshotRestores for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestores -func (c *EC2) DescribeFastSnapshotRestores(input *DescribeFastSnapshotRestoresInput) (*DescribeFastSnapshotRestoresOutput, error) { - req, out := c.DescribeFastSnapshotRestoresRequest(input) - return out, req.Send() -} - -// DescribeFastSnapshotRestoresWithContext is the same as DescribeFastSnapshotRestores with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFastSnapshotRestores for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFastSnapshotRestoresWithContext(ctx aws.Context, input *DescribeFastSnapshotRestoresInput, opts ...request.Option) (*DescribeFastSnapshotRestoresOutput, error) { - req, out := c.DescribeFastSnapshotRestoresRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeFastSnapshotRestoresPages iterates over the pages of a DescribeFastSnapshotRestores operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeFastSnapshotRestores method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeFastSnapshotRestores operation. -// pageNum := 0 -// err := client.DescribeFastSnapshotRestoresPages(params, -// func(page *ec2.DescribeFastSnapshotRestoresOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeFastSnapshotRestoresPages(input *DescribeFastSnapshotRestoresInput, fn func(*DescribeFastSnapshotRestoresOutput, bool) bool) error { - return c.DescribeFastSnapshotRestoresPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeFastSnapshotRestoresPagesWithContext same as DescribeFastSnapshotRestoresPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFastSnapshotRestoresPagesWithContext(ctx aws.Context, input *DescribeFastSnapshotRestoresInput, fn func(*DescribeFastSnapshotRestoresOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeFastSnapshotRestoresInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeFastSnapshotRestoresRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeFastSnapshotRestoresOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeFleetHistory = "DescribeFleetHistory" - -// DescribeFleetHistoryRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFleetHistory operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFleetHistory for more information on using the DescribeFleetHistory -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFleetHistoryRequest method. -// req, resp := client.DescribeFleetHistoryRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetHistory -func (c *EC2) DescribeFleetHistoryRequest(input *DescribeFleetHistoryInput) (req *request.Request, output *DescribeFleetHistoryOutput) { - op := &request.Operation{ - Name: opDescribeFleetHistory, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeFleetHistoryInput{} - } - - output = &DescribeFleetHistoryOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFleetHistory API operation for Amazon Elastic Compute Cloud. -// -// Describes the events for the specified EC2 Fleet during the specified time. -// -// EC2 Fleet events are delayed by up to 30 seconds before they can be described. -// This ensures that you can query by the last evaluated time and not miss a -// recorded event. EC2 Fleet events are available for 48 hours. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFleetHistory for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetHistory -func (c *EC2) DescribeFleetHistory(input *DescribeFleetHistoryInput) (*DescribeFleetHistoryOutput, error) { - req, out := c.DescribeFleetHistoryRequest(input) - return out, req.Send() -} - -// DescribeFleetHistoryWithContext is the same as DescribeFleetHistory with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFleetHistory for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFleetHistoryWithContext(ctx aws.Context, input *DescribeFleetHistoryInput, opts ...request.Option) (*DescribeFleetHistoryOutput, error) { - req, out := c.DescribeFleetHistoryRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeFleetInstances = "DescribeFleetInstances" - -// DescribeFleetInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFleetInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFleetInstances for more information on using the DescribeFleetInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFleetInstancesRequest method. -// req, resp := client.DescribeFleetInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetInstances -func (c *EC2) DescribeFleetInstancesRequest(input *DescribeFleetInstancesInput) (req *request.Request, output *DescribeFleetInstancesOutput) { - op := &request.Operation{ - Name: opDescribeFleetInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeFleetInstancesInput{} - } - - output = &DescribeFleetInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFleetInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes the running instances for the specified EC2 Fleet. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFleetInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetInstances -func (c *EC2) DescribeFleetInstances(input *DescribeFleetInstancesInput) (*DescribeFleetInstancesOutput, error) { - req, out := c.DescribeFleetInstancesRequest(input) - return out, req.Send() -} - -// DescribeFleetInstancesWithContext is the same as DescribeFleetInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFleetInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFleetInstancesWithContext(ctx aws.Context, input *DescribeFleetInstancesInput, opts ...request.Option) (*DescribeFleetInstancesOutput, error) { - req, out := c.DescribeFleetInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeFleets = "DescribeFleets" - -// DescribeFleetsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFleets operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFleets for more information on using the DescribeFleets -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFleetsRequest method. -// req, resp := client.DescribeFleetsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleets -func (c *EC2) DescribeFleetsRequest(input *DescribeFleetsInput) (req *request.Request, output *DescribeFleetsOutput) { - op := &request.Operation{ - Name: opDescribeFleets, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeFleetsInput{} - } - - output = &DescribeFleetsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFleets API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified EC2 Fleets or all your EC2 Fleets. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFleets for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleets -func (c *EC2) DescribeFleets(input *DescribeFleetsInput) (*DescribeFleetsOutput, error) { - req, out := c.DescribeFleetsRequest(input) - return out, req.Send() -} - -// DescribeFleetsWithContext is the same as DescribeFleets with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFleets for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFleetsWithContext(ctx aws.Context, input *DescribeFleetsInput, opts ...request.Option) (*DescribeFleetsOutput, error) { - req, out := c.DescribeFleetsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeFleetsPages iterates over the pages of a DescribeFleets operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeFleets method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeFleets operation. -// pageNum := 0 -// err := client.DescribeFleetsPages(params, -// func(page *ec2.DescribeFleetsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeFleetsPages(input *DescribeFleetsInput, fn func(*DescribeFleetsOutput, bool) bool) error { - return c.DescribeFleetsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeFleetsPagesWithContext same as DescribeFleetsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFleetsPagesWithContext(ctx aws.Context, input *DescribeFleetsInput, fn func(*DescribeFleetsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeFleetsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeFleetsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeFleetsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeFlowLogs = "DescribeFlowLogs" - -// DescribeFlowLogsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFlowLogs operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFlowLogs for more information on using the DescribeFlowLogs -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFlowLogsRequest method. -// req, resp := client.DescribeFlowLogsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogs -func (c *EC2) DescribeFlowLogsRequest(input *DescribeFlowLogsInput) (req *request.Request, output *DescribeFlowLogsOutput) { - op := &request.Operation{ - Name: opDescribeFlowLogs, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeFlowLogsInput{} - } - - output = &DescribeFlowLogsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFlowLogs API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more flow logs. To view the information in your flow logs -// (the log streams for the network interfaces), you must use the CloudWatch -// Logs console or the CloudWatch Logs API. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFlowLogs for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogs -func (c *EC2) DescribeFlowLogs(input *DescribeFlowLogsInput) (*DescribeFlowLogsOutput, error) { - req, out := c.DescribeFlowLogsRequest(input) - return out, req.Send() -} - -// DescribeFlowLogsWithContext is the same as DescribeFlowLogs with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFlowLogs for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFlowLogsWithContext(ctx aws.Context, input *DescribeFlowLogsInput, opts ...request.Option) (*DescribeFlowLogsOutput, error) { - req, out := c.DescribeFlowLogsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeFlowLogsPages iterates over the pages of a DescribeFlowLogs operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeFlowLogs method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeFlowLogs operation. -// pageNum := 0 -// err := client.DescribeFlowLogsPages(params, -// func(page *ec2.DescribeFlowLogsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeFlowLogsPages(input *DescribeFlowLogsInput, fn func(*DescribeFlowLogsOutput, bool) bool) error { - return c.DescribeFlowLogsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeFlowLogsPagesWithContext same as DescribeFlowLogsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFlowLogsPagesWithContext(ctx aws.Context, input *DescribeFlowLogsInput, fn func(*DescribeFlowLogsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeFlowLogsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeFlowLogsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeFlowLogsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeFpgaImageAttribute = "DescribeFpgaImageAttribute" - -// DescribeFpgaImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFpgaImageAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFpgaImageAttribute for more information on using the DescribeFpgaImageAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFpgaImageAttributeRequest method. -// req, resp := client.DescribeFpgaImageAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImageAttribute -func (c *EC2) DescribeFpgaImageAttributeRequest(input *DescribeFpgaImageAttributeInput) (req *request.Request, output *DescribeFpgaImageAttributeOutput) { - op := &request.Operation{ - Name: opDescribeFpgaImageAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeFpgaImageAttributeInput{} - } - - output = &DescribeFpgaImageAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFpgaImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified Amazon FPGA Image (AFI). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFpgaImageAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImageAttribute -func (c *EC2) DescribeFpgaImageAttribute(input *DescribeFpgaImageAttributeInput) (*DescribeFpgaImageAttributeOutput, error) { - req, out := c.DescribeFpgaImageAttributeRequest(input) - return out, req.Send() -} - -// DescribeFpgaImageAttributeWithContext is the same as DescribeFpgaImageAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFpgaImageAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFpgaImageAttributeWithContext(ctx aws.Context, input *DescribeFpgaImageAttributeInput, opts ...request.Option) (*DescribeFpgaImageAttributeOutput, error) { - req, out := c.DescribeFpgaImageAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeFpgaImages = "DescribeFpgaImages" - -// DescribeFpgaImagesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFpgaImages operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeFpgaImages for more information on using the DescribeFpgaImages -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeFpgaImagesRequest method. -// req, resp := client.DescribeFpgaImagesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImages -func (c *EC2) DescribeFpgaImagesRequest(input *DescribeFpgaImagesInput) (req *request.Request, output *DescribeFpgaImagesOutput) { - op := &request.Operation{ - Name: opDescribeFpgaImages, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeFpgaImagesInput{} - } - - output = &DescribeFpgaImagesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeFpgaImages API operation for Amazon Elastic Compute Cloud. -// -// Describes the Amazon FPGA Images (AFIs) available to you. These include public -// AFIs, private AFIs that you own, and AFIs owned by other AWS accounts for -// which you have load permissions. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFpgaImages for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImages -func (c *EC2) DescribeFpgaImages(input *DescribeFpgaImagesInput) (*DescribeFpgaImagesOutput, error) { - req, out := c.DescribeFpgaImagesRequest(input) - return out, req.Send() -} - -// DescribeFpgaImagesWithContext is the same as DescribeFpgaImages with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeFpgaImages for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFpgaImagesWithContext(ctx aws.Context, input *DescribeFpgaImagesInput, opts ...request.Option) (*DescribeFpgaImagesOutput, error) { - req, out := c.DescribeFpgaImagesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeFpgaImagesPages iterates over the pages of a DescribeFpgaImages operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeFpgaImages method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeFpgaImages operation. -// pageNum := 0 -// err := client.DescribeFpgaImagesPages(params, -// func(page *ec2.DescribeFpgaImagesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeFpgaImagesPages(input *DescribeFpgaImagesInput, fn func(*DescribeFpgaImagesOutput, bool) bool) error { - return c.DescribeFpgaImagesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeFpgaImagesPagesWithContext same as DescribeFpgaImagesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeFpgaImagesPagesWithContext(ctx aws.Context, input *DescribeFpgaImagesInput, fn func(*DescribeFpgaImagesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeFpgaImagesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeFpgaImagesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeFpgaImagesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeHostReservationOfferings = "DescribeHostReservationOfferings" - -// DescribeHostReservationOfferingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeHostReservationOfferings operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeHostReservationOfferings for more information on using the DescribeHostReservationOfferings -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeHostReservationOfferingsRequest method. -// req, resp := client.DescribeHostReservationOfferingsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferings -func (c *EC2) DescribeHostReservationOfferingsRequest(input *DescribeHostReservationOfferingsInput) (req *request.Request, output *DescribeHostReservationOfferingsOutput) { - op := &request.Operation{ - Name: opDescribeHostReservationOfferings, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeHostReservationOfferingsInput{} - } - - output = &DescribeHostReservationOfferingsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeHostReservationOfferings API operation for Amazon Elastic Compute Cloud. -// -// Describes the Dedicated Host reservations that are available to purchase. -// -// The results describe all of the Dedicated Host reservation offerings, including -// offerings that might not match the instance family and Region of your Dedicated -// Hosts. When purchasing an offering, ensure that the instance family and Region -// of the offering matches that of the Dedicated Hosts with which it is to be -// associated. For more information about supported instance types, see Dedicated -// Hosts Overview (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeHostReservationOfferings for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferings -func (c *EC2) DescribeHostReservationOfferings(input *DescribeHostReservationOfferingsInput) (*DescribeHostReservationOfferingsOutput, error) { - req, out := c.DescribeHostReservationOfferingsRequest(input) - return out, req.Send() -} - -// DescribeHostReservationOfferingsWithContext is the same as DescribeHostReservationOfferings with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeHostReservationOfferings for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeHostReservationOfferingsWithContext(ctx aws.Context, input *DescribeHostReservationOfferingsInput, opts ...request.Option) (*DescribeHostReservationOfferingsOutput, error) { - req, out := c.DescribeHostReservationOfferingsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeHostReservationOfferingsPages iterates over the pages of a DescribeHostReservationOfferings operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeHostReservationOfferings method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeHostReservationOfferings operation. -// pageNum := 0 -// err := client.DescribeHostReservationOfferingsPages(params, -// func(page *ec2.DescribeHostReservationOfferingsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeHostReservationOfferingsPages(input *DescribeHostReservationOfferingsInput, fn func(*DescribeHostReservationOfferingsOutput, bool) bool) error { - return c.DescribeHostReservationOfferingsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeHostReservationOfferingsPagesWithContext same as DescribeHostReservationOfferingsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeHostReservationOfferingsPagesWithContext(ctx aws.Context, input *DescribeHostReservationOfferingsInput, fn func(*DescribeHostReservationOfferingsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeHostReservationOfferingsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeHostReservationOfferingsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeHostReservationOfferingsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeHostReservations = "DescribeHostReservations" - -// DescribeHostReservationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeHostReservations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeHostReservations for more information on using the DescribeHostReservations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeHostReservationsRequest method. -// req, resp := client.DescribeHostReservationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservations -func (c *EC2) DescribeHostReservationsRequest(input *DescribeHostReservationsInput) (req *request.Request, output *DescribeHostReservationsOutput) { - op := &request.Operation{ - Name: opDescribeHostReservations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeHostReservationsInput{} - } - - output = &DescribeHostReservationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeHostReservations API operation for Amazon Elastic Compute Cloud. -// -// Describes reservations that are associated with Dedicated Hosts in your account. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeHostReservations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservations -func (c *EC2) DescribeHostReservations(input *DescribeHostReservationsInput) (*DescribeHostReservationsOutput, error) { - req, out := c.DescribeHostReservationsRequest(input) - return out, req.Send() -} - -// DescribeHostReservationsWithContext is the same as DescribeHostReservations with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeHostReservations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeHostReservationsWithContext(ctx aws.Context, input *DescribeHostReservationsInput, opts ...request.Option) (*DescribeHostReservationsOutput, error) { - req, out := c.DescribeHostReservationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeHostReservationsPages iterates over the pages of a DescribeHostReservations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeHostReservations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeHostReservations operation. -// pageNum := 0 -// err := client.DescribeHostReservationsPages(params, -// func(page *ec2.DescribeHostReservationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeHostReservationsPages(input *DescribeHostReservationsInput, fn func(*DescribeHostReservationsOutput, bool) bool) error { - return c.DescribeHostReservationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeHostReservationsPagesWithContext same as DescribeHostReservationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeHostReservationsPagesWithContext(ctx aws.Context, input *DescribeHostReservationsInput, fn func(*DescribeHostReservationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeHostReservationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeHostReservationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeHostReservationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeHosts = "DescribeHosts" - -// DescribeHostsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeHosts operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeHosts for more information on using the DescribeHosts -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeHostsRequest method. -// req, resp := client.DescribeHostsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHosts -func (c *EC2) DescribeHostsRequest(input *DescribeHostsInput) (req *request.Request, output *DescribeHostsOutput) { - op := &request.Operation{ - Name: opDescribeHosts, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeHostsInput{} - } - - output = &DescribeHostsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeHosts API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified Dedicated Hosts or all your Dedicated Hosts. -// -// The results describe only the Dedicated Hosts in the Region you're currently -// using. All listed instances consume capacity on your Dedicated Host. Dedicated -// Hosts that have recently been released are listed with the state released. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeHosts for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHosts -func (c *EC2) DescribeHosts(input *DescribeHostsInput) (*DescribeHostsOutput, error) { - req, out := c.DescribeHostsRequest(input) - return out, req.Send() -} - -// DescribeHostsWithContext is the same as DescribeHosts with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeHosts for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeHostsWithContext(ctx aws.Context, input *DescribeHostsInput, opts ...request.Option) (*DescribeHostsOutput, error) { - req, out := c.DescribeHostsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeHostsPages iterates over the pages of a DescribeHosts operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeHosts method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeHosts operation. -// pageNum := 0 -// err := client.DescribeHostsPages(params, -// func(page *ec2.DescribeHostsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeHostsPages(input *DescribeHostsInput, fn func(*DescribeHostsOutput, bool) bool) error { - return c.DescribeHostsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeHostsPagesWithContext same as DescribeHostsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeHostsPagesWithContext(ctx aws.Context, input *DescribeHostsInput, fn func(*DescribeHostsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeHostsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeHostsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeHostsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeIamInstanceProfileAssociations = "DescribeIamInstanceProfileAssociations" - -// DescribeIamInstanceProfileAssociationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeIamInstanceProfileAssociations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeIamInstanceProfileAssociations for more information on using the DescribeIamInstanceProfileAssociations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeIamInstanceProfileAssociationsRequest method. -// req, resp := client.DescribeIamInstanceProfileAssociationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociations -func (c *EC2) DescribeIamInstanceProfileAssociationsRequest(input *DescribeIamInstanceProfileAssociationsInput) (req *request.Request, output *DescribeIamInstanceProfileAssociationsOutput) { - op := &request.Operation{ - Name: opDescribeIamInstanceProfileAssociations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeIamInstanceProfileAssociationsInput{} - } - - output = &DescribeIamInstanceProfileAssociationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeIamInstanceProfileAssociations API operation for Amazon Elastic Compute Cloud. -// -// Describes your IAM instance profile associations. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeIamInstanceProfileAssociations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociations -func (c *EC2) DescribeIamInstanceProfileAssociations(input *DescribeIamInstanceProfileAssociationsInput) (*DescribeIamInstanceProfileAssociationsOutput, error) { - req, out := c.DescribeIamInstanceProfileAssociationsRequest(input) - return out, req.Send() -} - -// DescribeIamInstanceProfileAssociationsWithContext is the same as DescribeIamInstanceProfileAssociations with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeIamInstanceProfileAssociations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeIamInstanceProfileAssociationsWithContext(ctx aws.Context, input *DescribeIamInstanceProfileAssociationsInput, opts ...request.Option) (*DescribeIamInstanceProfileAssociationsOutput, error) { - req, out := c.DescribeIamInstanceProfileAssociationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeIamInstanceProfileAssociationsPages iterates over the pages of a DescribeIamInstanceProfileAssociations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeIamInstanceProfileAssociations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeIamInstanceProfileAssociations operation. -// pageNum := 0 -// err := client.DescribeIamInstanceProfileAssociationsPages(params, -// func(page *ec2.DescribeIamInstanceProfileAssociationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeIamInstanceProfileAssociationsPages(input *DescribeIamInstanceProfileAssociationsInput, fn func(*DescribeIamInstanceProfileAssociationsOutput, bool) bool) error { - return c.DescribeIamInstanceProfileAssociationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeIamInstanceProfileAssociationsPagesWithContext same as DescribeIamInstanceProfileAssociationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeIamInstanceProfileAssociationsPagesWithContext(ctx aws.Context, input *DescribeIamInstanceProfileAssociationsInput, fn func(*DescribeIamInstanceProfileAssociationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeIamInstanceProfileAssociationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeIamInstanceProfileAssociationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeIamInstanceProfileAssociationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeIdFormat = "DescribeIdFormat" - -// DescribeIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the DescribeIdFormat operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeIdFormat for more information on using the DescribeIdFormat -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeIdFormatRequest method. -// req, resp := client.DescribeIdFormatRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormat -func (c *EC2) DescribeIdFormatRequest(input *DescribeIdFormatInput) (req *request.Request, output *DescribeIdFormatOutput) { - op := &request.Operation{ - Name: opDescribeIdFormat, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeIdFormatInput{} - } - - output = &DescribeIdFormatOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Describes the ID format settings for your resources on a per-Region basis, -// for example, to view which resource types are enabled for longer IDs. This -// request only returns information about resource types whose ID formats can -// be modified; it does not return information about other resource types. -// -// The following resource types support longer IDs: bundle | conversion-task -// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association -// | export-task | flow-log | image | import-task | instance | internet-gateway -// | network-acl | network-acl-association | network-interface | network-interface-attachment -// | prefix-list | reservation | route-table | route-table-association | security-group -// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association -// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. -// -// These settings apply to the IAM user who makes the request; they do not apply -// to the entire AWS account. By default, an IAM user defaults to the same settings -// as the root user, unless they explicitly override the settings by running -// the ModifyIdFormat command. Resources created with longer IDs are visible -// to all IAM users, regardless of these settings and provided that they have -// permission to use the relevant Describe command for the resource type. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeIdFormat for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormat -func (c *EC2) DescribeIdFormat(input *DescribeIdFormatInput) (*DescribeIdFormatOutput, error) { - req, out := c.DescribeIdFormatRequest(input) - return out, req.Send() -} - -// DescribeIdFormatWithContext is the same as DescribeIdFormat with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeIdFormat for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeIdFormatWithContext(ctx aws.Context, input *DescribeIdFormatInput, opts ...request.Option) (*DescribeIdFormatOutput, error) { - req, out := c.DescribeIdFormatRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeIdentityIdFormat = "DescribeIdentityIdFormat" - -// DescribeIdentityIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the DescribeIdentityIdFormat operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeIdentityIdFormat for more information on using the DescribeIdentityIdFormat -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeIdentityIdFormatRequest method. -// req, resp := client.DescribeIdentityIdFormatRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormat -func (c *EC2) DescribeIdentityIdFormatRequest(input *DescribeIdentityIdFormatInput) (req *request.Request, output *DescribeIdentityIdFormatOutput) { - op := &request.Operation{ - Name: opDescribeIdentityIdFormat, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeIdentityIdFormatInput{} - } - - output = &DescribeIdentityIdFormatOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeIdentityIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Describes the ID format settings for resources for the specified IAM user, -// IAM role, or root user. For example, you can view the resource types that -// are enabled for longer IDs. This request only returns information about resource -// types whose ID formats can be modified; it does not return information about -// other resource types. For more information, see Resource IDs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// The following resource types support longer IDs: bundle | conversion-task -// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association -// | export-task | flow-log | image | import-task | instance | internet-gateway -// | network-acl | network-acl-association | network-interface | network-interface-attachment -// | prefix-list | reservation | route-table | route-table-association | security-group -// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association -// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. -// -// These settings apply to the principal specified in the request. They do not -// apply to the principal that makes the request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeIdentityIdFormat for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormat -func (c *EC2) DescribeIdentityIdFormat(input *DescribeIdentityIdFormatInput) (*DescribeIdentityIdFormatOutput, error) { - req, out := c.DescribeIdentityIdFormatRequest(input) - return out, req.Send() -} - -// DescribeIdentityIdFormatWithContext is the same as DescribeIdentityIdFormat with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeIdentityIdFormat for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeIdentityIdFormatWithContext(ctx aws.Context, input *DescribeIdentityIdFormatInput, opts ...request.Option) (*DescribeIdentityIdFormatOutput, error) { - req, out := c.DescribeIdentityIdFormatRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeImageAttribute = "DescribeImageAttribute" - -// DescribeImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImageAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeImageAttribute for more information on using the DescribeImageAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeImageAttributeRequest method. -// req, resp := client.DescribeImageAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttribute -func (c *EC2) DescribeImageAttributeRequest(input *DescribeImageAttributeInput) (req *request.Request, output *DescribeImageAttributeOutput) { - op := &request.Operation{ - Name: opDescribeImageAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeImageAttributeInput{} - } - - output = &DescribeImageAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified AMI. You can specify only -// one attribute at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImageAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttribute -func (c *EC2) DescribeImageAttribute(input *DescribeImageAttributeInput) (*DescribeImageAttributeOutput, error) { - req, out := c.DescribeImageAttributeRequest(input) - return out, req.Send() -} - -// DescribeImageAttributeWithContext is the same as DescribeImageAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeImageAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeImageAttributeWithContext(ctx aws.Context, input *DescribeImageAttributeInput, opts ...request.Option) (*DescribeImageAttributeOutput, error) { - req, out := c.DescribeImageAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeImages = "DescribeImages" - -// DescribeImagesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImages operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeImages for more information on using the DescribeImages -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeImagesRequest method. -// req, resp := client.DescribeImagesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImages -func (c *EC2) DescribeImagesRequest(input *DescribeImagesInput) (req *request.Request, output *DescribeImagesOutput) { - op := &request.Operation{ - Name: opDescribeImages, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeImagesInput{} - } - - output = &DescribeImagesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeImages API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified images (AMIs, AKIs, and ARIs) available to you or -// all of the images available to you. -// -// The images available to you include public images, private images that you -// own, and private images owned by other AWS accounts for which you have explicit -// launch permissions. -// -// Recently deregistered images appear in the returned results for a short interval -// and then return empty results. After all instances that reference a deregistered -// AMI are terminated, specifying the ID of the image results in an error indicating -// that the AMI ID cannot be found. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImages for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImages -func (c *EC2) DescribeImages(input *DescribeImagesInput) (*DescribeImagesOutput, error) { - req, out := c.DescribeImagesRequest(input) - return out, req.Send() -} - -// DescribeImagesWithContext is the same as DescribeImages with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeImages for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeImagesWithContext(ctx aws.Context, input *DescribeImagesInput, opts ...request.Option) (*DescribeImagesOutput, error) { - req, out := c.DescribeImagesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeImportImageTasks = "DescribeImportImageTasks" - -// DescribeImportImageTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImportImageTasks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeImportImageTasks for more information on using the DescribeImportImageTasks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeImportImageTasksRequest method. -// req, resp := client.DescribeImportImageTasksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasks -func (c *EC2) DescribeImportImageTasksRequest(input *DescribeImportImageTasksInput) (req *request.Request, output *DescribeImportImageTasksOutput) { - op := &request.Operation{ - Name: opDescribeImportImageTasks, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeImportImageTasksInput{} - } - - output = &DescribeImportImageTasksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeImportImageTasks API operation for Amazon Elastic Compute Cloud. -// -// Displays details about an import virtual machine or import snapshot tasks -// that are already created. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImportImageTasks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasks -func (c *EC2) DescribeImportImageTasks(input *DescribeImportImageTasksInput) (*DescribeImportImageTasksOutput, error) { - req, out := c.DescribeImportImageTasksRequest(input) - return out, req.Send() -} - -// DescribeImportImageTasksWithContext is the same as DescribeImportImageTasks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeImportImageTasks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeImportImageTasksWithContext(ctx aws.Context, input *DescribeImportImageTasksInput, opts ...request.Option) (*DescribeImportImageTasksOutput, error) { - req, out := c.DescribeImportImageTasksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeImportImageTasksPages iterates over the pages of a DescribeImportImageTasks operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeImportImageTasks method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeImportImageTasks operation. -// pageNum := 0 -// err := client.DescribeImportImageTasksPages(params, -// func(page *ec2.DescribeImportImageTasksOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeImportImageTasksPages(input *DescribeImportImageTasksInput, fn func(*DescribeImportImageTasksOutput, bool) bool) error { - return c.DescribeImportImageTasksPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeImportImageTasksPagesWithContext same as DescribeImportImageTasksPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeImportImageTasksPagesWithContext(ctx aws.Context, input *DescribeImportImageTasksInput, fn func(*DescribeImportImageTasksOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeImportImageTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeImportImageTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeImportImageTasksOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeImportSnapshotTasks = "DescribeImportSnapshotTasks" - -// DescribeImportSnapshotTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImportSnapshotTasks operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeImportSnapshotTasks for more information on using the DescribeImportSnapshotTasks -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeImportSnapshotTasksRequest method. -// req, resp := client.DescribeImportSnapshotTasksRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasks -func (c *EC2) DescribeImportSnapshotTasksRequest(input *DescribeImportSnapshotTasksInput) (req *request.Request, output *DescribeImportSnapshotTasksOutput) { - op := &request.Operation{ - Name: opDescribeImportSnapshotTasks, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeImportSnapshotTasksInput{} - } - - output = &DescribeImportSnapshotTasksOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeImportSnapshotTasks API operation for Amazon Elastic Compute Cloud. -// -// Describes your import snapshot tasks. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImportSnapshotTasks for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasks -func (c *EC2) DescribeImportSnapshotTasks(input *DescribeImportSnapshotTasksInput) (*DescribeImportSnapshotTasksOutput, error) { - req, out := c.DescribeImportSnapshotTasksRequest(input) - return out, req.Send() -} - -// DescribeImportSnapshotTasksWithContext is the same as DescribeImportSnapshotTasks with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeImportSnapshotTasks for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeImportSnapshotTasksWithContext(ctx aws.Context, input *DescribeImportSnapshotTasksInput, opts ...request.Option) (*DescribeImportSnapshotTasksOutput, error) { - req, out := c.DescribeImportSnapshotTasksRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeImportSnapshotTasksPages iterates over the pages of a DescribeImportSnapshotTasks operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeImportSnapshotTasks method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeImportSnapshotTasks operation. -// pageNum := 0 -// err := client.DescribeImportSnapshotTasksPages(params, -// func(page *ec2.DescribeImportSnapshotTasksOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeImportSnapshotTasksPages(input *DescribeImportSnapshotTasksInput, fn func(*DescribeImportSnapshotTasksOutput, bool) bool) error { - return c.DescribeImportSnapshotTasksPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeImportSnapshotTasksPagesWithContext same as DescribeImportSnapshotTasksPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeImportSnapshotTasksPagesWithContext(ctx aws.Context, input *DescribeImportSnapshotTasksInput, fn func(*DescribeImportSnapshotTasksOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeImportSnapshotTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeImportSnapshotTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeImportSnapshotTasksOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeInstanceAttribute = "DescribeInstanceAttribute" - -// DescribeInstanceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInstanceAttribute for more information on using the DescribeInstanceAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInstanceAttributeRequest method. -// req, resp := client.DescribeInstanceAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttribute -func (c *EC2) DescribeInstanceAttributeRequest(input *DescribeInstanceAttributeInput) (req *request.Request, output *DescribeInstanceAttributeOutput) { - op := &request.Operation{ - Name: opDescribeInstanceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeInstanceAttributeInput{} - } - - output = &DescribeInstanceAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInstanceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified instance. You can specify -// only one attribute at a time. Valid attribute values are: instanceType | -// kernel | ramdisk | userData | disableApiTermination | instanceInitiatedShutdownBehavior -// | rootDeviceName | blockDeviceMapping | productCodes | sourceDestCheck | -// groupSet | ebsOptimized | sriovNetSupport -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttribute -func (c *EC2) DescribeInstanceAttribute(input *DescribeInstanceAttributeInput) (*DescribeInstanceAttributeOutput, error) { - req, out := c.DescribeInstanceAttributeRequest(input) - return out, req.Send() -} - -// DescribeInstanceAttributeWithContext is the same as DescribeInstanceAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInstanceAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceAttributeWithContext(ctx aws.Context, input *DescribeInstanceAttributeInput, opts ...request.Option) (*DescribeInstanceAttributeOutput, error) { - req, out := c.DescribeInstanceAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeInstanceCreditSpecifications = "DescribeInstanceCreditSpecifications" - -// DescribeInstanceCreditSpecificationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceCreditSpecifications operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInstanceCreditSpecifications for more information on using the DescribeInstanceCreditSpecifications -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInstanceCreditSpecificationsRequest method. -// req, resp := client.DescribeInstanceCreditSpecificationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceCreditSpecifications -func (c *EC2) DescribeInstanceCreditSpecificationsRequest(input *DescribeInstanceCreditSpecificationsInput) (req *request.Request, output *DescribeInstanceCreditSpecificationsOutput) { - op := &request.Operation{ - Name: opDescribeInstanceCreditSpecifications, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeInstanceCreditSpecificationsInput{} - } - - output = &DescribeInstanceCreditSpecificationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInstanceCreditSpecifications API operation for Amazon Elastic Compute Cloud. -// -// Describes the credit option for CPU usage of the specified T2 or T3 instances. -// The credit options are standard and unlimited. -// -// If you do not specify an instance ID, Amazon EC2 returns T2 and T3 instances -// with the unlimited credit option, as well as instances that were previously -// configured as T2 or T3 with the unlimited credit option. For example, if -// you resize a T2 instance, while it is configured as unlimited, to an M4 instance, -// Amazon EC2 returns the M4 instance. -// -// If you specify one or more instance IDs, Amazon EC2 returns the credit option -// (standard or unlimited) of those instances. If you specify an instance ID -// that is not valid, such as an instance that is not a T2 or T3 instance, an -// error is returned. -// -// Recently terminated instances might appear in the returned results. This -// interval is usually less than one hour. -// -// If an Availability Zone is experiencing a service disruption and you specify -// instance IDs in the affected zone, or do not specify any instance IDs at -// all, the call fails. If you specify only instance IDs in an unaffected zone, -// the call works normally. -// -// For more information, see Burstable Performance Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceCreditSpecifications for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceCreditSpecifications -func (c *EC2) DescribeInstanceCreditSpecifications(input *DescribeInstanceCreditSpecificationsInput) (*DescribeInstanceCreditSpecificationsOutput, error) { - req, out := c.DescribeInstanceCreditSpecificationsRequest(input) - return out, req.Send() -} - -// DescribeInstanceCreditSpecificationsWithContext is the same as DescribeInstanceCreditSpecifications with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInstanceCreditSpecifications for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceCreditSpecificationsWithContext(ctx aws.Context, input *DescribeInstanceCreditSpecificationsInput, opts ...request.Option) (*DescribeInstanceCreditSpecificationsOutput, error) { - req, out := c.DescribeInstanceCreditSpecificationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeInstanceCreditSpecificationsPages iterates over the pages of a DescribeInstanceCreditSpecifications operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeInstanceCreditSpecifications method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeInstanceCreditSpecifications operation. -// pageNum := 0 -// err := client.DescribeInstanceCreditSpecificationsPages(params, -// func(page *ec2.DescribeInstanceCreditSpecificationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeInstanceCreditSpecificationsPages(input *DescribeInstanceCreditSpecificationsInput, fn func(*DescribeInstanceCreditSpecificationsOutput, bool) bool) error { - return c.DescribeInstanceCreditSpecificationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeInstanceCreditSpecificationsPagesWithContext same as DescribeInstanceCreditSpecificationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceCreditSpecificationsPagesWithContext(ctx aws.Context, input *DescribeInstanceCreditSpecificationsInput, fn func(*DescribeInstanceCreditSpecificationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeInstanceCreditSpecificationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstanceCreditSpecificationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeInstanceCreditSpecificationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeInstanceStatus = "DescribeInstanceStatus" - -// DescribeInstanceStatusRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceStatus operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInstanceStatus for more information on using the DescribeInstanceStatus -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInstanceStatusRequest method. -// req, resp := client.DescribeInstanceStatusRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatus -func (c *EC2) DescribeInstanceStatusRequest(input *DescribeInstanceStatusInput) (req *request.Request, output *DescribeInstanceStatusOutput) { - op := &request.Operation{ - Name: opDescribeInstanceStatus, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeInstanceStatusInput{} - } - - output = &DescribeInstanceStatusOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInstanceStatus API operation for Amazon Elastic Compute Cloud. -// -// Describes the status of the specified instances or all of your instances. -// By default, only running instances are described, unless you specifically -// indicate to return the status of all instances. -// -// Instance status includes the following components: -// -// * Status checks - Amazon EC2 performs status checks on running EC2 instances -// to identify hardware and software issues. For more information, see Status -// Checks for Your Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html) -// and Troubleshooting Instances with Failed Status Checks (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// * Scheduled events - Amazon EC2 can schedule events (such as reboot, stop, -// or terminate) for your instances related to hardware issues, software -// updates, or system maintenance. For more information, see Scheduled Events -// for Your Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// * Instance state - You can manage your instances from the moment you launch -// them through their termination. For more information, see Instance Lifecycle -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceStatus for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatus -func (c *EC2) DescribeInstanceStatus(input *DescribeInstanceStatusInput) (*DescribeInstanceStatusOutput, error) { - req, out := c.DescribeInstanceStatusRequest(input) - return out, req.Send() -} - -// DescribeInstanceStatusWithContext is the same as DescribeInstanceStatus with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInstanceStatus for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceStatusWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, opts ...request.Option) (*DescribeInstanceStatusOutput, error) { - req, out := c.DescribeInstanceStatusRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeInstanceStatusPages iterates over the pages of a DescribeInstanceStatus operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeInstanceStatus method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeInstanceStatus operation. -// pageNum := 0 -// err := client.DescribeInstanceStatusPages(params, -// func(page *ec2.DescribeInstanceStatusOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeInstanceStatusPages(input *DescribeInstanceStatusInput, fn func(*DescribeInstanceStatusOutput, bool) bool) error { - return c.DescribeInstanceStatusPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeInstanceStatusPagesWithContext same as DescribeInstanceStatusPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceStatusPagesWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, fn func(*DescribeInstanceStatusOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeInstanceStatusInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstanceStatusRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeInstanceStatusOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeInstanceTypeOfferings = "DescribeInstanceTypeOfferings" - -// DescribeInstanceTypeOfferingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceTypeOfferings operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInstanceTypeOfferings for more information on using the DescribeInstanceTypeOfferings -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInstanceTypeOfferingsRequest method. -// req, resp := client.DescribeInstanceTypeOfferingsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypeOfferings -func (c *EC2) DescribeInstanceTypeOfferingsRequest(input *DescribeInstanceTypeOfferingsInput) (req *request.Request, output *DescribeInstanceTypeOfferingsOutput) { - op := &request.Operation{ - Name: opDescribeInstanceTypeOfferings, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeInstanceTypeOfferingsInput{} - } - - output = &DescribeInstanceTypeOfferingsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInstanceTypeOfferings API operation for Amazon Elastic Compute Cloud. -// -// Returns a list of all instance types offered. The results can be filtered -// by location (Region or Availability Zone). If no location is specified, the -// instance types offered in the current Region are returned. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceTypeOfferings for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypeOfferings -func (c *EC2) DescribeInstanceTypeOfferings(input *DescribeInstanceTypeOfferingsInput) (*DescribeInstanceTypeOfferingsOutput, error) { - req, out := c.DescribeInstanceTypeOfferingsRequest(input) - return out, req.Send() -} - -// DescribeInstanceTypeOfferingsWithContext is the same as DescribeInstanceTypeOfferings with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInstanceTypeOfferings for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceTypeOfferingsWithContext(ctx aws.Context, input *DescribeInstanceTypeOfferingsInput, opts ...request.Option) (*DescribeInstanceTypeOfferingsOutput, error) { - req, out := c.DescribeInstanceTypeOfferingsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeInstanceTypes = "DescribeInstanceTypes" - -// DescribeInstanceTypesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceTypes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInstanceTypes for more information on using the DescribeInstanceTypes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInstanceTypesRequest method. -// req, resp := client.DescribeInstanceTypesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypes -func (c *EC2) DescribeInstanceTypesRequest(input *DescribeInstanceTypesInput) (req *request.Request, output *DescribeInstanceTypesOutput) { - op := &request.Operation{ - Name: opDescribeInstanceTypes, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeInstanceTypesInput{} - } - - output = &DescribeInstanceTypesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInstanceTypes API operation for Amazon Elastic Compute Cloud. -// -// Returns a list of all instance types offered in your current AWS Region. -// The results can be filtered by the attributes of the instance types. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceTypes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypes -func (c *EC2) DescribeInstanceTypes(input *DescribeInstanceTypesInput) (*DescribeInstanceTypesOutput, error) { - req, out := c.DescribeInstanceTypesRequest(input) - return out, req.Send() -} - -// DescribeInstanceTypesWithContext is the same as DescribeInstanceTypes with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInstanceTypes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstanceTypesWithContext(ctx aws.Context, input *DescribeInstanceTypesInput, opts ...request.Option) (*DescribeInstanceTypesOutput, error) { - req, out := c.DescribeInstanceTypesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeInstances = "DescribeInstances" - -// DescribeInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInstances for more information on using the DescribeInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInstancesRequest method. -// req, resp := client.DescribeInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstances -func (c *EC2) DescribeInstancesRequest(input *DescribeInstancesInput) (req *request.Request, output *DescribeInstancesOutput) { - op := &request.Operation{ - Name: opDescribeInstances, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeInstancesInput{} - } - - output = &DescribeInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified instances or all of AWS account's instances. -// -// If you specify one or more instance IDs, Amazon EC2 returns information for -// those instances. If you do not specify instance IDs, Amazon EC2 returns information -// for all relevant instances. If you specify an instance ID that is not valid, -// an error is returned. If you specify an instance that you do not own, it -// is not included in the returned results. -// -// Recently terminated instances might appear in the returned results. This -// interval is usually less than one hour. -// -// If you describe instances in the rare case where an Availability Zone is -// experiencing a service disruption and you specify instance IDs that are in -// the affected zone, or do not specify any instance IDs at all, the call fails. -// If you describe instances and specify only instance IDs that are in an unaffected -// zone, the call works normally. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstances -func (c *EC2) DescribeInstances(input *DescribeInstancesInput) (*DescribeInstancesOutput, error) { - req, out := c.DescribeInstancesRequest(input) - return out, req.Send() -} - -// DescribeInstancesWithContext is the same as DescribeInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstancesWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.Option) (*DescribeInstancesOutput, error) { - req, out := c.DescribeInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeInstancesPages iterates over the pages of a DescribeInstances operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeInstances method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeInstances operation. -// pageNum := 0 -// err := client.DescribeInstancesPages(params, -// func(page *ec2.DescribeInstancesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeInstancesPages(input *DescribeInstancesInput, fn func(*DescribeInstancesOutput, bool) bool) error { - return c.DescribeInstancesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeInstancesPagesWithContext same as DescribeInstancesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInstancesPagesWithContext(ctx aws.Context, input *DescribeInstancesInput, fn func(*DescribeInstancesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeInstancesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeInternetGateways = "DescribeInternetGateways" - -// DescribeInternetGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInternetGateways operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeInternetGateways for more information on using the DescribeInternetGateways -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeInternetGatewaysRequest method. -// req, resp := client.DescribeInternetGatewaysRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGateways -func (c *EC2) DescribeInternetGatewaysRequest(input *DescribeInternetGatewaysInput) (req *request.Request, output *DescribeInternetGatewaysOutput) { - op := &request.Operation{ - Name: opDescribeInternetGateways, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeInternetGatewaysInput{} - } - - output = &DescribeInternetGatewaysOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeInternetGateways API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your internet gateways. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInternetGateways for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGateways -func (c *EC2) DescribeInternetGateways(input *DescribeInternetGatewaysInput) (*DescribeInternetGatewaysOutput, error) { - req, out := c.DescribeInternetGatewaysRequest(input) - return out, req.Send() -} - -// DescribeInternetGatewaysWithContext is the same as DescribeInternetGateways with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeInternetGateways for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInternetGatewaysWithContext(ctx aws.Context, input *DescribeInternetGatewaysInput, opts ...request.Option) (*DescribeInternetGatewaysOutput, error) { - req, out := c.DescribeInternetGatewaysRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeInternetGatewaysPages iterates over the pages of a DescribeInternetGateways operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeInternetGateways method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeInternetGateways operation. -// pageNum := 0 -// err := client.DescribeInternetGatewaysPages(params, -// func(page *ec2.DescribeInternetGatewaysOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeInternetGatewaysPages(input *DescribeInternetGatewaysInput, fn func(*DescribeInternetGatewaysOutput, bool) bool) error { - return c.DescribeInternetGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeInternetGatewaysPagesWithContext same as DescribeInternetGatewaysPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeInternetGatewaysPagesWithContext(ctx aws.Context, input *DescribeInternetGatewaysInput, fn func(*DescribeInternetGatewaysOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeInternetGatewaysInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInternetGatewaysRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeInternetGatewaysOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeKeyPairs = "DescribeKeyPairs" - -// DescribeKeyPairsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeKeyPairs operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeKeyPairs for more information on using the DescribeKeyPairs -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeKeyPairsRequest method. -// req, resp := client.DescribeKeyPairsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairs -func (c *EC2) DescribeKeyPairsRequest(input *DescribeKeyPairsInput) (req *request.Request, output *DescribeKeyPairsOutput) { - op := &request.Operation{ - Name: opDescribeKeyPairs, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeKeyPairsInput{} - } - - output = &DescribeKeyPairsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeKeyPairs API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified key pairs or all of your key pairs. -// -// For more information about key pairs, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeKeyPairs for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairs -func (c *EC2) DescribeKeyPairs(input *DescribeKeyPairsInput) (*DescribeKeyPairsOutput, error) { - req, out := c.DescribeKeyPairsRequest(input) - return out, req.Send() -} - -// DescribeKeyPairsWithContext is the same as DescribeKeyPairs with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeKeyPairs for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeKeyPairsWithContext(ctx aws.Context, input *DescribeKeyPairsInput, opts ...request.Option) (*DescribeKeyPairsOutput, error) { - req, out := c.DescribeKeyPairsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeLaunchTemplateVersions = "DescribeLaunchTemplateVersions" - -// DescribeLaunchTemplateVersionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeLaunchTemplateVersions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeLaunchTemplateVersions for more information on using the DescribeLaunchTemplateVersions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeLaunchTemplateVersionsRequest method. -// req, resp := client.DescribeLaunchTemplateVersionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplateVersions -func (c *EC2) DescribeLaunchTemplateVersionsRequest(input *DescribeLaunchTemplateVersionsInput) (req *request.Request, output *DescribeLaunchTemplateVersionsOutput) { - op := &request.Operation{ - Name: opDescribeLaunchTemplateVersions, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeLaunchTemplateVersionsInput{} - } - - output = &DescribeLaunchTemplateVersionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeLaunchTemplateVersions API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more versions of a specified launch template. You can describe -// all versions, individual versions, or a range of versions. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeLaunchTemplateVersions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplateVersions -func (c *EC2) DescribeLaunchTemplateVersions(input *DescribeLaunchTemplateVersionsInput) (*DescribeLaunchTemplateVersionsOutput, error) { - req, out := c.DescribeLaunchTemplateVersionsRequest(input) - return out, req.Send() -} - -// DescribeLaunchTemplateVersionsWithContext is the same as DescribeLaunchTemplateVersions with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeLaunchTemplateVersions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeLaunchTemplateVersionsWithContext(ctx aws.Context, input *DescribeLaunchTemplateVersionsInput, opts ...request.Option) (*DescribeLaunchTemplateVersionsOutput, error) { - req, out := c.DescribeLaunchTemplateVersionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeLaunchTemplateVersionsPages iterates over the pages of a DescribeLaunchTemplateVersions operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeLaunchTemplateVersions method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeLaunchTemplateVersions operation. -// pageNum := 0 -// err := client.DescribeLaunchTemplateVersionsPages(params, -// func(page *ec2.DescribeLaunchTemplateVersionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeLaunchTemplateVersionsPages(input *DescribeLaunchTemplateVersionsInput, fn func(*DescribeLaunchTemplateVersionsOutput, bool) bool) error { - return c.DescribeLaunchTemplateVersionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeLaunchTemplateVersionsPagesWithContext same as DescribeLaunchTemplateVersionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeLaunchTemplateVersionsPagesWithContext(ctx aws.Context, input *DescribeLaunchTemplateVersionsInput, fn func(*DescribeLaunchTemplateVersionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeLaunchTemplateVersionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeLaunchTemplateVersionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeLaunchTemplateVersionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeLaunchTemplates = "DescribeLaunchTemplates" - -// DescribeLaunchTemplatesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeLaunchTemplates operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeLaunchTemplates for more information on using the DescribeLaunchTemplates -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeLaunchTemplatesRequest method. -// req, resp := client.DescribeLaunchTemplatesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplates -func (c *EC2) DescribeLaunchTemplatesRequest(input *DescribeLaunchTemplatesInput) (req *request.Request, output *DescribeLaunchTemplatesOutput) { - op := &request.Operation{ - Name: opDescribeLaunchTemplates, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeLaunchTemplatesInput{} - } - - output = &DescribeLaunchTemplatesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeLaunchTemplates API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more launch templates. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeLaunchTemplates for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplates -func (c *EC2) DescribeLaunchTemplates(input *DescribeLaunchTemplatesInput) (*DescribeLaunchTemplatesOutput, error) { - req, out := c.DescribeLaunchTemplatesRequest(input) - return out, req.Send() -} - -// DescribeLaunchTemplatesWithContext is the same as DescribeLaunchTemplates with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeLaunchTemplates for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeLaunchTemplatesWithContext(ctx aws.Context, input *DescribeLaunchTemplatesInput, opts ...request.Option) (*DescribeLaunchTemplatesOutput, error) { - req, out := c.DescribeLaunchTemplatesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeLaunchTemplatesPages iterates over the pages of a DescribeLaunchTemplates operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeLaunchTemplates method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeLaunchTemplates operation. -// pageNum := 0 -// err := client.DescribeLaunchTemplatesPages(params, -// func(page *ec2.DescribeLaunchTemplatesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeLaunchTemplatesPages(input *DescribeLaunchTemplatesInput, fn func(*DescribeLaunchTemplatesOutput, bool) bool) error { - return c.DescribeLaunchTemplatesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeLaunchTemplatesPagesWithContext same as DescribeLaunchTemplatesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeLaunchTemplatesPagesWithContext(ctx aws.Context, input *DescribeLaunchTemplatesInput, fn func(*DescribeLaunchTemplatesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeLaunchTemplatesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeLaunchTemplatesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeLaunchTemplatesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeMovingAddresses = "DescribeMovingAddresses" - -// DescribeMovingAddressesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeMovingAddresses operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeMovingAddresses for more information on using the DescribeMovingAddresses -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeMovingAddressesRequest method. -// req, resp := client.DescribeMovingAddressesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddresses -func (c *EC2) DescribeMovingAddressesRequest(input *DescribeMovingAddressesInput) (req *request.Request, output *DescribeMovingAddressesOutput) { - op := &request.Operation{ - Name: opDescribeMovingAddresses, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeMovingAddressesInput{} - } - - output = &DescribeMovingAddressesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeMovingAddresses API operation for Amazon Elastic Compute Cloud. -// -// Describes your Elastic IP addresses that are being moved to the EC2-VPC platform, -// or that are being restored to the EC2-Classic platform. This request does -// not return information about any other Elastic IP addresses in your account. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeMovingAddresses for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddresses -func (c *EC2) DescribeMovingAddresses(input *DescribeMovingAddressesInput) (*DescribeMovingAddressesOutput, error) { - req, out := c.DescribeMovingAddressesRequest(input) - return out, req.Send() -} - -// DescribeMovingAddressesWithContext is the same as DescribeMovingAddresses with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeMovingAddresses for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeMovingAddressesWithContext(ctx aws.Context, input *DescribeMovingAddressesInput, opts ...request.Option) (*DescribeMovingAddressesOutput, error) { - req, out := c.DescribeMovingAddressesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeMovingAddressesPages iterates over the pages of a DescribeMovingAddresses operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeMovingAddresses method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeMovingAddresses operation. -// pageNum := 0 -// err := client.DescribeMovingAddressesPages(params, -// func(page *ec2.DescribeMovingAddressesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeMovingAddressesPages(input *DescribeMovingAddressesInput, fn func(*DescribeMovingAddressesOutput, bool) bool) error { - return c.DescribeMovingAddressesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeMovingAddressesPagesWithContext same as DescribeMovingAddressesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeMovingAddressesPagesWithContext(ctx aws.Context, input *DescribeMovingAddressesInput, fn func(*DescribeMovingAddressesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeMovingAddressesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeMovingAddressesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeMovingAddressesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeNatGateways = "DescribeNatGateways" - -// DescribeNatGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNatGateways operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeNatGateways for more information on using the DescribeNatGateways -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeNatGatewaysRequest method. -// req, resp := client.DescribeNatGatewaysRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGateways -func (c *EC2) DescribeNatGatewaysRequest(input *DescribeNatGatewaysInput) (req *request.Request, output *DescribeNatGatewaysOutput) { - op := &request.Operation{ - Name: opDescribeNatGateways, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeNatGatewaysInput{} - } - - output = &DescribeNatGatewaysOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeNatGateways API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your NAT gateways. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNatGateways for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGateways -func (c *EC2) DescribeNatGateways(input *DescribeNatGatewaysInput) (*DescribeNatGatewaysOutput, error) { - req, out := c.DescribeNatGatewaysRequest(input) - return out, req.Send() -} - -// DescribeNatGatewaysWithContext is the same as DescribeNatGateways with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeNatGateways for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNatGatewaysWithContext(ctx aws.Context, input *DescribeNatGatewaysInput, opts ...request.Option) (*DescribeNatGatewaysOutput, error) { - req, out := c.DescribeNatGatewaysRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeNatGatewaysPages iterates over the pages of a DescribeNatGateways operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeNatGateways method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeNatGateways operation. -// pageNum := 0 -// err := client.DescribeNatGatewaysPages(params, -// func(page *ec2.DescribeNatGatewaysOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeNatGatewaysPages(input *DescribeNatGatewaysInput, fn func(*DescribeNatGatewaysOutput, bool) bool) error { - return c.DescribeNatGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeNatGatewaysPagesWithContext same as DescribeNatGatewaysPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNatGatewaysPagesWithContext(ctx aws.Context, input *DescribeNatGatewaysInput, fn func(*DescribeNatGatewaysOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeNatGatewaysInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeNatGatewaysRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeNatGatewaysOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeNetworkAcls = "DescribeNetworkAcls" - -// DescribeNetworkAclsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkAcls operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeNetworkAcls for more information on using the DescribeNetworkAcls -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeNetworkAclsRequest method. -// req, resp := client.DescribeNetworkAclsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAcls -func (c *EC2) DescribeNetworkAclsRequest(input *DescribeNetworkAclsInput) (req *request.Request, output *DescribeNetworkAclsOutput) { - op := &request.Operation{ - Name: opDescribeNetworkAcls, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeNetworkAclsInput{} - } - - output = &DescribeNetworkAclsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeNetworkAcls API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your network ACLs. -// -// For more information, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkAcls for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAcls -func (c *EC2) DescribeNetworkAcls(input *DescribeNetworkAclsInput) (*DescribeNetworkAclsOutput, error) { - req, out := c.DescribeNetworkAclsRequest(input) - return out, req.Send() -} - -// DescribeNetworkAclsWithContext is the same as DescribeNetworkAcls with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeNetworkAcls for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkAclsWithContext(ctx aws.Context, input *DescribeNetworkAclsInput, opts ...request.Option) (*DescribeNetworkAclsOutput, error) { - req, out := c.DescribeNetworkAclsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeNetworkAclsPages iterates over the pages of a DescribeNetworkAcls operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeNetworkAcls method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeNetworkAcls operation. -// pageNum := 0 -// err := client.DescribeNetworkAclsPages(params, -// func(page *ec2.DescribeNetworkAclsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeNetworkAclsPages(input *DescribeNetworkAclsInput, fn func(*DescribeNetworkAclsOutput, bool) bool) error { - return c.DescribeNetworkAclsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeNetworkAclsPagesWithContext same as DescribeNetworkAclsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkAclsPagesWithContext(ctx aws.Context, input *DescribeNetworkAclsInput, fn func(*DescribeNetworkAclsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeNetworkAclsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeNetworkAclsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeNetworkAclsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeNetworkInterfaceAttribute = "DescribeNetworkInterfaceAttribute" - -// DescribeNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkInterfaceAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeNetworkInterfaceAttribute for more information on using the DescribeNetworkInterfaceAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeNetworkInterfaceAttributeRequest method. -// req, resp := client.DescribeNetworkInterfaceAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttribute -func (c *EC2) DescribeNetworkInterfaceAttributeRequest(input *DescribeNetworkInterfaceAttributeInput) (req *request.Request, output *DescribeNetworkInterfaceAttributeOutput) { - op := &request.Operation{ - Name: opDescribeNetworkInterfaceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeNetworkInterfaceAttributeInput{} - } - - output = &DescribeNetworkInterfaceAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes a network interface attribute. You can specify only one attribute -// at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkInterfaceAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttribute -func (c *EC2) DescribeNetworkInterfaceAttribute(input *DescribeNetworkInterfaceAttributeInput) (*DescribeNetworkInterfaceAttributeOutput, error) { - req, out := c.DescribeNetworkInterfaceAttributeRequest(input) - return out, req.Send() -} - -// DescribeNetworkInterfaceAttributeWithContext is the same as DescribeNetworkInterfaceAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeNetworkInterfaceAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkInterfaceAttributeWithContext(ctx aws.Context, input *DescribeNetworkInterfaceAttributeInput, opts ...request.Option) (*DescribeNetworkInterfaceAttributeOutput, error) { - req, out := c.DescribeNetworkInterfaceAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeNetworkInterfacePermissions = "DescribeNetworkInterfacePermissions" - -// DescribeNetworkInterfacePermissionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkInterfacePermissions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeNetworkInterfacePermissions for more information on using the DescribeNetworkInterfacePermissions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeNetworkInterfacePermissionsRequest method. -// req, resp := client.DescribeNetworkInterfacePermissionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacePermissions -func (c *EC2) DescribeNetworkInterfacePermissionsRequest(input *DescribeNetworkInterfacePermissionsInput) (req *request.Request, output *DescribeNetworkInterfacePermissionsOutput) { - op := &request.Operation{ - Name: opDescribeNetworkInterfacePermissions, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeNetworkInterfacePermissionsInput{} - } - - output = &DescribeNetworkInterfacePermissionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeNetworkInterfacePermissions API operation for Amazon Elastic Compute Cloud. -// -// Describes the permissions for your network interfaces. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkInterfacePermissions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacePermissions -func (c *EC2) DescribeNetworkInterfacePermissions(input *DescribeNetworkInterfacePermissionsInput) (*DescribeNetworkInterfacePermissionsOutput, error) { - req, out := c.DescribeNetworkInterfacePermissionsRequest(input) - return out, req.Send() -} - -// DescribeNetworkInterfacePermissionsWithContext is the same as DescribeNetworkInterfacePermissions with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeNetworkInterfacePermissions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkInterfacePermissionsWithContext(ctx aws.Context, input *DescribeNetworkInterfacePermissionsInput, opts ...request.Option) (*DescribeNetworkInterfacePermissionsOutput, error) { - req, out := c.DescribeNetworkInterfacePermissionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeNetworkInterfacePermissionsPages iterates over the pages of a DescribeNetworkInterfacePermissions operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeNetworkInterfacePermissions method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeNetworkInterfacePermissions operation. -// pageNum := 0 -// err := client.DescribeNetworkInterfacePermissionsPages(params, -// func(page *ec2.DescribeNetworkInterfacePermissionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeNetworkInterfacePermissionsPages(input *DescribeNetworkInterfacePermissionsInput, fn func(*DescribeNetworkInterfacePermissionsOutput, bool) bool) error { - return c.DescribeNetworkInterfacePermissionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeNetworkInterfacePermissionsPagesWithContext same as DescribeNetworkInterfacePermissionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkInterfacePermissionsPagesWithContext(ctx aws.Context, input *DescribeNetworkInterfacePermissionsInput, fn func(*DescribeNetworkInterfacePermissionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeNetworkInterfacePermissionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeNetworkInterfacePermissionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeNetworkInterfacePermissionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeNetworkInterfaces = "DescribeNetworkInterfaces" - -// DescribeNetworkInterfacesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkInterfaces operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeNetworkInterfaces for more information on using the DescribeNetworkInterfaces -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeNetworkInterfacesRequest method. -// req, resp := client.DescribeNetworkInterfacesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaces -func (c *EC2) DescribeNetworkInterfacesRequest(input *DescribeNetworkInterfacesInput) (req *request.Request, output *DescribeNetworkInterfacesOutput) { - op := &request.Operation{ - Name: opDescribeNetworkInterfaces, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeNetworkInterfacesInput{} - } - - output = &DescribeNetworkInterfacesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeNetworkInterfaces API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your network interfaces. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkInterfaces for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaces -func (c *EC2) DescribeNetworkInterfaces(input *DescribeNetworkInterfacesInput) (*DescribeNetworkInterfacesOutput, error) { - req, out := c.DescribeNetworkInterfacesRequest(input) - return out, req.Send() -} - -// DescribeNetworkInterfacesWithContext is the same as DescribeNetworkInterfaces with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeNetworkInterfaces for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkInterfacesWithContext(ctx aws.Context, input *DescribeNetworkInterfacesInput, opts ...request.Option) (*DescribeNetworkInterfacesOutput, error) { - req, out := c.DescribeNetworkInterfacesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeNetworkInterfacesPages iterates over the pages of a DescribeNetworkInterfaces operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeNetworkInterfaces method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeNetworkInterfaces operation. -// pageNum := 0 -// err := client.DescribeNetworkInterfacesPages(params, -// func(page *ec2.DescribeNetworkInterfacesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeNetworkInterfacesPages(input *DescribeNetworkInterfacesInput, fn func(*DescribeNetworkInterfacesOutput, bool) bool) error { - return c.DescribeNetworkInterfacesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeNetworkInterfacesPagesWithContext same as DescribeNetworkInterfacesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeNetworkInterfacesPagesWithContext(ctx aws.Context, input *DescribeNetworkInterfacesInput, fn func(*DescribeNetworkInterfacesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeNetworkInterfacesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeNetworkInterfacesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeNetworkInterfacesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribePlacementGroups = "DescribePlacementGroups" - -// DescribePlacementGroupsRequest generates a "aws/request.Request" representing the -// client's request for the DescribePlacementGroups operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribePlacementGroups for more information on using the DescribePlacementGroups -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribePlacementGroupsRequest method. -// req, resp := client.DescribePlacementGroupsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroups -func (c *EC2) DescribePlacementGroupsRequest(input *DescribePlacementGroupsInput) (req *request.Request, output *DescribePlacementGroupsOutput) { - op := &request.Operation{ - Name: opDescribePlacementGroups, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribePlacementGroupsInput{} - } - - output = &DescribePlacementGroupsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribePlacementGroups API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified placement groups or all of your placement groups. -// For more information, see Placement Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribePlacementGroups for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroups -func (c *EC2) DescribePlacementGroups(input *DescribePlacementGroupsInput) (*DescribePlacementGroupsOutput, error) { - req, out := c.DescribePlacementGroupsRequest(input) - return out, req.Send() -} - -// DescribePlacementGroupsWithContext is the same as DescribePlacementGroups with the addition of -// the ability to pass a context and additional request options. -// -// See DescribePlacementGroups for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePlacementGroupsWithContext(ctx aws.Context, input *DescribePlacementGroupsInput, opts ...request.Option) (*DescribePlacementGroupsOutput, error) { - req, out := c.DescribePlacementGroupsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribePrefixLists = "DescribePrefixLists" - -// DescribePrefixListsRequest generates a "aws/request.Request" representing the -// client's request for the DescribePrefixLists operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribePrefixLists for more information on using the DescribePrefixLists -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribePrefixListsRequest method. -// req, resp := client.DescribePrefixListsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixLists -func (c *EC2) DescribePrefixListsRequest(input *DescribePrefixListsInput) (req *request.Request, output *DescribePrefixListsOutput) { - op := &request.Operation{ - Name: opDescribePrefixLists, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribePrefixListsInput{} - } - - output = &DescribePrefixListsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribePrefixLists API operation for Amazon Elastic Compute Cloud. -// -// Describes available AWS services in a prefix list format, which includes -// the prefix list name and prefix list ID of the service and the IP address -// range for the service. A prefix list ID is required for creating an outbound -// security group rule that allows traffic from a VPC to access an AWS service -// through a gateway VPC endpoint. Currently, the services that support this -// action are Amazon S3 and Amazon DynamoDB. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribePrefixLists for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixLists -func (c *EC2) DescribePrefixLists(input *DescribePrefixListsInput) (*DescribePrefixListsOutput, error) { - req, out := c.DescribePrefixListsRequest(input) - return out, req.Send() -} - -// DescribePrefixListsWithContext is the same as DescribePrefixLists with the addition of -// the ability to pass a context and additional request options. -// -// See DescribePrefixLists for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePrefixListsWithContext(ctx aws.Context, input *DescribePrefixListsInput, opts ...request.Option) (*DescribePrefixListsOutput, error) { - req, out := c.DescribePrefixListsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribePrefixListsPages iterates over the pages of a DescribePrefixLists operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribePrefixLists method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribePrefixLists operation. -// pageNum := 0 -// err := client.DescribePrefixListsPages(params, -// func(page *ec2.DescribePrefixListsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribePrefixListsPages(input *DescribePrefixListsInput, fn func(*DescribePrefixListsOutput, bool) bool) error { - return c.DescribePrefixListsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribePrefixListsPagesWithContext same as DescribePrefixListsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePrefixListsPagesWithContext(ctx aws.Context, input *DescribePrefixListsInput, fn func(*DescribePrefixListsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribePrefixListsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribePrefixListsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribePrefixListsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribePrincipalIdFormat = "DescribePrincipalIdFormat" - -// DescribePrincipalIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the DescribePrincipalIdFormat operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribePrincipalIdFormat for more information on using the DescribePrincipalIdFormat -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribePrincipalIdFormatRequest method. -// req, resp := client.DescribePrincipalIdFormatRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrincipalIdFormat -func (c *EC2) DescribePrincipalIdFormatRequest(input *DescribePrincipalIdFormatInput) (req *request.Request, output *DescribePrincipalIdFormatOutput) { - op := &request.Operation{ - Name: opDescribePrincipalIdFormat, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribePrincipalIdFormatInput{} - } - - output = &DescribePrincipalIdFormatOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribePrincipalIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Describes the ID format settings for the root user and all IAM roles and -// IAM users that have explicitly specified a longer ID (17-character ID) preference. -// -// By default, all IAM roles and IAM users default to the same ID settings as -// the root user, unless they explicitly override the settings. This request -// is useful for identifying those IAM users and IAM roles that have overridden -// the default ID settings. -// -// The following resource types support longer IDs: bundle | conversion-task -// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association -// | export-task | flow-log | image | import-task | instance | internet-gateway -// | network-acl | network-acl-association | network-interface | network-interface-attachment -// | prefix-list | reservation | route-table | route-table-association | security-group -// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association -// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribePrincipalIdFormat for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrincipalIdFormat -func (c *EC2) DescribePrincipalIdFormat(input *DescribePrincipalIdFormatInput) (*DescribePrincipalIdFormatOutput, error) { - req, out := c.DescribePrincipalIdFormatRequest(input) - return out, req.Send() -} - -// DescribePrincipalIdFormatWithContext is the same as DescribePrincipalIdFormat with the addition of -// the ability to pass a context and additional request options. -// -// See DescribePrincipalIdFormat for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePrincipalIdFormatWithContext(ctx aws.Context, input *DescribePrincipalIdFormatInput, opts ...request.Option) (*DescribePrincipalIdFormatOutput, error) { - req, out := c.DescribePrincipalIdFormatRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribePrincipalIdFormatPages iterates over the pages of a DescribePrincipalIdFormat operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribePrincipalIdFormat method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribePrincipalIdFormat operation. -// pageNum := 0 -// err := client.DescribePrincipalIdFormatPages(params, -// func(page *ec2.DescribePrincipalIdFormatOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribePrincipalIdFormatPages(input *DescribePrincipalIdFormatInput, fn func(*DescribePrincipalIdFormatOutput, bool) bool) error { - return c.DescribePrincipalIdFormatPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribePrincipalIdFormatPagesWithContext same as DescribePrincipalIdFormatPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePrincipalIdFormatPagesWithContext(ctx aws.Context, input *DescribePrincipalIdFormatInput, fn func(*DescribePrincipalIdFormatOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribePrincipalIdFormatInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribePrincipalIdFormatRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribePrincipalIdFormatOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribePublicIpv4Pools = "DescribePublicIpv4Pools" - -// DescribePublicIpv4PoolsRequest generates a "aws/request.Request" representing the -// client's request for the DescribePublicIpv4Pools operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribePublicIpv4Pools for more information on using the DescribePublicIpv4Pools -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribePublicIpv4PoolsRequest method. -// req, resp := client.DescribePublicIpv4PoolsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePublicIpv4Pools -func (c *EC2) DescribePublicIpv4PoolsRequest(input *DescribePublicIpv4PoolsInput) (req *request.Request, output *DescribePublicIpv4PoolsOutput) { - op := &request.Operation{ - Name: opDescribePublicIpv4Pools, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribePublicIpv4PoolsInput{} - } - - output = &DescribePublicIpv4PoolsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribePublicIpv4Pools API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified IPv4 address pools. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribePublicIpv4Pools for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePublicIpv4Pools -func (c *EC2) DescribePublicIpv4Pools(input *DescribePublicIpv4PoolsInput) (*DescribePublicIpv4PoolsOutput, error) { - req, out := c.DescribePublicIpv4PoolsRequest(input) - return out, req.Send() -} - -// DescribePublicIpv4PoolsWithContext is the same as DescribePublicIpv4Pools with the addition of -// the ability to pass a context and additional request options. -// -// See DescribePublicIpv4Pools for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePublicIpv4PoolsWithContext(ctx aws.Context, input *DescribePublicIpv4PoolsInput, opts ...request.Option) (*DescribePublicIpv4PoolsOutput, error) { - req, out := c.DescribePublicIpv4PoolsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribePublicIpv4PoolsPages iterates over the pages of a DescribePublicIpv4Pools operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribePublicIpv4Pools method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribePublicIpv4Pools operation. -// pageNum := 0 -// err := client.DescribePublicIpv4PoolsPages(params, -// func(page *ec2.DescribePublicIpv4PoolsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribePublicIpv4PoolsPages(input *DescribePublicIpv4PoolsInput, fn func(*DescribePublicIpv4PoolsOutput, bool) bool) error { - return c.DescribePublicIpv4PoolsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribePublicIpv4PoolsPagesWithContext same as DescribePublicIpv4PoolsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribePublicIpv4PoolsPagesWithContext(ctx aws.Context, input *DescribePublicIpv4PoolsInput, fn func(*DescribePublicIpv4PoolsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribePublicIpv4PoolsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribePublicIpv4PoolsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribePublicIpv4PoolsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeRegions = "DescribeRegions" - -// DescribeRegionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeRegions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeRegions for more information on using the DescribeRegions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeRegionsRequest method. -// req, resp := client.DescribeRegionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegions -func (c *EC2) DescribeRegionsRequest(input *DescribeRegionsInput) (req *request.Request, output *DescribeRegionsOutput) { - op := &request.Operation{ - Name: opDescribeRegions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeRegionsInput{} - } - - output = &DescribeRegionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeRegions API operation for Amazon Elastic Compute Cloud. -// -// Describes the Regions that are enabled for your account, or all Regions. -// -// For a list of the Regions supported by Amazon EC2, see Regions and Endpoints -// (https://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region). -// -// For information about enabling and disabling Regions for your account, see -// Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) -// in the AWS General Reference. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeRegions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegions -func (c *EC2) DescribeRegions(input *DescribeRegionsInput) (*DescribeRegionsOutput, error) { - req, out := c.DescribeRegionsRequest(input) - return out, req.Send() -} - -// DescribeRegionsWithContext is the same as DescribeRegions with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeRegions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeRegionsWithContext(ctx aws.Context, input *DescribeRegionsInput, opts ...request.Option) (*DescribeRegionsOutput, error) { - req, out := c.DescribeRegionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeReservedInstances = "DescribeReservedInstances" - -// DescribeReservedInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeReservedInstances for more information on using the DescribeReservedInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeReservedInstancesRequest method. -// req, resp := client.DescribeReservedInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstances -func (c *EC2) DescribeReservedInstancesRequest(input *DescribeReservedInstancesInput) (req *request.Request, output *DescribeReservedInstancesOutput) { - op := &request.Operation{ - Name: opDescribeReservedInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeReservedInstancesInput{} - } - - output = &DescribeReservedInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeReservedInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of the Reserved Instances that you purchased. -// -// For more information about Reserved Instances, see Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstances -func (c *EC2) DescribeReservedInstances(input *DescribeReservedInstancesInput) (*DescribeReservedInstancesOutput, error) { - req, out := c.DescribeReservedInstancesRequest(input) - return out, req.Send() -} - -// DescribeReservedInstancesWithContext is the same as DescribeReservedInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeReservedInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeReservedInstancesWithContext(ctx aws.Context, input *DescribeReservedInstancesInput, opts ...request.Option) (*DescribeReservedInstancesOutput, error) { - req, out := c.DescribeReservedInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeReservedInstancesListings = "DescribeReservedInstancesListings" - -// DescribeReservedInstancesListingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstancesListings operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeReservedInstancesListings for more information on using the DescribeReservedInstancesListings -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeReservedInstancesListingsRequest method. -// req, resp := client.DescribeReservedInstancesListingsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListings -func (c *EC2) DescribeReservedInstancesListingsRequest(input *DescribeReservedInstancesListingsInput) (req *request.Request, output *DescribeReservedInstancesListingsOutput) { - op := &request.Operation{ - Name: opDescribeReservedInstancesListings, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeReservedInstancesListingsInput{} - } - - output = &DescribeReservedInstancesListingsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeReservedInstancesListings API operation for Amazon Elastic Compute Cloud. -// -// Describes your account's Reserved Instance listings in the Reserved Instance -// Marketplace. -// -// The Reserved Instance Marketplace matches sellers who want to resell Reserved -// Instance capacity that they no longer need with buyers who want to purchase -// additional capacity. Reserved Instances bought and sold through the Reserved -// Instance Marketplace work like any other Reserved Instances. -// -// As a seller, you choose to list some or all of your Reserved Instances, and -// you specify the upfront price to receive for them. Your Reserved Instances -// are then listed in the Reserved Instance Marketplace and are available for -// purchase. -// -// As a buyer, you specify the configuration of the Reserved Instance to purchase, -// and the Marketplace matches what you're searching for with what's available. -// The Marketplace first sells the lowest priced Reserved Instances to you, -// and continues to sell available Reserved Instance listings to you until your -// demand is met. You are charged based on the total price of all of the listings -// that you purchase. -// -// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstancesListings for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListings -func (c *EC2) DescribeReservedInstancesListings(input *DescribeReservedInstancesListingsInput) (*DescribeReservedInstancesListingsOutput, error) { - req, out := c.DescribeReservedInstancesListingsRequest(input) - return out, req.Send() -} - -// DescribeReservedInstancesListingsWithContext is the same as DescribeReservedInstancesListings with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeReservedInstancesListings for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeReservedInstancesListingsWithContext(ctx aws.Context, input *DescribeReservedInstancesListingsInput, opts ...request.Option) (*DescribeReservedInstancesListingsOutput, error) { - req, out := c.DescribeReservedInstancesListingsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeReservedInstancesModifications = "DescribeReservedInstancesModifications" - -// DescribeReservedInstancesModificationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstancesModifications operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeReservedInstancesModifications for more information on using the DescribeReservedInstancesModifications -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeReservedInstancesModificationsRequest method. -// req, resp := client.DescribeReservedInstancesModificationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModifications -func (c *EC2) DescribeReservedInstancesModificationsRequest(input *DescribeReservedInstancesModificationsInput) (req *request.Request, output *DescribeReservedInstancesModificationsOutput) { - op := &request.Operation{ - Name: opDescribeReservedInstancesModifications, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeReservedInstancesModificationsInput{} - } - - output = &DescribeReservedInstancesModificationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeReservedInstancesModifications API operation for Amazon Elastic Compute Cloud. -// -// Describes the modifications made to your Reserved Instances. If no parameter -// is specified, information about all your Reserved Instances modification -// requests is returned. If a modification ID is specified, only information -// about the specific modification is returned. -// -// For more information, see Modifying Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstancesModifications for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModifications -func (c *EC2) DescribeReservedInstancesModifications(input *DescribeReservedInstancesModificationsInput) (*DescribeReservedInstancesModificationsOutput, error) { - req, out := c.DescribeReservedInstancesModificationsRequest(input) - return out, req.Send() -} - -// DescribeReservedInstancesModificationsWithContext is the same as DescribeReservedInstancesModifications with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeReservedInstancesModifications for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeReservedInstancesModificationsWithContext(ctx aws.Context, input *DescribeReservedInstancesModificationsInput, opts ...request.Option) (*DescribeReservedInstancesModificationsOutput, error) { - req, out := c.DescribeReservedInstancesModificationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeReservedInstancesModificationsPages iterates over the pages of a DescribeReservedInstancesModifications operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeReservedInstancesModifications method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeReservedInstancesModifications operation. -// pageNum := 0 -// err := client.DescribeReservedInstancesModificationsPages(params, -// func(page *ec2.DescribeReservedInstancesModificationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeReservedInstancesModificationsPages(input *DescribeReservedInstancesModificationsInput, fn func(*DescribeReservedInstancesModificationsOutput, bool) bool) error { - return c.DescribeReservedInstancesModificationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeReservedInstancesModificationsPagesWithContext same as DescribeReservedInstancesModificationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeReservedInstancesModificationsPagesWithContext(ctx aws.Context, input *DescribeReservedInstancesModificationsInput, fn func(*DescribeReservedInstancesModificationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeReservedInstancesModificationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeReservedInstancesModificationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeReservedInstancesModificationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeReservedInstancesOfferings = "DescribeReservedInstancesOfferings" - -// DescribeReservedInstancesOfferingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstancesOfferings operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeReservedInstancesOfferings for more information on using the DescribeReservedInstancesOfferings -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeReservedInstancesOfferingsRequest method. -// req, resp := client.DescribeReservedInstancesOfferingsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferings -func (c *EC2) DescribeReservedInstancesOfferingsRequest(input *DescribeReservedInstancesOfferingsInput) (req *request.Request, output *DescribeReservedInstancesOfferingsOutput) { - op := &request.Operation{ - Name: opDescribeReservedInstancesOfferings, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeReservedInstancesOfferingsInput{} - } - - output = &DescribeReservedInstancesOfferingsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeReservedInstancesOfferings API operation for Amazon Elastic Compute Cloud. -// -// Describes Reserved Instance offerings that are available for purchase. With -// Reserved Instances, you purchase the right to launch instances for a period -// of time. During that time period, you do not receive insufficient capacity -// errors, and you pay a lower usage rate than the rate charged for On-Demand -// instances for the actual time used. -// -// If you have listed your own Reserved Instances for sale in the Reserved Instance -// Marketplace, they will be excluded from these results. This is to ensure -// that you do not purchase your own Reserved Instances. -// -// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstancesOfferings for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferings -func (c *EC2) DescribeReservedInstancesOfferings(input *DescribeReservedInstancesOfferingsInput) (*DescribeReservedInstancesOfferingsOutput, error) { - req, out := c.DescribeReservedInstancesOfferingsRequest(input) - return out, req.Send() -} - -// DescribeReservedInstancesOfferingsWithContext is the same as DescribeReservedInstancesOfferings with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeReservedInstancesOfferings for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeReservedInstancesOfferingsWithContext(ctx aws.Context, input *DescribeReservedInstancesOfferingsInput, opts ...request.Option) (*DescribeReservedInstancesOfferingsOutput, error) { - req, out := c.DescribeReservedInstancesOfferingsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeReservedInstancesOfferingsPages iterates over the pages of a DescribeReservedInstancesOfferings operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeReservedInstancesOfferings method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeReservedInstancesOfferings operation. -// pageNum := 0 -// err := client.DescribeReservedInstancesOfferingsPages(params, -// func(page *ec2.DescribeReservedInstancesOfferingsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeReservedInstancesOfferingsPages(input *DescribeReservedInstancesOfferingsInput, fn func(*DescribeReservedInstancesOfferingsOutput, bool) bool) error { - return c.DescribeReservedInstancesOfferingsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeReservedInstancesOfferingsPagesWithContext same as DescribeReservedInstancesOfferingsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeReservedInstancesOfferingsPagesWithContext(ctx aws.Context, input *DescribeReservedInstancesOfferingsInput, fn func(*DescribeReservedInstancesOfferingsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeReservedInstancesOfferingsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeReservedInstancesOfferingsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeReservedInstancesOfferingsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeRouteTables = "DescribeRouteTables" - -// DescribeRouteTablesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeRouteTables operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeRouteTables for more information on using the DescribeRouteTables -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeRouteTablesRequest method. -// req, resp := client.DescribeRouteTablesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTables -func (c *EC2) DescribeRouteTablesRequest(input *DescribeRouteTablesInput) (req *request.Request, output *DescribeRouteTablesOutput) { - op := &request.Operation{ - Name: opDescribeRouteTables, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeRouteTablesInput{} - } - - output = &DescribeRouteTablesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeRouteTables API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your route tables. -// -// Each subnet in your VPC must be associated with a route table. If a subnet -// is not explicitly associated with any route table, it is implicitly associated -// with the main route table. This command does not return the subnet ID for -// implicit associations. -// -// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeRouteTables for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTables -func (c *EC2) DescribeRouteTables(input *DescribeRouteTablesInput) (*DescribeRouteTablesOutput, error) { - req, out := c.DescribeRouteTablesRequest(input) - return out, req.Send() -} - -// DescribeRouteTablesWithContext is the same as DescribeRouteTables with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeRouteTables for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeRouteTablesWithContext(ctx aws.Context, input *DescribeRouteTablesInput, opts ...request.Option) (*DescribeRouteTablesOutput, error) { - req, out := c.DescribeRouteTablesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeRouteTablesPages iterates over the pages of a DescribeRouteTables operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeRouteTables method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeRouteTables operation. -// pageNum := 0 -// err := client.DescribeRouteTablesPages(params, -// func(page *ec2.DescribeRouteTablesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeRouteTablesPages(input *DescribeRouteTablesInput, fn func(*DescribeRouteTablesOutput, bool) bool) error { - return c.DescribeRouteTablesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeRouteTablesPagesWithContext same as DescribeRouteTablesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeRouteTablesPagesWithContext(ctx aws.Context, input *DescribeRouteTablesInput, fn func(*DescribeRouteTablesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeRouteTablesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeRouteTablesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeRouteTablesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeScheduledInstanceAvailability = "DescribeScheduledInstanceAvailability" - -// DescribeScheduledInstanceAvailabilityRequest generates a "aws/request.Request" representing the -// client's request for the DescribeScheduledInstanceAvailability operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeScheduledInstanceAvailability for more information on using the DescribeScheduledInstanceAvailability -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeScheduledInstanceAvailabilityRequest method. -// req, resp := client.DescribeScheduledInstanceAvailabilityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailability -func (c *EC2) DescribeScheduledInstanceAvailabilityRequest(input *DescribeScheduledInstanceAvailabilityInput) (req *request.Request, output *DescribeScheduledInstanceAvailabilityOutput) { - op := &request.Operation{ - Name: opDescribeScheduledInstanceAvailability, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeScheduledInstanceAvailabilityInput{} - } - - output = &DescribeScheduledInstanceAvailabilityOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeScheduledInstanceAvailability API operation for Amazon Elastic Compute Cloud. -// -// Finds available schedules that meet the specified criteria. -// -// You can search for an available schedule no more than 3 months in advance. -// You must meet the minimum required duration of 1,200 hours per year. For -// example, the minimum daily schedule is 4 hours, the minimum weekly schedule -// is 24 hours, and the minimum monthly schedule is 100 hours. -// -// After you find a schedule that meets your needs, call PurchaseScheduledInstances -// to purchase Scheduled Instances with that schedule. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeScheduledInstanceAvailability for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailability -func (c *EC2) DescribeScheduledInstanceAvailability(input *DescribeScheduledInstanceAvailabilityInput) (*DescribeScheduledInstanceAvailabilityOutput, error) { - req, out := c.DescribeScheduledInstanceAvailabilityRequest(input) - return out, req.Send() -} - -// DescribeScheduledInstanceAvailabilityWithContext is the same as DescribeScheduledInstanceAvailability with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeScheduledInstanceAvailability for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeScheduledInstanceAvailabilityWithContext(ctx aws.Context, input *DescribeScheduledInstanceAvailabilityInput, opts ...request.Option) (*DescribeScheduledInstanceAvailabilityOutput, error) { - req, out := c.DescribeScheduledInstanceAvailabilityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeScheduledInstanceAvailabilityPages iterates over the pages of a DescribeScheduledInstanceAvailability operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeScheduledInstanceAvailability method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeScheduledInstanceAvailability operation. -// pageNum := 0 -// err := client.DescribeScheduledInstanceAvailabilityPages(params, -// func(page *ec2.DescribeScheduledInstanceAvailabilityOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeScheduledInstanceAvailabilityPages(input *DescribeScheduledInstanceAvailabilityInput, fn func(*DescribeScheduledInstanceAvailabilityOutput, bool) bool) error { - return c.DescribeScheduledInstanceAvailabilityPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeScheduledInstanceAvailabilityPagesWithContext same as DescribeScheduledInstanceAvailabilityPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeScheduledInstanceAvailabilityPagesWithContext(ctx aws.Context, input *DescribeScheduledInstanceAvailabilityInput, fn func(*DescribeScheduledInstanceAvailabilityOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeScheduledInstanceAvailabilityInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeScheduledInstanceAvailabilityRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeScheduledInstanceAvailabilityOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeScheduledInstances = "DescribeScheduledInstances" - -// DescribeScheduledInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeScheduledInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeScheduledInstances for more information on using the DescribeScheduledInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeScheduledInstancesRequest method. -// req, resp := client.DescribeScheduledInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstances -func (c *EC2) DescribeScheduledInstancesRequest(input *DescribeScheduledInstancesInput) (req *request.Request, output *DescribeScheduledInstancesOutput) { - op := &request.Operation{ - Name: opDescribeScheduledInstances, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeScheduledInstancesInput{} - } - - output = &DescribeScheduledInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeScheduledInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified Scheduled Instances or all your Scheduled Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeScheduledInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstances -func (c *EC2) DescribeScheduledInstances(input *DescribeScheduledInstancesInput) (*DescribeScheduledInstancesOutput, error) { - req, out := c.DescribeScheduledInstancesRequest(input) - return out, req.Send() -} - -// DescribeScheduledInstancesWithContext is the same as DescribeScheduledInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeScheduledInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeScheduledInstancesWithContext(ctx aws.Context, input *DescribeScheduledInstancesInput, opts ...request.Option) (*DescribeScheduledInstancesOutput, error) { - req, out := c.DescribeScheduledInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeScheduledInstancesPages iterates over the pages of a DescribeScheduledInstances operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeScheduledInstances method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeScheduledInstances operation. -// pageNum := 0 -// err := client.DescribeScheduledInstancesPages(params, -// func(page *ec2.DescribeScheduledInstancesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeScheduledInstancesPages(input *DescribeScheduledInstancesInput, fn func(*DescribeScheduledInstancesOutput, bool) bool) error { - return c.DescribeScheduledInstancesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeScheduledInstancesPagesWithContext same as DescribeScheduledInstancesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeScheduledInstancesPagesWithContext(ctx aws.Context, input *DescribeScheduledInstancesInput, fn func(*DescribeScheduledInstancesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeScheduledInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeScheduledInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeScheduledInstancesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeSecurityGroupReferences = "DescribeSecurityGroupReferences" - -// DescribeSecurityGroupReferencesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSecurityGroupReferences operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSecurityGroupReferences for more information on using the DescribeSecurityGroupReferences -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSecurityGroupReferencesRequest method. -// req, resp := client.DescribeSecurityGroupReferencesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferences -func (c *EC2) DescribeSecurityGroupReferencesRequest(input *DescribeSecurityGroupReferencesInput) (req *request.Request, output *DescribeSecurityGroupReferencesOutput) { - op := &request.Operation{ - Name: opDescribeSecurityGroupReferences, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeSecurityGroupReferencesInput{} - } - - output = &DescribeSecurityGroupReferencesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSecurityGroupReferences API operation for Amazon Elastic Compute Cloud. -// -// [VPC only] Describes the VPCs on the other side of a VPC peering connection -// that are referencing the security groups you've specified in this request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSecurityGroupReferences for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferences -func (c *EC2) DescribeSecurityGroupReferences(input *DescribeSecurityGroupReferencesInput) (*DescribeSecurityGroupReferencesOutput, error) { - req, out := c.DescribeSecurityGroupReferencesRequest(input) - return out, req.Send() -} - -// DescribeSecurityGroupReferencesWithContext is the same as DescribeSecurityGroupReferences with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSecurityGroupReferences for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSecurityGroupReferencesWithContext(ctx aws.Context, input *DescribeSecurityGroupReferencesInput, opts ...request.Option) (*DescribeSecurityGroupReferencesOutput, error) { - req, out := c.DescribeSecurityGroupReferencesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeSecurityGroups = "DescribeSecurityGroups" - -// DescribeSecurityGroupsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSecurityGroups operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSecurityGroups for more information on using the DescribeSecurityGroups -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSecurityGroupsRequest method. -// req, resp := client.DescribeSecurityGroupsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroups -func (c *EC2) DescribeSecurityGroupsRequest(input *DescribeSecurityGroupsInput) (req *request.Request, output *DescribeSecurityGroupsOutput) { - op := &request.Operation{ - Name: opDescribeSecurityGroups, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeSecurityGroupsInput{} - } - - output = &DescribeSecurityGroupsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSecurityGroups API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified security groups or all of your security groups. -// -// A security group is for use with instances either in the EC2-Classic platform -// or in a specific VPC. For more information, see Amazon EC2 Security Groups -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) -// in the Amazon Elastic Compute Cloud User Guide and Security Groups for Your -// VPC (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSecurityGroups for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroups -func (c *EC2) DescribeSecurityGroups(input *DescribeSecurityGroupsInput) (*DescribeSecurityGroupsOutput, error) { - req, out := c.DescribeSecurityGroupsRequest(input) - return out, req.Send() -} - -// DescribeSecurityGroupsWithContext is the same as DescribeSecurityGroups with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSecurityGroups for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSecurityGroupsWithContext(ctx aws.Context, input *DescribeSecurityGroupsInput, opts ...request.Option) (*DescribeSecurityGroupsOutput, error) { - req, out := c.DescribeSecurityGroupsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeSecurityGroupsPages iterates over the pages of a DescribeSecurityGroups operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeSecurityGroups method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeSecurityGroups operation. -// pageNum := 0 -// err := client.DescribeSecurityGroupsPages(params, -// func(page *ec2.DescribeSecurityGroupsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeSecurityGroupsPages(input *DescribeSecurityGroupsInput, fn func(*DescribeSecurityGroupsOutput, bool) bool) error { - return c.DescribeSecurityGroupsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeSecurityGroupsPagesWithContext same as DescribeSecurityGroupsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSecurityGroupsPagesWithContext(ctx aws.Context, input *DescribeSecurityGroupsInput, fn func(*DescribeSecurityGroupsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeSecurityGroupsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSecurityGroupsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeSecurityGroupsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeSnapshotAttribute = "DescribeSnapshotAttribute" - -// DescribeSnapshotAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSnapshotAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSnapshotAttribute for more information on using the DescribeSnapshotAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSnapshotAttributeRequest method. -// req, resp := client.DescribeSnapshotAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttribute -func (c *EC2) DescribeSnapshotAttributeRequest(input *DescribeSnapshotAttributeInput) (req *request.Request, output *DescribeSnapshotAttributeOutput) { - op := &request.Operation{ - Name: opDescribeSnapshotAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeSnapshotAttributeInput{} - } - - output = &DescribeSnapshotAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSnapshotAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified snapshot. You can specify -// only one attribute at a time. -// -// For more information about EBS snapshots, see Amazon EBS Snapshots (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSnapshotAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttribute -func (c *EC2) DescribeSnapshotAttribute(input *DescribeSnapshotAttributeInput) (*DescribeSnapshotAttributeOutput, error) { - req, out := c.DescribeSnapshotAttributeRequest(input) - return out, req.Send() -} - -// DescribeSnapshotAttributeWithContext is the same as DescribeSnapshotAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSnapshotAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSnapshotAttributeWithContext(ctx aws.Context, input *DescribeSnapshotAttributeInput, opts ...request.Option) (*DescribeSnapshotAttributeOutput, error) { - req, out := c.DescribeSnapshotAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeSnapshots = "DescribeSnapshots" - -// DescribeSnapshotsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSnapshots operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSnapshots for more information on using the DescribeSnapshots -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSnapshotsRequest method. -// req, resp := client.DescribeSnapshotsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshots -func (c *EC2) DescribeSnapshotsRequest(input *DescribeSnapshotsInput) (req *request.Request, output *DescribeSnapshotsOutput) { - op := &request.Operation{ - Name: opDescribeSnapshots, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeSnapshotsInput{} - } - - output = &DescribeSnapshotsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSnapshots API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified EBS snapshots available to you or all of the EBS -// snapshots available to you. -// -// The snapshots available to you include public snapshots, private snapshots -// that you own, and private snapshots owned by other AWS accounts for which -// you have explicit create volume permissions. -// -// The create volume permissions fall into the following categories: -// -// * public: The owner of the snapshot granted create volume permissions -// for the snapshot to the all group. All AWS accounts have create volume -// permissions for these snapshots. -// -// * explicit: The owner of the snapshot granted create volume permissions -// to a specific AWS account. -// -// * implicit: An AWS account has implicit create volume permissions for -// all snapshots it owns. -// -// The list of snapshots returned can be modified by specifying snapshot IDs, -// snapshot owners, or AWS accounts with create volume permissions. If no options -// are specified, Amazon EC2 returns all snapshots for which you have create -// volume permissions. -// -// If you specify one or more snapshot IDs, only snapshots that have the specified -// IDs are returned. If you specify an invalid snapshot ID, an error is returned. -// If you specify a snapshot ID for which you do not have access, it is not -// included in the returned results. -// -// If you specify one or more snapshot owners using the OwnerIds option, only -// snapshots from the specified owners and for which you have access are returned. -// The results can include the AWS account IDs of the specified owners, amazon -// for snapshots owned by Amazon, or self for snapshots that you own. -// -// If you specify a list of restorable users, only snapshots with create snapshot -// permissions for those users are returned. You can specify AWS account IDs -// (if you own the snapshots), self for snapshots for which you own or have -// explicit permissions, or all for public snapshots. -// -// If you are describing a long list of snapshots, you can paginate the output -// to make the list more manageable. The MaxResults parameter sets the maximum -// number of results returned in a single page. If the list of results exceeds -// your MaxResults value, then that number of results is returned along with -// a NextToken value that can be passed to a subsequent DescribeSnapshots request -// to retrieve the remaining results. -// -// For more information about EBS snapshots, see Amazon EBS Snapshots (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSnapshots for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshots -func (c *EC2) DescribeSnapshots(input *DescribeSnapshotsInput) (*DescribeSnapshotsOutput, error) { - req, out := c.DescribeSnapshotsRequest(input) - return out, req.Send() -} - -// DescribeSnapshotsWithContext is the same as DescribeSnapshots with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSnapshots for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSnapshotsWithContext(ctx aws.Context, input *DescribeSnapshotsInput, opts ...request.Option) (*DescribeSnapshotsOutput, error) { - req, out := c.DescribeSnapshotsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeSnapshotsPages iterates over the pages of a DescribeSnapshots operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeSnapshots method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeSnapshots operation. -// pageNum := 0 -// err := client.DescribeSnapshotsPages(params, -// func(page *ec2.DescribeSnapshotsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeSnapshotsPages(input *DescribeSnapshotsInput, fn func(*DescribeSnapshotsOutput, bool) bool) error { - return c.DescribeSnapshotsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeSnapshotsPagesWithContext same as DescribeSnapshotsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSnapshotsPagesWithContext(ctx aws.Context, input *DescribeSnapshotsInput, fn func(*DescribeSnapshotsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeSnapshotsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSnapshotsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeSnapshotsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeSpotDatafeedSubscription = "DescribeSpotDatafeedSubscription" - -// DescribeSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotDatafeedSubscription operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSpotDatafeedSubscription for more information on using the DescribeSpotDatafeedSubscription -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSpotDatafeedSubscriptionRequest method. -// req, resp := client.DescribeSpotDatafeedSubscriptionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscription -func (c *EC2) DescribeSpotDatafeedSubscriptionRequest(input *DescribeSpotDatafeedSubscriptionInput) (req *request.Request, output *DescribeSpotDatafeedSubscriptionOutput) { - op := &request.Operation{ - Name: opDescribeSpotDatafeedSubscription, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeSpotDatafeedSubscriptionInput{} - } - - output = &DescribeSpotDatafeedSubscriptionOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. -// -// Describes the data feed for Spot Instances. For more information, see Spot -// Instance Data Feed (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) -// in the Amazon EC2 User Guide for Linux Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotDatafeedSubscription for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscription -func (c *EC2) DescribeSpotDatafeedSubscription(input *DescribeSpotDatafeedSubscriptionInput) (*DescribeSpotDatafeedSubscriptionOutput, error) { - req, out := c.DescribeSpotDatafeedSubscriptionRequest(input) - return out, req.Send() -} - -// DescribeSpotDatafeedSubscriptionWithContext is the same as DescribeSpotDatafeedSubscription with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSpotDatafeedSubscription for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotDatafeedSubscriptionWithContext(ctx aws.Context, input *DescribeSpotDatafeedSubscriptionInput, opts ...request.Option) (*DescribeSpotDatafeedSubscriptionOutput, error) { - req, out := c.DescribeSpotDatafeedSubscriptionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeSpotFleetInstances = "DescribeSpotFleetInstances" - -// DescribeSpotFleetInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotFleetInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSpotFleetInstances for more information on using the DescribeSpotFleetInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSpotFleetInstancesRequest method. -// req, resp := client.DescribeSpotFleetInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstances -func (c *EC2) DescribeSpotFleetInstancesRequest(input *DescribeSpotFleetInstancesInput) (req *request.Request, output *DescribeSpotFleetInstancesOutput) { - op := &request.Operation{ - Name: opDescribeSpotFleetInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeSpotFleetInstancesInput{} - } - - output = &DescribeSpotFleetInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSpotFleetInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes the running instances for the specified Spot Fleet. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotFleetInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstances -func (c *EC2) DescribeSpotFleetInstances(input *DescribeSpotFleetInstancesInput) (*DescribeSpotFleetInstancesOutput, error) { - req, out := c.DescribeSpotFleetInstancesRequest(input) - return out, req.Send() -} - -// DescribeSpotFleetInstancesWithContext is the same as DescribeSpotFleetInstances with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSpotFleetInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotFleetInstancesWithContext(ctx aws.Context, input *DescribeSpotFleetInstancesInput, opts ...request.Option) (*DescribeSpotFleetInstancesOutput, error) { - req, out := c.DescribeSpotFleetInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeSpotFleetRequestHistory = "DescribeSpotFleetRequestHistory" - -// DescribeSpotFleetRequestHistoryRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotFleetRequestHistory operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSpotFleetRequestHistory for more information on using the DescribeSpotFleetRequestHistory -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSpotFleetRequestHistoryRequest method. -// req, resp := client.DescribeSpotFleetRequestHistoryRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistory -func (c *EC2) DescribeSpotFleetRequestHistoryRequest(input *DescribeSpotFleetRequestHistoryInput) (req *request.Request, output *DescribeSpotFleetRequestHistoryOutput) { - op := &request.Operation{ - Name: opDescribeSpotFleetRequestHistory, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeSpotFleetRequestHistoryInput{} - } - - output = &DescribeSpotFleetRequestHistoryOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSpotFleetRequestHistory API operation for Amazon Elastic Compute Cloud. -// -// Describes the events for the specified Spot Fleet request during the specified -// time. -// -// Spot Fleet events are delayed by up to 30 seconds before they can be described. -// This ensures that you can query by the last evaluated time and not miss a -// recorded event. Spot Fleet events are available for 48 hours. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotFleetRequestHistory for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistory -func (c *EC2) DescribeSpotFleetRequestHistory(input *DescribeSpotFleetRequestHistoryInput) (*DescribeSpotFleetRequestHistoryOutput, error) { - req, out := c.DescribeSpotFleetRequestHistoryRequest(input) - return out, req.Send() -} - -// DescribeSpotFleetRequestHistoryWithContext is the same as DescribeSpotFleetRequestHistory with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSpotFleetRequestHistory for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotFleetRequestHistoryWithContext(ctx aws.Context, input *DescribeSpotFleetRequestHistoryInput, opts ...request.Option) (*DescribeSpotFleetRequestHistoryOutput, error) { - req, out := c.DescribeSpotFleetRequestHistoryRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeSpotFleetRequests = "DescribeSpotFleetRequests" - -// DescribeSpotFleetRequestsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotFleetRequests operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSpotFleetRequests for more information on using the DescribeSpotFleetRequests -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSpotFleetRequestsRequest method. -// req, resp := client.DescribeSpotFleetRequestsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequests -func (c *EC2) DescribeSpotFleetRequestsRequest(input *DescribeSpotFleetRequestsInput) (req *request.Request, output *DescribeSpotFleetRequestsOutput) { - op := &request.Operation{ - Name: opDescribeSpotFleetRequests, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeSpotFleetRequestsInput{} - } - - output = &DescribeSpotFleetRequestsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSpotFleetRequests API operation for Amazon Elastic Compute Cloud. -// -// Describes your Spot Fleet requests. -// -// Spot Fleet requests are deleted 48 hours after they are canceled and their -// instances are terminated. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotFleetRequests for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequests -func (c *EC2) DescribeSpotFleetRequests(input *DescribeSpotFleetRequestsInput) (*DescribeSpotFleetRequestsOutput, error) { - req, out := c.DescribeSpotFleetRequestsRequest(input) - return out, req.Send() -} - -// DescribeSpotFleetRequestsWithContext is the same as DescribeSpotFleetRequests with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSpotFleetRequests for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotFleetRequestsWithContext(ctx aws.Context, input *DescribeSpotFleetRequestsInput, opts ...request.Option) (*DescribeSpotFleetRequestsOutput, error) { - req, out := c.DescribeSpotFleetRequestsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeSpotFleetRequestsPages iterates over the pages of a DescribeSpotFleetRequests operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeSpotFleetRequests method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeSpotFleetRequests operation. -// pageNum := 0 -// err := client.DescribeSpotFleetRequestsPages(params, -// func(page *ec2.DescribeSpotFleetRequestsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeSpotFleetRequestsPages(input *DescribeSpotFleetRequestsInput, fn func(*DescribeSpotFleetRequestsOutput, bool) bool) error { - return c.DescribeSpotFleetRequestsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeSpotFleetRequestsPagesWithContext same as DescribeSpotFleetRequestsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotFleetRequestsPagesWithContext(ctx aws.Context, input *DescribeSpotFleetRequestsInput, fn func(*DescribeSpotFleetRequestsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeSpotFleetRequestsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSpotFleetRequestsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeSpotFleetRequestsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeSpotInstanceRequests = "DescribeSpotInstanceRequests" - -// DescribeSpotInstanceRequestsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotInstanceRequests operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSpotInstanceRequests for more information on using the DescribeSpotInstanceRequests -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSpotInstanceRequestsRequest method. -// req, resp := client.DescribeSpotInstanceRequestsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequests -func (c *EC2) DescribeSpotInstanceRequestsRequest(input *DescribeSpotInstanceRequestsInput) (req *request.Request, output *DescribeSpotInstanceRequestsOutput) { - op := &request.Operation{ - Name: opDescribeSpotInstanceRequests, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeSpotInstanceRequestsInput{} - } - - output = &DescribeSpotInstanceRequestsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSpotInstanceRequests API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified Spot Instance requests. -// -// You can use DescribeSpotInstanceRequests to find a running Spot Instance -// by examining the response. If the status of the Spot Instance is fulfilled, -// the instance ID appears in the response and contains the identifier of the -// instance. Alternatively, you can use DescribeInstances with a filter to look -// for instances where the instance lifecycle is spot. -// -// We recommend that you set MaxResults to a value between 5 and 1000 to limit -// the number of results returned. This paginates the output, which makes the -// list more manageable and returns the results faster. If the list of results -// exceeds your MaxResults value, then that number of results is returned along -// with a NextToken value that can be passed to a subsequent DescribeSpotInstanceRequests -// request to retrieve the remaining results. -// -// Spot Instance requests are deleted four hours after they are canceled and -// their instances are terminated. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotInstanceRequests for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequests -func (c *EC2) DescribeSpotInstanceRequests(input *DescribeSpotInstanceRequestsInput) (*DescribeSpotInstanceRequestsOutput, error) { - req, out := c.DescribeSpotInstanceRequestsRequest(input) - return out, req.Send() -} - -// DescribeSpotInstanceRequestsWithContext is the same as DescribeSpotInstanceRequests with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSpotInstanceRequests for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotInstanceRequestsWithContext(ctx aws.Context, input *DescribeSpotInstanceRequestsInput, opts ...request.Option) (*DescribeSpotInstanceRequestsOutput, error) { - req, out := c.DescribeSpotInstanceRequestsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeSpotInstanceRequestsPages iterates over the pages of a DescribeSpotInstanceRequests operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeSpotInstanceRequests method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeSpotInstanceRequests operation. -// pageNum := 0 -// err := client.DescribeSpotInstanceRequestsPages(params, -// func(page *ec2.DescribeSpotInstanceRequestsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeSpotInstanceRequestsPages(input *DescribeSpotInstanceRequestsInput, fn func(*DescribeSpotInstanceRequestsOutput, bool) bool) error { - return c.DescribeSpotInstanceRequestsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeSpotInstanceRequestsPagesWithContext same as DescribeSpotInstanceRequestsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotInstanceRequestsPagesWithContext(ctx aws.Context, input *DescribeSpotInstanceRequestsInput, fn func(*DescribeSpotInstanceRequestsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeSpotInstanceRequestsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSpotInstanceRequestsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeSpotInstanceRequestsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeSpotPriceHistory = "DescribeSpotPriceHistory" - -// DescribeSpotPriceHistoryRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotPriceHistory operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSpotPriceHistory for more information on using the DescribeSpotPriceHistory -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSpotPriceHistoryRequest method. -// req, resp := client.DescribeSpotPriceHistoryRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistory -func (c *EC2) DescribeSpotPriceHistoryRequest(input *DescribeSpotPriceHistoryInput) (req *request.Request, output *DescribeSpotPriceHistoryOutput) { - op := &request.Operation{ - Name: opDescribeSpotPriceHistory, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeSpotPriceHistoryInput{} - } - - output = &DescribeSpotPriceHistoryOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSpotPriceHistory API operation for Amazon Elastic Compute Cloud. -// -// Describes the Spot price history. For more information, see Spot Instance -// Pricing History (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) -// in the Amazon EC2 User Guide for Linux Instances. -// -// When you specify a start and end time, this operation returns the prices -// of the instance types within the time range that you specified and the time -// when the price changed. The price is valid within the time period that you -// specified; the response merely indicates the last time that the price changed. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotPriceHistory for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistory -func (c *EC2) DescribeSpotPriceHistory(input *DescribeSpotPriceHistoryInput) (*DescribeSpotPriceHistoryOutput, error) { - req, out := c.DescribeSpotPriceHistoryRequest(input) - return out, req.Send() -} - -// DescribeSpotPriceHistoryWithContext is the same as DescribeSpotPriceHistory with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSpotPriceHistory for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotPriceHistoryWithContext(ctx aws.Context, input *DescribeSpotPriceHistoryInput, opts ...request.Option) (*DescribeSpotPriceHistoryOutput, error) { - req, out := c.DescribeSpotPriceHistoryRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeSpotPriceHistoryPages iterates over the pages of a DescribeSpotPriceHistory operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeSpotPriceHistory method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeSpotPriceHistory operation. -// pageNum := 0 -// err := client.DescribeSpotPriceHistoryPages(params, -// func(page *ec2.DescribeSpotPriceHistoryOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeSpotPriceHistoryPages(input *DescribeSpotPriceHistoryInput, fn func(*DescribeSpotPriceHistoryOutput, bool) bool) error { - return c.DescribeSpotPriceHistoryPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeSpotPriceHistoryPagesWithContext same as DescribeSpotPriceHistoryPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSpotPriceHistoryPagesWithContext(ctx aws.Context, input *DescribeSpotPriceHistoryInput, fn func(*DescribeSpotPriceHistoryOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeSpotPriceHistoryInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSpotPriceHistoryRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeSpotPriceHistoryOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeStaleSecurityGroups = "DescribeStaleSecurityGroups" - -// DescribeStaleSecurityGroupsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeStaleSecurityGroups operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeStaleSecurityGroups for more information on using the DescribeStaleSecurityGroups -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeStaleSecurityGroupsRequest method. -// req, resp := client.DescribeStaleSecurityGroupsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroups -func (c *EC2) DescribeStaleSecurityGroupsRequest(input *DescribeStaleSecurityGroupsInput) (req *request.Request, output *DescribeStaleSecurityGroupsOutput) { - op := &request.Operation{ - Name: opDescribeStaleSecurityGroups, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeStaleSecurityGroupsInput{} - } - - output = &DescribeStaleSecurityGroupsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeStaleSecurityGroups API operation for Amazon Elastic Compute Cloud. -// -// [VPC only] Describes the stale security group rules for security groups in -// a specified VPC. Rules are stale when they reference a deleted security group -// in a peer VPC, or a security group in a peer VPC for which the VPC peering -// connection has been deleted. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeStaleSecurityGroups for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroups -func (c *EC2) DescribeStaleSecurityGroups(input *DescribeStaleSecurityGroupsInput) (*DescribeStaleSecurityGroupsOutput, error) { - req, out := c.DescribeStaleSecurityGroupsRequest(input) - return out, req.Send() -} - -// DescribeStaleSecurityGroupsWithContext is the same as DescribeStaleSecurityGroups with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeStaleSecurityGroups for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeStaleSecurityGroupsWithContext(ctx aws.Context, input *DescribeStaleSecurityGroupsInput, opts ...request.Option) (*DescribeStaleSecurityGroupsOutput, error) { - req, out := c.DescribeStaleSecurityGroupsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeStaleSecurityGroupsPages iterates over the pages of a DescribeStaleSecurityGroups operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeStaleSecurityGroups method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeStaleSecurityGroups operation. -// pageNum := 0 -// err := client.DescribeStaleSecurityGroupsPages(params, -// func(page *ec2.DescribeStaleSecurityGroupsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeStaleSecurityGroupsPages(input *DescribeStaleSecurityGroupsInput, fn func(*DescribeStaleSecurityGroupsOutput, bool) bool) error { - return c.DescribeStaleSecurityGroupsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeStaleSecurityGroupsPagesWithContext same as DescribeStaleSecurityGroupsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeStaleSecurityGroupsPagesWithContext(ctx aws.Context, input *DescribeStaleSecurityGroupsInput, fn func(*DescribeStaleSecurityGroupsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeStaleSecurityGroupsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeStaleSecurityGroupsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeStaleSecurityGroupsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeSubnets = "DescribeSubnets" - -// DescribeSubnetsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSubnets operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeSubnets for more information on using the DescribeSubnets -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeSubnetsRequest method. -// req, resp := client.DescribeSubnetsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnets -func (c *EC2) DescribeSubnetsRequest(input *DescribeSubnetsInput) (req *request.Request, output *DescribeSubnetsOutput) { - op := &request.Operation{ - Name: opDescribeSubnets, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeSubnetsInput{} - } - - output = &DescribeSubnetsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeSubnets API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your subnets. -// -// For more information, see Your VPC and Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSubnets for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnets -func (c *EC2) DescribeSubnets(input *DescribeSubnetsInput) (*DescribeSubnetsOutput, error) { - req, out := c.DescribeSubnetsRequest(input) - return out, req.Send() -} - -// DescribeSubnetsWithContext is the same as DescribeSubnets with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeSubnets for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSubnetsWithContext(ctx aws.Context, input *DescribeSubnetsInput, opts ...request.Option) (*DescribeSubnetsOutput, error) { - req, out := c.DescribeSubnetsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeSubnetsPages iterates over the pages of a DescribeSubnets operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeSubnets method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeSubnets operation. -// pageNum := 0 -// err := client.DescribeSubnetsPages(params, -// func(page *ec2.DescribeSubnetsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeSubnetsPages(input *DescribeSubnetsInput, fn func(*DescribeSubnetsOutput, bool) bool) error { - return c.DescribeSubnetsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeSubnetsPagesWithContext same as DescribeSubnetsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeSubnetsPagesWithContext(ctx aws.Context, input *DescribeSubnetsInput, fn func(*DescribeSubnetsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeSubnetsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSubnetsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeSubnetsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTags = "DescribeTags" - -// DescribeTagsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTags operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTags for more information on using the DescribeTags -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTagsRequest method. -// req, resp := client.DescribeTagsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTags -func (c *EC2) DescribeTagsRequest(input *DescribeTagsInput) (req *request.Request, output *DescribeTagsOutput) { - op := &request.Operation{ - Name: opDescribeTags, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTagsInput{} - } - - output = &DescribeTagsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTags API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified tags for your EC2 resources. -// -// For more information about tags, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTags for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTags -func (c *EC2) DescribeTags(input *DescribeTagsInput) (*DescribeTagsOutput, error) { - req, out := c.DescribeTagsRequest(input) - return out, req.Send() -} - -// DescribeTagsWithContext is the same as DescribeTags with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTags for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTagsWithContext(ctx aws.Context, input *DescribeTagsInput, opts ...request.Option) (*DescribeTagsOutput, error) { - req, out := c.DescribeTagsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTagsPages iterates over the pages of a DescribeTags operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTags method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTags operation. -// pageNum := 0 -// err := client.DescribeTagsPages(params, -// func(page *ec2.DescribeTagsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTagsPages(input *DescribeTagsInput, fn func(*DescribeTagsOutput, bool) bool) error { - return c.DescribeTagsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTagsPagesWithContext same as DescribeTagsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTagsPagesWithContext(ctx aws.Context, input *DescribeTagsInput, fn func(*DescribeTagsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTagsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTagsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTagsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTrafficMirrorFilters = "DescribeTrafficMirrorFilters" - -// DescribeTrafficMirrorFiltersRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTrafficMirrorFilters operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTrafficMirrorFilters for more information on using the DescribeTrafficMirrorFilters -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTrafficMirrorFiltersRequest method. -// req, resp := client.DescribeTrafficMirrorFiltersRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFilters -func (c *EC2) DescribeTrafficMirrorFiltersRequest(input *DescribeTrafficMirrorFiltersInput) (req *request.Request, output *DescribeTrafficMirrorFiltersOutput) { - op := &request.Operation{ - Name: opDescribeTrafficMirrorFilters, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTrafficMirrorFiltersInput{} - } - - output = &DescribeTrafficMirrorFiltersOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTrafficMirrorFilters API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more Traffic Mirror filters. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTrafficMirrorFilters for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFilters -func (c *EC2) DescribeTrafficMirrorFilters(input *DescribeTrafficMirrorFiltersInput) (*DescribeTrafficMirrorFiltersOutput, error) { - req, out := c.DescribeTrafficMirrorFiltersRequest(input) - return out, req.Send() -} - -// DescribeTrafficMirrorFiltersWithContext is the same as DescribeTrafficMirrorFilters with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTrafficMirrorFilters for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTrafficMirrorFiltersWithContext(ctx aws.Context, input *DescribeTrafficMirrorFiltersInput, opts ...request.Option) (*DescribeTrafficMirrorFiltersOutput, error) { - req, out := c.DescribeTrafficMirrorFiltersRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTrafficMirrorFiltersPages iterates over the pages of a DescribeTrafficMirrorFilters operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTrafficMirrorFilters method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTrafficMirrorFilters operation. -// pageNum := 0 -// err := client.DescribeTrafficMirrorFiltersPages(params, -// func(page *ec2.DescribeTrafficMirrorFiltersOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTrafficMirrorFiltersPages(input *DescribeTrafficMirrorFiltersInput, fn func(*DescribeTrafficMirrorFiltersOutput, bool) bool) error { - return c.DescribeTrafficMirrorFiltersPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTrafficMirrorFiltersPagesWithContext same as DescribeTrafficMirrorFiltersPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTrafficMirrorFiltersPagesWithContext(ctx aws.Context, input *DescribeTrafficMirrorFiltersInput, fn func(*DescribeTrafficMirrorFiltersOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTrafficMirrorFiltersInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTrafficMirrorFiltersRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTrafficMirrorFiltersOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTrafficMirrorSessions = "DescribeTrafficMirrorSessions" - -// DescribeTrafficMirrorSessionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTrafficMirrorSessions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTrafficMirrorSessions for more information on using the DescribeTrafficMirrorSessions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTrafficMirrorSessionsRequest method. -// req, resp := client.DescribeTrafficMirrorSessionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorSessions -func (c *EC2) DescribeTrafficMirrorSessionsRequest(input *DescribeTrafficMirrorSessionsInput) (req *request.Request, output *DescribeTrafficMirrorSessionsOutput) { - op := &request.Operation{ - Name: opDescribeTrafficMirrorSessions, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTrafficMirrorSessionsInput{} - } - - output = &DescribeTrafficMirrorSessionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTrafficMirrorSessions API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more Traffic Mirror sessions. By default, all Traffic Mirror -// sessions are described. Alternatively, you can filter the results. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTrafficMirrorSessions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorSessions -func (c *EC2) DescribeTrafficMirrorSessions(input *DescribeTrafficMirrorSessionsInput) (*DescribeTrafficMirrorSessionsOutput, error) { - req, out := c.DescribeTrafficMirrorSessionsRequest(input) - return out, req.Send() -} - -// DescribeTrafficMirrorSessionsWithContext is the same as DescribeTrafficMirrorSessions with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTrafficMirrorSessions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTrafficMirrorSessionsWithContext(ctx aws.Context, input *DescribeTrafficMirrorSessionsInput, opts ...request.Option) (*DescribeTrafficMirrorSessionsOutput, error) { - req, out := c.DescribeTrafficMirrorSessionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTrafficMirrorSessionsPages iterates over the pages of a DescribeTrafficMirrorSessions operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTrafficMirrorSessions method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTrafficMirrorSessions operation. -// pageNum := 0 -// err := client.DescribeTrafficMirrorSessionsPages(params, -// func(page *ec2.DescribeTrafficMirrorSessionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTrafficMirrorSessionsPages(input *DescribeTrafficMirrorSessionsInput, fn func(*DescribeTrafficMirrorSessionsOutput, bool) bool) error { - return c.DescribeTrafficMirrorSessionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTrafficMirrorSessionsPagesWithContext same as DescribeTrafficMirrorSessionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTrafficMirrorSessionsPagesWithContext(ctx aws.Context, input *DescribeTrafficMirrorSessionsInput, fn func(*DescribeTrafficMirrorSessionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTrafficMirrorSessionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTrafficMirrorSessionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTrafficMirrorSessionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTrafficMirrorTargets = "DescribeTrafficMirrorTargets" - -// DescribeTrafficMirrorTargetsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTrafficMirrorTargets operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTrafficMirrorTargets for more information on using the DescribeTrafficMirrorTargets -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTrafficMirrorTargetsRequest method. -// req, resp := client.DescribeTrafficMirrorTargetsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorTargets -func (c *EC2) DescribeTrafficMirrorTargetsRequest(input *DescribeTrafficMirrorTargetsInput) (req *request.Request, output *DescribeTrafficMirrorTargetsOutput) { - op := &request.Operation{ - Name: opDescribeTrafficMirrorTargets, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTrafficMirrorTargetsInput{} - } - - output = &DescribeTrafficMirrorTargetsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTrafficMirrorTargets API operation for Amazon Elastic Compute Cloud. -// -// Information about one or more Traffic Mirror targets. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTrafficMirrorTargets for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorTargets -func (c *EC2) DescribeTrafficMirrorTargets(input *DescribeTrafficMirrorTargetsInput) (*DescribeTrafficMirrorTargetsOutput, error) { - req, out := c.DescribeTrafficMirrorTargetsRequest(input) - return out, req.Send() -} - -// DescribeTrafficMirrorTargetsWithContext is the same as DescribeTrafficMirrorTargets with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTrafficMirrorTargets for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTrafficMirrorTargetsWithContext(ctx aws.Context, input *DescribeTrafficMirrorTargetsInput, opts ...request.Option) (*DescribeTrafficMirrorTargetsOutput, error) { - req, out := c.DescribeTrafficMirrorTargetsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTrafficMirrorTargetsPages iterates over the pages of a DescribeTrafficMirrorTargets operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTrafficMirrorTargets method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTrafficMirrorTargets operation. -// pageNum := 0 -// err := client.DescribeTrafficMirrorTargetsPages(params, -// func(page *ec2.DescribeTrafficMirrorTargetsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTrafficMirrorTargetsPages(input *DescribeTrafficMirrorTargetsInput, fn func(*DescribeTrafficMirrorTargetsOutput, bool) bool) error { - return c.DescribeTrafficMirrorTargetsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTrafficMirrorTargetsPagesWithContext same as DescribeTrafficMirrorTargetsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTrafficMirrorTargetsPagesWithContext(ctx aws.Context, input *DescribeTrafficMirrorTargetsInput, fn func(*DescribeTrafficMirrorTargetsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTrafficMirrorTargetsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTrafficMirrorTargetsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTrafficMirrorTargetsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTransitGatewayAttachments = "DescribeTransitGatewayAttachments" - -// DescribeTransitGatewayAttachmentsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTransitGatewayAttachments operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTransitGatewayAttachments for more information on using the DescribeTransitGatewayAttachments -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTransitGatewayAttachmentsRequest method. -// req, resp := client.DescribeTransitGatewayAttachmentsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayAttachments -func (c *EC2) DescribeTransitGatewayAttachmentsRequest(input *DescribeTransitGatewayAttachmentsInput) (req *request.Request, output *DescribeTransitGatewayAttachmentsOutput) { - op := &request.Operation{ - Name: opDescribeTransitGatewayAttachments, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTransitGatewayAttachmentsInput{} - } - - output = &DescribeTransitGatewayAttachmentsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTransitGatewayAttachments API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more attachments between resources and transit gateways. -// By default, all attachments are described. Alternatively, you can filter -// the results by attachment ID, attachment state, resource ID, or resource -// owner. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTransitGatewayAttachments for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayAttachments -func (c *EC2) DescribeTransitGatewayAttachments(input *DescribeTransitGatewayAttachmentsInput) (*DescribeTransitGatewayAttachmentsOutput, error) { - req, out := c.DescribeTransitGatewayAttachmentsRequest(input) - return out, req.Send() -} - -// DescribeTransitGatewayAttachmentsWithContext is the same as DescribeTransitGatewayAttachments with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTransitGatewayAttachments for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewayAttachmentsWithContext(ctx aws.Context, input *DescribeTransitGatewayAttachmentsInput, opts ...request.Option) (*DescribeTransitGatewayAttachmentsOutput, error) { - req, out := c.DescribeTransitGatewayAttachmentsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTransitGatewayAttachmentsPages iterates over the pages of a DescribeTransitGatewayAttachments operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTransitGatewayAttachments method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTransitGatewayAttachments operation. -// pageNum := 0 -// err := client.DescribeTransitGatewayAttachmentsPages(params, -// func(page *ec2.DescribeTransitGatewayAttachmentsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTransitGatewayAttachmentsPages(input *DescribeTransitGatewayAttachmentsInput, fn func(*DescribeTransitGatewayAttachmentsOutput, bool) bool) error { - return c.DescribeTransitGatewayAttachmentsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTransitGatewayAttachmentsPagesWithContext same as DescribeTransitGatewayAttachmentsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewayAttachmentsPagesWithContext(ctx aws.Context, input *DescribeTransitGatewayAttachmentsInput, fn func(*DescribeTransitGatewayAttachmentsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTransitGatewayAttachmentsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTransitGatewayAttachmentsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTransitGatewayAttachmentsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTransitGatewayRouteTables = "DescribeTransitGatewayRouteTables" - -// DescribeTransitGatewayRouteTablesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTransitGatewayRouteTables operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTransitGatewayRouteTables for more information on using the DescribeTransitGatewayRouteTables -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTransitGatewayRouteTablesRequest method. -// req, resp := client.DescribeTransitGatewayRouteTablesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTables -func (c *EC2) DescribeTransitGatewayRouteTablesRequest(input *DescribeTransitGatewayRouteTablesInput) (req *request.Request, output *DescribeTransitGatewayRouteTablesOutput) { - op := &request.Operation{ - Name: opDescribeTransitGatewayRouteTables, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTransitGatewayRouteTablesInput{} - } - - output = &DescribeTransitGatewayRouteTablesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTransitGatewayRouteTables API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more transit gateway route tables. By default, all transit -// gateway route tables are described. Alternatively, you can filter the results. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTransitGatewayRouteTables for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTables -func (c *EC2) DescribeTransitGatewayRouteTables(input *DescribeTransitGatewayRouteTablesInput) (*DescribeTransitGatewayRouteTablesOutput, error) { - req, out := c.DescribeTransitGatewayRouteTablesRequest(input) - return out, req.Send() -} - -// DescribeTransitGatewayRouteTablesWithContext is the same as DescribeTransitGatewayRouteTables with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTransitGatewayRouteTables for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewayRouteTablesWithContext(ctx aws.Context, input *DescribeTransitGatewayRouteTablesInput, opts ...request.Option) (*DescribeTransitGatewayRouteTablesOutput, error) { - req, out := c.DescribeTransitGatewayRouteTablesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTransitGatewayRouteTablesPages iterates over the pages of a DescribeTransitGatewayRouteTables operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTransitGatewayRouteTables method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTransitGatewayRouteTables operation. -// pageNum := 0 -// err := client.DescribeTransitGatewayRouteTablesPages(params, -// func(page *ec2.DescribeTransitGatewayRouteTablesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTransitGatewayRouteTablesPages(input *DescribeTransitGatewayRouteTablesInput, fn func(*DescribeTransitGatewayRouteTablesOutput, bool) bool) error { - return c.DescribeTransitGatewayRouteTablesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTransitGatewayRouteTablesPagesWithContext same as DescribeTransitGatewayRouteTablesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewayRouteTablesPagesWithContext(ctx aws.Context, input *DescribeTransitGatewayRouteTablesInput, fn func(*DescribeTransitGatewayRouteTablesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTransitGatewayRouteTablesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTransitGatewayRouteTablesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTransitGatewayRouteTablesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTransitGatewayVpcAttachments = "DescribeTransitGatewayVpcAttachments" - -// DescribeTransitGatewayVpcAttachmentsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTransitGatewayVpcAttachments operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTransitGatewayVpcAttachments for more information on using the DescribeTransitGatewayVpcAttachments -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTransitGatewayVpcAttachmentsRequest method. -// req, resp := client.DescribeTransitGatewayVpcAttachmentsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayVpcAttachments -func (c *EC2) DescribeTransitGatewayVpcAttachmentsRequest(input *DescribeTransitGatewayVpcAttachmentsInput) (req *request.Request, output *DescribeTransitGatewayVpcAttachmentsOutput) { - op := &request.Operation{ - Name: opDescribeTransitGatewayVpcAttachments, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTransitGatewayVpcAttachmentsInput{} - } - - output = &DescribeTransitGatewayVpcAttachmentsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTransitGatewayVpcAttachments API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more VPC attachments. By default, all VPC attachments are -// described. Alternatively, you can filter the results. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTransitGatewayVpcAttachments for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayVpcAttachments -func (c *EC2) DescribeTransitGatewayVpcAttachments(input *DescribeTransitGatewayVpcAttachmentsInput) (*DescribeTransitGatewayVpcAttachmentsOutput, error) { - req, out := c.DescribeTransitGatewayVpcAttachmentsRequest(input) - return out, req.Send() -} - -// DescribeTransitGatewayVpcAttachmentsWithContext is the same as DescribeTransitGatewayVpcAttachments with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTransitGatewayVpcAttachments for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewayVpcAttachmentsWithContext(ctx aws.Context, input *DescribeTransitGatewayVpcAttachmentsInput, opts ...request.Option) (*DescribeTransitGatewayVpcAttachmentsOutput, error) { - req, out := c.DescribeTransitGatewayVpcAttachmentsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTransitGatewayVpcAttachmentsPages iterates over the pages of a DescribeTransitGatewayVpcAttachments operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTransitGatewayVpcAttachments method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTransitGatewayVpcAttachments operation. -// pageNum := 0 -// err := client.DescribeTransitGatewayVpcAttachmentsPages(params, -// func(page *ec2.DescribeTransitGatewayVpcAttachmentsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTransitGatewayVpcAttachmentsPages(input *DescribeTransitGatewayVpcAttachmentsInput, fn func(*DescribeTransitGatewayVpcAttachmentsOutput, bool) bool) error { - return c.DescribeTransitGatewayVpcAttachmentsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTransitGatewayVpcAttachmentsPagesWithContext same as DescribeTransitGatewayVpcAttachmentsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewayVpcAttachmentsPagesWithContext(ctx aws.Context, input *DescribeTransitGatewayVpcAttachmentsInput, fn func(*DescribeTransitGatewayVpcAttachmentsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTransitGatewayVpcAttachmentsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTransitGatewayVpcAttachmentsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTransitGatewayVpcAttachmentsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeTransitGateways = "DescribeTransitGateways" - -// DescribeTransitGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTransitGateways operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeTransitGateways for more information on using the DescribeTransitGateways -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeTransitGatewaysRequest method. -// req, resp := client.DescribeTransitGatewaysRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGateways -func (c *EC2) DescribeTransitGatewaysRequest(input *DescribeTransitGatewaysInput) (req *request.Request, output *DescribeTransitGatewaysOutput) { - op := &request.Operation{ - Name: opDescribeTransitGateways, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeTransitGatewaysInput{} - } - - output = &DescribeTransitGatewaysOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeTransitGateways API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more transit gateways. By default, all transit gateways -// are described. Alternatively, you can filter the results. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTransitGateways for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGateways -func (c *EC2) DescribeTransitGateways(input *DescribeTransitGatewaysInput) (*DescribeTransitGatewaysOutput, error) { - req, out := c.DescribeTransitGatewaysRequest(input) - return out, req.Send() -} - -// DescribeTransitGatewaysWithContext is the same as DescribeTransitGateways with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeTransitGateways for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewaysWithContext(ctx aws.Context, input *DescribeTransitGatewaysInput, opts ...request.Option) (*DescribeTransitGatewaysOutput, error) { - req, out := c.DescribeTransitGatewaysRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeTransitGatewaysPages iterates over the pages of a DescribeTransitGateways operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeTransitGateways method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeTransitGateways operation. -// pageNum := 0 -// err := client.DescribeTransitGatewaysPages(params, -// func(page *ec2.DescribeTransitGatewaysOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeTransitGatewaysPages(input *DescribeTransitGatewaysInput, fn func(*DescribeTransitGatewaysOutput, bool) bool) error { - return c.DescribeTransitGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeTransitGatewaysPagesWithContext same as DescribeTransitGatewaysPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeTransitGatewaysPagesWithContext(ctx aws.Context, input *DescribeTransitGatewaysInput, fn func(*DescribeTransitGatewaysOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeTransitGatewaysInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeTransitGatewaysRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeTransitGatewaysOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVolumeAttribute = "DescribeVolumeAttribute" - -// DescribeVolumeAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumeAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVolumeAttribute for more information on using the DescribeVolumeAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVolumeAttributeRequest method. -// req, resp := client.DescribeVolumeAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttribute -func (c *EC2) DescribeVolumeAttributeRequest(input *DescribeVolumeAttributeInput) (req *request.Request, output *DescribeVolumeAttributeOutput) { - op := &request.Operation{ - Name: opDescribeVolumeAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeVolumeAttributeInput{} - } - - output = &DescribeVolumeAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVolumeAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified volume. You can specify -// only one attribute at a time. -// -// For more information about EBS volumes, see Amazon EBS Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumeAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttribute -func (c *EC2) DescribeVolumeAttribute(input *DescribeVolumeAttributeInput) (*DescribeVolumeAttributeOutput, error) { - req, out := c.DescribeVolumeAttributeRequest(input) - return out, req.Send() -} - -// DescribeVolumeAttributeWithContext is the same as DescribeVolumeAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVolumeAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumeAttributeWithContext(ctx aws.Context, input *DescribeVolumeAttributeInput, opts ...request.Option) (*DescribeVolumeAttributeOutput, error) { - req, out := c.DescribeVolumeAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeVolumeStatus = "DescribeVolumeStatus" - -// DescribeVolumeStatusRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumeStatus operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVolumeStatus for more information on using the DescribeVolumeStatus -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVolumeStatusRequest method. -// req, resp := client.DescribeVolumeStatusRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatus -func (c *EC2) DescribeVolumeStatusRequest(input *DescribeVolumeStatusInput) (req *request.Request, output *DescribeVolumeStatusOutput) { - op := &request.Operation{ - Name: opDescribeVolumeStatus, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVolumeStatusInput{} - } - - output = &DescribeVolumeStatusOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVolumeStatus API operation for Amazon Elastic Compute Cloud. -// -// Describes the status of the specified volumes. Volume status provides the -// result of the checks performed on your volumes to determine events that can -// impair the performance of your volumes. The performance of a volume can be -// affected if an issue occurs on the volume's underlying host. If the volume's -// underlying host experiences a power outage or system issue, after the system -// is restored, there could be data inconsistencies on the volume. Volume events -// notify you if this occurs. Volume actions notify you if any action needs -// to be taken in response to the event. -// -// The DescribeVolumeStatus operation provides the following information about -// the specified volumes: -// -// Status: Reflects the current status of the volume. The possible values are -// ok, impaired , warning, or insufficient-data. If all checks pass, the overall -// status of the volume is ok. If the check fails, the overall status is impaired. -// If the status is insufficient-data, then the checks may still be taking place -// on your volume at the time. We recommend that you retry the request. For -// more information about volume status, see Monitoring the Status of Your Volumes -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-status.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Events: Reflect the cause of a volume status and may require you to take -// action. For example, if your volume returns an impaired status, then the -// volume event might be potential-data-inconsistency. This means that your -// volume has been affected by an issue with the underlying host, has all I/O -// operations disabled, and may have inconsistent data. -// -// Actions: Reflect the actions you may have to take in response to an event. -// For example, if the status of the volume is impaired and the volume event -// shows potential-data-inconsistency, then the action shows enable-volume-io. -// This means that you may want to enable the I/O operations for the volume -// by calling the EnableVolumeIO action and then check the volume for data consistency. -// -// Volume status is based on the volume status checks, and does not reflect -// the volume state. Therefore, volume status does not indicate volumes in the -// error state (for example, when a volume is incapable of accepting I/O.) -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumeStatus for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatus -func (c *EC2) DescribeVolumeStatus(input *DescribeVolumeStatusInput) (*DescribeVolumeStatusOutput, error) { - req, out := c.DescribeVolumeStatusRequest(input) - return out, req.Send() -} - -// DescribeVolumeStatusWithContext is the same as DescribeVolumeStatus with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVolumeStatus for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumeStatusWithContext(ctx aws.Context, input *DescribeVolumeStatusInput, opts ...request.Option) (*DescribeVolumeStatusOutput, error) { - req, out := c.DescribeVolumeStatusRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVolumeStatusPages iterates over the pages of a DescribeVolumeStatus operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVolumeStatus method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVolumeStatus operation. -// pageNum := 0 -// err := client.DescribeVolumeStatusPages(params, -// func(page *ec2.DescribeVolumeStatusOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVolumeStatusPages(input *DescribeVolumeStatusInput, fn func(*DescribeVolumeStatusOutput, bool) bool) error { - return c.DescribeVolumeStatusPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVolumeStatusPagesWithContext same as DescribeVolumeStatusPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumeStatusPagesWithContext(ctx aws.Context, input *DescribeVolumeStatusInput, fn func(*DescribeVolumeStatusOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVolumeStatusInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVolumeStatusRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVolumeStatusOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVolumes = "DescribeVolumes" - -// DescribeVolumesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVolumes for more information on using the DescribeVolumes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVolumesRequest method. -// req, resp := client.DescribeVolumesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumes -func (c *EC2) DescribeVolumesRequest(input *DescribeVolumesInput) (req *request.Request, output *DescribeVolumesOutput) { - op := &request.Operation{ - Name: opDescribeVolumes, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVolumesInput{} - } - - output = &DescribeVolumesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVolumes API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified EBS volumes or all of your EBS volumes. -// -// If you are describing a long list of volumes, you can paginate the output -// to make the list more manageable. The MaxResults parameter sets the maximum -// number of results returned in a single page. If the list of results exceeds -// your MaxResults value, then that number of results is returned along with -// a NextToken value that can be passed to a subsequent DescribeVolumes request -// to retrieve the remaining results. -// -// For more information about EBS volumes, see Amazon EBS Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumes -func (c *EC2) DescribeVolumes(input *DescribeVolumesInput) (*DescribeVolumesOutput, error) { - req, out := c.DescribeVolumesRequest(input) - return out, req.Send() -} - -// DescribeVolumesWithContext is the same as DescribeVolumes with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVolumes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumesWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.Option) (*DescribeVolumesOutput, error) { - req, out := c.DescribeVolumesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVolumesPages iterates over the pages of a DescribeVolumes operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVolumes method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVolumes operation. -// pageNum := 0 -// err := client.DescribeVolumesPages(params, -// func(page *ec2.DescribeVolumesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVolumesPages(input *DescribeVolumesInput, fn func(*DescribeVolumesOutput, bool) bool) error { - return c.DescribeVolumesPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVolumesPagesWithContext same as DescribeVolumesPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumesPagesWithContext(ctx aws.Context, input *DescribeVolumesInput, fn func(*DescribeVolumesOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVolumesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVolumesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVolumesOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVolumesModifications = "DescribeVolumesModifications" - -// DescribeVolumesModificationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumesModifications operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVolumesModifications for more information on using the DescribeVolumesModifications -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVolumesModificationsRequest method. -// req, resp := client.DescribeVolumesModificationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModifications -func (c *EC2) DescribeVolumesModificationsRequest(input *DescribeVolumesModificationsInput) (req *request.Request, output *DescribeVolumesModificationsOutput) { - op := &request.Operation{ - Name: opDescribeVolumesModifications, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVolumesModificationsInput{} - } - - output = &DescribeVolumesModificationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVolumesModifications API operation for Amazon Elastic Compute Cloud. -// -// Reports the current modification status of EBS volumes. -// -// Current-generation EBS volumes support modification of attributes including -// type, size, and (for io1 volumes) IOPS provisioning while either attached -// to or detached from an instance. Following an action from the API or the -// console to modify a volume, the status of the modification may be modifying, -// optimizing, completed, or failed. If a volume has never been modified, then -// certain elements of the returned VolumeModification objects are null. -// -// You can also use CloudWatch Events to check the status of a modification -// to an EBS volume. For information about CloudWatch Events, see the Amazon -// CloudWatch Events User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/). -// For more information, see Monitoring Volume Modifications" (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#monitoring_mods) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumesModifications for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModifications -func (c *EC2) DescribeVolumesModifications(input *DescribeVolumesModificationsInput) (*DescribeVolumesModificationsOutput, error) { - req, out := c.DescribeVolumesModificationsRequest(input) - return out, req.Send() -} - -// DescribeVolumesModificationsWithContext is the same as DescribeVolumesModifications with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVolumesModifications for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumesModificationsWithContext(ctx aws.Context, input *DescribeVolumesModificationsInput, opts ...request.Option) (*DescribeVolumesModificationsOutput, error) { - req, out := c.DescribeVolumesModificationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVolumesModificationsPages iterates over the pages of a DescribeVolumesModifications operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVolumesModifications method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVolumesModifications operation. -// pageNum := 0 -// err := client.DescribeVolumesModificationsPages(params, -// func(page *ec2.DescribeVolumesModificationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVolumesModificationsPages(input *DescribeVolumesModificationsInput, fn func(*DescribeVolumesModificationsOutput, bool) bool) error { - return c.DescribeVolumesModificationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVolumesModificationsPagesWithContext same as DescribeVolumesModificationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVolumesModificationsPagesWithContext(ctx aws.Context, input *DescribeVolumesModificationsInput, fn func(*DescribeVolumesModificationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVolumesModificationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVolumesModificationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVolumesModificationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcAttribute = "DescribeVpcAttribute" - -// DescribeVpcAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcAttribute for more information on using the DescribeVpcAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcAttributeRequest method. -// req, resp := client.DescribeVpcAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttribute -func (c *EC2) DescribeVpcAttributeRequest(input *DescribeVpcAttributeInput) (req *request.Request, output *DescribeVpcAttributeOutput) { - op := &request.Operation{ - Name: opDescribeVpcAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeVpcAttributeInput{} - } - - output = &DescribeVpcAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified VPC. You can specify only -// one attribute at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttribute -func (c *EC2) DescribeVpcAttribute(input *DescribeVpcAttributeInput) (*DescribeVpcAttributeOutput, error) { - req, out := c.DescribeVpcAttributeRequest(input) - return out, req.Send() -} - -// DescribeVpcAttributeWithContext is the same as DescribeVpcAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcAttributeWithContext(ctx aws.Context, input *DescribeVpcAttributeInput, opts ...request.Option) (*DescribeVpcAttributeOutput, error) { - req, out := c.DescribeVpcAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeVpcClassicLink = "DescribeVpcClassicLink" - -// DescribeVpcClassicLinkRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcClassicLink operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcClassicLink for more information on using the DescribeVpcClassicLink -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcClassicLinkRequest method. -// req, resp := client.DescribeVpcClassicLinkRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLink -func (c *EC2) DescribeVpcClassicLinkRequest(input *DescribeVpcClassicLinkInput) (req *request.Request, output *DescribeVpcClassicLinkOutput) { - op := &request.Operation{ - Name: opDescribeVpcClassicLink, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeVpcClassicLinkInput{} - } - - output = &DescribeVpcClassicLinkOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcClassicLink API operation for Amazon Elastic Compute Cloud. -// -// Describes the ClassicLink status of one or more VPCs. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcClassicLink for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLink -func (c *EC2) DescribeVpcClassicLink(input *DescribeVpcClassicLinkInput) (*DescribeVpcClassicLinkOutput, error) { - req, out := c.DescribeVpcClassicLinkRequest(input) - return out, req.Send() -} - -// DescribeVpcClassicLinkWithContext is the same as DescribeVpcClassicLink with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcClassicLink for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcClassicLinkWithContext(ctx aws.Context, input *DescribeVpcClassicLinkInput, opts ...request.Option) (*DescribeVpcClassicLinkOutput, error) { - req, out := c.DescribeVpcClassicLinkRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeVpcClassicLinkDnsSupport = "DescribeVpcClassicLinkDnsSupport" - -// DescribeVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcClassicLinkDnsSupport operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcClassicLinkDnsSupport for more information on using the DescribeVpcClassicLinkDnsSupport -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcClassicLinkDnsSupportRequest method. -// req, resp := client.DescribeVpcClassicLinkDnsSupportRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupport -func (c *EC2) DescribeVpcClassicLinkDnsSupportRequest(input *DescribeVpcClassicLinkDnsSupportInput) (req *request.Request, output *DescribeVpcClassicLinkDnsSupportOutput) { - op := &request.Operation{ - Name: opDescribeVpcClassicLinkDnsSupport, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcClassicLinkDnsSupportInput{} - } - - output = &DescribeVpcClassicLinkDnsSupportOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. -// -// Describes the ClassicLink DNS support status of one or more VPCs. If enabled, -// the DNS hostname of a linked EC2-Classic instance resolves to its private -// IP address when addressed from an instance in the VPC to which it's linked. -// Similarly, the DNS hostname of an instance in a VPC resolves to its private -// IP address when addressed from a linked EC2-Classic instance. For more information, -// see ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcClassicLinkDnsSupport for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupport -func (c *EC2) DescribeVpcClassicLinkDnsSupport(input *DescribeVpcClassicLinkDnsSupportInput) (*DescribeVpcClassicLinkDnsSupportOutput, error) { - req, out := c.DescribeVpcClassicLinkDnsSupportRequest(input) - return out, req.Send() -} - -// DescribeVpcClassicLinkDnsSupportWithContext is the same as DescribeVpcClassicLinkDnsSupport with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcClassicLinkDnsSupport for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcClassicLinkDnsSupportWithContext(ctx aws.Context, input *DescribeVpcClassicLinkDnsSupportInput, opts ...request.Option) (*DescribeVpcClassicLinkDnsSupportOutput, error) { - req, out := c.DescribeVpcClassicLinkDnsSupportRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcClassicLinkDnsSupportPages iterates over the pages of a DescribeVpcClassicLinkDnsSupport operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcClassicLinkDnsSupport method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcClassicLinkDnsSupport operation. -// pageNum := 0 -// err := client.DescribeVpcClassicLinkDnsSupportPages(params, -// func(page *ec2.DescribeVpcClassicLinkDnsSupportOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcClassicLinkDnsSupportPages(input *DescribeVpcClassicLinkDnsSupportInput, fn func(*DescribeVpcClassicLinkDnsSupportOutput, bool) bool) error { - return c.DescribeVpcClassicLinkDnsSupportPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcClassicLinkDnsSupportPagesWithContext same as DescribeVpcClassicLinkDnsSupportPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcClassicLinkDnsSupportPagesWithContext(ctx aws.Context, input *DescribeVpcClassicLinkDnsSupportInput, fn func(*DescribeVpcClassicLinkDnsSupportOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcClassicLinkDnsSupportInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcClassicLinkDnsSupportRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcClassicLinkDnsSupportOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcEndpointConnectionNotifications = "DescribeVpcEndpointConnectionNotifications" - -// DescribeVpcEndpointConnectionNotificationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpointConnectionNotifications operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcEndpointConnectionNotifications for more information on using the DescribeVpcEndpointConnectionNotifications -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcEndpointConnectionNotificationsRequest method. -// req, resp := client.DescribeVpcEndpointConnectionNotificationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionNotifications -func (c *EC2) DescribeVpcEndpointConnectionNotificationsRequest(input *DescribeVpcEndpointConnectionNotificationsInput) (req *request.Request, output *DescribeVpcEndpointConnectionNotificationsOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpointConnectionNotifications, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcEndpointConnectionNotificationsInput{} - } - - output = &DescribeVpcEndpointConnectionNotificationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcEndpointConnectionNotifications API operation for Amazon Elastic Compute Cloud. -// -// Describes the connection notifications for VPC endpoints and VPC endpoint -// services. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpointConnectionNotifications for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionNotifications -func (c *EC2) DescribeVpcEndpointConnectionNotifications(input *DescribeVpcEndpointConnectionNotificationsInput) (*DescribeVpcEndpointConnectionNotificationsOutput, error) { - req, out := c.DescribeVpcEndpointConnectionNotificationsRequest(input) - return out, req.Send() -} - -// DescribeVpcEndpointConnectionNotificationsWithContext is the same as DescribeVpcEndpointConnectionNotifications with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcEndpointConnectionNotifications for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointConnectionNotificationsWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionNotificationsInput, opts ...request.Option) (*DescribeVpcEndpointConnectionNotificationsOutput, error) { - req, out := c.DescribeVpcEndpointConnectionNotificationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcEndpointConnectionNotificationsPages iterates over the pages of a DescribeVpcEndpointConnectionNotifications operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcEndpointConnectionNotifications method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcEndpointConnectionNotifications operation. -// pageNum := 0 -// err := client.DescribeVpcEndpointConnectionNotificationsPages(params, -// func(page *ec2.DescribeVpcEndpointConnectionNotificationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcEndpointConnectionNotificationsPages(input *DescribeVpcEndpointConnectionNotificationsInput, fn func(*DescribeVpcEndpointConnectionNotificationsOutput, bool) bool) error { - return c.DescribeVpcEndpointConnectionNotificationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcEndpointConnectionNotificationsPagesWithContext same as DescribeVpcEndpointConnectionNotificationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointConnectionNotificationsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionNotificationsInput, fn func(*DescribeVpcEndpointConnectionNotificationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcEndpointConnectionNotificationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcEndpointConnectionNotificationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcEndpointConnectionNotificationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcEndpointConnections = "DescribeVpcEndpointConnections" - -// DescribeVpcEndpointConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpointConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcEndpointConnections for more information on using the DescribeVpcEndpointConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcEndpointConnectionsRequest method. -// req, resp := client.DescribeVpcEndpointConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnections -func (c *EC2) DescribeVpcEndpointConnectionsRequest(input *DescribeVpcEndpointConnectionsInput) (req *request.Request, output *DescribeVpcEndpointConnectionsOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpointConnections, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcEndpointConnectionsInput{} - } - - output = &DescribeVpcEndpointConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcEndpointConnections API operation for Amazon Elastic Compute Cloud. -// -// Describes the VPC endpoint connections to your VPC endpoint services, including -// any endpoints that are pending your acceptance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpointConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnections -func (c *EC2) DescribeVpcEndpointConnections(input *DescribeVpcEndpointConnectionsInput) (*DescribeVpcEndpointConnectionsOutput, error) { - req, out := c.DescribeVpcEndpointConnectionsRequest(input) - return out, req.Send() -} - -// DescribeVpcEndpointConnectionsWithContext is the same as DescribeVpcEndpointConnections with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcEndpointConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointConnectionsWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionsInput, opts ...request.Option) (*DescribeVpcEndpointConnectionsOutput, error) { - req, out := c.DescribeVpcEndpointConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcEndpointConnectionsPages iterates over the pages of a DescribeVpcEndpointConnections operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcEndpointConnections method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcEndpointConnections operation. -// pageNum := 0 -// err := client.DescribeVpcEndpointConnectionsPages(params, -// func(page *ec2.DescribeVpcEndpointConnectionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcEndpointConnectionsPages(input *DescribeVpcEndpointConnectionsInput, fn func(*DescribeVpcEndpointConnectionsOutput, bool) bool) error { - return c.DescribeVpcEndpointConnectionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcEndpointConnectionsPagesWithContext same as DescribeVpcEndpointConnectionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointConnectionsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionsInput, fn func(*DescribeVpcEndpointConnectionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcEndpointConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcEndpointConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcEndpointConnectionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcEndpointServiceConfigurations = "DescribeVpcEndpointServiceConfigurations" - -// DescribeVpcEndpointServiceConfigurationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpointServiceConfigurations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcEndpointServiceConfigurations for more information on using the DescribeVpcEndpointServiceConfigurations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcEndpointServiceConfigurationsRequest method. -// req, resp := client.DescribeVpcEndpointServiceConfigurationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServiceConfigurations -func (c *EC2) DescribeVpcEndpointServiceConfigurationsRequest(input *DescribeVpcEndpointServiceConfigurationsInput) (req *request.Request, output *DescribeVpcEndpointServiceConfigurationsOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpointServiceConfigurations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcEndpointServiceConfigurationsInput{} - } - - output = &DescribeVpcEndpointServiceConfigurationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcEndpointServiceConfigurations API operation for Amazon Elastic Compute Cloud. -// -// Describes the VPC endpoint service configurations in your account (your services). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpointServiceConfigurations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServiceConfigurations -func (c *EC2) DescribeVpcEndpointServiceConfigurations(input *DescribeVpcEndpointServiceConfigurationsInput) (*DescribeVpcEndpointServiceConfigurationsOutput, error) { - req, out := c.DescribeVpcEndpointServiceConfigurationsRequest(input) - return out, req.Send() -} - -// DescribeVpcEndpointServiceConfigurationsWithContext is the same as DescribeVpcEndpointServiceConfigurations with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcEndpointServiceConfigurations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointServiceConfigurationsWithContext(ctx aws.Context, input *DescribeVpcEndpointServiceConfigurationsInput, opts ...request.Option) (*DescribeVpcEndpointServiceConfigurationsOutput, error) { - req, out := c.DescribeVpcEndpointServiceConfigurationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcEndpointServiceConfigurationsPages iterates over the pages of a DescribeVpcEndpointServiceConfigurations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcEndpointServiceConfigurations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcEndpointServiceConfigurations operation. -// pageNum := 0 -// err := client.DescribeVpcEndpointServiceConfigurationsPages(params, -// func(page *ec2.DescribeVpcEndpointServiceConfigurationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcEndpointServiceConfigurationsPages(input *DescribeVpcEndpointServiceConfigurationsInput, fn func(*DescribeVpcEndpointServiceConfigurationsOutput, bool) bool) error { - return c.DescribeVpcEndpointServiceConfigurationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcEndpointServiceConfigurationsPagesWithContext same as DescribeVpcEndpointServiceConfigurationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointServiceConfigurationsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointServiceConfigurationsInput, fn func(*DescribeVpcEndpointServiceConfigurationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcEndpointServiceConfigurationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcEndpointServiceConfigurationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcEndpointServiceConfigurationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcEndpointServicePermissions = "DescribeVpcEndpointServicePermissions" - -// DescribeVpcEndpointServicePermissionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpointServicePermissions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcEndpointServicePermissions for more information on using the DescribeVpcEndpointServicePermissions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcEndpointServicePermissionsRequest method. -// req, resp := client.DescribeVpcEndpointServicePermissionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicePermissions -func (c *EC2) DescribeVpcEndpointServicePermissionsRequest(input *DescribeVpcEndpointServicePermissionsInput) (req *request.Request, output *DescribeVpcEndpointServicePermissionsOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpointServicePermissions, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcEndpointServicePermissionsInput{} - } - - output = &DescribeVpcEndpointServicePermissionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcEndpointServicePermissions API operation for Amazon Elastic Compute Cloud. -// -// Describes the principals (service consumers) that are permitted to discover -// your VPC endpoint service. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpointServicePermissions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicePermissions -func (c *EC2) DescribeVpcEndpointServicePermissions(input *DescribeVpcEndpointServicePermissionsInput) (*DescribeVpcEndpointServicePermissionsOutput, error) { - req, out := c.DescribeVpcEndpointServicePermissionsRequest(input) - return out, req.Send() -} - -// DescribeVpcEndpointServicePermissionsWithContext is the same as DescribeVpcEndpointServicePermissions with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcEndpointServicePermissions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointServicePermissionsWithContext(ctx aws.Context, input *DescribeVpcEndpointServicePermissionsInput, opts ...request.Option) (*DescribeVpcEndpointServicePermissionsOutput, error) { - req, out := c.DescribeVpcEndpointServicePermissionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcEndpointServicePermissionsPages iterates over the pages of a DescribeVpcEndpointServicePermissions operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcEndpointServicePermissions method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcEndpointServicePermissions operation. -// pageNum := 0 -// err := client.DescribeVpcEndpointServicePermissionsPages(params, -// func(page *ec2.DescribeVpcEndpointServicePermissionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcEndpointServicePermissionsPages(input *DescribeVpcEndpointServicePermissionsInput, fn func(*DescribeVpcEndpointServicePermissionsOutput, bool) bool) error { - return c.DescribeVpcEndpointServicePermissionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcEndpointServicePermissionsPagesWithContext same as DescribeVpcEndpointServicePermissionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointServicePermissionsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointServicePermissionsInput, fn func(*DescribeVpcEndpointServicePermissionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcEndpointServicePermissionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcEndpointServicePermissionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcEndpointServicePermissionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcEndpointServices = "DescribeVpcEndpointServices" - -// DescribeVpcEndpointServicesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpointServices operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcEndpointServices for more information on using the DescribeVpcEndpointServices -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcEndpointServicesRequest method. -// req, resp := client.DescribeVpcEndpointServicesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServices -func (c *EC2) DescribeVpcEndpointServicesRequest(input *DescribeVpcEndpointServicesInput) (req *request.Request, output *DescribeVpcEndpointServicesOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpointServices, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeVpcEndpointServicesInput{} - } - - output = &DescribeVpcEndpointServicesOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcEndpointServices API operation for Amazon Elastic Compute Cloud. -// -// Describes available services to which you can create a VPC endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpointServices for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServices -func (c *EC2) DescribeVpcEndpointServices(input *DescribeVpcEndpointServicesInput) (*DescribeVpcEndpointServicesOutput, error) { - req, out := c.DescribeVpcEndpointServicesRequest(input) - return out, req.Send() -} - -// DescribeVpcEndpointServicesWithContext is the same as DescribeVpcEndpointServices with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcEndpointServices for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointServicesWithContext(ctx aws.Context, input *DescribeVpcEndpointServicesInput, opts ...request.Option) (*DescribeVpcEndpointServicesOutput, error) { - req, out := c.DescribeVpcEndpointServicesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeVpcEndpoints = "DescribeVpcEndpoints" - -// DescribeVpcEndpointsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpoints operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcEndpoints for more information on using the DescribeVpcEndpoints -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcEndpointsRequest method. -// req, resp := client.DescribeVpcEndpointsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpoints -func (c *EC2) DescribeVpcEndpointsRequest(input *DescribeVpcEndpointsInput) (req *request.Request, output *DescribeVpcEndpointsOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpoints, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcEndpointsInput{} - } - - output = &DescribeVpcEndpointsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcEndpoints API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPC endpoints. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpoints for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpoints -func (c *EC2) DescribeVpcEndpoints(input *DescribeVpcEndpointsInput) (*DescribeVpcEndpointsOutput, error) { - req, out := c.DescribeVpcEndpointsRequest(input) - return out, req.Send() -} - -// DescribeVpcEndpointsWithContext is the same as DescribeVpcEndpoints with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcEndpoints for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointsWithContext(ctx aws.Context, input *DescribeVpcEndpointsInput, opts ...request.Option) (*DescribeVpcEndpointsOutput, error) { - req, out := c.DescribeVpcEndpointsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcEndpointsPages iterates over the pages of a DescribeVpcEndpoints operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcEndpoints method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcEndpoints operation. -// pageNum := 0 -// err := client.DescribeVpcEndpointsPages(params, -// func(page *ec2.DescribeVpcEndpointsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcEndpointsPages(input *DescribeVpcEndpointsInput, fn func(*DescribeVpcEndpointsOutput, bool) bool) error { - return c.DescribeVpcEndpointsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcEndpointsPagesWithContext same as DescribeVpcEndpointsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcEndpointsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointsInput, fn func(*DescribeVpcEndpointsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcEndpointsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcEndpointsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcEndpointsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcPeeringConnections = "DescribeVpcPeeringConnections" - -// DescribeVpcPeeringConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcPeeringConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcPeeringConnections for more information on using the DescribeVpcPeeringConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcPeeringConnectionsRequest method. -// req, resp := client.DescribeVpcPeeringConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnections -func (c *EC2) DescribeVpcPeeringConnectionsRequest(input *DescribeVpcPeeringConnectionsInput) (req *request.Request, output *DescribeVpcPeeringConnectionsOutput) { - op := &request.Operation{ - Name: opDescribeVpcPeeringConnections, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcPeeringConnectionsInput{} - } - - output = &DescribeVpcPeeringConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcPeeringConnections API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPC peering connections. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcPeeringConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnections -func (c *EC2) DescribeVpcPeeringConnections(input *DescribeVpcPeeringConnectionsInput) (*DescribeVpcPeeringConnectionsOutput, error) { - req, out := c.DescribeVpcPeeringConnectionsRequest(input) - return out, req.Send() -} - -// DescribeVpcPeeringConnectionsWithContext is the same as DescribeVpcPeeringConnections with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcPeeringConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcPeeringConnectionsWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, opts ...request.Option) (*DescribeVpcPeeringConnectionsOutput, error) { - req, out := c.DescribeVpcPeeringConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcPeeringConnectionsPages iterates over the pages of a DescribeVpcPeeringConnections operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcPeeringConnections method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcPeeringConnections operation. -// pageNum := 0 -// err := client.DescribeVpcPeeringConnectionsPages(params, -// func(page *ec2.DescribeVpcPeeringConnectionsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcPeeringConnectionsPages(input *DescribeVpcPeeringConnectionsInput, fn func(*DescribeVpcPeeringConnectionsOutput, bool) bool) error { - return c.DescribeVpcPeeringConnectionsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcPeeringConnectionsPagesWithContext same as DescribeVpcPeeringConnectionsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcPeeringConnectionsPagesWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, fn func(*DescribeVpcPeeringConnectionsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcPeeringConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcPeeringConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcPeeringConnectionsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpcs = "DescribeVpcs" - -// DescribeVpcsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcs operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpcs for more information on using the DescribeVpcs -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpcsRequest method. -// req, resp := client.DescribeVpcsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcs -func (c *EC2) DescribeVpcsRequest(input *DescribeVpcsInput) (req *request.Request, output *DescribeVpcsOutput) { - op := &request.Operation{ - Name: opDescribeVpcs, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &DescribeVpcsInput{} - } - - output = &DescribeVpcsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpcs API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPCs. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcs for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcs -func (c *EC2) DescribeVpcs(input *DescribeVpcsInput) (*DescribeVpcsOutput, error) { - req, out := c.DescribeVpcsRequest(input) - return out, req.Send() -} - -// DescribeVpcsWithContext is the same as DescribeVpcs with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpcs for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcsWithContext(ctx aws.Context, input *DescribeVpcsInput, opts ...request.Option) (*DescribeVpcsOutput, error) { - req, out := c.DescribeVpcsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// DescribeVpcsPages iterates over the pages of a DescribeVpcs operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVpcs method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVpcs operation. -// pageNum := 0 -// err := client.DescribeVpcsPages(params, -// func(page *ec2.DescribeVpcsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) DescribeVpcsPages(input *DescribeVpcsInput, fn func(*DescribeVpcsOutput, bool) bool) error { - return c.DescribeVpcsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// DescribeVpcsPagesWithContext same as DescribeVpcsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpcsPagesWithContext(ctx aws.Context, input *DescribeVpcsInput, fn func(*DescribeVpcsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *DescribeVpcsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*DescribeVpcsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opDescribeVpnConnections = "DescribeVpnConnections" - -// DescribeVpnConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpnConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpnConnections for more information on using the DescribeVpnConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpnConnectionsRequest method. -// req, resp := client.DescribeVpnConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnections -func (c *EC2) DescribeVpnConnectionsRequest(input *DescribeVpnConnectionsInput) (req *request.Request, output *DescribeVpnConnectionsOutput) { - op := &request.Operation{ - Name: opDescribeVpnConnections, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeVpnConnectionsInput{} - } - - output = &DescribeVpnConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpnConnections API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPN connections. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpnConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnections -func (c *EC2) DescribeVpnConnections(input *DescribeVpnConnectionsInput) (*DescribeVpnConnectionsOutput, error) { - req, out := c.DescribeVpnConnectionsRequest(input) - return out, req.Send() -} - -// DescribeVpnConnectionsWithContext is the same as DescribeVpnConnections with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpnConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpnConnectionsWithContext(ctx aws.Context, input *DescribeVpnConnectionsInput, opts ...request.Option) (*DescribeVpnConnectionsOutput, error) { - req, out := c.DescribeVpnConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDescribeVpnGateways = "DescribeVpnGateways" - -// DescribeVpnGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpnGateways operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DescribeVpnGateways for more information on using the DescribeVpnGateways -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DescribeVpnGatewaysRequest method. -// req, resp := client.DescribeVpnGatewaysRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGateways -func (c *EC2) DescribeVpnGatewaysRequest(input *DescribeVpnGatewaysInput) (req *request.Request, output *DescribeVpnGatewaysOutput) { - op := &request.Operation{ - Name: opDescribeVpnGateways, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DescribeVpnGatewaysInput{} - } - - output = &DescribeVpnGatewaysOutput{} - req = c.newRequest(op, input, output) - return -} - -// DescribeVpnGateways API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your virtual private gateways. -// -// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpnGateways for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGateways -func (c *EC2) DescribeVpnGateways(input *DescribeVpnGatewaysInput) (*DescribeVpnGatewaysOutput, error) { - req, out := c.DescribeVpnGatewaysRequest(input) - return out, req.Send() -} - -// DescribeVpnGatewaysWithContext is the same as DescribeVpnGateways with the addition of -// the ability to pass a context and additional request options. -// -// See DescribeVpnGateways for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DescribeVpnGatewaysWithContext(ctx aws.Context, input *DescribeVpnGatewaysInput, opts ...request.Option) (*DescribeVpnGatewaysOutput, error) { - req, out := c.DescribeVpnGatewaysRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDetachClassicLinkVpc = "DetachClassicLinkVpc" - -// DetachClassicLinkVpcRequest generates a "aws/request.Request" representing the -// client's request for the DetachClassicLinkVpc operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DetachClassicLinkVpc for more information on using the DetachClassicLinkVpc -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DetachClassicLinkVpcRequest method. -// req, resp := client.DetachClassicLinkVpcRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpc -func (c *EC2) DetachClassicLinkVpcRequest(input *DetachClassicLinkVpcInput) (req *request.Request, output *DetachClassicLinkVpcOutput) { - op := &request.Operation{ - Name: opDetachClassicLinkVpc, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DetachClassicLinkVpcInput{} - } - - output = &DetachClassicLinkVpcOutput{} - req = c.newRequest(op, input, output) - return -} - -// DetachClassicLinkVpc API operation for Amazon Elastic Compute Cloud. -// -// Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance -// has been unlinked, the VPC security groups are no longer associated with -// it. An instance is automatically unlinked from a VPC when it's stopped. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachClassicLinkVpc for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpc -func (c *EC2) DetachClassicLinkVpc(input *DetachClassicLinkVpcInput) (*DetachClassicLinkVpcOutput, error) { - req, out := c.DetachClassicLinkVpcRequest(input) - return out, req.Send() -} - -// DetachClassicLinkVpcWithContext is the same as DetachClassicLinkVpc with the addition of -// the ability to pass a context and additional request options. -// -// See DetachClassicLinkVpc for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DetachClassicLinkVpcWithContext(ctx aws.Context, input *DetachClassicLinkVpcInput, opts ...request.Option) (*DetachClassicLinkVpcOutput, error) { - req, out := c.DetachClassicLinkVpcRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDetachInternetGateway = "DetachInternetGateway" - -// DetachInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DetachInternetGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DetachInternetGateway for more information on using the DetachInternetGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DetachInternetGatewayRequest method. -// req, resp := client.DetachInternetGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGateway -func (c *EC2) DetachInternetGatewayRequest(input *DetachInternetGatewayInput) (req *request.Request, output *DetachInternetGatewayOutput) { - op := &request.Operation{ - Name: opDetachInternetGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DetachInternetGatewayInput{} - } - - output = &DetachInternetGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DetachInternetGateway API operation for Amazon Elastic Compute Cloud. -// -// Detaches an internet gateway from a VPC, disabling connectivity between the -// internet and the VPC. The VPC must not contain any running instances with -// Elastic IP addresses or public IPv4 addresses. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachInternetGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGateway -func (c *EC2) DetachInternetGateway(input *DetachInternetGatewayInput) (*DetachInternetGatewayOutput, error) { - req, out := c.DetachInternetGatewayRequest(input) - return out, req.Send() -} - -// DetachInternetGatewayWithContext is the same as DetachInternetGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DetachInternetGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DetachInternetGatewayWithContext(ctx aws.Context, input *DetachInternetGatewayInput, opts ...request.Option) (*DetachInternetGatewayOutput, error) { - req, out := c.DetachInternetGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDetachNetworkInterface = "DetachNetworkInterface" - -// DetachNetworkInterfaceRequest generates a "aws/request.Request" representing the -// client's request for the DetachNetworkInterface operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DetachNetworkInterface for more information on using the DetachNetworkInterface -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DetachNetworkInterfaceRequest method. -// req, resp := client.DetachNetworkInterfaceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterface -func (c *EC2) DetachNetworkInterfaceRequest(input *DetachNetworkInterfaceInput) (req *request.Request, output *DetachNetworkInterfaceOutput) { - op := &request.Operation{ - Name: opDetachNetworkInterface, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DetachNetworkInterfaceInput{} - } - - output = &DetachNetworkInterfaceOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DetachNetworkInterface API operation for Amazon Elastic Compute Cloud. -// -// Detaches a network interface from an instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachNetworkInterface for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterface -func (c *EC2) DetachNetworkInterface(input *DetachNetworkInterfaceInput) (*DetachNetworkInterfaceOutput, error) { - req, out := c.DetachNetworkInterfaceRequest(input) - return out, req.Send() -} - -// DetachNetworkInterfaceWithContext is the same as DetachNetworkInterface with the addition of -// the ability to pass a context and additional request options. -// -// See DetachNetworkInterface for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DetachNetworkInterfaceWithContext(ctx aws.Context, input *DetachNetworkInterfaceInput, opts ...request.Option) (*DetachNetworkInterfaceOutput, error) { - req, out := c.DetachNetworkInterfaceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDetachVolume = "DetachVolume" - -// DetachVolumeRequest generates a "aws/request.Request" representing the -// client's request for the DetachVolume operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DetachVolume for more information on using the DetachVolume -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DetachVolumeRequest method. -// req, resp := client.DetachVolumeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolume -func (c *EC2) DetachVolumeRequest(input *DetachVolumeInput) (req *request.Request, output *VolumeAttachment) { - op := &request.Operation{ - Name: opDetachVolume, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DetachVolumeInput{} - } - - output = &VolumeAttachment{} - req = c.newRequest(op, input, output) - return -} - -// DetachVolume API operation for Amazon Elastic Compute Cloud. -// -// Detaches an EBS volume from an instance. Make sure to unmount any file systems -// on the device within your operating system before detaching the volume. Failure -// to do so can result in the volume becoming stuck in the busy state while -// detaching. If this happens, detachment can be delayed indefinitely until -// you unmount the volume, force detachment, reboot the instance, or all three. -// If an EBS volume is the root device of an instance, it can't be detached -// while the instance is running. To detach the root volume, stop the instance -// first. -// -// When a volume with an AWS Marketplace product code is detached from an instance, -// the product code is no longer associated with the instance. -// -// For more information, see Detaching an Amazon EBS Volume (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachVolume for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolume -func (c *EC2) DetachVolume(input *DetachVolumeInput) (*VolumeAttachment, error) { - req, out := c.DetachVolumeRequest(input) - return out, req.Send() -} - -// DetachVolumeWithContext is the same as DetachVolume with the addition of -// the ability to pass a context and additional request options. -// -// See DetachVolume for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DetachVolumeWithContext(ctx aws.Context, input *DetachVolumeInput, opts ...request.Option) (*VolumeAttachment, error) { - req, out := c.DetachVolumeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDetachVpnGateway = "DetachVpnGateway" - -// DetachVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DetachVpnGateway operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DetachVpnGateway for more information on using the DetachVpnGateway -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DetachVpnGatewayRequest method. -// req, resp := client.DetachVpnGatewayRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGateway -func (c *EC2) DetachVpnGatewayRequest(input *DetachVpnGatewayInput) (req *request.Request, output *DetachVpnGatewayOutput) { - op := &request.Operation{ - Name: opDetachVpnGateway, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DetachVpnGatewayInput{} - } - - output = &DetachVpnGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DetachVpnGateway API operation for Amazon Elastic Compute Cloud. -// -// Detaches a virtual private gateway from a VPC. You do this if you're planning -// to turn off the VPC and not use it anymore. You can confirm a virtual private -// gateway has been completely detached from a VPC by describing the virtual -// private gateway (any attachments to the virtual private gateway are also -// described). -// -// You must wait for the attachment's state to switch to detached before you -// can delete the VPC or attach a different VPC to the virtual private gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachVpnGateway for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGateway -func (c *EC2) DetachVpnGateway(input *DetachVpnGatewayInput) (*DetachVpnGatewayOutput, error) { - req, out := c.DetachVpnGatewayRequest(input) - return out, req.Send() -} - -// DetachVpnGatewayWithContext is the same as DetachVpnGateway with the addition of -// the ability to pass a context and additional request options. -// -// See DetachVpnGateway for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DetachVpnGatewayWithContext(ctx aws.Context, input *DetachVpnGatewayInput, opts ...request.Option) (*DetachVpnGatewayOutput, error) { - req, out := c.DetachVpnGatewayRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisableEbsEncryptionByDefault = "DisableEbsEncryptionByDefault" - -// DisableEbsEncryptionByDefaultRequest generates a "aws/request.Request" representing the -// client's request for the DisableEbsEncryptionByDefault operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisableEbsEncryptionByDefault for more information on using the DisableEbsEncryptionByDefault -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisableEbsEncryptionByDefaultRequest method. -// req, resp := client.DisableEbsEncryptionByDefaultRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableEbsEncryptionByDefault -func (c *EC2) DisableEbsEncryptionByDefaultRequest(input *DisableEbsEncryptionByDefaultInput) (req *request.Request, output *DisableEbsEncryptionByDefaultOutput) { - op := &request.Operation{ - Name: opDisableEbsEncryptionByDefault, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisableEbsEncryptionByDefaultInput{} - } - - output = &DisableEbsEncryptionByDefaultOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisableEbsEncryptionByDefault API operation for Amazon Elastic Compute Cloud. -// -// Disables EBS encryption by default for your account in the current Region. -// -// After you disable encryption by default, you can still create encrypted volumes -// by enabling encryption when you create each volume. -// -// Disabling encryption by default does not change the encryption status of -// your existing volumes. -// -// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableEbsEncryptionByDefault for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableEbsEncryptionByDefault -func (c *EC2) DisableEbsEncryptionByDefault(input *DisableEbsEncryptionByDefaultInput) (*DisableEbsEncryptionByDefaultOutput, error) { - req, out := c.DisableEbsEncryptionByDefaultRequest(input) - return out, req.Send() -} - -// DisableEbsEncryptionByDefaultWithContext is the same as DisableEbsEncryptionByDefault with the addition of -// the ability to pass a context and additional request options. -// -// See DisableEbsEncryptionByDefault for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisableEbsEncryptionByDefaultWithContext(ctx aws.Context, input *DisableEbsEncryptionByDefaultInput, opts ...request.Option) (*DisableEbsEncryptionByDefaultOutput, error) { - req, out := c.DisableEbsEncryptionByDefaultRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisableFastSnapshotRestores = "DisableFastSnapshotRestores" - -// DisableFastSnapshotRestoresRequest generates a "aws/request.Request" representing the -// client's request for the DisableFastSnapshotRestores operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisableFastSnapshotRestores for more information on using the DisableFastSnapshotRestores -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisableFastSnapshotRestoresRequest method. -// req, resp := client.DisableFastSnapshotRestoresRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestores -func (c *EC2) DisableFastSnapshotRestoresRequest(input *DisableFastSnapshotRestoresInput) (req *request.Request, output *DisableFastSnapshotRestoresOutput) { - op := &request.Operation{ - Name: opDisableFastSnapshotRestores, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisableFastSnapshotRestoresInput{} - } - - output = &DisableFastSnapshotRestoresOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisableFastSnapshotRestores API operation for Amazon Elastic Compute Cloud. -// -// Disables fast snapshot restores for the specified snapshots in the specified -// Availability Zones. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableFastSnapshotRestores for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestores -func (c *EC2) DisableFastSnapshotRestores(input *DisableFastSnapshotRestoresInput) (*DisableFastSnapshotRestoresOutput, error) { - req, out := c.DisableFastSnapshotRestoresRequest(input) - return out, req.Send() -} - -// DisableFastSnapshotRestoresWithContext is the same as DisableFastSnapshotRestores with the addition of -// the ability to pass a context and additional request options. -// -// See DisableFastSnapshotRestores for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisableFastSnapshotRestoresWithContext(ctx aws.Context, input *DisableFastSnapshotRestoresInput, opts ...request.Option) (*DisableFastSnapshotRestoresOutput, error) { - req, out := c.DisableFastSnapshotRestoresRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisableTransitGatewayRouteTablePropagation = "DisableTransitGatewayRouteTablePropagation" - -// DisableTransitGatewayRouteTablePropagationRequest generates a "aws/request.Request" representing the -// client's request for the DisableTransitGatewayRouteTablePropagation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisableTransitGatewayRouteTablePropagation for more information on using the DisableTransitGatewayRouteTablePropagation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisableTransitGatewayRouteTablePropagationRequest method. -// req, resp := client.DisableTransitGatewayRouteTablePropagationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableTransitGatewayRouteTablePropagation -func (c *EC2) DisableTransitGatewayRouteTablePropagationRequest(input *DisableTransitGatewayRouteTablePropagationInput) (req *request.Request, output *DisableTransitGatewayRouteTablePropagationOutput) { - op := &request.Operation{ - Name: opDisableTransitGatewayRouteTablePropagation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisableTransitGatewayRouteTablePropagationInput{} - } - - output = &DisableTransitGatewayRouteTablePropagationOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisableTransitGatewayRouteTablePropagation API operation for Amazon Elastic Compute Cloud. -// -// Disables the specified resource attachment from propagating routes to the -// specified propagation route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableTransitGatewayRouteTablePropagation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableTransitGatewayRouteTablePropagation -func (c *EC2) DisableTransitGatewayRouteTablePropagation(input *DisableTransitGatewayRouteTablePropagationInput) (*DisableTransitGatewayRouteTablePropagationOutput, error) { - req, out := c.DisableTransitGatewayRouteTablePropagationRequest(input) - return out, req.Send() -} - -// DisableTransitGatewayRouteTablePropagationWithContext is the same as DisableTransitGatewayRouteTablePropagation with the addition of -// the ability to pass a context and additional request options. -// -// See DisableTransitGatewayRouteTablePropagation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisableTransitGatewayRouteTablePropagationWithContext(ctx aws.Context, input *DisableTransitGatewayRouteTablePropagationInput, opts ...request.Option) (*DisableTransitGatewayRouteTablePropagationOutput, error) { - req, out := c.DisableTransitGatewayRouteTablePropagationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisableVgwRoutePropagation = "DisableVgwRoutePropagation" - -// DisableVgwRoutePropagationRequest generates a "aws/request.Request" representing the -// client's request for the DisableVgwRoutePropagation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisableVgwRoutePropagation for more information on using the DisableVgwRoutePropagation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisableVgwRoutePropagationRequest method. -// req, resp := client.DisableVgwRoutePropagationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagation -func (c *EC2) DisableVgwRoutePropagationRequest(input *DisableVgwRoutePropagationInput) (req *request.Request, output *DisableVgwRoutePropagationOutput) { - op := &request.Operation{ - Name: opDisableVgwRoutePropagation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisableVgwRoutePropagationInput{} - } - - output = &DisableVgwRoutePropagationOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DisableVgwRoutePropagation API operation for Amazon Elastic Compute Cloud. -// -// Disables a virtual private gateway (VGW) from propagating routes to a specified -// route table of a VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableVgwRoutePropagation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagation -func (c *EC2) DisableVgwRoutePropagation(input *DisableVgwRoutePropagationInput) (*DisableVgwRoutePropagationOutput, error) { - req, out := c.DisableVgwRoutePropagationRequest(input) - return out, req.Send() -} - -// DisableVgwRoutePropagationWithContext is the same as DisableVgwRoutePropagation with the addition of -// the ability to pass a context and additional request options. -// -// See DisableVgwRoutePropagation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisableVgwRoutePropagationWithContext(ctx aws.Context, input *DisableVgwRoutePropagationInput, opts ...request.Option) (*DisableVgwRoutePropagationOutput, error) { - req, out := c.DisableVgwRoutePropagationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisableVpcClassicLink = "DisableVpcClassicLink" - -// DisableVpcClassicLinkRequest generates a "aws/request.Request" representing the -// client's request for the DisableVpcClassicLink operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisableVpcClassicLink for more information on using the DisableVpcClassicLink -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisableVpcClassicLinkRequest method. -// req, resp := client.DisableVpcClassicLinkRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLink -func (c *EC2) DisableVpcClassicLinkRequest(input *DisableVpcClassicLinkInput) (req *request.Request, output *DisableVpcClassicLinkOutput) { - op := &request.Operation{ - Name: opDisableVpcClassicLink, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisableVpcClassicLinkInput{} - } - - output = &DisableVpcClassicLinkOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisableVpcClassicLink API operation for Amazon Elastic Compute Cloud. -// -// Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC -// that has EC2-Classic instances linked to it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableVpcClassicLink for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLink -func (c *EC2) DisableVpcClassicLink(input *DisableVpcClassicLinkInput) (*DisableVpcClassicLinkOutput, error) { - req, out := c.DisableVpcClassicLinkRequest(input) - return out, req.Send() -} - -// DisableVpcClassicLinkWithContext is the same as DisableVpcClassicLink with the addition of -// the ability to pass a context and additional request options. -// -// See DisableVpcClassicLink for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisableVpcClassicLinkWithContext(ctx aws.Context, input *DisableVpcClassicLinkInput, opts ...request.Option) (*DisableVpcClassicLinkOutput, error) { - req, out := c.DisableVpcClassicLinkRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisableVpcClassicLinkDnsSupport = "DisableVpcClassicLinkDnsSupport" - -// DisableVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the -// client's request for the DisableVpcClassicLinkDnsSupport operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisableVpcClassicLinkDnsSupport for more information on using the DisableVpcClassicLinkDnsSupport -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisableVpcClassicLinkDnsSupportRequest method. -// req, resp := client.DisableVpcClassicLinkDnsSupportRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupport -func (c *EC2) DisableVpcClassicLinkDnsSupportRequest(input *DisableVpcClassicLinkDnsSupportInput) (req *request.Request, output *DisableVpcClassicLinkDnsSupportOutput) { - op := &request.Operation{ - Name: opDisableVpcClassicLinkDnsSupport, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisableVpcClassicLinkDnsSupportInput{} - } - - output = &DisableVpcClassicLinkDnsSupportOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisableVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. -// -// Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve -// to public IP addresses when addressed between a linked EC2-Classic instance -// and instances in the VPC to which it's linked. For more information, see -// ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableVpcClassicLinkDnsSupport for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupport -func (c *EC2) DisableVpcClassicLinkDnsSupport(input *DisableVpcClassicLinkDnsSupportInput) (*DisableVpcClassicLinkDnsSupportOutput, error) { - req, out := c.DisableVpcClassicLinkDnsSupportRequest(input) - return out, req.Send() -} - -// DisableVpcClassicLinkDnsSupportWithContext is the same as DisableVpcClassicLinkDnsSupport with the addition of -// the ability to pass a context and additional request options. -// -// See DisableVpcClassicLinkDnsSupport for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisableVpcClassicLinkDnsSupportWithContext(ctx aws.Context, input *DisableVpcClassicLinkDnsSupportInput, opts ...request.Option) (*DisableVpcClassicLinkDnsSupportOutput, error) { - req, out := c.DisableVpcClassicLinkDnsSupportRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateAddress = "DisassociateAddress" - -// DisassociateAddressRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateAddress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateAddress for more information on using the DisassociateAddress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateAddressRequest method. -// req, resp := client.DisassociateAddressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddress -func (c *EC2) DisassociateAddressRequest(input *DisassociateAddressInput) (req *request.Request, output *DisassociateAddressOutput) { - op := &request.Operation{ - Name: opDisassociateAddress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateAddressInput{} - } - - output = &DisassociateAddressOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DisassociateAddress API operation for Amazon Elastic Compute Cloud. -// -// Disassociates an Elastic IP address from the instance or network interface -// it's associated with. -// -// An Elastic IP address is for use in either the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// This is an idempotent operation. If you perform the operation more than once, -// Amazon EC2 doesn't return an error. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateAddress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddress -func (c *EC2) DisassociateAddress(input *DisassociateAddressInput) (*DisassociateAddressOutput, error) { - req, out := c.DisassociateAddressRequest(input) - return out, req.Send() -} - -// DisassociateAddressWithContext is the same as DisassociateAddress with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateAddress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateAddressWithContext(ctx aws.Context, input *DisassociateAddressInput, opts ...request.Option) (*DisassociateAddressOutput, error) { - req, out := c.DisassociateAddressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateClientVpnTargetNetwork = "DisassociateClientVpnTargetNetwork" - -// DisassociateClientVpnTargetNetworkRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateClientVpnTargetNetwork operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateClientVpnTargetNetwork for more information on using the DisassociateClientVpnTargetNetwork -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateClientVpnTargetNetworkRequest method. -// req, resp := client.DisassociateClientVpnTargetNetworkRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateClientVpnTargetNetwork -func (c *EC2) DisassociateClientVpnTargetNetworkRequest(input *DisassociateClientVpnTargetNetworkInput) (req *request.Request, output *DisassociateClientVpnTargetNetworkOutput) { - op := &request.Operation{ - Name: opDisassociateClientVpnTargetNetwork, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateClientVpnTargetNetworkInput{} - } - - output = &DisassociateClientVpnTargetNetworkOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisassociateClientVpnTargetNetwork API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a target network from the specified Client VPN endpoint. When -// you disassociate the last target network from a Client VPN, the following -// happens: -// -// * The route that was automatically added for the VPC is deleted -// -// * All active client connections are terminated -// -// * New client connections are disallowed -// -// * The Client VPN endpoint's status changes to pending-associate -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateClientVpnTargetNetwork for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateClientVpnTargetNetwork -func (c *EC2) DisassociateClientVpnTargetNetwork(input *DisassociateClientVpnTargetNetworkInput) (*DisassociateClientVpnTargetNetworkOutput, error) { - req, out := c.DisassociateClientVpnTargetNetworkRequest(input) - return out, req.Send() -} - -// DisassociateClientVpnTargetNetworkWithContext is the same as DisassociateClientVpnTargetNetwork with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateClientVpnTargetNetwork for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateClientVpnTargetNetworkWithContext(ctx aws.Context, input *DisassociateClientVpnTargetNetworkInput, opts ...request.Option) (*DisassociateClientVpnTargetNetworkOutput, error) { - req, out := c.DisassociateClientVpnTargetNetworkRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateIamInstanceProfile = "DisassociateIamInstanceProfile" - -// DisassociateIamInstanceProfileRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateIamInstanceProfile operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateIamInstanceProfile for more information on using the DisassociateIamInstanceProfile -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateIamInstanceProfileRequest method. -// req, resp := client.DisassociateIamInstanceProfileRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfile -func (c *EC2) DisassociateIamInstanceProfileRequest(input *DisassociateIamInstanceProfileInput) (req *request.Request, output *DisassociateIamInstanceProfileOutput) { - op := &request.Operation{ - Name: opDisassociateIamInstanceProfile, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateIamInstanceProfileInput{} - } - - output = &DisassociateIamInstanceProfileOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisassociateIamInstanceProfile API operation for Amazon Elastic Compute Cloud. -// -// Disassociates an IAM instance profile from a running or stopped instance. -// -// Use DescribeIamInstanceProfileAssociations to get the association ID. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateIamInstanceProfile for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfile -func (c *EC2) DisassociateIamInstanceProfile(input *DisassociateIamInstanceProfileInput) (*DisassociateIamInstanceProfileOutput, error) { - req, out := c.DisassociateIamInstanceProfileRequest(input) - return out, req.Send() -} - -// DisassociateIamInstanceProfileWithContext is the same as DisassociateIamInstanceProfile with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateIamInstanceProfile for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateIamInstanceProfileWithContext(ctx aws.Context, input *DisassociateIamInstanceProfileInput, opts ...request.Option) (*DisassociateIamInstanceProfileOutput, error) { - req, out := c.DisassociateIamInstanceProfileRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateRouteTable = "DisassociateRouteTable" - -// DisassociateRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateRouteTable for more information on using the DisassociateRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateRouteTableRequest method. -// req, resp := client.DisassociateRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTable -func (c *EC2) DisassociateRouteTableRequest(input *DisassociateRouteTableInput) (req *request.Request, output *DisassociateRouteTableOutput) { - op := &request.Operation{ - Name: opDisassociateRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateRouteTableInput{} - } - - output = &DisassociateRouteTableOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// DisassociateRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a subnet from a route table. -// -// After you perform this action, the subnet no longer uses the routes in the -// route table. Instead, it uses the routes in the VPC's main route table. For -// more information about route tables, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTable -func (c *EC2) DisassociateRouteTable(input *DisassociateRouteTableInput) (*DisassociateRouteTableOutput, error) { - req, out := c.DisassociateRouteTableRequest(input) - return out, req.Send() -} - -// DisassociateRouteTableWithContext is the same as DisassociateRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateRouteTableWithContext(ctx aws.Context, input *DisassociateRouteTableInput, opts ...request.Option) (*DisassociateRouteTableOutput, error) { - req, out := c.DisassociateRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateSubnetCidrBlock = "DisassociateSubnetCidrBlock" - -// DisassociateSubnetCidrBlockRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateSubnetCidrBlock operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateSubnetCidrBlock for more information on using the DisassociateSubnetCidrBlock -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateSubnetCidrBlockRequest method. -// req, resp := client.DisassociateSubnetCidrBlockRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlock -func (c *EC2) DisassociateSubnetCidrBlockRequest(input *DisassociateSubnetCidrBlockInput) (req *request.Request, output *DisassociateSubnetCidrBlockOutput) { - op := &request.Operation{ - Name: opDisassociateSubnetCidrBlock, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateSubnetCidrBlockInput{} - } - - output = &DisassociateSubnetCidrBlockOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisassociateSubnetCidrBlock API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a CIDR block from a subnet. Currently, you can disassociate -// an IPv6 CIDR block only. You must detach or delete all gateways and resources -// that are associated with the CIDR block before you can disassociate it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateSubnetCidrBlock for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlock -func (c *EC2) DisassociateSubnetCidrBlock(input *DisassociateSubnetCidrBlockInput) (*DisassociateSubnetCidrBlockOutput, error) { - req, out := c.DisassociateSubnetCidrBlockRequest(input) - return out, req.Send() -} - -// DisassociateSubnetCidrBlockWithContext is the same as DisassociateSubnetCidrBlock with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateSubnetCidrBlock for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateSubnetCidrBlockWithContext(ctx aws.Context, input *DisassociateSubnetCidrBlockInput, opts ...request.Option) (*DisassociateSubnetCidrBlockOutput, error) { - req, out := c.DisassociateSubnetCidrBlockRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateTransitGatewayRouteTable = "DisassociateTransitGatewayRouteTable" - -// DisassociateTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateTransitGatewayRouteTable operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateTransitGatewayRouteTable for more information on using the DisassociateTransitGatewayRouteTable -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateTransitGatewayRouteTableRequest method. -// req, resp := client.DisassociateTransitGatewayRouteTableRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayRouteTable -func (c *EC2) DisassociateTransitGatewayRouteTableRequest(input *DisassociateTransitGatewayRouteTableInput) (req *request.Request, output *DisassociateTransitGatewayRouteTableOutput) { - op := &request.Operation{ - Name: opDisassociateTransitGatewayRouteTable, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateTransitGatewayRouteTableInput{} - } - - output = &DisassociateTransitGatewayRouteTableOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisassociateTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a resource attachment from a transit gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateTransitGatewayRouteTable for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayRouteTable -func (c *EC2) DisassociateTransitGatewayRouteTable(input *DisassociateTransitGatewayRouteTableInput) (*DisassociateTransitGatewayRouteTableOutput, error) { - req, out := c.DisassociateTransitGatewayRouteTableRequest(input) - return out, req.Send() -} - -// DisassociateTransitGatewayRouteTableWithContext is the same as DisassociateTransitGatewayRouteTable with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateTransitGatewayRouteTable for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateTransitGatewayRouteTableWithContext(ctx aws.Context, input *DisassociateTransitGatewayRouteTableInput, opts ...request.Option) (*DisassociateTransitGatewayRouteTableOutput, error) { - req, out := c.DisassociateTransitGatewayRouteTableRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDisassociateVpcCidrBlock = "DisassociateVpcCidrBlock" - -// DisassociateVpcCidrBlockRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateVpcCidrBlock operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DisassociateVpcCidrBlock for more information on using the DisassociateVpcCidrBlock -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DisassociateVpcCidrBlockRequest method. -// req, resp := client.DisassociateVpcCidrBlockRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlock -func (c *EC2) DisassociateVpcCidrBlockRequest(input *DisassociateVpcCidrBlockInput) (req *request.Request, output *DisassociateVpcCidrBlockOutput) { - op := &request.Operation{ - Name: opDisassociateVpcCidrBlock, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DisassociateVpcCidrBlockInput{} - } - - output = &DisassociateVpcCidrBlockOutput{} - req = c.newRequest(op, input, output) - return -} - -// DisassociateVpcCidrBlock API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a CIDR block from a VPC. To disassociate the CIDR block, you -// must specify its association ID. You can get the association ID by using -// DescribeVpcs. You must detach or delete all gateways and resources that are -// associated with the CIDR block before you can disassociate it. -// -// You cannot disassociate the CIDR block with which you originally created -// the VPC (the primary CIDR block). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateVpcCidrBlock for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlock -func (c *EC2) DisassociateVpcCidrBlock(input *DisassociateVpcCidrBlockInput) (*DisassociateVpcCidrBlockOutput, error) { - req, out := c.DisassociateVpcCidrBlockRequest(input) - return out, req.Send() -} - -// DisassociateVpcCidrBlockWithContext is the same as DisassociateVpcCidrBlock with the addition of -// the ability to pass a context and additional request options. -// -// See DisassociateVpcCidrBlock for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) DisassociateVpcCidrBlockWithContext(ctx aws.Context, input *DisassociateVpcCidrBlockInput, opts ...request.Option) (*DisassociateVpcCidrBlockOutput, error) { - req, out := c.DisassociateVpcCidrBlockRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableEbsEncryptionByDefault = "EnableEbsEncryptionByDefault" - -// EnableEbsEncryptionByDefaultRequest generates a "aws/request.Request" representing the -// client's request for the EnableEbsEncryptionByDefault operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableEbsEncryptionByDefault for more information on using the EnableEbsEncryptionByDefault -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableEbsEncryptionByDefaultRequest method. -// req, resp := client.EnableEbsEncryptionByDefaultRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableEbsEncryptionByDefault -func (c *EC2) EnableEbsEncryptionByDefaultRequest(input *EnableEbsEncryptionByDefaultInput) (req *request.Request, output *EnableEbsEncryptionByDefaultOutput) { - op := &request.Operation{ - Name: opEnableEbsEncryptionByDefault, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableEbsEncryptionByDefaultInput{} - } - - output = &EnableEbsEncryptionByDefaultOutput{} - req = c.newRequest(op, input, output) - return -} - -// EnableEbsEncryptionByDefault API operation for Amazon Elastic Compute Cloud. -// -// Enables EBS encryption by default for your account in the current Region. -// -// After you enable encryption by default, the EBS volumes that you create are -// are always encrypted, either using the default CMK or the CMK that you specified -// when you created each volume. For more information, see Amazon EBS Encryption -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// You can specify the default CMK for encryption by default using ModifyEbsDefaultKmsKeyId -// or ResetEbsDefaultKmsKeyId. -// -// Enabling encryption by default has no effect on the encryption status of -// your existing volumes. -// -// After you enable encryption by default, you can no longer launch instances -// using instance types that do not support encryption. For more information, -// see Supported Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableEbsEncryptionByDefault for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableEbsEncryptionByDefault -func (c *EC2) EnableEbsEncryptionByDefault(input *EnableEbsEncryptionByDefaultInput) (*EnableEbsEncryptionByDefaultOutput, error) { - req, out := c.EnableEbsEncryptionByDefaultRequest(input) - return out, req.Send() -} - -// EnableEbsEncryptionByDefaultWithContext is the same as EnableEbsEncryptionByDefault with the addition of -// the ability to pass a context and additional request options. -// -// See EnableEbsEncryptionByDefault for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableEbsEncryptionByDefaultWithContext(ctx aws.Context, input *EnableEbsEncryptionByDefaultInput, opts ...request.Option) (*EnableEbsEncryptionByDefaultOutput, error) { - req, out := c.EnableEbsEncryptionByDefaultRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableFastSnapshotRestores = "EnableFastSnapshotRestores" - -// EnableFastSnapshotRestoresRequest generates a "aws/request.Request" representing the -// client's request for the EnableFastSnapshotRestores operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableFastSnapshotRestores for more information on using the EnableFastSnapshotRestores -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableFastSnapshotRestoresRequest method. -// req, resp := client.EnableFastSnapshotRestoresRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestores -func (c *EC2) EnableFastSnapshotRestoresRequest(input *EnableFastSnapshotRestoresInput) (req *request.Request, output *EnableFastSnapshotRestoresOutput) { - op := &request.Operation{ - Name: opEnableFastSnapshotRestores, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableFastSnapshotRestoresInput{} - } - - output = &EnableFastSnapshotRestoresOutput{} - req = c.newRequest(op, input, output) - return -} - -// EnableFastSnapshotRestores API operation for Amazon Elastic Compute Cloud. -// -// Enables fast snapshot restores for the specified snapshots in the specified -// Availability Zones. -// -// You get the full benefit of fast snapshot restores after they enter the enabled -// state. To get the current state of fast snapshot restores, use DescribeFastSnapshotRestores. -// To disable fast snapshot restores, use DisableFastSnapshotRestores. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableFastSnapshotRestores for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestores -func (c *EC2) EnableFastSnapshotRestores(input *EnableFastSnapshotRestoresInput) (*EnableFastSnapshotRestoresOutput, error) { - req, out := c.EnableFastSnapshotRestoresRequest(input) - return out, req.Send() -} - -// EnableFastSnapshotRestoresWithContext is the same as EnableFastSnapshotRestores with the addition of -// the ability to pass a context and additional request options. -// -// See EnableFastSnapshotRestores for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableFastSnapshotRestoresWithContext(ctx aws.Context, input *EnableFastSnapshotRestoresInput, opts ...request.Option) (*EnableFastSnapshotRestoresOutput, error) { - req, out := c.EnableFastSnapshotRestoresRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableTransitGatewayRouteTablePropagation = "EnableTransitGatewayRouteTablePropagation" - -// EnableTransitGatewayRouteTablePropagationRequest generates a "aws/request.Request" representing the -// client's request for the EnableTransitGatewayRouteTablePropagation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableTransitGatewayRouteTablePropagation for more information on using the EnableTransitGatewayRouteTablePropagation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableTransitGatewayRouteTablePropagationRequest method. -// req, resp := client.EnableTransitGatewayRouteTablePropagationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableTransitGatewayRouteTablePropagation -func (c *EC2) EnableTransitGatewayRouteTablePropagationRequest(input *EnableTransitGatewayRouteTablePropagationInput) (req *request.Request, output *EnableTransitGatewayRouteTablePropagationOutput) { - op := &request.Operation{ - Name: opEnableTransitGatewayRouteTablePropagation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableTransitGatewayRouteTablePropagationInput{} - } - - output = &EnableTransitGatewayRouteTablePropagationOutput{} - req = c.newRequest(op, input, output) - return -} - -// EnableTransitGatewayRouteTablePropagation API operation for Amazon Elastic Compute Cloud. -// -// Enables the specified attachment to propagate routes to the specified propagation -// route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableTransitGatewayRouteTablePropagation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableTransitGatewayRouteTablePropagation -func (c *EC2) EnableTransitGatewayRouteTablePropagation(input *EnableTransitGatewayRouteTablePropagationInput) (*EnableTransitGatewayRouteTablePropagationOutput, error) { - req, out := c.EnableTransitGatewayRouteTablePropagationRequest(input) - return out, req.Send() -} - -// EnableTransitGatewayRouteTablePropagationWithContext is the same as EnableTransitGatewayRouteTablePropagation with the addition of -// the ability to pass a context and additional request options. -// -// See EnableTransitGatewayRouteTablePropagation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableTransitGatewayRouteTablePropagationWithContext(ctx aws.Context, input *EnableTransitGatewayRouteTablePropagationInput, opts ...request.Option) (*EnableTransitGatewayRouteTablePropagationOutput, error) { - req, out := c.EnableTransitGatewayRouteTablePropagationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableVgwRoutePropagation = "EnableVgwRoutePropagation" - -// EnableVgwRoutePropagationRequest generates a "aws/request.Request" representing the -// client's request for the EnableVgwRoutePropagation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableVgwRoutePropagation for more information on using the EnableVgwRoutePropagation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableVgwRoutePropagationRequest method. -// req, resp := client.EnableVgwRoutePropagationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagation -func (c *EC2) EnableVgwRoutePropagationRequest(input *EnableVgwRoutePropagationInput) (req *request.Request, output *EnableVgwRoutePropagationOutput) { - op := &request.Operation{ - Name: opEnableVgwRoutePropagation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableVgwRoutePropagationInput{} - } - - output = &EnableVgwRoutePropagationOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// EnableVgwRoutePropagation API operation for Amazon Elastic Compute Cloud. -// -// Enables a virtual private gateway (VGW) to propagate routes to the specified -// route table of a VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVgwRoutePropagation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagation -func (c *EC2) EnableVgwRoutePropagation(input *EnableVgwRoutePropagationInput) (*EnableVgwRoutePropagationOutput, error) { - req, out := c.EnableVgwRoutePropagationRequest(input) - return out, req.Send() -} - -// EnableVgwRoutePropagationWithContext is the same as EnableVgwRoutePropagation with the addition of -// the ability to pass a context and additional request options. -// -// See EnableVgwRoutePropagation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableVgwRoutePropagationWithContext(ctx aws.Context, input *EnableVgwRoutePropagationInput, opts ...request.Option) (*EnableVgwRoutePropagationOutput, error) { - req, out := c.EnableVgwRoutePropagationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableVolumeIO = "EnableVolumeIO" - -// EnableVolumeIORequest generates a "aws/request.Request" representing the -// client's request for the EnableVolumeIO operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableVolumeIO for more information on using the EnableVolumeIO -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableVolumeIORequest method. -// req, resp := client.EnableVolumeIORequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIO -func (c *EC2) EnableVolumeIORequest(input *EnableVolumeIOInput) (req *request.Request, output *EnableVolumeIOOutput) { - op := &request.Operation{ - Name: opEnableVolumeIO, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableVolumeIOInput{} - } - - output = &EnableVolumeIOOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// EnableVolumeIO API operation for Amazon Elastic Compute Cloud. -// -// Enables I/O operations for a volume that had I/O operations disabled because -// the data on the volume was potentially inconsistent. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVolumeIO for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIO -func (c *EC2) EnableVolumeIO(input *EnableVolumeIOInput) (*EnableVolumeIOOutput, error) { - req, out := c.EnableVolumeIORequest(input) - return out, req.Send() -} - -// EnableVolumeIOWithContext is the same as EnableVolumeIO with the addition of -// the ability to pass a context and additional request options. -// -// See EnableVolumeIO for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableVolumeIOWithContext(ctx aws.Context, input *EnableVolumeIOInput, opts ...request.Option) (*EnableVolumeIOOutput, error) { - req, out := c.EnableVolumeIORequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableVpcClassicLink = "EnableVpcClassicLink" - -// EnableVpcClassicLinkRequest generates a "aws/request.Request" representing the -// client's request for the EnableVpcClassicLink operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableVpcClassicLink for more information on using the EnableVpcClassicLink -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableVpcClassicLinkRequest method. -// req, resp := client.EnableVpcClassicLinkRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLink -func (c *EC2) EnableVpcClassicLinkRequest(input *EnableVpcClassicLinkInput) (req *request.Request, output *EnableVpcClassicLinkOutput) { - op := &request.Operation{ - Name: opEnableVpcClassicLink, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableVpcClassicLinkInput{} - } - - output = &EnableVpcClassicLinkOutput{} - req = c.newRequest(op, input, output) - return -} - -// EnableVpcClassicLink API operation for Amazon Elastic Compute Cloud. -// -// Enables a VPC for ClassicLink. You can then link EC2-Classic instances to -// your ClassicLink-enabled VPC to allow communication over private IP addresses. -// You cannot enable your VPC for ClassicLink if any of your VPC route tables -// have existing routes for address ranges within the 10.0.0.0/8 IP address -// range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 -// IP address ranges. For more information, see ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVpcClassicLink for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLink -func (c *EC2) EnableVpcClassicLink(input *EnableVpcClassicLinkInput) (*EnableVpcClassicLinkOutput, error) { - req, out := c.EnableVpcClassicLinkRequest(input) - return out, req.Send() -} - -// EnableVpcClassicLinkWithContext is the same as EnableVpcClassicLink with the addition of -// the ability to pass a context and additional request options. -// -// See EnableVpcClassicLink for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableVpcClassicLinkWithContext(ctx aws.Context, input *EnableVpcClassicLinkInput, opts ...request.Option) (*EnableVpcClassicLinkOutput, error) { - req, out := c.EnableVpcClassicLinkRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opEnableVpcClassicLinkDnsSupport = "EnableVpcClassicLinkDnsSupport" - -// EnableVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the -// client's request for the EnableVpcClassicLinkDnsSupport operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See EnableVpcClassicLinkDnsSupport for more information on using the EnableVpcClassicLinkDnsSupport -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the EnableVpcClassicLinkDnsSupportRequest method. -// req, resp := client.EnableVpcClassicLinkDnsSupportRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupport -func (c *EC2) EnableVpcClassicLinkDnsSupportRequest(input *EnableVpcClassicLinkDnsSupportInput) (req *request.Request, output *EnableVpcClassicLinkDnsSupportOutput) { - op := &request.Operation{ - Name: opEnableVpcClassicLinkDnsSupport, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &EnableVpcClassicLinkDnsSupportInput{} - } - - output = &EnableVpcClassicLinkDnsSupportOutput{} - req = c.newRequest(op, input, output) - return -} - -// EnableVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. -// -// Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, -// the DNS hostname of a linked EC2-Classic instance resolves to its private -// IP address when addressed from an instance in the VPC to which it's linked. -// Similarly, the DNS hostname of an instance in a VPC resolves to its private -// IP address when addressed from a linked EC2-Classic instance. For more information, -// see ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVpcClassicLinkDnsSupport for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupport -func (c *EC2) EnableVpcClassicLinkDnsSupport(input *EnableVpcClassicLinkDnsSupportInput) (*EnableVpcClassicLinkDnsSupportOutput, error) { - req, out := c.EnableVpcClassicLinkDnsSupportRequest(input) - return out, req.Send() -} - -// EnableVpcClassicLinkDnsSupportWithContext is the same as EnableVpcClassicLinkDnsSupport with the addition of -// the ability to pass a context and additional request options. -// -// See EnableVpcClassicLinkDnsSupport for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) EnableVpcClassicLinkDnsSupportWithContext(ctx aws.Context, input *EnableVpcClassicLinkDnsSupportInput, opts ...request.Option) (*EnableVpcClassicLinkDnsSupportOutput, error) { - req, out := c.EnableVpcClassicLinkDnsSupportRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opExportClientVpnClientCertificateRevocationList = "ExportClientVpnClientCertificateRevocationList" - -// ExportClientVpnClientCertificateRevocationListRequest generates a "aws/request.Request" representing the -// client's request for the ExportClientVpnClientCertificateRevocationList operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ExportClientVpnClientCertificateRevocationList for more information on using the ExportClientVpnClientCertificateRevocationList -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ExportClientVpnClientCertificateRevocationListRequest method. -// req, resp := client.ExportClientVpnClientCertificateRevocationListRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientCertificateRevocationList -func (c *EC2) ExportClientVpnClientCertificateRevocationListRequest(input *ExportClientVpnClientCertificateRevocationListInput) (req *request.Request, output *ExportClientVpnClientCertificateRevocationListOutput) { - op := &request.Operation{ - Name: opExportClientVpnClientCertificateRevocationList, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ExportClientVpnClientCertificateRevocationListInput{} - } - - output = &ExportClientVpnClientCertificateRevocationListOutput{} - req = c.newRequest(op, input, output) - return -} - -// ExportClientVpnClientCertificateRevocationList API operation for Amazon Elastic Compute Cloud. -// -// Downloads the client certificate revocation list for the specified Client -// VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ExportClientVpnClientCertificateRevocationList for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientCertificateRevocationList -func (c *EC2) ExportClientVpnClientCertificateRevocationList(input *ExportClientVpnClientCertificateRevocationListInput) (*ExportClientVpnClientCertificateRevocationListOutput, error) { - req, out := c.ExportClientVpnClientCertificateRevocationListRequest(input) - return out, req.Send() -} - -// ExportClientVpnClientCertificateRevocationListWithContext is the same as ExportClientVpnClientCertificateRevocationList with the addition of -// the ability to pass a context and additional request options. -// -// See ExportClientVpnClientCertificateRevocationList for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ExportClientVpnClientCertificateRevocationListWithContext(ctx aws.Context, input *ExportClientVpnClientCertificateRevocationListInput, opts ...request.Option) (*ExportClientVpnClientCertificateRevocationListOutput, error) { - req, out := c.ExportClientVpnClientCertificateRevocationListRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opExportClientVpnClientConfiguration = "ExportClientVpnClientConfiguration" - -// ExportClientVpnClientConfigurationRequest generates a "aws/request.Request" representing the -// client's request for the ExportClientVpnClientConfiguration operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ExportClientVpnClientConfiguration for more information on using the ExportClientVpnClientConfiguration -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ExportClientVpnClientConfigurationRequest method. -// req, resp := client.ExportClientVpnClientConfigurationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientConfiguration -func (c *EC2) ExportClientVpnClientConfigurationRequest(input *ExportClientVpnClientConfigurationInput) (req *request.Request, output *ExportClientVpnClientConfigurationOutput) { - op := &request.Operation{ - Name: opExportClientVpnClientConfiguration, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ExportClientVpnClientConfigurationInput{} - } - - output = &ExportClientVpnClientConfigurationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ExportClientVpnClientConfiguration API operation for Amazon Elastic Compute Cloud. -// -// Downloads the contents of the Client VPN endpoint configuration file for -// the specified Client VPN endpoint. The Client VPN endpoint configuration -// file includes the Client VPN endpoint and certificate information clients -// need to establish a connection with the Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ExportClientVpnClientConfiguration for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientConfiguration -func (c *EC2) ExportClientVpnClientConfiguration(input *ExportClientVpnClientConfigurationInput) (*ExportClientVpnClientConfigurationOutput, error) { - req, out := c.ExportClientVpnClientConfigurationRequest(input) - return out, req.Send() -} - -// ExportClientVpnClientConfigurationWithContext is the same as ExportClientVpnClientConfiguration with the addition of -// the ability to pass a context and additional request options. -// -// See ExportClientVpnClientConfiguration for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ExportClientVpnClientConfigurationWithContext(ctx aws.Context, input *ExportClientVpnClientConfigurationInput, opts ...request.Option) (*ExportClientVpnClientConfigurationOutput, error) { - req, out := c.ExportClientVpnClientConfigurationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opExportImage = "ExportImage" - -// ExportImageRequest generates a "aws/request.Request" representing the -// client's request for the ExportImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ExportImage for more information on using the ExportImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ExportImageRequest method. -// req, resp := client.ExportImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImage -func (c *EC2) ExportImageRequest(input *ExportImageInput) (req *request.Request, output *ExportImageOutput) { - op := &request.Operation{ - Name: opExportImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ExportImageInput{} - } - - output = &ExportImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// ExportImage API operation for Amazon Elastic Compute Cloud. -// -// Exports an Amazon Machine Image (AMI) to a VM file. For more information, -// see Exporting a VM Directory from an Amazon Machine Image (AMI) (https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html) -// in the VM Import/Export User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ExportImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImage -func (c *EC2) ExportImage(input *ExportImageInput) (*ExportImageOutput, error) { - req, out := c.ExportImageRequest(input) - return out, req.Send() -} - -// ExportImageWithContext is the same as ExportImage with the addition of -// the ability to pass a context and additional request options. -// -// See ExportImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ExportImageWithContext(ctx aws.Context, input *ExportImageInput, opts ...request.Option) (*ExportImageOutput, error) { - req, out := c.ExportImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opExportTransitGatewayRoutes = "ExportTransitGatewayRoutes" - -// ExportTransitGatewayRoutesRequest generates a "aws/request.Request" representing the -// client's request for the ExportTransitGatewayRoutes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ExportTransitGatewayRoutes for more information on using the ExportTransitGatewayRoutes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ExportTransitGatewayRoutesRequest method. -// req, resp := client.ExportTransitGatewayRoutesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTransitGatewayRoutes -func (c *EC2) ExportTransitGatewayRoutesRequest(input *ExportTransitGatewayRoutesInput) (req *request.Request, output *ExportTransitGatewayRoutesOutput) { - op := &request.Operation{ - Name: opExportTransitGatewayRoutes, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ExportTransitGatewayRoutesInput{} - } - - output = &ExportTransitGatewayRoutesOutput{} - req = c.newRequest(op, input, output) - return -} - -// ExportTransitGatewayRoutes API operation for Amazon Elastic Compute Cloud. -// -// Exports routes from the specified transit gateway route table to the specified -// S3 bucket. By default, all routes are exported. Alternatively, you can filter -// by CIDR range. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ExportTransitGatewayRoutes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTransitGatewayRoutes -func (c *EC2) ExportTransitGatewayRoutes(input *ExportTransitGatewayRoutesInput) (*ExportTransitGatewayRoutesOutput, error) { - req, out := c.ExportTransitGatewayRoutesRequest(input) - return out, req.Send() -} - -// ExportTransitGatewayRoutesWithContext is the same as ExportTransitGatewayRoutes with the addition of -// the ability to pass a context and additional request options. -// -// See ExportTransitGatewayRoutes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ExportTransitGatewayRoutesWithContext(ctx aws.Context, input *ExportTransitGatewayRoutesInput, opts ...request.Option) (*ExportTransitGatewayRoutesOutput, error) { - req, out := c.ExportTransitGatewayRoutesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetCapacityReservationUsage = "GetCapacityReservationUsage" - -// GetCapacityReservationUsageRequest generates a "aws/request.Request" representing the -// client's request for the GetCapacityReservationUsage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetCapacityReservationUsage for more information on using the GetCapacityReservationUsage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetCapacityReservationUsageRequest method. -// req, resp := client.GetCapacityReservationUsageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCapacityReservationUsage -func (c *EC2) GetCapacityReservationUsageRequest(input *GetCapacityReservationUsageInput) (req *request.Request, output *GetCapacityReservationUsageOutput) { - op := &request.Operation{ - Name: opGetCapacityReservationUsage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetCapacityReservationUsageInput{} - } - - output = &GetCapacityReservationUsageOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetCapacityReservationUsage API operation for Amazon Elastic Compute Cloud. -// -// Gets usage information about a Capacity Reservation. If the Capacity Reservation -// is shared, it shows usage information for the Capacity Reservation owner -// and each AWS account that is currently using the shared capacity. If the -// Capacity Reservation is not shared, it shows only the Capacity Reservation -// owner's usage. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetCapacityReservationUsage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCapacityReservationUsage -func (c *EC2) GetCapacityReservationUsage(input *GetCapacityReservationUsageInput) (*GetCapacityReservationUsageOutput, error) { - req, out := c.GetCapacityReservationUsageRequest(input) - return out, req.Send() -} - -// GetCapacityReservationUsageWithContext is the same as GetCapacityReservationUsage with the addition of -// the ability to pass a context and additional request options. -// -// See GetCapacityReservationUsage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetCapacityReservationUsageWithContext(ctx aws.Context, input *GetCapacityReservationUsageInput, opts ...request.Option) (*GetCapacityReservationUsageOutput, error) { - req, out := c.GetCapacityReservationUsageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetConsoleOutput = "GetConsoleOutput" - -// GetConsoleOutputRequest generates a "aws/request.Request" representing the -// client's request for the GetConsoleOutput operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetConsoleOutput for more information on using the GetConsoleOutput -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetConsoleOutputRequest method. -// req, resp := client.GetConsoleOutputRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutput -func (c *EC2) GetConsoleOutputRequest(input *GetConsoleOutputInput) (req *request.Request, output *GetConsoleOutputOutput) { - op := &request.Operation{ - Name: opGetConsoleOutput, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetConsoleOutputInput{} - } - - output = &GetConsoleOutputOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetConsoleOutput API operation for Amazon Elastic Compute Cloud. -// -// Gets the console output for the specified instance. For Linux instances, -// the instance console output displays the exact console output that would -// normally be displayed on a physical monitor attached to a computer. For Windows -// instances, the instance console output includes the last three system event -// log errors. -// -// By default, the console output returns buffered information that was posted -// shortly after an instance transition state (start, stop, reboot, or terminate). -// This information is available for at least one hour after the most recent -// post. Only the most recent 64 KB of console output is available. -// -// You can optionally retrieve the latest serial console output at any time -// during the instance lifecycle. This option is supported on instance types -// that use the Nitro hypervisor. -// -// For more information, see Instance Console Output (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html#instance-console-console-output) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetConsoleOutput for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutput -func (c *EC2) GetConsoleOutput(input *GetConsoleOutputInput) (*GetConsoleOutputOutput, error) { - req, out := c.GetConsoleOutputRequest(input) - return out, req.Send() -} - -// GetConsoleOutputWithContext is the same as GetConsoleOutput with the addition of -// the ability to pass a context and additional request options. -// -// See GetConsoleOutput for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetConsoleOutputWithContext(ctx aws.Context, input *GetConsoleOutputInput, opts ...request.Option) (*GetConsoleOutputOutput, error) { - req, out := c.GetConsoleOutputRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetConsoleScreenshot = "GetConsoleScreenshot" - -// GetConsoleScreenshotRequest generates a "aws/request.Request" representing the -// client's request for the GetConsoleScreenshot operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetConsoleScreenshot for more information on using the GetConsoleScreenshot -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetConsoleScreenshotRequest method. -// req, resp := client.GetConsoleScreenshotRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshot -func (c *EC2) GetConsoleScreenshotRequest(input *GetConsoleScreenshotInput) (req *request.Request, output *GetConsoleScreenshotOutput) { - op := &request.Operation{ - Name: opGetConsoleScreenshot, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetConsoleScreenshotInput{} - } - - output = &GetConsoleScreenshotOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetConsoleScreenshot API operation for Amazon Elastic Compute Cloud. -// -// Retrieve a JPG-format screenshot of a running instance to help with troubleshooting. -// -// The returned content is Base64-encoded. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetConsoleScreenshot for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshot -func (c *EC2) GetConsoleScreenshot(input *GetConsoleScreenshotInput) (*GetConsoleScreenshotOutput, error) { - req, out := c.GetConsoleScreenshotRequest(input) - return out, req.Send() -} - -// GetConsoleScreenshotWithContext is the same as GetConsoleScreenshot with the addition of -// the ability to pass a context and additional request options. -// -// See GetConsoleScreenshot for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetConsoleScreenshotWithContext(ctx aws.Context, input *GetConsoleScreenshotInput, opts ...request.Option) (*GetConsoleScreenshotOutput, error) { - req, out := c.GetConsoleScreenshotRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetEbsDefaultKmsKeyId = "GetEbsDefaultKmsKeyId" - -// GetEbsDefaultKmsKeyIdRequest generates a "aws/request.Request" representing the -// client's request for the GetEbsDefaultKmsKeyId operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetEbsDefaultKmsKeyId for more information on using the GetEbsDefaultKmsKeyId -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetEbsDefaultKmsKeyIdRequest method. -// req, resp := client.GetEbsDefaultKmsKeyIdRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsDefaultKmsKeyId -func (c *EC2) GetEbsDefaultKmsKeyIdRequest(input *GetEbsDefaultKmsKeyIdInput) (req *request.Request, output *GetEbsDefaultKmsKeyIdOutput) { - op := &request.Operation{ - Name: opGetEbsDefaultKmsKeyId, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetEbsDefaultKmsKeyIdInput{} - } - - output = &GetEbsDefaultKmsKeyIdOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetEbsDefaultKmsKeyId API operation for Amazon Elastic Compute Cloud. -// -// Describes the default customer master key (CMK) for EBS encryption by default -// for your account in this Region. You can change the default CMK for encryption -// by default using ModifyEbsDefaultKmsKeyId or ResetEbsDefaultKmsKeyId. -// -// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetEbsDefaultKmsKeyId for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsDefaultKmsKeyId -func (c *EC2) GetEbsDefaultKmsKeyId(input *GetEbsDefaultKmsKeyIdInput) (*GetEbsDefaultKmsKeyIdOutput, error) { - req, out := c.GetEbsDefaultKmsKeyIdRequest(input) - return out, req.Send() -} - -// GetEbsDefaultKmsKeyIdWithContext is the same as GetEbsDefaultKmsKeyId with the addition of -// the ability to pass a context and additional request options. -// -// See GetEbsDefaultKmsKeyId for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetEbsDefaultKmsKeyIdWithContext(ctx aws.Context, input *GetEbsDefaultKmsKeyIdInput, opts ...request.Option) (*GetEbsDefaultKmsKeyIdOutput, error) { - req, out := c.GetEbsDefaultKmsKeyIdRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetEbsEncryptionByDefault = "GetEbsEncryptionByDefault" - -// GetEbsEncryptionByDefaultRequest generates a "aws/request.Request" representing the -// client's request for the GetEbsEncryptionByDefault operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetEbsEncryptionByDefault for more information on using the GetEbsEncryptionByDefault -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetEbsEncryptionByDefaultRequest method. -// req, resp := client.GetEbsEncryptionByDefaultRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsEncryptionByDefault -func (c *EC2) GetEbsEncryptionByDefaultRequest(input *GetEbsEncryptionByDefaultInput) (req *request.Request, output *GetEbsEncryptionByDefaultOutput) { - op := &request.Operation{ - Name: opGetEbsEncryptionByDefault, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetEbsEncryptionByDefaultInput{} - } - - output = &GetEbsEncryptionByDefaultOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetEbsEncryptionByDefault API operation for Amazon Elastic Compute Cloud. -// -// Describes whether EBS encryption by default is enabled for your account in -// the current Region. -// -// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetEbsEncryptionByDefault for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsEncryptionByDefault -func (c *EC2) GetEbsEncryptionByDefault(input *GetEbsEncryptionByDefaultInput) (*GetEbsEncryptionByDefaultOutput, error) { - req, out := c.GetEbsEncryptionByDefaultRequest(input) - return out, req.Send() -} - -// GetEbsEncryptionByDefaultWithContext is the same as GetEbsEncryptionByDefault with the addition of -// the ability to pass a context and additional request options. -// -// See GetEbsEncryptionByDefault for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetEbsEncryptionByDefaultWithContext(ctx aws.Context, input *GetEbsEncryptionByDefaultInput, opts ...request.Option) (*GetEbsEncryptionByDefaultOutput, error) { - req, out := c.GetEbsEncryptionByDefaultRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetHostReservationPurchasePreview = "GetHostReservationPurchasePreview" - -// GetHostReservationPurchasePreviewRequest generates a "aws/request.Request" representing the -// client's request for the GetHostReservationPurchasePreview operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetHostReservationPurchasePreview for more information on using the GetHostReservationPurchasePreview -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetHostReservationPurchasePreviewRequest method. -// req, resp := client.GetHostReservationPurchasePreviewRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreview -func (c *EC2) GetHostReservationPurchasePreviewRequest(input *GetHostReservationPurchasePreviewInput) (req *request.Request, output *GetHostReservationPurchasePreviewOutput) { - op := &request.Operation{ - Name: opGetHostReservationPurchasePreview, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetHostReservationPurchasePreviewInput{} - } - - output = &GetHostReservationPurchasePreviewOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetHostReservationPurchasePreview API operation for Amazon Elastic Compute Cloud. -// -// Preview a reservation purchase with configurations that match those of your -// Dedicated Host. You must have active Dedicated Hosts in your account before -// you purchase a reservation. -// -// This is a preview of the PurchaseHostReservation action and does not result -// in the offering being purchased. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetHostReservationPurchasePreview for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreview -func (c *EC2) GetHostReservationPurchasePreview(input *GetHostReservationPurchasePreviewInput) (*GetHostReservationPurchasePreviewOutput, error) { - req, out := c.GetHostReservationPurchasePreviewRequest(input) - return out, req.Send() -} - -// GetHostReservationPurchasePreviewWithContext is the same as GetHostReservationPurchasePreview with the addition of -// the ability to pass a context and additional request options. -// -// See GetHostReservationPurchasePreview for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetHostReservationPurchasePreviewWithContext(ctx aws.Context, input *GetHostReservationPurchasePreviewInput, opts ...request.Option) (*GetHostReservationPurchasePreviewOutput, error) { - req, out := c.GetHostReservationPurchasePreviewRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetLaunchTemplateData = "GetLaunchTemplateData" - -// GetLaunchTemplateDataRequest generates a "aws/request.Request" representing the -// client's request for the GetLaunchTemplateData operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetLaunchTemplateData for more information on using the GetLaunchTemplateData -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetLaunchTemplateDataRequest method. -// req, resp := client.GetLaunchTemplateDataRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetLaunchTemplateData -func (c *EC2) GetLaunchTemplateDataRequest(input *GetLaunchTemplateDataInput) (req *request.Request, output *GetLaunchTemplateDataOutput) { - op := &request.Operation{ - Name: opGetLaunchTemplateData, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetLaunchTemplateDataInput{} - } - - output = &GetLaunchTemplateDataOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetLaunchTemplateData API operation for Amazon Elastic Compute Cloud. -// -// Retrieves the configuration data of the specified instance. You can use this -// data to create a launch template. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetLaunchTemplateData for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetLaunchTemplateData -func (c *EC2) GetLaunchTemplateData(input *GetLaunchTemplateDataInput) (*GetLaunchTemplateDataOutput, error) { - req, out := c.GetLaunchTemplateDataRequest(input) - return out, req.Send() -} - -// GetLaunchTemplateDataWithContext is the same as GetLaunchTemplateData with the addition of -// the ability to pass a context and additional request options. -// -// See GetLaunchTemplateData for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetLaunchTemplateDataWithContext(ctx aws.Context, input *GetLaunchTemplateDataInput, opts ...request.Option) (*GetLaunchTemplateDataOutput, error) { - req, out := c.GetLaunchTemplateDataRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetPasswordData = "GetPasswordData" - -// GetPasswordDataRequest generates a "aws/request.Request" representing the -// client's request for the GetPasswordData operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetPasswordData for more information on using the GetPasswordData -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetPasswordDataRequest method. -// req, resp := client.GetPasswordDataRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordData -func (c *EC2) GetPasswordDataRequest(input *GetPasswordDataInput) (req *request.Request, output *GetPasswordDataOutput) { - op := &request.Operation{ - Name: opGetPasswordData, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetPasswordDataInput{} - } - - output = &GetPasswordDataOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetPasswordData API operation for Amazon Elastic Compute Cloud. -// -// Retrieves the encrypted administrator password for a running Windows instance. -// -// The Windows password is generated at boot by the EC2Config service or EC2Launch -// scripts (Windows Server 2016 and later). This usually only happens the first -// time an instance is launched. For more information, see EC2Config (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html) -// and EC2Launch (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// For the EC2Config service, the password is not generated for rebundled AMIs -// unless Ec2SetPassword is enabled before bundling. -// -// The password is encrypted using the key pair that you specified when you -// launched the instance. You must provide the corresponding key pair file. -// -// When you launch an instance, password generation and encryption may take -// a few minutes. If you try to retrieve the password before it's available, -// the output returns an empty string. We recommend that you wait up to 15 minutes -// after launching an instance before trying to retrieve the generated password. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetPasswordData for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordData -func (c *EC2) GetPasswordData(input *GetPasswordDataInput) (*GetPasswordDataOutput, error) { - req, out := c.GetPasswordDataRequest(input) - return out, req.Send() -} - -// GetPasswordDataWithContext is the same as GetPasswordData with the addition of -// the ability to pass a context and additional request options. -// -// See GetPasswordData for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetPasswordDataWithContext(ctx aws.Context, input *GetPasswordDataInput, opts ...request.Option) (*GetPasswordDataOutput, error) { - req, out := c.GetPasswordDataRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetReservedInstancesExchangeQuote = "GetReservedInstancesExchangeQuote" - -// GetReservedInstancesExchangeQuoteRequest generates a "aws/request.Request" representing the -// client's request for the GetReservedInstancesExchangeQuote operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetReservedInstancesExchangeQuote for more information on using the GetReservedInstancesExchangeQuote -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetReservedInstancesExchangeQuoteRequest method. -// req, resp := client.GetReservedInstancesExchangeQuoteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuote -func (c *EC2) GetReservedInstancesExchangeQuoteRequest(input *GetReservedInstancesExchangeQuoteInput) (req *request.Request, output *GetReservedInstancesExchangeQuoteOutput) { - op := &request.Operation{ - Name: opGetReservedInstancesExchangeQuote, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetReservedInstancesExchangeQuoteInput{} - } - - output = &GetReservedInstancesExchangeQuoteOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetReservedInstancesExchangeQuote API operation for Amazon Elastic Compute Cloud. -// -// Returns a quote and exchange information for exchanging one or more specified -// Convertible Reserved Instances for a new Convertible Reserved Instance. If -// the exchange cannot be performed, the reason is returned in the response. -// Use AcceptReservedInstancesExchangeQuote to perform the exchange. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetReservedInstancesExchangeQuote for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuote -func (c *EC2) GetReservedInstancesExchangeQuote(input *GetReservedInstancesExchangeQuoteInput) (*GetReservedInstancesExchangeQuoteOutput, error) { - req, out := c.GetReservedInstancesExchangeQuoteRequest(input) - return out, req.Send() -} - -// GetReservedInstancesExchangeQuoteWithContext is the same as GetReservedInstancesExchangeQuote with the addition of -// the ability to pass a context and additional request options. -// -// See GetReservedInstancesExchangeQuote for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetReservedInstancesExchangeQuoteWithContext(ctx aws.Context, input *GetReservedInstancesExchangeQuoteInput, opts ...request.Option) (*GetReservedInstancesExchangeQuoteOutput, error) { - req, out := c.GetReservedInstancesExchangeQuoteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetTransitGatewayAttachmentPropagations = "GetTransitGatewayAttachmentPropagations" - -// GetTransitGatewayAttachmentPropagationsRequest generates a "aws/request.Request" representing the -// client's request for the GetTransitGatewayAttachmentPropagations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetTransitGatewayAttachmentPropagations for more information on using the GetTransitGatewayAttachmentPropagations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetTransitGatewayAttachmentPropagationsRequest method. -// req, resp := client.GetTransitGatewayAttachmentPropagationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayAttachmentPropagations -func (c *EC2) GetTransitGatewayAttachmentPropagationsRequest(input *GetTransitGatewayAttachmentPropagationsInput) (req *request.Request, output *GetTransitGatewayAttachmentPropagationsOutput) { - op := &request.Operation{ - Name: opGetTransitGatewayAttachmentPropagations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &GetTransitGatewayAttachmentPropagationsInput{} - } - - output = &GetTransitGatewayAttachmentPropagationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetTransitGatewayAttachmentPropagations API operation for Amazon Elastic Compute Cloud. -// -// Lists the route tables to which the specified resource attachment propagates -// routes. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetTransitGatewayAttachmentPropagations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayAttachmentPropagations -func (c *EC2) GetTransitGatewayAttachmentPropagations(input *GetTransitGatewayAttachmentPropagationsInput) (*GetTransitGatewayAttachmentPropagationsOutput, error) { - req, out := c.GetTransitGatewayAttachmentPropagationsRequest(input) - return out, req.Send() -} - -// GetTransitGatewayAttachmentPropagationsWithContext is the same as GetTransitGatewayAttachmentPropagations with the addition of -// the ability to pass a context and additional request options. -// -// See GetTransitGatewayAttachmentPropagations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetTransitGatewayAttachmentPropagationsWithContext(ctx aws.Context, input *GetTransitGatewayAttachmentPropagationsInput, opts ...request.Option) (*GetTransitGatewayAttachmentPropagationsOutput, error) { - req, out := c.GetTransitGatewayAttachmentPropagationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// GetTransitGatewayAttachmentPropagationsPages iterates over the pages of a GetTransitGatewayAttachmentPropagations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See GetTransitGatewayAttachmentPropagations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a GetTransitGatewayAttachmentPropagations operation. -// pageNum := 0 -// err := client.GetTransitGatewayAttachmentPropagationsPages(params, -// func(page *ec2.GetTransitGatewayAttachmentPropagationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) GetTransitGatewayAttachmentPropagationsPages(input *GetTransitGatewayAttachmentPropagationsInput, fn func(*GetTransitGatewayAttachmentPropagationsOutput, bool) bool) error { - return c.GetTransitGatewayAttachmentPropagationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// GetTransitGatewayAttachmentPropagationsPagesWithContext same as GetTransitGatewayAttachmentPropagationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetTransitGatewayAttachmentPropagationsPagesWithContext(ctx aws.Context, input *GetTransitGatewayAttachmentPropagationsInput, fn func(*GetTransitGatewayAttachmentPropagationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *GetTransitGatewayAttachmentPropagationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.GetTransitGatewayAttachmentPropagationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*GetTransitGatewayAttachmentPropagationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opGetTransitGatewayRouteTableAssociations = "GetTransitGatewayRouteTableAssociations" - -// GetTransitGatewayRouteTableAssociationsRequest generates a "aws/request.Request" representing the -// client's request for the GetTransitGatewayRouteTableAssociations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetTransitGatewayRouteTableAssociations for more information on using the GetTransitGatewayRouteTableAssociations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetTransitGatewayRouteTableAssociationsRequest method. -// req, resp := client.GetTransitGatewayRouteTableAssociationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTableAssociations -func (c *EC2) GetTransitGatewayRouteTableAssociationsRequest(input *GetTransitGatewayRouteTableAssociationsInput) (req *request.Request, output *GetTransitGatewayRouteTableAssociationsOutput) { - op := &request.Operation{ - Name: opGetTransitGatewayRouteTableAssociations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &GetTransitGatewayRouteTableAssociationsInput{} - } - - output = &GetTransitGatewayRouteTableAssociationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetTransitGatewayRouteTableAssociations API operation for Amazon Elastic Compute Cloud. -// -// Gets information about the associations for the specified transit gateway -// route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetTransitGatewayRouteTableAssociations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTableAssociations -func (c *EC2) GetTransitGatewayRouteTableAssociations(input *GetTransitGatewayRouteTableAssociationsInput) (*GetTransitGatewayRouteTableAssociationsOutput, error) { - req, out := c.GetTransitGatewayRouteTableAssociationsRequest(input) - return out, req.Send() -} - -// GetTransitGatewayRouteTableAssociationsWithContext is the same as GetTransitGatewayRouteTableAssociations with the addition of -// the ability to pass a context and additional request options. -// -// See GetTransitGatewayRouteTableAssociations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetTransitGatewayRouteTableAssociationsWithContext(ctx aws.Context, input *GetTransitGatewayRouteTableAssociationsInput, opts ...request.Option) (*GetTransitGatewayRouteTableAssociationsOutput, error) { - req, out := c.GetTransitGatewayRouteTableAssociationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// GetTransitGatewayRouteTableAssociationsPages iterates over the pages of a GetTransitGatewayRouteTableAssociations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See GetTransitGatewayRouteTableAssociations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a GetTransitGatewayRouteTableAssociations operation. -// pageNum := 0 -// err := client.GetTransitGatewayRouteTableAssociationsPages(params, -// func(page *ec2.GetTransitGatewayRouteTableAssociationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) GetTransitGatewayRouteTableAssociationsPages(input *GetTransitGatewayRouteTableAssociationsInput, fn func(*GetTransitGatewayRouteTableAssociationsOutput, bool) bool) error { - return c.GetTransitGatewayRouteTableAssociationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// GetTransitGatewayRouteTableAssociationsPagesWithContext same as GetTransitGatewayRouteTableAssociationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetTransitGatewayRouteTableAssociationsPagesWithContext(ctx aws.Context, input *GetTransitGatewayRouteTableAssociationsInput, fn func(*GetTransitGatewayRouteTableAssociationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *GetTransitGatewayRouteTableAssociationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.GetTransitGatewayRouteTableAssociationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*GetTransitGatewayRouteTableAssociationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opGetTransitGatewayRouteTablePropagations = "GetTransitGatewayRouteTablePropagations" - -// GetTransitGatewayRouteTablePropagationsRequest generates a "aws/request.Request" representing the -// client's request for the GetTransitGatewayRouteTablePropagations operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetTransitGatewayRouteTablePropagations for more information on using the GetTransitGatewayRouteTablePropagations -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetTransitGatewayRouteTablePropagationsRequest method. -// req, resp := client.GetTransitGatewayRouteTablePropagationsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTablePropagations -func (c *EC2) GetTransitGatewayRouteTablePropagationsRequest(input *GetTransitGatewayRouteTablePropagationsInput) (req *request.Request, output *GetTransitGatewayRouteTablePropagationsOutput) { - op := &request.Operation{ - Name: opGetTransitGatewayRouteTablePropagations, - HTTPMethod: "POST", - HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, - } - - if input == nil { - input = &GetTransitGatewayRouteTablePropagationsInput{} - } - - output = &GetTransitGatewayRouteTablePropagationsOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetTransitGatewayRouteTablePropagations API operation for Amazon Elastic Compute Cloud. -// -// Gets information about the route table propagations for the specified transit -// gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetTransitGatewayRouteTablePropagations for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTablePropagations -func (c *EC2) GetTransitGatewayRouteTablePropagations(input *GetTransitGatewayRouteTablePropagationsInput) (*GetTransitGatewayRouteTablePropagationsOutput, error) { - req, out := c.GetTransitGatewayRouteTablePropagationsRequest(input) - return out, req.Send() -} - -// GetTransitGatewayRouteTablePropagationsWithContext is the same as GetTransitGatewayRouteTablePropagations with the addition of -// the ability to pass a context and additional request options. -// -// See GetTransitGatewayRouteTablePropagations for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetTransitGatewayRouteTablePropagationsWithContext(ctx aws.Context, input *GetTransitGatewayRouteTablePropagationsInput, opts ...request.Option) (*GetTransitGatewayRouteTablePropagationsOutput, error) { - req, out := c.GetTransitGatewayRouteTablePropagationsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// GetTransitGatewayRouteTablePropagationsPages iterates over the pages of a GetTransitGatewayRouteTablePropagations operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See GetTransitGatewayRouteTablePropagations method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a GetTransitGatewayRouteTablePropagations operation. -// pageNum := 0 -// err := client.GetTransitGatewayRouteTablePropagationsPages(params, -// func(page *ec2.GetTransitGatewayRouteTablePropagationsOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) -// -func (c *EC2) GetTransitGatewayRouteTablePropagationsPages(input *GetTransitGatewayRouteTablePropagationsInput, fn func(*GetTransitGatewayRouteTablePropagationsOutput, bool) bool) error { - return c.GetTransitGatewayRouteTablePropagationsPagesWithContext(aws.BackgroundContext(), input, fn) -} - -// GetTransitGatewayRouteTablePropagationsPagesWithContext same as GetTransitGatewayRouteTablePropagationsPages except -// it takes a Context and allows setting request options on the pages. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) GetTransitGatewayRouteTablePropagationsPagesWithContext(ctx aws.Context, input *GetTransitGatewayRouteTablePropagationsInput, fn func(*GetTransitGatewayRouteTablePropagationsOutput, bool) bool, opts ...request.Option) error { - p := request.Pagination{ - NewRequest: func() (*request.Request, error) { - var inCpy *GetTransitGatewayRouteTablePropagationsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.GetTransitGatewayRouteTablePropagationsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - - for p.Next() { - if !fn(p.Page().(*GetTransitGatewayRouteTablePropagationsOutput), !p.HasNextPage()) { - break - } - } - - return p.Err() -} - -const opImportClientVpnClientCertificateRevocationList = "ImportClientVpnClientCertificateRevocationList" - -// ImportClientVpnClientCertificateRevocationListRequest generates a "aws/request.Request" representing the -// client's request for the ImportClientVpnClientCertificateRevocationList operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportClientVpnClientCertificateRevocationList for more information on using the ImportClientVpnClientCertificateRevocationList -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportClientVpnClientCertificateRevocationListRequest method. -// req, resp := client.ImportClientVpnClientCertificateRevocationListRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportClientVpnClientCertificateRevocationList -func (c *EC2) ImportClientVpnClientCertificateRevocationListRequest(input *ImportClientVpnClientCertificateRevocationListInput) (req *request.Request, output *ImportClientVpnClientCertificateRevocationListOutput) { - op := &request.Operation{ - Name: opImportClientVpnClientCertificateRevocationList, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportClientVpnClientCertificateRevocationListInput{} - } - - output = &ImportClientVpnClientCertificateRevocationListOutput{} - req = c.newRequest(op, input, output) - return -} - -// ImportClientVpnClientCertificateRevocationList API operation for Amazon Elastic Compute Cloud. -// -// Uploads a client certificate revocation list to the specified Client VPN -// endpoint. Uploading a client certificate revocation list overwrites the existing -// client certificate revocation list. -// -// Uploading a client certificate revocation list resets existing client connections. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportClientVpnClientCertificateRevocationList for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportClientVpnClientCertificateRevocationList -func (c *EC2) ImportClientVpnClientCertificateRevocationList(input *ImportClientVpnClientCertificateRevocationListInput) (*ImportClientVpnClientCertificateRevocationListOutput, error) { - req, out := c.ImportClientVpnClientCertificateRevocationListRequest(input) - return out, req.Send() -} - -// ImportClientVpnClientCertificateRevocationListWithContext is the same as ImportClientVpnClientCertificateRevocationList with the addition of -// the ability to pass a context and additional request options. -// -// See ImportClientVpnClientCertificateRevocationList for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ImportClientVpnClientCertificateRevocationListWithContext(ctx aws.Context, input *ImportClientVpnClientCertificateRevocationListInput, opts ...request.Option) (*ImportClientVpnClientCertificateRevocationListOutput, error) { - req, out := c.ImportClientVpnClientCertificateRevocationListRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opImportImage = "ImportImage" - -// ImportImageRequest generates a "aws/request.Request" representing the -// client's request for the ImportImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportImage for more information on using the ImportImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportImageRequest method. -// req, resp := client.ImportImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImage -func (c *EC2) ImportImageRequest(input *ImportImageInput) (req *request.Request, output *ImportImageOutput) { - op := &request.Operation{ - Name: opImportImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportImageInput{} - } - - output = &ImportImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// ImportImage API operation for Amazon Elastic Compute Cloud. -// -// Import single or multi-volume disk images or EBS snapshots into an Amazon -// Machine Image (AMI). For more information, see Importing a VM as an Image -// Using VM Import/Export (https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html) -// in the VM Import/Export User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImage -func (c *EC2) ImportImage(input *ImportImageInput) (*ImportImageOutput, error) { - req, out := c.ImportImageRequest(input) - return out, req.Send() -} - -// ImportImageWithContext is the same as ImportImage with the addition of -// the ability to pass a context and additional request options. -// -// See ImportImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ImportImageWithContext(ctx aws.Context, input *ImportImageInput, opts ...request.Option) (*ImportImageOutput, error) { - req, out := c.ImportImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opImportInstance = "ImportInstance" - -// ImportInstanceRequest generates a "aws/request.Request" representing the -// client's request for the ImportInstance operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportInstance for more information on using the ImportInstance -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportInstanceRequest method. -// req, resp := client.ImportInstanceRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstance -func (c *EC2) ImportInstanceRequest(input *ImportInstanceInput) (req *request.Request, output *ImportInstanceOutput) { - op := &request.Operation{ - Name: opImportInstance, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportInstanceInput{} - } - - output = &ImportInstanceOutput{} - req = c.newRequest(op, input, output) - return -} - -// ImportInstance API operation for Amazon Elastic Compute Cloud. -// -// Creates an import instance task using metadata from the specified disk image. -// ImportInstance only supports single-volume VMs. To import multi-volume VMs, -// use ImportImage. For more information, see Importing a Virtual Machine Using -// the Amazon EC2 CLI (https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html). -// -// For information about the import manifest referenced by this API action, -// see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportInstance for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstance -func (c *EC2) ImportInstance(input *ImportInstanceInput) (*ImportInstanceOutput, error) { - req, out := c.ImportInstanceRequest(input) - return out, req.Send() -} - -// ImportInstanceWithContext is the same as ImportInstance with the addition of -// the ability to pass a context and additional request options. -// -// See ImportInstance for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ImportInstanceWithContext(ctx aws.Context, input *ImportInstanceInput, opts ...request.Option) (*ImportInstanceOutput, error) { - req, out := c.ImportInstanceRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opImportKeyPair = "ImportKeyPair" - -// ImportKeyPairRequest generates a "aws/request.Request" representing the -// client's request for the ImportKeyPair operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportKeyPair for more information on using the ImportKeyPair -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportKeyPairRequest method. -// req, resp := client.ImportKeyPairRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPair -func (c *EC2) ImportKeyPairRequest(input *ImportKeyPairInput) (req *request.Request, output *ImportKeyPairOutput) { - op := &request.Operation{ - Name: opImportKeyPair, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportKeyPairInput{} - } - - output = &ImportKeyPairOutput{} - req = c.newRequest(op, input, output) - return -} - -// ImportKeyPair API operation for Amazon Elastic Compute Cloud. -// -// Imports the public key from an RSA key pair that you created with a third-party -// tool. Compare this with CreateKeyPair, in which AWS creates the key pair -// and gives the keys to you (AWS keeps a copy of the public key). With ImportKeyPair, -// you create the key pair and give AWS just the public key. The private key -// is never transferred between you and AWS. -// -// For more information about key pairs, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportKeyPair for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPair -func (c *EC2) ImportKeyPair(input *ImportKeyPairInput) (*ImportKeyPairOutput, error) { - req, out := c.ImportKeyPairRequest(input) - return out, req.Send() -} - -// ImportKeyPairWithContext is the same as ImportKeyPair with the addition of -// the ability to pass a context and additional request options. -// -// See ImportKeyPair for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ImportKeyPairWithContext(ctx aws.Context, input *ImportKeyPairInput, opts ...request.Option) (*ImportKeyPairOutput, error) { - req, out := c.ImportKeyPairRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opImportSnapshot = "ImportSnapshot" - -// ImportSnapshotRequest generates a "aws/request.Request" representing the -// client's request for the ImportSnapshot operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportSnapshot for more information on using the ImportSnapshot -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportSnapshotRequest method. -// req, resp := client.ImportSnapshotRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshot -func (c *EC2) ImportSnapshotRequest(input *ImportSnapshotInput) (req *request.Request, output *ImportSnapshotOutput) { - op := &request.Operation{ - Name: opImportSnapshot, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportSnapshotInput{} - } - - output = &ImportSnapshotOutput{} - req = c.newRequest(op, input, output) - return -} - -// ImportSnapshot API operation for Amazon Elastic Compute Cloud. -// -// Imports a disk into an EBS snapshot. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportSnapshot for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshot -func (c *EC2) ImportSnapshot(input *ImportSnapshotInput) (*ImportSnapshotOutput, error) { - req, out := c.ImportSnapshotRequest(input) - return out, req.Send() -} - -// ImportSnapshotWithContext is the same as ImportSnapshot with the addition of -// the ability to pass a context and additional request options. -// -// See ImportSnapshot for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ImportSnapshotWithContext(ctx aws.Context, input *ImportSnapshotInput, opts ...request.Option) (*ImportSnapshotOutput, error) { - req, out := c.ImportSnapshotRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opImportVolume = "ImportVolume" - -// ImportVolumeRequest generates a "aws/request.Request" representing the -// client's request for the ImportVolume operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ImportVolume for more information on using the ImportVolume -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ImportVolumeRequest method. -// req, resp := client.ImportVolumeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolume -func (c *EC2) ImportVolumeRequest(input *ImportVolumeInput) (req *request.Request, output *ImportVolumeOutput) { - op := &request.Operation{ - Name: opImportVolume, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ImportVolumeInput{} - } - - output = &ImportVolumeOutput{} - req = c.newRequest(op, input, output) - return -} - -// ImportVolume API operation for Amazon Elastic Compute Cloud. -// -// Creates an import volume task using metadata from the specified disk image.For -// more information, see Importing Disks to Amazon EBS (https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/importing-your-volumes-into-amazon-ebs.html). -// -// For information about the import manifest referenced by this API action, -// see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportVolume for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolume -func (c *EC2) ImportVolume(input *ImportVolumeInput) (*ImportVolumeOutput, error) { - req, out := c.ImportVolumeRequest(input) - return out, req.Send() -} - -// ImportVolumeWithContext is the same as ImportVolume with the addition of -// the ability to pass a context and additional request options. -// -// See ImportVolume for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ImportVolumeWithContext(ctx aws.Context, input *ImportVolumeInput, opts ...request.Option) (*ImportVolumeOutput, error) { - req, out := c.ImportVolumeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyCapacityReservation = "ModifyCapacityReservation" - -// ModifyCapacityReservationRequest generates a "aws/request.Request" representing the -// client's request for the ModifyCapacityReservation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyCapacityReservation for more information on using the ModifyCapacityReservation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyCapacityReservationRequest method. -// req, resp := client.ModifyCapacityReservationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservation -func (c *EC2) ModifyCapacityReservationRequest(input *ModifyCapacityReservationInput) (req *request.Request, output *ModifyCapacityReservationOutput) { - op := &request.Operation{ - Name: opModifyCapacityReservation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyCapacityReservationInput{} - } - - output = &ModifyCapacityReservationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyCapacityReservation API operation for Amazon Elastic Compute Cloud. -// -// Modifies a Capacity Reservation's capacity and the conditions under which -// it is to be released. You cannot change a Capacity Reservation's instance -// type, EBS optimization, instance store settings, platform, Availability Zone, -// or instance eligibility. If you need to modify any of these attributes, we -// recommend that you cancel the Capacity Reservation, and then create a new -// one with the required attributes. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyCapacityReservation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservation -func (c *EC2) ModifyCapacityReservation(input *ModifyCapacityReservationInput) (*ModifyCapacityReservationOutput, error) { - req, out := c.ModifyCapacityReservationRequest(input) - return out, req.Send() -} - -// ModifyCapacityReservationWithContext is the same as ModifyCapacityReservation with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyCapacityReservation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyCapacityReservationWithContext(ctx aws.Context, input *ModifyCapacityReservationInput, opts ...request.Option) (*ModifyCapacityReservationOutput, error) { - req, out := c.ModifyCapacityReservationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyClientVpnEndpoint = "ModifyClientVpnEndpoint" - -// ModifyClientVpnEndpointRequest generates a "aws/request.Request" representing the -// client's request for the ModifyClientVpnEndpoint operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyClientVpnEndpoint for more information on using the ModifyClientVpnEndpoint -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyClientVpnEndpointRequest method. -// req, resp := client.ModifyClientVpnEndpointRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyClientVpnEndpoint -func (c *EC2) ModifyClientVpnEndpointRequest(input *ModifyClientVpnEndpointInput) (req *request.Request, output *ModifyClientVpnEndpointOutput) { - op := &request.Operation{ - Name: opModifyClientVpnEndpoint, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyClientVpnEndpointInput{} - } - - output = &ModifyClientVpnEndpointOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyClientVpnEndpoint API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified Client VPN endpoint. You can only modify an endpoint's -// server certificate information, client connection logging information, DNS -// server, and description. Modifying the DNS server resets existing client -// connections. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyClientVpnEndpoint for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyClientVpnEndpoint -func (c *EC2) ModifyClientVpnEndpoint(input *ModifyClientVpnEndpointInput) (*ModifyClientVpnEndpointOutput, error) { - req, out := c.ModifyClientVpnEndpointRequest(input) - return out, req.Send() -} - -// ModifyClientVpnEndpointWithContext is the same as ModifyClientVpnEndpoint with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyClientVpnEndpoint for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyClientVpnEndpointWithContext(ctx aws.Context, input *ModifyClientVpnEndpointInput, opts ...request.Option) (*ModifyClientVpnEndpointOutput, error) { - req, out := c.ModifyClientVpnEndpointRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyEbsDefaultKmsKeyId = "ModifyEbsDefaultKmsKeyId" - -// ModifyEbsDefaultKmsKeyIdRequest generates a "aws/request.Request" representing the -// client's request for the ModifyEbsDefaultKmsKeyId operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyEbsDefaultKmsKeyId for more information on using the ModifyEbsDefaultKmsKeyId -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyEbsDefaultKmsKeyIdRequest method. -// req, resp := client.ModifyEbsDefaultKmsKeyIdRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyEbsDefaultKmsKeyId -func (c *EC2) ModifyEbsDefaultKmsKeyIdRequest(input *ModifyEbsDefaultKmsKeyIdInput) (req *request.Request, output *ModifyEbsDefaultKmsKeyIdOutput) { - op := &request.Operation{ - Name: opModifyEbsDefaultKmsKeyId, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyEbsDefaultKmsKeyIdInput{} - } - - output = &ModifyEbsDefaultKmsKeyIdOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyEbsDefaultKmsKeyId API operation for Amazon Elastic Compute Cloud. -// -// Changes the default customer master key (CMK) for EBS encryption by default -// for your account in this Region. -// -// AWS creates a unique AWS managed CMK in each Region for use with encryption -// by default. If you change the default CMK to a customer managed CMK, it is -// used instead of the AWS managed CMK. To reset the default CMK to the AWS -// managed CMK for EBS, use ResetEbsDefaultKmsKeyId. -// -// If you delete or disable the customer managed CMK that you specified for -// use with encryption by default, your instances will fail to launch. -// -// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyEbsDefaultKmsKeyId for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyEbsDefaultKmsKeyId -func (c *EC2) ModifyEbsDefaultKmsKeyId(input *ModifyEbsDefaultKmsKeyIdInput) (*ModifyEbsDefaultKmsKeyIdOutput, error) { - req, out := c.ModifyEbsDefaultKmsKeyIdRequest(input) - return out, req.Send() -} - -// ModifyEbsDefaultKmsKeyIdWithContext is the same as ModifyEbsDefaultKmsKeyId with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyEbsDefaultKmsKeyId for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyEbsDefaultKmsKeyIdWithContext(ctx aws.Context, input *ModifyEbsDefaultKmsKeyIdInput, opts ...request.Option) (*ModifyEbsDefaultKmsKeyIdOutput, error) { - req, out := c.ModifyEbsDefaultKmsKeyIdRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyFleet = "ModifyFleet" - -// ModifyFleetRequest generates a "aws/request.Request" representing the -// client's request for the ModifyFleet operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyFleet for more information on using the ModifyFleet -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyFleetRequest method. -// req, resp := client.ModifyFleetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFleet -func (c *EC2) ModifyFleetRequest(input *ModifyFleetInput) (req *request.Request, output *ModifyFleetOutput) { - op := &request.Operation{ - Name: opModifyFleet, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyFleetInput{} - } - - output = &ModifyFleetOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyFleet API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified EC2 Fleet. -// -// You can only modify an EC2 Fleet request of type maintain. -// -// While the EC2 Fleet is being modified, it is in the modifying state. -// -// To scale up your EC2 Fleet, increase its target capacity. The EC2 Fleet launches -// the additional Spot Instances according to the allocation strategy for the -// EC2 Fleet request. If the allocation strategy is lowest-price, the EC2 Fleet -// launches instances using the Spot Instance pool with the lowest price. If -// the allocation strategy is diversified, the EC2 Fleet distributes the instances -// across the Spot Instance pools. If the allocation strategy is capacity-optimized, -// EC2 Fleet launches instances from Spot Instance pools with optimal capacity -// for the number of instances that are launching. -// -// To scale down your EC2 Fleet, decrease its target capacity. First, the EC2 -// Fleet cancels any open requests that exceed the new target capacity. You -// can request that the EC2 Fleet terminate Spot Instances until the size of -// the fleet no longer exceeds the new target capacity. If the allocation strategy -// is lowest-price, the EC2 Fleet terminates the instances with the highest -// price per unit. If the allocation strategy is capacity-optimized, the EC2 -// Fleet terminates the instances in the Spot Instance pools that have the least -// available Spot Instance capacity. If the allocation strategy is diversified, -// the EC2 Fleet terminates instances across the Spot Instance pools. Alternatively, -// you can request that the EC2 Fleet keep the fleet at its current size, but -// not replace any Spot Instances that are interrupted or that you terminate -// manually. -// -// If you are finished with your EC2 Fleet for now, but will use it again later, -// you can set the target capacity to 0. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyFleet for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFleet -func (c *EC2) ModifyFleet(input *ModifyFleetInput) (*ModifyFleetOutput, error) { - req, out := c.ModifyFleetRequest(input) - return out, req.Send() -} - -// ModifyFleetWithContext is the same as ModifyFleet with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyFleet for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyFleetWithContext(ctx aws.Context, input *ModifyFleetInput, opts ...request.Option) (*ModifyFleetOutput, error) { - req, out := c.ModifyFleetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyFpgaImageAttribute = "ModifyFpgaImageAttribute" - -// ModifyFpgaImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyFpgaImageAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyFpgaImageAttribute for more information on using the ModifyFpgaImageAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyFpgaImageAttributeRequest method. -// req, resp := client.ModifyFpgaImageAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFpgaImageAttribute -func (c *EC2) ModifyFpgaImageAttributeRequest(input *ModifyFpgaImageAttributeInput) (req *request.Request, output *ModifyFpgaImageAttributeOutput) { - op := &request.Operation{ - Name: opModifyFpgaImageAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyFpgaImageAttributeInput{} - } - - output = &ModifyFpgaImageAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyFpgaImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified attribute of the specified Amazon FPGA Image (AFI). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyFpgaImageAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFpgaImageAttribute -func (c *EC2) ModifyFpgaImageAttribute(input *ModifyFpgaImageAttributeInput) (*ModifyFpgaImageAttributeOutput, error) { - req, out := c.ModifyFpgaImageAttributeRequest(input) - return out, req.Send() -} - -// ModifyFpgaImageAttributeWithContext is the same as ModifyFpgaImageAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyFpgaImageAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyFpgaImageAttributeWithContext(ctx aws.Context, input *ModifyFpgaImageAttributeInput, opts ...request.Option) (*ModifyFpgaImageAttributeOutput, error) { - req, out := c.ModifyFpgaImageAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyHosts = "ModifyHosts" - -// ModifyHostsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyHosts operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyHosts for more information on using the ModifyHosts -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyHostsRequest method. -// req, resp := client.ModifyHostsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHosts -func (c *EC2) ModifyHostsRequest(input *ModifyHostsInput) (req *request.Request, output *ModifyHostsOutput) { - op := &request.Operation{ - Name: opModifyHosts, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyHostsInput{} - } - - output = &ModifyHostsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyHosts API operation for Amazon Elastic Compute Cloud. -// -// Modify the auto-placement setting of a Dedicated Host. When auto-placement -// is enabled, any instances that you launch with a tenancy of host but without -// a specific host ID are placed onto any available Dedicated Host in your account -// that has auto-placement enabled. When auto-placement is disabled, you need -// to provide a host ID to have the instance launch onto a specific host. If -// no host ID is provided, the instance is launched onto a suitable host with -// auto-placement enabled. -// -// You can also use this API action to modify a Dedicated Host to support either -// multiple instance types in an instance family, or to support a specific instance -// type only. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyHosts for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHosts -func (c *EC2) ModifyHosts(input *ModifyHostsInput) (*ModifyHostsOutput, error) { - req, out := c.ModifyHostsRequest(input) - return out, req.Send() -} - -// ModifyHostsWithContext is the same as ModifyHosts with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyHosts for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyHostsWithContext(ctx aws.Context, input *ModifyHostsInput, opts ...request.Option) (*ModifyHostsOutput, error) { - req, out := c.ModifyHostsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyIdFormat = "ModifyIdFormat" - -// ModifyIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the ModifyIdFormat operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyIdFormat for more information on using the ModifyIdFormat -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyIdFormatRequest method. -// req, resp := client.ModifyIdFormatRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormat -func (c *EC2) ModifyIdFormatRequest(input *ModifyIdFormatInput) (req *request.Request, output *ModifyIdFormatOutput) { - op := &request.Operation{ - Name: opModifyIdFormat, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyIdFormatInput{} - } - - output = &ModifyIdFormatOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Modifies the ID format for the specified resource on a per-Region basis. -// You can specify that resources should receive longer IDs (17-character IDs) -// when they are created. -// -// This request can only be used to modify longer ID settings for resource types -// that are within the opt-in period. Resources currently in their opt-in period -// include: bundle | conversion-task | customer-gateway | dhcp-options | elastic-ip-allocation -// | elastic-ip-association | export-task | flow-log | image | import-task | -// internet-gateway | network-acl | network-acl-association | network-interface -// | network-interface-attachment | prefix-list | route-table | route-table-association -// | security-group | subnet | subnet-cidr-block-association | vpc | vpc-cidr-block-association -// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. -// -// This setting applies to the IAM user who makes the request; it does not apply -// to the entire AWS account. By default, an IAM user defaults to the same settings -// as the root user. If you're using this action as the root user, then these -// settings apply to the entire account, unless an IAM user explicitly overrides -// these settings for themselves. For more information, see Resource IDs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Resources created with longer IDs are visible to all IAM roles and users, -// regardless of these settings and provided that they have permission to use -// the relevant Describe command for the resource type. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyIdFormat for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormat -func (c *EC2) ModifyIdFormat(input *ModifyIdFormatInput) (*ModifyIdFormatOutput, error) { - req, out := c.ModifyIdFormatRequest(input) - return out, req.Send() -} - -// ModifyIdFormatWithContext is the same as ModifyIdFormat with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyIdFormat for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyIdFormatWithContext(ctx aws.Context, input *ModifyIdFormatInput, opts ...request.Option) (*ModifyIdFormatOutput, error) { - req, out := c.ModifyIdFormatRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyIdentityIdFormat = "ModifyIdentityIdFormat" - -// ModifyIdentityIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the ModifyIdentityIdFormat operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyIdentityIdFormat for more information on using the ModifyIdentityIdFormat -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyIdentityIdFormatRequest method. -// req, resp := client.ModifyIdentityIdFormatRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormat -func (c *EC2) ModifyIdentityIdFormatRequest(input *ModifyIdentityIdFormatInput) (req *request.Request, output *ModifyIdentityIdFormatOutput) { - op := &request.Operation{ - Name: opModifyIdentityIdFormat, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyIdentityIdFormatInput{} - } - - output = &ModifyIdentityIdFormatOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyIdentityIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Modifies the ID format of a resource for a specified IAM user, IAM role, -// or the root user for an account; or all IAM users, IAM roles, and the root -// user for an account. You can specify that resources should receive longer -// IDs (17-character IDs) when they are created. -// -// This request can only be used to modify longer ID settings for resource types -// that are within the opt-in period. Resources currently in their opt-in period -// include: bundle | conversion-task | customer-gateway | dhcp-options | elastic-ip-allocation -// | elastic-ip-association | export-task | flow-log | image | import-task | -// internet-gateway | network-acl | network-acl-association | network-interface -// | network-interface-attachment | prefix-list | route-table | route-table-association -// | security-group | subnet | subnet-cidr-block-association | vpc | vpc-cidr-block-association -// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. -// -// For more information, see Resource IDs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// This setting applies to the principal specified in the request; it does not -// apply to the principal that makes the request. -// -// Resources created with longer IDs are visible to all IAM roles and users, -// regardless of these settings and provided that they have permission to use -// the relevant Describe command for the resource type. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyIdentityIdFormat for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormat -func (c *EC2) ModifyIdentityIdFormat(input *ModifyIdentityIdFormatInput) (*ModifyIdentityIdFormatOutput, error) { - req, out := c.ModifyIdentityIdFormatRequest(input) - return out, req.Send() -} - -// ModifyIdentityIdFormatWithContext is the same as ModifyIdentityIdFormat with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyIdentityIdFormat for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyIdentityIdFormatWithContext(ctx aws.Context, input *ModifyIdentityIdFormatInput, opts ...request.Option) (*ModifyIdentityIdFormatOutput, error) { - req, out := c.ModifyIdentityIdFormatRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyImageAttribute = "ModifyImageAttribute" - -// ModifyImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyImageAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyImageAttribute for more information on using the ModifyImageAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyImageAttributeRequest method. -// req, resp := client.ModifyImageAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttribute -func (c *EC2) ModifyImageAttributeRequest(input *ModifyImageAttributeInput) (req *request.Request, output *ModifyImageAttributeOutput) { - op := &request.Operation{ - Name: opModifyImageAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyImageAttributeInput{} - } - - output = &ModifyImageAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified attribute of the specified AMI. You can specify only -// one attribute at a time. You can use the Attribute parameter to specify the -// attribute or one of the following parameters: Description, LaunchPermission, -// or ProductCode. -// -// AWS Marketplace product codes cannot be modified. Images with an AWS Marketplace -// product code cannot be made public. -// -// To enable the SriovNetSupport enhanced networking attribute of an image, -// enable SriovNetSupport on an instance and create an AMI from the instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyImageAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttribute -func (c *EC2) ModifyImageAttribute(input *ModifyImageAttributeInput) (*ModifyImageAttributeOutput, error) { - req, out := c.ModifyImageAttributeRequest(input) - return out, req.Send() -} - -// ModifyImageAttributeWithContext is the same as ModifyImageAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyImageAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyImageAttributeWithContext(ctx aws.Context, input *ModifyImageAttributeInput, opts ...request.Option) (*ModifyImageAttributeOutput, error) { - req, out := c.ModifyImageAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyInstanceAttribute = "ModifyInstanceAttribute" - -// ModifyInstanceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstanceAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyInstanceAttribute for more information on using the ModifyInstanceAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyInstanceAttributeRequest method. -// req, resp := client.ModifyInstanceAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttribute -func (c *EC2) ModifyInstanceAttributeRequest(input *ModifyInstanceAttributeInput) (req *request.Request, output *ModifyInstanceAttributeOutput) { - op := &request.Operation{ - Name: opModifyInstanceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyInstanceAttributeInput{} - } - - output = &ModifyInstanceAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyInstanceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified attribute of the specified instance. You can specify -// only one attribute at a time. -// -// Note: Using this action to change the security groups associated with an -// elastic network interface (ENI) attached to an instance in a VPC can result -// in an error if the instance has more than one ENI. To change the security -// groups associated with an ENI attached to an instance that has multiple ENIs, -// we recommend that you use the ModifyNetworkInterfaceAttribute action. -// -// To modify some attributes, the instance must be stopped. For more information, -// see Modifying Attributes of a Stopped Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstanceAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttribute -func (c *EC2) ModifyInstanceAttribute(input *ModifyInstanceAttributeInput) (*ModifyInstanceAttributeOutput, error) { - req, out := c.ModifyInstanceAttributeRequest(input) - return out, req.Send() -} - -// ModifyInstanceAttributeWithContext is the same as ModifyInstanceAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyInstanceAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyInstanceAttributeWithContext(ctx aws.Context, input *ModifyInstanceAttributeInput, opts ...request.Option) (*ModifyInstanceAttributeOutput, error) { - req, out := c.ModifyInstanceAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyInstanceCapacityReservationAttributes = "ModifyInstanceCapacityReservationAttributes" - -// ModifyInstanceCapacityReservationAttributesRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstanceCapacityReservationAttributes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyInstanceCapacityReservationAttributes for more information on using the ModifyInstanceCapacityReservationAttributes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyInstanceCapacityReservationAttributesRequest method. -// req, resp := client.ModifyInstanceCapacityReservationAttributesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCapacityReservationAttributes -func (c *EC2) ModifyInstanceCapacityReservationAttributesRequest(input *ModifyInstanceCapacityReservationAttributesInput) (req *request.Request, output *ModifyInstanceCapacityReservationAttributesOutput) { - op := &request.Operation{ - Name: opModifyInstanceCapacityReservationAttributes, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyInstanceCapacityReservationAttributesInput{} - } - - output = &ModifyInstanceCapacityReservationAttributesOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyInstanceCapacityReservationAttributes API operation for Amazon Elastic Compute Cloud. -// -// Modifies the Capacity Reservation settings for a stopped instance. Use this -// action to configure an instance to target a specific Capacity Reservation, -// run in any open Capacity Reservation with matching attributes, or run On-Demand -// Instance capacity. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstanceCapacityReservationAttributes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCapacityReservationAttributes -func (c *EC2) ModifyInstanceCapacityReservationAttributes(input *ModifyInstanceCapacityReservationAttributesInput) (*ModifyInstanceCapacityReservationAttributesOutput, error) { - req, out := c.ModifyInstanceCapacityReservationAttributesRequest(input) - return out, req.Send() -} - -// ModifyInstanceCapacityReservationAttributesWithContext is the same as ModifyInstanceCapacityReservationAttributes with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyInstanceCapacityReservationAttributes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyInstanceCapacityReservationAttributesWithContext(ctx aws.Context, input *ModifyInstanceCapacityReservationAttributesInput, opts ...request.Option) (*ModifyInstanceCapacityReservationAttributesOutput, error) { - req, out := c.ModifyInstanceCapacityReservationAttributesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyInstanceCreditSpecification = "ModifyInstanceCreditSpecification" - -// ModifyInstanceCreditSpecificationRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstanceCreditSpecification operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyInstanceCreditSpecification for more information on using the ModifyInstanceCreditSpecification -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyInstanceCreditSpecificationRequest method. -// req, resp := client.ModifyInstanceCreditSpecificationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCreditSpecification -func (c *EC2) ModifyInstanceCreditSpecificationRequest(input *ModifyInstanceCreditSpecificationInput) (req *request.Request, output *ModifyInstanceCreditSpecificationOutput) { - op := &request.Operation{ - Name: opModifyInstanceCreditSpecification, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyInstanceCreditSpecificationInput{} - } - - output = &ModifyInstanceCreditSpecificationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyInstanceCreditSpecification API operation for Amazon Elastic Compute Cloud. -// -// Modifies the credit option for CPU usage on a running or stopped T2 or T3 -// instance. The credit options are standard and unlimited. -// -// For more information, see Burstable Performance Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstanceCreditSpecification for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCreditSpecification -func (c *EC2) ModifyInstanceCreditSpecification(input *ModifyInstanceCreditSpecificationInput) (*ModifyInstanceCreditSpecificationOutput, error) { - req, out := c.ModifyInstanceCreditSpecificationRequest(input) - return out, req.Send() -} - -// ModifyInstanceCreditSpecificationWithContext is the same as ModifyInstanceCreditSpecification with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyInstanceCreditSpecification for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyInstanceCreditSpecificationWithContext(ctx aws.Context, input *ModifyInstanceCreditSpecificationInput, opts ...request.Option) (*ModifyInstanceCreditSpecificationOutput, error) { - req, out := c.ModifyInstanceCreditSpecificationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyInstanceEventStartTime = "ModifyInstanceEventStartTime" - -// ModifyInstanceEventStartTimeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstanceEventStartTime operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyInstanceEventStartTime for more information on using the ModifyInstanceEventStartTime -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyInstanceEventStartTimeRequest method. -// req, resp := client.ModifyInstanceEventStartTimeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventStartTime -func (c *EC2) ModifyInstanceEventStartTimeRequest(input *ModifyInstanceEventStartTimeInput) (req *request.Request, output *ModifyInstanceEventStartTimeOutput) { - op := &request.Operation{ - Name: opModifyInstanceEventStartTime, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyInstanceEventStartTimeInput{} - } - - output = &ModifyInstanceEventStartTimeOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyInstanceEventStartTime API operation for Amazon Elastic Compute Cloud. -// -// Modifies the start time for a scheduled Amazon EC2 instance event. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstanceEventStartTime for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventStartTime -func (c *EC2) ModifyInstanceEventStartTime(input *ModifyInstanceEventStartTimeInput) (*ModifyInstanceEventStartTimeOutput, error) { - req, out := c.ModifyInstanceEventStartTimeRequest(input) - return out, req.Send() -} - -// ModifyInstanceEventStartTimeWithContext is the same as ModifyInstanceEventStartTime with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyInstanceEventStartTime for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyInstanceEventStartTimeWithContext(ctx aws.Context, input *ModifyInstanceEventStartTimeInput, opts ...request.Option) (*ModifyInstanceEventStartTimeOutput, error) { - req, out := c.ModifyInstanceEventStartTimeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyInstanceMetadataOptions = "ModifyInstanceMetadataOptions" - -// ModifyInstanceMetadataOptionsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstanceMetadataOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyInstanceMetadataOptions for more information on using the ModifyInstanceMetadataOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyInstanceMetadataOptionsRequest method. -// req, resp := client.ModifyInstanceMetadataOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataOptions -func (c *EC2) ModifyInstanceMetadataOptionsRequest(input *ModifyInstanceMetadataOptionsInput) (req *request.Request, output *ModifyInstanceMetadataOptionsOutput) { - op := &request.Operation{ - Name: opModifyInstanceMetadataOptions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyInstanceMetadataOptionsInput{} - } - - output = &ModifyInstanceMetadataOptionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyInstanceMetadataOptions API operation for Amazon Elastic Compute Cloud. -// -// Modify the instance metadata parameters on a running or stopped instance. -// When you modify the parameters on a stopped instance, they are applied when -// the instance is started. When you modify the parameters on a running instance, -// the API responds with a state of “pending”. After the parameter modifications -// are successfully applied to the instance, the state of the modifications -// changes from “pending” to “applied” in subsequent describe-instances -// API calls. For more information, see Instance Metadata and User Data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstanceMetadataOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataOptions -func (c *EC2) ModifyInstanceMetadataOptions(input *ModifyInstanceMetadataOptionsInput) (*ModifyInstanceMetadataOptionsOutput, error) { - req, out := c.ModifyInstanceMetadataOptionsRequest(input) - return out, req.Send() -} - -// ModifyInstanceMetadataOptionsWithContext is the same as ModifyInstanceMetadataOptions with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyInstanceMetadataOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyInstanceMetadataOptionsWithContext(ctx aws.Context, input *ModifyInstanceMetadataOptionsInput, opts ...request.Option) (*ModifyInstanceMetadataOptionsOutput, error) { - req, out := c.ModifyInstanceMetadataOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyInstancePlacement = "ModifyInstancePlacement" - -// ModifyInstancePlacementRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstancePlacement operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyInstancePlacement for more information on using the ModifyInstancePlacement -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyInstancePlacementRequest method. -// req, resp := client.ModifyInstancePlacementRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacement -func (c *EC2) ModifyInstancePlacementRequest(input *ModifyInstancePlacementInput) (req *request.Request, output *ModifyInstancePlacementOutput) { - op := &request.Operation{ - Name: opModifyInstancePlacement, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyInstancePlacementInput{} - } - - output = &ModifyInstancePlacementOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyInstancePlacement API operation for Amazon Elastic Compute Cloud. -// -// Modifies the placement attributes for a specified instance. You can do the -// following: -// -// * Modify the affinity between an instance and a Dedicated Host (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html). -// When affinity is set to host and the instance is not associated with a -// specific Dedicated Host, the next time the instance is launched, it is -// automatically associated with the host on which it lands. If the instance -// is restarted or rebooted, this relationship persists. -// -// * Change the Dedicated Host with which an instance is associated. -// -// * Change the instance tenancy of an instance from host to dedicated, or -// from dedicated to host. -// -// * Move an instance to or from a placement group (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html). -// -// At least one attribute for affinity, host ID, tenancy, or placement group -// name must be specified in the request. Affinity and tenancy can be modified -// in the same request. -// -// To modify the host ID, tenancy, placement group, or partition for an instance, -// the instance must be in the stopped state. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstancePlacement for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacement -func (c *EC2) ModifyInstancePlacement(input *ModifyInstancePlacementInput) (*ModifyInstancePlacementOutput, error) { - req, out := c.ModifyInstancePlacementRequest(input) - return out, req.Send() -} - -// ModifyInstancePlacementWithContext is the same as ModifyInstancePlacement with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyInstancePlacement for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyInstancePlacementWithContext(ctx aws.Context, input *ModifyInstancePlacementInput, opts ...request.Option) (*ModifyInstancePlacementOutput, error) { - req, out := c.ModifyInstancePlacementRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyLaunchTemplate = "ModifyLaunchTemplate" - -// ModifyLaunchTemplateRequest generates a "aws/request.Request" representing the -// client's request for the ModifyLaunchTemplate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyLaunchTemplate for more information on using the ModifyLaunchTemplate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyLaunchTemplateRequest method. -// req, resp := client.ModifyLaunchTemplateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLaunchTemplate -func (c *EC2) ModifyLaunchTemplateRequest(input *ModifyLaunchTemplateInput) (req *request.Request, output *ModifyLaunchTemplateOutput) { - op := &request.Operation{ - Name: opModifyLaunchTemplate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyLaunchTemplateInput{} - } - - output = &ModifyLaunchTemplateOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyLaunchTemplate API operation for Amazon Elastic Compute Cloud. -// -// Modifies a launch template. You can specify which version of the launch template -// to set as the default version. When launching an instance, the default version -// applies when a launch template version is not specified. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyLaunchTemplate for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLaunchTemplate -func (c *EC2) ModifyLaunchTemplate(input *ModifyLaunchTemplateInput) (*ModifyLaunchTemplateOutput, error) { - req, out := c.ModifyLaunchTemplateRequest(input) - return out, req.Send() -} - -// ModifyLaunchTemplateWithContext is the same as ModifyLaunchTemplate with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyLaunchTemplate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyLaunchTemplateWithContext(ctx aws.Context, input *ModifyLaunchTemplateInput, opts ...request.Option) (*ModifyLaunchTemplateOutput, error) { - req, out := c.ModifyLaunchTemplateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyNetworkInterfaceAttribute = "ModifyNetworkInterfaceAttribute" - -// ModifyNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyNetworkInterfaceAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyNetworkInterfaceAttribute for more information on using the ModifyNetworkInterfaceAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyNetworkInterfaceAttributeRequest method. -// req, resp := client.ModifyNetworkInterfaceAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttribute -func (c *EC2) ModifyNetworkInterfaceAttributeRequest(input *ModifyNetworkInterfaceAttributeInput) (req *request.Request, output *ModifyNetworkInterfaceAttributeOutput) { - op := &request.Operation{ - Name: opModifyNetworkInterfaceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyNetworkInterfaceAttributeInput{} - } - - output = &ModifyNetworkInterfaceAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified network interface attribute. You can specify only -// one attribute at a time. You can use this action to attach and detach security -// groups from an existing EC2 instance. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyNetworkInterfaceAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttribute -func (c *EC2) ModifyNetworkInterfaceAttribute(input *ModifyNetworkInterfaceAttributeInput) (*ModifyNetworkInterfaceAttributeOutput, error) { - req, out := c.ModifyNetworkInterfaceAttributeRequest(input) - return out, req.Send() -} - -// ModifyNetworkInterfaceAttributeWithContext is the same as ModifyNetworkInterfaceAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyNetworkInterfaceAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyNetworkInterfaceAttributeWithContext(ctx aws.Context, input *ModifyNetworkInterfaceAttributeInput, opts ...request.Option) (*ModifyNetworkInterfaceAttributeOutput, error) { - req, out := c.ModifyNetworkInterfaceAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyReservedInstances = "ModifyReservedInstances" - -// ModifyReservedInstancesRequest generates a "aws/request.Request" representing the -// client's request for the ModifyReservedInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyReservedInstances for more information on using the ModifyReservedInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyReservedInstancesRequest method. -// req, resp := client.ModifyReservedInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstances -func (c *EC2) ModifyReservedInstancesRequest(input *ModifyReservedInstancesInput) (req *request.Request, output *ModifyReservedInstancesOutput) { - op := &request.Operation{ - Name: opModifyReservedInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyReservedInstancesInput{} - } - - output = &ModifyReservedInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyReservedInstances API operation for Amazon Elastic Compute Cloud. -// -// Modifies the Availability Zone, instance count, instance type, or network -// platform (EC2-Classic or EC2-VPC) of your Reserved Instances. The Reserved -// Instances to be modified must be identical, except for Availability Zone, -// network platform, and instance type. -// -// For more information, see Modifying Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyReservedInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstances -func (c *EC2) ModifyReservedInstances(input *ModifyReservedInstancesInput) (*ModifyReservedInstancesOutput, error) { - req, out := c.ModifyReservedInstancesRequest(input) - return out, req.Send() -} - -// ModifyReservedInstancesWithContext is the same as ModifyReservedInstances with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyReservedInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyReservedInstancesWithContext(ctx aws.Context, input *ModifyReservedInstancesInput, opts ...request.Option) (*ModifyReservedInstancesOutput, error) { - req, out := c.ModifyReservedInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifySnapshotAttribute = "ModifySnapshotAttribute" - -// ModifySnapshotAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifySnapshotAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifySnapshotAttribute for more information on using the ModifySnapshotAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifySnapshotAttributeRequest method. -// req, resp := client.ModifySnapshotAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttribute -func (c *EC2) ModifySnapshotAttributeRequest(input *ModifySnapshotAttributeInput) (req *request.Request, output *ModifySnapshotAttributeOutput) { - op := &request.Operation{ - Name: opModifySnapshotAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifySnapshotAttributeInput{} - } - - output = &ModifySnapshotAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifySnapshotAttribute API operation for Amazon Elastic Compute Cloud. -// -// Adds or removes permission settings for the specified snapshot. You may add -// or remove specified AWS account IDs from a snapshot's list of create volume -// permissions, but you cannot do both in a single operation. If you need to -// both add and remove account IDs for a snapshot, you must use multiple operations. -// You can make up to 500 modifications to a snapshot in a single operation. -// -// Encrypted snapshots and snapshots with AWS Marketplace product codes cannot -// be made public. Snapshots encrypted with your default CMK cannot be shared -// with other accounts. -// -// For more information about modifying snapshot permissions, see Sharing Snapshots -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifySnapshotAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttribute -func (c *EC2) ModifySnapshotAttribute(input *ModifySnapshotAttributeInput) (*ModifySnapshotAttributeOutput, error) { - req, out := c.ModifySnapshotAttributeRequest(input) - return out, req.Send() -} - -// ModifySnapshotAttributeWithContext is the same as ModifySnapshotAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifySnapshotAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifySnapshotAttributeWithContext(ctx aws.Context, input *ModifySnapshotAttributeInput, opts ...request.Option) (*ModifySnapshotAttributeOutput, error) { - req, out := c.ModifySnapshotAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifySpotFleetRequest = "ModifySpotFleetRequest" - -// ModifySpotFleetRequestRequest generates a "aws/request.Request" representing the -// client's request for the ModifySpotFleetRequest operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifySpotFleetRequest for more information on using the ModifySpotFleetRequest -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifySpotFleetRequestRequest method. -// req, resp := client.ModifySpotFleetRequestRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequest -func (c *EC2) ModifySpotFleetRequestRequest(input *ModifySpotFleetRequestInput) (req *request.Request, output *ModifySpotFleetRequestOutput) { - op := &request.Operation{ - Name: opModifySpotFleetRequest, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifySpotFleetRequestInput{} - } - - output = &ModifySpotFleetRequestOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifySpotFleetRequest API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified Spot Fleet request. -// -// You can only modify a Spot Fleet request of type maintain. -// -// While the Spot Fleet request is being modified, it is in the modifying state. -// -// To scale up your Spot Fleet, increase its target capacity. The Spot Fleet -// launches the additional Spot Instances according to the allocation strategy -// for the Spot Fleet request. If the allocation strategy is lowestPrice, the -// Spot Fleet launches instances using the Spot Instance pool with the lowest -// price. If the allocation strategy is diversified, the Spot Fleet distributes -// the instances across the Spot Instance pools. If the allocation strategy -// is capacityOptimized, Spot Fleet launches instances from Spot Instance pools -// with optimal capacity for the number of instances that are launching. -// -// To scale down your Spot Fleet, decrease its target capacity. First, the Spot -// Fleet cancels any open requests that exceed the new target capacity. You -// can request that the Spot Fleet terminate Spot Instances until the size of -// the fleet no longer exceeds the new target capacity. If the allocation strategy -// is lowestPrice, the Spot Fleet terminates the instances with the highest -// price per unit. If the allocation strategy is capacityOptimized, the Spot -// Fleet terminates the instances in the Spot Instance pools that have the least -// available Spot Instance capacity. If the allocation strategy is diversified, -// the Spot Fleet terminates instances across the Spot Instance pools. Alternatively, -// you can request that the Spot Fleet keep the fleet at its current size, but -// not replace any Spot Instances that are interrupted or that you terminate -// manually. -// -// If you are finished with your Spot Fleet for now, but will use it again later, -// you can set the target capacity to 0. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifySpotFleetRequest for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequest -func (c *EC2) ModifySpotFleetRequest(input *ModifySpotFleetRequestInput) (*ModifySpotFleetRequestOutput, error) { - req, out := c.ModifySpotFleetRequestRequest(input) - return out, req.Send() -} - -// ModifySpotFleetRequestWithContext is the same as ModifySpotFleetRequest with the addition of -// the ability to pass a context and additional request options. -// -// See ModifySpotFleetRequest for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifySpotFleetRequestWithContext(ctx aws.Context, input *ModifySpotFleetRequestInput, opts ...request.Option) (*ModifySpotFleetRequestOutput, error) { - req, out := c.ModifySpotFleetRequestRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifySubnetAttribute = "ModifySubnetAttribute" - -// ModifySubnetAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifySubnetAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifySubnetAttribute for more information on using the ModifySubnetAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifySubnetAttributeRequest method. -// req, resp := client.ModifySubnetAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttribute -func (c *EC2) ModifySubnetAttributeRequest(input *ModifySubnetAttributeInput) (req *request.Request, output *ModifySubnetAttributeOutput) { - op := &request.Operation{ - Name: opModifySubnetAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifySubnetAttributeInput{} - } - - output = &ModifySubnetAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifySubnetAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies a subnet attribute. You can only modify one attribute at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifySubnetAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttribute -func (c *EC2) ModifySubnetAttribute(input *ModifySubnetAttributeInput) (*ModifySubnetAttributeOutput, error) { - req, out := c.ModifySubnetAttributeRequest(input) - return out, req.Send() -} - -// ModifySubnetAttributeWithContext is the same as ModifySubnetAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifySubnetAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifySubnetAttributeWithContext(ctx aws.Context, input *ModifySubnetAttributeInput, opts ...request.Option) (*ModifySubnetAttributeOutput, error) { - req, out := c.ModifySubnetAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyTrafficMirrorFilterNetworkServices = "ModifyTrafficMirrorFilterNetworkServices" - -// ModifyTrafficMirrorFilterNetworkServicesRequest generates a "aws/request.Request" representing the -// client's request for the ModifyTrafficMirrorFilterNetworkServices operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyTrafficMirrorFilterNetworkServices for more information on using the ModifyTrafficMirrorFilterNetworkServices -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyTrafficMirrorFilterNetworkServicesRequest method. -// req, resp := client.ModifyTrafficMirrorFilterNetworkServicesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterNetworkServices -func (c *EC2) ModifyTrafficMirrorFilterNetworkServicesRequest(input *ModifyTrafficMirrorFilterNetworkServicesInput) (req *request.Request, output *ModifyTrafficMirrorFilterNetworkServicesOutput) { - op := &request.Operation{ - Name: opModifyTrafficMirrorFilterNetworkServices, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyTrafficMirrorFilterNetworkServicesInput{} - } - - output = &ModifyTrafficMirrorFilterNetworkServicesOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyTrafficMirrorFilterNetworkServices API operation for Amazon Elastic Compute Cloud. -// -// Allows or restricts mirroring network services. -// -// By default, Amazon DNS network services are not eligible for Traffic Mirror. -// Use AddNetworkServices to add network services to a Traffic Mirror filter. -// When a network service is added to the Traffic Mirror filter, all traffic -// related to that network service will be mirrored. When you no longer want -// to mirror network services, use RemoveNetworkServices to remove the network -// services from the Traffic Mirror filter. -// -// For information about filter rule properties, see Network Services (https://docs.aws.amazon.com/vpc/latest/mirroring/traffic-mirroring-considerations.html) -// in the Traffic Mirroring User Guide . -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyTrafficMirrorFilterNetworkServices for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterNetworkServices -func (c *EC2) ModifyTrafficMirrorFilterNetworkServices(input *ModifyTrafficMirrorFilterNetworkServicesInput) (*ModifyTrafficMirrorFilterNetworkServicesOutput, error) { - req, out := c.ModifyTrafficMirrorFilterNetworkServicesRequest(input) - return out, req.Send() -} - -// ModifyTrafficMirrorFilterNetworkServicesWithContext is the same as ModifyTrafficMirrorFilterNetworkServices with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyTrafficMirrorFilterNetworkServices for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyTrafficMirrorFilterNetworkServicesWithContext(ctx aws.Context, input *ModifyTrafficMirrorFilterNetworkServicesInput, opts ...request.Option) (*ModifyTrafficMirrorFilterNetworkServicesOutput, error) { - req, out := c.ModifyTrafficMirrorFilterNetworkServicesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyTrafficMirrorFilterRule = "ModifyTrafficMirrorFilterRule" - -// ModifyTrafficMirrorFilterRuleRequest generates a "aws/request.Request" representing the -// client's request for the ModifyTrafficMirrorFilterRule operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyTrafficMirrorFilterRule for more information on using the ModifyTrafficMirrorFilterRule -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyTrafficMirrorFilterRuleRequest method. -// req, resp := client.ModifyTrafficMirrorFilterRuleRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterRule -func (c *EC2) ModifyTrafficMirrorFilterRuleRequest(input *ModifyTrafficMirrorFilterRuleInput) (req *request.Request, output *ModifyTrafficMirrorFilterRuleOutput) { - op := &request.Operation{ - Name: opModifyTrafficMirrorFilterRule, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyTrafficMirrorFilterRuleInput{} - } - - output = &ModifyTrafficMirrorFilterRuleOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyTrafficMirrorFilterRule API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified Traffic Mirror rule. -// -// DestinationCidrBlock and SourceCidrBlock must both be an IPv4 range or an -// IPv6 range. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyTrafficMirrorFilterRule for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterRule -func (c *EC2) ModifyTrafficMirrorFilterRule(input *ModifyTrafficMirrorFilterRuleInput) (*ModifyTrafficMirrorFilterRuleOutput, error) { - req, out := c.ModifyTrafficMirrorFilterRuleRequest(input) - return out, req.Send() -} - -// ModifyTrafficMirrorFilterRuleWithContext is the same as ModifyTrafficMirrorFilterRule with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyTrafficMirrorFilterRule for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyTrafficMirrorFilterRuleWithContext(ctx aws.Context, input *ModifyTrafficMirrorFilterRuleInput, opts ...request.Option) (*ModifyTrafficMirrorFilterRuleOutput, error) { - req, out := c.ModifyTrafficMirrorFilterRuleRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyTrafficMirrorSession = "ModifyTrafficMirrorSession" - -// ModifyTrafficMirrorSessionRequest generates a "aws/request.Request" representing the -// client's request for the ModifyTrafficMirrorSession operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyTrafficMirrorSession for more information on using the ModifyTrafficMirrorSession -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyTrafficMirrorSessionRequest method. -// req, resp := client.ModifyTrafficMirrorSessionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorSession -func (c *EC2) ModifyTrafficMirrorSessionRequest(input *ModifyTrafficMirrorSessionInput) (req *request.Request, output *ModifyTrafficMirrorSessionOutput) { - op := &request.Operation{ - Name: opModifyTrafficMirrorSession, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyTrafficMirrorSessionInput{} - } - - output = &ModifyTrafficMirrorSessionOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyTrafficMirrorSession API operation for Amazon Elastic Compute Cloud. -// -// Modifies a Traffic Mirror session. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyTrafficMirrorSession for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorSession -func (c *EC2) ModifyTrafficMirrorSession(input *ModifyTrafficMirrorSessionInput) (*ModifyTrafficMirrorSessionOutput, error) { - req, out := c.ModifyTrafficMirrorSessionRequest(input) - return out, req.Send() -} - -// ModifyTrafficMirrorSessionWithContext is the same as ModifyTrafficMirrorSession with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyTrafficMirrorSession for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyTrafficMirrorSessionWithContext(ctx aws.Context, input *ModifyTrafficMirrorSessionInput, opts ...request.Option) (*ModifyTrafficMirrorSessionOutput, error) { - req, out := c.ModifyTrafficMirrorSessionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyTransitGatewayVpcAttachment = "ModifyTransitGatewayVpcAttachment" - -// ModifyTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the -// client's request for the ModifyTransitGatewayVpcAttachment operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyTransitGatewayVpcAttachment for more information on using the ModifyTransitGatewayVpcAttachment -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyTransitGatewayVpcAttachmentRequest method. -// req, resp := client.ModifyTransitGatewayVpcAttachmentRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachment -func (c *EC2) ModifyTransitGatewayVpcAttachmentRequest(input *ModifyTransitGatewayVpcAttachmentInput) (req *request.Request, output *ModifyTransitGatewayVpcAttachmentOutput) { - op := &request.Operation{ - Name: opModifyTransitGatewayVpcAttachment, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyTransitGatewayVpcAttachmentInput{} - } - - output = &ModifyTransitGatewayVpcAttachmentOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified VPC attachment. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyTransitGatewayVpcAttachment for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachment -func (c *EC2) ModifyTransitGatewayVpcAttachment(input *ModifyTransitGatewayVpcAttachmentInput) (*ModifyTransitGatewayVpcAttachmentOutput, error) { - req, out := c.ModifyTransitGatewayVpcAttachmentRequest(input) - return out, req.Send() -} - -// ModifyTransitGatewayVpcAttachmentWithContext is the same as ModifyTransitGatewayVpcAttachment with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyTransitGatewayVpcAttachment for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *ModifyTransitGatewayVpcAttachmentInput, opts ...request.Option) (*ModifyTransitGatewayVpcAttachmentOutput, error) { - req, out := c.ModifyTransitGatewayVpcAttachmentRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVolume = "ModifyVolume" - -// ModifyVolumeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVolume operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVolume for more information on using the ModifyVolume -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVolumeRequest method. -// req, resp := client.ModifyVolumeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolume -func (c *EC2) ModifyVolumeRequest(input *ModifyVolumeInput) (req *request.Request, output *ModifyVolumeOutput) { - op := &request.Operation{ - Name: opModifyVolume, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVolumeInput{} - } - - output = &ModifyVolumeOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVolume API operation for Amazon Elastic Compute Cloud. -// -// You can modify several parameters of an existing EBS volume, including volume -// size, volume type, and IOPS capacity. If your EBS volume is attached to a -// current-generation EC2 instance type, you may be able to apply these changes -// without stopping the instance or detaching the volume from it. For more information -// about modifying an EBS volume running Linux, see Modifying the Size, IOPS, -// or Type of an EBS Volume on Linux (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html). -// For more information about modifying an EBS volume running Windows, see Modifying -// the Size, IOPS, or Type of an EBS Volume on Windows (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html). -// -// When you complete a resize operation on your volume, you need to extend the -// volume's file-system size to take advantage of the new storage capacity. -// For information about extending a Linux file system, see Extending a Linux -// File System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux). -// For information about extending a Windows file system, see Extending a Windows -// File System (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html#recognize-expanded-volume-windows). -// -// You can use CloudWatch Events to check the status of a modification to an -// EBS volume. For information about CloudWatch Events, see the Amazon CloudWatch -// Events User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/). -// You can also track the status of a modification using DescribeVolumesModifications. -// For information about tracking status changes using either method, see Monitoring -// Volume Modifications (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#monitoring_mods). -// -// With previous-generation instance types, resizing an EBS volume may require -// detaching and reattaching the volume or stopping and restarting the instance. -// For more information, see Modifying the Size, IOPS, or Type of an EBS Volume -// on Linux (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html) -// and Modifying the Size, IOPS, or Type of an EBS Volume on Windows (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html). -// -// If you reach the maximum volume modification rate per volume limit, you will -// need to wait at least six hours before applying further modifications to -// the affected EBS volume. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVolume for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolume -func (c *EC2) ModifyVolume(input *ModifyVolumeInput) (*ModifyVolumeOutput, error) { - req, out := c.ModifyVolumeRequest(input) - return out, req.Send() -} - -// ModifyVolumeWithContext is the same as ModifyVolume with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVolume for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVolumeWithContext(ctx aws.Context, input *ModifyVolumeInput, opts ...request.Option) (*ModifyVolumeOutput, error) { - req, out := c.ModifyVolumeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVolumeAttribute = "ModifyVolumeAttribute" - -// ModifyVolumeAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVolumeAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVolumeAttribute for more information on using the ModifyVolumeAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVolumeAttributeRequest method. -// req, resp := client.ModifyVolumeAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttribute -func (c *EC2) ModifyVolumeAttributeRequest(input *ModifyVolumeAttributeInput) (req *request.Request, output *ModifyVolumeAttributeOutput) { - op := &request.Operation{ - Name: opModifyVolumeAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVolumeAttributeInput{} - } - - output = &ModifyVolumeAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyVolumeAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies a volume attribute. -// -// By default, all I/O operations for the volume are suspended when the data -// on the volume is determined to be potentially inconsistent, to prevent undetectable, -// latent data corruption. The I/O access to the volume can be resumed by first -// enabling I/O access and then checking the data consistency on your volume. -// -// You can change the default behavior to resume I/O operations. We recommend -// that you change this only for boot volumes or for volumes that are stateless -// or disposable. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVolumeAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttribute -func (c *EC2) ModifyVolumeAttribute(input *ModifyVolumeAttributeInput) (*ModifyVolumeAttributeOutput, error) { - req, out := c.ModifyVolumeAttributeRequest(input) - return out, req.Send() -} - -// ModifyVolumeAttributeWithContext is the same as ModifyVolumeAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVolumeAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVolumeAttributeWithContext(ctx aws.Context, input *ModifyVolumeAttributeInput, opts ...request.Option) (*ModifyVolumeAttributeOutput, error) { - req, out := c.ModifyVolumeAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcAttribute = "ModifyVpcAttribute" - -// ModifyVpcAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcAttribute for more information on using the ModifyVpcAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcAttributeRequest method. -// req, resp := client.ModifyVpcAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttribute -func (c *EC2) ModifyVpcAttributeRequest(input *ModifyVpcAttributeInput) (req *request.Request, output *ModifyVpcAttributeOutput) { - op := &request.Operation{ - Name: opModifyVpcAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcAttributeInput{} - } - - output = &ModifyVpcAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ModifyVpcAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified attribute of the specified VPC. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttribute -func (c *EC2) ModifyVpcAttribute(input *ModifyVpcAttributeInput) (*ModifyVpcAttributeOutput, error) { - req, out := c.ModifyVpcAttributeRequest(input) - return out, req.Send() -} - -// ModifyVpcAttributeWithContext is the same as ModifyVpcAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcAttributeWithContext(ctx aws.Context, input *ModifyVpcAttributeInput, opts ...request.Option) (*ModifyVpcAttributeOutput, error) { - req, out := c.ModifyVpcAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcEndpoint = "ModifyVpcEndpoint" - -// ModifyVpcEndpointRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcEndpoint operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcEndpoint for more information on using the ModifyVpcEndpoint -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcEndpointRequest method. -// req, resp := client.ModifyVpcEndpointRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpoint -func (c *EC2) ModifyVpcEndpointRequest(input *ModifyVpcEndpointInput) (req *request.Request, output *ModifyVpcEndpointOutput) { - op := &request.Operation{ - Name: opModifyVpcEndpoint, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcEndpointInput{} - } - - output = &ModifyVpcEndpointOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpcEndpoint API operation for Amazon Elastic Compute Cloud. -// -// Modifies attributes of a specified VPC endpoint. The attributes that you -// can modify depend on the type of VPC endpoint (interface or gateway). For -// more information, see VPC Endpoints (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcEndpoint for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpoint -func (c *EC2) ModifyVpcEndpoint(input *ModifyVpcEndpointInput) (*ModifyVpcEndpointOutput, error) { - req, out := c.ModifyVpcEndpointRequest(input) - return out, req.Send() -} - -// ModifyVpcEndpointWithContext is the same as ModifyVpcEndpoint with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcEndpoint for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcEndpointWithContext(ctx aws.Context, input *ModifyVpcEndpointInput, opts ...request.Option) (*ModifyVpcEndpointOutput, error) { - req, out := c.ModifyVpcEndpointRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcEndpointConnectionNotification = "ModifyVpcEndpointConnectionNotification" - -// ModifyVpcEndpointConnectionNotificationRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcEndpointConnectionNotification operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcEndpointConnectionNotification for more information on using the ModifyVpcEndpointConnectionNotification -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcEndpointConnectionNotificationRequest method. -// req, resp := client.ModifyVpcEndpointConnectionNotificationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointConnectionNotification -func (c *EC2) ModifyVpcEndpointConnectionNotificationRequest(input *ModifyVpcEndpointConnectionNotificationInput) (req *request.Request, output *ModifyVpcEndpointConnectionNotificationOutput) { - op := &request.Operation{ - Name: opModifyVpcEndpointConnectionNotification, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcEndpointConnectionNotificationInput{} - } - - output = &ModifyVpcEndpointConnectionNotificationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpcEndpointConnectionNotification API operation for Amazon Elastic Compute Cloud. -// -// Modifies a connection notification for VPC endpoint or VPC endpoint service. -// You can change the SNS topic for the notification, or the events for which -// to be notified. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcEndpointConnectionNotification for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointConnectionNotification -func (c *EC2) ModifyVpcEndpointConnectionNotification(input *ModifyVpcEndpointConnectionNotificationInput) (*ModifyVpcEndpointConnectionNotificationOutput, error) { - req, out := c.ModifyVpcEndpointConnectionNotificationRequest(input) - return out, req.Send() -} - -// ModifyVpcEndpointConnectionNotificationWithContext is the same as ModifyVpcEndpointConnectionNotification with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcEndpointConnectionNotification for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcEndpointConnectionNotificationWithContext(ctx aws.Context, input *ModifyVpcEndpointConnectionNotificationInput, opts ...request.Option) (*ModifyVpcEndpointConnectionNotificationOutput, error) { - req, out := c.ModifyVpcEndpointConnectionNotificationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcEndpointServiceConfiguration = "ModifyVpcEndpointServiceConfiguration" - -// ModifyVpcEndpointServiceConfigurationRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcEndpointServiceConfiguration operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcEndpointServiceConfiguration for more information on using the ModifyVpcEndpointServiceConfiguration -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcEndpointServiceConfigurationRequest method. -// req, resp := client.ModifyVpcEndpointServiceConfigurationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServiceConfiguration -func (c *EC2) ModifyVpcEndpointServiceConfigurationRequest(input *ModifyVpcEndpointServiceConfigurationInput) (req *request.Request, output *ModifyVpcEndpointServiceConfigurationOutput) { - op := &request.Operation{ - Name: opModifyVpcEndpointServiceConfiguration, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcEndpointServiceConfigurationInput{} - } - - output = &ModifyVpcEndpointServiceConfigurationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpcEndpointServiceConfiguration API operation for Amazon Elastic Compute Cloud. -// -// Modifies the attributes of your VPC endpoint service configuration. You can -// change the Network Load Balancers for your service, and you can specify whether -// acceptance is required for requests to connect to your endpoint service through -// an interface VPC endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcEndpointServiceConfiguration for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServiceConfiguration -func (c *EC2) ModifyVpcEndpointServiceConfiguration(input *ModifyVpcEndpointServiceConfigurationInput) (*ModifyVpcEndpointServiceConfigurationOutput, error) { - req, out := c.ModifyVpcEndpointServiceConfigurationRequest(input) - return out, req.Send() -} - -// ModifyVpcEndpointServiceConfigurationWithContext is the same as ModifyVpcEndpointServiceConfiguration with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcEndpointServiceConfiguration for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcEndpointServiceConfigurationWithContext(ctx aws.Context, input *ModifyVpcEndpointServiceConfigurationInput, opts ...request.Option) (*ModifyVpcEndpointServiceConfigurationOutput, error) { - req, out := c.ModifyVpcEndpointServiceConfigurationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcEndpointServicePermissions = "ModifyVpcEndpointServicePermissions" - -// ModifyVpcEndpointServicePermissionsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcEndpointServicePermissions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcEndpointServicePermissions for more information on using the ModifyVpcEndpointServicePermissions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcEndpointServicePermissionsRequest method. -// req, resp := client.ModifyVpcEndpointServicePermissionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePermissions -func (c *EC2) ModifyVpcEndpointServicePermissionsRequest(input *ModifyVpcEndpointServicePermissionsInput) (req *request.Request, output *ModifyVpcEndpointServicePermissionsOutput) { - op := &request.Operation{ - Name: opModifyVpcEndpointServicePermissions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcEndpointServicePermissionsInput{} - } - - output = &ModifyVpcEndpointServicePermissionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpcEndpointServicePermissions API operation for Amazon Elastic Compute Cloud. -// -// Modifies the permissions for your VPC endpoint service (https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html). -// You can add or remove permissions for service consumers (IAM users, IAM roles, -// and AWS accounts) to connect to your endpoint service. -// -// If you grant permissions to all principals, the service is public. Any users -// who know the name of a public service can send a request to attach an endpoint. -// If the service does not require manual approval, attachments are automatically -// approved. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcEndpointServicePermissions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePermissions -func (c *EC2) ModifyVpcEndpointServicePermissions(input *ModifyVpcEndpointServicePermissionsInput) (*ModifyVpcEndpointServicePermissionsOutput, error) { - req, out := c.ModifyVpcEndpointServicePermissionsRequest(input) - return out, req.Send() -} - -// ModifyVpcEndpointServicePermissionsWithContext is the same as ModifyVpcEndpointServicePermissions with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcEndpointServicePermissions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcEndpointServicePermissionsWithContext(ctx aws.Context, input *ModifyVpcEndpointServicePermissionsInput, opts ...request.Option) (*ModifyVpcEndpointServicePermissionsOutput, error) { - req, out := c.ModifyVpcEndpointServicePermissionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcPeeringConnectionOptions = "ModifyVpcPeeringConnectionOptions" - -// ModifyVpcPeeringConnectionOptionsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcPeeringConnectionOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcPeeringConnectionOptions for more information on using the ModifyVpcPeeringConnectionOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcPeeringConnectionOptionsRequest method. -// req, resp := client.ModifyVpcPeeringConnectionOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptions -func (c *EC2) ModifyVpcPeeringConnectionOptionsRequest(input *ModifyVpcPeeringConnectionOptionsInput) (req *request.Request, output *ModifyVpcPeeringConnectionOptionsOutput) { - op := &request.Operation{ - Name: opModifyVpcPeeringConnectionOptions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcPeeringConnectionOptionsInput{} - } - - output = &ModifyVpcPeeringConnectionOptionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpcPeeringConnectionOptions API operation for Amazon Elastic Compute Cloud. -// -// Modifies the VPC peering connection options on one side of a VPC peering -// connection. You can do the following: -// -// * Enable/disable communication over the peering connection between an -// EC2-Classic instance that's linked to your VPC (using ClassicLink) and -// instances in the peer VPC. -// -// * Enable/disable communication over the peering connection between instances -// in your VPC and an EC2-Classic instance that's linked to the peer VPC. -// -// * Enable/disable the ability to resolve public DNS hostnames to private -// IP addresses when queried from instances in the peer VPC. -// -// If the peered VPCs are in the same AWS account, you can enable DNS resolution -// for queries from the local VPC. This ensures that queries from the local -// VPC resolve to private IP addresses in the peer VPC. This option is not available -// if the peered VPCs are in different AWS accounts or different Regions. For -// peered VPCs in different AWS accounts, each AWS account owner must initiate -// a separate request to modify the peering connection options. For inter-region -// peering connections, you must use the Region for the requester VPC to modify -// the requester VPC peering options and the Region for the accepter VPC to -// modify the accepter VPC peering options. To verify which VPCs are the accepter -// and the requester for a VPC peering connection, use the DescribeVpcPeeringConnections -// command. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcPeeringConnectionOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptions -func (c *EC2) ModifyVpcPeeringConnectionOptions(input *ModifyVpcPeeringConnectionOptionsInput) (*ModifyVpcPeeringConnectionOptionsOutput, error) { - req, out := c.ModifyVpcPeeringConnectionOptionsRequest(input) - return out, req.Send() -} - -// ModifyVpcPeeringConnectionOptionsWithContext is the same as ModifyVpcPeeringConnectionOptions with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcPeeringConnectionOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcPeeringConnectionOptionsWithContext(ctx aws.Context, input *ModifyVpcPeeringConnectionOptionsInput, opts ...request.Option) (*ModifyVpcPeeringConnectionOptionsOutput, error) { - req, out := c.ModifyVpcPeeringConnectionOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpcTenancy = "ModifyVpcTenancy" - -// ModifyVpcTenancyRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcTenancy operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpcTenancy for more information on using the ModifyVpcTenancy -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpcTenancyRequest method. -// req, resp := client.ModifyVpcTenancyRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcTenancy -func (c *EC2) ModifyVpcTenancyRequest(input *ModifyVpcTenancyInput) (req *request.Request, output *ModifyVpcTenancyOutput) { - op := &request.Operation{ - Name: opModifyVpcTenancy, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpcTenancyInput{} - } - - output = &ModifyVpcTenancyOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpcTenancy API operation for Amazon Elastic Compute Cloud. -// -// Modifies the instance tenancy attribute of the specified VPC. You can change -// the instance tenancy attribute of a VPC to default only. You cannot change -// the instance tenancy attribute to dedicated. -// -// After you modify the tenancy of the VPC, any new instances that you launch -// into the VPC have a tenancy of default, unless you specify otherwise during -// launch. The tenancy of any existing instances in the VPC is not affected. -// -// For more information, see Dedicated Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcTenancy for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcTenancy -func (c *EC2) ModifyVpcTenancy(input *ModifyVpcTenancyInput) (*ModifyVpcTenancyOutput, error) { - req, out := c.ModifyVpcTenancyRequest(input) - return out, req.Send() -} - -// ModifyVpcTenancyWithContext is the same as ModifyVpcTenancy with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpcTenancy for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpcTenancyWithContext(ctx aws.Context, input *ModifyVpcTenancyInput, opts ...request.Option) (*ModifyVpcTenancyOutput, error) { - req, out := c.ModifyVpcTenancyRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpnConnection = "ModifyVpnConnection" - -// ModifyVpnConnectionRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpnConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpnConnection for more information on using the ModifyVpnConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpnConnectionRequest method. -// req, resp := client.ModifyVpnConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnection -func (c *EC2) ModifyVpnConnectionRequest(input *ModifyVpnConnectionInput) (req *request.Request, output *ModifyVpnConnectionOutput) { - op := &request.Operation{ - Name: opModifyVpnConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpnConnectionInput{} - } - - output = &ModifyVpnConnectionOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpnConnection API operation for Amazon Elastic Compute Cloud. -// -// Modifies the target gateway of an AWS Site-to-Site VPN connection. The following -// migration options are available: -// -// * An existing virtual private gateway to a new virtual private gateway -// -// * An existing virtual private gateway to a transit gateway -// -// * An existing transit gateway to a new transit gateway -// -// * An existing transit gateway to a virtual private gateway -// -// Before you perform the migration to the new gateway, you must configure the -// new gateway. Use CreateVpnGateway to create a virtual private gateway, or -// CreateTransitGateway to create a transit gateway. -// -// This step is required when you migrate from a virtual private gateway with -// static routes to a transit gateway. -// -// You must delete the static routes before you migrate to the new gateway. -// -// Keep a copy of the static route before you delete it. You will need to add -// back these routes to the transit gateway after the VPN connection migration -// is complete. -// -// After you migrate to the new gateway, you might need to modify your VPC route -// table. Use CreateRoute and DeleteRoute to make the changes described in VPN -// Gateway Target Modification Required VPC Route Table Updates (https://docs.aws.amazon.com/vpn/latest/s2svpn/modify-vpn-target.html#step-update-routing) -// in the AWS Site-to-Site VPN User Guide. -// -// When the new gateway is a transit gateway, modify the transit gateway route -// table to allow traffic between the VPC and the AWS Site-to-Site VPN connection. -// Use CreateTransitGatewayRoute to add the routes. -// -// If you deleted VPN static routes, you must add the static routes to the transit -// gateway route table. -// -// After you perform this operation, the AWS VPN endpoint's IP addresses on -// the AWS side and the tunnel options remain intact. Your s2slong; connection -// will be temporarily unavailable for approximately 10 minutes while we provision -// the new endpoints -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpnConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnection -func (c *EC2) ModifyVpnConnection(input *ModifyVpnConnectionInput) (*ModifyVpnConnectionOutput, error) { - req, out := c.ModifyVpnConnectionRequest(input) - return out, req.Send() -} - -// ModifyVpnConnectionWithContext is the same as ModifyVpnConnection with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpnConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpnConnectionWithContext(ctx aws.Context, input *ModifyVpnConnectionInput, opts ...request.Option) (*ModifyVpnConnectionOutput, error) { - req, out := c.ModifyVpnConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpnTunnelCertificate = "ModifyVpnTunnelCertificate" - -// ModifyVpnTunnelCertificateRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpnTunnelCertificate operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpnTunnelCertificate for more information on using the ModifyVpnTunnelCertificate -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpnTunnelCertificateRequest method. -// req, resp := client.ModifyVpnTunnelCertificateRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelCertificate -func (c *EC2) ModifyVpnTunnelCertificateRequest(input *ModifyVpnTunnelCertificateInput) (req *request.Request, output *ModifyVpnTunnelCertificateOutput) { - op := &request.Operation{ - Name: opModifyVpnTunnelCertificate, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpnTunnelCertificateInput{} - } - - output = &ModifyVpnTunnelCertificateOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpnTunnelCertificate API operation for Amazon Elastic Compute Cloud. -// -// Modifies the VPN tunnel endpoint certificate. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpnTunnelCertificate for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelCertificate -func (c *EC2) ModifyVpnTunnelCertificate(input *ModifyVpnTunnelCertificateInput) (*ModifyVpnTunnelCertificateOutput, error) { - req, out := c.ModifyVpnTunnelCertificateRequest(input) - return out, req.Send() -} - -// ModifyVpnTunnelCertificateWithContext is the same as ModifyVpnTunnelCertificate with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpnTunnelCertificate for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpnTunnelCertificateWithContext(ctx aws.Context, input *ModifyVpnTunnelCertificateInput, opts ...request.Option) (*ModifyVpnTunnelCertificateOutput, error) { - req, out := c.ModifyVpnTunnelCertificateRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opModifyVpnTunnelOptions = "ModifyVpnTunnelOptions" - -// ModifyVpnTunnelOptionsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpnTunnelOptions operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ModifyVpnTunnelOptions for more information on using the ModifyVpnTunnelOptions -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ModifyVpnTunnelOptionsRequest method. -// req, resp := client.ModifyVpnTunnelOptionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptions -func (c *EC2) ModifyVpnTunnelOptionsRequest(input *ModifyVpnTunnelOptionsInput) (req *request.Request, output *ModifyVpnTunnelOptionsOutput) { - op := &request.Operation{ - Name: opModifyVpnTunnelOptions, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ModifyVpnTunnelOptionsInput{} - } - - output = &ModifyVpnTunnelOptionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ModifyVpnTunnelOptions API operation for Amazon Elastic Compute Cloud. -// -// Modifies the options for a VPN tunnel in an AWS Site-to-Site VPN connection. -// You can modify multiple options for a tunnel in a single request, but you -// can only modify one tunnel at a time. For more information, see Site-to-Site -// VPN Tunnel Options for Your Site-to-Site VPN Connection (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNTunnels.html) -// in the AWS Site-to-Site VPN User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpnTunnelOptions for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptions -func (c *EC2) ModifyVpnTunnelOptions(input *ModifyVpnTunnelOptionsInput) (*ModifyVpnTunnelOptionsOutput, error) { - req, out := c.ModifyVpnTunnelOptionsRequest(input) - return out, req.Send() -} - -// ModifyVpnTunnelOptionsWithContext is the same as ModifyVpnTunnelOptions with the addition of -// the ability to pass a context and additional request options. -// -// See ModifyVpnTunnelOptions for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ModifyVpnTunnelOptionsWithContext(ctx aws.Context, input *ModifyVpnTunnelOptionsInput, opts ...request.Option) (*ModifyVpnTunnelOptionsOutput, error) { - req, out := c.ModifyVpnTunnelOptionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opMonitorInstances = "MonitorInstances" - -// MonitorInstancesRequest generates a "aws/request.Request" representing the -// client's request for the MonitorInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See MonitorInstances for more information on using the MonitorInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the MonitorInstancesRequest method. -// req, resp := client.MonitorInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstances -func (c *EC2) MonitorInstancesRequest(input *MonitorInstancesInput) (req *request.Request, output *MonitorInstancesOutput) { - op := &request.Operation{ - Name: opMonitorInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &MonitorInstancesInput{} - } - - output = &MonitorInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// MonitorInstances API operation for Amazon Elastic Compute Cloud. -// -// Enables detailed monitoring for a running instance. Otherwise, basic monitoring -// is enabled. For more information, see Monitoring Your Instances and Volumes -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// To disable detailed monitoring, see . -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation MonitorInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstances -func (c *EC2) MonitorInstances(input *MonitorInstancesInput) (*MonitorInstancesOutput, error) { - req, out := c.MonitorInstancesRequest(input) - return out, req.Send() -} - -// MonitorInstancesWithContext is the same as MonitorInstances with the addition of -// the ability to pass a context and additional request options. -// -// See MonitorInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) MonitorInstancesWithContext(ctx aws.Context, input *MonitorInstancesInput, opts ...request.Option) (*MonitorInstancesOutput, error) { - req, out := c.MonitorInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opMoveAddressToVpc = "MoveAddressToVpc" - -// MoveAddressToVpcRequest generates a "aws/request.Request" representing the -// client's request for the MoveAddressToVpc operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See MoveAddressToVpc for more information on using the MoveAddressToVpc -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the MoveAddressToVpcRequest method. -// req, resp := client.MoveAddressToVpcRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpc -func (c *EC2) MoveAddressToVpcRequest(input *MoveAddressToVpcInput) (req *request.Request, output *MoveAddressToVpcOutput) { - op := &request.Operation{ - Name: opMoveAddressToVpc, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &MoveAddressToVpcInput{} - } - - output = &MoveAddressToVpcOutput{} - req = c.newRequest(op, input, output) - return -} - -// MoveAddressToVpc API operation for Amazon Elastic Compute Cloud. -// -// Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC -// platform. The Elastic IP address must be allocated to your account for more -// than 24 hours, and it must not be associated with an instance. After the -// Elastic IP address is moved, it is no longer available for use in the EC2-Classic -// platform, unless you move it back using the RestoreAddressToClassic request. -// You cannot move an Elastic IP address that was originally allocated for use -// in the EC2-VPC platform to the EC2-Classic platform. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation MoveAddressToVpc for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpc -func (c *EC2) MoveAddressToVpc(input *MoveAddressToVpcInput) (*MoveAddressToVpcOutput, error) { - req, out := c.MoveAddressToVpcRequest(input) - return out, req.Send() -} - -// MoveAddressToVpcWithContext is the same as MoveAddressToVpc with the addition of -// the ability to pass a context and additional request options. -// -// See MoveAddressToVpc for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) MoveAddressToVpcWithContext(ctx aws.Context, input *MoveAddressToVpcInput, opts ...request.Option) (*MoveAddressToVpcOutput, error) { - req, out := c.MoveAddressToVpcRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opProvisionByoipCidr = "ProvisionByoipCidr" - -// ProvisionByoipCidrRequest generates a "aws/request.Request" representing the -// client's request for the ProvisionByoipCidr operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ProvisionByoipCidr for more information on using the ProvisionByoipCidr -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ProvisionByoipCidrRequest method. -// req, resp := client.ProvisionByoipCidrRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionByoipCidr -func (c *EC2) ProvisionByoipCidrRequest(input *ProvisionByoipCidrInput) (req *request.Request, output *ProvisionByoipCidrOutput) { - op := &request.Operation{ - Name: opProvisionByoipCidr, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ProvisionByoipCidrInput{} - } - - output = &ProvisionByoipCidrOutput{} - req = c.newRequest(op, input, output) - return -} - -// ProvisionByoipCidr API operation for Amazon Elastic Compute Cloud. -// -// Provisions an address range for use with your AWS resources through bring -// your own IP addresses (BYOIP) and creates a corresponding address pool. After -// the address range is provisioned, it is ready to be advertised using AdvertiseByoipCidr. -// -// AWS verifies that you own the address range and are authorized to advertise -// it. You must ensure that the address range is registered to you and that -// you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise -// the address range. For more information, see Bring Your Own IP Addresses -// (BYOIP) (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Provisioning an address range is an asynchronous operation, so the call returns -// immediately, but the address range is not ready to use until its status changes -// from pending-provision to provisioned. To monitor the status of an address -// range, use DescribeByoipCidrs. To allocate an Elastic IP address from your -// address pool, use AllocateAddress with either the specific address from the -// address pool or the ID of the address pool. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ProvisionByoipCidr for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionByoipCidr -func (c *EC2) ProvisionByoipCidr(input *ProvisionByoipCidrInput) (*ProvisionByoipCidrOutput, error) { - req, out := c.ProvisionByoipCidrRequest(input) - return out, req.Send() -} - -// ProvisionByoipCidrWithContext is the same as ProvisionByoipCidr with the addition of -// the ability to pass a context and additional request options. -// -// See ProvisionByoipCidr for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ProvisionByoipCidrWithContext(ctx aws.Context, input *ProvisionByoipCidrInput, opts ...request.Option) (*ProvisionByoipCidrOutput, error) { - req, out := c.ProvisionByoipCidrRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opPurchaseHostReservation = "PurchaseHostReservation" - -// PurchaseHostReservationRequest generates a "aws/request.Request" representing the -// client's request for the PurchaseHostReservation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See PurchaseHostReservation for more information on using the PurchaseHostReservation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the PurchaseHostReservationRequest method. -// req, resp := client.PurchaseHostReservationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservation -func (c *EC2) PurchaseHostReservationRequest(input *PurchaseHostReservationInput) (req *request.Request, output *PurchaseHostReservationOutput) { - op := &request.Operation{ - Name: opPurchaseHostReservation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &PurchaseHostReservationInput{} - } - - output = &PurchaseHostReservationOutput{} - req = c.newRequest(op, input, output) - return -} - -// PurchaseHostReservation API operation for Amazon Elastic Compute Cloud. -// -// Purchase a reservation with configurations that match those of your Dedicated -// Host. You must have active Dedicated Hosts in your account before you purchase -// a reservation. This action results in the specified reservation being purchased -// and charged to your account. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation PurchaseHostReservation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservation -func (c *EC2) PurchaseHostReservation(input *PurchaseHostReservationInput) (*PurchaseHostReservationOutput, error) { - req, out := c.PurchaseHostReservationRequest(input) - return out, req.Send() -} - -// PurchaseHostReservationWithContext is the same as PurchaseHostReservation with the addition of -// the ability to pass a context and additional request options. -// -// See PurchaseHostReservation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) PurchaseHostReservationWithContext(ctx aws.Context, input *PurchaseHostReservationInput, opts ...request.Option) (*PurchaseHostReservationOutput, error) { - req, out := c.PurchaseHostReservationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opPurchaseReservedInstancesOffering = "PurchaseReservedInstancesOffering" - -// PurchaseReservedInstancesOfferingRequest generates a "aws/request.Request" representing the -// client's request for the PurchaseReservedInstancesOffering operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See PurchaseReservedInstancesOffering for more information on using the PurchaseReservedInstancesOffering -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the PurchaseReservedInstancesOfferingRequest method. -// req, resp := client.PurchaseReservedInstancesOfferingRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOffering -func (c *EC2) PurchaseReservedInstancesOfferingRequest(input *PurchaseReservedInstancesOfferingInput) (req *request.Request, output *PurchaseReservedInstancesOfferingOutput) { - op := &request.Operation{ - Name: opPurchaseReservedInstancesOffering, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &PurchaseReservedInstancesOfferingInput{} - } - - output = &PurchaseReservedInstancesOfferingOutput{} - req = c.newRequest(op, input, output) - return -} - -// PurchaseReservedInstancesOffering API operation for Amazon Elastic Compute Cloud. -// -// Purchases a Reserved Instance for use with your account. With Reserved Instances, -// you pay a lower hourly rate compared to On-Demand instance pricing. -// -// Use DescribeReservedInstancesOfferings to get a list of Reserved Instance -// offerings that match your specifications. After you've purchased a Reserved -// Instance, you can check for your new Reserved Instance with DescribeReservedInstances. -// -// To queue a purchase for a future date and time, specify a purchase time. -// If you do not specify a purchase time, the default is the current time. -// -// For more information, see Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) -// and Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation PurchaseReservedInstancesOffering for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOffering -func (c *EC2) PurchaseReservedInstancesOffering(input *PurchaseReservedInstancesOfferingInput) (*PurchaseReservedInstancesOfferingOutput, error) { - req, out := c.PurchaseReservedInstancesOfferingRequest(input) - return out, req.Send() -} - -// PurchaseReservedInstancesOfferingWithContext is the same as PurchaseReservedInstancesOffering with the addition of -// the ability to pass a context and additional request options. -// -// See PurchaseReservedInstancesOffering for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) PurchaseReservedInstancesOfferingWithContext(ctx aws.Context, input *PurchaseReservedInstancesOfferingInput, opts ...request.Option) (*PurchaseReservedInstancesOfferingOutput, error) { - req, out := c.PurchaseReservedInstancesOfferingRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opPurchaseScheduledInstances = "PurchaseScheduledInstances" - -// PurchaseScheduledInstancesRequest generates a "aws/request.Request" representing the -// client's request for the PurchaseScheduledInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See PurchaseScheduledInstances for more information on using the PurchaseScheduledInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the PurchaseScheduledInstancesRequest method. -// req, resp := client.PurchaseScheduledInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstances -func (c *EC2) PurchaseScheduledInstancesRequest(input *PurchaseScheduledInstancesInput) (req *request.Request, output *PurchaseScheduledInstancesOutput) { - op := &request.Operation{ - Name: opPurchaseScheduledInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &PurchaseScheduledInstancesInput{} - } - - output = &PurchaseScheduledInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// PurchaseScheduledInstances API operation for Amazon Elastic Compute Cloud. -// -// Purchases the Scheduled Instances with the specified schedule. -// -// Scheduled Instances enable you to purchase Amazon EC2 compute capacity by -// the hour for a one-year term. Before you can purchase a Scheduled Instance, -// you must call DescribeScheduledInstanceAvailability to check for available -// schedules and obtain a purchase token. After you purchase a Scheduled Instance, -// you must call RunScheduledInstances during each scheduled time period. -// -// After you purchase a Scheduled Instance, you can't cancel, modify, or resell -// your purchase. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation PurchaseScheduledInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstances -func (c *EC2) PurchaseScheduledInstances(input *PurchaseScheduledInstancesInput) (*PurchaseScheduledInstancesOutput, error) { - req, out := c.PurchaseScheduledInstancesRequest(input) - return out, req.Send() -} - -// PurchaseScheduledInstancesWithContext is the same as PurchaseScheduledInstances with the addition of -// the ability to pass a context and additional request options. -// -// See PurchaseScheduledInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) PurchaseScheduledInstancesWithContext(ctx aws.Context, input *PurchaseScheduledInstancesInput, opts ...request.Option) (*PurchaseScheduledInstancesOutput, error) { - req, out := c.PurchaseScheduledInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRebootInstances = "RebootInstances" - -// RebootInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RebootInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RebootInstances for more information on using the RebootInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RebootInstancesRequest method. -// req, resp := client.RebootInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstances -func (c *EC2) RebootInstancesRequest(input *RebootInstancesInput) (req *request.Request, output *RebootInstancesOutput) { - op := &request.Operation{ - Name: opRebootInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RebootInstancesInput{} - } - - output = &RebootInstancesOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// RebootInstances API operation for Amazon Elastic Compute Cloud. -// -// Requests a reboot of the specified instances. This operation is asynchronous; -// it only queues a request to reboot the specified instances. The operation -// succeeds if the instances are valid and belong to you. Requests to reboot -// terminated instances are ignored. -// -// If an instance does not cleanly shut down within four minutes, Amazon EC2 -// performs a hard reboot. -// -// For more information about troubleshooting, see Getting Console Output and -// Rebooting Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RebootInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstances -func (c *EC2) RebootInstances(input *RebootInstancesInput) (*RebootInstancesOutput, error) { - req, out := c.RebootInstancesRequest(input) - return out, req.Send() -} - -// RebootInstancesWithContext is the same as RebootInstances with the addition of -// the ability to pass a context and additional request options. -// -// See RebootInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RebootInstancesWithContext(ctx aws.Context, input *RebootInstancesInput, opts ...request.Option) (*RebootInstancesOutput, error) { - req, out := c.RebootInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRegisterImage = "RegisterImage" - -// RegisterImageRequest generates a "aws/request.Request" representing the -// client's request for the RegisterImage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RegisterImage for more information on using the RegisterImage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RegisterImageRequest method. -// req, resp := client.RegisterImageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage -func (c *EC2) RegisterImageRequest(input *RegisterImageInput) (req *request.Request, output *RegisterImageOutput) { - op := &request.Operation{ - Name: opRegisterImage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RegisterImageInput{} - } - - output = &RegisterImageOutput{} - req = c.newRequest(op, input, output) - return -} - -// RegisterImage API operation for Amazon Elastic Compute Cloud. -// -// Registers an AMI. When you're creating an AMI, this is the final step you -// must complete before you can launch an instance from the AMI. For more information -// about creating AMIs, see Creating Your Own AMIs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// For Amazon EBS-backed instances, CreateImage creates and registers the AMI -// in a single request, so you don't have to register the AMI yourself. -// -// You can also use RegisterImage to create an Amazon EBS-backed Linux AMI from -// a snapshot of a root device volume. You specify the snapshot using the block -// device mapping. For more information, see Launching a Linux Instance from -// a Backup (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-launch-snapshot.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// You can't register an image where a secondary (non-root) snapshot has AWS -// Marketplace product codes. -// -// Windows and some Linux distributions, such as Red Hat Enterprise Linux (RHEL) -// and SUSE Linux Enterprise Server (SLES), use the EC2 billing product code -// associated with an AMI to verify the subscription status for package updates. -// To create a new AMI for operating systems that require a billing product -// code, do the following: -// -// Launch an instance from an existing AMI with that billing product code. -// -// Customize the instance. -// -// Create a new AMI from the instance using CreateImage to preserve the billing -// product code association. -// -// If you purchase a Reserved Instance to apply to an On-Demand Instance that -// was launched from an AMI with a billing product code, make sure that the -// Reserved Instance has the matching billing product code. If you purchase -// a Reserved Instance without the matching billing product code, the Reserved -// Instance will not be applied to the On-Demand Instance. -// -// If needed, you can deregister an AMI at any time. Any modifications you make -// to an AMI backed by an instance store volume invalidates its registration. -// If you make changes to an image, deregister the previous image and register -// the new image. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RegisterImage for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage -func (c *EC2) RegisterImage(input *RegisterImageInput) (*RegisterImageOutput, error) { - req, out := c.RegisterImageRequest(input) - return out, req.Send() -} - -// RegisterImageWithContext is the same as RegisterImage with the addition of -// the ability to pass a context and additional request options. -// -// See RegisterImage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RegisterImageWithContext(ctx aws.Context, input *RegisterImageInput, opts ...request.Option) (*RegisterImageOutput, error) { - req, out := c.RegisterImageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRejectTransitGatewayVpcAttachment = "RejectTransitGatewayVpcAttachment" - -// RejectTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the -// client's request for the RejectTransitGatewayVpcAttachment operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RejectTransitGatewayVpcAttachment for more information on using the RejectTransitGatewayVpcAttachment -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RejectTransitGatewayVpcAttachmentRequest method. -// req, resp := client.RejectTransitGatewayVpcAttachmentRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayVpcAttachment -func (c *EC2) RejectTransitGatewayVpcAttachmentRequest(input *RejectTransitGatewayVpcAttachmentInput) (req *request.Request, output *RejectTransitGatewayVpcAttachmentOutput) { - op := &request.Operation{ - Name: opRejectTransitGatewayVpcAttachment, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RejectTransitGatewayVpcAttachmentInput{} - } - - output = &RejectTransitGatewayVpcAttachmentOutput{} - req = c.newRequest(op, input, output) - return -} - -// RejectTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. -// -// Rejects a request to attach a VPC to a transit gateway. -// -// The VPC attachment must be in the pendingAcceptance state. Use DescribeTransitGatewayVpcAttachments -// to view your pending VPC attachment requests. Use AcceptTransitGatewayVpcAttachment -// to accept a VPC attachment request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RejectTransitGatewayVpcAttachment for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayVpcAttachment -func (c *EC2) RejectTransitGatewayVpcAttachment(input *RejectTransitGatewayVpcAttachmentInput) (*RejectTransitGatewayVpcAttachmentOutput, error) { - req, out := c.RejectTransitGatewayVpcAttachmentRequest(input) - return out, req.Send() -} - -// RejectTransitGatewayVpcAttachmentWithContext is the same as RejectTransitGatewayVpcAttachment with the addition of -// the ability to pass a context and additional request options. -// -// See RejectTransitGatewayVpcAttachment for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RejectTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *RejectTransitGatewayVpcAttachmentInput, opts ...request.Option) (*RejectTransitGatewayVpcAttachmentOutput, error) { - req, out := c.RejectTransitGatewayVpcAttachmentRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRejectVpcEndpointConnections = "RejectVpcEndpointConnections" - -// RejectVpcEndpointConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the RejectVpcEndpointConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RejectVpcEndpointConnections for more information on using the RejectVpcEndpointConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RejectVpcEndpointConnectionsRequest method. -// req, resp := client.RejectVpcEndpointConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcEndpointConnections -func (c *EC2) RejectVpcEndpointConnectionsRequest(input *RejectVpcEndpointConnectionsInput) (req *request.Request, output *RejectVpcEndpointConnectionsOutput) { - op := &request.Operation{ - Name: opRejectVpcEndpointConnections, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RejectVpcEndpointConnectionsInput{} - } - - output = &RejectVpcEndpointConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// RejectVpcEndpointConnections API operation for Amazon Elastic Compute Cloud. -// -// Rejects one or more VPC endpoint connection requests to your VPC endpoint -// service. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RejectVpcEndpointConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcEndpointConnections -func (c *EC2) RejectVpcEndpointConnections(input *RejectVpcEndpointConnectionsInput) (*RejectVpcEndpointConnectionsOutput, error) { - req, out := c.RejectVpcEndpointConnectionsRequest(input) - return out, req.Send() -} - -// RejectVpcEndpointConnectionsWithContext is the same as RejectVpcEndpointConnections with the addition of -// the ability to pass a context and additional request options. -// -// See RejectVpcEndpointConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RejectVpcEndpointConnectionsWithContext(ctx aws.Context, input *RejectVpcEndpointConnectionsInput, opts ...request.Option) (*RejectVpcEndpointConnectionsOutput, error) { - req, out := c.RejectVpcEndpointConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRejectVpcPeeringConnection = "RejectVpcPeeringConnection" - -// RejectVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the RejectVpcPeeringConnection operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RejectVpcPeeringConnection for more information on using the RejectVpcPeeringConnection -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RejectVpcPeeringConnectionRequest method. -// req, resp := client.RejectVpcPeeringConnectionRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnection -func (c *EC2) RejectVpcPeeringConnectionRequest(input *RejectVpcPeeringConnectionInput) (req *request.Request, output *RejectVpcPeeringConnectionOutput) { - op := &request.Operation{ - Name: opRejectVpcPeeringConnection, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RejectVpcPeeringConnectionInput{} - } - - output = &RejectVpcPeeringConnectionOutput{} - req = c.newRequest(op, input, output) - return -} - -// RejectVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. -// -// Rejects a VPC peering connection request. The VPC peering connection must -// be in the pending-acceptance state. Use the DescribeVpcPeeringConnections -// request to view your outstanding VPC peering connection requests. To delete -// an active VPC peering connection, or to delete a VPC peering connection request -// that you initiated, use DeleteVpcPeeringConnection. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RejectVpcPeeringConnection for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnection -func (c *EC2) RejectVpcPeeringConnection(input *RejectVpcPeeringConnectionInput) (*RejectVpcPeeringConnectionOutput, error) { - req, out := c.RejectVpcPeeringConnectionRequest(input) - return out, req.Send() -} - -// RejectVpcPeeringConnectionWithContext is the same as RejectVpcPeeringConnection with the addition of -// the ability to pass a context and additional request options. -// -// See RejectVpcPeeringConnection for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RejectVpcPeeringConnectionWithContext(ctx aws.Context, input *RejectVpcPeeringConnectionInput, opts ...request.Option) (*RejectVpcPeeringConnectionOutput, error) { - req, out := c.RejectVpcPeeringConnectionRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReleaseAddress = "ReleaseAddress" - -// ReleaseAddressRequest generates a "aws/request.Request" representing the -// client's request for the ReleaseAddress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReleaseAddress for more information on using the ReleaseAddress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReleaseAddressRequest method. -// req, resp := client.ReleaseAddressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddress -func (c *EC2) ReleaseAddressRequest(input *ReleaseAddressInput) (req *request.Request, output *ReleaseAddressOutput) { - op := &request.Operation{ - Name: opReleaseAddress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReleaseAddressInput{} - } - - output = &ReleaseAddressOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ReleaseAddress API operation for Amazon Elastic Compute Cloud. -// -// Releases the specified Elastic IP address. -// -// [EC2-Classic, default VPC] Releasing an Elastic IP address automatically -// disassociates it from any instance that it's associated with. To disassociate -// an Elastic IP address without releasing it, use DisassociateAddress. -// -// [Nondefault VPC] You must use DisassociateAddress to disassociate the Elastic -// IP address before you can release it. Otherwise, Amazon EC2 returns an error -// (InvalidIPAddress.InUse). -// -// After releasing an Elastic IP address, it is released to the IP address pool. -// Be sure to update your DNS records and any servers or devices that communicate -// with the address. If you attempt to release an Elastic IP address that you -// already released, you'll get an AuthFailure error if the address is already -// allocated to another AWS account. -// -// [EC2-VPC] After you release an Elastic IP address for use in a VPC, you might -// be able to recover it. For more information, see AllocateAddress. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReleaseAddress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddress -func (c *EC2) ReleaseAddress(input *ReleaseAddressInput) (*ReleaseAddressOutput, error) { - req, out := c.ReleaseAddressRequest(input) - return out, req.Send() -} - -// ReleaseAddressWithContext is the same as ReleaseAddress with the addition of -// the ability to pass a context and additional request options. -// -// See ReleaseAddress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReleaseAddressWithContext(ctx aws.Context, input *ReleaseAddressInput, opts ...request.Option) (*ReleaseAddressOutput, error) { - req, out := c.ReleaseAddressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReleaseHosts = "ReleaseHosts" - -// ReleaseHostsRequest generates a "aws/request.Request" representing the -// client's request for the ReleaseHosts operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReleaseHosts for more information on using the ReleaseHosts -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReleaseHostsRequest method. -// req, resp := client.ReleaseHostsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHosts -func (c *EC2) ReleaseHostsRequest(input *ReleaseHostsInput) (req *request.Request, output *ReleaseHostsOutput) { - op := &request.Operation{ - Name: opReleaseHosts, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReleaseHostsInput{} - } - - output = &ReleaseHostsOutput{} - req = c.newRequest(op, input, output) - return -} - -// ReleaseHosts API operation for Amazon Elastic Compute Cloud. -// -// When you no longer want to use an On-Demand Dedicated Host it can be released. -// On-Demand billing is stopped and the host goes into released state. The host -// ID of Dedicated Hosts that have been released can no longer be specified -// in another request, for example, to modify the host. You must stop or terminate -// all instances on a host before it can be released. -// -// When Dedicated Hosts are released, it may take some time for them to stop -// counting toward your limit and you may receive capacity errors when trying -// to allocate new Dedicated Hosts. Wait a few minutes and then try again. -// -// Released hosts still appear in a DescribeHosts response. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReleaseHosts for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHosts -func (c *EC2) ReleaseHosts(input *ReleaseHostsInput) (*ReleaseHostsOutput, error) { - req, out := c.ReleaseHostsRequest(input) - return out, req.Send() -} - -// ReleaseHostsWithContext is the same as ReleaseHosts with the addition of -// the ability to pass a context and additional request options. -// -// See ReleaseHosts for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReleaseHostsWithContext(ctx aws.Context, input *ReleaseHostsInput, opts ...request.Option) (*ReleaseHostsOutput, error) { - req, out := c.ReleaseHostsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReplaceIamInstanceProfileAssociation = "ReplaceIamInstanceProfileAssociation" - -// ReplaceIamInstanceProfileAssociationRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceIamInstanceProfileAssociation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReplaceIamInstanceProfileAssociation for more information on using the ReplaceIamInstanceProfileAssociation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReplaceIamInstanceProfileAssociationRequest method. -// req, resp := client.ReplaceIamInstanceProfileAssociationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociation -func (c *EC2) ReplaceIamInstanceProfileAssociationRequest(input *ReplaceIamInstanceProfileAssociationInput) (req *request.Request, output *ReplaceIamInstanceProfileAssociationOutput) { - op := &request.Operation{ - Name: opReplaceIamInstanceProfileAssociation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReplaceIamInstanceProfileAssociationInput{} - } - - output = &ReplaceIamInstanceProfileAssociationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ReplaceIamInstanceProfileAssociation API operation for Amazon Elastic Compute Cloud. -// -// Replaces an IAM instance profile for the specified running instance. You -// can use this action to change the IAM instance profile that's associated -// with an instance without having to disassociate the existing IAM instance -// profile first. -// -// Use DescribeIamInstanceProfileAssociations to get the association ID. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceIamInstanceProfileAssociation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociation -func (c *EC2) ReplaceIamInstanceProfileAssociation(input *ReplaceIamInstanceProfileAssociationInput) (*ReplaceIamInstanceProfileAssociationOutput, error) { - req, out := c.ReplaceIamInstanceProfileAssociationRequest(input) - return out, req.Send() -} - -// ReplaceIamInstanceProfileAssociationWithContext is the same as ReplaceIamInstanceProfileAssociation with the addition of -// the ability to pass a context and additional request options. -// -// See ReplaceIamInstanceProfileAssociation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReplaceIamInstanceProfileAssociationWithContext(ctx aws.Context, input *ReplaceIamInstanceProfileAssociationInput, opts ...request.Option) (*ReplaceIamInstanceProfileAssociationOutput, error) { - req, out := c.ReplaceIamInstanceProfileAssociationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReplaceNetworkAclAssociation = "ReplaceNetworkAclAssociation" - -// ReplaceNetworkAclAssociationRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceNetworkAclAssociation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReplaceNetworkAclAssociation for more information on using the ReplaceNetworkAclAssociation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReplaceNetworkAclAssociationRequest method. -// req, resp := client.ReplaceNetworkAclAssociationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociation -func (c *EC2) ReplaceNetworkAclAssociationRequest(input *ReplaceNetworkAclAssociationInput) (req *request.Request, output *ReplaceNetworkAclAssociationOutput) { - op := &request.Operation{ - Name: opReplaceNetworkAclAssociation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReplaceNetworkAclAssociationInput{} - } - - output = &ReplaceNetworkAclAssociationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ReplaceNetworkAclAssociation API operation for Amazon Elastic Compute Cloud. -// -// Changes which network ACL a subnet is associated with. By default when you -// create a subnet, it's automatically associated with the default network ACL. -// For more information, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// This is an idempotent operation. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceNetworkAclAssociation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociation -func (c *EC2) ReplaceNetworkAclAssociation(input *ReplaceNetworkAclAssociationInput) (*ReplaceNetworkAclAssociationOutput, error) { - req, out := c.ReplaceNetworkAclAssociationRequest(input) - return out, req.Send() -} - -// ReplaceNetworkAclAssociationWithContext is the same as ReplaceNetworkAclAssociation with the addition of -// the ability to pass a context and additional request options. -// -// See ReplaceNetworkAclAssociation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReplaceNetworkAclAssociationWithContext(ctx aws.Context, input *ReplaceNetworkAclAssociationInput, opts ...request.Option) (*ReplaceNetworkAclAssociationOutput, error) { - req, out := c.ReplaceNetworkAclAssociationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReplaceNetworkAclEntry = "ReplaceNetworkAclEntry" - -// ReplaceNetworkAclEntryRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceNetworkAclEntry operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReplaceNetworkAclEntry for more information on using the ReplaceNetworkAclEntry -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReplaceNetworkAclEntryRequest method. -// req, resp := client.ReplaceNetworkAclEntryRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntry -func (c *EC2) ReplaceNetworkAclEntryRequest(input *ReplaceNetworkAclEntryInput) (req *request.Request, output *ReplaceNetworkAclEntryOutput) { - op := &request.Operation{ - Name: opReplaceNetworkAclEntry, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReplaceNetworkAclEntryInput{} - } - - output = &ReplaceNetworkAclEntryOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ReplaceNetworkAclEntry API operation for Amazon Elastic Compute Cloud. -// -// Replaces an entry (rule) in a network ACL. For more information, see Network -// ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in -// the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceNetworkAclEntry for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntry -func (c *EC2) ReplaceNetworkAclEntry(input *ReplaceNetworkAclEntryInput) (*ReplaceNetworkAclEntryOutput, error) { - req, out := c.ReplaceNetworkAclEntryRequest(input) - return out, req.Send() -} - -// ReplaceNetworkAclEntryWithContext is the same as ReplaceNetworkAclEntry with the addition of -// the ability to pass a context and additional request options. -// -// See ReplaceNetworkAclEntry for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReplaceNetworkAclEntryWithContext(ctx aws.Context, input *ReplaceNetworkAclEntryInput, opts ...request.Option) (*ReplaceNetworkAclEntryOutput, error) { - req, out := c.ReplaceNetworkAclEntryRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReplaceRoute = "ReplaceRoute" - -// ReplaceRouteRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReplaceRoute for more information on using the ReplaceRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReplaceRouteRequest method. -// req, resp := client.ReplaceRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRoute -func (c *EC2) ReplaceRouteRequest(input *ReplaceRouteInput) (req *request.Request, output *ReplaceRouteOutput) { - op := &request.Operation{ - Name: opReplaceRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReplaceRouteInput{} - } - - output = &ReplaceRouteOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ReplaceRoute API operation for Amazon Elastic Compute Cloud. -// -// Replaces an existing route within a route table in a VPC. You must provide -// only one of the following: internet gateway or virtual private gateway, NAT -// instance, NAT gateway, VPC peering connection, network interface, or egress-only -// internet gateway. -// -// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRoute -func (c *EC2) ReplaceRoute(input *ReplaceRouteInput) (*ReplaceRouteOutput, error) { - req, out := c.ReplaceRouteRequest(input) - return out, req.Send() -} - -// ReplaceRouteWithContext is the same as ReplaceRoute with the addition of -// the ability to pass a context and additional request options. -// -// See ReplaceRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReplaceRouteWithContext(ctx aws.Context, input *ReplaceRouteInput, opts ...request.Option) (*ReplaceRouteOutput, error) { - req, out := c.ReplaceRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReplaceRouteTableAssociation = "ReplaceRouteTableAssociation" - -// ReplaceRouteTableAssociationRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceRouteTableAssociation operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReplaceRouteTableAssociation for more information on using the ReplaceRouteTableAssociation -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReplaceRouteTableAssociationRequest method. -// req, resp := client.ReplaceRouteTableAssociationRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociation -func (c *EC2) ReplaceRouteTableAssociationRequest(input *ReplaceRouteTableAssociationInput) (req *request.Request, output *ReplaceRouteTableAssociationOutput) { - op := &request.Operation{ - Name: opReplaceRouteTableAssociation, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReplaceRouteTableAssociationInput{} - } - - output = &ReplaceRouteTableAssociationOutput{} - req = c.newRequest(op, input, output) - return -} - -// ReplaceRouteTableAssociation API operation for Amazon Elastic Compute Cloud. -// -// Changes the route table associated with a given subnet in a VPC. After the -// operation completes, the subnet uses the routes in the new route table it's -// associated with. For more information about route tables, see Route Tables -// (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// You can also use ReplaceRouteTableAssociation to change which table is the -// main route table in the VPC. You just specify the main route table's association -// ID and the route table to be the new main route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceRouteTableAssociation for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociation -func (c *EC2) ReplaceRouteTableAssociation(input *ReplaceRouteTableAssociationInput) (*ReplaceRouteTableAssociationOutput, error) { - req, out := c.ReplaceRouteTableAssociationRequest(input) - return out, req.Send() -} - -// ReplaceRouteTableAssociationWithContext is the same as ReplaceRouteTableAssociation with the addition of -// the ability to pass a context and additional request options. -// -// See ReplaceRouteTableAssociation for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReplaceRouteTableAssociationWithContext(ctx aws.Context, input *ReplaceRouteTableAssociationInput, opts ...request.Option) (*ReplaceRouteTableAssociationOutput, error) { - req, out := c.ReplaceRouteTableAssociationRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReplaceTransitGatewayRoute = "ReplaceTransitGatewayRoute" - -// ReplaceTransitGatewayRouteRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceTransitGatewayRoute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReplaceTransitGatewayRoute for more information on using the ReplaceTransitGatewayRoute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReplaceTransitGatewayRouteRequest method. -// req, resp := client.ReplaceTransitGatewayRouteRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceTransitGatewayRoute -func (c *EC2) ReplaceTransitGatewayRouteRequest(input *ReplaceTransitGatewayRouteInput) (req *request.Request, output *ReplaceTransitGatewayRouteOutput) { - op := &request.Operation{ - Name: opReplaceTransitGatewayRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReplaceTransitGatewayRouteInput{} - } - - output = &ReplaceTransitGatewayRouteOutput{} - req = c.newRequest(op, input, output) - return -} - -// ReplaceTransitGatewayRoute API operation for Amazon Elastic Compute Cloud. -// -// Replaces the specified route in the specified transit gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceTransitGatewayRoute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceTransitGatewayRoute -func (c *EC2) ReplaceTransitGatewayRoute(input *ReplaceTransitGatewayRouteInput) (*ReplaceTransitGatewayRouteOutput, error) { - req, out := c.ReplaceTransitGatewayRouteRequest(input) - return out, req.Send() -} - -// ReplaceTransitGatewayRouteWithContext is the same as ReplaceTransitGatewayRoute with the addition of -// the ability to pass a context and additional request options. -// -// See ReplaceTransitGatewayRoute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReplaceTransitGatewayRouteWithContext(ctx aws.Context, input *ReplaceTransitGatewayRouteInput, opts ...request.Option) (*ReplaceTransitGatewayRouteOutput, error) { - req, out := c.ReplaceTransitGatewayRouteRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opReportInstanceStatus = "ReportInstanceStatus" - -// ReportInstanceStatusRequest generates a "aws/request.Request" representing the -// client's request for the ReportInstanceStatus operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ReportInstanceStatus for more information on using the ReportInstanceStatus -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ReportInstanceStatusRequest method. -// req, resp := client.ReportInstanceStatusRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatus -func (c *EC2) ReportInstanceStatusRequest(input *ReportInstanceStatusInput) (req *request.Request, output *ReportInstanceStatusOutput) { - op := &request.Operation{ - Name: opReportInstanceStatus, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ReportInstanceStatusInput{} - } - - output = &ReportInstanceStatusOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ReportInstanceStatus API operation for Amazon Elastic Compute Cloud. -// -// Submits feedback about the status of an instance. The instance must be in -// the running state. If your experience with the instance differs from the -// instance status returned by DescribeInstanceStatus, use ReportInstanceStatus -// to report your experience with the instance. Amazon EC2 collects this information -// to improve the accuracy of status checks. -// -// Use of this action does not change the value returned by DescribeInstanceStatus. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReportInstanceStatus for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatus -func (c *EC2) ReportInstanceStatus(input *ReportInstanceStatusInput) (*ReportInstanceStatusOutput, error) { - req, out := c.ReportInstanceStatusRequest(input) - return out, req.Send() -} - -// ReportInstanceStatusWithContext is the same as ReportInstanceStatus with the addition of -// the ability to pass a context and additional request options. -// -// See ReportInstanceStatus for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ReportInstanceStatusWithContext(ctx aws.Context, input *ReportInstanceStatusInput, opts ...request.Option) (*ReportInstanceStatusOutput, error) { - req, out := c.ReportInstanceStatusRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRequestSpotFleet = "RequestSpotFleet" - -// RequestSpotFleetRequest generates a "aws/request.Request" representing the -// client's request for the RequestSpotFleet operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RequestSpotFleet for more information on using the RequestSpotFleet -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RequestSpotFleetRequest method. -// req, resp := client.RequestSpotFleetRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleet -func (c *EC2) RequestSpotFleetRequest(input *RequestSpotFleetInput) (req *request.Request, output *RequestSpotFleetOutput) { - op := &request.Operation{ - Name: opRequestSpotFleet, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RequestSpotFleetInput{} - } - - output = &RequestSpotFleetOutput{} - req = c.newRequest(op, input, output) - return -} - -// RequestSpotFleet API operation for Amazon Elastic Compute Cloud. -// -// Creates a Spot Fleet request. -// -// The Spot Fleet request specifies the total target capacity and the On-Demand -// target capacity. Amazon EC2 calculates the difference between the total capacity -// and On-Demand capacity, and launches the difference as Spot capacity. -// -// You can submit a single request that includes multiple launch specifications -// that vary by instance type, AMI, Availability Zone, or subnet. -// -// By default, the Spot Fleet requests Spot Instances in the Spot Instance pool -// where the price per unit is the lowest. Each launch specification can include -// its own instance weighting that reflects the value of the instance type to -// your application workload. -// -// Alternatively, you can specify that the Spot Fleet distribute the target -// capacity across the Spot pools included in its launch specifications. By -// ensuring that the Spot Instances in your Spot Fleet are in different Spot -// pools, you can improve the availability of your fleet. -// -// You can specify tags for the Spot Instances. You cannot tag other resource -// types in a Spot Fleet request because only the instance resource type is -// supported. -// -// For more information, see Spot Fleet Requests (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html) -// in the Amazon EC2 User Guide for Linux Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RequestSpotFleet for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleet -func (c *EC2) RequestSpotFleet(input *RequestSpotFleetInput) (*RequestSpotFleetOutput, error) { - req, out := c.RequestSpotFleetRequest(input) - return out, req.Send() -} - -// RequestSpotFleetWithContext is the same as RequestSpotFleet with the addition of -// the ability to pass a context and additional request options. -// -// See RequestSpotFleet for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RequestSpotFleetWithContext(ctx aws.Context, input *RequestSpotFleetInput, opts ...request.Option) (*RequestSpotFleetOutput, error) { - req, out := c.RequestSpotFleetRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRequestSpotInstances = "RequestSpotInstances" - -// RequestSpotInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RequestSpotInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RequestSpotInstances for more information on using the RequestSpotInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RequestSpotInstancesRequest method. -// req, resp := client.RequestSpotInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstances -func (c *EC2) RequestSpotInstancesRequest(input *RequestSpotInstancesInput) (req *request.Request, output *RequestSpotInstancesOutput) { - op := &request.Operation{ - Name: opRequestSpotInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RequestSpotInstancesInput{} - } - - output = &RequestSpotInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// RequestSpotInstances API operation for Amazon Elastic Compute Cloud. -// -// Creates a Spot Instance request. -// -// For more information, see Spot Instance Requests (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) -// in the Amazon EC2 User Guide for Linux Instances. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RequestSpotInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstances -func (c *EC2) RequestSpotInstances(input *RequestSpotInstancesInput) (*RequestSpotInstancesOutput, error) { - req, out := c.RequestSpotInstancesRequest(input) - return out, req.Send() -} - -// RequestSpotInstancesWithContext is the same as RequestSpotInstances with the addition of -// the ability to pass a context and additional request options. -// -// See RequestSpotInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RequestSpotInstancesWithContext(ctx aws.Context, input *RequestSpotInstancesInput, opts ...request.Option) (*RequestSpotInstancesOutput, error) { - req, out := c.RequestSpotInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opResetEbsDefaultKmsKeyId = "ResetEbsDefaultKmsKeyId" - -// ResetEbsDefaultKmsKeyIdRequest generates a "aws/request.Request" representing the -// client's request for the ResetEbsDefaultKmsKeyId operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ResetEbsDefaultKmsKeyId for more information on using the ResetEbsDefaultKmsKeyId -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ResetEbsDefaultKmsKeyIdRequest method. -// req, resp := client.ResetEbsDefaultKmsKeyIdRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetEbsDefaultKmsKeyId -func (c *EC2) ResetEbsDefaultKmsKeyIdRequest(input *ResetEbsDefaultKmsKeyIdInput) (req *request.Request, output *ResetEbsDefaultKmsKeyIdOutput) { - op := &request.Operation{ - Name: opResetEbsDefaultKmsKeyId, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ResetEbsDefaultKmsKeyIdInput{} - } - - output = &ResetEbsDefaultKmsKeyIdOutput{} - req = c.newRequest(op, input, output) - return -} - -// ResetEbsDefaultKmsKeyId API operation for Amazon Elastic Compute Cloud. -// -// Resets the default customer master key (CMK) for EBS encryption for your -// account in this Region to the AWS managed CMK for EBS. -// -// After resetting the default CMK to the AWS managed CMK, you can continue -// to encrypt by a customer managed CMK by specifying it when you create the -// volume. For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetEbsDefaultKmsKeyId for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetEbsDefaultKmsKeyId -func (c *EC2) ResetEbsDefaultKmsKeyId(input *ResetEbsDefaultKmsKeyIdInput) (*ResetEbsDefaultKmsKeyIdOutput, error) { - req, out := c.ResetEbsDefaultKmsKeyIdRequest(input) - return out, req.Send() -} - -// ResetEbsDefaultKmsKeyIdWithContext is the same as ResetEbsDefaultKmsKeyId with the addition of -// the ability to pass a context and additional request options. -// -// See ResetEbsDefaultKmsKeyId for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ResetEbsDefaultKmsKeyIdWithContext(ctx aws.Context, input *ResetEbsDefaultKmsKeyIdInput, opts ...request.Option) (*ResetEbsDefaultKmsKeyIdOutput, error) { - req, out := c.ResetEbsDefaultKmsKeyIdRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opResetFpgaImageAttribute = "ResetFpgaImageAttribute" - -// ResetFpgaImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetFpgaImageAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ResetFpgaImageAttribute for more information on using the ResetFpgaImageAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ResetFpgaImageAttributeRequest method. -// req, resp := client.ResetFpgaImageAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetFpgaImageAttribute -func (c *EC2) ResetFpgaImageAttributeRequest(input *ResetFpgaImageAttributeInput) (req *request.Request, output *ResetFpgaImageAttributeOutput) { - op := &request.Operation{ - Name: opResetFpgaImageAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ResetFpgaImageAttributeInput{} - } - - output = &ResetFpgaImageAttributeOutput{} - req = c.newRequest(op, input, output) - return -} - -// ResetFpgaImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets the specified attribute of the specified Amazon FPGA Image (AFI) to -// its default value. You can only reset the load permission attribute. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetFpgaImageAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetFpgaImageAttribute -func (c *EC2) ResetFpgaImageAttribute(input *ResetFpgaImageAttributeInput) (*ResetFpgaImageAttributeOutput, error) { - req, out := c.ResetFpgaImageAttributeRequest(input) - return out, req.Send() -} - -// ResetFpgaImageAttributeWithContext is the same as ResetFpgaImageAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ResetFpgaImageAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ResetFpgaImageAttributeWithContext(ctx aws.Context, input *ResetFpgaImageAttributeInput, opts ...request.Option) (*ResetFpgaImageAttributeOutput, error) { - req, out := c.ResetFpgaImageAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opResetImageAttribute = "ResetImageAttribute" - -// ResetImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetImageAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ResetImageAttribute for more information on using the ResetImageAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ResetImageAttributeRequest method. -// req, resp := client.ResetImageAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttribute -func (c *EC2) ResetImageAttributeRequest(input *ResetImageAttributeInput) (req *request.Request, output *ResetImageAttributeOutput) { - op := &request.Operation{ - Name: opResetImageAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ResetImageAttributeInput{} - } - - output = &ResetImageAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ResetImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets an attribute of an AMI to its default value. -// -// The productCodes attribute can't be reset. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetImageAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttribute -func (c *EC2) ResetImageAttribute(input *ResetImageAttributeInput) (*ResetImageAttributeOutput, error) { - req, out := c.ResetImageAttributeRequest(input) - return out, req.Send() -} - -// ResetImageAttributeWithContext is the same as ResetImageAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ResetImageAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ResetImageAttributeWithContext(ctx aws.Context, input *ResetImageAttributeInput, opts ...request.Option) (*ResetImageAttributeOutput, error) { - req, out := c.ResetImageAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opResetInstanceAttribute = "ResetInstanceAttribute" - -// ResetInstanceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetInstanceAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ResetInstanceAttribute for more information on using the ResetInstanceAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ResetInstanceAttributeRequest method. -// req, resp := client.ResetInstanceAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttribute -func (c *EC2) ResetInstanceAttributeRequest(input *ResetInstanceAttributeInput) (req *request.Request, output *ResetInstanceAttributeOutput) { - op := &request.Operation{ - Name: opResetInstanceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ResetInstanceAttributeInput{} - } - - output = &ResetInstanceAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ResetInstanceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets an attribute of an instance to its default value. To reset the kernel -// or ramdisk, the instance must be in a stopped state. To reset the sourceDestCheck, -// the instance can be either running or stopped. -// -// The sourceDestCheck attribute controls whether source/destination checking -// is enabled. The default value is true, which means checking is enabled. This -// value must be false for a NAT instance to perform NAT. For more information, -// see NAT Instances (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetInstanceAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttribute -func (c *EC2) ResetInstanceAttribute(input *ResetInstanceAttributeInput) (*ResetInstanceAttributeOutput, error) { - req, out := c.ResetInstanceAttributeRequest(input) - return out, req.Send() -} - -// ResetInstanceAttributeWithContext is the same as ResetInstanceAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ResetInstanceAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ResetInstanceAttributeWithContext(ctx aws.Context, input *ResetInstanceAttributeInput, opts ...request.Option) (*ResetInstanceAttributeOutput, error) { - req, out := c.ResetInstanceAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opResetNetworkInterfaceAttribute = "ResetNetworkInterfaceAttribute" - -// ResetNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetNetworkInterfaceAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ResetNetworkInterfaceAttribute for more information on using the ResetNetworkInterfaceAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ResetNetworkInterfaceAttributeRequest method. -// req, resp := client.ResetNetworkInterfaceAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttribute -func (c *EC2) ResetNetworkInterfaceAttributeRequest(input *ResetNetworkInterfaceAttributeInput) (req *request.Request, output *ResetNetworkInterfaceAttributeOutput) { - op := &request.Operation{ - Name: opResetNetworkInterfaceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ResetNetworkInterfaceAttributeInput{} - } - - output = &ResetNetworkInterfaceAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ResetNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets a network interface attribute. You can specify only one attribute -// at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetNetworkInterfaceAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttribute -func (c *EC2) ResetNetworkInterfaceAttribute(input *ResetNetworkInterfaceAttributeInput) (*ResetNetworkInterfaceAttributeOutput, error) { - req, out := c.ResetNetworkInterfaceAttributeRequest(input) - return out, req.Send() -} - -// ResetNetworkInterfaceAttributeWithContext is the same as ResetNetworkInterfaceAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ResetNetworkInterfaceAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ResetNetworkInterfaceAttributeWithContext(ctx aws.Context, input *ResetNetworkInterfaceAttributeInput, opts ...request.Option) (*ResetNetworkInterfaceAttributeOutput, error) { - req, out := c.ResetNetworkInterfaceAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opResetSnapshotAttribute = "ResetSnapshotAttribute" - -// ResetSnapshotAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetSnapshotAttribute operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See ResetSnapshotAttribute for more information on using the ResetSnapshotAttribute -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the ResetSnapshotAttributeRequest method. -// req, resp := client.ResetSnapshotAttributeRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttribute -func (c *EC2) ResetSnapshotAttributeRequest(input *ResetSnapshotAttributeInput) (req *request.Request, output *ResetSnapshotAttributeOutput) { - op := &request.Operation{ - Name: opResetSnapshotAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &ResetSnapshotAttributeInput{} - } - - output = &ResetSnapshotAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// ResetSnapshotAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets permission settings for the specified snapshot. -// -// For more information about modifying snapshot permissions, see Sharing Snapshots -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetSnapshotAttribute for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttribute -func (c *EC2) ResetSnapshotAttribute(input *ResetSnapshotAttributeInput) (*ResetSnapshotAttributeOutput, error) { - req, out := c.ResetSnapshotAttributeRequest(input) - return out, req.Send() -} - -// ResetSnapshotAttributeWithContext is the same as ResetSnapshotAttribute with the addition of -// the ability to pass a context and additional request options. -// -// See ResetSnapshotAttribute for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) ResetSnapshotAttributeWithContext(ctx aws.Context, input *ResetSnapshotAttributeInput, opts ...request.Option) (*ResetSnapshotAttributeOutput, error) { - req, out := c.ResetSnapshotAttributeRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRestoreAddressToClassic = "RestoreAddressToClassic" - -// RestoreAddressToClassicRequest generates a "aws/request.Request" representing the -// client's request for the RestoreAddressToClassic operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RestoreAddressToClassic for more information on using the RestoreAddressToClassic -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RestoreAddressToClassicRequest method. -// req, resp := client.RestoreAddressToClassicRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassic -func (c *EC2) RestoreAddressToClassicRequest(input *RestoreAddressToClassicInput) (req *request.Request, output *RestoreAddressToClassicOutput) { - op := &request.Operation{ - Name: opRestoreAddressToClassic, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RestoreAddressToClassicInput{} - } - - output = &RestoreAddressToClassicOutput{} - req = c.newRequest(op, input, output) - return -} - -// RestoreAddressToClassic API operation for Amazon Elastic Compute Cloud. -// -// Restores an Elastic IP address that was previously moved to the EC2-VPC platform -// back to the EC2-Classic platform. You cannot move an Elastic IP address that -// was originally allocated for use in EC2-VPC. The Elastic IP address must -// not be associated with an instance or network interface. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RestoreAddressToClassic for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassic -func (c *EC2) RestoreAddressToClassic(input *RestoreAddressToClassicInput) (*RestoreAddressToClassicOutput, error) { - req, out := c.RestoreAddressToClassicRequest(input) - return out, req.Send() -} - -// RestoreAddressToClassicWithContext is the same as RestoreAddressToClassic with the addition of -// the ability to pass a context and additional request options. -// -// See RestoreAddressToClassic for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RestoreAddressToClassicWithContext(ctx aws.Context, input *RestoreAddressToClassicInput, opts ...request.Option) (*RestoreAddressToClassicOutput, error) { - req, out := c.RestoreAddressToClassicRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRevokeClientVpnIngress = "RevokeClientVpnIngress" - -// RevokeClientVpnIngressRequest generates a "aws/request.Request" representing the -// client's request for the RevokeClientVpnIngress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RevokeClientVpnIngress for more information on using the RevokeClientVpnIngress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RevokeClientVpnIngressRequest method. -// req, resp := client.RevokeClientVpnIngressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeClientVpnIngress -func (c *EC2) RevokeClientVpnIngressRequest(input *RevokeClientVpnIngressInput) (req *request.Request, output *RevokeClientVpnIngressOutput) { - op := &request.Operation{ - Name: opRevokeClientVpnIngress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RevokeClientVpnIngressInput{} - } - - output = &RevokeClientVpnIngressOutput{} - req = c.newRequest(op, input, output) - return -} - -// RevokeClientVpnIngress API operation for Amazon Elastic Compute Cloud. -// -// Removes an ingress authorization rule from a Client VPN endpoint. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RevokeClientVpnIngress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeClientVpnIngress -func (c *EC2) RevokeClientVpnIngress(input *RevokeClientVpnIngressInput) (*RevokeClientVpnIngressOutput, error) { - req, out := c.RevokeClientVpnIngressRequest(input) - return out, req.Send() -} - -// RevokeClientVpnIngressWithContext is the same as RevokeClientVpnIngress with the addition of -// the ability to pass a context and additional request options. -// -// See RevokeClientVpnIngress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RevokeClientVpnIngressWithContext(ctx aws.Context, input *RevokeClientVpnIngressInput, opts ...request.Option) (*RevokeClientVpnIngressOutput, error) { - req, out := c.RevokeClientVpnIngressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRevokeSecurityGroupEgress = "RevokeSecurityGroupEgress" - -// RevokeSecurityGroupEgressRequest generates a "aws/request.Request" representing the -// client's request for the RevokeSecurityGroupEgress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RevokeSecurityGroupEgress for more information on using the RevokeSecurityGroupEgress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RevokeSecurityGroupEgressRequest method. -// req, resp := client.RevokeSecurityGroupEgressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgress -func (c *EC2) RevokeSecurityGroupEgressRequest(input *RevokeSecurityGroupEgressInput) (req *request.Request, output *RevokeSecurityGroupEgressOutput) { - op := &request.Operation{ - Name: opRevokeSecurityGroupEgress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RevokeSecurityGroupEgressInput{} - } - - output = &RevokeSecurityGroupEgressOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// RevokeSecurityGroupEgress API operation for Amazon Elastic Compute Cloud. -// -// [VPC only] Removes the specified egress rules from a security group for EC2-VPC. -// This action doesn't apply to security groups for use in EC2-Classic. To remove -// a rule, the values that you specify (for example, ports) must match the existing -// rule's values exactly. -// -// Each rule consists of the protocol and the IPv4 or IPv6 CIDR range or source -// security group. For the TCP and UDP protocols, you must also specify the -// destination port or range of ports. For the ICMP protocol, you must also -// specify the ICMP type and code. If the security group rule has a description, -// you do not have to specify the description to revoke the rule. -// -// Rule changes are propagated to instances within the security group as quickly -// as possible. However, a small delay might occur. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RevokeSecurityGroupEgress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgress -func (c *EC2) RevokeSecurityGroupEgress(input *RevokeSecurityGroupEgressInput) (*RevokeSecurityGroupEgressOutput, error) { - req, out := c.RevokeSecurityGroupEgressRequest(input) - return out, req.Send() -} - -// RevokeSecurityGroupEgressWithContext is the same as RevokeSecurityGroupEgress with the addition of -// the ability to pass a context and additional request options. -// -// See RevokeSecurityGroupEgress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RevokeSecurityGroupEgressWithContext(ctx aws.Context, input *RevokeSecurityGroupEgressInput, opts ...request.Option) (*RevokeSecurityGroupEgressOutput, error) { - req, out := c.RevokeSecurityGroupEgressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRevokeSecurityGroupIngress = "RevokeSecurityGroupIngress" - -// RevokeSecurityGroupIngressRequest generates a "aws/request.Request" representing the -// client's request for the RevokeSecurityGroupIngress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RevokeSecurityGroupIngress for more information on using the RevokeSecurityGroupIngress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RevokeSecurityGroupIngressRequest method. -// req, resp := client.RevokeSecurityGroupIngressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngress -func (c *EC2) RevokeSecurityGroupIngressRequest(input *RevokeSecurityGroupIngressInput) (req *request.Request, output *RevokeSecurityGroupIngressOutput) { - op := &request.Operation{ - Name: opRevokeSecurityGroupIngress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RevokeSecurityGroupIngressInput{} - } - - output = &RevokeSecurityGroupIngressOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// RevokeSecurityGroupIngress API operation for Amazon Elastic Compute Cloud. -// -// Removes the specified ingress rules from a security group. To remove a rule, -// the values that you specify (for example, ports) must match the existing -// rule's values exactly. -// -// [EC2-Classic only] If the values you specify do not match the existing rule's -// values, no error is returned. Use DescribeSecurityGroups to verify that the -// rule has been removed. -// -// Each rule consists of the protocol and the CIDR range or source security -// group. For the TCP and UDP protocols, you must also specify the destination -// port or range of ports. For the ICMP protocol, you must also specify the -// ICMP type and code. If the security group rule has a description, you do -// not have to specify the description to revoke the rule. -// -// Rule changes are propagated to instances within the security group as quickly -// as possible. However, a small delay might occur. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RevokeSecurityGroupIngress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngress -func (c *EC2) RevokeSecurityGroupIngress(input *RevokeSecurityGroupIngressInput) (*RevokeSecurityGroupIngressOutput, error) { - req, out := c.RevokeSecurityGroupIngressRequest(input) - return out, req.Send() -} - -// RevokeSecurityGroupIngressWithContext is the same as RevokeSecurityGroupIngress with the addition of -// the ability to pass a context and additional request options. -// -// See RevokeSecurityGroupIngress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RevokeSecurityGroupIngressWithContext(ctx aws.Context, input *RevokeSecurityGroupIngressInput, opts ...request.Option) (*RevokeSecurityGroupIngressOutput, error) { - req, out := c.RevokeSecurityGroupIngressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRunInstances = "RunInstances" - -// RunInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RunInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RunInstances for more information on using the RunInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RunInstancesRequest method. -// req, resp := client.RunInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstances -func (c *EC2) RunInstancesRequest(input *RunInstancesInput) (req *request.Request, output *Reservation) { - op := &request.Operation{ - Name: opRunInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RunInstancesInput{} - } - - output = &Reservation{} - req = c.newRequest(op, input, output) - return -} - -// RunInstances API operation for Amazon Elastic Compute Cloud. -// -// Launches the specified number of instances using an AMI for which you have -// permissions. -// -// You can specify a number of options, or leave the default options. The following -// rules apply: -// -// * [EC2-VPC] If you don't specify a subnet ID, we choose a default subnet -// from your default VPC for you. If you don't have a default VPC, you must -// specify a subnet ID in the request. -// -// * [EC2-Classic] If don't specify an Availability Zone, we choose one for -// you. -// -// * Some instance types must be launched into a VPC. If you do not have -// a default VPC, or if you do not specify a subnet ID, the request fails. -// For more information, see Instance Types Available Only in a VPC (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types). -// -// * [EC2-VPC] All instances have a network interface with a primary private -// IPv4 address. If you don't specify this address, we choose one from the -// IPv4 range of your subnet. -// -// * Not all instance types support IPv6 addresses. For more information, -// see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). -// -// * If you don't specify a security group ID, we use the default security -// group. For more information, see Security Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html). -// -// * If any of the AMIs have a product code attached for which the user has -// not subscribed, the request fails. -// -// You can create a launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html), -// which is a resource that contains the parameters to launch an instance. When -// you launch an instance using RunInstances, you can specify the launch template -// instead of specifying the launch parameters. -// -// To ensure faster instance launches, break up large requests into smaller -// batches. For example, create five separate launch requests for 100 instances -// each instead of one launch request for 500 instances. -// -// An instance is ready for you to use when it's in the running state. You can -// check the state of your instance using DescribeInstances. You can tag instances -// and EBS volumes during launch, after launch, or both. For more information, -// see CreateTags and Tagging Your Amazon EC2 Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). -// -// Linux instances have access to the public key of the key pair at boot. You -// can use this key to provide secure access to the instance. Amazon EC2 public -// images use this feature to provide secure access without passwords. For more -// information, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// For troubleshooting, see What To Do If An Instance Immediately Terminates -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html), -// and Troubleshooting Connecting to Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RunInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstances -func (c *EC2) RunInstances(input *RunInstancesInput) (*Reservation, error) { - req, out := c.RunInstancesRequest(input) - return out, req.Send() -} - -// RunInstancesWithContext is the same as RunInstances with the addition of -// the ability to pass a context and additional request options. -// -// See RunInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RunInstancesWithContext(ctx aws.Context, input *RunInstancesInput, opts ...request.Option) (*Reservation, error) { - req, out := c.RunInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opRunScheduledInstances = "RunScheduledInstances" - -// RunScheduledInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RunScheduledInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See RunScheduledInstances for more information on using the RunScheduledInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the RunScheduledInstancesRequest method. -// req, resp := client.RunScheduledInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstances -func (c *EC2) RunScheduledInstancesRequest(input *RunScheduledInstancesInput) (req *request.Request, output *RunScheduledInstancesOutput) { - op := &request.Operation{ - Name: opRunScheduledInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &RunScheduledInstancesInput{} - } - - output = &RunScheduledInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// RunScheduledInstances API operation for Amazon Elastic Compute Cloud. -// -// Launches the specified Scheduled Instances. -// -// Before you can launch a Scheduled Instance, you must purchase it and obtain -// an identifier using PurchaseScheduledInstances. -// -// You must launch a Scheduled Instance during its scheduled time period. You -// can't stop or reboot a Scheduled Instance, but you can terminate it as needed. -// If you terminate a Scheduled Instance before the current scheduled time period -// ends, you can launch it again after a few minutes. For more information, -// see Scheduled Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RunScheduledInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstances -func (c *EC2) RunScheduledInstances(input *RunScheduledInstancesInput) (*RunScheduledInstancesOutput, error) { - req, out := c.RunScheduledInstancesRequest(input) - return out, req.Send() -} - -// RunScheduledInstancesWithContext is the same as RunScheduledInstances with the addition of -// the ability to pass a context and additional request options. -// -// See RunScheduledInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) RunScheduledInstancesWithContext(ctx aws.Context, input *RunScheduledInstancesInput, opts ...request.Option) (*RunScheduledInstancesOutput, error) { - req, out := c.RunScheduledInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opSearchTransitGatewayRoutes = "SearchTransitGatewayRoutes" - -// SearchTransitGatewayRoutesRequest generates a "aws/request.Request" representing the -// client's request for the SearchTransitGatewayRoutes operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See SearchTransitGatewayRoutes for more information on using the SearchTransitGatewayRoutes -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the SearchTransitGatewayRoutesRequest method. -// req, resp := client.SearchTransitGatewayRoutesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayRoutes -func (c *EC2) SearchTransitGatewayRoutesRequest(input *SearchTransitGatewayRoutesInput) (req *request.Request, output *SearchTransitGatewayRoutesOutput) { - op := &request.Operation{ - Name: opSearchTransitGatewayRoutes, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &SearchTransitGatewayRoutesInput{} - } - - output = &SearchTransitGatewayRoutesOutput{} - req = c.newRequest(op, input, output) - return -} - -// SearchTransitGatewayRoutes API operation for Amazon Elastic Compute Cloud. -// -// Searches for routes in the specified transit gateway route table. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation SearchTransitGatewayRoutes for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayRoutes -func (c *EC2) SearchTransitGatewayRoutes(input *SearchTransitGatewayRoutesInput) (*SearchTransitGatewayRoutesOutput, error) { - req, out := c.SearchTransitGatewayRoutesRequest(input) - return out, req.Send() -} - -// SearchTransitGatewayRoutesWithContext is the same as SearchTransitGatewayRoutes with the addition of -// the ability to pass a context and additional request options. -// -// See SearchTransitGatewayRoutes for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) SearchTransitGatewayRoutesWithContext(ctx aws.Context, input *SearchTransitGatewayRoutesInput, opts ...request.Option) (*SearchTransitGatewayRoutesOutput, error) { - req, out := c.SearchTransitGatewayRoutesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opSendDiagnosticInterrupt = "SendDiagnosticInterrupt" - -// SendDiagnosticInterruptRequest generates a "aws/request.Request" representing the -// client's request for the SendDiagnosticInterrupt operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See SendDiagnosticInterrupt for more information on using the SendDiagnosticInterrupt -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the SendDiagnosticInterruptRequest method. -// req, resp := client.SendDiagnosticInterruptRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SendDiagnosticInterrupt -func (c *EC2) SendDiagnosticInterruptRequest(input *SendDiagnosticInterruptInput) (req *request.Request, output *SendDiagnosticInterruptOutput) { - op := &request.Operation{ - Name: opSendDiagnosticInterrupt, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &SendDiagnosticInterruptInput{} - } - - output = &SendDiagnosticInterruptOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// SendDiagnosticInterrupt API operation for Amazon Elastic Compute Cloud. -// -// Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger -// a kernel panic (on Linux instances), or a blue screen/stop error (on Windows -// instances). For instances based on Intel and AMD processors, the interrupt -// is received as a non-maskable interrupt (NMI). -// -// In general, the operating system crashes and reboots when a kernel panic -// or stop error is triggered. The operating system can also be configured to -// perform diagnostic tasks, such as generating a memory dump file, loading -// a secondary kernel, or obtaining a call trace. -// -// Before sending a diagnostic interrupt to your instance, ensure that its operating -// system is configured to perform the required diagnostic tasks. -// -// For more information about configuring your operating system to generate -// a crash dump when a kernel panic or stop error occurs, see Send a Diagnostic -// Interrupt (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html) -// (Linux instances) or Send a Diagnostic Interrupt (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/diagnostic-interrupt.html) -// (Windows instances). -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation SendDiagnosticInterrupt for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SendDiagnosticInterrupt -func (c *EC2) SendDiagnosticInterrupt(input *SendDiagnosticInterruptInput) (*SendDiagnosticInterruptOutput, error) { - req, out := c.SendDiagnosticInterruptRequest(input) - return out, req.Send() -} - -// SendDiagnosticInterruptWithContext is the same as SendDiagnosticInterrupt with the addition of -// the ability to pass a context and additional request options. -// -// See SendDiagnosticInterrupt for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) SendDiagnosticInterruptWithContext(ctx aws.Context, input *SendDiagnosticInterruptInput, opts ...request.Option) (*SendDiagnosticInterruptOutput, error) { - req, out := c.SendDiagnosticInterruptRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opStartInstances = "StartInstances" - -// StartInstancesRequest generates a "aws/request.Request" representing the -// client's request for the StartInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See StartInstances for more information on using the StartInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the StartInstancesRequest method. -// req, resp := client.StartInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstances -func (c *EC2) StartInstancesRequest(input *StartInstancesInput) (req *request.Request, output *StartInstancesOutput) { - op := &request.Operation{ - Name: opStartInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &StartInstancesInput{} - } - - output = &StartInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// StartInstances API operation for Amazon Elastic Compute Cloud. -// -// Starts an Amazon EBS-backed instance that you've previously stopped. -// -// Instances that use Amazon EBS volumes as their root devices can be quickly -// stopped and started. When an instance is stopped, the compute resources are -// released and you are not billed for instance usage. However, your root partition -// Amazon EBS volume remains and continues to persist your data, and you are -// charged for Amazon EBS volume usage. You can restart your instance at any -// time. Every time you start your Windows instance, Amazon EC2 charges you -// for a full instance hour. If you stop and restart your Windows instance, -// a new instance hour begins and Amazon EC2 charges you for another full instance -// hour even if you are still within the same 60-minute period when it was stopped. -// Every time you start your Linux instance, Amazon EC2 charges a one-minute -// minimum for instance usage, and thereafter charges per second for instance -// usage. -// -// Before stopping an instance, make sure it is in a state from which it can -// be restarted. Stopping an instance does not preserve data stored in RAM. -// -// Performing this operation on an instance that uses an instance store as its -// root device returns an error. -// -// For more information, see Stopping Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation StartInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstances -func (c *EC2) StartInstances(input *StartInstancesInput) (*StartInstancesOutput, error) { - req, out := c.StartInstancesRequest(input) - return out, req.Send() -} - -// StartInstancesWithContext is the same as StartInstances with the addition of -// the ability to pass a context and additional request options. -// -// See StartInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) StartInstancesWithContext(ctx aws.Context, input *StartInstancesInput, opts ...request.Option) (*StartInstancesOutput, error) { - req, out := c.StartInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opStopInstances = "StopInstances" - -// StopInstancesRequest generates a "aws/request.Request" representing the -// client's request for the StopInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See StopInstances for more information on using the StopInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the StopInstancesRequest method. -// req, resp := client.StopInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstances -func (c *EC2) StopInstancesRequest(input *StopInstancesInput) (req *request.Request, output *StopInstancesOutput) { - op := &request.Operation{ - Name: opStopInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &StopInstancesInput{} - } - - output = &StopInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// StopInstances API operation for Amazon Elastic Compute Cloud. -// -// Stops an Amazon EBS-backed instance. -// -// You can use the Stop action to hibernate an instance if the instance is enabled -// for hibernation (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#enabling-hibernation) -// and it meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). -// For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// We don't charge usage for a stopped instance, or data transfer fees; however, -// your root partition Amazon EBS volume remains and continues to persist your -// data, and you are charged for Amazon EBS volume usage. Every time you start -// your Windows instance, Amazon EC2 charges you for a full instance hour. If -// you stop and restart your Windows instance, a new instance hour begins and -// Amazon EC2 charges you for another full instance hour even if you are still -// within the same 60-minute period when it was stopped. Every time you start -// your Linux instance, Amazon EC2 charges a one-minute minimum for instance -// usage, and thereafter charges per second for instance usage. -// -// You can't start, stop, or hibernate Spot Instances, and you can't stop or -// hibernate instance store-backed instances. For information about using hibernation -// for Spot Instances, see Hibernating Interrupted Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances) -// in the Amazon Elastic Compute Cloud User Guide. -// -// When you stop or hibernate an instance, we shut it down. You can restart -// your instance at any time. Before stopping or hibernating an instance, make -// sure it is in a state from which it can be restarted. Stopping an instance -// does not preserve data stored in RAM, but hibernating an instance does preserve -// data stored in RAM. If an instance cannot hibernate successfully, a normal -// shutdown occurs. -// -// Stopping and hibernating an instance is different to rebooting or terminating -// it. For example, when you stop or hibernate an instance, the root device -// and any other devices attached to the instance persist. When you terminate -// an instance, the root device and any other devices attached during the instance -// launch are automatically deleted. For more information about the differences -// between rebooting, stopping, hibernating, and terminating instances, see -// Instance Lifecycle (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// When you stop an instance, we attempt to shut it down forcibly after a short -// while. If your instance appears stuck in the stopping state after a period -// of time, there may be an issue with the underlying host computer. For more -// information, see Troubleshooting Stopping Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation StopInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstances -func (c *EC2) StopInstances(input *StopInstancesInput) (*StopInstancesOutput, error) { - req, out := c.StopInstancesRequest(input) - return out, req.Send() -} - -// StopInstancesWithContext is the same as StopInstances with the addition of -// the ability to pass a context and additional request options. -// -// See StopInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) StopInstancesWithContext(ctx aws.Context, input *StopInstancesInput, opts ...request.Option) (*StopInstancesOutput, error) { - req, out := c.StopInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opTerminateClientVpnConnections = "TerminateClientVpnConnections" - -// TerminateClientVpnConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the TerminateClientVpnConnections operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See TerminateClientVpnConnections for more information on using the TerminateClientVpnConnections -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the TerminateClientVpnConnectionsRequest method. -// req, resp := client.TerminateClientVpnConnectionsRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateClientVpnConnections -func (c *EC2) TerminateClientVpnConnectionsRequest(input *TerminateClientVpnConnectionsInput) (req *request.Request, output *TerminateClientVpnConnectionsOutput) { - op := &request.Operation{ - Name: opTerminateClientVpnConnections, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &TerminateClientVpnConnectionsInput{} - } - - output = &TerminateClientVpnConnectionsOutput{} - req = c.newRequest(op, input, output) - return -} - -// TerminateClientVpnConnections API operation for Amazon Elastic Compute Cloud. -// -// Terminates active Client VPN endpoint connections. This action can be used -// to terminate a specific client connection, or up to five connections established -// by a specific user. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation TerminateClientVpnConnections for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateClientVpnConnections -func (c *EC2) TerminateClientVpnConnections(input *TerminateClientVpnConnectionsInput) (*TerminateClientVpnConnectionsOutput, error) { - req, out := c.TerminateClientVpnConnectionsRequest(input) - return out, req.Send() -} - -// TerminateClientVpnConnectionsWithContext is the same as TerminateClientVpnConnections with the addition of -// the ability to pass a context and additional request options. -// -// See TerminateClientVpnConnections for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) TerminateClientVpnConnectionsWithContext(ctx aws.Context, input *TerminateClientVpnConnectionsInput, opts ...request.Option) (*TerminateClientVpnConnectionsOutput, error) { - req, out := c.TerminateClientVpnConnectionsRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opTerminateInstances = "TerminateInstances" - -// TerminateInstancesRequest generates a "aws/request.Request" representing the -// client's request for the TerminateInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See TerminateInstances for more information on using the TerminateInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the TerminateInstancesRequest method. -// req, resp := client.TerminateInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstances -func (c *EC2) TerminateInstancesRequest(input *TerminateInstancesInput) (req *request.Request, output *TerminateInstancesOutput) { - op := &request.Operation{ - Name: opTerminateInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &TerminateInstancesInput{} - } - - output = &TerminateInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// TerminateInstances API operation for Amazon Elastic Compute Cloud. -// -// Shuts down the specified instances. This operation is idempotent; if you -// terminate an instance more than once, each call succeeds. -// -// If you specify multiple instances and the request fails (for example, because -// of a single incorrect instance ID), none of the instances are terminated. -// -// Terminated instances remain visible after termination (for approximately -// one hour). -// -// By default, Amazon EC2 deletes all EBS volumes that were attached when the -// instance launched. Volumes attached after instance launch continue running. -// -// You can stop, start, and terminate EBS-backed instances. You can only terminate -// instance store-backed instances. What happens to an instance differs if you -// stop it or terminate it. For example, when you stop an instance, the root -// device and any other devices attached to the instance persist. When you terminate -// an instance, any attached EBS volumes with the DeleteOnTermination block -// device mapping parameter set to true are automatically deleted. For more -// information about the differences between stopping and terminating instances, -// see Instance Lifecycle (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// For more information about troubleshooting, see Troubleshooting Terminating -// Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation TerminateInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstances -func (c *EC2) TerminateInstances(input *TerminateInstancesInput) (*TerminateInstancesOutput, error) { - req, out := c.TerminateInstancesRequest(input) - return out, req.Send() -} - -// TerminateInstancesWithContext is the same as TerminateInstances with the addition of -// the ability to pass a context and additional request options. -// -// See TerminateInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) TerminateInstancesWithContext(ctx aws.Context, input *TerminateInstancesInput, opts ...request.Option) (*TerminateInstancesOutput, error) { - req, out := c.TerminateInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUnassignIpv6Addresses = "UnassignIpv6Addresses" - -// UnassignIpv6AddressesRequest generates a "aws/request.Request" representing the -// client's request for the UnassignIpv6Addresses operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UnassignIpv6Addresses for more information on using the UnassignIpv6Addresses -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UnassignIpv6AddressesRequest method. -// req, resp := client.UnassignIpv6AddressesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6Addresses -func (c *EC2) UnassignIpv6AddressesRequest(input *UnassignIpv6AddressesInput) (req *request.Request, output *UnassignIpv6AddressesOutput) { - op := &request.Operation{ - Name: opUnassignIpv6Addresses, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UnassignIpv6AddressesInput{} - } - - output = &UnassignIpv6AddressesOutput{} - req = c.newRequest(op, input, output) - return -} - -// UnassignIpv6Addresses API operation for Amazon Elastic Compute Cloud. -// -// Unassigns one or more IPv6 addresses from a network interface. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UnassignIpv6Addresses for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6Addresses -func (c *EC2) UnassignIpv6Addresses(input *UnassignIpv6AddressesInput) (*UnassignIpv6AddressesOutput, error) { - req, out := c.UnassignIpv6AddressesRequest(input) - return out, req.Send() -} - -// UnassignIpv6AddressesWithContext is the same as UnassignIpv6Addresses with the addition of -// the ability to pass a context and additional request options. -// -// See UnassignIpv6Addresses for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) UnassignIpv6AddressesWithContext(ctx aws.Context, input *UnassignIpv6AddressesInput, opts ...request.Option) (*UnassignIpv6AddressesOutput, error) { - req, out := c.UnassignIpv6AddressesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUnassignPrivateIpAddresses = "UnassignPrivateIpAddresses" - -// UnassignPrivateIpAddressesRequest generates a "aws/request.Request" representing the -// client's request for the UnassignPrivateIpAddresses operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UnassignPrivateIpAddresses for more information on using the UnassignPrivateIpAddresses -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UnassignPrivateIpAddressesRequest method. -// req, resp := client.UnassignPrivateIpAddressesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddresses -func (c *EC2) UnassignPrivateIpAddressesRequest(input *UnassignPrivateIpAddressesInput) (req *request.Request, output *UnassignPrivateIpAddressesOutput) { - op := &request.Operation{ - Name: opUnassignPrivateIpAddresses, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UnassignPrivateIpAddressesInput{} - } - - output = &UnassignPrivateIpAddressesOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) - return -} - -// UnassignPrivateIpAddresses API operation for Amazon Elastic Compute Cloud. -// -// Unassigns one or more secondary private IP addresses from a network interface. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UnassignPrivateIpAddresses for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddresses -func (c *EC2) UnassignPrivateIpAddresses(input *UnassignPrivateIpAddressesInput) (*UnassignPrivateIpAddressesOutput, error) { - req, out := c.UnassignPrivateIpAddressesRequest(input) - return out, req.Send() -} - -// UnassignPrivateIpAddressesWithContext is the same as UnassignPrivateIpAddresses with the addition of -// the ability to pass a context and additional request options. -// -// See UnassignPrivateIpAddresses for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) UnassignPrivateIpAddressesWithContext(ctx aws.Context, input *UnassignPrivateIpAddressesInput, opts ...request.Option) (*UnassignPrivateIpAddressesOutput, error) { - req, out := c.UnassignPrivateIpAddressesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUnmonitorInstances = "UnmonitorInstances" - -// UnmonitorInstancesRequest generates a "aws/request.Request" representing the -// client's request for the UnmonitorInstances operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UnmonitorInstances for more information on using the UnmonitorInstances -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UnmonitorInstancesRequest method. -// req, resp := client.UnmonitorInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstances -func (c *EC2) UnmonitorInstancesRequest(input *UnmonitorInstancesInput) (req *request.Request, output *UnmonitorInstancesOutput) { - op := &request.Operation{ - Name: opUnmonitorInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UnmonitorInstancesInput{} - } - - output = &UnmonitorInstancesOutput{} - req = c.newRequest(op, input, output) - return -} - -// UnmonitorInstances API operation for Amazon Elastic Compute Cloud. -// -// Disables detailed monitoring for a running instance. For more information, -// see Monitoring Your Instances and Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UnmonitorInstances for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstances -func (c *EC2) UnmonitorInstances(input *UnmonitorInstancesInput) (*UnmonitorInstancesOutput, error) { - req, out := c.UnmonitorInstancesRequest(input) - return out, req.Send() -} - -// UnmonitorInstancesWithContext is the same as UnmonitorInstances with the addition of -// the ability to pass a context and additional request options. -// -// See UnmonitorInstances for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) UnmonitorInstancesWithContext(ctx aws.Context, input *UnmonitorInstancesInput, opts ...request.Option) (*UnmonitorInstancesOutput, error) { - req, out := c.UnmonitorInstancesRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUpdateSecurityGroupRuleDescriptionsEgress = "UpdateSecurityGroupRuleDescriptionsEgress" - -// UpdateSecurityGroupRuleDescriptionsEgressRequest generates a "aws/request.Request" representing the -// client's request for the UpdateSecurityGroupRuleDescriptionsEgress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UpdateSecurityGroupRuleDescriptionsEgress for more information on using the UpdateSecurityGroupRuleDescriptionsEgress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UpdateSecurityGroupRuleDescriptionsEgressRequest method. -// req, resp := client.UpdateSecurityGroupRuleDescriptionsEgressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsEgress -func (c *EC2) UpdateSecurityGroupRuleDescriptionsEgressRequest(input *UpdateSecurityGroupRuleDescriptionsEgressInput) (req *request.Request, output *UpdateSecurityGroupRuleDescriptionsEgressOutput) { - op := &request.Operation{ - Name: opUpdateSecurityGroupRuleDescriptionsEgress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UpdateSecurityGroupRuleDescriptionsEgressInput{} - } - - output = &UpdateSecurityGroupRuleDescriptionsEgressOutput{} - req = c.newRequest(op, input, output) - return -} - -// UpdateSecurityGroupRuleDescriptionsEgress API operation for Amazon Elastic Compute Cloud. -// -// [VPC only] Updates the description of an egress (outbound) security group -// rule. You can replace an existing description, or add a description to a -// rule that did not have one previously. -// -// You specify the description as part of the IP permissions structure. You -// can remove a description for a security group rule by omitting the description -// parameter in the request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UpdateSecurityGroupRuleDescriptionsEgress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsEgress -func (c *EC2) UpdateSecurityGroupRuleDescriptionsEgress(input *UpdateSecurityGroupRuleDescriptionsEgressInput) (*UpdateSecurityGroupRuleDescriptionsEgressOutput, error) { - req, out := c.UpdateSecurityGroupRuleDescriptionsEgressRequest(input) - return out, req.Send() -} - -// UpdateSecurityGroupRuleDescriptionsEgressWithContext is the same as UpdateSecurityGroupRuleDescriptionsEgress with the addition of -// the ability to pass a context and additional request options. -// -// See UpdateSecurityGroupRuleDescriptionsEgress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) UpdateSecurityGroupRuleDescriptionsEgressWithContext(ctx aws.Context, input *UpdateSecurityGroupRuleDescriptionsEgressInput, opts ...request.Option) (*UpdateSecurityGroupRuleDescriptionsEgressOutput, error) { - req, out := c.UpdateSecurityGroupRuleDescriptionsEgressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opUpdateSecurityGroupRuleDescriptionsIngress = "UpdateSecurityGroupRuleDescriptionsIngress" - -// UpdateSecurityGroupRuleDescriptionsIngressRequest generates a "aws/request.Request" representing the -// client's request for the UpdateSecurityGroupRuleDescriptionsIngress operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See UpdateSecurityGroupRuleDescriptionsIngress for more information on using the UpdateSecurityGroupRuleDescriptionsIngress -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the UpdateSecurityGroupRuleDescriptionsIngressRequest method. -// req, resp := client.UpdateSecurityGroupRuleDescriptionsIngressRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsIngress -func (c *EC2) UpdateSecurityGroupRuleDescriptionsIngressRequest(input *UpdateSecurityGroupRuleDescriptionsIngressInput) (req *request.Request, output *UpdateSecurityGroupRuleDescriptionsIngressOutput) { - op := &request.Operation{ - Name: opUpdateSecurityGroupRuleDescriptionsIngress, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &UpdateSecurityGroupRuleDescriptionsIngressInput{} - } - - output = &UpdateSecurityGroupRuleDescriptionsIngressOutput{} - req = c.newRequest(op, input, output) - return -} - -// UpdateSecurityGroupRuleDescriptionsIngress API operation for Amazon Elastic Compute Cloud. -// -// Updates the description of an ingress (inbound) security group rule. You -// can replace an existing description, or add a description to a rule that -// did not have one previously. -// -// You specify the description as part of the IP permissions structure. You -// can remove a description for a security group rule by omitting the description -// parameter in the request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UpdateSecurityGroupRuleDescriptionsIngress for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsIngress -func (c *EC2) UpdateSecurityGroupRuleDescriptionsIngress(input *UpdateSecurityGroupRuleDescriptionsIngressInput) (*UpdateSecurityGroupRuleDescriptionsIngressOutput, error) { - req, out := c.UpdateSecurityGroupRuleDescriptionsIngressRequest(input) - return out, req.Send() -} - -// UpdateSecurityGroupRuleDescriptionsIngressWithContext is the same as UpdateSecurityGroupRuleDescriptionsIngress with the addition of -// the ability to pass a context and additional request options. -// -// See UpdateSecurityGroupRuleDescriptionsIngress for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) UpdateSecurityGroupRuleDescriptionsIngressWithContext(ctx aws.Context, input *UpdateSecurityGroupRuleDescriptionsIngressInput, opts ...request.Option) (*UpdateSecurityGroupRuleDescriptionsIngressOutput, error) { - req, out := c.UpdateSecurityGroupRuleDescriptionsIngressRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opWithdrawByoipCidr = "WithdrawByoipCidr" - -// WithdrawByoipCidrRequest generates a "aws/request.Request" representing the -// client's request for the WithdrawByoipCidr operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See WithdrawByoipCidr for more information on using the WithdrawByoipCidr -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the WithdrawByoipCidrRequest method. -// req, resp := client.WithdrawByoipCidrRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/WithdrawByoipCidr -func (c *EC2) WithdrawByoipCidrRequest(input *WithdrawByoipCidrInput) (req *request.Request, output *WithdrawByoipCidrOutput) { - op := &request.Operation{ - Name: opWithdrawByoipCidr, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &WithdrawByoipCidrInput{} - } - - output = &WithdrawByoipCidrOutput{} - req = c.newRequest(op, input, output) - return -} - -// WithdrawByoipCidr API operation for Amazon Elastic Compute Cloud. -// -// Stops advertising an IPv4 address range that is provisioned as an address -// pool. -// -// You can perform this operation at most once every 10 seconds, even if you -// specify different address ranges each time. -// -// It can take a few minutes before traffic to the specified addresses stops -// routing to AWS because of BGP propagation delays. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation WithdrawByoipCidr for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/WithdrawByoipCidr -func (c *EC2) WithdrawByoipCidr(input *WithdrawByoipCidrInput) (*WithdrawByoipCidrOutput, error) { - req, out := c.WithdrawByoipCidrRequest(input) - return out, req.Send() -} - -// WithdrawByoipCidrWithContext is the same as WithdrawByoipCidr with the addition of -// the ability to pass a context and additional request options. -// -// See WithdrawByoipCidr for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WithdrawByoipCidrWithContext(ctx aws.Context, input *WithdrawByoipCidrInput, opts ...request.Option) (*WithdrawByoipCidrOutput, error) { - req, out := c.WithdrawByoipCidrRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -// Contains the parameters for accepting the quote. -type AcceptReservedInstancesExchangeQuoteInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the Convertible Reserved Instances to exchange for another Convertible - // Reserved Instance of the same or higher value. - // - // ReservedInstanceIds is a required field - ReservedInstanceIds []*string `locationName:"ReservedInstanceId" locationNameList:"ReservedInstanceId" type:"list" required:"true"` - - // The configuration of the target Convertible Reserved Instance to exchange - // for your current Convertible Reserved Instances. - TargetConfigurations []*TargetConfigurationRequest `locationName:"TargetConfiguration" locationNameList:"TargetConfigurationRequest" type:"list"` -} - -// String returns the string representation -func (s AcceptReservedInstancesExchangeQuoteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptReservedInstancesExchangeQuoteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AcceptReservedInstancesExchangeQuoteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AcceptReservedInstancesExchangeQuoteInput"} - if s.ReservedInstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstanceIds")) - } - if s.TargetConfigurations != nil { - for i, v := range s.TargetConfigurations { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetConfigurations", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AcceptReservedInstancesExchangeQuoteInput) SetDryRun(v bool) *AcceptReservedInstancesExchangeQuoteInput { - s.DryRun = &v - return s -} - -// SetReservedInstanceIds sets the ReservedInstanceIds field's value. -func (s *AcceptReservedInstancesExchangeQuoteInput) SetReservedInstanceIds(v []*string) *AcceptReservedInstancesExchangeQuoteInput { - s.ReservedInstanceIds = v - return s -} - -// SetTargetConfigurations sets the TargetConfigurations field's value. -func (s *AcceptReservedInstancesExchangeQuoteInput) SetTargetConfigurations(v []*TargetConfigurationRequest) *AcceptReservedInstancesExchangeQuoteInput { - s.TargetConfigurations = v - return s -} - -// The result of the exchange and whether it was successful. -type AcceptReservedInstancesExchangeQuoteOutput struct { - _ struct{} `type:"structure"` - - // The ID of the successful exchange. - ExchangeId *string `locationName:"exchangeId" type:"string"` -} - -// String returns the string representation -func (s AcceptReservedInstancesExchangeQuoteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptReservedInstancesExchangeQuoteOutput) GoString() string { - return s.String() -} - -// SetExchangeId sets the ExchangeId field's value. -func (s *AcceptReservedInstancesExchangeQuoteOutput) SetExchangeId(v string) *AcceptReservedInstancesExchangeQuoteOutput { - s.ExchangeId = &v - return s -} - -type AcceptTransitGatewayVpcAttachmentInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AcceptTransitGatewayVpcAttachmentInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptTransitGatewayVpcAttachmentInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AcceptTransitGatewayVpcAttachmentInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AcceptTransitGatewayVpcAttachmentInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AcceptTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *AcceptTransitGatewayVpcAttachmentInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *AcceptTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *AcceptTransitGatewayVpcAttachmentInput { - s.TransitGatewayAttachmentId = &v - return s -} - -type AcceptTransitGatewayVpcAttachmentOutput struct { - _ struct{} `type:"structure"` - - // The VPC attachment. - TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` -} - -// String returns the string representation -func (s AcceptTransitGatewayVpcAttachmentOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptTransitGatewayVpcAttachmentOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. -func (s *AcceptTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *AcceptTransitGatewayVpcAttachmentOutput { - s.TransitGatewayVpcAttachment = v - return s -} - -type AcceptVpcEndpointConnectionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the endpoint service. - // - // ServiceId is a required field - ServiceId *string `type:"string" required:"true"` - - // The IDs of one or more interface VPC endpoints. - // - // VpcEndpointIds is a required field - VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s AcceptVpcEndpointConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptVpcEndpointConnectionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AcceptVpcEndpointConnectionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AcceptVpcEndpointConnectionsInput"} - if s.ServiceId == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceId")) - } - if s.VpcEndpointIds == nil { - invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AcceptVpcEndpointConnectionsInput) SetDryRun(v bool) *AcceptVpcEndpointConnectionsInput { - s.DryRun = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *AcceptVpcEndpointConnectionsInput) SetServiceId(v string) *AcceptVpcEndpointConnectionsInput { - s.ServiceId = &v - return s -} - -// SetVpcEndpointIds sets the VpcEndpointIds field's value. -func (s *AcceptVpcEndpointConnectionsInput) SetVpcEndpointIds(v []*string) *AcceptVpcEndpointConnectionsInput { - s.VpcEndpointIds = v - return s -} - -type AcceptVpcEndpointConnectionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the interface endpoints that were not accepted, if applicable. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s AcceptVpcEndpointConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptVpcEndpointConnectionsOutput) GoString() string { - return s.String() -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *AcceptVpcEndpointConnectionsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *AcceptVpcEndpointConnectionsOutput { - s.Unsuccessful = v - return s -} - -type AcceptVpcPeeringConnectionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC peering connection. You must specify this parameter in - // the request. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s AcceptVpcPeeringConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptVpcPeeringConnectionInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *AcceptVpcPeeringConnectionInput) SetDryRun(v bool) *AcceptVpcPeeringConnectionInput { - s.DryRun = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *AcceptVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *AcceptVpcPeeringConnectionInput { - s.VpcPeeringConnectionId = &v - return s -} - -type AcceptVpcPeeringConnectionOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC peering connection. - VpcPeeringConnection *VpcPeeringConnection `locationName:"vpcPeeringConnection" type:"structure"` -} - -// String returns the string representation -func (s AcceptVpcPeeringConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AcceptVpcPeeringConnectionOutput) GoString() string { - return s.String() -} - -// SetVpcPeeringConnection sets the VpcPeeringConnection field's value. -func (s *AcceptVpcPeeringConnectionOutput) SetVpcPeeringConnection(v *VpcPeeringConnection) *AcceptVpcPeeringConnectionOutput { - s.VpcPeeringConnection = v - return s -} - -// Describes an account attribute. -type AccountAttribute struct { - _ struct{} `type:"structure"` - - // The name of the account attribute. - AttributeName *string `locationName:"attributeName" type:"string"` - - // The values for the account attribute. - AttributeValues []*AccountAttributeValue `locationName:"attributeValueSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s AccountAttribute) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AccountAttribute) GoString() string { - return s.String() -} - -// SetAttributeName sets the AttributeName field's value. -func (s *AccountAttribute) SetAttributeName(v string) *AccountAttribute { - s.AttributeName = &v - return s -} - -// SetAttributeValues sets the AttributeValues field's value. -func (s *AccountAttribute) SetAttributeValues(v []*AccountAttributeValue) *AccountAttribute { - s.AttributeValues = v - return s -} - -// Describes a value of an account attribute. -type AccountAttributeValue struct { - _ struct{} `type:"structure"` - - // The value of the attribute. - AttributeValue *string `locationName:"attributeValue" type:"string"` -} - -// String returns the string representation -func (s AccountAttributeValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AccountAttributeValue) GoString() string { - return s.String() -} - -// SetAttributeValue sets the AttributeValue field's value. -func (s *AccountAttributeValue) SetAttributeValue(v string) *AccountAttributeValue { - s.AttributeValue = &v - return s -} - -// Describes a running instance in a Spot Fleet. -type ActiveInstance struct { - _ struct{} `type:"structure"` - - // The health status of the instance. If the status of either the instance status - // check or the system status check is impaired, the health status of the instance - // is unhealthy. Otherwise, the health status is healthy. - InstanceHealth *string `locationName:"instanceHealth" type:"string" enum:"InstanceHealthStatus"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The ID of the Spot Instance request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` -} - -// String returns the string representation -func (s ActiveInstance) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ActiveInstance) GoString() string { - return s.String() -} - -// SetInstanceHealth sets the InstanceHealth field's value. -func (s *ActiveInstance) SetInstanceHealth(v string) *ActiveInstance { - s.InstanceHealth = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ActiveInstance) SetInstanceId(v string) *ActiveInstance { - s.InstanceId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ActiveInstance) SetInstanceType(v string) *ActiveInstance { - s.InstanceType = &v - return s -} - -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *ActiveInstance) SetSpotInstanceRequestId(v string) *ActiveInstance { - s.SpotInstanceRequestId = &v - return s -} - -// Describes an Elastic IP address. -type Address struct { - _ struct{} `type:"structure"` - - // The ID representing the allocation of the address for use with EC2-VPC. - AllocationId *string `locationName:"allocationId" type:"string"` - - // The ID representing the association of the address with an instance in a - // VPC. - AssociationId *string `locationName:"associationId" type:"string"` - - // Indicates whether this Elastic IP address is for use with instances in EC2-Classic - // (standard) or instances in a VPC (vpc). - Domain *string `locationName:"domain" type:"string" enum:"DomainType"` - - // The ID of the instance that the address is associated with (if any). - InstanceId *string `locationName:"instanceId" type:"string"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The ID of the AWS account that owns the network interface. - NetworkInterfaceOwnerId *string `locationName:"networkInterfaceOwnerId" type:"string"` - - // The private IP address associated with the Elastic IP address. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` - - // The ID of an address pool. - PublicIpv4Pool *string `locationName:"publicIpv4Pool" type:"string"` - - // Any tags assigned to the Elastic IP address. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s Address) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Address) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *Address) SetAllocationId(v string) *Address { - s.AllocationId = &v - return s -} - -// SetAssociationId sets the AssociationId field's value. -func (s *Address) SetAssociationId(v string) *Address { - s.AssociationId = &v - return s -} - -// SetDomain sets the Domain field's value. -func (s *Address) SetDomain(v string) *Address { - s.Domain = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *Address) SetInstanceId(v string) *Address { - s.InstanceId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *Address) SetNetworkInterfaceId(v string) *Address { - s.NetworkInterfaceId = &v - return s -} - -// SetNetworkInterfaceOwnerId sets the NetworkInterfaceOwnerId field's value. -func (s *Address) SetNetworkInterfaceOwnerId(v string) *Address { - s.NetworkInterfaceOwnerId = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *Address) SetPrivateIpAddress(v string) *Address { - s.PrivateIpAddress = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *Address) SetPublicIp(v string) *Address { - s.PublicIp = &v - return s -} - -// SetPublicIpv4Pool sets the PublicIpv4Pool field's value. -func (s *Address) SetPublicIpv4Pool(v string) *Address { - s.PublicIpv4Pool = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Address) SetTags(v []*Tag) *Address { - s.Tags = v - return s -} - -type AdvertiseByoipCidrInput struct { - _ struct{} `type:"structure"` - - // The IPv4 address range, in CIDR notation. This must be the exact range that - // you provisioned. You can't advertise only a portion of the provisioned range. - // - // Cidr is a required field - Cidr *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s AdvertiseByoipCidrInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AdvertiseByoipCidrInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AdvertiseByoipCidrInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AdvertiseByoipCidrInput"} - if s.Cidr == nil { - invalidParams.Add(request.NewErrParamRequired("Cidr")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidr sets the Cidr field's value. -func (s *AdvertiseByoipCidrInput) SetCidr(v string) *AdvertiseByoipCidrInput { - s.Cidr = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AdvertiseByoipCidrInput) SetDryRun(v bool) *AdvertiseByoipCidrInput { - s.DryRun = &v - return s -} - -type AdvertiseByoipCidrOutput struct { - _ struct{} `type:"structure"` - - // Information about the address range. - ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` -} - -// String returns the string representation -func (s AdvertiseByoipCidrOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AdvertiseByoipCidrOutput) GoString() string { - return s.String() -} - -// SetByoipCidr sets the ByoipCidr field's value. -func (s *AdvertiseByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *AdvertiseByoipCidrOutput { - s.ByoipCidr = v - return s -} - -type AllocateAddressInput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] The Elastic IP address to recover or an IPv4 address from an address - // pool. - Address *string `type:"string"` - - // Set to vpc to allocate the address for use with instances in a VPC. - // - // Default: The address is for use with instances in EC2-Classic. - Domain *string `type:"string" enum:"DomainType"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of an address pool that you own. Use this parameter to let Amazon - // EC2 select an address from the address pool. To specify a specific address - // from the address pool, use the Address parameter instead. - PublicIpv4Pool *string `type:"string"` -} - -// String returns the string representation -func (s AllocateAddressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AllocateAddressInput) GoString() string { - return s.String() -} - -// SetAddress sets the Address field's value. -func (s *AllocateAddressInput) SetAddress(v string) *AllocateAddressInput { - s.Address = &v - return s -} - -// SetDomain sets the Domain field's value. -func (s *AllocateAddressInput) SetDomain(v string) *AllocateAddressInput { - s.Domain = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AllocateAddressInput) SetDryRun(v bool) *AllocateAddressInput { - s.DryRun = &v - return s -} - -// SetPublicIpv4Pool sets the PublicIpv4Pool field's value. -func (s *AllocateAddressInput) SetPublicIpv4Pool(v string) *AllocateAddressInput { - s.PublicIpv4Pool = &v - return s -} - -type AllocateAddressOutput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] The ID that AWS assigns to represent the allocation of the Elastic - // IP address for use with instances in a VPC. - AllocationId *string `locationName:"allocationId" type:"string"` - - // Indicates whether this Elastic IP address is for use with instances in EC2-Classic - // (standard) or instances in a VPC (vpc). - Domain *string `locationName:"domain" type:"string" enum:"DomainType"` - - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` - - // The ID of an address pool. - PublicIpv4Pool *string `locationName:"publicIpv4Pool" type:"string"` -} - -// String returns the string representation -func (s AllocateAddressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AllocateAddressOutput) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *AllocateAddressOutput) SetAllocationId(v string) *AllocateAddressOutput { - s.AllocationId = &v - return s -} - -// SetDomain sets the Domain field's value. -func (s *AllocateAddressOutput) SetDomain(v string) *AllocateAddressOutput { - s.Domain = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *AllocateAddressOutput) SetPublicIp(v string) *AllocateAddressOutput { - s.PublicIp = &v - return s -} - -// SetPublicIpv4Pool sets the PublicIpv4Pool field's value. -func (s *AllocateAddressOutput) SetPublicIpv4Pool(v string) *AllocateAddressOutput { - s.PublicIpv4Pool = &v - return s -} - -type AllocateHostsInput struct { - _ struct{} `type:"structure"` - - // Indicates whether the host accepts any untargeted instance launches that - // match its instance type configuration, or if it only accepts Host tenancy - // instance launches that specify its unique host ID. For more information, - // see Understanding Instance Placement and Host Affinity (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding) - // in the Amazon EC2 User Guide for Linux Instances. - // - // Default: on - AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` - - // The Availability Zone in which to allocate the Dedicated Host. - // - // AvailabilityZone is a required field - AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // Indicates whether to enable or disable host recovery for the Dedicated Host. - // Host recovery is disabled by default. For more information, see Host Recovery - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Default: off - HostRecovery *string `type:"string" enum:"HostRecovery"` - - // Specifies the instance family to be supported by the Dedicated Hosts. If - // you specify an instance family, the Dedicated Hosts support multiple instance - // types within that instance family. - // - // If you want the Dedicated Hosts to support a specific instance type only, - // omit this parameter and specify InstanceType instead. You cannot specify - // InstanceFamily and InstanceType in the same request. - InstanceFamily *string `type:"string"` - - // Specifies the instance type to be supported by the Dedicated Hosts. If you - // specify an instance type, the Dedicated Hosts support instances of the specified - // instance type only. - // - // If you want the Dedicated Hosts to support multiple instance types in a specific - // instance family, omit this parameter and specify InstanceFamily instead. - // You cannot specify InstanceType and InstanceFamily in the same request. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The number of Dedicated Hosts to allocate to your account with these parameters. - // - // Quantity is a required field - Quantity *int64 `locationName:"quantity" type:"integer" required:"true"` - - // The tags to apply to the Dedicated Host during creation. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s AllocateHostsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AllocateHostsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AllocateHostsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AllocateHostsInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) - } - if s.Quantity == nil { - invalidParams.Add(request.NewErrParamRequired("Quantity")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAutoPlacement sets the AutoPlacement field's value. -func (s *AllocateHostsInput) SetAutoPlacement(v string) *AllocateHostsInput { - s.AutoPlacement = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *AllocateHostsInput) SetAvailabilityZone(v string) *AllocateHostsInput { - s.AvailabilityZone = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *AllocateHostsInput) SetClientToken(v string) *AllocateHostsInput { - s.ClientToken = &v - return s -} - -// SetHostRecovery sets the HostRecovery field's value. -func (s *AllocateHostsInput) SetHostRecovery(v string) *AllocateHostsInput { - s.HostRecovery = &v - return s -} - -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *AllocateHostsInput) SetInstanceFamily(v string) *AllocateHostsInput { - s.InstanceFamily = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *AllocateHostsInput) SetInstanceType(v string) *AllocateHostsInput { - s.InstanceType = &v - return s -} - -// SetQuantity sets the Quantity field's value. -func (s *AllocateHostsInput) SetQuantity(v int64) *AllocateHostsInput { - s.Quantity = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *AllocateHostsInput) SetTagSpecifications(v []*TagSpecification) *AllocateHostsInput { - s.TagSpecifications = v - return s -} - -// Contains the output of AllocateHosts. -type AllocateHostsOutput struct { - _ struct{} `type:"structure"` - - // The ID of the allocated Dedicated Host. This is used to launch an instance - // onto a specific host. - HostIds []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s AllocateHostsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AllocateHostsOutput) GoString() string { - return s.String() -} - -// SetHostIds sets the HostIds field's value. -func (s *AllocateHostsOutput) SetHostIds(v []*string) *AllocateHostsOutput { - s.HostIds = v - return s -} - -// Describes a principal. -type AllowedPrincipal struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the principal. - Principal *string `locationName:"principal" type:"string"` - - // The type of principal. - PrincipalType *string `locationName:"principalType" type:"string" enum:"PrincipalType"` -} - -// String returns the string representation -func (s AllowedPrincipal) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AllowedPrincipal) GoString() string { - return s.String() -} - -// SetPrincipal sets the Principal field's value. -func (s *AllowedPrincipal) SetPrincipal(v string) *AllowedPrincipal { - s.Principal = &v - return s -} - -// SetPrincipalType sets the PrincipalType field's value. -func (s *AllowedPrincipal) SetPrincipalType(v string) *AllowedPrincipal { - s.PrincipalType = &v - return s -} - -type ApplySecurityGroupsToClientVpnTargetNetworkInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the security groups to apply to the associated target network. - // Up to 5 security groups can be applied to an associated target network. - // - // SecurityGroupIds is a required field - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list" required:"true"` - - // The ID of the VPC in which the associated target network is located. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ApplySecurityGroupsToClientVpnTargetNetworkInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ApplySecurityGroupsToClientVpnTargetNetworkInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ApplySecurityGroupsToClientVpnTargetNetworkInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.SecurityGroupIds == nil { - invalidParams.Add(request.NewErrParamRequired("SecurityGroupIds")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetClientVpnEndpointId(v string) *ApplySecurityGroupsToClientVpnTargetNetworkInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetDryRun(v bool) *ApplySecurityGroupsToClientVpnTargetNetworkInput { - s.DryRun = &v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetSecurityGroupIds(v []*string) *ApplySecurityGroupsToClientVpnTargetNetworkInput { - s.SecurityGroupIds = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetVpcId(v string) *ApplySecurityGroupsToClientVpnTargetNetworkInput { - s.VpcId = &v - return s -} - -type ApplySecurityGroupsToClientVpnTargetNetworkOutput struct { - _ struct{} `type:"structure"` - - // The IDs of the applied security groups. - SecurityGroupIds []*string `locationName:"securityGroupIds" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ApplySecurityGroupsToClientVpnTargetNetworkOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ApplySecurityGroupsToClientVpnTargetNetworkOutput) GoString() string { - return s.String() -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *ApplySecurityGroupsToClientVpnTargetNetworkOutput) SetSecurityGroupIds(v []*string) *ApplySecurityGroupsToClientVpnTargetNetworkOutput { - s.SecurityGroupIds = v - return s -} - -type AssignIpv6AddressesInput struct { - _ struct{} `type:"structure"` - - // The number of IPv6 addresses to assign to the network interface. Amazon EC2 - // automatically selects the IPv6 addresses from the subnet range. You can't - // use this option if specifying specific IPv6 addresses. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` - - // One or more specific IPv6 addresses to be assigned to the network interface. - // You can't use this option if you're specifying a number of IPv6 addresses. - Ipv6Addresses []*string `locationName:"ipv6Addresses" locationNameList:"item" type:"list"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssignIpv6AddressesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssignIpv6AddressesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssignIpv6AddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssignIpv6AddressesInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *AssignIpv6AddressesInput) SetIpv6AddressCount(v int64) *AssignIpv6AddressesInput { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *AssignIpv6AddressesInput) SetIpv6Addresses(v []*string) *AssignIpv6AddressesInput { - s.Ipv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignIpv6AddressesInput) SetNetworkInterfaceId(v string) *AssignIpv6AddressesInput { - s.NetworkInterfaceId = &v - return s -} - -type AssignIpv6AddressesOutput struct { - _ struct{} `type:"structure"` - - // The IPv6 addresses assigned to the network interface. - AssignedIpv6Addresses []*string `locationName:"assignedIpv6Addresses" locationNameList:"item" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` -} - -// String returns the string representation -func (s AssignIpv6AddressesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssignIpv6AddressesOutput) GoString() string { - return s.String() -} - -// SetAssignedIpv6Addresses sets the AssignedIpv6Addresses field's value. -func (s *AssignIpv6AddressesOutput) SetAssignedIpv6Addresses(v []*string) *AssignIpv6AddressesOutput { - s.AssignedIpv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignIpv6AddressesOutput) SetNetworkInterfaceId(v string) *AssignIpv6AddressesOutput { - s.NetworkInterfaceId = &v - return s -} - -// Contains the parameters for AssignPrivateIpAddresses. -type AssignPrivateIpAddressesInput struct { - _ struct{} `type:"structure"` - - // Indicates whether to allow an IP address that is already assigned to another - // network interface or instance to be reassigned to the specified network interface. - AllowReassignment *bool `locationName:"allowReassignment" type:"boolean"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` - - // One or more IP addresses to be assigned as a secondary private IP address - // to the network interface. You can't specify this parameter when also specifying - // a number of secondary IP addresses. - // - // If you don't specify an IP address, Amazon EC2 automatically selects an IP - // address within the subnet range. - PrivateIpAddresses []*string `locationName:"privateIpAddress" locationNameList:"PrivateIpAddress" type:"list"` - - // The number of secondary IP addresses to assign to the network interface. - // You can't specify this parameter when also specifying private IP addresses. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` -} - -// String returns the string representation -func (s AssignPrivateIpAddressesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssignPrivateIpAddressesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssignPrivateIpAddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssignPrivateIpAddressesInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAllowReassignment sets the AllowReassignment field's value. -func (s *AssignPrivateIpAddressesInput) SetAllowReassignment(v bool) *AssignPrivateIpAddressesInput { - s.AllowReassignment = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignPrivateIpAddressesInput) SetNetworkInterfaceId(v string) *AssignPrivateIpAddressesInput { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *AssignPrivateIpAddressesInput) SetPrivateIpAddresses(v []*string) *AssignPrivateIpAddressesInput { - s.PrivateIpAddresses = v - return s -} - -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *AssignPrivateIpAddressesInput) SetSecondaryPrivateIpAddressCount(v int64) *AssignPrivateIpAddressesInput { - s.SecondaryPrivateIpAddressCount = &v - return s -} - -type AssignPrivateIpAddressesOutput struct { - _ struct{} `type:"structure"` - - // The private IP addresses assigned to the network interface. - AssignedPrivateIpAddresses []*AssignedPrivateIpAddress `locationName:"assignedPrivateIpAddressesSet" locationNameList:"item" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` -} - -// String returns the string representation -func (s AssignPrivateIpAddressesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssignPrivateIpAddressesOutput) GoString() string { - return s.String() -} - -// SetAssignedPrivateIpAddresses sets the AssignedPrivateIpAddresses field's value. -func (s *AssignPrivateIpAddressesOutput) SetAssignedPrivateIpAddresses(v []*AssignedPrivateIpAddress) *AssignPrivateIpAddressesOutput { - s.AssignedPrivateIpAddresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignPrivateIpAddressesOutput) SetNetworkInterfaceId(v string) *AssignPrivateIpAddressesOutput { - s.NetworkInterfaceId = &v - return s -} - -// Describes the private IP addresses assigned to a network interface. -type AssignedPrivateIpAddress struct { - _ struct{} `type:"structure"` - - // The private IP address assigned to the network interface. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` -} - -// String returns the string representation -func (s AssignedPrivateIpAddress) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssignedPrivateIpAddress) GoString() string { - return s.String() -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *AssignedPrivateIpAddress) SetPrivateIpAddress(v string) *AssignedPrivateIpAddress { - s.PrivateIpAddress = &v - return s -} - -type AssociateAddressInput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] The allocation ID. This is required for EC2-VPC. - AllocationId *string `type:"string"` - - // [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic - // IP address that is already associated with an instance or network interface - // to be reassociated with the specified instance or network interface. Otherwise, - // the operation fails. In a VPC in an EC2-VPC-only account, reassociation is - // automatic, therefore you can specify false to ensure the operation fails - // if the Elastic IP address is already associated with another resource. - AllowReassociation *bool `locationName:"allowReassociation" type:"boolean"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. This is required for EC2-Classic. For EC2-VPC, you - // can specify either the instance ID or the network interface ID, but not both. - // The operation fails if you specify an instance ID unless exactly one network - // interface is attached. - InstanceId *string `type:"string"` - - // [EC2-VPC] The ID of the network interface. If the instance has more than - // one network interface, you must specify a network interface ID. - // - // For EC2-VPC, you can specify either the instance ID or the network interface - // ID, but not both. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // [EC2-VPC] The primary or secondary private IP address to associate with the - // Elastic IP address. If no private IP address is specified, the Elastic IP - // address is associated with the primary private IP address. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // The Elastic IP address to associate with the instance. This is required for - // EC2-Classic. - PublicIp *string `type:"string"` -} - -// String returns the string representation -func (s AssociateAddressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateAddressInput) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *AssociateAddressInput) SetAllocationId(v string) *AssociateAddressInput { - s.AllocationId = &v - return s -} - -// SetAllowReassociation sets the AllowReassociation field's value. -func (s *AssociateAddressInput) SetAllowReassociation(v bool) *AssociateAddressInput { - s.AllowReassociation = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AssociateAddressInput) SetDryRun(v bool) *AssociateAddressInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *AssociateAddressInput) SetInstanceId(v string) *AssociateAddressInput { - s.InstanceId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssociateAddressInput) SetNetworkInterfaceId(v string) *AssociateAddressInput { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *AssociateAddressInput) SetPrivateIpAddress(v string) *AssociateAddressInput { - s.PrivateIpAddress = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *AssociateAddressInput) SetPublicIp(v string) *AssociateAddressInput { - s.PublicIp = &v - return s -} - -type AssociateAddressOutput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] The ID that represents the association of the Elastic IP address - // with an instance. - AssociationId *string `locationName:"associationId" type:"string"` -} - -// String returns the string representation -func (s AssociateAddressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateAddressOutput) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *AssociateAddressOutput) SetAssociationId(v string) *AssociateAddressOutput { - s.AssociationId = &v - return s -} - -type AssociateClientVpnTargetNetworkInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the subnet to associate with the Client VPN endpoint. - // - // SubnetId is a required field - SubnetId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateClientVpnTargetNetworkInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateClientVpnTargetNetworkInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateClientVpnTargetNetworkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateClientVpnTargetNetworkInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *AssociateClientVpnTargetNetworkInput) SetClientToken(v string) *AssociateClientVpnTargetNetworkInput { - s.ClientToken = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *AssociateClientVpnTargetNetworkInput) SetClientVpnEndpointId(v string) *AssociateClientVpnTargetNetworkInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AssociateClientVpnTargetNetworkInput) SetDryRun(v bool) *AssociateClientVpnTargetNetworkInput { - s.DryRun = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateClientVpnTargetNetworkInput) SetSubnetId(v string) *AssociateClientVpnTargetNetworkInput { - s.SubnetId = &v - return s -} - -type AssociateClientVpnTargetNetworkOutput struct { - _ struct{} `type:"structure"` - - // The unique ID of the target network association. - AssociationId *string `locationName:"associationId" type:"string"` - - // The current state of the target network association. - Status *AssociationStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s AssociateClientVpnTargetNetworkOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateClientVpnTargetNetworkOutput) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *AssociateClientVpnTargetNetworkOutput) SetAssociationId(v string) *AssociateClientVpnTargetNetworkOutput { - s.AssociationId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *AssociateClientVpnTargetNetworkOutput) SetStatus(v *AssociationStatus) *AssociateClientVpnTargetNetworkOutput { - s.Status = v - return s -} - -type AssociateDhcpOptionsInput struct { - _ struct{} `type:"structure"` - - // The ID of the DHCP options set, or default to associate no DHCP options with - // the VPC. - // - // DhcpOptionsId is a required field - DhcpOptionsId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateDhcpOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateDhcpOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateDhcpOptionsInput"} - if s.DhcpOptionsId == nil { - invalidParams.Add(request.NewErrParamRequired("DhcpOptionsId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *AssociateDhcpOptionsInput) SetDhcpOptionsId(v string) *AssociateDhcpOptionsInput { - s.DhcpOptionsId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AssociateDhcpOptionsInput) SetDryRun(v bool) *AssociateDhcpOptionsInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *AssociateDhcpOptionsInput) SetVpcId(v string) *AssociateDhcpOptionsInput { - s.VpcId = &v - return s -} - -type AssociateDhcpOptionsOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s AssociateDhcpOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateDhcpOptionsOutput) GoString() string { - return s.String() -} - -type AssociateIamInstanceProfileInput struct { - _ struct{} `type:"structure"` - - // The IAM instance profile. - // - // IamInstanceProfile is a required field - IamInstanceProfile *IamInstanceProfileSpecification `type:"structure" required:"true"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateIamInstanceProfileInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateIamInstanceProfileInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateIamInstanceProfileInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateIamInstanceProfileInput"} - if s.IamInstanceProfile == nil { - invalidParams.Add(request.NewErrParamRequired("IamInstanceProfile")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *AssociateIamInstanceProfileInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *AssociateIamInstanceProfileInput { - s.IamInstanceProfile = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *AssociateIamInstanceProfileInput) SetInstanceId(v string) *AssociateIamInstanceProfileInput { - s.InstanceId = &v - return s -} - -type AssociateIamInstanceProfileOutput struct { - _ struct{} `type:"structure"` - - // Information about the IAM instance profile association. - IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` -} - -// String returns the string representation -func (s AssociateIamInstanceProfileOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateIamInstanceProfileOutput) GoString() string { - return s.String() -} - -// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. -func (s *AssociateIamInstanceProfileOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *AssociateIamInstanceProfileOutput { - s.IamInstanceProfileAssociation = v - return s -} - -type AssociateRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` - - // The ID of the subnet. - // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateRouteTableInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AssociateRouteTableInput) SetDryRun(v bool) *AssociateRouteTableInput { - s.DryRun = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *AssociateRouteTableInput) SetRouteTableId(v string) *AssociateRouteTableInput { - s.RouteTableId = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateRouteTableInput) SetSubnetId(v string) *AssociateRouteTableInput { - s.SubnetId = &v - return s -} - -type AssociateRouteTableOutput struct { - _ struct{} `type:"structure"` - - // The route table association ID. This ID is required for disassociating the - // route table. - AssociationId *string `locationName:"associationId" type:"string"` -} - -// String returns the string representation -func (s AssociateRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateRouteTableOutput) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *AssociateRouteTableOutput) SetAssociationId(v string) *AssociateRouteTableOutput { - s.AssociationId = &v - return s -} - -type AssociateSubnetCidrBlockInput struct { - _ struct{} `type:"structure"` - - // The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length. - // - // Ipv6CidrBlock is a required field - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string" required:"true"` - - // The ID of your subnet. - // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateSubnetCidrBlockInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateSubnetCidrBlockInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateSubnetCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateSubnetCidrBlockInput"} - if s.Ipv6CidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("Ipv6CidrBlock")) - } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *AssociateSubnetCidrBlockInput) SetIpv6CidrBlock(v string) *AssociateSubnetCidrBlockInput { - s.Ipv6CidrBlock = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateSubnetCidrBlockInput) SetSubnetId(v string) *AssociateSubnetCidrBlockInput { - s.SubnetId = &v - return s -} - -type AssociateSubnetCidrBlockOutput struct { - _ struct{} `type:"structure"` - - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` -} - -// String returns the string representation -func (s AssociateSubnetCidrBlockOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateSubnetCidrBlockOutput) GoString() string { - return s.String() -} - -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *AssociateSubnetCidrBlockOutput) SetIpv6CidrBlockAssociation(v *SubnetIpv6CidrBlockAssociation) *AssociateSubnetCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateSubnetCidrBlockOutput) SetSubnetId(v string) *AssociateSubnetCidrBlockOutput { - s.SubnetId = &v - return s -} - -type AssociateTransitGatewayRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateTransitGatewayRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateTransitGatewayRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateTransitGatewayRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateTransitGatewayRouteTableInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AssociateTransitGatewayRouteTableInput) SetDryRun(v bool) *AssociateTransitGatewayRouteTableInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *AssociateTransitGatewayRouteTableInput) SetTransitGatewayAttachmentId(v string) *AssociateTransitGatewayRouteTableInput { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *AssociateTransitGatewayRouteTableInput) SetTransitGatewayRouteTableId(v string) *AssociateTransitGatewayRouteTableInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type AssociateTransitGatewayRouteTableOutput struct { - _ struct{} `type:"structure"` - - // The ID of the association. - Association *TransitGatewayAssociation `locationName:"association" type:"structure"` -} - -// String returns the string representation -func (s AssociateTransitGatewayRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateTransitGatewayRouteTableOutput) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *AssociateTransitGatewayRouteTableOutput) SetAssociation(v *TransitGatewayAssociation) *AssociateTransitGatewayRouteTableOutput { - s.Association = v - return s -} - -type AssociateVpcCidrBlockInput struct { - _ struct{} `type:"structure"` - - // Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for - // the VPC. You cannot specify the range of IPv6 addresses, or the size of the - // CIDR block. - AmazonProvidedIpv6CidrBlock *bool `locationName:"amazonProvidedIpv6CidrBlock" type:"boolean"` - - // An IPv4 CIDR block to associate with the VPC. - CidrBlock *string `type:"string"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssociateVpcCidrBlockInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateVpcCidrBlockInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateVpcCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateVpcCidrBlockInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAmazonProvidedIpv6CidrBlock sets the AmazonProvidedIpv6CidrBlock field's value. -func (s *AssociateVpcCidrBlockInput) SetAmazonProvidedIpv6CidrBlock(v bool) *AssociateVpcCidrBlockInput { - s.AmazonProvidedIpv6CidrBlock = &v - return s -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *AssociateVpcCidrBlockInput) SetCidrBlock(v string) *AssociateVpcCidrBlockInput { - s.CidrBlock = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *AssociateVpcCidrBlockInput) SetVpcId(v string) *AssociateVpcCidrBlockInput { - s.VpcId = &v - return s -} - -type AssociateVpcCidrBlockOutput struct { - _ struct{} `type:"structure"` - - // Information about the IPv4 CIDR block association. - CidrBlockAssociation *VpcCidrBlockAssociation `locationName:"cidrBlockAssociation" type:"structure"` - - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s AssociateVpcCidrBlockOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociateVpcCidrBlockOutput) GoString() string { - return s.String() -} - -// SetCidrBlockAssociation sets the CidrBlockAssociation field's value. -func (s *AssociateVpcCidrBlockOutput) SetCidrBlockAssociation(v *VpcCidrBlockAssociation) *AssociateVpcCidrBlockOutput { - s.CidrBlockAssociation = v - return s -} - -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *AssociateVpcCidrBlockOutput) SetIpv6CidrBlockAssociation(v *VpcIpv6CidrBlockAssociation) *AssociateVpcCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *AssociateVpcCidrBlockOutput) SetVpcId(v string) *AssociateVpcCidrBlockOutput { - s.VpcId = &v - return s -} - -// Describes a target network that is associated with a Client VPN endpoint. -// A target network is a subnet in a VPC. -type AssociatedTargetNetwork struct { - _ struct{} `type:"structure"` - - // The ID of the subnet. - NetworkId *string `locationName:"networkId" type:"string"` - - // The target network type. - NetworkType *string `locationName:"networkType" type:"string" enum:"AssociatedNetworkType"` -} - -// String returns the string representation -func (s AssociatedTargetNetwork) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociatedTargetNetwork) GoString() string { - return s.String() -} - -// SetNetworkId sets the NetworkId field's value. -func (s *AssociatedTargetNetwork) SetNetworkId(v string) *AssociatedTargetNetwork { - s.NetworkId = &v - return s -} - -// SetNetworkType sets the NetworkType field's value. -func (s *AssociatedTargetNetwork) SetNetworkType(v string) *AssociatedTargetNetwork { - s.NetworkType = &v - return s -} - -// Describes the state of a target network association. -type AssociationStatus struct { - _ struct{} `type:"structure"` - - // The state of the target network association. - Code *string `locationName:"code" type:"string" enum:"AssociationStatusCode"` - - // A message about the status of the target network association, if applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s AssociationStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssociationStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *AssociationStatus) SetCode(v string) *AssociationStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *AssociationStatus) SetMessage(v string) *AssociationStatus { - s.Message = &v - return s -} - -type AttachClassicLinkVpcInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of one or more of the VPC's security groups. You cannot specify security - // groups from a different VPC. - // - // Groups is a required field - Groups []*string `locationName:"SecurityGroupId" locationNameList:"groupId" type:"list" required:"true"` - - // The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // The ID of a ClassicLink-enabled VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AttachClassicLinkVpcInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachClassicLinkVpcInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachClassicLinkVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachClassicLinkVpcInput"} - if s.Groups == nil { - invalidParams.Add(request.NewErrParamRequired("Groups")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AttachClassicLinkVpcInput) SetDryRun(v bool) *AttachClassicLinkVpcInput { - s.DryRun = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *AttachClassicLinkVpcInput) SetGroups(v []*string) *AttachClassicLinkVpcInput { - s.Groups = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *AttachClassicLinkVpcInput) SetInstanceId(v string) *AttachClassicLinkVpcInput { - s.InstanceId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *AttachClassicLinkVpcInput) SetVpcId(v string) *AttachClassicLinkVpcInput { - s.VpcId = &v - return s -} - -type AttachClassicLinkVpcOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s AttachClassicLinkVpcOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachClassicLinkVpcOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *AttachClassicLinkVpcOutput) SetReturn(v bool) *AttachClassicLinkVpcOutput { - s.Return = &v - return s -} - -type AttachInternetGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the internet gateway. - // - // InternetGatewayId is a required field - InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AttachInternetGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachInternetGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachInternetGatewayInput"} - if s.InternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AttachInternetGatewayInput) SetDryRun(v bool) *AttachInternetGatewayInput { - s.DryRun = &v - return s -} - -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *AttachInternetGatewayInput) SetInternetGatewayId(v string) *AttachInternetGatewayInput { - s.InternetGatewayId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *AttachInternetGatewayInput) SetVpcId(v string) *AttachInternetGatewayInput { - s.VpcId = &v - return s -} - -type AttachInternetGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s AttachInternetGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachInternetGatewayOutput) GoString() string { - return s.String() -} - -// Contains the parameters for AttachNetworkInterface. -type AttachNetworkInterfaceInput struct { - _ struct{} `type:"structure"` - - // The index of the device for the network interface attachment. - // - // DeviceIndex is a required field - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s AttachNetworkInterfaceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachNetworkInterfaceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachNetworkInterfaceInput"} - if s.DeviceIndex == nil { - invalidParams.Add(request.NewErrParamRequired("DeviceIndex")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *AttachNetworkInterfaceInput) SetDeviceIndex(v int64) *AttachNetworkInterfaceInput { - s.DeviceIndex = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AttachNetworkInterfaceInput) SetDryRun(v bool) *AttachNetworkInterfaceInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *AttachNetworkInterfaceInput) SetInstanceId(v string) *AttachNetworkInterfaceInput { - s.InstanceId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AttachNetworkInterfaceInput) SetNetworkInterfaceId(v string) *AttachNetworkInterfaceInput { - s.NetworkInterfaceId = &v - return s -} - -// Contains the output of AttachNetworkInterface. -type AttachNetworkInterfaceOutput struct { - _ struct{} `type:"structure"` - - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` -} - -// String returns the string representation -func (s AttachNetworkInterfaceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachNetworkInterfaceOutput) GoString() string { - return s.String() -} - -// SetAttachmentId sets the AttachmentId field's value. -func (s *AttachNetworkInterfaceOutput) SetAttachmentId(v string) *AttachNetworkInterfaceOutput { - s.AttachmentId = &v - return s -} - -type AttachVolumeInput struct { - _ struct{} `type:"structure"` - - // The device name (for example, /dev/sdh or xvdh). - // - // Device is a required field - Device *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // The ID of the EBS volume. The volume and instance must be within the same - // Availability Zone. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AttachVolumeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachVolumeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachVolumeInput"} - if s.Device == nil { - invalidParams.Add(request.NewErrParamRequired("Device")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDevice sets the Device field's value. -func (s *AttachVolumeInput) SetDevice(v string) *AttachVolumeInput { - s.Device = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AttachVolumeInput) SetDryRun(v bool) *AttachVolumeInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *AttachVolumeInput) SetInstanceId(v string) *AttachVolumeInput { - s.InstanceId = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *AttachVolumeInput) SetVolumeId(v string) *AttachVolumeInput { - s.VolumeId = &v - return s -} - -// Contains the parameters for AttachVpnGateway. -type AttachVpnGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` - - // The ID of the virtual private gateway. - // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AttachVpnGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachVpnGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachVpnGatewayInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *AttachVpnGatewayInput) SetDryRun(v bool) *AttachVpnGatewayInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *AttachVpnGatewayInput) SetVpcId(v string) *AttachVpnGatewayInput { - s.VpcId = &v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *AttachVpnGatewayInput) SetVpnGatewayId(v string) *AttachVpnGatewayInput { - s.VpnGatewayId = &v - return s -} - -// Contains the output of AttachVpnGateway. -type AttachVpnGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the attachment. - VpcAttachment *VpcAttachment `locationName:"attachment" type:"structure"` -} - -// String returns the string representation -func (s AttachVpnGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachVpnGatewayOutput) GoString() string { - return s.String() -} - -// SetVpcAttachment sets the VpcAttachment field's value. -func (s *AttachVpnGatewayOutput) SetVpcAttachment(v *VpcAttachment) *AttachVpnGatewayOutput { - s.VpcAttachment = v - return s -} - -// Describes a value for a resource attribute that is a Boolean value. -type AttributeBooleanValue struct { - _ struct{} `type:"structure"` - - // The attribute value. The valid values are true or false. - Value *bool `locationName:"value" type:"boolean"` -} - -// String returns the string representation -func (s AttributeBooleanValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttributeBooleanValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *AttributeBooleanValue) SetValue(v bool) *AttributeBooleanValue { - s.Value = &v - return s -} - -// Describes a value for a resource attribute that is a String. -type AttributeValue struct { - _ struct{} `type:"structure"` - - // The attribute value. The value is case-sensitive. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s AttributeValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttributeValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *AttributeValue) SetValue(v string) *AttributeValue { - s.Value = &v - return s -} - -// Information about an authorization rule. -type AuthorizationRule struct { - _ struct{} `type:"structure"` - - // Indicates whether the authorization rule grants access to all clients. - AccessAll *bool `locationName:"accessAll" type:"boolean"` - - // The ID of the Client VPN endpoint with which the authorization rule is associated. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // A brief description of the authorization rule. - Description *string `locationName:"description" type:"string"` - - // The IPv4 address range, in CIDR notation, of the network to which the authorization - // rule applies. - DestinationCidr *string `locationName:"destinationCidr" type:"string"` - - // The ID of the Active Directory group to which the authorization rule grants - // access. - GroupId *string `locationName:"groupId" type:"string"` - - // The current state of the authorization rule. - Status *ClientVpnAuthorizationRuleStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s AuthorizationRule) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizationRule) GoString() string { - return s.String() -} - -// SetAccessAll sets the AccessAll field's value. -func (s *AuthorizationRule) SetAccessAll(v bool) *AuthorizationRule { - s.AccessAll = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *AuthorizationRule) SetClientVpnEndpointId(v string) *AuthorizationRule { - s.ClientVpnEndpointId = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *AuthorizationRule) SetDescription(v string) *AuthorizationRule { - s.Description = &v - return s -} - -// SetDestinationCidr sets the DestinationCidr field's value. -func (s *AuthorizationRule) SetDestinationCidr(v string) *AuthorizationRule { - s.DestinationCidr = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *AuthorizationRule) SetGroupId(v string) *AuthorizationRule { - s.GroupId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *AuthorizationRule) SetStatus(v *ClientVpnAuthorizationRuleStatus) *AuthorizationRule { - s.Status = v - return s -} - -type AuthorizeClientVpnIngressInput struct { - _ struct{} `type:"structure"` - - // The ID of the Active Directory group to grant access. - AccessGroupId *string `type:"string"` - - // Indicates whether to grant access to all clients. Use true to grant all clients - // who successfully establish a VPN connection access to the network. - AuthorizeAllGroups *bool `type:"boolean"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // A brief description of the authorization rule. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IPv4 address range, in CIDR notation, of the network for which access - // is being authorized. - // - // TargetNetworkCidr is a required field - TargetNetworkCidr *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s AuthorizeClientVpnIngressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizeClientVpnIngressInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AuthorizeClientVpnIngressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AuthorizeClientVpnIngressInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.TargetNetworkCidr == nil { - invalidParams.Add(request.NewErrParamRequired("TargetNetworkCidr")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAccessGroupId sets the AccessGroupId field's value. -func (s *AuthorizeClientVpnIngressInput) SetAccessGroupId(v string) *AuthorizeClientVpnIngressInput { - s.AccessGroupId = &v - return s -} - -// SetAuthorizeAllGroups sets the AuthorizeAllGroups field's value. -func (s *AuthorizeClientVpnIngressInput) SetAuthorizeAllGroups(v bool) *AuthorizeClientVpnIngressInput { - s.AuthorizeAllGroups = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *AuthorizeClientVpnIngressInput) SetClientToken(v string) *AuthorizeClientVpnIngressInput { - s.ClientToken = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *AuthorizeClientVpnIngressInput) SetClientVpnEndpointId(v string) *AuthorizeClientVpnIngressInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *AuthorizeClientVpnIngressInput) SetDescription(v string) *AuthorizeClientVpnIngressInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AuthorizeClientVpnIngressInput) SetDryRun(v bool) *AuthorizeClientVpnIngressInput { - s.DryRun = &v - return s -} - -// SetTargetNetworkCidr sets the TargetNetworkCidr field's value. -func (s *AuthorizeClientVpnIngressInput) SetTargetNetworkCidr(v string) *AuthorizeClientVpnIngressInput { - s.TargetNetworkCidr = &v - return s -} - -type AuthorizeClientVpnIngressOutput struct { - _ struct{} `type:"structure"` - - // The current state of the authorization rule. - Status *ClientVpnAuthorizationRuleStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s AuthorizeClientVpnIngressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizeClientVpnIngressOutput) GoString() string { - return s.String() -} - -// SetStatus sets the Status field's value. -func (s *AuthorizeClientVpnIngressOutput) SetStatus(v *ClientVpnAuthorizationRuleStatus) *AuthorizeClientVpnIngressOutput { - s.Status = v - return s -} - -type AuthorizeSecurityGroupEgressInput struct { - _ struct{} `type:"structure"` - - // Not supported. Use a set of IP permissions to specify the CIDR. - CidrIp *string `locationName:"cidrIp" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Not supported. Use a set of IP permissions to specify the port. - FromPort *int64 `locationName:"fromPort" type:"integer"` - - // The ID of the security group. - // - // GroupId is a required field - GroupId *string `locationName:"groupId" type:"string" required:"true"` - - // The sets of IP permissions. You can't specify a destination security group - // and a CIDR IP address range in the same set of permissions. - IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - - // Not supported. Use a set of IP permissions to specify the protocol name or - // number. - IpProtocol *string `locationName:"ipProtocol" type:"string"` - - // Not supported. Use a set of IP permissions to specify a destination security - // group. - SourceSecurityGroupName *string `locationName:"sourceSecurityGroupName" type:"string"` - - // Not supported. Use a set of IP permissions to specify a destination security - // group. - SourceSecurityGroupOwnerId *string `locationName:"sourceSecurityGroupOwnerId" type:"string"` - - // Not supported. Use a set of IP permissions to specify the port. - ToPort *int64 `locationName:"toPort" type:"integer"` -} - -// String returns the string representation -func (s AuthorizeSecurityGroupEgressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizeSecurityGroupEgressInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AuthorizeSecurityGroupEgressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AuthorizeSecurityGroupEgressInput"} - if s.GroupId == nil { - invalidParams.Add(request.NewErrParamRequired("GroupId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidrIp sets the CidrIp field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetCidrIp(v string) *AuthorizeSecurityGroupEgressInput { - s.CidrIp = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetDryRun(v bool) *AuthorizeSecurityGroupEgressInput { - s.DryRun = &v - return s -} - -// SetFromPort sets the FromPort field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetFromPort(v int64) *AuthorizeSecurityGroupEgressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetGroupId(v string) *AuthorizeSecurityGroupEgressInput { - s.GroupId = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetIpPermissions(v []*IpPermission) *AuthorizeSecurityGroupEgressInput { - s.IpPermissions = v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetIpProtocol(v string) *AuthorizeSecurityGroupEgressInput { - s.IpProtocol = &v - return s -} - -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetSourceSecurityGroupName(v string) *AuthorizeSecurityGroupEgressInput { - s.SourceSecurityGroupName = &v - return s -} - -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetSourceSecurityGroupOwnerId(v string) *AuthorizeSecurityGroupEgressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetToPort(v int64) *AuthorizeSecurityGroupEgressInput { - s.ToPort = &v - return s -} - -type AuthorizeSecurityGroupEgressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s AuthorizeSecurityGroupEgressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizeSecurityGroupEgressOutput) GoString() string { - return s.String() -} - -type AuthorizeSecurityGroupIngressInput struct { - _ struct{} `type:"structure"` - - // The IPv4 address range, in CIDR format. You can't specify this parameter - // when specifying a source security group. To specify an IPv6 address range, - // use a set of IP permissions. - // - // Alternatively, use a set of IP permissions to specify multiple rules and - // a description for the rule. - CidrIp *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The start of port range for the TCP and UDP protocols, or an ICMP type number. - // For the ICMP type number, use -1 to specify all types. If you specify all - // ICMP types, you must specify all codes. - // - // Alternatively, use a set of IP permissions to specify multiple rules and - // a description for the rule. - FromPort *int64 `type:"integer"` - - // The ID of the security group. You must specify either the security group - // ID or the security group name in the request. For security groups in a nondefault - // VPC, you must specify the security group ID. - GroupId *string `type:"string"` - - // [EC2-Classic, default VPC] The name of the security group. You must specify - // either the security group ID or the security group name in the request. - GroupName *string `type:"string"` - - // The sets of IP permissions. - IpPermissions []*IpPermission `locationNameList:"item" type:"list"` - - // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). - // To specify icmpv6, use a set of IP permissions. - // - // [VPC only] Use -1 to specify all protocols. If you specify -1 or a protocol - // other than tcp, udp, or icmp, traffic on all ports is allowed, regardless - // of any ports you specify. - // - // Alternatively, use a set of IP permissions to specify multiple rules and - // a description for the rule. - IpProtocol *string `type:"string"` - - // [EC2-Classic, default VPC] The name of the source security group. You can't - // specify this parameter in combination with the following parameters: the - // CIDR IP address range, the start of the port range, the IP protocol, and - // the end of the port range. Creates rules that grant full ICMP, UDP, and TCP - // access. To create a rule with a specific IP protocol and port range, use - // a set of IP permissions instead. For EC2-VPC, the source security group must - // be in the same VPC. - SourceSecurityGroupName *string `type:"string"` - - // [nondefault VPC] The AWS account ID for the source security group, if the - // source security group is in a different account. You can't specify this parameter - // in combination with the following parameters: the CIDR IP address range, - // the IP protocol, the start of the port range, and the end of the port range. - // Creates rules that grant full ICMP, UDP, and TCP access. To create a rule - // with a specific IP protocol and port range, use a set of IP permissions instead. - SourceSecurityGroupOwnerId *string `type:"string"` - - // The end of port range for the TCP and UDP protocols, or an ICMP code number. - // For the ICMP code number, use -1 to specify all codes. If you specify all - // ICMP types, you must specify all codes. - // - // Alternatively, use a set of IP permissions to specify multiple rules and - // a description for the rule. - ToPort *int64 `type:"integer"` -} - -// String returns the string representation -func (s AuthorizeSecurityGroupIngressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizeSecurityGroupIngressInput) GoString() string { - return s.String() -} - -// SetCidrIp sets the CidrIp field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetCidrIp(v string) *AuthorizeSecurityGroupIngressInput { - s.CidrIp = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetDryRun(v bool) *AuthorizeSecurityGroupIngressInput { - s.DryRun = &v - return s -} - -// SetFromPort sets the FromPort field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetFromPort(v int64) *AuthorizeSecurityGroupIngressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetGroupId(v string) *AuthorizeSecurityGroupIngressInput { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetGroupName(v string) *AuthorizeSecurityGroupIngressInput { - s.GroupName = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetIpPermissions(v []*IpPermission) *AuthorizeSecurityGroupIngressInput { - s.IpPermissions = v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetIpProtocol(v string) *AuthorizeSecurityGroupIngressInput { - s.IpProtocol = &v - return s -} - -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetSourceSecurityGroupName(v string) *AuthorizeSecurityGroupIngressInput { - s.SourceSecurityGroupName = &v - return s -} - -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetSourceSecurityGroupOwnerId(v string) *AuthorizeSecurityGroupIngressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetToPort(v int64) *AuthorizeSecurityGroupIngressInput { - s.ToPort = &v - return s -} - -type AuthorizeSecurityGroupIngressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s AuthorizeSecurityGroupIngressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AuthorizeSecurityGroupIngressOutput) GoString() string { - return s.String() -} - -// Describes an Availability Zone. -type AvailabilityZone struct { - _ struct{} `type:"structure"` - - // Any messages about the Availability Zone. - Messages []*AvailabilityZoneMessage `locationName:"messageSet" locationNameList:"item" type:"list"` - - // The name of the Region. - RegionName *string `locationName:"regionName" type:"string"` - - // The state of the Availability Zone. - State *string `locationName:"zoneState" type:"string" enum:"AvailabilityZoneState"` - - // The ID of the Availability Zone. - ZoneId *string `locationName:"zoneId" type:"string"` - - // The name of the Availability Zone. - ZoneName *string `locationName:"zoneName" type:"string"` -} - -// String returns the string representation -func (s AvailabilityZone) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AvailabilityZone) GoString() string { - return s.String() -} - -// SetMessages sets the Messages field's value. -func (s *AvailabilityZone) SetMessages(v []*AvailabilityZoneMessage) *AvailabilityZone { - s.Messages = v - return s -} - -// SetRegionName sets the RegionName field's value. -func (s *AvailabilityZone) SetRegionName(v string) *AvailabilityZone { - s.RegionName = &v - return s -} - -// SetState sets the State field's value. -func (s *AvailabilityZone) SetState(v string) *AvailabilityZone { - s.State = &v - return s -} - -// SetZoneId sets the ZoneId field's value. -func (s *AvailabilityZone) SetZoneId(v string) *AvailabilityZone { - s.ZoneId = &v - return s -} - -// SetZoneName sets the ZoneName field's value. -func (s *AvailabilityZone) SetZoneName(v string) *AvailabilityZone { - s.ZoneName = &v - return s -} - -// Describes a message about an Availability Zone. -type AvailabilityZoneMessage struct { - _ struct{} `type:"structure"` - - // The message about the Availability Zone. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s AvailabilityZoneMessage) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AvailabilityZoneMessage) GoString() string { - return s.String() -} - -// SetMessage sets the Message field's value. -func (s *AvailabilityZoneMessage) SetMessage(v string) *AvailabilityZoneMessage { - s.Message = &v - return s -} - -// The capacity information for instances that can be launched onto the Dedicated -// Host. -type AvailableCapacity struct { - _ struct{} `type:"structure"` - - // The number of instances that can be launched onto the Dedicated Host depending - // on the host's available capacity. For Dedicated Hosts that support multiple - // instance types, this parameter represents the number of instances for each - // instance size that is supported on the host. - AvailableInstanceCapacity []*InstanceCapacity `locationName:"availableInstanceCapacity" locationNameList:"item" type:"list"` - - // The number of vCPUs available for launching instances onto the Dedicated - // Host. - AvailableVCpus *int64 `locationName:"availableVCpus" type:"integer"` -} - -// String returns the string representation -func (s AvailableCapacity) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AvailableCapacity) GoString() string { - return s.String() -} - -// SetAvailableInstanceCapacity sets the AvailableInstanceCapacity field's value. -func (s *AvailableCapacity) SetAvailableInstanceCapacity(v []*InstanceCapacity) *AvailableCapacity { - s.AvailableInstanceCapacity = v - return s -} - -// SetAvailableVCpus sets the AvailableVCpus field's value. -func (s *AvailableCapacity) SetAvailableVCpus(v int64) *AvailableCapacity { - s.AvailableVCpus = &v - return s -} - -type BlobAttributeValue struct { - _ struct{} `type:"structure"` - - // Value is automatically base64 encoded/decoded by the SDK. - Value []byte `locationName:"value" type:"blob"` -} - -// String returns the string representation -func (s BlobAttributeValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s BlobAttributeValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *BlobAttributeValue) SetValue(v []byte) *BlobAttributeValue { - s.Value = v - return s -} - -// Describes a block device mapping. -type BlockDeviceMapping struct { - _ struct{} `type:"structure"` - - // The device name (for example, /dev/sdh or xvdh). - DeviceName *string `locationName:"deviceName" type:"string"` - - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *EbsBlockDevice `locationName:"ebs" type:"structure"` - - // Suppresses the specified device included in the block device mapping of the - // AMI. - NoDevice *string `locationName:"noDevice" type:"string"` - - // The virtual device name (ephemeralN). Instance store volumes are numbered - // starting from 0. An instance type with 2 available instance store volumes - // can specify mappings for ephemeral0 and ephemeral1. The number of available - // instance store volumes depends on the instance type. After you connect to - // the instance, you must mount the volume. - // - // NVMe instance store volumes are automatically enumerated and assigned a device - // name. Including them in your block device mapping has no effect. - // - // Constraints: For M3 instances, you must specify instance store volumes in - // the block device mapping for the instance. When you launch an M3 instance, - // we ignore any instance store volumes specified in the block device mapping - // for the AMI. - VirtualName *string `locationName:"virtualName" type:"string"` -} - -// String returns the string representation -func (s BlockDeviceMapping) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s BlockDeviceMapping) GoString() string { - return s.String() -} - -// SetDeviceName sets the DeviceName field's value. -func (s *BlockDeviceMapping) SetDeviceName(v string) *BlockDeviceMapping { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *BlockDeviceMapping) SetEbs(v *EbsBlockDevice) *BlockDeviceMapping { - s.Ebs = v - return s -} - -// SetNoDevice sets the NoDevice field's value. -func (s *BlockDeviceMapping) SetNoDevice(v string) *BlockDeviceMapping { - s.NoDevice = &v - return s -} - -// SetVirtualName sets the VirtualName field's value. -func (s *BlockDeviceMapping) SetVirtualName(v string) *BlockDeviceMapping { - s.VirtualName = &v - return s -} - -// Contains the parameters for BundleInstance. -type BundleInstanceInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance to bundle. - // - // Type: String - // - // Default: None - // - // Required: Yes - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // The bucket in which to store the AMI. You can specify a bucket that you already - // own or a new bucket that Amazon EC2 creates on your behalf. If you specify - // a bucket that belongs to someone else, Amazon EC2 returns an error. - // - // Storage is a required field - Storage *Storage `type:"structure" required:"true"` -} - -// String returns the string representation -func (s BundleInstanceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s BundleInstanceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *BundleInstanceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "BundleInstanceInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.Storage == nil { - invalidParams.Add(request.NewErrParamRequired("Storage")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *BundleInstanceInput) SetDryRun(v bool) *BundleInstanceInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *BundleInstanceInput) SetInstanceId(v string) *BundleInstanceInput { - s.InstanceId = &v - return s -} - -// SetStorage sets the Storage field's value. -func (s *BundleInstanceInput) SetStorage(v *Storage) *BundleInstanceInput { - s.Storage = v - return s -} - -// Contains the output of BundleInstance. -type BundleInstanceOutput struct { - _ struct{} `type:"structure"` - - // Information about the bundle task. - BundleTask *BundleTask `locationName:"bundleInstanceTask" type:"structure"` -} - -// String returns the string representation -func (s BundleInstanceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s BundleInstanceOutput) GoString() string { - return s.String() -} - -// SetBundleTask sets the BundleTask field's value. -func (s *BundleInstanceOutput) SetBundleTask(v *BundleTask) *BundleInstanceOutput { - s.BundleTask = v - return s -} - -// Describes a bundle task. -type BundleTask struct { - _ struct{} `type:"structure"` - - // The ID of the bundle task. - BundleId *string `locationName:"bundleId" type:"string"` - - // If the task fails, a description of the error. - BundleTaskError *BundleTaskError `locationName:"error" type:"structure"` - - // The ID of the instance associated with this bundle task. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The level of task completion, as a percent (for example, 20%). - Progress *string `locationName:"progress" type:"string"` - - // The time this task started. - StartTime *time.Time `locationName:"startTime" type:"timestamp"` - - // The state of the task. - State *string `locationName:"state" type:"string" enum:"BundleTaskState"` - - // The Amazon S3 storage locations. - Storage *Storage `locationName:"storage" type:"structure"` - - // The time of the most recent update for the task. - UpdateTime *time.Time `locationName:"updateTime" type:"timestamp"` -} - -// String returns the string representation -func (s BundleTask) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s BundleTask) GoString() string { - return s.String() -} - -// SetBundleId sets the BundleId field's value. -func (s *BundleTask) SetBundleId(v string) *BundleTask { - s.BundleId = &v - return s -} - -// SetBundleTaskError sets the BundleTaskError field's value. -func (s *BundleTask) SetBundleTaskError(v *BundleTaskError) *BundleTask { - s.BundleTaskError = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *BundleTask) SetInstanceId(v string) *BundleTask { - s.InstanceId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *BundleTask) SetProgress(v string) *BundleTask { - s.Progress = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *BundleTask) SetStartTime(v time.Time) *BundleTask { - s.StartTime = &v - return s -} - -// SetState sets the State field's value. -func (s *BundleTask) SetState(v string) *BundleTask { - s.State = &v - return s -} - -// SetStorage sets the Storage field's value. -func (s *BundleTask) SetStorage(v *Storage) *BundleTask { - s.Storage = v - return s -} - -// SetUpdateTime sets the UpdateTime field's value. -func (s *BundleTask) SetUpdateTime(v time.Time) *BundleTask { - s.UpdateTime = &v - return s -} - -// Describes an error for BundleInstance. -type BundleTaskError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string"` - - // The error message. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s BundleTaskError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s BundleTaskError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *BundleTaskError) SetCode(v string) *BundleTaskError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *BundleTaskError) SetMessage(v string) *BundleTaskError { - s.Message = &v - return s -} - -// Information about an address range that is provisioned for use with your -// AWS resources through bring your own IP addresses (BYOIP). -type ByoipCidr struct { - _ struct{} `type:"structure"` - - // The public IPv4 address range, in CIDR notation. - Cidr *string `locationName:"cidr" type:"string"` - - // The description of the address range. - Description *string `locationName:"description" type:"string"` - - // The state of the address pool. - State *string `locationName:"state" type:"string" enum:"ByoipCidrState"` - - // Upon success, contains the ID of the address pool. Otherwise, contains an - // error message. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s ByoipCidr) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ByoipCidr) GoString() string { - return s.String() -} - -// SetCidr sets the Cidr field's value. -func (s *ByoipCidr) SetCidr(v string) *ByoipCidr { - s.Cidr = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ByoipCidr) SetDescription(v string) *ByoipCidr { - s.Description = &v - return s -} - -// SetState sets the State field's value. -func (s *ByoipCidr) SetState(v string) *ByoipCidr { - s.State = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ByoipCidr) SetStatusMessage(v string) *ByoipCidr { - s.StatusMessage = &v - return s -} - -// Contains the parameters for CancelBundleTask. -type CancelBundleTaskInput struct { - _ struct{} `type:"structure"` - - // The ID of the bundle task. - // - // BundleId is a required field - BundleId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s CancelBundleTaskInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelBundleTaskInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelBundleTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelBundleTaskInput"} - if s.BundleId == nil { - invalidParams.Add(request.NewErrParamRequired("BundleId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBundleId sets the BundleId field's value. -func (s *CancelBundleTaskInput) SetBundleId(v string) *CancelBundleTaskInput { - s.BundleId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CancelBundleTaskInput) SetDryRun(v bool) *CancelBundleTaskInput { - s.DryRun = &v - return s -} - -// Contains the output of CancelBundleTask. -type CancelBundleTaskOutput struct { - _ struct{} `type:"structure"` - - // Information about the bundle task. - BundleTask *BundleTask `locationName:"bundleInstanceTask" type:"structure"` -} - -// String returns the string representation -func (s CancelBundleTaskOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelBundleTaskOutput) GoString() string { - return s.String() -} - -// SetBundleTask sets the BundleTask field's value. -func (s *CancelBundleTaskOutput) SetBundleTask(v *BundleTask) *CancelBundleTaskOutput { - s.BundleTask = v - return s -} - -type CancelCapacityReservationInput struct { - _ struct{} `type:"structure"` - - // The ID of the Capacity Reservation to be cancelled. - // - // CapacityReservationId is a required field - CapacityReservationId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s CancelCapacityReservationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelCapacityReservationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelCapacityReservationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelCapacityReservationInput"} - if s.CapacityReservationId == nil { - invalidParams.Add(request.NewErrParamRequired("CapacityReservationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *CancelCapacityReservationInput) SetCapacityReservationId(v string) *CancelCapacityReservationInput { - s.CapacityReservationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CancelCapacityReservationInput) SetDryRun(v bool) *CancelCapacityReservationInput { - s.DryRun = &v - return s -} - -type CancelCapacityReservationOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s CancelCapacityReservationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelCapacityReservationOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *CancelCapacityReservationOutput) SetReturn(v bool) *CancelCapacityReservationOutput { - s.Return = &v - return s -} - -type CancelConversionTaskInput struct { - _ struct{} `type:"structure"` - - // The ID of the conversion task. - // - // ConversionTaskId is a required field - ConversionTaskId *string `locationName:"conversionTaskId" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The reason for canceling the conversion task. - ReasonMessage *string `locationName:"reasonMessage" type:"string"` -} - -// String returns the string representation -func (s CancelConversionTaskInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelConversionTaskInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelConversionTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelConversionTaskInput"} - if s.ConversionTaskId == nil { - invalidParams.Add(request.NewErrParamRequired("ConversionTaskId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetConversionTaskId sets the ConversionTaskId field's value. -func (s *CancelConversionTaskInput) SetConversionTaskId(v string) *CancelConversionTaskInput { - s.ConversionTaskId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CancelConversionTaskInput) SetDryRun(v bool) *CancelConversionTaskInput { - s.DryRun = &v - return s -} - -// SetReasonMessage sets the ReasonMessage field's value. -func (s *CancelConversionTaskInput) SetReasonMessage(v string) *CancelConversionTaskInput { - s.ReasonMessage = &v - return s -} - -type CancelConversionTaskOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CancelConversionTaskOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelConversionTaskOutput) GoString() string { - return s.String() -} - -type CancelExportTaskInput struct { - _ struct{} `type:"structure"` - - // The ID of the export task. This is the ID returned by CreateInstanceExportTask. - // - // ExportTaskId is a required field - ExportTaskId *string `locationName:"exportTaskId" type:"string" required:"true"` -} - -// String returns the string representation -func (s CancelExportTaskInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelExportTaskInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelExportTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelExportTaskInput"} - if s.ExportTaskId == nil { - invalidParams.Add(request.NewErrParamRequired("ExportTaskId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetExportTaskId sets the ExportTaskId field's value. -func (s *CancelExportTaskInput) SetExportTaskId(v string) *CancelExportTaskInput { - s.ExportTaskId = &v - return s -} - -type CancelExportTaskOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CancelExportTaskOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelExportTaskOutput) GoString() string { - return s.String() -} - -type CancelImportTaskInput struct { - _ struct{} `type:"structure"` - - // The reason for canceling the task. - CancelReason *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the import image or import snapshot task to be canceled. - ImportTaskId *string `type:"string"` -} - -// String returns the string representation -func (s CancelImportTaskInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelImportTaskInput) GoString() string { - return s.String() -} - -// SetCancelReason sets the CancelReason field's value. -func (s *CancelImportTaskInput) SetCancelReason(v string) *CancelImportTaskInput { - s.CancelReason = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CancelImportTaskInput) SetDryRun(v bool) *CancelImportTaskInput { - s.DryRun = &v - return s -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *CancelImportTaskInput) SetImportTaskId(v string) *CancelImportTaskInput { - s.ImportTaskId = &v - return s -} - -type CancelImportTaskOutput struct { - _ struct{} `type:"structure"` - - // The ID of the task being canceled. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // The current state of the task being canceled. - PreviousState *string `locationName:"previousState" type:"string"` - - // The current state of the task being canceled. - State *string `locationName:"state" type:"string"` -} - -// String returns the string representation -func (s CancelImportTaskOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelImportTaskOutput) GoString() string { - return s.String() -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *CancelImportTaskOutput) SetImportTaskId(v string) *CancelImportTaskOutput { - s.ImportTaskId = &v - return s -} - -// SetPreviousState sets the PreviousState field's value. -func (s *CancelImportTaskOutput) SetPreviousState(v string) *CancelImportTaskOutput { - s.PreviousState = &v - return s -} - -// SetState sets the State field's value. -func (s *CancelImportTaskOutput) SetState(v string) *CancelImportTaskOutput { - s.State = &v - return s -} - -// Contains the parameters for CancelReservedInstancesListing. -type CancelReservedInstancesListingInput struct { - _ struct{} `type:"structure"` - - // The ID of the Reserved Instance listing. - // - // ReservedInstancesListingId is a required field - ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string" required:"true"` -} - -// String returns the string representation -func (s CancelReservedInstancesListingInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelReservedInstancesListingInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelReservedInstancesListingInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelReservedInstancesListingInput"} - if s.ReservedInstancesListingId == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesListingId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. -func (s *CancelReservedInstancesListingInput) SetReservedInstancesListingId(v string) *CancelReservedInstancesListingInput { - s.ReservedInstancesListingId = &v - return s -} - -// Contains the output of CancelReservedInstancesListing. -type CancelReservedInstancesListingOutput struct { - _ struct{} `type:"structure"` - - // The Reserved Instance listing. - ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CancelReservedInstancesListingOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelReservedInstancesListingOutput) GoString() string { - return s.String() -} - -// SetReservedInstancesListings sets the ReservedInstancesListings field's value. -func (s *CancelReservedInstancesListingOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *CancelReservedInstancesListingOutput { - s.ReservedInstancesListings = v - return s -} - -// Describes a Spot Fleet error. -type CancelSpotFleetRequestsError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string" enum:"CancelBatchErrorCode"` - - // The description for the error code. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s CancelSpotFleetRequestsError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotFleetRequestsError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *CancelSpotFleetRequestsError) SetCode(v string) *CancelSpotFleetRequestsError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *CancelSpotFleetRequestsError) SetMessage(v string) *CancelSpotFleetRequestsError { - s.Message = &v - return s -} - -// Describes a Spot Fleet request that was not successfully canceled. -type CancelSpotFleetRequestsErrorItem struct { - _ struct{} `type:"structure"` - - // The error. - Error *CancelSpotFleetRequestsError `locationName:"error" type:"structure"` - - // The ID of the Spot Fleet request. - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` -} - -// String returns the string representation -func (s CancelSpotFleetRequestsErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotFleetRequestsErrorItem) GoString() string { - return s.String() -} - -// SetError sets the Error field's value. -func (s *CancelSpotFleetRequestsErrorItem) SetError(v *CancelSpotFleetRequestsError) *CancelSpotFleetRequestsErrorItem { - s.Error = v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *CancelSpotFleetRequestsErrorItem) SetSpotFleetRequestId(v string) *CancelSpotFleetRequestsErrorItem { - s.SpotFleetRequestId = &v - return s -} - -// Contains the parameters for CancelSpotFleetRequests. -type CancelSpotFleetRequestsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the Spot Fleet requests. - // - // SpotFleetRequestIds is a required field - SpotFleetRequestIds []*string `locationName:"spotFleetRequestId" locationNameList:"item" type:"list" required:"true"` - - // Indicates whether to terminate instances for a Spot Fleet request if it is - // canceled successfully. - // - // TerminateInstances is a required field - TerminateInstances *bool `locationName:"terminateInstances" type:"boolean" required:"true"` -} - -// String returns the string representation -func (s CancelSpotFleetRequestsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotFleetRequestsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelSpotFleetRequestsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelSpotFleetRequestsInput"} - if s.SpotFleetRequestIds == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestIds")) - } - if s.TerminateInstances == nil { - invalidParams.Add(request.NewErrParamRequired("TerminateInstances")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CancelSpotFleetRequestsInput) SetDryRun(v bool) *CancelSpotFleetRequestsInput { - s.DryRun = &v - return s -} - -// SetSpotFleetRequestIds sets the SpotFleetRequestIds field's value. -func (s *CancelSpotFleetRequestsInput) SetSpotFleetRequestIds(v []*string) *CancelSpotFleetRequestsInput { - s.SpotFleetRequestIds = v - return s -} - -// SetTerminateInstances sets the TerminateInstances field's value. -func (s *CancelSpotFleetRequestsInput) SetTerminateInstances(v bool) *CancelSpotFleetRequestsInput { - s.TerminateInstances = &v - return s -} - -// Contains the output of CancelSpotFleetRequests. -type CancelSpotFleetRequestsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Spot Fleet requests that are successfully canceled. - SuccessfulFleetRequests []*CancelSpotFleetRequestsSuccessItem `locationName:"successfulFleetRequestSet" locationNameList:"item" type:"list"` - - // Information about the Spot Fleet requests that are not successfully canceled. - UnsuccessfulFleetRequests []*CancelSpotFleetRequestsErrorItem `locationName:"unsuccessfulFleetRequestSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CancelSpotFleetRequestsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotFleetRequestsOutput) GoString() string { - return s.String() -} - -// SetSuccessfulFleetRequests sets the SuccessfulFleetRequests field's value. -func (s *CancelSpotFleetRequestsOutput) SetSuccessfulFleetRequests(v []*CancelSpotFleetRequestsSuccessItem) *CancelSpotFleetRequestsOutput { - s.SuccessfulFleetRequests = v - return s -} - -// SetUnsuccessfulFleetRequests sets the UnsuccessfulFleetRequests field's value. -func (s *CancelSpotFleetRequestsOutput) SetUnsuccessfulFleetRequests(v []*CancelSpotFleetRequestsErrorItem) *CancelSpotFleetRequestsOutput { - s.UnsuccessfulFleetRequests = v - return s -} - -// Describes a Spot Fleet request that was successfully canceled. -type CancelSpotFleetRequestsSuccessItem struct { - _ struct{} `type:"structure"` - - // The current state of the Spot Fleet request. - CurrentSpotFleetRequestState *string `locationName:"currentSpotFleetRequestState" type:"string" enum:"BatchState"` - - // The previous state of the Spot Fleet request. - PreviousSpotFleetRequestState *string `locationName:"previousSpotFleetRequestState" type:"string" enum:"BatchState"` - - // The ID of the Spot Fleet request. - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` -} - -// String returns the string representation -func (s CancelSpotFleetRequestsSuccessItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotFleetRequestsSuccessItem) GoString() string { - return s.String() -} - -// SetCurrentSpotFleetRequestState sets the CurrentSpotFleetRequestState field's value. -func (s *CancelSpotFleetRequestsSuccessItem) SetCurrentSpotFleetRequestState(v string) *CancelSpotFleetRequestsSuccessItem { - s.CurrentSpotFleetRequestState = &v - return s -} - -// SetPreviousSpotFleetRequestState sets the PreviousSpotFleetRequestState field's value. -func (s *CancelSpotFleetRequestsSuccessItem) SetPreviousSpotFleetRequestState(v string) *CancelSpotFleetRequestsSuccessItem { - s.PreviousSpotFleetRequestState = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *CancelSpotFleetRequestsSuccessItem) SetSpotFleetRequestId(v string) *CancelSpotFleetRequestsSuccessItem { - s.SpotFleetRequestId = &v - return s -} - -// Contains the parameters for CancelSpotInstanceRequests. -type CancelSpotInstanceRequestsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more Spot Instance request IDs. - // - // SpotInstanceRequestIds is a required field - SpotInstanceRequestIds []*string `locationName:"SpotInstanceRequestId" locationNameList:"SpotInstanceRequestId" type:"list" required:"true"` -} - -// String returns the string representation -func (s CancelSpotInstanceRequestsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotInstanceRequestsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelSpotInstanceRequestsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelSpotInstanceRequestsInput"} - if s.SpotInstanceRequestIds == nil { - invalidParams.Add(request.NewErrParamRequired("SpotInstanceRequestIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CancelSpotInstanceRequestsInput) SetDryRun(v bool) *CancelSpotInstanceRequestsInput { - s.DryRun = &v - return s -} - -// SetSpotInstanceRequestIds sets the SpotInstanceRequestIds field's value. -func (s *CancelSpotInstanceRequestsInput) SetSpotInstanceRequestIds(v []*string) *CancelSpotInstanceRequestsInput { - s.SpotInstanceRequestIds = v - return s -} - -// Contains the output of CancelSpotInstanceRequests. -type CancelSpotInstanceRequestsOutput struct { - _ struct{} `type:"structure"` - - // One or more Spot Instance requests. - CancelledSpotInstanceRequests []*CancelledSpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CancelSpotInstanceRequestsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelSpotInstanceRequestsOutput) GoString() string { - return s.String() -} - -// SetCancelledSpotInstanceRequests sets the CancelledSpotInstanceRequests field's value. -func (s *CancelSpotInstanceRequestsOutput) SetCancelledSpotInstanceRequests(v []*CancelledSpotInstanceRequest) *CancelSpotInstanceRequestsOutput { - s.CancelledSpotInstanceRequests = v - return s -} - -// Describes a request to cancel a Spot Instance. -type CancelledSpotInstanceRequest struct { - _ struct{} `type:"structure"` - - // The ID of the Spot Instance request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` - - // The state of the Spot Instance request. - State *string `locationName:"state" type:"string" enum:"CancelSpotInstanceRequestState"` -} - -// String returns the string representation -func (s CancelledSpotInstanceRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CancelledSpotInstanceRequest) GoString() string { - return s.String() -} - -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *CancelledSpotInstanceRequest) SetSpotInstanceRequestId(v string) *CancelledSpotInstanceRequest { - s.SpotInstanceRequestId = &v - return s -} - -// SetState sets the State field's value. -func (s *CancelledSpotInstanceRequest) SetState(v string) *CancelledSpotInstanceRequest { - s.State = &v - return s -} - -// Describes a Capacity Reservation. -type CapacityReservation struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which the capacity is reserved. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The Availability Zone ID of the Capacity Reservation. - AvailabilityZoneId *string `locationName:"availabilityZoneId" type:"string"` - - // The remaining capacity. Indicates the number of instances that can be launched - // in the Capacity Reservation. - AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` - - // The Amazon Resource Name (ARN) of the Capacity Reservation. - CapacityReservationArn *string `locationName:"capacityReservationArn" type:"string"` - - // The ID of the Capacity Reservation. - CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` - - // The date and time at which the Capacity Reservation was created. - CreateDate *time.Time `locationName:"createDate" type:"timestamp"` - - // Indicates whether the Capacity Reservation supports EBS-optimized instances. - // This optimization provides dedicated throughput to Amazon EBS and an optimized - // configuration stack to provide optimal I/O performance. This optimization - // isn't available with all instance types. Additional usage charges apply when - // using an EBS- optimized instance. - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The date and time at which the Capacity Reservation expires. When a Capacity - // Reservation expires, the reserved capacity is released and you can no longer - // launch instances into it. The Capacity Reservation's state changes to expired - // when it reaches its end date and time. - EndDate *time.Time `locationName:"endDate" type:"timestamp"` - - // Indicates the way in which the Capacity Reservation ends. A Capacity Reservation - // can have one of the following end types: - // - // * unlimited - The Capacity Reservation remains active until you explicitly - // cancel it. - // - // * limited - The Capacity Reservation expires automatically at a specified - // date and time. - EndDateType *string `locationName:"endDateType" type:"string" enum:"EndDateType"` - - // Indicates whether the Capacity Reservation supports instances with temporary, - // block-level storage. - EphemeralStorage *bool `locationName:"ephemeralStorage" type:"boolean"` - - // Indicates the type of instance launches that the Capacity Reservation accepts. - // The options include: - // - // * open - The Capacity Reservation accepts all instances that have matching - // attributes (instance type, platform, and Availability Zone). Instances - // that have matching attributes launch into the Capacity Reservation automatically - // without specifying any additional parameters. - // - // * targeted - The Capacity Reservation only accepts instances that have - // matching attributes (instance type, platform, and Availability Zone), - // and explicitly target the Capacity Reservation. This ensures that only - // permitted instances can use the reserved capacity. - InstanceMatchCriteria *string `locationName:"instanceMatchCriteria" type:"string" enum:"InstanceMatchCriteria"` - - // The type of operating system for which the Capacity Reservation reserves - // capacity. - InstancePlatform *string `locationName:"instancePlatform" type:"string" enum:"CapacityReservationInstancePlatform"` - - // The type of instance for which the Capacity Reservation reserves capacity. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The ID of the AWS account that owns the Capacity Reservation. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The current state of the Capacity Reservation. A Capacity Reservation can - // be in one of the following states: - // - // * active - The Capacity Reservation is active and the capacity is available - // for your use. - // - // * expired - The Capacity Reservation expired automatically at the date - // and time specified in your request. The reserved capacity is no longer - // available for your use. - // - // * cancelled - The Capacity Reservation was manually cancelled. The reserved - // capacity is no longer available for your use. - // - // * pending - The Capacity Reservation request was successful but the capacity - // provisioning is still pending. - // - // * failed - The Capacity Reservation request has failed. A request might - // fail due to invalid request parameters, capacity constraints, or instance - // limit constraints. Failed requests are retained for 60 minutes. - State *string `locationName:"state" type:"string" enum:"CapacityReservationState"` - - // Any tags assigned to the Capacity Reservation. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // Indicates the tenancy of the Capacity Reservation. A Capacity Reservation - // can have one of the following tenancy settings: - // - // * default - The Capacity Reservation is created on hardware that is shared - // with other AWS accounts. - // - // * dedicated - The Capacity Reservation is created on single-tenant hardware - // that is dedicated to a single AWS account. - Tenancy *string `locationName:"tenancy" type:"string" enum:"CapacityReservationTenancy"` - - // The total number of instances for which the Capacity Reservation reserves - // capacity. - TotalInstanceCount *int64 `locationName:"totalInstanceCount" type:"integer"` -} - -// String returns the string representation -func (s CapacityReservation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CapacityReservation) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CapacityReservation) SetAvailabilityZone(v string) *CapacityReservation { - s.AvailabilityZone = &v - return s -} - -// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. -func (s *CapacityReservation) SetAvailabilityZoneId(v string) *CapacityReservation { - s.AvailabilityZoneId = &v - return s -} - -// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. -func (s *CapacityReservation) SetAvailableInstanceCount(v int64) *CapacityReservation { - s.AvailableInstanceCount = &v - return s -} - -// SetCapacityReservationArn sets the CapacityReservationArn field's value. -func (s *CapacityReservation) SetCapacityReservationArn(v string) *CapacityReservation { - s.CapacityReservationArn = &v - return s -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *CapacityReservation) SetCapacityReservationId(v string) *CapacityReservation { - s.CapacityReservationId = &v - return s -} - -// SetCreateDate sets the CreateDate field's value. -func (s *CapacityReservation) SetCreateDate(v time.Time) *CapacityReservation { - s.CreateDate = &v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *CapacityReservation) SetEbsOptimized(v bool) *CapacityReservation { - s.EbsOptimized = &v - return s -} - -// SetEndDate sets the EndDate field's value. -func (s *CapacityReservation) SetEndDate(v time.Time) *CapacityReservation { - s.EndDate = &v - return s -} - -// SetEndDateType sets the EndDateType field's value. -func (s *CapacityReservation) SetEndDateType(v string) *CapacityReservation { - s.EndDateType = &v - return s -} - -// SetEphemeralStorage sets the EphemeralStorage field's value. -func (s *CapacityReservation) SetEphemeralStorage(v bool) *CapacityReservation { - s.EphemeralStorage = &v - return s -} - -// SetInstanceMatchCriteria sets the InstanceMatchCriteria field's value. -func (s *CapacityReservation) SetInstanceMatchCriteria(v string) *CapacityReservation { - s.InstanceMatchCriteria = &v - return s -} - -// SetInstancePlatform sets the InstancePlatform field's value. -func (s *CapacityReservation) SetInstancePlatform(v string) *CapacityReservation { - s.InstancePlatform = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *CapacityReservation) SetInstanceType(v string) *CapacityReservation { - s.InstanceType = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *CapacityReservation) SetOwnerId(v string) *CapacityReservation { - s.OwnerId = &v - return s -} - -// SetState sets the State field's value. -func (s *CapacityReservation) SetState(v string) *CapacityReservation { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *CapacityReservation) SetTags(v []*Tag) *CapacityReservation { - s.Tags = v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *CapacityReservation) SetTenancy(v string) *CapacityReservation { - s.Tenancy = &v - return s -} - -// SetTotalInstanceCount sets the TotalInstanceCount field's value. -func (s *CapacityReservation) SetTotalInstanceCount(v int64) *CapacityReservation { - s.TotalInstanceCount = &v - return s -} - -// Describes an instance's Capacity Reservation targeting option. You can specify -// only one parameter at a time. If you specify CapacityReservationPreference -// and CapacityReservationTarget, the request fails. -// -// Use the CapacityReservationPreference parameter to configure the instance -// to run as an On-Demand Instance or to run in any open Capacity Reservation -// that has matching attributes (instance type, platform, Availability Zone). -// Use the CapacityReservationTarget parameter to explicitly target a specific -// Capacity Reservation. -type CapacityReservationSpecification struct { - _ struct{} `type:"structure"` - - // Indicates the instance's Capacity Reservation preferences. Possible preferences - // include: - // - // * open - The instance can run in any open Capacity Reservation that has - // matching attributes (instance type, platform, Availability Zone). - // - // * none - The instance avoids running in a Capacity Reservation even if - // one is available. The instance runs as an On-Demand Instance. - CapacityReservationPreference *string `type:"string" enum:"CapacityReservationPreference"` - - // Information about the target Capacity Reservation. - CapacityReservationTarget *CapacityReservationTarget `type:"structure"` -} - -// String returns the string representation -func (s CapacityReservationSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CapacityReservationSpecification) GoString() string { - return s.String() -} - -// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. -func (s *CapacityReservationSpecification) SetCapacityReservationPreference(v string) *CapacityReservationSpecification { - s.CapacityReservationPreference = &v - return s -} - -// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. -func (s *CapacityReservationSpecification) SetCapacityReservationTarget(v *CapacityReservationTarget) *CapacityReservationSpecification { - s.CapacityReservationTarget = v - return s -} - -// Describes the instance's Capacity Reservation targeting preferences. The -// action returns the capacityReservationPreference response element if the -// instance is configured to run in On-Demand capacity, or if it is configured -// in run in any open Capacity Reservation that has matching attributes (instance -// type, platform, Availability Zone). The action returns the capacityReservationTarget -// response element if the instance explicily targets a specific Capacity Reservation. -type CapacityReservationSpecificationResponse struct { - _ struct{} `type:"structure"` - - // Describes the instance's Capacity Reservation preferences. Possible preferences - // include: - // - // * open - The instance can run in any open Capacity Reservation that has - // matching attributes (instance type, platform, Availability Zone). - // - // * none - The instance avoids running in a Capacity Reservation even if - // one is available. The instance runs in On-Demand capacity. - CapacityReservationPreference *string `locationName:"capacityReservationPreference" type:"string" enum:"CapacityReservationPreference"` - - // Information about the targeted Capacity Reservation. - CapacityReservationTarget *CapacityReservationTargetResponse `locationName:"capacityReservationTarget" type:"structure"` -} - -// String returns the string representation -func (s CapacityReservationSpecificationResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CapacityReservationSpecificationResponse) GoString() string { - return s.String() -} - -// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. -func (s *CapacityReservationSpecificationResponse) SetCapacityReservationPreference(v string) *CapacityReservationSpecificationResponse { - s.CapacityReservationPreference = &v - return s -} - -// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. -func (s *CapacityReservationSpecificationResponse) SetCapacityReservationTarget(v *CapacityReservationTargetResponse) *CapacityReservationSpecificationResponse { - s.CapacityReservationTarget = v - return s -} - -// Describes a target Capacity Reservation. -type CapacityReservationTarget struct { - _ struct{} `type:"structure"` - - // The ID of the Capacity Reservation. - CapacityReservationId *string `type:"string"` -} - -// String returns the string representation -func (s CapacityReservationTarget) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CapacityReservationTarget) GoString() string { - return s.String() -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *CapacityReservationTarget) SetCapacityReservationId(v string) *CapacityReservationTarget { - s.CapacityReservationId = &v - return s -} - -// Describes a target Capacity Reservation. -type CapacityReservationTargetResponse struct { - _ struct{} `type:"structure"` - - // The ID of the Capacity Reservation. - CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` -} - -// String returns the string representation -func (s CapacityReservationTargetResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CapacityReservationTargetResponse) GoString() string { - return s.String() -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *CapacityReservationTargetResponse) SetCapacityReservationId(v string) *CapacityReservationTargetResponse { - s.CapacityReservationId = &v - return s -} - -// Information about the client certificate used for authentication. -type CertificateAuthentication struct { - _ struct{} `type:"structure"` - - // The ARN of the client certificate. - ClientRootCertificateChain *string `locationName:"clientRootCertificateChain" type:"string"` -} - -// String returns the string representation -func (s CertificateAuthentication) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CertificateAuthentication) GoString() string { - return s.String() -} - -// SetClientRootCertificateChain sets the ClientRootCertificateChain field's value. -func (s *CertificateAuthentication) SetClientRootCertificateChain(v string) *CertificateAuthentication { - s.ClientRootCertificateChain = &v - return s -} - -// Information about the client certificate to be used for authentication. -type CertificateAuthenticationRequest struct { - _ struct{} `type:"structure"` - - // The ARN of the client certificate. The certificate must be signed by a certificate - // authority (CA) and it must be provisioned in AWS Certificate Manager (ACM). - ClientRootCertificateChainArn *string `type:"string"` -} - -// String returns the string representation -func (s CertificateAuthenticationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CertificateAuthenticationRequest) GoString() string { - return s.String() -} - -// SetClientRootCertificateChainArn sets the ClientRootCertificateChainArn field's value. -func (s *CertificateAuthenticationRequest) SetClientRootCertificateChainArn(v string) *CertificateAuthenticationRequest { - s.ClientRootCertificateChainArn = &v - return s -} - -// Provides authorization for Amazon to bring a specific IP address range to -// a specific AWS account using bring your own IP addresses (BYOIP). For more -// information, see Prepare to Bring Your Address Range to Your AWS Account -// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip) -// in the Amazon Elastic Compute Cloud User Guide. -type CidrAuthorizationContext struct { - _ struct{} `type:"structure"` - - // The plain-text authorization message for the prefix and account. - // - // Message is a required field - Message *string `type:"string" required:"true"` - - // The signed authorization message for the prefix and account. - // - // Signature is a required field - Signature *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CidrAuthorizationContext) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CidrAuthorizationContext) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CidrAuthorizationContext) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CidrAuthorizationContext"} - if s.Message == nil { - invalidParams.Add(request.NewErrParamRequired("Message")) - } - if s.Signature == nil { - invalidParams.Add(request.NewErrParamRequired("Signature")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetMessage sets the Message field's value. -func (s *CidrAuthorizationContext) SetMessage(v string) *CidrAuthorizationContext { - s.Message = &v - return s -} - -// SetSignature sets the Signature field's value. -func (s *CidrAuthorizationContext) SetSignature(v string) *CidrAuthorizationContext { - s.Signature = &v - return s -} - -// Describes an IPv4 CIDR block. -type CidrBlock struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR block. - CidrBlock *string `locationName:"cidrBlock" type:"string"` -} - -// String returns the string representation -func (s CidrBlock) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CidrBlock) GoString() string { - return s.String() -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *CidrBlock) SetCidrBlock(v string) *CidrBlock { - s.CidrBlock = &v - return s -} - -// Describes the ClassicLink DNS support status of a VPC. -type ClassicLinkDnsSupport struct { - _ struct{} `type:"structure"` - - // Indicates whether ClassicLink DNS support is enabled for the VPC. - ClassicLinkDnsSupported *bool `locationName:"classicLinkDnsSupported" type:"boolean"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s ClassicLinkDnsSupport) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClassicLinkDnsSupport) GoString() string { - return s.String() -} - -// SetClassicLinkDnsSupported sets the ClassicLinkDnsSupported field's value. -func (s *ClassicLinkDnsSupport) SetClassicLinkDnsSupported(v bool) *ClassicLinkDnsSupport { - s.ClassicLinkDnsSupported = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *ClassicLinkDnsSupport) SetVpcId(v string) *ClassicLinkDnsSupport { - s.VpcId = &v - return s -} - -// Describes a linked EC2-Classic instance. -type ClassicLinkInstance struct { - _ struct{} `type:"structure"` - - // A list of security groups. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // Any tags assigned to the instance. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s ClassicLinkInstance) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClassicLinkInstance) GoString() string { - return s.String() -} - -// SetGroups sets the Groups field's value. -func (s *ClassicLinkInstance) SetGroups(v []*GroupIdentifier) *ClassicLinkInstance { - s.Groups = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ClassicLinkInstance) SetInstanceId(v string) *ClassicLinkInstance { - s.InstanceId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *ClassicLinkInstance) SetTags(v []*Tag) *ClassicLinkInstance { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *ClassicLinkInstance) SetVpcId(v string) *ClassicLinkInstance { - s.VpcId = &v - return s -} - -// Describes a Classic Load Balancer. -type ClassicLoadBalancer struct { - _ struct{} `type:"structure"` - - // The name of the load balancer. - Name *string `locationName:"name" type:"string"` -} - -// String returns the string representation -func (s ClassicLoadBalancer) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClassicLoadBalancer) GoString() string { - return s.String() -} - -// SetName sets the Name field's value. -func (s *ClassicLoadBalancer) SetName(v string) *ClassicLoadBalancer { - s.Name = &v - return s -} - -// Describes the Classic Load Balancers to attach to a Spot Fleet. Spot Fleet -// registers the running Spot Instances with these Classic Load Balancers. -type ClassicLoadBalancersConfig struct { - _ struct{} `type:"structure"` - - // One or more Classic Load Balancers. - ClassicLoadBalancers []*ClassicLoadBalancer `locationName:"classicLoadBalancers" locationNameList:"item" min:"1" type:"list"` -} - -// String returns the string representation -func (s ClassicLoadBalancersConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClassicLoadBalancersConfig) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ClassicLoadBalancersConfig) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ClassicLoadBalancersConfig"} - if s.ClassicLoadBalancers != nil && len(s.ClassicLoadBalancers) < 1 { - invalidParams.Add(request.NewErrParamMinLen("ClassicLoadBalancers", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClassicLoadBalancers sets the ClassicLoadBalancers field's value. -func (s *ClassicLoadBalancersConfig) SetClassicLoadBalancers(v []*ClassicLoadBalancer) *ClassicLoadBalancersConfig { - s.ClassicLoadBalancers = v - return s -} - -// Describes the state of a client certificate revocation list. -type ClientCertificateRevocationListStatus struct { - _ struct{} `type:"structure"` - - // The state of the client certificate revocation list. - Code *string `locationName:"code" type:"string" enum:"ClientCertificateRevocationListStatusCode"` - - // A message about the status of the client certificate revocation list, if - // applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s ClientCertificateRevocationListStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientCertificateRevocationListStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *ClientCertificateRevocationListStatus) SetCode(v string) *ClientCertificateRevocationListStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *ClientCertificateRevocationListStatus) SetMessage(v string) *ClientCertificateRevocationListStatus { - s.Message = &v - return s -} - -// Describes the client-specific data. -type ClientData struct { - _ struct{} `type:"structure"` - - // A user-defined comment about the disk upload. - Comment *string `type:"string"` - - // The time that the disk upload ends. - UploadEnd *time.Time `type:"timestamp"` - - // The size of the uploaded disk image, in GiB. - UploadSize *float64 `type:"double"` - - // The time that the disk upload starts. - UploadStart *time.Time `type:"timestamp"` -} - -// String returns the string representation -func (s ClientData) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientData) GoString() string { - return s.String() -} - -// SetComment sets the Comment field's value. -func (s *ClientData) SetComment(v string) *ClientData { - s.Comment = &v - return s -} - -// SetUploadEnd sets the UploadEnd field's value. -func (s *ClientData) SetUploadEnd(v time.Time) *ClientData { - s.UploadEnd = &v - return s -} - -// SetUploadSize sets the UploadSize field's value. -func (s *ClientData) SetUploadSize(v float64) *ClientData { - s.UploadSize = &v - return s -} - -// SetUploadStart sets the UploadStart field's value. -func (s *ClientData) SetUploadStart(v time.Time) *ClientData { - s.UploadStart = &v - return s -} - -// Describes the authentication methods used by a Client VPN endpoint. Client -// VPN supports Active Directory and mutual authentication. For more information, -// see Authentication (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication) -// in the AWS Client VPN Administrator Guide. -type ClientVpnAuthentication struct { - _ struct{} `type:"structure"` - - // Information about the Active Directory, if applicable. - ActiveDirectory *DirectoryServiceAuthentication `locationName:"activeDirectory" type:"structure"` - - // Information about the authentication certificates, if applicable. - MutualAuthentication *CertificateAuthentication `locationName:"mutualAuthentication" type:"structure"` - - // The authentication type used. - Type *string `locationName:"type" type:"string" enum:"ClientVpnAuthenticationType"` -} - -// String returns the string representation -func (s ClientVpnAuthentication) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnAuthentication) GoString() string { - return s.String() -} - -// SetActiveDirectory sets the ActiveDirectory field's value. -func (s *ClientVpnAuthentication) SetActiveDirectory(v *DirectoryServiceAuthentication) *ClientVpnAuthentication { - s.ActiveDirectory = v - return s -} - -// SetMutualAuthentication sets the MutualAuthentication field's value. -func (s *ClientVpnAuthentication) SetMutualAuthentication(v *CertificateAuthentication) *ClientVpnAuthentication { - s.MutualAuthentication = v - return s -} - -// SetType sets the Type field's value. -func (s *ClientVpnAuthentication) SetType(v string) *ClientVpnAuthentication { - s.Type = &v - return s -} - -// Describes the authentication method to be used by a Client VPN endpoint. -// Client VPN supports Active Directory and mutual authentication. For more -// information, see Authentication (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication) -// in the AWS Client VPN Administrator Guide. -type ClientVpnAuthenticationRequest struct { - _ struct{} `type:"structure"` - - // Information about the Active Directory to be used, if applicable. You must - // provide this information if Type is directory-service-authentication. - ActiveDirectory *DirectoryServiceAuthenticationRequest `type:"structure"` - - // Information about the authentication certificates to be used, if applicable. - // You must provide this information if Type is certificate-authentication. - MutualAuthentication *CertificateAuthenticationRequest `type:"structure"` - - // The type of client authentication to be used. Specify certificate-authentication - // to use certificate-based authentication, or directory-service-authentication - // to use Active Directory authentication. - Type *string `type:"string" enum:"ClientVpnAuthenticationType"` -} - -// String returns the string representation -func (s ClientVpnAuthenticationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnAuthenticationRequest) GoString() string { - return s.String() -} - -// SetActiveDirectory sets the ActiveDirectory field's value. -func (s *ClientVpnAuthenticationRequest) SetActiveDirectory(v *DirectoryServiceAuthenticationRequest) *ClientVpnAuthenticationRequest { - s.ActiveDirectory = v - return s -} - -// SetMutualAuthentication sets the MutualAuthentication field's value. -func (s *ClientVpnAuthenticationRequest) SetMutualAuthentication(v *CertificateAuthenticationRequest) *ClientVpnAuthenticationRequest { - s.MutualAuthentication = v - return s -} - -// SetType sets the Type field's value. -func (s *ClientVpnAuthenticationRequest) SetType(v string) *ClientVpnAuthenticationRequest { - s.Type = &v - return s -} - -// Describes the state of an authorization rule. -type ClientVpnAuthorizationRuleStatus struct { - _ struct{} `type:"structure"` - - // The state of the authorization rule. - Code *string `locationName:"code" type:"string" enum:"ClientVpnAuthorizationRuleStatusCode"` - - // A message about the status of the authorization rule, if applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s ClientVpnAuthorizationRuleStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnAuthorizationRuleStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *ClientVpnAuthorizationRuleStatus) SetCode(v string) *ClientVpnAuthorizationRuleStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *ClientVpnAuthorizationRuleStatus) SetMessage(v string) *ClientVpnAuthorizationRuleStatus { - s.Message = &v - return s -} - -// Describes a client connection. -type ClientVpnConnection struct { - _ struct{} `type:"structure"` - - // The IP address of the client. - ClientIp *string `locationName:"clientIp" type:"string"` - - // The ID of the Client VPN endpoint to which the client is connected. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // The common name associated with the client. This is either the name of the - // client certificate, or the Active Directory user name. - CommonName *string `locationName:"commonName" type:"string"` - - // The date and time the client connection was terminated. - ConnectionEndTime *string `locationName:"connectionEndTime" type:"string"` - - // The date and time the client connection was established. - ConnectionEstablishedTime *string `locationName:"connectionEstablishedTime" type:"string"` - - // The ID of the client connection. - ConnectionId *string `locationName:"connectionId" type:"string"` - - // The number of bytes received by the client. - EgressBytes *string `locationName:"egressBytes" type:"string"` - - // The number of packets received by the client. - EgressPackets *string `locationName:"egressPackets" type:"string"` - - // The number of bytes sent by the client. - IngressBytes *string `locationName:"ingressBytes" type:"string"` - - // The number of packets sent by the client. - IngressPackets *string `locationName:"ingressPackets" type:"string"` - - // The current state of the client connection. - Status *ClientVpnConnectionStatus `locationName:"status" type:"structure"` - - // The current date and time. - Timestamp *string `locationName:"timestamp" type:"string"` - - // The username of the client who established the client connection. This information - // is only provided if Active Directory client authentication is used. - Username *string `locationName:"username" type:"string"` -} - -// String returns the string representation -func (s ClientVpnConnection) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnConnection) GoString() string { - return s.String() -} - -// SetClientIp sets the ClientIp field's value. -func (s *ClientVpnConnection) SetClientIp(v string) *ClientVpnConnection { - s.ClientIp = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ClientVpnConnection) SetClientVpnEndpointId(v string) *ClientVpnConnection { - s.ClientVpnEndpointId = &v - return s -} - -// SetCommonName sets the CommonName field's value. -func (s *ClientVpnConnection) SetCommonName(v string) *ClientVpnConnection { - s.CommonName = &v - return s -} - -// SetConnectionEndTime sets the ConnectionEndTime field's value. -func (s *ClientVpnConnection) SetConnectionEndTime(v string) *ClientVpnConnection { - s.ConnectionEndTime = &v - return s -} - -// SetConnectionEstablishedTime sets the ConnectionEstablishedTime field's value. -func (s *ClientVpnConnection) SetConnectionEstablishedTime(v string) *ClientVpnConnection { - s.ConnectionEstablishedTime = &v - return s -} - -// SetConnectionId sets the ConnectionId field's value. -func (s *ClientVpnConnection) SetConnectionId(v string) *ClientVpnConnection { - s.ConnectionId = &v - return s -} - -// SetEgressBytes sets the EgressBytes field's value. -func (s *ClientVpnConnection) SetEgressBytes(v string) *ClientVpnConnection { - s.EgressBytes = &v - return s -} - -// SetEgressPackets sets the EgressPackets field's value. -func (s *ClientVpnConnection) SetEgressPackets(v string) *ClientVpnConnection { - s.EgressPackets = &v - return s -} - -// SetIngressBytes sets the IngressBytes field's value. -func (s *ClientVpnConnection) SetIngressBytes(v string) *ClientVpnConnection { - s.IngressBytes = &v - return s -} - -// SetIngressPackets sets the IngressPackets field's value. -func (s *ClientVpnConnection) SetIngressPackets(v string) *ClientVpnConnection { - s.IngressPackets = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ClientVpnConnection) SetStatus(v *ClientVpnConnectionStatus) *ClientVpnConnection { - s.Status = v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *ClientVpnConnection) SetTimestamp(v string) *ClientVpnConnection { - s.Timestamp = &v - return s -} - -// SetUsername sets the Username field's value. -func (s *ClientVpnConnection) SetUsername(v string) *ClientVpnConnection { - s.Username = &v - return s -} - -// Describes the status of a client connection. -type ClientVpnConnectionStatus struct { - _ struct{} `type:"structure"` - - // The state of the client connection. - Code *string `locationName:"code" type:"string" enum:"ClientVpnConnectionStatusCode"` - - // A message about the status of the client connection, if applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s ClientVpnConnectionStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnConnectionStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *ClientVpnConnectionStatus) SetCode(v string) *ClientVpnConnectionStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *ClientVpnConnectionStatus) SetMessage(v string) *ClientVpnConnectionStatus { - s.Message = &v - return s -} - -// Describes a Client VPN endpoint. -type ClientVpnEndpoint struct { - _ struct{} `type:"structure"` - - // Information about the associated target networks. A target network is a subnet - // in a VPC. - // - // Deprecated: This property is deprecated. To view the target networks associated with a Client VPN endpoint, call DescribeClientVpnTargetNetworks and inspect the clientVpnTargetNetworks response element. - AssociatedTargetNetworks []*AssociatedTargetNetwork `locationName:"associatedTargetNetwork" locationNameList:"item" deprecated:"true" type:"list"` - - // Information about the authentication method used by the Client VPN endpoint. - AuthenticationOptions []*ClientVpnAuthentication `locationName:"authenticationOptions" locationNameList:"item" type:"list"` - - // The IPv4 address range, in CIDR notation, from which client IP addresses - // are assigned. - ClientCidrBlock *string `locationName:"clientCidrBlock" type:"string"` - - // The ID of the Client VPN endpoint. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // Information about the client connection logging options for the Client VPN - // endpoint. - ConnectionLogOptions *ConnectionLogResponseOptions `locationName:"connectionLogOptions" type:"structure"` - - // The date and time the Client VPN endpoint was created. - CreationTime *string `locationName:"creationTime" type:"string"` - - // The date and time the Client VPN endpoint was deleted, if applicable. - DeletionTime *string `locationName:"deletionTime" type:"string"` - - // A brief description of the endpoint. - Description *string `locationName:"description" type:"string"` - - // The DNS name to be used by clients when connecting to the Client VPN endpoint. - DnsName *string `locationName:"dnsName" type:"string"` - - // Information about the DNS servers to be used for DNS resolution. - DnsServers []*string `locationName:"dnsServer" locationNameList:"item" type:"list"` - - // The ARN of the server certificate. - ServerCertificateArn *string `locationName:"serverCertificateArn" type:"string"` - - // Indicates whether split-tunnel is enabled in the AWS Client VPN endpoint. - // - // For information about split-tunnel VPN endpoints, see Split-Tunnel AWS Client - // VPN Endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html) - // in the AWS Client VPN Administrator Guide. - SplitTunnel *bool `locationName:"splitTunnel" type:"boolean"` - - // The current state of the Client VPN endpoint. - Status *ClientVpnEndpointStatus `locationName:"status" type:"structure"` - - // Any tags assigned to the Client VPN endpoint. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The transport protocol used by the Client VPN endpoint. - TransportProtocol *string `locationName:"transportProtocol" type:"string" enum:"TransportProtocol"` - - // The protocol used by the VPN session. - VpnProtocol *string `locationName:"vpnProtocol" type:"string" enum:"VpnProtocol"` -} - -// String returns the string representation -func (s ClientVpnEndpoint) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnEndpoint) GoString() string { - return s.String() -} - -// SetAssociatedTargetNetworks sets the AssociatedTargetNetworks field's value. -func (s *ClientVpnEndpoint) SetAssociatedTargetNetworks(v []*AssociatedTargetNetwork) *ClientVpnEndpoint { - s.AssociatedTargetNetworks = v - return s -} - -// SetAuthenticationOptions sets the AuthenticationOptions field's value. -func (s *ClientVpnEndpoint) SetAuthenticationOptions(v []*ClientVpnAuthentication) *ClientVpnEndpoint { - s.AuthenticationOptions = v - return s -} - -// SetClientCidrBlock sets the ClientCidrBlock field's value. -func (s *ClientVpnEndpoint) SetClientCidrBlock(v string) *ClientVpnEndpoint { - s.ClientCidrBlock = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ClientVpnEndpoint) SetClientVpnEndpointId(v string) *ClientVpnEndpoint { - s.ClientVpnEndpointId = &v - return s -} - -// SetConnectionLogOptions sets the ConnectionLogOptions field's value. -func (s *ClientVpnEndpoint) SetConnectionLogOptions(v *ConnectionLogResponseOptions) *ClientVpnEndpoint { - s.ConnectionLogOptions = v - return s -} - -// SetCreationTime sets the CreationTime field's value. -func (s *ClientVpnEndpoint) SetCreationTime(v string) *ClientVpnEndpoint { - s.CreationTime = &v - return s -} - -// SetDeletionTime sets the DeletionTime field's value. -func (s *ClientVpnEndpoint) SetDeletionTime(v string) *ClientVpnEndpoint { - s.DeletionTime = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ClientVpnEndpoint) SetDescription(v string) *ClientVpnEndpoint { - s.Description = &v - return s -} - -// SetDnsName sets the DnsName field's value. -func (s *ClientVpnEndpoint) SetDnsName(v string) *ClientVpnEndpoint { - s.DnsName = &v - return s -} - -// SetDnsServers sets the DnsServers field's value. -func (s *ClientVpnEndpoint) SetDnsServers(v []*string) *ClientVpnEndpoint { - s.DnsServers = v - return s -} - -// SetServerCertificateArn sets the ServerCertificateArn field's value. -func (s *ClientVpnEndpoint) SetServerCertificateArn(v string) *ClientVpnEndpoint { - s.ServerCertificateArn = &v - return s -} - -// SetSplitTunnel sets the SplitTunnel field's value. -func (s *ClientVpnEndpoint) SetSplitTunnel(v bool) *ClientVpnEndpoint { - s.SplitTunnel = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ClientVpnEndpoint) SetStatus(v *ClientVpnEndpointStatus) *ClientVpnEndpoint { - s.Status = v - return s -} - -// SetTags sets the Tags field's value. -func (s *ClientVpnEndpoint) SetTags(v []*Tag) *ClientVpnEndpoint { - s.Tags = v - return s -} - -// SetTransportProtocol sets the TransportProtocol field's value. -func (s *ClientVpnEndpoint) SetTransportProtocol(v string) *ClientVpnEndpoint { - s.TransportProtocol = &v - return s -} - -// SetVpnProtocol sets the VpnProtocol field's value. -func (s *ClientVpnEndpoint) SetVpnProtocol(v string) *ClientVpnEndpoint { - s.VpnProtocol = &v - return s -} - -// Describes the state of a Client VPN endpoint. -type ClientVpnEndpointStatus struct { - _ struct{} `type:"structure"` - - // The state of the Client VPN endpoint. Possible states include: - // - // * pending-associate - The Client VPN endpoint has been created but no - // target networks have been associated. The Client VPN endpoint cannot accept - // connections. - // - // * available - The Client VPN endpoint has been created and a target network - // has been associated. The Client VPN endpoint can accept connections. - // - // * deleting - The Client VPN endpoint is being deleted. The Client VPN - // endpoint cannot accept connections. - // - // * deleted - The Client VPN endpoint has been deleted. The Client VPN endpoint - // cannot accept connections. - Code *string `locationName:"code" type:"string" enum:"ClientVpnEndpointStatusCode"` - - // A message about the status of the Client VPN endpoint. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s ClientVpnEndpointStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnEndpointStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *ClientVpnEndpointStatus) SetCode(v string) *ClientVpnEndpointStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *ClientVpnEndpointStatus) SetMessage(v string) *ClientVpnEndpointStatus { - s.Message = &v - return s -} - -// Information about a Client VPN endpoint route. -type ClientVpnRoute struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint with which the route is associated. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // A brief description of the route. - Description *string `locationName:"description" type:"string"` - - // The IPv4 address range, in CIDR notation, of the route destination. - DestinationCidr *string `locationName:"destinationCidr" type:"string"` - - // Indicates how the route was associated with the Client VPN endpoint. associate - // indicates that the route was automatically added when the target network - // was associated with the Client VPN endpoint. add-route indicates that the - // route was manually added using the CreateClientVpnRoute action. - Origin *string `locationName:"origin" type:"string"` - - // The current state of the route. - Status *ClientVpnRouteStatus `locationName:"status" type:"structure"` - - // The ID of the subnet through which traffic is routed. - TargetSubnet *string `locationName:"targetSubnet" type:"string"` - - // The route type. - Type *string `locationName:"type" type:"string"` -} - -// String returns the string representation -func (s ClientVpnRoute) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnRoute) GoString() string { - return s.String() -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ClientVpnRoute) SetClientVpnEndpointId(v string) *ClientVpnRoute { - s.ClientVpnEndpointId = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ClientVpnRoute) SetDescription(v string) *ClientVpnRoute { - s.Description = &v - return s -} - -// SetDestinationCidr sets the DestinationCidr field's value. -func (s *ClientVpnRoute) SetDestinationCidr(v string) *ClientVpnRoute { - s.DestinationCidr = &v - return s -} - -// SetOrigin sets the Origin field's value. -func (s *ClientVpnRoute) SetOrigin(v string) *ClientVpnRoute { - s.Origin = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ClientVpnRoute) SetStatus(v *ClientVpnRouteStatus) *ClientVpnRoute { - s.Status = v - return s -} - -// SetTargetSubnet sets the TargetSubnet field's value. -func (s *ClientVpnRoute) SetTargetSubnet(v string) *ClientVpnRoute { - s.TargetSubnet = &v - return s -} - -// SetType sets the Type field's value. -func (s *ClientVpnRoute) SetType(v string) *ClientVpnRoute { - s.Type = &v - return s -} - -// Describes the state of a Client VPN endpoint route. -type ClientVpnRouteStatus struct { - _ struct{} `type:"structure"` - - // The state of the Client VPN endpoint route. - Code *string `locationName:"code" type:"string" enum:"ClientVpnRouteStatusCode"` - - // A message about the status of the Client VPN endpoint route, if applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s ClientVpnRouteStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ClientVpnRouteStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *ClientVpnRouteStatus) SetCode(v string) *ClientVpnRouteStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *ClientVpnRouteStatus) SetMessage(v string) *ClientVpnRouteStatus { - s.Message = &v - return s -} - -type ConfirmProductInstanceInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // The product code. This must be a product code that you own. - // - // ProductCode is a required field - ProductCode *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ConfirmProductInstanceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ConfirmProductInstanceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ConfirmProductInstanceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ConfirmProductInstanceInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.ProductCode == nil { - invalidParams.Add(request.NewErrParamRequired("ProductCode")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ConfirmProductInstanceInput) SetDryRun(v bool) *ConfirmProductInstanceInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ConfirmProductInstanceInput) SetInstanceId(v string) *ConfirmProductInstanceInput { - s.InstanceId = &v - return s -} - -// SetProductCode sets the ProductCode field's value. -func (s *ConfirmProductInstanceInput) SetProductCode(v string) *ConfirmProductInstanceInput { - s.ProductCode = &v - return s -} - -type ConfirmProductInstanceOutput struct { - _ struct{} `type:"structure"` - - // The AWS account ID of the instance owner. This is only present if the product - // code is attached to the instance. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The return value of the request. Returns true if the specified product code - // is owned by the requester and associated with the specified instance. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ConfirmProductInstanceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ConfirmProductInstanceOutput) GoString() string { - return s.String() -} - -// SetOwnerId sets the OwnerId field's value. -func (s *ConfirmProductInstanceOutput) SetOwnerId(v string) *ConfirmProductInstanceOutput { - s.OwnerId = &v - return s -} - -// SetReturn sets the Return field's value. -func (s *ConfirmProductInstanceOutput) SetReturn(v bool) *ConfirmProductInstanceOutput { - s.Return = &v - return s -} - -// Describes the client connection logging options for the Client VPN endpoint. -type ConnectionLogOptions struct { - _ struct{} `type:"structure"` - - // The name of the CloudWatch Logs log group. - CloudwatchLogGroup *string `type:"string"` - - // The name of the CloudWatch Logs log stream to which the connection data is - // published. - CloudwatchLogStream *string `type:"string"` - - // Indicates whether connection logging is enabled. - Enabled *bool `type:"boolean"` -} - -// String returns the string representation -func (s ConnectionLogOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ConnectionLogOptions) GoString() string { - return s.String() -} - -// SetCloudwatchLogGroup sets the CloudwatchLogGroup field's value. -func (s *ConnectionLogOptions) SetCloudwatchLogGroup(v string) *ConnectionLogOptions { - s.CloudwatchLogGroup = &v - return s -} - -// SetCloudwatchLogStream sets the CloudwatchLogStream field's value. -func (s *ConnectionLogOptions) SetCloudwatchLogStream(v string) *ConnectionLogOptions { - s.CloudwatchLogStream = &v - return s -} - -// SetEnabled sets the Enabled field's value. -func (s *ConnectionLogOptions) SetEnabled(v bool) *ConnectionLogOptions { - s.Enabled = &v - return s -} - -// Information about the client connection logging options for a Client VPN -// endpoint. -type ConnectionLogResponseOptions struct { - _ struct{} `type:"structure"` - - // The name of the Amazon CloudWatch Logs log group to which connection logging - // data is published. - CloudwatchLogGroup *string `type:"string"` - - // The name of the Amazon CloudWatch Logs log stream to which connection logging - // data is published. - CloudwatchLogStream *string `type:"string"` - - // Indicates whether client connection logging is enabled for the Client VPN - // endpoint. - Enabled *bool `type:"boolean"` -} - -// String returns the string representation -func (s ConnectionLogResponseOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ConnectionLogResponseOptions) GoString() string { - return s.String() -} - -// SetCloudwatchLogGroup sets the CloudwatchLogGroup field's value. -func (s *ConnectionLogResponseOptions) SetCloudwatchLogGroup(v string) *ConnectionLogResponseOptions { - s.CloudwatchLogGroup = &v - return s -} - -// SetCloudwatchLogStream sets the CloudwatchLogStream field's value. -func (s *ConnectionLogResponseOptions) SetCloudwatchLogStream(v string) *ConnectionLogResponseOptions { - s.CloudwatchLogStream = &v - return s -} - -// SetEnabled sets the Enabled field's value. -func (s *ConnectionLogResponseOptions) SetEnabled(v bool) *ConnectionLogResponseOptions { - s.Enabled = &v - return s -} - -// Describes a connection notification for a VPC endpoint or VPC endpoint service. -type ConnectionNotification struct { - _ struct{} `type:"structure"` - - // The events for the notification. Valid values are Accept, Connect, Delete, - // and Reject. - ConnectionEvents []*string `locationName:"connectionEvents" locationNameList:"item" type:"list"` - - // The ARN of the SNS topic for the notification. - ConnectionNotificationArn *string `locationName:"connectionNotificationArn" type:"string"` - - // The ID of the notification. - ConnectionNotificationId *string `locationName:"connectionNotificationId" type:"string"` - - // The state of the notification. - ConnectionNotificationState *string `locationName:"connectionNotificationState" type:"string" enum:"ConnectionNotificationState"` - - // The type of notification. - ConnectionNotificationType *string `locationName:"connectionNotificationType" type:"string" enum:"ConnectionNotificationType"` - - // The ID of the endpoint service. - ServiceId *string `locationName:"serviceId" type:"string"` - - // The ID of the VPC endpoint. - VpcEndpointId *string `locationName:"vpcEndpointId" type:"string"` -} - -// String returns the string representation -func (s ConnectionNotification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ConnectionNotification) GoString() string { - return s.String() -} - -// SetConnectionEvents sets the ConnectionEvents field's value. -func (s *ConnectionNotification) SetConnectionEvents(v []*string) *ConnectionNotification { - s.ConnectionEvents = v - return s -} - -// SetConnectionNotificationArn sets the ConnectionNotificationArn field's value. -func (s *ConnectionNotification) SetConnectionNotificationArn(v string) *ConnectionNotification { - s.ConnectionNotificationArn = &v - return s -} - -// SetConnectionNotificationId sets the ConnectionNotificationId field's value. -func (s *ConnectionNotification) SetConnectionNotificationId(v string) *ConnectionNotification { - s.ConnectionNotificationId = &v - return s -} - -// SetConnectionNotificationState sets the ConnectionNotificationState field's value. -func (s *ConnectionNotification) SetConnectionNotificationState(v string) *ConnectionNotification { - s.ConnectionNotificationState = &v - return s -} - -// SetConnectionNotificationType sets the ConnectionNotificationType field's value. -func (s *ConnectionNotification) SetConnectionNotificationType(v string) *ConnectionNotification { - s.ConnectionNotificationType = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *ConnectionNotification) SetServiceId(v string) *ConnectionNotification { - s.ServiceId = &v - return s -} - -// SetVpcEndpointId sets the VpcEndpointId field's value. -func (s *ConnectionNotification) SetVpcEndpointId(v string) *ConnectionNotification { - s.VpcEndpointId = &v - return s -} - -// Describes a conversion task. -type ConversionTask struct { - _ struct{} `type:"structure"` - - // The ID of the conversion task. - ConversionTaskId *string `locationName:"conversionTaskId" type:"string"` - - // The time when the task expires. If the upload isn't complete before the expiration - // time, we automatically cancel the task. - ExpirationTime *string `locationName:"expirationTime" type:"string"` - - // If the task is for importing an instance, this contains information about - // the import instance task. - ImportInstance *ImportInstanceTaskDetails `locationName:"importInstance" type:"structure"` - - // If the task is for importing a volume, this contains information about the - // import volume task. - ImportVolume *ImportVolumeTaskDetails `locationName:"importVolume" type:"structure"` - - // The state of the conversion task. - State *string `locationName:"state" type:"string" enum:"ConversionTaskState"` - - // The status message related to the conversion task. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // Any tags assigned to the task. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ConversionTask) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ConversionTask) GoString() string { - return s.String() -} - -// SetConversionTaskId sets the ConversionTaskId field's value. -func (s *ConversionTask) SetConversionTaskId(v string) *ConversionTask { - s.ConversionTaskId = &v - return s -} - -// SetExpirationTime sets the ExpirationTime field's value. -func (s *ConversionTask) SetExpirationTime(v string) *ConversionTask { - s.ExpirationTime = &v - return s -} - -// SetImportInstance sets the ImportInstance field's value. -func (s *ConversionTask) SetImportInstance(v *ImportInstanceTaskDetails) *ConversionTask { - s.ImportInstance = v - return s -} - -// SetImportVolume sets the ImportVolume field's value. -func (s *ConversionTask) SetImportVolume(v *ImportVolumeTaskDetails) *ConversionTask { - s.ImportVolume = v - return s -} - -// SetState sets the State field's value. -func (s *ConversionTask) SetState(v string) *ConversionTask { - s.State = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ConversionTask) SetStatusMessage(v string) *ConversionTask { - s.StatusMessage = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *ConversionTask) SetTags(v []*Tag) *ConversionTask { - s.Tags = v - return s -} - -type CopyFpgaImageInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // The description for the new AFI. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The name for the new AFI. The default is the name of the source AFI. - Name *string `type:"string"` - - // The ID of the source AFI. - // - // SourceFpgaImageId is a required field - SourceFpgaImageId *string `type:"string" required:"true"` - - // The Region that contains the source AFI. - // - // SourceRegion is a required field - SourceRegion *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CopyFpgaImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CopyFpgaImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CopyFpgaImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CopyFpgaImageInput"} - if s.SourceFpgaImageId == nil { - invalidParams.Add(request.NewErrParamRequired("SourceFpgaImageId")) - } - if s.SourceRegion == nil { - invalidParams.Add(request.NewErrParamRequired("SourceRegion")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CopyFpgaImageInput) SetClientToken(v string) *CopyFpgaImageInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CopyFpgaImageInput) SetDescription(v string) *CopyFpgaImageInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CopyFpgaImageInput) SetDryRun(v bool) *CopyFpgaImageInput { - s.DryRun = &v - return s -} - -// SetName sets the Name field's value. -func (s *CopyFpgaImageInput) SetName(v string) *CopyFpgaImageInput { - s.Name = &v - return s -} - -// SetSourceFpgaImageId sets the SourceFpgaImageId field's value. -func (s *CopyFpgaImageInput) SetSourceFpgaImageId(v string) *CopyFpgaImageInput { - s.SourceFpgaImageId = &v - return s -} - -// SetSourceRegion sets the SourceRegion field's value. -func (s *CopyFpgaImageInput) SetSourceRegion(v string) *CopyFpgaImageInput { - s.SourceRegion = &v - return s -} - -type CopyFpgaImageOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new AFI. - FpgaImageId *string `locationName:"fpgaImageId" type:"string"` -} - -// String returns the string representation -func (s CopyFpgaImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CopyFpgaImageOutput) GoString() string { - return s.String() -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *CopyFpgaImageOutput) SetFpgaImageId(v string) *CopyFpgaImageOutput { - s.FpgaImageId = &v - return s -} - -// Contains the parameters for CopyImage. -type CopyImageInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure idempotency of the - // request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon Elastic Compute Cloud User Guide. - ClientToken *string `type:"string"` - - // A description for the new AMI in the destination Region. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Specifies whether the destination snapshots of the copied image should be - // encrypted. You can encrypt a copy of an unencrypted snapshot, but you cannot - // create an unencrypted copy of an encrypted snapshot. The default CMK for - // EBS is used unless you specify a non-default AWS Key Management Service (AWS - // KMS) CMK using KmsKeyId. For more information, see Amazon EBS Encryption - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) - // in the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // An identifier for the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use when creating the encrypted volume. This parameter is only - // required if you want to use a non-default CMK; if this parameter is not specified, - // the default CMK for EBS is used. If a KmsKeyId is specified, the Encrypted - // flag must also be set. - // - // To specify a CMK, use its key ID, Amazon Resource Name (ARN), alias name, - // or alias ARN. When using an alias name, prefix it with "alias/". For example: - // - // * Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab - // - // * Key ARN: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab - // - // * Alias name: alias/ExampleAlias - // - // * Alias ARN: arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias - // - // AWS parses KmsKeyId asynchronously, meaning that the action you call may - // appear to complete even though you provided an invalid identifier. This action - // will eventually report failure. - // - // The specified CMK must exist in the Region that the snapshot is being copied - // to. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // The name of the new AMI in the destination Region. - // - // Name is a required field - Name *string `type:"string" required:"true"` - - // The ID of the AMI to copy. - // - // SourceImageId is a required field - SourceImageId *string `type:"string" required:"true"` - - // The name of the Region that contains the AMI to copy. - // - // SourceRegion is a required field - SourceRegion *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CopyImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CopyImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CopyImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CopyImageInput"} - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) - } - if s.SourceImageId == nil { - invalidParams.Add(request.NewErrParamRequired("SourceImageId")) - } - if s.SourceRegion == nil { - invalidParams.Add(request.NewErrParamRequired("SourceRegion")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CopyImageInput) SetClientToken(v string) *CopyImageInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CopyImageInput) SetDescription(v string) *CopyImageInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CopyImageInput) SetDryRun(v bool) *CopyImageInput { - s.DryRun = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *CopyImageInput) SetEncrypted(v bool) *CopyImageInput { - s.Encrypted = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *CopyImageInput) SetKmsKeyId(v string) *CopyImageInput { - s.KmsKeyId = &v - return s -} - -// SetName sets the Name field's value. -func (s *CopyImageInput) SetName(v string) *CopyImageInput { - s.Name = &v - return s -} - -// SetSourceImageId sets the SourceImageId field's value. -func (s *CopyImageInput) SetSourceImageId(v string) *CopyImageInput { - s.SourceImageId = &v - return s -} - -// SetSourceRegion sets the SourceRegion field's value. -func (s *CopyImageInput) SetSourceRegion(v string) *CopyImageInput { - s.SourceRegion = &v - return s -} - -// Contains the output of CopyImage. -type CopyImageOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new AMI. - ImageId *string `locationName:"imageId" type:"string"` -} - -// String returns the string representation -func (s CopyImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CopyImageOutput) GoString() string { - return s.String() -} - -// SetImageId sets the ImageId field's value. -func (s *CopyImageOutput) SetImageId(v string) *CopyImageOutput { - s.ImageId = &v - return s -} - -type CopySnapshotInput struct { - _ struct{} `type:"structure"` - - // A description for the EBS snapshot. - Description *string `type:"string"` - - // The destination Region to use in the PresignedUrl parameter of a snapshot - // copy operation. This parameter is only valid for specifying the destination - // Region in a PresignedUrl parameter, where it is required. - // - // The snapshot copy is sent to the regional endpoint that you sent the HTTP - // request to (for example, ec2.us-east-1.amazonaws.com). With the AWS CLI, - // this is specified using the --region parameter or the default Region in your - // AWS configuration file. - DestinationRegion *string `locationName:"destinationRegion" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // To encrypt a copy of an unencrypted snapshot if encryption by default is - // not enabled, enable encryption using this parameter. Otherwise, omit this - // parameter. Encrypted snapshots are encrypted, even if you omit this parameter - // and encryption by default is not enabled. You cannot set this parameter to - // false. For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) - // in the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The identifier of the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, - // your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted - // state must be true. - // - // You can specify the CMK using any of the following: - // - // * Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab. - // - // * Key alias. For example, alias/ExampleAlias. - // - // * Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // - // * Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, - // alias, or ARN that is not valid, the action can appear to complete, but eventually - // fails. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // When you copy an encrypted source snapshot using the Amazon EC2 Query API, - // you must supply a pre-signed URL. This parameter is optional for unencrypted - // snapshots. For more information, see Query Requests (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html). - // - // The PresignedUrl should use the snapshot source endpoint, the CopySnapshot - // action, and include the SourceRegion, SourceSnapshotId, and DestinationRegion - // parameters. The PresignedUrl must be signed using AWS Signature Version 4. - // Because EBS snapshots are stored in Amazon S3, the signing algorithm for - // this parameter uses the same logic that is described in Authenticating Requests - // by Using Query Parameters (AWS Signature Version 4) (https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html) - // in the Amazon Simple Storage Service API Reference. An invalid or improperly - // signed PresignedUrl will cause the copy operation to fail asynchronously, - // and the snapshot will move to an error state. - PresignedUrl *string `locationName:"presignedUrl" type:"string"` - - // The ID of the Region that contains the snapshot to be copied. - // - // SourceRegion is a required field - SourceRegion *string `type:"string" required:"true"` - - // The ID of the EBS snapshot to copy. - // - // SourceSnapshotId is a required field - SourceSnapshotId *string `type:"string" required:"true"` - - // The tags to apply to the new snapshot. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CopySnapshotInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CopySnapshotInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CopySnapshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CopySnapshotInput"} - if s.SourceRegion == nil { - invalidParams.Add(request.NewErrParamRequired("SourceRegion")) - } - if s.SourceSnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SourceSnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CopySnapshotInput) SetDescription(v string) *CopySnapshotInput { - s.Description = &v - return s -} - -// SetDestinationRegion sets the DestinationRegion field's value. -func (s *CopySnapshotInput) SetDestinationRegion(v string) *CopySnapshotInput { - s.DestinationRegion = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CopySnapshotInput) SetDryRun(v bool) *CopySnapshotInput { - s.DryRun = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *CopySnapshotInput) SetEncrypted(v bool) *CopySnapshotInput { - s.Encrypted = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *CopySnapshotInput) SetKmsKeyId(v string) *CopySnapshotInput { - s.KmsKeyId = &v - return s -} - -// SetPresignedUrl sets the PresignedUrl field's value. -func (s *CopySnapshotInput) SetPresignedUrl(v string) *CopySnapshotInput { - s.PresignedUrl = &v - return s -} - -// SetSourceRegion sets the SourceRegion field's value. -func (s *CopySnapshotInput) SetSourceRegion(v string) *CopySnapshotInput { - s.SourceRegion = &v - return s -} - -// SetSourceSnapshotId sets the SourceSnapshotId field's value. -func (s *CopySnapshotInput) SetSourceSnapshotId(v string) *CopySnapshotInput { - s.SourceSnapshotId = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CopySnapshotInput) SetTagSpecifications(v []*TagSpecification) *CopySnapshotInput { - s.TagSpecifications = v - return s -} - -type CopySnapshotOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // Any tags applied to the new snapshot. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CopySnapshotOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CopySnapshotOutput) GoString() string { - return s.String() -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *CopySnapshotOutput) SetSnapshotId(v string) *CopySnapshotOutput { - s.SnapshotId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *CopySnapshotOutput) SetTags(v []*Tag) *CopySnapshotOutput { - s.Tags = v - return s -} - -// The CPU options for the instance. -type CpuOptions struct { - _ struct{} `type:"structure"` - - // The number of CPU cores for the instance. - CoreCount *int64 `locationName:"coreCount" type:"integer"` - - // The number of threads per CPU core. - ThreadsPerCore *int64 `locationName:"threadsPerCore" type:"integer"` -} - -// String returns the string representation -func (s CpuOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CpuOptions) GoString() string { - return s.String() -} - -// SetCoreCount sets the CoreCount field's value. -func (s *CpuOptions) SetCoreCount(v int64) *CpuOptions { - s.CoreCount = &v - return s -} - -// SetThreadsPerCore sets the ThreadsPerCore field's value. -func (s *CpuOptions) SetThreadsPerCore(v int64) *CpuOptions { - s.ThreadsPerCore = &v - return s -} - -// The CPU options for the instance. Both the core count and threads per core -// must be specified in the request. -type CpuOptionsRequest struct { - _ struct{} `type:"structure"` - - // The number of CPU cores for the instance. - CoreCount *int64 `type:"integer"` - - // The number of threads per CPU core. To disable multithreading for the instance, - // specify a value of 1. Otherwise, specify the default value of 2. - ThreadsPerCore *int64 `type:"integer"` -} - -// String returns the string representation -func (s CpuOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CpuOptionsRequest) GoString() string { - return s.String() -} - -// SetCoreCount sets the CoreCount field's value. -func (s *CpuOptionsRequest) SetCoreCount(v int64) *CpuOptionsRequest { - s.CoreCount = &v - return s -} - -// SetThreadsPerCore sets the ThreadsPerCore field's value. -func (s *CpuOptionsRequest) SetThreadsPerCore(v int64) *CpuOptionsRequest { - s.ThreadsPerCore = &v - return s -} - -type CreateCapacityReservationInput struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which to create the Capacity Reservation. - AvailabilityZone *string `type:"string"` - - // The ID of the Availability Zone in which to create the Capacity Reservation. - AvailabilityZoneId *string `type:"string"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraint: Maximum 64 ASCII characters. - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Indicates whether the Capacity Reservation supports EBS-optimized instances. - // This optimization provides dedicated throughput to Amazon EBS and an optimized - // configuration stack to provide optimal I/O performance. This optimization - // isn't available with all instance types. Additional usage charges apply when - // using an EBS- optimized instance. - EbsOptimized *bool `type:"boolean"` - - // The date and time at which the Capacity Reservation expires. When a Capacity - // Reservation expires, the reserved capacity is released and you can no longer - // launch instances into it. The Capacity Reservation's state changes to expired - // when it reaches its end date and time. - // - // You must provide an EndDate value if EndDateType is limited. Omit EndDate - // if EndDateType is unlimited. - // - // If the EndDateType is limited, the Capacity Reservation is cancelled within - // an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, - // the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 - // on 5/31/2019. - EndDate *time.Time `type:"timestamp"` - - // Indicates the way in which the Capacity Reservation ends. A Capacity Reservation - // can have one of the following end types: - // - // * unlimited - The Capacity Reservation remains active until you explicitly - // cancel it. Do not provide an EndDate if the EndDateType is unlimited. - // - // * limited - The Capacity Reservation expires automatically at a specified - // date and time. You must provide an EndDate value if the EndDateType value - // is limited. - EndDateType *string `type:"string" enum:"EndDateType"` - - // Indicates whether the Capacity Reservation supports instances with temporary, - // block-level storage. - EphemeralStorage *bool `type:"boolean"` - - // The number of instances for which to reserve capacity. - // - // InstanceCount is a required field - InstanceCount *int64 `type:"integer" required:"true"` - - // Indicates the type of instance launches that the Capacity Reservation accepts. - // The options include: - // - // * open - The Capacity Reservation automatically matches all instances - // that have matching attributes (instance type, platform, and Availability - // Zone). Instances that have matching attributes run in the Capacity Reservation - // automatically without specifying any additional parameters. - // - // * targeted - The Capacity Reservation only accepts instances that have - // matching attributes (instance type, platform, and Availability Zone), - // and explicitly target the Capacity Reservation. This ensures that only - // permitted instances can use the reserved capacity. - // - // Default: open - InstanceMatchCriteria *string `type:"string" enum:"InstanceMatchCriteria"` - - // The type of operating system for which to reserve capacity. - // - // InstancePlatform is a required field - InstancePlatform *string `type:"string" required:"true" enum:"CapacityReservationInstancePlatform"` - - // The instance type for which to reserve capacity. For more information, see - // Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // InstanceType is a required field - InstanceType *string `type:"string" required:"true"` - - // The tags to apply to the Capacity Reservation during launch. - TagSpecifications []*TagSpecification `locationNameList:"item" type:"list"` - - // Indicates the tenancy of the Capacity Reservation. A Capacity Reservation - // can have one of the following tenancy settings: - // - // * default - The Capacity Reservation is created on hardware that is shared - // with other AWS accounts. - // - // * dedicated - The Capacity Reservation is created on single-tenant hardware - // that is dedicated to a single AWS account. - Tenancy *string `type:"string" enum:"CapacityReservationTenancy"` -} - -// String returns the string representation -func (s CreateCapacityReservationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCapacityReservationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateCapacityReservationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateCapacityReservationInput"} - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.InstancePlatform == nil { - invalidParams.Add(request.NewErrParamRequired("InstancePlatform")) - } - if s.InstanceType == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceType")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateCapacityReservationInput) SetAvailabilityZone(v string) *CreateCapacityReservationInput { - s.AvailabilityZone = &v - return s -} - -// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. -func (s *CreateCapacityReservationInput) SetAvailabilityZoneId(v string) *CreateCapacityReservationInput { - s.AvailabilityZoneId = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateCapacityReservationInput) SetClientToken(v string) *CreateCapacityReservationInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateCapacityReservationInput) SetDryRun(v bool) *CreateCapacityReservationInput { - s.DryRun = &v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *CreateCapacityReservationInput) SetEbsOptimized(v bool) *CreateCapacityReservationInput { - s.EbsOptimized = &v - return s -} - -// SetEndDate sets the EndDate field's value. -func (s *CreateCapacityReservationInput) SetEndDate(v time.Time) *CreateCapacityReservationInput { - s.EndDate = &v - return s -} - -// SetEndDateType sets the EndDateType field's value. -func (s *CreateCapacityReservationInput) SetEndDateType(v string) *CreateCapacityReservationInput { - s.EndDateType = &v - return s -} - -// SetEphemeralStorage sets the EphemeralStorage field's value. -func (s *CreateCapacityReservationInput) SetEphemeralStorage(v bool) *CreateCapacityReservationInput { - s.EphemeralStorage = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *CreateCapacityReservationInput) SetInstanceCount(v int64) *CreateCapacityReservationInput { - s.InstanceCount = &v - return s -} - -// SetInstanceMatchCriteria sets the InstanceMatchCriteria field's value. -func (s *CreateCapacityReservationInput) SetInstanceMatchCriteria(v string) *CreateCapacityReservationInput { - s.InstanceMatchCriteria = &v - return s -} - -// SetInstancePlatform sets the InstancePlatform field's value. -func (s *CreateCapacityReservationInput) SetInstancePlatform(v string) *CreateCapacityReservationInput { - s.InstancePlatform = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *CreateCapacityReservationInput) SetInstanceType(v string) *CreateCapacityReservationInput { - s.InstanceType = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateCapacityReservationInput) SetTagSpecifications(v []*TagSpecification) *CreateCapacityReservationInput { - s.TagSpecifications = v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *CreateCapacityReservationInput) SetTenancy(v string) *CreateCapacityReservationInput { - s.Tenancy = &v - return s -} - -type CreateCapacityReservationOutput struct { - _ struct{} `type:"structure"` - - // Information about the Capacity Reservation. - CapacityReservation *CapacityReservation `locationName:"capacityReservation" type:"structure"` -} - -// String returns the string representation -func (s CreateCapacityReservationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCapacityReservationOutput) GoString() string { - return s.String() -} - -// SetCapacityReservation sets the CapacityReservation field's value. -func (s *CreateCapacityReservationOutput) SetCapacityReservation(v *CapacityReservation) *CreateCapacityReservationOutput { - s.CapacityReservation = v - return s -} - -type CreateClientVpnEndpointInput struct { - _ struct{} `type:"structure"` - - // Information about the authentication method to be used to authenticate clients. - // - // AuthenticationOptions is a required field - AuthenticationOptions []*ClientVpnAuthenticationRequest `locationName:"Authentication" type:"list" required:"true"` - - // The IPv4 address range, in CIDR notation, from which to assign client IP - // addresses. The address range cannot overlap with the local CIDR of the VPC - // in which the associated subnet is located, or the routes that you add manually. - // The address range cannot be changed after the Client VPN endpoint has been - // created. The CIDR block should be /22 or greater. - // - // ClientCidrBlock is a required field - ClientCidrBlock *string `type:"string" required:"true"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // Information about the client connection logging options. - // - // If you enable client connection logging, data about client connections is - // sent to a Cloudwatch Logs log stream. The following information is logged: - // - // * Client connection requests - // - // * Client connection results (successful and unsuccessful) - // - // * Reasons for unsuccessful client connection requests - // - // * Client connection termination time - // - // ConnectionLogOptions is a required field - ConnectionLogOptions *ConnectionLogOptions `type:"structure" required:"true"` - - // A brief description of the Client VPN endpoint. - Description *string `type:"string"` - - // Information about the DNS servers to be used for DNS resolution. A Client - // VPN endpoint can have up to two DNS servers. If no DNS server is specified, - // the DNS address configured on the device is used for the DNS server. - DnsServers []*string `locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ARN of the server certificate. For more information, see the AWS Certificate - // Manager User Guide (https://docs.aws.amazon.com/acm/latest/userguide/). - // - // ServerCertificateArn is a required field - ServerCertificateArn *string `type:"string" required:"true"` - - // Indicates whether split-tunnel is enabled on the AWS Client VPN endpoint. - // - // By default, split-tunnel on a VPN endpoint is disabled. - // - // For information about split-tunnel VPN endpoints, see Split-Tunnel AWS Client - // VPN Endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html) - // in the AWS Client VPN Administrator Guide. - SplitTunnel *bool `type:"boolean"` - - // The tags to apply to the Client VPN endpoint during creation. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // The transport protocol to be used by the VPN session. - // - // Default value: udp - TransportProtocol *string `type:"string" enum:"TransportProtocol"` -} - -// String returns the string representation -func (s CreateClientVpnEndpointInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateClientVpnEndpointInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateClientVpnEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateClientVpnEndpointInput"} - if s.AuthenticationOptions == nil { - invalidParams.Add(request.NewErrParamRequired("AuthenticationOptions")) - } - if s.ClientCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("ClientCidrBlock")) - } - if s.ConnectionLogOptions == nil { - invalidParams.Add(request.NewErrParamRequired("ConnectionLogOptions")) - } - if s.ServerCertificateArn == nil { - invalidParams.Add(request.NewErrParamRequired("ServerCertificateArn")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAuthenticationOptions sets the AuthenticationOptions field's value. -func (s *CreateClientVpnEndpointInput) SetAuthenticationOptions(v []*ClientVpnAuthenticationRequest) *CreateClientVpnEndpointInput { - s.AuthenticationOptions = v - return s -} - -// SetClientCidrBlock sets the ClientCidrBlock field's value. -func (s *CreateClientVpnEndpointInput) SetClientCidrBlock(v string) *CreateClientVpnEndpointInput { - s.ClientCidrBlock = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateClientVpnEndpointInput) SetClientToken(v string) *CreateClientVpnEndpointInput { - s.ClientToken = &v - return s -} - -// SetConnectionLogOptions sets the ConnectionLogOptions field's value. -func (s *CreateClientVpnEndpointInput) SetConnectionLogOptions(v *ConnectionLogOptions) *CreateClientVpnEndpointInput { - s.ConnectionLogOptions = v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateClientVpnEndpointInput) SetDescription(v string) *CreateClientVpnEndpointInput { - s.Description = &v - return s -} - -// SetDnsServers sets the DnsServers field's value. -func (s *CreateClientVpnEndpointInput) SetDnsServers(v []*string) *CreateClientVpnEndpointInput { - s.DnsServers = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateClientVpnEndpointInput) SetDryRun(v bool) *CreateClientVpnEndpointInput { - s.DryRun = &v - return s -} - -// SetServerCertificateArn sets the ServerCertificateArn field's value. -func (s *CreateClientVpnEndpointInput) SetServerCertificateArn(v string) *CreateClientVpnEndpointInput { - s.ServerCertificateArn = &v - return s -} - -// SetSplitTunnel sets the SplitTunnel field's value. -func (s *CreateClientVpnEndpointInput) SetSplitTunnel(v bool) *CreateClientVpnEndpointInput { - s.SplitTunnel = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateClientVpnEndpointInput) SetTagSpecifications(v []*TagSpecification) *CreateClientVpnEndpointInput { - s.TagSpecifications = v - return s -} - -// SetTransportProtocol sets the TransportProtocol field's value. -func (s *CreateClientVpnEndpointInput) SetTransportProtocol(v string) *CreateClientVpnEndpointInput { - s.TransportProtocol = &v - return s -} - -type CreateClientVpnEndpointOutput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // The DNS name to be used by clients when establishing their VPN session. - DnsName *string `locationName:"dnsName" type:"string"` - - // The current state of the Client VPN endpoint. - Status *ClientVpnEndpointStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s CreateClientVpnEndpointOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateClientVpnEndpointOutput) GoString() string { - return s.String() -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *CreateClientVpnEndpointOutput) SetClientVpnEndpointId(v string) *CreateClientVpnEndpointOutput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDnsName sets the DnsName field's value. -func (s *CreateClientVpnEndpointOutput) SetDnsName(v string) *CreateClientVpnEndpointOutput { - s.DnsName = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *CreateClientVpnEndpointOutput) SetStatus(v *ClientVpnEndpointStatus) *CreateClientVpnEndpointOutput { - s.Status = v - return s -} - -type CreateClientVpnRouteInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The ID of the Client VPN endpoint to which to add the route. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // A brief description of the route. - Description *string `type:"string"` - - // The IPv4 address range, in CIDR notation, of the route destination. For example: - // - // * To add a route for Internet access, enter 0.0.0.0/0 - // - // * To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range - // - // * To add a route for an on-premises network, enter the AWS Site-to-Site - // VPN connection's IPv4 CIDR range - // - // Route address ranges cannot overlap with the CIDR range specified for client - // allocation. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the subnet through which you want to route traffic. The specified - // subnet must be an existing target network of the Client VPN endpoint. - // - // TargetVpcSubnetId is a required field - TargetVpcSubnetId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateClientVpnRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateClientVpnRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateClientVpnRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateClientVpnRouteInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.TargetVpcSubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("TargetVpcSubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateClientVpnRouteInput) SetClientToken(v string) *CreateClientVpnRouteInput { - s.ClientToken = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *CreateClientVpnRouteInput) SetClientVpnEndpointId(v string) *CreateClientVpnRouteInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateClientVpnRouteInput) SetDescription(v string) *CreateClientVpnRouteInput { - s.Description = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateClientVpnRouteInput) SetDestinationCidrBlock(v string) *CreateClientVpnRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateClientVpnRouteInput) SetDryRun(v bool) *CreateClientVpnRouteInput { - s.DryRun = &v - return s -} - -// SetTargetVpcSubnetId sets the TargetVpcSubnetId field's value. -func (s *CreateClientVpnRouteInput) SetTargetVpcSubnetId(v string) *CreateClientVpnRouteInput { - s.TargetVpcSubnetId = &v - return s -} - -type CreateClientVpnRouteOutput struct { - _ struct{} `type:"structure"` - - // The current state of the route. - Status *ClientVpnRouteStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s CreateClientVpnRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateClientVpnRouteOutput) GoString() string { - return s.String() -} - -// SetStatus sets the Status field's value. -func (s *CreateClientVpnRouteOutput) SetStatus(v *ClientVpnRouteStatus) *CreateClientVpnRouteOutput { - s.Status = v - return s -} - -// Contains the parameters for CreateCustomerGateway. -type CreateCustomerGatewayInput struct { - _ struct{} `type:"structure"` - - // For devices that support BGP, the customer gateway's BGP ASN. - // - // Default: 65000 - // - // BgpAsn is a required field - BgpAsn *int64 `type:"integer" required:"true"` - - // The Amazon Resource Name (ARN) for the customer gateway certificate. - CertificateArn *string `type:"string"` - - // A name for the customer gateway device. - // - // Length Constraints: Up to 255 characters. - DeviceName *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The Internet-routable IP address for the customer gateway's outside interface. - // The address must be static. - PublicIp *string `locationName:"IpAddress" type:"string"` - - // The type of VPN connection that this customer gateway supports (ipsec.1). - // - // Type is a required field - Type *string `type:"string" required:"true" enum:"GatewayType"` -} - -// String returns the string representation -func (s CreateCustomerGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCustomerGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateCustomerGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateCustomerGatewayInput"} - if s.BgpAsn == nil { - invalidParams.Add(request.NewErrParamRequired("BgpAsn")) - } - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBgpAsn sets the BgpAsn field's value. -func (s *CreateCustomerGatewayInput) SetBgpAsn(v int64) *CreateCustomerGatewayInput { - s.BgpAsn = &v - return s -} - -// SetCertificateArn sets the CertificateArn field's value. -func (s *CreateCustomerGatewayInput) SetCertificateArn(v string) *CreateCustomerGatewayInput { - s.CertificateArn = &v - return s -} - -// SetDeviceName sets the DeviceName field's value. -func (s *CreateCustomerGatewayInput) SetDeviceName(v string) *CreateCustomerGatewayInput { - s.DeviceName = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateCustomerGatewayInput) SetDryRun(v bool) *CreateCustomerGatewayInput { - s.DryRun = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *CreateCustomerGatewayInput) SetPublicIp(v string) *CreateCustomerGatewayInput { - s.PublicIp = &v - return s -} - -// SetType sets the Type field's value. -func (s *CreateCustomerGatewayInput) SetType(v string) *CreateCustomerGatewayInput { - s.Type = &v - return s -} - -// Contains the output of CreateCustomerGateway. -type CreateCustomerGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the customer gateway. - CustomerGateway *CustomerGateway `locationName:"customerGateway" type:"structure"` -} - -// String returns the string representation -func (s CreateCustomerGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateCustomerGatewayOutput) GoString() string { - return s.String() -} - -// SetCustomerGateway sets the CustomerGateway field's value. -func (s *CreateCustomerGatewayOutput) SetCustomerGateway(v *CustomerGateway) *CreateCustomerGatewayOutput { - s.CustomerGateway = v - return s -} - -type CreateDefaultSubnetInput struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which to create the default subnet. - // - // AvailabilityZone is a required field - AvailabilityZone *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s CreateDefaultSubnetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateDefaultSubnetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateDefaultSubnetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateDefaultSubnetInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateDefaultSubnetInput) SetAvailabilityZone(v string) *CreateDefaultSubnetInput { - s.AvailabilityZone = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateDefaultSubnetInput) SetDryRun(v bool) *CreateDefaultSubnetInput { - s.DryRun = &v - return s -} - -type CreateDefaultSubnetOutput struct { - _ struct{} `type:"structure"` - - // Information about the subnet. - Subnet *Subnet `locationName:"subnet" type:"structure"` -} - -// String returns the string representation -func (s CreateDefaultSubnetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateDefaultSubnetOutput) GoString() string { - return s.String() -} - -// SetSubnet sets the Subnet field's value. -func (s *CreateDefaultSubnetOutput) SetSubnet(v *Subnet) *CreateDefaultSubnetOutput { - s.Subnet = v - return s -} - -type CreateDefaultVpcInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s CreateDefaultVpcInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateDefaultVpcInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateDefaultVpcInput) SetDryRun(v bool) *CreateDefaultVpcInput { - s.DryRun = &v - return s -} - -type CreateDefaultVpcOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC. - Vpc *Vpc `locationName:"vpc" type:"structure"` -} - -// String returns the string representation -func (s CreateDefaultVpcOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateDefaultVpcOutput) GoString() string { - return s.String() -} - -// SetVpc sets the Vpc field's value. -func (s *CreateDefaultVpcOutput) SetVpc(v *Vpc) *CreateDefaultVpcOutput { - s.Vpc = v - return s -} - -type CreateDhcpOptionsInput struct { - _ struct{} `type:"structure"` - - // A DHCP configuration option. - // - // DhcpConfigurations is a required field - DhcpConfigurations []*NewDhcpConfiguration `locationName:"dhcpConfiguration" locationNameList:"item" type:"list" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s CreateDhcpOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateDhcpOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateDhcpOptionsInput"} - if s.DhcpConfigurations == nil { - invalidParams.Add(request.NewErrParamRequired("DhcpConfigurations")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDhcpConfigurations sets the DhcpConfigurations field's value. -func (s *CreateDhcpOptionsInput) SetDhcpConfigurations(v []*NewDhcpConfiguration) *CreateDhcpOptionsInput { - s.DhcpConfigurations = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateDhcpOptionsInput) SetDryRun(v bool) *CreateDhcpOptionsInput { - s.DryRun = &v - return s -} - -type CreateDhcpOptionsOutput struct { - _ struct{} `type:"structure"` - - // A set of DHCP options. - DhcpOptions *DhcpOptions `locationName:"dhcpOptions" type:"structure"` -} - -// String returns the string representation -func (s CreateDhcpOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateDhcpOptionsOutput) GoString() string { - return s.String() -} - -// SetDhcpOptions sets the DhcpOptions field's value. -func (s *CreateDhcpOptionsOutput) SetDhcpOptions(v *DhcpOptions) *CreateDhcpOptionsOutput { - s.DhcpOptions = v - return s -} - -type CreateEgressOnlyInternetGatewayInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the VPC for which to create the egress-only internet gateway. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateEgressOnlyInternetGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateEgressOnlyInternetGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateEgressOnlyInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateEgressOnlyInternetGatewayInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateEgressOnlyInternetGatewayInput) SetClientToken(v string) *CreateEgressOnlyInternetGatewayInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateEgressOnlyInternetGatewayInput) SetDryRun(v bool) *CreateEgressOnlyInternetGatewayInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateEgressOnlyInternetGatewayInput) SetVpcId(v string) *CreateEgressOnlyInternetGatewayInput { - s.VpcId = &v - return s -} - -type CreateEgressOnlyInternetGatewayOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the egress-only internet gateway. - EgressOnlyInternetGateway *EgressOnlyInternetGateway `locationName:"egressOnlyInternetGateway" type:"structure"` -} - -// String returns the string representation -func (s CreateEgressOnlyInternetGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateEgressOnlyInternetGatewayOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateEgressOnlyInternetGatewayOutput) SetClientToken(v string) *CreateEgressOnlyInternetGatewayOutput { - s.ClientToken = &v - return s -} - -// SetEgressOnlyInternetGateway sets the EgressOnlyInternetGateway field's value. -func (s *CreateEgressOnlyInternetGatewayOutput) SetEgressOnlyInternetGateway(v *EgressOnlyInternetGateway) *CreateEgressOnlyInternetGatewayOutput { - s.EgressOnlyInternetGateway = v - return s -} - -// Describes the instances that could not be launched by the fleet. -type CreateFleetError struct { - _ struct{} `type:"structure"` - - // The error code that indicates why the instance could not be launched. For - // more information about error codes, see Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). - ErrorCode *string `locationName:"errorCode" type:"string"` - - // The error message that describes why the instance could not be launched. - // For more information about error messages, see ee Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). - ErrorMessage *string `locationName:"errorMessage" type:"string"` - - // The launch templates and overrides that were used for launching the instances. - // Any parameters that you specify in the Overrides override the same parameters - // in the launch template. - LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` - - // Indicates if the instance that could not be launched was a Spot Instance - // or On-Demand Instance. - Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` -} - -// String returns the string representation -func (s CreateFleetError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFleetError) GoString() string { - return s.String() -} - -// SetErrorCode sets the ErrorCode field's value. -func (s *CreateFleetError) SetErrorCode(v string) *CreateFleetError { - s.ErrorCode = &v - return s -} - -// SetErrorMessage sets the ErrorMessage field's value. -func (s *CreateFleetError) SetErrorMessage(v string) *CreateFleetError { - s.ErrorMessage = &v - return s -} - -// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. -func (s *CreateFleetError) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *CreateFleetError { - s.LaunchTemplateAndOverrides = v - return s -} - -// SetLifecycle sets the Lifecycle field's value. -func (s *CreateFleetError) SetLifecycle(v string) *CreateFleetError { - s.Lifecycle = &v - return s -} - -type CreateFleetInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Indicates whether running instances should be terminated if the total target - // capacity of the EC2 Fleet is decreased below the current size of the EC2 - // Fleet. - ExcessCapacityTerminationPolicy *string `type:"string" enum:"FleetExcessCapacityTerminationPolicy"` - - // The configuration for the EC2 Fleet. - // - // LaunchTemplateConfigs is a required field - LaunchTemplateConfigs []*FleetLaunchTemplateConfigRequest `locationNameList:"item" type:"list" required:"true"` - - // Describes the configuration of On-Demand Instances in an EC2 Fleet. - OnDemandOptions *OnDemandOptionsRequest `type:"structure"` - - // Indicates whether EC2 Fleet should replace unhealthy instances. - ReplaceUnhealthyInstances *bool `type:"boolean"` - - // Describes the configuration of Spot Instances in an EC2 Fleet. - SpotOptions *SpotOptionsRequest `type:"structure"` - - // The key-value pair for tagging the EC2 Fleet request on creation. The value - // for ResourceType must be fleet, otherwise the fleet request fails. To tag - // instances at launch, specify the tags in the launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template). - // For information about tagging after launch, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources). - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // The number of units to request. - // - // TargetCapacitySpecification is a required field - TargetCapacitySpecification *TargetCapacitySpecificationRequest `type:"structure" required:"true"` - - // Indicates whether running instances should be terminated when the EC2 Fleet - // expires. - TerminateInstancesWithExpiration *bool `type:"boolean"` - - // The type of the request. By default, the EC2 Fleet places an asynchronous - // request for your desired capacity, and maintains it by replenishing interrupted - // Spot Instances (maintain). A value of instant places a synchronous one-time - // request, and returns errors for any instances that could not be launched. - // A value of request places an asynchronous one-time request without maintaining - // capacity or submitting requests in alternative capacity pools if capacity - // is unavailable. For more information, see EC2 Fleet Request Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-configuration-strategies.html#ec2-fleet-request-type) - // in the Amazon Elastic Compute Cloud User Guide. - Type *string `type:"string" enum:"FleetType"` - - // The start date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // The default is to start fulfilling the request immediately. - ValidFrom *time.Time `type:"timestamp"` - - // The end date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // At this point, no new EC2 Fleet requests are placed or able to fulfill the - // request. If no value is specified, the request remains until you cancel it. - ValidUntil *time.Time `type:"timestamp"` -} - -// String returns the string representation -func (s CreateFleetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFleetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateFleetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateFleetInput"} - if s.LaunchTemplateConfigs == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchTemplateConfigs")) - } - if s.TargetCapacitySpecification == nil { - invalidParams.Add(request.NewErrParamRequired("TargetCapacitySpecification")) - } - if s.LaunchTemplateConfigs != nil { - for i, v := range s.LaunchTemplateConfigs { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "LaunchTemplateConfigs", i), err.(request.ErrInvalidParams)) - } - } - } - if s.TargetCapacitySpecification != nil { - if err := s.TargetCapacitySpecification.Validate(); err != nil { - invalidParams.AddNested("TargetCapacitySpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateFleetInput) SetClientToken(v string) *CreateFleetInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateFleetInput) SetDryRun(v bool) *CreateFleetInput { - s.DryRun = &v - return s -} - -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *CreateFleetInput) SetExcessCapacityTerminationPolicy(v string) *CreateFleetInput { - s.ExcessCapacityTerminationPolicy = &v - return s -} - -// SetLaunchTemplateConfigs sets the LaunchTemplateConfigs field's value. -func (s *CreateFleetInput) SetLaunchTemplateConfigs(v []*FleetLaunchTemplateConfigRequest) *CreateFleetInput { - s.LaunchTemplateConfigs = v - return s -} - -// SetOnDemandOptions sets the OnDemandOptions field's value. -func (s *CreateFleetInput) SetOnDemandOptions(v *OnDemandOptionsRequest) *CreateFleetInput { - s.OnDemandOptions = v - return s -} - -// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. -func (s *CreateFleetInput) SetReplaceUnhealthyInstances(v bool) *CreateFleetInput { - s.ReplaceUnhealthyInstances = &v - return s -} - -// SetSpotOptions sets the SpotOptions field's value. -func (s *CreateFleetInput) SetSpotOptions(v *SpotOptionsRequest) *CreateFleetInput { - s.SpotOptions = v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateFleetInput) SetTagSpecifications(v []*TagSpecification) *CreateFleetInput { - s.TagSpecifications = v - return s -} - -// SetTargetCapacitySpecification sets the TargetCapacitySpecification field's value. -func (s *CreateFleetInput) SetTargetCapacitySpecification(v *TargetCapacitySpecificationRequest) *CreateFleetInput { - s.TargetCapacitySpecification = v - return s -} - -// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. -func (s *CreateFleetInput) SetTerminateInstancesWithExpiration(v bool) *CreateFleetInput { - s.TerminateInstancesWithExpiration = &v - return s -} - -// SetType sets the Type field's value. -func (s *CreateFleetInput) SetType(v string) *CreateFleetInput { - s.Type = &v - return s -} - -// SetValidFrom sets the ValidFrom field's value. -func (s *CreateFleetInput) SetValidFrom(v time.Time) *CreateFleetInput { - s.ValidFrom = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *CreateFleetInput) SetValidUntil(v time.Time) *CreateFleetInput { - s.ValidUntil = &v - return s -} - -// Describes the instances that were launched by the fleet. -type CreateFleetInstance struct { - _ struct{} `type:"structure"` - - // The IDs of the instances. - InstanceIds []*string `locationName:"instanceIds" locationNameList:"item" type:"list"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The launch templates and overrides that were used for launching the instances. - // Any parameters that you specify in the Overrides override the same parameters - // in the launch template. - LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` - - // Indicates if the instance that was launched is a Spot Instance or On-Demand - // Instance. - Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` - - // The value is Windows for Windows instances; otherwise blank. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` -} - -// String returns the string representation -func (s CreateFleetInstance) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFleetInstance) GoString() string { - return s.String() -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *CreateFleetInstance) SetInstanceIds(v []*string) *CreateFleetInstance { - s.InstanceIds = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *CreateFleetInstance) SetInstanceType(v string) *CreateFleetInstance { - s.InstanceType = &v - return s -} - -// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. -func (s *CreateFleetInstance) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *CreateFleetInstance { - s.LaunchTemplateAndOverrides = v - return s -} - -// SetLifecycle sets the Lifecycle field's value. -func (s *CreateFleetInstance) SetLifecycle(v string) *CreateFleetInstance { - s.Lifecycle = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *CreateFleetInstance) SetPlatform(v string) *CreateFleetInstance { - s.Platform = &v - return s -} - -type CreateFleetOutput struct { - _ struct{} `type:"structure"` - - // Information about the instances that could not be launched by the fleet. - // Valid only when Type is set to instant. - Errors []*CreateFleetError `locationName:"errorSet" locationNameList:"item" type:"list"` - - // The ID of the EC2 Fleet. - FleetId *string `locationName:"fleetId" type:"string"` - - // Information about the instances that were launched by the fleet. Valid only - // when Type is set to instant. - Instances []*CreateFleetInstance `locationName:"fleetInstanceSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateFleetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFleetOutput) GoString() string { - return s.String() -} - -// SetErrors sets the Errors field's value. -func (s *CreateFleetOutput) SetErrors(v []*CreateFleetError) *CreateFleetOutput { - s.Errors = v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *CreateFleetOutput) SetFleetId(v string) *CreateFleetOutput { - s.FleetId = &v - return s -} - -// SetInstances sets the Instances field's value. -func (s *CreateFleetOutput) SetInstances(v []*CreateFleetInstance) *CreateFleetOutput { - s.Instances = v - return s -} - -type CreateFlowLogsInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // The ARN for the IAM role that permits Amazon EC2 to publish flow logs to - // a CloudWatch Logs log group in your account. - // - // If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn - // or LogGroupName. - DeliverLogsPermissionArn *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Specifies the destination to which the flow log data is to be published. - // Flow log data can be published to a CloudWatch Logs log group or an Amazon - // S3 bucket. The value specified for this parameter depends on the value specified - // for LogDestinationType. - // - // If LogDestinationType is not specified or cloud-watch-logs, specify the Amazon - // Resource Name (ARN) of the CloudWatch Logs log group. - // - // If LogDestinationType is s3, specify the ARN of the Amazon S3 bucket. You - // can also specify a subfolder in the bucket. To specify a subfolder in the - // bucket, use the following ARN format: bucket_ARN/subfolder_name/. For example, - // to specify a subfolder named my-logs in a bucket named my-bucket, use the - // following ARN: arn:aws:s3:::my-bucket/my-logs/. You cannot use AWSLogs as - // a subfolder name. This is a reserved term. - LogDestination *string `type:"string"` - - // Specifies the type of destination to which the flow log data is to be published. - // Flow log data can be published to CloudWatch Logs or Amazon S3. To publish - // flow log data to CloudWatch Logs, specify cloud-watch-logs. To publish flow - // log data to Amazon S3, specify s3. - // - // If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn - // or LogGroupName. - // - // Default: cloud-watch-logs - LogDestinationType *string `type:"string" enum:"LogDestinationType"` - - // The fields to include in the flow log record, in the order in which they - // should appear. For a list of available fields, see Flow Log Records (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records). - // If you omit this parameter, the flow log is created using the default format. - // If you specify this parameter, you must specify at least one field. - // - // Specify the fields using the ${field-id} format, separated by spaces. For - // the AWS CLI, use single quotation marks (' ') to surround the parameter value. - // - // Only applicable to flow logs that are published to an Amazon S3 bucket. - LogFormat *string `type:"string"` - - // The name of a new or existing CloudWatch Logs log group where Amazon EC2 - // publishes your flow logs. - // - // If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn - // or LogGroupName. - LogGroupName *string `type:"string"` - - // The ID of the subnet, network interface, or VPC for which you want to create - // a flow log. - // - // Constraints: Maximum of 1000 resources - // - // ResourceIds is a required field - ResourceIds []*string `locationName:"ResourceId" locationNameList:"item" type:"list" required:"true"` - - // The type of resource for which to create the flow log. For example, if you - // specified a VPC ID for the ResourceId property, specify VPC for this property. - // - // ResourceType is a required field - ResourceType *string `type:"string" required:"true" enum:"FlowLogsResourceType"` - - // The type of traffic to log. You can log traffic that the resource accepts - // or rejects, or all traffic. - // - // TrafficType is a required field - TrafficType *string `type:"string" required:"true" enum:"TrafficType"` -} - -// String returns the string representation -func (s CreateFlowLogsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFlowLogsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateFlowLogsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateFlowLogsInput"} - if s.ResourceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ResourceIds")) - } - if s.ResourceType == nil { - invalidParams.Add(request.NewErrParamRequired("ResourceType")) - } - if s.TrafficType == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficType")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateFlowLogsInput) SetClientToken(v string) *CreateFlowLogsInput { - s.ClientToken = &v - return s -} - -// SetDeliverLogsPermissionArn sets the DeliverLogsPermissionArn field's value. -func (s *CreateFlowLogsInput) SetDeliverLogsPermissionArn(v string) *CreateFlowLogsInput { - s.DeliverLogsPermissionArn = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateFlowLogsInput) SetDryRun(v bool) *CreateFlowLogsInput { - s.DryRun = &v - return s -} - -// SetLogDestination sets the LogDestination field's value. -func (s *CreateFlowLogsInput) SetLogDestination(v string) *CreateFlowLogsInput { - s.LogDestination = &v - return s -} - -// SetLogDestinationType sets the LogDestinationType field's value. -func (s *CreateFlowLogsInput) SetLogDestinationType(v string) *CreateFlowLogsInput { - s.LogDestinationType = &v - return s -} - -// SetLogFormat sets the LogFormat field's value. -func (s *CreateFlowLogsInput) SetLogFormat(v string) *CreateFlowLogsInput { - s.LogFormat = &v - return s -} - -// SetLogGroupName sets the LogGroupName field's value. -func (s *CreateFlowLogsInput) SetLogGroupName(v string) *CreateFlowLogsInput { - s.LogGroupName = &v - return s -} - -// SetResourceIds sets the ResourceIds field's value. -func (s *CreateFlowLogsInput) SetResourceIds(v []*string) *CreateFlowLogsInput { - s.ResourceIds = v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *CreateFlowLogsInput) SetResourceType(v string) *CreateFlowLogsInput { - s.ResourceType = &v - return s -} - -// SetTrafficType sets the TrafficType field's value. -func (s *CreateFlowLogsInput) SetTrafficType(v string) *CreateFlowLogsInput { - s.TrafficType = &v - return s -} - -type CreateFlowLogsOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // The IDs of the flow logs. - FlowLogIds []*string `locationName:"flowLogIdSet" locationNameList:"item" type:"list"` - - // Information about the flow logs that could not be created successfully. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateFlowLogsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFlowLogsOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateFlowLogsOutput) SetClientToken(v string) *CreateFlowLogsOutput { - s.ClientToken = &v - return s -} - -// SetFlowLogIds sets the FlowLogIds field's value. -func (s *CreateFlowLogsOutput) SetFlowLogIds(v []*string) *CreateFlowLogsOutput { - s.FlowLogIds = v - return s -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *CreateFlowLogsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *CreateFlowLogsOutput { - s.Unsuccessful = v - return s -} - -type CreateFpgaImageInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // A description for the AFI. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The location of the encrypted design checkpoint in Amazon S3. The input must - // be a tarball. - // - // InputStorageLocation is a required field - InputStorageLocation *StorageLocation `type:"structure" required:"true"` - - // The location in Amazon S3 for the output logs. - LogsStorageLocation *StorageLocation `type:"structure"` - - // A name for the AFI. - Name *string `type:"string"` - - // The tags to apply to the FPGA image during creation. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateFpgaImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFpgaImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateFpgaImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateFpgaImageInput"} - if s.InputStorageLocation == nil { - invalidParams.Add(request.NewErrParamRequired("InputStorageLocation")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateFpgaImageInput) SetClientToken(v string) *CreateFpgaImageInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateFpgaImageInput) SetDescription(v string) *CreateFpgaImageInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateFpgaImageInput) SetDryRun(v bool) *CreateFpgaImageInput { - s.DryRun = &v - return s -} - -// SetInputStorageLocation sets the InputStorageLocation field's value. -func (s *CreateFpgaImageInput) SetInputStorageLocation(v *StorageLocation) *CreateFpgaImageInput { - s.InputStorageLocation = v - return s -} - -// SetLogsStorageLocation sets the LogsStorageLocation field's value. -func (s *CreateFpgaImageInput) SetLogsStorageLocation(v *StorageLocation) *CreateFpgaImageInput { - s.LogsStorageLocation = v - return s -} - -// SetName sets the Name field's value. -func (s *CreateFpgaImageInput) SetName(v string) *CreateFpgaImageInput { - s.Name = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateFpgaImageInput) SetTagSpecifications(v []*TagSpecification) *CreateFpgaImageInput { - s.TagSpecifications = v - return s -} - -type CreateFpgaImageOutput struct { - _ struct{} `type:"structure"` - - // The global FPGA image identifier (AGFI ID). - FpgaImageGlobalId *string `locationName:"fpgaImageGlobalId" type:"string"` - - // The FPGA image identifier (AFI ID). - FpgaImageId *string `locationName:"fpgaImageId" type:"string"` -} - -// String returns the string representation -func (s CreateFpgaImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateFpgaImageOutput) GoString() string { - return s.String() -} - -// SetFpgaImageGlobalId sets the FpgaImageGlobalId field's value. -func (s *CreateFpgaImageOutput) SetFpgaImageGlobalId(v string) *CreateFpgaImageOutput { - s.FpgaImageGlobalId = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *CreateFpgaImageOutput) SetFpgaImageId(v string) *CreateFpgaImageOutput { - s.FpgaImageId = &v - return s -} - -type CreateImageInput struct { - _ struct{} `type:"structure"` - - // The block device mappings. This parameter cannot be used to modify the encryption - // status of existing volumes or snapshots. To create an AMI with encrypted - // snapshots, use the CopyImage action. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // A description for the new image. - Description *string `locationName:"description" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // A name for the new image. - // - // Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets - // ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), - // at-signs (@), or underscores(_) - // - // Name is a required field - Name *string `locationName:"name" type:"string" required:"true"` - - // By default, Amazon EC2 attempts to shut down and reboot the instance before - // creating the image. If the 'No Reboot' option is set, Amazon EC2 doesn't - // shut down the instance before creating the image. When this option is used, - // file system integrity on the created image can't be guaranteed. - NoReboot *bool `locationName:"noReboot" type:"boolean"` -} - -// String returns the string representation -func (s CreateImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateImageInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *CreateImageInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *CreateImageInput { - s.BlockDeviceMappings = v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateImageInput) SetDescription(v string) *CreateImageInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateImageInput) SetDryRun(v bool) *CreateImageInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *CreateImageInput) SetInstanceId(v string) *CreateImageInput { - s.InstanceId = &v - return s -} - -// SetName sets the Name field's value. -func (s *CreateImageInput) SetName(v string) *CreateImageInput { - s.Name = &v - return s -} - -// SetNoReboot sets the NoReboot field's value. -func (s *CreateImageInput) SetNoReboot(v bool) *CreateImageInput { - s.NoReboot = &v - return s -} - -type CreateImageOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new AMI. - ImageId *string `locationName:"imageId" type:"string"` -} - -// String returns the string representation -func (s CreateImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateImageOutput) GoString() string { - return s.String() -} - -// SetImageId sets the ImageId field's value. -func (s *CreateImageOutput) SetImageId(v string) *CreateImageOutput { - s.ImageId = &v - return s -} - -type CreateInstanceExportTaskInput struct { - _ struct{} `type:"structure"` - - // A description for the conversion task or the resource being exported. The - // maximum length is 255 bytes. - Description *string `locationName:"description" type:"string"` - - // The format and location for an instance export task. - ExportToS3Task *ExportToS3TaskSpecification `locationName:"exportToS3" type:"structure"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // The target virtualization environment. - TargetEnvironment *string `locationName:"targetEnvironment" type:"string" enum:"ExportEnvironment"` -} - -// String returns the string representation -func (s CreateInstanceExportTaskInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateInstanceExportTaskInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateInstanceExportTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateInstanceExportTaskInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CreateInstanceExportTaskInput) SetDescription(v string) *CreateInstanceExportTaskInput { - s.Description = &v - return s -} - -// SetExportToS3Task sets the ExportToS3Task field's value. -func (s *CreateInstanceExportTaskInput) SetExportToS3Task(v *ExportToS3TaskSpecification) *CreateInstanceExportTaskInput { - s.ExportToS3Task = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *CreateInstanceExportTaskInput) SetInstanceId(v string) *CreateInstanceExportTaskInput { - s.InstanceId = &v - return s -} - -// SetTargetEnvironment sets the TargetEnvironment field's value. -func (s *CreateInstanceExportTaskInput) SetTargetEnvironment(v string) *CreateInstanceExportTaskInput { - s.TargetEnvironment = &v - return s -} - -type CreateInstanceExportTaskOutput struct { - _ struct{} `type:"structure"` - - // Information about the instance export task. - ExportTask *ExportTask `locationName:"exportTask" type:"structure"` -} - -// String returns the string representation -func (s CreateInstanceExportTaskOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateInstanceExportTaskOutput) GoString() string { - return s.String() -} - -// SetExportTask sets the ExportTask field's value. -func (s *CreateInstanceExportTaskOutput) SetExportTask(v *ExportTask) *CreateInstanceExportTaskOutput { - s.ExportTask = v - return s -} - -type CreateInternetGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s CreateInternetGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateInternetGatewayInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateInternetGatewayInput) SetDryRun(v bool) *CreateInternetGatewayInput { - s.DryRun = &v - return s -} - -type CreateInternetGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the internet gateway. - InternetGateway *InternetGateway `locationName:"internetGateway" type:"structure"` -} - -// String returns the string representation -func (s CreateInternetGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateInternetGatewayOutput) GoString() string { - return s.String() -} - -// SetInternetGateway sets the InternetGateway field's value. -func (s *CreateInternetGatewayOutput) SetInternetGateway(v *InternetGateway) *CreateInternetGatewayOutput { - s.InternetGateway = v - return s -} - -type CreateKeyPairInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // A unique name for the key pair. - // - // Constraints: Up to 255 ASCII characters - // - // KeyName is a required field - KeyName *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateKeyPairInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateKeyPairInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateKeyPairInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateKeyPairInput"} - if s.KeyName == nil { - invalidParams.Add(request.NewErrParamRequired("KeyName")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateKeyPairInput) SetDryRun(v bool) *CreateKeyPairInput { - s.DryRun = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *CreateKeyPairInput) SetKeyName(v string) *CreateKeyPairInput { - s.KeyName = &v - return s -} - -// Describes a key pair. -type CreateKeyPairOutput struct { - _ struct{} `type:"structure"` - - // The SHA-1 digest of the DER encoded private key. - KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` - - // An unencrypted PEM encoded RSA private key. - KeyMaterial *string `locationName:"keyMaterial" type:"string" sensitive:"true"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` -} - -// String returns the string representation -func (s CreateKeyPairOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateKeyPairOutput) GoString() string { - return s.String() -} - -// SetKeyFingerprint sets the KeyFingerprint field's value. -func (s *CreateKeyPairOutput) SetKeyFingerprint(v string) *CreateKeyPairOutput { - s.KeyFingerprint = &v - return s -} - -// SetKeyMaterial sets the KeyMaterial field's value. -func (s *CreateKeyPairOutput) SetKeyMaterial(v string) *CreateKeyPairOutput { - s.KeyMaterial = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *CreateKeyPairOutput) SetKeyName(v string) *CreateKeyPairOutput { - s.KeyName = &v - return s -} - -type CreateLaunchTemplateInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraint: Maximum 128 ASCII characters. - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The information for the launch template. - // - // LaunchTemplateData is a required field - LaunchTemplateData *RequestLaunchTemplateData `type:"structure" required:"true"` - - // A name for the launch template. - // - // LaunchTemplateName is a required field - LaunchTemplateName *string `min:"3" type:"string" required:"true"` - - // The tags to apply to the launch template during creation. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // A description for the first version of the launch template. - VersionDescription *string `type:"string"` -} - -// String returns the string representation -func (s CreateLaunchTemplateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateLaunchTemplateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateLaunchTemplateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateLaunchTemplateInput"} - if s.LaunchTemplateData == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchTemplateData")) - } - if s.LaunchTemplateName == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchTemplateName")) - } - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - if s.LaunchTemplateData != nil { - if err := s.LaunchTemplateData.Validate(); err != nil { - invalidParams.AddNested("LaunchTemplateData", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateLaunchTemplateInput) SetClientToken(v string) *CreateLaunchTemplateInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateLaunchTemplateInput) SetDryRun(v bool) *CreateLaunchTemplateInput { - s.DryRun = &v - return s -} - -// SetLaunchTemplateData sets the LaunchTemplateData field's value. -func (s *CreateLaunchTemplateInput) SetLaunchTemplateData(v *RequestLaunchTemplateData) *CreateLaunchTemplateInput { - s.LaunchTemplateData = v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *CreateLaunchTemplateInput) SetLaunchTemplateName(v string) *CreateLaunchTemplateInput { - s.LaunchTemplateName = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateLaunchTemplateInput) SetTagSpecifications(v []*TagSpecification) *CreateLaunchTemplateInput { - s.TagSpecifications = v - return s -} - -// SetVersionDescription sets the VersionDescription field's value. -func (s *CreateLaunchTemplateInput) SetVersionDescription(v string) *CreateLaunchTemplateInput { - s.VersionDescription = &v - return s -} - -type CreateLaunchTemplateOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch template. - LaunchTemplate *LaunchTemplate `locationName:"launchTemplate" type:"structure"` -} - -// String returns the string representation -func (s CreateLaunchTemplateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateLaunchTemplateOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplate sets the LaunchTemplate field's value. -func (s *CreateLaunchTemplateOutput) SetLaunchTemplate(v *LaunchTemplate) *CreateLaunchTemplateOutput { - s.LaunchTemplate = v - return s -} - -type CreateLaunchTemplateVersionInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraint: Maximum 128 ASCII characters. - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The information for the launch template. - // - // LaunchTemplateData is a required field - LaunchTemplateData *RequestLaunchTemplateData `type:"structure" required:"true"` - - // The ID of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateName *string `min:"3" type:"string"` - - // The version number of the launch template version on which to base the new - // version. The new version inherits the same launch parameters as the source - // version, except for parameters that you specify in LaunchTemplateData. Snapshots - // applied to the block device mapping are ignored when creating a new version - // unless they are explicitly included. - SourceVersion *string `type:"string"` - - // A description for the version of the launch template. - VersionDescription *string `type:"string"` -} - -// String returns the string representation -func (s CreateLaunchTemplateVersionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateLaunchTemplateVersionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateLaunchTemplateVersionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateLaunchTemplateVersionInput"} - if s.LaunchTemplateData == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchTemplateData")) - } - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - if s.LaunchTemplateData != nil { - if err := s.LaunchTemplateData.Validate(); err != nil { - invalidParams.AddNested("LaunchTemplateData", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateLaunchTemplateVersionInput) SetClientToken(v string) *CreateLaunchTemplateVersionInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateLaunchTemplateVersionInput) SetDryRun(v bool) *CreateLaunchTemplateVersionInput { - s.DryRun = &v - return s -} - -// SetLaunchTemplateData sets the LaunchTemplateData field's value. -func (s *CreateLaunchTemplateVersionInput) SetLaunchTemplateData(v *RequestLaunchTemplateData) *CreateLaunchTemplateVersionInput { - s.LaunchTemplateData = v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *CreateLaunchTemplateVersionInput) SetLaunchTemplateId(v string) *CreateLaunchTemplateVersionInput { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *CreateLaunchTemplateVersionInput) SetLaunchTemplateName(v string) *CreateLaunchTemplateVersionInput { - s.LaunchTemplateName = &v - return s -} - -// SetSourceVersion sets the SourceVersion field's value. -func (s *CreateLaunchTemplateVersionInput) SetSourceVersion(v string) *CreateLaunchTemplateVersionInput { - s.SourceVersion = &v - return s -} - -// SetVersionDescription sets the VersionDescription field's value. -func (s *CreateLaunchTemplateVersionInput) SetVersionDescription(v string) *CreateLaunchTemplateVersionInput { - s.VersionDescription = &v - return s -} - -type CreateLaunchTemplateVersionOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch template version. - LaunchTemplateVersion *LaunchTemplateVersion `locationName:"launchTemplateVersion" type:"structure"` -} - -// String returns the string representation -func (s CreateLaunchTemplateVersionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateLaunchTemplateVersionOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplateVersion sets the LaunchTemplateVersion field's value. -func (s *CreateLaunchTemplateVersionOutput) SetLaunchTemplateVersion(v *LaunchTemplateVersion) *CreateLaunchTemplateVersionOutput { - s.LaunchTemplateVersion = v - return s -} - -type CreateNatGatewayInput struct { - _ struct{} `type:"structure"` - - // The allocation ID of an Elastic IP address to associate with the NAT gateway. - // If the Elastic IP address is associated with another resource, you must first - // disassociate it. - // - // AllocationId is a required field - AllocationId *string `type:"string" required:"true"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraint: Maximum 64 ASCII characters. - ClientToken *string `type:"string"` - - // The subnet in which to create the NAT gateway. - // - // SubnetId is a required field - SubnetId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateNatGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNatGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNatGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNatGatewayInput"} - if s.AllocationId == nil { - invalidParams.Add(request.NewErrParamRequired("AllocationId")) - } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAllocationId sets the AllocationId field's value. -func (s *CreateNatGatewayInput) SetAllocationId(v string) *CreateNatGatewayInput { - s.AllocationId = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateNatGatewayInput) SetClientToken(v string) *CreateNatGatewayInput { - s.ClientToken = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *CreateNatGatewayInput) SetSubnetId(v string) *CreateNatGatewayInput { - s.SubnetId = &v - return s -} - -type CreateNatGatewayOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier to ensure the idempotency of the request. - // Only returned if a client token was provided in the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the NAT gateway. - NatGateway *NatGateway `locationName:"natGateway" type:"structure"` -} - -// String returns the string representation -func (s CreateNatGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNatGatewayOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateNatGatewayOutput) SetClientToken(v string) *CreateNatGatewayOutput { - s.ClientToken = &v - return s -} - -// SetNatGateway sets the NatGateway field's value. -func (s *CreateNatGatewayOutput) SetNatGateway(v *NatGateway) *CreateNatGatewayOutput { - s.NatGateway = v - return s -} - -type CreateNetworkAclEntryInput struct { - _ struct{} `type:"structure"` - - // The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Indicates whether this is an egress rule (rule is applied to traffic leaving - // the subnet). - // - // Egress is a required field - Egress *bool `locationName:"egress" type:"boolean" required:"true"` - - // ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol - // 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block. - IcmpTypeCode *IcmpTypeCode `locationName:"Icmp" type:"structure"` - - // The IPv6 network range to allow or deny, in CIDR notation (for example 2001:db8:1234:1a00::/64). - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - - // The ID of the network ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` - - // TCP or UDP protocols: The range of ports the rule applies to. Required if - // specifying protocol 6 (TCP) or 17 (UDP). - PortRange *PortRange `locationName:"portRange" type:"structure"` - - // The protocol number. A value of "-1" means all protocols. If you specify - // "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), - // traffic on all ports is allowed, regardless of any ports or ICMP types or - // codes that you specify. If you specify protocol "58" (ICMPv6) and specify - // an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless - // of any that you specify. If you specify protocol "58" (ICMPv6) and specify - // an IPv6 CIDR block, you must specify an ICMP type and code. - // - // Protocol is a required field - Protocol *string `locationName:"protocol" type:"string" required:"true"` - - // Indicates whether to allow or deny the traffic that matches the rule. - // - // RuleAction is a required field - RuleAction *string `locationName:"ruleAction" type:"string" required:"true" enum:"RuleAction"` - - // The rule number for the entry (for example, 100). ACL entries are processed - // in ascending order by rule number. - // - // Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is - // reserved for internal use. - // - // RuleNumber is a required field - RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` -} - -// String returns the string representation -func (s CreateNetworkAclEntryInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkAclEntryInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkAclEntryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkAclEntryInput"} - if s.Egress == nil { - invalidParams.Add(request.NewErrParamRequired("Egress")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - if s.Protocol == nil { - invalidParams.Add(request.NewErrParamRequired("Protocol")) - } - if s.RuleAction == nil { - invalidParams.Add(request.NewErrParamRequired("RuleAction")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *CreateNetworkAclEntryInput) SetCidrBlock(v string) *CreateNetworkAclEntryInput { - s.CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkAclEntryInput) SetDryRun(v bool) *CreateNetworkAclEntryInput { - s.DryRun = &v - return s -} - -// SetEgress sets the Egress field's value. -func (s *CreateNetworkAclEntryInput) SetEgress(v bool) *CreateNetworkAclEntryInput { - s.Egress = &v - return s -} - -// SetIcmpTypeCode sets the IcmpTypeCode field's value. -func (s *CreateNetworkAclEntryInput) SetIcmpTypeCode(v *IcmpTypeCode) *CreateNetworkAclEntryInput { - s.IcmpTypeCode = v - return s -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *CreateNetworkAclEntryInput) SetIpv6CidrBlock(v string) *CreateNetworkAclEntryInput { - s.Ipv6CidrBlock = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *CreateNetworkAclEntryInput) SetNetworkAclId(v string) *CreateNetworkAclEntryInput { - s.NetworkAclId = &v - return s -} - -// SetPortRange sets the PortRange field's value. -func (s *CreateNetworkAclEntryInput) SetPortRange(v *PortRange) *CreateNetworkAclEntryInput { - s.PortRange = v - return s -} - -// SetProtocol sets the Protocol field's value. -func (s *CreateNetworkAclEntryInput) SetProtocol(v string) *CreateNetworkAclEntryInput { - s.Protocol = &v - return s -} - -// SetRuleAction sets the RuleAction field's value. -func (s *CreateNetworkAclEntryInput) SetRuleAction(v string) *CreateNetworkAclEntryInput { - s.RuleAction = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *CreateNetworkAclEntryInput) SetRuleNumber(v int64) *CreateNetworkAclEntryInput { - s.RuleNumber = &v - return s -} - -type CreateNetworkAclEntryOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CreateNetworkAclEntryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkAclEntryOutput) GoString() string { - return s.String() -} - -type CreateNetworkAclInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateNetworkAclInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkAclInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkAclInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkAclInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkAclInput) SetDryRun(v bool) *CreateNetworkAclInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateNetworkAclInput) SetVpcId(v string) *CreateNetworkAclInput { - s.VpcId = &v - return s -} - -type CreateNetworkAclOutput struct { - _ struct{} `type:"structure"` - - // Information about the network ACL. - NetworkAcl *NetworkAcl `locationName:"networkAcl" type:"structure"` -} - -// String returns the string representation -func (s CreateNetworkAclOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkAclOutput) GoString() string { - return s.String() -} - -// SetNetworkAcl sets the NetworkAcl field's value. -func (s *CreateNetworkAclOutput) SetNetworkAcl(v *NetworkAcl) *CreateNetworkAclOutput { - s.NetworkAcl = v - return s -} - -// Contains the parameters for CreateNetworkInterface. -type CreateNetworkInterfaceInput struct { - _ struct{} `type:"structure"` - - // A description for the network interface. - Description *string `locationName:"description" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of one or more security groups. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // Indicates the type of network interface. To create an Elastic Fabric Adapter - // (EFA), specify efa. For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) - // in the Amazon Elastic Compute Cloud User Guide. - InterfaceType *string `type:"string" enum:"NetworkInterfaceCreationType"` - - // The number of IPv6 addresses to assign to a network interface. Amazon EC2 - // automatically selects the IPv6 addresses from the subnet range. You can't - // use this option if specifying specific IPv6 addresses. If your subnet has - // the AssignIpv6AddressOnCreation attribute set to true, you can specify 0 - // to override this setting. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` - - // One or more specific IPv6 addresses from the IPv6 CIDR block range of your - // subnet. You can't use this option if you're specifying a number of IPv6 addresses. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6Addresses" locationNameList:"item" type:"list"` - - // The primary private IPv4 address of the network interface. If you don't specify - // an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR - // range. If you specify an IP address, you cannot indicate any IP addresses - // specified in privateIpAddresses as primary (only one IP address can be designated - // as primary). - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // One or more private IPv4 addresses. - PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddresses" locationNameList:"item" type:"list"` - - // The number of secondary private IPv4 addresses to assign to a network interface. - // When you specify a number of secondary IPv4 addresses, Amazon EC2 selects - // these IP addresses within the subnet's IPv4 CIDR range. You can't specify - // this option and specify more than one private IP address using privateIpAddresses. - // - // The number of IP addresses you can assign to a network interface varies by - // instance type. For more information, see IP Addresses Per ENI Per Instance - // Type (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) - // in the Amazon Virtual Private Cloud User Guide. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` - - // The ID of the subnet to associate with the network interface. - // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateNetworkInterfaceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkInterfaceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkInterfaceInput"} - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CreateNetworkInterfaceInput) SetDescription(v string) *CreateNetworkInterfaceInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkInterfaceInput) SetDryRun(v bool) *CreateNetworkInterfaceInput { - s.DryRun = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *CreateNetworkInterfaceInput) SetGroups(v []*string) *CreateNetworkInterfaceInput { - s.Groups = v - return s -} - -// SetInterfaceType sets the InterfaceType field's value. -func (s *CreateNetworkInterfaceInput) SetInterfaceType(v string) *CreateNetworkInterfaceInput { - s.InterfaceType = &v - return s -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *CreateNetworkInterfaceInput) SetIpv6AddressCount(v int64) *CreateNetworkInterfaceInput { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *CreateNetworkInterfaceInput) SetIpv6Addresses(v []*InstanceIpv6Address) *CreateNetworkInterfaceInput { - s.Ipv6Addresses = v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *CreateNetworkInterfaceInput) SetPrivateIpAddress(v string) *CreateNetworkInterfaceInput { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *CreateNetworkInterfaceInput) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *CreateNetworkInterfaceInput { - s.PrivateIpAddresses = v - return s -} - -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *CreateNetworkInterfaceInput) SetSecondaryPrivateIpAddressCount(v int64) *CreateNetworkInterfaceInput { - s.SecondaryPrivateIpAddressCount = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *CreateNetworkInterfaceInput) SetSubnetId(v string) *CreateNetworkInterfaceInput { - s.SubnetId = &v - return s -} - -// Contains the output of CreateNetworkInterface. -type CreateNetworkInterfaceOutput struct { - _ struct{} `type:"structure"` - - // Information about the network interface. - NetworkInterface *NetworkInterface `locationName:"networkInterface" type:"structure"` -} - -// String returns the string representation -func (s CreateNetworkInterfaceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkInterfaceOutput) GoString() string { - return s.String() -} - -// SetNetworkInterface sets the NetworkInterface field's value. -func (s *CreateNetworkInterfaceOutput) SetNetworkInterface(v *NetworkInterface) *CreateNetworkInterfaceOutput { - s.NetworkInterface = v - return s -} - -// Contains the parameters for CreateNetworkInterfacePermission. -type CreateNetworkInterfacePermissionInput struct { - _ struct{} `type:"structure"` - - // The AWS account ID. - AwsAccountId *string `type:"string"` - - // The AWS service. Currently not supported. - AwsService *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `type:"string" required:"true"` - - // The type of permission to grant. - // - // Permission is a required field - Permission *string `type:"string" required:"true" enum:"InterfacePermissionType"` -} - -// String returns the string representation -func (s CreateNetworkInterfacePermissionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkInterfacePermissionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkInterfacePermissionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkInterfacePermissionInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - if s.Permission == nil { - invalidParams.Add(request.NewErrParamRequired("Permission")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAwsAccountId sets the AwsAccountId field's value. -func (s *CreateNetworkInterfacePermissionInput) SetAwsAccountId(v string) *CreateNetworkInterfacePermissionInput { - s.AwsAccountId = &v - return s -} - -// SetAwsService sets the AwsService field's value. -func (s *CreateNetworkInterfacePermissionInput) SetAwsService(v string) *CreateNetworkInterfacePermissionInput { - s.AwsService = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkInterfacePermissionInput) SetDryRun(v bool) *CreateNetworkInterfacePermissionInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *CreateNetworkInterfacePermissionInput) SetNetworkInterfaceId(v string) *CreateNetworkInterfacePermissionInput { - s.NetworkInterfaceId = &v - return s -} - -// SetPermission sets the Permission field's value. -func (s *CreateNetworkInterfacePermissionInput) SetPermission(v string) *CreateNetworkInterfacePermissionInput { - s.Permission = &v - return s -} - -// Contains the output of CreateNetworkInterfacePermission. -type CreateNetworkInterfacePermissionOutput struct { - _ struct{} `type:"structure"` - - // Information about the permission for the network interface. - InterfacePermission *NetworkInterfacePermission `locationName:"interfacePermission" type:"structure"` -} - -// String returns the string representation -func (s CreateNetworkInterfacePermissionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkInterfacePermissionOutput) GoString() string { - return s.String() -} - -// SetInterfacePermission sets the InterfacePermission field's value. -func (s *CreateNetworkInterfacePermissionOutput) SetInterfacePermission(v *NetworkInterfacePermission) *CreateNetworkInterfacePermissionOutput { - s.InterfacePermission = v - return s -} - -type CreatePlacementGroupInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // A name for the placement group. Must be unique within the scope of your account - // for the Region. - // - // Constraints: Up to 255 ASCII characters - GroupName *string `locationName:"groupName" type:"string"` - - // The number of partitions. Valid only when Strategy is set to partition. - PartitionCount *int64 `type:"integer"` - - // The placement strategy. - Strategy *string `locationName:"strategy" type:"string" enum:"PlacementStrategy"` -} - -// String returns the string representation -func (s CreatePlacementGroupInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreatePlacementGroupInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *CreatePlacementGroupInput) SetDryRun(v bool) *CreatePlacementGroupInput { - s.DryRun = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *CreatePlacementGroupInput) SetGroupName(v string) *CreatePlacementGroupInput { - s.GroupName = &v - return s -} - -// SetPartitionCount sets the PartitionCount field's value. -func (s *CreatePlacementGroupInput) SetPartitionCount(v int64) *CreatePlacementGroupInput { - s.PartitionCount = &v - return s -} - -// SetStrategy sets the Strategy field's value. -func (s *CreatePlacementGroupInput) SetStrategy(v string) *CreatePlacementGroupInput { - s.Strategy = &v - return s -} - -type CreatePlacementGroupOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CreatePlacementGroupOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreatePlacementGroupOutput) GoString() string { - return s.String() -} - -// Contains the parameters for CreateReservedInstancesListing. -type CreateReservedInstancesListingInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure idempotency of your - // listings. This helps avoid duplicate listings. For more information, see - // Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // ClientToken is a required field - ClientToken *string `locationName:"clientToken" type:"string" required:"true"` - - // The number of instances that are a part of a Reserved Instance account to - // be listed in the Reserved Instance Marketplace. This number should be less - // than or equal to the instance count associated with the Reserved Instance - // ID specified in this call. - // - // InstanceCount is a required field - InstanceCount *int64 `locationName:"instanceCount" type:"integer" required:"true"` - - // A list specifying the price of the Standard Reserved Instance for each month - // remaining in the Reserved Instance term. - // - // PriceSchedules is a required field - PriceSchedules []*PriceScheduleSpecification `locationName:"priceSchedules" locationNameList:"item" type:"list" required:"true"` - - // The ID of the active Standard Reserved Instance. - // - // ReservedInstancesId is a required field - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateReservedInstancesListingInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateReservedInstancesListingInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateReservedInstancesListingInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateReservedInstancesListingInput"} - if s.ClientToken == nil { - invalidParams.Add(request.NewErrParamRequired("ClientToken")) - } - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.PriceSchedules == nil { - invalidParams.Add(request.NewErrParamRequired("PriceSchedules")) - } - if s.ReservedInstancesId == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateReservedInstancesListingInput) SetClientToken(v string) *CreateReservedInstancesListingInput { - s.ClientToken = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *CreateReservedInstancesListingInput) SetInstanceCount(v int64) *CreateReservedInstancesListingInput { - s.InstanceCount = &v - return s -} - -// SetPriceSchedules sets the PriceSchedules field's value. -func (s *CreateReservedInstancesListingInput) SetPriceSchedules(v []*PriceScheduleSpecification) *CreateReservedInstancesListingInput { - s.PriceSchedules = v - return s -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *CreateReservedInstancesListingInput) SetReservedInstancesId(v string) *CreateReservedInstancesListingInput { - s.ReservedInstancesId = &v - return s -} - -// Contains the output of CreateReservedInstancesListing. -type CreateReservedInstancesListingOutput struct { - _ struct{} `type:"structure"` - - // Information about the Standard Reserved Instance listing. - ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateReservedInstancesListingOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateReservedInstancesListingOutput) GoString() string { - return s.String() -} - -// SetReservedInstancesListings sets the ReservedInstancesListings field's value. -func (s *CreateReservedInstancesListingOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *CreateReservedInstancesListingOutput { - s.ReservedInstancesListings = v - return s -} - -type CreateRouteInput struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR address block used for the destination match. Routing decisions - // are based on the most specific match. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR block used for the destination match. Routing decisions are - // based on the most specific match. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // [IPv6 traffic only] The ID of an egress-only internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` - - // The ID of an internet gateway or virtual private gateway attached to your - // VPC. - GatewayId *string `locationName:"gatewayId" type:"string"` - - // The ID of a NAT instance in your VPC. The operation fails if you specify - // an instance ID unless exactly one network interface is attached. - InstanceId *string `locationName:"instanceId" type:"string"` - - // [IPv4 traffic only] The ID of a NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` - - // The ID of a network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The ID of the route table for the route. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` - - // The ID of a transit gateway. - TransitGatewayId *string `type:"string"` - - // The ID of a VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s CreateRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateRouteInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateRouteInput) SetDestinationCidrBlock(v string) *CreateRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *CreateRouteInput) SetDestinationIpv6CidrBlock(v string) *CreateRouteInput { - s.DestinationIpv6CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateRouteInput) SetDryRun(v bool) *CreateRouteInput { - s.DryRun = &v - return s -} - -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *CreateRouteInput) SetEgressOnlyInternetGatewayId(v string) *CreateRouteInput { - s.EgressOnlyInternetGatewayId = &v - return s -} - -// SetGatewayId sets the GatewayId field's value. -func (s *CreateRouteInput) SetGatewayId(v string) *CreateRouteInput { - s.GatewayId = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *CreateRouteInput) SetInstanceId(v string) *CreateRouteInput { - s.InstanceId = &v - return s -} - -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *CreateRouteInput) SetNatGatewayId(v string) *CreateRouteInput { - s.NatGatewayId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *CreateRouteInput) SetNetworkInterfaceId(v string) *CreateRouteInput { - s.NetworkInterfaceId = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *CreateRouteInput) SetRouteTableId(v string) *CreateRouteInput { - s.RouteTableId = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *CreateRouteInput) SetTransitGatewayId(v string) *CreateRouteInput { - s.TransitGatewayId = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *CreateRouteInput) SetVpcPeeringConnectionId(v string) *CreateRouteInput { - s.VpcPeeringConnectionId = &v - return s -} - -type CreateRouteOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s CreateRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateRouteOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *CreateRouteOutput) SetReturn(v bool) *CreateRouteOutput { - s.Return = &v - return s -} - -type CreateRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateRouteTableInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateRouteTableInput) SetDryRun(v bool) *CreateRouteTableInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateRouteTableInput) SetVpcId(v string) *CreateRouteTableInput { - s.VpcId = &v - return s -} - -type CreateRouteTableOutput struct { - _ struct{} `type:"structure"` - - // Information about the route table. - RouteTable *RouteTable `locationName:"routeTable" type:"structure"` -} - -// String returns the string representation -func (s CreateRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateRouteTableOutput) GoString() string { - return s.String() -} - -// SetRouteTable sets the RouteTable field's value. -func (s *CreateRouteTableOutput) SetRouteTable(v *RouteTable) *CreateRouteTableOutput { - s.RouteTable = v - return s -} - -type CreateSecurityGroupInput struct { - _ struct{} `type:"structure"` - - // A description for the security group. This is informational only. - // - // Constraints: Up to 255 characters in length - // - // Constraints for EC2-Classic: ASCII characters - // - // Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* - // - // Description is a required field - Description *string `locationName:"GroupDescription" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The name of the security group. - // - // Constraints: Up to 255 characters in length. Cannot start with sg-. - // - // Constraints for EC2-Classic: ASCII characters - // - // Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* - // - // GroupName is a required field - GroupName *string `type:"string" required:"true"` - - // [EC2-VPC] The ID of the VPC. Required for EC2-VPC. - VpcId *string `type:"string"` -} - -// String returns the string representation -func (s CreateSecurityGroupInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSecurityGroupInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSecurityGroupInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSecurityGroupInput"} - if s.Description == nil { - invalidParams.Add(request.NewErrParamRequired("Description")) - } - if s.GroupName == nil { - invalidParams.Add(request.NewErrParamRequired("GroupName")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CreateSecurityGroupInput) SetDescription(v string) *CreateSecurityGroupInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateSecurityGroupInput) SetDryRun(v bool) *CreateSecurityGroupInput { - s.DryRun = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *CreateSecurityGroupInput) SetGroupName(v string) *CreateSecurityGroupInput { - s.GroupName = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateSecurityGroupInput) SetVpcId(v string) *CreateSecurityGroupInput { - s.VpcId = &v - return s -} - -type CreateSecurityGroupOutput struct { - _ struct{} `type:"structure"` - - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` -} - -// String returns the string representation -func (s CreateSecurityGroupOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSecurityGroupOutput) GoString() string { - return s.String() -} - -// SetGroupId sets the GroupId field's value. -func (s *CreateSecurityGroupOutput) SetGroupId(v string) *CreateSecurityGroupOutput { - s.GroupId = &v - return s -} - -type CreateSnapshotInput struct { - _ struct{} `type:"structure"` - - // A description for the snapshot. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The tags to apply to the snapshot during creation. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // The ID of the EBS volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateSnapshotInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSnapshotInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSnapshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSnapshotInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CreateSnapshotInput) SetDescription(v string) *CreateSnapshotInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateSnapshotInput) SetDryRun(v bool) *CreateSnapshotInput { - s.DryRun = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateSnapshotInput) SetTagSpecifications(v []*TagSpecification) *CreateSnapshotInput { - s.TagSpecifications = v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *CreateSnapshotInput) SetVolumeId(v string) *CreateSnapshotInput { - s.VolumeId = &v - return s -} - -type CreateSnapshotsInput struct { - _ struct{} `type:"structure"` - - // Copies the tags from the specified volume to corresponding snapshot. - CopyTagsFromSource *string `type:"string" enum:"CopyTagsFromSource"` - - // A description propagated to every snapshot specified by the instance. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The instance to specify which volumes should be included in the snapshots. - // - // InstanceSpecification is a required field - InstanceSpecification *InstanceSpecification `type:"structure" required:"true"` - - // Tags to apply to every snapshot specified by the instance. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateSnapshotsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSnapshotsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSnapshotsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSnapshotsInput"} - if s.InstanceSpecification == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceSpecification")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCopyTagsFromSource sets the CopyTagsFromSource field's value. -func (s *CreateSnapshotsInput) SetCopyTagsFromSource(v string) *CreateSnapshotsInput { - s.CopyTagsFromSource = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateSnapshotsInput) SetDescription(v string) *CreateSnapshotsInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateSnapshotsInput) SetDryRun(v bool) *CreateSnapshotsInput { - s.DryRun = &v - return s -} - -// SetInstanceSpecification sets the InstanceSpecification field's value. -func (s *CreateSnapshotsInput) SetInstanceSpecification(v *InstanceSpecification) *CreateSnapshotsInput { - s.InstanceSpecification = v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateSnapshotsInput) SetTagSpecifications(v []*TagSpecification) *CreateSnapshotsInput { - s.TagSpecifications = v - return s -} - -type CreateSnapshotsOutput struct { - _ struct{} `type:"structure"` - - // List of snapshots. - Snapshots []*SnapshotInfo `locationName:"snapshotSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateSnapshotsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSnapshotsOutput) GoString() string { - return s.String() -} - -// SetSnapshots sets the Snapshots field's value. -func (s *CreateSnapshotsOutput) SetSnapshots(v []*SnapshotInfo) *CreateSnapshotsOutput { - s.Snapshots = v - return s -} - -// Contains the parameters for CreateSpotDatafeedSubscription. -type CreateSpotDatafeedSubscriptionInput struct { - _ struct{} `type:"structure"` - - // The Amazon S3 bucket in which to store the Spot Instance data feed. - // - // Bucket is a required field - Bucket *string `locationName:"bucket" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // A prefix for the data feed file names. - Prefix *string `locationName:"prefix" type:"string"` -} - -// String returns the string representation -func (s CreateSpotDatafeedSubscriptionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSpotDatafeedSubscriptionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSpotDatafeedSubscriptionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSpotDatafeedSubscriptionInput"} - if s.Bucket == nil { - invalidParams.Add(request.NewErrParamRequired("Bucket")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBucket sets the Bucket field's value. -func (s *CreateSpotDatafeedSubscriptionInput) SetBucket(v string) *CreateSpotDatafeedSubscriptionInput { - s.Bucket = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateSpotDatafeedSubscriptionInput) SetDryRun(v bool) *CreateSpotDatafeedSubscriptionInput { - s.DryRun = &v - return s -} - -// SetPrefix sets the Prefix field's value. -func (s *CreateSpotDatafeedSubscriptionInput) SetPrefix(v string) *CreateSpotDatafeedSubscriptionInput { - s.Prefix = &v - return s -} - -// Contains the output of CreateSpotDatafeedSubscription. -type CreateSpotDatafeedSubscriptionOutput struct { - _ struct{} `type:"structure"` - - // The Spot Instance data feed subscription. - SpotDatafeedSubscription *SpotDatafeedSubscription `locationName:"spotDatafeedSubscription" type:"structure"` -} - -// String returns the string representation -func (s CreateSpotDatafeedSubscriptionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSpotDatafeedSubscriptionOutput) GoString() string { - return s.String() -} - -// SetSpotDatafeedSubscription sets the SpotDatafeedSubscription field's value. -func (s *CreateSpotDatafeedSubscriptionOutput) SetSpotDatafeedSubscription(v *SpotDatafeedSubscription) *CreateSpotDatafeedSubscriptionOutput { - s.SpotDatafeedSubscription = v - return s -} - -type CreateSubnetInput struct { - _ struct{} `type:"structure"` - - // The Availability Zone for the subnet. - // - // Default: AWS selects one for you. If you create more than one subnet in your - // VPC, we may not necessarily select a different zone for each subnet. - AvailabilityZone *string `type:"string"` - - // The AZ ID of the subnet. - AvailabilityZoneId *string `type:"string"` - - // The IPv4 network range for the subnet, in CIDR notation. For example, 10.0.0.0/24. - // - // CidrBlock is a required field - CidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IPv6 network range for the subnet, in CIDR notation. The subnet size - // must use a /64 prefix length. - Ipv6CidrBlock *string `type:"string"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateSubnetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSubnetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSubnetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSubnetInput"} - if s.CidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("CidrBlock")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateSubnetInput) SetAvailabilityZone(v string) *CreateSubnetInput { - s.AvailabilityZone = &v - return s -} - -// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. -func (s *CreateSubnetInput) SetAvailabilityZoneId(v string) *CreateSubnetInput { - s.AvailabilityZoneId = &v - return s -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *CreateSubnetInput) SetCidrBlock(v string) *CreateSubnetInput { - s.CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateSubnetInput) SetDryRun(v bool) *CreateSubnetInput { - s.DryRun = &v - return s -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *CreateSubnetInput) SetIpv6CidrBlock(v string) *CreateSubnetInput { - s.Ipv6CidrBlock = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateSubnetInput) SetVpcId(v string) *CreateSubnetInput { - s.VpcId = &v - return s -} - -type CreateSubnetOutput struct { - _ struct{} `type:"structure"` - - // Information about the subnet. - Subnet *Subnet `locationName:"subnet" type:"structure"` -} - -// String returns the string representation -func (s CreateSubnetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateSubnetOutput) GoString() string { - return s.String() -} - -// SetSubnet sets the Subnet field's value. -func (s *CreateSubnetOutput) SetSubnet(v *Subnet) *CreateSubnetOutput { - s.Subnet = v - return s -} - -type CreateTagsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the resources, separated by spaces. - // - // Constraints: Up to 1000 resource IDs. We recommend breaking up this request - // into smaller batches. - // - // Resources is a required field - Resources []*string `locationName:"ResourceId" type:"list" required:"true"` - - // The tags. The value parameter is required, but if you don't want the tag - // to have a value, specify the parameter with no value, and we set the value - // to an empty string. - // - // Tags is a required field - Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s CreateTagsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTagsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTagsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTagsInput"} - if s.Resources == nil { - invalidParams.Add(request.NewErrParamRequired("Resources")) - } - if s.Tags == nil { - invalidParams.Add(request.NewErrParamRequired("Tags")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTagsInput) SetDryRun(v bool) *CreateTagsInput { - s.DryRun = &v - return s -} - -// SetResources sets the Resources field's value. -func (s *CreateTagsInput) SetResources(v []*string) *CreateTagsInput { - s.Resources = v - return s -} - -// SetTags sets the Tags field's value. -func (s *CreateTagsInput) SetTags(v []*Tag) *CreateTagsInput { - s.Tags = v - return s -} - -type CreateTagsOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CreateTagsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTagsOutput) GoString() string { - return s.String() -} - -type CreateTrafficMirrorFilterInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The description of the Traffic Mirror filter. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The tags to assign to a Traffic Mirror filter. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateTrafficMirrorFilterInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorFilterInput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorFilterInput) SetClientToken(v string) *CreateTrafficMirrorFilterInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateTrafficMirrorFilterInput) SetDescription(v string) *CreateTrafficMirrorFilterInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTrafficMirrorFilterInput) SetDryRun(v bool) *CreateTrafficMirrorFilterInput { - s.DryRun = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateTrafficMirrorFilterInput) SetTagSpecifications(v []*TagSpecification) *CreateTrafficMirrorFilterInput { - s.TagSpecifications = v - return s -} - -type CreateTrafficMirrorFilterOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the Traffic Mirror filter. - TrafficMirrorFilter *TrafficMirrorFilter `locationName:"trafficMirrorFilter" type:"structure"` -} - -// String returns the string representation -func (s CreateTrafficMirrorFilterOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorFilterOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorFilterOutput) SetClientToken(v string) *CreateTrafficMirrorFilterOutput { - s.ClientToken = &v - return s -} - -// SetTrafficMirrorFilter sets the TrafficMirrorFilter field's value. -func (s *CreateTrafficMirrorFilterOutput) SetTrafficMirrorFilter(v *TrafficMirrorFilter) *CreateTrafficMirrorFilterOutput { - s.TrafficMirrorFilter = v - return s -} - -type CreateTrafficMirrorFilterRuleInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The description of the Traffic Mirror rule. - Description *string `type:"string"` - - // The destination CIDR block to assign to the Traffic Mirror rule. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // The destination port range. - DestinationPortRange *TrafficMirrorPortRangeRequest `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The protocol, for example UDP, to assign to the Traffic Mirror rule. - // - // For information about the protocol value, see Protocol Numbers (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) - // on the Internet Assigned Numbers Authority (IANA) website. - Protocol *int64 `type:"integer"` - - // The action to take (accept | reject) on the filtered traffic. - // - // RuleAction is a required field - RuleAction *string `type:"string" required:"true" enum:"TrafficMirrorRuleAction"` - - // The number of the Traffic Mirror rule. This number must be unique for each - // Traffic Mirror rule in a given direction. The rules are processed in ascending - // order by rule number. - // - // RuleNumber is a required field - RuleNumber *int64 `type:"integer" required:"true"` - - // The source CIDR block to assign to the Traffic Mirror rule. - // - // SourceCidrBlock is a required field - SourceCidrBlock *string `type:"string" required:"true"` - - // The source port range. - SourcePortRange *TrafficMirrorPortRangeRequest `type:"structure"` - - // The type of traffic (ingress | egress). - // - // TrafficDirection is a required field - TrafficDirection *string `type:"string" required:"true" enum:"TrafficDirection"` - - // The ID of the filter that this rule is associated with. - // - // TrafficMirrorFilterId is a required field - TrafficMirrorFilterId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateTrafficMirrorFilterRuleInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorFilterRuleInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTrafficMirrorFilterRuleInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTrafficMirrorFilterRuleInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.RuleAction == nil { - invalidParams.Add(request.NewErrParamRequired("RuleAction")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) - } - if s.SourceCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("SourceCidrBlock")) - } - if s.TrafficDirection == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficDirection")) - } - if s.TrafficMirrorFilterId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetClientToken(v string) *CreateTrafficMirrorFilterRuleInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetDescription(v string) *CreateTrafficMirrorFilterRuleInput { - s.Description = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetDestinationCidrBlock(v string) *CreateTrafficMirrorFilterRuleInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationPortRange sets the DestinationPortRange field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetDestinationPortRange(v *TrafficMirrorPortRangeRequest) *CreateTrafficMirrorFilterRuleInput { - s.DestinationPortRange = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetDryRun(v bool) *CreateTrafficMirrorFilterRuleInput { - s.DryRun = &v - return s -} - -// SetProtocol sets the Protocol field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetProtocol(v int64) *CreateTrafficMirrorFilterRuleInput { - s.Protocol = &v - return s -} - -// SetRuleAction sets the RuleAction field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetRuleAction(v string) *CreateTrafficMirrorFilterRuleInput { - s.RuleAction = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetRuleNumber(v int64) *CreateTrafficMirrorFilterRuleInput { - s.RuleNumber = &v - return s -} - -// SetSourceCidrBlock sets the SourceCidrBlock field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetSourceCidrBlock(v string) *CreateTrafficMirrorFilterRuleInput { - s.SourceCidrBlock = &v - return s -} - -// SetSourcePortRange sets the SourcePortRange field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetSourcePortRange(v *TrafficMirrorPortRangeRequest) *CreateTrafficMirrorFilterRuleInput { - s.SourcePortRange = v - return s -} - -// SetTrafficDirection sets the TrafficDirection field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetTrafficDirection(v string) *CreateTrafficMirrorFilterRuleInput { - s.TrafficDirection = &v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *CreateTrafficMirrorFilterRuleInput) SetTrafficMirrorFilterId(v string) *CreateTrafficMirrorFilterRuleInput { - s.TrafficMirrorFilterId = &v - return s -} - -type CreateTrafficMirrorFilterRuleOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // The Traffic Mirror rule. - TrafficMirrorFilterRule *TrafficMirrorFilterRule `locationName:"trafficMirrorFilterRule" type:"structure"` -} - -// String returns the string representation -func (s CreateTrafficMirrorFilterRuleOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorFilterRuleOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorFilterRuleOutput) SetClientToken(v string) *CreateTrafficMirrorFilterRuleOutput { - s.ClientToken = &v - return s -} - -// SetTrafficMirrorFilterRule sets the TrafficMirrorFilterRule field's value. -func (s *CreateTrafficMirrorFilterRuleOutput) SetTrafficMirrorFilterRule(v *TrafficMirrorFilterRule) *CreateTrafficMirrorFilterRuleOutput { - s.TrafficMirrorFilterRule = v - return s -} - -type CreateTrafficMirrorSessionInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The description of the Traffic Mirror session. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the source network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `type:"string" required:"true"` - - // The number of bytes in each packet to mirror. These are bytes after the VXLAN - // header. Do not specify this parameter when you want to mirror the entire - // packet. To mirror a subset of the packet, set this to the length (in bytes) - // that you want to mirror. For example, if you set this value to 100, then - // the first 100 bytes that meet the filter criteria are copied to the target. - // - // If you do not want to mirror the entire packet, use the PacketLength parameter - // to specify the number of bytes in each packet to mirror. - PacketLength *int64 `type:"integer"` - - // The session number determines the order in which sessions are evaluated when - // an interface is used by multiple sessions. The first session with a matching - // filter is the one that mirrors the packets. - // - // Valid values are 1-32766. - // - // SessionNumber is a required field - SessionNumber *int64 `type:"integer" required:"true"` - - // The tags to assign to a Traffic Mirror session. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // The ID of the Traffic Mirror filter. - // - // TrafficMirrorFilterId is a required field - TrafficMirrorFilterId *string `type:"string" required:"true"` - - // The ID of the Traffic Mirror target. - // - // TrafficMirrorTargetId is a required field - TrafficMirrorTargetId *string `type:"string" required:"true"` - - // The VXLAN ID for the Traffic Mirror session. For more information about the - // VXLAN protocol, see RFC 7348 (https://tools.ietf.org/html/rfc7348). If you - // do not specify a VirtualNetworkId, an account-wide unique id is chosen at - // random. - VirtualNetworkId *int64 `type:"integer"` -} - -// String returns the string representation -func (s CreateTrafficMirrorSessionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorSessionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTrafficMirrorSessionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTrafficMirrorSessionInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - if s.SessionNumber == nil { - invalidParams.Add(request.NewErrParamRequired("SessionNumber")) - } - if s.TrafficMirrorFilterId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) - } - if s.TrafficMirrorTargetId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorTargetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorSessionInput) SetClientToken(v string) *CreateTrafficMirrorSessionInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateTrafficMirrorSessionInput) SetDescription(v string) *CreateTrafficMirrorSessionInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTrafficMirrorSessionInput) SetDryRun(v bool) *CreateTrafficMirrorSessionInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *CreateTrafficMirrorSessionInput) SetNetworkInterfaceId(v string) *CreateTrafficMirrorSessionInput { - s.NetworkInterfaceId = &v - return s -} - -// SetPacketLength sets the PacketLength field's value. -func (s *CreateTrafficMirrorSessionInput) SetPacketLength(v int64) *CreateTrafficMirrorSessionInput { - s.PacketLength = &v - return s -} - -// SetSessionNumber sets the SessionNumber field's value. -func (s *CreateTrafficMirrorSessionInput) SetSessionNumber(v int64) *CreateTrafficMirrorSessionInput { - s.SessionNumber = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateTrafficMirrorSessionInput) SetTagSpecifications(v []*TagSpecification) *CreateTrafficMirrorSessionInput { - s.TagSpecifications = v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *CreateTrafficMirrorSessionInput) SetTrafficMirrorFilterId(v string) *CreateTrafficMirrorSessionInput { - s.TrafficMirrorFilterId = &v - return s -} - -// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. -func (s *CreateTrafficMirrorSessionInput) SetTrafficMirrorTargetId(v string) *CreateTrafficMirrorSessionInput { - s.TrafficMirrorTargetId = &v - return s -} - -// SetVirtualNetworkId sets the VirtualNetworkId field's value. -func (s *CreateTrafficMirrorSessionInput) SetVirtualNetworkId(v int64) *CreateTrafficMirrorSessionInput { - s.VirtualNetworkId = &v - return s -} - -type CreateTrafficMirrorSessionOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the Traffic Mirror session. - TrafficMirrorSession *TrafficMirrorSession `locationName:"trafficMirrorSession" type:"structure"` -} - -// String returns the string representation -func (s CreateTrafficMirrorSessionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorSessionOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorSessionOutput) SetClientToken(v string) *CreateTrafficMirrorSessionOutput { - s.ClientToken = &v - return s -} - -// SetTrafficMirrorSession sets the TrafficMirrorSession field's value. -func (s *CreateTrafficMirrorSessionOutput) SetTrafficMirrorSession(v *TrafficMirrorSession) *CreateTrafficMirrorSessionOutput { - s.TrafficMirrorSession = v - return s -} - -type CreateTrafficMirrorTargetInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // The description of the Traffic Mirror target. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The network interface ID that is associated with the target. - NetworkInterfaceId *string `type:"string"` - - // The Amazon Resource Name (ARN) of the Network Load Balancer that is associated - // with the target. - NetworkLoadBalancerArn *string `type:"string"` - - // The tags to assign to the Traffic Mirror target. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateTrafficMirrorTargetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorTargetInput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorTargetInput) SetClientToken(v string) *CreateTrafficMirrorTargetInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *CreateTrafficMirrorTargetInput) SetDescription(v string) *CreateTrafficMirrorTargetInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTrafficMirrorTargetInput) SetDryRun(v bool) *CreateTrafficMirrorTargetInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *CreateTrafficMirrorTargetInput) SetNetworkInterfaceId(v string) *CreateTrafficMirrorTargetInput { - s.NetworkInterfaceId = &v - return s -} - -// SetNetworkLoadBalancerArn sets the NetworkLoadBalancerArn field's value. -func (s *CreateTrafficMirrorTargetInput) SetNetworkLoadBalancerArn(v string) *CreateTrafficMirrorTargetInput { - s.NetworkLoadBalancerArn = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateTrafficMirrorTargetInput) SetTagSpecifications(v []*TagSpecification) *CreateTrafficMirrorTargetInput { - s.TagSpecifications = v - return s -} - -type CreateTrafficMirrorTargetOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the Traffic Mirror target. - TrafficMirrorTarget *TrafficMirrorTarget `locationName:"trafficMirrorTarget" type:"structure"` -} - -// String returns the string representation -func (s CreateTrafficMirrorTargetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTrafficMirrorTargetOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateTrafficMirrorTargetOutput) SetClientToken(v string) *CreateTrafficMirrorTargetOutput { - s.ClientToken = &v - return s -} - -// SetTrafficMirrorTarget sets the TrafficMirrorTarget field's value. -func (s *CreateTrafficMirrorTargetOutput) SetTrafficMirrorTarget(v *TrafficMirrorTarget) *CreateTrafficMirrorTargetOutput { - s.TrafficMirrorTarget = v - return s -} - -type CreateTransitGatewayInput struct { - _ struct{} `type:"structure"` - - // A description of the transit gateway. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The transit gateway options. - Options *TransitGatewayRequestOptions `type:"structure"` - - // The tags to apply to the transit gateway. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateTransitGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayInput) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *CreateTransitGatewayInput) SetDescription(v string) *CreateTransitGatewayInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTransitGatewayInput) SetDryRun(v bool) *CreateTransitGatewayInput { - s.DryRun = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *CreateTransitGatewayInput) SetOptions(v *TransitGatewayRequestOptions) *CreateTransitGatewayInput { - s.Options = v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateTransitGatewayInput) SetTagSpecifications(v []*TagSpecification) *CreateTransitGatewayInput { - s.TagSpecifications = v - return s -} - -type CreateTransitGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the transit gateway. - TransitGateway *TransitGateway `locationName:"transitGateway" type:"structure"` -} - -// String returns the string representation -func (s CreateTransitGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayOutput) GoString() string { - return s.String() -} - -// SetTransitGateway sets the TransitGateway field's value. -func (s *CreateTransitGatewayOutput) SetTransitGateway(v *TransitGateway) *CreateTransitGatewayOutput { - s.TransitGateway = v - return s -} - -type CreateTransitGatewayRouteInput struct { - _ struct{} `type:"structure"` - - // Indicates whether to drop traffic that matches this route. - Blackhole *bool `type:"boolean"` - - // The CIDR range used for destination matches. Routing decisions are based - // on the most specific match. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `type:"string"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateTransitGatewayRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTransitGatewayRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTransitGatewayRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBlackhole sets the Blackhole field's value. -func (s *CreateTransitGatewayRouteInput) SetBlackhole(v bool) *CreateTransitGatewayRouteInput { - s.Blackhole = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateTransitGatewayRouteInput) SetDestinationCidrBlock(v string) *CreateTransitGatewayRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTransitGatewayRouteInput) SetDryRun(v bool) *CreateTransitGatewayRouteInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *CreateTransitGatewayRouteInput) SetTransitGatewayAttachmentId(v string) *CreateTransitGatewayRouteInput { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *CreateTransitGatewayRouteInput) SetTransitGatewayRouteTableId(v string) *CreateTransitGatewayRouteInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type CreateTransitGatewayRouteOutput struct { - _ struct{} `type:"structure"` - - // Information about the route. - Route *TransitGatewayRoute `locationName:"route" type:"structure"` -} - -// String returns the string representation -func (s CreateTransitGatewayRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayRouteOutput) GoString() string { - return s.String() -} - -// SetRoute sets the Route field's value. -func (s *CreateTransitGatewayRouteOutput) SetRoute(v *TransitGatewayRoute) *CreateTransitGatewayRouteOutput { - s.Route = v - return s -} - -type CreateTransitGatewayRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The tags to apply to the transit gateway route table. - TagSpecifications []*TagSpecification `locationNameList:"item" type:"list"` - - // The ID of the transit gateway. - // - // TransitGatewayId is a required field - TransitGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateTransitGatewayRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTransitGatewayRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTransitGatewayRouteTableInput"} - if s.TransitGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTransitGatewayRouteTableInput) SetDryRun(v bool) *CreateTransitGatewayRouteTableInput { - s.DryRun = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateTransitGatewayRouteTableInput) SetTagSpecifications(v []*TagSpecification) *CreateTransitGatewayRouteTableInput { - s.TagSpecifications = v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *CreateTransitGatewayRouteTableInput) SetTransitGatewayId(v string) *CreateTransitGatewayRouteTableInput { - s.TransitGatewayId = &v - return s -} - -type CreateTransitGatewayRouteTableOutput struct { - _ struct{} `type:"structure"` - - // Information about the transit gateway route table. - TransitGatewayRouteTable *TransitGatewayRouteTable `locationName:"transitGatewayRouteTable" type:"structure"` -} - -// String returns the string representation -func (s CreateTransitGatewayRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayRouteTableOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayRouteTable sets the TransitGatewayRouteTable field's value. -func (s *CreateTransitGatewayRouteTableOutput) SetTransitGatewayRouteTable(v *TransitGatewayRouteTable) *CreateTransitGatewayRouteTableOutput { - s.TransitGatewayRouteTable = v - return s -} - -type CreateTransitGatewayVpcAttachmentInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The VPC attachment options. - Options *CreateTransitGatewayVpcAttachmentRequestOptions `type:"structure"` - - // The IDs of one or more subnets. You can specify only one subnet per Availability - // Zone. You must specify at least one subnet, but we recommend that you specify - // two subnets for better availability. The transit gateway uses one IP address - // from each specified subnet. - // - // SubnetIds is a required field - SubnetIds []*string `locationNameList:"item" type:"list" required:"true"` - - // The tags to apply to the VPC attachment. - TagSpecifications []*TagSpecification `locationNameList:"item" type:"list"` - - // The ID of the transit gateway. - // - // TransitGatewayId is a required field - TransitGatewayId *string `type:"string" required:"true"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateTransitGatewayVpcAttachmentInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayVpcAttachmentInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTransitGatewayVpcAttachmentInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTransitGatewayVpcAttachmentInput"} - if s.SubnetIds == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetIds")) - } - if s.TransitGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *CreateTransitGatewayVpcAttachmentInput { - s.DryRun = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *CreateTransitGatewayVpcAttachmentInput) SetOptions(v *CreateTransitGatewayVpcAttachmentRequestOptions) *CreateTransitGatewayVpcAttachmentInput { - s.Options = v - return s -} - -// SetSubnetIds sets the SubnetIds field's value. -func (s *CreateTransitGatewayVpcAttachmentInput) SetSubnetIds(v []*string) *CreateTransitGatewayVpcAttachmentInput { - s.SubnetIds = v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateTransitGatewayVpcAttachmentInput) SetTagSpecifications(v []*TagSpecification) *CreateTransitGatewayVpcAttachmentInput { - s.TagSpecifications = v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *CreateTransitGatewayVpcAttachmentInput) SetTransitGatewayId(v string) *CreateTransitGatewayVpcAttachmentInput { - s.TransitGatewayId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateTransitGatewayVpcAttachmentInput) SetVpcId(v string) *CreateTransitGatewayVpcAttachmentInput { - s.VpcId = &v - return s -} - -type CreateTransitGatewayVpcAttachmentOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC attachment. - TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` -} - -// String returns the string representation -func (s CreateTransitGatewayVpcAttachmentOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayVpcAttachmentOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. -func (s *CreateTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *CreateTransitGatewayVpcAttachmentOutput { - s.TransitGatewayVpcAttachment = v - return s -} - -// Describes the options for a VPC attachment. -type CreateTransitGatewayVpcAttachmentRequestOptions struct { - _ struct{} `type:"structure"` - - // Enable or disable DNS support. The default is enable. - DnsSupport *string `type:"string" enum:"DnsSupportValue"` - - // Enable or disable IPv6 support. The default is enable. - Ipv6Support *string `type:"string" enum:"Ipv6SupportValue"` -} - -// String returns the string representation -func (s CreateTransitGatewayVpcAttachmentRequestOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateTransitGatewayVpcAttachmentRequestOptions) GoString() string { - return s.String() -} - -// SetDnsSupport sets the DnsSupport field's value. -func (s *CreateTransitGatewayVpcAttachmentRequestOptions) SetDnsSupport(v string) *CreateTransitGatewayVpcAttachmentRequestOptions { - s.DnsSupport = &v - return s -} - -// SetIpv6Support sets the Ipv6Support field's value. -func (s *CreateTransitGatewayVpcAttachmentRequestOptions) SetIpv6Support(v string) *CreateTransitGatewayVpcAttachmentRequestOptions { - s.Ipv6Support = &v - return s -} - -type CreateVolumeInput struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which to create the volume. - // - // AvailabilityZone is a required field - AvailabilityZone *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Specifies whether the volume should be encrypted. The effect of setting the - // encryption state to true depends on the volume origin (new or from a snapshot), - // starting encryption state, ownership, and whether encryption by default is - // enabled. For more information, see Encryption by Default (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Encrypted Amazon EBS volumes must be attached to instances that support Amazon - // EBS encryption. For more information, see Supported Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances). - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The number of I/O operations per second (IOPS) to provision for the volume, - // with a maximum ratio of 50 IOPS/GiB. Range is 100 to 64,000 IOPS for volumes - // in most Regions. Maximum IOPS of 64,000 is guaranteed only on Nitro-based - // instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). - // Other instance families guarantee performance up to 32,000 IOPS. For more - // information, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // This parameter is valid only for Provisioned IOPS SSD (io1) volumes. - Iops *int64 `type:"integer"` - - // The identifier of the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, - // your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted - // state must be true. - // - // You can specify the CMK using any of the following: - // - // * Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab. - // - // * Key alias. For example, alias/ExampleAlias. - // - // * Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // - // * Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, - // alias, or ARN that is not valid, the action can appear to complete, but eventually - // fails. - KmsKeyId *string `type:"string"` - - // The size of the volume, in GiBs. - // - // Constraints: 1-16,384 for gp2, 4-16,384 for io1, 500-16,384 for st1, 500-16,384 - // for sc1, and 1-1,024 for standard. If you specify a snapshot, the volume - // size must be equal to or larger than the snapshot size. - // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - // - // At least one of Size or SnapshotId is required. - Size *int64 `type:"integer"` - - // The snapshot from which to create the volume. - // - // At least one of Size or SnapshotId are required. - SnapshotId *string `type:"string"` - - // The tags to apply to the volume during creation. - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // The volume type. This can be gp2 for General Purpose SSD, io1 for Provisioned - // IOPS SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or standard - // for Magnetic volumes. - // - // Default: gp2 - VolumeType *string `type:"string" enum:"VolumeType"` -} - -// String returns the string representation -func (s CreateVolumeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVolumeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVolumeInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateVolumeInput) SetAvailabilityZone(v string) *CreateVolumeInput { - s.AvailabilityZone = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVolumeInput) SetDryRun(v bool) *CreateVolumeInput { - s.DryRun = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *CreateVolumeInput) SetEncrypted(v bool) *CreateVolumeInput { - s.Encrypted = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *CreateVolumeInput) SetIops(v int64) *CreateVolumeInput { - s.Iops = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *CreateVolumeInput) SetKmsKeyId(v string) *CreateVolumeInput { - s.KmsKeyId = &v - return s -} - -// SetSize sets the Size field's value. -func (s *CreateVolumeInput) SetSize(v int64) *CreateVolumeInput { - s.Size = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *CreateVolumeInput) SetSnapshotId(v string) *CreateVolumeInput { - s.SnapshotId = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *CreateVolumeInput) SetTagSpecifications(v []*TagSpecification) *CreateVolumeInput { - s.TagSpecifications = v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *CreateVolumeInput) SetVolumeType(v string) *CreateVolumeInput { - s.VolumeType = &v - return s -} - -// Describes the user or group to be added or removed from the list of create -// volume permissions for a volume. -type CreateVolumePermission struct { - _ struct{} `type:"structure"` - - // The group to be added or removed. The possible value is all. - Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` - - // The AWS account ID to be added or removed. - UserId *string `locationName:"userId" type:"string"` -} - -// String returns the string representation -func (s CreateVolumePermission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVolumePermission) GoString() string { - return s.String() -} - -// SetGroup sets the Group field's value. -func (s *CreateVolumePermission) SetGroup(v string) *CreateVolumePermission { - s.Group = &v - return s -} - -// SetUserId sets the UserId field's value. -func (s *CreateVolumePermission) SetUserId(v string) *CreateVolumePermission { - s.UserId = &v - return s -} - -// Describes modifications to the list of create volume permissions for a volume. -type CreateVolumePermissionModifications struct { - _ struct{} `type:"structure"` - - // Adds the specified AWS account ID or group to the list. - Add []*CreateVolumePermission `locationNameList:"item" type:"list"` - - // Removes the specified AWS account ID or group from the list. - Remove []*CreateVolumePermission `locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s CreateVolumePermissionModifications) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVolumePermissionModifications) GoString() string { - return s.String() -} - -// SetAdd sets the Add field's value. -func (s *CreateVolumePermissionModifications) SetAdd(v []*CreateVolumePermission) *CreateVolumePermissionModifications { - s.Add = v - return s -} - -// SetRemove sets the Remove field's value. -func (s *CreateVolumePermissionModifications) SetRemove(v []*CreateVolumePermission) *CreateVolumePermissionModifications { - s.Remove = v - return s -} - -type CreateVpcEndpointConnectionNotificationInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // One or more endpoint events for which to receive notifications. Valid values - // are Accept, Connect, Delete, and Reject. - // - // ConnectionEvents is a required field - ConnectionEvents []*string `locationNameList:"item" type:"list" required:"true"` - - // The ARN of the SNS topic for the notifications. - // - // ConnectionNotificationArn is a required field - ConnectionNotificationArn *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the endpoint service. - ServiceId *string `type:"string"` - - // The ID of the endpoint. - VpcEndpointId *string `type:"string"` -} - -// String returns the string representation -func (s CreateVpcEndpointConnectionNotificationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcEndpointConnectionNotificationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpcEndpointConnectionNotificationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointConnectionNotificationInput"} - if s.ConnectionEvents == nil { - invalidParams.Add(request.NewErrParamRequired("ConnectionEvents")) - } - if s.ConnectionNotificationArn == nil { - invalidParams.Add(request.NewErrParamRequired("ConnectionNotificationArn")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointConnectionNotificationInput) SetClientToken(v string) *CreateVpcEndpointConnectionNotificationInput { - s.ClientToken = &v - return s -} - -// SetConnectionEvents sets the ConnectionEvents field's value. -func (s *CreateVpcEndpointConnectionNotificationInput) SetConnectionEvents(v []*string) *CreateVpcEndpointConnectionNotificationInput { - s.ConnectionEvents = v - return s -} - -// SetConnectionNotificationArn sets the ConnectionNotificationArn field's value. -func (s *CreateVpcEndpointConnectionNotificationInput) SetConnectionNotificationArn(v string) *CreateVpcEndpointConnectionNotificationInput { - s.ConnectionNotificationArn = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcEndpointConnectionNotificationInput) SetDryRun(v bool) *CreateVpcEndpointConnectionNotificationInput { - s.DryRun = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *CreateVpcEndpointConnectionNotificationInput) SetServiceId(v string) *CreateVpcEndpointConnectionNotificationInput { - s.ServiceId = &v - return s -} - -// SetVpcEndpointId sets the VpcEndpointId field's value. -func (s *CreateVpcEndpointConnectionNotificationInput) SetVpcEndpointId(v string) *CreateVpcEndpointConnectionNotificationInput { - s.VpcEndpointId = &v - return s -} - -type CreateVpcEndpointConnectionNotificationOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the notification. - ConnectionNotification *ConnectionNotification `locationName:"connectionNotification" type:"structure"` -} - -// String returns the string representation -func (s CreateVpcEndpointConnectionNotificationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcEndpointConnectionNotificationOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointConnectionNotificationOutput) SetClientToken(v string) *CreateVpcEndpointConnectionNotificationOutput { - s.ClientToken = &v - return s -} - -// SetConnectionNotification sets the ConnectionNotification field's value. -func (s *CreateVpcEndpointConnectionNotificationOutput) SetConnectionNotification(v *ConnectionNotification) *CreateVpcEndpointConnectionNotificationOutput { - s.ConnectionNotification = v - return s -} - -// Contains the parameters for CreateVpcEndpoint. -type CreateVpcEndpointInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // A policy to attach to the endpoint that controls access to the service. The - // policy must be in valid JSON format. If this parameter is not specified, - // we attach a default policy that allows full access to the service. - PolicyDocument *string `type:"string"` - - // (Interface endpoint) Indicate whether to associate a private hosted zone - // with the specified VPC. The private hosted zone contains a record set for - // the default public DNS name for the service for the Region (for example, - // kinesis.us-east-1.amazonaws.com) which resolves to the private IP addresses - // of the endpoint network interfaces in the VPC. This enables you to make requests - // to the default public DNS name for the service instead of the public DNS - // names that are automatically generated by the VPC endpoint service. - // - // To use a private hosted zone, you must set the following VPC attributes to - // true: enableDnsHostnames and enableDnsSupport. Use ModifyVpcAttribute to - // set the VPC attributes. - // - // Default: true - PrivateDnsEnabled *bool `type:"boolean"` - - // (Gateway endpoint) One or more route table IDs. - RouteTableIds []*string `locationName:"RouteTableId" locationNameList:"item" type:"list"` - - // (Interface endpoint) The ID of one or more security groups to associate with - // the endpoint network interface. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list"` - - // The service name. To get a list of available services, use the DescribeVpcEndpointServices - // request, or get the name from the service provider. - // - // ServiceName is a required field - ServiceName *string `type:"string" required:"true"` - - // (Interface endpoint) The ID of one or more subnets in which to create an - // endpoint network interface. - SubnetIds []*string `locationName:"SubnetId" locationNameList:"item" type:"list"` - - // The type of endpoint. - // - // Default: Gateway - VpcEndpointType *string `type:"string" enum:"VpcEndpointType"` - - // The ID of the VPC in which the endpoint will be used. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateVpcEndpointInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcEndpointInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpcEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointInput"} - if s.ServiceName == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceName")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointInput) SetClientToken(v string) *CreateVpcEndpointInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcEndpointInput) SetDryRun(v bool) *CreateVpcEndpointInput { - s.DryRun = &v - return s -} - -// SetPolicyDocument sets the PolicyDocument field's value. -func (s *CreateVpcEndpointInput) SetPolicyDocument(v string) *CreateVpcEndpointInput { - s.PolicyDocument = &v - return s -} - -// SetPrivateDnsEnabled sets the PrivateDnsEnabled field's value. -func (s *CreateVpcEndpointInput) SetPrivateDnsEnabled(v bool) *CreateVpcEndpointInput { - s.PrivateDnsEnabled = &v - return s -} - -// SetRouteTableIds sets the RouteTableIds field's value. -func (s *CreateVpcEndpointInput) SetRouteTableIds(v []*string) *CreateVpcEndpointInput { - s.RouteTableIds = v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *CreateVpcEndpointInput) SetSecurityGroupIds(v []*string) *CreateVpcEndpointInput { - s.SecurityGroupIds = v - return s -} - -// SetServiceName sets the ServiceName field's value. -func (s *CreateVpcEndpointInput) SetServiceName(v string) *CreateVpcEndpointInput { - s.ServiceName = &v - return s -} - -// SetSubnetIds sets the SubnetIds field's value. -func (s *CreateVpcEndpointInput) SetSubnetIds(v []*string) *CreateVpcEndpointInput { - s.SubnetIds = v - return s -} - -// SetVpcEndpointType sets the VpcEndpointType field's value. -func (s *CreateVpcEndpointInput) SetVpcEndpointType(v string) *CreateVpcEndpointInput { - s.VpcEndpointType = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateVpcEndpointInput) SetVpcId(v string) *CreateVpcEndpointInput { - s.VpcId = &v - return s -} - -// Contains the output of CreateVpcEndpoint. -type CreateVpcEndpointOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the endpoint. - VpcEndpoint *VpcEndpoint `locationName:"vpcEndpoint" type:"structure"` -} - -// String returns the string representation -func (s CreateVpcEndpointOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcEndpointOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointOutput) SetClientToken(v string) *CreateVpcEndpointOutput { - s.ClientToken = &v - return s -} - -// SetVpcEndpoint sets the VpcEndpoint field's value. -func (s *CreateVpcEndpointOutput) SetVpcEndpoint(v *VpcEndpoint) *CreateVpcEndpointOutput { - s.VpcEndpoint = v - return s -} - -type CreateVpcEndpointServiceConfigurationInput struct { - _ struct{} `type:"structure"` - - // Indicate whether requests from service consumers to create an endpoint to - // your service must be accepted. To accept a request, use AcceptVpcEndpointConnections. - AcceptanceRequired *bool `type:"boolean"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The Amazon Resource Names (ARNs) of one or more Network Load Balancers for - // your service. - // - // NetworkLoadBalancerArns is a required field - NetworkLoadBalancerArns []*string `locationName:"NetworkLoadBalancerArn" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s CreateVpcEndpointServiceConfigurationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcEndpointServiceConfigurationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpcEndpointServiceConfigurationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointServiceConfigurationInput"} - if s.NetworkLoadBalancerArns == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkLoadBalancerArns")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAcceptanceRequired sets the AcceptanceRequired field's value. -func (s *CreateVpcEndpointServiceConfigurationInput) SetAcceptanceRequired(v bool) *CreateVpcEndpointServiceConfigurationInput { - s.AcceptanceRequired = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointServiceConfigurationInput) SetClientToken(v string) *CreateVpcEndpointServiceConfigurationInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcEndpointServiceConfigurationInput) SetDryRun(v bool) *CreateVpcEndpointServiceConfigurationInput { - s.DryRun = &v - return s -} - -// SetNetworkLoadBalancerArns sets the NetworkLoadBalancerArns field's value. -func (s *CreateVpcEndpointServiceConfigurationInput) SetNetworkLoadBalancerArns(v []*string) *CreateVpcEndpointServiceConfigurationInput { - s.NetworkLoadBalancerArns = v - return s -} - -type CreateVpcEndpointServiceConfigurationOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the service configuration. - ServiceConfiguration *ServiceConfiguration `locationName:"serviceConfiguration" type:"structure"` -} - -// String returns the string representation -func (s CreateVpcEndpointServiceConfigurationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcEndpointServiceConfigurationOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointServiceConfigurationOutput) SetClientToken(v string) *CreateVpcEndpointServiceConfigurationOutput { - s.ClientToken = &v - return s -} - -// SetServiceConfiguration sets the ServiceConfiguration field's value. -func (s *CreateVpcEndpointServiceConfigurationOutput) SetServiceConfiguration(v *ServiceConfiguration) *CreateVpcEndpointServiceConfigurationOutput { - s.ServiceConfiguration = v - return s -} - -type CreateVpcInput struct { - _ struct{} `type:"structure"` - - // Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for - // the VPC. You cannot specify the range of IP addresses, or the size of the - // CIDR block. - AmazonProvidedIpv6CidrBlock *bool `locationName:"amazonProvidedIpv6CidrBlock" type:"boolean"` - - // The IPv4 network range for the VPC, in CIDR notation. For example, 10.0.0.0/16. - // - // CidrBlock is a required field - CidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The tenancy options for instances launched into the VPC. For default, instances - // are launched with shared tenancy by default. You can launch instances with - // any tenancy into a shared tenancy VPC. For dedicated, instances are launched - // as dedicated tenancy instances by default. You can only launch instances - // with a tenancy of dedicated or host into a dedicated tenancy VPC. - // - // Important: The host value cannot be used with this parameter. Use the default - // or dedicated values only. - // - // Default: default - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` -} - -// String returns the string representation -func (s CreateVpcInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpcInput"} - if s.CidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("CidrBlock")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAmazonProvidedIpv6CidrBlock sets the AmazonProvidedIpv6CidrBlock field's value. -func (s *CreateVpcInput) SetAmazonProvidedIpv6CidrBlock(v bool) *CreateVpcInput { - s.AmazonProvidedIpv6CidrBlock = &v - return s -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *CreateVpcInput) SetCidrBlock(v string) *CreateVpcInput { - s.CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcInput) SetDryRun(v bool) *CreateVpcInput { - s.DryRun = &v - return s -} - -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *CreateVpcInput) SetInstanceTenancy(v string) *CreateVpcInput { - s.InstanceTenancy = &v - return s -} - -type CreateVpcOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC. - Vpc *Vpc `locationName:"vpc" type:"structure"` -} - -// String returns the string representation -func (s CreateVpcOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcOutput) GoString() string { - return s.String() -} - -// SetVpc sets the Vpc field's value. -func (s *CreateVpcOutput) SetVpc(v *Vpc) *CreateVpcOutput { - s.Vpc = v - return s -} - -type CreateVpcPeeringConnectionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The AWS account ID of the owner of the accepter VPC. - // - // Default: Your AWS account ID - PeerOwnerId *string `locationName:"peerOwnerId" type:"string"` - - // The Region code for the accepter VPC, if the accepter VPC is located in a - // Region other than the Region in which you make the request. - // - // Default: The Region in which you make the request. - PeerRegion *string `type:"string"` - - // The ID of the VPC with which you are creating the VPC peering connection. - // You must specify this parameter in the request. - PeerVpcId *string `locationName:"peerVpcId" type:"string"` - - // The ID of the requester VPC. You must specify this parameter in the request. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s CreateVpcPeeringConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcPeeringConnectionInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcPeeringConnectionInput) SetDryRun(v bool) *CreateVpcPeeringConnectionInput { - s.DryRun = &v - return s -} - -// SetPeerOwnerId sets the PeerOwnerId field's value. -func (s *CreateVpcPeeringConnectionInput) SetPeerOwnerId(v string) *CreateVpcPeeringConnectionInput { - s.PeerOwnerId = &v - return s -} - -// SetPeerRegion sets the PeerRegion field's value. -func (s *CreateVpcPeeringConnectionInput) SetPeerRegion(v string) *CreateVpcPeeringConnectionInput { - s.PeerRegion = &v - return s -} - -// SetPeerVpcId sets the PeerVpcId field's value. -func (s *CreateVpcPeeringConnectionInput) SetPeerVpcId(v string) *CreateVpcPeeringConnectionInput { - s.PeerVpcId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *CreateVpcPeeringConnectionInput) SetVpcId(v string) *CreateVpcPeeringConnectionInput { - s.VpcId = &v - return s -} - -type CreateVpcPeeringConnectionOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC peering connection. - VpcPeeringConnection *VpcPeeringConnection `locationName:"vpcPeeringConnection" type:"structure"` -} - -// String returns the string representation -func (s CreateVpcPeeringConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpcPeeringConnectionOutput) GoString() string { - return s.String() -} - -// SetVpcPeeringConnection sets the VpcPeeringConnection field's value. -func (s *CreateVpcPeeringConnectionOutput) SetVpcPeeringConnection(v *VpcPeeringConnection) *CreateVpcPeeringConnectionOutput { - s.VpcPeeringConnection = v - return s -} - -// Contains the parameters for CreateVpnConnection. -type CreateVpnConnectionInput struct { - _ struct{} `type:"structure"` - - // The ID of the customer gateway. - // - // CustomerGatewayId is a required field - CustomerGatewayId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The options for the VPN connection. - Options *VpnConnectionOptionsSpecification `locationName:"options" type:"structure"` - - // The ID of the transit gateway. If you specify a transit gateway, you cannot - // specify a virtual private gateway. - TransitGatewayId *string `type:"string"` - - // The type of VPN connection (ipsec.1). - // - // Type is a required field - Type *string `type:"string" required:"true"` - - // The ID of the virtual private gateway. If you specify a virtual private gateway, - // you cannot specify a transit gateway. - VpnGatewayId *string `type:"string"` -} - -// String returns the string representation -func (s CreateVpnConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpnConnectionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpnConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpnConnectionInput"} - if s.CustomerGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("CustomerGatewayId")) - } - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *CreateVpnConnectionInput) SetCustomerGatewayId(v string) *CreateVpnConnectionInput { - s.CustomerGatewayId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpnConnectionInput) SetDryRun(v bool) *CreateVpnConnectionInput { - s.DryRun = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *CreateVpnConnectionInput) SetOptions(v *VpnConnectionOptionsSpecification) *CreateVpnConnectionInput { - s.Options = v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *CreateVpnConnectionInput) SetTransitGatewayId(v string) *CreateVpnConnectionInput { - s.TransitGatewayId = &v - return s -} - -// SetType sets the Type field's value. -func (s *CreateVpnConnectionInput) SetType(v string) *CreateVpnConnectionInput { - s.Type = &v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *CreateVpnConnectionInput) SetVpnGatewayId(v string) *CreateVpnConnectionInput { - s.VpnGatewayId = &v - return s -} - -// Contains the output of CreateVpnConnection. -type CreateVpnConnectionOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPN connection. - VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` -} - -// String returns the string representation -func (s CreateVpnConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpnConnectionOutput) GoString() string { - return s.String() -} - -// SetVpnConnection sets the VpnConnection field's value. -func (s *CreateVpnConnectionOutput) SetVpnConnection(v *VpnConnection) *CreateVpnConnectionOutput { - s.VpnConnection = v - return s -} - -// Contains the parameters for CreateVpnConnectionRoute. -type CreateVpnConnectionRouteInput struct { - _ struct{} `type:"structure"` - - // The CIDR block associated with the local subnet of the customer network. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // The ID of the VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreateVpnConnectionRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpnConnectionRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpnConnectionRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpnConnectionRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateVpnConnectionRouteInput) SetDestinationCidrBlock(v string) *CreateVpnConnectionRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *CreateVpnConnectionRouteInput) SetVpnConnectionId(v string) *CreateVpnConnectionRouteInput { - s.VpnConnectionId = &v - return s -} - -type CreateVpnConnectionRouteOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CreateVpnConnectionRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpnConnectionRouteOutput) GoString() string { - return s.String() -} - -// Contains the parameters for CreateVpnGateway. -type CreateVpnGatewayInput struct { - _ struct{} `type:"structure"` - - // A private Autonomous System Number (ASN) for the Amazon side of a BGP session. - // If you're using a 16-bit ASN, it must be in the 64512 to 65534 range. If - // you're using a 32-bit ASN, it must be in the 4200000000 to 4294967294 range. - // - // Default: 64512 - AmazonSideAsn *int64 `type:"long"` - - // The Availability Zone for the virtual private gateway. - AvailabilityZone *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The type of VPN connection this virtual private gateway supports. - // - // Type is a required field - Type *string `type:"string" required:"true" enum:"GatewayType"` -} - -// String returns the string representation -func (s CreateVpnGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpnGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpnGatewayInput"} - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAmazonSideAsn sets the AmazonSideAsn field's value. -func (s *CreateVpnGatewayInput) SetAmazonSideAsn(v int64) *CreateVpnGatewayInput { - s.AmazonSideAsn = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateVpnGatewayInput) SetAvailabilityZone(v string) *CreateVpnGatewayInput { - s.AvailabilityZone = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateVpnGatewayInput) SetDryRun(v bool) *CreateVpnGatewayInput { - s.DryRun = &v - return s -} - -// SetType sets the Type field's value. -func (s *CreateVpnGatewayInput) SetType(v string) *CreateVpnGatewayInput { - s.Type = &v - return s -} - -// Contains the output of CreateVpnGateway. -type CreateVpnGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the virtual private gateway. - VpnGateway *VpnGateway `locationName:"vpnGateway" type:"structure"` -} - -// String returns the string representation -func (s CreateVpnGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateVpnGatewayOutput) GoString() string { - return s.String() -} - -// SetVpnGateway sets the VpnGateway field's value. -func (s *CreateVpnGatewayOutput) SetVpnGateway(v *VpnGateway) *CreateVpnGatewayOutput { - s.VpnGateway = v - return s -} - -// Describes the credit option for CPU usage of a T2 or T3 instance. -type CreditSpecification struct { - _ struct{} `type:"structure"` - - // The credit option for CPU usage of a T2 or T3 instance. Valid values are - // standard and unlimited. - CpuCredits *string `locationName:"cpuCredits" type:"string"` -} - -// String returns the string representation -func (s CreditSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreditSpecification) GoString() string { - return s.String() -} - -// SetCpuCredits sets the CpuCredits field's value. -func (s *CreditSpecification) SetCpuCredits(v string) *CreditSpecification { - s.CpuCredits = &v - return s -} - -// The credit option for CPU usage of a T2 or T3 instance. -type CreditSpecificationRequest struct { - _ struct{} `type:"structure"` - - // The credit option for CPU usage of a T2 or T3 instance. Valid values are - // standard and unlimited. - // - // CpuCredits is a required field - CpuCredits *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s CreditSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreditSpecificationRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreditSpecificationRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreditSpecificationRequest"} - if s.CpuCredits == nil { - invalidParams.Add(request.NewErrParamRequired("CpuCredits")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCpuCredits sets the CpuCredits field's value. -func (s *CreditSpecificationRequest) SetCpuCredits(v string) *CreditSpecificationRequest { - s.CpuCredits = &v - return s -} - -// Describes a customer gateway. -type CustomerGateway struct { - _ struct{} `type:"structure"` - - // The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number - // (ASN). - BgpAsn *string `locationName:"bgpAsn" type:"string"` - - // The Amazon Resource Name (ARN) for the customer gateway certificate. - CertificateArn *string `locationName:"certificateArn" type:"string"` - - // The ID of the customer gateway. - CustomerGatewayId *string `locationName:"customerGatewayId" type:"string"` - - // The name of customer gateway device. - DeviceName *string `locationName:"deviceName" type:"string"` - - // The Internet-routable IP address of the customer gateway's outside interface. - IpAddress *string `locationName:"ipAddress" type:"string"` - - // The current state of the customer gateway (pending | available | deleting - // | deleted). - State *string `locationName:"state" type:"string"` - - // Any tags assigned to the customer gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The type of VPN connection the customer gateway supports (ipsec.1). - Type *string `locationName:"type" type:"string"` -} - -// String returns the string representation -func (s CustomerGateway) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CustomerGateway) GoString() string { - return s.String() -} - -// SetBgpAsn sets the BgpAsn field's value. -func (s *CustomerGateway) SetBgpAsn(v string) *CustomerGateway { - s.BgpAsn = &v - return s -} - -// SetCertificateArn sets the CertificateArn field's value. -func (s *CustomerGateway) SetCertificateArn(v string) *CustomerGateway { - s.CertificateArn = &v - return s -} - -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *CustomerGateway) SetCustomerGatewayId(v string) *CustomerGateway { - s.CustomerGatewayId = &v - return s -} - -// SetDeviceName sets the DeviceName field's value. -func (s *CustomerGateway) SetDeviceName(v string) *CustomerGateway { - s.DeviceName = &v - return s -} - -// SetIpAddress sets the IpAddress field's value. -func (s *CustomerGateway) SetIpAddress(v string) *CustomerGateway { - s.IpAddress = &v - return s -} - -// SetState sets the State field's value. -func (s *CustomerGateway) SetState(v string) *CustomerGateway { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *CustomerGateway) SetTags(v []*Tag) *CustomerGateway { - s.Tags = v - return s -} - -// SetType sets the Type field's value. -func (s *CustomerGateway) SetType(v string) *CustomerGateway { - s.Type = &v - return s -} - -type DeleteClientVpnEndpointInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN to be deleted. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s DeleteClientVpnEndpointInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteClientVpnEndpointInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteClientVpnEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteClientVpnEndpointInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DeleteClientVpnEndpointInput) SetClientVpnEndpointId(v string) *DeleteClientVpnEndpointInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteClientVpnEndpointInput) SetDryRun(v bool) *DeleteClientVpnEndpointInput { - s.DryRun = &v - return s -} - -type DeleteClientVpnEndpointOutput struct { - _ struct{} `type:"structure"` - - // The current state of the Client VPN endpoint. - Status *ClientVpnEndpointStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s DeleteClientVpnEndpointOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteClientVpnEndpointOutput) GoString() string { - return s.String() -} - -// SetStatus sets the Status field's value. -func (s *DeleteClientVpnEndpointOutput) SetStatus(v *ClientVpnEndpointStatus) *DeleteClientVpnEndpointOutput { - s.Status = v - return s -} - -type DeleteClientVpnRouteInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint from which the route is to be deleted. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // The IPv4 address range, in CIDR notation, of the route to be deleted. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the target subnet used by the route. - TargetVpcSubnetId *string `type:"string"` -} - -// String returns the string representation -func (s DeleteClientVpnRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteClientVpnRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteClientVpnRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteClientVpnRouteInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DeleteClientVpnRouteInput) SetClientVpnEndpointId(v string) *DeleteClientVpnRouteInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *DeleteClientVpnRouteInput) SetDestinationCidrBlock(v string) *DeleteClientVpnRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteClientVpnRouteInput) SetDryRun(v bool) *DeleteClientVpnRouteInput { - s.DryRun = &v - return s -} - -// SetTargetVpcSubnetId sets the TargetVpcSubnetId field's value. -func (s *DeleteClientVpnRouteInput) SetTargetVpcSubnetId(v string) *DeleteClientVpnRouteInput { - s.TargetVpcSubnetId = &v - return s -} - -type DeleteClientVpnRouteOutput struct { - _ struct{} `type:"structure"` - - // The current state of the route. - Status *ClientVpnRouteStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s DeleteClientVpnRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteClientVpnRouteOutput) GoString() string { - return s.String() -} - -// SetStatus sets the Status field's value. -func (s *DeleteClientVpnRouteOutput) SetStatus(v *ClientVpnRouteStatus) *DeleteClientVpnRouteOutput { - s.Status = v - return s -} - -// Contains the parameters for DeleteCustomerGateway. -type DeleteCustomerGatewayInput struct { - _ struct{} `type:"structure"` - - // The ID of the customer gateway. - // - // CustomerGatewayId is a required field - CustomerGatewayId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DeleteCustomerGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteCustomerGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteCustomerGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteCustomerGatewayInput"} - if s.CustomerGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("CustomerGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *DeleteCustomerGatewayInput) SetCustomerGatewayId(v string) *DeleteCustomerGatewayInput { - s.CustomerGatewayId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteCustomerGatewayInput) SetDryRun(v bool) *DeleteCustomerGatewayInput { - s.DryRun = &v - return s -} - -type DeleteCustomerGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteCustomerGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteCustomerGatewayOutput) GoString() string { - return s.String() -} - -type DeleteDhcpOptionsInput struct { - _ struct{} `type:"structure"` - - // The ID of the DHCP options set. - // - // DhcpOptionsId is a required field - DhcpOptionsId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DeleteDhcpOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteDhcpOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteDhcpOptionsInput"} - if s.DhcpOptionsId == nil { - invalidParams.Add(request.NewErrParamRequired("DhcpOptionsId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *DeleteDhcpOptionsInput) SetDhcpOptionsId(v string) *DeleteDhcpOptionsInput { - s.DhcpOptionsId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteDhcpOptionsInput) SetDryRun(v bool) *DeleteDhcpOptionsInput { - s.DryRun = &v - return s -} - -type DeleteDhcpOptionsOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteDhcpOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteDhcpOptionsOutput) GoString() string { - return s.String() -} - -type DeleteEgressOnlyInternetGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the egress-only internet gateway. - // - // EgressOnlyInternetGatewayId is a required field - EgressOnlyInternetGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteEgressOnlyInternetGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteEgressOnlyInternetGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteEgressOnlyInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteEgressOnlyInternetGatewayInput"} - if s.EgressOnlyInternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("EgressOnlyInternetGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteEgressOnlyInternetGatewayInput) SetDryRun(v bool) *DeleteEgressOnlyInternetGatewayInput { - s.DryRun = &v - return s -} - -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *DeleteEgressOnlyInternetGatewayInput) SetEgressOnlyInternetGatewayId(v string) *DeleteEgressOnlyInternetGatewayInput { - s.EgressOnlyInternetGatewayId = &v - return s -} - -type DeleteEgressOnlyInternetGatewayOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - ReturnCode *bool `locationName:"returnCode" type:"boolean"` -} - -// String returns the string representation -func (s DeleteEgressOnlyInternetGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteEgressOnlyInternetGatewayOutput) GoString() string { - return s.String() -} - -// SetReturnCode sets the ReturnCode field's value. -func (s *DeleteEgressOnlyInternetGatewayOutput) SetReturnCode(v bool) *DeleteEgressOnlyInternetGatewayOutput { - s.ReturnCode = &v - return s -} - -// Describes an EC2 Fleet error. -type DeleteFleetError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string" enum:"DeleteFleetErrorCode"` - - // The description for the error code. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s DeleteFleetError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFleetError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *DeleteFleetError) SetCode(v string) *DeleteFleetError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *DeleteFleetError) SetMessage(v string) *DeleteFleetError { - s.Message = &v - return s -} - -// Describes an EC2 Fleet that was not successfully deleted. -type DeleteFleetErrorItem struct { - _ struct{} `type:"structure"` - - // The error. - Error *DeleteFleetError `locationName:"error" type:"structure"` - - // The ID of the EC2 Fleet. - FleetId *string `locationName:"fleetId" type:"string"` -} - -// String returns the string representation -func (s DeleteFleetErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFleetErrorItem) GoString() string { - return s.String() -} - -// SetError sets the Error field's value. -func (s *DeleteFleetErrorItem) SetError(v *DeleteFleetError) *DeleteFleetErrorItem { - s.Error = v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *DeleteFleetErrorItem) SetFleetId(v string) *DeleteFleetErrorItem { - s.FleetId = &v - return s -} - -// Describes an EC2 Fleet that was successfully deleted. -type DeleteFleetSuccessItem struct { - _ struct{} `type:"structure"` - - // The current state of the EC2 Fleet. - CurrentFleetState *string `locationName:"currentFleetState" type:"string" enum:"FleetStateCode"` - - // The ID of the EC2 Fleet. - FleetId *string `locationName:"fleetId" type:"string"` - - // The previous state of the EC2 Fleet. - PreviousFleetState *string `locationName:"previousFleetState" type:"string" enum:"FleetStateCode"` -} - -// String returns the string representation -func (s DeleteFleetSuccessItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFleetSuccessItem) GoString() string { - return s.String() -} - -// SetCurrentFleetState sets the CurrentFleetState field's value. -func (s *DeleteFleetSuccessItem) SetCurrentFleetState(v string) *DeleteFleetSuccessItem { - s.CurrentFleetState = &v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *DeleteFleetSuccessItem) SetFleetId(v string) *DeleteFleetSuccessItem { - s.FleetId = &v - return s -} - -// SetPreviousFleetState sets the PreviousFleetState field's value. -func (s *DeleteFleetSuccessItem) SetPreviousFleetState(v string) *DeleteFleetSuccessItem { - s.PreviousFleetState = &v - return s -} - -type DeleteFleetsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the EC2 Fleets. - // - // FleetIds is a required field - FleetIds []*string `locationName:"FleetId" type:"list" required:"true"` - - // Indicates whether to terminate instances for an EC2 Fleet if it is deleted - // successfully. - // - // TerminateInstances is a required field - TerminateInstances *bool `type:"boolean" required:"true"` -} - -// String returns the string representation -func (s DeleteFleetsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFleetsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteFleetsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteFleetsInput"} - if s.FleetIds == nil { - invalidParams.Add(request.NewErrParamRequired("FleetIds")) - } - if s.TerminateInstances == nil { - invalidParams.Add(request.NewErrParamRequired("TerminateInstances")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteFleetsInput) SetDryRun(v bool) *DeleteFleetsInput { - s.DryRun = &v - return s -} - -// SetFleetIds sets the FleetIds field's value. -func (s *DeleteFleetsInput) SetFleetIds(v []*string) *DeleteFleetsInput { - s.FleetIds = v - return s -} - -// SetTerminateInstances sets the TerminateInstances field's value. -func (s *DeleteFleetsInput) SetTerminateInstances(v bool) *DeleteFleetsInput { - s.TerminateInstances = &v - return s -} - -type DeleteFleetsOutput struct { - _ struct{} `type:"structure"` - - // Information about the EC2 Fleets that are successfully deleted. - SuccessfulFleetDeletions []*DeleteFleetSuccessItem `locationName:"successfulFleetDeletionSet" locationNameList:"item" type:"list"` - - // Information about the EC2 Fleets that are not successfully deleted. - UnsuccessfulFleetDeletions []*DeleteFleetErrorItem `locationName:"unsuccessfulFleetDeletionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteFleetsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFleetsOutput) GoString() string { - return s.String() -} - -// SetSuccessfulFleetDeletions sets the SuccessfulFleetDeletions field's value. -func (s *DeleteFleetsOutput) SetSuccessfulFleetDeletions(v []*DeleteFleetSuccessItem) *DeleteFleetsOutput { - s.SuccessfulFleetDeletions = v - return s -} - -// SetUnsuccessfulFleetDeletions sets the UnsuccessfulFleetDeletions field's value. -func (s *DeleteFleetsOutput) SetUnsuccessfulFleetDeletions(v []*DeleteFleetErrorItem) *DeleteFleetsOutput { - s.UnsuccessfulFleetDeletions = v - return s -} - -type DeleteFlowLogsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more flow log IDs. - // - // Constraint: Maximum of 1000 flow log IDs. - // - // FlowLogIds is a required field - FlowLogIds []*string `locationName:"FlowLogId" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s DeleteFlowLogsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFlowLogsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteFlowLogsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteFlowLogsInput"} - if s.FlowLogIds == nil { - invalidParams.Add(request.NewErrParamRequired("FlowLogIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteFlowLogsInput) SetDryRun(v bool) *DeleteFlowLogsInput { - s.DryRun = &v - return s -} - -// SetFlowLogIds sets the FlowLogIds field's value. -func (s *DeleteFlowLogsInput) SetFlowLogIds(v []*string) *DeleteFlowLogsInput { - s.FlowLogIds = v - return s -} - -type DeleteFlowLogsOutput struct { - _ struct{} `type:"structure"` - - // Information about the flow logs that could not be deleted successfully. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteFlowLogsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFlowLogsOutput) GoString() string { - return s.String() -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DeleteFlowLogsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteFlowLogsOutput { - s.Unsuccessful = v - return s -} - -type DeleteFpgaImageInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the AFI. - // - // FpgaImageId is a required field - FpgaImageId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteFpgaImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFpgaImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteFpgaImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteFpgaImageInput"} - if s.FpgaImageId == nil { - invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteFpgaImageInput) SetDryRun(v bool) *DeleteFpgaImageInput { - s.DryRun = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *DeleteFpgaImageInput) SetFpgaImageId(v string) *DeleteFpgaImageInput { - s.FpgaImageId = &v - return s -} - -type DeleteFpgaImageOutput struct { - _ struct{} `type:"structure"` - - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s DeleteFpgaImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteFpgaImageOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *DeleteFpgaImageOutput) SetReturn(v bool) *DeleteFpgaImageOutput { - s.Return = &v - return s -} - -type DeleteInternetGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the internet gateway. - // - // InternetGatewayId is a required field - InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteInternetGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteInternetGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteInternetGatewayInput"} - if s.InternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteInternetGatewayInput) SetDryRun(v bool) *DeleteInternetGatewayInput { - s.DryRun = &v - return s -} - -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *DeleteInternetGatewayInput) SetInternetGatewayId(v string) *DeleteInternetGatewayInput { - s.InternetGatewayId = &v - return s -} - -type DeleteInternetGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteInternetGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteInternetGatewayOutput) GoString() string { - return s.String() -} - -type DeleteKeyPairInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The name of the key pair. - // - // KeyName is a required field - KeyName *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteKeyPairInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteKeyPairInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteKeyPairInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteKeyPairInput"} - if s.KeyName == nil { - invalidParams.Add(request.NewErrParamRequired("KeyName")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteKeyPairInput) SetDryRun(v bool) *DeleteKeyPairInput { - s.DryRun = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *DeleteKeyPairInput) SetKeyName(v string) *DeleteKeyPairInput { - s.KeyName = &v - return s -} - -type DeleteKeyPairOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteKeyPairOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteKeyPairOutput) GoString() string { - return s.String() -} - -type DeleteLaunchTemplateInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateName *string `min:"3" type:"string"` -} - -// String returns the string representation -func (s DeleteLaunchTemplateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteLaunchTemplateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteLaunchTemplateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteLaunchTemplateInput"} - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteLaunchTemplateInput) SetDryRun(v bool) *DeleteLaunchTemplateInput { - s.DryRun = &v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *DeleteLaunchTemplateInput) SetLaunchTemplateId(v string) *DeleteLaunchTemplateInput { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *DeleteLaunchTemplateInput) SetLaunchTemplateName(v string) *DeleteLaunchTemplateInput { - s.LaunchTemplateName = &v - return s -} - -type DeleteLaunchTemplateOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch template. - LaunchTemplate *LaunchTemplate `locationName:"launchTemplate" type:"structure"` -} - -// String returns the string representation -func (s DeleteLaunchTemplateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteLaunchTemplateOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplate sets the LaunchTemplate field's value. -func (s *DeleteLaunchTemplateOutput) SetLaunchTemplate(v *LaunchTemplate) *DeleteLaunchTemplateOutput { - s.LaunchTemplate = v - return s -} - -type DeleteLaunchTemplateVersionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateName *string `min:"3" type:"string"` - - // The version numbers of one or more launch template versions to delete. - // - // Versions is a required field - Versions []*string `locationName:"LaunchTemplateVersion" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s DeleteLaunchTemplateVersionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteLaunchTemplateVersionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteLaunchTemplateVersionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteLaunchTemplateVersionsInput"} - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - if s.Versions == nil { - invalidParams.Add(request.NewErrParamRequired("Versions")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteLaunchTemplateVersionsInput) SetDryRun(v bool) *DeleteLaunchTemplateVersionsInput { - s.DryRun = &v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *DeleteLaunchTemplateVersionsInput) SetLaunchTemplateId(v string) *DeleteLaunchTemplateVersionsInput { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *DeleteLaunchTemplateVersionsInput) SetLaunchTemplateName(v string) *DeleteLaunchTemplateVersionsInput { - s.LaunchTemplateName = &v - return s -} - -// SetVersions sets the Versions field's value. -func (s *DeleteLaunchTemplateVersionsInput) SetVersions(v []*string) *DeleteLaunchTemplateVersionsInput { - s.Versions = v - return s -} - -type DeleteLaunchTemplateVersionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch template versions that were successfully deleted. - SuccessfullyDeletedLaunchTemplateVersions []*DeleteLaunchTemplateVersionsResponseSuccessItem `locationName:"successfullyDeletedLaunchTemplateVersionSet" locationNameList:"item" type:"list"` - - // Information about the launch template versions that could not be deleted. - UnsuccessfullyDeletedLaunchTemplateVersions []*DeleteLaunchTemplateVersionsResponseErrorItem `locationName:"unsuccessfullyDeletedLaunchTemplateVersionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteLaunchTemplateVersionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteLaunchTemplateVersionsOutput) GoString() string { - return s.String() -} - -// SetSuccessfullyDeletedLaunchTemplateVersions sets the SuccessfullyDeletedLaunchTemplateVersions field's value. -func (s *DeleteLaunchTemplateVersionsOutput) SetSuccessfullyDeletedLaunchTemplateVersions(v []*DeleteLaunchTemplateVersionsResponseSuccessItem) *DeleteLaunchTemplateVersionsOutput { - s.SuccessfullyDeletedLaunchTemplateVersions = v - return s -} - -// SetUnsuccessfullyDeletedLaunchTemplateVersions sets the UnsuccessfullyDeletedLaunchTemplateVersions field's value. -func (s *DeleteLaunchTemplateVersionsOutput) SetUnsuccessfullyDeletedLaunchTemplateVersions(v []*DeleteLaunchTemplateVersionsResponseErrorItem) *DeleteLaunchTemplateVersionsOutput { - s.UnsuccessfullyDeletedLaunchTemplateVersions = v - return s -} - -// Describes a launch template version that could not be deleted. -type DeleteLaunchTemplateVersionsResponseErrorItem struct { - _ struct{} `type:"structure"` - - // The ID of the launch template. - LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` - - // The name of the launch template. - LaunchTemplateName *string `locationName:"launchTemplateName" type:"string"` - - // Information about the error. - ResponseError *ResponseError `locationName:"responseError" type:"structure"` - - // The version number of the launch template. - VersionNumber *int64 `locationName:"versionNumber" type:"long"` -} - -// String returns the string representation -func (s DeleteLaunchTemplateVersionsResponseErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteLaunchTemplateVersionsResponseErrorItem) GoString() string { - return s.String() -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetLaunchTemplateId(v string) *DeleteLaunchTemplateVersionsResponseErrorItem { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetLaunchTemplateName(v string) *DeleteLaunchTemplateVersionsResponseErrorItem { - s.LaunchTemplateName = &v - return s -} - -// SetResponseError sets the ResponseError field's value. -func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetResponseError(v *ResponseError) *DeleteLaunchTemplateVersionsResponseErrorItem { - s.ResponseError = v - return s -} - -// SetVersionNumber sets the VersionNumber field's value. -func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetVersionNumber(v int64) *DeleteLaunchTemplateVersionsResponseErrorItem { - s.VersionNumber = &v - return s -} - -// Describes a launch template version that was successfully deleted. -type DeleteLaunchTemplateVersionsResponseSuccessItem struct { - _ struct{} `type:"structure"` - - // The ID of the launch template. - LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` - - // The name of the launch template. - LaunchTemplateName *string `locationName:"launchTemplateName" type:"string"` - - // The version number of the launch template. - VersionNumber *int64 `locationName:"versionNumber" type:"long"` -} - -// String returns the string representation -func (s DeleteLaunchTemplateVersionsResponseSuccessItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteLaunchTemplateVersionsResponseSuccessItem) GoString() string { - return s.String() -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *DeleteLaunchTemplateVersionsResponseSuccessItem) SetLaunchTemplateId(v string) *DeleteLaunchTemplateVersionsResponseSuccessItem { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *DeleteLaunchTemplateVersionsResponseSuccessItem) SetLaunchTemplateName(v string) *DeleteLaunchTemplateVersionsResponseSuccessItem { - s.LaunchTemplateName = &v - return s -} - -// SetVersionNumber sets the VersionNumber field's value. -func (s *DeleteLaunchTemplateVersionsResponseSuccessItem) SetVersionNumber(v int64) *DeleteLaunchTemplateVersionsResponseSuccessItem { - s.VersionNumber = &v - return s -} - -type DeleteNatGatewayInput struct { - _ struct{} `type:"structure"` - - // The ID of the NAT gateway. - // - // NatGatewayId is a required field - NatGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteNatGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNatGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNatGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNatGatewayInput"} - if s.NatGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("NatGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *DeleteNatGatewayInput) SetNatGatewayId(v string) *DeleteNatGatewayInput { - s.NatGatewayId = &v - return s -} - -type DeleteNatGatewayOutput struct { - _ struct{} `type:"structure"` - - // The ID of the NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` -} - -// String returns the string representation -func (s DeleteNatGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNatGatewayOutput) GoString() string { - return s.String() -} - -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *DeleteNatGatewayOutput) SetNatGatewayId(v string) *DeleteNatGatewayOutput { - s.NatGatewayId = &v - return s -} - -type DeleteNetworkAclEntryInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Indicates whether the rule is an egress rule. - // - // Egress is a required field - Egress *bool `locationName:"egress" type:"boolean" required:"true"` - - // The ID of the network ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` - - // The rule number of the entry to delete. - // - // RuleNumber is a required field - RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` -} - -// String returns the string representation -func (s DeleteNetworkAclEntryInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkAclEntryInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkAclEntryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkAclEntryInput"} - if s.Egress == nil { - invalidParams.Add(request.NewErrParamRequired("Egress")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkAclEntryInput) SetDryRun(v bool) *DeleteNetworkAclEntryInput { - s.DryRun = &v - return s -} - -// SetEgress sets the Egress field's value. -func (s *DeleteNetworkAclEntryInput) SetEgress(v bool) *DeleteNetworkAclEntryInput { - s.Egress = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *DeleteNetworkAclEntryInput) SetNetworkAclId(v string) *DeleteNetworkAclEntryInput { - s.NetworkAclId = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *DeleteNetworkAclEntryInput) SetRuleNumber(v int64) *DeleteNetworkAclEntryInput { - s.RuleNumber = &v - return s -} - -type DeleteNetworkAclEntryOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteNetworkAclEntryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkAclEntryOutput) GoString() string { - return s.String() -} - -type DeleteNetworkAclInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the network ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteNetworkAclInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkAclInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkAclInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkAclInput"} - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkAclInput) SetDryRun(v bool) *DeleteNetworkAclInput { - s.DryRun = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *DeleteNetworkAclInput) SetNetworkAclId(v string) *DeleteNetworkAclInput { - s.NetworkAclId = &v - return s -} - -type DeleteNetworkAclOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteNetworkAclOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkAclOutput) GoString() string { - return s.String() -} - -// Contains the parameters for DeleteNetworkInterface. -type DeleteNetworkInterfaceInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteNetworkInterfaceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkInterfaceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkInterfaceInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkInterfaceInput) SetDryRun(v bool) *DeleteNetworkInterfaceInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *DeleteNetworkInterfaceInput) SetNetworkInterfaceId(v string) *DeleteNetworkInterfaceInput { - s.NetworkInterfaceId = &v - return s -} - -type DeleteNetworkInterfaceOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteNetworkInterfaceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkInterfaceOutput) GoString() string { - return s.String() -} - -// Contains the parameters for DeleteNetworkInterfacePermission. -type DeleteNetworkInterfacePermissionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Specify true to remove the permission even if the network interface is attached - // to an instance. - Force *bool `type:"boolean"` - - // The ID of the network interface permission. - // - // NetworkInterfacePermissionId is a required field - NetworkInterfacePermissionId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteNetworkInterfacePermissionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkInterfacePermissionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkInterfacePermissionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkInterfacePermissionInput"} - if s.NetworkInterfacePermissionId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfacePermissionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkInterfacePermissionInput) SetDryRun(v bool) *DeleteNetworkInterfacePermissionInput { - s.DryRun = &v - return s -} - -// SetForce sets the Force field's value. -func (s *DeleteNetworkInterfacePermissionInput) SetForce(v bool) *DeleteNetworkInterfacePermissionInput { - s.Force = &v - return s -} - -// SetNetworkInterfacePermissionId sets the NetworkInterfacePermissionId field's value. -func (s *DeleteNetworkInterfacePermissionInput) SetNetworkInterfacePermissionId(v string) *DeleteNetworkInterfacePermissionInput { - s.NetworkInterfacePermissionId = &v - return s -} - -// Contains the output for DeleteNetworkInterfacePermission. -type DeleteNetworkInterfacePermissionOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds, otherwise returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s DeleteNetworkInterfacePermissionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteNetworkInterfacePermissionOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *DeleteNetworkInterfacePermissionOutput) SetReturn(v bool) *DeleteNetworkInterfacePermissionOutput { - s.Return = &v - return s -} - -type DeletePlacementGroupInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The name of the placement group. - // - // GroupName is a required field - GroupName *string `locationName:"groupName" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeletePlacementGroupInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeletePlacementGroupInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeletePlacementGroupInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeletePlacementGroupInput"} - if s.GroupName == nil { - invalidParams.Add(request.NewErrParamRequired("GroupName")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeletePlacementGroupInput) SetDryRun(v bool) *DeletePlacementGroupInput { - s.DryRun = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *DeletePlacementGroupInput) SetGroupName(v string) *DeletePlacementGroupInput { - s.GroupName = &v - return s -} - -type DeletePlacementGroupOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeletePlacementGroupOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeletePlacementGroupOutput) GoString() string { - return s.String() -} - -// Describes the error for a Reserved Instance whose queued purchase could not -// be deleted. -type DeleteQueuedReservedInstancesError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string" enum:"DeleteQueuedReservedInstancesErrorCode"` - - // The error message. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s DeleteQueuedReservedInstancesError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteQueuedReservedInstancesError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *DeleteQueuedReservedInstancesError) SetCode(v string) *DeleteQueuedReservedInstancesError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *DeleteQueuedReservedInstancesError) SetMessage(v string) *DeleteQueuedReservedInstancesError { - s.Message = &v - return s -} - -type DeleteQueuedReservedInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the Reserved Instances. - // - // ReservedInstancesIds is a required field - ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"item" min:"1" type:"list" required:"true"` -} - -// String returns the string representation -func (s DeleteQueuedReservedInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteQueuedReservedInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteQueuedReservedInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteQueuedReservedInstancesInput"} - if s.ReservedInstancesIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesIds")) - } - if s.ReservedInstancesIds != nil && len(s.ReservedInstancesIds) < 1 { - invalidParams.Add(request.NewErrParamMinLen("ReservedInstancesIds", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteQueuedReservedInstancesInput) SetDryRun(v bool) *DeleteQueuedReservedInstancesInput { - s.DryRun = &v - return s -} - -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *DeleteQueuedReservedInstancesInput) SetReservedInstancesIds(v []*string) *DeleteQueuedReservedInstancesInput { - s.ReservedInstancesIds = v - return s -} - -type DeleteQueuedReservedInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about the queued purchases that could not be deleted. - FailedQueuedPurchaseDeletions []*FailedQueuedPurchaseDeletion `locationName:"failedQueuedPurchaseDeletionSet" locationNameList:"item" type:"list"` - - // Information about the queued purchases that were successfully deleted. - SuccessfulQueuedPurchaseDeletions []*SuccessfulQueuedPurchaseDeletion `locationName:"successfulQueuedPurchaseDeletionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteQueuedReservedInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteQueuedReservedInstancesOutput) GoString() string { - return s.String() -} - -// SetFailedQueuedPurchaseDeletions sets the FailedQueuedPurchaseDeletions field's value. -func (s *DeleteQueuedReservedInstancesOutput) SetFailedQueuedPurchaseDeletions(v []*FailedQueuedPurchaseDeletion) *DeleteQueuedReservedInstancesOutput { - s.FailedQueuedPurchaseDeletions = v - return s -} - -// SetSuccessfulQueuedPurchaseDeletions sets the SuccessfulQueuedPurchaseDeletions field's value. -func (s *DeleteQueuedReservedInstancesOutput) SetSuccessfulQueuedPurchaseDeletions(v []*SuccessfulQueuedPurchaseDeletion) *DeleteQueuedReservedInstancesOutput { - s.SuccessfulQueuedPurchaseDeletions = v - return s -} - -type DeleteRouteInput struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR range for the route. The value you specify must match the CIDR - // for the route exactly. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR range for the route. The value you specify must match the CIDR - // for the route exactly. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteRouteInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *DeleteRouteInput) SetDestinationCidrBlock(v string) *DeleteRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *DeleteRouteInput) SetDestinationIpv6CidrBlock(v string) *DeleteRouteInput { - s.DestinationIpv6CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteRouteInput) SetDryRun(v bool) *DeleteRouteInput { - s.DryRun = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *DeleteRouteInput) SetRouteTableId(v string) *DeleteRouteInput { - s.RouteTableId = &v - return s -} - -type DeleteRouteOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteRouteOutput) GoString() string { - return s.String() -} - -type DeleteRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteRouteTableInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteRouteTableInput) SetDryRun(v bool) *DeleteRouteTableInput { - s.DryRun = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *DeleteRouteTableInput) SetRouteTableId(v string) *DeleteRouteTableInput { - s.RouteTableId = &v - return s -} - -type DeleteRouteTableOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteRouteTableOutput) GoString() string { - return s.String() -} - -type DeleteSecurityGroupInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the security group. Required for a nondefault VPC. - GroupId *string `type:"string"` - - // [EC2-Classic, default VPC] The name of the security group. You can specify - // either the security group name or the security group ID. - GroupName *string `type:"string"` -} - -// String returns the string representation -func (s DeleteSecurityGroupInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSecurityGroupInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteSecurityGroupInput) SetDryRun(v bool) *DeleteSecurityGroupInput { - s.DryRun = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *DeleteSecurityGroupInput) SetGroupId(v string) *DeleteSecurityGroupInput { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *DeleteSecurityGroupInput) SetGroupName(v string) *DeleteSecurityGroupInput { - s.GroupName = &v - return s -} - -type DeleteSecurityGroupOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteSecurityGroupOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSecurityGroupOutput) GoString() string { - return s.String() -} - -type DeleteSnapshotInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the EBS snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteSnapshotInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSnapshotInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteSnapshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteSnapshotInput"} - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteSnapshotInput) SetDryRun(v bool) *DeleteSnapshotInput { - s.DryRun = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *DeleteSnapshotInput) SetSnapshotId(v string) *DeleteSnapshotInput { - s.SnapshotId = &v - return s -} - -type DeleteSnapshotOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteSnapshotOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSnapshotOutput) GoString() string { - return s.String() -} - -// Contains the parameters for DeleteSpotDatafeedSubscription. -type DeleteSpotDatafeedSubscriptionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DeleteSpotDatafeedSubscriptionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSpotDatafeedSubscriptionInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteSpotDatafeedSubscriptionInput) SetDryRun(v bool) *DeleteSpotDatafeedSubscriptionInput { - s.DryRun = &v - return s -} - -type DeleteSpotDatafeedSubscriptionOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteSpotDatafeedSubscriptionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSpotDatafeedSubscriptionOutput) GoString() string { - return s.String() -} - -type DeleteSubnetInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the subnet. - // - // SubnetId is a required field - SubnetId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteSubnetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSubnetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteSubnetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteSubnetInput"} - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteSubnetInput) SetDryRun(v bool) *DeleteSubnetInput { - s.DryRun = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *DeleteSubnetInput) SetSubnetId(v string) *DeleteSubnetInput { - s.SubnetId = &v - return s -} - -type DeleteSubnetOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteSubnetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteSubnetOutput) GoString() string { - return s.String() -} - -type DeleteTagsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the resources, separated by spaces. - // - // Constraints: Up to 1000 resource IDs. We recommend breaking up this request - // into smaller batches. - // - // Resources is a required field - Resources []*string `locationName:"resourceId" type:"list" required:"true"` - - // The tags to delete. Specify a tag key and an optional tag value to delete - // specific tags. If you specify a tag key without a tag value, we delete any - // tag with this key regardless of its value. If you specify a tag key with - // an empty string as the tag value, we delete the tag only if its value is - // an empty string. - // - // If you omit this parameter, we delete all user-defined tags for the specified - // resources. We do not delete AWS-generated tags (tags that have the aws: prefix). - Tags []*Tag `locationName:"tag" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteTagsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTagsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTagsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTagsInput"} - if s.Resources == nil { - invalidParams.Add(request.NewErrParamRequired("Resources")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTagsInput) SetDryRun(v bool) *DeleteTagsInput { - s.DryRun = &v - return s -} - -// SetResources sets the Resources field's value. -func (s *DeleteTagsInput) SetResources(v []*string) *DeleteTagsInput { - s.Resources = v - return s -} - -// SetTags sets the Tags field's value. -func (s *DeleteTagsInput) SetTags(v []*Tag) *DeleteTagsInput { - s.Tags = v - return s -} - -type DeleteTagsOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteTagsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTagsOutput) GoString() string { - return s.String() -} - -type DeleteTrafficMirrorFilterInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the Traffic Mirror filter. - // - // TrafficMirrorFilterId is a required field - TrafficMirrorFilterId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorFilterInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorFilterInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTrafficMirrorFilterInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorFilterInput"} - if s.TrafficMirrorFilterId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTrafficMirrorFilterInput) SetDryRun(v bool) *DeleteTrafficMirrorFilterInput { - s.DryRun = &v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *DeleteTrafficMirrorFilterInput) SetTrafficMirrorFilterId(v string) *DeleteTrafficMirrorFilterInput { - s.TrafficMirrorFilterId = &v - return s -} - -type DeleteTrafficMirrorFilterOutput struct { - _ struct{} `type:"structure"` - - // The ID of the Traffic Mirror filter. - TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorFilterOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorFilterOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *DeleteTrafficMirrorFilterOutput) SetTrafficMirrorFilterId(v string) *DeleteTrafficMirrorFilterOutput { - s.TrafficMirrorFilterId = &v - return s -} - -type DeleteTrafficMirrorFilterRuleInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the Traffic Mirror rule. - // - // TrafficMirrorFilterRuleId is a required field - TrafficMirrorFilterRuleId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorFilterRuleInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorFilterRuleInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTrafficMirrorFilterRuleInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorFilterRuleInput"} - if s.TrafficMirrorFilterRuleId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterRuleId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTrafficMirrorFilterRuleInput) SetDryRun(v bool) *DeleteTrafficMirrorFilterRuleInput { - s.DryRun = &v - return s -} - -// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. -func (s *DeleteTrafficMirrorFilterRuleInput) SetTrafficMirrorFilterRuleId(v string) *DeleteTrafficMirrorFilterRuleInput { - s.TrafficMirrorFilterRuleId = &v - return s -} - -type DeleteTrafficMirrorFilterRuleOutput struct { - _ struct{} `type:"structure"` - - // The ID of the deleted Traffic Mirror rule. - TrafficMirrorFilterRuleId *string `locationName:"trafficMirrorFilterRuleId" type:"string"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorFilterRuleOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorFilterRuleOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. -func (s *DeleteTrafficMirrorFilterRuleOutput) SetTrafficMirrorFilterRuleId(v string) *DeleteTrafficMirrorFilterRuleOutput { - s.TrafficMirrorFilterRuleId = &v - return s -} - -type DeleteTrafficMirrorSessionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the Traffic Mirror session. - // - // TrafficMirrorSessionId is a required field - TrafficMirrorSessionId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorSessionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorSessionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTrafficMirrorSessionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorSessionInput"} - if s.TrafficMirrorSessionId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorSessionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTrafficMirrorSessionInput) SetDryRun(v bool) *DeleteTrafficMirrorSessionInput { - s.DryRun = &v - return s -} - -// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. -func (s *DeleteTrafficMirrorSessionInput) SetTrafficMirrorSessionId(v string) *DeleteTrafficMirrorSessionInput { - s.TrafficMirrorSessionId = &v - return s -} - -type DeleteTrafficMirrorSessionOutput struct { - _ struct{} `type:"structure"` - - // The ID of the deleted Traffic Mirror session. - TrafficMirrorSessionId *string `locationName:"trafficMirrorSessionId" type:"string"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorSessionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorSessionOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. -func (s *DeleteTrafficMirrorSessionOutput) SetTrafficMirrorSessionId(v string) *DeleteTrafficMirrorSessionOutput { - s.TrafficMirrorSessionId = &v - return s -} - -type DeleteTrafficMirrorTargetInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the Traffic Mirror target. - // - // TrafficMirrorTargetId is a required field - TrafficMirrorTargetId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorTargetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorTargetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTrafficMirrorTargetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorTargetInput"} - if s.TrafficMirrorTargetId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorTargetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTrafficMirrorTargetInput) SetDryRun(v bool) *DeleteTrafficMirrorTargetInput { - s.DryRun = &v - return s -} - -// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. -func (s *DeleteTrafficMirrorTargetInput) SetTrafficMirrorTargetId(v string) *DeleteTrafficMirrorTargetInput { - s.TrafficMirrorTargetId = &v - return s -} - -type DeleteTrafficMirrorTargetOutput struct { - _ struct{} `type:"structure"` - - // The ID of the deleted Traffic Mirror target. - TrafficMirrorTargetId *string `locationName:"trafficMirrorTargetId" type:"string"` -} - -// String returns the string representation -func (s DeleteTrafficMirrorTargetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTrafficMirrorTargetOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. -func (s *DeleteTrafficMirrorTargetOutput) SetTrafficMirrorTargetId(v string) *DeleteTrafficMirrorTargetOutput { - s.TrafficMirrorTargetId = &v - return s -} - -type DeleteTransitGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the transit gateway. - // - // TransitGatewayId is a required field - TransitGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTransitGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTransitGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayInput"} - if s.TransitGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTransitGatewayInput) SetDryRun(v bool) *DeleteTransitGatewayInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *DeleteTransitGatewayInput) SetTransitGatewayId(v string) *DeleteTransitGatewayInput { - s.TransitGatewayId = &v - return s -} - -type DeleteTransitGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the deleted transit gateway. - TransitGateway *TransitGateway `locationName:"transitGateway" type:"structure"` -} - -// String returns the string representation -func (s DeleteTransitGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayOutput) GoString() string { - return s.String() -} - -// SetTransitGateway sets the TransitGateway field's value. -func (s *DeleteTransitGatewayOutput) SetTransitGateway(v *TransitGateway) *DeleteTransitGatewayOutput { - s.TransitGateway = v - return s -} - -type DeleteTransitGatewayRouteInput struct { - _ struct{} `type:"structure"` - - // The CIDR range for the route. This must match the CIDR for the route exactly. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTransitGatewayRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTransitGatewayRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *DeleteTransitGatewayRouteInput) SetDestinationCidrBlock(v string) *DeleteTransitGatewayRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTransitGatewayRouteInput) SetDryRun(v bool) *DeleteTransitGatewayRouteInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *DeleteTransitGatewayRouteInput) SetTransitGatewayRouteTableId(v string) *DeleteTransitGatewayRouteInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type DeleteTransitGatewayRouteOutput struct { - _ struct{} `type:"structure"` - - // Information about the route. - Route *TransitGatewayRoute `locationName:"route" type:"structure"` -} - -// String returns the string representation -func (s DeleteTransitGatewayRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayRouteOutput) GoString() string { - return s.String() -} - -// SetRoute sets the Route field's value. -func (s *DeleteTransitGatewayRouteOutput) SetRoute(v *TransitGatewayRoute) *DeleteTransitGatewayRouteOutput { - s.Route = v - return s -} - -type DeleteTransitGatewayRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTransitGatewayRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTransitGatewayRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayRouteTableInput"} - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTransitGatewayRouteTableInput) SetDryRun(v bool) *DeleteTransitGatewayRouteTableInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *DeleteTransitGatewayRouteTableInput) SetTransitGatewayRouteTableId(v string) *DeleteTransitGatewayRouteTableInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type DeleteTransitGatewayRouteTableOutput struct { - _ struct{} `type:"structure"` - - // Information about the deleted transit gateway route table. - TransitGatewayRouteTable *TransitGatewayRouteTable `locationName:"transitGatewayRouteTable" type:"structure"` -} - -// String returns the string representation -func (s DeleteTransitGatewayRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayRouteTableOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayRouteTable sets the TransitGatewayRouteTable field's value. -func (s *DeleteTransitGatewayRouteTableOutput) SetTransitGatewayRouteTable(v *TransitGatewayRouteTable) *DeleteTransitGatewayRouteTableOutput { - s.TransitGatewayRouteTable = v - return s -} - -type DeleteTransitGatewayVpcAttachmentInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteTransitGatewayVpcAttachmentInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayVpcAttachmentInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTransitGatewayVpcAttachmentInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayVpcAttachmentInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *DeleteTransitGatewayVpcAttachmentInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *DeleteTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *DeleteTransitGatewayVpcAttachmentInput { - s.TransitGatewayAttachmentId = &v - return s -} - -type DeleteTransitGatewayVpcAttachmentOutput struct { - _ struct{} `type:"structure"` - - // Information about the deleted VPC attachment. - TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` -} - -// String returns the string representation -func (s DeleteTransitGatewayVpcAttachmentOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteTransitGatewayVpcAttachmentOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. -func (s *DeleteTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *DeleteTransitGatewayVpcAttachmentOutput { - s.TransitGatewayVpcAttachment = v - return s -} - -type DeleteVolumeInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteVolumeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVolumeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVolumeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVolumeInput) SetDryRun(v bool) *DeleteVolumeInput { - s.DryRun = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *DeleteVolumeInput) SetVolumeId(v string) *DeleteVolumeInput { - s.VolumeId = &v - return s -} - -type DeleteVolumeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteVolumeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVolumeOutput) GoString() string { - return s.String() -} - -type DeleteVpcEndpointConnectionNotificationsInput struct { - _ struct{} `type:"structure"` - - // One or more notification IDs. - // - // ConnectionNotificationIds is a required field - ConnectionNotificationIds []*string `locationName:"ConnectionNotificationId" locationNameList:"item" type:"list" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s DeleteVpcEndpointConnectionNotificationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcEndpointConnectionNotificationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcEndpointConnectionNotificationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointConnectionNotificationsInput"} - if s.ConnectionNotificationIds == nil { - invalidParams.Add(request.NewErrParamRequired("ConnectionNotificationIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetConnectionNotificationIds sets the ConnectionNotificationIds field's value. -func (s *DeleteVpcEndpointConnectionNotificationsInput) SetConnectionNotificationIds(v []*string) *DeleteVpcEndpointConnectionNotificationsInput { - s.ConnectionNotificationIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcEndpointConnectionNotificationsInput) SetDryRun(v bool) *DeleteVpcEndpointConnectionNotificationsInput { - s.DryRun = &v - return s -} - -type DeleteVpcEndpointConnectionNotificationsOutput struct { - _ struct{} `type:"structure"` - - // Information about the notifications that could not be deleted successfully. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteVpcEndpointConnectionNotificationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcEndpointConnectionNotificationsOutput) GoString() string { - return s.String() -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DeleteVpcEndpointConnectionNotificationsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointConnectionNotificationsOutput { - s.Unsuccessful = v - return s -} - -type DeleteVpcEndpointServiceConfigurationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of one or more services. - // - // ServiceIds is a required field - ServiceIds []*string `locationName:"ServiceId" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s DeleteVpcEndpointServiceConfigurationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcEndpointServiceConfigurationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcEndpointServiceConfigurationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointServiceConfigurationsInput"} - if s.ServiceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcEndpointServiceConfigurationsInput) SetDryRun(v bool) *DeleteVpcEndpointServiceConfigurationsInput { - s.DryRun = &v - return s -} - -// SetServiceIds sets the ServiceIds field's value. -func (s *DeleteVpcEndpointServiceConfigurationsInput) SetServiceIds(v []*string) *DeleteVpcEndpointServiceConfigurationsInput { - s.ServiceIds = v - return s -} - -type DeleteVpcEndpointServiceConfigurationsOutput struct { - _ struct{} `type:"structure"` - - // Information about the service configurations that were not deleted, if applicable. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteVpcEndpointServiceConfigurationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcEndpointServiceConfigurationsOutput) GoString() string { - return s.String() -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DeleteVpcEndpointServiceConfigurationsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointServiceConfigurationsOutput { - s.Unsuccessful = v - return s -} - -// Contains the parameters for DeleteVpcEndpoints. -type DeleteVpcEndpointsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more VPC endpoint IDs. - // - // VpcEndpointIds is a required field - VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s DeleteVpcEndpointsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcEndpointsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcEndpointsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointsInput"} - if s.VpcEndpointIds == nil { - invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcEndpointsInput) SetDryRun(v bool) *DeleteVpcEndpointsInput { - s.DryRun = &v - return s -} - -// SetVpcEndpointIds sets the VpcEndpointIds field's value. -func (s *DeleteVpcEndpointsInput) SetVpcEndpointIds(v []*string) *DeleteVpcEndpointsInput { - s.VpcEndpointIds = v - return s -} - -// Contains the output of DeleteVpcEndpoints. -type DeleteVpcEndpointsOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC endpoints that were not successfully deleted. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DeleteVpcEndpointsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcEndpointsOutput) GoString() string { - return s.String() -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DeleteVpcEndpointsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointsOutput { - s.Unsuccessful = v - return s -} - -type DeleteVpcInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteVpcInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcInput) SetDryRun(v bool) *DeleteVpcInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DeleteVpcInput) SetVpcId(v string) *DeleteVpcInput { - s.VpcId = &v - return s -} - -type DeleteVpcOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteVpcOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcOutput) GoString() string { - return s.String() -} - -type DeleteVpcPeeringConnectionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC peering connection. - // - // VpcPeeringConnectionId is a required field - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteVpcPeeringConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcPeeringConnectionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcPeeringConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcPeeringConnectionInput"} - if s.VpcPeeringConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcPeeringConnectionInput) SetDryRun(v bool) *DeleteVpcPeeringConnectionInput { - s.DryRun = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *DeleteVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *DeleteVpcPeeringConnectionInput { - s.VpcPeeringConnectionId = &v - return s -} - -type DeleteVpcPeeringConnectionOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s DeleteVpcPeeringConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpcPeeringConnectionOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *DeleteVpcPeeringConnectionOutput) SetReturn(v bool) *DeleteVpcPeeringConnectionOutput { - s.Return = &v - return s -} - -// Contains the parameters for DeleteVpnConnection. -type DeleteVpnConnectionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteVpnConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpnConnectionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpnConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpnConnectionInput"} - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpnConnectionInput) SetDryRun(v bool) *DeleteVpnConnectionInput { - s.DryRun = &v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *DeleteVpnConnectionInput) SetVpnConnectionId(v string) *DeleteVpnConnectionInput { - s.VpnConnectionId = &v - return s -} - -type DeleteVpnConnectionOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteVpnConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpnConnectionOutput) GoString() string { - return s.String() -} - -// Contains the parameters for DeleteVpnConnectionRoute. -type DeleteVpnConnectionRouteInput struct { - _ struct{} `type:"structure"` - - // The CIDR block associated with the local subnet of the customer network. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // The ID of the VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteVpnConnectionRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpnConnectionRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpnConnectionRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpnConnectionRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *DeleteVpnConnectionRouteInput) SetDestinationCidrBlock(v string) *DeleteVpnConnectionRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *DeleteVpnConnectionRouteInput) SetVpnConnectionId(v string) *DeleteVpnConnectionRouteInput { - s.VpnConnectionId = &v - return s -} - -type DeleteVpnConnectionRouteOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteVpnConnectionRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpnConnectionRouteOutput) GoString() string { - return s.String() -} - -// Contains the parameters for DeleteVpnGateway. -type DeleteVpnGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the virtual private gateway. - // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteVpnGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpnGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpnGatewayInput"} - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpnGatewayInput) SetDryRun(v bool) *DeleteVpnGatewayInput { - s.DryRun = &v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *DeleteVpnGatewayInput) SetVpnGatewayId(v string) *DeleteVpnGatewayInput { - s.VpnGatewayId = &v - return s -} - -type DeleteVpnGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteVpnGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeleteVpnGatewayOutput) GoString() string { - return s.String() -} - -type DeprovisionByoipCidrInput struct { - _ struct{} `type:"structure"` - - // The public IPv4 address range, in CIDR notation. The prefix must be the same - // prefix that you specified when you provisioned the address range. - // - // Cidr is a required field - Cidr *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s DeprovisionByoipCidrInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeprovisionByoipCidrInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeprovisionByoipCidrInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeprovisionByoipCidrInput"} - if s.Cidr == nil { - invalidParams.Add(request.NewErrParamRequired("Cidr")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidr sets the Cidr field's value. -func (s *DeprovisionByoipCidrInput) SetCidr(v string) *DeprovisionByoipCidrInput { - s.Cidr = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DeprovisionByoipCidrInput) SetDryRun(v bool) *DeprovisionByoipCidrInput { - s.DryRun = &v - return s -} - -type DeprovisionByoipCidrOutput struct { - _ struct{} `type:"structure"` - - // Information about the address range. - ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` -} - -// String returns the string representation -func (s DeprovisionByoipCidrOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeprovisionByoipCidrOutput) GoString() string { - return s.String() -} - -// SetByoipCidr sets the ByoipCidr field's value. -func (s *DeprovisionByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *DeprovisionByoipCidrOutput { - s.ByoipCidr = v - return s -} - -// Contains the parameters for DeregisterImage. -type DeregisterImageInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DeregisterImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeregisterImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeregisterImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeregisterImageInput"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeregisterImageInput) SetDryRun(v bool) *DeregisterImageInput { - s.DryRun = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *DeregisterImageInput) SetImageId(v string) *DeregisterImageInput { - s.ImageId = &v - return s -} - -type DeregisterImageOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeregisterImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DeregisterImageOutput) GoString() string { - return s.String() -} - -type DescribeAccountAttributesInput struct { - _ struct{} `type:"structure"` - - // The account attribute names. - AttributeNames []*string `locationName:"attributeName" locationNameList:"attributeName" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DescribeAccountAttributesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAccountAttributesInput) GoString() string { - return s.String() -} - -// SetAttributeNames sets the AttributeNames field's value. -func (s *DescribeAccountAttributesInput) SetAttributeNames(v []*string) *DescribeAccountAttributesInput { - s.AttributeNames = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeAccountAttributesInput) SetDryRun(v bool) *DescribeAccountAttributesInput { - s.DryRun = &v - return s -} - -type DescribeAccountAttributesOutput struct { - _ struct{} `type:"structure"` - - // Information about the account attributes. - AccountAttributes []*AccountAttribute `locationName:"accountAttributeSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeAccountAttributesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAccountAttributesOutput) GoString() string { - return s.String() -} - -// SetAccountAttributes sets the AccountAttributes field's value. -func (s *DescribeAccountAttributesOutput) SetAccountAttributes(v []*AccountAttribute) *DescribeAccountAttributesOutput { - s.AccountAttributes = v - return s -} - -type DescribeAddressesInput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] Information about the allocation IDs. - AllocationIds []*string `locationName:"AllocationId" locationNameList:"AllocationId" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - // - // * allocation-id - [EC2-VPC] The allocation ID for the address. - // - // * association-id - [EC2-VPC] The association ID for the address. - // - // * domain - Indicates whether the address is for use in EC2-Classic (standard) - // or in a VPC (vpc). - // - // * instance-id - The ID of the instance the address is associated with, - // if any. - // - // * network-interface-id - [EC2-VPC] The ID of the network interface that - // the address is associated with, if any. - // - // * network-interface-owner-id - The AWS account ID of the owner. - // - // * private-ip-address - [EC2-VPC] The private IP address associated with - // the Elastic IP address. - // - // * public-ip - The Elastic IP address. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more Elastic IP addresses. - // - // Default: Describes all your Elastic IP addresses. - PublicIps []*string `locationName:"PublicIp" locationNameList:"PublicIp" type:"list"` -} - -// String returns the string representation -func (s DescribeAddressesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAddressesInput) GoString() string { - return s.String() -} - -// SetAllocationIds sets the AllocationIds field's value. -func (s *DescribeAddressesInput) SetAllocationIds(v []*string) *DescribeAddressesInput { - s.AllocationIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeAddressesInput) SetDryRun(v bool) *DescribeAddressesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeAddressesInput) SetFilters(v []*Filter) *DescribeAddressesInput { - s.Filters = v - return s -} - -// SetPublicIps sets the PublicIps field's value. -func (s *DescribeAddressesInput) SetPublicIps(v []*string) *DescribeAddressesInput { - s.PublicIps = v - return s -} - -type DescribeAddressesOutput struct { - _ struct{} `type:"structure"` - - // Information about the Elastic IP addresses. - Addresses []*Address `locationName:"addressesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeAddressesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAddressesOutput) GoString() string { - return s.String() -} - -// SetAddresses sets the Addresses field's value. -func (s *DescribeAddressesOutput) SetAddresses(v []*Address) *DescribeAddressesOutput { - s.Addresses = v - return s -} - -type DescribeAggregateIdFormatInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s DescribeAggregateIdFormatInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAggregateIdFormatInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeAggregateIdFormatInput) SetDryRun(v bool) *DescribeAggregateIdFormatInput { - s.DryRun = &v - return s -} - -type DescribeAggregateIdFormatOutput struct { - _ struct{} `type:"structure"` - - // Information about each resource's ID format. - Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` - - // Indicates whether all resource types in the Region are configured to use - // longer IDs. This value is only true if all users are configured to use longer - // IDs for all resources types in the Region. - UseLongIdsAggregated *bool `locationName:"useLongIdsAggregated" type:"boolean"` -} - -// String returns the string representation -func (s DescribeAggregateIdFormatOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAggregateIdFormatOutput) GoString() string { - return s.String() -} - -// SetStatuses sets the Statuses field's value. -func (s *DescribeAggregateIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeAggregateIdFormatOutput { - s.Statuses = v - return s -} - -// SetUseLongIdsAggregated sets the UseLongIdsAggregated field's value. -func (s *DescribeAggregateIdFormatOutput) SetUseLongIdsAggregated(v bool) *DescribeAggregateIdFormatOutput { - s.UseLongIdsAggregated = &v - return s -} - -type DescribeAvailabilityZonesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * message - Information about the Availability Zone. - // - // * region-name - The name of the Region for the Availability Zone (for - // example, us-east-1). - // - // * state - The state of the Availability Zone (available | information - // | impaired | unavailable). - // - // * zone-id - The ID of the Availability Zone (for example, use1-az1). - // - // * zone-name - The name of the Availability Zone (for example, us-east-1a). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The IDs of the Availability Zones. - ZoneIds []*string `locationName:"ZoneId" locationNameList:"ZoneId" type:"list"` - - // The names of the Availability Zones. - ZoneNames []*string `locationName:"ZoneName" locationNameList:"ZoneName" type:"list"` -} - -// String returns the string representation -func (s DescribeAvailabilityZonesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAvailabilityZonesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeAvailabilityZonesInput) SetDryRun(v bool) *DescribeAvailabilityZonesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeAvailabilityZonesInput) SetFilters(v []*Filter) *DescribeAvailabilityZonesInput { - s.Filters = v - return s -} - -// SetZoneIds sets the ZoneIds field's value. -func (s *DescribeAvailabilityZonesInput) SetZoneIds(v []*string) *DescribeAvailabilityZonesInput { - s.ZoneIds = v - return s -} - -// SetZoneNames sets the ZoneNames field's value. -func (s *DescribeAvailabilityZonesInput) SetZoneNames(v []*string) *DescribeAvailabilityZonesInput { - s.ZoneNames = v - return s -} - -type DescribeAvailabilityZonesOutput struct { - _ struct{} `type:"structure"` - - // Information about the Availability Zones. - AvailabilityZones []*AvailabilityZone `locationName:"availabilityZoneInfo" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeAvailabilityZonesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeAvailabilityZonesOutput) GoString() string { - return s.String() -} - -// SetAvailabilityZones sets the AvailabilityZones field's value. -func (s *DescribeAvailabilityZonesOutput) SetAvailabilityZones(v []*AvailabilityZone) *DescribeAvailabilityZonesOutput { - s.AvailabilityZones = v - return s -} - -type DescribeBundleTasksInput struct { - _ struct{} `type:"structure"` - - // The bundle task IDs. - // - // Default: Describes all your bundle tasks. - BundleIds []*string `locationName:"BundleId" locationNameList:"BundleId" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * bundle-id - The ID of the bundle task. - // - // * error-code - If the task failed, the error code returned. - // - // * error-message - If the task failed, the error message returned. - // - // * instance-id - The ID of the instance. - // - // * progress - The level of task completion, as a percentage (for example, - // 20%). - // - // * s3-bucket - The Amazon S3 bucket to store the AMI. - // - // * s3-prefix - The beginning of the AMI name. - // - // * start-time - The time the task started (for example, 2013-09-15T17:15:20.000Z). - // - // * state - The state of the task (pending | waiting-for-shutdown | bundling - // | storing | cancelling | complete | failed). - // - // * update-time - The time of the most recent update for the task. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` -} - -// String returns the string representation -func (s DescribeBundleTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeBundleTasksInput) GoString() string { - return s.String() -} - -// SetBundleIds sets the BundleIds field's value. -func (s *DescribeBundleTasksInput) SetBundleIds(v []*string) *DescribeBundleTasksInput { - s.BundleIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeBundleTasksInput) SetDryRun(v bool) *DescribeBundleTasksInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeBundleTasksInput) SetFilters(v []*Filter) *DescribeBundleTasksInput { - s.Filters = v - return s -} - -type DescribeBundleTasksOutput struct { - _ struct{} `type:"structure"` - - // Information about the bundle tasks. - BundleTasks []*BundleTask `locationName:"bundleInstanceTasksSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeBundleTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeBundleTasksOutput) GoString() string { - return s.String() -} - -// SetBundleTasks sets the BundleTasks field's value. -func (s *DescribeBundleTasksOutput) SetBundleTasks(v []*BundleTask) *DescribeBundleTasksOutput { - s.BundleTasks = v - return s -} - -type DescribeByoipCidrsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - // - // MaxResults is a required field - MaxResults *int64 `min:"1" type:"integer" required:"true"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeByoipCidrsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeByoipCidrsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeByoipCidrsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeByoipCidrsInput"} - if s.MaxResults == nil { - invalidParams.Add(request.NewErrParamRequired("MaxResults")) - } - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeByoipCidrsInput) SetDryRun(v bool) *DescribeByoipCidrsInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeByoipCidrsInput) SetMaxResults(v int64) *DescribeByoipCidrsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeByoipCidrsInput) SetNextToken(v string) *DescribeByoipCidrsInput { - s.NextToken = &v - return s -} - -type DescribeByoipCidrsOutput struct { - _ struct{} `type:"structure"` - - // Information about your address ranges. - ByoipCidrs []*ByoipCidr `locationName:"byoipCidrSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeByoipCidrsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeByoipCidrsOutput) GoString() string { - return s.String() -} - -// SetByoipCidrs sets the ByoipCidrs field's value. -func (s *DescribeByoipCidrsOutput) SetByoipCidrs(v []*ByoipCidr) *DescribeByoipCidrsOutput { - s.ByoipCidrs = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeByoipCidrsOutput) SetNextToken(v string) *DescribeByoipCidrsOutput { - s.NextToken = &v - return s -} - -type DescribeCapacityReservationsInput struct { - _ struct{} `type:"structure"` - - // The ID of the Capacity Reservation. - CapacityReservationIds []*string `locationName:"CapacityReservationId" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. - MaxResults *int64 `min:"1" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeCapacityReservationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCapacityReservationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeCapacityReservationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeCapacityReservationsInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCapacityReservationIds sets the CapacityReservationIds field's value. -func (s *DescribeCapacityReservationsInput) SetCapacityReservationIds(v []*string) *DescribeCapacityReservationsInput { - s.CapacityReservationIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeCapacityReservationsInput) SetDryRun(v bool) *DescribeCapacityReservationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeCapacityReservationsInput) SetFilters(v []*Filter) *DescribeCapacityReservationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeCapacityReservationsInput) SetMaxResults(v int64) *DescribeCapacityReservationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeCapacityReservationsInput) SetNextToken(v string) *DescribeCapacityReservationsInput { - s.NextToken = &v - return s -} - -type DescribeCapacityReservationsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Capacity Reservations. - CapacityReservations []*CapacityReservation `locationName:"capacityReservationSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeCapacityReservationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCapacityReservationsOutput) GoString() string { - return s.String() -} - -// SetCapacityReservations sets the CapacityReservations field's value. -func (s *DescribeCapacityReservationsOutput) SetCapacityReservations(v []*CapacityReservation) *DescribeCapacityReservationsOutput { - s.CapacityReservations = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeCapacityReservationsOutput) SetNextToken(v string) *DescribeCapacityReservationsOutput { - s.NextToken = &v - return s -} - -type DescribeClassicLinkInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * group-id - The ID of a VPC security group that's associated with the - // instance. - // - // * instance-id - The ID of the instance. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC to which the instance is linked. vpc-id - - // The ID of the VPC that the instance is linked to. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more instance IDs. Must be instances linked to a VPC through ClassicLink. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - // - // Constraint: If the value is greater than 1000, we return only 1000 items. - MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeClassicLinkInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClassicLinkInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeClassicLinkInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeClassicLinkInstancesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeClassicLinkInstancesInput) SetDryRun(v bool) *DescribeClassicLinkInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClassicLinkInstancesInput) SetFilters(v []*Filter) *DescribeClassicLinkInstancesInput { - s.Filters = v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeClassicLinkInstancesInput) SetInstanceIds(v []*string) *DescribeClassicLinkInstancesInput { - s.InstanceIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClassicLinkInstancesInput) SetMaxResults(v int64) *DescribeClassicLinkInstancesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClassicLinkInstancesInput) SetNextToken(v string) *DescribeClassicLinkInstancesInput { - s.NextToken = &v - return s -} - -type DescribeClassicLinkInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more linked EC2-Classic instances. - Instances []*ClassicLinkInstance `locationName:"instancesSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeClassicLinkInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClassicLinkInstancesOutput) GoString() string { - return s.String() -} - -// SetInstances sets the Instances field's value. -func (s *DescribeClassicLinkInstancesOutput) SetInstances(v []*ClassicLinkInstance) *DescribeClassicLinkInstancesOutput { - s.Instances = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClassicLinkInstancesOutput) SetNextToken(v string) *DescribeClassicLinkInstancesOutput { - s.NextToken = &v - return s -} - -type DescribeClientVpnAuthorizationRulesInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the nextToken - // value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnAuthorizationRulesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnAuthorizationRulesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeClientVpnAuthorizationRulesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnAuthorizationRulesInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DescribeClientVpnAuthorizationRulesInput) SetClientVpnEndpointId(v string) *DescribeClientVpnAuthorizationRulesInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeClientVpnAuthorizationRulesInput) SetDryRun(v bool) *DescribeClientVpnAuthorizationRulesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClientVpnAuthorizationRulesInput) SetFilters(v []*Filter) *DescribeClientVpnAuthorizationRulesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClientVpnAuthorizationRulesInput) SetMaxResults(v int64) *DescribeClientVpnAuthorizationRulesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnAuthorizationRulesInput) SetNextToken(v string) *DescribeClientVpnAuthorizationRulesInput { - s.NextToken = &v - return s -} - -type DescribeClientVpnAuthorizationRulesOutput struct { - _ struct{} `type:"structure"` - - // Information about the authorization rules. - AuthorizationRules []*AuthorizationRule `locationName:"authorizationRule" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnAuthorizationRulesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnAuthorizationRulesOutput) GoString() string { - return s.String() -} - -// SetAuthorizationRules sets the AuthorizationRules field's value. -func (s *DescribeClientVpnAuthorizationRulesOutput) SetAuthorizationRules(v []*AuthorizationRule) *DescribeClientVpnAuthorizationRulesOutput { - s.AuthorizationRules = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnAuthorizationRulesOutput) SetNextToken(v string) *DescribeClientVpnAuthorizationRulesOutput { - s.NextToken = &v - return s -} - -type DescribeClientVpnConnectionsInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the nextToken - // value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnConnectionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeClientVpnConnectionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnConnectionsInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DescribeClientVpnConnectionsInput) SetClientVpnEndpointId(v string) *DescribeClientVpnConnectionsInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeClientVpnConnectionsInput) SetDryRun(v bool) *DescribeClientVpnConnectionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClientVpnConnectionsInput) SetFilters(v []*Filter) *DescribeClientVpnConnectionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClientVpnConnectionsInput) SetMaxResults(v int64) *DescribeClientVpnConnectionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnConnectionsInput) SetNextToken(v string) *DescribeClientVpnConnectionsInput { - s.NextToken = &v - return s -} - -type DescribeClientVpnConnectionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the active and terminated client connections. - Connections []*ClientVpnConnection `locationName:"connections" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnConnectionsOutput) GoString() string { - return s.String() -} - -// SetConnections sets the Connections field's value. -func (s *DescribeClientVpnConnectionsOutput) SetConnections(v []*ClientVpnConnection) *DescribeClientVpnConnectionsOutput { - s.Connections = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnConnectionsOutput) SetNextToken(v string) *DescribeClientVpnConnectionsOutput { - s.NextToken = &v - return s -} - -type DescribeClientVpnEndpointsInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - ClientVpnEndpointIds []*string `locationName:"ClientVpnEndpointId" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the nextToken - // value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnEndpointsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnEndpointsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeClientVpnEndpointsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnEndpointsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointIds sets the ClientVpnEndpointIds field's value. -func (s *DescribeClientVpnEndpointsInput) SetClientVpnEndpointIds(v []*string) *DescribeClientVpnEndpointsInput { - s.ClientVpnEndpointIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeClientVpnEndpointsInput) SetDryRun(v bool) *DescribeClientVpnEndpointsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClientVpnEndpointsInput) SetFilters(v []*Filter) *DescribeClientVpnEndpointsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClientVpnEndpointsInput) SetMaxResults(v int64) *DescribeClientVpnEndpointsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnEndpointsInput) SetNextToken(v string) *DescribeClientVpnEndpointsInput { - s.NextToken = &v - return s -} - -type DescribeClientVpnEndpointsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Client VPN endpoints. - ClientVpnEndpoints []*ClientVpnEndpoint `locationName:"clientVpnEndpoint" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnEndpointsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnEndpointsOutput) GoString() string { - return s.String() -} - -// SetClientVpnEndpoints sets the ClientVpnEndpoints field's value. -func (s *DescribeClientVpnEndpointsOutput) SetClientVpnEndpoints(v []*ClientVpnEndpoint) *DescribeClientVpnEndpointsOutput { - s.ClientVpnEndpoints = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnEndpointsOutput) SetNextToken(v string) *DescribeClientVpnEndpointsOutput { - s.NextToken = &v - return s -} - -type DescribeClientVpnRoutesInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the nextToken - // value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnRoutesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnRoutesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeClientVpnRoutesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnRoutesInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DescribeClientVpnRoutesInput) SetClientVpnEndpointId(v string) *DescribeClientVpnRoutesInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeClientVpnRoutesInput) SetDryRun(v bool) *DescribeClientVpnRoutesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClientVpnRoutesInput) SetFilters(v []*Filter) *DescribeClientVpnRoutesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClientVpnRoutesInput) SetMaxResults(v int64) *DescribeClientVpnRoutesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnRoutesInput) SetNextToken(v string) *DescribeClientVpnRoutesInput { - s.NextToken = &v - return s -} - -type DescribeClientVpnRoutesOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the Client VPN endpoint routes. - Routes []*ClientVpnRoute `locationName:"routes" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeClientVpnRoutesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnRoutesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnRoutesOutput) SetNextToken(v string) *DescribeClientVpnRoutesOutput { - s.NextToken = &v - return s -} - -// SetRoutes sets the Routes field's value. -func (s *DescribeClientVpnRoutesOutput) SetRoutes(v []*ClientVpnRoute) *DescribeClientVpnRoutesOutput { - s.Routes = v - return s -} - -type DescribeClientVpnTargetNetworksInput struct { - _ struct{} `type:"structure"` - - // The IDs of the target network associations. - AssociationIds []*string `locationNameList:"item" type:"list"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the nextToken - // value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnTargetNetworksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnTargetNetworksInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeClientVpnTargetNetworksInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnTargetNetworksInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationIds sets the AssociationIds field's value. -func (s *DescribeClientVpnTargetNetworksInput) SetAssociationIds(v []*string) *DescribeClientVpnTargetNetworksInput { - s.AssociationIds = v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DescribeClientVpnTargetNetworksInput) SetClientVpnEndpointId(v string) *DescribeClientVpnTargetNetworksInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeClientVpnTargetNetworksInput) SetDryRun(v bool) *DescribeClientVpnTargetNetworksInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClientVpnTargetNetworksInput) SetFilters(v []*Filter) *DescribeClientVpnTargetNetworksInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClientVpnTargetNetworksInput) SetMaxResults(v int64) *DescribeClientVpnTargetNetworksInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnTargetNetworksInput) SetNextToken(v string) *DescribeClientVpnTargetNetworksInput { - s.NextToken = &v - return s -} - -type DescribeClientVpnTargetNetworksOutput struct { - _ struct{} `type:"structure"` - - // Information about the associated target networks. - ClientVpnTargetNetworks []*TargetNetwork `locationName:"clientVpnTargetNetworks" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeClientVpnTargetNetworksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeClientVpnTargetNetworksOutput) GoString() string { - return s.String() -} - -// SetClientVpnTargetNetworks sets the ClientVpnTargetNetworks field's value. -func (s *DescribeClientVpnTargetNetworksOutput) SetClientVpnTargetNetworks(v []*TargetNetwork) *DescribeClientVpnTargetNetworksOutput { - s.ClientVpnTargetNetworks = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeClientVpnTargetNetworksOutput) SetNextToken(v string) *DescribeClientVpnTargetNetworksOutput { - s.NextToken = &v - return s -} - -type DescribeConversionTasksInput struct { - _ struct{} `type:"structure"` - - // The conversion task IDs. - ConversionTaskIds []*string `locationName:"conversionTaskId" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DescribeConversionTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeConversionTasksInput) GoString() string { - return s.String() -} - -// SetConversionTaskIds sets the ConversionTaskIds field's value. -func (s *DescribeConversionTasksInput) SetConversionTaskIds(v []*string) *DescribeConversionTasksInput { - s.ConversionTaskIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeConversionTasksInput) SetDryRun(v bool) *DescribeConversionTasksInput { - s.DryRun = &v - return s -} - -type DescribeConversionTasksOutput struct { - _ struct{} `type:"structure"` - - // Information about the conversion tasks. - ConversionTasks []*ConversionTask `locationName:"conversionTasks" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeConversionTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeConversionTasksOutput) GoString() string { - return s.String() -} - -// SetConversionTasks sets the ConversionTasks field's value. -func (s *DescribeConversionTasksOutput) SetConversionTasks(v []*ConversionTask) *DescribeConversionTasksOutput { - s.ConversionTasks = v - return s -} - -// Contains the parameters for DescribeCustomerGateways. -type DescribeCustomerGatewaysInput struct { - _ struct{} `type:"structure"` - - // One or more customer gateway IDs. - // - // Default: Describes all your customer gateways. - CustomerGatewayIds []*string `locationName:"CustomerGatewayId" locationNameList:"CustomerGatewayId" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * bgp-asn - The customer gateway's Border Gateway Protocol (BGP) Autonomous - // System Number (ASN). - // - // * customer-gateway-id - The ID of the customer gateway. - // - // * ip-address - The IP address of the customer gateway's Internet-routable - // external interface. - // - // * state - The state of the customer gateway (pending | available | deleting - // | deleted). - // - // * type - The type of customer gateway. Currently, the only supported type - // is ipsec.1. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` -} - -// String returns the string representation -func (s DescribeCustomerGatewaysInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCustomerGatewaysInput) GoString() string { - return s.String() -} - -// SetCustomerGatewayIds sets the CustomerGatewayIds field's value. -func (s *DescribeCustomerGatewaysInput) SetCustomerGatewayIds(v []*string) *DescribeCustomerGatewaysInput { - s.CustomerGatewayIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeCustomerGatewaysInput) SetDryRun(v bool) *DescribeCustomerGatewaysInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeCustomerGatewaysInput) SetFilters(v []*Filter) *DescribeCustomerGatewaysInput { - s.Filters = v - return s -} - -// Contains the output of DescribeCustomerGateways. -type DescribeCustomerGatewaysOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more customer gateways. - CustomerGateways []*CustomerGateway `locationName:"customerGatewaySet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeCustomerGatewaysOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeCustomerGatewaysOutput) GoString() string { - return s.String() -} - -// SetCustomerGateways sets the CustomerGateways field's value. -func (s *DescribeCustomerGatewaysOutput) SetCustomerGateways(v []*CustomerGateway) *DescribeCustomerGatewaysOutput { - s.CustomerGateways = v - return s -} - -type DescribeDhcpOptionsInput struct { - _ struct{} `type:"structure"` - - // The IDs of one or more DHCP options sets. - // - // Default: Describes all your DHCP options sets. - DhcpOptionsIds []*string `locationName:"DhcpOptionsId" locationNameList:"DhcpOptionsId" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * dhcp-options-id - The ID of a DHCP options set. - // - // * key - The key for one of the options (for example, domain-name). - // - // * value - The value for one of the options. - // - // * owner-id - The ID of the AWS account that owns the DHCP options set. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeDhcpOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeDhcpOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeDhcpOptionsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDhcpOptionsIds sets the DhcpOptionsIds field's value. -func (s *DescribeDhcpOptionsInput) SetDhcpOptionsIds(v []*string) *DescribeDhcpOptionsInput { - s.DhcpOptionsIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeDhcpOptionsInput) SetDryRun(v bool) *DescribeDhcpOptionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeDhcpOptionsInput) SetFilters(v []*Filter) *DescribeDhcpOptionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeDhcpOptionsInput) SetMaxResults(v int64) *DescribeDhcpOptionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeDhcpOptionsInput) SetNextToken(v string) *DescribeDhcpOptionsInput { - s.NextToken = &v - return s -} - -type DescribeDhcpOptionsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more DHCP options sets. - DhcpOptions []*DhcpOptions `locationName:"dhcpOptionsSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeDhcpOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeDhcpOptionsOutput) GoString() string { - return s.String() -} - -// SetDhcpOptions sets the DhcpOptions field's value. -func (s *DescribeDhcpOptionsOutput) SetDhcpOptions(v []*DhcpOptions) *DescribeDhcpOptionsOutput { - s.DhcpOptions = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeDhcpOptionsOutput) SetNextToken(v string) *DescribeDhcpOptionsOutput { - s.NextToken = &v - return s -} - -type DescribeEgressOnlyInternetGatewaysInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more egress-only internet gateway IDs. - EgressOnlyInternetGatewayIds []*string `locationName:"EgressOnlyInternetGatewayId" locationNameList:"item" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeEgressOnlyInternetGatewaysInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeEgressOnlyInternetGatewaysInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeEgressOnlyInternetGatewaysInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeEgressOnlyInternetGatewaysInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetDryRun(v bool) *DescribeEgressOnlyInternetGatewaysInput { - s.DryRun = &v - return s -} - -// SetEgressOnlyInternetGatewayIds sets the EgressOnlyInternetGatewayIds field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetEgressOnlyInternetGatewayIds(v []*string) *DescribeEgressOnlyInternetGatewaysInput { - s.EgressOnlyInternetGatewayIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetMaxResults(v int64) *DescribeEgressOnlyInternetGatewaysInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetNextToken(v string) *DescribeEgressOnlyInternetGatewaysInput { - s.NextToken = &v - return s -} - -type DescribeEgressOnlyInternetGatewaysOutput struct { - _ struct{} `type:"structure"` - - // Information about the egress-only internet gateways. - EgressOnlyInternetGateways []*EgressOnlyInternetGateway `locationName:"egressOnlyInternetGatewaySet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeEgressOnlyInternetGatewaysOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeEgressOnlyInternetGatewaysOutput) GoString() string { - return s.String() -} - -// SetEgressOnlyInternetGateways sets the EgressOnlyInternetGateways field's value. -func (s *DescribeEgressOnlyInternetGatewaysOutput) SetEgressOnlyInternetGateways(v []*EgressOnlyInternetGateway) *DescribeEgressOnlyInternetGatewaysOutput { - s.EgressOnlyInternetGateways = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeEgressOnlyInternetGatewaysOutput) SetNextToken(v string) *DescribeEgressOnlyInternetGatewaysOutput { - s.NextToken = &v - return s -} - -type DescribeElasticGpusInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The Elastic Graphics accelerator IDs. - ElasticGpuIds []*string `locationName:"ElasticGpuId" locationNameList:"item" type:"list"` - - // The filters. - // - // * availability-zone - The Availability Zone in which the Elastic Graphics - // accelerator resides. - // - // * elastic-gpu-health - The status of the Elastic Graphics accelerator - // (OK | IMPAIRED). - // - // * elastic-gpu-state - The state of the Elastic Graphics accelerator (ATTACHED). - // - // * elastic-gpu-type - The type of Elastic Graphics accelerator; for example, - // eg1.medium. - // - // * instance-id - The ID of the instance to which the Elastic Graphics accelerator - // is associated. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 5 and 1000. - MaxResults *int64 `min:"10" type:"integer"` - - // The token to request the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeElasticGpusInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeElasticGpusInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeElasticGpusInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeElasticGpusInput"} - if s.MaxResults != nil && *s.MaxResults < 10 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 10)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeElasticGpusInput) SetDryRun(v bool) *DescribeElasticGpusInput { - s.DryRun = &v - return s -} - -// SetElasticGpuIds sets the ElasticGpuIds field's value. -func (s *DescribeElasticGpusInput) SetElasticGpuIds(v []*string) *DescribeElasticGpusInput { - s.ElasticGpuIds = v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeElasticGpusInput) SetFilters(v []*Filter) *DescribeElasticGpusInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeElasticGpusInput) SetMaxResults(v int64) *DescribeElasticGpusInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeElasticGpusInput) SetNextToken(v string) *DescribeElasticGpusInput { - s.NextToken = &v - return s -} - -type DescribeElasticGpusOutput struct { - _ struct{} `type:"structure"` - - // Information about the Elastic Graphics accelerators. - ElasticGpuSet []*ElasticGpus `locationName:"elasticGpuSet" locationNameList:"item" type:"list"` - - // The total number of items to return. If the total number of items available - // is more than the value specified in max-items then a Next-Token will be provided - // in the output that you can use to resume pagination. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeElasticGpusOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeElasticGpusOutput) GoString() string { - return s.String() -} - -// SetElasticGpuSet sets the ElasticGpuSet field's value. -func (s *DescribeElasticGpusOutput) SetElasticGpuSet(v []*ElasticGpus) *DescribeElasticGpusOutput { - s.ElasticGpuSet = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeElasticGpusOutput) SetMaxResults(v int64) *DescribeElasticGpusOutput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeElasticGpusOutput) SetNextToken(v string) *DescribeElasticGpusOutput { - s.NextToken = &v - return s -} - -type DescribeExportImageTasksInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the export image tasks. - ExportImageTaskIds []*string `locationName:"ExportImageTaskId" locationNameList:"ExportImageTaskId" type:"list"` - - // Filter tasks using the task-state filter and one of the following values: - // active, completed, deleting, or deleted. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. - MaxResults *int64 `min:"1" type:"integer"` - - // A token that indicates the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeExportImageTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeExportImageTasksInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeExportImageTasksInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeExportImageTasksInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeExportImageTasksInput) SetDryRun(v bool) *DescribeExportImageTasksInput { - s.DryRun = &v - return s -} - -// SetExportImageTaskIds sets the ExportImageTaskIds field's value. -func (s *DescribeExportImageTasksInput) SetExportImageTaskIds(v []*string) *DescribeExportImageTasksInput { - s.ExportImageTaskIds = v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeExportImageTasksInput) SetFilters(v []*Filter) *DescribeExportImageTasksInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeExportImageTasksInput) SetMaxResults(v int64) *DescribeExportImageTasksInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeExportImageTasksInput) SetNextToken(v string) *DescribeExportImageTasksInput { - s.NextToken = &v - return s -} - -type DescribeExportImageTasksOutput struct { - _ struct{} `type:"structure"` - - // Information about the export image tasks. - ExportImageTasks []*ExportImageTask `locationName:"exportImageTaskSet" locationNameList:"item" type:"list"` - - // The token to use to get the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeExportImageTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeExportImageTasksOutput) GoString() string { - return s.String() -} - -// SetExportImageTasks sets the ExportImageTasks field's value. -func (s *DescribeExportImageTasksOutput) SetExportImageTasks(v []*ExportImageTask) *DescribeExportImageTasksOutput { - s.ExportImageTasks = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeExportImageTasksOutput) SetNextToken(v string) *DescribeExportImageTasksOutput { - s.NextToken = &v - return s -} - -type DescribeExportTasksInput struct { - _ struct{} `type:"structure"` - - // The export task IDs. - ExportTaskIds []*string `locationName:"exportTaskId" locationNameList:"ExportTaskId" type:"list"` -} - -// String returns the string representation -func (s DescribeExportTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeExportTasksInput) GoString() string { - return s.String() -} - -// SetExportTaskIds sets the ExportTaskIds field's value. -func (s *DescribeExportTasksInput) SetExportTaskIds(v []*string) *DescribeExportTasksInput { - s.ExportTaskIds = v - return s -} - -type DescribeExportTasksOutput struct { - _ struct{} `type:"structure"` - - // Information about the export tasks. - ExportTasks []*ExportTask `locationName:"exportTaskSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeExportTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeExportTasksOutput) GoString() string { - return s.String() -} - -// SetExportTasks sets the ExportTasks field's value. -func (s *DescribeExportTasksOutput) SetExportTasks(v []*ExportTask) *DescribeExportTasksOutput { - s.ExportTasks = v - return s -} - -// Describes fast snapshot restores for a snapshot. -type DescribeFastSnapshotRestoreSuccessItem struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The time at which fast snapshot restores entered the disabled state. - DisabledTime *time.Time `locationName:"disabledTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the disabling state. - DisablingTime *time.Time `locationName:"disablingTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the enabled state. - EnabledTime *time.Time `locationName:"enabledTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the enabling state. - EnablingTime *time.Time `locationName:"enablingTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the optimizing state. - OptimizingTime *time.Time `locationName:"optimizingTime" type:"timestamp"` - - // The alias of the snapshot owner. - OwnerAlias *string `locationName:"ownerAlias" type:"string"` - - // The ID of the AWS account that owns the snapshot. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The state of fast snapshot restores. - State *string `locationName:"state" type:"string" enum:"FastSnapshotRestoreStateCode"` - - // The reason for the state transition. The possible values are as follows: - // - // * Client.UserInitiated - The state successfully transitioned to enabling - // or disabling. - // - // * Client.UserInitiated - Lifecycle state transition - The state successfully - // transitioned to optimizing, enabled, or disabled. - StateTransitionReason *string `locationName:"stateTransitionReason" type:"string"` -} - -// String returns the string representation -func (s DescribeFastSnapshotRestoreSuccessItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFastSnapshotRestoreSuccessItem) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetAvailabilityZone(v string) *DescribeFastSnapshotRestoreSuccessItem { - s.AvailabilityZone = &v - return s -} - -// SetDisabledTime sets the DisabledTime field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetDisabledTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { - s.DisabledTime = &v - return s -} - -// SetDisablingTime sets the DisablingTime field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetDisablingTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { - s.DisablingTime = &v - return s -} - -// SetEnabledTime sets the EnabledTime field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetEnabledTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { - s.EnabledTime = &v - return s -} - -// SetEnablingTime sets the EnablingTime field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetEnablingTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { - s.EnablingTime = &v - return s -} - -// SetOptimizingTime sets the OptimizingTime field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetOptimizingTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { - s.OptimizingTime = &v - return s -} - -// SetOwnerAlias sets the OwnerAlias field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetOwnerAlias(v string) *DescribeFastSnapshotRestoreSuccessItem { - s.OwnerAlias = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetOwnerId(v string) *DescribeFastSnapshotRestoreSuccessItem { - s.OwnerId = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetSnapshotId(v string) *DescribeFastSnapshotRestoreSuccessItem { - s.SnapshotId = &v - return s -} - -// SetState sets the State field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetState(v string) *DescribeFastSnapshotRestoreSuccessItem { - s.State = &v - return s -} - -// SetStateTransitionReason sets the StateTransitionReason field's value. -func (s *DescribeFastSnapshotRestoreSuccessItem) SetStateTransitionReason(v string) *DescribeFastSnapshotRestoreSuccessItem { - s.StateTransitionReason = &v - return s -} - -type DescribeFastSnapshotRestoresInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. The possible values are: - // - // * availability-zone: The Availability Zone of the snapshot. - // - // * owner-id: The ID of the AWS account that owns the snapshot. - // - // * snapshot-id: The ID of the snapshot. - // - // * state: The state of fast snapshot restores for the snapshot (enabling - // | optimizing | enabled | disabling | disabled). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeFastSnapshotRestoresInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFastSnapshotRestoresInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFastSnapshotRestoresInput) SetDryRun(v bool) *DescribeFastSnapshotRestoresInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeFastSnapshotRestoresInput) SetFilters(v []*Filter) *DescribeFastSnapshotRestoresInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeFastSnapshotRestoresInput) SetMaxResults(v int64) *DescribeFastSnapshotRestoresInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFastSnapshotRestoresInput) SetNextToken(v string) *DescribeFastSnapshotRestoresInput { - s.NextToken = &v - return s -} - -type DescribeFastSnapshotRestoresOutput struct { - _ struct{} `type:"structure"` - - // Information about the state of fast snapshot restores. - FastSnapshotRestores []*DescribeFastSnapshotRestoreSuccessItem `locationName:"fastSnapshotRestoreSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeFastSnapshotRestoresOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFastSnapshotRestoresOutput) GoString() string { - return s.String() -} - -// SetFastSnapshotRestores sets the FastSnapshotRestores field's value. -func (s *DescribeFastSnapshotRestoresOutput) SetFastSnapshotRestores(v []*DescribeFastSnapshotRestoreSuccessItem) *DescribeFastSnapshotRestoresOutput { - s.FastSnapshotRestores = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFastSnapshotRestoresOutput) SetNextToken(v string) *DescribeFastSnapshotRestoresOutput { - s.NextToken = &v - return s -} - -// Describes the instances that could not be launched by the fleet. -type DescribeFleetError struct { - _ struct{} `type:"structure"` - - // The error code that indicates why the instance could not be launched. For - // more information about error codes, see Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). - ErrorCode *string `locationName:"errorCode" type:"string"` - - // The error message that describes why the instance could not be launched. - // For more information about error messages, see ee Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). - ErrorMessage *string `locationName:"errorMessage" type:"string"` - - // The launch templates and overrides that were used for launching the instances. - // Any parameters that you specify in the Overrides override the same parameters - // in the launch template. - LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` - - // Indicates if the instance that could not be launched was a Spot Instance - // or On-Demand Instance. - Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` -} - -// String returns the string representation -func (s DescribeFleetError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetError) GoString() string { - return s.String() -} - -// SetErrorCode sets the ErrorCode field's value. -func (s *DescribeFleetError) SetErrorCode(v string) *DescribeFleetError { - s.ErrorCode = &v - return s -} - -// SetErrorMessage sets the ErrorMessage field's value. -func (s *DescribeFleetError) SetErrorMessage(v string) *DescribeFleetError { - s.ErrorMessage = &v - return s -} - -// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. -func (s *DescribeFleetError) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *DescribeFleetError { - s.LaunchTemplateAndOverrides = v - return s -} - -// SetLifecycle sets the Lifecycle field's value. -func (s *DescribeFleetError) SetLifecycle(v string) *DescribeFleetError { - s.Lifecycle = &v - return s -} - -type DescribeFleetHistoryInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The type of events to describe. By default, all events are described. - EventType *string `type:"string" enum:"FleetEventType"` - - // The ID of the EC2 Fleet. - // - // FleetId is a required field - FleetId *string `type:"string" required:"true"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next set of results. - NextToken *string `type:"string"` - - // The start date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // - // StartTime is a required field - StartTime *time.Time `type:"timestamp" required:"true"` -} - -// String returns the string representation -func (s DescribeFleetHistoryInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetHistoryInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeFleetHistoryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeFleetHistoryInput"} - if s.FleetId == nil { - invalidParams.Add(request.NewErrParamRequired("FleetId")) - } - if s.StartTime == nil { - invalidParams.Add(request.NewErrParamRequired("StartTime")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFleetHistoryInput) SetDryRun(v bool) *DescribeFleetHistoryInput { - s.DryRun = &v - return s -} - -// SetEventType sets the EventType field's value. -func (s *DescribeFleetHistoryInput) SetEventType(v string) *DescribeFleetHistoryInput { - s.EventType = &v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *DescribeFleetHistoryInput) SetFleetId(v string) *DescribeFleetHistoryInput { - s.FleetId = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeFleetHistoryInput) SetMaxResults(v int64) *DescribeFleetHistoryInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFleetHistoryInput) SetNextToken(v string) *DescribeFleetHistoryInput { - s.NextToken = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *DescribeFleetHistoryInput) SetStartTime(v time.Time) *DescribeFleetHistoryInput { - s.StartTime = &v - return s -} - -type DescribeFleetHistoryOutput struct { - _ struct{} `type:"structure"` - - // The ID of the EC Fleet. - FleetId *string `locationName:"fleetId" type:"string"` - - // Information about the events in the history of the EC2 Fleet. - HistoryRecords []*HistoryRecordEntry `locationName:"historyRecordSet" locationNameList:"item" type:"list"` - - // The last date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // All records up to this time were retrieved. - // - // If nextToken indicates that there are more results, this value is not present. - LastEvaluatedTime *time.Time `locationName:"lastEvaluatedTime" type:"timestamp"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // The start date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - StartTime *time.Time `locationName:"startTime" type:"timestamp"` -} - -// String returns the string representation -func (s DescribeFleetHistoryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetHistoryOutput) GoString() string { - return s.String() -} - -// SetFleetId sets the FleetId field's value. -func (s *DescribeFleetHistoryOutput) SetFleetId(v string) *DescribeFleetHistoryOutput { - s.FleetId = &v - return s -} - -// SetHistoryRecords sets the HistoryRecords field's value. -func (s *DescribeFleetHistoryOutput) SetHistoryRecords(v []*HistoryRecordEntry) *DescribeFleetHistoryOutput { - s.HistoryRecords = v - return s -} - -// SetLastEvaluatedTime sets the LastEvaluatedTime field's value. -func (s *DescribeFleetHistoryOutput) SetLastEvaluatedTime(v time.Time) *DescribeFleetHistoryOutput { - s.LastEvaluatedTime = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFleetHistoryOutput) SetNextToken(v string) *DescribeFleetHistoryOutput { - s.NextToken = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *DescribeFleetHistoryOutput) SetStartTime(v time.Time) *DescribeFleetHistoryOutput { - s.StartTime = &v - return s -} - -type DescribeFleetInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - // - // * instance-type - The instance type. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The ID of the EC2 Fleet. - // - // FleetId is a required field - FleetId *string `type:"string" required:"true"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next set of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeFleetInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeFleetInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeFleetInstancesInput"} - if s.FleetId == nil { - invalidParams.Add(request.NewErrParamRequired("FleetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFleetInstancesInput) SetDryRun(v bool) *DescribeFleetInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeFleetInstancesInput) SetFilters(v []*Filter) *DescribeFleetInstancesInput { - s.Filters = v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *DescribeFleetInstancesInput) SetFleetId(v string) *DescribeFleetInstancesInput { - s.FleetId = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeFleetInstancesInput) SetMaxResults(v int64) *DescribeFleetInstancesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFleetInstancesInput) SetNextToken(v string) *DescribeFleetInstancesInput { - s.NextToken = &v - return s -} - -type DescribeFleetInstancesOutput struct { - _ struct{} `type:"structure"` - - // The running instances. This list is refreshed periodically and might be out - // of date. - ActiveInstances []*ActiveInstance `locationName:"activeInstanceSet" locationNameList:"item" type:"list"` - - // The ID of the EC2 Fleet. - FleetId *string `locationName:"fleetId" type:"string"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeFleetInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetInstancesOutput) GoString() string { - return s.String() -} - -// SetActiveInstances sets the ActiveInstances field's value. -func (s *DescribeFleetInstancesOutput) SetActiveInstances(v []*ActiveInstance) *DescribeFleetInstancesOutput { - s.ActiveInstances = v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *DescribeFleetInstancesOutput) SetFleetId(v string) *DescribeFleetInstancesOutput { - s.FleetId = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFleetInstancesOutput) SetNextToken(v string) *DescribeFleetInstancesOutput { - s.NextToken = &v - return s -} - -type DescribeFleetsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - // - // * activity-status - The progress of the EC2 Fleet ( error | pending-fulfillment - // | pending-termination | fulfilled). - // - // * excess-capacity-termination-policy - Indicates whether to terminate - // running instances if the target capacity is decreased below the current - // EC2 Fleet size (true | false). - // - // * fleet-state - The state of the EC2 Fleet (submitted | active | deleted - // | failed | deleted-running | deleted-terminating | modifying). - // - // * replace-unhealthy-instances - Indicates whether EC2 Fleet should replace - // unhealthy instances (true | false). - // - // * type - The type of request (instant | request | maintain). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The ID of the EC2 Fleets. - FleetIds []*string `locationName:"FleetId" type:"list"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next set of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeFleetsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFleetsInput) SetDryRun(v bool) *DescribeFleetsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeFleetsInput) SetFilters(v []*Filter) *DescribeFleetsInput { - s.Filters = v - return s -} - -// SetFleetIds sets the FleetIds field's value. -func (s *DescribeFleetsInput) SetFleetIds(v []*string) *DescribeFleetsInput { - s.FleetIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeFleetsInput) SetMaxResults(v int64) *DescribeFleetsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFleetsInput) SetNextToken(v string) *DescribeFleetsInput { - s.NextToken = &v - return s -} - -// Describes the instances that were launched by the fleet. -type DescribeFleetsInstances struct { - _ struct{} `type:"structure"` - - // The IDs of the instances. - InstanceIds []*string `locationName:"instanceIds" locationNameList:"item" type:"list"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The launch templates and overrides that were used for launching the instances. - // Any parameters that you specify in the Overrides override the same parameters - // in the launch template. - LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` - - // Indicates if the instance that was launched is a Spot Instance or On-Demand - // Instance. - Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` - - // The value is Windows for Windows instances; otherwise blank. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` -} - -// String returns the string representation -func (s DescribeFleetsInstances) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetsInstances) GoString() string { - return s.String() -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeFleetsInstances) SetInstanceIds(v []*string) *DescribeFleetsInstances { - s.InstanceIds = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *DescribeFleetsInstances) SetInstanceType(v string) *DescribeFleetsInstances { - s.InstanceType = &v - return s -} - -// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. -func (s *DescribeFleetsInstances) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *DescribeFleetsInstances { - s.LaunchTemplateAndOverrides = v - return s -} - -// SetLifecycle sets the Lifecycle field's value. -func (s *DescribeFleetsInstances) SetLifecycle(v string) *DescribeFleetsInstances { - s.Lifecycle = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *DescribeFleetsInstances) SetPlatform(v string) *DescribeFleetsInstances { - s.Platform = &v - return s -} - -type DescribeFleetsOutput struct { - _ struct{} `type:"structure"` - - // Information about the EC2 Fleets. - Fleets []*FleetData `locationName:"fleetSet" locationNameList:"item" type:"list"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeFleetsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFleetsOutput) GoString() string { - return s.String() -} - -// SetFleets sets the Fleets field's value. -func (s *DescribeFleetsOutput) SetFleets(v []*FleetData) *DescribeFleetsOutput { - s.Fleets = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFleetsOutput) SetNextToken(v string) *DescribeFleetsOutput { - s.NextToken = &v - return s -} - -type DescribeFlowLogsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * deliver-log-status - The status of the logs delivery (SUCCESS | FAILED). - // - // * log-destination-type - The type of destination to which the flow log - // publishes data. Possible destination types include cloud-watch-logs and - // S3. - // - // * flow-log-id - The ID of the flow log. - // - // * log-group-name - The name of the log group. - // - // * resource-id - The ID of the VPC, subnet, or network interface. - // - // * traffic-type - The type of traffic (ACCEPT | REJECT | ALL). - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // One or more flow log IDs. - // - // Constraint: Maximum of 1000 flow log IDs. - FlowLogIds []*string `locationName:"FlowLogId" locationNameList:"item" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeFlowLogsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFlowLogsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFlowLogsInput) SetDryRun(v bool) *DescribeFlowLogsInput { - s.DryRun = &v - return s -} - -// SetFilter sets the Filter field's value. -func (s *DescribeFlowLogsInput) SetFilter(v []*Filter) *DescribeFlowLogsInput { - s.Filter = v - return s -} - -// SetFlowLogIds sets the FlowLogIds field's value. -func (s *DescribeFlowLogsInput) SetFlowLogIds(v []*string) *DescribeFlowLogsInput { - s.FlowLogIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeFlowLogsInput) SetMaxResults(v int64) *DescribeFlowLogsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFlowLogsInput) SetNextToken(v string) *DescribeFlowLogsInput { - s.NextToken = &v - return s -} - -type DescribeFlowLogsOutput struct { - _ struct{} `type:"structure"` - - // Information about the flow logs. - FlowLogs []*FlowLog `locationName:"flowLogSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeFlowLogsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFlowLogsOutput) GoString() string { - return s.String() -} - -// SetFlowLogs sets the FlowLogs field's value. -func (s *DescribeFlowLogsOutput) SetFlowLogs(v []*FlowLog) *DescribeFlowLogsOutput { - s.FlowLogs = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFlowLogsOutput) SetNextToken(v string) *DescribeFlowLogsOutput { - s.NextToken = &v - return s -} - -type DescribeFpgaImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The AFI attribute. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"FpgaImageAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the AFI. - // - // FpgaImageId is a required field - FpgaImageId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeFpgaImageAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFpgaImageAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeFpgaImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeFpgaImageAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.FpgaImageId == nil { - invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeFpgaImageAttributeInput) SetAttribute(v string) *DescribeFpgaImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFpgaImageAttributeInput) SetDryRun(v bool) *DescribeFpgaImageAttributeInput { - s.DryRun = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *DescribeFpgaImageAttributeInput) SetFpgaImageId(v string) *DescribeFpgaImageAttributeInput { - s.FpgaImageId = &v - return s -} - -type DescribeFpgaImageAttributeOutput struct { - _ struct{} `type:"structure"` - - // Information about the attribute. - FpgaImageAttribute *FpgaImageAttribute `locationName:"fpgaImageAttribute" type:"structure"` -} - -// String returns the string representation -func (s DescribeFpgaImageAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFpgaImageAttributeOutput) GoString() string { - return s.String() -} - -// SetFpgaImageAttribute sets the FpgaImageAttribute field's value. -func (s *DescribeFpgaImageAttributeOutput) SetFpgaImageAttribute(v *FpgaImageAttribute) *DescribeFpgaImageAttributeOutput { - s.FpgaImageAttribute = v - return s -} - -type DescribeFpgaImagesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - // - // * create-time - The creation time of the AFI. - // - // * fpga-image-id - The FPGA image identifier (AFI ID). - // - // * fpga-image-global-id - The global FPGA image identifier (AGFI ID). - // - // * name - The name of the AFI. - // - // * owner-id - The AWS account ID of the AFI owner. - // - // * product-code - The product code. - // - // * shell-version - The version of the AWS Shell that was used to create - // the bitstream. - // - // * state - The state of the AFI (pending | failed | available | unavailable). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * update-time - The time of the most recent update. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The AFI IDs. - FpgaImageIds []*string `locationName:"FpgaImageId" locationNameList:"item" type:"list"` - - // The maximum number of results to return in a single call. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` - - // Filters the AFI by owner. Specify an AWS account ID, self (owner is the sender - // of the request), or an AWS owner alias (valid values are amazon | aws-marketplace). - Owners []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` -} - -// String returns the string representation -func (s DescribeFpgaImagesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFpgaImagesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeFpgaImagesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeFpgaImagesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeFpgaImagesInput) SetDryRun(v bool) *DescribeFpgaImagesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeFpgaImagesInput) SetFilters(v []*Filter) *DescribeFpgaImagesInput { - s.Filters = v - return s -} - -// SetFpgaImageIds sets the FpgaImageIds field's value. -func (s *DescribeFpgaImagesInput) SetFpgaImageIds(v []*string) *DescribeFpgaImagesInput { - s.FpgaImageIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeFpgaImagesInput) SetMaxResults(v int64) *DescribeFpgaImagesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFpgaImagesInput) SetNextToken(v string) *DescribeFpgaImagesInput { - s.NextToken = &v - return s -} - -// SetOwners sets the Owners field's value. -func (s *DescribeFpgaImagesInput) SetOwners(v []*string) *DescribeFpgaImagesInput { - s.Owners = v - return s -} - -type DescribeFpgaImagesOutput struct { - _ struct{} `type:"structure"` - - // Information about the FPGA images. - FpgaImages []*FpgaImage `locationName:"fpgaImageSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeFpgaImagesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeFpgaImagesOutput) GoString() string { - return s.String() -} - -// SetFpgaImages sets the FpgaImages field's value. -func (s *DescribeFpgaImagesOutput) SetFpgaImages(v []*FpgaImage) *DescribeFpgaImagesOutput { - s.FpgaImages = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeFpgaImagesOutput) SetNextToken(v string) *DescribeFpgaImagesOutput { - s.NextToken = &v - return s -} - -type DescribeHostReservationOfferingsInput struct { - _ struct{} `type:"structure"` - - // The filters. - // - // * instance-family - The instance family of the offering (for example, - // m4). - // - // * payment-option - The payment option (NoUpfront | PartialUpfront | AllUpfront). - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // This is the maximum duration of the reservation to purchase, specified in - // seconds. Reservations are available in one-year and three-year terms. The - // number of seconds specified must be the number of seconds in a year (365x24x60x60) - // times one of the supported durations (1 or 3). For example, specify 94608000 - // for three years. - MaxDuration *int64 `type:"integer"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. This value can be between 5 and 500. If maxResults is given - // a larger value than 500, you receive an error. - MaxResults *int64 `min:"5" type:"integer"` - - // This is the minimum duration of the reservation you'd like to purchase, specified - // in seconds. Reservations are available in one-year and three-year terms. - // The number of seconds specified must be the number of seconds in a year (365x24x60x60) - // times one of the supported durations (1 or 3). For example, specify 31536000 - // for one year. - MinDuration *int64 `type:"integer"` - - // The token to use to retrieve the next page of results. - NextToken *string `type:"string"` - - // The ID of the reservation offering. - OfferingId *string `type:"string"` -} - -// String returns the string representation -func (s DescribeHostReservationOfferingsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeHostReservationOfferingsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeHostReservationOfferingsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeHostReservationOfferingsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetFilter sets the Filter field's value. -func (s *DescribeHostReservationOfferingsInput) SetFilter(v []*Filter) *DescribeHostReservationOfferingsInput { - s.Filter = v - return s -} - -// SetMaxDuration sets the MaxDuration field's value. -func (s *DescribeHostReservationOfferingsInput) SetMaxDuration(v int64) *DescribeHostReservationOfferingsInput { - s.MaxDuration = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeHostReservationOfferingsInput) SetMaxResults(v int64) *DescribeHostReservationOfferingsInput { - s.MaxResults = &v - return s -} - -// SetMinDuration sets the MinDuration field's value. -func (s *DescribeHostReservationOfferingsInput) SetMinDuration(v int64) *DescribeHostReservationOfferingsInput { - s.MinDuration = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationOfferingsInput) SetNextToken(v string) *DescribeHostReservationOfferingsInput { - s.NextToken = &v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *DescribeHostReservationOfferingsInput) SetOfferingId(v string) *DescribeHostReservationOfferingsInput { - s.OfferingId = &v - return s -} - -type DescribeHostReservationOfferingsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the offerings. - OfferingSet []*HostOffering `locationName:"offeringSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeHostReservationOfferingsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeHostReservationOfferingsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationOfferingsOutput) SetNextToken(v string) *DescribeHostReservationOfferingsOutput { - s.NextToken = &v - return s -} - -// SetOfferingSet sets the OfferingSet field's value. -func (s *DescribeHostReservationOfferingsOutput) SetOfferingSet(v []*HostOffering) *DescribeHostReservationOfferingsOutput { - s.OfferingSet = v - return s -} - -type DescribeHostReservationsInput struct { - _ struct{} `type:"structure"` - - // The filters. - // - // * instance-family - The instance family (for example, m4). - // - // * payment-option - The payment option (NoUpfront | PartialUpfront | AllUpfront). - // - // * state - The state of the reservation (payment-pending | payment-failed - // | active | retired). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // The host reservation IDs. - HostReservationIdSet []*string `locationNameList:"item" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. This value can be between 5 and 500. If maxResults is given - // a larger value than 500, you receive an error. - MaxResults *int64 `type:"integer"` - - // The token to use to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeHostReservationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeHostReservationsInput) GoString() string { - return s.String() -} - -// SetFilter sets the Filter field's value. -func (s *DescribeHostReservationsInput) SetFilter(v []*Filter) *DescribeHostReservationsInput { - s.Filter = v - return s -} - -// SetHostReservationIdSet sets the HostReservationIdSet field's value. -func (s *DescribeHostReservationsInput) SetHostReservationIdSet(v []*string) *DescribeHostReservationsInput { - s.HostReservationIdSet = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeHostReservationsInput) SetMaxResults(v int64) *DescribeHostReservationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationsInput) SetNextToken(v string) *DescribeHostReservationsInput { - s.NextToken = &v - return s -} - -type DescribeHostReservationsOutput struct { - _ struct{} `type:"structure"` - - // Details about the reservation's configuration. - HostReservationSet []*HostReservation `locationName:"hostReservationSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeHostReservationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeHostReservationsOutput) GoString() string { - return s.String() -} - -// SetHostReservationSet sets the HostReservationSet field's value. -func (s *DescribeHostReservationsOutput) SetHostReservationSet(v []*HostReservation) *DescribeHostReservationsOutput { - s.HostReservationSet = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationsOutput) SetNextToken(v string) *DescribeHostReservationsOutput { - s.NextToken = &v - return s -} - -type DescribeHostsInput struct { - _ struct{} `type:"structure"` - - // The filters. - // - // * auto-placement - Whether auto-placement is enabled or disabled (on | - // off). - // - // * availability-zone - The Availability Zone of the host. - // - // * client-token - The idempotency token that you provided when you allocated - // the host. - // - // * host-reservation-id - The ID of the reservation assigned to this host. - // - // * instance-type - The instance type size that the Dedicated Host is configured - // to support. - // - // * state - The allocation state of the Dedicated Host (available | under-assessment - // | permanent-failure | released | released-permanent-failure). - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filter []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` - - // The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches. - HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. This value can be between 5 and 500. If maxResults is given - // a larger value than 500, you receive an error. - // - // You cannot specify this parameter and the host IDs parameter in the same - // request. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token to use to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeHostsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeHostsInput) GoString() string { - return s.String() -} - -// SetFilter sets the Filter field's value. -func (s *DescribeHostsInput) SetFilter(v []*Filter) *DescribeHostsInput { - s.Filter = v - return s -} - -// SetHostIds sets the HostIds field's value. -func (s *DescribeHostsInput) SetHostIds(v []*string) *DescribeHostsInput { - s.HostIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeHostsInput) SetMaxResults(v int64) *DescribeHostsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostsInput) SetNextToken(v string) *DescribeHostsInput { - s.NextToken = &v - return s -} - -type DescribeHostsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Dedicated Hosts. - Hosts []*Host `locationName:"hostSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeHostsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeHostsOutput) GoString() string { - return s.String() -} - -// SetHosts sets the Hosts field's value. -func (s *DescribeHostsOutput) SetHosts(v []*Host) *DescribeHostsOutput { - s.Hosts = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostsOutput) SetNextToken(v string) *DescribeHostsOutput { - s.NextToken = &v - return s -} - -type DescribeIamInstanceProfileAssociationsInput struct { - _ struct{} `type:"structure"` - - // The IAM instance profile associations. - AssociationIds []*string `locationName:"AssociationId" locationNameList:"AssociationId" type:"list"` - - // The filters. - // - // * instance-id - The ID of the instance. - // - // * state - The state of the association (associating | associated | disassociating - // | disassociated). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to request the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeIamInstanceProfileAssociationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeIamInstanceProfileAssociationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeIamInstanceProfileAssociationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeIamInstanceProfileAssociationsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationIds sets the AssociationIds field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetAssociationIds(v []*string) *DescribeIamInstanceProfileAssociationsInput { - s.AssociationIds = v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetFilters(v []*Filter) *DescribeIamInstanceProfileAssociationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetMaxResults(v int64) *DescribeIamInstanceProfileAssociationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetNextToken(v string) *DescribeIamInstanceProfileAssociationsInput { - s.NextToken = &v - return s -} - -type DescribeIamInstanceProfileAssociationsOutput struct { - _ struct{} `type:"structure"` - - // Information about the IAM instance profile associations. - IamInstanceProfileAssociations []*IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociationSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeIamInstanceProfileAssociationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeIamInstanceProfileAssociationsOutput) GoString() string { - return s.String() -} - -// SetIamInstanceProfileAssociations sets the IamInstanceProfileAssociations field's value. -func (s *DescribeIamInstanceProfileAssociationsOutput) SetIamInstanceProfileAssociations(v []*IamInstanceProfileAssociation) *DescribeIamInstanceProfileAssociationsOutput { - s.IamInstanceProfileAssociations = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeIamInstanceProfileAssociationsOutput) SetNextToken(v string) *DescribeIamInstanceProfileAssociationsOutput { - s.NextToken = &v - return s -} - -type DescribeIdFormatInput struct { - _ struct{} `type:"structure"` - - // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options - // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log - // | image | import-task | instance | internet-gateway | network-acl | network-acl-association - // | network-interface | network-interface-attachment | prefix-list | reservation - // | route-table | route-table-association | security-group | snapshot | subnet - // | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association - // | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway - Resource *string `type:"string"` -} - -// String returns the string representation -func (s DescribeIdFormatInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeIdFormatInput) GoString() string { - return s.String() -} - -// SetResource sets the Resource field's value. -func (s *DescribeIdFormatInput) SetResource(v string) *DescribeIdFormatInput { - s.Resource = &v - return s -} - -type DescribeIdFormatOutput struct { - _ struct{} `type:"structure"` - - // Information about the ID format for the resource. - Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeIdFormatOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeIdFormatOutput) GoString() string { - return s.String() -} - -// SetStatuses sets the Statuses field's value. -func (s *DescribeIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeIdFormatOutput { - s.Statuses = v - return s -} - -type DescribeIdentityIdFormatInput struct { - _ struct{} `type:"structure"` - - // The ARN of the principal, which can be an IAM role, IAM user, or the root - // user. - // - // PrincipalArn is a required field - PrincipalArn *string `locationName:"principalArn" type:"string" required:"true"` - - // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options - // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log - // | image | import-task | instance | internet-gateway | network-acl | network-acl-association - // | network-interface | network-interface-attachment | prefix-list | reservation - // | route-table | route-table-association | security-group | snapshot | subnet - // | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association - // | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway - Resource *string `locationName:"resource" type:"string"` -} - -// String returns the string representation -func (s DescribeIdentityIdFormatInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeIdentityIdFormatInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeIdentityIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeIdentityIdFormatInput"} - if s.PrincipalArn == nil { - invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetPrincipalArn sets the PrincipalArn field's value. -func (s *DescribeIdentityIdFormatInput) SetPrincipalArn(v string) *DescribeIdentityIdFormatInput { - s.PrincipalArn = &v - return s -} - -// SetResource sets the Resource field's value. -func (s *DescribeIdentityIdFormatInput) SetResource(v string) *DescribeIdentityIdFormatInput { - s.Resource = &v - return s -} - -type DescribeIdentityIdFormatOutput struct { - _ struct{} `type:"structure"` - - // Information about the ID format for the resources. - Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeIdentityIdFormatOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeIdentityIdFormatOutput) GoString() string { - return s.String() -} - -// SetStatuses sets the Statuses field's value. -func (s *DescribeIdentityIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeIdentityIdFormatOutput { - s.Statuses = v - return s -} - -// Contains the parameters for DescribeImageAttribute. -type DescribeImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The AMI attribute. - // - // Note: Depending on your account privileges, the blockDeviceMapping attribute - // may return a Client.AuthFailure error. If this happens, use DescribeImages - // to get information about the block device mapping for the AMI. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"ImageAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeImageAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImageAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeImageAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeImageAttributeInput) SetAttribute(v string) *DescribeImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeImageAttributeInput) SetDryRun(v bool) *DescribeImageAttributeInput { - s.DryRun = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *DescribeImageAttributeInput) SetImageId(v string) *DescribeImageAttributeInput { - s.ImageId = &v - return s -} - -// Describes an image attribute. -type DescribeImageAttributeOutput struct { - _ struct{} `type:"structure"` - - // The block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // A description for the AMI. - Description *AttributeValue `locationName:"description" type:"structure"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The kernel ID. - KernelId *AttributeValue `locationName:"kernel" type:"structure"` - - // The launch permissions. - LaunchPermissions []*LaunchPermission `locationName:"launchPermission" locationNameList:"item" type:"list"` - - // The product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // The RAM disk ID. - RamdiskId *AttributeValue `locationName:"ramdisk" type:"structure"` - - // Indicates whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` -} - -// String returns the string representation -func (s DescribeImageAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImageAttributeOutput) GoString() string { - return s.String() -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *DescribeImageAttributeOutput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *DescribeImageAttributeOutput { - s.BlockDeviceMappings = v - return s -} - -// SetDescription sets the Description field's value. -func (s *DescribeImageAttributeOutput) SetDescription(v *AttributeValue) *DescribeImageAttributeOutput { - s.Description = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *DescribeImageAttributeOutput) SetImageId(v string) *DescribeImageAttributeOutput { - s.ImageId = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *DescribeImageAttributeOutput) SetKernelId(v *AttributeValue) *DescribeImageAttributeOutput { - s.KernelId = v - return s -} - -// SetLaunchPermissions sets the LaunchPermissions field's value. -func (s *DescribeImageAttributeOutput) SetLaunchPermissions(v []*LaunchPermission) *DescribeImageAttributeOutput { - s.LaunchPermissions = v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeImageAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeImageAttributeOutput { - s.ProductCodes = v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *DescribeImageAttributeOutput) SetRamdiskId(v *AttributeValue) *DescribeImageAttributeOutput { - s.RamdiskId = v - return s -} - -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *DescribeImageAttributeOutput) SetSriovNetSupport(v *AttributeValue) *DescribeImageAttributeOutput { - s.SriovNetSupport = v - return s -} - -type DescribeImagesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Scopes the images by users with explicit launch permissions. Specify an AWS - // account ID, self (the sender of the request), or all (public AMIs). - ExecutableUsers []*string `locationName:"ExecutableBy" locationNameList:"ExecutableBy" type:"list"` - - // The filters. - // - // * architecture - The image architecture (i386 | x86_64 | arm64). - // - // * block-device-mapping.delete-on-termination - A Boolean value that indicates - // whether the Amazon EBS volume is deleted on instance termination. - // - // * block-device-mapping.device-name - The device name specified in the - // block device mapping (for example, /dev/sdh or xvdh). - // - // * block-device-mapping.snapshot-id - The ID of the snapshot used for the - // EBS volume. - // - // * block-device-mapping.volume-size - The volume size of the EBS volume, - // in GiB. - // - // * block-device-mapping.volume-type - The volume type of the EBS volume - // (gp2 | io1 | st1 | sc1 | standard). - // - // * block-device-mapping.encrypted - A Boolean that indicates whether the - // EBS volume is encrypted. - // - // * description - The description of the image (provided during image creation). - // - // * ena-support - A Boolean that indicates whether enhanced networking with - // ENA is enabled. - // - // * hypervisor - The hypervisor type (ovm | xen). - // - // * image-id - The ID of the image. - // - // * image-type - The image type (machine | kernel | ramdisk). - // - // * is-public - A Boolean that indicates whether the image is public. - // - // * kernel-id - The kernel ID. - // - // * manifest-location - The location of the image manifest. - // - // * name - The name of the AMI (provided during image creation). - // - // * owner-alias - String value from an Amazon-maintained list (amazon | - // aws-marketplace | microsoft) of snapshot owners. Not to be confused with - // the user-configured AWS account alias, which is set from the IAM console. - // - // * owner-id - The AWS account ID of the image owner. - // - // * platform - The platform. To only list Windows-based AMIs, use windows. - // - // * product-code - The product code. - // - // * product-code.type - The type of the product code (devpay | marketplace). - // - // * ramdisk-id - The RAM disk ID. - // - // * root-device-name - The device name of the root device volume (for example, - // /dev/sda1). - // - // * root-device-type - The type of the root device volume (ebs | instance-store). - // - // * state - The state of the image (available | pending | failed). - // - // * state-reason-code - The reason code for the state change. - // - // * state-reason-message - The message for the state change. - // - // * sriov-net-support - A value of simple indicates that enhanced networking - // with the Intel 82599 VF interface is enabled. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * virtualization-type - The virtualization type (paravirtual | hvm). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The image IDs. - // - // Default: Describes all images available to you. - ImageIds []*string `locationName:"ImageId" locationNameList:"ImageId" type:"list"` - - // Filters the images by the owner. Specify an AWS account ID, self (owner is - // the sender of the request), or an AWS owner alias (valid values are amazon - // | aws-marketplace | microsoft). Omitting this option returns all images for - // which you have launch permissions, regardless of ownership. - Owners []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` -} - -// String returns the string representation -func (s DescribeImagesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImagesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeImagesInput) SetDryRun(v bool) *DescribeImagesInput { - s.DryRun = &v - return s -} - -// SetExecutableUsers sets the ExecutableUsers field's value. -func (s *DescribeImagesInput) SetExecutableUsers(v []*string) *DescribeImagesInput { - s.ExecutableUsers = v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeImagesInput) SetFilters(v []*Filter) *DescribeImagesInput { - s.Filters = v - return s -} - -// SetImageIds sets the ImageIds field's value. -func (s *DescribeImagesInput) SetImageIds(v []*string) *DescribeImagesInput { - s.ImageIds = v - return s -} - -// SetOwners sets the Owners field's value. -func (s *DescribeImagesInput) SetOwners(v []*string) *DescribeImagesInput { - s.Owners = v - return s -} - -type DescribeImagesOutput struct { - _ struct{} `type:"structure"` - - // Information about the images. - Images []*Image `locationName:"imagesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeImagesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImagesOutput) GoString() string { - return s.String() -} - -// SetImages sets the Images field's value. -func (s *DescribeImagesOutput) SetImages(v []*Image) *DescribeImagesOutput { - s.Images = v - return s -} - -type DescribeImportImageTasksInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Filter tasks using the task-state filter and one of the following values: - // active, completed, deleting, or deleted. - Filters []*Filter `locationNameList:"Filter" type:"list"` - - // The IDs of the import image tasks. - ImportTaskIds []*string `locationName:"ImportTaskId" locationNameList:"ImportTaskId" type:"list"` - - // The maximum number of results to return in a single call. - MaxResults *int64 `type:"integer"` - - // A token that indicates the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeImportImageTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImportImageTasksInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeImportImageTasksInput) SetDryRun(v bool) *DescribeImportImageTasksInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeImportImageTasksInput) SetFilters(v []*Filter) *DescribeImportImageTasksInput { - s.Filters = v - return s -} - -// SetImportTaskIds sets the ImportTaskIds field's value. -func (s *DescribeImportImageTasksInput) SetImportTaskIds(v []*string) *DescribeImportImageTasksInput { - s.ImportTaskIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeImportImageTasksInput) SetMaxResults(v int64) *DescribeImportImageTasksInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportImageTasksInput) SetNextToken(v string) *DescribeImportImageTasksInput { - s.NextToken = &v - return s -} - -type DescribeImportImageTasksOutput struct { - _ struct{} `type:"structure"` - - // A list of zero or more import image tasks that are currently active or were - // completed or canceled in the previous 7 days. - ImportImageTasks []*ImportImageTask `locationName:"importImageTaskSet" locationNameList:"item" type:"list"` - - // The token to use to get the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeImportImageTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImportImageTasksOutput) GoString() string { - return s.String() -} - -// SetImportImageTasks sets the ImportImageTasks field's value. -func (s *DescribeImportImageTasksOutput) SetImportImageTasks(v []*ImportImageTask) *DescribeImportImageTasksOutput { - s.ImportImageTasks = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportImageTasksOutput) SetNextToken(v string) *DescribeImportImageTasksOutput { - s.NextToken = &v - return s -} - -type DescribeImportSnapshotTasksInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - Filters []*Filter `locationNameList:"Filter" type:"list"` - - // A list of import snapshot task IDs. - ImportTaskIds []*string `locationName:"ImportTaskId" locationNameList:"ImportTaskId" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // A token that indicates the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeImportSnapshotTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImportSnapshotTasksInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeImportSnapshotTasksInput) SetDryRun(v bool) *DescribeImportSnapshotTasksInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeImportSnapshotTasksInput) SetFilters(v []*Filter) *DescribeImportSnapshotTasksInput { - s.Filters = v - return s -} - -// SetImportTaskIds sets the ImportTaskIds field's value. -func (s *DescribeImportSnapshotTasksInput) SetImportTaskIds(v []*string) *DescribeImportSnapshotTasksInput { - s.ImportTaskIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeImportSnapshotTasksInput) SetMaxResults(v int64) *DescribeImportSnapshotTasksInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportSnapshotTasksInput) SetNextToken(v string) *DescribeImportSnapshotTasksInput { - s.NextToken = &v - return s -} - -type DescribeImportSnapshotTasksOutput struct { - _ struct{} `type:"structure"` - - // A list of zero or more import snapshot tasks that are currently active or - // were completed or canceled in the previous 7 days. - ImportSnapshotTasks []*ImportSnapshotTask `locationName:"importSnapshotTaskSet" locationNameList:"item" type:"list"` - - // The token to use to get the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeImportSnapshotTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeImportSnapshotTasksOutput) GoString() string { - return s.String() -} - -// SetImportSnapshotTasks sets the ImportSnapshotTasks field's value. -func (s *DescribeImportSnapshotTasksOutput) SetImportSnapshotTasks(v []*ImportSnapshotTask) *DescribeImportSnapshotTasksOutput { - s.ImportSnapshotTasks = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportSnapshotTasksOutput) SetNextToken(v string) *DescribeImportSnapshotTasksOutput { - s.NextToken = &v - return s -} - -type DescribeInstanceAttributeInput struct { - _ struct{} `type:"structure"` - - // The instance attribute. - // - // Note: The enaSupport attribute is not supported at this time. - // - // Attribute is a required field - Attribute *string `locationName:"attribute" type:"string" required:"true" enum:"InstanceAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeInstanceAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeInstanceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeInstanceAttributeInput) SetAttribute(v string) *DescribeInstanceAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceAttributeInput) SetDryRun(v bool) *DescribeInstanceAttributeInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *DescribeInstanceAttributeInput) SetInstanceId(v string) *DescribeInstanceAttributeInput { - s.InstanceId = &v - return s -} - -// Describes an instance attribute. -type DescribeInstanceAttributeOutput struct { - _ struct{} `type:"structure"` - - // The block device mapping of the instance. - BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // If the value is true, you can't terminate the instance through the Amazon - // EC2 console, CLI, or API; otherwise, you can. - DisableApiTermination *AttributeBooleanValue `locationName:"disableApiTermination" type:"structure"` - - // Indicates whether the instance is optimized for Amazon EBS I/O. - EbsOptimized *AttributeBooleanValue `locationName:"ebsOptimized" type:"structure"` - - // Indicates whether enhanced networking with ENA is enabled. - EnaSupport *AttributeBooleanValue `locationName:"enaSupport" type:"structure"` - - // The security groups associated with the instance. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *AttributeValue `locationName:"instanceInitiatedShutdownBehavior" type:"structure"` - - // The instance type. - InstanceType *AttributeValue `locationName:"instanceType" type:"structure"` - - // The kernel ID. - KernelId *AttributeValue `locationName:"kernel" type:"structure"` - - // A list of product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // The RAM disk ID. - RamdiskId *AttributeValue `locationName:"ramdisk" type:"structure"` - - // The device name of the root device volume (for example, /dev/sda1). - RootDeviceName *AttributeValue `locationName:"rootDeviceName" type:"structure"` - - // Indicates whether source/destination checking is enabled. A value of true - // means that checking is enabled, and false means that checking is disabled. - // This value must be false for a NAT instance to perform NAT. - SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` - - // Indicates whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` - - // The user data. - UserData *AttributeValue `locationName:"userData" type:"structure"` -} - -// String returns the string representation -func (s DescribeInstanceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceAttributeOutput) GoString() string { - return s.String() -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *DescribeInstanceAttributeOutput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *DescribeInstanceAttributeOutput { - s.BlockDeviceMappings = v - return s -} - -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *DescribeInstanceAttributeOutput) SetDisableApiTermination(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.DisableApiTermination = v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *DescribeInstanceAttributeOutput) SetEbsOptimized(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.EbsOptimized = v - return s -} - -// SetEnaSupport sets the EnaSupport field's value. -func (s *DescribeInstanceAttributeOutput) SetEnaSupport(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.EnaSupport = v - return s -} - -// SetGroups sets the Groups field's value. -func (s *DescribeInstanceAttributeOutput) SetGroups(v []*GroupIdentifier) *DescribeInstanceAttributeOutput { - s.Groups = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *DescribeInstanceAttributeOutput) SetInstanceId(v string) *DescribeInstanceAttributeOutput { - s.InstanceId = &v - return s -} - -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *DescribeInstanceAttributeOutput) SetInstanceInitiatedShutdownBehavior(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.InstanceInitiatedShutdownBehavior = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *DescribeInstanceAttributeOutput) SetInstanceType(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.InstanceType = v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *DescribeInstanceAttributeOutput) SetKernelId(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.KernelId = v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeInstanceAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeInstanceAttributeOutput { - s.ProductCodes = v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *DescribeInstanceAttributeOutput) SetRamdiskId(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.RamdiskId = v - return s -} - -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *DescribeInstanceAttributeOutput) SetRootDeviceName(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.RootDeviceName = v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *DescribeInstanceAttributeOutput) SetSourceDestCheck(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.SourceDestCheck = v - return s -} - -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *DescribeInstanceAttributeOutput) SetSriovNetSupport(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.SriovNetSupport = v - return s -} - -// SetUserData sets the UserData field's value. -func (s *DescribeInstanceAttributeOutput) SetUserData(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.UserData = v - return s -} - -type DescribeInstanceCreditSpecificationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - // - // * instance-id - The ID of the instance. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The instance IDs. - // - // Default: Describes all your instances. - // - // Constraints: Maximum 1000 explicitly specified instance IDs. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 5 and 1000. You cannot specify this parameter and the - // instance IDs parameter in the same call. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceCreditSpecificationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceCreditSpecificationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeInstanceCreditSpecificationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceCreditSpecificationsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceCreditSpecificationsInput) SetDryRun(v bool) *DescribeInstanceCreditSpecificationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeInstanceCreditSpecificationsInput) SetFilters(v []*Filter) *DescribeInstanceCreditSpecificationsInput { - s.Filters = v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeInstanceCreditSpecificationsInput) SetInstanceIds(v []*string) *DescribeInstanceCreditSpecificationsInput { - s.InstanceIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstanceCreditSpecificationsInput) SetMaxResults(v int64) *DescribeInstanceCreditSpecificationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceCreditSpecificationsInput) SetNextToken(v string) *DescribeInstanceCreditSpecificationsInput { - s.NextToken = &v - return s -} - -type DescribeInstanceCreditSpecificationsOutput struct { - _ struct{} `type:"structure"` - - // Information about the credit option for CPU usage of an instance. - InstanceCreditSpecifications []*InstanceCreditSpecification `locationName:"instanceCreditSpecificationSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceCreditSpecificationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceCreditSpecificationsOutput) GoString() string { - return s.String() -} - -// SetInstanceCreditSpecifications sets the InstanceCreditSpecifications field's value. -func (s *DescribeInstanceCreditSpecificationsOutput) SetInstanceCreditSpecifications(v []*InstanceCreditSpecification) *DescribeInstanceCreditSpecificationsOutput { - s.InstanceCreditSpecifications = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceCreditSpecificationsOutput) SetNextToken(v string) *DescribeInstanceCreditSpecificationsOutput { - s.NextToken = &v - return s -} - -type DescribeInstanceStatusInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * availability-zone - The Availability Zone of the instance. - // - // * event.code - The code for the scheduled event (instance-reboot | system-reboot - // | system-maintenance | instance-retirement | instance-stop). - // - // * event.description - A description of the event. - // - // * event.instance-event-id - The ID of the event whose date and time you - // are modifying. - // - // * event.not-after - The latest end time for the scheduled event (for example, - // 2014-09-15T17:15:20.000Z). - // - // * event.not-before - The earliest start time for the scheduled event (for - // example, 2014-09-15T17:15:20.000Z). - // - // * event.not-before-deadline - The deadline for starting the event (for - // example, 2014-09-15T17:15:20.000Z). - // - // * instance-state-code - The code for the instance state, as a 16-bit unsigned - // integer. The high byte is used for internal purposes and should be ignored. - // The low byte is set based on the state represented. The valid values are - // 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), - // and 80 (stopped). - // - // * instance-state-name - The state of the instance (pending | running | - // shutting-down | terminated | stopping | stopped). - // - // * instance-status.reachability - Filters on instance status where the - // name is reachability (passed | failed | initializing | insufficient-data). - // - // * instance-status.status - The status of the instance (ok | impaired | - // initializing | insufficient-data | not-applicable). - // - // * system-status.reachability - Filters on system status where the name - // is reachability (passed | failed | initializing | insufficient-data). - // - // * system-status.status - The system status of the instance (ok | impaired - // | initializing | insufficient-data | not-applicable). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // When true, includes the health status for all instances. When false, includes - // the health status for running instances only. - // - // Default: false - IncludeAllInstances *bool `locationName:"includeAllInstances" type:"boolean"` - - // The instance IDs. - // - // Default: Describes all your instances. - // - // Constraints: Maximum 100 explicitly specified instance IDs. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 5 and 1000. You cannot specify this parameter and the - // instance IDs parameter in the same call. - MaxResults *int64 `type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceStatusInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceStatusInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceStatusInput) SetDryRun(v bool) *DescribeInstanceStatusInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeInstanceStatusInput) SetFilters(v []*Filter) *DescribeInstanceStatusInput { - s.Filters = v - return s -} - -// SetIncludeAllInstances sets the IncludeAllInstances field's value. -func (s *DescribeInstanceStatusInput) SetIncludeAllInstances(v bool) *DescribeInstanceStatusInput { - s.IncludeAllInstances = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeInstanceStatusInput) SetInstanceIds(v []*string) *DescribeInstanceStatusInput { - s.InstanceIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstanceStatusInput) SetMaxResults(v int64) *DescribeInstanceStatusInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceStatusInput) SetNextToken(v string) *DescribeInstanceStatusInput { - s.NextToken = &v - return s -} - -type DescribeInstanceStatusOutput struct { - _ struct{} `type:"structure"` - - // Information about the status of the instances. - InstanceStatuses []*InstanceStatus `locationName:"instanceStatusSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceStatusOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceStatusOutput) GoString() string { - return s.String() -} - -// SetInstanceStatuses sets the InstanceStatuses field's value. -func (s *DescribeInstanceStatusOutput) SetInstanceStatuses(v []*InstanceStatus) *DescribeInstanceStatusOutput { - s.InstanceStatuses = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceStatusOutput) SetNextToken(v string) *DescribeInstanceStatusOutput { - s.NextToken = &v - return s -} - -type DescribeInstanceTypeOfferingsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - // - // * location - This depends on the location type. For example, if the location - // type is region (default), the location is the Region code (for example, - // us-east-2.) - // - // * instance-type - The instance type. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The location type. - LocationType *string `type:"string" enum:"LocationType"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the next - // token value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceTypeOfferingsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceTypeOfferingsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeInstanceTypeOfferingsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceTypeOfferingsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceTypeOfferingsInput) SetDryRun(v bool) *DescribeInstanceTypeOfferingsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeInstanceTypeOfferingsInput) SetFilters(v []*Filter) *DescribeInstanceTypeOfferingsInput { - s.Filters = v - return s -} - -// SetLocationType sets the LocationType field's value. -func (s *DescribeInstanceTypeOfferingsInput) SetLocationType(v string) *DescribeInstanceTypeOfferingsInput { - s.LocationType = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstanceTypeOfferingsInput) SetMaxResults(v int64) *DescribeInstanceTypeOfferingsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceTypeOfferingsInput) SetNextToken(v string) *DescribeInstanceTypeOfferingsInput { - s.NextToken = &v - return s -} - -type DescribeInstanceTypeOfferingsOutput struct { - _ struct{} `type:"structure"` - - // The instance types offered. - InstanceTypeOfferings []*InstanceTypeOffering `locationName:"instanceTypeOfferingSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceTypeOfferingsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceTypeOfferingsOutput) GoString() string { - return s.String() -} - -// SetInstanceTypeOfferings sets the InstanceTypeOfferings field's value. -func (s *DescribeInstanceTypeOfferingsOutput) SetInstanceTypeOfferings(v []*InstanceTypeOffering) *DescribeInstanceTypeOfferingsOutput { - s.InstanceTypeOfferings = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceTypeOfferingsOutput) SetNextToken(v string) *DescribeInstanceTypeOfferingsOutput { - s.NextToken = &v - return s -} - -type DescribeInstanceTypesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - // - // * auto-recovery-supported - Indicates whether auto recovery is supported. - // (true | false) - // - // * bare-metal - Indicates whether it is a bare metal instance type. (true - // | false) - // - // * burstable-performance-supported - Indicates whether it is a burstable - // performance instance type. (true | false) - // - // * current-generation - Indicates whether this instance type is the latest - // generation instance type of an instance family. (true | false) - // - // * ebs-info.ebs-optimized-support - Indicates whether the instance type - // is EBS-optimized. (true | false) - // - // * ebs-info.encryption-support - Indicates whether EBS encryption is supported. - // (true | false) - // - // * free-tier-eligible - Indicates whether the instance type is eligible - // to use in the free tier. (true | false) - // - // * hibernation-supported - Indicates whether On-Demand hibernation is supported. - // (true | false) - // - // * hypervisor - The hypervisor used. (nitro | xen) - // - // * instance-storage-info.disk.count - The number of local disks. - // - // * instance-storage-info.disk.size-in-gb - The storage size of each instance - // storage disk, in GB. - // - // * instance-storage-info.disk.type - The storage technology for the local - // instance storage disks. (hdd | ssd) - // - // * instance-storage-info.total-size-in-gb - The total amount of storage - // available from all local instance storage, in GB. - // - // * instance-storage-supported - Indicates whether the instance type has - // local instance storage. (true | false) - // - // * memory-info.size-in-mib - The memory size. - // - // * network-info.ena-support - Indicates whether Elastic Network Adapter - // (ENA) is supported or required. (required | supported | unsupported) - // - // * network-info.ipv4-addresses-per-interface - The maximum number of private - // IPv4 addresses per network interface. - // - // * network-info.ipv6-addresses-per-interface - The maximum number of private - // IPv6 addresses per network interface. - // - // * network-info.ipv6-supported - Indicates whether the instance type supports - // IPv6. (true | false) - // - // * network-info.maximum-network-interfaces - The maximum number of network - // interfaces per instance. - // - // * network-info.network-performance - Describes the network performance. - // - // * processor-info.sustained-clock-speed-in-ghz - The CPU clock speed, in - // GHz. - // - // * vcpu-info.default-cores - The default number of cores for the instance - // type. - // - // * vcpu-info.default-threads-per-core - The default number of threads per - // cores for the instance type. - // - // * vcpu-info.default-vcpus - The default number of vCPUs for the instance - // type. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The instance types. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceTypes []*string `locationName:"InstanceType" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the next - // token value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceTypesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceTypesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeInstanceTypesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceTypesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceTypesInput) SetDryRun(v bool) *DescribeInstanceTypesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeInstanceTypesInput) SetFilters(v []*Filter) *DescribeInstanceTypesInput { - s.Filters = v - return s -} - -// SetInstanceTypes sets the InstanceTypes field's value. -func (s *DescribeInstanceTypesInput) SetInstanceTypes(v []*string) *DescribeInstanceTypesInput { - s.InstanceTypes = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstanceTypesInput) SetMaxResults(v int64) *DescribeInstanceTypesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceTypesInput) SetNextToken(v string) *DescribeInstanceTypesInput { - s.NextToken = &v - return s -} - -type DescribeInstanceTypesOutput struct { - _ struct{} `type:"structure"` - - // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceTypes []*InstanceTypeInfo `locationName:"instanceTypeSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeInstanceTypesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstanceTypesOutput) GoString() string { - return s.String() -} - -// SetInstanceTypes sets the InstanceTypes field's value. -func (s *DescribeInstanceTypesOutput) SetInstanceTypes(v []*InstanceTypeInfo) *DescribeInstanceTypesOutput { - s.InstanceTypes = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceTypesOutput) SetNextToken(v string) *DescribeInstanceTypesOutput { - s.NextToken = &v - return s -} - -type DescribeInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * affinity - The affinity setting for an instance running on a Dedicated - // Host (default | host). - // - // * architecture - The instance architecture (i386 | x86_64 | arm64). - // - // * availability-zone - The Availability Zone of the instance. - // - // * block-device-mapping.attach-time - The attach time for an EBS volume - // mapped to the instance, for example, 2010-09-15T17:15:20.000Z. - // - // * block-device-mapping.delete-on-termination - A Boolean that indicates - // whether the EBS volume is deleted on instance termination. - // - // * block-device-mapping.device-name - The device name specified in the - // block device mapping (for example, /dev/sdh or xvdh). - // - // * block-device-mapping.status - The status for the EBS volume (attaching - // | attached | detaching | detached). - // - // * block-device-mapping.volume-id - The volume ID of the EBS volume. - // - // * client-token - The idempotency token you provided when you launched - // the instance. - // - // * dns-name - The public DNS name of the instance. - // - // * group-id - The ID of the security group for the instance. EC2-Classic - // only. - // - // * group-name - The name of the security group for the instance. EC2-Classic - // only. - // - // * hibernation-options.configured - A Boolean that indicates whether the - // instance is enabled for hibernation. A value of true means that the instance - // is enabled for hibernation. - // - // * host-id - The ID of the Dedicated Host on which the instance is running, - // if applicable. - // - // * hypervisor - The hypervisor type of the instance (ovm | xen). - // - // * iam-instance-profile.arn - The instance profile associated with the - // instance. Specified as an ARN. image-id - The ID of the image used to - // launch the instance. - // - // * instance-id - The ID of the instance. - // - // * instance-lifecycle - Indicates whether this is a Spot Instance or a - // Scheduled Instance (spot | scheduled). - // - // * instance-state-code - The state of the instance, as a 16-bit unsigned - // integer. The high byte is used for internal purposes and should be ignored. - // The low byte is set based on the state represented. The valid values are: - // 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), - // and 80 (stopped). - // - // * instance-state-name - The state of the instance (pending | running | - // shutting-down | terminated | stopping | stopped). - // - // * instance-type - The type of instance (for example, t2.micro). - // - // * instance.group-id - The ID of the security group for the instance. - // - // * instance.group-name - The name of the security group for the instance. - // - // * ip-address - The public IPv4 address of the instance. - // - // * kernel-id - The kernel ID. - // - // * key-name - The name of the key pair used when the instance was launched. - // - // * launch-index - When launching multiple instances, this is the index - // for the instance in the launch group (for example, 0, 1, 2, and so on). - // - // * launch-time - The time when the instance was launched. - // - // * metadata-http-tokens - The metadata request authorization state (optional - // | required) - // - // * metadata-http-put-response-hop-limit - The http metadata request put - // response hop limit (integer, possible values 1 to 64) - // - // * metadata-http-endpoint - Enable or disable metadata access on http endpoint - // (enabled | disabled) - // - // * monitoring-state - Indicates whether detailed monitoring is enabled - // (disabled | enabled). - // - // * network-interface.addresses.private-ip-address - The private IPv4 address - // associated with the network interface. - // - // * network-interface.addresses.primary - Specifies whether the IPv4 address - // of the network interface is the primary private IPv4 address. - // - // * network-interface.addresses.association.public-ip - The ID of the association - // of an Elastic IP address (IPv4) with a network interface. - // - // * network-interface.addresses.association.ip-owner-id - The owner ID of - // the private IPv4 address associated with the network interface. - // - // * network-interface.association.public-ip - The address of the Elastic - // IP address (IPv4) bound to the network interface. - // - // * network-interface.association.ip-owner-id - The owner of the Elastic - // IP address (IPv4) associated with the network interface. - // - // * network-interface.association.allocation-id - The allocation ID returned - // when you allocated the Elastic IP address (IPv4) for your network interface. - // - // * network-interface.association.association-id - The association ID returned - // when the network interface was associated with an IPv4 address. - // - // * network-interface.attachment.attachment-id - The ID of the interface - // attachment. - // - // * network-interface.attachment.instance-id - The ID of the instance to - // which the network interface is attached. - // - // * network-interface.attachment.instance-owner-id - The owner ID of the - // instance to which the network interface is attached. - // - // * network-interface.attachment.device-index - The device index to which - // the network interface is attached. - // - // * network-interface.attachment.status - The status of the attachment (attaching - // | attached | detaching | detached). - // - // * network-interface.attachment.attach-time - The time that the network - // interface was attached to an instance. - // - // * network-interface.attachment.delete-on-termination - Specifies whether - // the attachment is deleted when an instance is terminated. - // - // * network-interface.availability-zone - The Availability Zone for the - // network interface. - // - // * network-interface.description - The description of the network interface. - // - // * network-interface.group-id - The ID of a security group associated with - // the network interface. - // - // * network-interface.group-name - The name of a security group associated - // with the network interface. - // - // * network-interface.ipv6-addresses.ipv6-address - The IPv6 address associated - // with the network interface. - // - // * network-interface.mac-address - The MAC address of the network interface. - // - // * network-interface.network-interface-id - The ID of the network interface. - // - // * network-interface.owner-id - The ID of the owner of the network interface. - // - // * network-interface.private-dns-name - The private DNS name of the network - // interface. - // - // * network-interface.requester-id - The requester ID for the network interface. - // - // * network-interface.requester-managed - Indicates whether the network - // interface is being managed by AWS. - // - // * network-interface.status - The status of the network interface (available) - // | in-use). - // - // * network-interface.source-dest-check - Whether the network interface - // performs source/destination checking. A value of true means that checking - // is enabled, and false means that checking is disabled. The value must - // be false for the network interface to perform network address translation - // (NAT) in your VPC. - // - // * network-interface.subnet-id - The ID of the subnet for the network interface. - // - // * network-interface.vpc-id - The ID of the VPC for the network interface. - // - // * owner-id - The AWS account ID of the instance owner. - // - // * placement-group-name - The name of the placement group for the instance. - // - // * placement-partition-number - The partition in which the instance is - // located. - // - // * platform - The platform. To list only Windows instances, use windows. - // - // * private-dns-name - The private IPv4 DNS name of the instance. - // - // * private-ip-address - The private IPv4 address of the instance. - // - // * product-code - The product code associated with the AMI used to launch - // the instance. - // - // * product-code.type - The type of product code (devpay | marketplace). - // - // * ramdisk-id - The RAM disk ID. - // - // * reason - The reason for the current state of the instance (for example, - // shows "User Initiated [date]" when you stop or terminate the instance). - // Similar to the state-reason-code filter. - // - // * requester-id - The ID of the entity that launched the instance on your - // behalf (for example, AWS Management Console, Auto Scaling, and so on). - // - // * reservation-id - The ID of the instance's reservation. A reservation - // ID is created any time you launch an instance. A reservation ID has a - // one-to-one relationship with an instance launch request, but can be associated - // with more than one instance if you launch multiple instances using the - // same launch request. For example, if you launch one instance, you get - // one reservation ID. If you launch ten instances using the same launch - // request, you also get one reservation ID. - // - // * root-device-name - The device name of the root device volume (for example, - // /dev/sda1). - // - // * root-device-type - The type of the root device volume (ebs | instance-store). - // - // * source-dest-check - Indicates whether the instance performs source/destination - // checking. A value of true means that checking is enabled, and false means - // that checking is disabled. The value must be false for the instance to - // perform network address translation (NAT) in your VPC. - // - // * spot-instance-request-id - The ID of the Spot Instance request. - // - // * state-reason-code - The reason code for the state change. - // - // * state-reason-message - A message that describes the state change. - // - // * subnet-id - The ID of the subnet for the instance. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources that have a tag with a specific key, regardless - // of the tag value. - // - // * tenancy - The tenancy of an instance (dedicated | default | host). - // - // * virtualization-type - The virtualization type of the instance (paravirtual - // | hvm). - // - // * vpc-id - The ID of the VPC that the instance is running in. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The instance IDs. - // - // Default: Describes all your instances. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 5 and 1000. You cannot specify this parameter and the - // instance IDs parameter in the same call. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token to request the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstancesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstancesInput) SetDryRun(v bool) *DescribeInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeInstancesInput) SetFilters(v []*Filter) *DescribeInstancesInput { - s.Filters = v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeInstancesInput) SetInstanceIds(v []*string) *DescribeInstancesInput { - s.InstanceIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstancesInput) SetMaxResults(v int64) *DescribeInstancesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstancesInput) SetNextToken(v string) *DescribeInstancesInput { - s.NextToken = &v - return s -} - -type DescribeInstancesOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the reservations. - Reservations []*Reservation `locationName:"reservationSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInstancesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstancesOutput) SetNextToken(v string) *DescribeInstancesOutput { - s.NextToken = &v - return s -} - -// SetReservations sets the Reservations field's value. -func (s *DescribeInstancesOutput) SetReservations(v []*Reservation) *DescribeInstancesOutput { - s.Reservations = v - return s -} - -type DescribeInternetGatewaysInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * attachment.state - The current state of the attachment between the gateway - // and the VPC (available). Present only if a VPC is attached. - // - // * attachment.vpc-id - The ID of an attached VPC. - // - // * internet-gateway-id - The ID of the Internet gateway. - // - // * owner-id - The ID of the AWS account that owns the internet gateway. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more internet gateway IDs. - // - // Default: Describes all your internet gateways. - InternetGatewayIds []*string `locationName:"internetGatewayId" locationNameList:"item" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeInternetGatewaysInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInternetGatewaysInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeInternetGatewaysInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeInternetGatewaysInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeInternetGatewaysInput) SetDryRun(v bool) *DescribeInternetGatewaysInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeInternetGatewaysInput) SetFilters(v []*Filter) *DescribeInternetGatewaysInput { - s.Filters = v - return s -} - -// SetInternetGatewayIds sets the InternetGatewayIds field's value. -func (s *DescribeInternetGatewaysInput) SetInternetGatewayIds(v []*string) *DescribeInternetGatewaysInput { - s.InternetGatewayIds = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInternetGatewaysInput) SetMaxResults(v int64) *DescribeInternetGatewaysInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInternetGatewaysInput) SetNextToken(v string) *DescribeInternetGatewaysInput { - s.NextToken = &v - return s -} - -type DescribeInternetGatewaysOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more internet gateways. - InternetGateways []*InternetGateway `locationName:"internetGatewaySet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeInternetGatewaysOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeInternetGatewaysOutput) GoString() string { - return s.String() -} - -// SetInternetGateways sets the InternetGateways field's value. -func (s *DescribeInternetGatewaysOutput) SetInternetGateways(v []*InternetGateway) *DescribeInternetGatewaysOutput { - s.InternetGateways = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeInternetGatewaysOutput) SetNextToken(v string) *DescribeInternetGatewaysOutput { - s.NextToken = &v - return s -} - -type DescribeKeyPairsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * fingerprint - The fingerprint of the key pair. - // - // * key-name - The name of the key pair. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The key pair names. - // - // Default: Describes all your key pairs. - KeyNames []*string `locationName:"KeyName" locationNameList:"KeyName" type:"list"` -} - -// String returns the string representation -func (s DescribeKeyPairsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeKeyPairsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeKeyPairsInput) SetDryRun(v bool) *DescribeKeyPairsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeKeyPairsInput) SetFilters(v []*Filter) *DescribeKeyPairsInput { - s.Filters = v - return s -} - -// SetKeyNames sets the KeyNames field's value. -func (s *DescribeKeyPairsInput) SetKeyNames(v []*string) *DescribeKeyPairsInput { - s.KeyNames = v - return s -} - -type DescribeKeyPairsOutput struct { - _ struct{} `type:"structure"` - - // Information about the key pairs. - KeyPairs []*KeyPairInfo `locationName:"keySet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeKeyPairsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeKeyPairsOutput) GoString() string { - return s.String() -} - -// SetKeyPairs sets the KeyPairs field's value. -func (s *DescribeKeyPairsOutput) SetKeyPairs(v []*KeyPairInfo) *DescribeKeyPairsOutput { - s.KeyPairs = v - return s -} - -type DescribeLaunchTemplateVersionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * create-time - The time the launch template version was created. - // - // * ebs-optimized - A boolean that indicates whether the instance is optimized - // for Amazon EBS I/O. - // - // * iam-instance-profile - The ARN of the IAM instance profile. - // - // * image-id - The ID of the AMI. - // - // * instance-type - The instance type. - // - // * is-default-version - A boolean that indicates whether the launch template - // version is the default version. - // - // * kernel-id - The kernel ID. - // - // * ram-disk-id - The RAM disk ID. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The ID of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateName *string `min:"3" type:"string"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 1 and 200. - MaxResults *int64 `type:"integer"` - - // The version number up to which to describe launch template versions. - MaxVersion *string `type:"string"` - - // The version number after which to describe launch template versions. - MinVersion *string `type:"string"` - - // The token to request the next page of results. - NextToken *string `type:"string"` - - // One or more versions of the launch template. - Versions []*string `locationName:"LaunchTemplateVersion" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeLaunchTemplateVersionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeLaunchTemplateVersionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeLaunchTemplateVersionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeLaunchTemplateVersionsInput"} - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetDryRun(v bool) *DescribeLaunchTemplateVersionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetFilters(v []*Filter) *DescribeLaunchTemplateVersionsInput { - s.Filters = v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetLaunchTemplateId(v string) *DescribeLaunchTemplateVersionsInput { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetLaunchTemplateName(v string) *DescribeLaunchTemplateVersionsInput { - s.LaunchTemplateName = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetMaxResults(v int64) *DescribeLaunchTemplateVersionsInput { - s.MaxResults = &v - return s -} - -// SetMaxVersion sets the MaxVersion field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetMaxVersion(v string) *DescribeLaunchTemplateVersionsInput { - s.MaxVersion = &v - return s -} - -// SetMinVersion sets the MinVersion field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetMinVersion(v string) *DescribeLaunchTemplateVersionsInput { - s.MinVersion = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetNextToken(v string) *DescribeLaunchTemplateVersionsInput { - s.NextToken = &v - return s -} - -// SetVersions sets the Versions field's value. -func (s *DescribeLaunchTemplateVersionsInput) SetVersions(v []*string) *DescribeLaunchTemplateVersionsInput { - s.Versions = v - return s -} - -type DescribeLaunchTemplateVersionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch template versions. - LaunchTemplateVersions []*LaunchTemplateVersion `locationName:"launchTemplateVersionSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeLaunchTemplateVersionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeLaunchTemplateVersionsOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplateVersions sets the LaunchTemplateVersions field's value. -func (s *DescribeLaunchTemplateVersionsOutput) SetLaunchTemplateVersions(v []*LaunchTemplateVersion) *DescribeLaunchTemplateVersionsOutput { - s.LaunchTemplateVersions = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeLaunchTemplateVersionsOutput) SetNextToken(v string) *DescribeLaunchTemplateVersionsOutput { - s.NextToken = &v - return s -} - -type DescribeLaunchTemplatesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * create-time - The time the launch template was created. - // - // * launch-template-name - The name of the launch template. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more launch template IDs. - LaunchTemplateIds []*string `locationName:"LaunchTemplateId" locationNameList:"item" type:"list"` - - // One or more launch template names. - LaunchTemplateNames []*string `locationName:"LaunchTemplateName" locationNameList:"item" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 1 and 200. - MaxResults *int64 `min:"1" type:"integer"` - - // The token to request the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeLaunchTemplatesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeLaunchTemplatesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeLaunchTemplatesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeLaunchTemplatesInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeLaunchTemplatesInput) SetDryRun(v bool) *DescribeLaunchTemplatesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeLaunchTemplatesInput) SetFilters(v []*Filter) *DescribeLaunchTemplatesInput { - s.Filters = v - return s -} - -// SetLaunchTemplateIds sets the LaunchTemplateIds field's value. -func (s *DescribeLaunchTemplatesInput) SetLaunchTemplateIds(v []*string) *DescribeLaunchTemplatesInput { - s.LaunchTemplateIds = v - return s -} - -// SetLaunchTemplateNames sets the LaunchTemplateNames field's value. -func (s *DescribeLaunchTemplatesInput) SetLaunchTemplateNames(v []*string) *DescribeLaunchTemplatesInput { - s.LaunchTemplateNames = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeLaunchTemplatesInput) SetMaxResults(v int64) *DescribeLaunchTemplatesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeLaunchTemplatesInput) SetNextToken(v string) *DescribeLaunchTemplatesInput { - s.NextToken = &v - return s -} - -type DescribeLaunchTemplatesOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch templates. - LaunchTemplates []*LaunchTemplate `locationName:"launchTemplates" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeLaunchTemplatesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeLaunchTemplatesOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplates sets the LaunchTemplates field's value. -func (s *DescribeLaunchTemplatesOutput) SetLaunchTemplates(v []*LaunchTemplate) *DescribeLaunchTemplatesOutput { - s.LaunchTemplates = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeLaunchTemplatesOutput) SetNextToken(v string) *DescribeLaunchTemplatesOutput { - s.NextToken = &v - return s -} - -type DescribeMovingAddressesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * moving-status - The status of the Elastic IP address (MovingToVpc | - // RestoringToClassic). - Filters []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value outside of this range, an error is returned. - // - // Default: If no value is provided, the default is 1000. - MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // One or more Elastic IP addresses. - PublicIps []*string `locationName:"publicIp" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeMovingAddressesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeMovingAddressesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeMovingAddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeMovingAddressesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeMovingAddressesInput) SetDryRun(v bool) *DescribeMovingAddressesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeMovingAddressesInput) SetFilters(v []*Filter) *DescribeMovingAddressesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeMovingAddressesInput) SetMaxResults(v int64) *DescribeMovingAddressesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeMovingAddressesInput) SetNextToken(v string) *DescribeMovingAddressesInput { - s.NextToken = &v - return s -} - -// SetPublicIps sets the PublicIps field's value. -func (s *DescribeMovingAddressesInput) SetPublicIps(v []*string) *DescribeMovingAddressesInput { - s.PublicIps = v - return s -} - -type DescribeMovingAddressesOutput struct { - _ struct{} `type:"structure"` - - // The status for each Elastic IP address. - MovingAddressStatuses []*MovingAddressStatus `locationName:"movingAddressStatusSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeMovingAddressesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeMovingAddressesOutput) GoString() string { - return s.String() -} - -// SetMovingAddressStatuses sets the MovingAddressStatuses field's value. -func (s *DescribeMovingAddressesOutput) SetMovingAddressStatuses(v []*MovingAddressStatus) *DescribeMovingAddressesOutput { - s.MovingAddressStatuses = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeMovingAddressesOutput) SetNextToken(v string) *DescribeMovingAddressesOutput { - s.NextToken = &v - return s -} - -type DescribeNatGatewaysInput struct { - _ struct{} `type:"structure"` - - // One or more filters. - // - // * nat-gateway-id - The ID of the NAT gateway. - // - // * state - The state of the NAT gateway (pending | failed | available | - // deleting | deleted). - // - // * subnet-id - The ID of the subnet in which the NAT gateway resides. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC in which the NAT gateway resides. - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // One or more NAT gateway IDs. - NatGatewayIds []*string `locationName:"NatGatewayId" locationNameList:"item" type:"list"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeNatGatewaysInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNatGatewaysInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeNatGatewaysInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeNatGatewaysInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetFilter sets the Filter field's value. -func (s *DescribeNatGatewaysInput) SetFilter(v []*Filter) *DescribeNatGatewaysInput { - s.Filter = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeNatGatewaysInput) SetMaxResults(v int64) *DescribeNatGatewaysInput { - s.MaxResults = &v - return s -} - -// SetNatGatewayIds sets the NatGatewayIds field's value. -func (s *DescribeNatGatewaysInput) SetNatGatewayIds(v []*string) *DescribeNatGatewaysInput { - s.NatGatewayIds = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNatGatewaysInput) SetNextToken(v string) *DescribeNatGatewaysInput { - s.NextToken = &v - return s -} - -type DescribeNatGatewaysOutput struct { - _ struct{} `type:"structure"` - - // Information about the NAT gateways. - NatGateways []*NatGateway `locationName:"natGatewaySet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeNatGatewaysOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNatGatewaysOutput) GoString() string { - return s.String() -} - -// SetNatGateways sets the NatGateways field's value. -func (s *DescribeNatGatewaysOutput) SetNatGateways(v []*NatGateway) *DescribeNatGatewaysOutput { - s.NatGateways = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNatGatewaysOutput) SetNextToken(v string) *DescribeNatGatewaysOutput { - s.NextToken = &v - return s -} - -type DescribeNetworkAclsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * association.association-id - The ID of an association ID for the ACL. - // - // * association.network-acl-id - The ID of the network ACL involved in the - // association. - // - // * association.subnet-id - The ID of the subnet involved in the association. - // - // * default - Indicates whether the ACL is the default network ACL for the - // VPC. - // - // * entry.cidr - The IPv4 CIDR range specified in the entry. - // - // * entry.icmp.code - The ICMP code specified in the entry, if any. - // - // * entry.icmp.type - The ICMP type specified in the entry, if any. - // - // * entry.ipv6-cidr - The IPv6 CIDR range specified in the entry. - // - // * entry.port-range.from - The start of the port range specified in the - // entry. - // - // * entry.port-range.to - The end of the port range specified in the entry. - // - // * entry.protocol - The protocol specified in the entry (tcp | udp | icmp - // or a protocol number). - // - // * entry.rule-action - Allows or denies the matching traffic (allow | deny). - // - // * entry.rule-number - The number of an entry (in other words, rule) in - // the set of ACL entries. - // - // * network-acl-id - The ID of the network ACL. - // - // * owner-id - The ID of the AWS account that owns the network ACL. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC for the network ACL. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // One or more network ACL IDs. - // - // Default: Describes all your network ACLs. - NetworkAclIds []*string `locationName:"NetworkAclId" locationNameList:"item" type:"list"` - - // The token for the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeNetworkAclsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkAclsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeNetworkAclsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkAclsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeNetworkAclsInput) SetDryRun(v bool) *DescribeNetworkAclsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeNetworkAclsInput) SetFilters(v []*Filter) *DescribeNetworkAclsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeNetworkAclsInput) SetMaxResults(v int64) *DescribeNetworkAclsInput { - s.MaxResults = &v - return s -} - -// SetNetworkAclIds sets the NetworkAclIds field's value. -func (s *DescribeNetworkAclsInput) SetNetworkAclIds(v []*string) *DescribeNetworkAclsInput { - s.NetworkAclIds = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNetworkAclsInput) SetNextToken(v string) *DescribeNetworkAclsInput { - s.NextToken = &v - return s -} - -type DescribeNetworkAclsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more network ACLs. - NetworkAcls []*NetworkAcl `locationName:"networkAclSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeNetworkAclsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkAclsOutput) GoString() string { - return s.String() -} - -// SetNetworkAcls sets the NetworkAcls field's value. -func (s *DescribeNetworkAclsOutput) SetNetworkAcls(v []*NetworkAcl) *DescribeNetworkAclsOutput { - s.NetworkAcls = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNetworkAclsOutput) SetNextToken(v string) *DescribeNetworkAclsOutput { - s.NextToken = &v - return s -} - -// Contains the parameters for DescribeNetworkInterfaceAttribute. -type DescribeNetworkInterfaceAttributeInput struct { - _ struct{} `type:"structure"` - - // The attribute of the network interface. This parameter is required. - Attribute *string `locationName:"attribute" type:"string" enum:"NetworkInterfaceAttribute"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeNetworkInterfaceAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkInterfaceAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeNetworkInterfaceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfaceAttributeInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeNetworkInterfaceAttributeInput) SetAttribute(v string) *DescribeNetworkInterfaceAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeNetworkInterfaceAttributeInput) SetDryRun(v bool) *DescribeNetworkInterfaceAttributeInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *DescribeNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *DescribeNetworkInterfaceAttributeInput { - s.NetworkInterfaceId = &v - return s -} - -// Contains the output of DescribeNetworkInterfaceAttribute. -type DescribeNetworkInterfaceAttributeOutput struct { - _ struct{} `type:"structure"` - - // The attachment (if any) of the network interface. - Attachment *NetworkInterfaceAttachment `locationName:"attachment" type:"structure"` - - // The description of the network interface. - Description *AttributeValue `locationName:"description" type:"structure"` - - // The security groups associated with the network interface. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // Indicates whether source/destination checking is enabled. - SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` -} - -// String returns the string representation -func (s DescribeNetworkInterfaceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkInterfaceAttributeOutput) GoString() string { - return s.String() -} - -// SetAttachment sets the Attachment field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetAttachment(v *NetworkInterfaceAttachment) *DescribeNetworkInterfaceAttributeOutput { - s.Attachment = v - return s -} - -// SetDescription sets the Description field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetDescription(v *AttributeValue) *DescribeNetworkInterfaceAttributeOutput { - s.Description = v - return s -} - -// SetGroups sets the Groups field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetGroups(v []*GroupIdentifier) *DescribeNetworkInterfaceAttributeOutput { - s.Groups = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetNetworkInterfaceId(v string) *DescribeNetworkInterfaceAttributeOutput { - s.NetworkInterfaceId = &v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetSourceDestCheck(v *AttributeBooleanValue) *DescribeNetworkInterfaceAttributeOutput { - s.SourceDestCheck = v - return s -} - -// Contains the parameters for DescribeNetworkInterfacePermissions. -type DescribeNetworkInterfacePermissionsInput struct { - _ struct{} `type:"structure"` - - // One or more filters. - // - // * network-interface-permission.network-interface-permission-id - The ID - // of the permission. - // - // * network-interface-permission.network-interface-id - The ID of the network - // interface. - // - // * network-interface-permission.aws-account-id - The AWS account ID. - // - // * network-interface-permission.aws-service - The AWS service. - // - // * network-interface-permission.permission - The type of permission (INSTANCE-ATTACH - // | EIP-ASSOCIATE). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. If - // this parameter is not specified, up to 50 results are returned by default. - MaxResults *int64 `min:"5" type:"integer"` - - // One or more network interface permission IDs. - NetworkInterfacePermissionIds []*string `locationName:"NetworkInterfacePermissionId" type:"list"` - - // The token to request the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeNetworkInterfacePermissionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkInterfacePermissionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeNetworkInterfacePermissionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfacePermissionsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetFilters sets the Filters field's value. -func (s *DescribeNetworkInterfacePermissionsInput) SetFilters(v []*Filter) *DescribeNetworkInterfacePermissionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeNetworkInterfacePermissionsInput) SetMaxResults(v int64) *DescribeNetworkInterfacePermissionsInput { - s.MaxResults = &v - return s -} - -// SetNetworkInterfacePermissionIds sets the NetworkInterfacePermissionIds field's value. -func (s *DescribeNetworkInterfacePermissionsInput) SetNetworkInterfacePermissionIds(v []*string) *DescribeNetworkInterfacePermissionsInput { - s.NetworkInterfacePermissionIds = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNetworkInterfacePermissionsInput) SetNextToken(v string) *DescribeNetworkInterfacePermissionsInput { - s.NextToken = &v - return s -} - -// Contains the output for DescribeNetworkInterfacePermissions. -type DescribeNetworkInterfacePermissionsOutput struct { - _ struct{} `type:"structure"` - - // The network interface permissions. - NetworkInterfacePermissions []*NetworkInterfacePermission `locationName:"networkInterfacePermissions" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeNetworkInterfacePermissionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkInterfacePermissionsOutput) GoString() string { - return s.String() -} - -// SetNetworkInterfacePermissions sets the NetworkInterfacePermissions field's value. -func (s *DescribeNetworkInterfacePermissionsOutput) SetNetworkInterfacePermissions(v []*NetworkInterfacePermission) *DescribeNetworkInterfacePermissionsOutput { - s.NetworkInterfacePermissions = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNetworkInterfacePermissionsOutput) SetNextToken(v string) *DescribeNetworkInterfacePermissionsOutput { - s.NextToken = &v - return s -} - -// Contains the parameters for DescribeNetworkInterfaces. -type DescribeNetworkInterfacesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * addresses.private-ip-address - The private IPv4 addresses associated - // with the network interface. - // - // * addresses.primary - Whether the private IPv4 address is the primary - // IP address associated with the network interface. - // - // * addresses.association.public-ip - The association ID returned when the - // network interface was associated with the Elastic IP address (IPv4). - // - // * addresses.association.owner-id - The owner ID of the addresses associated - // with the network interface. - // - // * association.association-id - The association ID returned when the network - // interface was associated with an IPv4 address. - // - // * association.allocation-id - The allocation ID returned when you allocated - // the Elastic IP address (IPv4) for your network interface. - // - // * association.ip-owner-id - The owner of the Elastic IP address (IPv4) - // associated with the network interface. - // - // * association.public-ip - The address of the Elastic IP address (IPv4) - // bound to the network interface. - // - // * association.public-dns-name - The public DNS name for the network interface - // (IPv4). - // - // * attachment.attachment-id - The ID of the interface attachment. - // - // * attachment.attach-time - The time that the network interface was attached - // to an instance. - // - // * attachment.delete-on-termination - Indicates whether the attachment - // is deleted when an instance is terminated. - // - // * attachment.device-index - The device index to which the network interface - // is attached. - // - // * attachment.instance-id - The ID of the instance to which the network - // interface is attached. - // - // * attachment.instance-owner-id - The owner ID of the instance to which - // the network interface is attached. - // - // * attachment.nat-gateway-id - The ID of the NAT gateway to which the network - // interface is attached. - // - // * attachment.status - The status of the attachment (attaching | attached - // | detaching | detached). - // - // * availability-zone - The Availability Zone of the network interface. - // - // * description - The description of the network interface. - // - // * group-id - The ID of a security group associated with the network interface. - // - // * group-name - The name of a security group associated with the network - // interface. - // - // * ipv6-addresses.ipv6-address - An IPv6 address associated with the network - // interface. - // - // * mac-address - The MAC address of the network interface. - // - // * network-interface-id - The ID of the network interface. - // - // * owner-id - The AWS account ID of the network interface owner. - // - // * private-ip-address - The private IPv4 address or addresses of the network - // interface. - // - // * private-dns-name - The private DNS name of the network interface (IPv4). - // - // * requester-id - The ID of the entity that launched the instance on your - // behalf (for example, AWS Management Console, Auto Scaling, and so on). - // - // * requester-managed - Indicates whether the network interface is being - // managed by an AWS service (for example, AWS Management Console, Auto Scaling, - // and so on). - // - // * source-dest-check - Indicates whether the network interface performs - // source/destination checking. A value of true means checking is enabled, - // and false means checking is disabled. The value must be false for the - // network interface to perform network address translation (NAT) in your - // VPC. - // - // * status - The status of the network interface. If the network interface - // is not attached to an instance, the status is available; if a network - // interface is attached to an instance the status is in-use. - // - // * subnet-id - The ID of the subnet for the network interface. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC for the network interface. - Filters []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` - - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - MaxResults *int64 `min:"5" type:"integer"` - - // One or more network interface IDs. - // - // Default: Describes all your network interfaces. - NetworkInterfaceIds []*string `locationName:"NetworkInterfaceId" locationNameList:"item" type:"list"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeNetworkInterfacesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkInterfacesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeNetworkInterfacesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfacesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeNetworkInterfacesInput) SetDryRun(v bool) *DescribeNetworkInterfacesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeNetworkInterfacesInput) SetFilters(v []*Filter) *DescribeNetworkInterfacesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeNetworkInterfacesInput) SetMaxResults(v int64) *DescribeNetworkInterfacesInput { - s.MaxResults = &v - return s -} - -// SetNetworkInterfaceIds sets the NetworkInterfaceIds field's value. -func (s *DescribeNetworkInterfacesInput) SetNetworkInterfaceIds(v []*string) *DescribeNetworkInterfacesInput { - s.NetworkInterfaceIds = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNetworkInterfacesInput) SetNextToken(v string) *DescribeNetworkInterfacesInput { - s.NextToken = &v - return s -} - -// Contains the output of DescribeNetworkInterfaces. -type DescribeNetworkInterfacesOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more network interfaces. - NetworkInterfaces []*NetworkInterface `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeNetworkInterfacesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeNetworkInterfacesOutput) GoString() string { - return s.String() -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *DescribeNetworkInterfacesOutput) SetNetworkInterfaces(v []*NetworkInterface) *DescribeNetworkInterfacesOutput { - s.NetworkInterfaces = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeNetworkInterfacesOutput) SetNextToken(v string) *DescribeNetworkInterfacesOutput { - s.NextToken = &v - return s -} - -type DescribePlacementGroupsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * group-name - The name of the placement group. - // - // * state - The state of the placement group (pending | available | deleting - // | deleted). - // - // * strategy - The strategy of the placement group (cluster | spread | partition). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The names of the placement groups. - // - // Default: Describes all your placement groups, or only those otherwise specified. - GroupNames []*string `locationName:"groupName" type:"list"` -} - -// String returns the string representation -func (s DescribePlacementGroupsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePlacementGroupsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribePlacementGroupsInput) SetDryRun(v bool) *DescribePlacementGroupsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribePlacementGroupsInput) SetFilters(v []*Filter) *DescribePlacementGroupsInput { - s.Filters = v - return s -} - -// SetGroupNames sets the GroupNames field's value. -func (s *DescribePlacementGroupsInput) SetGroupNames(v []*string) *DescribePlacementGroupsInput { - s.GroupNames = v - return s -} - -type DescribePlacementGroupsOutput struct { - _ struct{} `type:"structure"` - - // Information about the placement groups. - PlacementGroups []*PlacementGroup `locationName:"placementGroupSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePlacementGroupsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePlacementGroupsOutput) GoString() string { - return s.String() -} - -// SetPlacementGroups sets the PlacementGroups field's value. -func (s *DescribePlacementGroupsOutput) SetPlacementGroups(v []*PlacementGroup) *DescribePlacementGroupsOutput { - s.PlacementGroups = v - return s -} - -type DescribePrefixListsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * prefix-list-id: The ID of a prefix list. - // - // * prefix-list-name: The name of a prefix list. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // One or more prefix list IDs. - PrefixListIds []*string `locationName:"PrefixListId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePrefixListsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePrefixListsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribePrefixListsInput) SetDryRun(v bool) *DescribePrefixListsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribePrefixListsInput) SetFilters(v []*Filter) *DescribePrefixListsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribePrefixListsInput) SetMaxResults(v int64) *DescribePrefixListsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribePrefixListsInput) SetNextToken(v string) *DescribePrefixListsInput { - s.NextToken = &v - return s -} - -// SetPrefixListIds sets the PrefixListIds field's value. -func (s *DescribePrefixListsInput) SetPrefixListIds(v []*string) *DescribePrefixListsInput { - s.PrefixListIds = v - return s -} - -type DescribePrefixListsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // All available prefix lists. - PrefixLists []*PrefixList `locationName:"prefixListSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePrefixListsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePrefixListsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribePrefixListsOutput) SetNextToken(v string) *DescribePrefixListsOutput { - s.NextToken = &v - return s -} - -// SetPrefixLists sets the PrefixLists field's value. -func (s *DescribePrefixListsOutput) SetPrefixLists(v []*PrefixList) *DescribePrefixListsOutput { - s.PrefixLists = v - return s -} - -type DescribePrincipalIdFormatInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. - MaxResults *int64 `min:"1" type:"integer"` - - // The token to request the next page of results. - NextToken *string `type:"string"` - - // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options - // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log - // | image | import-task | instance | internet-gateway | network-acl | network-acl-association - // | network-interface | network-interface-attachment | prefix-list | reservation - // | route-table | route-table-association | security-group | snapshot | subnet - // | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association - // | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway - Resources []*string `locationName:"Resource" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePrincipalIdFormatInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePrincipalIdFormatInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribePrincipalIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribePrincipalIdFormatInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribePrincipalIdFormatInput) SetDryRun(v bool) *DescribePrincipalIdFormatInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribePrincipalIdFormatInput) SetMaxResults(v int64) *DescribePrincipalIdFormatInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribePrincipalIdFormatInput) SetNextToken(v string) *DescribePrincipalIdFormatInput { - s.NextToken = &v - return s -} - -// SetResources sets the Resources field's value. -func (s *DescribePrincipalIdFormatInput) SetResources(v []*string) *DescribePrincipalIdFormatInput { - s.Resources = v - return s -} - -type DescribePrincipalIdFormatOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the ID format settings for the ARN. - Principals []*PrincipalIdFormat `locationName:"principalSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePrincipalIdFormatOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePrincipalIdFormatOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribePrincipalIdFormatOutput) SetNextToken(v string) *DescribePrincipalIdFormatOutput { - s.NextToken = &v - return s -} - -// SetPrincipals sets the Principals field's value. -func (s *DescribePrincipalIdFormatOutput) SetPrincipals(v []*PrincipalIdFormat) *DescribePrincipalIdFormatOutput { - s.Principals = v - return s -} - -type DescribePublicIpv4PoolsInput struct { - _ struct{} `type:"structure"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"1" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The IDs of the address pools. - PoolIds []*string `locationName:"PoolId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePublicIpv4PoolsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePublicIpv4PoolsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribePublicIpv4PoolsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribePublicIpv4PoolsInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribePublicIpv4PoolsInput) SetMaxResults(v int64) *DescribePublicIpv4PoolsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribePublicIpv4PoolsInput) SetNextToken(v string) *DescribePublicIpv4PoolsInput { - s.NextToken = &v - return s -} - -// SetPoolIds sets the PoolIds field's value. -func (s *DescribePublicIpv4PoolsInput) SetPoolIds(v []*string) *DescribePublicIpv4PoolsInput { - s.PoolIds = v - return s -} - -type DescribePublicIpv4PoolsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the address pools. - PublicIpv4Pools []*PublicIpv4Pool `locationName:"publicIpv4PoolSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribePublicIpv4PoolsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribePublicIpv4PoolsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribePublicIpv4PoolsOutput) SetNextToken(v string) *DescribePublicIpv4PoolsOutput { - s.NextToken = &v - return s -} - -// SetPublicIpv4Pools sets the PublicIpv4Pools field's value. -func (s *DescribePublicIpv4PoolsOutput) SetPublicIpv4Pools(v []*PublicIpv4Pool) *DescribePublicIpv4PoolsOutput { - s.PublicIpv4Pools = v - return s -} - -type DescribeRegionsInput struct { - _ struct{} `type:"structure"` - - // Indicates whether to display all Regions, including Regions that are disabled - // for your account. - AllRegions *bool `type:"boolean"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * endpoint - The endpoint of the Region (for example, ec2.us-east-1.amazonaws.com). - // - // * opt-in-status - The opt-in status of the Region (opt-in-not-required - // | opted-in | not-opted-in). - // - // * region-name - The name of the Region (for example, us-east-1). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The names of the Regions. You can specify any Regions, whether they are enabled - // and disabled for your account. - RegionNames []*string `locationName:"RegionName" locationNameList:"RegionName" type:"list"` -} - -// String returns the string representation -func (s DescribeRegionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeRegionsInput) GoString() string { - return s.String() -} - -// SetAllRegions sets the AllRegions field's value. -func (s *DescribeRegionsInput) SetAllRegions(v bool) *DescribeRegionsInput { - s.AllRegions = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeRegionsInput) SetDryRun(v bool) *DescribeRegionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeRegionsInput) SetFilters(v []*Filter) *DescribeRegionsInput { - s.Filters = v - return s -} - -// SetRegionNames sets the RegionNames field's value. -func (s *DescribeRegionsInput) SetRegionNames(v []*string) *DescribeRegionsInput { - s.RegionNames = v - return s -} - -type DescribeRegionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Regions. - Regions []*Region `locationName:"regionInfo" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeRegionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeRegionsOutput) GoString() string { - return s.String() -} - -// SetRegions sets the Regions field's value. -func (s *DescribeRegionsOutput) SetRegions(v []*Region) *DescribeRegionsOutput { - s.Regions = v - return s -} - -// Contains the parameters for DescribeReservedInstances. -type DescribeReservedInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone - The Availability Zone where the Reserved Instance - // can be used. - // - // * duration - The duration of the Reserved Instance (one year or three - // years), in seconds (31536000 | 94608000). - // - // * end - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z). - // - // * fixed-price - The purchase price of the Reserved Instance (for example, - // 9800.0). - // - // * instance-type - The instance type that is covered by the reservation. - // - // * scope - The scope of the Reserved Instance (Region or Availability Zone). - // - // * product-description - The Reserved Instance product platform description. - // Instances that include (Amazon VPC) in the product platform description - // will only be displayed to EC2-Classic account holders and are for use - // with Amazon VPC (Linux/UNIX | Linux/UNIX (Amazon VPC) | SUSE Linux | SUSE - // Linux (Amazon VPC) | Red Hat Enterprise Linux | Red Hat Enterprise Linux - // (Amazon VPC) | Windows | Windows (Amazon VPC) | Windows with SQL Server - // Standard | Windows with SQL Server Standard (Amazon VPC) | Windows with - // SQL Server Web | Windows with SQL Server Web (Amazon VPC) | Windows with - // SQL Server Enterprise | Windows with SQL Server Enterprise (Amazon VPC)). - // - // * reserved-instances-id - The ID of the Reserved Instance. - // - // * start - The time at which the Reserved Instance purchase request was - // placed (for example, 2014-08-07T11:54:42.000Z). - // - // * state - The state of the Reserved Instance (payment-pending | active - // | payment-failed | retired). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * usage-price - The usage price of the Reserved Instance, per hour (for - // example, 0.84). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // Describes whether the Reserved Instance is Standard or Convertible. - OfferingClass *string `type:"string" enum:"OfferingClassType"` - - // The Reserved Instance offering type. If you are using tools that predate - // the 2011-11-01 API version, you only have access to the Medium Utilization - // Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` - - // One or more Reserved Instance IDs. - // - // Default: Describes all your Reserved Instances, or only those otherwise specified. - ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"ReservedInstancesId" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeReservedInstancesInput) SetDryRun(v bool) *DescribeReservedInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesInput) SetFilters(v []*Filter) *DescribeReservedInstancesInput { - s.Filters = v - return s -} - -// SetOfferingClass sets the OfferingClass field's value. -func (s *DescribeReservedInstancesInput) SetOfferingClass(v string) *DescribeReservedInstancesInput { - s.OfferingClass = &v - return s -} - -// SetOfferingType sets the OfferingType field's value. -func (s *DescribeReservedInstancesInput) SetOfferingType(v string) *DescribeReservedInstancesInput { - s.OfferingType = &v - return s -} - -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *DescribeReservedInstancesInput) SetReservedInstancesIds(v []*string) *DescribeReservedInstancesInput { - s.ReservedInstancesIds = v - return s -} - -// Contains the parameters for DescribeReservedInstancesListings. -type DescribeReservedInstancesListingsInput struct { - _ struct{} `type:"structure"` - - // One or more filters. - // - // * reserved-instances-id - The ID of the Reserved Instances. - // - // * reserved-instances-listing-id - The ID of the Reserved Instances listing. - // - // * status - The status of the Reserved Instance listing (pending | active - // | cancelled | closed). - // - // * status-message - The reason for the status. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more Reserved Instance IDs. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - - // One or more Reserved Instance listing IDs. - ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string"` -} - -// String returns the string representation -func (s DescribeReservedInstancesListingsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesListingsInput) GoString() string { - return s.String() -} - -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesListingsInput) SetFilters(v []*Filter) *DescribeReservedInstancesListingsInput { - s.Filters = v - return s -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *DescribeReservedInstancesListingsInput) SetReservedInstancesId(v string) *DescribeReservedInstancesListingsInput { - s.ReservedInstancesId = &v - return s -} - -// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. -func (s *DescribeReservedInstancesListingsInput) SetReservedInstancesListingId(v string) *DescribeReservedInstancesListingsInput { - s.ReservedInstancesListingId = &v - return s -} - -// Contains the output of DescribeReservedInstancesListings. -type DescribeReservedInstancesListingsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Reserved Instance listing. - ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesListingsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesListingsOutput) GoString() string { - return s.String() -} - -// SetReservedInstancesListings sets the ReservedInstancesListings field's value. -func (s *DescribeReservedInstancesListingsOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *DescribeReservedInstancesListingsOutput { - s.ReservedInstancesListings = v - return s -} - -// Contains the parameters for DescribeReservedInstancesModifications. -type DescribeReservedInstancesModificationsInput struct { - _ struct{} `type:"structure"` - - // One or more filters. - // - // * client-token - The idempotency token for the modification request. - // - // * create-date - The time when the modification request was created. - // - // * effective-date - The time when the modification becomes effective. - // - // * modification-result.reserved-instances-id - The ID for the Reserved - // Instances created as part of the modification request. This ID is only - // available when the status of the modification is fulfilled. - // - // * modification-result.target-configuration.availability-zone - The Availability - // Zone for the new Reserved Instances. - // - // * modification-result.target-configuration.instance-count - The number - // of new Reserved Instances. - // - // * modification-result.target-configuration.instance-type - The instance - // type of the new Reserved Instances. - // - // * modification-result.target-configuration.platform - The network platform - // of the new Reserved Instances (EC2-Classic | EC2-VPC). - // - // * reserved-instances-id - The ID of the Reserved Instances modified. - // - // * reserved-instances-modification-id - The ID of the modification request. - // - // * status - The status of the Reserved Instances modification request (processing - // | fulfilled | failed). - // - // * status-message - The reason for the status. - // - // * update-date - The time when the modification request was last updated. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // IDs for the submitted modification request. - ReservedInstancesModificationIds []*string `locationName:"ReservedInstancesModificationId" locationNameList:"ReservedInstancesModificationId" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesModificationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesModificationsInput) GoString() string { - return s.String() -} - -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesModificationsInput) SetFilters(v []*Filter) *DescribeReservedInstancesModificationsInput { - s.Filters = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesModificationsInput) SetNextToken(v string) *DescribeReservedInstancesModificationsInput { - s.NextToken = &v - return s -} - -// SetReservedInstancesModificationIds sets the ReservedInstancesModificationIds field's value. -func (s *DescribeReservedInstancesModificationsInput) SetReservedInstancesModificationIds(v []*string) *DescribeReservedInstancesModificationsInput { - s.ReservedInstancesModificationIds = v - return s -} - -// Contains the output of DescribeReservedInstancesModifications. -type DescribeReservedInstancesModificationsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The Reserved Instance modification information. - ReservedInstancesModifications []*ReservedInstancesModification `locationName:"reservedInstancesModificationsSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesModificationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesModificationsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesModificationsOutput) SetNextToken(v string) *DescribeReservedInstancesModificationsOutput { - s.NextToken = &v - return s -} - -// SetReservedInstancesModifications sets the ReservedInstancesModifications field's value. -func (s *DescribeReservedInstancesModificationsOutput) SetReservedInstancesModifications(v []*ReservedInstancesModification) *DescribeReservedInstancesModificationsOutput { - s.ReservedInstancesModifications = v - return s -} - -// Contains the parameters for DescribeReservedInstancesOfferings. -type DescribeReservedInstancesOfferingsInput struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which the Reserved Instance can be used. - AvailabilityZone *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone - The Availability Zone where the Reserved Instance - // can be used. - // - // * duration - The duration of the Reserved Instance (for example, one year - // or three years), in seconds (31536000 | 94608000). - // - // * fixed-price - The purchase price of the Reserved Instance (for example, - // 9800.0). - // - // * instance-type - The instance type that is covered by the reservation. - // - // * marketplace - Set to true to show only Reserved Instance Marketplace - // offerings. When this filter is not used, which is the default behavior, - // all offerings from both AWS and the Reserved Instance Marketplace are - // listed. - // - // * product-description - The Reserved Instance product platform description. - // Instances that include (Amazon VPC) in the product platform description - // will only be displayed to EC2-Classic account holders and are for use - // with Amazon VPC. (Linux/UNIX | Linux/UNIX (Amazon VPC) | SUSE Linux | - // SUSE Linux (Amazon VPC) | Red Hat Enterprise Linux | Red Hat Enterprise - // Linux (Amazon VPC) | Windows | Windows (Amazon VPC) | Windows with SQL - // Server Standard | Windows with SQL Server Standard (Amazon VPC) | Windows - // with SQL Server Web | Windows with SQL Server Web (Amazon VPC) | Windows - // with SQL Server Enterprise | Windows with SQL Server Enterprise (Amazon - // VPC)) - // - // * reserved-instances-offering-id - The Reserved Instances offering ID. - // - // * scope - The scope of the Reserved Instance (Availability Zone or Region). - // - // * usage-price - The usage price of the Reserved Instance, per hour (for - // example, 0.84). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // Include Reserved Instance Marketplace offerings in the response. - IncludeMarketplace *bool `type:"boolean"` - - // The tenancy of the instances covered by the reservation. A Reserved Instance - // with a tenancy of dedicated is applied to instances that run in a VPC on - // single-tenant hardware (i.e., Dedicated Instances). - // - // Important: The host value cannot be used with this parameter. Use the default - // or dedicated values only. - // - // Default: default - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` - - // The instance type that the reservation will cover (for example, m1.small). - // For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceType *string `type:"string" enum:"InstanceType"` - - // The maximum duration (in seconds) to filter when searching for offerings. - // - // Default: 94608000 (3 years) - MaxDuration *int64 `type:"long"` - - // The maximum number of instances to filter when searching for offerings. - // - // Default: 20 - MaxInstanceCount *int64 `type:"integer"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. The maximum is 100. - // - // Default: 100 - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The minimum duration (in seconds) to filter when searching for offerings. - // - // Default: 2592000 (1 month) - MinDuration *int64 `type:"long"` - - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // The offering class of the Reserved Instance. Can be standard or convertible. - OfferingClass *string `type:"string" enum:"OfferingClassType"` - - // The Reserved Instance offering type. If you are using tools that predate - // the 2011-11-01 API version, you only have access to the Medium Utilization - // Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` - - // The Reserved Instance product platform description. Instances that include - // (Amazon VPC) in the description are for use with Amazon VPC. - ProductDescription *string `type:"string" enum:"RIProductDescription"` - - // One or more Reserved Instances offering IDs. - ReservedInstancesOfferingIds []*string `locationName:"ReservedInstancesOfferingId" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesOfferingsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesOfferingsInput) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetAvailabilityZone(v string) *DescribeReservedInstancesOfferingsInput { - s.AvailabilityZone = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetDryRun(v bool) *DescribeReservedInstancesOfferingsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetFilters(v []*Filter) *DescribeReservedInstancesOfferingsInput { - s.Filters = v - return s -} - -// SetIncludeMarketplace sets the IncludeMarketplace field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetIncludeMarketplace(v bool) *DescribeReservedInstancesOfferingsInput { - s.IncludeMarketplace = &v - return s -} - -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetInstanceTenancy(v string) *DescribeReservedInstancesOfferingsInput { - s.InstanceTenancy = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetInstanceType(v string) *DescribeReservedInstancesOfferingsInput { - s.InstanceType = &v - return s -} - -// SetMaxDuration sets the MaxDuration field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMaxDuration(v int64) *DescribeReservedInstancesOfferingsInput { - s.MaxDuration = &v - return s -} - -// SetMaxInstanceCount sets the MaxInstanceCount field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMaxInstanceCount(v int64) *DescribeReservedInstancesOfferingsInput { - s.MaxInstanceCount = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMaxResults(v int64) *DescribeReservedInstancesOfferingsInput { - s.MaxResults = &v - return s -} - -// SetMinDuration sets the MinDuration field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMinDuration(v int64) *DescribeReservedInstancesOfferingsInput { - s.MinDuration = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetNextToken(v string) *DescribeReservedInstancesOfferingsInput { - s.NextToken = &v - return s -} - -// SetOfferingClass sets the OfferingClass field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetOfferingClass(v string) *DescribeReservedInstancesOfferingsInput { - s.OfferingClass = &v - return s -} - -// SetOfferingType sets the OfferingType field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetOfferingType(v string) *DescribeReservedInstancesOfferingsInput { - s.OfferingType = &v - return s -} - -// SetProductDescription sets the ProductDescription field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetProductDescription(v string) *DescribeReservedInstancesOfferingsInput { - s.ProductDescription = &v - return s -} - -// SetReservedInstancesOfferingIds sets the ReservedInstancesOfferingIds field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetReservedInstancesOfferingIds(v []*string) *DescribeReservedInstancesOfferingsInput { - s.ReservedInstancesOfferingIds = v - return s -} - -// Contains the output of DescribeReservedInstancesOfferings. -type DescribeReservedInstancesOfferingsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // A list of Reserved Instances offerings. - ReservedInstancesOfferings []*ReservedInstancesOffering `locationName:"reservedInstancesOfferingsSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesOfferingsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesOfferingsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesOfferingsOutput) SetNextToken(v string) *DescribeReservedInstancesOfferingsOutput { - s.NextToken = &v - return s -} - -// SetReservedInstancesOfferings sets the ReservedInstancesOfferings field's value. -func (s *DescribeReservedInstancesOfferingsOutput) SetReservedInstancesOfferings(v []*ReservedInstancesOffering) *DescribeReservedInstancesOfferingsOutput { - s.ReservedInstancesOfferings = v - return s -} - -// Contains the output for DescribeReservedInstances. -type DescribeReservedInstancesOutput struct { - _ struct{} `type:"structure"` - - // A list of Reserved Instances. - ReservedInstances []*ReservedInstances `locationName:"reservedInstancesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeReservedInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeReservedInstancesOutput) GoString() string { - return s.String() -} - -// SetReservedInstances sets the ReservedInstances field's value. -func (s *DescribeReservedInstancesOutput) SetReservedInstances(v []*ReservedInstances) *DescribeReservedInstancesOutput { - s.ReservedInstances = v - return s -} - -type DescribeRouteTablesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * association.route-table-association-id - The ID of an association ID - // for the route table. - // - // * association.route-table-id - The ID of the route table involved in the - // association. - // - // * association.subnet-id - The ID of the subnet involved in the association. - // - // * association.main - Indicates whether the route table is the main route - // table for the VPC (true | false). Route tables that do not have an association - // ID are not returned in the response. - // - // * owner-id - The ID of the AWS account that owns the route table. - // - // * route-table-id - The ID of the route table. - // - // * route.destination-cidr-block - The IPv4 CIDR range specified in a route - // in the table. - // - // * route.destination-ipv6-cidr-block - The IPv6 CIDR range specified in - // a route in the route table. - // - // * route.destination-prefix-list-id - The ID (prefix) of the AWS service - // specified in a route in the table. - // - // * route.egress-only-internet-gateway-id - The ID of an egress-only Internet - // gateway specified in a route in the route table. - // - // * route.gateway-id - The ID of a gateway specified in a route in the table. - // - // * route.instance-id - The ID of an instance specified in a route in the - // table. - // - // * route.nat-gateway-id - The ID of a NAT gateway. - // - // * route.transit-gateway-id - The ID of a transit gateway. - // - // * route.origin - Describes how the route was created. CreateRouteTable - // indicates that the route was automatically created when the route table - // was created; CreateRoute indicates that the route was manually added to - // the route table; EnableVgwRoutePropagation indicates that the route was - // propagated by route propagation. - // - // * route.state - The state of a route in the route table (active | blackhole). - // The blackhole state indicates that the route's target isn't available - // (for example, the specified gateway isn't attached to the VPC, the specified - // NAT instance has been terminated, and so on). - // - // * route.vpc-peering-connection-id - The ID of a VPC peering connection - // specified in a route in the table. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * transit-gateway-id - The ID of a transit gateway. - // - // * vpc-id - The ID of the VPC for the route table. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // One or more route table IDs. - // - // Default: Describes all your route tables. - RouteTableIds []*string `locationName:"RouteTableId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeRouteTablesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeRouteTablesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeRouteTablesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeRouteTablesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeRouteTablesInput) SetDryRun(v bool) *DescribeRouteTablesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeRouteTablesInput) SetFilters(v []*Filter) *DescribeRouteTablesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeRouteTablesInput) SetMaxResults(v int64) *DescribeRouteTablesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeRouteTablesInput) SetNextToken(v string) *DescribeRouteTablesInput { - s.NextToken = &v - return s -} - -// SetRouteTableIds sets the RouteTableIds field's value. -func (s *DescribeRouteTablesInput) SetRouteTableIds(v []*string) *DescribeRouteTablesInput { - s.RouteTableIds = v - return s -} - -// Contains the output of DescribeRouteTables. -type DescribeRouteTablesOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more route tables. - RouteTables []*RouteTable `locationName:"routeTableSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeRouteTablesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeRouteTablesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeRouteTablesOutput) SetNextToken(v string) *DescribeRouteTablesOutput { - s.NextToken = &v - return s -} - -// SetRouteTables sets the RouteTables field's value. -func (s *DescribeRouteTablesOutput) SetRouteTables(v []*RouteTable) *DescribeRouteTablesOutput { - s.RouteTables = v - return s -} - -// Contains the parameters for DescribeScheduledInstanceAvailability. -type DescribeScheduledInstanceAvailabilityInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - // - // * availability-zone - The Availability Zone (for example, us-west-2a). - // - // * instance-type - The instance type (for example, c4.large). - // - // * network-platform - The network platform (EC2-Classic or EC2-VPC). - // - // * platform - The platform (Linux/UNIX or Windows). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The time period for the first schedule to start. - // - // FirstSlotStartTimeRange is a required field - FirstSlotStartTimeRange *SlotDateTimeRangeRequest `type:"structure" required:"true"` - - // The maximum number of results to return in a single call. This value can - // be between 5 and 300. The default value is 300. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The maximum available duration, in hours. This value must be greater than - // MinSlotDurationInHours and less than 1,720. - MaxSlotDurationInHours *int64 `type:"integer"` - - // The minimum available duration, in hours. The minimum required duration is - // 1,200 hours per year. For example, the minimum daily schedule is 4 hours, - // the minimum weekly schedule is 24 hours, and the minimum monthly schedule - // is 100 hours. - MinSlotDurationInHours *int64 `type:"integer"` - - // The token for the next set of results. - NextToken *string `type:"string"` - - // The schedule recurrence. - // - // Recurrence is a required field - Recurrence *ScheduledInstanceRecurrenceRequest `type:"structure" required:"true"` -} - -// String returns the string representation -func (s DescribeScheduledInstanceAvailabilityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeScheduledInstanceAvailabilityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeScheduledInstanceAvailabilityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeScheduledInstanceAvailabilityInput"} - if s.FirstSlotStartTimeRange == nil { - invalidParams.Add(request.NewErrParamRequired("FirstSlotStartTimeRange")) - } - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.Recurrence == nil { - invalidParams.Add(request.NewErrParamRequired("Recurrence")) - } - if s.FirstSlotStartTimeRange != nil { - if err := s.FirstSlotStartTimeRange.Validate(); err != nil { - invalidParams.AddNested("FirstSlotStartTimeRange", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetDryRun(v bool) *DescribeScheduledInstanceAvailabilityInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetFilters(v []*Filter) *DescribeScheduledInstanceAvailabilityInput { - s.Filters = v - return s -} - -// SetFirstSlotStartTimeRange sets the FirstSlotStartTimeRange field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetFirstSlotStartTimeRange(v *SlotDateTimeRangeRequest) *DescribeScheduledInstanceAvailabilityInput { - s.FirstSlotStartTimeRange = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetMaxResults(v int64) *DescribeScheduledInstanceAvailabilityInput { - s.MaxResults = &v - return s -} - -// SetMaxSlotDurationInHours sets the MaxSlotDurationInHours field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetMaxSlotDurationInHours(v int64) *DescribeScheduledInstanceAvailabilityInput { - s.MaxSlotDurationInHours = &v - return s -} - -// SetMinSlotDurationInHours sets the MinSlotDurationInHours field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetMinSlotDurationInHours(v int64) *DescribeScheduledInstanceAvailabilityInput { - s.MinSlotDurationInHours = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetNextToken(v string) *DescribeScheduledInstanceAvailabilityInput { - s.NextToken = &v - return s -} - -// SetRecurrence sets the Recurrence field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetRecurrence(v *ScheduledInstanceRecurrenceRequest) *DescribeScheduledInstanceAvailabilityInput { - s.Recurrence = v - return s -} - -// Contains the output of DescribeScheduledInstanceAvailability. -type DescribeScheduledInstanceAvailabilityOutput struct { - _ struct{} `type:"structure"` - - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the available Scheduled Instances. - ScheduledInstanceAvailabilitySet []*ScheduledInstanceAvailability `locationName:"scheduledInstanceAvailabilitySet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeScheduledInstanceAvailabilityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeScheduledInstanceAvailabilityOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstanceAvailabilityOutput) SetNextToken(v string) *DescribeScheduledInstanceAvailabilityOutput { - s.NextToken = &v - return s -} - -// SetScheduledInstanceAvailabilitySet sets the ScheduledInstanceAvailabilitySet field's value. -func (s *DescribeScheduledInstanceAvailabilityOutput) SetScheduledInstanceAvailabilitySet(v []*ScheduledInstanceAvailability) *DescribeScheduledInstanceAvailabilityOutput { - s.ScheduledInstanceAvailabilitySet = v - return s -} - -// Contains the parameters for DescribeScheduledInstances. -type DescribeScheduledInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. - // - // * availability-zone - The Availability Zone (for example, us-west-2a). - // - // * instance-type - The instance type (for example, c4.large). - // - // * network-platform - The network platform (EC2-Classic or EC2-VPC). - // - // * platform - The platform (Linux/UNIX or Windows). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. This value can - // be between 5 and 300. The default value is 100. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The token for the next set of results. - NextToken *string `type:"string"` - - // The Scheduled Instance IDs. - ScheduledInstanceIds []*string `locationName:"ScheduledInstanceId" locationNameList:"ScheduledInstanceId" type:"list"` - - // The time period for the first schedule to start. - SlotStartTimeRange *SlotStartTimeRangeRequest `type:"structure"` -} - -// String returns the string representation -func (s DescribeScheduledInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeScheduledInstancesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeScheduledInstancesInput) SetDryRun(v bool) *DescribeScheduledInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeScheduledInstancesInput) SetFilters(v []*Filter) *DescribeScheduledInstancesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeScheduledInstancesInput) SetMaxResults(v int64) *DescribeScheduledInstancesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstancesInput) SetNextToken(v string) *DescribeScheduledInstancesInput { - s.NextToken = &v - return s -} - -// SetScheduledInstanceIds sets the ScheduledInstanceIds field's value. -func (s *DescribeScheduledInstancesInput) SetScheduledInstanceIds(v []*string) *DescribeScheduledInstancesInput { - s.ScheduledInstanceIds = v - return s -} - -// SetSlotStartTimeRange sets the SlotStartTimeRange field's value. -func (s *DescribeScheduledInstancesInput) SetSlotStartTimeRange(v *SlotStartTimeRangeRequest) *DescribeScheduledInstancesInput { - s.SlotStartTimeRange = v - return s -} - -// Contains the output of DescribeScheduledInstances. -type DescribeScheduledInstancesOutput struct { - _ struct{} `type:"structure"` - - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the Scheduled Instances. - ScheduledInstanceSet []*ScheduledInstance `locationName:"scheduledInstanceSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeScheduledInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeScheduledInstancesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstancesOutput) SetNextToken(v string) *DescribeScheduledInstancesOutput { - s.NextToken = &v - return s -} - -// SetScheduledInstanceSet sets the ScheduledInstanceSet field's value. -func (s *DescribeScheduledInstancesOutput) SetScheduledInstanceSet(v []*ScheduledInstance) *DescribeScheduledInstancesOutput { - s.ScheduledInstanceSet = v - return s -} - -type DescribeSecurityGroupReferencesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the security groups in your account. - // - // GroupId is a required field - GroupId []*string `locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s DescribeSecurityGroupReferencesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSecurityGroupReferencesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSecurityGroupReferencesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSecurityGroupReferencesInput"} - if s.GroupId == nil { - invalidParams.Add(request.NewErrParamRequired("GroupId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSecurityGroupReferencesInput) SetDryRun(v bool) *DescribeSecurityGroupReferencesInput { - s.DryRun = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *DescribeSecurityGroupReferencesInput) SetGroupId(v []*string) *DescribeSecurityGroupReferencesInput { - s.GroupId = v - return s -} - -type DescribeSecurityGroupReferencesOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPCs with the referencing security groups. - SecurityGroupReferenceSet []*SecurityGroupReference `locationName:"securityGroupReferenceSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSecurityGroupReferencesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSecurityGroupReferencesOutput) GoString() string { - return s.String() -} - -// SetSecurityGroupReferenceSet sets the SecurityGroupReferenceSet field's value. -func (s *DescribeSecurityGroupReferencesOutput) SetSecurityGroupReferenceSet(v []*SecurityGroupReference) *DescribeSecurityGroupReferencesOutput { - s.SecurityGroupReferenceSet = v - return s -} - -type DescribeSecurityGroupsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. If using multiple filters for rules, the results include security - // groups for which any combination of rules - not necessarily a single rule - // - match all filters. - // - // * description - The description of the security group. - // - // * egress.ip-permission.cidr - An IPv4 CIDR block for an outbound security - // group rule. - // - // * egress.ip-permission.from-port - For an outbound rule, the start of - // port range for the TCP and UDP protocols, or an ICMP type number. - // - // * egress.ip-permission.group-id - The ID of a security group that has - // been referenced in an outbound security group rule. - // - // * egress.ip-permission.group-name - The name of a security group that - // has been referenced in an outbound security group rule. - // - // * egress.ip-permission.ipv6-cidr - An IPv6 CIDR block for an outbound - // security group rule. - // - // * egress.ip-permission.prefix-list-id - The ID (prefix) of the AWS service - // to which a security group rule allows outbound access. - // - // * egress.ip-permission.protocol - The IP protocol for an outbound security - // group rule (tcp | udp | icmp or a protocol number). - // - // * egress.ip-permission.to-port - For an outbound rule, the end of port - // range for the TCP and UDP protocols, or an ICMP code. - // - // * egress.ip-permission.user-id - The ID of an AWS account that has been - // referenced in an outbound security group rule. - // - // * group-id - The ID of the security group. - // - // * group-name - The name of the security group. - // - // * ip-permission.cidr - An IPv4 CIDR block for an inbound security group - // rule. - // - // * ip-permission.from-port - For an inbound rule, the start of port range - // for the TCP and UDP protocols, or an ICMP type number. - // - // * ip-permission.group-id - The ID of a security group that has been referenced - // in an inbound security group rule. - // - // * ip-permission.group-name - The name of a security group that has been - // referenced in an inbound security group rule. - // - // * ip-permission.ipv6-cidr - An IPv6 CIDR block for an inbound security - // group rule. - // - // * ip-permission.prefix-list-id - The ID (prefix) of the AWS service from - // which a security group rule allows inbound access. - // - // * ip-permission.protocol - The IP protocol for an inbound security group - // rule (tcp | udp | icmp or a protocol number). - // - // * ip-permission.to-port - For an inbound rule, the end of port range for - // the TCP and UDP protocols, or an ICMP code. - // - // * ip-permission.user-id - The ID of an AWS account that has been referenced - // in an inbound security group rule. - // - // * owner-id - The AWS account ID of the owner of the security group. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC specified when the security group was created. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The IDs of the security groups. Required for security groups in a nondefault - // VPC. - // - // Default: Describes all your security groups. - GroupIds []*string `locationName:"GroupId" locationNameList:"groupId" type:"list"` - - // [EC2-Classic and default VPC only] The names of the security groups. You - // can specify either the security group name or the security group ID. For - // security groups in a nondefault VPC, use the group-name filter to describe - // security groups by name. - // - // Default: Describes all your security groups. - GroupNames []*string `locationName:"GroupName" locationNameList:"GroupName" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another request with the returned NextToken value. - // This value can be between 5 and 1000. If this parameter is not specified, - // then all results are returned. - MaxResults *int64 `min:"5" type:"integer"` - - // The token to request the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeSecurityGroupsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSecurityGroupsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSecurityGroupsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSecurityGroupsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSecurityGroupsInput) SetDryRun(v bool) *DescribeSecurityGroupsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeSecurityGroupsInput) SetFilters(v []*Filter) *DescribeSecurityGroupsInput { - s.Filters = v - return s -} - -// SetGroupIds sets the GroupIds field's value. -func (s *DescribeSecurityGroupsInput) SetGroupIds(v []*string) *DescribeSecurityGroupsInput { - s.GroupIds = v - return s -} - -// SetGroupNames sets the GroupNames field's value. -func (s *DescribeSecurityGroupsInput) SetGroupNames(v []*string) *DescribeSecurityGroupsInput { - s.GroupNames = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSecurityGroupsInput) SetMaxResults(v int64) *DescribeSecurityGroupsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSecurityGroupsInput) SetNextToken(v string) *DescribeSecurityGroupsInput { - s.NextToken = &v - return s -} - -type DescribeSecurityGroupsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the security groups. - SecurityGroups []*SecurityGroup `locationName:"securityGroupInfo" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSecurityGroupsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSecurityGroupsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSecurityGroupsOutput) SetNextToken(v string) *DescribeSecurityGroupsOutput { - s.NextToken = &v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *DescribeSecurityGroupsOutput) SetSecurityGroups(v []*SecurityGroup) *DescribeSecurityGroupsOutput { - s.SecurityGroups = v - return s -} - -type DescribeSnapshotAttributeInput struct { - _ struct{} `type:"structure"` - - // The snapshot attribute you would like to view. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"SnapshotAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the EBS snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeSnapshotAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSnapshotAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSnapshotAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSnapshotAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeSnapshotAttributeInput) SetAttribute(v string) *DescribeSnapshotAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSnapshotAttributeInput) SetDryRun(v bool) *DescribeSnapshotAttributeInput { - s.DryRun = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *DescribeSnapshotAttributeInput) SetSnapshotId(v string) *DescribeSnapshotAttributeInput { - s.SnapshotId = &v - return s -} - -type DescribeSnapshotAttributeOutput struct { - _ struct{} `type:"structure"` - - // The users and groups that have the permissions for creating volumes from - // the snapshot. - CreateVolumePermissions []*CreateVolumePermission `locationName:"createVolumePermission" locationNameList:"item" type:"list"` - - // The product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // The ID of the EBS snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` -} - -// String returns the string representation -func (s DescribeSnapshotAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSnapshotAttributeOutput) GoString() string { - return s.String() -} - -// SetCreateVolumePermissions sets the CreateVolumePermissions field's value. -func (s *DescribeSnapshotAttributeOutput) SetCreateVolumePermissions(v []*CreateVolumePermission) *DescribeSnapshotAttributeOutput { - s.CreateVolumePermissions = v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeSnapshotAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeSnapshotAttributeOutput { - s.ProductCodes = v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *DescribeSnapshotAttributeOutput) SetSnapshotId(v string) *DescribeSnapshotAttributeOutput { - s.SnapshotId = &v - return s -} - -type DescribeSnapshotsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * description - A description of the snapshot. - // - // * encrypted - Indicates whether the snapshot is encrypted (true | false) - // - // * owner-alias - Value from an Amazon-maintained list (amazon | self | - // all | aws-marketplace | microsoft) of snapshot owners. Not to be confused - // with the user-configured AWS account alias, which is set from the IAM - // console. - // - // * owner-id - The ID of the AWS account that owns the snapshot. - // - // * progress - The progress of the snapshot, as a percentage (for example, - // 80%). - // - // * snapshot-id - The snapshot ID. - // - // * start-time - The time stamp when the snapshot was initiated. - // - // * status - The status of the snapshot (pending | completed | error). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * volume-id - The ID of the volume the snapshot is for. - // - // * volume-size - The size of the volume, in GiB. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of snapshot results returned by DescribeSnapshots in paginated - // output. When this parameter is used, DescribeSnapshots only returns MaxResults - // results in a single page along with a NextToken response element. The remaining - // results of the initial request can be seen by sending another DescribeSnapshots - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value larger than 1000, only 1000 results - // are returned. If this parameter is not used, then DescribeSnapshots returns - // all results. You cannot specify this parameter and the snapshot IDs parameter - // in the same request. - MaxResults *int64 `type:"integer"` - - // The NextToken value returned from a previous paginated DescribeSnapshots - // request where MaxResults was used and the results exceeded the value of that - // parameter. Pagination continues from the end of the previous results that - // returned the NextToken value. This value is null when there are no more results - // to return. - NextToken *string `type:"string"` - - // Describes the snapshots owned by these owners. - OwnerIds []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` - - // The IDs of the AWS accounts that can create volumes from the snapshot. - RestorableByUserIds []*string `locationName:"RestorableBy" type:"list"` - - // The snapshot IDs. - // - // Default: Describes the snapshots for which you have create volume permissions. - SnapshotIds []*string `locationName:"SnapshotId" locationNameList:"SnapshotId" type:"list"` -} - -// String returns the string representation -func (s DescribeSnapshotsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSnapshotsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSnapshotsInput) SetDryRun(v bool) *DescribeSnapshotsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeSnapshotsInput) SetFilters(v []*Filter) *DescribeSnapshotsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSnapshotsInput) SetMaxResults(v int64) *DescribeSnapshotsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSnapshotsInput) SetNextToken(v string) *DescribeSnapshotsInput { - s.NextToken = &v - return s -} - -// SetOwnerIds sets the OwnerIds field's value. -func (s *DescribeSnapshotsInput) SetOwnerIds(v []*string) *DescribeSnapshotsInput { - s.OwnerIds = v - return s -} - -// SetRestorableByUserIds sets the RestorableByUserIds field's value. -func (s *DescribeSnapshotsInput) SetRestorableByUserIds(v []*string) *DescribeSnapshotsInput { - s.RestorableByUserIds = v - return s -} - -// SetSnapshotIds sets the SnapshotIds field's value. -func (s *DescribeSnapshotsInput) SetSnapshotIds(v []*string) *DescribeSnapshotsInput { - s.SnapshotIds = v - return s -} - -type DescribeSnapshotsOutput struct { - _ struct{} `type:"structure"` - - // The NextToken value to include in a future DescribeSnapshots request. When - // the results of a DescribeSnapshots request exceed MaxResults, this value - // can be used to retrieve the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the snapshots. - Snapshots []*Snapshot `locationName:"snapshotSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSnapshotsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSnapshotsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSnapshotsOutput) SetNextToken(v string) *DescribeSnapshotsOutput { - s.NextToken = &v - return s -} - -// SetSnapshots sets the Snapshots field's value. -func (s *DescribeSnapshotsOutput) SetSnapshots(v []*Snapshot) *DescribeSnapshotsOutput { - s.Snapshots = v - return s -} - -// Contains the parameters for DescribeSpotDatafeedSubscription. -type DescribeSpotDatafeedSubscriptionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DescribeSpotDatafeedSubscriptionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotDatafeedSubscriptionInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotDatafeedSubscriptionInput) SetDryRun(v bool) *DescribeSpotDatafeedSubscriptionInput { - s.DryRun = &v - return s -} - -// Contains the output of DescribeSpotDatafeedSubscription. -type DescribeSpotDatafeedSubscriptionOutput struct { - _ struct{} `type:"structure"` - - // The Spot Instance data feed subscription. - SpotDatafeedSubscription *SpotDatafeedSubscription `locationName:"spotDatafeedSubscription" type:"structure"` -} - -// String returns the string representation -func (s DescribeSpotDatafeedSubscriptionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotDatafeedSubscriptionOutput) GoString() string { - return s.String() -} - -// SetSpotDatafeedSubscription sets the SpotDatafeedSubscription field's value. -func (s *DescribeSpotDatafeedSubscriptionOutput) SetSpotDatafeedSubscription(v *SpotDatafeedSubscription) *DescribeSpotDatafeedSubscriptionOutput { - s.SpotDatafeedSubscription = v - return s -} - -// Contains the parameters for DescribeSpotFleetInstances. -type DescribeSpotFleetInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // The ID of the Spot Fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeSpotFleetInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotFleetInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSpotFleetInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSpotFleetInstancesInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - if s.SpotFleetRequestId == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotFleetInstancesInput) SetDryRun(v bool) *DescribeSpotFleetInstancesInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotFleetInstancesInput) SetMaxResults(v int64) *DescribeSpotFleetInstancesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetInstancesInput) SetNextToken(v string) *DescribeSpotFleetInstancesInput { - s.NextToken = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetInstancesInput) SetSpotFleetRequestId(v string) *DescribeSpotFleetInstancesInput { - s.SpotFleetRequestId = &v - return s -} - -// Contains the output of DescribeSpotFleetInstances. -type DescribeSpotFleetInstancesOutput struct { - _ struct{} `type:"structure"` - - // The running instances. This list is refreshed periodically and might be out - // of date. - ActiveInstances []*ActiveInstance `locationName:"activeInstanceSet" locationNameList:"item" type:"list"` - - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The ID of the Spot Fleet request. - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` -} - -// String returns the string representation -func (s DescribeSpotFleetInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotFleetInstancesOutput) GoString() string { - return s.String() -} - -// SetActiveInstances sets the ActiveInstances field's value. -func (s *DescribeSpotFleetInstancesOutput) SetActiveInstances(v []*ActiveInstance) *DescribeSpotFleetInstancesOutput { - s.ActiveInstances = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetInstancesOutput) SetNextToken(v string) *DescribeSpotFleetInstancesOutput { - s.NextToken = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetInstancesOutput) SetSpotFleetRequestId(v string) *DescribeSpotFleetInstancesOutput { - s.SpotFleetRequestId = &v - return s -} - -// Contains the parameters for DescribeSpotFleetRequestHistory. -type DescribeSpotFleetRequestHistoryInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The type of events to describe. By default, all events are described. - EventType *string `locationName:"eventType" type:"string" enum:"EventType"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // The ID of the Spot Fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` - - // The starting date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // - // StartTime is a required field - StartTime *time.Time `locationName:"startTime" type:"timestamp" required:"true"` -} - -// String returns the string representation -func (s DescribeSpotFleetRequestHistoryInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotFleetRequestHistoryInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSpotFleetRequestHistoryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSpotFleetRequestHistoryInput"} - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - if s.SpotFleetRequestId == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) - } - if s.StartTime == nil { - invalidParams.Add(request.NewErrParamRequired("StartTime")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetDryRun(v bool) *DescribeSpotFleetRequestHistoryInput { - s.DryRun = &v - return s -} - -// SetEventType sets the EventType field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetEventType(v string) *DescribeSpotFleetRequestHistoryInput { - s.EventType = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetMaxResults(v int64) *DescribeSpotFleetRequestHistoryInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetNextToken(v string) *DescribeSpotFleetRequestHistoryInput { - s.NextToken = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetSpotFleetRequestId(v string) *DescribeSpotFleetRequestHistoryInput { - s.SpotFleetRequestId = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetStartTime(v time.Time) *DescribeSpotFleetRequestHistoryInput { - s.StartTime = &v - return s -} - -// Contains the output of DescribeSpotFleetRequestHistory. -type DescribeSpotFleetRequestHistoryOutput struct { - _ struct{} `type:"structure"` - - // Information about the events in the history of the Spot Fleet request. - HistoryRecords []*HistoryRecord `locationName:"historyRecordSet" locationNameList:"item" type:"list"` - - // The last date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // All records up to this time were retrieved. - // - // If nextToken indicates that there are more results, this value is not present. - LastEvaluatedTime *time.Time `locationName:"lastEvaluatedTime" type:"timestamp"` - - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The ID of the Spot Fleet request. - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` - - // The starting date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - StartTime *time.Time `locationName:"startTime" type:"timestamp"` -} - -// String returns the string representation -func (s DescribeSpotFleetRequestHistoryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotFleetRequestHistoryOutput) GoString() string { - return s.String() -} - -// SetHistoryRecords sets the HistoryRecords field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetHistoryRecords(v []*HistoryRecord) *DescribeSpotFleetRequestHistoryOutput { - s.HistoryRecords = v - return s -} - -// SetLastEvaluatedTime sets the LastEvaluatedTime field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetLastEvaluatedTime(v time.Time) *DescribeSpotFleetRequestHistoryOutput { - s.LastEvaluatedTime = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetNextToken(v string) *DescribeSpotFleetRequestHistoryOutput { - s.NextToken = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetSpotFleetRequestId(v string) *DescribeSpotFleetRequestHistoryOutput { - s.SpotFleetRequestId = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetStartTime(v time.Time) *DescribeSpotFleetRequestHistoryOutput { - s.StartTime = &v - return s -} - -// Contains the parameters for DescribeSpotFleetRequests. -type DescribeSpotFleetRequestsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // The IDs of the Spot Fleet requests. - SpotFleetRequestIds []*string `locationName:"spotFleetRequestId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSpotFleetRequestsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotFleetRequestsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotFleetRequestsInput) SetDryRun(v bool) *DescribeSpotFleetRequestsInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotFleetRequestsInput) SetMaxResults(v int64) *DescribeSpotFleetRequestsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestsInput) SetNextToken(v string) *DescribeSpotFleetRequestsInput { - s.NextToken = &v - return s -} - -// SetSpotFleetRequestIds sets the SpotFleetRequestIds field's value. -func (s *DescribeSpotFleetRequestsInput) SetSpotFleetRequestIds(v []*string) *DescribeSpotFleetRequestsInput { - s.SpotFleetRequestIds = v - return s -} - -// Contains the output of DescribeSpotFleetRequests. -type DescribeSpotFleetRequestsOutput struct { - _ struct{} `type:"structure"` - - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the configuration of your Spot Fleet. - SpotFleetRequestConfigs []*SpotFleetRequestConfig `locationName:"spotFleetRequestConfigSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSpotFleetRequestsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotFleetRequestsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestsOutput) SetNextToken(v string) *DescribeSpotFleetRequestsOutput { - s.NextToken = &v - return s -} - -// SetSpotFleetRequestConfigs sets the SpotFleetRequestConfigs field's value. -func (s *DescribeSpotFleetRequestsOutput) SetSpotFleetRequestConfigs(v []*SpotFleetRequestConfig) *DescribeSpotFleetRequestsOutput { - s.SpotFleetRequestConfigs = v - return s -} - -// Contains the parameters for DescribeSpotInstanceRequests. -type DescribeSpotInstanceRequestsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone-group - The Availability Zone group. - // - // * create-time - The time stamp when the Spot Instance request was created. - // - // * fault-code - The fault code related to the request. - // - // * fault-message - The fault message related to the request. - // - // * instance-id - The ID of the instance that fulfilled the request. - // - // * launch-group - The Spot Instance launch group. - // - // * launch.block-device-mapping.delete-on-termination - Indicates whether - // the EBS volume is deleted on instance termination. - // - // * launch.block-device-mapping.device-name - The device name for the volume - // in the block device mapping (for example, /dev/sdh or xvdh). - // - // * launch.block-device-mapping.snapshot-id - The ID of the snapshot for - // the EBS volume. - // - // * launch.block-device-mapping.volume-size - The size of the EBS volume, - // in GiB. - // - // * launch.block-device-mapping.volume-type - The type of EBS volume: gp2 - // for General Purpose SSD, io1 for Provisioned IOPS SSD, st1 for Throughput - // Optimized HDD, sc1for Cold HDD, or standard for Magnetic. - // - // * launch.group-id - The ID of the security group for the instance. - // - // * launch.group-name - The name of the security group for the instance. - // - // * launch.image-id - The ID of the AMI. - // - // * launch.instance-type - The type of instance (for example, m3.medium). - // - // * launch.kernel-id - The kernel ID. - // - // * launch.key-name - The name of the key pair the instance launched with. - // - // * launch.monitoring-enabled - Whether detailed monitoring is enabled for - // the Spot Instance. - // - // * launch.ramdisk-id - The RAM disk ID. - // - // * launched-availability-zone - The Availability Zone in which the request - // is launched. - // - // * network-interface.addresses.primary - Indicates whether the IP address - // is the primary private IP address. - // - // * network-interface.delete-on-termination - Indicates whether the network - // interface is deleted when the instance is terminated. - // - // * network-interface.description - A description of the network interface. - // - // * network-interface.device-index - The index of the device for the network - // interface attachment on the instance. - // - // * network-interface.group-id - The ID of the security group associated - // with the network interface. - // - // * network-interface.network-interface-id - The ID of the network interface. - // - // * network-interface.private-ip-address - The primary private IP address - // of the network interface. - // - // * network-interface.subnet-id - The ID of the subnet for the instance. - // - // * product-description - The product description associated with the instance - // (Linux/UNIX | Windows). - // - // * spot-instance-request-id - The Spot Instance request ID. - // - // * spot-price - The maximum hourly price for any Spot Instance launched - // to fulfill the request. - // - // * state - The state of the Spot Instance request (open | active | closed - // | cancelled | failed). Spot request status information can help you track - // your Amazon EC2 Spot Instance requests. For more information, see Spot - // Request Status (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html) - // in the Amazon EC2 User Guide for Linux Instances. - // - // * status-code - The short code describing the most recent evaluation of - // your Spot Instance request. - // - // * status-message - The message explaining the status of the Spot Instance - // request. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * type - The type of Spot Instance request (one-time | persistent). - // - // * valid-from - The start date of the request. - // - // * valid-until - The end date of the request. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. Specify a value - // between 5 and 1000. To retrieve the remaining results, make another call - // with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The token to request the next set of results. This value is null when there - // are no more results to return. - NextToken *string `type:"string"` - - // One or more Spot Instance request IDs. - SpotInstanceRequestIds []*string `locationName:"SpotInstanceRequestId" locationNameList:"SpotInstanceRequestId" type:"list"` -} - -// String returns the string representation -func (s DescribeSpotInstanceRequestsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotInstanceRequestsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotInstanceRequestsInput) SetDryRun(v bool) *DescribeSpotInstanceRequestsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeSpotInstanceRequestsInput) SetFilters(v []*Filter) *DescribeSpotInstanceRequestsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotInstanceRequestsInput) SetMaxResults(v int64) *DescribeSpotInstanceRequestsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotInstanceRequestsInput) SetNextToken(v string) *DescribeSpotInstanceRequestsInput { - s.NextToken = &v - return s -} - -// SetSpotInstanceRequestIds sets the SpotInstanceRequestIds field's value. -func (s *DescribeSpotInstanceRequestsInput) SetSpotInstanceRequestIds(v []*string) *DescribeSpotInstanceRequestsInput { - s.SpotInstanceRequestIds = v - return s -} - -// Contains the output of DescribeSpotInstanceRequests. -type DescribeSpotInstanceRequestsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // One or more Spot Instance requests. - SpotInstanceRequests []*SpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSpotInstanceRequestsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotInstanceRequestsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotInstanceRequestsOutput) SetNextToken(v string) *DescribeSpotInstanceRequestsOutput { - s.NextToken = &v - return s -} - -// SetSpotInstanceRequests sets the SpotInstanceRequests field's value. -func (s *DescribeSpotInstanceRequestsOutput) SetSpotInstanceRequests(v []*SpotInstanceRequest) *DescribeSpotInstanceRequestsOutput { - s.SpotInstanceRequests = v - return s -} - -// Contains the parameters for DescribeSpotPriceHistory. -type DescribeSpotPriceHistoryInput struct { - _ struct{} `type:"structure"` - - // Filters the results by the specified Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The date and time, up to the current date, from which to stop retrieving - // the price history data, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - EndTime *time.Time `locationName:"endTime" type:"timestamp"` - - // One or more filters. - // - // * availability-zone - The Availability Zone for which prices should be - // returned. - // - // * instance-type - The type of instance (for example, m3.medium). - // - // * product-description - The product description for the Spot price (Linux/UNIX - // | SUSE Linux | Windows | Linux/UNIX (Amazon VPC) | SUSE Linux (Amazon - // VPC) | Windows (Amazon VPC)). - // - // * spot-price - The Spot price. The value must match exactly (or use wildcards; - // greater than or less than comparison is not supported). - // - // * timestamp - The time stamp of the Spot price history, in UTC format - // (for example, YYYY-MM-DDTHH:MM:SSZ). You can use wildcards (* and ?). - // Greater than or less than comparison is not supported. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // Filters the results by the specified instance types. - InstanceTypes []*string `locationName:"InstanceType" type:"list"` - - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // Filters the results by the specified basic product descriptions. - ProductDescriptions []*string `locationName:"ProductDescription" type:"list"` - - // The date and time, up to the past 90 days, from which to start retrieving - // the price history data, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - StartTime *time.Time `locationName:"startTime" type:"timestamp"` -} - -// String returns the string representation -func (s DescribeSpotPriceHistoryInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotPriceHistoryInput) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DescribeSpotPriceHistoryInput) SetAvailabilityZone(v string) *DescribeSpotPriceHistoryInput { - s.AvailabilityZone = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotPriceHistoryInput) SetDryRun(v bool) *DescribeSpotPriceHistoryInput { - s.DryRun = &v - return s -} - -// SetEndTime sets the EndTime field's value. -func (s *DescribeSpotPriceHistoryInput) SetEndTime(v time.Time) *DescribeSpotPriceHistoryInput { - s.EndTime = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeSpotPriceHistoryInput) SetFilters(v []*Filter) *DescribeSpotPriceHistoryInput { - s.Filters = v - return s -} - -// SetInstanceTypes sets the InstanceTypes field's value. -func (s *DescribeSpotPriceHistoryInput) SetInstanceTypes(v []*string) *DescribeSpotPriceHistoryInput { - s.InstanceTypes = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotPriceHistoryInput) SetMaxResults(v int64) *DescribeSpotPriceHistoryInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotPriceHistoryInput) SetNextToken(v string) *DescribeSpotPriceHistoryInput { - s.NextToken = &v - return s -} - -// SetProductDescriptions sets the ProductDescriptions field's value. -func (s *DescribeSpotPriceHistoryInput) SetProductDescriptions(v []*string) *DescribeSpotPriceHistoryInput { - s.ProductDescriptions = v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *DescribeSpotPriceHistoryInput) SetStartTime(v time.Time) *DescribeSpotPriceHistoryInput { - s.StartTime = &v - return s -} - -// Contains the output of DescribeSpotPriceHistory. -type DescribeSpotPriceHistoryOutput struct { - _ struct{} `type:"structure"` - - // The token required to retrieve the next set of results. This value is null - // or an empty string when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The historical Spot prices. - SpotPriceHistory []*SpotPrice `locationName:"spotPriceHistorySet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSpotPriceHistoryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotPriceHistoryOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotPriceHistoryOutput) SetNextToken(v string) *DescribeSpotPriceHistoryOutput { - s.NextToken = &v - return s -} - -// SetSpotPriceHistory sets the SpotPriceHistory field's value. -func (s *DescribeSpotPriceHistoryOutput) SetSpotPriceHistory(v []*SpotPrice) *DescribeSpotPriceHistoryOutput { - s.SpotPriceHistory = v - return s -} - -type DescribeStaleSecurityGroupsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `min:"1" type:"string"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeStaleSecurityGroupsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeStaleSecurityGroupsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeStaleSecurityGroupsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeStaleSecurityGroupsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeStaleSecurityGroupsInput) SetDryRun(v bool) *DescribeStaleSecurityGroupsInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeStaleSecurityGroupsInput) SetMaxResults(v int64) *DescribeStaleSecurityGroupsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeStaleSecurityGroupsInput) SetNextToken(v string) *DescribeStaleSecurityGroupsInput { - s.NextToken = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DescribeStaleSecurityGroupsInput) SetVpcId(v string) *DescribeStaleSecurityGroupsInput { - s.VpcId = &v - return s -} - -type DescribeStaleSecurityGroupsOutput struct { - _ struct{} `type:"structure"` - - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the stale security groups. - StaleSecurityGroupSet []*StaleSecurityGroup `locationName:"staleSecurityGroupSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeStaleSecurityGroupsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeStaleSecurityGroupsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeStaleSecurityGroupsOutput) SetNextToken(v string) *DescribeStaleSecurityGroupsOutput { - s.NextToken = &v - return s -} - -// SetStaleSecurityGroupSet sets the StaleSecurityGroupSet field's value. -func (s *DescribeStaleSecurityGroupsOutput) SetStaleSecurityGroupSet(v []*StaleSecurityGroup) *DescribeStaleSecurityGroupsOutput { - s.StaleSecurityGroupSet = v - return s -} - -type DescribeSubnetsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone - The Availability Zone for the subnet. You can also - // use availabilityZone as the filter name. - // - // * availability-zone-id - The ID of the Availability Zone for the subnet. - // You can also use availabilityZoneId as the filter name. - // - // * available-ip-address-count - The number of IPv4 addresses in the subnet - // that are available. - // - // * cidr-block - The IPv4 CIDR block of the subnet. The CIDR block you specify - // must exactly match the subnet's CIDR block for information to be returned - // for the subnet. You can also use cidr or cidrBlock as the filter names. - // - // * default-for-az - Indicates whether this is the default subnet for the - // Availability Zone. You can also use defaultForAz as the filter name. - // - // * ipv6-cidr-block-association.ipv6-cidr-block - An IPv6 CIDR block associated - // with the subnet. - // - // * ipv6-cidr-block-association.association-id - An association ID for an - // IPv6 CIDR block associated with the subnet. - // - // * ipv6-cidr-block-association.state - The state of an IPv6 CIDR block - // associated with the subnet. - // - // * owner-id - The ID of the AWS account that owns the subnet. - // - // * state - The state of the subnet (pending | available). - // - // * subnet-arn - The Amazon Resource Name (ARN) of the subnet. - // - // * subnet-id - The ID of the subnet. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC for the subnet. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // One or more subnet IDs. - // - // Default: Describes all your subnets. - SubnetIds []*string `locationName:"SubnetId" locationNameList:"SubnetId" type:"list"` -} - -// String returns the string representation -func (s DescribeSubnetsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSubnetsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSubnetsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSubnetsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSubnetsInput) SetDryRun(v bool) *DescribeSubnetsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeSubnetsInput) SetFilters(v []*Filter) *DescribeSubnetsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSubnetsInput) SetMaxResults(v int64) *DescribeSubnetsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSubnetsInput) SetNextToken(v string) *DescribeSubnetsInput { - s.NextToken = &v - return s -} - -// SetSubnetIds sets the SubnetIds field's value. -func (s *DescribeSubnetsInput) SetSubnetIds(v []*string) *DescribeSubnetsInput { - s.SubnetIds = v - return s -} - -type DescribeSubnetsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more subnets. - Subnets []*Subnet `locationName:"subnetSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeSubnetsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSubnetsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeSubnetsOutput) SetNextToken(v string) *DescribeSubnetsOutput { - s.NextToken = &v - return s -} - -// SetSubnets sets the Subnets field's value. -func (s *DescribeSubnetsOutput) SetSubnets(v []*Subnet) *DescribeSubnetsOutput { - s.Subnets = v - return s -} - -type DescribeTagsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * key - The tag key. - // - // * resource-id - The ID of the resource. - // - // * resource-type - The resource type (customer-gateway | dedicated-host - // | dhcp-options | elastic-ip | fleet | fpga-image | image | instance | - // host-reservation | internet-gateway | launch-template | natgateway | network-acl - // | network-interface | reserved-instances | route-table | security-group - // | snapshot | spot-instances-request | subnet | volume | vpc | vpc-peering-connection - // | vpn-connection | vpn-gateway). - // - // * tag: - The key/value combination of the tag. For example, specify - // "tag:Owner" for the filter name and "TeamA" for the filter value to find - // resources with the tag "Owner=TeamA". - // - // * value - The tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. This value can - // be between 5 and 1000. To retrieve the remaining results, make another call - // with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeTagsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTagsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTagsInput) SetDryRun(v bool) *DescribeTagsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTagsInput) SetFilters(v []*Filter) *DescribeTagsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTagsInput) SetMaxResults(v int64) *DescribeTagsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTagsInput) SetNextToken(v string) *DescribeTagsInput { - s.NextToken = &v - return s -} - -type DescribeTagsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The tags. - Tags []*TagDescription `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTagsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTagsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTagsOutput) SetNextToken(v string) *DescribeTagsOutput { - s.NextToken = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *DescribeTagsOutput) SetTags(v []*TagDescription) *DescribeTagsOutput { - s.Tags = v - return s -} - -type DescribeTrafficMirrorFiltersInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * description: The Traffic Mirror filter description. - // - // * traffic-mirror-filter-id: The ID of the Traffic Mirror filter. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The ID of the Traffic Mirror filter. - TrafficMirrorFilterIds []*string `locationName:"TrafficMirrorFilterId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTrafficMirrorFiltersInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTrafficMirrorFiltersInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTrafficMirrorFiltersInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTrafficMirrorFiltersInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTrafficMirrorFiltersInput) SetDryRun(v bool) *DescribeTrafficMirrorFiltersInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTrafficMirrorFiltersInput) SetFilters(v []*Filter) *DescribeTrafficMirrorFiltersInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTrafficMirrorFiltersInput) SetMaxResults(v int64) *DescribeTrafficMirrorFiltersInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTrafficMirrorFiltersInput) SetNextToken(v string) *DescribeTrafficMirrorFiltersInput { - s.NextToken = &v - return s -} - -// SetTrafficMirrorFilterIds sets the TrafficMirrorFilterIds field's value. -func (s *DescribeTrafficMirrorFiltersInput) SetTrafficMirrorFilterIds(v []*string) *DescribeTrafficMirrorFiltersInput { - s.TrafficMirrorFilterIds = v - return s -} - -type DescribeTrafficMirrorFiltersOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. The value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more Traffic Mirror filters. - TrafficMirrorFilters []*TrafficMirrorFilter `locationName:"trafficMirrorFilterSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTrafficMirrorFiltersOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTrafficMirrorFiltersOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTrafficMirrorFiltersOutput) SetNextToken(v string) *DescribeTrafficMirrorFiltersOutput { - s.NextToken = &v - return s -} - -// SetTrafficMirrorFilters sets the TrafficMirrorFilters field's value. -func (s *DescribeTrafficMirrorFiltersOutput) SetTrafficMirrorFilters(v []*TrafficMirrorFilter) *DescribeTrafficMirrorFiltersOutput { - s.TrafficMirrorFilters = v - return s -} - -type DescribeTrafficMirrorSessionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * description: The Traffic Mirror session description. - // - // * network-interface-id: The ID of the Traffic Mirror session network interface. - // - // * owner-id: The ID of the account that owns the Traffic Mirror session. - // - // * packet-length: The assigned number of packets to mirror. - // - // * session-number: The assigned session number. - // - // * traffic-mirror-filter-id: The ID of the Traffic Mirror filter. - // - // * traffic-mirror-session-id: The ID of the Traffic Mirror session. - // - // * traffic-mirror-target-id: The ID of the Traffic Mirror target. - // - // * virtual-network-id: The virtual network ID of the Traffic Mirror session. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The ID of the Traffic Mirror session. - TrafficMirrorSessionIds []*string `locationName:"TrafficMirrorSessionId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTrafficMirrorSessionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTrafficMirrorSessionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTrafficMirrorSessionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTrafficMirrorSessionsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTrafficMirrorSessionsInput) SetDryRun(v bool) *DescribeTrafficMirrorSessionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTrafficMirrorSessionsInput) SetFilters(v []*Filter) *DescribeTrafficMirrorSessionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTrafficMirrorSessionsInput) SetMaxResults(v int64) *DescribeTrafficMirrorSessionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTrafficMirrorSessionsInput) SetNextToken(v string) *DescribeTrafficMirrorSessionsInput { - s.NextToken = &v - return s -} - -// SetTrafficMirrorSessionIds sets the TrafficMirrorSessionIds field's value. -func (s *DescribeTrafficMirrorSessionsInput) SetTrafficMirrorSessionIds(v []*string) *DescribeTrafficMirrorSessionsInput { - s.TrafficMirrorSessionIds = v - return s -} - -type DescribeTrafficMirrorSessionsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. The value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Describes one or more Traffic Mirror sessions. By default, all Traffic Mirror - // sessions are described. Alternatively, you can filter the results. - TrafficMirrorSessions []*TrafficMirrorSession `locationName:"trafficMirrorSessionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTrafficMirrorSessionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTrafficMirrorSessionsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTrafficMirrorSessionsOutput) SetNextToken(v string) *DescribeTrafficMirrorSessionsOutput { - s.NextToken = &v - return s -} - -// SetTrafficMirrorSessions sets the TrafficMirrorSessions field's value. -func (s *DescribeTrafficMirrorSessionsOutput) SetTrafficMirrorSessions(v []*TrafficMirrorSession) *DescribeTrafficMirrorSessionsOutput { - s.TrafficMirrorSessions = v - return s -} - -type DescribeTrafficMirrorTargetsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * description: The Traffic Mirror target description. - // - // * network-interface-id: The ID of the Traffic Mirror session network interface. - // - // * network-load-balancer-arn: The Amazon Resource Name (ARN) of the Network - // Load Balancer that is associated with the session. - // - // * owner-id: The ID of the account that owns the Traffic Mirror session. - // - // * traffic-mirror-target-id: The ID of the Traffic Mirror target. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The ID of the Traffic Mirror targets. - TrafficMirrorTargetIds []*string `locationName:"TrafficMirrorTargetId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTrafficMirrorTargetsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTrafficMirrorTargetsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTrafficMirrorTargetsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTrafficMirrorTargetsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTrafficMirrorTargetsInput) SetDryRun(v bool) *DescribeTrafficMirrorTargetsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTrafficMirrorTargetsInput) SetFilters(v []*Filter) *DescribeTrafficMirrorTargetsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTrafficMirrorTargetsInput) SetMaxResults(v int64) *DescribeTrafficMirrorTargetsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTrafficMirrorTargetsInput) SetNextToken(v string) *DescribeTrafficMirrorTargetsInput { - s.NextToken = &v - return s -} - -// SetTrafficMirrorTargetIds sets the TrafficMirrorTargetIds field's value. -func (s *DescribeTrafficMirrorTargetsInput) SetTrafficMirrorTargetIds(v []*string) *DescribeTrafficMirrorTargetsInput { - s.TrafficMirrorTargetIds = v - return s -} - -type DescribeTrafficMirrorTargetsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. The value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more Traffic Mirror targets. - TrafficMirrorTargets []*TrafficMirrorTarget `locationName:"trafficMirrorTargetSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTrafficMirrorTargetsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTrafficMirrorTargetsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTrafficMirrorTargetsOutput) SetNextToken(v string) *DescribeTrafficMirrorTargetsOutput { - s.NextToken = &v - return s -} - -// SetTrafficMirrorTargets sets the TrafficMirrorTargets field's value. -func (s *DescribeTrafficMirrorTargetsOutput) SetTrafficMirrorTargets(v []*TrafficMirrorTarget) *DescribeTrafficMirrorTargetsOutput { - s.TrafficMirrorTargets = v - return s -} - -type DescribeTransitGatewayAttachmentsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * association.state - The state of the association (associating | associated - // | disassociating). - // - // * association.transit-gateway-route-table-id - The ID of the route table - // for the transit gateway. - // - // * resource-id - The ID of the resource. - // - // * resource-owner-id - The ID of the AWS account that owns the resource. - // - // * resource-type - The resource type (vpc | vpn). - // - // * state - The state of the attachment (available | deleted | deleting - // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected - // | rejecting). - // - // * transit-gateway-attachment-id - The ID of the attachment. - // - // * transit-gateway-id - The ID of the transit gateway. - // - // * transit-gateway-owner-id - The ID of the AWS account that owns the transit - // gateway. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The IDs of the attachments. - TransitGatewayAttachmentIds []*string `type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewayAttachmentsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewayAttachmentsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTransitGatewayAttachmentsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewayAttachmentsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTransitGatewayAttachmentsInput) SetDryRun(v bool) *DescribeTransitGatewayAttachmentsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTransitGatewayAttachmentsInput) SetFilters(v []*Filter) *DescribeTransitGatewayAttachmentsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTransitGatewayAttachmentsInput) SetMaxResults(v int64) *DescribeTransitGatewayAttachmentsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewayAttachmentsInput) SetNextToken(v string) *DescribeTransitGatewayAttachmentsInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayAttachmentIds sets the TransitGatewayAttachmentIds field's value. -func (s *DescribeTransitGatewayAttachmentsInput) SetTransitGatewayAttachmentIds(v []*string) *DescribeTransitGatewayAttachmentsInput { - s.TransitGatewayAttachmentIds = v - return s -} - -type DescribeTransitGatewayAttachmentsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the attachments. - TransitGatewayAttachments []*TransitGatewayAttachment `locationName:"transitGatewayAttachments" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewayAttachmentsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewayAttachmentsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewayAttachmentsOutput) SetNextToken(v string) *DescribeTransitGatewayAttachmentsOutput { - s.NextToken = &v - return s -} - -// SetTransitGatewayAttachments sets the TransitGatewayAttachments field's value. -func (s *DescribeTransitGatewayAttachmentsOutput) SetTransitGatewayAttachments(v []*TransitGatewayAttachment) *DescribeTransitGatewayAttachmentsOutput { - s.TransitGatewayAttachments = v - return s -} - -type DescribeTransitGatewayRouteTablesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * default-association-route-table - Indicates whether this is the default - // association route table for the transit gateway (true | false). - // - // * default-propagation-route-table - Indicates whether this is the default - // propagation route table for the transit gateway (true | false). - // - // * state - The state of the attachment (available | deleted | deleting - // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected - // | rejecting). - // - // * transit-gateway-id - The ID of the transit gateway. - // - // * transit-gateway-route-table-id - The ID of the transit gateway route - // table. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The IDs of the transit gateway route tables. - TransitGatewayRouteTableIds []*string `locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewayRouteTablesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewayRouteTablesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTransitGatewayRouteTablesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewayRouteTablesInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTransitGatewayRouteTablesInput) SetDryRun(v bool) *DescribeTransitGatewayRouteTablesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTransitGatewayRouteTablesInput) SetFilters(v []*Filter) *DescribeTransitGatewayRouteTablesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTransitGatewayRouteTablesInput) SetMaxResults(v int64) *DescribeTransitGatewayRouteTablesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewayRouteTablesInput) SetNextToken(v string) *DescribeTransitGatewayRouteTablesInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayRouteTableIds sets the TransitGatewayRouteTableIds field's value. -func (s *DescribeTransitGatewayRouteTablesInput) SetTransitGatewayRouteTableIds(v []*string) *DescribeTransitGatewayRouteTablesInput { - s.TransitGatewayRouteTableIds = v - return s -} - -type DescribeTransitGatewayRouteTablesOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the transit gateway route tables. - TransitGatewayRouteTables []*TransitGatewayRouteTable `locationName:"transitGatewayRouteTables" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewayRouteTablesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewayRouteTablesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewayRouteTablesOutput) SetNextToken(v string) *DescribeTransitGatewayRouteTablesOutput { - s.NextToken = &v - return s -} - -// SetTransitGatewayRouteTables sets the TransitGatewayRouteTables field's value. -func (s *DescribeTransitGatewayRouteTablesOutput) SetTransitGatewayRouteTables(v []*TransitGatewayRouteTable) *DescribeTransitGatewayRouteTablesOutput { - s.TransitGatewayRouteTables = v - return s -} - -type DescribeTransitGatewayVpcAttachmentsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * state - The state of the attachment (available | deleted | deleting - // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected - // | rejecting). - // - // * transit-gateway-attachment-id - The ID of the attachment. - // - // * transit-gateway-id - The ID of the transit gateway. - // - // * vpc-id - The ID of the VPC. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The IDs of the attachments. - TransitGatewayAttachmentIds []*string `type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewayVpcAttachmentsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewayVpcAttachmentsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTransitGatewayVpcAttachmentsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewayVpcAttachmentsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTransitGatewayVpcAttachmentsInput) SetDryRun(v bool) *DescribeTransitGatewayVpcAttachmentsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTransitGatewayVpcAttachmentsInput) SetFilters(v []*Filter) *DescribeTransitGatewayVpcAttachmentsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTransitGatewayVpcAttachmentsInput) SetMaxResults(v int64) *DescribeTransitGatewayVpcAttachmentsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewayVpcAttachmentsInput) SetNextToken(v string) *DescribeTransitGatewayVpcAttachmentsInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayAttachmentIds sets the TransitGatewayAttachmentIds field's value. -func (s *DescribeTransitGatewayVpcAttachmentsInput) SetTransitGatewayAttachmentIds(v []*string) *DescribeTransitGatewayVpcAttachmentsInput { - s.TransitGatewayAttachmentIds = v - return s -} - -type DescribeTransitGatewayVpcAttachmentsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the VPC attachments. - TransitGatewayVpcAttachments []*TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachments" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewayVpcAttachmentsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewayVpcAttachmentsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewayVpcAttachmentsOutput) SetNextToken(v string) *DescribeTransitGatewayVpcAttachmentsOutput { - s.NextToken = &v - return s -} - -// SetTransitGatewayVpcAttachments sets the TransitGatewayVpcAttachments field's value. -func (s *DescribeTransitGatewayVpcAttachmentsOutput) SetTransitGatewayVpcAttachments(v []*TransitGatewayVpcAttachment) *DescribeTransitGatewayVpcAttachmentsOutput { - s.TransitGatewayVpcAttachments = v - return s -} - -type DescribeTransitGatewaysInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * options.propagation-default-route-table-id - The ID of the default propagation - // route table. - // - // * options.amazon-side-asn - The private ASN for the Amazon side of a BGP - // session. - // - // * options.association-default-route-table-id - The ID of the default association - // route table. - // - // * options.auto-accept-shared-attachments - Indicates whether there is - // automatic acceptance of attachment requests (enable | disable). - // - // * options.default-route-table-association - Indicates whether resource - // attachments are automatically associated with the default association - // route table (enable | disable). - // - // * options.default-route-table-propagation - Indicates whether resource - // attachments automatically propagate routes to the default propagation - // route table (enable | disable). - // - // * options.dns-support - Indicates whether DNS support is enabled (enable - // | disable). - // - // * options.vpn-ecmp-support - Indicates whether Equal Cost Multipath Protocol - // support is enabled (enable | disable). - // - // * owner-id - The ID of the AWS account that owns the transit gateway. - // - // * state - The state of the attachment (available | deleted | deleting - // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected - // | rejecting). - // - // * transit-gateway-id - The ID of the transit gateway. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The IDs of the transit gateways. - TransitGatewayIds []*string `locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewaysInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewaysInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeTransitGatewaysInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewaysInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeTransitGatewaysInput) SetDryRun(v bool) *DescribeTransitGatewaysInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeTransitGatewaysInput) SetFilters(v []*Filter) *DescribeTransitGatewaysInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTransitGatewaysInput) SetMaxResults(v int64) *DescribeTransitGatewaysInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewaysInput) SetNextToken(v string) *DescribeTransitGatewaysInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayIds sets the TransitGatewayIds field's value. -func (s *DescribeTransitGatewaysInput) SetTransitGatewayIds(v []*string) *DescribeTransitGatewaysInput { - s.TransitGatewayIds = v - return s -} - -type DescribeTransitGatewaysOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the transit gateways. - TransitGateways []*TransitGateway `locationName:"transitGatewaySet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeTransitGatewaysOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeTransitGatewaysOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeTransitGatewaysOutput) SetNextToken(v string) *DescribeTransitGatewaysOutput { - s.NextToken = &v - return s -} - -// SetTransitGateways sets the TransitGateways field's value. -func (s *DescribeTransitGatewaysOutput) SetTransitGateways(v []*TransitGateway) *DescribeTransitGatewaysOutput { - s.TransitGateways = v - return s -} - -type DescribeVolumeAttributeInput struct { - _ struct{} `type:"structure"` - - // The attribute of the volume. This parameter is required. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"VolumeAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeVolumeAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumeAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVolumeAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVolumeAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeVolumeAttributeInput) SetAttribute(v string) *DescribeVolumeAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumeAttributeInput) SetDryRun(v bool) *DescribeVolumeAttributeInput { - s.DryRun = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *DescribeVolumeAttributeInput) SetVolumeId(v string) *DescribeVolumeAttributeInput { - s.VolumeId = &v - return s -} - -type DescribeVolumeAttributeOutput struct { - _ struct{} `type:"structure"` - - // The state of autoEnableIO attribute. - AutoEnableIO *AttributeBooleanValue `locationName:"autoEnableIO" type:"structure"` - - // A list of product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // The ID of the volume. - VolumeId *string `locationName:"volumeId" type:"string"` -} - -// String returns the string representation -func (s DescribeVolumeAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumeAttributeOutput) GoString() string { - return s.String() -} - -// SetAutoEnableIO sets the AutoEnableIO field's value. -func (s *DescribeVolumeAttributeOutput) SetAutoEnableIO(v *AttributeBooleanValue) *DescribeVolumeAttributeOutput { - s.AutoEnableIO = v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeVolumeAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeVolumeAttributeOutput { - s.ProductCodes = v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *DescribeVolumeAttributeOutput) SetVolumeId(v string) *DescribeVolumeAttributeOutput { - s.VolumeId = &v - return s -} - -type DescribeVolumeStatusInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * action.code - The action code for the event (for example, enable-volume-io). - // - // * action.description - A description of the action. - // - // * action.event-id - The event ID associated with the action. - // - // * availability-zone - The Availability Zone of the instance. - // - // * event.description - A description of the event. - // - // * event.event-id - The event ID. - // - // * event.event-type - The event type (for io-enabled: passed | failed; - // for io-performance: io-performance:degraded | io-performance:severely-degraded - // | io-performance:stalled). - // - // * event.not-after - The latest end time for the event. - // - // * event.not-before - The earliest start time for the event. - // - // * volume-status.details-name - The cause for volume-status.status (io-enabled - // | io-performance). - // - // * volume-status.details-status - The status of volume-status.details-name - // (for io-enabled: passed | failed; for io-performance: normal | degraded - // | severely-degraded | stalled). - // - // * volume-status.status - The status of the volume (ok | impaired | warning - // | insufficient-data). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of volume results returned by DescribeVolumeStatus in - // paginated output. When this parameter is used, the request only returns MaxResults - // results in a single page along with a NextToken response element. The remaining - // results of the initial request can be seen by sending another request with - // the returned NextToken value. This value can be between 5 and 1000; if MaxResults - // is given a value larger than 1000, only 1000 results are returned. If this - // parameter is not used, then DescribeVolumeStatus returns all results. You - // cannot specify this parameter and the volume IDs parameter in the same request. - MaxResults *int64 `type:"integer"` - - // The NextToken value to include in a future DescribeVolumeStatus request. - // When the results of the request exceed MaxResults, this value can be used - // to retrieve the next page of results. This value is null when there are no - // more results to return. - NextToken *string `type:"string"` - - // The IDs of the volumes. - // - // Default: Describes all your volumes. - VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` -} - -// String returns the string representation -func (s DescribeVolumeStatusInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumeStatusInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumeStatusInput) SetDryRun(v bool) *DescribeVolumeStatusInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVolumeStatusInput) SetFilters(v []*Filter) *DescribeVolumeStatusInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVolumeStatusInput) SetMaxResults(v int64) *DescribeVolumeStatusInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumeStatusInput) SetNextToken(v string) *DescribeVolumeStatusInput { - s.NextToken = &v - return s -} - -// SetVolumeIds sets the VolumeIds field's value. -func (s *DescribeVolumeStatusInput) SetVolumeIds(v []*string) *DescribeVolumeStatusInput { - s.VolumeIds = v - return s -} - -type DescribeVolumeStatusOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the status of the volumes. - VolumeStatuses []*VolumeStatusItem `locationName:"volumeStatusSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVolumeStatusOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumeStatusOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumeStatusOutput) SetNextToken(v string) *DescribeVolumeStatusOutput { - s.NextToken = &v - return s -} - -// SetVolumeStatuses sets the VolumeStatuses field's value. -func (s *DescribeVolumeStatusOutput) SetVolumeStatuses(v []*VolumeStatusItem) *DescribeVolumeStatusOutput { - s.VolumeStatuses = v - return s -} - -type DescribeVolumesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The filters. - // - // * attachment.attach-time - The time stamp when the attachment initiated. - // - // * attachment.delete-on-termination - Whether the volume is deleted on - // instance termination. - // - // * attachment.device - The device name specified in the block device mapping - // (for example, /dev/sda1). - // - // * attachment.instance-id - The ID of the instance the volume is attached - // to. - // - // * attachment.status - The attachment state (attaching | attached | detaching). - // - // * availability-zone - The Availability Zone in which the volume was created. - // - // * create-time - The time stamp when the volume was created. - // - // * encrypted - Indicates whether the volume is encrypted (true | false) - // - // * size - The size of the volume, in GiB. - // - // * snapshot-id - The snapshot from which the volume was created. - // - // * status - The status of the volume (creating | available | in-use | deleting - // | deleted | error). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * volume-id - The volume ID. - // - // * volume-type - The Amazon EBS volume type. This can be gp2 for General - // Purpose SSD, io1 for Provisioned IOPS SSD, st1 for Throughput Optimized - // HDD, sc1 for Cold HDD, or standard for Magnetic volumes. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of volume results returned by DescribeVolumes in paginated - // output. When this parameter is used, DescribeVolumes only returns MaxResults - // results in a single page along with a NextToken response element. The remaining - // results of the initial request can be seen by sending another DescribeVolumes - // request with the returned NextToken value. This value can be between 5 and - // 500; if MaxResults is given a value larger than 500, only 500 results are - // returned. If this parameter is not used, then DescribeVolumes returns all - // results. You cannot specify this parameter and the volume IDs parameter in - // the same request. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The NextToken value returned from a previous paginated DescribeVolumes request - // where MaxResults was used and the results exceeded the value of that parameter. - // Pagination continues from the end of the previous results that returned the - // NextToken value. This value is null when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The volume IDs. - VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` -} - -// String returns the string representation -func (s DescribeVolumesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumesInput) SetDryRun(v bool) *DescribeVolumesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVolumesInput) SetFilters(v []*Filter) *DescribeVolumesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVolumesInput) SetMaxResults(v int64) *DescribeVolumesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesInput) SetNextToken(v string) *DescribeVolumesInput { - s.NextToken = &v - return s -} - -// SetVolumeIds sets the VolumeIds field's value. -func (s *DescribeVolumesInput) SetVolumeIds(v []*string) *DescribeVolumesInput { - s.VolumeIds = v - return s -} - -type DescribeVolumesModificationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The filters. Supported filters: volume-id, modification-state, target-size, - // target-iops, target-volume-type, original-size, original-iops, original-volume-type, - // start-time. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results (up to a limit of 500) to be returned in a - // paginated request. - MaxResults *int64 `type:"integer"` - - // The nextToken value returned by a previous paginated request. - NextToken *string `type:"string"` - - // The IDs of the volumes for which in-progress modifications will be described. - VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` -} - -// String returns the string representation -func (s DescribeVolumesModificationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumesModificationsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumesModificationsInput) SetDryRun(v bool) *DescribeVolumesModificationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVolumesModificationsInput) SetFilters(v []*Filter) *DescribeVolumesModificationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVolumesModificationsInput) SetMaxResults(v int64) *DescribeVolumesModificationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesModificationsInput) SetNextToken(v string) *DescribeVolumesModificationsInput { - s.NextToken = &v - return s -} - -// SetVolumeIds sets the VolumeIds field's value. -func (s *DescribeVolumesModificationsInput) SetVolumeIds(v []*string) *DescribeVolumesModificationsInput { - s.VolumeIds = v - return s -} - -type DescribeVolumesModificationsOutput struct { - _ struct{} `type:"structure"` - - // Token for pagination, null if there are no more results - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the volume modifications. - VolumesModifications []*VolumeModification `locationName:"volumeModificationSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVolumesModificationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumesModificationsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesModificationsOutput) SetNextToken(v string) *DescribeVolumesModificationsOutput { - s.NextToken = &v - return s -} - -// SetVolumesModifications sets the VolumesModifications field's value. -func (s *DescribeVolumesModificationsOutput) SetVolumesModifications(v []*VolumeModification) *DescribeVolumesModificationsOutput { - s.VolumesModifications = v - return s -} - -type DescribeVolumesOutput struct { - _ struct{} `type:"structure"` - - // The NextToken value to include in a future DescribeVolumes request. When - // the results of a DescribeVolumes request exceed MaxResults, this value can - // be used to retrieve the next page of results. This value is null when there - // are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the volumes. - Volumes []*Volume `locationName:"volumeSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVolumesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVolumesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesOutput) SetNextToken(v string) *DescribeVolumesOutput { - s.NextToken = &v - return s -} - -// SetVolumes sets the Volumes field's value. -func (s *DescribeVolumesOutput) SetVolumes(v []*Volume) *DescribeVolumesOutput { - s.Volumes = v - return s -} - -type DescribeVpcAttributeInput struct { - _ struct{} `type:"structure"` - - // The VPC attribute. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"VpcAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeVpcAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeVpcAttributeInput) SetAttribute(v string) *DescribeVpcAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcAttributeInput) SetDryRun(v bool) *DescribeVpcAttributeInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DescribeVpcAttributeInput) SetVpcId(v string) *DescribeVpcAttributeInput { - s.VpcId = &v - return s -} - -type DescribeVpcAttributeOutput struct { - _ struct{} `type:"structure"` - - // Indicates whether the instances launched in the VPC get DNS hostnames. If - // this attribute is true, instances in the VPC get DNS hostnames; otherwise, - // they do not. - EnableDnsHostnames *AttributeBooleanValue `locationName:"enableDnsHostnames" type:"structure"` - - // Indicates whether DNS resolution is enabled for the VPC. If this attribute - // is true, the Amazon DNS server resolves DNS hostnames for your instances - // to their corresponding IP addresses; otherwise, it does not. - EnableDnsSupport *AttributeBooleanValue `locationName:"enableDnsSupport" type:"structure"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s DescribeVpcAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcAttributeOutput) GoString() string { - return s.String() -} - -// SetEnableDnsHostnames sets the EnableDnsHostnames field's value. -func (s *DescribeVpcAttributeOutput) SetEnableDnsHostnames(v *AttributeBooleanValue) *DescribeVpcAttributeOutput { - s.EnableDnsHostnames = v - return s -} - -// SetEnableDnsSupport sets the EnableDnsSupport field's value. -func (s *DescribeVpcAttributeOutput) SetEnableDnsSupport(v *AttributeBooleanValue) *DescribeVpcAttributeOutput { - s.EnableDnsSupport = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DescribeVpcAttributeOutput) SetVpcId(v string) *DescribeVpcAttributeOutput { - s.VpcId = &v - return s -} - -type DescribeVpcClassicLinkDnsSupportInput struct { - _ struct{} `type:"structure"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `locationName:"nextToken" min:"1" type:"string"` - - // One or more VPC IDs. - VpcIds []*string `locationNameList:"VpcId" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcClassicLinkDnsSupportInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcClassicLinkDnsSupportInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcClassicLinkDnsSupportInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcClassicLinkDnsSupportInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcClassicLinkDnsSupportInput) SetMaxResults(v int64) *DescribeVpcClassicLinkDnsSupportInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcClassicLinkDnsSupportInput) SetNextToken(v string) *DescribeVpcClassicLinkDnsSupportInput { - s.NextToken = &v - return s -} - -// SetVpcIds sets the VpcIds field's value. -func (s *DescribeVpcClassicLinkDnsSupportInput) SetVpcIds(v []*string) *DescribeVpcClassicLinkDnsSupportInput { - s.VpcIds = v - return s -} - -type DescribeVpcClassicLinkDnsSupportOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" min:"1" type:"string"` - - // Information about the ClassicLink DNS support status of the VPCs. - Vpcs []*ClassicLinkDnsSupport `locationName:"vpcs" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcClassicLinkDnsSupportOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcClassicLinkDnsSupportOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcClassicLinkDnsSupportOutput) SetNextToken(v string) *DescribeVpcClassicLinkDnsSupportOutput { - s.NextToken = &v - return s -} - -// SetVpcs sets the Vpcs field's value. -func (s *DescribeVpcClassicLinkDnsSupportOutput) SetVpcs(v []*ClassicLinkDnsSupport) *DescribeVpcClassicLinkDnsSupportOutput { - s.Vpcs = v - return s -} - -type DescribeVpcClassicLinkInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * is-classic-link-enabled - Whether the VPC is enabled for ClassicLink - // (true | false). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more VPCs for which you want to describe the ClassicLink status. - VpcIds []*string `locationName:"VpcId" locationNameList:"VpcId" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcClassicLinkInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcClassicLinkInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcClassicLinkInput) SetDryRun(v bool) *DescribeVpcClassicLinkInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcClassicLinkInput) SetFilters(v []*Filter) *DescribeVpcClassicLinkInput { - s.Filters = v - return s -} - -// SetVpcIds sets the VpcIds field's value. -func (s *DescribeVpcClassicLinkInput) SetVpcIds(v []*string) *DescribeVpcClassicLinkInput { - s.VpcIds = v - return s -} - -type DescribeVpcClassicLinkOutput struct { - _ struct{} `type:"structure"` - - // The ClassicLink status of one or more VPCs. - Vpcs []*VpcClassicLink `locationName:"vpcSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcClassicLinkOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcClassicLinkOutput) GoString() string { - return s.String() -} - -// SetVpcs sets the Vpcs field's value. -func (s *DescribeVpcClassicLinkOutput) SetVpcs(v []*VpcClassicLink) *DescribeVpcClassicLinkOutput { - s.Vpcs = v - return s -} - -type DescribeVpcEndpointConnectionNotificationsInput struct { - _ struct{} `type:"structure"` - - // The ID of the notification. - ConnectionNotificationId *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * connection-notification-arn - The ARN of SNS topic for the notification. - // - // * connection-notification-id - The ID of the notification. - // - // * connection-notification-state - The state of the notification (Enabled - // | Disabled). - // - // * connection-notification-type - The type of notification (Topic). - // - // * service-id - The ID of the endpoint service. - // - // * vpc-endpoint-id - The ID of the VPC endpoint. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another request with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The token to request the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeVpcEndpointConnectionNotificationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointConnectionNotificationsInput) GoString() string { - return s.String() -} - -// SetConnectionNotificationId sets the ConnectionNotificationId field's value. -func (s *DescribeVpcEndpointConnectionNotificationsInput) SetConnectionNotificationId(v string) *DescribeVpcEndpointConnectionNotificationsInput { - s.ConnectionNotificationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointConnectionNotificationsInput) SetDryRun(v bool) *DescribeVpcEndpointConnectionNotificationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointConnectionNotificationsInput) SetFilters(v []*Filter) *DescribeVpcEndpointConnectionNotificationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointConnectionNotificationsInput) SetMaxResults(v int64) *DescribeVpcEndpointConnectionNotificationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointConnectionNotificationsInput) SetNextToken(v string) *DescribeVpcEndpointConnectionNotificationsInput { - s.NextToken = &v - return s -} - -type DescribeVpcEndpointConnectionNotificationsOutput struct { - _ struct{} `type:"structure"` - - // One or more notifications. - ConnectionNotificationSet []*ConnectionNotification `locationName:"connectionNotificationSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeVpcEndpointConnectionNotificationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointConnectionNotificationsOutput) GoString() string { - return s.String() -} - -// SetConnectionNotificationSet sets the ConnectionNotificationSet field's value. -func (s *DescribeVpcEndpointConnectionNotificationsOutput) SetConnectionNotificationSet(v []*ConnectionNotification) *DescribeVpcEndpointConnectionNotificationsOutput { - s.ConnectionNotificationSet = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointConnectionNotificationsOutput) SetNextToken(v string) *DescribeVpcEndpointConnectionNotificationsOutput { - s.NextToken = &v - return s -} - -type DescribeVpcEndpointConnectionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * service-id - The ID of the service. - // - // * vpc-endpoint-owner - The AWS account number of the owner of the endpoint. - // - // * vpc-endpoint-state - The state of the endpoint (pendingAcceptance | - // pending | available | deleting | deleted | rejected | failed). - // - // * vpc-endpoint-id - The ID of the endpoint. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value larger than 1000, only 1000 results - // are returned. - MaxResults *int64 `type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s DescribeVpcEndpointConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointConnectionsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointConnectionsInput) SetDryRun(v bool) *DescribeVpcEndpointConnectionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointConnectionsInput) SetFilters(v []*Filter) *DescribeVpcEndpointConnectionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointConnectionsInput) SetMaxResults(v int64) *DescribeVpcEndpointConnectionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointConnectionsInput) SetNextToken(v string) *DescribeVpcEndpointConnectionsInput { - s.NextToken = &v - return s -} - -type DescribeVpcEndpointConnectionsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more VPC endpoint connections. - VpcEndpointConnections []*VpcEndpointConnection `locationName:"vpcEndpointConnectionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointConnectionsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointConnectionsOutput) SetNextToken(v string) *DescribeVpcEndpointConnectionsOutput { - s.NextToken = &v - return s -} - -// SetVpcEndpointConnections sets the VpcEndpointConnections field's value. -func (s *DescribeVpcEndpointConnectionsOutput) SetVpcEndpointConnections(v []*VpcEndpointConnection) *DescribeVpcEndpointConnectionsOutput { - s.VpcEndpointConnections = v - return s -} - -type DescribeVpcEndpointServiceConfigurationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * service-name - The name of the service. - // - // * service-id - The ID of the service. - // - // * service-state - The state of the service (Pending | Available | Deleting - // | Deleted | Failed). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value larger than 1000, only 1000 results - // are returned. - MaxResults *int64 `type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` - - // The IDs of one or more services. - ServiceIds []*string `locationName:"ServiceId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointServiceConfigurationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointServiceConfigurationsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointServiceConfigurationsInput) SetDryRun(v bool) *DescribeVpcEndpointServiceConfigurationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointServiceConfigurationsInput) SetFilters(v []*Filter) *DescribeVpcEndpointServiceConfigurationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointServiceConfigurationsInput) SetMaxResults(v int64) *DescribeVpcEndpointServiceConfigurationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServiceConfigurationsInput) SetNextToken(v string) *DescribeVpcEndpointServiceConfigurationsInput { - s.NextToken = &v - return s -} - -// SetServiceIds sets the ServiceIds field's value. -func (s *DescribeVpcEndpointServiceConfigurationsInput) SetServiceIds(v []*string) *DescribeVpcEndpointServiceConfigurationsInput { - s.ServiceIds = v - return s -} - -type DescribeVpcEndpointServiceConfigurationsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more services. - ServiceConfigurations []*ServiceConfiguration `locationName:"serviceConfigurationSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointServiceConfigurationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointServiceConfigurationsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServiceConfigurationsOutput) SetNextToken(v string) *DescribeVpcEndpointServiceConfigurationsOutput { - s.NextToken = &v - return s -} - -// SetServiceConfigurations sets the ServiceConfigurations field's value. -func (s *DescribeVpcEndpointServiceConfigurationsOutput) SetServiceConfigurations(v []*ServiceConfiguration) *DescribeVpcEndpointServiceConfigurationsOutput { - s.ServiceConfigurations = v - return s -} - -type DescribeVpcEndpointServicePermissionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * principal - The ARN of the principal. - // - // * principal-type - The principal type (All | Service | OrganizationUnit - // | Account | User | Role). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value larger than 1000, only 1000 results - // are returned. - MaxResults *int64 `type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` - - // The ID of the service. - // - // ServiceId is a required field - ServiceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DescribeVpcEndpointServicePermissionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointServicePermissionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcEndpointServicePermissionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcEndpointServicePermissionsInput"} - if s.ServiceId == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointServicePermissionsInput) SetDryRun(v bool) *DescribeVpcEndpointServicePermissionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointServicePermissionsInput) SetFilters(v []*Filter) *DescribeVpcEndpointServicePermissionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointServicePermissionsInput) SetMaxResults(v int64) *DescribeVpcEndpointServicePermissionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServicePermissionsInput) SetNextToken(v string) *DescribeVpcEndpointServicePermissionsInput { - s.NextToken = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *DescribeVpcEndpointServicePermissionsInput) SetServiceId(v string) *DescribeVpcEndpointServicePermissionsInput { - s.ServiceId = &v - return s -} - -type DescribeVpcEndpointServicePermissionsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more allowed principals. - AllowedPrincipals []*AllowedPrincipal `locationName:"allowedPrincipals" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s DescribeVpcEndpointServicePermissionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointServicePermissionsOutput) GoString() string { - return s.String() -} - -// SetAllowedPrincipals sets the AllowedPrincipals field's value. -func (s *DescribeVpcEndpointServicePermissionsOutput) SetAllowedPrincipals(v []*AllowedPrincipal) *DescribeVpcEndpointServicePermissionsOutput { - s.AllowedPrincipals = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServicePermissionsOutput) SetNextToken(v string) *DescribeVpcEndpointServicePermissionsOutput { - s.NextToken = &v - return s -} - -// Contains the parameters for DescribeVpcEndpointServices. -type DescribeVpcEndpointServicesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * service-name: The name of the service. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - // - // Constraint: If the value is greater than 1000, we return only 1000 items. - MaxResults *int64 `type:"integer"` - - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `type:"string"` - - // One or more service names. - ServiceNames []*string `locationName:"ServiceName" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointServicesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointServicesInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointServicesInput) SetDryRun(v bool) *DescribeVpcEndpointServicesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointServicesInput) SetFilters(v []*Filter) *DescribeVpcEndpointServicesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointServicesInput) SetMaxResults(v int64) *DescribeVpcEndpointServicesInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServicesInput) SetNextToken(v string) *DescribeVpcEndpointServicesInput { - s.NextToken = &v - return s -} - -// SetServiceNames sets the ServiceNames field's value. -func (s *DescribeVpcEndpointServicesInput) SetServiceNames(v []*string) *DescribeVpcEndpointServicesInput { - s.ServiceNames = v - return s -} - -// Contains the output of DescribeVpcEndpointServices. -type DescribeVpcEndpointServicesOutput struct { - _ struct{} `type:"structure"` - - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the service. - ServiceDetails []*ServiceDetail `locationName:"serviceDetailSet" locationNameList:"item" type:"list"` - - // A list of supported services. - ServiceNames []*string `locationName:"serviceNameSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointServicesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointServicesOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServicesOutput) SetNextToken(v string) *DescribeVpcEndpointServicesOutput { - s.NextToken = &v - return s -} - -// SetServiceDetails sets the ServiceDetails field's value. -func (s *DescribeVpcEndpointServicesOutput) SetServiceDetails(v []*ServiceDetail) *DescribeVpcEndpointServicesOutput { - s.ServiceDetails = v - return s -} - -// SetServiceNames sets the ServiceNames field's value. -func (s *DescribeVpcEndpointServicesOutput) SetServiceNames(v []*string) *DescribeVpcEndpointServicesOutput { - s.ServiceNames = v - return s -} - -// Contains the parameters for DescribeVpcEndpoints. -type DescribeVpcEndpointsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * service-name: The name of the service. - // - // * vpc-id: The ID of the VPC in which the endpoint resides. - // - // * vpc-endpoint-id: The ID of the endpoint. - // - // * vpc-endpoint-state - The state of the endpoint (pendingAcceptance | - // pending | available | deleting | deleted | rejected | failed). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - // - // Constraint: If the value is greater than 1000, we return only 1000 items. - MaxResults *int64 `type:"integer"` - - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `type:"string"` - - // One or more endpoint IDs. - VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointsInput) SetDryRun(v bool) *DescribeVpcEndpointsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointsInput) SetFilters(v []*Filter) *DescribeVpcEndpointsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointsInput) SetMaxResults(v int64) *DescribeVpcEndpointsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointsInput) SetNextToken(v string) *DescribeVpcEndpointsInput { - s.NextToken = &v - return s -} - -// SetVpcEndpointIds sets the VpcEndpointIds field's value. -func (s *DescribeVpcEndpointsInput) SetVpcEndpointIds(v []*string) *DescribeVpcEndpointsInput { - s.VpcEndpointIds = v - return s -} - -// Contains the output of DescribeVpcEndpoints. -type DescribeVpcEndpointsOutput struct { - _ struct{} `type:"structure"` - - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the endpoints. - VpcEndpoints []*VpcEndpoint `locationName:"vpcEndpointSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcEndpointsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcEndpointsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointsOutput) SetNextToken(v string) *DescribeVpcEndpointsOutput { - s.NextToken = &v - return s -} - -// SetVpcEndpoints sets the VpcEndpoints field's value. -func (s *DescribeVpcEndpointsOutput) SetVpcEndpoints(v []*VpcEndpoint) *DescribeVpcEndpointsOutput { - s.VpcEndpoints = v - return s -} - -type DescribeVpcPeeringConnectionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * accepter-vpc-info.cidr-block - The IPv4 CIDR block of the accepter VPC. - // - // * accepter-vpc-info.owner-id - The AWS account ID of the owner of the - // accepter VPC. - // - // * accepter-vpc-info.vpc-id - The ID of the accepter VPC. - // - // * expiration-time - The expiration date and time for the VPC peering connection. - // - // * requester-vpc-info.cidr-block - The IPv4 CIDR block of the requester's - // VPC. - // - // * requester-vpc-info.owner-id - The AWS account ID of the owner of the - // requester VPC. - // - // * requester-vpc-info.vpc-id - The ID of the requester VPC. - // - // * status-code - The status of the VPC peering connection (pending-acceptance - // | failed | expired | provisioning | active | deleting | deleted | rejected). - // - // * status-message - A message that provides more information about the - // status of the VPC peering connection, if applicable. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-peering-connection-id - The ID of the VPC peering connection. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // One or more VPC peering connection IDs. - // - // Default: Describes all your VPC peering connections. - VpcPeeringConnectionIds []*string `locationName:"VpcPeeringConnectionId" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcPeeringConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcPeeringConnectionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcPeeringConnectionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcPeeringConnectionsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetDryRun(v bool) *DescribeVpcPeeringConnectionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetFilters(v []*Filter) *DescribeVpcPeeringConnectionsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetMaxResults(v int64) *DescribeVpcPeeringConnectionsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetNextToken(v string) *DescribeVpcPeeringConnectionsInput { - s.NextToken = &v - return s -} - -// SetVpcPeeringConnectionIds sets the VpcPeeringConnectionIds field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetVpcPeeringConnectionIds(v []*string) *DescribeVpcPeeringConnectionsInput { - s.VpcPeeringConnectionIds = v - return s -} - -type DescribeVpcPeeringConnectionsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the VPC peering connections. - VpcPeeringConnections []*VpcPeeringConnection `locationName:"vpcPeeringConnectionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcPeeringConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcPeeringConnectionsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcPeeringConnectionsOutput) SetNextToken(v string) *DescribeVpcPeeringConnectionsOutput { - s.NextToken = &v - return s -} - -// SetVpcPeeringConnections sets the VpcPeeringConnections field's value. -func (s *DescribeVpcPeeringConnectionsOutput) SetVpcPeeringConnections(v []*VpcPeeringConnection) *DescribeVpcPeeringConnectionsOutput { - s.VpcPeeringConnections = v - return s -} - -type DescribeVpcsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * cidr - The primary IPv4 CIDR block of the VPC. The CIDR block you specify - // must exactly match the VPC's CIDR block for information to be returned - // for the VPC. Must contain the slash followed by one or two digits (for - // example, /28). - // - // * cidr-block-association.cidr-block - An IPv4 CIDR block associated with - // the VPC. - // - // * cidr-block-association.association-id - The association ID for an IPv4 - // CIDR block associated with the VPC. - // - // * cidr-block-association.state - The state of an IPv4 CIDR block associated - // with the VPC. - // - // * dhcp-options-id - The ID of a set of DHCP options. - // - // * ipv6-cidr-block-association.ipv6-cidr-block - An IPv6 CIDR block associated - // with the VPC. - // - // * ipv6-cidr-block-association.association-id - The association ID for - // an IPv6 CIDR block associated with the VPC. - // - // * ipv6-cidr-block-association.state - The state of an IPv6 CIDR block - // associated with the VPC. - // - // * isDefault - Indicates whether the VPC is the default VPC. - // - // * owner-id - The ID of the AWS account that owns the VPC. - // - // * state - The state of the VPC (pending | available). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * vpc-id - The ID of the VPC. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // One or more VPC IDs. - // - // Default: Describes all your VPCs. - VpcIds []*string `locationName:"VpcId" locationNameList:"VpcId" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcsInput) SetDryRun(v bool) *DescribeVpcsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcsInput) SetFilters(v []*Filter) *DescribeVpcsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcsInput) SetMaxResults(v int64) *DescribeVpcsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcsInput) SetNextToken(v string) *DescribeVpcsInput { - s.NextToken = &v - return s -} - -// SetVpcIds sets the VpcIds field's value. -func (s *DescribeVpcsInput) SetVpcIds(v []*string) *DescribeVpcsInput { - s.VpcIds = v - return s -} - -type DescribeVpcsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about one or more VPCs. - Vpcs []*Vpc `locationName:"vpcSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpcsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcsOutput) SetNextToken(v string) *DescribeVpcsOutput { - s.NextToken = &v - return s -} - -// SetVpcs sets the Vpcs field's value. -func (s *DescribeVpcsOutput) SetVpcs(v []*Vpc) *DescribeVpcsOutput { - s.Vpcs = v - return s -} - -// Contains the parameters for DescribeVpnConnections. -type DescribeVpnConnectionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * customer-gateway-configuration - The configuration information for the - // customer gateway. - // - // * customer-gateway-id - The ID of a customer gateway associated with the - // VPN connection. - // - // * state - The state of the VPN connection (pending | available | deleting - // | deleted). - // - // * option.static-routes-only - Indicates whether the connection has static - // routes only. Used for devices that do not support Border Gateway Protocol - // (BGP). - // - // * route.destination-cidr-block - The destination CIDR block. This corresponds - // to the subnet used in a customer data center. - // - // * bgp-asn - The BGP Autonomous System Number (ASN) associated with a BGP - // device. - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * type - The type of VPN connection. Currently the only supported type - // is ipsec.1. - // - // * vpn-connection-id - The ID of the VPN connection. - // - // * vpn-gateway-id - The ID of a virtual private gateway associated with - // the VPN connection. - // - // * transit-gateway-id - The ID of a transit gateway associated with the - // VPN connection. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more VPN connection IDs. - // - // Default: Describes your VPN connections. - VpnConnectionIds []*string `locationName:"VpnConnectionId" locationNameList:"VpnConnectionId" type:"list"` -} - -// String returns the string representation -func (s DescribeVpnConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpnConnectionsInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpnConnectionsInput) SetDryRun(v bool) *DescribeVpnConnectionsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpnConnectionsInput) SetFilters(v []*Filter) *DescribeVpnConnectionsInput { - s.Filters = v - return s -} - -// SetVpnConnectionIds sets the VpnConnectionIds field's value. -func (s *DescribeVpnConnectionsInput) SetVpnConnectionIds(v []*string) *DescribeVpnConnectionsInput { - s.VpnConnectionIds = v - return s -} - -// Contains the output of DescribeVpnConnections. -type DescribeVpnConnectionsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more VPN connections. - VpnConnections []*VpnConnection `locationName:"vpnConnectionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpnConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpnConnectionsOutput) GoString() string { - return s.String() -} - -// SetVpnConnections sets the VpnConnections field's value. -func (s *DescribeVpnConnectionsOutput) SetVpnConnections(v []*VpnConnection) *DescribeVpnConnectionsOutput { - s.VpnConnections = v - return s -} - -// Contains the parameters for DescribeVpnGateways. -type DescribeVpnGatewaysInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * amazon-side-asn - The Autonomous System Number (ASN) for the Amazon - // side of the gateway. - // - // * attachment.state - The current state of the attachment between the gateway - // and the VPC (attaching | attached | detaching | detached). - // - // * attachment.vpc-id - The ID of an attached VPC. - // - // * availability-zone - The Availability Zone for the virtual private gateway - // (if applicable). - // - // * state - The state of the virtual private gateway (pending | available - // | deleting | deleted). - // - // * tag: - The key/value combination of a tag assigned to the resource. - // Use the tag key in the filter name and the tag value as the filter value. - // For example, to find all resources that have a tag with the key Owner - // and the value TeamA, specify tag:Owner for the filter name and TeamA for - // the filter value. - // - // * tag-key - The key of a tag assigned to the resource. Use this filter - // to find all resources assigned a tag with a specific key, regardless of - // the tag value. - // - // * type - The type of virtual private gateway. Currently the only supported - // type is ipsec.1. - // - // * vpn-gateway-id - The ID of the virtual private gateway. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more virtual private gateway IDs. - // - // Default: Describes all your virtual private gateways. - VpnGatewayIds []*string `locationName:"VpnGatewayId" locationNameList:"VpnGatewayId" type:"list"` -} - -// String returns the string representation -func (s DescribeVpnGatewaysInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpnGatewaysInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpnGatewaysInput) SetDryRun(v bool) *DescribeVpnGatewaysInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpnGatewaysInput) SetFilters(v []*Filter) *DescribeVpnGatewaysInput { - s.Filters = v - return s -} - -// SetVpnGatewayIds sets the VpnGatewayIds field's value. -func (s *DescribeVpnGatewaysInput) SetVpnGatewayIds(v []*string) *DescribeVpnGatewaysInput { - s.VpnGatewayIds = v - return s -} - -// Contains the output of DescribeVpnGateways. -type DescribeVpnGatewaysOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more virtual private gateways. - VpnGateways []*VpnGateway `locationName:"vpnGatewaySet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeVpnGatewaysOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpnGatewaysOutput) GoString() string { - return s.String() -} - -// SetVpnGateways sets the VpnGateways field's value. -func (s *DescribeVpnGatewaysOutput) SetVpnGateways(v []*VpnGateway) *DescribeVpnGatewaysOutput { - s.VpnGateways = v - return s -} - -type DetachClassicLinkVpcInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance to unlink from the VPC. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // The ID of the VPC to which the instance is linked. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DetachClassicLinkVpcInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachClassicLinkVpcInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachClassicLinkVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachClassicLinkVpcInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachClassicLinkVpcInput) SetDryRun(v bool) *DetachClassicLinkVpcInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *DetachClassicLinkVpcInput) SetInstanceId(v string) *DetachClassicLinkVpcInput { - s.InstanceId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DetachClassicLinkVpcInput) SetVpcId(v string) *DetachClassicLinkVpcInput { - s.VpcId = &v - return s -} - -type DetachClassicLinkVpcOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s DetachClassicLinkVpcOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachClassicLinkVpcOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *DetachClassicLinkVpcOutput) SetReturn(v bool) *DetachClassicLinkVpcOutput { - s.Return = &v - return s -} - -type DetachInternetGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the internet gateway. - // - // InternetGatewayId is a required field - InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DetachInternetGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachInternetGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachInternetGatewayInput"} - if s.InternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachInternetGatewayInput) SetDryRun(v bool) *DetachInternetGatewayInput { - s.DryRun = &v - return s -} - -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *DetachInternetGatewayInput) SetInternetGatewayId(v string) *DetachInternetGatewayInput { - s.InternetGatewayId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DetachInternetGatewayInput) SetVpcId(v string) *DetachInternetGatewayInput { - s.VpcId = &v - return s -} - -type DetachInternetGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DetachInternetGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachInternetGatewayOutput) GoString() string { - return s.String() -} - -// Contains the parameters for DetachNetworkInterface. -type DetachNetworkInterfaceInput struct { - _ struct{} `type:"structure"` - - // The ID of the attachment. - // - // AttachmentId is a required field - AttachmentId *string `locationName:"attachmentId" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Specifies whether to force a detachment. - // - // * Use the Force parameter only as a last resort to detach a network interface - // from a failed instance. - // - // * If you use the Force parameter to detach a network interface, you might - // not be able to attach a different network interface to the same index - // on the instance without first stopping and starting the instance. - // - // * If you force the detachment of a network interface, the instance metadata - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) - // might not get updated. This means that the attributes associated with - // the detached network interface might still be visible. The instance metadata - // will get updated when you stop and start the instance. - Force *bool `locationName:"force" type:"boolean"` -} - -// String returns the string representation -func (s DetachNetworkInterfaceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachNetworkInterfaceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachNetworkInterfaceInput"} - if s.AttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("AttachmentId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttachmentId sets the AttachmentId field's value. -func (s *DetachNetworkInterfaceInput) SetAttachmentId(v string) *DetachNetworkInterfaceInput { - s.AttachmentId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachNetworkInterfaceInput) SetDryRun(v bool) *DetachNetworkInterfaceInput { - s.DryRun = &v - return s -} - -// SetForce sets the Force field's value. -func (s *DetachNetworkInterfaceInput) SetForce(v bool) *DetachNetworkInterfaceInput { - s.Force = &v - return s -} - -type DetachNetworkInterfaceOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DetachNetworkInterfaceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachNetworkInterfaceOutput) GoString() string { - return s.String() -} - -type DetachVolumeInput struct { - _ struct{} `type:"structure"` - - // The device name. - Device *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Forces detachment if the previous detachment attempt did not occur cleanly - // (for example, logging into an instance, unmounting the volume, and detaching - // normally). This option can lead to data loss or a corrupted file system. - // Use this option only as a last resort to detach a volume from a failed instance. - // The instance won't have an opportunity to flush file system caches or file - // system metadata. If you use this option, you must perform file system check - // and repair procedures. - Force *bool `type:"boolean"` - - // The ID of the instance. - InstanceId *string `type:"string"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DetachVolumeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachVolumeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachVolumeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDevice sets the Device field's value. -func (s *DetachVolumeInput) SetDevice(v string) *DetachVolumeInput { - s.Device = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachVolumeInput) SetDryRun(v bool) *DetachVolumeInput { - s.DryRun = &v - return s -} - -// SetForce sets the Force field's value. -func (s *DetachVolumeInput) SetForce(v bool) *DetachVolumeInput { - s.Force = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *DetachVolumeInput) SetInstanceId(v string) *DetachVolumeInput { - s.InstanceId = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *DetachVolumeInput) SetVolumeId(v string) *DetachVolumeInput { - s.VolumeId = &v - return s -} - -// Contains the parameters for DetachVpnGateway. -type DetachVpnGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` - - // The ID of the virtual private gateway. - // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DetachVpnGatewayInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachVpnGatewayInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachVpnGatewayInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachVpnGatewayInput) SetDryRun(v bool) *DetachVpnGatewayInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DetachVpnGatewayInput) SetVpcId(v string) *DetachVpnGatewayInput { - s.VpcId = &v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *DetachVpnGatewayInput) SetVpnGatewayId(v string) *DetachVpnGatewayInput { - s.VpnGatewayId = &v - return s -} - -type DetachVpnGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DetachVpnGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DetachVpnGatewayOutput) GoString() string { - return s.String() -} - -// Describes a DHCP configuration option. -type DhcpConfiguration struct { - _ struct{} `type:"structure"` - - // The name of a DHCP option. - Key *string `locationName:"key" type:"string"` - - // One or more values for the DHCP option. - Values []*AttributeValue `locationName:"valueSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DhcpConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DhcpConfiguration) GoString() string { - return s.String() -} - -// SetKey sets the Key field's value. -func (s *DhcpConfiguration) SetKey(v string) *DhcpConfiguration { - s.Key = &v - return s -} - -// SetValues sets the Values field's value. -func (s *DhcpConfiguration) SetValues(v []*AttributeValue) *DhcpConfiguration { - s.Values = v - return s -} - -// Describes a set of DHCP options. -type DhcpOptions struct { - _ struct{} `type:"structure"` - - // One or more DHCP options in the set. - DhcpConfigurations []*DhcpConfiguration `locationName:"dhcpConfigurationSet" locationNameList:"item" type:"list"` - - // The ID of the set of DHCP options. - DhcpOptionsId *string `locationName:"dhcpOptionsId" type:"string"` - - // The ID of the AWS account that owns the DHCP options set. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Any tags assigned to the DHCP options set. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DhcpOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DhcpOptions) GoString() string { - return s.String() -} - -// SetDhcpConfigurations sets the DhcpConfigurations field's value. -func (s *DhcpOptions) SetDhcpConfigurations(v []*DhcpConfiguration) *DhcpOptions { - s.DhcpConfigurations = v - return s -} - -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *DhcpOptions) SetDhcpOptionsId(v string) *DhcpOptions { - s.DhcpOptionsId = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *DhcpOptions) SetOwnerId(v string) *DhcpOptions { - s.OwnerId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *DhcpOptions) SetTags(v []*Tag) *DhcpOptions { - s.Tags = v - return s -} - -// Describes an Active Directory. -type DirectoryServiceAuthentication struct { - _ struct{} `type:"structure"` - - // The ID of the Active Directory used for authentication. - DirectoryId *string `locationName:"directoryId" type:"string"` -} - -// String returns the string representation -func (s DirectoryServiceAuthentication) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DirectoryServiceAuthentication) GoString() string { - return s.String() -} - -// SetDirectoryId sets the DirectoryId field's value. -func (s *DirectoryServiceAuthentication) SetDirectoryId(v string) *DirectoryServiceAuthentication { - s.DirectoryId = &v - return s -} - -// Describes the Active Directory to be used for client authentication. -type DirectoryServiceAuthenticationRequest struct { - _ struct{} `type:"structure"` - - // The ID of the Active Directory to be used for authentication. - DirectoryId *string `type:"string"` -} - -// String returns the string representation -func (s DirectoryServiceAuthenticationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DirectoryServiceAuthenticationRequest) GoString() string { - return s.String() -} - -// SetDirectoryId sets the DirectoryId field's value. -func (s *DirectoryServiceAuthenticationRequest) SetDirectoryId(v string) *DirectoryServiceAuthenticationRequest { - s.DirectoryId = &v - return s -} - -type DisableEbsEncryptionByDefaultInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s DisableEbsEncryptionByDefaultInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableEbsEncryptionByDefaultInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *DisableEbsEncryptionByDefaultInput) SetDryRun(v bool) *DisableEbsEncryptionByDefaultInput { - s.DryRun = &v - return s -} - -type DisableEbsEncryptionByDefaultOutput struct { - _ struct{} `type:"structure"` - - // The updated status of encryption by default. - EbsEncryptionByDefault *bool `locationName:"ebsEncryptionByDefault" type:"boolean"` -} - -// String returns the string representation -func (s DisableEbsEncryptionByDefaultOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableEbsEncryptionByDefaultOutput) GoString() string { - return s.String() -} - -// SetEbsEncryptionByDefault sets the EbsEncryptionByDefault field's value. -func (s *DisableEbsEncryptionByDefaultOutput) SetEbsEncryptionByDefault(v bool) *DisableEbsEncryptionByDefaultOutput { - s.EbsEncryptionByDefault = &v - return s -} - -// Contains information about the errors that occurred when disabling fast snapshot -// restores. -type DisableFastSnapshotRestoreErrorItem struct { - _ struct{} `type:"structure"` - - // The errors. - FastSnapshotRestoreStateErrors []*DisableFastSnapshotRestoreStateErrorItem `locationName:"fastSnapshotRestoreStateErrorSet" locationNameList:"item" type:"list"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` -} - -// String returns the string representation -func (s DisableFastSnapshotRestoreErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableFastSnapshotRestoreErrorItem) GoString() string { - return s.String() -} - -// SetFastSnapshotRestoreStateErrors sets the FastSnapshotRestoreStateErrors field's value. -func (s *DisableFastSnapshotRestoreErrorItem) SetFastSnapshotRestoreStateErrors(v []*DisableFastSnapshotRestoreStateErrorItem) *DisableFastSnapshotRestoreErrorItem { - s.FastSnapshotRestoreStateErrors = v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *DisableFastSnapshotRestoreErrorItem) SetSnapshotId(v string) *DisableFastSnapshotRestoreErrorItem { - s.SnapshotId = &v - return s -} - -// Describes an error that occurred when disabling fast snapshot restores. -type DisableFastSnapshotRestoreStateError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string"` - - // The error message. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s DisableFastSnapshotRestoreStateError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableFastSnapshotRestoreStateError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *DisableFastSnapshotRestoreStateError) SetCode(v string) *DisableFastSnapshotRestoreStateError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *DisableFastSnapshotRestoreStateError) SetMessage(v string) *DisableFastSnapshotRestoreStateError { - s.Message = &v - return s -} - -// Contains information about an error that occurred when disabling fast snapshot -// restores. -type DisableFastSnapshotRestoreStateErrorItem struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The error. - Error *DisableFastSnapshotRestoreStateError `locationName:"error" type:"structure"` -} - -// String returns the string representation -func (s DisableFastSnapshotRestoreStateErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableFastSnapshotRestoreStateErrorItem) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DisableFastSnapshotRestoreStateErrorItem) SetAvailabilityZone(v string) *DisableFastSnapshotRestoreStateErrorItem { - s.AvailabilityZone = &v - return s -} - -// SetError sets the Error field's value. -func (s *DisableFastSnapshotRestoreStateErrorItem) SetError(v *DisableFastSnapshotRestoreStateError) *DisableFastSnapshotRestoreStateErrorItem { - s.Error = v - return s -} - -// Describes fast snapshot restores that were successfully disabled. -type DisableFastSnapshotRestoreSuccessItem struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The time at which fast snapshot restores entered the disabled state. - DisabledTime *time.Time `locationName:"disabledTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the disabling state. - DisablingTime *time.Time `locationName:"disablingTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the enabled state. - EnabledTime *time.Time `locationName:"enabledTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the enabling state. - EnablingTime *time.Time `locationName:"enablingTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the optimizing state. - OptimizingTime *time.Time `locationName:"optimizingTime" type:"timestamp"` - - // The alias of the snapshot owner. - OwnerAlias *string `locationName:"ownerAlias" type:"string"` - - // The ID of the AWS account that owns the snapshot. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The state of fast snapshot restores for the snapshot. - State *string `locationName:"state" type:"string" enum:"FastSnapshotRestoreStateCode"` - - // The reason for the state transition. The possible values are as follows: - // - // * Client.UserInitiated - The state successfully transitioned to enabling - // or disabling. - // - // * Client.UserInitiated - Lifecycle state transition - The state successfully - // transitioned to optimizing, enabled, or disabled. - StateTransitionReason *string `locationName:"stateTransitionReason" type:"string"` -} - -// String returns the string representation -func (s DisableFastSnapshotRestoreSuccessItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableFastSnapshotRestoreSuccessItem) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetAvailabilityZone(v string) *DisableFastSnapshotRestoreSuccessItem { - s.AvailabilityZone = &v - return s -} - -// SetDisabledTime sets the DisabledTime field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetDisabledTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { - s.DisabledTime = &v - return s -} - -// SetDisablingTime sets the DisablingTime field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetDisablingTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { - s.DisablingTime = &v - return s -} - -// SetEnabledTime sets the EnabledTime field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetEnabledTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { - s.EnabledTime = &v - return s -} - -// SetEnablingTime sets the EnablingTime field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetEnablingTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { - s.EnablingTime = &v - return s -} - -// SetOptimizingTime sets the OptimizingTime field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetOptimizingTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { - s.OptimizingTime = &v - return s -} - -// SetOwnerAlias sets the OwnerAlias field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetOwnerAlias(v string) *DisableFastSnapshotRestoreSuccessItem { - s.OwnerAlias = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetOwnerId(v string) *DisableFastSnapshotRestoreSuccessItem { - s.OwnerId = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetSnapshotId(v string) *DisableFastSnapshotRestoreSuccessItem { - s.SnapshotId = &v - return s -} - -// SetState sets the State field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetState(v string) *DisableFastSnapshotRestoreSuccessItem { - s.State = &v - return s -} - -// SetStateTransitionReason sets the StateTransitionReason field's value. -func (s *DisableFastSnapshotRestoreSuccessItem) SetStateTransitionReason(v string) *DisableFastSnapshotRestoreSuccessItem { - s.StateTransitionReason = &v - return s -} - -type DisableFastSnapshotRestoresInput struct { - _ struct{} `type:"structure"` - - // One or more Availability Zones. For example, us-east-2a. - // - // AvailabilityZones is a required field - AvailabilityZones []*string `locationName:"AvailabilityZone" locationNameList:"AvailabilityZone" type:"list" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of one or more snapshots. For example, snap-1234567890abcdef0. - // - // SourceSnapshotIds is a required field - SourceSnapshotIds []*string `locationName:"SourceSnapshotId" locationNameList:"SnapshotId" type:"list" required:"true"` -} - -// String returns the string representation -func (s DisableFastSnapshotRestoresInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableFastSnapshotRestoresInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisableFastSnapshotRestoresInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisableFastSnapshotRestoresInput"} - if s.AvailabilityZones == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZones")) - } - if s.SourceSnapshotIds == nil { - invalidParams.Add(request.NewErrParamRequired("SourceSnapshotIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZones sets the AvailabilityZones field's value. -func (s *DisableFastSnapshotRestoresInput) SetAvailabilityZones(v []*string) *DisableFastSnapshotRestoresInput { - s.AvailabilityZones = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DisableFastSnapshotRestoresInput) SetDryRun(v bool) *DisableFastSnapshotRestoresInput { - s.DryRun = &v - return s -} - -// SetSourceSnapshotIds sets the SourceSnapshotIds field's value. -func (s *DisableFastSnapshotRestoresInput) SetSourceSnapshotIds(v []*string) *DisableFastSnapshotRestoresInput { - s.SourceSnapshotIds = v - return s -} - -type DisableFastSnapshotRestoresOutput struct { - _ struct{} `type:"structure"` - - // Information about the snapshots for which fast snapshot restores were successfully - // disabled. - Successful []*DisableFastSnapshotRestoreSuccessItem `locationName:"successful" locationNameList:"item" type:"list"` - - // Information about the snapshots for which fast snapshot restores could not - // be disabled. - Unsuccessful []*DisableFastSnapshotRestoreErrorItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DisableFastSnapshotRestoresOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableFastSnapshotRestoresOutput) GoString() string { - return s.String() -} - -// SetSuccessful sets the Successful field's value. -func (s *DisableFastSnapshotRestoresOutput) SetSuccessful(v []*DisableFastSnapshotRestoreSuccessItem) *DisableFastSnapshotRestoresOutput { - s.Successful = v - return s -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DisableFastSnapshotRestoresOutput) SetUnsuccessful(v []*DisableFastSnapshotRestoreErrorItem) *DisableFastSnapshotRestoresOutput { - s.Unsuccessful = v - return s -} - -type DisableTransitGatewayRouteTablePropagationInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` - - // The ID of the propagation route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DisableTransitGatewayRouteTablePropagationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableTransitGatewayRouteTablePropagationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisableTransitGatewayRouteTablePropagationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisableTransitGatewayRouteTablePropagationInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DisableTransitGatewayRouteTablePropagationInput) SetDryRun(v bool) *DisableTransitGatewayRouteTablePropagationInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *DisableTransitGatewayRouteTablePropagationInput) SetTransitGatewayAttachmentId(v string) *DisableTransitGatewayRouteTablePropagationInput { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *DisableTransitGatewayRouteTablePropagationInput) SetTransitGatewayRouteTableId(v string) *DisableTransitGatewayRouteTablePropagationInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type DisableTransitGatewayRouteTablePropagationOutput struct { - _ struct{} `type:"structure"` - - // Information about route propagation. - Propagation *TransitGatewayPropagation `locationName:"propagation" type:"structure"` -} - -// String returns the string representation -func (s DisableTransitGatewayRouteTablePropagationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableTransitGatewayRouteTablePropagationOutput) GoString() string { - return s.String() -} - -// SetPropagation sets the Propagation field's value. -func (s *DisableTransitGatewayRouteTablePropagationOutput) SetPropagation(v *TransitGatewayPropagation) *DisableTransitGatewayRouteTablePropagationOutput { - s.Propagation = v - return s -} - -// Contains the parameters for DisableVgwRoutePropagation. -type DisableVgwRoutePropagationInput struct { - _ struct{} `type:"structure"` - - // The ID of the virtual private gateway. - // - // GatewayId is a required field - GatewayId *string `type:"string" required:"true"` - - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DisableVgwRoutePropagationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableVgwRoutePropagationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisableVgwRoutePropagationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisableVgwRoutePropagationInput"} - if s.GatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("GatewayId")) - } - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetGatewayId sets the GatewayId field's value. -func (s *DisableVgwRoutePropagationInput) SetGatewayId(v string) *DisableVgwRoutePropagationInput { - s.GatewayId = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *DisableVgwRoutePropagationInput) SetRouteTableId(v string) *DisableVgwRoutePropagationInput { - s.RouteTableId = &v - return s -} - -type DisableVgwRoutePropagationOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DisableVgwRoutePropagationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableVgwRoutePropagationOutput) GoString() string { - return s.String() -} - -type DisableVpcClassicLinkDnsSupportInput struct { - _ struct{} `type:"structure"` - - // The ID of the VPC. - VpcId *string `type:"string"` -} - -// String returns the string representation -func (s DisableVpcClassicLinkDnsSupportInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableVpcClassicLinkDnsSupportInput) GoString() string { - return s.String() -} - -// SetVpcId sets the VpcId field's value. -func (s *DisableVpcClassicLinkDnsSupportInput) SetVpcId(v string) *DisableVpcClassicLinkDnsSupportInput { - s.VpcId = &v - return s -} - -type DisableVpcClassicLinkDnsSupportOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s DisableVpcClassicLinkDnsSupportOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableVpcClassicLinkDnsSupportOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *DisableVpcClassicLinkDnsSupportOutput) SetReturn(v bool) *DisableVpcClassicLinkDnsSupportOutput { - s.Return = &v - return s -} - -type DisableVpcClassicLinkInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DisableVpcClassicLinkInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableVpcClassicLinkInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisableVpcClassicLinkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisableVpcClassicLinkInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DisableVpcClassicLinkInput) SetDryRun(v bool) *DisableVpcClassicLinkInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DisableVpcClassicLinkInput) SetVpcId(v string) *DisableVpcClassicLinkInput { - s.VpcId = &v - return s -} - -type DisableVpcClassicLinkOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s DisableVpcClassicLinkOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisableVpcClassicLinkOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *DisableVpcClassicLinkOutput) SetReturn(v bool) *DisableVpcClassicLinkOutput { - s.Return = &v - return s -} - -type DisassociateAddressInput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] The association ID. Required for EC2-VPC. - AssociationId *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // [EC2-Classic] The Elastic IP address. Required for EC2-Classic. - PublicIp *string `type:"string"` -} - -// String returns the string representation -func (s DisassociateAddressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateAddressInput) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateAddressInput) SetAssociationId(v string) *DisassociateAddressInput { - s.AssociationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DisassociateAddressInput) SetDryRun(v bool) *DisassociateAddressInput { - s.DryRun = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *DisassociateAddressInput) SetPublicIp(v string) *DisassociateAddressInput { - s.PublicIp = &v - return s -} - -type DisassociateAddressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DisassociateAddressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateAddressOutput) GoString() string { - return s.String() -} - -type DisassociateClientVpnTargetNetworkInput struct { - _ struct{} `type:"structure"` - - // The ID of the target network association. - // - // AssociationId is a required field - AssociationId *string `type:"string" required:"true"` - - // The ID of the Client VPN endpoint from which to disassociate the target network. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s DisassociateClientVpnTargetNetworkInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateClientVpnTargetNetworkInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateClientVpnTargetNetworkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateClientVpnTargetNetworkInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateClientVpnTargetNetworkInput) SetAssociationId(v string) *DisassociateClientVpnTargetNetworkInput { - s.AssociationId = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *DisassociateClientVpnTargetNetworkInput) SetClientVpnEndpointId(v string) *DisassociateClientVpnTargetNetworkInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DisassociateClientVpnTargetNetworkInput) SetDryRun(v bool) *DisassociateClientVpnTargetNetworkInput { - s.DryRun = &v - return s -} - -type DisassociateClientVpnTargetNetworkOutput struct { - _ struct{} `type:"structure"` - - // The ID of the target network association. - AssociationId *string `locationName:"associationId" type:"string"` - - // The current state of the target network association. - Status *AssociationStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s DisassociateClientVpnTargetNetworkOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateClientVpnTargetNetworkOutput) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateClientVpnTargetNetworkOutput) SetAssociationId(v string) *DisassociateClientVpnTargetNetworkOutput { - s.AssociationId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *DisassociateClientVpnTargetNetworkOutput) SetStatus(v *AssociationStatus) *DisassociateClientVpnTargetNetworkOutput { - s.Status = v - return s -} - -type DisassociateIamInstanceProfileInput struct { - _ struct{} `type:"structure"` - - // The ID of the IAM instance profile association. - // - // AssociationId is a required field - AssociationId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DisassociateIamInstanceProfileInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateIamInstanceProfileInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateIamInstanceProfileInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateIamInstanceProfileInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateIamInstanceProfileInput) SetAssociationId(v string) *DisassociateIamInstanceProfileInput { - s.AssociationId = &v - return s -} - -type DisassociateIamInstanceProfileOutput struct { - _ struct{} `type:"structure"` - - // Information about the IAM instance profile association. - IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` -} - -// String returns the string representation -func (s DisassociateIamInstanceProfileOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateIamInstanceProfileOutput) GoString() string { - return s.String() -} - -// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. -func (s *DisassociateIamInstanceProfileOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *DisassociateIamInstanceProfileOutput { - s.IamInstanceProfileAssociation = v - return s -} - -type DisassociateRouteTableInput struct { - _ struct{} `type:"structure"` - - // The association ID representing the current association between the route - // table and subnet. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s DisassociateRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateRouteTableInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateRouteTableInput) SetAssociationId(v string) *DisassociateRouteTableInput { - s.AssociationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DisassociateRouteTableInput) SetDryRun(v bool) *DisassociateRouteTableInput { - s.DryRun = &v - return s -} - -type DisassociateRouteTableOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DisassociateRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateRouteTableOutput) GoString() string { - return s.String() -} - -type DisassociateSubnetCidrBlockInput struct { - _ struct{} `type:"structure"` - - // The association ID for the CIDR block. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DisassociateSubnetCidrBlockInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateSubnetCidrBlockInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateSubnetCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateSubnetCidrBlockInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateSubnetCidrBlockInput) SetAssociationId(v string) *DisassociateSubnetCidrBlockInput { - s.AssociationId = &v - return s -} - -type DisassociateSubnetCidrBlockOutput struct { - _ struct{} `type:"structure"` - - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` -} - -// String returns the string representation -func (s DisassociateSubnetCidrBlockOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateSubnetCidrBlockOutput) GoString() string { - return s.String() -} - -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *DisassociateSubnetCidrBlockOutput) SetIpv6CidrBlockAssociation(v *SubnetIpv6CidrBlockAssociation) *DisassociateSubnetCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *DisassociateSubnetCidrBlockOutput) SetSubnetId(v string) *DisassociateSubnetCidrBlockOutput { - s.SubnetId = &v - return s -} - -type DisassociateTransitGatewayRouteTableInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s DisassociateTransitGatewayRouteTableInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateTransitGatewayRouteTableInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateTransitGatewayRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateTransitGatewayRouteTableInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DisassociateTransitGatewayRouteTableInput) SetDryRun(v bool) *DisassociateTransitGatewayRouteTableInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *DisassociateTransitGatewayRouteTableInput) SetTransitGatewayAttachmentId(v string) *DisassociateTransitGatewayRouteTableInput { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *DisassociateTransitGatewayRouteTableInput) SetTransitGatewayRouteTableId(v string) *DisassociateTransitGatewayRouteTableInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type DisassociateTransitGatewayRouteTableOutput struct { - _ struct{} `type:"structure"` - - // Information about the association. - Association *TransitGatewayAssociation `locationName:"association" type:"structure"` -} - -// String returns the string representation -func (s DisassociateTransitGatewayRouteTableOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateTransitGatewayRouteTableOutput) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *DisassociateTransitGatewayRouteTableOutput) SetAssociation(v *TransitGatewayAssociation) *DisassociateTransitGatewayRouteTableOutput { - s.Association = v - return s -} - -type DisassociateVpcCidrBlockInput struct { - _ struct{} `type:"structure"` - - // The association ID for the CIDR block. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` -} - -// String returns the string representation -func (s DisassociateVpcCidrBlockInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateVpcCidrBlockInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateVpcCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateVpcCidrBlockInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateVpcCidrBlockInput) SetAssociationId(v string) *DisassociateVpcCidrBlockInput { - s.AssociationId = &v - return s -} - -type DisassociateVpcCidrBlockOutput struct { - _ struct{} `type:"structure"` - - // Information about the IPv4 CIDR block association. - CidrBlockAssociation *VpcCidrBlockAssociation `locationName:"cidrBlockAssociation" type:"structure"` - - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s DisassociateVpcCidrBlockOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DisassociateVpcCidrBlockOutput) GoString() string { - return s.String() -} - -// SetCidrBlockAssociation sets the CidrBlockAssociation field's value. -func (s *DisassociateVpcCidrBlockOutput) SetCidrBlockAssociation(v *VpcCidrBlockAssociation) *DisassociateVpcCidrBlockOutput { - s.CidrBlockAssociation = v - return s -} - -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *DisassociateVpcCidrBlockOutput) SetIpv6CidrBlockAssociation(v *VpcIpv6CidrBlockAssociation) *DisassociateVpcCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DisassociateVpcCidrBlockOutput) SetVpcId(v string) *DisassociateVpcCidrBlockOutput { - s.VpcId = &v - return s -} - -// Describes a disk image. -type DiskImage struct { - _ struct{} `type:"structure"` - - // A description of the disk image. - Description *string `type:"string"` - - // Information about the disk image. - Image *DiskImageDetail `type:"structure"` - - // Information about the volume. - Volume *VolumeDetail `type:"structure"` -} - -// String returns the string representation -func (s DiskImage) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DiskImage) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DiskImage) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DiskImage"} - if s.Image != nil { - if err := s.Image.Validate(); err != nil { - invalidParams.AddNested("Image", err.(request.ErrInvalidParams)) - } - } - if s.Volume != nil { - if err := s.Volume.Validate(); err != nil { - invalidParams.AddNested("Volume", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *DiskImage) SetDescription(v string) *DiskImage { - s.Description = &v - return s -} - -// SetImage sets the Image field's value. -func (s *DiskImage) SetImage(v *DiskImageDetail) *DiskImage { - s.Image = v - return s -} - -// SetVolume sets the Volume field's value. -func (s *DiskImage) SetVolume(v *VolumeDetail) *DiskImage { - s.Volume = v - return s -} - -// Describes a disk image. -type DiskImageDescription struct { - _ struct{} `type:"structure"` - - // The checksum computed for the disk image. - Checksum *string `locationName:"checksum" type:"string"` - - // The disk image format. - Format *string `locationName:"format" type:"string" enum:"DiskImageFormat"` - - // A presigned URL for the import manifest stored in Amazon S3. For information - // about creating a presigned URL for an Amazon S3 object, read the "Query String - // Request Authentication Alternative" section of the Authenticating REST Requests - // (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) - // topic in the Amazon Simple Storage Service Developer Guide. - // - // For information about the import manifest referenced by this API action, - // see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). - ImportManifestUrl *string `locationName:"importManifestUrl" type:"string"` - - // The size of the disk image, in GiB. - Size *int64 `locationName:"size" type:"long"` -} - -// String returns the string representation -func (s DiskImageDescription) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DiskImageDescription) GoString() string { - return s.String() -} - -// SetChecksum sets the Checksum field's value. -func (s *DiskImageDescription) SetChecksum(v string) *DiskImageDescription { - s.Checksum = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *DiskImageDescription) SetFormat(v string) *DiskImageDescription { - s.Format = &v - return s -} - -// SetImportManifestUrl sets the ImportManifestUrl field's value. -func (s *DiskImageDescription) SetImportManifestUrl(v string) *DiskImageDescription { - s.ImportManifestUrl = &v - return s -} - -// SetSize sets the Size field's value. -func (s *DiskImageDescription) SetSize(v int64) *DiskImageDescription { - s.Size = &v - return s -} - -// Describes a disk image. -type DiskImageDetail struct { - _ struct{} `type:"structure"` - - // The size of the disk image, in GiB. - // - // Bytes is a required field - Bytes *int64 `locationName:"bytes" type:"long" required:"true"` - - // The disk image format. - // - // Format is a required field - Format *string `locationName:"format" type:"string" required:"true" enum:"DiskImageFormat"` - - // A presigned URL for the import manifest stored in Amazon S3 and presented - // here as an Amazon S3 presigned URL. For information about creating a presigned - // URL for an Amazon S3 object, read the "Query String Request Authentication - // Alternative" section of the Authenticating REST Requests (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) - // topic in the Amazon Simple Storage Service Developer Guide. - // - // For information about the import manifest referenced by this API action, - // see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). - // - // ImportManifestUrl is a required field - ImportManifestUrl *string `locationName:"importManifestUrl" type:"string" required:"true"` -} - -// String returns the string representation -func (s DiskImageDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DiskImageDetail) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DiskImageDetail) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DiskImageDetail"} - if s.Bytes == nil { - invalidParams.Add(request.NewErrParamRequired("Bytes")) - } - if s.Format == nil { - invalidParams.Add(request.NewErrParamRequired("Format")) - } - if s.ImportManifestUrl == nil { - invalidParams.Add(request.NewErrParamRequired("ImportManifestUrl")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBytes sets the Bytes field's value. -func (s *DiskImageDetail) SetBytes(v int64) *DiskImageDetail { - s.Bytes = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *DiskImageDetail) SetFormat(v string) *DiskImageDetail { - s.Format = &v - return s -} - -// SetImportManifestUrl sets the ImportManifestUrl field's value. -func (s *DiskImageDetail) SetImportManifestUrl(v string) *DiskImageDetail { - s.ImportManifestUrl = &v - return s -} - -// Describes a disk image volume. -type DiskImageVolumeDescription struct { - _ struct{} `type:"structure"` - - // The volume identifier. - Id *string `locationName:"id" type:"string"` - - // The size of the volume, in GiB. - Size *int64 `locationName:"size" type:"long"` -} - -// String returns the string representation -func (s DiskImageVolumeDescription) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DiskImageVolumeDescription) GoString() string { - return s.String() -} - -// SetId sets the Id field's value. -func (s *DiskImageVolumeDescription) SetId(v string) *DiskImageVolumeDescription { - s.Id = &v - return s -} - -// SetSize sets the Size field's value. -func (s *DiskImageVolumeDescription) SetSize(v int64) *DiskImageVolumeDescription { - s.Size = &v - return s -} - -// Describes the disk. -type DiskInfo struct { - _ struct{} `type:"structure"` - - // The number of disks with this configuration. - Count *int64 `locationName:"count" type:"integer"` - - // The size of the disk in GiB. - SizeInGB *int64 `locationName:"sizeInGB" type:"long"` - - // The type of disk. - Type *string `locationName:"type" type:"string" enum:"DiskType"` -} - -// String returns the string representation -func (s DiskInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DiskInfo) GoString() string { - return s.String() -} - -// SetCount sets the Count field's value. -func (s *DiskInfo) SetCount(v int64) *DiskInfo { - s.Count = &v - return s -} - -// SetSizeInGB sets the SizeInGB field's value. -func (s *DiskInfo) SetSizeInGB(v int64) *DiskInfo { - s.SizeInGB = &v - return s -} - -// SetType sets the Type field's value. -func (s *DiskInfo) SetType(v string) *DiskInfo { - s.Type = &v - return s -} - -// Describes a DNS entry. -type DnsEntry struct { - _ struct{} `type:"structure"` - - // The DNS name. - DnsName *string `locationName:"dnsName" type:"string"` - - // The ID of the private hosted zone. - HostedZoneId *string `locationName:"hostedZoneId" type:"string"` -} - -// String returns the string representation -func (s DnsEntry) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DnsEntry) GoString() string { - return s.String() -} - -// SetDnsName sets the DnsName field's value. -func (s *DnsEntry) SetDnsName(v string) *DnsEntry { - s.DnsName = &v - return s -} - -// SetHostedZoneId sets the HostedZoneId field's value. -func (s *DnsEntry) SetHostedZoneId(v string) *DnsEntry { - s.HostedZoneId = &v - return s -} - -// Information about the DNS server to be used. -type DnsServersOptionsModifyStructure struct { - _ struct{} `type:"structure"` - - // The IPv4 address range, in CIDR notation, of the DNS servers to be used. - // You can specify up to two DNS servers. Ensure that the DNS servers can be - // reached by the clients. The specified values overwrite the existing values. - CustomDnsServers []*string `locationNameList:"item" type:"list"` - - // Indicates whether DNS servers should be used. Specify False to delete the - // existing DNS servers. - Enabled *bool `type:"boolean"` -} - -// String returns the string representation -func (s DnsServersOptionsModifyStructure) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DnsServersOptionsModifyStructure) GoString() string { - return s.String() -} - -// SetCustomDnsServers sets the CustomDnsServers field's value. -func (s *DnsServersOptionsModifyStructure) SetCustomDnsServers(v []*string) *DnsServersOptionsModifyStructure { - s.CustomDnsServers = v - return s -} - -// SetEnabled sets the Enabled field's value. -func (s *DnsServersOptionsModifyStructure) SetEnabled(v bool) *DnsServersOptionsModifyStructure { - s.Enabled = &v - return s -} - -// Describes a block device for an EBS volume. -type EbsBlockDevice struct { - _ struct{} `type:"structure"` - - // Indicates whether the EBS volume is deleted on instance termination. For - // more information, see Preserving Amazon EBS Volumes on Instance Termination - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination) - // in the Amazon Elastic Compute Cloud User Guide. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // Indicates whether the encryption state of an EBS volume is changed while - // being restored from a backing snapshot. The effect of setting the encryption - // state to true depends on the volume origin (new or from a snapshot), starting - // encryption state, ownership, and whether encryption by default is enabled. - // For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-parameters) - // in the Amazon Elastic Compute Cloud User Guide. - // - // In no case can you remove encryption from an encrypted volume. - // - // Encrypted volumes can only be attached to instances that support Amazon EBS - // encryption. For more information, see Supported Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances). - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The number of I/O operations per second (IOPS) that the volume supports. - // For io1 volumes, this represents the number of IOPS that are provisioned - // for the volume. For gp2 volumes, this represents the baseline performance - // of the volume and the rate at which the volume accumulates I/O credits for - // bursting. For more information, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Constraints: Range is 100-16,000 IOPS for gp2 volumes and 100 to 64,000IOPS - // for io1 volumes in most Regions. Maximum io1 IOPS of 64,000 is guaranteed - // only on Nitro-based instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). - // Other instance families guarantee performance up to 32,000 IOPS. For more - // information, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Condition: This parameter is required for requests to create io1 volumes; - // it is not used in requests to create gp2, st1, sc1, or standard volumes. - Iops *int64 `locationName:"iops" type:"integer"` - - // Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer managed - // CMK under which the EBS volume is encrypted. - // - // This parameter is only supported on BlockDeviceMapping objects called by - // RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), - // RequestSpotFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html), - // and RequestSpotInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html). - KmsKeyId *string `type:"string"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The size of the volume, in GiB. - // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - // - // Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned - // IOPS SSD (io1), 500-16384 for Throughput Optimized HDD (st1), 500-16384 for - // Cold HDD (sc1), and 1-1024 for Magnetic (standard) volumes. If you specify - // a snapshot, the volume size must be equal to or larger than the snapshot - // size. - VolumeSize *int64 `locationName:"volumeSize" type:"integer"` - - // The volume type. If you set the type to io1, you must also specify the IOPS - // that the volume supports. - // - // Default: gp2 - VolumeType *string `locationName:"volumeType" type:"string" enum:"VolumeType"` -} - -// String returns the string representation -func (s EbsBlockDevice) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EbsBlockDevice) GoString() string { - return s.String() -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *EbsBlockDevice) SetDeleteOnTermination(v bool) *EbsBlockDevice { - s.DeleteOnTermination = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *EbsBlockDevice) SetEncrypted(v bool) *EbsBlockDevice { - s.Encrypted = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *EbsBlockDevice) SetIops(v int64) *EbsBlockDevice { - s.Iops = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *EbsBlockDevice) SetKmsKeyId(v string) *EbsBlockDevice { - s.KmsKeyId = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *EbsBlockDevice) SetSnapshotId(v string) *EbsBlockDevice { - s.SnapshotId = &v - return s -} - -// SetVolumeSize sets the VolumeSize field's value. -func (s *EbsBlockDevice) SetVolumeSize(v int64) *EbsBlockDevice { - s.VolumeSize = &v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *EbsBlockDevice) SetVolumeType(v string) *EbsBlockDevice { - s.VolumeType = &v - return s -} - -// Describes the Amazon EBS features supported by the instance type. -type EbsInfo struct { - _ struct{} `type:"structure"` - - // Indicates that the instance type is Amazon EBS-optimized. For more information, - // see Amazon EBS-Optimized Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html) - // in Amazon EC2 User Guide for Linux Instances. - EbsOptimizedSupport *string `locationName:"ebsOptimizedSupport" type:"string" enum:"EbsOptimizedSupport"` - - // Indicates whether Amazon EBS encryption is supported. - EncryptionSupport *string `locationName:"encryptionSupport" type:"string" enum:"EbsEncryptionSupport"` -} - -// String returns the string representation -func (s EbsInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EbsInfo) GoString() string { - return s.String() -} - -// SetEbsOptimizedSupport sets the EbsOptimizedSupport field's value. -func (s *EbsInfo) SetEbsOptimizedSupport(v string) *EbsInfo { - s.EbsOptimizedSupport = &v - return s -} - -// SetEncryptionSupport sets the EncryptionSupport field's value. -func (s *EbsInfo) SetEncryptionSupport(v string) *EbsInfo { - s.EncryptionSupport = &v - return s -} - -// Describes a parameter used to set up an EBS volume in a block device mapping. -type EbsInstanceBlockDevice struct { - _ struct{} `type:"structure"` - - // The time stamp when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` - - // Indicates whether the volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The attachment state. - Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` - - // The ID of the EBS volume. - VolumeId *string `locationName:"volumeId" type:"string"` -} - -// String returns the string representation -func (s EbsInstanceBlockDevice) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EbsInstanceBlockDevice) GoString() string { - return s.String() -} - -// SetAttachTime sets the AttachTime field's value. -func (s *EbsInstanceBlockDevice) SetAttachTime(v time.Time) *EbsInstanceBlockDevice { - s.AttachTime = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *EbsInstanceBlockDevice) SetDeleteOnTermination(v bool) *EbsInstanceBlockDevice { - s.DeleteOnTermination = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *EbsInstanceBlockDevice) SetStatus(v string) *EbsInstanceBlockDevice { - s.Status = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *EbsInstanceBlockDevice) SetVolumeId(v string) *EbsInstanceBlockDevice { - s.VolumeId = &v - return s -} - -// Describes information used to set up an EBS volume specified in a block device -// mapping. -type EbsInstanceBlockDeviceSpecification struct { - _ struct{} `type:"structure"` - - // Indicates whether the volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The ID of the EBS volume. - VolumeId *string `locationName:"volumeId" type:"string"` -} - -// String returns the string representation -func (s EbsInstanceBlockDeviceSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EbsInstanceBlockDeviceSpecification) GoString() string { - return s.String() -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *EbsInstanceBlockDeviceSpecification) SetDeleteOnTermination(v bool) *EbsInstanceBlockDeviceSpecification { - s.DeleteOnTermination = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *EbsInstanceBlockDeviceSpecification) SetVolumeId(v string) *EbsInstanceBlockDeviceSpecification { - s.VolumeId = &v - return s -} - -// Describes an egress-only internet gateway. -type EgressOnlyInternetGateway struct { - _ struct{} `type:"structure"` - - // Information about the attachment of the egress-only internet gateway. - Attachments []*InternetGatewayAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` - - // The ID of the egress-only internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` -} - -// String returns the string representation -func (s EgressOnlyInternetGateway) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EgressOnlyInternetGateway) GoString() string { - return s.String() -} - -// SetAttachments sets the Attachments field's value. -func (s *EgressOnlyInternetGateway) SetAttachments(v []*InternetGatewayAttachment) *EgressOnlyInternetGateway { - s.Attachments = v - return s -} - -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *EgressOnlyInternetGateway) SetEgressOnlyInternetGatewayId(v string) *EgressOnlyInternetGateway { - s.EgressOnlyInternetGatewayId = &v - return s -} - -// Describes the association between an instance and an Elastic Graphics accelerator. -type ElasticGpuAssociation struct { - _ struct{} `type:"structure"` - - // The ID of the association. - ElasticGpuAssociationId *string `locationName:"elasticGpuAssociationId" type:"string"` - - // The state of the association between the instance and the Elastic Graphics - // accelerator. - ElasticGpuAssociationState *string `locationName:"elasticGpuAssociationState" type:"string"` - - // The time the Elastic Graphics accelerator was associated with the instance. - ElasticGpuAssociationTime *string `locationName:"elasticGpuAssociationTime" type:"string"` - - // The ID of the Elastic Graphics accelerator. - ElasticGpuId *string `locationName:"elasticGpuId" type:"string"` -} - -// String returns the string representation -func (s ElasticGpuAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticGpuAssociation) GoString() string { - return s.String() -} - -// SetElasticGpuAssociationId sets the ElasticGpuAssociationId field's value. -func (s *ElasticGpuAssociation) SetElasticGpuAssociationId(v string) *ElasticGpuAssociation { - s.ElasticGpuAssociationId = &v - return s -} - -// SetElasticGpuAssociationState sets the ElasticGpuAssociationState field's value. -func (s *ElasticGpuAssociation) SetElasticGpuAssociationState(v string) *ElasticGpuAssociation { - s.ElasticGpuAssociationState = &v - return s -} - -// SetElasticGpuAssociationTime sets the ElasticGpuAssociationTime field's value. -func (s *ElasticGpuAssociation) SetElasticGpuAssociationTime(v string) *ElasticGpuAssociation { - s.ElasticGpuAssociationTime = &v - return s -} - -// SetElasticGpuId sets the ElasticGpuId field's value. -func (s *ElasticGpuAssociation) SetElasticGpuId(v string) *ElasticGpuAssociation { - s.ElasticGpuId = &v - return s -} - -// Describes the status of an Elastic Graphics accelerator. -type ElasticGpuHealth struct { - _ struct{} `type:"structure"` - - // The health status. - Status *string `locationName:"status" type:"string" enum:"ElasticGpuStatus"` -} - -// String returns the string representation -func (s ElasticGpuHealth) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticGpuHealth) GoString() string { - return s.String() -} - -// SetStatus sets the Status field's value. -func (s *ElasticGpuHealth) SetStatus(v string) *ElasticGpuHealth { - s.Status = &v - return s -} - -// A specification for an Elastic Graphics accelerator. -type ElasticGpuSpecification struct { - _ struct{} `type:"structure"` - - // The type of Elastic Graphics accelerator. - // - // Type is a required field - Type *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ElasticGpuSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticGpuSpecification) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ElasticGpuSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ElasticGpuSpecification"} - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetType sets the Type field's value. -func (s *ElasticGpuSpecification) SetType(v string) *ElasticGpuSpecification { - s.Type = &v - return s -} - -// Describes an elastic GPU. -type ElasticGpuSpecificationResponse struct { - _ struct{} `type:"structure"` - - // The elastic GPU type. - Type *string `locationName:"type" type:"string"` -} - -// String returns the string representation -func (s ElasticGpuSpecificationResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticGpuSpecificationResponse) GoString() string { - return s.String() -} - -// SetType sets the Type field's value. -func (s *ElasticGpuSpecificationResponse) SetType(v string) *ElasticGpuSpecificationResponse { - s.Type = &v - return s -} - -// Describes an Elastic Graphics accelerator. -type ElasticGpus struct { - _ struct{} `type:"structure"` - - // The Availability Zone in the which the Elastic Graphics accelerator resides. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The status of the Elastic Graphics accelerator. - ElasticGpuHealth *ElasticGpuHealth `locationName:"elasticGpuHealth" type:"structure"` - - // The ID of the Elastic Graphics accelerator. - ElasticGpuId *string `locationName:"elasticGpuId" type:"string"` - - // The state of the Elastic Graphics accelerator. - ElasticGpuState *string `locationName:"elasticGpuState" type:"string" enum:"ElasticGpuState"` - - // The type of Elastic Graphics accelerator. - ElasticGpuType *string `locationName:"elasticGpuType" type:"string"` - - // The ID of the instance to which the Elastic Graphics accelerator is attached. - InstanceId *string `locationName:"instanceId" type:"string"` -} - -// String returns the string representation -func (s ElasticGpus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticGpus) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ElasticGpus) SetAvailabilityZone(v string) *ElasticGpus { - s.AvailabilityZone = &v - return s -} - -// SetElasticGpuHealth sets the ElasticGpuHealth field's value. -func (s *ElasticGpus) SetElasticGpuHealth(v *ElasticGpuHealth) *ElasticGpus { - s.ElasticGpuHealth = v - return s -} - -// SetElasticGpuId sets the ElasticGpuId field's value. -func (s *ElasticGpus) SetElasticGpuId(v string) *ElasticGpus { - s.ElasticGpuId = &v - return s -} - -// SetElasticGpuState sets the ElasticGpuState field's value. -func (s *ElasticGpus) SetElasticGpuState(v string) *ElasticGpus { - s.ElasticGpuState = &v - return s -} - -// SetElasticGpuType sets the ElasticGpuType field's value. -func (s *ElasticGpus) SetElasticGpuType(v string) *ElasticGpus { - s.ElasticGpuType = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ElasticGpus) SetInstanceId(v string) *ElasticGpus { - s.InstanceId = &v - return s -} - -// Describes an elastic inference accelerator. -type ElasticInferenceAccelerator struct { - _ struct{} `type:"structure"` - - // The type of elastic inference accelerator. The possible values are eia1.small, - // eia1.medium, and eia1.large. - // - // Type is a required field - Type *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ElasticInferenceAccelerator) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticInferenceAccelerator) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ElasticInferenceAccelerator) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ElasticInferenceAccelerator"} - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetType sets the Type field's value. -func (s *ElasticInferenceAccelerator) SetType(v string) *ElasticInferenceAccelerator { - s.Type = &v - return s -} - -// Describes the association between an instance and an elastic inference accelerator. -type ElasticInferenceAcceleratorAssociation struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the elastic inference accelerator. - ElasticInferenceAcceleratorArn *string `locationName:"elasticInferenceAcceleratorArn" type:"string"` - - // The ID of the association. - ElasticInferenceAcceleratorAssociationId *string `locationName:"elasticInferenceAcceleratorAssociationId" type:"string"` - - // The state of the elastic inference accelerator. - ElasticInferenceAcceleratorAssociationState *string `locationName:"elasticInferenceAcceleratorAssociationState" type:"string"` - - // The time at which the elastic inference accelerator is associated with an - // instance. - ElasticInferenceAcceleratorAssociationTime *time.Time `locationName:"elasticInferenceAcceleratorAssociationTime" type:"timestamp"` -} - -// String returns the string representation -func (s ElasticInferenceAcceleratorAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ElasticInferenceAcceleratorAssociation) GoString() string { - return s.String() -} - -// SetElasticInferenceAcceleratorArn sets the ElasticInferenceAcceleratorArn field's value. -func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorArn(v string) *ElasticInferenceAcceleratorAssociation { - s.ElasticInferenceAcceleratorArn = &v - return s -} - -// SetElasticInferenceAcceleratorAssociationId sets the ElasticInferenceAcceleratorAssociationId field's value. -func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorAssociationId(v string) *ElasticInferenceAcceleratorAssociation { - s.ElasticInferenceAcceleratorAssociationId = &v - return s -} - -// SetElasticInferenceAcceleratorAssociationState sets the ElasticInferenceAcceleratorAssociationState field's value. -func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorAssociationState(v string) *ElasticInferenceAcceleratorAssociation { - s.ElasticInferenceAcceleratorAssociationState = &v - return s -} - -// SetElasticInferenceAcceleratorAssociationTime sets the ElasticInferenceAcceleratorAssociationTime field's value. -func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorAssociationTime(v time.Time) *ElasticInferenceAcceleratorAssociation { - s.ElasticInferenceAcceleratorAssociationTime = &v - return s -} - -type EnableEbsEncryptionByDefaultInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s EnableEbsEncryptionByDefaultInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableEbsEncryptionByDefaultInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *EnableEbsEncryptionByDefaultInput) SetDryRun(v bool) *EnableEbsEncryptionByDefaultInput { - s.DryRun = &v - return s -} - -type EnableEbsEncryptionByDefaultOutput struct { - _ struct{} `type:"structure"` - - // The updated status of encryption by default. - EbsEncryptionByDefault *bool `locationName:"ebsEncryptionByDefault" type:"boolean"` -} - -// String returns the string representation -func (s EnableEbsEncryptionByDefaultOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableEbsEncryptionByDefaultOutput) GoString() string { - return s.String() -} - -// SetEbsEncryptionByDefault sets the EbsEncryptionByDefault field's value. -func (s *EnableEbsEncryptionByDefaultOutput) SetEbsEncryptionByDefault(v bool) *EnableEbsEncryptionByDefaultOutput { - s.EbsEncryptionByDefault = &v - return s -} - -// Contains information about the errors that occurred when enabling fast snapshot -// restores. -type EnableFastSnapshotRestoreErrorItem struct { - _ struct{} `type:"structure"` - - // The errors. - FastSnapshotRestoreStateErrors []*EnableFastSnapshotRestoreStateErrorItem `locationName:"fastSnapshotRestoreStateErrorSet" locationNameList:"item" type:"list"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` -} - -// String returns the string representation -func (s EnableFastSnapshotRestoreErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableFastSnapshotRestoreErrorItem) GoString() string { - return s.String() -} - -// SetFastSnapshotRestoreStateErrors sets the FastSnapshotRestoreStateErrors field's value. -func (s *EnableFastSnapshotRestoreErrorItem) SetFastSnapshotRestoreStateErrors(v []*EnableFastSnapshotRestoreStateErrorItem) *EnableFastSnapshotRestoreErrorItem { - s.FastSnapshotRestoreStateErrors = v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *EnableFastSnapshotRestoreErrorItem) SetSnapshotId(v string) *EnableFastSnapshotRestoreErrorItem { - s.SnapshotId = &v - return s -} - -// Describes an error that occurred when enabling fast snapshot restores. -type EnableFastSnapshotRestoreStateError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string"` - - // The error message. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s EnableFastSnapshotRestoreStateError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableFastSnapshotRestoreStateError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *EnableFastSnapshotRestoreStateError) SetCode(v string) *EnableFastSnapshotRestoreStateError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *EnableFastSnapshotRestoreStateError) SetMessage(v string) *EnableFastSnapshotRestoreStateError { - s.Message = &v - return s -} - -// Contains information about an error that occurred when enabling fast snapshot -// restores. -type EnableFastSnapshotRestoreStateErrorItem struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The error. - Error *EnableFastSnapshotRestoreStateError `locationName:"error" type:"structure"` -} - -// String returns the string representation -func (s EnableFastSnapshotRestoreStateErrorItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableFastSnapshotRestoreStateErrorItem) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *EnableFastSnapshotRestoreStateErrorItem) SetAvailabilityZone(v string) *EnableFastSnapshotRestoreStateErrorItem { - s.AvailabilityZone = &v - return s -} - -// SetError sets the Error field's value. -func (s *EnableFastSnapshotRestoreStateErrorItem) SetError(v *EnableFastSnapshotRestoreStateError) *EnableFastSnapshotRestoreStateErrorItem { - s.Error = v - return s -} - -// Describes fast snapshot restores that were successfully enabled. -type EnableFastSnapshotRestoreSuccessItem struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The time at which fast snapshot restores entered the disabled state. - DisabledTime *time.Time `locationName:"disabledTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the disabling state. - DisablingTime *time.Time `locationName:"disablingTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the enabled state. - EnabledTime *time.Time `locationName:"enabledTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the enabling state. - EnablingTime *time.Time `locationName:"enablingTime" type:"timestamp"` - - // The time at which fast snapshot restores entered the optimizing state. - OptimizingTime *time.Time `locationName:"optimizingTime" type:"timestamp"` - - // The alias of the snapshot owner. - OwnerAlias *string `locationName:"ownerAlias" type:"string"` - - // The ID of the AWS account that owns the snapshot. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The state of fast snapshot restores. - State *string `locationName:"state" type:"string" enum:"FastSnapshotRestoreStateCode"` - - // The reason for the state transition. The possible values are as follows: - // - // * Client.UserInitiated - The state successfully transitioned to enabling - // or disabling. - // - // * Client.UserInitiated - Lifecycle state transition - The state successfully - // transitioned to optimizing, enabled, or disabled. - StateTransitionReason *string `locationName:"stateTransitionReason" type:"string"` -} - -// String returns the string representation -func (s EnableFastSnapshotRestoreSuccessItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableFastSnapshotRestoreSuccessItem) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetAvailabilityZone(v string) *EnableFastSnapshotRestoreSuccessItem { - s.AvailabilityZone = &v - return s -} - -// SetDisabledTime sets the DisabledTime field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetDisabledTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { - s.DisabledTime = &v - return s -} - -// SetDisablingTime sets the DisablingTime field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetDisablingTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { - s.DisablingTime = &v - return s -} - -// SetEnabledTime sets the EnabledTime field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetEnabledTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { - s.EnabledTime = &v - return s -} - -// SetEnablingTime sets the EnablingTime field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetEnablingTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { - s.EnablingTime = &v - return s -} - -// SetOptimizingTime sets the OptimizingTime field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetOptimizingTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { - s.OptimizingTime = &v - return s -} - -// SetOwnerAlias sets the OwnerAlias field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetOwnerAlias(v string) *EnableFastSnapshotRestoreSuccessItem { - s.OwnerAlias = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetOwnerId(v string) *EnableFastSnapshotRestoreSuccessItem { - s.OwnerId = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetSnapshotId(v string) *EnableFastSnapshotRestoreSuccessItem { - s.SnapshotId = &v - return s -} - -// SetState sets the State field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetState(v string) *EnableFastSnapshotRestoreSuccessItem { - s.State = &v - return s -} - -// SetStateTransitionReason sets the StateTransitionReason field's value. -func (s *EnableFastSnapshotRestoreSuccessItem) SetStateTransitionReason(v string) *EnableFastSnapshotRestoreSuccessItem { - s.StateTransitionReason = &v - return s -} - -type EnableFastSnapshotRestoresInput struct { - _ struct{} `type:"structure"` - - // One or more Availability Zones. For example, us-east-2a. - // - // AvailabilityZones is a required field - AvailabilityZones []*string `locationName:"AvailabilityZone" locationNameList:"AvailabilityZone" type:"list" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of one or more snapshots. For example, snap-1234567890abcdef0. You - // can specify a snapshot that was shared with you from another AWS account. - // - // SourceSnapshotIds is a required field - SourceSnapshotIds []*string `locationName:"SourceSnapshotId" locationNameList:"SnapshotId" type:"list" required:"true"` -} - -// String returns the string representation -func (s EnableFastSnapshotRestoresInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableFastSnapshotRestoresInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *EnableFastSnapshotRestoresInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableFastSnapshotRestoresInput"} - if s.AvailabilityZones == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZones")) - } - if s.SourceSnapshotIds == nil { - invalidParams.Add(request.NewErrParamRequired("SourceSnapshotIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZones sets the AvailabilityZones field's value. -func (s *EnableFastSnapshotRestoresInput) SetAvailabilityZones(v []*string) *EnableFastSnapshotRestoresInput { - s.AvailabilityZones = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *EnableFastSnapshotRestoresInput) SetDryRun(v bool) *EnableFastSnapshotRestoresInput { - s.DryRun = &v - return s -} - -// SetSourceSnapshotIds sets the SourceSnapshotIds field's value. -func (s *EnableFastSnapshotRestoresInput) SetSourceSnapshotIds(v []*string) *EnableFastSnapshotRestoresInput { - s.SourceSnapshotIds = v - return s -} - -type EnableFastSnapshotRestoresOutput struct { - _ struct{} `type:"structure"` - - // Information about the snapshots for which fast snapshot restores were successfully - // enabled. - Successful []*EnableFastSnapshotRestoreSuccessItem `locationName:"successful" locationNameList:"item" type:"list"` - - // Information about the snapshots for which fast snapshot restores could not - // be enabled. - Unsuccessful []*EnableFastSnapshotRestoreErrorItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s EnableFastSnapshotRestoresOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableFastSnapshotRestoresOutput) GoString() string { - return s.String() -} - -// SetSuccessful sets the Successful field's value. -func (s *EnableFastSnapshotRestoresOutput) SetSuccessful(v []*EnableFastSnapshotRestoreSuccessItem) *EnableFastSnapshotRestoresOutput { - s.Successful = v - return s -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *EnableFastSnapshotRestoresOutput) SetUnsuccessful(v []*EnableFastSnapshotRestoreErrorItem) *EnableFastSnapshotRestoresOutput { - s.Unsuccessful = v - return s -} - -type EnableTransitGatewayRouteTablePropagationInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` - - // The ID of the propagation route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s EnableTransitGatewayRouteTablePropagationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableTransitGatewayRouteTablePropagationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *EnableTransitGatewayRouteTablePropagationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableTransitGatewayRouteTablePropagationInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *EnableTransitGatewayRouteTablePropagationInput) SetDryRun(v bool) *EnableTransitGatewayRouteTablePropagationInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *EnableTransitGatewayRouteTablePropagationInput) SetTransitGatewayAttachmentId(v string) *EnableTransitGatewayRouteTablePropagationInput { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *EnableTransitGatewayRouteTablePropagationInput) SetTransitGatewayRouteTableId(v string) *EnableTransitGatewayRouteTablePropagationInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type EnableTransitGatewayRouteTablePropagationOutput struct { - _ struct{} `type:"structure"` - - // Information about route propagation. - Propagation *TransitGatewayPropagation `locationName:"propagation" type:"structure"` -} - -// String returns the string representation -func (s EnableTransitGatewayRouteTablePropagationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableTransitGatewayRouteTablePropagationOutput) GoString() string { - return s.String() -} - -// SetPropagation sets the Propagation field's value. -func (s *EnableTransitGatewayRouteTablePropagationOutput) SetPropagation(v *TransitGatewayPropagation) *EnableTransitGatewayRouteTablePropagationOutput { - s.Propagation = v - return s -} - -// Contains the parameters for EnableVgwRoutePropagation. -type EnableVgwRoutePropagationInput struct { - _ struct{} `type:"structure"` - - // The ID of the virtual private gateway that is attached to a VPC. The virtual - // private gateway must be attached to the same VPC that the routing tables - // are associated with. - // - // GatewayId is a required field - GatewayId *string `type:"string" required:"true"` - - // The ID of the route table. The routing table must be associated with the - // same VPC that the virtual private gateway is attached to. - // - // RouteTableId is a required field - RouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s EnableVgwRoutePropagationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVgwRoutePropagationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *EnableVgwRoutePropagationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableVgwRoutePropagationInput"} - if s.GatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("GatewayId")) - } - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetGatewayId sets the GatewayId field's value. -func (s *EnableVgwRoutePropagationInput) SetGatewayId(v string) *EnableVgwRoutePropagationInput { - s.GatewayId = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *EnableVgwRoutePropagationInput) SetRouteTableId(v string) *EnableVgwRoutePropagationInput { - s.RouteTableId = &v - return s -} - -type EnableVgwRoutePropagationOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s EnableVgwRoutePropagationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVgwRoutePropagationOutput) GoString() string { - return s.String() -} - -type EnableVolumeIOInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `locationName:"volumeId" type:"string" required:"true"` -} - -// String returns the string representation -func (s EnableVolumeIOInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVolumeIOInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *EnableVolumeIOInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableVolumeIOInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *EnableVolumeIOInput) SetDryRun(v bool) *EnableVolumeIOInput { - s.DryRun = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *EnableVolumeIOInput) SetVolumeId(v string) *EnableVolumeIOInput { - s.VolumeId = &v - return s -} - -type EnableVolumeIOOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s EnableVolumeIOOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVolumeIOOutput) GoString() string { - return s.String() -} - -type EnableVpcClassicLinkDnsSupportInput struct { - _ struct{} `type:"structure"` - - // The ID of the VPC. - VpcId *string `type:"string"` -} - -// String returns the string representation -func (s EnableVpcClassicLinkDnsSupportInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVpcClassicLinkDnsSupportInput) GoString() string { - return s.String() -} - -// SetVpcId sets the VpcId field's value. -func (s *EnableVpcClassicLinkDnsSupportInput) SetVpcId(v string) *EnableVpcClassicLinkDnsSupportInput { - s.VpcId = &v - return s -} - -type EnableVpcClassicLinkDnsSupportOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s EnableVpcClassicLinkDnsSupportOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVpcClassicLinkDnsSupportOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *EnableVpcClassicLinkDnsSupportOutput) SetReturn(v bool) *EnableVpcClassicLinkDnsSupportOutput { - s.Return = &v - return s -} - -type EnableVpcClassicLinkInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s EnableVpcClassicLinkInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVpcClassicLinkInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *EnableVpcClassicLinkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableVpcClassicLinkInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *EnableVpcClassicLinkInput) SetDryRun(v bool) *EnableVpcClassicLinkInput { - s.DryRun = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *EnableVpcClassicLinkInput) SetVpcId(v string) *EnableVpcClassicLinkInput { - s.VpcId = &v - return s -} - -type EnableVpcClassicLinkOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s EnableVpcClassicLinkOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVpcClassicLinkOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *EnableVpcClassicLinkOutput) SetReturn(v bool) *EnableVpcClassicLinkOutput { - s.Return = &v - return s -} - -// Describes an EC2 Fleet or Spot Fleet event. -type EventInformation struct { - _ struct{} `type:"structure"` - - // The description of the event. - EventDescription *string `locationName:"eventDescription" type:"string"` - - // The event. - // - // The following are the error events: - // - // * iamFleetRoleInvalid - The EC2 Fleet or Spot Fleet did not have the required - // permissions either to launch or terminate an instance. - // - // * spotFleetRequestConfigurationInvalid - The configuration is not valid. - // For more information, see the description of the event. - // - // * spotInstanceCountLimitExceeded - You've reached the limit on the number - // of Spot Instances that you can launch. - // - // The following are the fleetRequestChange events: - // - // * active - The EC2 Fleet or Spot Fleet request has been validated and - // Amazon EC2 is attempting to maintain the target number of running Spot - // Instances. - // - // * cancelled - The EC2 Fleet or Spot Fleet request is canceled and has - // no running Spot Instances. The EC2 Fleet or Spot Fleet will be deleted - // two days after its instances were terminated. - // - // * cancelled_running - The EC2 Fleet or Spot Fleet request is canceled - // and does not launch additional Spot Instances. Existing Spot Instances - // continue to run until they are interrupted or terminated. - // - // * cancelled_terminating - The EC2 Fleet or Spot Fleet request is canceled - // and its Spot Instances are terminating. - // - // * expired - The EC2 Fleet or Spot Fleet request has expired. A subsequent - // event indicates that the instances were terminated, if the request was - // created with TerminateInstancesWithExpiration set. - // - // * modify_in_progress - A request to modify the EC2 Fleet or Spot Fleet - // request was accepted and is in progress. - // - // * modify_successful - The EC2 Fleet or Spot Fleet request was modified. - // - // * price_update - The price for a launch configuration was adjusted because - // it was too high. This change is permanent. - // - // * submitted - The EC2 Fleet or Spot Fleet request is being evaluated and - // Amazon EC2 is preparing to launch the target number of Spot Instances. - // - // The following are the instanceChange events: - // - // * launched - A request was fulfilled and a new instance was launched. - // - // * terminated - An instance was terminated by the user. - // - // The following are the Information events: - // - // * launchSpecTemporarilyBlacklisted - The configuration is not valid and - // several attempts to launch instances have failed. For more information, - // see the description of the event. - // - // * launchSpecUnusable - The price in a launch specification is not valid - // because it is below the Spot price or the Spot price is above the On-Demand - // price. - // - // * fleetProgressHalted - The price in every launch specification is not - // valid. A launch specification might become valid if the Spot price changes. - EventSubType *string `locationName:"eventSubType" type:"string"` - - // The ID of the instance. This information is available only for instanceChange - // events. - InstanceId *string `locationName:"instanceId" type:"string"` -} - -// String returns the string representation -func (s EventInformation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EventInformation) GoString() string { - return s.String() -} - -// SetEventDescription sets the EventDescription field's value. -func (s *EventInformation) SetEventDescription(v string) *EventInformation { - s.EventDescription = &v - return s -} - -// SetEventSubType sets the EventSubType field's value. -func (s *EventInformation) SetEventSubType(v string) *EventInformation { - s.EventSubType = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *EventInformation) SetInstanceId(v string) *EventInformation { - s.InstanceId = &v - return s -} - -type ExportClientVpnClientCertificateRevocationListInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s ExportClientVpnClientCertificateRevocationListInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportClientVpnClientCertificateRevocationListInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ExportClientVpnClientCertificateRevocationListInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ExportClientVpnClientCertificateRevocationListInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ExportClientVpnClientCertificateRevocationListInput) SetClientVpnEndpointId(v string) *ExportClientVpnClientCertificateRevocationListInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ExportClientVpnClientCertificateRevocationListInput) SetDryRun(v bool) *ExportClientVpnClientCertificateRevocationListInput { - s.DryRun = &v - return s -} - -type ExportClientVpnClientCertificateRevocationListOutput struct { - _ struct{} `type:"structure"` - - // Information about the client certificate revocation list. - CertificateRevocationList *string `locationName:"certificateRevocationList" type:"string"` - - // The current state of the client certificate revocation list. - Status *ClientCertificateRevocationListStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s ExportClientVpnClientCertificateRevocationListOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportClientVpnClientCertificateRevocationListOutput) GoString() string { - return s.String() -} - -// SetCertificateRevocationList sets the CertificateRevocationList field's value. -func (s *ExportClientVpnClientCertificateRevocationListOutput) SetCertificateRevocationList(v string) *ExportClientVpnClientCertificateRevocationListOutput { - s.CertificateRevocationList = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ExportClientVpnClientCertificateRevocationListOutput) SetStatus(v *ClientCertificateRevocationListStatus) *ExportClientVpnClientCertificateRevocationListOutput { - s.Status = v - return s -} - -type ExportClientVpnClientConfigurationInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s ExportClientVpnClientConfigurationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportClientVpnClientConfigurationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ExportClientVpnClientConfigurationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ExportClientVpnClientConfigurationInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ExportClientVpnClientConfigurationInput) SetClientVpnEndpointId(v string) *ExportClientVpnClientConfigurationInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ExportClientVpnClientConfigurationInput) SetDryRun(v bool) *ExportClientVpnClientConfigurationInput { - s.DryRun = &v - return s -} - -type ExportClientVpnClientConfigurationOutput struct { - _ struct{} `type:"structure"` - - // The contents of the Client VPN endpoint configuration file. - ClientConfiguration *string `locationName:"clientConfiguration" type:"string"` -} - -// String returns the string representation -func (s ExportClientVpnClientConfigurationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportClientVpnClientConfigurationOutput) GoString() string { - return s.String() -} - -// SetClientConfiguration sets the ClientConfiguration field's value. -func (s *ExportClientVpnClientConfigurationOutput) SetClientConfiguration(v string) *ExportClientVpnClientConfigurationOutput { - s.ClientConfiguration = &v - return s -} - -type ExportImageInput struct { - _ struct{} `type:"structure"` - - // Token to enable idempotency for export image requests. - ClientToken *string `type:"string" idempotencyToken:"true"` - - // A description of the image being exported. The maximum length is 255 bytes. - Description *string `type:"string"` - - // The disk image format. - // - // DiskImageFormat is a required field - DiskImageFormat *string `type:"string" required:"true" enum:"DiskImageFormat"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the image. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` - - // The name of the role that grants VM Import/Export permission to export images - // to your S3 bucket. If this parameter is not specified, the default role is - // named 'vmimport'. - RoleName *string `type:"string"` - - // Information about the destination S3 bucket. The bucket must exist and grant - // WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. - // - // S3ExportLocation is a required field - S3ExportLocation *ExportTaskS3LocationRequest `type:"structure" required:"true"` -} - -// String returns the string representation -func (s ExportImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ExportImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ExportImageInput"} - if s.DiskImageFormat == nil { - invalidParams.Add(request.NewErrParamRequired("DiskImageFormat")) - } - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - if s.S3ExportLocation == nil { - invalidParams.Add(request.NewErrParamRequired("S3ExportLocation")) - } - if s.S3ExportLocation != nil { - if err := s.S3ExportLocation.Validate(); err != nil { - invalidParams.AddNested("S3ExportLocation", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *ExportImageInput) SetClientToken(v string) *ExportImageInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ExportImageInput) SetDescription(v string) *ExportImageInput { - s.Description = &v - return s -} - -// SetDiskImageFormat sets the DiskImageFormat field's value. -func (s *ExportImageInput) SetDiskImageFormat(v string) *ExportImageInput { - s.DiskImageFormat = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ExportImageInput) SetDryRun(v bool) *ExportImageInput { - s.DryRun = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ExportImageInput) SetImageId(v string) *ExportImageInput { - s.ImageId = &v - return s -} - -// SetRoleName sets the RoleName field's value. -func (s *ExportImageInput) SetRoleName(v string) *ExportImageInput { - s.RoleName = &v - return s -} - -// SetS3ExportLocation sets the S3ExportLocation field's value. -func (s *ExportImageInput) SetS3ExportLocation(v *ExportTaskS3LocationRequest) *ExportImageInput { - s.S3ExportLocation = v - return s -} - -type ExportImageOutput struct { - _ struct{} `type:"structure"` - - // A description of the image being exported. - Description *string `locationName:"description" type:"string"` - - // The disk image format for the exported image. - DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` - - // The ID of the export image task. - ExportImageTaskId *string `locationName:"exportImageTaskId" type:"string"` - - // The ID of the image. - ImageId *string `locationName:"imageId" type:"string"` - - // The percent complete of the export image task. - Progress *string `locationName:"progress" type:"string"` - - // The name of the role that grants VM Import/Export permission to export images - // to your S3 bucket. - RoleName *string `locationName:"roleName" type:"string"` - - // Information about the destination S3 bucket. - S3ExportLocation *ExportTaskS3Location `locationName:"s3ExportLocation" type:"structure"` - - // The status of the export image task. The possible values are active, completed, - // deleting, and deleted. - Status *string `locationName:"status" type:"string"` - - // The status message for the export image task. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s ExportImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportImageOutput) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ExportImageOutput) SetDescription(v string) *ExportImageOutput { - s.Description = &v - return s -} - -// SetDiskImageFormat sets the DiskImageFormat field's value. -func (s *ExportImageOutput) SetDiskImageFormat(v string) *ExportImageOutput { - s.DiskImageFormat = &v - return s -} - -// SetExportImageTaskId sets the ExportImageTaskId field's value. -func (s *ExportImageOutput) SetExportImageTaskId(v string) *ExportImageOutput { - s.ExportImageTaskId = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ExportImageOutput) SetImageId(v string) *ExportImageOutput { - s.ImageId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *ExportImageOutput) SetProgress(v string) *ExportImageOutput { - s.Progress = &v - return s -} - -// SetRoleName sets the RoleName field's value. -func (s *ExportImageOutput) SetRoleName(v string) *ExportImageOutput { - s.RoleName = &v - return s -} - -// SetS3ExportLocation sets the S3ExportLocation field's value. -func (s *ExportImageOutput) SetS3ExportLocation(v *ExportTaskS3Location) *ExportImageOutput { - s.S3ExportLocation = v - return s -} - -// SetStatus sets the Status field's value. -func (s *ExportImageOutput) SetStatus(v string) *ExportImageOutput { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ExportImageOutput) SetStatusMessage(v string) *ExportImageOutput { - s.StatusMessage = &v - return s -} - -// Describes an export image task. -type ExportImageTask struct { - _ struct{} `type:"structure"` - - // A description of the image being exported. - Description *string `locationName:"description" type:"string"` - - // The ID of the export image task. - ExportImageTaskId *string `locationName:"exportImageTaskId" type:"string"` - - // The ID of the image. - ImageId *string `locationName:"imageId" type:"string"` - - // The percent complete of the export image task. - Progress *string `locationName:"progress" type:"string"` - - // Information about the destination S3 bucket. - S3ExportLocation *ExportTaskS3Location `locationName:"s3ExportLocation" type:"structure"` - - // The status of the export image task. The possible values are active, completed, - // deleting, and deleted. - Status *string `locationName:"status" type:"string"` - - // The status message for the export image task. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s ExportImageTask) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportImageTask) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ExportImageTask) SetDescription(v string) *ExportImageTask { - s.Description = &v - return s -} - -// SetExportImageTaskId sets the ExportImageTaskId field's value. -func (s *ExportImageTask) SetExportImageTaskId(v string) *ExportImageTask { - s.ExportImageTaskId = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ExportImageTask) SetImageId(v string) *ExportImageTask { - s.ImageId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *ExportImageTask) SetProgress(v string) *ExportImageTask { - s.Progress = &v - return s -} - -// SetS3ExportLocation sets the S3ExportLocation field's value. -func (s *ExportImageTask) SetS3ExportLocation(v *ExportTaskS3Location) *ExportImageTask { - s.S3ExportLocation = v - return s -} - -// SetStatus sets the Status field's value. -func (s *ExportImageTask) SetStatus(v string) *ExportImageTask { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ExportImageTask) SetStatusMessage(v string) *ExportImageTask { - s.StatusMessage = &v - return s -} - -// Describes an instance export task. -type ExportTask struct { - _ struct{} `type:"structure"` - - // A description of the resource being exported. - Description *string `locationName:"description" type:"string"` - - // The ID of the export task. - ExportTaskId *string `locationName:"exportTaskId" type:"string"` - - // Information about the export task. - ExportToS3Task *ExportToS3Task `locationName:"exportToS3" type:"structure"` - - // Information about the instance to export. - InstanceExportDetails *InstanceExportDetails `locationName:"instanceExport" type:"structure"` - - // The state of the export task. - State *string `locationName:"state" type:"string" enum:"ExportTaskState"` - - // The status message related to the export task. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s ExportTask) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportTask) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ExportTask) SetDescription(v string) *ExportTask { - s.Description = &v - return s -} - -// SetExportTaskId sets the ExportTaskId field's value. -func (s *ExportTask) SetExportTaskId(v string) *ExportTask { - s.ExportTaskId = &v - return s -} - -// SetExportToS3Task sets the ExportToS3Task field's value. -func (s *ExportTask) SetExportToS3Task(v *ExportToS3Task) *ExportTask { - s.ExportToS3Task = v - return s -} - -// SetInstanceExportDetails sets the InstanceExportDetails field's value. -func (s *ExportTask) SetInstanceExportDetails(v *InstanceExportDetails) *ExportTask { - s.InstanceExportDetails = v - return s -} - -// SetState sets the State field's value. -func (s *ExportTask) SetState(v string) *ExportTask { - s.State = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ExportTask) SetStatusMessage(v string) *ExportTask { - s.StatusMessage = &v - return s -} - -// Describes the destination for an export image task. -type ExportTaskS3Location struct { - _ struct{} `type:"structure"` - - // The destination S3 bucket. - S3Bucket *string `locationName:"s3Bucket" type:"string"` - - // The prefix (logical hierarchy) in the bucket. - S3Prefix *string `locationName:"s3Prefix" type:"string"` -} - -// String returns the string representation -func (s ExportTaskS3Location) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportTaskS3Location) GoString() string { - return s.String() -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportTaskS3Location) SetS3Bucket(v string) *ExportTaskS3Location { - s.S3Bucket = &v - return s -} - -// SetS3Prefix sets the S3Prefix field's value. -func (s *ExportTaskS3Location) SetS3Prefix(v string) *ExportTaskS3Location { - s.S3Prefix = &v - return s -} - -// Describes the destination for an export image task. -type ExportTaskS3LocationRequest struct { - _ struct{} `type:"structure"` - - // The destination S3 bucket. - // - // S3Bucket is a required field - S3Bucket *string `type:"string" required:"true"` - - // The prefix (logical hierarchy) in the bucket. - S3Prefix *string `type:"string"` -} - -// String returns the string representation -func (s ExportTaskS3LocationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportTaskS3LocationRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ExportTaskS3LocationRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ExportTaskS3LocationRequest"} - if s.S3Bucket == nil { - invalidParams.Add(request.NewErrParamRequired("S3Bucket")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportTaskS3LocationRequest) SetS3Bucket(v string) *ExportTaskS3LocationRequest { - s.S3Bucket = &v - return s -} - -// SetS3Prefix sets the S3Prefix field's value. -func (s *ExportTaskS3LocationRequest) SetS3Prefix(v string) *ExportTaskS3LocationRequest { - s.S3Prefix = &v - return s -} - -// Describes the format and location for an instance export task. -type ExportToS3Task struct { - _ struct{} `type:"structure"` - - // The container format used to combine disk images with metadata (such as OVF). - // If absent, only the disk image is exported. - ContainerFormat *string `locationName:"containerFormat" type:"string" enum:"ContainerFormat"` - - // The format for the exported image. - DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` - - // The S3 bucket for the destination image. The destination bucket must exist - // and grant WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. - S3Bucket *string `locationName:"s3Bucket" type:"string"` - - // The encryption key for your S3 bucket. - S3Key *string `locationName:"s3Key" type:"string"` -} - -// String returns the string representation -func (s ExportToS3Task) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportToS3Task) GoString() string { - return s.String() -} - -// SetContainerFormat sets the ContainerFormat field's value. -func (s *ExportToS3Task) SetContainerFormat(v string) *ExportToS3Task { - s.ContainerFormat = &v - return s -} - -// SetDiskImageFormat sets the DiskImageFormat field's value. -func (s *ExportToS3Task) SetDiskImageFormat(v string) *ExportToS3Task { - s.DiskImageFormat = &v - return s -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportToS3Task) SetS3Bucket(v string) *ExportToS3Task { - s.S3Bucket = &v - return s -} - -// SetS3Key sets the S3Key field's value. -func (s *ExportToS3Task) SetS3Key(v string) *ExportToS3Task { - s.S3Key = &v - return s -} - -// Describes an instance export task. -type ExportToS3TaskSpecification struct { - _ struct{} `type:"structure"` - - // The container format used to combine disk images with metadata (such as OVF). - // If absent, only the disk image is exported. - ContainerFormat *string `locationName:"containerFormat" type:"string" enum:"ContainerFormat"` - - // The format for the exported image. - DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` - - // The S3 bucket for the destination image. The destination bucket must exist - // and grant WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. - S3Bucket *string `locationName:"s3Bucket" type:"string"` - - // The image is written to a single object in the S3 bucket at the S3 key s3prefix - // + exportTaskId + '.' + diskImageFormat. - S3Prefix *string `locationName:"s3Prefix" type:"string"` -} - -// String returns the string representation -func (s ExportToS3TaskSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportToS3TaskSpecification) GoString() string { - return s.String() -} - -// SetContainerFormat sets the ContainerFormat field's value. -func (s *ExportToS3TaskSpecification) SetContainerFormat(v string) *ExportToS3TaskSpecification { - s.ContainerFormat = &v - return s -} - -// SetDiskImageFormat sets the DiskImageFormat field's value. -func (s *ExportToS3TaskSpecification) SetDiskImageFormat(v string) *ExportToS3TaskSpecification { - s.DiskImageFormat = &v - return s -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportToS3TaskSpecification) SetS3Bucket(v string) *ExportToS3TaskSpecification { - s.S3Bucket = &v - return s -} - -// SetS3Prefix sets the S3Prefix field's value. -func (s *ExportToS3TaskSpecification) SetS3Prefix(v string) *ExportToS3TaskSpecification { - s.S3Prefix = &v - return s -} - -type ExportTransitGatewayRoutesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * attachment.transit-gateway-attachment-id - The id of the transit gateway - // attachment. - // - // * attachment.resource-id - The resource id of the transit gateway attachment. - // - // * route-search.exact-match - The exact match of the specified filter. - // - // * route-search.longest-prefix-match - The longest prefix that matches - // the route. - // - // * route-search.subnet-of-match - The routes with a subnet that match the - // specified CIDR filter. - // - // * route-search.supernet-of-match - The routes with a CIDR that encompass - // the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 - // routes in your route table and you specify supernet-of-match as 10.0.1.0/30, - // then the result returns 10.0.1.0/29. - // - // * state - The state of the attachment (available | deleted | deleting - // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected - // | rejecting). - // - // * transit-gateway-route-destination-cidr-block - The CIDR range. - // - // * type - The type of route (active | blackhole). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The name of the S3 bucket. - // - // S3Bucket is a required field - S3Bucket *string `type:"string" required:"true"` - - // The ID of the route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ExportTransitGatewayRoutesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportTransitGatewayRoutesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ExportTransitGatewayRoutesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ExportTransitGatewayRoutesInput"} - if s.S3Bucket == nil { - invalidParams.Add(request.NewErrParamRequired("S3Bucket")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ExportTransitGatewayRoutesInput) SetDryRun(v bool) *ExportTransitGatewayRoutesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *ExportTransitGatewayRoutesInput) SetFilters(v []*Filter) *ExportTransitGatewayRoutesInput { - s.Filters = v - return s -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportTransitGatewayRoutesInput) SetS3Bucket(v string) *ExportTransitGatewayRoutesInput { - s.S3Bucket = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *ExportTransitGatewayRoutesInput) SetTransitGatewayRouteTableId(v string) *ExportTransitGatewayRoutesInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type ExportTransitGatewayRoutesOutput struct { - _ struct{} `type:"structure"` - - // The URL of the exported file in Amazon S3. For example, s3://bucket_name/VPCTransitGateway/TransitGatewayRouteTables/file_name. - S3Location *string `locationName:"s3Location" type:"string"` -} - -// String returns the string representation -func (s ExportTransitGatewayRoutesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ExportTransitGatewayRoutesOutput) GoString() string { - return s.String() -} - -// SetS3Location sets the S3Location field's value. -func (s *ExportTransitGatewayRoutesOutput) SetS3Location(v string) *ExportTransitGatewayRoutesOutput { - s.S3Location = &v - return s -} - -// Describes a Reserved Instance whose queued purchase was not deleted. -type FailedQueuedPurchaseDeletion struct { - _ struct{} `type:"structure"` - - // The error. - Error *DeleteQueuedReservedInstancesError `locationName:"error" type:"structure"` - - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` -} - -// String returns the string representation -func (s FailedQueuedPurchaseDeletion) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FailedQueuedPurchaseDeletion) GoString() string { - return s.String() -} - -// SetError sets the Error field's value. -func (s *FailedQueuedPurchaseDeletion) SetError(v *DeleteQueuedReservedInstancesError) *FailedQueuedPurchaseDeletion { - s.Error = v - return s -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *FailedQueuedPurchaseDeletion) SetReservedInstancesId(v string) *FailedQueuedPurchaseDeletion { - s.ReservedInstancesId = &v - return s -} - -// A filter name and value pair that is used to return a more specific list -// of results from a describe operation. Filters can be used to match a set -// of resources by specific criteria, such as tags, attributes, or IDs. The -// filters supported by a describe operation are documented with the describe -// operation. For example: -// -// * DescribeAvailabilityZones -// -// * DescribeImages -// -// * DescribeInstances -// -// * DescribeKeyPairs -// -// * DescribeSecurityGroups -// -// * DescribeSnapshots -// -// * DescribeSubnets -// -// * DescribeTags -// -// * DescribeVolumes -// -// * DescribeVpcs -type Filter struct { - _ struct{} `type:"structure"` - - // The name of the filter. Filter names are case-sensitive. - Name *string `type:"string"` - - // The filter values. Filter values are case-sensitive. - Values []*string `locationName:"Value" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s Filter) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Filter) GoString() string { - return s.String() -} - -// SetName sets the Name field's value. -func (s *Filter) SetName(v string) *Filter { - s.Name = &v - return s -} - -// SetValues sets the Values field's value. -func (s *Filter) SetValues(v []*string) *Filter { - s.Values = v - return s -} - -// Describes an EC2 Fleet. -type FleetData struct { - _ struct{} `type:"structure"` - - // The progress of the EC2 Fleet. If there is an error, the status is error. - // After all requests are placed, the status is pending_fulfillment. If the - // size of the EC2 Fleet is equal to or greater than its target capacity, the - // status is fulfilled. If the size of the EC2 Fleet is decreased, the status - // is pending_termination while instances are terminating. - ActivityStatus *string `locationName:"activityStatus" type:"string" enum:"FleetActivityStatus"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraints: Maximum 64 ASCII characters - ClientToken *string `locationName:"clientToken" type:"string"` - - // The creation date and time of the EC2 Fleet. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // Information about the instances that could not be launched by the fleet. - // Valid only when Type is set to instant. - Errors []*DescribeFleetError `locationName:"errorSet" locationNameList:"item" type:"list"` - - // Indicates whether running instances should be terminated if the target capacity - // of the EC2 Fleet is decreased below the current size of the EC2 Fleet. - ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"FleetExcessCapacityTerminationPolicy"` - - // The ID of the EC2 Fleet. - FleetId *string `locationName:"fleetId" type:"string"` - - // The state of the EC2 Fleet. - FleetState *string `locationName:"fleetState" type:"string" enum:"FleetStateCode"` - - // The number of units fulfilled by this request compared to the set target - // capacity. - FulfilledCapacity *float64 `locationName:"fulfilledCapacity" type:"double"` - - // The number of units fulfilled by this request compared to the set target - // On-Demand capacity. - FulfilledOnDemandCapacity *float64 `locationName:"fulfilledOnDemandCapacity" type:"double"` - - // Information about the instances that were launched by the fleet. Valid only - // when Type is set to instant. - Instances []*DescribeFleetsInstances `locationName:"fleetInstanceSet" locationNameList:"item" type:"list"` - - // The launch template and overrides. - LaunchTemplateConfigs []*FleetLaunchTemplateConfig `locationName:"launchTemplateConfigs" locationNameList:"item" type:"list"` - - // The allocation strategy of On-Demand Instances in an EC2 Fleet. - OnDemandOptions *OnDemandOptions `locationName:"onDemandOptions" type:"structure"` - - // Indicates whether EC2 Fleet should replace unhealthy instances. - ReplaceUnhealthyInstances *bool `locationName:"replaceUnhealthyInstances" type:"boolean"` - - // The configuration of Spot Instances in an EC2 Fleet. - SpotOptions *SpotOptions `locationName:"spotOptions" type:"structure"` - - // The tags for an EC2 Fleet resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The number of units to request. You can choose to set the target capacity - // in terms of instances or a performance characteristic that is important to - // your application workload, such as vCPUs, memory, or I/O. If the request - // type is maintain, you can specify a target capacity of 0 and add capacity - // later. - TargetCapacitySpecification *TargetCapacitySpecification `locationName:"targetCapacitySpecification" type:"structure"` - - // Indicates whether running instances should be terminated when the EC2 Fleet - // expires. - TerminateInstancesWithExpiration *bool `locationName:"terminateInstancesWithExpiration" type:"boolean"` - - // The type of request. Indicates whether the EC2 Fleet only requests the target - // capacity, or also attempts to maintain it. If you request a certain target - // capacity, EC2 Fleet only places the required requests; it does not attempt - // to replenish instances if capacity is diminished, and does not submit requests - // in alternative capacity pools if capacity is unavailable. To maintain a certain - // target capacity, EC2 Fleet places the required requests to meet this target - // capacity. It also automatically replenishes any interrupted Spot Instances. - // Default: maintain. - Type *string `locationName:"type" type:"string" enum:"FleetType"` - - // The start date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // The default is to start fulfilling the request immediately. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` - - // The end date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // At this point, no new instance requests are placed or able to fulfill the - // request. The default end date is 7 days from the current date. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` -} - -// String returns the string representation -func (s FleetData) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetData) GoString() string { - return s.String() -} - -// SetActivityStatus sets the ActivityStatus field's value. -func (s *FleetData) SetActivityStatus(v string) *FleetData { - s.ActivityStatus = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *FleetData) SetClientToken(v string) *FleetData { - s.ClientToken = &v - return s -} - -// SetCreateTime sets the CreateTime field's value. -func (s *FleetData) SetCreateTime(v time.Time) *FleetData { - s.CreateTime = &v - return s -} - -// SetErrors sets the Errors field's value. -func (s *FleetData) SetErrors(v []*DescribeFleetError) *FleetData { - s.Errors = v - return s -} - -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *FleetData) SetExcessCapacityTerminationPolicy(v string) *FleetData { - s.ExcessCapacityTerminationPolicy = &v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *FleetData) SetFleetId(v string) *FleetData { - s.FleetId = &v - return s -} - -// SetFleetState sets the FleetState field's value. -func (s *FleetData) SetFleetState(v string) *FleetData { - s.FleetState = &v - return s -} - -// SetFulfilledCapacity sets the FulfilledCapacity field's value. -func (s *FleetData) SetFulfilledCapacity(v float64) *FleetData { - s.FulfilledCapacity = &v - return s -} - -// SetFulfilledOnDemandCapacity sets the FulfilledOnDemandCapacity field's value. -func (s *FleetData) SetFulfilledOnDemandCapacity(v float64) *FleetData { - s.FulfilledOnDemandCapacity = &v - return s -} - -// SetInstances sets the Instances field's value. -func (s *FleetData) SetInstances(v []*DescribeFleetsInstances) *FleetData { - s.Instances = v - return s -} - -// SetLaunchTemplateConfigs sets the LaunchTemplateConfigs field's value. -func (s *FleetData) SetLaunchTemplateConfigs(v []*FleetLaunchTemplateConfig) *FleetData { - s.LaunchTemplateConfigs = v - return s -} - -// SetOnDemandOptions sets the OnDemandOptions field's value. -func (s *FleetData) SetOnDemandOptions(v *OnDemandOptions) *FleetData { - s.OnDemandOptions = v - return s -} - -// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. -func (s *FleetData) SetReplaceUnhealthyInstances(v bool) *FleetData { - s.ReplaceUnhealthyInstances = &v - return s -} - -// SetSpotOptions sets the SpotOptions field's value. -func (s *FleetData) SetSpotOptions(v *SpotOptions) *FleetData { - s.SpotOptions = v - return s -} - -// SetTags sets the Tags field's value. -func (s *FleetData) SetTags(v []*Tag) *FleetData { - s.Tags = v - return s -} - -// SetTargetCapacitySpecification sets the TargetCapacitySpecification field's value. -func (s *FleetData) SetTargetCapacitySpecification(v *TargetCapacitySpecification) *FleetData { - s.TargetCapacitySpecification = v - return s -} - -// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. -func (s *FleetData) SetTerminateInstancesWithExpiration(v bool) *FleetData { - s.TerminateInstancesWithExpiration = &v - return s -} - -// SetType sets the Type field's value. -func (s *FleetData) SetType(v string) *FleetData { - s.Type = &v - return s -} - -// SetValidFrom sets the ValidFrom field's value. -func (s *FleetData) SetValidFrom(v time.Time) *FleetData { - s.ValidFrom = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *FleetData) SetValidUntil(v time.Time) *FleetData { - s.ValidUntil = &v - return s -} - -// Describes a launch template and overrides. -type FleetLaunchTemplateConfig struct { - _ struct{} `type:"structure"` - - // The launch template. - LaunchTemplateSpecification *FleetLaunchTemplateSpecification `locationName:"launchTemplateSpecification" type:"structure"` - - // Any parameters that you specify override the same parameters in the launch - // template. - Overrides []*FleetLaunchTemplateOverrides `locationName:"overrides" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s FleetLaunchTemplateConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetLaunchTemplateConfig) GoString() string { - return s.String() -} - -// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. -func (s *FleetLaunchTemplateConfig) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecification) *FleetLaunchTemplateConfig { - s.LaunchTemplateSpecification = v - return s -} - -// SetOverrides sets the Overrides field's value. -func (s *FleetLaunchTemplateConfig) SetOverrides(v []*FleetLaunchTemplateOverrides) *FleetLaunchTemplateConfig { - s.Overrides = v - return s -} - -// Describes a launch template and overrides. -type FleetLaunchTemplateConfigRequest struct { - _ struct{} `type:"structure"` - - // The launch template to use. You must specify either the launch template ID - // or launch template name in the request. - LaunchTemplateSpecification *FleetLaunchTemplateSpecificationRequest `type:"structure"` - - // Any parameters that you specify override the same parameters in the launch - // template. - Overrides []*FleetLaunchTemplateOverridesRequest `locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s FleetLaunchTemplateConfigRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetLaunchTemplateConfigRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *FleetLaunchTemplateConfigRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "FleetLaunchTemplateConfigRequest"} - if s.LaunchTemplateSpecification != nil { - if err := s.LaunchTemplateSpecification.Validate(); err != nil { - invalidParams.AddNested("LaunchTemplateSpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. -func (s *FleetLaunchTemplateConfigRequest) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecificationRequest) *FleetLaunchTemplateConfigRequest { - s.LaunchTemplateSpecification = v - return s -} - -// SetOverrides sets the Overrides field's value. -func (s *FleetLaunchTemplateConfigRequest) SetOverrides(v []*FleetLaunchTemplateOverridesRequest) *FleetLaunchTemplateConfigRequest { - s.Overrides = v - return s -} - -// Describes overrides for a launch template. -type FleetLaunchTemplateOverrides struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which to launch the instances. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The maximum price per unit hour that you are willing to pay for a Spot Instance. - MaxPrice *string `locationName:"maxPrice" type:"string"` - - // The location where the instance launched, if applicable. - Placement *PlacementResponse `locationName:"placement" type:"structure"` - - // The priority for the launch template override. If AllocationStrategy is set - // to prioritized, EC2 Fleet uses priority to determine which launch template - // override to use first in fulfilling On-Demand capacity. The highest priority - // is launched first. Valid values are whole numbers starting at 0. The lower - // the number, the higher the priority. If no number is set, the override has - // the lowest priority. - Priority *float64 `locationName:"priority" type:"double"` - - // The ID of the subnet in which to launch the instances. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The number of units provided by the specified instance type. - WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` -} - -// String returns the string representation -func (s FleetLaunchTemplateOverrides) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetLaunchTemplateOverrides) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *FleetLaunchTemplateOverrides) SetAvailabilityZone(v string) *FleetLaunchTemplateOverrides { - s.AvailabilityZone = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *FleetLaunchTemplateOverrides) SetInstanceType(v string) *FleetLaunchTemplateOverrides { - s.InstanceType = &v - return s -} - -// SetMaxPrice sets the MaxPrice field's value. -func (s *FleetLaunchTemplateOverrides) SetMaxPrice(v string) *FleetLaunchTemplateOverrides { - s.MaxPrice = &v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *FleetLaunchTemplateOverrides) SetPlacement(v *PlacementResponse) *FleetLaunchTemplateOverrides { - s.Placement = v - return s -} - -// SetPriority sets the Priority field's value. -func (s *FleetLaunchTemplateOverrides) SetPriority(v float64) *FleetLaunchTemplateOverrides { - s.Priority = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *FleetLaunchTemplateOverrides) SetSubnetId(v string) *FleetLaunchTemplateOverrides { - s.SubnetId = &v - return s -} - -// SetWeightedCapacity sets the WeightedCapacity field's value. -func (s *FleetLaunchTemplateOverrides) SetWeightedCapacity(v float64) *FleetLaunchTemplateOverrides { - s.WeightedCapacity = &v - return s -} - -// Describes overrides for a launch template. -type FleetLaunchTemplateOverridesRequest struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which to launch the instances. - AvailabilityZone *string `type:"string"` - - // The instance type. - InstanceType *string `type:"string" enum:"InstanceType"` - - // The maximum price per unit hour that you are willing to pay for a Spot Instance. - MaxPrice *string `type:"string"` - - // The location where the instance launched, if applicable. - Placement *Placement `type:"structure"` - - // The priority for the launch template override. If AllocationStrategy is set - // to prioritized, EC2 Fleet uses priority to determine which launch template - // override to use first in fulfilling On-Demand capacity. The highest priority - // is launched first. Valid values are whole numbers starting at 0. The lower - // the number, the higher the priority. If no number is set, the launch template - // override has the lowest priority. - Priority *float64 `type:"double"` - - // The ID of the subnet in which to launch the instances. - SubnetId *string `type:"string"` - - // The number of units provided by the specified instance type. - WeightedCapacity *float64 `type:"double"` -} - -// String returns the string representation -func (s FleetLaunchTemplateOverridesRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetLaunchTemplateOverridesRequest) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetAvailabilityZone(v string) *FleetLaunchTemplateOverridesRequest { - s.AvailabilityZone = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetInstanceType(v string) *FleetLaunchTemplateOverridesRequest { - s.InstanceType = &v - return s -} - -// SetMaxPrice sets the MaxPrice field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetMaxPrice(v string) *FleetLaunchTemplateOverridesRequest { - s.MaxPrice = &v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetPlacement(v *Placement) *FleetLaunchTemplateOverridesRequest { - s.Placement = v - return s -} - -// SetPriority sets the Priority field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetPriority(v float64) *FleetLaunchTemplateOverridesRequest { - s.Priority = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetSubnetId(v string) *FleetLaunchTemplateOverridesRequest { - s.SubnetId = &v - return s -} - -// SetWeightedCapacity sets the WeightedCapacity field's value. -func (s *FleetLaunchTemplateOverridesRequest) SetWeightedCapacity(v float64) *FleetLaunchTemplateOverridesRequest { - s.WeightedCapacity = &v - return s -} - -// Describes a launch template. -type FleetLaunchTemplateSpecification struct { - _ struct{} `type:"structure"` - - // The ID of the launch template. You must specify either a template ID or a - // template name. - LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` - - // The name of the launch template. You must specify either a template name - // or a template ID. - LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` - - // The version number of the launch template. You must specify a version number. - Version *string `locationName:"version" type:"string"` -} - -// String returns the string representation -func (s FleetLaunchTemplateSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetLaunchTemplateSpecification) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *FleetLaunchTemplateSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "FleetLaunchTemplateSpecification"} - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *FleetLaunchTemplateSpecification) SetLaunchTemplateId(v string) *FleetLaunchTemplateSpecification { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *FleetLaunchTemplateSpecification) SetLaunchTemplateName(v string) *FleetLaunchTemplateSpecification { - s.LaunchTemplateName = &v - return s -} - -// SetVersion sets the Version field's value. -func (s *FleetLaunchTemplateSpecification) SetVersion(v string) *FleetLaunchTemplateSpecification { - s.Version = &v - return s -} - -// The launch template to use. You must specify either the launch template ID -// or launch template name in the request. -type FleetLaunchTemplateSpecificationRequest struct { - _ struct{} `type:"structure"` - - // The ID of the launch template. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. - LaunchTemplateName *string `min:"3" type:"string"` - - // The version number of the launch template. Note: This is a required parameter - // and will be updated soon. - Version *string `type:"string"` -} - -// String returns the string representation -func (s FleetLaunchTemplateSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FleetLaunchTemplateSpecificationRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *FleetLaunchTemplateSpecificationRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "FleetLaunchTemplateSpecificationRequest"} - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *FleetLaunchTemplateSpecificationRequest) SetLaunchTemplateId(v string) *FleetLaunchTemplateSpecificationRequest { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *FleetLaunchTemplateSpecificationRequest) SetLaunchTemplateName(v string) *FleetLaunchTemplateSpecificationRequest { - s.LaunchTemplateName = &v - return s -} - -// SetVersion sets the Version field's value. -func (s *FleetLaunchTemplateSpecificationRequest) SetVersion(v string) *FleetLaunchTemplateSpecificationRequest { - s.Version = &v - return s -} - -// Describes a flow log. -type FlowLog struct { - _ struct{} `type:"structure"` - - // The date and time the flow log was created. - CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - - // Information about the error that occurred. Rate limited indicates that CloudWatch - // Logs throttling has been applied for one or more network interfaces, or that - // you've reached the limit on the number of log groups that you can create. - // Access error indicates that the IAM role associated with the flow log does - // not have sufficient permissions to publish to CloudWatch Logs. Unknown error - // indicates an internal error. - DeliverLogsErrorMessage *string `locationName:"deliverLogsErrorMessage" type:"string"` - - // The ARN of the IAM role that posts logs to CloudWatch Logs. - DeliverLogsPermissionArn *string `locationName:"deliverLogsPermissionArn" type:"string"` - - // The status of the logs delivery (SUCCESS | FAILED). - DeliverLogsStatus *string `locationName:"deliverLogsStatus" type:"string"` - - // The flow log ID. - FlowLogId *string `locationName:"flowLogId" type:"string"` - - // The status of the flow log (ACTIVE). - FlowLogStatus *string `locationName:"flowLogStatus" type:"string"` - - // Specifies the destination to which the flow log data is published. Flow log - // data can be published to an CloudWatch Logs log group or an Amazon S3 bucket. - // If the flow log publishes to CloudWatch Logs, this element indicates the - // Amazon Resource Name (ARN) of the CloudWatch Logs log group to which the - // data is published. If the flow log publishes to Amazon S3, this element indicates - // the ARN of the Amazon S3 bucket to which the data is published. - LogDestination *string `locationName:"logDestination" type:"string"` - - // Specifies the type of destination to which the flow log data is published. - // Flow log data can be published to CloudWatch Logs or Amazon S3. - LogDestinationType *string `locationName:"logDestinationType" type:"string" enum:"LogDestinationType"` - - // The format of the flow log record. - LogFormat *string `locationName:"logFormat" type:"string"` - - // The name of the flow log group. - LogGroupName *string `locationName:"logGroupName" type:"string"` - - // The ID of the resource on which the flow log was created. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The type of traffic captured for the flow log. - TrafficType *string `locationName:"trafficType" type:"string" enum:"TrafficType"` -} - -// String returns the string representation -func (s FlowLog) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FlowLog) GoString() string { - return s.String() -} - -// SetCreationTime sets the CreationTime field's value. -func (s *FlowLog) SetCreationTime(v time.Time) *FlowLog { - s.CreationTime = &v - return s -} - -// SetDeliverLogsErrorMessage sets the DeliverLogsErrorMessage field's value. -func (s *FlowLog) SetDeliverLogsErrorMessage(v string) *FlowLog { - s.DeliverLogsErrorMessage = &v - return s -} - -// SetDeliverLogsPermissionArn sets the DeliverLogsPermissionArn field's value. -func (s *FlowLog) SetDeliverLogsPermissionArn(v string) *FlowLog { - s.DeliverLogsPermissionArn = &v - return s -} - -// SetDeliverLogsStatus sets the DeliverLogsStatus field's value. -func (s *FlowLog) SetDeliverLogsStatus(v string) *FlowLog { - s.DeliverLogsStatus = &v - return s -} - -// SetFlowLogId sets the FlowLogId field's value. -func (s *FlowLog) SetFlowLogId(v string) *FlowLog { - s.FlowLogId = &v - return s -} - -// SetFlowLogStatus sets the FlowLogStatus field's value. -func (s *FlowLog) SetFlowLogStatus(v string) *FlowLog { - s.FlowLogStatus = &v - return s -} - -// SetLogDestination sets the LogDestination field's value. -func (s *FlowLog) SetLogDestination(v string) *FlowLog { - s.LogDestination = &v - return s -} - -// SetLogDestinationType sets the LogDestinationType field's value. -func (s *FlowLog) SetLogDestinationType(v string) *FlowLog { - s.LogDestinationType = &v - return s -} - -// SetLogFormat sets the LogFormat field's value. -func (s *FlowLog) SetLogFormat(v string) *FlowLog { - s.LogFormat = &v - return s -} - -// SetLogGroupName sets the LogGroupName field's value. -func (s *FlowLog) SetLogGroupName(v string) *FlowLog { - s.LogGroupName = &v - return s -} - -// SetResourceId sets the ResourceId field's value. -func (s *FlowLog) SetResourceId(v string) *FlowLog { - s.ResourceId = &v - return s -} - -// SetTrafficType sets the TrafficType field's value. -func (s *FlowLog) SetTrafficType(v string) *FlowLog { - s.TrafficType = &v - return s -} - -// Describes the FPGA accelerator for the instance type. -type FpgaDeviceInfo struct { - _ struct{} `type:"structure"` - - // The count of FPGA accelerators for the instance type. - Count *int64 `locationName:"count" type:"integer"` - - // The manufacturer of the FPGA accelerator. - Manufacturer *string `locationName:"manufacturer" type:"string"` - - // Describes the memory for the FPGA accelerator for the instance type. - MemoryInfo *FpgaDeviceMemoryInfo `locationName:"memoryInfo" type:"structure"` - - // The name of the FPGA accelerator. - Name *string `locationName:"name" type:"string"` -} - -// String returns the string representation -func (s FpgaDeviceInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FpgaDeviceInfo) GoString() string { - return s.String() -} - -// SetCount sets the Count field's value. -func (s *FpgaDeviceInfo) SetCount(v int64) *FpgaDeviceInfo { - s.Count = &v - return s -} - -// SetManufacturer sets the Manufacturer field's value. -func (s *FpgaDeviceInfo) SetManufacturer(v string) *FpgaDeviceInfo { - s.Manufacturer = &v - return s -} - -// SetMemoryInfo sets the MemoryInfo field's value. -func (s *FpgaDeviceInfo) SetMemoryInfo(v *FpgaDeviceMemoryInfo) *FpgaDeviceInfo { - s.MemoryInfo = v - return s -} - -// SetName sets the Name field's value. -func (s *FpgaDeviceInfo) SetName(v string) *FpgaDeviceInfo { - s.Name = &v - return s -} - -// Describes the memory for the FPGA accelerator for the instance type. -type FpgaDeviceMemoryInfo struct { - _ struct{} `type:"structure"` - - // The size (in MiB) for the memory available to the FPGA accelerator. - SizeInMiB *int64 `locationName:"sizeInMiB" type:"integer"` -} - -// String returns the string representation -func (s FpgaDeviceMemoryInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FpgaDeviceMemoryInfo) GoString() string { - return s.String() -} - -// SetSizeInMiB sets the SizeInMiB field's value. -func (s *FpgaDeviceMemoryInfo) SetSizeInMiB(v int64) *FpgaDeviceMemoryInfo { - s.SizeInMiB = &v - return s -} - -// Describes an Amazon FPGA image (AFI). -type FpgaImage struct { - _ struct{} `type:"structure"` - - // The date and time the AFI was created. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // Indicates whether data retention support is enabled for the AFI. - DataRetentionSupport *bool `locationName:"dataRetentionSupport" type:"boolean"` - - // The description of the AFI. - Description *string `locationName:"description" type:"string"` - - // The global FPGA image identifier (AGFI ID). - FpgaImageGlobalId *string `locationName:"fpgaImageGlobalId" type:"string"` - - // The FPGA image identifier (AFI ID). - FpgaImageId *string `locationName:"fpgaImageId" type:"string"` - - // The name of the AFI. - Name *string `locationName:"name" type:"string"` - - // The alias of the AFI owner. Possible values include self, amazon, and aws-marketplace. - OwnerAlias *string `locationName:"ownerAlias" type:"string"` - - // The AWS account ID of the AFI owner. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Information about the PCI bus. - PciId *PciId `locationName:"pciId" type:"structure"` - - // The product codes for the AFI. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // Indicates whether the AFI is public. - Public *bool `locationName:"public" type:"boolean"` - - // The version of the AWS Shell that was used to create the bitstream. - ShellVersion *string `locationName:"shellVersion" type:"string"` - - // Information about the state of the AFI. - State *FpgaImageState `locationName:"state" type:"structure"` - - // Any tags assigned to the AFI. - Tags []*Tag `locationName:"tags" locationNameList:"item" type:"list"` - - // The time of the most recent update to the AFI. - UpdateTime *time.Time `locationName:"updateTime" type:"timestamp"` -} - -// String returns the string representation -func (s FpgaImage) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FpgaImage) GoString() string { - return s.String() -} - -// SetCreateTime sets the CreateTime field's value. -func (s *FpgaImage) SetCreateTime(v time.Time) *FpgaImage { - s.CreateTime = &v - return s -} - -// SetDataRetentionSupport sets the DataRetentionSupport field's value. -func (s *FpgaImage) SetDataRetentionSupport(v bool) *FpgaImage { - s.DataRetentionSupport = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *FpgaImage) SetDescription(v string) *FpgaImage { - s.Description = &v - return s -} - -// SetFpgaImageGlobalId sets the FpgaImageGlobalId field's value. -func (s *FpgaImage) SetFpgaImageGlobalId(v string) *FpgaImage { - s.FpgaImageGlobalId = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *FpgaImage) SetFpgaImageId(v string) *FpgaImage { - s.FpgaImageId = &v - return s -} - -// SetName sets the Name field's value. -func (s *FpgaImage) SetName(v string) *FpgaImage { - s.Name = &v - return s -} - -// SetOwnerAlias sets the OwnerAlias field's value. -func (s *FpgaImage) SetOwnerAlias(v string) *FpgaImage { - s.OwnerAlias = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *FpgaImage) SetOwnerId(v string) *FpgaImage { - s.OwnerId = &v - return s -} - -// SetPciId sets the PciId field's value. -func (s *FpgaImage) SetPciId(v *PciId) *FpgaImage { - s.PciId = v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *FpgaImage) SetProductCodes(v []*ProductCode) *FpgaImage { - s.ProductCodes = v - return s -} - -// SetPublic sets the Public field's value. -func (s *FpgaImage) SetPublic(v bool) *FpgaImage { - s.Public = &v - return s -} - -// SetShellVersion sets the ShellVersion field's value. -func (s *FpgaImage) SetShellVersion(v string) *FpgaImage { - s.ShellVersion = &v - return s -} - -// SetState sets the State field's value. -func (s *FpgaImage) SetState(v *FpgaImageState) *FpgaImage { - s.State = v - return s -} - -// SetTags sets the Tags field's value. -func (s *FpgaImage) SetTags(v []*Tag) *FpgaImage { - s.Tags = v - return s -} - -// SetUpdateTime sets the UpdateTime field's value. -func (s *FpgaImage) SetUpdateTime(v time.Time) *FpgaImage { - s.UpdateTime = &v - return s -} - -// Describes an Amazon FPGA image (AFI) attribute. -type FpgaImageAttribute struct { - _ struct{} `type:"structure"` - - // The description of the AFI. - Description *string `locationName:"description" type:"string"` - - // The ID of the AFI. - FpgaImageId *string `locationName:"fpgaImageId" type:"string"` - - // The load permissions. - LoadPermissions []*LoadPermission `locationName:"loadPermissions" locationNameList:"item" type:"list"` - - // The name of the AFI. - Name *string `locationName:"name" type:"string"` - - // The product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s FpgaImageAttribute) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FpgaImageAttribute) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *FpgaImageAttribute) SetDescription(v string) *FpgaImageAttribute { - s.Description = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *FpgaImageAttribute) SetFpgaImageId(v string) *FpgaImageAttribute { - s.FpgaImageId = &v - return s -} - -// SetLoadPermissions sets the LoadPermissions field's value. -func (s *FpgaImageAttribute) SetLoadPermissions(v []*LoadPermission) *FpgaImageAttribute { - s.LoadPermissions = v - return s -} - -// SetName sets the Name field's value. -func (s *FpgaImageAttribute) SetName(v string) *FpgaImageAttribute { - s.Name = &v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *FpgaImageAttribute) SetProductCodes(v []*ProductCode) *FpgaImageAttribute { - s.ProductCodes = v - return s -} - -// Describes the state of the bitstream generation process for an Amazon FPGA -// image (AFI). -type FpgaImageState struct { - _ struct{} `type:"structure"` - - // The state. The following are the possible values: - // - // * pending - AFI bitstream generation is in progress. - // - // * available - The AFI is available for use. - // - // * failed - AFI bitstream generation failed. - // - // * unavailable - The AFI is no longer available for use. - Code *string `locationName:"code" type:"string" enum:"FpgaImageStateCode"` - - // If the state is failed, this is the error message. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s FpgaImageState) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FpgaImageState) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *FpgaImageState) SetCode(v string) *FpgaImageState { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *FpgaImageState) SetMessage(v string) *FpgaImageState { - s.Message = &v - return s -} - -// Describes the FPGAs for the instance type. -type FpgaInfo struct { - _ struct{} `type:"structure"` - - // Describes the FPGAs for the instance type. - Fpgas []*FpgaDeviceInfo `locationName:"fpgas" locationNameList:"item" type:"list"` - - // The total memory of all FPGA accelerators for the instance type. - TotalFpgaMemoryInMiB *int64 `locationName:"totalFpgaMemoryInMiB" type:"integer"` -} - -// String returns the string representation -func (s FpgaInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FpgaInfo) GoString() string { - return s.String() -} - -// SetFpgas sets the Fpgas field's value. -func (s *FpgaInfo) SetFpgas(v []*FpgaDeviceInfo) *FpgaInfo { - s.Fpgas = v - return s -} - -// SetTotalFpgaMemoryInMiB sets the TotalFpgaMemoryInMiB field's value. -func (s *FpgaInfo) SetTotalFpgaMemoryInMiB(v int64) *FpgaInfo { - s.TotalFpgaMemoryInMiB = &v - return s -} - -type GetCapacityReservationUsageInput struct { - _ struct{} `type:"structure"` - - // The ID of the Capacity Reservation. - // - // CapacityReservationId is a required field - CapacityReservationId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. - // - // Valid range: Minimum value of 1. Maximum value of 1000. - MaxResults *int64 `min:"1" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` -} - -// String returns the string representation -func (s GetCapacityReservationUsageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCapacityReservationUsageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetCapacityReservationUsageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetCapacityReservationUsageInput"} - if s.CapacityReservationId == nil { - invalidParams.Add(request.NewErrParamRequired("CapacityReservationId")) - } - if s.MaxResults != nil && *s.MaxResults < 1 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *GetCapacityReservationUsageInput) SetCapacityReservationId(v string) *GetCapacityReservationUsageInput { - s.CapacityReservationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *GetCapacityReservationUsageInput) SetDryRun(v bool) *GetCapacityReservationUsageInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *GetCapacityReservationUsageInput) SetMaxResults(v int64) *GetCapacityReservationUsageInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *GetCapacityReservationUsageInput) SetNextToken(v string) *GetCapacityReservationUsageInput { - s.NextToken = &v - return s -} - -type GetCapacityReservationUsageOutput struct { - _ struct{} `type:"structure"` - - // The remaining capacity. Indicates the number of instances that can be launched - // in the Capacity Reservation. - AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` - - // The ID of the Capacity Reservation. - CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` - - // The type of instance for which the Capacity Reservation reserves capacity. - InstanceType *string `locationName:"instanceType" type:"string"` - - // Information about the Capacity Reservation usage. - InstanceUsages []*InstanceUsage `locationName:"instanceUsageSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // The current state of the Capacity Reservation. A Capacity Reservation can - // be in one of the following states: - // - // * active - The Capacity Reservation is active and the capacity is available - // for your use. - // - // * expired - The Capacity Reservation expired automatically at the date - // and time specified in your request. The reserved capacity is no longer - // available for your use. - // - // * cancelled - The Capacity Reservation was manually cancelled. The reserved - // capacity is no longer available for your use. - // - // * pending - The Capacity Reservation request was successful but the capacity - // provisioning is still pending. - // - // * failed - The Capacity Reservation request has failed. A request might - // fail due to invalid request parameters, capacity constraints, or instance - // limit constraints. Failed requests are retained for 60 minutes. - State *string `locationName:"state" type:"string" enum:"CapacityReservationState"` - - // The number of instances for which the Capacity Reservation reserves capacity. - TotalInstanceCount *int64 `locationName:"totalInstanceCount" type:"integer"` -} - -// String returns the string representation -func (s GetCapacityReservationUsageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCapacityReservationUsageOutput) GoString() string { - return s.String() -} - -// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. -func (s *GetCapacityReservationUsageOutput) SetAvailableInstanceCount(v int64) *GetCapacityReservationUsageOutput { - s.AvailableInstanceCount = &v - return s -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *GetCapacityReservationUsageOutput) SetCapacityReservationId(v string) *GetCapacityReservationUsageOutput { - s.CapacityReservationId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *GetCapacityReservationUsageOutput) SetInstanceType(v string) *GetCapacityReservationUsageOutput { - s.InstanceType = &v - return s -} - -// SetInstanceUsages sets the InstanceUsages field's value. -func (s *GetCapacityReservationUsageOutput) SetInstanceUsages(v []*InstanceUsage) *GetCapacityReservationUsageOutput { - s.InstanceUsages = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *GetCapacityReservationUsageOutput) SetNextToken(v string) *GetCapacityReservationUsageOutput { - s.NextToken = &v - return s -} - -// SetState sets the State field's value. -func (s *GetCapacityReservationUsageOutput) SetState(v string) *GetCapacityReservationUsageOutput { - s.State = &v - return s -} - -// SetTotalInstanceCount sets the TotalInstanceCount field's value. -func (s *GetCapacityReservationUsageOutput) SetTotalInstanceCount(v int64) *GetCapacityReservationUsageOutput { - s.TotalInstanceCount = &v - return s -} - -type GetConsoleOutputInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // When enabled, retrieves the latest console output for the instance. - // - // Default: disabled (false) - Latest *bool `type:"boolean"` -} - -// String returns the string representation -func (s GetConsoleOutputInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetConsoleOutputInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetConsoleOutputInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetConsoleOutputInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetConsoleOutputInput) SetDryRun(v bool) *GetConsoleOutputInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleOutputInput) SetInstanceId(v string) *GetConsoleOutputInput { - s.InstanceId = &v - return s -} - -// SetLatest sets the Latest field's value. -func (s *GetConsoleOutputInput) SetLatest(v bool) *GetConsoleOutputInput { - s.Latest = &v - return s -} - -type GetConsoleOutputOutput struct { - _ struct{} `type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The console output, base64-encoded. If you are using a command line tool, - // the tool decodes the output for you. - Output *string `locationName:"output" type:"string"` - - // The time at which the output was last updated. - Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` -} - -// String returns the string representation -func (s GetConsoleOutputOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetConsoleOutputOutput) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleOutputOutput) SetInstanceId(v string) *GetConsoleOutputOutput { - s.InstanceId = &v - return s -} - -// SetOutput sets the Output field's value. -func (s *GetConsoleOutputOutput) SetOutput(v string) *GetConsoleOutputOutput { - s.Output = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *GetConsoleOutputOutput) SetTimestamp(v time.Time) *GetConsoleOutputOutput { - s.Timestamp = &v - return s -} - -type GetConsoleScreenshotInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // When set to true, acts as keystroke input and wakes up an instance that's - // in standby or "sleep" mode. - WakeUp *bool `type:"boolean"` -} - -// String returns the string representation -func (s GetConsoleScreenshotInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetConsoleScreenshotInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetConsoleScreenshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetConsoleScreenshotInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetConsoleScreenshotInput) SetDryRun(v bool) *GetConsoleScreenshotInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleScreenshotInput) SetInstanceId(v string) *GetConsoleScreenshotInput { - s.InstanceId = &v - return s -} - -// SetWakeUp sets the WakeUp field's value. -func (s *GetConsoleScreenshotInput) SetWakeUp(v bool) *GetConsoleScreenshotInput { - s.WakeUp = &v - return s -} - -type GetConsoleScreenshotOutput struct { - _ struct{} `type:"structure"` - - // The data that comprises the image. - ImageData *string `locationName:"imageData" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` -} - -// String returns the string representation -func (s GetConsoleScreenshotOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetConsoleScreenshotOutput) GoString() string { - return s.String() -} - -// SetImageData sets the ImageData field's value. -func (s *GetConsoleScreenshotOutput) SetImageData(v string) *GetConsoleScreenshotOutput { - s.ImageData = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleScreenshotOutput) SetInstanceId(v string) *GetConsoleScreenshotOutput { - s.InstanceId = &v - return s -} - -type GetEbsDefaultKmsKeyIdInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s GetEbsDefaultKmsKeyIdInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetEbsDefaultKmsKeyIdInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *GetEbsDefaultKmsKeyIdInput) SetDryRun(v bool) *GetEbsDefaultKmsKeyIdInput { - s.DryRun = &v - return s -} - -type GetEbsDefaultKmsKeyIdOutput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the default CMK for encryption by default. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` -} - -// String returns the string representation -func (s GetEbsDefaultKmsKeyIdOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetEbsDefaultKmsKeyIdOutput) GoString() string { - return s.String() -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *GetEbsDefaultKmsKeyIdOutput) SetKmsKeyId(v string) *GetEbsDefaultKmsKeyIdOutput { - s.KmsKeyId = &v - return s -} - -type GetEbsEncryptionByDefaultInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s GetEbsEncryptionByDefaultInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetEbsEncryptionByDefaultInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *GetEbsEncryptionByDefaultInput) SetDryRun(v bool) *GetEbsEncryptionByDefaultInput { - s.DryRun = &v - return s -} - -type GetEbsEncryptionByDefaultOutput struct { - _ struct{} `type:"structure"` - - // Indicates whether encryption by default is enabled. - EbsEncryptionByDefault *bool `locationName:"ebsEncryptionByDefault" type:"boolean"` -} - -// String returns the string representation -func (s GetEbsEncryptionByDefaultOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetEbsEncryptionByDefaultOutput) GoString() string { - return s.String() -} - -// SetEbsEncryptionByDefault sets the EbsEncryptionByDefault field's value. -func (s *GetEbsEncryptionByDefaultOutput) SetEbsEncryptionByDefault(v bool) *GetEbsEncryptionByDefaultOutput { - s.EbsEncryptionByDefault = &v - return s -} - -type GetHostReservationPurchasePreviewInput struct { - _ struct{} `type:"structure"` - - // The IDs of the Dedicated Hosts with which the reservation is associated. - // - // HostIdSet is a required field - HostIdSet []*string `locationNameList:"item" type:"list" required:"true"` - - // The offering ID of the reservation. - // - // OfferingId is a required field - OfferingId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s GetHostReservationPurchasePreviewInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetHostReservationPurchasePreviewInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetHostReservationPurchasePreviewInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetHostReservationPurchasePreviewInput"} - if s.HostIdSet == nil { - invalidParams.Add(request.NewErrParamRequired("HostIdSet")) - } - if s.OfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("OfferingId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetHostIdSet sets the HostIdSet field's value. -func (s *GetHostReservationPurchasePreviewInput) SetHostIdSet(v []*string) *GetHostReservationPurchasePreviewInput { - s.HostIdSet = v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *GetHostReservationPurchasePreviewInput) SetOfferingId(v string) *GetHostReservationPurchasePreviewInput { - s.OfferingId = &v - return s -} - -type GetHostReservationPurchasePreviewOutput struct { - _ struct{} `type:"structure"` - - // The currency in which the totalUpfrontPrice and totalHourlyPrice amounts - // are specified. At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The purchase information of the Dedicated Host reservation and the Dedicated - // Hosts associated with it. - Purchase []*Purchase `locationName:"purchase" locationNameList:"item" type:"list"` - - // The potential total hourly price of the reservation per hour. - TotalHourlyPrice *string `locationName:"totalHourlyPrice" type:"string"` - - // The potential total upfront price. This is billed immediately. - TotalUpfrontPrice *string `locationName:"totalUpfrontPrice" type:"string"` -} - -// String returns the string representation -func (s GetHostReservationPurchasePreviewOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetHostReservationPurchasePreviewOutput) GoString() string { - return s.String() -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetCurrencyCode(v string) *GetHostReservationPurchasePreviewOutput { - s.CurrencyCode = &v - return s -} - -// SetPurchase sets the Purchase field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetPurchase(v []*Purchase) *GetHostReservationPurchasePreviewOutput { - s.Purchase = v - return s -} - -// SetTotalHourlyPrice sets the TotalHourlyPrice field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetTotalHourlyPrice(v string) *GetHostReservationPurchasePreviewOutput { - s.TotalHourlyPrice = &v - return s -} - -// SetTotalUpfrontPrice sets the TotalUpfrontPrice field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetTotalUpfrontPrice(v string) *GetHostReservationPurchasePreviewOutput { - s.TotalUpfrontPrice = &v - return s -} - -type GetLaunchTemplateDataInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s GetLaunchTemplateDataInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetLaunchTemplateDataInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetLaunchTemplateDataInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetLaunchTemplateDataInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetLaunchTemplateDataInput) SetDryRun(v bool) *GetLaunchTemplateDataInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetLaunchTemplateDataInput) SetInstanceId(v string) *GetLaunchTemplateDataInput { - s.InstanceId = &v - return s -} - -type GetLaunchTemplateDataOutput struct { - _ struct{} `type:"structure"` - - // The instance data. - LaunchTemplateData *ResponseLaunchTemplateData `locationName:"launchTemplateData" type:"structure"` -} - -// String returns the string representation -func (s GetLaunchTemplateDataOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetLaunchTemplateDataOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplateData sets the LaunchTemplateData field's value. -func (s *GetLaunchTemplateDataOutput) SetLaunchTemplateData(v *ResponseLaunchTemplateData) *GetLaunchTemplateDataOutput { - s.LaunchTemplateData = v - return s -} - -type GetPasswordDataInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the Windows instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s GetPasswordDataInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetPasswordDataInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetPasswordDataInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetPasswordDataInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetPasswordDataInput) SetDryRun(v bool) *GetPasswordDataInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetPasswordDataInput) SetInstanceId(v string) *GetPasswordDataInput { - s.InstanceId = &v - return s -} - -type GetPasswordDataOutput struct { - _ struct{} `type:"structure"` - - // The ID of the Windows instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The password of the instance. Returns an empty string if the password is - // not available. - PasswordData *string `locationName:"passwordData" type:"string"` - - // The time the data was last updated. - Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` -} - -// String returns the string representation -func (s GetPasswordDataOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetPasswordDataOutput) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetPasswordDataOutput) SetInstanceId(v string) *GetPasswordDataOutput { - s.InstanceId = &v - return s -} - -// SetPasswordData sets the PasswordData field's value. -func (s *GetPasswordDataOutput) SetPasswordData(v string) *GetPasswordDataOutput { - s.PasswordData = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *GetPasswordDataOutput) SetTimestamp(v time.Time) *GetPasswordDataOutput { - s.Timestamp = &v - return s -} - -// Contains the parameters for GetReservedInstanceExchangeQuote. -type GetReservedInstancesExchangeQuoteInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The IDs of the Convertible Reserved Instances to exchange. - // - // ReservedInstanceIds is a required field - ReservedInstanceIds []*string `locationName:"ReservedInstanceId" locationNameList:"ReservedInstanceId" type:"list" required:"true"` - - // The configuration of the target Convertible Reserved Instance to exchange - // for your current Convertible Reserved Instances. - TargetConfigurations []*TargetConfigurationRequest `locationName:"TargetConfiguration" locationNameList:"TargetConfigurationRequest" type:"list"` -} - -// String returns the string representation -func (s GetReservedInstancesExchangeQuoteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetReservedInstancesExchangeQuoteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetReservedInstancesExchangeQuoteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetReservedInstancesExchangeQuoteInput"} - if s.ReservedInstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstanceIds")) - } - if s.TargetConfigurations != nil { - for i, v := range s.TargetConfigurations { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetConfigurations", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetReservedInstancesExchangeQuoteInput) SetDryRun(v bool) *GetReservedInstancesExchangeQuoteInput { - s.DryRun = &v - return s -} - -// SetReservedInstanceIds sets the ReservedInstanceIds field's value. -func (s *GetReservedInstancesExchangeQuoteInput) SetReservedInstanceIds(v []*string) *GetReservedInstancesExchangeQuoteInput { - s.ReservedInstanceIds = v - return s -} - -// SetTargetConfigurations sets the TargetConfigurations field's value. -func (s *GetReservedInstancesExchangeQuoteInput) SetTargetConfigurations(v []*TargetConfigurationRequest) *GetReservedInstancesExchangeQuoteInput { - s.TargetConfigurations = v - return s -} - -// Contains the output of GetReservedInstancesExchangeQuote. -type GetReservedInstancesExchangeQuoteOutput struct { - _ struct{} `type:"structure"` - - // The currency of the transaction. - CurrencyCode *string `locationName:"currencyCode" type:"string"` - - // If true, the exchange is valid. If false, the exchange cannot be completed. - IsValidExchange *bool `locationName:"isValidExchange" type:"boolean"` - - // The new end date of the reservation term. - OutputReservedInstancesWillExpireAt *time.Time `locationName:"outputReservedInstancesWillExpireAt" type:"timestamp"` - - // The total true upfront charge for the exchange. - PaymentDue *string `locationName:"paymentDue" type:"string"` - - // The cost associated with the Reserved Instance. - ReservedInstanceValueRollup *ReservationValue `locationName:"reservedInstanceValueRollup" type:"structure"` - - // The configuration of your Convertible Reserved Instances. - ReservedInstanceValueSet []*ReservedInstanceReservationValue `locationName:"reservedInstanceValueSet" locationNameList:"item" type:"list"` - - // The cost associated with the Reserved Instance. - TargetConfigurationValueRollup *ReservationValue `locationName:"targetConfigurationValueRollup" type:"structure"` - - // The values of the target Convertible Reserved Instances. - TargetConfigurationValueSet []*TargetReservationValue `locationName:"targetConfigurationValueSet" locationNameList:"item" type:"list"` - - // Describes the reason why the exchange cannot be completed. - ValidationFailureReason *string `locationName:"validationFailureReason" type:"string"` -} - -// String returns the string representation -func (s GetReservedInstancesExchangeQuoteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetReservedInstancesExchangeQuoteOutput) GoString() string { - return s.String() -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetCurrencyCode(v string) *GetReservedInstancesExchangeQuoteOutput { - s.CurrencyCode = &v - return s -} - -// SetIsValidExchange sets the IsValidExchange field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetIsValidExchange(v bool) *GetReservedInstancesExchangeQuoteOutput { - s.IsValidExchange = &v - return s -} - -// SetOutputReservedInstancesWillExpireAt sets the OutputReservedInstancesWillExpireAt field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetOutputReservedInstancesWillExpireAt(v time.Time) *GetReservedInstancesExchangeQuoteOutput { - s.OutputReservedInstancesWillExpireAt = &v - return s -} - -// SetPaymentDue sets the PaymentDue field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetPaymentDue(v string) *GetReservedInstancesExchangeQuoteOutput { - s.PaymentDue = &v - return s -} - -// SetReservedInstanceValueRollup sets the ReservedInstanceValueRollup field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetReservedInstanceValueRollup(v *ReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.ReservedInstanceValueRollup = v - return s -} - -// SetReservedInstanceValueSet sets the ReservedInstanceValueSet field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetReservedInstanceValueSet(v []*ReservedInstanceReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.ReservedInstanceValueSet = v - return s -} - -// SetTargetConfigurationValueRollup sets the TargetConfigurationValueRollup field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetTargetConfigurationValueRollup(v *ReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.TargetConfigurationValueRollup = v - return s -} - -// SetTargetConfigurationValueSet sets the TargetConfigurationValueSet field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetTargetConfigurationValueSet(v []*TargetReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.TargetConfigurationValueSet = v - return s -} - -// SetValidationFailureReason sets the ValidationFailureReason field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetValidationFailureReason(v string) *GetReservedInstancesExchangeQuoteOutput { - s.ValidationFailureReason = &v - return s -} - -type GetTransitGatewayAttachmentPropagationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * transit-gateway-route-table-id - The ID of the transit gateway route - // table. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s GetTransitGatewayAttachmentPropagationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetTransitGatewayAttachmentPropagationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetTransitGatewayAttachmentPropagationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetTransitGatewayAttachmentPropagationsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetTransitGatewayAttachmentPropagationsInput) SetDryRun(v bool) *GetTransitGatewayAttachmentPropagationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *GetTransitGatewayAttachmentPropagationsInput) SetFilters(v []*Filter) *GetTransitGatewayAttachmentPropagationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *GetTransitGatewayAttachmentPropagationsInput) SetMaxResults(v int64) *GetTransitGatewayAttachmentPropagationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *GetTransitGatewayAttachmentPropagationsInput) SetNextToken(v string) *GetTransitGatewayAttachmentPropagationsInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *GetTransitGatewayAttachmentPropagationsInput) SetTransitGatewayAttachmentId(v string) *GetTransitGatewayAttachmentPropagationsInput { - s.TransitGatewayAttachmentId = &v - return s -} - -type GetTransitGatewayAttachmentPropagationsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the propagation route tables. - TransitGatewayAttachmentPropagations []*TransitGatewayAttachmentPropagation `locationName:"transitGatewayAttachmentPropagations" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s GetTransitGatewayAttachmentPropagationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetTransitGatewayAttachmentPropagationsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *GetTransitGatewayAttachmentPropagationsOutput) SetNextToken(v string) *GetTransitGatewayAttachmentPropagationsOutput { - s.NextToken = &v - return s -} - -// SetTransitGatewayAttachmentPropagations sets the TransitGatewayAttachmentPropagations field's value. -func (s *GetTransitGatewayAttachmentPropagationsOutput) SetTransitGatewayAttachmentPropagations(v []*TransitGatewayAttachmentPropagation) *GetTransitGatewayAttachmentPropagationsOutput { - s.TransitGatewayAttachmentPropagations = v - return s -} - -type GetTransitGatewayRouteTableAssociationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * resource-id - The ID of the resource. - // - // * resource-type - The resource type (vpc | vpn). - // - // * transit-gateway-attachment-id - The ID of the attachment. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s GetTransitGatewayRouteTableAssociationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetTransitGatewayRouteTableAssociationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetTransitGatewayRouteTableAssociationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetTransitGatewayRouteTableAssociationsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetTransitGatewayRouteTableAssociationsInput) SetDryRun(v bool) *GetTransitGatewayRouteTableAssociationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *GetTransitGatewayRouteTableAssociationsInput) SetFilters(v []*Filter) *GetTransitGatewayRouteTableAssociationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *GetTransitGatewayRouteTableAssociationsInput) SetMaxResults(v int64) *GetTransitGatewayRouteTableAssociationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *GetTransitGatewayRouteTableAssociationsInput) SetNextToken(v string) *GetTransitGatewayRouteTableAssociationsInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *GetTransitGatewayRouteTableAssociationsInput) SetTransitGatewayRouteTableId(v string) *GetTransitGatewayRouteTableAssociationsInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type GetTransitGatewayRouteTableAssociationsOutput struct { - _ struct{} `type:"structure"` - - // Information about the associations. - Associations []*TransitGatewayRouteTableAssociation `locationName:"associations" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` -} - -// String returns the string representation -func (s GetTransitGatewayRouteTableAssociationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetTransitGatewayRouteTableAssociationsOutput) GoString() string { - return s.String() -} - -// SetAssociations sets the Associations field's value. -func (s *GetTransitGatewayRouteTableAssociationsOutput) SetAssociations(v []*TransitGatewayRouteTableAssociation) *GetTransitGatewayRouteTableAssociationsOutput { - s.Associations = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *GetTransitGatewayRouteTableAssociationsOutput) SetNextToken(v string) *GetTransitGatewayRouteTableAssociationsOutput { - s.NextToken = &v - return s -} - -type GetTransitGatewayRouteTablePropagationsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * resource-id - The ID of the resource. - // - // * resource-type - The resource type (vpc | vpn). - // - // * transit-gateway-attachment-id - The ID of the attachment. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return with a single call. To retrieve the - // remaining results, make another call with the returned nextToken value. - MaxResults *int64 `min:"5" type:"integer"` - - // The token for the next page of results. - NextToken *string `type:"string"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s GetTransitGatewayRouteTablePropagationsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetTransitGatewayRouteTablePropagationsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetTransitGatewayRouteTablePropagationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetTransitGatewayRouteTablePropagationsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *GetTransitGatewayRouteTablePropagationsInput) SetDryRun(v bool) *GetTransitGatewayRouteTablePropagationsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *GetTransitGatewayRouteTablePropagationsInput) SetFilters(v []*Filter) *GetTransitGatewayRouteTablePropagationsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *GetTransitGatewayRouteTablePropagationsInput) SetMaxResults(v int64) *GetTransitGatewayRouteTablePropagationsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *GetTransitGatewayRouteTablePropagationsInput) SetNextToken(v string) *GetTransitGatewayRouteTablePropagationsInput { - s.NextToken = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *GetTransitGatewayRouteTablePropagationsInput) SetTransitGatewayRouteTableId(v string) *GetTransitGatewayRouteTablePropagationsInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type GetTransitGatewayRouteTablePropagationsOutput struct { - _ struct{} `type:"structure"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the route table propagations. - TransitGatewayRouteTablePropagations []*TransitGatewayRouteTablePropagation `locationName:"transitGatewayRouteTablePropagations" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s GetTransitGatewayRouteTablePropagationsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetTransitGatewayRouteTablePropagationsOutput) GoString() string { - return s.String() -} - -// SetNextToken sets the NextToken field's value. -func (s *GetTransitGatewayRouteTablePropagationsOutput) SetNextToken(v string) *GetTransitGatewayRouteTablePropagationsOutput { - s.NextToken = &v - return s -} - -// SetTransitGatewayRouteTablePropagations sets the TransitGatewayRouteTablePropagations field's value. -func (s *GetTransitGatewayRouteTablePropagationsOutput) SetTransitGatewayRouteTablePropagations(v []*TransitGatewayRouteTablePropagation) *GetTransitGatewayRouteTablePropagationsOutput { - s.TransitGatewayRouteTablePropagations = v - return s -} - -// Describes the GPU accelerators for the instance type. -type GpuDeviceInfo struct { - _ struct{} `type:"structure"` - - // The number of GPUs for the instance type. - Count *int64 `locationName:"count" type:"integer"` - - // The manufacturer of the GPU accelerator. - Manufacturer *string `locationName:"manufacturer" type:"string"` - - // Describes the memory available to the GPU accelerator. - MemoryInfo *GpuDeviceMemoryInfo `locationName:"memoryInfo" type:"structure"` - - // The name of the GPU accelerator. - Name *string `locationName:"name" type:"string"` -} - -// String returns the string representation -func (s GpuDeviceInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GpuDeviceInfo) GoString() string { - return s.String() -} - -// SetCount sets the Count field's value. -func (s *GpuDeviceInfo) SetCount(v int64) *GpuDeviceInfo { - s.Count = &v - return s -} - -// SetManufacturer sets the Manufacturer field's value. -func (s *GpuDeviceInfo) SetManufacturer(v string) *GpuDeviceInfo { - s.Manufacturer = &v - return s -} - -// SetMemoryInfo sets the MemoryInfo field's value. -func (s *GpuDeviceInfo) SetMemoryInfo(v *GpuDeviceMemoryInfo) *GpuDeviceInfo { - s.MemoryInfo = v - return s -} - -// SetName sets the Name field's value. -func (s *GpuDeviceInfo) SetName(v string) *GpuDeviceInfo { - s.Name = &v - return s -} - -// Describes the memory available to the GPU accelerator. -type GpuDeviceMemoryInfo struct { - _ struct{} `type:"structure"` - - // The size (in MiB) for the memory available to the GPU accelerator. - SizeInMiB *int64 `locationName:"sizeInMiB" type:"integer"` -} - -// String returns the string representation -func (s GpuDeviceMemoryInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GpuDeviceMemoryInfo) GoString() string { - return s.String() -} - -// SetSizeInMiB sets the SizeInMiB field's value. -func (s *GpuDeviceMemoryInfo) SetSizeInMiB(v int64) *GpuDeviceMemoryInfo { - s.SizeInMiB = &v - return s -} - -// Describes the GPU accelerators for the instance type. -type GpuInfo struct { - _ struct{} `type:"structure"` - - // Describes the GPU accelerators for the instance type. - Gpus []*GpuDeviceInfo `locationName:"gpus" locationNameList:"item" type:"list"` - - // The total size of the memory for the GPU accelerators for the instance type. - TotalGpuMemoryInMiB *int64 `locationName:"totalGpuMemoryInMiB" type:"integer"` -} - -// String returns the string representation -func (s GpuInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GpuInfo) GoString() string { - return s.String() -} - -// SetGpus sets the Gpus field's value. -func (s *GpuInfo) SetGpus(v []*GpuDeviceInfo) *GpuInfo { - s.Gpus = v - return s -} - -// SetTotalGpuMemoryInMiB sets the TotalGpuMemoryInMiB field's value. -func (s *GpuInfo) SetTotalGpuMemoryInMiB(v int64) *GpuInfo { - s.TotalGpuMemoryInMiB = &v - return s -} - -// Describes a security group. -type GroupIdentifier struct { - _ struct{} `type:"structure"` - - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` -} - -// String returns the string representation -func (s GroupIdentifier) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GroupIdentifier) GoString() string { - return s.String() -} - -// SetGroupId sets the GroupId field's value. -func (s *GroupIdentifier) SetGroupId(v string) *GroupIdentifier { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *GroupIdentifier) SetGroupName(v string) *GroupIdentifier { - s.GroupName = &v - return s -} - -// Indicates whether your instance is configured for hibernation. This parameter -// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). -// For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) -// in the Amazon Elastic Compute Cloud User Guide. -type HibernationOptions struct { - _ struct{} `type:"structure"` - - // If this parameter is set to true, your instance is enabled for hibernation; - // otherwise, it is not enabled for hibernation. - Configured *bool `locationName:"configured" type:"boolean"` -} - -// String returns the string representation -func (s HibernationOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HibernationOptions) GoString() string { - return s.String() -} - -// SetConfigured sets the Configured field's value. -func (s *HibernationOptions) SetConfigured(v bool) *HibernationOptions { - s.Configured = &v - return s -} - -// Indicates whether your instance is configured for hibernation. This parameter -// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). -// For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) -// in the Amazon Elastic Compute Cloud User Guide. -type HibernationOptionsRequest struct { - _ struct{} `type:"structure"` - - // If you set this parameter to true, your instance is enabled for hibernation. - // - // Default: false - Configured *bool `type:"boolean"` -} - -// String returns the string representation -func (s HibernationOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HibernationOptionsRequest) GoString() string { - return s.String() -} - -// SetConfigured sets the Configured field's value. -func (s *HibernationOptionsRequest) SetConfigured(v bool) *HibernationOptionsRequest { - s.Configured = &v - return s -} - -// Describes an event in the history of the Spot Fleet request. -type HistoryRecord struct { - _ struct{} `type:"structure"` - - // Information about the event. - EventInformation *EventInformation `locationName:"eventInformation" type:"structure"` - - // The event type. - // - // * error - An error with the Spot Fleet request. - // - // * fleetRequestChange - A change in the status or configuration of the - // Spot Fleet request. - // - // * instanceChange - An instance was launched or terminated. - // - // * Information - An informational event. - EventType *string `locationName:"eventType" type:"string" enum:"EventType"` - - // The date and time of the event, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` -} - -// String returns the string representation -func (s HistoryRecord) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HistoryRecord) GoString() string { - return s.String() -} - -// SetEventInformation sets the EventInformation field's value. -func (s *HistoryRecord) SetEventInformation(v *EventInformation) *HistoryRecord { - s.EventInformation = v - return s -} - -// SetEventType sets the EventType field's value. -func (s *HistoryRecord) SetEventType(v string) *HistoryRecord { - s.EventType = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *HistoryRecord) SetTimestamp(v time.Time) *HistoryRecord { - s.Timestamp = &v - return s -} - -// Describes an event in the history of an EC2 Fleet. -type HistoryRecordEntry struct { - _ struct{} `type:"structure"` - - // Information about the event. - EventInformation *EventInformation `locationName:"eventInformation" type:"structure"` - - // The event type. - EventType *string `locationName:"eventType" type:"string" enum:"FleetEventType"` - - // The date and time of the event, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` -} - -// String returns the string representation -func (s HistoryRecordEntry) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HistoryRecordEntry) GoString() string { - return s.String() -} - -// SetEventInformation sets the EventInformation field's value. -func (s *HistoryRecordEntry) SetEventInformation(v *EventInformation) *HistoryRecordEntry { - s.EventInformation = v - return s -} - -// SetEventType sets the EventType field's value. -func (s *HistoryRecordEntry) SetEventType(v string) *HistoryRecordEntry { - s.EventType = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *HistoryRecordEntry) SetTimestamp(v time.Time) *HistoryRecordEntry { - s.Timestamp = &v - return s -} - -// Describes the properties of the Dedicated Host. -type Host struct { - _ struct{} `type:"structure"` - - // The time that the Dedicated Host was allocated. - AllocationTime *time.Time `locationName:"allocationTime" type:"timestamp"` - - // Indicates whether the Dedicated Host supports multiple instance types of - // the same instance family, or a specific instance type only. one indicates - // that the Dedicated Host supports multiple instance types in the instance - // family. off indicates that the Dedicated Host supports a single instance - // type only. - AllowsMultipleInstanceTypes *string `locationName:"allowsMultipleInstanceTypes" type:"string" enum:"AllowsMultipleInstanceTypes"` - - // Whether auto-placement is on or off. - AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` - - // The Availability Zone of the Dedicated Host. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The ID of the Availability Zone in which the Dedicated Host is allocated. - AvailabilityZoneId *string `locationName:"availabilityZoneId" type:"string"` - - // Information about the instances running on the Dedicated Host. - AvailableCapacity *AvailableCapacity `locationName:"availableCapacity" type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // The ID of the Dedicated Host. - HostId *string `locationName:"hostId" type:"string"` - - // The hardware specifications of the Dedicated Host. - HostProperties *HostProperties `locationName:"hostProperties" type:"structure"` - - // Indicates whether host recovery is enabled or disabled for the Dedicated - // Host. - HostRecovery *string `locationName:"hostRecovery" type:"string" enum:"HostRecovery"` - - // The reservation ID of the Dedicated Host. This returns a null response if - // the Dedicated Host doesn't have an associated reservation. - HostReservationId *string `locationName:"hostReservationId" type:"string"` - - // The IDs and instance type that are currently running on the Dedicated Host. - Instances []*HostInstance `locationName:"instances" locationNameList:"item" type:"list"` - - // The ID of the AWS account that owns the Dedicated Host. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The time that the Dedicated Host was released. - ReleaseTime *time.Time `locationName:"releaseTime" type:"timestamp"` - - // The Dedicated Host's state. - State *string `locationName:"state" type:"string" enum:"AllocationState"` - - // Any tags assigned to the Dedicated Host. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s Host) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Host) GoString() string { - return s.String() -} - -// SetAllocationTime sets the AllocationTime field's value. -func (s *Host) SetAllocationTime(v time.Time) *Host { - s.AllocationTime = &v - return s -} - -// SetAllowsMultipleInstanceTypes sets the AllowsMultipleInstanceTypes field's value. -func (s *Host) SetAllowsMultipleInstanceTypes(v string) *Host { - s.AllowsMultipleInstanceTypes = &v - return s -} - -// SetAutoPlacement sets the AutoPlacement field's value. -func (s *Host) SetAutoPlacement(v string) *Host { - s.AutoPlacement = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Host) SetAvailabilityZone(v string) *Host { - s.AvailabilityZone = &v - return s -} - -// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. -func (s *Host) SetAvailabilityZoneId(v string) *Host { - s.AvailabilityZoneId = &v - return s -} - -// SetAvailableCapacity sets the AvailableCapacity field's value. -func (s *Host) SetAvailableCapacity(v *AvailableCapacity) *Host { - s.AvailableCapacity = v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *Host) SetClientToken(v string) *Host { - s.ClientToken = &v - return s -} - -// SetHostId sets the HostId field's value. -func (s *Host) SetHostId(v string) *Host { - s.HostId = &v - return s -} - -// SetHostProperties sets the HostProperties field's value. -func (s *Host) SetHostProperties(v *HostProperties) *Host { - s.HostProperties = v - return s -} - -// SetHostRecovery sets the HostRecovery field's value. -func (s *Host) SetHostRecovery(v string) *Host { - s.HostRecovery = &v - return s -} - -// SetHostReservationId sets the HostReservationId field's value. -func (s *Host) SetHostReservationId(v string) *Host { - s.HostReservationId = &v - return s -} - -// SetInstances sets the Instances field's value. -func (s *Host) SetInstances(v []*HostInstance) *Host { - s.Instances = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *Host) SetOwnerId(v string) *Host { - s.OwnerId = &v - return s -} - -// SetReleaseTime sets the ReleaseTime field's value. -func (s *Host) SetReleaseTime(v time.Time) *Host { - s.ReleaseTime = &v - return s -} - -// SetState sets the State field's value. -func (s *Host) SetState(v string) *Host { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Host) SetTags(v []*Tag) *Host { - s.Tags = v - return s -} - -// Describes an instance running on a Dedicated Host. -type HostInstance struct { - _ struct{} `type:"structure"` - - // The ID of instance that is running on the Dedicated Host. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The instance type (for example, m3.medium) of the running instance. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The ID of the AWS account that owns the instance. - OwnerId *string `locationName:"ownerId" type:"string"` -} - -// String returns the string representation -func (s HostInstance) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HostInstance) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *HostInstance) SetInstanceId(v string) *HostInstance { - s.InstanceId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *HostInstance) SetInstanceType(v string) *HostInstance { - s.InstanceType = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *HostInstance) SetOwnerId(v string) *HostInstance { - s.OwnerId = &v - return s -} - -// Details about the Dedicated Host Reservation offering. -type HostOffering struct { - _ struct{} `type:"structure"` - - // The currency of the offering. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the offering (in seconds). - Duration *int64 `locationName:"duration" type:"integer"` - - // The hourly price of the offering. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The instance family of the offering. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` - - // The ID of the offering. - OfferingId *string `locationName:"offeringId" type:"string"` - - // The available payment option. - PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` - - // The upfront price of the offering. Does not apply to No Upfront offerings. - UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` -} - -// String returns the string representation -func (s HostOffering) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HostOffering) GoString() string { - return s.String() -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *HostOffering) SetCurrencyCode(v string) *HostOffering { - s.CurrencyCode = &v - return s -} - -// SetDuration sets the Duration field's value. -func (s *HostOffering) SetDuration(v int64) *HostOffering { - s.Duration = &v - return s -} - -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *HostOffering) SetHourlyPrice(v string) *HostOffering { - s.HourlyPrice = &v - return s -} - -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *HostOffering) SetInstanceFamily(v string) *HostOffering { - s.InstanceFamily = &v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *HostOffering) SetOfferingId(v string) *HostOffering { - s.OfferingId = &v - return s -} - -// SetPaymentOption sets the PaymentOption field's value. -func (s *HostOffering) SetPaymentOption(v string) *HostOffering { - s.PaymentOption = &v - return s -} - -// SetUpfrontPrice sets the UpfrontPrice field's value. -func (s *HostOffering) SetUpfrontPrice(v string) *HostOffering { - s.UpfrontPrice = &v - return s -} - -// Describes the properties of a Dedicated Host. -type HostProperties struct { - _ struct{} `type:"structure"` - - // The number of cores on the Dedicated Host. - Cores *int64 `locationName:"cores" type:"integer"` - - // The instance family supported by the Dedicated Host. For example, m5. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` - - // The instance type supported by the Dedicated Host. For example, m5.large. - // If the host supports multiple instance types, no instanceType is returned. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The number of sockets on the Dedicated Host. - Sockets *int64 `locationName:"sockets" type:"integer"` - - // The total number of vCPUs on the Dedicated Host. - TotalVCpus *int64 `locationName:"totalVCpus" type:"integer"` -} - -// String returns the string representation -func (s HostProperties) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HostProperties) GoString() string { - return s.String() -} - -// SetCores sets the Cores field's value. -func (s *HostProperties) SetCores(v int64) *HostProperties { - s.Cores = &v - return s -} - -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *HostProperties) SetInstanceFamily(v string) *HostProperties { - s.InstanceFamily = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *HostProperties) SetInstanceType(v string) *HostProperties { - s.InstanceType = &v - return s -} - -// SetSockets sets the Sockets field's value. -func (s *HostProperties) SetSockets(v int64) *HostProperties { - s.Sockets = &v - return s -} - -// SetTotalVCpus sets the TotalVCpus field's value. -func (s *HostProperties) SetTotalVCpus(v int64) *HostProperties { - s.TotalVCpus = &v - return s -} - -// Details about the Dedicated Host Reservation and associated Dedicated Hosts. -type HostReservation struct { - _ struct{} `type:"structure"` - - // The number of Dedicated Hosts the reservation is associated with. - Count *int64 `locationName:"count" type:"integer"` - - // The currency in which the upfrontPrice and hourlyPrice amounts are specified. - // At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The length of the reservation's term, specified in seconds. Can be 31536000 - // (1 year) | 94608000 (3 years). - Duration *int64 `locationName:"duration" type:"integer"` - - // The date and time that the reservation ends. - End *time.Time `locationName:"end" type:"timestamp"` - - // The IDs of the Dedicated Hosts associated with the reservation. - HostIdSet []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` - - // The ID of the reservation that specifies the associated Dedicated Hosts. - HostReservationId *string `locationName:"hostReservationId" type:"string"` - - // The hourly price of the reservation. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The instance family of the Dedicated Host Reservation. The instance family - // on the Dedicated Host must be the same in order for it to benefit from the - // reservation. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` - - // The ID of the reservation. This remains the same regardless of which Dedicated - // Hosts are associated with it. - OfferingId *string `locationName:"offeringId" type:"string"` - - // The payment option selected for this reservation. - PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` - - // The date and time that the reservation started. - Start *time.Time `locationName:"start" type:"timestamp"` - - // The state of the reservation. - State *string `locationName:"state" type:"string" enum:"ReservationState"` - - // Any tags assigned to the Dedicated Host Reservation. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The upfront price of the reservation. - UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` -} - -// String returns the string representation -func (s HostReservation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s HostReservation) GoString() string { - return s.String() -} - -// SetCount sets the Count field's value. -func (s *HostReservation) SetCount(v int64) *HostReservation { - s.Count = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *HostReservation) SetCurrencyCode(v string) *HostReservation { - s.CurrencyCode = &v - return s -} - -// SetDuration sets the Duration field's value. -func (s *HostReservation) SetDuration(v int64) *HostReservation { - s.Duration = &v - return s -} - -// SetEnd sets the End field's value. -func (s *HostReservation) SetEnd(v time.Time) *HostReservation { - s.End = &v - return s -} - -// SetHostIdSet sets the HostIdSet field's value. -func (s *HostReservation) SetHostIdSet(v []*string) *HostReservation { - s.HostIdSet = v - return s -} - -// SetHostReservationId sets the HostReservationId field's value. -func (s *HostReservation) SetHostReservationId(v string) *HostReservation { - s.HostReservationId = &v - return s -} - -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *HostReservation) SetHourlyPrice(v string) *HostReservation { - s.HourlyPrice = &v - return s -} - -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *HostReservation) SetInstanceFamily(v string) *HostReservation { - s.InstanceFamily = &v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *HostReservation) SetOfferingId(v string) *HostReservation { - s.OfferingId = &v - return s -} - -// SetPaymentOption sets the PaymentOption field's value. -func (s *HostReservation) SetPaymentOption(v string) *HostReservation { - s.PaymentOption = &v - return s -} - -// SetStart sets the Start field's value. -func (s *HostReservation) SetStart(v time.Time) *HostReservation { - s.Start = &v - return s -} - -// SetState sets the State field's value. -func (s *HostReservation) SetState(v string) *HostReservation { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *HostReservation) SetTags(v []*Tag) *HostReservation { - s.Tags = v - return s -} - -// SetUpfrontPrice sets the UpfrontPrice field's value. -func (s *HostReservation) SetUpfrontPrice(v string) *HostReservation { - s.UpfrontPrice = &v - return s -} - -// The internet key exchange (IKE) version permitted for the VPN tunnel. -type IKEVersionsListValue struct { - _ struct{} `type:"structure"` - - // The IKE version. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s IKEVersionsListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IKEVersionsListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *IKEVersionsListValue) SetValue(v string) *IKEVersionsListValue { - s.Value = &v - return s -} - -// The IKE version that is permitted for the VPN tunnel. -type IKEVersionsRequestListValue struct { - _ struct{} `type:"structure"` - - // The IKE version. - Value *string `type:"string"` -} - -// String returns the string representation -func (s IKEVersionsRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IKEVersionsRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *IKEVersionsRequestListValue) SetValue(v string) *IKEVersionsRequestListValue { - s.Value = &v - return s -} - -// Describes an IAM instance profile. -type IamInstanceProfile struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the instance profile. - Arn *string `locationName:"arn" type:"string"` - - // The ID of the instance profile. - Id *string `locationName:"id" type:"string"` -} - -// String returns the string representation -func (s IamInstanceProfile) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IamInstanceProfile) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *IamInstanceProfile) SetArn(v string) *IamInstanceProfile { - s.Arn = &v - return s -} - -// SetId sets the Id field's value. -func (s *IamInstanceProfile) SetId(v string) *IamInstanceProfile { - s.Id = &v - return s -} - -// Describes an association between an IAM instance profile and an instance. -type IamInstanceProfileAssociation struct { - _ struct{} `type:"structure"` - - // The ID of the association. - AssociationId *string `locationName:"associationId" type:"string"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfile `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The state of the association. - State *string `locationName:"state" type:"string" enum:"IamInstanceProfileAssociationState"` - - // The time the IAM instance profile was associated with the instance. - Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` -} - -// String returns the string representation -func (s IamInstanceProfileAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IamInstanceProfileAssociation) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *IamInstanceProfileAssociation) SetAssociationId(v string) *IamInstanceProfileAssociation { - s.AssociationId = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *IamInstanceProfileAssociation) SetIamInstanceProfile(v *IamInstanceProfile) *IamInstanceProfileAssociation { - s.IamInstanceProfile = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *IamInstanceProfileAssociation) SetInstanceId(v string) *IamInstanceProfileAssociation { - s.InstanceId = &v - return s -} - -// SetState sets the State field's value. -func (s *IamInstanceProfileAssociation) SetState(v string) *IamInstanceProfileAssociation { - s.State = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *IamInstanceProfileAssociation) SetTimestamp(v time.Time) *IamInstanceProfileAssociation { - s.Timestamp = &v - return s -} - -// Describes an IAM instance profile. -type IamInstanceProfileSpecification struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the instance profile. - Arn *string `locationName:"arn" type:"string"` - - // The name of the instance profile. - Name *string `locationName:"name" type:"string"` -} - -// String returns the string representation -func (s IamInstanceProfileSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IamInstanceProfileSpecification) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *IamInstanceProfileSpecification) SetArn(v string) *IamInstanceProfileSpecification { - s.Arn = &v - return s -} - -// SetName sets the Name field's value. -func (s *IamInstanceProfileSpecification) SetName(v string) *IamInstanceProfileSpecification { - s.Name = &v - return s -} - -// Describes the ICMP type and code. -type IcmpTypeCode struct { - _ struct{} `type:"structure"` - - // The ICMP code. A value of -1 means all codes for the specified ICMP type. - Code *int64 `locationName:"code" type:"integer"` - - // The ICMP type. A value of -1 means all types. - Type *int64 `locationName:"type" type:"integer"` -} - -// String returns the string representation -func (s IcmpTypeCode) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IcmpTypeCode) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *IcmpTypeCode) SetCode(v int64) *IcmpTypeCode { - s.Code = &v - return s -} - -// SetType sets the Type field's value. -func (s *IcmpTypeCode) SetType(v int64) *IcmpTypeCode { - s.Type = &v - return s -} - -// Describes the ID format for a resource. -type IdFormat struct { - _ struct{} `type:"structure"` - - // The date in UTC at which you are permanently switched over to using longer - // IDs. If a deadline is not yet available for this resource type, this field - // is not returned. - Deadline *time.Time `locationName:"deadline" type:"timestamp"` - - // The type of resource. - Resource *string `locationName:"resource" type:"string"` - - // Indicates whether longer IDs (17-character IDs) are enabled for the resource. - UseLongIds *bool `locationName:"useLongIds" type:"boolean"` -} - -// String returns the string representation -func (s IdFormat) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IdFormat) GoString() string { - return s.String() -} - -// SetDeadline sets the Deadline field's value. -func (s *IdFormat) SetDeadline(v time.Time) *IdFormat { - s.Deadline = &v - return s -} - -// SetResource sets the Resource field's value. -func (s *IdFormat) SetResource(v string) *IdFormat { - s.Resource = &v - return s -} - -// SetUseLongIds sets the UseLongIds field's value. -func (s *IdFormat) SetUseLongIds(v bool) *IdFormat { - s.UseLongIds = &v - return s -} - -// Describes an image. -type Image struct { - _ struct{} `type:"structure"` - - // The architecture of the image. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - - // Any block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // The date and time the image was created. - CreationDate *string `locationName:"creationDate" type:"string"` - - // The description of the AMI that was provided during image creation. - Description *string `locationName:"description" type:"string"` - - // Specifies whether enhanced networking with ENA is enabled. - EnaSupport *bool `locationName:"enaSupport" type:"boolean"` - - // The hypervisor type of the image. - Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The location of the AMI. - ImageLocation *string `locationName:"imageLocation" type:"string"` - - // The AWS account alias (for example, amazon, self) or the AWS account ID of - // the AMI owner. - ImageOwnerAlias *string `locationName:"imageOwnerAlias" type:"string"` - - // The type of image. - ImageType *string `locationName:"imageType" type:"string" enum:"ImageTypeValues"` - - // The kernel associated with the image, if any. Only applicable for machine - // images. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the AMI that was provided during image creation. - Name *string `locationName:"name" type:"string"` - - // The AWS account ID of the image owner. - OwnerId *string `locationName:"imageOwnerId" type:"string"` - - // This value is set to windows for Windows AMIs; otherwise, it is blank. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` - - // Any product codes associated with the AMI. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // Indicates whether the image has public launch permissions. The value is true - // if this image has public launch permissions or false if it has only implicit - // and explicit launch permissions. - Public *bool `locationName:"isPublic" type:"boolean"` - - // The RAM disk associated with the image, if any. Only applicable for machine - // images. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // The device name of the root device volume (for example, /dev/sda1). - RootDeviceName *string `locationName:"rootDeviceName" type:"string"` - - // The type of root device used by the AMI. The AMI can use an EBS volume or - // an instance store volume. - RootDeviceType *string `locationName:"rootDeviceType" type:"string" enum:"DeviceType"` - - // Specifies whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` - - // The current state of the AMI. If the state is available, the image is successfully - // registered and can be used to launch an instance. - State *string `locationName:"imageState" type:"string" enum:"ImageState"` - - // The reason for the state change. - StateReason *StateReason `locationName:"stateReason" type:"structure"` - - // Any tags assigned to the image. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The type of virtualization of the AMI. - VirtualizationType *string `locationName:"virtualizationType" type:"string" enum:"VirtualizationType"` -} - -// String returns the string representation -func (s Image) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Image) GoString() string { - return s.String() -} - -// SetArchitecture sets the Architecture field's value. -func (s *Image) SetArchitecture(v string) *Image { - s.Architecture = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *Image) SetBlockDeviceMappings(v []*BlockDeviceMapping) *Image { - s.BlockDeviceMappings = v - return s -} - -// SetCreationDate sets the CreationDate field's value. -func (s *Image) SetCreationDate(v string) *Image { - s.CreationDate = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *Image) SetDescription(v string) *Image { - s.Description = &v - return s -} - -// SetEnaSupport sets the EnaSupport field's value. -func (s *Image) SetEnaSupport(v bool) *Image { - s.EnaSupport = &v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *Image) SetHypervisor(v string) *Image { - s.Hypervisor = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *Image) SetImageId(v string) *Image { - s.ImageId = &v - return s -} - -// SetImageLocation sets the ImageLocation field's value. -func (s *Image) SetImageLocation(v string) *Image { - s.ImageLocation = &v - return s -} - -// SetImageOwnerAlias sets the ImageOwnerAlias field's value. -func (s *Image) SetImageOwnerAlias(v string) *Image { - s.ImageOwnerAlias = &v - return s -} - -// SetImageType sets the ImageType field's value. -func (s *Image) SetImageType(v string) *Image { - s.ImageType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *Image) SetKernelId(v string) *Image { - s.KernelId = &v - return s -} - -// SetName sets the Name field's value. -func (s *Image) SetName(v string) *Image { - s.Name = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *Image) SetOwnerId(v string) *Image { - s.OwnerId = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *Image) SetPlatform(v string) *Image { - s.Platform = &v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *Image) SetProductCodes(v []*ProductCode) *Image { - s.ProductCodes = v - return s -} - -// SetPublic sets the Public field's value. -func (s *Image) SetPublic(v bool) *Image { - s.Public = &v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *Image) SetRamdiskId(v string) *Image { - s.RamdiskId = &v - return s -} - -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *Image) SetRootDeviceName(v string) *Image { - s.RootDeviceName = &v - return s -} - -// SetRootDeviceType sets the RootDeviceType field's value. -func (s *Image) SetRootDeviceType(v string) *Image { - s.RootDeviceType = &v - return s -} - -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *Image) SetSriovNetSupport(v string) *Image { - s.SriovNetSupport = &v - return s -} - -// SetState sets the State field's value. -func (s *Image) SetState(v string) *Image { - s.State = &v - return s -} - -// SetStateReason sets the StateReason field's value. -func (s *Image) SetStateReason(v *StateReason) *Image { - s.StateReason = v - return s -} - -// SetTags sets the Tags field's value. -func (s *Image) SetTags(v []*Tag) *Image { - s.Tags = v - return s -} - -// SetVirtualizationType sets the VirtualizationType field's value. -func (s *Image) SetVirtualizationType(v string) *Image { - s.VirtualizationType = &v - return s -} - -// Describes the disk container object for an import image task. -type ImageDiskContainer struct { - _ struct{} `type:"structure"` - - // The description of the disk image. - Description *string `type:"string"` - - // The block device mapping for the disk. - DeviceName *string `type:"string"` - - // The format of the disk image being imported. - // - // Valid values: VHD | VMDK | OVA - Format *string `type:"string"` - - // The ID of the EBS snapshot to be used for importing the snapshot. - SnapshotId *string `type:"string"` - - // The URL to the Amazon S3-based disk image being imported. The URL can either - // be a https URL (https://..) or an Amazon S3 URL (s3://..) - Url *string `type:"string"` - - // The S3 bucket for the disk image. - UserBucket *UserBucket `type:"structure"` -} - -// String returns the string representation -func (s ImageDiskContainer) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImageDiskContainer) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ImageDiskContainer) SetDescription(v string) *ImageDiskContainer { - s.Description = &v - return s -} - -// SetDeviceName sets the DeviceName field's value. -func (s *ImageDiskContainer) SetDeviceName(v string) *ImageDiskContainer { - s.DeviceName = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *ImageDiskContainer) SetFormat(v string) *ImageDiskContainer { - s.Format = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *ImageDiskContainer) SetSnapshotId(v string) *ImageDiskContainer { - s.SnapshotId = &v - return s -} - -// SetUrl sets the Url field's value. -func (s *ImageDiskContainer) SetUrl(v string) *ImageDiskContainer { - s.Url = &v - return s -} - -// SetUserBucket sets the UserBucket field's value. -func (s *ImageDiskContainer) SetUserBucket(v *UserBucket) *ImageDiskContainer { - s.UserBucket = v - return s -} - -type ImportClientVpnClientCertificateRevocationListInput struct { - _ struct{} `type:"structure"` - - // The client certificate revocation list file. For more information, see Generate - // a Client Certificate Revocation List (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate) - // in the AWS Client VPN Administrator Guide. - // - // CertificateRevocationList is a required field - CertificateRevocationList *string `type:"string" required:"true"` - - // The ID of the Client VPN endpoint to which the client certificate revocation - // list applies. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s ImportClientVpnClientCertificateRevocationListInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportClientVpnClientCertificateRevocationListInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ImportClientVpnClientCertificateRevocationListInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportClientVpnClientCertificateRevocationListInput"} - if s.CertificateRevocationList == nil { - invalidParams.Add(request.NewErrParamRequired("CertificateRevocationList")) - } - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCertificateRevocationList sets the CertificateRevocationList field's value. -func (s *ImportClientVpnClientCertificateRevocationListInput) SetCertificateRevocationList(v string) *ImportClientVpnClientCertificateRevocationListInput { - s.CertificateRevocationList = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ImportClientVpnClientCertificateRevocationListInput) SetClientVpnEndpointId(v string) *ImportClientVpnClientCertificateRevocationListInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ImportClientVpnClientCertificateRevocationListInput) SetDryRun(v bool) *ImportClientVpnClientCertificateRevocationListInput { - s.DryRun = &v - return s -} - -type ImportClientVpnClientCertificateRevocationListOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ImportClientVpnClientCertificateRevocationListOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportClientVpnClientCertificateRevocationListOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ImportClientVpnClientCertificateRevocationListOutput) SetReturn(v bool) *ImportClientVpnClientCertificateRevocationListOutput { - s.Return = &v - return s -} - -type ImportImageInput struct { - _ struct{} `type:"structure"` - - // The architecture of the virtual machine. - // - // Valid values: i386 | x86_64 | arm64 - Architecture *string `type:"string"` - - // The client-specific data. - ClientData *ClientData `type:"structure"` - - // The token to enable idempotency for VM import requests. - ClientToken *string `type:"string"` - - // A description string for the import image task. - Description *string `type:"string"` - - // Information about the disk containers. - DiskContainers []*ImageDiskContainer `locationName:"DiskContainer" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Specifies whether the destination AMI of the imported image should be encrypted. - // The default CMK for EBS is used unless you specify a non-default AWS Key - // Management Service (AWS KMS) CMK using KmsKeyId. For more information, see - // Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) - // in the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `type:"boolean"` - - // The target hypervisor platform. - // - // Valid values: xen - Hypervisor *string `type:"string"` - - // An identifier for the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use when creating the encrypted AMI. This parameter is only - // required if you want to use a non-default CMK; if this parameter is not specified, - // the default CMK for EBS is used. If a KmsKeyId is specified, the Encrypted - // flag must also be set. - // - // The CMK identifier may be provided in any of the following formats: - // - // * Key ID - // - // * Key alias. The alias ARN contains the arn:aws:kms namespace, followed - // by the Region of the CMK, the AWS account ID of the CMK owner, the alias - // namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // * ARN using key ID. The ID ARN contains the arn:aws:kms namespace, followed - // by the Region of the CMK, the AWS account ID of the CMK owner, the key - // namespace, and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // - // * ARN using key alias. The alias ARN contains the arn:aws:kms namespace, - // followed by the Region of the CMK, the AWS account ID of the CMK owner, - // the alias namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // AWS parses KmsKeyId asynchronously, meaning that the action you call may - // appear to complete even though you provided an invalid identifier. This action - // will eventually report failure. - // - // The specified CMK must exist in the Region that the AMI is being copied to. - KmsKeyId *string `type:"string"` - - // The ARNs of the license configurations. - LicenseSpecifications []*ImportImageLicenseConfigurationRequest `locationNameList:"item" type:"list"` - - // The license type to be used for the Amazon Machine Image (AMI) after importing. - // - // By default, we detect the source-system operating system (OS) and apply the - // appropriate license. Specify AWS to replace the source-system license with - // an AWS license, if appropriate. Specify BYOL to retain the source-system - // license, if appropriate. - // - // To use BYOL, you must have existing licenses with rights to use these licenses - // in a third party cloud, such as AWS. For more information, see Prerequisites - // (https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image) - // in the VM Import/Export User Guide. - LicenseType *string `type:"string"` - - // The operating system of the virtual machine. - // - // Valid values: Windows | Linux - Platform *string `type:"string"` - - // The name of the role to use when not using the default role, 'vmimport'. - RoleName *string `type:"string"` -} - -// String returns the string representation -func (s ImportImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportImageInput) GoString() string { - return s.String() -} - -// SetArchitecture sets the Architecture field's value. -func (s *ImportImageInput) SetArchitecture(v string) *ImportImageInput { - s.Architecture = &v - return s -} - -// SetClientData sets the ClientData field's value. -func (s *ImportImageInput) SetClientData(v *ClientData) *ImportImageInput { - s.ClientData = v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *ImportImageInput) SetClientToken(v string) *ImportImageInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportImageInput) SetDescription(v string) *ImportImageInput { - s.Description = &v - return s -} - -// SetDiskContainers sets the DiskContainers field's value. -func (s *ImportImageInput) SetDiskContainers(v []*ImageDiskContainer) *ImportImageInput { - s.DiskContainers = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ImportImageInput) SetDryRun(v bool) *ImportImageInput { - s.DryRun = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *ImportImageInput) SetEncrypted(v bool) *ImportImageInput { - s.Encrypted = &v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *ImportImageInput) SetHypervisor(v string) *ImportImageInput { - s.Hypervisor = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ImportImageInput) SetKmsKeyId(v string) *ImportImageInput { - s.KmsKeyId = &v - return s -} - -// SetLicenseSpecifications sets the LicenseSpecifications field's value. -func (s *ImportImageInput) SetLicenseSpecifications(v []*ImportImageLicenseConfigurationRequest) *ImportImageInput { - s.LicenseSpecifications = v - return s -} - -// SetLicenseType sets the LicenseType field's value. -func (s *ImportImageInput) SetLicenseType(v string) *ImportImageInput { - s.LicenseType = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ImportImageInput) SetPlatform(v string) *ImportImageInput { - s.Platform = &v - return s -} - -// SetRoleName sets the RoleName field's value. -func (s *ImportImageInput) SetRoleName(v string) *ImportImageInput { - s.RoleName = &v - return s -} - -// The request information of license configurations. -type ImportImageLicenseConfigurationRequest struct { - _ struct{} `type:"structure"` - - // The ARN of a license configuration. - LicenseConfigurationArn *string `type:"string"` -} - -// String returns the string representation -func (s ImportImageLicenseConfigurationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportImageLicenseConfigurationRequest) GoString() string { - return s.String() -} - -// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. -func (s *ImportImageLicenseConfigurationRequest) SetLicenseConfigurationArn(v string) *ImportImageLicenseConfigurationRequest { - s.LicenseConfigurationArn = &v - return s -} - -// The response information of license configurations. -type ImportImageLicenseConfigurationResponse struct { - _ struct{} `type:"structure"` - - // The ARN of a license configuration. - LicenseConfigurationArn *string `locationName:"licenseConfigurationArn" type:"string"` -} - -// String returns the string representation -func (s ImportImageLicenseConfigurationResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportImageLicenseConfigurationResponse) GoString() string { - return s.String() -} - -// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. -func (s *ImportImageLicenseConfigurationResponse) SetLicenseConfigurationArn(v string) *ImportImageLicenseConfigurationResponse { - s.LicenseConfigurationArn = &v - return s -} - -type ImportImageOutput struct { - _ struct{} `type:"structure"` - - // The architecture of the virtual machine. - Architecture *string `locationName:"architecture" type:"string"` - - // A description of the import task. - Description *string `locationName:"description" type:"string"` - - // Indicates whether the AMI is encypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The target hypervisor of the import task. - Hypervisor *string `locationName:"hypervisor" type:"string"` - - // The ID of the Amazon Machine Image (AMI) created by the import task. - ImageId *string `locationName:"imageId" type:"string"` - - // The task ID of the import image task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // The identifier for the AWS Key Management Service (AWS KMS) customer master - // key (CMK) that was used to create the encrypted AMI. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // The ARNs of the license configurations. - LicenseSpecifications []*ImportImageLicenseConfigurationResponse `locationName:"licenseSpecifications" locationNameList:"item" type:"list"` - - // The license type of the virtual machine. - LicenseType *string `locationName:"licenseType" type:"string"` - - // The operating system of the virtual machine. - Platform *string `locationName:"platform" type:"string"` - - // The progress of the task. - Progress *string `locationName:"progress" type:"string"` - - // Information about the snapshots. - SnapshotDetails []*SnapshotDetail `locationName:"snapshotDetailSet" locationNameList:"item" type:"list"` - - // A brief status of the task. - Status *string `locationName:"status" type:"string"` - - // A detailed status message of the import task. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s ImportImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportImageOutput) GoString() string { - return s.String() -} - -// SetArchitecture sets the Architecture field's value. -func (s *ImportImageOutput) SetArchitecture(v string) *ImportImageOutput { - s.Architecture = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportImageOutput) SetDescription(v string) *ImportImageOutput { - s.Description = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *ImportImageOutput) SetEncrypted(v bool) *ImportImageOutput { - s.Encrypted = &v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *ImportImageOutput) SetHypervisor(v string) *ImportImageOutput { - s.Hypervisor = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ImportImageOutput) SetImageId(v string) *ImportImageOutput { - s.ImageId = &v - return s -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportImageOutput) SetImportTaskId(v string) *ImportImageOutput { - s.ImportTaskId = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ImportImageOutput) SetKmsKeyId(v string) *ImportImageOutput { - s.KmsKeyId = &v - return s -} - -// SetLicenseSpecifications sets the LicenseSpecifications field's value. -func (s *ImportImageOutput) SetLicenseSpecifications(v []*ImportImageLicenseConfigurationResponse) *ImportImageOutput { - s.LicenseSpecifications = v - return s -} - -// SetLicenseType sets the LicenseType field's value. -func (s *ImportImageOutput) SetLicenseType(v string) *ImportImageOutput { - s.LicenseType = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ImportImageOutput) SetPlatform(v string) *ImportImageOutput { - s.Platform = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *ImportImageOutput) SetProgress(v string) *ImportImageOutput { - s.Progress = &v - return s -} - -// SetSnapshotDetails sets the SnapshotDetails field's value. -func (s *ImportImageOutput) SetSnapshotDetails(v []*SnapshotDetail) *ImportImageOutput { - s.SnapshotDetails = v - return s -} - -// SetStatus sets the Status field's value. -func (s *ImportImageOutput) SetStatus(v string) *ImportImageOutput { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ImportImageOutput) SetStatusMessage(v string) *ImportImageOutput { - s.StatusMessage = &v - return s -} - -// Describes an import image task. -type ImportImageTask struct { - _ struct{} `type:"structure"` - - // The architecture of the virtual machine. - // - // Valid values: i386 | x86_64 | arm64 - Architecture *string `locationName:"architecture" type:"string"` - - // A description of the import task. - Description *string `locationName:"description" type:"string"` - - // Indicates whether the image is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The target hypervisor for the import task. - // - // Valid values: xen - Hypervisor *string `locationName:"hypervisor" type:"string"` - - // The ID of the Amazon Machine Image (AMI) of the imported virtual machine. - ImageId *string `locationName:"imageId" type:"string"` - - // The ID of the import image task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // The identifier for the AWS Key Management Service (AWS KMS) customer master - // key (CMK) that was used to create the encrypted image. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // The ARNs of the license configurations associated to the import image task. - LicenseSpecifications []*ImportImageLicenseConfigurationResponse `locationName:"licenseSpecifications" locationNameList:"item" type:"list"` - - // The license type of the virtual machine. - LicenseType *string `locationName:"licenseType" type:"string"` - - // The description string for the import image task. - Platform *string `locationName:"platform" type:"string"` - - // The percentage of progress of the import image task. - Progress *string `locationName:"progress" type:"string"` - - // Information about the snapshots. - SnapshotDetails []*SnapshotDetail `locationName:"snapshotDetailSet" locationNameList:"item" type:"list"` - - // A brief status for the import image task. - Status *string `locationName:"status" type:"string"` - - // A descriptive status message for the import image task. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s ImportImageTask) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportImageTask) GoString() string { - return s.String() -} - -// SetArchitecture sets the Architecture field's value. -func (s *ImportImageTask) SetArchitecture(v string) *ImportImageTask { - s.Architecture = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportImageTask) SetDescription(v string) *ImportImageTask { - s.Description = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *ImportImageTask) SetEncrypted(v bool) *ImportImageTask { - s.Encrypted = &v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *ImportImageTask) SetHypervisor(v string) *ImportImageTask { - s.Hypervisor = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ImportImageTask) SetImageId(v string) *ImportImageTask { - s.ImageId = &v - return s -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportImageTask) SetImportTaskId(v string) *ImportImageTask { - s.ImportTaskId = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ImportImageTask) SetKmsKeyId(v string) *ImportImageTask { - s.KmsKeyId = &v - return s -} - -// SetLicenseSpecifications sets the LicenseSpecifications field's value. -func (s *ImportImageTask) SetLicenseSpecifications(v []*ImportImageLicenseConfigurationResponse) *ImportImageTask { - s.LicenseSpecifications = v - return s -} - -// SetLicenseType sets the LicenseType field's value. -func (s *ImportImageTask) SetLicenseType(v string) *ImportImageTask { - s.LicenseType = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ImportImageTask) SetPlatform(v string) *ImportImageTask { - s.Platform = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *ImportImageTask) SetProgress(v string) *ImportImageTask { - s.Progress = &v - return s -} - -// SetSnapshotDetails sets the SnapshotDetails field's value. -func (s *ImportImageTask) SetSnapshotDetails(v []*SnapshotDetail) *ImportImageTask { - s.SnapshotDetails = v - return s -} - -// SetStatus sets the Status field's value. -func (s *ImportImageTask) SetStatus(v string) *ImportImageTask { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ImportImageTask) SetStatusMessage(v string) *ImportImageTask { - s.StatusMessage = &v - return s -} - -type ImportInstanceInput struct { - _ struct{} `type:"structure"` - - // A description for the instance being imported. - Description *string `locationName:"description" type:"string"` - - // The disk image. - DiskImages []*DiskImage `locationName:"diskImage" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The launch specification. - LaunchSpecification *ImportInstanceLaunchSpecification `locationName:"launchSpecification" type:"structure"` - - // The instance operating system. - // - // Platform is a required field - Platform *string `locationName:"platform" type:"string" required:"true" enum:"PlatformValues"` -} - -// String returns the string representation -func (s ImportInstanceInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportInstanceInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ImportInstanceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportInstanceInput"} - if s.Platform == nil { - invalidParams.Add(request.NewErrParamRequired("Platform")) - } - if s.DiskImages != nil { - for i, v := range s.DiskImages { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DiskImages", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *ImportInstanceInput) SetDescription(v string) *ImportInstanceInput { - s.Description = &v - return s -} - -// SetDiskImages sets the DiskImages field's value. -func (s *ImportInstanceInput) SetDiskImages(v []*DiskImage) *ImportInstanceInput { - s.DiskImages = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ImportInstanceInput) SetDryRun(v bool) *ImportInstanceInput { - s.DryRun = &v - return s -} - -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *ImportInstanceInput) SetLaunchSpecification(v *ImportInstanceLaunchSpecification) *ImportInstanceInput { - s.LaunchSpecification = v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ImportInstanceInput) SetPlatform(v string) *ImportInstanceInput { - s.Platform = &v - return s -} - -// Describes the launch specification for VM import. -type ImportInstanceLaunchSpecification struct { - _ struct{} `type:"structure"` - - // Reserved. - AdditionalInfo *string `locationName:"additionalInfo" type:"string"` - - // The architecture of the instance. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - - // The security group IDs. - GroupIds []*string `locationName:"GroupId" locationNameList:"SecurityGroupId" type:"list"` - - // The security group names. - GroupNames []*string `locationName:"GroupName" locationNameList:"SecurityGroup" type:"list"` - - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` - - // The instance type. For more information about the instance types that you - // can import, see Instance Types (https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types) - // in the VM Import/Export User Guide. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // Indicates whether monitoring is enabled. - Monitoring *bool `locationName:"monitoring" type:"boolean"` - - // The placement information for the instance. - Placement *Placement `locationName:"placement" type:"structure"` - - // [EC2-VPC] An available IP address from the IP address range of the subnet. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // [EC2-VPC] The ID of the subnet in which to launch the instance. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The Base64-encoded user data to make available to the instance. - UserData *UserData `locationName:"userData" type:"structure" sensitive:"true"` -} - -// String returns the string representation -func (s ImportInstanceLaunchSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportInstanceLaunchSpecification) GoString() string { - return s.String() -} - -// SetAdditionalInfo sets the AdditionalInfo field's value. -func (s *ImportInstanceLaunchSpecification) SetAdditionalInfo(v string) *ImportInstanceLaunchSpecification { - s.AdditionalInfo = &v - return s -} - -// SetArchitecture sets the Architecture field's value. -func (s *ImportInstanceLaunchSpecification) SetArchitecture(v string) *ImportInstanceLaunchSpecification { - s.Architecture = &v - return s -} - -// SetGroupIds sets the GroupIds field's value. -func (s *ImportInstanceLaunchSpecification) SetGroupIds(v []*string) *ImportInstanceLaunchSpecification { - s.GroupIds = v - return s -} - -// SetGroupNames sets the GroupNames field's value. -func (s *ImportInstanceLaunchSpecification) SetGroupNames(v []*string) *ImportInstanceLaunchSpecification { - s.GroupNames = v - return s -} - -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *ImportInstanceLaunchSpecification) SetInstanceInitiatedShutdownBehavior(v string) *ImportInstanceLaunchSpecification { - s.InstanceInitiatedShutdownBehavior = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ImportInstanceLaunchSpecification) SetInstanceType(v string) *ImportInstanceLaunchSpecification { - s.InstanceType = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *ImportInstanceLaunchSpecification) SetMonitoring(v bool) *ImportInstanceLaunchSpecification { - s.Monitoring = &v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *ImportInstanceLaunchSpecification) SetPlacement(v *Placement) *ImportInstanceLaunchSpecification { - s.Placement = v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *ImportInstanceLaunchSpecification) SetPrivateIpAddress(v string) *ImportInstanceLaunchSpecification { - s.PrivateIpAddress = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *ImportInstanceLaunchSpecification) SetSubnetId(v string) *ImportInstanceLaunchSpecification { - s.SubnetId = &v - return s -} - -// SetUserData sets the UserData field's value. -func (s *ImportInstanceLaunchSpecification) SetUserData(v *UserData) *ImportInstanceLaunchSpecification { - s.UserData = v - return s -} - -type ImportInstanceOutput struct { - _ struct{} `type:"structure"` - - // Information about the conversion task. - ConversionTask *ConversionTask `locationName:"conversionTask" type:"structure"` -} - -// String returns the string representation -func (s ImportInstanceOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportInstanceOutput) GoString() string { - return s.String() -} - -// SetConversionTask sets the ConversionTask field's value. -func (s *ImportInstanceOutput) SetConversionTask(v *ConversionTask) *ImportInstanceOutput { - s.ConversionTask = v - return s -} - -// Describes an import instance task. -type ImportInstanceTaskDetails struct { - _ struct{} `type:"structure"` - - // A description of the task. - Description *string `locationName:"description" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The instance operating system. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` - - // The volumes. - Volumes []*ImportInstanceVolumeDetailItem `locationName:"volumes" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ImportInstanceTaskDetails) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportInstanceTaskDetails) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ImportInstanceTaskDetails) SetDescription(v string) *ImportInstanceTaskDetails { - s.Description = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ImportInstanceTaskDetails) SetInstanceId(v string) *ImportInstanceTaskDetails { - s.InstanceId = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ImportInstanceTaskDetails) SetPlatform(v string) *ImportInstanceTaskDetails { - s.Platform = &v - return s -} - -// SetVolumes sets the Volumes field's value. -func (s *ImportInstanceTaskDetails) SetVolumes(v []*ImportInstanceVolumeDetailItem) *ImportInstanceTaskDetails { - s.Volumes = v - return s -} - -// Describes an import volume task. -type ImportInstanceVolumeDetailItem struct { - _ struct{} `type:"structure"` - - // The Availability Zone where the resulting instance will reside. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The number of bytes converted so far. - BytesConverted *int64 `locationName:"bytesConverted" type:"long"` - - // A description of the task. - Description *string `locationName:"description" type:"string"` - - // The image. - Image *DiskImageDescription `locationName:"image" type:"structure"` - - // The status of the import of this particular disk image. - Status *string `locationName:"status" type:"string"` - - // The status information or errors related to the disk image. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // The volume. - Volume *DiskImageVolumeDescription `locationName:"volume" type:"structure"` -} - -// String returns the string representation -func (s ImportInstanceVolumeDetailItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportInstanceVolumeDetailItem) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ImportInstanceVolumeDetailItem) SetAvailabilityZone(v string) *ImportInstanceVolumeDetailItem { - s.AvailabilityZone = &v - return s -} - -// SetBytesConverted sets the BytesConverted field's value. -func (s *ImportInstanceVolumeDetailItem) SetBytesConverted(v int64) *ImportInstanceVolumeDetailItem { - s.BytesConverted = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportInstanceVolumeDetailItem) SetDescription(v string) *ImportInstanceVolumeDetailItem { - s.Description = &v - return s -} - -// SetImage sets the Image field's value. -func (s *ImportInstanceVolumeDetailItem) SetImage(v *DiskImageDescription) *ImportInstanceVolumeDetailItem { - s.Image = v - return s -} - -// SetStatus sets the Status field's value. -func (s *ImportInstanceVolumeDetailItem) SetStatus(v string) *ImportInstanceVolumeDetailItem { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ImportInstanceVolumeDetailItem) SetStatusMessage(v string) *ImportInstanceVolumeDetailItem { - s.StatusMessage = &v - return s -} - -// SetVolume sets the Volume field's value. -func (s *ImportInstanceVolumeDetailItem) SetVolume(v *DiskImageVolumeDescription) *ImportInstanceVolumeDetailItem { - s.Volume = v - return s -} - -type ImportKeyPairInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // A unique name for the key pair. - // - // KeyName is a required field - KeyName *string `locationName:"keyName" type:"string" required:"true"` - - // The public key. For API calls, the text must be base64-encoded. For command - // line tools, base64 encoding is performed for you. - // - // PublicKeyMaterial is automatically base64 encoded/decoded by the SDK. - // - // PublicKeyMaterial is a required field - PublicKeyMaterial []byte `locationName:"publicKeyMaterial" type:"blob" required:"true"` -} - -// String returns the string representation -func (s ImportKeyPairInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportKeyPairInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ImportKeyPairInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportKeyPairInput"} - if s.KeyName == nil { - invalidParams.Add(request.NewErrParamRequired("KeyName")) - } - if s.PublicKeyMaterial == nil { - invalidParams.Add(request.NewErrParamRequired("PublicKeyMaterial")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ImportKeyPairInput) SetDryRun(v bool) *ImportKeyPairInput { - s.DryRun = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *ImportKeyPairInput) SetKeyName(v string) *ImportKeyPairInput { - s.KeyName = &v - return s -} - -// SetPublicKeyMaterial sets the PublicKeyMaterial field's value. -func (s *ImportKeyPairInput) SetPublicKeyMaterial(v []byte) *ImportKeyPairInput { - s.PublicKeyMaterial = v - return s -} - -type ImportKeyPairOutput struct { - _ struct{} `type:"structure"` - - // The MD5 public key fingerprint as specified in section 4 of RFC 4716. - KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` - - // The key pair name you provided. - KeyName *string `locationName:"keyName" type:"string"` -} - -// String returns the string representation -func (s ImportKeyPairOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportKeyPairOutput) GoString() string { - return s.String() -} - -// SetKeyFingerprint sets the KeyFingerprint field's value. -func (s *ImportKeyPairOutput) SetKeyFingerprint(v string) *ImportKeyPairOutput { - s.KeyFingerprint = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *ImportKeyPairOutput) SetKeyName(v string) *ImportKeyPairOutput { - s.KeyName = &v - return s -} - -type ImportSnapshotInput struct { - _ struct{} `type:"structure"` - - // The client-specific data. - ClientData *ClientData `type:"structure"` - - // Token to enable idempotency for VM import requests. - ClientToken *string `type:"string"` - - // The description string for the import snapshot task. - Description *string `type:"string"` - - // Information about the disk container. - DiskContainer *SnapshotDiskContainer `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Specifies whether the destination snapshot of the imported image should be - // encrypted. The default CMK for EBS is used unless you specify a non-default - // AWS Key Management Service (AWS KMS) CMK using KmsKeyId. For more information, - // see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) - // in the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `type:"boolean"` - - // An identifier for the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use when creating the encrypted snapshot. This parameter is - // only required if you want to use a non-default CMK; if this parameter is - // not specified, the default CMK for EBS is used. If a KmsKeyId is specified, - // the Encrypted flag must also be set. - // - // The CMK identifier may be provided in any of the following formats: - // - // * Key ID - // - // * Key alias. The alias ARN contains the arn:aws:kms namespace, followed - // by the Region of the CMK, the AWS account ID of the CMK owner, the alias - // namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // * ARN using key ID. The ID ARN contains the arn:aws:kms namespace, followed - // by the Region of the CMK, the AWS account ID of the CMK owner, the key - // namespace, and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // - // * ARN using key alias. The alias ARN contains the arn:aws:kms namespace, - // followed by the Region of the CMK, the AWS account ID of the CMK owner, - // the alias namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // AWS parses KmsKeyId asynchronously, meaning that the action you call may - // appear to complete even though you provided an invalid identifier. This action - // will eventually report failure. - // - // The specified CMK must exist in the Region that the snapshot is being copied - // to. - KmsKeyId *string `type:"string"` - - // The name of the role to use when not using the default role, 'vmimport'. - RoleName *string `type:"string"` -} - -// String returns the string representation -func (s ImportSnapshotInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportSnapshotInput) GoString() string { - return s.String() -} - -// SetClientData sets the ClientData field's value. -func (s *ImportSnapshotInput) SetClientData(v *ClientData) *ImportSnapshotInput { - s.ClientData = v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *ImportSnapshotInput) SetClientToken(v string) *ImportSnapshotInput { - s.ClientToken = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportSnapshotInput) SetDescription(v string) *ImportSnapshotInput { - s.Description = &v - return s -} - -// SetDiskContainer sets the DiskContainer field's value. -func (s *ImportSnapshotInput) SetDiskContainer(v *SnapshotDiskContainer) *ImportSnapshotInput { - s.DiskContainer = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ImportSnapshotInput) SetDryRun(v bool) *ImportSnapshotInput { - s.DryRun = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *ImportSnapshotInput) SetEncrypted(v bool) *ImportSnapshotInput { - s.Encrypted = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ImportSnapshotInput) SetKmsKeyId(v string) *ImportSnapshotInput { - s.KmsKeyId = &v - return s -} - -// SetRoleName sets the RoleName field's value. -func (s *ImportSnapshotInput) SetRoleName(v string) *ImportSnapshotInput { - s.RoleName = &v - return s -} - -type ImportSnapshotOutput struct { - _ struct{} `type:"structure"` - - // A description of the import snapshot task. - Description *string `locationName:"description" type:"string"` - - // The ID of the import snapshot task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // Information about the import snapshot task. - SnapshotTaskDetail *SnapshotTaskDetail `locationName:"snapshotTaskDetail" type:"structure"` -} - -// String returns the string representation -func (s ImportSnapshotOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportSnapshotOutput) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ImportSnapshotOutput) SetDescription(v string) *ImportSnapshotOutput { - s.Description = &v - return s -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportSnapshotOutput) SetImportTaskId(v string) *ImportSnapshotOutput { - s.ImportTaskId = &v - return s -} - -// SetSnapshotTaskDetail sets the SnapshotTaskDetail field's value. -func (s *ImportSnapshotOutput) SetSnapshotTaskDetail(v *SnapshotTaskDetail) *ImportSnapshotOutput { - s.SnapshotTaskDetail = v - return s -} - -// Describes an import snapshot task. -type ImportSnapshotTask struct { - _ struct{} `type:"structure"` - - // A description of the import snapshot task. - Description *string `locationName:"description" type:"string"` - - // The ID of the import snapshot task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // Describes an import snapshot task. - SnapshotTaskDetail *SnapshotTaskDetail `locationName:"snapshotTaskDetail" type:"structure"` -} - -// String returns the string representation -func (s ImportSnapshotTask) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportSnapshotTask) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *ImportSnapshotTask) SetDescription(v string) *ImportSnapshotTask { - s.Description = &v - return s -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportSnapshotTask) SetImportTaskId(v string) *ImportSnapshotTask { - s.ImportTaskId = &v - return s -} - -// SetSnapshotTaskDetail sets the SnapshotTaskDetail field's value. -func (s *ImportSnapshotTask) SetSnapshotTaskDetail(v *SnapshotTaskDetail) *ImportSnapshotTask { - s.SnapshotTaskDetail = v - return s -} - -type ImportVolumeInput struct { - _ struct{} `type:"structure"` - - // The Availability Zone for the resulting EBS volume. - // - // AvailabilityZone is a required field - AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` - - // A description of the volume. - Description *string `locationName:"description" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The disk image. - // - // Image is a required field - Image *DiskImageDetail `locationName:"image" type:"structure" required:"true"` - - // The volume size. - // - // Volume is a required field - Volume *VolumeDetail `locationName:"volume" type:"structure" required:"true"` -} - -// String returns the string representation -func (s ImportVolumeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportVolumeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ImportVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportVolumeInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) - } - if s.Image == nil { - invalidParams.Add(request.NewErrParamRequired("Image")) - } - if s.Volume == nil { - invalidParams.Add(request.NewErrParamRequired("Volume")) - } - if s.Image != nil { - if err := s.Image.Validate(); err != nil { - invalidParams.AddNested("Image", err.(request.ErrInvalidParams)) - } - } - if s.Volume != nil { - if err := s.Volume.Validate(); err != nil { - invalidParams.AddNested("Volume", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ImportVolumeInput) SetAvailabilityZone(v string) *ImportVolumeInput { - s.AvailabilityZone = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportVolumeInput) SetDescription(v string) *ImportVolumeInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ImportVolumeInput) SetDryRun(v bool) *ImportVolumeInput { - s.DryRun = &v - return s -} - -// SetImage sets the Image field's value. -func (s *ImportVolumeInput) SetImage(v *DiskImageDetail) *ImportVolumeInput { - s.Image = v - return s -} - -// SetVolume sets the Volume field's value. -func (s *ImportVolumeInput) SetVolume(v *VolumeDetail) *ImportVolumeInput { - s.Volume = v - return s -} - -type ImportVolumeOutput struct { - _ struct{} `type:"structure"` - - // Information about the conversion task. - ConversionTask *ConversionTask `locationName:"conversionTask" type:"structure"` -} - -// String returns the string representation -func (s ImportVolumeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportVolumeOutput) GoString() string { - return s.String() -} - -// SetConversionTask sets the ConversionTask field's value. -func (s *ImportVolumeOutput) SetConversionTask(v *ConversionTask) *ImportVolumeOutput { - s.ConversionTask = v - return s -} - -// Describes an import volume task. -type ImportVolumeTaskDetails struct { - _ struct{} `type:"structure"` - - // The Availability Zone where the resulting volume will reside. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The number of bytes converted so far. - BytesConverted *int64 `locationName:"bytesConverted" type:"long"` - - // The description you provided when starting the import volume task. - Description *string `locationName:"description" type:"string"` - - // The image. - Image *DiskImageDescription `locationName:"image" type:"structure"` - - // The volume. - Volume *DiskImageVolumeDescription `locationName:"volume" type:"structure"` -} - -// String returns the string representation -func (s ImportVolumeTaskDetails) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ImportVolumeTaskDetails) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ImportVolumeTaskDetails) SetAvailabilityZone(v string) *ImportVolumeTaskDetails { - s.AvailabilityZone = &v - return s -} - -// SetBytesConverted sets the BytesConverted field's value. -func (s *ImportVolumeTaskDetails) SetBytesConverted(v int64) *ImportVolumeTaskDetails { - s.BytesConverted = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportVolumeTaskDetails) SetDescription(v string) *ImportVolumeTaskDetails { - s.Description = &v - return s -} - -// SetImage sets the Image field's value. -func (s *ImportVolumeTaskDetails) SetImage(v *DiskImageDescription) *ImportVolumeTaskDetails { - s.Image = v - return s -} - -// SetVolume sets the Volume field's value. -func (s *ImportVolumeTaskDetails) SetVolume(v *DiskImageVolumeDescription) *ImportVolumeTaskDetails { - s.Volume = v - return s -} - -// Describes an instance. -type Instance struct { - _ struct{} `type:"structure"` - - // The AMI launch index, which can be used to find this instance in the launch - // group. - AmiLaunchIndex *int64 `locationName:"amiLaunchIndex" type:"integer"` - - // The architecture of the image. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - - // Any block device mapping entries for the instance. - BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // The ID of the Capacity Reservation. - CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` - - // Information about the Capacity Reservation targeting option. - CapacityReservationSpecification *CapacityReservationSpecificationResponse `locationName:"capacityReservationSpecification" type:"structure"` - - // The idempotency token you provided when you launched the instance, if applicable. - ClientToken *string `locationName:"clientToken" type:"string"` - - // The CPU options for the instance. - CpuOptions *CpuOptions `locationName:"cpuOptions" type:"structure"` - - // Indicates whether the instance is optimized for Amazon EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The Elastic GPU associated with the instance. - ElasticGpuAssociations []*ElasticGpuAssociation `locationName:"elasticGpuAssociationSet" locationNameList:"item" type:"list"` - - // The elastic inference accelerator associated with the instance. - ElasticInferenceAcceleratorAssociations []*ElasticInferenceAcceleratorAssociation `locationName:"elasticInferenceAcceleratorAssociationSet" locationNameList:"item" type:"list"` - - // Specifies whether enhanced networking with ENA is enabled. - EnaSupport *bool `locationName:"enaSupport" type:"boolean"` - - // Indicates whether the instance is enabled for hibernation. - HibernationOptions *HibernationOptions `locationName:"hibernationOptions" type:"structure"` - - // The hypervisor type of the instance. - Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"` - - // The IAM instance profile associated with the instance, if applicable. - IamInstanceProfile *IamInstanceProfile `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI used to launch the instance. - ImageId *string `locationName:"imageId" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // Indicates whether this is a Spot Instance or a Scheduled Instance. - InstanceLifecycle *string `locationName:"instanceLifecycle" type:"string" enum:"InstanceLifecycleType"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The kernel associated with this instance, if applicable. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair, if this instance was launched with an associated - // key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // The time the instance was launched. - LaunchTime *time.Time `locationName:"launchTime" type:"timestamp"` - - // The license configurations. - Licenses []*LicenseConfiguration `locationName:"licenseSet" locationNameList:"item" type:"list"` - - // The metadata options for the instance. - MetadataOptions *InstanceMetadataOptionsResponse `locationName:"metadataOptions" type:"structure"` - - // The monitoring for the instance. - Monitoring *Monitoring `locationName:"monitoring" type:"structure"` - - // [EC2-VPC] The network interfaces for the instance. - NetworkInterfaces []*InstanceNetworkInterface `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` - - // The location where the instance launched, if applicable. - Placement *Placement `locationName:"placement" type:"structure"` - - // The value is Windows for Windows instances; otherwise blank. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` - - // (IPv4 only) The private DNS hostname name assigned to the instance. This - // DNS hostname can only be used inside the Amazon EC2 network. This name is - // not available until the instance enters the running state. - // - // [EC2-VPC] The Amazon-provided DNS server resolves Amazon-provided private - // DNS hostnames if you've enabled DNS resolution and DNS hostnames in your - // VPC. If you are not using the Amazon-provided DNS server in your VPC, your - // custom domain name servers must resolve the hostname as appropriate. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The private IPv4 address assigned to the instance. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // The product codes attached to this instance, if applicable. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // (IPv4 only) The public DNS name assigned to the instance. This name is not - // available until the instance enters the running state. For EC2-VPC, this - // name is only available if you've enabled DNS hostnames for your VPC. - PublicDnsName *string `locationName:"dnsName" type:"string"` - - // The public IPv4 address assigned to the instance, if applicable. - PublicIpAddress *string `locationName:"ipAddress" type:"string"` - - // The RAM disk associated with this instance, if applicable. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // The device name of the root device volume (for example, /dev/sda1). - RootDeviceName *string `locationName:"rootDeviceName" type:"string"` - - // The root device type used by the AMI. The AMI can use an EBS volume or an - // instance store volume. - RootDeviceType *string `locationName:"rootDeviceType" type:"string" enum:"DeviceType"` - - // The security groups for the instance. - SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // Specifies whether to enable an instance launched in a VPC to perform NAT. - // This controls whether source/destination checking is enabled on the instance. - // A value of true means that checking is enabled, and false means that checking - // is disabled. The value must be false for the instance to perform NAT. For - // more information, see NAT Instances (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) - // in the Amazon Virtual Private Cloud User Guide. - SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` - - // If the request is a Spot Instance request, the ID of the request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` - - // Specifies whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` - - // The current state of the instance. - State *InstanceState `locationName:"instanceState" type:"structure"` - - // The reason for the most recent state transition. - StateReason *StateReason `locationName:"stateReason" type:"structure"` - - // The reason for the most recent state transition. This might be an empty string. - StateTransitionReason *string `locationName:"reason" type:"string"` - - // [EC2-VPC] The ID of the subnet in which the instance is running. - SubnetId *string `locationName:"subnetId" type:"string"` - - // Any tags assigned to the instance. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The virtualization type of the instance. - VirtualizationType *string `locationName:"virtualizationType" type:"string" enum:"VirtualizationType"` - - // [EC2-VPC] The ID of the VPC in which the instance is running. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s Instance) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Instance) GoString() string { - return s.String() -} - -// SetAmiLaunchIndex sets the AmiLaunchIndex field's value. -func (s *Instance) SetAmiLaunchIndex(v int64) *Instance { - s.AmiLaunchIndex = &v - return s -} - -// SetArchitecture sets the Architecture field's value. -func (s *Instance) SetArchitecture(v string) *Instance { - s.Architecture = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *Instance) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *Instance { - s.BlockDeviceMappings = v - return s -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *Instance) SetCapacityReservationId(v string) *Instance { - s.CapacityReservationId = &v - return s -} - -// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. -func (s *Instance) SetCapacityReservationSpecification(v *CapacityReservationSpecificationResponse) *Instance { - s.CapacityReservationSpecification = v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *Instance) SetClientToken(v string) *Instance { - s.ClientToken = &v - return s -} - -// SetCpuOptions sets the CpuOptions field's value. -func (s *Instance) SetCpuOptions(v *CpuOptions) *Instance { - s.CpuOptions = v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *Instance) SetEbsOptimized(v bool) *Instance { - s.EbsOptimized = &v - return s -} - -// SetElasticGpuAssociations sets the ElasticGpuAssociations field's value. -func (s *Instance) SetElasticGpuAssociations(v []*ElasticGpuAssociation) *Instance { - s.ElasticGpuAssociations = v - return s -} - -// SetElasticInferenceAcceleratorAssociations sets the ElasticInferenceAcceleratorAssociations field's value. -func (s *Instance) SetElasticInferenceAcceleratorAssociations(v []*ElasticInferenceAcceleratorAssociation) *Instance { - s.ElasticInferenceAcceleratorAssociations = v - return s -} - -// SetEnaSupport sets the EnaSupport field's value. -func (s *Instance) SetEnaSupport(v bool) *Instance { - s.EnaSupport = &v - return s -} - -// SetHibernationOptions sets the HibernationOptions field's value. -func (s *Instance) SetHibernationOptions(v *HibernationOptions) *Instance { - s.HibernationOptions = v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *Instance) SetHypervisor(v string) *Instance { - s.Hypervisor = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *Instance) SetIamInstanceProfile(v *IamInstanceProfile) *Instance { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *Instance) SetImageId(v string) *Instance { - s.ImageId = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *Instance) SetInstanceId(v string) *Instance { - s.InstanceId = &v - return s -} - -// SetInstanceLifecycle sets the InstanceLifecycle field's value. -func (s *Instance) SetInstanceLifecycle(v string) *Instance { - s.InstanceLifecycle = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *Instance) SetInstanceType(v string) *Instance { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *Instance) SetKernelId(v string) *Instance { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *Instance) SetKeyName(v string) *Instance { - s.KeyName = &v - return s -} - -// SetLaunchTime sets the LaunchTime field's value. -func (s *Instance) SetLaunchTime(v time.Time) *Instance { - s.LaunchTime = &v - return s -} - -// SetLicenses sets the Licenses field's value. -func (s *Instance) SetLicenses(v []*LicenseConfiguration) *Instance { - s.Licenses = v - return s -} - -// SetMetadataOptions sets the MetadataOptions field's value. -func (s *Instance) SetMetadataOptions(v *InstanceMetadataOptionsResponse) *Instance { - s.MetadataOptions = v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *Instance) SetMonitoring(v *Monitoring) *Instance { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *Instance) SetNetworkInterfaces(v []*InstanceNetworkInterface) *Instance { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *Instance) SetPlacement(v *Placement) *Instance { - s.Placement = v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *Instance) SetPlatform(v string) *Instance { - s.Platform = &v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *Instance) SetPrivateDnsName(v string) *Instance { - s.PrivateDnsName = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *Instance) SetPrivateIpAddress(v string) *Instance { - s.PrivateIpAddress = &v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *Instance) SetProductCodes(v []*ProductCode) *Instance { - s.ProductCodes = v - return s -} - -// SetPublicDnsName sets the PublicDnsName field's value. -func (s *Instance) SetPublicDnsName(v string) *Instance { - s.PublicDnsName = &v - return s -} - -// SetPublicIpAddress sets the PublicIpAddress field's value. -func (s *Instance) SetPublicIpAddress(v string) *Instance { - s.PublicIpAddress = &v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *Instance) SetRamdiskId(v string) *Instance { - s.RamdiskId = &v - return s -} - -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *Instance) SetRootDeviceName(v string) *Instance { - s.RootDeviceName = &v - return s -} - -// SetRootDeviceType sets the RootDeviceType field's value. -func (s *Instance) SetRootDeviceType(v string) *Instance { - s.RootDeviceType = &v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *Instance) SetSecurityGroups(v []*GroupIdentifier) *Instance { - s.SecurityGroups = v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *Instance) SetSourceDestCheck(v bool) *Instance { - s.SourceDestCheck = &v - return s -} - -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *Instance) SetSpotInstanceRequestId(v string) *Instance { - s.SpotInstanceRequestId = &v - return s -} - -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *Instance) SetSriovNetSupport(v string) *Instance { - s.SriovNetSupport = &v - return s -} - -// SetState sets the State field's value. -func (s *Instance) SetState(v *InstanceState) *Instance { - s.State = v - return s -} - -// SetStateReason sets the StateReason field's value. -func (s *Instance) SetStateReason(v *StateReason) *Instance { - s.StateReason = v - return s -} - -// SetStateTransitionReason sets the StateTransitionReason field's value. -func (s *Instance) SetStateTransitionReason(v string) *Instance { - s.StateTransitionReason = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *Instance) SetSubnetId(v string) *Instance { - s.SubnetId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Instance) SetTags(v []*Tag) *Instance { - s.Tags = v - return s -} - -// SetVirtualizationType sets the VirtualizationType field's value. -func (s *Instance) SetVirtualizationType(v string) *Instance { - s.VirtualizationType = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *Instance) SetVpcId(v string) *Instance { - s.VpcId = &v - return s -} - -// Describes a block device mapping. -type InstanceBlockDeviceMapping struct { - _ struct{} `type:"structure"` - - // The device name (for example, /dev/sdh or xvdh). - DeviceName *string `locationName:"deviceName" type:"string"` - - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *EbsInstanceBlockDevice `locationName:"ebs" type:"structure"` -} - -// String returns the string representation -func (s InstanceBlockDeviceMapping) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceBlockDeviceMapping) GoString() string { - return s.String() -} - -// SetDeviceName sets the DeviceName field's value. -func (s *InstanceBlockDeviceMapping) SetDeviceName(v string) *InstanceBlockDeviceMapping { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *InstanceBlockDeviceMapping) SetEbs(v *EbsInstanceBlockDevice) *InstanceBlockDeviceMapping { - s.Ebs = v - return s -} - -// Describes a block device mapping entry. -type InstanceBlockDeviceMappingSpecification struct { - _ struct{} `type:"structure"` - - // The device name (for example, /dev/sdh or xvdh). - DeviceName *string `locationName:"deviceName" type:"string"` - - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *EbsInstanceBlockDeviceSpecification `locationName:"ebs" type:"structure"` - - // suppress the specified device included in the block device mapping. - NoDevice *string `locationName:"noDevice" type:"string"` - - // The virtual device name. - VirtualName *string `locationName:"virtualName" type:"string"` -} - -// String returns the string representation -func (s InstanceBlockDeviceMappingSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceBlockDeviceMappingSpecification) GoString() string { - return s.String() -} - -// SetDeviceName sets the DeviceName field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetDeviceName(v string) *InstanceBlockDeviceMappingSpecification { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetEbs(v *EbsInstanceBlockDeviceSpecification) *InstanceBlockDeviceMappingSpecification { - s.Ebs = v - return s -} - -// SetNoDevice sets the NoDevice field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetNoDevice(v string) *InstanceBlockDeviceMappingSpecification { - s.NoDevice = &v - return s -} - -// SetVirtualName sets the VirtualName field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetVirtualName(v string) *InstanceBlockDeviceMappingSpecification { - s.VirtualName = &v - return s -} - -// Information about the number of instances that can be launched onto the Dedicated -// Host. -type InstanceCapacity struct { - _ struct{} `type:"structure"` - - // The number of instances that can be launched onto the Dedicated Host based - // on the host's available capacity. - AvailableCapacity *int64 `locationName:"availableCapacity" type:"integer"` - - // The instance type supported by the Dedicated Host. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The total number of instances that can be launched onto the Dedicated Host - // if there are no instances running on it. - TotalCapacity *int64 `locationName:"totalCapacity" type:"integer"` -} - -// String returns the string representation -func (s InstanceCapacity) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceCapacity) GoString() string { - return s.String() -} - -// SetAvailableCapacity sets the AvailableCapacity field's value. -func (s *InstanceCapacity) SetAvailableCapacity(v int64) *InstanceCapacity { - s.AvailableCapacity = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *InstanceCapacity) SetInstanceType(v string) *InstanceCapacity { - s.InstanceType = &v - return s -} - -// SetTotalCapacity sets the TotalCapacity field's value. -func (s *InstanceCapacity) SetTotalCapacity(v int64) *InstanceCapacity { - s.TotalCapacity = &v - return s -} - -// Describes a Reserved Instance listing state. -type InstanceCount struct { - _ struct{} `type:"structure"` - - // The number of listed Reserved Instances in the state specified by the state. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - - // The states of the listed Reserved Instances. - State *string `locationName:"state" type:"string" enum:"ListingState"` -} - -// String returns the string representation -func (s InstanceCount) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceCount) GoString() string { - return s.String() -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *InstanceCount) SetInstanceCount(v int64) *InstanceCount { - s.InstanceCount = &v - return s -} - -// SetState sets the State field's value. -func (s *InstanceCount) SetState(v string) *InstanceCount { - s.State = &v - return s -} - -// Describes the credit option for CPU usage of a T2 or T3 instance. -type InstanceCreditSpecification struct { - _ struct{} `type:"structure"` - - // The credit option for CPU usage of the instance. Valid values are standard - // and unlimited. - CpuCredits *string `locationName:"cpuCredits" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` -} - -// String returns the string representation -func (s InstanceCreditSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceCreditSpecification) GoString() string { - return s.String() -} - -// SetCpuCredits sets the CpuCredits field's value. -func (s *InstanceCreditSpecification) SetCpuCredits(v string) *InstanceCreditSpecification { - s.CpuCredits = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceCreditSpecification) SetInstanceId(v string) *InstanceCreditSpecification { - s.InstanceId = &v - return s -} - -// Describes the credit option for CPU usage of a T2 or T3 instance. -type InstanceCreditSpecificationRequest struct { - _ struct{} `type:"structure"` - - // The credit option for CPU usage of the instance. Valid values are standard - // and unlimited. - CpuCredits *string `type:"string"` - - // The ID of the instance. - InstanceId *string `type:"string"` -} - -// String returns the string representation -func (s InstanceCreditSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceCreditSpecificationRequest) GoString() string { - return s.String() -} - -// SetCpuCredits sets the CpuCredits field's value. -func (s *InstanceCreditSpecificationRequest) SetCpuCredits(v string) *InstanceCreditSpecificationRequest { - s.CpuCredits = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceCreditSpecificationRequest) SetInstanceId(v string) *InstanceCreditSpecificationRequest { - s.InstanceId = &v - return s -} - -// Describes an instance to export. -type InstanceExportDetails struct { - _ struct{} `type:"structure"` - - // The ID of the resource being exported. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The target virtualization environment. - TargetEnvironment *string `locationName:"targetEnvironment" type:"string" enum:"ExportEnvironment"` -} - -// String returns the string representation -func (s InstanceExportDetails) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceExportDetails) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceExportDetails) SetInstanceId(v string) *InstanceExportDetails { - s.InstanceId = &v - return s -} - -// SetTargetEnvironment sets the TargetEnvironment field's value. -func (s *InstanceExportDetails) SetTargetEnvironment(v string) *InstanceExportDetails { - s.TargetEnvironment = &v - return s -} - -// Describes an IPv6 address. -type InstanceIpv6Address struct { - _ struct{} `type:"structure"` - - // The IPv6 address. - Ipv6Address *string `locationName:"ipv6Address" type:"string"` -} - -// String returns the string representation -func (s InstanceIpv6Address) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceIpv6Address) GoString() string { - return s.String() -} - -// SetIpv6Address sets the Ipv6Address field's value. -func (s *InstanceIpv6Address) SetIpv6Address(v string) *InstanceIpv6Address { - s.Ipv6Address = &v - return s -} - -// Describes an IPv6 address. -type InstanceIpv6AddressRequest struct { - _ struct{} `type:"structure"` - - // The IPv6 address. - Ipv6Address *string `type:"string"` -} - -// String returns the string representation -func (s InstanceIpv6AddressRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceIpv6AddressRequest) GoString() string { - return s.String() -} - -// SetIpv6Address sets the Ipv6Address field's value. -func (s *InstanceIpv6AddressRequest) SetIpv6Address(v string) *InstanceIpv6AddressRequest { - s.Ipv6Address = &v - return s -} - -// Describes the market (purchasing) option for the instances. -type InstanceMarketOptionsRequest struct { - _ struct{} `type:"structure"` - - // The market type. - MarketType *string `type:"string" enum:"MarketType"` - - // The options for Spot Instances. - SpotOptions *SpotMarketOptions `type:"structure"` -} - -// String returns the string representation -func (s InstanceMarketOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceMarketOptionsRequest) GoString() string { - return s.String() -} - -// SetMarketType sets the MarketType field's value. -func (s *InstanceMarketOptionsRequest) SetMarketType(v string) *InstanceMarketOptionsRequest { - s.MarketType = &v - return s -} - -// SetSpotOptions sets the SpotOptions field's value. -func (s *InstanceMarketOptionsRequest) SetSpotOptions(v *SpotMarketOptions) *InstanceMarketOptionsRequest { - s.SpotOptions = v - return s -} - -// The metadata options for the instance. -type InstanceMetadataOptionsRequest struct { - _ struct{} `type:"structure"` - - // This parameter enables or disables the HTTP metadata endpoint on your instances. - // If the parameter is not specified, the default state is enabled. - // - // If you specify a value of disabled, you will not be able to access your instance - // metadata. - HttpEndpoint *string `type:"string" enum:"InstanceMetadataEndpointState"` - - // The desired HTTP PUT response hop limit for instance metadata requests. The - // larger the number, the further instance metadata requests can travel. - // - // Default: 1 - // - // Possible values: Integers from 1 to 64 - HttpPutResponseHopLimit *int64 `type:"integer"` - - // The state of token usage for your instance metadata requests. If the parameter - // is not specified in the request, the default state is optional. - // - // If the state is optional, you can choose to retrieve instance metadata with - // or without a signed token header on your request. If you retrieve the IAM - // role credentials without a token, the version 1.0 role credentials are returned. - // If you retrieve the IAM role credentials using a valid signed token, the - // version 2.0 role credentials are returned. - // - // If the state is required, you must send a signed token header with any instance - // metadata retrieval requests. In this state, retrieving the IAM role credentials - // always returns the version 2.0 credentials; the version 1.0 credentials are - // not available. - HttpTokens *string `type:"string" enum:"HttpTokensState"` -} - -// String returns the string representation -func (s InstanceMetadataOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceMetadataOptionsRequest) GoString() string { - return s.String() -} - -// SetHttpEndpoint sets the HttpEndpoint field's value. -func (s *InstanceMetadataOptionsRequest) SetHttpEndpoint(v string) *InstanceMetadataOptionsRequest { - s.HttpEndpoint = &v - return s -} - -// SetHttpPutResponseHopLimit sets the HttpPutResponseHopLimit field's value. -func (s *InstanceMetadataOptionsRequest) SetHttpPutResponseHopLimit(v int64) *InstanceMetadataOptionsRequest { - s.HttpPutResponseHopLimit = &v - return s -} - -// SetHttpTokens sets the HttpTokens field's value. -func (s *InstanceMetadataOptionsRequest) SetHttpTokens(v string) *InstanceMetadataOptionsRequest { - s.HttpTokens = &v - return s -} - -// The metadata options for the instance. -type InstanceMetadataOptionsResponse struct { - _ struct{} `type:"structure"` - - // This parameter enables or disables the HTTP metadata endpoint on your instances. - // If the parameter is not specified, the default state is enabled. - // - // If you specify a value of disabled, you will not be able to access your instance - // metadata. - HttpEndpoint *string `locationName:"httpEndpoint" type:"string" enum:"InstanceMetadataEndpointState"` - - // The desired HTTP PUT response hop limit for instance metadata requests. The - // larger the number, the further instance metadata requests can travel. - // - // Default: 1 - // - // Possible values: Integers from 1 to 64 - HttpPutResponseHopLimit *int64 `locationName:"httpPutResponseHopLimit" type:"integer"` - - // The state of token usage for your instance metadata requests. If the parameter - // is not specified in the request, the default state is optional. - // - // If the state is optional, you can choose to retrieve instance metadata with - // or without a signed token header on your request. If you retrieve the IAM - // role credentials without a token, the version 1.0 role credentials are returned. - // If you retrieve the IAM role credentials using a valid signed token, the - // version 2.0 role credentials are returned. - // - // If the state is required, you must send a signed token header with any instance - // metadata retrieval requests. In this state, retrieving the IAM role credential - // always returns the version 2.0 credentials; the version 1.0 credentials are - // not available. - HttpTokens *string `locationName:"httpTokens" type:"string" enum:"HttpTokensState"` - - // The state of the metadata option changes. - // - // pending - The metadata options are being updated and the instance is not - // ready to process metadata traffic with the new selection. - // - // applied - The metadata options have been successfully applied on the instance. - State *string `locationName:"state" type:"string" enum:"InstanceMetadataOptionsState"` -} - -// String returns the string representation -func (s InstanceMetadataOptionsResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceMetadataOptionsResponse) GoString() string { - return s.String() -} - -// SetHttpEndpoint sets the HttpEndpoint field's value. -func (s *InstanceMetadataOptionsResponse) SetHttpEndpoint(v string) *InstanceMetadataOptionsResponse { - s.HttpEndpoint = &v - return s -} - -// SetHttpPutResponseHopLimit sets the HttpPutResponseHopLimit field's value. -func (s *InstanceMetadataOptionsResponse) SetHttpPutResponseHopLimit(v int64) *InstanceMetadataOptionsResponse { - s.HttpPutResponseHopLimit = &v - return s -} - -// SetHttpTokens sets the HttpTokens field's value. -func (s *InstanceMetadataOptionsResponse) SetHttpTokens(v string) *InstanceMetadataOptionsResponse { - s.HttpTokens = &v - return s -} - -// SetState sets the State field's value. -func (s *InstanceMetadataOptionsResponse) SetState(v string) *InstanceMetadataOptionsResponse { - s.State = &v - return s -} - -// Describes the monitoring of an instance. -type InstanceMonitoring struct { - _ struct{} `type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The monitoring for the instance. - Monitoring *Monitoring `locationName:"monitoring" type:"structure"` -} - -// String returns the string representation -func (s InstanceMonitoring) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceMonitoring) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceMonitoring) SetInstanceId(v string) *InstanceMonitoring { - s.InstanceId = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *InstanceMonitoring) SetMonitoring(v *Monitoring) *InstanceMonitoring { - s.Monitoring = v - return s -} - -// Describes a network interface. -type InstanceNetworkInterface struct { - _ struct{} `type:"structure"` - - // The association information for an Elastic IPv4 associated with the network - // interface. - Association *InstanceNetworkInterfaceAssociation `locationName:"association" type:"structure"` - - // The network interface attachment. - Attachment *InstanceNetworkInterfaceAttachment `locationName:"attachment" type:"structure"` - - // The description. - Description *string `locationName:"description" type:"string"` - - // One or more security groups. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // Describes the type of network interface. - // - // Valid values: interface | efa - InterfaceType *string `locationName:"interfaceType" type:"string"` - - // One or more IPv6 addresses associated with the network interface. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` - - // The MAC address. - MacAddress *string `locationName:"macAddress" type:"string"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The ID of the AWS account that created the network interface. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The private DNS name. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The IPv4 address of the network interface within the subnet. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // One or more private IPv4 addresses associated with the network interface. - PrivateIpAddresses []*InstancePrivateIpAddress `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` - - // Indicates whether to validate network traffic to or from this network interface. - SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` - - // The status of the network interface. - Status *string `locationName:"status" type:"string" enum:"NetworkInterfaceStatus"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s InstanceNetworkInterface) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceNetworkInterface) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *InstanceNetworkInterface) SetAssociation(v *InstanceNetworkInterfaceAssociation) *InstanceNetworkInterface { - s.Association = v - return s -} - -// SetAttachment sets the Attachment field's value. -func (s *InstanceNetworkInterface) SetAttachment(v *InstanceNetworkInterfaceAttachment) *InstanceNetworkInterface { - s.Attachment = v - return s -} - -// SetDescription sets the Description field's value. -func (s *InstanceNetworkInterface) SetDescription(v string) *InstanceNetworkInterface { - s.Description = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *InstanceNetworkInterface) SetGroups(v []*GroupIdentifier) *InstanceNetworkInterface { - s.Groups = v - return s -} - -// SetInterfaceType sets the InterfaceType field's value. -func (s *InstanceNetworkInterface) SetInterfaceType(v string) *InstanceNetworkInterface { - s.InterfaceType = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *InstanceNetworkInterface) SetIpv6Addresses(v []*InstanceIpv6Address) *InstanceNetworkInterface { - s.Ipv6Addresses = v - return s -} - -// SetMacAddress sets the MacAddress field's value. -func (s *InstanceNetworkInterface) SetMacAddress(v string) *InstanceNetworkInterface { - s.MacAddress = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *InstanceNetworkInterface) SetNetworkInterfaceId(v string) *InstanceNetworkInterface { - s.NetworkInterfaceId = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *InstanceNetworkInterface) SetOwnerId(v string) *InstanceNetworkInterface { - s.OwnerId = &v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *InstanceNetworkInterface) SetPrivateDnsName(v string) *InstanceNetworkInterface { - s.PrivateDnsName = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *InstanceNetworkInterface) SetPrivateIpAddress(v string) *InstanceNetworkInterface { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *InstanceNetworkInterface) SetPrivateIpAddresses(v []*InstancePrivateIpAddress) *InstanceNetworkInterface { - s.PrivateIpAddresses = v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *InstanceNetworkInterface) SetSourceDestCheck(v bool) *InstanceNetworkInterface { - s.SourceDestCheck = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *InstanceNetworkInterface) SetStatus(v string) *InstanceNetworkInterface { - s.Status = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *InstanceNetworkInterface) SetSubnetId(v string) *InstanceNetworkInterface { - s.SubnetId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *InstanceNetworkInterface) SetVpcId(v string) *InstanceNetworkInterface { - s.VpcId = &v - return s -} - -// Describes association information for an Elastic IP address (IPv4). -type InstanceNetworkInterfaceAssociation struct { - _ struct{} `type:"structure"` - - // The ID of the owner of the Elastic IP address. - IpOwnerId *string `locationName:"ipOwnerId" type:"string"` - - // The public DNS name. - PublicDnsName *string `locationName:"publicDnsName" type:"string"` - - // The public IP address or Elastic IP address bound to the network interface. - PublicIp *string `locationName:"publicIp" type:"string"` -} - -// String returns the string representation -func (s InstanceNetworkInterfaceAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceNetworkInterfaceAssociation) GoString() string { - return s.String() -} - -// SetIpOwnerId sets the IpOwnerId field's value. -func (s *InstanceNetworkInterfaceAssociation) SetIpOwnerId(v string) *InstanceNetworkInterfaceAssociation { - s.IpOwnerId = &v - return s -} - -// SetPublicDnsName sets the PublicDnsName field's value. -func (s *InstanceNetworkInterfaceAssociation) SetPublicDnsName(v string) *InstanceNetworkInterfaceAssociation { - s.PublicDnsName = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *InstanceNetworkInterfaceAssociation) SetPublicIp(v string) *InstanceNetworkInterfaceAssociation { - s.PublicIp = &v - return s -} - -// Describes a network interface attachment. -type InstanceNetworkInterfaceAttachment struct { - _ struct{} `type:"structure"` - - // The time stamp when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` - - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The index of the device on the instance for the network interface attachment. - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` - - // The attachment state. - Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` -} - -// String returns the string representation -func (s InstanceNetworkInterfaceAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceNetworkInterfaceAttachment) GoString() string { - return s.String() -} - -// SetAttachTime sets the AttachTime field's value. -func (s *InstanceNetworkInterfaceAttachment) SetAttachTime(v time.Time) *InstanceNetworkInterfaceAttachment { - s.AttachTime = &v - return s -} - -// SetAttachmentId sets the AttachmentId field's value. -func (s *InstanceNetworkInterfaceAttachment) SetAttachmentId(v string) *InstanceNetworkInterfaceAttachment { - s.AttachmentId = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *InstanceNetworkInterfaceAttachment) SetDeleteOnTermination(v bool) *InstanceNetworkInterfaceAttachment { - s.DeleteOnTermination = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *InstanceNetworkInterfaceAttachment) SetDeviceIndex(v int64) *InstanceNetworkInterfaceAttachment { - s.DeviceIndex = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *InstanceNetworkInterfaceAttachment) SetStatus(v string) *InstanceNetworkInterfaceAttachment { - s.Status = &v - return s -} - -// Describes a network interface. -type InstanceNetworkInterfaceSpecification struct { - _ struct{} `type:"structure"` - - // Indicates whether to assign a public IPv4 address to an instance you launch - // in a VPC. The public IP address can only be assigned to a network interface - // for eth0, and can only be assigned to a new network interface, not an existing - // one. You cannot specify more than one network interface in the request. If - // launching into a default subnet, the default value is true. - AssociatePublicIpAddress *bool `locationName:"associatePublicIpAddress" type:"boolean"` - - // If set to true, the interface is deleted when the instance is terminated. - // You can specify true only if creating a new network interface when launching - // an instance. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The description of the network interface. Applies only if creating a network - // interface when launching an instance. - Description *string `locationName:"description" type:"string"` - - // The position of the network interface in the attachment order. A primary - // network interface has a device index of 0. - // - // If you specify a network interface when launching an instance, you must specify - // the device index. - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` - - // The IDs of the security groups for the network interface. Applies only if - // creating a network interface when launching an instance. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // The type of network interface. To create an Elastic Fabric Adapter (EFA), - // specify efa. For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // If you are not creating an EFA, specify interface or omit this parameter. - // - // Valid values: interface | efa - InterfaceType *string `type:"string"` - - // A number of IPv6 addresses to assign to the network interface. Amazon EC2 - // chooses the IPv6 addresses from the range of the subnet. You cannot specify - // this option and the option to assign specific IPv6 addresses in the same - // request. You can specify this option if you've specified a minimum number - // of instances to launch. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` - - // One or more IPv6 addresses to assign to the network interface. You cannot - // specify this option and the option to assign a number of IPv6 addresses in - // the same request. You cannot specify this option if you've specified a minimum - // number of instances to launch. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" queryName:"Ipv6Addresses" locationNameList:"item" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The private IPv4 address of the network interface. Applies only if creating - // a network interface when launching an instance. You cannot specify this option - // if you're launching more than one instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) - // request. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // One or more private IPv4 addresses to assign to the network interface. Only - // one private IPv4 address can be designated as primary. You cannot specify - // this option if you're launching more than one instance in a RunInstances - // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) - // request. - PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddressesSet" queryName:"PrivateIpAddresses" locationNameList:"item" type:"list"` - - // The number of secondary private IPv4 addresses. You can't specify this option - // and specify more than one private IP address using the private IP addresses - // option. You cannot specify this option if you're launching more than one - // instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) - // request. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` - - // The ID of the subnet associated with the network interface. Applies only - // if creating a network interface when launching an instance. - SubnetId *string `locationName:"subnetId" type:"string"` -} - -// String returns the string representation -func (s InstanceNetworkInterfaceSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceNetworkInterfaceSpecification) GoString() string { - return s.String() -} - -// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. -func (s *InstanceNetworkInterfaceSpecification) SetAssociatePublicIpAddress(v bool) *InstanceNetworkInterfaceSpecification { - s.AssociatePublicIpAddress = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *InstanceNetworkInterfaceSpecification) SetDeleteOnTermination(v bool) *InstanceNetworkInterfaceSpecification { - s.DeleteOnTermination = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *InstanceNetworkInterfaceSpecification) SetDescription(v string) *InstanceNetworkInterfaceSpecification { - s.Description = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *InstanceNetworkInterfaceSpecification) SetDeviceIndex(v int64) *InstanceNetworkInterfaceSpecification { - s.DeviceIndex = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *InstanceNetworkInterfaceSpecification) SetGroups(v []*string) *InstanceNetworkInterfaceSpecification { - s.Groups = v - return s -} - -// SetInterfaceType sets the InterfaceType field's value. -func (s *InstanceNetworkInterfaceSpecification) SetInterfaceType(v string) *InstanceNetworkInterfaceSpecification { - s.InterfaceType = &v - return s -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *InstanceNetworkInterfaceSpecification) SetIpv6AddressCount(v int64) *InstanceNetworkInterfaceSpecification { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *InstanceNetworkInterfaceSpecification) SetIpv6Addresses(v []*InstanceIpv6Address) *InstanceNetworkInterfaceSpecification { - s.Ipv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *InstanceNetworkInterfaceSpecification) SetNetworkInterfaceId(v string) *InstanceNetworkInterfaceSpecification { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *InstanceNetworkInterfaceSpecification) SetPrivateIpAddress(v string) *InstanceNetworkInterfaceSpecification { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *InstanceNetworkInterfaceSpecification) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *InstanceNetworkInterfaceSpecification { - s.PrivateIpAddresses = v - return s -} - -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *InstanceNetworkInterfaceSpecification) SetSecondaryPrivateIpAddressCount(v int64) *InstanceNetworkInterfaceSpecification { - s.SecondaryPrivateIpAddressCount = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *InstanceNetworkInterfaceSpecification) SetSubnetId(v string) *InstanceNetworkInterfaceSpecification { - s.SubnetId = &v - return s -} - -// Describes a private IPv4 address. -type InstancePrivateIpAddress struct { - _ struct{} `type:"structure"` - - // The association information for an Elastic IP address for the network interface. - Association *InstanceNetworkInterfaceAssociation `locationName:"association" type:"structure"` - - // Indicates whether this IPv4 address is the primary private IP address of - // the network interface. - Primary *bool `locationName:"primary" type:"boolean"` - - // The private IPv4 DNS name. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The private IPv4 address of the network interface. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` -} - -// String returns the string representation -func (s InstancePrivateIpAddress) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstancePrivateIpAddress) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *InstancePrivateIpAddress) SetAssociation(v *InstanceNetworkInterfaceAssociation) *InstancePrivateIpAddress { - s.Association = v - return s -} - -// SetPrimary sets the Primary field's value. -func (s *InstancePrivateIpAddress) SetPrimary(v bool) *InstancePrivateIpAddress { - s.Primary = &v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *InstancePrivateIpAddress) SetPrivateDnsName(v string) *InstancePrivateIpAddress { - s.PrivateDnsName = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *InstancePrivateIpAddress) SetPrivateIpAddress(v string) *InstancePrivateIpAddress { - s.PrivateIpAddress = &v - return s -} - -// The instance details to specify which volumes should be snapshotted. -type InstanceSpecification struct { - _ struct{} `type:"structure"` - - // Excludes the root volume from being snapshotted. - ExcludeBootVolume *bool `type:"boolean"` - - // The instance to specify which volumes should be snapshotted. - InstanceId *string `type:"string"` -} - -// String returns the string representation -func (s InstanceSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceSpecification) GoString() string { - return s.String() -} - -// SetExcludeBootVolume sets the ExcludeBootVolume field's value. -func (s *InstanceSpecification) SetExcludeBootVolume(v bool) *InstanceSpecification { - s.ExcludeBootVolume = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceSpecification) SetInstanceId(v string) *InstanceSpecification { - s.InstanceId = &v - return s -} - -// Describes the current state of an instance. -type InstanceState struct { - _ struct{} `type:"structure"` - - // The state of the instance as a 16-bit unsigned integer. - // - // The high byte is all of the bits between 2^8 and (2^16)-1, which equals decimal - // values between 256 and 65,535. These numerical values are used for internal - // purposes and should be ignored. - // - // The low byte is all of the bits between 2^0 and (2^8)-1, which equals decimal - // values between 0 and 255. - // - // The valid values for instance-state-code will all be in the range of the - // low byte and they are: - // - // * 0 : pending - // - // * 16 : running - // - // * 32 : shutting-down - // - // * 48 : terminated - // - // * 64 : stopping - // - // * 80 : stopped - // - // You can ignore the high byte value by zeroing out all of the bits above 2^8 - // or 256 in decimal. - Code *int64 `locationName:"code" type:"integer"` - - // The current state of the instance. - Name *string `locationName:"name" type:"string" enum:"InstanceStateName"` -} - -// String returns the string representation -func (s InstanceState) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceState) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *InstanceState) SetCode(v int64) *InstanceState { - s.Code = &v - return s -} - -// SetName sets the Name field's value. -func (s *InstanceState) SetName(v string) *InstanceState { - s.Name = &v - return s -} - -// Describes an instance state change. -type InstanceStateChange struct { - _ struct{} `type:"structure"` - - // The current state of the instance. - CurrentState *InstanceState `locationName:"currentState" type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The previous state of the instance. - PreviousState *InstanceState `locationName:"previousState" type:"structure"` -} - -// String returns the string representation -func (s InstanceStateChange) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceStateChange) GoString() string { - return s.String() -} - -// SetCurrentState sets the CurrentState field's value. -func (s *InstanceStateChange) SetCurrentState(v *InstanceState) *InstanceStateChange { - s.CurrentState = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceStateChange) SetInstanceId(v string) *InstanceStateChange { - s.InstanceId = &v - return s -} - -// SetPreviousState sets the PreviousState field's value. -func (s *InstanceStateChange) SetPreviousState(v *InstanceState) *InstanceStateChange { - s.PreviousState = v - return s -} - -// Describes the status of an instance. -type InstanceStatus struct { - _ struct{} `type:"structure"` - - // The Availability Zone of the instance. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // Any scheduled events associated with the instance. - Events []*InstanceStatusEvent `locationName:"eventsSet" locationNameList:"item" type:"list"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The intended state of the instance. DescribeInstanceStatus requires that - // an instance be in the running state. - InstanceState *InstanceState `locationName:"instanceState" type:"structure"` - - // Reports impaired functionality that stems from issues internal to the instance, - // such as impaired reachability. - InstanceStatus *InstanceStatusSummary `locationName:"instanceStatus" type:"structure"` - - // Reports impaired functionality that stems from issues related to the systems - // that support an instance, such as hardware failures and network connectivity - // problems. - SystemStatus *InstanceStatusSummary `locationName:"systemStatus" type:"structure"` -} - -// String returns the string representation -func (s InstanceStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceStatus) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *InstanceStatus) SetAvailabilityZone(v string) *InstanceStatus { - s.AvailabilityZone = &v - return s -} - -// SetEvents sets the Events field's value. -func (s *InstanceStatus) SetEvents(v []*InstanceStatusEvent) *InstanceStatus { - s.Events = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceStatus) SetInstanceId(v string) *InstanceStatus { - s.InstanceId = &v - return s -} - -// SetInstanceState sets the InstanceState field's value. -func (s *InstanceStatus) SetInstanceState(v *InstanceState) *InstanceStatus { - s.InstanceState = v - return s -} - -// SetInstanceStatus sets the InstanceStatus field's value. -func (s *InstanceStatus) SetInstanceStatus(v *InstanceStatusSummary) *InstanceStatus { - s.InstanceStatus = v - return s -} - -// SetSystemStatus sets the SystemStatus field's value. -func (s *InstanceStatus) SetSystemStatus(v *InstanceStatusSummary) *InstanceStatus { - s.SystemStatus = v - return s -} - -// Describes the instance status. -type InstanceStatusDetails struct { - _ struct{} `type:"structure"` - - // The time when a status check failed. For an instance that was launched and - // impaired, this is the time when the instance was launched. - ImpairedSince *time.Time `locationName:"impairedSince" type:"timestamp"` - - // The type of instance status. - Name *string `locationName:"name" type:"string" enum:"StatusName"` - - // The status. - Status *string `locationName:"status" type:"string" enum:"StatusType"` -} - -// String returns the string representation -func (s InstanceStatusDetails) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceStatusDetails) GoString() string { - return s.String() -} - -// SetImpairedSince sets the ImpairedSince field's value. -func (s *InstanceStatusDetails) SetImpairedSince(v time.Time) *InstanceStatusDetails { - s.ImpairedSince = &v - return s -} - -// SetName sets the Name field's value. -func (s *InstanceStatusDetails) SetName(v string) *InstanceStatusDetails { - s.Name = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *InstanceStatusDetails) SetStatus(v string) *InstanceStatusDetails { - s.Status = &v - return s -} - -// Describes a scheduled event for an instance. -type InstanceStatusEvent struct { - _ struct{} `type:"structure"` - - // The event code. - Code *string `locationName:"code" type:"string" enum:"EventCode"` - - // A description of the event. - // - // After a scheduled event is completed, it can still be described for up to - // a week. If the event has been completed, this description starts with the - // following text: [Completed]. - Description *string `locationName:"description" type:"string"` - - // The ID of the event. - InstanceEventId *string `locationName:"instanceEventId" type:"string"` - - // The latest scheduled end time for the event. - NotAfter *time.Time `locationName:"notAfter" type:"timestamp"` - - // The earliest scheduled start time for the event. - NotBefore *time.Time `locationName:"notBefore" type:"timestamp"` - - // The deadline for starting the event. - NotBeforeDeadline *time.Time `locationName:"notBeforeDeadline" type:"timestamp"` -} - -// String returns the string representation -func (s InstanceStatusEvent) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceStatusEvent) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *InstanceStatusEvent) SetCode(v string) *InstanceStatusEvent { - s.Code = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *InstanceStatusEvent) SetDescription(v string) *InstanceStatusEvent { - s.Description = &v - return s -} - -// SetInstanceEventId sets the InstanceEventId field's value. -func (s *InstanceStatusEvent) SetInstanceEventId(v string) *InstanceStatusEvent { - s.InstanceEventId = &v - return s -} - -// SetNotAfter sets the NotAfter field's value. -func (s *InstanceStatusEvent) SetNotAfter(v time.Time) *InstanceStatusEvent { - s.NotAfter = &v - return s -} - -// SetNotBefore sets the NotBefore field's value. -func (s *InstanceStatusEvent) SetNotBefore(v time.Time) *InstanceStatusEvent { - s.NotBefore = &v - return s -} - -// SetNotBeforeDeadline sets the NotBeforeDeadline field's value. -func (s *InstanceStatusEvent) SetNotBeforeDeadline(v time.Time) *InstanceStatusEvent { - s.NotBeforeDeadline = &v - return s -} - -// Describes the status of an instance. -type InstanceStatusSummary struct { - _ struct{} `type:"structure"` - - // The system instance health or application instance health. - Details []*InstanceStatusDetails `locationName:"details" locationNameList:"item" type:"list"` - - // The status. - Status *string `locationName:"status" type:"string" enum:"SummaryStatus"` -} - -// String returns the string representation -func (s InstanceStatusSummary) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceStatusSummary) GoString() string { - return s.String() -} - -// SetDetails sets the Details field's value. -func (s *InstanceStatusSummary) SetDetails(v []*InstanceStatusDetails) *InstanceStatusSummary { - s.Details = v - return s -} - -// SetStatus sets the Status field's value. -func (s *InstanceStatusSummary) SetStatus(v string) *InstanceStatusSummary { - s.Status = &v - return s -} - -// Describes the disks that are available for the instance type. -type InstanceStorageInfo struct { - _ struct{} `type:"structure"` - - // Array describing the disks that are available for the instance type. - Disks []*DiskInfo `locationName:"disks" locationNameList:"item" type:"list"` - - // The total size of the disks, in GiB. - TotalSizeInGB *int64 `locationName:"totalSizeInGB" type:"long"` -} - -// String returns the string representation -func (s InstanceStorageInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceStorageInfo) GoString() string { - return s.String() -} - -// SetDisks sets the Disks field's value. -func (s *InstanceStorageInfo) SetDisks(v []*DiskInfo) *InstanceStorageInfo { - s.Disks = v - return s -} - -// SetTotalSizeInGB sets the TotalSizeInGB field's value. -func (s *InstanceStorageInfo) SetTotalSizeInGB(v int64) *InstanceStorageInfo { - s.TotalSizeInGB = &v - return s -} - -// Describes the instance type. -type InstanceTypeInfo struct { - _ struct{} `type:"structure"` - - // Indicates whether auto recovery is supported. - AutoRecoverySupported *bool `locationName:"autoRecoverySupported" type:"boolean"` - - // Indicates whether the instance is bare metal. - BareMetal *bool `locationName:"bareMetal" type:"boolean"` - - // Indicates whether the instance type is a burstable performance instance type. - BurstablePerformanceSupported *bool `locationName:"burstablePerformanceSupported" type:"boolean"` - - // Indicates whether the instance type is a current generation. - CurrentGeneration *bool `locationName:"currentGeneration" type:"boolean"` - - // Indicates whether Dedicated Hosts are supported on the instance type. - DedicatedHostsSupported *bool `locationName:"dedicatedHostsSupported" type:"boolean"` - - // Describes the Amazon EBS settings for the instance type. - EbsInfo *EbsInfo `locationName:"ebsInfo" type:"structure"` - - // Describes the FPGA accelerator settings for the instance type. - FpgaInfo *FpgaInfo `locationName:"fpgaInfo" type:"structure"` - - // Indicates whether the instance type is eligible for the free tier. - FreeTierEligible *bool `locationName:"freeTierEligible" type:"boolean"` - - // Describes the GPU accelerator settings for the instance type. - GpuInfo *GpuInfo `locationName:"gpuInfo" type:"structure"` - - // Indicates whether On-Demand hibernation is supported. - HibernationSupported *bool `locationName:"hibernationSupported" type:"boolean"` - - // Indicates the hypervisor used for the instance type. - Hypervisor *string `locationName:"hypervisor" type:"string" enum:"InstanceTypeHypervisor"` - - // Describes the disks for the instance type. - InstanceStorageInfo *InstanceStorageInfo `locationName:"instanceStorageInfo" type:"structure"` - - // Indicates whether instance storage is supported. - InstanceStorageSupported *bool `locationName:"instanceStorageSupported" type:"boolean"` - - // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // Describes the memory for the instance type. - MemoryInfo *MemoryInfo `locationName:"memoryInfo" type:"structure"` - - // Describes the network settings for the instance type. - NetworkInfo *NetworkInfo `locationName:"networkInfo" type:"structure"` - - // Describes the placement group settings for the instance type. - PlacementGroupInfo *PlacementGroupInfo `locationName:"placementGroupInfo" type:"structure"` - - // Describes the processor. - ProcessorInfo *ProcessorInfo `locationName:"processorInfo" type:"structure"` - - // Indicates the supported root devices. - SupportedRootDevices []*string `locationName:"supportedRootDevices" locationNameList:"item" type:"list"` - - // Indicates whether the instance type is offered for spot or On-Demand. - SupportedUsageClasses []*string `locationName:"supportedUsageClasses" locationNameList:"item" type:"list"` - - // Describes the vCPU configurations for the instance type. - VCpuInfo *VCpuInfo `locationName:"vCpuInfo" type:"structure"` -} - -// String returns the string representation -func (s InstanceTypeInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceTypeInfo) GoString() string { - return s.String() -} - -// SetAutoRecoverySupported sets the AutoRecoverySupported field's value. -func (s *InstanceTypeInfo) SetAutoRecoverySupported(v bool) *InstanceTypeInfo { - s.AutoRecoverySupported = &v - return s -} - -// SetBareMetal sets the BareMetal field's value. -func (s *InstanceTypeInfo) SetBareMetal(v bool) *InstanceTypeInfo { - s.BareMetal = &v - return s -} - -// SetBurstablePerformanceSupported sets the BurstablePerformanceSupported field's value. -func (s *InstanceTypeInfo) SetBurstablePerformanceSupported(v bool) *InstanceTypeInfo { - s.BurstablePerformanceSupported = &v - return s -} - -// SetCurrentGeneration sets the CurrentGeneration field's value. -func (s *InstanceTypeInfo) SetCurrentGeneration(v bool) *InstanceTypeInfo { - s.CurrentGeneration = &v - return s -} - -// SetDedicatedHostsSupported sets the DedicatedHostsSupported field's value. -func (s *InstanceTypeInfo) SetDedicatedHostsSupported(v bool) *InstanceTypeInfo { - s.DedicatedHostsSupported = &v - return s -} - -// SetEbsInfo sets the EbsInfo field's value. -func (s *InstanceTypeInfo) SetEbsInfo(v *EbsInfo) *InstanceTypeInfo { - s.EbsInfo = v - return s -} - -// SetFpgaInfo sets the FpgaInfo field's value. -func (s *InstanceTypeInfo) SetFpgaInfo(v *FpgaInfo) *InstanceTypeInfo { - s.FpgaInfo = v - return s -} - -// SetFreeTierEligible sets the FreeTierEligible field's value. -func (s *InstanceTypeInfo) SetFreeTierEligible(v bool) *InstanceTypeInfo { - s.FreeTierEligible = &v - return s -} - -// SetGpuInfo sets the GpuInfo field's value. -func (s *InstanceTypeInfo) SetGpuInfo(v *GpuInfo) *InstanceTypeInfo { - s.GpuInfo = v - return s -} - -// SetHibernationSupported sets the HibernationSupported field's value. -func (s *InstanceTypeInfo) SetHibernationSupported(v bool) *InstanceTypeInfo { - s.HibernationSupported = &v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *InstanceTypeInfo) SetHypervisor(v string) *InstanceTypeInfo { - s.Hypervisor = &v - return s -} - -// SetInstanceStorageInfo sets the InstanceStorageInfo field's value. -func (s *InstanceTypeInfo) SetInstanceStorageInfo(v *InstanceStorageInfo) *InstanceTypeInfo { - s.InstanceStorageInfo = v - return s -} - -// SetInstanceStorageSupported sets the InstanceStorageSupported field's value. -func (s *InstanceTypeInfo) SetInstanceStorageSupported(v bool) *InstanceTypeInfo { - s.InstanceStorageSupported = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *InstanceTypeInfo) SetInstanceType(v string) *InstanceTypeInfo { - s.InstanceType = &v - return s -} - -// SetMemoryInfo sets the MemoryInfo field's value. -func (s *InstanceTypeInfo) SetMemoryInfo(v *MemoryInfo) *InstanceTypeInfo { - s.MemoryInfo = v - return s -} - -// SetNetworkInfo sets the NetworkInfo field's value. -func (s *InstanceTypeInfo) SetNetworkInfo(v *NetworkInfo) *InstanceTypeInfo { - s.NetworkInfo = v - return s -} - -// SetPlacementGroupInfo sets the PlacementGroupInfo field's value. -func (s *InstanceTypeInfo) SetPlacementGroupInfo(v *PlacementGroupInfo) *InstanceTypeInfo { - s.PlacementGroupInfo = v - return s -} - -// SetProcessorInfo sets the ProcessorInfo field's value. -func (s *InstanceTypeInfo) SetProcessorInfo(v *ProcessorInfo) *InstanceTypeInfo { - s.ProcessorInfo = v - return s -} - -// SetSupportedRootDevices sets the SupportedRootDevices field's value. -func (s *InstanceTypeInfo) SetSupportedRootDevices(v []*string) *InstanceTypeInfo { - s.SupportedRootDevices = v - return s -} - -// SetSupportedUsageClasses sets the SupportedUsageClasses field's value. -func (s *InstanceTypeInfo) SetSupportedUsageClasses(v []*string) *InstanceTypeInfo { - s.SupportedUsageClasses = v - return s -} - -// SetVCpuInfo sets the VCpuInfo field's value. -func (s *InstanceTypeInfo) SetVCpuInfo(v *VCpuInfo) *InstanceTypeInfo { - s.VCpuInfo = v - return s -} - -// The instance types offered. -type InstanceTypeOffering struct { - _ struct{} `type:"structure"` - - // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The identifier for the location. This depends on the location type. For example, - // if the location type is region, the location is the Region code (for example, - // us-east-2.) - Location *string `locationName:"location" type:"string"` - - // The location type. - LocationType *string `locationName:"locationType" type:"string" enum:"LocationType"` -} - -// String returns the string representation -func (s InstanceTypeOffering) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceTypeOffering) GoString() string { - return s.String() -} - -// SetInstanceType sets the InstanceType field's value. -func (s *InstanceTypeOffering) SetInstanceType(v string) *InstanceTypeOffering { - s.InstanceType = &v - return s -} - -// SetLocation sets the Location field's value. -func (s *InstanceTypeOffering) SetLocation(v string) *InstanceTypeOffering { - s.Location = &v - return s -} - -// SetLocationType sets the LocationType field's value. -func (s *InstanceTypeOffering) SetLocationType(v string) *InstanceTypeOffering { - s.LocationType = &v - return s -} - -// Information about the Capacity Reservation usage. -type InstanceUsage struct { - _ struct{} `type:"structure"` - - // The ID of the AWS account that is making use of the Capacity Reservation. - AccountId *string `locationName:"accountId" type:"string"` - - // The number of instances the AWS account currently has in the Capacity Reservation. - UsedInstanceCount *int64 `locationName:"usedInstanceCount" type:"integer"` -} - -// String returns the string representation -func (s InstanceUsage) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InstanceUsage) GoString() string { - return s.String() -} - -// SetAccountId sets the AccountId field's value. -func (s *InstanceUsage) SetAccountId(v string) *InstanceUsage { - s.AccountId = &v - return s -} - -// SetUsedInstanceCount sets the UsedInstanceCount field's value. -func (s *InstanceUsage) SetUsedInstanceCount(v int64) *InstanceUsage { - s.UsedInstanceCount = &v - return s -} - -// Describes an internet gateway. -type InternetGateway struct { - _ struct{} `type:"structure"` - - // Any VPCs attached to the internet gateway. - Attachments []*InternetGatewayAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` - - // The ID of the internet gateway. - InternetGatewayId *string `locationName:"internetGatewayId" type:"string"` - - // The ID of the AWS account that owns the internet gateway. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Any tags assigned to the internet gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s InternetGateway) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InternetGateway) GoString() string { - return s.String() -} - -// SetAttachments sets the Attachments field's value. -func (s *InternetGateway) SetAttachments(v []*InternetGatewayAttachment) *InternetGateway { - s.Attachments = v - return s -} - -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *InternetGateway) SetInternetGatewayId(v string) *InternetGateway { - s.InternetGatewayId = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *InternetGateway) SetOwnerId(v string) *InternetGateway { - s.OwnerId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *InternetGateway) SetTags(v []*Tag) *InternetGateway { - s.Tags = v - return s -} - -// Describes the attachment of a VPC to an internet gateway or an egress-only -// internet gateway. -type InternetGatewayAttachment struct { - _ struct{} `type:"structure"` - - // The current state of the attachment. For an internet gateway, the state is - // available when attached to a VPC; otherwise, this value is not returned. - State *string `locationName:"state" type:"string" enum:"AttachmentStatus"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s InternetGatewayAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s InternetGatewayAttachment) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *InternetGatewayAttachment) SetState(v string) *InternetGatewayAttachment { - s.State = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *InternetGatewayAttachment) SetVpcId(v string) *InternetGatewayAttachment { - s.VpcId = &v - return s -} - -// Describes a set of permissions for a security group rule. -type IpPermission struct { - _ struct{} `type:"structure"` - - // The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 - // type number. A value of -1 indicates all ICMP/ICMPv6 types. If you specify - // all ICMP/ICMPv6 types, you must specify all codes. - FromPort *int64 `locationName:"fromPort" type:"integer"` - - // The IP protocol name (tcp, udp, icmp, icmpv6) or number (see Protocol Numbers - // (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). - // - // [VPC only] Use -1 to specify all protocols. When authorizing security group - // rules, specifying -1 or a protocol number other than tcp, udp, icmp, or icmpv6 - // allows traffic on all ports, regardless of any port range you specify. For - // tcp, udp, and icmp, you must specify a port range. For icmpv6, the port range - // is optional; if you omit the port range, traffic for all types and codes - // is allowed. - IpProtocol *string `locationName:"ipProtocol" type:"string"` - - // The IPv4 ranges. - IpRanges []*IpRange `locationName:"ipRanges" locationNameList:"item" type:"list"` - - // [VPC only] The IPv6 ranges. - Ipv6Ranges []*Ipv6Range `locationName:"ipv6Ranges" locationNameList:"item" type:"list"` - - // [VPC only] The prefix list IDs for an AWS service. With outbound rules, this - // is the AWS service to access through a VPC endpoint from instances associated - // with the security group. - PrefixListIds []*PrefixListId `locationName:"prefixListIds" locationNameList:"item" type:"list"` - - // The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. - // A value of -1 indicates all ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 - // types, you must specify all codes. - ToPort *int64 `locationName:"toPort" type:"integer"` - - // The security group and AWS account ID pairs. - UserIdGroupPairs []*UserIdGroupPair `locationName:"groups" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s IpPermission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IpPermission) GoString() string { - return s.String() -} - -// SetFromPort sets the FromPort field's value. -func (s *IpPermission) SetFromPort(v int64) *IpPermission { - s.FromPort = &v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *IpPermission) SetIpProtocol(v string) *IpPermission { - s.IpProtocol = &v - return s -} - -// SetIpRanges sets the IpRanges field's value. -func (s *IpPermission) SetIpRanges(v []*IpRange) *IpPermission { - s.IpRanges = v - return s -} - -// SetIpv6Ranges sets the Ipv6Ranges field's value. -func (s *IpPermission) SetIpv6Ranges(v []*Ipv6Range) *IpPermission { - s.Ipv6Ranges = v - return s -} - -// SetPrefixListIds sets the PrefixListIds field's value. -func (s *IpPermission) SetPrefixListIds(v []*PrefixListId) *IpPermission { - s.PrefixListIds = v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *IpPermission) SetToPort(v int64) *IpPermission { - s.ToPort = &v - return s -} - -// SetUserIdGroupPairs sets the UserIdGroupPairs field's value. -func (s *IpPermission) SetUserIdGroupPairs(v []*UserIdGroupPair) *IpPermission { - s.UserIdGroupPairs = v - return s -} - -// Describes an IPv4 range. -type IpRange struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR range. You can either specify a CIDR range or a source security - // group, not both. To specify a single IPv4 address, use the /32 prefix length. - CidrIp *string `locationName:"cidrIp" type:"string"` - - // A description for the security group rule that references this IPv4 address - // range. - // - // Constraints: Up to 255 characters in length. Allowed characters are a-z, - // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* - Description *string `locationName:"description" type:"string"` -} - -// String returns the string representation -func (s IpRange) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s IpRange) GoString() string { - return s.String() -} - -// SetCidrIp sets the CidrIp field's value. -func (s *IpRange) SetCidrIp(v string) *IpRange { - s.CidrIp = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *IpRange) SetDescription(v string) *IpRange { - s.Description = &v - return s -} - -// Describes an IPv6 CIDR block. -type Ipv6CidrBlock struct { - _ struct{} `type:"structure"` - - // The IPv6 CIDR block. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` -} - -// String returns the string representation -func (s Ipv6CidrBlock) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Ipv6CidrBlock) GoString() string { - return s.String() -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *Ipv6CidrBlock) SetIpv6CidrBlock(v string) *Ipv6CidrBlock { - s.Ipv6CidrBlock = &v - return s -} - -// [EC2-VPC only] Describes an IPv6 range. -type Ipv6Range struct { - _ struct{} `type:"structure"` - - // The IPv6 CIDR range. You can either specify a CIDR range or a source security - // group, not both. To specify a single IPv6 address, use the /128 prefix length. - CidrIpv6 *string `locationName:"cidrIpv6" type:"string"` - - // A description for the security group rule that references this IPv6 address - // range. - // - // Constraints: Up to 255 characters in length. Allowed characters are a-z, - // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* - Description *string `locationName:"description" type:"string"` -} - -// String returns the string representation -func (s Ipv6Range) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Ipv6Range) GoString() string { - return s.String() -} - -// SetCidrIpv6 sets the CidrIpv6 field's value. -func (s *Ipv6Range) SetCidrIpv6(v string) *Ipv6Range { - s.CidrIpv6 = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *Ipv6Range) SetDescription(v string) *Ipv6Range { - s.Description = &v - return s -} - -// Describes a key pair. -type KeyPairInfo struct { - _ struct{} `type:"structure"` - - // If you used CreateKeyPair to create the key pair, this is the SHA-1 digest - // of the DER encoded private key. If you used ImportKeyPair to provide AWS - // the public key, this is the MD5 public key fingerprint as specified in section - // 4 of RFC4716. - KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` -} - -// String returns the string representation -func (s KeyPairInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s KeyPairInfo) GoString() string { - return s.String() -} - -// SetKeyFingerprint sets the KeyFingerprint field's value. -func (s *KeyPairInfo) SetKeyFingerprint(v string) *KeyPairInfo { - s.KeyFingerprint = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *KeyPairInfo) SetKeyName(v string) *KeyPairInfo { - s.KeyName = &v - return s -} - -// Describes a launch permission. -type LaunchPermission struct { - _ struct{} `type:"structure"` - - // The name of the group. - Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` - - // The AWS account ID. - UserId *string `locationName:"userId" type:"string"` -} - -// String returns the string representation -func (s LaunchPermission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchPermission) GoString() string { - return s.String() -} - -// SetGroup sets the Group field's value. -func (s *LaunchPermission) SetGroup(v string) *LaunchPermission { - s.Group = &v - return s -} - -// SetUserId sets the UserId field's value. -func (s *LaunchPermission) SetUserId(v string) *LaunchPermission { - s.UserId = &v - return s -} - -// Describes a launch permission modification. -type LaunchPermissionModifications struct { - _ struct{} `type:"structure"` - - // The AWS account ID to add to the list of launch permissions for the AMI. - Add []*LaunchPermission `locationNameList:"item" type:"list"` - - // The AWS account ID to remove from the list of launch permissions for the - // AMI. - Remove []*LaunchPermission `locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s LaunchPermissionModifications) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchPermissionModifications) GoString() string { - return s.String() -} - -// SetAdd sets the Add field's value. -func (s *LaunchPermissionModifications) SetAdd(v []*LaunchPermission) *LaunchPermissionModifications { - s.Add = v - return s -} - -// SetRemove sets the Remove field's value. -func (s *LaunchPermissionModifications) SetRemove(v []*LaunchPermission) *LaunchPermissionModifications { - s.Remove = v - return s -} - -// Describes the launch specification for an instance. -type LaunchSpecification struct { - _ struct{} `type:"structure"` - - // Deprecated. - AddressingType *string `locationName:"addressingType" type:"string"` - - // One or more block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // Indicates whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // Describes the monitoring of an instance. - Monitoring *RunInstancesMonitoringEnabled `locationName:"monitoring" type:"structure"` - - // One or more network interfaces. If you specify a network interface, you must - // specify subnet IDs and security group IDs using the network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` - - // The placement information for the instance. - Placement *SpotPlacement `locationName:"placement" type:"structure"` - - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // One or more security groups. When requesting instances in a VPC, you must - // specify the IDs of the security groups. When requesting instances in EC2-Classic, - // you can specify the names or the IDs of the security groups. - SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The ID of the subnet in which to launch the instance. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The Base64-encoded user data for the instance. - UserData *string `locationName:"userData" type:"string"` -} - -// String returns the string representation -func (s LaunchSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchSpecification) GoString() string { - return s.String() -} - -// SetAddressingType sets the AddressingType field's value. -func (s *LaunchSpecification) SetAddressingType(v string) *LaunchSpecification { - s.AddressingType = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *LaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *LaunchSpecification { - s.BlockDeviceMappings = v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *LaunchSpecification) SetEbsOptimized(v bool) *LaunchSpecification { - s.EbsOptimized = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *LaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *LaunchSpecification { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *LaunchSpecification) SetImageId(v string) *LaunchSpecification { - s.ImageId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *LaunchSpecification) SetInstanceType(v string) *LaunchSpecification { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *LaunchSpecification) SetKernelId(v string) *LaunchSpecification { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *LaunchSpecification) SetKeyName(v string) *LaunchSpecification { - s.KeyName = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *LaunchSpecification) SetMonitoring(v *RunInstancesMonitoringEnabled) *LaunchSpecification { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *LaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *LaunchSpecification { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *LaunchSpecification) SetPlacement(v *SpotPlacement) *LaunchSpecification { - s.Placement = v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *LaunchSpecification) SetRamdiskId(v string) *LaunchSpecification { - s.RamdiskId = &v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *LaunchSpecification) SetSecurityGroups(v []*GroupIdentifier) *LaunchSpecification { - s.SecurityGroups = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *LaunchSpecification) SetSubnetId(v string) *LaunchSpecification { - s.SubnetId = &v - return s -} - -// SetUserData sets the UserData field's value. -func (s *LaunchSpecification) SetUserData(v string) *LaunchSpecification { - s.UserData = &v - return s -} - -// Describes a launch template. -type LaunchTemplate struct { - _ struct{} `type:"structure"` - - // The time launch template was created. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // The principal that created the launch template. - CreatedBy *string `locationName:"createdBy" type:"string"` - - // The version number of the default version of the launch template. - DefaultVersionNumber *int64 `locationName:"defaultVersionNumber" type:"long"` - - // The version number of the latest version of the launch template. - LatestVersionNumber *int64 `locationName:"latestVersionNumber" type:"long"` - - // The ID of the launch template. - LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` - - // The name of the launch template. - LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` - - // The tags for the launch template. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s LaunchTemplate) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplate) GoString() string { - return s.String() -} - -// SetCreateTime sets the CreateTime field's value. -func (s *LaunchTemplate) SetCreateTime(v time.Time) *LaunchTemplate { - s.CreateTime = &v - return s -} - -// SetCreatedBy sets the CreatedBy field's value. -func (s *LaunchTemplate) SetCreatedBy(v string) *LaunchTemplate { - s.CreatedBy = &v - return s -} - -// SetDefaultVersionNumber sets the DefaultVersionNumber field's value. -func (s *LaunchTemplate) SetDefaultVersionNumber(v int64) *LaunchTemplate { - s.DefaultVersionNumber = &v - return s -} - -// SetLatestVersionNumber sets the LatestVersionNumber field's value. -func (s *LaunchTemplate) SetLatestVersionNumber(v int64) *LaunchTemplate { - s.LatestVersionNumber = &v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *LaunchTemplate) SetLaunchTemplateId(v string) *LaunchTemplate { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *LaunchTemplate) SetLaunchTemplateName(v string) *LaunchTemplate { - s.LaunchTemplateName = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *LaunchTemplate) SetTags(v []*Tag) *LaunchTemplate { - s.Tags = v - return s -} - -// Describes a launch template and overrides. -type LaunchTemplateAndOverridesResponse struct { - _ struct{} `type:"structure"` - - // The launch template. - LaunchTemplateSpecification *FleetLaunchTemplateSpecification `locationName:"launchTemplateSpecification" type:"structure"` - - // Any parameters that you specify override the same parameters in the launch - // template. - Overrides *FleetLaunchTemplateOverrides `locationName:"overrides" type:"structure"` -} - -// String returns the string representation -func (s LaunchTemplateAndOverridesResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateAndOverridesResponse) GoString() string { - return s.String() -} - -// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. -func (s *LaunchTemplateAndOverridesResponse) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecification) *LaunchTemplateAndOverridesResponse { - s.LaunchTemplateSpecification = v - return s -} - -// SetOverrides sets the Overrides field's value. -func (s *LaunchTemplateAndOverridesResponse) SetOverrides(v *FleetLaunchTemplateOverrides) *LaunchTemplateAndOverridesResponse { - s.Overrides = v - return s -} - -// Describes a block device mapping. -type LaunchTemplateBlockDeviceMapping struct { - _ struct{} `type:"structure"` - - // The device name. - DeviceName *string `locationName:"deviceName" type:"string"` - - // Information about the block device for an EBS volume. - Ebs *LaunchTemplateEbsBlockDevice `locationName:"ebs" type:"structure"` - - // Suppresses the specified device included in the block device mapping of the - // AMI. - NoDevice *string `locationName:"noDevice" type:"string"` - - // The virtual device name (ephemeralN). - VirtualName *string `locationName:"virtualName" type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateBlockDeviceMapping) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateBlockDeviceMapping) GoString() string { - return s.String() -} - -// SetDeviceName sets the DeviceName field's value. -func (s *LaunchTemplateBlockDeviceMapping) SetDeviceName(v string) *LaunchTemplateBlockDeviceMapping { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *LaunchTemplateBlockDeviceMapping) SetEbs(v *LaunchTemplateEbsBlockDevice) *LaunchTemplateBlockDeviceMapping { - s.Ebs = v - return s -} - -// SetNoDevice sets the NoDevice field's value. -func (s *LaunchTemplateBlockDeviceMapping) SetNoDevice(v string) *LaunchTemplateBlockDeviceMapping { - s.NoDevice = &v - return s -} - -// SetVirtualName sets the VirtualName field's value. -func (s *LaunchTemplateBlockDeviceMapping) SetVirtualName(v string) *LaunchTemplateBlockDeviceMapping { - s.VirtualName = &v - return s -} - -// Describes a block device mapping. -type LaunchTemplateBlockDeviceMappingRequest struct { - _ struct{} `type:"structure"` - - // The device name (for example, /dev/sdh or xvdh). - DeviceName *string `type:"string"` - - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *LaunchTemplateEbsBlockDeviceRequest `type:"structure"` - - // Suppresses the specified device included in the block device mapping of the - // AMI. - NoDevice *string `type:"string"` - - // The virtual device name (ephemeralN). Instance store volumes are numbered - // starting from 0. An instance type with 2 available instance store volumes - // can specify mappings for ephemeral0 and ephemeral1. The number of available - // instance store volumes depends on the instance type. After you connect to - // the instance, you must mount the volume. - VirtualName *string `type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateBlockDeviceMappingRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateBlockDeviceMappingRequest) GoString() string { - return s.String() -} - -// SetDeviceName sets the DeviceName field's value. -func (s *LaunchTemplateBlockDeviceMappingRequest) SetDeviceName(v string) *LaunchTemplateBlockDeviceMappingRequest { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *LaunchTemplateBlockDeviceMappingRequest) SetEbs(v *LaunchTemplateEbsBlockDeviceRequest) *LaunchTemplateBlockDeviceMappingRequest { - s.Ebs = v - return s -} - -// SetNoDevice sets the NoDevice field's value. -func (s *LaunchTemplateBlockDeviceMappingRequest) SetNoDevice(v string) *LaunchTemplateBlockDeviceMappingRequest { - s.NoDevice = &v - return s -} - -// SetVirtualName sets the VirtualName field's value. -func (s *LaunchTemplateBlockDeviceMappingRequest) SetVirtualName(v string) *LaunchTemplateBlockDeviceMappingRequest { - s.VirtualName = &v - return s -} - -// Describes an instance's Capacity Reservation targeting option. You can specify -// only one option at a time. Use the CapacityReservationPreference parameter -// to configure the instance to run in On-Demand capacity or to run in any open -// Capacity Reservation that has matching attributes (instance type, platform, -// Availability Zone). Use the CapacityReservationTarget parameter to explicitly -// target a specific Capacity Reservation. -type LaunchTemplateCapacityReservationSpecificationRequest struct { - _ struct{} `type:"structure"` - - // Indicates the instance's Capacity Reservation preferences. Possible preferences - // include: - // - // * open - The instance can run in any open Capacity Reservation that has - // matching attributes (instance type, platform, Availability Zone). - // - // * none - The instance avoids running in a Capacity Reservation even if - // one is available. The instance runs in On-Demand capacity. - CapacityReservationPreference *string `type:"string" enum:"CapacityReservationPreference"` - - // Information about the target Capacity Reservation. - CapacityReservationTarget *CapacityReservationTarget `type:"structure"` -} - -// String returns the string representation -func (s LaunchTemplateCapacityReservationSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateCapacityReservationSpecificationRequest) GoString() string { - return s.String() -} - -// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. -func (s *LaunchTemplateCapacityReservationSpecificationRequest) SetCapacityReservationPreference(v string) *LaunchTemplateCapacityReservationSpecificationRequest { - s.CapacityReservationPreference = &v - return s -} - -// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. -func (s *LaunchTemplateCapacityReservationSpecificationRequest) SetCapacityReservationTarget(v *CapacityReservationTarget) *LaunchTemplateCapacityReservationSpecificationRequest { - s.CapacityReservationTarget = v - return s -} - -// Information about the Capacity Reservation targeting option. -type LaunchTemplateCapacityReservationSpecificationResponse struct { - _ struct{} `type:"structure"` - - // Indicates the instance's Capacity Reservation preferences. Possible preferences - // include: - // - // * open - The instance can run in any open Capacity Reservation that has - // matching attributes (instance type, platform, Availability Zone). - // - // * none - The instance avoids running in a Capacity Reservation even if - // one is available. The instance runs in On-Demand capacity. - CapacityReservationPreference *string `locationName:"capacityReservationPreference" type:"string" enum:"CapacityReservationPreference"` - - // Information about the target Capacity Reservation. - CapacityReservationTarget *CapacityReservationTargetResponse `locationName:"capacityReservationTarget" type:"structure"` -} - -// String returns the string representation -func (s LaunchTemplateCapacityReservationSpecificationResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateCapacityReservationSpecificationResponse) GoString() string { - return s.String() -} - -// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. -func (s *LaunchTemplateCapacityReservationSpecificationResponse) SetCapacityReservationPreference(v string) *LaunchTemplateCapacityReservationSpecificationResponse { - s.CapacityReservationPreference = &v - return s -} - -// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. -func (s *LaunchTemplateCapacityReservationSpecificationResponse) SetCapacityReservationTarget(v *CapacityReservationTargetResponse) *LaunchTemplateCapacityReservationSpecificationResponse { - s.CapacityReservationTarget = v - return s -} - -// Describes a launch template and overrides. -type LaunchTemplateConfig struct { - _ struct{} `type:"structure"` - - // The launch template. - LaunchTemplateSpecification *FleetLaunchTemplateSpecification `locationName:"launchTemplateSpecification" type:"structure"` - - // Any parameters that you specify override the same parameters in the launch - // template. - Overrides []*LaunchTemplateOverrides `locationName:"overrides" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s LaunchTemplateConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateConfig) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *LaunchTemplateConfig) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "LaunchTemplateConfig"} - if s.LaunchTemplateSpecification != nil { - if err := s.LaunchTemplateSpecification.Validate(); err != nil { - invalidParams.AddNested("LaunchTemplateSpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. -func (s *LaunchTemplateConfig) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecification) *LaunchTemplateConfig { - s.LaunchTemplateSpecification = v - return s -} - -// SetOverrides sets the Overrides field's value. -func (s *LaunchTemplateConfig) SetOverrides(v []*LaunchTemplateOverrides) *LaunchTemplateConfig { - s.Overrides = v - return s -} - -// The CPU options for the instance. -type LaunchTemplateCpuOptions struct { - _ struct{} `type:"structure"` - - // The number of CPU cores for the instance. - CoreCount *int64 `locationName:"coreCount" type:"integer"` - - // The number of threads per CPU core. - ThreadsPerCore *int64 `locationName:"threadsPerCore" type:"integer"` -} - -// String returns the string representation -func (s LaunchTemplateCpuOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateCpuOptions) GoString() string { - return s.String() -} - -// SetCoreCount sets the CoreCount field's value. -func (s *LaunchTemplateCpuOptions) SetCoreCount(v int64) *LaunchTemplateCpuOptions { - s.CoreCount = &v - return s -} - -// SetThreadsPerCore sets the ThreadsPerCore field's value. -func (s *LaunchTemplateCpuOptions) SetThreadsPerCore(v int64) *LaunchTemplateCpuOptions { - s.ThreadsPerCore = &v - return s -} - -// The CPU options for the instance. Both the core count and threads per core -// must be specified in the request. -type LaunchTemplateCpuOptionsRequest struct { - _ struct{} `type:"structure"` - - // The number of CPU cores for the instance. - CoreCount *int64 `type:"integer"` - - // The number of threads per CPU core. To disable multithreading for the instance, - // specify a value of 1. Otherwise, specify the default value of 2. - ThreadsPerCore *int64 `type:"integer"` -} - -// String returns the string representation -func (s LaunchTemplateCpuOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateCpuOptionsRequest) GoString() string { - return s.String() -} - -// SetCoreCount sets the CoreCount field's value. -func (s *LaunchTemplateCpuOptionsRequest) SetCoreCount(v int64) *LaunchTemplateCpuOptionsRequest { - s.CoreCount = &v - return s -} - -// SetThreadsPerCore sets the ThreadsPerCore field's value. -func (s *LaunchTemplateCpuOptionsRequest) SetThreadsPerCore(v int64) *LaunchTemplateCpuOptionsRequest { - s.ThreadsPerCore = &v - return s -} - -// Describes a block device for an EBS volume. -type LaunchTemplateEbsBlockDevice struct { - _ struct{} `type:"structure"` - - // Indicates whether the EBS volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // Indicates whether the EBS volume is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The number of I/O operations per second (IOPS) that the volume supports. - Iops *int64 `locationName:"iops" type:"integer"` - - // The ARN of the AWS Key Management Service (AWS KMS) CMK used for encryption. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The size of the volume, in GiB. - VolumeSize *int64 `locationName:"volumeSize" type:"integer"` - - // The volume type. - VolumeType *string `locationName:"volumeType" type:"string" enum:"VolumeType"` -} - -// String returns the string representation -func (s LaunchTemplateEbsBlockDevice) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateEbsBlockDevice) GoString() string { - return s.String() -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *LaunchTemplateEbsBlockDevice) SetDeleteOnTermination(v bool) *LaunchTemplateEbsBlockDevice { - s.DeleteOnTermination = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *LaunchTemplateEbsBlockDevice) SetEncrypted(v bool) *LaunchTemplateEbsBlockDevice { - s.Encrypted = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *LaunchTemplateEbsBlockDevice) SetIops(v int64) *LaunchTemplateEbsBlockDevice { - s.Iops = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *LaunchTemplateEbsBlockDevice) SetKmsKeyId(v string) *LaunchTemplateEbsBlockDevice { - s.KmsKeyId = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *LaunchTemplateEbsBlockDevice) SetSnapshotId(v string) *LaunchTemplateEbsBlockDevice { - s.SnapshotId = &v - return s -} - -// SetVolumeSize sets the VolumeSize field's value. -func (s *LaunchTemplateEbsBlockDevice) SetVolumeSize(v int64) *LaunchTemplateEbsBlockDevice { - s.VolumeSize = &v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *LaunchTemplateEbsBlockDevice) SetVolumeType(v string) *LaunchTemplateEbsBlockDevice { - s.VolumeType = &v - return s -} - -// The parameters for a block device for an EBS volume. -type LaunchTemplateEbsBlockDeviceRequest struct { - _ struct{} `type:"structure"` - - // Indicates whether the EBS volume is deleted on instance termination. - DeleteOnTermination *bool `type:"boolean"` - - // Indicates whether the EBS volume is encrypted. Encrypted volumes can only - // be attached to instances that support Amazon EBS encryption. If you are creating - // a volume from a snapshot, you can't specify an encryption value. - Encrypted *bool `type:"boolean"` - - // The number of I/O operations per second (IOPS) that the volume supports. - // For io1, this represents the number of IOPS that are provisioned for the - // volume. For gp2, this represents the baseline performance of the volume and - // the rate at which the volume accumulates I/O credits for bursting. For more - // information about General Purpose SSD baseline performance, I/O credits, - // and bursting, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Condition: This parameter is required for requests to create io1 volumes; - // it is not used in requests to create gp2, st1, sc1, or standard volumes. - Iops *int64 `type:"integer"` - - // The ARN of the AWS Key Management Service (AWS KMS) CMK used for encryption. - KmsKeyId *string `type:"string"` - - // The ID of the snapshot. - SnapshotId *string `type:"string"` - - // The size of the volume, in GiB. - // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - VolumeSize *int64 `type:"integer"` - - // The volume type. - VolumeType *string `type:"string" enum:"VolumeType"` -} - -// String returns the string representation -func (s LaunchTemplateEbsBlockDeviceRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateEbsBlockDeviceRequest) GoString() string { - return s.String() -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetDeleteOnTermination(v bool) *LaunchTemplateEbsBlockDeviceRequest { - s.DeleteOnTermination = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetEncrypted(v bool) *LaunchTemplateEbsBlockDeviceRequest { - s.Encrypted = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetIops(v int64) *LaunchTemplateEbsBlockDeviceRequest { - s.Iops = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetKmsKeyId(v string) *LaunchTemplateEbsBlockDeviceRequest { - s.KmsKeyId = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetSnapshotId(v string) *LaunchTemplateEbsBlockDeviceRequest { - s.SnapshotId = &v - return s -} - -// SetVolumeSize sets the VolumeSize field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetVolumeSize(v int64) *LaunchTemplateEbsBlockDeviceRequest { - s.VolumeSize = &v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *LaunchTemplateEbsBlockDeviceRequest) SetVolumeType(v string) *LaunchTemplateEbsBlockDeviceRequest { - s.VolumeType = &v - return s -} - -// Describes an elastic inference accelerator. -type LaunchTemplateElasticInferenceAccelerator struct { - _ struct{} `type:"structure"` - - // The type of elastic inference accelerator. The possible values are eia1.medium, - // eia1.large, and eia1.xlarge. - // - // Type is a required field - Type *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s LaunchTemplateElasticInferenceAccelerator) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateElasticInferenceAccelerator) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *LaunchTemplateElasticInferenceAccelerator) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "LaunchTemplateElasticInferenceAccelerator"} - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetType sets the Type field's value. -func (s *LaunchTemplateElasticInferenceAccelerator) SetType(v string) *LaunchTemplateElasticInferenceAccelerator { - s.Type = &v - return s -} - -// Describes an elastic inference accelerator. -type LaunchTemplateElasticInferenceAcceleratorResponse struct { - _ struct{} `type:"structure"` - - // The type of elastic inference accelerator. The possible values are eia1.medium, - // eia1.large, and eia1.xlarge. - Type *string `locationName:"type" type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateElasticInferenceAcceleratorResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateElasticInferenceAcceleratorResponse) GoString() string { - return s.String() -} - -// SetType sets the Type field's value. -func (s *LaunchTemplateElasticInferenceAcceleratorResponse) SetType(v string) *LaunchTemplateElasticInferenceAcceleratorResponse { - s.Type = &v - return s -} - -// Indicates whether an instance is configured for hibernation. -type LaunchTemplateHibernationOptions struct { - _ struct{} `type:"structure"` - - // If this parameter is set to true, the instance is enabled for hibernation; - // otherwise, it is not enabled for hibernation. - Configured *bool `locationName:"configured" type:"boolean"` -} - -// String returns the string representation -func (s LaunchTemplateHibernationOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateHibernationOptions) GoString() string { - return s.String() -} - -// SetConfigured sets the Configured field's value. -func (s *LaunchTemplateHibernationOptions) SetConfigured(v bool) *LaunchTemplateHibernationOptions { - s.Configured = &v - return s -} - -// Indicates whether the instance is configured for hibernation. This parameter -// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). -type LaunchTemplateHibernationOptionsRequest struct { - _ struct{} `type:"structure"` - - // If you set this parameter to true, the instance is enabled for hibernation. - // - // Default: false - Configured *bool `type:"boolean"` -} - -// String returns the string representation -func (s LaunchTemplateHibernationOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateHibernationOptionsRequest) GoString() string { - return s.String() -} - -// SetConfigured sets the Configured field's value. -func (s *LaunchTemplateHibernationOptionsRequest) SetConfigured(v bool) *LaunchTemplateHibernationOptionsRequest { - s.Configured = &v - return s -} - -// Describes an IAM instance profile. -type LaunchTemplateIamInstanceProfileSpecification struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the instance profile. - Arn *string `locationName:"arn" type:"string"` - - // The name of the instance profile. - Name *string `locationName:"name" type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateIamInstanceProfileSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateIamInstanceProfileSpecification) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *LaunchTemplateIamInstanceProfileSpecification) SetArn(v string) *LaunchTemplateIamInstanceProfileSpecification { - s.Arn = &v - return s -} - -// SetName sets the Name field's value. -func (s *LaunchTemplateIamInstanceProfileSpecification) SetName(v string) *LaunchTemplateIamInstanceProfileSpecification { - s.Name = &v - return s -} - -// An IAM instance profile. -type LaunchTemplateIamInstanceProfileSpecificationRequest struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the instance profile. - Arn *string `type:"string"` - - // The name of the instance profile. - Name *string `type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateIamInstanceProfileSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateIamInstanceProfileSpecificationRequest) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *LaunchTemplateIamInstanceProfileSpecificationRequest) SetArn(v string) *LaunchTemplateIamInstanceProfileSpecificationRequest { - s.Arn = &v - return s -} - -// SetName sets the Name field's value. -func (s *LaunchTemplateIamInstanceProfileSpecificationRequest) SetName(v string) *LaunchTemplateIamInstanceProfileSpecificationRequest { - s.Name = &v - return s -} - -// The market (purchasing) option for the instances. -type LaunchTemplateInstanceMarketOptions struct { - _ struct{} `type:"structure"` - - // The market type. - MarketType *string `locationName:"marketType" type:"string" enum:"MarketType"` - - // The options for Spot Instances. - SpotOptions *LaunchTemplateSpotMarketOptions `locationName:"spotOptions" type:"structure"` -} - -// String returns the string representation -func (s LaunchTemplateInstanceMarketOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateInstanceMarketOptions) GoString() string { - return s.String() -} - -// SetMarketType sets the MarketType field's value. -func (s *LaunchTemplateInstanceMarketOptions) SetMarketType(v string) *LaunchTemplateInstanceMarketOptions { - s.MarketType = &v - return s -} - -// SetSpotOptions sets the SpotOptions field's value. -func (s *LaunchTemplateInstanceMarketOptions) SetSpotOptions(v *LaunchTemplateSpotMarketOptions) *LaunchTemplateInstanceMarketOptions { - s.SpotOptions = v - return s -} - -// The market (purchasing) option for the instances. -type LaunchTemplateInstanceMarketOptionsRequest struct { - _ struct{} `type:"structure"` - - // The market type. - MarketType *string `type:"string" enum:"MarketType"` - - // The options for Spot Instances. - SpotOptions *LaunchTemplateSpotMarketOptionsRequest `type:"structure"` -} - -// String returns the string representation -func (s LaunchTemplateInstanceMarketOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateInstanceMarketOptionsRequest) GoString() string { - return s.String() -} - -// SetMarketType sets the MarketType field's value. -func (s *LaunchTemplateInstanceMarketOptionsRequest) SetMarketType(v string) *LaunchTemplateInstanceMarketOptionsRequest { - s.MarketType = &v - return s -} - -// SetSpotOptions sets the SpotOptions field's value. -func (s *LaunchTemplateInstanceMarketOptionsRequest) SetSpotOptions(v *LaunchTemplateSpotMarketOptionsRequest) *LaunchTemplateInstanceMarketOptionsRequest { - s.SpotOptions = v - return s -} - -// Describes a network interface. -type LaunchTemplateInstanceNetworkInterfaceSpecification struct { - _ struct{} `type:"structure"` - - // Indicates whether to associate a public IPv4 address with eth0 for a new - // network interface. - AssociatePublicIpAddress *bool `locationName:"associatePublicIpAddress" type:"boolean"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // A description for the network interface. - Description *string `locationName:"description" type:"string"` - - // The device index for the network interface attachment. - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` - - // The IDs of one or more security groups. - Groups []*string `locationName:"groupSet" locationNameList:"groupId" type:"list"` - - // The type of network interface. - InterfaceType *string `locationName:"interfaceType" type:"string"` - - // The number of IPv6 addresses for the network interface. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` - - // The IPv6 addresses for the network interface. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The primary private IPv4 address of the network interface. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // One or more private IPv4 addresses. - PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` - - // The number of secondary private IPv4 addresses for the network interface. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` - - // The ID of the subnet for the network interface. - SubnetId *string `locationName:"subnetId" type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateInstanceNetworkInterfaceSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateInstanceNetworkInterfaceSpecification) GoString() string { - return s.String() -} - -// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetAssociatePublicIpAddress(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.AssociatePublicIpAddress = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetDeleteOnTermination(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.DeleteOnTermination = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetDescription(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.Description = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetDeviceIndex(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.DeviceIndex = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetGroups(v []*string) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.Groups = v - return s -} - -// SetInterfaceType sets the InterfaceType field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetInterfaceType(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.InterfaceType = &v - return s -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetIpv6AddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetIpv6Addresses(v []*InstanceIpv6Address) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.Ipv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetNetworkInterfaceId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetPrivateIpAddress(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.PrivateIpAddresses = v - return s -} - -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetSecondaryPrivateIpAddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.SecondaryPrivateIpAddressCount = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetSubnetId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { - s.SubnetId = &v - return s -} - -// The parameters for a network interface. -type LaunchTemplateInstanceNetworkInterfaceSpecificationRequest struct { - _ struct{} `type:"structure"` - - // Associates a public IPv4 address with eth0 for a new network interface. - AssociatePublicIpAddress *bool `type:"boolean"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `type:"boolean"` - - // A description for the network interface. - Description *string `type:"string"` - - // The device index for the network interface attachment. - DeviceIndex *int64 `type:"integer"` - - // The IDs of one or more security groups. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // The type of network interface. To create an Elastic Fabric Adapter (EFA), - // specify efa. For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // If you are not creating an EFA, specify interface or omit this parameter. - // - // Valid values: interface | efa - InterfaceType *string `type:"string"` - - // The number of IPv6 addresses to assign to a network interface. Amazon EC2 - // automatically selects the IPv6 addresses from the subnet range. You can't - // use this option if specifying specific IPv6 addresses. - Ipv6AddressCount *int64 `type:"integer"` - - // One or more specific IPv6 addresses from the IPv6 CIDR block range of your - // subnet. You can't use this option if you're specifying a number of IPv6 addresses. - Ipv6Addresses []*InstanceIpv6AddressRequest `locationNameList:"InstanceIpv6Address" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `type:"string"` - - // The primary private IPv4 address of the network interface. - PrivateIpAddress *string `type:"string"` - - // One or more private IPv4 addresses. - PrivateIpAddresses []*PrivateIpAddressSpecification `locationNameList:"item" type:"list"` - - // The number of secondary private IPv4 addresses to assign to a network interface. - SecondaryPrivateIpAddressCount *int64 `type:"integer"` - - // The ID of the subnet for the network interface. - SubnetId *string `type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) GoString() string { - return s.String() -} - -// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetAssociatePublicIpAddress(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.AssociatePublicIpAddress = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetDeleteOnTermination(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.DeleteOnTermination = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetDescription(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.Description = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetDeviceIndex(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.DeviceIndex = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetGroups(v []*string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.Groups = v - return s -} - -// SetInterfaceType sets the InterfaceType field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetInterfaceType(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.InterfaceType = &v - return s -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetIpv6AddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetIpv6Addresses(v []*InstanceIpv6AddressRequest) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.Ipv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetNetworkInterfaceId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetPrivateIpAddress(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.PrivateIpAddresses = v - return s -} - -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetSecondaryPrivateIpAddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.SecondaryPrivateIpAddressCount = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetSubnetId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { - s.SubnetId = &v - return s -} - -// Describes a license configuration. -type LaunchTemplateLicenseConfiguration struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the license configuration. - LicenseConfigurationArn *string `locationName:"licenseConfigurationArn" type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateLicenseConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateLicenseConfiguration) GoString() string { - return s.String() -} - -// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. -func (s *LaunchTemplateLicenseConfiguration) SetLicenseConfigurationArn(v string) *LaunchTemplateLicenseConfiguration { - s.LicenseConfigurationArn = &v - return s -} - -// Describes a license configuration. -type LaunchTemplateLicenseConfigurationRequest struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the license configuration. - LicenseConfigurationArn *string `type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateLicenseConfigurationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateLicenseConfigurationRequest) GoString() string { - return s.String() -} - -// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. -func (s *LaunchTemplateLicenseConfigurationRequest) SetLicenseConfigurationArn(v string) *LaunchTemplateLicenseConfigurationRequest { - s.LicenseConfigurationArn = &v - return s -} - -// Describes overrides for a launch template. -type LaunchTemplateOverrides struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which to launch the instances. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The priority for the launch template override. If OnDemandAllocationStrategy - // is set to prioritized, Spot Fleet uses priority to determine which launch - // template override to use first in fulfilling On-Demand capacity. The highest - // priority is launched first. Valid values are whole numbers starting at 0. - // The lower the number, the higher the priority. If no number is set, the launch - // template override has the lowest priority. - Priority *float64 `locationName:"priority" type:"double"` - - // The maximum price per unit hour that you are willing to pay for a Spot Instance. - SpotPrice *string `locationName:"spotPrice" type:"string"` - - // The ID of the subnet in which to launch the instances. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The number of units provided by the specified instance type. - WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` -} - -// String returns the string representation -func (s LaunchTemplateOverrides) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateOverrides) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *LaunchTemplateOverrides) SetAvailabilityZone(v string) *LaunchTemplateOverrides { - s.AvailabilityZone = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *LaunchTemplateOverrides) SetInstanceType(v string) *LaunchTemplateOverrides { - s.InstanceType = &v - return s -} - -// SetPriority sets the Priority field's value. -func (s *LaunchTemplateOverrides) SetPriority(v float64) *LaunchTemplateOverrides { - s.Priority = &v - return s -} - -// SetSpotPrice sets the SpotPrice field's value. -func (s *LaunchTemplateOverrides) SetSpotPrice(v string) *LaunchTemplateOverrides { - s.SpotPrice = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *LaunchTemplateOverrides) SetSubnetId(v string) *LaunchTemplateOverrides { - s.SubnetId = &v - return s -} - -// SetWeightedCapacity sets the WeightedCapacity field's value. -func (s *LaunchTemplateOverrides) SetWeightedCapacity(v float64) *LaunchTemplateOverrides { - s.WeightedCapacity = &v - return s -} - -// Describes the placement of an instance. -type LaunchTemplatePlacement struct { - _ struct{} `type:"structure"` - - // The affinity setting for the instance on the Dedicated Host. - Affinity *string `locationName:"affinity" type:"string"` - - // The Availability Zone of the instance. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The name of the placement group for the instance. - GroupName *string `locationName:"groupName" type:"string"` - - // The ID of the Dedicated Host for the instance. - HostId *string `locationName:"hostId" type:"string"` - - // Reserved for future use. - SpreadDomain *string `locationName:"spreadDomain" type:"string"` - - // The tenancy of the instance (if the instance is running in a VPC). An instance - // with a tenancy of dedicated runs on single-tenant hardware. - Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` -} - -// String returns the string representation -func (s LaunchTemplatePlacement) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplatePlacement) GoString() string { - return s.String() -} - -// SetAffinity sets the Affinity field's value. -func (s *LaunchTemplatePlacement) SetAffinity(v string) *LaunchTemplatePlacement { - s.Affinity = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *LaunchTemplatePlacement) SetAvailabilityZone(v string) *LaunchTemplatePlacement { - s.AvailabilityZone = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *LaunchTemplatePlacement) SetGroupName(v string) *LaunchTemplatePlacement { - s.GroupName = &v - return s -} - -// SetHostId sets the HostId field's value. -func (s *LaunchTemplatePlacement) SetHostId(v string) *LaunchTemplatePlacement { - s.HostId = &v - return s -} - -// SetSpreadDomain sets the SpreadDomain field's value. -func (s *LaunchTemplatePlacement) SetSpreadDomain(v string) *LaunchTemplatePlacement { - s.SpreadDomain = &v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *LaunchTemplatePlacement) SetTenancy(v string) *LaunchTemplatePlacement { - s.Tenancy = &v - return s -} - -// Describes the placement of an instance. -type LaunchTemplatePlacementRequest struct { - _ struct{} `type:"structure"` - - // The affinity setting for an instance on a Dedicated Host. - Affinity *string `type:"string"` - - // The Availability Zone for the instance. - AvailabilityZone *string `type:"string"` - - // The name of the placement group for the instance. - GroupName *string `type:"string"` - - // The ID of the Dedicated Host for the instance. - HostId *string `type:"string"` - - // Reserved for future use. - SpreadDomain *string `type:"string"` - - // The tenancy of the instance (if the instance is running in a VPC). An instance - // with a tenancy of dedicated runs on single-tenant hardware. - Tenancy *string `type:"string" enum:"Tenancy"` -} - -// String returns the string representation -func (s LaunchTemplatePlacementRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplatePlacementRequest) GoString() string { - return s.String() -} - -// SetAffinity sets the Affinity field's value. -func (s *LaunchTemplatePlacementRequest) SetAffinity(v string) *LaunchTemplatePlacementRequest { - s.Affinity = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *LaunchTemplatePlacementRequest) SetAvailabilityZone(v string) *LaunchTemplatePlacementRequest { - s.AvailabilityZone = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *LaunchTemplatePlacementRequest) SetGroupName(v string) *LaunchTemplatePlacementRequest { - s.GroupName = &v - return s -} - -// SetHostId sets the HostId field's value. -func (s *LaunchTemplatePlacementRequest) SetHostId(v string) *LaunchTemplatePlacementRequest { - s.HostId = &v - return s -} - -// SetSpreadDomain sets the SpreadDomain field's value. -func (s *LaunchTemplatePlacementRequest) SetSpreadDomain(v string) *LaunchTemplatePlacementRequest { - s.SpreadDomain = &v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *LaunchTemplatePlacementRequest) SetTenancy(v string) *LaunchTemplatePlacementRequest { - s.Tenancy = &v - return s -} - -// The launch template to use. You must specify either the launch template ID -// or launch template name in the request, but not both. -type LaunchTemplateSpecification struct { - _ struct{} `type:"structure"` - - // The ID of the launch template. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. - LaunchTemplateName *string `type:"string"` - - // The version number of the launch template. - // - // Default: The default version for the launch template. - Version *string `type:"string"` -} - -// String returns the string representation -func (s LaunchTemplateSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateSpecification) GoString() string { - return s.String() -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *LaunchTemplateSpecification) SetLaunchTemplateId(v string) *LaunchTemplateSpecification { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *LaunchTemplateSpecification) SetLaunchTemplateName(v string) *LaunchTemplateSpecification { - s.LaunchTemplateName = &v - return s -} - -// SetVersion sets the Version field's value. -func (s *LaunchTemplateSpecification) SetVersion(v string) *LaunchTemplateSpecification { - s.Version = &v - return s -} - -// The options for Spot Instances. -type LaunchTemplateSpotMarketOptions struct { - _ struct{} `type:"structure"` - - // The required duration for the Spot Instances (also known as Spot blocks), - // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, - // or 360). - BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` - - // The behavior when a Spot Instance is interrupted. - InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"InstanceInterruptionBehavior"` - - // The maximum hourly price you're willing to pay for the Spot Instances. - MaxPrice *string `locationName:"maxPrice" type:"string"` - - // The Spot Instance request type. - SpotInstanceType *string `locationName:"spotInstanceType" type:"string" enum:"SpotInstanceType"` - - // The end date of the request. For a one-time request, the request remains - // active until all instances launch, the request is canceled, or this date - // is reached. If the request is persistent, it remains active until it is canceled - // or this date and time is reached. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` -} - -// String returns the string representation -func (s LaunchTemplateSpotMarketOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateSpotMarketOptions) GoString() string { - return s.String() -} - -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *LaunchTemplateSpotMarketOptions) SetBlockDurationMinutes(v int64) *LaunchTemplateSpotMarketOptions { - s.BlockDurationMinutes = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *LaunchTemplateSpotMarketOptions) SetInstanceInterruptionBehavior(v string) *LaunchTemplateSpotMarketOptions { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetMaxPrice sets the MaxPrice field's value. -func (s *LaunchTemplateSpotMarketOptions) SetMaxPrice(v string) *LaunchTemplateSpotMarketOptions { - s.MaxPrice = &v - return s -} - -// SetSpotInstanceType sets the SpotInstanceType field's value. -func (s *LaunchTemplateSpotMarketOptions) SetSpotInstanceType(v string) *LaunchTemplateSpotMarketOptions { - s.SpotInstanceType = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *LaunchTemplateSpotMarketOptions) SetValidUntil(v time.Time) *LaunchTemplateSpotMarketOptions { - s.ValidUntil = &v - return s -} - -// The options for Spot Instances. -type LaunchTemplateSpotMarketOptionsRequest struct { - _ struct{} `type:"structure"` - - // The required duration for the Spot Instances (also known as Spot blocks), - // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, - // or 360). - BlockDurationMinutes *int64 `type:"integer"` - - // The behavior when a Spot Instance is interrupted. The default is terminate. - InstanceInterruptionBehavior *string `type:"string" enum:"InstanceInterruptionBehavior"` - - // The maximum hourly price you're willing to pay for the Spot Instances. - MaxPrice *string `type:"string"` - - // The Spot Instance request type. - SpotInstanceType *string `type:"string" enum:"SpotInstanceType"` - - // The end date of the request. For a one-time request, the request remains - // active until all instances launch, the request is canceled, or this date - // is reached. If the request is persistent, it remains active until it is canceled - // or this date and time is reached. The default end date is 7 days from the - // current date. - ValidUntil *time.Time `type:"timestamp"` -} - -// String returns the string representation -func (s LaunchTemplateSpotMarketOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateSpotMarketOptionsRequest) GoString() string { - return s.String() -} - -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *LaunchTemplateSpotMarketOptionsRequest) SetBlockDurationMinutes(v int64) *LaunchTemplateSpotMarketOptionsRequest { - s.BlockDurationMinutes = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *LaunchTemplateSpotMarketOptionsRequest) SetInstanceInterruptionBehavior(v string) *LaunchTemplateSpotMarketOptionsRequest { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetMaxPrice sets the MaxPrice field's value. -func (s *LaunchTemplateSpotMarketOptionsRequest) SetMaxPrice(v string) *LaunchTemplateSpotMarketOptionsRequest { - s.MaxPrice = &v - return s -} - -// SetSpotInstanceType sets the SpotInstanceType field's value. -func (s *LaunchTemplateSpotMarketOptionsRequest) SetSpotInstanceType(v string) *LaunchTemplateSpotMarketOptionsRequest { - s.SpotInstanceType = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *LaunchTemplateSpotMarketOptionsRequest) SetValidUntil(v time.Time) *LaunchTemplateSpotMarketOptionsRequest { - s.ValidUntil = &v - return s -} - -// The tag specification for the launch template. -type LaunchTemplateTagSpecification struct { - _ struct{} `type:"structure"` - - // The type of resource. - ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - - // The tags for the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s LaunchTemplateTagSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateTagSpecification) GoString() string { - return s.String() -} - -// SetResourceType sets the ResourceType field's value. -func (s *LaunchTemplateTagSpecification) SetResourceType(v string) *LaunchTemplateTagSpecification { - s.ResourceType = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *LaunchTemplateTagSpecification) SetTags(v []*Tag) *LaunchTemplateTagSpecification { - s.Tags = v - return s -} - -// The tags specification for the launch template. -type LaunchTemplateTagSpecificationRequest struct { - _ struct{} `type:"structure"` - - // The type of resource to tag. Currently, the resource types that support tagging - // on creation are instance and volume. To tag a resource after it has been - // created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). - ResourceType *string `type:"string" enum:"ResourceType"` - - // The tags to apply to the resource. - Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s LaunchTemplateTagSpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateTagSpecificationRequest) GoString() string { - return s.String() -} - -// SetResourceType sets the ResourceType field's value. -func (s *LaunchTemplateTagSpecificationRequest) SetResourceType(v string) *LaunchTemplateTagSpecificationRequest { - s.ResourceType = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *LaunchTemplateTagSpecificationRequest) SetTags(v []*Tag) *LaunchTemplateTagSpecificationRequest { - s.Tags = v - return s -} - -// Describes a launch template version. -type LaunchTemplateVersion struct { - _ struct{} `type:"structure"` - - // The time the version was created. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // The principal that created the version. - CreatedBy *string `locationName:"createdBy" type:"string"` - - // Indicates whether the version is the default version. - DefaultVersion *bool `locationName:"defaultVersion" type:"boolean"` - - // Information about the launch template. - LaunchTemplateData *ResponseLaunchTemplateData `locationName:"launchTemplateData" type:"structure"` - - // The ID of the launch template. - LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` - - // The name of the launch template. - LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` - - // The description for the version. - VersionDescription *string `locationName:"versionDescription" type:"string"` - - // The version number. - VersionNumber *int64 `locationName:"versionNumber" type:"long"` -} - -// String returns the string representation -func (s LaunchTemplateVersion) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplateVersion) GoString() string { - return s.String() -} - -// SetCreateTime sets the CreateTime field's value. -func (s *LaunchTemplateVersion) SetCreateTime(v time.Time) *LaunchTemplateVersion { - s.CreateTime = &v - return s -} - -// SetCreatedBy sets the CreatedBy field's value. -func (s *LaunchTemplateVersion) SetCreatedBy(v string) *LaunchTemplateVersion { - s.CreatedBy = &v - return s -} - -// SetDefaultVersion sets the DefaultVersion field's value. -func (s *LaunchTemplateVersion) SetDefaultVersion(v bool) *LaunchTemplateVersion { - s.DefaultVersion = &v - return s -} - -// SetLaunchTemplateData sets the LaunchTemplateData field's value. -func (s *LaunchTemplateVersion) SetLaunchTemplateData(v *ResponseLaunchTemplateData) *LaunchTemplateVersion { - s.LaunchTemplateData = v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *LaunchTemplateVersion) SetLaunchTemplateId(v string) *LaunchTemplateVersion { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *LaunchTemplateVersion) SetLaunchTemplateName(v string) *LaunchTemplateVersion { - s.LaunchTemplateName = &v - return s -} - -// SetVersionDescription sets the VersionDescription field's value. -func (s *LaunchTemplateVersion) SetVersionDescription(v string) *LaunchTemplateVersion { - s.VersionDescription = &v - return s -} - -// SetVersionNumber sets the VersionNumber field's value. -func (s *LaunchTemplateVersion) SetVersionNumber(v int64) *LaunchTemplateVersion { - s.VersionNumber = &v - return s -} - -// Describes the monitoring for the instance. -type LaunchTemplatesMonitoring struct { - _ struct{} `type:"structure"` - - // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring - // is enabled. - Enabled *bool `locationName:"enabled" type:"boolean"` -} - -// String returns the string representation -func (s LaunchTemplatesMonitoring) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplatesMonitoring) GoString() string { - return s.String() -} - -// SetEnabled sets the Enabled field's value. -func (s *LaunchTemplatesMonitoring) SetEnabled(v bool) *LaunchTemplatesMonitoring { - s.Enabled = &v - return s -} - -// Describes the monitoring for the instance. -type LaunchTemplatesMonitoringRequest struct { - _ struct{} `type:"structure"` - - // Specify true to enable detailed monitoring. Otherwise, basic monitoring is - // enabled. - Enabled *bool `type:"boolean"` -} - -// String returns the string representation -func (s LaunchTemplatesMonitoringRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LaunchTemplatesMonitoringRequest) GoString() string { - return s.String() -} - -// SetEnabled sets the Enabled field's value. -func (s *LaunchTemplatesMonitoringRequest) SetEnabled(v bool) *LaunchTemplatesMonitoringRequest { - s.Enabled = &v - return s -} - -// Describes a license configuration. -type LicenseConfiguration struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the license configuration. - LicenseConfigurationArn *string `locationName:"licenseConfigurationArn" type:"string"` -} - -// String returns the string representation -func (s LicenseConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LicenseConfiguration) GoString() string { - return s.String() -} - -// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. -func (s *LicenseConfiguration) SetLicenseConfigurationArn(v string) *LicenseConfiguration { - s.LicenseConfigurationArn = &v - return s -} - -// Describes a license configuration. -type LicenseConfigurationRequest struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the license configuration. - LicenseConfigurationArn *string `type:"string"` -} - -// String returns the string representation -func (s LicenseConfigurationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LicenseConfigurationRequest) GoString() string { - return s.String() -} - -// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. -func (s *LicenseConfigurationRequest) SetLicenseConfigurationArn(v string) *LicenseConfigurationRequest { - s.LicenseConfigurationArn = &v - return s -} - -// Describes the Classic Load Balancers and target groups to attach to a Spot -// Fleet request. -type LoadBalancersConfig struct { - _ struct{} `type:"structure"` - - // The Classic Load Balancers. - ClassicLoadBalancersConfig *ClassicLoadBalancersConfig `locationName:"classicLoadBalancersConfig" type:"structure"` - - // The target groups. - TargetGroupsConfig *TargetGroupsConfig `locationName:"targetGroupsConfig" type:"structure"` -} - -// String returns the string representation -func (s LoadBalancersConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LoadBalancersConfig) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *LoadBalancersConfig) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "LoadBalancersConfig"} - if s.ClassicLoadBalancersConfig != nil { - if err := s.ClassicLoadBalancersConfig.Validate(); err != nil { - invalidParams.AddNested("ClassicLoadBalancersConfig", err.(request.ErrInvalidParams)) - } - } - if s.TargetGroupsConfig != nil { - if err := s.TargetGroupsConfig.Validate(); err != nil { - invalidParams.AddNested("TargetGroupsConfig", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClassicLoadBalancersConfig sets the ClassicLoadBalancersConfig field's value. -func (s *LoadBalancersConfig) SetClassicLoadBalancersConfig(v *ClassicLoadBalancersConfig) *LoadBalancersConfig { - s.ClassicLoadBalancersConfig = v - return s -} - -// SetTargetGroupsConfig sets the TargetGroupsConfig field's value. -func (s *LoadBalancersConfig) SetTargetGroupsConfig(v *TargetGroupsConfig) *LoadBalancersConfig { - s.TargetGroupsConfig = v - return s -} - -// Describes a load permission. -type LoadPermission struct { - _ struct{} `type:"structure"` - - // The name of the group. - Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` - - // The AWS account ID. - UserId *string `locationName:"userId" type:"string"` -} - -// String returns the string representation -func (s LoadPermission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LoadPermission) GoString() string { - return s.String() -} - -// SetGroup sets the Group field's value. -func (s *LoadPermission) SetGroup(v string) *LoadPermission { - s.Group = &v - return s -} - -// SetUserId sets the UserId field's value. -func (s *LoadPermission) SetUserId(v string) *LoadPermission { - s.UserId = &v - return s -} - -// Describes modifications to the load permissions of an Amazon FPGA image (AFI). -type LoadPermissionModifications struct { - _ struct{} `type:"structure"` - - // The load permissions to add. - Add []*LoadPermissionRequest `locationNameList:"item" type:"list"` - - // The load permissions to remove. - Remove []*LoadPermissionRequest `locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s LoadPermissionModifications) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LoadPermissionModifications) GoString() string { - return s.String() -} - -// SetAdd sets the Add field's value. -func (s *LoadPermissionModifications) SetAdd(v []*LoadPermissionRequest) *LoadPermissionModifications { - s.Add = v - return s -} - -// SetRemove sets the Remove field's value. -func (s *LoadPermissionModifications) SetRemove(v []*LoadPermissionRequest) *LoadPermissionModifications { - s.Remove = v - return s -} - -// Describes a load permission. -type LoadPermissionRequest struct { - _ struct{} `type:"structure"` - - // The name of the group. - Group *string `type:"string" enum:"PermissionGroup"` - - // The AWS account ID. - UserId *string `type:"string"` -} - -// String returns the string representation -func (s LoadPermissionRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s LoadPermissionRequest) GoString() string { - return s.String() -} - -// SetGroup sets the Group field's value. -func (s *LoadPermissionRequest) SetGroup(v string) *LoadPermissionRequest { - s.Group = &v - return s -} - -// SetUserId sets the UserId field's value. -func (s *LoadPermissionRequest) SetUserId(v string) *LoadPermissionRequest { - s.UserId = &v - return s -} - -// Describes the memory for the instance type. -type MemoryInfo struct { - _ struct{} `type:"structure"` - - // Size of the memory, in MiB. - SizeInMiB *int64 `locationName:"sizeInMiB" type:"long"` -} - -// String returns the string representation -func (s MemoryInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s MemoryInfo) GoString() string { - return s.String() -} - -// SetSizeInMiB sets the SizeInMiB field's value. -func (s *MemoryInfo) SetSizeInMiB(v int64) *MemoryInfo { - s.SizeInMiB = &v - return s -} - -type ModifyCapacityReservationInput struct { - _ struct{} `type:"structure"` - - // The ID of the Capacity Reservation. - // - // CapacityReservationId is a required field - CapacityReservationId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The date and time at which the Capacity Reservation expires. When a Capacity - // Reservation expires, the reserved capacity is released and you can no longer - // launch instances into it. The Capacity Reservation's state changes to expired - // when it reaches its end date and time. - // - // The Capacity Reservation is cancelled within an hour from the specified time. - // For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation - // is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019. - // - // You must provide an EndDate value if EndDateType is limited. Omit EndDate - // if EndDateType is unlimited. - EndDate *time.Time `type:"timestamp"` - - // Indicates the way in which the Capacity Reservation ends. A Capacity Reservation - // can have one of the following end types: - // - // * unlimited - The Capacity Reservation remains active until you explicitly - // cancel it. Do not provide an EndDate value if EndDateType is unlimited. - // - // * limited - The Capacity Reservation expires automatically at a specified - // date and time. You must provide an EndDate value if EndDateType is limited. - EndDateType *string `type:"string" enum:"EndDateType"` - - // The number of instances for which to reserve capacity. - InstanceCount *int64 `type:"integer"` -} - -// String returns the string representation -func (s ModifyCapacityReservationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyCapacityReservationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyCapacityReservationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyCapacityReservationInput"} - if s.CapacityReservationId == nil { - invalidParams.Add(request.NewErrParamRequired("CapacityReservationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCapacityReservationId sets the CapacityReservationId field's value. -func (s *ModifyCapacityReservationInput) SetCapacityReservationId(v string) *ModifyCapacityReservationInput { - s.CapacityReservationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyCapacityReservationInput) SetDryRun(v bool) *ModifyCapacityReservationInput { - s.DryRun = &v - return s -} - -// SetEndDate sets the EndDate field's value. -func (s *ModifyCapacityReservationInput) SetEndDate(v time.Time) *ModifyCapacityReservationInput { - s.EndDate = &v - return s -} - -// SetEndDateType sets the EndDateType field's value. -func (s *ModifyCapacityReservationInput) SetEndDateType(v string) *ModifyCapacityReservationInput { - s.EndDateType = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *ModifyCapacityReservationInput) SetInstanceCount(v int64) *ModifyCapacityReservationInput { - s.InstanceCount = &v - return s -} - -type ModifyCapacityReservationOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyCapacityReservationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyCapacityReservationOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyCapacityReservationOutput) SetReturn(v bool) *ModifyCapacityReservationOutput { - s.Return = &v - return s -} - -type ModifyClientVpnEndpointInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint to modify. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Information about the client connection logging options. - // - // If you enable client connection logging, data about client connections is - // sent to a Cloudwatch Logs log stream. The following information is logged: - // - // * Client connection requests - // - // * Client connection results (successful and unsuccessful) - // - // * Reasons for unsuccessful client connection requests - // - // * Client connection termination time - ConnectionLogOptions *ConnectionLogOptions `type:"structure"` - - // A brief description of the Client VPN endpoint. - Description *string `type:"string"` - - // Information about the DNS servers to be used by Client VPN connections. A - // Client VPN endpoint can have up to two DNS servers. - DnsServers *DnsServersOptionsModifyStructure `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ARN of the server certificate to be used. The server certificate must - // be provisioned in AWS Certificate Manager (ACM). - ServerCertificateArn *string `type:"string"` - - // Indicates whether the VPN is split-tunnel. - // - // For information about split-tunnel VPN endpoints, see Split-Tunnel AWS Client - // VPN Endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html) - // in the AWS Client VPN Administrator Guide. - SplitTunnel *bool `type:"boolean"` -} - -// String returns the string representation -func (s ModifyClientVpnEndpointInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyClientVpnEndpointInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyClientVpnEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyClientVpnEndpointInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *ModifyClientVpnEndpointInput) SetClientVpnEndpointId(v string) *ModifyClientVpnEndpointInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetConnectionLogOptions sets the ConnectionLogOptions field's value. -func (s *ModifyClientVpnEndpointInput) SetConnectionLogOptions(v *ConnectionLogOptions) *ModifyClientVpnEndpointInput { - s.ConnectionLogOptions = v - return s -} - -// SetDescription sets the Description field's value. -func (s *ModifyClientVpnEndpointInput) SetDescription(v string) *ModifyClientVpnEndpointInput { - s.Description = &v - return s -} - -// SetDnsServers sets the DnsServers field's value. -func (s *ModifyClientVpnEndpointInput) SetDnsServers(v *DnsServersOptionsModifyStructure) *ModifyClientVpnEndpointInput { - s.DnsServers = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyClientVpnEndpointInput) SetDryRun(v bool) *ModifyClientVpnEndpointInput { - s.DryRun = &v - return s -} - -// SetServerCertificateArn sets the ServerCertificateArn field's value. -func (s *ModifyClientVpnEndpointInput) SetServerCertificateArn(v string) *ModifyClientVpnEndpointInput { - s.ServerCertificateArn = &v - return s -} - -// SetSplitTunnel sets the SplitTunnel field's value. -func (s *ModifyClientVpnEndpointInput) SetSplitTunnel(v bool) *ModifyClientVpnEndpointInput { - s.SplitTunnel = &v - return s -} - -type ModifyClientVpnEndpointOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyClientVpnEndpointOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyClientVpnEndpointOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyClientVpnEndpointOutput) SetReturn(v bool) *ModifyClientVpnEndpointOutput { - s.Return = &v - return s -} - -type ModifyEbsDefaultKmsKeyIdInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The identifier of the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, - // your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted - // state must be true. - // - // You can specify the CMK using any of the following: - // - // * Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab. - // - // * Key alias. For example, alias/ExampleAlias. - // - // * Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // - // * Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. - // - // AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, - // alias, or ARN that is not valid, the action can appear to complete, but eventually - // fails. - // - // KmsKeyId is a required field - KmsKeyId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyEbsDefaultKmsKeyIdInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyEbsDefaultKmsKeyIdInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyEbsDefaultKmsKeyIdInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyEbsDefaultKmsKeyIdInput"} - if s.KmsKeyId == nil { - invalidParams.Add(request.NewErrParamRequired("KmsKeyId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyEbsDefaultKmsKeyIdInput) SetDryRun(v bool) *ModifyEbsDefaultKmsKeyIdInput { - s.DryRun = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ModifyEbsDefaultKmsKeyIdInput) SetKmsKeyId(v string) *ModifyEbsDefaultKmsKeyIdInput { - s.KmsKeyId = &v - return s -} - -type ModifyEbsDefaultKmsKeyIdOutput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the default CMK for encryption by default. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` -} - -// String returns the string representation -func (s ModifyEbsDefaultKmsKeyIdOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyEbsDefaultKmsKeyIdOutput) GoString() string { - return s.String() -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ModifyEbsDefaultKmsKeyIdOutput) SetKmsKeyId(v string) *ModifyEbsDefaultKmsKeyIdOutput { - s.KmsKeyId = &v - return s -} - -type ModifyFleetInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Indicates whether running instances should be terminated if the total target - // capacity of the EC2 Fleet is decreased below the current size of the EC2 - // Fleet. - ExcessCapacityTerminationPolicy *string `type:"string" enum:"FleetExcessCapacityTerminationPolicy"` - - // The ID of the EC2 Fleet. - // - // FleetId is a required field - FleetId *string `type:"string" required:"true"` - - // The size of the EC2 Fleet. - // - // TargetCapacitySpecification is a required field - TargetCapacitySpecification *TargetCapacitySpecificationRequest `type:"structure" required:"true"` -} - -// String returns the string representation -func (s ModifyFleetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyFleetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyFleetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyFleetInput"} - if s.FleetId == nil { - invalidParams.Add(request.NewErrParamRequired("FleetId")) - } - if s.TargetCapacitySpecification == nil { - invalidParams.Add(request.NewErrParamRequired("TargetCapacitySpecification")) - } - if s.TargetCapacitySpecification != nil { - if err := s.TargetCapacitySpecification.Validate(); err != nil { - invalidParams.AddNested("TargetCapacitySpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyFleetInput) SetDryRun(v bool) *ModifyFleetInput { - s.DryRun = &v - return s -} - -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *ModifyFleetInput) SetExcessCapacityTerminationPolicy(v string) *ModifyFleetInput { - s.ExcessCapacityTerminationPolicy = &v - return s -} - -// SetFleetId sets the FleetId field's value. -func (s *ModifyFleetInput) SetFleetId(v string) *ModifyFleetInput { - s.FleetId = &v - return s -} - -// SetTargetCapacitySpecification sets the TargetCapacitySpecification field's value. -func (s *ModifyFleetInput) SetTargetCapacitySpecification(v *TargetCapacitySpecificationRequest) *ModifyFleetInput { - s.TargetCapacitySpecification = v - return s -} - -type ModifyFleetOutput struct { - _ struct{} `type:"structure"` - - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyFleetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyFleetOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyFleetOutput) SetReturn(v bool) *ModifyFleetOutput { - s.Return = &v - return s -} - -type ModifyFpgaImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The name of the attribute. - Attribute *string `type:"string" enum:"FpgaImageAttributeName"` - - // A description for the AFI. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the AFI. - // - // FpgaImageId is a required field - FpgaImageId *string `type:"string" required:"true"` - - // The load permission for the AFI. - LoadPermission *LoadPermissionModifications `type:"structure"` - - // A name for the AFI. - Name *string `type:"string"` - - // The operation type. - OperationType *string `type:"string" enum:"OperationType"` - - // The product codes. After you add a product code to an AFI, it can't be removed. - // This parameter is valid only when modifying the productCodes attribute. - ProductCodes []*string `locationName:"ProductCode" locationNameList:"ProductCode" type:"list"` - - // The user groups. This parameter is valid only when modifying the loadPermission - // attribute. - UserGroups []*string `locationName:"UserGroup" locationNameList:"UserGroup" type:"list"` - - // The AWS account IDs. This parameter is valid only when modifying the loadPermission - // attribute. - UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` -} - -// String returns the string representation -func (s ModifyFpgaImageAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyFpgaImageAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyFpgaImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyFpgaImageAttributeInput"} - if s.FpgaImageId == nil { - invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ModifyFpgaImageAttributeInput) SetAttribute(v string) *ModifyFpgaImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ModifyFpgaImageAttributeInput) SetDescription(v string) *ModifyFpgaImageAttributeInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyFpgaImageAttributeInput) SetDryRun(v bool) *ModifyFpgaImageAttributeInput { - s.DryRun = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *ModifyFpgaImageAttributeInput) SetFpgaImageId(v string) *ModifyFpgaImageAttributeInput { - s.FpgaImageId = &v - return s -} - -// SetLoadPermission sets the LoadPermission field's value. -func (s *ModifyFpgaImageAttributeInput) SetLoadPermission(v *LoadPermissionModifications) *ModifyFpgaImageAttributeInput { - s.LoadPermission = v - return s -} - -// SetName sets the Name field's value. -func (s *ModifyFpgaImageAttributeInput) SetName(v string) *ModifyFpgaImageAttributeInput { - s.Name = &v - return s -} - -// SetOperationType sets the OperationType field's value. -func (s *ModifyFpgaImageAttributeInput) SetOperationType(v string) *ModifyFpgaImageAttributeInput { - s.OperationType = &v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *ModifyFpgaImageAttributeInput) SetProductCodes(v []*string) *ModifyFpgaImageAttributeInput { - s.ProductCodes = v - return s -} - -// SetUserGroups sets the UserGroups field's value. -func (s *ModifyFpgaImageAttributeInput) SetUserGroups(v []*string) *ModifyFpgaImageAttributeInput { - s.UserGroups = v - return s -} - -// SetUserIds sets the UserIds field's value. -func (s *ModifyFpgaImageAttributeInput) SetUserIds(v []*string) *ModifyFpgaImageAttributeInput { - s.UserIds = v - return s -} - -type ModifyFpgaImageAttributeOutput struct { - _ struct{} `type:"structure"` - - // Information about the attribute. - FpgaImageAttribute *FpgaImageAttribute `locationName:"fpgaImageAttribute" type:"structure"` -} - -// String returns the string representation -func (s ModifyFpgaImageAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyFpgaImageAttributeOutput) GoString() string { - return s.String() -} - -// SetFpgaImageAttribute sets the FpgaImageAttribute field's value. -func (s *ModifyFpgaImageAttributeOutput) SetFpgaImageAttribute(v *FpgaImageAttribute) *ModifyFpgaImageAttributeOutput { - s.FpgaImageAttribute = v - return s -} - -type ModifyHostsInput struct { - _ struct{} `type:"structure"` - - // Specify whether to enable or disable auto-placement. - AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` - - // The IDs of the Dedicated Hosts to modify. - // - // HostIds is a required field - HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list" required:"true"` - - // Indicates whether to enable or disable host recovery for the Dedicated Host. - // For more information, see Host Recovery (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html) - // in the Amazon Elastic Compute Cloud User Guide. - HostRecovery *string `type:"string" enum:"HostRecovery"` - - // Specifies the instance family to be supported by the Dedicated Host. Specify - // this parameter to modify a Dedicated Host to support multiple instance types - // within its current instance family. - // - // If you want to modify a Dedicated Host to support a specific instance type - // only, omit this parameter and specify InstanceType instead. You cannot specify - // InstanceFamily and InstanceType in the same request. - InstanceFamily *string `type:"string"` - - // Specifies the instance type to be supported by the Dedicated Host. Specify - // this parameter to modify a Dedicated Host to support only a specific instance - // type. - // - // If you want to modify a Dedicated Host to support multiple instance types - // in its current instance family, omit this parameter and specify InstanceFamily - // instead. You cannot specify InstanceType and InstanceFamily in the same request. - InstanceType *string `type:"string"` -} - -// String returns the string representation -func (s ModifyHostsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyHostsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyHostsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyHostsInput"} - if s.HostIds == nil { - invalidParams.Add(request.NewErrParamRequired("HostIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAutoPlacement sets the AutoPlacement field's value. -func (s *ModifyHostsInput) SetAutoPlacement(v string) *ModifyHostsInput { - s.AutoPlacement = &v - return s -} - -// SetHostIds sets the HostIds field's value. -func (s *ModifyHostsInput) SetHostIds(v []*string) *ModifyHostsInput { - s.HostIds = v - return s -} - -// SetHostRecovery sets the HostRecovery field's value. -func (s *ModifyHostsInput) SetHostRecovery(v string) *ModifyHostsInput { - s.HostRecovery = &v - return s -} - -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *ModifyHostsInput) SetInstanceFamily(v string) *ModifyHostsInput { - s.InstanceFamily = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ModifyHostsInput) SetInstanceType(v string) *ModifyHostsInput { - s.InstanceType = &v - return s -} - -type ModifyHostsOutput struct { - _ struct{} `type:"structure"` - - // The IDs of the Dedicated Hosts that were successfully modified. - Successful []*string `locationName:"successful" locationNameList:"item" type:"list"` - - // The IDs of the Dedicated Hosts that could not be modified. Check whether - // the setting you requested can be used. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ModifyHostsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyHostsOutput) GoString() string { - return s.String() -} - -// SetSuccessful sets the Successful field's value. -func (s *ModifyHostsOutput) SetSuccessful(v []*string) *ModifyHostsOutput { - s.Successful = v - return s -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *ModifyHostsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *ModifyHostsOutput { - s.Unsuccessful = v - return s -} - -type ModifyIdFormatInput struct { - _ struct{} `type:"structure"` - - // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options - // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log - // | image | import-task | internet-gateway | network-acl | network-acl-association - // | network-interface | network-interface-attachment | prefix-list | route-table - // | route-table-association | security-group | subnet | subnet-cidr-block-association - // | vpc | vpc-cidr-block-association | vpc-endpoint | vpc-peering-connection - // | vpn-connection | vpn-gateway. - // - // Alternatively, use the all-current option to include all resource types that - // are currently within their opt-in period for longer IDs. - // - // Resource is a required field - Resource *string `type:"string" required:"true"` - - // Indicate whether the resource should use longer IDs (17-character IDs). - // - // UseLongIds is a required field - UseLongIds *bool `type:"boolean" required:"true"` -} - -// String returns the string representation -func (s ModifyIdFormatInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyIdFormatInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyIdFormatInput"} - if s.Resource == nil { - invalidParams.Add(request.NewErrParamRequired("Resource")) - } - if s.UseLongIds == nil { - invalidParams.Add(request.NewErrParamRequired("UseLongIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetResource sets the Resource field's value. -func (s *ModifyIdFormatInput) SetResource(v string) *ModifyIdFormatInput { - s.Resource = &v - return s -} - -// SetUseLongIds sets the UseLongIds field's value. -func (s *ModifyIdFormatInput) SetUseLongIds(v bool) *ModifyIdFormatInput { - s.UseLongIds = &v - return s -} - -type ModifyIdFormatOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyIdFormatOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyIdFormatOutput) GoString() string { - return s.String() -} - -type ModifyIdentityIdFormatInput struct { - _ struct{} `type:"structure"` - - // The ARN of the principal, which can be an IAM user, IAM role, or the root - // user. Specify all to modify the ID format for all IAM users, IAM roles, and - // the root user of the account. - // - // PrincipalArn is a required field - PrincipalArn *string `locationName:"principalArn" type:"string" required:"true"` - - // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options - // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log - // | image | import-task | internet-gateway | network-acl | network-acl-association - // | network-interface | network-interface-attachment | prefix-list | route-table - // | route-table-association | security-group | subnet | subnet-cidr-block-association - // | vpc | vpc-cidr-block-association | vpc-endpoint | vpc-peering-connection - // | vpn-connection | vpn-gateway. - // - // Alternatively, use the all-current option to include all resource types that - // are currently within their opt-in period for longer IDs. - // - // Resource is a required field - Resource *string `locationName:"resource" type:"string" required:"true"` - - // Indicates whether the resource should use longer IDs (17-character IDs) - // - // UseLongIds is a required field - UseLongIds *bool `locationName:"useLongIds" type:"boolean" required:"true"` -} - -// String returns the string representation -func (s ModifyIdentityIdFormatInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyIdentityIdFormatInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyIdentityIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyIdentityIdFormatInput"} - if s.PrincipalArn == nil { - invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) - } - if s.Resource == nil { - invalidParams.Add(request.NewErrParamRequired("Resource")) - } - if s.UseLongIds == nil { - invalidParams.Add(request.NewErrParamRequired("UseLongIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetPrincipalArn sets the PrincipalArn field's value. -func (s *ModifyIdentityIdFormatInput) SetPrincipalArn(v string) *ModifyIdentityIdFormatInput { - s.PrincipalArn = &v - return s -} - -// SetResource sets the Resource field's value. -func (s *ModifyIdentityIdFormatInput) SetResource(v string) *ModifyIdentityIdFormatInput { - s.Resource = &v - return s -} - -// SetUseLongIds sets the UseLongIds field's value. -func (s *ModifyIdentityIdFormatInput) SetUseLongIds(v bool) *ModifyIdentityIdFormatInput { - s.UseLongIds = &v - return s -} - -type ModifyIdentityIdFormatOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyIdentityIdFormatOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyIdentityIdFormatOutput) GoString() string { - return s.String() -} - -// Contains the parameters for ModifyImageAttribute. -type ModifyImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The name of the attribute to modify. The valid values are description, launchPermission, - // and productCodes. - Attribute *string `type:"string"` - - // A new description for the AMI. - Description *AttributeValue `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` - - // A new launch permission for the AMI. - LaunchPermission *LaunchPermissionModifications `type:"structure"` - - // The operation type. This parameter can be used only when the Attribute parameter - // is launchPermission. - OperationType *string `type:"string" enum:"OperationType"` - - // The DevPay product codes. After you add a product code to an AMI, it can't - // be removed. - ProductCodes []*string `locationName:"ProductCode" locationNameList:"ProductCode" type:"list"` - - // The user groups. This parameter can be used only when the Attribute parameter - // is launchPermission. - UserGroups []*string `locationName:"UserGroup" locationNameList:"UserGroup" type:"list"` - - // The AWS account IDs. This parameter can be used only when the Attribute parameter - // is launchPermission. - UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` - - // The value of the attribute being modified. This parameter can be used only - // when the Attribute parameter is description or productCodes. - Value *string `type:"string"` -} - -// String returns the string representation -func (s ModifyImageAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyImageAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyImageAttributeInput"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ModifyImageAttributeInput) SetAttribute(v string) *ModifyImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ModifyImageAttributeInput) SetDescription(v *AttributeValue) *ModifyImageAttributeInput { - s.Description = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyImageAttributeInput) SetDryRun(v bool) *ModifyImageAttributeInput { - s.DryRun = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ModifyImageAttributeInput) SetImageId(v string) *ModifyImageAttributeInput { - s.ImageId = &v - return s -} - -// SetLaunchPermission sets the LaunchPermission field's value. -func (s *ModifyImageAttributeInput) SetLaunchPermission(v *LaunchPermissionModifications) *ModifyImageAttributeInput { - s.LaunchPermission = v - return s -} - -// SetOperationType sets the OperationType field's value. -func (s *ModifyImageAttributeInput) SetOperationType(v string) *ModifyImageAttributeInput { - s.OperationType = &v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *ModifyImageAttributeInput) SetProductCodes(v []*string) *ModifyImageAttributeInput { - s.ProductCodes = v - return s -} - -// SetUserGroups sets the UserGroups field's value. -func (s *ModifyImageAttributeInput) SetUserGroups(v []*string) *ModifyImageAttributeInput { - s.UserGroups = v - return s -} - -// SetUserIds sets the UserIds field's value. -func (s *ModifyImageAttributeInput) SetUserIds(v []*string) *ModifyImageAttributeInput { - s.UserIds = v - return s -} - -// SetValue sets the Value field's value. -func (s *ModifyImageAttributeInput) SetValue(v string) *ModifyImageAttributeInput { - s.Value = &v - return s -} - -type ModifyImageAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyImageAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyImageAttributeOutput) GoString() string { - return s.String() -} - -type ModifyInstanceAttributeInput struct { - _ struct{} `type:"structure"` - - // The name of the attribute. - Attribute *string `locationName:"attribute" type:"string" enum:"InstanceAttributeName"` - - // Modifies the DeleteOnTermination attribute for volumes that are currently - // attached. The volume must be owned by the caller. If no value is specified - // for DeleteOnTermination, the default is true and the volume is deleted when - // the instance is terminated. - // - // To add instance store volumes to an Amazon EBS-backed instance, you must - // add them when you launch the instance. For more information, see Updating - // the Block Device Mapping when Launching an Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM) - // in the Amazon Elastic Compute Cloud User Guide. - BlockDeviceMappings []*InstanceBlockDeviceMappingSpecification `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // If the value is true, you can't terminate the instance using the Amazon EC2 - // console, CLI, or API; otherwise, you can. You cannot use this parameter for - // Spot Instances. - DisableApiTermination *AttributeBooleanValue `locationName:"disableApiTermination" type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Specifies whether the instance is optimized for Amazon EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - EbsOptimized *AttributeBooleanValue `locationName:"ebsOptimized" type:"structure"` - - // Set to true to enable enhanced networking with ENA for the instance. - // - // This option is supported only for HVM instances. Specifying this option with - // a PV instance can make it unreachable. - EnaSupport *AttributeBooleanValue `locationName:"enaSupport" type:"structure"` - - // [EC2-VPC] Changes the security groups of the instance. You must specify at - // least one security group, even if it's just the default security group for - // the VPC. You must specify the security group ID, not the security group name. - Groups []*string `locationName:"GroupId" locationNameList:"groupId" type:"list"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // Specifies whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *AttributeValue `locationName:"instanceInitiatedShutdownBehavior" type:"structure"` - - // Changes the instance type to the specified value. For more information, see - // Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). - // If the instance type is not valid, the error returned is InvalidInstanceAttributeValue. - InstanceType *AttributeValue `locationName:"instanceType" type:"structure"` - - // Changes the instance's kernel to the specified value. We recommend that you - // use PV-GRUB instead of kernels and RAM disks. For more information, see PV-GRUB - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html). - Kernel *AttributeValue `locationName:"kernel" type:"structure"` - - // Changes the instance's RAM disk to the specified value. We recommend that - // you use PV-GRUB instead of kernels and RAM disks. For more information, see - // PV-GRUB (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html). - Ramdisk *AttributeValue `locationName:"ramdisk" type:"structure"` - - // Specifies whether source/destination checking is enabled. A value of true - // means that checking is enabled, and false means that checking is disabled. - // This value must be false for a NAT instance to perform NAT. - SourceDestCheck *AttributeBooleanValue `type:"structure"` - - // Set to simple to enable enhanced networking with the Intel 82599 Virtual - // Function interface for the instance. - // - // There is no way to disable enhanced networking with the Intel 82599 Virtual - // Function interface at this time. - // - // This option is supported only for HVM instances. Specifying this option with - // a PV instance can make it unreachable. - SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` - - // Changes the instance's user data to the specified value. If you are using - // an AWS SDK or command line tool, base64-encoding is performed for you, and - // you can load the text from a file. Otherwise, you must provide base64-encoded - // text. - UserData *BlobAttributeValue `locationName:"userData" type:"structure"` - - // A new value for the attribute. Use only with the kernel, ramdisk, userData, - // disableApiTermination, or instanceInitiatedShutdownBehavior attribute. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s ModifyInstanceAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstanceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceAttributeInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ModifyInstanceAttributeInput) SetAttribute(v string) *ModifyInstanceAttributeInput { - s.Attribute = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *ModifyInstanceAttributeInput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMappingSpecification) *ModifyInstanceAttributeInput { - s.BlockDeviceMappings = v - return s -} - -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *ModifyInstanceAttributeInput) SetDisableApiTermination(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.DisableApiTermination = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyInstanceAttributeInput) SetDryRun(v bool) *ModifyInstanceAttributeInput { - s.DryRun = &v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *ModifyInstanceAttributeInput) SetEbsOptimized(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.EbsOptimized = v - return s -} - -// SetEnaSupport sets the EnaSupport field's value. -func (s *ModifyInstanceAttributeInput) SetEnaSupport(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.EnaSupport = v - return s -} - -// SetGroups sets the Groups field's value. -func (s *ModifyInstanceAttributeInput) SetGroups(v []*string) *ModifyInstanceAttributeInput { - s.Groups = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstanceAttributeInput) SetInstanceId(v string) *ModifyInstanceAttributeInput { - s.InstanceId = &v - return s -} - -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *ModifyInstanceAttributeInput) SetInstanceInitiatedShutdownBehavior(v *AttributeValue) *ModifyInstanceAttributeInput { - s.InstanceInitiatedShutdownBehavior = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ModifyInstanceAttributeInput) SetInstanceType(v *AttributeValue) *ModifyInstanceAttributeInput { - s.InstanceType = v - return s -} - -// SetKernel sets the Kernel field's value. -func (s *ModifyInstanceAttributeInput) SetKernel(v *AttributeValue) *ModifyInstanceAttributeInput { - s.Kernel = v - return s -} - -// SetRamdisk sets the Ramdisk field's value. -func (s *ModifyInstanceAttributeInput) SetRamdisk(v *AttributeValue) *ModifyInstanceAttributeInput { - s.Ramdisk = v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *ModifyInstanceAttributeInput) SetSourceDestCheck(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.SourceDestCheck = v - return s -} - -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *ModifyInstanceAttributeInput) SetSriovNetSupport(v *AttributeValue) *ModifyInstanceAttributeInput { - s.SriovNetSupport = v - return s -} - -// SetUserData sets the UserData field's value. -func (s *ModifyInstanceAttributeInput) SetUserData(v *BlobAttributeValue) *ModifyInstanceAttributeInput { - s.UserData = v - return s -} - -// SetValue sets the Value field's value. -func (s *ModifyInstanceAttributeInput) SetValue(v string) *ModifyInstanceAttributeInput { - s.Value = &v - return s -} - -type ModifyInstanceAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyInstanceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceAttributeOutput) GoString() string { - return s.String() -} - -type ModifyInstanceCapacityReservationAttributesInput struct { - _ struct{} `type:"structure"` - - // Information about the Capacity Reservation targeting option. - // - // CapacityReservationSpecification is a required field - CapacityReservationSpecification *CapacityReservationSpecification `type:"structure" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the instance to be modified. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyInstanceCapacityReservationAttributesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceCapacityReservationAttributesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstanceCapacityReservationAttributesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceCapacityReservationAttributesInput"} - if s.CapacityReservationSpecification == nil { - invalidParams.Add(request.NewErrParamRequired("CapacityReservationSpecification")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. -func (s *ModifyInstanceCapacityReservationAttributesInput) SetCapacityReservationSpecification(v *CapacityReservationSpecification) *ModifyInstanceCapacityReservationAttributesInput { - s.CapacityReservationSpecification = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyInstanceCapacityReservationAttributesInput) SetDryRun(v bool) *ModifyInstanceCapacityReservationAttributesInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstanceCapacityReservationAttributesInput) SetInstanceId(v string) *ModifyInstanceCapacityReservationAttributesInput { - s.InstanceId = &v - return s -} - -type ModifyInstanceCapacityReservationAttributesOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyInstanceCapacityReservationAttributesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceCapacityReservationAttributesOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyInstanceCapacityReservationAttributesOutput) SetReturn(v bool) *ModifyInstanceCapacityReservationAttributesOutput { - s.Return = &v - return s -} - -type ModifyInstanceCreditSpecificationInput struct { - _ struct{} `type:"structure"` - - // A unique, case-sensitive token that you provide to ensure idempotency of - // your modification request. For more information, see Ensuring Idempotency - // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Information about the credit option for CPU usage. - // - // InstanceCreditSpecifications is a required field - InstanceCreditSpecifications []*InstanceCreditSpecificationRequest `locationName:"InstanceCreditSpecification" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s ModifyInstanceCreditSpecificationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceCreditSpecificationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstanceCreditSpecificationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceCreditSpecificationInput"} - if s.InstanceCreditSpecifications == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCreditSpecifications")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *ModifyInstanceCreditSpecificationInput) SetClientToken(v string) *ModifyInstanceCreditSpecificationInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyInstanceCreditSpecificationInput) SetDryRun(v bool) *ModifyInstanceCreditSpecificationInput { - s.DryRun = &v - return s -} - -// SetInstanceCreditSpecifications sets the InstanceCreditSpecifications field's value. -func (s *ModifyInstanceCreditSpecificationInput) SetInstanceCreditSpecifications(v []*InstanceCreditSpecificationRequest) *ModifyInstanceCreditSpecificationInput { - s.InstanceCreditSpecifications = v - return s -} - -type ModifyInstanceCreditSpecificationOutput struct { - _ struct{} `type:"structure"` - - // Information about the instances whose credit option for CPU usage was successfully - // modified. - SuccessfulInstanceCreditSpecifications []*SuccessfulInstanceCreditSpecificationItem `locationName:"successfulInstanceCreditSpecificationSet" locationNameList:"item" type:"list"` - - // Information about the instances whose credit option for CPU usage was not - // modified. - UnsuccessfulInstanceCreditSpecifications []*UnsuccessfulInstanceCreditSpecificationItem `locationName:"unsuccessfulInstanceCreditSpecificationSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ModifyInstanceCreditSpecificationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceCreditSpecificationOutput) GoString() string { - return s.String() -} - -// SetSuccessfulInstanceCreditSpecifications sets the SuccessfulInstanceCreditSpecifications field's value. -func (s *ModifyInstanceCreditSpecificationOutput) SetSuccessfulInstanceCreditSpecifications(v []*SuccessfulInstanceCreditSpecificationItem) *ModifyInstanceCreditSpecificationOutput { - s.SuccessfulInstanceCreditSpecifications = v - return s -} - -// SetUnsuccessfulInstanceCreditSpecifications sets the UnsuccessfulInstanceCreditSpecifications field's value. -func (s *ModifyInstanceCreditSpecificationOutput) SetUnsuccessfulInstanceCreditSpecifications(v []*UnsuccessfulInstanceCreditSpecificationItem) *ModifyInstanceCreditSpecificationOutput { - s.UnsuccessfulInstanceCreditSpecifications = v - return s -} - -type ModifyInstanceEventStartTimeInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the event whose date and time you are modifying. - // - // InstanceEventId is a required field - InstanceEventId *string `type:"string" required:"true"` - - // The ID of the instance with the scheduled event. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // The new date and time when the event will take place. - // - // NotBefore is a required field - NotBefore *time.Time `type:"timestamp" required:"true"` -} - -// String returns the string representation -func (s ModifyInstanceEventStartTimeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceEventStartTimeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstanceEventStartTimeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceEventStartTimeInput"} - if s.InstanceEventId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceEventId")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.NotBefore == nil { - invalidParams.Add(request.NewErrParamRequired("NotBefore")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyInstanceEventStartTimeInput) SetDryRun(v bool) *ModifyInstanceEventStartTimeInput { - s.DryRun = &v - return s -} - -// SetInstanceEventId sets the InstanceEventId field's value. -func (s *ModifyInstanceEventStartTimeInput) SetInstanceEventId(v string) *ModifyInstanceEventStartTimeInput { - s.InstanceEventId = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstanceEventStartTimeInput) SetInstanceId(v string) *ModifyInstanceEventStartTimeInput { - s.InstanceId = &v - return s -} - -// SetNotBefore sets the NotBefore field's value. -func (s *ModifyInstanceEventStartTimeInput) SetNotBefore(v time.Time) *ModifyInstanceEventStartTimeInput { - s.NotBefore = &v - return s -} - -type ModifyInstanceEventStartTimeOutput struct { - _ struct{} `type:"structure"` - - // Describes a scheduled event for an instance. - Event *InstanceStatusEvent `locationName:"event" type:"structure"` -} - -// String returns the string representation -func (s ModifyInstanceEventStartTimeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceEventStartTimeOutput) GoString() string { - return s.String() -} - -// SetEvent sets the Event field's value. -func (s *ModifyInstanceEventStartTimeOutput) SetEvent(v *InstanceStatusEvent) *ModifyInstanceEventStartTimeOutput { - s.Event = v - return s -} - -type ModifyInstanceMetadataOptionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // This parameter enables or disables the HTTP metadata endpoint on your instances. - // If the parameter is not specified, the existing state is maintained. - // - // If you specify a value of disabled, you will not be able to access your instance - // metadata. - HttpEndpoint *string `type:"string" enum:"InstanceMetadataEndpointState"` - - // The desired HTTP PUT response hop limit for instance metadata requests. The - // larger the number, the further instance metadata requests can travel. If - // no parameter is specified, the existing state is maintained. - // - // Possible values: Integers from 1 to 64 - HttpPutResponseHopLimit *int64 `type:"integer"` - - // The state of token usage for your instance metadata requests. If the parameter - // is not specified in the request, the default state is optional. - // - // If the state is optional, you can choose to retrieve instance metadata with - // or without a signed token header on your request. If you retrieve the IAM - // role credentials without a token, the version 1.0 role credentials are returned. - // If you retrieve the IAM role credentials using a valid signed token, the - // version 2.0 role credentials are returned. - // - // If the state is required, you must send a signed token header with any instance - // metadata retrieval requests. In this state, retrieving the IAM role credential - // always returns the version 2.0 credentials; the version 1.0 credentials are - // not available. - HttpTokens *string `type:"string" enum:"HttpTokensState"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyInstanceMetadataOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceMetadataOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstanceMetadataOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceMetadataOptionsInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyInstanceMetadataOptionsInput) SetDryRun(v bool) *ModifyInstanceMetadataOptionsInput { - s.DryRun = &v - return s -} - -// SetHttpEndpoint sets the HttpEndpoint field's value. -func (s *ModifyInstanceMetadataOptionsInput) SetHttpEndpoint(v string) *ModifyInstanceMetadataOptionsInput { - s.HttpEndpoint = &v - return s -} - -// SetHttpPutResponseHopLimit sets the HttpPutResponseHopLimit field's value. -func (s *ModifyInstanceMetadataOptionsInput) SetHttpPutResponseHopLimit(v int64) *ModifyInstanceMetadataOptionsInput { - s.HttpPutResponseHopLimit = &v - return s -} - -// SetHttpTokens sets the HttpTokens field's value. -func (s *ModifyInstanceMetadataOptionsInput) SetHttpTokens(v string) *ModifyInstanceMetadataOptionsInput { - s.HttpTokens = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstanceMetadataOptionsInput) SetInstanceId(v string) *ModifyInstanceMetadataOptionsInput { - s.InstanceId = &v - return s -} - -type ModifyInstanceMetadataOptionsOutput struct { - _ struct{} `type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The metadata options for the instance. - InstanceMetadataOptions *InstanceMetadataOptionsResponse `locationName:"instanceMetadataOptions" type:"structure"` -} - -// String returns the string representation -func (s ModifyInstanceMetadataOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceMetadataOptionsOutput) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstanceMetadataOptionsOutput) SetInstanceId(v string) *ModifyInstanceMetadataOptionsOutput { - s.InstanceId = &v - return s -} - -// SetInstanceMetadataOptions sets the InstanceMetadataOptions field's value. -func (s *ModifyInstanceMetadataOptionsOutput) SetInstanceMetadataOptions(v *InstanceMetadataOptionsResponse) *ModifyInstanceMetadataOptionsOutput { - s.InstanceMetadataOptions = v - return s -} - -type ModifyInstancePlacementInput struct { - _ struct{} `type:"structure"` - - // The affinity setting for the instance. - Affinity *string `locationName:"affinity" type:"string" enum:"Affinity"` - - // The name of the placement group in which to place the instance. For spread - // placement groups, the instance must have a tenancy of default. For cluster - // and partition placement groups, the instance must have a tenancy of default - // or dedicated. - // - // To remove an instance from a placement group, specify an empty string (""). - GroupName *string `type:"string"` - - // The ID of the Dedicated Host with which to associate the instance. - HostId *string `locationName:"hostId" type:"string"` - - // The ID of the instance that you are modifying. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // Reserved for future use. - PartitionNumber *int64 `type:"integer"` - - // The tenancy for the instance. - Tenancy *string `locationName:"tenancy" type:"string" enum:"HostTenancy"` -} - -// String returns the string representation -func (s ModifyInstancePlacementInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstancePlacementInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstancePlacementInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstancePlacementInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAffinity sets the Affinity field's value. -func (s *ModifyInstancePlacementInput) SetAffinity(v string) *ModifyInstancePlacementInput { - s.Affinity = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *ModifyInstancePlacementInput) SetGroupName(v string) *ModifyInstancePlacementInput { - s.GroupName = &v - return s -} - -// SetHostId sets the HostId field's value. -func (s *ModifyInstancePlacementInput) SetHostId(v string) *ModifyInstancePlacementInput { - s.HostId = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstancePlacementInput) SetInstanceId(v string) *ModifyInstancePlacementInput { - s.InstanceId = &v - return s -} - -// SetPartitionNumber sets the PartitionNumber field's value. -func (s *ModifyInstancePlacementInput) SetPartitionNumber(v int64) *ModifyInstancePlacementInput { - s.PartitionNumber = &v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *ModifyInstancePlacementInput) SetTenancy(v string) *ModifyInstancePlacementInput { - s.Tenancy = &v - return s -} - -type ModifyInstancePlacementOutput struct { - _ struct{} `type:"structure"` - - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyInstancePlacementOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstancePlacementOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyInstancePlacementOutput) SetReturn(v bool) *ModifyInstancePlacementOutput { - s.Return = &v - return s -} - -type ModifyLaunchTemplateInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraint: Maximum 128 ASCII characters. - ClientToken *string `type:"string"` - - // The version number of the launch template to set as the default version. - DefaultVersion *string `locationName:"SetDefaultVersion" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateId *string `type:"string"` - - // The name of the launch template. You must specify either the launch template - // ID or launch template name in the request. - LaunchTemplateName *string `min:"3" type:"string"` -} - -// String returns the string representation -func (s ModifyLaunchTemplateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyLaunchTemplateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyLaunchTemplateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyLaunchTemplateInput"} - if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { - invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *ModifyLaunchTemplateInput) SetClientToken(v string) *ModifyLaunchTemplateInput { - s.ClientToken = &v - return s -} - -// SetDefaultVersion sets the DefaultVersion field's value. -func (s *ModifyLaunchTemplateInput) SetDefaultVersion(v string) *ModifyLaunchTemplateInput { - s.DefaultVersion = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyLaunchTemplateInput) SetDryRun(v bool) *ModifyLaunchTemplateInput { - s.DryRun = &v - return s -} - -// SetLaunchTemplateId sets the LaunchTemplateId field's value. -func (s *ModifyLaunchTemplateInput) SetLaunchTemplateId(v string) *ModifyLaunchTemplateInput { - s.LaunchTemplateId = &v - return s -} - -// SetLaunchTemplateName sets the LaunchTemplateName field's value. -func (s *ModifyLaunchTemplateInput) SetLaunchTemplateName(v string) *ModifyLaunchTemplateInput { - s.LaunchTemplateName = &v - return s -} - -type ModifyLaunchTemplateOutput struct { - _ struct{} `type:"structure"` - - // Information about the launch template. - LaunchTemplate *LaunchTemplate `locationName:"launchTemplate" type:"structure"` -} - -// String returns the string representation -func (s ModifyLaunchTemplateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyLaunchTemplateOutput) GoString() string { - return s.String() -} - -// SetLaunchTemplate sets the LaunchTemplate field's value. -func (s *ModifyLaunchTemplateOutput) SetLaunchTemplate(v *LaunchTemplate) *ModifyLaunchTemplateOutput { - s.LaunchTemplate = v - return s -} - -// Contains the parameters for ModifyNetworkInterfaceAttribute. -type ModifyNetworkInterfaceAttributeInput struct { - _ struct{} `type:"structure"` - - // Information about the interface attachment. If modifying the 'delete on termination' - // attribute, you must specify the ID of the interface attachment. - Attachment *NetworkInterfaceAttachmentChanges `locationName:"attachment" type:"structure"` - - // A description for the network interface. - Description *AttributeValue `locationName:"description" type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Changes the security groups for the network interface. The new set of groups - // you specify replaces the current set. You must specify at least one group, - // even if it's just the default security group in the VPC. You must specify - // the ID of the security group, not the name. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` - - // Indicates whether source/destination checking is enabled. A value of true - // means checking is enabled, and false means checking is disabled. This value - // must be false for a NAT instance to perform NAT. For more information, see - // NAT Instances (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) - // in the Amazon Virtual Private Cloud User Guide. - SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` -} - -// String returns the string representation -func (s ModifyNetworkInterfaceAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyNetworkInterfaceAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyNetworkInterfaceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyNetworkInterfaceAttributeInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttachment sets the Attachment field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetAttachment(v *NetworkInterfaceAttachmentChanges) *ModifyNetworkInterfaceAttributeInput { - s.Attachment = v - return s -} - -// SetDescription sets the Description field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetDescription(v *AttributeValue) *ModifyNetworkInterfaceAttributeInput { - s.Description = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetDryRun(v bool) *ModifyNetworkInterfaceAttributeInput { - s.DryRun = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetGroups(v []*string) *ModifyNetworkInterfaceAttributeInput { - s.Groups = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *ModifyNetworkInterfaceAttributeInput { - s.NetworkInterfaceId = &v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetSourceDestCheck(v *AttributeBooleanValue) *ModifyNetworkInterfaceAttributeInput { - s.SourceDestCheck = v - return s -} - -type ModifyNetworkInterfaceAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyNetworkInterfaceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyNetworkInterfaceAttributeOutput) GoString() string { - return s.String() -} - -// Contains the parameters for ModifyReservedInstances. -type ModifyReservedInstancesInput struct { - _ struct{} `type:"structure"` - - // A unique, case-sensitive token you provide to ensure idempotency of your - // modification request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // The IDs of the Reserved Instances to modify. - // - // ReservedInstancesIds is a required field - ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"ReservedInstancesId" type:"list" required:"true"` - - // The configuration settings for the Reserved Instances to modify. - // - // TargetConfigurations is a required field - TargetConfigurations []*ReservedInstancesConfiguration `locationName:"ReservedInstancesConfigurationSetItemType" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s ModifyReservedInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyReservedInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyReservedInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyReservedInstancesInput"} - if s.ReservedInstancesIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesIds")) - } - if s.TargetConfigurations == nil { - invalidParams.Add(request.NewErrParamRequired("TargetConfigurations")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *ModifyReservedInstancesInput) SetClientToken(v string) *ModifyReservedInstancesInput { - s.ClientToken = &v - return s -} - -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *ModifyReservedInstancesInput) SetReservedInstancesIds(v []*string) *ModifyReservedInstancesInput { - s.ReservedInstancesIds = v - return s -} - -// SetTargetConfigurations sets the TargetConfigurations field's value. -func (s *ModifyReservedInstancesInput) SetTargetConfigurations(v []*ReservedInstancesConfiguration) *ModifyReservedInstancesInput { - s.TargetConfigurations = v - return s -} - -// Contains the output of ModifyReservedInstances. -type ModifyReservedInstancesOutput struct { - _ struct{} `type:"structure"` - - // The ID for the modification. - ReservedInstancesModificationId *string `locationName:"reservedInstancesModificationId" type:"string"` -} - -// String returns the string representation -func (s ModifyReservedInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyReservedInstancesOutput) GoString() string { - return s.String() -} - -// SetReservedInstancesModificationId sets the ReservedInstancesModificationId field's value. -func (s *ModifyReservedInstancesOutput) SetReservedInstancesModificationId(v string) *ModifyReservedInstancesOutput { - s.ReservedInstancesModificationId = &v - return s -} - -type ModifySnapshotAttributeInput struct { - _ struct{} `type:"structure"` - - // The snapshot attribute to modify. Only volume creation permissions can be - // modified. - Attribute *string `type:"string" enum:"SnapshotAttributeName"` - - // A JSON representation of the snapshot attribute modification. - CreateVolumePermission *CreateVolumePermissionModifications `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The group to modify for the snapshot. - GroupNames []*string `locationName:"UserGroup" locationNameList:"GroupName" type:"list"` - - // The type of operation to perform to the attribute. - OperationType *string `type:"string" enum:"OperationType"` - - // The ID of the snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` - - // The account ID to modify for the snapshot. - UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` -} - -// String returns the string representation -func (s ModifySnapshotAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifySnapshotAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifySnapshotAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifySnapshotAttributeInput"} - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ModifySnapshotAttributeInput) SetAttribute(v string) *ModifySnapshotAttributeInput { - s.Attribute = &v - return s -} - -// SetCreateVolumePermission sets the CreateVolumePermission field's value. -func (s *ModifySnapshotAttributeInput) SetCreateVolumePermission(v *CreateVolumePermissionModifications) *ModifySnapshotAttributeInput { - s.CreateVolumePermission = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifySnapshotAttributeInput) SetDryRun(v bool) *ModifySnapshotAttributeInput { - s.DryRun = &v - return s -} - -// SetGroupNames sets the GroupNames field's value. -func (s *ModifySnapshotAttributeInput) SetGroupNames(v []*string) *ModifySnapshotAttributeInput { - s.GroupNames = v - return s -} - -// SetOperationType sets the OperationType field's value. -func (s *ModifySnapshotAttributeInput) SetOperationType(v string) *ModifySnapshotAttributeInput { - s.OperationType = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *ModifySnapshotAttributeInput) SetSnapshotId(v string) *ModifySnapshotAttributeInput { - s.SnapshotId = &v - return s -} - -// SetUserIds sets the UserIds field's value. -func (s *ModifySnapshotAttributeInput) SetUserIds(v []*string) *ModifySnapshotAttributeInput { - s.UserIds = v - return s -} - -type ModifySnapshotAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifySnapshotAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifySnapshotAttributeOutput) GoString() string { - return s.String() -} - -// Contains the parameters for ModifySpotFleetRequest. -type ModifySpotFleetRequestInput struct { - _ struct{} `type:"structure"` - - // Indicates whether running Spot Instances should be terminated if the target - // capacity of the Spot Fleet request is decreased below the current size of - // the Spot Fleet. - ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"ExcessCapacityTerminationPolicy"` - - // The number of On-Demand Instances in the fleet. - OnDemandTargetCapacity *int64 `type:"integer"` - - // The ID of the Spot Fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` - - // The size of the fleet. - TargetCapacity *int64 `locationName:"targetCapacity" type:"integer"` -} - -// String returns the string representation -func (s ModifySpotFleetRequestInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifySpotFleetRequestInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifySpotFleetRequestInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifySpotFleetRequestInput"} - if s.SpotFleetRequestId == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *ModifySpotFleetRequestInput) SetExcessCapacityTerminationPolicy(v string) *ModifySpotFleetRequestInput { - s.ExcessCapacityTerminationPolicy = &v - return s -} - -// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. -func (s *ModifySpotFleetRequestInput) SetOnDemandTargetCapacity(v int64) *ModifySpotFleetRequestInput { - s.OnDemandTargetCapacity = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *ModifySpotFleetRequestInput) SetSpotFleetRequestId(v string) *ModifySpotFleetRequestInput { - s.SpotFleetRequestId = &v - return s -} - -// SetTargetCapacity sets the TargetCapacity field's value. -func (s *ModifySpotFleetRequestInput) SetTargetCapacity(v int64) *ModifySpotFleetRequestInput { - s.TargetCapacity = &v - return s -} - -// Contains the output of ModifySpotFleetRequest. -type ModifySpotFleetRequestOutput struct { - _ struct{} `type:"structure"` - - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifySpotFleetRequestOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifySpotFleetRequestOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifySpotFleetRequestOutput) SetReturn(v bool) *ModifySpotFleetRequestOutput { - s.Return = &v - return s -} - -type ModifySubnetAttributeInput struct { - _ struct{} `type:"structure"` - - // Specify true to indicate that network interfaces created in the specified - // subnet should be assigned an IPv6 address. This includes a network interface - // that's created when launching an instance into the subnet (the instance therefore - // receives an IPv6 address). - // - // If you enable the IPv6 addressing feature for your subnet, your network interface - // or instance only receives an IPv6 address if it's created using version 2016-11-15 - // or later of the Amazon EC2 API. - AssignIpv6AddressOnCreation *AttributeBooleanValue `type:"structure"` - - // Specify true to indicate that ENIs attached to instances created in the specified - // subnet should be assigned a public IPv4 address. - MapPublicIpOnLaunch *AttributeBooleanValue `type:"structure"` - - // The ID of the subnet. - // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifySubnetAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifySubnetAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifySubnetAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifySubnetAttributeInput"} - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssignIpv6AddressOnCreation sets the AssignIpv6AddressOnCreation field's value. -func (s *ModifySubnetAttributeInput) SetAssignIpv6AddressOnCreation(v *AttributeBooleanValue) *ModifySubnetAttributeInput { - s.AssignIpv6AddressOnCreation = v - return s -} - -// SetMapPublicIpOnLaunch sets the MapPublicIpOnLaunch field's value. -func (s *ModifySubnetAttributeInput) SetMapPublicIpOnLaunch(v *AttributeBooleanValue) *ModifySubnetAttributeInput { - s.MapPublicIpOnLaunch = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *ModifySubnetAttributeInput) SetSubnetId(v string) *ModifySubnetAttributeInput { - s.SubnetId = &v - return s -} - -type ModifySubnetAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifySubnetAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifySubnetAttributeOutput) GoString() string { - return s.String() -} - -type ModifyTrafficMirrorFilterNetworkServicesInput struct { - _ struct{} `type:"structure"` - - // The network service, for example Amazon DNS, that you want to mirror. - AddNetworkServices []*string `locationName:"AddNetworkService" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The network service, for example Amazon DNS, that you no longer want to mirror. - RemoveNetworkServices []*string `locationName:"RemoveNetworkService" locationNameList:"item" type:"list"` - - // The ID of the Traffic Mirror filter. - // - // TrafficMirrorFilterId is a required field - TrafficMirrorFilterId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyTrafficMirrorFilterNetworkServicesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTrafficMirrorFilterNetworkServicesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyTrafficMirrorFilterNetworkServicesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyTrafficMirrorFilterNetworkServicesInput"} - if s.TrafficMirrorFilterId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAddNetworkServices sets the AddNetworkServices field's value. -func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetAddNetworkServices(v []*string) *ModifyTrafficMirrorFilterNetworkServicesInput { - s.AddNetworkServices = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetDryRun(v bool) *ModifyTrafficMirrorFilterNetworkServicesInput { - s.DryRun = &v - return s -} - -// SetRemoveNetworkServices sets the RemoveNetworkServices field's value. -func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetRemoveNetworkServices(v []*string) *ModifyTrafficMirrorFilterNetworkServicesInput { - s.RemoveNetworkServices = v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetTrafficMirrorFilterId(v string) *ModifyTrafficMirrorFilterNetworkServicesInput { - s.TrafficMirrorFilterId = &v - return s -} - -type ModifyTrafficMirrorFilterNetworkServicesOutput struct { - _ struct{} `type:"structure"` - - // The Traffic Mirror filter that the network service is associated with. - TrafficMirrorFilter *TrafficMirrorFilter `locationName:"trafficMirrorFilter" type:"structure"` -} - -// String returns the string representation -func (s ModifyTrafficMirrorFilterNetworkServicesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTrafficMirrorFilterNetworkServicesOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorFilter sets the TrafficMirrorFilter field's value. -func (s *ModifyTrafficMirrorFilterNetworkServicesOutput) SetTrafficMirrorFilter(v *TrafficMirrorFilter) *ModifyTrafficMirrorFilterNetworkServicesOutput { - s.TrafficMirrorFilter = v - return s -} - -type ModifyTrafficMirrorFilterRuleInput struct { - _ struct{} `type:"structure"` - - // The description to assign to the Traffic Mirror rule. - Description *string `type:"string"` - - // The destination CIDR block to assign to the Traffic Mirror rule. - DestinationCidrBlock *string `type:"string"` - - // The destination ports that are associated with the Traffic Mirror rule. - DestinationPortRange *TrafficMirrorPortRangeRequest `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The protocol, for example TCP, to assign to the Traffic Mirror rule. - Protocol *int64 `type:"integer"` - - // The properties that you want to remove from the Traffic Mirror filter rule. - // - // When you remove a property from a Traffic Mirror filter rule, the property - // is set to the default. - RemoveFields []*string `locationName:"RemoveField" type:"list"` - - // The action to assign to the rule. - RuleAction *string `type:"string" enum:"TrafficMirrorRuleAction"` - - // The number of the Traffic Mirror rule. This number must be unique for each - // Traffic Mirror rule in a given direction. The rules are processed in ascending - // order by rule number. - RuleNumber *int64 `type:"integer"` - - // The source CIDR block to assign to the Traffic Mirror rule. - SourceCidrBlock *string `type:"string"` - - // The port range to assign to the Traffic Mirror rule. - SourcePortRange *TrafficMirrorPortRangeRequest `type:"structure"` - - // The type of traffic (ingress | egress) to assign to the rule. - TrafficDirection *string `type:"string" enum:"TrafficDirection"` - - // The ID of the Traffic Mirror rule. - // - // TrafficMirrorFilterRuleId is a required field - TrafficMirrorFilterRuleId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyTrafficMirrorFilterRuleInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTrafficMirrorFilterRuleInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyTrafficMirrorFilterRuleInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyTrafficMirrorFilterRuleInput"} - if s.TrafficMirrorFilterRuleId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterRuleId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetDescription(v string) *ModifyTrafficMirrorFilterRuleInput { - s.Description = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetDestinationCidrBlock(v string) *ModifyTrafficMirrorFilterRuleInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationPortRange sets the DestinationPortRange field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetDestinationPortRange(v *TrafficMirrorPortRangeRequest) *ModifyTrafficMirrorFilterRuleInput { - s.DestinationPortRange = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetDryRun(v bool) *ModifyTrafficMirrorFilterRuleInput { - s.DryRun = &v - return s -} - -// SetProtocol sets the Protocol field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetProtocol(v int64) *ModifyTrafficMirrorFilterRuleInput { - s.Protocol = &v - return s -} - -// SetRemoveFields sets the RemoveFields field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetRemoveFields(v []*string) *ModifyTrafficMirrorFilterRuleInput { - s.RemoveFields = v - return s -} - -// SetRuleAction sets the RuleAction field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetRuleAction(v string) *ModifyTrafficMirrorFilterRuleInput { - s.RuleAction = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetRuleNumber(v int64) *ModifyTrafficMirrorFilterRuleInput { - s.RuleNumber = &v - return s -} - -// SetSourceCidrBlock sets the SourceCidrBlock field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetSourceCidrBlock(v string) *ModifyTrafficMirrorFilterRuleInput { - s.SourceCidrBlock = &v - return s -} - -// SetSourcePortRange sets the SourcePortRange field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetSourcePortRange(v *TrafficMirrorPortRangeRequest) *ModifyTrafficMirrorFilterRuleInput { - s.SourcePortRange = v - return s -} - -// SetTrafficDirection sets the TrafficDirection field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetTrafficDirection(v string) *ModifyTrafficMirrorFilterRuleInput { - s.TrafficDirection = &v - return s -} - -// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. -func (s *ModifyTrafficMirrorFilterRuleInput) SetTrafficMirrorFilterRuleId(v string) *ModifyTrafficMirrorFilterRuleInput { - s.TrafficMirrorFilterRuleId = &v - return s -} - -type ModifyTrafficMirrorFilterRuleOutput struct { - _ struct{} `type:"structure"` - - // Modifies a Traffic Mirror rule. - TrafficMirrorFilterRule *TrafficMirrorFilterRule `locationName:"trafficMirrorFilterRule" type:"structure"` -} - -// String returns the string representation -func (s ModifyTrafficMirrorFilterRuleOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTrafficMirrorFilterRuleOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorFilterRule sets the TrafficMirrorFilterRule field's value. -func (s *ModifyTrafficMirrorFilterRuleOutput) SetTrafficMirrorFilterRule(v *TrafficMirrorFilterRule) *ModifyTrafficMirrorFilterRuleOutput { - s.TrafficMirrorFilterRule = v - return s -} - -type ModifyTrafficMirrorSessionInput struct { - _ struct{} `type:"structure"` - - // The description to assign to the Traffic Mirror session. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The number of bytes in each packet to mirror. These are bytes after the VXLAN - // header. To mirror a subset, set this to the length (in bytes) to mirror. - // For example, if you set this value to 100, then the first 100 bytes that - // meet the filter criteria are copied to the target. Do not specify this parameter - // when you want to mirror the entire packet. - PacketLength *int64 `type:"integer"` - - // The properties that you want to remove from the Traffic Mirror session. - // - // When you remove a property from a Traffic Mirror session, the property is - // set to the default. - RemoveFields []*string `locationName:"RemoveField" type:"list"` - - // The session number determines the order in which sessions are evaluated when - // an interface is used by multiple sessions. The first session with a matching - // filter is the one that mirrors the packets. - // - // Valid values are 1-32766. - SessionNumber *int64 `type:"integer"` - - // The ID of the Traffic Mirror filter. - TrafficMirrorFilterId *string `type:"string"` - - // The ID of the Traffic Mirror session. - // - // TrafficMirrorSessionId is a required field - TrafficMirrorSessionId *string `type:"string" required:"true"` - - // The Traffic Mirror target. The target must be in the same VPC as the source, - // or have a VPC peering connection with the source. - TrafficMirrorTargetId *string `type:"string"` - - // The virtual network ID of the Traffic Mirror session. - VirtualNetworkId *int64 `type:"integer"` -} - -// String returns the string representation -func (s ModifyTrafficMirrorSessionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTrafficMirrorSessionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyTrafficMirrorSessionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyTrafficMirrorSessionInput"} - if s.TrafficMirrorSessionId == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficMirrorSessionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *ModifyTrafficMirrorSessionInput) SetDescription(v string) *ModifyTrafficMirrorSessionInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyTrafficMirrorSessionInput) SetDryRun(v bool) *ModifyTrafficMirrorSessionInput { - s.DryRun = &v - return s -} - -// SetPacketLength sets the PacketLength field's value. -func (s *ModifyTrafficMirrorSessionInput) SetPacketLength(v int64) *ModifyTrafficMirrorSessionInput { - s.PacketLength = &v - return s -} - -// SetRemoveFields sets the RemoveFields field's value. -func (s *ModifyTrafficMirrorSessionInput) SetRemoveFields(v []*string) *ModifyTrafficMirrorSessionInput { - s.RemoveFields = v - return s -} - -// SetSessionNumber sets the SessionNumber field's value. -func (s *ModifyTrafficMirrorSessionInput) SetSessionNumber(v int64) *ModifyTrafficMirrorSessionInput { - s.SessionNumber = &v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *ModifyTrafficMirrorSessionInput) SetTrafficMirrorFilterId(v string) *ModifyTrafficMirrorSessionInput { - s.TrafficMirrorFilterId = &v - return s -} - -// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. -func (s *ModifyTrafficMirrorSessionInput) SetTrafficMirrorSessionId(v string) *ModifyTrafficMirrorSessionInput { - s.TrafficMirrorSessionId = &v - return s -} - -// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. -func (s *ModifyTrafficMirrorSessionInput) SetTrafficMirrorTargetId(v string) *ModifyTrafficMirrorSessionInput { - s.TrafficMirrorTargetId = &v - return s -} - -// SetVirtualNetworkId sets the VirtualNetworkId field's value. -func (s *ModifyTrafficMirrorSessionInput) SetVirtualNetworkId(v int64) *ModifyTrafficMirrorSessionInput { - s.VirtualNetworkId = &v - return s -} - -type ModifyTrafficMirrorSessionOutput struct { - _ struct{} `type:"structure"` - - // Information about the Traffic Mirror session. - TrafficMirrorSession *TrafficMirrorSession `locationName:"trafficMirrorSession" type:"structure"` -} - -// String returns the string representation -func (s ModifyTrafficMirrorSessionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTrafficMirrorSessionOutput) GoString() string { - return s.String() -} - -// SetTrafficMirrorSession sets the TrafficMirrorSession field's value. -func (s *ModifyTrafficMirrorSessionOutput) SetTrafficMirrorSession(v *TrafficMirrorSession) *ModifyTrafficMirrorSessionOutput { - s.TrafficMirrorSession = v - return s -} - -type ModifyTransitGatewayVpcAttachmentInput struct { - _ struct{} `type:"structure"` - - // The IDs of one or more subnets to add. You can specify at most one subnet - // per Availability Zone. - AddSubnetIds []*string `locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The new VPC attachment options. - Options *ModifyTransitGatewayVpcAttachmentRequestOptions `type:"structure"` - - // The IDs of one or more subnets to remove. - RemoveSubnetIds []*string `locationNameList:"item" type:"list"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyTransitGatewayVpcAttachmentInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTransitGatewayVpcAttachmentInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyTransitGatewayVpcAttachmentInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyTransitGatewayVpcAttachmentInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAddSubnetIds sets the AddSubnetIds field's value. -func (s *ModifyTransitGatewayVpcAttachmentInput) SetAddSubnetIds(v []*string) *ModifyTransitGatewayVpcAttachmentInput { - s.AddSubnetIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *ModifyTransitGatewayVpcAttachmentInput { - s.DryRun = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *ModifyTransitGatewayVpcAttachmentInput) SetOptions(v *ModifyTransitGatewayVpcAttachmentRequestOptions) *ModifyTransitGatewayVpcAttachmentInput { - s.Options = v - return s -} - -// SetRemoveSubnetIds sets the RemoveSubnetIds field's value. -func (s *ModifyTransitGatewayVpcAttachmentInput) SetRemoveSubnetIds(v []*string) *ModifyTransitGatewayVpcAttachmentInput { - s.RemoveSubnetIds = v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *ModifyTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *ModifyTransitGatewayVpcAttachmentInput { - s.TransitGatewayAttachmentId = &v - return s -} - -type ModifyTransitGatewayVpcAttachmentOutput struct { - _ struct{} `type:"structure"` - - // Information about the modified attachment. - TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` -} - -// String returns the string representation -func (s ModifyTransitGatewayVpcAttachmentOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTransitGatewayVpcAttachmentOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. -func (s *ModifyTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *ModifyTransitGatewayVpcAttachmentOutput { - s.TransitGatewayVpcAttachment = v - return s -} - -// Describes the options for a VPC attachment. -type ModifyTransitGatewayVpcAttachmentRequestOptions struct { - _ struct{} `type:"structure"` - - // Enable or disable DNS support. The default is enable. - DnsSupport *string `type:"string" enum:"DnsSupportValue"` - - // Enable or disable IPv6 support. The default is enable. - Ipv6Support *string `type:"string" enum:"Ipv6SupportValue"` -} - -// String returns the string representation -func (s ModifyTransitGatewayVpcAttachmentRequestOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyTransitGatewayVpcAttachmentRequestOptions) GoString() string { - return s.String() -} - -// SetDnsSupport sets the DnsSupport field's value. -func (s *ModifyTransitGatewayVpcAttachmentRequestOptions) SetDnsSupport(v string) *ModifyTransitGatewayVpcAttachmentRequestOptions { - s.DnsSupport = &v - return s -} - -// SetIpv6Support sets the Ipv6Support field's value. -func (s *ModifyTransitGatewayVpcAttachmentRequestOptions) SetIpv6Support(v string) *ModifyTransitGatewayVpcAttachmentRequestOptions { - s.Ipv6Support = &v - return s -} - -type ModifyVolumeAttributeInput struct { - _ struct{} `type:"structure"` - - // Indicates whether the volume should be auto-enabled for I/O operations. - AutoEnableIO *AttributeBooleanValue `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVolumeAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVolumeAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVolumeAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVolumeAttributeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAutoEnableIO sets the AutoEnableIO field's value. -func (s *ModifyVolumeAttributeInput) SetAutoEnableIO(v *AttributeBooleanValue) *ModifyVolumeAttributeInput { - s.AutoEnableIO = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVolumeAttributeInput) SetDryRun(v bool) *ModifyVolumeAttributeInput { - s.DryRun = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *ModifyVolumeAttributeInput) SetVolumeId(v string) *ModifyVolumeAttributeInput { - s.VolumeId = &v - return s -} - -type ModifyVolumeAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyVolumeAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVolumeAttributeOutput) GoString() string { - return s.String() -} - -type ModifyVolumeInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The target IOPS rate of the volume. - // - // This is only valid for Provisioned IOPS SSD (io1) volumes. For more information, - // see Provisioned IOPS SSD (io1) Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_piops). - // - // Default: If no IOPS value is specified, the existing value is retained. - Iops *int64 `type:"integer"` - - // The target size of the volume, in GiB. The target volume size must be greater - // than or equal to than the existing size of the volume. For information about - // available EBS volume sizes, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html). - // - // Default: If no size is specified, the existing size is retained. - Size *int64 `type:"integer"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` - - // The target EBS volume type of the volume. - // - // Default: If no type is specified, the existing type is retained. - VolumeType *string `type:"string" enum:"VolumeType"` -} - -// String returns the string representation -func (s ModifyVolumeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVolumeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVolumeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVolumeInput) SetDryRun(v bool) *ModifyVolumeInput { - s.DryRun = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *ModifyVolumeInput) SetIops(v int64) *ModifyVolumeInput { - s.Iops = &v - return s -} - -// SetSize sets the Size field's value. -func (s *ModifyVolumeInput) SetSize(v int64) *ModifyVolumeInput { - s.Size = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *ModifyVolumeInput) SetVolumeId(v string) *ModifyVolumeInput { - s.VolumeId = &v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *ModifyVolumeInput) SetVolumeType(v string) *ModifyVolumeInput { - s.VolumeType = &v - return s -} - -type ModifyVolumeOutput struct { - _ struct{} `type:"structure"` - - // Information about the volume modification. - VolumeModification *VolumeModification `locationName:"volumeModification" type:"structure"` -} - -// String returns the string representation -func (s ModifyVolumeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVolumeOutput) GoString() string { - return s.String() -} - -// SetVolumeModification sets the VolumeModification field's value. -func (s *ModifyVolumeOutput) SetVolumeModification(v *VolumeModification) *ModifyVolumeOutput { - s.VolumeModification = v - return s -} - -type ModifyVpcAttributeInput struct { - _ struct{} `type:"structure"` - - // Indicates whether the instances launched in the VPC get DNS hostnames. If - // enabled, instances in the VPC get DNS hostnames; otherwise, they do not. - // - // You cannot modify the DNS resolution and DNS hostnames attributes in the - // same request. Use separate requests for each attribute. You can only enable - // DNS hostnames if you've enabled DNS support. - EnableDnsHostnames *AttributeBooleanValue `type:"structure"` - - // Indicates whether the DNS resolution is supported for the VPC. If enabled, - // queries to the Amazon provided DNS server at the 169.254.169.253 IP address, - // or the reserved IP address at the base of the VPC network range "plus two" - // succeed. If disabled, the Amazon provided DNS service in the VPC that resolves - // public DNS hostnames to IP addresses is not enabled. - // - // You cannot modify the DNS resolution and DNS hostnames attributes in the - // same request. Use separate requests for each attribute. - EnableDnsSupport *AttributeBooleanValue `type:"structure"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpcAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcAttributeInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetEnableDnsHostnames sets the EnableDnsHostnames field's value. -func (s *ModifyVpcAttributeInput) SetEnableDnsHostnames(v *AttributeBooleanValue) *ModifyVpcAttributeInput { - s.EnableDnsHostnames = v - return s -} - -// SetEnableDnsSupport sets the EnableDnsSupport field's value. -func (s *ModifyVpcAttributeInput) SetEnableDnsSupport(v *AttributeBooleanValue) *ModifyVpcAttributeInput { - s.EnableDnsSupport = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *ModifyVpcAttributeInput) SetVpcId(v string) *ModifyVpcAttributeInput { - s.VpcId = &v - return s -} - -type ModifyVpcAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyVpcAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcAttributeOutput) GoString() string { - return s.String() -} - -type ModifyVpcEndpointConnectionNotificationInput struct { - _ struct{} `type:"structure"` - - // One or more events for the endpoint. Valid values are Accept, Connect, Delete, - // and Reject. - ConnectionEvents []*string `locationNameList:"item" type:"list"` - - // The ARN for the SNS topic for the notification. - ConnectionNotificationArn *string `type:"string"` - - // The ID of the notification. - // - // ConnectionNotificationId is a required field - ConnectionNotificationId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s ModifyVpcEndpointConnectionNotificationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointConnectionNotificationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcEndpointConnectionNotificationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointConnectionNotificationInput"} - if s.ConnectionNotificationId == nil { - invalidParams.Add(request.NewErrParamRequired("ConnectionNotificationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetConnectionEvents sets the ConnectionEvents field's value. -func (s *ModifyVpcEndpointConnectionNotificationInput) SetConnectionEvents(v []*string) *ModifyVpcEndpointConnectionNotificationInput { - s.ConnectionEvents = v - return s -} - -// SetConnectionNotificationArn sets the ConnectionNotificationArn field's value. -func (s *ModifyVpcEndpointConnectionNotificationInput) SetConnectionNotificationArn(v string) *ModifyVpcEndpointConnectionNotificationInput { - s.ConnectionNotificationArn = &v - return s -} - -// SetConnectionNotificationId sets the ConnectionNotificationId field's value. -func (s *ModifyVpcEndpointConnectionNotificationInput) SetConnectionNotificationId(v string) *ModifyVpcEndpointConnectionNotificationInput { - s.ConnectionNotificationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcEndpointConnectionNotificationInput) SetDryRun(v bool) *ModifyVpcEndpointConnectionNotificationInput { - s.DryRun = &v - return s -} - -type ModifyVpcEndpointConnectionNotificationOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - ReturnValue *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyVpcEndpointConnectionNotificationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointConnectionNotificationOutput) GoString() string { - return s.String() -} - -// SetReturnValue sets the ReturnValue field's value. -func (s *ModifyVpcEndpointConnectionNotificationOutput) SetReturnValue(v bool) *ModifyVpcEndpointConnectionNotificationOutput { - s.ReturnValue = &v - return s -} - -// Contains the parameters for ModifyVpcEndpoint. -type ModifyVpcEndpointInput struct { - _ struct{} `type:"structure"` - - // (Gateway endpoint) One or more route tables IDs to associate with the endpoint. - AddRouteTableIds []*string `locationName:"AddRouteTableId" locationNameList:"item" type:"list"` - - // (Interface endpoint) One or more security group IDs to associate with the - // network interface. - AddSecurityGroupIds []*string `locationName:"AddSecurityGroupId" locationNameList:"item" type:"list"` - - // (Interface endpoint) One or more subnet IDs in which to serve the endpoint. - AddSubnetIds []*string `locationName:"AddSubnetId" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // A policy to attach to the endpoint that controls access to the service. The - // policy must be in valid JSON format. - PolicyDocument *string `type:"string"` - - // (Interface endpoint) Indicate whether a private hosted zone is associated - // with the VPC. - PrivateDnsEnabled *bool `type:"boolean"` - - // (Gateway endpoint) One or more route table IDs to disassociate from the endpoint. - RemoveRouteTableIds []*string `locationName:"RemoveRouteTableId" locationNameList:"item" type:"list"` - - // (Interface endpoint) One or more security group IDs to disassociate from - // the network interface. - RemoveSecurityGroupIds []*string `locationName:"RemoveSecurityGroupId" locationNameList:"item" type:"list"` - - // (Interface endpoint) One or more subnets IDs in which to remove the endpoint. - RemoveSubnetIds []*string `locationName:"RemoveSubnetId" locationNameList:"item" type:"list"` - - // (Gateway endpoint) Specify true to reset the policy document to the default - // policy. The default policy allows full access to the service. - ResetPolicy *bool `type:"boolean"` - - // The ID of the endpoint. - // - // VpcEndpointId is a required field - VpcEndpointId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpcEndpointInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointInput"} - if s.VpcEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAddRouteTableIds sets the AddRouteTableIds field's value. -func (s *ModifyVpcEndpointInput) SetAddRouteTableIds(v []*string) *ModifyVpcEndpointInput { - s.AddRouteTableIds = v - return s -} - -// SetAddSecurityGroupIds sets the AddSecurityGroupIds field's value. -func (s *ModifyVpcEndpointInput) SetAddSecurityGroupIds(v []*string) *ModifyVpcEndpointInput { - s.AddSecurityGroupIds = v - return s -} - -// SetAddSubnetIds sets the AddSubnetIds field's value. -func (s *ModifyVpcEndpointInput) SetAddSubnetIds(v []*string) *ModifyVpcEndpointInput { - s.AddSubnetIds = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcEndpointInput) SetDryRun(v bool) *ModifyVpcEndpointInput { - s.DryRun = &v - return s -} - -// SetPolicyDocument sets the PolicyDocument field's value. -func (s *ModifyVpcEndpointInput) SetPolicyDocument(v string) *ModifyVpcEndpointInput { - s.PolicyDocument = &v - return s -} - -// SetPrivateDnsEnabled sets the PrivateDnsEnabled field's value. -func (s *ModifyVpcEndpointInput) SetPrivateDnsEnabled(v bool) *ModifyVpcEndpointInput { - s.PrivateDnsEnabled = &v - return s -} - -// SetRemoveRouteTableIds sets the RemoveRouteTableIds field's value. -func (s *ModifyVpcEndpointInput) SetRemoveRouteTableIds(v []*string) *ModifyVpcEndpointInput { - s.RemoveRouteTableIds = v - return s -} - -// SetRemoveSecurityGroupIds sets the RemoveSecurityGroupIds field's value. -func (s *ModifyVpcEndpointInput) SetRemoveSecurityGroupIds(v []*string) *ModifyVpcEndpointInput { - s.RemoveSecurityGroupIds = v - return s -} - -// SetRemoveSubnetIds sets the RemoveSubnetIds field's value. -func (s *ModifyVpcEndpointInput) SetRemoveSubnetIds(v []*string) *ModifyVpcEndpointInput { - s.RemoveSubnetIds = v - return s -} - -// SetResetPolicy sets the ResetPolicy field's value. -func (s *ModifyVpcEndpointInput) SetResetPolicy(v bool) *ModifyVpcEndpointInput { - s.ResetPolicy = &v - return s -} - -// SetVpcEndpointId sets the VpcEndpointId field's value. -func (s *ModifyVpcEndpointInput) SetVpcEndpointId(v string) *ModifyVpcEndpointInput { - s.VpcEndpointId = &v - return s -} - -type ModifyVpcEndpointOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyVpcEndpointOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyVpcEndpointOutput) SetReturn(v bool) *ModifyVpcEndpointOutput { - s.Return = &v - return s -} - -type ModifyVpcEndpointServiceConfigurationInput struct { - _ struct{} `type:"structure"` - - // Indicate whether requests to create an endpoint to your service must be accepted. - AcceptanceRequired *bool `type:"boolean"` - - // The Amazon Resource Names (ARNs) of Network Load Balancers to add to your - // service configuration. - AddNetworkLoadBalancerArns []*string `locationName:"AddNetworkLoadBalancerArn" locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The Amazon Resource Names (ARNs) of Network Load Balancers to remove from - // your service configuration. - RemoveNetworkLoadBalancerArns []*string `locationName:"RemoveNetworkLoadBalancerArn" locationNameList:"item" type:"list"` - - // The ID of the service. - // - // ServiceId is a required field - ServiceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpcEndpointServiceConfigurationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointServiceConfigurationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcEndpointServiceConfigurationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointServiceConfigurationInput"} - if s.ServiceId == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAcceptanceRequired sets the AcceptanceRequired field's value. -func (s *ModifyVpcEndpointServiceConfigurationInput) SetAcceptanceRequired(v bool) *ModifyVpcEndpointServiceConfigurationInput { - s.AcceptanceRequired = &v - return s -} - -// SetAddNetworkLoadBalancerArns sets the AddNetworkLoadBalancerArns field's value. -func (s *ModifyVpcEndpointServiceConfigurationInput) SetAddNetworkLoadBalancerArns(v []*string) *ModifyVpcEndpointServiceConfigurationInput { - s.AddNetworkLoadBalancerArns = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcEndpointServiceConfigurationInput) SetDryRun(v bool) *ModifyVpcEndpointServiceConfigurationInput { - s.DryRun = &v - return s -} - -// SetRemoveNetworkLoadBalancerArns sets the RemoveNetworkLoadBalancerArns field's value. -func (s *ModifyVpcEndpointServiceConfigurationInput) SetRemoveNetworkLoadBalancerArns(v []*string) *ModifyVpcEndpointServiceConfigurationInput { - s.RemoveNetworkLoadBalancerArns = v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *ModifyVpcEndpointServiceConfigurationInput) SetServiceId(v string) *ModifyVpcEndpointServiceConfigurationInput { - s.ServiceId = &v - return s -} - -type ModifyVpcEndpointServiceConfigurationOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyVpcEndpointServiceConfigurationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointServiceConfigurationOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ModifyVpcEndpointServiceConfigurationOutput) SetReturn(v bool) *ModifyVpcEndpointServiceConfigurationOutput { - s.Return = &v - return s -} - -type ModifyVpcEndpointServicePermissionsInput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Names (ARN) of one or more principals. Permissions are - // granted to the principals in this list. To grant permissions to all principals, - // specify an asterisk (*). - AddAllowedPrincipals []*string `locationNameList:"item" type:"list"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The Amazon Resource Names (ARN) of one or more principals. Permissions are - // revoked for principals in this list. - RemoveAllowedPrincipals []*string `locationNameList:"item" type:"list"` - - // The ID of the service. - // - // ServiceId is a required field - ServiceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpcEndpointServicePermissionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointServicePermissionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcEndpointServicePermissionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointServicePermissionsInput"} - if s.ServiceId == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAddAllowedPrincipals sets the AddAllowedPrincipals field's value. -func (s *ModifyVpcEndpointServicePermissionsInput) SetAddAllowedPrincipals(v []*string) *ModifyVpcEndpointServicePermissionsInput { - s.AddAllowedPrincipals = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcEndpointServicePermissionsInput) SetDryRun(v bool) *ModifyVpcEndpointServicePermissionsInput { - s.DryRun = &v - return s -} - -// SetRemoveAllowedPrincipals sets the RemoveAllowedPrincipals field's value. -func (s *ModifyVpcEndpointServicePermissionsInput) SetRemoveAllowedPrincipals(v []*string) *ModifyVpcEndpointServicePermissionsInput { - s.RemoveAllowedPrincipals = v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *ModifyVpcEndpointServicePermissionsInput) SetServiceId(v string) *ModifyVpcEndpointServicePermissionsInput { - s.ServiceId = &v - return s -} - -type ModifyVpcEndpointServicePermissionsOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - ReturnValue *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyVpcEndpointServicePermissionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcEndpointServicePermissionsOutput) GoString() string { - return s.String() -} - -// SetReturnValue sets the ReturnValue field's value. -func (s *ModifyVpcEndpointServicePermissionsOutput) SetReturnValue(v bool) *ModifyVpcEndpointServicePermissionsOutput { - s.ReturnValue = &v - return s -} - -type ModifyVpcPeeringConnectionOptionsInput struct { - _ struct{} `type:"structure"` - - // The VPC peering connection options for the accepter VPC. - AccepterPeeringConnectionOptions *PeeringConnectionOptionsRequest `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The VPC peering connection options for the requester VPC. - RequesterPeeringConnectionOptions *PeeringConnectionOptionsRequest `type:"structure"` - - // The ID of the VPC peering connection. - // - // VpcPeeringConnectionId is a required field - VpcPeeringConnectionId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpcPeeringConnectionOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcPeeringConnectionOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcPeeringConnectionOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcPeeringConnectionOptionsInput"} - if s.VpcPeeringConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAccepterPeeringConnectionOptions sets the AccepterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetAccepterPeeringConnectionOptions(v *PeeringConnectionOptionsRequest) *ModifyVpcPeeringConnectionOptionsInput { - s.AccepterPeeringConnectionOptions = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetDryRun(v bool) *ModifyVpcPeeringConnectionOptionsInput { - s.DryRun = &v - return s -} - -// SetRequesterPeeringConnectionOptions sets the RequesterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetRequesterPeeringConnectionOptions(v *PeeringConnectionOptionsRequest) *ModifyVpcPeeringConnectionOptionsInput { - s.RequesterPeeringConnectionOptions = v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetVpcPeeringConnectionId(v string) *ModifyVpcPeeringConnectionOptionsInput { - s.VpcPeeringConnectionId = &v - return s -} - -type ModifyVpcPeeringConnectionOptionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC peering connection options for the accepter VPC. - AccepterPeeringConnectionOptions *PeeringConnectionOptions `locationName:"accepterPeeringConnectionOptions" type:"structure"` - - // Information about the VPC peering connection options for the requester VPC. - RequesterPeeringConnectionOptions *PeeringConnectionOptions `locationName:"requesterPeeringConnectionOptions" type:"structure"` -} - -// String returns the string representation -func (s ModifyVpcPeeringConnectionOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcPeeringConnectionOptionsOutput) GoString() string { - return s.String() -} - -// SetAccepterPeeringConnectionOptions sets the AccepterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsOutput) SetAccepterPeeringConnectionOptions(v *PeeringConnectionOptions) *ModifyVpcPeeringConnectionOptionsOutput { - s.AccepterPeeringConnectionOptions = v - return s -} - -// SetRequesterPeeringConnectionOptions sets the RequesterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsOutput) SetRequesterPeeringConnectionOptions(v *PeeringConnectionOptions) *ModifyVpcPeeringConnectionOptionsOutput { - s.RequesterPeeringConnectionOptions = v - return s -} - -type ModifyVpcTenancyInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The instance tenancy attribute for the VPC. - // - // InstanceTenancy is a required field - InstanceTenancy *string `type:"string" required:"true" enum:"VpcTenancy"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpcTenancyInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcTenancyInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcTenancyInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcTenancyInput"} - if s.InstanceTenancy == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceTenancy")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcTenancyInput) SetDryRun(v bool) *ModifyVpcTenancyInput { - s.DryRun = &v - return s -} - -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *ModifyVpcTenancyInput) SetInstanceTenancy(v string) *ModifyVpcTenancyInput { - s.InstanceTenancy = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *ModifyVpcTenancyInput) SetVpcId(v string) *ModifyVpcTenancyInput { - s.VpcId = &v - return s -} - -type ModifyVpcTenancyOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, returns an error. - ReturnValue *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ModifyVpcTenancyOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpcTenancyOutput) GoString() string { - return s.String() -} - -// SetReturnValue sets the ReturnValue field's value. -func (s *ModifyVpcTenancyOutput) SetReturnValue(v bool) *ModifyVpcTenancyOutput { - s.ReturnValue = &v - return s -} - -type ModifyVpnConnectionInput struct { - _ struct{} `type:"structure"` - - // The ID of the customer gateway at your end of the VPN connection. - CustomerGatewayId *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the transit gateway. - TransitGatewayId *string `type:"string"` - - // The ID of the VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` - - // The ID of the virtual private gateway at the AWS side of the VPN connection. - VpnGatewayId *string `type:"string"` -} - -// String returns the string representation -func (s ModifyVpnConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnConnectionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpnConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpnConnectionInput"} - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *ModifyVpnConnectionInput) SetCustomerGatewayId(v string) *ModifyVpnConnectionInput { - s.CustomerGatewayId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpnConnectionInput) SetDryRun(v bool) *ModifyVpnConnectionInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *ModifyVpnConnectionInput) SetTransitGatewayId(v string) *ModifyVpnConnectionInput { - s.TransitGatewayId = &v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *ModifyVpnConnectionInput) SetVpnConnectionId(v string) *ModifyVpnConnectionInput { - s.VpnConnectionId = &v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *ModifyVpnConnectionInput) SetVpnGatewayId(v string) *ModifyVpnConnectionInput { - s.VpnGatewayId = &v - return s -} - -type ModifyVpnConnectionOutput struct { - _ struct{} `type:"structure"` - - // Describes a VPN connection. - VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` -} - -// String returns the string representation -func (s ModifyVpnConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnConnectionOutput) GoString() string { - return s.String() -} - -// SetVpnConnection sets the VpnConnection field's value. -func (s *ModifyVpnConnectionOutput) SetVpnConnection(v *VpnConnection) *ModifyVpnConnectionOutput { - s.VpnConnection = v - return s -} - -type ModifyVpnTunnelCertificateInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the AWS Site-to-Site VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` - - // The external IP address of the VPN tunnel. - // - // VpnTunnelOutsideIpAddress is a required field - VpnTunnelOutsideIpAddress *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpnTunnelCertificateInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnTunnelCertificateInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpnTunnelCertificateInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpnTunnelCertificateInput"} - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } - if s.VpnTunnelOutsideIpAddress == nil { - invalidParams.Add(request.NewErrParamRequired("VpnTunnelOutsideIpAddress")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpnTunnelCertificateInput) SetDryRun(v bool) *ModifyVpnTunnelCertificateInput { - s.DryRun = &v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *ModifyVpnTunnelCertificateInput) SetVpnConnectionId(v string) *ModifyVpnTunnelCertificateInput { - s.VpnConnectionId = &v - return s -} - -// SetVpnTunnelOutsideIpAddress sets the VpnTunnelOutsideIpAddress field's value. -func (s *ModifyVpnTunnelCertificateInput) SetVpnTunnelOutsideIpAddress(v string) *ModifyVpnTunnelCertificateInput { - s.VpnTunnelOutsideIpAddress = &v - return s -} - -type ModifyVpnTunnelCertificateOutput struct { - _ struct{} `type:"structure"` - - // Describes a VPN connection. - VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` -} - -// String returns the string representation -func (s ModifyVpnTunnelCertificateOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnTunnelCertificateOutput) GoString() string { - return s.String() -} - -// SetVpnConnection sets the VpnConnection field's value. -func (s *ModifyVpnTunnelCertificateOutput) SetVpnConnection(v *VpnConnection) *ModifyVpnTunnelCertificateOutput { - s.VpnConnection = v - return s -} - -type ModifyVpnTunnelOptionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The tunnel options to modify. - // - // TunnelOptions is a required field - TunnelOptions *ModifyVpnTunnelOptionsSpecification `type:"structure" required:"true"` - - // The ID of the AWS Site-to-Site VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` - - // The external IP address of the VPN tunnel. - // - // VpnTunnelOutsideIpAddress is a required field - VpnTunnelOutsideIpAddress *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ModifyVpnTunnelOptionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnTunnelOptionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpnTunnelOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpnTunnelOptionsInput"} - if s.TunnelOptions == nil { - invalidParams.Add(request.NewErrParamRequired("TunnelOptions")) - } - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } - if s.VpnTunnelOutsideIpAddress == nil { - invalidParams.Add(request.NewErrParamRequired("VpnTunnelOutsideIpAddress")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpnTunnelOptionsInput) SetDryRun(v bool) *ModifyVpnTunnelOptionsInput { - s.DryRun = &v - return s -} - -// SetTunnelOptions sets the TunnelOptions field's value. -func (s *ModifyVpnTunnelOptionsInput) SetTunnelOptions(v *ModifyVpnTunnelOptionsSpecification) *ModifyVpnTunnelOptionsInput { - s.TunnelOptions = v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *ModifyVpnTunnelOptionsInput) SetVpnConnectionId(v string) *ModifyVpnTunnelOptionsInput { - s.VpnConnectionId = &v - return s -} - -// SetVpnTunnelOutsideIpAddress sets the VpnTunnelOutsideIpAddress field's value. -func (s *ModifyVpnTunnelOptionsInput) SetVpnTunnelOutsideIpAddress(v string) *ModifyVpnTunnelOptionsInput { - s.VpnTunnelOutsideIpAddress = &v - return s -} - -type ModifyVpnTunnelOptionsOutput struct { - _ struct{} `type:"structure"` - - // Describes a VPN connection. - VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` -} - -// String returns the string representation -func (s ModifyVpnTunnelOptionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnTunnelOptionsOutput) GoString() string { - return s.String() -} - -// SetVpnConnection sets the VpnConnection field's value. -func (s *ModifyVpnTunnelOptionsOutput) SetVpnConnection(v *VpnConnection) *ModifyVpnTunnelOptionsOutput { - s.VpnConnection = v - return s -} - -// The AWS Site-to-Site VPN tunnel options to modify. -type ModifyVpnTunnelOptionsSpecification struct { - _ struct{} `type:"structure"` - - // The number of seconds after which a DPD timeout occurs. - // - // Constraints: A value between 0 and 30. - // - // Default: 30 - DPDTimeoutSeconds *int64 `type:"integer"` - - // The IKE versions that are permitted for the VPN tunnel. - // - // Valid values: ikev1 | ikev2 - IKEVersions []*IKEVersionsRequestListValue `locationName:"IKEVersion" locationNameList:"item" type:"list"` - - // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel - // for phase 1 IKE negotiations. - // - // Valid values: 2 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 - Phase1DHGroupNumbers []*Phase1DHGroupNumbersRequestListValue `locationName:"Phase1DHGroupNumber" locationNameList:"item" type:"list"` - - // One or more encryption algorithms that are permitted for the VPN tunnel for - // phase 1 IKE negotiations. - // - // Valid values: AES128 | AES256 - Phase1EncryptionAlgorithms []*Phase1EncryptionAlgorithmsRequestListValue `locationName:"Phase1EncryptionAlgorithm" locationNameList:"item" type:"list"` - - // One or more integrity algorithms that are permitted for the VPN tunnel for - // phase 1 IKE negotiations. - // - // Valid values: SHA1 | SHA2-256 - Phase1IntegrityAlgorithms []*Phase1IntegrityAlgorithmsRequestListValue `locationName:"Phase1IntegrityAlgorithm" locationNameList:"item" type:"list"` - - // The lifetime for phase 1 of the IKE negotiation, in seconds. - // - // Constraints: A value between 900 and 28,800. - // - // Default: 28800 - Phase1LifetimeSeconds *int64 `type:"integer"` - - // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel - // for phase 2 IKE negotiations. - // - // Valid values: 2 | 5 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 - Phase2DHGroupNumbers []*Phase2DHGroupNumbersRequestListValue `locationName:"Phase2DHGroupNumber" locationNameList:"item" type:"list"` - - // One or more encryption algorithms that are permitted for the VPN tunnel for - // phase 2 IKE negotiations. - // - // Valid values: AES128 | AES256 - Phase2EncryptionAlgorithms []*Phase2EncryptionAlgorithmsRequestListValue `locationName:"Phase2EncryptionAlgorithm" locationNameList:"item" type:"list"` - - // One or more integrity algorithms that are permitted for the VPN tunnel for - // phase 2 IKE negotiations. - // - // Valid values: SHA1 | SHA2-256 - Phase2IntegrityAlgorithms []*Phase2IntegrityAlgorithmsRequestListValue `locationName:"Phase2IntegrityAlgorithm" locationNameList:"item" type:"list"` - - // The lifetime for phase 2 of the IKE negotiation, in seconds. - // - // Constraints: A value between 900 and 3,600. The value must be less than the - // value for Phase1LifetimeSeconds. - // - // Default: 3600 - Phase2LifetimeSeconds *int64 `type:"integer"` - - // The pre-shared key (PSK) to establish initial authentication between the - // virtual private gateway and the customer gateway. - // - // Constraints: Allowed characters are alphanumeric characters, periods (.), - // and underscores (_). Must be between 8 and 64 characters in length and cannot - // start with zero (0). - PreSharedKey *string `type:"string"` - - // The percentage of the rekey window (determined by RekeyMarginTimeSeconds) - // during which the rekey time is randomly selected. - // - // Constraints: A value between 0 and 100. - // - // Default: 100 - RekeyFuzzPercentage *int64 `type:"integer"` - - // The margin time, in seconds, before the phase 2 lifetime expires, during - // which the AWS side of the VPN connection performs an IKE rekey. The exact - // time of the rekey is randomly selected based on the value for RekeyFuzzPercentage. - // - // Constraints: A value between 60 and half of Phase2LifetimeSeconds. - // - // Default: 540 - RekeyMarginTimeSeconds *int64 `type:"integer"` - - // The number of packets in an IKE replay window. - // - // Constraints: A value between 64 and 2048. - // - // Default: 1024 - ReplayWindowSize *int64 `type:"integer"` - - // The range of inside IP addresses for the tunnel. Any specified CIDR blocks - // must be unique across all VPN connections that use the same virtual private - // gateway. - // - // Constraints: A size /30 CIDR block from the 169.254.0.0/16 range. The following - // CIDR blocks are reserved and cannot be used: - // - // * 169.254.0.0/30 - // - // * 169.254.1.0/30 - // - // * 169.254.2.0/30 - // - // * 169.254.3.0/30 - // - // * 169.254.4.0/30 - // - // * 169.254.5.0/30 - // - // * 169.254.169.252/30 - TunnelInsideCidr *string `type:"string"` -} - -// String returns the string representation -func (s ModifyVpnTunnelOptionsSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyVpnTunnelOptionsSpecification) GoString() string { - return s.String() -} - -// SetDPDTimeoutSeconds sets the DPDTimeoutSeconds field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetDPDTimeoutSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { - s.DPDTimeoutSeconds = &v - return s -} - -// SetIKEVersions sets the IKEVersions field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetIKEVersions(v []*IKEVersionsRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.IKEVersions = v - return s -} - -// SetPhase1DHGroupNumbers sets the Phase1DHGroupNumbers field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1DHGroupNumbers(v []*Phase1DHGroupNumbersRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.Phase1DHGroupNumbers = v - return s -} - -// SetPhase1EncryptionAlgorithms sets the Phase1EncryptionAlgorithms field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1EncryptionAlgorithms(v []*Phase1EncryptionAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.Phase1EncryptionAlgorithms = v - return s -} - -// SetPhase1IntegrityAlgorithms sets the Phase1IntegrityAlgorithms field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1IntegrityAlgorithms(v []*Phase1IntegrityAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.Phase1IntegrityAlgorithms = v - return s -} - -// SetPhase1LifetimeSeconds sets the Phase1LifetimeSeconds field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1LifetimeSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { - s.Phase1LifetimeSeconds = &v - return s -} - -// SetPhase2DHGroupNumbers sets the Phase2DHGroupNumbers field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2DHGroupNumbers(v []*Phase2DHGroupNumbersRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.Phase2DHGroupNumbers = v - return s -} - -// SetPhase2EncryptionAlgorithms sets the Phase2EncryptionAlgorithms field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2EncryptionAlgorithms(v []*Phase2EncryptionAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.Phase2EncryptionAlgorithms = v - return s -} - -// SetPhase2IntegrityAlgorithms sets the Phase2IntegrityAlgorithms field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2IntegrityAlgorithms(v []*Phase2IntegrityAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { - s.Phase2IntegrityAlgorithms = v - return s -} - -// SetPhase2LifetimeSeconds sets the Phase2LifetimeSeconds field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2LifetimeSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { - s.Phase2LifetimeSeconds = &v - return s -} - -// SetPreSharedKey sets the PreSharedKey field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetPreSharedKey(v string) *ModifyVpnTunnelOptionsSpecification { - s.PreSharedKey = &v - return s -} - -// SetRekeyFuzzPercentage sets the RekeyFuzzPercentage field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetRekeyFuzzPercentage(v int64) *ModifyVpnTunnelOptionsSpecification { - s.RekeyFuzzPercentage = &v - return s -} - -// SetRekeyMarginTimeSeconds sets the RekeyMarginTimeSeconds field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetRekeyMarginTimeSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { - s.RekeyMarginTimeSeconds = &v - return s -} - -// SetReplayWindowSize sets the ReplayWindowSize field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetReplayWindowSize(v int64) *ModifyVpnTunnelOptionsSpecification { - s.ReplayWindowSize = &v - return s -} - -// SetTunnelInsideCidr sets the TunnelInsideCidr field's value. -func (s *ModifyVpnTunnelOptionsSpecification) SetTunnelInsideCidr(v string) *ModifyVpnTunnelOptionsSpecification { - s.TunnelInsideCidr = &v - return s -} - -type MonitorInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the instances. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` -} - -// String returns the string representation -func (s MonitorInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s MonitorInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *MonitorInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "MonitorInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *MonitorInstancesInput) SetDryRun(v bool) *MonitorInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *MonitorInstancesInput) SetInstanceIds(v []*string) *MonitorInstancesInput { - s.InstanceIds = v - return s -} - -type MonitorInstancesOutput struct { - _ struct{} `type:"structure"` - - // The monitoring information. - InstanceMonitorings []*InstanceMonitoring `locationName:"instancesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s MonitorInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s MonitorInstancesOutput) GoString() string { - return s.String() -} - -// SetInstanceMonitorings sets the InstanceMonitorings field's value. -func (s *MonitorInstancesOutput) SetInstanceMonitorings(v []*InstanceMonitoring) *MonitorInstancesOutput { - s.InstanceMonitorings = v - return s -} - -// Describes the monitoring of an instance. -type Monitoring struct { - _ struct{} `type:"structure"` - - // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring - // is enabled. - State *string `locationName:"state" type:"string" enum:"MonitoringState"` -} - -// String returns the string representation -func (s Monitoring) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Monitoring) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *Monitoring) SetState(v string) *Monitoring { - s.State = &v - return s -} - -type MoveAddressToVpcInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The Elastic IP address. - // - // PublicIp is a required field - PublicIp *string `locationName:"publicIp" type:"string" required:"true"` -} - -// String returns the string representation -func (s MoveAddressToVpcInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s MoveAddressToVpcInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *MoveAddressToVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "MoveAddressToVpcInput"} - if s.PublicIp == nil { - invalidParams.Add(request.NewErrParamRequired("PublicIp")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *MoveAddressToVpcInput) SetDryRun(v bool) *MoveAddressToVpcInput { - s.DryRun = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *MoveAddressToVpcInput) SetPublicIp(v string) *MoveAddressToVpcInput { - s.PublicIp = &v - return s -} - -type MoveAddressToVpcOutput struct { - _ struct{} `type:"structure"` - - // The allocation ID for the Elastic IP address. - AllocationId *string `locationName:"allocationId" type:"string"` - - // The status of the move of the IP address. - Status *string `locationName:"status" type:"string" enum:"Status"` -} - -// String returns the string representation -func (s MoveAddressToVpcOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s MoveAddressToVpcOutput) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *MoveAddressToVpcOutput) SetAllocationId(v string) *MoveAddressToVpcOutput { - s.AllocationId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *MoveAddressToVpcOutput) SetStatus(v string) *MoveAddressToVpcOutput { - s.Status = &v - return s -} - -// Describes the status of a moving Elastic IP address. -type MovingAddressStatus struct { - _ struct{} `type:"structure"` - - // The status of the Elastic IP address that's being moved to the EC2-VPC platform, - // or restored to the EC2-Classic platform. - MoveStatus *string `locationName:"moveStatus" type:"string" enum:"MoveStatus"` - - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` -} - -// String returns the string representation -func (s MovingAddressStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s MovingAddressStatus) GoString() string { - return s.String() -} - -// SetMoveStatus sets the MoveStatus field's value. -func (s *MovingAddressStatus) SetMoveStatus(v string) *MovingAddressStatus { - s.MoveStatus = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *MovingAddressStatus) SetPublicIp(v string) *MovingAddressStatus { - s.PublicIp = &v - return s -} - -// Describes a NAT gateway. -type NatGateway struct { - _ struct{} `type:"structure"` - - // The date and time the NAT gateway was created. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // The date and time the NAT gateway was deleted, if applicable. - DeleteTime *time.Time `locationName:"deleteTime" type:"timestamp"` - - // If the NAT gateway could not be created, specifies the error code for the - // failure. (InsufficientFreeAddressesInSubnet | Gateway.NotAttached | InvalidAllocationID.NotFound - // | Resource.AlreadyAssociated | InternalError | InvalidSubnetID.NotFound) - FailureCode *string `locationName:"failureCode" type:"string"` - - // If the NAT gateway could not be created, specifies the error message for - // the failure, that corresponds to the error code. - // - // * For InsufficientFreeAddressesInSubnet: "Subnet has insufficient free - // addresses to create this NAT gateway" - // - // * For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet gateway - // attached" - // - // * For InvalidAllocationID.NotFound: "Elastic IP address eipalloc-xxxxxxxx - // could not be associated with this NAT gateway" - // - // * For Resource.AlreadyAssociated: "Elastic IP address eipalloc-xxxxxxxx - // is already associated" - // - // * For InternalError: "Network interface eni-xxxxxxxx, created and used - // internally by this NAT gateway is in an invalid state. Please try again." - // - // * For InvalidSubnetID.NotFound: "The specified subnet subnet-xxxxxxxx - // does not exist or could not be found." - FailureMessage *string `locationName:"failureMessage" type:"string"` - - // Information about the IP addresses and network interface associated with - // the NAT gateway. - NatGatewayAddresses []*NatGatewayAddress `locationName:"natGatewayAddressSet" locationNameList:"item" type:"list"` - - // The ID of the NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - ProvisionedBandwidth *ProvisionedBandwidth `locationName:"provisionedBandwidth" type:"structure"` - - // The state of the NAT gateway. - // - // * pending: The NAT gateway is being created and is not ready to process - // traffic. - // - // * failed: The NAT gateway could not be created. Check the failureCode - // and failureMessage fields for the reason. - // - // * available: The NAT gateway is able to process traffic. This status remains - // until you delete the NAT gateway, and does not indicate the health of - // the NAT gateway. - // - // * deleting: The NAT gateway is in the process of being terminated and - // may still be processing traffic. - // - // * deleted: The NAT gateway has been terminated and is no longer processing - // traffic. - State *string `locationName:"state" type:"string" enum:"NatGatewayState"` - - // The ID of the subnet in which the NAT gateway is located. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The tags for the NAT gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC in which the NAT gateway is located. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s NatGateway) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NatGateway) GoString() string { - return s.String() -} - -// SetCreateTime sets the CreateTime field's value. -func (s *NatGateway) SetCreateTime(v time.Time) *NatGateway { - s.CreateTime = &v - return s -} - -// SetDeleteTime sets the DeleteTime field's value. -func (s *NatGateway) SetDeleteTime(v time.Time) *NatGateway { - s.DeleteTime = &v - return s -} - -// SetFailureCode sets the FailureCode field's value. -func (s *NatGateway) SetFailureCode(v string) *NatGateway { - s.FailureCode = &v - return s -} - -// SetFailureMessage sets the FailureMessage field's value. -func (s *NatGateway) SetFailureMessage(v string) *NatGateway { - s.FailureMessage = &v - return s -} - -// SetNatGatewayAddresses sets the NatGatewayAddresses field's value. -func (s *NatGateway) SetNatGatewayAddresses(v []*NatGatewayAddress) *NatGateway { - s.NatGatewayAddresses = v - return s -} - -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *NatGateway) SetNatGatewayId(v string) *NatGateway { - s.NatGatewayId = &v - return s -} - -// SetProvisionedBandwidth sets the ProvisionedBandwidth field's value. -func (s *NatGateway) SetProvisionedBandwidth(v *ProvisionedBandwidth) *NatGateway { - s.ProvisionedBandwidth = v - return s -} - -// SetState sets the State field's value. -func (s *NatGateway) SetState(v string) *NatGateway { - s.State = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *NatGateway) SetSubnetId(v string) *NatGateway { - s.SubnetId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *NatGateway) SetTags(v []*Tag) *NatGateway { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *NatGateway) SetVpcId(v string) *NatGateway { - s.VpcId = &v - return s -} - -// Describes the IP addresses and network interface associated with a NAT gateway. -type NatGatewayAddress struct { - _ struct{} `type:"structure"` - - // The allocation ID of the Elastic IP address that's associated with the NAT - // gateway. - AllocationId *string `locationName:"allocationId" type:"string"` - - // The ID of the network interface associated with the NAT gateway. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The private IP address associated with the Elastic IP address. - PrivateIp *string `locationName:"privateIp" type:"string"` - - // The Elastic IP address associated with the NAT gateway. - PublicIp *string `locationName:"publicIp" type:"string"` -} - -// String returns the string representation -func (s NatGatewayAddress) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NatGatewayAddress) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *NatGatewayAddress) SetAllocationId(v string) *NatGatewayAddress { - s.AllocationId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *NatGatewayAddress) SetNetworkInterfaceId(v string) *NatGatewayAddress { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIp sets the PrivateIp field's value. -func (s *NatGatewayAddress) SetPrivateIp(v string) *NatGatewayAddress { - s.PrivateIp = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *NatGatewayAddress) SetPublicIp(v string) *NatGatewayAddress { - s.PublicIp = &v - return s -} - -// Describes a network ACL. -type NetworkAcl struct { - _ struct{} `type:"structure"` - - // Any associations between the network ACL and one or more subnets - Associations []*NetworkAclAssociation `locationName:"associationSet" locationNameList:"item" type:"list"` - - // One or more entries (rules) in the network ACL. - Entries []*NetworkAclEntry `locationName:"entrySet" locationNameList:"item" type:"list"` - - // Indicates whether this is the default network ACL for the VPC. - IsDefault *bool `locationName:"default" type:"boolean"` - - // The ID of the network ACL. - NetworkAclId *string `locationName:"networkAclId" type:"string"` - - // The ID of the AWS account that owns the network ACL. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Any tags assigned to the network ACL. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC for the network ACL. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s NetworkAcl) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkAcl) GoString() string { - return s.String() -} - -// SetAssociations sets the Associations field's value. -func (s *NetworkAcl) SetAssociations(v []*NetworkAclAssociation) *NetworkAcl { - s.Associations = v - return s -} - -// SetEntries sets the Entries field's value. -func (s *NetworkAcl) SetEntries(v []*NetworkAclEntry) *NetworkAcl { - s.Entries = v - return s -} - -// SetIsDefault sets the IsDefault field's value. -func (s *NetworkAcl) SetIsDefault(v bool) *NetworkAcl { - s.IsDefault = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *NetworkAcl) SetNetworkAclId(v string) *NetworkAcl { - s.NetworkAclId = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *NetworkAcl) SetOwnerId(v string) *NetworkAcl { - s.OwnerId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *NetworkAcl) SetTags(v []*Tag) *NetworkAcl { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *NetworkAcl) SetVpcId(v string) *NetworkAcl { - s.VpcId = &v - return s -} - -// Describes an association between a network ACL and a subnet. -type NetworkAclAssociation struct { - _ struct{} `type:"structure"` - - // The ID of the association between a network ACL and a subnet. - NetworkAclAssociationId *string `locationName:"networkAclAssociationId" type:"string"` - - // The ID of the network ACL. - NetworkAclId *string `locationName:"networkAclId" type:"string"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` -} - -// String returns the string representation -func (s NetworkAclAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkAclAssociation) GoString() string { - return s.String() -} - -// SetNetworkAclAssociationId sets the NetworkAclAssociationId field's value. -func (s *NetworkAclAssociation) SetNetworkAclAssociationId(v string) *NetworkAclAssociation { - s.NetworkAclAssociationId = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *NetworkAclAssociation) SetNetworkAclId(v string) *NetworkAclAssociation { - s.NetworkAclId = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *NetworkAclAssociation) SetSubnetId(v string) *NetworkAclAssociation { - s.SubnetId = &v - return s -} - -// Describes an entry in a network ACL. -type NetworkAclEntry struct { - _ struct{} `type:"structure"` - - // The IPv4 network range to allow or deny, in CIDR notation. - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Indicates whether the rule is an egress rule (applied to traffic leaving - // the subnet). - Egress *bool `locationName:"egress" type:"boolean"` - - // ICMP protocol: The ICMP type and code. - IcmpTypeCode *IcmpTypeCode `locationName:"icmpTypeCode" type:"structure"` - - // The IPv6 network range to allow or deny, in CIDR notation. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - - // TCP or UDP protocols: The range of ports the rule applies to. - PortRange *PortRange `locationName:"portRange" type:"structure"` - - // The protocol number. A value of "-1" means all protocols. - Protocol *string `locationName:"protocol" type:"string"` - - // Indicates whether to allow or deny the traffic that matches the rule. - RuleAction *string `locationName:"ruleAction" type:"string" enum:"RuleAction"` - - // The rule number for the entry. ACL entries are processed in ascending order - // by rule number. - RuleNumber *int64 `locationName:"ruleNumber" type:"integer"` -} - -// String returns the string representation -func (s NetworkAclEntry) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkAclEntry) GoString() string { - return s.String() -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *NetworkAclEntry) SetCidrBlock(v string) *NetworkAclEntry { - s.CidrBlock = &v - return s -} - -// SetEgress sets the Egress field's value. -func (s *NetworkAclEntry) SetEgress(v bool) *NetworkAclEntry { - s.Egress = &v - return s -} - -// SetIcmpTypeCode sets the IcmpTypeCode field's value. -func (s *NetworkAclEntry) SetIcmpTypeCode(v *IcmpTypeCode) *NetworkAclEntry { - s.IcmpTypeCode = v - return s -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *NetworkAclEntry) SetIpv6CidrBlock(v string) *NetworkAclEntry { - s.Ipv6CidrBlock = &v - return s -} - -// SetPortRange sets the PortRange field's value. -func (s *NetworkAclEntry) SetPortRange(v *PortRange) *NetworkAclEntry { - s.PortRange = v - return s -} - -// SetProtocol sets the Protocol field's value. -func (s *NetworkAclEntry) SetProtocol(v string) *NetworkAclEntry { - s.Protocol = &v - return s -} - -// SetRuleAction sets the RuleAction field's value. -func (s *NetworkAclEntry) SetRuleAction(v string) *NetworkAclEntry { - s.RuleAction = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *NetworkAclEntry) SetRuleNumber(v int64) *NetworkAclEntry { - s.RuleNumber = &v - return s -} - -// Describes the networking features of the instance type. -type NetworkInfo struct { - _ struct{} `type:"structure"` - - // Indicates whether Elastic Network Adapter (ENA) is supported. - EnaSupport *string `locationName:"enaSupport" type:"string" enum:"EnaSupport"` - - // The maximum number of IPv4 addresses per network interface. - Ipv4AddressesPerInterface *int64 `locationName:"ipv4AddressesPerInterface" type:"integer"` - - // The maximum number of IPv6 addresses per network interface. - Ipv6AddressesPerInterface *int64 `locationName:"ipv6AddressesPerInterface" type:"integer"` - - // Indicates whether IPv6 is supported. - Ipv6Supported *bool `locationName:"ipv6Supported" type:"boolean"` - - // The maximum number of network interfaces for the instance type. - MaximumNetworkInterfaces *int64 `locationName:"maximumNetworkInterfaces" type:"integer"` - - // Describes the network performance. - NetworkPerformance *string `locationName:"networkPerformance" type:"string"` -} - -// String returns the string representation -func (s NetworkInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInfo) GoString() string { - return s.String() -} - -// SetEnaSupport sets the EnaSupport field's value. -func (s *NetworkInfo) SetEnaSupport(v string) *NetworkInfo { - s.EnaSupport = &v - return s -} - -// SetIpv4AddressesPerInterface sets the Ipv4AddressesPerInterface field's value. -func (s *NetworkInfo) SetIpv4AddressesPerInterface(v int64) *NetworkInfo { - s.Ipv4AddressesPerInterface = &v - return s -} - -// SetIpv6AddressesPerInterface sets the Ipv6AddressesPerInterface field's value. -func (s *NetworkInfo) SetIpv6AddressesPerInterface(v int64) *NetworkInfo { - s.Ipv6AddressesPerInterface = &v - return s -} - -// SetIpv6Supported sets the Ipv6Supported field's value. -func (s *NetworkInfo) SetIpv6Supported(v bool) *NetworkInfo { - s.Ipv6Supported = &v - return s -} - -// SetMaximumNetworkInterfaces sets the MaximumNetworkInterfaces field's value. -func (s *NetworkInfo) SetMaximumNetworkInterfaces(v int64) *NetworkInfo { - s.MaximumNetworkInterfaces = &v - return s -} - -// SetNetworkPerformance sets the NetworkPerformance field's value. -func (s *NetworkInfo) SetNetworkPerformance(v string) *NetworkInfo { - s.NetworkPerformance = &v - return s -} - -// Describes a network interface. -type NetworkInterface struct { - _ struct{} `type:"structure"` - - // The association information for an Elastic IP address (IPv4) associated with - // the network interface. - Association *NetworkInterfaceAssociation `locationName:"association" type:"structure"` - - // The network interface attachment. - Attachment *NetworkInterfaceAttachment `locationName:"attachment" type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // A description. - Description *string `locationName:"description" type:"string"` - - // Any security groups for the network interface. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The type of network interface. - InterfaceType *string `locationName:"interfaceType" type:"string" enum:"NetworkInterfaceType"` - - // The IPv6 addresses associated with the network interface. - Ipv6Addresses []*NetworkInterfaceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` - - // The MAC address. - MacAddress *string `locationName:"macAddress" type:"string"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The AWS account ID of the owner of the network interface. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The private DNS name. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The IPv4 address of the network interface within the subnet. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // The private IPv4 addresses associated with the network interface. - PrivateIpAddresses []*NetworkInterfacePrivateIpAddress `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` - - // The ID of the entity that launched the instance on your behalf (for example, - // AWS Management Console or Auto Scaling). - RequesterId *string `locationName:"requesterId" type:"string"` - - // Indicates whether the network interface is being managed by AWS. - RequesterManaged *bool `locationName:"requesterManaged" type:"boolean"` - - // Indicates whether traffic to or from the instance is validated. - SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` - - // The status of the network interface. - Status *string `locationName:"status" type:"string" enum:"NetworkInterfaceStatus"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` - - // Any tags assigned to the network interface. - TagSet []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s NetworkInterface) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterface) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *NetworkInterface) SetAssociation(v *NetworkInterfaceAssociation) *NetworkInterface { - s.Association = v - return s -} - -// SetAttachment sets the Attachment field's value. -func (s *NetworkInterface) SetAttachment(v *NetworkInterfaceAttachment) *NetworkInterface { - s.Attachment = v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *NetworkInterface) SetAvailabilityZone(v string) *NetworkInterface { - s.AvailabilityZone = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *NetworkInterface) SetDescription(v string) *NetworkInterface { - s.Description = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *NetworkInterface) SetGroups(v []*GroupIdentifier) *NetworkInterface { - s.Groups = v - return s -} - -// SetInterfaceType sets the InterfaceType field's value. -func (s *NetworkInterface) SetInterfaceType(v string) *NetworkInterface { - s.InterfaceType = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *NetworkInterface) SetIpv6Addresses(v []*NetworkInterfaceIpv6Address) *NetworkInterface { - s.Ipv6Addresses = v - return s -} - -// SetMacAddress sets the MacAddress field's value. -func (s *NetworkInterface) SetMacAddress(v string) *NetworkInterface { - s.MacAddress = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *NetworkInterface) SetNetworkInterfaceId(v string) *NetworkInterface { - s.NetworkInterfaceId = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *NetworkInterface) SetOwnerId(v string) *NetworkInterface { - s.OwnerId = &v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *NetworkInterface) SetPrivateDnsName(v string) *NetworkInterface { - s.PrivateDnsName = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *NetworkInterface) SetPrivateIpAddress(v string) *NetworkInterface { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *NetworkInterface) SetPrivateIpAddresses(v []*NetworkInterfacePrivateIpAddress) *NetworkInterface { - s.PrivateIpAddresses = v - return s -} - -// SetRequesterId sets the RequesterId field's value. -func (s *NetworkInterface) SetRequesterId(v string) *NetworkInterface { - s.RequesterId = &v - return s -} - -// SetRequesterManaged sets the RequesterManaged field's value. -func (s *NetworkInterface) SetRequesterManaged(v bool) *NetworkInterface { - s.RequesterManaged = &v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *NetworkInterface) SetSourceDestCheck(v bool) *NetworkInterface { - s.SourceDestCheck = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *NetworkInterface) SetStatus(v string) *NetworkInterface { - s.Status = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *NetworkInterface) SetSubnetId(v string) *NetworkInterface { - s.SubnetId = &v - return s -} - -// SetTagSet sets the TagSet field's value. -func (s *NetworkInterface) SetTagSet(v []*Tag) *NetworkInterface { - s.TagSet = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *NetworkInterface) SetVpcId(v string) *NetworkInterface { - s.VpcId = &v - return s -} - -// Describes association information for an Elastic IP address (IPv4 only). -type NetworkInterfaceAssociation struct { - _ struct{} `type:"structure"` - - // The allocation ID. - AllocationId *string `locationName:"allocationId" type:"string"` - - // The association ID. - AssociationId *string `locationName:"associationId" type:"string"` - - // The ID of the Elastic IP address owner. - IpOwnerId *string `locationName:"ipOwnerId" type:"string"` - - // The public DNS name. - PublicDnsName *string `locationName:"publicDnsName" type:"string"` - - // The address of the Elastic IP address bound to the network interface. - PublicIp *string `locationName:"publicIp" type:"string"` -} - -// String returns the string representation -func (s NetworkInterfaceAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfaceAssociation) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *NetworkInterfaceAssociation) SetAllocationId(v string) *NetworkInterfaceAssociation { - s.AllocationId = &v - return s -} - -// SetAssociationId sets the AssociationId field's value. -func (s *NetworkInterfaceAssociation) SetAssociationId(v string) *NetworkInterfaceAssociation { - s.AssociationId = &v - return s -} - -// SetIpOwnerId sets the IpOwnerId field's value. -func (s *NetworkInterfaceAssociation) SetIpOwnerId(v string) *NetworkInterfaceAssociation { - s.IpOwnerId = &v - return s -} - -// SetPublicDnsName sets the PublicDnsName field's value. -func (s *NetworkInterfaceAssociation) SetPublicDnsName(v string) *NetworkInterfaceAssociation { - s.PublicDnsName = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *NetworkInterfaceAssociation) SetPublicIp(v string) *NetworkInterfaceAssociation { - s.PublicIp = &v - return s -} - -// Describes a network interface attachment. -type NetworkInterfaceAttachment struct { - _ struct{} `type:"structure"` - - // The timestamp indicating when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` - - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The device index of the network interface attachment on the instance. - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The AWS account ID of the owner of the instance. - InstanceOwnerId *string `locationName:"instanceOwnerId" type:"string"` - - // The attachment state. - Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` -} - -// String returns the string representation -func (s NetworkInterfaceAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfaceAttachment) GoString() string { - return s.String() -} - -// SetAttachTime sets the AttachTime field's value. -func (s *NetworkInterfaceAttachment) SetAttachTime(v time.Time) *NetworkInterfaceAttachment { - s.AttachTime = &v - return s -} - -// SetAttachmentId sets the AttachmentId field's value. -func (s *NetworkInterfaceAttachment) SetAttachmentId(v string) *NetworkInterfaceAttachment { - s.AttachmentId = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *NetworkInterfaceAttachment) SetDeleteOnTermination(v bool) *NetworkInterfaceAttachment { - s.DeleteOnTermination = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *NetworkInterfaceAttachment) SetDeviceIndex(v int64) *NetworkInterfaceAttachment { - s.DeviceIndex = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *NetworkInterfaceAttachment) SetInstanceId(v string) *NetworkInterfaceAttachment { - s.InstanceId = &v - return s -} - -// SetInstanceOwnerId sets the InstanceOwnerId field's value. -func (s *NetworkInterfaceAttachment) SetInstanceOwnerId(v string) *NetworkInterfaceAttachment { - s.InstanceOwnerId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *NetworkInterfaceAttachment) SetStatus(v string) *NetworkInterfaceAttachment { - s.Status = &v - return s -} - -// Describes an attachment change. -type NetworkInterfaceAttachmentChanges struct { - _ struct{} `type:"structure"` - - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` -} - -// String returns the string representation -func (s NetworkInterfaceAttachmentChanges) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfaceAttachmentChanges) GoString() string { - return s.String() -} - -// SetAttachmentId sets the AttachmentId field's value. -func (s *NetworkInterfaceAttachmentChanges) SetAttachmentId(v string) *NetworkInterfaceAttachmentChanges { - s.AttachmentId = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *NetworkInterfaceAttachmentChanges) SetDeleteOnTermination(v bool) *NetworkInterfaceAttachmentChanges { - s.DeleteOnTermination = &v - return s -} - -// Describes an IPv6 address associated with a network interface. -type NetworkInterfaceIpv6Address struct { - _ struct{} `type:"structure"` - - // The IPv6 address. - Ipv6Address *string `locationName:"ipv6Address" type:"string"` -} - -// String returns the string representation -func (s NetworkInterfaceIpv6Address) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfaceIpv6Address) GoString() string { - return s.String() -} - -// SetIpv6Address sets the Ipv6Address field's value. -func (s *NetworkInterfaceIpv6Address) SetIpv6Address(v string) *NetworkInterfaceIpv6Address { - s.Ipv6Address = &v - return s -} - -// Describes a permission for a network interface. -type NetworkInterfacePermission struct { - _ struct{} `type:"structure"` - - // The AWS account ID. - AwsAccountId *string `locationName:"awsAccountId" type:"string"` - - // The AWS service. - AwsService *string `locationName:"awsService" type:"string"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The ID of the network interface permission. - NetworkInterfacePermissionId *string `locationName:"networkInterfacePermissionId" type:"string"` - - // The type of permission. - Permission *string `locationName:"permission" type:"string" enum:"InterfacePermissionType"` - - // Information about the state of the permission. - PermissionState *NetworkInterfacePermissionState `locationName:"permissionState" type:"structure"` -} - -// String returns the string representation -func (s NetworkInterfacePermission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfacePermission) GoString() string { - return s.String() -} - -// SetAwsAccountId sets the AwsAccountId field's value. -func (s *NetworkInterfacePermission) SetAwsAccountId(v string) *NetworkInterfacePermission { - s.AwsAccountId = &v - return s -} - -// SetAwsService sets the AwsService field's value. -func (s *NetworkInterfacePermission) SetAwsService(v string) *NetworkInterfacePermission { - s.AwsService = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *NetworkInterfacePermission) SetNetworkInterfaceId(v string) *NetworkInterfacePermission { - s.NetworkInterfaceId = &v - return s -} - -// SetNetworkInterfacePermissionId sets the NetworkInterfacePermissionId field's value. -func (s *NetworkInterfacePermission) SetNetworkInterfacePermissionId(v string) *NetworkInterfacePermission { - s.NetworkInterfacePermissionId = &v - return s -} - -// SetPermission sets the Permission field's value. -func (s *NetworkInterfacePermission) SetPermission(v string) *NetworkInterfacePermission { - s.Permission = &v - return s -} - -// SetPermissionState sets the PermissionState field's value. -func (s *NetworkInterfacePermission) SetPermissionState(v *NetworkInterfacePermissionState) *NetworkInterfacePermission { - s.PermissionState = v - return s -} - -// Describes the state of a network interface permission. -type NetworkInterfacePermissionState struct { - _ struct{} `type:"structure"` - - // The state of the permission. - State *string `locationName:"state" type:"string" enum:"NetworkInterfacePermissionStateCode"` - - // A status message, if applicable. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s NetworkInterfacePermissionState) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfacePermissionState) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *NetworkInterfacePermissionState) SetState(v string) *NetworkInterfacePermissionState { - s.State = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *NetworkInterfacePermissionState) SetStatusMessage(v string) *NetworkInterfacePermissionState { - s.StatusMessage = &v - return s -} - -// Describes the private IPv4 address of a network interface. -type NetworkInterfacePrivateIpAddress struct { - _ struct{} `type:"structure"` - - // The association information for an Elastic IP address (IPv4) associated with - // the network interface. - Association *NetworkInterfaceAssociation `locationName:"association" type:"structure"` - - // Indicates whether this IPv4 address is the primary private IPv4 address of - // the network interface. - Primary *bool `locationName:"primary" type:"boolean"` - - // The private DNS name. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The private IPv4 address. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` -} - -// String returns the string representation -func (s NetworkInterfacePrivateIpAddress) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NetworkInterfacePrivateIpAddress) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *NetworkInterfacePrivateIpAddress) SetAssociation(v *NetworkInterfaceAssociation) *NetworkInterfacePrivateIpAddress { - s.Association = v - return s -} - -// SetPrimary sets the Primary field's value. -func (s *NetworkInterfacePrivateIpAddress) SetPrimary(v bool) *NetworkInterfacePrivateIpAddress { - s.Primary = &v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *NetworkInterfacePrivateIpAddress) SetPrivateDnsName(v string) *NetworkInterfacePrivateIpAddress { - s.PrivateDnsName = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *NetworkInterfacePrivateIpAddress) SetPrivateIpAddress(v string) *NetworkInterfacePrivateIpAddress { - s.PrivateIpAddress = &v - return s -} - -type NewDhcpConfiguration struct { - _ struct{} `type:"structure"` - - Key *string `locationName:"key" type:"string"` - - Values []*string `locationName:"Value" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s NewDhcpConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s NewDhcpConfiguration) GoString() string { - return s.String() -} - -// SetKey sets the Key field's value. -func (s *NewDhcpConfiguration) SetKey(v string) *NewDhcpConfiguration { - s.Key = &v - return s -} - -// SetValues sets the Values field's value. -func (s *NewDhcpConfiguration) SetValues(v []*string) *NewDhcpConfiguration { - s.Values = v - return s -} - -// Describes the configuration of On-Demand Instances in an EC2 Fleet. -type OnDemandOptions struct { - _ struct{} `type:"structure"` - - // The order of the launch template overrides to use in fulfilling On-Demand - // capacity. If you specify lowest-price, EC2 Fleet uses price to determine - // the order, launching the lowest price first. If you specify prioritized, - // EC2 Fleet uses the priority that you assigned to each launch template override, - // launching the highest priority first. If you do not specify a value, EC2 - // Fleet defaults to lowest-price. - AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"FleetOnDemandAllocationStrategy"` - - // The maximum amount per hour for On-Demand Instances that you're willing to - // pay. - MaxTotalPrice *string `locationName:"maxTotalPrice" type:"string"` - - // The minimum target capacity for On-Demand Instances in the fleet. If the - // minimum target capacity is not reached, the fleet launches no instances. - MinTargetCapacity *int64 `locationName:"minTargetCapacity" type:"integer"` - - // Indicates that the fleet launches all On-Demand Instances into a single Availability - // Zone. - SingleAvailabilityZone *bool `locationName:"singleAvailabilityZone" type:"boolean"` - - // Indicates that the fleet uses a single instance type to launch all On-Demand - // Instances in the fleet. - SingleInstanceType *bool `locationName:"singleInstanceType" type:"boolean"` -} - -// String returns the string representation -func (s OnDemandOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s OnDemandOptions) GoString() string { - return s.String() -} - -// SetAllocationStrategy sets the AllocationStrategy field's value. -func (s *OnDemandOptions) SetAllocationStrategy(v string) *OnDemandOptions { - s.AllocationStrategy = &v - return s -} - -// SetMaxTotalPrice sets the MaxTotalPrice field's value. -func (s *OnDemandOptions) SetMaxTotalPrice(v string) *OnDemandOptions { - s.MaxTotalPrice = &v - return s -} - -// SetMinTargetCapacity sets the MinTargetCapacity field's value. -func (s *OnDemandOptions) SetMinTargetCapacity(v int64) *OnDemandOptions { - s.MinTargetCapacity = &v - return s -} - -// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. -func (s *OnDemandOptions) SetSingleAvailabilityZone(v bool) *OnDemandOptions { - s.SingleAvailabilityZone = &v - return s -} - -// SetSingleInstanceType sets the SingleInstanceType field's value. -func (s *OnDemandOptions) SetSingleInstanceType(v bool) *OnDemandOptions { - s.SingleInstanceType = &v - return s -} - -// Describes the configuration of On-Demand Instances in an EC2 Fleet. -type OnDemandOptionsRequest struct { - _ struct{} `type:"structure"` - - // The order of the launch template overrides to use in fulfilling On-Demand - // capacity. If you specify lowest-price, EC2 Fleet uses price to determine - // the order, launching the lowest price first. If you specify prioritized, - // EC2 Fleet uses the priority that you assigned to each launch template override, - // launching the highest priority first. If you do not specify a value, EC2 - // Fleet defaults to lowest-price. - AllocationStrategy *string `type:"string" enum:"FleetOnDemandAllocationStrategy"` - - // The maximum amount per hour for On-Demand Instances that you're willing to - // pay. - MaxTotalPrice *string `type:"string"` - - // The minimum target capacity for On-Demand Instances in the fleet. If the - // minimum target capacity is not reached, the fleet launches no instances. - MinTargetCapacity *int64 `type:"integer"` - - // Indicates that the fleet launches all On-Demand Instances into a single Availability - // Zone. - SingleAvailabilityZone *bool `type:"boolean"` - - // Indicates that the fleet uses a single instance type to launch all On-Demand - // Instances in the fleet. - SingleInstanceType *bool `type:"boolean"` -} - -// String returns the string representation -func (s OnDemandOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s OnDemandOptionsRequest) GoString() string { - return s.String() -} - -// SetAllocationStrategy sets the AllocationStrategy field's value. -func (s *OnDemandOptionsRequest) SetAllocationStrategy(v string) *OnDemandOptionsRequest { - s.AllocationStrategy = &v - return s -} - -// SetMaxTotalPrice sets the MaxTotalPrice field's value. -func (s *OnDemandOptionsRequest) SetMaxTotalPrice(v string) *OnDemandOptionsRequest { - s.MaxTotalPrice = &v - return s -} - -// SetMinTargetCapacity sets the MinTargetCapacity field's value. -func (s *OnDemandOptionsRequest) SetMinTargetCapacity(v int64) *OnDemandOptionsRequest { - s.MinTargetCapacity = &v - return s -} - -// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. -func (s *OnDemandOptionsRequest) SetSingleAvailabilityZone(v bool) *OnDemandOptionsRequest { - s.SingleAvailabilityZone = &v - return s -} - -// SetSingleInstanceType sets the SingleInstanceType field's value. -func (s *OnDemandOptionsRequest) SetSingleInstanceType(v bool) *OnDemandOptionsRequest { - s.SingleInstanceType = &v - return s -} - -// Describes the data that identifies an Amazon FPGA image (AFI) on the PCI -// bus. -type PciId struct { - _ struct{} `type:"structure"` - - // The ID of the device. - DeviceId *string `type:"string"` - - // The ID of the subsystem. - SubsystemId *string `type:"string"` - - // The ID of the vendor for the subsystem. - SubsystemVendorId *string `type:"string"` - - // The ID of the vendor. - VendorId *string `type:"string"` -} - -// String returns the string representation -func (s PciId) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PciId) GoString() string { - return s.String() -} - -// SetDeviceId sets the DeviceId field's value. -func (s *PciId) SetDeviceId(v string) *PciId { - s.DeviceId = &v - return s -} - -// SetSubsystemId sets the SubsystemId field's value. -func (s *PciId) SetSubsystemId(v string) *PciId { - s.SubsystemId = &v - return s -} - -// SetSubsystemVendorId sets the SubsystemVendorId field's value. -func (s *PciId) SetSubsystemVendorId(v string) *PciId { - s.SubsystemVendorId = &v - return s -} - -// SetVendorId sets the VendorId field's value. -func (s *PciId) SetVendorId(v string) *PciId { - s.VendorId = &v - return s -} - -// Describes the VPC peering connection options. -type PeeringConnectionOptions struct { - _ struct{} `type:"structure"` - - // If true, the public DNS hostnames of instances in the specified VPC resolve - // to private IP addresses when queried from instances in the peer VPC. - AllowDnsResolutionFromRemoteVpc *bool `locationName:"allowDnsResolutionFromRemoteVpc" type:"boolean"` - - // If true, enables outbound communication from an EC2-Classic instance that's - // linked to a local VPC using ClassicLink to instances in a peer VPC. - AllowEgressFromLocalClassicLinkToRemoteVpc *bool `locationName:"allowEgressFromLocalClassicLinkToRemoteVpc" type:"boolean"` - - // If true, enables outbound communication from instances in a local VPC to - // an EC2-Classic instance that's linked to a peer VPC using ClassicLink. - AllowEgressFromLocalVpcToRemoteClassicLink *bool `locationName:"allowEgressFromLocalVpcToRemoteClassicLink" type:"boolean"` -} - -// String returns the string representation -func (s PeeringConnectionOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PeeringConnectionOptions) GoString() string { - return s.String() -} - -// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. -func (s *PeeringConnectionOptions) SetAllowDnsResolutionFromRemoteVpc(v bool) *PeeringConnectionOptions { - s.AllowDnsResolutionFromRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. -func (s *PeeringConnectionOptions) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *PeeringConnectionOptions { - s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. -func (s *PeeringConnectionOptions) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *PeeringConnectionOptions { - s.AllowEgressFromLocalVpcToRemoteClassicLink = &v - return s -} - -// The VPC peering connection options. -type PeeringConnectionOptionsRequest struct { - _ struct{} `type:"structure"` - - // If true, enables a local VPC to resolve public DNS hostnames to private IP - // addresses when queried from instances in the peer VPC. - AllowDnsResolutionFromRemoteVpc *bool `type:"boolean"` - - // If true, enables outbound communication from an EC2-Classic instance that's - // linked to a local VPC using ClassicLink to instances in a peer VPC. - AllowEgressFromLocalClassicLinkToRemoteVpc *bool `type:"boolean"` - - // If true, enables outbound communication from instances in a local VPC to - // an EC2-Classic instance that's linked to a peer VPC using ClassicLink. - AllowEgressFromLocalVpcToRemoteClassicLink *bool `type:"boolean"` -} - -// String returns the string representation -func (s PeeringConnectionOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PeeringConnectionOptionsRequest) GoString() string { - return s.String() -} - -// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. -func (s *PeeringConnectionOptionsRequest) SetAllowDnsResolutionFromRemoteVpc(v bool) *PeeringConnectionOptionsRequest { - s.AllowDnsResolutionFromRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. -func (s *PeeringConnectionOptionsRequest) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *PeeringConnectionOptionsRequest { - s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. -func (s *PeeringConnectionOptionsRequest) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *PeeringConnectionOptionsRequest { - s.AllowEgressFromLocalVpcToRemoteClassicLink = &v - return s -} - -// The Diffie-Hellmann group number for phase 1 IKE negotiations. -type Phase1DHGroupNumbersListValue struct { - _ struct{} `type:"structure"` - - // The Diffie-Hellmann group number. - Value *int64 `locationName:"value" type:"integer"` -} - -// String returns the string representation -func (s Phase1DHGroupNumbersListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase1DHGroupNumbersListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase1DHGroupNumbersListValue) SetValue(v int64) *Phase1DHGroupNumbersListValue { - s.Value = &v - return s -} - -// Specifies a Diffie-Hellman group number for the VPN tunnel for phase 1 IKE -// negotiations. -type Phase1DHGroupNumbersRequestListValue struct { - _ struct{} `type:"structure"` - - // The Diffie-Hellmann group number. - Value *int64 `type:"integer"` -} - -// String returns the string representation -func (s Phase1DHGroupNumbersRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase1DHGroupNumbersRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase1DHGroupNumbersRequestListValue) SetValue(v int64) *Phase1DHGroupNumbersRequestListValue { - s.Value = &v - return s -} - -// The encryption algorithm for phase 1 IKE negotiations. -type Phase1EncryptionAlgorithmsListValue struct { - _ struct{} `type:"structure"` - - // The value for the encryption algorithm. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s Phase1EncryptionAlgorithmsListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase1EncryptionAlgorithmsListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase1EncryptionAlgorithmsListValue) SetValue(v string) *Phase1EncryptionAlgorithmsListValue { - s.Value = &v - return s -} - -// Specifies the encryption algorithm for the VPN tunnel for phase 1 IKE negotiations. -type Phase1EncryptionAlgorithmsRequestListValue struct { - _ struct{} `type:"structure"` - - // The value for the encryption algorithm. - Value *string `type:"string"` -} - -// String returns the string representation -func (s Phase1EncryptionAlgorithmsRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase1EncryptionAlgorithmsRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase1EncryptionAlgorithmsRequestListValue) SetValue(v string) *Phase1EncryptionAlgorithmsRequestListValue { - s.Value = &v - return s -} - -// The integrity algorithm for phase 1 IKE negotiations. -type Phase1IntegrityAlgorithmsListValue struct { - _ struct{} `type:"structure"` - - // The value for the integrity algorithm. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s Phase1IntegrityAlgorithmsListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase1IntegrityAlgorithmsListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase1IntegrityAlgorithmsListValue) SetValue(v string) *Phase1IntegrityAlgorithmsListValue { - s.Value = &v - return s -} - -// Specifies the integrity algorithm for the VPN tunnel for phase 1 IKE negotiations. -type Phase1IntegrityAlgorithmsRequestListValue struct { - _ struct{} `type:"structure"` - - // The value for the integrity algorithm. - Value *string `type:"string"` -} - -// String returns the string representation -func (s Phase1IntegrityAlgorithmsRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase1IntegrityAlgorithmsRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase1IntegrityAlgorithmsRequestListValue) SetValue(v string) *Phase1IntegrityAlgorithmsRequestListValue { - s.Value = &v - return s -} - -// The Diffie-Hellmann group number for phase 2 IKE negotiations. -type Phase2DHGroupNumbersListValue struct { - _ struct{} `type:"structure"` - - // The Diffie-Hellmann group number. - Value *int64 `locationName:"value" type:"integer"` -} - -// String returns the string representation -func (s Phase2DHGroupNumbersListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase2DHGroupNumbersListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase2DHGroupNumbersListValue) SetValue(v int64) *Phase2DHGroupNumbersListValue { - s.Value = &v - return s -} - -// Specifies a Diffie-Hellman group number for the VPN tunnel for phase 2 IKE -// negotiations. -type Phase2DHGroupNumbersRequestListValue struct { - _ struct{} `type:"structure"` - - // The Diffie-Hellmann group number. - Value *int64 `type:"integer"` -} - -// String returns the string representation -func (s Phase2DHGroupNumbersRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase2DHGroupNumbersRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase2DHGroupNumbersRequestListValue) SetValue(v int64) *Phase2DHGroupNumbersRequestListValue { - s.Value = &v - return s -} - -// The encryption algorithm for phase 2 IKE negotiations. -type Phase2EncryptionAlgorithmsListValue struct { - _ struct{} `type:"structure"` - - // The encryption algorithm. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s Phase2EncryptionAlgorithmsListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase2EncryptionAlgorithmsListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase2EncryptionAlgorithmsListValue) SetValue(v string) *Phase2EncryptionAlgorithmsListValue { - s.Value = &v - return s -} - -// Specifies the encryption algorithm for the VPN tunnel for phase 2 IKE negotiations. -type Phase2EncryptionAlgorithmsRequestListValue struct { - _ struct{} `type:"structure"` - - // The encryption algorithm. - Value *string `type:"string"` -} - -// String returns the string representation -func (s Phase2EncryptionAlgorithmsRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase2EncryptionAlgorithmsRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase2EncryptionAlgorithmsRequestListValue) SetValue(v string) *Phase2EncryptionAlgorithmsRequestListValue { - s.Value = &v - return s -} - -// The integrity algorithm for phase 2 IKE negotiations. -type Phase2IntegrityAlgorithmsListValue struct { - _ struct{} `type:"structure"` - - // The integrity algorithm. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s Phase2IntegrityAlgorithmsListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase2IntegrityAlgorithmsListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase2IntegrityAlgorithmsListValue) SetValue(v string) *Phase2IntegrityAlgorithmsListValue { - s.Value = &v - return s -} - -// Specifies the integrity algorithm for the VPN tunnel for phase 2 IKE negotiations. -type Phase2IntegrityAlgorithmsRequestListValue struct { - _ struct{} `type:"structure"` - - // The integrity algorithm. - Value *string `type:"string"` -} - -// String returns the string representation -func (s Phase2IntegrityAlgorithmsRequestListValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Phase2IntegrityAlgorithmsRequestListValue) GoString() string { - return s.String() -} - -// SetValue sets the Value field's value. -func (s *Phase2IntegrityAlgorithmsRequestListValue) SetValue(v string) *Phase2IntegrityAlgorithmsRequestListValue { - s.Value = &v - return s -} - -// Describes the placement of an instance. -type Placement struct { - _ struct{} `type:"structure"` - - // The affinity setting for the instance on the Dedicated Host. This parameter - // is not supported for the ImportInstance command. - Affinity *string `locationName:"affinity" type:"string"` - - // The Availability Zone of the instance. - // - // If not specified, an Availability Zone will be automatically chosen for you - // based on the load balancing criteria for the Region. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The name of the placement group the instance is in. - GroupName *string `locationName:"groupName" type:"string"` - - // The ID of the Dedicated Host on which the instance resides. This parameter - // is not supported for the ImportInstance command. - HostId *string `locationName:"hostId" type:"string"` - - // The number of the partition the instance is in. Valid only if the placement - // group strategy is set to partition. - PartitionNumber *int64 `locationName:"partitionNumber" type:"integer"` - - // Reserved for future use. - SpreadDomain *string `locationName:"spreadDomain" type:"string"` - - // The tenancy of the instance (if the instance is running in a VPC). An instance - // with a tenancy of dedicated runs on single-tenant hardware. The host tenancy - // is not supported for the ImportInstance command. - Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` -} - -// String returns the string representation -func (s Placement) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Placement) GoString() string { - return s.String() -} - -// SetAffinity sets the Affinity field's value. -func (s *Placement) SetAffinity(v string) *Placement { - s.Affinity = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Placement) SetAvailabilityZone(v string) *Placement { - s.AvailabilityZone = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *Placement) SetGroupName(v string) *Placement { - s.GroupName = &v - return s -} - -// SetHostId sets the HostId field's value. -func (s *Placement) SetHostId(v string) *Placement { - s.HostId = &v - return s -} - -// SetPartitionNumber sets the PartitionNumber field's value. -func (s *Placement) SetPartitionNumber(v int64) *Placement { - s.PartitionNumber = &v - return s -} - -// SetSpreadDomain sets the SpreadDomain field's value. -func (s *Placement) SetSpreadDomain(v string) *Placement { - s.SpreadDomain = &v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *Placement) SetTenancy(v string) *Placement { - s.Tenancy = &v - return s -} - -// Describes a placement group. -type PlacementGroup struct { - _ struct{} `type:"structure"` - - // The name of the placement group. - GroupName *string `locationName:"groupName" type:"string"` - - // The number of partitions. Valid only if strategy is set to partition. - PartitionCount *int64 `locationName:"partitionCount" type:"integer"` - - // The state of the placement group. - State *string `locationName:"state" type:"string" enum:"PlacementGroupState"` - - // The placement strategy. - Strategy *string `locationName:"strategy" type:"string" enum:"PlacementStrategy"` -} - -// String returns the string representation -func (s PlacementGroup) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PlacementGroup) GoString() string { - return s.String() -} - -// SetGroupName sets the GroupName field's value. -func (s *PlacementGroup) SetGroupName(v string) *PlacementGroup { - s.GroupName = &v - return s -} - -// SetPartitionCount sets the PartitionCount field's value. -func (s *PlacementGroup) SetPartitionCount(v int64) *PlacementGroup { - s.PartitionCount = &v - return s -} - -// SetState sets the State field's value. -func (s *PlacementGroup) SetState(v string) *PlacementGroup { - s.State = &v - return s -} - -// SetStrategy sets the Strategy field's value. -func (s *PlacementGroup) SetStrategy(v string) *PlacementGroup { - s.Strategy = &v - return s -} - -// Describes the placement group support of the instance type. -type PlacementGroupInfo struct { - _ struct{} `type:"structure"` - - // A list of supported placement groups types. - SupportedStrategies []*string `locationName:"supportedStrategies" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s PlacementGroupInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PlacementGroupInfo) GoString() string { - return s.String() -} - -// SetSupportedStrategies sets the SupportedStrategies field's value. -func (s *PlacementGroupInfo) SetSupportedStrategies(v []*string) *PlacementGroupInfo { - s.SupportedStrategies = v - return s -} - -// Describes the placement of an instance. -type PlacementResponse struct { - _ struct{} `type:"structure"` - - // The name of the placement group the instance is in. - GroupName *string `locationName:"groupName" type:"string"` -} - -// String returns the string representation -func (s PlacementResponse) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PlacementResponse) GoString() string { - return s.String() -} - -// SetGroupName sets the GroupName field's value. -func (s *PlacementResponse) SetGroupName(v string) *PlacementResponse { - s.GroupName = &v - return s -} - -// Describes a range of ports. -type PortRange struct { - _ struct{} `type:"structure"` - - // The first port in the range. - From *int64 `locationName:"from" type:"integer"` - - // The last port in the range. - To *int64 `locationName:"to" type:"integer"` -} - -// String returns the string representation -func (s PortRange) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PortRange) GoString() string { - return s.String() -} - -// SetFrom sets the From field's value. -func (s *PortRange) SetFrom(v int64) *PortRange { - s.From = &v - return s -} - -// SetTo sets the To field's value. -func (s *PortRange) SetTo(v int64) *PortRange { - s.To = &v - return s -} - -// Describes prefixes for AWS services. -type PrefixList struct { - _ struct{} `type:"structure"` - - // The IP address range of the AWS service. - Cidrs []*string `locationName:"cidrSet" locationNameList:"item" type:"list"` - - // The ID of the prefix. - PrefixListId *string `locationName:"prefixListId" type:"string"` - - // The name of the prefix. - PrefixListName *string `locationName:"prefixListName" type:"string"` -} - -// String returns the string representation -func (s PrefixList) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PrefixList) GoString() string { - return s.String() -} - -// SetCidrs sets the Cidrs field's value. -func (s *PrefixList) SetCidrs(v []*string) *PrefixList { - s.Cidrs = v - return s -} - -// SetPrefixListId sets the PrefixListId field's value. -func (s *PrefixList) SetPrefixListId(v string) *PrefixList { - s.PrefixListId = &v - return s -} - -// SetPrefixListName sets the PrefixListName field's value. -func (s *PrefixList) SetPrefixListName(v string) *PrefixList { - s.PrefixListName = &v - return s -} - -// Describes a prefix list ID. -type PrefixListId struct { - _ struct{} `type:"structure"` - - // A description for the security group rule that references this prefix list - // ID. - // - // Constraints: Up to 255 characters in length. Allowed characters are a-z, - // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* - Description *string `locationName:"description" type:"string"` - - // The ID of the prefix. - PrefixListId *string `locationName:"prefixListId" type:"string"` -} - -// String returns the string representation -func (s PrefixListId) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PrefixListId) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *PrefixListId) SetDescription(v string) *PrefixListId { - s.Description = &v - return s -} - -// SetPrefixListId sets the PrefixListId field's value. -func (s *PrefixListId) SetPrefixListId(v string) *PrefixListId { - s.PrefixListId = &v - return s -} - -// Describes the price for a Reserved Instance. -type PriceSchedule struct { - _ struct{} `type:"structure"` - - // The current price schedule, as determined by the term remaining for the Reserved - // Instance in the listing. - // - // A specific price schedule is always in effect, but only one price schedule - // can be active at any time. Take, for example, a Reserved Instance listing - // that has five months remaining in its term. When you specify price schedules - // for five months and two months, this means that schedule 1, covering the - // first three months of the remaining term, will be active during months 5, - // 4, and 3. Then schedule 2, covering the last two months of the term, will - // be active for months 2 and 1. - Active *bool `locationName:"active" type:"boolean"` - - // The currency for transacting the Reserved Instance resale. At this time, - // the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The fixed price for the term. - Price *float64 `locationName:"price" type:"double"` - - // The number of months remaining in the reservation. For example, 2 is the - // second to the last month before the capacity reservation expires. - Term *int64 `locationName:"term" type:"long"` -} - -// String returns the string representation -func (s PriceSchedule) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PriceSchedule) GoString() string { - return s.String() -} - -// SetActive sets the Active field's value. -func (s *PriceSchedule) SetActive(v bool) *PriceSchedule { - s.Active = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PriceSchedule) SetCurrencyCode(v string) *PriceSchedule { - s.CurrencyCode = &v - return s -} - -// SetPrice sets the Price field's value. -func (s *PriceSchedule) SetPrice(v float64) *PriceSchedule { - s.Price = &v - return s -} - -// SetTerm sets the Term field's value. -func (s *PriceSchedule) SetTerm(v int64) *PriceSchedule { - s.Term = &v - return s -} - -// Describes the price for a Reserved Instance. -type PriceScheduleSpecification struct { - _ struct{} `type:"structure"` - - // The currency for transacting the Reserved Instance resale. At this time, - // the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The fixed price for the term. - Price *float64 `locationName:"price" type:"double"` - - // The number of months remaining in the reservation. For example, 2 is the - // second to the last month before the capacity reservation expires. - Term *int64 `locationName:"term" type:"long"` -} - -// String returns the string representation -func (s PriceScheduleSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PriceScheduleSpecification) GoString() string { - return s.String() -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PriceScheduleSpecification) SetCurrencyCode(v string) *PriceScheduleSpecification { - s.CurrencyCode = &v - return s -} - -// SetPrice sets the Price field's value. -func (s *PriceScheduleSpecification) SetPrice(v float64) *PriceScheduleSpecification { - s.Price = &v - return s -} - -// SetTerm sets the Term field's value. -func (s *PriceScheduleSpecification) SetTerm(v int64) *PriceScheduleSpecification { - s.Term = &v - return s -} - -// Describes a Reserved Instance offering. -type PricingDetail struct { - _ struct{} `type:"structure"` - - // The number of reservations available for the price. - Count *int64 `locationName:"count" type:"integer"` - - // The price per instance. - Price *float64 `locationName:"price" type:"double"` -} - -// String returns the string representation -func (s PricingDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PricingDetail) GoString() string { - return s.String() -} - -// SetCount sets the Count field's value. -func (s *PricingDetail) SetCount(v int64) *PricingDetail { - s.Count = &v - return s -} - -// SetPrice sets the Price field's value. -func (s *PricingDetail) SetPrice(v float64) *PricingDetail { - s.Price = &v - return s -} - -// PrincipalIdFormat description -type PrincipalIdFormat struct { - _ struct{} `type:"structure"` - - // PrincipalIdFormatARN description - Arn *string `locationName:"arn" type:"string"` - - // PrincipalIdFormatStatuses description - Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s PrincipalIdFormat) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PrincipalIdFormat) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *PrincipalIdFormat) SetArn(v string) *PrincipalIdFormat { - s.Arn = &v - return s -} - -// SetStatuses sets the Statuses field's value. -func (s *PrincipalIdFormat) SetStatuses(v []*IdFormat) *PrincipalIdFormat { - s.Statuses = v - return s -} - -// Describes a secondary private IPv4 address for a network interface. -type PrivateIpAddressSpecification struct { - _ struct{} `type:"structure"` - - // Indicates whether the private IPv4 address is the primary private IPv4 address. - // Only one IPv4 address can be designated as primary. - Primary *bool `locationName:"primary" type:"boolean"` - - // The private IPv4 addresses. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` -} - -// String returns the string representation -func (s PrivateIpAddressSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PrivateIpAddressSpecification) GoString() string { - return s.String() -} - -// SetPrimary sets the Primary field's value. -func (s *PrivateIpAddressSpecification) SetPrimary(v bool) *PrivateIpAddressSpecification { - s.Primary = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *PrivateIpAddressSpecification) SetPrivateIpAddress(v string) *PrivateIpAddressSpecification { - s.PrivateIpAddress = &v - return s -} - -// Describes the processor used by the instance type. -type ProcessorInfo struct { - _ struct{} `type:"structure"` - - // A list of architectures supported by the instance type. - SupportedArchitectures []*string `locationName:"supportedArchitectures" locationNameList:"item" type:"list"` - - // The speed of the processor, in GHz. - SustainedClockSpeedInGhz *float64 `locationName:"sustainedClockSpeedInGhz" type:"double"` -} - -// String returns the string representation -func (s ProcessorInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ProcessorInfo) GoString() string { - return s.String() -} - -// SetSupportedArchitectures sets the SupportedArchitectures field's value. -func (s *ProcessorInfo) SetSupportedArchitectures(v []*string) *ProcessorInfo { - s.SupportedArchitectures = v - return s -} - -// SetSustainedClockSpeedInGhz sets the SustainedClockSpeedInGhz field's value. -func (s *ProcessorInfo) SetSustainedClockSpeedInGhz(v float64) *ProcessorInfo { - s.SustainedClockSpeedInGhz = &v - return s -} - -// Describes a product code. -type ProductCode struct { - _ struct{} `type:"structure"` - - // The product code. - ProductCodeId *string `locationName:"productCode" type:"string"` - - // The type of product code. - ProductCodeType *string `locationName:"type" type:"string" enum:"ProductCodeValues"` -} - -// String returns the string representation -func (s ProductCode) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ProductCode) GoString() string { - return s.String() -} - -// SetProductCodeId sets the ProductCodeId field's value. -func (s *ProductCode) SetProductCodeId(v string) *ProductCode { - s.ProductCodeId = &v - return s -} - -// SetProductCodeType sets the ProductCodeType field's value. -func (s *ProductCode) SetProductCodeType(v string) *ProductCode { - s.ProductCodeType = &v - return s -} - -// Describes a virtual private gateway propagating route. -type PropagatingVgw struct { - _ struct{} `type:"structure"` - - // The ID of the virtual private gateway. - GatewayId *string `locationName:"gatewayId" type:"string"` -} - -// String returns the string representation -func (s PropagatingVgw) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PropagatingVgw) GoString() string { - return s.String() -} - -// SetGatewayId sets the GatewayId field's value. -func (s *PropagatingVgw) SetGatewayId(v string) *PropagatingVgw { - s.GatewayId = &v - return s -} - -type ProvisionByoipCidrInput struct { - _ struct{} `type:"structure"` - - // The public IPv4 address range, in CIDR notation. The most specific prefix - // that you can specify is /24. The address range cannot overlap with another - // address range that you've brought to this or another Region. - // - // Cidr is a required field - Cidr *string `type:"string" required:"true"` - - // A signed document that proves that you are authorized to bring the specified - // IP address range to Amazon using BYOIP. - CidrAuthorizationContext *CidrAuthorizationContext `type:"structure"` - - // A description for the address range and the address pool. - Description *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s ProvisionByoipCidrInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ProvisionByoipCidrInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ProvisionByoipCidrInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ProvisionByoipCidrInput"} - if s.Cidr == nil { - invalidParams.Add(request.NewErrParamRequired("Cidr")) - } - if s.CidrAuthorizationContext != nil { - if err := s.CidrAuthorizationContext.Validate(); err != nil { - invalidParams.AddNested("CidrAuthorizationContext", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidr sets the Cidr field's value. -func (s *ProvisionByoipCidrInput) SetCidr(v string) *ProvisionByoipCidrInput { - s.Cidr = &v - return s -} - -// SetCidrAuthorizationContext sets the CidrAuthorizationContext field's value. -func (s *ProvisionByoipCidrInput) SetCidrAuthorizationContext(v *CidrAuthorizationContext) *ProvisionByoipCidrInput { - s.CidrAuthorizationContext = v - return s -} - -// SetDescription sets the Description field's value. -func (s *ProvisionByoipCidrInput) SetDescription(v string) *ProvisionByoipCidrInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ProvisionByoipCidrInput) SetDryRun(v bool) *ProvisionByoipCidrInput { - s.DryRun = &v - return s -} - -type ProvisionByoipCidrOutput struct { - _ struct{} `type:"structure"` - - // Information about the address pool. - ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` -} - -// String returns the string representation -func (s ProvisionByoipCidrOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ProvisionByoipCidrOutput) GoString() string { - return s.String() -} - -// SetByoipCidr sets the ByoipCidr field's value. -func (s *ProvisionByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *ProvisionByoipCidrOutput { - s.ByoipCidr = v - return s -} - -// Reserved. If you need to sustain traffic greater than the documented limits -// (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), -// contact us through the Support Center (https://console.aws.amazon.com/support/home?). -type ProvisionedBandwidth struct { - _ struct{} `type:"structure"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - ProvisionTime *time.Time `locationName:"provisionTime" type:"timestamp"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - Provisioned *string `locationName:"provisioned" type:"string"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - RequestTime *time.Time `locationName:"requestTime" type:"timestamp"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - Requested *string `locationName:"requested" type:"string"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - Status *string `locationName:"status" type:"string"` -} - -// String returns the string representation -func (s ProvisionedBandwidth) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ProvisionedBandwidth) GoString() string { - return s.String() -} - -// SetProvisionTime sets the ProvisionTime field's value. -func (s *ProvisionedBandwidth) SetProvisionTime(v time.Time) *ProvisionedBandwidth { - s.ProvisionTime = &v - return s -} - -// SetProvisioned sets the Provisioned field's value. -func (s *ProvisionedBandwidth) SetProvisioned(v string) *ProvisionedBandwidth { - s.Provisioned = &v - return s -} - -// SetRequestTime sets the RequestTime field's value. -func (s *ProvisionedBandwidth) SetRequestTime(v time.Time) *ProvisionedBandwidth { - s.RequestTime = &v - return s -} - -// SetRequested sets the Requested field's value. -func (s *ProvisionedBandwidth) SetRequested(v string) *ProvisionedBandwidth { - s.Requested = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ProvisionedBandwidth) SetStatus(v string) *ProvisionedBandwidth { - s.Status = &v - return s -} - -// Describes an address pool. -type PublicIpv4Pool struct { - _ struct{} `type:"structure"` - - // A description of the address pool. - Description *string `locationName:"description" type:"string"` - - // The address ranges. - PoolAddressRanges []*PublicIpv4PoolRange `locationName:"poolAddressRangeSet" locationNameList:"item" type:"list"` - - // The ID of the IPv4 address pool. - PoolId *string `locationName:"poolId" type:"string"` - - // The total number of addresses. - TotalAddressCount *int64 `locationName:"totalAddressCount" type:"integer"` - - // The total number of available addresses. - TotalAvailableAddressCount *int64 `locationName:"totalAvailableAddressCount" type:"integer"` -} - -// String returns the string representation -func (s PublicIpv4Pool) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PublicIpv4Pool) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *PublicIpv4Pool) SetDescription(v string) *PublicIpv4Pool { - s.Description = &v - return s -} - -// SetPoolAddressRanges sets the PoolAddressRanges field's value. -func (s *PublicIpv4Pool) SetPoolAddressRanges(v []*PublicIpv4PoolRange) *PublicIpv4Pool { - s.PoolAddressRanges = v - return s -} - -// SetPoolId sets the PoolId field's value. -func (s *PublicIpv4Pool) SetPoolId(v string) *PublicIpv4Pool { - s.PoolId = &v - return s -} - -// SetTotalAddressCount sets the TotalAddressCount field's value. -func (s *PublicIpv4Pool) SetTotalAddressCount(v int64) *PublicIpv4Pool { - s.TotalAddressCount = &v - return s -} - -// SetTotalAvailableAddressCount sets the TotalAvailableAddressCount field's value. -func (s *PublicIpv4Pool) SetTotalAvailableAddressCount(v int64) *PublicIpv4Pool { - s.TotalAvailableAddressCount = &v - return s -} - -// Describes an address range of an IPv4 address pool. -type PublicIpv4PoolRange struct { - _ struct{} `type:"structure"` - - // The number of addresses in the range. - AddressCount *int64 `locationName:"addressCount" type:"integer"` - - // The number of available addresses in the range. - AvailableAddressCount *int64 `locationName:"availableAddressCount" type:"integer"` - - // The first IP address in the range. - FirstAddress *string `locationName:"firstAddress" type:"string"` - - // The last IP address in the range. - LastAddress *string `locationName:"lastAddress" type:"string"` -} - -// String returns the string representation -func (s PublicIpv4PoolRange) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PublicIpv4PoolRange) GoString() string { - return s.String() -} - -// SetAddressCount sets the AddressCount field's value. -func (s *PublicIpv4PoolRange) SetAddressCount(v int64) *PublicIpv4PoolRange { - s.AddressCount = &v - return s -} - -// SetAvailableAddressCount sets the AvailableAddressCount field's value. -func (s *PublicIpv4PoolRange) SetAvailableAddressCount(v int64) *PublicIpv4PoolRange { - s.AvailableAddressCount = &v - return s -} - -// SetFirstAddress sets the FirstAddress field's value. -func (s *PublicIpv4PoolRange) SetFirstAddress(v string) *PublicIpv4PoolRange { - s.FirstAddress = &v - return s -} - -// SetLastAddress sets the LastAddress field's value. -func (s *PublicIpv4PoolRange) SetLastAddress(v string) *PublicIpv4PoolRange { - s.LastAddress = &v - return s -} - -// Describes the result of the purchase. -type Purchase struct { - _ struct{} `type:"structure"` - - // The currency in which the UpfrontPrice and HourlyPrice amounts are specified. - // At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the reservation's term in seconds. - Duration *int64 `locationName:"duration" type:"integer"` - - // The IDs of the Dedicated Hosts associated with the reservation. - HostIdSet []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` - - // The ID of the reservation. - HostReservationId *string `locationName:"hostReservationId" type:"string"` - - // The hourly price of the reservation per hour. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The instance family on the Dedicated Host that the reservation can be associated - // with. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` - - // The payment option for the reservation. - PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` - - // The upfront price of the reservation. - UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` -} - -// String returns the string representation -func (s Purchase) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Purchase) GoString() string { - return s.String() -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *Purchase) SetCurrencyCode(v string) *Purchase { - s.CurrencyCode = &v - return s -} - -// SetDuration sets the Duration field's value. -func (s *Purchase) SetDuration(v int64) *Purchase { - s.Duration = &v - return s -} - -// SetHostIdSet sets the HostIdSet field's value. -func (s *Purchase) SetHostIdSet(v []*string) *Purchase { - s.HostIdSet = v - return s -} - -// SetHostReservationId sets the HostReservationId field's value. -func (s *Purchase) SetHostReservationId(v string) *Purchase { - s.HostReservationId = &v - return s -} - -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *Purchase) SetHourlyPrice(v string) *Purchase { - s.HourlyPrice = &v - return s -} - -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *Purchase) SetInstanceFamily(v string) *Purchase { - s.InstanceFamily = &v - return s -} - -// SetPaymentOption sets the PaymentOption field's value. -func (s *Purchase) SetPaymentOption(v string) *Purchase { - s.PaymentOption = &v - return s -} - -// SetUpfrontPrice sets the UpfrontPrice field's value. -func (s *Purchase) SetUpfrontPrice(v string) *Purchase { - s.UpfrontPrice = &v - return s -} - -type PurchaseHostReservationInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // The currency in which the totalUpfrontPrice, LimitPrice, and totalHourlyPrice - // amounts are specified. At this time, the only supported currency is USD. - CurrencyCode *string `type:"string" enum:"CurrencyCodeValues"` - - // The IDs of the Dedicated Hosts with which the reservation will be associated. - // - // HostIdSet is a required field - HostIdSet []*string `locationNameList:"item" type:"list" required:"true"` - - // The specified limit is checked against the total upfront cost of the reservation - // (calculated as the offering's upfront cost multiplied by the host count). - // If the total upfront cost is greater than the specified price limit, the - // request fails. This is used to ensure that the purchase does not exceed the - // expected upfront cost of the purchase. At this time, the only supported currency - // is USD. For example, to indicate a limit price of USD 100, specify 100.00. - LimitPrice *string `type:"string"` - - // The ID of the offering. - // - // OfferingId is a required field - OfferingId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s PurchaseHostReservationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseHostReservationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseHostReservationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseHostReservationInput"} - if s.HostIdSet == nil { - invalidParams.Add(request.NewErrParamRequired("HostIdSet")) - } - if s.OfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("OfferingId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *PurchaseHostReservationInput) SetClientToken(v string) *PurchaseHostReservationInput { - s.ClientToken = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PurchaseHostReservationInput) SetCurrencyCode(v string) *PurchaseHostReservationInput { - s.CurrencyCode = &v - return s -} - -// SetHostIdSet sets the HostIdSet field's value. -func (s *PurchaseHostReservationInput) SetHostIdSet(v []*string) *PurchaseHostReservationInput { - s.HostIdSet = v - return s -} - -// SetLimitPrice sets the LimitPrice field's value. -func (s *PurchaseHostReservationInput) SetLimitPrice(v string) *PurchaseHostReservationInput { - s.LimitPrice = &v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *PurchaseHostReservationInput) SetOfferingId(v string) *PurchaseHostReservationInput { - s.OfferingId = &v - return s -} - -type PurchaseHostReservationOutput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // The currency in which the totalUpfrontPrice and totalHourlyPrice amounts - // are specified. At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // Describes the details of the purchase. - Purchase []*Purchase `locationName:"purchase" locationNameList:"item" type:"list"` - - // The total hourly price of the reservation calculated per hour. - TotalHourlyPrice *string `locationName:"totalHourlyPrice" type:"string"` - - // The total amount charged to your account when you purchase the reservation. - TotalUpfrontPrice *string `locationName:"totalUpfrontPrice" type:"string"` -} - -// String returns the string representation -func (s PurchaseHostReservationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseHostReservationOutput) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *PurchaseHostReservationOutput) SetClientToken(v string) *PurchaseHostReservationOutput { - s.ClientToken = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PurchaseHostReservationOutput) SetCurrencyCode(v string) *PurchaseHostReservationOutput { - s.CurrencyCode = &v - return s -} - -// SetPurchase sets the Purchase field's value. -func (s *PurchaseHostReservationOutput) SetPurchase(v []*Purchase) *PurchaseHostReservationOutput { - s.Purchase = v - return s -} - -// SetTotalHourlyPrice sets the TotalHourlyPrice field's value. -func (s *PurchaseHostReservationOutput) SetTotalHourlyPrice(v string) *PurchaseHostReservationOutput { - s.TotalHourlyPrice = &v - return s -} - -// SetTotalUpfrontPrice sets the TotalUpfrontPrice field's value. -func (s *PurchaseHostReservationOutput) SetTotalUpfrontPrice(v string) *PurchaseHostReservationOutput { - s.TotalUpfrontPrice = &v - return s -} - -// Describes a request to purchase Scheduled Instances. -type PurchaseRequest struct { - _ struct{} `type:"structure"` - - // The number of instances. - // - // InstanceCount is a required field - InstanceCount *int64 `type:"integer" required:"true"` - - // The purchase token. - // - // PurchaseToken is a required field - PurchaseToken *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s PurchaseRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseRequest"} - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.PurchaseToken == nil { - invalidParams.Add(request.NewErrParamRequired("PurchaseToken")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *PurchaseRequest) SetInstanceCount(v int64) *PurchaseRequest { - s.InstanceCount = &v - return s -} - -// SetPurchaseToken sets the PurchaseToken field's value. -func (s *PurchaseRequest) SetPurchaseToken(v string) *PurchaseRequest { - s.PurchaseToken = &v - return s -} - -// Contains the parameters for PurchaseReservedInstancesOffering. -type PurchaseReservedInstancesOfferingInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The number of Reserved Instances to purchase. - // - // InstanceCount is a required field - InstanceCount *int64 `type:"integer" required:"true"` - - // Specified for Reserved Instance Marketplace offerings to limit the total - // order and ensure that the Reserved Instances are not purchased at unexpected - // prices. - LimitPrice *ReservedInstanceLimitPrice `locationName:"limitPrice" type:"structure"` - - // The time at which to purchase the Reserved Instance, in UTC format (for example, - // YYYY-MM-DDTHH:MM:SSZ). - PurchaseTime *time.Time `type:"timestamp"` - - // The ID of the Reserved Instance offering to purchase. - // - // ReservedInstancesOfferingId is a required field - ReservedInstancesOfferingId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s PurchaseReservedInstancesOfferingInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseReservedInstancesOfferingInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseReservedInstancesOfferingInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseReservedInstancesOfferingInput"} - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.ReservedInstancesOfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesOfferingId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetDryRun(v bool) *PurchaseReservedInstancesOfferingInput { - s.DryRun = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetInstanceCount(v int64) *PurchaseReservedInstancesOfferingInput { - s.InstanceCount = &v - return s -} - -// SetLimitPrice sets the LimitPrice field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetLimitPrice(v *ReservedInstanceLimitPrice) *PurchaseReservedInstancesOfferingInput { - s.LimitPrice = v - return s -} - -// SetPurchaseTime sets the PurchaseTime field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetPurchaseTime(v time.Time) *PurchaseReservedInstancesOfferingInput { - s.PurchaseTime = &v - return s -} - -// SetReservedInstancesOfferingId sets the ReservedInstancesOfferingId field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetReservedInstancesOfferingId(v string) *PurchaseReservedInstancesOfferingInput { - s.ReservedInstancesOfferingId = &v - return s -} - -// Contains the output of PurchaseReservedInstancesOffering. -type PurchaseReservedInstancesOfferingOutput struct { - _ struct{} `type:"structure"` - - // The IDs of the purchased Reserved Instances. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` -} - -// String returns the string representation -func (s PurchaseReservedInstancesOfferingOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseReservedInstancesOfferingOutput) GoString() string { - return s.String() -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *PurchaseReservedInstancesOfferingOutput) SetReservedInstancesId(v string) *PurchaseReservedInstancesOfferingOutput { - s.ReservedInstancesId = &v - return s -} - -// Contains the parameters for PurchaseScheduledInstances. -type PurchaseScheduledInstancesInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that ensures the idempotency of the request. - // For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The purchase requests. - // - // PurchaseRequests is a required field - PurchaseRequests []*PurchaseRequest `locationName:"PurchaseRequest" locationNameList:"PurchaseRequest" min:"1" type:"list" required:"true"` -} - -// String returns the string representation -func (s PurchaseScheduledInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseScheduledInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseScheduledInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseScheduledInstancesInput"} - if s.PurchaseRequests == nil { - invalidParams.Add(request.NewErrParamRequired("PurchaseRequests")) - } - if s.PurchaseRequests != nil && len(s.PurchaseRequests) < 1 { - invalidParams.Add(request.NewErrParamMinLen("PurchaseRequests", 1)) - } - if s.PurchaseRequests != nil { - for i, v := range s.PurchaseRequests { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PurchaseRequests", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *PurchaseScheduledInstancesInput) SetClientToken(v string) *PurchaseScheduledInstancesInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *PurchaseScheduledInstancesInput) SetDryRun(v bool) *PurchaseScheduledInstancesInput { - s.DryRun = &v - return s -} - -// SetPurchaseRequests sets the PurchaseRequests field's value. -func (s *PurchaseScheduledInstancesInput) SetPurchaseRequests(v []*PurchaseRequest) *PurchaseScheduledInstancesInput { - s.PurchaseRequests = v - return s -} - -// Contains the output of PurchaseScheduledInstances. -type PurchaseScheduledInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about the Scheduled Instances. - ScheduledInstanceSet []*ScheduledInstance `locationName:"scheduledInstanceSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s PurchaseScheduledInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PurchaseScheduledInstancesOutput) GoString() string { - return s.String() -} - -// SetScheduledInstanceSet sets the ScheduledInstanceSet field's value. -func (s *PurchaseScheduledInstancesOutput) SetScheduledInstanceSet(v []*ScheduledInstance) *PurchaseScheduledInstancesOutput { - s.ScheduledInstanceSet = v - return s -} - -type RebootInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The instance IDs. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` -} - -// String returns the string representation -func (s RebootInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RebootInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RebootInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RebootInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RebootInstancesInput) SetDryRun(v bool) *RebootInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *RebootInstancesInput) SetInstanceIds(v []*string) *RebootInstancesInput { - s.InstanceIds = v - return s -} - -type RebootInstancesOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RebootInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RebootInstancesOutput) GoString() string { - return s.String() -} - -// Describes a recurring charge. -type RecurringCharge struct { - _ struct{} `type:"structure"` - - // The amount of the recurring charge. - Amount *float64 `locationName:"amount" type:"double"` - - // The frequency of the recurring charge. - Frequency *string `locationName:"frequency" type:"string" enum:"RecurringChargeFrequency"` -} - -// String returns the string representation -func (s RecurringCharge) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RecurringCharge) GoString() string { - return s.String() -} - -// SetAmount sets the Amount field's value. -func (s *RecurringCharge) SetAmount(v float64) *RecurringCharge { - s.Amount = &v - return s -} - -// SetFrequency sets the Frequency field's value. -func (s *RecurringCharge) SetFrequency(v string) *RecurringCharge { - s.Frequency = &v - return s -} - -// Describes a Region. -type Region struct { - _ struct{} `type:"structure"` - - // The Region service endpoint. - Endpoint *string `locationName:"regionEndpoint" type:"string"` - - // The Region opt-in status. The possible values are opt-in-not-required, opted-in, - // and not-opted-in. - OptInStatus *string `locationName:"optInStatus" type:"string"` - - // The name of the Region. - RegionName *string `locationName:"regionName" type:"string"` -} - -// String returns the string representation -func (s Region) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Region) GoString() string { - return s.String() -} - -// SetEndpoint sets the Endpoint field's value. -func (s *Region) SetEndpoint(v string) *Region { - s.Endpoint = &v - return s -} - -// SetOptInStatus sets the OptInStatus field's value. -func (s *Region) SetOptInStatus(v string) *Region { - s.OptInStatus = &v - return s -} - -// SetRegionName sets the RegionName field's value. -func (s *Region) SetRegionName(v string) *Region { - s.RegionName = &v - return s -} - -// Contains the parameters for RegisterImage. -type RegisterImageInput struct { - _ struct{} `type:"structure"` - - // The architecture of the AMI. - // - // Default: For Amazon EBS-backed AMIs, i386. For instance store-backed AMIs, - // the architecture specified in the manifest file. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - - // The billing product codes. Your account must be authorized to specify billing - // product codes. Otherwise, you can use the AWS Marketplace to bill for the - // use of an AMI. - BillingProducts []*string `locationName:"BillingProduct" locationNameList:"item" type:"list"` - - // The block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // A description for your AMI. - Description *string `locationName:"description" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Set to true to enable enhanced networking with ENA for the AMI and any instances - // that you launch from the AMI. - // - // This option is supported only for HVM AMIs. Specifying this option with a - // PV AMI can make instances launched from the AMI unreachable. - EnaSupport *bool `locationName:"enaSupport" type:"boolean"` - - // The full path to your AMI manifest in Amazon S3 storage. The specified bucket - // must have the aws-exec-read canned access control list (ACL) to ensure that - // it can be accessed by Amazon EC2. For more information, see Canned ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) - // in the Amazon S3 Service Developer Guide. - ImageLocation *string `type:"string"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // A name for your AMI. - // - // Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets - // ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), - // at-signs (@), or underscores(_) - // - // Name is a required field - Name *string `locationName:"name" type:"string" required:"true"` - - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // The device name of the root device volume (for example, /dev/sda1). - RootDeviceName *string `locationName:"rootDeviceName" type:"string"` - - // Set to simple to enable enhanced networking with the Intel 82599 Virtual - // Function interface for the AMI and any instances that you launch from the - // AMI. - // - // There is no way to disable sriovNetSupport at this time. - // - // This option is supported only for HVM AMIs. Specifying this option with a - // PV AMI can make instances launched from the AMI unreachable. - SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` - - // The type of virtualization (hvm | paravirtual). - // - // Default: paravirtual - VirtualizationType *string `locationName:"virtualizationType" type:"string"` -} - -// String returns the string representation -func (s RegisterImageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RegisterImageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RegisterImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RegisterImageInput"} - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetArchitecture sets the Architecture field's value. -func (s *RegisterImageInput) SetArchitecture(v string) *RegisterImageInput { - s.Architecture = &v - return s -} - -// SetBillingProducts sets the BillingProducts field's value. -func (s *RegisterImageInput) SetBillingProducts(v []*string) *RegisterImageInput { - s.BillingProducts = v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RegisterImageInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RegisterImageInput { - s.BlockDeviceMappings = v - return s -} - -// SetDescription sets the Description field's value. -func (s *RegisterImageInput) SetDescription(v string) *RegisterImageInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RegisterImageInput) SetDryRun(v bool) *RegisterImageInput { - s.DryRun = &v - return s -} - -// SetEnaSupport sets the EnaSupport field's value. -func (s *RegisterImageInput) SetEnaSupport(v bool) *RegisterImageInput { - s.EnaSupport = &v - return s -} - -// SetImageLocation sets the ImageLocation field's value. -func (s *RegisterImageInput) SetImageLocation(v string) *RegisterImageInput { - s.ImageLocation = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *RegisterImageInput) SetKernelId(v string) *RegisterImageInput { - s.KernelId = &v - return s -} - -// SetName sets the Name field's value. -func (s *RegisterImageInput) SetName(v string) *RegisterImageInput { - s.Name = &v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *RegisterImageInput) SetRamdiskId(v string) *RegisterImageInput { - s.RamdiskId = &v - return s -} - -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *RegisterImageInput) SetRootDeviceName(v string) *RegisterImageInput { - s.RootDeviceName = &v - return s -} - -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *RegisterImageInput) SetSriovNetSupport(v string) *RegisterImageInput { - s.SriovNetSupport = &v - return s -} - -// SetVirtualizationType sets the VirtualizationType field's value. -func (s *RegisterImageInput) SetVirtualizationType(v string) *RegisterImageInput { - s.VirtualizationType = &v - return s -} - -// Contains the output of RegisterImage. -type RegisterImageOutput struct { - _ struct{} `type:"structure"` - - // The ID of the newly registered AMI. - ImageId *string `locationName:"imageId" type:"string"` -} - -// String returns the string representation -func (s RegisterImageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RegisterImageOutput) GoString() string { - return s.String() -} - -// SetImageId sets the ImageId field's value. -func (s *RegisterImageOutput) SetImageId(v string) *RegisterImageOutput { - s.ImageId = &v - return s -} - -type RejectTransitGatewayVpcAttachmentInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - // - // TransitGatewayAttachmentId is a required field - TransitGatewayAttachmentId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s RejectTransitGatewayVpcAttachmentInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RejectTransitGatewayVpcAttachmentInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RejectTransitGatewayVpcAttachmentInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RejectTransitGatewayVpcAttachmentInput"} - if s.TransitGatewayAttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RejectTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *RejectTransitGatewayVpcAttachmentInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *RejectTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *RejectTransitGatewayVpcAttachmentInput { - s.TransitGatewayAttachmentId = &v - return s -} - -type RejectTransitGatewayVpcAttachmentOutput struct { - _ struct{} `type:"structure"` - - // Information about the attachment. - TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` -} - -// String returns the string representation -func (s RejectTransitGatewayVpcAttachmentOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RejectTransitGatewayVpcAttachmentOutput) GoString() string { - return s.String() -} - -// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. -func (s *RejectTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *RejectTransitGatewayVpcAttachmentOutput { - s.TransitGatewayVpcAttachment = v - return s -} - -type RejectVpcEndpointConnectionsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the service. - // - // ServiceId is a required field - ServiceId *string `type:"string" required:"true"` - - // The IDs of one or more VPC endpoints. - // - // VpcEndpointIds is a required field - VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s RejectVpcEndpointConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RejectVpcEndpointConnectionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RejectVpcEndpointConnectionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RejectVpcEndpointConnectionsInput"} - if s.ServiceId == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceId")) - } - if s.VpcEndpointIds == nil { - invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RejectVpcEndpointConnectionsInput) SetDryRun(v bool) *RejectVpcEndpointConnectionsInput { - s.DryRun = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *RejectVpcEndpointConnectionsInput) SetServiceId(v string) *RejectVpcEndpointConnectionsInput { - s.ServiceId = &v - return s -} - -// SetVpcEndpointIds sets the VpcEndpointIds field's value. -func (s *RejectVpcEndpointConnectionsInput) SetVpcEndpointIds(v []*string) *RejectVpcEndpointConnectionsInput { - s.VpcEndpointIds = v - return s -} - -type RejectVpcEndpointConnectionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the endpoints that were not rejected, if applicable. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s RejectVpcEndpointConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RejectVpcEndpointConnectionsOutput) GoString() string { - return s.String() -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *RejectVpcEndpointConnectionsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *RejectVpcEndpointConnectionsOutput { - s.Unsuccessful = v - return s -} - -type RejectVpcPeeringConnectionInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC peering connection. - // - // VpcPeeringConnectionId is a required field - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string" required:"true"` -} - -// String returns the string representation -func (s RejectVpcPeeringConnectionInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RejectVpcPeeringConnectionInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RejectVpcPeeringConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RejectVpcPeeringConnectionInput"} - if s.VpcPeeringConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RejectVpcPeeringConnectionInput) SetDryRun(v bool) *RejectVpcPeeringConnectionInput { - s.DryRun = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *RejectVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *RejectVpcPeeringConnectionInput { - s.VpcPeeringConnectionId = &v - return s -} - -type RejectVpcPeeringConnectionOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s RejectVpcPeeringConnectionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RejectVpcPeeringConnectionOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *RejectVpcPeeringConnectionOutput) SetReturn(v bool) *RejectVpcPeeringConnectionOutput { - s.Return = &v - return s -} - -type ReleaseAddressInput struct { - _ struct{} `type:"structure"` - - // [EC2-VPC] The allocation ID. Required for EC2-VPC. - AllocationId *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // [EC2-Classic] The Elastic IP address. Required for EC2-Classic. - PublicIp *string `type:"string"` -} - -// String returns the string representation -func (s ReleaseAddressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReleaseAddressInput) GoString() string { - return s.String() -} - -// SetAllocationId sets the AllocationId field's value. -func (s *ReleaseAddressInput) SetAllocationId(v string) *ReleaseAddressInput { - s.AllocationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReleaseAddressInput) SetDryRun(v bool) *ReleaseAddressInput { - s.DryRun = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *ReleaseAddressInput) SetPublicIp(v string) *ReleaseAddressInput { - s.PublicIp = &v - return s -} - -type ReleaseAddressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ReleaseAddressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReleaseAddressOutput) GoString() string { - return s.String() -} - -type ReleaseHostsInput struct { - _ struct{} `type:"structure"` - - // The IDs of the Dedicated Hosts to release. - // - // HostIds is a required field - HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s ReleaseHostsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReleaseHostsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReleaseHostsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReleaseHostsInput"} - if s.HostIds == nil { - invalidParams.Add(request.NewErrParamRequired("HostIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetHostIds sets the HostIds field's value. -func (s *ReleaseHostsInput) SetHostIds(v []*string) *ReleaseHostsInput { - s.HostIds = v - return s -} - -type ReleaseHostsOutput struct { - _ struct{} `type:"structure"` - - // The IDs of the Dedicated Hosts that were successfully released. - Successful []*string `locationName:"successful" locationNameList:"item" type:"list"` - - // The IDs of the Dedicated Hosts that could not be released, including an error - // message. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ReleaseHostsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReleaseHostsOutput) GoString() string { - return s.String() -} - -// SetSuccessful sets the Successful field's value. -func (s *ReleaseHostsOutput) SetSuccessful(v []*string) *ReleaseHostsOutput { - s.Successful = v - return s -} - -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *ReleaseHostsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *ReleaseHostsOutput { - s.Unsuccessful = v - return s -} - -type ReplaceIamInstanceProfileAssociationInput struct { - _ struct{} `type:"structure"` - - // The ID of the existing IAM instance profile association. - // - // AssociationId is a required field - AssociationId *string `type:"string" required:"true"` - - // The IAM instance profile. - // - // IamInstanceProfile is a required field - IamInstanceProfile *IamInstanceProfileSpecification `type:"structure" required:"true"` -} - -// String returns the string representation -func (s ReplaceIamInstanceProfileAssociationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceIamInstanceProfileAssociationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceIamInstanceProfileAssociationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceIamInstanceProfileAssociationInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - if s.IamInstanceProfile == nil { - invalidParams.Add(request.NewErrParamRequired("IamInstanceProfile")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *ReplaceIamInstanceProfileAssociationInput) SetAssociationId(v string) *ReplaceIamInstanceProfileAssociationInput { - s.AssociationId = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *ReplaceIamInstanceProfileAssociationInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *ReplaceIamInstanceProfileAssociationInput { - s.IamInstanceProfile = v - return s -} - -type ReplaceIamInstanceProfileAssociationOutput struct { - _ struct{} `type:"structure"` - - // Information about the IAM instance profile association. - IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` -} - -// String returns the string representation -func (s ReplaceIamInstanceProfileAssociationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceIamInstanceProfileAssociationOutput) GoString() string { - return s.String() -} - -// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. -func (s *ReplaceIamInstanceProfileAssociationOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *ReplaceIamInstanceProfileAssociationOutput { - s.IamInstanceProfileAssociation = v - return s -} - -type ReplaceNetworkAclAssociationInput struct { - _ struct{} `type:"structure"` - - // The ID of the current association between the original network ACL and the - // subnet. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the new network ACL to associate with the subnet. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` -} - -// String returns the string representation -func (s ReplaceNetworkAclAssociationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceNetworkAclAssociationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceNetworkAclAssociationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceNetworkAclAssociationInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *ReplaceNetworkAclAssociationInput) SetAssociationId(v string) *ReplaceNetworkAclAssociationInput { - s.AssociationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReplaceNetworkAclAssociationInput) SetDryRun(v bool) *ReplaceNetworkAclAssociationInput { - s.DryRun = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *ReplaceNetworkAclAssociationInput) SetNetworkAclId(v string) *ReplaceNetworkAclAssociationInput { - s.NetworkAclId = &v - return s -} - -type ReplaceNetworkAclAssociationOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new association. - NewAssociationId *string `locationName:"newAssociationId" type:"string"` -} - -// String returns the string representation -func (s ReplaceNetworkAclAssociationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceNetworkAclAssociationOutput) GoString() string { - return s.String() -} - -// SetNewAssociationId sets the NewAssociationId field's value. -func (s *ReplaceNetworkAclAssociationOutput) SetNewAssociationId(v string) *ReplaceNetworkAclAssociationOutput { - s.NewAssociationId = &v - return s -} - -type ReplaceNetworkAclEntryInput struct { - _ struct{} `type:"structure"` - - // The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Indicates whether to replace the egress rule. - // - // Default: If no value is specified, we replace the ingress rule. - // - // Egress is a required field - Egress *bool `locationName:"egress" type:"boolean" required:"true"` - - // ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol - // 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block. - IcmpTypeCode *IcmpTypeCode `locationName:"Icmp" type:"structure"` - - // The IPv6 network range to allow or deny, in CIDR notation (for example 2001:bd8:1234:1a00::/64). - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - - // The ID of the ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` - - // TCP or UDP protocols: The range of ports the rule applies to. Required if - // specifying protocol 6 (TCP) or 17 (UDP). - PortRange *PortRange `locationName:"portRange" type:"structure"` - - // The protocol number. A value of "-1" means all protocols. If you specify - // "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), - // traffic on all ports is allowed, regardless of any ports or ICMP types or - // codes that you specify. If you specify protocol "58" (ICMPv6) and specify - // an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless - // of any that you specify. If you specify protocol "58" (ICMPv6) and specify - // an IPv6 CIDR block, you must specify an ICMP type and code. - // - // Protocol is a required field - Protocol *string `locationName:"protocol" type:"string" required:"true"` - - // Indicates whether to allow or deny the traffic that matches the rule. - // - // RuleAction is a required field - RuleAction *string `locationName:"ruleAction" type:"string" required:"true" enum:"RuleAction"` - - // The rule number of the entry to replace. - // - // RuleNumber is a required field - RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` -} - -// String returns the string representation -func (s ReplaceNetworkAclEntryInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceNetworkAclEntryInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceNetworkAclEntryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceNetworkAclEntryInput"} - if s.Egress == nil { - invalidParams.Add(request.NewErrParamRequired("Egress")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - if s.Protocol == nil { - invalidParams.Add(request.NewErrParamRequired("Protocol")) - } - if s.RuleAction == nil { - invalidParams.Add(request.NewErrParamRequired("RuleAction")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *ReplaceNetworkAclEntryInput) SetCidrBlock(v string) *ReplaceNetworkAclEntryInput { - s.CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReplaceNetworkAclEntryInput) SetDryRun(v bool) *ReplaceNetworkAclEntryInput { - s.DryRun = &v - return s -} - -// SetEgress sets the Egress field's value. -func (s *ReplaceNetworkAclEntryInput) SetEgress(v bool) *ReplaceNetworkAclEntryInput { - s.Egress = &v - return s -} - -// SetIcmpTypeCode sets the IcmpTypeCode field's value. -func (s *ReplaceNetworkAclEntryInput) SetIcmpTypeCode(v *IcmpTypeCode) *ReplaceNetworkAclEntryInput { - s.IcmpTypeCode = v - return s -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *ReplaceNetworkAclEntryInput) SetIpv6CidrBlock(v string) *ReplaceNetworkAclEntryInput { - s.Ipv6CidrBlock = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *ReplaceNetworkAclEntryInput) SetNetworkAclId(v string) *ReplaceNetworkAclEntryInput { - s.NetworkAclId = &v - return s -} - -// SetPortRange sets the PortRange field's value. -func (s *ReplaceNetworkAclEntryInput) SetPortRange(v *PortRange) *ReplaceNetworkAclEntryInput { - s.PortRange = v - return s -} - -// SetProtocol sets the Protocol field's value. -func (s *ReplaceNetworkAclEntryInput) SetProtocol(v string) *ReplaceNetworkAclEntryInput { - s.Protocol = &v - return s -} - -// SetRuleAction sets the RuleAction field's value. -func (s *ReplaceNetworkAclEntryInput) SetRuleAction(v string) *ReplaceNetworkAclEntryInput { - s.RuleAction = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *ReplaceNetworkAclEntryInput) SetRuleNumber(v int64) *ReplaceNetworkAclEntryInput { - s.RuleNumber = &v - return s -} - -type ReplaceNetworkAclEntryOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ReplaceNetworkAclEntryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceNetworkAclEntryOutput) GoString() string { - return s.String() -} - -type ReplaceRouteInput struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR address block used for the destination match. The value that - // you provide must match the CIDR of an existing route in the table. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR address block used for the destination match. The value that - // you provide must match the CIDR of an existing route in the table. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // [IPv6 traffic only] The ID of an egress-only internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` - - // The ID of an internet gateway or virtual private gateway. - GatewayId *string `locationName:"gatewayId" type:"string"` - - // The ID of a NAT instance in your VPC. - InstanceId *string `locationName:"instanceId" type:"string"` - - // [IPv4 traffic only] The ID of a NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` - - // The ID of a network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` - - // The ID of a transit gateway. - TransitGatewayId *string `type:"string"` - - // The ID of a VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s ReplaceRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceRouteInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *ReplaceRouteInput) SetDestinationCidrBlock(v string) *ReplaceRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *ReplaceRouteInput) SetDestinationIpv6CidrBlock(v string) *ReplaceRouteInput { - s.DestinationIpv6CidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReplaceRouteInput) SetDryRun(v bool) *ReplaceRouteInput { - s.DryRun = &v - return s -} - -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *ReplaceRouteInput) SetEgressOnlyInternetGatewayId(v string) *ReplaceRouteInput { - s.EgressOnlyInternetGatewayId = &v - return s -} - -// SetGatewayId sets the GatewayId field's value. -func (s *ReplaceRouteInput) SetGatewayId(v string) *ReplaceRouteInput { - s.GatewayId = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ReplaceRouteInput) SetInstanceId(v string) *ReplaceRouteInput { - s.InstanceId = &v - return s -} - -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *ReplaceRouteInput) SetNatGatewayId(v string) *ReplaceRouteInput { - s.NatGatewayId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ReplaceRouteInput) SetNetworkInterfaceId(v string) *ReplaceRouteInput { - s.NetworkInterfaceId = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *ReplaceRouteInput) SetRouteTableId(v string) *ReplaceRouteInput { - s.RouteTableId = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *ReplaceRouteInput) SetTransitGatewayId(v string) *ReplaceRouteInput { - s.TransitGatewayId = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *ReplaceRouteInput) SetVpcPeeringConnectionId(v string) *ReplaceRouteInput { - s.VpcPeeringConnectionId = &v - return s -} - -type ReplaceRouteOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ReplaceRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceRouteOutput) GoString() string { - return s.String() -} - -type ReplaceRouteTableAssociationInput struct { - _ struct{} `type:"structure"` - - // The association ID. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the new route table to associate with the subnet. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` -} - -// String returns the string representation -func (s ReplaceRouteTableAssociationInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceRouteTableAssociationInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceRouteTableAssociationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceRouteTableAssociationInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *ReplaceRouteTableAssociationInput) SetAssociationId(v string) *ReplaceRouteTableAssociationInput { - s.AssociationId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReplaceRouteTableAssociationInput) SetDryRun(v bool) *ReplaceRouteTableAssociationInput { - s.DryRun = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *ReplaceRouteTableAssociationInput) SetRouteTableId(v string) *ReplaceRouteTableAssociationInput { - s.RouteTableId = &v - return s -} - -type ReplaceRouteTableAssociationOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new association. - NewAssociationId *string `locationName:"newAssociationId" type:"string"` -} - -// String returns the string representation -func (s ReplaceRouteTableAssociationOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceRouteTableAssociationOutput) GoString() string { - return s.String() -} - -// SetNewAssociationId sets the NewAssociationId field's value. -func (s *ReplaceRouteTableAssociationOutput) SetNewAssociationId(v string) *ReplaceRouteTableAssociationOutput { - s.NewAssociationId = &v - return s -} - -type ReplaceTransitGatewayRouteInput struct { - _ struct{} `type:"structure"` - - // Indicates whether traffic matching this route is to be dropped. - Blackhole *bool `type:"boolean"` - - // The CIDR range used for the destination match. Routing decisions are based - // on the most specific match. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `type:"string"` - - // The ID of the route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ReplaceTransitGatewayRouteInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceTransitGatewayRouteInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceTransitGatewayRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceTransitGatewayRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBlackhole sets the Blackhole field's value. -func (s *ReplaceTransitGatewayRouteInput) SetBlackhole(v bool) *ReplaceTransitGatewayRouteInput { - s.Blackhole = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *ReplaceTransitGatewayRouteInput) SetDestinationCidrBlock(v string) *ReplaceTransitGatewayRouteInput { - s.DestinationCidrBlock = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReplaceTransitGatewayRouteInput) SetDryRun(v bool) *ReplaceTransitGatewayRouteInput { - s.DryRun = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *ReplaceTransitGatewayRouteInput) SetTransitGatewayAttachmentId(v string) *ReplaceTransitGatewayRouteInput { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *ReplaceTransitGatewayRouteInput) SetTransitGatewayRouteTableId(v string) *ReplaceTransitGatewayRouteInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type ReplaceTransitGatewayRouteOutput struct { - _ struct{} `type:"structure"` - - // Information about the modified route. - Route *TransitGatewayRoute `locationName:"route" type:"structure"` -} - -// String returns the string representation -func (s ReplaceTransitGatewayRouteOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReplaceTransitGatewayRouteOutput) GoString() string { - return s.String() -} - -// SetRoute sets the Route field's value. -func (s *ReplaceTransitGatewayRouteOutput) SetRoute(v *TransitGatewayRoute) *ReplaceTransitGatewayRouteOutput { - s.Route = v - return s -} - -type ReportInstanceStatusInput struct { - _ struct{} `type:"structure"` - - // Descriptive text about the health state of your instance. - Description *string `locationName:"description" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The time at which the reported instance health state ended. - EndTime *time.Time `locationName:"endTime" type:"timestamp"` - - // The instances. - // - // Instances is a required field - Instances []*string `locationName:"instanceId" locationNameList:"InstanceId" type:"list" required:"true"` - - // The reason codes that describe the health state of your instance. - // - // * instance-stuck-in-state: My instance is stuck in a state. - // - // * unresponsive: My instance is unresponsive. - // - // * not-accepting-credentials: My instance is not accepting my credentials. - // - // * password-not-available: A password is not available for my instance. - // - // * performance-network: My instance is experiencing performance problems - // that I believe are network related. - // - // * performance-instance-store: My instance is experiencing performance - // problems that I believe are related to the instance stores. - // - // * performance-ebs-volume: My instance is experiencing performance problems - // that I believe are related to an EBS volume. - // - // * performance-other: My instance is experiencing performance problems. - // - // * other: [explain using the description parameter] - // - // ReasonCodes is a required field - ReasonCodes []*string `locationName:"reasonCode" locationNameList:"item" type:"list" required:"true"` - - // The time at which the reported instance health state began. - StartTime *time.Time `locationName:"startTime" type:"timestamp"` - - // The status of all instances listed. - // - // Status is a required field - Status *string `locationName:"status" type:"string" required:"true" enum:"ReportStatusType"` -} - -// String returns the string representation -func (s ReportInstanceStatusInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReportInstanceStatusInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReportInstanceStatusInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReportInstanceStatusInput"} - if s.Instances == nil { - invalidParams.Add(request.NewErrParamRequired("Instances")) - } - if s.ReasonCodes == nil { - invalidParams.Add(request.NewErrParamRequired("ReasonCodes")) - } - if s.Status == nil { - invalidParams.Add(request.NewErrParamRequired("Status")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *ReportInstanceStatusInput) SetDescription(v string) *ReportInstanceStatusInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ReportInstanceStatusInput) SetDryRun(v bool) *ReportInstanceStatusInput { - s.DryRun = &v - return s -} - -// SetEndTime sets the EndTime field's value. -func (s *ReportInstanceStatusInput) SetEndTime(v time.Time) *ReportInstanceStatusInput { - s.EndTime = &v - return s -} - -// SetInstances sets the Instances field's value. -func (s *ReportInstanceStatusInput) SetInstances(v []*string) *ReportInstanceStatusInput { - s.Instances = v - return s -} - -// SetReasonCodes sets the ReasonCodes field's value. -func (s *ReportInstanceStatusInput) SetReasonCodes(v []*string) *ReportInstanceStatusInput { - s.ReasonCodes = v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *ReportInstanceStatusInput) SetStartTime(v time.Time) *ReportInstanceStatusInput { - s.StartTime = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ReportInstanceStatusInput) SetStatus(v string) *ReportInstanceStatusInput { - s.Status = &v - return s -} - -type ReportInstanceStatusOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ReportInstanceStatusOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReportInstanceStatusOutput) GoString() string { - return s.String() -} - -// The information to include in the launch template. -type RequestLaunchTemplateData struct { - _ struct{} `type:"structure"` - - // The block device mapping. - // - // Supplying both a snapshot ID and an encryption value as arguments for block-device - // mapping results in an error. This is because only blank volumes can be encrypted - // on start, and these are not created from a snapshot. If a snapshot is the - // basis for the volume, it contains data by definition and its encryption status - // cannot be changed using this action. - BlockDeviceMappings []*LaunchTemplateBlockDeviceMappingRequest `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // The Capacity Reservation targeting option. If you do not specify this parameter, - // the instance's Capacity Reservation preference defaults to open, which enables - // it to run in any open Capacity Reservation that has matching attributes (instance - // type, platform, Availability Zone). - CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationRequest `type:"structure"` - - // The CPU options for the instance. For more information, see Optimizing CPU - // Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) - // in the Amazon Elastic Compute Cloud User Guide. - CpuOptions *LaunchTemplateCpuOptionsRequest `type:"structure"` - - // The credit option for CPU usage of the instance. Valid for T2 or T3 instances - // only. - CreditSpecification *CreditSpecificationRequest `type:"structure"` - - // If you set this parameter to true, you can't terminate the instance using - // the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute - // after launch, use ModifyInstanceAttribute (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html). - // Alternatively, if you set InstanceInitiatedShutdownBehavior to terminate, - // you can terminate the instance by running the shutdown command from the instance. - DisableApiTermination *bool `type:"boolean"` - - // Indicates whether the instance is optimized for Amazon EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal Amazon EBS I/O performance. This optimization isn't - // available with all instance types. Additional usage charges apply when using - // an EBS-optimized instance. - EbsOptimized *bool `type:"boolean"` - - // An elastic GPU to associate with the instance. - ElasticGpuSpecifications []*ElasticGpuSpecification `locationName:"ElasticGpuSpecification" locationNameList:"ElasticGpuSpecification" type:"list"` - - // The elastic inference accelerator for the instance. - ElasticInferenceAccelerators []*LaunchTemplateElasticInferenceAccelerator `locationName:"ElasticInferenceAccelerator" locationNameList:"item" type:"list"` - - // Indicates whether an instance is enabled for hibernation. This parameter - // is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). - // For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) - // in the Amazon Elastic Compute Cloud User Guide. - HibernationOptions *LaunchTemplateHibernationOptionsRequest `type:"structure"` - - // The IAM instance profile. - IamInstanceProfile *LaunchTemplateIamInstanceProfileSpecificationRequest `type:"structure"` - - // The ID of the AMI. - ImageId *string `type:"string"` - - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - // - // Default: stop - InstanceInitiatedShutdownBehavior *string `type:"string" enum:"ShutdownBehavior"` - - // The market (purchasing) option for the instances. - InstanceMarketOptions *LaunchTemplateInstanceMarketOptionsRequest `type:"structure"` - - // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceType *string `type:"string" enum:"InstanceType"` - - // The ID of the kernel. - // - // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more - // information, see User Provided Kernels (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) - // in the Amazon Elastic Compute Cloud User Guide. - KernelId *string `type:"string"` - - // The name of the key pair. You can create a key pair using CreateKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html) - // or ImportKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html). - // - // If you do not specify a key pair, you can't connect to the instance unless - // you choose an AMI that is configured to allow users another way to log in. - KeyName *string `type:"string"` - - // The license configurations. - LicenseSpecifications []*LaunchTemplateLicenseConfigurationRequest `locationName:"LicenseSpecification" locationNameList:"item" type:"list"` - - // The monitoring for the instance. - Monitoring *LaunchTemplatesMonitoringRequest `type:"structure"` - - // One or more network interfaces. If you specify a network interface, you must - // specify any security groups and subnets as part of the network interface. - NetworkInterfaces []*LaunchTemplateInstanceNetworkInterfaceSpecificationRequest `locationName:"NetworkInterface" locationNameList:"InstanceNetworkInterfaceSpecification" type:"list"` - - // The placement for the instance. - Placement *LaunchTemplatePlacementRequest `type:"structure"` - - // The ID of the RAM disk. - // - // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more - // information, see User Provided Kernels (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) - // in the Amazon Elastic Compute Cloud User Guide. - RamDiskId *string `type:"string"` - - // One or more security group IDs. You can create a security group using CreateSecurityGroup - // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html). - // You cannot specify both a security group ID and security name in the same - // request. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // [EC2-Classic, default VPC] One or more security group names. For a nondefault - // VPC, you must use security group IDs instead. You cannot specify both a security - // group ID and security name in the same request. - SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"SecurityGroup" type:"list"` - - // The tags to apply to the resources during launch. You can only tag instances - // and volumes on launch. The specified tags are applied to all instances or - // volumes that are created during launch. To tag a resource after it has been - // created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). - TagSpecifications []*LaunchTemplateTagSpecificationRequest `locationName:"TagSpecification" locationNameList:"LaunchTemplateTagSpecificationRequest" type:"list"` - - // The Base64-encoded user data to make available to the instance. For more - // information, see Running Commands on Your Linux Instance at Launch (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) - // (Linux) and Adding User Data (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data) - // (Windows). - UserData *string `type:"string"` -} - -// String returns the string representation -func (s RequestLaunchTemplateData) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RequestLaunchTemplateData) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RequestLaunchTemplateData) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestLaunchTemplateData"} - if s.CreditSpecification != nil { - if err := s.CreditSpecification.Validate(); err != nil { - invalidParams.AddNested("CreditSpecification", err.(request.ErrInvalidParams)) - } - } - if s.ElasticGpuSpecifications != nil { - for i, v := range s.ElasticGpuSpecifications { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticGpuSpecifications", i), err.(request.ErrInvalidParams)) - } - } - } - if s.ElasticInferenceAccelerators != nil { - for i, v := range s.ElasticInferenceAccelerators { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticInferenceAccelerators", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RequestLaunchTemplateData) SetBlockDeviceMappings(v []*LaunchTemplateBlockDeviceMappingRequest) *RequestLaunchTemplateData { - s.BlockDeviceMappings = v - return s -} - -// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. -func (s *RequestLaunchTemplateData) SetCapacityReservationSpecification(v *LaunchTemplateCapacityReservationSpecificationRequest) *RequestLaunchTemplateData { - s.CapacityReservationSpecification = v - return s -} - -// SetCpuOptions sets the CpuOptions field's value. -func (s *RequestLaunchTemplateData) SetCpuOptions(v *LaunchTemplateCpuOptionsRequest) *RequestLaunchTemplateData { - s.CpuOptions = v - return s -} - -// SetCreditSpecification sets the CreditSpecification field's value. -func (s *RequestLaunchTemplateData) SetCreditSpecification(v *CreditSpecificationRequest) *RequestLaunchTemplateData { - s.CreditSpecification = v - return s -} - -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *RequestLaunchTemplateData) SetDisableApiTermination(v bool) *RequestLaunchTemplateData { - s.DisableApiTermination = &v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *RequestLaunchTemplateData) SetEbsOptimized(v bool) *RequestLaunchTemplateData { - s.EbsOptimized = &v - return s -} - -// SetElasticGpuSpecifications sets the ElasticGpuSpecifications field's value. -func (s *RequestLaunchTemplateData) SetElasticGpuSpecifications(v []*ElasticGpuSpecification) *RequestLaunchTemplateData { - s.ElasticGpuSpecifications = v - return s -} - -// SetElasticInferenceAccelerators sets the ElasticInferenceAccelerators field's value. -func (s *RequestLaunchTemplateData) SetElasticInferenceAccelerators(v []*LaunchTemplateElasticInferenceAccelerator) *RequestLaunchTemplateData { - s.ElasticInferenceAccelerators = v - return s -} - -// SetHibernationOptions sets the HibernationOptions field's value. -func (s *RequestLaunchTemplateData) SetHibernationOptions(v *LaunchTemplateHibernationOptionsRequest) *RequestLaunchTemplateData { - s.HibernationOptions = v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *RequestLaunchTemplateData) SetIamInstanceProfile(v *LaunchTemplateIamInstanceProfileSpecificationRequest) *RequestLaunchTemplateData { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *RequestLaunchTemplateData) SetImageId(v string) *RequestLaunchTemplateData { - s.ImageId = &v - return s -} - -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *RequestLaunchTemplateData) SetInstanceInitiatedShutdownBehavior(v string) *RequestLaunchTemplateData { - s.InstanceInitiatedShutdownBehavior = &v - return s -} - -// SetInstanceMarketOptions sets the InstanceMarketOptions field's value. -func (s *RequestLaunchTemplateData) SetInstanceMarketOptions(v *LaunchTemplateInstanceMarketOptionsRequest) *RequestLaunchTemplateData { - s.InstanceMarketOptions = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *RequestLaunchTemplateData) SetInstanceType(v string) *RequestLaunchTemplateData { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *RequestLaunchTemplateData) SetKernelId(v string) *RequestLaunchTemplateData { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *RequestLaunchTemplateData) SetKeyName(v string) *RequestLaunchTemplateData { - s.KeyName = &v - return s -} - -// SetLicenseSpecifications sets the LicenseSpecifications field's value. -func (s *RequestLaunchTemplateData) SetLicenseSpecifications(v []*LaunchTemplateLicenseConfigurationRequest) *RequestLaunchTemplateData { - s.LicenseSpecifications = v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *RequestLaunchTemplateData) SetMonitoring(v *LaunchTemplatesMonitoringRequest) *RequestLaunchTemplateData { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *RequestLaunchTemplateData) SetNetworkInterfaces(v []*LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) *RequestLaunchTemplateData { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *RequestLaunchTemplateData) SetPlacement(v *LaunchTemplatePlacementRequest) *RequestLaunchTemplateData { - s.Placement = v - return s -} - -// SetRamDiskId sets the RamDiskId field's value. -func (s *RequestLaunchTemplateData) SetRamDiskId(v string) *RequestLaunchTemplateData { - s.RamDiskId = &v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *RequestLaunchTemplateData) SetSecurityGroupIds(v []*string) *RequestLaunchTemplateData { - s.SecurityGroupIds = v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *RequestLaunchTemplateData) SetSecurityGroups(v []*string) *RequestLaunchTemplateData { - s.SecurityGroups = v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *RequestLaunchTemplateData) SetTagSpecifications(v []*LaunchTemplateTagSpecificationRequest) *RequestLaunchTemplateData { - s.TagSpecifications = v - return s -} - -// SetUserData sets the UserData field's value. -func (s *RequestLaunchTemplateData) SetUserData(v string) *RequestLaunchTemplateData { - s.UserData = &v - return s -} - -// Contains the parameters for RequestSpotFleet. -type RequestSpotFleetInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The configuration for the Spot Fleet request. - // - // SpotFleetRequestConfig is a required field - SpotFleetRequestConfig *SpotFleetRequestConfigData `locationName:"spotFleetRequestConfig" type:"structure" required:"true"` -} - -// String returns the string representation -func (s RequestSpotFleetInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RequestSpotFleetInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RequestSpotFleetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestSpotFleetInput"} - if s.SpotFleetRequestConfig == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestConfig")) - } - if s.SpotFleetRequestConfig != nil { - if err := s.SpotFleetRequestConfig.Validate(); err != nil { - invalidParams.AddNested("SpotFleetRequestConfig", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RequestSpotFleetInput) SetDryRun(v bool) *RequestSpotFleetInput { - s.DryRun = &v - return s -} - -// SetSpotFleetRequestConfig sets the SpotFleetRequestConfig field's value. -func (s *RequestSpotFleetInput) SetSpotFleetRequestConfig(v *SpotFleetRequestConfigData) *RequestSpotFleetInput { - s.SpotFleetRequestConfig = v - return s -} - -// Contains the output of RequestSpotFleet. -type RequestSpotFleetOutput struct { - _ struct{} `type:"structure"` - - // The ID of the Spot Fleet request. - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` -} - -// String returns the string representation -func (s RequestSpotFleetOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RequestSpotFleetOutput) GoString() string { - return s.String() -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *RequestSpotFleetOutput) SetSpotFleetRequestId(v string) *RequestSpotFleetOutput { - s.SpotFleetRequestId = &v - return s -} - -// Contains the parameters for RequestSpotInstances. -type RequestSpotInstancesInput struct { - _ struct{} `type:"structure"` - - // The user-specified name for a logical grouping of requests. - // - // When you specify an Availability Zone group in a Spot Instance request, all - // Spot Instances in the request are launched in the same Availability Zone. - // Instance proximity is maintained with this parameter, but the choice of Availability - // Zone is not. The group applies only to requests for Spot Instances of the - // same instance type. Any additional Spot Instance requests that are specified - // with the same Availability Zone group name are launched in that same Availability - // Zone, as long as at least one instance from the group is still active. - // - // If there is no active instance running in the Availability Zone group that - // you specify for a new Spot Instance request (all instances are terminated, - // the request is expired, or the maximum price you specified falls below current - // Spot price), then Amazon EC2 launches the instance in any Availability Zone - // where the constraint can be met. Consequently, the subsequent set of Spot - // Instances could be placed in a different zone from the original request, - // even if you specified the same Availability Zone group. - // - // Default: Instances are launched in any available Availability Zone. - AvailabilityZoneGroup *string `locationName:"availabilityZoneGroup" type:"string"` - - // The required duration for the Spot Instances (also known as Spot blocks), - // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, - // or 360). - // - // The duration period starts as soon as your Spot Instance receives its instance - // ID. At the end of the duration period, Amazon EC2 marks the Spot Instance - // for termination and provides a Spot Instance termination notice, which gives - // the instance a two-minute warning before it terminates. - // - // You can't specify an Availability Zone group or a launch group if you specify - // a duration. - BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` - - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon EC2 User Guide for Linux Instances. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The maximum number of Spot Instances to launch. - // - // Default: 1 - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - - // The behavior when a Spot Instance is interrupted. The default is terminate. - InstanceInterruptionBehavior *string `type:"string" enum:"InstanceInterruptionBehavior"` - - // The instance launch group. Launch groups are Spot Instances that launch together - // and terminate together. - // - // Default: Instances are launched and terminated individually - LaunchGroup *string `locationName:"launchGroup" type:"string"` - - // The launch specification. - LaunchSpecification *RequestSpotLaunchSpecification `type:"structure"` - - // The maximum price per hour that you are willing to pay for a Spot Instance. - // The default is the On-Demand price. - SpotPrice *string `locationName:"spotPrice" type:"string"` - - // The Spot Instance request type. - // - // Default: one-time - Type *string `locationName:"type" type:"string" enum:"SpotInstanceType"` - - // The start date of the request. If this is a one-time request, the request - // becomes active at this date and time and remains active until all instances - // launch, the request expires, or the request is canceled. If the request is - // persistent, the request becomes active at this date and time and remains - // active until it expires or is canceled. - // - // The specified start date and time cannot be equal to the current date and - // time. You must specify a start date and time that occurs after the current - // date and time. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` - - // The end date of the request. If this is a one-time request, the request remains - // active until all instances launch, the request is canceled, or this date - // is reached. If the request is persistent, it remains active until it is canceled - // or this date is reached. The default end date is 7 days from the current - // date. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` -} - -// String returns the string representation -func (s RequestSpotInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RequestSpotInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RequestSpotInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestSpotInstancesInput"} - if s.LaunchSpecification != nil { - if err := s.LaunchSpecification.Validate(); err != nil { - invalidParams.AddNested("LaunchSpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZoneGroup sets the AvailabilityZoneGroup field's value. -func (s *RequestSpotInstancesInput) SetAvailabilityZoneGroup(v string) *RequestSpotInstancesInput { - s.AvailabilityZoneGroup = &v - return s -} - -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *RequestSpotInstancesInput) SetBlockDurationMinutes(v int64) *RequestSpotInstancesInput { - s.BlockDurationMinutes = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *RequestSpotInstancesInput) SetClientToken(v string) *RequestSpotInstancesInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RequestSpotInstancesInput) SetDryRun(v bool) *RequestSpotInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *RequestSpotInstancesInput) SetInstanceCount(v int64) *RequestSpotInstancesInput { - s.InstanceCount = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *RequestSpotInstancesInput) SetInstanceInterruptionBehavior(v string) *RequestSpotInstancesInput { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetLaunchGroup sets the LaunchGroup field's value. -func (s *RequestSpotInstancesInput) SetLaunchGroup(v string) *RequestSpotInstancesInput { - s.LaunchGroup = &v - return s -} - -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *RequestSpotInstancesInput) SetLaunchSpecification(v *RequestSpotLaunchSpecification) *RequestSpotInstancesInput { - s.LaunchSpecification = v - return s -} - -// SetSpotPrice sets the SpotPrice field's value. -func (s *RequestSpotInstancesInput) SetSpotPrice(v string) *RequestSpotInstancesInput { - s.SpotPrice = &v - return s -} - -// SetType sets the Type field's value. -func (s *RequestSpotInstancesInput) SetType(v string) *RequestSpotInstancesInput { - s.Type = &v - return s -} - -// SetValidFrom sets the ValidFrom field's value. -func (s *RequestSpotInstancesInput) SetValidFrom(v time.Time) *RequestSpotInstancesInput { - s.ValidFrom = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *RequestSpotInstancesInput) SetValidUntil(v time.Time) *RequestSpotInstancesInput { - s.ValidUntil = &v - return s -} - -// Contains the output of RequestSpotInstances. -type RequestSpotInstancesOutput struct { - _ struct{} `type:"structure"` - - // One or more Spot Instance requests. - SpotInstanceRequests []*SpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s RequestSpotInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RequestSpotInstancesOutput) GoString() string { - return s.String() -} - -// SetSpotInstanceRequests sets the SpotInstanceRequests field's value. -func (s *RequestSpotInstancesOutput) SetSpotInstanceRequests(v []*SpotInstanceRequest) *RequestSpotInstancesOutput { - s.SpotInstanceRequests = v - return s -} - -// Describes the launch specification for an instance. -type RequestSpotLaunchSpecification struct { - _ struct{} `type:"structure"` - - // Deprecated. - AddressingType *string `locationName:"addressingType" type:"string"` - - // One or more block device mapping entries. You can't specify both a snapshot - // ID and an encryption value. This is because only blank volumes can be encrypted - // on creation. If a snapshot is the basis for a volume, it is not blank and - // its encryption status is used for the volume encryption status. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // Indicates whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // Indicates whether basic or detailed monitoring is enabled for the instance. - // - // Default: Disabled - Monitoring *RunInstancesMonitoringEnabled `locationName:"monitoring" type:"structure"` - - // One or more network interfaces. If you specify a network interface, you must - // specify subnet IDs and security group IDs using the network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"NetworkInterface" locationNameList:"item" type:"list"` - - // The placement information for the instance. - Placement *SpotPlacement `locationName:"placement" type:"structure"` - - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // One or more security group IDs. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list"` - - // One or more security groups. When requesting instances in a VPC, you must - // specify the IDs of the security groups. When requesting instances in EC2-Classic, - // you can specify the names or the IDs of the security groups. - SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"item" type:"list"` - - // The IDs of the subnets in which to launch the instance. To specify multiple - // subnets, separate them using commas; for example, "subnet-1234abcdeexample1, - // subnet-0987cdef6example2". - SubnetId *string `locationName:"subnetId" type:"string"` - - // The Base64-encoded user data for the instance. User data is limited to 16 - // KB. - UserData *string `locationName:"userData" type:"string"` -} - -// String returns the string representation -func (s RequestSpotLaunchSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RequestSpotLaunchSpecification) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RequestSpotLaunchSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestSpotLaunchSpecification"} - if s.Monitoring != nil { - if err := s.Monitoring.Validate(); err != nil { - invalidParams.AddNested("Monitoring", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAddressingType sets the AddressingType field's value. -func (s *RequestSpotLaunchSpecification) SetAddressingType(v string) *RequestSpotLaunchSpecification { - s.AddressingType = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RequestSpotLaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RequestSpotLaunchSpecification { - s.BlockDeviceMappings = v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *RequestSpotLaunchSpecification) SetEbsOptimized(v bool) *RequestSpotLaunchSpecification { - s.EbsOptimized = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *RequestSpotLaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *RequestSpotLaunchSpecification { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *RequestSpotLaunchSpecification) SetImageId(v string) *RequestSpotLaunchSpecification { - s.ImageId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *RequestSpotLaunchSpecification) SetInstanceType(v string) *RequestSpotLaunchSpecification { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *RequestSpotLaunchSpecification) SetKernelId(v string) *RequestSpotLaunchSpecification { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *RequestSpotLaunchSpecification) SetKeyName(v string) *RequestSpotLaunchSpecification { - s.KeyName = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *RequestSpotLaunchSpecification) SetMonitoring(v *RunInstancesMonitoringEnabled) *RequestSpotLaunchSpecification { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *RequestSpotLaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *RequestSpotLaunchSpecification { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *RequestSpotLaunchSpecification) SetPlacement(v *SpotPlacement) *RequestSpotLaunchSpecification { - s.Placement = v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *RequestSpotLaunchSpecification) SetRamdiskId(v string) *RequestSpotLaunchSpecification { - s.RamdiskId = &v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *RequestSpotLaunchSpecification) SetSecurityGroupIds(v []*string) *RequestSpotLaunchSpecification { - s.SecurityGroupIds = v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *RequestSpotLaunchSpecification) SetSecurityGroups(v []*string) *RequestSpotLaunchSpecification { - s.SecurityGroups = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *RequestSpotLaunchSpecification) SetSubnetId(v string) *RequestSpotLaunchSpecification { - s.SubnetId = &v - return s -} - -// SetUserData sets the UserData field's value. -func (s *RequestSpotLaunchSpecification) SetUserData(v string) *RequestSpotLaunchSpecification { - s.UserData = &v - return s -} - -// Describes a reservation. -type Reservation struct { - _ struct{} `type:"structure"` - - // [EC2-Classic only] The security groups. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The instances. - Instances []*Instance `locationName:"instancesSet" locationNameList:"item" type:"list"` - - // The ID of the AWS account that owns the reservation. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The ID of the requester that launched the instances on your behalf (for example, - // AWS Management Console or Auto Scaling). - RequesterId *string `locationName:"requesterId" type:"string"` - - // The ID of the reservation. - ReservationId *string `locationName:"reservationId" type:"string"` -} - -// String returns the string representation -func (s Reservation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Reservation) GoString() string { - return s.String() -} - -// SetGroups sets the Groups field's value. -func (s *Reservation) SetGroups(v []*GroupIdentifier) *Reservation { - s.Groups = v - return s -} - -// SetInstances sets the Instances field's value. -func (s *Reservation) SetInstances(v []*Instance) *Reservation { - s.Instances = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *Reservation) SetOwnerId(v string) *Reservation { - s.OwnerId = &v - return s -} - -// SetRequesterId sets the RequesterId field's value. -func (s *Reservation) SetRequesterId(v string) *Reservation { - s.RequesterId = &v - return s -} - -// SetReservationId sets the ReservationId field's value. -func (s *Reservation) SetReservationId(v string) *Reservation { - s.ReservationId = &v - return s -} - -// The cost associated with the Reserved Instance. -type ReservationValue struct { - _ struct{} `type:"structure"` - - // The hourly rate of the reservation. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The balance of the total value (the sum of remainingUpfrontValue + hourlyPrice - // * number of hours remaining). - RemainingTotalValue *string `locationName:"remainingTotalValue" type:"string"` - - // The remaining upfront cost of the reservation. - RemainingUpfrontValue *string `locationName:"remainingUpfrontValue" type:"string"` -} - -// String returns the string representation -func (s ReservationValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservationValue) GoString() string { - return s.String() -} - -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *ReservationValue) SetHourlyPrice(v string) *ReservationValue { - s.HourlyPrice = &v - return s -} - -// SetRemainingTotalValue sets the RemainingTotalValue field's value. -func (s *ReservationValue) SetRemainingTotalValue(v string) *ReservationValue { - s.RemainingTotalValue = &v - return s -} - -// SetRemainingUpfrontValue sets the RemainingUpfrontValue field's value. -func (s *ReservationValue) SetRemainingUpfrontValue(v string) *ReservationValue { - s.RemainingUpfrontValue = &v - return s -} - -// Describes the limit price of a Reserved Instance offering. -type ReservedInstanceLimitPrice struct { - _ struct{} `type:"structure"` - - // Used for Reserved Instance Marketplace offerings. Specifies the limit price - // on the total order (instanceCount * price). - Amount *float64 `locationName:"amount" type:"double"` - - // The currency in which the limitPrice amount is specified. At this time, the - // only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` -} - -// String returns the string representation -func (s ReservedInstanceLimitPrice) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstanceLimitPrice) GoString() string { - return s.String() -} - -// SetAmount sets the Amount field's value. -func (s *ReservedInstanceLimitPrice) SetAmount(v float64) *ReservedInstanceLimitPrice { - s.Amount = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *ReservedInstanceLimitPrice) SetCurrencyCode(v string) *ReservedInstanceLimitPrice { - s.CurrencyCode = &v - return s -} - -// The total value of the Convertible Reserved Instance. -type ReservedInstanceReservationValue struct { - _ struct{} `type:"structure"` - - // The total value of the Convertible Reserved Instance that you are exchanging. - ReservationValue *ReservationValue `locationName:"reservationValue" type:"structure"` - - // The ID of the Convertible Reserved Instance that you are exchanging. - ReservedInstanceId *string `locationName:"reservedInstanceId" type:"string"` -} - -// String returns the string representation -func (s ReservedInstanceReservationValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstanceReservationValue) GoString() string { - return s.String() -} - -// SetReservationValue sets the ReservationValue field's value. -func (s *ReservedInstanceReservationValue) SetReservationValue(v *ReservationValue) *ReservedInstanceReservationValue { - s.ReservationValue = v - return s -} - -// SetReservedInstanceId sets the ReservedInstanceId field's value. -func (s *ReservedInstanceReservationValue) SetReservedInstanceId(v string) *ReservedInstanceReservationValue { - s.ReservedInstanceId = &v - return s -} - -// Describes a Reserved Instance. -type ReservedInstances struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which the Reserved Instance can be used. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The currency of the Reserved Instance. It's specified using ISO 4217 standard - // currency codes. At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the Reserved Instance, in seconds. - Duration *int64 `locationName:"duration" type:"long"` - - // The time when the Reserved Instance expires. - End *time.Time `locationName:"end" type:"timestamp"` - - // The purchase price of the Reserved Instance. - FixedPrice *float64 `locationName:"fixedPrice" type:"float"` - - // The number of reservations purchased. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - - // The tenancy of the instance. - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` - - // The instance type on which the Reserved Instance can be used. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The offering class of the Reserved Instance. - OfferingClass *string `locationName:"offeringClass" type:"string" enum:"OfferingClassType"` - - // The Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` - - // The Reserved Instance product platform description. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` - - // The recurring charge tag assigned to the resource. - RecurringCharges []*RecurringCharge `locationName:"recurringCharges" locationNameList:"item" type:"list"` - - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - - // The scope of the Reserved Instance. - Scope *string `locationName:"scope" type:"string" enum:"scope"` - - // The date and time the Reserved Instance started. - Start *time.Time `locationName:"start" type:"timestamp"` - - // The state of the Reserved Instance purchase. - State *string `locationName:"state" type:"string" enum:"ReservedInstanceState"` - - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The usage price of the Reserved Instance, per hour. - UsagePrice *float64 `locationName:"usagePrice" type:"float"` -} - -// String returns the string representation -func (s ReservedInstances) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstances) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ReservedInstances) SetAvailabilityZone(v string) *ReservedInstances { - s.AvailabilityZone = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *ReservedInstances) SetCurrencyCode(v string) *ReservedInstances { - s.CurrencyCode = &v - return s -} - -// SetDuration sets the Duration field's value. -func (s *ReservedInstances) SetDuration(v int64) *ReservedInstances { - s.Duration = &v - return s -} - -// SetEnd sets the End field's value. -func (s *ReservedInstances) SetEnd(v time.Time) *ReservedInstances { - s.End = &v - return s -} - -// SetFixedPrice sets the FixedPrice field's value. -func (s *ReservedInstances) SetFixedPrice(v float64) *ReservedInstances { - s.FixedPrice = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *ReservedInstances) SetInstanceCount(v int64) *ReservedInstances { - s.InstanceCount = &v - return s -} - -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *ReservedInstances) SetInstanceTenancy(v string) *ReservedInstances { - s.InstanceTenancy = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ReservedInstances) SetInstanceType(v string) *ReservedInstances { - s.InstanceType = &v - return s -} - -// SetOfferingClass sets the OfferingClass field's value. -func (s *ReservedInstances) SetOfferingClass(v string) *ReservedInstances { - s.OfferingClass = &v - return s -} - -// SetOfferingType sets the OfferingType field's value. -func (s *ReservedInstances) SetOfferingType(v string) *ReservedInstances { - s.OfferingType = &v - return s -} - -// SetProductDescription sets the ProductDescription field's value. -func (s *ReservedInstances) SetProductDescription(v string) *ReservedInstances { - s.ProductDescription = &v - return s -} - -// SetRecurringCharges sets the RecurringCharges field's value. -func (s *ReservedInstances) SetRecurringCharges(v []*RecurringCharge) *ReservedInstances { - s.RecurringCharges = v - return s -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstances) SetReservedInstancesId(v string) *ReservedInstances { - s.ReservedInstancesId = &v - return s -} - -// SetScope sets the Scope field's value. -func (s *ReservedInstances) SetScope(v string) *ReservedInstances { - s.Scope = &v - return s -} - -// SetStart sets the Start field's value. -func (s *ReservedInstances) SetStart(v time.Time) *ReservedInstances { - s.Start = &v - return s -} - -// SetState sets the State field's value. -func (s *ReservedInstances) SetState(v string) *ReservedInstances { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *ReservedInstances) SetTags(v []*Tag) *ReservedInstances { - s.Tags = v - return s -} - -// SetUsagePrice sets the UsagePrice field's value. -func (s *ReservedInstances) SetUsagePrice(v float64) *ReservedInstances { - s.UsagePrice = &v - return s -} - -// Describes the configuration settings for the modified Reserved Instances. -type ReservedInstancesConfiguration struct { - _ struct{} `type:"structure"` - - // The Availability Zone for the modified Reserved Instances. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The number of modified Reserved Instances. - // - // This is a required field for a request. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - - // The instance type for the modified Reserved Instances. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The network platform of the modified Reserved Instances, which is either - // EC2-Classic or EC2-VPC. - Platform *string `locationName:"platform" type:"string"` - - // Whether the Reserved Instance is applied to instances in a Region or instances - // in a specific Availability Zone. - Scope *string `locationName:"scope" type:"string" enum:"scope"` -} - -// String returns the string representation -func (s ReservedInstancesConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstancesConfiguration) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ReservedInstancesConfiguration) SetAvailabilityZone(v string) *ReservedInstancesConfiguration { - s.AvailabilityZone = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *ReservedInstancesConfiguration) SetInstanceCount(v int64) *ReservedInstancesConfiguration { - s.InstanceCount = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ReservedInstancesConfiguration) SetInstanceType(v string) *ReservedInstancesConfiguration { - s.InstanceType = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ReservedInstancesConfiguration) SetPlatform(v string) *ReservedInstancesConfiguration { - s.Platform = &v - return s -} - -// SetScope sets the Scope field's value. -func (s *ReservedInstancesConfiguration) SetScope(v string) *ReservedInstancesConfiguration { - s.Scope = &v - return s -} - -// Describes the ID of a Reserved Instance. -type ReservedInstancesId struct { - _ struct{} `type:"structure"` - - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` -} - -// String returns the string representation -func (s ReservedInstancesId) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstancesId) GoString() string { - return s.String() -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstancesId) SetReservedInstancesId(v string) *ReservedInstancesId { - s.ReservedInstancesId = &v - return s -} - -// Describes a Reserved Instance listing. -type ReservedInstancesListing struct { - _ struct{} `type:"structure"` - - // A unique, case-sensitive key supplied by the client to ensure that the request - // is idempotent. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // The time the listing was created. - CreateDate *time.Time `locationName:"createDate" type:"timestamp"` - - // The number of instances in this state. - InstanceCounts []*InstanceCount `locationName:"instanceCounts" locationNameList:"item" type:"list"` - - // The price of the Reserved Instance listing. - PriceSchedules []*PriceSchedule `locationName:"priceSchedules" locationNameList:"item" type:"list"` - - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - - // The ID of the Reserved Instance listing. - ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string"` - - // The status of the Reserved Instance listing. - Status *string `locationName:"status" type:"string" enum:"ListingStatus"` - - // The reason for the current status of the Reserved Instance listing. The response - // can be blank. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The last modified timestamp of the listing. - UpdateDate *time.Time `locationName:"updateDate" type:"timestamp"` -} - -// String returns the string representation -func (s ReservedInstancesListing) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstancesListing) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *ReservedInstancesListing) SetClientToken(v string) *ReservedInstancesListing { - s.ClientToken = &v - return s -} - -// SetCreateDate sets the CreateDate field's value. -func (s *ReservedInstancesListing) SetCreateDate(v time.Time) *ReservedInstancesListing { - s.CreateDate = &v - return s -} - -// SetInstanceCounts sets the InstanceCounts field's value. -func (s *ReservedInstancesListing) SetInstanceCounts(v []*InstanceCount) *ReservedInstancesListing { - s.InstanceCounts = v - return s -} - -// SetPriceSchedules sets the PriceSchedules field's value. -func (s *ReservedInstancesListing) SetPriceSchedules(v []*PriceSchedule) *ReservedInstancesListing { - s.PriceSchedules = v - return s -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstancesListing) SetReservedInstancesId(v string) *ReservedInstancesListing { - s.ReservedInstancesId = &v - return s -} - -// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. -func (s *ReservedInstancesListing) SetReservedInstancesListingId(v string) *ReservedInstancesListing { - s.ReservedInstancesListingId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ReservedInstancesListing) SetStatus(v string) *ReservedInstancesListing { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ReservedInstancesListing) SetStatusMessage(v string) *ReservedInstancesListing { - s.StatusMessage = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *ReservedInstancesListing) SetTags(v []*Tag) *ReservedInstancesListing { - s.Tags = v - return s -} - -// SetUpdateDate sets the UpdateDate field's value. -func (s *ReservedInstancesListing) SetUpdateDate(v time.Time) *ReservedInstancesListing { - s.UpdateDate = &v - return s -} - -// Describes a Reserved Instance modification. -type ReservedInstancesModification struct { - _ struct{} `type:"structure"` - - // A unique, case-sensitive key supplied by the client to ensure that the request - // is idempotent. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // The time when the modification request was created. - CreateDate *time.Time `locationName:"createDate" type:"timestamp"` - - // The time for the modification to become effective. - EffectiveDate *time.Time `locationName:"effectiveDate" type:"timestamp"` - - // Contains target configurations along with their corresponding new Reserved - // Instance IDs. - ModificationResults []*ReservedInstancesModificationResult `locationName:"modificationResultSet" locationNameList:"item" type:"list"` - - // The IDs of one or more Reserved Instances. - ReservedInstancesIds []*ReservedInstancesId `locationName:"reservedInstancesSet" locationNameList:"item" type:"list"` - - // A unique ID for the Reserved Instance modification. - ReservedInstancesModificationId *string `locationName:"reservedInstancesModificationId" type:"string"` - - // The status of the Reserved Instances modification request. - Status *string `locationName:"status" type:"string"` - - // The reason for the status. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // The time when the modification request was last updated. - UpdateDate *time.Time `locationName:"updateDate" type:"timestamp"` -} - -// String returns the string representation -func (s ReservedInstancesModification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstancesModification) GoString() string { - return s.String() -} - -// SetClientToken sets the ClientToken field's value. -func (s *ReservedInstancesModification) SetClientToken(v string) *ReservedInstancesModification { - s.ClientToken = &v - return s -} - -// SetCreateDate sets the CreateDate field's value. -func (s *ReservedInstancesModification) SetCreateDate(v time.Time) *ReservedInstancesModification { - s.CreateDate = &v - return s -} - -// SetEffectiveDate sets the EffectiveDate field's value. -func (s *ReservedInstancesModification) SetEffectiveDate(v time.Time) *ReservedInstancesModification { - s.EffectiveDate = &v - return s -} - -// SetModificationResults sets the ModificationResults field's value. -func (s *ReservedInstancesModification) SetModificationResults(v []*ReservedInstancesModificationResult) *ReservedInstancesModification { - s.ModificationResults = v - return s -} - -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *ReservedInstancesModification) SetReservedInstancesIds(v []*ReservedInstancesId) *ReservedInstancesModification { - s.ReservedInstancesIds = v - return s -} - -// SetReservedInstancesModificationId sets the ReservedInstancesModificationId field's value. -func (s *ReservedInstancesModification) SetReservedInstancesModificationId(v string) *ReservedInstancesModification { - s.ReservedInstancesModificationId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *ReservedInstancesModification) SetStatus(v string) *ReservedInstancesModification { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *ReservedInstancesModification) SetStatusMessage(v string) *ReservedInstancesModification { - s.StatusMessage = &v - return s -} - -// SetUpdateDate sets the UpdateDate field's value. -func (s *ReservedInstancesModification) SetUpdateDate(v time.Time) *ReservedInstancesModification { - s.UpdateDate = &v - return s -} - -// Describes the modification request/s. -type ReservedInstancesModificationResult struct { - _ struct{} `type:"structure"` - - // The ID for the Reserved Instances that were created as part of the modification - // request. This field is only available when the modification is fulfilled. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - - // The target Reserved Instances configurations supplied as part of the modification - // request. - TargetConfiguration *ReservedInstancesConfiguration `locationName:"targetConfiguration" type:"structure"` -} - -// String returns the string representation -func (s ReservedInstancesModificationResult) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstancesModificationResult) GoString() string { - return s.String() -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstancesModificationResult) SetReservedInstancesId(v string) *ReservedInstancesModificationResult { - s.ReservedInstancesId = &v - return s -} - -// SetTargetConfiguration sets the TargetConfiguration field's value. -func (s *ReservedInstancesModificationResult) SetTargetConfiguration(v *ReservedInstancesConfiguration) *ReservedInstancesModificationResult { - s.TargetConfiguration = v - return s -} - -// Describes a Reserved Instance offering. -type ReservedInstancesOffering struct { - _ struct{} `type:"structure"` - - // The Availability Zone in which the Reserved Instance can be used. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The currency of the Reserved Instance offering you are purchasing. It's specified - // using ISO 4217 standard currency codes. At this time, the only supported - // currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the Reserved Instance, in seconds. - Duration *int64 `locationName:"duration" type:"long"` - - // The purchase price of the Reserved Instance. - FixedPrice *float64 `locationName:"fixedPrice" type:"float"` - - // The tenancy of the instance. - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` - - // The instance type on which the Reserved Instance can be used. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // Indicates whether the offering is available through the Reserved Instance - // Marketplace (resale) or AWS. If it's a Reserved Instance Marketplace offering, - // this is true. - Marketplace *bool `locationName:"marketplace" type:"boolean"` - - // If convertible it can be exchanged for Reserved Instances of the same or - // higher monetary value, with different configurations. If standard, it is - // not possible to perform an exchange. - OfferingClass *string `locationName:"offeringClass" type:"string" enum:"OfferingClassType"` - - // The Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` - - // The pricing details of the Reserved Instance offering. - PricingDetails []*PricingDetail `locationName:"pricingDetailsSet" locationNameList:"item" type:"list"` - - // The Reserved Instance product platform description. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` - - // The recurring charge tag assigned to the resource. - RecurringCharges []*RecurringCharge `locationName:"recurringCharges" locationNameList:"item" type:"list"` - - // The ID of the Reserved Instance offering. This is the offering ID used in - // GetReservedInstancesExchangeQuote to confirm that an exchange can be made. - ReservedInstancesOfferingId *string `locationName:"reservedInstancesOfferingId" type:"string"` - - // Whether the Reserved Instance is applied to instances in a Region or an Availability - // Zone. - Scope *string `locationName:"scope" type:"string" enum:"scope"` - - // The usage price of the Reserved Instance, per hour. - UsagePrice *float64 `locationName:"usagePrice" type:"float"` -} - -// String returns the string representation -func (s ReservedInstancesOffering) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ReservedInstancesOffering) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ReservedInstancesOffering) SetAvailabilityZone(v string) *ReservedInstancesOffering { - s.AvailabilityZone = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *ReservedInstancesOffering) SetCurrencyCode(v string) *ReservedInstancesOffering { - s.CurrencyCode = &v - return s -} - -// SetDuration sets the Duration field's value. -func (s *ReservedInstancesOffering) SetDuration(v int64) *ReservedInstancesOffering { - s.Duration = &v - return s -} - -// SetFixedPrice sets the FixedPrice field's value. -func (s *ReservedInstancesOffering) SetFixedPrice(v float64) *ReservedInstancesOffering { - s.FixedPrice = &v - return s -} - -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *ReservedInstancesOffering) SetInstanceTenancy(v string) *ReservedInstancesOffering { - s.InstanceTenancy = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ReservedInstancesOffering) SetInstanceType(v string) *ReservedInstancesOffering { - s.InstanceType = &v - return s -} - -// SetMarketplace sets the Marketplace field's value. -func (s *ReservedInstancesOffering) SetMarketplace(v bool) *ReservedInstancesOffering { - s.Marketplace = &v - return s -} - -// SetOfferingClass sets the OfferingClass field's value. -func (s *ReservedInstancesOffering) SetOfferingClass(v string) *ReservedInstancesOffering { - s.OfferingClass = &v - return s -} - -// SetOfferingType sets the OfferingType field's value. -func (s *ReservedInstancesOffering) SetOfferingType(v string) *ReservedInstancesOffering { - s.OfferingType = &v - return s -} - -// SetPricingDetails sets the PricingDetails field's value. -func (s *ReservedInstancesOffering) SetPricingDetails(v []*PricingDetail) *ReservedInstancesOffering { - s.PricingDetails = v - return s -} - -// SetProductDescription sets the ProductDescription field's value. -func (s *ReservedInstancesOffering) SetProductDescription(v string) *ReservedInstancesOffering { - s.ProductDescription = &v - return s -} - -// SetRecurringCharges sets the RecurringCharges field's value. -func (s *ReservedInstancesOffering) SetRecurringCharges(v []*RecurringCharge) *ReservedInstancesOffering { - s.RecurringCharges = v - return s -} - -// SetReservedInstancesOfferingId sets the ReservedInstancesOfferingId field's value. -func (s *ReservedInstancesOffering) SetReservedInstancesOfferingId(v string) *ReservedInstancesOffering { - s.ReservedInstancesOfferingId = &v - return s -} - -// SetScope sets the Scope field's value. -func (s *ReservedInstancesOffering) SetScope(v string) *ReservedInstancesOffering { - s.Scope = &v - return s -} - -// SetUsagePrice sets the UsagePrice field's value. -func (s *ReservedInstancesOffering) SetUsagePrice(v float64) *ReservedInstancesOffering { - s.UsagePrice = &v - return s -} - -type ResetEbsDefaultKmsKeyIdInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s ResetEbsDefaultKmsKeyIdInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetEbsDefaultKmsKeyIdInput) GoString() string { - return s.String() -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetEbsDefaultKmsKeyIdInput) SetDryRun(v bool) *ResetEbsDefaultKmsKeyIdInput { - s.DryRun = &v - return s -} - -type ResetEbsDefaultKmsKeyIdOutput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the default CMK for EBS encryption by default. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` -} - -// String returns the string representation -func (s ResetEbsDefaultKmsKeyIdOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetEbsDefaultKmsKeyIdOutput) GoString() string { - return s.String() -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *ResetEbsDefaultKmsKeyIdOutput) SetKmsKeyId(v string) *ResetEbsDefaultKmsKeyIdOutput { - s.KmsKeyId = &v - return s -} - -type ResetFpgaImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The attribute. - Attribute *string `type:"string" enum:"ResetFpgaImageAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the AFI. - // - // FpgaImageId is a required field - FpgaImageId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ResetFpgaImageAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetFpgaImageAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetFpgaImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetFpgaImageAttributeInput"} - if s.FpgaImageId == nil { - invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ResetFpgaImageAttributeInput) SetAttribute(v string) *ResetFpgaImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetFpgaImageAttributeInput) SetDryRun(v bool) *ResetFpgaImageAttributeInput { - s.DryRun = &v - return s -} - -// SetFpgaImageId sets the FpgaImageId field's value. -func (s *ResetFpgaImageAttributeInput) SetFpgaImageId(v string) *ResetFpgaImageAttributeInput { - s.FpgaImageId = &v - return s -} - -type ResetFpgaImageAttributeOutput struct { - _ struct{} `type:"structure"` - - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s ResetFpgaImageAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetFpgaImageAttributeOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *ResetFpgaImageAttributeOutput) SetReturn(v bool) *ResetFpgaImageAttributeOutput { - s.Return = &v - return s -} - -// Contains the parameters for ResetImageAttribute. -type ResetImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The attribute to reset (currently you can only reset the launch permission - // attribute). - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"ResetImageAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ResetImageAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetImageAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetImageAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ResetImageAttributeInput) SetAttribute(v string) *ResetImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetImageAttributeInput) SetDryRun(v bool) *ResetImageAttributeInput { - s.DryRun = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ResetImageAttributeInput) SetImageId(v string) *ResetImageAttributeInput { - s.ImageId = &v - return s -} - -type ResetImageAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ResetImageAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetImageAttributeOutput) GoString() string { - return s.String() -} - -type ResetInstanceAttributeInput struct { - _ struct{} `type:"structure"` - - // The attribute to reset. - // - // You can only reset the following attributes: kernel | ramdisk | sourceDestCheck. - // To change an instance attribute, use ModifyInstanceAttribute. - // - // Attribute is a required field - Attribute *string `locationName:"attribute" type:"string" required:"true" enum:"InstanceAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s ResetInstanceAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetInstanceAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetInstanceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetInstanceAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ResetInstanceAttributeInput) SetAttribute(v string) *ResetInstanceAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetInstanceAttributeInput) SetDryRun(v bool) *ResetInstanceAttributeInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ResetInstanceAttributeInput) SetInstanceId(v string) *ResetInstanceAttributeInput { - s.InstanceId = &v - return s -} - -type ResetInstanceAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ResetInstanceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetInstanceAttributeOutput) GoString() string { - return s.String() -} - -// Contains the parameters for ResetNetworkInterfaceAttribute. -type ResetNetworkInterfaceAttributeInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` - - // The source/destination checking attribute. Resets the value to true. - SourceDestCheck *string `locationName:"sourceDestCheck" type:"string"` -} - -// String returns the string representation -func (s ResetNetworkInterfaceAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetNetworkInterfaceAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetNetworkInterfaceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetNetworkInterfaceAttributeInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetNetworkInterfaceAttributeInput) SetDryRun(v bool) *ResetNetworkInterfaceAttributeInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ResetNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *ResetNetworkInterfaceAttributeInput { - s.NetworkInterfaceId = &v - return s -} - -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *ResetNetworkInterfaceAttributeInput) SetSourceDestCheck(v string) *ResetNetworkInterfaceAttributeInput { - s.SourceDestCheck = &v - return s -} - -type ResetNetworkInterfaceAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ResetNetworkInterfaceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetNetworkInterfaceAttributeOutput) GoString() string { - return s.String() -} - -type ResetSnapshotAttributeInput struct { - _ struct{} `type:"structure"` - - // The attribute to reset. Currently, only the attribute for permission to create - // volumes can be reset. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"SnapshotAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s ResetSnapshotAttributeInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetSnapshotAttributeInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetSnapshotAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetSnapshotAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ResetSnapshotAttributeInput) SetAttribute(v string) *ResetSnapshotAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetSnapshotAttributeInput) SetDryRun(v bool) *ResetSnapshotAttributeInput { - s.DryRun = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *ResetSnapshotAttributeInput) SetSnapshotId(v string) *ResetSnapshotAttributeInput { - s.SnapshotId = &v - return s -} - -type ResetSnapshotAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ResetSnapshotAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResetSnapshotAttributeOutput) GoString() string { - return s.String() -} - -// Describes the error that's returned when you cannot delete a launch template -// version. -type ResponseError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string" enum:"LaunchTemplateErrorCode"` - - // The error message, if applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s ResponseError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResponseError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *ResponseError) SetCode(v string) *ResponseError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *ResponseError) SetMessage(v string) *ResponseError { - s.Message = &v - return s -} - -// The information for a launch template. -type ResponseLaunchTemplateData struct { - _ struct{} `type:"structure"` - - // The block device mappings. - BlockDeviceMappings []*LaunchTemplateBlockDeviceMapping `locationName:"blockDeviceMappingSet" locationNameList:"item" type:"list"` - - // Information about the Capacity Reservation targeting option. - CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationResponse `locationName:"capacityReservationSpecification" type:"structure"` - - // The CPU options for the instance. For more information, see Optimizing CPU - // Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) - // in the Amazon Elastic Compute Cloud User Guide. - CpuOptions *LaunchTemplateCpuOptions `locationName:"cpuOptions" type:"structure"` - - // The credit option for CPU usage of the instance. - CreditSpecification *CreditSpecification `locationName:"creditSpecification" type:"structure"` - - // If set to true, indicates that the instance cannot be terminated using the - // Amazon EC2 console, command line tool, or API. - DisableApiTermination *bool `locationName:"disableApiTermination" type:"boolean"` - - // Indicates whether the instance is optimized for Amazon EBS I/O. - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The elastic GPU specification. - ElasticGpuSpecifications []*ElasticGpuSpecificationResponse `locationName:"elasticGpuSpecificationSet" locationNameList:"item" type:"list"` - - // The elastic inference accelerator for the instance. - ElasticInferenceAccelerators []*LaunchTemplateElasticInferenceAcceleratorResponse `locationName:"elasticInferenceAcceleratorSet" locationNameList:"item" type:"list"` - - // Indicates whether an instance is configured for hibernation. For more information, - // see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) - // in the Amazon Elastic Compute Cloud User Guide. - HibernationOptions *LaunchTemplateHibernationOptions `locationName:"hibernationOptions" type:"structure"` - - // The IAM instance profile. - IamInstanceProfile *LaunchTemplateIamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI that was used to launch the instance. - ImageId *string `locationName:"imageId" type:"string"` - - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` - - // The market (purchasing) option for the instances. - InstanceMarketOptions *LaunchTemplateInstanceMarketOptions `locationName:"instanceMarketOptions" type:"structure"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The ID of the kernel, if applicable. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // The license configurations. - LicenseSpecifications []*LaunchTemplateLicenseConfiguration `locationName:"licenseSet" locationNameList:"item" type:"list"` - - // The monitoring for the instance. - Monitoring *LaunchTemplatesMonitoring `locationName:"monitoring" type:"structure"` - - // The network interfaces. - NetworkInterfaces []*LaunchTemplateInstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` - - // The placement of the instance. - Placement *LaunchTemplatePlacement `locationName:"placement" type:"structure"` - - // The ID of the RAM disk, if applicable. - RamDiskId *string `locationName:"ramDiskId" type:"string"` - - // The security group IDs. - SecurityGroupIds []*string `locationName:"securityGroupIdSet" locationNameList:"item" type:"list"` - - // The security group names. - SecurityGroups []*string `locationName:"securityGroupSet" locationNameList:"item" type:"list"` - - // The tags. - TagSpecifications []*LaunchTemplateTagSpecification `locationName:"tagSpecificationSet" locationNameList:"item" type:"list"` - - // The user data for the instance. - UserData *string `locationName:"userData" type:"string"` -} - -// String returns the string representation -func (s ResponseLaunchTemplateData) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ResponseLaunchTemplateData) GoString() string { - return s.String() -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *ResponseLaunchTemplateData) SetBlockDeviceMappings(v []*LaunchTemplateBlockDeviceMapping) *ResponseLaunchTemplateData { - s.BlockDeviceMappings = v - return s -} - -// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. -func (s *ResponseLaunchTemplateData) SetCapacityReservationSpecification(v *LaunchTemplateCapacityReservationSpecificationResponse) *ResponseLaunchTemplateData { - s.CapacityReservationSpecification = v - return s -} - -// SetCpuOptions sets the CpuOptions field's value. -func (s *ResponseLaunchTemplateData) SetCpuOptions(v *LaunchTemplateCpuOptions) *ResponseLaunchTemplateData { - s.CpuOptions = v - return s -} - -// SetCreditSpecification sets the CreditSpecification field's value. -func (s *ResponseLaunchTemplateData) SetCreditSpecification(v *CreditSpecification) *ResponseLaunchTemplateData { - s.CreditSpecification = v - return s -} - -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *ResponseLaunchTemplateData) SetDisableApiTermination(v bool) *ResponseLaunchTemplateData { - s.DisableApiTermination = &v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *ResponseLaunchTemplateData) SetEbsOptimized(v bool) *ResponseLaunchTemplateData { - s.EbsOptimized = &v - return s -} - -// SetElasticGpuSpecifications sets the ElasticGpuSpecifications field's value. -func (s *ResponseLaunchTemplateData) SetElasticGpuSpecifications(v []*ElasticGpuSpecificationResponse) *ResponseLaunchTemplateData { - s.ElasticGpuSpecifications = v - return s -} - -// SetElasticInferenceAccelerators sets the ElasticInferenceAccelerators field's value. -func (s *ResponseLaunchTemplateData) SetElasticInferenceAccelerators(v []*LaunchTemplateElasticInferenceAcceleratorResponse) *ResponseLaunchTemplateData { - s.ElasticInferenceAccelerators = v - return s -} - -// SetHibernationOptions sets the HibernationOptions field's value. -func (s *ResponseLaunchTemplateData) SetHibernationOptions(v *LaunchTemplateHibernationOptions) *ResponseLaunchTemplateData { - s.HibernationOptions = v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *ResponseLaunchTemplateData) SetIamInstanceProfile(v *LaunchTemplateIamInstanceProfileSpecification) *ResponseLaunchTemplateData { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ResponseLaunchTemplateData) SetImageId(v string) *ResponseLaunchTemplateData { - s.ImageId = &v - return s -} - -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *ResponseLaunchTemplateData) SetInstanceInitiatedShutdownBehavior(v string) *ResponseLaunchTemplateData { - s.InstanceInitiatedShutdownBehavior = &v - return s -} - -// SetInstanceMarketOptions sets the InstanceMarketOptions field's value. -func (s *ResponseLaunchTemplateData) SetInstanceMarketOptions(v *LaunchTemplateInstanceMarketOptions) *ResponseLaunchTemplateData { - s.InstanceMarketOptions = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ResponseLaunchTemplateData) SetInstanceType(v string) *ResponseLaunchTemplateData { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *ResponseLaunchTemplateData) SetKernelId(v string) *ResponseLaunchTemplateData { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *ResponseLaunchTemplateData) SetKeyName(v string) *ResponseLaunchTemplateData { - s.KeyName = &v - return s -} - -// SetLicenseSpecifications sets the LicenseSpecifications field's value. -func (s *ResponseLaunchTemplateData) SetLicenseSpecifications(v []*LaunchTemplateLicenseConfiguration) *ResponseLaunchTemplateData { - s.LicenseSpecifications = v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *ResponseLaunchTemplateData) SetMonitoring(v *LaunchTemplatesMonitoring) *ResponseLaunchTemplateData { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *ResponseLaunchTemplateData) SetNetworkInterfaces(v []*LaunchTemplateInstanceNetworkInterfaceSpecification) *ResponseLaunchTemplateData { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *ResponseLaunchTemplateData) SetPlacement(v *LaunchTemplatePlacement) *ResponseLaunchTemplateData { - s.Placement = v - return s -} - -// SetRamDiskId sets the RamDiskId field's value. -func (s *ResponseLaunchTemplateData) SetRamDiskId(v string) *ResponseLaunchTemplateData { - s.RamDiskId = &v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *ResponseLaunchTemplateData) SetSecurityGroupIds(v []*string) *ResponseLaunchTemplateData { - s.SecurityGroupIds = v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *ResponseLaunchTemplateData) SetSecurityGroups(v []*string) *ResponseLaunchTemplateData { - s.SecurityGroups = v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *ResponseLaunchTemplateData) SetTagSpecifications(v []*LaunchTemplateTagSpecification) *ResponseLaunchTemplateData { - s.TagSpecifications = v - return s -} - -// SetUserData sets the UserData field's value. -func (s *ResponseLaunchTemplateData) SetUserData(v string) *ResponseLaunchTemplateData { - s.UserData = &v - return s -} - -type RestoreAddressToClassicInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The Elastic IP address. - // - // PublicIp is a required field - PublicIp *string `locationName:"publicIp" type:"string" required:"true"` -} - -// String returns the string representation -func (s RestoreAddressToClassicInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RestoreAddressToClassicInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RestoreAddressToClassicInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RestoreAddressToClassicInput"} - if s.PublicIp == nil { - invalidParams.Add(request.NewErrParamRequired("PublicIp")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RestoreAddressToClassicInput) SetDryRun(v bool) *RestoreAddressToClassicInput { - s.DryRun = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *RestoreAddressToClassicInput) SetPublicIp(v string) *RestoreAddressToClassicInput { - s.PublicIp = &v - return s -} - -type RestoreAddressToClassicOutput struct { - _ struct{} `type:"structure"` - - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` - - // The move status for the IP address. - Status *string `locationName:"status" type:"string" enum:"Status"` -} - -// String returns the string representation -func (s RestoreAddressToClassicOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RestoreAddressToClassicOutput) GoString() string { - return s.String() -} - -// SetPublicIp sets the PublicIp field's value. -func (s *RestoreAddressToClassicOutput) SetPublicIp(v string) *RestoreAddressToClassicOutput { - s.PublicIp = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *RestoreAddressToClassicOutput) SetStatus(v string) *RestoreAddressToClassicOutput { - s.Status = &v - return s -} - -type RevokeClientVpnIngressInput struct { - _ struct{} `type:"structure"` - - // The ID of the Active Directory group for which to revoke access. - AccessGroupId *string `type:"string"` - - // The ID of the Client VPN endpoint with which the authorization rule is associated. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // Indicates whether access should be revoked for all clients. - RevokeAllGroups *bool `type:"boolean"` - - // The IPv4 address range, in CIDR notation, of the network for which access - // is being removed. - // - // TargetNetworkCidr is a required field - TargetNetworkCidr *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s RevokeClientVpnIngressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeClientVpnIngressInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RevokeClientVpnIngressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RevokeClientVpnIngressInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - if s.TargetNetworkCidr == nil { - invalidParams.Add(request.NewErrParamRequired("TargetNetworkCidr")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAccessGroupId sets the AccessGroupId field's value. -func (s *RevokeClientVpnIngressInput) SetAccessGroupId(v string) *RevokeClientVpnIngressInput { - s.AccessGroupId = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *RevokeClientVpnIngressInput) SetClientVpnEndpointId(v string) *RevokeClientVpnIngressInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RevokeClientVpnIngressInput) SetDryRun(v bool) *RevokeClientVpnIngressInput { - s.DryRun = &v - return s -} - -// SetRevokeAllGroups sets the RevokeAllGroups field's value. -func (s *RevokeClientVpnIngressInput) SetRevokeAllGroups(v bool) *RevokeClientVpnIngressInput { - s.RevokeAllGroups = &v - return s -} - -// SetTargetNetworkCidr sets the TargetNetworkCidr field's value. -func (s *RevokeClientVpnIngressInput) SetTargetNetworkCidr(v string) *RevokeClientVpnIngressInput { - s.TargetNetworkCidr = &v - return s -} - -type RevokeClientVpnIngressOutput struct { - _ struct{} `type:"structure"` - - // The current state of the authorization rule. - Status *ClientVpnAuthorizationRuleStatus `locationName:"status" type:"structure"` -} - -// String returns the string representation -func (s RevokeClientVpnIngressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeClientVpnIngressOutput) GoString() string { - return s.String() -} - -// SetStatus sets the Status field's value. -func (s *RevokeClientVpnIngressOutput) SetStatus(v *ClientVpnAuthorizationRuleStatus) *RevokeClientVpnIngressOutput { - s.Status = v - return s -} - -type RevokeSecurityGroupEgressInput struct { - _ struct{} `type:"structure"` - - // Not supported. Use a set of IP permissions to specify the CIDR. - CidrIp *string `locationName:"cidrIp" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Not supported. Use a set of IP permissions to specify the port. - FromPort *int64 `locationName:"fromPort" type:"integer"` - - // The ID of the security group. - // - // GroupId is a required field - GroupId *string `locationName:"groupId" type:"string" required:"true"` - - // The sets of IP permissions. You can't specify a destination security group - // and a CIDR IP address range in the same set of permissions. - IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - - // Not supported. Use a set of IP permissions to specify the protocol name or - // number. - IpProtocol *string `locationName:"ipProtocol" type:"string"` - - // Not supported. Use a set of IP permissions to specify a destination security - // group. - SourceSecurityGroupName *string `locationName:"sourceSecurityGroupName" type:"string"` - - // Not supported. Use a set of IP permissions to specify a destination security - // group. - SourceSecurityGroupOwnerId *string `locationName:"sourceSecurityGroupOwnerId" type:"string"` - - // Not supported. Use a set of IP permissions to specify the port. - ToPort *int64 `locationName:"toPort" type:"integer"` -} - -// String returns the string representation -func (s RevokeSecurityGroupEgressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeSecurityGroupEgressInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RevokeSecurityGroupEgressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RevokeSecurityGroupEgressInput"} - if s.GroupId == nil { - invalidParams.Add(request.NewErrParamRequired("GroupId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidrIp sets the CidrIp field's value. -func (s *RevokeSecurityGroupEgressInput) SetCidrIp(v string) *RevokeSecurityGroupEgressInput { - s.CidrIp = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RevokeSecurityGroupEgressInput) SetDryRun(v bool) *RevokeSecurityGroupEgressInput { - s.DryRun = &v - return s -} - -// SetFromPort sets the FromPort field's value. -func (s *RevokeSecurityGroupEgressInput) SetFromPort(v int64) *RevokeSecurityGroupEgressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *RevokeSecurityGroupEgressInput) SetGroupId(v string) *RevokeSecurityGroupEgressInput { - s.GroupId = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *RevokeSecurityGroupEgressInput) SetIpPermissions(v []*IpPermission) *RevokeSecurityGroupEgressInput { - s.IpPermissions = v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *RevokeSecurityGroupEgressInput) SetIpProtocol(v string) *RevokeSecurityGroupEgressInput { - s.IpProtocol = &v - return s -} - -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *RevokeSecurityGroupEgressInput) SetSourceSecurityGroupName(v string) *RevokeSecurityGroupEgressInput { - s.SourceSecurityGroupName = &v - return s -} - -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *RevokeSecurityGroupEgressInput) SetSourceSecurityGroupOwnerId(v string) *RevokeSecurityGroupEgressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *RevokeSecurityGroupEgressInput) SetToPort(v int64) *RevokeSecurityGroupEgressInput { - s.ToPort = &v - return s -} - -type RevokeSecurityGroupEgressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RevokeSecurityGroupEgressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeSecurityGroupEgressOutput) GoString() string { - return s.String() -} - -type RevokeSecurityGroupIngressInput struct { - _ struct{} `type:"structure"` - - // The CIDR IP address range. You can't specify this parameter when specifying - // a source security group. - CidrIp *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The start of port range for the TCP and UDP protocols, or an ICMP type number. - // For the ICMP type number, use -1 to specify all ICMP types. - FromPort *int64 `type:"integer"` - - // The ID of the security group. You must specify either the security group - // ID or the security group name in the request. For security groups in a nondefault - // VPC, you must specify the security group ID. - GroupId *string `type:"string"` - - // [EC2-Classic, default VPC] The name of the security group. You must specify - // either the security group ID or the security group name in the request. - GroupName *string `type:"string"` - - // The sets of IP permissions. You can't specify a source security group and - // a CIDR IP address range in the same set of permissions. - IpPermissions []*IpPermission `locationNameList:"item" type:"list"` - - // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). - // Use -1 to specify all. - IpProtocol *string `type:"string"` - - // [EC2-Classic, default VPC] The name of the source security group. You can't - // specify this parameter in combination with the following parameters: the - // CIDR IP address range, the start of the port range, the IP protocol, and - // the end of the port range. For EC2-VPC, the source security group must be - // in the same VPC. To revoke a specific rule for an IP protocol and port range, - // use a set of IP permissions instead. - SourceSecurityGroupName *string `type:"string"` - - // [EC2-Classic] The AWS account ID of the source security group, if the source - // security group is in a different account. You can't specify this parameter - // in combination with the following parameters: the CIDR IP address range, - // the IP protocol, the start of the port range, and the end of the port range. - // To revoke a specific rule for an IP protocol and port range, use a set of - // IP permissions instead. - SourceSecurityGroupOwnerId *string `type:"string"` - - // The end of port range for the TCP and UDP protocols, or an ICMP code number. - // For the ICMP code number, use -1 to specify all ICMP codes for the ICMP type. - ToPort *int64 `type:"integer"` -} - -// String returns the string representation -func (s RevokeSecurityGroupIngressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeSecurityGroupIngressInput) GoString() string { - return s.String() -} - -// SetCidrIp sets the CidrIp field's value. -func (s *RevokeSecurityGroupIngressInput) SetCidrIp(v string) *RevokeSecurityGroupIngressInput { - s.CidrIp = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RevokeSecurityGroupIngressInput) SetDryRun(v bool) *RevokeSecurityGroupIngressInput { - s.DryRun = &v - return s -} - -// SetFromPort sets the FromPort field's value. -func (s *RevokeSecurityGroupIngressInput) SetFromPort(v int64) *RevokeSecurityGroupIngressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *RevokeSecurityGroupIngressInput) SetGroupId(v string) *RevokeSecurityGroupIngressInput { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *RevokeSecurityGroupIngressInput) SetGroupName(v string) *RevokeSecurityGroupIngressInput { - s.GroupName = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *RevokeSecurityGroupIngressInput) SetIpPermissions(v []*IpPermission) *RevokeSecurityGroupIngressInput { - s.IpPermissions = v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *RevokeSecurityGroupIngressInput) SetIpProtocol(v string) *RevokeSecurityGroupIngressInput { - s.IpProtocol = &v - return s -} - -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *RevokeSecurityGroupIngressInput) SetSourceSecurityGroupName(v string) *RevokeSecurityGroupIngressInput { - s.SourceSecurityGroupName = &v - return s -} - -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *RevokeSecurityGroupIngressInput) SetSourceSecurityGroupOwnerId(v string) *RevokeSecurityGroupIngressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *RevokeSecurityGroupIngressInput) SetToPort(v int64) *RevokeSecurityGroupIngressInput { - s.ToPort = &v - return s -} - -type RevokeSecurityGroupIngressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RevokeSecurityGroupIngressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeSecurityGroupIngressOutput) GoString() string { - return s.String() -} - -// Describes a route in a route table. -type Route struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR block used for the destination match. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR block used for the destination match. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - - // The prefix of the AWS service. - DestinationPrefixListId *string `locationName:"destinationPrefixListId" type:"string"` - - // The ID of the egress-only internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` - - // The ID of a gateway attached to your VPC. - GatewayId *string `locationName:"gatewayId" type:"string"` - - // The ID of a NAT instance in your VPC. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The AWS account ID of the owner of the instance. - InstanceOwnerId *string `locationName:"instanceOwnerId" type:"string"` - - // The ID of a NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // Describes how the route was created. - // - // * CreateRouteTable - The route was automatically created when the route - // table was created. - // - // * CreateRoute - The route was manually added to the route table. - // - // * EnableVgwRoutePropagation - The route was propagated by route propagation. - Origin *string `locationName:"origin" type:"string" enum:"RouteOrigin"` - - // The state of the route. The blackhole state indicates that the route's target - // isn't available (for example, the specified gateway isn't attached to the - // VPC, or the specified NAT instance has been terminated). - State *string `locationName:"state" type:"string" enum:"RouteState"` - - // The ID of a transit gateway. - TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` - - // The ID of a VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s Route) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Route) GoString() string { - return s.String() -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *Route) SetDestinationCidrBlock(v string) *Route { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *Route) SetDestinationIpv6CidrBlock(v string) *Route { - s.DestinationIpv6CidrBlock = &v - return s -} - -// SetDestinationPrefixListId sets the DestinationPrefixListId field's value. -func (s *Route) SetDestinationPrefixListId(v string) *Route { - s.DestinationPrefixListId = &v - return s -} - -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *Route) SetEgressOnlyInternetGatewayId(v string) *Route { - s.EgressOnlyInternetGatewayId = &v - return s -} - -// SetGatewayId sets the GatewayId field's value. -func (s *Route) SetGatewayId(v string) *Route { - s.GatewayId = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *Route) SetInstanceId(v string) *Route { - s.InstanceId = &v - return s -} - -// SetInstanceOwnerId sets the InstanceOwnerId field's value. -func (s *Route) SetInstanceOwnerId(v string) *Route { - s.InstanceOwnerId = &v - return s -} - -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *Route) SetNatGatewayId(v string) *Route { - s.NatGatewayId = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *Route) SetNetworkInterfaceId(v string) *Route { - s.NetworkInterfaceId = &v - return s -} - -// SetOrigin sets the Origin field's value. -func (s *Route) SetOrigin(v string) *Route { - s.Origin = &v - return s -} - -// SetState sets the State field's value. -func (s *Route) SetState(v string) *Route { - s.State = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *Route) SetTransitGatewayId(v string) *Route { - s.TransitGatewayId = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *Route) SetVpcPeeringConnectionId(v string) *Route { - s.VpcPeeringConnectionId = &v - return s -} - -// Describes a route table. -type RouteTable struct { - _ struct{} `type:"structure"` - - // The associations between the route table and one or more subnets. - Associations []*RouteTableAssociation `locationName:"associationSet" locationNameList:"item" type:"list"` - - // The ID of the AWS account that owns the route table. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Any virtual private gateway (VGW) propagating routes. - PropagatingVgws []*PropagatingVgw `locationName:"propagatingVgwSet" locationNameList:"item" type:"list"` - - // The ID of the route table. - RouteTableId *string `locationName:"routeTableId" type:"string"` - - // The routes in the route table. - Routes []*Route `locationName:"routeSet" locationNameList:"item" type:"list"` - - // Any tags assigned to the route table. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s RouteTable) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RouteTable) GoString() string { - return s.String() -} - -// SetAssociations sets the Associations field's value. -func (s *RouteTable) SetAssociations(v []*RouteTableAssociation) *RouteTable { - s.Associations = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *RouteTable) SetOwnerId(v string) *RouteTable { - s.OwnerId = &v - return s -} - -// SetPropagatingVgws sets the PropagatingVgws field's value. -func (s *RouteTable) SetPropagatingVgws(v []*PropagatingVgw) *RouteTable { - s.PropagatingVgws = v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *RouteTable) SetRouteTableId(v string) *RouteTable { - s.RouteTableId = &v - return s -} - -// SetRoutes sets the Routes field's value. -func (s *RouteTable) SetRoutes(v []*Route) *RouteTable { - s.Routes = v - return s -} - -// SetTags sets the Tags field's value. -func (s *RouteTable) SetTags(v []*Tag) *RouteTable { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *RouteTable) SetVpcId(v string) *RouteTable { - s.VpcId = &v - return s -} - -// Describes an association between a route table and a subnet. -type RouteTableAssociation struct { - _ struct{} `type:"structure"` - - // Indicates whether this is the main route table. - Main *bool `locationName:"main" type:"boolean"` - - // The ID of the association between a route table and a subnet. - RouteTableAssociationId *string `locationName:"routeTableAssociationId" type:"string"` - - // The ID of the route table. - RouteTableId *string `locationName:"routeTableId" type:"string"` - - // The ID of the subnet. A subnet ID is not returned for an implicit association. - SubnetId *string `locationName:"subnetId" type:"string"` -} - -// String returns the string representation -func (s RouteTableAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RouteTableAssociation) GoString() string { - return s.String() -} - -// SetMain sets the Main field's value. -func (s *RouteTableAssociation) SetMain(v bool) *RouteTableAssociation { - s.Main = &v - return s -} - -// SetRouteTableAssociationId sets the RouteTableAssociationId field's value. -func (s *RouteTableAssociation) SetRouteTableAssociationId(v string) *RouteTableAssociation { - s.RouteTableAssociationId = &v - return s -} - -// SetRouteTableId sets the RouteTableId field's value. -func (s *RouteTableAssociation) SetRouteTableId(v string) *RouteTableAssociation { - s.RouteTableId = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *RouteTableAssociation) SetSubnetId(v string) *RouteTableAssociation { - s.SubnetId = &v - return s -} - -type RunInstancesInput struct { - _ struct{} `type:"structure"` - - // Reserved. - AdditionalInfo *string `locationName:"additionalInfo" type:"string"` - - // The block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // Information about the Capacity Reservation targeting option. If you do not - // specify this parameter, the instance's Capacity Reservation preference defaults - // to open, which enables it to run in any open Capacity Reservation that has - // matching attributes (instance type, platform, Availability Zone). - CapacityReservationSpecification *CapacityReservationSpecification `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraints: Maximum 64 ASCII characters - ClientToken *string `locationName:"clientToken" type:"string"` - - // The CPU options for the instance. For more information, see Optimizing CPU - // Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) - // in the Amazon Elastic Compute Cloud User Guide. - CpuOptions *CpuOptionsRequest `type:"structure"` - - // The credit option for CPU usage of the T2 or T3 instance. Valid values are - // standard and unlimited. To change this attribute after launch, use ModifyInstanceCreditSpecification - // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html). - // For more information, see Burstable Performance Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Default: standard (T2 instances) or unlimited (T3 instances) - CreditSpecification *CreditSpecificationRequest `type:"structure"` - - // If you set this parameter to true, you can't terminate the instance using - // the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute - // after launch, use ModifyInstanceAttribute (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html). - // Alternatively, if you set InstanceInitiatedShutdownBehavior to terminate, - // you can terminate the instance by running the shutdown command from the instance. - // - // Default: false - DisableApiTermination *bool `locationName:"disableApiTermination" type:"boolean"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Indicates whether the instance is optimized for Amazon EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal Amazon EBS I/O performance. This optimization isn't - // available with all instance types. Additional usage charges apply when using - // an EBS-optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // An elastic GPU to associate with the instance. An Elastic GPU is a GPU resource - // that you can attach to your Windows instance to accelerate the graphics performance - // of your applications. For more information, see Amazon EC2 Elastic GPUs (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html) - // in the Amazon Elastic Compute Cloud User Guide. - ElasticGpuSpecification []*ElasticGpuSpecification `locationNameList:"item" type:"list"` - - // An elastic inference accelerator to associate with the instance. Elastic - // inference accelerators are a resource you can attach to your Amazon EC2 instances - // to accelerate your Deep Learning (DL) inference workloads. - ElasticInferenceAccelerators []*ElasticInferenceAccelerator `locationName:"ElasticInferenceAccelerator" locationNameList:"item" type:"list"` - - // Indicates whether an instance is enabled for hibernation. For more information, - // see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) - // in the Amazon Elastic Compute Cloud User Guide. - HibernationOptions *HibernationOptionsRequest `type:"structure"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI. An AMI ID is required to launch an instance and must be - // specified here or in a launch template. - ImageId *string `type:"string"` - - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - // - // Default: stop - InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` - - // The market (purchasing) option for the instances. - // - // For RunInstances, persistent Spot Instance requests are only supported when - // InstanceInterruptionBehavior is set to either hibernate or stop. - InstanceMarketOptions *InstanceMarketOptionsRequest `type:"structure"` - - // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Default: m1.small - InstanceType *string `type:"string" enum:"InstanceType"` - - // [EC2-VPC] The number of IPv6 addresses to associate with the primary network - // interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. - // You cannot specify this option and the option to assign specific IPv6 addresses - // in the same request. You can specify this option if you've specified a minimum - // number of instances to launch. - // - // You cannot specify this option and the network interfaces option in the same - // request. - Ipv6AddressCount *int64 `type:"integer"` - - // [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with - // the primary network interface. You cannot specify this option and the option - // to assign a number of IPv6 addresses in the same request. You cannot specify - // this option if you've specified a minimum number of instances to launch. - // - // You cannot specify this option and the network interfaces option in the same - // request. - Ipv6Addresses []*InstanceIpv6Address `locationName:"Ipv6Address" locationNameList:"item" type:"list"` - - // The ID of the kernel. - // - // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more - // information, see PV-GRUB (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) - // in the Amazon Elastic Compute Cloud User Guide. - KernelId *string `type:"string"` - - // The name of the key pair. You can create a key pair using CreateKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html) - // or ImportKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html). - // - // If you do not specify a key pair, you can't connect to the instance unless - // you choose an AMI that is configured to allow users another way to log in. - KeyName *string `type:"string"` - - // The launch template to use to launch the instances. Any parameters that you - // specify in RunInstances override the same parameters in the launch template. - // You can specify either the name or ID of a launch template, but not both. - LaunchTemplate *LaunchTemplateSpecification `type:"structure"` - - // The license configurations. - LicenseSpecifications []*LicenseConfigurationRequest `locationName:"LicenseSpecification" locationNameList:"item" type:"list"` - - // The maximum number of instances to launch. If you specify more instances - // than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches - // the largest possible number of instances above MinCount. - // - // Constraints: Between 1 and the maximum number you're allowed for the specified - // instance type. For more information about the default limits, and how to - // request an increase, see How many instances can I run in Amazon EC2 (http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) - // in the Amazon EC2 FAQ. - // - // MaxCount is a required field - MaxCount *int64 `type:"integer" required:"true"` - - // The metadata options for the instance. For more information, see Instance - // Metadata and User Data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). - MetadataOptions *InstanceMetadataOptionsRequest `type:"structure"` - - // The minimum number of instances to launch. If you specify a minimum that - // is more instances than Amazon EC2 can launch in the target Availability Zone, - // Amazon EC2 launches no instances. - // - // Constraints: Between 1 and the maximum number you're allowed for the specified - // instance type. For more information about the default limits, and how to - // request an increase, see How many instances can I run in Amazon EC2 (http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) - // in the Amazon EC2 General FAQ. - // - // MinCount is a required field - MinCount *int64 `type:"integer" required:"true"` - - // Specifies whether detailed monitoring is enabled for the instance. - Monitoring *RunInstancesMonitoringEnabled `type:"structure"` - - // The network interfaces to associate with the instance. If you specify a network - // interface, you must specify any security groups and subnets as part of the - // network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterface" locationNameList:"item" type:"list"` - - // The placement for the instance. - Placement *Placement `type:"structure"` - - // [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 - // address range of the subnet. - // - // Only one private IP address can be designated as primary. You can't specify - // this option if you've specified the option to designate a private IP address - // as the primary IP address in a network interface specification. You cannot - // specify this option if you're launching more than one instance in the request. - // - // You cannot specify this option and the network interfaces option in the same - // request. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // The ID of the RAM disk to select. Some kernels require additional drivers - // at launch. Check the kernel requirements for information about whether you - // need to specify a RAM disk. To find kernel requirements, go to the AWS Resource - // Center and search for the kernel ID. - // - // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more - // information, see PV-GRUB (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) - // in the Amazon Elastic Compute Cloud User Guide. - RamdiskId *string `type:"string"` - - // The IDs of the security groups. You can create a security group using CreateSecurityGroup - // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html). - // - // If you specify a network interface, you must specify any security groups - // as part of the network interface. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // [EC2-Classic, default VPC] The names of the security groups. For a nondefault - // VPC, you must use security group IDs instead. - // - // If you specify a network interface, you must specify any security groups - // as part of the network interface. - // - // Default: Amazon EC2 uses the default security group. - SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"SecurityGroup" type:"list"` - - // [EC2-VPC] The ID of the subnet to launch the instance into. - // - // If you specify a network interface, you must specify any subnets as part - // of the network interface. - SubnetId *string `type:"string"` - - // The tags to apply to the resources during launch. You can only tag instances - // and volumes on launch. The specified tags are applied to all instances or - // volumes that are created during launch. To tag a resource after it has been - // created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). - TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` - - // The user data to make available to the instance. For more information, see - // Running Commands on Your Linux Instance at Launch (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) - // (Linux) and Adding User Data (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data) - // (Windows). If you are using a command line tool, base64-encoding is performed - // for you, and you can load the text from a file. Otherwise, you must provide - // base64-encoded text. User data is limited to 16 KB. - UserData *string `type:"string"` -} - -// String returns the string representation -func (s RunInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RunInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RunInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RunInstancesInput"} - if s.MaxCount == nil { - invalidParams.Add(request.NewErrParamRequired("MaxCount")) - } - if s.MinCount == nil { - invalidParams.Add(request.NewErrParamRequired("MinCount")) - } - if s.CreditSpecification != nil { - if err := s.CreditSpecification.Validate(); err != nil { - invalidParams.AddNested("CreditSpecification", err.(request.ErrInvalidParams)) - } - } - if s.ElasticGpuSpecification != nil { - for i, v := range s.ElasticGpuSpecification { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticGpuSpecification", i), err.(request.ErrInvalidParams)) - } - } - } - if s.ElasticInferenceAccelerators != nil { - for i, v := range s.ElasticInferenceAccelerators { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticInferenceAccelerators", i), err.(request.ErrInvalidParams)) - } - } - } - if s.Monitoring != nil { - if err := s.Monitoring.Validate(); err != nil { - invalidParams.AddNested("Monitoring", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAdditionalInfo sets the AdditionalInfo field's value. -func (s *RunInstancesInput) SetAdditionalInfo(v string) *RunInstancesInput { - s.AdditionalInfo = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RunInstancesInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RunInstancesInput { - s.BlockDeviceMappings = v - return s -} - -// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. -func (s *RunInstancesInput) SetCapacityReservationSpecification(v *CapacityReservationSpecification) *RunInstancesInput { - s.CapacityReservationSpecification = v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *RunInstancesInput) SetClientToken(v string) *RunInstancesInput { - s.ClientToken = &v - return s -} - -// SetCpuOptions sets the CpuOptions field's value. -func (s *RunInstancesInput) SetCpuOptions(v *CpuOptionsRequest) *RunInstancesInput { - s.CpuOptions = v - return s -} - -// SetCreditSpecification sets the CreditSpecification field's value. -func (s *RunInstancesInput) SetCreditSpecification(v *CreditSpecificationRequest) *RunInstancesInput { - s.CreditSpecification = v - return s -} - -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *RunInstancesInput) SetDisableApiTermination(v bool) *RunInstancesInput { - s.DisableApiTermination = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RunInstancesInput) SetDryRun(v bool) *RunInstancesInput { - s.DryRun = &v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *RunInstancesInput) SetEbsOptimized(v bool) *RunInstancesInput { - s.EbsOptimized = &v - return s -} - -// SetElasticGpuSpecification sets the ElasticGpuSpecification field's value. -func (s *RunInstancesInput) SetElasticGpuSpecification(v []*ElasticGpuSpecification) *RunInstancesInput { - s.ElasticGpuSpecification = v - return s -} - -// SetElasticInferenceAccelerators sets the ElasticInferenceAccelerators field's value. -func (s *RunInstancesInput) SetElasticInferenceAccelerators(v []*ElasticInferenceAccelerator) *RunInstancesInput { - s.ElasticInferenceAccelerators = v - return s -} - -// SetHibernationOptions sets the HibernationOptions field's value. -func (s *RunInstancesInput) SetHibernationOptions(v *HibernationOptionsRequest) *RunInstancesInput { - s.HibernationOptions = v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *RunInstancesInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *RunInstancesInput { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *RunInstancesInput) SetImageId(v string) *RunInstancesInput { - s.ImageId = &v - return s -} - -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *RunInstancesInput) SetInstanceInitiatedShutdownBehavior(v string) *RunInstancesInput { - s.InstanceInitiatedShutdownBehavior = &v - return s -} - -// SetInstanceMarketOptions sets the InstanceMarketOptions field's value. -func (s *RunInstancesInput) SetInstanceMarketOptions(v *InstanceMarketOptionsRequest) *RunInstancesInput { - s.InstanceMarketOptions = v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *RunInstancesInput) SetInstanceType(v string) *RunInstancesInput { - s.InstanceType = &v - return s -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *RunInstancesInput) SetIpv6AddressCount(v int64) *RunInstancesInput { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *RunInstancesInput) SetIpv6Addresses(v []*InstanceIpv6Address) *RunInstancesInput { - s.Ipv6Addresses = v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *RunInstancesInput) SetKernelId(v string) *RunInstancesInput { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *RunInstancesInput) SetKeyName(v string) *RunInstancesInput { - s.KeyName = &v - return s -} - -// SetLaunchTemplate sets the LaunchTemplate field's value. -func (s *RunInstancesInput) SetLaunchTemplate(v *LaunchTemplateSpecification) *RunInstancesInput { - s.LaunchTemplate = v - return s -} - -// SetLicenseSpecifications sets the LicenseSpecifications field's value. -func (s *RunInstancesInput) SetLicenseSpecifications(v []*LicenseConfigurationRequest) *RunInstancesInput { - s.LicenseSpecifications = v - return s -} - -// SetMaxCount sets the MaxCount field's value. -func (s *RunInstancesInput) SetMaxCount(v int64) *RunInstancesInput { - s.MaxCount = &v - return s -} - -// SetMetadataOptions sets the MetadataOptions field's value. -func (s *RunInstancesInput) SetMetadataOptions(v *InstanceMetadataOptionsRequest) *RunInstancesInput { - s.MetadataOptions = v - return s -} - -// SetMinCount sets the MinCount field's value. -func (s *RunInstancesInput) SetMinCount(v int64) *RunInstancesInput { - s.MinCount = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *RunInstancesInput) SetMonitoring(v *RunInstancesMonitoringEnabled) *RunInstancesInput { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *RunInstancesInput) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *RunInstancesInput { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *RunInstancesInput) SetPlacement(v *Placement) *RunInstancesInput { - s.Placement = v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *RunInstancesInput) SetPrivateIpAddress(v string) *RunInstancesInput { - s.PrivateIpAddress = &v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *RunInstancesInput) SetRamdiskId(v string) *RunInstancesInput { - s.RamdiskId = &v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *RunInstancesInput) SetSecurityGroupIds(v []*string) *RunInstancesInput { - s.SecurityGroupIds = v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *RunInstancesInput) SetSecurityGroups(v []*string) *RunInstancesInput { - s.SecurityGroups = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *RunInstancesInput) SetSubnetId(v string) *RunInstancesInput { - s.SubnetId = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *RunInstancesInput) SetTagSpecifications(v []*TagSpecification) *RunInstancesInput { - s.TagSpecifications = v - return s -} - -// SetUserData sets the UserData field's value. -func (s *RunInstancesInput) SetUserData(v string) *RunInstancesInput { - s.UserData = &v - return s -} - -// Describes the monitoring of an instance. -type RunInstancesMonitoringEnabled struct { - _ struct{} `type:"structure"` - - // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring - // is enabled. - // - // Enabled is a required field - Enabled *bool `locationName:"enabled" type:"boolean" required:"true"` -} - -// String returns the string representation -func (s RunInstancesMonitoringEnabled) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RunInstancesMonitoringEnabled) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RunInstancesMonitoringEnabled) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RunInstancesMonitoringEnabled"} - if s.Enabled == nil { - invalidParams.Add(request.NewErrParamRequired("Enabled")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetEnabled sets the Enabled field's value. -func (s *RunInstancesMonitoringEnabled) SetEnabled(v bool) *RunInstancesMonitoringEnabled { - s.Enabled = &v - return s -} - -// Contains the parameters for RunScheduledInstances. -type RunScheduledInstancesInput struct { - _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier that ensures the idempotency of the request. - // For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The number of instances. - // - // Default: 1 - InstanceCount *int64 `type:"integer"` - - // The launch specification. You must match the instance type, Availability - // Zone, network, and platform of the schedule that you purchased. - // - // LaunchSpecification is a required field - LaunchSpecification *ScheduledInstancesLaunchSpecification `type:"structure" required:"true"` - - // The Scheduled Instance ID. - // - // ScheduledInstanceId is a required field - ScheduledInstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s RunScheduledInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RunScheduledInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *RunScheduledInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RunScheduledInstancesInput"} - if s.LaunchSpecification == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchSpecification")) - } - if s.ScheduledInstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("ScheduledInstanceId")) - } - if s.LaunchSpecification != nil { - if err := s.LaunchSpecification.Validate(); err != nil { - invalidParams.AddNested("LaunchSpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *RunScheduledInstancesInput) SetClientToken(v string) *RunScheduledInstancesInput { - s.ClientToken = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *RunScheduledInstancesInput) SetDryRun(v bool) *RunScheduledInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *RunScheduledInstancesInput) SetInstanceCount(v int64) *RunScheduledInstancesInput { - s.InstanceCount = &v - return s -} - -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *RunScheduledInstancesInput) SetLaunchSpecification(v *ScheduledInstancesLaunchSpecification) *RunScheduledInstancesInput { - s.LaunchSpecification = v - return s -} - -// SetScheduledInstanceId sets the ScheduledInstanceId field's value. -func (s *RunScheduledInstancesInput) SetScheduledInstanceId(v string) *RunScheduledInstancesInput { - s.ScheduledInstanceId = &v - return s -} - -// Contains the output of RunScheduledInstances. -type RunScheduledInstancesOutput struct { - _ struct{} `type:"structure"` - - // The IDs of the newly launched instances. - InstanceIdSet []*string `locationName:"instanceIdSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s RunScheduledInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RunScheduledInstancesOutput) GoString() string { - return s.String() -} - -// SetInstanceIdSet sets the InstanceIdSet field's value. -func (s *RunScheduledInstancesOutput) SetInstanceIdSet(v []*string) *RunScheduledInstancesOutput { - s.InstanceIdSet = v - return s -} - -// Describes the storage parameters for S3 and S3 buckets for an instance store-backed -// AMI. -type S3Storage struct { - _ struct{} `type:"structure"` - - // The access key ID of the owner of the bucket. Before you specify a value - // for your access key ID, review and follow the guidance in Best Practices - // for Managing AWS Access Keys (https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html). - AWSAccessKeyId *string `type:"string"` - - // The bucket in which to store the AMI. You can specify a bucket that you already - // own or a new bucket that Amazon EC2 creates on your behalf. If you specify - // a bucket that belongs to someone else, Amazon EC2 returns an error. - Bucket *string `locationName:"bucket" type:"string"` - - // The beginning of the file name of the AMI. - Prefix *string `locationName:"prefix" type:"string"` - - // An Amazon S3 upload policy that gives Amazon EC2 permission to upload items - // into Amazon S3 on your behalf. - // - // UploadPolicy is automatically base64 encoded/decoded by the SDK. - UploadPolicy []byte `locationName:"uploadPolicy" type:"blob"` - - // The signature of the JSON document. - UploadPolicySignature *string `locationName:"uploadPolicySignature" type:"string"` -} - -// String returns the string representation -func (s S3Storage) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s S3Storage) GoString() string { - return s.String() -} - -// SetAWSAccessKeyId sets the AWSAccessKeyId field's value. -func (s *S3Storage) SetAWSAccessKeyId(v string) *S3Storage { - s.AWSAccessKeyId = &v - return s -} - -// SetBucket sets the Bucket field's value. -func (s *S3Storage) SetBucket(v string) *S3Storage { - s.Bucket = &v - return s -} - -// SetPrefix sets the Prefix field's value. -func (s *S3Storage) SetPrefix(v string) *S3Storage { - s.Prefix = &v - return s -} - -// SetUploadPolicy sets the UploadPolicy field's value. -func (s *S3Storage) SetUploadPolicy(v []byte) *S3Storage { - s.UploadPolicy = v - return s -} - -// SetUploadPolicySignature sets the UploadPolicySignature field's value. -func (s *S3Storage) SetUploadPolicySignature(v string) *S3Storage { - s.UploadPolicySignature = &v - return s -} - -// Describes a Scheduled Instance. -type ScheduledInstance struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The date when the Scheduled Instance was purchased. - CreateDate *time.Time `locationName:"createDate" type:"timestamp"` - - // The hourly price for a single instance. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The number of instances. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The network platform (EC2-Classic or EC2-VPC). - NetworkPlatform *string `locationName:"networkPlatform" type:"string"` - - // The time for the next schedule to start. - NextSlotStartTime *time.Time `locationName:"nextSlotStartTime" type:"timestamp"` - - // The platform (Linux/UNIX or Windows). - Platform *string `locationName:"platform" type:"string"` - - // The time that the previous schedule ended or will end. - PreviousSlotEndTime *time.Time `locationName:"previousSlotEndTime" type:"timestamp"` - - // The schedule recurrence. - Recurrence *ScheduledInstanceRecurrence `locationName:"recurrence" type:"structure"` - - // The Scheduled Instance ID. - ScheduledInstanceId *string `locationName:"scheduledInstanceId" type:"string"` - - // The number of hours in the schedule. - SlotDurationInHours *int64 `locationName:"slotDurationInHours" type:"integer"` - - // The end date for the Scheduled Instance. - TermEndDate *time.Time `locationName:"termEndDate" type:"timestamp"` - - // The start date for the Scheduled Instance. - TermStartDate *time.Time `locationName:"termStartDate" type:"timestamp"` - - // The total number of hours for a single instance for the entire term. - TotalScheduledInstanceHours *int64 `locationName:"totalScheduledInstanceHours" type:"integer"` -} - -// String returns the string representation -func (s ScheduledInstance) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstance) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ScheduledInstance) SetAvailabilityZone(v string) *ScheduledInstance { - s.AvailabilityZone = &v - return s -} - -// SetCreateDate sets the CreateDate field's value. -func (s *ScheduledInstance) SetCreateDate(v time.Time) *ScheduledInstance { - s.CreateDate = &v - return s -} - -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *ScheduledInstance) SetHourlyPrice(v string) *ScheduledInstance { - s.HourlyPrice = &v - return s -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *ScheduledInstance) SetInstanceCount(v int64) *ScheduledInstance { - s.InstanceCount = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ScheduledInstance) SetInstanceType(v string) *ScheduledInstance { - s.InstanceType = &v - return s -} - -// SetNetworkPlatform sets the NetworkPlatform field's value. -func (s *ScheduledInstance) SetNetworkPlatform(v string) *ScheduledInstance { - s.NetworkPlatform = &v - return s -} - -// SetNextSlotStartTime sets the NextSlotStartTime field's value. -func (s *ScheduledInstance) SetNextSlotStartTime(v time.Time) *ScheduledInstance { - s.NextSlotStartTime = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ScheduledInstance) SetPlatform(v string) *ScheduledInstance { - s.Platform = &v - return s -} - -// SetPreviousSlotEndTime sets the PreviousSlotEndTime field's value. -func (s *ScheduledInstance) SetPreviousSlotEndTime(v time.Time) *ScheduledInstance { - s.PreviousSlotEndTime = &v - return s -} - -// SetRecurrence sets the Recurrence field's value. -func (s *ScheduledInstance) SetRecurrence(v *ScheduledInstanceRecurrence) *ScheduledInstance { - s.Recurrence = v - return s -} - -// SetScheduledInstanceId sets the ScheduledInstanceId field's value. -func (s *ScheduledInstance) SetScheduledInstanceId(v string) *ScheduledInstance { - s.ScheduledInstanceId = &v - return s -} - -// SetSlotDurationInHours sets the SlotDurationInHours field's value. -func (s *ScheduledInstance) SetSlotDurationInHours(v int64) *ScheduledInstance { - s.SlotDurationInHours = &v - return s -} - -// SetTermEndDate sets the TermEndDate field's value. -func (s *ScheduledInstance) SetTermEndDate(v time.Time) *ScheduledInstance { - s.TermEndDate = &v - return s -} - -// SetTermStartDate sets the TermStartDate field's value. -func (s *ScheduledInstance) SetTermStartDate(v time.Time) *ScheduledInstance { - s.TermStartDate = &v - return s -} - -// SetTotalScheduledInstanceHours sets the TotalScheduledInstanceHours field's value. -func (s *ScheduledInstance) SetTotalScheduledInstanceHours(v int64) *ScheduledInstance { - s.TotalScheduledInstanceHours = &v - return s -} - -// Describes a schedule that is available for your Scheduled Instances. -type ScheduledInstanceAvailability struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The number of available instances. - AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` - - // The time period for the first schedule to start. - FirstSlotStartTime *time.Time `locationName:"firstSlotStartTime" type:"timestamp"` - - // The hourly price for a single instance. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The instance type. You can specify one of the C3, C4, M4, or R3 instance - // types. - InstanceType *string `locationName:"instanceType" type:"string"` - - // The maximum term. The only possible value is 365 days. - MaxTermDurationInDays *int64 `locationName:"maxTermDurationInDays" type:"integer"` - - // The minimum term. The only possible value is 365 days. - MinTermDurationInDays *int64 `locationName:"minTermDurationInDays" type:"integer"` - - // The network platform (EC2-Classic or EC2-VPC). - NetworkPlatform *string `locationName:"networkPlatform" type:"string"` - - // The platform (Linux/UNIX or Windows). - Platform *string `locationName:"platform" type:"string"` - - // The purchase token. This token expires in two hours. - PurchaseToken *string `locationName:"purchaseToken" type:"string"` - - // The schedule recurrence. - Recurrence *ScheduledInstanceRecurrence `locationName:"recurrence" type:"structure"` - - // The number of hours in the schedule. - SlotDurationInHours *int64 `locationName:"slotDurationInHours" type:"integer"` - - // The total number of hours for a single instance for the entire term. - TotalScheduledInstanceHours *int64 `locationName:"totalScheduledInstanceHours" type:"integer"` -} - -// String returns the string representation -func (s ScheduledInstanceAvailability) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstanceAvailability) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ScheduledInstanceAvailability) SetAvailabilityZone(v string) *ScheduledInstanceAvailability { - s.AvailabilityZone = &v - return s -} - -// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. -func (s *ScheduledInstanceAvailability) SetAvailableInstanceCount(v int64) *ScheduledInstanceAvailability { - s.AvailableInstanceCount = &v - return s -} - -// SetFirstSlotStartTime sets the FirstSlotStartTime field's value. -func (s *ScheduledInstanceAvailability) SetFirstSlotStartTime(v time.Time) *ScheduledInstanceAvailability { - s.FirstSlotStartTime = &v - return s -} - -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *ScheduledInstanceAvailability) SetHourlyPrice(v string) *ScheduledInstanceAvailability { - s.HourlyPrice = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ScheduledInstanceAvailability) SetInstanceType(v string) *ScheduledInstanceAvailability { - s.InstanceType = &v - return s -} - -// SetMaxTermDurationInDays sets the MaxTermDurationInDays field's value. -func (s *ScheduledInstanceAvailability) SetMaxTermDurationInDays(v int64) *ScheduledInstanceAvailability { - s.MaxTermDurationInDays = &v - return s -} - -// SetMinTermDurationInDays sets the MinTermDurationInDays field's value. -func (s *ScheduledInstanceAvailability) SetMinTermDurationInDays(v int64) *ScheduledInstanceAvailability { - s.MinTermDurationInDays = &v - return s -} - -// SetNetworkPlatform sets the NetworkPlatform field's value. -func (s *ScheduledInstanceAvailability) SetNetworkPlatform(v string) *ScheduledInstanceAvailability { - s.NetworkPlatform = &v - return s -} - -// SetPlatform sets the Platform field's value. -func (s *ScheduledInstanceAvailability) SetPlatform(v string) *ScheduledInstanceAvailability { - s.Platform = &v - return s -} - -// SetPurchaseToken sets the PurchaseToken field's value. -func (s *ScheduledInstanceAvailability) SetPurchaseToken(v string) *ScheduledInstanceAvailability { - s.PurchaseToken = &v - return s -} - -// SetRecurrence sets the Recurrence field's value. -func (s *ScheduledInstanceAvailability) SetRecurrence(v *ScheduledInstanceRecurrence) *ScheduledInstanceAvailability { - s.Recurrence = v - return s -} - -// SetSlotDurationInHours sets the SlotDurationInHours field's value. -func (s *ScheduledInstanceAvailability) SetSlotDurationInHours(v int64) *ScheduledInstanceAvailability { - s.SlotDurationInHours = &v - return s -} - -// SetTotalScheduledInstanceHours sets the TotalScheduledInstanceHours field's value. -func (s *ScheduledInstanceAvailability) SetTotalScheduledInstanceHours(v int64) *ScheduledInstanceAvailability { - s.TotalScheduledInstanceHours = &v - return s -} - -// Describes the recurring schedule for a Scheduled Instance. -type ScheduledInstanceRecurrence struct { - _ struct{} `type:"structure"` - - // The frequency (Daily, Weekly, or Monthly). - Frequency *string `locationName:"frequency" type:"string"` - - // The interval quantity. The interval unit depends on the value of frequency. - // For example, every 2 weeks or every 2 months. - Interval *int64 `locationName:"interval" type:"integer"` - - // The days. For a monthly schedule, this is one or more days of the month (1-31). - // For a weekly schedule, this is one or more days of the week (1-7, where 1 - // is Sunday). - OccurrenceDaySet []*int64 `locationName:"occurrenceDaySet" locationNameList:"item" type:"list"` - - // Indicates whether the occurrence is relative to the end of the specified - // week or month. - OccurrenceRelativeToEnd *bool `locationName:"occurrenceRelativeToEnd" type:"boolean"` - - // The unit for occurrenceDaySet (DayOfWeek or DayOfMonth). - OccurrenceUnit *string `locationName:"occurrenceUnit" type:"string"` -} - -// String returns the string representation -func (s ScheduledInstanceRecurrence) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstanceRecurrence) GoString() string { - return s.String() -} - -// SetFrequency sets the Frequency field's value. -func (s *ScheduledInstanceRecurrence) SetFrequency(v string) *ScheduledInstanceRecurrence { - s.Frequency = &v - return s -} - -// SetInterval sets the Interval field's value. -func (s *ScheduledInstanceRecurrence) SetInterval(v int64) *ScheduledInstanceRecurrence { - s.Interval = &v - return s -} - -// SetOccurrenceDaySet sets the OccurrenceDaySet field's value. -func (s *ScheduledInstanceRecurrence) SetOccurrenceDaySet(v []*int64) *ScheduledInstanceRecurrence { - s.OccurrenceDaySet = v - return s -} - -// SetOccurrenceRelativeToEnd sets the OccurrenceRelativeToEnd field's value. -func (s *ScheduledInstanceRecurrence) SetOccurrenceRelativeToEnd(v bool) *ScheduledInstanceRecurrence { - s.OccurrenceRelativeToEnd = &v - return s -} - -// SetOccurrenceUnit sets the OccurrenceUnit field's value. -func (s *ScheduledInstanceRecurrence) SetOccurrenceUnit(v string) *ScheduledInstanceRecurrence { - s.OccurrenceUnit = &v - return s -} - -// Describes the recurring schedule for a Scheduled Instance. -type ScheduledInstanceRecurrenceRequest struct { - _ struct{} `type:"structure"` - - // The frequency (Daily, Weekly, or Monthly). - Frequency *string `type:"string"` - - // The interval quantity. The interval unit depends on the value of Frequency. - // For example, every 2 weeks or every 2 months. - Interval *int64 `type:"integer"` - - // The days. For a monthly schedule, this is one or more days of the month (1-31). - // For a weekly schedule, this is one or more days of the week (1-7, where 1 - // is Sunday). You can't specify this value with a daily schedule. If the occurrence - // is relative to the end of the month, you can specify only a single day. - OccurrenceDays []*int64 `locationName:"OccurrenceDay" locationNameList:"OccurenceDay" type:"list"` - - // Indicates whether the occurrence is relative to the end of the specified - // week or month. You can't specify this value with a daily schedule. - OccurrenceRelativeToEnd *bool `type:"boolean"` - - // The unit for OccurrenceDays (DayOfWeek or DayOfMonth). This value is required - // for a monthly schedule. You can't specify DayOfWeek with a weekly schedule. - // You can't specify this value with a daily schedule. - OccurrenceUnit *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstanceRecurrenceRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstanceRecurrenceRequest) GoString() string { - return s.String() -} - -// SetFrequency sets the Frequency field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetFrequency(v string) *ScheduledInstanceRecurrenceRequest { - s.Frequency = &v - return s -} - -// SetInterval sets the Interval field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetInterval(v int64) *ScheduledInstanceRecurrenceRequest { - s.Interval = &v - return s -} - -// SetOccurrenceDays sets the OccurrenceDays field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceDays(v []*int64) *ScheduledInstanceRecurrenceRequest { - s.OccurrenceDays = v - return s -} - -// SetOccurrenceRelativeToEnd sets the OccurrenceRelativeToEnd field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceRelativeToEnd(v bool) *ScheduledInstanceRecurrenceRequest { - s.OccurrenceRelativeToEnd = &v - return s -} - -// SetOccurrenceUnit sets the OccurrenceUnit field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceUnit(v string) *ScheduledInstanceRecurrenceRequest { - s.OccurrenceUnit = &v - return s -} - -// Describes a block device mapping for a Scheduled Instance. -type ScheduledInstancesBlockDeviceMapping struct { - _ struct{} `type:"structure"` - - // The device name (for example, /dev/sdh or xvdh). - DeviceName *string `type:"string"` - - // Parameters used to set up EBS volumes automatically when the instance is - // launched. - Ebs *ScheduledInstancesEbs `type:"structure"` - - // Suppresses the specified device included in the block device mapping of the - // AMI. - NoDevice *string `type:"string"` - - // The virtual device name (ephemeralN). Instance store volumes are numbered - // starting from 0. An instance type with two available instance store volumes - // can specify mappings for ephemeral0 and ephemeral1. The number of available - // instance store volumes depends on the instance type. After you connect to - // the instance, you must mount the volume. - // - // Constraints: For M3 instances, you must specify instance store volumes in - // the block device mapping for the instance. When you launch an M3 instance, - // we ignore any instance store volumes specified in the block device mapping - // for the AMI. - VirtualName *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesBlockDeviceMapping) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesBlockDeviceMapping) GoString() string { - return s.String() -} - -// SetDeviceName sets the DeviceName field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetDeviceName(v string) *ScheduledInstancesBlockDeviceMapping { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetEbs(v *ScheduledInstancesEbs) *ScheduledInstancesBlockDeviceMapping { - s.Ebs = v - return s -} - -// SetNoDevice sets the NoDevice field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetNoDevice(v string) *ScheduledInstancesBlockDeviceMapping { - s.NoDevice = &v - return s -} - -// SetVirtualName sets the VirtualName field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetVirtualName(v string) *ScheduledInstancesBlockDeviceMapping { - s.VirtualName = &v - return s -} - -// Describes an EBS volume for a Scheduled Instance. -type ScheduledInstancesEbs struct { - _ struct{} `type:"structure"` - - // Indicates whether the volume is deleted on instance termination. - DeleteOnTermination *bool `type:"boolean"` - - // Indicates whether the volume is encrypted. You can attached encrypted volumes - // only to instances that support them. - Encrypted *bool `type:"boolean"` - - // The number of I/O operations per second (IOPS) that the volume supports. - // For io1 volumes, this represents the number of IOPS that are provisioned - // for the volume. For gp2 volumes, this represents the baseline performance - // of the volume and the rate at which the volume accumulates I/O credits for - // bursting. For more information about gp2 baseline performance, I/O credits, - // and bursting, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for - // gp2 volumes. - // - // Condition: This parameter is required for requests to create io1volumes; - // it is not used in requests to create gp2, st1, sc1, or standard volumes. - Iops *int64 `type:"integer"` - - // The ID of the snapshot. - SnapshotId *string `type:"string"` - - // The size of the volume, in GiB. - // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - VolumeSize *int64 `type:"integer"` - - // The volume type. gp2 for General Purpose SSD, io1 for Provisioned IOPS SSD, - // Throughput Optimized HDD for st1, Cold HDD for sc1, or standard for Magnetic. - // - // Default: gp2 - VolumeType *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesEbs) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesEbs) GoString() string { - return s.String() -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *ScheduledInstancesEbs) SetDeleteOnTermination(v bool) *ScheduledInstancesEbs { - s.DeleteOnTermination = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *ScheduledInstancesEbs) SetEncrypted(v bool) *ScheduledInstancesEbs { - s.Encrypted = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *ScheduledInstancesEbs) SetIops(v int64) *ScheduledInstancesEbs { - s.Iops = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *ScheduledInstancesEbs) SetSnapshotId(v string) *ScheduledInstancesEbs { - s.SnapshotId = &v - return s -} - -// SetVolumeSize sets the VolumeSize field's value. -func (s *ScheduledInstancesEbs) SetVolumeSize(v int64) *ScheduledInstancesEbs { - s.VolumeSize = &v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *ScheduledInstancesEbs) SetVolumeType(v string) *ScheduledInstancesEbs { - s.VolumeType = &v - return s -} - -// Describes an IAM instance profile for a Scheduled Instance. -type ScheduledInstancesIamInstanceProfile struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN). - Arn *string `type:"string"` - - // The name. - Name *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesIamInstanceProfile) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesIamInstanceProfile) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *ScheduledInstancesIamInstanceProfile) SetArn(v string) *ScheduledInstancesIamInstanceProfile { - s.Arn = &v - return s -} - -// SetName sets the Name field's value. -func (s *ScheduledInstancesIamInstanceProfile) SetName(v string) *ScheduledInstancesIamInstanceProfile { - s.Name = &v - return s -} - -// Describes an IPv6 address. -type ScheduledInstancesIpv6Address struct { - _ struct{} `type:"structure"` - - // The IPv6 address. - Ipv6Address *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesIpv6Address) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesIpv6Address) GoString() string { - return s.String() -} - -// SetIpv6Address sets the Ipv6Address field's value. -func (s *ScheduledInstancesIpv6Address) SetIpv6Address(v string) *ScheduledInstancesIpv6Address { - s.Ipv6Address = &v - return s -} - -// Describes the launch specification for a Scheduled Instance. -// -// If you are launching the Scheduled Instance in EC2-VPC, you must specify -// the ID of the subnet. You can specify the subnet using either SubnetId or -// NetworkInterface. -type ScheduledInstancesLaunchSpecification struct { - _ struct{} `type:"structure"` - - // The block device mapping entries. - BlockDeviceMappings []*ScheduledInstancesBlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // Indicates whether the instances are optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS-optimized - // instance. - // - // Default: false - EbsOptimized *bool `type:"boolean"` - - // The IAM instance profile. - IamInstanceProfile *ScheduledInstancesIamInstanceProfile `type:"structure"` - - // The ID of the Amazon Machine Image (AMI). - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` - - // The instance type. - InstanceType *string `type:"string"` - - // The ID of the kernel. - KernelId *string `type:"string"` - - // The name of the key pair. - KeyName *string `type:"string"` - - // Enable or disable monitoring for the instances. - Monitoring *ScheduledInstancesMonitoring `type:"structure"` - - // The network interfaces. - NetworkInterfaces []*ScheduledInstancesNetworkInterface `locationName:"NetworkInterface" locationNameList:"NetworkInterface" type:"list"` - - // The placement information. - Placement *ScheduledInstancesPlacement `type:"structure"` - - // The ID of the RAM disk. - RamdiskId *string `type:"string"` - - // The IDs of the security groups. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // The ID of the subnet in which to launch the instances. - SubnetId *string `type:"string"` - - // The base64-encoded MIME user data. - UserData *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesLaunchSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesLaunchSpecification) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *ScheduledInstancesLaunchSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ScheduledInstancesLaunchSpecification"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *ScheduledInstancesLaunchSpecification) SetBlockDeviceMappings(v []*ScheduledInstancesBlockDeviceMapping) *ScheduledInstancesLaunchSpecification { - s.BlockDeviceMappings = v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *ScheduledInstancesLaunchSpecification) SetEbsOptimized(v bool) *ScheduledInstancesLaunchSpecification { - s.EbsOptimized = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *ScheduledInstancesLaunchSpecification) SetIamInstanceProfile(v *ScheduledInstancesIamInstanceProfile) *ScheduledInstancesLaunchSpecification { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetImageId(v string) *ScheduledInstancesLaunchSpecification { - s.ImageId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ScheduledInstancesLaunchSpecification) SetInstanceType(v string) *ScheduledInstancesLaunchSpecification { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetKernelId(v string) *ScheduledInstancesLaunchSpecification { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *ScheduledInstancesLaunchSpecification) SetKeyName(v string) *ScheduledInstancesLaunchSpecification { - s.KeyName = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *ScheduledInstancesLaunchSpecification) SetMonitoring(v *ScheduledInstancesMonitoring) *ScheduledInstancesLaunchSpecification { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *ScheduledInstancesLaunchSpecification) SetNetworkInterfaces(v []*ScheduledInstancesNetworkInterface) *ScheduledInstancesLaunchSpecification { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *ScheduledInstancesLaunchSpecification) SetPlacement(v *ScheduledInstancesPlacement) *ScheduledInstancesLaunchSpecification { - s.Placement = v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetRamdiskId(v string) *ScheduledInstancesLaunchSpecification { - s.RamdiskId = &v - return s -} - -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *ScheduledInstancesLaunchSpecification) SetSecurityGroupIds(v []*string) *ScheduledInstancesLaunchSpecification { - s.SecurityGroupIds = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetSubnetId(v string) *ScheduledInstancesLaunchSpecification { - s.SubnetId = &v - return s -} - -// SetUserData sets the UserData field's value. -func (s *ScheduledInstancesLaunchSpecification) SetUserData(v string) *ScheduledInstancesLaunchSpecification { - s.UserData = &v - return s -} - -// Describes whether monitoring is enabled for a Scheduled Instance. -type ScheduledInstancesMonitoring struct { - _ struct{} `type:"structure"` - - // Indicates whether monitoring is enabled. - Enabled *bool `type:"boolean"` -} - -// String returns the string representation -func (s ScheduledInstancesMonitoring) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesMonitoring) GoString() string { - return s.String() -} - -// SetEnabled sets the Enabled field's value. -func (s *ScheduledInstancesMonitoring) SetEnabled(v bool) *ScheduledInstancesMonitoring { - s.Enabled = &v - return s -} - -// Describes a network interface for a Scheduled Instance. -type ScheduledInstancesNetworkInterface struct { - _ struct{} `type:"structure"` - - // Indicates whether to assign a public IPv4 address to instances launched in - // a VPC. The public IPv4 address can only be assigned to a network interface - // for eth0, and can only be assigned to a new network interface, not an existing - // one. You cannot specify more than one network interface in the request. If - // launching into a default subnet, the default value is true. - AssociatePublicIpAddress *bool `type:"boolean"` - - // Indicates whether to delete the interface when the instance is terminated. - DeleteOnTermination *bool `type:"boolean"` - - // The description. - Description *string `type:"string"` - - // The index of the device for the network interface attachment. - DeviceIndex *int64 `type:"integer"` - - // The IDs of the security groups. - Groups []*string `locationName:"Group" locationNameList:"SecurityGroupId" type:"list"` - - // The number of IPv6 addresses to assign to the network interface. The IPv6 - // addresses are automatically selected from the subnet range. - Ipv6AddressCount *int64 `type:"integer"` - - // The specific IPv6 addresses from the subnet range. - Ipv6Addresses []*ScheduledInstancesIpv6Address `locationName:"Ipv6Address" locationNameList:"Ipv6Address" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `type:"string"` - - // The IPv4 address of the network interface within the subnet. - PrivateIpAddress *string `type:"string"` - - // The private IPv4 addresses. - PrivateIpAddressConfigs []*ScheduledInstancesPrivateIpAddressConfig `locationName:"PrivateIpAddressConfig" locationNameList:"PrivateIpAddressConfigSet" type:"list"` - - // The number of secondary private IPv4 addresses. - SecondaryPrivateIpAddressCount *int64 `type:"integer"` - - // The ID of the subnet. - SubnetId *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesNetworkInterface) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesNetworkInterface) GoString() string { - return s.String() -} - -// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. -func (s *ScheduledInstancesNetworkInterface) SetAssociatePublicIpAddress(v bool) *ScheduledInstancesNetworkInterface { - s.AssociatePublicIpAddress = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *ScheduledInstancesNetworkInterface) SetDeleteOnTermination(v bool) *ScheduledInstancesNetworkInterface { - s.DeleteOnTermination = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ScheduledInstancesNetworkInterface) SetDescription(v string) *ScheduledInstancesNetworkInterface { - s.Description = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *ScheduledInstancesNetworkInterface) SetDeviceIndex(v int64) *ScheduledInstancesNetworkInterface { - s.DeviceIndex = &v - return s -} - -// SetGroups sets the Groups field's value. -func (s *ScheduledInstancesNetworkInterface) SetGroups(v []*string) *ScheduledInstancesNetworkInterface { - s.Groups = v - return s -} - -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *ScheduledInstancesNetworkInterface) SetIpv6AddressCount(v int64) *ScheduledInstancesNetworkInterface { - s.Ipv6AddressCount = &v - return s -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *ScheduledInstancesNetworkInterface) SetIpv6Addresses(v []*ScheduledInstancesIpv6Address) *ScheduledInstancesNetworkInterface { - s.Ipv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ScheduledInstancesNetworkInterface) SetNetworkInterfaceId(v string) *ScheduledInstancesNetworkInterface { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *ScheduledInstancesNetworkInterface) SetPrivateIpAddress(v string) *ScheduledInstancesNetworkInterface { - s.PrivateIpAddress = &v - return s -} - -// SetPrivateIpAddressConfigs sets the PrivateIpAddressConfigs field's value. -func (s *ScheduledInstancesNetworkInterface) SetPrivateIpAddressConfigs(v []*ScheduledInstancesPrivateIpAddressConfig) *ScheduledInstancesNetworkInterface { - s.PrivateIpAddressConfigs = v - return s -} - -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *ScheduledInstancesNetworkInterface) SetSecondaryPrivateIpAddressCount(v int64) *ScheduledInstancesNetworkInterface { - s.SecondaryPrivateIpAddressCount = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *ScheduledInstancesNetworkInterface) SetSubnetId(v string) *ScheduledInstancesNetworkInterface { - s.SubnetId = &v - return s -} - -// Describes the placement for a Scheduled Instance. -type ScheduledInstancesPlacement struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `type:"string"` - - // The name of the placement group. - GroupName *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesPlacement) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesPlacement) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ScheduledInstancesPlacement) SetAvailabilityZone(v string) *ScheduledInstancesPlacement { - s.AvailabilityZone = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *ScheduledInstancesPlacement) SetGroupName(v string) *ScheduledInstancesPlacement { - s.GroupName = &v - return s -} - -// Describes a private IPv4 address for a Scheduled Instance. -type ScheduledInstancesPrivateIpAddressConfig struct { - _ struct{} `type:"structure"` - - // Indicates whether this is a primary IPv4 address. Otherwise, this is a secondary - // IPv4 address. - Primary *bool `type:"boolean"` - - // The IPv4 address. - PrivateIpAddress *string `type:"string"` -} - -// String returns the string representation -func (s ScheduledInstancesPrivateIpAddressConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ScheduledInstancesPrivateIpAddressConfig) GoString() string { - return s.String() -} - -// SetPrimary sets the Primary field's value. -func (s *ScheduledInstancesPrivateIpAddressConfig) SetPrimary(v bool) *ScheduledInstancesPrivateIpAddressConfig { - s.Primary = &v - return s -} - -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *ScheduledInstancesPrivateIpAddressConfig) SetPrivateIpAddress(v string) *ScheduledInstancesPrivateIpAddressConfig { - s.PrivateIpAddress = &v - return s -} - -type SearchTransitGatewayRoutesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. The possible values are: - // - // * attachment.transit-gateway-attachment-id- The id of the transit gateway - // attachment. - // - // * attachment.resource-id - The resource id of the transit gateway attachment. - // - // * attachment.resource-type - The attachment resource type (vpc | vpn). - // - // * route-search.exact-match - The exact match of the specified filter. - // - // * route-search.longest-prefix-match - The longest prefix that matches - // the route. - // - // * route-search.subnet-of-match - The routes with a subnet that match the - // specified CIDR filter. - // - // * route-search.supernet-of-match - The routes with a CIDR that encompass - // the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 - // routes in your route table and you specify supernet-of-match as 10.0.1.0/30, - // then the result returns 10.0.1.0/29. - // - // * state - The state of the route (active | blackhole). - // - // * type - The type of route (propagated | static). - // - // Filters is a required field - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list" required:"true"` - - // The maximum number of routes to return. - MaxResults *int64 `min:"5" type:"integer"` - - // The ID of the transit gateway route table. - // - // TransitGatewayRouteTableId is a required field - TransitGatewayRouteTableId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s SearchTransitGatewayRoutesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SearchTransitGatewayRoutesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *SearchTransitGatewayRoutesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SearchTransitGatewayRoutesInput"} - if s.Filters == nil { - invalidParams.Add(request.NewErrParamRequired("Filters")) - } - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.TransitGatewayRouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *SearchTransitGatewayRoutesInput) SetDryRun(v bool) *SearchTransitGatewayRoutesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *SearchTransitGatewayRoutesInput) SetFilters(v []*Filter) *SearchTransitGatewayRoutesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *SearchTransitGatewayRoutesInput) SetMaxResults(v int64) *SearchTransitGatewayRoutesInput { - s.MaxResults = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *SearchTransitGatewayRoutesInput) SetTransitGatewayRouteTableId(v string) *SearchTransitGatewayRoutesInput { - s.TransitGatewayRouteTableId = &v - return s -} - -type SearchTransitGatewayRoutesOutput struct { - _ struct{} `type:"structure"` - - // Indicates whether there are additional routes available. - AdditionalRoutesAvailable *bool `locationName:"additionalRoutesAvailable" type:"boolean"` - - // Information about the routes. - Routes []*TransitGatewayRoute `locationName:"routeSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s SearchTransitGatewayRoutesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SearchTransitGatewayRoutesOutput) GoString() string { - return s.String() -} - -// SetAdditionalRoutesAvailable sets the AdditionalRoutesAvailable field's value. -func (s *SearchTransitGatewayRoutesOutput) SetAdditionalRoutesAvailable(v bool) *SearchTransitGatewayRoutesOutput { - s.AdditionalRoutesAvailable = &v - return s -} - -// SetRoutes sets the Routes field's value. -func (s *SearchTransitGatewayRoutesOutput) SetRoutes(v []*TransitGatewayRoute) *SearchTransitGatewayRoutesOutput { - s.Routes = v - return s -} - -// Describes a security group -type SecurityGroup struct { - _ struct{} `type:"structure"` - - // A description of the security group. - Description *string `locationName:"groupDescription" type:"string"` - - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` - - // The inbound rules associated with the security group. - IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - - // [VPC only] The outbound rules associated with the security group. - IpPermissionsEgress []*IpPermission `locationName:"ipPermissionsEgress" locationNameList:"item" type:"list"` - - // The AWS account ID of the owner of the security group. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Any tags assigned to the security group. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // [VPC only] The ID of the VPC for the security group. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s SecurityGroup) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SecurityGroup) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *SecurityGroup) SetDescription(v string) *SecurityGroup { - s.Description = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *SecurityGroup) SetGroupId(v string) *SecurityGroup { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *SecurityGroup) SetGroupName(v string) *SecurityGroup { - s.GroupName = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *SecurityGroup) SetIpPermissions(v []*IpPermission) *SecurityGroup { - s.IpPermissions = v - return s -} - -// SetIpPermissionsEgress sets the IpPermissionsEgress field's value. -func (s *SecurityGroup) SetIpPermissionsEgress(v []*IpPermission) *SecurityGroup { - s.IpPermissionsEgress = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *SecurityGroup) SetOwnerId(v string) *SecurityGroup { - s.OwnerId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *SecurityGroup) SetTags(v []*Tag) *SecurityGroup { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *SecurityGroup) SetVpcId(v string) *SecurityGroup { - s.VpcId = &v - return s -} - -// Describes a security group. -type SecurityGroupIdentifier struct { - _ struct{} `type:"structure"` - - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` -} - -// String returns the string representation -func (s SecurityGroupIdentifier) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SecurityGroupIdentifier) GoString() string { - return s.String() -} - -// SetGroupId sets the GroupId field's value. -func (s *SecurityGroupIdentifier) SetGroupId(v string) *SecurityGroupIdentifier { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *SecurityGroupIdentifier) SetGroupName(v string) *SecurityGroupIdentifier { - s.GroupName = &v - return s -} - -// Describes a VPC with a security group that references your security group. -type SecurityGroupReference struct { - _ struct{} `type:"structure"` - - // The ID of your security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The ID of the VPC with the referencing security group. - ReferencingVpcId *string `locationName:"referencingVpcId" type:"string"` - - // The ID of the VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s SecurityGroupReference) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SecurityGroupReference) GoString() string { - return s.String() -} - -// SetGroupId sets the GroupId field's value. -func (s *SecurityGroupReference) SetGroupId(v string) *SecurityGroupReference { - s.GroupId = &v - return s -} - -// SetReferencingVpcId sets the ReferencingVpcId field's value. -func (s *SecurityGroupReference) SetReferencingVpcId(v string) *SecurityGroupReference { - s.ReferencingVpcId = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *SecurityGroupReference) SetVpcPeeringConnectionId(v string) *SecurityGroupReference { - s.VpcPeeringConnectionId = &v - return s -} - -type SendDiagnosticInterruptInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s SendDiagnosticInterruptInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SendDiagnosticInterruptInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *SendDiagnosticInterruptInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SendDiagnosticInterruptInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *SendDiagnosticInterruptInput) SetDryRun(v bool) *SendDiagnosticInterruptInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *SendDiagnosticInterruptInput) SetInstanceId(v string) *SendDiagnosticInterruptInput { - s.InstanceId = &v - return s -} - -type SendDiagnosticInterruptOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s SendDiagnosticInterruptOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SendDiagnosticInterruptOutput) GoString() string { - return s.String() -} - -// Describes a service configuration for a VPC endpoint service. -type ServiceConfiguration struct { - _ struct{} `type:"structure"` - - // Indicates whether requests from other AWS accounts to create an endpoint - // to the service must first be accepted. - AcceptanceRequired *bool `locationName:"acceptanceRequired" type:"boolean"` - - // In the Availability Zones in which the service is available. - AvailabilityZones []*string `locationName:"availabilityZoneSet" locationNameList:"item" type:"list"` - - // The DNS names for the service. - BaseEndpointDnsNames []*string `locationName:"baseEndpointDnsNameSet" locationNameList:"item" type:"list"` - - // Indicates whether the service manages it's VPC endpoints. Management of the - // service VPC endpoints using the VPC endpoint API is restricted. - ManagesVpcEndpoints *bool `locationName:"managesVpcEndpoints" type:"boolean"` - - // The Amazon Resource Names (ARNs) of the Network Load Balancers for the service. - NetworkLoadBalancerArns []*string `locationName:"networkLoadBalancerArnSet" locationNameList:"item" type:"list"` - - // The private DNS name for the service. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The ID of the service. - ServiceId *string `locationName:"serviceId" type:"string"` - - // The name of the service. - ServiceName *string `locationName:"serviceName" type:"string"` - - // The service state. - ServiceState *string `locationName:"serviceState" type:"string" enum:"ServiceState"` - - // The type of service. - ServiceType []*ServiceTypeDetail `locationName:"serviceType" locationNameList:"item" type:"list"` - - // Any tags assigned to the service. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s ServiceConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ServiceConfiguration) GoString() string { - return s.String() -} - -// SetAcceptanceRequired sets the AcceptanceRequired field's value. -func (s *ServiceConfiguration) SetAcceptanceRequired(v bool) *ServiceConfiguration { - s.AcceptanceRequired = &v - return s -} - -// SetAvailabilityZones sets the AvailabilityZones field's value. -func (s *ServiceConfiguration) SetAvailabilityZones(v []*string) *ServiceConfiguration { - s.AvailabilityZones = v - return s -} - -// SetBaseEndpointDnsNames sets the BaseEndpointDnsNames field's value. -func (s *ServiceConfiguration) SetBaseEndpointDnsNames(v []*string) *ServiceConfiguration { - s.BaseEndpointDnsNames = v - return s -} - -// SetManagesVpcEndpoints sets the ManagesVpcEndpoints field's value. -func (s *ServiceConfiguration) SetManagesVpcEndpoints(v bool) *ServiceConfiguration { - s.ManagesVpcEndpoints = &v - return s -} - -// SetNetworkLoadBalancerArns sets the NetworkLoadBalancerArns field's value. -func (s *ServiceConfiguration) SetNetworkLoadBalancerArns(v []*string) *ServiceConfiguration { - s.NetworkLoadBalancerArns = v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *ServiceConfiguration) SetPrivateDnsName(v string) *ServiceConfiguration { - s.PrivateDnsName = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *ServiceConfiguration) SetServiceId(v string) *ServiceConfiguration { - s.ServiceId = &v - return s -} - -// SetServiceName sets the ServiceName field's value. -func (s *ServiceConfiguration) SetServiceName(v string) *ServiceConfiguration { - s.ServiceName = &v - return s -} - -// SetServiceState sets the ServiceState field's value. -func (s *ServiceConfiguration) SetServiceState(v string) *ServiceConfiguration { - s.ServiceState = &v - return s -} - -// SetServiceType sets the ServiceType field's value. -func (s *ServiceConfiguration) SetServiceType(v []*ServiceTypeDetail) *ServiceConfiguration { - s.ServiceType = v - return s -} - -// SetTags sets the Tags field's value. -func (s *ServiceConfiguration) SetTags(v []*Tag) *ServiceConfiguration { - s.Tags = v - return s -} - -// Describes a VPC endpoint service. -type ServiceDetail struct { - _ struct{} `type:"structure"` - - // Indicates whether VPC endpoint connection requests to the service must be - // accepted by the service owner. - AcceptanceRequired *bool `locationName:"acceptanceRequired" type:"boolean"` - - // The Availability Zones in which the service is available. - AvailabilityZones []*string `locationName:"availabilityZoneSet" locationNameList:"item" type:"list"` - - // The DNS names for the service. - BaseEndpointDnsNames []*string `locationName:"baseEndpointDnsNameSet" locationNameList:"item" type:"list"` - - // Indicates whether the service manages it's VPC endpoints. Management of the - // service VPC endpoints using the VPC endpoint API is restricted. - ManagesVpcEndpoints *bool `locationName:"managesVpcEndpoints" type:"boolean"` - - // The AWS account ID of the service owner. - Owner *string `locationName:"owner" type:"string"` - - // The private DNS name for the service. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The ID of the endpoint service. - ServiceId *string `locationName:"serviceId" type:"string"` - - // The Amazon Resource Name (ARN) of the service. - ServiceName *string `locationName:"serviceName" type:"string"` - - // The type of service. - ServiceType []*ServiceTypeDetail `locationName:"serviceType" locationNameList:"item" type:"list"` - - // Any tags assigned to the service. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // Indicates whether the service supports endpoint policies. - VpcEndpointPolicySupported *bool `locationName:"vpcEndpointPolicySupported" type:"boolean"` -} - -// String returns the string representation -func (s ServiceDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ServiceDetail) GoString() string { - return s.String() -} - -// SetAcceptanceRequired sets the AcceptanceRequired field's value. -func (s *ServiceDetail) SetAcceptanceRequired(v bool) *ServiceDetail { - s.AcceptanceRequired = &v - return s -} - -// SetAvailabilityZones sets the AvailabilityZones field's value. -func (s *ServiceDetail) SetAvailabilityZones(v []*string) *ServiceDetail { - s.AvailabilityZones = v - return s -} - -// SetBaseEndpointDnsNames sets the BaseEndpointDnsNames field's value. -func (s *ServiceDetail) SetBaseEndpointDnsNames(v []*string) *ServiceDetail { - s.BaseEndpointDnsNames = v - return s -} - -// SetManagesVpcEndpoints sets the ManagesVpcEndpoints field's value. -func (s *ServiceDetail) SetManagesVpcEndpoints(v bool) *ServiceDetail { - s.ManagesVpcEndpoints = &v - return s -} - -// SetOwner sets the Owner field's value. -func (s *ServiceDetail) SetOwner(v string) *ServiceDetail { - s.Owner = &v - return s -} - -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *ServiceDetail) SetPrivateDnsName(v string) *ServiceDetail { - s.PrivateDnsName = &v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *ServiceDetail) SetServiceId(v string) *ServiceDetail { - s.ServiceId = &v - return s -} - -// SetServiceName sets the ServiceName field's value. -func (s *ServiceDetail) SetServiceName(v string) *ServiceDetail { - s.ServiceName = &v - return s -} - -// SetServiceType sets the ServiceType field's value. -func (s *ServiceDetail) SetServiceType(v []*ServiceTypeDetail) *ServiceDetail { - s.ServiceType = v - return s -} - -// SetTags sets the Tags field's value. -func (s *ServiceDetail) SetTags(v []*Tag) *ServiceDetail { - s.Tags = v - return s -} - -// SetVpcEndpointPolicySupported sets the VpcEndpointPolicySupported field's value. -func (s *ServiceDetail) SetVpcEndpointPolicySupported(v bool) *ServiceDetail { - s.VpcEndpointPolicySupported = &v - return s -} - -// Describes the type of service for a VPC endpoint. -type ServiceTypeDetail struct { - _ struct{} `type:"structure"` - - // The type of service. - ServiceType *string `locationName:"serviceType" type:"string" enum:"ServiceType"` -} - -// String returns the string representation -func (s ServiceTypeDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ServiceTypeDetail) GoString() string { - return s.String() -} - -// SetServiceType sets the ServiceType field's value. -func (s *ServiceTypeDetail) SetServiceType(v string) *ServiceTypeDetail { - s.ServiceType = &v - return s -} - -// Describes the time period for a Scheduled Instance to start its first schedule. -// The time period must span less than one day. -type SlotDateTimeRangeRequest struct { - _ struct{} `type:"structure"` - - // The earliest date and time, in UTC, for the Scheduled Instance to start. - // - // EarliestTime is a required field - EarliestTime *time.Time `type:"timestamp" required:"true"` - - // The latest date and time, in UTC, for the Scheduled Instance to start. This - // value must be later than or equal to the earliest date and at most three - // months in the future. - // - // LatestTime is a required field - LatestTime *time.Time `type:"timestamp" required:"true"` -} - -// String returns the string representation -func (s SlotDateTimeRangeRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SlotDateTimeRangeRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *SlotDateTimeRangeRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SlotDateTimeRangeRequest"} - if s.EarliestTime == nil { - invalidParams.Add(request.NewErrParamRequired("EarliestTime")) - } - if s.LatestTime == nil { - invalidParams.Add(request.NewErrParamRequired("LatestTime")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetEarliestTime sets the EarliestTime field's value. -func (s *SlotDateTimeRangeRequest) SetEarliestTime(v time.Time) *SlotDateTimeRangeRequest { - s.EarliestTime = &v - return s -} - -// SetLatestTime sets the LatestTime field's value. -func (s *SlotDateTimeRangeRequest) SetLatestTime(v time.Time) *SlotDateTimeRangeRequest { - s.LatestTime = &v - return s -} - -// Describes the time period for a Scheduled Instance to start its first schedule. -type SlotStartTimeRangeRequest struct { - _ struct{} `type:"structure"` - - // The earliest date and time, in UTC, for the Scheduled Instance to start. - EarliestTime *time.Time `type:"timestamp"` - - // The latest date and time, in UTC, for the Scheduled Instance to start. - LatestTime *time.Time `type:"timestamp"` -} - -// String returns the string representation -func (s SlotStartTimeRangeRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SlotStartTimeRangeRequest) GoString() string { - return s.String() -} - -// SetEarliestTime sets the EarliestTime field's value. -func (s *SlotStartTimeRangeRequest) SetEarliestTime(v time.Time) *SlotStartTimeRangeRequest { - s.EarliestTime = &v - return s -} - -// SetLatestTime sets the LatestTime field's value. -func (s *SlotStartTimeRangeRequest) SetLatestTime(v time.Time) *SlotStartTimeRangeRequest { - s.LatestTime = &v - return s -} - -// Describes a snapshot. -type Snapshot struct { - _ struct{} `type:"structure"` - - // The data encryption key identifier for the snapshot. This value is a unique - // identifier that corresponds to the data encryption key that was used to encrypt - // the original volume or snapshot copy. Because data encryption keys are inherited - // by volumes created from snapshots, and vice versa, if snapshots share the - // same data encryption key identifier, then they belong to the same volume/snapshot - // lineage. This parameter is only returned by DescribeSnapshots. - DataEncryptionKeyId *string `locationName:"dataEncryptionKeyId" type:"string"` - - // The description for the snapshot. - Description *string `locationName:"description" type:"string"` - - // Indicates whether the snapshot is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The Amazon Resource Name (ARN) of the AWS Key Management Service (AWS KMS) - // customer master key (CMK) that was used to protect the volume encryption - // key for the parent volume. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // Value from an Amazon-maintained list (amazon | self | all | aws-marketplace - // | microsoft) of snapshot owners. Not to be confused with the user-configured - // AWS account alias, which is set from the IAM console. - OwnerAlias *string `locationName:"ownerAlias" type:"string"` - - // The AWS account ID of the EBS snapshot owner. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The progress of the snapshot, as a percentage. - Progress *string `locationName:"progress" type:"string"` - - // The ID of the snapshot. Each snapshot receives a unique identifier when it - // is created. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The time stamp when the snapshot was initiated. - StartTime *time.Time `locationName:"startTime" type:"timestamp"` - - // The snapshot state. - State *string `locationName:"status" type:"string" enum:"SnapshotState"` - - // Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy - // operation fails (for example, if the proper AWS Key Management Service (AWS - // KMS) permissions are not obtained) this field displays error state details - // to help you diagnose why the error occurred. This parameter is only returned - // by DescribeSnapshots. - StateMessage *string `locationName:"statusMessage" type:"string"` - - // Any tags assigned to the snapshot. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the volume that was used to create the snapshot. Snapshots created - // by the CopySnapshot action have an arbitrary volume ID that should not be - // used for any purpose. - VolumeId *string `locationName:"volumeId" type:"string"` - - // The size of the volume, in GiB. - VolumeSize *int64 `locationName:"volumeSize" type:"integer"` -} - -// String returns the string representation -func (s Snapshot) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Snapshot) GoString() string { - return s.String() -} - -// SetDataEncryptionKeyId sets the DataEncryptionKeyId field's value. -func (s *Snapshot) SetDataEncryptionKeyId(v string) *Snapshot { - s.DataEncryptionKeyId = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *Snapshot) SetDescription(v string) *Snapshot { - s.Description = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *Snapshot) SetEncrypted(v bool) *Snapshot { - s.Encrypted = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *Snapshot) SetKmsKeyId(v string) *Snapshot { - s.KmsKeyId = &v - return s -} - -// SetOwnerAlias sets the OwnerAlias field's value. -func (s *Snapshot) SetOwnerAlias(v string) *Snapshot { - s.OwnerAlias = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *Snapshot) SetOwnerId(v string) *Snapshot { - s.OwnerId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *Snapshot) SetProgress(v string) *Snapshot { - s.Progress = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *Snapshot) SetSnapshotId(v string) *Snapshot { - s.SnapshotId = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *Snapshot) SetStartTime(v time.Time) *Snapshot { - s.StartTime = &v - return s -} - -// SetState sets the State field's value. -func (s *Snapshot) SetState(v string) *Snapshot { - s.State = &v - return s -} - -// SetStateMessage sets the StateMessage field's value. -func (s *Snapshot) SetStateMessage(v string) *Snapshot { - s.StateMessage = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Snapshot) SetTags(v []*Tag) *Snapshot { - s.Tags = v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *Snapshot) SetVolumeId(v string) *Snapshot { - s.VolumeId = &v - return s -} - -// SetVolumeSize sets the VolumeSize field's value. -func (s *Snapshot) SetVolumeSize(v int64) *Snapshot { - s.VolumeSize = &v - return s -} - -// Describes the snapshot created from the imported disk. -type SnapshotDetail struct { - _ struct{} `type:"structure"` - - // A description for the snapshot. - Description *string `locationName:"description" type:"string"` - - // The block device mapping for the snapshot. - DeviceName *string `locationName:"deviceName" type:"string"` - - // The size of the disk in the snapshot, in GiB. - DiskImageSize *float64 `locationName:"diskImageSize" type:"double"` - - // The format of the disk image from which the snapshot is created. - Format *string `locationName:"format" type:"string"` - - // The percentage of progress for the task. - Progress *string `locationName:"progress" type:"string"` - - // The snapshot ID of the disk being imported. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // A brief status of the snapshot creation. - Status *string `locationName:"status" type:"string"` - - // A detailed status message for the snapshot creation. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // The URL used to access the disk image. - Url *string `locationName:"url" type:"string"` - - // The S3 bucket for the disk image. - UserBucket *UserBucketDetails `locationName:"userBucket" type:"structure"` -} - -// String returns the string representation -func (s SnapshotDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SnapshotDetail) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *SnapshotDetail) SetDescription(v string) *SnapshotDetail { - s.Description = &v - return s -} - -// SetDeviceName sets the DeviceName field's value. -func (s *SnapshotDetail) SetDeviceName(v string) *SnapshotDetail { - s.DeviceName = &v - return s -} - -// SetDiskImageSize sets the DiskImageSize field's value. -func (s *SnapshotDetail) SetDiskImageSize(v float64) *SnapshotDetail { - s.DiskImageSize = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *SnapshotDetail) SetFormat(v string) *SnapshotDetail { - s.Format = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *SnapshotDetail) SetProgress(v string) *SnapshotDetail { - s.Progress = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *SnapshotDetail) SetSnapshotId(v string) *SnapshotDetail { - s.SnapshotId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *SnapshotDetail) SetStatus(v string) *SnapshotDetail { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *SnapshotDetail) SetStatusMessage(v string) *SnapshotDetail { - s.StatusMessage = &v - return s -} - -// SetUrl sets the Url field's value. -func (s *SnapshotDetail) SetUrl(v string) *SnapshotDetail { - s.Url = &v - return s -} - -// SetUserBucket sets the UserBucket field's value. -func (s *SnapshotDetail) SetUserBucket(v *UserBucketDetails) *SnapshotDetail { - s.UserBucket = v - return s -} - -// The disk container object for the import snapshot request. -type SnapshotDiskContainer struct { - _ struct{} `type:"structure"` - - // The description of the disk image being imported. - Description *string `type:"string"` - - // The format of the disk image being imported. - // - // Valid values: VHD | VMDK - Format *string `type:"string"` - - // The URL to the Amazon S3-based disk image being imported. It can either be - // a https URL (https://..) or an Amazon S3 URL (s3://..). - Url *string `type:"string"` - - // The S3 bucket for the disk image. - UserBucket *UserBucket `type:"structure"` -} - -// String returns the string representation -func (s SnapshotDiskContainer) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SnapshotDiskContainer) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *SnapshotDiskContainer) SetDescription(v string) *SnapshotDiskContainer { - s.Description = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *SnapshotDiskContainer) SetFormat(v string) *SnapshotDiskContainer { - s.Format = &v - return s -} - -// SetUrl sets the Url field's value. -func (s *SnapshotDiskContainer) SetUrl(v string) *SnapshotDiskContainer { - s.Url = &v - return s -} - -// SetUserBucket sets the UserBucket field's value. -func (s *SnapshotDiskContainer) SetUserBucket(v *UserBucket) *SnapshotDiskContainer { - s.UserBucket = v - return s -} - -// Information about a snapshot. -type SnapshotInfo struct { - _ struct{} `type:"structure"` - - // Description specified by the CreateSnapshotRequest that has been applied - // to all snapshots. - Description *string `locationName:"description" type:"string"` - - // Indicates whether the snapshot is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // Account id used when creating this snapshot. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Progress this snapshot has made towards completing. - Progress *string `locationName:"progress" type:"string"` - - // Snapshot id that can be used to describe this snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // Time this snapshot was started. This is the same for all snapshots initiated - // by the same request. - StartTime *time.Time `locationName:"startTime" type:"timestamp"` - - // Current state of the snapshot. - State *string `locationName:"state" type:"string" enum:"SnapshotState"` - - // Tags associated with this snapshot. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // Source volume from which this snapshot was created. - VolumeId *string `locationName:"volumeId" type:"string"` - - // Size of the volume from which this snapshot was created. - VolumeSize *int64 `locationName:"volumeSize" type:"integer"` -} - -// String returns the string representation -func (s SnapshotInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SnapshotInfo) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *SnapshotInfo) SetDescription(v string) *SnapshotInfo { - s.Description = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *SnapshotInfo) SetEncrypted(v bool) *SnapshotInfo { - s.Encrypted = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *SnapshotInfo) SetOwnerId(v string) *SnapshotInfo { - s.OwnerId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *SnapshotInfo) SetProgress(v string) *SnapshotInfo { - s.Progress = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *SnapshotInfo) SetSnapshotId(v string) *SnapshotInfo { - s.SnapshotId = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *SnapshotInfo) SetStartTime(v time.Time) *SnapshotInfo { - s.StartTime = &v - return s -} - -// SetState sets the State field's value. -func (s *SnapshotInfo) SetState(v string) *SnapshotInfo { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *SnapshotInfo) SetTags(v []*Tag) *SnapshotInfo { - s.Tags = v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *SnapshotInfo) SetVolumeId(v string) *SnapshotInfo { - s.VolumeId = &v - return s -} - -// SetVolumeSize sets the VolumeSize field's value. -func (s *SnapshotInfo) SetVolumeSize(v int64) *SnapshotInfo { - s.VolumeSize = &v - return s -} - -// Details about the import snapshot task. -type SnapshotTaskDetail struct { - _ struct{} `type:"structure"` - - // The description of the snapshot. - Description *string `locationName:"description" type:"string"` - - // The size of the disk in the snapshot, in GiB. - DiskImageSize *float64 `locationName:"diskImageSize" type:"double"` - - // Indicates whether the snapshot is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // The format of the disk image from which the snapshot is created. - Format *string `locationName:"format" type:"string"` - - // The identifier for the AWS Key Management Service (AWS KMS) customer master - // key (CMK) that was used to create the encrypted snapshot. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // The percentage of completion for the import snapshot task. - Progress *string `locationName:"progress" type:"string"` - - // The snapshot ID of the disk being imported. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // A brief status for the import snapshot task. - Status *string `locationName:"status" type:"string"` - - // A detailed status message for the import snapshot task. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // The URL of the disk image from which the snapshot is created. - Url *string `locationName:"url" type:"string"` - - // The S3 bucket for the disk image. - UserBucket *UserBucketDetails `locationName:"userBucket" type:"structure"` -} - -// String returns the string representation -func (s SnapshotTaskDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SnapshotTaskDetail) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *SnapshotTaskDetail) SetDescription(v string) *SnapshotTaskDetail { - s.Description = &v - return s -} - -// SetDiskImageSize sets the DiskImageSize field's value. -func (s *SnapshotTaskDetail) SetDiskImageSize(v float64) *SnapshotTaskDetail { - s.DiskImageSize = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *SnapshotTaskDetail) SetEncrypted(v bool) *SnapshotTaskDetail { - s.Encrypted = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *SnapshotTaskDetail) SetFormat(v string) *SnapshotTaskDetail { - s.Format = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *SnapshotTaskDetail) SetKmsKeyId(v string) *SnapshotTaskDetail { - s.KmsKeyId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *SnapshotTaskDetail) SetProgress(v string) *SnapshotTaskDetail { - s.Progress = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *SnapshotTaskDetail) SetSnapshotId(v string) *SnapshotTaskDetail { - s.SnapshotId = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *SnapshotTaskDetail) SetStatus(v string) *SnapshotTaskDetail { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *SnapshotTaskDetail) SetStatusMessage(v string) *SnapshotTaskDetail { - s.StatusMessage = &v - return s -} - -// SetUrl sets the Url field's value. -func (s *SnapshotTaskDetail) SetUrl(v string) *SnapshotTaskDetail { - s.Url = &v - return s -} - -// SetUserBucket sets the UserBucket field's value. -func (s *SnapshotTaskDetail) SetUserBucket(v *UserBucketDetails) *SnapshotTaskDetail { - s.UserBucket = v - return s -} - -// Describes the data feed for a Spot Instance. -type SpotDatafeedSubscription struct { - _ struct{} `type:"structure"` - - // The Amazon S3 bucket where the Spot Instance data feed is located. - Bucket *string `locationName:"bucket" type:"string"` - - // The fault codes for the Spot Instance request, if any. - Fault *SpotInstanceStateFault `locationName:"fault" type:"structure"` - - // The AWS account ID of the account. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The prefix that is prepended to data feed files. - Prefix *string `locationName:"prefix" type:"string"` - - // The state of the Spot Instance data feed subscription. - State *string `locationName:"state" type:"string" enum:"DatafeedSubscriptionState"` -} - -// String returns the string representation -func (s SpotDatafeedSubscription) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotDatafeedSubscription) GoString() string { - return s.String() -} - -// SetBucket sets the Bucket field's value. -func (s *SpotDatafeedSubscription) SetBucket(v string) *SpotDatafeedSubscription { - s.Bucket = &v - return s -} - -// SetFault sets the Fault field's value. -func (s *SpotDatafeedSubscription) SetFault(v *SpotInstanceStateFault) *SpotDatafeedSubscription { - s.Fault = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *SpotDatafeedSubscription) SetOwnerId(v string) *SpotDatafeedSubscription { - s.OwnerId = &v - return s -} - -// SetPrefix sets the Prefix field's value. -func (s *SpotDatafeedSubscription) SetPrefix(v string) *SpotDatafeedSubscription { - s.Prefix = &v - return s -} - -// SetState sets the State field's value. -func (s *SpotDatafeedSubscription) SetState(v string) *SpotDatafeedSubscription { - s.State = &v - return s -} - -// Describes the launch specification for one or more Spot Instances. If you -// include On-Demand capacity in your fleet request, you can't use SpotFleetLaunchSpecification; -// you must use LaunchTemplateConfig (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html). -type SpotFleetLaunchSpecification struct { - _ struct{} `type:"structure"` - - // Deprecated. - AddressingType *string `locationName:"addressingType" type:"string"` - - // One or more block devices that are mapped to the Spot Instances. You can't - // specify both a snapshot ID and an encryption value. This is because only - // blank volumes can be encrypted on creation. If a snapshot is the basis for - // a volume, it is not blank and its encryption status is used for the volume - // encryption status. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // Indicates whether the instances are optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // Enable or disable monitoring for the instances. - Monitoring *SpotFleetMonitoring `locationName:"monitoring" type:"structure"` - - // One or more network interfaces. If you specify a network interface, you must - // specify subnet IDs and security group IDs using the network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` - - // The placement information. - Placement *SpotPlacement `locationName:"placement" type:"structure"` - - // The ID of the RAM disk. Some kernels require additional drivers at launch. - // Check the kernel requirements for information about whether you need to specify - // a RAM disk. To find kernel requirements, refer to the AWS Resource Center - // and search for the kernel ID. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // One or more security groups. When requesting instances in a VPC, you must - // specify the IDs of the security groups. When requesting instances in EC2-Classic, - // you can specify the names or the IDs of the security groups. - SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The maximum price per unit hour that you are willing to pay for a Spot Instance. - // If this value is not specified, the default is the Spot price specified for - // the fleet. To determine the Spot price per unit hour, divide the Spot price - // by the value of WeightedCapacity. - SpotPrice *string `locationName:"spotPrice" type:"string"` - - // The IDs of the subnets in which to launch the instances. To specify multiple - // subnets, separate them using commas; for example, "subnet-1234abcdeexample1, - // subnet-0987cdef6example2". - SubnetId *string `locationName:"subnetId" type:"string"` - - // The tags to apply during creation. - TagSpecifications []*SpotFleetTagSpecification `locationName:"tagSpecificationSet" locationNameList:"item" type:"list"` - - // The Base64-encoded user data that instances use when starting up. - UserData *string `locationName:"userData" type:"string"` - - // The number of units provided by the specified instance type. These are the - // same units that you chose to set the target capacity in terms of instances, - // or a performance characteristic such as vCPUs, memory, or I/O. - // - // If the target capacity divided by this value is not a whole number, Amazon - // EC2 rounds the number of instances to the next whole number. If this value - // is not specified, the default is 1. - WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` -} - -// String returns the string representation -func (s SpotFleetLaunchSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotFleetLaunchSpecification) GoString() string { - return s.String() -} - -// SetAddressingType sets the AddressingType field's value. -func (s *SpotFleetLaunchSpecification) SetAddressingType(v string) *SpotFleetLaunchSpecification { - s.AddressingType = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *SpotFleetLaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *SpotFleetLaunchSpecification { - s.BlockDeviceMappings = v - return s -} - -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *SpotFleetLaunchSpecification) SetEbsOptimized(v bool) *SpotFleetLaunchSpecification { - s.EbsOptimized = &v - return s -} - -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *SpotFleetLaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *SpotFleetLaunchSpecification { - s.IamInstanceProfile = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *SpotFleetLaunchSpecification) SetImageId(v string) *SpotFleetLaunchSpecification { - s.ImageId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *SpotFleetLaunchSpecification) SetInstanceType(v string) *SpotFleetLaunchSpecification { - s.InstanceType = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *SpotFleetLaunchSpecification) SetKernelId(v string) *SpotFleetLaunchSpecification { - s.KernelId = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *SpotFleetLaunchSpecification) SetKeyName(v string) *SpotFleetLaunchSpecification { - s.KeyName = &v - return s -} - -// SetMonitoring sets the Monitoring field's value. -func (s *SpotFleetLaunchSpecification) SetMonitoring(v *SpotFleetMonitoring) *SpotFleetLaunchSpecification { - s.Monitoring = v - return s -} - -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *SpotFleetLaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *SpotFleetLaunchSpecification { - s.NetworkInterfaces = v - return s -} - -// SetPlacement sets the Placement field's value. -func (s *SpotFleetLaunchSpecification) SetPlacement(v *SpotPlacement) *SpotFleetLaunchSpecification { - s.Placement = v - return s -} - -// SetRamdiskId sets the RamdiskId field's value. -func (s *SpotFleetLaunchSpecification) SetRamdiskId(v string) *SpotFleetLaunchSpecification { - s.RamdiskId = &v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *SpotFleetLaunchSpecification) SetSecurityGroups(v []*GroupIdentifier) *SpotFleetLaunchSpecification { - s.SecurityGroups = v - return s -} - -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotFleetLaunchSpecification) SetSpotPrice(v string) *SpotFleetLaunchSpecification { - s.SpotPrice = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *SpotFleetLaunchSpecification) SetSubnetId(v string) *SpotFleetLaunchSpecification { - s.SubnetId = &v - return s -} - -// SetTagSpecifications sets the TagSpecifications field's value. -func (s *SpotFleetLaunchSpecification) SetTagSpecifications(v []*SpotFleetTagSpecification) *SpotFleetLaunchSpecification { - s.TagSpecifications = v - return s -} - -// SetUserData sets the UserData field's value. -func (s *SpotFleetLaunchSpecification) SetUserData(v string) *SpotFleetLaunchSpecification { - s.UserData = &v - return s -} - -// SetWeightedCapacity sets the WeightedCapacity field's value. -func (s *SpotFleetLaunchSpecification) SetWeightedCapacity(v float64) *SpotFleetLaunchSpecification { - s.WeightedCapacity = &v - return s -} - -// Describes whether monitoring is enabled. -type SpotFleetMonitoring struct { - _ struct{} `type:"structure"` - - // Enables monitoring for the instance. - // - // Default: false - Enabled *bool `locationName:"enabled" type:"boolean"` -} - -// String returns the string representation -func (s SpotFleetMonitoring) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotFleetMonitoring) GoString() string { - return s.String() -} - -// SetEnabled sets the Enabled field's value. -func (s *SpotFleetMonitoring) SetEnabled(v bool) *SpotFleetMonitoring { - s.Enabled = &v - return s -} - -// Describes a Spot Fleet request. -type SpotFleetRequestConfig struct { - _ struct{} `type:"structure"` - - // The progress of the Spot Fleet request. If there is an error, the status - // is error. After all requests are placed, the status is pending_fulfillment. - // If the size of the fleet is equal to or greater than its target capacity, - // the status is fulfilled. If the size of the fleet is decreased, the status - // is pending_termination while Spot Instances are terminating. - ActivityStatus *string `locationName:"activityStatus" type:"string" enum:"ActivityStatus"` - - // The creation date and time of the request. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // The configuration of the Spot Fleet request. - SpotFleetRequestConfig *SpotFleetRequestConfigData `locationName:"spotFleetRequestConfig" type:"structure"` - - // The ID of the Spot Fleet request. - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` - - // The state of the Spot Fleet request. - SpotFleetRequestState *string `locationName:"spotFleetRequestState" type:"string" enum:"BatchState"` -} - -// String returns the string representation -func (s SpotFleetRequestConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotFleetRequestConfig) GoString() string { - return s.String() -} - -// SetActivityStatus sets the ActivityStatus field's value. -func (s *SpotFleetRequestConfig) SetActivityStatus(v string) *SpotFleetRequestConfig { - s.ActivityStatus = &v - return s -} - -// SetCreateTime sets the CreateTime field's value. -func (s *SpotFleetRequestConfig) SetCreateTime(v time.Time) *SpotFleetRequestConfig { - s.CreateTime = &v - return s -} - -// SetSpotFleetRequestConfig sets the SpotFleetRequestConfig field's value. -func (s *SpotFleetRequestConfig) SetSpotFleetRequestConfig(v *SpotFleetRequestConfigData) *SpotFleetRequestConfig { - s.SpotFleetRequestConfig = v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *SpotFleetRequestConfig) SetSpotFleetRequestId(v string) *SpotFleetRequestConfig { - s.SpotFleetRequestId = &v - return s -} - -// SetSpotFleetRequestState sets the SpotFleetRequestState field's value. -func (s *SpotFleetRequestConfig) SetSpotFleetRequestState(v string) *SpotFleetRequestConfig { - s.SpotFleetRequestState = &v - return s -} - -// Describes the configuration of a Spot Fleet request. -type SpotFleetRequestConfigData struct { - _ struct{} `type:"structure"` - - // Indicates how to allocate the target Spot Instance capacity across the Spot - // Instance pools specified by the Spot Fleet request. - // - // If the allocation strategy is lowestPrice, Spot Fleet launches instances - // from the Spot Instance pools with the lowest price. This is the default allocation - // strategy. - // - // If the allocation strategy is diversified, Spot Fleet launches instances - // from all the Spot Instance pools that you specify. - // - // If the allocation strategy is capacityOptimized, Spot Fleet launches instances - // from Spot Instance pools with optimal capacity for the number of instances - // that are launching. - AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"AllocationStrategy"` - - // A unique, case-sensitive identifier that you provide to ensure the idempotency - // of your listings. This helps to avoid duplicate listings. For more information, - // see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` - - // Indicates whether running Spot Instances should be terminated if you decrease - // the target capacity of the Spot Fleet request below the current size of the - // Spot Fleet. - ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"ExcessCapacityTerminationPolicy"` - - // The number of units fulfilled by this request compared to the set target - // capacity. You cannot set this value. - FulfilledCapacity *float64 `locationName:"fulfilledCapacity" type:"double"` - - // The Amazon Resource Name (ARN) of an AWS Identity and Access Management (IAM) - // role that grants the Spot Fleet the permission to request, launch, terminate, - // and tag instances on your behalf. For more information, see Spot Fleet Prerequisites - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites) - // in the Amazon EC2 User Guide for Linux Instances. Spot Fleet can terminate - // Spot Instances on your behalf when you cancel its Spot Fleet request using - // CancelSpotFleetRequests or when the Spot Fleet request expires, if you set - // TerminateInstancesWithExpiration. - // - // IamFleetRole is a required field - IamFleetRole *string `locationName:"iamFleetRole" type:"string" required:"true"` - - // The behavior when a Spot Instance is interrupted. The default is terminate. - InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"InstanceInterruptionBehavior"` - - // The number of Spot pools across which to allocate your target Spot capacity. - // Valid only when Spot AllocationStrategy is set to lowest-price. Spot Fleet - // selects the cheapest Spot pools and evenly allocates your target Spot capacity - // across the number of Spot pools that you specify. - InstancePoolsToUseCount *int64 `locationName:"instancePoolsToUseCount" type:"integer"` - - // The launch specifications for the Spot Fleet request. If you specify LaunchSpecifications, - // you can't specify LaunchTemplateConfigs. If you include On-Demand capacity - // in your request, you must use LaunchTemplateConfigs. - LaunchSpecifications []*SpotFleetLaunchSpecification `locationName:"launchSpecifications" locationNameList:"item" type:"list"` - - // The launch template and overrides. If you specify LaunchTemplateConfigs, - // you can't specify LaunchSpecifications. If you include On-Demand capacity - // in your request, you must use LaunchTemplateConfigs. - LaunchTemplateConfigs []*LaunchTemplateConfig `locationName:"launchTemplateConfigs" locationNameList:"item" type:"list"` - - // One or more Classic Load Balancers and target groups to attach to the Spot - // Fleet request. Spot Fleet registers the running Spot Instances with the specified - // Classic Load Balancers and target groups. - // - // With Network Load Balancers, Spot Fleet cannot register instances that have - // the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1, G2, HI1, - // HS1, M1, M2, M3, and T1. - LoadBalancersConfig *LoadBalancersConfig `locationName:"loadBalancersConfig" type:"structure"` - - // The order of the launch template overrides to use in fulfilling On-Demand - // capacity. If you specify lowestPrice, Spot Fleet uses price to determine - // the order, launching the lowest price first. If you specify prioritized, - // Spot Fleet uses the priority that you assign to each Spot Fleet launch template - // override, launching the highest priority first. If you do not specify a value, - // Spot Fleet defaults to lowestPrice. - OnDemandAllocationStrategy *string `locationName:"onDemandAllocationStrategy" type:"string" enum:"OnDemandAllocationStrategy"` - - // The number of On-Demand units fulfilled by this request compared to the set - // target On-Demand capacity. - OnDemandFulfilledCapacity *float64 `locationName:"onDemandFulfilledCapacity" type:"double"` - - // The maximum amount per hour for On-Demand Instances that you're willing to - // pay. You can use the onDemandMaxTotalPrice parameter, the spotMaxTotalPrice - // parameter, or both parameters to ensure that your fleet cost does not exceed - // your budget. If you set a maximum price per hour for the On-Demand Instances - // and Spot Instances in your request, Spot Fleet will launch instances until - // it reaches the maximum amount you're willing to pay. When the maximum amount - // you're willing to pay is reached, the fleet stops launching instances even - // if it hasn’t met the target capacity. - OnDemandMaxTotalPrice *string `locationName:"onDemandMaxTotalPrice" type:"string"` - - // The number of On-Demand units to request. You can choose to set the target - // capacity in terms of instances or a performance characteristic that is important - // to your application workload, such as vCPUs, memory, or I/O. If the request - // type is maintain, you can specify a target capacity of 0 and add capacity - // later. - OnDemandTargetCapacity *int64 `locationName:"onDemandTargetCapacity" type:"integer"` - - // Indicates whether Spot Fleet should replace unhealthy instances. - ReplaceUnhealthyInstances *bool `locationName:"replaceUnhealthyInstances" type:"boolean"` - - // The maximum amount per hour for Spot Instances that you're willing to pay. - // You can use the spotdMaxTotalPrice parameter, the onDemandMaxTotalPrice parameter, - // or both parameters to ensure that your fleet cost does not exceed your budget. - // If you set a maximum price per hour for the On-Demand Instances and Spot - // Instances in your request, Spot Fleet will launch instances until it reaches - // the maximum amount you're willing to pay. When the maximum amount you're - // willing to pay is reached, the fleet stops launching instances even if it - // hasn’t met the target capacity. - SpotMaxTotalPrice *string `locationName:"spotMaxTotalPrice" type:"string"` - - // The maximum price per unit hour that you are willing to pay for a Spot Instance. - // The default is the On-Demand price. - SpotPrice *string `locationName:"spotPrice" type:"string"` - - // The number of units to request for the Spot Fleet. You can choose to set - // the target capacity in terms of instances or a performance characteristic - // that is important to your application workload, such as vCPUs, memory, or - // I/O. If the request type is maintain, you can specify a target capacity of - // 0 and add capacity later. - // - // TargetCapacity is a required field - TargetCapacity *int64 `locationName:"targetCapacity" type:"integer" required:"true"` - - // Indicates whether running Spot Instances are terminated when the Spot Fleet - // request expires. - TerminateInstancesWithExpiration *bool `locationName:"terminateInstancesWithExpiration" type:"boolean"` - - // The type of request. Indicates whether the Spot Fleet only requests the target - // capacity or also attempts to maintain it. When this value is request, the - // Spot Fleet only places the required requests. It does not attempt to replenish - // Spot Instances if capacity is diminished, nor does it submit requests in - // alternative Spot pools if capacity is not available. When this value is maintain, - // the Spot Fleet maintains the target capacity. The Spot Fleet places the required - // requests to meet capacity and automatically replenishes any interrupted instances. - // Default: maintain. instant is listed but is not used by Spot Fleet. - Type *string `locationName:"type" type:"string" enum:"FleetType"` - - // The start date and time of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ). - // By default, Amazon EC2 starts fulfilling the request immediately. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` - - // The end date and time of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ). - // After the end date and time, no new Spot Instance requests are placed or - // able to fulfill the request. If no value is specified, the Spot Fleet request - // remains until you cancel it. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` -} - -// String returns the string representation -func (s SpotFleetRequestConfigData) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotFleetRequestConfigData) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *SpotFleetRequestConfigData) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SpotFleetRequestConfigData"} - if s.IamFleetRole == nil { - invalidParams.Add(request.NewErrParamRequired("IamFleetRole")) - } - if s.TargetCapacity == nil { - invalidParams.Add(request.NewErrParamRequired("TargetCapacity")) - } - if s.LaunchTemplateConfigs != nil { - for i, v := range s.LaunchTemplateConfigs { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "LaunchTemplateConfigs", i), err.(request.ErrInvalidParams)) - } - } - } - if s.LoadBalancersConfig != nil { - if err := s.LoadBalancersConfig.Validate(); err != nil { - invalidParams.AddNested("LoadBalancersConfig", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAllocationStrategy sets the AllocationStrategy field's value. -func (s *SpotFleetRequestConfigData) SetAllocationStrategy(v string) *SpotFleetRequestConfigData { - s.AllocationStrategy = &v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *SpotFleetRequestConfigData) SetClientToken(v string) *SpotFleetRequestConfigData { - s.ClientToken = &v - return s -} - -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *SpotFleetRequestConfigData) SetExcessCapacityTerminationPolicy(v string) *SpotFleetRequestConfigData { - s.ExcessCapacityTerminationPolicy = &v - return s -} - -// SetFulfilledCapacity sets the FulfilledCapacity field's value. -func (s *SpotFleetRequestConfigData) SetFulfilledCapacity(v float64) *SpotFleetRequestConfigData { - s.FulfilledCapacity = &v - return s -} - -// SetIamFleetRole sets the IamFleetRole field's value. -func (s *SpotFleetRequestConfigData) SetIamFleetRole(v string) *SpotFleetRequestConfigData { - s.IamFleetRole = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *SpotFleetRequestConfigData) SetInstanceInterruptionBehavior(v string) *SpotFleetRequestConfigData { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetInstancePoolsToUseCount sets the InstancePoolsToUseCount field's value. -func (s *SpotFleetRequestConfigData) SetInstancePoolsToUseCount(v int64) *SpotFleetRequestConfigData { - s.InstancePoolsToUseCount = &v - return s -} - -// SetLaunchSpecifications sets the LaunchSpecifications field's value. -func (s *SpotFleetRequestConfigData) SetLaunchSpecifications(v []*SpotFleetLaunchSpecification) *SpotFleetRequestConfigData { - s.LaunchSpecifications = v - return s -} - -// SetLaunchTemplateConfigs sets the LaunchTemplateConfigs field's value. -func (s *SpotFleetRequestConfigData) SetLaunchTemplateConfigs(v []*LaunchTemplateConfig) *SpotFleetRequestConfigData { - s.LaunchTemplateConfigs = v - return s -} - -// SetLoadBalancersConfig sets the LoadBalancersConfig field's value. -func (s *SpotFleetRequestConfigData) SetLoadBalancersConfig(v *LoadBalancersConfig) *SpotFleetRequestConfigData { - s.LoadBalancersConfig = v - return s -} - -// SetOnDemandAllocationStrategy sets the OnDemandAllocationStrategy field's value. -func (s *SpotFleetRequestConfigData) SetOnDemandAllocationStrategy(v string) *SpotFleetRequestConfigData { - s.OnDemandAllocationStrategy = &v - return s -} - -// SetOnDemandFulfilledCapacity sets the OnDemandFulfilledCapacity field's value. -func (s *SpotFleetRequestConfigData) SetOnDemandFulfilledCapacity(v float64) *SpotFleetRequestConfigData { - s.OnDemandFulfilledCapacity = &v - return s -} - -// SetOnDemandMaxTotalPrice sets the OnDemandMaxTotalPrice field's value. -func (s *SpotFleetRequestConfigData) SetOnDemandMaxTotalPrice(v string) *SpotFleetRequestConfigData { - s.OnDemandMaxTotalPrice = &v - return s -} - -// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. -func (s *SpotFleetRequestConfigData) SetOnDemandTargetCapacity(v int64) *SpotFleetRequestConfigData { - s.OnDemandTargetCapacity = &v - return s -} - -// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. -func (s *SpotFleetRequestConfigData) SetReplaceUnhealthyInstances(v bool) *SpotFleetRequestConfigData { - s.ReplaceUnhealthyInstances = &v - return s -} - -// SetSpotMaxTotalPrice sets the SpotMaxTotalPrice field's value. -func (s *SpotFleetRequestConfigData) SetSpotMaxTotalPrice(v string) *SpotFleetRequestConfigData { - s.SpotMaxTotalPrice = &v - return s -} - -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotFleetRequestConfigData) SetSpotPrice(v string) *SpotFleetRequestConfigData { - s.SpotPrice = &v - return s -} - -// SetTargetCapacity sets the TargetCapacity field's value. -func (s *SpotFleetRequestConfigData) SetTargetCapacity(v int64) *SpotFleetRequestConfigData { - s.TargetCapacity = &v - return s -} - -// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. -func (s *SpotFleetRequestConfigData) SetTerminateInstancesWithExpiration(v bool) *SpotFleetRequestConfigData { - s.TerminateInstancesWithExpiration = &v - return s -} - -// SetType sets the Type field's value. -func (s *SpotFleetRequestConfigData) SetType(v string) *SpotFleetRequestConfigData { - s.Type = &v - return s -} - -// SetValidFrom sets the ValidFrom field's value. -func (s *SpotFleetRequestConfigData) SetValidFrom(v time.Time) *SpotFleetRequestConfigData { - s.ValidFrom = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *SpotFleetRequestConfigData) SetValidUntil(v time.Time) *SpotFleetRequestConfigData { - s.ValidUntil = &v - return s -} - -// The tags for a Spot Fleet resource. -type SpotFleetTagSpecification struct { - _ struct{} `type:"structure"` - - // The type of resource. Currently, the only resource type that is supported - // is instance. - ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - - // The tags. - Tags []*Tag `locationName:"tag" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s SpotFleetTagSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotFleetTagSpecification) GoString() string { - return s.String() -} - -// SetResourceType sets the ResourceType field's value. -func (s *SpotFleetTagSpecification) SetResourceType(v string) *SpotFleetTagSpecification { - s.ResourceType = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *SpotFleetTagSpecification) SetTags(v []*Tag) *SpotFleetTagSpecification { - s.Tags = v - return s -} - -// Describes a Spot Instance request. -type SpotInstanceRequest struct { - _ struct{} `type:"structure"` - - // If you specified a duration and your Spot Instance request was fulfilled, - // this is the fixed hourly price in effect for the Spot Instance while it runs. - ActualBlockHourlyPrice *string `locationName:"actualBlockHourlyPrice" type:"string"` - - // The Availability Zone group. If you specify the same Availability Zone group - // for all Spot Instance requests, all Spot Instances are launched in the same - // Availability Zone. - AvailabilityZoneGroup *string `locationName:"availabilityZoneGroup" type:"string"` - - // The duration for the Spot Instance, in minutes. - BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` - - // The date and time when the Spot Instance request was created, in UTC format - // (for example, YYYY-MM-DDTHH:MM:SSZ). - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // The fault codes for the Spot Instance request, if any. - Fault *SpotInstanceStateFault `locationName:"fault" type:"structure"` - - // The instance ID, if an instance has been launched to fulfill the Spot Instance - // request. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The behavior when a Spot Instance is interrupted. - InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"InstanceInterruptionBehavior"` - - // The instance launch group. Launch groups are Spot Instances that launch together - // and terminate together. - LaunchGroup *string `locationName:"launchGroup" type:"string"` - - // Additional information for launching instances. - LaunchSpecification *LaunchSpecification `locationName:"launchSpecification" type:"structure"` - - // The Availability Zone in which the request is launched. - LaunchedAvailabilityZone *string `locationName:"launchedAvailabilityZone" type:"string"` - - // The product description associated with the Spot Instance. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` - - // The ID of the Spot Instance request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` - - // The maximum price per hour that you are willing to pay for a Spot Instance. - SpotPrice *string `locationName:"spotPrice" type:"string"` - - // The state of the Spot Instance request. Spot status information helps track - // your Spot Instance requests. For more information, see Spot Status (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html) - // in the Amazon EC2 User Guide for Linux Instances. - State *string `locationName:"state" type:"string" enum:"SpotInstanceState"` - - // The status code and status message describing the Spot Instance request. - Status *SpotInstanceStatus `locationName:"status" type:"structure"` - - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The Spot Instance request type. - Type *string `locationName:"type" type:"string" enum:"SpotInstanceType"` - - // The start date of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // The request becomes active at this date and time. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` - - // The end date of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // If this is a one-time request, it remains active until all instances launch, - // the request is canceled, or this date is reached. If the request is persistent, - // it remains active until it is canceled or this date is reached. The default - // end date is 7 days from the current date. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` -} - -// String returns the string representation -func (s SpotInstanceRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotInstanceRequest) GoString() string { - return s.String() -} - -// SetActualBlockHourlyPrice sets the ActualBlockHourlyPrice field's value. -func (s *SpotInstanceRequest) SetActualBlockHourlyPrice(v string) *SpotInstanceRequest { - s.ActualBlockHourlyPrice = &v - return s -} - -// SetAvailabilityZoneGroup sets the AvailabilityZoneGroup field's value. -func (s *SpotInstanceRequest) SetAvailabilityZoneGroup(v string) *SpotInstanceRequest { - s.AvailabilityZoneGroup = &v - return s -} - -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *SpotInstanceRequest) SetBlockDurationMinutes(v int64) *SpotInstanceRequest { - s.BlockDurationMinutes = &v - return s -} - -// SetCreateTime sets the CreateTime field's value. -func (s *SpotInstanceRequest) SetCreateTime(v time.Time) *SpotInstanceRequest { - s.CreateTime = &v - return s -} - -// SetFault sets the Fault field's value. -func (s *SpotInstanceRequest) SetFault(v *SpotInstanceStateFault) *SpotInstanceRequest { - s.Fault = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *SpotInstanceRequest) SetInstanceId(v string) *SpotInstanceRequest { - s.InstanceId = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *SpotInstanceRequest) SetInstanceInterruptionBehavior(v string) *SpotInstanceRequest { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetLaunchGroup sets the LaunchGroup field's value. -func (s *SpotInstanceRequest) SetLaunchGroup(v string) *SpotInstanceRequest { - s.LaunchGroup = &v - return s -} - -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *SpotInstanceRequest) SetLaunchSpecification(v *LaunchSpecification) *SpotInstanceRequest { - s.LaunchSpecification = v - return s -} - -// SetLaunchedAvailabilityZone sets the LaunchedAvailabilityZone field's value. -func (s *SpotInstanceRequest) SetLaunchedAvailabilityZone(v string) *SpotInstanceRequest { - s.LaunchedAvailabilityZone = &v - return s -} - -// SetProductDescription sets the ProductDescription field's value. -func (s *SpotInstanceRequest) SetProductDescription(v string) *SpotInstanceRequest { - s.ProductDescription = &v - return s -} - -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *SpotInstanceRequest) SetSpotInstanceRequestId(v string) *SpotInstanceRequest { - s.SpotInstanceRequestId = &v - return s -} - -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotInstanceRequest) SetSpotPrice(v string) *SpotInstanceRequest { - s.SpotPrice = &v - return s -} - -// SetState sets the State field's value. -func (s *SpotInstanceRequest) SetState(v string) *SpotInstanceRequest { - s.State = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *SpotInstanceRequest) SetStatus(v *SpotInstanceStatus) *SpotInstanceRequest { - s.Status = v - return s -} - -// SetTags sets the Tags field's value. -func (s *SpotInstanceRequest) SetTags(v []*Tag) *SpotInstanceRequest { - s.Tags = v - return s -} - -// SetType sets the Type field's value. -func (s *SpotInstanceRequest) SetType(v string) *SpotInstanceRequest { - s.Type = &v - return s -} - -// SetValidFrom sets the ValidFrom field's value. -func (s *SpotInstanceRequest) SetValidFrom(v time.Time) *SpotInstanceRequest { - s.ValidFrom = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *SpotInstanceRequest) SetValidUntil(v time.Time) *SpotInstanceRequest { - s.ValidUntil = &v - return s -} - -// Describes a Spot Instance state change. -type SpotInstanceStateFault struct { - _ struct{} `type:"structure"` - - // The reason code for the Spot Instance state change. - Code *string `locationName:"code" type:"string"` - - // The message for the Spot Instance state change. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s SpotInstanceStateFault) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotInstanceStateFault) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *SpotInstanceStateFault) SetCode(v string) *SpotInstanceStateFault { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *SpotInstanceStateFault) SetMessage(v string) *SpotInstanceStateFault { - s.Message = &v - return s -} - -// Describes the status of a Spot Instance request. -type SpotInstanceStatus struct { - _ struct{} `type:"structure"` - - // The status code. For a list of status codes, see Spot Status Codes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand) - // in the Amazon EC2 User Guide for Linux Instances. - Code *string `locationName:"code" type:"string"` - - // The description for the status code. - Message *string `locationName:"message" type:"string"` - - // The date and time of the most recent status update, in UTC format (for example, - // YYYY-MM-DDTHH:MM:SSZ). - UpdateTime *time.Time `locationName:"updateTime" type:"timestamp"` -} - -// String returns the string representation -func (s SpotInstanceStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotInstanceStatus) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *SpotInstanceStatus) SetCode(v string) *SpotInstanceStatus { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *SpotInstanceStatus) SetMessage(v string) *SpotInstanceStatus { - s.Message = &v - return s -} - -// SetUpdateTime sets the UpdateTime field's value. -func (s *SpotInstanceStatus) SetUpdateTime(v time.Time) *SpotInstanceStatus { - s.UpdateTime = &v - return s -} - -// The options for Spot Instances. -type SpotMarketOptions struct { - _ struct{} `type:"structure"` - - // The required duration for the Spot Instances (also known as Spot blocks), - // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, - // or 360). - BlockDurationMinutes *int64 `type:"integer"` - - // The behavior when a Spot Instance is interrupted. The default is terminate. - InstanceInterruptionBehavior *string `type:"string" enum:"InstanceInterruptionBehavior"` - - // The maximum hourly price you're willing to pay for the Spot Instances. The - // default is the On-Demand price. - MaxPrice *string `type:"string"` - - // The Spot Instance request type. For RunInstances, persistent Spot Instance - // requests are only supported when InstanceInterruptionBehavior is set to either - // hibernate or stop. - SpotInstanceType *string `type:"string" enum:"SpotInstanceType"` - - // The end date of the request. For a one-time request, the request remains - // active until all instances launch, the request is canceled, or this date - // is reached. If the request is persistent, it remains active until it is canceled - // or this date and time is reached. The default end date is 7 days from the - // current date. - ValidUntil *time.Time `type:"timestamp"` -} - -// String returns the string representation -func (s SpotMarketOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotMarketOptions) GoString() string { - return s.String() -} - -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *SpotMarketOptions) SetBlockDurationMinutes(v int64) *SpotMarketOptions { - s.BlockDurationMinutes = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *SpotMarketOptions) SetInstanceInterruptionBehavior(v string) *SpotMarketOptions { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetMaxPrice sets the MaxPrice field's value. -func (s *SpotMarketOptions) SetMaxPrice(v string) *SpotMarketOptions { - s.MaxPrice = &v - return s -} - -// SetSpotInstanceType sets the SpotInstanceType field's value. -func (s *SpotMarketOptions) SetSpotInstanceType(v string) *SpotMarketOptions { - s.SpotInstanceType = &v - return s -} - -// SetValidUntil sets the ValidUntil field's value. -func (s *SpotMarketOptions) SetValidUntil(v time.Time) *SpotMarketOptions { - s.ValidUntil = &v - return s -} - -// Describes the configuration of Spot Instances in an EC2 Fleet. -type SpotOptions struct { - _ struct{} `type:"structure"` - - // Indicates how to allocate the target Spot Instance capacity across the Spot - // Instance pools specified by the EC2 Fleet. - // - // If the allocation strategy is lowest-price, EC2 Fleet launches instances - // from the Spot Instance pools with the lowest price. This is the default allocation - // strategy. - // - // If the allocation strategy is diversified, EC2 Fleet launches instances from - // all the Spot Instance pools that you specify. - // - // If the allocation strategy is capacity-optimized, EC2 Fleet launches instances - // from Spot Instance pools with optimal capacity for the number of instances - // that are launching. - AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"SpotAllocationStrategy"` - - // The behavior when a Spot Instance is interrupted. The default is terminate. - InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"SpotInstanceInterruptionBehavior"` - - // The number of Spot pools across which to allocate your target Spot capacity. - // Valid only when AllocationStrategy is set to lowest-price. EC2 Fleet selects - // the cheapest Spot pools and evenly allocates your target Spot capacity across - // the number of Spot pools that you specify. - InstancePoolsToUseCount *int64 `locationName:"instancePoolsToUseCount" type:"integer"` - - // The maximum amount per hour for Spot Instances that you're willing to pay. - MaxTotalPrice *string `locationName:"maxTotalPrice" type:"string"` - - // The minimum target capacity for Spot Instances in the fleet. If the minimum - // target capacity is not reached, the fleet launches no instances. - MinTargetCapacity *int64 `locationName:"minTargetCapacity" type:"integer"` - - // Indicates that the fleet launches all Spot Instances into a single Availability - // Zone. - SingleAvailabilityZone *bool `locationName:"singleAvailabilityZone" type:"boolean"` - - // Indicates that the fleet uses a single instance type to launch all Spot Instances - // in the fleet. - SingleInstanceType *bool `locationName:"singleInstanceType" type:"boolean"` -} - -// String returns the string representation -func (s SpotOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotOptions) GoString() string { - return s.String() -} - -// SetAllocationStrategy sets the AllocationStrategy field's value. -func (s *SpotOptions) SetAllocationStrategy(v string) *SpotOptions { - s.AllocationStrategy = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *SpotOptions) SetInstanceInterruptionBehavior(v string) *SpotOptions { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetInstancePoolsToUseCount sets the InstancePoolsToUseCount field's value. -func (s *SpotOptions) SetInstancePoolsToUseCount(v int64) *SpotOptions { - s.InstancePoolsToUseCount = &v - return s -} - -// SetMaxTotalPrice sets the MaxTotalPrice field's value. -func (s *SpotOptions) SetMaxTotalPrice(v string) *SpotOptions { - s.MaxTotalPrice = &v - return s -} - -// SetMinTargetCapacity sets the MinTargetCapacity field's value. -func (s *SpotOptions) SetMinTargetCapacity(v int64) *SpotOptions { - s.MinTargetCapacity = &v - return s -} - -// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. -func (s *SpotOptions) SetSingleAvailabilityZone(v bool) *SpotOptions { - s.SingleAvailabilityZone = &v - return s -} - -// SetSingleInstanceType sets the SingleInstanceType field's value. -func (s *SpotOptions) SetSingleInstanceType(v bool) *SpotOptions { - s.SingleInstanceType = &v - return s -} - -// Describes the configuration of Spot Instances in an EC2 Fleet request. -type SpotOptionsRequest struct { - _ struct{} `type:"structure"` - - // Indicates how to allocate the target Spot Instance capacity across the Spot - // Instance pools specified by the EC2 Fleet. - // - // If the allocation strategy is lowest-price, EC2 Fleet launches instances - // from the Spot Instance pools with the lowest price. This is the default allocation - // strategy. - // - // If the allocation strategy is diversified, EC2 Fleet launches instances from - // all the Spot Instance pools that you specify. - // - // If the allocation strategy is capacity-optimized, EC2 Fleet launches instances - // from Spot Instance pools with optimal capacity for the number of instances - // that are launching. - AllocationStrategy *string `type:"string" enum:"SpotAllocationStrategy"` - - // The behavior when a Spot Instance is interrupted. The default is terminate. - InstanceInterruptionBehavior *string `type:"string" enum:"SpotInstanceInterruptionBehavior"` - - // The number of Spot pools across which to allocate your target Spot capacity. - // Valid only when Spot AllocationStrategy is set to lowest-price. EC2 Fleet - // selects the cheapest Spot pools and evenly allocates your target Spot capacity - // across the number of Spot pools that you specify. - InstancePoolsToUseCount *int64 `type:"integer"` - - // The maximum amount per hour for Spot Instances that you're willing to pay. - MaxTotalPrice *string `type:"string"` - - // The minimum target capacity for Spot Instances in the fleet. If the minimum - // target capacity is not reached, the fleet launches no instances. - MinTargetCapacity *int64 `type:"integer"` - - // Indicates that the fleet launches all Spot Instances into a single Availability - // Zone. - SingleAvailabilityZone *bool `type:"boolean"` - - // Indicates that the fleet uses a single instance type to launch all Spot Instances - // in the fleet. - SingleInstanceType *bool `type:"boolean"` -} - -// String returns the string representation -func (s SpotOptionsRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotOptionsRequest) GoString() string { - return s.String() -} - -// SetAllocationStrategy sets the AllocationStrategy field's value. -func (s *SpotOptionsRequest) SetAllocationStrategy(v string) *SpotOptionsRequest { - s.AllocationStrategy = &v - return s -} - -// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. -func (s *SpotOptionsRequest) SetInstanceInterruptionBehavior(v string) *SpotOptionsRequest { - s.InstanceInterruptionBehavior = &v - return s -} - -// SetInstancePoolsToUseCount sets the InstancePoolsToUseCount field's value. -func (s *SpotOptionsRequest) SetInstancePoolsToUseCount(v int64) *SpotOptionsRequest { - s.InstancePoolsToUseCount = &v - return s -} - -// SetMaxTotalPrice sets the MaxTotalPrice field's value. -func (s *SpotOptionsRequest) SetMaxTotalPrice(v string) *SpotOptionsRequest { - s.MaxTotalPrice = &v - return s -} - -// SetMinTargetCapacity sets the MinTargetCapacity field's value. -func (s *SpotOptionsRequest) SetMinTargetCapacity(v int64) *SpotOptionsRequest { - s.MinTargetCapacity = &v - return s -} - -// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. -func (s *SpotOptionsRequest) SetSingleAvailabilityZone(v bool) *SpotOptionsRequest { - s.SingleAvailabilityZone = &v - return s -} - -// SetSingleInstanceType sets the SingleInstanceType field's value. -func (s *SpotOptionsRequest) SetSingleInstanceType(v bool) *SpotOptionsRequest { - s.SingleInstanceType = &v - return s -} - -// Describes Spot Instance placement. -type SpotPlacement struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - // - // [Spot Fleet only] To specify multiple Availability Zones, separate them using - // commas; for example, "us-west-2a, us-west-2b". - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The name of the placement group. - GroupName *string `locationName:"groupName" type:"string"` - - // The tenancy of the instance (if the instance is running in a VPC). An instance - // with a tenancy of dedicated runs on single-tenant hardware. The host tenancy - // is not supported for Spot Instances. - Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` -} - -// String returns the string representation -func (s SpotPlacement) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotPlacement) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *SpotPlacement) SetAvailabilityZone(v string) *SpotPlacement { - s.AvailabilityZone = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *SpotPlacement) SetGroupName(v string) *SpotPlacement { - s.GroupName = &v - return s -} - -// SetTenancy sets the Tenancy field's value. -func (s *SpotPlacement) SetTenancy(v string) *SpotPlacement { - s.Tenancy = &v - return s -} - -// Describes the maximum price per hour that you are willing to pay for a Spot -// Instance. -type SpotPrice struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // A general description of the AMI. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` - - // The maximum price per hour that you are willing to pay for a Spot Instance. - SpotPrice *string `locationName:"spotPrice" type:"string"` - - // The date and time the request was created, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` -} - -// String returns the string representation -func (s SpotPrice) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SpotPrice) GoString() string { - return s.String() -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *SpotPrice) SetAvailabilityZone(v string) *SpotPrice { - s.AvailabilityZone = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *SpotPrice) SetInstanceType(v string) *SpotPrice { - s.InstanceType = &v - return s -} - -// SetProductDescription sets the ProductDescription field's value. -func (s *SpotPrice) SetProductDescription(v string) *SpotPrice { - s.ProductDescription = &v - return s -} - -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotPrice) SetSpotPrice(v string) *SpotPrice { - s.SpotPrice = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *SpotPrice) SetTimestamp(v time.Time) *SpotPrice { - s.Timestamp = &v - return s -} - -// Describes a stale rule in a security group. -type StaleIpPermission struct { - _ struct{} `type:"structure"` - - // The start of the port range for the TCP and UDP protocols, or an ICMP type - // number. A value of -1 indicates all ICMP types. - FromPort *int64 `locationName:"fromPort" type:"integer"` - - // The IP protocol name (for tcp, udp, and icmp) or number (see Protocol Numbers) - // (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). - IpProtocol *string `locationName:"ipProtocol" type:"string"` - - // The IP ranges. Not applicable for stale security group rules. - IpRanges []*string `locationName:"ipRanges" locationNameList:"item" type:"list"` - - // The prefix list IDs for an AWS service. Not applicable for stale security - // group rules. - PrefixListIds []*string `locationName:"prefixListIds" locationNameList:"item" type:"list"` - - // The end of the port range for the TCP and UDP protocols, or an ICMP type - // number. A value of -1 indicates all ICMP types. - ToPort *int64 `locationName:"toPort" type:"integer"` - - // The security group pairs. Returns the ID of the referenced security group - // and VPC, and the ID and status of the VPC peering connection. - UserIdGroupPairs []*UserIdGroupPair `locationName:"groups" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s StaleIpPermission) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StaleIpPermission) GoString() string { - return s.String() -} - -// SetFromPort sets the FromPort field's value. -func (s *StaleIpPermission) SetFromPort(v int64) *StaleIpPermission { - s.FromPort = &v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *StaleIpPermission) SetIpProtocol(v string) *StaleIpPermission { - s.IpProtocol = &v - return s -} - -// SetIpRanges sets the IpRanges field's value. -func (s *StaleIpPermission) SetIpRanges(v []*string) *StaleIpPermission { - s.IpRanges = v - return s -} - -// SetPrefixListIds sets the PrefixListIds field's value. -func (s *StaleIpPermission) SetPrefixListIds(v []*string) *StaleIpPermission { - s.PrefixListIds = v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *StaleIpPermission) SetToPort(v int64) *StaleIpPermission { - s.ToPort = &v - return s -} - -// SetUserIdGroupPairs sets the UserIdGroupPairs field's value. -func (s *StaleIpPermission) SetUserIdGroupPairs(v []*UserIdGroupPair) *StaleIpPermission { - s.UserIdGroupPairs = v - return s -} - -// Describes a stale security group (a security group that contains stale rules). -type StaleSecurityGroup struct { - _ struct{} `type:"structure"` - - // The description of the security group. - Description *string `locationName:"description" type:"string"` - - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` - - // Information about the stale inbound rules in the security group. - StaleIpPermissions []*StaleIpPermission `locationName:"staleIpPermissions" locationNameList:"item" type:"list"` - - // Information about the stale outbound rules in the security group. - StaleIpPermissionsEgress []*StaleIpPermission `locationName:"staleIpPermissionsEgress" locationNameList:"item" type:"list"` - - // The ID of the VPC for the security group. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s StaleSecurityGroup) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StaleSecurityGroup) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *StaleSecurityGroup) SetDescription(v string) *StaleSecurityGroup { - s.Description = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *StaleSecurityGroup) SetGroupId(v string) *StaleSecurityGroup { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *StaleSecurityGroup) SetGroupName(v string) *StaleSecurityGroup { - s.GroupName = &v - return s -} - -// SetStaleIpPermissions sets the StaleIpPermissions field's value. -func (s *StaleSecurityGroup) SetStaleIpPermissions(v []*StaleIpPermission) *StaleSecurityGroup { - s.StaleIpPermissions = v - return s -} - -// SetStaleIpPermissionsEgress sets the StaleIpPermissionsEgress field's value. -func (s *StaleSecurityGroup) SetStaleIpPermissionsEgress(v []*StaleIpPermission) *StaleSecurityGroup { - s.StaleIpPermissionsEgress = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *StaleSecurityGroup) SetVpcId(v string) *StaleSecurityGroup { - s.VpcId = &v - return s -} - -type StartInstancesInput struct { - _ struct{} `type:"structure"` - - // Reserved. - AdditionalInfo *string `locationName:"additionalInfo" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the instances. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` -} - -// String returns the string representation -func (s StartInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StartInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *StartInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "StartInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAdditionalInfo sets the AdditionalInfo field's value. -func (s *StartInstancesInput) SetAdditionalInfo(v string) *StartInstancesInput { - s.AdditionalInfo = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *StartInstancesInput) SetDryRun(v bool) *StartInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *StartInstancesInput) SetInstanceIds(v []*string) *StartInstancesInput { - s.InstanceIds = v - return s -} - -type StartInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about the started instances. - StartingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s StartInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StartInstancesOutput) GoString() string { - return s.String() -} - -// SetStartingInstances sets the StartingInstances field's value. -func (s *StartInstancesOutput) SetStartingInstances(v []*InstanceStateChange) *StartInstancesOutput { - s.StartingInstances = v - return s -} - -// Describes a state change. -type StateReason struct { - _ struct{} `type:"structure"` - - // The reason code for the state change. - Code *string `locationName:"code" type:"string"` - - // The message for the state change. - // - // * Server.InsufficientInstanceCapacity: There was insufficient capacity - // available to satisfy the launch request. - // - // * Server.InternalError: An internal error caused the instance to terminate - // during launch. - // - // * Server.ScheduledStop: The instance was stopped due to a scheduled retirement. - // - // * Server.SpotInstanceShutdown: The instance was stopped because the number - // of Spot requests with a maximum price equal to or higher than the Spot - // price exceeded available capacity or because of an increase in the Spot - // price. - // - // * Server.SpotInstanceTermination: The instance was terminated because - // the number of Spot requests with a maximum price equal to or higher than - // the Spot price exceeded available capacity or because of an increase in - // the Spot price. - // - // * Client.InstanceInitiatedShutdown: The instance was shut down using the - // shutdown -h command from the instance. - // - // * Client.InstanceTerminated: The instance was terminated or rebooted during - // AMI creation. - // - // * Client.InternalError: A client error caused the instance to terminate - // during launch. - // - // * Client.InvalidSnapshot.NotFound: The specified snapshot was not found. - // - // * Client.UserInitiatedHibernate: Hibernation was initiated on the instance. - // - // * Client.UserInitiatedShutdown: The instance was shut down using the Amazon - // EC2 API. - // - // * Client.VolumeLimitExceeded: The limit on the number of EBS volumes or - // total storage was exceeded. Decrease usage or request an increase in your - // account limits. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s StateReason) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StateReason) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *StateReason) SetCode(v string) *StateReason { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *StateReason) SetMessage(v string) *StateReason { - s.Message = &v - return s -} - -type StopInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Forces the instances to stop. The instances do not have an opportunity to - // flush file system caches or file system metadata. If you use this option, - // you must perform file system check and repair procedures. This option is - // not recommended for Windows instances. - // - // Default: false - Force *bool `locationName:"force" type:"boolean"` - - // Hibernates the instance if the instance was enabled for hibernation at launch. - // If the instance cannot hibernate successfully, a normal shutdown occurs. - // For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Default: false - Hibernate *bool `type:"boolean"` - - // The IDs of the instances. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` -} - -// String returns the string representation -func (s StopInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StopInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *StopInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "StopInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *StopInstancesInput) SetDryRun(v bool) *StopInstancesInput { - s.DryRun = &v - return s -} - -// SetForce sets the Force field's value. -func (s *StopInstancesInput) SetForce(v bool) *StopInstancesInput { - s.Force = &v - return s -} - -// SetHibernate sets the Hibernate field's value. -func (s *StopInstancesInput) SetHibernate(v bool) *StopInstancesInput { - s.Hibernate = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *StopInstancesInput) SetInstanceIds(v []*string) *StopInstancesInput { - s.InstanceIds = v - return s -} - -type StopInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about the stopped instances. - StoppingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s StopInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StopInstancesOutput) GoString() string { - return s.String() -} - -// SetStoppingInstances sets the StoppingInstances field's value. -func (s *StopInstancesOutput) SetStoppingInstances(v []*InstanceStateChange) *StopInstancesOutput { - s.StoppingInstances = v - return s -} - -// Describes the storage location for an instance store-backed AMI. -type Storage struct { - _ struct{} `type:"structure"` - - // An Amazon S3 storage location. - S3 *S3Storage `type:"structure"` -} - -// String returns the string representation -func (s Storage) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Storage) GoString() string { - return s.String() -} - -// SetS3 sets the S3 field's value. -func (s *Storage) SetS3(v *S3Storage) *Storage { - s.S3 = v - return s -} - -// Describes a storage location in Amazon S3. -type StorageLocation struct { - _ struct{} `type:"structure"` - - // The name of the S3 bucket. - Bucket *string `type:"string"` - - // The key. - Key *string `type:"string"` -} - -// String returns the string representation -func (s StorageLocation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s StorageLocation) GoString() string { - return s.String() -} - -// SetBucket sets the Bucket field's value. -func (s *StorageLocation) SetBucket(v string) *StorageLocation { - s.Bucket = &v - return s -} - -// SetKey sets the Key field's value. -func (s *StorageLocation) SetKey(v string) *StorageLocation { - s.Key = &v - return s -} - -// Describes a subnet. -type Subnet struct { - _ struct{} `type:"structure"` - - // Indicates whether a network interface created in this subnet (including a - // network interface created by RunInstances) receives an IPv6 address. - AssignIpv6AddressOnCreation *bool `locationName:"assignIpv6AddressOnCreation" type:"boolean"` - - // The Availability Zone of the subnet. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The AZ ID of the subnet. - AvailabilityZoneId *string `locationName:"availabilityZoneId" type:"string"` - - // The number of unused private IPv4 addresses in the subnet. The IPv4 addresses - // for any stopped instances are considered unavailable. - AvailableIpAddressCount *int64 `locationName:"availableIpAddressCount" type:"integer"` - - // The IPv4 CIDR block assigned to the subnet. - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Indicates whether this is the default subnet for the Availability Zone. - DefaultForAz *bool `locationName:"defaultForAz" type:"boolean"` - - // Information about the IPv6 CIDR blocks associated with the subnet. - Ipv6CidrBlockAssociationSet []*SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociationSet" locationNameList:"item" type:"list"` - - // Indicates whether instances launched in this subnet receive a public IPv4 - // address. - MapPublicIpOnLaunch *bool `locationName:"mapPublicIpOnLaunch" type:"boolean"` - - // The ID of the AWS account that owns the subnet. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The current state of the subnet. - State *string `locationName:"state" type:"string" enum:"SubnetState"` - - // The Amazon Resource Name (ARN) of the subnet. - SubnetArn *string `locationName:"subnetArn" type:"string"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` - - // Any tags assigned to the subnet. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC the subnet is in. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s Subnet) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Subnet) GoString() string { - return s.String() -} - -// SetAssignIpv6AddressOnCreation sets the AssignIpv6AddressOnCreation field's value. -func (s *Subnet) SetAssignIpv6AddressOnCreation(v bool) *Subnet { - s.AssignIpv6AddressOnCreation = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Subnet) SetAvailabilityZone(v string) *Subnet { - s.AvailabilityZone = &v - return s -} - -// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. -func (s *Subnet) SetAvailabilityZoneId(v string) *Subnet { - s.AvailabilityZoneId = &v - return s -} - -// SetAvailableIpAddressCount sets the AvailableIpAddressCount field's value. -func (s *Subnet) SetAvailableIpAddressCount(v int64) *Subnet { - s.AvailableIpAddressCount = &v - return s -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *Subnet) SetCidrBlock(v string) *Subnet { - s.CidrBlock = &v - return s -} - -// SetDefaultForAz sets the DefaultForAz field's value. -func (s *Subnet) SetDefaultForAz(v bool) *Subnet { - s.DefaultForAz = &v - return s -} - -// SetIpv6CidrBlockAssociationSet sets the Ipv6CidrBlockAssociationSet field's value. -func (s *Subnet) SetIpv6CidrBlockAssociationSet(v []*SubnetIpv6CidrBlockAssociation) *Subnet { - s.Ipv6CidrBlockAssociationSet = v - return s -} - -// SetMapPublicIpOnLaunch sets the MapPublicIpOnLaunch field's value. -func (s *Subnet) SetMapPublicIpOnLaunch(v bool) *Subnet { - s.MapPublicIpOnLaunch = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *Subnet) SetOwnerId(v string) *Subnet { - s.OwnerId = &v - return s -} - -// SetState sets the State field's value. -func (s *Subnet) SetState(v string) *Subnet { - s.State = &v - return s -} - -// SetSubnetArn sets the SubnetArn field's value. -func (s *Subnet) SetSubnetArn(v string) *Subnet { - s.SubnetArn = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *Subnet) SetSubnetId(v string) *Subnet { - s.SubnetId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Subnet) SetTags(v []*Tag) *Subnet { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *Subnet) SetVpcId(v string) *Subnet { - s.VpcId = &v - return s -} - -// Describes the state of a CIDR block. -type SubnetCidrBlockState struct { - _ struct{} `type:"structure"` - - // The state of a CIDR block. - State *string `locationName:"state" type:"string" enum:"SubnetCidrBlockStateCode"` - - // A message about the status of the CIDR block, if applicable. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s SubnetCidrBlockState) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SubnetCidrBlockState) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *SubnetCidrBlockState) SetState(v string) *SubnetCidrBlockState { - s.State = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *SubnetCidrBlockState) SetStatusMessage(v string) *SubnetCidrBlockState { - s.StatusMessage = &v - return s -} - -// Describes an IPv6 CIDR block associated with a subnet. -type SubnetIpv6CidrBlockAssociation struct { - _ struct{} `type:"structure"` - - // The association ID for the CIDR block. - AssociationId *string `locationName:"associationId" type:"string"` - - // The IPv6 CIDR block. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - - // Information about the state of the CIDR block. - Ipv6CidrBlockState *SubnetCidrBlockState `locationName:"ipv6CidrBlockState" type:"structure"` -} - -// String returns the string representation -func (s SubnetIpv6CidrBlockAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SubnetIpv6CidrBlockAssociation) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *SubnetIpv6CidrBlockAssociation) SetAssociationId(v string) *SubnetIpv6CidrBlockAssociation { - s.AssociationId = &v - return s -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *SubnetIpv6CidrBlockAssociation) SetIpv6CidrBlock(v string) *SubnetIpv6CidrBlockAssociation { - s.Ipv6CidrBlock = &v - return s -} - -// SetIpv6CidrBlockState sets the Ipv6CidrBlockState field's value. -func (s *SubnetIpv6CidrBlockAssociation) SetIpv6CidrBlockState(v *SubnetCidrBlockState) *SubnetIpv6CidrBlockAssociation { - s.Ipv6CidrBlockState = v - return s -} - -// Describes the T2 or T3 instance whose credit option for CPU usage was successfully -// modified. -type SuccessfulInstanceCreditSpecificationItem struct { - _ struct{} `type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` -} - -// String returns the string representation -func (s SuccessfulInstanceCreditSpecificationItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SuccessfulInstanceCreditSpecificationItem) GoString() string { - return s.String() -} - -// SetInstanceId sets the InstanceId field's value. -func (s *SuccessfulInstanceCreditSpecificationItem) SetInstanceId(v string) *SuccessfulInstanceCreditSpecificationItem { - s.InstanceId = &v - return s -} - -// Describes a Reserved Instance whose queued purchase was successfully deleted. -type SuccessfulQueuedPurchaseDeletion struct { - _ struct{} `type:"structure"` - - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` -} - -// String returns the string representation -func (s SuccessfulQueuedPurchaseDeletion) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s SuccessfulQueuedPurchaseDeletion) GoString() string { - return s.String() -} - -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *SuccessfulQueuedPurchaseDeletion) SetReservedInstancesId(v string) *SuccessfulQueuedPurchaseDeletion { - s.ReservedInstancesId = &v - return s -} - -// Describes a tag. -type Tag struct { - _ struct{} `type:"structure"` - - // The key of the tag. - // - // Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode - // characters. May not begin with aws:. - Key *string `locationName:"key" type:"string"` - - // The value of the tag. - // - // Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode - // characters. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s Tag) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Tag) GoString() string { - return s.String() -} - -// SetKey sets the Key field's value. -func (s *Tag) SetKey(v string) *Tag { - s.Key = &v - return s -} - -// SetValue sets the Value field's value. -func (s *Tag) SetValue(v string) *Tag { - s.Value = &v - return s -} - -// Describes a tag. -type TagDescription struct { - _ struct{} `type:"structure"` - - // The tag key. - Key *string `locationName:"key" type:"string"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - - // The tag value. - Value *string `locationName:"value" type:"string"` -} - -// String returns the string representation -func (s TagDescription) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TagDescription) GoString() string { - return s.String() -} - -// SetKey sets the Key field's value. -func (s *TagDescription) SetKey(v string) *TagDescription { - s.Key = &v - return s -} - -// SetResourceId sets the ResourceId field's value. -func (s *TagDescription) SetResourceId(v string) *TagDescription { - s.ResourceId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TagDescription) SetResourceType(v string) *TagDescription { - s.ResourceType = &v - return s -} - -// SetValue sets the Value field's value. -func (s *TagDescription) SetValue(v string) *TagDescription { - s.Value = &v - return s -} - -// The tags to apply to a resource when the resource is being created. -type TagSpecification struct { - _ struct{} `type:"structure"` - - // The type of resource to tag. Currently, the resource types that support tagging - // on creation are: capacity-reservation | client-vpn-endpoint | dedicated-host - // | fleet | fpga-image | instance | launch-template | snapshot | traffic-mirror-filter - // | traffic-mirror-session | traffic-mirror-target | transit-gateway | transit-gateway-attachment - // | transit-gateway-route-table | volume. - // - // To tag a resource after it has been created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). - ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - - // The tags to apply to the resource. - Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s TagSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TagSpecification) GoString() string { - return s.String() -} - -// SetResourceType sets the ResourceType field's value. -func (s *TagSpecification) SetResourceType(v string) *TagSpecification { - s.ResourceType = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TagSpecification) SetTags(v []*Tag) *TagSpecification { - s.Tags = v - return s -} - -// The number of units to request. You can choose to set the target capacity -// in terms of instances or a performance characteristic that is important to -// your application workload, such as vCPUs, memory, or I/O. If the request -// type is maintain, you can specify a target capacity of 0 and add capacity -// later. -// -// You can use the On-Demand Instance MaxTotalPrice parameter, the Spot Instance -// MaxTotalPrice, or both to ensure your fleet cost does not exceed your budget. -// If you set a maximum price per hour for the On-Demand Instances and Spot -// Instances in your request, EC2 Fleet will launch instances until it reaches -// the maximum amount you're willing to pay. When the maximum amount you're -// willing to pay is reached, the fleet stops launching instances even if it -// hasn’t met the target capacity. The MaxTotalPrice parameters are located -// in and -type TargetCapacitySpecification struct { - _ struct{} `type:"structure"` - - // The default TotalTargetCapacity, which is either Spot or On-Demand. - DefaultTargetCapacityType *string `locationName:"defaultTargetCapacityType" type:"string" enum:"DefaultTargetCapacityType"` - - // The number of On-Demand units to request. If you specify a target capacity - // for Spot units, you cannot specify a target capacity for On-Demand units. - OnDemandTargetCapacity *int64 `locationName:"onDemandTargetCapacity" type:"integer"` - - // The maximum number of Spot units to launch. If you specify a target capacity - // for On-Demand units, you cannot specify a target capacity for Spot units. - SpotTargetCapacity *int64 `locationName:"spotTargetCapacity" type:"integer"` - - // The number of units to request, filled using DefaultTargetCapacityType. - TotalTargetCapacity *int64 `locationName:"totalTargetCapacity" type:"integer"` -} - -// String returns the string representation -func (s TargetCapacitySpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetCapacitySpecification) GoString() string { - return s.String() -} - -// SetDefaultTargetCapacityType sets the DefaultTargetCapacityType field's value. -func (s *TargetCapacitySpecification) SetDefaultTargetCapacityType(v string) *TargetCapacitySpecification { - s.DefaultTargetCapacityType = &v - return s -} - -// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. -func (s *TargetCapacitySpecification) SetOnDemandTargetCapacity(v int64) *TargetCapacitySpecification { - s.OnDemandTargetCapacity = &v - return s -} - -// SetSpotTargetCapacity sets the SpotTargetCapacity field's value. -func (s *TargetCapacitySpecification) SetSpotTargetCapacity(v int64) *TargetCapacitySpecification { - s.SpotTargetCapacity = &v - return s -} - -// SetTotalTargetCapacity sets the TotalTargetCapacity field's value. -func (s *TargetCapacitySpecification) SetTotalTargetCapacity(v int64) *TargetCapacitySpecification { - s.TotalTargetCapacity = &v - return s -} - -// The number of units to request. You can choose to set the target capacity -// as the number of instances. Or you can set the target capacity to a performance -// characteristic that is important to your application workload, such as vCPUs, -// memory, or I/O. If the request type is maintain, you can specify a target -// capacity of 0 and add capacity later. -// -// You can use the On-Demand Instance MaxTotalPrice parameter, the Spot Instance -// MaxTotalPrice parameter, or both parameters to ensure that your fleet cost -// does not exceed your budget. If you set a maximum price per hour for the -// On-Demand Instances and Spot Instances in your request, EC2 Fleet will launch -// instances until it reaches the maximum amount you're willing to pay. When -// the maximum amount you're willing to pay is reached, the fleet stops launching -// instances even if it hasn’t met the target capacity. The MaxTotalPrice -// parameters are located in and . -type TargetCapacitySpecificationRequest struct { - _ struct{} `type:"structure"` - - // The default TotalTargetCapacity, which is either Spot or On-Demand. - DefaultTargetCapacityType *string `type:"string" enum:"DefaultTargetCapacityType"` - - // The number of On-Demand units to request. - OnDemandTargetCapacity *int64 `type:"integer"` - - // The number of Spot units to request. - SpotTargetCapacity *int64 `type:"integer"` - - // The number of units to request, filled using DefaultTargetCapacityType. - // - // TotalTargetCapacity is a required field - TotalTargetCapacity *int64 `type:"integer" required:"true"` -} - -// String returns the string representation -func (s TargetCapacitySpecificationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetCapacitySpecificationRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *TargetCapacitySpecificationRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TargetCapacitySpecificationRequest"} - if s.TotalTargetCapacity == nil { - invalidParams.Add(request.NewErrParamRequired("TotalTargetCapacity")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDefaultTargetCapacityType sets the DefaultTargetCapacityType field's value. -func (s *TargetCapacitySpecificationRequest) SetDefaultTargetCapacityType(v string) *TargetCapacitySpecificationRequest { - s.DefaultTargetCapacityType = &v - return s -} - -// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. -func (s *TargetCapacitySpecificationRequest) SetOnDemandTargetCapacity(v int64) *TargetCapacitySpecificationRequest { - s.OnDemandTargetCapacity = &v - return s -} - -// SetSpotTargetCapacity sets the SpotTargetCapacity field's value. -func (s *TargetCapacitySpecificationRequest) SetSpotTargetCapacity(v int64) *TargetCapacitySpecificationRequest { - s.SpotTargetCapacity = &v - return s -} - -// SetTotalTargetCapacity sets the TotalTargetCapacity field's value. -func (s *TargetCapacitySpecificationRequest) SetTotalTargetCapacity(v int64) *TargetCapacitySpecificationRequest { - s.TotalTargetCapacity = &v - return s -} - -// Information about the Convertible Reserved Instance offering. -type TargetConfiguration struct { - _ struct{} `type:"structure"` - - // The number of instances the Convertible Reserved Instance offering can be - // applied to. This parameter is reserved and cannot be specified in a request - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - - // The ID of the Convertible Reserved Instance offering. - OfferingId *string `locationName:"offeringId" type:"string"` -} - -// String returns the string representation -func (s TargetConfiguration) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetConfiguration) GoString() string { - return s.String() -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *TargetConfiguration) SetInstanceCount(v int64) *TargetConfiguration { - s.InstanceCount = &v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *TargetConfiguration) SetOfferingId(v string) *TargetConfiguration { - s.OfferingId = &v - return s -} - -// Details about the target configuration. -type TargetConfigurationRequest struct { - _ struct{} `type:"structure"` - - // The number of instances the Covertible Reserved Instance offering can be - // applied to. This parameter is reserved and cannot be specified in a request - InstanceCount *int64 `type:"integer"` - - // The Convertible Reserved Instance offering ID. - // - // OfferingId is a required field - OfferingId *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s TargetConfigurationRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetConfigurationRequest) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *TargetConfigurationRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TargetConfigurationRequest"} - if s.OfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("OfferingId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *TargetConfigurationRequest) SetInstanceCount(v int64) *TargetConfigurationRequest { - s.InstanceCount = &v - return s -} - -// SetOfferingId sets the OfferingId field's value. -func (s *TargetConfigurationRequest) SetOfferingId(v string) *TargetConfigurationRequest { - s.OfferingId = &v - return s -} - -// Describes a load balancer target group. -type TargetGroup struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the target group. - Arn *string `locationName:"arn" type:"string"` -} - -// String returns the string representation -func (s TargetGroup) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetGroup) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *TargetGroup) SetArn(v string) *TargetGroup { - s.Arn = &v - return s -} - -// Describes the target groups to attach to a Spot Fleet. Spot Fleet registers -// the running Spot Instances with these target groups. -type TargetGroupsConfig struct { - _ struct{} `type:"structure"` - - // One or more target groups. - TargetGroups []*TargetGroup `locationName:"targetGroups" locationNameList:"item" min:"1" type:"list"` -} - -// String returns the string representation -func (s TargetGroupsConfig) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetGroupsConfig) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *TargetGroupsConfig) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TargetGroupsConfig"} - if s.TargetGroups != nil && len(s.TargetGroups) < 1 { - invalidParams.Add(request.NewErrParamMinLen("TargetGroups", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetTargetGroups sets the TargetGroups field's value. -func (s *TargetGroupsConfig) SetTargetGroups(v []*TargetGroup) *TargetGroupsConfig { - s.TargetGroups = v - return s -} - -// Describes a target network associated with a Client VPN endpoint. -type TargetNetwork struct { - _ struct{} `type:"structure"` - - // The ID of the association. - AssociationId *string `locationName:"associationId" type:"string"` - - // The ID of the Client VPN endpoint with which the target network is associated. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // The IDs of the security groups applied to the target network association. - SecurityGroups []*string `locationName:"securityGroups" locationNameList:"item" type:"list"` - - // The current state of the target network association. - Status *AssociationStatus `locationName:"status" type:"structure"` - - // The ID of the subnet specified as the target network. - TargetNetworkId *string `locationName:"targetNetworkId" type:"string"` - - // The ID of the VPC in which the target network (subnet) is located. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s TargetNetwork) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetNetwork) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *TargetNetwork) SetAssociationId(v string) *TargetNetwork { - s.AssociationId = &v - return s -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *TargetNetwork) SetClientVpnEndpointId(v string) *TargetNetwork { - s.ClientVpnEndpointId = &v - return s -} - -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *TargetNetwork) SetSecurityGroups(v []*string) *TargetNetwork { - s.SecurityGroups = v - return s -} - -// SetStatus sets the Status field's value. -func (s *TargetNetwork) SetStatus(v *AssociationStatus) *TargetNetwork { - s.Status = v - return s -} - -// SetTargetNetworkId sets the TargetNetworkId field's value. -func (s *TargetNetwork) SetTargetNetworkId(v string) *TargetNetwork { - s.TargetNetworkId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *TargetNetwork) SetVpcId(v string) *TargetNetwork { - s.VpcId = &v - return s -} - -// The total value of the new Convertible Reserved Instances. -type TargetReservationValue struct { - _ struct{} `type:"structure"` - - // The total value of the Convertible Reserved Instances that make up the exchange. - // This is the sum of the list value, remaining upfront price, and additional - // upfront cost of the exchange. - ReservationValue *ReservationValue `locationName:"reservationValue" type:"structure"` - - // The configuration of the Convertible Reserved Instances that make up the - // exchange. - TargetConfiguration *TargetConfiguration `locationName:"targetConfiguration" type:"structure"` -} - -// String returns the string representation -func (s TargetReservationValue) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TargetReservationValue) GoString() string { - return s.String() -} - -// SetReservationValue sets the ReservationValue field's value. -func (s *TargetReservationValue) SetReservationValue(v *ReservationValue) *TargetReservationValue { - s.ReservationValue = v - return s -} - -// SetTargetConfiguration sets the TargetConfiguration field's value. -func (s *TargetReservationValue) SetTargetConfiguration(v *TargetConfiguration) *TargetReservationValue { - s.TargetConfiguration = v - return s -} - -type TerminateClientVpnConnectionsInput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint to which the client is connected. - // - // ClientVpnEndpointId is a required field - ClientVpnEndpointId *string `type:"string" required:"true"` - - // The ID of the client connection to be terminated. - ConnectionId *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The name of the user who initiated the connection. Use this option to terminate - // all active connections for the specified user. This option can only be used - // if the user has established up to five connections. - Username *string `type:"string"` -} - -// String returns the string representation -func (s TerminateClientVpnConnectionsInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TerminateClientVpnConnectionsInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *TerminateClientVpnConnectionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TerminateClientVpnConnectionsInput"} - if s.ClientVpnEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *TerminateClientVpnConnectionsInput) SetClientVpnEndpointId(v string) *TerminateClientVpnConnectionsInput { - s.ClientVpnEndpointId = &v - return s -} - -// SetConnectionId sets the ConnectionId field's value. -func (s *TerminateClientVpnConnectionsInput) SetConnectionId(v string) *TerminateClientVpnConnectionsInput { - s.ConnectionId = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *TerminateClientVpnConnectionsInput) SetDryRun(v bool) *TerminateClientVpnConnectionsInput { - s.DryRun = &v - return s -} - -// SetUsername sets the Username field's value. -func (s *TerminateClientVpnConnectionsInput) SetUsername(v string) *TerminateClientVpnConnectionsInput { - s.Username = &v - return s -} - -type TerminateClientVpnConnectionsOutput struct { - _ struct{} `type:"structure"` - - // The ID of the Client VPN endpoint. - ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - - // The current state of the client connections. - ConnectionStatuses []*TerminateConnectionStatus `locationName:"connectionStatuses" locationNameList:"item" type:"list"` - - // The user who established the terminated client connections. - Username *string `locationName:"username" type:"string"` -} - -// String returns the string representation -func (s TerminateClientVpnConnectionsOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TerminateClientVpnConnectionsOutput) GoString() string { - return s.String() -} - -// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. -func (s *TerminateClientVpnConnectionsOutput) SetClientVpnEndpointId(v string) *TerminateClientVpnConnectionsOutput { - s.ClientVpnEndpointId = &v - return s -} - -// SetConnectionStatuses sets the ConnectionStatuses field's value. -func (s *TerminateClientVpnConnectionsOutput) SetConnectionStatuses(v []*TerminateConnectionStatus) *TerminateClientVpnConnectionsOutput { - s.ConnectionStatuses = v - return s -} - -// SetUsername sets the Username field's value. -func (s *TerminateClientVpnConnectionsOutput) SetUsername(v string) *TerminateClientVpnConnectionsOutput { - s.Username = &v - return s -} - -// Information about a terminated Client VPN endpoint client connection. -type TerminateConnectionStatus struct { - _ struct{} `type:"structure"` - - // The ID of the client connection. - ConnectionId *string `locationName:"connectionId" type:"string"` - - // A message about the status of the client connection, if applicable. - CurrentStatus *ClientVpnConnectionStatus `locationName:"currentStatus" type:"structure"` - - // The state of the client connection. - PreviousStatus *ClientVpnConnectionStatus `locationName:"previousStatus" type:"structure"` -} - -// String returns the string representation -func (s TerminateConnectionStatus) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TerminateConnectionStatus) GoString() string { - return s.String() -} - -// SetConnectionId sets the ConnectionId field's value. -func (s *TerminateConnectionStatus) SetConnectionId(v string) *TerminateConnectionStatus { - s.ConnectionId = &v - return s -} - -// SetCurrentStatus sets the CurrentStatus field's value. -func (s *TerminateConnectionStatus) SetCurrentStatus(v *ClientVpnConnectionStatus) *TerminateConnectionStatus { - s.CurrentStatus = v - return s -} - -// SetPreviousStatus sets the PreviousStatus field's value. -func (s *TerminateConnectionStatus) SetPreviousStatus(v *ClientVpnConnectionStatus) *TerminateConnectionStatus { - s.PreviousStatus = v - return s -} - -type TerminateInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the instances. - // - // Constraints: Up to 1000 instance IDs. We recommend breaking up this request - // into smaller batches. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` -} - -// String returns the string representation -func (s TerminateInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TerminateInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *TerminateInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TerminateInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *TerminateInstancesInput) SetDryRun(v bool) *TerminateInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *TerminateInstancesInput) SetInstanceIds(v []*string) *TerminateInstancesInput { - s.InstanceIds = v - return s -} - -type TerminateInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about the terminated instances. - TerminatingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s TerminateInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TerminateInstancesOutput) GoString() string { - return s.String() -} - -// SetTerminatingInstances sets the TerminatingInstances field's value. -func (s *TerminateInstancesOutput) SetTerminatingInstances(v []*InstanceStateChange) *TerminateInstancesOutput { - s.TerminatingInstances = v - return s -} - -// Describes the Traffic Mirror filter. -type TrafficMirrorFilter struct { - _ struct{} `type:"structure"` - - // The description of the Traffic Mirror filter. - Description *string `locationName:"description" type:"string"` - - // Information about the egress rules that are associated with the Traffic Mirror - // filter. - EgressFilterRules []*TrafficMirrorFilterRule `locationName:"egressFilterRuleSet" locationNameList:"item" type:"list"` - - // Information about the ingress rules that are associated with the Traffic - // Mirror filter. - IngressFilterRules []*TrafficMirrorFilterRule `locationName:"ingressFilterRuleSet" locationNameList:"item" type:"list"` - - // The network service traffic that is associated with the Traffic Mirror filter. - NetworkServices []*string `locationName:"networkServiceSet" locationNameList:"item" type:"list"` - - // The tags assigned to the Traffic Mirror filter. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the Traffic Mirror filter. - TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` -} - -// String returns the string representation -func (s TrafficMirrorFilter) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TrafficMirrorFilter) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *TrafficMirrorFilter) SetDescription(v string) *TrafficMirrorFilter { - s.Description = &v - return s -} - -// SetEgressFilterRules sets the EgressFilterRules field's value. -func (s *TrafficMirrorFilter) SetEgressFilterRules(v []*TrafficMirrorFilterRule) *TrafficMirrorFilter { - s.EgressFilterRules = v - return s -} - -// SetIngressFilterRules sets the IngressFilterRules field's value. -func (s *TrafficMirrorFilter) SetIngressFilterRules(v []*TrafficMirrorFilterRule) *TrafficMirrorFilter { - s.IngressFilterRules = v - return s -} - -// SetNetworkServices sets the NetworkServices field's value. -func (s *TrafficMirrorFilter) SetNetworkServices(v []*string) *TrafficMirrorFilter { - s.NetworkServices = v - return s -} - -// SetTags sets the Tags field's value. -func (s *TrafficMirrorFilter) SetTags(v []*Tag) *TrafficMirrorFilter { - s.Tags = v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *TrafficMirrorFilter) SetTrafficMirrorFilterId(v string) *TrafficMirrorFilter { - s.TrafficMirrorFilterId = &v - return s -} - -// Describes the Traffic Mirror rule. -type TrafficMirrorFilterRule struct { - _ struct{} `type:"structure"` - - // The description of the Traffic Mirror rule. - Description *string `locationName:"description" type:"string"` - - // The destination CIDR block assigned to the Traffic Mirror rule. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The destination port range assigned to the Traffic Mirror rule. - DestinationPortRange *TrafficMirrorPortRange `locationName:"destinationPortRange" type:"structure"` - - // The protocol assigned to the Traffic Mirror rule. - Protocol *int64 `locationName:"protocol" type:"integer"` - - // The action assigned to the Traffic Mirror rule. - RuleAction *string `locationName:"ruleAction" type:"string" enum:"TrafficMirrorRuleAction"` - - // The rule number of the Traffic Mirror rule. - RuleNumber *int64 `locationName:"ruleNumber" type:"integer"` - - // The source CIDR block assigned to the Traffic Mirror rule. - SourceCidrBlock *string `locationName:"sourceCidrBlock" type:"string"` - - // The source port range assigned to the Traffic Mirror rule. - SourcePortRange *TrafficMirrorPortRange `locationName:"sourcePortRange" type:"structure"` - - // The traffic direction assigned to the Traffic Mirror rule. - TrafficDirection *string `locationName:"trafficDirection" type:"string" enum:"TrafficDirection"` - - // The ID of the Traffic Mirror filter that the rule is associated with. - TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` - - // The ID of the Traffic Mirror rule. - TrafficMirrorFilterRuleId *string `locationName:"trafficMirrorFilterRuleId" type:"string"` -} - -// String returns the string representation -func (s TrafficMirrorFilterRule) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TrafficMirrorFilterRule) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *TrafficMirrorFilterRule) SetDescription(v string) *TrafficMirrorFilterRule { - s.Description = &v - return s -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *TrafficMirrorFilterRule) SetDestinationCidrBlock(v string) *TrafficMirrorFilterRule { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationPortRange sets the DestinationPortRange field's value. -func (s *TrafficMirrorFilterRule) SetDestinationPortRange(v *TrafficMirrorPortRange) *TrafficMirrorFilterRule { - s.DestinationPortRange = v - return s -} - -// SetProtocol sets the Protocol field's value. -func (s *TrafficMirrorFilterRule) SetProtocol(v int64) *TrafficMirrorFilterRule { - s.Protocol = &v - return s -} - -// SetRuleAction sets the RuleAction field's value. -func (s *TrafficMirrorFilterRule) SetRuleAction(v string) *TrafficMirrorFilterRule { - s.RuleAction = &v - return s -} - -// SetRuleNumber sets the RuleNumber field's value. -func (s *TrafficMirrorFilterRule) SetRuleNumber(v int64) *TrafficMirrorFilterRule { - s.RuleNumber = &v - return s -} - -// SetSourceCidrBlock sets the SourceCidrBlock field's value. -func (s *TrafficMirrorFilterRule) SetSourceCidrBlock(v string) *TrafficMirrorFilterRule { - s.SourceCidrBlock = &v - return s -} - -// SetSourcePortRange sets the SourcePortRange field's value. -func (s *TrafficMirrorFilterRule) SetSourcePortRange(v *TrafficMirrorPortRange) *TrafficMirrorFilterRule { - s.SourcePortRange = v - return s -} - -// SetTrafficDirection sets the TrafficDirection field's value. -func (s *TrafficMirrorFilterRule) SetTrafficDirection(v string) *TrafficMirrorFilterRule { - s.TrafficDirection = &v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *TrafficMirrorFilterRule) SetTrafficMirrorFilterId(v string) *TrafficMirrorFilterRule { - s.TrafficMirrorFilterId = &v - return s -} - -// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. -func (s *TrafficMirrorFilterRule) SetTrafficMirrorFilterRuleId(v string) *TrafficMirrorFilterRule { - s.TrafficMirrorFilterRuleId = &v - return s -} - -// Describes the Traffic Mirror port range. -type TrafficMirrorPortRange struct { - _ struct{} `type:"structure"` - - // The start of the Traffic Mirror port range. This applies to the TCP and UDP - // protocols. - FromPort *int64 `locationName:"fromPort" type:"integer"` - - // The end of the Traffic Mirror port range. This applies to the TCP and UDP - // protocols. - ToPort *int64 `locationName:"toPort" type:"integer"` -} - -// String returns the string representation -func (s TrafficMirrorPortRange) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TrafficMirrorPortRange) GoString() string { - return s.String() -} - -// SetFromPort sets the FromPort field's value. -func (s *TrafficMirrorPortRange) SetFromPort(v int64) *TrafficMirrorPortRange { - s.FromPort = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *TrafficMirrorPortRange) SetToPort(v int64) *TrafficMirrorPortRange { - s.ToPort = &v - return s -} - -// Information about the Traffic Mirror filter rule port range. -type TrafficMirrorPortRangeRequest struct { - _ struct{} `type:"structure"` - - // The first port in the Traffic Mirror port range. This applies to the TCP - // and UDP protocols. - FromPort *int64 `type:"integer"` - - // The last port in the Traffic Mirror port range. This applies to the TCP and - // UDP protocols. - ToPort *int64 `type:"integer"` -} - -// String returns the string representation -func (s TrafficMirrorPortRangeRequest) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TrafficMirrorPortRangeRequest) GoString() string { - return s.String() -} - -// SetFromPort sets the FromPort field's value. -func (s *TrafficMirrorPortRangeRequest) SetFromPort(v int64) *TrafficMirrorPortRangeRequest { - s.FromPort = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *TrafficMirrorPortRangeRequest) SetToPort(v int64) *TrafficMirrorPortRangeRequest { - s.ToPort = &v - return s -} - -// Describes a Traffic Mirror session. -type TrafficMirrorSession struct { - _ struct{} `type:"structure"` - - // The description of the Traffic Mirror session. - Description *string `locationName:"description" type:"string"` - - // The ID of the Traffic Mirror session's network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The ID of the account that owns the Traffic Mirror session. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The number of bytes in each packet to mirror. These are the bytes after the - // VXLAN header. To mirror a subset, set this to the length (in bytes) to mirror. - // For example, if you set this value to 100, then the first 100 bytes that - // meet the filter criteria are copied to the target. Do not specify this parameter - // when you want to mirror the entire packet - PacketLength *int64 `locationName:"packetLength" type:"integer"` - - // The session number determines the order in which sessions are evaluated when - // an interface is used by multiple sessions. The first session with a matching - // filter is the one that mirrors the packets. - // - // Valid values are 1-32766. - SessionNumber *int64 `locationName:"sessionNumber" type:"integer"` - - // The tags assigned to the Traffic Mirror session. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the Traffic Mirror filter. - TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` - - // The ID for the Traffic Mirror session. - TrafficMirrorSessionId *string `locationName:"trafficMirrorSessionId" type:"string"` - - // The ID of the Traffic Mirror target. - TrafficMirrorTargetId *string `locationName:"trafficMirrorTargetId" type:"string"` - - // The virtual network ID associated with the Traffic Mirror session. - VirtualNetworkId *int64 `locationName:"virtualNetworkId" type:"integer"` -} - -// String returns the string representation -func (s TrafficMirrorSession) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TrafficMirrorSession) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *TrafficMirrorSession) SetDescription(v string) *TrafficMirrorSession { - s.Description = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *TrafficMirrorSession) SetNetworkInterfaceId(v string) *TrafficMirrorSession { - s.NetworkInterfaceId = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *TrafficMirrorSession) SetOwnerId(v string) *TrafficMirrorSession { - s.OwnerId = &v - return s -} - -// SetPacketLength sets the PacketLength field's value. -func (s *TrafficMirrorSession) SetPacketLength(v int64) *TrafficMirrorSession { - s.PacketLength = &v - return s -} - -// SetSessionNumber sets the SessionNumber field's value. -func (s *TrafficMirrorSession) SetSessionNumber(v int64) *TrafficMirrorSession { - s.SessionNumber = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TrafficMirrorSession) SetTags(v []*Tag) *TrafficMirrorSession { - s.Tags = v - return s -} - -// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. -func (s *TrafficMirrorSession) SetTrafficMirrorFilterId(v string) *TrafficMirrorSession { - s.TrafficMirrorFilterId = &v - return s -} - -// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. -func (s *TrafficMirrorSession) SetTrafficMirrorSessionId(v string) *TrafficMirrorSession { - s.TrafficMirrorSessionId = &v - return s -} - -// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. -func (s *TrafficMirrorSession) SetTrafficMirrorTargetId(v string) *TrafficMirrorSession { - s.TrafficMirrorTargetId = &v - return s -} - -// SetVirtualNetworkId sets the VirtualNetworkId field's value. -func (s *TrafficMirrorSession) SetVirtualNetworkId(v int64) *TrafficMirrorSession { - s.VirtualNetworkId = &v - return s -} - -// Describes a Traffic Mirror target. -type TrafficMirrorTarget struct { - _ struct{} `type:"structure"` - - // Information about the Traffic Mirror target. - Description *string `locationName:"description" type:"string"` - - // The network interface ID that is attached to the target. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The Amazon Resource Name (ARN) of the Network Load Balancer. - NetworkLoadBalancerArn *string `locationName:"networkLoadBalancerArn" type:"string"` - - // The ID of the account that owns the Traffic Mirror target. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The tags assigned to the Traffic Mirror target. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the Traffic Mirror target. - TrafficMirrorTargetId *string `locationName:"trafficMirrorTargetId" type:"string"` - - // The type of Traffic Mirror target. - Type *string `locationName:"type" type:"string" enum:"TrafficMirrorTargetType"` -} - -// String returns the string representation -func (s TrafficMirrorTarget) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TrafficMirrorTarget) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *TrafficMirrorTarget) SetDescription(v string) *TrafficMirrorTarget { - s.Description = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *TrafficMirrorTarget) SetNetworkInterfaceId(v string) *TrafficMirrorTarget { - s.NetworkInterfaceId = &v - return s -} - -// SetNetworkLoadBalancerArn sets the NetworkLoadBalancerArn field's value. -func (s *TrafficMirrorTarget) SetNetworkLoadBalancerArn(v string) *TrafficMirrorTarget { - s.NetworkLoadBalancerArn = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *TrafficMirrorTarget) SetOwnerId(v string) *TrafficMirrorTarget { - s.OwnerId = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TrafficMirrorTarget) SetTags(v []*Tag) *TrafficMirrorTarget { - s.Tags = v - return s -} - -// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. -func (s *TrafficMirrorTarget) SetTrafficMirrorTargetId(v string) *TrafficMirrorTarget { - s.TrafficMirrorTargetId = &v - return s -} - -// SetType sets the Type field's value. -func (s *TrafficMirrorTarget) SetType(v string) *TrafficMirrorTarget { - s.Type = &v - return s -} - -// Describes a transit gateway. -type TransitGateway struct { - _ struct{} `type:"structure"` - - // The creation time. - CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - - // The description of the transit gateway. - Description *string `locationName:"description" type:"string"` - - // The transit gateway options. - Options *TransitGatewayOptions `locationName:"options" type:"structure"` - - // The ID of the AWS account ID that owns the transit gateway. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The state of the transit gateway. - State *string `locationName:"state" type:"string" enum:"TransitGatewayState"` - - // The tags for the transit gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The Amazon Resource Name (ARN) of the transit gateway. - TransitGatewayArn *string `locationName:"transitGatewayArn" type:"string"` - - // The ID of the transit gateway. - TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` -} - -// String returns the string representation -func (s TransitGateway) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGateway) GoString() string { - return s.String() -} - -// SetCreationTime sets the CreationTime field's value. -func (s *TransitGateway) SetCreationTime(v time.Time) *TransitGateway { - s.CreationTime = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *TransitGateway) SetDescription(v string) *TransitGateway { - s.Description = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *TransitGateway) SetOptions(v *TransitGatewayOptions) *TransitGateway { - s.Options = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *TransitGateway) SetOwnerId(v string) *TransitGateway { - s.OwnerId = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGateway) SetState(v string) *TransitGateway { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TransitGateway) SetTags(v []*Tag) *TransitGateway { - s.Tags = v - return s -} - -// SetTransitGatewayArn sets the TransitGatewayArn field's value. -func (s *TransitGateway) SetTransitGatewayArn(v string) *TransitGateway { - s.TransitGatewayArn = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *TransitGateway) SetTransitGatewayId(v string) *TransitGateway { - s.TransitGatewayId = &v - return s -} - -// Describes an association between a resource attachment and a transit gateway -// route table. -type TransitGatewayAssociation struct { - _ struct{} `type:"structure"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - - // The state of the association. - State *string `locationName:"state" type:"string" enum:"TransitGatewayAssociationState"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` - - // The ID of the transit gateway route table. - TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayAssociation) GoString() string { - return s.String() -} - -// SetResourceId sets the ResourceId field's value. -func (s *TransitGatewayAssociation) SetResourceId(v string) *TransitGatewayAssociation { - s.ResourceId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TransitGatewayAssociation) SetResourceType(v string) *TransitGatewayAssociation { - s.ResourceType = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayAssociation) SetState(v string) *TransitGatewayAssociation { - s.State = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayAssociation) SetTransitGatewayAttachmentId(v string) *TransitGatewayAssociation { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *TransitGatewayAssociation) SetTransitGatewayRouteTableId(v string) *TransitGatewayAssociation { - s.TransitGatewayRouteTableId = &v - return s -} - -// Describes an attachment between a resource and a transit gateway. -type TransitGatewayAttachment struct { - _ struct{} `type:"structure"` - - // The association. - Association *TransitGatewayAttachmentAssociation `locationName:"association" type:"structure"` - - // The creation time. - CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The ID of the AWS account that owns the resource. - ResourceOwnerId *string `locationName:"resourceOwnerId" type:"string"` - - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - - // The attachment state. - State *string `locationName:"state" type:"string" enum:"TransitGatewayAttachmentState"` - - // The tags for the attachment. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` - - // The ID of the transit gateway. - TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` - - // The ID of the AWS account that owns the transit gateway. - TransitGatewayOwnerId *string `locationName:"transitGatewayOwnerId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayAttachment) GoString() string { - return s.String() -} - -// SetAssociation sets the Association field's value. -func (s *TransitGatewayAttachment) SetAssociation(v *TransitGatewayAttachmentAssociation) *TransitGatewayAttachment { - s.Association = v - return s -} - -// SetCreationTime sets the CreationTime field's value. -func (s *TransitGatewayAttachment) SetCreationTime(v time.Time) *TransitGatewayAttachment { - s.CreationTime = &v - return s -} - -// SetResourceId sets the ResourceId field's value. -func (s *TransitGatewayAttachment) SetResourceId(v string) *TransitGatewayAttachment { - s.ResourceId = &v - return s -} - -// SetResourceOwnerId sets the ResourceOwnerId field's value. -func (s *TransitGatewayAttachment) SetResourceOwnerId(v string) *TransitGatewayAttachment { - s.ResourceOwnerId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TransitGatewayAttachment) SetResourceType(v string) *TransitGatewayAttachment { - s.ResourceType = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayAttachment) SetState(v string) *TransitGatewayAttachment { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TransitGatewayAttachment) SetTags(v []*Tag) *TransitGatewayAttachment { - s.Tags = v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayAttachment) SetTransitGatewayAttachmentId(v string) *TransitGatewayAttachment { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *TransitGatewayAttachment) SetTransitGatewayId(v string) *TransitGatewayAttachment { - s.TransitGatewayId = &v - return s -} - -// SetTransitGatewayOwnerId sets the TransitGatewayOwnerId field's value. -func (s *TransitGatewayAttachment) SetTransitGatewayOwnerId(v string) *TransitGatewayAttachment { - s.TransitGatewayOwnerId = &v - return s -} - -// Describes an association. -type TransitGatewayAttachmentAssociation struct { - _ struct{} `type:"structure"` - - // The state of the association. - State *string `locationName:"state" type:"string" enum:"TransitGatewayAssociationState"` - - // The ID of the route table for the transit gateway. - TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayAttachmentAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayAttachmentAssociation) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *TransitGatewayAttachmentAssociation) SetState(v string) *TransitGatewayAttachmentAssociation { - s.State = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *TransitGatewayAttachmentAssociation) SetTransitGatewayRouteTableId(v string) *TransitGatewayAttachmentAssociation { - s.TransitGatewayRouteTableId = &v - return s -} - -// Describes a propagation route table. -type TransitGatewayAttachmentPropagation struct { - _ struct{} `type:"structure"` - - // The state of the propagation route table. - State *string `locationName:"state" type:"string" enum:"TransitGatewayPropagationState"` - - // The ID of the propagation route table. - TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayAttachmentPropagation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayAttachmentPropagation) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *TransitGatewayAttachmentPropagation) SetState(v string) *TransitGatewayAttachmentPropagation { - s.State = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *TransitGatewayAttachmentPropagation) SetTransitGatewayRouteTableId(v string) *TransitGatewayAttachmentPropagation { - s.TransitGatewayRouteTableId = &v - return s -} - -// Describes the options for a transit gateway. -type TransitGatewayOptions struct { - _ struct{} `type:"structure"` - - // A private Autonomous System Number (ASN) for the Amazon side of a BGP session. - // The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 - // for 32-bit ASNs. - AmazonSideAsn *int64 `locationName:"amazonSideAsn" type:"long"` - - // The ID of the default association route table. - AssociationDefaultRouteTableId *string `locationName:"associationDefaultRouteTableId" type:"string"` - - // Indicates whether attachment requests are automatically accepted. - AutoAcceptSharedAttachments *string `locationName:"autoAcceptSharedAttachments" type:"string" enum:"AutoAcceptSharedAttachmentsValue"` - - // Indicates whether resource attachments are automatically associated with - // the default association route table. - DefaultRouteTableAssociation *string `locationName:"defaultRouteTableAssociation" type:"string" enum:"DefaultRouteTableAssociationValue"` - - // Indicates whether resource attachments automatically propagate routes to - // the default propagation route table. - DefaultRouteTablePropagation *string `locationName:"defaultRouteTablePropagation" type:"string" enum:"DefaultRouteTablePropagationValue"` - - // Indicates whether DNS support is enabled. - DnsSupport *string `locationName:"dnsSupport" type:"string" enum:"DnsSupportValue"` - - // The ID of the default propagation route table. - PropagationDefaultRouteTableId *string `locationName:"propagationDefaultRouteTableId" type:"string"` - - // Indicates whether Equal Cost Multipath Protocol support is enabled. - VpnEcmpSupport *string `locationName:"vpnEcmpSupport" type:"string" enum:"VpnEcmpSupportValue"` -} - -// String returns the string representation -func (s TransitGatewayOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayOptions) GoString() string { - return s.String() -} - -// SetAmazonSideAsn sets the AmazonSideAsn field's value. -func (s *TransitGatewayOptions) SetAmazonSideAsn(v int64) *TransitGatewayOptions { - s.AmazonSideAsn = &v - return s -} - -// SetAssociationDefaultRouteTableId sets the AssociationDefaultRouteTableId field's value. -func (s *TransitGatewayOptions) SetAssociationDefaultRouteTableId(v string) *TransitGatewayOptions { - s.AssociationDefaultRouteTableId = &v - return s -} - -// SetAutoAcceptSharedAttachments sets the AutoAcceptSharedAttachments field's value. -func (s *TransitGatewayOptions) SetAutoAcceptSharedAttachments(v string) *TransitGatewayOptions { - s.AutoAcceptSharedAttachments = &v - return s -} - -// SetDefaultRouteTableAssociation sets the DefaultRouteTableAssociation field's value. -func (s *TransitGatewayOptions) SetDefaultRouteTableAssociation(v string) *TransitGatewayOptions { - s.DefaultRouteTableAssociation = &v - return s -} - -// SetDefaultRouteTablePropagation sets the DefaultRouteTablePropagation field's value. -func (s *TransitGatewayOptions) SetDefaultRouteTablePropagation(v string) *TransitGatewayOptions { - s.DefaultRouteTablePropagation = &v - return s -} - -// SetDnsSupport sets the DnsSupport field's value. -func (s *TransitGatewayOptions) SetDnsSupport(v string) *TransitGatewayOptions { - s.DnsSupport = &v - return s -} - -// SetPropagationDefaultRouteTableId sets the PropagationDefaultRouteTableId field's value. -func (s *TransitGatewayOptions) SetPropagationDefaultRouteTableId(v string) *TransitGatewayOptions { - s.PropagationDefaultRouteTableId = &v - return s -} - -// SetVpnEcmpSupport sets the VpnEcmpSupport field's value. -func (s *TransitGatewayOptions) SetVpnEcmpSupport(v string) *TransitGatewayOptions { - s.VpnEcmpSupport = &v - return s -} - -// Describes route propagation. -type TransitGatewayPropagation struct { - _ struct{} `type:"structure"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - - // The state. - State *string `locationName:"state" type:"string" enum:"TransitGatewayPropagationState"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` - - // The ID of the transit gateway route table. - TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayPropagation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayPropagation) GoString() string { - return s.String() -} - -// SetResourceId sets the ResourceId field's value. -func (s *TransitGatewayPropagation) SetResourceId(v string) *TransitGatewayPropagation { - s.ResourceId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TransitGatewayPropagation) SetResourceType(v string) *TransitGatewayPropagation { - s.ResourceType = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayPropagation) SetState(v string) *TransitGatewayPropagation { - s.State = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayPropagation) SetTransitGatewayAttachmentId(v string) *TransitGatewayPropagation { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *TransitGatewayPropagation) SetTransitGatewayRouteTableId(v string) *TransitGatewayPropagation { - s.TransitGatewayRouteTableId = &v - return s -} - -// Describes the options for a transit gateway. -type TransitGatewayRequestOptions struct { - _ struct{} `type:"structure"` - - // A private Autonomous System Number (ASN) for the Amazon side of a BGP session. - // The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 - // for 32-bit ASNs. - AmazonSideAsn *int64 `type:"long"` - - // Enable or disable automatic acceptance of attachment requests. The default - // is disable. - AutoAcceptSharedAttachments *string `type:"string" enum:"AutoAcceptSharedAttachmentsValue"` - - // Enable or disable automatic association with the default association route - // table. The default is enable. - DefaultRouteTableAssociation *string `type:"string" enum:"DefaultRouteTableAssociationValue"` - - // Enable or disable automatic propagation of routes to the default propagation - // route table. The default is enable. - DefaultRouteTablePropagation *string `type:"string" enum:"DefaultRouteTablePropagationValue"` - - // Enable or disable DNS support. - DnsSupport *string `type:"string" enum:"DnsSupportValue"` - - // Enable or disable Equal Cost Multipath Protocol support. - VpnEcmpSupport *string `type:"string" enum:"VpnEcmpSupportValue"` -} - -// String returns the string representation -func (s TransitGatewayRequestOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayRequestOptions) GoString() string { - return s.String() -} - -// SetAmazonSideAsn sets the AmazonSideAsn field's value. -func (s *TransitGatewayRequestOptions) SetAmazonSideAsn(v int64) *TransitGatewayRequestOptions { - s.AmazonSideAsn = &v - return s -} - -// SetAutoAcceptSharedAttachments sets the AutoAcceptSharedAttachments field's value. -func (s *TransitGatewayRequestOptions) SetAutoAcceptSharedAttachments(v string) *TransitGatewayRequestOptions { - s.AutoAcceptSharedAttachments = &v - return s -} - -// SetDefaultRouteTableAssociation sets the DefaultRouteTableAssociation field's value. -func (s *TransitGatewayRequestOptions) SetDefaultRouteTableAssociation(v string) *TransitGatewayRequestOptions { - s.DefaultRouteTableAssociation = &v - return s -} - -// SetDefaultRouteTablePropagation sets the DefaultRouteTablePropagation field's value. -func (s *TransitGatewayRequestOptions) SetDefaultRouteTablePropagation(v string) *TransitGatewayRequestOptions { - s.DefaultRouteTablePropagation = &v - return s -} - -// SetDnsSupport sets the DnsSupport field's value. -func (s *TransitGatewayRequestOptions) SetDnsSupport(v string) *TransitGatewayRequestOptions { - s.DnsSupport = &v - return s -} - -// SetVpnEcmpSupport sets the VpnEcmpSupport field's value. -func (s *TransitGatewayRequestOptions) SetVpnEcmpSupport(v string) *TransitGatewayRequestOptions { - s.VpnEcmpSupport = &v - return s -} - -// Describes a route for a transit gateway route table. -type TransitGatewayRoute struct { - _ struct{} `type:"structure"` - - // The CIDR block used for destination matches. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The state of the route. - State *string `locationName:"state" type:"string" enum:"TransitGatewayRouteState"` - - // The attachments. - TransitGatewayAttachments []*TransitGatewayRouteAttachment `locationName:"transitGatewayAttachments" locationNameList:"item" type:"list"` - - // The route type. - Type *string `locationName:"type" type:"string" enum:"TransitGatewayRouteType"` -} - -// String returns the string representation -func (s TransitGatewayRoute) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayRoute) GoString() string { - return s.String() -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *TransitGatewayRoute) SetDestinationCidrBlock(v string) *TransitGatewayRoute { - s.DestinationCidrBlock = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayRoute) SetState(v string) *TransitGatewayRoute { - s.State = &v - return s -} - -// SetTransitGatewayAttachments sets the TransitGatewayAttachments field's value. -func (s *TransitGatewayRoute) SetTransitGatewayAttachments(v []*TransitGatewayRouteAttachment) *TransitGatewayRoute { - s.TransitGatewayAttachments = v - return s -} - -// SetType sets the Type field's value. -func (s *TransitGatewayRoute) SetType(v string) *TransitGatewayRoute { - s.Type = &v - return s -} - -// Describes a route attachment. -type TransitGatewayRouteAttachment struct { - _ struct{} `type:"structure"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayRouteAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayRouteAttachment) GoString() string { - return s.String() -} - -// SetResourceId sets the ResourceId field's value. -func (s *TransitGatewayRouteAttachment) SetResourceId(v string) *TransitGatewayRouteAttachment { - s.ResourceId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TransitGatewayRouteAttachment) SetResourceType(v string) *TransitGatewayRouteAttachment { - s.ResourceType = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayRouteAttachment) SetTransitGatewayAttachmentId(v string) *TransitGatewayRouteAttachment { - s.TransitGatewayAttachmentId = &v - return s -} - -// Describes a transit gateway route table. -type TransitGatewayRouteTable struct { - _ struct{} `type:"structure"` - - // The creation time. - CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - - // Indicates whether this is the default association route table for the transit - // gateway. - DefaultAssociationRouteTable *bool `locationName:"defaultAssociationRouteTable" type:"boolean"` - - // Indicates whether this is the default propagation route table for the transit - // gateway. - DefaultPropagationRouteTable *bool `locationName:"defaultPropagationRouteTable" type:"boolean"` - - // The state of the transit gateway route table. - State *string `locationName:"state" type:"string" enum:"TransitGatewayRouteTableState"` - - // Any tags assigned to the route table. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the transit gateway. - TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` - - // The ID of the transit gateway route table. - TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayRouteTable) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayRouteTable) GoString() string { - return s.String() -} - -// SetCreationTime sets the CreationTime field's value. -func (s *TransitGatewayRouteTable) SetCreationTime(v time.Time) *TransitGatewayRouteTable { - s.CreationTime = &v - return s -} - -// SetDefaultAssociationRouteTable sets the DefaultAssociationRouteTable field's value. -func (s *TransitGatewayRouteTable) SetDefaultAssociationRouteTable(v bool) *TransitGatewayRouteTable { - s.DefaultAssociationRouteTable = &v - return s -} - -// SetDefaultPropagationRouteTable sets the DefaultPropagationRouteTable field's value. -func (s *TransitGatewayRouteTable) SetDefaultPropagationRouteTable(v bool) *TransitGatewayRouteTable { - s.DefaultPropagationRouteTable = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayRouteTable) SetState(v string) *TransitGatewayRouteTable { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *TransitGatewayRouteTable) SetTags(v []*Tag) *TransitGatewayRouteTable { - s.Tags = v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *TransitGatewayRouteTable) SetTransitGatewayId(v string) *TransitGatewayRouteTable { - s.TransitGatewayId = &v - return s -} - -// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. -func (s *TransitGatewayRouteTable) SetTransitGatewayRouteTableId(v string) *TransitGatewayRouteTable { - s.TransitGatewayRouteTableId = &v - return s -} - -// Describes an association between a route table and a resource attachment. -type TransitGatewayRouteTableAssociation struct { - _ struct{} `type:"structure"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - - // The state of the association. - State *string `locationName:"state" type:"string" enum:"TransitGatewayAssociationState"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayRouteTableAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayRouteTableAssociation) GoString() string { - return s.String() -} - -// SetResourceId sets the ResourceId field's value. -func (s *TransitGatewayRouteTableAssociation) SetResourceId(v string) *TransitGatewayRouteTableAssociation { - s.ResourceId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TransitGatewayRouteTableAssociation) SetResourceType(v string) *TransitGatewayRouteTableAssociation { - s.ResourceType = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayRouteTableAssociation) SetState(v string) *TransitGatewayRouteTableAssociation { - s.State = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayRouteTableAssociation) SetTransitGatewayAttachmentId(v string) *TransitGatewayRouteTableAssociation { - s.TransitGatewayAttachmentId = &v - return s -} - -// Describes a route table propagation. -type TransitGatewayRouteTablePropagation struct { - _ struct{} `type:"structure"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` - - // The type of resource. - ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - - // The state of the resource. - State *string `locationName:"state" type:"string" enum:"TransitGatewayPropagationState"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayRouteTablePropagation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayRouteTablePropagation) GoString() string { - return s.String() -} - -// SetResourceId sets the ResourceId field's value. -func (s *TransitGatewayRouteTablePropagation) SetResourceId(v string) *TransitGatewayRouteTablePropagation { - s.ResourceId = &v - return s -} - -// SetResourceType sets the ResourceType field's value. -func (s *TransitGatewayRouteTablePropagation) SetResourceType(v string) *TransitGatewayRouteTablePropagation { - s.ResourceType = &v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayRouteTablePropagation) SetState(v string) *TransitGatewayRouteTablePropagation { - s.State = &v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayRouteTablePropagation) SetTransitGatewayAttachmentId(v string) *TransitGatewayRouteTablePropagation { - s.TransitGatewayAttachmentId = &v - return s -} - -// Describes a VPC attachment. -type TransitGatewayVpcAttachment struct { - _ struct{} `type:"structure"` - - // The creation time. - CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - - // The VPC attachment options. - Options *TransitGatewayVpcAttachmentOptions `locationName:"options" type:"structure"` - - // The state of the VPC attachment. - State *string `locationName:"state" type:"string" enum:"TransitGatewayAttachmentState"` - - // The IDs of the subnets. - SubnetIds []*string `locationName:"subnetIds" locationNameList:"item" type:"list"` - - // The tags for the VPC attachment. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the attachment. - TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` - - // The ID of the transit gateway. - TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` - - // The ID of the AWS account that owns the VPC. - VpcOwnerId *string `locationName:"vpcOwnerId" type:"string"` -} - -// String returns the string representation -func (s TransitGatewayVpcAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayVpcAttachment) GoString() string { - return s.String() -} - -// SetCreationTime sets the CreationTime field's value. -func (s *TransitGatewayVpcAttachment) SetCreationTime(v time.Time) *TransitGatewayVpcAttachment { - s.CreationTime = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *TransitGatewayVpcAttachment) SetOptions(v *TransitGatewayVpcAttachmentOptions) *TransitGatewayVpcAttachment { - s.Options = v - return s -} - -// SetState sets the State field's value. -func (s *TransitGatewayVpcAttachment) SetState(v string) *TransitGatewayVpcAttachment { - s.State = &v - return s -} - -// SetSubnetIds sets the SubnetIds field's value. -func (s *TransitGatewayVpcAttachment) SetSubnetIds(v []*string) *TransitGatewayVpcAttachment { - s.SubnetIds = v - return s -} - -// SetTags sets the Tags field's value. -func (s *TransitGatewayVpcAttachment) SetTags(v []*Tag) *TransitGatewayVpcAttachment { - s.Tags = v - return s -} - -// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. -func (s *TransitGatewayVpcAttachment) SetTransitGatewayAttachmentId(v string) *TransitGatewayVpcAttachment { - s.TransitGatewayAttachmentId = &v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *TransitGatewayVpcAttachment) SetTransitGatewayId(v string) *TransitGatewayVpcAttachment { - s.TransitGatewayId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *TransitGatewayVpcAttachment) SetVpcId(v string) *TransitGatewayVpcAttachment { - s.VpcId = &v - return s -} - -// SetVpcOwnerId sets the VpcOwnerId field's value. -func (s *TransitGatewayVpcAttachment) SetVpcOwnerId(v string) *TransitGatewayVpcAttachment { - s.VpcOwnerId = &v - return s -} - -// Describes the VPC attachment options. -type TransitGatewayVpcAttachmentOptions struct { - _ struct{} `type:"structure"` - - // Indicates whether DNS support is enabled. - DnsSupport *string `locationName:"dnsSupport" type:"string" enum:"DnsSupportValue"` - - // Indicates whether IPv6 support is enabled. - Ipv6Support *string `locationName:"ipv6Support" type:"string" enum:"Ipv6SupportValue"` -} - -// String returns the string representation -func (s TransitGatewayVpcAttachmentOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TransitGatewayVpcAttachmentOptions) GoString() string { - return s.String() -} - -// SetDnsSupport sets the DnsSupport field's value. -func (s *TransitGatewayVpcAttachmentOptions) SetDnsSupport(v string) *TransitGatewayVpcAttachmentOptions { - s.DnsSupport = &v - return s -} - -// SetIpv6Support sets the Ipv6Support field's value. -func (s *TransitGatewayVpcAttachmentOptions) SetIpv6Support(v string) *TransitGatewayVpcAttachmentOptions { - s.Ipv6Support = &v - return s -} - -// The VPN tunnel options. -type TunnelOption struct { - _ struct{} `type:"structure"` - - // The number of seconds after which a DPD timeout occurs. - DpdTimeoutSeconds *int64 `locationName:"dpdTimeoutSeconds" type:"integer"` - - // The IKE versions that are permitted for the VPN tunnel. - IkeVersions []*IKEVersionsListValue `locationName:"ikeVersionSet" locationNameList:"item" type:"list"` - - // The external IP address of the VPN tunnel. - OutsideIpAddress *string `locationName:"outsideIpAddress" type:"string"` - - // The permitted Diffie-Hellman group numbers for the VPN tunnel for phase 1 - // IKE negotiations. - Phase1DHGroupNumbers []*Phase1DHGroupNumbersListValue `locationName:"phase1DHGroupNumberSet" locationNameList:"item" type:"list"` - - // The permitted encryption algorithms for the VPN tunnel for phase 1 IKE negotiations. - Phase1EncryptionAlgorithms []*Phase1EncryptionAlgorithmsListValue `locationName:"phase1EncryptionAlgorithmSet" locationNameList:"item" type:"list"` - - // The permitted integrity algorithms for the VPN tunnel for phase 1 IKE negotiations. - Phase1IntegrityAlgorithms []*Phase1IntegrityAlgorithmsListValue `locationName:"phase1IntegrityAlgorithmSet" locationNameList:"item" type:"list"` - - // The lifetime for phase 1 of the IKE negotiation, in seconds. - Phase1LifetimeSeconds *int64 `locationName:"phase1LifetimeSeconds" type:"integer"` - - // The permitted Diffie-Hellman group numbers for the VPN tunnel for phase 2 - // IKE negotiations. - Phase2DHGroupNumbers []*Phase2DHGroupNumbersListValue `locationName:"phase2DHGroupNumberSet" locationNameList:"item" type:"list"` - - // The permitted encryption algorithms for the VPN tunnel for phase 2 IKE negotiations. - Phase2EncryptionAlgorithms []*Phase2EncryptionAlgorithmsListValue `locationName:"phase2EncryptionAlgorithmSet" locationNameList:"item" type:"list"` - - // The permitted integrity algorithms for the VPN tunnel for phase 2 IKE negotiations. - Phase2IntegrityAlgorithms []*Phase2IntegrityAlgorithmsListValue `locationName:"phase2IntegrityAlgorithmSet" locationNameList:"item" type:"list"` - - // The lifetime for phase 2 of the IKE negotiation, in seconds. - Phase2LifetimeSeconds *int64 `locationName:"phase2LifetimeSeconds" type:"integer"` - - // The pre-shared key (PSK) to establish initial authentication between the - // virtual private gateway and the customer gateway. - PreSharedKey *string `locationName:"preSharedKey" type:"string"` - - // The percentage of the rekey window determined by RekeyMarginTimeSeconds during - // which the rekey time is randomly selected. - RekeyFuzzPercentage *int64 `locationName:"rekeyFuzzPercentage" type:"integer"` - - // The margin time, in seconds, before the phase 2 lifetime expires, during - // which the AWS side of the VPN connection performs an IKE rekey. - RekeyMarginTimeSeconds *int64 `locationName:"rekeyMarginTimeSeconds" type:"integer"` - - // The number of packets in an IKE replay window. - ReplayWindowSize *int64 `locationName:"replayWindowSize" type:"integer"` - - // The range of inside IP addresses for the tunnel. - TunnelInsideCidr *string `locationName:"tunnelInsideCidr" type:"string"` -} - -// String returns the string representation -func (s TunnelOption) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s TunnelOption) GoString() string { - return s.String() -} - -// SetDpdTimeoutSeconds sets the DpdTimeoutSeconds field's value. -func (s *TunnelOption) SetDpdTimeoutSeconds(v int64) *TunnelOption { - s.DpdTimeoutSeconds = &v - return s -} - -// SetIkeVersions sets the IkeVersions field's value. -func (s *TunnelOption) SetIkeVersions(v []*IKEVersionsListValue) *TunnelOption { - s.IkeVersions = v - return s -} - -// SetOutsideIpAddress sets the OutsideIpAddress field's value. -func (s *TunnelOption) SetOutsideIpAddress(v string) *TunnelOption { - s.OutsideIpAddress = &v - return s -} - -// SetPhase1DHGroupNumbers sets the Phase1DHGroupNumbers field's value. -func (s *TunnelOption) SetPhase1DHGroupNumbers(v []*Phase1DHGroupNumbersListValue) *TunnelOption { - s.Phase1DHGroupNumbers = v - return s -} - -// SetPhase1EncryptionAlgorithms sets the Phase1EncryptionAlgorithms field's value. -func (s *TunnelOption) SetPhase1EncryptionAlgorithms(v []*Phase1EncryptionAlgorithmsListValue) *TunnelOption { - s.Phase1EncryptionAlgorithms = v - return s -} - -// SetPhase1IntegrityAlgorithms sets the Phase1IntegrityAlgorithms field's value. -func (s *TunnelOption) SetPhase1IntegrityAlgorithms(v []*Phase1IntegrityAlgorithmsListValue) *TunnelOption { - s.Phase1IntegrityAlgorithms = v - return s -} - -// SetPhase1LifetimeSeconds sets the Phase1LifetimeSeconds field's value. -func (s *TunnelOption) SetPhase1LifetimeSeconds(v int64) *TunnelOption { - s.Phase1LifetimeSeconds = &v - return s -} - -// SetPhase2DHGroupNumbers sets the Phase2DHGroupNumbers field's value. -func (s *TunnelOption) SetPhase2DHGroupNumbers(v []*Phase2DHGroupNumbersListValue) *TunnelOption { - s.Phase2DHGroupNumbers = v - return s -} - -// SetPhase2EncryptionAlgorithms sets the Phase2EncryptionAlgorithms field's value. -func (s *TunnelOption) SetPhase2EncryptionAlgorithms(v []*Phase2EncryptionAlgorithmsListValue) *TunnelOption { - s.Phase2EncryptionAlgorithms = v - return s -} - -// SetPhase2IntegrityAlgorithms sets the Phase2IntegrityAlgorithms field's value. -func (s *TunnelOption) SetPhase2IntegrityAlgorithms(v []*Phase2IntegrityAlgorithmsListValue) *TunnelOption { - s.Phase2IntegrityAlgorithms = v - return s -} - -// SetPhase2LifetimeSeconds sets the Phase2LifetimeSeconds field's value. -func (s *TunnelOption) SetPhase2LifetimeSeconds(v int64) *TunnelOption { - s.Phase2LifetimeSeconds = &v - return s -} - -// SetPreSharedKey sets the PreSharedKey field's value. -func (s *TunnelOption) SetPreSharedKey(v string) *TunnelOption { - s.PreSharedKey = &v - return s -} - -// SetRekeyFuzzPercentage sets the RekeyFuzzPercentage field's value. -func (s *TunnelOption) SetRekeyFuzzPercentage(v int64) *TunnelOption { - s.RekeyFuzzPercentage = &v - return s -} - -// SetRekeyMarginTimeSeconds sets the RekeyMarginTimeSeconds field's value. -func (s *TunnelOption) SetRekeyMarginTimeSeconds(v int64) *TunnelOption { - s.RekeyMarginTimeSeconds = &v - return s -} - -// SetReplayWindowSize sets the ReplayWindowSize field's value. -func (s *TunnelOption) SetReplayWindowSize(v int64) *TunnelOption { - s.ReplayWindowSize = &v - return s -} - -// SetTunnelInsideCidr sets the TunnelInsideCidr field's value. -func (s *TunnelOption) SetTunnelInsideCidr(v string) *TunnelOption { - s.TunnelInsideCidr = &v - return s -} - -type UnassignIpv6AddressesInput struct { - _ struct{} `type:"structure"` - - // The IPv6 addresses to unassign from the network interface. - // - // Ipv6Addresses is a required field - Ipv6Addresses []*string `locationName:"ipv6Addresses" locationNameList:"item" type:"list" required:"true"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` -} - -// String returns the string representation -func (s UnassignIpv6AddressesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnassignIpv6AddressesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UnassignIpv6AddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UnassignIpv6AddressesInput"} - if s.Ipv6Addresses == nil { - invalidParams.Add(request.NewErrParamRequired("Ipv6Addresses")) - } - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *UnassignIpv6AddressesInput) SetIpv6Addresses(v []*string) *UnassignIpv6AddressesInput { - s.Ipv6Addresses = v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *UnassignIpv6AddressesInput) SetNetworkInterfaceId(v string) *UnassignIpv6AddressesInput { - s.NetworkInterfaceId = &v - return s -} - -type UnassignIpv6AddressesOutput struct { - _ struct{} `type:"structure"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - - // The IPv6 addresses that have been unassigned from the network interface. - UnassignedIpv6Addresses []*string `locationName:"unassignedIpv6Addresses" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s UnassignIpv6AddressesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnassignIpv6AddressesOutput) GoString() string { - return s.String() -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *UnassignIpv6AddressesOutput) SetNetworkInterfaceId(v string) *UnassignIpv6AddressesOutput { - s.NetworkInterfaceId = &v - return s -} - -// SetUnassignedIpv6Addresses sets the UnassignedIpv6Addresses field's value. -func (s *UnassignIpv6AddressesOutput) SetUnassignedIpv6Addresses(v []*string) *UnassignIpv6AddressesOutput { - s.UnassignedIpv6Addresses = v - return s -} - -// Contains the parameters for UnassignPrivateIpAddresses. -type UnassignPrivateIpAddressesInput struct { - _ struct{} `type:"structure"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` - - // The secondary private IP addresses to unassign from the network interface. - // You can specify this option multiple times to unassign more than one IP address. - // - // PrivateIpAddresses is a required field - PrivateIpAddresses []*string `locationName:"privateIpAddress" locationNameList:"PrivateIpAddress" type:"list" required:"true"` -} - -// String returns the string representation -func (s UnassignPrivateIpAddressesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnassignPrivateIpAddressesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UnassignPrivateIpAddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UnassignPrivateIpAddressesInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - if s.PrivateIpAddresses == nil { - invalidParams.Add(request.NewErrParamRequired("PrivateIpAddresses")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *UnassignPrivateIpAddressesInput) SetNetworkInterfaceId(v string) *UnassignPrivateIpAddressesInput { - s.NetworkInterfaceId = &v - return s -} - -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *UnassignPrivateIpAddressesInput) SetPrivateIpAddresses(v []*string) *UnassignPrivateIpAddressesInput { - s.PrivateIpAddresses = v - return s -} - -type UnassignPrivateIpAddressesOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s UnassignPrivateIpAddressesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnassignPrivateIpAddressesOutput) GoString() string { - return s.String() -} - -type UnmonitorInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of the instances. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` -} - -// String returns the string representation -func (s UnmonitorInstancesInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnmonitorInstancesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UnmonitorInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UnmonitorInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *UnmonitorInstancesInput) SetDryRun(v bool) *UnmonitorInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *UnmonitorInstancesInput) SetInstanceIds(v []*string) *UnmonitorInstancesInput { - s.InstanceIds = v - return s -} - -type UnmonitorInstancesOutput struct { - _ struct{} `type:"structure"` - - // The monitoring information. - InstanceMonitorings []*InstanceMonitoring `locationName:"instancesSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s UnmonitorInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnmonitorInstancesOutput) GoString() string { - return s.String() -} - -// SetInstanceMonitorings sets the InstanceMonitorings field's value. -func (s *UnmonitorInstancesOutput) SetInstanceMonitorings(v []*InstanceMonitoring) *UnmonitorInstancesOutput { - s.InstanceMonitorings = v - return s -} - -// Describes the T2 or T3 instance whose credit option for CPU usage was not -// modified. -type UnsuccessfulInstanceCreditSpecificationItem struct { - _ struct{} `type:"structure"` - - // The applicable error for the T2 or T3 instance whose credit option for CPU - // usage was not modified. - Error *UnsuccessfulInstanceCreditSpecificationItemError `locationName:"error" type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` -} - -// String returns the string representation -func (s UnsuccessfulInstanceCreditSpecificationItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnsuccessfulInstanceCreditSpecificationItem) GoString() string { - return s.String() -} - -// SetError sets the Error field's value. -func (s *UnsuccessfulInstanceCreditSpecificationItem) SetError(v *UnsuccessfulInstanceCreditSpecificationItemError) *UnsuccessfulInstanceCreditSpecificationItem { - s.Error = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *UnsuccessfulInstanceCreditSpecificationItem) SetInstanceId(v string) *UnsuccessfulInstanceCreditSpecificationItem { - s.InstanceId = &v - return s -} - -// Information about the error for the T2 or T3 instance whose credit option -// for CPU usage was not modified. -type UnsuccessfulInstanceCreditSpecificationItemError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string" enum:"UnsuccessfulInstanceCreditSpecificationErrorCode"` - - // The applicable error message. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s UnsuccessfulInstanceCreditSpecificationItemError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnsuccessfulInstanceCreditSpecificationItemError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *UnsuccessfulInstanceCreditSpecificationItemError) SetCode(v string) *UnsuccessfulInstanceCreditSpecificationItemError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *UnsuccessfulInstanceCreditSpecificationItemError) SetMessage(v string) *UnsuccessfulInstanceCreditSpecificationItemError { - s.Message = &v - return s -} - -// Information about items that were not successfully processed in a batch call. -type UnsuccessfulItem struct { - _ struct{} `type:"structure"` - - // Information about the error. - Error *UnsuccessfulItemError `locationName:"error" type:"structure"` - - // The ID of the resource. - ResourceId *string `locationName:"resourceId" type:"string"` -} - -// String returns the string representation -func (s UnsuccessfulItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnsuccessfulItem) GoString() string { - return s.String() -} - -// SetError sets the Error field's value. -func (s *UnsuccessfulItem) SetError(v *UnsuccessfulItemError) *UnsuccessfulItem { - s.Error = v - return s -} - -// SetResourceId sets the ResourceId field's value. -func (s *UnsuccessfulItem) SetResourceId(v string) *UnsuccessfulItem { - s.ResourceId = &v - return s -} - -// Information about the error that occurred. For more information about errors, -// see Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html). -type UnsuccessfulItemError struct { - _ struct{} `type:"structure"` - - // The error code. - Code *string `locationName:"code" type:"string"` - - // The error message accompanying the error code. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s UnsuccessfulItemError) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UnsuccessfulItemError) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *UnsuccessfulItemError) SetCode(v string) *UnsuccessfulItemError { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *UnsuccessfulItemError) SetMessage(v string) *UnsuccessfulItemError { - s.Message = &v - return s -} - -type UpdateSecurityGroupRuleDescriptionsEgressInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the security group. You must specify either the security group - // ID or the security group name in the request. For security groups in a nondefault - // VPC, you must specify the security group ID. - GroupId *string `type:"string"` - - // [Default VPC] The name of the security group. You must specify either the - // security group ID or the security group name in the request. - GroupName *string `type:"string"` - - // The IP permissions for the security group rule. - // - // IpPermissions is a required field - IpPermissions []*IpPermission `locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsEgressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsEgressInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UpdateSecurityGroupRuleDescriptionsEgressInput"} - if s.IpPermissions == nil { - invalidParams.Add(request.NewErrParamRequired("IpPermissions")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetDryRun(v bool) *UpdateSecurityGroupRuleDescriptionsEgressInput { - s.DryRun = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetGroupId(v string) *UpdateSecurityGroupRuleDescriptionsEgressInput { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetGroupName(v string) *UpdateSecurityGroupRuleDescriptionsEgressInput { - s.GroupName = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetIpPermissions(v []*IpPermission) *UpdateSecurityGroupRuleDescriptionsEgressInput { - s.IpPermissions = v - return s -} - -type UpdateSecurityGroupRuleDescriptionsEgressOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsEgressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsEgressOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *UpdateSecurityGroupRuleDescriptionsEgressOutput) SetReturn(v bool) *UpdateSecurityGroupRuleDescriptionsEgressOutput { - s.Return = &v - return s -} - -type UpdateSecurityGroupRuleDescriptionsIngressInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The ID of the security group. You must specify either the security group - // ID or the security group name in the request. For security groups in a nondefault - // VPC, you must specify the security group ID. - GroupId *string `type:"string"` - - // [EC2-Classic, default VPC] The name of the security group. You must specify - // either the security group ID or the security group name in the request. - GroupName *string `type:"string"` - - // The IP permissions for the security group rule. - // - // IpPermissions is a required field - IpPermissions []*IpPermission `locationNameList:"item" type:"list" required:"true"` -} - -// String returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsIngressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsIngressInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "UpdateSecurityGroupRuleDescriptionsIngressInput"} - if s.IpPermissions == nil { - invalidParams.Add(request.NewErrParamRequired("IpPermissions")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetDryRun(v bool) *UpdateSecurityGroupRuleDescriptionsIngressInput { - s.DryRun = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetGroupId(v string) *UpdateSecurityGroupRuleDescriptionsIngressInput { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetGroupName(v string) *UpdateSecurityGroupRuleDescriptionsIngressInput { - s.GroupName = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetIpPermissions(v []*IpPermission) *UpdateSecurityGroupRuleDescriptionsIngressInput { - s.IpPermissions = v - return s -} - -type UpdateSecurityGroupRuleDescriptionsIngressOutput struct { - _ struct{} `type:"structure"` - - // Returns true if the request succeeds; otherwise, returns an error. - Return *bool `locationName:"return" type:"boolean"` -} - -// String returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsIngressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UpdateSecurityGroupRuleDescriptionsIngressOutput) GoString() string { - return s.String() -} - -// SetReturn sets the Return field's value. -func (s *UpdateSecurityGroupRuleDescriptionsIngressOutput) SetReturn(v bool) *UpdateSecurityGroupRuleDescriptionsIngressOutput { - s.Return = &v - return s -} - -// Describes the S3 bucket for the disk image. -type UserBucket struct { - _ struct{} `type:"structure"` - - // The name of the S3 bucket where the disk image is located. - S3Bucket *string `type:"string"` - - // The file name of the disk image. - S3Key *string `type:"string"` -} - -// String returns the string representation -func (s UserBucket) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UserBucket) GoString() string { - return s.String() -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *UserBucket) SetS3Bucket(v string) *UserBucket { - s.S3Bucket = &v - return s -} - -// SetS3Key sets the S3Key field's value. -func (s *UserBucket) SetS3Key(v string) *UserBucket { - s.S3Key = &v - return s -} - -// Describes the S3 bucket for the disk image. -type UserBucketDetails struct { - _ struct{} `type:"structure"` - - // The S3 bucket from which the disk image was created. - S3Bucket *string `locationName:"s3Bucket" type:"string"` - - // The file name of the disk image. - S3Key *string `locationName:"s3Key" type:"string"` -} - -// String returns the string representation -func (s UserBucketDetails) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UserBucketDetails) GoString() string { - return s.String() -} - -// SetS3Bucket sets the S3Bucket field's value. -func (s *UserBucketDetails) SetS3Bucket(v string) *UserBucketDetails { - s.S3Bucket = &v - return s -} - -// SetS3Key sets the S3Key field's value. -func (s *UserBucketDetails) SetS3Key(v string) *UserBucketDetails { - s.S3Key = &v - return s -} - -// Describes the user data for an instance. -type UserData struct { - _ struct{} `type:"structure" sensitive:"true"` - - // The user data. If you are using an AWS SDK or command line tool, Base64-encoding - // is performed for you, and you can load the text from a file. Otherwise, you - // must provide Base64-encoded text. - Data *string `locationName:"data" type:"string"` -} - -// String returns the string representation -func (s UserData) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UserData) GoString() string { - return s.String() -} - -// SetData sets the Data field's value. -func (s *UserData) SetData(v string) *UserData { - s.Data = &v - return s -} - -// Describes a security group and AWS account ID pair. -type UserIdGroupPair struct { - _ struct{} `type:"structure"` - - // A description for the security group rule that references this user ID group - // pair. - // - // Constraints: Up to 255 characters in length. Allowed characters are a-z, - // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* - Description *string `locationName:"description" type:"string"` - - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The name of the security group. In a request, use this parameter for a security - // group in EC2-Classic or a default VPC only. For a security group in a nondefault - // VPC, use the security group ID. - // - // For a referenced security group in another VPC, this value is not returned - // if the referenced security group is deleted. - GroupName *string `locationName:"groupName" type:"string"` - - // The status of a VPC peering connection, if applicable. - PeeringStatus *string `locationName:"peeringStatus" type:"string"` - - // The ID of an AWS account. - // - // For a referenced security group in another VPC, the account ID of the referenced - // security group is returned in the response. If the referenced security group - // is deleted, this value is not returned. - // - // [EC2-Classic] Required when adding or removing rules that reference a security - // group in another AWS account. - UserId *string `locationName:"userId" type:"string"` - - // The ID of the VPC for the referenced security group, if applicable. - VpcId *string `locationName:"vpcId" type:"string"` - - // The ID of the VPC peering connection, if applicable. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s UserIdGroupPair) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s UserIdGroupPair) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *UserIdGroupPair) SetDescription(v string) *UserIdGroupPair { - s.Description = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *UserIdGroupPair) SetGroupId(v string) *UserIdGroupPair { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *UserIdGroupPair) SetGroupName(v string) *UserIdGroupPair { - s.GroupName = &v - return s -} - -// SetPeeringStatus sets the PeeringStatus field's value. -func (s *UserIdGroupPair) SetPeeringStatus(v string) *UserIdGroupPair { - s.PeeringStatus = &v - return s -} - -// SetUserId sets the UserId field's value. -func (s *UserIdGroupPair) SetUserId(v string) *UserIdGroupPair { - s.UserId = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *UserIdGroupPair) SetVpcId(v string) *UserIdGroupPair { - s.VpcId = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *UserIdGroupPair) SetVpcPeeringConnectionId(v string) *UserIdGroupPair { - s.VpcPeeringConnectionId = &v - return s -} - -// Describes the vCPU configurations for the instance type. -type VCpuInfo struct { - _ struct{} `type:"structure"` - - // The default number of cores for the instance type. - DefaultCores *int64 `locationName:"defaultCores" type:"integer"` - - // The default number of threads per core for the instance type. - DefaultThreadsPerCore *int64 `locationName:"defaultThreadsPerCore" type:"integer"` - - // The default number of vCPUs for the instance type. - DefaultVCpus *int64 `locationName:"defaultVCpus" type:"integer"` - - // List of the valid number of cores that can be configured for the instance - // type. - ValidCores []*int64 `locationName:"validCores" locationNameList:"item" type:"list"` - - // List of the valid number of threads per core that can be configured for the - // instance type. - ValidThreadsPerCore []*int64 `locationName:"validThreadsPerCore" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s VCpuInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VCpuInfo) GoString() string { - return s.String() -} - -// SetDefaultCores sets the DefaultCores field's value. -func (s *VCpuInfo) SetDefaultCores(v int64) *VCpuInfo { - s.DefaultCores = &v - return s -} - -// SetDefaultThreadsPerCore sets the DefaultThreadsPerCore field's value. -func (s *VCpuInfo) SetDefaultThreadsPerCore(v int64) *VCpuInfo { - s.DefaultThreadsPerCore = &v - return s -} - -// SetDefaultVCpus sets the DefaultVCpus field's value. -func (s *VCpuInfo) SetDefaultVCpus(v int64) *VCpuInfo { - s.DefaultVCpus = &v - return s -} - -// SetValidCores sets the ValidCores field's value. -func (s *VCpuInfo) SetValidCores(v []*int64) *VCpuInfo { - s.ValidCores = v - return s -} - -// SetValidThreadsPerCore sets the ValidThreadsPerCore field's value. -func (s *VCpuInfo) SetValidThreadsPerCore(v []*int64) *VCpuInfo { - s.ValidThreadsPerCore = v - return s -} - -// Describes telemetry for a VPN tunnel. -type VgwTelemetry struct { - _ struct{} `type:"structure"` - - // The number of accepted routes. - AcceptedRouteCount *int64 `locationName:"acceptedRouteCount" type:"integer"` - - // The Amazon Resource Name (ARN) of the VPN tunnel endpoint certificate. - CertificateArn *string `locationName:"certificateArn" type:"string"` - - // The date and time of the last change in status. - LastStatusChange *time.Time `locationName:"lastStatusChange" type:"timestamp"` - - // The Internet-routable IP address of the virtual private gateway's outside - // interface. - OutsideIpAddress *string `locationName:"outsideIpAddress" type:"string"` - - // The status of the VPN tunnel. - Status *string `locationName:"status" type:"string" enum:"TelemetryStatus"` - - // If an error occurs, a description of the error. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s VgwTelemetry) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VgwTelemetry) GoString() string { - return s.String() -} - -// SetAcceptedRouteCount sets the AcceptedRouteCount field's value. -func (s *VgwTelemetry) SetAcceptedRouteCount(v int64) *VgwTelemetry { - s.AcceptedRouteCount = &v - return s -} - -// SetCertificateArn sets the CertificateArn field's value. -func (s *VgwTelemetry) SetCertificateArn(v string) *VgwTelemetry { - s.CertificateArn = &v - return s -} - -// SetLastStatusChange sets the LastStatusChange field's value. -func (s *VgwTelemetry) SetLastStatusChange(v time.Time) *VgwTelemetry { - s.LastStatusChange = &v - return s -} - -// SetOutsideIpAddress sets the OutsideIpAddress field's value. -func (s *VgwTelemetry) SetOutsideIpAddress(v string) *VgwTelemetry { - s.OutsideIpAddress = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *VgwTelemetry) SetStatus(v string) *VgwTelemetry { - s.Status = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *VgwTelemetry) SetStatusMessage(v string) *VgwTelemetry { - s.StatusMessage = &v - return s -} - -// Describes a volume. -type Volume struct { - _ struct{} `type:"structure"` - - // Information about the volume attachments. - Attachments []*VolumeAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` - - // The Availability Zone for the volume. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The time stamp when volume creation was initiated. - CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - - // Indicates whether the volume is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` - - // Indicates whether the volume was created using fast snapshot restore. - FastRestored *bool `locationName:"fastRestored" type:"boolean"` - - // The number of I/O operations per second (IOPS) that the volume supports. - // For Provisioned IOPS SSD volumes, this represents the number of IOPS that - // are provisioned for the volume. For General Purpose SSD volumes, this represents - // the baseline performance of the volume and the rate at which the volume accumulates - // I/O credits for bursting. For more information, see Amazon EBS Volume Types - // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Constraints: Range is 100-16,000 IOPS for gp2 volumes and 100 to 64,000IOPS - // for io1 volumes, in most Regions. The maximum IOPS for io1 of 64,000 is guaranteed - // only on Nitro-based instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). - // Other instance families guarantee performance up to 32,000 IOPS. - // - // Condition: This parameter is required for requests to create io1 volumes; - // it is not used in requests to create gp2, st1, sc1, or standard volumes. - Iops *int64 `locationName:"iops" type:"integer"` - - // The Amazon Resource Name (ARN) of the AWS Key Management Service (AWS KMS) - // customer master key (CMK) that was used to protect the volume encryption - // key for the volume. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` - - // The size of the volume, in GiBs. - Size *int64 `locationName:"size" type:"integer"` - - // The snapshot from which the volume was created, if applicable. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // The volume state. - State *string `locationName:"status" type:"string" enum:"VolumeState"` - - // Any tags assigned to the volume. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the volume. - VolumeId *string `locationName:"volumeId" type:"string"` - - // The volume type. This can be gp2 for General Purpose SSD, io1 for Provisioned - // IOPS SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or standard - // for Magnetic volumes. - VolumeType *string `locationName:"volumeType" type:"string" enum:"VolumeType"` -} - -// String returns the string representation -func (s Volume) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Volume) GoString() string { - return s.String() -} - -// SetAttachments sets the Attachments field's value. -func (s *Volume) SetAttachments(v []*VolumeAttachment) *Volume { - s.Attachments = v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Volume) SetAvailabilityZone(v string) *Volume { - s.AvailabilityZone = &v - return s -} - -// SetCreateTime sets the CreateTime field's value. -func (s *Volume) SetCreateTime(v time.Time) *Volume { - s.CreateTime = &v - return s -} - -// SetEncrypted sets the Encrypted field's value. -func (s *Volume) SetEncrypted(v bool) *Volume { - s.Encrypted = &v - return s -} - -// SetFastRestored sets the FastRestored field's value. -func (s *Volume) SetFastRestored(v bool) *Volume { - s.FastRestored = &v - return s -} - -// SetIops sets the Iops field's value. -func (s *Volume) SetIops(v int64) *Volume { - s.Iops = &v - return s -} - -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *Volume) SetKmsKeyId(v string) *Volume { - s.KmsKeyId = &v - return s -} - -// SetSize sets the Size field's value. -func (s *Volume) SetSize(v int64) *Volume { - s.Size = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *Volume) SetSnapshotId(v string) *Volume { - s.SnapshotId = &v - return s -} - -// SetState sets the State field's value. -func (s *Volume) SetState(v string) *Volume { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Volume) SetTags(v []*Tag) *Volume { - s.Tags = v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *Volume) SetVolumeId(v string) *Volume { - s.VolumeId = &v - return s -} - -// SetVolumeType sets the VolumeType field's value. -func (s *Volume) SetVolumeType(v string) *Volume { - s.VolumeType = &v - return s -} - -// Describes volume attachment details. -type VolumeAttachment struct { - _ struct{} `type:"structure"` - - // The time stamp when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` - - // Indicates whether the EBS volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The device name. - Device *string `locationName:"device" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The attachment state of the volume. - State *string `locationName:"status" type:"string" enum:"VolumeAttachmentState"` - - // The ID of the volume. - VolumeId *string `locationName:"volumeId" type:"string"` -} - -// String returns the string representation -func (s VolumeAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeAttachment) GoString() string { - return s.String() -} - -// SetAttachTime sets the AttachTime field's value. -func (s *VolumeAttachment) SetAttachTime(v time.Time) *VolumeAttachment { - s.AttachTime = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *VolumeAttachment) SetDeleteOnTermination(v bool) *VolumeAttachment { - s.DeleteOnTermination = &v - return s -} - -// SetDevice sets the Device field's value. -func (s *VolumeAttachment) SetDevice(v string) *VolumeAttachment { - s.Device = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *VolumeAttachment) SetInstanceId(v string) *VolumeAttachment { - s.InstanceId = &v - return s -} - -// SetState sets the State field's value. -func (s *VolumeAttachment) SetState(v string) *VolumeAttachment { - s.State = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *VolumeAttachment) SetVolumeId(v string) *VolumeAttachment { - s.VolumeId = &v - return s -} - -// Describes an EBS volume. -type VolumeDetail struct { - _ struct{} `type:"structure"` - - // The size of the volume, in GiB. - // - // Size is a required field - Size *int64 `locationName:"size" type:"long" required:"true"` -} - -// String returns the string representation -func (s VolumeDetail) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeDetail) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *VolumeDetail) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "VolumeDetail"} - if s.Size == nil { - invalidParams.Add(request.NewErrParamRequired("Size")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetSize sets the Size field's value. -func (s *VolumeDetail) SetSize(v int64) *VolumeDetail { - s.Size = &v - return s -} - -// Describes the modification status of an EBS volume. -// -// If the volume has never been modified, some element values will be null. -type VolumeModification struct { - _ struct{} `type:"structure"` - - // The modification completion or failure time. - EndTime *time.Time `locationName:"endTime" type:"timestamp"` - - // The current modification state. The modification state is null for unmodified - // volumes. - ModificationState *string `locationName:"modificationState" type:"string" enum:"VolumeModificationState"` - - // The original IOPS rate of the volume. - OriginalIops *int64 `locationName:"originalIops" type:"integer"` - - // The original size of the volume. - OriginalSize *int64 `locationName:"originalSize" type:"integer"` - - // The original EBS volume type of the volume. - OriginalVolumeType *string `locationName:"originalVolumeType" type:"string" enum:"VolumeType"` - - // The modification progress, from 0 to 100 percent complete. - Progress *int64 `locationName:"progress" type:"long"` - - // The modification start time. - StartTime *time.Time `locationName:"startTime" type:"timestamp"` - - // A status message about the modification progress or failure. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // The target IOPS rate of the volume. - TargetIops *int64 `locationName:"targetIops" type:"integer"` - - // The target size of the volume, in GiB. - TargetSize *int64 `locationName:"targetSize" type:"integer"` - - // The target EBS volume type of the volume. - TargetVolumeType *string `locationName:"targetVolumeType" type:"string" enum:"VolumeType"` - - // The ID of the volume. - VolumeId *string `locationName:"volumeId" type:"string"` -} - -// String returns the string representation -func (s VolumeModification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeModification) GoString() string { - return s.String() -} - -// SetEndTime sets the EndTime field's value. -func (s *VolumeModification) SetEndTime(v time.Time) *VolumeModification { - s.EndTime = &v - return s -} - -// SetModificationState sets the ModificationState field's value. -func (s *VolumeModification) SetModificationState(v string) *VolumeModification { - s.ModificationState = &v - return s -} - -// SetOriginalIops sets the OriginalIops field's value. -func (s *VolumeModification) SetOriginalIops(v int64) *VolumeModification { - s.OriginalIops = &v - return s -} - -// SetOriginalSize sets the OriginalSize field's value. -func (s *VolumeModification) SetOriginalSize(v int64) *VolumeModification { - s.OriginalSize = &v - return s -} - -// SetOriginalVolumeType sets the OriginalVolumeType field's value. -func (s *VolumeModification) SetOriginalVolumeType(v string) *VolumeModification { - s.OriginalVolumeType = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *VolumeModification) SetProgress(v int64) *VolumeModification { - s.Progress = &v - return s -} - -// SetStartTime sets the StartTime field's value. -func (s *VolumeModification) SetStartTime(v time.Time) *VolumeModification { - s.StartTime = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *VolumeModification) SetStatusMessage(v string) *VolumeModification { - s.StatusMessage = &v - return s -} - -// SetTargetIops sets the TargetIops field's value. -func (s *VolumeModification) SetTargetIops(v int64) *VolumeModification { - s.TargetIops = &v - return s -} - -// SetTargetSize sets the TargetSize field's value. -func (s *VolumeModification) SetTargetSize(v int64) *VolumeModification { - s.TargetSize = &v - return s -} - -// SetTargetVolumeType sets the TargetVolumeType field's value. -func (s *VolumeModification) SetTargetVolumeType(v string) *VolumeModification { - s.TargetVolumeType = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *VolumeModification) SetVolumeId(v string) *VolumeModification { - s.VolumeId = &v - return s -} - -// Describes a volume status operation code. -type VolumeStatusAction struct { - _ struct{} `type:"structure"` - - // The code identifying the operation, for example, enable-volume-io. - Code *string `locationName:"code" type:"string"` - - // A description of the operation. - Description *string `locationName:"description" type:"string"` - - // The ID of the event associated with this operation. - EventId *string `locationName:"eventId" type:"string"` - - // The event type associated with this operation. - EventType *string `locationName:"eventType" type:"string"` -} - -// String returns the string representation -func (s VolumeStatusAction) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeStatusAction) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *VolumeStatusAction) SetCode(v string) *VolumeStatusAction { - s.Code = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *VolumeStatusAction) SetDescription(v string) *VolumeStatusAction { - s.Description = &v - return s -} - -// SetEventId sets the EventId field's value. -func (s *VolumeStatusAction) SetEventId(v string) *VolumeStatusAction { - s.EventId = &v - return s -} - -// SetEventType sets the EventType field's value. -func (s *VolumeStatusAction) SetEventType(v string) *VolumeStatusAction { - s.EventType = &v - return s -} - -// Describes a volume status. -type VolumeStatusDetails struct { - _ struct{} `type:"structure"` - - // The name of the volume status. - Name *string `locationName:"name" type:"string" enum:"VolumeStatusName"` - - // The intended status of the volume status. - Status *string `locationName:"status" type:"string"` -} - -// String returns the string representation -func (s VolumeStatusDetails) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeStatusDetails) GoString() string { - return s.String() -} - -// SetName sets the Name field's value. -func (s *VolumeStatusDetails) SetName(v string) *VolumeStatusDetails { - s.Name = &v - return s -} - -// SetStatus sets the Status field's value. -func (s *VolumeStatusDetails) SetStatus(v string) *VolumeStatusDetails { - s.Status = &v - return s -} - -// Describes a volume status event. -type VolumeStatusEvent struct { - _ struct{} `type:"structure"` - - // A description of the event. - Description *string `locationName:"description" type:"string"` - - // The ID of this event. - EventId *string `locationName:"eventId" type:"string"` - - // The type of this event. - EventType *string `locationName:"eventType" type:"string"` - - // The latest end time of the event. - NotAfter *time.Time `locationName:"notAfter" type:"timestamp"` - - // The earliest start time of the event. - NotBefore *time.Time `locationName:"notBefore" type:"timestamp"` -} - -// String returns the string representation -func (s VolumeStatusEvent) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeStatusEvent) GoString() string { - return s.String() -} - -// SetDescription sets the Description field's value. -func (s *VolumeStatusEvent) SetDescription(v string) *VolumeStatusEvent { - s.Description = &v - return s -} - -// SetEventId sets the EventId field's value. -func (s *VolumeStatusEvent) SetEventId(v string) *VolumeStatusEvent { - s.EventId = &v - return s -} - -// SetEventType sets the EventType field's value. -func (s *VolumeStatusEvent) SetEventType(v string) *VolumeStatusEvent { - s.EventType = &v - return s -} - -// SetNotAfter sets the NotAfter field's value. -func (s *VolumeStatusEvent) SetNotAfter(v time.Time) *VolumeStatusEvent { - s.NotAfter = &v - return s -} - -// SetNotBefore sets the NotBefore field's value. -func (s *VolumeStatusEvent) SetNotBefore(v time.Time) *VolumeStatusEvent { - s.NotBefore = &v - return s -} - -// Describes the status of a volume. -type VolumeStatusInfo struct { - _ struct{} `type:"structure"` - - // The details of the volume status. - Details []*VolumeStatusDetails `locationName:"details" locationNameList:"item" type:"list"` - - // The status of the volume. - Status *string `locationName:"status" type:"string" enum:"VolumeStatusInfoStatus"` -} - -// String returns the string representation -func (s VolumeStatusInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeStatusInfo) GoString() string { - return s.String() -} - -// SetDetails sets the Details field's value. -func (s *VolumeStatusInfo) SetDetails(v []*VolumeStatusDetails) *VolumeStatusInfo { - s.Details = v - return s -} - -// SetStatus sets the Status field's value. -func (s *VolumeStatusInfo) SetStatus(v string) *VolumeStatusInfo { - s.Status = &v - return s -} - -// Describes the volume status. -type VolumeStatusItem struct { - _ struct{} `type:"structure"` - - // The details of the operation. - Actions []*VolumeStatusAction `locationName:"actionsSet" locationNameList:"item" type:"list"` - - // The Availability Zone of the volume. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // A list of events associated with the volume. - Events []*VolumeStatusEvent `locationName:"eventsSet" locationNameList:"item" type:"list"` - - // The volume ID. - VolumeId *string `locationName:"volumeId" type:"string"` - - // The volume status. - VolumeStatus *VolumeStatusInfo `locationName:"volumeStatus" type:"structure"` -} - -// String returns the string representation -func (s VolumeStatusItem) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VolumeStatusItem) GoString() string { - return s.String() -} - -// SetActions sets the Actions field's value. -func (s *VolumeStatusItem) SetActions(v []*VolumeStatusAction) *VolumeStatusItem { - s.Actions = v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *VolumeStatusItem) SetAvailabilityZone(v string) *VolumeStatusItem { - s.AvailabilityZone = &v - return s -} - -// SetEvents sets the Events field's value. -func (s *VolumeStatusItem) SetEvents(v []*VolumeStatusEvent) *VolumeStatusItem { - s.Events = v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *VolumeStatusItem) SetVolumeId(v string) *VolumeStatusItem { - s.VolumeId = &v - return s -} - -// SetVolumeStatus sets the VolumeStatus field's value. -func (s *VolumeStatusItem) SetVolumeStatus(v *VolumeStatusInfo) *VolumeStatusItem { - s.VolumeStatus = v - return s -} - -// Describes a VPC. -type Vpc struct { - _ struct{} `type:"structure"` - - // The primary IPv4 CIDR block for the VPC. - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Information about the IPv4 CIDR blocks associated with the VPC. - CidrBlockAssociationSet []*VpcCidrBlockAssociation `locationName:"cidrBlockAssociationSet" locationNameList:"item" type:"list"` - - // The ID of the set of DHCP options you've associated with the VPC (or default - // if the default options are associated with the VPC). - DhcpOptionsId *string `locationName:"dhcpOptionsId" type:"string"` - - // The allowed tenancy of instances launched into the VPC. - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` - - // Information about the IPv6 CIDR blocks associated with the VPC. - Ipv6CidrBlockAssociationSet []*VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociationSet" locationNameList:"item" type:"list"` - - // Indicates whether the VPC is the default VPC. - IsDefault *bool `locationName:"isDefault" type:"boolean"` - - // The ID of the AWS account that owns the VPC. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The current state of the VPC. - State *string `locationName:"state" type:"string" enum:"VpcState"` - - // Any tags assigned to the VPC. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s Vpc) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Vpc) GoString() string { - return s.String() -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *Vpc) SetCidrBlock(v string) *Vpc { - s.CidrBlock = &v - return s -} - -// SetCidrBlockAssociationSet sets the CidrBlockAssociationSet field's value. -func (s *Vpc) SetCidrBlockAssociationSet(v []*VpcCidrBlockAssociation) *Vpc { - s.CidrBlockAssociationSet = v - return s -} - -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *Vpc) SetDhcpOptionsId(v string) *Vpc { - s.DhcpOptionsId = &v - return s -} - -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *Vpc) SetInstanceTenancy(v string) *Vpc { - s.InstanceTenancy = &v - return s -} - -// SetIpv6CidrBlockAssociationSet sets the Ipv6CidrBlockAssociationSet field's value. -func (s *Vpc) SetIpv6CidrBlockAssociationSet(v []*VpcIpv6CidrBlockAssociation) *Vpc { - s.Ipv6CidrBlockAssociationSet = v - return s -} - -// SetIsDefault sets the IsDefault field's value. -func (s *Vpc) SetIsDefault(v bool) *Vpc { - s.IsDefault = &v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *Vpc) SetOwnerId(v string) *Vpc { - s.OwnerId = &v - return s -} - -// SetState sets the State field's value. -func (s *Vpc) SetState(v string) *Vpc { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *Vpc) SetTags(v []*Tag) *Vpc { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *Vpc) SetVpcId(v string) *Vpc { - s.VpcId = &v - return s -} - -// Describes an attachment between a virtual private gateway and a VPC. -type VpcAttachment struct { - _ struct{} `type:"structure"` - - // The current state of the attachment. - State *string `locationName:"state" type:"string" enum:"AttachmentStatus"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s VpcAttachment) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcAttachment) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *VpcAttachment) SetState(v string) *VpcAttachment { - s.State = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *VpcAttachment) SetVpcId(v string) *VpcAttachment { - s.VpcId = &v - return s -} - -// Describes an IPv4 CIDR block associated with a VPC. -type VpcCidrBlockAssociation struct { - _ struct{} `type:"structure"` - - // The association ID for the IPv4 CIDR block. - AssociationId *string `locationName:"associationId" type:"string"` - - // The IPv4 CIDR block. - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Information about the state of the CIDR block. - CidrBlockState *VpcCidrBlockState `locationName:"cidrBlockState" type:"structure"` -} - -// String returns the string representation -func (s VpcCidrBlockAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcCidrBlockAssociation) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *VpcCidrBlockAssociation) SetAssociationId(v string) *VpcCidrBlockAssociation { - s.AssociationId = &v - return s -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *VpcCidrBlockAssociation) SetCidrBlock(v string) *VpcCidrBlockAssociation { - s.CidrBlock = &v - return s -} - -// SetCidrBlockState sets the CidrBlockState field's value. -func (s *VpcCidrBlockAssociation) SetCidrBlockState(v *VpcCidrBlockState) *VpcCidrBlockAssociation { - s.CidrBlockState = v - return s -} - -// Describes the state of a CIDR block. -type VpcCidrBlockState struct { - _ struct{} `type:"structure"` - - // The state of the CIDR block. - State *string `locationName:"state" type:"string" enum:"VpcCidrBlockStateCode"` - - // A message about the status of the CIDR block, if applicable. - StatusMessage *string `locationName:"statusMessage" type:"string"` -} - -// String returns the string representation -func (s VpcCidrBlockState) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcCidrBlockState) GoString() string { - return s.String() -} - -// SetState sets the State field's value. -func (s *VpcCidrBlockState) SetState(v string) *VpcCidrBlockState { - s.State = &v - return s -} - -// SetStatusMessage sets the StatusMessage field's value. -func (s *VpcCidrBlockState) SetStatusMessage(v string) *VpcCidrBlockState { - s.StatusMessage = &v - return s -} - -// Describes whether a VPC is enabled for ClassicLink. -type VpcClassicLink struct { - _ struct{} `type:"structure"` - - // Indicates whether the VPC is enabled for ClassicLink. - ClassicLinkEnabled *bool `locationName:"classicLinkEnabled" type:"boolean"` - - // Any tags assigned to the VPC. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s VpcClassicLink) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcClassicLink) GoString() string { - return s.String() -} - -// SetClassicLinkEnabled sets the ClassicLinkEnabled field's value. -func (s *VpcClassicLink) SetClassicLinkEnabled(v bool) *VpcClassicLink { - s.ClassicLinkEnabled = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *VpcClassicLink) SetTags(v []*Tag) *VpcClassicLink { - s.Tags = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *VpcClassicLink) SetVpcId(v string) *VpcClassicLink { - s.VpcId = &v - return s -} - -// Describes a VPC endpoint. -type VpcEndpoint struct { - _ struct{} `type:"structure"` - - // The date and time the VPC endpoint was created. - CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp"` - - // (Interface endpoint) The DNS entries for the endpoint. - DnsEntries []*DnsEntry `locationName:"dnsEntrySet" locationNameList:"item" type:"list"` - - // (Interface endpoint) Information about the security groups associated with - // the network interface. - Groups []*SecurityGroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // (Interface endpoint) One or more network interfaces for the endpoint. - NetworkInterfaceIds []*string `locationName:"networkInterfaceIdSet" locationNameList:"item" type:"list"` - - // The ID of the AWS account that owns the VPC endpoint. - OwnerId *string `locationName:"ownerId" type:"string"` - - // The policy document associated with the endpoint, if applicable. - PolicyDocument *string `locationName:"policyDocument" type:"string"` - - // (Interface endpoint) Indicates whether the VPC is associated with a private - // hosted zone. - PrivateDnsEnabled *bool `locationName:"privateDnsEnabled" type:"boolean"` - - // Indicates whether the VPC endpoint is being managed by its service. - RequesterManaged *bool `locationName:"requesterManaged" type:"boolean"` - - // (Gateway endpoint) One or more route tables associated with the endpoint. - RouteTableIds []*string `locationName:"routeTableIdSet" locationNameList:"item" type:"list"` - - // The name of the service to which the endpoint is associated. - ServiceName *string `locationName:"serviceName" type:"string"` - - // The state of the VPC endpoint. - State *string `locationName:"state" type:"string" enum:"State"` - - // (Interface endpoint) One or more subnets in which the endpoint is located. - SubnetIds []*string `locationName:"subnetIdSet" locationNameList:"item" type:"list"` - - // Any tags assigned to the VPC endpoint. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC endpoint. - VpcEndpointId *string `locationName:"vpcEndpointId" type:"string"` - - // The type of endpoint. - VpcEndpointType *string `locationName:"vpcEndpointType" type:"string" enum:"VpcEndpointType"` - - // The ID of the VPC to which the endpoint is associated. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s VpcEndpoint) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcEndpoint) GoString() string { - return s.String() -} - -// SetCreationTimestamp sets the CreationTimestamp field's value. -func (s *VpcEndpoint) SetCreationTimestamp(v time.Time) *VpcEndpoint { - s.CreationTimestamp = &v - return s -} - -// SetDnsEntries sets the DnsEntries field's value. -func (s *VpcEndpoint) SetDnsEntries(v []*DnsEntry) *VpcEndpoint { - s.DnsEntries = v - return s -} - -// SetGroups sets the Groups field's value. -func (s *VpcEndpoint) SetGroups(v []*SecurityGroupIdentifier) *VpcEndpoint { - s.Groups = v - return s -} - -// SetNetworkInterfaceIds sets the NetworkInterfaceIds field's value. -func (s *VpcEndpoint) SetNetworkInterfaceIds(v []*string) *VpcEndpoint { - s.NetworkInterfaceIds = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *VpcEndpoint) SetOwnerId(v string) *VpcEndpoint { - s.OwnerId = &v - return s -} - -// SetPolicyDocument sets the PolicyDocument field's value. -func (s *VpcEndpoint) SetPolicyDocument(v string) *VpcEndpoint { - s.PolicyDocument = &v - return s -} - -// SetPrivateDnsEnabled sets the PrivateDnsEnabled field's value. -func (s *VpcEndpoint) SetPrivateDnsEnabled(v bool) *VpcEndpoint { - s.PrivateDnsEnabled = &v - return s -} - -// SetRequesterManaged sets the RequesterManaged field's value. -func (s *VpcEndpoint) SetRequesterManaged(v bool) *VpcEndpoint { - s.RequesterManaged = &v - return s -} - -// SetRouteTableIds sets the RouteTableIds field's value. -func (s *VpcEndpoint) SetRouteTableIds(v []*string) *VpcEndpoint { - s.RouteTableIds = v - return s -} - -// SetServiceName sets the ServiceName field's value. -func (s *VpcEndpoint) SetServiceName(v string) *VpcEndpoint { - s.ServiceName = &v - return s -} - -// SetState sets the State field's value. -func (s *VpcEndpoint) SetState(v string) *VpcEndpoint { - s.State = &v - return s -} - -// SetSubnetIds sets the SubnetIds field's value. -func (s *VpcEndpoint) SetSubnetIds(v []*string) *VpcEndpoint { - s.SubnetIds = v - return s -} - -// SetTags sets the Tags field's value. -func (s *VpcEndpoint) SetTags(v []*Tag) *VpcEndpoint { - s.Tags = v - return s -} - -// SetVpcEndpointId sets the VpcEndpointId field's value. -func (s *VpcEndpoint) SetVpcEndpointId(v string) *VpcEndpoint { - s.VpcEndpointId = &v - return s -} - -// SetVpcEndpointType sets the VpcEndpointType field's value. -func (s *VpcEndpoint) SetVpcEndpointType(v string) *VpcEndpoint { - s.VpcEndpointType = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *VpcEndpoint) SetVpcId(v string) *VpcEndpoint { - s.VpcId = &v - return s -} - -// Describes a VPC endpoint connection to a service. -type VpcEndpointConnection struct { - _ struct{} `type:"structure"` - - // The date and time the VPC endpoint was created. - CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp"` - - // The DNS entries for the VPC endpoint. - DnsEntries []*DnsEntry `locationName:"dnsEntrySet" locationNameList:"item" type:"list"` - - // The Amazon Resource Names (ARNs) of the network load balancers for the service. - NetworkLoadBalancerArns []*string `locationName:"networkLoadBalancerArnSet" locationNameList:"item" type:"list"` - - // The ID of the service to which the endpoint is connected. - ServiceId *string `locationName:"serviceId" type:"string"` - - // The ID of the VPC endpoint. - VpcEndpointId *string `locationName:"vpcEndpointId" type:"string"` - - // The AWS account ID of the owner of the VPC endpoint. - VpcEndpointOwner *string `locationName:"vpcEndpointOwner" type:"string"` - - // The state of the VPC endpoint. - VpcEndpointState *string `locationName:"vpcEndpointState" type:"string" enum:"State"` -} - -// String returns the string representation -func (s VpcEndpointConnection) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcEndpointConnection) GoString() string { - return s.String() -} - -// SetCreationTimestamp sets the CreationTimestamp field's value. -func (s *VpcEndpointConnection) SetCreationTimestamp(v time.Time) *VpcEndpointConnection { - s.CreationTimestamp = &v - return s -} - -// SetDnsEntries sets the DnsEntries field's value. -func (s *VpcEndpointConnection) SetDnsEntries(v []*DnsEntry) *VpcEndpointConnection { - s.DnsEntries = v - return s -} - -// SetNetworkLoadBalancerArns sets the NetworkLoadBalancerArns field's value. -func (s *VpcEndpointConnection) SetNetworkLoadBalancerArns(v []*string) *VpcEndpointConnection { - s.NetworkLoadBalancerArns = v - return s -} - -// SetServiceId sets the ServiceId field's value. -func (s *VpcEndpointConnection) SetServiceId(v string) *VpcEndpointConnection { - s.ServiceId = &v - return s -} - -// SetVpcEndpointId sets the VpcEndpointId field's value. -func (s *VpcEndpointConnection) SetVpcEndpointId(v string) *VpcEndpointConnection { - s.VpcEndpointId = &v - return s -} - -// SetVpcEndpointOwner sets the VpcEndpointOwner field's value. -func (s *VpcEndpointConnection) SetVpcEndpointOwner(v string) *VpcEndpointConnection { - s.VpcEndpointOwner = &v - return s -} - -// SetVpcEndpointState sets the VpcEndpointState field's value. -func (s *VpcEndpointConnection) SetVpcEndpointState(v string) *VpcEndpointConnection { - s.VpcEndpointState = &v - return s -} - -// Describes an IPv6 CIDR block associated with a VPC. -type VpcIpv6CidrBlockAssociation struct { - _ struct{} `type:"structure"` - - // The association ID for the IPv6 CIDR block. - AssociationId *string `locationName:"associationId" type:"string"` - - // The IPv6 CIDR block. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - - // Information about the state of the CIDR block. - Ipv6CidrBlockState *VpcCidrBlockState `locationName:"ipv6CidrBlockState" type:"structure"` -} - -// String returns the string representation -func (s VpcIpv6CidrBlockAssociation) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcIpv6CidrBlockAssociation) GoString() string { - return s.String() -} - -// SetAssociationId sets the AssociationId field's value. -func (s *VpcIpv6CidrBlockAssociation) SetAssociationId(v string) *VpcIpv6CidrBlockAssociation { - s.AssociationId = &v - return s -} - -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *VpcIpv6CidrBlockAssociation) SetIpv6CidrBlock(v string) *VpcIpv6CidrBlockAssociation { - s.Ipv6CidrBlock = &v - return s -} - -// SetIpv6CidrBlockState sets the Ipv6CidrBlockState field's value. -func (s *VpcIpv6CidrBlockAssociation) SetIpv6CidrBlockState(v *VpcCidrBlockState) *VpcIpv6CidrBlockAssociation { - s.Ipv6CidrBlockState = v - return s -} - -// Describes a VPC peering connection. -type VpcPeeringConnection struct { - _ struct{} `type:"structure"` - - // Information about the accepter VPC. CIDR block information is only returned - // when describing an active VPC peering connection. - AccepterVpcInfo *VpcPeeringConnectionVpcInfo `locationName:"accepterVpcInfo" type:"structure"` - - // The time that an unaccepted VPC peering connection will expire. - ExpirationTime *time.Time `locationName:"expirationTime" type:"timestamp"` - - // Information about the requester VPC. CIDR block information is only returned - // when describing an active VPC peering connection. - RequesterVpcInfo *VpcPeeringConnectionVpcInfo `locationName:"requesterVpcInfo" type:"structure"` - - // The status of the VPC peering connection. - Status *VpcPeeringConnectionStateReason `locationName:"status" type:"structure"` - - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` -} - -// String returns the string representation -func (s VpcPeeringConnection) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcPeeringConnection) GoString() string { - return s.String() -} - -// SetAccepterVpcInfo sets the AccepterVpcInfo field's value. -func (s *VpcPeeringConnection) SetAccepterVpcInfo(v *VpcPeeringConnectionVpcInfo) *VpcPeeringConnection { - s.AccepterVpcInfo = v - return s -} - -// SetExpirationTime sets the ExpirationTime field's value. -func (s *VpcPeeringConnection) SetExpirationTime(v time.Time) *VpcPeeringConnection { - s.ExpirationTime = &v - return s -} - -// SetRequesterVpcInfo sets the RequesterVpcInfo field's value. -func (s *VpcPeeringConnection) SetRequesterVpcInfo(v *VpcPeeringConnectionVpcInfo) *VpcPeeringConnection { - s.RequesterVpcInfo = v - return s -} - -// SetStatus sets the Status field's value. -func (s *VpcPeeringConnection) SetStatus(v *VpcPeeringConnectionStateReason) *VpcPeeringConnection { - s.Status = v - return s -} - -// SetTags sets the Tags field's value. -func (s *VpcPeeringConnection) SetTags(v []*Tag) *VpcPeeringConnection { - s.Tags = v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *VpcPeeringConnection) SetVpcPeeringConnectionId(v string) *VpcPeeringConnection { - s.VpcPeeringConnectionId = &v - return s -} - -// Describes the VPC peering connection options. -type VpcPeeringConnectionOptionsDescription struct { - _ struct{} `type:"structure"` - - // Indicates whether a local VPC can resolve public DNS hostnames to private - // IP addresses when queried from instances in a peer VPC. - AllowDnsResolutionFromRemoteVpc *bool `locationName:"allowDnsResolutionFromRemoteVpc" type:"boolean"` - - // Indicates whether a local ClassicLink connection can communicate with the - // peer VPC over the VPC peering connection. - AllowEgressFromLocalClassicLinkToRemoteVpc *bool `locationName:"allowEgressFromLocalClassicLinkToRemoteVpc" type:"boolean"` - - // Indicates whether a local VPC can communicate with a ClassicLink connection - // in the peer VPC over the VPC peering connection. - AllowEgressFromLocalVpcToRemoteClassicLink *bool `locationName:"allowEgressFromLocalVpcToRemoteClassicLink" type:"boolean"` -} - -// String returns the string representation -func (s VpcPeeringConnectionOptionsDescription) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcPeeringConnectionOptionsDescription) GoString() string { - return s.String() -} - -// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. -func (s *VpcPeeringConnectionOptionsDescription) SetAllowDnsResolutionFromRemoteVpc(v bool) *VpcPeeringConnectionOptionsDescription { - s.AllowDnsResolutionFromRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. -func (s *VpcPeeringConnectionOptionsDescription) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *VpcPeeringConnectionOptionsDescription { - s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. -func (s *VpcPeeringConnectionOptionsDescription) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *VpcPeeringConnectionOptionsDescription { - s.AllowEgressFromLocalVpcToRemoteClassicLink = &v - return s -} - -// Describes the status of a VPC peering connection. -type VpcPeeringConnectionStateReason struct { - _ struct{} `type:"structure"` - - // The status of the VPC peering connection. - Code *string `locationName:"code" type:"string" enum:"VpcPeeringConnectionStateReasonCode"` - - // A message that provides more information about the status, if applicable. - Message *string `locationName:"message" type:"string"` -} - -// String returns the string representation -func (s VpcPeeringConnectionStateReason) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcPeeringConnectionStateReason) GoString() string { - return s.String() -} - -// SetCode sets the Code field's value. -func (s *VpcPeeringConnectionStateReason) SetCode(v string) *VpcPeeringConnectionStateReason { - s.Code = &v - return s -} - -// SetMessage sets the Message field's value. -func (s *VpcPeeringConnectionStateReason) SetMessage(v string) *VpcPeeringConnectionStateReason { - s.Message = &v - return s -} - -// Describes a VPC in a VPC peering connection. -type VpcPeeringConnectionVpcInfo struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR block for the VPC. - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Information about the IPv4 CIDR blocks for the VPC. - CidrBlockSet []*CidrBlock `locationName:"cidrBlockSet" locationNameList:"item" type:"list"` - - // The IPv6 CIDR block for the VPC. - Ipv6CidrBlockSet []*Ipv6CidrBlock `locationName:"ipv6CidrBlockSet" locationNameList:"item" type:"list"` - - // The AWS account ID of the VPC owner. - OwnerId *string `locationName:"ownerId" type:"string"` - - // Information about the VPC peering connection options for the accepter or - // requester VPC. - PeeringOptions *VpcPeeringConnectionOptionsDescription `locationName:"peeringOptions" type:"structure"` - - // The Region in which the VPC is located. - Region *string `locationName:"region" type:"string"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s VpcPeeringConnectionVpcInfo) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpcPeeringConnectionVpcInfo) GoString() string { - return s.String() -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *VpcPeeringConnectionVpcInfo) SetCidrBlock(v string) *VpcPeeringConnectionVpcInfo { - s.CidrBlock = &v - return s -} - -// SetCidrBlockSet sets the CidrBlockSet field's value. -func (s *VpcPeeringConnectionVpcInfo) SetCidrBlockSet(v []*CidrBlock) *VpcPeeringConnectionVpcInfo { - s.CidrBlockSet = v - return s -} - -// SetIpv6CidrBlockSet sets the Ipv6CidrBlockSet field's value. -func (s *VpcPeeringConnectionVpcInfo) SetIpv6CidrBlockSet(v []*Ipv6CidrBlock) *VpcPeeringConnectionVpcInfo { - s.Ipv6CidrBlockSet = v - return s -} - -// SetOwnerId sets the OwnerId field's value. -func (s *VpcPeeringConnectionVpcInfo) SetOwnerId(v string) *VpcPeeringConnectionVpcInfo { - s.OwnerId = &v - return s -} - -// SetPeeringOptions sets the PeeringOptions field's value. -func (s *VpcPeeringConnectionVpcInfo) SetPeeringOptions(v *VpcPeeringConnectionOptionsDescription) *VpcPeeringConnectionVpcInfo { - s.PeeringOptions = v - return s -} - -// SetRegion sets the Region field's value. -func (s *VpcPeeringConnectionVpcInfo) SetRegion(v string) *VpcPeeringConnectionVpcInfo { - s.Region = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *VpcPeeringConnectionVpcInfo) SetVpcId(v string) *VpcPeeringConnectionVpcInfo { - s.VpcId = &v - return s -} - -// Describes a VPN connection. -type VpnConnection struct { - _ struct{} `type:"structure"` - - // The category of the VPN connection. A value of VPN indicates an AWS VPN connection. - // A value of VPN-Classic indicates an AWS Classic VPN connection. - Category *string `locationName:"category" type:"string"` - - // The configuration information for the VPN connection's customer gateway (in - // the native XML format). This element is always present in the CreateVpnConnection - // response; however, it's present in the DescribeVpnConnections response only - // if the VPN connection is in the pending or available state. - CustomerGatewayConfiguration *string `locationName:"customerGatewayConfiguration" type:"string"` - - // The ID of the customer gateway at your end of the VPN connection. - CustomerGatewayId *string `locationName:"customerGatewayId" type:"string"` - - // The VPN connection options. - Options *VpnConnectionOptions `locationName:"options" type:"structure"` - - // The static routes associated with the VPN connection. - Routes []*VpnStaticRoute `locationName:"routes" locationNameList:"item" type:"list"` - - // The current state of the VPN connection. - State *string `locationName:"state" type:"string" enum:"VpnState"` - - // Any tags assigned to the VPN connection. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The ID of the transit gateway associated with the VPN connection. - TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` - - // The type of VPN connection. - Type *string `locationName:"type" type:"string" enum:"GatewayType"` - - // Information about the VPN tunnel. - VgwTelemetry []*VgwTelemetry `locationName:"vgwTelemetry" locationNameList:"item" type:"list"` - - // The ID of the VPN connection. - VpnConnectionId *string `locationName:"vpnConnectionId" type:"string"` - - // The ID of the virtual private gateway at the AWS side of the VPN connection. - VpnGatewayId *string `locationName:"vpnGatewayId" type:"string"` -} - -// String returns the string representation -func (s VpnConnection) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpnConnection) GoString() string { - return s.String() -} - -// SetCategory sets the Category field's value. -func (s *VpnConnection) SetCategory(v string) *VpnConnection { - s.Category = &v - return s -} - -// SetCustomerGatewayConfiguration sets the CustomerGatewayConfiguration field's value. -func (s *VpnConnection) SetCustomerGatewayConfiguration(v string) *VpnConnection { - s.CustomerGatewayConfiguration = &v - return s -} - -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *VpnConnection) SetCustomerGatewayId(v string) *VpnConnection { - s.CustomerGatewayId = &v - return s -} - -// SetOptions sets the Options field's value. -func (s *VpnConnection) SetOptions(v *VpnConnectionOptions) *VpnConnection { - s.Options = v - return s -} - -// SetRoutes sets the Routes field's value. -func (s *VpnConnection) SetRoutes(v []*VpnStaticRoute) *VpnConnection { - s.Routes = v - return s -} - -// SetState sets the State field's value. -func (s *VpnConnection) SetState(v string) *VpnConnection { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *VpnConnection) SetTags(v []*Tag) *VpnConnection { - s.Tags = v - return s -} - -// SetTransitGatewayId sets the TransitGatewayId field's value. -func (s *VpnConnection) SetTransitGatewayId(v string) *VpnConnection { - s.TransitGatewayId = &v - return s -} - -// SetType sets the Type field's value. -func (s *VpnConnection) SetType(v string) *VpnConnection { - s.Type = &v - return s -} - -// SetVgwTelemetry sets the VgwTelemetry field's value. -func (s *VpnConnection) SetVgwTelemetry(v []*VgwTelemetry) *VpnConnection { - s.VgwTelemetry = v - return s -} - -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *VpnConnection) SetVpnConnectionId(v string) *VpnConnection { - s.VpnConnectionId = &v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *VpnConnection) SetVpnGatewayId(v string) *VpnConnection { - s.VpnGatewayId = &v - return s -} - -// Describes VPN connection options. -type VpnConnectionOptions struct { - _ struct{} `type:"structure"` - - // Indicates whether the VPN connection uses static routes only. Static routes - // must be used for devices that don't support BGP. - StaticRoutesOnly *bool `locationName:"staticRoutesOnly" type:"boolean"` - - // Indicates the VPN tunnel options. - TunnelOptions []*TunnelOption `locationName:"tunnelOptionSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s VpnConnectionOptions) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpnConnectionOptions) GoString() string { - return s.String() -} - -// SetStaticRoutesOnly sets the StaticRoutesOnly field's value. -func (s *VpnConnectionOptions) SetStaticRoutesOnly(v bool) *VpnConnectionOptions { - s.StaticRoutesOnly = &v - return s -} - -// SetTunnelOptions sets the TunnelOptions field's value. -func (s *VpnConnectionOptions) SetTunnelOptions(v []*TunnelOption) *VpnConnectionOptions { - s.TunnelOptions = v - return s -} - -// Describes VPN connection options. -type VpnConnectionOptionsSpecification struct { - _ struct{} `type:"structure"` - - // Indicate whether the VPN connection uses static routes only. If you are creating - // a VPN connection for a device that does not support BGP, you must specify - // true. Use CreateVpnConnectionRoute to create a static route. - // - // Default: false - StaticRoutesOnly *bool `locationName:"staticRoutesOnly" type:"boolean"` - - // The tunnel options for the VPN connection. - TunnelOptions []*VpnTunnelOptionsSpecification `type:"list"` -} - -// String returns the string representation -func (s VpnConnectionOptionsSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpnConnectionOptionsSpecification) GoString() string { - return s.String() -} - -// SetStaticRoutesOnly sets the StaticRoutesOnly field's value. -func (s *VpnConnectionOptionsSpecification) SetStaticRoutesOnly(v bool) *VpnConnectionOptionsSpecification { - s.StaticRoutesOnly = &v - return s -} - -// SetTunnelOptions sets the TunnelOptions field's value. -func (s *VpnConnectionOptionsSpecification) SetTunnelOptions(v []*VpnTunnelOptionsSpecification) *VpnConnectionOptionsSpecification { - s.TunnelOptions = v - return s -} - -// Describes a virtual private gateway. -type VpnGateway struct { - _ struct{} `type:"structure"` - - // The private Autonomous System Number (ASN) for the Amazon side of a BGP session. - AmazonSideAsn *int64 `locationName:"amazonSideAsn" type:"long"` - - // The Availability Zone where the virtual private gateway was created, if applicable. - // This field may be empty or not returned. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The current state of the virtual private gateway. - State *string `locationName:"state" type:"string" enum:"VpnState"` - - // Any tags assigned to the virtual private gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - - // The type of VPN connection the virtual private gateway supports. - Type *string `locationName:"type" type:"string" enum:"GatewayType"` - - // Any VPCs attached to the virtual private gateway. - VpcAttachments []*VpcAttachment `locationName:"attachments" locationNameList:"item" type:"list"` - - // The ID of the virtual private gateway. - VpnGatewayId *string `locationName:"vpnGatewayId" type:"string"` -} - -// String returns the string representation -func (s VpnGateway) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpnGateway) GoString() string { - return s.String() -} - -// SetAmazonSideAsn sets the AmazonSideAsn field's value. -func (s *VpnGateway) SetAmazonSideAsn(v int64) *VpnGateway { - s.AmazonSideAsn = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *VpnGateway) SetAvailabilityZone(v string) *VpnGateway { - s.AvailabilityZone = &v - return s -} - -// SetState sets the State field's value. -func (s *VpnGateway) SetState(v string) *VpnGateway { - s.State = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *VpnGateway) SetTags(v []*Tag) *VpnGateway { - s.Tags = v - return s -} - -// SetType sets the Type field's value. -func (s *VpnGateway) SetType(v string) *VpnGateway { - s.Type = &v - return s -} - -// SetVpcAttachments sets the VpcAttachments field's value. -func (s *VpnGateway) SetVpcAttachments(v []*VpcAttachment) *VpnGateway { - s.VpcAttachments = v - return s -} - -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *VpnGateway) SetVpnGatewayId(v string) *VpnGateway { - s.VpnGatewayId = &v - return s -} - -// Describes a static route for a VPN connection. -type VpnStaticRoute struct { - _ struct{} `type:"structure"` - - // The CIDR block associated with the local subnet of the customer data center. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // Indicates how the routes were provided. - Source *string `locationName:"source" type:"string" enum:"VpnStaticRouteSource"` - - // The current state of the static route. - State *string `locationName:"state" type:"string" enum:"VpnState"` -} - -// String returns the string representation -func (s VpnStaticRoute) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpnStaticRoute) GoString() string { - return s.String() -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *VpnStaticRoute) SetDestinationCidrBlock(v string) *VpnStaticRoute { - s.DestinationCidrBlock = &v - return s -} - -// SetSource sets the Source field's value. -func (s *VpnStaticRoute) SetSource(v string) *VpnStaticRoute { - s.Source = &v - return s -} - -// SetState sets the State field's value. -func (s *VpnStaticRoute) SetState(v string) *VpnStaticRoute { - s.State = &v - return s -} - -// The tunnel options for a VPN connection. -type VpnTunnelOptionsSpecification struct { - _ struct{} `type:"structure"` - - // The number of seconds after which a DPD timeout occurs. - // - // Constraints: A value between 0 and 30. - // - // Default: 30 - DPDTimeoutSeconds *int64 `type:"integer"` - - // The IKE versions that are permitted for the VPN tunnel. - // - // Valid values: ikev1 | ikev2 - IKEVersions []*IKEVersionsRequestListValue `locationName:"IKEVersion" locationNameList:"item" type:"list"` - - // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel - // for phase 1 IKE negotiations. - // - // Valid values: 2 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 - Phase1DHGroupNumbers []*Phase1DHGroupNumbersRequestListValue `locationName:"Phase1DHGroupNumber" locationNameList:"item" type:"list"` - - // One or more encryption algorithms that are permitted for the VPN tunnel for - // phase 1 IKE negotiations. - // - // Valid values: AES128 | AES256 - Phase1EncryptionAlgorithms []*Phase1EncryptionAlgorithmsRequestListValue `locationName:"Phase1EncryptionAlgorithm" locationNameList:"item" type:"list"` - - // One or more integrity algorithms that are permitted for the VPN tunnel for - // phase 1 IKE negotiations. - // - // Valid values: SHA1 | SHA2-256 - Phase1IntegrityAlgorithms []*Phase1IntegrityAlgorithmsRequestListValue `locationName:"Phase1IntegrityAlgorithm" locationNameList:"item" type:"list"` - - // The lifetime for phase 1 of the IKE negotiation, in seconds. - // - // Constraints: A value between 900 and 28,800. - // - // Default: 28800 - Phase1LifetimeSeconds *int64 `type:"integer"` - - // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel - // for phase 2 IKE negotiations. - // - // Valid values: 2 | 5 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 - Phase2DHGroupNumbers []*Phase2DHGroupNumbersRequestListValue `locationName:"Phase2DHGroupNumber" locationNameList:"item" type:"list"` - - // One or more encryption algorithms that are permitted for the VPN tunnel for - // phase 2 IKE negotiations. - // - // Valid values: AES128 | AES256 - Phase2EncryptionAlgorithms []*Phase2EncryptionAlgorithmsRequestListValue `locationName:"Phase2EncryptionAlgorithm" locationNameList:"item" type:"list"` - - // One or more integrity algorithms that are permitted for the VPN tunnel for - // phase 2 IKE negotiations. - // - // Valid values: SHA1 | SHA2-256 - Phase2IntegrityAlgorithms []*Phase2IntegrityAlgorithmsRequestListValue `locationName:"Phase2IntegrityAlgorithm" locationNameList:"item" type:"list"` - - // The lifetime for phase 2 of the IKE negotiation, in seconds. - // - // Constraints: A value between 900 and 3,600. The value must be less than the - // value for Phase1LifetimeSeconds. - // - // Default: 3600 - Phase2LifetimeSeconds *int64 `type:"integer"` - - // The pre-shared key (PSK) to establish initial authentication between the - // virtual private gateway and customer gateway. - // - // Constraints: Allowed characters are alphanumeric characters, periods (.), - // and underscores (_). Must be between 8 and 64 characters in length and cannot - // start with zero (0). - PreSharedKey *string `type:"string"` - - // The percentage of the rekey window (determined by RekeyMarginTimeSeconds) - // during which the rekey time is randomly selected. - // - // Constraints: A value between 0 and 100. - // - // Default: 100 - RekeyFuzzPercentage *int64 `type:"integer"` - - // The margin time, in seconds, before the phase 2 lifetime expires, during - // which the AWS side of the VPN connection performs an IKE rekey. The exact - // time of the rekey is randomly selected based on the value for RekeyFuzzPercentage. - // - // Constraints: A value between 60 and half of Phase2LifetimeSeconds. - // - // Default: 540 - RekeyMarginTimeSeconds *int64 `type:"integer"` - - // The number of packets in an IKE replay window. - // - // Constraints: A value between 64 and 2048. - // - // Default: 1024 - ReplayWindowSize *int64 `type:"integer"` - - // The range of inside IP addresses for the tunnel. Any specified CIDR blocks - // must be unique across all VPN connections that use the same virtual private - // gateway. - // - // Constraints: A size /30 CIDR block from the 169.254.0.0/16 range. The following - // CIDR blocks are reserved and cannot be used: - // - // * 169.254.0.0/30 - // - // * 169.254.1.0/30 - // - // * 169.254.2.0/30 - // - // * 169.254.3.0/30 - // - // * 169.254.4.0/30 - // - // * 169.254.5.0/30 - // - // * 169.254.169.252/30 - TunnelInsideCidr *string `type:"string"` -} - -// String returns the string representation -func (s VpnTunnelOptionsSpecification) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s VpnTunnelOptionsSpecification) GoString() string { - return s.String() -} - -// SetDPDTimeoutSeconds sets the DPDTimeoutSeconds field's value. -func (s *VpnTunnelOptionsSpecification) SetDPDTimeoutSeconds(v int64) *VpnTunnelOptionsSpecification { - s.DPDTimeoutSeconds = &v - return s -} - -// SetIKEVersions sets the IKEVersions field's value. -func (s *VpnTunnelOptionsSpecification) SetIKEVersions(v []*IKEVersionsRequestListValue) *VpnTunnelOptionsSpecification { - s.IKEVersions = v - return s -} - -// SetPhase1DHGroupNumbers sets the Phase1DHGroupNumbers field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase1DHGroupNumbers(v []*Phase1DHGroupNumbersRequestListValue) *VpnTunnelOptionsSpecification { - s.Phase1DHGroupNumbers = v - return s -} - -// SetPhase1EncryptionAlgorithms sets the Phase1EncryptionAlgorithms field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase1EncryptionAlgorithms(v []*Phase1EncryptionAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { - s.Phase1EncryptionAlgorithms = v - return s -} - -// SetPhase1IntegrityAlgorithms sets the Phase1IntegrityAlgorithms field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase1IntegrityAlgorithms(v []*Phase1IntegrityAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { - s.Phase1IntegrityAlgorithms = v - return s -} - -// SetPhase1LifetimeSeconds sets the Phase1LifetimeSeconds field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase1LifetimeSeconds(v int64) *VpnTunnelOptionsSpecification { - s.Phase1LifetimeSeconds = &v - return s -} - -// SetPhase2DHGroupNumbers sets the Phase2DHGroupNumbers field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase2DHGroupNumbers(v []*Phase2DHGroupNumbersRequestListValue) *VpnTunnelOptionsSpecification { - s.Phase2DHGroupNumbers = v - return s -} - -// SetPhase2EncryptionAlgorithms sets the Phase2EncryptionAlgorithms field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase2EncryptionAlgorithms(v []*Phase2EncryptionAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { - s.Phase2EncryptionAlgorithms = v - return s -} - -// SetPhase2IntegrityAlgorithms sets the Phase2IntegrityAlgorithms field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase2IntegrityAlgorithms(v []*Phase2IntegrityAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { - s.Phase2IntegrityAlgorithms = v - return s -} - -// SetPhase2LifetimeSeconds sets the Phase2LifetimeSeconds field's value. -func (s *VpnTunnelOptionsSpecification) SetPhase2LifetimeSeconds(v int64) *VpnTunnelOptionsSpecification { - s.Phase2LifetimeSeconds = &v - return s -} - -// SetPreSharedKey sets the PreSharedKey field's value. -func (s *VpnTunnelOptionsSpecification) SetPreSharedKey(v string) *VpnTunnelOptionsSpecification { - s.PreSharedKey = &v - return s -} - -// SetRekeyFuzzPercentage sets the RekeyFuzzPercentage field's value. -func (s *VpnTunnelOptionsSpecification) SetRekeyFuzzPercentage(v int64) *VpnTunnelOptionsSpecification { - s.RekeyFuzzPercentage = &v - return s -} - -// SetRekeyMarginTimeSeconds sets the RekeyMarginTimeSeconds field's value. -func (s *VpnTunnelOptionsSpecification) SetRekeyMarginTimeSeconds(v int64) *VpnTunnelOptionsSpecification { - s.RekeyMarginTimeSeconds = &v - return s -} - -// SetReplayWindowSize sets the ReplayWindowSize field's value. -func (s *VpnTunnelOptionsSpecification) SetReplayWindowSize(v int64) *VpnTunnelOptionsSpecification { - s.ReplayWindowSize = &v - return s -} - -// SetTunnelInsideCidr sets the TunnelInsideCidr field's value. -func (s *VpnTunnelOptionsSpecification) SetTunnelInsideCidr(v string) *VpnTunnelOptionsSpecification { - s.TunnelInsideCidr = &v - return s -} - -type WithdrawByoipCidrInput struct { - _ struct{} `type:"structure"` - - // The public IPv4 address range, in CIDR notation. - // - // Cidr is a required field - Cidr *string `type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` -} - -// String returns the string representation -func (s WithdrawByoipCidrInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s WithdrawByoipCidrInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *WithdrawByoipCidrInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "WithdrawByoipCidrInput"} - if s.Cidr == nil { - invalidParams.Add(request.NewErrParamRequired("Cidr")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetCidr sets the Cidr field's value. -func (s *WithdrawByoipCidrInput) SetCidr(v string) *WithdrawByoipCidrInput { - s.Cidr = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *WithdrawByoipCidrInput) SetDryRun(v bool) *WithdrawByoipCidrInput { - s.DryRun = &v - return s -} - -type WithdrawByoipCidrOutput struct { - _ struct{} `type:"structure"` - - // Information about the address pool. - ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` -} - -// String returns the string representation -func (s WithdrawByoipCidrOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s WithdrawByoipCidrOutput) GoString() string { - return s.String() -} - -// SetByoipCidr sets the ByoipCidr field's value. -func (s *WithdrawByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *WithdrawByoipCidrOutput { - s.ByoipCidr = v - return s -} - -const ( - // AccountAttributeNameSupportedPlatforms is a AccountAttributeName enum value - AccountAttributeNameSupportedPlatforms = "supported-platforms" - - // AccountAttributeNameDefaultVpc is a AccountAttributeName enum value - AccountAttributeNameDefaultVpc = "default-vpc" -) - -const ( - // ActivityStatusError is a ActivityStatus enum value - ActivityStatusError = "error" - - // ActivityStatusPendingFulfillment is a ActivityStatus enum value - ActivityStatusPendingFulfillment = "pending_fulfillment" - - // ActivityStatusPendingTermination is a ActivityStatus enum value - ActivityStatusPendingTermination = "pending_termination" - - // ActivityStatusFulfilled is a ActivityStatus enum value - ActivityStatusFulfilled = "fulfilled" -) - -const ( - // AffinityDefault is a Affinity enum value - AffinityDefault = "default" - - // AffinityHost is a Affinity enum value - AffinityHost = "host" -) - -const ( - // AllocationStateAvailable is a AllocationState enum value - AllocationStateAvailable = "available" - - // AllocationStateUnderAssessment is a AllocationState enum value - AllocationStateUnderAssessment = "under-assessment" - - // AllocationStatePermanentFailure is a AllocationState enum value - AllocationStatePermanentFailure = "permanent-failure" - - // AllocationStateReleased is a AllocationState enum value - AllocationStateReleased = "released" - - // AllocationStateReleasedPermanentFailure is a AllocationState enum value - AllocationStateReleasedPermanentFailure = "released-permanent-failure" - - // AllocationStatePending is a AllocationState enum value - AllocationStatePending = "pending" -) - -const ( - // AllocationStrategyLowestPrice is a AllocationStrategy enum value - AllocationStrategyLowestPrice = "lowestPrice" - - // AllocationStrategyDiversified is a AllocationStrategy enum value - AllocationStrategyDiversified = "diversified" - - // AllocationStrategyCapacityOptimized is a AllocationStrategy enum value - AllocationStrategyCapacityOptimized = "capacityOptimized" -) - -const ( - // AllowsMultipleInstanceTypesOn is a AllowsMultipleInstanceTypes enum value - AllowsMultipleInstanceTypesOn = "on" - - // AllowsMultipleInstanceTypesOff is a AllowsMultipleInstanceTypes enum value - AllowsMultipleInstanceTypesOff = "off" -) - -const ( - // ArchitectureTypeI386 is a ArchitectureType enum value - ArchitectureTypeI386 = "i386" - - // ArchitectureTypeX8664 is a ArchitectureType enum value - ArchitectureTypeX8664 = "x86_64" - - // ArchitectureTypeArm64 is a ArchitectureType enum value - ArchitectureTypeArm64 = "arm64" -) - -const ( - // ArchitectureValuesI386 is a ArchitectureValues enum value - ArchitectureValuesI386 = "i386" - - // ArchitectureValuesX8664 is a ArchitectureValues enum value - ArchitectureValuesX8664 = "x86_64" - - // ArchitectureValuesArm64 is a ArchitectureValues enum value - ArchitectureValuesArm64 = "arm64" -) - -const ( - // AssociatedNetworkTypeVpc is a AssociatedNetworkType enum value - AssociatedNetworkTypeVpc = "vpc" -) - -const ( - // AssociationStatusCodeAssociating is a AssociationStatusCode enum value - AssociationStatusCodeAssociating = "associating" - - // AssociationStatusCodeAssociated is a AssociationStatusCode enum value - AssociationStatusCodeAssociated = "associated" - - // AssociationStatusCodeAssociationFailed is a AssociationStatusCode enum value - AssociationStatusCodeAssociationFailed = "association-failed" - - // AssociationStatusCodeDisassociating is a AssociationStatusCode enum value - AssociationStatusCodeDisassociating = "disassociating" - - // AssociationStatusCodeDisassociated is a AssociationStatusCode enum value - AssociationStatusCodeDisassociated = "disassociated" -) - -const ( - // AttachmentStatusAttaching is a AttachmentStatus enum value - AttachmentStatusAttaching = "attaching" - - // AttachmentStatusAttached is a AttachmentStatus enum value - AttachmentStatusAttached = "attached" - - // AttachmentStatusDetaching is a AttachmentStatus enum value - AttachmentStatusDetaching = "detaching" - - // AttachmentStatusDetached is a AttachmentStatus enum value - AttachmentStatusDetached = "detached" -) - -const ( - // AutoAcceptSharedAttachmentsValueEnable is a AutoAcceptSharedAttachmentsValue enum value - AutoAcceptSharedAttachmentsValueEnable = "enable" - - // AutoAcceptSharedAttachmentsValueDisable is a AutoAcceptSharedAttachmentsValue enum value - AutoAcceptSharedAttachmentsValueDisable = "disable" -) - -const ( - // AutoPlacementOn is a AutoPlacement enum value - AutoPlacementOn = "on" - - // AutoPlacementOff is a AutoPlacement enum value - AutoPlacementOff = "off" -) - -const ( - // AvailabilityZoneStateAvailable is a AvailabilityZoneState enum value - AvailabilityZoneStateAvailable = "available" - - // AvailabilityZoneStateInformation is a AvailabilityZoneState enum value - AvailabilityZoneStateInformation = "information" - - // AvailabilityZoneStateImpaired is a AvailabilityZoneState enum value - AvailabilityZoneStateImpaired = "impaired" - - // AvailabilityZoneStateUnavailable is a AvailabilityZoneState enum value - AvailabilityZoneStateUnavailable = "unavailable" -) - -const ( - // BatchStateSubmitted is a BatchState enum value - BatchStateSubmitted = "submitted" - - // BatchStateActive is a BatchState enum value - BatchStateActive = "active" - - // BatchStateCancelled is a BatchState enum value - BatchStateCancelled = "cancelled" - - // BatchStateFailed is a BatchState enum value - BatchStateFailed = "failed" - - // BatchStateCancelledRunning is a BatchState enum value - BatchStateCancelledRunning = "cancelled_running" - - // BatchStateCancelledTerminating is a BatchState enum value - BatchStateCancelledTerminating = "cancelled_terminating" - - // BatchStateModifying is a BatchState enum value - BatchStateModifying = "modifying" -) - -const ( - // BundleTaskStatePending is a BundleTaskState enum value - BundleTaskStatePending = "pending" - - // BundleTaskStateWaitingForShutdown is a BundleTaskState enum value - BundleTaskStateWaitingForShutdown = "waiting-for-shutdown" - - // BundleTaskStateBundling is a BundleTaskState enum value - BundleTaskStateBundling = "bundling" - - // BundleTaskStateStoring is a BundleTaskState enum value - BundleTaskStateStoring = "storing" - - // BundleTaskStateCancelling is a BundleTaskState enum value - BundleTaskStateCancelling = "cancelling" - - // BundleTaskStateComplete is a BundleTaskState enum value - BundleTaskStateComplete = "complete" - - // BundleTaskStateFailed is a BundleTaskState enum value - BundleTaskStateFailed = "failed" -) - -const ( - // ByoipCidrStateAdvertised is a ByoipCidrState enum value - ByoipCidrStateAdvertised = "advertised" - - // ByoipCidrStateDeprovisioned is a ByoipCidrState enum value - ByoipCidrStateDeprovisioned = "deprovisioned" - - // ByoipCidrStateFailedDeprovision is a ByoipCidrState enum value - ByoipCidrStateFailedDeprovision = "failed-deprovision" - - // ByoipCidrStateFailedProvision is a ByoipCidrState enum value - ByoipCidrStateFailedProvision = "failed-provision" - - // ByoipCidrStatePendingDeprovision is a ByoipCidrState enum value - ByoipCidrStatePendingDeprovision = "pending-deprovision" - - // ByoipCidrStatePendingProvision is a ByoipCidrState enum value - ByoipCidrStatePendingProvision = "pending-provision" - - // ByoipCidrStateProvisioned is a ByoipCidrState enum value - ByoipCidrStateProvisioned = "provisioned" -) - -const ( - // CancelBatchErrorCodeFleetRequestIdDoesNotExist is a CancelBatchErrorCode enum value - CancelBatchErrorCodeFleetRequestIdDoesNotExist = "fleetRequestIdDoesNotExist" - - // CancelBatchErrorCodeFleetRequestIdMalformed is a CancelBatchErrorCode enum value - CancelBatchErrorCodeFleetRequestIdMalformed = "fleetRequestIdMalformed" - - // CancelBatchErrorCodeFleetRequestNotInCancellableState is a CancelBatchErrorCode enum value - CancelBatchErrorCodeFleetRequestNotInCancellableState = "fleetRequestNotInCancellableState" - - // CancelBatchErrorCodeUnexpectedError is a CancelBatchErrorCode enum value - CancelBatchErrorCodeUnexpectedError = "unexpectedError" -) - -const ( - // CancelSpotInstanceRequestStateActive is a CancelSpotInstanceRequestState enum value - CancelSpotInstanceRequestStateActive = "active" - - // CancelSpotInstanceRequestStateOpen is a CancelSpotInstanceRequestState enum value - CancelSpotInstanceRequestStateOpen = "open" - - // CancelSpotInstanceRequestStateClosed is a CancelSpotInstanceRequestState enum value - CancelSpotInstanceRequestStateClosed = "closed" - - // CancelSpotInstanceRequestStateCancelled is a CancelSpotInstanceRequestState enum value - CancelSpotInstanceRequestStateCancelled = "cancelled" - - // CancelSpotInstanceRequestStateCompleted is a CancelSpotInstanceRequestState enum value - CancelSpotInstanceRequestStateCompleted = "completed" -) - -const ( - // CapacityReservationInstancePlatformLinuxUnix is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformLinuxUnix = "Linux/UNIX" - - // CapacityReservationInstancePlatformRedHatEnterpriseLinux is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformRedHatEnterpriseLinux = "Red Hat Enterprise Linux" - - // CapacityReservationInstancePlatformSuselinux is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformSuselinux = "SUSE Linux" - - // CapacityReservationInstancePlatformWindows is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformWindows = "Windows" - - // CapacityReservationInstancePlatformWindowswithSqlserver is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformWindowswithSqlserver = "Windows with SQL Server" - - // CapacityReservationInstancePlatformWindowswithSqlserverEnterprise is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformWindowswithSqlserverEnterprise = "Windows with SQL Server Enterprise" - - // CapacityReservationInstancePlatformWindowswithSqlserverStandard is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformWindowswithSqlserverStandard = "Windows with SQL Server Standard" - - // CapacityReservationInstancePlatformWindowswithSqlserverWeb is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformWindowswithSqlserverWeb = "Windows with SQL Server Web" - - // CapacityReservationInstancePlatformLinuxwithSqlserverStandard is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformLinuxwithSqlserverStandard = "Linux with SQL Server Standard" - - // CapacityReservationInstancePlatformLinuxwithSqlserverWeb is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformLinuxwithSqlserverWeb = "Linux with SQL Server Web" - - // CapacityReservationInstancePlatformLinuxwithSqlserverEnterprise is a CapacityReservationInstancePlatform enum value - CapacityReservationInstancePlatformLinuxwithSqlserverEnterprise = "Linux with SQL Server Enterprise" -) - -const ( - // CapacityReservationPreferenceOpen is a CapacityReservationPreference enum value - CapacityReservationPreferenceOpen = "open" - - // CapacityReservationPreferenceNone is a CapacityReservationPreference enum value - CapacityReservationPreferenceNone = "none" -) - -const ( - // CapacityReservationStateActive is a CapacityReservationState enum value - CapacityReservationStateActive = "active" - - // CapacityReservationStateExpired is a CapacityReservationState enum value - CapacityReservationStateExpired = "expired" - - // CapacityReservationStateCancelled is a CapacityReservationState enum value - CapacityReservationStateCancelled = "cancelled" - - // CapacityReservationStatePending is a CapacityReservationState enum value - CapacityReservationStatePending = "pending" - - // CapacityReservationStateFailed is a CapacityReservationState enum value - CapacityReservationStateFailed = "failed" -) - -const ( - // CapacityReservationTenancyDefault is a CapacityReservationTenancy enum value - CapacityReservationTenancyDefault = "default" - - // CapacityReservationTenancyDedicated is a CapacityReservationTenancy enum value - CapacityReservationTenancyDedicated = "dedicated" -) - -const ( - // ClientCertificateRevocationListStatusCodePending is a ClientCertificateRevocationListStatusCode enum value - ClientCertificateRevocationListStatusCodePending = "pending" - - // ClientCertificateRevocationListStatusCodeActive is a ClientCertificateRevocationListStatusCode enum value - ClientCertificateRevocationListStatusCodeActive = "active" -) - -const ( - // ClientVpnAuthenticationTypeCertificateAuthentication is a ClientVpnAuthenticationType enum value - ClientVpnAuthenticationTypeCertificateAuthentication = "certificate-authentication" - - // ClientVpnAuthenticationTypeDirectoryServiceAuthentication is a ClientVpnAuthenticationType enum value - ClientVpnAuthenticationTypeDirectoryServiceAuthentication = "directory-service-authentication" -) - -const ( - // ClientVpnAuthorizationRuleStatusCodeAuthorizing is a ClientVpnAuthorizationRuleStatusCode enum value - ClientVpnAuthorizationRuleStatusCodeAuthorizing = "authorizing" - - // ClientVpnAuthorizationRuleStatusCodeActive is a ClientVpnAuthorizationRuleStatusCode enum value - ClientVpnAuthorizationRuleStatusCodeActive = "active" - - // ClientVpnAuthorizationRuleStatusCodeFailed is a ClientVpnAuthorizationRuleStatusCode enum value - ClientVpnAuthorizationRuleStatusCodeFailed = "failed" - - // ClientVpnAuthorizationRuleStatusCodeRevoking is a ClientVpnAuthorizationRuleStatusCode enum value - ClientVpnAuthorizationRuleStatusCodeRevoking = "revoking" -) - -const ( - // ClientVpnConnectionStatusCodeActive is a ClientVpnConnectionStatusCode enum value - ClientVpnConnectionStatusCodeActive = "active" - - // ClientVpnConnectionStatusCodeFailedToTerminate is a ClientVpnConnectionStatusCode enum value - ClientVpnConnectionStatusCodeFailedToTerminate = "failed-to-terminate" - - // ClientVpnConnectionStatusCodeTerminating is a ClientVpnConnectionStatusCode enum value - ClientVpnConnectionStatusCodeTerminating = "terminating" - - // ClientVpnConnectionStatusCodeTerminated is a ClientVpnConnectionStatusCode enum value - ClientVpnConnectionStatusCodeTerminated = "terminated" -) - -const ( - // ClientVpnEndpointStatusCodePendingAssociate is a ClientVpnEndpointStatusCode enum value - ClientVpnEndpointStatusCodePendingAssociate = "pending-associate" - - // ClientVpnEndpointStatusCodeAvailable is a ClientVpnEndpointStatusCode enum value - ClientVpnEndpointStatusCodeAvailable = "available" - - // ClientVpnEndpointStatusCodeDeleting is a ClientVpnEndpointStatusCode enum value - ClientVpnEndpointStatusCodeDeleting = "deleting" - - // ClientVpnEndpointStatusCodeDeleted is a ClientVpnEndpointStatusCode enum value - ClientVpnEndpointStatusCodeDeleted = "deleted" -) - -const ( - // ClientVpnRouteStatusCodeCreating is a ClientVpnRouteStatusCode enum value - ClientVpnRouteStatusCodeCreating = "creating" - - // ClientVpnRouteStatusCodeActive is a ClientVpnRouteStatusCode enum value - ClientVpnRouteStatusCodeActive = "active" - - // ClientVpnRouteStatusCodeFailed is a ClientVpnRouteStatusCode enum value - ClientVpnRouteStatusCodeFailed = "failed" - - // ClientVpnRouteStatusCodeDeleting is a ClientVpnRouteStatusCode enum value - ClientVpnRouteStatusCodeDeleting = "deleting" -) - -const ( - // ConnectionNotificationStateEnabled is a ConnectionNotificationState enum value - ConnectionNotificationStateEnabled = "Enabled" - - // ConnectionNotificationStateDisabled is a ConnectionNotificationState enum value - ConnectionNotificationStateDisabled = "Disabled" -) - -const ( - // ConnectionNotificationTypeTopic is a ConnectionNotificationType enum value - ConnectionNotificationTypeTopic = "Topic" -) - -const ( - // ContainerFormatOva is a ContainerFormat enum value - ContainerFormatOva = "ova" -) - -const ( - // ConversionTaskStateActive is a ConversionTaskState enum value - ConversionTaskStateActive = "active" - - // ConversionTaskStateCancelling is a ConversionTaskState enum value - ConversionTaskStateCancelling = "cancelling" - - // ConversionTaskStateCancelled is a ConversionTaskState enum value - ConversionTaskStateCancelled = "cancelled" - - // ConversionTaskStateCompleted is a ConversionTaskState enum value - ConversionTaskStateCompleted = "completed" -) - -const ( - // CopyTagsFromSourceVolume is a CopyTagsFromSource enum value - CopyTagsFromSourceVolume = "volume" -) - -const ( - // CurrencyCodeValuesUsd is a CurrencyCodeValues enum value - CurrencyCodeValuesUsd = "USD" -) - -const ( - // DatafeedSubscriptionStateActive is a DatafeedSubscriptionState enum value - DatafeedSubscriptionStateActive = "Active" - - // DatafeedSubscriptionStateInactive is a DatafeedSubscriptionState enum value - DatafeedSubscriptionStateInactive = "Inactive" -) - -const ( - // DefaultRouteTableAssociationValueEnable is a DefaultRouteTableAssociationValue enum value - DefaultRouteTableAssociationValueEnable = "enable" - - // DefaultRouteTableAssociationValueDisable is a DefaultRouteTableAssociationValue enum value - DefaultRouteTableAssociationValueDisable = "disable" -) - -const ( - // DefaultRouteTablePropagationValueEnable is a DefaultRouteTablePropagationValue enum value - DefaultRouteTablePropagationValueEnable = "enable" - - // DefaultRouteTablePropagationValueDisable is a DefaultRouteTablePropagationValue enum value - DefaultRouteTablePropagationValueDisable = "disable" -) - -const ( - // DefaultTargetCapacityTypeSpot is a DefaultTargetCapacityType enum value - DefaultTargetCapacityTypeSpot = "spot" - - // DefaultTargetCapacityTypeOnDemand is a DefaultTargetCapacityType enum value - DefaultTargetCapacityTypeOnDemand = "on-demand" -) - -const ( - // DeleteFleetErrorCodeFleetIdDoesNotExist is a DeleteFleetErrorCode enum value - DeleteFleetErrorCodeFleetIdDoesNotExist = "fleetIdDoesNotExist" - - // DeleteFleetErrorCodeFleetIdMalformed is a DeleteFleetErrorCode enum value - DeleteFleetErrorCodeFleetIdMalformed = "fleetIdMalformed" - - // DeleteFleetErrorCodeFleetNotInDeletableState is a DeleteFleetErrorCode enum value - DeleteFleetErrorCodeFleetNotInDeletableState = "fleetNotInDeletableState" - - // DeleteFleetErrorCodeUnexpectedError is a DeleteFleetErrorCode enum value - DeleteFleetErrorCodeUnexpectedError = "unexpectedError" -) - -const ( - // DeleteQueuedReservedInstancesErrorCodeReservedInstancesIdInvalid is a DeleteQueuedReservedInstancesErrorCode enum value - DeleteQueuedReservedInstancesErrorCodeReservedInstancesIdInvalid = "reserved-instances-id-invalid" - - // DeleteQueuedReservedInstancesErrorCodeReservedInstancesNotInQueuedState is a DeleteQueuedReservedInstancesErrorCode enum value - DeleteQueuedReservedInstancesErrorCodeReservedInstancesNotInQueuedState = "reserved-instances-not-in-queued-state" - - // DeleteQueuedReservedInstancesErrorCodeUnexpectedError is a DeleteQueuedReservedInstancesErrorCode enum value - DeleteQueuedReservedInstancesErrorCodeUnexpectedError = "unexpected-error" -) - -const ( - // DeviceTypeEbs is a DeviceType enum value - DeviceTypeEbs = "ebs" - - // DeviceTypeInstanceStore is a DeviceType enum value - DeviceTypeInstanceStore = "instance-store" -) - -const ( - // DiskImageFormatVmdk is a DiskImageFormat enum value - DiskImageFormatVmdk = "VMDK" - - // DiskImageFormatRaw is a DiskImageFormat enum value - DiskImageFormatRaw = "RAW" - - // DiskImageFormatVhd is a DiskImageFormat enum value - DiskImageFormatVhd = "VHD" -) - -const ( - // DiskTypeHdd is a DiskType enum value - DiskTypeHdd = "hdd" - - // DiskTypeSsd is a DiskType enum value - DiskTypeSsd = "ssd" -) - -const ( - // DnsSupportValueEnable is a DnsSupportValue enum value - DnsSupportValueEnable = "enable" - - // DnsSupportValueDisable is a DnsSupportValue enum value - DnsSupportValueDisable = "disable" -) - -const ( - // DomainTypeVpc is a DomainType enum value - DomainTypeVpc = "vpc" - - // DomainTypeStandard is a DomainType enum value - DomainTypeStandard = "standard" -) - -const ( - // EbsEncryptionSupportUnsupported is a EbsEncryptionSupport enum value - EbsEncryptionSupportUnsupported = "unsupported" - - // EbsEncryptionSupportSupported is a EbsEncryptionSupport enum value - EbsEncryptionSupportSupported = "supported" -) - -const ( - // EbsOptimizedSupportUnsupported is a EbsOptimizedSupport enum value - EbsOptimizedSupportUnsupported = "unsupported" - - // EbsOptimizedSupportSupported is a EbsOptimizedSupport enum value - EbsOptimizedSupportSupported = "supported" - - // EbsOptimizedSupportDefault is a EbsOptimizedSupport enum value - EbsOptimizedSupportDefault = "default" -) - -const ( - // ElasticGpuStateAttached is a ElasticGpuState enum value - ElasticGpuStateAttached = "ATTACHED" -) - -const ( - // ElasticGpuStatusOk is a ElasticGpuStatus enum value - ElasticGpuStatusOk = "OK" - - // ElasticGpuStatusImpaired is a ElasticGpuStatus enum value - ElasticGpuStatusImpaired = "IMPAIRED" -) - -const ( - // EnaSupportUnsupported is a EnaSupport enum value - EnaSupportUnsupported = "unsupported" - - // EnaSupportSupported is a EnaSupport enum value - EnaSupportSupported = "supported" - - // EnaSupportRequired is a EnaSupport enum value - EnaSupportRequired = "required" -) - -const ( - // EndDateTypeUnlimited is a EndDateType enum value - EndDateTypeUnlimited = "unlimited" - - // EndDateTypeLimited is a EndDateType enum value - EndDateTypeLimited = "limited" -) - -const ( - // EventCodeInstanceReboot is a EventCode enum value - EventCodeInstanceReboot = "instance-reboot" - - // EventCodeSystemReboot is a EventCode enum value - EventCodeSystemReboot = "system-reboot" - - // EventCodeSystemMaintenance is a EventCode enum value - EventCodeSystemMaintenance = "system-maintenance" - - // EventCodeInstanceRetirement is a EventCode enum value - EventCodeInstanceRetirement = "instance-retirement" - - // EventCodeInstanceStop is a EventCode enum value - EventCodeInstanceStop = "instance-stop" -) - -const ( - // EventTypeInstanceChange is a EventType enum value - EventTypeInstanceChange = "instanceChange" - - // EventTypeFleetRequestChange is a EventType enum value - EventTypeFleetRequestChange = "fleetRequestChange" - - // EventTypeError is a EventType enum value - EventTypeError = "error" - - // EventTypeInformation is a EventType enum value - EventTypeInformation = "information" -) - -const ( - // ExcessCapacityTerminationPolicyNoTermination is a ExcessCapacityTerminationPolicy enum value - ExcessCapacityTerminationPolicyNoTermination = "noTermination" - - // ExcessCapacityTerminationPolicyDefault is a ExcessCapacityTerminationPolicy enum value - ExcessCapacityTerminationPolicyDefault = "default" -) - -const ( - // ExportEnvironmentCitrix is a ExportEnvironment enum value - ExportEnvironmentCitrix = "citrix" - - // ExportEnvironmentVmware is a ExportEnvironment enum value - ExportEnvironmentVmware = "vmware" - - // ExportEnvironmentMicrosoft is a ExportEnvironment enum value - ExportEnvironmentMicrosoft = "microsoft" -) - -const ( - // ExportTaskStateActive is a ExportTaskState enum value - ExportTaskStateActive = "active" - - // ExportTaskStateCancelling is a ExportTaskState enum value - ExportTaskStateCancelling = "cancelling" - - // ExportTaskStateCancelled is a ExportTaskState enum value - ExportTaskStateCancelled = "cancelled" - - // ExportTaskStateCompleted is a ExportTaskState enum value - ExportTaskStateCompleted = "completed" -) - -const ( - // FastSnapshotRestoreStateCodeEnabling is a FastSnapshotRestoreStateCode enum value - FastSnapshotRestoreStateCodeEnabling = "enabling" - - // FastSnapshotRestoreStateCodeOptimizing is a FastSnapshotRestoreStateCode enum value - FastSnapshotRestoreStateCodeOptimizing = "optimizing" - - // FastSnapshotRestoreStateCodeEnabled is a FastSnapshotRestoreStateCode enum value - FastSnapshotRestoreStateCodeEnabled = "enabled" - - // FastSnapshotRestoreStateCodeDisabling is a FastSnapshotRestoreStateCode enum value - FastSnapshotRestoreStateCodeDisabling = "disabling" - - // FastSnapshotRestoreStateCodeDisabled is a FastSnapshotRestoreStateCode enum value - FastSnapshotRestoreStateCodeDisabled = "disabled" -) - -const ( - // FleetActivityStatusError is a FleetActivityStatus enum value - FleetActivityStatusError = "error" - - // FleetActivityStatusPendingFulfillment is a FleetActivityStatus enum value - FleetActivityStatusPendingFulfillment = "pending_fulfillment" - - // FleetActivityStatusPendingTermination is a FleetActivityStatus enum value - FleetActivityStatusPendingTermination = "pending_termination" - - // FleetActivityStatusFulfilled is a FleetActivityStatus enum value - FleetActivityStatusFulfilled = "fulfilled" -) - -const ( - // FleetEventTypeInstanceChange is a FleetEventType enum value - FleetEventTypeInstanceChange = "instance-change" - - // FleetEventTypeFleetChange is a FleetEventType enum value - FleetEventTypeFleetChange = "fleet-change" - - // FleetEventTypeServiceError is a FleetEventType enum value - FleetEventTypeServiceError = "service-error" -) - -const ( - // FleetExcessCapacityTerminationPolicyNoTermination is a FleetExcessCapacityTerminationPolicy enum value - FleetExcessCapacityTerminationPolicyNoTermination = "no-termination" - - // FleetExcessCapacityTerminationPolicyTermination is a FleetExcessCapacityTerminationPolicy enum value - FleetExcessCapacityTerminationPolicyTermination = "termination" -) - -const ( - // FleetOnDemandAllocationStrategyLowestPrice is a FleetOnDemandAllocationStrategy enum value - FleetOnDemandAllocationStrategyLowestPrice = "lowest-price" - - // FleetOnDemandAllocationStrategyPrioritized is a FleetOnDemandAllocationStrategy enum value - FleetOnDemandAllocationStrategyPrioritized = "prioritized" -) - -const ( - // FleetStateCodeSubmitted is a FleetStateCode enum value - FleetStateCodeSubmitted = "submitted" - - // FleetStateCodeActive is a FleetStateCode enum value - FleetStateCodeActive = "active" - - // FleetStateCodeDeleted is a FleetStateCode enum value - FleetStateCodeDeleted = "deleted" - - // FleetStateCodeFailed is a FleetStateCode enum value - FleetStateCodeFailed = "failed" - - // FleetStateCodeDeletedRunning is a FleetStateCode enum value - FleetStateCodeDeletedRunning = "deleted_running" - - // FleetStateCodeDeletedTerminating is a FleetStateCode enum value - FleetStateCodeDeletedTerminating = "deleted_terminating" - - // FleetStateCodeModifying is a FleetStateCode enum value - FleetStateCodeModifying = "modifying" -) - -const ( - // FleetTypeRequest is a FleetType enum value - FleetTypeRequest = "request" - - // FleetTypeMaintain is a FleetType enum value - FleetTypeMaintain = "maintain" - - // FleetTypeInstant is a FleetType enum value - FleetTypeInstant = "instant" -) - -const ( - // FlowLogsResourceTypeVpc is a FlowLogsResourceType enum value - FlowLogsResourceTypeVpc = "VPC" - - // FlowLogsResourceTypeSubnet is a FlowLogsResourceType enum value - FlowLogsResourceTypeSubnet = "Subnet" - - // FlowLogsResourceTypeNetworkInterface is a FlowLogsResourceType enum value - FlowLogsResourceTypeNetworkInterface = "NetworkInterface" -) - -const ( - // FpgaImageAttributeNameDescription is a FpgaImageAttributeName enum value - FpgaImageAttributeNameDescription = "description" - - // FpgaImageAttributeNameName is a FpgaImageAttributeName enum value - FpgaImageAttributeNameName = "name" - - // FpgaImageAttributeNameLoadPermission is a FpgaImageAttributeName enum value - FpgaImageAttributeNameLoadPermission = "loadPermission" - - // FpgaImageAttributeNameProductCodes is a FpgaImageAttributeName enum value - FpgaImageAttributeNameProductCodes = "productCodes" -) - -const ( - // FpgaImageStateCodePending is a FpgaImageStateCode enum value - FpgaImageStateCodePending = "pending" - - // FpgaImageStateCodeFailed is a FpgaImageStateCode enum value - FpgaImageStateCodeFailed = "failed" - - // FpgaImageStateCodeAvailable is a FpgaImageStateCode enum value - FpgaImageStateCodeAvailable = "available" - - // FpgaImageStateCodeUnavailable is a FpgaImageStateCode enum value - FpgaImageStateCodeUnavailable = "unavailable" -) - -const ( - // GatewayTypeIpsec1 is a GatewayType enum value - GatewayTypeIpsec1 = "ipsec.1" -) - -const ( - // HostRecoveryOn is a HostRecovery enum value - HostRecoveryOn = "on" - - // HostRecoveryOff is a HostRecovery enum value - HostRecoveryOff = "off" -) - -const ( - // HostTenancyDedicated is a HostTenancy enum value - HostTenancyDedicated = "dedicated" - - // HostTenancyHost is a HostTenancy enum value - HostTenancyHost = "host" -) - -const ( - // HttpTokensStateOptional is a HttpTokensState enum value - HttpTokensStateOptional = "optional" - - // HttpTokensStateRequired is a HttpTokensState enum value - HttpTokensStateRequired = "required" -) - -const ( - // HypervisorTypeOvm is a HypervisorType enum value - HypervisorTypeOvm = "ovm" - - // HypervisorTypeXen is a HypervisorType enum value - HypervisorTypeXen = "xen" -) - -const ( - // IamInstanceProfileAssociationStateAssociating is a IamInstanceProfileAssociationState enum value - IamInstanceProfileAssociationStateAssociating = "associating" - - // IamInstanceProfileAssociationStateAssociated is a IamInstanceProfileAssociationState enum value - IamInstanceProfileAssociationStateAssociated = "associated" - - // IamInstanceProfileAssociationStateDisassociating is a IamInstanceProfileAssociationState enum value - IamInstanceProfileAssociationStateDisassociating = "disassociating" - - // IamInstanceProfileAssociationStateDisassociated is a IamInstanceProfileAssociationState enum value - IamInstanceProfileAssociationStateDisassociated = "disassociated" -) - -const ( - // ImageAttributeNameDescription is a ImageAttributeName enum value - ImageAttributeNameDescription = "description" - - // ImageAttributeNameKernel is a ImageAttributeName enum value - ImageAttributeNameKernel = "kernel" - - // ImageAttributeNameRamdisk is a ImageAttributeName enum value - ImageAttributeNameRamdisk = "ramdisk" - - // ImageAttributeNameLaunchPermission is a ImageAttributeName enum value - ImageAttributeNameLaunchPermission = "launchPermission" - - // ImageAttributeNameProductCodes is a ImageAttributeName enum value - ImageAttributeNameProductCodes = "productCodes" - - // ImageAttributeNameBlockDeviceMapping is a ImageAttributeName enum value - ImageAttributeNameBlockDeviceMapping = "blockDeviceMapping" - - // ImageAttributeNameSriovNetSupport is a ImageAttributeName enum value - ImageAttributeNameSriovNetSupport = "sriovNetSupport" -) - -const ( - // ImageStatePending is a ImageState enum value - ImageStatePending = "pending" - - // ImageStateAvailable is a ImageState enum value - ImageStateAvailable = "available" - - // ImageStateInvalid is a ImageState enum value - ImageStateInvalid = "invalid" - - // ImageStateDeregistered is a ImageState enum value - ImageStateDeregistered = "deregistered" - - // ImageStateTransient is a ImageState enum value - ImageStateTransient = "transient" - - // ImageStateFailed is a ImageState enum value - ImageStateFailed = "failed" - - // ImageStateError is a ImageState enum value - ImageStateError = "error" -) - -const ( - // ImageTypeValuesMachine is a ImageTypeValues enum value - ImageTypeValuesMachine = "machine" - - // ImageTypeValuesKernel is a ImageTypeValues enum value - ImageTypeValuesKernel = "kernel" - - // ImageTypeValuesRamdisk is a ImageTypeValues enum value - ImageTypeValuesRamdisk = "ramdisk" -) - -const ( - // InstanceAttributeNameInstanceType is a InstanceAttributeName enum value - InstanceAttributeNameInstanceType = "instanceType" - - // InstanceAttributeNameKernel is a InstanceAttributeName enum value - InstanceAttributeNameKernel = "kernel" - - // InstanceAttributeNameRamdisk is a InstanceAttributeName enum value - InstanceAttributeNameRamdisk = "ramdisk" - - // InstanceAttributeNameUserData is a InstanceAttributeName enum value - InstanceAttributeNameUserData = "userData" - - // InstanceAttributeNameDisableApiTermination is a InstanceAttributeName enum value - InstanceAttributeNameDisableApiTermination = "disableApiTermination" - - // InstanceAttributeNameInstanceInitiatedShutdownBehavior is a InstanceAttributeName enum value - InstanceAttributeNameInstanceInitiatedShutdownBehavior = "instanceInitiatedShutdownBehavior" - - // InstanceAttributeNameRootDeviceName is a InstanceAttributeName enum value - InstanceAttributeNameRootDeviceName = "rootDeviceName" - - // InstanceAttributeNameBlockDeviceMapping is a InstanceAttributeName enum value - InstanceAttributeNameBlockDeviceMapping = "blockDeviceMapping" - - // InstanceAttributeNameProductCodes is a InstanceAttributeName enum value - InstanceAttributeNameProductCodes = "productCodes" - - // InstanceAttributeNameSourceDestCheck is a InstanceAttributeName enum value - InstanceAttributeNameSourceDestCheck = "sourceDestCheck" - - // InstanceAttributeNameGroupSet is a InstanceAttributeName enum value - InstanceAttributeNameGroupSet = "groupSet" - - // InstanceAttributeNameEbsOptimized is a InstanceAttributeName enum value - InstanceAttributeNameEbsOptimized = "ebsOptimized" - - // InstanceAttributeNameSriovNetSupport is a InstanceAttributeName enum value - InstanceAttributeNameSriovNetSupport = "sriovNetSupport" - - // InstanceAttributeNameEnaSupport is a InstanceAttributeName enum value - InstanceAttributeNameEnaSupport = "enaSupport" -) - -const ( - // InstanceHealthStatusHealthy is a InstanceHealthStatus enum value - InstanceHealthStatusHealthy = "healthy" - - // InstanceHealthStatusUnhealthy is a InstanceHealthStatus enum value - InstanceHealthStatusUnhealthy = "unhealthy" -) - -const ( - // InstanceInterruptionBehaviorHibernate is a InstanceInterruptionBehavior enum value - InstanceInterruptionBehaviorHibernate = "hibernate" - - // InstanceInterruptionBehaviorStop is a InstanceInterruptionBehavior enum value - InstanceInterruptionBehaviorStop = "stop" - - // InstanceInterruptionBehaviorTerminate is a InstanceInterruptionBehavior enum value - InstanceInterruptionBehaviorTerminate = "terminate" -) - -const ( - // InstanceLifecycleSpot is a InstanceLifecycle enum value - InstanceLifecycleSpot = "spot" - - // InstanceLifecycleOnDemand is a InstanceLifecycle enum value - InstanceLifecycleOnDemand = "on-demand" -) - -const ( - // InstanceLifecycleTypeSpot is a InstanceLifecycleType enum value - InstanceLifecycleTypeSpot = "spot" - - // InstanceLifecycleTypeScheduled is a InstanceLifecycleType enum value - InstanceLifecycleTypeScheduled = "scheduled" -) - -const ( - // InstanceMatchCriteriaOpen is a InstanceMatchCriteria enum value - InstanceMatchCriteriaOpen = "open" - - // InstanceMatchCriteriaTargeted is a InstanceMatchCriteria enum value - InstanceMatchCriteriaTargeted = "targeted" -) - -const ( - // InstanceMetadataEndpointStateDisabled is a InstanceMetadataEndpointState enum value - InstanceMetadataEndpointStateDisabled = "disabled" - - // InstanceMetadataEndpointStateEnabled is a InstanceMetadataEndpointState enum value - InstanceMetadataEndpointStateEnabled = "enabled" -) - -const ( - // InstanceMetadataOptionsStatePending is a InstanceMetadataOptionsState enum value - InstanceMetadataOptionsStatePending = "pending" - - // InstanceMetadataOptionsStateApplied is a InstanceMetadataOptionsState enum value - InstanceMetadataOptionsStateApplied = "applied" -) - -const ( - // InstanceStateNamePending is a InstanceStateName enum value - InstanceStateNamePending = "pending" - - // InstanceStateNameRunning is a InstanceStateName enum value - InstanceStateNameRunning = "running" - - // InstanceStateNameShuttingDown is a InstanceStateName enum value - InstanceStateNameShuttingDown = "shutting-down" - - // InstanceStateNameTerminated is a InstanceStateName enum value - InstanceStateNameTerminated = "terminated" - - // InstanceStateNameStopping is a InstanceStateName enum value - InstanceStateNameStopping = "stopping" - - // InstanceStateNameStopped is a InstanceStateName enum value - InstanceStateNameStopped = "stopped" -) - -const ( - // InstanceTypeT1Micro is a InstanceType enum value - InstanceTypeT1Micro = "t1.micro" - - // InstanceTypeT2Nano is a InstanceType enum value - InstanceTypeT2Nano = "t2.nano" - - // InstanceTypeT2Micro is a InstanceType enum value - InstanceTypeT2Micro = "t2.micro" - - // InstanceTypeT2Small is a InstanceType enum value - InstanceTypeT2Small = "t2.small" - - // InstanceTypeT2Medium is a InstanceType enum value - InstanceTypeT2Medium = "t2.medium" - - // InstanceTypeT2Large is a InstanceType enum value - InstanceTypeT2Large = "t2.large" - - // InstanceTypeT2Xlarge is a InstanceType enum value - InstanceTypeT2Xlarge = "t2.xlarge" - - // InstanceTypeT22xlarge is a InstanceType enum value - InstanceTypeT22xlarge = "t2.2xlarge" - - // InstanceTypeT3Nano is a InstanceType enum value - InstanceTypeT3Nano = "t3.nano" - - // InstanceTypeT3Micro is a InstanceType enum value - InstanceTypeT3Micro = "t3.micro" - - // InstanceTypeT3Small is a InstanceType enum value - InstanceTypeT3Small = "t3.small" - - // InstanceTypeT3Medium is a InstanceType enum value - InstanceTypeT3Medium = "t3.medium" - - // InstanceTypeT3Large is a InstanceType enum value - InstanceTypeT3Large = "t3.large" - - // InstanceTypeT3Xlarge is a InstanceType enum value - InstanceTypeT3Xlarge = "t3.xlarge" - - // InstanceTypeT32xlarge is a InstanceType enum value - InstanceTypeT32xlarge = "t3.2xlarge" - - // InstanceTypeT3aNano is a InstanceType enum value - InstanceTypeT3aNano = "t3a.nano" - - // InstanceTypeT3aMicro is a InstanceType enum value - InstanceTypeT3aMicro = "t3a.micro" - - // InstanceTypeT3aSmall is a InstanceType enum value - InstanceTypeT3aSmall = "t3a.small" - - // InstanceTypeT3aMedium is a InstanceType enum value - InstanceTypeT3aMedium = "t3a.medium" - - // InstanceTypeT3aLarge is a InstanceType enum value - InstanceTypeT3aLarge = "t3a.large" - - // InstanceTypeT3aXlarge is a InstanceType enum value - InstanceTypeT3aXlarge = "t3a.xlarge" - - // InstanceTypeT3a2xlarge is a InstanceType enum value - InstanceTypeT3a2xlarge = "t3a.2xlarge" - - // InstanceTypeM1Small is a InstanceType enum value - InstanceTypeM1Small = "m1.small" - - // InstanceTypeM1Medium is a InstanceType enum value - InstanceTypeM1Medium = "m1.medium" - - // InstanceTypeM1Large is a InstanceType enum value - InstanceTypeM1Large = "m1.large" - - // InstanceTypeM1Xlarge is a InstanceType enum value - InstanceTypeM1Xlarge = "m1.xlarge" - - // InstanceTypeM3Medium is a InstanceType enum value - InstanceTypeM3Medium = "m3.medium" - - // InstanceTypeM3Large is a InstanceType enum value - InstanceTypeM3Large = "m3.large" - - // InstanceTypeM3Xlarge is a InstanceType enum value - InstanceTypeM3Xlarge = "m3.xlarge" - - // InstanceTypeM32xlarge is a InstanceType enum value - InstanceTypeM32xlarge = "m3.2xlarge" - - // InstanceTypeM4Large is a InstanceType enum value - InstanceTypeM4Large = "m4.large" - - // InstanceTypeM4Xlarge is a InstanceType enum value - InstanceTypeM4Xlarge = "m4.xlarge" - - // InstanceTypeM42xlarge is a InstanceType enum value - InstanceTypeM42xlarge = "m4.2xlarge" - - // InstanceTypeM44xlarge is a InstanceType enum value - InstanceTypeM44xlarge = "m4.4xlarge" - - // InstanceTypeM410xlarge is a InstanceType enum value - InstanceTypeM410xlarge = "m4.10xlarge" - - // InstanceTypeM416xlarge is a InstanceType enum value - InstanceTypeM416xlarge = "m4.16xlarge" - - // InstanceTypeM2Xlarge is a InstanceType enum value - InstanceTypeM2Xlarge = "m2.xlarge" - - // InstanceTypeM22xlarge is a InstanceType enum value - InstanceTypeM22xlarge = "m2.2xlarge" - - // InstanceTypeM24xlarge is a InstanceType enum value - InstanceTypeM24xlarge = "m2.4xlarge" - - // InstanceTypeCr18xlarge is a InstanceType enum value - InstanceTypeCr18xlarge = "cr1.8xlarge" - - // InstanceTypeR3Large is a InstanceType enum value - InstanceTypeR3Large = "r3.large" - - // InstanceTypeR3Xlarge is a InstanceType enum value - InstanceTypeR3Xlarge = "r3.xlarge" - - // InstanceTypeR32xlarge is a InstanceType enum value - InstanceTypeR32xlarge = "r3.2xlarge" - - // InstanceTypeR34xlarge is a InstanceType enum value - InstanceTypeR34xlarge = "r3.4xlarge" - - // InstanceTypeR38xlarge is a InstanceType enum value - InstanceTypeR38xlarge = "r3.8xlarge" - - // InstanceTypeR4Large is a InstanceType enum value - InstanceTypeR4Large = "r4.large" - - // InstanceTypeR4Xlarge is a InstanceType enum value - InstanceTypeR4Xlarge = "r4.xlarge" - - // InstanceTypeR42xlarge is a InstanceType enum value - InstanceTypeR42xlarge = "r4.2xlarge" - - // InstanceTypeR44xlarge is a InstanceType enum value - InstanceTypeR44xlarge = "r4.4xlarge" - - // InstanceTypeR48xlarge is a InstanceType enum value - InstanceTypeR48xlarge = "r4.8xlarge" - - // InstanceTypeR416xlarge is a InstanceType enum value - InstanceTypeR416xlarge = "r4.16xlarge" - - // InstanceTypeR5Large is a InstanceType enum value - InstanceTypeR5Large = "r5.large" - - // InstanceTypeR5Xlarge is a InstanceType enum value - InstanceTypeR5Xlarge = "r5.xlarge" - - // InstanceTypeR52xlarge is a InstanceType enum value - InstanceTypeR52xlarge = "r5.2xlarge" - - // InstanceTypeR54xlarge is a InstanceType enum value - InstanceTypeR54xlarge = "r5.4xlarge" - - // InstanceTypeR58xlarge is a InstanceType enum value - InstanceTypeR58xlarge = "r5.8xlarge" - - // InstanceTypeR512xlarge is a InstanceType enum value - InstanceTypeR512xlarge = "r5.12xlarge" - - // InstanceTypeR516xlarge is a InstanceType enum value - InstanceTypeR516xlarge = "r5.16xlarge" - - // InstanceTypeR524xlarge is a InstanceType enum value - InstanceTypeR524xlarge = "r5.24xlarge" - - // InstanceTypeR5Metal is a InstanceType enum value - InstanceTypeR5Metal = "r5.metal" - - // InstanceTypeR5aLarge is a InstanceType enum value - InstanceTypeR5aLarge = "r5a.large" - - // InstanceTypeR5aXlarge is a InstanceType enum value - InstanceTypeR5aXlarge = "r5a.xlarge" - - // InstanceTypeR5a2xlarge is a InstanceType enum value - InstanceTypeR5a2xlarge = "r5a.2xlarge" - - // InstanceTypeR5a4xlarge is a InstanceType enum value - InstanceTypeR5a4xlarge = "r5a.4xlarge" - - // InstanceTypeR5a8xlarge is a InstanceType enum value - InstanceTypeR5a8xlarge = "r5a.8xlarge" - - // InstanceTypeR5a12xlarge is a InstanceType enum value - InstanceTypeR5a12xlarge = "r5a.12xlarge" - - // InstanceTypeR5a16xlarge is a InstanceType enum value - InstanceTypeR5a16xlarge = "r5a.16xlarge" - - // InstanceTypeR5a24xlarge is a InstanceType enum value - InstanceTypeR5a24xlarge = "r5a.24xlarge" - - // InstanceTypeR5dLarge is a InstanceType enum value - InstanceTypeR5dLarge = "r5d.large" - - // InstanceTypeR5dXlarge is a InstanceType enum value - InstanceTypeR5dXlarge = "r5d.xlarge" - - // InstanceTypeR5d2xlarge is a InstanceType enum value - InstanceTypeR5d2xlarge = "r5d.2xlarge" - - // InstanceTypeR5d4xlarge is a InstanceType enum value - InstanceTypeR5d4xlarge = "r5d.4xlarge" - - // InstanceTypeR5d8xlarge is a InstanceType enum value - InstanceTypeR5d8xlarge = "r5d.8xlarge" - - // InstanceTypeR5d12xlarge is a InstanceType enum value - InstanceTypeR5d12xlarge = "r5d.12xlarge" - - // InstanceTypeR5d16xlarge is a InstanceType enum value - InstanceTypeR5d16xlarge = "r5d.16xlarge" - - // InstanceTypeR5d24xlarge is a InstanceType enum value - InstanceTypeR5d24xlarge = "r5d.24xlarge" - - // InstanceTypeR5dMetal is a InstanceType enum value - InstanceTypeR5dMetal = "r5d.metal" - - // InstanceTypeR5adLarge is a InstanceType enum value - InstanceTypeR5adLarge = "r5ad.large" - - // InstanceTypeR5adXlarge is a InstanceType enum value - InstanceTypeR5adXlarge = "r5ad.xlarge" - - // InstanceTypeR5ad2xlarge is a InstanceType enum value - InstanceTypeR5ad2xlarge = "r5ad.2xlarge" - - // InstanceTypeR5ad4xlarge is a InstanceType enum value - InstanceTypeR5ad4xlarge = "r5ad.4xlarge" - - // InstanceTypeR5ad8xlarge is a InstanceType enum value - InstanceTypeR5ad8xlarge = "r5ad.8xlarge" - - // InstanceTypeR5ad12xlarge is a InstanceType enum value - InstanceTypeR5ad12xlarge = "r5ad.12xlarge" - - // InstanceTypeR5ad16xlarge is a InstanceType enum value - InstanceTypeR5ad16xlarge = "r5ad.16xlarge" - - // InstanceTypeR5ad24xlarge is a InstanceType enum value - InstanceTypeR5ad24xlarge = "r5ad.24xlarge" - - // InstanceTypeX116xlarge is a InstanceType enum value - InstanceTypeX116xlarge = "x1.16xlarge" - - // InstanceTypeX132xlarge is a InstanceType enum value - InstanceTypeX132xlarge = "x1.32xlarge" - - // InstanceTypeX1eXlarge is a InstanceType enum value - InstanceTypeX1eXlarge = "x1e.xlarge" - - // InstanceTypeX1e2xlarge is a InstanceType enum value - InstanceTypeX1e2xlarge = "x1e.2xlarge" - - // InstanceTypeX1e4xlarge is a InstanceType enum value - InstanceTypeX1e4xlarge = "x1e.4xlarge" - - // InstanceTypeX1e8xlarge is a InstanceType enum value - InstanceTypeX1e8xlarge = "x1e.8xlarge" - - // InstanceTypeX1e16xlarge is a InstanceType enum value - InstanceTypeX1e16xlarge = "x1e.16xlarge" - - // InstanceTypeX1e32xlarge is a InstanceType enum value - InstanceTypeX1e32xlarge = "x1e.32xlarge" - - // InstanceTypeI2Xlarge is a InstanceType enum value - InstanceTypeI2Xlarge = "i2.xlarge" - - // InstanceTypeI22xlarge is a InstanceType enum value - InstanceTypeI22xlarge = "i2.2xlarge" - - // InstanceTypeI24xlarge is a InstanceType enum value - InstanceTypeI24xlarge = "i2.4xlarge" - - // InstanceTypeI28xlarge is a InstanceType enum value - InstanceTypeI28xlarge = "i2.8xlarge" - - // InstanceTypeI3Large is a InstanceType enum value - InstanceTypeI3Large = "i3.large" - - // InstanceTypeI3Xlarge is a InstanceType enum value - InstanceTypeI3Xlarge = "i3.xlarge" - - // InstanceTypeI32xlarge is a InstanceType enum value - InstanceTypeI32xlarge = "i3.2xlarge" - - // InstanceTypeI34xlarge is a InstanceType enum value - InstanceTypeI34xlarge = "i3.4xlarge" - - // InstanceTypeI38xlarge is a InstanceType enum value - InstanceTypeI38xlarge = "i3.8xlarge" - - // InstanceTypeI316xlarge is a InstanceType enum value - InstanceTypeI316xlarge = "i3.16xlarge" - - // InstanceTypeI3Metal is a InstanceType enum value - InstanceTypeI3Metal = "i3.metal" - - // InstanceTypeI3enLarge is a InstanceType enum value - InstanceTypeI3enLarge = "i3en.large" - - // InstanceTypeI3enXlarge is a InstanceType enum value - InstanceTypeI3enXlarge = "i3en.xlarge" - - // InstanceTypeI3en2xlarge is a InstanceType enum value - InstanceTypeI3en2xlarge = "i3en.2xlarge" - - // InstanceTypeI3en3xlarge is a InstanceType enum value - InstanceTypeI3en3xlarge = "i3en.3xlarge" - - // InstanceTypeI3en6xlarge is a InstanceType enum value - InstanceTypeI3en6xlarge = "i3en.6xlarge" - - // InstanceTypeI3en12xlarge is a InstanceType enum value - InstanceTypeI3en12xlarge = "i3en.12xlarge" - - // InstanceTypeI3en24xlarge is a InstanceType enum value - InstanceTypeI3en24xlarge = "i3en.24xlarge" - - // InstanceTypeI3enMetal is a InstanceType enum value - InstanceTypeI3enMetal = "i3en.metal" - - // InstanceTypeHi14xlarge is a InstanceType enum value - InstanceTypeHi14xlarge = "hi1.4xlarge" - - // InstanceTypeHs18xlarge is a InstanceType enum value - InstanceTypeHs18xlarge = "hs1.8xlarge" - - // InstanceTypeC1Medium is a InstanceType enum value - InstanceTypeC1Medium = "c1.medium" - - // InstanceTypeC1Xlarge is a InstanceType enum value - InstanceTypeC1Xlarge = "c1.xlarge" - - // InstanceTypeC3Large is a InstanceType enum value - InstanceTypeC3Large = "c3.large" - - // InstanceTypeC3Xlarge is a InstanceType enum value - InstanceTypeC3Xlarge = "c3.xlarge" - - // InstanceTypeC32xlarge is a InstanceType enum value - InstanceTypeC32xlarge = "c3.2xlarge" - - // InstanceTypeC34xlarge is a InstanceType enum value - InstanceTypeC34xlarge = "c3.4xlarge" - - // InstanceTypeC38xlarge is a InstanceType enum value - InstanceTypeC38xlarge = "c3.8xlarge" - - // InstanceTypeC4Large is a InstanceType enum value - InstanceTypeC4Large = "c4.large" - - // InstanceTypeC4Xlarge is a InstanceType enum value - InstanceTypeC4Xlarge = "c4.xlarge" - - // InstanceTypeC42xlarge is a InstanceType enum value - InstanceTypeC42xlarge = "c4.2xlarge" - - // InstanceTypeC44xlarge is a InstanceType enum value - InstanceTypeC44xlarge = "c4.4xlarge" - - // InstanceTypeC48xlarge is a InstanceType enum value - InstanceTypeC48xlarge = "c4.8xlarge" - - // InstanceTypeC5Large is a InstanceType enum value - InstanceTypeC5Large = "c5.large" - - // InstanceTypeC5Xlarge is a InstanceType enum value - InstanceTypeC5Xlarge = "c5.xlarge" - - // InstanceTypeC52xlarge is a InstanceType enum value - InstanceTypeC52xlarge = "c5.2xlarge" - - // InstanceTypeC54xlarge is a InstanceType enum value - InstanceTypeC54xlarge = "c5.4xlarge" - - // InstanceTypeC59xlarge is a InstanceType enum value - InstanceTypeC59xlarge = "c5.9xlarge" - - // InstanceTypeC512xlarge is a InstanceType enum value - InstanceTypeC512xlarge = "c5.12xlarge" - - // InstanceTypeC518xlarge is a InstanceType enum value - InstanceTypeC518xlarge = "c5.18xlarge" - - // InstanceTypeC524xlarge is a InstanceType enum value - InstanceTypeC524xlarge = "c5.24xlarge" - - // InstanceTypeC5Metal is a InstanceType enum value - InstanceTypeC5Metal = "c5.metal" - - // InstanceTypeC5dLarge is a InstanceType enum value - InstanceTypeC5dLarge = "c5d.large" - - // InstanceTypeC5dXlarge is a InstanceType enum value - InstanceTypeC5dXlarge = "c5d.xlarge" - - // InstanceTypeC5d2xlarge is a InstanceType enum value - InstanceTypeC5d2xlarge = "c5d.2xlarge" - - // InstanceTypeC5d4xlarge is a InstanceType enum value - InstanceTypeC5d4xlarge = "c5d.4xlarge" - - // InstanceTypeC5d9xlarge is a InstanceType enum value - InstanceTypeC5d9xlarge = "c5d.9xlarge" - - // InstanceTypeC5d12xlarge is a InstanceType enum value - InstanceTypeC5d12xlarge = "c5d.12xlarge" - - // InstanceTypeC5d18xlarge is a InstanceType enum value - InstanceTypeC5d18xlarge = "c5d.18xlarge" - - // InstanceTypeC5d24xlarge is a InstanceType enum value - InstanceTypeC5d24xlarge = "c5d.24xlarge" - - // InstanceTypeC5dMetal is a InstanceType enum value - InstanceTypeC5dMetal = "c5d.metal" - - // InstanceTypeC5nLarge is a InstanceType enum value - InstanceTypeC5nLarge = "c5n.large" - - // InstanceTypeC5nXlarge is a InstanceType enum value - InstanceTypeC5nXlarge = "c5n.xlarge" - - // InstanceTypeC5n2xlarge is a InstanceType enum value - InstanceTypeC5n2xlarge = "c5n.2xlarge" - - // InstanceTypeC5n4xlarge is a InstanceType enum value - InstanceTypeC5n4xlarge = "c5n.4xlarge" - - // InstanceTypeC5n9xlarge is a InstanceType enum value - InstanceTypeC5n9xlarge = "c5n.9xlarge" - - // InstanceTypeC5n18xlarge is a InstanceType enum value - InstanceTypeC5n18xlarge = "c5n.18xlarge" - - // InstanceTypeCc14xlarge is a InstanceType enum value - InstanceTypeCc14xlarge = "cc1.4xlarge" - - // InstanceTypeCc28xlarge is a InstanceType enum value - InstanceTypeCc28xlarge = "cc2.8xlarge" - - // InstanceTypeG22xlarge is a InstanceType enum value - InstanceTypeG22xlarge = "g2.2xlarge" - - // InstanceTypeG28xlarge is a InstanceType enum value - InstanceTypeG28xlarge = "g2.8xlarge" - - // InstanceTypeG34xlarge is a InstanceType enum value - InstanceTypeG34xlarge = "g3.4xlarge" - - // InstanceTypeG38xlarge is a InstanceType enum value - InstanceTypeG38xlarge = "g3.8xlarge" - - // InstanceTypeG316xlarge is a InstanceType enum value - InstanceTypeG316xlarge = "g3.16xlarge" - - // InstanceTypeG3sXlarge is a InstanceType enum value - InstanceTypeG3sXlarge = "g3s.xlarge" - - // InstanceTypeG4dnXlarge is a InstanceType enum value - InstanceTypeG4dnXlarge = "g4dn.xlarge" - - // InstanceTypeG4dn2xlarge is a InstanceType enum value - InstanceTypeG4dn2xlarge = "g4dn.2xlarge" - - // InstanceTypeG4dn4xlarge is a InstanceType enum value - InstanceTypeG4dn4xlarge = "g4dn.4xlarge" - - // InstanceTypeG4dn8xlarge is a InstanceType enum value - InstanceTypeG4dn8xlarge = "g4dn.8xlarge" - - // InstanceTypeG4dn12xlarge is a InstanceType enum value - InstanceTypeG4dn12xlarge = "g4dn.12xlarge" - - // InstanceTypeG4dn16xlarge is a InstanceType enum value - InstanceTypeG4dn16xlarge = "g4dn.16xlarge" - - // InstanceTypeCg14xlarge is a InstanceType enum value - InstanceTypeCg14xlarge = "cg1.4xlarge" - - // InstanceTypeP2Xlarge is a InstanceType enum value - InstanceTypeP2Xlarge = "p2.xlarge" - - // InstanceTypeP28xlarge is a InstanceType enum value - InstanceTypeP28xlarge = "p2.8xlarge" - - // InstanceTypeP216xlarge is a InstanceType enum value - InstanceTypeP216xlarge = "p2.16xlarge" - - // InstanceTypeP32xlarge is a InstanceType enum value - InstanceTypeP32xlarge = "p3.2xlarge" - - // InstanceTypeP38xlarge is a InstanceType enum value - InstanceTypeP38xlarge = "p3.8xlarge" - - // InstanceTypeP316xlarge is a InstanceType enum value - InstanceTypeP316xlarge = "p3.16xlarge" - - // InstanceTypeP3dn24xlarge is a InstanceType enum value - InstanceTypeP3dn24xlarge = "p3dn.24xlarge" - - // InstanceTypeD2Xlarge is a InstanceType enum value - InstanceTypeD2Xlarge = "d2.xlarge" - - // InstanceTypeD22xlarge is a InstanceType enum value - InstanceTypeD22xlarge = "d2.2xlarge" - - // InstanceTypeD24xlarge is a InstanceType enum value - InstanceTypeD24xlarge = "d2.4xlarge" - - // InstanceTypeD28xlarge is a InstanceType enum value - InstanceTypeD28xlarge = "d2.8xlarge" - - // InstanceTypeF12xlarge is a InstanceType enum value - InstanceTypeF12xlarge = "f1.2xlarge" - - // InstanceTypeF14xlarge is a InstanceType enum value - InstanceTypeF14xlarge = "f1.4xlarge" - - // InstanceTypeF116xlarge is a InstanceType enum value - InstanceTypeF116xlarge = "f1.16xlarge" - - // InstanceTypeM5Large is a InstanceType enum value - InstanceTypeM5Large = "m5.large" - - // InstanceTypeM5Xlarge is a InstanceType enum value - InstanceTypeM5Xlarge = "m5.xlarge" - - // InstanceTypeM52xlarge is a InstanceType enum value - InstanceTypeM52xlarge = "m5.2xlarge" - - // InstanceTypeM54xlarge is a InstanceType enum value - InstanceTypeM54xlarge = "m5.4xlarge" - - // InstanceTypeM58xlarge is a InstanceType enum value - InstanceTypeM58xlarge = "m5.8xlarge" - - // InstanceTypeM512xlarge is a InstanceType enum value - InstanceTypeM512xlarge = "m5.12xlarge" - - // InstanceTypeM516xlarge is a InstanceType enum value - InstanceTypeM516xlarge = "m5.16xlarge" - - // InstanceTypeM524xlarge is a InstanceType enum value - InstanceTypeM524xlarge = "m5.24xlarge" - - // InstanceTypeM5Metal is a InstanceType enum value - InstanceTypeM5Metal = "m5.metal" - - // InstanceTypeM5aLarge is a InstanceType enum value - InstanceTypeM5aLarge = "m5a.large" - - // InstanceTypeM5aXlarge is a InstanceType enum value - InstanceTypeM5aXlarge = "m5a.xlarge" - - // InstanceTypeM5a2xlarge is a InstanceType enum value - InstanceTypeM5a2xlarge = "m5a.2xlarge" - - // InstanceTypeM5a4xlarge is a InstanceType enum value - InstanceTypeM5a4xlarge = "m5a.4xlarge" - - // InstanceTypeM5a8xlarge is a InstanceType enum value - InstanceTypeM5a8xlarge = "m5a.8xlarge" - - // InstanceTypeM5a12xlarge is a InstanceType enum value - InstanceTypeM5a12xlarge = "m5a.12xlarge" - - // InstanceTypeM5a16xlarge is a InstanceType enum value - InstanceTypeM5a16xlarge = "m5a.16xlarge" - - // InstanceTypeM5a24xlarge is a InstanceType enum value - InstanceTypeM5a24xlarge = "m5a.24xlarge" - - // InstanceTypeM5dLarge is a InstanceType enum value - InstanceTypeM5dLarge = "m5d.large" - - // InstanceTypeM5dXlarge is a InstanceType enum value - InstanceTypeM5dXlarge = "m5d.xlarge" - - // InstanceTypeM5d2xlarge is a InstanceType enum value - InstanceTypeM5d2xlarge = "m5d.2xlarge" - - // InstanceTypeM5d4xlarge is a InstanceType enum value - InstanceTypeM5d4xlarge = "m5d.4xlarge" - - // InstanceTypeM5d8xlarge is a InstanceType enum value - InstanceTypeM5d8xlarge = "m5d.8xlarge" - - // InstanceTypeM5d12xlarge is a InstanceType enum value - InstanceTypeM5d12xlarge = "m5d.12xlarge" - - // InstanceTypeM5d16xlarge is a InstanceType enum value - InstanceTypeM5d16xlarge = "m5d.16xlarge" - - // InstanceTypeM5d24xlarge is a InstanceType enum value - InstanceTypeM5d24xlarge = "m5d.24xlarge" - - // InstanceTypeM5dMetal is a InstanceType enum value - InstanceTypeM5dMetal = "m5d.metal" - - // InstanceTypeM5adLarge is a InstanceType enum value - InstanceTypeM5adLarge = "m5ad.large" - - // InstanceTypeM5adXlarge is a InstanceType enum value - InstanceTypeM5adXlarge = "m5ad.xlarge" - - // InstanceTypeM5ad2xlarge is a InstanceType enum value - InstanceTypeM5ad2xlarge = "m5ad.2xlarge" - - // InstanceTypeM5ad4xlarge is a InstanceType enum value - InstanceTypeM5ad4xlarge = "m5ad.4xlarge" - - // InstanceTypeM5ad8xlarge is a InstanceType enum value - InstanceTypeM5ad8xlarge = "m5ad.8xlarge" - - // InstanceTypeM5ad12xlarge is a InstanceType enum value - InstanceTypeM5ad12xlarge = "m5ad.12xlarge" - - // InstanceTypeM5ad16xlarge is a InstanceType enum value - InstanceTypeM5ad16xlarge = "m5ad.16xlarge" - - // InstanceTypeM5ad24xlarge is a InstanceType enum value - InstanceTypeM5ad24xlarge = "m5ad.24xlarge" - - // InstanceTypeH12xlarge is a InstanceType enum value - InstanceTypeH12xlarge = "h1.2xlarge" - - // InstanceTypeH14xlarge is a InstanceType enum value - InstanceTypeH14xlarge = "h1.4xlarge" - - // InstanceTypeH18xlarge is a InstanceType enum value - InstanceTypeH18xlarge = "h1.8xlarge" - - // InstanceTypeH116xlarge is a InstanceType enum value - InstanceTypeH116xlarge = "h1.16xlarge" - - // InstanceTypeZ1dLarge is a InstanceType enum value - InstanceTypeZ1dLarge = "z1d.large" - - // InstanceTypeZ1dXlarge is a InstanceType enum value - InstanceTypeZ1dXlarge = "z1d.xlarge" - - // InstanceTypeZ1d2xlarge is a InstanceType enum value - InstanceTypeZ1d2xlarge = "z1d.2xlarge" - - // InstanceTypeZ1d3xlarge is a InstanceType enum value - InstanceTypeZ1d3xlarge = "z1d.3xlarge" - - // InstanceTypeZ1d6xlarge is a InstanceType enum value - InstanceTypeZ1d6xlarge = "z1d.6xlarge" - - // InstanceTypeZ1d12xlarge is a InstanceType enum value - InstanceTypeZ1d12xlarge = "z1d.12xlarge" - - // InstanceTypeZ1dMetal is a InstanceType enum value - InstanceTypeZ1dMetal = "z1d.metal" - - // InstanceTypeU6tb1Metal is a InstanceType enum value - InstanceTypeU6tb1Metal = "u-6tb1.metal" - - // InstanceTypeU9tb1Metal is a InstanceType enum value - InstanceTypeU9tb1Metal = "u-9tb1.metal" - - // InstanceTypeU12tb1Metal is a InstanceType enum value - InstanceTypeU12tb1Metal = "u-12tb1.metal" - - // InstanceTypeU18tb1Metal is a InstanceType enum value - InstanceTypeU18tb1Metal = "u-18tb1.metal" - - // InstanceTypeU24tb1Metal is a InstanceType enum value - InstanceTypeU24tb1Metal = "u-24tb1.metal" - - // InstanceTypeA1Medium is a InstanceType enum value - InstanceTypeA1Medium = "a1.medium" - - // InstanceTypeA1Large is a InstanceType enum value - InstanceTypeA1Large = "a1.large" - - // InstanceTypeA1Xlarge is a InstanceType enum value - InstanceTypeA1Xlarge = "a1.xlarge" - - // InstanceTypeA12xlarge is a InstanceType enum value - InstanceTypeA12xlarge = "a1.2xlarge" - - // InstanceTypeA14xlarge is a InstanceType enum value - InstanceTypeA14xlarge = "a1.4xlarge" - - // InstanceTypeA1Metal is a InstanceType enum value - InstanceTypeA1Metal = "a1.metal" - - // InstanceTypeM5dnLarge is a InstanceType enum value - InstanceTypeM5dnLarge = "m5dn.large" - - // InstanceTypeM5dnXlarge is a InstanceType enum value - InstanceTypeM5dnXlarge = "m5dn.xlarge" - - // InstanceTypeM5dn2xlarge is a InstanceType enum value - InstanceTypeM5dn2xlarge = "m5dn.2xlarge" - - // InstanceTypeM5dn4xlarge is a InstanceType enum value - InstanceTypeM5dn4xlarge = "m5dn.4xlarge" - - // InstanceTypeM5dn8xlarge is a InstanceType enum value - InstanceTypeM5dn8xlarge = "m5dn.8xlarge" - - // InstanceTypeM5dn12xlarge is a InstanceType enum value - InstanceTypeM5dn12xlarge = "m5dn.12xlarge" - - // InstanceTypeM5dn16xlarge is a InstanceType enum value - InstanceTypeM5dn16xlarge = "m5dn.16xlarge" - - // InstanceTypeM5dn24xlarge is a InstanceType enum value - InstanceTypeM5dn24xlarge = "m5dn.24xlarge" - - // InstanceTypeM5nLarge is a InstanceType enum value - InstanceTypeM5nLarge = "m5n.large" - - // InstanceTypeM5nXlarge is a InstanceType enum value - InstanceTypeM5nXlarge = "m5n.xlarge" - - // InstanceTypeM5n2xlarge is a InstanceType enum value - InstanceTypeM5n2xlarge = "m5n.2xlarge" - - // InstanceTypeM5n4xlarge is a InstanceType enum value - InstanceTypeM5n4xlarge = "m5n.4xlarge" - - // InstanceTypeM5n8xlarge is a InstanceType enum value - InstanceTypeM5n8xlarge = "m5n.8xlarge" - - // InstanceTypeM5n12xlarge is a InstanceType enum value - InstanceTypeM5n12xlarge = "m5n.12xlarge" - - // InstanceTypeM5n16xlarge is a InstanceType enum value - InstanceTypeM5n16xlarge = "m5n.16xlarge" - - // InstanceTypeM5n24xlarge is a InstanceType enum value - InstanceTypeM5n24xlarge = "m5n.24xlarge" - - // InstanceTypeR5dnLarge is a InstanceType enum value - InstanceTypeR5dnLarge = "r5dn.large" - - // InstanceTypeR5dnXlarge is a InstanceType enum value - InstanceTypeR5dnXlarge = "r5dn.xlarge" - - // InstanceTypeR5dn2xlarge is a InstanceType enum value - InstanceTypeR5dn2xlarge = "r5dn.2xlarge" - - // InstanceTypeR5dn4xlarge is a InstanceType enum value - InstanceTypeR5dn4xlarge = "r5dn.4xlarge" - - // InstanceTypeR5dn8xlarge is a InstanceType enum value - InstanceTypeR5dn8xlarge = "r5dn.8xlarge" - - // InstanceTypeR5dn12xlarge is a InstanceType enum value - InstanceTypeR5dn12xlarge = "r5dn.12xlarge" - - // InstanceTypeR5dn16xlarge is a InstanceType enum value - InstanceTypeR5dn16xlarge = "r5dn.16xlarge" - - // InstanceTypeR5dn24xlarge is a InstanceType enum value - InstanceTypeR5dn24xlarge = "r5dn.24xlarge" - - // InstanceTypeR5nLarge is a InstanceType enum value - InstanceTypeR5nLarge = "r5n.large" - - // InstanceTypeR5nXlarge is a InstanceType enum value - InstanceTypeR5nXlarge = "r5n.xlarge" - - // InstanceTypeR5n2xlarge is a InstanceType enum value - InstanceTypeR5n2xlarge = "r5n.2xlarge" - - // InstanceTypeR5n4xlarge is a InstanceType enum value - InstanceTypeR5n4xlarge = "r5n.4xlarge" - - // InstanceTypeR5n8xlarge is a InstanceType enum value - InstanceTypeR5n8xlarge = "r5n.8xlarge" - - // InstanceTypeR5n12xlarge is a InstanceType enum value - InstanceTypeR5n12xlarge = "r5n.12xlarge" - - // InstanceTypeR5n16xlarge is a InstanceType enum value - InstanceTypeR5n16xlarge = "r5n.16xlarge" - - // InstanceTypeR5n24xlarge is a InstanceType enum value - InstanceTypeR5n24xlarge = "r5n.24xlarge" -) - -const ( - // InstanceTypeHypervisorNitro is a InstanceTypeHypervisor enum value - InstanceTypeHypervisorNitro = "nitro" - - // InstanceTypeHypervisorXen is a InstanceTypeHypervisor enum value - InstanceTypeHypervisorXen = "xen" -) - -const ( - // InterfacePermissionTypeInstanceAttach is a InterfacePermissionType enum value - InterfacePermissionTypeInstanceAttach = "INSTANCE-ATTACH" - - // InterfacePermissionTypeEipAssociate is a InterfacePermissionType enum value - InterfacePermissionTypeEipAssociate = "EIP-ASSOCIATE" -) - -const ( - // Ipv6SupportValueEnable is a Ipv6SupportValue enum value - Ipv6SupportValueEnable = "enable" - - // Ipv6SupportValueDisable is a Ipv6SupportValue enum value - Ipv6SupportValueDisable = "disable" -) - -const ( - // LaunchTemplateErrorCodeLaunchTemplateIdDoesNotExist is a LaunchTemplateErrorCode enum value - LaunchTemplateErrorCodeLaunchTemplateIdDoesNotExist = "launchTemplateIdDoesNotExist" - - // LaunchTemplateErrorCodeLaunchTemplateIdMalformed is a LaunchTemplateErrorCode enum value - LaunchTemplateErrorCodeLaunchTemplateIdMalformed = "launchTemplateIdMalformed" - - // LaunchTemplateErrorCodeLaunchTemplateNameDoesNotExist is a LaunchTemplateErrorCode enum value - LaunchTemplateErrorCodeLaunchTemplateNameDoesNotExist = "launchTemplateNameDoesNotExist" - - // LaunchTemplateErrorCodeLaunchTemplateNameMalformed is a LaunchTemplateErrorCode enum value - LaunchTemplateErrorCodeLaunchTemplateNameMalformed = "launchTemplateNameMalformed" - - // LaunchTemplateErrorCodeLaunchTemplateVersionDoesNotExist is a LaunchTemplateErrorCode enum value - LaunchTemplateErrorCodeLaunchTemplateVersionDoesNotExist = "launchTemplateVersionDoesNotExist" - - // LaunchTemplateErrorCodeUnexpectedError is a LaunchTemplateErrorCode enum value - LaunchTemplateErrorCodeUnexpectedError = "unexpectedError" -) - -const ( - // ListingStateAvailable is a ListingState enum value - ListingStateAvailable = "available" - - // ListingStateSold is a ListingState enum value - ListingStateSold = "sold" - - // ListingStateCancelled is a ListingState enum value - ListingStateCancelled = "cancelled" - - // ListingStatePending is a ListingState enum value - ListingStatePending = "pending" -) - -const ( - // ListingStatusActive is a ListingStatus enum value - ListingStatusActive = "active" - - // ListingStatusPending is a ListingStatus enum value - ListingStatusPending = "pending" - - // ListingStatusCancelled is a ListingStatus enum value - ListingStatusCancelled = "cancelled" - - // ListingStatusClosed is a ListingStatus enum value - ListingStatusClosed = "closed" -) - -const ( - // LocationTypeRegion is a LocationType enum value - LocationTypeRegion = "region" - - // LocationTypeAvailabilityZone is a LocationType enum value - LocationTypeAvailabilityZone = "availability-zone" - - // LocationTypeAvailabilityZoneId is a LocationType enum value - LocationTypeAvailabilityZoneId = "availability-zone-id" -) - -const ( - // LogDestinationTypeCloudWatchLogs is a LogDestinationType enum value - LogDestinationTypeCloudWatchLogs = "cloud-watch-logs" - - // LogDestinationTypeS3 is a LogDestinationType enum value - LogDestinationTypeS3 = "s3" -) - -const ( - // MarketTypeSpot is a MarketType enum value - MarketTypeSpot = "spot" -) - -const ( - // MonitoringStateDisabled is a MonitoringState enum value - MonitoringStateDisabled = "disabled" - - // MonitoringStateDisabling is a MonitoringState enum value - MonitoringStateDisabling = "disabling" - - // MonitoringStateEnabled is a MonitoringState enum value - MonitoringStateEnabled = "enabled" - - // MonitoringStatePending is a MonitoringState enum value - MonitoringStatePending = "pending" -) - -const ( - // MoveStatusMovingToVpc is a MoveStatus enum value - MoveStatusMovingToVpc = "movingToVpc" - - // MoveStatusRestoringToClassic is a MoveStatus enum value - MoveStatusRestoringToClassic = "restoringToClassic" -) - -const ( - // NatGatewayStatePending is a NatGatewayState enum value - NatGatewayStatePending = "pending" - - // NatGatewayStateFailed is a NatGatewayState enum value - NatGatewayStateFailed = "failed" - - // NatGatewayStateAvailable is a NatGatewayState enum value - NatGatewayStateAvailable = "available" - - // NatGatewayStateDeleting is a NatGatewayState enum value - NatGatewayStateDeleting = "deleting" - - // NatGatewayStateDeleted is a NatGatewayState enum value - NatGatewayStateDeleted = "deleted" -) - -const ( - // NetworkInterfaceAttributeDescription is a NetworkInterfaceAttribute enum value - NetworkInterfaceAttributeDescription = "description" - - // NetworkInterfaceAttributeGroupSet is a NetworkInterfaceAttribute enum value - NetworkInterfaceAttributeGroupSet = "groupSet" - - // NetworkInterfaceAttributeSourceDestCheck is a NetworkInterfaceAttribute enum value - NetworkInterfaceAttributeSourceDestCheck = "sourceDestCheck" - - // NetworkInterfaceAttributeAttachment is a NetworkInterfaceAttribute enum value - NetworkInterfaceAttributeAttachment = "attachment" -) - -const ( - // NetworkInterfaceCreationTypeEfa is a NetworkInterfaceCreationType enum value - NetworkInterfaceCreationTypeEfa = "efa" -) - -const ( - // NetworkInterfacePermissionStateCodePending is a NetworkInterfacePermissionStateCode enum value - NetworkInterfacePermissionStateCodePending = "pending" - - // NetworkInterfacePermissionStateCodeGranted is a NetworkInterfacePermissionStateCode enum value - NetworkInterfacePermissionStateCodeGranted = "granted" - - // NetworkInterfacePermissionStateCodeRevoking is a NetworkInterfacePermissionStateCode enum value - NetworkInterfacePermissionStateCodeRevoking = "revoking" - - // NetworkInterfacePermissionStateCodeRevoked is a NetworkInterfacePermissionStateCode enum value - NetworkInterfacePermissionStateCodeRevoked = "revoked" -) - -const ( - // NetworkInterfaceStatusAvailable is a NetworkInterfaceStatus enum value - NetworkInterfaceStatusAvailable = "available" - - // NetworkInterfaceStatusAssociated is a NetworkInterfaceStatus enum value - NetworkInterfaceStatusAssociated = "associated" - - // NetworkInterfaceStatusAttaching is a NetworkInterfaceStatus enum value - NetworkInterfaceStatusAttaching = "attaching" - - // NetworkInterfaceStatusInUse is a NetworkInterfaceStatus enum value - NetworkInterfaceStatusInUse = "in-use" - - // NetworkInterfaceStatusDetaching is a NetworkInterfaceStatus enum value - NetworkInterfaceStatusDetaching = "detaching" -) - -const ( - // NetworkInterfaceTypeInterface is a NetworkInterfaceType enum value - NetworkInterfaceTypeInterface = "interface" - - // NetworkInterfaceTypeNatGateway is a NetworkInterfaceType enum value - NetworkInterfaceTypeNatGateway = "natGateway" - - // NetworkInterfaceTypeEfa is a NetworkInterfaceType enum value - NetworkInterfaceTypeEfa = "efa" -) - -const ( - // OfferingClassTypeStandard is a OfferingClassType enum value - OfferingClassTypeStandard = "standard" - - // OfferingClassTypeConvertible is a OfferingClassType enum value - OfferingClassTypeConvertible = "convertible" -) - -const ( - // OfferingTypeValuesHeavyUtilization is a OfferingTypeValues enum value - OfferingTypeValuesHeavyUtilization = "Heavy Utilization" - - // OfferingTypeValuesMediumUtilization is a OfferingTypeValues enum value - OfferingTypeValuesMediumUtilization = "Medium Utilization" - - // OfferingTypeValuesLightUtilization is a OfferingTypeValues enum value - OfferingTypeValuesLightUtilization = "Light Utilization" - - // OfferingTypeValuesNoUpfront is a OfferingTypeValues enum value - OfferingTypeValuesNoUpfront = "No Upfront" - - // OfferingTypeValuesPartialUpfront is a OfferingTypeValues enum value - OfferingTypeValuesPartialUpfront = "Partial Upfront" - - // OfferingTypeValuesAllUpfront is a OfferingTypeValues enum value - OfferingTypeValuesAllUpfront = "All Upfront" -) - -const ( - // OnDemandAllocationStrategyLowestPrice is a OnDemandAllocationStrategy enum value - OnDemandAllocationStrategyLowestPrice = "lowestPrice" - - // OnDemandAllocationStrategyPrioritized is a OnDemandAllocationStrategy enum value - OnDemandAllocationStrategyPrioritized = "prioritized" -) - -const ( - // OperationTypeAdd is a OperationType enum value - OperationTypeAdd = "add" - - // OperationTypeRemove is a OperationType enum value - OperationTypeRemove = "remove" -) - -const ( - // PaymentOptionAllUpfront is a PaymentOption enum value - PaymentOptionAllUpfront = "AllUpfront" - - // PaymentOptionPartialUpfront is a PaymentOption enum value - PaymentOptionPartialUpfront = "PartialUpfront" - - // PaymentOptionNoUpfront is a PaymentOption enum value - PaymentOptionNoUpfront = "NoUpfront" -) - -const ( - // PermissionGroupAll is a PermissionGroup enum value - PermissionGroupAll = "all" -) - -const ( - // PlacementGroupStatePending is a PlacementGroupState enum value - PlacementGroupStatePending = "pending" - - // PlacementGroupStateAvailable is a PlacementGroupState enum value - PlacementGroupStateAvailable = "available" - - // PlacementGroupStateDeleting is a PlacementGroupState enum value - PlacementGroupStateDeleting = "deleting" - - // PlacementGroupStateDeleted is a PlacementGroupState enum value - PlacementGroupStateDeleted = "deleted" -) - -const ( - // PlacementGroupStrategyCluster is a PlacementGroupStrategy enum value - PlacementGroupStrategyCluster = "cluster" - - // PlacementGroupStrategyPartition is a PlacementGroupStrategy enum value - PlacementGroupStrategyPartition = "partition" - - // PlacementGroupStrategySpread is a PlacementGroupStrategy enum value - PlacementGroupStrategySpread = "spread" -) - -const ( - // PlacementStrategyCluster is a PlacementStrategy enum value - PlacementStrategyCluster = "cluster" - - // PlacementStrategySpread is a PlacementStrategy enum value - PlacementStrategySpread = "spread" - - // PlacementStrategyPartition is a PlacementStrategy enum value - PlacementStrategyPartition = "partition" -) - -const ( - // PlatformValuesWindows is a PlatformValues enum value - PlatformValuesWindows = "Windows" -) - -const ( - // PrincipalTypeAll is a PrincipalType enum value - PrincipalTypeAll = "All" - - // PrincipalTypeService is a PrincipalType enum value - PrincipalTypeService = "Service" - - // PrincipalTypeOrganizationUnit is a PrincipalType enum value - PrincipalTypeOrganizationUnit = "OrganizationUnit" - - // PrincipalTypeAccount is a PrincipalType enum value - PrincipalTypeAccount = "Account" - - // PrincipalTypeUser is a PrincipalType enum value - PrincipalTypeUser = "User" - - // PrincipalTypeRole is a PrincipalType enum value - PrincipalTypeRole = "Role" -) - -const ( - // ProductCodeValuesDevpay is a ProductCodeValues enum value - ProductCodeValuesDevpay = "devpay" - - // ProductCodeValuesMarketplace is a ProductCodeValues enum value - ProductCodeValuesMarketplace = "marketplace" -) - -const ( - // RIProductDescriptionLinuxUnix is a RIProductDescription enum value - RIProductDescriptionLinuxUnix = "Linux/UNIX" - - // RIProductDescriptionLinuxUnixamazonVpc is a RIProductDescription enum value - RIProductDescriptionLinuxUnixamazonVpc = "Linux/UNIX (Amazon VPC)" - - // RIProductDescriptionWindows is a RIProductDescription enum value - RIProductDescriptionWindows = "Windows" - - // RIProductDescriptionWindowsAmazonVpc is a RIProductDescription enum value - RIProductDescriptionWindowsAmazonVpc = "Windows (Amazon VPC)" -) - -const ( - // RecurringChargeFrequencyHourly is a RecurringChargeFrequency enum value - RecurringChargeFrequencyHourly = "Hourly" -) - -const ( - // ReportInstanceReasonCodesInstanceStuckInState is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesInstanceStuckInState = "instance-stuck-in-state" - - // ReportInstanceReasonCodesUnresponsive is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesUnresponsive = "unresponsive" - - // ReportInstanceReasonCodesNotAcceptingCredentials is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesNotAcceptingCredentials = "not-accepting-credentials" - - // ReportInstanceReasonCodesPasswordNotAvailable is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesPasswordNotAvailable = "password-not-available" - - // ReportInstanceReasonCodesPerformanceNetwork is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesPerformanceNetwork = "performance-network" - - // ReportInstanceReasonCodesPerformanceInstanceStore is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesPerformanceInstanceStore = "performance-instance-store" - - // ReportInstanceReasonCodesPerformanceEbsVolume is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesPerformanceEbsVolume = "performance-ebs-volume" - - // ReportInstanceReasonCodesPerformanceOther is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesPerformanceOther = "performance-other" - - // ReportInstanceReasonCodesOther is a ReportInstanceReasonCodes enum value - ReportInstanceReasonCodesOther = "other" -) - -const ( - // ReportStatusTypeOk is a ReportStatusType enum value - ReportStatusTypeOk = "ok" - - // ReportStatusTypeImpaired is a ReportStatusType enum value - ReportStatusTypeImpaired = "impaired" -) - -const ( - // ReservationStatePaymentPending is a ReservationState enum value - ReservationStatePaymentPending = "payment-pending" - - // ReservationStatePaymentFailed is a ReservationState enum value - ReservationStatePaymentFailed = "payment-failed" - - // ReservationStateActive is a ReservationState enum value - ReservationStateActive = "active" - - // ReservationStateRetired is a ReservationState enum value - ReservationStateRetired = "retired" -) - -const ( - // ReservedInstanceStatePaymentPending is a ReservedInstanceState enum value - ReservedInstanceStatePaymentPending = "payment-pending" - - // ReservedInstanceStateActive is a ReservedInstanceState enum value - ReservedInstanceStateActive = "active" - - // ReservedInstanceStatePaymentFailed is a ReservedInstanceState enum value - ReservedInstanceStatePaymentFailed = "payment-failed" - - // ReservedInstanceStateRetired is a ReservedInstanceState enum value - ReservedInstanceStateRetired = "retired" - - // ReservedInstanceStateQueued is a ReservedInstanceState enum value - ReservedInstanceStateQueued = "queued" - - // ReservedInstanceStateQueuedDeleted is a ReservedInstanceState enum value - ReservedInstanceStateQueuedDeleted = "queued-deleted" -) - -const ( - // ResetFpgaImageAttributeNameLoadPermission is a ResetFpgaImageAttributeName enum value - ResetFpgaImageAttributeNameLoadPermission = "loadPermission" -) - -const ( - // ResetImageAttributeNameLaunchPermission is a ResetImageAttributeName enum value - ResetImageAttributeNameLaunchPermission = "launchPermission" -) - -const ( - // ResourceTypeClientVpnEndpoint is a ResourceType enum value - ResourceTypeClientVpnEndpoint = "client-vpn-endpoint" - - // ResourceTypeCustomerGateway is a ResourceType enum value - ResourceTypeCustomerGateway = "customer-gateway" - - // ResourceTypeDedicatedHost is a ResourceType enum value - ResourceTypeDedicatedHost = "dedicated-host" - - // ResourceTypeDhcpOptions is a ResourceType enum value - ResourceTypeDhcpOptions = "dhcp-options" - - // ResourceTypeElasticIp is a ResourceType enum value - ResourceTypeElasticIp = "elastic-ip" - - // ResourceTypeFleet is a ResourceType enum value - ResourceTypeFleet = "fleet" - - // ResourceTypeFpgaImage is a ResourceType enum value - ResourceTypeFpgaImage = "fpga-image" - - // ResourceTypeHostReservation is a ResourceType enum value - ResourceTypeHostReservation = "host-reservation" - - // ResourceTypeImage is a ResourceType enum value - ResourceTypeImage = "image" - - // ResourceTypeInstance is a ResourceType enum value - ResourceTypeInstance = "instance" - - // ResourceTypeInternetGateway is a ResourceType enum value - ResourceTypeInternetGateway = "internet-gateway" - - // ResourceTypeLaunchTemplate is a ResourceType enum value - ResourceTypeLaunchTemplate = "launch-template" - - // ResourceTypeNatgateway is a ResourceType enum value - ResourceTypeNatgateway = "natgateway" - - // ResourceTypeNetworkAcl is a ResourceType enum value - ResourceTypeNetworkAcl = "network-acl" - - // ResourceTypeNetworkInterface is a ResourceType enum value - ResourceTypeNetworkInterface = "network-interface" - - // ResourceTypeReservedInstances is a ResourceType enum value - ResourceTypeReservedInstances = "reserved-instances" - - // ResourceTypeRouteTable is a ResourceType enum value - ResourceTypeRouteTable = "route-table" - - // ResourceTypeSecurityGroup is a ResourceType enum value - ResourceTypeSecurityGroup = "security-group" - - // ResourceTypeSnapshot is a ResourceType enum value - ResourceTypeSnapshot = "snapshot" - - // ResourceTypeSpotInstancesRequest is a ResourceType enum value - ResourceTypeSpotInstancesRequest = "spot-instances-request" - - // ResourceTypeSubnet is a ResourceType enum value - ResourceTypeSubnet = "subnet" - - // ResourceTypeTrafficMirrorFilter is a ResourceType enum value - ResourceTypeTrafficMirrorFilter = "traffic-mirror-filter" - - // ResourceTypeTrafficMirrorSession is a ResourceType enum value - ResourceTypeTrafficMirrorSession = "traffic-mirror-session" - - // ResourceTypeTrafficMirrorTarget is a ResourceType enum value - ResourceTypeTrafficMirrorTarget = "traffic-mirror-target" - - // ResourceTypeTransitGateway is a ResourceType enum value - ResourceTypeTransitGateway = "transit-gateway" - - // ResourceTypeTransitGatewayAttachment is a ResourceType enum value - ResourceTypeTransitGatewayAttachment = "transit-gateway-attachment" - - // ResourceTypeTransitGatewayRouteTable is a ResourceType enum value - ResourceTypeTransitGatewayRouteTable = "transit-gateway-route-table" - - // ResourceTypeVolume is a ResourceType enum value - ResourceTypeVolume = "volume" - - // ResourceTypeVpc is a ResourceType enum value - ResourceTypeVpc = "vpc" - - // ResourceTypeVpcPeeringConnection is a ResourceType enum value - ResourceTypeVpcPeeringConnection = "vpc-peering-connection" - - // ResourceTypeVpnConnection is a ResourceType enum value - ResourceTypeVpnConnection = "vpn-connection" - - // ResourceTypeVpnGateway is a ResourceType enum value - ResourceTypeVpnGateway = "vpn-gateway" -) - -const ( - // RootDeviceTypeEbs is a RootDeviceType enum value - RootDeviceTypeEbs = "ebs" - - // RootDeviceTypeInstanceStore is a RootDeviceType enum value - RootDeviceTypeInstanceStore = "instance-store" -) - -const ( - // RouteOriginCreateRouteTable is a RouteOrigin enum value - RouteOriginCreateRouteTable = "CreateRouteTable" - - // RouteOriginCreateRoute is a RouteOrigin enum value - RouteOriginCreateRoute = "CreateRoute" - - // RouteOriginEnableVgwRoutePropagation is a RouteOrigin enum value - RouteOriginEnableVgwRoutePropagation = "EnableVgwRoutePropagation" -) - -const ( - // RouteStateActive is a RouteState enum value - RouteStateActive = "active" - - // RouteStateBlackhole is a RouteState enum value - RouteStateBlackhole = "blackhole" -) - -const ( - // RuleActionAllow is a RuleAction enum value - RuleActionAllow = "allow" - - // RuleActionDeny is a RuleAction enum value - RuleActionDeny = "deny" -) - -const ( - // ServiceStatePending is a ServiceState enum value - ServiceStatePending = "Pending" - - // ServiceStateAvailable is a ServiceState enum value - ServiceStateAvailable = "Available" - - // ServiceStateDeleting is a ServiceState enum value - ServiceStateDeleting = "Deleting" - - // ServiceStateDeleted is a ServiceState enum value - ServiceStateDeleted = "Deleted" - - // ServiceStateFailed is a ServiceState enum value - ServiceStateFailed = "Failed" -) - -const ( - // ServiceTypeInterface is a ServiceType enum value - ServiceTypeInterface = "Interface" - - // ServiceTypeGateway is a ServiceType enum value - ServiceTypeGateway = "Gateway" -) - -const ( - // ShutdownBehaviorStop is a ShutdownBehavior enum value - ShutdownBehaviorStop = "stop" - - // ShutdownBehaviorTerminate is a ShutdownBehavior enum value - ShutdownBehaviorTerminate = "terminate" -) - -const ( - // SnapshotAttributeNameProductCodes is a SnapshotAttributeName enum value - SnapshotAttributeNameProductCodes = "productCodes" - - // SnapshotAttributeNameCreateVolumePermission is a SnapshotAttributeName enum value - SnapshotAttributeNameCreateVolumePermission = "createVolumePermission" -) - -const ( - // SnapshotStatePending is a SnapshotState enum value - SnapshotStatePending = "pending" - - // SnapshotStateCompleted is a SnapshotState enum value - SnapshotStateCompleted = "completed" - - // SnapshotStateError is a SnapshotState enum value - SnapshotStateError = "error" -) - -const ( - // SpotAllocationStrategyLowestPrice is a SpotAllocationStrategy enum value - SpotAllocationStrategyLowestPrice = "lowest-price" - - // SpotAllocationStrategyDiversified is a SpotAllocationStrategy enum value - SpotAllocationStrategyDiversified = "diversified" - - // SpotAllocationStrategyCapacityOptimized is a SpotAllocationStrategy enum value - SpotAllocationStrategyCapacityOptimized = "capacity-optimized" -) - -const ( - // SpotInstanceInterruptionBehaviorHibernate is a SpotInstanceInterruptionBehavior enum value - SpotInstanceInterruptionBehaviorHibernate = "hibernate" - - // SpotInstanceInterruptionBehaviorStop is a SpotInstanceInterruptionBehavior enum value - SpotInstanceInterruptionBehaviorStop = "stop" - - // SpotInstanceInterruptionBehaviorTerminate is a SpotInstanceInterruptionBehavior enum value - SpotInstanceInterruptionBehaviorTerminate = "terminate" -) - -const ( - // SpotInstanceStateOpen is a SpotInstanceState enum value - SpotInstanceStateOpen = "open" - - // SpotInstanceStateActive is a SpotInstanceState enum value - SpotInstanceStateActive = "active" - - // SpotInstanceStateClosed is a SpotInstanceState enum value - SpotInstanceStateClosed = "closed" - - // SpotInstanceStateCancelled is a SpotInstanceState enum value - SpotInstanceStateCancelled = "cancelled" - - // SpotInstanceStateFailed is a SpotInstanceState enum value - SpotInstanceStateFailed = "failed" -) - -const ( - // SpotInstanceTypeOneTime is a SpotInstanceType enum value - SpotInstanceTypeOneTime = "one-time" - - // SpotInstanceTypePersistent is a SpotInstanceType enum value - SpotInstanceTypePersistent = "persistent" -) - -const ( - // StatePendingAcceptance is a State enum value - StatePendingAcceptance = "PendingAcceptance" - - // StatePending is a State enum value - StatePending = "Pending" - - // StateAvailable is a State enum value - StateAvailable = "Available" - - // StateDeleting is a State enum value - StateDeleting = "Deleting" - - // StateDeleted is a State enum value - StateDeleted = "Deleted" - - // StateRejected is a State enum value - StateRejected = "Rejected" - - // StateFailed is a State enum value - StateFailed = "Failed" - - // StateExpired is a State enum value - StateExpired = "Expired" -) - -const ( - // StatusMoveInProgress is a Status enum value - StatusMoveInProgress = "MoveInProgress" - - // StatusInVpc is a Status enum value - StatusInVpc = "InVpc" - - // StatusInClassic is a Status enum value - StatusInClassic = "InClassic" -) - -const ( - // StatusNameReachability is a StatusName enum value - StatusNameReachability = "reachability" -) - -const ( - // StatusTypePassed is a StatusType enum value - StatusTypePassed = "passed" - - // StatusTypeFailed is a StatusType enum value - StatusTypeFailed = "failed" - - // StatusTypeInsufficientData is a StatusType enum value - StatusTypeInsufficientData = "insufficient-data" - - // StatusTypeInitializing is a StatusType enum value - StatusTypeInitializing = "initializing" -) - -const ( - // SubnetCidrBlockStateCodeAssociating is a SubnetCidrBlockStateCode enum value - SubnetCidrBlockStateCodeAssociating = "associating" - - // SubnetCidrBlockStateCodeAssociated is a SubnetCidrBlockStateCode enum value - SubnetCidrBlockStateCodeAssociated = "associated" - - // SubnetCidrBlockStateCodeDisassociating is a SubnetCidrBlockStateCode enum value - SubnetCidrBlockStateCodeDisassociating = "disassociating" - - // SubnetCidrBlockStateCodeDisassociated is a SubnetCidrBlockStateCode enum value - SubnetCidrBlockStateCodeDisassociated = "disassociated" - - // SubnetCidrBlockStateCodeFailing is a SubnetCidrBlockStateCode enum value - SubnetCidrBlockStateCodeFailing = "failing" - - // SubnetCidrBlockStateCodeFailed is a SubnetCidrBlockStateCode enum value - SubnetCidrBlockStateCodeFailed = "failed" -) - -const ( - // SubnetStatePending is a SubnetState enum value - SubnetStatePending = "pending" - - // SubnetStateAvailable is a SubnetState enum value - SubnetStateAvailable = "available" -) - -const ( - // SummaryStatusOk is a SummaryStatus enum value - SummaryStatusOk = "ok" - - // SummaryStatusImpaired is a SummaryStatus enum value - SummaryStatusImpaired = "impaired" - - // SummaryStatusInsufficientData is a SummaryStatus enum value - SummaryStatusInsufficientData = "insufficient-data" - - // SummaryStatusNotApplicable is a SummaryStatus enum value - SummaryStatusNotApplicable = "not-applicable" - - // SummaryStatusInitializing is a SummaryStatus enum value - SummaryStatusInitializing = "initializing" -) - -const ( - // TelemetryStatusUp is a TelemetryStatus enum value - TelemetryStatusUp = "UP" - - // TelemetryStatusDown is a TelemetryStatus enum value - TelemetryStatusDown = "DOWN" -) - -const ( - // TenancyDefault is a Tenancy enum value - TenancyDefault = "default" - - // TenancyDedicated is a Tenancy enum value - TenancyDedicated = "dedicated" - - // TenancyHost is a Tenancy enum value - TenancyHost = "host" -) - -const ( - // TrafficDirectionIngress is a TrafficDirection enum value - TrafficDirectionIngress = "ingress" - - // TrafficDirectionEgress is a TrafficDirection enum value - TrafficDirectionEgress = "egress" -) - -const ( - // TrafficMirrorFilterRuleFieldDestinationPortRange is a TrafficMirrorFilterRuleField enum value - TrafficMirrorFilterRuleFieldDestinationPortRange = "destination-port-range" - - // TrafficMirrorFilterRuleFieldSourcePortRange is a TrafficMirrorFilterRuleField enum value - TrafficMirrorFilterRuleFieldSourcePortRange = "source-port-range" - - // TrafficMirrorFilterRuleFieldProtocol is a TrafficMirrorFilterRuleField enum value - TrafficMirrorFilterRuleFieldProtocol = "protocol" - - // TrafficMirrorFilterRuleFieldDescription is a TrafficMirrorFilterRuleField enum value - TrafficMirrorFilterRuleFieldDescription = "description" -) - -const ( - // TrafficMirrorNetworkServiceAmazonDns is a TrafficMirrorNetworkService enum value - TrafficMirrorNetworkServiceAmazonDns = "amazon-dns" -) - -const ( - // TrafficMirrorRuleActionAccept is a TrafficMirrorRuleAction enum value - TrafficMirrorRuleActionAccept = "accept" - - // TrafficMirrorRuleActionReject is a TrafficMirrorRuleAction enum value - TrafficMirrorRuleActionReject = "reject" -) - -const ( - // TrafficMirrorSessionFieldPacketLength is a TrafficMirrorSessionField enum value - TrafficMirrorSessionFieldPacketLength = "packet-length" - - // TrafficMirrorSessionFieldDescription is a TrafficMirrorSessionField enum value - TrafficMirrorSessionFieldDescription = "description" - - // TrafficMirrorSessionFieldVirtualNetworkId is a TrafficMirrorSessionField enum value - TrafficMirrorSessionFieldVirtualNetworkId = "virtual-network-id" -) - -const ( - // TrafficMirrorTargetTypeNetworkInterface is a TrafficMirrorTargetType enum value - TrafficMirrorTargetTypeNetworkInterface = "network-interface" - - // TrafficMirrorTargetTypeNetworkLoadBalancer is a TrafficMirrorTargetType enum value - TrafficMirrorTargetTypeNetworkLoadBalancer = "network-load-balancer" -) - -const ( - // TrafficTypeAccept is a TrafficType enum value - TrafficTypeAccept = "ACCEPT" - - // TrafficTypeReject is a TrafficType enum value - TrafficTypeReject = "REJECT" - - // TrafficTypeAll is a TrafficType enum value - TrafficTypeAll = "ALL" -) - -const ( - // TransitGatewayAssociationStateAssociating is a TransitGatewayAssociationState enum value - TransitGatewayAssociationStateAssociating = "associating" - - // TransitGatewayAssociationStateAssociated is a TransitGatewayAssociationState enum value - TransitGatewayAssociationStateAssociated = "associated" - - // TransitGatewayAssociationStateDisassociating is a TransitGatewayAssociationState enum value - TransitGatewayAssociationStateDisassociating = "disassociating" - - // TransitGatewayAssociationStateDisassociated is a TransitGatewayAssociationState enum value - TransitGatewayAssociationStateDisassociated = "disassociated" -) - -const ( - // TransitGatewayAttachmentResourceTypeVpc is a TransitGatewayAttachmentResourceType enum value - TransitGatewayAttachmentResourceTypeVpc = "vpc" - - // TransitGatewayAttachmentResourceTypeVpn is a TransitGatewayAttachmentResourceType enum value - TransitGatewayAttachmentResourceTypeVpn = "vpn" - - // TransitGatewayAttachmentResourceTypeDirectConnectGateway is a TransitGatewayAttachmentResourceType enum value - TransitGatewayAttachmentResourceTypeDirectConnectGateway = "direct-connect-gateway" -) - -const ( - // TransitGatewayAttachmentStatePendingAcceptance is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStatePendingAcceptance = "pendingAcceptance" - - // TransitGatewayAttachmentStateRollingBack is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateRollingBack = "rollingBack" - - // TransitGatewayAttachmentStatePending is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStatePending = "pending" - - // TransitGatewayAttachmentStateAvailable is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateAvailable = "available" - - // TransitGatewayAttachmentStateModifying is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateModifying = "modifying" - - // TransitGatewayAttachmentStateDeleting is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateDeleting = "deleting" - - // TransitGatewayAttachmentStateDeleted is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateDeleted = "deleted" - - // TransitGatewayAttachmentStateFailed is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateFailed = "failed" - - // TransitGatewayAttachmentStateRejected is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateRejected = "rejected" - - // TransitGatewayAttachmentStateRejecting is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateRejecting = "rejecting" - - // TransitGatewayAttachmentStateFailing is a TransitGatewayAttachmentState enum value - TransitGatewayAttachmentStateFailing = "failing" -) - -const ( - // TransitGatewayPropagationStateEnabling is a TransitGatewayPropagationState enum value - TransitGatewayPropagationStateEnabling = "enabling" - - // TransitGatewayPropagationStateEnabled is a TransitGatewayPropagationState enum value - TransitGatewayPropagationStateEnabled = "enabled" - - // TransitGatewayPropagationStateDisabling is a TransitGatewayPropagationState enum value - TransitGatewayPropagationStateDisabling = "disabling" - - // TransitGatewayPropagationStateDisabled is a TransitGatewayPropagationState enum value - TransitGatewayPropagationStateDisabled = "disabled" -) - -const ( - // TransitGatewayRouteStatePending is a TransitGatewayRouteState enum value - TransitGatewayRouteStatePending = "pending" - - // TransitGatewayRouteStateActive is a TransitGatewayRouteState enum value - TransitGatewayRouteStateActive = "active" - - // TransitGatewayRouteStateBlackhole is a TransitGatewayRouteState enum value - TransitGatewayRouteStateBlackhole = "blackhole" - - // TransitGatewayRouteStateDeleting is a TransitGatewayRouteState enum value - TransitGatewayRouteStateDeleting = "deleting" - - // TransitGatewayRouteStateDeleted is a TransitGatewayRouteState enum value - TransitGatewayRouteStateDeleted = "deleted" -) - -const ( - // TransitGatewayRouteTableStatePending is a TransitGatewayRouteTableState enum value - TransitGatewayRouteTableStatePending = "pending" - - // TransitGatewayRouteTableStateAvailable is a TransitGatewayRouteTableState enum value - TransitGatewayRouteTableStateAvailable = "available" - - // TransitGatewayRouteTableStateDeleting is a TransitGatewayRouteTableState enum value - TransitGatewayRouteTableStateDeleting = "deleting" - - // TransitGatewayRouteTableStateDeleted is a TransitGatewayRouteTableState enum value - TransitGatewayRouteTableStateDeleted = "deleted" -) - -const ( - // TransitGatewayRouteTypeStatic is a TransitGatewayRouteType enum value - TransitGatewayRouteTypeStatic = "static" - - // TransitGatewayRouteTypePropagated is a TransitGatewayRouteType enum value - TransitGatewayRouteTypePropagated = "propagated" -) - -const ( - // TransitGatewayStatePending is a TransitGatewayState enum value - TransitGatewayStatePending = "pending" - - // TransitGatewayStateAvailable is a TransitGatewayState enum value - TransitGatewayStateAvailable = "available" - - // TransitGatewayStateModifying is a TransitGatewayState enum value - TransitGatewayStateModifying = "modifying" - - // TransitGatewayStateDeleting is a TransitGatewayState enum value - TransitGatewayStateDeleting = "deleting" - - // TransitGatewayStateDeleted is a TransitGatewayState enum value - TransitGatewayStateDeleted = "deleted" -) - -const ( - // TransportProtocolTcp is a TransportProtocol enum value - TransportProtocolTcp = "tcp" - - // TransportProtocolUdp is a TransportProtocol enum value - TransportProtocolUdp = "udp" -) - -const ( - // UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdMalformed is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value - UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdMalformed = "InvalidInstanceID.Malformed" - - // UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdNotFound is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value - UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdNotFound = "InvalidInstanceID.NotFound" - - // UnsuccessfulInstanceCreditSpecificationErrorCodeIncorrectInstanceState is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value - UnsuccessfulInstanceCreditSpecificationErrorCodeIncorrectInstanceState = "IncorrectInstanceState" - - // UnsuccessfulInstanceCreditSpecificationErrorCodeInstanceCreditSpecificationNotSupported is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value - UnsuccessfulInstanceCreditSpecificationErrorCodeInstanceCreditSpecificationNotSupported = "InstanceCreditSpecification.NotSupported" -) - -const ( - // UsageClassTypeSpot is a UsageClassType enum value - UsageClassTypeSpot = "spot" - - // UsageClassTypeOnDemand is a UsageClassType enum value - UsageClassTypeOnDemand = "on-demand" -) - -const ( - // VirtualizationTypeHvm is a VirtualizationType enum value - VirtualizationTypeHvm = "hvm" - - // VirtualizationTypeParavirtual is a VirtualizationType enum value - VirtualizationTypeParavirtual = "paravirtual" -) - -const ( - // VolumeAttachmentStateAttaching is a VolumeAttachmentState enum value - VolumeAttachmentStateAttaching = "attaching" - - // VolumeAttachmentStateAttached is a VolumeAttachmentState enum value - VolumeAttachmentStateAttached = "attached" - - // VolumeAttachmentStateDetaching is a VolumeAttachmentState enum value - VolumeAttachmentStateDetaching = "detaching" - - // VolumeAttachmentStateDetached is a VolumeAttachmentState enum value - VolumeAttachmentStateDetached = "detached" - - // VolumeAttachmentStateBusy is a VolumeAttachmentState enum value - VolumeAttachmentStateBusy = "busy" -) - -const ( - // VolumeAttributeNameAutoEnableIo is a VolumeAttributeName enum value - VolumeAttributeNameAutoEnableIo = "autoEnableIO" - - // VolumeAttributeNameProductCodes is a VolumeAttributeName enum value - VolumeAttributeNameProductCodes = "productCodes" -) - -const ( - // VolumeModificationStateModifying is a VolumeModificationState enum value - VolumeModificationStateModifying = "modifying" - - // VolumeModificationStateOptimizing is a VolumeModificationState enum value - VolumeModificationStateOptimizing = "optimizing" - - // VolumeModificationStateCompleted is a VolumeModificationState enum value - VolumeModificationStateCompleted = "completed" - - // VolumeModificationStateFailed is a VolumeModificationState enum value - VolumeModificationStateFailed = "failed" -) - -const ( - // VolumeStateCreating is a VolumeState enum value - VolumeStateCreating = "creating" - - // VolumeStateAvailable is a VolumeState enum value - VolumeStateAvailable = "available" - - // VolumeStateInUse is a VolumeState enum value - VolumeStateInUse = "in-use" - - // VolumeStateDeleting is a VolumeState enum value - VolumeStateDeleting = "deleting" - - // VolumeStateDeleted is a VolumeState enum value - VolumeStateDeleted = "deleted" - - // VolumeStateError is a VolumeState enum value - VolumeStateError = "error" -) - -const ( - // VolumeStatusInfoStatusOk is a VolumeStatusInfoStatus enum value - VolumeStatusInfoStatusOk = "ok" - - // VolumeStatusInfoStatusImpaired is a VolumeStatusInfoStatus enum value - VolumeStatusInfoStatusImpaired = "impaired" - - // VolumeStatusInfoStatusInsufficientData is a VolumeStatusInfoStatus enum value - VolumeStatusInfoStatusInsufficientData = "insufficient-data" -) - -const ( - // VolumeStatusNameIoEnabled is a VolumeStatusName enum value - VolumeStatusNameIoEnabled = "io-enabled" - - // VolumeStatusNameIoPerformance is a VolumeStatusName enum value - VolumeStatusNameIoPerformance = "io-performance" -) - -const ( - // VolumeTypeStandard is a VolumeType enum value - VolumeTypeStandard = "standard" - - // VolumeTypeIo1 is a VolumeType enum value - VolumeTypeIo1 = "io1" - - // VolumeTypeGp2 is a VolumeType enum value - VolumeTypeGp2 = "gp2" - - // VolumeTypeSc1 is a VolumeType enum value - VolumeTypeSc1 = "sc1" - - // VolumeTypeSt1 is a VolumeType enum value - VolumeTypeSt1 = "st1" -) - -const ( - // VpcAttributeNameEnableDnsSupport is a VpcAttributeName enum value - VpcAttributeNameEnableDnsSupport = "enableDnsSupport" - - // VpcAttributeNameEnableDnsHostnames is a VpcAttributeName enum value - VpcAttributeNameEnableDnsHostnames = "enableDnsHostnames" -) - -const ( - // VpcCidrBlockStateCodeAssociating is a VpcCidrBlockStateCode enum value - VpcCidrBlockStateCodeAssociating = "associating" - - // VpcCidrBlockStateCodeAssociated is a VpcCidrBlockStateCode enum value - VpcCidrBlockStateCodeAssociated = "associated" - - // VpcCidrBlockStateCodeDisassociating is a VpcCidrBlockStateCode enum value - VpcCidrBlockStateCodeDisassociating = "disassociating" - - // VpcCidrBlockStateCodeDisassociated is a VpcCidrBlockStateCode enum value - VpcCidrBlockStateCodeDisassociated = "disassociated" - - // VpcCidrBlockStateCodeFailing is a VpcCidrBlockStateCode enum value - VpcCidrBlockStateCodeFailing = "failing" - - // VpcCidrBlockStateCodeFailed is a VpcCidrBlockStateCode enum value - VpcCidrBlockStateCodeFailed = "failed" -) - -const ( - // VpcEndpointTypeInterface is a VpcEndpointType enum value - VpcEndpointTypeInterface = "Interface" - - // VpcEndpointTypeGateway is a VpcEndpointType enum value - VpcEndpointTypeGateway = "Gateway" -) - -const ( - // VpcPeeringConnectionStateReasonCodeInitiatingRequest is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeInitiatingRequest = "initiating-request" - - // VpcPeeringConnectionStateReasonCodePendingAcceptance is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodePendingAcceptance = "pending-acceptance" - - // VpcPeeringConnectionStateReasonCodeActive is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeActive = "active" - - // VpcPeeringConnectionStateReasonCodeDeleted is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeDeleted = "deleted" - - // VpcPeeringConnectionStateReasonCodeRejected is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeRejected = "rejected" - - // VpcPeeringConnectionStateReasonCodeFailed is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeFailed = "failed" - - // VpcPeeringConnectionStateReasonCodeExpired is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeExpired = "expired" - - // VpcPeeringConnectionStateReasonCodeProvisioning is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeProvisioning = "provisioning" - - // VpcPeeringConnectionStateReasonCodeDeleting is a VpcPeeringConnectionStateReasonCode enum value - VpcPeeringConnectionStateReasonCodeDeleting = "deleting" -) - -const ( - // VpcStatePending is a VpcState enum value - VpcStatePending = "pending" - - // VpcStateAvailable is a VpcState enum value - VpcStateAvailable = "available" -) - -const ( - // VpcTenancyDefault is a VpcTenancy enum value - VpcTenancyDefault = "default" -) - -const ( - // VpnEcmpSupportValueEnable is a VpnEcmpSupportValue enum value - VpnEcmpSupportValueEnable = "enable" - - // VpnEcmpSupportValueDisable is a VpnEcmpSupportValue enum value - VpnEcmpSupportValueDisable = "disable" -) - -const ( - // VpnProtocolOpenvpn is a VpnProtocol enum value - VpnProtocolOpenvpn = "openvpn" -) - -const ( - // VpnStatePending is a VpnState enum value - VpnStatePending = "pending" - - // VpnStateAvailable is a VpnState enum value - VpnStateAvailable = "available" - - // VpnStateDeleting is a VpnState enum value - VpnStateDeleting = "deleting" - - // VpnStateDeleted is a VpnState enum value - VpnStateDeleted = "deleted" -) - -const ( - // VpnStaticRouteSourceStatic is a VpnStaticRouteSource enum value - VpnStaticRouteSourceStatic = "Static" -) - -const ( - // ScopeAvailabilityZone is a scope enum value - ScopeAvailabilityZone = "Availability Zone" - - // ScopeRegion is a scope enum value - ScopeRegion = "Region" -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -package ec2 - -import ( - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awsutil" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/endpoints" - "github.com/aws/aws-sdk-go/aws/request" -) - -const ( - // customRetryerMinRetryDelay sets min retry delay - customRetryerMinRetryDelay = 1 * time.Second - - // customRetryerMaxRetryDelay sets max retry delay - customRetryerMaxRetryDelay = 8 * time.Second -) - -func init() { - initRequest = func(r *request.Request) { - if r.Operation.Name == opCopySnapshot { // fill the PresignedURL parameter - r.Handlers.Build.PushFront(fillPresignedURL) - } - - // only set the retryer on request if config doesn't have a retryer - if r.Config.Retryer == nil && (r.Operation.Name == opModifyNetworkInterfaceAttribute || r.Operation.Name == opAssignPrivateIpAddresses) { - r.Retryer = client.DefaultRetryer{ - NumMaxRetries: client.DefaultRetryerMaxNumRetries, - MinRetryDelay: customRetryerMinRetryDelay, - MinThrottleDelay: customRetryerMinRetryDelay, - MaxRetryDelay: customRetryerMaxRetryDelay, - MaxThrottleDelay: customRetryerMaxRetryDelay, - } - } - } -} - -func fillPresignedURL(r *request.Request) { - if !r.ParamsFilled() { - return - } - - origParams := r.Params.(*CopySnapshotInput) - - // Stop if PresignedURL/DestinationRegion is set - if origParams.PresignedUrl != nil || origParams.DestinationRegion != nil { - return - } - - origParams.DestinationRegion = r.Config.Region - newParams := awsutil.CopyOf(r.Params).(*CopySnapshotInput) - - // Create a new request based on the existing request. We will use this to - // presign the CopySnapshot request against the source region. - cfg := r.Config.Copy(aws.NewConfig(). - WithEndpoint(""). - WithRegion(aws.StringValue(origParams.SourceRegion))) - - clientInfo := r.ClientInfo - resolved, err := r.Config.EndpointResolver.EndpointFor( - clientInfo.ServiceName, aws.StringValue(cfg.Region), - func(opt *endpoints.Options) { - opt.DisableSSL = aws.BoolValue(cfg.DisableSSL) - opt.UseDualStack = aws.BoolValue(cfg.UseDualStack) - }, - ) - if err != nil { - r.Error = err - return - } - - clientInfo.Endpoint = resolved.URL - clientInfo.SigningRegion = resolved.SigningRegion - - // Presign a CopySnapshot request with modified params - req := request.New(*cfg, clientInfo, r.Handlers, r.Retryer, r.Operation, newParams, r.Data) - url, err := req.Presign(5 * time.Minute) // 5 minutes should be enough. - if err != nil { // bubble error back up to original request - r.Error = err - return - } - - // We have our URL, set it on params - origParams.PresignedUrl = &url -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -// Package ec2 provides the client and types for making API -// requests to Amazon Elastic Compute Cloud. -// -// Amazon Elastic Compute Cloud (Amazon EC2) provides secure and resizable computing -// capacity in the AWS cloud. Using Amazon EC2 eliminates the need to invest -// in hardware up front, so you can develop and deploy applications faster. -// -// To learn more, see the following resources: -// -// * Amazon EC2: AmazonEC2 product page (http://aws.amazon.com/ec2), Amazon -// EC2 documentation (http://aws.amazon.com/documentation/ec2) -// -// * Amazon EBS: Amazon EBS product page (http://aws.amazon.com/ebs), Amazon -// EBS documentation (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) -// -// * Amazon VPC: Amazon VPC product page (http://aws.amazon.com/vpc), Amazon -// VPC documentation (http://aws.amazon.com/documentation/vpc) -// -// * AWS VPN: AWS VPN product page (http://aws.amazon.com/vpn), AWS VPN documentation -// (http://aws.amazon.com/documentation/vpn) -// -// See https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15 for more information on this service. -// -// See ec2 package documentation for more information. -// https://docs.aws.amazon.com/sdk-for-go/api/service/ec2/ -// -// Using the Client -// -// To contact Amazon Elastic Compute Cloud with the SDK use the New function to create -// a new service client. With that client you can make API requests to the service. -// These clients are safe to use concurrently. -// -// See the SDK's documentation for more information on how to use the SDK. -// https://docs.aws.amazon.com/sdk-for-go/api/ -// -// See aws.Config documentation for more information on configuring SDK clients. -// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config -// -// See the Amazon Elastic Compute Cloud client EC2 for more -// information on creating client for this service. -// https://docs.aws.amazon.com/sdk-for-go/api/service/ec2/#New -package ec2 diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package ec2 diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package ec2 - -import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/aws/signer/v4" - "github.com/aws/aws-sdk-go/private/protocol/ec2query" -) - -// EC2 provides the API operation methods for making requests to -// Amazon Elastic Compute Cloud. See this package's package overview docs -// for details on the service. -// -// EC2 methods are safe to use concurrently. It is not safe to -// modify mutate any of the struct's properties though. -type EC2 struct { - *client.Client -} - -// Used for custom client initialization logic -var initClient func(*client.Client) - -// Used for custom request initialization logic -var initRequest func(*request.Request) - -// Service information constants -const ( - ServiceName = "ec2" // Name of service. - EndpointsID = ServiceName // ID to lookup a service endpoint with. - ServiceID = "EC2" // ServiceID is a unique identifer of a specific service. -) - -// New creates a new instance of the EC2 client with a session. -// If additional configuration is needed for the client instance use the optional -// aws.Config parameter to add your extra config. -// -// Example: -// mySession := session.Must(session.NewSession()) -// -// // Create a EC2 client from just a session. -// svc := ec2.New(mySession) -// -// // Create a EC2 client with additional configuration -// svc := ec2.New(mySession, aws.NewConfig().WithRegion("us-west-2")) -func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2 { - c := p.ClientConfig(EndpointsID, cfgs...) - return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) -} - -// newClient creates, initializes and returns a new service client instance. -func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *EC2 { - svc := &EC2{ - Client: client.New( - cfg, - metadata.ClientInfo{ - ServiceName: ServiceName, - ServiceID: ServiceID, - SigningName: signingName, - SigningRegion: signingRegion, - PartitionID: partitionID, - Endpoint: endpoint, - APIVersion: "2016-11-15", - }, - handlers, - ), - } - - // Handlers - svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) - svc.Handlers.Build.PushBackNamed(ec2query.BuildHandler) - svc.Handlers.Unmarshal.PushBackNamed(ec2query.UnmarshalHandler) - svc.Handlers.UnmarshalMeta.PushBackNamed(ec2query.UnmarshalMetaHandler) - svc.Handlers.UnmarshalError.PushBackNamed(ec2query.UnmarshalErrorHandler) - - // Run custom client initialization if present - if initClient != nil { - initClient(svc.Client) - } - - return svc -} - -// newRequest creates a new request for a EC2 operation and runs any -// custom request initialization. -func (c *EC2) newRequest(op *request.Operation, params, data interface{}) *request.Request { - req := c.NewRequest(op, params, data) - - // Run custom request initialization if present - if initRequest != nil { - initRequest(req) - } - - return req -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,1677 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package ec2 - -import ( - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" -) - -// WaitUntilBundleTaskComplete uses the Amazon EC2 API operation -// DescribeBundleTasks to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilBundleTaskComplete(input *DescribeBundleTasksInput) error { - return c.WaitUntilBundleTaskCompleteWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilBundleTaskCompleteWithContext is an extended version of WaitUntilBundleTaskComplete. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilBundleTaskCompleteWithContext(ctx aws.Context, input *DescribeBundleTasksInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilBundleTaskComplete", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "BundleTasks[].State", - Expected: "complete", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "BundleTasks[].State", - Expected: "failed", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeBundleTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeBundleTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilConversionTaskCancelled uses the Amazon EC2 API operation -// DescribeConversionTasks to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilConversionTaskCancelled(input *DescribeConversionTasksInput) error { - return c.WaitUntilConversionTaskCancelledWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilConversionTaskCancelledWithContext is an extended version of WaitUntilConversionTaskCancelled. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilConversionTaskCancelledWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilConversionTaskCancelled", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "ConversionTasks[].State", - Expected: "cancelled", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeConversionTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeConversionTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilConversionTaskCompleted uses the Amazon EC2 API operation -// DescribeConversionTasks to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilConversionTaskCompleted(input *DescribeConversionTasksInput) error { - return c.WaitUntilConversionTaskCompletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilConversionTaskCompletedWithContext is an extended version of WaitUntilConversionTaskCompleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilConversionTaskCompletedWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilConversionTaskCompleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "ConversionTasks[].State", - Expected: "completed", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "ConversionTasks[].State", - Expected: "cancelled", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "ConversionTasks[].State", - Expected: "cancelling", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeConversionTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeConversionTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilConversionTaskDeleted uses the Amazon EC2 API operation -// DescribeConversionTasks to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilConversionTaskDeleted(input *DescribeConversionTasksInput) error { - return c.WaitUntilConversionTaskDeletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilConversionTaskDeletedWithContext is an extended version of WaitUntilConversionTaskDeleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilConversionTaskDeletedWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilConversionTaskDeleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "ConversionTasks[].State", - Expected: "deleted", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeConversionTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeConversionTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilCustomerGatewayAvailable uses the Amazon EC2 API operation -// DescribeCustomerGateways to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilCustomerGatewayAvailable(input *DescribeCustomerGatewaysInput) error { - return c.WaitUntilCustomerGatewayAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilCustomerGatewayAvailableWithContext is an extended version of WaitUntilCustomerGatewayAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilCustomerGatewayAvailableWithContext(ctx aws.Context, input *DescribeCustomerGatewaysInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilCustomerGatewayAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "CustomerGateways[].State", - Expected: "available", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "CustomerGateways[].State", - Expected: "deleted", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "CustomerGateways[].State", - Expected: "deleting", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeCustomerGatewaysInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeCustomerGatewaysRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilExportTaskCancelled uses the Amazon EC2 API operation -// DescribeExportTasks to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilExportTaskCancelled(input *DescribeExportTasksInput) error { - return c.WaitUntilExportTaskCancelledWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilExportTaskCancelledWithContext is an extended version of WaitUntilExportTaskCancelled. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilExportTaskCancelledWithContext(ctx aws.Context, input *DescribeExportTasksInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilExportTaskCancelled", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "ExportTasks[].State", - Expected: "cancelled", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeExportTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeExportTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilExportTaskCompleted uses the Amazon EC2 API operation -// DescribeExportTasks to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilExportTaskCompleted(input *DescribeExportTasksInput) error { - return c.WaitUntilExportTaskCompletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilExportTaskCompletedWithContext is an extended version of WaitUntilExportTaskCompleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilExportTaskCompletedWithContext(ctx aws.Context, input *DescribeExportTasksInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilExportTaskCompleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "ExportTasks[].State", - Expected: "completed", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeExportTasksInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeExportTasksRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilImageAvailable uses the Amazon EC2 API operation -// DescribeImages to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilImageAvailable(input *DescribeImagesInput) error { - return c.WaitUntilImageAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilImageAvailableWithContext is an extended version of WaitUntilImageAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilImageAvailableWithContext(ctx aws.Context, input *DescribeImagesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilImageAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Images[].State", - Expected: "available", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Images[].State", - Expected: "failed", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeImagesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeImagesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilImageExists uses the Amazon EC2 API operation -// DescribeImages to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilImageExists(input *DescribeImagesInput) error { - return c.WaitUntilImageExistsWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilImageExistsWithContext is an extended version of WaitUntilImageExists. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilImageExistsWithContext(ctx aws.Context, input *DescribeImagesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilImageExists", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathWaiterMatch, Argument: "length(Images[]) > `0`", - Expected: true, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidAMIID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeImagesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeImagesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilInstanceExists uses the Amazon EC2 API operation -// DescribeInstances to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilInstanceExists(input *DescribeInstancesInput) error { - return c.WaitUntilInstanceExistsWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilInstanceExistsWithContext is an extended version of WaitUntilInstanceExists. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilInstanceExistsWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilInstanceExists", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(5 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathWaiterMatch, Argument: "length(Reservations[]) > `0`", - Expected: true, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidInstanceID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilInstanceRunning uses the Amazon EC2 API operation -// DescribeInstances to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilInstanceRunning(input *DescribeInstancesInput) error { - return c.WaitUntilInstanceRunningWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilInstanceRunningWithContext is an extended version of WaitUntilInstanceRunning. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilInstanceRunningWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilInstanceRunning", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "running", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "shutting-down", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "terminated", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "stopping", - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidInstanceID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilInstanceStatusOk uses the Amazon EC2 API operation -// DescribeInstanceStatus to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilInstanceStatusOk(input *DescribeInstanceStatusInput) error { - return c.WaitUntilInstanceStatusOkWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilInstanceStatusOkWithContext is an extended version of WaitUntilInstanceStatusOk. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilInstanceStatusOkWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilInstanceStatusOk", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "InstanceStatuses[].InstanceStatus.Status", - Expected: "ok", - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidInstanceID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeInstanceStatusInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstanceStatusRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilInstanceStopped uses the Amazon EC2 API operation -// DescribeInstances to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilInstanceStopped(input *DescribeInstancesInput) error { - return c.WaitUntilInstanceStoppedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilInstanceStoppedWithContext is an extended version of WaitUntilInstanceStopped. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilInstanceStoppedWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilInstanceStopped", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "stopped", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "pending", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "terminated", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilInstanceTerminated uses the Amazon EC2 API operation -// DescribeInstances to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilInstanceTerminated(input *DescribeInstancesInput) error { - return c.WaitUntilInstanceTerminatedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilInstanceTerminatedWithContext is an extended version of WaitUntilInstanceTerminated. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilInstanceTerminatedWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilInstanceTerminated", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "terminated", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "pending", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", - Expected: "stopping", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeInstancesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstancesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilKeyPairExists uses the Amazon EC2 API operation -// DescribeKeyPairs to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilKeyPairExists(input *DescribeKeyPairsInput) error { - return c.WaitUntilKeyPairExistsWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilKeyPairExistsWithContext is an extended version of WaitUntilKeyPairExists. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilKeyPairExistsWithContext(ctx aws.Context, input *DescribeKeyPairsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilKeyPairExists", - MaxAttempts: 6, - Delay: request.ConstantWaiterDelay(5 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathWaiterMatch, Argument: "length(KeyPairs[].KeyName) > `0`", - Expected: true, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidKeyPair.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeKeyPairsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeKeyPairsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilNatGatewayAvailable uses the Amazon EC2 API operation -// DescribeNatGateways to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilNatGatewayAvailable(input *DescribeNatGatewaysInput) error { - return c.WaitUntilNatGatewayAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilNatGatewayAvailableWithContext is an extended version of WaitUntilNatGatewayAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilNatGatewayAvailableWithContext(ctx aws.Context, input *DescribeNatGatewaysInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilNatGatewayAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "NatGateways[].State", - Expected: "available", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "NatGateways[].State", - Expected: "failed", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "NatGateways[].State", - Expected: "deleting", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "NatGateways[].State", - Expected: "deleted", - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "NatGatewayNotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeNatGatewaysInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeNatGatewaysRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilNetworkInterfaceAvailable uses the Amazon EC2 API operation -// DescribeNetworkInterfaces to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilNetworkInterfaceAvailable(input *DescribeNetworkInterfacesInput) error { - return c.WaitUntilNetworkInterfaceAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilNetworkInterfaceAvailableWithContext is an extended version of WaitUntilNetworkInterfaceAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilNetworkInterfaceAvailableWithContext(ctx aws.Context, input *DescribeNetworkInterfacesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilNetworkInterfaceAvailable", - MaxAttempts: 10, - Delay: request.ConstantWaiterDelay(20 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "NetworkInterfaces[].Status", - Expected: "available", - }, - { - State: request.FailureWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidNetworkInterfaceID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeNetworkInterfacesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeNetworkInterfacesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilPasswordDataAvailable uses the Amazon EC2 API operation -// GetPasswordData to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilPasswordDataAvailable(input *GetPasswordDataInput) error { - return c.WaitUntilPasswordDataAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilPasswordDataAvailableWithContext is an extended version of WaitUntilPasswordDataAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilPasswordDataAvailableWithContext(ctx aws.Context, input *GetPasswordDataInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilPasswordDataAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathWaiterMatch, Argument: "length(PasswordData) > `0`", - Expected: true, - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *GetPasswordDataInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.GetPasswordDataRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilSecurityGroupExists uses the Amazon EC2 API operation -// DescribeSecurityGroups to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilSecurityGroupExists(input *DescribeSecurityGroupsInput) error { - return c.WaitUntilSecurityGroupExistsWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilSecurityGroupExistsWithContext is an extended version of WaitUntilSecurityGroupExists. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilSecurityGroupExistsWithContext(ctx aws.Context, input *DescribeSecurityGroupsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilSecurityGroupExists", - MaxAttempts: 6, - Delay: request.ConstantWaiterDelay(5 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathWaiterMatch, Argument: "length(SecurityGroups[].GroupId) > `0`", - Expected: true, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidGroupNotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeSecurityGroupsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSecurityGroupsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilSnapshotCompleted uses the Amazon EC2 API operation -// DescribeSnapshots to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilSnapshotCompleted(input *DescribeSnapshotsInput) error { - return c.WaitUntilSnapshotCompletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilSnapshotCompletedWithContext is an extended version of WaitUntilSnapshotCompleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilSnapshotCompletedWithContext(ctx aws.Context, input *DescribeSnapshotsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilSnapshotCompleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Snapshots[].State", - Expected: "completed", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeSnapshotsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSnapshotsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilSpotInstanceRequestFulfilled uses the Amazon EC2 API operation -// DescribeSpotInstanceRequests to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilSpotInstanceRequestFulfilled(input *DescribeSpotInstanceRequestsInput) error { - return c.WaitUntilSpotInstanceRequestFulfilledWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilSpotInstanceRequestFulfilledWithContext is an extended version of WaitUntilSpotInstanceRequestFulfilled. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilSpotInstanceRequestFulfilledWithContext(ctx aws.Context, input *DescribeSpotInstanceRequestsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilSpotInstanceRequestFulfilled", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", - Expected: "fulfilled", - }, - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", - Expected: "request-canceled-and-instance-running", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", - Expected: "schedule-expired", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", - Expected: "canceled-before-fulfillment", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", - Expected: "bad-parameters", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", - Expected: "system-error", - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidSpotInstanceRequestID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeSpotInstanceRequestsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSpotInstanceRequestsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilSubnetAvailable uses the Amazon EC2 API operation -// DescribeSubnets to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilSubnetAvailable(input *DescribeSubnetsInput) error { - return c.WaitUntilSubnetAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilSubnetAvailableWithContext is an extended version of WaitUntilSubnetAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilSubnetAvailableWithContext(ctx aws.Context, input *DescribeSubnetsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilSubnetAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Subnets[].State", - Expected: "available", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeSubnetsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeSubnetsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilSystemStatusOk uses the Amazon EC2 API operation -// DescribeInstanceStatus to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilSystemStatusOk(input *DescribeInstanceStatusInput) error { - return c.WaitUntilSystemStatusOkWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilSystemStatusOkWithContext is an extended version of WaitUntilSystemStatusOk. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilSystemStatusOkWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilSystemStatusOk", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "InstanceStatuses[].SystemStatus.Status", - Expected: "ok", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeInstanceStatusInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeInstanceStatusRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVolumeAvailable uses the Amazon EC2 API operation -// DescribeVolumes to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVolumeAvailable(input *DescribeVolumesInput) error { - return c.WaitUntilVolumeAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVolumeAvailableWithContext is an extended version of WaitUntilVolumeAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVolumeAvailableWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVolumeAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Volumes[].State", - Expected: "available", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Volumes[].State", - Expected: "deleted", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVolumesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVolumesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVolumeDeleted uses the Amazon EC2 API operation -// DescribeVolumes to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVolumeDeleted(input *DescribeVolumesInput) error { - return c.WaitUntilVolumeDeletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVolumeDeletedWithContext is an extended version of WaitUntilVolumeDeleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVolumeDeletedWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVolumeDeleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Volumes[].State", - Expected: "deleted", - }, - { - State: request.SuccessWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidVolume.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVolumesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVolumesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVolumeInUse uses the Amazon EC2 API operation -// DescribeVolumes to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVolumeInUse(input *DescribeVolumesInput) error { - return c.WaitUntilVolumeInUseWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVolumeInUseWithContext is an extended version of WaitUntilVolumeInUse. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVolumeInUseWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVolumeInUse", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Volumes[].State", - Expected: "in-use", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "Volumes[].State", - Expected: "deleted", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVolumesInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVolumesRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVpcAvailable uses the Amazon EC2 API operation -// DescribeVpcs to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVpcAvailable(input *DescribeVpcsInput) error { - return c.WaitUntilVpcAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVpcAvailableWithContext is an extended version of WaitUntilVpcAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVpcAvailableWithContext(ctx aws.Context, input *DescribeVpcsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVpcAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "Vpcs[].State", - Expected: "available", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVpcsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVpcExists uses the Amazon EC2 API operation -// DescribeVpcs to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVpcExists(input *DescribeVpcsInput) error { - return c.WaitUntilVpcExistsWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVpcExistsWithContext is an extended version of WaitUntilVpcExists. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVpcExistsWithContext(ctx aws.Context, input *DescribeVpcsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVpcExists", - MaxAttempts: 5, - Delay: request.ConstantWaiterDelay(1 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.StatusWaiterMatch, - Expected: 200, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidVpcID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVpcsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVpcPeeringConnectionDeleted uses the Amazon EC2 API operation -// DescribeVpcPeeringConnections to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVpcPeeringConnectionDeleted(input *DescribeVpcPeeringConnectionsInput) error { - return c.WaitUntilVpcPeeringConnectionDeletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVpcPeeringConnectionDeletedWithContext is an extended version of WaitUntilVpcPeeringConnectionDeleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVpcPeeringConnectionDeletedWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVpcPeeringConnectionDeleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "VpcPeeringConnections[].Status.Code", - Expected: "deleted", - }, - { - State: request.SuccessWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidVpcPeeringConnectionID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVpcPeeringConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcPeeringConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVpcPeeringConnectionExists uses the Amazon EC2 API operation -// DescribeVpcPeeringConnections to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVpcPeeringConnectionExists(input *DescribeVpcPeeringConnectionsInput) error { - return c.WaitUntilVpcPeeringConnectionExistsWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVpcPeeringConnectionExistsWithContext is an extended version of WaitUntilVpcPeeringConnectionExists. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVpcPeeringConnectionExistsWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVpcPeeringConnectionExists", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.StatusWaiterMatch, - Expected: 200, - }, - { - State: request.RetryWaiterState, - Matcher: request.ErrorWaiterMatch, - Expected: "InvalidVpcPeeringConnectionID.NotFound", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVpcPeeringConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpcPeeringConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVpnConnectionAvailable uses the Amazon EC2 API operation -// DescribeVpnConnections to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVpnConnectionAvailable(input *DescribeVpnConnectionsInput) error { - return c.WaitUntilVpnConnectionAvailableWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVpnConnectionAvailableWithContext is an extended version of WaitUntilVpnConnectionAvailable. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVpnConnectionAvailableWithContext(ctx aws.Context, input *DescribeVpnConnectionsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVpnConnectionAvailable", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "VpnConnections[].State", - Expected: "available", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "VpnConnections[].State", - Expected: "deleting", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "VpnConnections[].State", - Expected: "deleted", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVpnConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpnConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} - -// WaitUntilVpnConnectionDeleted uses the Amazon EC2 API operation -// DescribeVpnConnections to wait for a condition to be met before returning. -// If the condition is not met within the max attempt window, an error will -// be returned. -func (c *EC2) WaitUntilVpnConnectionDeleted(input *DescribeVpnConnectionsInput) error { - return c.WaitUntilVpnConnectionDeletedWithContext(aws.BackgroundContext(), input) -} - -// WaitUntilVpnConnectionDeletedWithContext is an extended version of WaitUntilVpnConnectionDeleted. -// With the support for passing in a context and options to configure the -// Waiter and the underlying request options. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *EC2) WaitUntilVpnConnectionDeletedWithContext(ctx aws.Context, input *DescribeVpnConnectionsInput, opts ...request.WaiterOption) error { - w := request.Waiter{ - Name: "WaitUntilVpnConnectionDeleted", - MaxAttempts: 40, - Delay: request.ConstantWaiterDelay(15 * time.Second), - Acceptors: []request.WaiterAcceptor{ - { - State: request.SuccessWaiterState, - Matcher: request.PathAllWaiterMatch, Argument: "VpnConnections[].State", - Expected: "deleted", - }, - { - State: request.FailureWaiterState, - Matcher: request.PathAnyWaiterMatch, Argument: "VpnConnections[].State", - Expected: "pending", - }, - }, - Logger: c.Config.Logger, - NewRequest: func(opts []request.Option) (*request.Request, error) { - var inCpy *DescribeVpnConnectionsInput - if input != nil { - tmp := *input - inCpy = &tmp - } - req, _ := c.DescribeVpnConnectionsRequest(inCpy) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return req, nil - }, - } - w.ApplyOptions(opts...) - - return w.WaitWithContext(ctx) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/api.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/api.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/api.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/api.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,3115 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package sts - -import ( - "fmt" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awsutil" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/request" -) - -const opAssumeRole = "AssumeRole" - -// AssumeRoleRequest generates a "aws/request.Request" representing the -// client's request for the AssumeRole operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssumeRole for more information on using the AssumeRole -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssumeRoleRequest method. -// req, resp := client.AssumeRoleRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole -func (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Request, output *AssumeRoleOutput) { - op := &request.Operation{ - Name: opAssumeRole, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssumeRoleInput{} - } - - output = &AssumeRoleOutput{} - req = c.newRequest(op, input, output) - return -} - -// AssumeRole API operation for AWS Security Token Service. -// -// Returns a set of temporary security credentials that you can use to access -// AWS resources that you might not normally have access to. These temporary -// credentials consist of an access key ID, a secret access key, and a security -// token. Typically, you use AssumeRole within your account or for cross-account -// access. For a comparison of AssumeRole with other API operations that produce -// temporary credentials, see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) -// in the IAM User Guide. -// -// You cannot use AWS account root user credentials to call AssumeRole. You -// must use credentials for an IAM user or an IAM role to call AssumeRole. -// -// For cross-account access, imagine that you own multiple accounts and need -// to access resources in each account. You could create long-term credentials -// in each account to access those resources. However, managing all those credentials -// and remembering which one can access which account can be time consuming. -// Instead, you can create one set of long-term credentials in one account. -// Then use temporary security credentials to access all the other accounts -// by assuming roles in those accounts. For more information about roles, see -// IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) -// in the IAM User Guide. -// -// Session Duration -// -// By default, the temporary security credentials created by AssumeRole last -// for one hour. However, you can use the optional DurationSeconds parameter -// to specify the duration of your session. You can provide a value from 900 -// seconds (15 minutes) up to the maximum session duration setting for the role. -// This setting can have a value from 1 hour to 12 hours. To learn how to view -// the maximum value for your role, see View the Maximum Session Duration Setting -// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) -// in the IAM User Guide. The maximum session duration limit applies when you -// use the AssumeRole* API operations or the assume-role* CLI commands. However -// the limit does not apply when you use those operations to create a console -// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) -// in the IAM User Guide. -// -// Permissions -// -// The temporary security credentials created by AssumeRole can be used to make -// API calls to any AWS service with the following exception: You cannot call -// the AWS STS GetFederationToken or GetSessionToken API operations. -// -// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// to this operation. You can pass a single JSON policy document to use as an -// inline session policy. You can also specify up to 10 managed policies to -// use as managed session policies. The plain text that you use for both inline -// and managed session policies can't exceed 2,048 characters. Passing policies -// to this operation returns new temporary credentials. The resulting session's -// permissions are the intersection of the role's identity-based policy and -// the session policies. You can use the role's temporary credentials in subsequent -// AWS API calls to access resources in the account that owns the role. You -// cannot use session policies to grant more permissions than those allowed -// by the identity-based policy of the role that is being assumed. For more -// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// in the IAM User Guide. -// -// To assume a role from a different account, your AWS account must be trusted -// by the role. The trust relationship is defined in the role's trust policy -// when the role is created. That trust policy states which accounts are allowed -// to delegate that access to users in the account. -// -// A user who wants to access a role in a different account must also have permissions -// that are delegated from the user account administrator. The administrator -// must attach a policy that allows the user to call AssumeRole for the ARN -// of the role in the other account. If the user is in the same account as the -// role, then you can do either of the following: -// -// * Attach a policy to the user (identical to the previous user in a different -// account). -// -// * Add the user as a principal directly in the role's trust policy. -// -// In this case, the trust policy acts as an IAM resource-based policy. Users -// in the same account as the role do not need explicit permission to assume -// the role. For more information about trust policies and resource-based policies, -// see IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) -// in the IAM User Guide. -// -// Tags -// -// (Optional) You can pass tag key-value pairs to your session. These tags are -// called session tags. For more information about session tags, see Passing -// Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// An administrator must grant you the permissions necessary to pass session -// tags. The administrator can also create granular permissions to allow you -// to pass only specific session tags. For more information, see Tutorial: Using -// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) -// in the IAM User Guide. -// -// You can set the session tags as transitive. Transitive tags persist during -// role chaining. For more information, see Chaining Roles with Session Tags -// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) -// in the IAM User Guide. -// -// Using MFA with AssumeRole -// -// (Optional) You can include multi-factor authentication (MFA) information -// when you call AssumeRole. This is useful for cross-account scenarios to ensure -// that the user that assumes the role has been authenticated with an AWS MFA -// device. In that scenario, the trust policy of the role being assumed includes -// a condition that tests for MFA authentication. If the caller does not include -// valid MFA information, the request to assume the role is denied. The condition -// in a trust policy that tests for MFA authentication might look like the following -// example. -// -// "Condition": {"Bool": {"aws:MultiFactorAuthPresent": true}} -// -// For more information, see Configuring MFA-Protected API Access (https://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html) -// in the IAM User Guide guide. -// -// To use MFA with AssumeRole, you pass values for the SerialNumber and TokenCode -// parameters. The SerialNumber value identifies the user's hardware or virtual -// MFA device. The TokenCode is the time-based one-time password (TOTP) that -// the MFA device produces. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation AssumeRole for usage and error information. -// -// Returned Error Codes: -// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" -// The request was rejected because the policy document was malformed. The error -// message describes the specific error. -// -// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the total packed size of the session policies -// and session tags combined was too large. An AWS conversion compresses the -// session policy document, session policy ARNs, and session tags into a packed -// binary format that has a separate limit. The error message indicates by percentage -// how close the policies and tags are to the upper size limit. For more information, -// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// You could receive this error even though you meet other defined session policy -// and session tag limits. For more information, see IAM and STS Entity Character -// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// * ErrCodeRegionDisabledException "RegionDisabledException" -// STS is not activated in the requested region for the account that is being -// asked to generate credentials. The account administrator must use the IAM -// console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole -func (c *STS) AssumeRole(input *AssumeRoleInput) (*AssumeRoleOutput, error) { - req, out := c.AssumeRoleRequest(input) - return out, req.Send() -} - -// AssumeRoleWithContext is the same as AssumeRole with the addition of -// the ability to pass a context and additional request options. -// -// See AssumeRole for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) AssumeRoleWithContext(ctx aws.Context, input *AssumeRoleInput, opts ...request.Option) (*AssumeRoleOutput, error) { - req, out := c.AssumeRoleRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssumeRoleWithSAML = "AssumeRoleWithSAML" - -// AssumeRoleWithSAMLRequest generates a "aws/request.Request" representing the -// client's request for the AssumeRoleWithSAML operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssumeRoleWithSAML for more information on using the AssumeRoleWithSAML -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssumeRoleWithSAMLRequest method. -// req, resp := client.AssumeRoleWithSAMLRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML -func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *request.Request, output *AssumeRoleWithSAMLOutput) { - op := &request.Operation{ - Name: opAssumeRoleWithSAML, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssumeRoleWithSAMLInput{} - } - - output = &AssumeRoleWithSAMLOutput{} - req = c.newRequest(op, input, output) - req.Config.Credentials = credentials.AnonymousCredentials - return -} - -// AssumeRoleWithSAML API operation for AWS Security Token Service. -// -// Returns a set of temporary security credentials for users who have been authenticated -// via a SAML authentication response. This operation provides a mechanism for -// tying an enterprise identity store or directory to role-based AWS access -// without user-specific credentials or configuration. For a comparison of AssumeRoleWithSAML -// with the other API operations that produce temporary credentials, see Requesting -// Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) -// in the IAM User Guide. -// -// The temporary security credentials returned by this operation consist of -// an access key ID, a secret access key, and a security token. Applications -// can use these temporary security credentials to sign calls to AWS services. -// -// Session Duration -// -// By default, the temporary security credentials created by AssumeRoleWithSAML -// last for one hour. However, you can use the optional DurationSeconds parameter -// to specify the duration of your session. Your role session lasts for the -// duration that you specify, or until the time specified in the SAML authentication -// response's SessionNotOnOrAfter value, whichever is shorter. You can provide -// a DurationSeconds value from 900 seconds (15 minutes) up to the maximum session -// duration setting for the role. This setting can have a value from 1 hour -// to 12 hours. To learn how to view the maximum value for your role, see View -// the Maximum Session Duration Setting for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) -// in the IAM User Guide. The maximum session duration limit applies when you -// use the AssumeRole* API operations or the assume-role* CLI commands. However -// the limit does not apply when you use those operations to create a console -// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) -// in the IAM User Guide. -// -// Permissions -// -// The temporary security credentials created by AssumeRoleWithSAML can be used -// to make API calls to any AWS service with the following exception: you cannot -// call the STS GetFederationToken or GetSessionToken API operations. -// -// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// to this operation. You can pass a single JSON policy document to use as an -// inline session policy. You can also specify up to 10 managed policies to -// use as managed session policies. The plain text that you use for both inline -// and managed session policies can't exceed 2,048 characters. Passing policies -// to this operation returns new temporary credentials. The resulting session's -// permissions are the intersection of the role's identity-based policy and -// the session policies. You can use the role's temporary credentials in subsequent -// AWS API calls to access resources in the account that owns the role. You -// cannot use session policies to grant more permissions than those allowed -// by the identity-based policy of the role that is being assumed. For more -// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// in the IAM User Guide. -// -// Calling AssumeRoleWithSAML does not require the use of AWS security credentials. -// The identity of the caller is validated by using keys in the metadata document -// that is uploaded for the SAML provider entity for your identity provider. -// -// Calling AssumeRoleWithSAML can result in an entry in your AWS CloudTrail -// logs. The entry includes the value in the NameID element of the SAML assertion. -// We recommend that you use a NameIDType that is not associated with any personally -// identifiable information (PII). For example, you could instead use the persistent -// identifier (urn:oasis:names:tc:SAML:2.0:nameid-format:persistent). -// -// Tags -// -// (Optional) You can configure your IdP to pass attributes into your SAML assertion -// as session tags. Each session tag consists of a key name and an associated -// value. For more information about session tags, see Passing Session Tags -// in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// You can pass up to 50 session tags. The plain text session tag keys can’t -// exceed 128 characters and the values can’t exceed 256 characters. For these -// and additional limits, see IAM and STS Character Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) -// in the IAM User Guide. -// -// An AWS conversion compresses the passed session policies and session tags -// into a packed binary format that has a separate limit. Your request can fail -// for this limit even if your plain text meets the other requirements. The -// PackedPolicySize response element indicates by percentage how close the policies -// and tags for your request are to the upper size limit. -// -// You can pass a session tag with the same key as a tag that is attached to -// the role. When you do, session tags override the role's tags with the same -// key. -// -// An administrator must grant you the permissions necessary to pass session -// tags. The administrator can also create granular permissions to allow you -// to pass only specific session tags. For more information, see Tutorial: Using -// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) -// in the IAM User Guide. -// -// You can set the session tags as transitive. Transitive tags persist during -// role chaining. For more information, see Chaining Roles with Session Tags -// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) -// in the IAM User Guide. -// -// SAML Configuration -// -// Before your application can call AssumeRoleWithSAML, you must configure your -// SAML identity provider (IdP) to issue the claims required by AWS. Additionally, -// you must use AWS Identity and Access Management (IAM) to create a SAML provider -// entity in your AWS account that represents your identity provider. You must -// also create an IAM role that specifies this SAML provider in its trust policy. -// -// For more information, see the following resources: -// -// * About SAML 2.0-based Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html) -// in the IAM User Guide. -// -// * Creating SAML Identity Providers (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html) -// in the IAM User Guide. -// -// * Configuring a Relying Party and Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html) -// in the IAM User Guide. -// -// * Creating a Role for SAML 2.0 Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html) -// in the IAM User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation AssumeRoleWithSAML for usage and error information. -// -// Returned Error Codes: -// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" -// The request was rejected because the policy document was malformed. The error -// message describes the specific error. -// -// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the total packed size of the session policies -// and session tags combined was too large. An AWS conversion compresses the -// session policy document, session policy ARNs, and session tags into a packed -// binary format that has a separate limit. The error message indicates by percentage -// how close the policies and tags are to the upper size limit. For more information, -// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// You could receive this error even though you meet other defined session policy -// and session tag limits. For more information, see IAM and STS Entity Character -// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// * ErrCodeIDPRejectedClaimException "IDPRejectedClaim" -// The identity provider (IdP) reported that authentication failed. This might -// be because the claim is invalid. -// -// If this error is returned for the AssumeRoleWithWebIdentity operation, it -// can also mean that the claim has expired or has been explicitly revoked. -// -// * ErrCodeInvalidIdentityTokenException "InvalidIdentityToken" -// The web identity token that was passed could not be validated by AWS. Get -// a new identity token from the identity provider and then retry the request. -// -// * ErrCodeExpiredTokenException "ExpiredTokenException" -// The web identity token that was passed is expired or is not valid. Get a -// new identity token from the identity provider and then retry the request. -// -// * ErrCodeRegionDisabledException "RegionDisabledException" -// STS is not activated in the requested region for the account that is being -// asked to generate credentials. The account administrator must use the IAM -// console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML -func (c *STS) AssumeRoleWithSAML(input *AssumeRoleWithSAMLInput) (*AssumeRoleWithSAMLOutput, error) { - req, out := c.AssumeRoleWithSAMLRequest(input) - return out, req.Send() -} - -// AssumeRoleWithSAMLWithContext is the same as AssumeRoleWithSAML with the addition of -// the ability to pass a context and additional request options. -// -// See AssumeRoleWithSAML for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) AssumeRoleWithSAMLWithContext(ctx aws.Context, input *AssumeRoleWithSAMLInput, opts ...request.Option) (*AssumeRoleWithSAMLOutput, error) { - req, out := c.AssumeRoleWithSAMLRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opAssumeRoleWithWebIdentity = "AssumeRoleWithWebIdentity" - -// AssumeRoleWithWebIdentityRequest generates a "aws/request.Request" representing the -// client's request for the AssumeRoleWithWebIdentity operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See AssumeRoleWithWebIdentity for more information on using the AssumeRoleWithWebIdentity -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the AssumeRoleWithWebIdentityRequest method. -// req, resp := client.AssumeRoleWithWebIdentityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity -func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityInput) (req *request.Request, output *AssumeRoleWithWebIdentityOutput) { - op := &request.Operation{ - Name: opAssumeRoleWithWebIdentity, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &AssumeRoleWithWebIdentityInput{} - } - - output = &AssumeRoleWithWebIdentityOutput{} - req = c.newRequest(op, input, output) - req.Config.Credentials = credentials.AnonymousCredentials - return -} - -// AssumeRoleWithWebIdentity API operation for AWS Security Token Service. -// -// Returns a set of temporary security credentials for users who have been authenticated -// in a mobile or web application with a web identity provider. Example providers -// include Amazon Cognito, Login with Amazon, Facebook, Google, or any OpenID -// Connect-compatible identity provider. -// -// For mobile applications, we recommend that you use Amazon Cognito. You can -// use Amazon Cognito with the AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) -// and the AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/) -// to uniquely identify a user. You can also supply the user with a consistent -// identity throughout the lifetime of an application. -// -// To learn more about Amazon Cognito, see Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html#d0e840) -// in AWS SDK for Android Developer Guide and Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html#d0e664) -// in the AWS SDK for iOS Developer Guide. -// -// Calling AssumeRoleWithWebIdentity does not require the use of AWS security -// credentials. Therefore, you can distribute an application (for example, on -// mobile devices) that requests temporary security credentials without including -// long-term AWS credentials in the application. You also don't need to deploy -// server-based proxy services that use long-term AWS credentials. Instead, -// the identity of the caller is validated by using a token from the web identity -// provider. For a comparison of AssumeRoleWithWebIdentity with the other API -// operations that produce temporary credentials, see Requesting Temporary Security -// Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) -// in the IAM User Guide. -// -// The temporary security credentials returned by this API consist of an access -// key ID, a secret access key, and a security token. Applications can use these -// temporary security credentials to sign calls to AWS service API operations. -// -// Session Duration -// -// By default, the temporary security credentials created by AssumeRoleWithWebIdentity -// last for one hour. However, you can use the optional DurationSeconds parameter -// to specify the duration of your session. You can provide a value from 900 -// seconds (15 minutes) up to the maximum session duration setting for the role. -// This setting can have a value from 1 hour to 12 hours. To learn how to view -// the maximum value for your role, see View the Maximum Session Duration Setting -// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) -// in the IAM User Guide. The maximum session duration limit applies when you -// use the AssumeRole* API operations or the assume-role* CLI commands. However -// the limit does not apply when you use those operations to create a console -// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) -// in the IAM User Guide. -// -// Permissions -// -// The temporary security credentials created by AssumeRoleWithWebIdentity can -// be used to make API calls to any AWS service with the following exception: -// you cannot call the STS GetFederationToken or GetSessionToken API operations. -// -// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// to this operation. You can pass a single JSON policy document to use as an -// inline session policy. You can also specify up to 10 managed policies to -// use as managed session policies. The plain text that you use for both inline -// and managed session policies can't exceed 2,048 characters. Passing policies -// to this operation returns new temporary credentials. The resulting session's -// permissions are the intersection of the role's identity-based policy and -// the session policies. You can use the role's temporary credentials in subsequent -// AWS API calls to access resources in the account that owns the role. You -// cannot use session policies to grant more permissions than those allowed -// by the identity-based policy of the role that is being assumed. For more -// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// in the IAM User Guide. -// -// Tags -// -// (Optional) You can configure your IdP to pass attributes into your web identity -// token as session tags. Each session tag consists of a key name and an associated -// value. For more information about session tags, see Passing Session Tags -// in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// You can pass up to 50 session tags. The plain text session tag keys can’t -// exceed 128 characters and the values can’t exceed 256 characters. For these -// and additional limits, see IAM and STS Character Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) -// in the IAM User Guide. -// -// An AWS conversion compresses the passed session policies and session tags -// into a packed binary format that has a separate limit. Your request can fail -// for this limit even if your plain text meets the other requirements. The -// PackedPolicySize response element indicates by percentage how close the policies -// and tags for your request are to the upper size limit. -// -// You can pass a session tag with the same key as a tag that is attached to -// the role. When you do, the session tag overrides the role tag with the same -// key. -// -// An administrator must grant you the permissions necessary to pass session -// tags. The administrator can also create granular permissions to allow you -// to pass only specific session tags. For more information, see Tutorial: Using -// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) -// in the IAM User Guide. -// -// You can set the session tags as transitive. Transitive tags persist during -// role chaining. For more information, see Chaining Roles with Session Tags -// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) -// in the IAM User Guide. -// -// Identities -// -// Before your application can call AssumeRoleWithWebIdentity, you must have -// an identity token from a supported identity provider and create a role that -// the application can assume. The role that your application assumes must trust -// the identity provider that is associated with the identity token. In other -// words, the identity provider must be specified in the role's trust policy. -// -// Calling AssumeRoleWithWebIdentity can result in an entry in your AWS CloudTrail -// logs. The entry includes the Subject (http://openid.net/specs/openid-connect-core-1_0.html#Claims) -// of the provided Web Identity Token. We recommend that you avoid using any -// personally identifiable information (PII) in this field. For example, you -// could instead use a GUID or a pairwise identifier, as suggested in the OIDC -// specification (http://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes). -// -// For more information about how to use web identity federation and the AssumeRoleWithWebIdentity -// API, see the following resources: -// -// * Using Web Identity Federation API Operations for Mobile Apps (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html) -// and Federation Through a Web-based Identity Provider (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity). -// -// * Web Identity Federation Playground (https://web-identity-federation-playground.s3.amazonaws.com/index.html). -// Walk through the process of authenticating through Login with Amazon, -// Facebook, or Google, getting temporary security credentials, and then -// using those credentials to make a request to AWS. -// -// * AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) and -// AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/). -// These toolkits contain sample apps that show how to invoke the identity -// providers. The toolkits then show how to use the information from these -// providers to get and use temporary security credentials. -// -// * Web Identity Federation with Mobile Applications (http://aws.amazon.com/articles/web-identity-federation-with-mobile-applications). -// This article discusses web identity federation and shows an example of -// how to use web identity federation to get access to content in Amazon -// S3. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation AssumeRoleWithWebIdentity for usage and error information. -// -// Returned Error Codes: -// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" -// The request was rejected because the policy document was malformed. The error -// message describes the specific error. -// -// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the total packed size of the session policies -// and session tags combined was too large. An AWS conversion compresses the -// session policy document, session policy ARNs, and session tags into a packed -// binary format that has a separate limit. The error message indicates by percentage -// how close the policies and tags are to the upper size limit. For more information, -// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// You could receive this error even though you meet other defined session policy -// and session tag limits. For more information, see IAM and STS Entity Character -// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// * ErrCodeIDPRejectedClaimException "IDPRejectedClaim" -// The identity provider (IdP) reported that authentication failed. This might -// be because the claim is invalid. -// -// If this error is returned for the AssumeRoleWithWebIdentity operation, it -// can also mean that the claim has expired or has been explicitly revoked. -// -// * ErrCodeIDPCommunicationErrorException "IDPCommunicationError" -// The request could not be fulfilled because the identity provider (IDP) that -// was asked to verify the incoming identity token could not be reached. This -// is often a transient error caused by network conditions. Retry the request -// a limited number of times so that you don't exceed the request rate. If the -// error persists, the identity provider might be down or not responding. -// -// * ErrCodeInvalidIdentityTokenException "InvalidIdentityToken" -// The web identity token that was passed could not be validated by AWS. Get -// a new identity token from the identity provider and then retry the request. -// -// * ErrCodeExpiredTokenException "ExpiredTokenException" -// The web identity token that was passed is expired or is not valid. Get a -// new identity token from the identity provider and then retry the request. -// -// * ErrCodeRegionDisabledException "RegionDisabledException" -// STS is not activated in the requested region for the account that is being -// asked to generate credentials. The account administrator must use the IAM -// console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity -func (c *STS) AssumeRoleWithWebIdentity(input *AssumeRoleWithWebIdentityInput) (*AssumeRoleWithWebIdentityOutput, error) { - req, out := c.AssumeRoleWithWebIdentityRequest(input) - return out, req.Send() -} - -// AssumeRoleWithWebIdentityWithContext is the same as AssumeRoleWithWebIdentity with the addition of -// the ability to pass a context and additional request options. -// -// See AssumeRoleWithWebIdentity for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) AssumeRoleWithWebIdentityWithContext(ctx aws.Context, input *AssumeRoleWithWebIdentityInput, opts ...request.Option) (*AssumeRoleWithWebIdentityOutput, error) { - req, out := c.AssumeRoleWithWebIdentityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opDecodeAuthorizationMessage = "DecodeAuthorizationMessage" - -// DecodeAuthorizationMessageRequest generates a "aws/request.Request" representing the -// client's request for the DecodeAuthorizationMessage operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See DecodeAuthorizationMessage for more information on using the DecodeAuthorizationMessage -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the DecodeAuthorizationMessageRequest method. -// req, resp := client.DecodeAuthorizationMessageRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage -func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessageInput) (req *request.Request, output *DecodeAuthorizationMessageOutput) { - op := &request.Operation{ - Name: opDecodeAuthorizationMessage, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &DecodeAuthorizationMessageInput{} - } - - output = &DecodeAuthorizationMessageOutput{} - req = c.newRequest(op, input, output) - return -} - -// DecodeAuthorizationMessage API operation for AWS Security Token Service. -// -// Decodes additional information about the authorization status of a request -// from an encoded message returned in response to an AWS request. -// -// For example, if a user is not authorized to perform an operation that he -// or she has requested, the request returns a Client.UnauthorizedOperation -// response (an HTTP 403 response). Some AWS operations additionally return -// an encoded message that can provide details about this authorization failure. -// -// Only certain AWS operations return an encoded authorization message. The -// documentation for an individual operation indicates whether that operation -// returns an encoded message in addition to returning an HTTP code. -// -// The message is encoded because the details of the authorization status can -// constitute privileged information that the user who requested the operation -// should not see. To decode an authorization status message, a user must be -// granted permissions via an IAM policy to request the DecodeAuthorizationMessage -// (sts:DecodeAuthorizationMessage) action. -// -// The decoded message includes the following type of information: -// -// * Whether the request was denied due to an explicit deny or due to the -// absence of an explicit allow. For more information, see Determining Whether -// a Request is Allowed or Denied (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) -// in the IAM User Guide. -// -// * The principal who made the request. -// -// * The requested action. -// -// * The requested resource. -// -// * The values of condition keys in the context of the user's request. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation DecodeAuthorizationMessage for usage and error information. -// -// Returned Error Codes: -// * ErrCodeInvalidAuthorizationMessageException "InvalidAuthorizationMessageException" -// The error returned if the message passed to DecodeAuthorizationMessage was -// invalid. This can happen if the token contains invalid characters, such as -// linebreaks. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage -func (c *STS) DecodeAuthorizationMessage(input *DecodeAuthorizationMessageInput) (*DecodeAuthorizationMessageOutput, error) { - req, out := c.DecodeAuthorizationMessageRequest(input) - return out, req.Send() -} - -// DecodeAuthorizationMessageWithContext is the same as DecodeAuthorizationMessage with the addition of -// the ability to pass a context and additional request options. -// -// See DecodeAuthorizationMessage for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) DecodeAuthorizationMessageWithContext(ctx aws.Context, input *DecodeAuthorizationMessageInput, opts ...request.Option) (*DecodeAuthorizationMessageOutput, error) { - req, out := c.DecodeAuthorizationMessageRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetAccessKeyInfo = "GetAccessKeyInfo" - -// GetAccessKeyInfoRequest generates a "aws/request.Request" representing the -// client's request for the GetAccessKeyInfo operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetAccessKeyInfo for more information on using the GetAccessKeyInfo -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetAccessKeyInfoRequest method. -// req, resp := client.GetAccessKeyInfoRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetAccessKeyInfo -func (c *STS) GetAccessKeyInfoRequest(input *GetAccessKeyInfoInput) (req *request.Request, output *GetAccessKeyInfoOutput) { - op := &request.Operation{ - Name: opGetAccessKeyInfo, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetAccessKeyInfoInput{} - } - - output = &GetAccessKeyInfoOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetAccessKeyInfo API operation for AWS Security Token Service. -// -// Returns the account identifier for the specified access key ID. -// -// Access keys consist of two parts: an access key ID (for example, AKIAIOSFODNN7EXAMPLE) -// and a secret access key (for example, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY). -// For more information about access keys, see Managing Access Keys for IAM -// Users (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) -// in the IAM User Guide. -// -// When you pass an access key ID to this operation, it returns the ID of the -// AWS account to which the keys belong. Access key IDs beginning with AKIA -// are long-term credentials for an IAM user or the AWS account root user. Access -// key IDs beginning with ASIA are temporary credentials that are created using -// STS operations. If the account in the response belongs to you, you can sign -// in as the root user and review your root user access keys. Then, you can -// pull a credentials report (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html) -// to learn which IAM user owns the keys. To learn who requested the temporary -// credentials for an ASIA access key, view the STS events in your CloudTrail -// logs (https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html) -// in the IAM User Guide. -// -// This operation does not indicate the state of the access key. The key might -// be active, inactive, or deleted. Active keys might not have permissions to -// perform an operation. Providing a deleted access key might return an error -// that the key doesn't exist. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation GetAccessKeyInfo for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetAccessKeyInfo -func (c *STS) GetAccessKeyInfo(input *GetAccessKeyInfoInput) (*GetAccessKeyInfoOutput, error) { - req, out := c.GetAccessKeyInfoRequest(input) - return out, req.Send() -} - -// GetAccessKeyInfoWithContext is the same as GetAccessKeyInfo with the addition of -// the ability to pass a context and additional request options. -// -// See GetAccessKeyInfo for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) GetAccessKeyInfoWithContext(ctx aws.Context, input *GetAccessKeyInfoInput, opts ...request.Option) (*GetAccessKeyInfoOutput, error) { - req, out := c.GetAccessKeyInfoRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetCallerIdentity = "GetCallerIdentity" - -// GetCallerIdentityRequest generates a "aws/request.Request" representing the -// client's request for the GetCallerIdentity operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetCallerIdentity for more information on using the GetCallerIdentity -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetCallerIdentityRequest method. -// req, resp := client.GetCallerIdentityRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity -func (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (req *request.Request, output *GetCallerIdentityOutput) { - op := &request.Operation{ - Name: opGetCallerIdentity, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetCallerIdentityInput{} - } - - output = &GetCallerIdentityOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetCallerIdentity API operation for AWS Security Token Service. -// -// Returns details about the IAM user or role whose credentials are used to -// call the operation. -// -// No permissions are required to perform this operation. If an administrator -// adds a policy to your IAM user or role that explicitly denies access to the -// sts:GetCallerIdentity action, you can still perform this operation. Permissions -// are not required because the same information is returned when an IAM user -// or role is denied access. To view an example response, see I Am Not Authorized -// to Perform: iam:DeleteVirtualMFADevice (https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_access-denied-delete-mfa) -// in the IAM User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation GetCallerIdentity for usage and error information. -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity -func (c *STS) GetCallerIdentity(input *GetCallerIdentityInput) (*GetCallerIdentityOutput, error) { - req, out := c.GetCallerIdentityRequest(input) - return out, req.Send() -} - -// GetCallerIdentityWithContext is the same as GetCallerIdentity with the addition of -// the ability to pass a context and additional request options. -// -// See GetCallerIdentity for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) GetCallerIdentityWithContext(ctx aws.Context, input *GetCallerIdentityInput, opts ...request.Option) (*GetCallerIdentityOutput, error) { - req, out := c.GetCallerIdentityRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetFederationToken = "GetFederationToken" - -// GetFederationTokenRequest generates a "aws/request.Request" representing the -// client's request for the GetFederationToken operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetFederationToken for more information on using the GetFederationToken -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetFederationTokenRequest method. -// req, resp := client.GetFederationTokenRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken -func (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) (req *request.Request, output *GetFederationTokenOutput) { - op := &request.Operation{ - Name: opGetFederationToken, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetFederationTokenInput{} - } - - output = &GetFederationTokenOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetFederationToken API operation for AWS Security Token Service. -// -// Returns a set of temporary security credentials (consisting of an access -// key ID, a secret access key, and a security token) for a federated user. -// A typical use is in a proxy application that gets temporary security credentials -// on behalf of distributed applications inside a corporate network. You must -// call the GetFederationToken operation using the long-term security credentials -// of an IAM user. As a result, this call is appropriate in contexts where those -// credentials can be safely stored, usually in a server-based application. -// For a comparison of GetFederationToken with the other API operations that -// produce temporary credentials, see Requesting Temporary Security Credentials -// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) -// in the IAM User Guide. -// -// You can create a mobile-based or browser-based app that can authenticate -// users using a web identity provider like Login with Amazon, Facebook, Google, -// or an OpenID Connect-compatible identity provider. In this case, we recommend -// that you use Amazon Cognito (http://aws.amazon.com/cognito/) or AssumeRoleWithWebIdentity. -// For more information, see Federation Through a Web-based Identity Provider -// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity) -// in the IAM User Guide. -// -// You can also call GetFederationToken using the security credentials of an -// AWS account root user, but we do not recommend it. Instead, we recommend -// that you create an IAM user for the purpose of the proxy application. Then -// attach a policy to the IAM user that limits federated users to only the actions -// and resources that they need to access. For more information, see IAM Best -// Practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) -// in the IAM User Guide. -// -// Session duration -// -// The temporary credentials are valid for the specified duration, from 900 -// seconds (15 minutes) up to a maximum of 129,600 seconds (36 hours). The default -// session duration is 43,200 seconds (12 hours). Temporary credentials that -// are obtained by using AWS account root user credentials have a maximum duration -// of 3,600 seconds (1 hour). -// -// Permissions -// -// You can use the temporary credentials created by GetFederationToken in any -// AWS service except the following: -// -// * You cannot call any IAM operations using the AWS CLI or the AWS API. -// -// * You cannot call any STS operations except GetCallerIdentity. -// -// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// to this operation. You can pass a single JSON policy document to use as an -// inline session policy. You can also specify up to 10 managed policies to -// use as managed session policies. The plain text that you use for both inline -// and managed session policies can't exceed 2,048 characters. -// -// Though the session policy parameters are optional, if you do not pass a policy, -// then the resulting federated user session has no permissions. When you pass -// session policies, the session permissions are the intersection of the IAM -// user policies and the session policies that you pass. This gives you a way -// to further restrict the permissions for a federated user. You cannot use -// session policies to grant more permissions than those that are defined in -// the permissions policy of the IAM user. For more information, see Session -// Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) -// in the IAM User Guide. For information about using GetFederationToken to -// create temporary security credentials, see GetFederationToken—Federation -// Through a Custom Identity Broker (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getfederationtoken). -// -// You can use the credentials to access a resource that has a resource-based -// policy. If that policy specifically references the federated user session -// in the Principal element of the policy, the session has the permissions allowed -// by the policy. These permissions are granted in addition to the permissions -// granted by the session policies. -// -// Tags -// -// (Optional) You can pass tag key-value pairs to your session. These are called -// session tags. For more information about session tags, see Passing Session -// Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// An administrator must grant you the permissions necessary to pass session -// tags. The administrator can also create granular permissions to allow you -// to pass only specific session tags. For more information, see Tutorial: Using -// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) -// in the IAM User Guide. -// -// Tag key–value pairs are not case sensitive, but case is preserved. This -// means that you cannot have separate Department and department tag keys. Assume -// that the user that you are federating has the Department=Marketing tag and -// you pass the department=engineering session tag. Department and department -// are not saved as separate tags, and the session tag passed in the request -// takes precedence over the user tag. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation GetFederationToken for usage and error information. -// -// Returned Error Codes: -// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" -// The request was rejected because the policy document was malformed. The error -// message describes the specific error. -// -// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the total packed size of the session policies -// and session tags combined was too large. An AWS conversion compresses the -// session policy document, session policy ARNs, and session tags into a packed -// binary format that has a separate limit. The error message indicates by percentage -// how close the policies and tags are to the upper size limit. For more information, -// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -// -// You could receive this error even though you meet other defined session policy -// and session tag limits. For more information, see IAM and STS Entity Character -// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// * ErrCodeRegionDisabledException "RegionDisabledException" -// STS is not activated in the requested region for the account that is being -// asked to generate credentials. The account administrator must use the IAM -// console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken -func (c *STS) GetFederationToken(input *GetFederationTokenInput) (*GetFederationTokenOutput, error) { - req, out := c.GetFederationTokenRequest(input) - return out, req.Send() -} - -// GetFederationTokenWithContext is the same as GetFederationToken with the addition of -// the ability to pass a context and additional request options. -// -// See GetFederationToken for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) GetFederationTokenWithContext(ctx aws.Context, input *GetFederationTokenInput, opts ...request.Option) (*GetFederationTokenOutput, error) { - req, out := c.GetFederationTokenRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -const opGetSessionToken = "GetSessionToken" - -// GetSessionTokenRequest generates a "aws/request.Request" representing the -// client's request for the GetSessionToken operation. The "output" return -// value will be populated with the request's response once the request completes -// successfully. -// -// Use "Send" method on the returned Request to send the API call to the service. -// the "output" return value is not valid until after Send returns without error. -// -// See GetSessionToken for more information on using the GetSessionToken -// API call, and error handling. -// -// This method is useful when you want to inject custom logic or configuration -// into the SDK's request lifecycle. Such as custom headers, or retry logic. -// -// -// // Example sending a request using the GetSessionTokenRequest method. -// req, resp := client.GetSessionTokenRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken -func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request.Request, output *GetSessionTokenOutput) { - op := &request.Operation{ - Name: opGetSessionToken, - HTTPMethod: "POST", - HTTPPath: "/", - } - - if input == nil { - input = &GetSessionTokenInput{} - } - - output = &GetSessionTokenOutput{} - req = c.newRequest(op, input, output) - return -} - -// GetSessionToken API operation for AWS Security Token Service. -// -// Returns a set of temporary credentials for an AWS account or IAM user. The -// credentials consist of an access key ID, a secret access key, and a security -// token. Typically, you use GetSessionToken if you want to use MFA to protect -// programmatic calls to specific AWS API operations like Amazon EC2 StopInstances. -// MFA-enabled IAM users would need to call GetSessionToken and submit an MFA -// code that is associated with their MFA device. Using the temporary security -// credentials that are returned from the call, IAM users can then make programmatic -// calls to API operations that require MFA authentication. If you do not supply -// a correct MFA code, then the API returns an access denied error. For a comparison -// of GetSessionToken with the other API operations that produce temporary credentials, -// see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) -// in the IAM User Guide. -// -// Session Duration -// -// The GetSessionToken operation must be called by using the long-term AWS security -// credentials of the AWS account root user or an IAM user. Credentials that -// are created by IAM users are valid for the duration that you specify. This -// duration can range from 900 seconds (15 minutes) up to a maximum of 129,600 -// seconds (36 hours), with a default of 43,200 seconds (12 hours). Credentials -// based on account credentials can range from 900 seconds (15 minutes) up to -// 3,600 seconds (1 hour), with a default of 1 hour. -// -// Permissions -// -// The temporary security credentials created by GetSessionToken can be used -// to make API calls to any AWS service with the following exceptions: -// -// * You cannot call any IAM API operations unless MFA authentication information -// is included in the request. -// -// * You cannot call any STS API except AssumeRole or GetCallerIdentity. -// -// We recommend that you do not call GetSessionToken with AWS account root user -// credentials. Instead, follow our best practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users) -// by creating one or more IAM users, giving them the necessary permissions, -// and using IAM users for everyday interaction with AWS. -// -// The credentials that are returned by GetSessionToken are based on permissions -// associated with the user whose credentials were used to call the operation. -// If GetSessionToken is called using AWS account root user credentials, the -// temporary credentials have root user permissions. Similarly, if GetSessionToken -// is called using the credentials of an IAM user, the temporary credentials -// have the same permissions as the IAM user. -// -// For more information about using GetSessionToken to create temporary credentials, -// go to Temporary Credentials for Users in Untrusted Environments (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken) -// in the IAM User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for AWS Security Token Service's -// API operation GetSessionToken for usage and error information. -// -// Returned Error Codes: -// * ErrCodeRegionDisabledException "RegionDisabledException" -// STS is not activated in the requested region for the account that is being -// asked to generate credentials. The account administrator must use the IAM -// console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken -func (c *STS) GetSessionToken(input *GetSessionTokenInput) (*GetSessionTokenOutput, error) { - req, out := c.GetSessionTokenRequest(input) - return out, req.Send() -} - -// GetSessionTokenWithContext is the same as GetSessionToken with the addition of -// the ability to pass a context and additional request options. -// -// See GetSessionToken for details on how to use this API operation. -// -// The context must be non-nil and will be used for request cancellation. If -// the context is nil a panic will occur. In the future the SDK may create -// sub-contexts for http.Requests. See https://golang.org/pkg/context/ -// for more information on using Contexts. -func (c *STS) GetSessionTokenWithContext(ctx aws.Context, input *GetSessionTokenInput, opts ...request.Option) (*GetSessionTokenOutput, error) { - req, out := c.GetSessionTokenRequest(input) - req.SetContext(ctx) - req.ApplyOptions(opts...) - return out, req.Send() -} - -type AssumeRoleInput struct { - _ struct{} `type:"structure"` - - // The duration, in seconds, of the role session. The value can range from 900 - // seconds (15 minutes) up to the maximum session duration setting for the role. - // This setting can have a value from 1 hour to 12 hours. If you specify a value - // higher than this setting, the operation fails. For example, if you specify - // a session duration of 12 hours, but your administrator set the maximum session - // duration to 6 hours, your operation fails. To learn how to view the maximum - // value for your role, see View the Maximum Session Duration Setting for a - // Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) - // in the IAM User Guide. - // - // By default, the value is set to 3600 seconds. - // - // The DurationSeconds parameter is separate from the duration of a console - // session that you might request using the returned credentials. The request - // to the federation endpoint for a console sign-in token takes a SessionDuration - // parameter that specifies the maximum length of the console session. For more - // information, see Creating a URL that Enables Federated Users to Access the - // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) - // in the IAM User Guide. - DurationSeconds *int64 `min:"900" type:"integer"` - - // A unique identifier that might be required when you assume a role in another - // account. If the administrator of the account to which the role belongs provided - // you with an external ID, then provide that value in the ExternalId parameter. - // This value can be any string, such as a passphrase or account number. A cross-account - // role is usually set up to trust everyone in an account. Therefore, the administrator - // of the trusting account might send an external ID to the administrator of - // the trusted account. That way, only someone with the ID can assume the role, - // rather than everyone in the account. For more information about the external - // ID, see How to Use an External ID When Granting Access to Your AWS Resources - // to a Third Party (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) - // in the IAM User Guide. - // - // The regex used to validate this parameter is a string of characters consisting - // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@:/- - ExternalId *string `min:"2" type:"string"` - - // An IAM policy in JSON format that you want to use as an inline session policy. - // - // This parameter is optional. Passing policies to this operation returns new - // temporary credentials. The resulting session's permissions are the intersection - // of the role's identity-based policy and the session policies. You can use - // the role's temporary credentials in subsequent AWS API calls to access resources - // in the account that owns the role. You cannot use session policies to grant - // more permissions than those allowed by the identity-based policy of the role - // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - // - // The plain text that you use for both inline and managed session policies - // can't exceed 2,048 characters. The JSON policy characters can be any ASCII - // character from the space character to the end of the valid character list - // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), - // and carriage return (\u000D) characters. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - Policy *string `min:"1" type:"string"` - - // The Amazon Resource Names (ARNs) of the IAM managed policies that you want - // to use as managed session policies. The policies must exist in the same account - // as the role. - // - // This parameter is optional. You can provide up to 10 managed policy ARNs. - // However, the plain text that you use for both inline and managed session - // policies can't exceed 2,048 characters. For more information about ARNs, - // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // in the AWS General Reference. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - // - // Passing policies to this operation returns new temporary credentials. The - // resulting session's permissions are the intersection of the role's identity-based - // policy and the session policies. You can use the role's temporary credentials - // in subsequent AWS API calls to access resources in the account that owns - // the role. You cannot use session policies to grant more permissions than - // those allowed by the identity-based policy of the role that is being assumed. - // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - PolicyArns []*PolicyDescriptorType `type:"list"` - - // The Amazon Resource Name (ARN) of the role to assume. - // - // RoleArn is a required field - RoleArn *string `min:"20" type:"string" required:"true"` - - // An identifier for the assumed role session. - // - // Use the role session name to uniquely identify a session when the same role - // is assumed by different principals or for different reasons. In cross-account - // scenarios, the role session name is visible to, and can be logged by the - // account that owns the role. The role session name is also used in the ARN - // of the assumed role principal. This means that subsequent cross-account API - // requests that use the temporary security credentials will expose the role - // session name to the external account in their AWS CloudTrail logs. - // - // The regex used to validate this parameter is a string of characters consisting - // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@- - // - // RoleSessionName is a required field - RoleSessionName *string `min:"2" type:"string" required:"true"` - - // The identification number of the MFA device that is associated with the user - // who is making the AssumeRole call. Specify this value if the trust policy - // of the role being assumed includes a condition that requires MFA authentication. - // The value is either the serial number for a hardware device (such as GAHT12345678) - // or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user). - // - // The regex used to validate this parameter is a string of characters consisting - // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@- - SerialNumber *string `min:"9" type:"string"` - - // A list of session tags that you want to pass. Each session tag consists of - // a key name and an associated value. For more information about session tags, - // see Tagging AWS STS Sessions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) - // in the IAM User Guide. - // - // This parameter is optional. You can pass up to 50 session tags. The plain - // text session tag keys can’t exceed 128 characters, and the values can’t - // exceed 256 characters. For these and additional limits, see IAM and STS Character - // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) - // in the IAM User Guide. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - // - // You can pass a session tag with the same key as a tag that is already attached - // to the role. When you do, session tags override a role tag with the same - // key. - // - // Tag key–value pairs are not case sensitive, but case is preserved. This - // means that you cannot have separate Department and department tag keys. Assume - // that the role has the Department=Marketing tag and you pass the department=engineering - // session tag. Department and department are not saved as separate tags, and - // the session tag passed in the request takes precedence over the role tag. - // - // Additionally, if you used temporary credentials to perform this operation, - // the new session inherits any transitive session tags from the calling session. - // If you pass a session tag with the same key as an inherited tag, the operation - // fails. To view the inherited tags for a session, see the AWS CloudTrail logs. - // For more information, see Viewing Session Tags in CloudTrail (https://docs.aws.amazon.com/IAM/latest/UserGuide/session-tags.html#id_session-tags_ctlogs) - // in the IAM User Guide. - Tags []*Tag `type:"list"` - - // The value provided by the MFA device, if the trust policy of the role being - // assumed requires MFA (that is, if the policy includes a condition that tests - // for MFA). If the role being assumed requires MFA and if the TokenCode value - // is missing or expired, the AssumeRole call returns an "access denied" error. - // - // The format for this parameter, as described by its regex pattern, is a sequence - // of six numeric digits. - TokenCode *string `min:"6" type:"string"` - - // A list of keys for session tags that you want to set as transitive. If you - // set a tag key as transitive, the corresponding key and value passes to subsequent - // sessions in a role chain. For more information, see Chaining Roles with Session - // Tags (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) - // in the IAM User Guide. - // - // This parameter is optional. When you set session tags as transitive, the - // session policy and session tags packed binary limit is not affected. - // - // If you choose not to specify a transitive tag key, then no tags are passed - // from this session to any subsequent sessions. - TransitiveTagKeys []*string `type:"list"` -} - -// String returns the string representation -func (s AssumeRoleInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumeRoleInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssumeRoleInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssumeRoleInput"} - if s.DurationSeconds != nil && *s.DurationSeconds < 900 { - invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) - } - if s.ExternalId != nil && len(*s.ExternalId) < 2 { - invalidParams.Add(request.NewErrParamMinLen("ExternalId", 2)) - } - if s.Policy != nil && len(*s.Policy) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) - } - if s.RoleArn == nil { - invalidParams.Add(request.NewErrParamRequired("RoleArn")) - } - if s.RoleArn != nil && len(*s.RoleArn) < 20 { - invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20)) - } - if s.RoleSessionName == nil { - invalidParams.Add(request.NewErrParamRequired("RoleSessionName")) - } - if s.RoleSessionName != nil && len(*s.RoleSessionName) < 2 { - invalidParams.Add(request.NewErrParamMinLen("RoleSessionName", 2)) - } - if s.SerialNumber != nil && len(*s.SerialNumber) < 9 { - invalidParams.Add(request.NewErrParamMinLen("SerialNumber", 9)) - } - if s.TokenCode != nil && len(*s.TokenCode) < 6 { - invalidParams.Add(request.NewErrParamMinLen("TokenCode", 6)) - } - if s.PolicyArns != nil { - for i, v := range s.PolicyArns { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) - } - } - } - if s.Tags != nil { - for i, v := range s.Tags { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDurationSeconds sets the DurationSeconds field's value. -func (s *AssumeRoleInput) SetDurationSeconds(v int64) *AssumeRoleInput { - s.DurationSeconds = &v - return s -} - -// SetExternalId sets the ExternalId field's value. -func (s *AssumeRoleInput) SetExternalId(v string) *AssumeRoleInput { - s.ExternalId = &v - return s -} - -// SetPolicy sets the Policy field's value. -func (s *AssumeRoleInput) SetPolicy(v string) *AssumeRoleInput { - s.Policy = &v - return s -} - -// SetPolicyArns sets the PolicyArns field's value. -func (s *AssumeRoleInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleInput { - s.PolicyArns = v - return s -} - -// SetRoleArn sets the RoleArn field's value. -func (s *AssumeRoleInput) SetRoleArn(v string) *AssumeRoleInput { - s.RoleArn = &v - return s -} - -// SetRoleSessionName sets the RoleSessionName field's value. -func (s *AssumeRoleInput) SetRoleSessionName(v string) *AssumeRoleInput { - s.RoleSessionName = &v - return s -} - -// SetSerialNumber sets the SerialNumber field's value. -func (s *AssumeRoleInput) SetSerialNumber(v string) *AssumeRoleInput { - s.SerialNumber = &v - return s -} - -// SetTags sets the Tags field's value. -func (s *AssumeRoleInput) SetTags(v []*Tag) *AssumeRoleInput { - s.Tags = v - return s -} - -// SetTokenCode sets the TokenCode field's value. -func (s *AssumeRoleInput) SetTokenCode(v string) *AssumeRoleInput { - s.TokenCode = &v - return s -} - -// SetTransitiveTagKeys sets the TransitiveTagKeys field's value. -func (s *AssumeRoleInput) SetTransitiveTagKeys(v []*string) *AssumeRoleInput { - s.TransitiveTagKeys = v - return s -} - -// Contains the response to a successful AssumeRole request, including temporary -// AWS credentials that can be used to make AWS requests. -type AssumeRoleOutput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) and the assumed role ID, which are identifiers - // that you can use to refer to the resulting temporary security credentials. - // For example, you can reference these credentials as a principal in a resource-based - // policy by using the ARN or assumed role ID. The ARN and ID include the RoleSessionName - // that you specified when you called AssumeRole. - AssumedRoleUser *AssumedRoleUser `type:"structure"` - - // The temporary security credentials, which include an access key ID, a secret - // access key, and a security (or session) token. - // - // The size of the security token that STS API operations return is not fixed. - // We strongly recommend that you make no assumptions about the maximum size. - Credentials *Credentials `type:"structure"` - - // A percentage value that indicates the packed size of the session policies - // and session tags combined passed in the request. The request fails if the - // packed size is greater than 100 percent, which means the policies and tags - // exceeded the allowed space. - PackedPolicySize *int64 `type:"integer"` -} - -// String returns the string representation -func (s AssumeRoleOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumeRoleOutput) GoString() string { - return s.String() -} - -// SetAssumedRoleUser sets the AssumedRoleUser field's value. -func (s *AssumeRoleOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleOutput { - s.AssumedRoleUser = v - return s -} - -// SetCredentials sets the Credentials field's value. -func (s *AssumeRoleOutput) SetCredentials(v *Credentials) *AssumeRoleOutput { - s.Credentials = v - return s -} - -// SetPackedPolicySize sets the PackedPolicySize field's value. -func (s *AssumeRoleOutput) SetPackedPolicySize(v int64) *AssumeRoleOutput { - s.PackedPolicySize = &v - return s -} - -type AssumeRoleWithSAMLInput struct { - _ struct{} `type:"structure"` - - // The duration, in seconds, of the role session. Your role session lasts for - // the duration that you specify for the DurationSeconds parameter, or until - // the time specified in the SAML authentication response's SessionNotOnOrAfter - // value, whichever is shorter. You can provide a DurationSeconds value from - // 900 seconds (15 minutes) up to the maximum session duration setting for the - // role. This setting can have a value from 1 hour to 12 hours. If you specify - // a value higher than this setting, the operation fails. For example, if you - // specify a session duration of 12 hours, but your administrator set the maximum - // session duration to 6 hours, your operation fails. To learn how to view the - // maximum value for your role, see View the Maximum Session Duration Setting - // for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) - // in the IAM User Guide. - // - // By default, the value is set to 3600 seconds. - // - // The DurationSeconds parameter is separate from the duration of a console - // session that you might request using the returned credentials. The request - // to the federation endpoint for a console sign-in token takes a SessionDuration - // parameter that specifies the maximum length of the console session. For more - // information, see Creating a URL that Enables Federated Users to Access the - // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) - // in the IAM User Guide. - DurationSeconds *int64 `min:"900" type:"integer"` - - // An IAM policy in JSON format that you want to use as an inline session policy. - // - // This parameter is optional. Passing policies to this operation returns new - // temporary credentials. The resulting session's permissions are the intersection - // of the role's identity-based policy and the session policies. You can use - // the role's temporary credentials in subsequent AWS API calls to access resources - // in the account that owns the role. You cannot use session policies to grant - // more permissions than those allowed by the identity-based policy of the role - // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - // - // The plain text that you use for both inline and managed session policies - // can't exceed 2,048 characters. The JSON policy characters can be any ASCII - // character from the space character to the end of the valid character list - // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), - // and carriage return (\u000D) characters. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - Policy *string `min:"1" type:"string"` - - // The Amazon Resource Names (ARNs) of the IAM managed policies that you want - // to use as managed session policies. The policies must exist in the same account - // as the role. - // - // This parameter is optional. You can provide up to 10 managed policy ARNs. - // However, the plain text that you use for both inline and managed session - // policies can't exceed 2,048 characters. For more information about ARNs, - // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // in the AWS General Reference. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - // - // Passing policies to this operation returns new temporary credentials. The - // resulting session's permissions are the intersection of the role's identity-based - // policy and the session policies. You can use the role's temporary credentials - // in subsequent AWS API calls to access resources in the account that owns - // the role. You cannot use session policies to grant more permissions than - // those allowed by the identity-based policy of the role that is being assumed. - // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - PolicyArns []*PolicyDescriptorType `type:"list"` - - // The Amazon Resource Name (ARN) of the SAML provider in IAM that describes - // the IdP. - // - // PrincipalArn is a required field - PrincipalArn *string `min:"20" type:"string" required:"true"` - - // The Amazon Resource Name (ARN) of the role that the caller is assuming. - // - // RoleArn is a required field - RoleArn *string `min:"20" type:"string" required:"true"` - - // The base-64 encoded SAML authentication response provided by the IdP. - // - // For more information, see Configuring a Relying Party and Adding Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml-IdP-tasks.html) - // in the IAM User Guide. - // - // SAMLAssertion is a required field - SAMLAssertion *string `min:"4" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssumeRoleWithSAMLInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumeRoleWithSAMLInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssumeRoleWithSAMLInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssumeRoleWithSAMLInput"} - if s.DurationSeconds != nil && *s.DurationSeconds < 900 { - invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) - } - if s.Policy != nil && len(*s.Policy) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) - } - if s.PrincipalArn == nil { - invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) - } - if s.PrincipalArn != nil && len(*s.PrincipalArn) < 20 { - invalidParams.Add(request.NewErrParamMinLen("PrincipalArn", 20)) - } - if s.RoleArn == nil { - invalidParams.Add(request.NewErrParamRequired("RoleArn")) - } - if s.RoleArn != nil && len(*s.RoleArn) < 20 { - invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20)) - } - if s.SAMLAssertion == nil { - invalidParams.Add(request.NewErrParamRequired("SAMLAssertion")) - } - if s.SAMLAssertion != nil && len(*s.SAMLAssertion) < 4 { - invalidParams.Add(request.NewErrParamMinLen("SAMLAssertion", 4)) - } - if s.PolicyArns != nil { - for i, v := range s.PolicyArns { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDurationSeconds sets the DurationSeconds field's value. -func (s *AssumeRoleWithSAMLInput) SetDurationSeconds(v int64) *AssumeRoleWithSAMLInput { - s.DurationSeconds = &v - return s -} - -// SetPolicy sets the Policy field's value. -func (s *AssumeRoleWithSAMLInput) SetPolicy(v string) *AssumeRoleWithSAMLInput { - s.Policy = &v - return s -} - -// SetPolicyArns sets the PolicyArns field's value. -func (s *AssumeRoleWithSAMLInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithSAMLInput { - s.PolicyArns = v - return s -} - -// SetPrincipalArn sets the PrincipalArn field's value. -func (s *AssumeRoleWithSAMLInput) SetPrincipalArn(v string) *AssumeRoleWithSAMLInput { - s.PrincipalArn = &v - return s -} - -// SetRoleArn sets the RoleArn field's value. -func (s *AssumeRoleWithSAMLInput) SetRoleArn(v string) *AssumeRoleWithSAMLInput { - s.RoleArn = &v - return s -} - -// SetSAMLAssertion sets the SAMLAssertion field's value. -func (s *AssumeRoleWithSAMLInput) SetSAMLAssertion(v string) *AssumeRoleWithSAMLInput { - s.SAMLAssertion = &v - return s -} - -// Contains the response to a successful AssumeRoleWithSAML request, including -// temporary AWS credentials that can be used to make AWS requests. -type AssumeRoleWithSAMLOutput struct { - _ struct{} `type:"structure"` - - // The identifiers for the temporary security credentials that the operation - // returns. - AssumedRoleUser *AssumedRoleUser `type:"structure"` - - // The value of the Recipient attribute of the SubjectConfirmationData element - // of the SAML assertion. - Audience *string `type:"string"` - - // The temporary security credentials, which include an access key ID, a secret - // access key, and a security (or session) token. - // - // The size of the security token that STS API operations return is not fixed. - // We strongly recommend that you make no assumptions about the maximum size. - Credentials *Credentials `type:"structure"` - - // The value of the Issuer element of the SAML assertion. - Issuer *string `type:"string"` - - // A hash value based on the concatenation of the Issuer response value, the - // AWS account ID, and the friendly name (the last part of the ARN) of the SAML - // provider in IAM. The combination of NameQualifier and Subject can be used - // to uniquely identify a federated user. - // - // The following pseudocode shows how the hash value is calculated: - // - // BASE64 ( SHA1 ( "https://example.com/saml" + "123456789012" + "/MySAMLIdP" - // ) ) - NameQualifier *string `type:"string"` - - // A percentage value that indicates the packed size of the session policies - // and session tags combined passed in the request. The request fails if the - // packed size is greater than 100 percent, which means the policies and tags - // exceeded the allowed space. - PackedPolicySize *int64 `type:"integer"` - - // The value of the NameID element in the Subject element of the SAML assertion. - Subject *string `type:"string"` - - // The format of the name ID, as defined by the Format attribute in the NameID - // element of the SAML assertion. Typical examples of the format are transient - // or persistent. - // - // If the format includes the prefix urn:oasis:names:tc:SAML:2.0:nameid-format, - // that prefix is removed. For example, urn:oasis:names:tc:SAML:2.0:nameid-format:transient - // is returned as transient. If the format includes any other prefix, the format - // is returned with no modifications. - SubjectType *string `type:"string"` -} - -// String returns the string representation -func (s AssumeRoleWithSAMLOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumeRoleWithSAMLOutput) GoString() string { - return s.String() -} - -// SetAssumedRoleUser sets the AssumedRoleUser field's value. -func (s *AssumeRoleWithSAMLOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleWithSAMLOutput { - s.AssumedRoleUser = v - return s -} - -// SetAudience sets the Audience field's value. -func (s *AssumeRoleWithSAMLOutput) SetAudience(v string) *AssumeRoleWithSAMLOutput { - s.Audience = &v - return s -} - -// SetCredentials sets the Credentials field's value. -func (s *AssumeRoleWithSAMLOutput) SetCredentials(v *Credentials) *AssumeRoleWithSAMLOutput { - s.Credentials = v - return s -} - -// SetIssuer sets the Issuer field's value. -func (s *AssumeRoleWithSAMLOutput) SetIssuer(v string) *AssumeRoleWithSAMLOutput { - s.Issuer = &v - return s -} - -// SetNameQualifier sets the NameQualifier field's value. -func (s *AssumeRoleWithSAMLOutput) SetNameQualifier(v string) *AssumeRoleWithSAMLOutput { - s.NameQualifier = &v - return s -} - -// SetPackedPolicySize sets the PackedPolicySize field's value. -func (s *AssumeRoleWithSAMLOutput) SetPackedPolicySize(v int64) *AssumeRoleWithSAMLOutput { - s.PackedPolicySize = &v - return s -} - -// SetSubject sets the Subject field's value. -func (s *AssumeRoleWithSAMLOutput) SetSubject(v string) *AssumeRoleWithSAMLOutput { - s.Subject = &v - return s -} - -// SetSubjectType sets the SubjectType field's value. -func (s *AssumeRoleWithSAMLOutput) SetSubjectType(v string) *AssumeRoleWithSAMLOutput { - s.SubjectType = &v - return s -} - -type AssumeRoleWithWebIdentityInput struct { - _ struct{} `type:"structure"` - - // The duration, in seconds, of the role session. The value can range from 900 - // seconds (15 minutes) up to the maximum session duration setting for the role. - // This setting can have a value from 1 hour to 12 hours. If you specify a value - // higher than this setting, the operation fails. For example, if you specify - // a session duration of 12 hours, but your administrator set the maximum session - // duration to 6 hours, your operation fails. To learn how to view the maximum - // value for your role, see View the Maximum Session Duration Setting for a - // Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) - // in the IAM User Guide. - // - // By default, the value is set to 3600 seconds. - // - // The DurationSeconds parameter is separate from the duration of a console - // session that you might request using the returned credentials. The request - // to the federation endpoint for a console sign-in token takes a SessionDuration - // parameter that specifies the maximum length of the console session. For more - // information, see Creating a URL that Enables Federated Users to Access the - // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) - // in the IAM User Guide. - DurationSeconds *int64 `min:"900" type:"integer"` - - // An IAM policy in JSON format that you want to use as an inline session policy. - // - // This parameter is optional. Passing policies to this operation returns new - // temporary credentials. The resulting session's permissions are the intersection - // of the role's identity-based policy and the session policies. You can use - // the role's temporary credentials in subsequent AWS API calls to access resources - // in the account that owns the role. You cannot use session policies to grant - // more permissions than those allowed by the identity-based policy of the role - // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - // - // The plain text that you use for both inline and managed session policies - // can't exceed 2,048 characters. The JSON policy characters can be any ASCII - // character from the space character to the end of the valid character list - // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), - // and carriage return (\u000D) characters. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - Policy *string `min:"1" type:"string"` - - // The Amazon Resource Names (ARNs) of the IAM managed policies that you want - // to use as managed session policies. The policies must exist in the same account - // as the role. - // - // This parameter is optional. You can provide up to 10 managed policy ARNs. - // However, the plain text that you use for both inline and managed session - // policies can't exceed 2,048 characters. For more information about ARNs, - // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // in the AWS General Reference. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - // - // Passing policies to this operation returns new temporary credentials. The - // resulting session's permissions are the intersection of the role's identity-based - // policy and the session policies. You can use the role's temporary credentials - // in subsequent AWS API calls to access resources in the account that owns - // the role. You cannot use session policies to grant more permissions than - // those allowed by the identity-based policy of the role that is being assumed. - // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - PolicyArns []*PolicyDescriptorType `type:"list"` - - // The fully qualified host component of the domain name of the identity provider. - // - // Specify this value only for OAuth 2.0 access tokens. Currently www.amazon.com - // and graph.facebook.com are the only supported identity providers for OAuth - // 2.0 access tokens. Do not include URL schemes and port numbers. - // - // Do not specify this value for OpenID Connect ID tokens. - ProviderId *string `min:"4" type:"string"` - - // The Amazon Resource Name (ARN) of the role that the caller is assuming. - // - // RoleArn is a required field - RoleArn *string `min:"20" type:"string" required:"true"` - - // An identifier for the assumed role session. Typically, you pass the name - // or identifier that is associated with the user who is using your application. - // That way, the temporary security credentials that your application will use - // are associated with that user. This session name is included as part of the - // ARN and assumed role ID in the AssumedRoleUser response element. - // - // The regex used to validate this parameter is a string of characters consisting - // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@- - // - // RoleSessionName is a required field - RoleSessionName *string `min:"2" type:"string" required:"true"` - - // The OAuth 2.0 access token or OpenID Connect ID token that is provided by - // the identity provider. Your application must get this token by authenticating - // the user who is using your application with a web identity provider before - // the application makes an AssumeRoleWithWebIdentity call. - // - // WebIdentityToken is a required field - WebIdentityToken *string `min:"4" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssumeRoleWithWebIdentityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumeRoleWithWebIdentityInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssumeRoleWithWebIdentityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssumeRoleWithWebIdentityInput"} - if s.DurationSeconds != nil && *s.DurationSeconds < 900 { - invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) - } - if s.Policy != nil && len(*s.Policy) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) - } - if s.ProviderId != nil && len(*s.ProviderId) < 4 { - invalidParams.Add(request.NewErrParamMinLen("ProviderId", 4)) - } - if s.RoleArn == nil { - invalidParams.Add(request.NewErrParamRequired("RoleArn")) - } - if s.RoleArn != nil && len(*s.RoleArn) < 20 { - invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20)) - } - if s.RoleSessionName == nil { - invalidParams.Add(request.NewErrParamRequired("RoleSessionName")) - } - if s.RoleSessionName != nil && len(*s.RoleSessionName) < 2 { - invalidParams.Add(request.NewErrParamMinLen("RoleSessionName", 2)) - } - if s.WebIdentityToken == nil { - invalidParams.Add(request.NewErrParamRequired("WebIdentityToken")) - } - if s.WebIdentityToken != nil && len(*s.WebIdentityToken) < 4 { - invalidParams.Add(request.NewErrParamMinLen("WebIdentityToken", 4)) - } - if s.PolicyArns != nil { - for i, v := range s.PolicyArns { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDurationSeconds sets the DurationSeconds field's value. -func (s *AssumeRoleWithWebIdentityInput) SetDurationSeconds(v int64) *AssumeRoleWithWebIdentityInput { - s.DurationSeconds = &v - return s -} - -// SetPolicy sets the Policy field's value. -func (s *AssumeRoleWithWebIdentityInput) SetPolicy(v string) *AssumeRoleWithWebIdentityInput { - s.Policy = &v - return s -} - -// SetPolicyArns sets the PolicyArns field's value. -func (s *AssumeRoleWithWebIdentityInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithWebIdentityInput { - s.PolicyArns = v - return s -} - -// SetProviderId sets the ProviderId field's value. -func (s *AssumeRoleWithWebIdentityInput) SetProviderId(v string) *AssumeRoleWithWebIdentityInput { - s.ProviderId = &v - return s -} - -// SetRoleArn sets the RoleArn field's value. -func (s *AssumeRoleWithWebIdentityInput) SetRoleArn(v string) *AssumeRoleWithWebIdentityInput { - s.RoleArn = &v - return s -} - -// SetRoleSessionName sets the RoleSessionName field's value. -func (s *AssumeRoleWithWebIdentityInput) SetRoleSessionName(v string) *AssumeRoleWithWebIdentityInput { - s.RoleSessionName = &v - return s -} - -// SetWebIdentityToken sets the WebIdentityToken field's value. -func (s *AssumeRoleWithWebIdentityInput) SetWebIdentityToken(v string) *AssumeRoleWithWebIdentityInput { - s.WebIdentityToken = &v - return s -} - -// Contains the response to a successful AssumeRoleWithWebIdentity request, -// including temporary AWS credentials that can be used to make AWS requests. -type AssumeRoleWithWebIdentityOutput struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) and the assumed role ID, which are identifiers - // that you can use to refer to the resulting temporary security credentials. - // For example, you can reference these credentials as a principal in a resource-based - // policy by using the ARN or assumed role ID. The ARN and ID include the RoleSessionName - // that you specified when you called AssumeRole. - AssumedRoleUser *AssumedRoleUser `type:"structure"` - - // The intended audience (also known as client ID) of the web identity token. - // This is traditionally the client identifier issued to the application that - // requested the web identity token. - Audience *string `type:"string"` - - // The temporary security credentials, which include an access key ID, a secret - // access key, and a security token. - // - // The size of the security token that STS API operations return is not fixed. - // We strongly recommend that you make no assumptions about the maximum size. - Credentials *Credentials `type:"structure"` - - // A percentage value that indicates the packed size of the session policies - // and session tags combined passed in the request. The request fails if the - // packed size is greater than 100 percent, which means the policies and tags - // exceeded the allowed space. - PackedPolicySize *int64 `type:"integer"` - - // The issuing authority of the web identity token presented. For OpenID Connect - // ID tokens, this contains the value of the iss field. For OAuth 2.0 access - // tokens, this contains the value of the ProviderId parameter that was passed - // in the AssumeRoleWithWebIdentity request. - Provider *string `type:"string"` - - // The unique user identifier that is returned by the identity provider. This - // identifier is associated with the WebIdentityToken that was submitted with - // the AssumeRoleWithWebIdentity call. The identifier is typically unique to - // the user and the application that acquired the WebIdentityToken (pairwise - // identifier). For OpenID Connect ID tokens, this field contains the value - // returned by the identity provider as the token's sub (Subject) claim. - SubjectFromWebIdentityToken *string `min:"6" type:"string"` -} - -// String returns the string representation -func (s AssumeRoleWithWebIdentityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumeRoleWithWebIdentityOutput) GoString() string { - return s.String() -} - -// SetAssumedRoleUser sets the AssumedRoleUser field's value. -func (s *AssumeRoleWithWebIdentityOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleWithWebIdentityOutput { - s.AssumedRoleUser = v - return s -} - -// SetAudience sets the Audience field's value. -func (s *AssumeRoleWithWebIdentityOutput) SetAudience(v string) *AssumeRoleWithWebIdentityOutput { - s.Audience = &v - return s -} - -// SetCredentials sets the Credentials field's value. -func (s *AssumeRoleWithWebIdentityOutput) SetCredentials(v *Credentials) *AssumeRoleWithWebIdentityOutput { - s.Credentials = v - return s -} - -// SetPackedPolicySize sets the PackedPolicySize field's value. -func (s *AssumeRoleWithWebIdentityOutput) SetPackedPolicySize(v int64) *AssumeRoleWithWebIdentityOutput { - s.PackedPolicySize = &v - return s -} - -// SetProvider sets the Provider field's value. -func (s *AssumeRoleWithWebIdentityOutput) SetProvider(v string) *AssumeRoleWithWebIdentityOutput { - s.Provider = &v - return s -} - -// SetSubjectFromWebIdentityToken sets the SubjectFromWebIdentityToken field's value. -func (s *AssumeRoleWithWebIdentityOutput) SetSubjectFromWebIdentityToken(v string) *AssumeRoleWithWebIdentityOutput { - s.SubjectFromWebIdentityToken = &v - return s -} - -// The identifiers for the temporary security credentials that the operation -// returns. -type AssumedRoleUser struct { - _ struct{} `type:"structure"` - - // The ARN of the temporary security credentials that are returned from the - // AssumeRole action. For more information about ARNs and how to use them in - // policies, see IAM Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) - // in the IAM User Guide. - // - // Arn is a required field - Arn *string `min:"20" type:"string" required:"true"` - - // A unique identifier that contains the role ID and the role session name of - // the role that is being assumed. The role ID is generated by AWS when the - // role is created. - // - // AssumedRoleId is a required field - AssumedRoleId *string `min:"2" type:"string" required:"true"` -} - -// String returns the string representation -func (s AssumedRoleUser) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AssumedRoleUser) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *AssumedRoleUser) SetArn(v string) *AssumedRoleUser { - s.Arn = &v - return s -} - -// SetAssumedRoleId sets the AssumedRoleId field's value. -func (s *AssumedRoleUser) SetAssumedRoleId(v string) *AssumedRoleUser { - s.AssumedRoleId = &v - return s -} - -// AWS credentials for API authentication. -type Credentials struct { - _ struct{} `type:"structure"` - - // The access key ID that identifies the temporary security credentials. - // - // AccessKeyId is a required field - AccessKeyId *string `min:"16" type:"string" required:"true"` - - // The date on which the current credentials expire. - // - // Expiration is a required field - Expiration *time.Time `type:"timestamp" required:"true"` - - // The secret access key that can be used to sign requests. - // - // SecretAccessKey is a required field - SecretAccessKey *string `type:"string" required:"true"` - - // The token that users must pass to the service API to use the temporary credentials. - // - // SessionToken is a required field - SessionToken *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s Credentials) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Credentials) GoString() string { - return s.String() -} - -// SetAccessKeyId sets the AccessKeyId field's value. -func (s *Credentials) SetAccessKeyId(v string) *Credentials { - s.AccessKeyId = &v - return s -} - -// SetExpiration sets the Expiration field's value. -func (s *Credentials) SetExpiration(v time.Time) *Credentials { - s.Expiration = &v - return s -} - -// SetSecretAccessKey sets the SecretAccessKey field's value. -func (s *Credentials) SetSecretAccessKey(v string) *Credentials { - s.SecretAccessKey = &v - return s -} - -// SetSessionToken sets the SessionToken field's value. -func (s *Credentials) SetSessionToken(v string) *Credentials { - s.SessionToken = &v - return s -} - -type DecodeAuthorizationMessageInput struct { - _ struct{} `type:"structure"` - - // The encoded message that was returned with the response. - // - // EncodedMessage is a required field - EncodedMessage *string `min:"1" type:"string" required:"true"` -} - -// String returns the string representation -func (s DecodeAuthorizationMessageInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DecodeAuthorizationMessageInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DecodeAuthorizationMessageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DecodeAuthorizationMessageInput"} - if s.EncodedMessage == nil { - invalidParams.Add(request.NewErrParamRequired("EncodedMessage")) - } - if s.EncodedMessage != nil && len(*s.EncodedMessage) < 1 { - invalidParams.Add(request.NewErrParamMinLen("EncodedMessage", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetEncodedMessage sets the EncodedMessage field's value. -func (s *DecodeAuthorizationMessageInput) SetEncodedMessage(v string) *DecodeAuthorizationMessageInput { - s.EncodedMessage = &v - return s -} - -// A document that contains additional information about the authorization status -// of a request from an encoded message that is returned in response to an AWS -// request. -type DecodeAuthorizationMessageOutput struct { - _ struct{} `type:"structure"` - - // An XML document that contains the decoded message. - DecodedMessage *string `type:"string"` -} - -// String returns the string representation -func (s DecodeAuthorizationMessageOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DecodeAuthorizationMessageOutput) GoString() string { - return s.String() -} - -// SetDecodedMessage sets the DecodedMessage field's value. -func (s *DecodeAuthorizationMessageOutput) SetDecodedMessage(v string) *DecodeAuthorizationMessageOutput { - s.DecodedMessage = &v - return s -} - -// Identifiers for the federated user that is associated with the credentials. -type FederatedUser struct { - _ struct{} `type:"structure"` - - // The ARN that specifies the federated user that is associated with the credentials. - // For more information about ARNs and how to use them in policies, see IAM - // Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) - // in the IAM User Guide. - // - // Arn is a required field - Arn *string `min:"20" type:"string" required:"true"` - - // The string that identifies the federated user associated with the credentials, - // similar to the unique ID of an IAM user. - // - // FederatedUserId is a required field - FederatedUserId *string `min:"2" type:"string" required:"true"` -} - -// String returns the string representation -func (s FederatedUser) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s FederatedUser) GoString() string { - return s.String() -} - -// SetArn sets the Arn field's value. -func (s *FederatedUser) SetArn(v string) *FederatedUser { - s.Arn = &v - return s -} - -// SetFederatedUserId sets the FederatedUserId field's value. -func (s *FederatedUser) SetFederatedUserId(v string) *FederatedUser { - s.FederatedUserId = &v - return s -} - -type GetAccessKeyInfoInput struct { - _ struct{} `type:"structure"` - - // The identifier of an access key. - // - // This parameter allows (through its regex pattern) a string of characters - // that can consist of any upper- or lowercase letter or digit. - // - // AccessKeyId is a required field - AccessKeyId *string `min:"16" type:"string" required:"true"` -} - -// String returns the string representation -func (s GetAccessKeyInfoInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetAccessKeyInfoInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetAccessKeyInfoInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetAccessKeyInfoInput"} - if s.AccessKeyId == nil { - invalidParams.Add(request.NewErrParamRequired("AccessKeyId")) - } - if s.AccessKeyId != nil && len(*s.AccessKeyId) < 16 { - invalidParams.Add(request.NewErrParamMinLen("AccessKeyId", 16)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAccessKeyId sets the AccessKeyId field's value. -func (s *GetAccessKeyInfoInput) SetAccessKeyId(v string) *GetAccessKeyInfoInput { - s.AccessKeyId = &v - return s -} - -type GetAccessKeyInfoOutput struct { - _ struct{} `type:"structure"` - - // The number used to identify the AWS account. - Account *string `type:"string"` -} - -// String returns the string representation -func (s GetAccessKeyInfoOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetAccessKeyInfoOutput) GoString() string { - return s.String() -} - -// SetAccount sets the Account field's value. -func (s *GetAccessKeyInfoOutput) SetAccount(v string) *GetAccessKeyInfoOutput { - s.Account = &v - return s -} - -type GetCallerIdentityInput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s GetCallerIdentityInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCallerIdentityInput) GoString() string { - return s.String() -} - -// Contains the response to a successful GetCallerIdentity request, including -// information about the entity making the request. -type GetCallerIdentityOutput struct { - _ struct{} `type:"structure"` - - // The AWS account ID number of the account that owns or contains the calling - // entity. - Account *string `type:"string"` - - // The AWS ARN associated with the calling entity. - Arn *string `min:"20" type:"string"` - - // The unique identifier of the calling entity. The exact value depends on the - // type of entity that is making the call. The values returned are those listed - // in the aws:userid column in the Principal table (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable) - // found on the Policy Variables reference page in the IAM User Guide. - UserId *string `type:"string"` -} - -// String returns the string representation -func (s GetCallerIdentityOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetCallerIdentityOutput) GoString() string { - return s.String() -} - -// SetAccount sets the Account field's value. -func (s *GetCallerIdentityOutput) SetAccount(v string) *GetCallerIdentityOutput { - s.Account = &v - return s -} - -// SetArn sets the Arn field's value. -func (s *GetCallerIdentityOutput) SetArn(v string) *GetCallerIdentityOutput { - s.Arn = &v - return s -} - -// SetUserId sets the UserId field's value. -func (s *GetCallerIdentityOutput) SetUserId(v string) *GetCallerIdentityOutput { - s.UserId = &v - return s -} - -type GetFederationTokenInput struct { - _ struct{} `type:"structure"` - - // The duration, in seconds, that the session should last. Acceptable durations - // for federation sessions range from 900 seconds (15 minutes) to 129,600 seconds - // (36 hours), with 43,200 seconds (12 hours) as the default. Sessions obtained - // using AWS account root user credentials are restricted to a maximum of 3,600 - // seconds (one hour). If the specified duration is longer than one hour, the - // session obtained by using root user credentials defaults to one hour. - DurationSeconds *int64 `min:"900" type:"integer"` - - // The name of the federated user. The name is used as an identifier for the - // temporary security credentials (such as Bob). For example, you can reference - // the federated user name in a resource-based policy, such as in an Amazon - // S3 bucket policy. - // - // The regex used to validate this parameter is a string of characters consisting - // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@- - // - // Name is a required field - Name *string `min:"2" type:"string" required:"true"` - - // An IAM policy in JSON format that you want to use as an inline session policy. - // - // You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // to this operation. You can pass a single JSON policy document to use as an - // inline session policy. You can also specify up to 10 managed policies to - // use as managed session policies. - // - // This parameter is optional. However, if you do not pass any session policies, - // then the resulting federated user session has no permissions. - // - // When you pass session policies, the session permissions are the intersection - // of the IAM user policies and the session policies that you pass. This gives - // you a way to further restrict the permissions for a federated user. You cannot - // use session policies to grant more permissions than those that are defined - // in the permissions policy of the IAM user. For more information, see Session - // Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - // - // The resulting credentials can be used to access a resource that has a resource-based - // policy. If that policy specifically references the federated user session - // in the Principal element of the policy, the session has the permissions allowed - // by the policy. These permissions are granted in addition to the permissions - // that are granted by the session policies. - // - // The plain text that you use for both inline and managed session policies - // can't exceed 2,048 characters. The JSON policy characters can be any ASCII - // character from the space character to the end of the valid character list - // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), - // and carriage return (\u000D) characters. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - Policy *string `min:"1" type:"string"` - - // The Amazon Resource Names (ARNs) of the IAM managed policies that you want - // to use as a managed session policy. The policies must exist in the same account - // as the IAM user that is requesting federated access. - // - // You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // to this operation. You can pass a single JSON policy document to use as an - // inline session policy. You can also specify up to 10 managed policies to - // use as managed session policies. The plain text that you use for both inline - // and managed session policies can't exceed 2,048 characters. You can provide - // up to 10 managed policy ARNs. For more information about ARNs, see Amazon - // Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // in the AWS General Reference. - // - // This parameter is optional. However, if you do not pass any session policies, - // then the resulting federated user session has no permissions. - // - // When you pass session policies, the session permissions are the intersection - // of the IAM user policies and the session policies that you pass. This gives - // you a way to further restrict the permissions for a federated user. You cannot - // use session policies to grant more permissions than those that are defined - // in the permissions policy of the IAM user. For more information, see Session - // Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) - // in the IAM User Guide. - // - // The resulting credentials can be used to access a resource that has a resource-based - // policy. If that policy specifically references the federated user session - // in the Principal element of the policy, the session has the permissions allowed - // by the policy. These permissions are granted in addition to the permissions - // that are granted by the session policies. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - PolicyArns []*PolicyDescriptorType `type:"list"` - - // A list of session tags. Each session tag consists of a key name and an associated - // value. For more information about session tags, see Passing Session Tags - // in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) - // in the IAM User Guide. - // - // This parameter is optional. You can pass up to 50 session tags. The plain - // text session tag keys can’t exceed 128 characters and the values can’t - // exceed 256 characters. For these and additional limits, see IAM and STS Character - // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) - // in the IAM User Guide. - // - // An AWS conversion compresses the passed session policies and session tags - // into a packed binary format that has a separate limit. Your request can fail - // for this limit even if your plain text meets the other requirements. The - // PackedPolicySize response element indicates by percentage how close the policies - // and tags for your request are to the upper size limit. - // - // You can pass a session tag with the same key as a tag that is already attached - // to the user you are federating. When you do, session tags override a user - // tag with the same key. - // - // Tag key–value pairs are not case sensitive, but case is preserved. This - // means that you cannot have separate Department and department tag keys. Assume - // that the role has the Department=Marketing tag and you pass the department=engineering - // session tag. Department and department are not saved as separate tags, and - // the session tag passed in the request takes precedence over the role tag. - Tags []*Tag `type:"list"` -} - -// String returns the string representation -func (s GetFederationTokenInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetFederationTokenInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetFederationTokenInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetFederationTokenInput"} - if s.DurationSeconds != nil && *s.DurationSeconds < 900 { - invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) - } - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) - } - if s.Name != nil && len(*s.Name) < 2 { - invalidParams.Add(request.NewErrParamMinLen("Name", 2)) - } - if s.Policy != nil && len(*s.Policy) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) - } - if s.PolicyArns != nil { - for i, v := range s.PolicyArns { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) - } - } - } - if s.Tags != nil { - for i, v := range s.Tags { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDurationSeconds sets the DurationSeconds field's value. -func (s *GetFederationTokenInput) SetDurationSeconds(v int64) *GetFederationTokenInput { - s.DurationSeconds = &v - return s -} - -// SetName sets the Name field's value. -func (s *GetFederationTokenInput) SetName(v string) *GetFederationTokenInput { - s.Name = &v - return s -} - -// SetPolicy sets the Policy field's value. -func (s *GetFederationTokenInput) SetPolicy(v string) *GetFederationTokenInput { - s.Policy = &v - return s -} - -// SetPolicyArns sets the PolicyArns field's value. -func (s *GetFederationTokenInput) SetPolicyArns(v []*PolicyDescriptorType) *GetFederationTokenInput { - s.PolicyArns = v - return s -} - -// SetTags sets the Tags field's value. -func (s *GetFederationTokenInput) SetTags(v []*Tag) *GetFederationTokenInput { - s.Tags = v - return s -} - -// Contains the response to a successful GetFederationToken request, including -// temporary AWS credentials that can be used to make AWS requests. -type GetFederationTokenOutput struct { - _ struct{} `type:"structure"` - - // The temporary security credentials, which include an access key ID, a secret - // access key, and a security (or session) token. - // - // The size of the security token that STS API operations return is not fixed. - // We strongly recommend that you make no assumptions about the maximum size. - Credentials *Credentials `type:"structure"` - - // Identifiers for the federated user associated with the credentials (such - // as arn:aws:sts::123456789012:federated-user/Bob or 123456789012:Bob). You - // can use the federated user's ARN in your resource-based policies, such as - // an Amazon S3 bucket policy. - FederatedUser *FederatedUser `type:"structure"` - - // A percentage value that indicates the packed size of the session policies - // and session tags combined passed in the request. The request fails if the - // packed size is greater than 100 percent, which means the policies and tags - // exceeded the allowed space. - PackedPolicySize *int64 `type:"integer"` -} - -// String returns the string representation -func (s GetFederationTokenOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetFederationTokenOutput) GoString() string { - return s.String() -} - -// SetCredentials sets the Credentials field's value. -func (s *GetFederationTokenOutput) SetCredentials(v *Credentials) *GetFederationTokenOutput { - s.Credentials = v - return s -} - -// SetFederatedUser sets the FederatedUser field's value. -func (s *GetFederationTokenOutput) SetFederatedUser(v *FederatedUser) *GetFederationTokenOutput { - s.FederatedUser = v - return s -} - -// SetPackedPolicySize sets the PackedPolicySize field's value. -func (s *GetFederationTokenOutput) SetPackedPolicySize(v int64) *GetFederationTokenOutput { - s.PackedPolicySize = &v - return s -} - -type GetSessionTokenInput struct { - _ struct{} `type:"structure"` - - // The duration, in seconds, that the credentials should remain valid. Acceptable - // durations for IAM user sessions range from 900 seconds (15 minutes) to 129,600 - // seconds (36 hours), with 43,200 seconds (12 hours) as the default. Sessions - // for AWS account owners are restricted to a maximum of 3,600 seconds (one - // hour). If the duration is longer than one hour, the session for AWS account - // owners defaults to one hour. - DurationSeconds *int64 `min:"900" type:"integer"` - - // The identification number of the MFA device that is associated with the IAM - // user who is making the GetSessionToken call. Specify this value if the IAM - // user has a policy that requires MFA authentication. The value is either the - // serial number for a hardware device (such as GAHT12345678) or an Amazon Resource - // Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user). - // You can find the device for an IAM user by going to the AWS Management Console - // and viewing the user's security credentials. - // - // The regex used to validate this parameter is a string of characters consisting - // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@:/- - SerialNumber *string `min:"9" type:"string"` - - // The value provided by the MFA device, if MFA is required. If any policy requires - // the IAM user to submit an MFA code, specify this value. If MFA authentication - // is required, the user must provide a code when requesting a set of temporary - // security credentials. A user who fails to provide the code receives an "access - // denied" response when requesting resources that require MFA authentication. - // - // The format for this parameter, as described by its regex pattern, is a sequence - // of six numeric digits. - TokenCode *string `min:"6" type:"string"` -} - -// String returns the string representation -func (s GetSessionTokenInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetSessionTokenInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *GetSessionTokenInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetSessionTokenInput"} - if s.DurationSeconds != nil && *s.DurationSeconds < 900 { - invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) - } - if s.SerialNumber != nil && len(*s.SerialNumber) < 9 { - invalidParams.Add(request.NewErrParamMinLen("SerialNumber", 9)) - } - if s.TokenCode != nil && len(*s.TokenCode) < 6 { - invalidParams.Add(request.NewErrParamMinLen("TokenCode", 6)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDurationSeconds sets the DurationSeconds field's value. -func (s *GetSessionTokenInput) SetDurationSeconds(v int64) *GetSessionTokenInput { - s.DurationSeconds = &v - return s -} - -// SetSerialNumber sets the SerialNumber field's value. -func (s *GetSessionTokenInput) SetSerialNumber(v string) *GetSessionTokenInput { - s.SerialNumber = &v - return s -} - -// SetTokenCode sets the TokenCode field's value. -func (s *GetSessionTokenInput) SetTokenCode(v string) *GetSessionTokenInput { - s.TokenCode = &v - return s -} - -// Contains the response to a successful GetSessionToken request, including -// temporary AWS credentials that can be used to make AWS requests. -type GetSessionTokenOutput struct { - _ struct{} `type:"structure"` - - // The temporary security credentials, which include an access key ID, a secret - // access key, and a security (or session) token. - // - // The size of the security token that STS API operations return is not fixed. - // We strongly recommend that you make no assumptions about the maximum size. - Credentials *Credentials `type:"structure"` -} - -// String returns the string representation -func (s GetSessionTokenOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s GetSessionTokenOutput) GoString() string { - return s.String() -} - -// SetCredentials sets the Credentials field's value. -func (s *GetSessionTokenOutput) SetCredentials(v *Credentials) *GetSessionTokenOutput { - s.Credentials = v - return s -} - -// A reference to the IAM managed policy that is passed as a session policy -// for a role session or a federated user session. -type PolicyDescriptorType struct { - _ struct{} `type:"structure"` - - // The Amazon Resource Name (ARN) of the IAM managed policy to use as a session - // policy for the role. For more information about ARNs, see Amazon Resource - // Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // in the AWS General Reference. - Arn *string `locationName:"arn" min:"20" type:"string"` -} - -// String returns the string representation -func (s PolicyDescriptorType) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s PolicyDescriptorType) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *PolicyDescriptorType) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PolicyDescriptorType"} - if s.Arn != nil && len(*s.Arn) < 20 { - invalidParams.Add(request.NewErrParamMinLen("Arn", 20)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetArn sets the Arn field's value. -func (s *PolicyDescriptorType) SetArn(v string) *PolicyDescriptorType { - s.Arn = &v - return s -} - -// You can pass custom key-value pair attributes when you assume a role or federate -// a user. These are called session tags. You can then use the session tags -// to control access to resources. For more information, see Tagging AWS STS -// Sessions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) -// in the IAM User Guide. -type Tag struct { - _ struct{} `type:"structure"` - - // The key for a session tag. - // - // You can pass up to 50 session tags. The plain text session tag keys can’t - // exceed 128 characters. For these and additional limits, see IAM and STS Character - // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) - // in the IAM User Guide. - // - // Key is a required field - Key *string `min:"1" type:"string" required:"true"` - - // The value for a session tag. - // - // You can pass up to 50 session tags. The plain text session tag values can’t - // exceed 256 characters. For these and additional limits, see IAM and STS Character - // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) - // in the IAM User Guide. - // - // Value is a required field - Value *string `type:"string" required:"true"` -} - -// String returns the string representation -func (s Tag) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s Tag) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *Tag) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "Tag"} - if s.Key == nil { - invalidParams.Add(request.NewErrParamRequired("Key")) - } - if s.Key != nil && len(*s.Key) < 1 { - invalidParams.Add(request.NewErrParamMinLen("Key", 1)) - } - if s.Value == nil { - invalidParams.Add(request.NewErrParamRequired("Value")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetKey sets the Key field's value. -func (s *Tag) SetKey(v string) *Tag { - s.Key = &v - return s -} - -// SetValue sets the Value field's value. -func (s *Tag) SetValue(v string) *Tag { - s.Value = &v - return s -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -package sts - -import "github.com/aws/aws-sdk-go/aws/request" - -func init() { - initRequest = customizeRequest -} - -func customizeRequest(r *request.Request) { - r.RetryErrorCodes = append(r.RetryErrorCodes, ErrCodeIDPCommunicationErrorException) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -// Package sts provides the client and types for making API -// requests to AWS Security Token Service. -// -// The AWS Security Token Service (STS) is a web service that enables you to -// request temporary, limited-privilege credentials for AWS Identity and Access -// Management (IAM) users or for users that you authenticate (federated users). -// This guide provides descriptions of the STS API. For more detailed information -// about using this service, go to Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). -// -// For information about setting up signatures and authorization through the -// API, go to Signing AWS API Requests (https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html) -// in the AWS General Reference. For general information about the Query API, -// go to Making Query Requests (https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) -// in Using IAM. For information about using security tokens with other AWS -// products, go to AWS Services That Work with IAM (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) -// in the IAM User Guide. -// -// If you're new to AWS and need additional technical information about a specific -// AWS product, you can find the product's technical documentation at http://aws.amazon.com/documentation/ -// (http://aws.amazon.com/documentation/). -// -// Endpoints -// -// By default, AWS Security Token Service (STS) is available as a global service, -// and all AWS STS requests go to a single endpoint at https://sts.amazonaws.com. -// Global requests map to the US East (N. Virginia) region. AWS recommends using -// Regional AWS STS endpoints instead of the global endpoint to reduce latency, -// build in redundancy, and increase session token validity. For more information, -// see Managing AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// Most AWS Regions are enabled for operations in all AWS services by default. -// Those Regions are automatically activated for use with AWS STS. Some Regions, -// such as Asia Pacific (Hong Kong), must be manually enabled. To learn more -// about enabling and disabling AWS Regions, see Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) -// in the AWS General Reference. When you enable these AWS Regions, they are -// automatically activated for use with AWS STS. You cannot activate the STS -// endpoint for a Region that is disabled. Tokens that are valid in all AWS -// Regions are longer than tokens that are valid in Regions that are enabled -// by default. Changing this setting might affect existing systems where you -// temporarily store tokens. For more information, see Managing Global Endpoint -// Session Tokens (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-manage-tokens) -// in the IAM User Guide. -// -// After you activate a Region for use with AWS STS, you can direct AWS STS -// API calls to that Region. AWS STS recommends that you provide both the Region -// and endpoint when you make calls to a Regional endpoint. You can provide -// the Region alone for manually enabled Regions, such as Asia Pacific (Hong -// Kong). In this case, the calls are directed to the STS Regional endpoint. -// However, if you provide the Region alone for Regions enabled by default, -// the calls are directed to the global endpoint of https://sts.amazonaws.com. -// -// To view the list of AWS STS endpoints and whether they are active by default, -// see Writing Code to Use AWS STS Regions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code) -// in the IAM User Guide. -// -// Recording API requests -// -// STS supports AWS CloudTrail, which is a service that records AWS calls for -// your AWS account and delivers log files to an Amazon S3 bucket. By using -// information collected by CloudTrail, you can determine what requests were -// successfully made to STS, who made the request, when it was made, and so -// on. -// -// If you activate AWS STS endpoints in Regions other than the default global -// endpoint, then you must also turn on CloudTrail logging in those Regions. -// This is necessary to record any AWS STS API calls that are made in those -// Regions. For more information, see Turning On CloudTrail in Additional Regions -// (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/aggregating_logs_regions_turn_on_ct.html) -// in the AWS CloudTrail User Guide. -// -// AWS Security Token Service (STS) is a global service with a single endpoint -// at https://sts.amazonaws.com. Calls to this endpoint are logged as calls -// to a global service. However, because this endpoint is physically located -// in the US East (N. Virginia) Region, your logs list us-east-1 as the event -// Region. CloudTrail does not write these logs to the US East (Ohio) Region -// unless you choose to include global service logs in that Region. CloudTrail -// writes calls to all Regional endpoints to their respective Regions. For example, -// calls to sts.us-east-2.amazonaws.com are published to the US East (Ohio) -// Region and calls to sts.eu-central-1.amazonaws.com are published to the EU -// (Frankfurt) Region. -// -// To learn more about CloudTrail, including how to turn it on and find your -// log files, see the AWS CloudTrail User Guide (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html). -// -// See https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 for more information on this service. -// -// See sts package documentation for more information. -// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/ -// -// Using the Client -// -// To contact AWS Security Token Service with the SDK use the New function to create -// a new service client. With that client you can make API requests to the service. -// These clients are safe to use concurrently. -// -// See the SDK's documentation for more information on how to use the SDK. -// https://docs.aws.amazon.com/sdk-for-go/api/ -// -// See aws.Config documentation for more information on configuring SDK clients. -// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config -// -// See the AWS Security Token Service client STS for more -// information on creating client for this service. -// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/#New -package sts diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package sts - -const ( - - // ErrCodeExpiredTokenException for service response error code - // "ExpiredTokenException". - // - // The web identity token that was passed is expired or is not valid. Get a - // new identity token from the identity provider and then retry the request. - ErrCodeExpiredTokenException = "ExpiredTokenException" - - // ErrCodeIDPCommunicationErrorException for service response error code - // "IDPCommunicationError". - // - // The request could not be fulfilled because the identity provider (IDP) that - // was asked to verify the incoming identity token could not be reached. This - // is often a transient error caused by network conditions. Retry the request - // a limited number of times so that you don't exceed the request rate. If the - // error persists, the identity provider might be down or not responding. - ErrCodeIDPCommunicationErrorException = "IDPCommunicationError" - - // ErrCodeIDPRejectedClaimException for service response error code - // "IDPRejectedClaim". - // - // The identity provider (IdP) reported that authentication failed. This might - // be because the claim is invalid. - // - // If this error is returned for the AssumeRoleWithWebIdentity operation, it - // can also mean that the claim has expired or has been explicitly revoked. - ErrCodeIDPRejectedClaimException = "IDPRejectedClaim" - - // ErrCodeInvalidAuthorizationMessageException for service response error code - // "InvalidAuthorizationMessageException". - // - // The error returned if the message passed to DecodeAuthorizationMessage was - // invalid. This can happen if the token contains invalid characters, such as - // linebreaks. - ErrCodeInvalidAuthorizationMessageException = "InvalidAuthorizationMessageException" - - // ErrCodeInvalidIdentityTokenException for service response error code - // "InvalidIdentityToken". - // - // The web identity token that was passed could not be validated by AWS. Get - // a new identity token from the identity provider and then retry the request. - ErrCodeInvalidIdentityTokenException = "InvalidIdentityToken" - - // ErrCodeMalformedPolicyDocumentException for service response error code - // "MalformedPolicyDocument". - // - // The request was rejected because the policy document was malformed. The error - // message describes the specific error. - ErrCodeMalformedPolicyDocumentException = "MalformedPolicyDocument" - - // ErrCodePackedPolicyTooLargeException for service response error code - // "PackedPolicyTooLarge". - // - // The request was rejected because the total packed size of the session policies - // and session tags combined was too large. An AWS conversion compresses the - // session policy document, session policy ARNs, and session tags into a packed - // binary format that has a separate limit. The error message indicates by percentage - // how close the policies and tags are to the upper size limit. For more information, - // see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) - // in the IAM User Guide. - // - // You could receive this error even though you meet other defined session policy - // and session tag limits. For more information, see IAM and STS Entity Character - // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) - // in the IAM User Guide. - ErrCodePackedPolicyTooLargeException = "PackedPolicyTooLarge" - - // ErrCodeRegionDisabledException for service response error code - // "RegionDisabledException". - // - // STS is not activated in the requested region for the account that is being - // asked to generate credentials. The account administrator must use the IAM - // console to activate STS in that region. For more information, see Activating - // and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) - // in the IAM User Guide. - ErrCodeRegionDisabledException = "RegionDisabledException" -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/service.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/service.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/service.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -package sts - -import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/client" - "github.com/aws/aws-sdk-go/aws/client/metadata" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/aws/signer/v4" - "github.com/aws/aws-sdk-go/private/protocol/query" -) - -// STS provides the API operation methods for making requests to -// AWS Security Token Service. See this package's package overview docs -// for details on the service. -// -// STS methods are safe to use concurrently. It is not safe to -// modify mutate any of the struct's properties though. -type STS struct { - *client.Client -} - -// Used for custom client initialization logic -var initClient func(*client.Client) - -// Used for custom request initialization logic -var initRequest func(*request.Request) - -// Service information constants -const ( - ServiceName = "sts" // Name of service. - EndpointsID = ServiceName // ID to lookup a service endpoint with. - ServiceID = "STS" // ServiceID is a unique identifer of a specific service. -) - -// New creates a new instance of the STS client with a session. -// If additional configuration is needed for the client instance use the optional -// aws.Config parameter to add your extra config. -// -// Example: -// mySession := session.Must(session.NewSession()) -// -// // Create a STS client from just a session. -// svc := sts.New(mySession) -// -// // Create a STS client with additional configuration -// svc := sts.New(mySession, aws.NewConfig().WithRegion("us-west-2")) -func New(p client.ConfigProvider, cfgs ...*aws.Config) *STS { - c := p.ClientConfig(EndpointsID, cfgs...) - return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) -} - -// newClient creates, initializes and returns a new service client instance. -func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *STS { - svc := &STS{ - Client: client.New( - cfg, - metadata.ClientInfo{ - ServiceName: ServiceName, - ServiceID: ServiceID, - SigningName: signingName, - SigningRegion: signingRegion, - PartitionID: partitionID, - Endpoint: endpoint, - APIVersion: "2011-06-15", - }, - handlers, - ), - } - - // Handlers - svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) - svc.Handlers.Build.PushBackNamed(query.BuildHandler) - svc.Handlers.Unmarshal.PushBackNamed(query.UnmarshalHandler) - svc.Handlers.UnmarshalMeta.PushBackNamed(query.UnmarshalMetaHandler) - svc.Handlers.UnmarshalError.PushBackNamed(query.UnmarshalErrorHandler) - - // Run custom client initialization if present - if initClient != nil { - initClient(svc.Client) - } - - return svc -} - -// newRequest creates a new request for a STS operation and runs any -// custom request initialization. -func (c *STS) newRequest(op *request.Operation, params, data interface{}) *request.Request { - req := c.NewRequest(op, params, data) - - // Run custom request initialization if present - if initRequest != nil { - initRequest(req) - } - - return req -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go --- consul-1.7.4+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. - -// Package stsiface provides an interface to enable mocking the AWS Security Token Service service client -// for testing your code. -// -// It is important to note that this interface will have breaking changes -// when the service model is updated and adds new API operations, paginators, -// and waiters. -package stsiface - -import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/sts" -) - -// STSAPI provides an interface to enable mocking the -// sts.STS service client's API operation, -// paginators, and waiters. This make unit testing your code that calls out -// to the SDK's service client's calls easier. -// -// The best way to use this interface is so the SDK's service client's calls -// can be stubbed out for unit testing your code with the SDK without needing -// to inject custom request handlers into the SDK's request pipeline. -// -// // myFunc uses an SDK service client to make a request to -// // AWS Security Token Service. -// func myFunc(svc stsiface.STSAPI) bool { -// // Make svc.AssumeRole request -// } -// -// func main() { -// sess := session.New() -// svc := sts.New(sess) -// -// myFunc(svc) -// } -// -// In your _test.go file: -// -// // Define a mock struct to be used in your unit tests of myFunc. -// type mockSTSClient struct { -// stsiface.STSAPI -// } -// func (m *mockSTSClient) AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) { -// // mock response/functionality -// } -// -// func TestMyFunc(t *testing.T) { -// // Setup Test -// mockSvc := &mockSTSClient{} -// -// myfunc(mockSvc) -// -// // Verify myFunc's functionality -// } -// -// It is important to note that this interface will have breaking changes -// when the service model is updated and adds new API operations, paginators, -// and waiters. Its suggested to use the pattern above for testing, or using -// tooling to generate mocks to satisfy the interfaces. -type STSAPI interface { - AssumeRole(*sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) - AssumeRoleWithContext(aws.Context, *sts.AssumeRoleInput, ...request.Option) (*sts.AssumeRoleOutput, error) - AssumeRoleRequest(*sts.AssumeRoleInput) (*request.Request, *sts.AssumeRoleOutput) - - AssumeRoleWithSAML(*sts.AssumeRoleWithSAMLInput) (*sts.AssumeRoleWithSAMLOutput, error) - AssumeRoleWithSAMLWithContext(aws.Context, *sts.AssumeRoleWithSAMLInput, ...request.Option) (*sts.AssumeRoleWithSAMLOutput, error) - AssumeRoleWithSAMLRequest(*sts.AssumeRoleWithSAMLInput) (*request.Request, *sts.AssumeRoleWithSAMLOutput) - - AssumeRoleWithWebIdentity(*sts.AssumeRoleWithWebIdentityInput) (*sts.AssumeRoleWithWebIdentityOutput, error) - AssumeRoleWithWebIdentityWithContext(aws.Context, *sts.AssumeRoleWithWebIdentityInput, ...request.Option) (*sts.AssumeRoleWithWebIdentityOutput, error) - AssumeRoleWithWebIdentityRequest(*sts.AssumeRoleWithWebIdentityInput) (*request.Request, *sts.AssumeRoleWithWebIdentityOutput) - - DecodeAuthorizationMessage(*sts.DecodeAuthorizationMessageInput) (*sts.DecodeAuthorizationMessageOutput, error) - DecodeAuthorizationMessageWithContext(aws.Context, *sts.DecodeAuthorizationMessageInput, ...request.Option) (*sts.DecodeAuthorizationMessageOutput, error) - DecodeAuthorizationMessageRequest(*sts.DecodeAuthorizationMessageInput) (*request.Request, *sts.DecodeAuthorizationMessageOutput) - - GetAccessKeyInfo(*sts.GetAccessKeyInfoInput) (*sts.GetAccessKeyInfoOutput, error) - GetAccessKeyInfoWithContext(aws.Context, *sts.GetAccessKeyInfoInput, ...request.Option) (*sts.GetAccessKeyInfoOutput, error) - GetAccessKeyInfoRequest(*sts.GetAccessKeyInfoInput) (*request.Request, *sts.GetAccessKeyInfoOutput) - - GetCallerIdentity(*sts.GetCallerIdentityInput) (*sts.GetCallerIdentityOutput, error) - GetCallerIdentityWithContext(aws.Context, *sts.GetCallerIdentityInput, ...request.Option) (*sts.GetCallerIdentityOutput, error) - GetCallerIdentityRequest(*sts.GetCallerIdentityInput) (*request.Request, *sts.GetCallerIdentityOutput) - - GetFederationToken(*sts.GetFederationTokenInput) (*sts.GetFederationTokenOutput, error) - GetFederationTokenWithContext(aws.Context, *sts.GetFederationTokenInput, ...request.Option) (*sts.GetFederationTokenOutput, error) - GetFederationTokenRequest(*sts.GetFederationTokenInput) (*request.Request, *sts.GetFederationTokenOutput) - - GetSessionToken(*sts.GetSessionTokenInput) (*sts.GetSessionTokenOutput, error) - GetSessionTokenWithContext(aws.Context, *sts.GetSessionTokenInput, ...request.Option) (*sts.GetSessionTokenOutput, error) - GetSessionTokenRequest(*sts.GetSessionTokenInput) (*request.Request, *sts.GetSessionTokenOutput) -} - -var _ STSAPI = (*sts.STS)(nil) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/LICENSE consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/LICENSE --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/LICENSE 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,231 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: udpa/annotations/migrate.proto + +package udpa_annotations + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type MigrateAnnotation struct { + Rename string `protobuf:"bytes,1,opt,name=rename,proto3" json:"rename,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MigrateAnnotation) Reset() { *m = MigrateAnnotation{} } +func (m *MigrateAnnotation) String() string { return proto.CompactTextString(m) } +func (*MigrateAnnotation) ProtoMessage() {} +func (*MigrateAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ba8191732d0e246d, []int{0} +} + +func (m *MigrateAnnotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MigrateAnnotation.Unmarshal(m, b) +} +func (m *MigrateAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MigrateAnnotation.Marshal(b, m, deterministic) +} +func (m *MigrateAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_MigrateAnnotation.Merge(m, src) +} +func (m *MigrateAnnotation) XXX_Size() int { + return xxx_messageInfo_MigrateAnnotation.Size(m) +} +func (m *MigrateAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_MigrateAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_MigrateAnnotation proto.InternalMessageInfo + +func (m *MigrateAnnotation) GetRename() string { + if m != nil { + return m.Rename + } + return "" +} + +type FieldMigrateAnnotation struct { + Rename string `protobuf:"bytes,1,opt,name=rename,proto3" json:"rename,omitempty"` + OneofPromotion string `protobuf:"bytes,2,opt,name=oneof_promotion,json=oneofPromotion,proto3" json:"oneof_promotion,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FieldMigrateAnnotation) Reset() { *m = FieldMigrateAnnotation{} } +func (m *FieldMigrateAnnotation) String() string { return proto.CompactTextString(m) } +func (*FieldMigrateAnnotation) ProtoMessage() {} +func (*FieldMigrateAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ba8191732d0e246d, []int{1} +} + +func (m *FieldMigrateAnnotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FieldMigrateAnnotation.Unmarshal(m, b) +} +func (m *FieldMigrateAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FieldMigrateAnnotation.Marshal(b, m, deterministic) +} +func (m *FieldMigrateAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldMigrateAnnotation.Merge(m, src) +} +func (m *FieldMigrateAnnotation) XXX_Size() int { + return xxx_messageInfo_FieldMigrateAnnotation.Size(m) +} +func (m *FieldMigrateAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_FieldMigrateAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_FieldMigrateAnnotation proto.InternalMessageInfo + +func (m *FieldMigrateAnnotation) GetRename() string { + if m != nil { + return m.Rename + } + return "" +} + +func (m *FieldMigrateAnnotation) GetOneofPromotion() string { + if m != nil { + return m.OneofPromotion + } + return "" +} + +type FileMigrateAnnotation struct { + MoveToPackage string `protobuf:"bytes,2,opt,name=move_to_package,json=moveToPackage,proto3" json:"move_to_package,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FileMigrateAnnotation) Reset() { *m = FileMigrateAnnotation{} } +func (m *FileMigrateAnnotation) String() string { return proto.CompactTextString(m) } +func (*FileMigrateAnnotation) ProtoMessage() {} +func (*FileMigrateAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ba8191732d0e246d, []int{2} +} + +func (m *FileMigrateAnnotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FileMigrateAnnotation.Unmarshal(m, b) +} +func (m *FileMigrateAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FileMigrateAnnotation.Marshal(b, m, deterministic) +} +func (m *FileMigrateAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileMigrateAnnotation.Merge(m, src) +} +func (m *FileMigrateAnnotation) XXX_Size() int { + return xxx_messageInfo_FileMigrateAnnotation.Size(m) +} +func (m *FileMigrateAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_FileMigrateAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_FileMigrateAnnotation proto.InternalMessageInfo + +func (m *FileMigrateAnnotation) GetMoveToPackage() string { + if m != nil { + return m.MoveToPackage + } + return "" +} + +var E_MessageMigrate = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.MessageOptions)(nil), + ExtensionType: (*MigrateAnnotation)(nil), + Field: 171962766, + Name: "udpa.annotations.message_migrate", + Tag: "bytes,171962766,opt,name=message_migrate", + Filename: "udpa/annotations/migrate.proto", +} + +var E_FieldMigrate = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*FieldMigrateAnnotation)(nil), + Field: 171962766, + Name: "udpa.annotations.field_migrate", + Tag: "bytes,171962766,opt,name=field_migrate", + Filename: "udpa/annotations/migrate.proto", +} + +var E_EnumMigrate = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumOptions)(nil), + ExtensionType: (*MigrateAnnotation)(nil), + Field: 171962766, + Name: "udpa.annotations.enum_migrate", + Tag: "bytes,171962766,opt,name=enum_migrate", + Filename: "udpa/annotations/migrate.proto", +} + +var E_EnumValueMigrate = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*MigrateAnnotation)(nil), + Field: 171962766, + Name: "udpa.annotations.enum_value_migrate", + Tag: "bytes,171962766,opt,name=enum_value_migrate", + Filename: "udpa/annotations/migrate.proto", +} + +var E_FileMigrate = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FileOptions)(nil), + ExtensionType: (*FileMigrateAnnotation)(nil), + Field: 171962766, + Name: "udpa.annotations.file_migrate", + Tag: "bytes,171962766,opt,name=file_migrate", + Filename: "udpa/annotations/migrate.proto", +} + +func init() { + proto.RegisterType((*MigrateAnnotation)(nil), "udpa.annotations.MigrateAnnotation") + proto.RegisterType((*FieldMigrateAnnotation)(nil), "udpa.annotations.FieldMigrateAnnotation") + proto.RegisterType((*FileMigrateAnnotation)(nil), "udpa.annotations.FileMigrateAnnotation") + proto.RegisterExtension(E_MessageMigrate) + proto.RegisterExtension(E_FieldMigrate) + proto.RegisterExtension(E_EnumMigrate) + proto.RegisterExtension(E_EnumValueMigrate) + proto.RegisterExtension(E_FileMigrate) +} + +func init() { proto.RegisterFile("udpa/annotations/migrate.proto", fileDescriptor_ba8191732d0e246d) } + +var fileDescriptor_ba8191732d0e246d = []byte{ + // 349 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xcd, 0x4a, 0xfb, 0x40, + 0x14, 0xc5, 0xe9, 0x7f, 0x51, 0xf8, 0x4f, 0x3f, 0x0d, 0x58, 0x8a, 0xf8, 0x51, 0x2b, 0xd8, 0x82, + 0x30, 0x01, 0xdd, 0x75, 0x23, 0x2e, 0xec, 0xae, 0x58, 0x83, 0x08, 0xae, 0xc2, 0xb4, 0xbd, 0x09, + 0xa1, 0x99, 0xb9, 0x43, 0x32, 0xa9, 0x6f, 0xe1, 0x4b, 0xfa, 0x20, 0xca, 0x4c, 0x92, 0xb6, 0x38, + 0x41, 0xa4, 0xcb, 0x9c, 0x7b, 0xef, 0xf9, 0xe5, 0x1c, 0x86, 0x9c, 0x67, 0x2b, 0xc9, 0x5c, 0x26, + 0x04, 0x2a, 0xa6, 0x22, 0x14, 0xa9, 0xcb, 0xa3, 0x30, 0x61, 0x0a, 0xa8, 0x4c, 0x50, 0xa1, 0xd3, + 0xd5, 0x73, 0xba, 0x37, 0x3f, 0x19, 0x84, 0x88, 0x61, 0x0c, 0xae, 0x99, 0x2f, 0xb2, 0xc0, 0x5d, + 0x41, 0xba, 0x4c, 0x22, 0xa9, 0x30, 0xc9, 0x6f, 0x86, 0x37, 0xe4, 0x68, 0x96, 0x9b, 0x3c, 0x6c, + 0xef, 0x9c, 0x1e, 0xa9, 0x27, 0x20, 0x18, 0x87, 0x7e, 0x6d, 0x50, 0x1b, 0xff, 0xf7, 0x8a, 0xaf, + 0xe1, 0x1b, 0xe9, 0x4d, 0x23, 0x88, 0x57, 0x7f, 0xbe, 0x70, 0x46, 0xa4, 0x83, 0x02, 0x30, 0xf0, + 0x65, 0x82, 0x1c, 0xf5, 0x6a, 0xff, 0x9f, 0x59, 0x68, 0x1b, 0x79, 0x5e, 0xaa, 0xc3, 0x7b, 0x72, + 0x3c, 0x8d, 0x62, 0xb0, 0x9d, 0xaf, 0x49, 0x87, 0xe3, 0x06, 0x7c, 0x85, 0xbe, 0x64, 0xcb, 0x35, + 0x0b, 0xa1, 0x70, 0x68, 0x69, 0xf9, 0x05, 0xe7, 0xb9, 0x38, 0x91, 0xa4, 0xc3, 0x21, 0x4d, 0x59, + 0x08, 0x7e, 0xd1, 0x8a, 0x73, 0x41, 0xf3, 0xf8, 0xb4, 0x8c, 0x4f, 0x67, 0xf9, 0xc6, 0x93, 0x34, + 0xf5, 0xf4, 0x3f, 0x3e, 0xbf, 0x9e, 0x07, 0xb5, 0x71, 0xe3, 0xf6, 0x8a, 0xfe, 0xac, 0x8e, 0x5a, + 0x7f, 0xe2, 0xb5, 0x0b, 0xff, 0x62, 0x32, 0x41, 0xd2, 0x0a, 0x74, 0x1b, 0x5b, 0xde, 0x99, 0xc5, + 0x33, 0x6d, 0x59, 0xb4, 0xb1, 0x4d, 0xab, 0xae, 0xd5, 0x6b, 0x06, 0x7b, 0xfa, 0x24, 0x24, 0x4d, + 0x10, 0x19, 0xdf, 0xf2, 0x4e, 0x2d, 0xde, 0xa3, 0xc8, 0xf8, 0x61, 0xe1, 0x1a, 0xda, 0xb9, 0x04, + 0xbd, 0x13, 0xc7, 0x80, 0x36, 0x2c, 0xce, 0x76, 0x75, 0x5e, 0x56, 0xe2, 0x5e, 0xf5, 0xce, 0x61, + 0xcc, 0x2e, 0x94, 0xf7, 0x25, 0x78, 0x4d, 0x9a, 0x41, 0x14, 0xc3, 0x2f, 0x09, 0xf5, 0x23, 0xb1, + 0x68, 0xa3, 0xaa, 0x42, 0x2b, 0x1e, 0x93, 0xd7, 0x08, 0x76, 0xf2, 0xa2, 0x6e, 0x4c, 0xef, 0xbe, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x62, 0x65, 0xc8, 0x45, 0x57, 0x03, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/migrate.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,246 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: udpa/annotations/migrate.proto + +package udpa_annotations + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _migrate_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on MigrateAnnotation with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *MigrateAnnotation) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Rename + + return nil +} + +// MigrateAnnotationValidationError is the validation error returned by +// MigrateAnnotation.Validate if the designated constraints aren't met. +type MigrateAnnotationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MigrateAnnotationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MigrateAnnotationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MigrateAnnotationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MigrateAnnotationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MigrateAnnotationValidationError) ErrorName() string { + return "MigrateAnnotationValidationError" +} + +// Error satisfies the builtin error interface +func (e MigrateAnnotationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMigrateAnnotation.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MigrateAnnotationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MigrateAnnotationValidationError{} + +// Validate checks the field values on FieldMigrateAnnotation with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *FieldMigrateAnnotation) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Rename + + // no validation rules for OneofPromotion + + return nil +} + +// FieldMigrateAnnotationValidationError is the validation error returned by +// FieldMigrateAnnotation.Validate if the designated constraints aren't met. +type FieldMigrateAnnotationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FieldMigrateAnnotationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FieldMigrateAnnotationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FieldMigrateAnnotationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FieldMigrateAnnotationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FieldMigrateAnnotationValidationError) ErrorName() string { + return "FieldMigrateAnnotationValidationError" +} + +// Error satisfies the builtin error interface +func (e FieldMigrateAnnotationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFieldMigrateAnnotation.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FieldMigrateAnnotationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FieldMigrateAnnotationValidationError{} + +// Validate checks the field values on FileMigrateAnnotation with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *FileMigrateAnnotation) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MoveToPackage + + return nil +} + +// FileMigrateAnnotationValidationError is the validation error returned by +// FileMigrateAnnotation.Validate if the designated constraints aren't met. +type FileMigrateAnnotationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FileMigrateAnnotationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FileMigrateAnnotationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FileMigrateAnnotationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FileMigrateAnnotationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FileMigrateAnnotationValidationError) ErrorName() string { + return "FileMigrateAnnotationValidationError" +} + +// Error satisfies the builtin error interface +func (e FileMigrateAnnotationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFileMigrateAnnotation.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FileMigrateAnnotationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FileMigrateAnnotationValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,50 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: udpa/annotations/sensitive.proto + +package udpa_annotations + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +var E_Sensitive = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 76569463, + Name: "udpa.annotations.sensitive", + Tag: "varint,76569463,opt,name=sensitive", + Filename: "udpa/annotations/sensitive.proto", +} + +func init() { + proto.RegisterExtension(E_Sensitive) +} + +func init() { proto.RegisterFile("udpa/annotations/sensitive.proto", fileDescriptor_abbd0dde0408189d) } + +var fileDescriptor_abbd0dde0408189d = []byte{ + // 134 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x4d, 0x29, 0x48, + 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2f, 0x4e, 0xcd, + 0x2b, 0xce, 0x2c, 0xc9, 0x2c, 0x4b, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x00, 0xa9, + 0xd0, 0x43, 0x52, 0x21, 0xa5, 0x90, 0x9e, 0x9f, 0x9f, 0x9e, 0x93, 0xaa, 0x0f, 0x96, 0x4f, 0x2a, + 0x4d, 0xd3, 0x4f, 0x49, 0x2d, 0x4e, 0x2e, 0xca, 0x2c, 0x28, 0xc9, 0x2f, 0x82, 0xe8, 0xb1, 0xb2, + 0xe3, 0xe2, 0x84, 0x1b, 0x23, 0x24, 0xab, 0x07, 0x51, 0xaf, 0x07, 0x53, 0xaf, 0xe7, 0x96, 0x99, + 0x9a, 0x93, 0xe2, 0x5f, 0x00, 0x36, 0x4d, 0xe2, 0xfb, 0xb6, 0x83, 0x2a, 0x0a, 0x8c, 0x1a, 0x1c, + 0x41, 0x08, 0x2d, 0x49, 0x6c, 0x60, 0xa5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xba, + 0xeb, 0x73, 0x9e, 0x00, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/sensitive.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,37 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: udpa/annotations/sensitive.proto + +package udpa_annotations + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _sensitive_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,93 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: udpa/annotations/status.proto + +package udpa_annotations + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type StatusAnnotation struct { + WorkInProgress bool `protobuf:"varint,1,opt,name=work_in_progress,json=workInProgress,proto3" json:"work_in_progress,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StatusAnnotation) Reset() { *m = StatusAnnotation{} } +func (m *StatusAnnotation) String() string { return proto.CompactTextString(m) } +func (*StatusAnnotation) ProtoMessage() {} +func (*StatusAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_011cc2e7e491b0ff, []int{0} +} + +func (m *StatusAnnotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StatusAnnotation.Unmarshal(m, b) +} +func (m *StatusAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StatusAnnotation.Marshal(b, m, deterministic) +} +func (m *StatusAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatusAnnotation.Merge(m, src) +} +func (m *StatusAnnotation) XXX_Size() int { + return xxx_messageInfo_StatusAnnotation.Size(m) +} +func (m *StatusAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_StatusAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_StatusAnnotation proto.InternalMessageInfo + +func (m *StatusAnnotation) GetWorkInProgress() bool { + if m != nil { + return m.WorkInProgress + } + return false +} + +var E_FileStatus = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FileOptions)(nil), + ExtensionType: (*StatusAnnotation)(nil), + Field: 222707719, + Name: "udpa.annotations.file_status", + Tag: "bytes,222707719,opt,name=file_status", + Filename: "udpa/annotations/status.proto", +} + +func init() { + proto.RegisterType((*StatusAnnotation)(nil), "udpa.annotations.StatusAnnotation") + proto.RegisterExtension(E_FileStatus) +} + +func init() { proto.RegisterFile("udpa/annotations/status.proto", fileDescriptor_011cc2e7e491b0ff) } + +var fileDescriptor_011cc2e7e491b0ff = []byte{ + // 191 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2d, 0x4d, 0x29, 0x48, + 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2f, 0x2e, 0x49, + 0x2c, 0x29, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x00, 0x49, 0xeb, 0x21, 0x49, + 0x4b, 0x29, 0xa4, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x83, 0xe5, 0x93, 0x4a, 0xd3, 0xf4, 0x53, + 0x52, 0x8b, 0x93, 0x8b, 0x32, 0x0b, 0x4a, 0xf2, 0x8b, 0x20, 0x7a, 0x94, 0x6c, 0xb8, 0x04, 0x82, + 0xc1, 0x66, 0x38, 0xc2, 0xb5, 0x09, 0x69, 0x70, 0x09, 0x94, 0xe7, 0x17, 0x65, 0xc7, 0x67, 0xe6, + 0xc5, 0x17, 0x14, 0xe5, 0xa7, 0x17, 0xa5, 0x16, 0x17, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x04, + 0xf1, 0x81, 0xc4, 0x3d, 0xf3, 0x02, 0xa0, 0xa2, 0x56, 0x29, 0x5c, 0xdc, 0x69, 0x99, 0x39, 0xa9, + 0xf1, 0x10, 0x67, 0x08, 0xc9, 0xe8, 0x41, 0xec, 0xd3, 0x83, 0xd9, 0xa7, 0xe7, 0x96, 0x99, 0x93, + 0xea, 0x5f, 0x00, 0x76, 0x8c, 0x44, 0x7b, 0xc3, 0xcc, 0x2c, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x25, + 0x3d, 0x74, 0x87, 0xea, 0xa1, 0xbb, 0x21, 0x88, 0x0b, 0x64, 0x2e, 0x44, 0x34, 0x89, 0x0d, 0x6c, + 0x9c, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xda, 0x3c, 0x97, 0x43, 0xff, 0x00, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/status.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,104 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: udpa/annotations/status.proto + +package udpa_annotations + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _status_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on StatusAnnotation with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *StatusAnnotation) Validate() error { + if m == nil { + return nil + } + + // no validation rules for WorkInProgress + + return nil +} + +// StatusAnnotationValidationError is the validation error returned by +// StatusAnnotation.Validate if the designated constraints aren't met. +type StatusAnnotationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StatusAnnotationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StatusAnnotationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StatusAnnotationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StatusAnnotationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StatusAnnotationValidationError) ErrorName() string { return "StatusAnnotationValidationError" } + +// Error satisfies the builtin error interface +func (e StatusAnnotationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStatusAnnotation.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StatusAnnotationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StatusAnnotationValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,94 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: udpa/annotations/versioning.proto + +package udpa_annotations + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type VersioningAnnotation struct { + PreviousMessageType string `protobuf:"bytes,1,opt,name=previous_message_type,json=previousMessageType,proto3" json:"previous_message_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VersioningAnnotation) Reset() { *m = VersioningAnnotation{} } +func (m *VersioningAnnotation) String() string { return proto.CompactTextString(m) } +func (*VersioningAnnotation) ProtoMessage() {} +func (*VersioningAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_5bc0544382e16cfc, []int{0} +} + +func (m *VersioningAnnotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VersioningAnnotation.Unmarshal(m, b) +} +func (m *VersioningAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VersioningAnnotation.Marshal(b, m, deterministic) +} +func (m *VersioningAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_VersioningAnnotation.Merge(m, src) +} +func (m *VersioningAnnotation) XXX_Size() int { + return xxx_messageInfo_VersioningAnnotation.Size(m) +} +func (m *VersioningAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_VersioningAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_VersioningAnnotation proto.InternalMessageInfo + +func (m *VersioningAnnotation) GetPreviousMessageType() string { + if m != nil { + return m.PreviousMessageType + } + return "" +} + +var E_Versioning = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.MessageOptions)(nil), + ExtensionType: (*VersioningAnnotation)(nil), + Field: 7881811, + Name: "udpa.annotations.versioning", + Tag: "bytes,7881811,opt,name=versioning", + Filename: "udpa/annotations/versioning.proto", +} + +func init() { + proto.RegisterType((*VersioningAnnotation)(nil), "udpa.annotations.VersioningAnnotation") + proto.RegisterExtension(E_Versioning) +} + +func init() { proto.RegisterFile("udpa/annotations/versioning.proto", fileDescriptor_5bc0544382e16cfc) } + +var fileDescriptor_5bc0544382e16cfc = []byte{ + // 193 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2c, 0x4d, 0x29, 0x48, + 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2f, 0x4b, 0x2d, + 0x2a, 0xce, 0xcc, 0xcf, 0xcb, 0xcc, 0x4b, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x00, + 0x29, 0xd1, 0x43, 0x52, 0x22, 0xa5, 0x90, 0x9e, 0x9f, 0x9f, 0x9e, 0x93, 0xaa, 0x0f, 0x96, 0x4f, + 0x2a, 0x4d, 0xd3, 0x4f, 0x49, 0x2d, 0x4e, 0x2e, 0xca, 0x2c, 0x28, 0xc9, 0x2f, 0x82, 0xe8, 0x51, + 0xf2, 0xe2, 0x12, 0x09, 0x83, 0x9b, 0xe3, 0x08, 0xd7, 0x2a, 0x64, 0xc4, 0x25, 0x5a, 0x50, 0x94, + 0x5a, 0x96, 0x99, 0x5f, 0x5a, 0x1c, 0x9f, 0x9b, 0x5a, 0x5c, 0x9c, 0x98, 0x9e, 0x1a, 0x5f, 0x52, + 0x59, 0x90, 0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x24, 0x0c, 0x93, 0xf4, 0x85, 0xc8, 0x85, + 0x54, 0x16, 0xa4, 0x5a, 0x65, 0x71, 0x71, 0x21, 0xdc, 0x24, 0x24, 0xaf, 0x07, 0xb1, 0x5c, 0x0f, + 0x66, 0xb9, 0x1e, 0x54, 0xad, 0x7f, 0x01, 0xd8, 0x71, 0x12, 0x97, 0x3b, 0x1e, 0x32, 0x2b, 0x30, + 0x6a, 0x70, 0x1b, 0xa9, 0xe9, 0xa1, 0x3b, 0x5c, 0x0f, 0x9b, 0x9b, 0x82, 0x90, 0x4c, 0x4f, 0x62, + 0x03, 0x9b, 0x6a, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x9c, 0xb8, 0x85, 0x17, 0x01, 0x00, + 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/cncf/udpa/go/udpa/annotations/versioning.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,106 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: udpa/annotations/versioning.proto + +package udpa_annotations + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _versioning_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on VersioningAnnotation with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *VersioningAnnotation) Validate() error { + if m == nil { + return nil + } + + // no validation rules for PreviousMessageType + + return nil +} + +// VersioningAnnotationValidationError is the validation error returned by +// VersioningAnnotation.Validate if the designated constraints aren't met. +type VersioningAnnotationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e VersioningAnnotationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e VersioningAnnotationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e VersioningAnnotationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e VersioningAnnotationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e VersioningAnnotationValidationError) ErrorName() string { + return "VersioningAnnotationValidationError" +} + +// Error satisfies the builtin error interface +func (e VersioningAnnotationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sVersioningAnnotation.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = VersioningAnnotationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = VersioningAnnotationValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,66 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/annotations/deprecation.proto + +package envoy_annotations + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +var E_DisallowedByDefault = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 189503207, + Name: "envoy.annotations.disallowed_by_default", + Tag: "varint,189503207,opt,name=disallowed_by_default", + Filename: "envoy/annotations/deprecation.proto", +} + +var E_DisallowedByDefaultEnum = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 70100853, + Name: "envoy.annotations.disallowed_by_default_enum", + Tag: "varint,70100853,opt,name=disallowed_by_default_enum", + Filename: "envoy/annotations/deprecation.proto", +} + +func init() { + proto.RegisterExtension(E_DisallowedByDefault) + proto.RegisterExtension(E_DisallowedByDefaultEnum) +} + +func init() { + proto.RegisterFile("envoy/annotations/deprecation.proto", fileDescriptor_2fd079940089e0eb) +} + +var fileDescriptor_2fd079940089e0eb = []byte{ + // 197 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4e, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x4f, 0x49, + 0x2d, 0x28, 0x4a, 0x4d, 0x06, 0x73, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x04, 0xc1, 0x8a, + 0xf4, 0x90, 0x14, 0x49, 0x29, 0xa4, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x83, 0x15, 0x24, 0x95, + 0xa6, 0xe9, 0xa7, 0xa4, 0x16, 0x27, 0x17, 0x65, 0x16, 0x94, 0xe4, 0x17, 0x41, 0x34, 0x59, 0x85, + 0x70, 0x89, 0xa6, 0x64, 0x16, 0x27, 0xe6, 0xe4, 0xe4, 0x97, 0xa7, 0xa6, 0xc4, 0x27, 0x55, 0xc6, + 0xa7, 0xa4, 0xa6, 0x25, 0x96, 0xe6, 0x94, 0x08, 0xc9, 0xea, 0x41, 0xf4, 0xea, 0xc1, 0xf4, 0xea, + 0xb9, 0x65, 0xa6, 0xe6, 0xa4, 0xf8, 0x17, 0x80, 0x4d, 0x96, 0x78, 0xbe, 0x76, 0x5d, 0x94, 0x02, + 0xa3, 0x06, 0x47, 0x90, 0x30, 0x42, 0xbb, 0x53, 0xa5, 0x0b, 0x44, 0xb3, 0x55, 0x22, 0x97, 0x14, + 0x56, 0x53, 0xe3, 0x53, 0xf3, 0x4a, 0x73, 0x85, 0x14, 0x31, 0x8c, 0x76, 0xcd, 0x2b, 0xcd, 0x0d, + 0x4b, 0xcc, 0x29, 0x4d, 0x85, 0x19, 0xff, 0xf5, 0xdc, 0x36, 0x45, 0xb0, 0xf1, 0xe2, 0x58, 0x8c, + 0x07, 0xa9, 0x4e, 0x62, 0x03, 0x6b, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xca, 0xf7, + 0x3d, 0x1b, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/deprecation.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,37 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/annotations/deprecation.proto + +package envoy_annotations + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _deprecation_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,92 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/annotations/resource.proto + +package envoy_annotations + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ResourceAnnotation struct { + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResourceAnnotation) Reset() { *m = ResourceAnnotation{} } +func (m *ResourceAnnotation) String() string { return proto.CompactTextString(m) } +func (*ResourceAnnotation) ProtoMessage() {} +func (*ResourceAnnotation) Descriptor() ([]byte, []int) { + return fileDescriptor_faafdcff915d6055, []int{0} +} + +func (m *ResourceAnnotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResourceAnnotation.Unmarshal(m, b) +} +func (m *ResourceAnnotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResourceAnnotation.Marshal(b, m, deterministic) +} +func (m *ResourceAnnotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceAnnotation.Merge(m, src) +} +func (m *ResourceAnnotation) XXX_Size() int { + return xxx_messageInfo_ResourceAnnotation.Size(m) +} +func (m *ResourceAnnotation) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceAnnotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceAnnotation proto.InternalMessageInfo + +func (m *ResourceAnnotation) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +var E_Resource = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.ServiceOptions)(nil), + ExtensionType: (*ResourceAnnotation)(nil), + Field: 265073217, + Name: "envoy.annotations.resource", + Tag: "bytes,265073217,opt,name=resource", + Filename: "envoy/annotations/resource.proto", +} + +func init() { + proto.RegisterType((*ResourceAnnotation)(nil), "envoy.annotations.ResourceAnnotation") + proto.RegisterExtension(E_Resource) +} + +func init() { proto.RegisterFile("envoy/annotations/resource.proto", fileDescriptor_faafdcff915d6055) } + +var fileDescriptor_faafdcff915d6055 = []byte{ + // 172 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2f, 0x4a, + 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x04, 0xab, + 0xd0, 0x43, 0x52, 0x21, 0xa5, 0x90, 0x9e, 0x9f, 0x9f, 0x9e, 0x93, 0xaa, 0x0f, 0x56, 0x90, 0x54, + 0x9a, 0xa6, 0x9f, 0x92, 0x5a, 0x9c, 0x5c, 0x94, 0x59, 0x50, 0x92, 0x5f, 0x04, 0xd1, 0xa4, 0xa4, + 0xc1, 0x25, 0x14, 0x04, 0x35, 0xc6, 0x11, 0xae, 0x51, 0x48, 0x88, 0x8b, 0xa5, 0xa4, 0xb2, 0x20, + 0x55, 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x08, 0xcc, 0xb6, 0x4a, 0xe5, 0xe2, 0x80, 0x59, 0x28, + 0x24, 0xaf, 0x07, 0x31, 0x58, 0x0f, 0x66, 0xb0, 0x5e, 0x70, 0x6a, 0x51, 0x59, 0x66, 0x72, 0xaa, + 0x7f, 0x01, 0xd8, 0x62, 0x89, 0x83, 0x4f, 0x36, 0xd5, 0x29, 0x30, 0x6a, 0x70, 0x1b, 0xa9, 0xea, + 0x61, 0xb8, 0x4a, 0x0f, 0xd3, 0xc2, 0x20, 0xb8, 0xd1, 0x49, 0x6c, 0x60, 0x23, 0x8d, 0x01, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x54, 0xc9, 0x37, 0x66, 0xf0, 0x00, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/annotations/resource.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,106 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/annotations/resource.proto + +package envoy_annotations + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _resource_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on ResourceAnnotation with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ResourceAnnotation) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Type + + return nil +} + +// ResourceAnnotationValidationError is the validation error returned by +// ResourceAnnotation.Validate if the designated constraints aren't met. +type ResourceAnnotationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ResourceAnnotationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ResourceAnnotationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ResourceAnnotationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ResourceAnnotationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ResourceAnnotationValidationError) ErrorName() string { + return "ResourceAnnotationValidationError" +} + +// Error satisfies the builtin error interface +func (e ResourceAnnotationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sResourceAnnotation.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ResourceAnnotationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ResourceAnnotationValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,20 +1,20 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/auth/cert.proto -package auth +package envoy_api_v2_auth import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + matcher "github.com/envoyproxy/go-control-plane/envoy/type/matcher" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -26,21 +26,16 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type TlsParameters_TlsProtocol int32 const ( - // Envoy will choose the optimal TLS version. TlsParameters_TLS_AUTO TlsParameters_TlsProtocol = 0 - // TLS 1.0 - TlsParameters_TLSv1_0 TlsParameters_TlsProtocol = 1 - // TLS 1.1 - TlsParameters_TLSv1_1 TlsParameters_TlsProtocol = 2 - // TLS 1.2 - TlsParameters_TLSv1_2 TlsParameters_TlsProtocol = 3 - // TLS 1.3 - TlsParameters_TLSv1_3 TlsParameters_TlsProtocol = 4 + TlsParameters_TLSv1_0 TlsParameters_TlsProtocol = 1 + TlsParameters_TLSv1_1 TlsParameters_TlsProtocol = 2 + TlsParameters_TLSv1_2 TlsParameters_TlsProtocol = 3 + TlsParameters_TLSv1_3 TlsParameters_TlsProtocol = 4 ) var TlsParameters_TlsProtocol_name = map[int32]string{ @@ -67,70 +62,39 @@ return fileDescriptor_0c3851c0865b2745, []int{0, 0} } +type CertificateValidationContext_TrustChainVerification int32 + +const ( + CertificateValidationContext_VERIFY_TRUST_CHAIN CertificateValidationContext_TrustChainVerification = 0 + CertificateValidationContext_ACCEPT_UNTRUSTED CertificateValidationContext_TrustChainVerification = 1 +) + +var CertificateValidationContext_TrustChainVerification_name = map[int32]string{ + 0: "VERIFY_TRUST_CHAIN", + 1: "ACCEPT_UNTRUSTED", +} + +var CertificateValidationContext_TrustChainVerification_value = map[string]int32{ + "VERIFY_TRUST_CHAIN": 0, + "ACCEPT_UNTRUSTED": 1, +} + +func (x CertificateValidationContext_TrustChainVerification) String() string { + return proto.EnumName(CertificateValidationContext_TrustChainVerification_name, int32(x)) +} + +func (CertificateValidationContext_TrustChainVerification) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0c3851c0865b2745, []int{4, 0} +} + type TlsParameters struct { - // Minimum TLS protocol version. By default, it's ``TLSv1_0``. TlsMinimumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,1,opt,name=tls_minimum_protocol_version,json=tlsMinimumProtocolVersion,proto3,enum=envoy.api.v2.auth.TlsParameters_TlsProtocol" json:"tls_minimum_protocol_version,omitempty"` - // Maximum TLS protocol version. By default, it's ``TLSv1_3`` for servers in non-FIPS builds, and - // ``TLSv1_2`` for clients and for servers using :ref:`BoringSSL FIPS `. TlsMaximumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,2,opt,name=tls_maximum_protocol_version,json=tlsMaximumProtocolVersion,proto3,enum=envoy.api.v2.auth.TlsParameters_TlsProtocol" json:"tls_maximum_protocol_version,omitempty"` - // If specified, the TLS listener will only support the specified `cipher list - // `_ - // when negotiating TLS 1.0-1.2 (this setting has no effect when negotiating TLS 1.3). If not - // specified, the default list will be used. - // - // In non-FIPS builds, the default cipher list is: - // - // .. code-block:: none - // - // [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305] - // [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305] - // ECDHE-ECDSA-AES128-SHA - // ECDHE-RSA-AES128-SHA - // AES128-GCM-SHA256 - // AES128-SHA - // ECDHE-ECDSA-AES256-GCM-SHA384 - // ECDHE-RSA-AES256-GCM-SHA384 - // ECDHE-ECDSA-AES256-SHA - // ECDHE-RSA-AES256-SHA - // AES256-GCM-SHA384 - // AES256-SHA - // - // In builds using :ref:`BoringSSL FIPS `, the default cipher list is: - // - // .. code-block:: none - // - // ECDHE-ECDSA-AES128-GCM-SHA256 - // ECDHE-RSA-AES128-GCM-SHA256 - // ECDHE-ECDSA-AES128-SHA - // ECDHE-RSA-AES128-SHA - // AES128-GCM-SHA256 - // AES128-SHA - // ECDHE-ECDSA-AES256-GCM-SHA384 - // ECDHE-RSA-AES256-GCM-SHA384 - // ECDHE-ECDSA-AES256-SHA - // ECDHE-RSA-AES256-SHA - // AES256-GCM-SHA384 - // AES256-SHA - CipherSuites []string `protobuf:"bytes,3,rep,name=cipher_suites,json=cipherSuites,proto3" json:"cipher_suites,omitempty"` - // If specified, the TLS connection will only support the specified ECDH - // curves. If not specified, the default curves will be used. - // - // In non-FIPS builds, the default curves are: - // - // .. code-block:: none - // - // X25519 - // P-256 - // - // In builds using :ref:`BoringSSL FIPS `, the default curve is: - // - // .. code-block:: none - // - // P-256 - EcdhCurves []string `protobuf:"bytes,4,rep,name=ecdh_curves,json=ecdhCurves,proto3" json:"ecdh_curves,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CipherSuites []string `protobuf:"bytes,3,rep,name=cipher_suites,json=cipherSuites,proto3" json:"cipher_suites,omitempty"` + EcdhCurves []string `protobuf:"bytes,4,rep,name=ecdh_curves,json=ecdhCurves,proto3" json:"ecdh_curves,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TlsParameters) Reset() { *m = TlsParameters{} } @@ -139,26 +103,18 @@ func (*TlsParameters) Descriptor() ([]byte, []int) { return fileDescriptor_0c3851c0865b2745, []int{0} } + func (m *TlsParameters) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TlsParameters.Unmarshal(m, b) } func (m *TlsParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TlsParameters.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TlsParameters.Marshal(b, m, deterministic) } func (m *TlsParameters) XXX_Merge(src proto.Message) { xxx_messageInfo_TlsParameters.Merge(m, src) } func (m *TlsParameters) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TlsParameters.Size(m) } func (m *TlsParameters) XXX_DiscardUnknown() { xxx_messageInfo_TlsParameters.DiscardUnknown(m) @@ -194,49 +150,125 @@ return nil } +type PrivateKeyProvider struct { + ProviderName string `protobuf:"bytes,1,opt,name=provider_name,json=providerName,proto3" json:"provider_name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *PrivateKeyProvider_Config + // *PrivateKeyProvider_TypedConfig + ConfigType isPrivateKeyProvider_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PrivateKeyProvider) Reset() { *m = PrivateKeyProvider{} } +func (m *PrivateKeyProvider) String() string { return proto.CompactTextString(m) } +func (*PrivateKeyProvider) ProtoMessage() {} +func (*PrivateKeyProvider) Descriptor() ([]byte, []int) { + return fileDescriptor_0c3851c0865b2745, []int{1} +} + +func (m *PrivateKeyProvider) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PrivateKeyProvider.Unmarshal(m, b) +} +func (m *PrivateKeyProvider) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PrivateKeyProvider.Marshal(b, m, deterministic) +} +func (m *PrivateKeyProvider) XXX_Merge(src proto.Message) { + xxx_messageInfo_PrivateKeyProvider.Merge(m, src) +} +func (m *PrivateKeyProvider) XXX_Size() int { + return xxx_messageInfo_PrivateKeyProvider.Size(m) +} +func (m *PrivateKeyProvider) XXX_DiscardUnknown() { + xxx_messageInfo_PrivateKeyProvider.DiscardUnknown(m) +} + +var xxx_messageInfo_PrivateKeyProvider proto.InternalMessageInfo + +func (m *PrivateKeyProvider) GetProviderName() string { + if m != nil { + return m.ProviderName + } + return "" +} + +type isPrivateKeyProvider_ConfigType interface { + isPrivateKeyProvider_ConfigType() +} + +type PrivateKeyProvider_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type PrivateKeyProvider_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*PrivateKeyProvider_Config) isPrivateKeyProvider_ConfigType() {} + +func (*PrivateKeyProvider_TypedConfig) isPrivateKeyProvider_ConfigType() {} + +func (m *PrivateKeyProvider) GetConfigType() isPrivateKeyProvider_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *PrivateKeyProvider) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*PrivateKeyProvider_Config); ok { + return x.Config + } + return nil +} + +func (m *PrivateKeyProvider) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*PrivateKeyProvider_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*PrivateKeyProvider) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*PrivateKeyProvider_Config)(nil), + (*PrivateKeyProvider_TypedConfig)(nil), + } +} + type TlsCertificate struct { - // The TLS certificate chain. - CertificateChain *core.DataSource `protobuf:"bytes,1,opt,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` - // The TLS private key. - PrivateKey *core.DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` - // The password to decrypt the TLS private key. If this field is not set, it is assumed that the - // TLS private key is not password encrypted. - Password *core.DataSource `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` - // [#not-implemented-hide:] - OcspStaple *core.DataSource `protobuf:"bytes,4,opt,name=ocsp_staple,json=ocspStaple,proto3" json:"ocsp_staple,omitempty"` - // [#not-implemented-hide:] - SignedCertificateTimestamp []*core.DataSource `protobuf:"bytes,5,rep,name=signed_certificate_timestamp,json=signedCertificateTimestamp,proto3" json:"signed_certificate_timestamp,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CertificateChain *core.DataSource `protobuf:"bytes,1,opt,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` + PrivateKey *core.DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` + PrivateKeyProvider *PrivateKeyProvider `protobuf:"bytes,6,opt,name=private_key_provider,json=privateKeyProvider,proto3" json:"private_key_provider,omitempty"` + Password *core.DataSource `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + OcspStaple *core.DataSource `protobuf:"bytes,4,opt,name=ocsp_staple,json=ocspStaple,proto3" json:"ocsp_staple,omitempty"` + SignedCertificateTimestamp []*core.DataSource `protobuf:"bytes,5,rep,name=signed_certificate_timestamp,json=signedCertificateTimestamp,proto3" json:"signed_certificate_timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TlsCertificate) Reset() { *m = TlsCertificate{} } func (m *TlsCertificate) String() string { return proto.CompactTextString(m) } func (*TlsCertificate) ProtoMessage() {} func (*TlsCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{1} + return fileDescriptor_0c3851c0865b2745, []int{2} } + func (m *TlsCertificate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TlsCertificate.Unmarshal(m, b) } func (m *TlsCertificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TlsCertificate.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TlsCertificate.Marshal(b, m, deterministic) } func (m *TlsCertificate) XXX_Merge(src proto.Message) { xxx_messageInfo_TlsCertificate.Merge(m, src) } func (m *TlsCertificate) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TlsCertificate.Size(m) } func (m *TlsCertificate) XXX_DiscardUnknown() { xxx_messageInfo_TlsCertificate.DiscardUnknown(m) @@ -258,6 +290,13 @@ return nil } +func (m *TlsCertificate) GetPrivateKeyProvider() *PrivateKeyProvider { + if m != nil { + return m.PrivateKeyProvider + } + return nil +} + func (m *TlsCertificate) GetPassword() *core.DataSource { if m != nil { return m.Password @@ -280,29 +319,6 @@ } type TlsSessionTicketKeys struct { - // Keys for encrypting and decrypting TLS session tickets. The - // first key in the array contains the key to encrypt all new sessions created by this context. - // All keys are candidates for decrypting received tickets. This allows for easy rotation of keys - // by, for example, putting the new key first, and the previous key second. - // - // If :ref:`session_ticket_keys ` - // is not specified, the TLS library will still support resuming sessions via tickets, but it will - // use an internally-generated and managed key, so sessions cannot be resumed across hot restarts - // or on different hosts. - // - // Each key must contain exactly 80 bytes of cryptographically-secure random data. For - // example, the output of ``openssl rand 80``. - // - // .. attention:: - // - // Using this feature has serious security considerations and risks. Improper handling of keys - // may result in loss of secrecy in connections, even if ciphers supporting perfect forward - // secrecy are used. See https://www.imperialviolet.org/2013/06/27/botchingpfs.html for some - // discussion. To minimize the risk, you must: - // - // * Keep the session ticket keys at least as secure as your TLS certificate private keys - // * Rotate session ticket keys at least daily, and preferably hourly - // * Always generate keys using a cryptographically-secure random data source Keys []*core.DataSource `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -313,28 +329,20 @@ func (m *TlsSessionTicketKeys) String() string { return proto.CompactTextString(m) } func (*TlsSessionTicketKeys) ProtoMessage() {} func (*TlsSessionTicketKeys) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{2} + return fileDescriptor_0c3851c0865b2745, []int{3} } + func (m *TlsSessionTicketKeys) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TlsSessionTicketKeys.Unmarshal(m, b) } func (m *TlsSessionTicketKeys) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TlsSessionTicketKeys.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TlsSessionTicketKeys.Marshal(b, m, deterministic) } func (m *TlsSessionTicketKeys) XXX_Merge(src proto.Message) { xxx_messageInfo_TlsSessionTicketKeys.Merge(m, src) } func (m *TlsSessionTicketKeys) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TlsSessionTicketKeys.Size(m) } func (m *TlsSessionTicketKeys) XXX_DiscardUnknown() { xxx_messageInfo_TlsSessionTicketKeys.DiscardUnknown(m) @@ -350,136 +358,39 @@ } type CertificateValidationContext struct { - // TLS certificate data containing certificate authority certificates to use in verifying - // a presented peer certificate (e.g. server certificate for clusters or client certificate - // for listeners). If not specified and a peer certificate is presented it will not be - // verified. By default, a client certificate is optional, unless one of the additional - // options (:ref:`require_client_certificate - // `, - // :ref:`verify_certificate_spki - // `, - // :ref:`verify_certificate_hash - // `, or - // :ref:`verify_subject_alt_name - // `) is also - // specified. - // - // It can optionally contain certificate revocation lists, in which case Envoy will verify - // that the presented peer certificate has not been revoked by one of the included CRLs. - // - // See :ref:`the TLS overview ` for a list of common - // system CA locations. - TrustedCa *core.DataSource `protobuf:"bytes,1,opt,name=trusted_ca,json=trustedCa,proto3" json:"trusted_ca,omitempty"` - // An optional list of base64-encoded SHA-256 hashes. If specified, Envoy will verify that the - // SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate - // matches one of the specified values. - // - // A base64-encoded SHA-256 of the Subject Public Key Information (SPKI) of the certificate - // can be generated with the following command: - // - // .. code-block:: bash - // - // $ openssl x509 -in path/to/client.crt -noout -pubkey \ - // | openssl pkey -pubin -outform DER \ - // | openssl dgst -sha256 -binary \ - // | openssl enc -base64 - // NvqYIYSbgK2vCJpQhObf77vv+bQWtc5ek5RIOwPiC9A= - // - // This is the format used in HTTP Public Key Pinning. - // - // When both: - // :ref:`verify_certificate_hash - // ` and - // :ref:`verify_certificate_spki - // ` are specified, - // a hash matching value from either of the lists will result in the certificate being accepted. - // - // .. attention:: - // - // This option is preferred over :ref:`verify_certificate_hash - // `, - // because SPKI is tied to a private key, so it doesn't change when the certificate - // is renewed using the same private key. - VerifyCertificateSpki []string `protobuf:"bytes,3,rep,name=verify_certificate_spki,json=verifyCertificateSpki,proto3" json:"verify_certificate_spki,omitempty"` - // An optional list of hex-encoded SHA-256 hashes. If specified, Envoy will verify that - // the SHA-256 of the DER-encoded presented certificate matches one of the specified values. - // - // A hex-encoded SHA-256 of the certificate can be generated with the following command: - // - // .. code-block:: bash - // - // $ openssl x509 -in path/to/client.crt -outform DER | openssl dgst -sha256 | cut -d" " -f2 - // df6ff72fe9116521268f6f2dd4966f51df479883fe7037b39f75916ac3049d1a - // - // A long hex-encoded and colon-separated SHA-256 (a.k.a. "fingerprint") of the certificate - // can be generated with the following command: - // - // .. code-block:: bash - // - // $ openssl x509 -in path/to/client.crt -noout -fingerprint -sha256 | cut -d"=" -f2 - // DF:6F:F7:2F:E9:11:65:21:26:8F:6F:2D:D4:96:6F:51:DF:47:98:83:FE:70:37:B3:9F:75:91:6A:C3:04:9D:1A - // - // Both of those formats are acceptable. - // - // When both: - // :ref:`verify_certificate_hash - // ` and - // :ref:`verify_certificate_spki - // ` are specified, - // a hash matching value from either of the lists will result in the certificate being accepted. - VerifyCertificateHash []string `protobuf:"bytes,2,rep,name=verify_certificate_hash,json=verifyCertificateHash,proto3" json:"verify_certificate_hash,omitempty"` - // An optional list of Subject Alternative Names. If specified, Envoy will verify that the - // Subject Alternative Name of the presented certificate matches one of the specified values. - // - // .. attention:: - // - // Subject Alternative Names are easily spoofable and verifying only them is insecure, - // therefore this option must be used together with :ref:`trusted_ca - // `. - VerifySubjectAltName []string `protobuf:"bytes,4,rep,name=verify_subject_alt_name,json=verifySubjectAltName,proto3" json:"verify_subject_alt_name,omitempty"` - // [#not-implemented-hide:] Must present a signed time-stamped OCSP response. - RequireOcspStaple *types.BoolValue `protobuf:"bytes,5,opt,name=require_ocsp_staple,json=requireOcspStaple,proto3" json:"require_ocsp_staple,omitempty"` - // [#not-implemented-hide:] Must present signed certificate time-stamp. - RequireSignedCertificateTimestamp *types.BoolValue `protobuf:"bytes,6,opt,name=require_signed_certificate_timestamp,json=requireSignedCertificateTimestamp,proto3" json:"require_signed_certificate_timestamp,omitempty"` - // An optional `certificate revocation list - // `_ - // (in PEM format). If specified, Envoy will verify that the presented peer - // certificate has not been revoked by this CRL. If this DataSource contains - // multiple CRLs, all of them will be used. - Crl *core.DataSource `protobuf:"bytes,7,opt,name=crl,proto3" json:"crl,omitempty"` - // If specified, Envoy will not reject expired certificates. - AllowExpiredCertificate bool `protobuf:"varint,8,opt,name=allow_expired_certificate,json=allowExpiredCertificate,proto3" json:"allow_expired_certificate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + TrustedCa *core.DataSource `protobuf:"bytes,1,opt,name=trusted_ca,json=trustedCa,proto3" json:"trusted_ca,omitempty"` + VerifyCertificateSpki []string `protobuf:"bytes,3,rep,name=verify_certificate_spki,json=verifyCertificateSpki,proto3" json:"verify_certificate_spki,omitempty"` + VerifyCertificateHash []string `protobuf:"bytes,2,rep,name=verify_certificate_hash,json=verifyCertificateHash,proto3" json:"verify_certificate_hash,omitempty"` + VerifySubjectAltName []string `protobuf:"bytes,4,rep,name=verify_subject_alt_name,json=verifySubjectAltName,proto3" json:"verify_subject_alt_name,omitempty"` // Deprecated: Do not use. + MatchSubjectAltNames []*matcher.StringMatcher `protobuf:"bytes,9,rep,name=match_subject_alt_names,json=matchSubjectAltNames,proto3" json:"match_subject_alt_names,omitempty"` + RequireOcspStaple *wrappers.BoolValue `protobuf:"bytes,5,opt,name=require_ocsp_staple,json=requireOcspStaple,proto3" json:"require_ocsp_staple,omitempty"` + RequireSignedCertificateTimestamp *wrappers.BoolValue `protobuf:"bytes,6,opt,name=require_signed_certificate_timestamp,json=requireSignedCertificateTimestamp,proto3" json:"require_signed_certificate_timestamp,omitempty"` + Crl *core.DataSource `protobuf:"bytes,7,opt,name=crl,proto3" json:"crl,omitempty"` + AllowExpiredCertificate bool `protobuf:"varint,8,opt,name=allow_expired_certificate,json=allowExpiredCertificate,proto3" json:"allow_expired_certificate,omitempty"` + TrustChainVerification CertificateValidationContext_TrustChainVerification `protobuf:"varint,10,opt,name=trust_chain_verification,json=trustChainVerification,proto3,enum=envoy.api.v2.auth.CertificateValidationContext_TrustChainVerification" json:"trust_chain_verification,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CertificateValidationContext) Reset() { *m = CertificateValidationContext{} } func (m *CertificateValidationContext) String() string { return proto.CompactTextString(m) } func (*CertificateValidationContext) ProtoMessage() {} func (*CertificateValidationContext) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{3} + return fileDescriptor_0c3851c0865b2745, []int{4} } + func (m *CertificateValidationContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CertificateValidationContext.Unmarshal(m, b) } func (m *CertificateValidationContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CertificateValidationContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CertificateValidationContext.Marshal(b, m, deterministic) } func (m *CertificateValidationContext) XXX_Merge(src proto.Message) { xxx_messageInfo_CertificateValidationContext.Merge(m, src) } func (m *CertificateValidationContext) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CertificateValidationContext.Size(m) } func (m *CertificateValidationContext) XXX_DiscardUnknown() { xxx_messageInfo_CertificateValidationContext.DiscardUnknown(m) @@ -508,6 +419,7 @@ return nil } +// Deprecated: Do not use. func (m *CertificateValidationContext) GetVerifySubjectAltName() []string { if m != nil { return m.VerifySubjectAltName @@ -515,14 +427,21 @@ return nil } -func (m *CertificateValidationContext) GetRequireOcspStaple() *types.BoolValue { +func (m *CertificateValidationContext) GetMatchSubjectAltNames() []*matcher.StringMatcher { + if m != nil { + return m.MatchSubjectAltNames + } + return nil +} + +func (m *CertificateValidationContext) GetRequireOcspStaple() *wrappers.BoolValue { if m != nil { return m.RequireOcspStaple } return nil } -func (m *CertificateValidationContext) GetRequireSignedCertificateTimestamp() *types.BoolValue { +func (m *CertificateValidationContext) GetRequireSignedCertificateTimestamp() *wrappers.BoolValue { if m != nil { return m.RequireSignedCertificateTimestamp } @@ -543,66 +462,46 @@ return false } -// TLS context shared by both client and server TLS contexts. +func (m *CertificateValidationContext) GetTrustChainVerification() CertificateValidationContext_TrustChainVerification { + if m != nil { + return m.TrustChainVerification + } + return CertificateValidationContext_VERIFY_TRUST_CHAIN +} + type CommonTlsContext struct { - // TLS protocol versions, cipher suites etc. - TlsParams *TlsParameters `protobuf:"bytes,1,opt,name=tls_params,json=tlsParams,proto3" json:"tls_params,omitempty"` - // :ref:`Multiple TLS certificates ` can be associated with the - // same context to allow both RSA and ECDSA certificates. - // - // Only a single TLS certificate is supported in client contexts. In server contexts, the first - // RSA certificate is used for clients that only support RSA and the first ECDSA certificate is - // used for clients that support ECDSA. - TlsCertificates []*TlsCertificate `protobuf:"bytes,2,rep,name=tls_certificates,json=tlsCertificates,proto3" json:"tls_certificates,omitempty"` - // Configs for fetching TLS certificates via SDS API. + TlsParams *TlsParameters `protobuf:"bytes,1,opt,name=tls_params,json=tlsParams,proto3" json:"tls_params,omitempty"` + TlsCertificates []*TlsCertificate `protobuf:"bytes,2,rep,name=tls_certificates,json=tlsCertificates,proto3" json:"tls_certificates,omitempty"` TlsCertificateSdsSecretConfigs []*SdsSecretConfig `protobuf:"bytes,6,rep,name=tls_certificate_sds_secret_configs,json=tlsCertificateSdsSecretConfigs,proto3" json:"tls_certificate_sds_secret_configs,omitempty"` // Types that are valid to be assigned to ValidationContextType: // *CommonTlsContext_ValidationContext // *CommonTlsContext_ValidationContextSdsSecretConfig // *CommonTlsContext_CombinedValidationContext ValidationContextType isCommonTlsContext_ValidationContextType `protobuf_oneof:"validation_context_type"` - // Supplies the list of ALPN protocols that the listener should expose. In - // practice this is likely to be set to one of two values (see the - // :ref:`codec_type - // ` - // parameter in the HTTP connection manager for more information): - // - // * "h2,http/1.1" If the listener is going to support both HTTP/2 and HTTP/1.1. - // * "http/1.1" If the listener is only going to support HTTP/1.1. - // - // There is no default for this parameter. If empty, Envoy will not expose ALPN. - AlpnProtocols []string `protobuf:"bytes,4,rep,name=alpn_protocols,json=alpnProtocols,proto3" json:"alpn_protocols,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AlpnProtocols []string `protobuf:"bytes,4,rep,name=alpn_protocols,json=alpnProtocols,proto3" json:"alpn_protocols,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CommonTlsContext) Reset() { *m = CommonTlsContext{} } func (m *CommonTlsContext) String() string { return proto.CompactTextString(m) } func (*CommonTlsContext) ProtoMessage() {} func (*CommonTlsContext) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{4} + return fileDescriptor_0c3851c0865b2745, []int{5} } + func (m *CommonTlsContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CommonTlsContext.Unmarshal(m, b) } func (m *CommonTlsContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CommonTlsContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CommonTlsContext.Marshal(b, m, deterministic) } func (m *CommonTlsContext) XXX_Merge(src proto.Message) { xxx_messageInfo_CommonTlsContext.Merge(m, src) } func (m *CommonTlsContext) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CommonTlsContext.Size(m) } func (m *CommonTlsContext) XXX_DiscardUnknown() { xxx_messageInfo_CommonTlsContext.DiscardUnknown(m) @@ -610,26 +509,48 @@ var xxx_messageInfo_CommonTlsContext proto.InternalMessageInfo +func (m *CommonTlsContext) GetTlsParams() *TlsParameters { + if m != nil { + return m.TlsParams + } + return nil +} + +func (m *CommonTlsContext) GetTlsCertificates() []*TlsCertificate { + if m != nil { + return m.TlsCertificates + } + return nil +} + +func (m *CommonTlsContext) GetTlsCertificateSdsSecretConfigs() []*SdsSecretConfig { + if m != nil { + return m.TlsCertificateSdsSecretConfigs + } + return nil +} + type isCommonTlsContext_ValidationContextType interface { isCommonTlsContext_ValidationContextType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type CommonTlsContext_ValidationContext struct { ValidationContext *CertificateValidationContext `protobuf:"bytes,3,opt,name=validation_context,json=validationContext,proto3,oneof"` } + type CommonTlsContext_ValidationContextSdsSecretConfig struct { ValidationContextSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,7,opt,name=validation_context_sds_secret_config,json=validationContextSdsSecretConfig,proto3,oneof"` } + type CommonTlsContext_CombinedValidationContext struct { CombinedValidationContext *CommonTlsContext_CombinedCertificateValidationContext `protobuf:"bytes,8,opt,name=combined_validation_context,json=combinedValidationContext,proto3,oneof"` } -func (*CommonTlsContext_ValidationContext) isCommonTlsContext_ValidationContextType() {} +func (*CommonTlsContext_ValidationContext) isCommonTlsContext_ValidationContextType() {} + func (*CommonTlsContext_ValidationContextSdsSecretConfig) isCommonTlsContext_ValidationContextType() {} -func (*CommonTlsContext_CombinedValidationContext) isCommonTlsContext_ValidationContextType() {} + +func (*CommonTlsContext_CombinedValidationContext) isCommonTlsContext_ValidationContextType() {} func (m *CommonTlsContext) GetValidationContextType() isCommonTlsContext_ValidationContextType { if m != nil { @@ -638,27 +559,6 @@ return nil } -func (m *CommonTlsContext) GetTlsParams() *TlsParameters { - if m != nil { - return m.TlsParams - } - return nil -} - -func (m *CommonTlsContext) GetTlsCertificates() []*TlsCertificate { - if m != nil { - return m.TlsCertificates - } - return nil -} - -func (m *CommonTlsContext) GetTlsCertificateSdsSecretConfigs() []*SdsSecretConfig { - if m != nil { - return m.TlsCertificateSdsSecretConfigs - } - return nil -} - func (m *CommonTlsContext) GetValidationContext() *CertificateValidationContext { if x, ok := m.GetValidationContextType().(*CommonTlsContext_ValidationContext); ok { return x.ValidationContext @@ -687,107 +587,21 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*CommonTlsContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _CommonTlsContext_OneofMarshaler, _CommonTlsContext_OneofUnmarshaler, _CommonTlsContext_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*CommonTlsContext) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*CommonTlsContext_ValidationContext)(nil), (*CommonTlsContext_ValidationContextSdsSecretConfig)(nil), (*CommonTlsContext_CombinedValidationContext)(nil), } } -func _CommonTlsContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*CommonTlsContext) - // validation_context_type - switch x := m.ValidationContextType.(type) { - case *CommonTlsContext_ValidationContext: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ValidationContext); err != nil { - return err - } - case *CommonTlsContext_ValidationContextSdsSecretConfig: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ValidationContextSdsSecretConfig); err != nil { - return err - } - case *CommonTlsContext_CombinedValidationContext: - _ = b.EncodeVarint(8<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.CombinedValidationContext); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("CommonTlsContext.ValidationContextType has unexpected type %T", x) - } - return nil -} - -func _CommonTlsContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*CommonTlsContext) - switch tag { - case 3: // validation_context_type.validation_context - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(CertificateValidationContext) - err := b.DecodeMessage(msg) - m.ValidationContextType = &CommonTlsContext_ValidationContext{msg} - return true, err - case 7: // validation_context_type.validation_context_sds_secret_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SdsSecretConfig) - err := b.DecodeMessage(msg) - m.ValidationContextType = &CommonTlsContext_ValidationContextSdsSecretConfig{msg} - return true, err - case 8: // validation_context_type.combined_validation_context - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(CommonTlsContext_CombinedCertificateValidationContext) - err := b.DecodeMessage(msg) - m.ValidationContextType = &CommonTlsContext_CombinedValidationContext{msg} - return true, err - default: - return false, nil - } -} - -func _CommonTlsContext_OneofSizer(msg proto.Message) (n int) { - m := msg.(*CommonTlsContext) - // validation_context_type - switch x := m.ValidationContextType.(type) { - case *CommonTlsContext_ValidationContext: - s := proto.Size(x.ValidationContext) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *CommonTlsContext_ValidationContextSdsSecretConfig: - s := proto.Size(x.ValidationContextSdsSecretConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *CommonTlsContext_CombinedValidationContext: - s := proto.Size(x.CombinedValidationContext) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type CommonTlsContext_CombinedCertificateValidationContext struct { - // How to validate peer certificates. - DefaultValidationContext *CertificateValidationContext `protobuf:"bytes,1,opt,name=default_validation_context,json=defaultValidationContext,proto3" json:"default_validation_context,omitempty"` - // Config for fetching validation context via SDS API. - ValidationContextSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,2,opt,name=validation_context_sds_secret_config,json=validationContextSdsSecretConfig,proto3" json:"validation_context_sds_secret_config,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DefaultValidationContext *CertificateValidationContext `protobuf:"bytes,1,opt,name=default_validation_context,json=defaultValidationContext,proto3" json:"default_validation_context,omitempty"` + ValidationContextSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,2,opt,name=validation_context_sds_secret_config,json=validationContextSdsSecretConfig,proto3" json:"validation_context_sds_secret_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CommonTlsContext_CombinedCertificateValidationContext) Reset() { @@ -798,28 +612,20 @@ } func (*CommonTlsContext_CombinedCertificateValidationContext) ProtoMessage() {} func (*CommonTlsContext_CombinedCertificateValidationContext) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{4, 0} + return fileDescriptor_0c3851c0865b2745, []int{5, 0} } + func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Unmarshal(m, b) } func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Marshal(b, m, deterministic) } func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Merge(src proto.Message) { xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Merge(m, src) } func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.Size(m) } func (m *CommonTlsContext_CombinedCertificateValidationContext) XXX_DiscardUnknown() { xxx_messageInfo_CommonTlsContext_CombinedCertificateValidationContext.DiscardUnknown(m) @@ -842,52 +648,33 @@ } type UpstreamTlsContext struct { - // Common TLS context settings. - CommonTlsContext *CommonTlsContext `protobuf:"bytes,1,opt,name=common_tls_context,json=commonTlsContext,proto3" json:"common_tls_context,omitempty"` - // SNI string to use when creating TLS backend connections. - Sni string `protobuf:"bytes,2,opt,name=sni,proto3" json:"sni,omitempty"` - // If true, server-initiated TLS renegotiation will be allowed. - // - // .. attention:: - // - // TLS renegotiation is considered insecure and shouldn't be used unless absolutely necessary. - AllowRenegotiation bool `protobuf:"varint,3,opt,name=allow_renegotiation,json=allowRenegotiation,proto3" json:"allow_renegotiation,omitempty"` - // Maximum number of session keys (Pre-Shared Keys for TLSv1.3+, Session IDs and Session Tickets - // for TLSv1.2 and older) to store for the purpose of session resumption. - // - // Defaults to 1, setting this to 0 disables session resumption. - MaxSessionKeys *types.UInt32Value `protobuf:"bytes,4,opt,name=max_session_keys,json=maxSessionKeys,proto3" json:"max_session_keys,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CommonTlsContext *CommonTlsContext `protobuf:"bytes,1,opt,name=common_tls_context,json=commonTlsContext,proto3" json:"common_tls_context,omitempty"` + Sni string `protobuf:"bytes,2,opt,name=sni,proto3" json:"sni,omitempty"` + AllowRenegotiation bool `protobuf:"varint,3,opt,name=allow_renegotiation,json=allowRenegotiation,proto3" json:"allow_renegotiation,omitempty"` + MaxSessionKeys *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=max_session_keys,json=maxSessionKeys,proto3" json:"max_session_keys,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpstreamTlsContext) Reset() { *m = UpstreamTlsContext{} } func (m *UpstreamTlsContext) String() string { return proto.CompactTextString(m) } func (*UpstreamTlsContext) ProtoMessage() {} func (*UpstreamTlsContext) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{5} + return fileDescriptor_0c3851c0865b2745, []int{6} } + func (m *UpstreamTlsContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_UpstreamTlsContext.Unmarshal(m, b) } func (m *UpstreamTlsContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpstreamTlsContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_UpstreamTlsContext.Marshal(b, m, deterministic) } func (m *UpstreamTlsContext) XXX_Merge(src proto.Message) { xxx_messageInfo_UpstreamTlsContext.Merge(m, src) } func (m *UpstreamTlsContext) XXX_Size() int { - return m.Size() + return xxx_messageInfo_UpstreamTlsContext.Size(m) } func (m *UpstreamTlsContext) XXX_DiscardUnknown() { xxx_messageInfo_UpstreamTlsContext.DiscardUnknown(m) @@ -916,7 +703,7 @@ return false } -func (m *UpstreamTlsContext) GetMaxSessionKeys() *types.UInt32Value { +func (m *UpstreamTlsContext) GetMaxSessionKeys() *wrappers.UInt32Value { if m != nil { return m.MaxSessionKeys } @@ -924,18 +711,14 @@ } type DownstreamTlsContext struct { - // Common TLS context settings. - CommonTlsContext *CommonTlsContext `protobuf:"bytes,1,opt,name=common_tls_context,json=commonTlsContext,proto3" json:"common_tls_context,omitempty"` - // If specified, Envoy will reject connections without a valid client - // certificate. - RequireClientCertificate *types.BoolValue `protobuf:"bytes,2,opt,name=require_client_certificate,json=requireClientCertificate,proto3" json:"require_client_certificate,omitempty"` - // If specified, Envoy will reject connections without a valid and matching SNI. - // [#not-implemented-hide:] - RequireSni *types.BoolValue `protobuf:"bytes,3,opt,name=require_sni,json=requireSni,proto3" json:"require_sni,omitempty"` + CommonTlsContext *CommonTlsContext `protobuf:"bytes,1,opt,name=common_tls_context,json=commonTlsContext,proto3" json:"common_tls_context,omitempty"` + RequireClientCertificate *wrappers.BoolValue `protobuf:"bytes,2,opt,name=require_client_certificate,json=requireClientCertificate,proto3" json:"require_client_certificate,omitempty"` + RequireSni *wrappers.BoolValue `protobuf:"bytes,3,opt,name=require_sni,json=requireSni,proto3" json:"require_sni,omitempty"` // Types that are valid to be assigned to SessionTicketKeysType: // *DownstreamTlsContext_SessionTicketKeys // *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig SessionTicketKeysType isDownstreamTlsContext_SessionTicketKeysType `protobuf_oneof:"session_ticket_keys_type"` + SessionTimeout *duration.Duration `protobuf:"bytes,6,opt,name=session_timeout,json=sessionTimeout,proto3" json:"session_timeout,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -945,28 +728,20 @@ func (m *DownstreamTlsContext) String() string { return proto.CompactTextString(m) } func (*DownstreamTlsContext) ProtoMessage() {} func (*DownstreamTlsContext) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{6} + return fileDescriptor_0c3851c0865b2745, []int{7} } + func (m *DownstreamTlsContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DownstreamTlsContext.Unmarshal(m, b) } func (m *DownstreamTlsContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DownstreamTlsContext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_DownstreamTlsContext.Marshal(b, m, deterministic) } func (m *DownstreamTlsContext) XXX_Merge(src proto.Message) { xxx_messageInfo_DownstreamTlsContext.Merge(m, src) } func (m *DownstreamTlsContext) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DownstreamTlsContext.Size(m) } func (m *DownstreamTlsContext) XXX_DiscardUnknown() { xxx_messageInfo_DownstreamTlsContext.DiscardUnknown(m) @@ -974,21 +749,41 @@ var xxx_messageInfo_DownstreamTlsContext proto.InternalMessageInfo +func (m *DownstreamTlsContext) GetCommonTlsContext() *CommonTlsContext { + if m != nil { + return m.CommonTlsContext + } + return nil +} + +func (m *DownstreamTlsContext) GetRequireClientCertificate() *wrappers.BoolValue { + if m != nil { + return m.RequireClientCertificate + } + return nil +} + +func (m *DownstreamTlsContext) GetRequireSni() *wrappers.BoolValue { + if m != nil { + return m.RequireSni + } + return nil +} + type isDownstreamTlsContext_SessionTicketKeysType interface { isDownstreamTlsContext_SessionTicketKeysType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type DownstreamTlsContext_SessionTicketKeys struct { SessionTicketKeys *TlsSessionTicketKeys `protobuf:"bytes,4,opt,name=session_ticket_keys,json=sessionTicketKeys,proto3,oneof"` } + type DownstreamTlsContext_SessionTicketKeysSdsSecretConfig struct { SessionTicketKeysSdsSecretConfig *SdsSecretConfig `protobuf:"bytes,5,opt,name=session_ticket_keys_sds_secret_config,json=sessionTicketKeysSdsSecretConfig,proto3,oneof"` } func (*DownstreamTlsContext_SessionTicketKeys) isDownstreamTlsContext_SessionTicketKeysType() {} + func (*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) isDownstreamTlsContext_SessionTicketKeysType() { } @@ -999,120 +794,75 @@ return nil } -func (m *DownstreamTlsContext) GetCommonTlsContext() *CommonTlsContext { - if m != nil { - return m.CommonTlsContext +func (m *DownstreamTlsContext) GetSessionTicketKeys() *TlsSessionTicketKeys { + if x, ok := m.GetSessionTicketKeysType().(*DownstreamTlsContext_SessionTicketKeys); ok { + return x.SessionTicketKeys } return nil } -func (m *DownstreamTlsContext) GetRequireClientCertificate() *types.BoolValue { - if m != nil { - return m.RequireClientCertificate +func (m *DownstreamTlsContext) GetSessionTicketKeysSdsSecretConfig() *SdsSecretConfig { + if x, ok := m.GetSessionTicketKeysType().(*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig); ok { + return x.SessionTicketKeysSdsSecretConfig } return nil } -func (m *DownstreamTlsContext) GetRequireSni() *types.BoolValue { +func (m *DownstreamTlsContext) GetSessionTimeout() *duration.Duration { if m != nil { - return m.RequireSni + return m.SessionTimeout } return nil } -func (m *DownstreamTlsContext) GetSessionTicketKeys() *TlsSessionTicketKeys { - if x, ok := m.GetSessionTicketKeysType().(*DownstreamTlsContext_SessionTicketKeys); ok { - return x.SessionTicketKeys +// XXX_OneofWrappers is for the internal use of the proto package. +func (*DownstreamTlsContext) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*DownstreamTlsContext_SessionTicketKeys)(nil), + (*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig)(nil), } - return nil } -func (m *DownstreamTlsContext) GetSessionTicketKeysSdsSecretConfig() *SdsSecretConfig { - if x, ok := m.GetSessionTicketKeysType().(*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig); ok { - return x.SessionTicketKeysSdsSecretConfig - } - return nil +type GenericSecret struct { + Secret *core.DataSource `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*DownstreamTlsContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _DownstreamTlsContext_OneofMarshaler, _DownstreamTlsContext_OneofUnmarshaler, _DownstreamTlsContext_OneofSizer, []interface{}{ - (*DownstreamTlsContext_SessionTicketKeys)(nil), - (*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig)(nil), - } +func (m *GenericSecret) Reset() { *m = GenericSecret{} } +func (m *GenericSecret) String() string { return proto.CompactTextString(m) } +func (*GenericSecret) ProtoMessage() {} +func (*GenericSecret) Descriptor() ([]byte, []int) { + return fileDescriptor_0c3851c0865b2745, []int{8} +} + +func (m *GenericSecret) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GenericSecret.Unmarshal(m, b) +} +func (m *GenericSecret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GenericSecret.Marshal(b, m, deterministic) } +func (m *GenericSecret) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenericSecret.Merge(m, src) +} +func (m *GenericSecret) XXX_Size() int { + return xxx_messageInfo_GenericSecret.Size(m) +} +func (m *GenericSecret) XXX_DiscardUnknown() { + xxx_messageInfo_GenericSecret.DiscardUnknown(m) +} + +var xxx_messageInfo_GenericSecret proto.InternalMessageInfo -func _DownstreamTlsContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*DownstreamTlsContext) - // session_ticket_keys_type - switch x := m.SessionTicketKeysType.(type) { - case *DownstreamTlsContext_SessionTicketKeys: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.SessionTicketKeys); err != nil { - return err - } - case *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.SessionTicketKeysSdsSecretConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("DownstreamTlsContext.SessionTicketKeysType has unexpected type %T", x) - } - return nil -} - -func _DownstreamTlsContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*DownstreamTlsContext) - switch tag { - case 4: // session_ticket_keys_type.session_ticket_keys - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TlsSessionTicketKeys) - err := b.DecodeMessage(msg) - m.SessionTicketKeysType = &DownstreamTlsContext_SessionTicketKeys{msg} - return true, err - case 5: // session_ticket_keys_type.session_ticket_keys_sds_secret_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SdsSecretConfig) - err := b.DecodeMessage(msg) - m.SessionTicketKeysType = &DownstreamTlsContext_SessionTicketKeysSdsSecretConfig{msg} - return true, err - default: - return false, nil - } -} - -func _DownstreamTlsContext_OneofSizer(msg proto.Message) (n int) { - m := msg.(*DownstreamTlsContext) - // session_ticket_keys_type - switch x := m.SessionTicketKeysType.(type) { - case *DownstreamTlsContext_SessionTicketKeys: - s := proto.Size(x.SessionTicketKeys) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig: - s := proto.Size(x.SessionTicketKeysSdsSecretConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *GenericSecret) GetSecret() *core.DataSource { + if m != nil { + return m.Secret } - return n + return nil } -// [#proto-status: experimental] type SdsSecretConfig struct { - // Name (FQDN, UUID, SPKI, SHA256, etc.) by which the secret can be uniquely referred to. - // When both name and config are specified, then secret can be fetched and/or reloaded via SDS. - // When only name is specified, then secret will be loaded from static resources [V2-API-DIFF]. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` SdsConfig *core.ConfigSource `protobuf:"bytes,2,opt,name=sds_config,json=sdsConfig,proto3" json:"sds_config,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1124,28 +874,20 @@ func (m *SdsSecretConfig) String() string { return proto.CompactTextString(m) } func (*SdsSecretConfig) ProtoMessage() {} func (*SdsSecretConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{7} + return fileDescriptor_0c3851c0865b2745, []int{9} } + func (m *SdsSecretConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_SdsSecretConfig.Unmarshal(m, b) } func (m *SdsSecretConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SdsSecretConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_SdsSecretConfig.Marshal(b, m, deterministic) } func (m *SdsSecretConfig) XXX_Merge(src proto.Message) { xxx_messageInfo_SdsSecretConfig.Merge(m, src) } func (m *SdsSecretConfig) XXX_Size() int { - return m.Size() + return xxx_messageInfo_SdsSecretConfig.Size(m) } func (m *SdsSecretConfig) XXX_DiscardUnknown() { xxx_messageInfo_SdsSecretConfig.DiscardUnknown(m) @@ -1167,14 +909,13 @@ return nil } -// [#proto-status: experimental] type Secret struct { - // Name (FQDN, UUID, SPKI, SHA256, etc.) by which the secret can be uniquely referred to. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Types that are valid to be assigned to Type: // *Secret_TlsCertificate // *Secret_SessionTicketKeys // *Secret_ValidationContext + // *Secret_GenericSecret Type isSecret_Type `protobuf_oneof:"type"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1185,28 +926,20 @@ func (m *Secret) String() string { return proto.CompactTextString(m) } func (*Secret) ProtoMessage() {} func (*Secret) Descriptor() ([]byte, []int) { - return fileDescriptor_0c3851c0865b2745, []int{8} + return fileDescriptor_0c3851c0865b2745, []int{10} } + func (m *Secret) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Secret.Unmarshal(m, b) } func (m *Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Secret.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Secret.Marshal(b, m, deterministic) } func (m *Secret) XXX_Merge(src proto.Message) { xxx_messageInfo_Secret.Merge(m, src) } func (m *Secret) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Secret.Size(m) } func (m *Secret) XXX_DiscardUnknown() { xxx_messageInfo_Secret.DiscardUnknown(m) @@ -1214,27 +947,41 @@ var xxx_messageInfo_Secret proto.InternalMessageInfo +func (m *Secret) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type isSecret_Type interface { isSecret_Type() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type Secret_TlsCertificate struct { TlsCertificate *TlsCertificate `protobuf:"bytes,2,opt,name=tls_certificate,json=tlsCertificate,proto3,oneof"` } + type Secret_SessionTicketKeys struct { SessionTicketKeys *TlsSessionTicketKeys `protobuf:"bytes,3,opt,name=session_ticket_keys,json=sessionTicketKeys,proto3,oneof"` } + type Secret_ValidationContext struct { ValidationContext *CertificateValidationContext `protobuf:"bytes,4,opt,name=validation_context,json=validationContext,proto3,oneof"` } -func (*Secret_TlsCertificate) isSecret_Type() {} +type Secret_GenericSecret struct { + GenericSecret *GenericSecret `protobuf:"bytes,5,opt,name=generic_secret,json=genericSecret,proto3,oneof"` +} + +func (*Secret_TlsCertificate) isSecret_Type() {} + func (*Secret_SessionTicketKeys) isSecret_Type() {} + func (*Secret_ValidationContext) isSecret_Type() {} +func (*Secret_GenericSecret) isSecret_Type() {} + func (m *Secret) GetType() isSecret_Type { if m != nil { return m.Type @@ -1242,13 +989,6 @@ return nil } -func (m *Secret) GetName() string { - if m != nil { - return m.Name - } - return "" -} - func (m *Secret) GetTlsCertificate() *TlsCertificate { if x, ok := m.GetType().(*Secret_TlsCertificate); ok { return x.TlsCertificate @@ -1270,102 +1010,28 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Secret) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Secret_OneofMarshaler, _Secret_OneofUnmarshaler, _Secret_OneofSizer, []interface{}{ - (*Secret_TlsCertificate)(nil), - (*Secret_SessionTicketKeys)(nil), - (*Secret_ValidationContext)(nil), +func (m *Secret) GetGenericSecret() *GenericSecret { + if x, ok := m.GetType().(*Secret_GenericSecret); ok { + return x.GenericSecret } + return nil } -func _Secret_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Secret) - // type - switch x := m.Type.(type) { - case *Secret_TlsCertificate: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TlsCertificate); err != nil { - return err - } - case *Secret_SessionTicketKeys: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.SessionTicketKeys); err != nil { - return err - } - case *Secret_ValidationContext: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ValidationContext); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Secret.Type has unexpected type %T", x) - } - return nil -} - -func _Secret_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Secret) - switch tag { - case 2: // type.tls_certificate - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TlsCertificate) - err := b.DecodeMessage(msg) - m.Type = &Secret_TlsCertificate{msg} - return true, err - case 3: // type.session_ticket_keys - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TlsSessionTicketKeys) - err := b.DecodeMessage(msg) - m.Type = &Secret_SessionTicketKeys{msg} - return true, err - case 4: // type.validation_context - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(CertificateValidationContext) - err := b.DecodeMessage(msg) - m.Type = &Secret_ValidationContext{msg} - return true, err - default: - return false, nil - } -} - -func _Secret_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Secret) - // type - switch x := m.Type.(type) { - case *Secret_TlsCertificate: - s := proto.Size(x.TlsCertificate) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Secret_SessionTicketKeys: - s := proto.Size(x.SessionTicketKeys) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Secret_ValidationContext: - s := proto.Size(x.ValidationContext) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Secret) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Secret_TlsCertificate)(nil), + (*Secret_SessionTicketKeys)(nil), + (*Secret_ValidationContext)(nil), + (*Secret_GenericSecret)(nil), } - return n } func init() { proto.RegisterEnum("envoy.api.v2.auth.TlsParameters_TlsProtocol", TlsParameters_TlsProtocol_name, TlsParameters_TlsProtocol_value) + proto.RegisterEnum("envoy.api.v2.auth.CertificateValidationContext_TrustChainVerification", CertificateValidationContext_TrustChainVerification_name, CertificateValidationContext_TrustChainVerification_value) proto.RegisterType((*TlsParameters)(nil), "envoy.api.v2.auth.TlsParameters") + proto.RegisterType((*PrivateKeyProvider)(nil), "envoy.api.v2.auth.PrivateKeyProvider") proto.RegisterType((*TlsCertificate)(nil), "envoy.api.v2.auth.TlsCertificate") proto.RegisterType((*TlsSessionTicketKeys)(nil), "envoy.api.v2.auth.TlsSessionTicketKeys") proto.RegisterType((*CertificateValidationContext)(nil), "envoy.api.v2.auth.CertificateValidationContext") @@ -1373,6 +1039,7 @@ proto.RegisterType((*CommonTlsContext_CombinedCertificateValidationContext)(nil), "envoy.api.v2.auth.CommonTlsContext.CombinedCertificateValidationContext") proto.RegisterType((*UpstreamTlsContext)(nil), "envoy.api.v2.auth.UpstreamTlsContext") proto.RegisterType((*DownstreamTlsContext)(nil), "envoy.api.v2.auth.DownstreamTlsContext") + proto.RegisterType((*GenericSecret)(nil), "envoy.api.v2.auth.GenericSecret") proto.RegisterType((*SdsSecretConfig)(nil), "envoy.api.v2.auth.SdsSecretConfig") proto.RegisterType((*Secret)(nil), "envoy.api.v2.auth.Secret") } @@ -1380,3843 +1047,115 @@ func init() { proto.RegisterFile("envoy/api/v2/auth/cert.proto", fileDescriptor_0c3851c0865b2745) } var fileDescriptor_0c3851c0865b2745 = []byte{ - // 1325 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xbf, 0x73, 0x1b, 0x45, - 0x14, 0xf6, 0x49, 0xb2, 0x23, 0x3f, 0x25, 0xce, 0x79, 0x63, 0xc6, 0x67, 0x61, 0x1c, 0x45, 0x49, - 0x06, 0x17, 0x19, 0x89, 0x28, 0x43, 0xc1, 0xaf, 0x40, 0xa4, 0xc0, 0x98, 0xc4, 0x90, 0x70, 0x92, - 0x33, 0x40, 0x73, 0xac, 0x4f, 0x6b, 0x69, 0xf1, 0xdd, 0xed, 0xb1, 0xbb, 0x92, 0x2d, 0x0a, 0x0a, - 0xca, 0x94, 0xa9, 0x69, 0xe8, 0xe8, 0xe8, 0xa9, 0x28, 0x69, 0x98, 0xe1, 0x4f, 0x60, 0xdc, 0xd1, - 0xa4, 0xa6, 0x02, 0x66, 0xf7, 0x4e, 0xf6, 0x49, 0x77, 0x89, 0x04, 0x93, 0xa1, 0xbb, 0xdd, 0xb7, - 0xef, 0xfb, 0x76, 0xdf, 0xfb, 0xde, 0x7b, 0x07, 0x9b, 0x24, 0x18, 0xb2, 0x51, 0x1d, 0x87, 0xb4, - 0x3e, 0x6c, 0xd4, 0xf1, 0x40, 0xf6, 0xeb, 0x2e, 0xe1, 0xb2, 0x16, 0x72, 0x26, 0x19, 0x5a, 0xd5, - 0xd6, 0x1a, 0x0e, 0x69, 0x6d, 0xd8, 0xa8, 0x29, 0x6b, 0x79, 0xd2, 0xc1, 0x65, 0x9c, 0xd4, 0xf7, - 0xb1, 0x20, 0x91, 0x43, 0xf9, 0x7a, 0xda, 0xea, 0xb2, 0xe0, 0x80, 0xf6, 0x1c, 0xc1, 0x06, 0xdc, - 0x1d, 0x1f, 0xdb, 0xea, 0x31, 0xd6, 0xf3, 0x48, 0x5d, 0xaf, 0xf6, 0x07, 0x07, 0xf5, 0x23, 0x8e, - 0xc3, 0x90, 0x70, 0x11, 0xdb, 0xd7, 0x87, 0xd8, 0xa3, 0x5d, 0x2c, 0x49, 0x7d, 0xfc, 0x11, 0x1b, - 0xd6, 0x7a, 0xac, 0xc7, 0xf4, 0x67, 0x5d, 0x7d, 0x45, 0xbb, 0xd5, 0xef, 0xf2, 0x70, 0xa1, 0xe3, - 0x89, 0x87, 0x98, 0x63, 0x9f, 0x48, 0xc2, 0x05, 0x1a, 0xc1, 0xa6, 0xf4, 0x84, 0xe3, 0xd3, 0x80, - 0xfa, 0x03, 0xdf, 0xd1, 0xc7, 0x5c, 0xe6, 0x39, 0x43, 0xc2, 0x05, 0x65, 0x81, 0x65, 0x54, 0x8c, - 0xed, 0x95, 0xc6, 0x8d, 0x5a, 0xea, 0x7d, 0xb5, 0x09, 0x1c, 0xbd, 0x8a, 0x7d, 0x9b, 0xf0, 0xd3, - 0x1f, 0x3f, 0xe7, 0x17, 0xbf, 0x35, 0x72, 0xa6, 0x61, 0x6f, 0x48, 0x4f, 0x7c, 0x14, 0x81, 0x8f, - 0xed, 0x8f, 0x22, 0xe8, 0x53, 0x6a, 0x7c, 0x9c, 0x4d, 0x9d, 0x7b, 0x11, 0xd4, 0x11, 0xf8, 0x34, - 0xf5, 0x55, 0xb8, 0xe0, 0xd2, 0xb0, 0x4f, 0xb8, 0x23, 0x06, 0x54, 0x12, 0x61, 0xe5, 0x2b, 0xf9, - 0xed, 0x65, 0xfb, 0x7c, 0xb4, 0xd9, 0xd6, 0x7b, 0xe8, 0x32, 0x94, 0x88, 0xdb, 0xed, 0x3b, 0xee, - 0x80, 0x0f, 0x89, 0xb0, 0x0a, 0xfa, 0x08, 0xa8, 0xad, 0x96, 0xde, 0xa9, 0x3e, 0x80, 0x52, 0x82, - 0x1b, 0x9d, 0x87, 0x62, 0x67, 0xb7, 0xed, 0xdc, 0xd9, 0xeb, 0x3c, 0x30, 0x17, 0x50, 0x09, 0xce, - 0x75, 0x76, 0xdb, 0xc3, 0x9b, 0xce, 0x6b, 0xa6, 0x71, 0xb6, 0xb8, 0x69, 0xe6, 0xce, 0x16, 0x0d, - 0x33, 0x7f, 0xb6, 0xb8, 0x65, 0x16, 0xaa, 0x7f, 0xe6, 0x60, 0xa5, 0xe3, 0x89, 0x16, 0xe1, 0x92, - 0x1e, 0x50, 0x17, 0x4b, 0x82, 0xee, 0xc1, 0xaa, 0x7b, 0xb6, 0x74, 0xdc, 0x3e, 0xa6, 0x51, 0x52, - 0x4a, 0x8d, 0x57, 0x26, 0x23, 0xa3, 0x34, 0x54, 0xbb, 0x8b, 0x25, 0x6e, 0x6b, 0x01, 0xd9, 0x66, - 0xc2, 0xaf, 0xa5, 0xdc, 0xd0, 0x6d, 0x28, 0x85, 0x9c, 0x0e, 0x15, 0xce, 0x21, 0x19, 0xe9, 0xf8, - 0xce, 0x44, 0x81, 0xd8, 0xe3, 0x3e, 0x19, 0xa1, 0x37, 0xa0, 0x18, 0x62, 0x21, 0x8e, 0x18, 0xef, - 0x5a, 0xf9, 0x79, 0x9c, 0x4f, 0x8f, 0x2b, 0x6a, 0xe6, 0x8a, 0xd0, 0x11, 0x12, 0x87, 0x1e, 0xb1, - 0x0a, 0x73, 0x51, 0x2b, 0x8f, 0xb6, 0x76, 0x40, 0x0e, 0x6c, 0x0a, 0xda, 0x0b, 0x48, 0xd7, 0x49, - 0x46, 0x43, 0x52, 0x9f, 0x08, 0x89, 0xfd, 0xd0, 0x5a, 0xac, 0xe4, 0x67, 0x03, 0x96, 0x23, 0x88, - 0x44, 0x78, 0x3b, 0x63, 0x80, 0xea, 0x1e, 0xac, 0x75, 0x3c, 0xd1, 0x26, 0x42, 0xe9, 0xa3, 0x43, - 0xdd, 0x43, 0x22, 0xef, 0x93, 0x91, 0x40, 0xef, 0x40, 0xe1, 0x90, 0x8c, 0x84, 0x65, 0xcc, 0x41, - 0x10, 0xab, 0xef, 0x89, 0x91, 0x2b, 0x1a, 0xb6, 0x76, 0xab, 0xfe, 0x5a, 0x80, 0xcd, 0x04, 0xdf, - 0xa3, 0xa8, 0x48, 0x29, 0x0b, 0x5a, 0x2c, 0x90, 0xe4, 0x58, 0xa2, 0xb7, 0x01, 0x24, 0x1f, 0x08, - 0xa9, 0x5e, 0x86, 0xe7, 0x4b, 0xec, 0x72, 0xec, 0xd0, 0xc2, 0x68, 0x07, 0xd6, 0x87, 0x84, 0xd3, - 0x83, 0xd1, 0x44, 0x58, 0x44, 0x78, 0x48, 0x23, 0x45, 0x37, 0x4d, 0x75, 0xa3, 0xd2, 0x13, 0xa3, - 0x58, 0x5d, 0xe2, 0x85, 0xca, 0x8d, 0xed, 0x1b, 0xf6, 0x4b, 0x91, 0x43, 0xe2, 0x52, 0xed, 0xf0, - 0x90, 0x3e, 0x03, 0xa9, 0x8f, 0x45, 0xdf, 0xca, 0x65, 0x20, 0xbd, 0xb7, 0xed, 0x64, 0x20, 0xed, - 0x60, 0xd1, 0x47, 0xaf, 0x9f, 0x22, 0x89, 0xc1, 0xfe, 0x97, 0xc4, 0x95, 0x0e, 0xf6, 0xa4, 0x13, - 0x60, 0x9f, 0xc4, 0x25, 0xb4, 0x16, 0x99, 0xdb, 0x91, 0xf5, 0x8e, 0x27, 0x3f, 0xc6, 0xbe, 0x12, - 0xfa, 0x25, 0x4e, 0xbe, 0x1a, 0x50, 0x4e, 0x9c, 0xa4, 0x52, 0x16, 0x75, 0x44, 0xca, 0xb5, 0xa8, - 0x0f, 0xd6, 0xc6, 0x7d, 0xb0, 0xd6, 0x64, 0xcc, 0x7b, 0x84, 0xbd, 0x01, 0xb1, 0x57, 0x63, 0xb7, - 0x07, 0x67, 0x6a, 0x39, 0x84, 0x6b, 0x63, 0xac, 0xe7, 0xaa, 0x66, 0x69, 0x26, 0xf8, 0x95, 0x18, - 0xa7, 0xfd, 0x4c, 0xe5, 0xa0, 0x3a, 0xe4, 0x5d, 0xee, 0x59, 0xe7, 0xe6, 0x49, 0x9d, 0x3a, 0x89, - 0xde, 0x84, 0x0d, 0xec, 0x79, 0xec, 0xc8, 0x21, 0xc7, 0x21, 0xe5, 0x93, 0x97, 0xb3, 0x8a, 0x15, - 0x63, 0xbb, 0x68, 0xaf, 0xeb, 0x03, 0xef, 0x47, 0xf6, 0x04, 0x6b, 0xf5, 0xe9, 0x39, 0x30, 0x5b, - 0xcc, 0xf7, 0x59, 0xa0, 0xfa, 0x44, 0xac, 0xa1, 0x77, 0x01, 0x54, 0x23, 0x0d, 0x55, 0x4b, 0x14, - 0xb1, 0x86, 0x2a, 0xb3, 0xda, 0xa6, 0xbd, 0x2c, 0xe3, 0xa5, 0x40, 0xbb, 0x60, 0x2a, 0x80, 0xc4, - 0x3d, 0x84, 0xce, 0x7a, 0xa9, 0x71, 0x25, 0x1b, 0x26, 0x71, 0x25, 0xfb, 0xa2, 0x9c, 0x58, 0x0b, - 0xf4, 0x35, 0x54, 0xa7, 0xd0, 0x1c, 0xd1, 0x15, 0x8e, 0x20, 0x2e, 0x27, 0xd2, 0x89, 0xa6, 0x9c, - 0xb0, 0x96, 0x34, 0x7e, 0x35, 0x03, 0xbf, 0xdd, 0x15, 0x6d, 0x7d, 0xb6, 0xa5, 0x8f, 0x9e, 0x55, - 0x95, 0x69, 0xd8, 0x5b, 0x93, 0x64, 0x53, 0x47, 0x05, 0xfa, 0x02, 0xd0, 0xf0, 0xb4, 0xc6, 0x14, - 0x97, 0x0a, 0x50, 0xdc, 0xac, 0xea, 0x19, 0x5c, 0xcf, 0xab, 0xcd, 0x9d, 0x05, 0x7b, 0x75, 0x98, - 0x2a, 0x58, 0x09, 0xd7, 0xd2, 0x0c, 0xe9, 0x07, 0xc6, 0x7a, 0x98, 0xe3, 0x7d, 0x3b, 0x0b, 0x76, - 0x25, 0x45, 0x33, 0x75, 0x06, 0x3d, 0x36, 0xe0, 0x65, 0x97, 0xf9, 0xfb, 0x54, 0x89, 0x39, 0xe3, - 0x85, 0x45, 0xcd, 0xb6, 0x93, 0xf5, 0xc2, 0x29, 0xb5, 0xa8, 0x0d, 0x0d, 0x33, 0xe3, 0xe9, 0x1b, - 0x63, 0xba, 0x74, 0xcf, 0xba, 0x0e, 0x2b, 0xd8, 0x0b, 0x83, 0xd3, 0x89, 0x3d, 0x9e, 0x8d, 0x17, - 0xd4, 0xee, 0x78, 0x1c, 0x8a, 0xf2, 0xf7, 0x39, 0xb8, 0x36, 0x0f, 0x19, 0x1a, 0x41, 0xb9, 0x4b, - 0x0e, 0xf0, 0xc0, 0x93, 0x59, 0x4f, 0x33, 0xfe, 0x53, 0xf2, 0x62, 0xd5, 0x3c, 0xd6, 0xaa, 0xb1, - 0x62, 0xf8, 0x34, 0xf5, 0x37, 0x73, 0x66, 0x33, 0x37, 0x6f, 0x36, 0x27, 0x78, 0x67, 0xe6, 0xb5, - 0xb9, 0x01, 0xeb, 0x19, 0xfc, 0x72, 0x14, 0x92, 0x7b, 0x85, 0xe2, 0xa2, 0xb9, 0x54, 0xfd, 0xcb, - 0x00, 0xb4, 0x17, 0x0a, 0xc9, 0x09, 0xf6, 0x13, 0x25, 0xff, 0x09, 0x20, 0x57, 0x27, 0xd6, 0xd1, - 0xa5, 0x36, 0x11, 0xaa, 0xab, 0x73, 0xa8, 0xc0, 0x36, 0xdd, 0xe9, 0x2e, 0xb2, 0x09, 0x79, 0x11, - 0x50, 0xfd, 0xd2, 0xe5, 0xf8, 0x15, 0x3c, 0xbf, 0xfd, 0xb7, 0x61, 0xab, 0x6d, 0x54, 0x87, 0x4b, - 0x51, 0xd3, 0xe2, 0x24, 0x20, 0x3d, 0x26, 0xa9, 0xbe, 0xb1, 0xae, 0xac, 0xa2, 0x8d, 0xb4, 0xc9, - 0x4e, 0x5a, 0xd0, 0x07, 0x60, 0xfa, 0xf8, 0xd8, 0x11, 0xd1, 0x44, 0x75, 0xf4, 0x10, 0x8d, 0xc6, - 0xfe, 0x66, 0xaa, 0xdf, 0xee, 0x7d, 0x18, 0xc8, 0x5b, 0x8d, 0xa8, 0xe3, 0xae, 0xf8, 0xf8, 0x38, - 0x1e, 0xc3, 0x6a, 0x00, 0x57, 0x9f, 0xe6, 0x61, 0xed, 0x2e, 0x3b, 0x0a, 0xfe, 0x8f, 0x10, 0x7c, - 0x0a, 0xe5, 0xf1, 0xdc, 0x70, 0x3d, 0x4a, 0x02, 0x39, 0xd1, 0x9a, 0x73, 0x33, 0xa7, 0x85, 0x15, - 0x7b, 0xb7, 0xb4, 0x73, 0xf2, 0x37, 0xee, 0x2d, 0x28, 0x9d, 0x4e, 0xa4, 0x80, 0xc6, 0x0d, 0xe9, - 0x79, 0x50, 0x30, 0x1e, 0x3c, 0x01, 0x45, 0x9f, 0xc1, 0xa5, 0x71, 0x18, 0xa5, 0xfe, 0x33, 0x49, - 0x46, 0xf3, 0xd5, 0xec, 0x0e, 0x9d, 0xfa, 0x93, 0x51, 0xdd, 0x4c, 0xa4, 0x7e, 0x6f, 0x06, 0x70, - 0x3d, 0x03, 0x3a, 0xa3, 0x00, 0x16, 0xff, 0x4d, 0x3b, 0x4b, 0xf1, 0x4c, 0xcb, 0xbe, 0x0c, 0x56, - 0x16, 0xad, 0xd2, 0x7d, 0x95, 0xc0, 0xc5, 0xe9, 0xee, 0x87, 0xa0, 0xa0, 0xff, 0x1f, 0x54, 0x72, - 0x97, 0x6d, 0xfd, 0x8d, 0x6e, 0x03, 0xa8, 0x5b, 0x4e, 0xd4, 0xe7, 0xe5, 0x8c, 0xe9, 0x1b, 0x41, - 0x8c, 0x7f, 0x9d, 0x44, 0x57, 0x44, 0x1b, 0xd5, 0x1f, 0x73, 0xb0, 0x14, 0x91, 0x64, 0xc2, 0xef, - 0xc2, 0xc5, 0xa9, 0x21, 0x16, 0x73, 0xcc, 0x9e, 0x88, 0x3b, 0x0b, 0xf6, 0xca, 0xe4, 0x98, 0x7a, - 0x56, 0x06, 0xf3, 0x2f, 0x20, 0x83, 0xd9, 0x13, 0xaf, 0xf0, 0xe2, 0x26, 0x5e, 0x73, 0x09, 0x0a, - 0x2a, 0x31, 0xcd, 0xbb, 0x3f, 0x9c, 0x6c, 0x19, 0xbf, 0x9c, 0x6c, 0x19, 0xbf, 0x9d, 0x6c, 0x19, - 0xbf, 0x9f, 0x6c, 0x19, 0x70, 0x99, 0xb2, 0x88, 0x21, 0xe4, 0xec, 0x78, 0x94, 0x26, 0x6b, 0x2e, - 0x2b, 0x36, 0x3d, 0x11, 0x1e, 0x1a, 0x9f, 0x17, 0xd4, 0xd6, 0xfe, 0x92, 0x16, 0xfb, 0xad, 0x7f, - 0x02, 0x00, 0x00, 0xff, 0xff, 0xa2, 0xd6, 0xa7, 0x9e, 0x50, 0x0f, 0x00, 0x00, -} - -func (this *TlsParameters) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TlsParameters) - if !ok { - that2, ok := that.(TlsParameters) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.TlsMinimumProtocolVersion != that1.TlsMinimumProtocolVersion { - return false - } - if this.TlsMaximumProtocolVersion != that1.TlsMaximumProtocolVersion { - return false - } - if len(this.CipherSuites) != len(that1.CipherSuites) { - return false - } - for i := range this.CipherSuites { - if this.CipherSuites[i] != that1.CipherSuites[i] { - return false - } - } - if len(this.EcdhCurves) != len(that1.EcdhCurves) { - return false - } - for i := range this.EcdhCurves { - if this.EcdhCurves[i] != that1.EcdhCurves[i] { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *TlsCertificate) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TlsCertificate) - if !ok { - that2, ok := that.(TlsCertificate) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.CertificateChain.Equal(that1.CertificateChain) { - return false - } - if !this.PrivateKey.Equal(that1.PrivateKey) { - return false - } - if !this.Password.Equal(that1.Password) { - return false - } - if !this.OcspStaple.Equal(that1.OcspStaple) { - return false - } - if len(this.SignedCertificateTimestamp) != len(that1.SignedCertificateTimestamp) { - return false - } - for i := range this.SignedCertificateTimestamp { - if !this.SignedCertificateTimestamp[i].Equal(that1.SignedCertificateTimestamp[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *TlsSessionTicketKeys) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TlsSessionTicketKeys) - if !ok { - that2, ok := that.(TlsSessionTicketKeys) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.Keys) != len(that1.Keys) { - return false - } - for i := range this.Keys { - if !this.Keys[i].Equal(that1.Keys[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *CertificateValidationContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CertificateValidationContext) - if !ok { - that2, ok := that.(CertificateValidationContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TrustedCa.Equal(that1.TrustedCa) { - return false - } - if len(this.VerifyCertificateSpki) != len(that1.VerifyCertificateSpki) { - return false - } - for i := range this.VerifyCertificateSpki { - if this.VerifyCertificateSpki[i] != that1.VerifyCertificateSpki[i] { - return false - } - } - if len(this.VerifyCertificateHash) != len(that1.VerifyCertificateHash) { - return false - } - for i := range this.VerifyCertificateHash { - if this.VerifyCertificateHash[i] != that1.VerifyCertificateHash[i] { - return false - } - } - if len(this.VerifySubjectAltName) != len(that1.VerifySubjectAltName) { - return false - } - for i := range this.VerifySubjectAltName { - if this.VerifySubjectAltName[i] != that1.VerifySubjectAltName[i] { - return false - } - } - if !this.RequireOcspStaple.Equal(that1.RequireOcspStaple) { - return false - } - if !this.RequireSignedCertificateTimestamp.Equal(that1.RequireSignedCertificateTimestamp) { - return false - } - if !this.Crl.Equal(that1.Crl) { - return false - } - if this.AllowExpiredCertificate != that1.AllowExpiredCertificate { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *CommonTlsContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CommonTlsContext) - if !ok { - that2, ok := that.(CommonTlsContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TlsParams.Equal(that1.TlsParams) { - return false - } - if len(this.TlsCertificates) != len(that1.TlsCertificates) { - return false - } - for i := range this.TlsCertificates { - if !this.TlsCertificates[i].Equal(that1.TlsCertificates[i]) { - return false - } - } - if len(this.TlsCertificateSdsSecretConfigs) != len(that1.TlsCertificateSdsSecretConfigs) { - return false - } - for i := range this.TlsCertificateSdsSecretConfigs { - if !this.TlsCertificateSdsSecretConfigs[i].Equal(that1.TlsCertificateSdsSecretConfigs[i]) { - return false - } - } - if that1.ValidationContextType == nil { - if this.ValidationContextType != nil { - return false - } - } else if this.ValidationContextType == nil { - return false - } else if !this.ValidationContextType.Equal(that1.ValidationContextType) { - return false - } - if len(this.AlpnProtocols) != len(that1.AlpnProtocols) { - return false - } - for i := range this.AlpnProtocols { - if this.AlpnProtocols[i] != that1.AlpnProtocols[i] { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *CommonTlsContext_ValidationContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CommonTlsContext_ValidationContext) - if !ok { - that2, ok := that.(CommonTlsContext_ValidationContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ValidationContext.Equal(that1.ValidationContext) { - return false - } - return true -} -func (this *CommonTlsContext_ValidationContextSdsSecretConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CommonTlsContext_ValidationContextSdsSecretConfig) - if !ok { - that2, ok := that.(CommonTlsContext_ValidationContextSdsSecretConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ValidationContextSdsSecretConfig.Equal(that1.ValidationContextSdsSecretConfig) { - return false - } - return true -} -func (this *CommonTlsContext_CombinedValidationContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CommonTlsContext_CombinedValidationContext) - if !ok { - that2, ok := that.(CommonTlsContext_CombinedValidationContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.CombinedValidationContext.Equal(that1.CombinedValidationContext) { - return false - } - return true -} -func (this *CommonTlsContext_CombinedCertificateValidationContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CommonTlsContext_CombinedCertificateValidationContext) - if !ok { - that2, ok := that.(CommonTlsContext_CombinedCertificateValidationContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.DefaultValidationContext.Equal(that1.DefaultValidationContext) { - return false - } - if !this.ValidationContextSdsSecretConfig.Equal(that1.ValidationContextSdsSecretConfig) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *UpstreamTlsContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*UpstreamTlsContext) - if !ok { - that2, ok := that.(UpstreamTlsContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.CommonTlsContext.Equal(that1.CommonTlsContext) { - return false - } - if this.Sni != that1.Sni { - return false - } - if this.AllowRenegotiation != that1.AllowRenegotiation { - return false - } - if !this.MaxSessionKeys.Equal(that1.MaxSessionKeys) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DownstreamTlsContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DownstreamTlsContext) - if !ok { - that2, ok := that.(DownstreamTlsContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.CommonTlsContext.Equal(that1.CommonTlsContext) { - return false - } - if !this.RequireClientCertificate.Equal(that1.RequireClientCertificate) { - return false - } - if !this.RequireSni.Equal(that1.RequireSni) { - return false - } - if that1.SessionTicketKeysType == nil { - if this.SessionTicketKeysType != nil { - return false - } - } else if this.SessionTicketKeysType == nil { - return false - } else if !this.SessionTicketKeysType.Equal(that1.SessionTicketKeysType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DownstreamTlsContext_SessionTicketKeys) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DownstreamTlsContext_SessionTicketKeys) - if !ok { - that2, ok := that.(DownstreamTlsContext_SessionTicketKeys) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SessionTicketKeys.Equal(that1.SessionTicketKeys) { - return false - } - return true -} -func (this *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) - if !ok { - that2, ok := that.(DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SessionTicketKeysSdsSecretConfig.Equal(that1.SessionTicketKeysSdsSecretConfig) { - return false - } - return true -} -func (this *SdsSecretConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SdsSecretConfig) - if !ok { - that2, ok := that.(SdsSecretConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if !this.SdsConfig.Equal(that1.SdsConfig) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Secret) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Secret) - if !ok { - that2, ok := that.(Secret) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.Type == nil { - if this.Type != nil { - return false - } - } else if this.Type == nil { - return false - } else if !this.Type.Equal(that1.Type) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Secret_TlsCertificate) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Secret_TlsCertificate) - if !ok { - that2, ok := that.(Secret_TlsCertificate) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TlsCertificate.Equal(that1.TlsCertificate) { - return false - } - return true -} -func (this *Secret_SessionTicketKeys) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Secret_SessionTicketKeys) - if !ok { - that2, ok := that.(Secret_SessionTicketKeys) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SessionTicketKeys.Equal(that1.SessionTicketKeys) { - return false - } - return true -} -func (this *Secret_ValidationContext) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Secret_ValidationContext) - if !ok { - that2, ok := that.(Secret_ValidationContext) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ValidationContext.Equal(that1.ValidationContext) { - return false - } - return true -} -func (m *TlsParameters) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TlsParameters) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TlsMinimumProtocolVersion != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.TlsMinimumProtocolVersion)) - } - if m.TlsMaximumProtocolVersion != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.TlsMaximumProtocolVersion)) - } - if len(m.CipherSuites) > 0 { - for _, s := range m.CipherSuites { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.EcdhCurves) > 0 { - for _, s := range m.EcdhCurves { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TlsCertificate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TlsCertificate) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CertificateChain != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(m.CertificateChain.Size())) - n1, err := m.CertificateChain.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.PrivateKey != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.PrivateKey.Size())) - n2, err := m.PrivateKey.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Password != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.Password.Size())) - n3, err := m.Password.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.OcspStaple != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.OcspStaple.Size())) - n4, err := m.OcspStaple.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.SignedCertificateTimestamp) > 0 { - for _, msg := range m.SignedCertificateTimestamp { - dAtA[i] = 0x2a - i++ - i = encodeVarintCert(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TlsSessionTicketKeys) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TlsSessionTicketKeys) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Keys) > 0 { - for _, msg := range m.Keys { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CertificateValidationContext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CertificateValidationContext) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TrustedCa != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(m.TrustedCa.Size())) - n5, err := m.TrustedCa.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if len(m.VerifyCertificateHash) > 0 { - for _, s := range m.VerifyCertificateHash { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.VerifyCertificateSpki) > 0 { - for _, s := range m.VerifyCertificateSpki { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.VerifySubjectAltName) > 0 { - for _, s := range m.VerifySubjectAltName { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.RequireOcspStaple != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.RequireOcspStaple.Size())) - n6, err := m.RequireOcspStaple.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.RequireSignedCertificateTimestamp != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.RequireSignedCertificateTimestamp.Size())) - n7, err := m.RequireSignedCertificateTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.Crl != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.Crl.Size())) - n8, err := m.Crl.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.AllowExpiredCertificate { - dAtA[i] = 0x40 - i++ - if m.AllowExpiredCertificate { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CommonTlsContext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CommonTlsContext) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TlsParams != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(m.TlsParams.Size())) - n9, err := m.TlsParams.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if len(m.TlsCertificates) > 0 { - for _, msg := range m.TlsCertificates { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.ValidationContextType != nil { - nn10, err := m.ValidationContextType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn10 - } - if len(m.AlpnProtocols) > 0 { - for _, s := range m.AlpnProtocols { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.TlsCertificateSdsSecretConfigs) > 0 { - for _, msg := range m.TlsCertificateSdsSecretConfigs { - dAtA[i] = 0x32 - i++ - i = encodeVarintCert(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CommonTlsContext_ValidationContext) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ValidationContext != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.ValidationContext.Size())) - n11, err := m.ValidationContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - return i, nil -} -func (m *CommonTlsContext_ValidationContextSdsSecretConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ValidationContextSdsSecretConfig != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.ValidationContextSdsSecretConfig.Size())) - n12, err := m.ValidationContextSdsSecretConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - return i, nil -} -func (m *CommonTlsContext_CombinedValidationContext) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.CombinedValidationContext != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.CombinedValidationContext.Size())) - n13, err := m.CombinedValidationContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} -func (m *CommonTlsContext_CombinedCertificateValidationContext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CommonTlsContext_CombinedCertificateValidationContext) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.DefaultValidationContext != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(m.DefaultValidationContext.Size())) - n14, err := m.DefaultValidationContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.ValidationContextSdsSecretConfig != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.ValidationContextSdsSecretConfig.Size())) - n15, err := m.ValidationContextSdsSecretConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *UpstreamTlsContext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UpstreamTlsContext) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CommonTlsContext != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(m.CommonTlsContext.Size())) - n16, err := m.CommonTlsContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if len(m.Sni) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(len(m.Sni))) - i += copy(dAtA[i:], m.Sni) - } - if m.AllowRenegotiation { - dAtA[i] = 0x18 - i++ - if m.AllowRenegotiation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.MaxSessionKeys != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.MaxSessionKeys.Size())) - n17, err := m.MaxSessionKeys.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DownstreamTlsContext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DownstreamTlsContext) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CommonTlsContext != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(m.CommonTlsContext.Size())) - n18, err := m.CommonTlsContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if m.RequireClientCertificate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.RequireClientCertificate.Size())) - n19, err := m.RequireClientCertificate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if m.RequireSni != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.RequireSni.Size())) - n20, err := m.RequireSni.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if m.SessionTicketKeysType != nil { - nn21, err := m.SessionTicketKeysType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn21 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DownstreamTlsContext_SessionTicketKeys) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.SessionTicketKeys != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.SessionTicketKeys.Size())) - n22, err := m.SessionTicketKeys.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - return i, nil -} -func (m *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.SessionTicketKeysSdsSecretConfig != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.SessionTicketKeysSdsSecretConfig.Size())) - n23, err := m.SessionTicketKeysSdsSecretConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - return i, nil -} -func (m *SdsSecretConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SdsSecretConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.SdsConfig != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.SdsConfig.Size())) - n24, err := m.SdsConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Secret) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Secret) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCert(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Type != nil { - nn25, err := m.Type.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn25 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Secret_TlsCertificate) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TlsCertificate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.TlsCertificate.Size())) - n26, err := m.TlsCertificate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - return i, nil -} -func (m *Secret_SessionTicketKeys) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.SessionTicketKeys != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCert(dAtA, i, uint64(m.SessionTicketKeys.Size())) - n27, err := m.SessionTicketKeys.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - return i, nil -} -func (m *Secret_ValidationContext) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ValidationContext != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCert(dAtA, i, uint64(m.ValidationContext.Size())) - n28, err := m.ValidationContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - return i, nil -} -func encodeVarintCert(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *TlsParameters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TlsMinimumProtocolVersion != 0 { - n += 1 + sovCert(uint64(m.TlsMinimumProtocolVersion)) - } - if m.TlsMaximumProtocolVersion != 0 { - n += 1 + sovCert(uint64(m.TlsMaximumProtocolVersion)) - } - if len(m.CipherSuites) > 0 { - for _, s := range m.CipherSuites { - l = len(s) - n += 1 + l + sovCert(uint64(l)) - } - } - if len(m.EcdhCurves) > 0 { - for _, s := range m.EcdhCurves { - l = len(s) - n += 1 + l + sovCert(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TlsCertificate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CertificateChain != nil { - l = m.CertificateChain.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.PrivateKey != nil { - l = m.PrivateKey.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.Password != nil { - l = m.Password.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.OcspStaple != nil { - l = m.OcspStaple.Size() - n += 1 + l + sovCert(uint64(l)) - } - if len(m.SignedCertificateTimestamp) > 0 { - for _, e := range m.SignedCertificateTimestamp { - l = e.Size() - n += 1 + l + sovCert(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TlsSessionTicketKeys) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Keys) > 0 { - for _, e := range m.Keys { - l = e.Size() - n += 1 + l + sovCert(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CertificateValidationContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TrustedCa != nil { - l = m.TrustedCa.Size() - n += 1 + l + sovCert(uint64(l)) - } - if len(m.VerifyCertificateHash) > 0 { - for _, s := range m.VerifyCertificateHash { - l = len(s) - n += 1 + l + sovCert(uint64(l)) - } - } - if len(m.VerifyCertificateSpki) > 0 { - for _, s := range m.VerifyCertificateSpki { - l = len(s) - n += 1 + l + sovCert(uint64(l)) - } - } - if len(m.VerifySubjectAltName) > 0 { - for _, s := range m.VerifySubjectAltName { - l = len(s) - n += 1 + l + sovCert(uint64(l)) - } - } - if m.RequireOcspStaple != nil { - l = m.RequireOcspStaple.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.RequireSignedCertificateTimestamp != nil { - l = m.RequireSignedCertificateTimestamp.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.Crl != nil { - l = m.Crl.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.AllowExpiredCertificate { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CommonTlsContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TlsParams != nil { - l = m.TlsParams.Size() - n += 1 + l + sovCert(uint64(l)) - } - if len(m.TlsCertificates) > 0 { - for _, e := range m.TlsCertificates { - l = e.Size() - n += 1 + l + sovCert(uint64(l)) - } - } - if m.ValidationContextType != nil { - n += m.ValidationContextType.Size() - } - if len(m.AlpnProtocols) > 0 { - for _, s := range m.AlpnProtocols { - l = len(s) - n += 1 + l + sovCert(uint64(l)) - } - } - if len(m.TlsCertificateSdsSecretConfigs) > 0 { - for _, e := range m.TlsCertificateSdsSecretConfigs { - l = e.Size() - n += 1 + l + sovCert(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CommonTlsContext_ValidationContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ValidationContext != nil { - l = m.ValidationContext.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *CommonTlsContext_ValidationContextSdsSecretConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ValidationContextSdsSecretConfig != nil { - l = m.ValidationContextSdsSecretConfig.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *CommonTlsContext_CombinedValidationContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CombinedValidationContext != nil { - l = m.CombinedValidationContext.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *CommonTlsContext_CombinedCertificateValidationContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DefaultValidationContext != nil { - l = m.DefaultValidationContext.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.ValidationContextSdsSecretConfig != nil { - l = m.ValidationContextSdsSecretConfig.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *UpstreamTlsContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CommonTlsContext != nil { - l = m.CommonTlsContext.Size() - n += 1 + l + sovCert(uint64(l)) - } - l = len(m.Sni) - if l > 0 { - n += 1 + l + sovCert(uint64(l)) - } - if m.AllowRenegotiation { - n += 2 - } - if m.MaxSessionKeys != nil { - l = m.MaxSessionKeys.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DownstreamTlsContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CommonTlsContext != nil { - l = m.CommonTlsContext.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.RequireClientCertificate != nil { - l = m.RequireClientCertificate.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.RequireSni != nil { - l = m.RequireSni.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.SessionTicketKeysType != nil { - n += m.SessionTicketKeysType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DownstreamTlsContext_SessionTicketKeys) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SessionTicketKeys != nil { - l = m.SessionTicketKeys.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SessionTicketKeysSdsSecretConfig != nil { - l = m.SessionTicketKeysSdsSecretConfig.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *SdsSecretConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovCert(uint64(l)) - } - if m.SdsConfig != nil { - l = m.SdsConfig.Size() - n += 1 + l + sovCert(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Secret) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovCert(uint64(l)) - } - if m.Type != nil { - n += m.Type.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Secret_TlsCertificate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TlsCertificate != nil { - l = m.TlsCertificate.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *Secret_SessionTicketKeys) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SessionTicketKeys != nil { - l = m.SessionTicketKeys.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} -func (m *Secret_ValidationContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ValidationContext != nil { - l = m.ValidationContext.Size() - n += 1 + l + sovCert(uint64(l)) - } - return n -} - -func sovCert(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozCert(x uint64) (n int) { - return sovCert(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *TlsParameters) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TlsParameters: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TlsParameters: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsMinimumProtocolVersion", wireType) - } - m.TlsMinimumProtocolVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TlsMinimumProtocolVersion |= TlsParameters_TlsProtocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsMaximumProtocolVersion", wireType) - } - m.TlsMaximumProtocolVersion = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TlsMaximumProtocolVersion |= TlsParameters_TlsProtocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CipherSuites", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CipherSuites = append(m.CipherSuites, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EcdhCurves", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EcdhCurves = append(m.EcdhCurves, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TlsCertificate) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TlsCertificate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TlsCertificate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertificateChain", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CertificateChain == nil { - m.CertificateChain = &core.DataSource{} - } - if err := m.CertificateChain.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrivateKey", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PrivateKey == nil { - m.PrivateKey = &core.DataSource{} - } - if err := m.PrivateKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Password == nil { - m.Password = &core.DataSource{} - } - if err := m.Password.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OcspStaple", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.OcspStaple == nil { - m.OcspStaple = &core.DataSource{} - } - if err := m.OcspStaple.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SignedCertificateTimestamp", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SignedCertificateTimestamp = append(m.SignedCertificateTimestamp, &core.DataSource{}) - if err := m.SignedCertificateTimestamp[len(m.SignedCertificateTimestamp)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TlsSessionTicketKeys) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TlsSessionTicketKeys: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TlsSessionTicketKeys: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, &core.DataSource{}) - if err := m.Keys[len(m.Keys)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CertificateValidationContext) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CertificateValidationContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CertificateValidationContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrustedCa", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TrustedCa == nil { - m.TrustedCa = &core.DataSource{} - } - if err := m.TrustedCa.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VerifyCertificateHash", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VerifyCertificateHash = append(m.VerifyCertificateHash, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VerifyCertificateSpki", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VerifyCertificateSpki = append(m.VerifyCertificateSpki, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VerifySubjectAltName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VerifySubjectAltName = append(m.VerifySubjectAltName, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequireOcspStaple", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequireOcspStaple == nil { - m.RequireOcspStaple = &types.BoolValue{} - } - if err := m.RequireOcspStaple.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequireSignedCertificateTimestamp", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequireSignedCertificateTimestamp == nil { - m.RequireSignedCertificateTimestamp = &types.BoolValue{} - } - if err := m.RequireSignedCertificateTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Crl", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Crl == nil { - m.Crl = &core.DataSource{} - } - if err := m.Crl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowExpiredCertificate", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AllowExpiredCertificate = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CommonTlsContext) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CommonTlsContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CommonTlsContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsParams", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TlsParams == nil { - m.TlsParams = &TlsParameters{} - } - if err := m.TlsParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsCertificates", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TlsCertificates = append(m.TlsCertificates, &TlsCertificate{}) - if err := m.TlsCertificates[len(m.TlsCertificates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidationContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &CertificateValidationContext{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ValidationContextType = &CommonTlsContext_ValidationContext{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AlpnProtocols", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AlpnProtocols = append(m.AlpnProtocols, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsCertificateSdsSecretConfigs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TlsCertificateSdsSecretConfigs = append(m.TlsCertificateSdsSecretConfigs, &SdsSecretConfig{}) - if err := m.TlsCertificateSdsSecretConfigs[len(m.TlsCertificateSdsSecretConfigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidationContextSdsSecretConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SdsSecretConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ValidationContextType = &CommonTlsContext_ValidationContextSdsSecretConfig{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CombinedValidationContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &CommonTlsContext_CombinedCertificateValidationContext{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ValidationContextType = &CommonTlsContext_CombinedValidationContext{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CommonTlsContext_CombinedCertificateValidationContext) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CombinedCertificateValidationContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CombinedCertificateValidationContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultValidationContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DefaultValidationContext == nil { - m.DefaultValidationContext = &CertificateValidationContext{} - } - if err := m.DefaultValidationContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidationContextSdsSecretConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ValidationContextSdsSecretConfig == nil { - m.ValidationContextSdsSecretConfig = &SdsSecretConfig{} - } - if err := m.ValidationContextSdsSecretConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpstreamTlsContext) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpstreamTlsContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpstreamTlsContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommonTlsContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CommonTlsContext == nil { - m.CommonTlsContext = &CommonTlsContext{} - } - if err := m.CommonTlsContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Sni", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Sni = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowRenegotiation", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AllowRenegotiation = bool(v != 0) - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxSessionKeys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxSessionKeys == nil { - m.MaxSessionKeys = &types.UInt32Value{} - } - if err := m.MaxSessionKeys.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DownstreamTlsContext) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DownstreamTlsContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DownstreamTlsContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommonTlsContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CommonTlsContext == nil { - m.CommonTlsContext = &CommonTlsContext{} - } - if err := m.CommonTlsContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequireClientCertificate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequireClientCertificate == nil { - m.RequireClientCertificate = &types.BoolValue{} - } - if err := m.RequireClientCertificate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequireSni", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequireSni == nil { - m.RequireSni = &types.BoolValue{} - } - if err := m.RequireSni.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionTicketKeys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &TlsSessionTicketKeys{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.SessionTicketKeysType = &DownstreamTlsContext_SessionTicketKeys{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionTicketKeysSdsSecretConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SdsSecretConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.SessionTicketKeysType = &DownstreamTlsContext_SessionTicketKeysSdsSecretConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SdsSecretConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SdsSecretConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SdsSecretConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SdsConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SdsConfig == nil { - m.SdsConfig = &core.ConfigSource{} - } - if err := m.SdsConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Secret) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Secret: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Secret: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsCertificate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &TlsCertificate{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Type = &Secret_TlsCertificate{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionTicketKeys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &TlsSessionTicketKeys{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Type = &Secret_SessionTicketKeys{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidationContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCert - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCert - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCert - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &CertificateValidationContext{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Type = &Secret_ValidationContext{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCert(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipCert(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCert - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCert - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCert - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthCert - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthCert - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCert - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipCert(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthCert - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthCert = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowCert = fmt.Errorf("proto: integer overflow") -) + // 1756 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x73, 0x1b, 0x49, + 0x15, 0xf7, 0x48, 0xb2, 0x22, 0x3f, 0xc5, 0xce, 0xa4, 0x63, 0xe2, 0xb1, 0xf0, 0x6e, 0xb4, 0xda, + 0xa4, 0x30, 0x45, 0x4a, 0x62, 0x9d, 0x13, 0x2c, 0x2c, 0x78, 0x94, 0x18, 0x25, 0x9b, 0x4d, 0xcc, + 0x48, 0x36, 0x9b, 0xd3, 0xd0, 0x1e, 0xb5, 0xe5, 0xc6, 0xa3, 0x99, 0xa1, 0xbb, 0x25, 0x5b, 0x55, + 0x1c, 0x5c, 0x1c, 0x97, 0x03, 0x55, 0x7b, 0xda, 0x0b, 0x37, 0x4e, 0x7c, 0x01, 0x28, 0xce, 0x1c, + 0xb8, 0xee, 0x47, 0xe0, 0xc6, 0x99, 0xa3, 0x6b, 0x0b, 0xa8, 0xee, 0x9e, 0x91, 0x47, 0x9a, 0x49, + 0xac, 0x85, 0xd4, 0xde, 0xa6, 0xfb, 0xbd, 0xf7, 0x7b, 0xfd, 0xfe, 0xbf, 0x81, 0x2d, 0x12, 0x8c, + 0xc3, 0x49, 0x0b, 0x47, 0xb4, 0x35, 0xde, 0x69, 0xe1, 0x91, 0x38, 0x69, 0x79, 0x84, 0x89, 0x66, + 0xc4, 0x42, 0x11, 0xa2, 0xdb, 0x8a, 0xda, 0xc4, 0x11, 0x6d, 0x8e, 0x77, 0x9a, 0x92, 0x5a, 0x9b, + 0x15, 0xf0, 0x42, 0x46, 0x5a, 0x47, 0x98, 0x13, 0x2d, 0x50, 0x7b, 0x90, 0xa5, 0x7a, 0x61, 0x70, + 0x4c, 0x07, 0x2e, 0x0f, 0x47, 0xcc, 0x4b, 0xd8, 0xee, 0x69, 0x36, 0x31, 0x89, 0x48, 0x6b, 0x88, + 0x85, 0x77, 0x42, 0x58, 0x8b, 0x0b, 0x46, 0x83, 0x41, 0xcc, 0xb0, 0x39, 0x08, 0xc3, 0x81, 0x4f, + 0x5a, 0xea, 0x74, 0x34, 0x3a, 0x6e, 0xe1, 0x60, 0x12, 0x93, 0xde, 0x9d, 0x27, 0xf5, 0x47, 0x0c, + 0x0b, 0x1a, 0x06, 0x31, 0x7d, 0x6b, 0x9e, 0xce, 0x05, 0x1b, 0x79, 0xe2, 0x75, 0xd2, 0x67, 0x0c, + 0x47, 0x11, 0x61, 0x3c, 0xa1, 0x8f, 0xfa, 0x11, 0x6e, 0xe1, 0x20, 0x08, 0x85, 0x02, 0xe5, 0xad, + 0x21, 0x1d, 0x30, 0x2c, 0x92, 0x97, 0xd7, 0x33, 0x74, 0x4e, 0x02, 0x4e, 0x05, 0x1d, 0x27, 0x1c, + 0xef, 0x64, 0x39, 0x04, 0x16, 0xa3, 0x44, 0xc1, 0xc6, 0x18, 0xfb, 0xb4, 0x8f, 0x05, 0x69, 0x25, + 0x1f, 0x9a, 0xd0, 0xf8, 0xa2, 0x08, 0xab, 0x3d, 0x9f, 0xef, 0x63, 0x86, 0x87, 0x44, 0x10, 0xc6, + 0xd1, 0x19, 0x6c, 0x09, 0x9f, 0xbb, 0x43, 0x1a, 0xd0, 0xe1, 0x68, 0xe8, 0x2a, 0x36, 0x2f, 0xf4, + 0xdd, 0x31, 0x61, 0x9c, 0x86, 0x81, 0x65, 0xd4, 0x8d, 0xed, 0xb5, 0x9d, 0x87, 0xcd, 0x4c, 0x90, + 0x9a, 0x33, 0x38, 0xea, 0x14, 0xcb, 0xda, 0x95, 0x4b, 0x7b, 0xf9, 0xb7, 0x46, 0xc1, 0x34, 0x9c, + 0x4d, 0xe1, 0xf3, 0x4f, 0x34, 0x74, 0x42, 0x3d, 0xd4, 0xc0, 0x53, 0xc5, 0xf8, 0x3c, 0x5f, 0x71, + 0xe1, 0xff, 0x57, 0xac, 0xa1, 0xe7, 0x15, 0xbf, 0x0f, 0xab, 0x1e, 0x8d, 0x4e, 0x08, 0x73, 0xf9, + 0x88, 0x0a, 0xc2, 0xad, 0x62, 0xbd, 0xb8, 0xbd, 0xe2, 0xdc, 0xd4, 0x97, 0x5d, 0x75, 0x87, 0xee, + 0x41, 0x95, 0x78, 0xfd, 0x13, 0xd7, 0x1b, 0xb1, 0x31, 0xe1, 0x56, 0x49, 0xb1, 0x80, 0xbc, 0x6a, + 0xab, 0x9b, 0xc6, 0x4b, 0xa8, 0xa6, 0x34, 0xa3, 0x9b, 0x50, 0xe9, 0x3d, 0xef, 0xba, 0xbb, 0x07, + 0xbd, 0x97, 0xe6, 0x12, 0xaa, 0xc2, 0x8d, 0xde, 0xf3, 0xee, 0xf8, 0x03, 0xf7, 0xfb, 0xa6, 0x71, + 0x75, 0xf8, 0xc0, 0x2c, 0x5c, 0x1d, 0x76, 0xcc, 0xe2, 0xd5, 0xe1, 0x91, 0x59, 0x6a, 0x7c, 0x69, + 0x00, 0xda, 0x67, 0x74, 0x8c, 0x05, 0xf9, 0x98, 0x4c, 0xf6, 0x59, 0x38, 0xa6, 0x7d, 0xc2, 0xd0, + 0x43, 0x58, 0x8d, 0xe2, 0x6f, 0x37, 0xc0, 0x43, 0xa2, 0x02, 0xb2, 0x62, 0xdf, 0xb8, 0xb4, 0x4b, + 0xac, 0x50, 0x37, 0x9c, 0x9b, 0x09, 0xf5, 0x05, 0x1e, 0x12, 0xf4, 0x21, 0x94, 0x75, 0x29, 0x28, + 0xf7, 0x55, 0x77, 0x36, 0x9a, 0x3a, 0x15, 0x9b, 0x49, 0x2a, 0x36, 0xbb, 0x2a, 0x51, 0xed, 0xca, + 0x5f, 0xfe, 0xfc, 0xbb, 0x3f, 0x16, 0x0c, 0xcb, 0xe8, 0x2c, 0x39, 0xb1, 0x08, 0xda, 0x85, 0x9b, + 0xb2, 0x58, 0xfa, 0x6e, 0x0c, 0x51, 0x54, 0x10, 0xeb, 0x19, 0x88, 0xdd, 0x60, 0x62, 0x97, 0xb5, + 0x7c, 0x67, 0xc9, 0xa9, 0x2a, 0x99, 0xb6, 0x12, 0xb1, 0x57, 0xa1, 0x1a, 0x97, 0xa2, 0xbc, 0x6d, + 0xfc, 0xa3, 0x08, 0x6b, 0x3d, 0x9f, 0xb7, 0x09, 0x13, 0xf4, 0x98, 0x7a, 0x58, 0x10, 0xf4, 0x0c, + 0x6e, 0x7b, 0x57, 0x47, 0xd7, 0x3b, 0xc1, 0x54, 0x27, 0x59, 0x75, 0xe7, 0x9d, 0xd9, 0x58, 0xcb, + 0xc2, 0x6e, 0x3e, 0xc6, 0x02, 0x77, 0x55, 0x55, 0x3b, 0x66, 0x4a, 0xae, 0x2d, 0xc5, 0xd0, 0x1e, + 0x54, 0x23, 0xed, 0x31, 0xf7, 0x94, 0x4c, 0x62, 0x93, 0xdf, 0x8c, 0x92, 0x3c, 0xdc, 0x81, 0x68, + 0xea, 0x6b, 0xf4, 0x0b, 0x58, 0x4f, 0xe1, 0xb8, 0x89, 0x47, 0xad, 0xb2, 0x02, 0x7c, 0x90, 0x93, + 0x82, 0xd9, 0x40, 0x39, 0x28, 0xca, 0x06, 0x6f, 0x17, 0x2a, 0x11, 0xe6, 0xfc, 0x2c, 0x64, 0xfd, + 0xd8, 0x9b, 0x0b, 0xbe, 0x6e, 0x2a, 0x86, 0x3e, 0x82, 0x6a, 0xe8, 0xf1, 0xc8, 0xe5, 0x02, 0x47, + 0x3e, 0xb1, 0x4a, 0x8b, 0x78, 0x0a, 0xa4, 0x44, 0x57, 0x09, 0x20, 0x17, 0xb6, 0x38, 0x1d, 0x04, + 0x32, 0xaa, 0x29, 0xb7, 0x0b, 0x3a, 0x24, 0x5c, 0xe0, 0x61, 0x64, 0x2d, 0xd7, 0x8b, 0xd7, 0x03, + 0xd6, 0x34, 0x44, 0x2a, 0x8e, 0xbd, 0x04, 0xa0, 0xf1, 0x0a, 0xd6, 0x7b, 0x3e, 0xef, 0x12, 0x2e, + 0x8b, 0xab, 0x47, 0xbd, 0x53, 0x22, 0x3e, 0x26, 0x13, 0x8e, 0x76, 0xa1, 0x74, 0x4a, 0x26, 0xdc, + 0x32, 0x16, 0x50, 0x60, 0xaf, 0x5d, 0xda, 0xcb, 0x9f, 0x1b, 0x85, 0x8a, 0x11, 0xdb, 0xaf, 0x44, + 0x1b, 0x5f, 0x95, 0x61, 0x2b, 0xa5, 0xf3, 0x50, 0xf7, 0x32, 0x1a, 0x06, 0xed, 0x30, 0x10, 0xe4, + 0x5c, 0xa0, 0x1f, 0x01, 0x08, 0x36, 0xe2, 0x42, 0x5a, 0x87, 0x17, 0xcb, 0xa2, 0x95, 0x58, 0xa0, + 0x8d, 0xd1, 0x1e, 0x6c, 0x8c, 0x09, 0xa3, 0xc7, 0x93, 0x19, 0xd7, 0xf0, 0xe8, 0x94, 0xea, 0x96, + 0x20, 0x5f, 0x55, 0xfd, 0xdc, 0xa8, 0x34, 0xca, 0xac, 0x54, 0x7f, 0xb8, 0xfd, 0xd0, 0xf9, 0x96, + 0x66, 0x4f, 0x3d, 0xa9, 0x1b, 0x9d, 0xd2, 0xd7, 0xe0, 0x9c, 0x60, 0x7e, 0x62, 0x15, 0x32, 0x38, + 0x3f, 0xdd, 0x76, 0x73, 0x70, 0x3a, 0x98, 0x9f, 0xa0, 0x1f, 0x4c, 0x71, 0xf8, 0xe8, 0xe8, 0x57, + 0xc4, 0x13, 0x2e, 0xf6, 0x85, 0x2e, 0x7a, 0xd5, 0x7f, 0xec, 0x82, 0x65, 0x38, 0xeb, 0x9a, 0xa5, + 0xab, 0x39, 0x76, 0x7d, 0xa1, 0xea, 0xfe, 0x53, 0xd8, 0x50, 0x23, 0x2e, 0x23, 0xc9, 0xad, 0x15, + 0xe5, 0xff, 0xf7, 0x62, 0xaf, 0xc8, 0xb2, 0x6c, 0xc6, 0xd3, 0x50, 0xf6, 0x02, 0x1a, 0x0c, 0x3e, + 0xd1, 0x27, 0x67, 0x5d, 0x5d, 0xcf, 0x02, 0x73, 0xf4, 0x0c, 0xee, 0x30, 0xf2, 0xeb, 0x11, 0x65, + 0xc4, 0x4d, 0xe7, 0xe1, 0xb2, 0xf2, 0x75, 0x2d, 0xd3, 0x1b, 0xec, 0x30, 0xf4, 0x0f, 0xb1, 0x3f, + 0x22, 0xce, 0xed, 0x58, 0xec, 0xe5, 0x55, 0x2e, 0x9e, 0xc2, 0xfd, 0x04, 0xeb, 0x8d, 0x39, 0x59, + 0xbe, 0x16, 0xfc, 0xbd, 0x18, 0xa7, 0xfb, 0xda, 0xbc, 0x44, 0x2d, 0x28, 0x7a, 0xcc, 0xb7, 0x6e, + 0x2c, 0x92, 0x14, 0x92, 0x13, 0xfd, 0x10, 0x36, 0xb1, 0xef, 0x87, 0x67, 0x2e, 0x39, 0x8f, 0x28, + 0x9b, 0x7d, 0x9c, 0x55, 0xa9, 0x1b, 0xdb, 0x15, 0x67, 0x43, 0x31, 0x3c, 0xd1, 0xf4, 0x74, 0x57, + 0xfb, 0xcc, 0x00, 0x4b, 0x25, 0x96, 0x6e, 0x68, 0xae, 0x0a, 0x92, 0x24, 0xc9, 0x49, 0x06, 0x6a, + 0x92, 0xed, 0xe5, 0xb4, 0x91, 0x37, 0x25, 0x77, 0xb3, 0x27, 0xf1, 0x54, 0xa3, 0x3b, 0x4c, 0xa1, + 0xa5, 0x66, 0xdc, 0x5d, 0x91, 0xcb, 0xd1, 0xd8, 0x83, 0xbb, 0xf9, 0xb2, 0xe8, 0x2e, 0xa0, 0xc3, + 0x27, 0xce, 0xd3, 0xbd, 0x57, 0x6e, 0xcf, 0x39, 0xe8, 0xf6, 0xdc, 0x76, 0x67, 0xf7, 0xe9, 0x0b, + 0x73, 0x09, 0xad, 0x83, 0xb9, 0xdb, 0x6e, 0x3f, 0xd9, 0xef, 0xb9, 0x07, 0x2f, 0x14, 0xe5, 0xc9, + 0x63, 0xd3, 0x68, 0xfc, 0xf3, 0x06, 0x98, 0xed, 0x70, 0x38, 0x0c, 0x03, 0xd9, 0xc3, 0xe3, 0x92, + 0xfb, 0x09, 0x80, 0x1c, 0xdb, 0x91, 0x1c, 0xc0, 0x3c, 0x2e, 0xb9, 0xfa, 0x75, 0x43, 0xda, 0x59, + 0x11, 0xf1, 0x91, 0xa3, 0xe7, 0x60, 0x4a, 0x80, 0x94, 0x73, 0xb9, 0x2a, 0x93, 0xab, 0x1c, 0x9d, + 0x83, 0x49, 0x39, 0xc9, 0xb9, 0x25, 0x66, 0xce, 0x1c, 0x9d, 0x43, 0x63, 0x0e, 0xcd, 0xe5, 0x7d, + 0xee, 0x72, 0xe2, 0x31, 0x22, 0xe2, 0x41, 0xc6, 0xad, 0xb2, 0xc2, 0x6f, 0xe4, 0xe0, 0x77, 0xfb, + 0xbc, 0xab, 0x78, 0xe3, 0x01, 0x56, 0xd1, 0x8d, 0xc8, 0x34, 0x9c, 0x77, 0x67, 0x55, 0xcd, 0x31, + 0x72, 0xf4, 0x4b, 0x40, 0xe3, 0x69, 0xcc, 0xa4, 0x26, 0xe9, 0x9e, 0xb8, 0xcb, 0xb7, 0xbe, 0x66, + 0xac, 0x3b, 0x4b, 0xce, 0xed, 0x71, 0xa6, 0xbb, 0x09, 0xb8, 0x9f, 0xd5, 0x90, 0x35, 0x2f, 0x4e, + 0xf1, 0x05, 0xac, 0xeb, 0x2c, 0x39, 0xf5, 0x8c, 0x9a, 0x39, 0x1e, 0x99, 0xca, 0xdf, 0xf6, 0xc2, + 0xe1, 0x11, 0x95, 0xf5, 0x99, 0x63, 0x61, 0x45, 0x69, 0xeb, 0xe4, 0x59, 0x38, 0x97, 0x2b, 0xf2, + 0x42, 0xc1, 0x5c, 0x63, 0xfa, 0x66, 0xa2, 0x2e, 0xdb, 0xe0, 0x1f, 0xc0, 0x1a, 0xf6, 0xa3, 0x60, + 0xba, 0x1d, 0x26, 0x9b, 0xd8, 0xaa, 0xbc, 0x4d, 0x96, 0x2f, 0x5e, 0xfb, 0x43, 0x01, 0xee, 0x2f, + 0xa2, 0x0c, 0x9d, 0x41, 0xad, 0x4f, 0x8e, 0xf1, 0xc8, 0x17, 0x79, 0xa6, 0x19, 0xff, 0x53, 0xf0, + 0x54, 0xce, 0x7c, 0xa6, 0x72, 0xc6, 0x8a, 0xc1, 0xb3, 0x8a, 0x7f, 0xb3, 0x60, 0x2c, 0x0b, 0x8b, + 0xc6, 0x32, 0xa5, 0xf5, 0xda, 0x98, 0xda, 0x9b, 0xb0, 0x91, 0xa3, 0x5d, 0xce, 0x82, 0x67, 0xa5, + 0xca, 0xb2, 0x59, 0x6e, 0x7c, 0x65, 0x00, 0x3a, 0x88, 0xb8, 0x60, 0x04, 0x0f, 0x53, 0xc5, 0xfe, + 0x73, 0x40, 0x9e, 0x0a, 0xaa, 0xab, 0x8a, 0x6c, 0xc6, 0x4d, 0xef, 0x2f, 0x90, 0x01, 0x8e, 0xe9, + 0xcd, 0xf7, 0x8f, 0x1a, 0x14, 0x79, 0x40, 0x95, 0x9d, 0x2b, 0xca, 0x06, 0x56, 0xdc, 0xfe, 0x8f, + 0xe1, 0xc8, 0x4b, 0xd4, 0x82, 0x3b, 0xba, 0x03, 0x33, 0x12, 0x90, 0x41, 0x28, 0xa8, 0xee, 0x9f, + 0x45, 0xd5, 0x7b, 0x91, 0x22, 0x39, 0x69, 0x0a, 0xda, 0x03, 0x73, 0x88, 0xcf, 0x5d, 0xae, 0x97, + 0x0f, 0x57, 0xed, 0x1b, 0x7a, 0x43, 0xda, 0xca, 0x0c, 0x8f, 0x83, 0xa7, 0x81, 0x78, 0xb4, 0xa3, + 0xc7, 0xc7, 0xda, 0x10, 0x9f, 0xc7, 0x1b, 0x8b, 0xdc, 0x55, 0x1a, 0x7f, 0x2b, 0xc1, 0xfa, 0xe3, + 0xf0, 0x2c, 0xf8, 0x26, 0x1c, 0xf0, 0x29, 0xd4, 0x92, 0x21, 0xe8, 0xf9, 0x94, 0x04, 0x62, 0x66, + 0xce, 0x14, 0xae, 0x1d, 0x7d, 0x56, 0x2c, 0xdd, 0x56, 0xc2, 0xe9, 0x21, 0xf4, 0x21, 0x54, 0xa7, + 0xe3, 0x35, 0xa0, 0x71, 0x2b, 0x7a, 0x13, 0x14, 0x24, 0x53, 0x34, 0xa0, 0xe8, 0x15, 0xdc, 0x49, + 0xdc, 0x28, 0xd4, 0x12, 0x97, 0xf6, 0xe6, 0x77, 0xf2, 0x3b, 0x73, 0x66, 0xe9, 0x93, 0x7d, 0x8c, + 0x67, 0x36, 0xc1, 0x11, 0x3c, 0xc8, 0x81, 0xce, 0x49, 0xfe, 0xe5, 0xaf, 0xd3, 0xc8, 0x32, 0x7a, + 0xe6, 0x1b, 0x59, 0x0f, 0x6e, 0x5d, 0xa9, 0x1d, 0x92, 0x70, 0x24, 0xe2, 0xc5, 0x62, 0x33, 0xe3, + 0x92, 0xc7, 0xf1, 0xdf, 0xbd, 0x6d, 0x5e, 0xda, 0xab, 0x7f, 0x32, 0xa0, 0x56, 0xae, 0x5c, 0x5c, + 0x5c, 0x5c, 0x98, 0x3b, 0x4b, 0xce, 0xda, 0x54, 0x8f, 0x82, 0xb0, 0x6b, 0x60, 0xe5, 0x19, 0xa3, + 0x7e, 0x77, 0x5e, 0xc0, 0xea, 0xcf, 0x48, 0x40, 0x18, 0xf5, 0xf4, 0x43, 0xd0, 0x8f, 0xa1, 0xac, + 0x2d, 0x5c, 0x68, 0x37, 0x9d, 0x6e, 0xff, 0xb1, 0x50, 0x83, 0xc0, 0xad, 0x79, 0xa3, 0x10, 0x94, + 0xae, 0xfe, 0x02, 0x1d, 0xf5, 0x8d, 0x3e, 0x02, 0x90, 0xbe, 0x9c, 0xe9, 0x20, 0xf7, 0x72, 0x34, + 0x69, 0x88, 0x64, 0x0f, 0xe6, 0x7d, 0xae, 0x2f, 0x1a, 0x97, 0x05, 0x28, 0xc7, 0x0f, 0xce, 0x83, + 0x7f, 0x0e, 0xb7, 0xe6, 0x46, 0x6c, 0xac, 0xe3, 0xfa, 0x79, 0xdd, 0x59, 0x72, 0xd6, 0x66, 0xc7, + 0xe8, 0xeb, 0xf2, 0xac, 0xf8, 0x16, 0xf2, 0x2c, 0x7f, 0x22, 0x97, 0xde, 0xe2, 0x44, 0x7e, 0x0a, + 0x6b, 0x03, 0x1d, 0xe0, 0x38, 0x73, 0xe3, 0x94, 0xcd, 0x5b, 0x80, 0x66, 0x32, 0xa1, 0xb3, 0xe4, + 0xac, 0x0e, 0xd2, 0x17, 0x76, 0x19, 0x4a, 0x32, 0x67, 0xec, 0xc1, 0xbf, 0xbe, 0xf8, 0xf7, 0xef, + 0x97, 0xbf, 0x87, 0xbe, 0xab, 0x11, 0xc8, 0xb9, 0x20, 0x81, 0xb4, 0x8b, 0x37, 0x05, 0xc3, 0x01, + 0x8f, 0x42, 0x26, 0x5c, 0x1e, 0x4a, 0x1b, 0x79, 0x53, 0xf8, 0xbc, 0x39, 0x7e, 0xf4, 0xd7, 0x8b, + 0xbf, 0x7f, 0x59, 0x2e, 0x98, 0x06, 0xdc, 0xa3, 0xa1, 0xd6, 0x1b, 0xb1, 0xf0, 0x7c, 0x92, 0x7d, + 0x82, 0xbd, 0x22, 0x2d, 0x54, 0x53, 0x72, 0xdf, 0x38, 0x2a, 0xab, 0x6c, 0x7f, 0xf4, 0xdf, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x09, 0x79, 0xa6, 0x61, 0x8d, 0x13, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/auth/cert.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/auth/cert.proto -package auth +package envoy_api_v2_auth import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _cert_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on TlsParameters with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -112,70 +115,162 @@ ErrorName() string } = TlsParametersValidationError{} -// Validate checks the field values on TlsCertificate with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *TlsCertificate) Validate() error { +// Validate checks the field values on PrivateKeyProvider with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PrivateKeyProvider) Validate() error { if m == nil { return nil } - { - tmp := m.GetCertificateChain() + if len(m.GetProviderName()) < 1 { + return PrivateKeyProviderValidationError{ + field: "ProviderName", + reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *PrivateKeyProvider_Config: + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return TlsCertificateValidationError{ - field: "CertificateChain", + return PrivateKeyProviderValidationError{ + field: "Config", reason: "embedded message failed validation", cause: err, } } } - } - - { - tmp := m.GetPrivateKey() - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *PrivateKeyProvider_TypedConfig: + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return TlsCertificateValidationError{ - field: "PrivateKey", + return PrivateKeyProviderValidationError{ + field: "TypedConfig", reason: "embedded message failed validation", cause: err, } } } + } - { - tmp := m.GetPassword() + return nil +} - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { +// PrivateKeyProviderValidationError is the validation error returned by +// PrivateKeyProvider.Validate if the designated constraints aren't met. +type PrivateKeyProviderValidationError struct { + field string + reason string + cause error + key bool +} - if err := v.Validate(); err != nil { - return TlsCertificateValidationError{ - field: "Password", - reason: "embedded message failed validation", - cause: err, - } +// Field function returns field value. +func (e PrivateKeyProviderValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PrivateKeyProviderValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PrivateKeyProviderValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PrivateKeyProviderValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PrivateKeyProviderValidationError) ErrorName() string { + return "PrivateKeyProviderValidationError" +} + +// Error satisfies the builtin error interface +func (e PrivateKeyProviderValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPrivateKeyProvider.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PrivateKeyProviderValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PrivateKeyProviderValidationError{} + +// Validate checks the field values on TlsCertificate with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TlsCertificate) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetCertificateChain()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsCertificateValidationError{ + field: "CertificateChain", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetOcspStaple() + if v, ok := interface{}(m.GetPrivateKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsCertificateValidationError{ + field: "PrivateKey", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetPrivateKeyProvider()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsCertificateValidationError{ + field: "PrivateKeyProvider", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetPassword()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsCertificateValidationError{ + field: "Password", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return TlsCertificateValidationError{ - field: "OcspStaple", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetOcspStaple()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsCertificateValidationError{ + field: "OcspStaple", + reason: "embedded message failed validation", + cause: err, } } } @@ -183,17 +278,12 @@ for idx, item := range m.GetSignedCertificateTimestamp() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TlsCertificateValidationError{ - field: fmt.Sprintf("SignedCertificateTimestamp[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsCertificateValidationError{ + field: fmt.Sprintf("SignedCertificateTimestamp[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -275,17 +365,12 @@ for idx, item := range m.GetKeys() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TlsSessionTicketKeysValidationError{ - field: fmt.Sprintf("Keys[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TlsSessionTicketKeysValidationError{ + field: fmt.Sprintf("Keys[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -359,17 +444,12 @@ return nil } - { - tmp := m.GetTrustedCa() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CertificateValidationContextValidationError{ - field: "TrustedCa", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTrustedCa()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CertificateValidationContextValidationError{ + field: "TrustedCa", + reason: "embedded message failed validation", + cause: err, } } } @@ -398,53 +478,60 @@ } - { - tmp := m.GetRequireOcspStaple() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetMatchSubjectAltNames() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CertificateValidationContextValidationError{ - field: "RequireOcspStaple", + field: fmt.Sprintf("MatchSubjectAltNames[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - } - - { - tmp := m.GetRequireSignedCertificateTimestamp() - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + } - if err := v.Validate(); err != nil { - return CertificateValidationContextValidationError{ - field: "RequireSignedCertificateTimestamp", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRequireOcspStaple()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CertificateValidationContextValidationError{ + field: "RequireOcspStaple", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetCrl() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetRequireSignedCertificateTimestamp()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CertificateValidationContextValidationError{ + field: "RequireSignedCertificateTimestamp", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return CertificateValidationContextValidationError{ - field: "Crl", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCrl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CertificateValidationContextValidationError{ + field: "Crl", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for AllowExpiredCertificate + if _, ok := CertificateValidationContext_TrustChainVerification_name[int32(m.GetTrustChainVerification())]; !ok { + return CertificateValidationContextValidationError{ + field: "TrustChainVerification", + reason: "value must be one of the defined enum values", + } + } + return nil } @@ -513,17 +600,12 @@ return nil } - { - tmp := m.GetTlsParams() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContextValidationError{ - field: "TlsParams", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTlsParams()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContextValidationError{ + field: "TlsParams", + reason: "embedded message failed validation", + cause: err, } } } @@ -531,17 +613,12 @@ for idx, item := range m.GetTlsCertificates() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContextValidationError{ - field: fmt.Sprintf("TlsCertificates[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContextValidationError{ + field: fmt.Sprintf("TlsCertificates[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -558,17 +635,12 @@ for idx, item := range m.GetTlsCertificateSdsSecretConfigs() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContextValidationError{ - field: fmt.Sprintf("TlsCertificateSdsSecretConfigs[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContextValidationError{ + field: fmt.Sprintf("TlsCertificateSdsSecretConfigs[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -579,51 +651,36 @@ case *CommonTlsContext_ValidationContext: - { - tmp := m.GetValidationContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContextValidationError{ - field: "ValidationContext", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetValidationContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContextValidationError{ + field: "ValidationContext", + reason: "embedded message failed validation", + cause: err, } } } case *CommonTlsContext_ValidationContextSdsSecretConfig: - { - tmp := m.GetValidationContextSdsSecretConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContextValidationError{ - field: "ValidationContextSdsSecretConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetValidationContextSdsSecretConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContextValidationError{ + field: "ValidationContextSdsSecretConfig", + reason: "embedded message failed validation", + cause: err, } } } case *CommonTlsContext_CombinedValidationContext: - { - tmp := m.GetCombinedValidationContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContextValidationError{ - field: "CombinedValidationContext", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCombinedValidationContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContextValidationError{ + field: "CombinedValidationContext", + reason: "embedded message failed validation", + cause: err, } } } @@ -695,17 +752,12 @@ return nil } - { - tmp := m.GetCommonTlsContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamTlsContextValidationError{ - field: "CommonTlsContext", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCommonTlsContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamTlsContextValidationError{ + field: "CommonTlsContext", + reason: "embedded message failed validation", + cause: err, } } } @@ -719,17 +771,12 @@ // no validation rules for AllowRenegotiation - { - tmp := m.GetMaxSessionKeys() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamTlsContextValidationError{ - field: "MaxSessionKeys", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMaxSessionKeys()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamTlsContextValidationError{ + field: "MaxSessionKeys", + reason: "embedded message failed validation", + cause: err, } } } @@ -801,83 +848,80 @@ return nil } - { - tmp := m.GetCommonTlsContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DownstreamTlsContextValidationError{ - field: "CommonTlsContext", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCommonTlsContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownstreamTlsContextValidationError{ + field: "CommonTlsContext", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetRequireClientCertificate() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetRequireClientCertificate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownstreamTlsContextValidationError{ + field: "RequireClientCertificate", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return DownstreamTlsContextValidationError{ - field: "RequireClientCertificate", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRequireSni()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownstreamTlsContextValidationError{ + field: "RequireSni", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetRequireSni() + if d := m.GetSessionTimeout(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return DownstreamTlsContextValidationError{ + field: "SessionTimeout", + reason: "value is not a valid duration", + cause: err, + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + lt := time.Duration(4294967296*time.Second + 0*time.Nanosecond) + gte := time.Duration(0*time.Second + 0*time.Nanosecond) - if err := v.Validate(); err != nil { - return DownstreamTlsContextValidationError{ - field: "RequireSni", - reason: "embedded message failed validation", - cause: err, - } + if dur < gte || dur >= lt { + return DownstreamTlsContextValidationError{ + field: "SessionTimeout", + reason: "value must be inside range [0s, 1193046h28m16s)", } } + } switch m.SessionTicketKeysType.(type) { case *DownstreamTlsContext_SessionTicketKeys: - { - tmp := m.GetSessionTicketKeys() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DownstreamTlsContextValidationError{ - field: "SessionTicketKeys", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSessionTicketKeys()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownstreamTlsContextValidationError{ + field: "SessionTicketKeys", + reason: "embedded message failed validation", + cause: err, } } } case *DownstreamTlsContext_SessionTicketKeysSdsSecretConfig: - { - tmp := m.GetSessionTicketKeysSdsSecretConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DownstreamTlsContextValidationError{ - field: "SessionTicketKeysSdsSecretConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSessionTicketKeysSdsSecretConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DownstreamTlsContextValidationError{ + field: "SessionTicketKeysSdsSecretConfig", + reason: "embedded message failed validation", + cause: err, } } } @@ -943,6 +987,81 @@ ErrorName() string } = DownstreamTlsContextValidationError{} +// Validate checks the field values on GenericSecret with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *GenericSecret) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetSecret()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GenericSecretValidationError{ + field: "Secret", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// GenericSecretValidationError is the validation error returned by +// GenericSecret.Validate if the designated constraints aren't met. +type GenericSecretValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GenericSecretValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GenericSecretValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GenericSecretValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GenericSecretValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GenericSecretValidationError) ErrorName() string { return "GenericSecretValidationError" } + +// Error satisfies the builtin error interface +func (e GenericSecretValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGenericSecret.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GenericSecretValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GenericSecretValidationError{} + // Validate checks the field values on SdsSecretConfig with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -953,17 +1072,12 @@ // no validation rules for Name - { - tmp := m.GetSdsConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return SdsSecretConfigValidationError{ - field: "SdsConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSdsConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SdsSecretConfigValidationError{ + field: "SdsConfig", + reason: "embedded message failed validation", + cause: err, } } } @@ -1038,51 +1152,48 @@ case *Secret_TlsCertificate: - { - tmp := m.GetTlsCertificate() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return SecretValidationError{ - field: "TlsCertificate", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTlsCertificate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SecretValidationError{ + field: "TlsCertificate", + reason: "embedded message failed validation", + cause: err, } } } case *Secret_SessionTicketKeys: - { - tmp := m.GetSessionTicketKeys() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return SecretValidationError{ - field: "SessionTicketKeys", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSessionTicketKeys()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SecretValidationError{ + field: "SessionTicketKeys", + reason: "embedded message failed validation", + cause: err, } } } case *Secret_ValidationContext: - { - tmp := m.GetValidationContext() + if v, ok := interface{}(m.GetValidationContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SecretValidationError{ + field: "ValidationContext", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *Secret_GenericSecret: - if err := v.Validate(); err != nil { - return SecretValidationError{ - field: "ValidationContext", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGenericSecret()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SecretValidationError{ + field: "GenericSecret", + reason: "embedded message failed validation", + cause: err, } } } @@ -1162,17 +1273,12 @@ } } - { - tmp := m.GetDefaultValidationContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContext_CombinedCertificateValidationContextValidationError{ - field: "DefaultValidationContext", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDefaultValidationContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContext_CombinedCertificateValidationContextValidationError{ + field: "DefaultValidationContext", + reason: "embedded message failed validation", + cause: err, } } } @@ -1184,17 +1290,12 @@ } } - { - tmp := m.GetValidationContextSdsSecretConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CommonTlsContext_CombinedCertificateValidationContextValidationError{ - field: "ValidationContextSdsSecretConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetValidationContextSdsSecretConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CommonTlsContext_CombinedCertificateValidationContextValidationError{ + field: "ValidationContextSdsSecretConfig", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7292 +1,309 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/cds.proto -package v2 +package envoy_api_v2 import ( - bytes "bytes" context "context" fmt "fmt" - io "io" - math "math" - time "time" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/googleapis/google/api" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" - - auth "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" - cluster "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster" - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - _type "github.com/envoyproxy/go-control-plane/envoy/type" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -// Refer to :ref:`service discovery type ` -// for an explanation on each type. -type Cluster_DiscoveryType int32 - -const ( - // Refer to the :ref:`static discovery type` - // for an explanation. - Cluster_STATIC Cluster_DiscoveryType = 0 - // Refer to the :ref:`strict DNS discovery - // type` - // for an explanation. - Cluster_STRICT_DNS Cluster_DiscoveryType = 1 - // Refer to the :ref:`logical DNS discovery - // type` - // for an explanation. - Cluster_LOGICAL_DNS Cluster_DiscoveryType = 2 - // Refer to the :ref:`service discovery type` - // for an explanation. - Cluster_EDS Cluster_DiscoveryType = 3 - // Refer to the :ref:`original destination discovery - // type` - // for an explanation. - Cluster_ORIGINAL_DST Cluster_DiscoveryType = 4 -) - -var Cluster_DiscoveryType_name = map[int32]string{ - 0: "STATIC", - 1: "STRICT_DNS", - 2: "LOGICAL_DNS", - 3: "EDS", - 4: "ORIGINAL_DST", -} - -var Cluster_DiscoveryType_value = map[string]int32{ - "STATIC": 0, - "STRICT_DNS": 1, - "LOGICAL_DNS": 2, - "EDS": 3, - "ORIGINAL_DST": 4, -} - -func (x Cluster_DiscoveryType) String() string { - return proto.EnumName(Cluster_DiscoveryType_name, int32(x)) -} - -func (Cluster_DiscoveryType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 0} -} - -// Refer to :ref:`load balancer type ` architecture -// overview section for information on each type. -type Cluster_LbPolicy int32 - -const ( - // Refer to the :ref:`round robin load balancing - // policy` - // for an explanation. - Cluster_ROUND_ROBIN Cluster_LbPolicy = 0 - // Refer to the :ref:`least request load balancing - // policy` - // for an explanation. - Cluster_LEAST_REQUEST Cluster_LbPolicy = 1 - // Refer to the :ref:`ring hash load balancing - // policy` - // for an explanation. - Cluster_RING_HASH Cluster_LbPolicy = 2 - // Refer to the :ref:`random load balancing - // policy` - // for an explanation. - Cluster_RANDOM Cluster_LbPolicy = 3 - // Refer to the :ref:`original destination load balancing - // policy` - // for an explanation. - Cluster_ORIGINAL_DST_LB Cluster_LbPolicy = 4 - // Refer to the :ref:`Maglev load balancing policy` - // for an explanation. - Cluster_MAGLEV Cluster_LbPolicy = 5 -) - -var Cluster_LbPolicy_name = map[int32]string{ - 0: "ROUND_ROBIN", - 1: "LEAST_REQUEST", - 2: "RING_HASH", - 3: "RANDOM", - 4: "ORIGINAL_DST_LB", - 5: "MAGLEV", -} - -var Cluster_LbPolicy_value = map[string]int32{ - "ROUND_ROBIN": 0, - "LEAST_REQUEST": 1, - "RING_HASH": 2, - "RANDOM": 3, - "ORIGINAL_DST_LB": 4, - "MAGLEV": 5, -} - -func (x Cluster_LbPolicy) String() string { - return proto.EnumName(Cluster_LbPolicy_name, int32(x)) -} - -func (Cluster_LbPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 1} -} - -// When V4_ONLY is selected, the DNS resolver will only perform a lookup for -// addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will -// only perform a lookup for addresses in the IPv6 family. If AUTO is -// specified, the DNS resolver will first perform a lookup for addresses in -// the IPv6 family and fallback to a lookup for addresses in the IPv4 family. -// For cluster types other than -// :ref:`STRICT_DNS` and -// :ref:`LOGICAL_DNS`, -// this setting is -// ignored. -type Cluster_DnsLookupFamily int32 - -const ( - Cluster_AUTO Cluster_DnsLookupFamily = 0 - Cluster_V4_ONLY Cluster_DnsLookupFamily = 1 - Cluster_V6_ONLY Cluster_DnsLookupFamily = 2 -) - -var Cluster_DnsLookupFamily_name = map[int32]string{ - 0: "AUTO", - 1: "V4_ONLY", - 2: "V6_ONLY", -} - -var Cluster_DnsLookupFamily_value = map[string]int32{ - "AUTO": 0, - "V4_ONLY": 1, - "V6_ONLY": 2, -} - -func (x Cluster_DnsLookupFamily) String() string { - return proto.EnumName(Cluster_DnsLookupFamily_name, int32(x)) -} - -func (Cluster_DnsLookupFamily) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 2} -} - -type Cluster_ClusterProtocolSelection int32 - -const ( - // Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2). - // If :ref:`http2_protocol_options ` are - // present, HTTP2 will be used, otherwise HTTP1.1 will be used. - Cluster_USE_CONFIGURED_PROTOCOL Cluster_ClusterProtocolSelection = 0 - // Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection. - Cluster_USE_DOWNSTREAM_PROTOCOL Cluster_ClusterProtocolSelection = 1 -) - -var Cluster_ClusterProtocolSelection_name = map[int32]string{ - 0: "USE_CONFIGURED_PROTOCOL", - 1: "USE_DOWNSTREAM_PROTOCOL", -} - -var Cluster_ClusterProtocolSelection_value = map[string]int32{ - "USE_CONFIGURED_PROTOCOL": 0, - "USE_DOWNSTREAM_PROTOCOL": 1, -} - -func (x Cluster_ClusterProtocolSelection) String() string { - return proto.EnumName(Cluster_ClusterProtocolSelection_name, int32(x)) -} - -func (Cluster_ClusterProtocolSelection) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 3} -} - -// If NO_FALLBACK is selected, a result -// equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected, -// any cluster endpoint may be returned (subject to policy, health checks, -// etc). If DEFAULT_SUBSET is selected, load balancing is performed over the -// endpoints matching the values from the default_subset field. -type Cluster_LbSubsetConfig_LbSubsetFallbackPolicy int32 - -const ( - Cluster_LbSubsetConfig_NO_FALLBACK Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 0 - Cluster_LbSubsetConfig_ANY_ENDPOINT Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 1 - Cluster_LbSubsetConfig_DEFAULT_SUBSET Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 2 -) +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -var Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name = map[int32]string{ - 0: "NO_FALLBACK", - 1: "ANY_ENDPOINT", - 2: "DEFAULT_SUBSET", -} - -var Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value = map[string]int32{ - "NO_FALLBACK": 0, - "ANY_ENDPOINT": 1, - "DEFAULT_SUBSET": 2, -} - -func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) String() string { - return proto.EnumName(Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, int32(x)) -} - -func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 4, 0} +type CdsDummy struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -// The hash function used to hash hosts onto the ketama ring. -type Cluster_RingHashLbConfig_HashFunction int32 - -const ( - // Use `xxHash `_, this is the default hash function. - Cluster_RingHashLbConfig_XX_HASH Cluster_RingHashLbConfig_HashFunction = 0 - // Use `MurmurHash2 `_, this is compatible with - // std:hash in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled - // on Linux and not macOS. - Cluster_RingHashLbConfig_MURMUR_HASH_2 Cluster_RingHashLbConfig_HashFunction = 1 -) - -var Cluster_RingHashLbConfig_HashFunction_name = map[int32]string{ - 0: "XX_HASH", - 1: "MURMUR_HASH_2", -} - -var Cluster_RingHashLbConfig_HashFunction_value = map[string]int32{ - "XX_HASH": 0, - "MURMUR_HASH_2": 1, -} - -func (x Cluster_RingHashLbConfig_HashFunction) String() string { - return proto.EnumName(Cluster_RingHashLbConfig_HashFunction_name, int32(x)) -} - -func (Cluster_RingHashLbConfig_HashFunction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 6, 0} -} - -// Configuration for a single upstream cluster. -// [#comment:next free field: 39] -type Cluster struct { - // Supplies the name of the cluster which must be unique across all clusters. - // The cluster name is used when emitting - // :ref:`statistics ` if :ref:`alt_stat_name - // ` is not provided. - // Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics. - // By default, the maximum length of a cluster name is limited to 60 - // characters. This limit can be increased by setting the - // :option:`--max-obj-name-len` command line argument to the desired value. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // An optional alternative to the cluster name to be used while emitting stats. - // Any ``:`` in the name will be converted to ``_`` when emitting statistics. This should not be - // confused with :ref:`Router Filter Header - // `. - AltStatName string `protobuf:"bytes,28,opt,name=alt_stat_name,json=altStatName,proto3" json:"alt_stat_name,omitempty"` - // Types that are valid to be assigned to ClusterDiscoveryType: - // *Cluster_Type - // *Cluster_ClusterType - ClusterDiscoveryType isCluster_ClusterDiscoveryType `protobuf_oneof:"cluster_discovery_type"` - // Configuration to use for EDS updates for the Cluster. - EdsClusterConfig *Cluster_EdsClusterConfig `protobuf:"bytes,3,opt,name=eds_cluster_config,json=edsClusterConfig,proto3" json:"eds_cluster_config,omitempty"` - // The timeout for new network connections to hosts in the cluster. - ConnectTimeout time.Duration `protobuf:"bytes,4,opt,name=connect_timeout,json=connectTimeout,proto3,stdduration" json:"connect_timeout"` - // Soft limit on size of the cluster’s connections read and write buffers. If - // unspecified, an implementation defined default is applied (1MiB). - PerConnectionBufferLimitBytes *types.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"` - // The :ref:`load balancer type ` to use - // when picking a host in the cluster. - LbPolicy Cluster_LbPolicy `protobuf:"varint,6,opt,name=lb_policy,json=lbPolicy,proto3,enum=envoy.api.v2.Cluster_LbPolicy" json:"lb_policy,omitempty"` - // If the service discovery type is - // :ref:`STATIC`, - // :ref:`STRICT_DNS` - // or :ref:`LOGICAL_DNS`, - // then hosts is required. - // - // .. attention:: - // - // **This field is deprecated**. Set the - // :ref:`load_assignment` field instead. - // - Hosts []*core.Address `protobuf:"bytes,7,rep,name=hosts,proto3" json:"hosts,omitempty"` // Deprecated: Do not use. - // Setting this is required for specifying members of - // :ref:`STATIC`, - // :ref:`STRICT_DNS` - // or :ref:`LOGICAL_DNS` clusters. - // This field supersedes :ref:`hosts` field. - // [#comment:TODO(dio): Deprecate the hosts field and add it to :ref:`deprecated log` - // once load_assignment is implemented.] - // - // .. attention:: - // - // Setting this allows non-EDS cluster types to contain embedded EDS equivalent - // :ref:`endpoint assignments`. - // Setting this overrides :ref:`hosts` values. - // - LoadAssignment *ClusterLoadAssignment `protobuf:"bytes,33,opt,name=load_assignment,json=loadAssignment,proto3" json:"load_assignment,omitempty"` - // Optional :ref:`active health checking ` - // configuration for the cluster. If no - // configuration is specified no health checking will be done and all cluster - // members will be considered healthy at all times. - HealthChecks []*core.HealthCheck `protobuf:"bytes,8,rep,name=health_checks,json=healthChecks,proto3" json:"health_checks,omitempty"` - // Optional maximum requests for a single upstream connection. This parameter - // is respected by both the HTTP/1.1 and HTTP/2 connection pool - // implementations. If not specified, there is no limit. Setting this - // parameter to 1 will effectively disable keep alive. - MaxRequestsPerConnection *types.UInt32Value `protobuf:"bytes,9,opt,name=max_requests_per_connection,json=maxRequestsPerConnection,proto3" json:"max_requests_per_connection,omitempty"` - // Optional :ref:`circuit breaking ` for the cluster. - CircuitBreakers *cluster.CircuitBreakers `protobuf:"bytes,10,opt,name=circuit_breakers,json=circuitBreakers,proto3" json:"circuit_breakers,omitempty"` - // The TLS configuration for connections to the upstream cluster. If no TLS - // configuration is specified, TLS will not be used for new connections. - // - // .. attention:: - // - // Server certificate verification is not enabled by default. Configure - // :ref:`trusted_ca` to enable - // verification. - TlsContext *auth.UpstreamTlsContext `protobuf:"bytes,11,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` - // Additional options when handling HTTP requests. These options will be applicable to both - // HTTP1 and HTTP2 requests. - CommonHttpProtocolOptions *core.HttpProtocolOptions `protobuf:"bytes,29,opt,name=common_http_protocol_options,json=commonHttpProtocolOptions,proto3" json:"common_http_protocol_options,omitempty"` - // Additional options when handling HTTP1 requests. - HttpProtocolOptions *core.Http1ProtocolOptions `protobuf:"bytes,13,opt,name=http_protocol_options,json=httpProtocolOptions,proto3" json:"http_protocol_options,omitempty"` - // Even if default HTTP2 protocol options are desired, this field must be - // set so that Envoy will assume that the upstream supports HTTP/2 when - // making new HTTP connection pool connections. Currently, Envoy only - // supports prior knowledge for upstream connections. Even if TLS is used - // with ALPN, `http2_protocol_options` must be specified. As an aside this allows HTTP/2 - // connections to happen over plain text. - Http2ProtocolOptions *core.Http2ProtocolOptions `protobuf:"bytes,14,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"` - // The extension_protocol_options field is used to provide extension-specific protocol options - // for upstream connections. The key should match the extension filter name, such as - // "envoy.filters.network.thrift_proxy". See the extension's documentation for details on - // specific options. - ExtensionProtocolOptions map[string]*types.Struct `protobuf:"bytes,35,rep,name=extension_protocol_options,json=extensionProtocolOptions,proto3" json:"extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The extension_protocol_options field is used to provide extension-specific protocol options - // for upstream connections. The key should match the extension filter name, such as - // "envoy.filters.network.thrift_proxy". See the extension's documentation for details on - // specific options. - TypedExtensionProtocolOptions map[string]*types.Any `protobuf:"bytes,36,rep,name=typed_extension_protocol_options,json=typedExtensionProtocolOptions,proto3" json:"typed_extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // If the DNS refresh rate is specified and the cluster type is either - // :ref:`STRICT_DNS`, - // or :ref:`LOGICAL_DNS`, - // this value is used as the cluster’s DNS refresh - // rate. If this setting is not specified, the value defaults to 5000ms. For - // cluster types other than - // :ref:`STRICT_DNS` - // and :ref:`LOGICAL_DNS` - // this setting is ignored. - DnsRefreshRate *time.Duration `protobuf:"bytes,16,opt,name=dns_refresh_rate,json=dnsRefreshRate,proto3,stdduration" json:"dns_refresh_rate,omitempty"` - // The DNS IP address resolution policy. If this setting is not specified, the - // value defaults to - // :ref:`AUTO`. - DnsLookupFamily Cluster_DnsLookupFamily `protobuf:"varint,17,opt,name=dns_lookup_family,json=dnsLookupFamily,proto3,enum=envoy.api.v2.Cluster_DnsLookupFamily" json:"dns_lookup_family,omitempty"` - // If DNS resolvers are specified and the cluster type is either - // :ref:`STRICT_DNS`, - // or :ref:`LOGICAL_DNS`, - // this value is used to specify the cluster’s dns resolvers. - // If this setting is not specified, the value defaults to the default - // resolver, which uses /etc/resolv.conf for configuration. For cluster types - // other than - // :ref:`STRICT_DNS` - // and :ref:`LOGICAL_DNS` - // this setting is ignored. - DnsResolvers []*core.Address `protobuf:"bytes,18,rep,name=dns_resolvers,json=dnsResolvers,proto3" json:"dns_resolvers,omitempty"` - // If specified, outlier detection will be enabled for this upstream cluster. - // Each of the configuration values can be overridden via - // :ref:`runtime values `. - OutlierDetection *cluster.OutlierDetection `protobuf:"bytes,19,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"` - // The interval for removing stale hosts from a cluster type - // :ref:`ORIGINAL_DST`. - // Hosts are considered stale if they have not been used - // as upstream destinations during this interval. New hosts are added - // to original destination clusters on demand as new connections are - // redirected to Envoy, causing the number of hosts in the cluster to - // grow over time. Hosts that are not stale (they are actively used as - // destinations) are kept in the cluster, which allows connections to - // them remain open, saving the latency that would otherwise be spent - // on opening new connections. If this setting is not specified, the - // value defaults to 5000ms. For cluster types other than - // :ref:`ORIGINAL_DST` - // this setting is ignored. - CleanupInterval *time.Duration `protobuf:"bytes,20,opt,name=cleanup_interval,json=cleanupInterval,proto3,stdduration" json:"cleanup_interval,omitempty"` - // Optional configuration used to bind newly established upstream connections. - // This overrides any bind_config specified in the bootstrap proto. - // If the address and port are empty, no bind will be performed. - UpstreamBindConfig *core.BindConfig `protobuf:"bytes,21,opt,name=upstream_bind_config,json=upstreamBindConfig,proto3" json:"upstream_bind_config,omitempty"` - // Configuration for load balancing subsetting. - LbSubsetConfig *Cluster_LbSubsetConfig `protobuf:"bytes,22,opt,name=lb_subset_config,json=lbSubsetConfig,proto3" json:"lb_subset_config,omitempty"` - // Optional configuration for the load balancing algorithm selected by - // LbPolicy. Currently only - // :ref:`RING_HASH` and - // :ref:`LEAST_REQUEST` - // has additional configuration options. - // Specifying ring_hash_lb_config or least_request_lb_config without setting the corresponding - // LbPolicy will generate an error at runtime. - // - // Types that are valid to be assigned to LbConfig: - // *Cluster_RingHashLbConfig_ - // *Cluster_OriginalDstLbConfig_ - // *Cluster_LeastRequestLbConfig_ - LbConfig isCluster_LbConfig `protobuf_oneof:"lb_config"` - // Common configuration for all load balancer implementations. - CommonLbConfig *Cluster_CommonLbConfig `protobuf:"bytes,27,opt,name=common_lb_config,json=commonLbConfig,proto3" json:"common_lb_config,omitempty"` - // Optional custom transport socket implementation to use for upstream connections. - TransportSocket *core.TransportSocket `protobuf:"bytes,24,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"` - // The Metadata field can be used to provide additional information about the - // cluster. It can be used for stats, logging, and varying filter behavior. - // Fields should use reverse DNS notation to denote which entity within Envoy - // will need the information. For instance, if the metadata is intended for - // the Router filter, the filter name should be specified as *envoy.router*. - Metadata *core.Metadata `protobuf:"bytes,25,opt,name=metadata,proto3" json:"metadata,omitempty"` - // Determines how Envoy selects the protocol used to speak to upstream hosts. - ProtocolSelection Cluster_ClusterProtocolSelection `protobuf:"varint,26,opt,name=protocol_selection,json=protocolSelection,proto3,enum=envoy.api.v2.Cluster_ClusterProtocolSelection" json:"protocol_selection,omitempty"` - // Optional options for upstream connections. - UpstreamConnectionOptions *UpstreamConnectionOptions `protobuf:"bytes,30,opt,name=upstream_connection_options,json=upstreamConnectionOptions,proto3" json:"upstream_connection_options,omitempty"` - // If an upstream host becomes unhealthy (as determined by the configured health checks - // or outlier detection), immediately close all connections to the failed host. - // - // .. note:: - // - // This is currently only supported for connections created by tcp_proxy. - // - // .. note:: - // - // The current implementation of this feature closes all connections immediately when - // the unhealthy status is detected. If there are a large number of connections open - // to an upstream host that becomes unhealthy, Envoy may spend a substantial amount of - // time exclusively closing these connections, and not processing any other traffic. - CloseConnectionsOnHostHealthFailure bool `protobuf:"varint,31,opt,name=close_connections_on_host_health_failure,json=closeConnectionsOnHostHealthFailure,proto3" json:"close_connections_on_host_health_failure,omitempty"` - // If this cluster uses EDS or STRICT_DNS to configure its hosts, immediately drain - // connections from any hosts that are removed from service discovery. - // - // This only affects behavior for hosts that are being actively health checked. - // If this flag is not set to true, Envoy will wait until the hosts fail active health - // checking before removing it from the cluster. - DrainConnectionsOnHostRemoval bool `protobuf:"varint,32,opt,name=drain_connections_on_host_removal,json=drainConnectionsOnHostRemoval,proto3" json:"drain_connections_on_host_removal,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster) Reset() { *m = Cluster{} } -func (m *Cluster) String() string { return proto.CompactTextString(m) } -func (*Cluster) ProtoMessage() {} -func (*Cluster) Descriptor() ([]byte, []int) { +func (m *CdsDummy) Reset() { *m = CdsDummy{} } +func (m *CdsDummy) String() string { return proto.CompactTextString(m) } +func (*CdsDummy) ProtoMessage() {} +func (*CdsDummy) Descriptor() ([]byte, []int) { return fileDescriptor_e73f50fbb1daa302, []int{0} } -func (m *Cluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster.Merge(m, src) -} -func (m *Cluster) XXX_Size() int { - return m.Size() -} -func (m *Cluster) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster proto.InternalMessageInfo - -type isCluster_ClusterDiscoveryType interface { - isCluster_ClusterDiscoveryType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} -type isCluster_LbConfig interface { - isCluster_LbConfig() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type Cluster_Type struct { - Type Cluster_DiscoveryType `protobuf:"varint,2,opt,name=type,proto3,enum=envoy.api.v2.Cluster_DiscoveryType,oneof"` -} -type Cluster_ClusterType struct { - ClusterType *Cluster_CustomClusterType `protobuf:"bytes,38,opt,name=cluster_type,json=clusterType,proto3,oneof"` -} -type Cluster_RingHashLbConfig_ struct { - RingHashLbConfig *Cluster_RingHashLbConfig `protobuf:"bytes,23,opt,name=ring_hash_lb_config,json=ringHashLbConfig,proto3,oneof"` -} -type Cluster_OriginalDstLbConfig_ struct { - OriginalDstLbConfig *Cluster_OriginalDstLbConfig `protobuf:"bytes,34,opt,name=original_dst_lb_config,json=originalDstLbConfig,proto3,oneof"` -} -type Cluster_LeastRequestLbConfig_ struct { - LeastRequestLbConfig *Cluster_LeastRequestLbConfig `protobuf:"bytes,37,opt,name=least_request_lb_config,json=leastRequestLbConfig,proto3,oneof"` -} - -func (*Cluster_Type) isCluster_ClusterDiscoveryType() {} -func (*Cluster_ClusterType) isCluster_ClusterDiscoveryType() {} -func (*Cluster_RingHashLbConfig_) isCluster_LbConfig() {} -func (*Cluster_OriginalDstLbConfig_) isCluster_LbConfig() {} -func (*Cluster_LeastRequestLbConfig_) isCluster_LbConfig() {} - -func (m *Cluster) GetClusterDiscoveryType() isCluster_ClusterDiscoveryType { - if m != nil { - return m.ClusterDiscoveryType - } - return nil -} -func (m *Cluster) GetLbConfig() isCluster_LbConfig { - if m != nil { - return m.LbConfig - } - return nil -} -func (m *Cluster) GetName() string { - if m != nil { - return m.Name - } - return "" +func (m *CdsDummy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CdsDummy.Unmarshal(m, b) } - -func (m *Cluster) GetAltStatName() string { - if m != nil { - return m.AltStatName - } - return "" +func (m *CdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CdsDummy.Marshal(b, m, deterministic) } - -func (m *Cluster) GetType() Cluster_DiscoveryType { - if x, ok := m.GetClusterDiscoveryType().(*Cluster_Type); ok { - return x.Type - } - return Cluster_STATIC +func (m *CdsDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_CdsDummy.Merge(m, src) } - -func (m *Cluster) GetClusterType() *Cluster_CustomClusterType { - if x, ok := m.GetClusterDiscoveryType().(*Cluster_ClusterType); ok { - return x.ClusterType - } - return nil +func (m *CdsDummy) XXX_Size() int { + return xxx_messageInfo_CdsDummy.Size(m) } - -func (m *Cluster) GetEdsClusterConfig() *Cluster_EdsClusterConfig { - if m != nil { - return m.EdsClusterConfig - } - return nil +func (m *CdsDummy) XXX_DiscardUnknown() { + xxx_messageInfo_CdsDummy.DiscardUnknown(m) } -func (m *Cluster) GetConnectTimeout() time.Duration { - if m != nil { - return m.ConnectTimeout - } - return 0 -} +var xxx_messageInfo_CdsDummy proto.InternalMessageInfo -func (m *Cluster) GetPerConnectionBufferLimitBytes() *types.UInt32Value { - if m != nil { - return m.PerConnectionBufferLimitBytes - } - return nil +func init() { + proto.RegisterType((*CdsDummy)(nil), "envoy.api.v2.CdsDummy") } -func (m *Cluster) GetLbPolicy() Cluster_LbPolicy { - if m != nil { - return m.LbPolicy - } - return Cluster_ROUND_ROBIN -} +func init() { proto.RegisterFile("envoy/api/v2/cds.proto", fileDescriptor_e73f50fbb1daa302) } -// Deprecated: Do not use. -func (m *Cluster) GetHosts() []*core.Address { - if m != nil { - return m.Hosts - } - return nil +var fileDescriptor_e73f50fbb1daa302 = []byte{ + // 358 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0x4f, 0x4e, 0x29, 0xd6, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0xe2, 0x01, 0x8b, 0xeb, 0x25, 0x16, 0x64, 0xea, 0x95, 0x19, 0x49, 0xc9, 0xa0, + 0xa8, 0x4a, 0xc9, 0x2c, 0x4e, 0xce, 0x2f, 0x4b, 0x2d, 0xaa, 0x84, 0xa8, 0x95, 0x92, 0x49, 0xcf, + 0xcf, 0x4f, 0xcf, 0x49, 0x05, 0x4b, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, 0x96, 0x64, 0xe6, 0xe7, + 0x41, 0x4d, 0x92, 0x52, 0x80, 0xea, 0x45, 0x48, 0xe8, 0x17, 0xa5, 0x16, 0xe7, 0x97, 0x16, 0x25, + 0xa7, 0x42, 0x55, 0xc8, 0x95, 0xa6, 0x14, 0x24, 0xa2, 0x28, 0xc8, 0xcd, 0x4c, 0x2f, 0x4a, 0x2c, + 0x81, 0xc9, 0xcb, 0x62, 0xc8, 0x17, 0x97, 0x24, 0x96, 0x94, 0xc2, 0x2c, 0x90, 0x42, 0xf5, 0x42, + 0x4e, 0x69, 0x71, 0x49, 0x6a, 0x11, 0x44, 0x4e, 0x89, 0x8b, 0x8b, 0xc3, 0x39, 0xa5, 0xd8, 0xa5, + 0x34, 0x37, 0xb7, 0xd2, 0xe8, 0x2d, 0x13, 0x97, 0xb8, 0x33, 0x44, 0xd6, 0x05, 0xe6, 0x83, 0xe0, + 0xd4, 0xa2, 0xb2, 0xcc, 0xe4, 0x54, 0xa1, 0x70, 0x2e, 0xbe, 0xe0, 0x92, 0xa2, 0xd4, 0xc4, 0x5c, + 0xa8, 0x82, 0x62, 0x21, 0x39, 0x3d, 0xe4, 0x10, 0xd0, 0x83, 0xeb, 0x08, 0x4a, 0x2d, 0x2c, 0x4d, + 0x2d, 0x2e, 0x91, 0x92, 0xc7, 0x29, 0x5f, 0x5c, 0x90, 0x9f, 0x57, 0x9c, 0xaa, 0xc4, 0xa0, 0xc1, + 0x68, 0xc0, 0x28, 0x94, 0xc0, 0xc5, 0xeb, 0x92, 0x9a, 0x53, 0x92, 0x08, 0x37, 0x57, 0x19, 0x4d, + 0x1f, 0x48, 0x12, 0xc3, 0x70, 0x15, 0xfc, 0x8a, 0x50, 0x6c, 0xa8, 0xe4, 0xe2, 0x75, 0x4b, 0x2d, + 0x49, 0xce, 0xa0, 0x9e, 0xcb, 0xd5, 0x9b, 0x2e, 0x3f, 0x99, 0xcc, 0x24, 0xa1, 0x24, 0x86, 0x12, + 0xd9, 0x56, 0xd0, 0x90, 0x2d, 0x06, 0xcb, 0x32, 0x5b, 0x31, 0x6a, 0x49, 0xc9, 0x74, 0x2d, 0x99, + 0xf6, 0x99, 0x5d, 0x8c, 0x4b, 0x04, 0xc5, 0x40, 0xa8, 0x43, 0x9c, 0x82, 0x3f, 0xcd, 0xf8, 0xd7, + 0xcf, 0x2a, 0x25, 0x24, 0x01, 0x91, 0x2d, 0x86, 0x04, 0xb5, 0x1e, 0x2c, 0x82, 0xca, 0x8c, 0x77, + 0x35, 0x9c, 0xb8, 0xc8, 0xc6, 0x24, 0xc0, 0xc8, 0x25, 0x95, 0x99, 0x0f, 0x71, 0x53, 0x41, 0x51, + 0x7e, 0x45, 0x25, 0x8a, 0xf3, 0x9c, 0x40, 0xf1, 0x17, 0x00, 0x8a, 0xcb, 0x00, 0xc6, 0x0e, 0x46, + 0xc6, 0x00, 0xd6, 0x24, 0x36, 0x70, 0xcc, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x92, 0xc7, + 0xb6, 0xad, 0xba, 0x02, 0x00, 0x00, } -func (m *Cluster) GetLoadAssignment() *ClusterLoadAssignment { - if m != nil { - return m.LoadAssignment - } - return nil -} +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn -func (m *Cluster) GetHealthChecks() []*core.HealthCheck { - if m != nil { - return m.HealthChecks - } - return nil -} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 -func (m *Cluster) GetMaxRequestsPerConnection() *types.UInt32Value { - if m != nil { - return m.MaxRequestsPerConnection - } - return nil +// ClusterDiscoveryServiceClient is the client API for ClusterDiscoveryService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ClusterDiscoveryServiceClient interface { + StreamClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_StreamClustersClient, error) + DeltaClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_DeltaClustersClient, error) + FetchClusters(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) } -func (m *Cluster) GetCircuitBreakers() *cluster.CircuitBreakers { - if m != nil { - return m.CircuitBreakers - } - return nil +type clusterDiscoveryServiceClient struct { + cc *grpc.ClientConn } -func (m *Cluster) GetTlsContext() *auth.UpstreamTlsContext { - if m != nil { - return m.TlsContext - } - return nil +func NewClusterDiscoveryServiceClient(cc *grpc.ClientConn) ClusterDiscoveryServiceClient { + return &clusterDiscoveryServiceClient{cc} } -func (m *Cluster) GetCommonHttpProtocolOptions() *core.HttpProtocolOptions { - if m != nil { - return m.CommonHttpProtocolOptions +func (c *clusterDiscoveryServiceClient) StreamClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_StreamClustersClient, error) { + stream, err := c.cc.NewStream(ctx, &_ClusterDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ClusterDiscoveryService/StreamClusters", opts...) + if err != nil { + return nil, err } - return nil + x := &clusterDiscoveryServiceStreamClustersClient{stream} + return x, nil } -func (m *Cluster) GetHttpProtocolOptions() *core.Http1ProtocolOptions { - if m != nil { - return m.HttpProtocolOptions - } - return nil +type ClusterDiscoveryService_StreamClustersClient interface { + Send(*DiscoveryRequest) error + Recv() (*DiscoveryResponse, error) + grpc.ClientStream } -func (m *Cluster) GetHttp2ProtocolOptions() *core.Http2ProtocolOptions { - if m != nil { - return m.Http2ProtocolOptions - } - return nil +type clusterDiscoveryServiceStreamClustersClient struct { + grpc.ClientStream } -func (m *Cluster) GetExtensionProtocolOptions() map[string]*types.Struct { - if m != nil { - return m.ExtensionProtocolOptions - } - return nil +func (x *clusterDiscoveryServiceStreamClustersClient) Send(m *DiscoveryRequest) error { + return x.ClientStream.SendMsg(m) } -func (m *Cluster) GetTypedExtensionProtocolOptions() map[string]*types.Any { - if m != nil { - return m.TypedExtensionProtocolOptions +func (x *clusterDiscoveryServiceStreamClustersClient) Recv() (*DiscoveryResponse, error) { + m := new(DiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err } - return nil + return m, nil } -func (m *Cluster) GetDnsRefreshRate() *time.Duration { - if m != nil { - return m.DnsRefreshRate +func (c *clusterDiscoveryServiceClient) DeltaClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_DeltaClustersClient, error) { + stream, err := c.cc.NewStream(ctx, &_ClusterDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ClusterDiscoveryService/DeltaClusters", opts...) + if err != nil { + return nil, err } - return nil + x := &clusterDiscoveryServiceDeltaClustersClient{stream} + return x, nil } -func (m *Cluster) GetDnsLookupFamily() Cluster_DnsLookupFamily { - if m != nil { - return m.DnsLookupFamily - } - return Cluster_AUTO +type ClusterDiscoveryService_DeltaClustersClient interface { + Send(*DeltaDiscoveryRequest) error + Recv() (*DeltaDiscoveryResponse, error) + grpc.ClientStream } -func (m *Cluster) GetDnsResolvers() []*core.Address { - if m != nil { - return m.DnsResolvers - } - return nil +type clusterDiscoveryServiceDeltaClustersClient struct { + grpc.ClientStream } -func (m *Cluster) GetOutlierDetection() *cluster.OutlierDetection { - if m != nil { - return m.OutlierDetection - } - return nil +func (x *clusterDiscoveryServiceDeltaClustersClient) Send(m *DeltaDiscoveryRequest) error { + return x.ClientStream.SendMsg(m) } -func (m *Cluster) GetCleanupInterval() *time.Duration { - if m != nil { - return m.CleanupInterval +func (x *clusterDiscoveryServiceDeltaClustersClient) Recv() (*DeltaDiscoveryResponse, error) { + m := new(DeltaDiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err } - return nil + return m, nil } -func (m *Cluster) GetUpstreamBindConfig() *core.BindConfig { - if m != nil { - return m.UpstreamBindConfig +func (c *clusterDiscoveryServiceClient) FetchClusters(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) { + out := new(DiscoveryResponse) + err := c.cc.Invoke(ctx, "/envoy.api.v2.ClusterDiscoveryService/FetchClusters", in, out, opts...) + if err != nil { + return nil, err } - return nil + return out, nil } -func (m *Cluster) GetLbSubsetConfig() *Cluster_LbSubsetConfig { - if m != nil { - return m.LbSubsetConfig - } - return nil +// ClusterDiscoveryServiceServer is the server API for ClusterDiscoveryService service. +type ClusterDiscoveryServiceServer interface { + StreamClusters(ClusterDiscoveryService_StreamClustersServer) error + DeltaClusters(ClusterDiscoveryService_DeltaClustersServer) error + FetchClusters(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error) } -func (m *Cluster) GetRingHashLbConfig() *Cluster_RingHashLbConfig { - if x, ok := m.GetLbConfig().(*Cluster_RingHashLbConfig_); ok { - return x.RingHashLbConfig - } - return nil +// UnimplementedClusterDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedClusterDiscoveryServiceServer struct { } -func (m *Cluster) GetOriginalDstLbConfig() *Cluster_OriginalDstLbConfig { - if x, ok := m.GetLbConfig().(*Cluster_OriginalDstLbConfig_); ok { - return x.OriginalDstLbConfig - } - return nil +func (*UnimplementedClusterDiscoveryServiceServer) StreamClusters(srv ClusterDiscoveryService_StreamClustersServer) error { + return status.Errorf(codes.Unimplemented, "method StreamClusters not implemented") } - -func (m *Cluster) GetLeastRequestLbConfig() *Cluster_LeastRequestLbConfig { - if x, ok := m.GetLbConfig().(*Cluster_LeastRequestLbConfig_); ok { - return x.LeastRequestLbConfig - } - return nil +func (*UnimplementedClusterDiscoveryServiceServer) DeltaClusters(srv ClusterDiscoveryService_DeltaClustersServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaClusters not implemented") } - -func (m *Cluster) GetCommonLbConfig() *Cluster_CommonLbConfig { - if m != nil { - return m.CommonLbConfig - } - return nil +func (*UnimplementedClusterDiscoveryServiceServer) FetchClusters(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchClusters not implemented") } -func (m *Cluster) GetTransportSocket() *core.TransportSocket { - if m != nil { - return m.TransportSocket - } - return nil +func RegisterClusterDiscoveryServiceServer(s *grpc.Server, srv ClusterDiscoveryServiceServer) { + s.RegisterService(&_ClusterDiscoveryService_serviceDesc, srv) } -func (m *Cluster) GetMetadata() *core.Metadata { - if m != nil { - return m.Metadata - } - return nil +func _ClusterDiscoveryService_StreamClusters_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ClusterDiscoveryServiceServer).StreamClusters(&clusterDiscoveryServiceStreamClustersServer{stream}) } -func (m *Cluster) GetProtocolSelection() Cluster_ClusterProtocolSelection { - if m != nil { - return m.ProtocolSelection - } - return Cluster_USE_CONFIGURED_PROTOCOL +type ClusterDiscoveryService_StreamClustersServer interface { + Send(*DiscoveryResponse) error + Recv() (*DiscoveryRequest, error) + grpc.ServerStream } -func (m *Cluster) GetUpstreamConnectionOptions() *UpstreamConnectionOptions { - if m != nil { - return m.UpstreamConnectionOptions - } - return nil +type clusterDiscoveryServiceStreamClustersServer struct { + grpc.ServerStream } -func (m *Cluster) GetCloseConnectionsOnHostHealthFailure() bool { - if m != nil { - return m.CloseConnectionsOnHostHealthFailure - } - return false +func (x *clusterDiscoveryServiceStreamClustersServer) Send(m *DiscoveryResponse) error { + return x.ServerStream.SendMsg(m) } -func (m *Cluster) GetDrainConnectionsOnHostRemoval() bool { - if m != nil { - return m.DrainConnectionsOnHostRemoval +func (x *clusterDiscoveryServiceStreamClustersServer) Recv() (*DiscoveryRequest, error) { + m := new(DiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err } - return false + return m, nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Cluster) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Cluster_OneofMarshaler, _Cluster_OneofUnmarshaler, _Cluster_OneofSizer, []interface{}{ - (*Cluster_Type)(nil), - (*Cluster_ClusterType)(nil), - (*Cluster_RingHashLbConfig_)(nil), - (*Cluster_OriginalDstLbConfig_)(nil), - (*Cluster_LeastRequestLbConfig_)(nil), - } +func _ClusterDiscoveryService_DeltaClusters_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ClusterDiscoveryServiceServer).DeltaClusters(&clusterDiscoveryServiceDeltaClustersServer{stream}) } -func _Cluster_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Cluster) - // cluster_discovery_type - switch x := m.ClusterDiscoveryType.(type) { - case *Cluster_Type: - _ = b.EncodeVarint(2<<3 | proto.WireVarint) - _ = b.EncodeVarint(uint64(x.Type)) - case *Cluster_ClusterType: - _ = b.EncodeVarint(38<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ClusterType); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Cluster.ClusterDiscoveryType has unexpected type %T", x) - } - // lb_config - switch x := m.LbConfig.(type) { - case *Cluster_RingHashLbConfig_: - _ = b.EncodeVarint(23<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RingHashLbConfig); err != nil { - return err - } - case *Cluster_OriginalDstLbConfig_: - _ = b.EncodeVarint(34<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.OriginalDstLbConfig); err != nil { - return err - } - case *Cluster_LeastRequestLbConfig_: - _ = b.EncodeVarint(37<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.LeastRequestLbConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Cluster.LbConfig has unexpected type %T", x) - } - return nil +type ClusterDiscoveryService_DeltaClustersServer interface { + Send(*DeltaDiscoveryResponse) error + Recv() (*DeltaDiscoveryRequest, error) + grpc.ServerStream } -func _Cluster_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Cluster) - switch tag { - case 2: // cluster_discovery_type.type - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.ClusterDiscoveryType = &Cluster_Type{Cluster_DiscoveryType(x)} - return true, err - case 38: // cluster_discovery_type.cluster_type - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Cluster_CustomClusterType) - err := b.DecodeMessage(msg) - m.ClusterDiscoveryType = &Cluster_ClusterType{msg} - return true, err - case 23: // lb_config.ring_hash_lb_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Cluster_RingHashLbConfig) - err := b.DecodeMessage(msg) - m.LbConfig = &Cluster_RingHashLbConfig_{msg} - return true, err - case 34: // lb_config.original_dst_lb_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Cluster_OriginalDstLbConfig) - err := b.DecodeMessage(msg) - m.LbConfig = &Cluster_OriginalDstLbConfig_{msg} - return true, err - case 37: // lb_config.least_request_lb_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Cluster_LeastRequestLbConfig) - err := b.DecodeMessage(msg) - m.LbConfig = &Cluster_LeastRequestLbConfig_{msg} - return true, err - default: - return false, nil - } +type clusterDiscoveryServiceDeltaClustersServer struct { + grpc.ServerStream } -func _Cluster_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Cluster) - // cluster_discovery_type - switch x := m.ClusterDiscoveryType.(type) { - case *Cluster_Type: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.Type)) - case *Cluster_ClusterType: - s := proto.Size(x.ClusterType) - n += 2 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - // lb_config - switch x := m.LbConfig.(type) { - case *Cluster_RingHashLbConfig_: - s := proto.Size(x.RingHashLbConfig) - n += 2 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Cluster_OriginalDstLbConfig_: - s := proto.Size(x.OriginalDstLbConfig) - n += 2 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Cluster_LeastRequestLbConfig_: - s := proto.Size(x.LeastRequestLbConfig) - n += 2 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n +func (x *clusterDiscoveryServiceDeltaClustersServer) Send(m *DeltaDiscoveryResponse) error { + return x.ServerStream.SendMsg(m) } -// Extended cluster type. -type Cluster_CustomClusterType struct { - // The type of the cluster to instantiate. The name must match a supported cluster type. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Cluster specific configuration which depends on the cluster being instantiated. - // See the supported cluster for further documentation. - TypedConfig *types.Any `protobuf:"bytes,2,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_CustomClusterType) Reset() { *m = Cluster_CustomClusterType{} } -func (m *Cluster_CustomClusterType) String() string { return proto.CompactTextString(m) } -func (*Cluster_CustomClusterType) ProtoMessage() {} -func (*Cluster_CustomClusterType) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 0} -} -func (m *Cluster_CustomClusterType) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_CustomClusterType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { +func (x *clusterDiscoveryServiceDeltaClustersServer) Recv() (*DeltaDiscoveryRequest, error) { + m := new(DeltaDiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err } - return b[:n], nil -} -func (m *Cluster_CustomClusterType) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_CustomClusterType.Merge(m, src) -} -func (m *Cluster_CustomClusterType) XXX_Size() int { - return m.Size() -} -func (m *Cluster_CustomClusterType) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_CustomClusterType.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_CustomClusterType proto.InternalMessageInfo - -func (m *Cluster_CustomClusterType) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Cluster_CustomClusterType) GetTypedConfig() *types.Any { - if m != nil { - return m.TypedConfig - } - return nil -} - -// Only valid when discovery type is EDS. -type Cluster_EdsClusterConfig struct { - // Configuration for the source of EDS updates for this Cluster. - EdsConfig *core.ConfigSource `protobuf:"bytes,1,opt,name=eds_config,json=edsConfig,proto3" json:"eds_config,omitempty"` - // Optional alternative to cluster name to present to EDS. This does not - // have the same restrictions as cluster name, i.e. it may be arbitrary - // length. - ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + return m, nil } -func (m *Cluster_EdsClusterConfig) Reset() { *m = Cluster_EdsClusterConfig{} } -func (m *Cluster_EdsClusterConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_EdsClusterConfig) ProtoMessage() {} -func (*Cluster_EdsClusterConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 1} -} -func (m *Cluster_EdsClusterConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_EdsClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { +func _ClusterDiscoveryService_FetchClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DiscoveryRequest) + if err := dec(in); err != nil { return nil, err } - return b[:n], nil -} -func (m *Cluster_EdsClusterConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_EdsClusterConfig.Merge(m, src) -} -func (m *Cluster_EdsClusterConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_EdsClusterConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_EdsClusterConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_EdsClusterConfig proto.InternalMessageInfo - -func (m *Cluster_EdsClusterConfig) GetEdsConfig() *core.ConfigSource { - if m != nil { - return m.EdsConfig + if interceptor == nil { + return srv.(ClusterDiscoveryServiceServer).FetchClusters(ctx, in) } - return nil -} - -func (m *Cluster_EdsClusterConfig) GetServiceName() string { - if m != nil { - return m.ServiceName + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/envoy.api.v2.ClusterDiscoveryService/FetchClusters", } - return "" -} - -// Optionally divide the endpoints in this cluster into subsets defined by -// endpoint metadata and selected by route and weighted cluster metadata. -type Cluster_LbSubsetConfig struct { - // The behavior used when no endpoint subset matches the selected route's - // metadata. The value defaults to - // :ref:`NO_FALLBACK`. - FallbackPolicy Cluster_LbSubsetConfig_LbSubsetFallbackPolicy `protobuf:"varint,1,opt,name=fallback_policy,json=fallbackPolicy,proto3,enum=envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy" json:"fallback_policy,omitempty"` - // Specifies the default subset of endpoints used during fallback if - // fallback_policy is - // :ref:`DEFAULT_SUBSET`. - // Each field in default_subset is - // compared to the matching LbEndpoint.Metadata under the *envoy.lb* - // namespace. It is valid for no hosts to match, in which case the behavior - // is the same as a fallback_policy of - // :ref:`NO_FALLBACK`. - DefaultSubset *types.Struct `protobuf:"bytes,2,opt,name=default_subset,json=defaultSubset,proto3" json:"default_subset,omitempty"` - // For each entry, LbEndpoint.Metadata's - // *envoy.lb* namespace is traversed and a subset is created for each unique - // combination of key and value. For example: - // - // .. code-block:: json - // - // { "subset_selectors": [ - // { "keys": [ "version" ] }, - // { "keys": [ "stage", "hardware_type" ] } - // ]} - // - // A subset is matched when the metadata from the selected route and - // weighted cluster contains the same keys and values as the subset's - // metadata. The same host may appear in multiple subsets. - SubsetSelectors []*Cluster_LbSubsetConfig_LbSubsetSelector `protobuf:"bytes,3,rep,name=subset_selectors,json=subsetSelectors,proto3" json:"subset_selectors,omitempty"` - // If true, routing to subsets will take into account the localities and locality weights of the - // endpoints when making the routing decision. - // - // There are some potential pitfalls associated with enabling this feature, as the resulting - // traffic split after applying both a subset match and locality weights might be undesirable. - // - // Consider for example a situation in which you have 50/50 split across two localities X/Y - // which have 100 hosts each without subsetting. If the subset LB results in X having only 1 - // host selected but Y having 100, then a lot more load is being dumped on the single host in X - // than originally anticipated in the load balancing assignment delivered via EDS. - LocalityWeightAware bool `protobuf:"varint,4,opt,name=locality_weight_aware,json=localityWeightAware,proto3" json:"locality_weight_aware,omitempty"` - // When used with locality_weight_aware, scales the weight of each locality by the ratio - // of hosts in the subset vs hosts in the original subset. This aims to even out the load - // going to an individual locality if said locality is disproportionally affected by the - // subset predicate. - ScaleLocalityWeight bool `protobuf:"varint,5,opt,name=scale_locality_weight,json=scaleLocalityWeight,proto3" json:"scale_locality_weight,omitempty"` - // If true, when a fallback policy is configured and its corresponding subset fails to find - // a host this will cause any host to be selected instead. - // - // This is useful when using the default subset as the fallback policy, given the default - // subset might become empty. With this option enabled, if that happens the LB will attempt - // to select a host from the entire cluster. - PanicModeAny bool `protobuf:"varint,6,opt,name=panic_mode_any,json=panicModeAny,proto3" json:"panic_mode_any,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterDiscoveryServiceServer).FetchClusters(ctx, req.(*DiscoveryRequest)) + } + return interceptor(ctx, in, info, handler) } -func (m *Cluster_LbSubsetConfig) Reset() { *m = Cluster_LbSubsetConfig{} } -func (m *Cluster_LbSubsetConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_LbSubsetConfig) ProtoMessage() {} -func (*Cluster_LbSubsetConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 4} -} -func (m *Cluster_LbSubsetConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_LbSubsetConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_LbSubsetConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_LbSubsetConfig.Merge(m, src) -} -func (m *Cluster_LbSubsetConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_LbSubsetConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_LbSubsetConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_LbSubsetConfig proto.InternalMessageInfo - -func (m *Cluster_LbSubsetConfig) GetFallbackPolicy() Cluster_LbSubsetConfig_LbSubsetFallbackPolicy { - if m != nil { - return m.FallbackPolicy - } - return Cluster_LbSubsetConfig_NO_FALLBACK -} - -func (m *Cluster_LbSubsetConfig) GetDefaultSubset() *types.Struct { - if m != nil { - return m.DefaultSubset - } - return nil -} - -func (m *Cluster_LbSubsetConfig) GetSubsetSelectors() []*Cluster_LbSubsetConfig_LbSubsetSelector { - if m != nil { - return m.SubsetSelectors - } - return nil -} - -func (m *Cluster_LbSubsetConfig) GetLocalityWeightAware() bool { - if m != nil { - return m.LocalityWeightAware - } - return false -} - -func (m *Cluster_LbSubsetConfig) GetScaleLocalityWeight() bool { - if m != nil { - return m.ScaleLocalityWeight - } - return false -} - -func (m *Cluster_LbSubsetConfig) GetPanicModeAny() bool { - if m != nil { - return m.PanicModeAny - } - return false -} - -// Specifications for subsets. -type Cluster_LbSubsetConfig_LbSubsetSelector struct { - // List of keys to match with the weighted cluster metadata. - Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Reset() { - *m = Cluster_LbSubsetConfig_LbSubsetSelector{} -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) String() string { return proto.CompactTextString(m) } -func (*Cluster_LbSubsetConfig_LbSubsetSelector) ProtoMessage() {} -func (*Cluster_LbSubsetConfig_LbSubsetSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 4, 0} -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Merge(m, src) -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Size() int { - return m.Size() -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector proto.InternalMessageInfo - -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) GetKeys() []string { - if m != nil { - return m.Keys - } - return nil -} - -// Specific configuration for the LeastRequest load balancing policy. -type Cluster_LeastRequestLbConfig struct { - // The number of random healthy hosts from which the host with the fewest active requests will - // be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set. - ChoiceCount *types.UInt32Value `protobuf:"bytes,1,opt,name=choice_count,json=choiceCount,proto3" json:"choice_count,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_LeastRequestLbConfig) Reset() { *m = Cluster_LeastRequestLbConfig{} } -func (m *Cluster_LeastRequestLbConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_LeastRequestLbConfig) ProtoMessage() {} -func (*Cluster_LeastRequestLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 5} -} -func (m *Cluster_LeastRequestLbConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_LeastRequestLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_LeastRequestLbConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_LeastRequestLbConfig.Merge(m, src) -} -func (m *Cluster_LeastRequestLbConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_LeastRequestLbConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_LeastRequestLbConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_LeastRequestLbConfig proto.InternalMessageInfo - -func (m *Cluster_LeastRequestLbConfig) GetChoiceCount() *types.UInt32Value { - if m != nil { - return m.ChoiceCount - } - return nil -} - -// Specific configuration for the :ref:`RingHash` -// load balancing policy. -type Cluster_RingHashLbConfig struct { - // Minimum hash ring size. The larger the ring is (that is, the more hashes there are for each - // provided host) the better the request distribution will reflect the desired weights. Defaults - // to 1024 entries, and limited to 8M entries. See also - // :ref:`maximum_ring_size`. - MinimumRingSize *types.UInt64Value `protobuf:"bytes,1,opt,name=minimum_ring_size,json=minimumRingSize,proto3" json:"minimum_ring_size,omitempty"` - // The hash function used to hash hosts onto the ketama ring. The value defaults to - // :ref:`XX_HASH`. - HashFunction Cluster_RingHashLbConfig_HashFunction `protobuf:"varint,3,opt,name=hash_function,json=hashFunction,proto3,enum=envoy.api.v2.Cluster_RingHashLbConfig_HashFunction" json:"hash_function,omitempty"` - // Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries, but can be lowered - // to further constrain resource use. See also - // :ref:`minimum_ring_size`. - MaximumRingSize *types.UInt64Value `protobuf:"bytes,4,opt,name=maximum_ring_size,json=maximumRingSize,proto3" json:"maximum_ring_size,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_RingHashLbConfig) Reset() { *m = Cluster_RingHashLbConfig{} } -func (m *Cluster_RingHashLbConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_RingHashLbConfig) ProtoMessage() {} -func (*Cluster_RingHashLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 6} -} -func (m *Cluster_RingHashLbConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_RingHashLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_RingHashLbConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_RingHashLbConfig.Merge(m, src) -} -func (m *Cluster_RingHashLbConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_RingHashLbConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_RingHashLbConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_RingHashLbConfig proto.InternalMessageInfo - -func (m *Cluster_RingHashLbConfig) GetMinimumRingSize() *types.UInt64Value { - if m != nil { - return m.MinimumRingSize - } - return nil -} - -func (m *Cluster_RingHashLbConfig) GetHashFunction() Cluster_RingHashLbConfig_HashFunction { - if m != nil { - return m.HashFunction - } - return Cluster_RingHashLbConfig_XX_HASH -} - -func (m *Cluster_RingHashLbConfig) GetMaximumRingSize() *types.UInt64Value { - if m != nil { - return m.MaximumRingSize - } - return nil -} - -// Specific configuration for the -// :ref:`Original Destination ` -// load balancing policy. -type Cluster_OriginalDstLbConfig struct { - // When true, :ref:`x-envoy-original-dst-host - // ` can be used to override destination - // address. - // - // .. attention:: - // - // This header isn't sanitized by default, so enabling this feature allows HTTP clients to - // route traffic to arbitrary hosts and/or ports, which may have serious security - // consequences. - UseHttpHeader bool `protobuf:"varint,1,opt,name=use_http_header,json=useHttpHeader,proto3" json:"use_http_header,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_OriginalDstLbConfig) Reset() { *m = Cluster_OriginalDstLbConfig{} } -func (m *Cluster_OriginalDstLbConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_OriginalDstLbConfig) ProtoMessage() {} -func (*Cluster_OriginalDstLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 7} -} -func (m *Cluster_OriginalDstLbConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_OriginalDstLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_OriginalDstLbConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_OriginalDstLbConfig.Merge(m, src) -} -func (m *Cluster_OriginalDstLbConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_OriginalDstLbConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_OriginalDstLbConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_OriginalDstLbConfig proto.InternalMessageInfo - -func (m *Cluster_OriginalDstLbConfig) GetUseHttpHeader() bool { - if m != nil { - return m.UseHttpHeader - } - return false -} - -// Common configuration for all load balancer implementations. -type Cluster_CommonLbConfig struct { - // Configures the :ref:`healthy panic threshold `. - // If not specified, the default is 50%. - // - // .. note:: - // The specified percent will be truncated to the nearest 1%. - HealthyPanicThreshold *_type.Percent `protobuf:"bytes,1,opt,name=healthy_panic_threshold,json=healthyPanicThreshold,proto3" json:"healthy_panic_threshold,omitempty"` - // Types that are valid to be assigned to LocalityConfigSpecifier: - // *Cluster_CommonLbConfig_ZoneAwareLbConfig_ - // *Cluster_CommonLbConfig_LocalityWeightedLbConfig_ - LocalityConfigSpecifier isCluster_CommonLbConfig_LocalityConfigSpecifier `protobuf_oneof:"locality_config_specifier"` - // If set, all health check/weight/metadata updates that happen within this duration will be - // merged and delivered in one shot when the duration expires. The start of the duration is when - // the first update happens. This is useful for big clusters, with potentially noisy deploys - // that might trigger excessive CPU usage due to a constant stream of healthcheck state changes - // or metadata updates. The first set of updates to be seen apply immediately (e.g.: a new - // cluster). - // - // If this is not set, we default to a merge window of 1000ms. To disable it, set the merge - // window to 0. - // - // Note: merging does not apply to cluster membership changes (e.g.: adds/removes); this is - // because merging those updates isn't currently safe. See - // https://github.com/envoyproxy/envoy/pull/3941. - UpdateMergeWindow *types.Duration `protobuf:"bytes,4,opt,name=update_merge_window,json=updateMergeWindow,proto3" json:"update_merge_window,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_CommonLbConfig) Reset() { *m = Cluster_CommonLbConfig{} } -func (m *Cluster_CommonLbConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_CommonLbConfig) ProtoMessage() {} -func (*Cluster_CommonLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 8} -} -func (m *Cluster_CommonLbConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_CommonLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_CommonLbConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_CommonLbConfig.Merge(m, src) -} -func (m *Cluster_CommonLbConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_CommonLbConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_CommonLbConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_CommonLbConfig proto.InternalMessageInfo - -type isCluster_CommonLbConfig_LocalityConfigSpecifier interface { - isCluster_CommonLbConfig_LocalityConfigSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type Cluster_CommonLbConfig_ZoneAwareLbConfig_ struct { - ZoneAwareLbConfig *Cluster_CommonLbConfig_ZoneAwareLbConfig `protobuf:"bytes,2,opt,name=zone_aware_lb_config,json=zoneAwareLbConfig,proto3,oneof"` -} -type Cluster_CommonLbConfig_LocalityWeightedLbConfig_ struct { - LocalityWeightedLbConfig *Cluster_CommonLbConfig_LocalityWeightedLbConfig `protobuf:"bytes,3,opt,name=locality_weighted_lb_config,json=localityWeightedLbConfig,proto3,oneof"` -} - -func (*Cluster_CommonLbConfig_ZoneAwareLbConfig_) isCluster_CommonLbConfig_LocalityConfigSpecifier() {} -func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig_) isCluster_CommonLbConfig_LocalityConfigSpecifier() { -} - -func (m *Cluster_CommonLbConfig) GetLocalityConfigSpecifier() isCluster_CommonLbConfig_LocalityConfigSpecifier { - if m != nil { - return m.LocalityConfigSpecifier - } - return nil -} - -func (m *Cluster_CommonLbConfig) GetHealthyPanicThreshold() *_type.Percent { - if m != nil { - return m.HealthyPanicThreshold - } - return nil -} - -func (m *Cluster_CommonLbConfig) GetZoneAwareLbConfig() *Cluster_CommonLbConfig_ZoneAwareLbConfig { - if x, ok := m.GetLocalityConfigSpecifier().(*Cluster_CommonLbConfig_ZoneAwareLbConfig_); ok { - return x.ZoneAwareLbConfig - } - return nil -} - -func (m *Cluster_CommonLbConfig) GetLocalityWeightedLbConfig() *Cluster_CommonLbConfig_LocalityWeightedLbConfig { - if x, ok := m.GetLocalityConfigSpecifier().(*Cluster_CommonLbConfig_LocalityWeightedLbConfig_); ok { - return x.LocalityWeightedLbConfig - } - return nil -} - -func (m *Cluster_CommonLbConfig) GetUpdateMergeWindow() *types.Duration { - if m != nil { - return m.UpdateMergeWindow - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Cluster_CommonLbConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Cluster_CommonLbConfig_OneofMarshaler, _Cluster_CommonLbConfig_OneofUnmarshaler, _Cluster_CommonLbConfig_OneofSizer, []interface{}{ - (*Cluster_CommonLbConfig_ZoneAwareLbConfig_)(nil), - (*Cluster_CommonLbConfig_LocalityWeightedLbConfig_)(nil), - } -} - -func _Cluster_CommonLbConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Cluster_CommonLbConfig) - // locality_config_specifier - switch x := m.LocalityConfigSpecifier.(type) { - case *Cluster_CommonLbConfig_ZoneAwareLbConfig_: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ZoneAwareLbConfig); err != nil { - return err - } - case *Cluster_CommonLbConfig_LocalityWeightedLbConfig_: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.LocalityWeightedLbConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Cluster_CommonLbConfig.LocalityConfigSpecifier has unexpected type %T", x) - } - return nil -} - -func _Cluster_CommonLbConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Cluster_CommonLbConfig) - switch tag { - case 2: // locality_config_specifier.zone_aware_lb_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Cluster_CommonLbConfig_ZoneAwareLbConfig) - err := b.DecodeMessage(msg) - m.LocalityConfigSpecifier = &Cluster_CommonLbConfig_ZoneAwareLbConfig_{msg} - return true, err - case 3: // locality_config_specifier.locality_weighted_lb_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Cluster_CommonLbConfig_LocalityWeightedLbConfig) - err := b.DecodeMessage(msg) - m.LocalityConfigSpecifier = &Cluster_CommonLbConfig_LocalityWeightedLbConfig_{msg} - return true, err - default: - return false, nil - } -} - -func _Cluster_CommonLbConfig_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Cluster_CommonLbConfig) - // locality_config_specifier - switch x := m.LocalityConfigSpecifier.(type) { - case *Cluster_CommonLbConfig_ZoneAwareLbConfig_: - s := proto.Size(x.ZoneAwareLbConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Cluster_CommonLbConfig_LocalityWeightedLbConfig_: - s := proto.Size(x.LocalityWeightedLbConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Configuration for :ref:`zone aware routing -// `. -type Cluster_CommonLbConfig_ZoneAwareLbConfig struct { - // Configures percentage of requests that will be considered for zone aware routing - // if zone aware routing is configured. If not specified, the default is 100%. - // * :ref:`runtime values `. - // * :ref:`Zone aware routing support `. - RoutingEnabled *_type.Percent `protobuf:"bytes,1,opt,name=routing_enabled,json=routingEnabled,proto3" json:"routing_enabled,omitempty"` - // Configures minimum upstream cluster size required for zone aware routing - // If upstream cluster size is less than specified, zone aware routing is not performed - // even if zone aware routing is configured. If not specified, the default is 6. - // * :ref:`runtime values `. - // * :ref:`Zone aware routing support `. - MinClusterSize *types.UInt64Value `protobuf:"bytes,2,opt,name=min_cluster_size,json=minClusterSize,proto3" json:"min_cluster_size,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Reset() { - *m = Cluster_CommonLbConfig_ZoneAwareLbConfig{} -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) String() string { return proto.CompactTextString(m) } -func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) ProtoMessage() {} -func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 8, 0} -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Merge(m, src) -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig proto.InternalMessageInfo - -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetRoutingEnabled() *_type.Percent { - if m != nil { - return m.RoutingEnabled - } - return nil -} - -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetMinClusterSize() *types.UInt64Value { - if m != nil { - return m.MinClusterSize - } - return nil -} - -// Configuration for :ref:`locality weighted load balancing -// ` -type Cluster_CommonLbConfig_LocalityWeightedLbConfig struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Reset() { - *m = Cluster_CommonLbConfig_LocalityWeightedLbConfig{} -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) String() string { - return proto.CompactTextString(m) -} -func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) ProtoMessage() {} -func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{0, 8, 1} -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Merge(m, src) -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Size() int { - return m.Size() -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig proto.InternalMessageInfo - -// An extensible structure containing the address Envoy should bind to when -// establishing upstream connections. -type UpstreamBindConfig struct { - // The address Envoy should bind to when establishing upstream connections. - SourceAddress *core.Address `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UpstreamBindConfig) Reset() { *m = UpstreamBindConfig{} } -func (m *UpstreamBindConfig) String() string { return proto.CompactTextString(m) } -func (*UpstreamBindConfig) ProtoMessage() {} -func (*UpstreamBindConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{1} -} -func (m *UpstreamBindConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpstreamBindConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *UpstreamBindConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpstreamBindConfig.Merge(m, src) -} -func (m *UpstreamBindConfig) XXX_Size() int { - return m.Size() -} -func (m *UpstreamBindConfig) XXX_DiscardUnknown() { - xxx_messageInfo_UpstreamBindConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_UpstreamBindConfig proto.InternalMessageInfo - -func (m *UpstreamBindConfig) GetSourceAddress() *core.Address { - if m != nil { - return m.SourceAddress - } - return nil -} - -type UpstreamConnectionOptions struct { - // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. - TcpKeepalive *core.TcpKeepalive `protobuf:"bytes,1,opt,name=tcp_keepalive,json=tcpKeepalive,proto3" json:"tcp_keepalive,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UpstreamConnectionOptions) Reset() { *m = UpstreamConnectionOptions{} } -func (m *UpstreamConnectionOptions) String() string { return proto.CompactTextString(m) } -func (*UpstreamConnectionOptions) ProtoMessage() {} -func (*UpstreamConnectionOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_e73f50fbb1daa302, []int{2} -} -func (m *UpstreamConnectionOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UpstreamConnectionOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *UpstreamConnectionOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpstreamConnectionOptions.Merge(m, src) -} -func (m *UpstreamConnectionOptions) XXX_Size() int { - return m.Size() -} -func (m *UpstreamConnectionOptions) XXX_DiscardUnknown() { - xxx_messageInfo_UpstreamConnectionOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_UpstreamConnectionOptions proto.InternalMessageInfo - -func (m *UpstreamConnectionOptions) GetTcpKeepalive() *core.TcpKeepalive { - if m != nil { - return m.TcpKeepalive - } - return nil -} - -func init() { - proto.RegisterEnum("envoy.api.v2.Cluster_DiscoveryType", Cluster_DiscoveryType_name, Cluster_DiscoveryType_value) - proto.RegisterEnum("envoy.api.v2.Cluster_LbPolicy", Cluster_LbPolicy_name, Cluster_LbPolicy_value) - proto.RegisterEnum("envoy.api.v2.Cluster_DnsLookupFamily", Cluster_DnsLookupFamily_name, Cluster_DnsLookupFamily_value) - proto.RegisterEnum("envoy.api.v2.Cluster_ClusterProtocolSelection", Cluster_ClusterProtocolSelection_name, Cluster_ClusterProtocolSelection_value) - proto.RegisterEnum("envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy", Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value) - proto.RegisterEnum("envoy.api.v2.Cluster_RingHashLbConfig_HashFunction", Cluster_RingHashLbConfig_HashFunction_name, Cluster_RingHashLbConfig_HashFunction_value) - proto.RegisterType((*Cluster)(nil), "envoy.api.v2.Cluster") - proto.RegisterMapType((map[string]*types.Struct)(nil), "envoy.api.v2.Cluster.ExtensionProtocolOptionsEntry") - proto.RegisterMapType((map[string]*types.Any)(nil), "envoy.api.v2.Cluster.TypedExtensionProtocolOptionsEntry") - proto.RegisterType((*Cluster_CustomClusterType)(nil), "envoy.api.v2.Cluster.CustomClusterType") - proto.RegisterType((*Cluster_EdsClusterConfig)(nil), "envoy.api.v2.Cluster.EdsClusterConfig") - proto.RegisterType((*Cluster_LbSubsetConfig)(nil), "envoy.api.v2.Cluster.LbSubsetConfig") - proto.RegisterType((*Cluster_LbSubsetConfig_LbSubsetSelector)(nil), "envoy.api.v2.Cluster.LbSubsetConfig.LbSubsetSelector") - proto.RegisterType((*Cluster_LeastRequestLbConfig)(nil), "envoy.api.v2.Cluster.LeastRequestLbConfig") - proto.RegisterType((*Cluster_RingHashLbConfig)(nil), "envoy.api.v2.Cluster.RingHashLbConfig") - proto.RegisterType((*Cluster_OriginalDstLbConfig)(nil), "envoy.api.v2.Cluster.OriginalDstLbConfig") - proto.RegisterType((*Cluster_CommonLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig") - proto.RegisterType((*Cluster_CommonLbConfig_ZoneAwareLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.ZoneAwareLbConfig") - proto.RegisterType((*Cluster_CommonLbConfig_LocalityWeightedLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.LocalityWeightedLbConfig") - proto.RegisterType((*UpstreamBindConfig)(nil), "envoy.api.v2.UpstreamBindConfig") - proto.RegisterType((*UpstreamConnectionOptions)(nil), "envoy.api.v2.UpstreamConnectionOptions") -} - -func init() { proto.RegisterFile("envoy/api/v2/cds.proto", fileDescriptor_e73f50fbb1daa302) } - -var fileDescriptor_e73f50fbb1daa302 = []byte{ - // 2590 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4d, 0x73, 0x1b, 0xc7, - 0xd1, 0xe6, 0x82, 0x90, 0x05, 0x0d, 0xf1, 0xb1, 0x1c, 0x52, 0xd2, 0x0a, 0x94, 0x28, 0x0a, 0x96, - 0xf4, 0xf2, 0xd5, 0xfb, 0x06, 0x4c, 0x28, 0x7f, 0x95, 0x13, 0xdb, 0x85, 0x2f, 0x8a, 0x94, 0x41, - 0x80, 0x19, 0x80, 0xa2, 0x1d, 0x97, 0x6b, 0x3c, 0xd8, 0x1d, 0x10, 0x1b, 0x2e, 0x76, 0xd7, 0x3b, - 0xb3, 0x94, 0xa0, 0x43, 0xca, 0xf1, 0x29, 0xe7, 0xe4, 0x92, 0xfc, 0x83, 0x54, 0xf2, 0x0f, 0x72, - 0xca, 0xd1, 0xb9, 0xa5, 0x2a, 0x97, 0x9c, 0x9c, 0x94, 0x2a, 0x87, 0xe4, 0x5f, 0xa4, 0x76, 0x66, - 0x16, 0xc4, 0xc7, 0x92, 0x94, 0x53, 0x39, 0x11, 0x33, 0xfd, 0xf4, 0xd3, 0xb3, 0x3d, 0x3d, 0xdd, - 0x3d, 0x43, 0x70, 0x83, 0xba, 0xa7, 0xde, 0x68, 0x8b, 0xf8, 0xf6, 0xd6, 0xe9, 0xf6, 0x96, 0x69, - 0xb1, 0xb2, 0x1f, 0x78, 0xdc, 0x83, 0x59, 0x31, 0x5f, 0x26, 0xbe, 0x5d, 0x3e, 0xdd, 0x2e, 0xde, - 0x9d, 0x46, 0x79, 0x01, 0xdd, 0x22, 0x96, 0x15, 0x50, 0xa6, 0xe0, 0xc5, 0xdb, 0x53, 0x00, 0x12, - 0xf2, 0xc1, 0x96, 0x49, 0x03, 0x9e, 0x28, 0x15, 0xea, 0x3d, 0xc2, 0xa8, 0x92, 0x3e, 0x98, 0x97, - 0x9a, 0x9e, 0xdb, 0xb7, 0x8f, 0x31, 0xf3, 0xc2, 0xc0, 0xa4, 0x89, 0x24, 0x96, 0xcd, 0x4c, 0xef, - 0x94, 0x06, 0x23, 0x25, 0xbd, 0x3f, 0x4f, 0x32, 0xa0, 0xc4, 0xe1, 0x03, 0x6c, 0x0e, 0xa8, 0x79, - 0xa2, 0x50, 0x1b, 0xf3, 0x28, 0x21, 0x30, 0x3d, 0x47, 0x21, 0x1e, 0x4d, 0x23, 0x9c, 0x90, 0x71, - 0x1a, 0x6c, 0x99, 0x76, 0x60, 0x86, 0x36, 0xc7, 0xbd, 0x80, 0x92, 0x13, 0x1a, 0x28, 0xec, 0xff, - 0x27, 0x62, 0xbd, 0x90, 0x3b, 0x36, 0x0d, 0xb0, 0x45, 0x39, 0x35, 0xb9, 0xed, 0xb9, 0x0a, 0x3d, - 0xed, 0x69, 0x1a, 0x7b, 0xba, 0x68, 0xc8, 0x79, 0x3e, 0xf2, 0xe9, 0x96, 0x4f, 0x03, 0x93, 0xba, - 0x63, 0xb7, 0x1d, 0x7b, 0xde, 0xb1, 0x43, 0x85, 0x0a, 0x71, 0x5d, 0x8f, 0x93, 0x88, 0x2e, 0xd6, - 0xbb, 0xa5, 0xa4, 0x62, 0xd4, 0x0b, 0xfb, 0x5b, 0xc4, 0x8d, 0x9d, 0xb1, 0x3e, 0x2b, 0xb2, 0xc2, - 0x80, 0x4c, 0x2c, 0xe5, 0xf6, 0xac, 0x9c, 0xf1, 0x20, 0x34, 0xf9, 0x79, 0xda, 0xcf, 0x03, 0xe2, - 0xfb, 0x34, 0x88, 0x0d, 0xdf, 0x3c, 0x25, 0x8e, 0x6d, 0x11, 0x4e, 0xb7, 0xe2, 0x1f, 0x4a, 0xb0, - 0x7a, 0xec, 0x1d, 0x7b, 0xe2, 0xe7, 0x56, 0xf4, 0x4b, 0xce, 0x96, 0x7e, 0xf9, 0x7f, 0xe0, 0x6a, - 0x4d, 0xfa, 0x06, 0xde, 0x01, 0x69, 0x97, 0x0c, 0xa9, 0xa1, 0x6d, 0x68, 0x9b, 0xd7, 0xaa, 0xd7, - 0xfe, 0xf0, 0xaf, 0x3f, 0x2e, 0xa6, 0x83, 0xd4, 0x86, 0x86, 0xc4, 0x34, 0x2c, 0x81, 0x1c, 0x71, - 0x38, 0x66, 0x9c, 0x70, 0x2c, 0x70, 0xb7, 0x23, 0x1c, 0x5a, 0x22, 0x0e, 0xef, 0x70, 0xc2, 0x5b, - 0x11, 0xa6, 0x01, 0xd2, 0x91, 0xab, 0x8c, 0xd4, 0x86, 0xb6, 0x99, 0xdf, 0x7e, 0xb3, 0x3c, 0x19, - 0xa7, 0x65, 0x65, 0xa7, 0x5c, 0x8f, 0xa3, 0xa3, 0x3b, 0xf2, 0x69, 0x15, 0x44, 0x76, 0xae, 0x7c, - 0xad, 0xa5, 0x74, 0x6d, 0x77, 0x01, 0x09, 0x75, 0xd8, 0x04, 0x59, 0xb5, 0x61, 0x58, 0xd0, 0x3d, - 0xdc, 0xd0, 0x36, 0x97, 0xb6, 0xff, 0x27, 0x99, 0xae, 0x16, 0x32, 0xee, 0x0d, 0xd5, 0x28, 0xa2, - 0xdc, 0x5d, 0x40, 0x4b, 0xe6, 0xd9, 0x10, 0x76, 0x01, 0xa4, 0x16, 0xc3, 0x31, 0xa3, 0x0c, 0x5f, - 0x63, 0x51, 0x70, 0x3e, 0x4c, 0xe6, 0x6c, 0x58, 0x4c, 0xfd, 0xac, 0x09, 0x34, 0xd2, 0xe9, 0xcc, - 0x0c, 0x7c, 0x06, 0x0a, 0xa6, 0xe7, 0xba, 0xd4, 0xe4, 0x98, 0xdb, 0x43, 0xea, 0x85, 0xdc, 0x48, - 0x0b, 0xca, 0x5b, 0x65, 0xb9, 0x45, 0xe5, 0x78, 0x8b, 0xca, 0x75, 0xb5, 0xc1, 0x55, 0xf8, 0xcd, - 0xb7, 0x77, 0x17, 0x7e, 0xfd, 0xb7, 0xbb, 0x9a, 0xf8, 0xe6, 0xdf, 0x69, 0xa9, 0x47, 0x0b, 0x28, - 0xaf, 0x58, 0xba, 0x92, 0x04, 0xf6, 0xc1, 0x3d, 0x5f, 0xae, 0xd2, 0x95, 0x11, 0x8a, 0x7b, 0x61, - 0xbf, 0x4f, 0x03, 0xec, 0xd8, 0xc3, 0x28, 0xc8, 0x47, 0x9c, 0x32, 0xe3, 0x8a, 0xb0, 0x74, 0x7b, - 0xce, 0xd2, 0xe1, 0x9e, 0xcb, 0x1f, 0x6f, 0x3f, 0x23, 0x4e, 0x48, 0xd1, 0x1d, 0x5f, 0xac, 0x55, - 0xb1, 0x54, 0x05, 0x49, 0x33, 0xe2, 0xa8, 0x46, 0x14, 0xf0, 0x09, 0xb8, 0xe6, 0xf4, 0xb0, 0xef, - 0x39, 0xb6, 0x39, 0x32, 0xde, 0x10, 0xfb, 0xb5, 0x9e, 0xec, 0x8c, 0x66, 0xef, 0x40, 0xa0, 0x26, - 0xb7, 0x0a, 0x65, 0x1c, 0x35, 0x0b, 0xdf, 0x02, 0x57, 0x06, 0x1e, 0xe3, 0xcc, 0xb8, 0xba, 0xb1, - 0xb8, 0xb9, 0xb4, 0x5d, 0x9c, 0x26, 0x89, 0x8e, 0x71, 0xb9, 0x22, 0xd3, 0x51, 0x35, 0x65, 0x68, - 0x48, 0x82, 0x61, 0x13, 0x14, 0x1c, 0x8f, 0x58, 0x98, 0x30, 0x66, 0x1f, 0xbb, 0x43, 0xea, 0x72, - 0xe3, 0x9e, 0xf8, 0xa8, 0xe4, 0xa0, 0x69, 0x7a, 0xc4, 0xaa, 0x8c, 0xa1, 0x28, 0xef, 0x4c, 0x8d, - 0x61, 0x0d, 0xe4, 0x26, 0x13, 0x0a, 0x33, 0x32, 0x62, 0x2d, 0xeb, 0x09, 0x6b, 0xd9, 0x15, 0xb8, - 0x5a, 0x04, 0x43, 0xd9, 0xc1, 0xd9, 0x80, 0xc1, 0xcf, 0xc0, 0xda, 0x90, 0xbc, 0xc0, 0x01, 0xfd, - 0x32, 0xa4, 0x8c, 0x33, 0x3c, 0xbd, 0x0d, 0xc6, 0xb5, 0xd7, 0xf0, 0xb9, 0x31, 0x24, 0x2f, 0x90, - 0xd2, 0x3f, 0x98, 0x74, 0x3f, 0x3c, 0x00, 0xfa, 0x4c, 0x9e, 0x62, 0x06, 0x10, 0x8c, 0x0f, 0x66, - 0x16, 0x19, 0x87, 0xb5, 0x44, 0x57, 0x15, 0x18, 0x15, 0xcc, 0xe9, 0x09, 0xb8, 0x03, 0x96, 0xb8, - 0xc3, 0xa2, 0x15, 0x72, 0xfa, 0x82, 0x1b, 0x4b, 0x49, 0x64, 0x51, 0xae, 0x2f, 0x1f, 0xfa, 0x8c, - 0x07, 0x94, 0x0c, 0xbb, 0x0e, 0xab, 0x49, 0x30, 0x02, 0x7c, 0xfc, 0x1b, 0x1e, 0x83, 0xdb, 0xa6, - 0x37, 0x1c, 0x7a, 0x2e, 0x1e, 0x70, 0xee, 0xe3, 0x38, 0xe5, 0x62, 0xcf, 0x17, 0x09, 0xcd, 0xb8, - 0x93, 0x74, 0x50, 0xa4, 0x2b, 0x39, 0xf7, 0x0f, 0x14, 0xbc, 0x2d, 0xd1, 0xe8, 0x96, 0xe4, 0x4a, - 0x10, 0xc1, 0xcf, 0xc0, 0xf5, 0x64, 0x0b, 0xb9, 0xa4, 0xe3, 0x3d, 0xb6, 0xf0, 0x83, 0x59, 0x13, - 0x2b, 0x83, 0x04, 0xf2, 0xcf, 0xc1, 0x8d, 0x68, 0x7a, 0x7b, 0x9e, 0x3d, 0x7f, 0x21, 0xfb, 0xf6, - 0x2c, 0xfb, 0xea, 0x20, 0x61, 0x16, 0x7e, 0x09, 0x8a, 0xf4, 0x05, 0xa7, 0x2e, 0x8b, 0x0e, 0xe4, - 0x9c, 0x89, 0x37, 0x45, 0xb4, 0x3d, 0x3e, 0x27, 0x97, 0xc4, 0x7a, 0x33, 0x9c, 0x0d, 0x97, 0x07, - 0x23, 0x64, 0xd0, 0x73, 0xc4, 0xf0, 0xe7, 0x1a, 0xd8, 0x88, 0xb2, 0x9f, 0x85, 0x2f, 0xb0, 0x7c, - 0x5f, 0x58, 0x7e, 0x2f, 0xd9, 0x72, 0x94, 0xfd, 0xac, 0x8b, 0xcd, 0xdf, 0xe1, 0x17, 0x61, 0x60, - 0x07, 0xe8, 0x96, 0xcb, 0x70, 0x40, 0xfb, 0x01, 0x65, 0x03, 0x1c, 0x10, 0x4e, 0x0d, 0xfd, 0xb2, - 0x2c, 0x97, 0x9f, 0xcd, 0x70, 0x96, 0xcb, 0x90, 0x64, 0x40, 0x84, 0x53, 0xf8, 0x39, 0x58, 0x8e, - 0x48, 0x1d, 0xcf, 0x3b, 0x09, 0x7d, 0xdc, 0x27, 0x43, 0xdb, 0x19, 0x19, 0xcb, 0x22, 0x03, 0x3d, - 0x38, 0xa7, 0x62, 0xb8, 0xac, 0x29, 0xd0, 0x3b, 0x02, 0x3c, 0x95, 0x88, 0x0a, 0xd6, 0xb4, 0x10, - 0x7e, 0x04, 0x72, 0x72, 0xcd, 0xcc, 0x73, 0x4e, 0xa3, 0x63, 0x06, 0x2f, 0xcb, 0x4b, 0x28, 0x2b, - 0x56, 0xa8, 0xf0, 0xb0, 0x03, 0x96, 0xe7, 0xda, 0x04, 0x63, 0x25, 0xf1, 0x14, 0xa8, 0xf5, 0xb5, - 0x25, 0xbc, 0x1e, 0xa3, 0x91, 0xee, 0xcd, 0xcc, 0xc0, 0x2e, 0xd0, 0x4d, 0x87, 0x12, 0x37, 0xf4, - 0xb1, 0xed, 0x72, 0x1a, 0x9c, 0x12, 0xc7, 0x58, 0xfd, 0xae, 0x9e, 0x2c, 0x28, 0x8a, 0x3d, 0xc5, - 0x00, 0xdb, 0x60, 0x35, 0x54, 0xa7, 0x1b, 0xf7, 0x6c, 0xd7, 0x8a, 0x8b, 0xdb, 0x75, 0xc1, 0x7c, - 0x27, 0xe1, 0x93, 0xab, 0xb6, 0x6b, 0xa9, 0x9a, 0x06, 0x63, 0xd5, 0xb3, 0x39, 0xd8, 0x02, 0xba, - 0xd3, 0xc3, 0x2c, 0xec, 0x31, 0xca, 0x63, 0xb2, 0x1b, 0x82, 0xec, 0xfe, 0x79, 0xc5, 0xa1, 0x23, - 0xc0, 0x8a, 0x33, 0xef, 0x4c, 0x8d, 0xe1, 0x11, 0x58, 0x09, 0x6c, 0xf7, 0x18, 0x0f, 0x08, 0x1b, - 0x60, 0xa7, 0x17, 0x53, 0xde, 0xbc, 0xa8, 0xf8, 0x22, 0xdb, 0x3d, 0xde, 0x25, 0x6c, 0xd0, 0xec, - 0x49, 0x92, 0x5d, 0x0d, 0xe9, 0xc1, 0xcc, 0x1c, 0xfc, 0x02, 0xdc, 0xf0, 0x02, 0xfb, 0xd8, 0x76, - 0x89, 0x83, 0x2d, 0xc6, 0x27, 0xb8, 0x4b, 0x82, 0xfb, 0x7f, 0x93, 0xb9, 0xdb, 0x4a, 0xa7, 0xce, - 0xf8, 0x04, 0xfd, 0x8a, 0x37, 0x3f, 0x0d, 0x4d, 0x70, 0xd3, 0xa1, 0x84, 0xf1, 0xb8, 0x20, 0x4c, - 0x98, 0x78, 0x20, 0x4c, 0x3c, 0x3a, 0xc7, 0x23, 0x91, 0x92, 0x2a, 0x02, 0x13, 0x36, 0x56, 0x9d, - 0x84, 0xf9, 0xc8, 0xdf, 0x2a, 0xf9, 0x9e, 0xb1, 0xaf, 0x5d, 0xe4, 0xef, 0x9a, 0x40, 0xc7, 0xfa, - 0x51, 0xf7, 0x30, 0x39, 0x86, 0xfb, 0x40, 0xe7, 0x01, 0x71, 0x99, 0xef, 0x05, 0x1c, 0x33, 0xcf, - 0x3c, 0xa1, 0xdc, 0x30, 0x04, 0x5f, 0x29, 0x21, 0x18, 0xba, 0x31, 0xb4, 0x23, 0x90, 0xa8, 0xc0, - 0xa7, 0x27, 0xe0, 0xbb, 0x20, 0x33, 0xa4, 0x9c, 0x58, 0x84, 0x13, 0xe3, 0x96, 0xa0, 0x59, 0x4b, - 0xa0, 0xd9, 0x57, 0x10, 0x34, 0x06, 0xc3, 0xcf, 0x01, 0x1c, 0xe7, 0x2a, 0x46, 0x1d, 0x75, 0x88, - 0x8a, 0xe2, 0x90, 0x97, 0xcf, 0xf9, 0x32, 0xf9, 0x37, 0x4e, 0x41, 0x9d, 0x58, 0x0b, 0x2d, 0xfb, - 0xb3, 0x53, 0xf0, 0x18, 0xac, 0x8d, 0xe3, 0x7e, 0xa2, 0x53, 0x8a, 0xb3, 0xe2, 0x7a, 0x52, 0xca, - 0x8f, 0xcb, 0xe0, 0x59, 0x51, 0x1e, 0xd7, 0xac, 0xf0, 0x3c, 0x11, 0x3c, 0x04, 0x9b, 0xa6, 0xe3, - 0x31, 0x3a, 0x61, 0x85, 0xe1, 0xa8, 0x54, 0x7a, 0x8c, 0x63, 0xd5, 0x72, 0xf4, 0x89, 0xed, 0x84, - 0x01, 0x35, 0xee, 0x6e, 0x68, 0x9b, 0x19, 0xf4, 0xa6, 0xc0, 0x9f, 0x31, 0xb1, 0xb6, 0xbb, 0xeb, - 0x31, 0x2e, 0xdb, 0x8e, 0x1d, 0x09, 0x85, 0xbb, 0xe0, 0x9e, 0x15, 0x10, 0xdb, 0x4d, 0xa4, 0x0d, - 0xe8, 0xd0, 0x8b, 0xd2, 0xc3, 0x86, 0xe0, 0xbb, 0x23, 0x80, 0x73, 0x7c, 0x48, 0x82, 0x8a, 0x27, - 0x60, 0x79, 0xae, 0x01, 0xbe, 0xac, 0x93, 0x7f, 0x17, 0x64, 0x65, 0x61, 0x51, 0x01, 0x97, 0x12, - 0xee, 0x5a, 0x9d, 0xcb, 0x43, 0x15, 0x77, 0x84, 0x96, 0x04, 0x52, 0x46, 0x57, 0x31, 0x04, 0xfa, - 0x6c, 0x67, 0x0c, 0x3f, 0x04, 0x40, 0x74, 0xd7, 0x92, 0x4a, 0x13, 0x54, 0x77, 0x13, 0x82, 0x44, - 0xc2, 0x3b, 0xe2, 0xd2, 0x88, 0xae, 0x45, 0xed, 0xb4, 0xd4, 0xbf, 0x07, 0xb2, 0x8c, 0x06, 0xa7, - 0xb6, 0x49, 0xe5, 0xad, 0x22, 0x25, 0x6f, 0x15, 0x6a, 0x2e, 0xba, 0x55, 0x14, 0x2d, 0x70, 0xe7, - 0xc2, 0x2a, 0x06, 0x75, 0xb0, 0x78, 0x42, 0x47, 0xf2, 0x73, 0x51, 0xf4, 0x13, 0x7e, 0x0f, 0x5c, - 0x39, 0x8d, 0x3a, 0x32, 0xf5, 0x6d, 0x37, 0xe7, 0xbe, 0xad, 0x23, 0x2e, 0x55, 0x48, 0xa2, 0xde, - 0x4f, 0xbd, 0xa7, 0x15, 0xfb, 0xa0, 0x74, 0x79, 0xc1, 0x4c, 0x30, 0xf5, 0x68, 0xda, 0x54, 0xb2, - 0x1b, 0x27, 0xec, 0xfc, 0x3e, 0x0d, 0xf2, 0xd3, 0x59, 0x13, 0xfa, 0xa0, 0xd0, 0x27, 0x8e, 0xd3, - 0x23, 0xe6, 0x49, 0xdc, 0x91, 0x6b, 0xe2, 0xa8, 0xfc, 0xf0, 0x75, 0x92, 0xee, 0x78, 0xb8, 0xa3, - 0x38, 0x12, 0xda, 0xf5, 0x7c, 0x7f, 0x4a, 0x06, 0x3f, 0x04, 0x79, 0x8b, 0xf6, 0x49, 0x18, 0x5d, - 0xe8, 0x84, 0xee, 0x65, 0x8e, 0xca, 0x29, 0xb8, 0xb4, 0x04, 0xbf, 0x00, 0xba, 0x2a, 0x12, 0xf2, - 0x74, 0x7b, 0x01, 0x33, 0x16, 0x45, 0x9d, 0x7d, 0xfb, 0x3b, 0x2d, 0xb9, 0xa3, 0xb4, 0x51, 0x81, - 0x4d, 0x8d, 0x19, 0xdc, 0x06, 0xd7, 0x1d, 0xcf, 0x24, 0x8e, 0xcd, 0x47, 0xf8, 0x39, 0xb5, 0x8f, - 0x07, 0x1c, 0x93, 0xe7, 0x24, 0xa0, 0xe2, 0x96, 0x95, 0x41, 0x2b, 0xb1, 0xf0, 0x48, 0xc8, 0x2a, - 0x91, 0x28, 0xd2, 0x61, 0x26, 0x71, 0x28, 0x9e, 0xd1, 0x14, 0xf7, 0xa5, 0x0c, 0x5a, 0x11, 0xc2, - 0xe6, 0x94, 0x22, 0xbc, 0x0f, 0xf2, 0x3e, 0x71, 0x6d, 0x13, 0x0f, 0x3d, 0x8b, 0x62, 0xe2, 0xca, - 0xcb, 0x50, 0x06, 0x65, 0xc5, 0xec, 0xbe, 0x67, 0xd1, 0x8a, 0x3b, 0x2a, 0x3e, 0x04, 0xfa, 0xec, - 0x92, 0x21, 0x04, 0xe9, 0x13, 0x3a, 0x62, 0x86, 0xb6, 0xb1, 0xb8, 0x79, 0x0d, 0x89, 0xdf, 0xa5, - 0x36, 0xb8, 0x91, 0xbc, 0x1b, 0xb0, 0x00, 0x96, 0x5a, 0x6d, 0xbc, 0x53, 0x69, 0x36, 0xab, 0x95, - 0xda, 0xc7, 0xfa, 0x02, 0xd4, 0x41, 0xb6, 0xd2, 0xfa, 0x14, 0x37, 0x5a, 0xf5, 0x83, 0xf6, 0x5e, - 0xab, 0xab, 0x6b, 0x10, 0x82, 0x7c, 0xbd, 0xb1, 0x53, 0x39, 0x6c, 0x76, 0x71, 0xe7, 0xb0, 0xda, - 0x69, 0x74, 0xf5, 0x54, 0xb1, 0x07, 0x56, 0x93, 0x0a, 0x0a, 0x7c, 0x0a, 0xb2, 0xe6, 0xc0, 0x8b, - 0x4e, 0x8d, 0xe9, 0x85, 0x2e, 0x57, 0x07, 0xef, 0xc2, 0xdb, 0x89, 0x4a, 0x04, 0x8f, 0x52, 0x9b, - 0x29, 0xb4, 0x24, 0x95, 0x6b, 0x91, 0x6e, 0xf1, 0xdb, 0x14, 0xd0, 0x67, 0x8b, 0x2e, 0x7c, 0x06, - 0x96, 0x87, 0xb6, 0x6b, 0x0f, 0xc3, 0x21, 0x16, 0x15, 0x9c, 0xd9, 0x2f, 0xe9, 0x85, 0x56, 0xde, - 0x79, 0x4b, 0x5a, 0xc9, 0x46, 0x56, 0xae, 0x6e, 0x5f, 0x31, 0xbe, 0xfa, 0xea, 0xab, 0x34, 0x2a, - 0x28, 0x92, 0x88, 0xbf, 0x63, 0xbf, 0xa4, 0xd0, 0x02, 0x39, 0xd1, 0x0c, 0xf4, 0x43, 0x57, 0x16, - 0x85, 0x45, 0x11, 0xe9, 0x8f, 0x5f, 0xaf, 0x17, 0x28, 0x47, 0x83, 0x1d, 0xa5, 0x3a, 0x15, 0xe1, - 0xd9, 0xc1, 0x84, 0x44, 0xac, 0x9e, 0xbc, 0x98, 0x59, 0x7d, 0xfa, 0x3f, 0x58, 0xbd, 0x24, 0x89, - 0x57, 0x5f, 0x2a, 0x83, 0xec, 0xe4, 0x0a, 0xe0, 0x12, 0xb8, 0xfa, 0xc9, 0x27, 0x78, 0xb7, 0xd2, - 0xd9, 0xd5, 0x17, 0xe0, 0x32, 0xc8, 0xed, 0x1f, 0xa2, 0xfd, 0x43, 0x24, 0x26, 0xf0, 0xb6, 0xae, - 0x3d, 0x4d, 0x67, 0x52, 0xfa, 0x62, 0xf1, 0x03, 0xb0, 0x92, 0xd0, 0x78, 0xc0, 0x87, 0xa0, 0x10, - 0x32, 0x2a, 0xaf, 0x5d, 0x03, 0x4a, 0x2c, 0x1a, 0x08, 0x07, 0x67, 0x50, 0x2e, 0x64, 0x34, 0xba, - 0x9c, 0xec, 0x8a, 0xc9, 0xe2, 0x3f, 0xd3, 0x20, 0x3f, 0x5d, 0xf7, 0xe1, 0xc7, 0xe0, 0xa6, 0xac, - 0x3e, 0x23, 0x2c, 0xa3, 0x97, 0x0f, 0xa2, 0xfe, 0xda, 0x73, 0x2c, 0xb5, 0x47, 0x2b, 0xca, 0x9f, - 0x51, 0xfa, 0x2e, 0x1f, 0xc8, 0x97, 0x2b, 0x74, 0x5d, 0xe9, 0x1c, 0x44, 0x2a, 0xdd, 0x58, 0x03, - 0xda, 0x60, 0xf5, 0xa5, 0xe7, 0x52, 0x79, 0xbe, 0x26, 0x1a, 0x11, 0x99, 0x12, 0xde, 0x79, 0x9d, - 0x46, 0xa4, 0xfc, 0x13, 0xcf, 0xa5, 0xe2, 0x10, 0x8e, 0x5b, 0x9e, 0x05, 0xb4, 0xfc, 0x72, 0x76, - 0x12, 0xfe, 0x0c, 0xac, 0xcd, 0x9c, 0x4d, 0x6a, 0x4d, 0x58, 0x94, 0x8f, 0x32, 0x1f, 0xbc, 0x96, - 0xc5, 0xe9, 0x73, 0x4c, 0xad, 0x09, 0xc3, 0x86, 0x73, 0x8e, 0x0c, 0xee, 0x81, 0x95, 0xd0, 0xb7, - 0x08, 0xa7, 0x78, 0x48, 0x83, 0x63, 0x8a, 0x9f, 0xdb, 0xae, 0xe5, 0x3d, 0xbf, 0xf4, 0xe5, 0x06, - 0x2d, 0x4b, 0xad, 0xfd, 0x48, 0xe9, 0x48, 0xe8, 0x14, 0x7f, 0xa3, 0x81, 0xe5, 0xb9, 0xaf, 0x86, - 0x3f, 0x02, 0x85, 0xc0, 0x0b, 0x79, 0x14, 0x73, 0xd4, 0x25, 0x3d, 0x87, 0x5e, 0xb8, 0x21, 0x79, - 0x85, 0x6d, 0x48, 0x28, 0xdc, 0x01, 0xfa, 0x30, 0xea, 0x0a, 0xd4, 0x53, 0x95, 0x88, 0xda, 0xd4, - 0xe5, 0x51, 0x8b, 0xf2, 0x43, 0xdb, 0x55, 0x6e, 0x8a, 0xc2, 0xb4, 0x58, 0x04, 0xc6, 0x79, 0xee, - 0xa9, 0xae, 0x81, 0x5b, 0xe3, 0x2d, 0x88, 0x9f, 0x72, 0x7d, 0x6a, 0xda, 0x7d, 0x9b, 0x06, 0xa5, - 0x23, 0x90, 0x9b, 0x7a, 0x9e, 0x83, 0x00, 0xbc, 0xd1, 0xe9, 0x56, 0xba, 0x7b, 0x35, 0x7d, 0x01, - 0xe6, 0x01, 0xe8, 0x74, 0xd1, 0x5e, 0xad, 0x8b, 0xeb, 0xad, 0x8e, 0xae, 0x45, 0x29, 0xad, 0xd9, - 0x7e, 0xb2, 0x57, 0xab, 0x34, 0xc5, 0x44, 0x0a, 0x5e, 0x05, 0x8b, 0x8d, 0x7a, 0x47, 0x5f, 0x8c, - 0x72, 0x5b, 0x1b, 0xed, 0x3d, 0xd9, 0x6b, 0x45, 0xa2, 0x4e, 0x57, 0x4f, 0x97, 0x7e, 0x0a, 0x32, - 0xf1, 0x3b, 0x52, 0xa4, 0x87, 0xda, 0x87, 0xad, 0x3a, 0x46, 0xed, 0xea, 0x5e, 0x4b, 0x1e, 0x9c, - 0x66, 0xa3, 0xd2, 0xe9, 0x62, 0xd4, 0xf8, 0xf1, 0x61, 0xa3, 0x13, 0xe5, 0xc2, 0x1c, 0xb8, 0x86, - 0xf6, 0x5a, 0x4f, 0xe4, 0xd1, 0x4a, 0x45, 0xcb, 0x40, 0x95, 0x56, 0xbd, 0xbd, 0xaf, 0x2f, 0xc2, - 0x15, 0x50, 0x98, 0x24, 0xc7, 0xcd, 0xaa, 0x9e, 0x8e, 0x00, 0xfb, 0x95, 0x27, 0xcd, 0xc6, 0x33, - 0xfd, 0x4a, 0xe9, 0x6d, 0x50, 0x98, 0xb9, 0x31, 0xc2, 0x0c, 0x48, 0x57, 0x0e, 0xbb, 0x6d, 0x7d, - 0x21, 0x3a, 0xb1, 0xcf, 0xde, 0xc2, 0xed, 0x56, 0xf3, 0x53, 0x5d, 0x13, 0x83, 0x77, 0xe4, 0x20, - 0x55, 0xea, 0x02, 0xe3, 0xbc, 0x1e, 0x14, 0xae, 0x81, 0x9b, 0x87, 0x9d, 0x06, 0xae, 0xb5, 0x5b, - 0x3b, 0x7b, 0x4f, 0x0e, 0x51, 0xa3, 0x8e, 0x0f, 0x50, 0xbb, 0xdb, 0xae, 0xb5, 0x9b, 0xfa, 0x42, - 0x2c, 0xac, 0xb7, 0x8f, 0x5a, 0x9d, 0x2e, 0x6a, 0x54, 0xf6, 0xcf, 0x84, 0x5a, 0xd5, 0x00, 0x37, - 0xe2, 0xed, 0x1c, 0x3f, 0x8b, 0x8b, 0x57, 0xcd, 0xea, 0x92, 0x78, 0x81, 0x93, 0x5b, 0xf0, 0x34, - 0x9d, 0xc9, 0xea, 0xb9, 0xa7, 0xe9, 0x4c, 0x41, 0xd7, 0x4b, 0x47, 0x00, 0x1e, 0xce, 0x5f, 0xcd, - 0x2a, 0x20, 0x2f, 0x9f, 0xdc, 0xb1, 0x7a, 0xdd, 0x57, 0x81, 0x75, 0xd1, 0xc5, 0x36, 0x27, 0x35, - 0xd4, 0xb0, 0x44, 0xc0, 0xad, 0x73, 0xbb, 0x60, 0x58, 0x07, 0x39, 0x6e, 0xfa, 0xf8, 0x84, 0x52, - 0x9f, 0x38, 0xf6, 0x29, 0xbd, 0xa0, 0x97, 0xeb, 0x9a, 0xfe, 0xc7, 0x31, 0x0c, 0x65, 0xf9, 0xc4, - 0x68, 0xfb, 0x4f, 0x29, 0x70, 0x53, 0x79, 0x71, 0x1c, 0x48, 0x1d, 0xd9, 0xcb, 0xc1, 0x23, 0x90, - 0xef, 0x48, 0xe3, 0x12, 0xc0, 0xe0, 0xcc, 0x03, 0xdd, 0x58, 0x43, 0x55, 0xbb, 0xe2, 0xdd, 0x73, - 0xe5, 0xcc, 0xf7, 0x5c, 0x46, 0x4b, 0x0b, 0x9b, 0xda, 0xf7, 0x35, 0xf8, 0x05, 0xc8, 0xd5, 0xa9, - 0xc3, 0xc9, 0x98, 0x77, 0xe6, 0x11, 0x51, 0x08, 0xe7, 0xc8, 0xef, 0x5f, 0x0c, 0x9a, 0xb2, 0xc0, - 0x40, 0x6e, 0x87, 0x72, 0x73, 0xf0, 0xdf, 0x5b, 0xf9, 0xbd, 0xaf, 0xff, 0xf2, 0x8f, 0x5f, 0xa5, - 0xd6, 0x4a, 0x37, 0xa6, 0xfe, 0x61, 0xf2, 0xbe, 0x8a, 0x15, 0xf6, 0xbe, 0xf6, 0xa8, 0xfa, 0xd1, - 0x6f, 0x5f, 0xad, 0x6b, 0xdf, 0xbc, 0x5a, 0xd7, 0xfe, 0xfc, 0x6a, 0x5d, 0xfb, 0xeb, 0xab, 0x75, - 0xed, 0xef, 0xaf, 0xd6, 0x35, 0x50, 0xb4, 0x3d, 0xc9, 0xed, 0x07, 0xde, 0x8b, 0xd1, 0x94, 0x99, - 0x6a, 0xa6, 0x66, 0x31, 0x11, 0xbc, 0x07, 0xda, 0x2f, 0x34, 0xad, 0xf7, 0x86, 0x48, 0x16, 0x8f, - 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x13, 0x20, 0xa5, 0x48, 0x1a, 0x00, 0x00, -} - -func (this *Cluster) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster) - if !ok { - that2, ok := that.(Cluster) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if this.AltStatName != that1.AltStatName { - return false - } - if that1.ClusterDiscoveryType == nil { - if this.ClusterDiscoveryType != nil { - return false - } - } else if this.ClusterDiscoveryType == nil { - return false - } else if !this.ClusterDiscoveryType.Equal(that1.ClusterDiscoveryType) { - return false - } - if !this.EdsClusterConfig.Equal(that1.EdsClusterConfig) { - return false - } - if this.ConnectTimeout != that1.ConnectTimeout { - return false - } - if !this.PerConnectionBufferLimitBytes.Equal(that1.PerConnectionBufferLimitBytes) { - return false - } - if this.LbPolicy != that1.LbPolicy { - return false - } - if len(this.Hosts) != len(that1.Hosts) { - return false - } - for i := range this.Hosts { - if !this.Hosts[i].Equal(that1.Hosts[i]) { - return false - } - } - if !this.LoadAssignment.Equal(that1.LoadAssignment) { - return false - } - if len(this.HealthChecks) != len(that1.HealthChecks) { - return false - } - for i := range this.HealthChecks { - if !this.HealthChecks[i].Equal(that1.HealthChecks[i]) { - return false - } - } - if !this.MaxRequestsPerConnection.Equal(that1.MaxRequestsPerConnection) { - return false - } - if !this.CircuitBreakers.Equal(that1.CircuitBreakers) { - return false - } - if !this.TlsContext.Equal(that1.TlsContext) { - return false - } - if !this.CommonHttpProtocolOptions.Equal(that1.CommonHttpProtocolOptions) { - return false - } - if !this.HttpProtocolOptions.Equal(that1.HttpProtocolOptions) { - return false - } - if !this.Http2ProtocolOptions.Equal(that1.Http2ProtocolOptions) { - return false - } - if len(this.ExtensionProtocolOptions) != len(that1.ExtensionProtocolOptions) { - return false - } - for i := range this.ExtensionProtocolOptions { - if !this.ExtensionProtocolOptions[i].Equal(that1.ExtensionProtocolOptions[i]) { - return false - } - } - if len(this.TypedExtensionProtocolOptions) != len(that1.TypedExtensionProtocolOptions) { - return false - } - for i := range this.TypedExtensionProtocolOptions { - if !this.TypedExtensionProtocolOptions[i].Equal(that1.TypedExtensionProtocolOptions[i]) { - return false - } - } - if this.DnsRefreshRate != nil && that1.DnsRefreshRate != nil { - if *this.DnsRefreshRate != *that1.DnsRefreshRate { - return false - } - } else if this.DnsRefreshRate != nil { - return false - } else if that1.DnsRefreshRate != nil { - return false - } - if this.DnsLookupFamily != that1.DnsLookupFamily { - return false - } - if len(this.DnsResolvers) != len(that1.DnsResolvers) { - return false - } - for i := range this.DnsResolvers { - if !this.DnsResolvers[i].Equal(that1.DnsResolvers[i]) { - return false - } - } - if !this.OutlierDetection.Equal(that1.OutlierDetection) { - return false - } - if this.CleanupInterval != nil && that1.CleanupInterval != nil { - if *this.CleanupInterval != *that1.CleanupInterval { - return false - } - } else if this.CleanupInterval != nil { - return false - } else if that1.CleanupInterval != nil { - return false - } - if !this.UpstreamBindConfig.Equal(that1.UpstreamBindConfig) { - return false - } - if !this.LbSubsetConfig.Equal(that1.LbSubsetConfig) { - return false - } - if that1.LbConfig == nil { - if this.LbConfig != nil { - return false - } - } else if this.LbConfig == nil { - return false - } else if !this.LbConfig.Equal(that1.LbConfig) { - return false - } - if !this.CommonLbConfig.Equal(that1.CommonLbConfig) { - return false - } - if !this.TransportSocket.Equal(that1.TransportSocket) { - return false - } - if !this.Metadata.Equal(that1.Metadata) { - return false - } - if this.ProtocolSelection != that1.ProtocolSelection { - return false - } - if !this.UpstreamConnectionOptions.Equal(that1.UpstreamConnectionOptions) { - return false - } - if this.CloseConnectionsOnHostHealthFailure != that1.CloseConnectionsOnHostHealthFailure { - return false - } - if this.DrainConnectionsOnHostRemoval != that1.DrainConnectionsOnHostRemoval { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_Type) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_Type) - if !ok { - that2, ok := that.(Cluster_Type) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Type != that1.Type { - return false - } - return true -} -func (this *Cluster_ClusterType) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_ClusterType) - if !ok { - that2, ok := that.(Cluster_ClusterType) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ClusterType.Equal(that1.ClusterType) { - return false - } - return true -} -func (this *Cluster_RingHashLbConfig_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_RingHashLbConfig_) - if !ok { - that2, ok := that.(Cluster_RingHashLbConfig_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.RingHashLbConfig.Equal(that1.RingHashLbConfig) { - return false - } - return true -} -func (this *Cluster_OriginalDstLbConfig_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_OriginalDstLbConfig_) - if !ok { - that2, ok := that.(Cluster_OriginalDstLbConfig_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.OriginalDstLbConfig.Equal(that1.OriginalDstLbConfig) { - return false - } - return true -} -func (this *Cluster_LeastRequestLbConfig_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_LeastRequestLbConfig_) - if !ok { - that2, ok := that.(Cluster_LeastRequestLbConfig_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.LeastRequestLbConfig.Equal(that1.LeastRequestLbConfig) { - return false - } - return true -} -func (this *Cluster_CustomClusterType) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_CustomClusterType) - if !ok { - that2, ok := that.(Cluster_CustomClusterType) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_EdsClusterConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_EdsClusterConfig) - if !ok { - that2, ok := that.(Cluster_EdsClusterConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.EdsConfig.Equal(that1.EdsConfig) { - return false - } - if this.ServiceName != that1.ServiceName { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_LbSubsetConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_LbSubsetConfig) - if !ok { - that2, ok := that.(Cluster_LbSubsetConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.FallbackPolicy != that1.FallbackPolicy { - return false - } - if !this.DefaultSubset.Equal(that1.DefaultSubset) { - return false - } - if len(this.SubsetSelectors) != len(that1.SubsetSelectors) { - return false - } - for i := range this.SubsetSelectors { - if !this.SubsetSelectors[i].Equal(that1.SubsetSelectors[i]) { - return false - } - } - if this.LocalityWeightAware != that1.LocalityWeightAware { - return false - } - if this.ScaleLocalityWeight != that1.ScaleLocalityWeight { - return false - } - if this.PanicModeAny != that1.PanicModeAny { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_LbSubsetConfig_LbSubsetSelector) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_LbSubsetConfig_LbSubsetSelector) - if !ok { - that2, ok := that.(Cluster_LbSubsetConfig_LbSubsetSelector) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.Keys) != len(that1.Keys) { - return false - } - for i := range this.Keys { - if this.Keys[i] != that1.Keys[i] { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_LeastRequestLbConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_LeastRequestLbConfig) - if !ok { - that2, ok := that.(Cluster_LeastRequestLbConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ChoiceCount.Equal(that1.ChoiceCount) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_RingHashLbConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_RingHashLbConfig) - if !ok { - that2, ok := that.(Cluster_RingHashLbConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.MinimumRingSize.Equal(that1.MinimumRingSize) { - return false - } - if this.HashFunction != that1.HashFunction { - return false - } - if !this.MaximumRingSize.Equal(that1.MaximumRingSize) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_OriginalDstLbConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_OriginalDstLbConfig) - if !ok { - that2, ok := that.(Cluster_OriginalDstLbConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.UseHttpHeader != that1.UseHttpHeader { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_CommonLbConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_CommonLbConfig) - if !ok { - that2, ok := that.(Cluster_CommonLbConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.HealthyPanicThreshold.Equal(that1.HealthyPanicThreshold) { - return false - } - if that1.LocalityConfigSpecifier == nil { - if this.LocalityConfigSpecifier != nil { - return false - } - } else if this.LocalityConfigSpecifier == nil { - return false - } else if !this.LocalityConfigSpecifier.Equal(that1.LocalityConfigSpecifier) { - return false - } - if !this.UpdateMergeWindow.Equal(that1.UpdateMergeWindow) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_CommonLbConfig_ZoneAwareLbConfig_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_CommonLbConfig_ZoneAwareLbConfig_) - if !ok { - that2, ok := that.(Cluster_CommonLbConfig_ZoneAwareLbConfig_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ZoneAwareLbConfig.Equal(that1.ZoneAwareLbConfig) { - return false - } - return true -} -func (this *Cluster_CommonLbConfig_LocalityWeightedLbConfig_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_CommonLbConfig_LocalityWeightedLbConfig_) - if !ok { - that2, ok := that.(Cluster_CommonLbConfig_LocalityWeightedLbConfig_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.LocalityWeightedLbConfig.Equal(that1.LocalityWeightedLbConfig) { - return false - } - return true -} -func (this *Cluster_CommonLbConfig_ZoneAwareLbConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_CommonLbConfig_ZoneAwareLbConfig) - if !ok { - that2, ok := that.(Cluster_CommonLbConfig_ZoneAwareLbConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.RoutingEnabled.Equal(that1.RoutingEnabled) { - return false - } - if !this.MinClusterSize.Equal(that1.MinClusterSize) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Cluster_CommonLbConfig_LocalityWeightedLbConfig) - if !ok { - that2, ok := that.(Cluster_CommonLbConfig_LocalityWeightedLbConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *UpstreamBindConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*UpstreamBindConfig) - if !ok { - that2, ok := that.(UpstreamBindConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SourceAddress.Equal(that1.SourceAddress) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *UpstreamConnectionOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*UpstreamConnectionOptions) - if !ok { - that2, ok := that.(UpstreamConnectionOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TcpKeepalive.Equal(that1.TcpKeepalive) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// ClusterDiscoveryServiceClient is the client API for ClusterDiscoveryService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ClusterDiscoveryServiceClient interface { - StreamClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_StreamClustersClient, error) - DeltaClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_DeltaClustersClient, error) - FetchClusters(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) -} - -type clusterDiscoveryServiceClient struct { - cc *grpc.ClientConn -} - -func NewClusterDiscoveryServiceClient(cc *grpc.ClientConn) ClusterDiscoveryServiceClient { - return &clusterDiscoveryServiceClient{cc} -} - -func (c *clusterDiscoveryServiceClient) StreamClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_StreamClustersClient, error) { - stream, err := c.cc.NewStream(ctx, &_ClusterDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ClusterDiscoveryService/StreamClusters", opts...) - if err != nil { - return nil, err - } - x := &clusterDiscoveryServiceStreamClustersClient{stream} - return x, nil -} - -type ClusterDiscoveryService_StreamClustersClient interface { - Send(*DiscoveryRequest) error - Recv() (*DiscoveryResponse, error) - grpc.ClientStream -} - -type clusterDiscoveryServiceStreamClustersClient struct { - grpc.ClientStream -} - -func (x *clusterDiscoveryServiceStreamClustersClient) Send(m *DiscoveryRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *clusterDiscoveryServiceStreamClustersClient) Recv() (*DiscoveryResponse, error) { - m := new(DiscoveryResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *clusterDiscoveryServiceClient) DeltaClusters(ctx context.Context, opts ...grpc.CallOption) (ClusterDiscoveryService_DeltaClustersClient, error) { - stream, err := c.cc.NewStream(ctx, &_ClusterDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ClusterDiscoveryService/DeltaClusters", opts...) - if err != nil { - return nil, err - } - x := &clusterDiscoveryServiceDeltaClustersClient{stream} - return x, nil -} - -type ClusterDiscoveryService_DeltaClustersClient interface { - Send(*DeltaDiscoveryRequest) error - Recv() (*DeltaDiscoveryResponse, error) - grpc.ClientStream -} - -type clusterDiscoveryServiceDeltaClustersClient struct { - grpc.ClientStream -} - -func (x *clusterDiscoveryServiceDeltaClustersClient) Send(m *DeltaDiscoveryRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *clusterDiscoveryServiceDeltaClustersClient) Recv() (*DeltaDiscoveryResponse, error) { - m := new(DeltaDiscoveryResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *clusterDiscoveryServiceClient) FetchClusters(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) { - out := new(DiscoveryResponse) - err := c.cc.Invoke(ctx, "/envoy.api.v2.ClusterDiscoveryService/FetchClusters", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ClusterDiscoveryServiceServer is the server API for ClusterDiscoveryService service. -type ClusterDiscoveryServiceServer interface { - StreamClusters(ClusterDiscoveryService_StreamClustersServer) error - DeltaClusters(ClusterDiscoveryService_DeltaClustersServer) error - FetchClusters(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error) -} - -func RegisterClusterDiscoveryServiceServer(s *grpc.Server, srv ClusterDiscoveryServiceServer) { - s.RegisterService(&_ClusterDiscoveryService_serviceDesc, srv) -} - -func _ClusterDiscoveryService_StreamClusters_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(ClusterDiscoveryServiceServer).StreamClusters(&clusterDiscoveryServiceStreamClustersServer{stream}) -} - -type ClusterDiscoveryService_StreamClustersServer interface { - Send(*DiscoveryResponse) error - Recv() (*DiscoveryRequest, error) - grpc.ServerStream -} - -type clusterDiscoveryServiceStreamClustersServer struct { - grpc.ServerStream -} - -func (x *clusterDiscoveryServiceStreamClustersServer) Send(m *DiscoveryResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *clusterDiscoveryServiceStreamClustersServer) Recv() (*DiscoveryRequest, error) { - m := new(DiscoveryRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _ClusterDiscoveryService_DeltaClusters_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(ClusterDiscoveryServiceServer).DeltaClusters(&clusterDiscoveryServiceDeltaClustersServer{stream}) -} - -type ClusterDiscoveryService_DeltaClustersServer interface { - Send(*DeltaDiscoveryResponse) error - Recv() (*DeltaDiscoveryRequest, error) - grpc.ServerStream -} - -type clusterDiscoveryServiceDeltaClustersServer struct { - grpc.ServerStream -} - -func (x *clusterDiscoveryServiceDeltaClustersServer) Send(m *DeltaDiscoveryResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *clusterDiscoveryServiceDeltaClustersServer) Recv() (*DeltaDiscoveryRequest, error) { - m := new(DeltaDiscoveryRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func _ClusterDiscoveryService_FetchClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DiscoveryRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClusterDiscoveryServiceServer).FetchClusters(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/envoy.api.v2.ClusterDiscoveryService/FetchClusters", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClusterDiscoveryServiceServer).FetchClusters(ctx, req.(*DiscoveryRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _ClusterDiscoveryService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "envoy.api.v2.ClusterDiscoveryService", - HandlerType: (*ClusterDiscoveryServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "FetchClusters", - Handler: _ClusterDiscoveryService_FetchClusters_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "StreamClusters", - Handler: _ClusterDiscoveryService_StreamClusters_Handler, - ServerStreams: true, - ClientStreams: true, - }, - { - StreamName: "DeltaClusters", - Handler: _ClusterDiscoveryService_DeltaClusters_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "envoy/api/v2/cds.proto", -} - -func (m *Cluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ClusterDiscoveryType != nil { - nn1, err := m.ClusterDiscoveryType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if m.EdsClusterConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCds(dAtA, i, uint64(m.EdsClusterConfig.Size())) - n2, err := m.EdsClusterConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - dAtA[i] = 0x22 - i++ - i = encodeVarintCds(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(m.ConnectTimeout))) - n3, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.ConnectTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - if m.PerConnectionBufferLimitBytes != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintCds(dAtA, i, uint64(m.PerConnectionBufferLimitBytes.Size())) - n4, err := m.PerConnectionBufferLimitBytes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.LbPolicy != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.LbPolicy)) - } - if len(m.Hosts) > 0 { - for _, msg := range m.Hosts { - dAtA[i] = 0x3a - i++ - i = encodeVarintCds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.HealthChecks) > 0 { - for _, msg := range m.HealthChecks { - dAtA[i] = 0x42 - i++ - i = encodeVarintCds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.MaxRequestsPerConnection != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintCds(dAtA, i, uint64(m.MaxRequestsPerConnection.Size())) - n5, err := m.MaxRequestsPerConnection.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.CircuitBreakers != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.CircuitBreakers.Size())) - n6, err := m.CircuitBreakers.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.TlsContext != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintCds(dAtA, i, uint64(m.TlsContext.Size())) - n7, err := m.TlsContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.HttpProtocolOptions != nil { - dAtA[i] = 0x6a - i++ - i = encodeVarintCds(dAtA, i, uint64(m.HttpProtocolOptions.Size())) - n8, err := m.HttpProtocolOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.Http2ProtocolOptions != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.Http2ProtocolOptions.Size())) - n9, err := m.Http2ProtocolOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.DnsRefreshRate != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.DnsRefreshRate))) - n10, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.DnsRefreshRate, dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.DnsLookupFamily != 0 { - dAtA[i] = 0x88 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.DnsLookupFamily)) - } - if len(m.DnsResolvers) > 0 { - for _, msg := range m.DnsResolvers { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.OutlierDetection != nil { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.OutlierDetection.Size())) - n11, err := m.OutlierDetection.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.CleanupInterval != nil { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.CleanupInterval))) - n12, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.CleanupInterval, dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if m.UpstreamBindConfig != nil { - dAtA[i] = 0xaa - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.UpstreamBindConfig.Size())) - n13, err := m.UpstreamBindConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - if m.LbSubsetConfig != nil { - dAtA[i] = 0xb2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.LbSubsetConfig.Size())) - n14, err := m.LbSubsetConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.LbConfig != nil { - nn15, err := m.LbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn15 - } - if m.TransportSocket != nil { - dAtA[i] = 0xc2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.TransportSocket.Size())) - n16, err := m.TransportSocket.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.Metadata != nil { - dAtA[i] = 0xca - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.Metadata.Size())) - n17, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if m.ProtocolSelection != 0 { - dAtA[i] = 0xd0 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.ProtocolSelection)) - } - if m.CommonLbConfig != nil { - dAtA[i] = 0xda - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.CommonLbConfig.Size())) - n18, err := m.CommonLbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if len(m.AltStatName) > 0 { - dAtA[i] = 0xe2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(len(m.AltStatName))) - i += copy(dAtA[i:], m.AltStatName) - } - if m.CommonHttpProtocolOptions != nil { - dAtA[i] = 0xea - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.CommonHttpProtocolOptions.Size())) - n19, err := m.CommonHttpProtocolOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if m.UpstreamConnectionOptions != nil { - dAtA[i] = 0xf2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.UpstreamConnectionOptions.Size())) - n20, err := m.UpstreamConnectionOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if m.CloseConnectionsOnHostHealthFailure { - dAtA[i] = 0xf8 - i++ - dAtA[i] = 0x1 - i++ - if m.CloseConnectionsOnHostHealthFailure { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.DrainConnectionsOnHostRemoval { - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x2 - i++ - if m.DrainConnectionsOnHostRemoval { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.LoadAssignment != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x2 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.LoadAssignment.Size())) - n21, err := m.LoadAssignment.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - if len(m.ExtensionProtocolOptions) > 0 { - keysForExtensionProtocolOptions := make([]string, 0, len(m.ExtensionProtocolOptions)) - for k, _ := range m.ExtensionProtocolOptions { - keysForExtensionProtocolOptions = append(keysForExtensionProtocolOptions, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForExtensionProtocolOptions) - for _, k := range keysForExtensionProtocolOptions { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x2 - i++ - v := m.ExtensionProtocolOptions[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovCds(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovCds(uint64(len(k))) + msgSize - i = encodeVarintCds(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(v.Size())) - n22, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - } - } - if len(m.TypedExtensionProtocolOptions) > 0 { - keysForTypedExtensionProtocolOptions := make([]string, 0, len(m.TypedExtensionProtocolOptions)) - for k, _ := range m.TypedExtensionProtocolOptions { - keysForTypedExtensionProtocolOptions = append(keysForTypedExtensionProtocolOptions, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForTypedExtensionProtocolOptions) - for _, k := range keysForTypedExtensionProtocolOptions { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x2 - i++ - v := m.TypedExtensionProtocolOptions[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovCds(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovCds(uint64(len(k))) + msgSize - i = encodeVarintCds(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(v.Size())) - n23, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_Type) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x10 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.Type)) - return i, nil -} -func (m *Cluster_RingHashLbConfig_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RingHashLbConfig != nil { - dAtA[i] = 0xba - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.RingHashLbConfig.Size())) - n24, err := m.RingHashLbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - return i, nil -} -func (m *Cluster_OriginalDstLbConfig_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.OriginalDstLbConfig != nil { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x2 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.OriginalDstLbConfig.Size())) - n25, err := m.OriginalDstLbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - } - return i, nil -} -func (m *Cluster_LeastRequestLbConfig_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.LeastRequestLbConfig != nil { - dAtA[i] = 0xaa - i++ - dAtA[i] = 0x2 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.LeastRequestLbConfig.Size())) - n26, err := m.LeastRequestLbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - return i, nil -} -func (m *Cluster_ClusterType) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ClusterType != nil { - dAtA[i] = 0xb2 - i++ - dAtA[i] = 0x2 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.ClusterType.Size())) - n27, err := m.ClusterType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - return i, nil -} -func (m *Cluster_CustomClusterType) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_CustomClusterType) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.TypedConfig != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.TypedConfig.Size())) - n28, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_EdsClusterConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_EdsClusterConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.EdsConfig != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.EdsConfig.Size())) - n29, err := m.EdsConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n29 - } - if len(m.ServiceName) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_LbSubsetConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_LbSubsetConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.FallbackPolicy != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.FallbackPolicy)) - } - if m.DefaultSubset != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.DefaultSubset.Size())) - n30, err := m.DefaultSubset.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - } - if len(m.SubsetSelectors) > 0 { - for _, msg := range m.SubsetSelectors { - dAtA[i] = 0x1a - i++ - i = encodeVarintCds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.LocalityWeightAware { - dAtA[i] = 0x20 - i++ - if m.LocalityWeightAware { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.ScaleLocalityWeight { - dAtA[i] = 0x28 - i++ - if m.ScaleLocalityWeight { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.PanicModeAny { - dAtA[i] = 0x30 - i++ - if m.PanicModeAny { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Keys) > 0 { - for _, s := range m.Keys { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_LeastRequestLbConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_LeastRequestLbConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ChoiceCount != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.ChoiceCount.Size())) - n31, err := m.ChoiceCount.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n31 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_RingHashLbConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_RingHashLbConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.MinimumRingSize != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.MinimumRingSize.Size())) - n32, err := m.MinimumRingSize.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - } - if m.HashFunction != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.HashFunction)) - } - if m.MaximumRingSize != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.MaximumRingSize.Size())) - n33, err := m.MaximumRingSize.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_OriginalDstLbConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_OriginalDstLbConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.UseHttpHeader { - dAtA[i] = 0x8 - i++ - if m.UseHttpHeader { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_CommonLbConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_CommonLbConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.HealthyPanicThreshold != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.HealthyPanicThreshold.Size())) - n34, err := m.HealthyPanicThreshold.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - if m.LocalityConfigSpecifier != nil { - nn35, err := m.LocalityConfigSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn35 - } - if m.UpdateMergeWindow != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.UpdateMergeWindow.Size())) - n36, err := m.UpdateMergeWindow.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ZoneAwareLbConfig != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.ZoneAwareLbConfig.Size())) - n37, err := m.ZoneAwareLbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 - } - return i, nil -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.LocalityWeightedLbConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCds(dAtA, i, uint64(m.LocalityWeightedLbConfig.Size())) - n38, err := m.LocalityWeightedLbConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n38 - } - return i, nil -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RoutingEnabled != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.RoutingEnabled.Size())) - n39, err := m.RoutingEnabled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n39 - } - if m.MinClusterSize != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCds(dAtA, i, uint64(m.MinClusterSize.Size())) - n40, err := m.MinClusterSize.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *UpstreamBindConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UpstreamBindConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.SourceAddress != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.SourceAddress.Size())) - n41, err := m.SourceAddress.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *UpstreamConnectionOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UpstreamConnectionOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TcpKeepalive != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintCds(dAtA, i, uint64(m.TcpKeepalive.Size())) - n42, err := m.TcpKeepalive.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintCds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovCds(uint64(l)) - } - if m.ClusterDiscoveryType != nil { - n += m.ClusterDiscoveryType.Size() - } - if m.EdsClusterConfig != nil { - l = m.EdsClusterConfig.Size() - n += 1 + l + sovCds(uint64(l)) - } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.ConnectTimeout) - n += 1 + l + sovCds(uint64(l)) - if m.PerConnectionBufferLimitBytes != nil { - l = m.PerConnectionBufferLimitBytes.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.LbPolicy != 0 { - n += 1 + sovCds(uint64(m.LbPolicy)) - } - if len(m.Hosts) > 0 { - for _, e := range m.Hosts { - l = e.Size() - n += 1 + l + sovCds(uint64(l)) - } - } - if len(m.HealthChecks) > 0 { - for _, e := range m.HealthChecks { - l = e.Size() - n += 1 + l + sovCds(uint64(l)) - } - } - if m.MaxRequestsPerConnection != nil { - l = m.MaxRequestsPerConnection.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.CircuitBreakers != nil { - l = m.CircuitBreakers.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.TlsContext != nil { - l = m.TlsContext.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.HttpProtocolOptions != nil { - l = m.HttpProtocolOptions.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.Http2ProtocolOptions != nil { - l = m.Http2ProtocolOptions.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.DnsRefreshRate != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.DnsRefreshRate) - n += 2 + l + sovCds(uint64(l)) - } - if m.DnsLookupFamily != 0 { - n += 2 + sovCds(uint64(m.DnsLookupFamily)) - } - if len(m.DnsResolvers) > 0 { - for _, e := range m.DnsResolvers { - l = e.Size() - n += 2 + l + sovCds(uint64(l)) - } - } - if m.OutlierDetection != nil { - l = m.OutlierDetection.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.CleanupInterval != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.CleanupInterval) - n += 2 + l + sovCds(uint64(l)) - } - if m.UpstreamBindConfig != nil { - l = m.UpstreamBindConfig.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.LbSubsetConfig != nil { - l = m.LbSubsetConfig.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.LbConfig != nil { - n += m.LbConfig.Size() - } - if m.TransportSocket != nil { - l = m.TransportSocket.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.ProtocolSelection != 0 { - n += 2 + sovCds(uint64(m.ProtocolSelection)) - } - if m.CommonLbConfig != nil { - l = m.CommonLbConfig.Size() - n += 2 + l + sovCds(uint64(l)) - } - l = len(m.AltStatName) - if l > 0 { - n += 2 + l + sovCds(uint64(l)) - } - if m.CommonHttpProtocolOptions != nil { - l = m.CommonHttpProtocolOptions.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.UpstreamConnectionOptions != nil { - l = m.UpstreamConnectionOptions.Size() - n += 2 + l + sovCds(uint64(l)) - } - if m.CloseConnectionsOnHostHealthFailure { - n += 3 - } - if m.DrainConnectionsOnHostRemoval { - n += 3 - } - if m.LoadAssignment != nil { - l = m.LoadAssignment.Size() - n += 2 + l + sovCds(uint64(l)) - } - if len(m.ExtensionProtocolOptions) > 0 { - for k, v := range m.ExtensionProtocolOptions { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovCds(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovCds(uint64(len(k))) + l - n += mapEntrySize + 2 + sovCds(uint64(mapEntrySize)) - } - } - if len(m.TypedExtensionProtocolOptions) > 0 { - for k, v := range m.TypedExtensionProtocolOptions { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovCds(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovCds(uint64(len(k))) + l - n += mapEntrySize + 2 + sovCds(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_Type) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovCds(uint64(m.Type)) - return n -} -func (m *Cluster_RingHashLbConfig_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RingHashLbConfig != nil { - l = m.RingHashLbConfig.Size() - n += 2 + l + sovCds(uint64(l)) - } - return n -} -func (m *Cluster_OriginalDstLbConfig_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.OriginalDstLbConfig != nil { - l = m.OriginalDstLbConfig.Size() - n += 2 + l + sovCds(uint64(l)) - } - return n -} -func (m *Cluster_LeastRequestLbConfig_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.LeastRequestLbConfig != nil { - l = m.LeastRequestLbConfig.Size() - n += 2 + l + sovCds(uint64(l)) - } - return n -} -func (m *Cluster_ClusterType) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ClusterType != nil { - l = m.ClusterType.Size() - n += 2 + l + sovCds(uint64(l)) - } - return n -} -func (m *Cluster_CustomClusterType) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovCds(uint64(l)) - } - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_EdsClusterConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.EdsConfig != nil { - l = m.EdsConfig.Size() - n += 1 + l + sovCds(uint64(l)) - } - l = len(m.ServiceName) - if l > 0 { - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_LbSubsetConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.FallbackPolicy != 0 { - n += 1 + sovCds(uint64(m.FallbackPolicy)) - } - if m.DefaultSubset != nil { - l = m.DefaultSubset.Size() - n += 1 + l + sovCds(uint64(l)) - } - if len(m.SubsetSelectors) > 0 { - for _, e := range m.SubsetSelectors { - l = e.Size() - n += 1 + l + sovCds(uint64(l)) - } - } - if m.LocalityWeightAware { - n += 2 - } - if m.ScaleLocalityWeight { - n += 2 - } - if m.PanicModeAny { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Keys) > 0 { - for _, s := range m.Keys { - l = len(s) - n += 1 + l + sovCds(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_LeastRequestLbConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ChoiceCount != nil { - l = m.ChoiceCount.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_RingHashLbConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.MinimumRingSize != nil { - l = m.MinimumRingSize.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.HashFunction != 0 { - n += 1 + sovCds(uint64(m.HashFunction)) - } - if m.MaximumRingSize != nil { - l = m.MaximumRingSize.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_OriginalDstLbConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.UseHttpHeader { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_CommonLbConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HealthyPanicThreshold != nil { - l = m.HealthyPanicThreshold.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.LocalityConfigSpecifier != nil { - n += m.LocalityConfigSpecifier.Size() - } - if m.UpdateMergeWindow != nil { - l = m.UpdateMergeWindow.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ZoneAwareLbConfig != nil { - l = m.ZoneAwareLbConfig.Size() - n += 1 + l + sovCds(uint64(l)) - } - return n -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.LocalityWeightedLbConfig != nil { - l = m.LocalityWeightedLbConfig.Size() - n += 1 + l + sovCds(uint64(l)) - } - return n -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RoutingEnabled != nil { - l = m.RoutingEnabled.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.MinClusterSize != nil { - l = m.MinClusterSize.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *UpstreamBindConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SourceAddress != nil { - l = m.SourceAddress.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *UpstreamConnectionOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TcpKeepalive != nil { - l = m.TcpKeepalive.Size() - n += 1 + l + sovCds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovCds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozCds(x uint64) (n int) { - return sovCds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Cluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Cluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Cluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) - } - var v Cluster_DiscoveryType - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= Cluster_DiscoveryType(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ClusterDiscoveryType = &Cluster_Type{v} - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EdsClusterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EdsClusterConfig == nil { - m.EdsClusterConfig = &Cluster_EdsClusterConfig{} - } - if err := m.EdsClusterConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.ConnectTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerConnectionBufferLimitBytes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PerConnectionBufferLimitBytes == nil { - m.PerConnectionBufferLimitBytes = &types.UInt32Value{} - } - if err := m.PerConnectionBufferLimitBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LbPolicy", wireType) - } - m.LbPolicy = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.LbPolicy |= Cluster_LbPolicy(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hosts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Hosts = append(m.Hosts, &core.Address{}) - if err := m.Hosts[len(m.Hosts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthChecks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HealthChecks = append(m.HealthChecks, &core.HealthCheck{}) - if err := m.HealthChecks[len(m.HealthChecks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxRequestsPerConnection", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxRequestsPerConnection == nil { - m.MaxRequestsPerConnection = &types.UInt32Value{} - } - if err := m.MaxRequestsPerConnection.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CircuitBreakers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CircuitBreakers == nil { - m.CircuitBreakers = &cluster.CircuitBreakers{} - } - if err := m.CircuitBreakers.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TlsContext == nil { - m.TlsContext = &auth.UpstreamTlsContext{} - } - if err := m.TlsContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HttpProtocolOptions == nil { - m.HttpProtocolOptions = &core.Http1ProtocolOptions{} - } - if err := m.HttpProtocolOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Http2ProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Http2ProtocolOptions == nil { - m.Http2ProtocolOptions = &core.Http2ProtocolOptions{} - } - if err := m.Http2ProtocolOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DnsRefreshRate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DnsRefreshRate == nil { - m.DnsRefreshRate = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.DnsRefreshRate, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 17: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DnsLookupFamily", wireType) - } - m.DnsLookupFamily = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DnsLookupFamily |= Cluster_DnsLookupFamily(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 18: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DnsResolvers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DnsResolvers = append(m.DnsResolvers, &core.Address{}) - if err := m.DnsResolvers[len(m.DnsResolvers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 19: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OutlierDetection", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.OutlierDetection == nil { - m.OutlierDetection = &cluster.OutlierDetection{} - } - if err := m.OutlierDetection.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 20: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CleanupInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CleanupInterval == nil { - m.CleanupInterval = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.CleanupInterval, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 21: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpstreamBindConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UpstreamBindConfig == nil { - m.UpstreamBindConfig = &core.BindConfig{} - } - if err := m.UpstreamBindConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 22: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LbSubsetConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LbSubsetConfig == nil { - m.LbSubsetConfig = &Cluster_LbSubsetConfig{} - } - if err := m.LbSubsetConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 23: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RingHashLbConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster_RingHashLbConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.LbConfig = &Cluster_RingHashLbConfig_{v} - iNdEx = postIndex - case 24: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TransportSocket", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TransportSocket == nil { - m.TransportSocket = &core.TransportSocket{} - } - if err := m.TransportSocket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 25: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &core.Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 26: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ProtocolSelection", wireType) - } - m.ProtocolSelection = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ProtocolSelection |= Cluster_ClusterProtocolSelection(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 27: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommonLbConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CommonLbConfig == nil { - m.CommonLbConfig = &Cluster_CommonLbConfig{} - } - if err := m.CommonLbConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 28: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AltStatName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AltStatName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 29: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CommonHttpProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CommonHttpProtocolOptions == nil { - m.CommonHttpProtocolOptions = &core.HttpProtocolOptions{} - } - if err := m.CommonHttpProtocolOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 30: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpstreamConnectionOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UpstreamConnectionOptions == nil { - m.UpstreamConnectionOptions = &UpstreamConnectionOptions{} - } - if err := m.UpstreamConnectionOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 31: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CloseConnectionsOnHostHealthFailure", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.CloseConnectionsOnHostHealthFailure = bool(v != 0) - case 32: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DrainConnectionsOnHostRemoval", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.DrainConnectionsOnHostRemoval = bool(v != 0) - case 33: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LoadAssignment", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LoadAssignment == nil { - m.LoadAssignment = &ClusterLoadAssignment{} - } - if err := m.LoadAssignment.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 34: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OriginalDstLbConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster_OriginalDstLbConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.LbConfig = &Cluster_OriginalDstLbConfig_{v} - iNdEx = postIndex - case 35: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExtensionProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ExtensionProtocolOptions == nil { - m.ExtensionProtocolOptions = make(map[string]*types.Struct) - } - var mapkey string - var mapvalue *types.Struct - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthCds - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthCds - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthCds - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthCds - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Struct{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.ExtensionProtocolOptions[mapkey] = mapvalue - iNdEx = postIndex - case 36: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedExtensionProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TypedExtensionProtocolOptions == nil { - m.TypedExtensionProtocolOptions = make(map[string]*types.Any) - } - var mapkey string - var mapvalue *types.Any - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthCds - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthCds - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthCds - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthCds - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Any{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.TypedExtensionProtocolOptions[mapkey] = mapvalue - iNdEx = postIndex - case 37: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LeastRequestLbConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster_LeastRequestLbConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.LbConfig = &Cluster_LeastRequestLbConfig_{v} - iNdEx = postIndex - case 38: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterType", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster_CustomClusterType{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ClusterDiscoveryType = &Cluster_ClusterType{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_CustomClusterType) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CustomClusterType: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CustomClusterType: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TypedConfig == nil { - m.TypedConfig = &types.Any{} - } - if err := m.TypedConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_EdsClusterConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EdsClusterConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EdsClusterConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EdsConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EdsConfig == nil { - m.EdsConfig = &core.ConfigSource{} - } - if err := m.EdsConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_LbSubsetConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LbSubsetConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LbSubsetConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FallbackPolicy", wireType) - } - m.FallbackPolicy = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.FallbackPolicy |= Cluster_LbSubsetConfig_LbSubsetFallbackPolicy(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultSubset", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DefaultSubset == nil { - m.DefaultSubset = &types.Struct{} - } - if err := m.DefaultSubset.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SubsetSelectors", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SubsetSelectors = append(m.SubsetSelectors, &Cluster_LbSubsetConfig_LbSubsetSelector{}) - if err := m.SubsetSelectors[len(m.SubsetSelectors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalityWeightAware", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.LocalityWeightAware = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ScaleLocalityWeight", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ScaleLocalityWeight = bool(v != 0) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PanicModeAny", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.PanicModeAny = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LbSubsetSelector: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LbSubsetSelector: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_LeastRequestLbConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LeastRequestLbConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LeastRequestLbConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChoiceCount", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ChoiceCount == nil { - m.ChoiceCount = &types.UInt32Value{} - } - if err := m.ChoiceCount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_RingHashLbConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RingHashLbConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RingHashLbConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinimumRingSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MinimumRingSize == nil { - m.MinimumRingSize = &types.UInt64Value{} - } - if err := m.MinimumRingSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HashFunction", wireType) - } - m.HashFunction = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HashFunction |= Cluster_RingHashLbConfig_HashFunction(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaximumRingSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaximumRingSize == nil { - m.MaximumRingSize = &types.UInt64Value{} - } - if err := m.MaximumRingSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_OriginalDstLbConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OriginalDstLbConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OriginalDstLbConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UseHttpHeader", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.UseHttpHeader = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_CommonLbConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CommonLbConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CommonLbConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthyPanicThreshold", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HealthyPanicThreshold == nil { - m.HealthyPanicThreshold = &_type.Percent{} - } - if err := m.HealthyPanicThreshold.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ZoneAwareLbConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster_CommonLbConfig_ZoneAwareLbConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.LocalityConfigSpecifier = &Cluster_CommonLbConfig_ZoneAwareLbConfig_{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalityWeightedLbConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Cluster_CommonLbConfig_LocalityWeightedLbConfig{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.LocalityConfigSpecifier = &Cluster_CommonLbConfig_LocalityWeightedLbConfig_{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpdateMergeWindow", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UpdateMergeWindow == nil { - m.UpdateMergeWindow = &types.Duration{} - } - if err := m.UpdateMergeWindow.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ZoneAwareLbConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ZoneAwareLbConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RoutingEnabled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RoutingEnabled == nil { - m.RoutingEnabled = &_type.Percent{} - } - if err := m.RoutingEnabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinClusterSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MinClusterSize == nil { - m.MinClusterSize = &types.UInt64Value{} - } - if err := m.MinClusterSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LocalityWeightedLbConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LocalityWeightedLbConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpstreamBindConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpstreamBindConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpstreamBindConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceAddress", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SourceAddress == nil { - m.SourceAddress = &core.Address{} - } - if err := m.SourceAddress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpstreamConnectionOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpstreamConnectionOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpstreamConnectionOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TcpKeepalive", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TcpKeepalive == nil { - m.TcpKeepalive = &core.TcpKeepalive{} - } - if err := m.TcpKeepalive.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipCds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthCds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthCds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipCds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthCds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") +var _ClusterDiscoveryService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "envoy.api.v2.ClusterDiscoveryService", + HandlerType: (*ClusterDiscoveryServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FetchClusters", + Handler: _ClusterDiscoveryService_FetchClusters_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamClusters", + Handler: _ClusterDiscoveryService_StreamClusters_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "DeltaClusters", + Handler: _ClusterDiscoveryService_DeltaClusters_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "envoy/api/v2/cds.proto", } - -var ( - ErrInvalidLengthCds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowCds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/cds.proto -package v2 +package envoy_api_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,1536 +30,15 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on Cluster with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Cluster) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return ClusterValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - // no validation rules for AltStatName - - { - tmp := m.GetEdsClusterConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "EdsClusterConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if true { - dur := m.GetConnectTimeout() - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return ClusterValidationError{ - field: "ConnectTimeout", - reason: "value must be greater than 0s", - } - } - - } - - { - tmp := m.GetPerConnectionBufferLimitBytes() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "PerConnectionBufferLimitBytes", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if _, ok := Cluster_LbPolicy_name[int32(m.GetLbPolicy())]; !ok { - return ClusterValidationError{ - field: "LbPolicy", - reason: "value must be one of the defined enum values", - } - } - - for idx, item := range m.GetHosts() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("Hosts[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetLoadAssignment() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "LoadAssignment", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetHealthChecks() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("HealthChecks[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetMaxRequestsPerConnection() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "MaxRequestsPerConnection", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetCircuitBreakers() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "CircuitBreakers", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetTlsContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "TlsContext", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetCommonHttpProtocolOptions() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "CommonHttpProtocolOptions", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetHttpProtocolOptions() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "HttpProtocolOptions", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetHttp2ProtocolOptions() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "Http2ProtocolOptions", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for ExtensionProtocolOptions - - // no validation rules for TypedExtensionProtocolOptions - - if d := m.GetDnsRefreshRate(); d != nil { - dur := *d - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return ClusterValidationError{ - field: "DnsRefreshRate", - reason: "value must be greater than 0s", - } - } - - } - - if _, ok := Cluster_DnsLookupFamily_name[int32(m.GetDnsLookupFamily())]; !ok { - return ClusterValidationError{ - field: "DnsLookupFamily", - reason: "value must be one of the defined enum values", - } - } - - for idx, item := range m.GetDnsResolvers() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("DnsResolvers[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetOutlierDetection() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "OutlierDetection", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if d := m.GetCleanupInterval(); d != nil { - dur := *d - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return ClusterValidationError{ - field: "CleanupInterval", - reason: "value must be greater than 0s", - } - } - - } - - { - tmp := m.GetUpstreamBindConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "UpstreamBindConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetLbSubsetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "LbSubsetConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetCommonLbConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "CommonLbConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetTransportSocket() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "TransportSocket", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMetadata() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "Metadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for ProtocolSelection - - { - tmp := m.GetUpstreamConnectionOptions() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "UpstreamConnectionOptions", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for CloseConnectionsOnHostHealthFailure - - // no validation rules for DrainConnectionsOnHostRemoval - - switch m.ClusterDiscoveryType.(type) { - - case *Cluster_Type: - - if _, ok := Cluster_DiscoveryType_name[int32(m.GetType())]; !ok { - return ClusterValidationError{ - field: "Type", - reason: "value must be one of the defined enum values", - } - } - - case *Cluster_ClusterType: - - { - tmp := m.GetClusterType() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "ClusterType", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - switch m.LbConfig.(type) { - - case *Cluster_RingHashLbConfig_: - - { - tmp := m.GetRingHashLbConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "RingHashLbConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *Cluster_OriginalDstLbConfig_: - - { - tmp := m.GetOriginalDstLbConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "OriginalDstLbConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *Cluster_LeastRequestLbConfig_: - - { - tmp := m.GetLeastRequestLbConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: "LeastRequestLbConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// ClusterValidationError is the validation error returned by Cluster.Validate -// if the designated constraints aren't met. -type ClusterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ClusterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ClusterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ClusterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ClusterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ClusterValidationError) ErrorName() string { return "ClusterValidationError" } - -// Error satisfies the builtin error interface -func (e ClusterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ClusterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ClusterValidationError{} - -// Validate checks the field values on UpstreamBindConfig with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *UpstreamBindConfig) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetSourceAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamBindConfigValidationError{ - field: "SourceAddress", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// UpstreamBindConfigValidationError is the validation error returned by -// UpstreamBindConfig.Validate if the designated constraints aren't met. -type UpstreamBindConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e UpstreamBindConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e UpstreamBindConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e UpstreamBindConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e UpstreamBindConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e UpstreamBindConfigValidationError) ErrorName() string { - return "UpstreamBindConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e UpstreamBindConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sUpstreamBindConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = UpstreamBindConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = UpstreamBindConfigValidationError{} - -// Validate checks the field values on UpstreamConnectionOptions with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *UpstreamConnectionOptions) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetTcpKeepalive() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamConnectionOptionsValidationError{ - field: "TcpKeepalive", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// UpstreamConnectionOptionsValidationError is the validation error returned by -// UpstreamConnectionOptions.Validate if the designated constraints aren't met. -type UpstreamConnectionOptionsValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e UpstreamConnectionOptionsValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e UpstreamConnectionOptionsValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e UpstreamConnectionOptionsValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e UpstreamConnectionOptionsValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e UpstreamConnectionOptionsValidationError) ErrorName() string { - return "UpstreamConnectionOptionsValidationError" -} - -// Error satisfies the builtin error interface -func (e UpstreamConnectionOptionsValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sUpstreamConnectionOptions.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = UpstreamConnectionOptionsValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = UpstreamConnectionOptionsValidationError{} - -// Validate checks the field values on Cluster_CustomClusterType with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_CustomClusterType) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return Cluster_CustomClusterTypeValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CustomClusterTypeValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// Cluster_CustomClusterTypeValidationError is the validation error returned by -// Cluster_CustomClusterType.Validate if the designated constraints aren't met. -type Cluster_CustomClusterTypeValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_CustomClusterTypeValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_CustomClusterTypeValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_CustomClusterTypeValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_CustomClusterTypeValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_CustomClusterTypeValidationError) ErrorName() string { - return "Cluster_CustomClusterTypeValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_CustomClusterTypeValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_CustomClusterType.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_CustomClusterTypeValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_CustomClusterTypeValidationError{} - -// Validate checks the field values on Cluster_EdsClusterConfig with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_EdsClusterConfig) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetEdsConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_EdsClusterConfigValidationError{ - field: "EdsConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for ServiceName - - return nil -} - -// Cluster_EdsClusterConfigValidationError is the validation error returned by -// Cluster_EdsClusterConfig.Validate if the designated constraints aren't met. -type Cluster_EdsClusterConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_EdsClusterConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_EdsClusterConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_EdsClusterConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_EdsClusterConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_EdsClusterConfigValidationError) ErrorName() string { - return "Cluster_EdsClusterConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_EdsClusterConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_EdsClusterConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_EdsClusterConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_EdsClusterConfigValidationError{} - -// Validate checks the field values on Cluster_LbSubsetConfig with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_LbSubsetConfig) Validate() error { - if m == nil { - return nil - } - - if _, ok := Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name[int32(m.GetFallbackPolicy())]; !ok { - return Cluster_LbSubsetConfigValidationError{ - field: "FallbackPolicy", - reason: "value must be one of the defined enum values", - } - } - - { - tmp := m.GetDefaultSubset() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_LbSubsetConfigValidationError{ - field: "DefaultSubset", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetSubsetSelectors() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_LbSubsetConfigValidationError{ - field: fmt.Sprintf("SubsetSelectors[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for LocalityWeightAware - - // no validation rules for ScaleLocalityWeight - - // no validation rules for PanicModeAny - - return nil -} - -// Cluster_LbSubsetConfigValidationError is the validation error returned by -// Cluster_LbSubsetConfig.Validate if the designated constraints aren't met. -type Cluster_LbSubsetConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_LbSubsetConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_LbSubsetConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_LbSubsetConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_LbSubsetConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_LbSubsetConfigValidationError) ErrorName() string { - return "Cluster_LbSubsetConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_LbSubsetConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_LbSubsetConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_LbSubsetConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_LbSubsetConfigValidationError{} - -// Validate checks the field values on Cluster_LeastRequestLbConfig with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_LeastRequestLbConfig) Validate() error { - if m == nil { - return nil - } - - if wrapper := m.GetChoiceCount(); wrapper != nil { - - if wrapper.GetValue() < 2 { - return Cluster_LeastRequestLbConfigValidationError{ - field: "ChoiceCount", - reason: "value must be greater than or equal to 2", - } - } - - } - - return nil -} - -// Cluster_LeastRequestLbConfigValidationError is the validation error returned -// by Cluster_LeastRequestLbConfig.Validate if the designated constraints -// aren't met. -type Cluster_LeastRequestLbConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_LeastRequestLbConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_LeastRequestLbConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_LeastRequestLbConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_LeastRequestLbConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_LeastRequestLbConfigValidationError) ErrorName() string { - return "Cluster_LeastRequestLbConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_LeastRequestLbConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_LeastRequestLbConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_LeastRequestLbConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_LeastRequestLbConfigValidationError{} - -// Validate checks the field values on Cluster_RingHashLbConfig with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_RingHashLbConfig) Validate() error { - if m == nil { - return nil - } - - if wrapper := m.GetMinimumRingSize(); wrapper != nil { - - if wrapper.GetValue() > 8388608 { - return Cluster_RingHashLbConfigValidationError{ - field: "MinimumRingSize", - reason: "value must be less than or equal to 8388608", - } - } - - } - - if _, ok := Cluster_RingHashLbConfig_HashFunction_name[int32(m.GetHashFunction())]; !ok { - return Cluster_RingHashLbConfigValidationError{ - field: "HashFunction", - reason: "value must be one of the defined enum values", - } - } - - if wrapper := m.GetMaximumRingSize(); wrapper != nil { - - if wrapper.GetValue() > 8388608 { - return Cluster_RingHashLbConfigValidationError{ - field: "MaximumRingSize", - reason: "value must be less than or equal to 8388608", - } - } - - } - - return nil -} - -// Cluster_RingHashLbConfigValidationError is the validation error returned by -// Cluster_RingHashLbConfig.Validate if the designated constraints aren't met. -type Cluster_RingHashLbConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_RingHashLbConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_RingHashLbConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_RingHashLbConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_RingHashLbConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_RingHashLbConfigValidationError) ErrorName() string { - return "Cluster_RingHashLbConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_RingHashLbConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_RingHashLbConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_RingHashLbConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_RingHashLbConfigValidationError{} - -// Validate checks the field values on Cluster_OriginalDstLbConfig with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_OriginalDstLbConfig) Validate() error { - if m == nil { - return nil - } - - // no validation rules for UseHttpHeader - - return nil -} - -// Cluster_OriginalDstLbConfigValidationError is the validation error returned -// by Cluster_OriginalDstLbConfig.Validate if the designated constraints -// aren't met. -type Cluster_OriginalDstLbConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_OriginalDstLbConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_OriginalDstLbConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_OriginalDstLbConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_OriginalDstLbConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_OriginalDstLbConfigValidationError) ErrorName() string { - return "Cluster_OriginalDstLbConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_OriginalDstLbConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_OriginalDstLbConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_OriginalDstLbConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_OriginalDstLbConfigValidationError{} - -// Validate checks the field values on Cluster_CommonLbConfig with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Cluster_CommonLbConfig) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetHealthyPanicThreshold() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CommonLbConfigValidationError{ - field: "HealthyPanicThreshold", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetUpdateMergeWindow() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CommonLbConfigValidationError{ - field: "UpdateMergeWindow", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - switch m.LocalityConfigSpecifier.(type) { - - case *Cluster_CommonLbConfig_ZoneAwareLbConfig_: - - { - tmp := m.GetZoneAwareLbConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CommonLbConfigValidationError{ - field: "ZoneAwareLbConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *Cluster_CommonLbConfig_LocalityWeightedLbConfig_: - - { - tmp := m.GetLocalityWeightedLbConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CommonLbConfigValidationError{ - field: "LocalityWeightedLbConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// Cluster_CommonLbConfigValidationError is the validation error returned by -// Cluster_CommonLbConfig.Validate if the designated constraints aren't met. -type Cluster_CommonLbConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_CommonLbConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_CommonLbConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_CommonLbConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_CommonLbConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_CommonLbConfigValidationError) ErrorName() string { - return "Cluster_CommonLbConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_CommonLbConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_CommonLbConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_CommonLbConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_CommonLbConfigValidationError{} - -// Validate checks the field values on Cluster_LbSubsetConfig_LbSubsetSelector -// with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. -func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Validate() error { - if m == nil { - return nil - } - - return nil -} - -// Cluster_LbSubsetConfig_LbSubsetSelectorValidationError is the validation -// error returned by Cluster_LbSubsetConfig_LbSubsetSelector.Validate if the -// designated constraints aren't met. -type Cluster_LbSubsetConfig_LbSubsetSelectorValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) ErrorName() string { - return "Cluster_LbSubsetConfig_LbSubsetSelectorValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_LbSubsetConfig_LbSubsetSelector.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_LbSubsetConfig_LbSubsetSelectorValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_LbSubsetConfig_LbSubsetSelectorValidationError{} - -// Validate checks the field values on Cluster_CommonLbConfig_ZoneAwareLbConfig -// with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. -func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetRoutingEnabled() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{ - field: "RoutingEnabled", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMinClusterSize() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{ - field: "MinClusterSize", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError is the validation -// error returned by Cluster_CommonLbConfig_ZoneAwareLbConfig.Validate if the -// designated constraints aren't met. -type Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Key() bool { return e.key } +// define the regex for a UUID once up-front +var _cds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") -// ErrorName returns error name. -func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) ErrorName() string { - return "Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCluster_CommonLbConfig_ZoneAwareLbConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{} - -// Validate checks the field values on -// Cluster_CommonLbConfig_LocalityWeightedLbConfig with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Validate() error { +// Validate checks the field values on CdsDummy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *CdsDummy) Validate() error { if m == nil { return nil } @@ -1567,11 +46,9 @@ return nil } -// Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError is the -// validation error returned by -// Cluster_CommonLbConfig_LocalityWeightedLbConfig.Validate if the designated -// constraints aren't met. -type Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError struct { +// CdsDummyValidationError is the validation error returned by +// CdsDummy.Validate if the designated constraints aren't met. +type CdsDummyValidationError struct { field string reason string cause error @@ -1579,26 +56,22 @@ } // Field function returns field value. -func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Field() string { return e.field } +func (e CdsDummyValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Reason() string { - return e.reason -} +func (e CdsDummyValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Cause() error { return e.cause } +func (e CdsDummyValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Key() bool { return e.key } +func (e CdsDummyValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) ErrorName() string { - return "Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError" -} +func (e CdsDummyValidationError) ErrorName() string { return "CdsDummyValidationError" } // Error satisfies the builtin error interface -func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Error() string { +func (e CdsDummyValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1610,14 +83,14 @@ } return fmt.Sprintf( - "invalid %sCluster_CommonLbConfig_LocalityWeightedLbConfig.%s: %s%s", + "invalid %sCdsDummy.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError{} +var _ error = CdsDummyValidationError{} var _ interface { Field() string @@ -1625,4 +98,4 @@ Key() bool Cause() error ErrorName() string -} = Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError{} +} = CdsDummyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,17 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/cluster/circuit_breaker.proto -package cluster +package envoy_api_v2_cluster import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -25,16 +23,9 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// :ref:`Circuit breaking` settings can be -// specified individually for each defined priority. type CircuitBreakers struct { - // If multiple :ref:`Thresholds` - // are defined with the same :ref:`RoutingPriority`, - // the first one in the list is used. If no Thresholds is defined for a given - // :ref:`RoutingPriority`, the default values - // are used. Thresholds []*CircuitBreakers_Thresholds `protobuf:"bytes,1,rep,name=thresholds,proto3" json:"thresholds,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -47,26 +38,18 @@ func (*CircuitBreakers) Descriptor() ([]byte, []int) { return fileDescriptor_89bc8d4e21efdd79, []int{0} } + func (m *CircuitBreakers) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CircuitBreakers.Unmarshal(m, b) } func (m *CircuitBreakers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CircuitBreakers.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CircuitBreakers.Marshal(b, m, deterministic) } func (m *CircuitBreakers) XXX_Merge(src proto.Message) { xxx_messageInfo_CircuitBreakers.Merge(m, src) } func (m *CircuitBreakers) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CircuitBreakers.Size(m) } func (m *CircuitBreakers) XXX_DiscardUnknown() { xxx_messageInfo_CircuitBreakers.DiscardUnknown(m) @@ -81,39 +64,18 @@ return nil } -// A Thresholds defines CircuitBreaker settings for a -// :ref:`RoutingPriority`. type CircuitBreakers_Thresholds struct { - // The :ref:`RoutingPriority` - // the specified CircuitBreaker settings apply to. - // [#comment:TODO(htuch): add (validate.rules).enum.defined_only = true once - // https://github.com/lyft/protoc-gen-validate/issues/42 is resolved.] - Priority core.RoutingPriority `protobuf:"varint,1,opt,name=priority,proto3,enum=envoy.api.v2.core.RoutingPriority" json:"priority,omitempty"` - // The maximum number of connections that Envoy will make to the upstream - // cluster. If not specified, the default is 1024. - MaxConnections *types.UInt32Value `protobuf:"bytes,2,opt,name=max_connections,json=maxConnections,proto3" json:"max_connections,omitempty"` - // The maximum number of pending requests that Envoy will allow to the - // upstream cluster. If not specified, the default is 1024. - MaxPendingRequests *types.UInt32Value `protobuf:"bytes,3,opt,name=max_pending_requests,json=maxPendingRequests,proto3" json:"max_pending_requests,omitempty"` - // The maximum number of parallel requests that Envoy will make to the - // upstream cluster. If not specified, the default is 1024. - MaxRequests *types.UInt32Value `protobuf:"bytes,4,opt,name=max_requests,json=maxRequests,proto3" json:"max_requests,omitempty"` - // The maximum number of parallel retries that Envoy will allow to the - // upstream cluster. If not specified, the default is 3. - MaxRetries *types.UInt32Value `protobuf:"bytes,5,opt,name=max_retries,json=maxRetries,proto3" json:"max_retries,omitempty"` - // If track_remaining is true, then stats will be published that expose - // the number of resources remaining until the circuit breakers open. If - // not specified, the default is false. - TrackRemaining bool `protobuf:"varint,6,opt,name=track_remaining,json=trackRemaining,proto3" json:"track_remaining,omitempty"` - // The maximum number of connection pools per cluster that Envoy will concurrently support at - // once. If not specified, the default is unlimited. Set this for clusters which create a - // large number of connection pools. See - // :ref:`Circuit Breaking ` for - // more details. - MaxConnectionPools *types.UInt32Value `protobuf:"bytes,7,opt,name=max_connection_pools,json=maxConnectionPools,proto3" json:"max_connection_pools,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Priority core.RoutingPriority `protobuf:"varint,1,opt,name=priority,proto3,enum=envoy.api.v2.core.RoutingPriority" json:"priority,omitempty"` + MaxConnections *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_connections,json=maxConnections,proto3" json:"max_connections,omitempty"` + MaxPendingRequests *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=max_pending_requests,json=maxPendingRequests,proto3" json:"max_pending_requests,omitempty"` + MaxRequests *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=max_requests,json=maxRequests,proto3" json:"max_requests,omitempty"` + MaxRetries *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=max_retries,json=maxRetries,proto3" json:"max_retries,omitempty"` + RetryBudget *CircuitBreakers_Thresholds_RetryBudget `protobuf:"bytes,8,opt,name=retry_budget,json=retryBudget,proto3" json:"retry_budget,omitempty"` + TrackRemaining bool `protobuf:"varint,6,opt,name=track_remaining,json=trackRemaining,proto3" json:"track_remaining,omitempty"` + MaxConnectionPools *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_connection_pools,json=maxConnectionPools,proto3" json:"max_connection_pools,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CircuitBreakers_Thresholds) Reset() { *m = CircuitBreakers_Thresholds{} } @@ -122,26 +84,18 @@ func (*CircuitBreakers_Thresholds) Descriptor() ([]byte, []int) { return fileDescriptor_89bc8d4e21efdd79, []int{0, 0} } + func (m *CircuitBreakers_Thresholds) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CircuitBreakers_Thresholds.Unmarshal(m, b) } func (m *CircuitBreakers_Thresholds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CircuitBreakers_Thresholds.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CircuitBreakers_Thresholds.Marshal(b, m, deterministic) } func (m *CircuitBreakers_Thresholds) XXX_Merge(src proto.Message) { xxx_messageInfo_CircuitBreakers_Thresholds.Merge(m, src) } func (m *CircuitBreakers_Thresholds) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CircuitBreakers_Thresholds.Size(m) } func (m *CircuitBreakers_Thresholds) XXX_DiscardUnknown() { xxx_messageInfo_CircuitBreakers_Thresholds.DiscardUnknown(m) @@ -156,34 +110,41 @@ return core.RoutingPriority_DEFAULT } -func (m *CircuitBreakers_Thresholds) GetMaxConnections() *types.UInt32Value { +func (m *CircuitBreakers_Thresholds) GetMaxConnections() *wrappers.UInt32Value { if m != nil { return m.MaxConnections } return nil } -func (m *CircuitBreakers_Thresholds) GetMaxPendingRequests() *types.UInt32Value { +func (m *CircuitBreakers_Thresholds) GetMaxPendingRequests() *wrappers.UInt32Value { if m != nil { return m.MaxPendingRequests } return nil } -func (m *CircuitBreakers_Thresholds) GetMaxRequests() *types.UInt32Value { +func (m *CircuitBreakers_Thresholds) GetMaxRequests() *wrappers.UInt32Value { if m != nil { return m.MaxRequests } return nil } -func (m *CircuitBreakers_Thresholds) GetMaxRetries() *types.UInt32Value { +func (m *CircuitBreakers_Thresholds) GetMaxRetries() *wrappers.UInt32Value { if m != nil { return m.MaxRetries } return nil } +func (m *CircuitBreakers_Thresholds) GetRetryBudget() *CircuitBreakers_Thresholds_RetryBudget { + if m != nil { + return m.RetryBudget + } + return nil +} + func (m *CircuitBreakers_Thresholds) GetTrackRemaining() bool { if m != nil { return m.TrackRemaining @@ -191,796 +152,110 @@ return false } -func (m *CircuitBreakers_Thresholds) GetMaxConnectionPools() *types.UInt32Value { +func (m *CircuitBreakers_Thresholds) GetMaxConnectionPools() *wrappers.UInt32Value { if m != nil { return m.MaxConnectionPools } return nil } -func init() { - proto.RegisterType((*CircuitBreakers)(nil), "envoy.api.v2.cluster.CircuitBreakers") - proto.RegisterType((*CircuitBreakers_Thresholds)(nil), "envoy.api.v2.cluster.CircuitBreakers.Thresholds") +type CircuitBreakers_Thresholds_RetryBudget struct { + BudgetPercent *_type.Percent `protobuf:"bytes,1,opt,name=budget_percent,json=budgetPercent,proto3" json:"budget_percent,omitempty"` + MinRetryConcurrency *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=min_retry_concurrency,json=minRetryConcurrency,proto3" json:"min_retry_concurrency,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func init() { - proto.RegisterFile("envoy/api/v2/cluster/circuit_breaker.proto", fileDescriptor_89bc8d4e21efdd79) +func (m *CircuitBreakers_Thresholds_RetryBudget) Reset() { + *m = CircuitBreakers_Thresholds_RetryBudget{} +} +func (m *CircuitBreakers_Thresholds_RetryBudget) String() string { return proto.CompactTextString(m) } +func (*CircuitBreakers_Thresholds_RetryBudget) ProtoMessage() {} +func (*CircuitBreakers_Thresholds_RetryBudget) Descriptor() ([]byte, []int) { + return fileDescriptor_89bc8d4e21efdd79, []int{0, 0, 0} } -var fileDescriptor_89bc8d4e21efdd79 = []byte{ - // 447 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6f, 0xd3, 0x30, - 0x14, 0x80, 0xe5, 0x75, 0x6c, 0x93, 0x8b, 0x5a, 0x29, 0x54, 0x28, 0xaa, 0xa6, 0xa8, 0xea, 0x85, - 0x8a, 0x83, 0x83, 0xb2, 0x33, 0x20, 0x5a, 0xed, 0xc0, 0x65, 0x8a, 0x02, 0xec, 0xc0, 0x25, 0x72, - 0x33, 0x93, 0x59, 0x4b, 0xfc, 0xcc, 0xb3, 0x53, 0xd2, 0x7f, 0x84, 0xf8, 0x19, 0x9c, 0x38, 0xf2, - 0x03, 0x38, 0xa0, 0xfe, 0x12, 0x94, 0x38, 0x6d, 0xd9, 0xb4, 0x43, 0x6f, 0xce, 0x7b, 0xef, 0xfb, - 0xf2, 0xfc, 0xfc, 0xe8, 0x4b, 0xa1, 0x56, 0xb0, 0x0e, 0xb9, 0x96, 0xe1, 0x2a, 0x0a, 0xb3, 0xa2, - 0x32, 0x56, 0x60, 0x98, 0x49, 0xcc, 0x2a, 0x69, 0xd3, 0x25, 0x0a, 0x7e, 0x27, 0x90, 0x69, 0x04, - 0x0b, 0xde, 0xa8, 0xad, 0x65, 0x5c, 0x4b, 0xb6, 0x8a, 0x58, 0x57, 0x3b, 0x3e, 0xbf, 0x6f, 0x00, - 0x14, 0xe1, 0x92, 0x1b, 0xe1, 0x98, 0x71, 0x90, 0x03, 0xe4, 0x85, 0x08, 0xdb, 0xaf, 0x65, 0xf5, - 0x25, 0xfc, 0x86, 0x5c, 0x6b, 0x81, 0xa6, 0xcb, 0x8f, 0x72, 0xc8, 0xa1, 0x3d, 0x86, 0xcd, 0xc9, - 0x45, 0xa7, 0x3f, 0x8f, 0xe9, 0x70, 0xe1, 0x7a, 0x98, 0xbb, 0x16, 0x8c, 0x17, 0x53, 0x6a, 0x6f, - 0x51, 0x98, 0x5b, 0x28, 0x6e, 0x8c, 0x4f, 0x26, 0xbd, 0x59, 0x3f, 0x7a, 0xc5, 0x1e, 0x6b, 0x89, - 0x3d, 0x40, 0xd9, 0xc7, 0x1d, 0x97, 0xfc, 0xe7, 0x18, 0xff, 0xe9, 0x51, 0xba, 0x4f, 0x79, 0x6f, - 0xe8, 0x99, 0x46, 0x09, 0x28, 0xed, 0xda, 0x27, 0x13, 0x32, 0x1b, 0x44, 0xd3, 0x07, 0x7a, 0x40, - 0xc1, 0x12, 0xa8, 0xac, 0x54, 0x79, 0xdc, 0x55, 0x26, 0x3b, 0xc6, 0xbb, 0xa4, 0xc3, 0x92, 0xd7, - 0x69, 0x06, 0x4a, 0x89, 0xcc, 0x4a, 0x50, 0xc6, 0x3f, 0x9a, 0x90, 0x59, 0x3f, 0x3a, 0x67, 0x6e, - 0x08, 0x6c, 0x3b, 0x04, 0xf6, 0xe9, 0xbd, 0xb2, 0x17, 0xd1, 0x35, 0x2f, 0x2a, 0x91, 0x0c, 0x4a, - 0x5e, 0x2f, 0xf6, 0x8c, 0x77, 0x45, 0x47, 0x8d, 0x46, 0x0b, 0x75, 0x23, 0x55, 0x9e, 0xa2, 0xf8, - 0x5a, 0x09, 0x63, 0x8d, 0xdf, 0x3b, 0xc0, 0xe5, 0x95, 0xbc, 0x8e, 0x1d, 0x98, 0x74, 0x9c, 0xf7, - 0x96, 0x3e, 0x6d, 0x7c, 0x3b, 0xcf, 0xf1, 0x01, 0x9e, 0x7e, 0xc9, 0xeb, 0x9d, 0xe0, 0x35, 0xed, - 0x3b, 0x81, 0x45, 0x29, 0x8c, 0xff, 0xe4, 0x00, 0x9e, 0xb6, 0x7c, 0x5b, 0xef, 0xbd, 0xa0, 0x43, - 0x8b, 0x3c, 0xbb, 0x4b, 0x51, 0x94, 0x5c, 0x2a, 0xa9, 0x72, 0xff, 0x64, 0x42, 0x66, 0x67, 0xc9, - 0xa0, 0x0d, 0x27, 0xdb, 0xe8, 0xf6, 0xe2, 0xfb, 0xf9, 0xa5, 0x1a, 0xa0, 0x30, 0xfe, 0xe9, 0x81, - 0x17, 0xdf, 0x0f, 0x31, 0x6e, 0xb8, 0x79, 0xf9, 0x7d, 0x13, 0x90, 0x5f, 0x9b, 0x80, 0xfc, 0xde, - 0x04, 0xe4, 0xef, 0x26, 0x20, 0x74, 0x2a, 0xc1, 0xbd, 0xa8, 0x46, 0xa8, 0xd7, 0x8f, 0xee, 0xce, - 0xfc, 0xd9, 0xfd, 0xe5, 0x89, 0x9b, 0xbf, 0xc5, 0xe4, 0xf3, 0x69, 0x97, 0xff, 0x71, 0xf4, 0xfc, - 0xb2, 0xc5, 0xde, 0x69, 0xc9, 0xae, 0x23, 0xb6, 0x70, 0xe1, 0xab, 0x0f, 0xcb, 0x93, 0xb6, 0xb1, - 0x8b, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb1, 0x80, 0x8d, 0x1f, 0x52, 0x03, 0x00, 0x00, -} - -func (this *CircuitBreakers) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CircuitBreakers) - if !ok { - that2, ok := that.(CircuitBreakers) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.Thresholds) != len(that1.Thresholds) { - return false - } - for i := range this.Thresholds { - if !this.Thresholds[i].Equal(that1.Thresholds[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *CircuitBreakers_Thresholds) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CircuitBreakers_Thresholds) - if !ok { - that2, ok := that.(CircuitBreakers_Thresholds) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Priority != that1.Priority { - return false - } - if !this.MaxConnections.Equal(that1.MaxConnections) { - return false - } - if !this.MaxPendingRequests.Equal(that1.MaxPendingRequests) { - return false - } - if !this.MaxRequests.Equal(that1.MaxRequests) { - return false - } - if !this.MaxRetries.Equal(that1.MaxRetries) { - return false - } - if this.TrackRemaining != that1.TrackRemaining { - return false - } - if !this.MaxConnectionPools.Equal(that1.MaxConnectionPools) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *CircuitBreakers) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CircuitBreakers) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Thresholds) > 0 { - for _, msg := range m.Thresholds { - dAtA[i] = 0xa - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CircuitBreakers_Thresholds) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CircuitBreakers_Thresholds) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Priority != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(m.Priority)) - } - if m.MaxConnections != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(m.MaxConnections.Size())) - n1, err := m.MaxConnections.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.MaxPendingRequests != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(m.MaxPendingRequests.Size())) - n2, err := m.MaxPendingRequests.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.MaxRequests != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(m.MaxRequests.Size())) - n3, err := m.MaxRequests.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.MaxRetries != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(m.MaxRetries.Size())) - n4, err := m.MaxRetries.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.TrackRemaining { - dAtA[i] = 0x30 - i++ - if m.TrackRemaining { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.MaxConnectionPools != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintCircuitBreaker(dAtA, i, uint64(m.MaxConnectionPools.Size())) - n5, err := m.MaxConnectionPools.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintCircuitBreaker(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *CircuitBreakers) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Thresholds) > 0 { - for _, e := range m.Thresholds { - l = e.Size() - n += 1 + l + sovCircuitBreaker(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CircuitBreakers_Thresholds) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Priority != 0 { - n += 1 + sovCircuitBreaker(uint64(m.Priority)) - } - if m.MaxConnections != nil { - l = m.MaxConnections.Size() - n += 1 + l + sovCircuitBreaker(uint64(l)) - } - if m.MaxPendingRequests != nil { - l = m.MaxPendingRequests.Size() - n += 1 + l + sovCircuitBreaker(uint64(l)) - } - if m.MaxRequests != nil { - l = m.MaxRequests.Size() - n += 1 + l + sovCircuitBreaker(uint64(l)) - } - if m.MaxRetries != nil { - l = m.MaxRetries.Size() - n += 1 + l + sovCircuitBreaker(uint64(l)) - } - if m.TrackRemaining { - n += 2 - } - if m.MaxConnectionPools != nil { - l = m.MaxConnectionPools.Size() - n += 1 + l + sovCircuitBreaker(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovCircuitBreaker(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozCircuitBreaker(x uint64) (n int) { - return sovCircuitBreaker(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *CircuitBreakers) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CircuitBreakers: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CircuitBreakers: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Thresholds", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCircuitBreaker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCircuitBreaker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Thresholds = append(m.Thresholds, &CircuitBreakers_Thresholds{}) - if err := m.Thresholds[len(m.Thresholds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCircuitBreaker(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCircuitBreaker - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCircuitBreaker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } +func (m *CircuitBreakers_Thresholds_RetryBudget) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CircuitBreakers_Thresholds_RetryBudget.Unmarshal(m, b) +} +func (m *CircuitBreakers_Thresholds_RetryBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CircuitBreakers_Thresholds_RetryBudget.Marshal(b, m, deterministic) +} +func (m *CircuitBreakers_Thresholds_RetryBudget) XXX_Merge(src proto.Message) { + xxx_messageInfo_CircuitBreakers_Thresholds_RetryBudget.Merge(m, src) +} +func (m *CircuitBreakers_Thresholds_RetryBudget) XXX_Size() int { + return xxx_messageInfo_CircuitBreakers_Thresholds_RetryBudget.Size(m) +} +func (m *CircuitBreakers_Thresholds_RetryBudget) XXX_DiscardUnknown() { + xxx_messageInfo_CircuitBreakers_Thresholds_RetryBudget.DiscardUnknown(m) +} + +var xxx_messageInfo_CircuitBreakers_Thresholds_RetryBudget proto.InternalMessageInfo - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *CircuitBreakers_Thresholds_RetryBudget) GetBudgetPercent() *_type.Percent { + if m != nil { + return m.BudgetPercent } return nil } -func (m *CircuitBreakers_Thresholds) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Thresholds: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Thresholds: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) - } - m.Priority = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Priority |= core.RoutingPriority(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxConnections", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCircuitBreaker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCircuitBreaker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxConnections == nil { - m.MaxConnections = &types.UInt32Value{} - } - if err := m.MaxConnections.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxPendingRequests", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCircuitBreaker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCircuitBreaker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxPendingRequests == nil { - m.MaxPendingRequests = &types.UInt32Value{} - } - if err := m.MaxPendingRequests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxRequests", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCircuitBreaker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCircuitBreaker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxRequests == nil { - m.MaxRequests = &types.UInt32Value{} - } - if err := m.MaxRequests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxRetries", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCircuitBreaker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCircuitBreaker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxRetries == nil { - m.MaxRetries = &types.UInt32Value{} - } - if err := m.MaxRetries.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TrackRemaining", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.TrackRemaining = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxConnectionPools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCircuitBreaker - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCircuitBreaker - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxConnectionPools == nil { - m.MaxConnectionPools = &types.UInt32Value{} - } - if err := m.MaxConnectionPools.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCircuitBreaker(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCircuitBreaker - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCircuitBreaker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *CircuitBreakers_Thresholds_RetryBudget) GetMinRetryConcurrency() *wrappers.UInt32Value { + if m != nil { + return m.MinRetryConcurrency } return nil } -func skipCircuitBreaker(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthCircuitBreaker - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthCircuitBreaker - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowCircuitBreaker - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipCircuitBreaker(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthCircuitBreaker - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthCircuitBreaker = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowCircuitBreaker = fmt.Errorf("proto: integer overflow") -) + +func init() { + proto.RegisterType((*CircuitBreakers)(nil), "envoy.api.v2.cluster.CircuitBreakers") + proto.RegisterType((*CircuitBreakers_Thresholds)(nil), "envoy.api.v2.cluster.CircuitBreakers.Thresholds") + proto.RegisterType((*CircuitBreakers_Thresholds_RetryBudget)(nil), "envoy.api.v2.cluster.CircuitBreakers.Thresholds.RetryBudget") +} + +func init() { + proto.RegisterFile("envoy/api/v2/cluster/circuit_breaker.proto", fileDescriptor_89bc8d4e21efdd79) +} + +var fileDescriptor_89bc8d4e21efdd79 = []byte{ + // 605 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x41, 0x6f, 0xd3, 0x3e, + 0x18, 0xc6, 0x95, 0xee, 0xdf, 0xfe, 0x2b, 0x67, 0x74, 0x93, 0x37, 0x58, 0xa8, 0x06, 0xaa, 0x76, + 0xa1, 0xe2, 0xe0, 0xa0, 0xf4, 0x86, 0x40, 0x88, 0x56, 0x93, 0xe0, 0x32, 0x45, 0x01, 0x76, 0x8d, + 0xdc, 0xd4, 0xcb, 0xac, 0x35, 0xb6, 0xb1, 0x9d, 0xd2, 0xdc, 0x10, 0x5f, 0x80, 0x0b, 0x07, 0x24, + 0xbe, 0x01, 0x1f, 0x81, 0x4f, 0x80, 0xc4, 0x89, 0x0f, 0xc1, 0x85, 0x23, 0x47, 0x0e, 0x08, 0xc5, + 0x4e, 0x9a, 0x6d, 0x0c, 0xa9, 0xdc, 0xea, 0x3c, 0xef, 0xef, 0xe9, 0xfb, 0xbc, 0xaf, 0x0d, 0xee, + 0x12, 0xb6, 0xe0, 0x85, 0x8f, 0x05, 0xf5, 0x17, 0x81, 0x9f, 0xcc, 0x73, 0xa5, 0x89, 0xf4, 0x13, + 0x2a, 0x93, 0x9c, 0xea, 0x78, 0x2a, 0x09, 0x3e, 0x23, 0x12, 0x09, 0xc9, 0x35, 0x87, 0xbb, 0xa6, + 0x16, 0x61, 0x41, 0xd1, 0x22, 0x40, 0x55, 0x6d, 0x7f, 0xff, 0xa2, 0x03, 0x97, 0xc4, 0x9f, 0x62, + 0x45, 0x2c, 0xd3, 0xf7, 0xac, 0xaa, 0x0b, 0x41, 0x7c, 0x41, 0x64, 0x42, 0x98, 0xae, 0x94, 0xdb, + 0x29, 0xe7, 0xe9, 0x9c, 0xf8, 0xe6, 0x34, 0xcd, 0x4f, 0xfc, 0x57, 0x12, 0x0b, 0x41, 0xa4, 0xaa, + 0xf5, 0x7c, 0x26, 0xb0, 0x8f, 0x19, 0xe3, 0x1a, 0x6b, 0xca, 0x99, 0xf2, 0x33, 0x9a, 0x4a, 0xac, + 0x6b, 0xe7, 0x5b, 0x7f, 0xe8, 0x4a, 0x63, 0x9d, 0xd7, 0xf8, 0xde, 0x02, 0xcf, 0xe9, 0x0c, 0x6b, + 0xe2, 0xd7, 0x3f, 0xac, 0x70, 0xf0, 0xa5, 0x03, 0xb6, 0x26, 0x36, 0xdf, 0xd8, 0xc6, 0x53, 0x30, + 0x04, 0x40, 0x9f, 0x4a, 0xa2, 0x4e, 0xf9, 0x7c, 0xa6, 0x3c, 0x67, 0xb0, 0x31, 0x74, 0x83, 0x7b, + 0xe8, 0xaa, 0xb8, 0xe8, 0x12, 0x8a, 0x9e, 0xaf, 0xb8, 0xe8, 0x9c, 0x47, 0xff, 0x5b, 0x1b, 0x80, + 0x46, 0x82, 0x4f, 0x40, 0x57, 0x48, 0xca, 0x25, 0xd5, 0x85, 0xe7, 0x0c, 0x9c, 0x61, 0x2f, 0x38, + 0xb8, 0x64, 0xcf, 0x25, 0x41, 0x11, 0xcf, 0x35, 0x65, 0x69, 0x58, 0x55, 0x8e, 0xbb, 0x3f, 0xc7, + 0xed, 0x37, 0x4e, 0x6b, 0xdb, 0x89, 0x56, 0x34, 0x3c, 0x04, 0x5b, 0x19, 0x5e, 0xc6, 0x09, 0x67, + 0x8c, 0x24, 0x26, 0xb7, 0xd7, 0x1a, 0x38, 0x43, 0x37, 0xd8, 0x47, 0x76, 0xa0, 0xa8, 0x1e, 0x28, + 0x7a, 0xf1, 0x94, 0xe9, 0x51, 0x70, 0x8c, 0xe7, 0x39, 0x89, 0x7a, 0x19, 0x5e, 0x4e, 0x1a, 0x06, + 0x1e, 0x81, 0xdd, 0xd2, 0x46, 0x10, 0x36, 0xa3, 0x2c, 0x8d, 0x25, 0x79, 0x99, 0x13, 0xa5, 0x95, + 0xb7, 0xb1, 0x86, 0x17, 0xcc, 0xf0, 0x32, 0xb4, 0x60, 0x54, 0x71, 0xf0, 0x11, 0xd8, 0x2c, 0xfd, + 0x56, 0x3e, 0xff, 0xad, 0xe1, 0xe3, 0x66, 0x78, 0xb9, 0x32, 0x78, 0x08, 0x5c, 0x6b, 0xa0, 0x25, + 0x25, 0xca, 0x6b, 0xaf, 0xc1, 0x03, 0xc3, 0x9b, 0x7a, 0x18, 0x83, 0xcd, 0x12, 0x2d, 0xe2, 0x69, + 0x3e, 0x4b, 0x89, 0xf6, 0xba, 0x86, 0x7f, 0xf0, 0xaf, 0x3b, 0x44, 0xa5, 0x5f, 0x31, 0x36, 0x1e, + 0x91, 0x2b, 0x9b, 0x03, 0xbc, 0x03, 0xb6, 0xb4, 0xc4, 0xc9, 0x59, 0x2c, 0x49, 0x86, 0x29, 0xa3, + 0x2c, 0xf5, 0x3a, 0x03, 0x67, 0xd8, 0x8d, 0x7a, 0xe6, 0x73, 0x54, 0x7f, 0xad, 0x27, 0xdb, 0x2c, + 0x28, 0x16, 0x9c, 0xcf, 0x95, 0xf7, 0xff, 0x9a, 0x93, 0x6d, 0xb6, 0x14, 0x96, 0x5c, 0xff, 0x83, + 0x03, 0xdc, 0x73, 0x5d, 0xc1, 0xfb, 0xa0, 0x67, 0x33, 0xc6, 0xd5, 0x7b, 0x32, 0x17, 0xca, 0x0d, + 0x76, 0xaa, 0xac, 0xe5, 0x53, 0x43, 0xa1, 0x95, 0xa2, 0x6b, 0xb6, 0xb4, 0x3a, 0xc2, 0x10, 0x5c, + 0xcf, 0x28, 0x8b, 0xed, 0xa4, 0x12, 0xce, 0x92, 0x5c, 0x4a, 0xc2, 0x92, 0x62, 0xad, 0x2b, 0xb4, + 0x93, 0x51, 0x66, 0x1a, 0x99, 0x34, 0xe0, 0xf8, 0x9d, 0xf3, 0xe3, 0xfd, 0xaf, 0xb7, 0xed, 0x9b, + 0x70, 0xcf, 0xfe, 0x7b, 0xc2, 0xd9, 0x09, 0x4d, 0x57, 0x93, 0x5e, 0x8c, 0x3e, 0xbd, 0xfe, 0xfc, + 0xb5, 0xd3, 0xda, 0x76, 0xc0, 0x01, 0xe5, 0xb6, 0x43, 0x21, 0xf9, 0xb2, 0xb8, 0x72, 0x31, 0xe3, + 0x9d, 0x8b, 0x9b, 0x09, 0xcb, 0x36, 0x42, 0xe7, 0x63, 0xeb, 0xc6, 0xa1, 0xa9, 0x7e, 0x2c, 0x28, + 0x3a, 0x0e, 0xd0, 0xc4, 0x56, 0x1f, 0x3d, 0xfb, 0xfe, 0x37, 0x61, 0xda, 0x31, 0x09, 0x46, 0xbf, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x42, 0x40, 0xb8, 0x2b, 0xdf, 0x04, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/circuit_breaker.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/cluster/circuit_breaker.proto -package cluster +package envoy_api_v2_cluster import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" ) @@ -32,11 +32,14 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} _ = core.RoutingPriority(0) ) +// define the regex for a UUID once up-front +var _circuit_breaker_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on CircuitBreakers with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -48,17 +51,12 @@ for idx, item := range m.GetThresholds() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CircuitBreakersValidationError{ - field: fmt.Sprintf("Thresholds[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakersValidationError{ + field: fmt.Sprintf("Thresholds[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -130,81 +128,71 @@ return nil } - // no validation rules for Priority - - { - tmp := m.GetMaxConnections() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if _, ok := core.RoutingPriority_name[int32(m.GetPriority())]; !ok { + return CircuitBreakers_ThresholdsValidationError{ + field: "Priority", + reason: "value must be one of the defined enum values", + } + } - if err := v.Validate(); err != nil { - return CircuitBreakers_ThresholdsValidationError{ - field: "MaxConnections", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMaxConnections()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_ThresholdsValidationError{ + field: "MaxConnections", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetMaxPendingRequests() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CircuitBreakers_ThresholdsValidationError{ - field: "MaxPendingRequests", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMaxPendingRequests()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_ThresholdsValidationError{ + field: "MaxPendingRequests", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetMaxRequests() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CircuitBreakers_ThresholdsValidationError{ - field: "MaxRequests", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMaxRequests()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_ThresholdsValidationError{ + field: "MaxRequests", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetMaxRetries() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetMaxRetries()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_ThresholdsValidationError{ + field: "MaxRetries", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return CircuitBreakers_ThresholdsValidationError{ - field: "MaxRetries", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRetryBudget()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_ThresholdsValidationError{ + field: "RetryBudget", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for TrackRemaining - { - tmp := m.GetMaxConnectionPools() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CircuitBreakers_ThresholdsValidationError{ - field: "MaxConnectionPools", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMaxConnectionPools()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_ThresholdsValidationError{ + field: "MaxConnectionPools", + reason: "embedded message failed validation", + cause: err, } } } @@ -267,3 +255,91 @@ Cause() error ErrorName() string } = CircuitBreakers_ThresholdsValidationError{} + +// Validate checks the field values on CircuitBreakers_Thresholds_RetryBudget +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *CircuitBreakers_Thresholds_RetryBudget) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetBudgetPercent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_Thresholds_RetryBudgetValidationError{ + field: "BudgetPercent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMinRetryConcurrency()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CircuitBreakers_Thresholds_RetryBudgetValidationError{ + field: "MinRetryConcurrency", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// CircuitBreakers_Thresholds_RetryBudgetValidationError is the validation +// error returned by CircuitBreakers_Thresholds_RetryBudget.Validate if the +// designated constraints aren't met. +type CircuitBreakers_Thresholds_RetryBudgetValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CircuitBreakers_Thresholds_RetryBudgetValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CircuitBreakers_Thresholds_RetryBudgetValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CircuitBreakers_Thresholds_RetryBudgetValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CircuitBreakers_Thresholds_RetryBudgetValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CircuitBreakers_Thresholds_RetryBudgetValidationError) ErrorName() string { + return "CircuitBreakers_Thresholds_RetryBudgetValidationError" +} + +// Error satisfies the builtin error interface +func (e CircuitBreakers_Thresholds_RetryBudgetValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCircuitBreakers_Thresholds_RetryBudget.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CircuitBreakers_Thresholds_RetryBudgetValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CircuitBreakers_Thresholds_RetryBudgetValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,100 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/cluster/filter.proto + +package envoy_api_v2_cluster + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type Filter struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + TypedConfig *any.Any `protobuf:"bytes,2,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Filter) Reset() { *m = Filter{} } +func (m *Filter) String() string { return proto.CompactTextString(m) } +func (*Filter) ProtoMessage() {} +func (*Filter) Descriptor() ([]byte, []int) { + return fileDescriptor_8ce34c55b74b9243, []int{0} +} + +func (m *Filter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Filter.Unmarshal(m, b) +} +func (m *Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Filter.Marshal(b, m, deterministic) +} +func (m *Filter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Filter.Merge(m, src) +} +func (m *Filter) XXX_Size() int { + return xxx_messageInfo_Filter.Size(m) +} +func (m *Filter) XXX_DiscardUnknown() { + xxx_messageInfo_Filter.DiscardUnknown(m) +} + +var xxx_messageInfo_Filter proto.InternalMessageInfo + +func (m *Filter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Filter) GetTypedConfig() *any.Any { + if m != nil { + return m.TypedConfig + } + return nil +} + +func init() { + proto.RegisterType((*Filter)(nil), "envoy.api.v2.cluster.Filter") +} + +func init() { proto.RegisterFile("envoy/api/v2/cluster/filter.proto", fileDescriptor_8ce34c55b74b9243) } + +var fileDescriptor_8ce34c55b74b9243 = []byte{ + // 299 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x3d, 0x4e, 0xc3, 0x30, + 0x14, 0x80, 0xe5, 0xa8, 0x14, 0x91, 0x32, 0xa0, 0xa8, 0xa2, 0x3f, 0x08, 0x14, 0x3a, 0x75, 0x7a, + 0x96, 0xd2, 0x81, 0xb9, 0xa9, 0x60, 0x44, 0x55, 0x91, 0x18, 0x41, 0xaf, 0x8d, 0x13, 0x59, 0x4a, + 0x6d, 0xcb, 0x71, 0x22, 0xb2, 0x71, 0x00, 0x24, 0x56, 0xce, 0xc0, 0x11, 0x38, 0x01, 0x2b, 0xd7, + 0x60, 0x64, 0x64, 0x40, 0x08, 0x3b, 0x99, 0x80, 0xcd, 0xf2, 0xf7, 0x3d, 0xf9, 0x7b, 0xf6, 0x4f, + 0x99, 0xa8, 0x64, 0x4d, 0x51, 0x71, 0x5a, 0x45, 0x74, 0x93, 0x97, 0x85, 0x61, 0x9a, 0xa6, 0x3c, + 0x37, 0x4c, 0x83, 0xd2, 0xd2, 0xc8, 0xa0, 0x6f, 0x15, 0x40, 0xc5, 0xa1, 0x8a, 0xa0, 0x51, 0xc6, + 0xa3, 0x4c, 0xca, 0x2c, 0x67, 0xd4, 0x3a, 0xeb, 0x32, 0xa5, 0x28, 0x6a, 0x37, 0x30, 0x3e, 0x29, + 0x13, 0x85, 0x14, 0x85, 0x90, 0x06, 0x0d, 0x97, 0xa2, 0xa0, 0x5b, 0x9e, 0x69, 0x34, 0xac, 0xe1, + 0xc7, 0xbf, 0x78, 0x61, 0xd0, 0x94, 0x45, 0x83, 0x07, 0x15, 0xe6, 0x3c, 0x41, 0xc3, 0x68, 0x7b, + 0x70, 0x60, 0x72, 0xe3, 0x77, 0x2f, 0x6c, 0x58, 0x70, 0xe4, 0x77, 0x04, 0x6e, 0xd9, 0x90, 0x84, + 0x64, 0xba, 0x17, 0xef, 0x7e, 0xc6, 0x1d, 0xed, 0x85, 0x64, 0x65, 0x2f, 0x83, 0x33, 0x7f, 0xdf, + 0xd4, 0x8a, 0x25, 0xb7, 0x1b, 0x29, 0x52, 0x9e, 0x0d, 0xbd, 0x90, 0x4c, 0x7b, 0x51, 0x1f, 0x5c, + 0x30, 0xb4, 0xc1, 0x30, 0x17, 0xf5, 0xaa, 0x67, 0xcd, 0x85, 0x15, 0xe3, 0x07, 0xf2, 0xf1, 0xf4, + 0xf5, 0xb8, 0x33, 0x0a, 0x06, 0x6e, 0x63, 0x37, 0xdf, 0x6e, 0x0c, 0xd5, 0xec, 0xe5, 0xfe, 0xf5, + 0xad, 0xeb, 0x1d, 0x10, 0x7f, 0xc2, 0x25, 0x58, 0x47, 0x69, 0x79, 0x57, 0xc3, 0x5f, 0x1f, 0x14, + 0xf7, 0x5c, 0xeb, 0xf2, 0xe7, 0xb9, 0x25, 0x79, 0xf6, 0x0e, 0xcf, 0xad, 0x35, 0x57, 0x1c, 0xae, + 0x23, 0x58, 0x38, 0xeb, 0xf2, 0xea, 0xfd, 0x3f, 0xb0, 0xee, 0xda, 0xd2, 0xd9, 0x77, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xfd, 0x82, 0xd5, 0x6d, 0xa3, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/filter.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,118 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/cluster/filter.proto + +package envoy_api_v2_cluster + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _filter_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on Filter with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Filter) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return FilterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// FilterValidationError is the validation error returned by Filter.Validate if +// the designated constraints aren't met. +type FilterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FilterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FilterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FilterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FilterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FilterValidationError) ErrorName() string { return "FilterValidationError" } + +// Error satisfies the builtin error interface +func (e FilterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilter.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FilterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FilterValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18 +1,16 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/cluster/outlier_detection.proto -package cluster +package envoy_api_v2_cluster import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,63 +22,32 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// See the :ref:`architecture overview ` for -// more information on outlier detection. type OutlierDetection struct { - // The number of consecutive 5xx responses before a consecutive 5xx ejection - // occurs. Defaults to 5. - Consecutive_5Xx *types.UInt32Value `protobuf:"bytes,1,opt,name=consecutive_5xx,json=consecutive5xx,proto3" json:"consecutive_5xx,omitempty"` - // The time interval between ejection analysis sweeps. This can result in - // both new ejections as well as hosts being returned to service. Defaults - // to 10000ms or 10s. - Interval *types.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` - // The base time that a host is ejected for. The real time is equal to the - // base time multiplied by the number of times the host has been ejected. - // Defaults to 30000ms or 30s. - BaseEjectionTime *types.Duration `protobuf:"bytes,3,opt,name=base_ejection_time,json=baseEjectionTime,proto3" json:"base_ejection_time,omitempty"` - // The maximum % of an upstream cluster that can be ejected due to outlier - // detection. Defaults to 10% but will eject at least one host regardless of the value. - MaxEjectionPercent *types.UInt32Value `protobuf:"bytes,4,opt,name=max_ejection_percent,json=maxEjectionPercent,proto3" json:"max_ejection_percent,omitempty"` - // The % chance that a host will be actually ejected when an outlier status - // is detected through consecutive 5xx. This setting can be used to disable - // ejection or to ramp it up slowly. Defaults to 100. - EnforcingConsecutive_5Xx *types.UInt32Value `protobuf:"bytes,5,opt,name=enforcing_consecutive_5xx,json=enforcingConsecutive5xx,proto3" json:"enforcing_consecutive_5xx,omitempty"` - // The % chance that a host will be actually ejected when an outlier status - // is detected through success rate statistics. This setting can be used to - // disable ejection or to ramp it up slowly. Defaults to 100. - EnforcingSuccessRate *types.UInt32Value `protobuf:"bytes,6,opt,name=enforcing_success_rate,json=enforcingSuccessRate,proto3" json:"enforcing_success_rate,omitempty"` - // The number of hosts in a cluster that must have enough request volume to - // detect success rate outliers. If the number of hosts is less than this - // setting, outlier detection via success rate statistics is not performed - // for any host in the cluster. Defaults to 5. - SuccessRateMinimumHosts *types.UInt32Value `protobuf:"bytes,7,opt,name=success_rate_minimum_hosts,json=successRateMinimumHosts,proto3" json:"success_rate_minimum_hosts,omitempty"` - // The minimum number of total requests that must be collected in one - // interval (as defined by the interval duration above) to include this host - // in success rate based outlier detection. If the volume is lower than this - // setting, outlier detection via success rate statistics is not performed - // for that host. Defaults to 100. - SuccessRateRequestVolume *types.UInt32Value `protobuf:"bytes,8,opt,name=success_rate_request_volume,json=successRateRequestVolume,proto3" json:"success_rate_request_volume,omitempty"` - // This factor is used to determine the ejection threshold for success rate - // outlier ejection. The ejection threshold is the difference between the - // mean success rate, and the product of this factor and the standard - // deviation of the mean success rate: mean - (stdev * - // success_rate_stdev_factor). This factor is divided by a thousand to get a - // double. That is, if the desired factor is 1.9, the runtime value should - // be 1900. Defaults to 1900. - SuccessRateStdevFactor *types.UInt32Value `protobuf:"bytes,9,opt,name=success_rate_stdev_factor,json=successRateStdevFactor,proto3" json:"success_rate_stdev_factor,omitempty"` - // The number of consecutive gateway failures (502, 503, 504 status or - // connection errors that are mapped to one of those status codes) before a - // consecutive gateway failure ejection occurs. Defaults to 5. - ConsecutiveGatewayFailure *types.UInt32Value `protobuf:"bytes,10,opt,name=consecutive_gateway_failure,json=consecutiveGatewayFailure,proto3" json:"consecutive_gateway_failure,omitempty"` - // The % chance that a host will be actually ejected when an outlier status - // is detected through consecutive gateway failures. This setting can be - // used to disable ejection or to ramp it up slowly. Defaults to 0. - EnforcingConsecutiveGatewayFailure *types.UInt32Value `protobuf:"bytes,11,opt,name=enforcing_consecutive_gateway_failure,json=enforcingConsecutiveGatewayFailure,proto3" json:"enforcing_consecutive_gateway_failure,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Consecutive_5Xx *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=consecutive_5xx,json=consecutive5xx,proto3" json:"consecutive_5xx,omitempty"` + Interval *duration.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` + BaseEjectionTime *duration.Duration `protobuf:"bytes,3,opt,name=base_ejection_time,json=baseEjectionTime,proto3" json:"base_ejection_time,omitempty"` + MaxEjectionPercent *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=max_ejection_percent,json=maxEjectionPercent,proto3" json:"max_ejection_percent,omitempty"` + EnforcingConsecutive_5Xx *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=enforcing_consecutive_5xx,json=enforcingConsecutive5xx,proto3" json:"enforcing_consecutive_5xx,omitempty"` + EnforcingSuccessRate *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=enforcing_success_rate,json=enforcingSuccessRate,proto3" json:"enforcing_success_rate,omitempty"` + SuccessRateMinimumHosts *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=success_rate_minimum_hosts,json=successRateMinimumHosts,proto3" json:"success_rate_minimum_hosts,omitempty"` + SuccessRateRequestVolume *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=success_rate_request_volume,json=successRateRequestVolume,proto3" json:"success_rate_request_volume,omitempty"` + SuccessRateStdevFactor *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=success_rate_stdev_factor,json=successRateStdevFactor,proto3" json:"success_rate_stdev_factor,omitempty"` + ConsecutiveGatewayFailure *wrappers.UInt32Value `protobuf:"bytes,10,opt,name=consecutive_gateway_failure,json=consecutiveGatewayFailure,proto3" json:"consecutive_gateway_failure,omitempty"` + EnforcingConsecutiveGatewayFailure *wrappers.UInt32Value `protobuf:"bytes,11,opt,name=enforcing_consecutive_gateway_failure,json=enforcingConsecutiveGatewayFailure,proto3" json:"enforcing_consecutive_gateway_failure,omitempty"` + SplitExternalLocalOriginErrors bool `protobuf:"varint,12,opt,name=split_external_local_origin_errors,json=splitExternalLocalOriginErrors,proto3" json:"split_external_local_origin_errors,omitempty"` + ConsecutiveLocalOriginFailure *wrappers.UInt32Value `protobuf:"bytes,13,opt,name=consecutive_local_origin_failure,json=consecutiveLocalOriginFailure,proto3" json:"consecutive_local_origin_failure,omitempty"` + EnforcingConsecutiveLocalOriginFailure *wrappers.UInt32Value `protobuf:"bytes,14,opt,name=enforcing_consecutive_local_origin_failure,json=enforcingConsecutiveLocalOriginFailure,proto3" json:"enforcing_consecutive_local_origin_failure,omitempty"` + EnforcingLocalOriginSuccessRate *wrappers.UInt32Value `protobuf:"bytes,15,opt,name=enforcing_local_origin_success_rate,json=enforcingLocalOriginSuccessRate,proto3" json:"enforcing_local_origin_success_rate,omitempty"` + FailurePercentageThreshold *wrappers.UInt32Value `protobuf:"bytes,16,opt,name=failure_percentage_threshold,json=failurePercentageThreshold,proto3" json:"failure_percentage_threshold,omitempty"` + EnforcingFailurePercentage *wrappers.UInt32Value `protobuf:"bytes,17,opt,name=enforcing_failure_percentage,json=enforcingFailurePercentage,proto3" json:"enforcing_failure_percentage,omitempty"` + EnforcingFailurePercentageLocalOrigin *wrappers.UInt32Value `protobuf:"bytes,18,opt,name=enforcing_failure_percentage_local_origin,json=enforcingFailurePercentageLocalOrigin,proto3" json:"enforcing_failure_percentage_local_origin,omitempty"` + FailurePercentageMinimumHosts *wrappers.UInt32Value `protobuf:"bytes,19,opt,name=failure_percentage_minimum_hosts,json=failurePercentageMinimumHosts,proto3" json:"failure_percentage_minimum_hosts,omitempty"` + FailurePercentageRequestVolume *wrappers.UInt32Value `protobuf:"bytes,20,opt,name=failure_percentage_request_volume,json=failurePercentageRequestVolume,proto3" json:"failure_percentage_request_volume,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *OutlierDetection) Reset() { *m = OutlierDetection{} } @@ -89,26 +56,18 @@ func (*OutlierDetection) Descriptor() ([]byte, []int) { return fileDescriptor_56cd87362a3f00c9, []int{0} } + func (m *OutlierDetection) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_OutlierDetection.Unmarshal(m, b) } func (m *OutlierDetection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_OutlierDetection.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_OutlierDetection.Marshal(b, m, deterministic) } func (m *OutlierDetection) XXX_Merge(src proto.Message) { xxx_messageInfo_OutlierDetection.Merge(m, src) } func (m *OutlierDetection) XXX_Size() int { - return m.Size() + return xxx_messageInfo_OutlierDetection.Size(m) } func (m *OutlierDetection) XXX_DiscardUnknown() { xxx_messageInfo_OutlierDetection.DiscardUnknown(m) @@ -116,953 +75,204 @@ var xxx_messageInfo_OutlierDetection proto.InternalMessageInfo -func (m *OutlierDetection) GetConsecutive_5Xx() *types.UInt32Value { +func (m *OutlierDetection) GetConsecutive_5Xx() *wrappers.UInt32Value { if m != nil { return m.Consecutive_5Xx } return nil } -func (m *OutlierDetection) GetInterval() *types.Duration { +func (m *OutlierDetection) GetInterval() *duration.Duration { if m != nil { return m.Interval } return nil } -func (m *OutlierDetection) GetBaseEjectionTime() *types.Duration { +func (m *OutlierDetection) GetBaseEjectionTime() *duration.Duration { if m != nil { return m.BaseEjectionTime } return nil } -func (m *OutlierDetection) GetMaxEjectionPercent() *types.UInt32Value { +func (m *OutlierDetection) GetMaxEjectionPercent() *wrappers.UInt32Value { if m != nil { return m.MaxEjectionPercent } return nil } -func (m *OutlierDetection) GetEnforcingConsecutive_5Xx() *types.UInt32Value { +func (m *OutlierDetection) GetEnforcingConsecutive_5Xx() *wrappers.UInt32Value { if m != nil { return m.EnforcingConsecutive_5Xx } return nil } -func (m *OutlierDetection) GetEnforcingSuccessRate() *types.UInt32Value { +func (m *OutlierDetection) GetEnforcingSuccessRate() *wrappers.UInt32Value { if m != nil { return m.EnforcingSuccessRate } return nil } -func (m *OutlierDetection) GetSuccessRateMinimumHosts() *types.UInt32Value { +func (m *OutlierDetection) GetSuccessRateMinimumHosts() *wrappers.UInt32Value { if m != nil { return m.SuccessRateMinimumHosts } return nil } -func (m *OutlierDetection) GetSuccessRateRequestVolume() *types.UInt32Value { +func (m *OutlierDetection) GetSuccessRateRequestVolume() *wrappers.UInt32Value { if m != nil { return m.SuccessRateRequestVolume } return nil } -func (m *OutlierDetection) GetSuccessRateStdevFactor() *types.UInt32Value { +func (m *OutlierDetection) GetSuccessRateStdevFactor() *wrappers.UInt32Value { if m != nil { return m.SuccessRateStdevFactor } return nil } -func (m *OutlierDetection) GetConsecutiveGatewayFailure() *types.UInt32Value { +func (m *OutlierDetection) GetConsecutiveGatewayFailure() *wrappers.UInt32Value { if m != nil { return m.ConsecutiveGatewayFailure } return nil } -func (m *OutlierDetection) GetEnforcingConsecutiveGatewayFailure() *types.UInt32Value { +func (m *OutlierDetection) GetEnforcingConsecutiveGatewayFailure() *wrappers.UInt32Value { if m != nil { return m.EnforcingConsecutiveGatewayFailure } return nil } -func init() { - proto.RegisterType((*OutlierDetection)(nil), "envoy.api.v2.cluster.OutlierDetection") -} - -func init() { - proto.RegisterFile("envoy/api/v2/cluster/outlier_detection.proto", fileDescriptor_56cd87362a3f00c9) +func (m *OutlierDetection) GetSplitExternalLocalOriginErrors() bool { + if m != nil { + return m.SplitExternalLocalOriginErrors + } + return false } -var fileDescriptor_56cd87362a3f00c9 = []byte{ - // 557 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6a, 0x13, 0x41, - 0x14, 0xc7, 0xdd, 0xf4, 0x7b, 0x0a, 0x5a, 0x86, 0xd8, 0x6e, 0x5a, 0x09, 0x52, 0x10, 0xa4, 0xc8, - 0x2e, 0xa4, 0xf4, 0x01, 0x9a, 0x36, 0x55, 0x2f, 0xd4, 0x90, 0x68, 0x44, 0x54, 0x86, 0xc9, 0xe6, - 0x64, 0x1d, 0xd9, 0xdd, 0x59, 0xe7, 0x63, 0xbb, 0xf1, 0x89, 0xa4, 0x8f, 0xe0, 0x95, 0x97, 0x5e, - 0xfa, 0x08, 0x92, 0x3b, 0x9f, 0xc1, 0x1b, 0xd9, 0x9d, 0x7c, 0x6c, 0xd2, 0x80, 0xc9, 0xdd, 0xb0, - 0x73, 0x7e, 0xbf, 0xff, 0xd9, 0x99, 0xe1, 0xa0, 0x27, 0x10, 0x25, 0x7c, 0xe0, 0xd2, 0x98, 0xb9, - 0x49, 0xcd, 0xf5, 0x02, 0x2d, 0x15, 0x08, 0x97, 0x6b, 0x15, 0x30, 0x10, 0xa4, 0x07, 0x0a, 0x3c, - 0xc5, 0x78, 0xe4, 0xc4, 0x82, 0x2b, 0x8e, 0xcb, 0x79, 0xb5, 0x43, 0x63, 0xe6, 0x24, 0x35, 0x67, - 0x54, 0x7d, 0x58, 0xf5, 0x39, 0xf7, 0x03, 0x70, 0xf3, 0x9a, 0xae, 0xee, 0xbb, 0x3d, 0x2d, 0xe8, - 0x94, 0xba, 0xbd, 0x7f, 0x2d, 0x68, 0x1c, 0x83, 0x90, 0xa3, 0xfd, 0x83, 0x84, 0x06, 0xac, 0x47, - 0x15, 0xb8, 0xe3, 0xc5, 0x68, 0xa3, 0xec, 0x73, 0x9f, 0xe7, 0x4b, 0x37, 0x5b, 0x99, 0xaf, 0xc7, - 0x7f, 0xb7, 0xd0, 0xde, 0x2b, 0xd3, 0xe0, 0xe5, 0xb8, 0x3f, 0xdc, 0x40, 0xf7, 0x3c, 0x1e, 0x49, - 0xf0, 0xb4, 0x62, 0x09, 0x90, 0xb3, 0x34, 0xb5, 0xad, 0x87, 0xd6, 0xe3, 0xdd, 0xda, 0x03, 0xc7, - 0xa4, 0x3b, 0xe3, 0x74, 0xe7, 0xcd, 0xf3, 0x48, 0x9d, 0xd6, 0x3a, 0x34, 0xd0, 0xd0, 0xba, 0x5b, - 0x80, 0xce, 0xd2, 0x14, 0x9f, 0xa3, 0x6d, 0x16, 0x29, 0x10, 0x09, 0x0d, 0xec, 0x52, 0xce, 0x57, - 0x6e, 0xf1, 0x97, 0xa3, 0xbf, 0xab, 0xa3, 0xef, 0x7f, 0x7e, 0xac, 0x6d, 0xdc, 0x58, 0xa5, 0x93, - 0x3b, 0xad, 0x09, 0x86, 0xdb, 0x08, 0x77, 0xa9, 0x04, 0x02, 0x9f, 0x4d, 0x6b, 0x44, 0xb1, 0x10, - 0xec, 0xb5, 0x55, 0x64, 0x7b, 0x99, 0xa0, 0x31, 0xe2, 0x5f, 0xb3, 0x10, 0xf0, 0x3b, 0x54, 0x0e, - 0x69, 0x3a, 0x75, 0xc6, 0x20, 0x3c, 0x88, 0x94, 0xbd, 0xfe, 0xff, 0x7f, 0xac, 0xef, 0x64, 0xe6, - 0xf5, 0x93, 0x92, 0xdd, 0x6b, 0xe1, 0x90, 0xa6, 0x63, 0x6f, 0xd3, 0x28, 0xb0, 0x87, 0x2a, 0x10, - 0xf5, 0xb9, 0xf0, 0x58, 0xe4, 0x93, 0xf9, 0x33, 0xdc, 0x58, 0xcd, 0x7f, 0x30, 0x31, 0x5d, 0xcc, - 0x9e, 0xeb, 0x47, 0xb4, 0x3f, 0x0d, 0x91, 0xda, 0xf3, 0x40, 0x4a, 0x22, 0xa8, 0x02, 0x7b, 0x73, - 0xb5, 0x84, 0xf2, 0x44, 0xd3, 0x36, 0x96, 0x16, 0x55, 0xd9, 0xf1, 0x1c, 0x16, 0xa5, 0x24, 0x64, - 0x11, 0x0b, 0x75, 0x48, 0x3e, 0x71, 0xa9, 0xa4, 0xbd, 0xb5, 0xc4, 0x43, 0x38, 0x90, 0x53, 0xdd, - 0x0b, 0x43, 0x3f, 0xcb, 0x60, 0xfc, 0x1e, 0x1d, 0xcd, 0xa8, 0x05, 0x7c, 0xd1, 0x20, 0x15, 0x49, - 0x78, 0xa0, 0x43, 0xb0, 0xb7, 0x97, 0x70, 0xdb, 0x05, 0x77, 0xcb, 0xe0, 0x9d, 0x9c, 0xc6, 0x6f, - 0x51, 0x65, 0x46, 0x2e, 0x55, 0x0f, 0x12, 0xd2, 0xa7, 0x9e, 0xe2, 0xc2, 0xde, 0x59, 0x42, 0xbd, - 0x5f, 0x50, 0xb7, 0x33, 0xf8, 0x2a, 0x67, 0xf1, 0x07, 0x74, 0x54, 0xbc, 0x4a, 0x9f, 0x2a, 0xb8, - 0xa6, 0x03, 0xd2, 0xa7, 0x2c, 0xd0, 0x02, 0x6c, 0xb4, 0x84, 0xba, 0x52, 0x10, 0x3c, 0x35, 0xfc, - 0x95, 0xc1, 0xf1, 0x57, 0xf4, 0x68, 0xf1, 0x93, 0x99, 0xcf, 0xd9, 0x5d, 0xed, 0x72, 0x8f, 0x17, - 0x3d, 0x9f, 0xd9, 0xec, 0x7a, 0xff, 0xdb, 0xb0, 0x6a, 0xfd, 0x1c, 0x56, 0xad, 0x5f, 0xc3, 0xaa, - 0xf5, 0x7b, 0x58, 0xb5, 0xd0, 0x31, 0xe3, 0x4e, 0x3e, 0x97, 0x62, 0xc1, 0xd3, 0x81, 0xb3, 0x68, - 0x44, 0xd5, 0xef, 0xcf, 0x0f, 0x8c, 0x66, 0xd6, 0x4a, 0xd3, 0xba, 0x29, 0xed, 0x37, 0xf2, 0xfa, - 0xf3, 0x98, 0x39, 0x9d, 0x9a, 0x73, 0x61, 0xea, 0x5f, 0xb6, 0xbb, 0x9b, 0x79, 0xb3, 0xa7, 0xff, - 0x02, 0x00, 0x00, 0xff, 0xff, 0xde, 0xe2, 0x08, 0x28, 0x21, 0x05, 0x00, 0x00, -} - -func (this *OutlierDetection) Equal(that interface{}) bool { - if that == nil { - return this == nil +func (m *OutlierDetection) GetConsecutiveLocalOriginFailure() *wrappers.UInt32Value { + if m != nil { + return m.ConsecutiveLocalOriginFailure } + return nil +} - that1, ok := that.(*OutlierDetection) - if !ok { - that2, ok := that.(OutlierDetection) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Consecutive_5Xx.Equal(that1.Consecutive_5Xx) { - return false - } - if !this.Interval.Equal(that1.Interval) { - return false - } - if !this.BaseEjectionTime.Equal(that1.BaseEjectionTime) { - return false - } - if !this.MaxEjectionPercent.Equal(that1.MaxEjectionPercent) { - return false - } - if !this.EnforcingConsecutive_5Xx.Equal(that1.EnforcingConsecutive_5Xx) { - return false - } - if !this.EnforcingSuccessRate.Equal(that1.EnforcingSuccessRate) { - return false - } - if !this.SuccessRateMinimumHosts.Equal(that1.SuccessRateMinimumHosts) { - return false - } - if !this.SuccessRateRequestVolume.Equal(that1.SuccessRateRequestVolume) { - return false - } - if !this.SuccessRateStdevFactor.Equal(that1.SuccessRateStdevFactor) { - return false - } - if !this.ConsecutiveGatewayFailure.Equal(that1.ConsecutiveGatewayFailure) { - return false - } - if !this.EnforcingConsecutiveGatewayFailure.Equal(that1.EnforcingConsecutiveGatewayFailure) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false +func (m *OutlierDetection) GetEnforcingConsecutiveLocalOriginFailure() *wrappers.UInt32Value { + if m != nil { + return m.EnforcingConsecutiveLocalOriginFailure } - return true + return nil } -func (m *OutlierDetection) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + +func (m *OutlierDetection) GetEnforcingLocalOriginSuccessRate() *wrappers.UInt32Value { + if m != nil { + return m.EnforcingLocalOriginSuccessRate } - return dAtA[:n], nil + return nil } -func (m *OutlierDetection) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Consecutive_5Xx != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.Consecutive_5Xx.Size())) - n1, err := m.Consecutive_5Xx.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Interval != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.Interval.Size())) - n2, err := m.Interval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.BaseEjectionTime != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.BaseEjectionTime.Size())) - n3, err := m.BaseEjectionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.MaxEjectionPercent != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.MaxEjectionPercent.Size())) - n4, err := m.MaxEjectionPercent.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.EnforcingConsecutive_5Xx != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.EnforcingConsecutive_5Xx.Size())) - n5, err := m.EnforcingConsecutive_5Xx.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.EnforcingSuccessRate != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.EnforcingSuccessRate.Size())) - n6, err := m.EnforcingSuccessRate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.SuccessRateMinimumHosts != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.SuccessRateMinimumHosts.Size())) - n7, err := m.SuccessRateMinimumHosts.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.SuccessRateRequestVolume != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.SuccessRateRequestVolume.Size())) - n8, err := m.SuccessRateRequestVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.SuccessRateStdevFactor != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.SuccessRateStdevFactor.Size())) - n9, err := m.SuccessRateStdevFactor.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.ConsecutiveGatewayFailure != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.ConsecutiveGatewayFailure.Size())) - n10, err := m.ConsecutiveGatewayFailure.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.EnforcingConsecutiveGatewayFailure != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintOutlierDetection(dAtA, i, uint64(m.EnforcingConsecutiveGatewayFailure.Size())) - n11, err := m.EnforcingConsecutiveGatewayFailure.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) +func (m *OutlierDetection) GetFailurePercentageThreshold() *wrappers.UInt32Value { + if m != nil { + return m.FailurePercentageThreshold } - return i, nil + return nil } -func encodeVarintOutlierDetection(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *OutlierDetection) GetEnforcingFailurePercentage() *wrappers.UInt32Value { + if m != nil { + return m.EnforcingFailurePercentage } - dAtA[offset] = uint8(v) - return offset + 1 + return nil } -func (m *OutlierDetection) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Consecutive_5Xx != nil { - l = m.Consecutive_5Xx.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.Interval != nil { - l = m.Interval.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.BaseEjectionTime != nil { - l = m.BaseEjectionTime.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.MaxEjectionPercent != nil { - l = m.MaxEjectionPercent.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.EnforcingConsecutive_5Xx != nil { - l = m.EnforcingConsecutive_5Xx.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.EnforcingSuccessRate != nil { - l = m.EnforcingSuccessRate.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.SuccessRateMinimumHosts != nil { - l = m.SuccessRateMinimumHosts.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.SuccessRateRequestVolume != nil { - l = m.SuccessRateRequestVolume.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.SuccessRateStdevFactor != nil { - l = m.SuccessRateStdevFactor.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.ConsecutiveGatewayFailure != nil { - l = m.ConsecutiveGatewayFailure.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.EnforcingConsecutiveGatewayFailure != nil { - l = m.EnforcingConsecutiveGatewayFailure.Size() - n += 1 + l + sovOutlierDetection(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) + +func (m *OutlierDetection) GetEnforcingFailurePercentageLocalOrigin() *wrappers.UInt32Value { + if m != nil { + return m.EnforcingFailurePercentageLocalOrigin } - return n + return nil } -func sovOutlierDetection(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } +func (m *OutlierDetection) GetFailurePercentageMinimumHosts() *wrappers.UInt32Value { + if m != nil { + return m.FailurePercentageMinimumHosts } - return n -} -func sozOutlierDetection(x uint64) (n int) { - return sovOutlierDetection(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return nil } -func (m *OutlierDetection) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OutlierDetection: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OutlierDetection: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Consecutive_5Xx", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Consecutive_5Xx == nil { - m.Consecutive_5Xx = &types.UInt32Value{} - } - if err := m.Consecutive_5Xx.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Interval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Interval == nil { - m.Interval = &types.Duration{} - } - if err := m.Interval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BaseEjectionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.BaseEjectionTime == nil { - m.BaseEjectionTime = &types.Duration{} - } - if err := m.BaseEjectionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxEjectionPercent", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxEjectionPercent == nil { - m.MaxEjectionPercent = &types.UInt32Value{} - } - if err := m.MaxEjectionPercent.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EnforcingConsecutive_5Xx", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EnforcingConsecutive_5Xx == nil { - m.EnforcingConsecutive_5Xx = &types.UInt32Value{} - } - if err := m.EnforcingConsecutive_5Xx.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EnforcingSuccessRate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EnforcingSuccessRate == nil { - m.EnforcingSuccessRate = &types.UInt32Value{} - } - if err := m.EnforcingSuccessRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SuccessRateMinimumHosts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SuccessRateMinimumHosts == nil { - m.SuccessRateMinimumHosts = &types.UInt32Value{} - } - if err := m.SuccessRateMinimumHosts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SuccessRateRequestVolume", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SuccessRateRequestVolume == nil { - m.SuccessRateRequestVolume = &types.UInt32Value{} - } - if err := m.SuccessRateRequestVolume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SuccessRateStdevFactor", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SuccessRateStdevFactor == nil { - m.SuccessRateStdevFactor = &types.UInt32Value{} - } - if err := m.SuccessRateStdevFactor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsecutiveGatewayFailure", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConsecutiveGatewayFailure == nil { - m.ConsecutiveGatewayFailure = &types.UInt32Value{} - } - if err := m.ConsecutiveGatewayFailure.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EnforcingConsecutiveGatewayFailure", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthOutlierDetection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthOutlierDetection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EnforcingConsecutiveGatewayFailure == nil { - m.EnforcingConsecutiveGatewayFailure = &types.UInt32Value{} - } - if err := m.EnforcingConsecutiveGatewayFailure.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipOutlierDetection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthOutlierDetection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthOutlierDetection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *OutlierDetection) GetFailurePercentageRequestVolume() *wrappers.UInt32Value { + if m != nil { + return m.FailurePercentageRequestVolume } return nil } -func skipOutlierDetection(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthOutlierDetection - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthOutlierDetection - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowOutlierDetection - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipOutlierDetection(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthOutlierDetection - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") + +func init() { + proto.RegisterType((*OutlierDetection)(nil), "envoy.api.v2.cluster.OutlierDetection") } -var ( - ErrInvalidLengthOutlierDetection = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowOutlierDetection = fmt.Errorf("proto: integer overflow") -) +func init() { + proto.RegisterFile("envoy/api/v2/cluster/outlier_detection.proto", fileDescriptor_56cd87362a3f00c9) +} + +var fileDescriptor_56cd87362a3f00c9 = []byte{ + // 796 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x96, 0x4f, 0x6f, 0xe3, 0x44, + 0x18, 0xc6, 0x71, 0xd8, 0x76, 0xc3, 0x2c, 0x6c, 0xc3, 0x10, 0x1a, 0xa7, 0xbb, 0x5b, 0x4a, 0xd0, + 0xa2, 0xa5, 0x42, 0xb6, 0x94, 0xaa, 0x67, 0x44, 0xda, 0x94, 0x3f, 0x02, 0x1a, 0xd2, 0xd2, 0x0a, + 0x15, 0x69, 0x34, 0x75, 0xde, 0xb8, 0x83, 0x6c, 0x8f, 0x99, 0x19, 0xbb, 0xee, 0x09, 0xf8, 0x04, + 0xdc, 0x10, 0x9f, 0xa1, 0x1f, 0x81, 0x03, 0x67, 0xae, 0x7c, 0x0d, 0x8e, 0x1c, 0x7b, 0x40, 0xc8, + 0x76, 0x9c, 0xd8, 0x89, 0xcb, 0xda, 0xb7, 0x48, 0xef, 0xf3, 0xfc, 0x9e, 0xf7, 0x7d, 0x3d, 0x19, + 0x0d, 0xfa, 0x10, 0xbc, 0x90, 0xdf, 0x98, 0xd4, 0x67, 0x66, 0xd8, 0x37, 0x2d, 0x27, 0x90, 0x0a, + 0x84, 0xc9, 0x03, 0xe5, 0x30, 0x10, 0x64, 0x02, 0x0a, 0x2c, 0xc5, 0xb8, 0x67, 0xf8, 0x82, 0x2b, + 0x8e, 0xdb, 0x89, 0xda, 0xa0, 0x3e, 0x33, 0xc2, 0xbe, 0x31, 0x53, 0x6f, 0x6d, 0xdb, 0x9c, 0xdb, + 0x0e, 0x98, 0x89, 0xe6, 0x32, 0x98, 0x9a, 0x93, 0x40, 0xd0, 0x85, 0x6b, 0xb5, 0x7e, 0x2d, 0xa8, + 0xef, 0x83, 0x90, 0x59, 0x3d, 0x98, 0xf8, 0xd4, 0xa4, 0x9e, 0xc7, 0x55, 0x62, 0x93, 0xa6, 0xcb, + 0x6c, 0x41, 0x15, 0xcc, 0xea, 0xcf, 0x56, 0xea, 0x52, 0x51, 0x15, 0x64, 0xf6, 0x4e, 0x48, 0x1d, + 0x36, 0xa1, 0x0a, 0xcc, 0xec, 0x47, 0x5a, 0xe8, 0xfd, 0xb1, 0x81, 0x5a, 0xc7, 0xe9, 0x24, 0x87, + 0xd9, 0x20, 0x78, 0x88, 0x36, 0x2c, 0xee, 0x49, 0xb0, 0x02, 0xc5, 0x42, 0x20, 0xfb, 0x51, 0xa4, + 0x6b, 0x3b, 0xda, 0x8b, 0x47, 0xfd, 0xa7, 0x46, 0xda, 0xa6, 0x91, 0xb5, 0x69, 0x7c, 0xf3, 0x99, + 0xa7, 0xf6, 0xfa, 0x67, 0xd4, 0x09, 0x60, 0xfc, 0x38, 0x67, 0xda, 0x8f, 0x22, 0xfc, 0x11, 0x6a, + 0x32, 0x4f, 0x81, 0x08, 0xa9, 0xa3, 0x37, 0x12, 0x7f, 0x77, 0xc5, 0x7f, 0x38, 0x5b, 0xc3, 0xa0, + 0x79, 0x37, 0x58, 0xbb, 0xd5, 0x1a, 0xbb, 0xaf, 0x8c, 0xe7, 0x26, 0xfc, 0x35, 0xc2, 0x97, 0x54, + 0x02, 0x81, 0xef, 0xd3, 0xc6, 0x88, 0x62, 0x2e, 0xe8, 0xaf, 0x56, 0x47, 0xb5, 0x62, 0xfb, 0x70, + 0xe6, 0x3e, 0x65, 0x2e, 0xe0, 0x73, 0xd4, 0x76, 0x69, 0xb4, 0x20, 0xfa, 0x20, 0x2c, 0xf0, 0x94, + 0xfe, 0xe0, 0xe5, 0xf3, 0x0d, 0x1e, 0xde, 0x0d, 0x1e, 0xec, 0x36, 0xf4, 0xc9, 0x18, 0xbb, 0x34, + 0xca, 0xa8, 0xa3, 0x14, 0x80, 0x29, 0xea, 0x82, 0x37, 0xe5, 0xc2, 0x62, 0x9e, 0x4d, 0x96, 0xb7, + 0xb7, 0x56, 0x87, 0xde, 0x99, 0x73, 0x0e, 0x8a, 0xfb, 0xbc, 0x40, 0x9b, 0x8b, 0x08, 0x19, 0x58, + 0x16, 0x48, 0x49, 0xe2, 0x33, 0xa0, 0xaf, 0xd7, 0xe1, 0xb7, 0xe7, 0x90, 0x93, 0x94, 0x31, 0xa6, + 0x0a, 0xf0, 0xb7, 0x68, 0x2b, 0x8f, 0x24, 0x2e, 0xf3, 0x98, 0x1b, 0xb8, 0xe4, 0x8a, 0x4b, 0x25, + 0xf5, 0x87, 0x15, 0x3e, 0x7f, 0x47, 0x2e, 0x70, 0x5f, 0xa6, 0xee, 0x4f, 0x63, 0x33, 0xbe, 0x40, + 0x4f, 0x0a, 0x68, 0x01, 0x3f, 0x04, 0x20, 0x15, 0x09, 0xb9, 0x13, 0xb8, 0xa0, 0x37, 0x2b, 0xb0, + 0xf5, 0x1c, 0x7b, 0x9c, 0xda, 0xcf, 0x12, 0x37, 0x3e, 0x47, 0xdd, 0x02, 0x5c, 0xaa, 0x09, 0x84, + 0x64, 0x4a, 0x2d, 0xc5, 0x85, 0xfe, 0x5a, 0x05, 0xf4, 0x66, 0x0e, 0x7d, 0x12, 0x9b, 0x8f, 0x12, + 0x2f, 0xfe, 0x0e, 0x3d, 0xc9, 0x7f, 0x46, 0x9b, 0x2a, 0xb8, 0xa6, 0x37, 0x64, 0x4a, 0x99, 0x13, + 0x08, 0xd0, 0x51, 0x05, 0x74, 0x37, 0x07, 0xf8, 0x24, 0xf5, 0x1f, 0xa5, 0x76, 0x1c, 0xa1, 0xe7, + 0xe5, 0xc7, 0x65, 0x39, 0xe7, 0x51, 0x9d, 0x4f, 0xdb, 0x2b, 0x3b, 0x3a, 0x4b, 0xc9, 0x9f, 0xa3, + 0x9e, 0xf4, 0x1d, 0xa6, 0x08, 0x44, 0x0a, 0x84, 0x47, 0x1d, 0xe2, 0x70, 0x8b, 0x3a, 0x84, 0x0b, + 0x66, 0x33, 0x8f, 0x80, 0x10, 0x5c, 0x48, 0xfd, 0xf5, 0x1d, 0xed, 0x45, 0x73, 0xbc, 0x9d, 0x28, + 0x87, 0x33, 0xe1, 0x17, 0xb1, 0xee, 0x38, 0x91, 0x0d, 0x13, 0x15, 0x06, 0xb4, 0x93, 0xef, 0xbd, + 0x00, 0xca, 0x06, 0x78, 0xa3, 0xc2, 0xa2, 0x9e, 0xe5, 0x28, 0xb9, 0x94, 0xac, 0xe5, 0x9f, 0x35, + 0xb4, 0x5b, 0xbe, 0xad, 0xd2, 0xc4, 0xc7, 0x75, 0x56, 0xf6, 0x7e, 0xd9, 0xca, 0x4a, 0x7a, 0x90, + 0xe8, 0xbd, 0x45, 0x0b, 0x85, 0xd8, 0xc2, 0x3f, 0x71, 0xa3, 0x4e, 0xf6, 0x3b, 0x73, 0x62, 0x2e, + 0x30, 0xff, 0xa7, 0xb4, 0xd1, 0xd3, 0xd9, 0x50, 0xd9, 0x45, 0x45, 0x6d, 0x20, 0xea, 0x4a, 0x80, + 0xbc, 0xe2, 0xce, 0x44, 0x6f, 0xd5, 0x49, 0xdb, 0x9a, 0xa1, 0x46, 0x73, 0xd2, 0x69, 0x06, 0x8a, + 0x83, 0x16, 0xd3, 0xad, 0x46, 0xea, 0x6f, 0xd6, 0x0a, 0x9a, 0xa3, 0x8e, 0x96, 0x13, 0xf1, 0x8f, + 0xe8, 0x83, 0xff, 0x0b, 0x2a, 0x6c, 0x56, 0xc7, 0x75, 0x52, 0x9f, 0xdf, 0x9f, 0x9a, 0xdb, 0x6e, + 0x7c, 0x64, 0x4b, 0x62, 0x8b, 0xb7, 0xdd, 0x5b, 0x55, 0x8e, 0xec, 0xca, 0x36, 0x0b, 0x77, 0x9e, + 0x8d, 0xde, 0x2d, 0x89, 0x59, 0xba, 0xf9, 0xda, 0x15, 0x72, 0xb6, 0x57, 0x72, 0x0a, 0xf7, 0xdf, + 0xe0, 0x57, 0xed, 0x9f, 0xdf, 0xfe, 0xfd, 0x65, 0xad, 0x8b, 0x3b, 0xe9, 0xbb, 0xc3, 0xe2, 0xde, + 0x94, 0xd9, 0xd9, 0xbb, 0xc3, 0x08, 0xf7, 0x7e, 0xff, 0xe9, 0xcf, 0xbf, 0xd6, 0x1b, 0x2d, 0x0d, + 0xf5, 0x18, 0x37, 0x12, 0x8d, 0x2f, 0x78, 0x74, 0x63, 0x94, 0x3d, 0x53, 0x06, 0x6f, 0x2f, 0xbf, + 0x05, 0x46, 0x71, 0x4f, 0x23, 0xed, 0xb6, 0xb1, 0x39, 0x4c, 0xf4, 0x1f, 0xfb, 0xcc, 0x38, 0xeb, + 0x1b, 0x07, 0xa9, 0xfe, 0xab, 0x93, 0xbf, 0xef, 0x2b, 0x5c, 0xae, 0x27, 0xe3, 0xec, 0xfd, 0x17, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0xc1, 0x8b, 0x5f, 0x3e, 0x09, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster/outlier_detection.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/cluster/outlier_detection.proto -package cluster +package envoy_api_v2_cluster import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _outlier_detection_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on OutlierDetection with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -41,23 +44,18 @@ return nil } - { - tmp := m.GetConsecutive_5Xx() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return OutlierDetectionValidationError{ - field: "Consecutive_5Xx", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetConsecutive_5Xx()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "Consecutive_5Xx", + reason: "embedded message failed validation", + cause: err, } } } if d := m.GetInterval(); d != nil { - dur, err := types.DurationFromProto(d) + dur, err := ptypes.Duration(d) if err != nil { return OutlierDetectionValidationError{ field: "Interval", @@ -78,7 +76,7 @@ } if d := m.GetBaseEjectionTime(); d != nil { - dur, err := types.DurationFromProto(d) + dur, err := ptypes.Duration(d) if err != nil { return OutlierDetectionValidationError{ field: "BaseEjectionTime", @@ -131,77 +129,144 @@ } - { - tmp := m.GetSuccessRateMinimumHosts() + if v, ok := interface{}(m.GetSuccessRateMinimumHosts()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "SuccessRateMinimumHosts", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetSuccessRateRequestVolume()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "SuccessRateRequestVolume", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return OutlierDetectionValidationError{ - field: "SuccessRateMinimumHosts", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSuccessRateStdevFactor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "SuccessRateStdevFactor", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetSuccessRateRequestVolume() + if v, ok := interface{}(m.GetConsecutiveGatewayFailure()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "ConsecutiveGatewayFailure", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if wrapper := m.GetEnforcingConsecutiveGatewayFailure(); wrapper != nil { - if err := v.Validate(); err != nil { - return OutlierDetectionValidationError{ - field: "SuccessRateRequestVolume", - reason: "embedded message failed validation", - cause: err, - } + if wrapper.GetValue() > 100 { + return OutlierDetectionValidationError{ + field: "EnforcingConsecutiveGatewayFailure", + reason: "value must be less than or equal to 100", } } + } - { - tmp := m.GetSuccessRateStdevFactor() + // no validation rules for SplitExternalLocalOriginErrors - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetConsecutiveLocalOriginFailure()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "ConsecutiveLocalOriginFailure", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return OutlierDetectionValidationError{ - field: "SuccessRateStdevFactor", - reason: "embedded message failed validation", - cause: err, - } + if wrapper := m.GetEnforcingConsecutiveLocalOriginFailure(); wrapper != nil { + + if wrapper.GetValue() > 100 { + return OutlierDetectionValidationError{ + field: "EnforcingConsecutiveLocalOriginFailure", + reason: "value must be less than or equal to 100", } } + } - { - tmp := m.GetConsecutiveGatewayFailure() + if wrapper := m.GetEnforcingLocalOriginSuccessRate(); wrapper != nil { + + if wrapper.GetValue() > 100 { + return OutlierDetectionValidationError{ + field: "EnforcingLocalOriginSuccessRate", + reason: "value must be less than or equal to 100", + } + } + + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if wrapper := m.GetFailurePercentageThreshold(); wrapper != nil { - if err := v.Validate(); err != nil { - return OutlierDetectionValidationError{ - field: "ConsecutiveGatewayFailure", - reason: "embedded message failed validation", - cause: err, - } + if wrapper.GetValue() > 100 { + return OutlierDetectionValidationError{ + field: "FailurePercentageThreshold", + reason: "value must be less than or equal to 100", } } + } - if wrapper := m.GetEnforcingConsecutiveGatewayFailure(); wrapper != nil { + if wrapper := m.GetEnforcingFailurePercentage(); wrapper != nil { if wrapper.GetValue() > 100 { return OutlierDetectionValidationError{ - field: "EnforcingConsecutiveGatewayFailure", + field: "EnforcingFailurePercentage", + reason: "value must be less than or equal to 100", + } + } + + } + + if wrapper := m.GetEnforcingFailurePercentageLocalOrigin(); wrapper != nil { + + if wrapper.GetValue() > 100 { + return OutlierDetectionValidationError{ + field: "EnforcingFailurePercentageLocalOrigin", reason: "value must be less than or equal to 100", } } } + if v, ok := interface{}(m.GetFailurePercentageMinimumHosts()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "FailurePercentageMinimumHosts", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetFailurePercentageRequestVolume()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OutlierDetectionValidationError{ + field: "FailurePercentageRequestVolume", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1850 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/cluster.proto + +package envoy_api_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + auth "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" + cluster "github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type Cluster_DiscoveryType int32 + +const ( + Cluster_STATIC Cluster_DiscoveryType = 0 + Cluster_STRICT_DNS Cluster_DiscoveryType = 1 + Cluster_LOGICAL_DNS Cluster_DiscoveryType = 2 + Cluster_EDS Cluster_DiscoveryType = 3 + Cluster_ORIGINAL_DST Cluster_DiscoveryType = 4 +) + +var Cluster_DiscoveryType_name = map[int32]string{ + 0: "STATIC", + 1: "STRICT_DNS", + 2: "LOGICAL_DNS", + 3: "EDS", + 4: "ORIGINAL_DST", +} + +var Cluster_DiscoveryType_value = map[string]int32{ + "STATIC": 0, + "STRICT_DNS": 1, + "LOGICAL_DNS": 2, + "EDS": 3, + "ORIGINAL_DST": 4, +} + +func (x Cluster_DiscoveryType) String() string { + return proto.EnumName(Cluster_DiscoveryType_name, int32(x)) +} + +func (Cluster_DiscoveryType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 0} +} + +type Cluster_LbPolicy int32 + +const ( + Cluster_ROUND_ROBIN Cluster_LbPolicy = 0 + Cluster_LEAST_REQUEST Cluster_LbPolicy = 1 + Cluster_RING_HASH Cluster_LbPolicy = 2 + Cluster_RANDOM Cluster_LbPolicy = 3 + Cluster_ORIGINAL_DST_LB Cluster_LbPolicy = 4 // Deprecated: Do not use. + Cluster_MAGLEV Cluster_LbPolicy = 5 + Cluster_CLUSTER_PROVIDED Cluster_LbPolicy = 6 + Cluster_LOAD_BALANCING_POLICY_CONFIG Cluster_LbPolicy = 7 +) + +var Cluster_LbPolicy_name = map[int32]string{ + 0: "ROUND_ROBIN", + 1: "LEAST_REQUEST", + 2: "RING_HASH", + 3: "RANDOM", + 4: "ORIGINAL_DST_LB", + 5: "MAGLEV", + 6: "CLUSTER_PROVIDED", + 7: "LOAD_BALANCING_POLICY_CONFIG", +} + +var Cluster_LbPolicy_value = map[string]int32{ + "ROUND_ROBIN": 0, + "LEAST_REQUEST": 1, + "RING_HASH": 2, + "RANDOM": 3, + "ORIGINAL_DST_LB": 4, + "MAGLEV": 5, + "CLUSTER_PROVIDED": 6, + "LOAD_BALANCING_POLICY_CONFIG": 7, +} + +func (x Cluster_LbPolicy) String() string { + return proto.EnumName(Cluster_LbPolicy_name, int32(x)) +} + +func (Cluster_LbPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 1} +} + +type Cluster_DnsLookupFamily int32 + +const ( + Cluster_AUTO Cluster_DnsLookupFamily = 0 + Cluster_V4_ONLY Cluster_DnsLookupFamily = 1 + Cluster_V6_ONLY Cluster_DnsLookupFamily = 2 +) + +var Cluster_DnsLookupFamily_name = map[int32]string{ + 0: "AUTO", + 1: "V4_ONLY", + 2: "V6_ONLY", +} + +var Cluster_DnsLookupFamily_value = map[string]int32{ + "AUTO": 0, + "V4_ONLY": 1, + "V6_ONLY": 2, +} + +func (x Cluster_DnsLookupFamily) String() string { + return proto.EnumName(Cluster_DnsLookupFamily_name, int32(x)) +} + +func (Cluster_DnsLookupFamily) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 2} +} + +type Cluster_ClusterProtocolSelection int32 + +const ( + Cluster_USE_CONFIGURED_PROTOCOL Cluster_ClusterProtocolSelection = 0 + Cluster_USE_DOWNSTREAM_PROTOCOL Cluster_ClusterProtocolSelection = 1 +) + +var Cluster_ClusterProtocolSelection_name = map[int32]string{ + 0: "USE_CONFIGURED_PROTOCOL", + 1: "USE_DOWNSTREAM_PROTOCOL", +} + +var Cluster_ClusterProtocolSelection_value = map[string]int32{ + "USE_CONFIGURED_PROTOCOL": 0, + "USE_DOWNSTREAM_PROTOCOL": 1, +} + +func (x Cluster_ClusterProtocolSelection) String() string { + return proto.EnumName(Cluster_ClusterProtocolSelection_name, int32(x)) +} + +func (Cluster_ClusterProtocolSelection) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 3} +} + +type Cluster_LbSubsetConfig_LbSubsetFallbackPolicy int32 + +const ( + Cluster_LbSubsetConfig_NO_FALLBACK Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 0 + Cluster_LbSubsetConfig_ANY_ENDPOINT Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 1 + Cluster_LbSubsetConfig_DEFAULT_SUBSET Cluster_LbSubsetConfig_LbSubsetFallbackPolicy = 2 +) + +var Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name = map[int32]string{ + 0: "NO_FALLBACK", + 1: "ANY_ENDPOINT", + 2: "DEFAULT_SUBSET", +} + +var Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value = map[string]int32{ + "NO_FALLBACK": 0, + "ANY_ENDPOINT": 1, + "DEFAULT_SUBSET": 2, +} + +func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) String() string { + return proto.EnumName(Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, int32(x)) +} + +func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 3, 0} +} + +type Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy int32 + +const ( + Cluster_LbSubsetConfig_LbSubsetSelector_NOT_DEFINED Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 0 + Cluster_LbSubsetConfig_LbSubsetSelector_NO_FALLBACK Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 1 + Cluster_LbSubsetConfig_LbSubsetSelector_ANY_ENDPOINT Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 2 + Cluster_LbSubsetConfig_LbSubsetSelector_DEFAULT_SUBSET Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 3 + Cluster_LbSubsetConfig_LbSubsetSelector_KEYS_SUBSET Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy = 4 +) + +var Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name = map[int32]string{ + 0: "NOT_DEFINED", + 1: "NO_FALLBACK", + 2: "ANY_ENDPOINT", + 3: "DEFAULT_SUBSET", + 4: "KEYS_SUBSET", +} + +var Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_value = map[string]int32{ + "NOT_DEFINED": 0, + "NO_FALLBACK": 1, + "ANY_ENDPOINT": 2, + "DEFAULT_SUBSET": 3, + "KEYS_SUBSET": 4, +} + +func (x Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy) String() string { + return proto.EnumName(Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name, int32(x)) +} + +func (Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 3, 0, 0} +} + +type Cluster_RingHashLbConfig_HashFunction int32 + +const ( + Cluster_RingHashLbConfig_XX_HASH Cluster_RingHashLbConfig_HashFunction = 0 + Cluster_RingHashLbConfig_MURMUR_HASH_2 Cluster_RingHashLbConfig_HashFunction = 1 +) + +var Cluster_RingHashLbConfig_HashFunction_name = map[int32]string{ + 0: "XX_HASH", + 1: "MURMUR_HASH_2", +} + +var Cluster_RingHashLbConfig_HashFunction_value = map[string]int32{ + "XX_HASH": 0, + "MURMUR_HASH_2": 1, +} + +func (x Cluster_RingHashLbConfig_HashFunction) String() string { + return proto.EnumName(Cluster_RingHashLbConfig_HashFunction_name, int32(x)) +} + +func (Cluster_RingHashLbConfig_HashFunction) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 5, 0} +} + +type Cluster struct { + TransportSocketMatches []*Cluster_TransportSocketMatch `protobuf:"bytes,43,rep,name=transport_socket_matches,json=transportSocketMatches,proto3" json:"transport_socket_matches,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + AltStatName string `protobuf:"bytes,28,opt,name=alt_stat_name,json=altStatName,proto3" json:"alt_stat_name,omitempty"` + // Types that are valid to be assigned to ClusterDiscoveryType: + // *Cluster_Type + // *Cluster_ClusterType + ClusterDiscoveryType isCluster_ClusterDiscoveryType `protobuf_oneof:"cluster_discovery_type"` + EdsClusterConfig *Cluster_EdsClusterConfig `protobuf:"bytes,3,opt,name=eds_cluster_config,json=edsClusterConfig,proto3" json:"eds_cluster_config,omitempty"` + ConnectTimeout *duration.Duration `protobuf:"bytes,4,opt,name=connect_timeout,json=connectTimeout,proto3" json:"connect_timeout,omitempty"` + PerConnectionBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"` + LbPolicy Cluster_LbPolicy `protobuf:"varint,6,opt,name=lb_policy,json=lbPolicy,proto3,enum=envoy.api.v2.Cluster_LbPolicy" json:"lb_policy,omitempty"` + Hosts []*core.Address `protobuf:"bytes,7,rep,name=hosts,proto3" json:"hosts,omitempty"` // Deprecated: Do not use. + LoadAssignment *ClusterLoadAssignment `protobuf:"bytes,33,opt,name=load_assignment,json=loadAssignment,proto3" json:"load_assignment,omitempty"` + HealthChecks []*core.HealthCheck `protobuf:"bytes,8,rep,name=health_checks,json=healthChecks,proto3" json:"health_checks,omitempty"` + MaxRequestsPerConnection *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=max_requests_per_connection,json=maxRequestsPerConnection,proto3" json:"max_requests_per_connection,omitempty"` + CircuitBreakers *cluster.CircuitBreakers `protobuf:"bytes,10,opt,name=circuit_breakers,json=circuitBreakers,proto3" json:"circuit_breakers,omitempty"` + TlsContext *auth.UpstreamTlsContext `protobuf:"bytes,11,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` // Deprecated: Do not use. + UpstreamHttpProtocolOptions *core.UpstreamHttpProtocolOptions `protobuf:"bytes,46,opt,name=upstream_http_protocol_options,json=upstreamHttpProtocolOptions,proto3" json:"upstream_http_protocol_options,omitempty"` + CommonHttpProtocolOptions *core.HttpProtocolOptions `protobuf:"bytes,29,opt,name=common_http_protocol_options,json=commonHttpProtocolOptions,proto3" json:"common_http_protocol_options,omitempty"` + HttpProtocolOptions *core.Http1ProtocolOptions `protobuf:"bytes,13,opt,name=http_protocol_options,json=httpProtocolOptions,proto3" json:"http_protocol_options,omitempty"` + Http2ProtocolOptions *core.Http2ProtocolOptions `protobuf:"bytes,14,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"` + ExtensionProtocolOptions map[string]*_struct.Struct `protobuf:"bytes,35,rep,name=extension_protocol_options,json=extensionProtocolOptions,proto3" json:"extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. + TypedExtensionProtocolOptions map[string]*any.Any `protobuf:"bytes,36,rep,name=typed_extension_protocol_options,json=typedExtensionProtocolOptions,proto3" json:"typed_extension_protocol_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + DnsRefreshRate *duration.Duration `protobuf:"bytes,16,opt,name=dns_refresh_rate,json=dnsRefreshRate,proto3" json:"dns_refresh_rate,omitempty"` + DnsFailureRefreshRate *Cluster_RefreshRate `protobuf:"bytes,44,opt,name=dns_failure_refresh_rate,json=dnsFailureRefreshRate,proto3" json:"dns_failure_refresh_rate,omitempty"` + RespectDnsTtl bool `protobuf:"varint,39,opt,name=respect_dns_ttl,json=respectDnsTtl,proto3" json:"respect_dns_ttl,omitempty"` + DnsLookupFamily Cluster_DnsLookupFamily `protobuf:"varint,17,opt,name=dns_lookup_family,json=dnsLookupFamily,proto3,enum=envoy.api.v2.Cluster_DnsLookupFamily" json:"dns_lookup_family,omitempty"` + DnsResolvers []*core.Address `protobuf:"bytes,18,rep,name=dns_resolvers,json=dnsResolvers,proto3" json:"dns_resolvers,omitempty"` + UseTcpForDnsLookups bool `protobuf:"varint,45,opt,name=use_tcp_for_dns_lookups,json=useTcpForDnsLookups,proto3" json:"use_tcp_for_dns_lookups,omitempty"` + OutlierDetection *cluster.OutlierDetection `protobuf:"bytes,19,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"` + CleanupInterval *duration.Duration `protobuf:"bytes,20,opt,name=cleanup_interval,json=cleanupInterval,proto3" json:"cleanup_interval,omitempty"` + UpstreamBindConfig *core.BindConfig `protobuf:"bytes,21,opt,name=upstream_bind_config,json=upstreamBindConfig,proto3" json:"upstream_bind_config,omitempty"` + LbSubsetConfig *Cluster_LbSubsetConfig `protobuf:"bytes,22,opt,name=lb_subset_config,json=lbSubsetConfig,proto3" json:"lb_subset_config,omitempty"` + // Types that are valid to be assigned to LbConfig: + // *Cluster_RingHashLbConfig_ + // *Cluster_OriginalDstLbConfig_ + // *Cluster_LeastRequestLbConfig_ + LbConfig isCluster_LbConfig `protobuf_oneof:"lb_config"` + CommonLbConfig *Cluster_CommonLbConfig `protobuf:"bytes,27,opt,name=common_lb_config,json=commonLbConfig,proto3" json:"common_lb_config,omitempty"` + TransportSocket *core.TransportSocket `protobuf:"bytes,24,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"` + Metadata *core.Metadata `protobuf:"bytes,25,opt,name=metadata,proto3" json:"metadata,omitempty"` + ProtocolSelection Cluster_ClusterProtocolSelection `protobuf:"varint,26,opt,name=protocol_selection,json=protocolSelection,proto3,enum=envoy.api.v2.Cluster_ClusterProtocolSelection" json:"protocol_selection,omitempty"` + UpstreamConnectionOptions *UpstreamConnectionOptions `protobuf:"bytes,30,opt,name=upstream_connection_options,json=upstreamConnectionOptions,proto3" json:"upstream_connection_options,omitempty"` + CloseConnectionsOnHostHealthFailure bool `protobuf:"varint,31,opt,name=close_connections_on_host_health_failure,json=closeConnectionsOnHostHealthFailure,proto3" json:"close_connections_on_host_health_failure,omitempty"` + DrainConnectionsOnHostRemoval bool `protobuf:"varint,32,opt,name=drain_connections_on_host_removal,json=drainConnectionsOnHostRemoval,proto3" json:"drain_connections_on_host_removal,omitempty"` + Filters []*cluster.Filter `protobuf:"bytes,40,rep,name=filters,proto3" json:"filters,omitempty"` + LoadBalancingPolicy *LoadBalancingPolicy `protobuf:"bytes,41,opt,name=load_balancing_policy,json=loadBalancingPolicy,proto3" json:"load_balancing_policy,omitempty"` + LrsServer *core.ConfigSource `protobuf:"bytes,42,opt,name=lrs_server,json=lrsServer,proto3" json:"lrs_server,omitempty"` + TrackTimeoutBudgets bool `protobuf:"varint,47,opt,name=track_timeout_budgets,json=trackTimeoutBudgets,proto3" json:"track_timeout_budgets,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0} +} + +func (m *Cluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster.Unmarshal(m, b) +} +func (m *Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster.Marshal(b, m, deterministic) +} +func (m *Cluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster.Merge(m, src) +} +func (m *Cluster) XXX_Size() int { + return xxx_messageInfo_Cluster.Size(m) +} +func (m *Cluster) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster proto.InternalMessageInfo + +func (m *Cluster) GetTransportSocketMatches() []*Cluster_TransportSocketMatch { + if m != nil { + return m.TransportSocketMatches + } + return nil +} + +func (m *Cluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster) GetAltStatName() string { + if m != nil { + return m.AltStatName + } + return "" +} + +type isCluster_ClusterDiscoveryType interface { + isCluster_ClusterDiscoveryType() +} + +type Cluster_Type struct { + Type Cluster_DiscoveryType `protobuf:"varint,2,opt,name=type,proto3,enum=envoy.api.v2.Cluster_DiscoveryType,oneof"` +} + +type Cluster_ClusterType struct { + ClusterType *Cluster_CustomClusterType `protobuf:"bytes,38,opt,name=cluster_type,json=clusterType,proto3,oneof"` +} + +func (*Cluster_Type) isCluster_ClusterDiscoveryType() {} + +func (*Cluster_ClusterType) isCluster_ClusterDiscoveryType() {} + +func (m *Cluster) GetClusterDiscoveryType() isCluster_ClusterDiscoveryType { + if m != nil { + return m.ClusterDiscoveryType + } + return nil +} + +func (m *Cluster) GetType() Cluster_DiscoveryType { + if x, ok := m.GetClusterDiscoveryType().(*Cluster_Type); ok { + return x.Type + } + return Cluster_STATIC +} + +func (m *Cluster) GetClusterType() *Cluster_CustomClusterType { + if x, ok := m.GetClusterDiscoveryType().(*Cluster_ClusterType); ok { + return x.ClusterType + } + return nil +} + +func (m *Cluster) GetEdsClusterConfig() *Cluster_EdsClusterConfig { + if m != nil { + return m.EdsClusterConfig + } + return nil +} + +func (m *Cluster) GetConnectTimeout() *duration.Duration { + if m != nil { + return m.ConnectTimeout + } + return nil +} + +func (m *Cluster) GetPerConnectionBufferLimitBytes() *wrappers.UInt32Value { + if m != nil { + return m.PerConnectionBufferLimitBytes + } + return nil +} + +func (m *Cluster) GetLbPolicy() Cluster_LbPolicy { + if m != nil { + return m.LbPolicy + } + return Cluster_ROUND_ROBIN +} + +// Deprecated: Do not use. +func (m *Cluster) GetHosts() []*core.Address { + if m != nil { + return m.Hosts + } + return nil +} + +func (m *Cluster) GetLoadAssignment() *ClusterLoadAssignment { + if m != nil { + return m.LoadAssignment + } + return nil +} + +func (m *Cluster) GetHealthChecks() []*core.HealthCheck { + if m != nil { + return m.HealthChecks + } + return nil +} + +func (m *Cluster) GetMaxRequestsPerConnection() *wrappers.UInt32Value { + if m != nil { + return m.MaxRequestsPerConnection + } + return nil +} + +func (m *Cluster) GetCircuitBreakers() *cluster.CircuitBreakers { + if m != nil { + return m.CircuitBreakers + } + return nil +} + +// Deprecated: Do not use. +func (m *Cluster) GetTlsContext() *auth.UpstreamTlsContext { + if m != nil { + return m.TlsContext + } + return nil +} + +func (m *Cluster) GetUpstreamHttpProtocolOptions() *core.UpstreamHttpProtocolOptions { + if m != nil { + return m.UpstreamHttpProtocolOptions + } + return nil +} + +func (m *Cluster) GetCommonHttpProtocolOptions() *core.HttpProtocolOptions { + if m != nil { + return m.CommonHttpProtocolOptions + } + return nil +} + +func (m *Cluster) GetHttpProtocolOptions() *core.Http1ProtocolOptions { + if m != nil { + return m.HttpProtocolOptions + } + return nil +} + +func (m *Cluster) GetHttp2ProtocolOptions() *core.Http2ProtocolOptions { + if m != nil { + return m.Http2ProtocolOptions + } + return nil +} + +// Deprecated: Do not use. +func (m *Cluster) GetExtensionProtocolOptions() map[string]*_struct.Struct { + if m != nil { + return m.ExtensionProtocolOptions + } + return nil +} + +func (m *Cluster) GetTypedExtensionProtocolOptions() map[string]*any.Any { + if m != nil { + return m.TypedExtensionProtocolOptions + } + return nil +} + +func (m *Cluster) GetDnsRefreshRate() *duration.Duration { + if m != nil { + return m.DnsRefreshRate + } + return nil +} + +func (m *Cluster) GetDnsFailureRefreshRate() *Cluster_RefreshRate { + if m != nil { + return m.DnsFailureRefreshRate + } + return nil +} + +func (m *Cluster) GetRespectDnsTtl() bool { + if m != nil { + return m.RespectDnsTtl + } + return false +} + +func (m *Cluster) GetDnsLookupFamily() Cluster_DnsLookupFamily { + if m != nil { + return m.DnsLookupFamily + } + return Cluster_AUTO +} + +func (m *Cluster) GetDnsResolvers() []*core.Address { + if m != nil { + return m.DnsResolvers + } + return nil +} + +func (m *Cluster) GetUseTcpForDnsLookups() bool { + if m != nil { + return m.UseTcpForDnsLookups + } + return false +} + +func (m *Cluster) GetOutlierDetection() *cluster.OutlierDetection { + if m != nil { + return m.OutlierDetection + } + return nil +} + +func (m *Cluster) GetCleanupInterval() *duration.Duration { + if m != nil { + return m.CleanupInterval + } + return nil +} + +func (m *Cluster) GetUpstreamBindConfig() *core.BindConfig { + if m != nil { + return m.UpstreamBindConfig + } + return nil +} + +func (m *Cluster) GetLbSubsetConfig() *Cluster_LbSubsetConfig { + if m != nil { + return m.LbSubsetConfig + } + return nil +} + +type isCluster_LbConfig interface { + isCluster_LbConfig() +} + +type Cluster_RingHashLbConfig_ struct { + RingHashLbConfig *Cluster_RingHashLbConfig `protobuf:"bytes,23,opt,name=ring_hash_lb_config,json=ringHashLbConfig,proto3,oneof"` +} + +type Cluster_OriginalDstLbConfig_ struct { + OriginalDstLbConfig *Cluster_OriginalDstLbConfig `protobuf:"bytes,34,opt,name=original_dst_lb_config,json=originalDstLbConfig,proto3,oneof"` +} + +type Cluster_LeastRequestLbConfig_ struct { + LeastRequestLbConfig *Cluster_LeastRequestLbConfig `protobuf:"bytes,37,opt,name=least_request_lb_config,json=leastRequestLbConfig,proto3,oneof"` +} + +func (*Cluster_RingHashLbConfig_) isCluster_LbConfig() {} + +func (*Cluster_OriginalDstLbConfig_) isCluster_LbConfig() {} + +func (*Cluster_LeastRequestLbConfig_) isCluster_LbConfig() {} + +func (m *Cluster) GetLbConfig() isCluster_LbConfig { + if m != nil { + return m.LbConfig + } + return nil +} + +func (m *Cluster) GetRingHashLbConfig() *Cluster_RingHashLbConfig { + if x, ok := m.GetLbConfig().(*Cluster_RingHashLbConfig_); ok { + return x.RingHashLbConfig + } + return nil +} + +func (m *Cluster) GetOriginalDstLbConfig() *Cluster_OriginalDstLbConfig { + if x, ok := m.GetLbConfig().(*Cluster_OriginalDstLbConfig_); ok { + return x.OriginalDstLbConfig + } + return nil +} + +func (m *Cluster) GetLeastRequestLbConfig() *Cluster_LeastRequestLbConfig { + if x, ok := m.GetLbConfig().(*Cluster_LeastRequestLbConfig_); ok { + return x.LeastRequestLbConfig + } + return nil +} + +func (m *Cluster) GetCommonLbConfig() *Cluster_CommonLbConfig { + if m != nil { + return m.CommonLbConfig + } + return nil +} + +func (m *Cluster) GetTransportSocket() *core.TransportSocket { + if m != nil { + return m.TransportSocket + } + return nil +} + +func (m *Cluster) GetMetadata() *core.Metadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Cluster) GetProtocolSelection() Cluster_ClusterProtocolSelection { + if m != nil { + return m.ProtocolSelection + } + return Cluster_USE_CONFIGURED_PROTOCOL +} + +func (m *Cluster) GetUpstreamConnectionOptions() *UpstreamConnectionOptions { + if m != nil { + return m.UpstreamConnectionOptions + } + return nil +} + +func (m *Cluster) GetCloseConnectionsOnHostHealthFailure() bool { + if m != nil { + return m.CloseConnectionsOnHostHealthFailure + } + return false +} + +func (m *Cluster) GetDrainConnectionsOnHostRemoval() bool { + if m != nil { + return m.DrainConnectionsOnHostRemoval + } + return false +} + +func (m *Cluster) GetFilters() []*cluster.Filter { + if m != nil { + return m.Filters + } + return nil +} + +func (m *Cluster) GetLoadBalancingPolicy() *LoadBalancingPolicy { + if m != nil { + return m.LoadBalancingPolicy + } + return nil +} + +func (m *Cluster) GetLrsServer() *core.ConfigSource { + if m != nil { + return m.LrsServer + } + return nil +} + +func (m *Cluster) GetTrackTimeoutBudgets() bool { + if m != nil { + return m.TrackTimeoutBudgets + } + return false +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Cluster) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Cluster_Type)(nil), + (*Cluster_ClusterType)(nil), + (*Cluster_RingHashLbConfig_)(nil), + (*Cluster_OriginalDstLbConfig_)(nil), + (*Cluster_LeastRequestLbConfig_)(nil), + } +} + +type Cluster_TransportSocketMatch struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Match *_struct.Struct `protobuf:"bytes,2,opt,name=match,proto3" json:"match,omitempty"` + TransportSocket *core.TransportSocket `protobuf:"bytes,3,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_TransportSocketMatch) Reset() { *m = Cluster_TransportSocketMatch{} } +func (m *Cluster_TransportSocketMatch) String() string { return proto.CompactTextString(m) } +func (*Cluster_TransportSocketMatch) ProtoMessage() {} +func (*Cluster_TransportSocketMatch) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 0} +} + +func (m *Cluster_TransportSocketMatch) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_TransportSocketMatch.Unmarshal(m, b) +} +func (m *Cluster_TransportSocketMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_TransportSocketMatch.Marshal(b, m, deterministic) +} +func (m *Cluster_TransportSocketMatch) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_TransportSocketMatch.Merge(m, src) +} +func (m *Cluster_TransportSocketMatch) XXX_Size() int { + return xxx_messageInfo_Cluster_TransportSocketMatch.Size(m) +} +func (m *Cluster_TransportSocketMatch) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_TransportSocketMatch.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_TransportSocketMatch proto.InternalMessageInfo + +func (m *Cluster_TransportSocketMatch) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster_TransportSocketMatch) GetMatch() *_struct.Struct { + if m != nil { + return m.Match + } + return nil +} + +func (m *Cluster_TransportSocketMatch) GetTransportSocket() *core.TransportSocket { + if m != nil { + return m.TransportSocket + } + return nil +} + +type Cluster_CustomClusterType struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + TypedConfig *any.Any `protobuf:"bytes,2,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_CustomClusterType) Reset() { *m = Cluster_CustomClusterType{} } +func (m *Cluster_CustomClusterType) String() string { return proto.CompactTextString(m) } +func (*Cluster_CustomClusterType) ProtoMessage() {} +func (*Cluster_CustomClusterType) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 1} +} + +func (m *Cluster_CustomClusterType) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_CustomClusterType.Unmarshal(m, b) +} +func (m *Cluster_CustomClusterType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_CustomClusterType.Marshal(b, m, deterministic) +} +func (m *Cluster_CustomClusterType) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_CustomClusterType.Merge(m, src) +} +func (m *Cluster_CustomClusterType) XXX_Size() int { + return xxx_messageInfo_Cluster_CustomClusterType.Size(m) +} +func (m *Cluster_CustomClusterType) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_CustomClusterType.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_CustomClusterType proto.InternalMessageInfo + +func (m *Cluster_CustomClusterType) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster_CustomClusterType) GetTypedConfig() *any.Any { + if m != nil { + return m.TypedConfig + } + return nil +} + +type Cluster_EdsClusterConfig struct { + EdsConfig *core.ConfigSource `protobuf:"bytes,1,opt,name=eds_config,json=edsConfig,proto3" json:"eds_config,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_EdsClusterConfig) Reset() { *m = Cluster_EdsClusterConfig{} } +func (m *Cluster_EdsClusterConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_EdsClusterConfig) ProtoMessage() {} +func (*Cluster_EdsClusterConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 2} +} + +func (m *Cluster_EdsClusterConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_EdsClusterConfig.Unmarshal(m, b) +} +func (m *Cluster_EdsClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_EdsClusterConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_EdsClusterConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_EdsClusterConfig.Merge(m, src) +} +func (m *Cluster_EdsClusterConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_EdsClusterConfig.Size(m) +} +func (m *Cluster_EdsClusterConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_EdsClusterConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_EdsClusterConfig proto.InternalMessageInfo + +func (m *Cluster_EdsClusterConfig) GetEdsConfig() *core.ConfigSource { + if m != nil { + return m.EdsConfig + } + return nil +} + +func (m *Cluster_EdsClusterConfig) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +type Cluster_LbSubsetConfig struct { + FallbackPolicy Cluster_LbSubsetConfig_LbSubsetFallbackPolicy `protobuf:"varint,1,opt,name=fallback_policy,json=fallbackPolicy,proto3,enum=envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy" json:"fallback_policy,omitempty"` + DefaultSubset *_struct.Struct `protobuf:"bytes,2,opt,name=default_subset,json=defaultSubset,proto3" json:"default_subset,omitempty"` + SubsetSelectors []*Cluster_LbSubsetConfig_LbSubsetSelector `protobuf:"bytes,3,rep,name=subset_selectors,json=subsetSelectors,proto3" json:"subset_selectors,omitempty"` + LocalityWeightAware bool `protobuf:"varint,4,opt,name=locality_weight_aware,json=localityWeightAware,proto3" json:"locality_weight_aware,omitempty"` + ScaleLocalityWeight bool `protobuf:"varint,5,opt,name=scale_locality_weight,json=scaleLocalityWeight,proto3" json:"scale_locality_weight,omitempty"` + PanicModeAny bool `protobuf:"varint,6,opt,name=panic_mode_any,json=panicModeAny,proto3" json:"panic_mode_any,omitempty"` + ListAsAny bool `protobuf:"varint,7,opt,name=list_as_any,json=listAsAny,proto3" json:"list_as_any,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_LbSubsetConfig) Reset() { *m = Cluster_LbSubsetConfig{} } +func (m *Cluster_LbSubsetConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_LbSubsetConfig) ProtoMessage() {} +func (*Cluster_LbSubsetConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 3} +} + +func (m *Cluster_LbSubsetConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_LbSubsetConfig.Unmarshal(m, b) +} +func (m *Cluster_LbSubsetConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_LbSubsetConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_LbSubsetConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_LbSubsetConfig.Merge(m, src) +} +func (m *Cluster_LbSubsetConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_LbSubsetConfig.Size(m) +} +func (m *Cluster_LbSubsetConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_LbSubsetConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_LbSubsetConfig proto.InternalMessageInfo + +func (m *Cluster_LbSubsetConfig) GetFallbackPolicy() Cluster_LbSubsetConfig_LbSubsetFallbackPolicy { + if m != nil { + return m.FallbackPolicy + } + return Cluster_LbSubsetConfig_NO_FALLBACK +} + +func (m *Cluster_LbSubsetConfig) GetDefaultSubset() *_struct.Struct { + if m != nil { + return m.DefaultSubset + } + return nil +} + +func (m *Cluster_LbSubsetConfig) GetSubsetSelectors() []*Cluster_LbSubsetConfig_LbSubsetSelector { + if m != nil { + return m.SubsetSelectors + } + return nil +} + +func (m *Cluster_LbSubsetConfig) GetLocalityWeightAware() bool { + if m != nil { + return m.LocalityWeightAware + } + return false +} + +func (m *Cluster_LbSubsetConfig) GetScaleLocalityWeight() bool { + if m != nil { + return m.ScaleLocalityWeight + } + return false +} + +func (m *Cluster_LbSubsetConfig) GetPanicModeAny() bool { + if m != nil { + return m.PanicModeAny + } + return false +} + +func (m *Cluster_LbSubsetConfig) GetListAsAny() bool { + if m != nil { + return m.ListAsAny + } + return false +} + +type Cluster_LbSubsetConfig_LbSubsetSelector struct { + Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` + FallbackPolicy Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy `protobuf:"varint,2,opt,name=fallback_policy,json=fallbackPolicy,proto3,enum=envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy" json:"fallback_policy,omitempty"` + FallbackKeysSubset []string `protobuf:"bytes,3,rep,name=fallback_keys_subset,json=fallbackKeysSubset,proto3" json:"fallback_keys_subset,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Reset() { + *m = Cluster_LbSubsetConfig_LbSubsetSelector{} +} +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) String() string { return proto.CompactTextString(m) } +func (*Cluster_LbSubsetConfig_LbSubsetSelector) ProtoMessage() {} +func (*Cluster_LbSubsetConfig_LbSubsetSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 3, 0} +} + +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Unmarshal(m, b) +} +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Marshal(b, m, deterministic) +} +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Merge(m, src) +} +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_Size() int { + return xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.Size(m) +} +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_LbSubsetConfig_LbSubsetSelector proto.InternalMessageInfo + +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) GetKeys() []string { + if m != nil { + return m.Keys + } + return nil +} + +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) GetFallbackPolicy() Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy { + if m != nil { + return m.FallbackPolicy + } + return Cluster_LbSubsetConfig_LbSubsetSelector_NOT_DEFINED +} + +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) GetFallbackKeysSubset() []string { + if m != nil { + return m.FallbackKeysSubset + } + return nil +} + +type Cluster_LeastRequestLbConfig struct { + ChoiceCount *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=choice_count,json=choiceCount,proto3" json:"choice_count,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_LeastRequestLbConfig) Reset() { *m = Cluster_LeastRequestLbConfig{} } +func (m *Cluster_LeastRequestLbConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_LeastRequestLbConfig) ProtoMessage() {} +func (*Cluster_LeastRequestLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 4} +} + +func (m *Cluster_LeastRequestLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_LeastRequestLbConfig.Unmarshal(m, b) +} +func (m *Cluster_LeastRequestLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_LeastRequestLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_LeastRequestLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_LeastRequestLbConfig.Merge(m, src) +} +func (m *Cluster_LeastRequestLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_LeastRequestLbConfig.Size(m) +} +func (m *Cluster_LeastRequestLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_LeastRequestLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_LeastRequestLbConfig proto.InternalMessageInfo + +func (m *Cluster_LeastRequestLbConfig) GetChoiceCount() *wrappers.UInt32Value { + if m != nil { + return m.ChoiceCount + } + return nil +} + +type Cluster_RingHashLbConfig struct { + MinimumRingSize *wrappers.UInt64Value `protobuf:"bytes,1,opt,name=minimum_ring_size,json=minimumRingSize,proto3" json:"minimum_ring_size,omitempty"` + HashFunction Cluster_RingHashLbConfig_HashFunction `protobuf:"varint,3,opt,name=hash_function,json=hashFunction,proto3,enum=envoy.api.v2.Cluster_RingHashLbConfig_HashFunction" json:"hash_function,omitempty"` + MaximumRingSize *wrappers.UInt64Value `protobuf:"bytes,4,opt,name=maximum_ring_size,json=maximumRingSize,proto3" json:"maximum_ring_size,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_RingHashLbConfig) Reset() { *m = Cluster_RingHashLbConfig{} } +func (m *Cluster_RingHashLbConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_RingHashLbConfig) ProtoMessage() {} +func (*Cluster_RingHashLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 5} +} + +func (m *Cluster_RingHashLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_RingHashLbConfig.Unmarshal(m, b) +} +func (m *Cluster_RingHashLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_RingHashLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_RingHashLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_RingHashLbConfig.Merge(m, src) +} +func (m *Cluster_RingHashLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_RingHashLbConfig.Size(m) +} +func (m *Cluster_RingHashLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_RingHashLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_RingHashLbConfig proto.InternalMessageInfo + +func (m *Cluster_RingHashLbConfig) GetMinimumRingSize() *wrappers.UInt64Value { + if m != nil { + return m.MinimumRingSize + } + return nil +} + +func (m *Cluster_RingHashLbConfig) GetHashFunction() Cluster_RingHashLbConfig_HashFunction { + if m != nil { + return m.HashFunction + } + return Cluster_RingHashLbConfig_XX_HASH +} + +func (m *Cluster_RingHashLbConfig) GetMaximumRingSize() *wrappers.UInt64Value { + if m != nil { + return m.MaximumRingSize + } + return nil +} + +type Cluster_OriginalDstLbConfig struct { + UseHttpHeader bool `protobuf:"varint,1,opt,name=use_http_header,json=useHttpHeader,proto3" json:"use_http_header,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_OriginalDstLbConfig) Reset() { *m = Cluster_OriginalDstLbConfig{} } +func (m *Cluster_OriginalDstLbConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_OriginalDstLbConfig) ProtoMessage() {} +func (*Cluster_OriginalDstLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 6} +} + +func (m *Cluster_OriginalDstLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_OriginalDstLbConfig.Unmarshal(m, b) +} +func (m *Cluster_OriginalDstLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_OriginalDstLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_OriginalDstLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_OriginalDstLbConfig.Merge(m, src) +} +func (m *Cluster_OriginalDstLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_OriginalDstLbConfig.Size(m) +} +func (m *Cluster_OriginalDstLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_OriginalDstLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_OriginalDstLbConfig proto.InternalMessageInfo + +func (m *Cluster_OriginalDstLbConfig) GetUseHttpHeader() bool { + if m != nil { + return m.UseHttpHeader + } + return false +} + +type Cluster_CommonLbConfig struct { + HealthyPanicThreshold *_type.Percent `protobuf:"bytes,1,opt,name=healthy_panic_threshold,json=healthyPanicThreshold,proto3" json:"healthy_panic_threshold,omitempty"` + // Types that are valid to be assigned to LocalityConfigSpecifier: + // *Cluster_CommonLbConfig_ZoneAwareLbConfig_ + // *Cluster_CommonLbConfig_LocalityWeightedLbConfig_ + LocalityConfigSpecifier isCluster_CommonLbConfig_LocalityConfigSpecifier `protobuf_oneof:"locality_config_specifier"` + UpdateMergeWindow *duration.Duration `protobuf:"bytes,4,opt,name=update_merge_window,json=updateMergeWindow,proto3" json:"update_merge_window,omitempty"` + IgnoreNewHostsUntilFirstHc bool `protobuf:"varint,5,opt,name=ignore_new_hosts_until_first_hc,json=ignoreNewHostsUntilFirstHc,proto3" json:"ignore_new_hosts_until_first_hc,omitempty"` + CloseConnectionsOnHostSetChange bool `protobuf:"varint,6,opt,name=close_connections_on_host_set_change,json=closeConnectionsOnHostSetChange,proto3" json:"close_connections_on_host_set_change,omitempty"` + ConsistentHashingLbConfig *Cluster_CommonLbConfig_ConsistentHashingLbConfig `protobuf:"bytes,7,opt,name=consistent_hashing_lb_config,json=consistentHashingLbConfig,proto3" json:"consistent_hashing_lb_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_CommonLbConfig) Reset() { *m = Cluster_CommonLbConfig{} } +func (m *Cluster_CommonLbConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_CommonLbConfig) ProtoMessage() {} +func (*Cluster_CommonLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 7} +} + +func (m *Cluster_CommonLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_CommonLbConfig.Unmarshal(m, b) +} +func (m *Cluster_CommonLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_CommonLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_CommonLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_CommonLbConfig.Merge(m, src) +} +func (m *Cluster_CommonLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_CommonLbConfig.Size(m) +} +func (m *Cluster_CommonLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_CommonLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_CommonLbConfig proto.InternalMessageInfo + +func (m *Cluster_CommonLbConfig) GetHealthyPanicThreshold() *_type.Percent { + if m != nil { + return m.HealthyPanicThreshold + } + return nil +} + +type isCluster_CommonLbConfig_LocalityConfigSpecifier interface { + isCluster_CommonLbConfig_LocalityConfigSpecifier() +} + +type Cluster_CommonLbConfig_ZoneAwareLbConfig_ struct { + ZoneAwareLbConfig *Cluster_CommonLbConfig_ZoneAwareLbConfig `protobuf:"bytes,2,opt,name=zone_aware_lb_config,json=zoneAwareLbConfig,proto3,oneof"` +} + +type Cluster_CommonLbConfig_LocalityWeightedLbConfig_ struct { + LocalityWeightedLbConfig *Cluster_CommonLbConfig_LocalityWeightedLbConfig `protobuf:"bytes,3,opt,name=locality_weighted_lb_config,json=localityWeightedLbConfig,proto3,oneof"` +} + +func (*Cluster_CommonLbConfig_ZoneAwareLbConfig_) isCluster_CommonLbConfig_LocalityConfigSpecifier() {} + +func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig_) isCluster_CommonLbConfig_LocalityConfigSpecifier() { +} + +func (m *Cluster_CommonLbConfig) GetLocalityConfigSpecifier() isCluster_CommonLbConfig_LocalityConfigSpecifier { + if m != nil { + return m.LocalityConfigSpecifier + } + return nil +} + +func (m *Cluster_CommonLbConfig) GetZoneAwareLbConfig() *Cluster_CommonLbConfig_ZoneAwareLbConfig { + if x, ok := m.GetLocalityConfigSpecifier().(*Cluster_CommonLbConfig_ZoneAwareLbConfig_); ok { + return x.ZoneAwareLbConfig + } + return nil +} + +func (m *Cluster_CommonLbConfig) GetLocalityWeightedLbConfig() *Cluster_CommonLbConfig_LocalityWeightedLbConfig { + if x, ok := m.GetLocalityConfigSpecifier().(*Cluster_CommonLbConfig_LocalityWeightedLbConfig_); ok { + return x.LocalityWeightedLbConfig + } + return nil +} + +func (m *Cluster_CommonLbConfig) GetUpdateMergeWindow() *duration.Duration { + if m != nil { + return m.UpdateMergeWindow + } + return nil +} + +func (m *Cluster_CommonLbConfig) GetIgnoreNewHostsUntilFirstHc() bool { + if m != nil { + return m.IgnoreNewHostsUntilFirstHc + } + return false +} + +func (m *Cluster_CommonLbConfig) GetCloseConnectionsOnHostSetChange() bool { + if m != nil { + return m.CloseConnectionsOnHostSetChange + } + return false +} + +func (m *Cluster_CommonLbConfig) GetConsistentHashingLbConfig() *Cluster_CommonLbConfig_ConsistentHashingLbConfig { + if m != nil { + return m.ConsistentHashingLbConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Cluster_CommonLbConfig) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Cluster_CommonLbConfig_ZoneAwareLbConfig_)(nil), + (*Cluster_CommonLbConfig_LocalityWeightedLbConfig_)(nil), + } +} + +type Cluster_CommonLbConfig_ZoneAwareLbConfig struct { + RoutingEnabled *_type.Percent `protobuf:"bytes,1,opt,name=routing_enabled,json=routingEnabled,proto3" json:"routing_enabled,omitempty"` + MinClusterSize *wrappers.UInt64Value `protobuf:"bytes,2,opt,name=min_cluster_size,json=minClusterSize,proto3" json:"min_cluster_size,omitempty"` + FailTrafficOnPanic bool `protobuf:"varint,3,opt,name=fail_traffic_on_panic,json=failTrafficOnPanic,proto3" json:"fail_traffic_on_panic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Reset() { + *m = Cluster_CommonLbConfig_ZoneAwareLbConfig{} +} +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) String() string { return proto.CompactTextString(m) } +func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) ProtoMessage() {} +func (*Cluster_CommonLbConfig_ZoneAwareLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 7, 0} +} + +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Unmarshal(m, b) +} +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Merge(m, src) +} +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.Size(m) +} +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_CommonLbConfig_ZoneAwareLbConfig proto.InternalMessageInfo + +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetRoutingEnabled() *_type.Percent { + if m != nil { + return m.RoutingEnabled + } + return nil +} + +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetMinClusterSize() *wrappers.UInt64Value { + if m != nil { + return m.MinClusterSize + } + return nil +} + +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) GetFailTrafficOnPanic() bool { + if m != nil { + return m.FailTrafficOnPanic + } + return false +} + +type Cluster_CommonLbConfig_LocalityWeightedLbConfig struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Reset() { + *m = Cluster_CommonLbConfig_LocalityWeightedLbConfig{} +} +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) String() string { + return proto.CompactTextString(m) +} +func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) ProtoMessage() {} +func (*Cluster_CommonLbConfig_LocalityWeightedLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 7, 1} +} + +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Unmarshal(m, b) +} +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Merge(m, src) +} +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.Size(m) +} +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_CommonLbConfig_LocalityWeightedLbConfig proto.InternalMessageInfo + +type Cluster_CommonLbConfig_ConsistentHashingLbConfig struct { + UseHostnameForHashing bool `protobuf:"varint,1,opt,name=use_hostname_for_hashing,json=useHostnameForHashing,proto3" json:"use_hostname_for_hashing,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) Reset() { + *m = Cluster_CommonLbConfig_ConsistentHashingLbConfig{} +} +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) String() string { + return proto.CompactTextString(m) +} +func (*Cluster_CommonLbConfig_ConsistentHashingLbConfig) ProtoMessage() {} +func (*Cluster_CommonLbConfig_ConsistentHashingLbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 7, 2} +} + +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_CommonLbConfig_ConsistentHashingLbConfig.Unmarshal(m, b) +} +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_CommonLbConfig_ConsistentHashingLbConfig.Marshal(b, m, deterministic) +} +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_CommonLbConfig_ConsistentHashingLbConfig.Merge(m, src) +} +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) XXX_Size() int { + return xxx_messageInfo_Cluster_CommonLbConfig_ConsistentHashingLbConfig.Size(m) +} +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_CommonLbConfig_ConsistentHashingLbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_CommonLbConfig_ConsistentHashingLbConfig proto.InternalMessageInfo + +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) GetUseHostnameForHashing() bool { + if m != nil { + return m.UseHostnameForHashing + } + return false +} + +type Cluster_RefreshRate struct { + BaseInterval *duration.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3" json:"base_interval,omitempty"` + MaxInterval *duration.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cluster_RefreshRate) Reset() { *m = Cluster_RefreshRate{} } +func (m *Cluster_RefreshRate) String() string { return proto.CompactTextString(m) } +func (*Cluster_RefreshRate) ProtoMessage() {} +func (*Cluster_RefreshRate) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{0, 8} +} + +func (m *Cluster_RefreshRate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cluster_RefreshRate.Unmarshal(m, b) +} +func (m *Cluster_RefreshRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cluster_RefreshRate.Marshal(b, m, deterministic) +} +func (m *Cluster_RefreshRate) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cluster_RefreshRate.Merge(m, src) +} +func (m *Cluster_RefreshRate) XXX_Size() int { + return xxx_messageInfo_Cluster_RefreshRate.Size(m) +} +func (m *Cluster_RefreshRate) XXX_DiscardUnknown() { + xxx_messageInfo_Cluster_RefreshRate.DiscardUnknown(m) +} + +var xxx_messageInfo_Cluster_RefreshRate proto.InternalMessageInfo + +func (m *Cluster_RefreshRate) GetBaseInterval() *duration.Duration { + if m != nil { + return m.BaseInterval + } + return nil +} + +func (m *Cluster_RefreshRate) GetMaxInterval() *duration.Duration { + if m != nil { + return m.MaxInterval + } + return nil +} + +type LoadBalancingPolicy struct { + Policies []*LoadBalancingPolicy_Policy `protobuf:"bytes,1,rep,name=policies,proto3" json:"policies,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LoadBalancingPolicy) Reset() { *m = LoadBalancingPolicy{} } +func (m *LoadBalancingPolicy) String() string { return proto.CompactTextString(m) } +func (*LoadBalancingPolicy) ProtoMessage() {} +func (*LoadBalancingPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{1} +} + +func (m *LoadBalancingPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LoadBalancingPolicy.Unmarshal(m, b) +} +func (m *LoadBalancingPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LoadBalancingPolicy.Marshal(b, m, deterministic) +} +func (m *LoadBalancingPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadBalancingPolicy.Merge(m, src) +} +func (m *LoadBalancingPolicy) XXX_Size() int { + return xxx_messageInfo_LoadBalancingPolicy.Size(m) +} +func (m *LoadBalancingPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_LoadBalancingPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_LoadBalancingPolicy proto.InternalMessageInfo + +func (m *LoadBalancingPolicy) GetPolicies() []*LoadBalancingPolicy_Policy { + if m != nil { + return m.Policies + } + return nil +} + +type LoadBalancingPolicy_Policy struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` // Deprecated: Do not use. + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LoadBalancingPolicy_Policy) Reset() { *m = LoadBalancingPolicy_Policy{} } +func (m *LoadBalancingPolicy_Policy) String() string { return proto.CompactTextString(m) } +func (*LoadBalancingPolicy_Policy) ProtoMessage() {} +func (*LoadBalancingPolicy_Policy) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{1, 0} +} + +func (m *LoadBalancingPolicy_Policy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LoadBalancingPolicy_Policy.Unmarshal(m, b) +} +func (m *LoadBalancingPolicy_Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LoadBalancingPolicy_Policy.Marshal(b, m, deterministic) +} +func (m *LoadBalancingPolicy_Policy) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadBalancingPolicy_Policy.Merge(m, src) +} +func (m *LoadBalancingPolicy_Policy) XXX_Size() int { + return xxx_messageInfo_LoadBalancingPolicy_Policy.Size(m) +} +func (m *LoadBalancingPolicy_Policy) XXX_DiscardUnknown() { + xxx_messageInfo_LoadBalancingPolicy_Policy.DiscardUnknown(m) +} + +var xxx_messageInfo_LoadBalancingPolicy_Policy proto.InternalMessageInfo + +func (m *LoadBalancingPolicy_Policy) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Deprecated: Do not use. +func (m *LoadBalancingPolicy_Policy) GetConfig() *_struct.Struct { + if m != nil { + return m.Config + } + return nil +} + +func (m *LoadBalancingPolicy_Policy) GetTypedConfig() *any.Any { + if m != nil { + return m.TypedConfig + } + return nil +} + +type UpstreamBindConfig struct { + SourceAddress *core.Address `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpstreamBindConfig) Reset() { *m = UpstreamBindConfig{} } +func (m *UpstreamBindConfig) String() string { return proto.CompactTextString(m) } +func (*UpstreamBindConfig) ProtoMessage() {} +func (*UpstreamBindConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{2} +} + +func (m *UpstreamBindConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpstreamBindConfig.Unmarshal(m, b) +} +func (m *UpstreamBindConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpstreamBindConfig.Marshal(b, m, deterministic) +} +func (m *UpstreamBindConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpstreamBindConfig.Merge(m, src) +} +func (m *UpstreamBindConfig) XXX_Size() int { + return xxx_messageInfo_UpstreamBindConfig.Size(m) +} +func (m *UpstreamBindConfig) XXX_DiscardUnknown() { + xxx_messageInfo_UpstreamBindConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_UpstreamBindConfig proto.InternalMessageInfo + +func (m *UpstreamBindConfig) GetSourceAddress() *core.Address { + if m != nil { + return m.SourceAddress + } + return nil +} + +type UpstreamConnectionOptions struct { + TcpKeepalive *core.TcpKeepalive `protobuf:"bytes,1,opt,name=tcp_keepalive,json=tcpKeepalive,proto3" json:"tcp_keepalive,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpstreamConnectionOptions) Reset() { *m = UpstreamConnectionOptions{} } +func (m *UpstreamConnectionOptions) String() string { return proto.CompactTextString(m) } +func (*UpstreamConnectionOptions) ProtoMessage() {} +func (*UpstreamConnectionOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_72da53dee26868ef, []int{3} +} + +func (m *UpstreamConnectionOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpstreamConnectionOptions.Unmarshal(m, b) +} +func (m *UpstreamConnectionOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpstreamConnectionOptions.Marshal(b, m, deterministic) +} +func (m *UpstreamConnectionOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpstreamConnectionOptions.Merge(m, src) +} +func (m *UpstreamConnectionOptions) XXX_Size() int { + return xxx_messageInfo_UpstreamConnectionOptions.Size(m) +} +func (m *UpstreamConnectionOptions) XXX_DiscardUnknown() { + xxx_messageInfo_UpstreamConnectionOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_UpstreamConnectionOptions proto.InternalMessageInfo + +func (m *UpstreamConnectionOptions) GetTcpKeepalive() *core.TcpKeepalive { + if m != nil { + return m.TcpKeepalive + } + return nil +} + +func init() { + proto.RegisterEnum("envoy.api.v2.Cluster_DiscoveryType", Cluster_DiscoveryType_name, Cluster_DiscoveryType_value) + proto.RegisterEnum("envoy.api.v2.Cluster_LbPolicy", Cluster_LbPolicy_name, Cluster_LbPolicy_value) + proto.RegisterEnum("envoy.api.v2.Cluster_DnsLookupFamily", Cluster_DnsLookupFamily_name, Cluster_DnsLookupFamily_value) + proto.RegisterEnum("envoy.api.v2.Cluster_ClusterProtocolSelection", Cluster_ClusterProtocolSelection_name, Cluster_ClusterProtocolSelection_value) + proto.RegisterEnum("envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy", Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name, Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value) + proto.RegisterEnum("envoy.api.v2.Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy", Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name, Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_value) + proto.RegisterEnum("envoy.api.v2.Cluster_RingHashLbConfig_HashFunction", Cluster_RingHashLbConfig_HashFunction_name, Cluster_RingHashLbConfig_HashFunction_value) + proto.RegisterType((*Cluster)(nil), "envoy.api.v2.Cluster") + proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.Cluster.ExtensionProtocolOptionsEntry") + proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.Cluster.TypedExtensionProtocolOptionsEntry") + proto.RegisterType((*Cluster_TransportSocketMatch)(nil), "envoy.api.v2.Cluster.TransportSocketMatch") + proto.RegisterType((*Cluster_CustomClusterType)(nil), "envoy.api.v2.Cluster.CustomClusterType") + proto.RegisterType((*Cluster_EdsClusterConfig)(nil), "envoy.api.v2.Cluster.EdsClusterConfig") + proto.RegisterType((*Cluster_LbSubsetConfig)(nil), "envoy.api.v2.Cluster.LbSubsetConfig") + proto.RegisterType((*Cluster_LbSubsetConfig_LbSubsetSelector)(nil), "envoy.api.v2.Cluster.LbSubsetConfig.LbSubsetSelector") + proto.RegisterType((*Cluster_LeastRequestLbConfig)(nil), "envoy.api.v2.Cluster.LeastRequestLbConfig") + proto.RegisterType((*Cluster_RingHashLbConfig)(nil), "envoy.api.v2.Cluster.RingHashLbConfig") + proto.RegisterType((*Cluster_OriginalDstLbConfig)(nil), "envoy.api.v2.Cluster.OriginalDstLbConfig") + proto.RegisterType((*Cluster_CommonLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig") + proto.RegisterType((*Cluster_CommonLbConfig_ZoneAwareLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.ZoneAwareLbConfig") + proto.RegisterType((*Cluster_CommonLbConfig_LocalityWeightedLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.LocalityWeightedLbConfig") + proto.RegisterType((*Cluster_CommonLbConfig_ConsistentHashingLbConfig)(nil), "envoy.api.v2.Cluster.CommonLbConfig.ConsistentHashingLbConfig") + proto.RegisterType((*Cluster_RefreshRate)(nil), "envoy.api.v2.Cluster.RefreshRate") + proto.RegisterType((*LoadBalancingPolicy)(nil), "envoy.api.v2.LoadBalancingPolicy") + proto.RegisterType((*LoadBalancingPolicy_Policy)(nil), "envoy.api.v2.LoadBalancingPolicy.Policy") + proto.RegisterType((*UpstreamBindConfig)(nil), "envoy.api.v2.UpstreamBindConfig") + proto.RegisterType((*UpstreamConnectionOptions)(nil), "envoy.api.v2.UpstreamConnectionOptions") +} + +func init() { proto.RegisterFile("envoy/api/v2/cluster.proto", fileDescriptor_72da53dee26868ef) } + +var fileDescriptor_72da53dee26868ef = []byte{ + // 3226 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x59, 0xbb, 0x6f, 0x23, 0x49, + 0x7a, 0x57, 0x53, 0x9a, 0x11, 0x55, 0xa4, 0xa8, 0x56, 0x49, 0x33, 0x6a, 0x51, 0x8f, 0xd1, 0x68, + 0x67, 0xf6, 0x74, 0xe3, 0x3b, 0xca, 0xa7, 0xd9, 0xdb, 0x3d, 0x3f, 0x76, 0x0d, 0xbe, 0x34, 0xd2, + 0x0e, 0x45, 0xea, 0x9a, 0xe4, 0xce, 0xed, 0x2d, 0x0e, 0xb5, 0xc5, 0xee, 0xa2, 0xd8, 0x50, 0xb3, + 0xbb, 0xdd, 0x55, 0xad, 0x11, 0xd7, 0x80, 0x3d, 0x67, 0x18, 0x36, 0x60, 0x07, 0x4e, 0xfd, 0x27, + 0xd8, 0x0b, 0x27, 0x06, 0x1c, 0x18, 0x8e, 0x1c, 0x3a, 0x70, 0x62, 0x47, 0x97, 0x38, 0x77, 0xe4, + 0xe0, 0x12, 0x03, 0x13, 0x18, 0x87, 0x7a, 0x34, 0xc5, 0x47, 0x53, 0xd2, 0x5e, 0x24, 0x55, 0x7d, + 0xbf, 0xef, 0xf7, 0x55, 0x57, 0x7d, 0xf5, 0x3d, 0x8a, 0x20, 0x4f, 0xbc, 0x2b, 0x7f, 0x70, 0x88, + 0x03, 0xe7, 0xf0, 0xea, 0xe8, 0xd0, 0x72, 0x23, 0xca, 0x48, 0x58, 0x08, 0x42, 0x9f, 0xf9, 0x30, + 0x2b, 0x64, 0x05, 0x1c, 0x38, 0x85, 0xab, 0xa3, 0xfc, 0xf6, 0x18, 0x12, 0x47, 0xac, 0x77, 0x68, + 0x91, 0x90, 0x49, 0x6c, 0xfe, 0x45, 0x12, 0xcf, 0xa1, 0xe5, 0x84, 0x56, 0xe4, 0x30, 0xd4, 0x09, + 0x09, 0xbe, 0x8c, 0x79, 0xf3, 0x4f, 0x13, 0xb1, 0x5d, 0xc7, 0x1d, 0x9a, 0xce, 0xff, 0x20, 0x11, + 0xe2, 0x47, 0xcc, 0x75, 0x48, 0x88, 0x6c, 0xc2, 0x88, 0xc5, 0x1c, 0xdf, 0x53, 0xe8, 0x27, 0xe3, + 0x68, 0x3f, 0x24, 0x87, 0xd8, 0xb6, 0x43, 0x42, 0xa9, 0x02, 0x6c, 0x4f, 0x03, 0x3a, 0x98, 0x12, + 0x25, 0x7d, 0x3e, 0x2d, 0xb5, 0x7c, 0xaf, 0xeb, 0x5c, 0x20, 0xea, 0x47, 0xa1, 0x15, 0xc3, 0x9e, + 0x4d, 0xc3, 0x7a, 0x04, 0xbb, 0xac, 0x87, 0xac, 0x1e, 0xb1, 0x2e, 0x15, 0x6a, 0x6f, 0x1a, 0x25, + 0x04, 0x96, 0xef, 0x2a, 0xc4, 0xd6, 0x18, 0x82, 0x78, 0x76, 0xe0, 0x3b, 0x5e, 0xbc, 0x8f, 0x86, + 0x14, 0xb2, 0x41, 0x40, 0x0e, 0x03, 0x12, 0x5a, 0x64, 0x28, 0xd9, 0xbc, 0xf0, 0xfd, 0x0b, 0x57, + 0xb1, 0x75, 0xa2, 0xee, 0x21, 0xf6, 0x06, 0x4a, 0xb4, 0x3b, 0x29, 0xb2, 0xa3, 0x10, 0x8f, 0xec, + 0xcf, 0xf6, 0xa4, 0x9c, 0xb2, 0x30, 0xb2, 0xd8, 0x2c, 0xed, 0xb7, 0x21, 0x0e, 0x02, 0x12, 0xc6, + 0x9b, 0xf7, 0x81, 0x5a, 0xaf, 0xe7, 0xf9, 0x4c, 0xb0, 0xd2, 0x43, 0x9b, 0x04, 0x21, 0xb1, 0x46, + 0x4d, 0xec, 0x46, 0x76, 0x80, 0xc7, 0x30, 0x7d, 0xe7, 0x22, 0xc4, 0x2c, 0xde, 0xbc, 0x9d, 0x29, + 0x39, 0x65, 0x98, 0x45, 0xb1, 0x8d, 0x8d, 0x2b, 0xec, 0x3a, 0x36, 0x66, 0xe4, 0x30, 0xfe, 0x47, + 0x0a, 0xf6, 0x7f, 0xf5, 0x7b, 0x60, 0xb1, 0x2c, 0x8f, 0x1f, 0xda, 0xc0, 0x60, 0x21, 0xf6, 0x68, + 0xe0, 0x87, 0x0c, 0x51, 0xdf, 0xba, 0x24, 0x0c, 0xf5, 0x31, 0xb3, 0x7a, 0x84, 0x1a, 0xbf, 0xb3, + 0x37, 0x7f, 0x90, 0x39, 0x7a, 0x51, 0x18, 0x75, 0xd9, 0x82, 0x52, 0x2c, 0xb4, 0x62, 0xad, 0xa6, + 0x50, 0x3a, 0xe3, 0x3a, 0xe6, 0x63, 0x96, 0x30, 0x4b, 0x28, 0xdc, 0x02, 0x0b, 0x1e, 0xee, 0x13, + 0x43, 0xdb, 0xd3, 0x0e, 0x96, 0x4a, 0x8b, 0xef, 0x4b, 0x0b, 0x61, 0x6a, 0x4f, 0x33, 0xc5, 0x24, + 0xdc, 0x07, 0xcb, 0xd8, 0x65, 0x88, 0xaf, 0x1d, 0x09, 0xd4, 0x36, 0x47, 0x99, 0x19, 0xec, 0xb2, + 0x26, 0xc3, 0xac, 0xce, 0x31, 0x65, 0xb0, 0xc0, 0x8f, 0xcf, 0x48, 0xed, 0x69, 0x07, 0xb9, 0xa3, + 0x0f, 0x92, 0x97, 0x54, 0x71, 0xa8, 0xe5, 0x5f, 0x91, 0x70, 0xd0, 0x1a, 0x04, 0xa4, 0x94, 0x7e, + 0x5f, 0x7a, 0xf0, 0xe7, 0x5a, 0x4a, 0xd7, 0x4e, 0xe6, 0x4c, 0xa1, 0x0c, 0x6b, 0x20, 0xab, 0xbc, + 0x1e, 0x09, 0xb2, 0x0f, 0xf7, 0xb4, 0x83, 0xcc, 0xd1, 0xf7, 0x92, 0xc9, 0xca, 0x11, 0x65, 0x7e, + 0x5f, 0x8d, 0x38, 0xe1, 0xc9, 0x9c, 0x99, 0xb1, 0x6e, 0x86, 0xb0, 0x05, 0x20, 0xb1, 0x29, 0x8a, + 0x19, 0xa5, 0x77, 0x1b, 0xf3, 0x82, 0xf3, 0xc3, 0x64, 0xce, 0xaa, 0x4d, 0xd5, 0xbf, 0x65, 0x81, + 0x36, 0x75, 0x32, 0x31, 0x03, 0x6b, 0x60, 0xc5, 0xf2, 0x3d, 0x8f, 0x58, 0x0c, 0x31, 0xa7, 0x4f, + 0xfc, 0x88, 0x19, 0x0b, 0x82, 0x72, 0xb3, 0x20, 0x5d, 0xaa, 0x10, 0xbb, 0x54, 0xa1, 0xa2, 0x1c, + 0x52, 0x7c, 0xe9, 0xb7, 0x5a, 0xea, 0xc5, 0x9c, 0x99, 0x53, 0xba, 0x2d, 0xa9, 0x0a, 0xbb, 0xe0, + 0x69, 0x20, 0xd7, 0xe6, 0xc9, 0xcb, 0x8d, 0x3a, 0x51, 0xb7, 0x4b, 0x42, 0xe4, 0x3a, 0x7d, 0x1e, + 0x42, 0x06, 0x8c, 0x50, 0xe3, 0x81, 0xe0, 0xdf, 0x9e, 0xe2, 0x6f, 0x9f, 0x7a, 0xec, 0xe5, 0xd1, + 0x17, 0xd8, 0x8d, 0x88, 0xb9, 0x13, 0x88, 0x15, 0x2a, 0x96, 0x92, 0x20, 0xa9, 0x71, 0x8e, 0x12, + 0xa7, 0x80, 0x55, 0xb0, 0xe4, 0x76, 0x50, 0xe0, 0xbb, 0x8e, 0x35, 0x30, 0x1e, 0x8a, 0x33, 0xda, + 0x4d, 0xde, 0x82, 0x5a, 0xe7, 0x5c, 0xa0, 0x6e, 0x8e, 0xc7, 0x4c, 0xbb, 0x6a, 0x0e, 0x7e, 0x04, + 0x1e, 0xf4, 0x7c, 0xca, 0xa8, 0xb1, 0x28, 0x3c, 0x2f, 0x3f, 0x4e, 0xc1, 0xef, 0x7d, 0xa1, 0x28, + 0x63, 0x50, 0x29, 0x65, 0x68, 0xa6, 0x04, 0xf3, 0x2d, 0x73, 0x7d, 0x6c, 0x23, 0x4c, 0xa9, 0x73, + 0xe1, 0xf5, 0x89, 0xc7, 0x8c, 0xa7, 0xe2, 0x93, 0x92, 0xdd, 0xa4, 0xe6, 0x63, 0xbb, 0x38, 0x84, + 0x9a, 0x39, 0x77, 0x6c, 0x0c, 0xcb, 0x60, 0x79, 0x34, 0x02, 0x51, 0x23, 0x2d, 0xd6, 0xb2, 0x9b, + 0xb0, 0x96, 0x13, 0x81, 0x2b, 0x73, 0x98, 0x99, 0xed, 0xdd, 0x0c, 0x28, 0xfc, 0x0a, 0x6c, 0xf5, + 0xf1, 0x35, 0x0a, 0xc9, 0x1f, 0x47, 0x84, 0x32, 0x8a, 0xc6, 0x0f, 0xc1, 0x58, 0xba, 0xc7, 0x8e, + 0x1b, 0x7d, 0x7c, 0x6d, 0x2a, 0xfd, 0xf3, 0xd1, 0xcd, 0x87, 0xe7, 0x40, 0x9f, 0xc8, 0x01, 0xd4, + 0x00, 0x82, 0xf1, 0xf9, 0xc4, 0x22, 0x63, 0x57, 0x96, 0xe8, 0x92, 0x02, 0x9b, 0x2b, 0xd6, 0xf8, + 0x04, 0x3c, 0x07, 0x19, 0xe6, 0x52, 0xbe, 0x42, 0x46, 0xae, 0x99, 0x91, 0x49, 0x22, 0xe3, 0xc9, + 0xa9, 0xd0, 0x0e, 0x28, 0x0b, 0x09, 0xee, 0xb7, 0x5c, 0x5a, 0x96, 0xe0, 0x52, 0xfa, 0x5f, 0xfe, + 0xf7, 0xd7, 0xff, 0xf5, 0x40, 0x33, 0x34, 0x13, 0xb0, 0xe1, 0x2c, 0xa4, 0x60, 0x37, 0x52, 0x58, + 0xd4, 0x63, 0x2c, 0x40, 0x71, 0xbc, 0x46, 0x7e, 0x20, 0x42, 0x95, 0x51, 0x10, 0x46, 0x0a, 0x09, + 0xdb, 0x1a, 0x1b, 0x39, 0x61, 0x2c, 0x38, 0x57, 0x6a, 0x0d, 0xa9, 0x65, 0x6e, 0x45, 0xb3, 0x85, + 0xf0, 0x02, 0x6c, 0x5b, 0x7e, 0xbf, 0xef, 0x7b, 0x33, 0x4c, 0xee, 0x24, 0xdd, 0x4d, 0x79, 0x92, + 0x09, 0xa6, 0x36, 0x25, 0x57, 0x92, 0xa1, 0xaf, 0xc0, 0xa3, 0x64, 0x0b, 0xcb, 0x49, 0x11, 0x65, + 0x68, 0xe1, 0x47, 0x93, 0x26, 0xd6, 0x7a, 0x09, 0xe4, 0xbf, 0x00, 0x8f, 0xf9, 0xf4, 0xd1, 0x34, + 0x7b, 0xee, 0x56, 0xf6, 0xa3, 0x49, 0xf6, 0xf5, 0x5e, 0xc2, 0x2c, 0xfc, 0x13, 0x90, 0x27, 0xd7, + 0x8c, 0x78, 0x94, 0x47, 0x83, 0x29, 0x13, 0x1f, 0x08, 0x67, 0x7f, 0x39, 0x23, 0x7c, 0xc5, 0x7a, + 0x13, 0x9c, 0x55, 0x8f, 0x85, 0x83, 0x11, 0x47, 0x30, 0xc8, 0x0c, 0x20, 0xfc, 0xa5, 0x06, 0xf6, + 0x78, 0xe8, 0xb5, 0xd1, 0x2d, 0x6b, 0x78, 0x26, 0xd6, 0xf0, 0x93, 0x19, 0x69, 0x87, 0x6b, 0xdf, + 0xba, 0x10, 0x73, 0x87, 0xdd, 0x86, 0x81, 0x3f, 0x05, 0xba, 0xed, 0x51, 0x14, 0x92, 0x6e, 0x48, + 0x68, 0x0f, 0xf1, 0x7c, 0x6a, 0xe8, 0x77, 0x85, 0xd8, 0xec, 0xfb, 0xd2, 0xd2, 0xb7, 0xda, 0xc3, + 0x17, 0x0b, 0xfa, 0xbf, 0xfd, 0xc5, 0xa7, 0x66, 0xce, 0xf6, 0xa8, 0x29, 0xf5, 0x4d, 0xcc, 0x08, + 0xfc, 0x39, 0x30, 0x38, 0x65, 0x17, 0x3b, 0x6e, 0x14, 0x92, 0x71, 0xea, 0x1f, 0x08, 0xea, 0xa7, + 0xc9, 0x5f, 0x33, 0x42, 0x62, 0x3e, 0xb2, 0x3d, 0x7a, 0x2c, 0x19, 0x46, 0xb9, 0x3f, 0x04, 0x2b, + 0x21, 0xa1, 0x01, 0x4f, 0x08, 0xdc, 0x06, 0x63, 0xae, 0xf1, 0xbd, 0x3d, 0xed, 0x20, 0x6d, 0x2e, + 0xab, 0xe9, 0x8a, 0x47, 0x5b, 0xcc, 0x85, 0x5f, 0x81, 0x55, 0x2e, 0x77, 0x7d, 0xff, 0x32, 0x0a, + 0x50, 0x17, 0xf7, 0x1d, 0x77, 0x60, 0xac, 0x8a, 0x50, 0xfc, 0x7c, 0x46, 0xba, 0xf4, 0x68, 0x4d, + 0xa0, 0x8f, 0x05, 0x78, 0x24, 0x22, 0xaf, 0xd8, 0xe3, 0x22, 0xf8, 0x47, 0x60, 0x59, 0xee, 0x19, + 0xf5, 0xdd, 0x2b, 0x1e, 0x6f, 0xe0, 0x5d, 0x01, 0xda, 0xcc, 0x8a, 0x3d, 0x52, 0x78, 0xf8, 0x11, + 0xd8, 0x88, 0x28, 0x41, 0xcc, 0x0a, 0x50, 0xd7, 0x0f, 0xd1, 0xcd, 0x4a, 0xa9, 0xf1, 0x43, 0xf1, + 0x35, 0x6b, 0x11, 0x25, 0x2d, 0x2b, 0x38, 0xf6, 0xc3, 0xe1, 0xb2, 0x28, 0x6c, 0x82, 0xd5, 0xa9, + 0xf2, 0xd4, 0x58, 0x4b, 0xbc, 0xc5, 0xea, 0x9b, 0x1a, 0x12, 0x5e, 0x89, 0xd1, 0xa6, 0xee, 0x4f, + 0xcc, 0xc0, 0x3a, 0xd0, 0x2d, 0x97, 0x60, 0x2f, 0x0a, 0x90, 0xe3, 0x31, 0x12, 0x5e, 0x61, 0xd7, + 0x58, 0xbf, 0x7f, 0x8a, 0x5d, 0x51, 0xca, 0xa7, 0x4a, 0x17, 0x36, 0xc0, 0xfa, 0x30, 0xd4, 0x75, + 0x1c, 0xcf, 0x8e, 0x2b, 0x81, 0x47, 0x82, 0x73, 0x27, 0x61, 0x8b, 0x4a, 0x8e, 0x67, 0xab, 0x02, + 0x00, 0xc6, 0xaa, 0x37, 0x73, 0x7c, 0x81, 0x6e, 0x07, 0xd1, 0xa8, 0x43, 0x09, 0x8b, 0xc9, 0x1e, + 0x0b, 0xb2, 0x67, 0xb3, 0x72, 0x6a, 0x53, 0x80, 0x15, 0x67, 0xce, 0x1d, 0x1b, 0xc3, 0x37, 0x60, + 0x2d, 0x74, 0xbc, 0x0b, 0xd4, 0xc3, 0xb4, 0x87, 0xdc, 0x4e, 0x4c, 0xb9, 0x71, 0x5b, 0xa5, 0x62, + 0x3a, 0xde, 0xc5, 0x09, 0xa6, 0xbd, 0x5a, 0x47, 0x92, 0x9c, 0x68, 0xa6, 0x1e, 0x4e, 0xcc, 0xc1, + 0xaf, 0xc1, 0x63, 0x3f, 0x74, 0x2e, 0x1c, 0x0f, 0xbb, 0xc8, 0xa6, 0x6c, 0x84, 0x7b, 0x5f, 0x70, + 0x7f, 0x3f, 0x99, 0xbb, 0xa1, 0x74, 0x2a, 0x94, 0x8d, 0xd0, 0xaf, 0xf9, 0xd3, 0xd3, 0xd0, 0x02, + 0x1b, 0x2e, 0xc1, 0x94, 0xc5, 0x99, 0x74, 0xc4, 0xc4, 0x73, 0x61, 0x62, 0x46, 0x71, 0x5a, 0xe3, + 0x4a, 0x2a, 0x7b, 0x8e, 0xd8, 0x58, 0x77, 0x13, 0xe6, 0x85, 0x43, 0xc8, 0xb4, 0x71, 0xc3, 0xbe, + 0x75, 0xdb, 0x7e, 0x97, 0x05, 0x3a, 0xd6, 0xe7, 0x45, 0xd7, 0xe8, 0x18, 0x9e, 0x01, 0x7d, 0xb2, + 0xa4, 0x36, 0x0c, 0xc1, 0xb7, 0x9f, 0xe0, 0x0c, 0x13, 0x75, 0xb4, 0xb9, 0x32, 0x51, 0x42, 0xc3, + 0x4f, 0x40, 0xba, 0x4f, 0x18, 0xb6, 0x31, 0xc3, 0xc6, 0xa6, 0xa0, 0xd9, 0x4a, 0xa0, 0x39, 0x53, + 0x10, 0x73, 0x08, 0x86, 0xbf, 0x00, 0x70, 0x18, 0x5b, 0x29, 0x71, 0xd5, 0xf5, 0xc9, 0x8b, 0x90, + 0x50, 0x98, 0xf1, 0x65, 0xf2, 0x6f, 0x1c, 0x32, 0x9b, 0xb1, 0x96, 0xb9, 0x1a, 0x4c, 0x4e, 0xc1, + 0x0b, 0x30, 0x4c, 0xc6, 0xa3, 0x05, 0x66, 0x1c, 0xc5, 0x77, 0x93, 0x92, 0x55, 0x9c, 0xda, 0x6f, + 0xaa, 0x99, 0x61, 0xb6, 0x8d, 0x66, 0x89, 0x60, 0x1b, 0x1c, 0x58, 0xae, 0x4f, 0xc9, 0x88, 0x15, + 0x8a, 0x78, 0x92, 0xf7, 0x29, 0x43, 0xaa, 0x56, 0x53, 0xa1, 0xd7, 0x78, 0x22, 0x82, 0xc9, 0x07, + 0x02, 0x7f, 0xc3, 0x44, 0x1b, 0xde, 0x89, 0x4f, 0x99, 0xac, 0xd7, 0x54, 0x8c, 0x85, 0x3e, 0x78, + 0x6a, 0x87, 0xd8, 0xf1, 0x12, 0x69, 0x43, 0xd2, 0xf7, 0x79, 0x60, 0xd8, 0xe3, 0x7c, 0xa5, 0xe7, + 0xbf, 0xfe, 0xbb, 0xff, 0xff, 0xdb, 0x07, 0x4f, 0xc0, 0x8e, 0x73, 0xe1, 0xf9, 0x21, 0x89, 0x8d, + 0x4e, 0x80, 0xcd, 0x1d, 0xc1, 0x37, 0x65, 0xd6, 0x94, 0x62, 0xf8, 0x31, 0x58, 0x94, 0xfd, 0x38, + 0x35, 0x0e, 0x44, 0xf8, 0xdc, 0x4e, 0x8e, 0x61, 0xc7, 0x02, 0x64, 0xc6, 0x60, 0xd8, 0x06, 0x8f, + 0x44, 0x7d, 0xdb, 0xc1, 0x2e, 0xf6, 0x2c, 0x7e, 0x93, 0x55, 0xa1, 0xfd, 0xfd, 0xa4, 0xd4, 0xc2, + 0xcb, 0xdb, 0x52, 0x8c, 0x94, 0x75, 0xb5, 0xb9, 0xe6, 0x4e, 0x4f, 0xc2, 0xcf, 0x00, 0x70, 0x43, + 0x8a, 0x28, 0x09, 0xaf, 0x48, 0x68, 0xbc, 0x10, 0x5c, 0x4f, 0x12, 0x3c, 0x4b, 0x7a, 0x75, 0x53, + 0x74, 0xed, 0xe6, 0x92, 0x1b, 0xd2, 0xa6, 0xd0, 0x80, 0x47, 0xe0, 0x11, 0x0b, 0xb1, 0x75, 0x19, + 0xf7, 0x29, 0xa8, 0x13, 0xd9, 0x17, 0x84, 0x51, 0xe3, 0x50, 0x06, 0x74, 0x21, 0x54, 0x8d, 0x48, + 0x49, 0x8a, 0xf2, 0xff, 0xa4, 0x81, 0xf5, 0xa4, 0xc6, 0x31, 0xb1, 0x41, 0xd4, 0xe3, 0x06, 0xf1, + 0x87, 0xe0, 0x81, 0x68, 0x49, 0x45, 0xf7, 0x97, 0x39, 0xda, 0x98, 0x0a, 0xd3, 0x4d, 0xd1, 0x7a, + 0x9b, 0x12, 0x95, 0x78, 0xff, 0xe6, 0x7f, 0xeb, 0xfb, 0x97, 0x77, 0xc0, 0xea, 0x54, 0x2f, 0x78, + 0x7b, 0x43, 0xfb, 0x09, 0xc8, 0xca, 0x22, 0x47, 0x05, 0x13, 0xb9, 0xec, 0xf5, 0xa9, 0x65, 0x17, + 0xbd, 0x81, 0x99, 0x11, 0x48, 0xb9, 0xc7, 0xf9, 0x08, 0xe8, 0x93, 0x2d, 0x22, 0x3f, 0x26, 0xd1, + 0x66, 0x4a, 0x2a, 0xed, 0x9e, 0xc7, 0xc4, 0xfb, 0x4a, 0xa9, 0xff, 0x14, 0x64, 0xf9, 0x11, 0x3b, + 0x16, 0x91, 0xcd, 0x75, 0x4a, 0x36, 0xd7, 0x6a, 0x8e, 0x37, 0xd7, 0xf9, 0x5f, 0x2e, 0x82, 0xdc, + 0x78, 0x0e, 0x81, 0x1e, 0x58, 0xe9, 0x62, 0xd7, 0xed, 0xf0, 0xf3, 0x55, 0xde, 0xa6, 0x89, 0xc0, + 0xf1, 0x07, 0xf7, 0x49, 0x41, 0xc3, 0xe1, 0xb1, 0xe2, 0x98, 0xea, 0xf9, 0x72, 0xdd, 0x31, 0x09, + 0xfc, 0x0c, 0xe4, 0x6c, 0xd2, 0xc5, 0x91, 0xcb, 0x54, 0xe2, 0xbb, 0xeb, 0xac, 0x97, 0x15, 0x5c, + 0xda, 0x81, 0x5f, 0x03, 0x5d, 0x25, 0x4c, 0x19, 0xe9, 0xfc, 0x90, 0x1a, 0xf3, 0xe2, 0x92, 0xfd, + 0xf8, 0x3b, 0x2d, 0xb8, 0xa9, 0xb4, 0xcd, 0x15, 0x3a, 0x36, 0xa6, 0xdc, 0xdd, 0x5d, 0xdf, 0xc2, + 0xae, 0xc3, 0x06, 0xe8, 0x2d, 0x71, 0x2e, 0x7a, 0x0c, 0xe1, 0xb7, 0x38, 0x24, 0xa2, 0x3d, 0x4f, + 0xf3, 0x2b, 0x26, 0x85, 0x6f, 0x84, 0xac, 0xc8, 0x45, 0x5c, 0x87, 0x5a, 0xd8, 0x25, 0x68, 0x42, + 0x53, 0xb4, 0xdc, 0x69, 0x73, 0x4d, 0x08, 0x6b, 0x63, 0x8a, 0xf0, 0x19, 0xc8, 0x05, 0xd8, 0x73, + 0x2c, 0xd4, 0xf7, 0x6d, 0x82, 0xb0, 0x27, 0xfb, 0xe9, 0xb4, 0x99, 0x15, 0xb3, 0x67, 0xbe, 0x4d, + 0x8a, 0xde, 0x00, 0xee, 0x82, 0x8c, 0xeb, 0x50, 0x86, 0x30, 0x15, 0x90, 0x45, 0x01, 0x59, 0xe2, + 0x53, 0x45, 0x5a, 0xf4, 0x06, 0xf9, 0xff, 0x4e, 0x01, 0x7d, 0xf2, 0x9b, 0x20, 0x04, 0x0b, 0x97, + 0x64, 0x40, 0x0d, 0x6d, 0x6f, 0xfe, 0x60, 0xc9, 0x14, 0xff, 0xc3, 0xbf, 0xd2, 0xa6, 0x4f, 0x5a, + 0x3e, 0xb2, 0xb4, 0x7e, 0xab, 0x8d, 0x9b, 0x9a, 0xb8, 0xb7, 0x0b, 0xfc, 0x2e, 0x58, 0x1f, 0x2e, + 0x84, 0x2f, 0x2d, 0x76, 0x84, 0x79, 0xb1, 0x5a, 0x18, 0xcb, 0x5e, 0x93, 0x01, 0x95, 0x16, 0xf6, + 0x07, 0x60, 0xf7, 0x76, 0x6b, 0x70, 0x05, 0x64, 0xea, 0x8d, 0x16, 0xaa, 0x54, 0x8f, 0x4f, 0xeb, + 0xd5, 0x8a, 0x3e, 0x27, 0x27, 0xd0, 0x71, 0xb1, 0x56, 0x2b, 0x15, 0xcb, 0xaf, 0x75, 0x0d, 0xea, + 0x20, 0x5b, 0xac, 0x7f, 0x89, 0xaa, 0xf5, 0xca, 0x79, 0xe3, 0xb4, 0xde, 0xd2, 0x53, 0x10, 0x82, + 0x5c, 0xa5, 0x7a, 0x5c, 0x6c, 0xd7, 0x5a, 0xa8, 0xd9, 0x2e, 0x35, 0xab, 0x2d, 0x7d, 0x9e, 0xab, + 0xbd, 0xae, 0x7e, 0xd9, 0x8c, 0x27, 0x16, 0xf6, 0x1b, 0xe0, 0x71, 0xb2, 0x8f, 0x4f, 0x5a, 0x98, + 0x9b, 0xb2, 0xa0, 0x25, 0x58, 0x48, 0xe5, 0xbf, 0x06, 0xeb, 0x49, 0x45, 0x0b, 0x3c, 0x01, 0x59, + 0xab, 0xe7, 0xf3, 0xdb, 0x6b, 0xf9, 0x91, 0xc7, 0x54, 0x00, 0xb8, 0xf5, 0xe9, 0x40, 0x84, 0xa3, + 0x17, 0xa9, 0x83, 0x94, 0x99, 0x91, 0xaa, 0x65, 0xae, 0x99, 0xff, 0x55, 0x0a, 0xe8, 0x93, 0x65, + 0x1d, 0x6c, 0x81, 0xd5, 0xbe, 0xe3, 0x39, 0xfd, 0xa8, 0x8f, 0x44, 0x8d, 0x48, 0x9d, 0x6f, 0xc8, + 0xad, 0x36, 0x3e, 0xfe, 0x48, 0xda, 0x00, 0xef, 0x4b, 0x8b, 0x47, 0x0f, 0x8c, 0x77, 0xef, 0xde, + 0x2d, 0x98, 0x2b, 0x8a, 0x82, 0xb3, 0x37, 0x9d, 0x6f, 0x08, 0xec, 0x80, 0x65, 0x51, 0x6c, 0x76, + 0x23, 0x4f, 0x16, 0x1d, 0xf3, 0xc2, 0xa3, 0x5e, 0xde, 0xaf, 0xd6, 0x2c, 0xf0, 0xc1, 0xb1, 0x52, + 0x1d, 0x71, 0x98, 0x6c, 0x6f, 0x64, 0x5e, 0xac, 0x1c, 0x5f, 0x4f, 0xac, 0x7c, 0xe1, 0x3b, 0xaf, + 0x5c, 0x52, 0xc4, 0x2b, 0xdf, 0x2f, 0x80, 0xec, 0xa8, 0x75, 0x98, 0x01, 0x8b, 0x3f, 0xfb, 0x19, + 0x3a, 0x29, 0x36, 0x4f, 0xf4, 0x39, 0xb8, 0x0a, 0x96, 0xcf, 0xda, 0xe6, 0x59, 0xdb, 0x14, 0x13, + 0xe8, 0x48, 0xd7, 0x3e, 0x5f, 0x48, 0xa7, 0xf4, 0xf9, 0xfc, 0xa7, 0x60, 0x2d, 0xa1, 0xa8, 0xe5, + 0xad, 0x1b, 0x6f, 0x7a, 0xc4, 0x53, 0x41, 0x8f, 0x60, 0x9b, 0x84, 0x62, 0x6b, 0xd3, 0xe6, 0x72, + 0x44, 0x09, 0x6f, 0xd9, 0x4f, 0xc4, 0x64, 0xfe, 0x2f, 0xd3, 0x20, 0x37, 0x5e, 0x53, 0xc2, 0xd7, + 0x60, 0x43, 0x16, 0x19, 0x03, 0x24, 0xa3, 0x01, 0xeb, 0xf1, 0x8e, 0xd0, 0x77, 0x6d, 0x75, 0x3a, + 0x6b, 0x6a, 0x2f, 0x79, 0xfa, 0x28, 0x9c, 0xcb, 0x47, 0x6d, 0xf3, 0x91, 0xd2, 0x39, 0xe7, 0x2a, + 0xad, 0x58, 0x03, 0x3a, 0x60, 0xfd, 0x1b, 0xdf, 0x23, 0x32, 0x5e, 0x8d, 0x14, 0xb9, 0x32, 0xc4, + 0x7e, 0x7c, 0x9f, 0x22, 0xb7, 0xf0, 0x73, 0xdf, 0x23, 0x22, 0xa8, 0x0d, 0xcb, 0xe9, 0x39, 0x73, + 0xf5, 0x9b, 0xc9, 0x49, 0xf8, 0xa7, 0x60, 0x6b, 0x22, 0xd6, 0x11, 0x7b, 0xc4, 0xa2, 0x4c, 0xc3, + 0x9f, 0xde, 0xcb, 0xe2, 0x78, 0x5c, 0x24, 0xf6, 0x88, 0x61, 0xc3, 0x9d, 0x21, 0x83, 0xa7, 0x60, + 0x2d, 0x0a, 0x6c, 0xcc, 0x08, 0xea, 0x93, 0xf0, 0x82, 0xa0, 0xb7, 0x8e, 0x67, 0xfb, 0x6f, 0xef, + 0x7c, 0x42, 0x35, 0x57, 0xa5, 0xd6, 0x19, 0x57, 0x7a, 0x23, 0x74, 0x60, 0x19, 0x3c, 0x51, 0xe5, + 0x9e, 0x47, 0xde, 0x8a, 0x42, 0x8f, 0xa2, 0xc8, 0x63, 0x8e, 0x8b, 0xba, 0x4e, 0xc8, 0x2b, 0x4f, + 0x4b, 0x85, 0xf1, 0xbc, 0x84, 0xd5, 0xc9, 0x5b, 0x5e, 0xed, 0xd1, 0x36, 0xc7, 0x1c, 0x73, 0xc8, + 0x89, 0x05, 0xcf, 0xc0, 0xb3, 0xd9, 0xb5, 0xab, 0xe8, 0xef, 0x7a, 0xd8, 0xbb, 0x20, 0x2a, 0xc6, + 0x3f, 0x49, 0xae, 0x5b, 0x9b, 0x84, 0x95, 0x05, 0x0c, 0xfe, 0x19, 0xd8, 0xb6, 0x7c, 0x8f, 0x3a, + 0x94, 0x11, 0x8f, 0x89, 0x86, 0x8e, 0xbb, 0xfe, 0xcd, 0xfe, 0x2e, 0x8a, 0xef, 0xfc, 0xec, 0x5e, + 0xfb, 0x5b, 0x1e, 0x12, 0x9d, 0x48, 0x9e, 0x61, 0x43, 0xb3, 0x69, 0xcd, 0x12, 0xe5, 0xff, 0x43, + 0x03, 0xab, 0x53, 0xae, 0x00, 0xff, 0x10, 0xac, 0x84, 0x7e, 0xc4, 0xf8, 0x5a, 0x88, 0x87, 0x3b, + 0x2e, 0xb9, 0xd5, 0x4b, 0x73, 0x0a, 0x5b, 0x95, 0x50, 0x78, 0x0c, 0xf4, 0x3e, 0x2f, 0xc3, 0xd5, + 0x43, 0xba, 0xb8, 0xc8, 0xa9, 0xbb, 0x2f, 0xb2, 0x99, 0xeb, 0x3b, 0x9e, 0xfa, 0x36, 0x11, 0x75, + 0x7e, 0x04, 0x1e, 0xf1, 0x36, 0x00, 0xb1, 0x10, 0x77, 0xbb, 0x8e, 0xc5, 0xb7, 0x59, 0xdc, 0x1d, + 0xe1, 0x75, 0x69, 0x9e, 0x41, 0x1c, 0xb7, 0x25, 0x65, 0x0d, 0x4f, 0x5c, 0x91, 0x7c, 0x1e, 0x18, + 0xb3, 0xdc, 0x2c, 0xdf, 0x02, 0x9b, 0x33, 0xb7, 0x08, 0x7e, 0x02, 0x0c, 0x71, 0xb5, 0x7d, 0xca, + 0x78, 0x55, 0x25, 0x1e, 0x35, 0xd4, 0x71, 0xa8, 0x3b, 0xfe, 0x88, 0xdf, 0x71, 0x25, 0x3e, 0xf6, + 0x43, 0x45, 0x50, 0xda, 0x02, 0x9b, 0xc3, 0x0b, 0x12, 0xff, 0x20, 0x16, 0x10, 0xcb, 0xe9, 0x3a, + 0x24, 0xcc, 0xff, 0x83, 0x06, 0x32, 0xa3, 0x6f, 0x3f, 0x75, 0xb0, 0xdc, 0xc1, 0x94, 0xdc, 0xbc, + 0x53, 0x68, 0x77, 0xbd, 0x53, 0xe4, 0xde, 0x97, 0x32, 0xdf, 0x6a, 0xe9, 0xb4, 0xa6, 0x5e, 0xaa, + 0xb2, 0x5c, 0x7f, 0xf8, 0x54, 0xf1, 0x39, 0xc8, 0xf6, 0xf1, 0xf5, 0x0d, 0x5d, 0xea, 0xbb, 0x3d, + 0x7b, 0x65, 0xfa, 0xf8, 0x3a, 0xe6, 0xca, 0xdb, 0x60, 0xe7, 0xd6, 0x67, 0x38, 0xa8, 0x83, 0xf9, + 0x4b, 0x22, 0xcb, 0xc6, 0x25, 0x93, 0xff, 0xcb, 0xeb, 0xf8, 0x2b, 0x7e, 0x72, 0x77, 0xd6, 0xf1, + 0x02, 0xf5, 0xfb, 0xa9, 0x9f, 0x68, 0xf9, 0x2e, 0xd8, 0xbf, 0xfb, 0xc5, 0x2f, 0xc1, 0xd4, 0x8b, + 0x71, 0x53, 0xc9, 0xb5, 0xf7, 0x8d, 0x9d, 0xfd, 0x37, 0x60, 0x79, 0xec, 0xd7, 0x23, 0x08, 0xc0, + 0xc3, 0x66, 0xab, 0xd8, 0x3a, 0x2d, 0xeb, 0x73, 0x30, 0x07, 0x40, 0xb3, 0x65, 0x9e, 0x96, 0x5b, + 0xa8, 0x52, 0x6f, 0xea, 0x1a, 0x4f, 0xf1, 0xb5, 0xc6, 0xab, 0xd3, 0x72, 0xb1, 0x26, 0x26, 0x52, + 0x70, 0x11, 0xcc, 0x57, 0x2b, 0x4d, 0x7d, 0x9e, 0xe7, 0xfa, 0x86, 0x79, 0xfa, 0xea, 0xb4, 0xce, + 0x45, 0x4d, 0x5e, 0x28, 0xfc, 0xa3, 0x06, 0xd2, 0xf1, 0x6f, 0x1e, 0x5c, 0xd1, 0x6c, 0xb4, 0xeb, + 0x15, 0x64, 0x36, 0x4a, 0xa7, 0x75, 0x99, 0x51, 0x6a, 0xd5, 0x62, 0xb3, 0x85, 0xcc, 0xea, 0x4f, + 0xdb, 0xd5, 0x26, 0x2f, 0x0e, 0x96, 0xc1, 0x92, 0x79, 0x5a, 0x7f, 0x25, 0x73, 0x4e, 0x8a, 0xaf, + 0xc3, 0x2c, 0xd6, 0x2b, 0x8d, 0x33, 0x7d, 0x1e, 0xee, 0x80, 0x95, 0x51, 0x76, 0x54, 0x2b, 0xe9, + 0x0b, 0xf9, 0xf4, 0xdf, 0xff, 0xdf, 0x3f, 0xff, 0x4d, 0x4a, 0x4b, 0x6b, 0x1c, 0x7a, 0x56, 0x7c, + 0x55, 0xab, 0x7e, 0xa1, 0x3f, 0x80, 0xeb, 0x40, 0x2f, 0xd7, 0xda, 0xcd, 0x56, 0xd5, 0x44, 0xe7, + 0x66, 0xe3, 0x8b, 0xd3, 0x4a, 0xb5, 0xa2, 0x3f, 0x84, 0x7b, 0x60, 0xbb, 0xd6, 0x28, 0x56, 0x50, + 0xa9, 0x58, 0x2b, 0xd6, 0xcb, 0xdc, 0xca, 0x79, 0xa3, 0x76, 0x5a, 0xfe, 0x12, 0x95, 0x1b, 0xf5, + 0xe3, 0xd3, 0x57, 0xfa, 0xe2, 0xfe, 0x8f, 0xc1, 0xca, 0xc4, 0xb3, 0x20, 0x4c, 0x83, 0x85, 0x62, + 0xbb, 0xd5, 0xd0, 0xe7, 0x78, 0x32, 0xfc, 0xe2, 0x23, 0xd4, 0xa8, 0xd7, 0xbe, 0xd4, 0x35, 0x31, + 0xf8, 0x58, 0x0e, 0x52, 0xfb, 0x2d, 0x60, 0xcc, 0x7a, 0x3a, 0x80, 0x5b, 0x60, 0xa3, 0xdd, 0xac, + 0x2a, 0x13, 0x6d, 0xb3, 0x5a, 0xe1, 0x2b, 0x6a, 0x35, 0xca, 0x8d, 0x9a, 0x3e, 0x17, 0x0b, 0x2b, + 0x8d, 0x37, 0xf5, 0x66, 0xcb, 0xac, 0x16, 0xcf, 0x6e, 0x84, 0x5a, 0xc9, 0x00, 0x8f, 0xe3, 0xa0, + 0x60, 0xc7, 0x87, 0x23, 0x7e, 0xb9, 0x2b, 0x65, 0xc4, 0xef, 0x4d, 0xf2, 0xfe, 0x7c, 0xbe, 0x90, + 0xce, 0xea, 0xcb, 0x9f, 0x2f, 0xa4, 0x57, 0x74, 0x7d, 0xff, 0x7f, 0x34, 0xb0, 0x96, 0xd0, 0x01, + 0xc3, 0x0a, 0x48, 0x8b, 0xe2, 0xd6, 0x21, 0xb2, 0xfc, 0xcd, 0x1c, 0x1d, 0xdc, 0xd9, 0x36, 0x17, + 0x54, 0xf7, 0x3c, 0xd4, 0xcc, 0xff, 0xb5, 0x06, 0x1e, 0x2a, 0x42, 0x38, 0xda, 0x00, 0xaa, 0xbe, + 0xef, 0x25, 0x78, 0x38, 0x96, 0x59, 0x67, 0x39, 0xb8, 0xf8, 0xf1, 0x4a, 0x41, 0xa7, 0x9a, 0xc5, + 0xf9, 0x7b, 0x36, 0x8b, 0xfb, 0x6f, 0x00, 0x6c, 0x4f, 0x3f, 0x1e, 0x16, 0x41, 0x4e, 0xfe, 0xc0, + 0x8e, 0xd4, 0xaf, 0xf5, 0x2a, 0x66, 0xdc, 0xf6, 0x54, 0xbb, 0x2c, 0x35, 0xd4, 0x70, 0x1f, 0x83, + 0xcd, 0x99, 0xef, 0x34, 0xb0, 0x02, 0x96, 0x99, 0x15, 0xa0, 0x4b, 0x42, 0x02, 0xec, 0x3a, 0x57, + 0xe4, 0x96, 0x8e, 0xb4, 0x65, 0x05, 0xaf, 0x63, 0x98, 0x99, 0x65, 0x23, 0xa3, 0x52, 0x53, 0x3c, + 0xa8, 0x6c, 0xc2, 0x0d, 0xa9, 0x25, 0x3f, 0x7d, 0xf8, 0x00, 0x72, 0xf5, 0xf2, 0x5f, 0xdf, 0xfd, + 0xfb, 0x7f, 0x3e, 0x4c, 0xe9, 0x1a, 0xc8, 0x3b, 0xbe, 0x64, 0x0e, 0x42, 0xff, 0x7a, 0x30, 0x66, + 0xa4, 0x94, 0x1d, 0x75, 0xb9, 0x73, 0xad, 0xf3, 0x50, 0xec, 0xd5, 0xcb, 0xdf, 0x04, 0x00, 0x00, + 0xff, 0xff, 0x19, 0x3a, 0xcd, 0x56, 0x7f, 0x21, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2066 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/cluster.proto + +package envoy_api_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _cluster_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on Cluster with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Cluster) Validate() error { + if m == nil { + return nil + } + + for idx, item := range m.GetTransportSocketMatches() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("TransportSocketMatches[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetName()) < 1 { + return ClusterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for AltStatName + + if v, ok := interface{}(m.GetEdsClusterConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "EdsClusterConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if d := m.GetConnectTimeout(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return ClusterValidationError{ + field: "ConnectTimeout", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return ClusterValidationError{ + field: "ConnectTimeout", + reason: "value must be greater than 0s", + } + } + + } + + if v, ok := interface{}(m.GetPerConnectionBufferLimitBytes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "PerConnectionBufferLimitBytes", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if _, ok := Cluster_LbPolicy_name[int32(m.GetLbPolicy())]; !ok { + return ClusterValidationError{ + field: "LbPolicy", + reason: "value must be one of the defined enum values", + } + } + + for idx, item := range m.GetHosts() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("Hosts[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetLoadAssignment()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "LoadAssignment", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetHealthChecks() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("HealthChecks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetMaxRequestsPerConnection()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "MaxRequestsPerConnection", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetCircuitBreakers()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "CircuitBreakers", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTlsContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "TlsContext", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetUpstreamHttpProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "UpstreamHttpProtocolOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetCommonHttpProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "CommonHttpProtocolOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetHttpProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "HttpProtocolOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetHttp2ProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "Http2ProtocolOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for key, val := range m.GetExtensionProtocolOptions() { + _ = val + + // no validation rules for ExtensionProtocolOptions[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("ExtensionProtocolOptions[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for key, val := range m.GetTypedExtensionProtocolOptions() { + _ = val + + // no validation rules for TypedExtensionProtocolOptions[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("TypedExtensionProtocolOptions[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if d := m.GetDnsRefreshRate(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return ClusterValidationError{ + field: "DnsRefreshRate", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 1000000*time.Nanosecond) + + if dur <= gt { + return ClusterValidationError{ + field: "DnsRefreshRate", + reason: "value must be greater than 1ms", + } + } + + } + + if v, ok := interface{}(m.GetDnsFailureRefreshRate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "DnsFailureRefreshRate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for RespectDnsTtl + + if _, ok := Cluster_DnsLookupFamily_name[int32(m.GetDnsLookupFamily())]; !ok { + return ClusterValidationError{ + field: "DnsLookupFamily", + reason: "value must be one of the defined enum values", + } + } + + for idx, item := range m.GetDnsResolvers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("DnsResolvers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for UseTcpForDnsLookups + + if v, ok := interface{}(m.GetOutlierDetection()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "OutlierDetection", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if d := m.GetCleanupInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return ClusterValidationError{ + field: "CleanupInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return ClusterValidationError{ + field: "CleanupInterval", + reason: "value must be greater than 0s", + } + } + + } + + if v, ok := interface{}(m.GetUpstreamBindConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "UpstreamBindConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetLbSubsetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "LbSubsetConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetCommonLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "CommonLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTransportSocket()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "TransportSocket", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for ProtocolSelection + + if v, ok := interface{}(m.GetUpstreamConnectionOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "UpstreamConnectionOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for CloseConnectionsOnHostHealthFailure + + // no validation rules for DrainConnectionsOnHostRemoval + + for idx, item := range m.GetFilters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("Filters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetLoadBalancingPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "LoadBalancingPolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetLrsServer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "LrsServer", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for TrackTimeoutBudgets + + switch m.ClusterDiscoveryType.(type) { + + case *Cluster_Type: + + if _, ok := Cluster_DiscoveryType_name[int32(m.GetType())]; !ok { + return ClusterValidationError{ + field: "Type", + reason: "value must be one of the defined enum values", + } + } + + case *Cluster_ClusterType: + + if v, ok := interface{}(m.GetClusterType()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "ClusterType", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + switch m.LbConfig.(type) { + + case *Cluster_RingHashLbConfig_: + + if v, ok := interface{}(m.GetRingHashLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "RingHashLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Cluster_OriginalDstLbConfig_: + + if v, ok := interface{}(m.GetOriginalDstLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "OriginalDstLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Cluster_LeastRequestLbConfig_: + + if v, ok := interface{}(m.GetLeastRequestLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "LeastRequestLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ClusterValidationError is the validation error returned by Cluster.Validate +// if the designated constraints aren't met. +type ClusterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ClusterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ClusterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ClusterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ClusterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ClusterValidationError) ErrorName() string { return "ClusterValidationError" } + +// Error satisfies the builtin error interface +func (e ClusterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ClusterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ClusterValidationError{} + +// Validate checks the field values on LoadBalancingPolicy with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *LoadBalancingPolicy) Validate() error { + if m == nil { + return nil + } + + for idx, item := range m.GetPolicies() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoadBalancingPolicyValidationError{ + field: fmt.Sprintf("Policies[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// LoadBalancingPolicyValidationError is the validation error returned by +// LoadBalancingPolicy.Validate if the designated constraints aren't met. +type LoadBalancingPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LoadBalancingPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LoadBalancingPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LoadBalancingPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LoadBalancingPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LoadBalancingPolicyValidationError) ErrorName() string { + return "LoadBalancingPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e LoadBalancingPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLoadBalancingPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LoadBalancingPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LoadBalancingPolicyValidationError{} + +// Validate checks the field values on UpstreamBindConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *UpstreamBindConfig) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetSourceAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamBindConfigValidationError{ + field: "SourceAddress", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// UpstreamBindConfigValidationError is the validation error returned by +// UpstreamBindConfig.Validate if the designated constraints aren't met. +type UpstreamBindConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpstreamBindConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpstreamBindConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpstreamBindConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpstreamBindConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpstreamBindConfigValidationError) ErrorName() string { + return "UpstreamBindConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e UpstreamBindConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpstreamBindConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpstreamBindConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpstreamBindConfigValidationError{} + +// Validate checks the field values on UpstreamConnectionOptions with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *UpstreamConnectionOptions) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetTcpKeepalive()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamConnectionOptionsValidationError{ + field: "TcpKeepalive", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// UpstreamConnectionOptionsValidationError is the validation error returned by +// UpstreamConnectionOptions.Validate if the designated constraints aren't met. +type UpstreamConnectionOptionsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpstreamConnectionOptionsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpstreamConnectionOptionsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpstreamConnectionOptionsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpstreamConnectionOptionsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpstreamConnectionOptionsValidationError) ErrorName() string { + return "UpstreamConnectionOptionsValidationError" +} + +// Error satisfies the builtin error interface +func (e UpstreamConnectionOptionsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpstreamConnectionOptions.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpstreamConnectionOptionsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpstreamConnectionOptionsValidationError{} + +// Validate checks the field values on Cluster_TransportSocketMatch with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_TransportSocketMatch) Validate() error { + if m == nil { + return nil + } + + if utf8.RuneCountInString(m.GetName()) < 1 { + return Cluster_TransportSocketMatchValidationError{ + field: "Name", + reason: "value length must be at least 1 runes", + } + } + + if v, ok := interface{}(m.GetMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_TransportSocketMatchValidationError{ + field: "Match", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTransportSocket()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_TransportSocketMatchValidationError{ + field: "TransportSocket", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// Cluster_TransportSocketMatchValidationError is the validation error returned +// by Cluster_TransportSocketMatch.Validate if the designated constraints +// aren't met. +type Cluster_TransportSocketMatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_TransportSocketMatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_TransportSocketMatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_TransportSocketMatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_TransportSocketMatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_TransportSocketMatchValidationError) ErrorName() string { + return "Cluster_TransportSocketMatchValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_TransportSocketMatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_TransportSocketMatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_TransportSocketMatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_TransportSocketMatchValidationError{} + +// Validate checks the field values on Cluster_CustomClusterType with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_CustomClusterType) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return Cluster_CustomClusterTypeValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CustomClusterTypeValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// Cluster_CustomClusterTypeValidationError is the validation error returned by +// Cluster_CustomClusterType.Validate if the designated constraints aren't met. +type Cluster_CustomClusterTypeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_CustomClusterTypeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_CustomClusterTypeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_CustomClusterTypeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_CustomClusterTypeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_CustomClusterTypeValidationError) ErrorName() string { + return "Cluster_CustomClusterTypeValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_CustomClusterTypeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_CustomClusterType.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_CustomClusterTypeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_CustomClusterTypeValidationError{} + +// Validate checks the field values on Cluster_EdsClusterConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_EdsClusterConfig) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetEdsConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_EdsClusterConfigValidationError{ + field: "EdsConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for ServiceName + + return nil +} + +// Cluster_EdsClusterConfigValidationError is the validation error returned by +// Cluster_EdsClusterConfig.Validate if the designated constraints aren't met. +type Cluster_EdsClusterConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_EdsClusterConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_EdsClusterConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_EdsClusterConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_EdsClusterConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_EdsClusterConfigValidationError) ErrorName() string { + return "Cluster_EdsClusterConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_EdsClusterConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_EdsClusterConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_EdsClusterConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_EdsClusterConfigValidationError{} + +// Validate checks the field values on Cluster_LbSubsetConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_LbSubsetConfig) Validate() error { + if m == nil { + return nil + } + + if _, ok := Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name[int32(m.GetFallbackPolicy())]; !ok { + return Cluster_LbSubsetConfigValidationError{ + field: "FallbackPolicy", + reason: "value must be one of the defined enum values", + } + } + + if v, ok := interface{}(m.GetDefaultSubset()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_LbSubsetConfigValidationError{ + field: "DefaultSubset", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetSubsetSelectors() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_LbSubsetConfigValidationError{ + field: fmt.Sprintf("SubsetSelectors[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for LocalityWeightAware + + // no validation rules for ScaleLocalityWeight + + // no validation rules for PanicModeAny + + // no validation rules for ListAsAny + + return nil +} + +// Cluster_LbSubsetConfigValidationError is the validation error returned by +// Cluster_LbSubsetConfig.Validate if the designated constraints aren't met. +type Cluster_LbSubsetConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_LbSubsetConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_LbSubsetConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_LbSubsetConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_LbSubsetConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_LbSubsetConfigValidationError) ErrorName() string { + return "Cluster_LbSubsetConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_LbSubsetConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_LbSubsetConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_LbSubsetConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_LbSubsetConfigValidationError{} + +// Validate checks the field values on Cluster_LeastRequestLbConfig with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_LeastRequestLbConfig) Validate() error { + if m == nil { + return nil + } + + if wrapper := m.GetChoiceCount(); wrapper != nil { + + if wrapper.GetValue() < 2 { + return Cluster_LeastRequestLbConfigValidationError{ + field: "ChoiceCount", + reason: "value must be greater than or equal to 2", + } + } + + } + + return nil +} + +// Cluster_LeastRequestLbConfigValidationError is the validation error returned +// by Cluster_LeastRequestLbConfig.Validate if the designated constraints +// aren't met. +type Cluster_LeastRequestLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_LeastRequestLbConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_LeastRequestLbConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_LeastRequestLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_LeastRequestLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_LeastRequestLbConfigValidationError) ErrorName() string { + return "Cluster_LeastRequestLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_LeastRequestLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_LeastRequestLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_LeastRequestLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_LeastRequestLbConfigValidationError{} + +// Validate checks the field values on Cluster_RingHashLbConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_RingHashLbConfig) Validate() error { + if m == nil { + return nil + } + + if wrapper := m.GetMinimumRingSize(); wrapper != nil { + + if wrapper.GetValue() > 8388608 { + return Cluster_RingHashLbConfigValidationError{ + field: "MinimumRingSize", + reason: "value must be less than or equal to 8388608", + } + } + + } + + if _, ok := Cluster_RingHashLbConfig_HashFunction_name[int32(m.GetHashFunction())]; !ok { + return Cluster_RingHashLbConfigValidationError{ + field: "HashFunction", + reason: "value must be one of the defined enum values", + } + } + + if wrapper := m.GetMaximumRingSize(); wrapper != nil { + + if wrapper.GetValue() > 8388608 { + return Cluster_RingHashLbConfigValidationError{ + field: "MaximumRingSize", + reason: "value must be less than or equal to 8388608", + } + } + + } + + return nil +} + +// Cluster_RingHashLbConfigValidationError is the validation error returned by +// Cluster_RingHashLbConfig.Validate if the designated constraints aren't met. +type Cluster_RingHashLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_RingHashLbConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_RingHashLbConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_RingHashLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_RingHashLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_RingHashLbConfigValidationError) ErrorName() string { + return "Cluster_RingHashLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_RingHashLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_RingHashLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_RingHashLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_RingHashLbConfigValidationError{} + +// Validate checks the field values on Cluster_OriginalDstLbConfig with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_OriginalDstLbConfig) Validate() error { + if m == nil { + return nil + } + + // no validation rules for UseHttpHeader + + return nil +} + +// Cluster_OriginalDstLbConfigValidationError is the validation error returned +// by Cluster_OriginalDstLbConfig.Validate if the designated constraints +// aren't met. +type Cluster_OriginalDstLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_OriginalDstLbConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_OriginalDstLbConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_OriginalDstLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_OriginalDstLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_OriginalDstLbConfigValidationError) ErrorName() string { + return "Cluster_OriginalDstLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_OriginalDstLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_OriginalDstLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_OriginalDstLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_OriginalDstLbConfigValidationError{} + +// Validate checks the field values on Cluster_CommonLbConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_CommonLbConfig) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetHealthyPanicThreshold()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfigValidationError{ + field: "HealthyPanicThreshold", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetUpdateMergeWindow()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfigValidationError{ + field: "UpdateMergeWindow", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IgnoreNewHostsUntilFirstHc + + // no validation rules for CloseConnectionsOnHostSetChange + + if v, ok := interface{}(m.GetConsistentHashingLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfigValidationError{ + field: "ConsistentHashingLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.LocalityConfigSpecifier.(type) { + + case *Cluster_CommonLbConfig_ZoneAwareLbConfig_: + + if v, ok := interface{}(m.GetZoneAwareLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfigValidationError{ + field: "ZoneAwareLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Cluster_CommonLbConfig_LocalityWeightedLbConfig_: + + if v, ok := interface{}(m.GetLocalityWeightedLbConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfigValidationError{ + field: "LocalityWeightedLbConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// Cluster_CommonLbConfigValidationError is the validation error returned by +// Cluster_CommonLbConfig.Validate if the designated constraints aren't met. +type Cluster_CommonLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_CommonLbConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_CommonLbConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_CommonLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_CommonLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_CommonLbConfigValidationError) ErrorName() string { + return "Cluster_CommonLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_CommonLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_CommonLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_CommonLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_CommonLbConfigValidationError{} + +// Validate checks the field values on Cluster_RefreshRate with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Cluster_RefreshRate) Validate() error { + if m == nil { + return nil + } + + if m.GetBaseInterval() == nil { + return Cluster_RefreshRateValidationError{ + field: "BaseInterval", + reason: "value is required", + } + } + + if d := m.GetBaseInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return Cluster_RefreshRateValidationError{ + field: "BaseInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 1000000*time.Nanosecond) + + if dur <= gt { + return Cluster_RefreshRateValidationError{ + field: "BaseInterval", + reason: "value must be greater than 1ms", + } + } + + } + + if d := m.GetMaxInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return Cluster_RefreshRateValidationError{ + field: "MaxInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 1000000*time.Nanosecond) + + if dur <= gt { + return Cluster_RefreshRateValidationError{ + field: "MaxInterval", + reason: "value must be greater than 1ms", + } + } + + } + + return nil +} + +// Cluster_RefreshRateValidationError is the validation error returned by +// Cluster_RefreshRate.Validate if the designated constraints aren't met. +type Cluster_RefreshRateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_RefreshRateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_RefreshRateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_RefreshRateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_RefreshRateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_RefreshRateValidationError) ErrorName() string { + return "Cluster_RefreshRateValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_RefreshRateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_RefreshRate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_RefreshRateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_RefreshRateValidationError{} + +// Validate checks the field values on Cluster_LbSubsetConfig_LbSubsetSelector +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *Cluster_LbSubsetConfig_LbSubsetSelector) Validate() error { + if m == nil { + return nil + } + + if _, ok := Cluster_LbSubsetConfig_LbSubsetSelector_LbSubsetSelectorFallbackPolicy_name[int32(m.GetFallbackPolicy())]; !ok { + return Cluster_LbSubsetConfig_LbSubsetSelectorValidationError{ + field: "FallbackPolicy", + reason: "value must be one of the defined enum values", + } + } + + return nil +} + +// Cluster_LbSubsetConfig_LbSubsetSelectorValidationError is the validation +// error returned by Cluster_LbSubsetConfig_LbSubsetSelector.Validate if the +// designated constraints aren't met. +type Cluster_LbSubsetConfig_LbSubsetSelectorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) ErrorName() string { + return "Cluster_LbSubsetConfig_LbSubsetSelectorValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_LbSubsetConfig_LbSubsetSelectorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_LbSubsetConfig_LbSubsetSelector.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_LbSubsetConfig_LbSubsetSelectorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_LbSubsetConfig_LbSubsetSelectorValidationError{} + +// Validate checks the field values on Cluster_CommonLbConfig_ZoneAwareLbConfig +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *Cluster_CommonLbConfig_ZoneAwareLbConfig) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetRoutingEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{ + field: "RoutingEnabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMinClusterSize()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{ + field: "MinClusterSize", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for FailTrafficOnPanic + + return nil +} + +// Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError is the validation +// error returned by Cluster_CommonLbConfig_ZoneAwareLbConfig.Validate if the +// designated constraints aren't met. +type Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) ErrorName() string { + return "Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_CommonLbConfig_ZoneAwareLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_CommonLbConfig_ZoneAwareLbConfigValidationError{} + +// Validate checks the field values on +// Cluster_CommonLbConfig_LocalityWeightedLbConfig with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *Cluster_CommonLbConfig_LocalityWeightedLbConfig) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError is the +// validation error returned by +// Cluster_CommonLbConfig_LocalityWeightedLbConfig.Validate if the designated +// constraints aren't met. +type Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) ErrorName() string { + return "Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_CommonLbConfig_LocalityWeightedLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_CommonLbConfig_LocalityWeightedLbConfigValidationError{} + +// Validate checks the field values on +// Cluster_CommonLbConfig_ConsistentHashingLbConfig with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *Cluster_CommonLbConfig_ConsistentHashingLbConfig) Validate() error { + if m == nil { + return nil + } + + // no validation rules for UseHostnameForHashing + + return nil +} + +// Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError is the +// validation error returned by +// Cluster_CommonLbConfig_ConsistentHashingLbConfig.Validate if the designated +// constraints aren't met. +type Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError) ErrorName() string { + return "Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCluster_CommonLbConfig_ConsistentHashingLbConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Cluster_CommonLbConfig_ConsistentHashingLbConfigValidationError{} + +// Validate checks the field values on LoadBalancingPolicy_Policy with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *LoadBalancingPolicy_Policy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Name + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoadBalancingPolicy_PolicyValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoadBalancingPolicy_PolicyValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// LoadBalancingPolicy_PolicyValidationError is the validation error returned +// by LoadBalancingPolicy_Policy.Validate if the designated constraints aren't met. +type LoadBalancingPolicy_PolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LoadBalancingPolicy_PolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LoadBalancingPolicy_PolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LoadBalancingPolicy_PolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LoadBalancingPolicy_PolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LoadBalancingPolicy_PolicyValidationError) ErrorName() string { + return "LoadBalancingPolicy_PolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e LoadBalancingPolicy_PolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLoadBalancingPolicy_Policy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LoadBalancingPolicy_PolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LoadBalancingPolicy_PolicyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18 +1,15 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/address.proto -package core +package envoy_api_v2_core import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,14 +21,13 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type SocketAddress_Protocol int32 const ( - TCP SocketAddress_Protocol = 0 - // [#not-implemented-hide:] - UDP SocketAddress_Protocol = 1 + SocketAddress_TCP SocketAddress_Protocol = 0 + SocketAddress_UDP SocketAddress_Protocol = 1 ) var SocketAddress_Protocol_name = map[int32]string{ @@ -53,11 +49,8 @@ } type Pipe struct { - // Unix Domain Socket path. On Linux, paths starting with '@' will use the - // abstract namespace. The starting '@' is replaced by a null byte by Envoy. - // Paths starting with '@' will result in an error in environments other than - // Linux. Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Mode uint32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -69,26 +62,18 @@ func (*Pipe) Descriptor() ([]byte, []int) { return fileDescriptor_6906417f87bcce55, []int{0} } + func (m *Pipe) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Pipe.Unmarshal(m, b) } func (m *Pipe) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Pipe.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Pipe.Marshal(b, m, deterministic) } func (m *Pipe) XXX_Merge(src proto.Message) { xxx_messageInfo_Pipe.Merge(m, src) } func (m *Pipe) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Pipe.Size(m) } func (m *Pipe) XXX_DiscardUnknown() { xxx_messageInfo_Pipe.DiscardUnknown(m) @@ -103,37 +88,25 @@ return "" } +func (m *Pipe) GetMode() uint32 { + if m != nil { + return m.Mode + } + return 0 +} + type SocketAddress struct { Protocol SocketAddress_Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=envoy.api.v2.core.SocketAddress_Protocol" json:"protocol,omitempty"` - // The address for this socket. :ref:`Listeners ` will bind - // to the address. An empty address is not allowed. Specify ``0.0.0.0`` or ``::`` - // to bind to any address. [#comment:TODO(zuercher) reinstate when implemented: - // It is possible to distinguish a Listener address via the prefix/suffix matching - // in :ref:`FilterChainMatch `.] When used - // within an upstream :ref:`BindConfig `, the address - // controls the source address of outbound connections. For :ref:`clusters - // `, the cluster type determines whether the - // address must be an IP (*STATIC* or *EDS* clusters) or a hostname resolved by DNS - // (*STRICT_DNS* or *LOGICAL_DNS* clusters). Address resolution can be customized - // via :ref:`resolver_name `. - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` // Types that are valid to be assigned to PortSpecifier: // *SocketAddress_PortValue // *SocketAddress_NamedPort - PortSpecifier isSocketAddress_PortSpecifier `protobuf_oneof:"port_specifier"` - // The name of the resolver. This must have been registered with Envoy. If this is - // empty, a context dependent default applies. If address is a hostname this - // should be set for resolution other than DNS. If the address is a concrete - // IP address, no resolution will occur. - ResolverName string `protobuf:"bytes,5,opt,name=resolver_name,json=resolverName,proto3" json:"resolver_name,omitempty"` - // When binding to an IPv6 address above, this enables `IPv4 compatibility - // `_. Binding to ``::`` will - // allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into - // IPv6 space as ``::FFFF:``. - Ipv4Compat bool `protobuf:"varint,6,opt,name=ipv4_compat,json=ipv4Compat,proto3" json:"ipv4_compat,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + PortSpecifier isSocketAddress_PortSpecifier `protobuf_oneof:"port_specifier"` + ResolverName string `protobuf:"bytes,5,opt,name=resolver_name,json=resolverName,proto3" json:"resolver_name,omitempty"` + Ipv4Compat bool `protobuf:"varint,6,opt,name=ipv4_compat,json=ipv4Compat,proto3" json:"ipv4_compat,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *SocketAddress) Reset() { *m = SocketAddress{} } @@ -142,26 +115,18 @@ func (*SocketAddress) Descriptor() ([]byte, []int) { return fileDescriptor_6906417f87bcce55, []int{1} } + func (m *SocketAddress) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_SocketAddress.Unmarshal(m, b) } func (m *SocketAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SocketAddress.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_SocketAddress.Marshal(b, m, deterministic) } func (m *SocketAddress) XXX_Merge(src proto.Message) { xxx_messageInfo_SocketAddress.Merge(m, src) } func (m *SocketAddress) XXX_Size() int { - return m.Size() + return xxx_messageInfo_SocketAddress.Size(m) } func (m *SocketAddress) XXX_DiscardUnknown() { xxx_messageInfo_SocketAddress.DiscardUnknown(m) @@ -169,21 +134,34 @@ var xxx_messageInfo_SocketAddress proto.InternalMessageInfo +func (m *SocketAddress) GetProtocol() SocketAddress_Protocol { + if m != nil { + return m.Protocol + } + return SocketAddress_TCP +} + +func (m *SocketAddress) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type isSocketAddress_PortSpecifier interface { isSocketAddress_PortSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type SocketAddress_PortValue struct { PortValue uint32 `protobuf:"varint,3,opt,name=port_value,json=portValue,proto3,oneof"` } + type SocketAddress_NamedPort struct { NamedPort string `protobuf:"bytes,4,opt,name=named_port,json=namedPort,proto3,oneof"` } func (*SocketAddress_PortValue) isSocketAddress_PortSpecifier() {} + func (*SocketAddress_NamedPort) isSocketAddress_PortSpecifier() {} func (m *SocketAddress) GetPortSpecifier() isSocketAddress_PortSpecifier { @@ -193,20 +171,6 @@ return nil } -func (m *SocketAddress) GetProtocol() SocketAddress_Protocol { - if m != nil { - return m.Protocol - } - return TCP -} - -func (m *SocketAddress) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - func (m *SocketAddress) GetPortValue() uint32 { if x, ok := m.GetPortSpecifier().(*SocketAddress_PortValue); ok { return x.PortValue @@ -235,86 +199,21 @@ return false } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SocketAddress) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SocketAddress_OneofMarshaler, _SocketAddress_OneofUnmarshaler, _SocketAddress_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*SocketAddress) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*SocketAddress_PortValue)(nil), (*SocketAddress_NamedPort)(nil), } } -func _SocketAddress_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SocketAddress) - // port_specifier - switch x := m.PortSpecifier.(type) { - case *SocketAddress_PortValue: - _ = b.EncodeVarint(3<<3 | proto.WireVarint) - _ = b.EncodeVarint(uint64(x.PortValue)) - case *SocketAddress_NamedPort: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.NamedPort) - case nil: - default: - return fmt.Errorf("SocketAddress.PortSpecifier has unexpected type %T", x) - } - return nil -} - -func _SocketAddress_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SocketAddress) - switch tag { - case 3: // port_specifier.port_value - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.PortSpecifier = &SocketAddress_PortValue{uint32(x)} - return true, err - case 4: // port_specifier.named_port - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.PortSpecifier = &SocketAddress_NamedPort{x} - return true, err - default: - return false, nil - } -} - -func _SocketAddress_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SocketAddress) - // port_specifier - switch x := m.PortSpecifier.(type) { - case *SocketAddress_PortValue: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.PortValue)) - case *SocketAddress_NamedPort: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.NamedPort))) - n += len(x.NamedPort) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type TcpKeepalive struct { - // Maximum number of keepalive probes to send without response before deciding - // the connection is dead. Default is to use the OS level configuration (unless - // overridden, Linux defaults to 9.) - KeepaliveProbes *types.UInt32Value `protobuf:"bytes,1,opt,name=keepalive_probes,json=keepaliveProbes,proto3" json:"keepalive_probes,omitempty"` - // The number of seconds a connection needs to be idle before keep-alive probes - // start being sent. Default is to use the OS level configuration (unless - // overridden, Linux defaults to 7200s (ie 2 hours.) - KeepaliveTime *types.UInt32Value `protobuf:"bytes,2,opt,name=keepalive_time,json=keepaliveTime,proto3" json:"keepalive_time,omitempty"` - // The number of seconds between keep-alive probes. Default is to use the OS - // level configuration (unless overridden, Linux defaults to 75s.) - KeepaliveInterval *types.UInt32Value `protobuf:"bytes,3,opt,name=keepalive_interval,json=keepaliveInterval,proto3" json:"keepalive_interval,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + KeepaliveProbes *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=keepalive_probes,json=keepaliveProbes,proto3" json:"keepalive_probes,omitempty"` + KeepaliveTime *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=keepalive_time,json=keepaliveTime,proto3" json:"keepalive_time,omitempty"` + KeepaliveInterval *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=keepalive_interval,json=keepaliveInterval,proto3" json:"keepalive_interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TcpKeepalive) Reset() { *m = TcpKeepalive{} } @@ -323,26 +222,18 @@ func (*TcpKeepalive) Descriptor() ([]byte, []int) { return fileDescriptor_6906417f87bcce55, []int{2} } + func (m *TcpKeepalive) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpKeepalive.Unmarshal(m, b) } func (m *TcpKeepalive) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpKeepalive.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpKeepalive.Marshal(b, m, deterministic) } func (m *TcpKeepalive) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpKeepalive.Merge(m, src) } func (m *TcpKeepalive) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpKeepalive.Size(m) } func (m *TcpKeepalive) XXX_DiscardUnknown() { xxx_messageInfo_TcpKeepalive.DiscardUnknown(m) @@ -350,21 +241,21 @@ var xxx_messageInfo_TcpKeepalive proto.InternalMessageInfo -func (m *TcpKeepalive) GetKeepaliveProbes() *types.UInt32Value { +func (m *TcpKeepalive) GetKeepaliveProbes() *wrappers.UInt32Value { if m != nil { return m.KeepaliveProbes } return nil } -func (m *TcpKeepalive) GetKeepaliveTime() *types.UInt32Value { +func (m *TcpKeepalive) GetKeepaliveTime() *wrappers.UInt32Value { if m != nil { return m.KeepaliveTime } return nil } -func (m *TcpKeepalive) GetKeepaliveInterval() *types.UInt32Value { +func (m *TcpKeepalive) GetKeepaliveInterval() *wrappers.UInt32Value { if m != nil { return m.KeepaliveInterval } @@ -372,22 +263,12 @@ } type BindConfig struct { - // The address to bind to when creating a socket. - SourceAddress SocketAddress `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address"` - // Whether to set the *IP_FREEBIND* option when creating the socket. When this - // flag is set to true, allows the :ref:`source_address - // ` to be an IP address - // that is not configured on the system running Envoy. When this flag is set - // to false, the option *IP_FREEBIND* is disabled on the socket. When this - // flag is not set (default), the socket is not modified, i.e. the option is - // neither enabled nor disabled. - Freebind *types.BoolValue `protobuf:"bytes,2,opt,name=freebind,proto3" json:"freebind,omitempty"` - // Additional socket options that may not be present in Envoy source code or - // precompiled binaries. - SocketOptions []*SocketOption `protobuf:"bytes,3,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SourceAddress *SocketAddress `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"` + Freebind *wrappers.BoolValue `protobuf:"bytes,2,opt,name=freebind,proto3" json:"freebind,omitempty"` + SocketOptions []*SocketOption `protobuf:"bytes,3,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *BindConfig) Reset() { *m = BindConfig{} } @@ -396,26 +277,18 @@ func (*BindConfig) Descriptor() ([]byte, []int) { return fileDescriptor_6906417f87bcce55, []int{3} } + func (m *BindConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_BindConfig.Unmarshal(m, b) } func (m *BindConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_BindConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_BindConfig.Marshal(b, m, deterministic) } func (m *BindConfig) XXX_Merge(src proto.Message) { xxx_messageInfo_BindConfig.Merge(m, src) } func (m *BindConfig) XXX_Size() int { - return m.Size() + return xxx_messageInfo_BindConfig.Size(m) } func (m *BindConfig) XXX_DiscardUnknown() { xxx_messageInfo_BindConfig.DiscardUnknown(m) @@ -423,14 +296,14 @@ var xxx_messageInfo_BindConfig proto.InternalMessageInfo -func (m *BindConfig) GetSourceAddress() SocketAddress { +func (m *BindConfig) GetSourceAddress() *SocketAddress { if m != nil { return m.SourceAddress } - return SocketAddress{} + return nil } -func (m *BindConfig) GetFreebind() *types.BoolValue { +func (m *BindConfig) GetFreebind() *wrappers.BoolValue { if m != nil { return m.Freebind } @@ -444,9 +317,6 @@ return nil } -// Addresses specify either a logical or physical address and port, which are -// used to tell Envoy where to bind/listen, connect to upstream and find -// management servers. type Address struct { // Types that are valid to be assigned to Address: // *Address_SocketAddress @@ -463,26 +333,18 @@ func (*Address) Descriptor() ([]byte, []int) { return fileDescriptor_6906417f87bcce55, []int{4} } + func (m *Address) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Address.Unmarshal(m, b) } func (m *Address) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Address.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Address.Marshal(b, m, deterministic) } func (m *Address) XXX_Merge(src proto.Message) { xxx_messageInfo_Address.Merge(m, src) } func (m *Address) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Address.Size(m) } func (m *Address) XXX_DiscardUnknown() { xxx_messageInfo_Address.DiscardUnknown(m) @@ -492,20 +354,19 @@ type isAddress_Address interface { isAddress_Address() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type Address_SocketAddress struct { SocketAddress *SocketAddress `protobuf:"bytes,1,opt,name=socket_address,json=socketAddress,proto3,oneof"` } + type Address_Pipe struct { Pipe *Pipe `protobuf:"bytes,2,opt,name=pipe,proto3,oneof"` } func (*Address_SocketAddress) isAddress_Address() {} -func (*Address_Pipe) isAddress_Address() {} + +func (*Address_Pipe) isAddress_Address() {} func (m *Address) GetAddress() isAddress_Address { if m != nil { @@ -528,90 +389,20 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Address) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Address_OneofMarshaler, _Address_OneofUnmarshaler, _Address_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Address) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*Address_SocketAddress)(nil), (*Address_Pipe)(nil), } } -func _Address_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Address) - // address - switch x := m.Address.(type) { - case *Address_SocketAddress: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.SocketAddress); err != nil { - return err - } - case *Address_Pipe: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Pipe); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Address.Address has unexpected type %T", x) - } - return nil -} - -func _Address_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Address) - switch tag { - case 1: // address.socket_address - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(SocketAddress) - err := b.DecodeMessage(msg) - m.Address = &Address_SocketAddress{msg} - return true, err - case 2: // address.pipe - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Pipe) - err := b.DecodeMessage(msg) - m.Address = &Address_Pipe{msg} - return true, err - default: - return false, nil - } -} - -func _Address_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Address) - // address - switch x := m.Address.(type) { - case *Address_SocketAddress: - s := proto.Size(x.SocketAddress) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Address_Pipe: - s := proto.Size(x.Pipe) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// CidrRange specifies an IP Address and a prefix length to construct -// the subnet mask for a `CIDR `_ range. type CidrRange struct { - // IPv4 or IPv6 address, e.g. ``192.0.0.0`` or ``2001:db8::``. - AddressPrefix string `protobuf:"bytes,1,opt,name=address_prefix,json=addressPrefix,proto3" json:"address_prefix,omitempty"` - // Length of prefix, e.g. 0, 32. - PrefixLen *types.UInt32Value `protobuf:"bytes,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AddressPrefix string `protobuf:"bytes,1,opt,name=address_prefix,json=addressPrefix,proto3" json:"address_prefix,omitempty"` + PrefixLen *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CidrRange) Reset() { *m = CidrRange{} } @@ -620,26 +411,18 @@ func (*CidrRange) Descriptor() ([]byte, []int) { return fileDescriptor_6906417f87bcce55, []int{5} } + func (m *CidrRange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CidrRange.Unmarshal(m, b) } func (m *CidrRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CidrRange.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CidrRange.Marshal(b, m, deterministic) } func (m *CidrRange) XXX_Merge(src proto.Message) { xxx_messageInfo_CidrRange.Merge(m, src) } func (m *CidrRange) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CidrRange.Size(m) } func (m *CidrRange) XXX_DiscardUnknown() { xxx_messageInfo_CidrRange.DiscardUnknown(m) @@ -654,7 +437,7 @@ return "" } -func (m *CidrRange) GetPrefixLen() *types.UInt32Value { +func (m *CidrRange) GetPrefixLen() *wrappers.UInt32Value { if m != nil { return m.PrefixLen } @@ -674,1808 +457,51 @@ func init() { proto.RegisterFile("envoy/api/v2/core/address.proto", fileDescriptor_6906417f87bcce55) } var fileDescriptor_6906417f87bcce55 = []byte{ - // 710 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xc1, 0x6f, 0xd3, 0x3e, - 0x18, 0xad, 0x9b, 0x6e, 0x6b, 0xbf, 0xae, 0xfd, 0x75, 0xd6, 0x4f, 0x5a, 0x54, 0x8d, 0xb6, 0xea, - 0x84, 0x54, 0x26, 0x48, 0x50, 0x87, 0xb8, 0x2f, 0x45, 0x6c, 0xd3, 0x10, 0x84, 0xb0, 0xc1, 0x31, - 0x4a, 0x5b, 0xb7, 0x58, 0x4b, 0x63, 0xcb, 0xc9, 0xc2, 0x76, 0x43, 0x1c, 0x10, 0xe2, 0xce, 0x5f, - 0xc0, 0x85, 0x3f, 0x01, 0x71, 0xda, 0x71, 0x47, 0xae, 0x5c, 0x10, 0xaa, 0xc4, 0x61, 0x7f, 0xc5, - 0x90, 0x9d, 0xa4, 0x13, 0x14, 0x34, 0xb8, 0xd9, 0xdf, 0xf7, 0xde, 0xf3, 0x7b, 0xf6, 0x67, 0x68, - 0x92, 0x20, 0x66, 0x27, 0xa6, 0xc7, 0xa9, 0x19, 0x77, 0xcd, 0x01, 0x13, 0xc4, 0xf4, 0x86, 0x43, - 0x41, 0xc2, 0xd0, 0xe0, 0x82, 0x45, 0x0c, 0xaf, 0x28, 0x80, 0xe1, 0x71, 0x6a, 0xc4, 0x5d, 0x43, - 0x02, 0xea, 0x6b, 0xf3, 0x9c, 0xbe, 0x17, 0x92, 0x84, 0x50, 0x6f, 0x8c, 0x19, 0x1b, 0xfb, 0xc4, - 0x54, 0xbb, 0xfe, 0xd1, 0xc8, 0x7c, 0x21, 0x3c, 0xce, 0x89, 0x48, 0x05, 0xeb, 0xab, 0xb1, 0xe7, - 0xd3, 0xa1, 0x17, 0x11, 0x33, 0x5b, 0xa4, 0x8d, 0xff, 0xc7, 0x6c, 0xcc, 0xd4, 0xd2, 0x94, 0xab, - 0xa4, 0xda, 0xbe, 0x0e, 0x05, 0x9b, 0x72, 0x82, 0xaf, 0x41, 0x81, 0x7b, 0xd1, 0x73, 0x1d, 0xb5, - 0x50, 0xa7, 0x64, 0x95, 0x3e, 0x9d, 0x9f, 0x6a, 0x05, 0x91, 0x6f, 0x21, 0x47, 0x95, 0xdb, 0x5f, - 0xf2, 0x50, 0x79, 0xc2, 0x06, 0x87, 0x24, 0xda, 0x4a, 0xec, 0xe3, 0xc7, 0x50, 0x54, 0x0a, 0x03, - 0xe6, 0x2b, 0x52, 0xb5, 0x7b, 0xc3, 0x98, 0xcb, 0x62, 0xfc, 0xc4, 0x31, 0xec, 0x94, 0x60, 0x81, - 0xd4, 0x5f, 0x78, 0x85, 0xf2, 0x35, 0xe4, 0xcc, 0x64, 0xf0, 0x3a, 0x2c, 0xa5, 0x97, 0xa3, 0xe7, - 0x7f, 0xb5, 0x91, 0x75, 0xf0, 0x4d, 0x00, 0xce, 0x44, 0xe4, 0xc6, 0x9e, 0x7f, 0x44, 0x74, 0xad, - 0x85, 0x3a, 0x15, 0xab, 0x2c, 0x71, 0x8b, 0x1b, 0x05, 0xfd, 0xe2, 0x42, 0xdb, 0xc9, 0x39, 0x25, - 0x09, 0x78, 0x2a, 0xfb, 0xb8, 0x09, 0x10, 0x78, 0x13, 0x32, 0x74, 0x65, 0x49, 0x2f, 0x48, 0x55, - 0x09, 0x50, 0x35, 0x9b, 0x89, 0x08, 0xaf, 0x43, 0x45, 0x90, 0x90, 0xf9, 0x31, 0x11, 0xae, 0xac, - 0xea, 0x0b, 0x12, 0xe3, 0x2c, 0x67, 0xc5, 0x87, 0xde, 0x44, 0xaa, 0x94, 0x29, 0x8f, 0xef, 0xb8, - 0x03, 0x36, 0xe1, 0x5e, 0xa4, 0x2f, 0xb6, 0x50, 0xa7, 0xe8, 0x80, 0x2c, 0xf5, 0x54, 0xa5, 0xdd, - 0x86, 0x62, 0x96, 0x0d, 0x2f, 0x81, 0xb6, 0xdf, 0xb3, 0x6b, 0x39, 0xb9, 0x38, 0xb8, 0x67, 0xd7, - 0x50, 0xbd, 0xf0, 0xe6, 0x7d, 0x23, 0x67, 0xad, 0x42, 0x55, 0x19, 0x0f, 0x39, 0x19, 0xd0, 0x11, - 0x25, 0x02, 0x2f, 0x7c, 0x3c, 0x3f, 0xd5, 0x50, 0xfb, 0x1c, 0xc1, 0xf2, 0xfe, 0x80, 0xef, 0x11, - 0xc2, 0x3d, 0x9f, 0xc6, 0x04, 0x6f, 0x43, 0xed, 0x30, 0xdb, 0xb8, 0x5c, 0xb0, 0x3e, 0x09, 0xd5, - 0x15, 0x97, 0xbb, 0x6b, 0x46, 0xf2, 0xfa, 0x46, 0xf6, 0xfa, 0xc6, 0xc1, 0x6e, 0x10, 0x6d, 0x76, - 0x55, 0x58, 0xe7, 0xbf, 0x19, 0xcb, 0x56, 0x24, 0xdc, 0x83, 0xea, 0xa5, 0x50, 0x44, 0x27, 0x44, - 0xdd, 0xeb, 0x55, 0x32, 0x95, 0x19, 0x67, 0x9f, 0x4e, 0x08, 0xde, 0x03, 0x7c, 0x29, 0x42, 0x83, - 0x88, 0x88, 0xd8, 0xf3, 0xd5, 0xc5, 0x5f, 0x25, 0xb4, 0x32, 0xe3, 0xed, 0xa6, 0xb4, 0xf6, 0x77, - 0x04, 0x60, 0xd1, 0x60, 0xd8, 0x63, 0xc1, 0x88, 0x8e, 0xf1, 0x33, 0xa8, 0x86, 0xec, 0x48, 0x0c, - 0x88, 0x9b, 0x3d, 0x7c, 0x92, 0xb3, 0x75, 0xd5, 0x28, 0x59, 0xd5, 0xb3, 0xaf, 0xcd, 0x9c, 0x9a, - 0xa2, 0xb7, 0x6a, 0x8a, 0x2a, 0x89, 0x4e, 0x36, 0x9d, 0x77, 0xa1, 0x38, 0x12, 0x84, 0xf4, 0x69, - 0x30, 0x4c, 0x33, 0xd7, 0xe7, 0xac, 0x5a, 0x8c, 0xf9, 0x89, 0xd1, 0x19, 0x16, 0xdf, 0x97, 0x86, - 0xe4, 0x39, 0x2e, 0xe3, 0x11, 0x65, 0x41, 0xa8, 0x6b, 0x2d, 0xad, 0x53, 0xee, 0x36, 0xff, 0x68, - 0xe8, 0x91, 0xc2, 0xc9, 0xf3, 0x2f, 0x77, 0x61, 0xfb, 0x1d, 0x82, 0xa5, 0xcc, 0xcb, 0xee, 0x4c, - 0xf3, 0x1f, 0x43, 0xee, 0xe4, 0x32, 0xd9, 0x4c, 0xea, 0x16, 0x14, 0x38, 0xe5, 0xd9, 0x33, 0xae, - 0xfe, 0x46, 0x40, 0x7e, 0xe6, 0x9d, 0x9c, 0xa3, 0x60, 0x56, 0x6d, 0xf6, 0xa1, 0xb2, 0x59, 0x7b, - 0x8d, 0xa0, 0xd4, 0xa3, 0x43, 0xe1, 0x78, 0xc1, 0x98, 0xe0, 0xdb, 0x50, 0x4d, 0xfb, 0x2e, 0x17, - 0x64, 0x44, 0x8f, 0xe7, 0xbf, 0x7f, 0x25, 0x05, 0xd8, 0xaa, 0x8f, 0xb7, 0x01, 0x12, 0xa4, 0xeb, - 0x93, 0xe0, 0x6f, 0xa6, 0x29, 0xfd, 0xea, 0x1b, 0x9a, 0xfe, 0x12, 0x39, 0xa5, 0x84, 0xfb, 0x80, - 0x04, 0xd6, 0xd6, 0x87, 0x69, 0x03, 0x9d, 0x4d, 0x1b, 0xe8, 0xf3, 0xb4, 0x81, 0xbe, 0x4d, 0x1b, - 0x08, 0x9a, 0x94, 0x25, 0x79, 0xb8, 0x60, 0xc7, 0x27, 0xf3, 0xd1, 0xac, 0xe5, 0xad, 0xcc, 0x0a, - 0x8b, 0x98, 0x8d, 0xfa, 0x8b, 0xea, 0xbc, 0xcd, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x44, 0xb7, - 0xc9, 0xd8, 0x64, 0x05, 0x00, 0x00, -} - -func (this *Pipe) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Pipe) - if !ok { - that2, ok := that.(Pipe) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Path != that1.Path { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *SocketAddress) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SocketAddress) - if !ok { - that2, ok := that.(SocketAddress) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Protocol != that1.Protocol { - return false - } - if this.Address != that1.Address { - return false - } - if that1.PortSpecifier == nil { - if this.PortSpecifier != nil { - return false - } - } else if this.PortSpecifier == nil { - return false - } else if !this.PortSpecifier.Equal(that1.PortSpecifier) { - return false - } - if this.ResolverName != that1.ResolverName { - return false - } - if this.Ipv4Compat != that1.Ipv4Compat { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *SocketAddress_PortValue) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SocketAddress_PortValue) - if !ok { - that2, ok := that.(SocketAddress_PortValue) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.PortValue != that1.PortValue { - return false - } - return true -} -func (this *SocketAddress_NamedPort) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SocketAddress_NamedPort) - if !ok { - that2, ok := that.(SocketAddress_NamedPort) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.NamedPort != that1.NamedPort { - return false - } - return true -} -func (this *TcpKeepalive) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TcpKeepalive) - if !ok { - that2, ok := that.(TcpKeepalive) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.KeepaliveProbes.Equal(that1.KeepaliveProbes) { - return false - } - if !this.KeepaliveTime.Equal(that1.KeepaliveTime) { - return false - } - if !this.KeepaliveInterval.Equal(that1.KeepaliveInterval) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *BindConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*BindConfig) - if !ok { - that2, ok := that.(BindConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SourceAddress.Equal(&that1.SourceAddress) { - return false - } - if !this.Freebind.Equal(that1.Freebind) { - return false - } - if len(this.SocketOptions) != len(that1.SocketOptions) { - return false - } - for i := range this.SocketOptions { - if !this.SocketOptions[i].Equal(that1.SocketOptions[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Address) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Address) - if !ok { - that2, ok := that.(Address) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.Address == nil { - if this.Address != nil { - return false - } - } else if this.Address == nil { - return false - } else if !this.Address.Equal(that1.Address) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Address_SocketAddress) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Address_SocketAddress) - if !ok { - that2, ok := that.(Address_SocketAddress) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SocketAddress.Equal(that1.SocketAddress) { - return false - } - return true -} -func (this *Address_Pipe) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Address_Pipe) - if !ok { - that2, ok := that.(Address_Pipe) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Pipe.Equal(that1.Pipe) { - return false - } - return true -} -func (this *CidrRange) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CidrRange) - if !ok { - that2, ok := that.(CidrRange) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.AddressPrefix != that1.AddressPrefix { - return false - } - if !this.PrefixLen.Equal(that1.PrefixLen) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *Pipe) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Pipe) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Path) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAddress(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *SocketAddress) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SocketAddress) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Protocol != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.Protocol)) - } - if len(m.Address) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintAddress(dAtA, i, uint64(len(m.Address))) - i += copy(dAtA[i:], m.Address) - } - if m.PortSpecifier != nil { - nn1, err := m.PortSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if len(m.ResolverName) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintAddress(dAtA, i, uint64(len(m.ResolverName))) - i += copy(dAtA[i:], m.ResolverName) - } - if m.Ipv4Compat { - dAtA[i] = 0x30 - i++ - if m.Ipv4Compat { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *SocketAddress_PortValue) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x18 - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.PortValue)) - return i, nil -} -func (m *SocketAddress_NamedPort) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x22 - i++ - i = encodeVarintAddress(dAtA, i, uint64(len(m.NamedPort))) - i += copy(dAtA[i:], m.NamedPort) - return i, nil -} -func (m *TcpKeepalive) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpKeepalive) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.KeepaliveProbes != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.KeepaliveProbes.Size())) - n2, err := m.KeepaliveProbes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.KeepaliveTime != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.KeepaliveTime.Size())) - n3, err := m.KeepaliveTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.KeepaliveInterval != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.KeepaliveInterval.Size())) - n4, err := m.KeepaliveInterval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *BindConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BindConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.SourceAddress.Size())) - n5, err := m.SourceAddress.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if m.Freebind != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.Freebind.Size())) - n6, err := m.Freebind.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if len(m.SocketOptions) > 0 { - for _, msg := range m.SocketOptions { - dAtA[i] = 0x1a - i++ - i = encodeVarintAddress(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Address) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Address) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Address != nil { - nn7, err := m.Address.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn7 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Address_SocketAddress) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.SocketAddress != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.SocketAddress.Size())) - n8, err := m.SocketAddress.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *Address_Pipe) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Pipe != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.Pipe.Size())) - n9, err := m.Pipe.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} -func (m *CidrRange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CidrRange) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.AddressPrefix) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAddress(dAtA, i, uint64(len(m.AddressPrefix))) - i += copy(dAtA[i:], m.AddressPrefix) - } - if m.PrefixLen != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAddress(dAtA, i, uint64(m.PrefixLen.Size())) - n10, err := m.PrefixLen.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintAddress(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Pipe) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Path) - if l > 0 { - n += 1 + l + sovAddress(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *SocketAddress) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Protocol != 0 { - n += 1 + sovAddress(uint64(m.Protocol)) - } - l = len(m.Address) - if l > 0 { - n += 1 + l + sovAddress(uint64(l)) - } - if m.PortSpecifier != nil { - n += m.PortSpecifier.Size() - } - l = len(m.ResolverName) - if l > 0 { - n += 1 + l + sovAddress(uint64(l)) - } - if m.Ipv4Compat { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *SocketAddress_PortValue) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovAddress(uint64(m.PortValue)) - return n -} -func (m *SocketAddress_NamedPort) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.NamedPort) - n += 1 + l + sovAddress(uint64(l)) - return n -} -func (m *TcpKeepalive) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.KeepaliveProbes != nil { - l = m.KeepaliveProbes.Size() - n += 1 + l + sovAddress(uint64(l)) - } - if m.KeepaliveTime != nil { - l = m.KeepaliveTime.Size() - n += 1 + l + sovAddress(uint64(l)) - } - if m.KeepaliveInterval != nil { - l = m.KeepaliveInterval.Size() - n += 1 + l + sovAddress(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *BindConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.SourceAddress.Size() - n += 1 + l + sovAddress(uint64(l)) - if m.Freebind != nil { - l = m.Freebind.Size() - n += 1 + l + sovAddress(uint64(l)) - } - if len(m.SocketOptions) > 0 { - for _, e := range m.SocketOptions { - l = e.Size() - n += 1 + l + sovAddress(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Address) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Address != nil { - n += m.Address.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Address_SocketAddress) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SocketAddress != nil { - l = m.SocketAddress.Size() - n += 1 + l + sovAddress(uint64(l)) - } - return n -} -func (m *Address_Pipe) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pipe != nil { - l = m.Pipe.Size() - n += 1 + l + sovAddress(uint64(l)) - } - return n -} -func (m *CidrRange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.AddressPrefix) - if l > 0 { - n += 1 + l + sovAddress(uint64(l)) - } - if m.PrefixLen != nil { - l = m.PrefixLen.Size() - n += 1 + l + sovAddress(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovAddress(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozAddress(x uint64) (n int) { - return sovAddress(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Pipe) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Pipe: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Pipe: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Path = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAddress(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + // 733 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0xcd, 0xc4, 0x69, 0x7e, 0xa6, 0x4d, 0xbe, 0x74, 0xf4, 0x41, 0xad, 0x52, 0x48, 0x08, 0x42, + 0x0a, 0x95, 0xb0, 0xa5, 0x14, 0xb1, 0xaf, 0xc3, 0x4f, 0xab, 0x22, 0x6a, 0x4c, 0xcb, 0xd6, 0x9a, + 0xd8, 0x93, 0x30, 0xaa, 0xe3, 0x19, 0x8d, 0x27, 0xa6, 0xdd, 0x55, 0x5d, 0xb2, 0x61, 0xc1, 0x86, + 0x67, 0xe1, 0x09, 0x90, 0x58, 0xf1, 0x04, 0xac, 0xd9, 0xb2, 0x42, 0x5d, 0x50, 0xe4, 0x71, 0x26, + 0x2d, 0x04, 0x54, 0xd8, 0x65, 0xee, 0xb9, 0xe7, 0xe4, 0xdc, 0x3b, 0x67, 0x0c, 0x5b, 0x24, 0x4e, + 0xd9, 0x91, 0x8d, 0x39, 0xb5, 0xd3, 0x9e, 0x1d, 0x30, 0x41, 0x6c, 0x1c, 0x86, 0x82, 0x24, 0x89, + 0xc5, 0x05, 0x93, 0x0c, 0x2d, 0xab, 0x06, 0x0b, 0x73, 0x6a, 0xa5, 0x3d, 0x2b, 0x6b, 0x58, 0xbd, + 0x3d, 0xcf, 0x49, 0x58, 0x70, 0x40, 0xa4, 0xcf, 0xb8, 0xa4, 0x2c, 0xce, 0x99, 0xab, 0x37, 0x46, + 0x8c, 0x8d, 0x22, 0x62, 0xab, 0xd3, 0x60, 0x32, 0xb4, 0x5f, 0x09, 0xcc, 0x39, 0x11, 0x89, 0xc6, + 0x27, 0x21, 0xc7, 0x36, 0x8e, 0x63, 0x26, 0x71, 0x46, 0x4b, 0xec, 0x31, 0x1d, 0x09, 0x2c, 0xc9, + 0x14, 0xbf, 0x3e, 0x87, 0x27, 0x12, 0xcb, 0x89, 0xa6, 0xaf, 0xa4, 0x38, 0xa2, 0x21, 0x96, 0xc4, + 0xd6, 0x3f, 0x72, 0xa0, 0xb3, 0x09, 0x4b, 0x2e, 0xe5, 0x04, 0x5d, 0x83, 0x25, 0x8e, 0xe5, 0x4b, + 0x13, 0xb4, 0x41, 0xb7, 0xe6, 0x54, 0x4e, 0x9d, 0x92, 0x28, 0xb6, 0x81, 0xa7, 0x8a, 0x68, 0x0d, + 0x96, 0xc6, 0x2c, 0x24, 0x66, 0xb1, 0x0d, 0xba, 0x75, 0xa7, 0x7a, 0xea, 0x2c, 0xac, 0x1b, 0xe6, + 0x99, 0xe1, 0xa9, 0x6a, 0xe7, 0x63, 0x11, 0xd6, 0x9f, 0xab, 0x91, 0x36, 0xf3, 0x65, 0xa0, 0x5d, + 0x58, 0x55, 0xea, 0x01, 0x8b, 0x94, 0x60, 0xa3, 0x77, 0xc7, 0x9a, 0xdb, 0x8c, 0xf5, 0x13, 0xc7, + 0x72, 0xa7, 0x04, 0x25, 0x7f, 0x02, 0x8a, 0x4d, 0xe0, 0xcd, 0x44, 0xd0, 0x4d, 0x58, 0x99, 0x2e, + 0x5a, 0x79, 0xb8, 0x60, 0x50, 0xd7, 0xd1, 0x3a, 0x84, 0x9c, 0x09, 0xe9, 0xa7, 0x38, 0x9a, 0x10, + 0xd3, 0x50, 0x4e, 0x6b, 0xa7, 0x4e, 0x79, 0xbd, 0x64, 0x9e, 0x9d, 0x19, 0x5b, 0x05, 0xaf, 0x96, + 0xc1, 0x2f, 0x32, 0x14, 0xb5, 0x20, 0x8c, 0xf1, 0x98, 0x84, 0x7e, 0x56, 0x32, 0x4b, 0x99, 0x62, + 0xd6, 0xa0, 0x6a, 0x2e, 0x13, 0x12, 0xdd, 0x82, 0x75, 0x41, 0x12, 0x16, 0xa5, 0x44, 0xf8, 0x59, + 0xd5, 0x5c, 0xc8, 0x7a, 0xbc, 0x25, 0x5d, 0x7c, 0x8a, 0xc7, 0x99, 0xca, 0x22, 0xe5, 0xe9, 0x3d, + 0x3f, 0x60, 0x63, 0x8e, 0xa5, 0x59, 0x6e, 0x83, 0x6e, 0xd5, 0x83, 0x59, 0xa9, 0xaf, 0x2a, 0x9d, + 0x35, 0x58, 0xd5, 0x53, 0xa1, 0x0a, 0x34, 0xf6, 0xfa, 0x6e, 0xb3, 0x90, 0xfd, 0xd8, 0x7f, 0xe0, + 0x36, 0x81, 0x73, 0x05, 0x36, 0x94, 0xe1, 0x84, 0x93, 0x80, 0x0e, 0x29, 0x11, 0xc8, 0xf8, 0xe6, + 0x80, 0xce, 0x17, 0x00, 0x97, 0xf6, 0x02, 0xbe, 0x43, 0x08, 0xc7, 0x11, 0x4d, 0x09, 0x7a, 0x0c, + 0x9b, 0x07, 0xfa, 0xe0, 0x73, 0xc1, 0x06, 0x24, 0x51, 0x4b, 0x5d, 0xec, 0xad, 0x59, 0x79, 0x68, + 0x2c, 0x1d, 0x1a, 0x6b, 0x7f, 0x3b, 0x96, 0x1b, 0x3d, 0x35, 0xa4, 0xf7, 0xdf, 0x8c, 0xe5, 0x2a, + 0x12, 0xea, 0xc3, 0xc6, 0xb9, 0x90, 0xa4, 0xe3, 0xfc, 0x3e, 0x2f, 0x93, 0xa9, 0xcf, 0x38, 0x7b, + 0x74, 0x4c, 0xd0, 0x0e, 0x44, 0xe7, 0x22, 0x34, 0x96, 0x44, 0xa4, 0x38, 0x52, 0xeb, 0xbe, 0x4c, + 0x68, 0x79, 0xc6, 0xdb, 0x9e, 0xd2, 0x3a, 0x9f, 0x01, 0x84, 0x0e, 0x8d, 0xc3, 0x3e, 0x8b, 0x87, + 0x74, 0x84, 0x9e, 0xc1, 0x46, 0xc2, 0x26, 0x22, 0x20, 0xbe, 0xbe, 0xec, 0x7c, 0xce, 0xf6, 0x65, + 0xe1, 0x51, 0x99, 0x79, 0xad, 0x32, 0x53, 0xcf, 0x15, 0x74, 0x12, 0xef, 0xc3, 0xea, 0x50, 0x10, + 0x32, 0xa0, 0x71, 0x38, 0x9d, 0x76, 0x75, 0xce, 0xa4, 0xc3, 0x58, 0x94, 0x5b, 0x9c, 0xf5, 0xa2, + 0x47, 0x99, 0x95, 0x0b, 0xaf, 0x34, 0x31, 0x8d, 0xb6, 0xd1, 0x5d, 0xec, 0xb5, 0xfe, 0x68, 0x65, + 0x57, 0xf5, 0x65, 0xff, 0x7f, 0x7e, 0x4a, 0x3a, 0x6f, 0x01, 0xac, 0x68, 0x2f, 0xdb, 0x33, 0xcd, + 0x7f, 0x1c, 0x6f, 0xab, 0xa0, 0x65, 0xb5, 0xd4, 0x5d, 0x58, 0xe2, 0x94, 0xeb, 0x0b, 0x5c, 0xf9, + 0x8d, 0x40, 0xf6, 0xa8, 0xb7, 0x0a, 0x9e, 0x6a, 0x73, 0x1a, 0xb3, 0xe7, 0x93, 0x67, 0xec, 0x04, + 0xc0, 0x5a, 0x9f, 0x86, 0xc2, 0xc3, 0xf1, 0x88, 0x20, 0x0b, 0x36, 0xa6, 0xa8, 0xcf, 0x05, 0x19, + 0xd2, 0xc3, 0x5f, 0x3f, 0x02, 0xf5, 0x29, 0xec, 0x2a, 0x14, 0x3d, 0x84, 0x30, 0xef, 0xf3, 0x23, + 0x12, 0xff, 0x4d, 0x86, 0xf4, 0x17, 0xe3, 0x18, 0x78, 0xb5, 0x9c, 0xf9, 0x84, 0xc4, 0xce, 0xfe, + 0xd7, 0x77, 0xdf, 0xdf, 0x2c, 0x5c, 0x45, 0xff, 0xe7, 0xe6, 0x03, 0x95, 0x81, 0xdc, 0x7c, 0xba, + 0xf1, 0xfe, 0xf8, 0xc3, 0xa7, 0x72, 0xb1, 0x09, 0x60, 0x8b, 0xb2, 0x7c, 0x3a, 0x2e, 0xd8, 0xe1, + 0xd1, 0xfc, 0xa0, 0xce, 0xd2, 0xa6, 0x36, 0xc7, 0x24, 0x73, 0xc1, 0xa0, 0xac, 0x1c, 0x6c, 0xfc, + 0x08, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x71, 0xe6, 0x7a, 0xac, 0x05, 0x00, 0x00, } -func (m *SocketAddress) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SocketAddress: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SocketAddress: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) - } - m.Protocol = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Protocol |= SocketAddress_Protocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PortValue", wireType) - } - var v uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.PortSpecifier = &SocketAddress_PortValue{v} - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamedPort", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortSpecifier = &SocketAddress_NamedPort{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResolverName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResolverName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Ipv4Compat", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Ipv4Compat = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipAddress(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TcpKeepalive) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TcpKeepalive: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TcpKeepalive: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KeepaliveProbes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.KeepaliveProbes == nil { - m.KeepaliveProbes = &types.UInt32Value{} - } - if err := m.KeepaliveProbes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KeepaliveTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.KeepaliveTime == nil { - m.KeepaliveTime = &types.UInt32Value{} - } - if err := m.KeepaliveTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KeepaliveInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.KeepaliveInterval == nil { - m.KeepaliveInterval = &types.UInt32Value{} - } - if err := m.KeepaliveInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAddress(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BindConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: BindConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BindConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceAddress", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SourceAddress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Freebind", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Freebind == nil { - m.Freebind = &types.BoolValue{} - } - if err := m.Freebind.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SocketOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SocketOptions = append(m.SocketOptions, &SocketOption{}) - if err := m.SocketOptions[len(m.SocketOptions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAddress(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Address) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Address: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Address: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SocketAddress", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &SocketAddress{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Address = &Address_SocketAddress{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pipe", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Pipe{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Address = &Address_Pipe{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAddress(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CidrRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CidrRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CidrRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AddressPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AddressPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrefixLen", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAddress - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAddress - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAddress - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PrefixLen == nil { - m.PrefixLen = &types.UInt32Value{} - } - if err := m.PrefixLen.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAddress(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAddress - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipAddress(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAddress - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAddress - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAddress - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthAddress - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthAddress - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAddress - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipAddress(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthAddress - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthAddress = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowAddress = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/address.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/address.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _address_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on Pipe with the rules defined in the proto // definition for this message. If any rules are violated, an error is returned. func (m *Pipe) Validate() error { @@ -47,6 +50,13 @@ } } + if m.GetMode() > 511 { + return PipeValidationError{ + field: "Mode", + reason: "value must be less than or equal to 511", + } + } + return nil } @@ -217,47 +227,32 @@ return nil } - { - tmp := m.GetKeepaliveProbes() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpKeepaliveValidationError{ - field: "KeepaliveProbes", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetKeepaliveProbes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpKeepaliveValidationError{ + field: "KeepaliveProbes", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetKeepaliveTime() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpKeepaliveValidationError{ - field: "KeepaliveTime", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetKeepaliveTime()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpKeepaliveValidationError{ + field: "KeepaliveTime", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetKeepaliveInterval() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpKeepaliveValidationError{ - field: "KeepaliveInterval", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetKeepaliveInterval()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpKeepaliveValidationError{ + field: "KeepaliveInterval", + reason: "embedded message failed validation", + cause: err, } } } @@ -326,32 +321,29 @@ return nil } - { - tmp := m.GetSourceAddress() - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { + if m.GetSourceAddress() == nil { + return BindConfigValidationError{ + field: "SourceAddress", + reason: "value is required", + } + } - if err := v.Validate(); err != nil { - return BindConfigValidationError{ - field: "SourceAddress", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSourceAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return BindConfigValidationError{ + field: "SourceAddress", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetFreebind() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return BindConfigValidationError{ - field: "Freebind", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetFreebind()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return BindConfigValidationError{ + field: "Freebind", + reason: "embedded message failed validation", + cause: err, } } } @@ -359,17 +351,12 @@ for idx, item := range m.GetSocketOptions() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return BindConfigValidationError{ - field: fmt.Sprintf("SocketOptions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return BindConfigValidationError{ + field: fmt.Sprintf("SocketOptions[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -444,34 +431,24 @@ case *Address_SocketAddress: - { - tmp := m.GetSocketAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AddressValidationError{ - field: "SocketAddress", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSocketAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddressValidationError{ + field: "SocketAddress", + reason: "embedded message failed validation", + cause: err, } } } case *Address_Pipe: - { - tmp := m.GetPipe() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AddressValidationError{ - field: "Pipe", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetPipe()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AddressValidationError{ + field: "Pipe", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/core/backoff.proto + +package envoy_api_v2_core + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type BackoffStrategy struct { + BaseInterval *duration.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3" json:"base_interval,omitempty"` + MaxInterval *duration.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BackoffStrategy) Reset() { *m = BackoffStrategy{} } +func (m *BackoffStrategy) String() string { return proto.CompactTextString(m) } +func (*BackoffStrategy) ProtoMessage() {} +func (*BackoffStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_743c92d7b5268904, []int{0} +} + +func (m *BackoffStrategy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BackoffStrategy.Unmarshal(m, b) +} +func (m *BackoffStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BackoffStrategy.Marshal(b, m, deterministic) +} +func (m *BackoffStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_BackoffStrategy.Merge(m, src) +} +func (m *BackoffStrategy) XXX_Size() int { + return xxx_messageInfo_BackoffStrategy.Size(m) +} +func (m *BackoffStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_BackoffStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_BackoffStrategy proto.InternalMessageInfo + +func (m *BackoffStrategy) GetBaseInterval() *duration.Duration { + if m != nil { + return m.BaseInterval + } + return nil +} + +func (m *BackoffStrategy) GetMaxInterval() *duration.Duration { + if m != nil { + return m.MaxInterval + } + return nil +} + +func init() { + proto.RegisterType((*BackoffStrategy)(nil), "envoy.api.v2.core.BackoffStrategy") +} + +func init() { proto.RegisterFile("envoy/api/v2/core/backoff.proto", fileDescriptor_743c92d7b5268904) } + +var fileDescriptor_743c92d7b5268904 = []byte{ + // 310 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0x4f, 0xce, 0x2f, 0x4a, 0xd5, 0x4f, 0x4a, + 0x4c, 0xce, 0xce, 0x4f, 0x4b, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x04, 0x2b, 0xd0, + 0x4b, 0x2c, 0xc8, 0xd4, 0x2b, 0x33, 0xd2, 0x03, 0x29, 0x90, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, 0xcf, + 0x49, 0xd5, 0x07, 0x2b, 0x48, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a, 0x2c, 0xc9, 0xcc, 0xcf, + 0x83, 0x68, 0x91, 0x92, 0x2b, 0x4d, 0x29, 0x48, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x01, 0x0b, + 0x17, 0xeb, 0xe7, 0x66, 0xa6, 0x17, 0x25, 0x96, 0xa4, 0x42, 0xe5, 0x65, 0x31, 0xe4, 0x8b, 0x4b, + 0x12, 0x4b, 0x4a, 0x8b, 0xa1, 0xd2, 0xe2, 0x65, 0x89, 0x39, 0x99, 0x29, 0x89, 0x25, 0xa9, 0xfa, + 0x30, 0x06, 0x44, 0x42, 0x69, 0x25, 0x23, 0x17, 0xbf, 0x13, 0xc4, 0x71, 0xc1, 0x25, 0x20, 0xf3, + 0xd2, 0x2b, 0x85, 0xfc, 0xb8, 0x78, 0x93, 0x12, 0x8b, 0x53, 0xe3, 0x33, 0xf3, 0x4a, 0x52, 0x8b, + 0xca, 0x12, 0x73, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x24, 0xf5, 0x20, 0x6e, 0xd4, 0x83, + 0xb9, 0x51, 0xcf, 0x05, 0xea, 0x46, 0x27, 0xbe, 0x5f, 0x4e, 0xdc, 0xab, 0x18, 0x39, 0x38, 0x18, + 0x8d, 0x58, 0x04, 0x0e, 0xb4, 0xd8, 0x06, 0xf1, 0x80, 0xf4, 0x7b, 0x42, 0xb5, 0x0b, 0xb9, 0x71, + 0xf1, 0xe4, 0x26, 0x56, 0x20, 0x8c, 0x63, 0x22, 0x64, 0x1c, 0xc7, 0x2f, 0x27, 0xd6, 0x55, 0x8c, + 0x4c, 0x5a, 0x0c, 0x41, 0xdc, 0xb9, 0x89, 0x15, 0x30, 0x73, 0x9c, 0x42, 0x3f, 0xcd, 0xf8, 0xd7, + 0xcf, 0x2a, 0x26, 0x24, 0x02, 0x09, 0xbe, 0xe4, 0xfc, 0xbc, 0xb4, 0xcc, 0x74, 0x70, 0xf0, 0xe9, + 0x95, 0x19, 0xef, 0x6a, 0x38, 0x71, 0x91, 0x8d, 0x49, 0x80, 0x91, 0x4b, 0x3e, 0x33, 0x5f, 0x0f, + 0xac, 0xa0, 0xa0, 0x28, 0xbf, 0xa2, 0x52, 0x0f, 0x23, 0xa8, 0x9d, 0x78, 0xa0, 0xfe, 0x0d, 0x00, + 0xd9, 0x1b, 0xc0, 0x98, 0xc4, 0x06, 0x76, 0x80, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x2d, + 0xa4, 0xc4, 0xb7, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/backoff.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/core/backoff.proto + +package envoy_api_v2_core + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _backoff_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on BackoffStrategy with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *BackoffStrategy) Validate() error { + if m == nil { + return nil + } + + if m.GetBaseInterval() == nil { + return BackoffStrategyValidationError{ + field: "BaseInterval", + reason: "value is required", + } + } + + if d := m.GetBaseInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return BackoffStrategyValidationError{ + field: "BaseInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gte := time.Duration(0*time.Second + 1000000*time.Nanosecond) + + if dur < gte { + return BackoffStrategyValidationError{ + field: "BaseInterval", + reason: "value must be greater than or equal to 1ms", + } + } + + } + + if d := m.GetMaxInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return BackoffStrategyValidationError{ + field: "MaxInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return BackoffStrategyValidationError{ + field: "MaxInterval", + reason: "value must be greater than 0s", + } + } + + } + + return nil +} + +// BackoffStrategyValidationError is the validation error returned by +// BackoffStrategy.Validate if the designated constraints aren't met. +type BackoffStrategyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e BackoffStrategyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e BackoffStrategyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e BackoffStrategyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e BackoffStrategyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e BackoffStrategyValidationError) ErrorName() string { return "BackoffStrategyValidationError" } + +// Error satisfies the builtin error interface +func (e BackoffStrategyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sBackoffStrategy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = BackoffStrategyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = BackoffStrategyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,19 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/base.proto -package core +package envoy_api_v2_core import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + _ "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -27,15 +25,8 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Envoy supports :ref:`upstream priority routing -// ` both at the route and the virtual -// cluster level. The current priority implementation uses different connection -// pool and circuit breaking settings for each priority level. This means that -// even for HTTP/2 requests, two physical connections will be used to an -// upstream host. In the future Envoy will likely support true HTTP/2 priority -// over a single upstream connection. type RoutingPriority int32 const ( @@ -61,19 +52,19 @@ return fileDescriptor_a7738c0f9e1bfff4, []int{0} } -// HTTP request method. type RequestMethod int32 const ( - METHOD_UNSPECIFIED RequestMethod = 0 - GET RequestMethod = 1 - HEAD RequestMethod = 2 - POST RequestMethod = 3 - PUT RequestMethod = 4 - DELETE RequestMethod = 5 - CONNECT RequestMethod = 6 - OPTIONS RequestMethod = 7 - TRACE RequestMethod = 8 + RequestMethod_METHOD_UNSPECIFIED RequestMethod = 0 + RequestMethod_GET RequestMethod = 1 + RequestMethod_HEAD RequestMethod = 2 + RequestMethod_POST RequestMethod = 3 + RequestMethod_PUT RequestMethod = 4 + RequestMethod_DELETE RequestMethod = 5 + RequestMethod_CONNECT RequestMethod = 6 + RequestMethod_OPTIONS RequestMethod = 7 + RequestMethod_TRACE RequestMethod = 8 + RequestMethod_PATCH RequestMethod = 9 ) var RequestMethod_name = map[int32]string{ @@ -86,6 +77,7 @@ 6: "CONNECT", 7: "OPTIONS", 8: "TRACE", + 9: "PATCH", } var RequestMethod_value = map[string]int32{ @@ -98,6 +90,7 @@ "CONNECT": 6, "OPTIONS": 7, "TRACE": 8, + "PATCH": 9, } func (x RequestMethod) String() string { @@ -108,53 +101,37 @@ return fileDescriptor_a7738c0f9e1bfff4, []int{1} } -type SocketOption_SocketState int32 +type TrafficDirection int32 const ( - // Socket options are applied after socket creation but before binding the socket to a port - STATE_PREBIND SocketOption_SocketState = 0 - // Socket options are applied after binding the socket to a port but before calling listen() - STATE_BOUND SocketOption_SocketState = 1 - // Socket options are applied after calling listen() - STATE_LISTENING SocketOption_SocketState = 2 + TrafficDirection_UNSPECIFIED TrafficDirection = 0 + TrafficDirection_INBOUND TrafficDirection = 1 + TrafficDirection_OUTBOUND TrafficDirection = 2 ) -var SocketOption_SocketState_name = map[int32]string{ - 0: "STATE_PREBIND", - 1: "STATE_BOUND", - 2: "STATE_LISTENING", +var TrafficDirection_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "INBOUND", + 2: "OUTBOUND", } -var SocketOption_SocketState_value = map[string]int32{ - "STATE_PREBIND": 0, - "STATE_BOUND": 1, - "STATE_LISTENING": 2, +var TrafficDirection_value = map[string]int32{ + "UNSPECIFIED": 0, + "INBOUND": 1, + "OUTBOUND": 2, } -func (x SocketOption_SocketState) String() string { - return proto.EnumName(SocketOption_SocketState_name, int32(x)) +func (x TrafficDirection) String() string { + return proto.EnumName(TrafficDirection_name, int32(x)) } -func (SocketOption_SocketState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{9, 0} +func (TrafficDirection) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{2} } -// Identifies location of where either Envoy runs or where upstream hosts run. type Locality struct { - // Region this :ref:`zone ` belongs to. - Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` - // Defines the local service zone where Envoy is running. Though optional, it - // should be set if discovery service routing is used and the discovery - // service exposes :ref:`zone data `, - // either in this message or via :option:`--service-zone`. The meaning of zone - // is context dependent, e.g. `Availability Zone (AZ) - // `_ - // on AWS, `Zone `_ on - // GCP, etc. - Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` - // When used for locality of upstream hosts, this field further splits zone - // into smaller chunks of sub-zones so they can be load balanced - // independently. + Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` SubZone string `protobuf:"bytes,3,opt,name=sub_zone,json=subZone,proto3" json:"sub_zone,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -167,22 +144,18 @@ func (*Locality) Descriptor() ([]byte, []int) { return fileDescriptor_a7738c0f9e1bfff4, []int{0} } + func (m *Locality) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Locality.Unmarshal(m, b) } func (m *Locality) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_Locality.Marshal(b, m, deterministic) } func (m *Locality) XXX_Merge(src proto.Message) { xxx_messageInfo_Locality.Merge(m, src) } func (m *Locality) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Locality.Size(m) } func (m *Locality) XXX_DiscardUnknown() { xxx_messageInfo_Locality.DiscardUnknown(m) @@ -211,65 +184,161 @@ return "" } -// Identifies a specific Envoy instance. The node identifier is presented to the -// management server, which may use this identifier to distinguish per Envoy -// configuration for serving. +type BuildVersion struct { + Version *_type.SemanticVersion `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Metadata *_struct.Struct `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BuildVersion) Reset() { *m = BuildVersion{} } +func (m *BuildVersion) String() string { return proto.CompactTextString(m) } +func (*BuildVersion) ProtoMessage() {} +func (*BuildVersion) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{1} +} + +func (m *BuildVersion) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BuildVersion.Unmarshal(m, b) +} +func (m *BuildVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BuildVersion.Marshal(b, m, deterministic) +} +func (m *BuildVersion) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildVersion.Merge(m, src) +} +func (m *BuildVersion) XXX_Size() int { + return xxx_messageInfo_BuildVersion.Size(m) +} +func (m *BuildVersion) XXX_DiscardUnknown() { + xxx_messageInfo_BuildVersion.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildVersion proto.InternalMessageInfo + +func (m *BuildVersion) GetVersion() *_type.SemanticVersion { + if m != nil { + return m.Version + } + return nil +} + +func (m *BuildVersion) GetMetadata() *_struct.Struct { + if m != nil { + return m.Metadata + } + return nil +} + +type Extension struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Category string `protobuf:"bytes,2,opt,name=category,proto3" json:"category,omitempty"` + TypeDescriptor string `protobuf:"bytes,3,opt,name=type_descriptor,json=typeDescriptor,proto3" json:"type_descriptor,omitempty"` + Version *BuildVersion `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + Disabled bool `protobuf:"varint,5,opt,name=disabled,proto3" json:"disabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Extension) Reset() { *m = Extension{} } +func (m *Extension) String() string { return proto.CompactTextString(m) } +func (*Extension) ProtoMessage() {} +func (*Extension) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{2} +} + +func (m *Extension) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Extension.Unmarshal(m, b) +} +func (m *Extension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Extension.Marshal(b, m, deterministic) +} +func (m *Extension) XXX_Merge(src proto.Message) { + xxx_messageInfo_Extension.Merge(m, src) +} +func (m *Extension) XXX_Size() int { + return xxx_messageInfo_Extension.Size(m) +} +func (m *Extension) XXX_DiscardUnknown() { + xxx_messageInfo_Extension.DiscardUnknown(m) +} + +var xxx_messageInfo_Extension proto.InternalMessageInfo + +func (m *Extension) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Extension) GetCategory() string { + if m != nil { + return m.Category + } + return "" +} + +func (m *Extension) GetTypeDescriptor() string { + if m != nil { + return m.TypeDescriptor + } + return "" +} + +func (m *Extension) GetVersion() *BuildVersion { + if m != nil { + return m.Version + } + return nil +} + +func (m *Extension) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + type Node struct { - // An opaque node identifier for the Envoy node. This also provides the local - // service node name. It should be set if any of the following features are - // used: :ref:`statsd `, :ref:`CDS - // `, and :ref:`HTTP tracing - // `, either in this message or via - // :option:`--service-node`. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Defines the local service cluster name where Envoy is running. Though - // optional, it should be set if any of the following features are used: - // :ref:`statsd `, :ref:`health check cluster - // verification `, - // :ref:`runtime override directory `, - // :ref:`user agent addition - // `, - // :ref:`HTTP global rate limiting `, - // :ref:`CDS `, and :ref:`HTTP tracing - // `, either in this message or via - // :option:`--service-cluster`. - Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"` - // Opaque metadata extending the node identifier. Envoy will pass this - // directly to the management server. - Metadata *types.Struct `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` - // Locality specifying where the Envoy instance is running. - Locality *Locality `protobuf:"bytes,4,opt,name=locality,proto3" json:"locality,omitempty"` - // This is motivated by informing a management server during canary which - // version of Envoy is being tested in a heterogeneous fleet. This will be set - // by Envoy in management server RPCs. - BuildVersion string `protobuf:"bytes,5,opt,name=build_version,json=buildVersion,proto3" json:"build_version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"` + Metadata *_struct.Struct `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + Locality *Locality `protobuf:"bytes,4,opt,name=locality,proto3" json:"locality,omitempty"` + BuildVersion string `protobuf:"bytes,5,opt,name=build_version,json=buildVersion,proto3" json:"build_version,omitempty"` // Deprecated: Do not use. + UserAgentName string `protobuf:"bytes,6,opt,name=user_agent_name,json=userAgentName,proto3" json:"user_agent_name,omitempty"` + // Types that are valid to be assigned to UserAgentVersionType: + // *Node_UserAgentVersion + // *Node_UserAgentBuildVersion + UserAgentVersionType isNode_UserAgentVersionType `protobuf_oneof:"user_agent_version_type"` + Extensions []*Extension `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty"` + ClientFeatures []string `protobuf:"bytes,10,rep,name=client_features,json=clientFeatures,proto3" json:"client_features,omitempty"` + ListeningAddresses []*Address `protobuf:"bytes,11,rep,name=listening_addresses,json=listeningAddresses,proto3" json:"listening_addresses,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Node) Reset() { *m = Node{} } func (m *Node) String() string { return proto.CompactTextString(m) } func (*Node) ProtoMessage() {} func (*Node) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{1} + return fileDescriptor_a7738c0f9e1bfff4, []int{3} } + func (m *Node) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Node.Unmarshal(m, b) } func (m *Node) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_Node.Marshal(b, m, deterministic) } func (m *Node) XXX_Merge(src proto.Message) { xxx_messageInfo_Node.Merge(m, src) } func (m *Node) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Node.Size(m) } func (m *Node) XXX_DiscardUnknown() { xxx_messageInfo_Node.DiscardUnknown(m) @@ -291,7 +360,7 @@ return "" } -func (m *Node) GetMetadata() *types.Struct { +func (m *Node) GetMetadata() *_struct.Struct { if m != nil { return m.Metadata } @@ -305,6 +374,7 @@ return nil } +// Deprecated: Do not use. func (m *Node) GetBuildVersion() string { if m != nil { return m.BuildVersion @@ -312,58 +382,104 @@ return "" } -// Metadata provides additional inputs to filters based on matched listeners, -// filter chains, routes and endpoints. It is structured as a map, usually from -// filter name (in reverse DNS format) to metadata specific to the filter. Metadata -// key-values for a filter are merged as connection and request handling occurs, -// with later values for the same key overriding earlier values. -// -// An example use of metadata is providing additional values to -// http_connection_manager in the envoy.http_connection_manager.access_log -// namespace. -// -// Another example use of metadata is to per service config info in cluster metadata, which may get -// consumed by multiple filters. -// -// For load balancing, Metadata provides a means to subset cluster endpoints. -// Endpoints have a Metadata object associated and routes contain a Metadata -// object to match against. There are some well defined metadata used today for -// this purpose: -// -// * ``{"envoy.lb": {"canary": }}`` This indicates the canary status of an -// endpoint and is also used during header processing -// (x-envoy-upstream-canary) and for stats purposes. +func (m *Node) GetUserAgentName() string { + if m != nil { + return m.UserAgentName + } + return "" +} + +type isNode_UserAgentVersionType interface { + isNode_UserAgentVersionType() +} + +type Node_UserAgentVersion struct { + UserAgentVersion string `protobuf:"bytes,7,opt,name=user_agent_version,json=userAgentVersion,proto3,oneof"` +} + +type Node_UserAgentBuildVersion struct { + UserAgentBuildVersion *BuildVersion `protobuf:"bytes,8,opt,name=user_agent_build_version,json=userAgentBuildVersion,proto3,oneof"` +} + +func (*Node_UserAgentVersion) isNode_UserAgentVersionType() {} + +func (*Node_UserAgentBuildVersion) isNode_UserAgentVersionType() {} + +func (m *Node) GetUserAgentVersionType() isNode_UserAgentVersionType { + if m != nil { + return m.UserAgentVersionType + } + return nil +} + +func (m *Node) GetUserAgentVersion() string { + if x, ok := m.GetUserAgentVersionType().(*Node_UserAgentVersion); ok { + return x.UserAgentVersion + } + return "" +} + +func (m *Node) GetUserAgentBuildVersion() *BuildVersion { + if x, ok := m.GetUserAgentVersionType().(*Node_UserAgentBuildVersion); ok { + return x.UserAgentBuildVersion + } + return nil +} + +func (m *Node) GetExtensions() []*Extension { + if m != nil { + return m.Extensions + } + return nil +} + +func (m *Node) GetClientFeatures() []string { + if m != nil { + return m.ClientFeatures + } + return nil +} + +func (m *Node) GetListeningAddresses() []*Address { + if m != nil { + return m.ListeningAddresses + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Node) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Node_UserAgentVersion)(nil), + (*Node_UserAgentBuildVersion)(nil), + } +} + type Metadata struct { - // Key is the reverse DNS filter name, e.g. com.acme.widget. The envoy.* - // namespace is reserved for Envoy's built-in filters. - FilterMetadata map[string]*types.Struct `protobuf:"bytes,1,rep,name=filter_metadata,json=filterMetadata,proto3" json:"filter_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + FilterMetadata map[string]*_struct.Struct `protobuf:"bytes,1,rep,name=filter_metadata,json=filterMetadata,proto3" json:"filter_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{2} + return fileDescriptor_a7738c0f9e1bfff4, []int{4} } + func (m *Metadata) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Metadata.Unmarshal(m, b) } func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_Metadata.Marshal(b, m, deterministic) } func (m *Metadata) XXX_Merge(src proto.Message) { xxx_messageInfo_Metadata.Merge(m, src) } func (m *Metadata) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Metadata.Size(m) } func (m *Metadata) XXX_DiscardUnknown() { xxx_messageInfo_Metadata.DiscardUnknown(m) @@ -371,18 +487,15 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo -func (m *Metadata) GetFilterMetadata() map[string]*types.Struct { +func (m *Metadata) GetFilterMetadata() map[string]*_struct.Struct { if m != nil { return m.FilterMetadata } return nil } -// Runtime derived uint32 with a default when not specified. type RuntimeUInt32 struct { - // Default value if runtime value is not available. - DefaultValue uint32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` - // Runtime key to get value for comparison. This value is used if defined. + DefaultValue uint32 `protobuf:"varint,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` RuntimeKey string `protobuf:"bytes,3,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -393,24 +506,20 @@ func (m *RuntimeUInt32) String() string { return proto.CompactTextString(m) } func (*RuntimeUInt32) ProtoMessage() {} func (*RuntimeUInt32) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{3} + return fileDescriptor_a7738c0f9e1bfff4, []int{5} } + func (m *RuntimeUInt32) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_RuntimeUInt32.Unmarshal(m, b) } func (m *RuntimeUInt32) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_RuntimeUInt32.Marshal(b, m, deterministic) } func (m *RuntimeUInt32) XXX_Merge(src proto.Message) { xxx_messageInfo_RuntimeUInt32.Merge(m, src) } func (m *RuntimeUInt32) XXX_Size() int { - return m.Size() + return xxx_messageInfo_RuntimeUInt32.Size(m) } func (m *RuntimeUInt32) XXX_DiscardUnknown() { xxx_messageInfo_RuntimeUInt32.DiscardUnknown(m) @@ -432,15 +541,55 @@ return "" } -// Header name/value pair. +type RuntimeFeatureFlag struct { + DefaultValue *wrappers.BoolValue `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RuntimeFeatureFlag) Reset() { *m = RuntimeFeatureFlag{} } +func (m *RuntimeFeatureFlag) String() string { return proto.CompactTextString(m) } +func (*RuntimeFeatureFlag) ProtoMessage() {} +func (*RuntimeFeatureFlag) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{6} +} + +func (m *RuntimeFeatureFlag) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RuntimeFeatureFlag.Unmarshal(m, b) +} +func (m *RuntimeFeatureFlag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RuntimeFeatureFlag.Marshal(b, m, deterministic) +} +func (m *RuntimeFeatureFlag) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeFeatureFlag.Merge(m, src) +} +func (m *RuntimeFeatureFlag) XXX_Size() int { + return xxx_messageInfo_RuntimeFeatureFlag.Size(m) +} +func (m *RuntimeFeatureFlag) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeFeatureFlag.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeFeatureFlag proto.InternalMessageInfo + +func (m *RuntimeFeatureFlag) GetDefaultValue() *wrappers.BoolValue { + if m != nil { + return m.DefaultValue + } + return nil +} + +func (m *RuntimeFeatureFlag) GetRuntimeKey() string { + if m != nil { + return m.RuntimeKey + } + return "" +} + type HeaderValue struct { - // Header name. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // Header value. - // - // The same :ref:`format specifier ` as used for - // :ref:`HTTP access logging ` applies here, however - // unknown header values are replaced with the empty string instead of `-`. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -451,24 +600,20 @@ func (m *HeaderValue) String() string { return proto.CompactTextString(m) } func (*HeaderValue) ProtoMessage() {} func (*HeaderValue) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{4} + return fileDescriptor_a7738c0f9e1bfff4, []int{7} } + func (m *HeaderValue) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HeaderValue.Unmarshal(m, b) } func (m *HeaderValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_HeaderValue.Marshal(b, m, deterministic) } func (m *HeaderValue) XXX_Merge(src proto.Message) { xxx_messageInfo_HeaderValue.Merge(m, src) } func (m *HeaderValue) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HeaderValue.Size(m) } func (m *HeaderValue) XXX_DiscardUnknown() { xxx_messageInfo_HeaderValue.DiscardUnknown(m) @@ -490,40 +635,32 @@ return "" } -// Header name/value pair plus option to control append behavior. type HeaderValueOption struct { - // Header name/value pair that this option applies to. - Header *HeaderValue `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` - // Should the value be appended? If true (default), the value is appended to - // existing values. - Append *types.BoolValue `protobuf:"bytes,2,opt,name=append,proto3" json:"append,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Header *HeaderValue `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + Append *wrappers.BoolValue `protobuf:"bytes,2,opt,name=append,proto3" json:"append,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HeaderValueOption) Reset() { *m = HeaderValueOption{} } func (m *HeaderValueOption) String() string { return proto.CompactTextString(m) } func (*HeaderValueOption) ProtoMessage() {} func (*HeaderValueOption) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{5} + return fileDescriptor_a7738c0f9e1bfff4, []int{8} } + func (m *HeaderValueOption) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HeaderValueOption.Unmarshal(m, b) } func (m *HeaderValueOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_HeaderValueOption.Marshal(b, m, deterministic) } func (m *HeaderValueOption) XXX_Merge(src proto.Message) { xxx_messageInfo_HeaderValueOption.Merge(m, src) } func (m *HeaderValueOption) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HeaderValueOption.Size(m) } func (m *HeaderValueOption) XXX_DiscardUnknown() { xxx_messageInfo_HeaderValueOption.DiscardUnknown(m) @@ -538,14 +675,13 @@ return nil } -func (m *HeaderValueOption) GetAppend() *types.BoolValue { +func (m *HeaderValueOption) GetAppend() *wrappers.BoolValue { if m != nil { return m.Append } return nil } -// Wrapper for a set of headers. type HeaderMap struct { Headers []*HeaderValue `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -557,24 +693,20 @@ func (m *HeaderMap) String() string { return proto.CompactTextString(m) } func (*HeaderMap) ProtoMessage() {} func (*HeaderMap) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{6} + return fileDescriptor_a7738c0f9e1bfff4, []int{9} } + func (m *HeaderMap) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HeaderMap.Unmarshal(m, b) } func (m *HeaderMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_HeaderMap.Marshal(b, m, deterministic) } func (m *HeaderMap) XXX_Merge(src proto.Message) { xxx_messageInfo_HeaderMap.Merge(m, src) } func (m *HeaderMap) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HeaderMap.Size(m) } func (m *HeaderMap) XXX_DiscardUnknown() { xxx_messageInfo_HeaderMap.DiscardUnknown(m) @@ -589,7 +721,6 @@ return nil } -// Data source consisting of either a file or an inline value. type DataSource struct { // Types that are valid to be assigned to Specifier: // *DataSource_Filename @@ -605,24 +736,20 @@ func (m *DataSource) String() string { return proto.CompactTextString(m) } func (*DataSource) ProtoMessage() {} func (*DataSource) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{7} + return fileDescriptor_a7738c0f9e1bfff4, []int{10} } + func (m *DataSource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DataSource.Unmarshal(m, b) } func (m *DataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_DataSource.Marshal(b, m, deterministic) } func (m *DataSource) XXX_Merge(src proto.Message) { xxx_messageInfo_DataSource.Merge(m, src) } func (m *DataSource) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DataSource.Size(m) } func (m *DataSource) XXX_DiscardUnknown() { xxx_messageInfo_DataSource.DiscardUnknown(m) @@ -632,23 +759,24 @@ type isDataSource_Specifier interface { isDataSource_Specifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type DataSource_Filename struct { Filename string `protobuf:"bytes,1,opt,name=filename,proto3,oneof"` } + type DataSource_InlineBytes struct { InlineBytes []byte `protobuf:"bytes,2,opt,name=inline_bytes,json=inlineBytes,proto3,oneof"` } + type DataSource_InlineString struct { InlineString string `protobuf:"bytes,3,opt,name=inline_string,json=inlineString,proto3,oneof"` } -func (*DataSource_Filename) isDataSource_Specifier() {} -func (*DataSource_InlineBytes) isDataSource_Specifier() {} +func (*DataSource_Filename) isDataSource_Specifier() {} + +func (*DataSource_InlineBytes) isDataSource_Specifier() {} + func (*DataSource_InlineString) isDataSource_Specifier() {} func (m *DataSource) GetSpecifier() isDataSource_Specifier { @@ -679,471 +807,312 @@ return "" } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*DataSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _DataSource_OneofMarshaler, _DataSource_OneofUnmarshaler, _DataSource_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*DataSource) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*DataSource_Filename)(nil), (*DataSource_InlineBytes)(nil), (*DataSource_InlineString)(nil), } } -func _DataSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*DataSource) - // specifier - switch x := m.Specifier.(type) { - case *DataSource_Filename: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Filename) - case *DataSource_InlineBytes: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeRawBytes(x.InlineBytes) - case *DataSource_InlineString: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.InlineString) - case nil: - default: - return fmt.Errorf("DataSource.Specifier has unexpected type %T", x) - } - return nil -} - -func _DataSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*DataSource) - switch tag { - case 1: // specifier.filename - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Specifier = &DataSource_Filename{x} - return true, err - case 2: // specifier.inline_bytes - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - m.Specifier = &DataSource_InlineBytes{x} - return true, err - case 3: // specifier.inline_string - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Specifier = &DataSource_InlineString{x} - return true, err - default: - return false, nil - } +type RetryPolicy struct { + RetryBackOff *BackoffStrategy `protobuf:"bytes,1,opt,name=retry_back_off,json=retryBackOff,proto3" json:"retry_back_off,omitempty"` + NumRetries *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func _DataSource_OneofSizer(msg proto.Message) (n int) { - m := msg.(*DataSource) - // specifier - switch x := m.Specifier.(type) { - case *DataSource_Filename: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Filename))) - n += len(x.Filename) - case *DataSource_InlineBytes: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.InlineBytes))) - n += len(x.InlineBytes) - case *DataSource_InlineString: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.InlineString))) - n += len(x.InlineString) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Configuration for transport socket in :ref:`listeners ` and -// :ref:`clusters `. If the configuration is -// empty, a default transport socket implementation and configuration will be -// chosen based on the platform and existence of tls_context. -type TransportSocket struct { - // The name of the transport socket to instantiate. The name must match a supported transport - // socket implementation. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Implementation specific configuration which depends on the implementation being instantiated. - // See the supported transport socket implementations for further documentation. - // - // Types that are valid to be assigned to ConfigType: - // *TransportSocket_Config - // *TransportSocket_TypedConfig - ConfigType isTransportSocket_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *RetryPolicy) Reset() { *m = RetryPolicy{} } +func (m *RetryPolicy) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy) ProtoMessage() {} +func (*RetryPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{11} } -func (m *TransportSocket) Reset() { *m = TransportSocket{} } -func (m *TransportSocket) String() string { return proto.CompactTextString(m) } -func (*TransportSocket) ProtoMessage() {} -func (*TransportSocket) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{8} -} -func (m *TransportSocket) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (m *RetryPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RetryPolicy.Unmarshal(m, b) } -func (m *TransportSocket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil +func (m *RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RetryPolicy.Marshal(b, m, deterministic) } -func (m *TransportSocket) XXX_Merge(src proto.Message) { - xxx_messageInfo_TransportSocket.Merge(m, src) +func (m *RetryPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy.Merge(m, src) } -func (m *TransportSocket) XXX_Size() int { - return m.Size() +func (m *RetryPolicy) XXX_Size() int { + return xxx_messageInfo_RetryPolicy.Size(m) } -func (m *TransportSocket) XXX_DiscardUnknown() { - xxx_messageInfo_TransportSocket.DiscardUnknown(m) +func (m *RetryPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy.DiscardUnknown(m) } -var xxx_messageInfo_TransportSocket proto.InternalMessageInfo - -type isTransportSocket_ConfigType interface { - isTransportSocket_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} +var xxx_messageInfo_RetryPolicy proto.InternalMessageInfo -type TransportSocket_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type TransportSocket_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` -} - -func (*TransportSocket_Config) isTransportSocket_ConfigType() {} -func (*TransportSocket_TypedConfig) isTransportSocket_ConfigType() {} - -func (m *TransportSocket) GetConfigType() isTransportSocket_ConfigType { +func (m *RetryPolicy) GetRetryBackOff() *BackoffStrategy { if m != nil { - return m.ConfigType + return m.RetryBackOff } return nil } -func (m *TransportSocket) GetName() string { +func (m *RetryPolicy) GetNumRetries() *wrappers.UInt32Value { if m != nil { - return m.Name + return m.NumRetries } - return "" + return nil } -func (m *TransportSocket) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*TransportSocket_Config); ok { - return x.Config - } - return nil +type RemoteDataSource struct { + HttpUri *HttpUri `protobuf:"bytes,1,opt,name=http_uri,json=httpUri,proto3" json:"http_uri,omitempty"` + Sha256 string `protobuf:"bytes,2,opt,name=sha256,proto3" json:"sha256,omitempty"` + RetryPolicy *RetryPolicy `protobuf:"bytes,3,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *TransportSocket) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*TransportSocket_TypedConfig); ok { - return x.TypedConfig +func (m *RemoteDataSource) Reset() { *m = RemoteDataSource{} } +func (m *RemoteDataSource) String() string { return proto.CompactTextString(m) } +func (*RemoteDataSource) ProtoMessage() {} +func (*RemoteDataSource) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{12} +} + +func (m *RemoteDataSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RemoteDataSource.Unmarshal(m, b) +} +func (m *RemoteDataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RemoteDataSource.Marshal(b, m, deterministic) +} +func (m *RemoteDataSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_RemoteDataSource.Merge(m, src) +} +func (m *RemoteDataSource) XXX_Size() int { + return xxx_messageInfo_RemoteDataSource.Size(m) +} +func (m *RemoteDataSource) XXX_DiscardUnknown() { + xxx_messageInfo_RemoteDataSource.DiscardUnknown(m) +} + +var xxx_messageInfo_RemoteDataSource proto.InternalMessageInfo + +func (m *RemoteDataSource) GetHttpUri() *HttpUri { + if m != nil { + return m.HttpUri } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*TransportSocket) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _TransportSocket_OneofMarshaler, _TransportSocket_OneofUnmarshaler, _TransportSocket_OneofSizer, []interface{}{ - (*TransportSocket_Config)(nil), - (*TransportSocket_TypedConfig)(nil), +func (m *RemoteDataSource) GetSha256() string { + if m != nil { + return m.Sha256 } + return "" } -func _TransportSocket_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*TransportSocket) - // config_type - switch x := m.ConfigType.(type) { - case *TransportSocket_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *TransportSocket_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("TransportSocket.ConfigType has unexpected type %T", x) +func (m *RemoteDataSource) GetRetryPolicy() *RetryPolicy { + if m != nil { + return m.RetryPolicy } return nil } -func _TransportSocket_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*TransportSocket) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &TransportSocket_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &TransportSocket_TypedConfig{msg} - return true, err - default: - return false, nil - } +type AsyncDataSource struct { + // Types that are valid to be assigned to Specifier: + // *AsyncDataSource_Local + // *AsyncDataSource_Remote + Specifier isAsyncDataSource_Specifier `protobuf_oneof:"specifier"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func _TransportSocket_OneofSizer(msg proto.Message) (n int) { - m := msg.(*TransportSocket) - // config_type - switch x := m.ConfigType.(type) { - case *TransportSocket_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *TransportSocket_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Generic socket option message. This would be used to set socket options that -// might not exist in upstream kernels or precompiled Envoy binaries. -type SocketOption struct { - // An optional name to give this socket option for debugging, etc. - // Uniqueness is not required and no special meaning is assumed. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - // Corresponding to the level value passed to setsockopt, such as IPPROTO_TCP - Level int64 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - // The numeric name as passed to setsockopt - Name int64 `protobuf:"varint,3,opt,name=name,proto3" json:"name,omitempty"` - // Types that are valid to be assigned to Value: - // *SocketOption_IntValue - // *SocketOption_BufValue - Value isSocketOption_Value `protobuf_oneof:"value"` - // The state in which the option will be applied. When used in BindConfig - // STATE_PREBIND is currently the only valid value. - State SocketOption_SocketState `protobuf:"varint,6,opt,name=state,proto3,enum=envoy.api.v2.core.SocketOption_SocketState" json:"state,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *AsyncDataSource) Reset() { *m = AsyncDataSource{} } +func (m *AsyncDataSource) String() string { return proto.CompactTextString(m) } +func (*AsyncDataSource) ProtoMessage() {} +func (*AsyncDataSource) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{13} } -func (m *SocketOption) Reset() { *m = SocketOption{} } -func (m *SocketOption) String() string { return proto.CompactTextString(m) } -func (*SocketOption) ProtoMessage() {} -func (*SocketOption) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{9} +func (m *AsyncDataSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AsyncDataSource.Unmarshal(m, b) } -func (m *SocketOption) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (m *AsyncDataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AsyncDataSource.Marshal(b, m, deterministic) } -func (m *SocketOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil +func (m *AsyncDataSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_AsyncDataSource.Merge(m, src) } -func (m *SocketOption) XXX_Merge(src proto.Message) { - xxx_messageInfo_SocketOption.Merge(m, src) +func (m *AsyncDataSource) XXX_Size() int { + return xxx_messageInfo_AsyncDataSource.Size(m) } -func (m *SocketOption) XXX_Size() int { - return m.Size() -} -func (m *SocketOption) XXX_DiscardUnknown() { - xxx_messageInfo_SocketOption.DiscardUnknown(m) +func (m *AsyncDataSource) XXX_DiscardUnknown() { + xxx_messageInfo_AsyncDataSource.DiscardUnknown(m) } -var xxx_messageInfo_SocketOption proto.InternalMessageInfo +var xxx_messageInfo_AsyncDataSource proto.InternalMessageInfo -type isSocketOption_Value interface { - isSocketOption_Value() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int +type isAsyncDataSource_Specifier interface { + isAsyncDataSource_Specifier() } -type SocketOption_IntValue struct { - IntValue int64 `protobuf:"varint,4,opt,name=int_value,json=intValue,proto3,oneof"` +type AsyncDataSource_Local struct { + Local *DataSource `protobuf:"bytes,1,opt,name=local,proto3,oneof"` } -type SocketOption_BufValue struct { - BufValue []byte `protobuf:"bytes,5,opt,name=buf_value,json=bufValue,proto3,oneof"` + +type AsyncDataSource_Remote struct { + Remote *RemoteDataSource `protobuf:"bytes,2,opt,name=remote,proto3,oneof"` } -func (*SocketOption_IntValue) isSocketOption_Value() {} -func (*SocketOption_BufValue) isSocketOption_Value() {} +func (*AsyncDataSource_Local) isAsyncDataSource_Specifier() {} + +func (*AsyncDataSource_Remote) isAsyncDataSource_Specifier() {} -func (m *SocketOption) GetValue() isSocketOption_Value { +func (m *AsyncDataSource) GetSpecifier() isAsyncDataSource_Specifier { if m != nil { - return m.Value + return m.Specifier } return nil } -func (m *SocketOption) GetDescription() string { - if m != nil { - return m.Description +func (m *AsyncDataSource) GetLocal() *DataSource { + if x, ok := m.GetSpecifier().(*AsyncDataSource_Local); ok { + return x.Local } - return "" + return nil } -func (m *SocketOption) GetLevel() int64 { - if m != nil { - return m.Level +func (m *AsyncDataSource) GetRemote() *RemoteDataSource { + if x, ok := m.GetSpecifier().(*AsyncDataSource_Remote); ok { + return x.Remote } - return 0 + return nil } -func (m *SocketOption) GetName() int64 { - if m != nil { - return m.Name +// XXX_OneofWrappers is for the internal use of the proto package. +func (*AsyncDataSource) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*AsyncDataSource_Local)(nil), + (*AsyncDataSource_Remote)(nil), } - return 0 } -func (m *SocketOption) GetIntValue() int64 { - if x, ok := m.GetValue().(*SocketOption_IntValue); ok { - return x.IntValue - } - return 0 +type TransportSocket struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *TransportSocket_Config + // *TransportSocket_TypedConfig + ConfigType isTransportSocket_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *SocketOption) GetBufValue() []byte { - if x, ok := m.GetValue().(*SocketOption_BufValue); ok { - return x.BufValue - } - return nil +func (m *TransportSocket) Reset() { *m = TransportSocket{} } +func (m *TransportSocket) String() string { return proto.CompactTextString(m) } +func (*TransportSocket) ProtoMessage() {} +func (*TransportSocket) Descriptor() ([]byte, []int) { + return fileDescriptor_a7738c0f9e1bfff4, []int{14} +} + +func (m *TransportSocket) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TransportSocket.Unmarshal(m, b) } +func (m *TransportSocket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TransportSocket.Marshal(b, m, deterministic) +} +func (m *TransportSocket) XXX_Merge(src proto.Message) { + xxx_messageInfo_TransportSocket.Merge(m, src) +} +func (m *TransportSocket) XXX_Size() int { + return xxx_messageInfo_TransportSocket.Size(m) +} +func (m *TransportSocket) XXX_DiscardUnknown() { + xxx_messageInfo_TransportSocket.DiscardUnknown(m) +} + +var xxx_messageInfo_TransportSocket proto.InternalMessageInfo -func (m *SocketOption) GetState() SocketOption_SocketState { +func (m *TransportSocket) GetName() string { if m != nil { - return m.State + return m.Name } - return STATE_PREBIND + return "" +} + +type isTransportSocket_ConfigType interface { + isTransportSocket_ConfigType() +} + +type TransportSocket_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type TransportSocket_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SocketOption) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SocketOption_OneofMarshaler, _SocketOption_OneofUnmarshaler, _SocketOption_OneofSizer, []interface{}{ - (*SocketOption_IntValue)(nil), - (*SocketOption_BufValue)(nil), +func (*TransportSocket_Config) isTransportSocket_ConfigType() {} + +func (*TransportSocket_TypedConfig) isTransportSocket_ConfigType() {} + +func (m *TransportSocket) GetConfigType() isTransportSocket_ConfigType { + if m != nil { + return m.ConfigType } + return nil } -func _SocketOption_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SocketOption) - // value - switch x := m.Value.(type) { - case *SocketOption_IntValue: - _ = b.EncodeVarint(4<<3 | proto.WireVarint) - _ = b.EncodeVarint(uint64(x.IntValue)) - case *SocketOption_BufValue: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - _ = b.EncodeRawBytes(x.BufValue) - case nil: - default: - return fmt.Errorf("SocketOption.Value has unexpected type %T", x) +// Deprecated: Do not use. +func (m *TransportSocket) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*TransportSocket_Config); ok { + return x.Config } return nil } -func _SocketOption_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SocketOption) - switch tag { - case 4: // value.int_value - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Value = &SocketOption_IntValue{int64(x)} - return true, err - case 5: // value.buf_value - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - m.Value = &SocketOption_BufValue{x} - return true, err - default: - return false, nil +func (m *TransportSocket) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*TransportSocket_TypedConfig); ok { + return x.TypedConfig } + return nil } -func _SocketOption_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SocketOption) - // value - switch x := m.Value.(type) { - case *SocketOption_IntValue: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.IntValue)) - case *SocketOption_BufValue: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.BufValue))) - n += len(x.BufValue) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +// XXX_OneofWrappers is for the internal use of the proto package. +func (*TransportSocket) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*TransportSocket_Config)(nil), + (*TransportSocket_TypedConfig)(nil), } - return n } -// Runtime derived FractionalPercent with defaults for when the numerator or denominator is not -// specified via a runtime key. type RuntimeFractionalPercent struct { - // Default value if the runtime value's for the numerator/denominator keys are not available. - DefaultValue *_type.FractionalPercent `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` - // Runtime key for a YAML representation of a FractionalPercent. - RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DefaultValue *_type.FractionalPercent `protobuf:"bytes,1,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RuntimeFractionalPercent) Reset() { *m = RuntimeFractionalPercent{} } func (m *RuntimeFractionalPercent) String() string { return proto.CompactTextString(m) } func (*RuntimeFractionalPercent) ProtoMessage() {} func (*RuntimeFractionalPercent) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{10} + return fileDescriptor_a7738c0f9e1bfff4, []int{15} } + func (m *RuntimeFractionalPercent) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_RuntimeFractionalPercent.Unmarshal(m, b) } func (m *RuntimeFractionalPercent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_RuntimeFractionalPercent.Marshal(b, m, deterministic) } func (m *RuntimeFractionalPercent) XXX_Merge(src proto.Message) { xxx_messageInfo_RuntimeFractionalPercent.Merge(m, src) } func (m *RuntimeFractionalPercent) XXX_Size() int { - return m.Size() + return xxx_messageInfo_RuntimeFractionalPercent.Size(m) } func (m *RuntimeFractionalPercent) XXX_DiscardUnknown() { xxx_messageInfo_RuntimeFractionalPercent.DiscardUnknown(m) @@ -1165,11 +1134,7 @@ return "" } -// Identifies a specific ControlPlane instance that Envoy is connected to. type ControlPlane struct { - // An opaque control plane identifier that uniquely identifies an instance - // of control plane. This can be used to identify which control plane instance, - // the Envoy is connected to. Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1180,24 +1145,20 @@ func (m *ControlPlane) String() string { return proto.CompactTextString(m) } func (*ControlPlane) ProtoMessage() {} func (*ControlPlane) Descriptor() ([]byte, []int) { - return fileDescriptor_a7738c0f9e1bfff4, []int{11} + return fileDescriptor_a7738c0f9e1bfff4, []int{16} } + func (m *ControlPlane) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ControlPlane.Unmarshal(m, b) } func (m *ControlPlane) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_ControlPlane.Marshal(b, m, deterministic) } func (m *ControlPlane) XXX_Merge(src proto.Message) { xxx_messageInfo_ControlPlane.Merge(m, src) } func (m *ControlPlane) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ControlPlane.Size(m) } func (m *ControlPlane) XXX_DiscardUnknown() { xxx_messageInfo_ControlPlane.DiscardUnknown(m) @@ -1215,18 +1176,23 @@ func init() { proto.RegisterEnum("envoy.api.v2.core.RoutingPriority", RoutingPriority_name, RoutingPriority_value) proto.RegisterEnum("envoy.api.v2.core.RequestMethod", RequestMethod_name, RequestMethod_value) - proto.RegisterEnum("envoy.api.v2.core.SocketOption_SocketState", SocketOption_SocketState_name, SocketOption_SocketState_value) + proto.RegisterEnum("envoy.api.v2.core.TrafficDirection", TrafficDirection_name, TrafficDirection_value) proto.RegisterType((*Locality)(nil), "envoy.api.v2.core.Locality") + proto.RegisterType((*BuildVersion)(nil), "envoy.api.v2.core.BuildVersion") + proto.RegisterType((*Extension)(nil), "envoy.api.v2.core.Extension") proto.RegisterType((*Node)(nil), "envoy.api.v2.core.Node") proto.RegisterType((*Metadata)(nil), "envoy.api.v2.core.Metadata") - proto.RegisterMapType((map[string]*types.Struct)(nil), "envoy.api.v2.core.Metadata.FilterMetadataEntry") + proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.core.Metadata.FilterMetadataEntry") proto.RegisterType((*RuntimeUInt32)(nil), "envoy.api.v2.core.RuntimeUInt32") + proto.RegisterType((*RuntimeFeatureFlag)(nil), "envoy.api.v2.core.RuntimeFeatureFlag") proto.RegisterType((*HeaderValue)(nil), "envoy.api.v2.core.HeaderValue") proto.RegisterType((*HeaderValueOption)(nil), "envoy.api.v2.core.HeaderValueOption") proto.RegisterType((*HeaderMap)(nil), "envoy.api.v2.core.HeaderMap") proto.RegisterType((*DataSource)(nil), "envoy.api.v2.core.DataSource") + proto.RegisterType((*RetryPolicy)(nil), "envoy.api.v2.core.RetryPolicy") + proto.RegisterType((*RemoteDataSource)(nil), "envoy.api.v2.core.RemoteDataSource") + proto.RegisterType((*AsyncDataSource)(nil), "envoy.api.v2.core.AsyncDataSource") proto.RegisterType((*TransportSocket)(nil), "envoy.api.v2.core.TransportSocket") - proto.RegisterType((*SocketOption)(nil), "envoy.api.v2.core.SocketOption") proto.RegisterType((*RuntimeFractionalPercent)(nil), "envoy.api.v2.core.RuntimeFractionalPercent") proto.RegisterType((*ControlPlane)(nil), "envoy.api.v2.core.ControlPlane") } @@ -1234,3349 +1200,105 @@ func init() { proto.RegisterFile("envoy/api/v2/core/base.proto", fileDescriptor_a7738c0f9e1bfff4) } var fileDescriptor_a7738c0f9e1bfff4 = []byte{ - // 1163 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0xcd, 0x6f, 0x1b, 0x45, - 0x14, 0xcf, 0xf8, 0x2b, 0xf6, 0xb3, 0x9d, 0x6c, 0xa7, 0x51, 0xeb, 0x86, 0xc6, 0x0d, 0xe6, 0x40, - 0x54, 0xc4, 0x1a, 0xdc, 0x03, 0x85, 0x5b, 0x36, 0xde, 0xd4, 0x16, 0x89, 0xed, 0xae, 0x37, 0x05, - 0xf5, 0x62, 0xd6, 0xde, 0xb1, 0xbb, 0xea, 0x76, 0x67, 0x99, 0x9d, 0x35, 0xb8, 0xa7, 0x0a, 0x71, - 0x40, 0xf4, 0xcf, 0xe0, 0x82, 0x84, 0xb8, 0x23, 0x4e, 0x95, 0xb8, 0x70, 0x83, 0x23, 0x47, 0x94, - 0x5b, 0xff, 0x0b, 0x34, 0x1f, 0x4e, 0x9d, 0x0f, 0xd1, 0xdb, 0xcc, 0xef, 0xfd, 0x7e, 0x6f, 0xdf, - 0x7b, 0xf3, 0xde, 0x5b, 0xb8, 0x4d, 0xa2, 0x39, 0x5d, 0x34, 0xbd, 0x38, 0x68, 0xce, 0x5b, 0xcd, - 0x09, 0x65, 0xa4, 0x39, 0xf6, 0x12, 0x62, 0xc6, 0x8c, 0x72, 0x8a, 0xaf, 0x49, 0xab, 0xe9, 0xc5, - 0x81, 0x39, 0x6f, 0x99, 0xc2, 0xba, 0x7d, 0x6b, 0x46, 0xe9, 0x2c, 0x24, 0x4d, 0x49, 0x18, 0xa7, - 0xd3, 0xa6, 0x17, 0x2d, 0x14, 0x7b, 0xfb, 0xf6, 0x45, 0x53, 0xc2, 0x59, 0x3a, 0xe1, 0xda, 0x5a, - 0xbf, 0x68, 0xfd, 0x86, 0x79, 0x71, 0x4c, 0x58, 0xa2, 0xed, 0x37, 0xe7, 0x5e, 0x18, 0xf8, 0x1e, - 0x27, 0xcd, 0xe5, 0x41, 0x1b, 0xb6, 0x66, 0x74, 0x46, 0xe5, 0xb1, 0x29, 0x4e, 0x1a, 0xad, 0xa9, - 0xc0, 0xf9, 0x22, 0x26, 0xcd, 0x98, 0xb0, 0x09, 0x89, 0xf4, 0x87, 0x1a, 0x0f, 0xa1, 0x78, 0x44, - 0x27, 0x5e, 0x18, 0xf0, 0x05, 0xbe, 0x01, 0x05, 0x46, 0x66, 0x01, 0x8d, 0x6a, 0x68, 0x17, 0xed, - 0x95, 0x1c, 0x7d, 0xc3, 0x18, 0x72, 0xcf, 0x69, 0x44, 0x6a, 0x19, 0x89, 0xca, 0x33, 0xbe, 0x05, - 0xc5, 0x24, 0x1d, 0x8f, 0x24, 0x9e, 0x95, 0xf8, 0x7a, 0x92, 0x8e, 0x1f, 0xd3, 0x88, 0x34, 0xfe, - 0x40, 0x90, 0xeb, 0x51, 0x9f, 0xe0, 0x0d, 0xc8, 0x04, 0xbe, 0xf6, 0x95, 0x09, 0x7c, 0x5c, 0x83, - 0xf5, 0x49, 0x98, 0x26, 0x9c, 0x30, 0xed, 0x6a, 0x79, 0xc5, 0xf7, 0xa0, 0xf8, 0x8c, 0x70, 0xcf, - 0xf7, 0xb8, 0x27, 0xbd, 0x95, 0x5b, 0x37, 0x4d, 0x55, 0x01, 0x73, 0x59, 0x01, 0x73, 0x28, 0xeb, - 0xe3, 0x9c, 0x11, 0xf1, 0x27, 0x50, 0x0c, 0x75, 0xe8, 0xb5, 0x9c, 0x14, 0xbd, 0x63, 0x5e, 0x7a, - 0x02, 0x73, 0x99, 0x9d, 0x73, 0x46, 0xc6, 0xef, 0x41, 0x75, 0x9c, 0x06, 0xa1, 0x3f, 0x9a, 0x13, - 0x96, 0x88, 0x74, 0xf3, 0x32, 0x9a, 0x8a, 0x04, 0x1f, 0x29, 0xac, 0xf1, 0x0a, 0x41, 0xf1, 0x78, - 0xf9, 0xa9, 0x2f, 0x61, 0x73, 0x1a, 0x84, 0x9c, 0xb0, 0xd1, 0x59, 0x98, 0x68, 0x37, 0xbb, 0x57, - 0x6e, 0x35, 0xaf, 0xf8, 0xe2, 0x52, 0x65, 0x1e, 0x4a, 0xc9, 0xf2, 0x6a, 0x47, 0x9c, 0x2d, 0x9c, - 0x8d, 0xe9, 0x39, 0x70, 0xfb, 0x31, 0x5c, 0xbf, 0x82, 0x86, 0x0d, 0xc8, 0x3e, 0x25, 0x0b, 0x5d, - 0x3b, 0x71, 0xc4, 0x1f, 0x42, 0x7e, 0xee, 0x85, 0xa9, 0x7a, 0x85, 0xff, 0xa9, 0x8f, 0x62, 0x7d, - 0x96, 0xb9, 0x8f, 0x1a, 0x5f, 0x41, 0xd5, 0x49, 0x23, 0x1e, 0x3c, 0x23, 0x27, 0xdd, 0x88, 0xdf, - 0x6b, 0x89, 0xc4, 0x7d, 0x32, 0xf5, 0xd2, 0x90, 0x8f, 0xde, 0xf8, 0xaa, 0x3a, 0x15, 0x0d, 0x3e, - 0x12, 0x18, 0xbe, 0x0b, 0x65, 0xa6, 0x54, 0x23, 0x11, 0x82, 0x7c, 0x5c, 0xab, 0xf4, 0xfb, 0xeb, - 0x57, 0xd9, 0x1c, 0xcb, 0xec, 0x22, 0x07, 0xb4, 0xf5, 0x73, 0xb2, 0x68, 0x3c, 0x84, 0x72, 0x87, - 0x78, 0x3e, 0x61, 0x4a, 0x7a, 0x67, 0x25, 0x6a, 0xab, 0x2a, 0x24, 0x45, 0x56, 0xd8, 0x45, 0x7b, - 0x2f, 0x5e, 0x20, 0x95, 0xc4, 0xbb, 0xab, 0x49, 0x94, 0xac, 0xb2, 0xa0, 0x14, 0x58, 0x4e, 0x12, - 0x94, 0xa5, 0xf1, 0x12, 0xc1, 0xb5, 0x15, 0x9f, 0xfd, 0x98, 0x8b, 0x16, 0xb4, 0xa0, 0xf0, 0x44, - 0x82, 0xd2, 0x79, 0xb9, 0x55, 0xbf, 0xa2, 0xee, 0x2b, 0x2a, 0x0b, 0x84, 0xe7, 0xfc, 0x8f, 0x28, - 0x63, 0x20, 0x47, 0x2b, 0x71, 0x0b, 0x0a, 0x62, 0x86, 0x22, 0x5f, 0x97, 0x70, 0xfb, 0x52, 0x09, - 0x2d, 0x4a, 0x43, 0xa9, 0x77, 0x34, 0xb3, 0x61, 0x43, 0x49, 0xb9, 0x3d, 0xf6, 0x62, 0x7c, 0x1f, - 0xd6, 0x95, 0xab, 0x44, 0xbf, 0xfe, 0x5b, 0xa2, 0x70, 0x96, 0xf4, 0xc6, 0x2f, 0x08, 0xa0, 0xed, - 0x71, 0x6f, 0x48, 0x53, 0x36, 0x21, 0xf8, 0x7d, 0x28, 0x4e, 0x83, 0x90, 0x44, 0xde, 0x33, 0xa2, - 0x8b, 0xf5, 0xa6, 0xbe, 0x9d, 0x35, 0xe7, 0xcc, 0x88, 0x4d, 0xa8, 0x04, 0x51, 0x18, 0x44, 0x64, - 0x34, 0x5e, 0x70, 0x92, 0xc8, 0xc0, 0x2b, 0x9a, 0xfc, 0x3c, 0x63, 0x08, 0x72, 0x59, 0x11, 0x2c, - 0x61, 0xc7, 0x1f, 0x41, 0x55, 0xf3, 0x13, 0xce, 0x82, 0x68, 0x76, 0xe9, 0xf5, 0x3a, 0x6b, 0x8e, - 0xf6, 0x38, 0x94, 0x04, 0x0b, 0x43, 0x29, 0x89, 0xc9, 0x24, 0x98, 0x06, 0x84, 0xe1, 0xfc, 0x6f, - 0xaf, 0x5f, 0x65, 0x51, 0xe3, 0x57, 0x04, 0x9b, 0x2e, 0xf3, 0xa2, 0x24, 0xa6, 0x8c, 0x0f, 0xe9, - 0xe4, 0x29, 0xe1, 0x78, 0x07, 0x72, 0x57, 0x86, 0xeb, 0x48, 0x18, 0x7f, 0x0c, 0x85, 0x09, 0x8d, - 0xa6, 0xc1, 0xec, 0x2d, 0xed, 0xd9, 0x59, 0x73, 0x34, 0x11, 0x7f, 0x0a, 0x15, 0xb1, 0x8f, 0xfc, - 0x91, 0x16, 0xaa, 0xb9, 0xdf, 0xba, 0x24, 0xdc, 0x8f, 0x16, 0x22, 0x4d, 0xc9, 0x3d, 0x90, 0x54, - 0xab, 0x0a, 0x65, 0x25, 0x1a, 0x09, 0xb4, 0xf1, 0x57, 0x06, 0x2a, 0x2a, 0x4c, 0xdd, 0x2d, 0xbb, - 0x50, 0xf6, 0x49, 0x32, 0x61, 0x81, 0xbc, 0xea, 0x29, 0x5a, 0x85, 0xf0, 0x16, 0xe4, 0x43, 0x32, - 0x27, 0xa1, 0x0c, 0x37, 0xeb, 0xa8, 0x8b, 0x58, 0x74, 0x32, 0xc9, 0xac, 0x04, 0x55, 0x66, 0x3b, - 0x50, 0x0a, 0xa2, 0xe5, 0xbc, 0x88, 0x35, 0x93, 0x15, 0x2f, 0x14, 0x44, 0x7a, 0x5a, 0x76, 0xa0, - 0x34, 0x4e, 0xa7, 0xda, 0x2c, 0xf6, 0x48, 0x45, 0x98, 0xc7, 0xe9, 0x54, 0x99, 0xbf, 0x80, 0x7c, - 0xc2, 0x3d, 0x4e, 0x6a, 0x62, 0x0c, 0x36, 0x5a, 0x1f, 0x5c, 0xd1, 0x30, 0xab, 0x91, 0xeb, 0xcb, - 0x50, 0x48, 0xac, 0xad, 0x37, 0x3d, 0x2c, 0x4f, 0xdf, 0xc9, 0x6e, 0x56, 0xfe, 0x1a, 0x47, 0x50, - 0x5e, 0xe1, 0xe2, 0x6b, 0x50, 0x1d, 0xba, 0xfb, 0xae, 0x3d, 0x1a, 0x38, 0xb6, 0xd5, 0xed, 0xb5, - 0x8d, 0x35, 0xbc, 0x09, 0x65, 0x05, 0x59, 0xfd, 0x93, 0x5e, 0xdb, 0x40, 0xf8, 0x3a, 0x6c, 0x2a, - 0xe0, 0xa8, 0x3b, 0x74, 0xed, 0x5e, 0xb7, 0xf7, 0xc0, 0xc8, 0x6c, 0xe7, 0x7e, 0xf8, 0xa9, 0xbe, - 0x66, 0x6d, 0xe8, 0xb9, 0x5c, 0x76, 0xc0, 0x4b, 0x04, 0x35, 0xbd, 0x3a, 0x0e, 0x99, 0x37, 0x11, - 0xa1, 0x79, 0xe1, 0x40, 0xfd, 0x38, 0x70, 0xef, 0xe2, 0x16, 0x51, 0x23, 0xb9, 0xa3, 0x73, 0x13, - 0x4f, 0x62, 0x5e, 0x52, 0x9d, 0x9b, 0xc8, 0xf3, 0x0b, 0xe7, 0xce, 0xf9, 0x85, 0xa3, 0x7e, 0x0d, - 0xab, 0x5b, 0xc6, 0x84, 0xca, 0x01, 0x8d, 0x38, 0xa3, 0xe1, 0x20, 0xf4, 0x22, 0x82, 0xeb, 0x00, - 0x81, 0x4f, 0x22, 0x2e, 0x9b, 0x56, 0xbf, 0xee, 0x0a, 0x72, 0x77, 0x0f, 0x36, 0x1d, 0x9a, 0xf2, - 0x20, 0x9a, 0x0d, 0x58, 0x40, 0x99, 0x58, 0xf9, 0x65, 0x58, 0x6f, 0xdb, 0x87, 0xfb, 0x27, 0x47, - 0xae, 0xb1, 0x86, 0x8b, 0x90, 0xeb, 0x74, 0x1f, 0x74, 0x0c, 0x74, 0xf7, 0x7b, 0x04, 0x55, 0x87, - 0x7c, 0x9d, 0x92, 0x84, 0x1f, 0x13, 0xfe, 0x84, 0xfa, 0xf8, 0x06, 0xe0, 0x63, 0xdb, 0xed, 0xf4, - 0xdb, 0xa3, 0x93, 0xde, 0x70, 0x60, 0x1f, 0x74, 0x0f, 0xbb, 0xb6, 0xa8, 0xe6, 0x3a, 0x64, 0x1f, - 0xd8, 0xae, 0x81, 0xa4, 0xd8, 0xde, 0x6f, 0x1b, 0x19, 0x71, 0x1a, 0xf4, 0x87, 0xae, 0x91, 0x15, - 0xc6, 0xc1, 0x89, 0x6b, 0xe4, 0x30, 0x40, 0xa1, 0x6d, 0x1f, 0xd9, 0xae, 0x6d, 0xe4, 0xc5, 0x27, - 0x0f, 0xfa, 0xbd, 0x9e, 0x7d, 0xe0, 0x1a, 0x05, 0x71, 0xe9, 0x0f, 0xdc, 0x6e, 0xbf, 0x37, 0x34, - 0xd6, 0x71, 0x09, 0xf2, 0xae, 0xb3, 0x7f, 0x60, 0x1b, 0x45, 0x5d, 0xfe, 0xce, 0xcf, 0xa7, 0x75, - 0xf4, 0xe7, 0x69, 0x1d, 0xfd, 0x7d, 0x5a, 0x47, 0xff, 0x9c, 0xd6, 0xd1, 0xbf, 0xa7, 0x75, 0x04, - 0x77, 0x02, 0xaa, 0x4a, 0x1a, 0x33, 0xfa, 0xed, 0xe2, 0x72, 0xe7, 0x58, 0x25, 0xcb, 0x4b, 0xc8, - 0x40, 0xcc, 0xc9, 0x00, 0x3d, 0xce, 0x09, 0x68, 0x5c, 0x90, 0x63, 0x73, 0xef, 0xbf, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xd2, 0xc9, 0x64, 0xea, 0xaa, 0x08, 0x00, 0x00, -} - -func (this *Locality) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Locality) - if !ok { - that2, ok := that.(Locality) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Region != that1.Region { - return false - } - if this.Zone != that1.Zone { - return false - } - if this.SubZone != that1.SubZone { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Node) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Node) - if !ok { - that2, ok := that.(Node) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Id != that1.Id { - return false - } - if this.Cluster != that1.Cluster { - return false - } - if !this.Metadata.Equal(that1.Metadata) { - return false - } - if !this.Locality.Equal(that1.Locality) { - return false - } - if this.BuildVersion != that1.BuildVersion { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Metadata) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Metadata) - if !ok { - that2, ok := that.(Metadata) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.FilterMetadata) != len(that1.FilterMetadata) { - return false - } - for i := range this.FilterMetadata { - if !this.FilterMetadata[i].Equal(that1.FilterMetadata[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RuntimeUInt32) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RuntimeUInt32) - if !ok { - that2, ok := that.(RuntimeUInt32) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.DefaultValue != that1.DefaultValue { - return false - } - if this.RuntimeKey != that1.RuntimeKey { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HeaderValue) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderValue) - if !ok { - that2, ok := that.(HeaderValue) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Key != that1.Key { - return false - } - if this.Value != that1.Value { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HeaderValueOption) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderValueOption) - if !ok { - that2, ok := that.(HeaderValueOption) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Header.Equal(that1.Header) { - return false - } - if !this.Append.Equal(that1.Append) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HeaderMap) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMap) - if !ok { - that2, ok := that.(HeaderMap) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.Headers) != len(that1.Headers) { - return false - } - for i := range this.Headers { - if !this.Headers[i].Equal(that1.Headers[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DataSource) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DataSource) - if !ok { - that2, ok := that.(DataSource) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.Specifier == nil { - if this.Specifier != nil { - return false - } - } else if this.Specifier == nil { - return false - } else if !this.Specifier.Equal(that1.Specifier) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DataSource_Filename) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DataSource_Filename) - if !ok { - that2, ok := that.(DataSource_Filename) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Filename != that1.Filename { - return false - } - return true -} -func (this *DataSource_InlineBytes) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DataSource_InlineBytes) - if !ok { - that2, ok := that.(DataSource_InlineBytes) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.InlineBytes, that1.InlineBytes) { - return false - } - return true -} -func (this *DataSource_InlineString) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DataSource_InlineString) - if !ok { - that2, ok := that.(DataSource_InlineString) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.InlineString != that1.InlineString { - return false - } - return true -} -func (this *TransportSocket) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TransportSocket) - if !ok { - that2, ok := that.(TransportSocket) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *TransportSocket_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TransportSocket_Config) - if !ok { - that2, ok := that.(TransportSocket_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true -} -func (this *TransportSocket_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TransportSocket_TypedConfig) - if !ok { - that2, ok := that.(TransportSocket_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (this *SocketOption) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SocketOption) - if !ok { - that2, ok := that.(SocketOption) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Description != that1.Description { - return false - } - if this.Level != that1.Level { - return false - } - if this.Name != that1.Name { - return false - } - if that1.Value == nil { - if this.Value != nil { - return false - } - } else if this.Value == nil { - return false - } else if !this.Value.Equal(that1.Value) { - return false - } - if this.State != that1.State { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *SocketOption_IntValue) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SocketOption_IntValue) - if !ok { - that2, ok := that.(SocketOption_IntValue) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.IntValue != that1.IntValue { - return false - } - return true -} -func (this *SocketOption_BufValue) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SocketOption_BufValue) - if !ok { - that2, ok := that.(SocketOption_BufValue) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.BufValue, that1.BufValue) { - return false - } - return true -} -func (this *RuntimeFractionalPercent) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RuntimeFractionalPercent) - if !ok { - that2, ok := that.(RuntimeFractionalPercent) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.DefaultValue.Equal(that1.DefaultValue) { - return false - } - if this.RuntimeKey != that1.RuntimeKey { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ControlPlane) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ControlPlane) - if !ok { - that2, ok := that.(ControlPlane) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Identifier != that1.Identifier { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *Locality) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Locality) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Region) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Region))) - i += copy(dAtA[i:], m.Region) - } - if len(m.Zone) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Zone))) - i += copy(dAtA[i:], m.Zone) - } - if len(m.SubZone) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.SubZone))) - i += copy(dAtA[i:], m.SubZone) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Node) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Node) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Id) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Id))) - i += copy(dAtA[i:], m.Id) - } - if len(m.Cluster) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - } - if m.Metadata != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Metadata.Size())) - n1, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Locality != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Locality.Size())) - n2, err := m.Locality.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if len(m.BuildVersion) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.BuildVersion))) - i += copy(dAtA[i:], m.BuildVersion) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Metadata) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Metadata) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.FilterMetadata) > 0 { - keysForFilterMetadata := make([]string, 0, len(m.FilterMetadata)) - for k, _ := range m.FilterMetadata { - keysForFilterMetadata = append(keysForFilterMetadata, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForFilterMetadata) - for _, k := range keysForFilterMetadata { - dAtA[i] = 0xa - i++ - v := m.FilterMetadata[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovBase(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovBase(uint64(len(k))) + msgSize - i = encodeVarintBase(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(v.Size())) - n3, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RuntimeUInt32) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RuntimeUInt32) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.DefaultValue != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.DefaultValue)) - } - if len(m.RuntimeKey) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.RuntimeKey))) - i += copy(dAtA[i:], m.RuntimeKey) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HeaderValue) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HeaderValue) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if len(m.Value) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HeaderValueOption) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HeaderValueOption) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Header.Size())) - n4, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.Append != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Append.Size())) - n5, err := m.Append.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HeaderMap) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HeaderMap) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Headers) > 0 { - for _, msg := range m.Headers { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DataSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DataSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Specifier != nil { - nn6, err := m.Specifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn6 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DataSource_Filename) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Filename))) - i += copy(dAtA[i:], m.Filename) - return i, nil -} -func (m *DataSource_InlineBytes) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.InlineBytes != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.InlineBytes))) - i += copy(dAtA[i:], m.InlineBytes) - } - return i, nil -} -func (m *DataSource_InlineString) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x1a - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.InlineString))) - i += copy(dAtA[i:], m.InlineString) - return i, nil -} -func (m *TransportSocket) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TransportSocket) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn7, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn7 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TransportSocket_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Config.Size())) - n8, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *TransportSocket_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintBase(dAtA, i, uint64(m.TypedConfig.Size())) - n9, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} -func (m *SocketOption) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SocketOption) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Description) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Description))) - i += copy(dAtA[i:], m.Description) - } - if m.Level != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Level)) - } - if m.Name != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.Name)) - } - if m.Value != nil { - nn10, err := m.Value.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn10 - } - if m.State != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.State)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *SocketOption_IntValue) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x20 - i++ - i = encodeVarintBase(dAtA, i, uint64(m.IntValue)) - return i, nil -} -func (m *SocketOption_BufValue) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.BufValue != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.BufValue))) - i += copy(dAtA[i:], m.BufValue) - } - return i, nil -} -func (m *RuntimeFractionalPercent) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RuntimeFractionalPercent) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.DefaultValue != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(m.DefaultValue.Size())) - n11, err := m.DefaultValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if len(m.RuntimeKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.RuntimeKey))) - i += copy(dAtA[i:], m.RuntimeKey) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ControlPlane) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ControlPlane) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Identifier) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintBase(dAtA, i, uint64(len(m.Identifier))) - i += copy(dAtA[i:], m.Identifier) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintBase(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Locality) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Region) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - l = len(m.Zone) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - l = len(m.SubZone) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Node) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Id) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - l = len(m.Cluster) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovBase(uint64(l)) - } - if m.Locality != nil { - l = m.Locality.Size() - n += 1 + l + sovBase(uint64(l)) - } - l = len(m.BuildVersion) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Metadata) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.FilterMetadata) > 0 { - for k, v := range m.FilterMetadata { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovBase(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovBase(uint64(len(k))) + l - n += mapEntrySize + 1 + sovBase(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RuntimeUInt32) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DefaultValue != 0 { - n += 1 + sovBase(uint64(m.DefaultValue)) - } - l = len(m.RuntimeKey) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HeaderValue) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HeaderValueOption) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovBase(uint64(l)) - } - if m.Append != nil { - l = m.Append.Size() - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HeaderMap) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Headers) > 0 { - for _, e := range m.Headers { - l = e.Size() - n += 1 + l + sovBase(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DataSource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Specifier != nil { - n += m.Specifier.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DataSource_Filename) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Filename) - n += 1 + l + sovBase(uint64(l)) - return n -} -func (m *DataSource_InlineBytes) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.InlineBytes != nil { - l = len(m.InlineBytes) - n += 1 + l + sovBase(uint64(l)) - } - return n -} -func (m *DataSource_InlineString) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.InlineString) - n += 1 + l + sovBase(uint64(l)) - return n -} -func (m *TransportSocket) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TransportSocket_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovBase(uint64(l)) - } - return n -} -func (m *TransportSocket_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovBase(uint64(l)) - } - return n -} -func (m *SocketOption) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Description) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.Level != 0 { - n += 1 + sovBase(uint64(m.Level)) - } - if m.Name != 0 { - n += 1 + sovBase(uint64(m.Name)) - } - if m.Value != nil { - n += m.Value.Size() - } - if m.State != 0 { - n += 1 + sovBase(uint64(m.State)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *SocketOption_IntValue) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 1 + sovBase(uint64(m.IntValue)) - return n -} -func (m *SocketOption_BufValue) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.BufValue != nil { - l = len(m.BufValue) - n += 1 + l + sovBase(uint64(l)) - } - return n -} -func (m *RuntimeFractionalPercent) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DefaultValue != nil { - l = m.DefaultValue.Size() - n += 1 + l + sovBase(uint64(l)) - } - l = len(m.RuntimeKey) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ControlPlane) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Identifier) - if l > 0 { - n += 1 + l + sovBase(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovBase(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozBase(x uint64) (n int) { - return sovBase(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Locality) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Locality: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Locality: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Region = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Zone", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Zone = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SubZone", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SubZone = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Node) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Node: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Node: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Id = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cluster = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &types.Struct{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locality", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Locality == nil { - m.Locality = &Locality{} - } - if err := m.Locality.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BuildVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.BuildVersion = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + // 1593 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x4b, 0x6f, 0x1b, 0xc9, + 0x11, 0xe6, 0x50, 0x12, 0x1f, 0x45, 0x4a, 0x9a, 0xed, 0xdd, 0xd8, 0xb4, 0xfc, 0x90, 0x42, 0xc3, + 0x59, 0xc1, 0x48, 0x48, 0x40, 0x86, 0x93, 0xdd, 0x20, 0x9b, 0x84, 0x23, 0x52, 0x4b, 0x61, 0x6d, + 0x91, 0x19, 0x52, 0x8b, 0xc4, 0x87, 0x0c, 0x9a, 0x33, 0x4d, 0xaa, 0xe1, 0xd1, 0xf4, 0xa4, 0xa7, + 0x47, 0x59, 0xfa, 0xe4, 0xab, 0x73, 0xc9, 0x2d, 0x48, 0xce, 0xf9, 0x01, 0x39, 0x06, 0x48, 0x2e, + 0x7b, 0x5c, 0xe4, 0x96, 0xbf, 0x92, 0x53, 0xe0, 0x43, 0x10, 0xf4, 0x63, 0xc8, 0x91, 0x48, 0xaf, + 0xf7, 0x36, 0x5d, 0xf5, 0x55, 0x75, 0xd5, 0x57, 0x35, 0xd5, 0x05, 0xf7, 0x48, 0x74, 0xc5, 0xe6, + 0x6d, 0x1c, 0xd3, 0xf6, 0xd5, 0x51, 0xdb, 0x67, 0x9c, 0xb4, 0x27, 0x38, 0x21, 0xad, 0x98, 0x33, + 0xc1, 0xd0, 0x07, 0x4a, 0xdb, 0xc2, 0x31, 0x6d, 0x5d, 0x1d, 0xb5, 0xa4, 0x76, 0x6f, 0x7f, 0xd5, + 0x00, 0x07, 0x01, 0x27, 0x49, 0xa2, 0x6d, 0xd6, 0x01, 0x26, 0xd8, 0x7f, 0xc9, 0xa6, 0x53, 0x03, + 0x38, 0x58, 0x05, 0x5c, 0x08, 0x11, 0x7b, 0x29, 0xa7, 0x06, 0xd1, 0xd0, 0x08, 0x31, 0x8f, 0x49, + 0x3b, 0x26, 0xdc, 0x27, 0x91, 0x30, 0x9a, 0xef, 0xe7, 0x34, 0x09, 0xb9, 0xc4, 0x91, 0xa0, 0xbe, + 0x77, 0x45, 0x78, 0x42, 0x59, 0x64, 0x20, 0x77, 0x66, 0x8c, 0xcd, 0x42, 0xd2, 0x56, 0xa7, 0x49, + 0x3a, 0x6d, 0xe3, 0x68, 0x6e, 0x54, 0x0f, 0x6e, 0xaa, 0x82, 0x94, 0x63, 0xb1, 0x34, 0xbd, 0x77, + 0x53, 0x9f, 0x08, 0x9e, 0xfa, 0xe2, 0x5d, 0xd6, 0xbf, 0xe7, 0x38, 0x8e, 0x09, 0xcf, 0x12, 0x7f, + 0x90, 0x06, 0x31, 0x6e, 0xe3, 0x28, 0x62, 0x42, 0x39, 0x4d, 0xda, 0x97, 0x74, 0xc6, 0xb1, 0x30, + 0x64, 0xee, 0xdd, 0x5f, 0xd1, 0x27, 0x02, 0x8b, 0x34, 0x33, 0xbf, 0x7d, 0x85, 0x43, 0x1a, 0x60, + 0x41, 0xda, 0xd9, 0x87, 0x51, 0x3c, 0x5a, 0xe5, 0x2b, 0x61, 0xfe, 0x4b, 0x22, 0x3c, 0x16, 0x2f, + 0x83, 0x6f, 0xfe, 0x0a, 0x2a, 0xcf, 0x98, 0x8f, 0x43, 0x2a, 0xe6, 0xe8, 0x16, 0x94, 0x38, 0x99, + 0x51, 0x16, 0x35, 0xac, 0x03, 0xeb, 0xb0, 0xea, 0x9a, 0x13, 0x42, 0xb0, 0xf9, 0x8a, 0x45, 0xa4, + 0x51, 0x54, 0x52, 0xf5, 0x8d, 0xee, 0x40, 0x25, 0x49, 0x27, 0x9e, 0x92, 0x6f, 0x28, 0x79, 0x39, + 0x49, 0x27, 0x2f, 0x58, 0x44, 0x9a, 0xaf, 0xa0, 0xee, 0xa4, 0x34, 0x0c, 0xbe, 0xd4, 0x04, 0xa3, + 0xa7, 0x50, 0x36, 0x5c, 0x2b, 0xbf, 0xb5, 0xa3, 0xbb, 0x2d, 0xdd, 0x20, 0xb2, 0x1e, 0xad, 0x91, + 0xa9, 0x87, 0x41, 0xbb, 0x19, 0x16, 0x3d, 0x81, 0xca, 0x25, 0x11, 0x38, 0xc0, 0x02, 0xab, 0x9b, + 0x6b, 0x47, 0xb7, 0x5b, 0x9a, 0xcb, 0x56, 0xc6, 0x65, 0x6b, 0xa4, 0x98, 0x76, 0x17, 0xc0, 0xe6, + 0x3f, 0x2d, 0xa8, 0xf6, 0xbe, 0x12, 0x24, 0x4a, 0x4c, 0xe0, 0x11, 0xbe, 0x24, 0x26, 0x1d, 0xf5, + 0x8d, 0xf6, 0xa0, 0xe2, 0x63, 0x41, 0x66, 0x8c, 0xcf, 0x4d, 0x42, 0x8b, 0x33, 0xfa, 0x18, 0x76, + 0x65, 0x4c, 0x5e, 0x40, 0x12, 0x9f, 0xd3, 0x58, 0x30, 0x6e, 0x72, 0xdb, 0x91, 0xe2, 0xee, 0x42, + 0x8a, 0x3e, 0x5d, 0xa6, 0xb4, 0xa9, 0x42, 0xdb, 0x6f, 0xad, 0xf4, 0x7c, 0x2b, 0x4f, 0xc2, 0x32, + 0xad, 0x3d, 0xa8, 0x04, 0x34, 0xc1, 0x93, 0x90, 0x04, 0x8d, 0xad, 0x03, 0xeb, 0xb0, 0xe2, 0x2e, + 0xce, 0xcd, 0x7f, 0x6d, 0xc2, 0xe6, 0x19, 0x0b, 0x08, 0xda, 0x81, 0x22, 0x0d, 0x4c, 0xd8, 0x45, + 0x1a, 0xa0, 0x06, 0x94, 0xfd, 0x30, 0x4d, 0x04, 0xe1, 0x26, 0xe6, 0xec, 0x78, 0x8d, 0xa5, 0x8d, + 0xef, 0xc8, 0x12, 0xfa, 0x09, 0x54, 0x42, 0x53, 0x74, 0x13, 0xff, 0xdd, 0x35, 0xf1, 0x67, 0x7d, + 0xe1, 0x2e, 0xc0, 0xe8, 0x63, 0xd8, 0x9e, 0xc8, 0xac, 0xb2, 0x9f, 0x47, 0x65, 0x50, 0x75, 0x8a, + 0x0d, 0xcb, 0xad, 0x4f, 0xf2, 0x35, 0xff, 0x01, 0xec, 0xa6, 0x09, 0xe1, 0x1e, 0x9e, 0x91, 0x48, + 0x78, 0xaa, 0x08, 0x25, 0x15, 0xf8, 0xb6, 0x14, 0x77, 0xa4, 0xf4, 0x4c, 0x56, 0xa3, 0x05, 0x28, + 0x87, 0xcb, 0xbc, 0x96, 0x25, 0xb4, 0x5f, 0x70, 0xed, 0x05, 0x38, 0xf3, 0xfb, 0x02, 0x1a, 0x39, + 0xfc, 0xf5, 0x58, 0x2a, 0xdf, 0xa9, 0x12, 0xfd, 0x82, 0xfb, 0xbd, 0x85, 0xdb, 0x6b, 0x7d, 0xfa, + 0x33, 0x00, 0x92, 0xb5, 0x4e, 0xd2, 0xa8, 0x1e, 0x6c, 0x1c, 0xd6, 0x8e, 0xee, 0xad, 0xf1, 0xb6, + 0xe8, 0x2f, 0x37, 0x87, 0x97, 0xbd, 0xe3, 0x87, 0x54, 0x46, 0x35, 0x25, 0x58, 0xa4, 0x9c, 0x24, + 0x0d, 0x38, 0xd8, 0x90, 0xbd, 0xa3, 0xc5, 0x27, 0x46, 0x8a, 0xbe, 0x80, 0x0f, 0x43, 0x9a, 0x08, + 0x12, 0xd1, 0x68, 0xe6, 0x99, 0x21, 0x48, 0x92, 0x46, 0x4d, 0xdd, 0xb7, 0xb7, 0xe6, 0xbe, 0x8e, + 0xc6, 0xb8, 0x68, 0x61, 0xd6, 0xc9, 0xac, 0x9c, 0x3b, 0x70, 0x7b, 0x95, 0x3f, 0x4f, 0x76, 0x6b, + 0xf3, 0x6b, 0x0b, 0x2a, 0xcf, 0xb3, 0x8a, 0xff, 0x1a, 0x76, 0xa7, 0x34, 0x14, 0x84, 0x7b, 0x8b, + 0x6e, 0xb1, 0xd4, 0x85, 0xed, 0x35, 0x17, 0x66, 0x56, 0xad, 0x13, 0x65, 0x92, 0x1d, 0x7b, 0x91, + 0xe0, 0x73, 0x77, 0x67, 0x7a, 0x4d, 0xb8, 0xf7, 0x02, 0x3e, 0x5c, 0x03, 0x43, 0x36, 0x6c, 0xbc, + 0x24, 0x73, 0xd3, 0xc2, 0xf2, 0x13, 0xfd, 0x08, 0xb6, 0xae, 0x70, 0x98, 0x92, 0xf7, 0xfd, 0xcc, + 0x1a, 0xf5, 0xd3, 0xe2, 0x27, 0x56, 0xf3, 0xb7, 0xb0, 0xed, 0xa6, 0x91, 0xa0, 0x97, 0xe4, 0xfc, + 0x34, 0x12, 0x4f, 0x8e, 0xd0, 0x43, 0xd8, 0x0e, 0xc8, 0x14, 0xa7, 0xa1, 0xf0, 0x96, 0xbe, 0xb6, + 0xdd, 0xba, 0x11, 0x7e, 0x29, 0x65, 0xe8, 0x10, 0x6a, 0x5c, 0x5b, 0x79, 0x32, 0x04, 0xf5, 0x07, + 0x3b, 0xe5, 0xb7, 0xce, 0x26, 0x2f, 0x1e, 0x58, 0x2e, 0x18, 0xdd, 0x17, 0x64, 0xde, 0x7c, 0x63, + 0x01, 0x32, 0x17, 0x98, 0xf2, 0x9c, 0x84, 0x78, 0x86, 0x4e, 0x6f, 0xde, 0xa2, 0xc7, 0xd6, 0xde, + 0x4a, 0xc4, 0x0e, 0x63, 0xa1, 0xba, 0xd3, 0xa9, 0xbc, 0x75, 0xb6, 0xfe, 0x60, 0x15, 0x6d, 0xeb, + 0xdb, 0x63, 0x29, 0xbe, 0x3b, 0x96, 0xdf, 0x40, 0xad, 0x4f, 0x70, 0x40, 0xb8, 0x36, 0x7c, 0x98, + 0xe3, 0xcf, 0xf9, 0xe0, 0xad, 0xb3, 0xc3, 0xeb, 0x07, 0xd6, 0xe1, 0xeb, 0xd7, 0xd6, 0xd7, 0x96, + 0xf5, 0x8d, 0x55, 0xd0, 0x94, 0x3e, 0xca, 0x53, 0x5a, 0x75, 0x76, 0xdf, 0x3a, 0x75, 0x0e, 0x1a, + 0x54, 0x94, 0x20, 0xad, 0x95, 0x69, 0x7e, 0x90, 0xf3, 0x3d, 0x50, 0xf3, 0x1f, 0xfd, 0x12, 0x4a, + 0x17, 0x4a, 0x68, 0xd2, 0x7b, 0xb0, 0xa6, 0x13, 0x72, 0x56, 0xb9, 0x14, 0x8d, 0x1d, 0x3a, 0x82, + 0x92, 0x7c, 0xca, 0xa2, 0xc0, 0x94, 0xf4, 0x5b, 0x08, 0x72, 0x0d, 0xb2, 0xd9, 0x83, 0xaa, 0x76, + 0xfa, 0x1c, 0xc7, 0xe8, 0x13, 0x28, 0x6b, 0x57, 0x89, 0xe9, 0xc6, 0xf7, 0xc4, 0xe0, 0x66, 0xf0, + 0xe6, 0x5f, 0x2d, 0x80, 0x2e, 0x16, 0x78, 0xc4, 0x52, 0xee, 0x13, 0xf4, 0x08, 0x2a, 0x53, 0x1a, + 0x92, 0xe5, 0xb0, 0x5f, 0x70, 0xdc, 0x2f, 0xb8, 0x0b, 0x15, 0xfa, 0x21, 0xd4, 0x69, 0x14, 0xd2, + 0x88, 0x78, 0x93, 0xb9, 0x20, 0x89, 0x0a, 0xbb, 0xae, 0xa0, 0xaf, 0x8a, 0xb6, 0x84, 0xd6, 0xb4, + 0xda, 0x91, 0x5a, 0xd4, 0x82, 0x6d, 0x83, 0x4e, 0x04, 0xa7, 0xd1, 0xec, 0x46, 0x27, 0xf5, 0x0b, + 0xae, 0xf1, 0x36, 0x52, 0x6a, 0xc7, 0x86, 0x6a, 0x12, 0x13, 0x9f, 0x4e, 0x29, 0xe1, 0x68, 0xe3, + 0xbf, 0x8e, 0xd5, 0xfc, 0x93, 0x05, 0x35, 0x97, 0x08, 0x3e, 0x1f, 0xb2, 0x90, 0xfa, 0x73, 0xd4, + 0x87, 0x1d, 0x2e, 0x8f, 0x9e, 0x5c, 0x6d, 0x3c, 0x36, 0x9d, 0x1a, 0xea, 0x9b, 0xeb, 0x66, 0x96, + 0xde, 0x7e, 0x46, 0x42, 0xee, 0x02, 0xb3, 0xb9, 0x5b, 0x57, 0x96, 0x52, 0x3a, 0x98, 0x4e, 0xd1, + 0x67, 0x50, 0x8b, 0xd2, 0x4b, 0x4f, 0xca, 0xa8, 0x49, 0x44, 0x0e, 0xab, 0x9b, 0xfc, 0xeb, 0xdf, + 0x46, 0x73, 0x07, 0x51, 0x7a, 0xe9, 0x6a, 0x7c, 0xf3, 0xef, 0x16, 0xd8, 0x2e, 0xb9, 0x64, 0x82, + 0xe4, 0x48, 0xfc, 0x05, 0x54, 0xb2, 0x8d, 0x6a, 0xd1, 0xf1, 0x6b, 0xca, 0x21, 0x44, 0x7c, 0xce, + 0x69, 0xae, 0x1d, 0xca, 0x17, 0x5a, 0x84, 0xf6, 0xa1, 0x94, 0x5c, 0xe0, 0xa3, 0xa7, 0x3f, 0xbe, + 0xd9, 0xe7, 0x46, 0x8c, 0x3a, 0xa0, 0xb3, 0xf0, 0x62, 0xc5, 0x87, 0x79, 0xb0, 0xd6, 0x15, 0x3d, + 0xc7, 0x9a, 0x5b, 0xe3, 0xcb, 0x43, 0xf3, 0x2f, 0x16, 0xec, 0x76, 0x92, 0x79, 0xe4, 0xe7, 0x02, + 0x7f, 0x0a, 0x5b, 0xea, 0x85, 0x32, 0x51, 0xdf, 0x5f, 0xe3, 0x6f, 0x89, 0xee, 0x17, 0x5c, 0x8d, + 0x46, 0x9f, 0xc9, 0x75, 0x47, 0x72, 0x60, 0xe8, 0x7b, 0xb8, 0x36, 0x8e, 0xeb, 0x24, 0xf5, 0x0b, + 0xae, 0x31, 0x5a, 0x53, 0xee, 0xbf, 0x59, 0xb0, 0x3b, 0xe6, 0x38, 0x4a, 0x62, 0xc6, 0xc5, 0x48, + 0x2d, 0x5b, 0xe8, 0x6e, 0x7e, 0x05, 0x59, 0x32, 0xa2, 0x77, 0x91, 0xa7, 0x50, 0xf2, 0x59, 0x34, + 0xa5, 0xb3, 0xf7, 0xcc, 0x44, 0xf9, 0xc0, 0xca, 0x9b, 0x35, 0x18, 0x7d, 0x0a, 0x75, 0x39, 0xe1, + 0x03, 0xcf, 0x18, 0x6b, 0x1a, 0x3f, 0x5a, 0x31, 0xee, 0x44, 0x73, 0xd9, 0xd3, 0x0a, 0x7b, 0xac, + 0xa0, 0xce, 0x36, 0xd4, 0xb4, 0x91, 0x7e, 0x23, 0xde, 0x58, 0xd0, 0xc8, 0x06, 0x20, 0xc7, 0xbe, + 0x9c, 0x0b, 0x38, 0x1c, 0xea, 0xdd, 0x19, 0x3d, 0x5b, 0x3f, 0x06, 0xef, 0xe7, 0xb7, 0xb7, 0x15, + 0xab, 0x77, 0x4e, 0xc2, 0xfd, 0x35, 0x93, 0xf0, 0xda, 0x00, 0x6c, 0x41, 0xfd, 0x98, 0x45, 0x82, + 0xb3, 0x70, 0x18, 0xe2, 0x88, 0xa0, 0x07, 0x00, 0x34, 0x20, 0x91, 0x50, 0x04, 0x9b, 0x87, 0x24, + 0x27, 0x79, 0x7c, 0x08, 0xbb, 0x2e, 0x4b, 0x05, 0x8d, 0x66, 0x43, 0x4e, 0x19, 0x97, 0xeb, 0x49, + 0x0d, 0xca, 0xdd, 0xde, 0x49, 0xe7, 0xfc, 0xd9, 0xd8, 0x2e, 0xa0, 0x0a, 0x6c, 0xf6, 0x4f, 0x3f, + 0xef, 0xdb, 0xd6, 0xe3, 0x37, 0x16, 0x6c, 0xbb, 0xe4, 0x77, 0x29, 0x49, 0xc4, 0x73, 0x22, 0x2e, + 0x58, 0x80, 0x6e, 0x01, 0x7a, 0xde, 0x1b, 0xf7, 0x07, 0x5d, 0xef, 0xfc, 0x6c, 0x34, 0xec, 0x1d, + 0x9f, 0x9e, 0x9c, 0xf6, 0xba, 0x76, 0x01, 0x95, 0x61, 0xe3, 0xf3, 0xde, 0xd8, 0xb6, 0x94, 0x71, + 0xaf, 0xd3, 0xb5, 0x8b, 0xf2, 0x6b, 0x38, 0x18, 0x8d, 0xed, 0x0d, 0xa9, 0x1c, 0x9e, 0x8f, 0xed, + 0x4d, 0x04, 0x50, 0xea, 0xf6, 0x9e, 0xf5, 0xc6, 0x3d, 0x7b, 0x4b, 0x5e, 0x79, 0x3c, 0x38, 0x3b, + 0xeb, 0x1d, 0x8f, 0xed, 0x92, 0x3c, 0x0c, 0x86, 0xe3, 0xd3, 0xc1, 0xd9, 0xc8, 0x2e, 0xa3, 0x2a, + 0x6c, 0x8d, 0xdd, 0xce, 0x71, 0xcf, 0xae, 0xc8, 0xcf, 0x61, 0x67, 0x7c, 0xdc, 0xb7, 0xab, 0x8f, + 0x7f, 0x0e, 0xf6, 0x98, 0xe3, 0xe9, 0x94, 0xfa, 0x5d, 0xca, 0x89, 0xe2, 0x0e, 0xed, 0x42, 0xed, + 0x7a, 0x18, 0x35, 0x28, 0x9f, 0x9e, 0x39, 0x83, 0xf3, 0xb3, 0xae, 0x6d, 0xa1, 0x3a, 0x54, 0x06, + 0xe7, 0x63, 0x7d, 0x2a, 0x3a, 0xee, 0x7f, 0xfe, 0xfc, 0xbf, 0x3f, 0x6e, 0xdd, 0x42, 0x1f, 0xe9, + 0x22, 0xe8, 0x62, 0xea, 0x5e, 0xbd, 0x7a, 0xf2, 0x8f, 0xd7, 0xdf, 0xfc, 0xbb, 0x54, 0xb4, 0x2d, + 0xd8, 0xa7, 0x4c, 0x57, 0x29, 0xe6, 0xec, 0xab, 0xf9, 0x6a, 0x5f, 0x3b, 0x55, 0x07, 0x27, 0x64, + 0x28, 0x1b, 0x65, 0x68, 0x0d, 0xeb, 0x93, 0x92, 0xea, 0x99, 0x27, 0xff, 0x0f, 0x00, 0x00, 0xff, + 0xff, 0xf7, 0x8b, 0xc8, 0x9a, 0xd8, 0x0d, 0x00, 0x00, } -func (m *Metadata) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Metadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.FilterMetadata == nil { - m.FilterMetadata = make(map[string]*types.Struct) - } - var mapkey string - var mapvalue *types.Struct - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthBase - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthBase - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthBase - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthBase - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Struct{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.FilterMetadata[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RuntimeUInt32) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RuntimeUInt32: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RuntimeUInt32: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultValue", wireType) - } - m.DefaultValue = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DefaultValue |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HeaderValue) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HeaderValue: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeaderValue: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HeaderValueOption) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HeaderValueOption: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeaderValueOption: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &HeaderValue{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Append", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Append == nil { - m.Append = &types.BoolValue{} - } - if err := m.Append.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HeaderMap) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HeaderMap: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeaderMap: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Headers = append(m.Headers, &HeaderValue{}) - if err := m.Headers[len(m.Headers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DataSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DataSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DataSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filename", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Specifier = &DataSource_Filename{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InlineBytes", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := make([]byte, postIndex-iNdEx) - copy(v, dAtA[iNdEx:postIndex]) - m.Specifier = &DataSource_InlineBytes{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InlineString", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Specifier = &DataSource_InlineString{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TransportSocket) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TransportSocket: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TransportSocket: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &TransportSocket_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &TransportSocket_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SocketOption) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SocketOption: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SocketOption: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Description = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) - } - m.Level = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Level |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - m.Name = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Name |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IntValue", wireType) - } - var v int64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Value = &SocketOption_IntValue{v} - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BufValue", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := make([]byte, postIndex-iNdEx) - copy(v, dAtA[iNdEx:postIndex]) - m.Value = &SocketOption_BufValue{v} - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - m.State = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.State |= SocketOption_SocketState(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RuntimeFractionalPercent) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RuntimeFractionalPercent: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RuntimeFractionalPercent: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultValue", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DefaultValue == nil { - m.DefaultValue = &_type.FractionalPercent{} - } - if err := m.DefaultValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ControlPlane) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ControlPlane: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ControlPlane: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Identifier", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBase - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthBase - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBase - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Identifier = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBase(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthBase - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipBase(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowBase - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowBase - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowBase - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthBase - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthBase - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowBase - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipBase(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthBase - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthBase = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowBase = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/base.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/base.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _base_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on Locality with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Locality) Validate() error { @@ -103,6 +106,173 @@ ErrorName() string } = LocalityValidationError{} +// Validate checks the field values on BuildVersion with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *BuildVersion) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetVersion()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return BuildVersionValidationError{ + field: "Version", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return BuildVersionValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// BuildVersionValidationError is the validation error returned by +// BuildVersion.Validate if the designated constraints aren't met. +type BuildVersionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e BuildVersionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e BuildVersionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e BuildVersionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e BuildVersionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e BuildVersionValidationError) ErrorName() string { return "BuildVersionValidationError" } + +// Error satisfies the builtin error interface +func (e BuildVersionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sBuildVersion.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = BuildVersionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = BuildVersionValidationError{} + +// Validate checks the field values on Extension with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Extension) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Name + + // no validation rules for Category + + // no validation rules for TypeDescriptor + + if v, ok := interface{}(m.GetVersion()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExtensionValidationError{ + field: "Version", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Disabled + + return nil +} + +// ExtensionValidationError is the validation error returned by +// Extension.Validate if the designated constraints aren't met. +type ExtensionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ExtensionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ExtensionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ExtensionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ExtensionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ExtensionValidationError) ErrorName() string { return "ExtensionValidationError" } + +// Error satisfies the builtin error interface +func (e ExtensionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sExtension.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ExtensionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ExtensionValidationError{} + // Validate checks the field values on Node with the rules defined in the proto // definition for this message. If any rules are violated, an error is returned. func (m *Node) Validate() error { @@ -114,37 +284,78 @@ // no validation rules for Cluster - { - tmp := m.GetMetadata() + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetLocality()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeValidationError{ + field: "Locality", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for BuildVersion + + // no validation rules for UserAgentName + + for idx, item := range m.GetExtensions() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeValidationError{ - field: "Metadata", + field: fmt.Sprintf("Extensions[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - } - { - tmp := m.GetLocality() + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetListeningAddresses() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeValidationError{ - field: "Locality", + field: fmt.Sprintf("ListeningAddresses[%v]", idx), reason: "embedded message failed validation", cause: err, } } } + } - // no validation rules for BuildVersion + switch m.UserAgentVersionType.(type) { + + case *Node_UserAgentVersion: + // no validation rules for UserAgentVersion + + case *Node_UserAgentBuildVersion: + + if v, ok := interface{}(m.GetUserAgentBuildVersion()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeValidationError{ + field: "UserAgentBuildVersion", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } return nil } @@ -210,7 +421,22 @@ return nil } - // no validation rules for FilterMetadata + for key, val := range m.GetFilterMetadata() { + _ = val + + // no validation rules for FilterMetadata[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataValidationError{ + field: fmt.Sprintf("FilterMetadata[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } return nil } @@ -343,6 +569,97 @@ ErrorName() string } = RuntimeUInt32ValidationError{} +// Validate checks the field values on RuntimeFeatureFlag with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RuntimeFeatureFlag) Validate() error { + if m == nil { + return nil + } + + if m.GetDefaultValue() == nil { + return RuntimeFeatureFlagValidationError{ + field: "DefaultValue", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetDefaultValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuntimeFeatureFlagValidationError{ + field: "DefaultValue", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetRuntimeKey()) < 1 { + return RuntimeFeatureFlagValidationError{ + field: "RuntimeKey", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// RuntimeFeatureFlagValidationError is the validation error returned by +// RuntimeFeatureFlag.Validate if the designated constraints aren't met. +type RuntimeFeatureFlagValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RuntimeFeatureFlagValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RuntimeFeatureFlagValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RuntimeFeatureFlagValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RuntimeFeatureFlagValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RuntimeFeatureFlagValidationError) ErrorName() string { + return "RuntimeFeatureFlagValidationError" +} + +// Error satisfies the builtin error interface +func (e RuntimeFeatureFlagValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRuntimeFeatureFlag.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RuntimeFeatureFlagValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RuntimeFeatureFlagValidationError{} + // Validate checks the field values on HeaderValue with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -358,6 +675,13 @@ } } + if !_HeaderValue_Key_Pattern.MatchString(m.GetKey()) { + return HeaderValueValidationError{ + field: "Key", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + if len(m.GetValue()) > 16384 { return HeaderValueValidationError{ field: "Value", @@ -365,6 +689,13 @@ } } + if !_HeaderValue_Value_Pattern.MatchString(m.GetValue()) { + return HeaderValueValidationError{ + field: "Value", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + return nil } @@ -422,6 +753,10 @@ ErrorName() string } = HeaderValueValidationError{} +var _HeaderValue_Key_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _HeaderValue_Value_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + // Validate checks the field values on HeaderValueOption with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -437,32 +772,22 @@ } } - { - tmp := m.GetHeader() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HeaderValueOptionValidationError{ - field: "Header", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHeader()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HeaderValueOptionValidationError{ + field: "Header", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetAppend() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HeaderValueOptionValidationError{ - field: "Append", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAppend()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HeaderValueOptionValidationError{ + field: "Append", + reason: "embedded message failed validation", + cause: err, } } } @@ -536,17 +861,12 @@ for idx, item := range m.GetHeaders() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HeaderMapValidationError{ - field: fmt.Sprintf("Headers[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HeaderMapValidationError{ + field: fmt.Sprintf("Headers[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -711,65 +1031,238 @@ ErrorName() string } = DataSourceValidationError{} -// Validate checks the field values on TransportSocket with the rules defined +// Validate checks the field values on RetryPolicy with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *RetryPolicy) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetRetryBackOff()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: "RetryBackOff", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetNumRetries()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: "NumRetries", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RetryPolicyValidationError is the validation error returned by +// RetryPolicy.Validate if the designated constraints aren't met. +type RetryPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RetryPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RetryPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RetryPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RetryPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RetryPolicyValidationError) ErrorName() string { return "RetryPolicyValidationError" } + +// Error satisfies the builtin error interface +func (e RetryPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRetryPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RetryPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RetryPolicyValidationError{} + +// Validate checks the field values on RemoteDataSource with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. -func (m *TransportSocket) Validate() error { +func (m *RemoteDataSource) Validate() error { if m == nil { return nil } - if len(m.GetName()) < 1 { - return TransportSocketValidationError{ - field: "Name", + if m.GetHttpUri() == nil { + return RemoteDataSourceValidationError{ + field: "HttpUri", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetHttpUri()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RemoteDataSourceValidationError{ + field: "HttpUri", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetSha256()) < 1 { + return RemoteDataSourceValidationError{ + field: "Sha256", reason: "value length must be at least 1 bytes", } } - switch m.ConfigType.(type) { + if v, ok := interface{}(m.GetRetryPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RemoteDataSourceValidationError{ + field: "RetryPolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } - case *TransportSocket_Config: + return nil +} + +// RemoteDataSourceValidationError is the validation error returned by +// RemoteDataSource.Validate if the designated constraints aren't met. +type RemoteDataSourceValidationError struct { + field string + reason string + cause error + key bool +} - { - tmp := m.GetConfig() +// Field function returns field value. +func (e RemoteDataSourceValidationError) Field() string { return e.field } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { +// Reason function returns reason value. +func (e RemoteDataSourceValidationError) Reason() string { return e.reason } - if err := v.Validate(); err != nil { - return TransportSocketValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } +// Cause function returns cause value. +func (e RemoteDataSourceValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RemoteDataSourceValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RemoteDataSourceValidationError) ErrorName() string { return "RemoteDataSourceValidationError" } + +// Error satisfies the builtin error interface +func (e RemoteDataSourceValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRemoteDataSource.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RemoteDataSourceValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RemoteDataSourceValidationError{} + +// Validate checks the field values on AsyncDataSource with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *AsyncDataSource) Validate() error { + if m == nil { + return nil + } + + switch m.Specifier.(type) { + + case *AsyncDataSource_Local: + + if v, ok := interface{}(m.GetLocal()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AsyncDataSourceValidationError{ + field: "Local", + reason: "embedded message failed validation", + cause: err, } } } - case *TransportSocket_TypedConfig: - - { - tmp := m.GetTypedConfig() + case *AsyncDataSource_Remote: - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TransportSocketValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRemote()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AsyncDataSourceValidationError{ + field: "Remote", + reason: "embedded message failed validation", + cause: err, } } } + default: + return AsyncDataSourceValidationError{ + field: "Specifier", + reason: "value is required", + } + } return nil } -// TransportSocketValidationError is the validation error returned by -// TransportSocket.Validate if the designated constraints aren't met. -type TransportSocketValidationError struct { +// AsyncDataSourceValidationError is the validation error returned by +// AsyncDataSource.Validate if the designated constraints aren't met. +type AsyncDataSourceValidationError struct { field string reason string cause error @@ -777,22 +1270,22 @@ } // Field function returns field value. -func (e TransportSocketValidationError) Field() string { return e.field } +func (e AsyncDataSourceValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e TransportSocketValidationError) Reason() string { return e.reason } +func (e AsyncDataSourceValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e TransportSocketValidationError) Cause() error { return e.cause } +func (e AsyncDataSourceValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e TransportSocketValidationError) Key() bool { return e.key } +func (e AsyncDataSourceValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e TransportSocketValidationError) ErrorName() string { return "TransportSocketValidationError" } +func (e AsyncDataSourceValidationError) ErrorName() string { return "AsyncDataSourceValidationError" } // Error satisfies the builtin error interface -func (e TransportSocketValidationError) Error() string { +func (e AsyncDataSourceValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -804,14 +1297,14 @@ } return fmt.Sprintf( - "invalid %sTransportSocket.%s: %s%s", + "invalid %sAsyncDataSource.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = TransportSocketValidationError{} +var _ error = AsyncDataSourceValidationError{} var _ interface { Field() string @@ -819,41 +1312,47 @@ Key() bool Cause() error ErrorName() string -} = TransportSocketValidationError{} +} = AsyncDataSourceValidationError{} -// Validate checks the field values on SocketOption with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *SocketOption) Validate() error { +// Validate checks the field values on TransportSocket with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *TransportSocket) Validate() error { if m == nil { return nil } - // no validation rules for Description - - // no validation rules for Level - - // no validation rules for Name - - if _, ok := SocketOption_SocketState_name[int32(m.GetState())]; !ok { - return SocketOptionValidationError{ - field: "State", - reason: "value must be one of the defined enum values", + if len(m.GetName()) < 1 { + return TransportSocketValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", } } - switch m.Value.(type) { + switch m.ConfigType.(type) { - case *SocketOption_IntValue: - // no validation rules for IntValue + case *TransportSocket_Config: - case *SocketOption_BufValue: - // no validation rules for BufValue + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TransportSocketValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } - default: - return SocketOptionValidationError{ - field: "Value", - reason: "value is required", + case *TransportSocket_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TransportSocketValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } } } @@ -861,9 +1360,9 @@ return nil } -// SocketOptionValidationError is the validation error returned by -// SocketOption.Validate if the designated constraints aren't met. -type SocketOptionValidationError struct { +// TransportSocketValidationError is the validation error returned by +// TransportSocket.Validate if the designated constraints aren't met. +type TransportSocketValidationError struct { field string reason string cause error @@ -871,22 +1370,22 @@ } // Field function returns field value. -func (e SocketOptionValidationError) Field() string { return e.field } +func (e TransportSocketValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e SocketOptionValidationError) Reason() string { return e.reason } +func (e TransportSocketValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e SocketOptionValidationError) Cause() error { return e.cause } +func (e TransportSocketValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e SocketOptionValidationError) Key() bool { return e.key } +func (e TransportSocketValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e SocketOptionValidationError) ErrorName() string { return "SocketOptionValidationError" } +func (e TransportSocketValidationError) ErrorName() string { return "TransportSocketValidationError" } // Error satisfies the builtin error interface -func (e SocketOptionValidationError) Error() string { +func (e TransportSocketValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -898,14 +1397,14 @@ } return fmt.Sprintf( - "invalid %sSocketOption.%s: %s%s", + "invalid %sTransportSocket.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = SocketOptionValidationError{} +var _ error = TransportSocketValidationError{} var _ interface { Field() string @@ -913,7 +1412,7 @@ Key() bool Cause() error ErrorName() string -} = SocketOptionValidationError{} +} = TransportSocketValidationError{} // Validate checks the field values on RuntimeFractionalPercent with the rules // defined in the proto definition for this message. If any rules are @@ -930,17 +1429,12 @@ } } - { - tmp := m.GetDefaultValue() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RuntimeFractionalPercentValidationError{ - field: "DefaultValue", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDefaultValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuntimeFractionalPercentValidationError{ + field: "DefaultValue", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,54 +1,65 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/config_source.proto -package core +package envoy_api_v2_core import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - time "time" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ApiVersion int32 + +const ( + ApiVersion_AUTO ApiVersion = 0 + ApiVersion_V2 ApiVersion = 1 + ApiVersion_V3 ApiVersion = 2 +) + +var ApiVersion_name = map[int32]string{ + 0: "AUTO", + 1: "V2", + 2: "V3", +} + +var ApiVersion_value = map[string]int32{ + "AUTO": 0, + "V2": 1, + "V3": 2, +} + +func (x ApiVersion) String() string { + return proto.EnumName(ApiVersion_name, int32(x)) +} + +func (ApiVersion) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_1ffcc55cf4c30535, []int{0} +} -// APIs may be fetched via either REST or gRPC. type ApiConfigSource_ApiType int32 const ( - // Ideally this would be 'reserved 0' but one can't reserve the default - // value. Instead we throw an exception if this is ever used. ApiConfigSource_UNSUPPORTED_REST_LEGACY ApiConfigSource_ApiType = 0 // Deprecated: Do not use. - // REST-JSON v2 API. The `canonical JSON encoding - // `_ for - // the v2 protos is used. - ApiConfigSource_REST ApiConfigSource_ApiType = 1 - // gRPC v2 API. - ApiConfigSource_GRPC ApiConfigSource_ApiType = 2 - // Using the delta xDS gRPC service, i.e. DeltaDiscovery{Request,Response} - // rather than Discovery{Request,Response}. Rather than sending Envoy the entire state - // with every update, the xDS server only sends what has changed since the last update. - // - // DELTA_GRPC is not yet entirely implemented! Initially, only CDS is available. - // Do not use for other xDSes. TODO(fredlas) update/remove this warning when appropriate. - ApiConfigSource_DELTA_GRPC ApiConfigSource_ApiType = 3 + ApiConfigSource_REST ApiConfigSource_ApiType = 1 + ApiConfigSource_GRPC ApiConfigSource_ApiType = 2 + ApiConfigSource_DELTA_GRPC ApiConfigSource_ApiType = 3 ) var ApiConfigSource_ApiType_name = map[int32]string{ @@ -73,32 +84,18 @@ return fileDescriptor_1ffcc55cf4c30535, []int{0, 0} } -// API configuration source. This identifies the API type and cluster that Envoy -// will use to fetch an xDS API. type ApiConfigSource struct { - ApiType ApiConfigSource_ApiType `protobuf:"varint,1,opt,name=api_type,json=apiType,proto3,enum=envoy.api.v2.core.ApiConfigSource_ApiType" json:"api_type,omitempty"` - // Cluster names should be used only with REST. If > 1 - // cluster is defined, clusters will be cycled through if any kind of failure - // occurs. - // - // .. note:: - // - // The cluster with name ``cluster_name`` must be statically defined and its - // type must not be ``EDS``. - ClusterNames []string `protobuf:"bytes,2,rep,name=cluster_names,json=clusterNames,proto3" json:"cluster_names,omitempty"` - // Multiple gRPC services be provided for GRPC. If > 1 cluster is defined, - // services will be cycled through if any kind of failure occurs. - GrpcServices []*GrpcService `protobuf:"bytes,4,rep,name=grpc_services,json=grpcServices,proto3" json:"grpc_services,omitempty"` - // For REST APIs, the delay between successive polls. - RefreshDelay *time.Duration `protobuf:"bytes,3,opt,name=refresh_delay,json=refreshDelay,proto3,stdduration" json:"refresh_delay,omitempty"` - // For REST APIs, the request timeout. If not set, a default value of 1s will be used. - RequestTimeout *time.Duration `protobuf:"bytes,5,opt,name=request_timeout,json=requestTimeout,proto3,stdduration" json:"request_timeout,omitempty"` - // For GRPC APIs, the rate limit settings. If present, discovery requests made by Envoy will be - // rate limited. - RateLimitSettings *RateLimitSettings `protobuf:"bytes,6,opt,name=rate_limit_settings,json=rateLimitSettings,proto3" json:"rate_limit_settings,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ApiType ApiConfigSource_ApiType `protobuf:"varint,1,opt,name=api_type,json=apiType,proto3,enum=envoy.api.v2.core.ApiConfigSource_ApiType" json:"api_type,omitempty"` + TransportApiVersion ApiVersion `protobuf:"varint,8,opt,name=transport_api_version,json=transportApiVersion,proto3,enum=envoy.api.v2.core.ApiVersion" json:"transport_api_version,omitempty"` + ClusterNames []string `protobuf:"bytes,2,rep,name=cluster_names,json=clusterNames,proto3" json:"cluster_names,omitempty"` + GrpcServices []*GrpcService `protobuf:"bytes,4,rep,name=grpc_services,json=grpcServices,proto3" json:"grpc_services,omitempty"` + RefreshDelay *duration.Duration `protobuf:"bytes,3,opt,name=refresh_delay,json=refreshDelay,proto3" json:"refresh_delay,omitempty"` + RequestTimeout *duration.Duration `protobuf:"bytes,5,opt,name=request_timeout,json=requestTimeout,proto3" json:"request_timeout,omitempty"` + RateLimitSettings *RateLimitSettings `protobuf:"bytes,6,opt,name=rate_limit_settings,json=rateLimitSettings,proto3" json:"rate_limit_settings,omitempty"` + SetNodeOnFirstMessageOnly bool `protobuf:"varint,7,opt,name=set_node_on_first_message_only,json=setNodeOnFirstMessageOnly,proto3" json:"set_node_on_first_message_only,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ApiConfigSource) Reset() { *m = ApiConfigSource{} } @@ -107,26 +104,18 @@ func (*ApiConfigSource) Descriptor() ([]byte, []int) { return fileDescriptor_1ffcc55cf4c30535, []int{0} } + func (m *ApiConfigSource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ApiConfigSource.Unmarshal(m, b) } func (m *ApiConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ApiConfigSource.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ApiConfigSource.Marshal(b, m, deterministic) } func (m *ApiConfigSource) XXX_Merge(src proto.Message) { xxx_messageInfo_ApiConfigSource.Merge(m, src) } func (m *ApiConfigSource) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ApiConfigSource.Size(m) } func (m *ApiConfigSource) XXX_DiscardUnknown() { xxx_messageInfo_ApiConfigSource.DiscardUnknown(m) @@ -141,6 +130,13 @@ return ApiConfigSource_UNSUPPORTED_REST_LEGACY } +func (m *ApiConfigSource) GetTransportApiVersion() ApiVersion { + if m != nil { + return m.TransportApiVersion + } + return ApiVersion_AUTO +} + func (m *ApiConfigSource) GetClusterNames() []string { if m != nil { return m.ClusterNames @@ -155,14 +151,14 @@ return nil } -func (m *ApiConfigSource) GetRefreshDelay() *time.Duration { +func (m *ApiConfigSource) GetRefreshDelay() *duration.Duration { if m != nil { return m.RefreshDelay } return nil } -func (m *ApiConfigSource) GetRequestTimeout() *time.Duration { +func (m *ApiConfigSource) GetRequestTimeout() *duration.Duration { if m != nil { return m.RequestTimeout } @@ -176,9 +172,13 @@ return nil } -// Aggregated Discovery Service (ADS) options. This is currently empty, but when -// set in :ref:`ConfigSource ` can be used to -// specify that ADS is to be used. +func (m *ApiConfigSource) GetSetNodeOnFirstMessageOnly() bool { + if m != nil { + return m.SetNodeOnFirstMessageOnly + } + return false +} + type AggregatedConfigSource struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -191,26 +191,18 @@ func (*AggregatedConfigSource) Descriptor() ([]byte, []int) { return fileDescriptor_1ffcc55cf4c30535, []int{1} } + func (m *AggregatedConfigSource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AggregatedConfigSource.Unmarshal(m, b) } func (m *AggregatedConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AggregatedConfigSource.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_AggregatedConfigSource.Marshal(b, m, deterministic) } func (m *AggregatedConfigSource) XXX_Merge(src proto.Message) { xxx_messageInfo_AggregatedConfigSource.Merge(m, src) } func (m *AggregatedConfigSource) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AggregatedConfigSource.Size(m) } func (m *AggregatedConfigSource) XXX_DiscardUnknown() { xxx_messageInfo_AggregatedConfigSource.DiscardUnknown(m) @@ -218,45 +210,63 @@ var xxx_messageInfo_AggregatedConfigSource proto.InternalMessageInfo -// Rate Limit settings to be applied for discovery requests made by Envoy. +type SelfConfigSource struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SelfConfigSource) Reset() { *m = SelfConfigSource{} } +func (m *SelfConfigSource) String() string { return proto.CompactTextString(m) } +func (*SelfConfigSource) ProtoMessage() {} +func (*SelfConfigSource) Descriptor() ([]byte, []int) { + return fileDescriptor_1ffcc55cf4c30535, []int{2} +} + +func (m *SelfConfigSource) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SelfConfigSource.Unmarshal(m, b) +} +func (m *SelfConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SelfConfigSource.Marshal(b, m, deterministic) +} +func (m *SelfConfigSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfConfigSource.Merge(m, src) +} +func (m *SelfConfigSource) XXX_Size() int { + return xxx_messageInfo_SelfConfigSource.Size(m) +} +func (m *SelfConfigSource) XXX_DiscardUnknown() { + xxx_messageInfo_SelfConfigSource.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfConfigSource proto.InternalMessageInfo + type RateLimitSettings struct { - // Maximum number of tokens to be used for rate limiting discovery request calls. If not set, a - // default value of 100 will be used. - MaxTokens *types.UInt32Value `protobuf:"bytes,1,opt,name=max_tokens,json=maxTokens,proto3" json:"max_tokens,omitempty"` - // Rate at which tokens will be filled per second. If not set, a default fill rate of 10 tokens - // per second will be used. - FillRate *types.DoubleValue `protobuf:"bytes,2,opt,name=fill_rate,json=fillRate,proto3" json:"fill_rate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MaxTokens *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_tokens,json=maxTokens,proto3" json:"max_tokens,omitempty"` + FillRate *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=fill_rate,json=fillRate,proto3" json:"fill_rate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RateLimitSettings) Reset() { *m = RateLimitSettings{} } func (m *RateLimitSettings) String() string { return proto.CompactTextString(m) } func (*RateLimitSettings) ProtoMessage() {} func (*RateLimitSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_1ffcc55cf4c30535, []int{2} + return fileDescriptor_1ffcc55cf4c30535, []int{3} } + func (m *RateLimitSettings) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_RateLimitSettings.Unmarshal(m, b) } func (m *RateLimitSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RateLimitSettings.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_RateLimitSettings.Marshal(b, m, deterministic) } func (m *RateLimitSettings) XXX_Merge(src proto.Message) { xxx_messageInfo_RateLimitSettings.Merge(m, src) } func (m *RateLimitSettings) XXX_Size() int { - return m.Size() + return xxx_messageInfo_RateLimitSettings.Size(m) } func (m *RateLimitSettings) XXX_DiscardUnknown() { xxx_messageInfo_RateLimitSettings.DiscardUnknown(m) @@ -264,72 +274,52 @@ var xxx_messageInfo_RateLimitSettings proto.InternalMessageInfo -func (m *RateLimitSettings) GetMaxTokens() *types.UInt32Value { +func (m *RateLimitSettings) GetMaxTokens() *wrappers.UInt32Value { if m != nil { return m.MaxTokens } return nil } -func (m *RateLimitSettings) GetFillRate() *types.DoubleValue { +func (m *RateLimitSettings) GetFillRate() *wrappers.DoubleValue { if m != nil { return m.FillRate } return nil } -// Configuration for :ref:`listeners `, :ref:`clusters -// `, :ref:`routes -// `, :ref:`endpoints -// ` etc. may either be sourced from the -// filesystem or from an xDS API source. Filesystem configs are watched with -// inotify for updates. type ConfigSource struct { // Types that are valid to be assigned to ConfigSourceSpecifier: // *ConfigSource_Path // *ConfigSource_ApiConfigSource // *ConfigSource_Ads + // *ConfigSource_Self ConfigSourceSpecifier isConfigSource_ConfigSourceSpecifier `protobuf_oneof:"config_source_specifier"` - // Optional initialization timeout. - // When this timeout is specified, Envoy will wait no longer than the specified time for first - // config response on this xDS subscription during the :ref:`initialization process - // `. After reaching the timeout, Envoy will move to the next - // initialization phase, even if the first config is not delivered yet. The timer is activated - // when the xDS API subscription starts, and is disarmed on first config update or on error. 0 - // means no timeout - Envoy will wait indefinitely for the first xDS config (unless another - // timeout applies). Default 0. - InitialFetchTimeout *types.Duration `protobuf:"bytes,4,opt,name=initial_fetch_timeout,json=initialFetchTimeout,proto3" json:"initial_fetch_timeout,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + InitialFetchTimeout *duration.Duration `protobuf:"bytes,4,opt,name=initial_fetch_timeout,json=initialFetchTimeout,proto3" json:"initial_fetch_timeout,omitempty"` + ResourceApiVersion ApiVersion `protobuf:"varint,6,opt,name=resource_api_version,json=resourceApiVersion,proto3,enum=envoy.api.v2.core.ApiVersion" json:"resource_api_version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ConfigSource) Reset() { *m = ConfigSource{} } func (m *ConfigSource) String() string { return proto.CompactTextString(m) } func (*ConfigSource) ProtoMessage() {} func (*ConfigSource) Descriptor() ([]byte, []int) { - return fileDescriptor_1ffcc55cf4c30535, []int{3} + return fileDescriptor_1ffcc55cf4c30535, []int{4} } + func (m *ConfigSource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ConfigSource.Unmarshal(m, b) } func (m *ConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ConfigSource.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ConfigSource.Marshal(b, m, deterministic) } func (m *ConfigSource) XXX_Merge(src proto.Message) { xxx_messageInfo_ConfigSource.Merge(m, src) } func (m *ConfigSource) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ConfigSource.Size(m) } func (m *ConfigSource) XXX_DiscardUnknown() { xxx_messageInfo_ConfigSource.DiscardUnknown(m) @@ -339,24 +329,31 @@ type isConfigSource_ConfigSourceSpecifier interface { isConfigSource_ConfigSourceSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type ConfigSource_Path struct { Path string `protobuf:"bytes,1,opt,name=path,proto3,oneof"` } + type ConfigSource_ApiConfigSource struct { ApiConfigSource *ApiConfigSource `protobuf:"bytes,2,opt,name=api_config_source,json=apiConfigSource,proto3,oneof"` } + type ConfigSource_Ads struct { Ads *AggregatedConfigSource `protobuf:"bytes,3,opt,name=ads,proto3,oneof"` } -func (*ConfigSource_Path) isConfigSource_ConfigSourceSpecifier() {} +type ConfigSource_Self struct { + Self *SelfConfigSource `protobuf:"bytes,5,opt,name=self,proto3,oneof"` +} + +func (*ConfigSource_Path) isConfigSource_ConfigSourceSpecifier() {} + func (*ConfigSource_ApiConfigSource) isConfigSource_ConfigSourceSpecifier() {} -func (*ConfigSource_Ads) isConfigSource_ConfigSourceSpecifier() {} + +func (*ConfigSource_Ads) isConfigSource_ConfigSourceSpecifier() {} + +func (*ConfigSource_Self) isConfigSource_ConfigSourceSpecifier() {} func (m *ConfigSource) GetConfigSourceSpecifier() isConfigSource_ConfigSourceSpecifier { if m != nil { @@ -386,106 +383,43 @@ return nil } -func (m *ConfigSource) GetInitialFetchTimeout() *types.Duration { - if m != nil { - return m.InitialFetchTimeout +func (m *ConfigSource) GetSelf() *SelfConfigSource { + if x, ok := m.GetConfigSourceSpecifier().(*ConfigSource_Self); ok { + return x.Self } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*ConfigSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _ConfigSource_OneofMarshaler, _ConfigSource_OneofUnmarshaler, _ConfigSource_OneofSizer, []interface{}{ - (*ConfigSource_Path)(nil), - (*ConfigSource_ApiConfigSource)(nil), - (*ConfigSource_Ads)(nil), - } -} - -func _ConfigSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*ConfigSource) - // config_source_specifier - switch x := m.ConfigSourceSpecifier.(type) { - case *ConfigSource_Path: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Path) - case *ConfigSource_ApiConfigSource: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ApiConfigSource); err != nil { - return err - } - case *ConfigSource_Ads: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Ads); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("ConfigSource.ConfigSourceSpecifier has unexpected type %T", x) +func (m *ConfigSource) GetInitialFetchTimeout() *duration.Duration { + if m != nil { + return m.InitialFetchTimeout } return nil } -func _ConfigSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*ConfigSource) - switch tag { - case 1: // config_source_specifier.path - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ConfigSourceSpecifier = &ConfigSource_Path{x} - return true, err - case 2: // config_source_specifier.api_config_source - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(ApiConfigSource) - err := b.DecodeMessage(msg) - m.ConfigSourceSpecifier = &ConfigSource_ApiConfigSource{msg} - return true, err - case 3: // config_source_specifier.ads - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(AggregatedConfigSource) - err := b.DecodeMessage(msg) - m.ConfigSourceSpecifier = &ConfigSource_Ads{msg} - return true, err - default: - return false, nil +func (m *ConfigSource) GetResourceApiVersion() ApiVersion { + if m != nil { + return m.ResourceApiVersion } + return ApiVersion_AUTO } -func _ConfigSource_OneofSizer(msg proto.Message) (n int) { - m := msg.(*ConfigSource) - // config_source_specifier - switch x := m.ConfigSourceSpecifier.(type) { - case *ConfigSource_Path: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Path))) - n += len(x.Path) - case *ConfigSource_ApiConfigSource: - s := proto.Size(x.ApiConfigSource) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *ConfigSource_Ads: - s := proto.Size(x.Ads) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ConfigSource) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ConfigSource_Path)(nil), + (*ConfigSource_ApiConfigSource)(nil), + (*ConfigSource_Ads)(nil), + (*ConfigSource_Self)(nil), } - return n } func init() { + proto.RegisterEnum("envoy.api.v2.core.ApiVersion", ApiVersion_name, ApiVersion_value) proto.RegisterEnum("envoy.api.v2.core.ApiConfigSource_ApiType", ApiConfigSource_ApiType_name, ApiConfigSource_ApiType_value) proto.RegisterType((*ApiConfigSource)(nil), "envoy.api.v2.core.ApiConfigSource") proto.RegisterType((*AggregatedConfigSource)(nil), "envoy.api.v2.core.AggregatedConfigSource") + proto.RegisterType((*SelfConfigSource)(nil), "envoy.api.v2.core.SelfConfigSource") proto.RegisterType((*RateLimitSettings)(nil), "envoy.api.v2.core.RateLimitSettings") proto.RegisterType((*ConfigSource)(nil), "envoy.api.v2.core.ConfigSource") } @@ -495,1372 +429,61 @@ } var fileDescriptor_1ffcc55cf4c30535 = []byte{ - // 707 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x4f, 0x4f, 0xdb, 0x48, - 0x14, 0xcf, 0x24, 0x01, 0x92, 0x49, 0x80, 0x64, 0x60, 0x17, 0x2f, 0x5a, 0x85, 0x6c, 0x96, 0x95, - 0xb2, 0x1c, 0x6c, 0x29, 0x1c, 0x57, 0x7b, 0xc8, 0x3f, 0x60, 0xb5, 0x94, 0xa6, 0x13, 0x53, 0xa9, - 0xa7, 0xd1, 0xe0, 0x4c, 0xcc, 0xa8, 0x8e, 0xc7, 0x1d, 0x8f, 0x53, 0x72, 0xed, 0x27, 0xe8, 0xb1, - 0x97, 0x5e, 0xab, 0xaa, 0x9f, 0xa0, 0xea, 0x89, 0x63, 0x8f, 0xfd, 0x06, 0xad, 0x72, 0xe3, 0x5b, - 0x54, 0xe3, 0x98, 0x16, 0x48, 0x10, 0x3e, 0xbd, 0xf7, 0xe6, 0xfd, 0xde, 0xbc, 0xdf, 0xcf, 0xbf, - 0x81, 0x7f, 0x31, 0x7f, 0x2c, 0x26, 0x16, 0x0d, 0xb8, 0x35, 0x6e, 0x58, 0x8e, 0x90, 0xcc, 0x72, - 0x84, 0x3f, 0xe4, 0x2e, 0x09, 0x45, 0x24, 0x1d, 0x66, 0x06, 0x52, 0x28, 0x81, 0xca, 0x71, 0x9b, - 0x49, 0x03, 0x6e, 0x8e, 0x1b, 0xa6, 0x6e, 0xdb, 0xde, 0x9d, 0x47, 0xba, 0x32, 0x70, 0x48, 0xc8, - 0xe4, 0x98, 0x5f, 0x03, 0xb7, 0x2b, 0xae, 0x10, 0xae, 0xc7, 0xac, 0x38, 0x3b, 0x8b, 0x86, 0xd6, - 0x20, 0x92, 0x54, 0x71, 0xe1, 0xdf, 0x77, 0xfe, 0x52, 0xd2, 0x20, 0x60, 0x32, 0x4c, 0xce, 0xb7, - 0xc6, 0xd4, 0xe3, 0x03, 0xaa, 0x98, 0x75, 0x1d, 0x24, 0x07, 0x9b, 0xae, 0x70, 0x45, 0x1c, 0x5a, - 0x3a, 0x9a, 0x55, 0x6b, 0xaf, 0xb3, 0x70, 0xbd, 0x19, 0xf0, 0x76, 0x4c, 0xa1, 0x1f, 0x33, 0x40, - 0x4f, 0x60, 0x8e, 0x06, 0x9c, 0xa8, 0x49, 0xc0, 0x0c, 0x50, 0x05, 0xf5, 0xb5, 0xc6, 0x9e, 0x39, - 0x47, 0xc7, 0xbc, 0x83, 0xd2, 0xb9, 0x3d, 0x09, 0x58, 0x0b, 0x7e, 0xba, 0xba, 0xcc, 0x2c, 0xbd, - 0x02, 0xe9, 0x12, 0xc0, 0x2b, 0x74, 0x56, 0x44, 0x7f, 0xc2, 0x55, 0xc7, 0x8b, 0x42, 0xc5, 0x24, - 0xf1, 0xe9, 0x88, 0x85, 0x46, 0xba, 0x9a, 0xa9, 0xe7, 0x71, 0x31, 0x29, 0x9e, 0xe8, 0x1a, 0x6a, - 0xc3, 0xd5, 0x9b, 0x82, 0x84, 0x46, 0xb6, 0x9a, 0xa9, 0x17, 0x1a, 0x95, 0x05, 0x97, 0x1f, 0xca, - 0xc0, 0xe9, 0xcf, 0xda, 0x70, 0xd1, 0xfd, 0x99, 0x84, 0xa8, 0x03, 0x57, 0x25, 0x1b, 0x4a, 0x16, - 0x9e, 0x93, 0x01, 0xf3, 0xe8, 0xc4, 0xc8, 0x54, 0x41, 0xbd, 0xd0, 0xf8, 0xcd, 0x9c, 0xe9, 0x66, - 0x5e, 0xeb, 0x66, 0x76, 0x12, 0x5d, 0x5b, 0xd9, 0x37, 0x5f, 0x77, 0x00, 0x2e, 0x26, 0xa8, 0x8e, - 0x06, 0x21, 0x1b, 0xae, 0x4b, 0xf6, 0x22, 0x62, 0xa1, 0x22, 0x8a, 0x8f, 0x98, 0x88, 0x94, 0xb1, - 0xf4, 0xd0, 0x9c, 0x92, 0x9e, 0xa3, 0xc9, 0xaf, 0x7c, 0x00, 0xd9, 0xbd, 0x74, 0x2e, 0x85, 0xd7, - 0x92, 0x19, 0xf6, 0x6c, 0x04, 0xb2, 0xe1, 0x86, 0xa4, 0x8a, 0x11, 0x8f, 0x8f, 0xb8, 0x22, 0x21, - 0x53, 0x8a, 0xfb, 0x6e, 0x68, 0x2c, 0xc7, 0x93, 0x77, 0x17, 0xd0, 0xc4, 0x54, 0xb1, 0x63, 0xdd, - 0xdc, 0x4f, 0x7a, 0x71, 0x59, 0xde, 0x2d, 0xd5, 0x4e, 0xe0, 0x4a, 0xa2, 0x3d, 0xda, 0x81, 0x5b, - 0xa7, 0x27, 0xfd, 0xd3, 0x5e, 0xef, 0x31, 0xb6, 0xbb, 0x1d, 0x82, 0xbb, 0x7d, 0x9b, 0x1c, 0x77, - 0x0f, 0x9b, 0xed, 0x67, 0xa5, 0xd4, 0x76, 0x3a, 0x07, 0x50, 0x0e, 0x66, 0x75, 0xb1, 0x14, 0x47, - 0x87, 0xb8, 0xd7, 0x2e, 0xa5, 0xd1, 0x1a, 0x84, 0x9d, 0xee, 0xb1, 0xdd, 0x24, 0x71, 0x9e, 0xa9, - 0x19, 0xf0, 0xd7, 0xa6, 0xeb, 0x4a, 0xe6, 0x52, 0xc5, 0x06, 0x37, 0x7f, 0x71, 0xed, 0x2d, 0x80, - 0xe5, 0xb9, 0x95, 0xd0, 0x3f, 0x10, 0x8e, 0xe8, 0x05, 0x51, 0xe2, 0x39, 0xf3, 0xc3, 0xd8, 0x30, - 0x85, 0xc6, 0xef, 0x73, 0x32, 0x9d, 0xfe, 0xe7, 0xab, 0xfd, 0xc6, 0x53, 0xea, 0x45, 0x0c, 0xe7, - 0x47, 0xf4, 0xc2, 0x8e, 0xdb, 0xd1, 0xff, 0x30, 0x3f, 0xe4, 0x9e, 0x47, 0x34, 0x2d, 0x23, 0x7d, - 0x0f, 0xb6, 0x23, 0xa2, 0x33, 0x8f, 0xc5, 0xd8, 0x56, 0x49, 0x2b, 0x5c, 0x40, 0xf9, 0x3f, 0x52, - 0xc9, 0x87, 0x73, 0x7a, 0x80, 0x5e, 0xab, 0xf6, 0x2e, 0x0d, 0x8b, 0xb7, 0x9c, 0xbc, 0x09, 0xb3, - 0x01, 0x55, 0xe7, 0xf1, 0x52, 0xf9, 0xa3, 0x14, 0x8e, 0x33, 0xd4, 0x83, 0x65, 0xed, 0xef, 0x5b, - 0xcf, 0x36, 0xb9, 0xbb, 0xf6, 0xb0, 0xd1, 0x8f, 0x52, 0x78, 0x9d, 0xde, 0x79, 0x31, 0xff, 0xc2, - 0x0c, 0x1d, 0x84, 0x89, 0xd5, 0xfe, 0x5e, 0x34, 0x63, 0xa1, 0xa0, 0x47, 0x29, 0xac, 0x71, 0xe8, - 0x11, 0xfc, 0x85, 0xfb, 0x5c, 0x71, 0xea, 0x91, 0x21, 0x53, 0xce, 0xf9, 0x0f, 0xcf, 0x65, 0x1f, - 0xf0, 0x1c, 0xde, 0x48, 0x70, 0x07, 0x1a, 0x96, 0xd8, 0xac, 0x55, 0x85, 0x5b, 0xb7, 0xb8, 0x91, - 0x30, 0x60, 0x0e, 0x1f, 0x72, 0x26, 0xd1, 0xd2, 0xc7, 0xab, 0xcb, 0x0c, 0x68, 0x1d, 0xbc, 0x9f, - 0x56, 0xc0, 0xe7, 0x69, 0x05, 0x7c, 0x99, 0x56, 0xc0, 0xb7, 0x69, 0x05, 0xc0, 0x1d, 0x2e, 0x66, - 0x6b, 0x07, 0x52, 0x5c, 0x4c, 0xe6, 0x19, 0xb4, 0xca, 0x37, 0x17, 0xef, 0xe9, 0x45, 0x7a, 0xe0, - 0x6c, 0x39, 0xde, 0x68, 0xff, 0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x59, 0x6b, 0x4c, 0x15, - 0x05, 0x00, 0x00, -} - -func (this *ApiConfigSource) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ApiConfigSource) - if !ok { - that2, ok := that.(ApiConfigSource) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.ApiType != that1.ApiType { - return false - } - if len(this.ClusterNames) != len(that1.ClusterNames) { - return false - } - for i := range this.ClusterNames { - if this.ClusterNames[i] != that1.ClusterNames[i] { - return false - } - } - if len(this.GrpcServices) != len(that1.GrpcServices) { - return false - } - for i := range this.GrpcServices { - if !this.GrpcServices[i].Equal(that1.GrpcServices[i]) { - return false - } - } - if this.RefreshDelay != nil && that1.RefreshDelay != nil { - if *this.RefreshDelay != *that1.RefreshDelay { - return false - } - } else if this.RefreshDelay != nil { - return false - } else if that1.RefreshDelay != nil { - return false - } - if this.RequestTimeout != nil && that1.RequestTimeout != nil { - if *this.RequestTimeout != *that1.RequestTimeout { - return false - } - } else if this.RequestTimeout != nil { - return false - } else if that1.RequestTimeout != nil { - return false - } - if !this.RateLimitSettings.Equal(that1.RateLimitSettings) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *AggregatedConfigSource) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*AggregatedConfigSource) - if !ok { - that2, ok := that.(AggregatedConfigSource) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimitSettings) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimitSettings) - if !ok { - that2, ok := that.(RateLimitSettings) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.MaxTokens.Equal(that1.MaxTokens) { - return false - } - if !this.FillRate.Equal(that1.FillRate) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ConfigSource) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ConfigSource) - if !ok { - that2, ok := that.(ConfigSource) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.ConfigSourceSpecifier == nil { - if this.ConfigSourceSpecifier != nil { - return false - } - } else if this.ConfigSourceSpecifier == nil { - return false - } else if !this.ConfigSourceSpecifier.Equal(that1.ConfigSourceSpecifier) { - return false - } - if !this.InitialFetchTimeout.Equal(that1.InitialFetchTimeout) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true + // 882 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0x8e, 0x93, 0x34, 0x4d, 0xa6, 0xbf, 0x92, 0x69, 0x77, 0xeb, 0xad, 0xd8, 0x12, 0xd2, 0x5d, + 0x14, 0x7a, 0x48, 0xa4, 0xf4, 0x84, 0x10, 0x48, 0x49, 0xd3, 0x6d, 0x57, 0xea, 0x36, 0x91, 0x93, + 0x56, 0x5a, 0x38, 0x8c, 0xa6, 0xf6, 0xb3, 0x3b, 0xc2, 0xf1, 0x98, 0x99, 0x71, 0x68, 0x6e, 0x88, + 0x2b, 0x07, 0xae, 0x48, 0xdc, 0x11, 0xe2, 0xcc, 0x69, 0xff, 0x02, 0xae, 0xfc, 0x2b, 0x5c, 0x40, + 0x7b, 0x40, 0x68, 0x6c, 0x67, 0x37, 0x69, 0x52, 0x55, 0xe4, 0x12, 0xcf, 0x7b, 0xdf, 0xf7, 0xcd, + 0x9b, 0x6f, 0xde, 0x1b, 0xf4, 0x1c, 0x82, 0x31, 0x9f, 0x34, 0x69, 0xc8, 0x9a, 0xe3, 0x56, 0xd3, + 0xe6, 0x02, 0x9a, 0x36, 0x0f, 0x5c, 0xe6, 0x11, 0xc9, 0x23, 0x61, 0x43, 0x23, 0x14, 0x5c, 0x71, + 0x5c, 0x89, 0x61, 0x0d, 0x1a, 0xb2, 0xc6, 0xb8, 0xd5, 0xd0, 0xb0, 0xbd, 0x67, 0x8b, 0x4c, 0x4f, + 0x84, 0x36, 0x91, 0x20, 0xc6, 0x6c, 0x4a, 0xdc, 0xdb, 0xf7, 0x38, 0xf7, 0x7c, 0x68, 0xc6, 0xab, + 0xeb, 0xc8, 0x6d, 0x3a, 0x91, 0xa0, 0x8a, 0xf1, 0xe0, 0xbe, 0xfc, 0xb7, 0x82, 0x86, 0x21, 0x08, + 0x99, 0xe6, 0x0f, 0xd2, 0x5d, 0x82, 0x80, 0xab, 0x98, 0x27, 0x9b, 0x0e, 0x84, 0x02, 0xec, 0x39, + 0x91, 0xc8, 0x09, 0xe9, 0x1c, 0x66, 0xc4, 0x3c, 0x41, 0xd5, 0xb4, 0x88, 0xa7, 0x0b, 0x79, 0xa9, + 0xa8, 0x8a, 0xa6, 0x7b, 0xec, 0x8e, 0xa9, 0xcf, 0x1c, 0xaa, 0xa0, 0x39, 0xfd, 0x48, 0x12, 0xb5, + 0x5f, 0x56, 0xd0, 0x56, 0x3b, 0x64, 0xc7, 0xb1, 0x21, 0x83, 0xd8, 0x0f, 0xdc, 0x43, 0x45, 0x1a, + 0x32, 0xa2, 0x26, 0x21, 0x98, 0x46, 0xd5, 0xa8, 0x6f, 0xb6, 0x0e, 0x1b, 0x0b, 0xe6, 0x34, 0xee, + 0xb0, 0xf4, 0x7a, 0x38, 0x09, 0xa1, 0x53, 0x7c, 0xdb, 0x59, 0xf9, 0xde, 0xc8, 0x96, 0x0d, 0x6b, + 0x95, 0x26, 0x21, 0xfc, 0x15, 0x7a, 0xa4, 0x04, 0x0d, 0x64, 0xc8, 0x85, 0x22, 0x5a, 0x7a, 0x0c, + 0x42, 0x32, 0x1e, 0x98, 0xc5, 0x58, 0xfd, 0xe9, 0x72, 0xf5, 0xab, 0x04, 0x34, 0x23, 0xb8, 0xfd, + 0x4e, 0xe5, 0x7d, 0x1a, 0x1f, 0xa0, 0x0d, 0xdb, 0x8f, 0xa4, 0x02, 0x41, 0x02, 0x3a, 0x02, 0x69, + 0x66, 0xab, 0xb9, 0x7a, 0xc9, 0x5a, 0x4f, 0x83, 0x17, 0x3a, 0x86, 0x8f, 0xd1, 0xc6, 0xec, 0xcd, + 0x49, 0x33, 0x5f, 0xcd, 0xd5, 0xd7, 0x5a, 0xfb, 0x4b, 0x76, 0x3e, 0x15, 0xa1, 0x3d, 0x48, 0x60, + 0xd6, 0xba, 0xf7, 0x7e, 0x21, 0xf1, 0x17, 0x68, 0x43, 0x80, 0x2b, 0x40, 0xde, 0x10, 0x07, 0x7c, + 0x3a, 0x31, 0x73, 0x55, 0xa3, 0xbe, 0xd6, 0x7a, 0xd2, 0x48, 0x2e, 0xb8, 0x31, 0xbd, 0xe0, 0x46, + 0x37, 0x6d, 0x00, 0x6b, 0x3d, 0xc5, 0x77, 0x35, 0x1c, 0x9f, 0xa3, 0x2d, 0x01, 0xdf, 0x44, 0x20, + 0x15, 0x51, 0x6c, 0x04, 0x3c, 0x52, 0xe6, 0xca, 0x03, 0x0a, 0xf1, 0xe1, 0x7f, 0x33, 0xb2, 0x87, + 0x19, 0x6b, 0x33, 0xe5, 0x0e, 0x13, 0x2a, 0x1e, 0xa2, 0x6d, 0x7d, 0xff, 0xc4, 0x67, 0x23, 0xa6, + 0x88, 0x04, 0xa5, 0x58, 0xe0, 0x49, 0xb3, 0x10, 0x2b, 0x3e, 0x5b, 0x72, 0x30, 0x8b, 0x2a, 0x38, + 0xd7, 0xe0, 0x41, 0x8a, 0xb5, 0x2a, 0xe2, 0x6e, 0x08, 0xb7, 0xd1, 0xbe, 0x04, 0x45, 0x02, 0xee, + 0x00, 0xe1, 0x01, 0x71, 0x99, 0x90, 0x8a, 0x8c, 0x40, 0x4a, 0xea, 0xe9, 0x80, 0x3f, 0x31, 0x57, + 0xab, 0x46, 0xbd, 0x68, 0x3d, 0x91, 0xa0, 0x2e, 0xb8, 0x03, 0xbd, 0xe0, 0x85, 0x86, 0xbc, 0x4a, + 0x10, 0xbd, 0xc0, 0x9f, 0xd4, 0x86, 0x68, 0x35, 0xed, 0x05, 0xfc, 0x1c, 0xed, 0x5e, 0x5e, 0x0c, + 0x2e, 0xfb, 0xfd, 0x9e, 0x35, 0x3c, 0xe9, 0x12, 0xeb, 0x64, 0x30, 0x24, 0xe7, 0x27, 0xa7, 0xed, + 0xe3, 0xd7, 0xe5, 0xcc, 0x5e, 0xf1, 0xd7, 0xbf, 0x7f, 0xff, 0x21, 0x6b, 0x14, 0x0d, 0x5c, 0x44, + 0x79, 0x9d, 0x2a, 0xc7, 0x5f, 0xa7, 0x56, 0xff, 0xb8, 0x9c, 0xc5, 0x9b, 0x08, 0x75, 0x4f, 0xce, + 0x87, 0x6d, 0x12, 0xaf, 0x73, 0x35, 0x13, 0x3d, 0x6e, 0x7b, 0x9e, 0x00, 0x8f, 0x2a, 0x70, 0x66, + 0x1b, 0xaf, 0x86, 0x51, 0x79, 0x00, 0xbe, 0x3b, 0x17, 0xfb, 0xd9, 0x40, 0x95, 0x85, 0xf3, 0xe2, + 0xcf, 0x10, 0x1a, 0xd1, 0x5b, 0xa2, 0xf8, 0xd7, 0x10, 0xc8, 0xb8, 0xb5, 0xd7, 0x5a, 0x1f, 0x2c, + 0x78, 0x7f, 0xf9, 0x32, 0x50, 0x47, 0xad, 0x2b, 0xea, 0x47, 0x60, 0x95, 0x46, 0xf4, 0x76, 0x18, + 0xc3, 0xf1, 0x4b, 0x54, 0x72, 0x99, 0xef, 0x13, 0xed, 0x99, 0x99, 0xbd, 0x87, 0xdb, 0xe5, 0xd1, + 0xb5, 0x0f, 0x31, 0xb7, 0xb3, 0xf9, 0xb6, 0xb3, 0x86, 0x4b, 0x1f, 0x65, 0xd2, 0x9f, 0x55, 0xd4, + 0x74, 0x5d, 0x54, 0xed, 0x4d, 0x0e, 0xad, 0xcf, 0x4d, 0xdc, 0x0e, 0xca, 0x87, 0x54, 0xdd, 0xc4, + 0x25, 0x95, 0xce, 0x32, 0x56, 0xbc, 0xc2, 0x7d, 0x54, 0xd1, 0xc3, 0x32, 0xf7, 0x58, 0xa5, 0x3b, + 0xd7, 0x1e, 0x1e, 0xc8, 0xb3, 0x8c, 0xb5, 0x45, 0xef, 0x4c, 0xf6, 0xe7, 0x28, 0x47, 0x1d, 0x99, + 0xf6, 0xed, 0x27, 0xcb, 0x34, 0x96, 0x5a, 0x7c, 0x96, 0xb1, 0x34, 0x0f, 0x7f, 0x8a, 0xf2, 0x12, + 0x7c, 0x37, 0xed, 0xda, 0x83, 0x25, 0xfc, 0xbb, 0x17, 0xa1, 0xcf, 0xa2, 0x29, 0xf8, 0x15, 0x7a, + 0xc4, 0x02, 0xa6, 0x18, 0xf5, 0x89, 0x0b, 0xca, 0xbe, 0x79, 0x37, 0x01, 0xf9, 0x87, 0x66, 0x68, + 0x3b, 0xe5, 0xbd, 0xd0, 0xb4, 0x69, 0xf3, 0xbf, 0x46, 0x3b, 0x02, 0x12, 0x47, 0xe6, 0x1e, 0x94, + 0xc2, 0xff, 0x7b, 0x50, 0xf0, 0x54, 0x64, 0x26, 0xbb, 0x8f, 0x76, 0xe7, 0x1c, 0x27, 0x32, 0x04, + 0x9b, 0xb9, 0x0c, 0x04, 0xce, 0xfd, 0xd3, 0x31, 0x0e, 0x3f, 0x46, 0x68, 0xe6, 0xf5, 0x29, 0xa2, + 0x7c, 0xfb, 0x72, 0xd8, 0x2b, 0x67, 0x70, 0x01, 0x65, 0xaf, 0x5a, 0x65, 0x23, 0xfe, 0x3f, 0x2a, + 0x67, 0x3b, 0x5f, 0xfe, 0xf5, 0xd3, 0xbf, 0x3f, 0xae, 0x3c, 0xc6, 0x3b, 0x49, 0x2d, 0x89, 0x66, + 0x52, 0xcb, 0xf8, 0xe8, 0xcd, 0x77, 0x7f, 0xfc, 0x59, 0xc8, 0x96, 0x0d, 0xf4, 0x21, 0xe3, 0x49, + 0xb1, 0xa1, 0xe0, 0xb7, 0x93, 0xc5, 0xba, 0x3b, 0x95, 0x59, 0x3b, 0xfb, 0xda, 0x9d, 0xbe, 0x71, + 0x5d, 0x88, 0x6d, 0x3a, 0xfa, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xd4, 0xeb, 0xf5, 0x3a, 0xdb, 0x06, + 0x00, 0x00, } -func (this *ConfigSource_Path) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ConfigSource_Path) - if !ok { - that2, ok := that.(ConfigSource_Path) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Path != that1.Path { - return false - } - return true -} -func (this *ConfigSource_ApiConfigSource) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ConfigSource_ApiConfigSource) - if !ok { - that2, ok := that.(ConfigSource_ApiConfigSource) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ApiConfigSource.Equal(that1.ApiConfigSource) { - return false - } - return true -} -func (this *ConfigSource_Ads) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ConfigSource_Ads) - if !ok { - that2, ok := that.(ConfigSource_Ads) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Ads.Equal(that1.Ads) { - return false - } - return true -} -func (m *ApiConfigSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ApiConfigSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ApiType != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.ApiType)) - } - if len(m.ClusterNames) > 0 { - for _, s := range m.ClusterNames { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.RefreshDelay != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.RefreshDelay))) - n1, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.RefreshDelay, dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.GrpcServices) > 0 { - for _, msg := range m.GrpcServices { - dAtA[i] = 0x22 - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.RequestTimeout != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.RequestTimeout))) - n2, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.RequestTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.RateLimitSettings != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.RateLimitSettings.Size())) - n3, err := m.RateLimitSettings.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AggregatedConfigSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AggregatedConfigSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimitSettings) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimitSettings) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.MaxTokens != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.MaxTokens.Size())) - n4, err := m.MaxTokens.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.FillRate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.FillRate.Size())) - n5, err := m.FillRate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ConfigSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ConfigSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ConfigSourceSpecifier != nil { - nn6, err := m.ConfigSourceSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn6 - } - if m.InitialFetchTimeout != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.InitialFetchTimeout.Size())) - n7, err := m.InitialFetchTimeout.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ConfigSource_Path) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil -} -func (m *ConfigSource_ApiConfigSource) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ApiConfigSource != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.ApiConfigSource.Size())) - n8, err := m.ApiConfigSource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *ConfigSource_Ads) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Ads != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintConfigSource(dAtA, i, uint64(m.Ads.Size())) - n9, err := m.Ads.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} -func encodeVarintConfigSource(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *ApiConfigSource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ApiType != 0 { - n += 1 + sovConfigSource(uint64(m.ApiType)) - } - if len(m.ClusterNames) > 0 { - for _, s := range m.ClusterNames { - l = len(s) - n += 1 + l + sovConfigSource(uint64(l)) - } - } - if m.RefreshDelay != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.RefreshDelay) - n += 1 + l + sovConfigSource(uint64(l)) - } - if len(m.GrpcServices) > 0 { - for _, e := range m.GrpcServices { - l = e.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - } - if m.RequestTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.RequestTimeout) - n += 1 + l + sovConfigSource(uint64(l)) - } - if m.RateLimitSettings != nil { - l = m.RateLimitSettings.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *AggregatedConfigSource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimitSettings) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.MaxTokens != nil { - l = m.MaxTokens.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - if m.FillRate != nil { - l = m.FillRate.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ConfigSource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ConfigSourceSpecifier != nil { - n += m.ConfigSourceSpecifier.Size() - } - if m.InitialFetchTimeout != nil { - l = m.InitialFetchTimeout.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ConfigSource_Path) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Path) - n += 1 + l + sovConfigSource(uint64(l)) - return n -} -func (m *ConfigSource_ApiConfigSource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ApiConfigSource != nil { - l = m.ApiConfigSource.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - return n -} -func (m *ConfigSource_Ads) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Ads != nil { - l = m.Ads.Size() - n += 1 + l + sovConfigSource(uint64(l)) - } - return n -} - -func sovConfigSource(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozConfigSource(x uint64) (n int) { - return sovConfigSource(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ApiConfigSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ApiConfigSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ApiConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiType", wireType) - } - m.ApiType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ApiType |= ApiConfigSource_ApiType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterNames", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterNames = append(m.ClusterNames, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RefreshDelay", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RefreshDelay == nil { - m.RefreshDelay = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.RefreshDelay, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GrpcServices", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GrpcServices = append(m.GrpcServices, &GrpcService{}) - if err := m.GrpcServices[len(m.GrpcServices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestTimeout == nil { - m.RequestTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.RequestTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RateLimitSettings", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RateLimitSettings == nil { - m.RateLimitSettings = &RateLimitSettings{} - } - if err := m.RateLimitSettings.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfigSource(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AggregatedConfigSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AggregatedConfigSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AggregatedConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipConfigSource(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimitSettings) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RateLimitSettings: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RateLimitSettings: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxTokens", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxTokens == nil { - m.MaxTokens = &types.UInt32Value{} - } - if err := m.MaxTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FillRate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.FillRate == nil { - m.FillRate = &types.DoubleValue{} - } - if err := m.FillRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfigSource(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfigSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ConfigSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConfigSourceSpecifier = &ConfigSource_Path{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiConfigSource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &ApiConfigSource{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigSourceSpecifier = &ConfigSource_ApiConfigSource{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ads", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &AggregatedConfigSource{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigSourceSpecifier = &ConfigSource_Ads{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialFetchTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConfigSource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConfigSource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConfigSource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InitialFetchTimeout == nil { - m.InitialFetchTimeout = &types.Duration{} - } - if err := m.InitialFetchTimeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConfigSource(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConfigSource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipConfigSource(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfigSource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfigSource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfigSource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthConfigSource - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthConfigSource - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowConfigSource - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipConfigSource(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthConfigSource - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthConfigSource = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowConfigSource = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/config_source.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/config_source.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _config_source_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on ApiConfigSource with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -48,43 +51,47 @@ } } - for idx, item := range m.GetGrpcServices() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ApiConfigSourceValidationError{ - field: fmt.Sprintf("GrpcServices[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } + if _, ok := ApiVersion_name[int32(m.GetTransportApiVersion())]; !ok { + return ApiConfigSourceValidationError{ + field: "TransportApiVersion", + reason: "value must be one of the defined enum values", } - } - { - tmp := m.GetRefreshDelay() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetGrpcServices() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ApiConfigSourceValidationError{ - field: "RefreshDelay", + field: fmt.Sprintf("GrpcServices[%v]", idx), reason: "embedded message failed validation", cause: err, } } } + + } + + if v, ok := interface{}(m.GetRefreshDelay()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ApiConfigSourceValidationError{ + field: "RefreshDelay", + reason: "embedded message failed validation", + cause: err, + } + } } if d := m.GetRequestTimeout(); d != nil { - dur := *d + dur, err := ptypes.Duration(d) + if err != nil { + return ApiConfigSourceValidationError{ + field: "RequestTimeout", + reason: "value is not a valid duration", + cause: err, + } + } gt := time.Duration(0*time.Second + 0*time.Nanosecond) @@ -97,21 +104,18 @@ } - { - tmp := m.GetRateLimitSettings() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ApiConfigSourceValidationError{ - field: "RateLimitSettings", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRateLimitSettings()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ApiConfigSourceValidationError{ + field: "RateLimitSettings", + reason: "embedded message failed validation", + cause: err, } } } + // no validation rules for SetNodeOnFirstMessageOnly + return nil } @@ -236,25 +240,85 @@ ErrorName() string } = AggregatedConfigSourceValidationError{} -// Validate checks the field values on RateLimitSettings with the rules defined +// Validate checks the field values on SelfConfigSource with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. -func (m *RateLimitSettings) Validate() error { +func (m *SelfConfigSource) Validate() error { if m == nil { return nil } - { - tmp := m.GetMaxTokens() + return nil +} - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { +// SelfConfigSourceValidationError is the validation error returned by +// SelfConfigSource.Validate if the designated constraints aren't met. +type SelfConfigSourceValidationError struct { + field string + reason string + cause error + key bool +} - if err := v.Validate(); err != nil { - return RateLimitSettingsValidationError{ - field: "MaxTokens", - reason: "embedded message failed validation", - cause: err, - } +// Field function returns field value. +func (e SelfConfigSourceValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SelfConfigSourceValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SelfConfigSourceValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SelfConfigSourceValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SelfConfigSourceValidationError) ErrorName() string { return "SelfConfigSourceValidationError" } + +// Error satisfies the builtin error interface +func (e SelfConfigSourceValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSelfConfigSource.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SelfConfigSourceValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SelfConfigSourceValidationError{} + +// Validate checks the field values on RateLimitSettings with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *RateLimitSettings) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetMaxTokens()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimitSettingsValidationError{ + field: "MaxTokens", + reason: "embedded message failed validation", + cause: err, } } } @@ -337,21 +401,23 @@ return nil } - { - tmp := m.GetInitialFetchTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ConfigSourceValidationError{ - field: "InitialFetchTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetInitialFetchTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ConfigSourceValidationError{ + field: "InitialFetchTimeout", + reason: "embedded message failed validation", + cause: err, } } } + if _, ok := ApiVersion_name[int32(m.GetResourceApiVersion())]; !ok { + return ConfigSourceValidationError{ + field: "ResourceApiVersion", + reason: "value must be one of the defined enum values", + } + } + switch m.ConfigSourceSpecifier.(type) { case *ConfigSource_Path: @@ -359,34 +425,36 @@ case *ConfigSource_ApiConfigSource: - { - tmp := m.GetApiConfigSource() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ConfigSourceValidationError{ - field: "ApiConfigSource", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetApiConfigSource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ConfigSourceValidationError{ + field: "ApiConfigSource", + reason: "embedded message failed validation", + cause: err, } } } case *ConfigSource_Ads: - { - tmp := m.GetAds() + if v, ok := interface{}(m.GetAds()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ConfigSourceValidationError{ + field: "Ads", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *ConfigSource_Self: - if err := v.Validate(); err != nil { - return ConfigSourceValidationError{ - field: "Ads", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSelf()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ConfigSourceValidationError{ + field: "Self", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,118 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/core/event_service_config.proto + +package envoy_api_v2_core + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type EventServiceConfig struct { + // Types that are valid to be assigned to ConfigSourceSpecifier: + // *EventServiceConfig_GrpcService + ConfigSourceSpecifier isEventServiceConfig_ConfigSourceSpecifier `protobuf_oneof:"config_source_specifier"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EventServiceConfig) Reset() { *m = EventServiceConfig{} } +func (m *EventServiceConfig) String() string { return proto.CompactTextString(m) } +func (*EventServiceConfig) ProtoMessage() {} +func (*EventServiceConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0289257eb2a50b92, []int{0} +} + +func (m *EventServiceConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EventServiceConfig.Unmarshal(m, b) +} +func (m *EventServiceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EventServiceConfig.Marshal(b, m, deterministic) +} +func (m *EventServiceConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventServiceConfig.Merge(m, src) +} +func (m *EventServiceConfig) XXX_Size() int { + return xxx_messageInfo_EventServiceConfig.Size(m) +} +func (m *EventServiceConfig) XXX_DiscardUnknown() { + xxx_messageInfo_EventServiceConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_EventServiceConfig proto.InternalMessageInfo + +type isEventServiceConfig_ConfigSourceSpecifier interface { + isEventServiceConfig_ConfigSourceSpecifier() +} + +type EventServiceConfig_GrpcService struct { + GrpcService *GrpcService `protobuf:"bytes,1,opt,name=grpc_service,json=grpcService,proto3,oneof"` +} + +func (*EventServiceConfig_GrpcService) isEventServiceConfig_ConfigSourceSpecifier() {} + +func (m *EventServiceConfig) GetConfigSourceSpecifier() isEventServiceConfig_ConfigSourceSpecifier { + if m != nil { + return m.ConfigSourceSpecifier + } + return nil +} + +func (m *EventServiceConfig) GetGrpcService() *GrpcService { + if x, ok := m.GetConfigSourceSpecifier().(*EventServiceConfig_GrpcService); ok { + return x.GrpcService + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*EventServiceConfig) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*EventServiceConfig_GrpcService)(nil), + } +} + +func init() { + proto.RegisterType((*EventServiceConfig)(nil), "envoy.api.v2.core.EventServiceConfig") +} + +func init() { + proto.RegisterFile("envoy/api/v2/core/event_service_config.proto", fileDescriptor_0289257eb2a50b92) +} + +var fileDescriptor_0289257eb2a50b92 = []byte{ + // 276 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0x41, 0x4a, 0xc4, 0x30, + 0x14, 0x86, 0xad, 0xe2, 0x2c, 0x3a, 0x2e, 0xb4, 0x88, 0x95, 0x01, 0xab, 0x88, 0x0b, 0x17, 0x92, + 0x40, 0xe7, 0x06, 0x1d, 0x44, 0x97, 0x83, 0x1e, 0xa0, 0xc6, 0xcc, 0x9b, 0xf2, 0x40, 0xf3, 0x42, + 0x92, 0x06, 0xbb, 0xf3, 0x06, 0x6e, 0x3d, 0x8b, 0x27, 0x70, 0xeb, 0x55, 0x5c, 0xb9, 0x12, 0x69, + 0xd3, 0xe2, 0x40, 0x77, 0x09, 0xff, 0xfb, 0xff, 0xf7, 0xfd, 0x2f, 0xbe, 0x02, 0xe5, 0xa9, 0xe1, + 0x42, 0x23, 0xf7, 0x39, 0x97, 0x64, 0x80, 0x83, 0x07, 0xe5, 0x4a, 0x0b, 0xc6, 0xa3, 0x84, 0x52, + 0x92, 0x5a, 0x63, 0xc5, 0xb4, 0x21, 0x47, 0xc9, 0x41, 0x37, 0xcd, 0x84, 0x46, 0xe6, 0x73, 0xd6, + 0x4e, 0xcf, 0x2e, 0xc6, 0x01, 0x95, 0xd1, 0x72, 0xf0, 0x07, 0xe3, 0x2c, 0xab, 0x57, 0x5a, 0x70, + 0xa1, 0x14, 0x39, 0xe1, 0x90, 0x94, 0xe5, 0xcf, 0x58, 0x19, 0xe1, 0x06, 0xfd, 0x64, 0xa4, 0x5b, + 0x27, 0x5c, 0x6d, 0x7b, 0x39, 0xf5, 0xe2, 0x09, 0x57, 0xc2, 0x01, 0x1f, 0x1e, 0x41, 0x38, 0x6f, + 0xe2, 0xe4, 0xba, 0xc5, 0xbd, 0x0f, 0xdb, 0x16, 0x1d, 0x6c, 0xb2, 0x88, 0xf7, 0x36, 0x19, 0x8e, + 0xa3, 0xb3, 0xe8, 0x72, 0x9a, 0x67, 0x6c, 0x44, 0xcf, 0x6e, 0x8c, 0x96, 0xbd, 0xf7, 0x76, 0xeb, + 0x6e, 0x5a, 0xfd, 0x7f, 0x8b, 0x2c, 0x4e, 0x43, 0xf7, 0xd2, 0x52, 0x6d, 0x24, 0x94, 0x56, 0x83, + 0xc4, 0x35, 0x82, 0x49, 0x76, 0x7e, 0x8a, 0xa8, 0x78, 0xf8, 0x7e, 0xff, 0x7d, 0xdb, 0x3d, 0x4a, + 0x0e, 0x43, 0x6a, 0x7f, 0xa7, 0x2e, 0xd5, 0xcf, 0x3f, 0x5e, 0x3f, 0xbf, 0x26, 0xdb, 0xfb, 0x51, + 0x7c, 0x8a, 0x14, 0xd6, 0x6a, 0x43, 0x2f, 0xcd, 0x98, 0xa0, 0x48, 0xc7, 0xfc, 0xcb, 0xb6, 0xda, + 0x32, 0x7a, 0x9c, 0x74, 0x1d, 0xe7, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x56, 0x93, 0xc8, 0xf3, + 0xa4, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/event_service_config.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,126 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/core/event_service_config.proto + +package envoy_api_v2_core + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _event_service_config_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on EventServiceConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *EventServiceConfig) Validate() error { + if m == nil { + return nil + } + + switch m.ConfigSourceSpecifier.(type) { + + case *EventServiceConfig_GrpcService: + + if v, ok := interface{}(m.GetGrpcService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EventServiceConfigValidationError{ + field: "GrpcService", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return EventServiceConfigValidationError{ + field: "ConfigSourceSpecifier", + reason: "value is required", + } + + } + + return nil +} + +// EventServiceConfigValidationError is the validation error returned by +// EventServiceConfig.Validate if the designated constraints aren't met. +type EventServiceConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EventServiceConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EventServiceConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EventServiceConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EventServiceConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EventServiceConfigValidationError) ErrorName() string { + return "EventServiceConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e EventServiceConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEventServiceConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EventServiceConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EventServiceConfigValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,141 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/core/grpc_method_list.proto + +package envoy_api_v2_core + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type GrpcMethodList struct { + Services []*GrpcMethodList_Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GrpcMethodList) Reset() { *m = GrpcMethodList{} } +func (m *GrpcMethodList) String() string { return proto.CompactTextString(m) } +func (*GrpcMethodList) ProtoMessage() {} +func (*GrpcMethodList) Descriptor() ([]byte, []int) { + return fileDescriptor_63bac5d4aa07ee79, []int{0} +} + +func (m *GrpcMethodList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GrpcMethodList.Unmarshal(m, b) +} +func (m *GrpcMethodList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GrpcMethodList.Marshal(b, m, deterministic) +} +func (m *GrpcMethodList) XXX_Merge(src proto.Message) { + xxx_messageInfo_GrpcMethodList.Merge(m, src) +} +func (m *GrpcMethodList) XXX_Size() int { + return xxx_messageInfo_GrpcMethodList.Size(m) +} +func (m *GrpcMethodList) XXX_DiscardUnknown() { + xxx_messageInfo_GrpcMethodList.DiscardUnknown(m) +} + +var xxx_messageInfo_GrpcMethodList proto.InternalMessageInfo + +func (m *GrpcMethodList) GetServices() []*GrpcMethodList_Service { + if m != nil { + return m.Services + } + return nil +} + +type GrpcMethodList_Service struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + MethodNames []string `protobuf:"bytes,2,rep,name=method_names,json=methodNames,proto3" json:"method_names,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GrpcMethodList_Service) Reset() { *m = GrpcMethodList_Service{} } +func (m *GrpcMethodList_Service) String() string { return proto.CompactTextString(m) } +func (*GrpcMethodList_Service) ProtoMessage() {} +func (*GrpcMethodList_Service) Descriptor() ([]byte, []int) { + return fileDescriptor_63bac5d4aa07ee79, []int{0, 0} +} + +func (m *GrpcMethodList_Service) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GrpcMethodList_Service.Unmarshal(m, b) +} +func (m *GrpcMethodList_Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GrpcMethodList_Service.Marshal(b, m, deterministic) +} +func (m *GrpcMethodList_Service) XXX_Merge(src proto.Message) { + xxx_messageInfo_GrpcMethodList_Service.Merge(m, src) +} +func (m *GrpcMethodList_Service) XXX_Size() int { + return xxx_messageInfo_GrpcMethodList_Service.Size(m) +} +func (m *GrpcMethodList_Service) XXX_DiscardUnknown() { + xxx_messageInfo_GrpcMethodList_Service.DiscardUnknown(m) +} + +var xxx_messageInfo_GrpcMethodList_Service proto.InternalMessageInfo + +func (m *GrpcMethodList_Service) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GrpcMethodList_Service) GetMethodNames() []string { + if m != nil { + return m.MethodNames + } + return nil +} + +func init() { + proto.RegisterType((*GrpcMethodList)(nil), "envoy.api.v2.core.GrpcMethodList") + proto.RegisterType((*GrpcMethodList_Service)(nil), "envoy.api.v2.core.GrpcMethodList.Service") +} + +func init() { + proto.RegisterFile("envoy/api/v2/core/grpc_method_list.proto", fileDescriptor_63bac5d4aa07ee79) +} + +var fileDescriptor_63bac5d4aa07ee79 = []byte{ + // 304 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0x4f, 0x4a, 0x03, 0x31, + 0x1c, 0x85, 0xc9, 0xf4, 0x7f, 0x2a, 0xa2, 0xa3, 0x68, 0xa9, 0xa8, 0x83, 0xab, 0x11, 0x21, 0x81, + 0xf6, 0x06, 0x01, 0x71, 0xa3, 0x52, 0xda, 0xad, 0x50, 0xe2, 0x4c, 0x1c, 0x03, 0x9d, 0x24, 0x24, + 0x69, 0xb0, 0x3b, 0x6f, 0x20, 0xb8, 0xf2, 0x10, 0x9e, 0xc0, 0x13, 0xb8, 0xf5, 0x2a, 0x2e, 0xbb, + 0x10, 0x99, 0xc9, 0x28, 0x94, 0xd9, 0x25, 0xbf, 0xef, 0x3d, 0xf8, 0x78, 0x30, 0x66, 0xc2, 0xc9, + 0x15, 0xa6, 0x8a, 0x63, 0x37, 0xc2, 0x89, 0xd4, 0x0c, 0x67, 0x5a, 0x25, 0xf3, 0x9c, 0xd9, 0x47, + 0x99, 0xce, 0x17, 0xdc, 0x58, 0xa4, 0xb4, 0xb4, 0x32, 0xdc, 0x2d, 0x93, 0x88, 0x2a, 0x8e, 0xdc, + 0x08, 0x15, 0xc9, 0xe1, 0xc9, 0x32, 0x55, 0x14, 0x53, 0x21, 0xa4, 0xa5, 0x96, 0x4b, 0x61, 0x70, + 0xce, 0x33, 0x4d, 0x2d, 0xf3, 0x95, 0xe1, 0x71, 0x8d, 0x1b, 0x4b, 0xed, 0xd2, 0x54, 0xf8, 0xd0, + 0xd1, 0x05, 0x4f, 0xa9, 0x65, 0xf8, 0xef, 0xe1, 0xc1, 0xd9, 0x3b, 0x80, 0xdb, 0x57, 0x5a, 0x25, + 0x37, 0xa5, 0xc4, 0x35, 0x37, 0x36, 0xbc, 0x84, 0x5d, 0xc3, 0xb4, 0xe3, 0x09, 0x33, 0x03, 0x10, + 0x35, 0xe2, 0xfe, 0xe8, 0x1c, 0xd5, 0x84, 0xd0, 0x66, 0x09, 0xcd, 0x7c, 0x63, 0xfa, 0x5f, 0x1d, + 0xce, 0x60, 0xa7, 0x3a, 0x86, 0x47, 0xb0, 0x29, 0x68, 0xce, 0x06, 0x20, 0x02, 0x71, 0x8f, 0x74, + 0xd6, 0xa4, 0xa9, 0x83, 0x08, 0x4c, 0xcb, 0x63, 0x78, 0x01, 0xb7, 0xaa, 0x05, 0x8a, 0xaf, 0x19, + 0x04, 0x51, 0x23, 0xee, 0x91, 0xee, 0x9a, 0xb4, 0x5e, 0x41, 0xd0, 0x05, 0xd3, 0xbe, 0xa7, 0xb7, + 0x05, 0x24, 0x77, 0xdf, 0x6f, 0x3f, 0x2f, 0xad, 0x83, 0x70, 0xdf, 0x0b, 0x25, 0x52, 0x3c, 0xf0, + 0xcc, 0x0b, 0xb9, 0xf1, 0xc7, 0xf3, 0xe7, 0x57, 0x3b, 0xd8, 0x01, 0xf0, 0x94, 0x4b, 0x6f, 0xac, + 0xb4, 0x7c, 0x5a, 0xd5, 0xe5, 0xc9, 0xde, 0xa6, 0xfd, 0xa4, 0x98, 0x62, 0x02, 0xee, 0xdb, 0xe5, + 0x26, 0xe3, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x50, 0x34, 0x3a, 0xc6, 0xaa, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_method_list.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,198 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/core/grpc_method_list.proto + +package envoy_api_v2_core + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _grpc_method_list_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on GrpcMethodList with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *GrpcMethodList) Validate() error { + if m == nil { + return nil + } + + for idx, item := range m.GetServices() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcMethodListValidationError{ + field: fmt.Sprintf("Services[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// GrpcMethodListValidationError is the validation error returned by +// GrpcMethodList.Validate if the designated constraints aren't met. +type GrpcMethodListValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GrpcMethodListValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GrpcMethodListValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GrpcMethodListValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GrpcMethodListValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GrpcMethodListValidationError) ErrorName() string { return "GrpcMethodListValidationError" } + +// Error satisfies the builtin error interface +func (e GrpcMethodListValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGrpcMethodList.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GrpcMethodListValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GrpcMethodListValidationError{} + +// Validate checks the field values on GrpcMethodList_Service with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *GrpcMethodList_Service) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return GrpcMethodList_ServiceValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetMethodNames()) < 1 { + return GrpcMethodList_ServiceValidationError{ + field: "MethodNames", + reason: "value must contain at least 1 item(s)", + } + } + + return nil +} + +// GrpcMethodList_ServiceValidationError is the validation error returned by +// GrpcMethodList_Service.Validate if the designated constraints aren't met. +type GrpcMethodList_ServiceValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GrpcMethodList_ServiceValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GrpcMethodList_ServiceValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GrpcMethodList_ServiceValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GrpcMethodList_ServiceValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GrpcMethodList_ServiceValidationError) ErrorName() string { + return "GrpcMethodList_ServiceValidationError" +} + +// Error satisfies the builtin error interface +func (e GrpcMethodList_ServiceValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGrpcMethodList_Service.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GrpcMethodList_ServiceValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GrpcMethodList_ServiceValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18 +1,18 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/grpc_service.proto -package core +package envoy_api_v2_core import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + empty "github.com/golang/protobuf/ptypes/empty" + _struct "github.com/golang/protobuf/ptypes/struct" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,25 +24,18 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// gRPC service configuration. This is used by :ref:`ApiConfigSource -// ` and filter configurations. type GrpcService struct { // Types that are valid to be assigned to TargetSpecifier: // *GrpcService_EnvoyGrpc_ // *GrpcService_GoogleGrpc_ - TargetSpecifier isGrpcService_TargetSpecifier `protobuf_oneof:"target_specifier"` - // The timeout for the gRPC request. This is the timeout for a specific - // request. - Timeout *types.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` - // Additional metadata to include in streams initiated to the GrpcService. - // This can be used for scenarios in which additional ad hoc authorization - // headers (e.g. `x-foo-bar: baz-key`) are to be injected. - InitialMetadata []*HeaderValue `protobuf:"bytes,5,rep,name=initial_metadata,json=initialMetadata,proto3" json:"initial_metadata,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + TargetSpecifier isGrpcService_TargetSpecifier `protobuf_oneof:"target_specifier"` + Timeout *duration.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` + InitialMetadata []*HeaderValue `protobuf:"bytes,5,rep,name=initial_metadata,json=initialMetadata,proto3" json:"initial_metadata,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GrpcService) Reset() { *m = GrpcService{} } @@ -51,26 +44,18 @@ func (*GrpcService) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0} } + func (m *GrpcService) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService.Unmarshal(m, b) } func (m *GrpcService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService.Marshal(b, m, deterministic) } func (m *GrpcService) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService.Merge(m, src) } func (m *GrpcService) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService.Size(m) } func (m *GrpcService) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService.DiscardUnknown(m) @@ -80,19 +65,18 @@ type isGrpcService_TargetSpecifier interface { isGrpcService_TargetSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type GrpcService_EnvoyGrpc_ struct { EnvoyGrpc *GrpcService_EnvoyGrpc `protobuf:"bytes,1,opt,name=envoy_grpc,json=envoyGrpc,proto3,oneof"` } + type GrpcService_GoogleGrpc_ struct { GoogleGrpc *GrpcService_GoogleGrpc `protobuf:"bytes,2,opt,name=google_grpc,json=googleGrpc,proto3,oneof"` } -func (*GrpcService_EnvoyGrpc_) isGrpcService_TargetSpecifier() {} +func (*GrpcService_EnvoyGrpc_) isGrpcService_TargetSpecifier() {} + func (*GrpcService_GoogleGrpc_) isGrpcService_TargetSpecifier() {} func (m *GrpcService) GetTargetSpecifier() isGrpcService_TargetSpecifier { @@ -116,7 +100,7 @@ return nil } -func (m *GrpcService) GetTimeout() *types.Duration { +func (m *GrpcService) GetTimeout() *duration.Duration { if m != nil { return m.Timeout } @@ -130,84 +114,15 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*GrpcService) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _GrpcService_OneofMarshaler, _GrpcService_OneofUnmarshaler, _GrpcService_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*GrpcService) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*GrpcService_EnvoyGrpc_)(nil), (*GrpcService_GoogleGrpc_)(nil), } } -func _GrpcService_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*GrpcService) - // target_specifier - switch x := m.TargetSpecifier.(type) { - case *GrpcService_EnvoyGrpc_: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.EnvoyGrpc); err != nil { - return err - } - case *GrpcService_GoogleGrpc_: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GoogleGrpc); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("GrpcService.TargetSpecifier has unexpected type %T", x) - } - return nil -} - -func _GrpcService_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*GrpcService) - switch tag { - case 1: // target_specifier.envoy_grpc - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_EnvoyGrpc) - err := b.DecodeMessage(msg) - m.TargetSpecifier = &GrpcService_EnvoyGrpc_{msg} - return true, err - case 2: // target_specifier.google_grpc - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_GoogleGrpc) - err := b.DecodeMessage(msg) - m.TargetSpecifier = &GrpcService_GoogleGrpc_{msg} - return true, err - default: - return false, nil - } -} - -func _GrpcService_OneofSizer(msg proto.Message) (n int) { - m := msg.(*GrpcService) - // target_specifier - switch x := m.TargetSpecifier.(type) { - case *GrpcService_EnvoyGrpc_: - s := proto.Size(x.EnvoyGrpc) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_: - s := proto.Size(x.GoogleGrpc) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type GrpcService_EnvoyGrpc struct { - // The name of the upstream gRPC cluster. SSL credentials will be supplied - // in the :ref:`Cluster ` :ref:`tls_context - // `. ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -220,26 +135,18 @@ func (*GrpcService_EnvoyGrpc) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 0} } + func (m *GrpcService_EnvoyGrpc) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_EnvoyGrpc.Unmarshal(m, b) } func (m *GrpcService_EnvoyGrpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_EnvoyGrpc.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_EnvoyGrpc.Marshal(b, m, deterministic) } func (m *GrpcService_EnvoyGrpc) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_EnvoyGrpc.Merge(m, src) } func (m *GrpcService_EnvoyGrpc) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_EnvoyGrpc.Size(m) } func (m *GrpcService_EnvoyGrpc) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_EnvoyGrpc.DiscardUnknown(m) @@ -254,36 +161,16 @@ return "" } -// [#proto-status: draft] type GrpcService_GoogleGrpc struct { - // The target URI when using the `Google C++ gRPC client - // `_. SSL credentials will be supplied in - // :ref:`channel_credentials `. - TargetUri string `protobuf:"bytes,1,opt,name=target_uri,json=targetUri,proto3" json:"target_uri,omitempty"` - ChannelCredentials *GrpcService_GoogleGrpc_ChannelCredentials `protobuf:"bytes,2,opt,name=channel_credentials,json=channelCredentials,proto3" json:"channel_credentials,omitempty"` - // A set of call credentials that can be composed with `channel credentials - // `_. - CallCredentials []*GrpcService_GoogleGrpc_CallCredentials `protobuf:"bytes,3,rep,name=call_credentials,json=callCredentials,proto3" json:"call_credentials,omitempty"` - // The human readable prefix to use when emitting statistics for the gRPC - // service. - // - // .. csv-table:: - // :header: Name, Type, Description - // :widths: 1, 1, 2 - // - // streams_total, Counter, Total number of streams opened - // streams_closed_, Counter, Total streams closed with - StatPrefix string `protobuf:"bytes,4,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` - // The name of the Google gRPC credentials factory to use. This must have been registered with - // Envoy. If this is empty, a default credentials factory will be used that sets up channel - // credentials based on other configuration parameters. - CredentialsFactoryName string `protobuf:"bytes,5,opt,name=credentials_factory_name,json=credentialsFactoryName,proto3" json:"credentials_factory_name,omitempty"` - // Additional configuration for site-specific customizations of the Google - // gRPC library. - Config *types.Struct `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + TargetUri string `protobuf:"bytes,1,opt,name=target_uri,json=targetUri,proto3" json:"target_uri,omitempty"` + ChannelCredentials *GrpcService_GoogleGrpc_ChannelCredentials `protobuf:"bytes,2,opt,name=channel_credentials,json=channelCredentials,proto3" json:"channel_credentials,omitempty"` + CallCredentials []*GrpcService_GoogleGrpc_CallCredentials `protobuf:"bytes,3,rep,name=call_credentials,json=callCredentials,proto3" json:"call_credentials,omitempty"` + StatPrefix string `protobuf:"bytes,4,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` + CredentialsFactoryName string `protobuf:"bytes,5,opt,name=credentials_factory_name,json=credentialsFactoryName,proto3" json:"credentials_factory_name,omitempty"` + Config *_struct.Struct `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GrpcService_GoogleGrpc) Reset() { *m = GrpcService_GoogleGrpc{} } @@ -292,26 +179,18 @@ func (*GrpcService_GoogleGrpc) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1} } + func (m *GrpcService_GoogleGrpc) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc.Merge(m, src) } func (m *GrpcService_GoogleGrpc) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc.Size(m) } func (m *GrpcService_GoogleGrpc) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc.DiscardUnknown(m) @@ -354,20 +233,16 @@ return "" } -func (m *GrpcService_GoogleGrpc) GetConfig() *types.Struct { +func (m *GrpcService_GoogleGrpc) GetConfig() *_struct.Struct { if m != nil { return m.Config } return nil } -// See https://grpc.io/grpc/cpp/structgrpc_1_1_ssl_credentials_options.html. type GrpcService_GoogleGrpc_SslCredentials struct { - // PEM encoded server root certificates. - RootCerts *DataSource `protobuf:"bytes,1,opt,name=root_certs,json=rootCerts,proto3" json:"root_certs,omitempty"` - // PEM encoded client private key. - PrivateKey *DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` - // PEM encoded client certificate chain. + RootCerts *DataSource `protobuf:"bytes,1,opt,name=root_certs,json=rootCerts,proto3" json:"root_certs,omitempty"` + PrivateKey *DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` CertChain *DataSource `protobuf:"bytes,3,opt,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -380,26 +255,18 @@ func (*GrpcService_GoogleGrpc_SslCredentials) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 0} } + func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Merge(m, src) } func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.Size(m) } func (m *GrpcService_GoogleGrpc_SslCredentials) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_SslCredentials.DiscardUnknown(m) @@ -428,8 +295,6 @@ return nil } -// Local channel credentials. Only UDS is supported for now. -// See https://github.com/grpc/grpc/pull/15909. type GrpcService_GoogleGrpc_GoogleLocalCredentials struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -446,26 +311,18 @@ func (*GrpcService_GoogleGrpc_GoogleLocalCredentials) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 1} } + func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Merge(m, src) } func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.Size(m) } func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials.DiscardUnknown(m) @@ -473,8 +330,6 @@ var xxx_messageInfo_GrpcService_GoogleGrpc_GoogleLocalCredentials proto.InternalMessageInfo -// See https://grpc.io/docs/guides/auth.html#credential-types to understand Channel and Call -// credential types. type GrpcService_GoogleGrpc_ChannelCredentials struct { // Types that are valid to be assigned to CredentialSpecifier: // *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials @@ -494,26 +349,18 @@ func (*GrpcService_GoogleGrpc_ChannelCredentials) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 2} } + func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Merge(m, src) } func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.Size(m) } func (m *GrpcService_GoogleGrpc_ChannelCredentials) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_ChannelCredentials.DiscardUnknown(m) @@ -523,25 +370,26 @@ type isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier interface { isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials struct { SslCredentials *GrpcService_GoogleGrpc_SslCredentials `protobuf:"bytes,1,opt,name=ssl_credentials,json=sslCredentials,proto3,oneof"` } + type GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault struct { - GoogleDefault *types.Empty `protobuf:"bytes,2,opt,name=google_default,json=googleDefault,proto3,oneof"` + GoogleDefault *empty.Empty `protobuf:"bytes,2,opt,name=google_default,json=googleDefault,proto3,oneof"` } + type GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials struct { LocalCredentials *GrpcService_GoogleGrpc_GoogleLocalCredentials `protobuf:"bytes,3,opt,name=local_credentials,json=localCredentials,proto3,oneof"` } func (*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) isGrpcService_GoogleGrpc_ChannelCredentials_CredentialSpecifier() { } @@ -559,7 +407,7 @@ return nil } -func (m *GrpcService_GoogleGrpc_ChannelCredentials) GetGoogleDefault() *types.Empty { +func (m *GrpcService_GoogleGrpc_ChannelCredentials) GetGoogleDefault() *empty.Empty { if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault); ok { return x.GoogleDefault } @@ -573,99 +421,15 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*GrpcService_GoogleGrpc_ChannelCredentials) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _GrpcService_GoogleGrpc_ChannelCredentials_OneofMarshaler, _GrpcService_GoogleGrpc_ChannelCredentials_OneofUnmarshaler, _GrpcService_GoogleGrpc_ChannelCredentials_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*GrpcService_GoogleGrpc_ChannelCredentials) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials)(nil), (*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault)(nil), (*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials)(nil), } } -func _GrpcService_GoogleGrpc_ChannelCredentials_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*GrpcService_GoogleGrpc_ChannelCredentials) - // credential_specifier - switch x := m.CredentialSpecifier.(type) { - case *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.SslCredentials); err != nil { - return err - } - case *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GoogleDefault); err != nil { - return err - } - case *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.LocalCredentials); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("GrpcService_GoogleGrpc_ChannelCredentials.CredentialSpecifier has unexpected type %T", x) - } - return nil -} - -func _GrpcService_GoogleGrpc_ChannelCredentials_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*GrpcService_GoogleGrpc_ChannelCredentials) - switch tag { - case 1: // credential_specifier.ssl_credentials - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_GoogleGrpc_SslCredentials) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials{msg} - return true, err - case 2: // credential_specifier.google_default - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Empty) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault{msg} - return true, err - case 3: // credential_specifier.local_credentials - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_GoogleGrpc_GoogleLocalCredentials) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials{msg} - return true, err - default: - return false, nil - } -} - -func _GrpcService_GoogleGrpc_ChannelCredentials_OneofSizer(msg proto.Message) (n int) { - m := msg.(*GrpcService_GoogleGrpc_ChannelCredentials) - // credential_specifier - switch x := m.CredentialSpecifier.(type) { - case *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials: - s := proto.Size(x.SslCredentials) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault: - s := proto.Size(x.GoogleDefault) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials: - s := proto.Size(x.LocalCredentials) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type GrpcService_GoogleGrpc_CallCredentials struct { // Types that are valid to be assigned to CredentialSpecifier: // *GrpcService_GoogleGrpc_CallCredentials_AccessToken @@ -674,6 +438,7 @@ // *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess // *GrpcService_GoogleGrpc_CallCredentials_GoogleIam // *GrpcService_GoogleGrpc_CallCredentials_FromPlugin + // *GrpcService_GoogleGrpc_CallCredentials_StsService_ CredentialSpecifier isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier `protobuf_oneof:"credential_specifier"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -688,26 +453,18 @@ func (*GrpcService_GoogleGrpc_CallCredentials) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3} } + func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Merge(m, src) } func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.Size(m) } func (m *GrpcService_GoogleGrpc_CallCredentials) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials.DiscardUnknown(m) @@ -717,43 +474,57 @@ type isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier interface { isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type GrpcService_GoogleGrpc_CallCredentials_AccessToken struct { AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3,oneof"` } + type GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine struct { - GoogleComputeEngine *types.Empty `protobuf:"bytes,2,opt,name=google_compute_engine,json=googleComputeEngine,proto3,oneof"` + GoogleComputeEngine *empty.Empty `protobuf:"bytes,2,opt,name=google_compute_engine,json=googleComputeEngine,proto3,oneof"` } + type GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken struct { GoogleRefreshToken string `protobuf:"bytes,3,opt,name=google_refresh_token,json=googleRefreshToken,proto3,oneof"` } + type GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess struct { ServiceAccountJwtAccess *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials `protobuf:"bytes,4,opt,name=service_account_jwt_access,json=serviceAccountJwtAccess,proto3,oneof"` } + type GrpcService_GoogleGrpc_CallCredentials_GoogleIam struct { GoogleIam *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials `protobuf:"bytes,5,opt,name=google_iam,json=googleIam,proto3,oneof"` } + type GrpcService_GoogleGrpc_CallCredentials_FromPlugin struct { FromPlugin *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin `protobuf:"bytes,6,opt,name=from_plugin,json=fromPlugin,proto3,oneof"` } +type GrpcService_GoogleGrpc_CallCredentials_StsService_ struct { + StsService *GrpcService_GoogleGrpc_CallCredentials_StsService `protobuf:"bytes,7,opt,name=sts_service,json=stsService,proto3,oneof"` +} + func (*GrpcService_GoogleGrpc_CallCredentials_AccessToken) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIam) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { } + func (*GrpcService_GoogleGrpc_CallCredentials_FromPlugin) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { } +func (*GrpcService_GoogleGrpc_CallCredentials_StsService_) isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier() { +} + func (m *GrpcService_GoogleGrpc_CallCredentials) GetCredentialSpecifier() isGrpcService_GoogleGrpc_CallCredentials_CredentialSpecifier { if m != nil { return m.CredentialSpecifier @@ -768,7 +539,7 @@ return "" } -func (m *GrpcService_GoogleGrpc_CallCredentials) GetGoogleComputeEngine() *types.Empty { +func (m *GrpcService_GoogleGrpc_CallCredentials) GetGoogleComputeEngine() *empty.Empty { if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine); ok { return x.GoogleComputeEngine } @@ -803,148 +574,26 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*GrpcService_GoogleGrpc_CallCredentials) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _GrpcService_GoogleGrpc_CallCredentials_OneofMarshaler, _GrpcService_GoogleGrpc_CallCredentials_OneofUnmarshaler, _GrpcService_GoogleGrpc_CallCredentials_OneofSizer, []interface{}{ +func (m *GrpcService_GoogleGrpc_CallCredentials) GetStsService() *GrpcService_GoogleGrpc_CallCredentials_StsService { + if x, ok := m.GetCredentialSpecifier().(*GrpcService_GoogleGrpc_CallCredentials_StsService_); ok { + return x.StsService + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*GrpcService_GoogleGrpc_CallCredentials) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*GrpcService_GoogleGrpc_CallCredentials_AccessToken)(nil), (*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine)(nil), (*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken)(nil), (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess)(nil), (*GrpcService_GoogleGrpc_CallCredentials_GoogleIam)(nil), (*GrpcService_GoogleGrpc_CallCredentials_FromPlugin)(nil), + (*GrpcService_GoogleGrpc_CallCredentials_StsService_)(nil), } } -func _GrpcService_GoogleGrpc_CallCredentials_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*GrpcService_GoogleGrpc_CallCredentials) - // credential_specifier - switch x := m.CredentialSpecifier.(type) { - case *GrpcService_GoogleGrpc_CallCredentials_AccessToken: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.AccessToken) - case *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GoogleComputeEngine); err != nil { - return err - } - case *GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.GoogleRefreshToken) - case *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ServiceAccountJwtAccess); err != nil { - return err - } - case *GrpcService_GoogleGrpc_CallCredentials_GoogleIam: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GoogleIam); err != nil { - return err - } - case *GrpcService_GoogleGrpc_CallCredentials_FromPlugin: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.FromPlugin); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("GrpcService_GoogleGrpc_CallCredentials.CredentialSpecifier has unexpected type %T", x) - } - return nil -} - -func _GrpcService_GoogleGrpc_CallCredentials_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*GrpcService_GoogleGrpc_CallCredentials) - switch tag { - case 1: // credential_specifier.access_token - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_AccessToken{x} - return true, err - case 2: // credential_specifier.google_compute_engine - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Empty) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine{msg} - return true, err - case 3: // credential_specifier.google_refresh_token - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken{x} - return true, err - case 4: // credential_specifier.service_account_jwt_access - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess{msg} - return true, err - case 5: // credential_specifier.google_iam - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_GoogleIam{msg} - return true, err - case 6: // credential_specifier.from_plugin - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) - err := b.DecodeMessage(msg) - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_FromPlugin{msg} - return true, err - default: - return false, nil - } -} - -func _GrpcService_GoogleGrpc_CallCredentials_OneofSizer(msg proto.Message) (n int) { - m := msg.(*GrpcService_GoogleGrpc_CallCredentials) - // credential_specifier - switch x := m.CredentialSpecifier.(type) { - case *GrpcService_GoogleGrpc_CallCredentials_AccessToken: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.AccessToken))) - n += len(x.AccessToken) - case *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine: - s := proto.Size(x.GoogleComputeEngine) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.GoogleRefreshToken))) - n += len(x.GoogleRefreshToken) - case *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess: - s := proto.Size(x.ServiceAccountJwtAccess) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_CallCredentials_GoogleIam: - s := proto.Size(x.GoogleIam) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_CallCredentials_FromPlugin: - s := proto.Size(x.FromPlugin) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials struct { JsonKey string `protobuf:"bytes,1,opt,name=json_key,json=jsonKey,proto3" json:"json_key,omitempty"` TokenLifetimeSeconds uint64 `protobuf:"varint,2,opt,name=token_lifetime_seconds,json=tokenLifetimeSeconds,proto3" json:"token_lifetime_seconds,omitempty"` @@ -963,26 +612,18 @@ func (*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 0} } + func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Merge(m, src) } func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.Size(m) } func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials.DiscardUnknown(m) @@ -1022,26 +663,18 @@ func (*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 1} } + func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Merge(m, src) } func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.Size(m) } func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials.DiscardUnknown(m) @@ -1084,26 +717,18 @@ func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Descriptor() ([]byte, []int) { return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 2} } + func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Unmarshal(m, b) } func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Marshal(b, m, deterministic) } func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Merge(m, src) } func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.Size(m) } func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_DiscardUnknown() { xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.DiscardUnknown(m) @@ -1111,22 +736,28 @@ var xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin proto.InternalMessageInfo +func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType interface { isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` } + type GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` } func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType() { } + func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) isGrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_ConfigType() { } @@ -1137,3417 +768,236 @@ return nil } -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetConfig() *types.Struct { +// Deprecated: Do not use. +func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetConfig() *_struct.Struct { if x, ok := m.GetConfigType().(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config); ok { return x.Config } return nil } -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetTypedConfig() *types.Any { +func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) GetTypedConfig() *any.Any { if x, ok := m.GetConfigType().(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig); ok { return x.TypedConfig } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_OneofMarshaler, _GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_OneofUnmarshaler, _GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config)(nil), (*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig)(nil), } } -func _GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) - // config_type - switch x := m.ConfigType.(type) { - case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin.ConfigType has unexpected type %T", x) - } - return nil +type GrpcService_GoogleGrpc_CallCredentials_StsService struct { + TokenExchangeServiceUri string `protobuf:"bytes,1,opt,name=token_exchange_service_uri,json=tokenExchangeServiceUri,proto3" json:"token_exchange_service_uri,omitempty"` + Resource string `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` + Audience string `protobuf:"bytes,3,opt,name=audience,proto3" json:"audience,omitempty"` + Scope string `protobuf:"bytes,4,opt,name=scope,proto3" json:"scope,omitempty"` + RequestedTokenType string `protobuf:"bytes,5,opt,name=requested_token_type,json=requestedTokenType,proto3" json:"requested_token_type,omitempty"` + SubjectTokenPath string `protobuf:"bytes,6,opt,name=subject_token_path,json=subjectTokenPath,proto3" json:"subject_token_path,omitempty"` + SubjectTokenType string `protobuf:"bytes,7,opt,name=subject_token_type,json=subjectTokenType,proto3" json:"subject_token_type,omitempty"` + ActorTokenPath string `protobuf:"bytes,8,opt,name=actor_token_path,json=actorTokenPath,proto3" json:"actor_token_path,omitempty"` + ActorTokenType string `protobuf:"bytes,9,opt,name=actor_token_type,json=actorTokenType,proto3" json:"actor_token_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func _GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig{msg} - return true, err - default: - return false, nil - } +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) Reset() { + *m = GrpcService_GoogleGrpc_CallCredentials_StsService{} } - -func _GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_OneofSizer(msg proto.Message) (n int) { - m := msg.(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) - // config_type - switch x := m.ConfigType.(type) { - case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) String() string { + return proto.CompactTextString(m) } - -func init() { - proto.RegisterType((*GrpcService)(nil), "envoy.api.v2.core.GrpcService") - proto.RegisterType((*GrpcService_EnvoyGrpc)(nil), "envoy.api.v2.core.GrpcService.EnvoyGrpc") - proto.RegisterType((*GrpcService_GoogleGrpc)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc") - proto.RegisterType((*GrpcService_GoogleGrpc_SslCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.SslCredentials") - proto.RegisterType((*GrpcService_GoogleGrpc_GoogleLocalCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.GoogleLocalCredentials") - proto.RegisterType((*GrpcService_GoogleGrpc_ChannelCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.ChannelCredentials") - proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials") - proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.ServiceAccountJWTAccessCredentials") - proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.GoogleIAMCredentials") - proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.MetadataCredentialsFromPlugin") +func (*GrpcService_GoogleGrpc_CallCredentials_StsService) ProtoMessage() {} +func (*GrpcService_GoogleGrpc_CallCredentials_StsService) Descriptor() ([]byte, []int) { + return fileDescriptor_936cbcb9830ffdc2, []int{0, 1, 3, 3} } -func init() { - proto.RegisterFile("envoy/api/v2/core/grpc_service.proto", fileDescriptor_936cbcb9830ffdc2) +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_StsService.Unmarshal(m, b) +} +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_StsService.Marshal(b, m, deterministic) +} +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) XXX_Merge(src proto.Message) { + xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_StsService.Merge(m, src) +} +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) XXX_Size() int { + return xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_StsService.Size(m) +} +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) XXX_DiscardUnknown() { + xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_StsService.DiscardUnknown(m) } -var fileDescriptor_936cbcb9830ffdc2 = []byte{ - // 1084 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0x1b, 0xc5, - 0x1b, 0xf7, 0xc6, 0x4e, 0x5b, 0x3f, 0x9b, 0x26, 0xce, 0xc4, 0xff, 0xc4, 0xd9, 0x7f, 0x63, 0xa2, - 0xc2, 0x21, 0x20, 0x58, 0x0b, 0x97, 0x43, 0x23, 0x55, 0x40, 0xec, 0xa4, 0x75, 0x4a, 0x5a, 0x45, - 0xeb, 0x42, 0x2f, 0x48, 0xa3, 0xc9, 0x78, 0xec, 0x6c, 0xbb, 0xde, 0x59, 0xcd, 0xce, 0xba, 0x75, - 0xcf, 0x7c, 0x0b, 0xbe, 0x00, 0x47, 0x8e, 0x88, 0x53, 0x8f, 0x08, 0x71, 0xe0, 0x1b, 0x80, 0x22, - 0x2e, 0xfd, 0x16, 0x68, 0x5e, 0x9c, 0xf8, 0x25, 0xaa, 0x43, 0x6e, 0xbb, 0xcf, 0xef, 0xf9, 0x3d, - 0x2f, 0xbf, 0x79, 0xe6, 0x19, 0xf8, 0x88, 0xc5, 0x03, 0x3e, 0xac, 0x91, 0x24, 0xac, 0x0d, 0xea, - 0x35, 0xca, 0x05, 0xab, 0xf5, 0x44, 0x42, 0x71, 0xca, 0xc4, 0x20, 0xa4, 0xcc, 0x4f, 0x04, 0x97, - 0x1c, 0xad, 0x6a, 0x2f, 0x9f, 0x24, 0xa1, 0x3f, 0xa8, 0xfb, 0xca, 0xcb, 0xbb, 0x33, 0x4b, 0x3c, - 0x21, 0xa9, 0x25, 0x78, 0x9b, 0x3d, 0xce, 0x7b, 0x11, 0xab, 0xe9, 0xbf, 0x93, 0xac, 0x5b, 0x23, - 0xf1, 0xd0, 0x42, 0xd5, 0x69, 0xa8, 0x93, 0x09, 0x22, 0x43, 0x1e, 0x5b, 0xfc, 0xce, 0x34, 0x9e, - 0x4a, 0x91, 0x51, 0x69, 0xd1, 0xff, 0x4f, 0xa3, 0xac, 0x9f, 0xc8, 0x51, 0xe8, 0x8d, 0x01, 0x89, - 0xc2, 0x0e, 0x91, 0xac, 0x36, 0xfa, 0xb0, 0x40, 0xb9, 0xc7, 0x7b, 0x5c, 0x7f, 0xd6, 0xd4, 0x97, - 0xb1, 0xde, 0xfd, 0x07, 0x81, 0xfb, 0x48, 0x24, 0xb4, 0x6d, 0x7a, 0x45, 0x87, 0x00, 0xba, 0x29, - 0xac, 0x14, 0xa8, 0x38, 0xdb, 0xce, 0x8e, 0x5b, 0xdf, 0xf1, 0x67, 0x5a, 0xf7, 0xc7, 0x38, 0xfe, - 0x81, 0x42, 0x95, 0xa1, 0x95, 0x0b, 0x8a, 0x6c, 0xf4, 0x83, 0x8e, 0xc0, 0x35, 0x85, 0x9a, 0x58, - 0x0b, 0x3a, 0xd6, 0xc7, 0x73, 0x62, 0x3d, 0xd2, 0x0c, 0x1b, 0x0c, 0x7a, 0xe7, 0x7f, 0xe8, 0x1e, - 0xdc, 0x94, 0x61, 0x9f, 0xf1, 0x4c, 0x56, 0xf2, 0x3a, 0xd2, 0xa6, 0x6f, 0x50, 0x7f, 0x24, 0x83, - 0xbf, 0x6f, 0x45, 0x0c, 0x46, 0x9e, 0xe8, 0x10, 0x4a, 0x61, 0x1c, 0xca, 0x90, 0x44, 0xb8, 0xcf, - 0x24, 0xe9, 0x10, 0x49, 0x2a, 0x8b, 0xdb, 0xf9, 0x1d, 0xb7, 0x5e, 0xbd, 0xa4, 0x8e, 0x16, 0x23, - 0x1d, 0x26, 0xbe, 0x23, 0x51, 0xc6, 0x82, 0x15, 0xcb, 0x7b, 0x62, 0x69, 0xde, 0x2e, 0x14, 0xcf, - 0xfb, 0x44, 0x9f, 0xc2, 0x12, 0x8d, 0xb2, 0x54, 0x32, 0x81, 0x63, 0xd2, 0x67, 0x5a, 0xa7, 0x62, - 0xa3, 0xf8, 0xeb, 0xbb, 0xb7, 0xf9, 0x82, 0x58, 0xd8, 0x76, 0x02, 0xd7, 0xc2, 0x4f, 0x49, 0x9f, - 0x79, 0x7f, 0xad, 0x00, 0x5c, 0xf4, 0x85, 0x76, 0x00, 0x24, 0x11, 0x3d, 0x26, 0x71, 0x26, 0xc2, - 0x59, 0x6a, 0xd1, 0x80, 0xdf, 0x8a, 0x10, 0xf5, 0x61, 0x8d, 0x9e, 0x92, 0x38, 0x66, 0x11, 0xa6, - 0x82, 0x75, 0x58, 0xac, 0x2a, 0x4a, 0xad, 0x92, 0x0f, 0xae, 0xac, 0xa4, 0xdf, 0x34, 0x41, 0x9a, - 0x17, 0x31, 0x02, 0x44, 0x67, 0x6c, 0xa8, 0x03, 0x25, 0x4a, 0xa2, 0xc9, 0x5c, 0x79, 0xad, 0xd6, - 0xee, 0x7f, 0xc8, 0x45, 0xa2, 0x89, 0x44, 0x2b, 0x74, 0xd2, 0x80, 0x3e, 0x01, 0x37, 0x95, 0x44, - 0xe2, 0x44, 0xb0, 0x6e, 0xf8, 0xba, 0x52, 0x98, 0xee, 0x1f, 0x14, 0x7a, 0xac, 0x41, 0x74, 0x1f, - 0x2a, 0x63, 0xc5, 0xe0, 0x2e, 0xa1, 0x92, 0x8b, 0xa1, 0xd1, 0x7c, 0x51, 0x11, 0x83, 0xf5, 0x31, - 0xfc, 0xa1, 0x81, 0x95, 0xe6, 0xa8, 0x06, 0x37, 0x28, 0x8f, 0xbb, 0x61, 0xaf, 0x72, 0x43, 0xab, - 0xb5, 0x31, 0x33, 0x2d, 0x6d, 0x7d, 0xa5, 0x02, 0xeb, 0xe6, 0xfd, 0xe1, 0xc0, 0x72, 0x3b, 0x9d, - 0xa8, 0xf4, 0x01, 0x80, 0xe0, 0x5c, 0x62, 0xca, 0x84, 0x4c, 0xed, 0x5d, 0xd8, 0xba, 0x44, 0x89, - 0x7d, 0x22, 0x49, 0x9b, 0x67, 0x82, 0xb2, 0xa0, 0xa8, 0x08, 0x4d, 0xe5, 0x8f, 0xbe, 0x04, 0x37, - 0x11, 0xe1, 0x80, 0x48, 0x86, 0x5f, 0xb2, 0xa1, 0x3d, 0xb4, 0x39, 0x74, 0xb0, 0x8c, 0x6f, 0xd8, - 0x50, 0x65, 0x57, 0x89, 0x31, 0x3d, 0x25, 0x61, 0x6c, 0x67, 0x7e, 0x5e, 0x76, 0x45, 0x68, 0x2a, - 0x7f, 0xaf, 0x02, 0xeb, 0xe6, 0x50, 0x8e, 0x38, 0x25, 0xe3, 0x5d, 0x79, 0xbf, 0x2f, 0x00, 0x9a, - 0x1d, 0x08, 0x44, 0x61, 0x25, 0x4d, 0x27, 0xcf, 0xde, 0x74, 0x7c, 0xff, 0xea, 0x67, 0x3f, 0xa9, - 0x5f, 0x2b, 0x17, 0x2c, 0xa7, 0x93, 0x8a, 0x7e, 0x05, 0xcb, 0x76, 0x25, 0x74, 0x58, 0x97, 0x64, - 0x91, 0xb4, 0xb2, 0xac, 0xcf, 0x9c, 0xce, 0x81, 0x5a, 0x69, 0xad, 0x5c, 0x70, 0xdb, 0x00, 0xfb, - 0xc6, 0x1d, 0x71, 0x58, 0x8d, 0x54, 0x43, 0x53, 0x33, 0xaa, 0x62, 0x7c, 0x7d, 0xf5, 0x3a, 0x2f, - 0x57, 0xa6, 0x95, 0x0b, 0x4a, 0xd1, 0x94, 0xad, 0xb1, 0x05, 0xe5, 0x8b, 0x54, 0x38, 0x4d, 0x18, - 0x0d, 0xbb, 0x21, 0x13, 0x68, 0xf1, 0x97, 0x77, 0x6f, 0xf3, 0x8e, 0xf7, 0xc3, 0x2d, 0x58, 0x99, - 0x9a, 0x78, 0xf4, 0x21, 0x2c, 0x11, 0x4a, 0x59, 0x9a, 0x62, 0xc9, 0x5f, 0xb2, 0xd8, 0xdc, 0xf0, - 0x56, 0x2e, 0x70, 0x8d, 0xf5, 0x99, 0x32, 0xa2, 0x23, 0xf8, 0x9f, 0x55, 0x82, 0xf2, 0x7e, 0x92, - 0x49, 0x86, 0x59, 0xdc, 0x0b, 0x63, 0x36, 0x57, 0x90, 0x35, 0x03, 0x34, 0x0d, 0xeb, 0x40, 0x93, - 0x50, 0x1d, 0xca, 0x36, 0x9a, 0x60, 0x5d, 0xc1, 0xd2, 0x53, 0x9b, 0x3a, 0x6f, 0x53, 0x23, 0x83, - 0x06, 0x06, 0x34, 0x15, 0xfc, 0xe8, 0x80, 0x67, 0x5f, 0x38, 0x4c, 0x28, 0xe5, 0x59, 0x2c, 0xf1, - 0x8b, 0x57, 0x12, 0x9b, 0x2a, 0xf5, 0xbd, 0x74, 0xeb, 0xdf, 0x5f, 0xfb, 0xe2, 0xfb, 0xd6, 0x65, - 0xcf, 0x84, 0x7e, 0xfc, 0xfc, 0xd9, 0x9e, 0x0e, 0x3c, 0x29, 0xf8, 0x46, 0x3a, 0xe9, 0xf5, 0x4a, - 0x1a, 0x2f, 0xc4, 0xc1, 0x2e, 0x7f, 0x1c, 0x92, 0xbe, 0xbe, 0xeb, 0x6e, 0xfd, 0xe9, 0xf5, 0x8b, - 0x31, 0xd0, 0xe1, 0xde, 0x93, 0xc9, 0xf4, 0x45, 0x93, 0xe3, 0x90, 0xf4, 0xd1, 0x1b, 0x70, 0xbb, - 0x82, 0xf7, 0x71, 0x12, 0x65, 0xbd, 0x30, 0xb6, 0x5b, 0xe3, 0xf9, 0xf5, 0x33, 0x8e, 0x1e, 0x8e, - 0x31, 0xdb, 0x43, 0xc1, 0xfb, 0xc7, 0x3a, 0xbc, 0x7a, 0xdb, 0xba, 0xe7, 0x7f, 0x5e, 0x06, 0x77, - 0xe7, 0xab, 0x85, 0x36, 0xe1, 0xd6, 0x8b, 0x94, 0xc7, 0x7a, 0x9b, 0xe8, 0x99, 0x0a, 0x6e, 0xaa, - 0x7f, 0xb5, 0x2b, 0xbe, 0x80, 0x75, 0x7d, 0xe0, 0x38, 0x0a, 0xbb, 0x4c, 0x3d, 0x7e, 0x38, 0x65, - 0x94, 0xc7, 0x1d, 0xf3, 0x56, 0x14, 0x82, 0xb2, 0x46, 0x8f, 0x2c, 0xd8, 0x36, 0x98, 0x37, 0x80, - 0xf2, 0x65, 0xba, 0xa0, 0x1a, 0xac, 0x91, 0x4c, 0x9e, 0x72, 0x11, 0xbe, 0xd1, 0xef, 0xe9, 0xf8, - 0x1c, 0x07, 0x68, 0x02, 0x32, 0xa3, 0xf4, 0x19, 0x8c, 0xac, 0x72, 0x88, 0x53, 0x16, 0x31, 0xb5, - 0x87, 0x75, 0xea, 0x62, 0xb0, 0x7a, 0x8e, 0xb4, 0x2d, 0xe0, 0xfd, 0xec, 0xc0, 0xd6, 0x7b, 0xe5, - 0x41, 0x08, 0x0a, 0x17, 0xef, 0x6a, 0xa0, 0xbf, 0xd1, 0xe7, 0xe7, 0x1b, 0x7d, 0xe1, 0xbd, 0x1b, - 0xbd, 0x95, 0x1b, 0xed, 0x74, 0xb4, 0x0b, 0x4b, 0x72, 0x98, 0xb0, 0x0e, 0xb6, 0x44, 0xb3, 0x28, - 0xca, 0x33, 0xc4, 0xbd, 0x58, 0xdd, 0x2c, 0x57, 0xfb, 0x36, 0xb5, 0x6b, 0xe3, 0x36, 0xb8, 0x86, - 0x84, 0x95, 0x75, 0xce, 0x1a, 0x68, 0x6c, 0x42, 0xc9, 0x3e, 0xe9, 0xd3, 0xd0, 0xe3, 0xc2, 0xad, - 0x42, 0x69, 0xb1, 0x71, 0xf0, 0xd3, 0x59, 0xd5, 0xf9, 0xed, 0xac, 0xea, 0xfc, 0x79, 0x56, 0x75, - 0xfe, 0x3e, 0xab, 0x3a, 0xf0, 0x41, 0xc8, 0xcd, 0x70, 0x25, 0x82, 0xbf, 0x1e, 0xce, 0xce, 0x59, - 0xa3, 0x34, 0x36, 0x68, 0xc7, 0xaa, 0xd2, 0x63, 0xe7, 0xe4, 0x86, 0x2e, 0xf9, 0xde, 0xbf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x73, 0xdb, 0x2f, 0x5b, 0xb2, 0x0a, 0x00, 0x00, -} - -func (this *GrpcService) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService) - if !ok { - that2, ok := that.(GrpcService) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.TargetSpecifier == nil { - if this.TargetSpecifier != nil { - return false - } - } else if this.TargetSpecifier == nil { - return false - } else if !this.TargetSpecifier.Equal(that1.TargetSpecifier) { - return false - } - if !this.Timeout.Equal(that1.Timeout) { - return false - } - if len(this.InitialMetadata) != len(that1.InitialMetadata) { - return false - } - for i := range this.InitialMetadata { - if !this.InitialMetadata[i].Equal(that1.InitialMetadata[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_EnvoyGrpc_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_EnvoyGrpc_) - if !ok { - that2, ok := that.(GrpcService_EnvoyGrpc_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.EnvoyGrpc.Equal(that1.EnvoyGrpc) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.GoogleGrpc.Equal(that1.GoogleGrpc) { - return false - } - return true -} -func (this *GrpcService_EnvoyGrpc) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_EnvoyGrpc) - if !ok { - that2, ok := that.(GrpcService_EnvoyGrpc) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.ClusterName != that1.ClusterName { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.TargetUri != that1.TargetUri { - return false - } - if !this.ChannelCredentials.Equal(that1.ChannelCredentials) { - return false - } - if len(this.CallCredentials) != len(that1.CallCredentials) { - return false - } - for i := range this.CallCredentials { - if !this.CallCredentials[i].Equal(that1.CallCredentials[i]) { - return false - } - } - if this.StatPrefix != that1.StatPrefix { - return false - } - if this.CredentialsFactoryName != that1.CredentialsFactoryName { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_SslCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_SslCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_SslCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.RootCerts.Equal(that1.RootCerts) { - return false - } - if !this.PrivateKey.Equal(that1.PrivateKey) { - return false - } - if !this.CertChain.Equal(that1.CertChain) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_GoogleLocalCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_GoogleLocalCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_GoogleLocalCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_ChannelCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_ChannelCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_ChannelCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.CredentialSpecifier == nil { - if this.CredentialSpecifier != nil { - return false - } - } else if this.CredentialSpecifier == nil { - return false - } else if !this.CredentialSpecifier.Equal(that1.CredentialSpecifier) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SslCredentials.Equal(that1.SslCredentials) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.GoogleDefault.Equal(that1.GoogleDefault) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.LocalCredentials.Equal(that1.LocalCredentials) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.CredentialSpecifier == nil { - if this.CredentialSpecifier != nil { - return false - } - } else if this.CredentialSpecifier == nil { - return false - } else if !this.CredentialSpecifier.Equal(that1.CredentialSpecifier) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_AccessToken) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_AccessToken) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_AccessToken) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.AccessToken != that1.AccessToken { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.GoogleComputeEngine.Equal(that1.GoogleComputeEngine) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.GoogleRefreshToken != that1.GoogleRefreshToken { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ServiceAccountJwtAccess.Equal(that1.ServiceAccountJwtAccess) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_GoogleIam) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_GoogleIam) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_GoogleIam) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.GoogleIam.Equal(that1.GoogleIam) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_FromPlugin) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_FromPlugin) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_FromPlugin) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.FromPlugin.Equal(that1.FromPlugin) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.JsonKey != that1.JsonKey { - return false - } - if this.TokenLifetimeSeconds != that1.TokenLifetimeSeconds { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.AuthorizationToken != that1.AuthorizationToken { - return false - } - if this.AuthoritySelector != that1.AuthoritySelector { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true -} -func (this *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) - if !ok { - that2, ok := that.(GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (m *GrpcService) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TargetSpecifier != nil { - nn1, err := m.TargetSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if m.Timeout != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.Timeout.Size())) - n2, err := m.Timeout.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if len(m.InitialMetadata) > 0 { - for _, msg := range m.InitialMetadata { - dAtA[i] = 0x2a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_EnvoyGrpc_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.EnvoyGrpc != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.EnvoyGrpc.Size())) - n3, err := m.EnvoyGrpc.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GoogleGrpc != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.GoogleGrpc.Size())) - n4, err := m.GoogleGrpc.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - return i, nil -} -func (m *GrpcService_EnvoyGrpc) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_EnvoyGrpc) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ClusterName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.ClusterName))) - i += copy(dAtA[i:], m.ClusterName) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.TargetUri) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.TargetUri))) - i += copy(dAtA[i:], m.TargetUri) - } - if m.ChannelCredentials != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.ChannelCredentials.Size())) - n5, err := m.ChannelCredentials.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if len(m.CallCredentials) > 0 { - for _, msg := range m.CallCredentials { - dAtA[i] = 0x1a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.StatPrefix) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.StatPrefix))) - i += copy(dAtA[i:], m.StatPrefix) - } - if len(m.CredentialsFactoryName) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.CredentialsFactoryName))) - i += copy(dAtA[i:], m.CredentialsFactoryName) - } - if m.Config != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.Config.Size())) - n6, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_SslCredentials) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_SslCredentials) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RootCerts != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.RootCerts.Size())) - n7, err := m.RootCerts.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.PrivateKey != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.PrivateKey.Size())) - n8, err := m.PrivateKey.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.CertChain != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.CertChain.Size())) - n9, err := m.CertChain.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_ChannelCredentials) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_ChannelCredentials) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CredentialSpecifier != nil { - nn10, err := m.CredentialSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn10 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.SslCredentials != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.SslCredentials.Size())) - n11, err := m.SslCredentials.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GoogleDefault != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.GoogleDefault.Size())) - n12, err := m.GoogleDefault.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.LocalCredentials != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.LocalCredentials.Size())) - n13, err := m.LocalCredentials.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CredentialSpecifier != nil { - nn14, err := m.CredentialSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn14 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_AccessToken) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.AccessToken))) - i += copy(dAtA[i:], m.AccessToken) - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GoogleComputeEngine != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.GoogleComputeEngine.Size())) - n15, err := m.GoogleComputeEngine.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x1a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.GoogleRefreshToken))) - i += copy(dAtA[i:], m.GoogleRefreshToken) - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ServiceAccountJwtAccess != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.ServiceAccountJwtAccess.Size())) - n16, err := m.ServiceAccountJwtAccess.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIam) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GoogleIam != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.GoogleIam.Size())) - n17, err := m.GoogleIam.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_FromPlugin) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.FromPlugin != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.FromPlugin.Size())) - n18, err := m.FromPlugin.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.JsonKey) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.JsonKey))) - i += copy(dAtA[i:], m.JsonKey) - } - if m.TokenLifetimeSeconds != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.TokenLifetimeSeconds)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.AuthorizationToken) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.AuthorizationToken))) - i += copy(dAtA[i:], m.AuthorizationToken) - } - if len(m.AuthoritySelector) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.AuthoritySelector))) - i += copy(dAtA[i:], m.AuthoritySelector) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn19, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn19 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.Config.Size())) - n20, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - return i, nil -} -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGrpcService(dAtA, i, uint64(m.TypedConfig.Size())) - n21, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - return i, nil -} -func encodeVarintGrpcService(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *GrpcService) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TargetSpecifier != nil { - n += m.TargetSpecifier.Size() - } - if m.Timeout != nil { - l = m.Timeout.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - if len(m.InitialMetadata) > 0 { - for _, e := range m.InitialMetadata { - l = e.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_EnvoyGrpc_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.EnvoyGrpc != nil { - l = m.EnvoyGrpc.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GoogleGrpc != nil { - l = m.GoogleGrpc.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_EnvoyGrpc) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterName) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.TargetUri) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.ChannelCredentials != nil { - l = m.ChannelCredentials.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - if len(m.CallCredentials) > 0 { - for _, e := range m.CallCredentials { - l = e.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - } - l = len(m.StatPrefix) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - l = len(m.CredentialsFactoryName) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_SslCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RootCerts != nil { - l = m.RootCerts.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.PrivateKey != nil { - l = m.PrivateKey.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.CertChain != nil { - l = m.CertChain.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_ChannelCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CredentialSpecifier != nil { - n += m.CredentialSpecifier.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SslCredentials != nil { - l = m.SslCredentials.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GoogleDefault != nil { - l = m.GoogleDefault.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.LocalCredentials != nil { - l = m.LocalCredentials.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CredentialSpecifier != nil { - n += m.CredentialSpecifier.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_AccessToken) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.AccessToken) - n += 1 + l + sovGrpcService(uint64(l)) - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GoogleComputeEngine != nil { - l = m.GoogleComputeEngine.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.GoogleRefreshToken) - n += 1 + l + sovGrpcService(uint64(l)) - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ServiceAccountJwtAccess != nil { - l = m.ServiceAccountJwtAccess.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIam) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GoogleIam != nil { - l = m.GoogleIam.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_FromPlugin) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.FromPlugin != nil { - l = m.FromPlugin.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.JsonKey) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.TokenLifetimeSeconds != 0 { - n += 1 + sovGrpcService(uint64(m.TokenLifetimeSeconds)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.AuthorizationToken) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - l = len(m.AuthoritySelector) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovGrpcService(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovGrpcService(uint64(l)) - } - return n -} - -func sovGrpcService(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozGrpcService(x uint64) (n int) { - return sovGrpcService(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *GrpcService) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GrpcService: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GrpcService: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EnvoyGrpc", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_EnvoyGrpc{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.TargetSpecifier = &GrpcService_EnvoyGrpc_{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleGrpc", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_GoogleGrpc{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.TargetSpecifier = &GrpcService_GoogleGrpc_{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timeout == nil { - m.Timeout = &types.Duration{} - } - if err := m.Timeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.InitialMetadata = append(m.InitialMetadata, &HeaderValue{}) - if err := m.InitialMetadata[len(m.InitialMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } +var xxx_messageInfo_GrpcService_GoogleGrpc_CallCredentials_StsService proto.InternalMessageInfo - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetTokenExchangeServiceUri() string { + if m != nil { + return m.TokenExchangeServiceUri } - return nil + return "" } -func (m *GrpcService_EnvoyGrpc) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EnvoyGrpc: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EnvoyGrpc: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetResource() string { + if m != nil { + return m.Resource } - return nil + return "" } -func (m *GrpcService_GoogleGrpc) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GoogleGrpc: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GoogleGrpc: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetUri", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TargetUri = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelCredentials", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ChannelCredentials == nil { - m.ChannelCredentials = &GrpcService_GoogleGrpc_ChannelCredentials{} - } - if err := m.ChannelCredentials.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CallCredentials", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CallCredentials = append(m.CallCredentials, &GrpcService_GoogleGrpc_CallCredentials{}) - if err := m.CallCredentials[len(m.CallCredentials)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StatPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StatPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CredentialsFactoryName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CredentialsFactoryName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Config == nil { - m.Config = &types.Struct{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetAudience() string { + if m != nil { + return m.Audience } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_SslCredentials) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SslCredentials: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SslCredentials: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RootCerts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RootCerts == nil { - m.RootCerts = &DataSource{} - } - if err := m.RootCerts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrivateKey", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PrivateKey == nil { - m.PrivateKey = &DataSource{} - } - if err := m.PrivateKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertChain", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CertChain == nil { - m.CertChain = &DataSource{} - } - if err := m.CertChain.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetScope() string { + if m != nil { + return m.Scope } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GoogleLocalCredentials: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GoogleLocalCredentials: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetRequestedTokenType() string { + if m != nil { + return m.RequestedTokenType } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_ChannelCredentials) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ChannelCredentials: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ChannelCredentials: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SslCredentials", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_GoogleGrpc_SslCredentials{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleDefault", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Empty{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalCredentials", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_GoogleGrpc_GoogleLocalCredentials{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetSubjectTokenPath() string { + if m != nil { + return m.SubjectTokenPath } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_CallCredentials) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CallCredentials: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CallCredentials: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessToken", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_AccessToken{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleComputeEngine", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Empty{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleRefreshToken", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountJwtAccess", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GoogleIam", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_GoogleIam{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromPlugin", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.CredentialSpecifier = &GrpcService_GoogleGrpc_CallCredentials_FromPlugin{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetSubjectTokenType() string { + if m != nil { + return m.SubjectTokenType } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ServiceAccountJWTAccessCredentials: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceAccountJWTAccessCredentials: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JsonKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.JsonKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenLifetimeSeconds", wireType) - } - m.TokenLifetimeSeconds = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TokenLifetimeSeconds |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetActorTokenPath() string { + if m != nil { + return m.ActorTokenPath } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GoogleIAMCredentials: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GoogleIAMCredentials: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthorizationToken", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AuthorizationToken = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthoritySelector", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AuthoritySelector = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) GetActorTokenType() string { + if m != nil { + return m.ActorTokenType } - return nil + return "" } -func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MetadataCredentialsFromPlugin: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MetadataCredentialsFromPlugin: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGrpcService - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGrpcService - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGrpcService - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGrpcService(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGrpcService - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func init() { + proto.RegisterType((*GrpcService)(nil), "envoy.api.v2.core.GrpcService") + proto.RegisterType((*GrpcService_EnvoyGrpc)(nil), "envoy.api.v2.core.GrpcService.EnvoyGrpc") + proto.RegisterType((*GrpcService_GoogleGrpc)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc") + proto.RegisterType((*GrpcService_GoogleGrpc_SslCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.SslCredentials") + proto.RegisterType((*GrpcService_GoogleGrpc_GoogleLocalCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.GoogleLocalCredentials") + proto.RegisterType((*GrpcService_GoogleGrpc_ChannelCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.ChannelCredentials") + proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials") + proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.ServiceAccountJWTAccessCredentials") + proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.GoogleIAMCredentials") + proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.MetadataCredentialsFromPlugin") + proto.RegisterType((*GrpcService_GoogleGrpc_CallCredentials_StsService)(nil), "envoy.api.v2.core.GrpcService.GoogleGrpc.CallCredentials.StsService") +} + +func init() { + proto.RegisterFile("envoy/api/v2/core/grpc_service.proto", fileDescriptor_936cbcb9830ffdc2) +} + +var fileDescriptor_936cbcb9830ffdc2 = []byte{ + // 1299 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0x8f, 0x9d, 0xbf, 0x7e, 0xdb, 0x26, 0xee, 0xc4, 0x24, 0xee, 0xf6, 0x0f, 0x51, 0x41, 0x28, + 0x20, 0x61, 0x23, 0x17, 0x44, 0x2b, 0x2a, 0x41, 0x9c, 0xa4, 0x75, 0x4a, 0x5a, 0x45, 0x9b, 0x42, + 0x85, 0x84, 0xb4, 0x9a, 0x8c, 0xc7, 0xce, 0xb4, 0xeb, 0x9d, 0x65, 0x66, 0xd6, 0xad, 0x7b, 0xe2, + 0xde, 0x03, 0x57, 0x24, 0xae, 0x7c, 0x04, 0x24, 0x10, 0x9f, 0xa0, 0x57, 0x24, 0x4e, 0xf0, 0x2d, + 0x38, 0x21, 0x24, 0x10, 0x9a, 0x3f, 0x6b, 0x7b, 0xed, 0x28, 0x29, 0xe5, 0xb6, 0x33, 0xbf, 0xf7, + 0x7b, 0xef, 0xcd, 0x6f, 0xde, 0x9b, 0xb7, 0xf0, 0x26, 0x8d, 0xfb, 0x7c, 0x50, 0xc7, 0x09, 0xab, + 0xf7, 0x1b, 0x75, 0xc2, 0x05, 0xad, 0x77, 0x45, 0x42, 0x42, 0x49, 0x45, 0x9f, 0x11, 0x5a, 0x4b, + 0x04, 0x57, 0x1c, 0x5d, 0x30, 0x56, 0x35, 0x9c, 0xb0, 0x5a, 0xbf, 0x51, 0xd3, 0x56, 0xfe, 0xe5, + 0x69, 0xe2, 0x11, 0x96, 0x8e, 0xe0, 0x5f, 0xec, 0x72, 0xde, 0x8d, 0x68, 0xdd, 0xac, 0x8e, 0xd2, + 0x4e, 0x1d, 0xc7, 0x03, 0x07, 0x5d, 0x9d, 0x84, 0xda, 0xa9, 0xc0, 0x8a, 0xf1, 0xd8, 0xe1, 0x97, + 0x26, 0x71, 0xda, 0x4b, 0x54, 0x46, 0xbe, 0x3c, 0x09, 0x4a, 0x25, 0x52, 0xa2, 0x32, 0xd7, 0x69, + 0x3b, 0xc1, 0x75, 0x1c, 0xc7, 0x5c, 0x19, 0x8f, 0xb2, 0xde, 0x63, 0x5d, 0x81, 0x55, 0x96, 0xd5, + 0xc6, 0x14, 0x2e, 0x69, 0x2c, 0x99, 0x62, 0xfd, 0xcc, 0xe2, 0xca, 0xb4, 0x85, 0xc2, 0x2a, 0x95, + 0x0e, 0x5e, 0xef, 0xe3, 0x88, 0xb5, 0xb1, 0xa2, 0xf5, 0xec, 0xc3, 0x02, 0xd7, 0x7e, 0x5f, 0x03, + 0xef, 0x8e, 0x48, 0xc8, 0xa1, 0x95, 0x0d, 0xed, 0x01, 0x18, 0x7d, 0x42, 0x2d, 0x66, 0xb5, 0xb0, + 0x51, 0xd8, 0xf4, 0x1a, 0x9b, 0xb5, 0x29, 0x15, 0x6b, 0x63, 0x9c, 0xda, 0xae, 0x46, 0xf5, 0x46, + 0x6b, 0x26, 0x28, 0xd1, 0x6c, 0x81, 0xf6, 0xc1, 0xb3, 0x87, 0xb6, 0xbe, 0x8a, 0xc6, 0xd7, 0xdb, + 0x67, 0xf8, 0xba, 0x63, 0x18, 0xce, 0x19, 0x74, 0x87, 0x2b, 0x74, 0x1d, 0x16, 0x15, 0xeb, 0x51, + 0x9e, 0xaa, 0xea, 0xac, 0xf1, 0x74, 0xb1, 0x66, 0xd1, 0x5a, 0x26, 0x69, 0x6d, 0xc7, 0xdd, 0x47, + 0x90, 0x59, 0xa2, 0x3d, 0x28, 0xb3, 0x98, 0x29, 0x86, 0xa3, 0xb0, 0x47, 0x15, 0x6e, 0x63, 0x85, + 0xab, 0xf3, 0x1b, 0xb3, 0x9b, 0x5e, 0xe3, 0xea, 0x09, 0x79, 0xb4, 0x28, 0x6e, 0x53, 0xf1, 0x39, + 0x8e, 0x52, 0x1a, 0xac, 0x38, 0xde, 0x3d, 0x47, 0xf3, 0x3f, 0x84, 0xd2, 0xf0, 0x9c, 0xe8, 0x1d, + 0x38, 0x47, 0xa2, 0x54, 0x2a, 0x2a, 0xc2, 0x18, 0xf7, 0xa8, 0xd1, 0xa9, 0xd4, 0x5c, 0xfc, 0xab, + 0x39, 0x27, 0x8a, 0x1b, 0x85, 0xc0, 0x73, 0xe0, 0x7d, 0xdc, 0xa3, 0xfe, 0x6f, 0xab, 0x00, 0xa3, + 0x53, 0xa1, 0xb7, 0x00, 0x14, 0x16, 0x5d, 0xaa, 0xc2, 0x54, 0xb0, 0x49, 0x62, 0xc9, 0x42, 0x9f, + 0x09, 0x86, 0x7a, 0xb0, 0x4a, 0x8e, 0x71, 0x1c, 0xd3, 0x28, 0x24, 0x82, 0xb6, 0x69, 0xac, 0xb3, + 0x91, 0x4e, 0xc5, 0x5b, 0x2f, 0xad, 0x62, 0x6d, 0xdb, 0x3a, 0xd9, 0x1e, 0xf9, 0x08, 0x10, 0x99, + 0xda, 0x43, 0x6d, 0x28, 0x13, 0x1c, 0xe5, 0x63, 0xcd, 0x1a, 0xa5, 0x6e, 0xfe, 0x87, 0x58, 0x38, + 0xca, 0x05, 0x5a, 0x21, 0xf9, 0x0d, 0xb4, 0x09, 0x9e, 0x2e, 0xcb, 0x30, 0x11, 0xb4, 0xc3, 0x9e, + 0x56, 0xe7, 0xf2, 0xa7, 0x07, 0x8d, 0x1d, 0x18, 0x08, 0xdd, 0x80, 0xea, 0x58, 0x2a, 0x61, 0x07, + 0x13, 0xc5, 0xc5, 0xc0, 0xaa, 0x3d, 0xaf, 0x69, 0xc1, 0xda, 0x18, 0x7e, 0xdb, 0xc2, 0x5a, 0x6f, + 0x54, 0x87, 0x05, 0xc2, 0xe3, 0x0e, 0xeb, 0x56, 0x17, 0x8c, 0x56, 0xeb, 0x53, 0x75, 0x72, 0x68, + 0x5a, 0x2f, 0x70, 0x66, 0xfe, 0xaf, 0x05, 0x58, 0x3e, 0x94, 0xb9, 0x3c, 0x6f, 0x01, 0x08, 0xce, + 0x55, 0x48, 0xa8, 0x50, 0xd2, 0x75, 0xc1, 0x95, 0x13, 0x74, 0xd8, 0xc1, 0x0a, 0x1f, 0xf2, 0x54, + 0x10, 0x1a, 0x94, 0x34, 0x61, 0x5b, 0xdb, 0xa3, 0xdb, 0xe0, 0x25, 0x82, 0xf5, 0xb1, 0xa2, 0xe1, + 0x63, 0x3a, 0x70, 0x57, 0x76, 0x3a, 0xbd, 0xb9, 0xf0, 0xd3, 0x8f, 0xcf, 0xbf, 0x2f, 0x16, 0x02, + 0x70, 0xcc, 0x4f, 0xe9, 0x40, 0x67, 0xa1, 0x13, 0x08, 0xc9, 0x31, 0x66, 0xb1, 0xab, 0xfa, 0xb3, + 0xb2, 0xd0, 0x84, 0x6d, 0x6d, 0xef, 0x57, 0x61, 0xcd, 0x5e, 0xcd, 0x3e, 0x27, 0x78, 0xfc, 0x74, + 0xfe, 0x8b, 0x22, 0xa0, 0xe9, 0xb2, 0x40, 0x04, 0x56, 0xa4, 0xcc, 0x57, 0x80, 0x3d, 0xf9, 0x8d, + 0x97, 0xaf, 0x80, 0xbc, 0x8e, 0xad, 0x99, 0x60, 0x59, 0xe6, 0x95, 0xfd, 0x18, 0x96, 0xdd, 0xa3, + 0xd0, 0xa6, 0x1d, 0x9c, 0x46, 0xca, 0xc9, 0xb3, 0x36, 0x75, 0x4b, 0xbb, 0xfa, 0xf5, 0x6c, 0xcd, + 0x04, 0xe7, 0x2d, 0xb0, 0x63, 0xcd, 0x11, 0x87, 0x0b, 0x91, 0x3e, 0xd0, 0x44, 0xa5, 0x6a, 0x1f, + 0x9f, 0xbc, 0x7c, 0x9e, 0x27, 0x2b, 0xd3, 0x9a, 0x09, 0xca, 0xd1, 0xc4, 0x5e, 0xf3, 0x12, 0x54, + 0x46, 0xa1, 0x42, 0x99, 0x50, 0xc2, 0x3a, 0x8c, 0x0a, 0x34, 0xfb, 0x67, 0xb3, 0xe0, 0xff, 0xed, + 0xc1, 0xca, 0x44, 0xd5, 0xa3, 0x37, 0xe0, 0x1c, 0x26, 0x84, 0x4a, 0x19, 0x2a, 0xfe, 0x98, 0xc6, + 0xb6, 0xc7, 0x5b, 0x33, 0x81, 0x67, 0x77, 0x1f, 0xe8, 0x4d, 0xb4, 0x0f, 0xaf, 0x39, 0x1d, 0x08, + 0xef, 0x25, 0xa9, 0xa2, 0x21, 0x8d, 0xbb, 0x2c, 0xa6, 0x67, 0xca, 0xb1, 0x6a, 0x81, 0x6d, 0xcb, + 0xda, 0x35, 0x24, 0xd4, 0x80, 0x8a, 0xf3, 0x26, 0x68, 0x47, 0x50, 0x79, 0xec, 0x42, 0xcf, 0xba, + 0xd0, 0xc8, 0xa2, 0x81, 0x05, 0x6d, 0x06, 0xdf, 0x15, 0xc0, 0x77, 0xc3, 0x32, 0xc4, 0x84, 0xf0, + 0x34, 0x56, 0xe1, 0xa3, 0x27, 0x2a, 0xb4, 0x59, 0x9a, 0xde, 0xf4, 0x1a, 0x5f, 0xbe, 0x72, 0xf3, + 0xd7, 0x9c, 0xc9, 0x96, 0x75, 0x7d, 0xf7, 0xe1, 0x83, 0x2d, 0xe3, 0x38, 0x2f, 0xf7, 0xba, 0xcc, + 0x5b, 0x3d, 0x51, 0xd6, 0x0a, 0x71, 0x70, 0x8f, 0x7f, 0xc8, 0x70, 0xcf, 0x74, 0xbc, 0xd7, 0xb8, + 0xff, 0xea, 0xc9, 0x58, 0x68, 0x6f, 0xeb, 0x5e, 0x3e, 0x7c, 0xc9, 0xc6, 0xd8, 0xc3, 0x3d, 0xf4, + 0x0c, 0xbc, 0x8e, 0xe0, 0xbd, 0x30, 0x89, 0xd2, 0x2e, 0x8b, 0xdd, 0xdb, 0xf1, 0xf0, 0xd5, 0x23, + 0x66, 0x83, 0x63, 0x6c, 0xef, 0xb6, 0xe0, 0xbd, 0x03, 0xe3, 0x5e, 0xcf, 0xb6, 0xce, 0x70, 0x85, + 0xba, 0xfa, 0x59, 0x94, 0xd9, 0xaf, 0x4b, 0x75, 0xd1, 0xc4, 0xde, 0xf9, 0x1f, 0xd2, 0x2b, 0xe9, + 0xac, 0x74, 0x20, 0x39, 0x5c, 0xf9, 0x29, 0x5c, 0x3b, 0xfb, 0x5a, 0xd0, 0x45, 0x58, 0x7a, 0x24, + 0x79, 0x6c, 0x1e, 0x2f, 0x53, 0xbc, 0xc1, 0xa2, 0x5e, 0xeb, 0x27, 0xe9, 0x7d, 0x58, 0x33, 0x95, + 0x15, 0x46, 0xac, 0x43, 0xf5, 0x94, 0x0d, 0x25, 0x25, 0x3c, 0x6e, 0xdb, 0xc1, 0x34, 0x17, 0x54, + 0x0c, 0xba, 0xef, 0xc0, 0x43, 0x8b, 0xf9, 0x7d, 0xa8, 0x9c, 0x74, 0x01, 0xa8, 0x0e, 0xab, 0x38, + 0x55, 0xc7, 0x5c, 0xb0, 0x67, 0x66, 0x70, 0x8f, 0x37, 0x4c, 0x80, 0x72, 0x90, 0xad, 0xd9, 0x77, + 0x21, 0xdb, 0x55, 0x83, 0x50, 0xd2, 0x88, 0xea, 0x67, 0xdf, 0x84, 0x2e, 0x05, 0x17, 0x86, 0xc8, + 0xa1, 0x03, 0xfc, 0x1f, 0x0a, 0x70, 0xe5, 0xd4, 0x7b, 0x40, 0x08, 0xe6, 0x46, 0x03, 0x3c, 0x30, + 0xdf, 0xe8, 0x83, 0xe1, 0x00, 0x29, 0x9e, 0x3a, 0x40, 0x9a, 0xc5, 0x6a, 0xa1, 0x35, 0x93, 0x8d, + 0x11, 0x74, 0x13, 0xce, 0xa9, 0x41, 0x42, 0xdb, 0xa1, 0x23, 0xdb, 0x37, 0xa9, 0x32, 0x45, 0xde, + 0x8a, 0x75, 0x1b, 0x7b, 0xc6, 0x76, 0xdb, 0x98, 0x36, 0xcf, 0x83, 0x67, 0x49, 0xa1, 0xde, 0xf5, + 0x9f, 0xcf, 0x02, 0x8c, 0xae, 0x10, 0x7d, 0x04, 0xbe, 0xd5, 0x9c, 0x3e, 0xd5, 0x83, 0xbb, 0x4b, + 0xb3, 0x42, 0x19, 0xfd, 0x41, 0x04, 0xeb, 0xc6, 0x62, 0xd7, 0x19, 0x38, 0xa6, 0xfe, 0x8d, 0xf0, + 0x61, 0x49, 0x50, 0x69, 0x86, 0x83, 0xd3, 0x69, 0xb8, 0xd6, 0x18, 0x4e, 0xdb, 0x8c, 0xc6, 0x84, + 0xda, 0x97, 0x22, 0x18, 0xae, 0x51, 0x05, 0xe6, 0x25, 0xe1, 0x09, 0xb5, 0x33, 0x3a, 0xb0, 0x0b, + 0xf4, 0x1e, 0x54, 0x04, 0xfd, 0x2a, 0xa5, 0x52, 0xd1, 0xb6, 0xbd, 0x2c, 0x93, 0xb1, 0x9b, 0xc8, + 0x68, 0x88, 0x99, 0xdb, 0x7a, 0x30, 0x48, 0xb4, 0x98, 0x48, 0xa6, 0x47, 0x8f, 0x28, 0x51, 0xce, + 0x3e, 0xc1, 0xea, 0xd8, 0x74, 0xd7, 0xd8, 0xe0, 0x2f, 0x3b, 0x13, 0x43, 0x3b, 0xc0, 0xea, 0x78, + 0x9a, 0x66, 0xc2, 0x2c, 0x9e, 0x42, 0x33, 0xd1, 0x36, 0xa1, 0x6c, 0xfe, 0x04, 0xc6, 0x63, 0x2d, + 0x99, 0xdc, 0x96, 0xcd, 0xfe, 0x28, 0xc0, 0x84, 0xa5, 0x71, 0x5f, 0x9a, 0xb4, 0xd4, 0x3e, 0x4f, + 0x7d, 0xff, 0x9b, 0xeb, 0x50, 0x76, 0x7f, 0x73, 0x79, 0xe0, 0xee, 0xdc, 0xd2, 0x5c, 0x79, 0xbe, + 0xf9, 0xc5, 0x1f, 0xdf, 0xfe, 0xf3, 0xcd, 0xfc, 0x1a, 0xaa, 0xd8, 0x56, 0xb6, 0x97, 0x6c, 0x5b, + 0xb9, 0x7f, 0xfd, 0xe7, 0xaf, 0x5f, 0xfc, 0xb2, 0x50, 0x2c, 0x17, 0xe0, 0x75, 0xc6, 0x6d, 0xaf, + 0x27, 0x82, 0x3f, 0x1d, 0x4c, 0xb7, 0x7d, 0xb3, 0x3c, 0xd6, 0xf7, 0x07, 0xba, 0x8e, 0x0e, 0x0a, + 0x47, 0x0b, 0xa6, 0xa0, 0xae, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x31, 0xbc, 0xb6, 0xb8, 0x08, + 0x0d, 0x00, 0x00, } -func skipGrpcService(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGrpcService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGrpcService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGrpcService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthGrpcService - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthGrpcService - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGrpcService - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipGrpcService(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthGrpcService - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthGrpcService = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGrpcService = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/grpc_service.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/grpc_service.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _grpc_service_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on GrpcService with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -41,17 +44,12 @@ return nil } - { - tmp := m.GetTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcServiceValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcServiceValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, } } } @@ -59,17 +57,12 @@ for idx, item := range m.GetInitialMetadata() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcServiceValidationError{ - field: fmt.Sprintf("InitialMetadata[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcServiceValidationError{ + field: fmt.Sprintf("InitialMetadata[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -80,34 +73,24 @@ case *GrpcService_EnvoyGrpc_: - { - tmp := m.GetEnvoyGrpc() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcServiceValidationError{ - field: "EnvoyGrpc", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetEnvoyGrpc()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcServiceValidationError{ + field: "EnvoyGrpc", + reason: "embedded message failed validation", + cause: err, } } } case *GrpcService_GoogleGrpc_: - { - tmp := m.GetGoogleGrpc() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcServiceValidationError{ - field: "GoogleGrpc", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGoogleGrpc()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcServiceValidationError{ + field: "GoogleGrpc", + reason: "embedded message failed validation", + cause: err, } } } @@ -266,17 +249,12 @@ } } - { - tmp := m.GetChannelCredentials() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpcValidationError{ - field: "ChannelCredentials", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetChannelCredentials()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpcValidationError{ + field: "ChannelCredentials", + reason: "embedded message failed validation", + cause: err, } } } @@ -284,17 +262,12 @@ for idx, item := range m.GetCallCredentials() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpcValidationError{ - field: fmt.Sprintf("CallCredentials[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpcValidationError{ + field: fmt.Sprintf("CallCredentials[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -310,17 +283,12 @@ // no validation rules for CredentialsFactoryName - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpcValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpcValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, } } } @@ -392,47 +360,32 @@ return nil } - { - tmp := m.GetRootCerts() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_SslCredentialsValidationError{ - field: "RootCerts", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRootCerts()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_SslCredentialsValidationError{ + field: "RootCerts", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetPrivateKey() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_SslCredentialsValidationError{ - field: "PrivateKey", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetPrivateKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_SslCredentialsValidationError{ + field: "PrivateKey", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetCertChain() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_SslCredentialsValidationError{ - field: "CertChain", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCertChain()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_SslCredentialsValidationError{ + field: "CertChain", + reason: "embedded message failed validation", + cause: err, } } } @@ -578,51 +531,36 @@ case *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials: - { - tmp := m.GetSslCredentials() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_ChannelCredentialsValidationError{ - field: "SslCredentials", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSslCredentials()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_ChannelCredentialsValidationError{ + field: "SslCredentials", + reason: "embedded message failed validation", + cause: err, } } } case *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault: - { - tmp := m.GetGoogleDefault() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_ChannelCredentialsValidationError{ - field: "GoogleDefault", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGoogleDefault()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_ChannelCredentialsValidationError{ + field: "GoogleDefault", + reason: "embedded message failed validation", + cause: err, } } } case *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials: - { - tmp := m.GetLocalCredentials() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_ChannelCredentialsValidationError{ - field: "LocalCredentials", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetLocalCredentials()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_ChannelCredentialsValidationError{ + field: "LocalCredentials", + reason: "embedded message failed validation", + cause: err, } } } @@ -710,17 +648,12 @@ case *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine: - { - tmp := m.GetGoogleComputeEngine() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_CallCredentialsValidationError{ - field: "GoogleComputeEngine", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGoogleComputeEngine()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentialsValidationError{ + field: "GoogleComputeEngine", + reason: "embedded message failed validation", + cause: err, } } } @@ -730,51 +663,48 @@ case *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess: - { - tmp := m.GetServiceAccountJwtAccess() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_CallCredentialsValidationError{ - field: "ServiceAccountJwtAccess", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetServiceAccountJwtAccess()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentialsValidationError{ + field: "ServiceAccountJwtAccess", + reason: "embedded message failed validation", + cause: err, } } } case *GrpcService_GoogleGrpc_CallCredentials_GoogleIam: - { - tmp := m.GetGoogleIam() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_CallCredentialsValidationError{ - field: "GoogleIam", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGoogleIam()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentialsValidationError{ + field: "GoogleIam", + reason: "embedded message failed validation", + cause: err, } } } case *GrpcService_GoogleGrpc_CallCredentials_FromPlugin: - { - tmp := m.GetFromPlugin() + if v, ok := interface{}(m.GetFromPlugin()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentialsValidationError{ + field: "FromPlugin", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *GrpcService_GoogleGrpc_CallCredentials_StsService_: - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_CallCredentialsValidationError{ - field: "FromPlugin", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetStsService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentialsValidationError{ + field: "StsService", + reason: "embedded message failed validation", + cause: err, } } } @@ -1026,34 +956,24 @@ case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_Config: - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPluginValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPluginValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, } } } case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig: - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPluginValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPluginValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, } } } @@ -1128,3 +1048,107 @@ Cause() error ErrorName() string } = GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPluginValidationError{} + +// Validate checks the field values on +// GrpcService_GoogleGrpc_CallCredentials_StsService with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) Validate() error { + if m == nil { + return nil + } + + // no validation rules for TokenExchangeServiceUri + + // no validation rules for Resource + + // no validation rules for Audience + + // no validation rules for Scope + + // no validation rules for RequestedTokenType + + if len(m.GetSubjectTokenPath()) < 1 { + return GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError{ + field: "SubjectTokenPath", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetSubjectTokenType()) < 1 { + return GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError{ + field: "SubjectTokenType", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for ActorTokenPath + + // no validation rules for ActorTokenType + + return nil +} + +// GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError is the +// validation error returned by +// GrpcService_GoogleGrpc_CallCredentials_StsService.Validate if the +// designated constraints aren't met. +type GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError) Cause() error { + return e.cause +} + +// Key function returns key value. +func (e GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError) ErrorName() string { + return "GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError" +} + +// Error satisfies the builtin error interface +func (e GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGrpcService_GoogleGrpc_CallCredentials_StsService.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GrpcService_GoogleGrpc_CallCredentials_StsServiceValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,57 +1,43 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/health_check.proto -package core +package envoy_api_v2_core import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - time "time" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" _type "github.com/envoyproxy/go-control-plane/envoy/type" + matcher "github.com/envoyproxy/go-control-plane/envoy/type/matcher" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Endpoint health status. type HealthStatus int32 const ( - // The health status is not known. This is interpreted by Envoy as *HEALTHY*. - HealthStatus_UNKNOWN HealthStatus = 0 - // Healthy. - HealthStatus_HEALTHY HealthStatus = 1 - // Unhealthy. + HealthStatus_UNKNOWN HealthStatus = 0 + HealthStatus_HEALTHY HealthStatus = 1 HealthStatus_UNHEALTHY HealthStatus = 2 - // Connection draining in progress. E.g., - // ``_ - // or - // ``_. - // This is interpreted by Envoy as *UNHEALTHY*. - HealthStatus_DRAINING HealthStatus = 3 - // Health check timed out. This is part of HDS and is interpreted by Envoy as - // *UNHEALTHY*. - HealthStatus_TIMEOUT HealthStatus = 4 - // Degraded. - HealthStatus_DEGRADED HealthStatus = 5 + HealthStatus_DRAINING HealthStatus = 3 + HealthStatus_TIMEOUT HealthStatus = 4 + HealthStatus_DEGRADED HealthStatus = 5 ) var HealthStatus_name = map[int32]string{ @@ -81,77 +67,32 @@ } type HealthCheck struct { - // The time to wait for a health check response. If the timeout is reached the - // health check attempt will be considered a failure. - Timeout *time.Duration `protobuf:"bytes,1,opt,name=timeout,proto3,stdduration" json:"timeout,omitempty"` - // The interval between health checks. - Interval *time.Duration `protobuf:"bytes,2,opt,name=interval,proto3,stdduration" json:"interval,omitempty"` - // An optional jitter amount in milliseconds. If specified, during every - // interval Envoy will add interval_jitter to the wait time. - IntervalJitter *types.Duration `protobuf:"bytes,3,opt,name=interval_jitter,json=intervalJitter,proto3" json:"interval_jitter,omitempty"` - // An optional jitter amount as a percentage of interval_ms. If specified, - // during every interval Envoy will add interval_ms * - // interval_jitter_percent / 100 to the wait time. - // - // If interval_jitter_ms and interval_jitter_percent are both set, both of - // them will be used to increase the wait time. - IntervalJitterPercent uint32 `protobuf:"varint,18,opt,name=interval_jitter_percent,json=intervalJitterPercent,proto3" json:"interval_jitter_percent,omitempty"` - // The number of unhealthy health checks required before a host is marked - // unhealthy. Note that for *http* health checking if a host responds with 503 - // this threshold is ignored and the host is considered unhealthy immediately. - UnhealthyThreshold *types.UInt32Value `protobuf:"bytes,4,opt,name=unhealthy_threshold,json=unhealthyThreshold,proto3" json:"unhealthy_threshold,omitempty"` - // The number of healthy health checks required before a host is marked - // healthy. Note that during startup, only a single successful health check is - // required to mark a host healthy. - HealthyThreshold *types.UInt32Value `protobuf:"bytes,5,opt,name=healthy_threshold,json=healthyThreshold,proto3" json:"healthy_threshold,omitempty"` - // [#not-implemented-hide:] Non-serving port for health checking. - AltPort *types.UInt32Value `protobuf:"bytes,6,opt,name=alt_port,json=altPort,proto3" json:"alt_port,omitempty"` - // Reuse health check connection between health checks. Default is true. - ReuseConnection *types.BoolValue `protobuf:"bytes,7,opt,name=reuse_connection,json=reuseConnection,proto3" json:"reuse_connection,omitempty"` + Timeout *duration.Duration `protobuf:"bytes,1,opt,name=timeout,proto3" json:"timeout,omitempty"` + Interval *duration.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` + InitialJitter *duration.Duration `protobuf:"bytes,20,opt,name=initial_jitter,json=initialJitter,proto3" json:"initial_jitter,omitempty"` + IntervalJitter *duration.Duration `protobuf:"bytes,3,opt,name=interval_jitter,json=intervalJitter,proto3" json:"interval_jitter,omitempty"` + IntervalJitterPercent uint32 `protobuf:"varint,18,opt,name=interval_jitter_percent,json=intervalJitterPercent,proto3" json:"interval_jitter_percent,omitempty"` + UnhealthyThreshold *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=unhealthy_threshold,json=unhealthyThreshold,proto3" json:"unhealthy_threshold,omitempty"` + HealthyThreshold *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=healthy_threshold,json=healthyThreshold,proto3" json:"healthy_threshold,omitempty"` + AltPort *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=alt_port,json=altPort,proto3" json:"alt_port,omitempty"` + ReuseConnection *wrappers.BoolValue `protobuf:"bytes,7,opt,name=reuse_connection,json=reuseConnection,proto3" json:"reuse_connection,omitempty"` // Types that are valid to be assigned to HealthChecker: // *HealthCheck_HttpHealthCheck_ // *HealthCheck_TcpHealthCheck_ // *HealthCheck_GrpcHealthCheck_ // *HealthCheck_CustomHealthCheck_ - HealthChecker isHealthCheck_HealthChecker `protobuf_oneof:"health_checker"` - // The "no traffic interval" is a special health check interval that is used when a cluster has - // never had traffic routed to it. This lower interval allows cluster information to be kept up to - // date, without sending a potentially large amount of active health checking traffic for no - // reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the - // standard health check interval that is defined. Note that this interval takes precedence over - // any other. - // - // The default value for "no traffic interval" is 60 seconds. - NoTrafficInterval *types.Duration `protobuf:"bytes,12,opt,name=no_traffic_interval,json=noTrafficInterval,proto3" json:"no_traffic_interval,omitempty"` - // The "unhealthy interval" is a health check interval that is used for hosts that are marked as - // unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the - // standard health check interval that is defined. - // - // The default value for "unhealthy interval" is the same as "interval". - UnhealthyInterval *types.Duration `protobuf:"bytes,14,opt,name=unhealthy_interval,json=unhealthyInterval,proto3" json:"unhealthy_interval,omitempty"` - // The "unhealthy edge interval" is a special health check interval that is used for the first - // health check right after a host is marked as unhealthy. For subsequent health checks - // Envoy will shift back to using either "unhealthy interval" if present or the standard health - // check interval that is defined. - // - // The default value for "unhealthy edge interval" is the same as "unhealthy interval". - UnhealthyEdgeInterval *types.Duration `protobuf:"bytes,15,opt,name=unhealthy_edge_interval,json=unhealthyEdgeInterval,proto3" json:"unhealthy_edge_interval,omitempty"` - // The "healthy edge interval" is a special health check interval that is used for the first - // health check right after a host is marked as healthy. For subsequent health checks - // Envoy will shift back to using the standard health check interval that is defined. - // - // The default value for "healthy edge interval" is the same as the default interval. - HealthyEdgeInterval *types.Duration `protobuf:"bytes,16,opt,name=healthy_edge_interval,json=healthyEdgeInterval,proto3" json:"healthy_edge_interval,omitempty"` - // Specifies the path to the :ref:`health check event log `. - // If empty, no event log will be written. - EventLogPath string `protobuf:"bytes,17,opt,name=event_log_path,json=eventLogPath,proto3" json:"event_log_path,omitempty"` - // If set to true, health check failure events will always be logged. If set to false, only the - // initial health check failure event will be logged. - // The default value is false. - AlwaysLogHealthCheckFailures bool `protobuf:"varint,19,opt,name=always_log_health_check_failures,json=alwaysLogHealthCheckFailures,proto3" json:"always_log_health_check_failures,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + HealthChecker isHealthCheck_HealthChecker `protobuf_oneof:"health_checker"` + NoTrafficInterval *duration.Duration `protobuf:"bytes,12,opt,name=no_traffic_interval,json=noTrafficInterval,proto3" json:"no_traffic_interval,omitempty"` + UnhealthyInterval *duration.Duration `protobuf:"bytes,14,opt,name=unhealthy_interval,json=unhealthyInterval,proto3" json:"unhealthy_interval,omitempty"` + UnhealthyEdgeInterval *duration.Duration `protobuf:"bytes,15,opt,name=unhealthy_edge_interval,json=unhealthyEdgeInterval,proto3" json:"unhealthy_edge_interval,omitempty"` + HealthyEdgeInterval *duration.Duration `protobuf:"bytes,16,opt,name=healthy_edge_interval,json=healthyEdgeInterval,proto3" json:"healthy_edge_interval,omitempty"` + EventLogPath string `protobuf:"bytes,17,opt,name=event_log_path,json=eventLogPath,proto3" json:"event_log_path,omitempty"` + EventService *EventServiceConfig `protobuf:"bytes,22,opt,name=event_service,json=eventService,proto3" json:"event_service,omitempty"` + AlwaysLogHealthCheckFailures bool `protobuf:"varint,19,opt,name=always_log_health_check_failures,json=alwaysLogHealthCheckFailures,proto3" json:"always_log_health_check_failures,omitempty"` + TlsOptions *HealthCheck_TlsOptions `protobuf:"bytes,21,opt,name=tls_options,json=tlsOptions,proto3" json:"tls_options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HealthCheck) Reset() { *m = HealthCheck{} } @@ -160,26 +101,18 @@ func (*HealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0} } + func (m *HealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck.Unmarshal(m, b) } func (m *HealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck.Marshal(b, m, deterministic) } func (m *HealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck.Merge(m, src) } func (m *HealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck.Size(m) } func (m *HealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck.DiscardUnknown(m) @@ -187,53 +120,28 @@ var xxx_messageInfo_HealthCheck proto.InternalMessageInfo -type isHealthCheck_HealthChecker interface { - isHealthCheck_HealthChecker() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type HealthCheck_HttpHealthCheck_ struct { - HttpHealthCheck *HealthCheck_HttpHealthCheck `protobuf:"bytes,8,opt,name=http_health_check,json=httpHealthCheck,proto3,oneof"` -} -type HealthCheck_TcpHealthCheck_ struct { - TcpHealthCheck *HealthCheck_TcpHealthCheck `protobuf:"bytes,9,opt,name=tcp_health_check,json=tcpHealthCheck,proto3,oneof"` -} -type HealthCheck_GrpcHealthCheck_ struct { - GrpcHealthCheck *HealthCheck_GrpcHealthCheck `protobuf:"bytes,11,opt,name=grpc_health_check,json=grpcHealthCheck,proto3,oneof"` -} -type HealthCheck_CustomHealthCheck_ struct { - CustomHealthCheck *HealthCheck_CustomHealthCheck `protobuf:"bytes,13,opt,name=custom_health_check,json=customHealthCheck,proto3,oneof"` -} - -func (*HealthCheck_HttpHealthCheck_) isHealthCheck_HealthChecker() {} -func (*HealthCheck_TcpHealthCheck_) isHealthCheck_HealthChecker() {} -func (*HealthCheck_GrpcHealthCheck_) isHealthCheck_HealthChecker() {} -func (*HealthCheck_CustomHealthCheck_) isHealthCheck_HealthChecker() {} - -func (m *HealthCheck) GetHealthChecker() isHealthCheck_HealthChecker { +func (m *HealthCheck) GetTimeout() *duration.Duration { if m != nil { - return m.HealthChecker + return m.Timeout } return nil } -func (m *HealthCheck) GetTimeout() *time.Duration { +func (m *HealthCheck) GetInterval() *duration.Duration { if m != nil { - return m.Timeout + return m.Interval } return nil } -func (m *HealthCheck) GetInterval() *time.Duration { +func (m *HealthCheck) GetInitialJitter() *duration.Duration { if m != nil { - return m.Interval + return m.InitialJitter } return nil } -func (m *HealthCheck) GetIntervalJitter() *types.Duration { +func (m *HealthCheck) GetIntervalJitter() *duration.Duration { if m != nil { return m.IntervalJitter } @@ -247,34 +155,69 @@ return 0 } -func (m *HealthCheck) GetUnhealthyThreshold() *types.UInt32Value { +func (m *HealthCheck) GetUnhealthyThreshold() *wrappers.UInt32Value { if m != nil { return m.UnhealthyThreshold } return nil } -func (m *HealthCheck) GetHealthyThreshold() *types.UInt32Value { +func (m *HealthCheck) GetHealthyThreshold() *wrappers.UInt32Value { if m != nil { return m.HealthyThreshold } return nil } -func (m *HealthCheck) GetAltPort() *types.UInt32Value { +func (m *HealthCheck) GetAltPort() *wrappers.UInt32Value { if m != nil { return m.AltPort } return nil } -func (m *HealthCheck) GetReuseConnection() *types.BoolValue { +func (m *HealthCheck) GetReuseConnection() *wrappers.BoolValue { if m != nil { return m.ReuseConnection } return nil } +type isHealthCheck_HealthChecker interface { + isHealthCheck_HealthChecker() +} + +type HealthCheck_HttpHealthCheck_ struct { + HttpHealthCheck *HealthCheck_HttpHealthCheck `protobuf:"bytes,8,opt,name=http_health_check,json=httpHealthCheck,proto3,oneof"` +} + +type HealthCheck_TcpHealthCheck_ struct { + TcpHealthCheck *HealthCheck_TcpHealthCheck `protobuf:"bytes,9,opt,name=tcp_health_check,json=tcpHealthCheck,proto3,oneof"` +} + +type HealthCheck_GrpcHealthCheck_ struct { + GrpcHealthCheck *HealthCheck_GrpcHealthCheck `protobuf:"bytes,11,opt,name=grpc_health_check,json=grpcHealthCheck,proto3,oneof"` +} + +type HealthCheck_CustomHealthCheck_ struct { + CustomHealthCheck *HealthCheck_CustomHealthCheck `protobuf:"bytes,13,opt,name=custom_health_check,json=customHealthCheck,proto3,oneof"` +} + +func (*HealthCheck_HttpHealthCheck_) isHealthCheck_HealthChecker() {} + +func (*HealthCheck_TcpHealthCheck_) isHealthCheck_HealthChecker() {} + +func (*HealthCheck_GrpcHealthCheck_) isHealthCheck_HealthChecker() {} + +func (*HealthCheck_CustomHealthCheck_) isHealthCheck_HealthChecker() {} + +func (m *HealthCheck) GetHealthChecker() isHealthCheck_HealthChecker { + if m != nil { + return m.HealthChecker + } + return nil +} + func (m *HealthCheck) GetHttpHealthCheck() *HealthCheck_HttpHealthCheck { if x, ok := m.GetHealthChecker().(*HealthCheck_HttpHealthCheck_); ok { return x.HttpHealthCheck @@ -303,28 +246,28 @@ return nil } -func (m *HealthCheck) GetNoTrafficInterval() *types.Duration { +func (m *HealthCheck) GetNoTrafficInterval() *duration.Duration { if m != nil { return m.NoTrafficInterval } return nil } -func (m *HealthCheck) GetUnhealthyInterval() *types.Duration { +func (m *HealthCheck) GetUnhealthyInterval() *duration.Duration { if m != nil { return m.UnhealthyInterval } return nil } -func (m *HealthCheck) GetUnhealthyEdgeInterval() *types.Duration { +func (m *HealthCheck) GetUnhealthyEdgeInterval() *duration.Duration { if m != nil { return m.UnhealthyEdgeInterval } return nil } -func (m *HealthCheck) GetHealthyEdgeInterval() *types.Duration { +func (m *HealthCheck) GetHealthyEdgeInterval() *duration.Duration { if m != nil { return m.HealthyEdgeInterval } @@ -338,126 +281,37 @@ return "" } -func (m *HealthCheck) GetAlwaysLogHealthCheckFailures() bool { +func (m *HealthCheck) GetEventService() *EventServiceConfig { if m != nil { - return m.AlwaysLogHealthCheckFailures + return m.EventService } - return false + return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HealthCheck) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HealthCheck_OneofMarshaler, _HealthCheck_OneofUnmarshaler, _HealthCheck_OneofSizer, []interface{}{ - (*HealthCheck_HttpHealthCheck_)(nil), - (*HealthCheck_TcpHealthCheck_)(nil), - (*HealthCheck_GrpcHealthCheck_)(nil), - (*HealthCheck_CustomHealthCheck_)(nil), +func (m *HealthCheck) GetAlwaysLogHealthCheckFailures() bool { + if m != nil { + return m.AlwaysLogHealthCheckFailures } + return false } -func _HealthCheck_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HealthCheck) - // health_checker - switch x := m.HealthChecker.(type) { - case *HealthCheck_HttpHealthCheck_: - _ = b.EncodeVarint(8<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HttpHealthCheck); err != nil { - return err - } - case *HealthCheck_TcpHealthCheck_: - _ = b.EncodeVarint(9<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TcpHealthCheck); err != nil { - return err - } - case *HealthCheck_GrpcHealthCheck_: - _ = b.EncodeVarint(11<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GrpcHealthCheck); err != nil { - return err - } - case *HealthCheck_CustomHealthCheck_: - _ = b.EncodeVarint(13<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.CustomHealthCheck); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("HealthCheck.HealthChecker has unexpected type %T", x) +func (m *HealthCheck) GetTlsOptions() *HealthCheck_TlsOptions { + if m != nil { + return m.TlsOptions } return nil } -func _HealthCheck_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HealthCheck) - switch tag { - case 8: // health_checker.http_health_check - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(HealthCheck_HttpHealthCheck) - err := b.DecodeMessage(msg) - m.HealthChecker = &HealthCheck_HttpHealthCheck_{msg} - return true, err - case 9: // health_checker.tcp_health_check - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(HealthCheck_TcpHealthCheck) - err := b.DecodeMessage(msg) - m.HealthChecker = &HealthCheck_TcpHealthCheck_{msg} - return true, err - case 11: // health_checker.grpc_health_check - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(HealthCheck_GrpcHealthCheck) - err := b.DecodeMessage(msg) - m.HealthChecker = &HealthCheck_GrpcHealthCheck_{msg} - return true, err - case 13: // health_checker.custom_health_check - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(HealthCheck_CustomHealthCheck) - err := b.DecodeMessage(msg) - m.HealthChecker = &HealthCheck_CustomHealthCheck_{msg} - return true, err - default: - return false, nil - } -} - -func _HealthCheck_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HealthCheck) - // health_checker - switch x := m.HealthChecker.(type) { - case *HealthCheck_HttpHealthCheck_: - s := proto.Size(x.HttpHealthCheck) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HealthCheck_TcpHealthCheck_: - s := proto.Size(x.TcpHealthCheck) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HealthCheck_GrpcHealthCheck_: - s := proto.Size(x.GrpcHealthCheck) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HealthCheck_CustomHealthCheck_: - s := proto.Size(x.CustomHealthCheck) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HealthCheck) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*HealthCheck_HttpHealthCheck_)(nil), + (*HealthCheck_TcpHealthCheck_)(nil), + (*HealthCheck_GrpcHealthCheck_)(nil), + (*HealthCheck_CustomHealthCheck_)(nil), } - return n } -// Describes the encoding of the payload bytes in the payload. type HealthCheck_Payload struct { // Types that are valid to be assigned to Payload: // *HealthCheck_Payload_Text @@ -474,26 +328,18 @@ func (*HealthCheck_Payload) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0, 0} } + func (m *HealthCheck_Payload) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck_Payload.Unmarshal(m, b) } func (m *HealthCheck_Payload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck_Payload.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck_Payload.Marshal(b, m, deterministic) } func (m *HealthCheck_Payload) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck_Payload.Merge(m, src) } func (m *HealthCheck_Payload) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck_Payload.Size(m) } func (m *HealthCheck_Payload) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck_Payload.DiscardUnknown(m) @@ -503,19 +349,18 @@ type isHealthCheck_Payload_Payload interface { isHealthCheck_Payload_Payload() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type HealthCheck_Payload_Text struct { Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"` } + type HealthCheck_Payload_Binary struct { Binary []byte `protobuf:"bytes,2,opt,name=binary,proto3,oneof"` } -func (*HealthCheck_Payload_Text) isHealthCheck_Payload_Payload() {} +func (*HealthCheck_Payload_Text) isHealthCheck_Payload_Payload() {} + func (*HealthCheck_Payload_Binary) isHealthCheck_Payload_Payload() {} func (m *HealthCheck_Payload) GetPayload() isHealthCheck_Payload_Payload { @@ -539,106 +384,29 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HealthCheck_Payload) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HealthCheck_Payload_OneofMarshaler, _HealthCheck_Payload_OneofUnmarshaler, _HealthCheck_Payload_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HealthCheck_Payload) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*HealthCheck_Payload_Text)(nil), (*HealthCheck_Payload_Binary)(nil), } } -func _HealthCheck_Payload_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HealthCheck_Payload) - // payload - switch x := m.Payload.(type) { - case *HealthCheck_Payload_Text: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Text) - case *HealthCheck_Payload_Binary: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeRawBytes(x.Binary) - case nil: - default: - return fmt.Errorf("HealthCheck_Payload.Payload has unexpected type %T", x) - } - return nil -} - -func _HealthCheck_Payload_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HealthCheck_Payload) - switch tag { - case 1: // payload.text - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Payload = &HealthCheck_Payload_Text{x} - return true, err - case 2: // payload.binary - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeRawBytes(true) - m.Payload = &HealthCheck_Payload_Binary{x} - return true, err - default: - return false, nil - } -} - -func _HealthCheck_Payload_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HealthCheck_Payload) - // payload - switch x := m.Payload.(type) { - case *HealthCheck_Payload_Text: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Text))) - n += len(x.Text) - case *HealthCheck_Payload_Binary: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Binary))) - n += len(x.Binary) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// [#comment:next free field: 10] type HealthCheck_HttpHealthCheck struct { - // The value of the host header in the HTTP health check request. If - // left empty (default value), the name of the cluster this health check is associated - // with will be used. - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // Specifies the HTTP path that will be requested during health checking. For example - // */healthcheck*. - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - // [#not-implemented-hide:] HTTP specific payload. - Send *HealthCheck_Payload `protobuf:"bytes,3,opt,name=send,proto3" json:"send,omitempty"` - // [#not-implemented-hide:] HTTP specific response. - Receive *HealthCheck_Payload `protobuf:"bytes,4,opt,name=receive,proto3" json:"receive,omitempty"` - // An optional service name parameter which is used to validate the identity of - // the health checked cluster. See the :ref:`architecture overview - // ` for more information. - ServiceName string `protobuf:"bytes,5,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` - // Specifies a list of HTTP headers that should be added to each request that is sent to the - // health checked cluster. For more information, including details on header value syntax, see - // the documentation on :ref:`custom request headers - // `. - RequestHeadersToAdd []*HeaderValueOption `protobuf:"bytes,6,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each request that is sent to the - // health checked cluster. - RequestHeadersToRemove []string `protobuf:"bytes,8,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` - // If set, health checks will be made using http/2. - UseHttp2 bool `protobuf:"varint,7,opt,name=use_http2,json=useHttp2,proto3" json:"use_http2,omitempty"` - // Specifies a list of HTTP response statuses considered healthy. If provided, replaces default - // 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open - // semantics of :ref:`Int64Range `. - ExpectedStatuses []*_type.Int64Range `protobuf:"bytes,9,rep,name=expected_statuses,json=expectedStatuses,proto3" json:"expected_statuses,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Send *HealthCheck_Payload `protobuf:"bytes,3,opt,name=send,proto3" json:"send,omitempty"` + Receive *HealthCheck_Payload `protobuf:"bytes,4,opt,name=receive,proto3" json:"receive,omitempty"` + ServiceName string `protobuf:"bytes,5,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` // Deprecated: Do not use. + RequestHeadersToAdd []*HeaderValueOption `protobuf:"bytes,6,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` + RequestHeadersToRemove []string `protobuf:"bytes,8,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` + UseHttp2 bool `protobuf:"varint,7,opt,name=use_http2,json=useHttp2,proto3" json:"use_http2,omitempty"` // Deprecated: Do not use. + ExpectedStatuses []*_type.Int64Range `protobuf:"bytes,9,rep,name=expected_statuses,json=expectedStatuses,proto3" json:"expected_statuses,omitempty"` + CodecClientType _type.CodecClientType `protobuf:"varint,10,opt,name=codec_client_type,json=codecClientType,proto3,enum=envoy.type.CodecClientType" json:"codec_client_type,omitempty"` + ServiceNameMatcher *matcher.StringMatcher `protobuf:"bytes,11,opt,name=service_name_matcher,json=serviceNameMatcher,proto3" json:"service_name_matcher,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HealthCheck_HttpHealthCheck) Reset() { *m = HealthCheck_HttpHealthCheck{} } @@ -647,26 +415,18 @@ func (*HealthCheck_HttpHealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0, 1} } + func (m *HealthCheck_HttpHealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck_HttpHealthCheck.Unmarshal(m, b) } func (m *HealthCheck_HttpHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck_HttpHealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck_HttpHealthCheck.Marshal(b, m, deterministic) } func (m *HealthCheck_HttpHealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck_HttpHealthCheck.Merge(m, src) } func (m *HealthCheck_HttpHealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck_HttpHealthCheck.Size(m) } func (m *HealthCheck_HttpHealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck_HttpHealthCheck.DiscardUnknown(m) @@ -702,6 +462,7 @@ return nil } +// Deprecated: Do not use. func (m *HealthCheck_HttpHealthCheck) GetServiceName() string { if m != nil { return m.ServiceName @@ -723,6 +484,7 @@ return nil } +// Deprecated: Do not use. func (m *HealthCheck_HttpHealthCheck) GetUseHttp2() bool { if m != nil { return m.UseHttp2 @@ -737,12 +499,22 @@ return nil } +func (m *HealthCheck_HttpHealthCheck) GetCodecClientType() _type.CodecClientType { + if m != nil { + return m.CodecClientType + } + return _type.CodecClientType_HTTP1 +} + +func (m *HealthCheck_HttpHealthCheck) GetServiceNameMatcher() *matcher.StringMatcher { + if m != nil { + return m.ServiceNameMatcher + } + return nil +} + type HealthCheck_TcpHealthCheck struct { - // Empty payloads imply a connect-only health check. - Send *HealthCheck_Payload `protobuf:"bytes,1,opt,name=send,proto3" json:"send,omitempty"` - // When checking the response, “fuzzy” matching is performed such that each - // binary block must be found, and in the order specified, but not - // necessarily contiguous. + Send *HealthCheck_Payload `protobuf:"bytes,1,opt,name=send,proto3" json:"send,omitempty"` Receive []*HealthCheck_Payload `protobuf:"bytes,2,rep,name=receive,proto3" json:"receive,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -755,26 +527,18 @@ func (*HealthCheck_TcpHealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0, 2} } + func (m *HealthCheck_TcpHealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck_TcpHealthCheck.Unmarshal(m, b) } func (m *HealthCheck_TcpHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck_TcpHealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck_TcpHealthCheck.Marshal(b, m, deterministic) } func (m *HealthCheck_TcpHealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck_TcpHealthCheck.Merge(m, src) } func (m *HealthCheck_TcpHealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck_TcpHealthCheck.Size(m) } func (m *HealthCheck_TcpHealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck_TcpHealthCheck.DiscardUnknown(m) @@ -797,10 +561,6 @@ } type HealthCheck_RedisHealthCheck struct { - // If set, optionally perform ``EXISTS `` instead of ``PING``. A return value - // from Redis of 0 (does not exist) is considered a passing healthcheck. A return value other - // than 0 is considered a failure. This allows the user to mark a Redis instance for maintenance - // by setting the specified key to any value and waiting for traffic to drain. Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -813,26 +573,18 @@ func (*HealthCheck_RedisHealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0, 3} } + func (m *HealthCheck_RedisHealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck_RedisHealthCheck.Unmarshal(m, b) } func (m *HealthCheck_RedisHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck_RedisHealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck_RedisHealthCheck.Marshal(b, m, deterministic) } func (m *HealthCheck_RedisHealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck_RedisHealthCheck.Merge(m, src) } func (m *HealthCheck_RedisHealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck_RedisHealthCheck.Size(m) } func (m *HealthCheck_RedisHealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck_RedisHealthCheck.DiscardUnknown(m) @@ -847,20 +599,8 @@ return "" } -// `grpc.health.v1.Health -// `_-based -// healthcheck. See `gRPC doc `_ -// for details. type HealthCheck_GrpcHealthCheck struct { - // An optional service name parameter which will be sent to gRPC service in - // `grpc.health.v1.HealthCheckRequest - // `_. - // message. See `gRPC health-checking overview - // `_ for more information. - ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` - // The value of the :authority header in the gRPC health check request. If - // left empty (default value), the name of the cluster this health check is associated - // with will be used. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -873,26 +613,18 @@ func (*HealthCheck_GrpcHealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0, 4} } + func (m *HealthCheck_GrpcHealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Unmarshal(m, b) } func (m *HealthCheck_GrpcHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Marshal(b, m, deterministic) } func (m *HealthCheck_GrpcHealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck_GrpcHealthCheck.Merge(m, src) } func (m *HealthCheck_GrpcHealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck_GrpcHealthCheck.Size(m) } func (m *HealthCheck_GrpcHealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck_GrpcHealthCheck.DiscardUnknown(m) @@ -914,13 +646,8 @@ return "" } -// Custom health check. type HealthCheck_CustomHealthCheck struct { - // The registered name of the custom health checker. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // A custom health checker specific configuration which depends on the custom health checker - // being instantiated. See :api:`envoy/config/health_checker` for reference. - // // Types that are valid to be assigned to ConfigType: // *HealthCheck_CustomHealthCheck_Config // *HealthCheck_CustomHealthCheck_TypedConfig @@ -936,26 +663,18 @@ func (*HealthCheck_CustomHealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_b6ca44dd529b90bd, []int{0, 5} } + func (m *HealthCheck_CustomHealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheck_CustomHealthCheck.Unmarshal(m, b) } func (m *HealthCheck_CustomHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheck_CustomHealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheck_CustomHealthCheck.Marshal(b, m, deterministic) } func (m *HealthCheck_CustomHealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheck_CustomHealthCheck.Merge(m, src) } func (m *HealthCheck_CustomHealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheck_CustomHealthCheck.Size(m) } func (m *HealthCheck_CustomHealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheck_CustomHealthCheck.DiscardUnknown(m) @@ -963,21 +682,27 @@ var xxx_messageInfo_HealthCheck_CustomHealthCheck proto.InternalMessageInfo +func (m *HealthCheck_CustomHealthCheck) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type isHealthCheck_CustomHealthCheck_ConfigType interface { isHealthCheck_CustomHealthCheck_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int } type HealthCheck_CustomHealthCheck_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` } + type HealthCheck_CustomHealthCheck_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -func (*HealthCheck_CustomHealthCheck_Config) isHealthCheck_CustomHealthCheck_ConfigType() {} +func (*HealthCheck_CustomHealthCheck_Config) isHealthCheck_CustomHealthCheck_ConfigType() {} + func (*HealthCheck_CustomHealthCheck_TypedConfig) isHealthCheck_CustomHealthCheck_ConfigType() {} func (m *HealthCheck_CustomHealthCheck) GetConfigType() isHealthCheck_CustomHealthCheck_ConfigType { @@ -987,99 +712,66 @@ return nil } -func (m *HealthCheck_CustomHealthCheck) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *HealthCheck_CustomHealthCheck) GetConfig() *types.Struct { +// Deprecated: Do not use. +func (m *HealthCheck_CustomHealthCheck) GetConfig() *_struct.Struct { if x, ok := m.GetConfigType().(*HealthCheck_CustomHealthCheck_Config); ok { return x.Config } return nil } -func (m *HealthCheck_CustomHealthCheck) GetTypedConfig() *types.Any { +func (m *HealthCheck_CustomHealthCheck) GetTypedConfig() *any.Any { if x, ok := m.GetConfigType().(*HealthCheck_CustomHealthCheck_TypedConfig); ok { return x.TypedConfig } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HealthCheck_CustomHealthCheck) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HealthCheck_CustomHealthCheck_OneofMarshaler, _HealthCheck_CustomHealthCheck_OneofUnmarshaler, _HealthCheck_CustomHealthCheck_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HealthCheck_CustomHealthCheck) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*HealthCheck_CustomHealthCheck_Config)(nil), (*HealthCheck_CustomHealthCheck_TypedConfig)(nil), } } -func _HealthCheck_CustomHealthCheck_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HealthCheck_CustomHealthCheck) - // config_type - switch x := m.ConfigType.(type) { - case *HealthCheck_CustomHealthCheck_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *HealthCheck_CustomHealthCheck_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("HealthCheck_CustomHealthCheck.ConfigType has unexpected type %T", x) - } - return nil +type HealthCheck_TlsOptions struct { + AlpnProtocols []string `protobuf:"bytes,1,rep,name=alpn_protocols,json=alpnProtocols,proto3" json:"alpn_protocols,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func _HealthCheck_CustomHealthCheck_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HealthCheck_CustomHealthCheck) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &HealthCheck_CustomHealthCheck_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &HealthCheck_CustomHealthCheck_TypedConfig{msg} - return true, err - default: - return false, nil - } +func (m *HealthCheck_TlsOptions) Reset() { *m = HealthCheck_TlsOptions{} } +func (m *HealthCheck_TlsOptions) String() string { return proto.CompactTextString(m) } +func (*HealthCheck_TlsOptions) ProtoMessage() {} +func (*HealthCheck_TlsOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_b6ca44dd529b90bd, []int{0, 6} +} + +func (m *HealthCheck_TlsOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HealthCheck_TlsOptions.Unmarshal(m, b) +} +func (m *HealthCheck_TlsOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HealthCheck_TlsOptions.Marshal(b, m, deterministic) +} +func (m *HealthCheck_TlsOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheck_TlsOptions.Merge(m, src) +} +func (m *HealthCheck_TlsOptions) XXX_Size() int { + return xxx_messageInfo_HealthCheck_TlsOptions.Size(m) } +func (m *HealthCheck_TlsOptions) XXX_DiscardUnknown() { + xxx_messageInfo_HealthCheck_TlsOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_HealthCheck_TlsOptions proto.InternalMessageInfo -func _HealthCheck_CustomHealthCheck_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HealthCheck_CustomHealthCheck) - // config_type - switch x := m.ConfigType.(type) { - case *HealthCheck_CustomHealthCheck_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HealthCheck_CustomHealthCheck_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *HealthCheck_TlsOptions) GetAlpnProtocols() []string { + if m != nil { + return m.AlpnProtocols } - return n + return nil } func init() { @@ -1091,6 +783,7 @@ proto.RegisterType((*HealthCheck_RedisHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.RedisHealthCheck") proto.RegisterType((*HealthCheck_GrpcHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.GrpcHealthCheck") proto.RegisterType((*HealthCheck_CustomHealthCheck)(nil), "envoy.api.v2.core.HealthCheck.CustomHealthCheck") + proto.RegisterType((*HealthCheck_TlsOptions)(nil), "envoy.api.v2.core.HealthCheck.TlsOptions") } func init() { @@ -1098,3177 +791,96 @@ } var fileDescriptor_b6ca44dd529b90bd = []byte{ - // 1203 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xc7, 0xbd, 0xb1, 0x13, 0xdb, 0x8f, 0x9d, 0x64, 0x3d, 0x6e, 0x93, 0xad, 0x09, 0xa9, 0x41, - 0x11, 0x8a, 0x2a, 0x61, 0x83, 0x8b, 0x8a, 0xca, 0x89, 0x38, 0x71, 0x63, 0x97, 0xd6, 0x8d, 0xa6, - 0x4e, 0x51, 0x25, 0xd0, 0x32, 0xd9, 0x9d, 0xac, 0x97, 0x6e, 0x76, 0x96, 0xd9, 0x59, 0xb7, 0xfe, - 0x12, 0x1c, 0x38, 0xf1, 0x11, 0x50, 0x2f, 0x5c, 0x2b, 0x4e, 0x3d, 0x72, 0xe4, 0x1b, 0x80, 0x72, - 0xa2, 0x7c, 0x0a, 0x34, 0xb3, 0xeb, 0xf7, 0xa0, 0x24, 0xe2, 0x36, 0xfb, 0x3c, 0xcf, 0xff, 0x37, - 0x2f, 0xcf, 0x8b, 0x16, 0x76, 0xa8, 0x3f, 0x60, 0xc3, 0x3a, 0x09, 0xdc, 0xfa, 0xa0, 0x51, 0xb7, - 0x18, 0xa7, 0xf5, 0x3e, 0x25, 0x9e, 0xe8, 0x9b, 0x56, 0x9f, 0x5a, 0x2f, 0x6a, 0x01, 0x67, 0x82, - 0xa1, 0x92, 0x8a, 0xaa, 0x91, 0xc0, 0xad, 0x0d, 0x1a, 0x35, 0x19, 0x55, 0xd9, 0x5a, 0x14, 0x9e, - 0x90, 0x90, 0xc6, 0x82, 0xca, 0x46, 0xec, 0x15, 0xc3, 0x80, 0xd6, 0x39, 0xf1, 0x9d, 0x91, 0xfd, - 0x96, 0xc3, 0x98, 0xe3, 0xd1, 0xba, 0xfa, 0x3a, 0x89, 0x4e, 0xeb, 0xc4, 0x1f, 0x26, 0xae, 0xed, - 0x79, 0x97, 0x1d, 0x71, 0x22, 0x5c, 0xe6, 0x27, 0xfe, 0xad, 0x79, 0x7f, 0x28, 0x78, 0x64, 0x89, - 0xff, 0x52, 0xbf, 0xe4, 0x24, 0x08, 0x28, 0x0f, 0x13, 0xff, 0xe6, 0x80, 0x78, 0xae, 0x4d, 0x04, - 0xad, 0x8f, 0x16, 0x89, 0xe3, 0x86, 0xc3, 0x1c, 0xa6, 0x96, 0x75, 0xb9, 0x8a, 0xad, 0x1f, 0xbe, - 0x29, 0x43, 0xa1, 0xad, 0xde, 0x61, 0x5f, 0x3e, 0x03, 0x6a, 0x41, 0x56, 0xb8, 0x67, 0x94, 0x45, - 0xc2, 0xd0, 0xaa, 0xda, 0x6e, 0xa1, 0x71, 0xab, 0x16, 0x6f, 0x58, 0x1b, 0x6d, 0x58, 0x3b, 0x48, - 0x8e, 0xdb, 0xd4, 0x7f, 0xfe, 0xf3, 0xb6, 0xf6, 0xdb, 0xbb, 0xb7, 0xe9, 0xec, 0x6b, 0x2d, 0x93, - 0xd3, 0xee, 0xa4, 0xf0, 0x48, 0x8b, 0x0e, 0x21, 0xe7, 0xfa, 0x82, 0xf2, 0x01, 0xf1, 0x8c, 0xa5, - 0xeb, 0x73, 0xc6, 0x62, 0xd4, 0x84, 0xf5, 0xd1, 0xda, 0xfc, 0xde, 0x15, 0x82, 0x72, 0x23, 0x7d, - 0x09, 0x0f, 0xaf, 0x8d, 0x14, 0x0f, 0x95, 0x00, 0xdd, 0x83, 0xcd, 0x39, 0x86, 0x19, 0x50, 0x6e, - 0x51, 0x5f, 0x18, 0xa8, 0xaa, 0xed, 0xae, 0xe2, 0x9b, 0xb3, 0x82, 0xa3, 0xd8, 0x89, 0x1e, 0x43, - 0x39, 0xf2, 0xe3, 0x22, 0x19, 0x9a, 0xa2, 0xcf, 0x69, 0xd8, 0x67, 0x9e, 0x6d, 0x64, 0xd4, 0xfe, - 0x5b, 0x0b, 0xfb, 0x1f, 0x77, 0x7c, 0x71, 0xb7, 0xf1, 0x8c, 0x78, 0x11, 0xc5, 0x68, 0x2c, 0xec, - 0x8d, 0x74, 0xa8, 0x03, 0xa5, 0x45, 0xd8, 0xf2, 0x15, 0x60, 0xfa, 0x02, 0xea, 0x73, 0xc8, 0x11, - 0x4f, 0x98, 0x01, 0xe3, 0xc2, 0x58, 0xb9, 0x02, 0x21, 0x4b, 0x3c, 0x71, 0xc4, 0xb8, 0x40, 0x2d, - 0xd0, 0x39, 0x8d, 0x42, 0x6a, 0x5a, 0xcc, 0xf7, 0xa9, 0x25, 0x9f, 0xcb, 0xc8, 0x2a, 0x40, 0x65, - 0x01, 0xd0, 0x64, 0xcc, 0x8b, 0xe5, 0xeb, 0x4a, 0xb3, 0x3f, 0x96, 0xa0, 0x6f, 0xa0, 0xd4, 0x17, - 0x22, 0x30, 0xa7, 0x3b, 0xc8, 0xc8, 0x29, 0x4e, 0xad, 0xb6, 0xd0, 0x42, 0xb5, 0xa9, 0x02, 0xab, - 0xb5, 0x85, 0x08, 0xa6, 0xbe, 0xdb, 0x29, 0xbc, 0xde, 0x9f, 0x35, 0xa1, 0xe7, 0xa0, 0x0b, 0x6b, - 0x0e, 0x9e, 0x57, 0xf0, 0x8f, 0x2f, 0x81, 0xf7, 0xac, 0x39, 0xf6, 0x9a, 0x98, 0xb1, 0xc8, 0x83, - 0x3b, 0x3c, 0xb0, 0x66, 0xd9, 0x85, 0x2b, 0x1d, 0xfc, 0x90, 0x07, 0xd6, 0xdc, 0xc1, 0x9d, 0x59, - 0x13, 0x3a, 0x81, 0xb2, 0x15, 0x85, 0x82, 0x9d, 0xcd, 0xf2, 0x57, 0x15, 0xff, 0x93, 0x4b, 0xf8, - 0xfb, 0x4a, 0x39, 0xbb, 0x43, 0xc9, 0x9a, 0x37, 0xa2, 0x63, 0x28, 0xfb, 0xcc, 0x14, 0x9c, 0x9c, - 0x9e, 0xba, 0x96, 0x39, 0x6e, 0xb2, 0xe2, 0x65, 0x4d, 0x06, 0xb2, 0xc1, 0x96, 0x5f, 0x6b, 0x4b, - 0x77, 0x52, 0xb8, 0xe4, 0xb3, 0x5e, 0x0c, 0xe8, 0x8c, 0xfa, 0xac, 0x07, 0x93, 0x92, 0x9d, 0x50, - 0xd7, 0xae, 0x45, 0x1d, 0x03, 0xc6, 0xd4, 0x6f, 0x61, 0x73, 0x42, 0xa5, 0xb6, 0x43, 0x27, 0xe8, - 0xf5, 0xeb, 0xa0, 0x6f, 0x8e, 0x29, 0x2d, 0xdb, 0xa1, 0x63, 0xfc, 0x73, 0xb8, 0x79, 0x31, 0x5c, - 0xbf, 0x0e, 0xbc, 0x7c, 0x11, 0x7a, 0x07, 0xd6, 0xe8, 0x80, 0xfa, 0xc2, 0xf4, 0x98, 0x63, 0x06, - 0x44, 0xf4, 0x8d, 0x52, 0x55, 0xdb, 0xcd, 0xe3, 0xa2, 0xb2, 0x3e, 0x62, 0xce, 0x11, 0x11, 0x7d, - 0xf4, 0x00, 0xaa, 0xc4, 0x7b, 0x49, 0x86, 0xa1, 0x0a, 0x9b, 0x4e, 0xba, 0x79, 0x4a, 0x5c, 0x2f, - 0xe2, 0x34, 0x34, 0xca, 0x55, 0x6d, 0x37, 0x87, 0xb7, 0xe2, 0xb8, 0x47, 0xcc, 0x99, 0x4a, 0xe6, - 0x83, 0x24, 0xa6, 0xf2, 0x0c, 0xb2, 0x47, 0x64, 0xe8, 0x31, 0x62, 0xa3, 0xdb, 0x90, 0x11, 0xf4, - 0x55, 0x3c, 0x7d, 0xf3, 0xcd, 0xbc, 0x3c, 0x67, 0x86, 0x2f, 0x55, 0xb5, 0x76, 0x0a, 0x2b, 0x07, - 0x32, 0x60, 0xe5, 0xc4, 0xf5, 0x09, 0x1f, 0xaa, 0xc1, 0x5a, 0x6c, 0xa7, 0x70, 0xf2, 0xdd, 0xd4, - 0x21, 0x1b, 0x24, 0x94, 0xe5, 0x37, 0xef, 0xde, 0xa6, 0xb5, 0xca, 0x3f, 0x69, 0x58, 0x9f, 0x6b, - 0x38, 0x84, 0x20, 0xd3, 0x67, 0x61, 0xb2, 0x01, 0x56, 0x6b, 0xf4, 0x3e, 0x64, 0xd4, 0x1d, 0x97, - 0xe6, 0x36, 0xc5, 0xca, 0x8c, 0xbe, 0x80, 0x4c, 0x48, 0x7d, 0x3b, 0x99, 0xbc, 0x1f, 0x5d, 0x52, - 0xc8, 0xc9, 0x4d, 0xb0, 0xd2, 0xa0, 0x2f, 0x21, 0xcb, 0xa9, 0x45, 0xdd, 0x01, 0x4d, 0x06, 0xe7, - 0x55, 0xe5, 0x23, 0x19, 0xfa, 0x00, 0x8a, 0x21, 0xe5, 0x03, 0xd7, 0xa2, 0xa6, 0x4f, 0xce, 0xa8, - 0x1a, 0x99, 0x79, 0x5c, 0x48, 0x6c, 0x5d, 0x72, 0x46, 0xd1, 0x29, 0x6c, 0x70, 0xfa, 0x43, 0x44, - 0x43, 0x21, 0x93, 0x60, 0x53, 0x1e, 0x9a, 0x82, 0x99, 0xc4, 0xb6, 0x8d, 0x95, 0x6a, 0x7a, 0xb7, - 0xd0, 0xd8, 0xb9, 0x78, 0x4f, 0x9b, 0x72, 0x35, 0xe0, 0x9e, 0x04, 0xaa, 0x28, 0x0a, 0xf2, 0xde, - 0x2b, 0x3f, 0x69, 0x69, 0xfd, 0xef, 0x2c, 0x2e, 0x27, 0xc0, 0x38, 0x2c, 0xec, 0xb1, 0x3d, 0xdb, - 0x46, 0xf7, 0xe1, 0xd6, 0x05, 0xfb, 0x70, 0x7a, 0xc6, 0x06, 0xd4, 0xc8, 0x55, 0xd3, 0xbb, 0x79, - 0xbc, 0x31, 0xaf, 0xc3, 0xca, 0x8b, 0xde, 0x83, 0xbc, 0x9c, 0xbb, 0x72, 0xd6, 0x35, 0xd4, 0xc8, - 0xcd, 0xe1, 0x5c, 0x14, 0x52, 0x99, 0x9d, 0x06, 0xda, 0x87, 0x12, 0x7d, 0x15, 0x50, 0x4b, 0x50, - 0xdb, 0x0c, 0x05, 0x11, 0x51, 0x48, 0x43, 0x23, 0xaf, 0x8e, 0xbe, 0x91, 0x1c, 0x5d, 0xfe, 0x61, - 0xd4, 0x3a, 0xbe, 0xb8, 0xf7, 0x19, 0x96, 0xbf, 0x19, 0x58, 0x1f, 0x09, 0x9e, 0x26, 0xf1, 0x95, - 0x1f, 0x35, 0x58, 0x9b, 0x1d, 0x80, 0xe3, 0xc4, 0x69, 0xff, 0x2f, 0x71, 0x4b, 0xea, 0x24, 0xd7, - 0x4d, 0x5c, 0x65, 0x07, 0x74, 0x4c, 0x6d, 0x37, 0x9c, 0x3e, 0x91, 0x0e, 0xe9, 0x17, 0x74, 0x98, - 0x14, 0x9f, 0x5c, 0x56, 0x30, 0xac, 0xcf, 0x8d, 0xd6, 0x85, 0x8c, 0x6b, 0x8b, 0x19, 0xdf, 0x82, - 0x3c, 0x89, 0x44, 0x9f, 0x71, 0x57, 0xc4, 0x8d, 0x90, 0xc7, 0x13, 0x43, 0xe5, 0x57, 0x0d, 0x4a, - 0x0b, 0xf3, 0x54, 0x56, 0xf9, 0x04, 0x37, 0x53, 0xe5, 0xd2, 0x8c, 0x3e, 0x85, 0x15, 0x8b, 0xf9, - 0xa7, 0xae, 0x93, 0xfc, 0xb1, 0x6c, 0x2e, 0x8c, 0x8f, 0xa7, 0xea, 0x47, 0x4c, 0x76, 0x5c, 0x1c, - 0x88, 0xee, 0x43, 0x51, 0xe6, 0xc5, 0x36, 0x13, 0x61, 0xdc, 0x20, 0x37, 0x16, 0x84, 0x7b, 0xfe, - 0xb0, 0x9d, 0xc2, 0x05, 0x15, 0xbb, 0xaf, 0x42, 0x9b, 0xab, 0x50, 0x88, 0x45, 0xa6, 0xb4, 0x36, - 0x37, 0x61, 0x6d, 0x7a, 0x7c, 0x50, 0x9e, 0xb4, 0xf0, 0xc3, 0x4c, 0x0e, 0xf4, 0x02, 0x46, 0x5c, - 0x3e, 0xe4, 0xcc, 0x84, 0xb9, 0xf3, 0x1d, 0x14, 0xe3, 0xdb, 0xc5, 0x15, 0x80, 0x0a, 0x90, 0x3d, - 0xee, 0x7e, 0xd5, 0x7d, 0xf2, 0x75, 0x57, 0x4f, 0xc9, 0x8f, 0x76, 0x6b, 0xef, 0x51, 0xaf, 0xfd, - 0x5c, 0xd7, 0xd0, 0x2a, 0xe4, 0x8f, 0xbb, 0xa3, 0xcf, 0x25, 0x54, 0x84, 0xdc, 0x01, 0xde, 0xeb, - 0x74, 0x3b, 0xdd, 0x43, 0x3d, 0x2d, 0x23, 0x7b, 0x9d, 0xc7, 0xad, 0x27, 0xc7, 0x3d, 0x3d, 0xa3, - 0x5c, 0xad, 0x43, 0xbc, 0x77, 0xd0, 0x3a, 0xd0, 0x97, 0x9b, 0xad, 0x5f, 0xce, 0xb7, 0xb5, 0xdf, - 0xcf, 0xb7, 0xb5, 0x3f, 0xce, 0xb7, 0xb5, 0xbf, 0xce, 0xb7, 0x35, 0xb8, 0xed, 0xb2, 0xb8, 0x0a, - 0x02, 0xce, 0x5e, 0x0d, 0x17, 0x0b, 0xa2, 0xa9, 0x4f, 0x3d, 0xf8, 0x91, 0xbc, 0xfe, 0x91, 0x76, - 0xb2, 0xa2, 0xde, 0xe1, 0xee, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x48, 0x23, 0xf9, 0xf6, 0x83, - 0x0b, 0x00, 0x00, -} - -func (this *HealthCheck) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck) - if !ok { - that2, ok := that.(HealthCheck) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Timeout != nil && that1.Timeout != nil { - if *this.Timeout != *that1.Timeout { - return false - } - } else if this.Timeout != nil { - return false - } else if that1.Timeout != nil { - return false - } - if this.Interval != nil && that1.Interval != nil { - if *this.Interval != *that1.Interval { - return false - } - } else if this.Interval != nil { - return false - } else if that1.Interval != nil { - return false - } - if !this.IntervalJitter.Equal(that1.IntervalJitter) { - return false - } - if this.IntervalJitterPercent != that1.IntervalJitterPercent { - return false - } - if !this.UnhealthyThreshold.Equal(that1.UnhealthyThreshold) { - return false - } - if !this.HealthyThreshold.Equal(that1.HealthyThreshold) { - return false - } - if !this.AltPort.Equal(that1.AltPort) { - return false - } - if !this.ReuseConnection.Equal(that1.ReuseConnection) { - return false - } - if that1.HealthChecker == nil { - if this.HealthChecker != nil { - return false - } - } else if this.HealthChecker == nil { - return false - } else if !this.HealthChecker.Equal(that1.HealthChecker) { - return false - } - if !this.NoTrafficInterval.Equal(that1.NoTrafficInterval) { - return false - } - if !this.UnhealthyInterval.Equal(that1.UnhealthyInterval) { - return false - } - if !this.UnhealthyEdgeInterval.Equal(that1.UnhealthyEdgeInterval) { - return false - } - if !this.HealthyEdgeInterval.Equal(that1.HealthyEdgeInterval) { - return false - } - if this.EventLogPath != that1.EventLogPath { - return false - } - if this.AlwaysLogHealthCheckFailures != that1.AlwaysLogHealthCheckFailures { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_HttpHealthCheck_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_HttpHealthCheck_) - if !ok { - that2, ok := that.(HealthCheck_HttpHealthCheck_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.HttpHealthCheck.Equal(that1.HttpHealthCheck) { - return false - } - return true -} -func (this *HealthCheck_TcpHealthCheck_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_TcpHealthCheck_) - if !ok { - that2, ok := that.(HealthCheck_TcpHealthCheck_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TcpHealthCheck.Equal(that1.TcpHealthCheck) { - return false - } - return true -} -func (this *HealthCheck_GrpcHealthCheck_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_GrpcHealthCheck_) - if !ok { - that2, ok := that.(HealthCheck_GrpcHealthCheck_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.GrpcHealthCheck.Equal(that1.GrpcHealthCheck) { - return false - } - return true -} -func (this *HealthCheck_CustomHealthCheck_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_CustomHealthCheck_) - if !ok { - that2, ok := that.(HealthCheck_CustomHealthCheck_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.CustomHealthCheck.Equal(that1.CustomHealthCheck) { - return false - } - return true -} -func (this *HealthCheck_Payload) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_Payload) - if !ok { - that2, ok := that.(HealthCheck_Payload) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.Payload == nil { - if this.Payload != nil { - return false - } - } else if this.Payload == nil { - return false - } else if !this.Payload.Equal(that1.Payload) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_Payload_Text) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_Payload_Text) - if !ok { - that2, ok := that.(HealthCheck_Payload_Text) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Text != that1.Text { - return false - } - return true -} -func (this *HealthCheck_Payload_Binary) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_Payload_Binary) - if !ok { - that2, ok := that.(HealthCheck_Payload_Binary) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.Binary, that1.Binary) { - return false - } - return true -} -func (this *HealthCheck_HttpHealthCheck) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_HttpHealthCheck) - if !ok { - that2, ok := that.(HealthCheck_HttpHealthCheck) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Host != that1.Host { - return false - } - if this.Path != that1.Path { - return false - } - if !this.Send.Equal(that1.Send) { - return false - } - if !this.Receive.Equal(that1.Receive) { - return false - } - if this.ServiceName != that1.ServiceName { - return false - } - if len(this.RequestHeadersToAdd) != len(that1.RequestHeadersToAdd) { - return false - } - for i := range this.RequestHeadersToAdd { - if !this.RequestHeadersToAdd[i].Equal(that1.RequestHeadersToAdd[i]) { - return false - } - } - if len(this.RequestHeadersToRemove) != len(that1.RequestHeadersToRemove) { - return false - } - for i := range this.RequestHeadersToRemove { - if this.RequestHeadersToRemove[i] != that1.RequestHeadersToRemove[i] { - return false - } - } - if this.UseHttp2 != that1.UseHttp2 { - return false - } - if len(this.ExpectedStatuses) != len(that1.ExpectedStatuses) { - return false - } - for i := range this.ExpectedStatuses { - if !this.ExpectedStatuses[i].Equal(that1.ExpectedStatuses[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_TcpHealthCheck) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_TcpHealthCheck) - if !ok { - that2, ok := that.(HealthCheck_TcpHealthCheck) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Send.Equal(that1.Send) { - return false - } - if len(this.Receive) != len(that1.Receive) { - return false - } - for i := range this.Receive { - if !this.Receive[i].Equal(that1.Receive[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_RedisHealthCheck) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_RedisHealthCheck) - if !ok { - that2, ok := that.(HealthCheck_RedisHealthCheck) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Key != that1.Key { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_GrpcHealthCheck) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_GrpcHealthCheck) - if !ok { - that2, ok := that.(HealthCheck_GrpcHealthCheck) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.ServiceName != that1.ServiceName { - return false - } - if this.Authority != that1.Authority { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_CustomHealthCheck) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_CustomHealthCheck) - if !ok { - that2, ok := that.(HealthCheck_CustomHealthCheck) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HealthCheck_CustomHealthCheck_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_CustomHealthCheck_Config) - if !ok { - that2, ok := that.(HealthCheck_CustomHealthCheck_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true -} -func (this *HealthCheck_CustomHealthCheck_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HealthCheck_CustomHealthCheck_TypedConfig) - if !ok { - that2, ok := that.(HealthCheck_CustomHealthCheck_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (m *HealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Timeout != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout))) - n1, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Timeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Interval != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Interval))) - n2, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Interval, dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.IntervalJitter != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.IntervalJitter.Size())) - n3, err := m.IntervalJitter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.UnhealthyThreshold != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.UnhealthyThreshold.Size())) - n4, err := m.UnhealthyThreshold.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.HealthyThreshold != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.HealthyThreshold.Size())) - n5, err := m.HealthyThreshold.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.AltPort != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.AltPort.Size())) - n6, err := m.AltPort.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.ReuseConnection != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.ReuseConnection.Size())) - n7, err := m.ReuseConnection.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.HealthChecker != nil { - nn8, err := m.HealthChecker.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn8 - } - if m.NoTrafficInterval != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.NoTrafficInterval.Size())) - n9, err := m.NoTrafficInterval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.UnhealthyInterval != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.UnhealthyInterval.Size())) - n10, err := m.UnhealthyInterval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.UnhealthyEdgeInterval != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.UnhealthyEdgeInterval.Size())) - n11, err := m.UnhealthyEdgeInterval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.HealthyEdgeInterval != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.HealthyEdgeInterval.Size())) - n12, err := m.HealthyEdgeInterval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if len(m.EventLogPath) > 0 { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.EventLogPath))) - i += copy(dAtA[i:], m.EventLogPath) - } - if m.IntervalJitterPercent != 0 { - dAtA[i] = 0x90 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.IntervalJitterPercent)) - } - if m.AlwaysLogHealthCheckFailures { - dAtA[i] = 0x98 - i++ - dAtA[i] = 0x1 - i++ - if m.AlwaysLogHealthCheckFailures { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_HttpHealthCheck_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.HttpHealthCheck != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.HttpHealthCheck.Size())) - n13, err := m.HttpHealthCheck.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} -func (m *HealthCheck_TcpHealthCheck_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TcpHealthCheck != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.TcpHealthCheck.Size())) - n14, err := m.TcpHealthCheck.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - return i, nil -} -func (m *HealthCheck_GrpcHealthCheck_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GrpcHealthCheck != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.GrpcHealthCheck.Size())) - n15, err := m.GrpcHealthCheck.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - return i, nil -} -func (m *HealthCheck_CustomHealthCheck_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.CustomHealthCheck != nil { - dAtA[i] = 0x6a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.CustomHealthCheck.Size())) - n16, err := m.CustomHealthCheck.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - return i, nil -} -func (m *HealthCheck_Payload) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck_Payload) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Payload != nil { - nn17, err := m.Payload.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn17 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_Payload_Text) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Text))) - i += copy(dAtA[i:], m.Text) - return i, nil -} -func (m *HealthCheck_Payload_Binary) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Binary != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Binary))) - i += copy(dAtA[i:], m.Binary) - } - return i, nil -} -func (m *HealthCheck_HttpHealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck_HttpHealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Host) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Host))) - i += copy(dAtA[i:], m.Host) - } - if len(m.Path) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - } - if m.Send != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.Send.Size())) - n18, err := m.Send.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if m.Receive != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.Receive.Size())) - n19, err := m.Receive.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if len(m.ServiceName) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - } - if len(m.RequestHeadersToAdd) > 0 { - for _, msg := range m.RequestHeadersToAdd { - dAtA[i] = 0x32 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.UseHttp2 { - dAtA[i] = 0x38 - i++ - if m.UseHttp2 { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - dAtA[i] = 0x42 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.ExpectedStatuses) > 0 { - for _, msg := range m.ExpectedStatuses { - dAtA[i] = 0x4a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_TcpHealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck_TcpHealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Send != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.Send.Size())) - n20, err := m.Send.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if len(m.Receive) > 0 { - for _, msg := range m.Receive { - dAtA[i] = 0x12 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_RedisHealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck_RedisHealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Key) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_GrpcHealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck_GrpcHealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ServiceName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - } - if len(m.Authority) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Authority))) - i += copy(dAtA[i:], m.Authority) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_CustomHealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheck_CustomHealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn21, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn21 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheck_CustomHealthCheck_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.Config.Size())) - n22, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - return i, nil -} -func (m *HealthCheck_CustomHealthCheck_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHealthCheck(dAtA, i, uint64(m.TypedConfig.Size())) - n23, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - return i, nil -} -func encodeVarintHealthCheck(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *HealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Timeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout) - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.Interval != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Interval) - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.IntervalJitter != nil { - l = m.IntervalJitter.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.UnhealthyThreshold != nil { - l = m.UnhealthyThreshold.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.HealthyThreshold != nil { - l = m.HealthyThreshold.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.AltPort != nil { - l = m.AltPort.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.ReuseConnection != nil { - l = m.ReuseConnection.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.HealthChecker != nil { - n += m.HealthChecker.Size() - } - if m.NoTrafficInterval != nil { - l = m.NoTrafficInterval.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.UnhealthyInterval != nil { - l = m.UnhealthyInterval.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.UnhealthyEdgeInterval != nil { - l = m.UnhealthyEdgeInterval.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.HealthyEdgeInterval != nil { - l = m.HealthyEdgeInterval.Size() - n += 2 + l + sovHealthCheck(uint64(l)) - } - l = len(m.EventLogPath) - if l > 0 { - n += 2 + l + sovHealthCheck(uint64(l)) - } - if m.IntervalJitterPercent != 0 { - n += 2 + sovHealthCheck(uint64(m.IntervalJitterPercent)) - } - if m.AlwaysLogHealthCheckFailures { - n += 3 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_HttpHealthCheck_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HttpHealthCheck != nil { - l = m.HttpHealthCheck.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} -func (m *HealthCheck_TcpHealthCheck_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TcpHealthCheck != nil { - l = m.TcpHealthCheck.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} -func (m *HealthCheck_GrpcHealthCheck_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GrpcHealthCheck != nil { - l = m.GrpcHealthCheck.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} -func (m *HealthCheck_CustomHealthCheck_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CustomHealthCheck != nil { - l = m.CustomHealthCheck.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} -func (m *HealthCheck_Payload) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Payload != nil { - n += m.Payload.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_Payload_Text) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Text) - n += 1 + l + sovHealthCheck(uint64(l)) - return n -} -func (m *HealthCheck_Payload_Binary) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Binary != nil { - l = len(m.Binary) - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} -func (m *HealthCheck_HttpHealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Host) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - l = len(m.Path) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.Send != nil { - l = m.Send.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.Receive != nil { - l = m.Receive.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - l = len(m.ServiceName) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - if len(m.RequestHeadersToAdd) > 0 { - for _, e := range m.RequestHeadersToAdd { - l = e.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - } - if m.UseHttp2 { - n += 2 - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - l = len(s) - n += 1 + l + sovHealthCheck(uint64(l)) - } - } - if len(m.ExpectedStatuses) > 0 { - for _, e := range m.ExpectedStatuses { - l = e.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_TcpHealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Send != nil { - l = m.Send.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - if len(m.Receive) > 0 { - for _, e := range m.Receive { - l = e.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_RedisHealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Key) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_GrpcHealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ServiceName) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - l = len(m.Authority) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_CustomHealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovHealthCheck(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheck_CustomHealthCheck_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} -func (m *HealthCheck_CustomHealthCheck_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovHealthCheck(uint64(l)) - } - return n -} - -func sovHealthCheck(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozHealthCheck(x uint64) (n int) { - return sovHealthCheck(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *HealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timeout == nil { - m.Timeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Timeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Interval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Interval == nil { - m.Interval = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Interval, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IntervalJitter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IntervalJitter == nil { - m.IntervalJitter = &types.Duration{} - } - if err := m.IntervalJitter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnhealthyThreshold", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UnhealthyThreshold == nil { - m.UnhealthyThreshold = &types.UInt32Value{} - } - if err := m.UnhealthyThreshold.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthyThreshold", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HealthyThreshold == nil { - m.HealthyThreshold = &types.UInt32Value{} - } - if err := m.HealthyThreshold.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AltPort", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AltPort == nil { - m.AltPort = &types.UInt32Value{} - } - if err := m.AltPort.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReuseConnection", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ReuseConnection == nil { - m.ReuseConnection = &types.BoolValue{} - } - if err := m.ReuseConnection.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpHealthCheck", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &HealthCheck_HttpHealthCheck{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HealthChecker = &HealthCheck_HttpHealthCheck_{v} - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TcpHealthCheck", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &HealthCheck_TcpHealthCheck{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HealthChecker = &HealthCheck_TcpHealthCheck_{v} - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GrpcHealthCheck", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &HealthCheck_GrpcHealthCheck{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HealthChecker = &HealthCheck_GrpcHealthCheck_{v} - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NoTrafficInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NoTrafficInterval == nil { - m.NoTrafficInterval = &types.Duration{} - } - if err := m.NoTrafficInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CustomHealthCheck", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &HealthCheck_CustomHealthCheck{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HealthChecker = &HealthCheck_CustomHealthCheck_{v} - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnhealthyInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UnhealthyInterval == nil { - m.UnhealthyInterval = &types.Duration{} - } - if err := m.UnhealthyInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UnhealthyEdgeInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UnhealthyEdgeInterval == nil { - m.UnhealthyEdgeInterval = &types.Duration{} - } - if err := m.UnhealthyEdgeInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthyEdgeInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HealthyEdgeInterval == nil { - m.HealthyEdgeInterval = &types.Duration{} - } - if err := m.HealthyEdgeInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 17: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EventLogPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EventLogPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 18: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IntervalJitterPercent", wireType) - } - m.IntervalJitterPercent = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.IntervalJitterPercent |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 19: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AlwaysLogHealthCheckFailures", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AlwaysLogHealthCheckFailures = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + // 1456 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x97, 0x4d, 0x73, 0xdb, 0xc6, + 0x19, 0xc7, 0x05, 0x8a, 0x12, 0xc9, 0x87, 0x12, 0x05, 0xae, 0xde, 0x60, 0x5a, 0xb6, 0xe9, 0x56, + 0xea, 0xa8, 0x9e, 0x96, 0xec, 0x50, 0xad, 0x3b, 0xee, 0xa5, 0x16, 0x24, 0xd9, 0x94, 0x6a, 0xcb, + 0xea, 0x8a, 0xaa, 0xc7, 0xd3, 0xce, 0xa0, 0x2b, 0x60, 0x45, 0xa2, 0x86, 0xb0, 0xe8, 0x62, 0x49, + 0x9b, 0xb7, 0x4c, 0x8e, 0x39, 0x24, 0x33, 0x39, 0xe5, 0x90, 0x4f, 0xe0, 0x5b, 0x6e, 0x99, 0x7c, + 0x82, 0x5c, 0x93, 0x6f, 0x90, 0x5b, 0x4e, 0x39, 0xf8, 0x94, 0xd1, 0x21, 0x93, 0xc1, 0x62, 0x41, + 0x81, 0xa4, 0x32, 0x94, 0x26, 0x37, 0xec, 0xb3, 0xcf, 0xff, 0xb7, 0xbb, 0xdc, 0xe7, 0x65, 0x09, + 0xeb, 0xd4, 0xef, 0xb1, 0x7e, 0x9d, 0x04, 0x6e, 0xbd, 0xd7, 0xa8, 0xdb, 0x8c, 0xd3, 0x7a, 0x87, + 0x12, 0x4f, 0x74, 0x2c, 0xbb, 0x43, 0xed, 0xd7, 0xb5, 0x80, 0x33, 0xc1, 0x50, 0x59, 0x7a, 0xd5, + 0x48, 0xe0, 0xd6, 0x7a, 0x8d, 0x5a, 0xe4, 0x55, 0x59, 0x1b, 0x17, 0x9e, 0x92, 0x90, 0xc6, 0x82, + 0xca, 0x1f, 0xc6, 0x67, 0x69, 0x8f, 0xfa, 0xc2, 0x0a, 0x29, 0xef, 0xb9, 0x36, 0xb5, 0x6c, 0xe6, + 0x9f, 0xb9, 0x6d, 0xe5, 0xbd, 0x1c, 0x7b, 0x8b, 0x7e, 0x40, 0xeb, 0x1d, 0x21, 0x02, 0x65, 0xbe, + 0x97, 0x32, 0x9f, 0x13, 0x61, 0x77, 0x28, 0xaf, 0x87, 0x82, 0xbb, 0x7e, 0xa2, 0x5b, 0x49, 0x39, + 0x70, 0xe2, 0xb7, 0x93, 0xd5, 0x6f, 0xb5, 0x19, 0x6b, 0x7b, 0xb4, 0x2e, 0x47, 0xa7, 0xdd, 0xb3, + 0x3a, 0xf1, 0xfb, 0x6a, 0xea, 0xee, 0xe8, 0x94, 0xd3, 0xe5, 0x44, 0xb8, 0xcc, 0x57, 0xf3, 0x6b, + 0xa3, 0xf3, 0xa1, 0xe0, 0x5d, 0x5b, 0xfc, 0x92, 0xfa, 0x0d, 0x27, 0x41, 0x40, 0x79, 0xa8, 0xe6, + 0x7f, 0xab, 0x8e, 0xed, 0xfb, 0x4c, 0x48, 0x6a, 0x58, 0x77, 0x68, 0xc0, 0xa9, 0x9d, 0x5e, 0xe2, + 0x6e, 0xd7, 0x09, 0xc8, 0x90, 0xcf, 0xb9, 0xdb, 0xe6, 0x44, 0x24, 0xbb, 0xbf, 0x33, 0x36, 0x1f, + 0x0a, 0x22, 0xba, 0xc9, 0x1a, 0xab, 0x3d, 0xe2, 0xb9, 0x0e, 0x11, 0xb4, 0x9e, 0x7c, 0xc4, 0x13, + 0xbf, 0xf9, 0x6e, 0x05, 0x8a, 0x4d, 0x79, 0x77, 0x3b, 0xd1, 0xd5, 0xa1, 0xbf, 0x43, 0x4e, 0xb8, + 0xe7, 0x94, 0x75, 0x85, 0xa1, 0x55, 0xb5, 0xcd, 0x62, 0xe3, 0x56, 0x2d, 0xde, 0x7e, 0x2d, 0xd9, + 0x7e, 0x6d, 0x57, 0x1d, 0xde, 0x84, 0x0b, 0x33, 0xf7, 0x4e, 0xcb, 0xe6, 0xb5, 0x07, 0x53, 0x38, + 0x51, 0xa1, 0x6d, 0xc8, 0xbb, 0xbe, 0xa0, 0xbc, 0x47, 0x3c, 0x23, 0x73, 0x13, 0xc2, 0x40, 0x86, + 0x1e, 0x43, 0xc9, 0xf5, 0x5d, 0xe1, 0x12, 0xcf, 0xfa, 0x9f, 0x2b, 0x04, 0xe5, 0xc6, 0xd2, 0x04, + 0x10, 0x9e, 0x57, 0x82, 0x03, 0xe9, 0x8f, 0x4c, 0x58, 0x48, 0x68, 0x09, 0x62, 0x7a, 0x12, 0xa2, + 0x94, 0x28, 0x14, 0xe3, 0x21, 0xac, 0x8e, 0x30, 0xac, 0x80, 0x72, 0x9b, 0xfa, 0xc2, 0x40, 0x55, + 0x6d, 0x73, 0x1e, 0x2f, 0x0f, 0x0b, 0x8e, 0xe2, 0x49, 0xf4, 0x12, 0x16, 0xbb, 0x7e, 0x9c, 0x0e, + 0x7d, 0x4b, 0x74, 0x38, 0x0d, 0x3b, 0xcc, 0x73, 0x8c, 0xac, 0x5c, 0x7f, 0x6d, 0x6c, 0xfd, 0x93, + 0x7d, 0x5f, 0x6c, 0x35, 0xfe, 0x45, 0xbc, 0x2e, 0x35, 0xf3, 0x17, 0xe6, 0xcc, 0x47, 0x5a, 0x46, + 0xd7, 0x30, 0x1a, 0x20, 0x5a, 0x09, 0x01, 0x1d, 0x43, 0x79, 0x1c, 0x3b, 0x73, 0x23, 0xac, 0x3e, + 0x06, 0xfd, 0x2b, 0xe4, 0x89, 0x27, 0xac, 0x80, 0x71, 0x61, 0xcc, 0x4e, 0x66, 0xe1, 0x1c, 0xf1, + 0xc4, 0x11, 0xe3, 0x02, 0xed, 0x81, 0xce, 0x69, 0x37, 0x94, 0x49, 0xe9, 0x53, 0x3b, 0xfa, 0x09, + 0x8d, 0x9c, 0x04, 0x54, 0xc6, 0x00, 0x26, 0x63, 0x5e, 0x2c, 0x5f, 0x90, 0x9a, 0x9d, 0x81, 0x04, + 0xfd, 0x07, 0xca, 0x51, 0xf2, 0x5a, 0xe9, 0xfa, 0x61, 0xe4, 0x25, 0xa7, 0x56, 0x1b, 0x2b, 0x20, + 0xb5, 0x54, 0xa8, 0xd6, 0x9a, 0x42, 0x04, 0xa9, 0x71, 0x73, 0x0a, 0x2f, 0x74, 0x86, 0x4d, 0xe8, + 0x15, 0xe8, 0xc2, 0x1e, 0x81, 0x17, 0x24, 0xfc, 0x8f, 0x13, 0xe0, 0x2d, 0x7b, 0x84, 0x5d, 0x12, + 0x43, 0x96, 0x68, 0xe3, 0x6d, 0x1e, 0xd8, 0xc3, 0xec, 0xe2, 0xb5, 0x36, 0xfe, 0x94, 0x07, 0xf6, + 0xc8, 0xc6, 0xdb, 0xc3, 0x26, 0x74, 0x0a, 0x8b, 0x76, 0x37, 0x14, 0xec, 0x7c, 0x98, 0x3f, 0x2f, + 0xf9, 0x7f, 0x9a, 0xc0, 0xdf, 0x91, 0xca, 0xe1, 0x15, 0xca, 0xf6, 0xa8, 0x11, 0x1d, 0xc3, 0xa2, + 0xcf, 0x2c, 0xc1, 0xc9, 0xd9, 0x99, 0x6b, 0x5b, 0x83, 0xa4, 0x9d, 0x9b, 0x94, 0xb4, 0x51, 0x38, + 0xbd, 0xd3, 0x32, 0x0f, 0xa6, 0x70, 0xd9, 0x67, 0xad, 0x58, 0xbe, 0x9f, 0xe4, 0x2e, 0x86, 0xcb, + 0xd0, 0xbd, 0x64, 0x96, 0x6e, 0xc0, 0x1c, 0xc8, 0x07, 0xcc, 0x7f, 0xc3, 0xea, 0x25, 0x93, 0x3a, + 0x6d, 0x7a, 0x09, 0x5e, 0xb8, 0x3e, 0x78, 0x79, 0xc0, 0xd8, 0x73, 0xda, 0x74, 0x00, 0x7f, 0x09, + 0xcb, 0x57, 0xa3, 0xf5, 0xeb, 0xa3, 0x17, 0xaf, 0x02, 0xaf, 0x43, 0x29, 0xee, 0x5e, 0x1e, 0x6b, + 0x5b, 0x01, 0x11, 0x1d, 0xa3, 0x5c, 0xd5, 0x36, 0x0b, 0x78, 0x4e, 0x5a, 0x9f, 0xb1, 0xf6, 0x11, + 0x11, 0x1d, 0x74, 0x00, 0xf3, 0x43, 0x3d, 0xce, 0x58, 0x91, 0xcb, 0x6e, 0x5c, 0x71, 0xc5, 0x7b, + 0x91, 0xdf, 0x71, 0xec, 0xb6, 0x23, 0x3b, 0xa1, 0x62, 0x29, 0x1b, 0x7a, 0x02, 0x55, 0xe2, 0xbd, + 0x21, 0xfd, 0x50, 0x2e, 0x99, 0x0e, 0x1c, 0xeb, 0x8c, 0xb8, 0x5e, 0x97, 0xd3, 0xd0, 0x58, 0xac, + 0x6a, 0x9b, 0x79, 0xbc, 0x16, 0xfb, 0x3d, 0x63, 0xed, 0x54, 0x40, 0x3c, 0x51, 0x3e, 0xe8, 0x00, + 0x8a, 0xc2, 0x0b, 0x2d, 0x16, 0xc8, 0x46, 0x62, 0x2c, 0xcb, 0x1d, 0xfd, 0x7e, 0x52, 0xc2, 0x78, + 0xe1, 0x8b, 0x58, 0x80, 0x41, 0x0c, 0xbe, 0x2b, 0x18, 0x72, 0x47, 0xa4, 0xef, 0x31, 0xe2, 0xa0, + 0x3b, 0x90, 0x15, 0xf4, 0x6d, 0xdc, 0x57, 0x0a, 0x66, 0xee, 0xc2, 0xcc, 0xf2, 0x4c, 0x55, 0x6b, + 0x4e, 0x61, 0x69, 0x46, 0x06, 0xcc, 0x9e, 0xba, 0x3e, 0xe1, 0x7d, 0xd9, 0x36, 0xe6, 0x9a, 0x53, + 0x58, 0x8d, 0xcd, 0x12, 0xe4, 0x02, 0xc5, 0x98, 0xfe, 0xd1, 0xd4, 0x2a, 0x9f, 0xcf, 0xc0, 0xc2, + 0x48, 0xf2, 0x23, 0x04, 0xd9, 0x0e, 0x0b, 0x15, 0x1c, 0xcb, 0x6f, 0x74, 0x1b, 0xb2, 0xf2, 0x77, + 0xcf, 0x0c, 0x2d, 0x88, 0xa5, 0x11, 0xfd, 0x0d, 0xb2, 0x21, 0xf5, 0x1d, 0xd5, 0x17, 0x7e, 0x37, + 0xe1, 0x74, 0xea, 0x0c, 0x58, 0x6a, 0xd0, 0x63, 0xc8, 0x71, 0x6a, 0x53, 0xb7, 0x47, 0x55, 0x59, + 0xbf, 0xae, 0x3c, 0x91, 0xa1, 0x0d, 0x98, 0x4b, 0x1e, 0x35, 0x3e, 0x39, 0xa7, 0xb2, 0x8c, 0x17, + 0xcc, 0x8c, 0xa1, 0xe1, 0xa2, 0xb2, 0x1f, 0x92, 0x73, 0x8a, 0x1c, 0x58, 0xe1, 0xf4, 0xff, 0x5d, + 0x1a, 0x8a, 0xe8, 0x3a, 0x1d, 0xca, 0x43, 0x4b, 0x30, 0x8b, 0x38, 0x8e, 0x31, 0x5b, 0x9d, 0xde, + 0x2c, 0x36, 0xd6, 0xaf, 0x5e, 0xd7, 0xa1, 0x5c, 0x96, 0xdb, 0xf8, 0x12, 0xcc, 0xc2, 0x85, 0x39, + 0xfb, 0xa9, 0x36, 0xad, 0x7f, 0x9f, 0xc3, 0x8b, 0x0a, 0x17, 0x3b, 0x85, 0x2d, 0xb6, 0xed, 0x38, + 0xe8, 0x11, 0xdc, 0xba, 0x62, 0x15, 0x4e, 0xcf, 0x59, 0x8f, 0x1a, 0xf9, 0xea, 0xf4, 0x66, 0x01, + 0xaf, 0x8c, 0xea, 0xb0, 0x9c, 0x45, 0x1b, 0x50, 0x88, 0x7a, 0x40, 0x54, 0x77, 0x1b, 0xb2, 0xfc, + 0xe7, 0xcd, 0xfc, 0x97, 0x3f, 0xbc, 0xff, 0x76, 0x46, 0x33, 0x34, 0x9c, 0xef, 0x86, 0x34, 0xba, + 0xa7, 0x06, 0xda, 0x81, 0x32, 0x7d, 0x1b, 0x50, 0x5b, 0x50, 0xc7, 0x8a, 0xdf, 0x25, 0x34, 0x34, + 0x0a, 0xf2, 0x08, 0x2b, 0xea, 0x08, 0xd1, 0x7b, 0xac, 0xb6, 0xef, 0x8b, 0x87, 0x7f, 0xc6, 0xd1, + 0xa3, 0x0c, 0xeb, 0x89, 0xe0, 0x58, 0xf9, 0xa3, 0x7f, 0x42, 0xd9, 0x66, 0x0e, 0xb5, 0x2d, 0xdb, + 0x73, 0xa3, 0x8c, 0x89, 0x14, 0x06, 0x54, 0xb5, 0xcd, 0x52, 0xe3, 0x76, 0x1a, 0xb2, 0x13, 0x39, + 0xed, 0x48, 0x9f, 0x56, 0x3f, 0x88, 0xdb, 0xdf, 0x87, 0xb2, 0xfd, 0x2d, 0xd8, 0xc3, 0x53, 0xe8, + 0x18, 0x96, 0xd2, 0xd7, 0x60, 0xa9, 0x07, 0xa3, 0xaa, 0xe3, 0xf7, 0xd3, 0x54, 0x35, 0x55, 0x3b, + 0x96, 0x6f, 0xc9, 0xe7, 0xf1, 0x08, 0xa3, 0xd4, 0x6d, 0x29, 0x5b, 0xe5, 0x63, 0x0d, 0x4a, 0xc3, + 0xed, 0x63, 0x10, 0x6c, 0xda, 0xaf, 0x0b, 0xb6, 0x8c, 0xfc, 0xc5, 0x6e, 0x1a, 0x6c, 0x95, 0x75, + 0xd0, 0x31, 0x75, 0xdc, 0x30, 0xbd, 0x23, 0x1d, 0xa6, 0x5f, 0xd3, 0xbe, 0x4a, 0x97, 0xe8, 0xb3, + 0x82, 0x61, 0x61, 0xa4, 0x31, 0xa1, 0xfb, 0x23, 0x51, 0x1a, 0x7b, 0x0f, 0x45, 0xe8, 0x1a, 0x14, + 0x48, 0x57, 0x74, 0x18, 0x77, 0x45, 0x9c, 0xb8, 0x05, 0x7c, 0x69, 0xa8, 0x7c, 0xa1, 0x41, 0x79, + 0xac, 0x1b, 0x45, 0x79, 0x79, 0x89, 0x4b, 0xe5, 0x65, 0x64, 0x44, 0x7f, 0x81, 0xd9, 0xf8, 0x99, + 0xaf, 0x5e, 0x8f, 0xab, 0x63, 0x05, 0xf8, 0x58, 0x3e, 0xae, 0xa3, 0x64, 0x89, 0x6a, 0x44, 0xec, + 0x8c, 0x1e, 0xc1, 0x5c, 0x74, 0x4d, 0x8e, 0xfa, 0x8f, 0xa0, 0xd2, 0x7a, 0x69, 0x4c, 0xbc, 0xed, + 0xf7, 0x9b, 0x53, 0xb8, 0x28, 0x7d, 0xe3, 0x22, 0x6a, 0xce, 0x43, 0x31, 0x16, 0xc9, 0x88, 0xaa, + 0x6c, 0x01, 0x5c, 0xd6, 0x32, 0xb4, 0x01, 0x25, 0xe2, 0x05, 0xbe, 0x25, 0x01, 0x36, 0xf3, 0x42, + 0x43, 0x93, 0x09, 0x31, 0x1f, 0x59, 0x8f, 0x12, 0xa3, 0xb9, 0x0c, 0xa5, 0x74, 0xbd, 0xa5, 0x5c, + 0x56, 0xaa, 0x83, 0x6c, 0x1e, 0xf4, 0xe2, 0x83, 0xff, 0xc2, 0x5c, 0x7c, 0xfc, 0x38, 0x94, 0x51, + 0x11, 0x72, 0x27, 0x87, 0xff, 0x38, 0x7c, 0xf1, 0xf2, 0x50, 0x9f, 0x8a, 0x06, 0xcd, 0xbd, 0xed, + 0x67, 0xad, 0xe6, 0x2b, 0x5d, 0x43, 0xf3, 0x50, 0x38, 0x39, 0x4c, 0x86, 0x19, 0x34, 0x07, 0xf9, + 0x5d, 0xbc, 0xbd, 0x7f, 0xb8, 0x7f, 0xf8, 0x54, 0x9f, 0x8e, 0x3c, 0x5b, 0xfb, 0xcf, 0xf7, 0x5e, + 0x9c, 0xb4, 0xf4, 0xac, 0x9c, 0xda, 0x7b, 0x8a, 0xb7, 0x77, 0xf7, 0x76, 0xf5, 0x19, 0xf3, 0xd5, + 0xfb, 0xcf, 0x7e, 0xfa, 0x64, 0x66, 0x05, 0x2d, 0xc5, 0x91, 0xa1, 0xfe, 0x27, 0xc9, 0xc8, 0xe8, + 0x6d, 0x7d, 0xf5, 0xc1, 0xd7, 0xdf, 0xcc, 0x66, 0x74, 0x0d, 0xee, 0xb9, 0x2c, 0x0e, 0x9d, 0x80, + 0xb3, 0xb7, 0xfd, 0xf1, 0x28, 0x32, 0xf5, 0xd4, 0x2d, 0xc9, 0xb3, 0x1d, 0x69, 0xa7, 0xb3, 0xf2, + 0xe4, 0x5b, 0x3f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x98, 0xd1, 0x65, 0x39, 0xf4, 0x0d, 0x00, 0x00, } -func (m *HealthCheck_Payload) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Payload: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Payload: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Payload = &HealthCheck_Payload_Text{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Binary", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := make([]byte, postIndex-iNdEx) - copy(v, dAtA[iNdEx:postIndex]) - m.Payload = &HealthCheck_Payload_Binary{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheck_HttpHealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpHealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpHealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Host = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Path = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Send", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Send == nil { - m.Send = &HealthCheck_Payload{} - } - if err := m.Send.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Receive", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Receive == nil { - m.Receive = &HealthCheck_Payload{} - } - if err := m.Receive.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToAdd = append(m.RequestHeadersToAdd, &HeaderValueOption{}) - if err := m.RequestHeadersToAdd[len(m.RequestHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UseHttp2", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.UseHttp2 = bool(v != 0) - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToRemove = append(m.RequestHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpectedStatuses", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ExpectedStatuses = append(m.ExpectedStatuses, &_type.Int64Range{}) - if err := m.ExpectedStatuses[len(m.ExpectedStatuses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheck_TcpHealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TcpHealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TcpHealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Send", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Send == nil { - m.Send = &HealthCheck_Payload{} - } - if err := m.Send.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Receive", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Receive = append(m.Receive, &HealthCheck_Payload{}) - if err := m.Receive[len(m.Receive)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheck_RedisHealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RedisHealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RedisHealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheck_GrpcHealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GrpcHealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GrpcHealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServiceName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Authority = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheck_CustomHealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CustomHealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CustomHealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &HealthCheck_CustomHealthCheck_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHealthCheck - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHealthCheck - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &HealthCheck_CustomHealthCheck_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHealthCheck(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHealthCheck - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipHealthCheck(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthHealthCheck - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthHealthCheck - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHealthCheck - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipHealthCheck(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthHealthCheck - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthHealthCheck = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHealthCheck = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/health_check.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/health_check.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,9 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" + + _type "github.com/envoyproxy/go-control-plane/envoy/type" ) // ensure the imports are used @@ -30,9 +32,14 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} + + _ = _type.CodecClientType(0) ) +// define the regex for a UUID once up-front +var _health_check_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on HealthCheck with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -49,7 +56,14 @@ } if d := m.GetTimeout(); d != nil { - dur := *d + dur, err := ptypes.Duration(d) + if err != nil { + return HealthCheckValidationError{ + field: "Timeout", + reason: "value is not a valid duration", + cause: err, + } + } gt := time.Duration(0*time.Second + 0*time.Nanosecond) @@ -70,7 +84,14 @@ } if d := m.GetInterval(); d != nil { - dur := *d + dur, err := ptypes.Duration(d) + if err != nil { + return HealthCheckValidationError{ + field: "Interval", + reason: "value is not a valid duration", + cause: err, + } + } gt := time.Duration(0*time.Second + 0*time.Nanosecond) @@ -83,85 +104,84 @@ } - { - tmp := m.GetIntervalJitter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetInitialJitter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "InitialJitter", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "IntervalJitter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetIntervalJitter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "IntervalJitter", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for IntervalJitterPercent - { - tmp := m.GetUnhealthyThreshold() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if m.GetUnhealthyThreshold() == nil { + return HealthCheckValidationError{ + field: "UnhealthyThreshold", + reason: "value is required", + } + } - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "UnhealthyThreshold", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetUnhealthyThreshold()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "UnhealthyThreshold", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetHealthyThreshold() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if m.GetHealthyThreshold() == nil { + return HealthCheckValidationError{ + field: "HealthyThreshold", + reason: "value is required", + } + } - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "HealthyThreshold", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHealthyThreshold()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "HealthyThreshold", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetAltPort() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "AltPort", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAltPort()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "AltPort", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetReuseConnection() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "ReuseConnection", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetReuseConnection()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "ReuseConnection", + reason: "embedded message failed validation", + cause: err, } } } if d := m.GetNoTrafficInterval(); d != nil { - dur, err := types.DurationFromProto(d) + dur, err := ptypes.Duration(d) if err != nil { return HealthCheckValidationError{ field: "NoTrafficInterval", @@ -182,7 +202,7 @@ } if d := m.GetUnhealthyInterval(); d != nil { - dur, err := types.DurationFromProto(d) + dur, err := ptypes.Duration(d) if err != nil { return HealthCheckValidationError{ field: "UnhealthyInterval", @@ -203,7 +223,7 @@ } if d := m.GetUnhealthyEdgeInterval(); d != nil { - dur, err := types.DurationFromProto(d) + dur, err := ptypes.Duration(d) if err != nil { return HealthCheckValidationError{ field: "UnhealthyEdgeInterval", @@ -224,7 +244,7 @@ } if d := m.GetHealthyEdgeInterval(); d != nil { - dur, err := types.DurationFromProto(d) + dur, err := ptypes.Duration(d) if err != nil { return HealthCheckValidationError{ field: "HealthyEdgeInterval", @@ -246,74 +266,74 @@ // no validation rules for EventLogPath + if v, ok := interface{}(m.GetEventService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "EventService", + reason: "embedded message failed validation", + cause: err, + } + } + } + // no validation rules for AlwaysLogHealthCheckFailures + if v, ok := interface{}(m.GetTlsOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "TlsOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } + switch m.HealthChecker.(type) { case *HealthCheck_HttpHealthCheck_: - { - tmp := m.GetHttpHealthCheck() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "HttpHealthCheck", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHttpHealthCheck()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "HttpHealthCheck", + reason: "embedded message failed validation", + cause: err, } } } case *HealthCheck_TcpHealthCheck_: - { - tmp := m.GetTcpHealthCheck() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "TcpHealthCheck", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTcpHealthCheck()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "TcpHealthCheck", + reason: "embedded message failed validation", + cause: err, } } } case *HealthCheck_GrpcHealthCheck_: - { - tmp := m.GetGrpcHealthCheck() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "GrpcHealthCheck", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGrpcHealthCheck()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "GrpcHealthCheck", + reason: "embedded message failed validation", + cause: err, } } } case *HealthCheck_CustomHealthCheck_: - { - tmp := m.GetCustomHealthCheck() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckValidationError{ - field: "CustomHealthCheck", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCustomHealthCheck()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckValidationError{ + field: "CustomHealthCheck", + reason: "embedded message failed validation", + cause: err, } } } @@ -489,32 +509,22 @@ } } - { - tmp := m.GetSend() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_HttpHealthCheckValidationError{ - field: "Send", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSend()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_HttpHealthCheckValidationError{ + field: "Send", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetReceive() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_HttpHealthCheckValidationError{ - field: "Receive", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetReceive()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_HttpHealthCheckValidationError{ + field: "Receive", + reason: "embedded message failed validation", + cause: err, } } } @@ -531,17 +541,12 @@ for idx, item := range m.GetRequestHeadersToAdd() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_HttpHealthCheckValidationError{ - field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_HttpHealthCheckValidationError{ + field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -553,23 +558,35 @@ for idx, item := range m.GetExpectedStatuses() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_HttpHealthCheckValidationError{ - field: fmt.Sprintf("ExpectedStatuses[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_HttpHealthCheckValidationError{ + field: fmt.Sprintf("ExpectedStatuses[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } } + if _, ok := _type.CodecClientType_name[int32(m.GetCodecClientType())]; !ok { + return HealthCheck_HttpHealthCheckValidationError{ + field: "CodecClientType", + reason: "value must be one of the defined enum values", + } + } + + if v, ok := interface{}(m.GetServiceNameMatcher()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_HttpHealthCheckValidationError{ + field: "ServiceNameMatcher", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -638,17 +655,12 @@ return nil } - { - tmp := m.GetSend() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_TcpHealthCheckValidationError{ - field: "Send", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSend()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_TcpHealthCheckValidationError{ + field: "Send", + reason: "embedded message failed validation", + cause: err, } } } @@ -656,17 +668,12 @@ for idx, item := range m.GetReceive() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_TcpHealthCheckValidationError{ - field: fmt.Sprintf("Receive[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_TcpHealthCheckValidationError{ + field: fmt.Sprintf("Receive[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -893,34 +900,24 @@ case *HealthCheck_CustomHealthCheck_Config: - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_CustomHealthCheckValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_CustomHealthCheckValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, } } } case *HealthCheck_CustomHealthCheck_TypedConfig: - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheck_CustomHealthCheckValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheck_CustomHealthCheckValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, } } } @@ -986,3 +983,70 @@ Cause() error ErrorName() string } = HealthCheck_CustomHealthCheckValidationError{} + +// Validate checks the field values on HealthCheck_TlsOptions with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *HealthCheck_TlsOptions) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// HealthCheck_TlsOptionsValidationError is the validation error returned by +// HealthCheck_TlsOptions.Validate if the designated constraints aren't met. +type HealthCheck_TlsOptionsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HealthCheck_TlsOptionsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HealthCheck_TlsOptionsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HealthCheck_TlsOptionsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HealthCheck_TlsOptionsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HealthCheck_TlsOptionsValidationError) ErrorName() string { + return "HealthCheck_TlsOptionsValidationError" +} + +// Error satisfies the builtin error interface +func (e HealthCheck_TlsOptionsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHealthCheck_TlsOptions.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HealthCheck_TlsOptionsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HealthCheck_TlsOptionsValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,57 +1,37 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/http_uri.proto -package core +package envoy_api_v2_core import ( fmt "fmt" - io "io" - math "math" - time "time" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Envoy external URI descriptor type HttpUri struct { - // The HTTP server URI. It should be a full FQDN with protocol, host and path. - // - // Example: - // - // .. code-block:: yaml - // - // uri: https://www.googleapis.com/oauth2/v1/certs - // Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` - // Specify how `uri` is to be fetched. Today, this requires an explicit - // cluster, but in the future we may support dynamic cluster creation or - // inline DNS resolution. See `issue - // `_. - // // Types that are valid to be assigned to HttpUpstreamType: // *HttpUri_Cluster - HttpUpstreamType isHttpUri_HttpUpstreamType `protobuf_oneof:"http_upstream_type"` - // Sets the maximum duration in milliseconds that a response can take to arrive upon request. - Timeout *time.Duration `protobuf:"bytes,3,opt,name=timeout,proto3,stdduration" json:"timeout,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + HttpUpstreamType isHttpUri_HttpUpstreamType `protobuf_oneof:"http_upstream_type"` + Timeout *duration.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpUri) Reset() { *m = HttpUri{} } @@ -60,26 +40,18 @@ func (*HttpUri) Descriptor() ([]byte, []int) { return fileDescriptor_1660b946db74c078, []int{0} } + func (m *HttpUri) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpUri.Unmarshal(m, b) } func (m *HttpUri) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpUri.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpUri.Marshal(b, m, deterministic) } func (m *HttpUri) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpUri.Merge(m, src) } func (m *HttpUri) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpUri.Size(m) } func (m *HttpUri) XXX_DiscardUnknown() { xxx_messageInfo_HttpUri.DiscardUnknown(m) @@ -87,10 +59,15 @@ var xxx_messageInfo_HttpUri proto.InternalMessageInfo +func (m *HttpUri) GetUri() string { + if m != nil { + return m.Uri + } + return "" +} + type isHttpUri_HttpUpstreamType interface { isHttpUri_HttpUpstreamType() - MarshalTo([]byte) (int, error) - Size() int } type HttpUri_Cluster struct { @@ -106,13 +83,6 @@ return nil } -func (m *HttpUri) GetUri() string { - if m != nil { - return m.Uri - } - return "" -} - func (m *HttpUri) GetCluster() string { if x, ok := m.GetHttpUpstreamType().(*HttpUri_Cluster); ok { return x.Cluster @@ -120,64 +90,20 @@ return "" } -func (m *HttpUri) GetTimeout() *time.Duration { +func (m *HttpUri) GetTimeout() *duration.Duration { if m != nil { return m.Timeout } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HttpUri) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HttpUri_OneofMarshaler, _HttpUri_OneofUnmarshaler, _HttpUri_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HttpUri) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*HttpUri_Cluster)(nil), } } -func _HttpUri_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HttpUri) - // http_upstream_type - switch x := m.HttpUpstreamType.(type) { - case *HttpUri_Cluster: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Cluster) - case nil: - default: - return fmt.Errorf("HttpUri.HttpUpstreamType has unexpected type %T", x) - } - return nil -} - -func _HttpUri_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HttpUri) - switch tag { - case 2: // http_upstream_type.cluster - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HttpUpstreamType = &HttpUri_Cluster{x} - return true, err - default: - return false, nil - } -} - -func _HttpUri_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HttpUri) - // http_upstream_type - switch x := m.HttpUpstreamType.(type) { - case *HttpUri_Cluster: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Cluster))) - n += len(x.Cluster) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - func init() { proto.RegisterType((*HttpUri)(nil), "envoy.api.v2.core.HttpUri") } @@ -185,397 +111,26 @@ func init() { proto.RegisterFile("envoy/api/v2/core/http_uri.proto", fileDescriptor_1660b946db74c078) } var fileDescriptor_1660b946db74c078 = []byte{ - // 301 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xb1, 0x4a, 0x33, 0x41, - 0x10, 0xc7, 0x33, 0xb9, 0x2f, 0x5f, 0xcc, 0x6a, 0xe3, 0x22, 0x78, 0x26, 0x70, 0x39, 0x04, 0x21, - 0xd5, 0x2e, 0x9c, 0xb5, 0xcd, 0x61, 0x91, 0x46, 0x08, 0x01, 0xeb, 0xb0, 0x49, 0xd6, 0x73, 0x21, - 0xc9, 0x2c, 0x9b, 0xd9, 0xc3, 0xbc, 0x89, 0xcf, 0xe0, 0x13, 0xa8, 0x55, 0x4a, 0x4b, 0xdf, 0x40, - 0x49, 0x97, 0xb7, 0x90, 0xbb, 0xcb, 0x35, 0xda, 0xfd, 0x99, 0xf9, 0xed, 0xf0, 0xdb, 0x3f, 0x8b, - 0xf5, 0x2a, 0xc7, 0x8d, 0x54, 0xd6, 0xc8, 0x3c, 0x91, 0x33, 0x74, 0x5a, 0x3e, 0x12, 0xd9, 0x89, - 0x77, 0x46, 0x58, 0x87, 0x84, 0xfc, 0xb4, 0x24, 0x84, 0xb2, 0x46, 0xe4, 0x89, 0x28, 0x88, 0x6e, - 0x94, 0x21, 0x66, 0x0b, 0x2d, 0x4b, 0x60, 0xea, 0x1f, 0xe4, 0xdc, 0x3b, 0x45, 0x06, 0x57, 0xd5, - 0x93, 0xee, 0x59, 0x86, 0x19, 0x96, 0x51, 0x16, 0xe9, 0x30, 0x3d, 0xcf, 0xd5, 0xc2, 0xcc, 0x15, - 0x69, 0x59, 0x87, 0x6a, 0x71, 0xf9, 0x06, 0xac, 0x3d, 0x24, 0xb2, 0xf7, 0xce, 0xf0, 0x1e, 0x0b, - 0xbc, 0x33, 0x21, 0xc4, 0x30, 0xe8, 0xa4, 0x9d, 0xf7, 0xfd, 0x36, 0xf8, 0xe7, 0x9a, 0x31, 0x8c, - 0x8b, 0x29, 0xbf, 0x62, 0xed, 0xd9, 0xc2, 0xaf, 0x49, 0xbb, 0xb0, 0xf9, 0x0b, 0x18, 0x36, 0xc6, - 0xf5, 0x8e, 0xdf, 0xb1, 0x36, 0x99, 0xa5, 0x46, 0x4f, 0x61, 0x10, 0xc3, 0xe0, 0x38, 0xb9, 0x10, - 0x95, 0xb0, 0xa8, 0x85, 0xc5, 0xed, 0x41, 0x38, 0x0d, 0x9f, 0xbf, 0xfa, 0x50, 0x5c, 0x69, 0xbd, - 0x40, 0x33, 0x69, 0xd4, 0xe9, 0x08, 0xc6, 0xf5, 0x8d, 0xb4, 0xc7, 0x78, 0x55, 0x89, 0x5d, 0x93, - 0xd3, 0x6a, 0x39, 0xa1, 0x8d, 0xd5, 0xbc, 0xf5, 0xba, 0xdf, 0x06, 0x90, 0xde, 0x7c, 0xec, 0x22, - 0xf8, 0xdc, 0x45, 0xf0, 0xbd, 0x8b, 0x80, 0xf5, 0x0d, 0x8a, 0xb2, 0x2e, 0xeb, 0xf0, 0x69, 0x23, - 0xfe, 0x34, 0x97, 0x9e, 0x1c, 0xfe, 0x39, 0x2a, 0x44, 0x46, 0x30, 0xfd, 0x5f, 0x1a, 0x5d, 0xff, - 0x04, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x3f, 0x9d, 0x68, 0x87, 0x01, 0x00, 0x00, -} - -func (m *HttpUri) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + // 323 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xbd, 0x4e, 0x32, 0x41, + 0x14, 0x86, 0x19, 0xe0, 0x63, 0x3f, 0x47, 0x0b, 0x9d, 0x18, 0x05, 0x12, 0x71, 0xa3, 0x0d, 0xd5, + 0x4c, 0xb2, 0x5c, 0x80, 0xc9, 0xc4, 0x82, 0x92, 0x90, 0x50, 0x93, 0x01, 0x86, 0x75, 0x12, 0xd8, + 0x33, 0x99, 0x3d, 0xb3, 0x91, 0xce, 0x3b, 0xb0, 0xf5, 0x06, 0x6c, 0xbc, 0x04, 0xaf, 0xc0, 0xd6, + 0x5b, 0xb1, 0x32, 0x14, 0xc6, 0xec, 0x5f, 0x61, 0xe8, 0x4e, 0xce, 0xf3, 0x9e, 0xe4, 0xbc, 0x0f, + 0x0d, 0x75, 0x92, 0xc1, 0x4e, 0x28, 0x6b, 0x44, 0x16, 0x89, 0x25, 0x38, 0x2d, 0x1e, 0x10, 0xed, + 0xdc, 0x3b, 0xc3, 0xad, 0x03, 0x04, 0x76, 0x56, 0x24, 0xb8, 0xb2, 0x86, 0x67, 0x11, 0xcf, 0x13, + 0xfd, 0x41, 0x0c, 0x10, 0x6f, 0xb4, 0x28, 0x02, 0x0b, 0xbf, 0x16, 0x2b, 0xef, 0x14, 0x1a, 0x48, + 0xca, 0x93, 0xfe, 0xc0, 0xaf, 0xac, 0x12, 0x2a, 0x49, 0x00, 0x8b, 0x75, 0x2a, 0xb6, 0x26, 0x76, + 0x0a, 0x75, 0xc5, 0xaf, 0x0e, 0x78, 0x8a, 0x0a, 0x7d, 0x5a, 0xe1, 0xcb, 0x4c, 0x6d, 0xcc, 0x4a, + 0xa1, 0x16, 0xf5, 0x50, 0x82, 0x9b, 0x57, 0x42, 0x83, 0x31, 0xa2, 0x9d, 0x39, 0xc3, 0x7a, 0xb4, + 0xe5, 0x9d, 0xe9, 0x92, 0x90, 0x0c, 0x8f, 0x64, 0xb0, 0x97, 0x6d, 0xd7, 0x0c, 0xc9, 0x34, 0xdf, + 0xb1, 0x5b, 0x1a, 0x2c, 0x37, 0x3e, 0x45, 0xed, 0xba, 0xcd, 0x3f, 0x78, 0xdc, 0x98, 0xd6, 0x84, + 0xdd, 0xd1, 0x00, 0xcd, 0x56, 0x83, 0xc7, 0x6e, 0x2b, 0x24, 0xc3, 0xe3, 0xa8, 0xc7, 0xcb, 0x56, + 0xbc, 0x6e, 0xc5, 0xef, 0xab, 0x56, 0x92, 0xee, 0x65, 0xf0, 0x46, 0xda, 0xff, 0x49, 0xd4, 0x98, + 0xd6, 0x57, 0xb2, 0x47, 0x59, 0x69, 0xca, 0xa6, 0xe8, 0xb4, 0xda, 0xce, 0x71, 0x67, 0x35, 0x6b, + 0x7d, 0x4b, 0x22, 0x67, 0x5f, 0x2f, 0x3f, 0xcf, 0xff, 0x2e, 0xd8, 0x79, 0xa9, 0x6e, 0x09, 0xc9, + 0xda, 0xc4, 0x85, 0x3a, 0x9e, 0x8d, 0xde, 0x9f, 0x3e, 0x3e, 0x3b, 0xcd, 0x53, 0x42, 0xaf, 0x0d, + 0xf0, 0x22, 0x60, 0x1d, 0x3c, 0xee, 0xf8, 0x81, 0x66, 0x79, 0x52, 0x75, 0x9d, 0xe4, 0x0f, 0x4d, + 0xc8, 0xa2, 0x53, 0x7c, 0x36, 0xfa, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xef, 0x44, 0x45, 0xb4, + 0x01, 0x00, 0x00, } - -func (m *HttpUri) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Uri) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHttpUri(dAtA, i, uint64(len(m.Uri))) - i += copy(dAtA[i:], m.Uri) - } - if m.HttpUpstreamType != nil { - nn1, err := m.HttpUpstreamType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if m.Timeout != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHttpUri(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout))) - n2, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Timeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpUri_Cluster) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x12 - i++ - i = encodeVarintHttpUri(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - return i, nil -} -func encodeVarintHttpUri(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *HttpUri) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Uri) - if l > 0 { - n += 1 + l + sovHttpUri(uint64(l)) - } - if m.HttpUpstreamType != nil { - n += m.HttpUpstreamType.Size() - } - if m.Timeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout) - n += 1 + l + sovHttpUri(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpUri_Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cluster) - n += 1 + l + sovHttpUri(uint64(l)) - return n -} - -func sovHttpUri(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozHttpUri(x uint64) (n int) { - return sovHttpUri(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *HttpUri) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpUri - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpUri: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpUri: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpUri - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpUri - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpUri - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Uri = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpUri - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpUri - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpUri - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HttpUpstreamType = &HttpUri_Cluster{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpUri - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpUri - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpUri - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timeout == nil { - m.Timeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Timeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHttpUri(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpUri - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpUri - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipHttpUri(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpUri - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpUri - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpUri - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthHttpUri - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthHttpUri - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpUri - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipHttpUri(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthHttpUri - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthHttpUri = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHttpUri = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/http_uri.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/http_uri.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _http_uri_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on HttpUri with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *HttpUri) Validate() error { @@ -54,6 +57,27 @@ } } + if d := m.GetTimeout(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return HttpUriValidationError{ + field: "Timeout", + reason: "value is not a valid duration", + cause: err, + } + } + + gte := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur < gte { + return HttpUriValidationError{ + field: "Timeout", + reason: "value must be greater than or equal to 0s", + } + } + + } + switch m.HttpUpstreamType.(type) { case *HttpUri_Cluster: diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,35 +1,29 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/core/protocol.proto -package core +package envoy_api_v2_core import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - time "time" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// [#not-implemented-hide:] type TcpProtocolOptions struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -42,26 +36,18 @@ func (*TcpProtocolOptions) Descriptor() ([]byte, []int) { return fileDescriptor_d86476e078060b60, []int{0} } + func (m *TcpProtocolOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpProtocolOptions.Unmarshal(m, b) } func (m *TcpProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpProtocolOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpProtocolOptions.Marshal(b, m, deterministic) } func (m *TcpProtocolOptions) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpProtocolOptions.Merge(m, src) } func (m *TcpProtocolOptions) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpProtocolOptions.Size(m) } func (m *TcpProtocolOptions) XXX_DiscardUnknown() { xxx_messageInfo_TcpProtocolOptions.DiscardUnknown(m) @@ -69,43 +55,81 @@ var xxx_messageInfo_TcpProtocolOptions proto.InternalMessageInfo +type UpstreamHttpProtocolOptions struct { + AutoSni bool `protobuf:"varint,1,opt,name=auto_sni,json=autoSni,proto3" json:"auto_sni,omitempty"` + AutoSanValidation bool `protobuf:"varint,2,opt,name=auto_san_validation,json=autoSanValidation,proto3" json:"auto_san_validation,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpstreamHttpProtocolOptions) Reset() { *m = UpstreamHttpProtocolOptions{} } +func (m *UpstreamHttpProtocolOptions) String() string { return proto.CompactTextString(m) } +func (*UpstreamHttpProtocolOptions) ProtoMessage() {} +func (*UpstreamHttpProtocolOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_d86476e078060b60, []int{1} +} + +func (m *UpstreamHttpProtocolOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpstreamHttpProtocolOptions.Unmarshal(m, b) +} +func (m *UpstreamHttpProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpstreamHttpProtocolOptions.Marshal(b, m, deterministic) +} +func (m *UpstreamHttpProtocolOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpstreamHttpProtocolOptions.Merge(m, src) +} +func (m *UpstreamHttpProtocolOptions) XXX_Size() int { + return xxx_messageInfo_UpstreamHttpProtocolOptions.Size(m) +} +func (m *UpstreamHttpProtocolOptions) XXX_DiscardUnknown() { + xxx_messageInfo_UpstreamHttpProtocolOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_UpstreamHttpProtocolOptions proto.InternalMessageInfo + +func (m *UpstreamHttpProtocolOptions) GetAutoSni() bool { + if m != nil { + return m.AutoSni + } + return false +} + +func (m *UpstreamHttpProtocolOptions) GetAutoSanValidation() bool { + if m != nil { + return m.AutoSanValidation + } + return false +} + type HttpProtocolOptions struct { - // The idle timeout for upstream connection pool connections. The idle timeout is defined as the - // period in which there are no active requests. If not set, there is no idle timeout. When the - // idle timeout is reached the connection will be closed. Note that request based timeouts mean - // that HTTP/2 PINGs will not keep the connection alive. - IdleTimeout *time.Duration `protobuf:"bytes,1,opt,name=idle_timeout,json=idleTimeout,proto3,stdduration" json:"idle_timeout,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + IdleTimeout *duration.Duration `protobuf:"bytes,1,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` + MaxConnectionDuration *duration.Duration `protobuf:"bytes,3,opt,name=max_connection_duration,json=maxConnectionDuration,proto3" json:"max_connection_duration,omitempty"` + MaxHeadersCount *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_headers_count,json=maxHeadersCount,proto3" json:"max_headers_count,omitempty"` + MaxStreamDuration *duration.Duration `protobuf:"bytes,4,opt,name=max_stream_duration,json=maxStreamDuration,proto3" json:"max_stream_duration,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpProtocolOptions) Reset() { *m = HttpProtocolOptions{} } func (m *HttpProtocolOptions) String() string { return proto.CompactTextString(m) } func (*HttpProtocolOptions) ProtoMessage() {} func (*HttpProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_d86476e078060b60, []int{1} + return fileDescriptor_d86476e078060b60, []int{2} } + func (m *HttpProtocolOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpProtocolOptions.Unmarshal(m, b) } func (m *HttpProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpProtocolOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpProtocolOptions.Marshal(b, m, deterministic) } func (m *HttpProtocolOptions) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpProtocolOptions.Merge(m, src) } func (m *HttpProtocolOptions) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpProtocolOptions.Size(m) } func (m *HttpProtocolOptions) XXX_DiscardUnknown() { xxx_messageInfo_HttpProtocolOptions.DiscardUnknown(m) @@ -113,59 +137,63 @@ var xxx_messageInfo_HttpProtocolOptions proto.InternalMessageInfo -func (m *HttpProtocolOptions) GetIdleTimeout() *time.Duration { +func (m *HttpProtocolOptions) GetIdleTimeout() *duration.Duration { if m != nil { return m.IdleTimeout } return nil } +func (m *HttpProtocolOptions) GetMaxConnectionDuration() *duration.Duration { + if m != nil { + return m.MaxConnectionDuration + } + return nil +} + +func (m *HttpProtocolOptions) GetMaxHeadersCount() *wrappers.UInt32Value { + if m != nil { + return m.MaxHeadersCount + } + return nil +} + +func (m *HttpProtocolOptions) GetMaxStreamDuration() *duration.Duration { + if m != nil { + return m.MaxStreamDuration + } + return nil +} + type Http1ProtocolOptions struct { - // Handle HTTP requests with absolute URLs in the requests. These requests - // are generally sent by clients to forward/explicit proxies. This allows clients to configure - // envoy as their HTTP proxy. In Unix, for example, this is typically done by setting the - // *http_proxy* environment variable. - AllowAbsoluteUrl *types.BoolValue `protobuf:"bytes,1,opt,name=allow_absolute_url,json=allowAbsoluteUrl,proto3" json:"allow_absolute_url,omitempty"` - // Handle incoming HTTP/1.0 and HTTP 0.9 requests. - // This is off by default, and not fully standards compliant. There is support for pre-HTTP/1.1 - // style connect logic, dechunking, and handling lack of client host iff - // *default_host_for_http_10* is configured. - AcceptHttp_10 bool `protobuf:"varint,2,opt,name=accept_http_10,json=acceptHttp10,proto3" json:"accept_http_10,omitempty"` - // A default host for HTTP/1.0 requests. This is highly suggested if *accept_http_10* is true as - // Envoy does not otherwise support HTTP/1.0 without a Host header. - // This is a no-op if *accept_http_10* is not true. - DefaultHostForHttp_10 string `protobuf:"bytes,3,opt,name=default_host_for_http_10,json=defaultHostForHttp10,proto3" json:"default_host_for_http_10,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AllowAbsoluteUrl *wrappers.BoolValue `protobuf:"bytes,1,opt,name=allow_absolute_url,json=allowAbsoluteUrl,proto3" json:"allow_absolute_url,omitempty"` + AcceptHttp_10 bool `protobuf:"varint,2,opt,name=accept_http_10,json=acceptHttp10,proto3" json:"accept_http_10,omitempty"` + DefaultHostForHttp_10 string `protobuf:"bytes,3,opt,name=default_host_for_http_10,json=defaultHostForHttp10,proto3" json:"default_host_for_http_10,omitempty"` + HeaderKeyFormat *Http1ProtocolOptions_HeaderKeyFormat `protobuf:"bytes,4,opt,name=header_key_format,json=headerKeyFormat,proto3" json:"header_key_format,omitempty"` + EnableTrailers bool `protobuf:"varint,5,opt,name=enable_trailers,json=enableTrailers,proto3" json:"enable_trailers,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Http1ProtocolOptions) Reset() { *m = Http1ProtocolOptions{} } func (m *Http1ProtocolOptions) String() string { return proto.CompactTextString(m) } func (*Http1ProtocolOptions) ProtoMessage() {} func (*Http1ProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_d86476e078060b60, []int{2} + return fileDescriptor_d86476e078060b60, []int{3} } + func (m *Http1ProtocolOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Http1ProtocolOptions.Unmarshal(m, b) } func (m *Http1ProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Http1ProtocolOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Http1ProtocolOptions.Marshal(b, m, deterministic) } func (m *Http1ProtocolOptions) XXX_Merge(src proto.Message) { xxx_messageInfo_Http1ProtocolOptions.Merge(m, src) } func (m *Http1ProtocolOptions) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Http1ProtocolOptions.Size(m) } func (m *Http1ProtocolOptions) XXX_DiscardUnknown() { xxx_messageInfo_Http1ProtocolOptions.DiscardUnknown(m) @@ -173,7 +201,7 @@ var xxx_messageInfo_Http1ProtocolOptions proto.InternalMessageInfo -func (m *Http1ProtocolOptions) GetAllowAbsoluteUrl() *types.BoolValue { +func (m *Http1ProtocolOptions) GetAllowAbsoluteUrl() *wrappers.BoolValue { if m != nil { return m.AllowAbsoluteUrl } @@ -194,63 +222,158 @@ return "" } -type Http2ProtocolOptions struct { - // `Maximum table size `_ - // (in octets) that the encoder is permitted to use for the dynamic HPACK table. Valid values - // range from 0 to 4294967295 (2^32 - 1) and defaults to 4096. 0 effectively disables header - // compression. - HpackTableSize *types.UInt32Value `protobuf:"bytes,1,opt,name=hpack_table_size,json=hpackTableSize,proto3" json:"hpack_table_size,omitempty"` - // `Maximum concurrent streams `_ - // allowed for peer on one HTTP/2 connection. Valid values range from 1 to 2147483647 (2^31 - 1) - // and defaults to 2147483647. - MaxConcurrentStreams *types.UInt32Value `protobuf:"bytes,2,opt,name=max_concurrent_streams,json=maxConcurrentStreams,proto3" json:"max_concurrent_streams,omitempty"` - // This field also acts as a soft limit on the number of bytes Envoy will buffer per-stream in the - // HTTP/2 codec buffers. Once the buffer reaches this pointer, watermark callbacks will fire to - // stop the flow of data to the codec buffers. - InitialStreamWindowSize *types.UInt32Value `protobuf:"bytes,3,opt,name=initial_stream_window_size,json=initialStreamWindowSize,proto3" json:"initial_stream_window_size,omitempty"` - // Similar to *initial_stream_window_size*, but for connection-level flow-control - // window. Currently, this has the same minimum/maximum/default as *initial_stream_window_size*. - InitialConnectionWindowSize *types.UInt32Value `protobuf:"bytes,4,opt,name=initial_connection_window_size,json=initialConnectionWindowSize,proto3" json:"initial_connection_window_size,omitempty"` - // Allows proxying Websocket and other upgrades over H2 connect. - AllowConnect bool `protobuf:"varint,5,opt,name=allow_connect,json=allowConnect,proto3" json:"allow_connect,omitempty"` - // [#not-implemented-hide:] Hiding until envoy has full metadata support. - // Still under implementation. DO NOT USE. - // - // Allows metadata. See [metadata - // docs](https://github.com/envoyproxy/envoy/blob/master/source/docs/h2_metadata.md) for more - // information. - AllowMetadata bool `protobuf:"varint,6,opt,name=allow_metadata,json=allowMetadata,proto3" json:"allow_metadata,omitempty"` +func (m *Http1ProtocolOptions) GetHeaderKeyFormat() *Http1ProtocolOptions_HeaderKeyFormat { + if m != nil { + return m.HeaderKeyFormat + } + return nil +} + +func (m *Http1ProtocolOptions) GetEnableTrailers() bool { + if m != nil { + return m.EnableTrailers + } + return false +} + +type Http1ProtocolOptions_HeaderKeyFormat struct { + // Types that are valid to be assigned to HeaderFormat: + // *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_ + HeaderFormat isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat `protobuf_oneof:"header_format"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Http1ProtocolOptions_HeaderKeyFormat) Reset() { *m = Http1ProtocolOptions_HeaderKeyFormat{} } +func (m *Http1ProtocolOptions_HeaderKeyFormat) String() string { return proto.CompactTextString(m) } +func (*Http1ProtocolOptions_HeaderKeyFormat) ProtoMessage() {} +func (*Http1ProtocolOptions_HeaderKeyFormat) Descriptor() ([]byte, []int) { + return fileDescriptor_d86476e078060b60, []int{3, 0} +} + +func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Unmarshal(m, b) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Marshal(b, m, deterministic) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Merge(src proto.Message) { + xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Merge(m, src) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_Size() int { + return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.Size(m) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat) XXX_DiscardUnknown() { + xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat.DiscardUnknown(m) +} + +var xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat proto.InternalMessageInfo + +type isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat interface { + isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat() +} + +type Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_ struct { + ProperCaseWords *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords `protobuf:"bytes,1,opt,name=proper_case_words,json=properCaseWords,proto3,oneof"` +} + +func (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_) isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat() { +} + +func (m *Http1ProtocolOptions_HeaderKeyFormat) GetHeaderFormat() isHttp1ProtocolOptions_HeaderKeyFormat_HeaderFormat { + if m != nil { + return m.HeaderFormat + } + return nil +} + +func (m *Http1ProtocolOptions_HeaderKeyFormat) GetProperCaseWords() *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords { + if x, ok := m.GetHeaderFormat().(*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_); ok { + return x.ProperCaseWords + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Http1ProtocolOptions_HeaderKeyFormat) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_)(nil), + } +} + +type Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) Reset() { + *m = Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords{} +} +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) String() string { + return proto.CompactTextString(m) +} +func (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) ProtoMessage() {} +func (*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) Descriptor() ([]byte, []int) { + return fileDescriptor_d86476e078060b60, []int{3, 0, 0} +} + +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Unmarshal(m, b) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Marshal(b, m, deterministic) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Merge(src proto.Message) { + xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Merge(m, src) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_Size() int { + return xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Size(m) +} +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) XXX_DiscardUnknown() { + xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.DiscardUnknown(m) +} + +var xxx_messageInfo_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords proto.InternalMessageInfo + +type Http2ProtocolOptions struct { + HpackTableSize *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=hpack_table_size,json=hpackTableSize,proto3" json:"hpack_table_size,omitempty"` + MaxConcurrentStreams *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=max_concurrent_streams,json=maxConcurrentStreams,proto3" json:"max_concurrent_streams,omitempty"` + InitialStreamWindowSize *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=initial_stream_window_size,json=initialStreamWindowSize,proto3" json:"initial_stream_window_size,omitempty"` + InitialConnectionWindowSize *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=initial_connection_window_size,json=initialConnectionWindowSize,proto3" json:"initial_connection_window_size,omitempty"` + AllowConnect bool `protobuf:"varint,5,opt,name=allow_connect,json=allowConnect,proto3" json:"allow_connect,omitempty"` + AllowMetadata bool `protobuf:"varint,6,opt,name=allow_metadata,json=allowMetadata,proto3" json:"allow_metadata,omitempty"` + MaxOutboundFrames *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_outbound_frames,json=maxOutboundFrames,proto3" json:"max_outbound_frames,omitempty"` + MaxOutboundControlFrames *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=max_outbound_control_frames,json=maxOutboundControlFrames,proto3" json:"max_outbound_control_frames,omitempty"` + MaxConsecutiveInboundFramesWithEmptyPayload *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=max_consecutive_inbound_frames_with_empty_payload,json=maxConsecutiveInboundFramesWithEmptyPayload,proto3" json:"max_consecutive_inbound_frames_with_empty_payload,omitempty"` + MaxInboundPriorityFramesPerStream *wrappers.UInt32Value `protobuf:"bytes,10,opt,name=max_inbound_priority_frames_per_stream,json=maxInboundPriorityFramesPerStream,proto3" json:"max_inbound_priority_frames_per_stream,omitempty"` + MaxInboundWindowUpdateFramesPerDataFrameSent *wrappers.UInt32Value `protobuf:"bytes,11,opt,name=max_inbound_window_update_frames_per_data_frame_sent,json=maxInboundWindowUpdateFramesPerDataFrameSent,proto3" json:"max_inbound_window_update_frames_per_data_frame_sent,omitempty"` + StreamErrorOnInvalidHttpMessaging bool `protobuf:"varint,12,opt,name=stream_error_on_invalid_http_messaging,json=streamErrorOnInvalidHttpMessaging,proto3" json:"stream_error_on_invalid_http_messaging,omitempty"` + CustomSettingsParameters []*Http2ProtocolOptions_SettingsParameter `protobuf:"bytes,13,rep,name=custom_settings_parameters,json=customSettingsParameters,proto3" json:"custom_settings_parameters,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + func (m *Http2ProtocolOptions) Reset() { *m = Http2ProtocolOptions{} } func (m *Http2ProtocolOptions) String() string { return proto.CompactTextString(m) } func (*Http2ProtocolOptions) ProtoMessage() {} func (*Http2ProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_d86476e078060b60, []int{3} + return fileDescriptor_d86476e078060b60, []int{4} } + func (m *Http2ProtocolOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Http2ProtocolOptions.Unmarshal(m, b) } func (m *Http2ProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Http2ProtocolOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Http2ProtocolOptions.Marshal(b, m, deterministic) } func (m *Http2ProtocolOptions) XXX_Merge(src proto.Message) { xxx_messageInfo_Http2ProtocolOptions.Merge(m, src) } func (m *Http2ProtocolOptions) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Http2ProtocolOptions.Size(m) } func (m *Http2ProtocolOptions) XXX_DiscardUnknown() { xxx_messageInfo_Http2ProtocolOptions.DiscardUnknown(m) @@ -258,28 +381,28 @@ var xxx_messageInfo_Http2ProtocolOptions proto.InternalMessageInfo -func (m *Http2ProtocolOptions) GetHpackTableSize() *types.UInt32Value { +func (m *Http2ProtocolOptions) GetHpackTableSize() *wrappers.UInt32Value { if m != nil { return m.HpackTableSize } return nil } -func (m *Http2ProtocolOptions) GetMaxConcurrentStreams() *types.UInt32Value { +func (m *Http2ProtocolOptions) GetMaxConcurrentStreams() *wrappers.UInt32Value { if m != nil { return m.MaxConcurrentStreams } return nil } -func (m *Http2ProtocolOptions) GetInitialStreamWindowSize() *types.UInt32Value { +func (m *Http2ProtocolOptions) GetInitialStreamWindowSize() *wrappers.UInt32Value { if m != nil { return m.InitialStreamWindowSize } return nil } -func (m *Http2ProtocolOptions) GetInitialConnectionWindowSize() *types.UInt32Value { +func (m *Http2ProtocolOptions) GetInitialConnectionWindowSize() *wrappers.UInt32Value { if m != nil { return m.InitialConnectionWindowSize } @@ -300,7 +423,104 @@ return false } -// [#not-implemented-hide:] +func (m *Http2ProtocolOptions) GetMaxOutboundFrames() *wrappers.UInt32Value { + if m != nil { + return m.MaxOutboundFrames + } + return nil +} + +func (m *Http2ProtocolOptions) GetMaxOutboundControlFrames() *wrappers.UInt32Value { + if m != nil { + return m.MaxOutboundControlFrames + } + return nil +} + +func (m *Http2ProtocolOptions) GetMaxConsecutiveInboundFramesWithEmptyPayload() *wrappers.UInt32Value { + if m != nil { + return m.MaxConsecutiveInboundFramesWithEmptyPayload + } + return nil +} + +func (m *Http2ProtocolOptions) GetMaxInboundPriorityFramesPerStream() *wrappers.UInt32Value { + if m != nil { + return m.MaxInboundPriorityFramesPerStream + } + return nil +} + +func (m *Http2ProtocolOptions) GetMaxInboundWindowUpdateFramesPerDataFrameSent() *wrappers.UInt32Value { + if m != nil { + return m.MaxInboundWindowUpdateFramesPerDataFrameSent + } + return nil +} + +func (m *Http2ProtocolOptions) GetStreamErrorOnInvalidHttpMessaging() bool { + if m != nil { + return m.StreamErrorOnInvalidHttpMessaging + } + return false +} + +func (m *Http2ProtocolOptions) GetCustomSettingsParameters() []*Http2ProtocolOptions_SettingsParameter { + if m != nil { + return m.CustomSettingsParameters + } + return nil +} + +type Http2ProtocolOptions_SettingsParameter struct { + Identifier *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"` + Value *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Http2ProtocolOptions_SettingsParameter) Reset() { + *m = Http2ProtocolOptions_SettingsParameter{} +} +func (m *Http2ProtocolOptions_SettingsParameter) String() string { return proto.CompactTextString(m) } +func (*Http2ProtocolOptions_SettingsParameter) ProtoMessage() {} +func (*Http2ProtocolOptions_SettingsParameter) Descriptor() ([]byte, []int) { + return fileDescriptor_d86476e078060b60, []int{4, 0} +} + +func (m *Http2ProtocolOptions_SettingsParameter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Http2ProtocolOptions_SettingsParameter.Unmarshal(m, b) +} +func (m *Http2ProtocolOptions_SettingsParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Http2ProtocolOptions_SettingsParameter.Marshal(b, m, deterministic) +} +func (m *Http2ProtocolOptions_SettingsParameter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Http2ProtocolOptions_SettingsParameter.Merge(m, src) +} +func (m *Http2ProtocolOptions_SettingsParameter) XXX_Size() int { + return xxx_messageInfo_Http2ProtocolOptions_SettingsParameter.Size(m) +} +func (m *Http2ProtocolOptions_SettingsParameter) XXX_DiscardUnknown() { + xxx_messageInfo_Http2ProtocolOptions_SettingsParameter.DiscardUnknown(m) +} + +var xxx_messageInfo_Http2ProtocolOptions_SettingsParameter proto.InternalMessageInfo + +func (m *Http2ProtocolOptions_SettingsParameter) GetIdentifier() *wrappers.UInt32Value { + if m != nil { + return m.Identifier + } + return nil +} + +func (m *Http2ProtocolOptions_SettingsParameter) GetValue() *wrappers.UInt32Value { + if m != nil { + return m.Value + } + return nil +} + type GrpcProtocolOptions struct { Http2ProtocolOptions *Http2ProtocolOptions `protobuf:"bytes,1,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -312,28 +532,20 @@ func (m *GrpcProtocolOptions) String() string { return proto.CompactTextString(m) } func (*GrpcProtocolOptions) ProtoMessage() {} func (*GrpcProtocolOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_d86476e078060b60, []int{4} + return fileDescriptor_d86476e078060b60, []int{5} } + func (m *GrpcProtocolOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcProtocolOptions.Unmarshal(m, b) } func (m *GrpcProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcProtocolOptions.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcProtocolOptions.Marshal(b, m, deterministic) } func (m *GrpcProtocolOptions) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcProtocolOptions.Merge(m, src) } func (m *GrpcProtocolOptions) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcProtocolOptions.Size(m) } func (m *GrpcProtocolOptions) XXX_DiscardUnknown() { xxx_messageInfo_GrpcProtocolOptions.DiscardUnknown(m) @@ -350,1270 +562,92 @@ func init() { proto.RegisterType((*TcpProtocolOptions)(nil), "envoy.api.v2.core.TcpProtocolOptions") + proto.RegisterType((*UpstreamHttpProtocolOptions)(nil), "envoy.api.v2.core.UpstreamHttpProtocolOptions") proto.RegisterType((*HttpProtocolOptions)(nil), "envoy.api.v2.core.HttpProtocolOptions") proto.RegisterType((*Http1ProtocolOptions)(nil), "envoy.api.v2.core.Http1ProtocolOptions") + proto.RegisterType((*Http1ProtocolOptions_HeaderKeyFormat)(nil), "envoy.api.v2.core.Http1ProtocolOptions.HeaderKeyFormat") + proto.RegisterType((*Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords)(nil), "envoy.api.v2.core.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords") proto.RegisterType((*Http2ProtocolOptions)(nil), "envoy.api.v2.core.Http2ProtocolOptions") + proto.RegisterType((*Http2ProtocolOptions_SettingsParameter)(nil), "envoy.api.v2.core.Http2ProtocolOptions.SettingsParameter") proto.RegisterType((*GrpcProtocolOptions)(nil), "envoy.api.v2.core.GrpcProtocolOptions") } func init() { proto.RegisterFile("envoy/api/v2/core/protocol.proto", fileDescriptor_d86476e078060b60) } var fileDescriptor_d86476e078060b60 = []byte{ - // 593 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcd, 0x6e, 0x13, 0x3f, - 0x10, 0x97, 0xff, 0xe9, 0xbf, 0x14, 0xf7, 0x83, 0x76, 0x1b, 0xb5, 0xa1, 0xa0, 0x34, 0x0a, 0x20, - 0xa2, 0x1e, 0x76, 0xdb, 0x54, 0xe2, 0xce, 0x16, 0x95, 0x72, 0x40, 0x54, 0xdb, 0x16, 0xc4, 0x01, - 0x59, 0x8e, 0xe3, 0x26, 0x16, 0xce, 0x8e, 0xe5, 0xf5, 0x26, 0x6d, 0x9f, 0x84, 0x47, 0xe0, 0x19, - 0x38, 0x20, 0x8e, 0x1c, 0x79, 0x03, 0x50, 0x6e, 0x9c, 0x79, 0x80, 0xa0, 0xb5, 0x9d, 0x08, 0x92, - 0x4a, 0x20, 0x4e, 0x19, 0xcd, 0xfc, 0xbe, 0x26, 0x3b, 0xc6, 0x35, 0x9e, 0xf6, 0xe1, 0x32, 0xa2, - 0x4a, 0x44, 0xfd, 0x66, 0xc4, 0x40, 0xf3, 0x48, 0x69, 0x30, 0xc0, 0x40, 0x86, 0xb6, 0x08, 0xd6, - 0x2c, 0x22, 0xa4, 0x4a, 0x84, 0xfd, 0x66, 0x58, 0x20, 0xb6, 0xaa, 0x1d, 0x80, 0x8e, 0xf4, 0xc8, - 0x56, 0x7e, 0x1e, 0xb5, 0x73, 0x4d, 0x8d, 0x80, 0xd4, 0x51, 0x66, 0xe7, 0x03, 0x4d, 0x95, 0xe2, - 0x3a, 0xf3, 0xf3, 0xcd, 0x3e, 0x95, 0xa2, 0x4d, 0x0d, 0x8f, 0xc6, 0x85, 0x1f, 0x94, 0x3b, 0xd0, - 0x01, 0x5b, 0x46, 0x45, 0xe5, 0xba, 0xf5, 0x32, 0x0e, 0x4e, 0x99, 0x3a, 0xf6, 0xb1, 0x5e, 0xa8, - 0xc2, 0x29, 0xab, 0xbf, 0xc6, 0xeb, 0x47, 0xc6, 0x4c, 0xb7, 0x83, 0x18, 0x2f, 0x89, 0xb6, 0xe4, - 0xc4, 0x88, 0x1e, 0x87, 0xdc, 0x54, 0x50, 0x0d, 0x35, 0x16, 0x9b, 0xb7, 0x43, 0x17, 0x29, 0x1c, - 0x47, 0x0a, 0x9f, 0xf8, 0xc8, 0xf1, 0xdc, 0xbb, 0xaf, 0xdb, 0x28, 0x59, 0x2c, 0x48, 0xa7, 0x8e, - 0x53, 0xff, 0x88, 0x70, 0xb9, 0xd0, 0xde, 0x9b, 0x16, 0x3f, 0xc2, 0x01, 0x95, 0x12, 0x06, 0x84, - 0xb6, 0x32, 0x90, 0xb9, 0xe1, 0x24, 0xd7, 0xd2, 0x5b, 0x6c, 0xcd, 0x58, 0xc4, 0x00, 0xf2, 0x25, - 0x95, 0x39, 0x4f, 0x56, 0x2d, 0xeb, 0xb1, 0x27, 0x9d, 0x69, 0x19, 0xdc, 0xc7, 0x2b, 0x94, 0x31, - 0xae, 0x0c, 0xe9, 0x1a, 0xa3, 0xc8, 0xde, 0x6e, 0xe5, 0xbf, 0x1a, 0x6a, 0x2c, 0x24, 0x4b, 0xae, - 0x6b, 0xdd, 0x77, 0x83, 0x47, 0xb8, 0xd2, 0xe6, 0xe7, 0x34, 0x97, 0x86, 0x74, 0x21, 0x33, 0xe4, - 0x1c, 0xf4, 0x04, 0x5f, 0xaa, 0xa1, 0xc6, 0xcd, 0xa4, 0xec, 0xe7, 0x47, 0x90, 0x99, 0x43, 0xd0, - 0x8e, 0x57, 0xff, 0x51, 0x72, 0x0b, 0x34, 0xa7, 0x17, 0x38, 0xc4, 0xab, 0x5d, 0x45, 0xd9, 0x5b, - 0x62, 0x68, 0x4b, 0x72, 0x92, 0x89, 0x2b, 0xee, 0xe3, 0xdf, 0x9d, 0x89, 0x7f, 0xf6, 0x2c, 0x35, - 0xfb, 0x4d, 0xb7, 0xc0, 0x8a, 0x65, 0x9d, 0x16, 0xa4, 0x13, 0x71, 0xc5, 0x03, 0x86, 0x37, 0x7a, - 0xf4, 0x82, 0x30, 0x48, 0x59, 0xae, 0x35, 0x4f, 0x0d, 0xc9, 0x8c, 0xe6, 0xb4, 0x97, 0xd9, 0x35, - 0xfe, 0xa0, 0x16, 0xdf, 0xfa, 0xf0, 0xfd, 0x53, 0x09, 0xef, 0x2c, 0x54, 0x46, 0xa3, 0xd1, 0xe8, - 0x46, 0x03, 0x25, 0xe5, 0x1e, 0xbd, 0x38, 0x98, 0x68, 0x9d, 0x38, 0xa9, 0x40, 0xe2, 0x2d, 0x91, - 0x0a, 0x23, 0xa8, 0xf4, 0xea, 0x64, 0x20, 0xd2, 0x36, 0x0c, 0x5c, 0xec, 0xd2, 0x5f, 0x18, 0xad, - 0x15, 0x46, 0x4b, 0x3b, 0xd8, 0x1b, 0x8d, 0x46, 0xa5, 0x64, 0xd3, 0x4b, 0x3a, 0x93, 0x57, 0x56, - 0xd0, 0xae, 0x64, 0x70, 0x75, 0xec, 0xc6, 0x20, 0x4d, 0x39, 0x2b, 0xfe, 0xb1, 0xdf, 0x1c, 0xe7, - 0xfe, 0xcd, 0xf1, 0x8e, 0x97, 0x3d, 0x98, 0xa8, 0xfe, 0xe2, 0x7a, 0x0f, 0x2f, 0xbb, 0x8b, 0xf2, - 0x9e, 0x95, 0xff, 0xfd, 0x19, 0x14, 0x4d, 0xcf, 0x08, 0x1e, 0xe0, 0x15, 0x07, 0xea, 0x71, 0x43, - 0xdb, 0xd4, 0xd0, 0xca, 0xbc, 0x45, 0x39, 0xea, 0x73, 0xdf, 0xac, 0x1b, 0xbc, 0xfe, 0x54, 0x2b, - 0x36, 0xfd, 0xcd, 0xdf, 0xe0, 0x8d, 0xe2, 0x66, 0x9a, 0x64, 0xfc, 0xb0, 0x09, 0xb8, 0x89, 0xff, - 0xf2, 0x0f, 0xc3, 0x99, 0x17, 0x1e, 0x5e, 0x77, 0x3c, 0x49, 0xb9, 0x7b, 0x4d, 0x37, 0x8e, 0xdf, - 0x0f, 0xab, 0xe8, 0xf3, 0xb0, 0x8a, 0xbe, 0x0c, 0xab, 0xe8, 0xdb, 0xb0, 0x8a, 0xf0, 0xb6, 0x00, - 0x27, 0xa9, 0x34, 0x5c, 0x5c, 0xce, 0xaa, 0xc7, 0xcb, 0x63, 0x0d, 0xfb, 0x7b, 0x8c, 0x5a, 0xf3, - 0x36, 0xda, 0xfe, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x9a, 0xd7, 0xd3, 0x8e, 0x04, 0x00, - 0x00, -} - -func (this *TcpProtocolOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*TcpProtocolOptions) - if !ok { - that2, ok := that.(TcpProtocolOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HttpProtocolOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HttpProtocolOptions) - if !ok { - that2, ok := that.(HttpProtocolOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.IdleTimeout != nil && that1.IdleTimeout != nil { - if *this.IdleTimeout != *that1.IdleTimeout { - return false - } - } else if this.IdleTimeout != nil { - return false - } else if that1.IdleTimeout != nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Http1ProtocolOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Http1ProtocolOptions) - if !ok { - that2, ok := that.(Http1ProtocolOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.AllowAbsoluteUrl.Equal(that1.AllowAbsoluteUrl) { - return false - } - if this.AcceptHttp_10 != that1.AcceptHttp_10 { - return false - } - if this.DefaultHostForHttp_10 != that1.DefaultHostForHttp_10 { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Http2ProtocolOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Http2ProtocolOptions) - if !ok { - that2, ok := that.(Http2ProtocolOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.HpackTableSize.Equal(that1.HpackTableSize) { - return false - } - if !this.MaxConcurrentStreams.Equal(that1.MaxConcurrentStreams) { - return false - } - if !this.InitialStreamWindowSize.Equal(that1.InitialStreamWindowSize) { - return false - } - if !this.InitialConnectionWindowSize.Equal(that1.InitialConnectionWindowSize) { - return false - } - if this.AllowConnect != that1.AllowConnect { - return false - } - if this.AllowMetadata != that1.AllowMetadata { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *GrpcProtocolOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*GrpcProtocolOptions) - if !ok { - that2, ok := that.(GrpcProtocolOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Http2ProtocolOptions.Equal(that1.Http2ProtocolOptions) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *TcpProtocolOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpProtocolOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpProtocolOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpProtocolOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.IdleTimeout != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintProtocol(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout))) - n1, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.IdleTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Http1ProtocolOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Http1ProtocolOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.AllowAbsoluteUrl != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintProtocol(dAtA, i, uint64(m.AllowAbsoluteUrl.Size())) - n2, err := m.AllowAbsoluteUrl.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.AcceptHttp_10 { - dAtA[i] = 0x10 - i++ - if m.AcceptHttp_10 { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.DefaultHostForHttp_10) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintProtocol(dAtA, i, uint64(len(m.DefaultHostForHttp_10))) - i += copy(dAtA[i:], m.DefaultHostForHttp_10) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Http2ProtocolOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Http2ProtocolOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.HpackTableSize != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintProtocol(dAtA, i, uint64(m.HpackTableSize.Size())) - n3, err := m.HpackTableSize.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.MaxConcurrentStreams != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintProtocol(dAtA, i, uint64(m.MaxConcurrentStreams.Size())) - n4, err := m.MaxConcurrentStreams.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.InitialStreamWindowSize != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintProtocol(dAtA, i, uint64(m.InitialStreamWindowSize.Size())) - n5, err := m.InitialStreamWindowSize.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.InitialConnectionWindowSize != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintProtocol(dAtA, i, uint64(m.InitialConnectionWindowSize.Size())) - n6, err := m.InitialConnectionWindowSize.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.AllowConnect { - dAtA[i] = 0x28 - i++ - if m.AllowConnect { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.AllowMetadata { - dAtA[i] = 0x30 - i++ - if m.AllowMetadata { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcProtocolOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcProtocolOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Http2ProtocolOptions != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintProtocol(dAtA, i, uint64(m.Http2ProtocolOptions.Size())) - n7, err := m.Http2ProtocolOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintProtocol(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *TcpProtocolOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpProtocolOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.IdleTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout) - n += 1 + l + sovProtocol(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Http1ProtocolOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.AllowAbsoluteUrl != nil { - l = m.AllowAbsoluteUrl.Size() - n += 1 + l + sovProtocol(uint64(l)) - } - if m.AcceptHttp_10 { - n += 2 - } - l = len(m.DefaultHostForHttp_10) - if l > 0 { - n += 1 + l + sovProtocol(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Http2ProtocolOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HpackTableSize != nil { - l = m.HpackTableSize.Size() - n += 1 + l + sovProtocol(uint64(l)) - } - if m.MaxConcurrentStreams != nil { - l = m.MaxConcurrentStreams.Size() - n += 1 + l + sovProtocol(uint64(l)) - } - if m.InitialStreamWindowSize != nil { - l = m.InitialStreamWindowSize.Size() - n += 1 + l + sovProtocol(uint64(l)) - } - if m.InitialConnectionWindowSize != nil { - l = m.InitialConnectionWindowSize.Size() - n += 1 + l + sovProtocol(uint64(l)) - } - if m.AllowConnect { - n += 2 - } - if m.AllowMetadata { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GrpcProtocolOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Http2ProtocolOptions != nil { - l = m.Http2ProtocolOptions.Size() - n += 1 + l + sovProtocol(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovProtocol(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozProtocol(x uint64) (n int) { - return sovProtocol(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *TcpProtocolOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TcpProtocolOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TcpProtocolOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipProtocol(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HttpProtocolOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpProtocolOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpProtocolOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IdleTimeout == nil { - m.IdleTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.IdleTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipProtocol(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Http1ProtocolOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Http1ProtocolOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Http1ProtocolOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowAbsoluteUrl", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AllowAbsoluteUrl == nil { - m.AllowAbsoluteUrl = &types.BoolValue{} - } - if err := m.AllowAbsoluteUrl.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AcceptHttp_10", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AcceptHttp_10 = bool(v != 0) - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultHostForHttp_10", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DefaultHostForHttp_10 = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipProtocol(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Http2ProtocolOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Http2ProtocolOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Http2ProtocolOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HpackTableSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HpackTableSize == nil { - m.HpackTableSize = &types.UInt32Value{} - } - if err := m.HpackTableSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxConcurrentStreams", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxConcurrentStreams == nil { - m.MaxConcurrentStreams = &types.UInt32Value{} - } - if err := m.MaxConcurrentStreams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialStreamWindowSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InitialStreamWindowSize == nil { - m.InitialStreamWindowSize = &types.UInt32Value{} - } - if err := m.InitialStreamWindowSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialConnectionWindowSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InitialConnectionWindowSize == nil { - m.InitialConnectionWindowSize = &types.UInt32Value{} - } - if err := m.InitialConnectionWindowSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowConnect", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AllowConnect = bool(v != 0) - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowMetadata", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.AllowMetadata = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipProtocol(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GrpcProtocolOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GrpcProtocolOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GrpcProtocolOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Http2ProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowProtocol - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthProtocol - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthProtocol - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Http2ProtocolOptions == nil { - m.Http2ProtocolOptions = &Http2ProtocolOptions{} - } - if err := m.Http2ProtocolOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipProtocol(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthProtocol - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipProtocol(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowProtocol - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowProtocol - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowProtocol - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthProtocol - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthProtocol - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowProtocol - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipProtocol(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthProtocol - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthProtocol = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowProtocol = fmt.Errorf("proto: integer overflow") -) + // 1176 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xbf, 0x73, 0x1b, 0x45, + 0x14, 0xe6, 0xfc, 0x3b, 0xeb, 0x1f, 0xb2, 0xd6, 0x22, 0xb9, 0x28, 0x10, 0x12, 0x03, 0x89, 0xc7, + 0x30, 0xa7, 0x44, 0x61, 0x60, 0x98, 0x49, 0xc3, 0x39, 0x71, 0xec, 0x61, 0x32, 0x51, 0xce, 0x76, + 0x52, 0x31, 0x3b, 0xeb, 0xbb, 0x95, 0xb4, 0xe4, 0x6e, 0xf7, 0x66, 0x77, 0x4f, 0xb2, 0x52, 0xb9, + 0xa0, 0xa2, 0x61, 0xe8, 0xf8, 0x03, 0x68, 0x28, 0x69, 0xa9, 0x29, 0x68, 0xf9, 0x57, 0xa8, 0x18, + 0x17, 0x88, 0xd9, 0x1f, 0xe7, 0x28, 0x52, 0x20, 0x4a, 0x2a, 0xeb, 0xde, 0x7b, 0xdf, 0xf7, 0xbd, + 0xfd, 0xee, 0xed, 0x3b, 0x83, 0x6b, 0x84, 0xf5, 0xf8, 0xa0, 0x81, 0x73, 0xda, 0xe8, 0x35, 0x1b, + 0x31, 0x17, 0xa4, 0x91, 0x0b, 0xae, 0x78, 0xcc, 0xd3, 0xc0, 0xfc, 0x80, 0x55, 0x53, 0x11, 0xe0, + 0x9c, 0x06, 0xbd, 0x66, 0xa0, 0x2b, 0xea, 0x57, 0x3b, 0x9c, 0x77, 0x52, 0x57, 0x79, 0x5c, 0xb4, + 0x1b, 0x49, 0x21, 0xb0, 0xa2, 0x9c, 0x59, 0xc8, 0x64, 0xbe, 0x2f, 0x70, 0x9e, 0x13, 0x21, 0xcb, + 0x7c, 0x91, 0xe4, 0xb8, 0x81, 0x19, 0xe3, 0xca, 0xc0, 0x64, 0x23, 0xa3, 0x1d, 0x81, 0x15, 0x71, + 0xf9, 0xf7, 0x27, 0xf2, 0x52, 0x61, 0x55, 0x94, 0xf0, 0x4b, 0x3d, 0x9c, 0xd2, 0x04, 0x2b, 0xd2, + 0x28, 0x7f, 0xd8, 0xc4, 0x66, 0x0d, 0xc0, 0xc3, 0x38, 0x6f, 0xb9, 0xfe, 0x1f, 0xe5, 0x06, 0xbb, + 0xd9, 0x05, 0x57, 0x8e, 0x72, 0xa9, 0x04, 0xc1, 0xd9, 0x9e, 0x52, 0xe3, 0x69, 0x78, 0x19, 0x2c, + 0xe1, 0x42, 0x71, 0x24, 0x19, 0xf5, 0xbd, 0x6b, 0xde, 0xd6, 0x52, 0xb4, 0xa8, 0x9f, 0x0f, 0x18, + 0x85, 0x01, 0xd8, 0xb0, 0x29, 0xcc, 0x90, 0x93, 0xa2, 0x9c, 0xf9, 0x33, 0xa6, 0xaa, 0x6a, 0xaa, + 0x30, 0x7b, 0x72, 0x9e, 0xd8, 0xfc, 0x7d, 0x06, 0x6c, 0xbc, 0x4a, 0xe2, 0x2e, 0x58, 0xa1, 0x49, + 0x4a, 0x90, 0xa2, 0x19, 0xe1, 0x85, 0x32, 0x32, 0xcb, 0xcd, 0xcb, 0x81, 0xb5, 0x29, 0x28, 0x6d, + 0x0a, 0xee, 0x39, 0x1b, 0xa3, 0x65, 0x5d, 0x7e, 0x68, 0xab, 0xe1, 0x63, 0x70, 0x29, 0xc3, 0x27, + 0x28, 0xe6, 0x8c, 0x91, 0x58, 0xa7, 0x51, 0x69, 0xb7, 0x3f, 0xfb, 0x3a, 0xa2, 0x77, 0x33, 0x7c, + 0xb2, 0x73, 0x0e, 0x2c, 0xc3, 0xf0, 0x31, 0xa8, 0x6a, 0xca, 0x2e, 0xc1, 0x09, 0x11, 0x12, 0xc5, + 0xbc, 0x60, 0xca, 0x1c, 0x6b, 0xb9, 0xf9, 0xde, 0x04, 0xd9, 0xd1, 0x3e, 0x53, 0x77, 0x9a, 0x4f, + 0x70, 0x5a, 0x90, 0x70, 0xf1, 0x2c, 0x9c, 0xdb, 0x9e, 0xd9, 0xf2, 0xa2, 0x4a, 0x86, 0x4f, 0xf6, + 0x2c, 0x7c, 0x47, 0xa3, 0xe1, 0x3e, 0xd8, 0xd0, 0x94, 0xd6, 0xe7, 0x17, 0x1d, 0xce, 0xbd, 0xae, + 0x43, 0xdd, 0xc8, 0x81, 0x01, 0x95, 0xa1, 0xcd, 0xd3, 0x39, 0x50, 0xd3, 0x36, 0xde, 0x1e, 0xf7, + 0x71, 0x0f, 0x40, 0x9c, 0xa6, 0xbc, 0x8f, 0xf0, 0xb1, 0xe4, 0x69, 0xa1, 0x08, 0x2a, 0x44, 0xea, + 0xdc, 0xac, 0x4f, 0x48, 0x84, 0x9c, 0xa7, 0xa6, 0xeb, 0x68, 0xdd, 0xa0, 0xbe, 0x72, 0xa0, 0x23, + 0x91, 0xc2, 0x8f, 0xc0, 0x1a, 0x8e, 0x63, 0x92, 0x2b, 0xd4, 0x55, 0x2a, 0x47, 0xb7, 0x6f, 0xb9, + 0x97, 0xba, 0x62, 0xa3, 0x46, 0xfd, 0x16, 0xfc, 0x1c, 0xf8, 0x09, 0x69, 0xe3, 0x22, 0x55, 0xa8, + 0xcb, 0xa5, 0x42, 0x6d, 0x2e, 0xce, 0xeb, 0xb5, 0xf5, 0x17, 0xa2, 0x9a, 0xcb, 0xef, 0x71, 0xa9, + 0x76, 0xb9, 0x70, 0xb8, 0x18, 0x54, 0xad, 0xb5, 0xe8, 0x19, 0x19, 0x68, 0x54, 0x86, 0x95, 0x73, + 0xe2, 0x8b, 0x60, 0xe2, 0x3a, 0x05, 0xaf, 0x3a, 0x6b, 0x60, 0xcd, 0xfd, 0x9a, 0x0c, 0x76, 0x0d, + 0x3c, 0xaa, 0x74, 0x5f, 0x0e, 0xc0, 0x9b, 0xa0, 0x42, 0x18, 0x3e, 0xd6, 0x63, 0x25, 0x30, 0x4d, + 0x89, 0x90, 0xfe, 0xbc, 0x39, 0xc3, 0x9a, 0x0d, 0x1f, 0xba, 0x68, 0xfd, 0x57, 0x0f, 0x54, 0xc6, + 0xd8, 0x60, 0x01, 0xaa, 0xb9, 0xe0, 0x39, 0x11, 0x28, 0xc6, 0x92, 0xa0, 0x3e, 0x17, 0x89, 0x74, + 0x46, 0x3e, 0x78, 0xcb, 0x0e, 0x83, 0x96, 0x21, 0xdc, 0xc1, 0x92, 0x3c, 0xd5, 0x74, 0x7b, 0xef, + 0x44, 0x95, 0xfc, 0xe5, 0x50, 0xbd, 0x0a, 0x2a, 0x63, 0x55, 0x61, 0x0d, 0xac, 0x3a, 0xaf, 0xac, + 0x4f, 0x70, 0xf6, 0xef, 0xd0, 0xdb, 0xfc, 0x65, 0xd9, 0x8e, 0x40, 0x73, 0x7c, 0x04, 0x76, 0xc1, + 0x7a, 0x37, 0xc7, 0xf1, 0x33, 0xa4, 0xcc, 0xd1, 0x25, 0x7d, 0x4e, 0x5c, 0xdf, 0xff, 0x3b, 0xb8, + 0xd1, 0x9a, 0x41, 0x1d, 0x6a, 0xd0, 0x01, 0x7d, 0x4e, 0x20, 0x06, 0x17, 0xdd, 0xa5, 0x8a, 0x0b, + 0x21, 0x08, 0x53, 0x6e, 0x72, 0xe5, 0x54, 0xd7, 0x60, 0xf5, 0x2c, 0x04, 0xdb, 0x4b, 0xfe, 0x70, + 0x38, 0x1c, 0x2e, 0x6e, 0x79, 0x51, 0xcd, 0xde, 0x32, 0xc7, 0x64, 0xa7, 0x59, 0xc2, 0x6f, 0x41, + 0x9d, 0x32, 0xaa, 0x28, 0x4e, 0xcb, 0x5b, 0xd1, 0xa7, 0x2c, 0xe1, 0x7d, 0xdb, 0xf4, 0xec, 0x14, + 0x32, 0x95, 0xb3, 0x70, 0x65, 0x1b, 0x38, 0x99, 0xe1, 0x70, 0x36, 0xba, 0xe4, 0x08, 0xad, 0xc4, + 0x53, 0x43, 0x67, 0x8e, 0x23, 0xc0, 0xd5, 0x52, 0x6b, 0x64, 0x4f, 0x8c, 0xea, 0xcd, 0xbd, 0x8d, + 0xde, 0x15, 0x47, 0xfa, 0x62, 0x85, 0x8c, 0x68, 0x7e, 0x08, 0x56, 0xed, 0x6d, 0x74, 0x8a, 0x6e, + 0xfc, 0x56, 0x4c, 0xd0, 0x21, 0xe0, 0xc7, 0x60, 0xcd, 0x16, 0x65, 0x44, 0xe1, 0x04, 0x2b, 0xec, + 0x2f, 0x98, 0x2a, 0x0b, 0x7d, 0xe8, 0x82, 0xf0, 0xc8, 0x6e, 0x0f, 0x5e, 0xa8, 0x63, 0x5e, 0xb0, + 0x04, 0xb5, 0x05, 0xce, 0x88, 0xf4, 0x17, 0xdf, 0x64, 0x25, 0xe9, 0x4d, 0xf2, 0xc8, 0x11, 0xec, + 0x1a, 0x3c, 0x4c, 0xc0, 0x95, 0x97, 0x68, 0x63, 0xce, 0x94, 0xe0, 0x69, 0x49, 0xbf, 0xf4, 0x26, + 0xf4, 0xfe, 0x08, 0xfd, 0x8e, 0xe5, 0x71, 0x2a, 0xdf, 0x79, 0xe0, 0xb6, 0x1b, 0x26, 0x49, 0xe2, + 0x42, 0xd1, 0x1e, 0x41, 0x94, 0x8d, 0x1e, 0x04, 0xf5, 0xa9, 0xea, 0x22, 0x92, 0xe5, 0x6a, 0x80, + 0x72, 0x3c, 0x48, 0x39, 0x4e, 0xfc, 0x0b, 0x53, 0x4c, 0xed, 0x27, 0x76, 0xb0, 0x4a, 0xd6, 0x7d, + 0x36, 0x72, 0xb8, 0xa7, 0x54, 0x75, 0xef, 0x6b, 0xc6, 0x96, 0x25, 0x84, 0x1c, 0xdc, 0xd0, 0x5d, + 0x94, 0xca, 0xb9, 0xa0, 0x5c, 0x50, 0x35, 0x28, 0x5b, 0xd0, 0x97, 0xdd, 0xce, 0xa1, 0x0f, 0xa6, + 0x90, 0xbe, 0x9e, 0xe1, 0x13, 0xa7, 0xd7, 0x72, 0x4c, 0x56, 0xb7, 0x45, 0x84, 0x1d, 0x3f, 0xf8, + 0xa3, 0x07, 0x3e, 0x1b, 0x55, 0x74, 0xe3, 0x56, 0xe4, 0xfa, 0x93, 0x3c, 0x2a, 0xab, 0x5f, 0xb1, + 0x7d, 0x46, 0x92, 0x30, 0xe5, 0x2f, 0xbf, 0x89, 0xef, 0x9f, 0xbe, 0x68, 0xc4, 0x0e, 0xdf, 0x91, + 0xe1, 0x3f, 0x6f, 0xe6, 0x1e, 0x56, 0xd8, 0x3c, 0x1c, 0x10, 0xa6, 0x3f, 0x96, 0x37, 0xdc, 0x65, + 0x23, 0x42, 0x70, 0x81, 0x38, 0x43, 0x94, 0x99, 0x6f, 0xb7, 0xdd, 0xdc, 0x19, 0x91, 0x12, 0x77, + 0x28, 0xeb, 0xf8, 0x2b, 0x66, 0x0e, 0xaf, 0xdb, 0xea, 0xfb, 0xba, 0xf8, 0x11, 0xdb, 0xb7, 0xa5, + 0x7a, 0xf3, 0x3c, 0x2c, 0x0b, 0x61, 0x1f, 0xd4, 0xe3, 0x42, 0x2a, 0x9e, 0x21, 0x49, 0x94, 0xa2, + 0xac, 0x23, 0x51, 0x8e, 0xb5, 0xa0, 0xd2, 0x3b, 0x77, 0xf5, 0xda, 0xec, 0xd6, 0x72, 0xf3, 0xcb, + 0xff, 0x58, 0x9a, 0xe3, 0xfb, 0x2b, 0x38, 0x70, 0x14, 0xad, 0x92, 0x21, 0xf2, 0x2d, 0xf9, 0x44, + 0x42, 0xd6, 0x7f, 0xf6, 0x40, 0x75, 0x22, 0x0c, 0x1f, 0x03, 0x40, 0x13, 0xc2, 0x14, 0x6d, 0x53, + 0x22, 0xa6, 0xd9, 0x7d, 0xe1, 0xc6, 0x59, 0xb8, 0xb4, 0xbd, 0xe0, 0x9f, 0x9e, 0xce, 0x6d, 0x79, + 0x67, 0xe1, 0xfc, 0xf7, 0xde, 0xcc, 0xba, 0x17, 0x8d, 0x90, 0xc0, 0xbb, 0x60, 0xbe, 0xa7, 0x2b, + 0xa7, 0xda, 0x7d, 0x4b, 0xe7, 0x14, 0x16, 0xb4, 0xa9, 0xc0, 0xc6, 0x03, 0x91, 0xc7, 0xe3, 0x9b, + 0xfa, 0x1b, 0x70, 0x51, 0x3b, 0xde, 0x44, 0xe5, 0xff, 0x93, 0x88, 0xdb, 0x8c, 0xeb, 0xf9, 0xe6, + 0x94, 0x96, 0x45, 0xb5, 0xee, 0x2b, 0xa2, 0xe1, 0x93, 0xbf, 0x7e, 0xfa, 0xe7, 0x87, 0xf9, 0x8b, + 0xb0, 0x66, 0x59, 0x62, 0xce, 0xda, 0xb4, 0x63, 0x59, 0x7a, 0x77, 0x7e, 0x3b, 0xfd, 0xe3, 0xcf, + 0x85, 0x99, 0x75, 0x0f, 0x7c, 0x40, 0xb9, 0x95, 0xc9, 0x05, 0x3f, 0x19, 0x4c, 0x2a, 0x86, 0xab, + 0x25, 0xaf, 0xf9, 0xdb, 0xf2, 0x8e, 0x17, 0x4c, 0xbb, 0x77, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, + 0x33, 0xd0, 0xb3, 0x67, 0x19, 0x0b, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/protocol.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/core/protocol.proto -package core +package envoy_api_v2_core import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _protocol_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on TcpProtocolOptions with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -100,6 +103,78 @@ ErrorName() string } = TcpProtocolOptionsValidationError{} +// Validate checks the field values on UpstreamHttpProtocolOptions with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *UpstreamHttpProtocolOptions) Validate() error { + if m == nil { + return nil + } + + // no validation rules for AutoSni + + // no validation rules for AutoSanValidation + + return nil +} + +// UpstreamHttpProtocolOptionsValidationError is the validation error returned +// by UpstreamHttpProtocolOptions.Validate if the designated constraints +// aren't met. +type UpstreamHttpProtocolOptionsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpstreamHttpProtocolOptionsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpstreamHttpProtocolOptionsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpstreamHttpProtocolOptionsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpstreamHttpProtocolOptionsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpstreamHttpProtocolOptionsValidationError) ErrorName() string { + return "UpstreamHttpProtocolOptionsValidationError" +} + +// Error satisfies the builtin error interface +func (e UpstreamHttpProtocolOptionsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUpstreamHttpProtocolOptions.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpstreamHttpProtocolOptionsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpstreamHttpProtocolOptionsValidationError{} + // Validate checks the field values on HttpProtocolOptions with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -108,17 +183,43 @@ return nil } - { - tmp := m.GetIdleTimeout() + if v, ok := interface{}(m.GetIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpProtocolOptionsValidationError{ + field: "IdleTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMaxConnectionDuration()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpProtocolOptionsValidationError{ + field: "MaxConnectionDuration", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if wrapper := m.GetMaxHeadersCount(); wrapper != nil { - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if wrapper.GetValue() < 1 { + return HttpProtocolOptionsValidationError{ + field: "MaxHeadersCount", + reason: "value must be greater than or equal to 1", + } + } - if err := v.Validate(); err != nil { - return HttpProtocolOptionsValidationError{ - field: "IdleTimeout", - reason: "embedded message failed validation", - cause: err, - } + } + + if v, ok := interface{}(m.GetMaxStreamDuration()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpProtocolOptionsValidationError{ + field: "MaxStreamDuration", + reason: "embedded message failed validation", + cause: err, } } } @@ -190,17 +291,12 @@ return nil } - { - tmp := m.GetAllowAbsoluteUrl() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Http1ProtocolOptionsValidationError{ - field: "AllowAbsoluteUrl", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAllowAbsoluteUrl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http1ProtocolOptionsValidationError{ + field: "AllowAbsoluteUrl", + reason: "embedded message failed validation", + cause: err, } } } @@ -209,6 +305,18 @@ // no validation rules for DefaultHostForHttp_10 + if v, ok := interface{}(m.GetHeaderKeyFormat()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http1ProtocolOptionsValidationError{ + field: "HeaderKeyFormat", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for EnableTrailers + return nil } @@ -276,17 +384,12 @@ return nil } - { - tmp := m.GetHpackTableSize() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Http2ProtocolOptionsValidationError{ - field: "HpackTableSize", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHpackTableSize()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http2ProtocolOptionsValidationError{ + field: "HpackTableSize", + reason: "embedded message failed validation", + cause: err, } } } @@ -328,6 +431,76 @@ // no validation rules for AllowMetadata + if wrapper := m.GetMaxOutboundFrames(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return Http2ProtocolOptionsValidationError{ + field: "MaxOutboundFrames", + reason: "value must be greater than or equal to 1", + } + } + + } + + if wrapper := m.GetMaxOutboundControlFrames(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return Http2ProtocolOptionsValidationError{ + field: "MaxOutboundControlFrames", + reason: "value must be greater than or equal to 1", + } + } + + } + + if v, ok := interface{}(m.GetMaxConsecutiveInboundFramesWithEmptyPayload()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http2ProtocolOptionsValidationError{ + field: "MaxConsecutiveInboundFramesWithEmptyPayload", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMaxInboundPriorityFramesPerStream()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http2ProtocolOptionsValidationError{ + field: "MaxInboundPriorityFramesPerStream", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if wrapper := m.GetMaxInboundWindowUpdateFramesPerDataFrameSent(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return Http2ProtocolOptionsValidationError{ + field: "MaxInboundWindowUpdateFramesPerDataFrameSent", + reason: "value must be greater than or equal to 1", + } + } + + } + + // no validation rules for StreamErrorOnInvalidHttpMessaging + + for idx, item := range m.GetCustomSettingsParameters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http2ProtocolOptionsValidationError{ + field: fmt.Sprintf("CustomSettingsParameters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + return nil } @@ -395,17 +568,12 @@ return nil } - { - tmp := m.GetHttp2ProtocolOptions() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return GrpcProtocolOptionsValidationError{ - field: "Http2ProtocolOptions", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHttp2ProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GrpcProtocolOptionsValidationError{ + field: "Http2ProtocolOptions", + reason: "embedded message failed validation", + cause: err, } } } @@ -468,3 +636,270 @@ Cause() error ErrorName() string } = GrpcProtocolOptionsValidationError{} + +// Validate checks the field values on Http1ProtocolOptions_HeaderKeyFormat +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *Http1ProtocolOptions_HeaderKeyFormat) Validate() error { + if m == nil { + return nil + } + + switch m.HeaderFormat.(type) { + + case *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_: + + if v, ok := interface{}(m.GetProperCaseWords()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http1ProtocolOptions_HeaderKeyFormatValidationError{ + field: "ProperCaseWords", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return Http1ProtocolOptions_HeaderKeyFormatValidationError{ + field: "HeaderFormat", + reason: "value is required", + } + + } + + return nil +} + +// Http1ProtocolOptions_HeaderKeyFormatValidationError is the validation error +// returned by Http1ProtocolOptions_HeaderKeyFormat.Validate if the designated +// constraints aren't met. +type Http1ProtocolOptions_HeaderKeyFormatValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Http1ProtocolOptions_HeaderKeyFormatValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Http1ProtocolOptions_HeaderKeyFormatValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Http1ProtocolOptions_HeaderKeyFormatValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Http1ProtocolOptions_HeaderKeyFormatValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Http1ProtocolOptions_HeaderKeyFormatValidationError) ErrorName() string { + return "Http1ProtocolOptions_HeaderKeyFormatValidationError" +} + +// Error satisfies the builtin error interface +func (e Http1ProtocolOptions_HeaderKeyFormatValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttp1ProtocolOptions_HeaderKeyFormat.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Http1ProtocolOptions_HeaderKeyFormatValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Http1ProtocolOptions_HeaderKeyFormatValidationError{} + +// Validate checks the field values on +// Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError is the +// validation error returned by +// Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.Validate if the +// designated constraints aren't met. +type Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError) Cause() error { + return e.cause +} + +// Key function returns key value. +func (e Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError) ErrorName() string { + return "Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError" +} + +// Error satisfies the builtin error interface +func (e Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttp1ProtocolOptions_HeaderKeyFormat_ProperCaseWords.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWordsValidationError{} + +// Validate checks the field values on Http2ProtocolOptions_SettingsParameter +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *Http2ProtocolOptions_SettingsParameter) Validate() error { + if m == nil { + return nil + } + + if wrapper := m.GetIdentifier(); wrapper != nil { + + if val := wrapper.GetValue(); val < 1 || val > 65536 { + return Http2ProtocolOptions_SettingsParameterValidationError{ + field: "Identifier", + reason: "value must be inside range [1, 65536]", + } + } + + } else { + return Http2ProtocolOptions_SettingsParameterValidationError{ + field: "Identifier", + reason: "value is required and must not be nil.", + } + } + + if m.GetValue() == nil { + return Http2ProtocolOptions_SettingsParameterValidationError{ + field: "Value", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Http2ProtocolOptions_SettingsParameterValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// Http2ProtocolOptions_SettingsParameterValidationError is the validation +// error returned by Http2ProtocolOptions_SettingsParameter.Validate if the +// designated constraints aren't met. +type Http2ProtocolOptions_SettingsParameterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Http2ProtocolOptions_SettingsParameterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Http2ProtocolOptions_SettingsParameterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Http2ProtocolOptions_SettingsParameterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Http2ProtocolOptions_SettingsParameterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Http2ProtocolOptions_SettingsParameterValidationError) ErrorName() string { + return "Http2ProtocolOptions_SettingsParameterValidationError" +} + +// Error satisfies the builtin error interface +func (e Http2ProtocolOptions_SettingsParameterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttp2ProtocolOptions_SettingsParameter.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Http2ProtocolOptions_SettingsParameterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Http2ProtocolOptions_SettingsParameterValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,201 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/core/socket_option.proto + +package envoy_api_v2_core + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type SocketOption_SocketState int32 + +const ( + SocketOption_STATE_PREBIND SocketOption_SocketState = 0 + SocketOption_STATE_BOUND SocketOption_SocketState = 1 + SocketOption_STATE_LISTENING SocketOption_SocketState = 2 +) + +var SocketOption_SocketState_name = map[int32]string{ + 0: "STATE_PREBIND", + 1: "STATE_BOUND", + 2: "STATE_LISTENING", +} + +var SocketOption_SocketState_value = map[string]int32{ + "STATE_PREBIND": 0, + "STATE_BOUND": 1, + "STATE_LISTENING": 2, +} + +func (x SocketOption_SocketState) String() string { + return proto.EnumName(SocketOption_SocketState_name, int32(x)) +} + +func (SocketOption_SocketState) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_188daec7f82db149, []int{0, 0} +} + +type SocketOption struct { + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Level int64 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + Name int64 `protobuf:"varint,3,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to Value: + // *SocketOption_IntValue + // *SocketOption_BufValue + Value isSocketOption_Value `protobuf_oneof:"value"` + State SocketOption_SocketState `protobuf:"varint,6,opt,name=state,proto3,enum=envoy.api.v2.core.SocketOption_SocketState" json:"state,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SocketOption) Reset() { *m = SocketOption{} } +func (m *SocketOption) String() string { return proto.CompactTextString(m) } +func (*SocketOption) ProtoMessage() {} +func (*SocketOption) Descriptor() ([]byte, []int) { + return fileDescriptor_188daec7f82db149, []int{0} +} + +func (m *SocketOption) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SocketOption.Unmarshal(m, b) +} +func (m *SocketOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SocketOption.Marshal(b, m, deterministic) +} +func (m *SocketOption) XXX_Merge(src proto.Message) { + xxx_messageInfo_SocketOption.Merge(m, src) +} +func (m *SocketOption) XXX_Size() int { + return xxx_messageInfo_SocketOption.Size(m) +} +func (m *SocketOption) XXX_DiscardUnknown() { + xxx_messageInfo_SocketOption.DiscardUnknown(m) +} + +var xxx_messageInfo_SocketOption proto.InternalMessageInfo + +func (m *SocketOption) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *SocketOption) GetLevel() int64 { + if m != nil { + return m.Level + } + return 0 +} + +func (m *SocketOption) GetName() int64 { + if m != nil { + return m.Name + } + return 0 +} + +type isSocketOption_Value interface { + isSocketOption_Value() +} + +type SocketOption_IntValue struct { + IntValue int64 `protobuf:"varint,4,opt,name=int_value,json=intValue,proto3,oneof"` +} + +type SocketOption_BufValue struct { + BufValue []byte `protobuf:"bytes,5,opt,name=buf_value,json=bufValue,proto3,oneof"` +} + +func (*SocketOption_IntValue) isSocketOption_Value() {} + +func (*SocketOption_BufValue) isSocketOption_Value() {} + +func (m *SocketOption) GetValue() isSocketOption_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *SocketOption) GetIntValue() int64 { + if x, ok := m.GetValue().(*SocketOption_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (m *SocketOption) GetBufValue() []byte { + if x, ok := m.GetValue().(*SocketOption_BufValue); ok { + return x.BufValue + } + return nil +} + +func (m *SocketOption) GetState() SocketOption_SocketState { + if m != nil { + return m.State + } + return SocketOption_STATE_PREBIND +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*SocketOption) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*SocketOption_IntValue)(nil), + (*SocketOption_BufValue)(nil), + } +} + +func init() { + proto.RegisterEnum("envoy.api.v2.core.SocketOption_SocketState", SocketOption_SocketState_name, SocketOption_SocketState_value) + proto.RegisterType((*SocketOption)(nil), "envoy.api.v2.core.SocketOption") +} + +func init() { + proto.RegisterFile("envoy/api/v2/core/socket_option.proto", fileDescriptor_188daec7f82db149) +} + +var fileDescriptor_188daec7f82db149 = []byte{ + // 392 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xd1, 0xca, 0xd3, 0x30, + 0x14, 0xc7, 0xbf, 0x74, 0x5f, 0xc7, 0xb7, 0x6c, 0xba, 0x2e, 0x0e, 0x2d, 0x83, 0x69, 0x19, 0x08, + 0x05, 0xa1, 0x85, 0xed, 0x09, 0x0c, 0x9b, 0x3a, 0x94, 0x6e, 0xb4, 0xd3, 0x0b, 0x6f, 0x46, 0xd6, + 0x65, 0x23, 0xd8, 0x25, 0xa5, 0x4d, 0x8b, 0xbb, 0x13, 0x5f, 0xc0, 0x5b, 0x9f, 0x45, 0x5f, 0xc0, + 0x5b, 0x5f, 0xc5, 0x2b, 0xf1, 0x42, 0x24, 0xc9, 0x84, 0xc2, 0xee, 0x72, 0xfe, 0xbf, 0x73, 0xca, + 0xef, 0xf4, 0xc0, 0xa7, 0x94, 0xd7, 0xe2, 0x1c, 0x92, 0x9c, 0x85, 0xf5, 0x34, 0x4c, 0x45, 0x41, + 0xc3, 0x52, 0xa4, 0x1f, 0xa8, 0xdc, 0x8a, 0x5c, 0x32, 0xc1, 0x83, 0xbc, 0x10, 0x52, 0xa0, 0x81, + 0x6e, 0x0b, 0x48, 0xce, 0x82, 0x7a, 0x1a, 0xa8, 0xb6, 0xd1, 0xe3, 0x6a, 0x9f, 0x93, 0x90, 0x70, + 0x2e, 0x24, 0x51, 0x9d, 0x65, 0x78, 0x62, 0xc7, 0x82, 0x48, 0x6a, 0x46, 0x46, 0xe3, 0x2b, 0x5e, + 0x4a, 0x22, 0xab, 0xf2, 0x82, 0x1f, 0xd5, 0x24, 0x63, 0x7b, 0x22, 0x69, 0xf8, 0xff, 0x61, 0xc0, + 0xe4, 0xbb, 0x05, 0x7b, 0x89, 0x56, 0x58, 0x69, 0x03, 0xe4, 0xc1, 0xee, 0x9e, 0x96, 0x69, 0xc1, + 0x74, 0xe9, 0x02, 0x0f, 0xf8, 0x9d, 0xb8, 0x19, 0xa1, 0x21, 0xb4, 0x33, 0x5a, 0xd3, 0xcc, 0xb5, + 0x3c, 0xe0, 0xb7, 0x62, 0x53, 0x20, 0x04, 0x6f, 0x39, 0x39, 0x51, 0xb7, 0xa5, 0x43, 0xfd, 0x46, + 0x63, 0xd8, 0x61, 0x5c, 0x6e, 0x6b, 0x92, 0x55, 0xd4, 0xbd, 0x55, 0xe0, 0xd5, 0x4d, 0x7c, 0xc7, + 0xb8, 0x7c, 0xa7, 0x12, 0x85, 0x77, 0xd5, 0xe1, 0x82, 0x6d, 0x0f, 0xf8, 0x3d, 0x85, 0x77, 0xd5, + 0xc1, 0xe0, 0xd7, 0xd0, 0x56, 0x3b, 0x50, 0xb7, 0xed, 0x01, 0xff, 0xfe, 0xf4, 0x59, 0x70, 0xf5, + 0x57, 0x82, 0xa6, 0xf9, 0xa5, 0x48, 0xd4, 0x08, 0xbe, 0xfb, 0x83, 0xed, 0xcf, 0xc0, 0x72, 0x40, + 0x6c, 0xbe, 0x31, 0x79, 0x01, 0xbb, 0x0d, 0x8e, 0x06, 0xf0, 0x5e, 0xb2, 0x79, 0xbe, 0x59, 0x6c, + 0xd7, 0xf1, 0x02, 0x2f, 0xa3, 0xb9, 0x73, 0x83, 0xfa, 0xb0, 0x6b, 0x22, 0xbc, 0x7a, 0x1b, 0xcd, + 0x1d, 0x80, 0x1e, 0xc0, 0xbe, 0x09, 0xde, 0x2c, 0x93, 0xcd, 0x22, 0x5a, 0x46, 0x2f, 0x1d, 0x0b, + 0xf7, 0xa0, 0xad, 0x7d, 0x51, 0xeb, 0x37, 0x06, 0xf8, 0xfd, 0xaf, 0xaf, 0x7f, 0xbf, 0xd8, 0x0f, + 0xd1, 0xd0, 0xa8, 0xa5, 0x82, 0x1f, 0xd8, 0xd1, 0xa8, 0xd5, 0xb3, 0x6f, 0x9f, 0x7e, 0xfc, 0x6c, + 0x5b, 0x0e, 0x80, 0x4f, 0x98, 0x30, 0xee, 0x79, 0x21, 0x3e, 0x9e, 0xaf, 0xd7, 0xc0, 0x83, 0xe6, + 0x1e, 0x6b, 0x75, 0x97, 0x35, 0xd8, 0xb5, 0xf5, 0x81, 0x66, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, + 0x90, 0xf7, 0x3c, 0x3d, 0x34, 0x02, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/core/socket_option.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,131 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/core/socket_option.proto + +package envoy_api_v2_core + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _socket_option_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on SocketOption with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *SocketOption) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Description + + // no validation rules for Level + + // no validation rules for Name + + if _, ok := SocketOption_SocketState_name[int32(m.GetState())]; !ok { + return SocketOptionValidationError{ + field: "State", + reason: "value must be one of the defined enum values", + } + } + + switch m.Value.(type) { + + case *SocketOption_IntValue: + // no validation rules for IntValue + + case *SocketOption_BufValue: + // no validation rules for BufValue + + default: + return SocketOptionValidationError{ + field: "Value", + reason: "value is required", + } + + } + + return nil +} + +// SocketOptionValidationError is the validation error returned by +// SocketOption.Validate if the designated constraints aren't met. +type SocketOptionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SocketOptionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SocketOptionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SocketOptionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SocketOptionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SocketOptionValidationError) ErrorName() string { return "SocketOptionValidationError" } + +// Error satisfies the builtin error interface +func (e SocketOptionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSocketOption.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SocketOptionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SocketOptionValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,16 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/discovery.proto -package v2 +package envoy_api_v2 import ( - bytes "bytes" fmt "fmt" - io "io" - math "math" - - rpc "github.com/gogo/googleapis/google/rpc" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + status "google.golang.org/genproto/googleapis/rpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -27,46 +22,18 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// A DiscoveryRequest requests a set of versioned resources of the same type for -// a given Envoy node on some API. type DiscoveryRequest struct { - // The version_info provided in the request messages will be the version_info - // received with the most recent successfully processed response or empty on - // the first request. It is expected that no new request is sent after a - // response is received until the Envoy instance is ready to ACK/NACK the new - // configuration. ACK/NACK takes place by returning the new API config version - // as applied or the previous API config version respectively. Each type_url - // (see below) has an independent version associated with it. - VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"` - // The node making the request. - Node *core.Node `protobuf:"bytes,2,opt,name=node,proto3" json:"node,omitempty"` - // List of resources to subscribe to, e.g. list of cluster names or a route - // configuration name. If this is empty, all resources for the API are - // returned. LDS/CDS expect empty resource_names, since this is global - // discovery for the Envoy instance. The LDS and CDS responses will then imply - // a number of resources that need to be fetched via EDS/RDS, which will be - // explicitly enumerated in resource_names. - ResourceNames []string `protobuf:"bytes,3,rep,name=resource_names,json=resourceNames,proto3" json:"resource_names,omitempty"` - // Type of the resource that is being requested, e.g. - // "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This is implicit - // in requests made via singleton xDS APIs such as CDS, LDS, etc. but is - // required for ADS. - TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` - // nonce corresponding to DiscoveryResponse being ACK/NACKed. See above - // discussion on version_info and the DiscoveryResponse nonce comment. This - // may be empty if no nonce is available, e.g. at startup or for non-stream - // xDS implementations. - ResponseNonce string `protobuf:"bytes,5,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"` - // This is populated when the previous :ref:`DiscoveryResponse ` - // failed to update configuration. The *message* field in *error_details* provides the Envoy - // internal exception related to the failure. It is only intended for consumption during manual - // debugging, the string provided is not guaranteed to be stable across Envoy versions. - ErrorDetail *rpc.Status `protobuf:"bytes,6,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"` + Node *core.Node `protobuf:"bytes,2,opt,name=node,proto3" json:"node,omitempty"` + ResourceNames []string `protobuf:"bytes,3,rep,name=resource_names,json=resourceNames,proto3" json:"resource_names,omitempty"` + TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` + ResponseNonce string `protobuf:"bytes,5,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"` + ErrorDetail *status.Status `protobuf:"bytes,6,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DiscoveryRequest) Reset() { *m = DiscoveryRequest{} } @@ -75,22 +42,18 @@ func (*DiscoveryRequest) Descriptor() ([]byte, []int) { return fileDescriptor_2c7365e287e5c035, []int{0} } + func (m *DiscoveryRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DiscoveryRequest.Unmarshal(m, b) } func (m *DiscoveryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_DiscoveryRequest.Marshal(b, m, deterministic) } func (m *DiscoveryRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_DiscoveryRequest.Merge(m, src) } func (m *DiscoveryRequest) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DiscoveryRequest.Size(m) } func (m *DiscoveryRequest) XXX_DiscardUnknown() { xxx_messageInfo_DiscoveryRequest.DiscardUnknown(m) @@ -133,7 +96,7 @@ return "" } -func (m *DiscoveryRequest) GetErrorDetail() *rpc.Status { +func (m *DiscoveryRequest) GetErrorDetail() *status.Status { if m != nil { return m.ErrorDetail } @@ -141,40 +104,11 @@ } type DiscoveryResponse struct { - // The version of the response data. - VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"` - // The response resources. These resources are typed and depend on the API being called. - Resources []types.Any `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources"` - // [#not-implemented-hide:] - // Canary is used to support two Envoy command line flags: - // - // * --terminate-on-canary-transition-failure. When set, Envoy is able to - // terminate if it detects that configuration is stuck at canary. Consider - // this example sequence of updates: - // - Management server applies a canary config successfully. - // - Management server rolls back to a production config. - // - Envoy rejects the new production config. - // Since there is no sensible way to continue receiving configuration - // updates, Envoy will then terminate and apply production config from a - // clean slate. - // * --dry-run-canary. When set, a canary response will never be applied, only - // validated via a dry run. - Canary bool `protobuf:"varint,3,opt,name=canary,proto3" json:"canary,omitempty"` - // Type URL for resources. This must be consistent with the type_url in the - // Any messages for resources if resources is non-empty. This effectively - // identifies the xDS API when muxing over ADS. - TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` - // For gRPC based subscriptions, the nonce provides a way to explicitly ack a - // specific DiscoveryResponse in a following DiscoveryRequest. Additional - // messages may have been sent by Envoy to the management server for the - // previous version on the stream prior to this DiscoveryResponse, that were - // unprocessed at response send time. The nonce allows the management server - // to ignore any further DiscoveryRequests for the previous version until a - // DiscoveryRequest bearing the nonce. The nonce is optional and is not - // required for non-stream based xDS implementations. - Nonce string `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` - // [#not-implemented-hide:] - // The control plane instance that sent the response. + VersionInfo string `protobuf:"bytes,1,opt,name=version_info,json=versionInfo,proto3" json:"version_info,omitempty"` + Resources []*any.Any `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` + Canary bool `protobuf:"varint,3,opt,name=canary,proto3" json:"canary,omitempty"` + TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` + Nonce string `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` ControlPlane *core.ControlPlane `protobuf:"bytes,6,opt,name=control_plane,json=controlPlane,proto3" json:"control_plane,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -187,22 +121,18 @@ func (*DiscoveryResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2c7365e287e5c035, []int{1} } + func (m *DiscoveryResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DiscoveryResponse.Unmarshal(m, b) } func (m *DiscoveryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_DiscoveryResponse.Marshal(b, m, deterministic) } func (m *DiscoveryResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_DiscoveryResponse.Merge(m, src) } func (m *DiscoveryResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DiscoveryResponse.Size(m) } func (m *DiscoveryResponse) XXX_DiscardUnknown() { xxx_messageInfo_DiscoveryResponse.DiscardUnknown(m) @@ -217,7 +147,7 @@ return "" } -func (m *DiscoveryResponse) GetResources() []types.Any { +func (m *DiscoveryResponse) GetResources() []*any.Any { if m != nil { return m.Resources } @@ -252,76 +182,17 @@ return nil } -// DeltaDiscoveryRequest and DeltaDiscoveryResponse are used in a new gRPC -// endpoint for Delta xDS. -// -// With Delta xDS, the DeltaDiscoveryResponses do not need to include a full -// snapshot of the tracked resources. Instead, DeltaDiscoveryResponses are a -// diff to the state of a xDS client. -// In Delta XDS there are per resource versions, which allow tracking state at -// the resource granularity. -// An xDS Delta session is always in the context of a gRPC bidirectional -// stream. This allows the xDS server to keep track of the state of xDS clients -// connected to it. -// -// In Delta xDS the nonce field is required and used to pair -// DeltaDiscoveryResponse to a DeltaDiscoveryRequest ACK or NACK. -// Optionally, a response message level system_version_info is present for -// debugging purposes only. -// -// DeltaDiscoveryRequest can be sent in 3 situations: -// 1. Initial message in a xDS bidirectional gRPC stream. -// 2. As a ACK or NACK response to a previous DeltaDiscoveryResponse. -// In this case the response_nonce is set to the nonce value in the Response. -// ACK or NACK is determined by the absence or presence of error_detail. -// 3. Spontaneous DeltaDiscoveryRequest from the client. -// This can be done to dynamically add or remove elements from the tracked -// resource_names set. In this case response_nonce must be omitted. type DeltaDiscoveryRequest struct { - // The node making the request. - Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` - // Type of the resource that is being requested, e.g. - // "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment". This is implicit - // in requests made via singleton xDS APIs such as CDS, LDS, etc. but is - // required for ADS. - TypeUrl string `protobuf:"bytes,2,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` - // DeltaDiscoveryRequests allow the client to add or remove individual - // resources to the set of tracked resources in the context of a stream. - // All resource names in the resource_names_subscribe list are added to the - // set of tracked resources and all resource names in the resource_names_unsubscribe - // list are removed from the set of tracked resources. - // Unlike in state-of-the-world xDS, an empty resource_names_subscribe or - // resource_names_unsubscribe list simply means that no resources are to be - // added or removed to the resource list. - // The xDS server must send updates for all tracked resources but can also - // send updates for resources the client has not subscribed to. This behavior - // is similar to state-of-the-world xDS. - // These two fields can be set for all types of DeltaDiscoveryRequests - // (initial, ACK/NACK or spontaneous). - // - // A list of Resource names to add to the list of tracked resources. - ResourceNamesSubscribe []string `protobuf:"bytes,3,rep,name=resource_names_subscribe,json=resourceNamesSubscribe,proto3" json:"resource_names_subscribe,omitempty"` - // A list of Resource names to remove from the list of tracked resources. - ResourceNamesUnsubscribe []string `protobuf:"bytes,4,rep,name=resource_names_unsubscribe,json=resourceNamesUnsubscribe,proto3" json:"resource_names_unsubscribe,omitempty"` - // This map must be populated when the DeltaDiscoveryRequest is the - // first in a stream (assuming there are any resources - this field's purpose is to enable - // a session to continue in a reconnected gRPC stream, and so will not be used in the very - // first stream of a session). The keys are the resources names of the xDS resources - // known to the xDS client. The values in the map are the associated resource - // level version info. - InitialResourceVersions map[string]string `protobuf:"bytes,5,rep,name=initial_resource_versions,json=initialResourceVersions,proto3" json:"initial_resource_versions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // When the DeltaDiscoveryRequest is a ACK or NACK message in response - // to a previous DeltaDiscoveryResponse, the response_nonce must be the - // nonce in the DeltaDiscoveryResponse. - // Otherwise response_nonce must be omitted. - ResponseNonce string `protobuf:"bytes,6,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"` - // This is populated when the previous :ref:`DiscoveryResponse ` - // failed to update configuration. The *message* field in *error_details* - // provides the Envoy internal exception related to the failure. - ErrorDetail *rpc.Status `protobuf:"bytes,7,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Node *core.Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + TypeUrl string `protobuf:"bytes,2,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` + ResourceNamesSubscribe []string `protobuf:"bytes,3,rep,name=resource_names_subscribe,json=resourceNamesSubscribe,proto3" json:"resource_names_subscribe,omitempty"` + ResourceNamesUnsubscribe []string `protobuf:"bytes,4,rep,name=resource_names_unsubscribe,json=resourceNamesUnsubscribe,proto3" json:"resource_names_unsubscribe,omitempty"` + InitialResourceVersions map[string]string `protobuf:"bytes,5,rep,name=initial_resource_versions,json=initialResourceVersions,proto3" json:"initial_resource_versions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ResponseNonce string `protobuf:"bytes,6,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"` + ErrorDetail *status.Status `protobuf:"bytes,7,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DeltaDiscoveryRequest) Reset() { *m = DeltaDiscoveryRequest{} } @@ -330,22 +201,18 @@ func (*DeltaDiscoveryRequest) Descriptor() ([]byte, []int) { return fileDescriptor_2c7365e287e5c035, []int{2} } + func (m *DeltaDiscoveryRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DeltaDiscoveryRequest.Unmarshal(m, b) } func (m *DeltaDiscoveryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_DeltaDiscoveryRequest.Marshal(b, m, deterministic) } func (m *DeltaDiscoveryRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_DeltaDiscoveryRequest.Merge(m, src) } func (m *DeltaDiscoveryRequest) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DeltaDiscoveryRequest.Size(m) } func (m *DeltaDiscoveryRequest) XXX_DiscardUnknown() { xxx_messageInfo_DeltaDiscoveryRequest.DiscardUnknown(m) @@ -395,7 +262,7 @@ return "" } -func (m *DeltaDiscoveryRequest) GetErrorDetail() *rpc.Status { +func (m *DeltaDiscoveryRequest) GetErrorDetail() *status.Status { if m != nil { return m.ErrorDetail } @@ -403,20 +270,14 @@ } type DeltaDiscoveryResponse struct { - // The version of the response data (used for debugging). - SystemVersionInfo string `protobuf:"bytes,1,opt,name=system_version_info,json=systemVersionInfo,proto3" json:"system_version_info,omitempty"` - // The response resources. These are typed resources that match the type url - // in the DeltaDiscoveryRequest. - Resources []Resource `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources"` - // Resources names of resources that have be deleted and to be removed from the xDS Client. - // Removed resources for missing resources can be ignored. - RemovedResources []string `protobuf:"bytes,6,rep,name=removed_resources,json=removedResources,proto3" json:"removed_resources,omitempty"` - // The nonce provides a way for DeltaDiscoveryRequests to uniquely - // reference a DeltaDiscoveryResponse. The nonce is required. - Nonce string `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SystemVersionInfo string `protobuf:"bytes,1,opt,name=system_version_info,json=systemVersionInfo,proto3" json:"system_version_info,omitempty"` + Resources []*Resource `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` + TypeUrl string `protobuf:"bytes,4,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` + RemovedResources []string `protobuf:"bytes,6,rep,name=removed_resources,json=removedResources,proto3" json:"removed_resources,omitempty"` + Nonce string `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DeltaDiscoveryResponse) Reset() { *m = DeltaDiscoveryResponse{} } @@ -425,22 +286,18 @@ func (*DeltaDiscoveryResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2c7365e287e5c035, []int{3} } + func (m *DeltaDiscoveryResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DeltaDiscoveryResponse.Unmarshal(m, b) } func (m *DeltaDiscoveryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_DeltaDiscoveryResponse.Marshal(b, m, deterministic) } func (m *DeltaDiscoveryResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_DeltaDiscoveryResponse.Merge(m, src) } func (m *DeltaDiscoveryResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DeltaDiscoveryResponse.Size(m) } func (m *DeltaDiscoveryResponse) XXX_DiscardUnknown() { xxx_messageInfo_DeltaDiscoveryResponse.DiscardUnknown(m) @@ -455,13 +312,20 @@ return "" } -func (m *DeltaDiscoveryResponse) GetResources() []Resource { +func (m *DeltaDiscoveryResponse) GetResources() []*Resource { if m != nil { return m.Resources } return nil } +func (m *DeltaDiscoveryResponse) GetTypeUrl() string { + if m != nil { + return m.TypeUrl + } + return "" +} + func (m *DeltaDiscoveryResponse) GetRemovedResources() []string { if m != nil { return m.RemovedResources @@ -477,19 +341,13 @@ } type Resource struct { - // The resource's name, to distinguish it from others of the same type of resource. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // [#not-implemented-hide:] - // The aliases are a list of other names that this resource can go by. - Aliases []string `protobuf:"bytes,4,rep,name=aliases,proto3" json:"aliases,omitempty"` - // The resource level version. It allows xDS to track the state of individual - // resources. - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - // The resource being tracked. - Resource *types.Any `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Aliases []string `protobuf:"bytes,4,rep,name=aliases,proto3" json:"aliases,omitempty"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Resource *any.Any `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Resource) Reset() { *m = Resource{} } @@ -498,22 +356,18 @@ func (*Resource) Descriptor() ([]byte, []int) { return fileDescriptor_2c7365e287e5c035, []int{4} } + func (m *Resource) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Resource.Unmarshal(m, b) } func (m *Resource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_Resource.Marshal(b, m, deterministic) } func (m *Resource) XXX_Merge(src proto.Message) { xxx_messageInfo_Resource.Merge(m, src) } func (m *Resource) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Resource.Size(m) } func (m *Resource) XXX_DiscardUnknown() { xxx_messageInfo_Resource.DiscardUnknown(m) @@ -542,7 +396,7 @@ return "" } -func (m *Resource) GetResource() *types.Any { +func (m *Resource) GetResource() *any.Any { if m != nil { return m.Resource } @@ -561,2221 +415,50 @@ func init() { proto.RegisterFile("envoy/api/v2/discovery.proto", fileDescriptor_2c7365e287e5c035) } var fileDescriptor_2c7365e287e5c035 = []byte{ - // 701 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x41, 0x6b, 0xdb, 0x4c, - 0x10, 0xfd, 0xd6, 0x76, 0x1c, 0x7b, 0xed, 0x84, 0x64, 0xbf, 0xd4, 0x51, 0x4c, 0x70, 0x5c, 0x43, - 0xc1, 0x10, 0x90, 0x8a, 0x4b, 0x21, 0x84, 0x1e, 0xda, 0xd4, 0x2d, 0xa4, 0x87, 0x10, 0x14, 0x92, - 0x43, 0x2f, 0x62, 0x2d, 0x4f, 0x8c, 0xa8, 0xb2, 0xab, 0xee, 0x4a, 0xa2, 0x82, 0x9e, 0x4a, 0x7f, - 0x4c, 0xff, 0x49, 0x73, 0xec, 0xb1, 0xa7, 0x52, 0xfc, 0x47, 0x52, 0xb4, 0x5a, 0xd9, 0x56, 0x62, - 0x82, 0x6f, 0x3b, 0x3b, 0x6f, 0x9f, 0x66, 0xde, 0xbc, 0x11, 0xde, 0x07, 0x16, 0xf3, 0xc4, 0xa2, - 0x81, 0x67, 0xc5, 0x03, 0x6b, 0xec, 0x49, 0x97, 0xc7, 0x20, 0x12, 0x33, 0x10, 0x3c, 0xe4, 0xa4, - 0xa9, 0xb2, 0x26, 0x0d, 0x3c, 0x33, 0x1e, 0xb4, 0x8b, 0x58, 0x97, 0x0b, 0xb0, 0x46, 0x54, 0x42, - 0x86, 0x6d, 0xef, 0x4d, 0x38, 0x9f, 0xf8, 0x60, 0xa9, 0x68, 0x14, 0x5d, 0x5b, 0x94, 0x69, 0x9a, - 0xf6, 0xae, 0x4e, 0x89, 0xc0, 0xb5, 0x64, 0x48, 0xc3, 0x48, 0xea, 0xc4, 0xce, 0x84, 0x4f, 0xb8, - 0x3a, 0x5a, 0xe9, 0x29, 0xbb, 0xed, 0x7d, 0x2b, 0xe1, 0xad, 0x61, 0x5e, 0x89, 0x0d, 0x9f, 0x23, - 0x90, 0x21, 0x79, 0x8a, 0x9b, 0x31, 0x08, 0xe9, 0x71, 0xe6, 0x78, 0xec, 0x9a, 0x1b, 0xa8, 0x8b, - 0xfa, 0x75, 0xbb, 0xa1, 0xef, 0x4e, 0xd9, 0x35, 0x27, 0x87, 0xb8, 0xc2, 0xf8, 0x18, 0x8c, 0x52, - 0x17, 0xf5, 0x1b, 0x83, 0x5d, 0x73, 0xb1, 0x78, 0x33, 0x2d, 0xd7, 0x3c, 0xe3, 0x63, 0xb0, 0x15, - 0x88, 0x3c, 0xc3, 0x9b, 0x02, 0x24, 0x8f, 0x84, 0x0b, 0x0e, 0xa3, 0x37, 0x20, 0x8d, 0x72, 0xb7, - 0xdc, 0xaf, 0xdb, 0x1b, 0xf9, 0xed, 0x59, 0x7a, 0x49, 0xf6, 0x70, 0x2d, 0x4c, 0x02, 0x70, 0x22, - 0xe1, 0x1b, 0x15, 0xf5, 0xc9, 0xf5, 0x34, 0xbe, 0x14, 0xbe, 0x66, 0x08, 0x38, 0x93, 0xe0, 0x30, - 0xce, 0x5c, 0x30, 0xd6, 0x14, 0x60, 0x23, 0xbf, 0x3d, 0x4b, 0x2f, 0xc9, 0x4b, 0xdc, 0x04, 0x21, - 0xb8, 0x70, 0xc6, 0x10, 0x52, 0xcf, 0x37, 0xaa, 0xaa, 0x3a, 0x62, 0x66, 0x9a, 0x98, 0x22, 0x70, - 0xcd, 0x0b, 0xa5, 0x89, 0xdd, 0x50, 0xb8, 0xa1, 0x82, 0xf5, 0xee, 0x10, 0xde, 0x5e, 0x10, 0x21, - 0x63, 0x5c, 0x45, 0x85, 0x23, 0x5c, 0xcf, 0x5b, 0x90, 0x46, 0xa9, 0x5b, 0xee, 0x37, 0x06, 0x3b, - 0xf9, 0xc7, 0xf2, 0xd9, 0x98, 0x6f, 0x58, 0x72, 0x52, 0xb9, 0xfd, 0x73, 0xf0, 0x9f, 0x3d, 0x07, - 0x93, 0x16, 0xae, 0xba, 0x94, 0x51, 0x91, 0x18, 0xe5, 0x2e, 0xea, 0xd7, 0x6c, 0x1d, 0x3d, 0xa6, - 0xc1, 0x0e, 0x5e, 0x5b, 0x6c, 0x3d, 0x0b, 0xc8, 0x10, 0x6f, 0xb8, 0x9c, 0x85, 0x82, 0xfb, 0x4e, - 0xe0, 0x53, 0x06, 0xba, 0xe7, 0x83, 0x25, 0x13, 0x79, 0x9b, 0xe1, 0xce, 0x53, 0x98, 0xdd, 0x74, - 0x17, 0xa2, 0xde, 0x5d, 0x19, 0x3f, 0x19, 0x82, 0x1f, 0xd2, 0x07, 0x5e, 0xc8, 0x07, 0x8d, 0x56, - 0x19, 0xf4, 0x62, 0xf5, 0xa5, 0x62, 0xf5, 0x47, 0xd8, 0x28, 0x7a, 0xc0, 0x91, 0xd1, 0x48, 0xba, - 0xc2, 0x1b, 0x81, 0x76, 0x43, 0xab, 0xe0, 0x86, 0x8b, 0x3c, 0x4b, 0x5e, 0xe1, 0xf6, 0xbd, 0x97, - 0x11, 0x9b, 0xbf, 0xad, 0xa8, 0xb7, 0x46, 0xe1, 0xed, 0xe5, 0x3c, 0x4f, 0xbe, 0xe2, 0x3d, 0x8f, - 0x79, 0xa1, 0x47, 0x7d, 0x67, 0xc6, 0xa2, 0x47, 0x28, 0x8d, 0x35, 0x35, 0xb2, 0xd7, 0xc5, 0xa6, - 0x96, 0xea, 0x60, 0x9e, 0x66, 0x24, 0xb6, 0xe6, 0xb8, 0xd2, 0x14, 0xef, 0x58, 0x28, 0x12, 0x7b, - 0xd7, 0x5b, 0x9e, 0x5d, 0xe2, 0xdb, 0xea, 0x2a, 0xbe, 0x5d, 0x5f, 0xc9, 0xb7, 0xed, 0x0f, 0x78, - 0xff, 0xb1, 0xb2, 0xc8, 0x16, 0x2e, 0x7f, 0x82, 0x44, 0x1b, 0x37, 0x3d, 0xa6, 0x1e, 0x8a, 0xa9, - 0x1f, 0x81, 0x9e, 0x4e, 0x16, 0x1c, 0x97, 0x8e, 0x50, 0xef, 0x27, 0xc2, 0xad, 0xfb, 0x9d, 0xeb, - 0x45, 0x30, 0xf1, 0xff, 0x32, 0x91, 0x21, 0xdc, 0x38, 0x4b, 0xf6, 0x61, 0x3b, 0x4b, 0x5d, 0x2d, - 0x6c, 0xc5, 0xf1, 0xc3, 0xad, 0x68, 0x15, 0x25, 0xce, 0xcb, 0x7d, 0xb8, 0x17, 0x87, 0x78, 0x5b, - 0xc0, 0x0d, 0x8f, 0x61, 0xec, 0xcc, 0x39, 0xaa, 0x6a, 0xc6, 0x5b, 0x3a, 0x61, 0xcf, 0xc0, 0x4b, - 0x37, 0xa2, 0xf7, 0x1d, 0xe1, 0x5a, 0x8e, 0x21, 0x04, 0x57, 0x52, 0xcf, 0xa8, 0x2d, 0xab, 0xdb, - 0xea, 0x4c, 0x0c, 0xbc, 0x4e, 0x7d, 0x8f, 0x4a, 0x90, 0xda, 0x3d, 0x79, 0x98, 0x66, 0x74, 0x8b, - 0xba, 0xbb, 0x3c, 0x24, 0xcf, 0x71, 0x2d, 0xaf, 0x47, 0xff, 0xf3, 0x96, 0x2e, 0xba, 0x3d, 0x43, - 0x9d, 0xbc, 0xff, 0x31, 0xed, 0xa0, 0xdb, 0x69, 0x07, 0xfd, 0x9a, 0x76, 0xd0, 0xef, 0x69, 0x07, - 0xfd, 0x9d, 0x76, 0x10, 0x6e, 0x7b, 0x3c, 0x93, 0x22, 0x10, 0xfc, 0x4b, 0x52, 0x50, 0xe5, 0x64, - 0x73, 0x26, 0xfd, 0x79, 0x4a, 0x79, 0x8e, 0x3e, 0x96, 0xe2, 0xc1, 0xa8, 0xaa, 0xf8, 0x5f, 0xfc, - 0x0b, 0x00, 0x00, 0xff, 0xff, 0x29, 0x62, 0x8b, 0x23, 0x3e, 0x06, 0x00, 0x00, -} - -func (this *DiscoveryRequest) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DiscoveryRequest) - if !ok { - that2, ok := that.(DiscoveryRequest) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.VersionInfo != that1.VersionInfo { - return false - } - if !this.Node.Equal(that1.Node) { - return false - } - if len(this.ResourceNames) != len(that1.ResourceNames) { - return false - } - for i := range this.ResourceNames { - if this.ResourceNames[i] != that1.ResourceNames[i] { - return false - } - } - if this.TypeUrl != that1.TypeUrl { - return false - } - if this.ResponseNonce != that1.ResponseNonce { - return false - } - if !this.ErrorDetail.Equal(that1.ErrorDetail) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DiscoveryResponse) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DiscoveryResponse) - if !ok { - that2, ok := that.(DiscoveryResponse) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.VersionInfo != that1.VersionInfo { - return false - } - if len(this.Resources) != len(that1.Resources) { - return false - } - for i := range this.Resources { - if !this.Resources[i].Equal(&that1.Resources[i]) { - return false - } - } - if this.Canary != that1.Canary { - return false - } - if this.TypeUrl != that1.TypeUrl { - return false - } - if this.Nonce != that1.Nonce { - return false - } - if !this.ControlPlane.Equal(that1.ControlPlane) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DeltaDiscoveryRequest) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DeltaDiscoveryRequest) - if !ok { - that2, ok := that.(DeltaDiscoveryRequest) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Node.Equal(that1.Node) { - return false - } - if this.TypeUrl != that1.TypeUrl { - return false - } - if len(this.ResourceNamesSubscribe) != len(that1.ResourceNamesSubscribe) { - return false - } - for i := range this.ResourceNamesSubscribe { - if this.ResourceNamesSubscribe[i] != that1.ResourceNamesSubscribe[i] { - return false - } - } - if len(this.ResourceNamesUnsubscribe) != len(that1.ResourceNamesUnsubscribe) { - return false - } - for i := range this.ResourceNamesUnsubscribe { - if this.ResourceNamesUnsubscribe[i] != that1.ResourceNamesUnsubscribe[i] { - return false - } - } - if len(this.InitialResourceVersions) != len(that1.InitialResourceVersions) { - return false - } - for i := range this.InitialResourceVersions { - if this.InitialResourceVersions[i] != that1.InitialResourceVersions[i] { - return false - } - } - if this.ResponseNonce != that1.ResponseNonce { - return false - } - if !this.ErrorDetail.Equal(that1.ErrorDetail) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *DeltaDiscoveryResponse) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DeltaDiscoveryResponse) - if !ok { - that2, ok := that.(DeltaDiscoveryResponse) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.SystemVersionInfo != that1.SystemVersionInfo { - return false - } - if len(this.Resources) != len(that1.Resources) { - return false - } - for i := range this.Resources { - if !this.Resources[i].Equal(&that1.Resources[i]) { - return false - } - } - if len(this.RemovedResources) != len(that1.RemovedResources) { - return false - } - for i := range this.RemovedResources { - if this.RemovedResources[i] != that1.RemovedResources[i] { - return false - } - } - if this.Nonce != that1.Nonce { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Resource) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Resource) - if !ok { - that2, ok := that.(Resource) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if len(this.Aliases) != len(that1.Aliases) { - return false - } - for i := range this.Aliases { - if this.Aliases[i] != that1.Aliases[i] { - return false - } - } - if this.Version != that1.Version { - return false - } - if !this.Resource.Equal(that1.Resource) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *DiscoveryRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DiscoveryRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.VersionInfo) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.VersionInfo))) - i += copy(dAtA[i:], m.VersionInfo) - } - if m.Node != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(m.Node.Size())) - n1, err := m.Node.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.TypeUrl) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.TypeUrl))) - i += copy(dAtA[i:], m.TypeUrl) - } - if len(m.ResponseNonce) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.ResponseNonce))) - i += copy(dAtA[i:], m.ResponseNonce) - } - if m.ErrorDetail != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(m.ErrorDetail.Size())) - n2, err := m.ErrorDetail.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DiscoveryResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DiscoveryResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.VersionInfo) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.VersionInfo))) - i += copy(dAtA[i:], m.VersionInfo) - } - if len(m.Resources) > 0 { - for _, msg := range m.Resources { - dAtA[i] = 0x12 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Canary { - dAtA[i] = 0x18 - i++ - if m.Canary { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.TypeUrl) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.TypeUrl))) - i += copy(dAtA[i:], m.TypeUrl) - } - if len(m.Nonce) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.Nonce))) - i += copy(dAtA[i:], m.Nonce) - } - if m.ControlPlane != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(m.ControlPlane.Size())) - n3, err := m.ControlPlane.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DeltaDiscoveryRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeltaDiscoveryRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Node != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(m.Node.Size())) - n4, err := m.Node.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.TypeUrl) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.TypeUrl))) - i += copy(dAtA[i:], m.TypeUrl) - } - if len(m.ResourceNamesSubscribe) > 0 { - for _, s := range m.ResourceNamesSubscribe { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.ResourceNamesUnsubscribe) > 0 { - for _, s := range m.ResourceNamesUnsubscribe { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.InitialResourceVersions) > 0 { - keysForInitialResourceVersions := make([]string, 0, len(m.InitialResourceVersions)) - for k, _ := range m.InitialResourceVersions { - keysForInitialResourceVersions = append(keysForInitialResourceVersions, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForInitialResourceVersions) - for _, k := range keysForInitialResourceVersions { - dAtA[i] = 0x2a - i++ - v := m.InitialResourceVersions[string(k)] - mapSize := 1 + len(k) + sovDiscovery(uint64(len(k))) + 1 + len(v) + sovDiscovery(uint64(len(v))) - i = encodeVarintDiscovery(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if len(m.ResponseNonce) > 0 { - dAtA[i] = 0x32 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.ResponseNonce))) - i += copy(dAtA[i:], m.ResponseNonce) - } - if m.ErrorDetail != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(m.ErrorDetail.Size())) - n5, err := m.ErrorDetail.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DeltaDiscoveryResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeltaDiscoveryResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.SystemVersionInfo) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.SystemVersionInfo))) - i += copy(dAtA[i:], m.SystemVersionInfo) - } - if len(m.Resources) > 0 { - for _, msg := range m.Resources { - dAtA[i] = 0x12 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Nonce) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.Nonce))) - i += copy(dAtA[i:], m.Nonce) - } - if len(m.RemovedResources) > 0 { - for _, s := range m.RemovedResources { - dAtA[i] = 0x32 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Resource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Resource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Version) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - } - if m.Resource != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(m.Resource.Size())) - n6, err := m.Resource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if len(m.Name) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintDiscovery(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Aliases) > 0 { - for _, s := range m.Aliases { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintDiscovery(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *DiscoveryRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.VersionInfo) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - l = len(s) - n += 1 + l + sovDiscovery(uint64(l)) - } - } - l = len(m.TypeUrl) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - l = len(m.ResponseNonce) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.ErrorDetail != nil { - l = m.ErrorDetail.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DiscoveryResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.VersionInfo) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if len(m.Resources) > 0 { - for _, e := range m.Resources { - l = e.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - } - if m.Canary { - n += 2 - } - l = len(m.TypeUrl) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - l = len(m.Nonce) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.ControlPlane != nil { - l = m.ControlPlane.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DeltaDiscoveryRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - l = len(m.TypeUrl) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if len(m.ResourceNamesSubscribe) > 0 { - for _, s := range m.ResourceNamesSubscribe { - l = len(s) - n += 1 + l + sovDiscovery(uint64(l)) - } - } - if len(m.ResourceNamesUnsubscribe) > 0 { - for _, s := range m.ResourceNamesUnsubscribe { - l = len(s) - n += 1 + l + sovDiscovery(uint64(l)) - } - } - if len(m.InitialResourceVersions) > 0 { - for k, v := range m.InitialResourceVersions { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovDiscovery(uint64(len(k))) + 1 + len(v) + sovDiscovery(uint64(len(v))) - n += mapEntrySize + 1 + sovDiscovery(uint64(mapEntrySize)) - } - } - l = len(m.ResponseNonce) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.ErrorDetail != nil { - l = m.ErrorDetail.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DeltaDiscoveryResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SystemVersionInfo) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if len(m.Resources) > 0 { - for _, e := range m.Resources { - l = e.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - } - l = len(m.Nonce) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if len(m.RemovedResources) > 0 { - for _, s := range m.RemovedResources { - l = len(s) - n += 1 + l + sovDiscovery(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Resource) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Version) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovDiscovery(uint64(l)) - } - l = len(m.Name) - if l > 0 { - n += 1 + l + sovDiscovery(uint64(l)) - } - if len(m.Aliases) > 0 { - for _, s := range m.Aliases { - l = len(s) - n += 1 + l + sovDiscovery(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovDiscovery(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozDiscovery(x uint64) (n int) { - return sovDiscovery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *DiscoveryRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DiscoveryRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DiscoveryRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VersionInfo", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VersionInfo = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &core.Node{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceNames", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceNames = append(m.ResourceNames, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypeUrl", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TypeUrl = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseNonce", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseNonce = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ErrorDetail", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ErrorDetail == nil { - m.ErrorDetail = &rpc.Status{} - } - if err := m.ErrorDetail.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDiscovery(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DiscoveryResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DiscoveryResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DiscoveryResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VersionInfo", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VersionInfo = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Resources = append(m.Resources, types.Any{}) - if err := m.Resources[len(m.Resources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Canary", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Canary = bool(v != 0) - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypeUrl", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TypeUrl = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Nonce", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Nonce = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ControlPlane", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ControlPlane == nil { - m.ControlPlane = &core.ControlPlane{} - } - if err := m.ControlPlane.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDiscovery(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DeltaDiscoveryRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeltaDiscoveryRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeltaDiscoveryRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &core.Node{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypeUrl", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TypeUrl = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceNamesSubscribe", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceNamesSubscribe = append(m.ResourceNamesSubscribe, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceNamesUnsubscribe", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResourceNamesUnsubscribe = append(m.ResourceNamesUnsubscribe, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialResourceVersions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InitialResourceVersions == nil { - m.InitialResourceVersions = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthDiscovery - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthDiscovery - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthDiscovery - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthDiscovery - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipDiscovery(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.InitialResourceVersions[mapkey] = mapvalue - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseNonce", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseNonce = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ErrorDetail", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ErrorDetail == nil { - m.ErrorDetail = &rpc.Status{} - } - if err := m.ErrorDetail.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDiscovery(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + // 720 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x4d, 0x6f, 0xd3, 0x4a, + 0x14, 0x95, 0xf3, 0xd5, 0x64, 0x92, 0x56, 0xe9, 0xbc, 0xbe, 0xd4, 0x8d, 0xfa, 0x1e, 0x21, 0x12, + 0x52, 0xa4, 0x4a, 0x36, 0x4a, 0x41, 0xaa, 0x10, 0x0b, 0x28, 0x61, 0x51, 0x16, 0x55, 0xe5, 0xaa, + 0x15, 0x3b, 0x6b, 0xe2, 0xdc, 0x56, 0x23, 0x9c, 0x19, 0x33, 0x63, 0x5b, 0x58, 0x62, 0x81, 0x10, + 0x7b, 0xb6, 0xfc, 0x16, 0x7e, 0x01, 0x5b, 0xf6, 0xfc, 0x0a, 0x76, 0x6c, 0x00, 0x79, 0x3c, 0x4e, + 0xec, 0x36, 0xaa, 0xb2, 0xf3, 0x9d, 0x7b, 0xe6, 0xce, 0x3d, 0xf7, 0x9c, 0x9b, 0xa0, 0x7d, 0x60, + 0x31, 0x4f, 0x6c, 0x12, 0x50, 0x3b, 0x1e, 0xdb, 0x33, 0x2a, 0x3d, 0x1e, 0x83, 0x48, 0xac, 0x40, + 0xf0, 0x90, 0xe3, 0x8e, 0xca, 0x5a, 0x24, 0xa0, 0x56, 0x3c, 0xee, 0x97, 0xb1, 0x1e, 0x17, 0x60, + 0x4f, 0x89, 0x84, 0x0c, 0xdb, 0xdf, 0xbb, 0xe6, 0xfc, 0xda, 0x07, 0x5b, 0x45, 0xd3, 0xe8, 0xca, + 0x26, 0x4c, 0x97, 0xe9, 0xef, 0xea, 0x94, 0x08, 0x3c, 0x5b, 0x86, 0x24, 0x8c, 0xa4, 0x4e, 0xfc, + 0x1f, 0xcd, 0x02, 0x62, 0x13, 0xc6, 0x78, 0x48, 0x42, 0xca, 0x99, 0xb4, 0xe7, 0xf4, 0x5a, 0x90, + 0x30, 0xaf, 0xf9, 0xdf, 0xad, 0x7c, 0xf1, 0xfa, 0xf0, 0x63, 0x05, 0x75, 0x27, 0x79, 0xcb, 0x0e, + 0xbc, 0x8d, 0x40, 0x86, 0xf8, 0x3e, 0xea, 0xc4, 0x20, 0x24, 0xe5, 0xcc, 0xa5, 0xec, 0x8a, 0x9b, + 0xc6, 0xc0, 0x18, 0xb5, 0x9c, 0xb6, 0x3e, 0x3b, 0x61, 0x57, 0x1c, 0x1f, 0xa0, 0x1a, 0xe3, 0x33, + 0x30, 0x2b, 0x03, 0x63, 0xd4, 0x1e, 0xef, 0x5a, 0x45, 0x96, 0x56, 0xca, 0xcb, 0x3a, 0xe5, 0x33, + 0x70, 0x14, 0x08, 0x3f, 0x40, 0x5b, 0x02, 0x24, 0x8f, 0x84, 0x07, 0x2e, 0x23, 0x73, 0x90, 0x66, + 0x75, 0x50, 0x1d, 0xb5, 0x9c, 0xcd, 0xfc, 0xf4, 0x34, 0x3d, 0xc4, 0x7b, 0xa8, 0x19, 0x26, 0x01, + 0xb8, 0x91, 0xf0, 0xcd, 0x9a, 0x7a, 0x72, 0x23, 0x8d, 0x2f, 0x84, 0xaf, 0x2b, 0x04, 0x9c, 0x49, + 0x70, 0x19, 0x67, 0x1e, 0x98, 0x75, 0x05, 0xd8, 0xcc, 0x4f, 0x4f, 0xd3, 0x43, 0xfc, 0x18, 0x75, + 0x40, 0x08, 0x2e, 0xdc, 0x19, 0x84, 0x84, 0xfa, 0x66, 0x43, 0x75, 0x87, 0xad, 0x6c, 0x78, 0x96, + 0x08, 0x3c, 0xeb, 0x5c, 0xb1, 0x77, 0xda, 0x0a, 0x37, 0x51, 0xb0, 0xe1, 0x2f, 0x03, 0x6d, 0x17, + 0x86, 0x90, 0x55, 0x5c, 0x67, 0x0a, 0x63, 0xd4, 0xca, 0x29, 0x48, 0xb3, 0x32, 0xa8, 0x8e, 0xda, + 0xe3, 0x9d, 0xfc, 0xb1, 0x5c, 0x44, 0xeb, 0x39, 0x4b, 0x9c, 0x25, 0x0c, 0xf7, 0x50, 0xc3, 0x23, + 0x8c, 0x88, 0xc4, 0xac, 0x0e, 0x8c, 0x51, 0xd3, 0xd1, 0xd1, 0x5d, 0xec, 0x77, 0x50, 0xbd, 0x48, + 0x3a, 0x0b, 0xf0, 0x04, 0x6d, 0x7a, 0x9c, 0x85, 0x82, 0xfb, 0x6e, 0xe0, 0x13, 0x06, 0x9a, 0xed, + 0xbd, 0x15, 0x5a, 0xbc, 0xc8, 0x70, 0x67, 0x29, 0xcc, 0xe9, 0x78, 0x85, 0x68, 0xf8, 0xa7, 0x8a, + 0xfe, 0x9d, 0x80, 0x1f, 0x92, 0x5b, 0x2e, 0xc8, 0x25, 0x36, 0xd6, 0x91, 0xb8, 0xd8, 0x7d, 0xa5, + 0xdc, 0xfd, 0x11, 0x32, 0xcb, 0xea, 0xbb, 0x32, 0x9a, 0x4a, 0x4f, 0xd0, 0x29, 0x68, 0x1f, 0xf4, + 0x4a, 0x3e, 0x38, 0xcf, 0xb3, 0xf8, 0x29, 0xea, 0xdf, 0xb8, 0x19, 0xb1, 0xe5, 0xdd, 0x9a, 0xba, + 0x6b, 0x96, 0xee, 0x5e, 0x2c, 0xf3, 0xf8, 0x3d, 0xda, 0xa3, 0x8c, 0x86, 0x94, 0xf8, 0xee, 0xa2, + 0x8a, 0x16, 0x4f, 0x9a, 0x75, 0x25, 0xd6, 0xb3, 0x32, 0xa9, 0x95, 0x73, 0xb0, 0x4e, 0xb2, 0x22, + 0x8e, 0xae, 0x71, 0xa9, 0x4b, 0xbc, 0x64, 0xa1, 0x48, 0x9c, 0x5d, 0xba, 0x3a, 0xbb, 0xc2, 0xb1, + 0x8d, 0x75, 0x1c, 0xbb, 0xb1, 0x96, 0x63, 0xfb, 0xaf, 0xd0, 0xfe, 0x5d, 0x6d, 0xe1, 0x2e, 0xaa, + 0xbe, 0x81, 0x44, 0x5b, 0x36, 0xfd, 0x4c, 0x3d, 0x14, 0x13, 0x3f, 0x02, 0xad, 0x4e, 0x16, 0x3c, + 0xa9, 0x1c, 0x19, 0xc3, 0x1f, 0x06, 0xea, 0xdd, 0x64, 0xae, 0x57, 0xc0, 0x42, 0xff, 0xc8, 0x44, + 0x86, 0x30, 0x77, 0x57, 0x6c, 0xc2, 0x76, 0x96, 0xba, 0x2c, 0xec, 0xc3, 0xa3, 0xdb, 0xfb, 0xd0, + 0x2b, 0x8f, 0x38, 0x6f, 0xb7, 0xb8, 0x11, 0x77, 0x38, 0xff, 0x00, 0x6d, 0x0b, 0x98, 0xf3, 0x18, + 0x66, 0xee, 0xb2, 0x70, 0x43, 0x09, 0xdf, 0xd5, 0x09, 0x67, 0x51, 0x67, 0xe5, 0x9a, 0x0c, 0x3f, + 0x19, 0xa8, 0x99, 0x63, 0x30, 0x46, 0xb5, 0xd4, 0x48, 0x6a, 0xf5, 0x5a, 0x8e, 0xfa, 0xc6, 0x26, + 0xda, 0x20, 0x3e, 0x25, 0x12, 0xa4, 0xb6, 0x54, 0x1e, 0xa6, 0x19, 0xcd, 0x5b, 0x53, 0xce, 0x43, + 0xfc, 0x10, 0x35, 0xf3, 0x7e, 0xf4, 0x4f, 0xe0, 0xea, 0xbd, 0x5f, 0xa0, 0x8e, 0x5f, 0xff, 0xfc, + 0xf2, 0xfb, 0x73, 0x7d, 0x1f, 0xf7, 0xb3, 0x71, 0x48, 0x10, 0x31, 0xf5, 0xc0, 0x5a, 0xfe, 0x5d, + 0xc4, 0x87, 0x5f, 0x3f, 0x7c, 0xfb, 0xde, 0xa8, 0x74, 0x0d, 0xd4, 0xa7, 0x3c, 0x9b, 0x5a, 0x20, + 0xf8, 0xbb, 0xa4, 0x34, 0xc0, 0xe3, 0xad, 0x85, 0x4a, 0x67, 0xe9, 0x43, 0x67, 0xc6, 0xb4, 0xa1, + 0x5e, 0x3c, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x0b, 0x0b, 0xc6, 0x88, 0x06, 0x00, 0x00, } -func (m *DeltaDiscoveryResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeltaDiscoveryResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeltaDiscoveryResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SystemVersionInfo", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SystemVersionInfo = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Resources = append(m.Resources, Resource{}) - if err := m.Resources[len(m.Resources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Nonce", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Nonce = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RemovedResources", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RemovedResources = append(m.RemovedResources, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDiscovery(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Resource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Resource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Resource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Version = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resource == nil { - m.Resource = &types.Any{} - } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Aliases", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDiscovery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthDiscovery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthDiscovery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Aliases = append(m.Aliases, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDiscovery(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthDiscovery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipDiscovery(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDiscovery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDiscovery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDiscovery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthDiscovery - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthDiscovery - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowDiscovery - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipDiscovery(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthDiscovery - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthDiscovery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowDiscovery = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/discovery.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/discovery.proto -package v2 +package envoy_api_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _discovery_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on DiscoveryRequest with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -43,17 +46,12 @@ // no validation rules for VersionInfo - { - tmp := m.GetNode() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DiscoveryRequestValidationError{ - field: "Node", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetNode()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscoveryRequestValidationError{ + field: "Node", + reason: "embedded message failed validation", + cause: err, } } } @@ -62,17 +60,12 @@ // no validation rules for ResponseNonce - { - tmp := m.GetErrorDetail() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DiscoveryRequestValidationError{ - field: "ErrorDetail", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetErrorDetail()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscoveryRequestValidationError{ + field: "ErrorDetail", + reason: "embedded message failed validation", + cause: err, } } } @@ -147,17 +140,12 @@ for idx, item := range m.GetResources() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DiscoveryResponseValidationError{ - field: fmt.Sprintf("Resources[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscoveryResponseValidationError{ + field: fmt.Sprintf("Resources[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -170,17 +158,12 @@ // no validation rules for Nonce - { - tmp := m.GetControlPlane() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DiscoveryResponseValidationError{ - field: "ControlPlane", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetControlPlane()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DiscoveryResponseValidationError{ + field: "ControlPlane", + reason: "embedded message failed validation", + cause: err, } } } @@ -252,17 +235,12 @@ return nil } - { - tmp := m.GetNode() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DeltaDiscoveryRequestValidationError{ - field: "Node", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetNode()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeltaDiscoveryRequestValidationError{ + field: "Node", + reason: "embedded message failed validation", + cause: err, } } } @@ -273,17 +251,12 @@ // no validation rules for ResponseNonce - { - tmp := m.GetErrorDetail() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DeltaDiscoveryRequestValidationError{ - field: "ErrorDetail", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetErrorDetail()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeltaDiscoveryRequestValidationError{ + field: "ErrorDetail", + reason: "embedded message failed validation", + cause: err, } } } @@ -360,23 +333,20 @@ for idx, item := range m.GetResources() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DeltaDiscoveryResponseValidationError{ - field: fmt.Sprintf("Resources[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeltaDiscoveryResponseValidationError{ + field: fmt.Sprintf("Resources[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } } + // no validation rules for TypeUrl + // no validation rules for Nonce return nil @@ -449,17 +419,12 @@ // no validation rules for Version - { - tmp := m.GetResource() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ResourceValidationError{ - field: "Resource", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetResource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ResourceValidationError{ + field: "Resource", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,25 +1,22 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/eds.proto -package v2 +package envoy_api_v2 import ( - bytes "bytes" context "context" fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/googleapis/google/api" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + _ "github.com/golang/protobuf/ptypes/duration" + _ "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" - - endpoint "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" - _type "github.com/envoyproxy/go-control-plane/envoy/type" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -31,414 +28,73 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Each route from RDS will map to a single cluster or traffic split across -// clusters using weights expressed in the RDS WeightedCluster. -// -// With EDS, each cluster is treated independently from a LB perspective, with -// LB taking place between the Localities within a cluster and at a finer -// granularity between the hosts within a locality. The percentage of traffic -// for each endpoint is determined by both its load_balancing_weight, and the -// load_balancing_weight of its locality. First, a locality will be selected, -// then an endpoint within that locality will be chose based on its weight. -type ClusterLoadAssignment struct { - // Name of the cluster. This will be the :ref:`service_name - // ` value if specified - // in the cluster :ref:`EdsClusterConfig - // `. - ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` - // List of endpoints to load balance to. - Endpoints []endpoint.LocalityLbEndpoints `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints"` - // Map of named endpoints that can be referenced in LocalityLbEndpoints. - NamedEndpoints map[string]*endpoint.Endpoint `protobuf:"bytes,5,rep,name=named_endpoints,json=namedEndpoints,proto3" json:"named_endpoints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Load balancing policy settings. - Policy *ClusterLoadAssignment_Policy `protobuf:"bytes,4,opt,name=policy,proto3" json:"policy,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ClusterLoadAssignment) Reset() { *m = ClusterLoadAssignment{} } -func (m *ClusterLoadAssignment) String() string { return proto.CompactTextString(m) } -func (*ClusterLoadAssignment) ProtoMessage() {} -func (*ClusterLoadAssignment) Descriptor() ([]byte, []int) { - return fileDescriptor_3c8760f38742c17f, []int{0} -} -func (m *ClusterLoadAssignment) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ClusterLoadAssignment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ClusterLoadAssignment) XXX_Merge(src proto.Message) { - xxx_messageInfo_ClusterLoadAssignment.Merge(m, src) -} -func (m *ClusterLoadAssignment) XXX_Size() int { - return m.Size() -} -func (m *ClusterLoadAssignment) XXX_DiscardUnknown() { - xxx_messageInfo_ClusterLoadAssignment.DiscardUnknown(m) -} - -var xxx_messageInfo_ClusterLoadAssignment proto.InternalMessageInfo - -func (m *ClusterLoadAssignment) GetClusterName() string { - if m != nil { - return m.ClusterName - } - return "" -} - -func (m *ClusterLoadAssignment) GetEndpoints() []endpoint.LocalityLbEndpoints { - if m != nil { - return m.Endpoints - } - return nil -} - -func (m *ClusterLoadAssignment) GetNamedEndpoints() map[string]*endpoint.Endpoint { - if m != nil { - return m.NamedEndpoints - } - return nil -} - -func (m *ClusterLoadAssignment) GetPolicy() *ClusterLoadAssignment_Policy { - if m != nil { - return m.Policy - } - return nil +type EdsDummy struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -// Load balancing policy settings. -type ClusterLoadAssignment_Policy struct { - // Action to trim the overall incoming traffic to protect the upstream - // hosts. This action allows protection in case the hosts are unable to - // recover from an outage, or unable to autoscale or unable to handle - // incoming traffic volume for any reason. - // - // At the client each category is applied one after the other to generate - // the 'actual' drop percentage on all outgoing traffic. For example: - // - // .. code-block:: json - // - // { "drop_overloads": [ - // { "category": "throttle", "drop_percentage": 60 } - // { "category": "lb", "drop_percentage": 50 } - // ]} - // - // The actual drop percentages applied to the traffic at the clients will be - // "throttle"_drop = 60% - // "lb"_drop = 20% // 50% of the remaining 'actual' load, which is 40%. - // actual_outgoing_load = 20% // remaining after applying all categories. - DropOverloads []*ClusterLoadAssignment_Policy_DropOverload `protobuf:"bytes,2,rep,name=drop_overloads,json=dropOverloads,proto3" json:"drop_overloads,omitempty"` - // Priority levels and localities are considered overprovisioned with this - // factor (in percentage). This means that we don't consider a priority - // level or locality unhealthy until the percentage of healthy hosts - // multiplied by the overprovisioning factor drops below 100. - // With the default value 140(1.4), Envoy doesn't consider a priority level - // or a locality unhealthy until their percentage of healthy hosts drops - // below 72%. For example: - // - // .. code-block:: json - // - // { "overprovisioning_factor": 100 } - // - // Read more at :ref:`priority levels ` and - // :ref:`localities `. - OverprovisioningFactor *types.UInt32Value `protobuf:"bytes,3,opt,name=overprovisioning_factor,json=overprovisioningFactor,proto3" json:"overprovisioning_factor,omitempty"` - // The max time until which the endpoints from this assignment can be used. - // If no new assignments are received before this time expires the endpoints - // are considered stale and should be marked unhealthy. - // Defaults to 0 which means endpoints never go stale. - EndpointStaleAfter *types.Duration `protobuf:"bytes,4,opt,name=endpoint_stale_after,json=endpointStaleAfter,proto3" json:"endpoint_stale_after,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ClusterLoadAssignment_Policy) Reset() { *m = ClusterLoadAssignment_Policy{} } -func (m *ClusterLoadAssignment_Policy) String() string { return proto.CompactTextString(m) } -func (*ClusterLoadAssignment_Policy) ProtoMessage() {} -func (*ClusterLoadAssignment_Policy) Descriptor() ([]byte, []int) { - return fileDescriptor_3c8760f38742c17f, []int{0, 1} -} -func (m *ClusterLoadAssignment_Policy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ClusterLoadAssignment_Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ClusterLoadAssignment_Policy) XXX_Merge(src proto.Message) { - xxx_messageInfo_ClusterLoadAssignment_Policy.Merge(m, src) -} -func (m *ClusterLoadAssignment_Policy) XXX_Size() int { - return m.Size() -} -func (m *ClusterLoadAssignment_Policy) XXX_DiscardUnknown() { - xxx_messageInfo_ClusterLoadAssignment_Policy.DiscardUnknown(m) -} - -var xxx_messageInfo_ClusterLoadAssignment_Policy proto.InternalMessageInfo - -func (m *ClusterLoadAssignment_Policy) GetDropOverloads() []*ClusterLoadAssignment_Policy_DropOverload { - if m != nil { - return m.DropOverloads - } - return nil -} - -func (m *ClusterLoadAssignment_Policy) GetOverprovisioningFactor() *types.UInt32Value { - if m != nil { - return m.OverprovisioningFactor - } - return nil +func (m *EdsDummy) Reset() { *m = EdsDummy{} } +func (m *EdsDummy) String() string { return proto.CompactTextString(m) } +func (*EdsDummy) ProtoMessage() {} +func (*EdsDummy) Descriptor() ([]byte, []int) { + return fileDescriptor_3c8760f38742c17f, []int{0} } -func (m *ClusterLoadAssignment_Policy) GetEndpointStaleAfter() *types.Duration { - if m != nil { - return m.EndpointStaleAfter - } - return nil +func (m *EdsDummy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EdsDummy.Unmarshal(m, b) } - -type ClusterLoadAssignment_Policy_DropOverload struct { - // Identifier for the policy specifying the drop. - Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` - // Percentage of traffic that should be dropped for the category. - DropPercentage *_type.FractionalPercent `protobuf:"bytes,2,opt,name=drop_percentage,json=dropPercentage,proto3" json:"drop_percentage,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (m *EdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EdsDummy.Marshal(b, m, deterministic) } - -func (m *ClusterLoadAssignment_Policy_DropOverload) Reset() { - *m = ClusterLoadAssignment_Policy_DropOverload{} +func (m *EdsDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_EdsDummy.Merge(m, src) } -func (m *ClusterLoadAssignment_Policy_DropOverload) String() string { return proto.CompactTextString(m) } -func (*ClusterLoadAssignment_Policy_DropOverload) ProtoMessage() {} -func (*ClusterLoadAssignment_Policy_DropOverload) Descriptor() ([]byte, []int) { - return fileDescriptor_3c8760f38742c17f, []int{0, 1, 0} +func (m *EdsDummy) XXX_Size() int { + return xxx_messageInfo_EdsDummy.Size(m) } -func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Merge(src proto.Message) { - xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Merge(m, src) -} -func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Size() int { - return m.Size() -} -func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_DiscardUnknown() { - xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.DiscardUnknown(m) +func (m *EdsDummy) XXX_DiscardUnknown() { + xxx_messageInfo_EdsDummy.DiscardUnknown(m) } -var xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload proto.InternalMessageInfo - -func (m *ClusterLoadAssignment_Policy_DropOverload) GetCategory() string { - if m != nil { - return m.Category - } - return "" -} - -func (m *ClusterLoadAssignment_Policy_DropOverload) GetDropPercentage() *_type.FractionalPercent { - if m != nil { - return m.DropPercentage - } - return nil -} +var xxx_messageInfo_EdsDummy proto.InternalMessageInfo func init() { - proto.RegisterType((*ClusterLoadAssignment)(nil), "envoy.api.v2.ClusterLoadAssignment") - proto.RegisterMapType((map[string]*endpoint.Endpoint)(nil), "envoy.api.v2.ClusterLoadAssignment.NamedEndpointsEntry") - proto.RegisterType((*ClusterLoadAssignment_Policy)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy") - proto.RegisterType((*ClusterLoadAssignment_Policy_DropOverload)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy.DropOverload") + proto.RegisterType((*EdsDummy)(nil), "envoy.api.v2.EdsDummy") } func init() { proto.RegisterFile("envoy/api/v2/eds.proto", fileDescriptor_3c8760f38742c17f) } var fileDescriptor_3c8760f38742c17f = []byte{ - // 706 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xcf, 0x6b, 0x13, 0x41, - 0x14, 0xc7, 0x33, 0x9b, 0x34, 0xa6, 0xd3, 0xd8, 0x96, 0xb5, 0xb6, 0x71, 0x89, 0x69, 0x08, 0x0a, - 0x25, 0xc8, 0x46, 0x52, 0xa4, 0xd2, 0x8b, 0x34, 0xb6, 0x01, 0xa5, 0xd4, 0xb0, 0x45, 0xd1, 0x8b, - 0x71, 0xb2, 0x3b, 0x5d, 0x07, 0x37, 0x33, 0xe3, 0xec, 0x64, 0x75, 0x0f, 0x5e, 0x3c, 0x79, 0xf7, - 0x9f, 0x90, 0xfe, 0x09, 0x9e, 0x3c, 0xf6, 0xe0, 0x41, 0xf0, 0xe2, 0x49, 0x24, 0x78, 0x11, 0xff, - 0x09, 0x99, 0xfd, 0xd5, 0xae, 0x6d, 0xc1, 0x83, 0xb7, 0xb7, 0xf3, 0xde, 0xfb, 0xbc, 0xb7, 0xdf, - 0xf7, 0x66, 0xe0, 0x32, 0xa6, 0x01, 0x0b, 0x3b, 0x88, 0x93, 0x4e, 0xd0, 0xed, 0x60, 0xc7, 0x37, - 0xb9, 0x60, 0x92, 0xe9, 0xd5, 0xe8, 0xdc, 0x44, 0x9c, 0x98, 0x41, 0xd7, 0xa8, 0xe7, 0xa2, 0x1c, - 0xe2, 0xdb, 0x2c, 0xc0, 0x22, 0x8c, 0x63, 0x8d, 0x6b, 0x79, 0x06, 0x75, 0x38, 0x23, 0x54, 0x66, - 0x46, 0x12, 0x55, 0x8b, 0xa3, 0x64, 0xc8, 0x71, 0x87, 0x63, 0x61, 0xe3, 0xcc, 0x53, 0x77, 0x19, - 0x73, 0x3d, 0x1c, 0x01, 0x10, 0xa5, 0x4c, 0x22, 0x49, 0x18, 0x4d, 0x3a, 0x31, 0x56, 0x02, 0xe4, - 0x11, 0x07, 0x49, 0xdc, 0x49, 0x8d, 0xc4, 0xb1, 0xe4, 0x32, 0x97, 0x45, 0x66, 0x47, 0x59, 0xc9, - 0x69, 0x23, 0x81, 0x45, 0x5f, 0xa3, 0xc9, 0x41, 0xe7, 0x95, 0x40, 0x9c, 0x63, 0xe1, 0x9f, 0xe7, - 0x77, 0x26, 0x22, 0xaa, 0x17, 0xfb, 0x5b, 0x9f, 0xcb, 0xf0, 0xf2, 0x5d, 0x6f, 0xe2, 0x4b, 0x2c, - 0x76, 0x19, 0x72, 0xb6, 0x7c, 0x9f, 0xb8, 0x74, 0x8c, 0xa9, 0xd4, 0x6f, 0xc0, 0xaa, 0x1d, 0x3b, - 0x86, 0x14, 0x8d, 0x71, 0x0d, 0x34, 0xc1, 0xda, 0x6c, 0x6f, 0xf6, 0xe3, 0xaf, 0x4f, 0xc5, 0x92, - 0xd0, 0x9a, 0xc0, 0x9a, 0x4b, 0xdc, 0x7b, 0x68, 0x8c, 0xf5, 0x3d, 0x38, 0x9b, 0x0a, 0xe0, 0xd7, - 0xb4, 0x66, 0x71, 0x6d, 0xae, 0xdb, 0x36, 0x4f, 0x8a, 0x6a, 0x66, 0xfa, 0xec, 0x32, 0x1b, 0x79, - 0x44, 0x86, 0xbb, 0xa3, 0x9d, 0x34, 0xa3, 0x57, 0x3a, 0xfa, 0xbe, 0x5a, 0xb0, 0x8e, 0x11, 0xfa, - 0x33, 0xb8, 0xa0, 0xaa, 0x3a, 0xc3, 0x63, 0xea, 0x4c, 0x44, 0xdd, 0xc8, 0x53, 0xcf, 0xec, 0xdd, - 0x54, 0x2d, 0x39, 0x19, 0x7d, 0x87, 0x4a, 0x11, 0x5a, 0xf3, 0x34, 0x77, 0xa8, 0xf7, 0x60, 0x99, - 0x33, 0x8f, 0xd8, 0x61, 0xad, 0xd4, 0x04, 0xa7, 0xdb, 0x3d, 0x1b, 0x3c, 0x88, 0x32, 0xac, 0x24, - 0xd3, 0x18, 0xc1, 0x4b, 0x67, 0x94, 0xd2, 0x17, 0x61, 0xf1, 0x05, 0x0e, 0x63, 0xc5, 0x2c, 0x65, - 0xea, 0xb7, 0xe0, 0x4c, 0x80, 0xbc, 0x09, 0xae, 0x69, 0x51, 0xad, 0xd5, 0x73, 0xa4, 0x49, 0x39, - 0x56, 0x1c, 0xbd, 0xa9, 0xdd, 0x06, 0xc6, 0x61, 0x11, 0x96, 0xe3, 0xb2, 0xfa, 0x53, 0x38, 0xef, - 0x08, 0xc6, 0x87, 0x6a, 0x1b, 0x3d, 0x86, 0x9c, 0x54, 0xe9, 0x8d, 0x7f, 0x6f, 0xdd, 0xdc, 0x16, - 0x8c, 0x3f, 0x48, 0xf2, 0xad, 0x8b, 0xce, 0x89, 0x2f, 0x25, 0xfa, 0x8a, 0x42, 0x73, 0xc1, 0x02, - 0xe2, 0x13, 0x46, 0x09, 0x75, 0x87, 0x07, 0xc8, 0x96, 0x4c, 0xd4, 0x8a, 0x51, 0xdf, 0x75, 0x33, - 0x5e, 0x27, 0x33, 0x5d, 0x27, 0xf3, 0xe1, 0x3d, 0x2a, 0xd7, 0xbb, 0x8f, 0x54, 0xb7, 0xc9, 0x6e, - 0xb4, 0xb5, 0x66, 0xc1, 0x5a, 0xfe, 0x9b, 0xd3, 0x8f, 0x30, 0xfa, 0x13, 0xb8, 0x94, 0xfe, 0xec, - 0xd0, 0x97, 0xc8, 0xc3, 0x43, 0x74, 0x20, 0xb1, 0x48, 0x46, 0x70, 0xe5, 0x14, 0x7e, 0x3b, 0xd9, - 0xd6, 0x5e, 0x55, 0xb1, 0x2f, 0x1c, 0x82, 0x52, 0x5b, 0xab, 0x14, 0x2c, 0x3d, 0x85, 0xec, 0x2b, - 0xc6, 0x96, 0x42, 0x18, 0x6f, 0x60, 0xf5, 0xe4, 0xbf, 0xe9, 0xd7, 0x61, 0xc5, 0x46, 0x12, 0xbb, - 0x4c, 0x84, 0xa7, 0x77, 0x37, 0x73, 0xe9, 0x7d, 0xb8, 0x10, 0x69, 0x9a, 0xdc, 0x51, 0xe4, 0xa6, - 0x33, 0xba, 0x9a, 0x88, 0xaa, 0x6e, 0xb0, 0xd9, 0x17, 0xc8, 0x56, 0x7d, 0x20, 0x6f, 0x10, 0xc7, - 0x59, 0xd1, 0x24, 0x06, 0x59, 0xd2, 0xfd, 0x52, 0x05, 0x2c, 0x6a, 0xdd, 0xdf, 0x00, 0xd6, 0xd2, - 0x21, 0x6e, 0xa7, 0xef, 0xc6, 0x3e, 0x16, 0x01, 0xb1, 0xb1, 0xfe, 0x18, 0x2e, 0xec, 0x4b, 0x81, - 0xd1, 0xf8, 0x78, 0x09, 0x1b, 0xf9, 0xc9, 0x65, 0x29, 0x16, 0x7e, 0x39, 0xc1, 0xbe, 0x34, 0x56, - 0xcf, 0xf5, 0xfb, 0x9c, 0x51, 0x1f, 0xb7, 0x0a, 0x6b, 0xe0, 0x26, 0xd0, 0x27, 0x70, 0xbe, 0x8f, - 0xa5, 0xfd, 0xfc, 0x3f, 0x82, 0x5b, 0x6f, 0xbf, 0xfe, 0x7c, 0xaf, 0xd5, 0x5b, 0x2b, 0xb9, 0x27, - 0x70, 0x33, 0xbb, 0x8e, 0x9b, 0xa0, 0xdd, 0xbb, 0xf3, 0x61, 0xda, 0x00, 0x47, 0xd3, 0x06, 0xf8, - 0x32, 0x6d, 0x80, 0x6f, 0xd3, 0x06, 0xf8, 0x31, 0x6d, 0x00, 0x68, 0x10, 0x16, 0xc3, 0xb9, 0x60, - 0xaf, 0xc3, 0x5c, 0x9d, 0x5e, 0x65, 0xc7, 0xf1, 0x07, 0x6a, 0xb8, 0x03, 0xf0, 0x0e, 0x80, 0x51, - 0x39, 0x1a, 0xf4, 0xfa, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x16, 0xd1, 0x36, 0x97, 0x05, - 0x00, 0x00, -} - -func (this *ClusterLoadAssignment) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ClusterLoadAssignment) - if !ok { - that2, ok := that.(ClusterLoadAssignment) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.ClusterName != that1.ClusterName { - return false - } - if len(this.Endpoints) != len(that1.Endpoints) { - return false - } - for i := range this.Endpoints { - if !this.Endpoints[i].Equal(&that1.Endpoints[i]) { - return false - } - } - if len(this.NamedEndpoints) != len(that1.NamedEndpoints) { - return false - } - for i := range this.NamedEndpoints { - if !this.NamedEndpoints[i].Equal(that1.NamedEndpoints[i]) { - return false - } - } - if !this.Policy.Equal(that1.Policy) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ClusterLoadAssignment_Policy) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ClusterLoadAssignment_Policy) - if !ok { - that2, ok := that.(ClusterLoadAssignment_Policy) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.DropOverloads) != len(that1.DropOverloads) { - return false - } - for i := range this.DropOverloads { - if !this.DropOverloads[i].Equal(that1.DropOverloads[i]) { - return false - } - } - if !this.OverprovisioningFactor.Equal(that1.OverprovisioningFactor) { - return false - } - if !this.EndpointStaleAfter.Equal(that1.EndpointStaleAfter) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ClusterLoadAssignment_Policy_DropOverload) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ClusterLoadAssignment_Policy_DropOverload) - if !ok { - that2, ok := that.(ClusterLoadAssignment_Policy_DropOverload) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Category != that1.Category { - return false - } - if !this.DropPercentage.Equal(that1.DropPercentage) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true + // 406 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0xbd, 0xee, 0xd2, 0x50, + 0x18, 0xc6, 0x2d, 0x44, 0x24, 0x27, 0x06, 0x4d, 0x07, 0x91, 0x82, 0x68, 0x2a, 0x03, 0x61, 0x68, + 0x0d, 0x6c, 0x6c, 0x22, 0x38, 0x39, 0x10, 0x71, 0x70, 0x3d, 0xf4, 0xbc, 0xd6, 0x93, 0xb4, 0xe7, + 0x1c, 0xcf, 0x47, 0xb5, 0x71, 0x21, 0x4e, 0xc6, 0xc5, 0xc1, 0xc4, 0x78, 0x01, 0x5e, 0x85, 0x57, + 0xe0, 0x6a, 0xbc, 0x05, 0xaf, 0x40, 0x77, 0x63, 0x68, 0x7b, 0xc0, 0x4a, 0x70, 0xfa, 0x6f, 0x6d, + 0x7f, 0xcf, 0xfb, 0xbc, 0x6f, 0x9e, 0xa7, 0xe8, 0x06, 0xb0, 0x8c, 0xe7, 0x21, 0x16, 0x34, 0xcc, + 0xa6, 0x21, 0x10, 0x15, 0x08, 0xc9, 0x35, 0x77, 0xaf, 0x16, 0xdf, 0x03, 0x2c, 0x68, 0x90, 0x4d, + 0xbd, 0x41, 0x4d, 0x45, 0xa8, 0x8a, 0x78, 0x06, 0x32, 0x2f, 0xb5, 0xde, 0x20, 0xe6, 0x3c, 0x4e, + 0xa0, 0xc0, 0x98, 0x31, 0xae, 0xb1, 0xa6, 0x9c, 0x55, 0x4e, 0xde, 0xb0, 0xa2, 0xc5, 0xdb, 0xd6, + 0x3c, 0x0b, 0x89, 0x91, 0x85, 0xe0, 0x1c, 0x7f, 0x29, 0xb1, 0x10, 0x20, 0xed, 0xfc, 0x9d, 0x6a, + 0xf7, 0xd1, 0x38, 0x94, 0xa0, 0xb8, 0x91, 0x11, 0x58, 0x07, 0x43, 0x04, 0xae, 0x09, 0x52, 0x1a, + 0x4b, 0xac, 0x2d, 0xbf, 0x75, 0xc2, 0x95, 0xc6, 0xda, 0xd8, 0x05, 0xdd, 0x0c, 0x27, 0x94, 0x60, + 0x0d, 0xa1, 0x7d, 0xa8, 0x40, 0xbf, 0x9e, 0x0d, 0x23, 0x82, 0x53, 0xa6, 0x4b, 0xe8, 0x23, 0xd4, + 0x5e, 0x11, 0xb5, 0x34, 0x69, 0x9a, 0x4f, 0x77, 0x4d, 0x74, 0x73, 0x55, 0xe1, 0xa5, 0x0d, 0x67, + 0x03, 0x32, 0xa3, 0x11, 0xb8, 0x4f, 0xd1, 0xb5, 0x8d, 0x96, 0x80, 0x53, 0xab, 0x50, 0xee, 0x30, + 0xf8, 0x3b, 0xdd, 0xe0, 0x30, 0xf2, 0x18, 0x5e, 0x18, 0x50, 0xda, 0xbb, 0x7d, 0x96, 0x2b, 0xc1, + 0x99, 0x02, 0xff, 0xd2, 0xd8, 0xb9, 0xe7, 0xb8, 0x18, 0x75, 0x96, 0x90, 0x68, 0x7c, 0x34, 0xbe, + 0xfb, 0xcf, 0xe0, 0x9e, 0x9e, 0xb8, 0x8f, 0xfe, 0x2f, 0xaa, 0xad, 0x78, 0x8d, 0x3a, 0x0f, 0x41, + 0x47, 0xcf, 0x2f, 0xf0, 0xf6, 0xf1, 0x9b, 0xef, 0x3f, 0x3e, 0x34, 0x7a, 0x7e, 0xb7, 0xf6, 0x2b, + 0xcd, 0x6d, 0xbc, 0xaa, 0xc0, 0xcd, 0xb9, 0x33, 0xf1, 0x26, 0xef, 0x3e, 0x7f, 0xfc, 0x75, 0x65, + 0x84, 0xfc, 0x9a, 0xe3, 0x83, 0xc4, 0x28, 0x0d, 0xf2, 0x11, 0xc7, 0xe4, 0xbe, 0x52, 0x34, 0x66, + 0x29, 0x30, 0xbd, 0x78, 0xf2, 0xf3, 0xd3, 0xef, 0xf7, 0x97, 0xfb, 0x6e, 0xaf, 0xd4, 0xaa, 0x32, + 0xfc, 0xe0, 0x50, 0x5a, 0x36, 0xfb, 0xb2, 0xfb, 0xfa, 0xad, 0xd5, 0xb8, 0xee, 0x20, 0x8f, 0xf2, + 0xf2, 0x46, 0x21, 0xf9, 0xab, 0xbc, 0x76, 0xee, 0x62, 0xdf, 0xe9, 0x7a, 0xdf, 0xef, 0xda, 0x79, + 0xeb, 0x38, 0xeb, 0xf6, 0xb6, 0x55, 0xb4, 0x3d, 0xfb, 0x13, 0x00, 0x00, 0xff, 0xff, 0x60, 0xd9, + 0x88, 0xd0, 0x28, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -453,9 +109,8 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type EndpointDiscoveryServiceClient interface { - // The resource_names field in DiscoveryRequest specifies a list of clusters - // to subscribe to updates for. StreamEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_StreamEndpointsClient, error) + DeltaEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_DeltaEndpointsClient, error) FetchEndpoints(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) } @@ -498,6 +153,37 @@ return m, nil } +func (c *endpointDiscoveryServiceClient) DeltaEndpoints(ctx context.Context, opts ...grpc.CallOption) (EndpointDiscoveryService_DeltaEndpointsClient, error) { + stream, err := c.cc.NewStream(ctx, &_EndpointDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.EndpointDiscoveryService/DeltaEndpoints", opts...) + if err != nil { + return nil, err + } + x := &endpointDiscoveryServiceDeltaEndpointsClient{stream} + return x, nil +} + +type EndpointDiscoveryService_DeltaEndpointsClient interface { + Send(*DeltaDiscoveryRequest) error + Recv() (*DeltaDiscoveryResponse, error) + grpc.ClientStream +} + +type endpointDiscoveryServiceDeltaEndpointsClient struct { + grpc.ClientStream +} + +func (x *endpointDiscoveryServiceDeltaEndpointsClient) Send(m *DeltaDiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *endpointDiscoveryServiceDeltaEndpointsClient) Recv() (*DeltaDiscoveryResponse, error) { + m := new(DeltaDiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *endpointDiscoveryServiceClient) FetchEndpoints(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) { out := new(DiscoveryResponse) err := c.cc.Invoke(ctx, "/envoy.api.v2.EndpointDiscoveryService/FetchEndpoints", in, out, opts...) @@ -509,12 +195,25 @@ // EndpointDiscoveryServiceServer is the server API for EndpointDiscoveryService service. type EndpointDiscoveryServiceServer interface { - // The resource_names field in DiscoveryRequest specifies a list of clusters - // to subscribe to updates for. StreamEndpoints(EndpointDiscoveryService_StreamEndpointsServer) error + DeltaEndpoints(EndpointDiscoveryService_DeltaEndpointsServer) error FetchEndpoints(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error) } +// UnimplementedEndpointDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedEndpointDiscoveryServiceServer struct { +} + +func (*UnimplementedEndpointDiscoveryServiceServer) StreamEndpoints(srv EndpointDiscoveryService_StreamEndpointsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamEndpoints not implemented") +} +func (*UnimplementedEndpointDiscoveryServiceServer) DeltaEndpoints(srv EndpointDiscoveryService_DeltaEndpointsServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaEndpoints not implemented") +} +func (*UnimplementedEndpointDiscoveryServiceServer) FetchEndpoints(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchEndpoints not implemented") +} + func RegisterEndpointDiscoveryServiceServer(s *grpc.Server, srv EndpointDiscoveryServiceServer) { s.RegisterService(&_EndpointDiscoveryService_serviceDesc, srv) } @@ -545,6 +244,32 @@ return m, nil } +func _EndpointDiscoveryService_DeltaEndpoints_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(EndpointDiscoveryServiceServer).DeltaEndpoints(&endpointDiscoveryServiceDeltaEndpointsServer{stream}) +} + +type EndpointDiscoveryService_DeltaEndpointsServer interface { + Send(*DeltaDiscoveryResponse) error + Recv() (*DeltaDiscoveryRequest, error) + grpc.ServerStream +} + +type endpointDiscoveryServiceDeltaEndpointsServer struct { + grpc.ServerStream +} + +func (x *endpointDiscoveryServiceDeltaEndpointsServer) Send(m *DeltaDiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *endpointDiscoveryServiceDeltaEndpointsServer) Recv() (*DeltaDiscoveryRequest, error) { + m := new(DeltaDiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func _EndpointDiscoveryService_FetchEndpoints_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DiscoveryRequest) if err := dec(in); err != nil { @@ -579,963 +304,12 @@ ServerStreams: true, ClientStreams: true, }, + { + StreamName: "DeltaEndpoints", + Handler: _EndpointDiscoveryService_DeltaEndpoints_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, Metadata: "envoy/api/v2/eds.proto", } - -func (m *ClusterLoadAssignment) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ClusterLoadAssignment) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ClusterName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintEds(dAtA, i, uint64(len(m.ClusterName))) - i += copy(dAtA[i:], m.ClusterName) - } - if len(m.Endpoints) > 0 { - for _, msg := range m.Endpoints { - dAtA[i] = 0x12 - i++ - i = encodeVarintEds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Policy != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintEds(dAtA, i, uint64(m.Policy.Size())) - n1, err := m.Policy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.NamedEndpoints) > 0 { - keysForNamedEndpoints := make([]string, 0, len(m.NamedEndpoints)) - for k, _ := range m.NamedEndpoints { - keysForNamedEndpoints = append(keysForNamedEndpoints, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForNamedEndpoints) - for _, k := range keysForNamedEndpoints { - dAtA[i] = 0x2a - i++ - v := m.NamedEndpoints[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovEds(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovEds(uint64(len(k))) + msgSize - i = encodeVarintEds(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintEds(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintEds(dAtA, i, uint64(v.Size())) - n2, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ClusterLoadAssignment_Policy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ClusterLoadAssignment_Policy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.DropOverloads) > 0 { - for _, msg := range m.DropOverloads { - dAtA[i] = 0x12 - i++ - i = encodeVarintEds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.OverprovisioningFactor != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintEds(dAtA, i, uint64(m.OverprovisioningFactor.Size())) - n3, err := m.OverprovisioningFactor.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.EndpointStaleAfter != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintEds(dAtA, i, uint64(m.EndpointStaleAfter.Size())) - n4, err := m.EndpointStaleAfter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ClusterLoadAssignment_Policy_DropOverload) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ClusterLoadAssignment_Policy_DropOverload) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Category) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintEds(dAtA, i, uint64(len(m.Category))) - i += copy(dAtA[i:], m.Category) - } - if m.DropPercentage != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintEds(dAtA, i, uint64(m.DropPercentage.Size())) - n5, err := m.DropPercentage.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintEds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *ClusterLoadAssignment) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterName) - if l > 0 { - n += 1 + l + sovEds(uint64(l)) - } - if len(m.Endpoints) > 0 { - for _, e := range m.Endpoints { - l = e.Size() - n += 1 + l + sovEds(uint64(l)) - } - } - if m.Policy != nil { - l = m.Policy.Size() - n += 1 + l + sovEds(uint64(l)) - } - if len(m.NamedEndpoints) > 0 { - for k, v := range m.NamedEndpoints { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovEds(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovEds(uint64(len(k))) + l - n += mapEntrySize + 1 + sovEds(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ClusterLoadAssignment_Policy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.DropOverloads) > 0 { - for _, e := range m.DropOverloads { - l = e.Size() - n += 1 + l + sovEds(uint64(l)) - } - } - if m.OverprovisioningFactor != nil { - l = m.OverprovisioningFactor.Size() - n += 1 + l + sovEds(uint64(l)) - } - if m.EndpointStaleAfter != nil { - l = m.EndpointStaleAfter.Size() - n += 1 + l + sovEds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ClusterLoadAssignment_Policy_DropOverload) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Category) - if l > 0 { - n += 1 + l + sovEds(uint64(l)) - } - if m.DropPercentage != nil { - l = m.DropPercentage.Size() - n += 1 + l + sovEds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovEds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozEds(x uint64) (n int) { - return sovEds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ClusterLoadAssignment) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ClusterLoadAssignment: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterLoadAssignment: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Endpoints = append(m.Endpoints, endpoint.LocalityLbEndpoints{}) - if err := m.Endpoints[len(m.Endpoints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Policy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Policy == nil { - m.Policy = &ClusterLoadAssignment_Policy{} - } - if err := m.Policy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamedEndpoints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NamedEndpoints == nil { - m.NamedEndpoints = make(map[string]*endpoint.Endpoint) - } - var mapkey string - var mapvalue *endpoint.Endpoint - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthEds - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthEds - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthEds - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthEds - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &endpoint.Endpoint{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipEds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.NamedEndpoints[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClusterLoadAssignment_Policy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Policy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Policy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DropOverloads", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DropOverloads = append(m.DropOverloads, &ClusterLoadAssignment_Policy_DropOverload{}) - if err := m.DropOverloads[len(m.DropOverloads)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OverprovisioningFactor", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.OverprovisioningFactor == nil { - m.OverprovisioningFactor = &types.UInt32Value{} - } - if err := m.OverprovisioningFactor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndpointStaleAfter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EndpointStaleAfter == nil { - m.EndpointStaleAfter = &types.Duration{} - } - if err := m.EndpointStaleAfter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClusterLoadAssignment_Policy_DropOverload) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DropOverload: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DropOverload: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Category", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Category = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DropPercentage", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DropPercentage == nil { - m.DropPercentage = &_type.FractionalPercent{} - } - if err := m.DropPercentage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipEds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthEds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthEds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipEds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthEds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthEds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowEds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/eds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/eds.proto -package v2 +package envoy_api_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,277 +30,25 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on ClusterLoadAssignment with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *ClusterLoadAssignment) Validate() error { - if m == nil { - return nil - } - - if len(m.GetClusterName()) < 1 { - return ClusterLoadAssignmentValidationError{ - field: "ClusterName", - reason: "value length must be at least 1 bytes", - } - } - - for idx, item := range m.GetEndpoints() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterLoadAssignmentValidationError{ - field: fmt.Sprintf("Endpoints[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for NamedEndpoints - - { - tmp := m.GetPolicy() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterLoadAssignmentValidationError{ - field: "Policy", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// ClusterLoadAssignmentValidationError is the validation error returned by -// ClusterLoadAssignment.Validate if the designated constraints aren't met. -type ClusterLoadAssignmentValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ClusterLoadAssignmentValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ClusterLoadAssignmentValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ClusterLoadAssignmentValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ClusterLoadAssignmentValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ClusterLoadAssignmentValidationError) ErrorName() string { - return "ClusterLoadAssignmentValidationError" -} - -// Error satisfies the builtin error interface -func (e ClusterLoadAssignmentValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sClusterLoadAssignment.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ClusterLoadAssignmentValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ClusterLoadAssignmentValidationError{} - -// Validate checks the field values on ClusterLoadAssignment_Policy with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *ClusterLoadAssignment_Policy) Validate() error { - if m == nil { - return nil - } +// define the regex for a UUID once up-front +var _eds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") - for idx, item := range m.GetDropOverloads() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterLoadAssignment_PolicyValidationError{ - field: fmt.Sprintf("DropOverloads[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if wrapper := m.GetOverprovisioningFactor(); wrapper != nil { - - if wrapper.GetValue() <= 0 { - return ClusterLoadAssignment_PolicyValidationError{ - field: "OverprovisioningFactor", - reason: "value must be greater than 0", - } - } - - } - - if d := m.GetEndpointStaleAfter(); d != nil { - dur, err := types.DurationFromProto(d) - if err != nil { - return ClusterLoadAssignment_PolicyValidationError{ - field: "EndpointStaleAfter", - reason: "value is not a valid duration", - cause: err, - } - } - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return ClusterLoadAssignment_PolicyValidationError{ - field: "EndpointStaleAfter", - reason: "value must be greater than 0s", - } - } - - } - - return nil -} - -// ClusterLoadAssignment_PolicyValidationError is the validation error returned -// by ClusterLoadAssignment_Policy.Validate if the designated constraints -// aren't met. -type ClusterLoadAssignment_PolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ClusterLoadAssignment_PolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ClusterLoadAssignment_PolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ClusterLoadAssignment_PolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ClusterLoadAssignment_PolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ClusterLoadAssignment_PolicyValidationError) ErrorName() string { - return "ClusterLoadAssignment_PolicyValidationError" -} - -// Error satisfies the builtin error interface -func (e ClusterLoadAssignment_PolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sClusterLoadAssignment_Policy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ClusterLoadAssignment_PolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ClusterLoadAssignment_PolicyValidationError{} - -// Validate checks the field values on -// ClusterLoadAssignment_Policy_DropOverload with the rules defined in the +// Validate checks the field values on EdsDummy with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. -func (m *ClusterLoadAssignment_Policy_DropOverload) Validate() error { +func (m *EdsDummy) Validate() error { if m == nil { return nil } - if len(m.GetCategory()) < 1 { - return ClusterLoadAssignment_Policy_DropOverloadValidationError{ - field: "Category", - reason: "value length must be at least 1 bytes", - } - } - - { - tmp := m.GetDropPercentage() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterLoadAssignment_Policy_DropOverloadValidationError{ - field: "DropPercentage", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - return nil } -// ClusterLoadAssignment_Policy_DropOverloadValidationError is the validation -// error returned by ClusterLoadAssignment_Policy_DropOverload.Validate if the -// designated constraints aren't met. -type ClusterLoadAssignment_Policy_DropOverloadValidationError struct { +// EdsDummyValidationError is the validation error returned by +// EdsDummy.Validate if the designated constraints aren't met. +type EdsDummyValidationError struct { field string reason string cause error @@ -308,24 +56,22 @@ } // Field function returns field value. -func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Field() string { return e.field } +func (e EdsDummyValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Reason() string { return e.reason } +func (e EdsDummyValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Cause() error { return e.cause } +func (e EdsDummyValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Key() bool { return e.key } +func (e EdsDummyValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) ErrorName() string { - return "ClusterLoadAssignment_Policy_DropOverloadValidationError" -} +func (e EdsDummyValidationError) ErrorName() string { return "EdsDummyValidationError" } // Error satisfies the builtin error interface -func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Error() string { +func (e EdsDummyValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -337,14 +83,14 @@ } return fmt.Sprintf( - "invalid %sClusterLoadAssignment_Policy_DropOverload.%s: %s%s", + "invalid %sEdsDummy.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = ClusterLoadAssignment_Policy_DropOverloadValidationError{} +var _ error = EdsDummyValidationError{} var _ interface { Field() string @@ -352,4 +98,4 @@ Key() bool Cause() error ErrorName() string -} = ClusterLoadAssignment_Policy_DropOverloadValidationError{} +} = EdsDummyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,341 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/endpoint/endpoint_components.proto + +package envoy_api_v2_endpoint + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type Endpoint struct { + Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + HealthCheckConfig *Endpoint_HealthCheckConfig `protobuf:"bytes,2,opt,name=health_check_config,json=healthCheckConfig,proto3" json:"health_check_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Endpoint) Reset() { *m = Endpoint{} } +func (m *Endpoint) String() string { return proto.CompactTextString(m) } +func (*Endpoint) ProtoMessage() {} +func (*Endpoint) Descriptor() ([]byte, []int) { + return fileDescriptor_2d96d13bf4e60dd1, []int{0} +} + +func (m *Endpoint) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Endpoint.Unmarshal(m, b) +} +func (m *Endpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Endpoint.Marshal(b, m, deterministic) +} +func (m *Endpoint) XXX_Merge(src proto.Message) { + xxx_messageInfo_Endpoint.Merge(m, src) +} +func (m *Endpoint) XXX_Size() int { + return xxx_messageInfo_Endpoint.Size(m) +} +func (m *Endpoint) XXX_DiscardUnknown() { + xxx_messageInfo_Endpoint.DiscardUnknown(m) +} + +var xxx_messageInfo_Endpoint proto.InternalMessageInfo + +func (m *Endpoint) GetAddress() *core.Address { + if m != nil { + return m.Address + } + return nil +} + +func (m *Endpoint) GetHealthCheckConfig() *Endpoint_HealthCheckConfig { + if m != nil { + return m.HealthCheckConfig + } + return nil +} + +type Endpoint_HealthCheckConfig struct { + PortValue uint32 `protobuf:"varint,1,opt,name=port_value,json=portValue,proto3" json:"port_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Endpoint_HealthCheckConfig) Reset() { *m = Endpoint_HealthCheckConfig{} } +func (m *Endpoint_HealthCheckConfig) String() string { return proto.CompactTextString(m) } +func (*Endpoint_HealthCheckConfig) ProtoMessage() {} +func (*Endpoint_HealthCheckConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_2d96d13bf4e60dd1, []int{0, 0} +} + +func (m *Endpoint_HealthCheckConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Endpoint_HealthCheckConfig.Unmarshal(m, b) +} +func (m *Endpoint_HealthCheckConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Endpoint_HealthCheckConfig.Marshal(b, m, deterministic) +} +func (m *Endpoint_HealthCheckConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Endpoint_HealthCheckConfig.Merge(m, src) +} +func (m *Endpoint_HealthCheckConfig) XXX_Size() int { + return xxx_messageInfo_Endpoint_HealthCheckConfig.Size(m) +} +func (m *Endpoint_HealthCheckConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Endpoint_HealthCheckConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Endpoint_HealthCheckConfig proto.InternalMessageInfo + +func (m *Endpoint_HealthCheckConfig) GetPortValue() uint32 { + if m != nil { + return m.PortValue + } + return 0 +} + +type LbEndpoint struct { + // Types that are valid to be assigned to HostIdentifier: + // *LbEndpoint_Endpoint + // *LbEndpoint_EndpointName + HostIdentifier isLbEndpoint_HostIdentifier `protobuf_oneof:"host_identifier"` + HealthStatus core.HealthStatus `protobuf:"varint,2,opt,name=health_status,json=healthStatus,proto3,enum=envoy.api.v2.core.HealthStatus" json:"health_status,omitempty"` + Metadata *core.Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + LoadBalancingWeight *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LbEndpoint) Reset() { *m = LbEndpoint{} } +func (m *LbEndpoint) String() string { return proto.CompactTextString(m) } +func (*LbEndpoint) ProtoMessage() {} +func (*LbEndpoint) Descriptor() ([]byte, []int) { + return fileDescriptor_2d96d13bf4e60dd1, []int{1} +} + +func (m *LbEndpoint) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LbEndpoint.Unmarshal(m, b) +} +func (m *LbEndpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LbEndpoint.Marshal(b, m, deterministic) +} +func (m *LbEndpoint) XXX_Merge(src proto.Message) { + xxx_messageInfo_LbEndpoint.Merge(m, src) +} +func (m *LbEndpoint) XXX_Size() int { + return xxx_messageInfo_LbEndpoint.Size(m) +} +func (m *LbEndpoint) XXX_DiscardUnknown() { + xxx_messageInfo_LbEndpoint.DiscardUnknown(m) +} + +var xxx_messageInfo_LbEndpoint proto.InternalMessageInfo + +type isLbEndpoint_HostIdentifier interface { + isLbEndpoint_HostIdentifier() +} + +type LbEndpoint_Endpoint struct { + Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3,oneof"` +} + +type LbEndpoint_EndpointName struct { + EndpointName string `protobuf:"bytes,5,opt,name=endpoint_name,json=endpointName,proto3,oneof"` +} + +func (*LbEndpoint_Endpoint) isLbEndpoint_HostIdentifier() {} + +func (*LbEndpoint_EndpointName) isLbEndpoint_HostIdentifier() {} + +func (m *LbEndpoint) GetHostIdentifier() isLbEndpoint_HostIdentifier { + if m != nil { + return m.HostIdentifier + } + return nil +} + +func (m *LbEndpoint) GetEndpoint() *Endpoint { + if x, ok := m.GetHostIdentifier().(*LbEndpoint_Endpoint); ok { + return x.Endpoint + } + return nil +} + +func (m *LbEndpoint) GetEndpointName() string { + if x, ok := m.GetHostIdentifier().(*LbEndpoint_EndpointName); ok { + return x.EndpointName + } + return "" +} + +func (m *LbEndpoint) GetHealthStatus() core.HealthStatus { + if m != nil { + return m.HealthStatus + } + return core.HealthStatus_UNKNOWN +} + +func (m *LbEndpoint) GetMetadata() *core.Metadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *LbEndpoint) GetLoadBalancingWeight() *wrappers.UInt32Value { + if m != nil { + return m.LoadBalancingWeight + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*LbEndpoint) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*LbEndpoint_Endpoint)(nil), + (*LbEndpoint_EndpointName)(nil), + } +} + +type LocalityLbEndpoints struct { + Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"` + LbEndpoints []*LbEndpoint `protobuf:"bytes,2,rep,name=lb_endpoints,json=lbEndpoints,proto3" json:"lb_endpoints,omitempty"` + LoadBalancingWeight *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"` + Priority uint32 `protobuf:"varint,5,opt,name=priority,proto3" json:"priority,omitempty"` + Proximity *wrappers.UInt32Value `protobuf:"bytes,6,opt,name=proximity,proto3" json:"proximity,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LocalityLbEndpoints) Reset() { *m = LocalityLbEndpoints{} } +func (m *LocalityLbEndpoints) String() string { return proto.CompactTextString(m) } +func (*LocalityLbEndpoints) ProtoMessage() {} +func (*LocalityLbEndpoints) Descriptor() ([]byte, []int) { + return fileDescriptor_2d96d13bf4e60dd1, []int{2} +} + +func (m *LocalityLbEndpoints) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LocalityLbEndpoints.Unmarshal(m, b) +} +func (m *LocalityLbEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LocalityLbEndpoints.Marshal(b, m, deterministic) +} +func (m *LocalityLbEndpoints) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalityLbEndpoints.Merge(m, src) +} +func (m *LocalityLbEndpoints) XXX_Size() int { + return xxx_messageInfo_LocalityLbEndpoints.Size(m) +} +func (m *LocalityLbEndpoints) XXX_DiscardUnknown() { + xxx_messageInfo_LocalityLbEndpoints.DiscardUnknown(m) +} + +var xxx_messageInfo_LocalityLbEndpoints proto.InternalMessageInfo + +func (m *LocalityLbEndpoints) GetLocality() *core.Locality { + if m != nil { + return m.Locality + } + return nil +} + +func (m *LocalityLbEndpoints) GetLbEndpoints() []*LbEndpoint { + if m != nil { + return m.LbEndpoints + } + return nil +} + +func (m *LocalityLbEndpoints) GetLoadBalancingWeight() *wrappers.UInt32Value { + if m != nil { + return m.LoadBalancingWeight + } + return nil +} + +func (m *LocalityLbEndpoints) GetPriority() uint32 { + if m != nil { + return m.Priority + } + return 0 +} + +func (m *LocalityLbEndpoints) GetProximity() *wrappers.UInt32Value { + if m != nil { + return m.Proximity + } + return nil +} + +func init() { + proto.RegisterType((*Endpoint)(nil), "envoy.api.v2.endpoint.Endpoint") + proto.RegisterType((*Endpoint_HealthCheckConfig)(nil), "envoy.api.v2.endpoint.Endpoint.HealthCheckConfig") + proto.RegisterType((*LbEndpoint)(nil), "envoy.api.v2.endpoint.LbEndpoint") + proto.RegisterType((*LocalityLbEndpoints)(nil), "envoy.api.v2.endpoint.LocalityLbEndpoints") +} + +func init() { + proto.RegisterFile("envoy/api/v2/endpoint/endpoint_components.proto", fileDescriptor_2d96d13bf4e60dd1) +} + +var fileDescriptor_2d96d13bf4e60dd1 = []byte{ + // 628 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xc1, 0x4e, 0x13, 0x41, + 0x18, 0x66, 0x5b, 0x5a, 0xda, 0x01, 0x54, 0x86, 0x10, 0x36, 0x15, 0x01, 0x11, 0x93, 0x86, 0xc3, + 0x6c, 0x2c, 0x26, 0x26, 0x26, 0x1c, 0x5c, 0x30, 0xc1, 0x04, 0x0d, 0x19, 0xa3, 0xc6, 0xd3, 0xe6, + 0xef, 0xee, 0xd0, 0x9d, 0xb8, 0x9d, 0xd9, 0x6c, 0xa7, 0x8b, 0xdc, 0x78, 0x03, 0xaf, 0x3e, 0x8b, + 0x4f, 0xe0, 0x95, 0x27, 0x30, 0xf1, 0x11, 0x3c, 0x72, 0x10, 0xb3, 0xb3, 0x3b, 0xdb, 0x42, 0x4b, + 0x38, 0x78, 0xdb, 0x99, 0xff, 0xfb, 0xfe, 0xff, 0xfb, 0xbe, 0xf9, 0x5b, 0xe4, 0x30, 0x91, 0xca, + 0x33, 0x07, 0x62, 0xee, 0xa4, 0x1d, 0x87, 0x89, 0x20, 0x96, 0x5c, 0xa8, 0xf2, 0xc3, 0xf3, 0x65, + 0x3f, 0x96, 0x82, 0x09, 0x35, 0x20, 0x71, 0x22, 0x95, 0xc4, 0x2b, 0x9a, 0x40, 0x20, 0xe6, 0x24, + 0xed, 0x10, 0x83, 0x6b, 0x6d, 0x5c, 0xeb, 0xe3, 0xcb, 0x84, 0x39, 0x10, 0x04, 0x09, 0x1b, 0x14, + 0xbc, 0xd6, 0xda, 0x24, 0xa0, 0x0b, 0x03, 0x56, 0x54, 0xb7, 0x27, 0xab, 0x21, 0x83, 0x48, 0x85, + 0x9e, 0x1f, 0x32, 0xff, 0x4b, 0x81, 0x5a, 0xef, 0x49, 0xd9, 0x8b, 0x98, 0xa3, 0x4f, 0xdd, 0xe1, + 0x89, 0x73, 0x9a, 0x40, 0x1c, 0xb3, 0xc4, 0xcc, 0x58, 0x1f, 0x06, 0x31, 0x38, 0x20, 0x84, 0x54, + 0xa0, 0xb8, 0x14, 0x03, 0xa7, 0xcf, 0x7b, 0x09, 0x28, 0x33, 0xe5, 0xd1, 0x44, 0x7d, 0xa0, 0x40, + 0x0d, 0x0d, 0x7d, 0x35, 0x85, 0x88, 0x07, 0xa0, 0x98, 0x63, 0x3e, 0xf2, 0xc2, 0xd6, 0x6f, 0x0b, + 0x35, 0x5e, 0x17, 0x4e, 0xf1, 0x73, 0x34, 0x57, 0x38, 0xb3, 0xad, 0x4d, 0xab, 0x3d, 0xdf, 0x69, + 0x91, 0x6b, 0x91, 0x64, 0xe2, 0xc9, 0xab, 0x1c, 0x41, 0x0d, 0x14, 0x03, 0x5a, 0x1e, 0x37, 0xe4, + 0xf9, 0x52, 0x9c, 0xf0, 0x9e, 0x5d, 0xd1, 0x1d, 0x9e, 0x91, 0xa9, 0xa1, 0x12, 0x33, 0x93, 0x1c, + 0x6a, 0xea, 0x7e, 0xc6, 0xdc, 0xd7, 0x44, 0xba, 0x14, 0xde, 0xbc, 0x6a, 0xed, 0xa1, 0xa5, 0x09, + 0x1c, 0x6e, 0x23, 0x14, 0xcb, 0x44, 0x79, 0x29, 0x44, 0x43, 0xa6, 0x05, 0x2f, 0xba, 0xcd, 0x4b, + 0xb7, 0xbe, 0x33, 0x6b, 0x5f, 0x5d, 0x55, 0x69, 0x33, 0x2b, 0x7e, 0xcc, 0x6a, 0x5b, 0xbf, 0x2a, + 0x08, 0x1d, 0x75, 0x4b, 0x9b, 0x7b, 0xa8, 0x61, 0x74, 0x14, 0x3e, 0x37, 0xee, 0x50, 0x79, 0x38, + 0x43, 0x4b, 0x0a, 0x7e, 0x8a, 0x16, 0xcb, 0x1d, 0x12, 0xd0, 0x67, 0x76, 0x6d, 0xd3, 0x6a, 0x37, + 0x0f, 0x67, 0xe8, 0x82, 0xb9, 0x7e, 0x07, 0x7d, 0x86, 0x0f, 0xd0, 0x62, 0x11, 0x4b, 0xfe, 0x12, + 0x3a, 0x90, 0x7b, 0x37, 0x47, 0xe9, 0x48, 0x73, 0x6f, 0xef, 0x35, 0x8c, 0x2e, 0x84, 0x63, 0x27, + 0xfc, 0x02, 0x35, 0xfa, 0x4c, 0x41, 0x00, 0x0a, 0xec, 0xaa, 0xd6, 0xfa, 0x70, 0x4a, 0x83, 0xb7, + 0x05, 0x84, 0x96, 0x60, 0xfc, 0x19, 0xad, 0x44, 0x12, 0x02, 0xaf, 0x0b, 0x11, 0x08, 0x9f, 0x8b, + 0x9e, 0x77, 0xca, 0x78, 0x2f, 0x54, 0xf6, 0xac, 0xee, 0xb2, 0x46, 0xf2, 0x85, 0x23, 0x66, 0xe1, + 0xc8, 0x87, 0x37, 0x42, 0xed, 0x76, 0x74, 0x60, 0xee, 0xdc, 0xa5, 0x3b, 0xbb, 0x53, 0x69, 0x5b, + 0x74, 0x39, 0xeb, 0xe1, 0x9a, 0x16, 0x9f, 0x74, 0x07, 0x77, 0x09, 0xdd, 0x0f, 0xe5, 0x40, 0x79, + 0x3c, 0x60, 0x42, 0xf1, 0x13, 0xce, 0x92, 0xad, 0x8b, 0x0a, 0x5a, 0x3e, 0x92, 0x3e, 0x44, 0x5c, + 0x9d, 0x8d, 0x92, 0xd6, 0xf2, 0xa3, 0xe2, 0xba, 0x88, 0x7a, 0x9a, 0x7c, 0xc3, 0xa4, 0x25, 0x18, + 0x1f, 0xa0, 0x85, 0xa8, 0xeb, 0x99, 0x40, 0xb3, 0xf0, 0xaa, 0xed, 0xf9, 0xce, 0xe3, 0x5b, 0xde, + 0x69, 0x34, 0x92, 0xce, 0x47, 0x63, 0xe3, 0x6f, 0x0d, 0xa1, 0xfa, 0xbf, 0x21, 0xe0, 0x6d, 0xd4, + 0x88, 0x13, 0x2e, 0x93, 0xcc, 0x59, 0x4d, 0xef, 0x5e, 0xe3, 0xd2, 0xad, 0xed, 0x54, 0xed, 0x73, + 0x8b, 0x96, 0x15, 0xfc, 0x12, 0x35, 0xe3, 0x44, 0x7e, 0xe5, 0xfd, 0x0c, 0x56, 0xbf, 0x7b, 0x28, + 0x1d, 0xc1, 0xdd, 0xf0, 0xcf, 0xf7, 0xbf, 0xdf, 0x6a, 0x2d, 0x6c, 0xe7, 0x9e, 0xf3, 0x9f, 0xd5, + 0xc8, 0x73, 0xba, 0xfb, 0xe3, 0xfc, 0xe7, 0x45, 0xbd, 0xf2, 0xc0, 0x42, 0x4f, 0xb8, 0xcc, 0x83, + 0xc9, 0xc8, 0x67, 0xd3, 0x33, 0x72, 0x57, 0x4d, 0x2c, 0xfb, 0xe5, 0xff, 0xde, 0x71, 0xa6, 0xe0, + 0xd8, 0xea, 0xd6, 0xb5, 0x94, 0xdd, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x16, 0x0f, 0x37, + 0x32, 0x05, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint_components.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,425 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/endpoint/endpoint_components.proto + +package envoy_api_v2_endpoint + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" + + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} + + _ = core.HealthStatus(0) +) + +// define the regex for a UUID once up-front +var _endpoint_components_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on Endpoint with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Endpoint) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EndpointValidationError{ + field: "Address", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetHealthCheckConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EndpointValidationError{ + field: "HealthCheckConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// EndpointValidationError is the validation error returned by +// Endpoint.Validate if the designated constraints aren't met. +type EndpointValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EndpointValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EndpointValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EndpointValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EndpointValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EndpointValidationError) ErrorName() string { return "EndpointValidationError" } + +// Error satisfies the builtin error interface +func (e EndpointValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEndpoint.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EndpointValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EndpointValidationError{} + +// Validate checks the field values on LbEndpoint with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *LbEndpoint) Validate() error { + if m == nil { + return nil + } + + // no validation rules for HealthStatus + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LbEndpointValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if wrapper := m.GetLoadBalancingWeight(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return LbEndpointValidationError{ + field: "LoadBalancingWeight", + reason: "value must be greater than or equal to 1", + } + } + + } + + switch m.HostIdentifier.(type) { + + case *LbEndpoint_Endpoint: + + if v, ok := interface{}(m.GetEndpoint()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LbEndpointValidationError{ + field: "Endpoint", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *LbEndpoint_EndpointName: + // no validation rules for EndpointName + + } + + return nil +} + +// LbEndpointValidationError is the validation error returned by +// LbEndpoint.Validate if the designated constraints aren't met. +type LbEndpointValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LbEndpointValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LbEndpointValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LbEndpointValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LbEndpointValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LbEndpointValidationError) ErrorName() string { return "LbEndpointValidationError" } + +// Error satisfies the builtin error interface +func (e LbEndpointValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLbEndpoint.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LbEndpointValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LbEndpointValidationError{} + +// Validate checks the field values on LocalityLbEndpoints with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *LocalityLbEndpoints) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetLocality()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LocalityLbEndpointsValidationError{ + field: "Locality", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetLbEndpoints() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LocalityLbEndpointsValidationError{ + field: fmt.Sprintf("LbEndpoints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if wrapper := m.GetLoadBalancingWeight(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return LocalityLbEndpointsValidationError{ + field: "LoadBalancingWeight", + reason: "value must be greater than or equal to 1", + } + } + + } + + if m.GetPriority() > 128 { + return LocalityLbEndpointsValidationError{ + field: "Priority", + reason: "value must be less than or equal to 128", + } + } + + if v, ok := interface{}(m.GetProximity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LocalityLbEndpointsValidationError{ + field: "Proximity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// LocalityLbEndpointsValidationError is the validation error returned by +// LocalityLbEndpoints.Validate if the designated constraints aren't met. +type LocalityLbEndpointsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LocalityLbEndpointsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LocalityLbEndpointsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LocalityLbEndpointsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LocalityLbEndpointsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LocalityLbEndpointsValidationError) ErrorName() string { + return "LocalityLbEndpointsValidationError" +} + +// Error satisfies the builtin error interface +func (e LocalityLbEndpointsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLocalityLbEndpoints.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LocalityLbEndpointsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LocalityLbEndpointsValidationError{} + +// Validate checks the field values on Endpoint_HealthCheckConfig with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Endpoint_HealthCheckConfig) Validate() error { + if m == nil { + return nil + } + + if m.GetPortValue() > 65535 { + return Endpoint_HealthCheckConfigValidationError{ + field: "PortValue", + reason: "value must be less than or equal to 65535", + } + } + + return nil +} + +// Endpoint_HealthCheckConfigValidationError is the validation error returned +// by Endpoint_HealthCheckConfig.Validate if the designated constraints aren't met. +type Endpoint_HealthCheckConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Endpoint_HealthCheckConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Endpoint_HealthCheckConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Endpoint_HealthCheckConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Endpoint_HealthCheckConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Endpoint_HealthCheckConfigValidationError) ErrorName() string { + return "Endpoint_HealthCheckConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Endpoint_HealthCheckConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEndpoint_HealthCheckConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Endpoint_HealthCheckConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Endpoint_HealthCheckConfigValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,20 +1,13 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/endpoint/endpoint.proto -package endpoint +package envoy_api_v2_endpoint import ( - bytes "bytes" fmt "fmt" - io "io" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" ) // Reference imports to suppress errors if they are not otherwise used. @@ -26,1707 +19,22 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -// Upstream host identifier. -type Endpoint struct { - // The upstream host address. - // - // .. attention:: - // - // The form of host address depends on the given cluster type. For STATIC or EDS, - // it is expected to be a direct IP address (or something resolvable by the - // specified :ref:`resolver ` - // in the Address). For LOGICAL or STRICT DNS, it is expected to be hostname, - // and will be resolved via DNS. - Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // The optional health check configuration is used as configuration for the - // health checker to contact the health checked host. - // - // .. attention:: - // - // This takes into effect only for upstream clusters with - // :ref:`active health checking ` enabled. - HealthCheckConfig *Endpoint_HealthCheckConfig `protobuf:"bytes,2,opt,name=health_check_config,json=healthCheckConfig,proto3" json:"health_check_config,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Endpoint) Reset() { *m = Endpoint{} } -func (m *Endpoint) String() string { return proto.CompactTextString(m) } -func (*Endpoint) ProtoMessage() {} -func (*Endpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_a9d2a3e4ee06324f, []int{0} -} -func (m *Endpoint) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Endpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Endpoint.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Endpoint) XXX_Merge(src proto.Message) { - xxx_messageInfo_Endpoint.Merge(m, src) -} -func (m *Endpoint) XXX_Size() int { - return m.Size() -} -func (m *Endpoint) XXX_DiscardUnknown() { - xxx_messageInfo_Endpoint.DiscardUnknown(m) -} - -var xxx_messageInfo_Endpoint proto.InternalMessageInfo - -func (m *Endpoint) GetAddress() *core.Address { - if m != nil { - return m.Address - } - return nil -} - -func (m *Endpoint) GetHealthCheckConfig() *Endpoint_HealthCheckConfig { - if m != nil { - return m.HealthCheckConfig - } - return nil -} - -// The optional health check configuration. -type Endpoint_HealthCheckConfig struct { - // Optional alternative health check port value. - // - // By default the health check address port of an upstream host is the same - // as the host's serving address port. This provides an alternative health - // check port. Setting this with a non-zero value allows an upstream host - // to have different health check address port. - PortValue uint32 `protobuf:"varint,1,opt,name=port_value,json=portValue,proto3" json:"port_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Endpoint_HealthCheckConfig) Reset() { *m = Endpoint_HealthCheckConfig{} } -func (m *Endpoint_HealthCheckConfig) String() string { return proto.CompactTextString(m) } -func (*Endpoint_HealthCheckConfig) ProtoMessage() {} -func (*Endpoint_HealthCheckConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_a9d2a3e4ee06324f, []int{0, 0} -} -func (m *Endpoint_HealthCheckConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Endpoint_HealthCheckConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Endpoint_HealthCheckConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Endpoint_HealthCheckConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_Endpoint_HealthCheckConfig.Merge(m, src) -} -func (m *Endpoint_HealthCheckConfig) XXX_Size() int { - return m.Size() -} -func (m *Endpoint_HealthCheckConfig) XXX_DiscardUnknown() { - xxx_messageInfo_Endpoint_HealthCheckConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_Endpoint_HealthCheckConfig proto.InternalMessageInfo - -func (m *Endpoint_HealthCheckConfig) GetPortValue() uint32 { - if m != nil { - return m.PortValue - } - return 0 -} - -// An Endpoint that Envoy can route traffic to. -type LbEndpoint struct { - // Upstream host identifier or a named reference. - // - // Types that are valid to be assigned to HostIdentifier: - // *LbEndpoint_Endpoint - // *LbEndpoint_EndpointName - HostIdentifier isLbEndpoint_HostIdentifier `protobuf_oneof:"host_identifier"` - // Optional health status when known and supplied by EDS server. - HealthStatus core.HealthStatus `protobuf:"varint,2,opt,name=health_status,json=healthStatus,proto3,enum=envoy.api.v2.core.HealthStatus" json:"health_status,omitempty"` - // The endpoint metadata specifies values that may be used by the load - // balancer to select endpoints in a cluster for a given request. The filter - // name should be specified as *envoy.lb*. An example boolean key-value pair - // is *canary*, providing the optional canary status of the upstream host. - // This may be matched against in a route's - // :ref:`RouteAction ` metadata_match field - // to subset the endpoints considered in cluster load balancing. - Metadata *core.Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` - // The optional load balancing weight of the upstream host, in the range 1 - - // 128. Envoy uses the load balancing weight in some of the built in load - // balancers. The load balancing weight for an endpoint is divided by the sum - // of the weights of all endpoints in the endpoint's locality to produce a - // percentage of traffic for the endpoint. This percentage is then further - // weighted by the endpoint's locality's load balancing weight from - // LocalityLbEndpoints. If unspecified, each host is presumed to have equal - // weight in a locality. - // - // .. attention:: - // - // The limit of 128 is somewhat arbitrary, but is applied due to performance - // concerns with the current implementation and can be removed when - // `this issue `_ is fixed. - LoadBalancingWeight *types.UInt32Value `protobuf:"bytes,4,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LbEndpoint) Reset() { *m = LbEndpoint{} } -func (m *LbEndpoint) String() string { return proto.CompactTextString(m) } -func (*LbEndpoint) ProtoMessage() {} -func (*LbEndpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_a9d2a3e4ee06324f, []int{1} -} -func (m *LbEndpoint) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LbEndpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LbEndpoint.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *LbEndpoint) XXX_Merge(src proto.Message) { - xxx_messageInfo_LbEndpoint.Merge(m, src) -} -func (m *LbEndpoint) XXX_Size() int { - return m.Size() -} -func (m *LbEndpoint) XXX_DiscardUnknown() { - xxx_messageInfo_LbEndpoint.DiscardUnknown(m) -} - -var xxx_messageInfo_LbEndpoint proto.InternalMessageInfo - -type isLbEndpoint_HostIdentifier interface { - isLbEndpoint_HostIdentifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type LbEndpoint_Endpoint struct { - Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3,oneof"` -} -type LbEndpoint_EndpointName struct { - EndpointName string `protobuf:"bytes,5,opt,name=endpoint_name,json=endpointName,proto3,oneof"` -} - -func (*LbEndpoint_Endpoint) isLbEndpoint_HostIdentifier() {} -func (*LbEndpoint_EndpointName) isLbEndpoint_HostIdentifier() {} - -func (m *LbEndpoint) GetHostIdentifier() isLbEndpoint_HostIdentifier { - if m != nil { - return m.HostIdentifier - } - return nil -} - -func (m *LbEndpoint) GetEndpoint() *Endpoint { - if x, ok := m.GetHostIdentifier().(*LbEndpoint_Endpoint); ok { - return x.Endpoint - } - return nil -} - -func (m *LbEndpoint) GetEndpointName() string { - if x, ok := m.GetHostIdentifier().(*LbEndpoint_EndpointName); ok { - return x.EndpointName - } - return "" -} - -func (m *LbEndpoint) GetHealthStatus() core.HealthStatus { - if m != nil { - return m.HealthStatus - } - return core.HealthStatus_UNKNOWN -} - -func (m *LbEndpoint) GetMetadata() *core.Metadata { - if m != nil { - return m.Metadata - } - return nil -} - -func (m *LbEndpoint) GetLoadBalancingWeight() *types.UInt32Value { - if m != nil { - return m.LoadBalancingWeight - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*LbEndpoint) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _LbEndpoint_OneofMarshaler, _LbEndpoint_OneofUnmarshaler, _LbEndpoint_OneofSizer, []interface{}{ - (*LbEndpoint_Endpoint)(nil), - (*LbEndpoint_EndpointName)(nil), - } -} - -func _LbEndpoint_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*LbEndpoint) - // host_identifier - switch x := m.HostIdentifier.(type) { - case *LbEndpoint_Endpoint: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Endpoint); err != nil { - return err - } - case *LbEndpoint_EndpointName: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.EndpointName) - case nil: - default: - return fmt.Errorf("LbEndpoint.HostIdentifier has unexpected type %T", x) - } - return nil -} - -func _LbEndpoint_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*LbEndpoint) - switch tag { - case 1: // host_identifier.endpoint - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Endpoint) - err := b.DecodeMessage(msg) - m.HostIdentifier = &LbEndpoint_Endpoint{msg} - return true, err - case 5: // host_identifier.endpoint_name - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HostIdentifier = &LbEndpoint_EndpointName{x} - return true, err - default: - return false, nil - } -} - -func _LbEndpoint_OneofSizer(msg proto.Message) (n int) { - m := msg.(*LbEndpoint) - // host_identifier - switch x := m.HostIdentifier.(type) { - case *LbEndpoint_Endpoint: - s := proto.Size(x.Endpoint) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *LbEndpoint_EndpointName: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.EndpointName))) - n += len(x.EndpointName) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// A group of endpoints belonging to a Locality. -// One can have multiple LocalityLbEndpoints for a locality, but this is -// generally only done if the different groups need to have different load -// balancing weights or different priorities. -type LocalityLbEndpoints struct { - // Identifies location of where the upstream hosts run. - Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"` - // The group of endpoints belonging to the locality specified. - LbEndpoints []LbEndpoint `protobuf:"bytes,2,rep,name=lb_endpoints,json=lbEndpoints,proto3" json:"lb_endpoints"` - // Optional: Per priority/region/zone/sub_zone weight - range 1-128. The load - // balancing weight for a locality is divided by the sum of the weights of all - // localities at the same priority level to produce the effective percentage - // of traffic for the locality. - // - // Locality weights are only considered when :ref:`locality weighted load - // balancing ` is - // configured. These weights are ignored otherwise. If no weights are - // specified when locality weighted load balancing is enabled, the locality is - // assigned no load. - // - // .. attention:: - // - // The limit of 128 is somewhat arbitrary, but is applied due to performance - // concerns with the current implementation and can be removed when - // `this issue `_ is fixed. - LoadBalancingWeight *types.UInt32Value `protobuf:"bytes,3,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"` - // Optional: the priority for this LocalityLbEndpoints. If unspecified this will - // default to the highest priority (0). - // - // Under usual circumstances, Envoy will only select endpoints for the highest - // priority (0). In the event all endpoints for a particular priority are - // unavailable/unhealthy, Envoy will fail over to selecting endpoints for the - // next highest priority group. - // - // Priorities should range from 0 (highest) to N (lowest) without skipping. - Priority uint32 `protobuf:"varint,5,opt,name=priority,proto3" json:"priority,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LocalityLbEndpoints) Reset() { *m = LocalityLbEndpoints{} } -func (m *LocalityLbEndpoints) String() string { return proto.CompactTextString(m) } -func (*LocalityLbEndpoints) ProtoMessage() {} -func (*LocalityLbEndpoints) Descriptor() ([]byte, []int) { - return fileDescriptor_a9d2a3e4ee06324f, []int{2} -} -func (m *LocalityLbEndpoints) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LocalityLbEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LocalityLbEndpoints.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *LocalityLbEndpoints) XXX_Merge(src proto.Message) { - xxx_messageInfo_LocalityLbEndpoints.Merge(m, src) -} -func (m *LocalityLbEndpoints) XXX_Size() int { - return m.Size() -} -func (m *LocalityLbEndpoints) XXX_DiscardUnknown() { - xxx_messageInfo_LocalityLbEndpoints.DiscardUnknown(m) -} - -var xxx_messageInfo_LocalityLbEndpoints proto.InternalMessageInfo - -func (m *LocalityLbEndpoints) GetLocality() *core.Locality { - if m != nil { - return m.Locality - } - return nil -} - -func (m *LocalityLbEndpoints) GetLbEndpoints() []LbEndpoint { - if m != nil { - return m.LbEndpoints - } - return nil -} - -func (m *LocalityLbEndpoints) GetLoadBalancingWeight() *types.UInt32Value { - if m != nil { - return m.LoadBalancingWeight - } - return nil -} - -func (m *LocalityLbEndpoints) GetPriority() uint32 { - if m != nil { - return m.Priority - } - return 0 -} - -func init() { - proto.RegisterType((*Endpoint)(nil), "envoy.api.v2.endpoint.Endpoint") - proto.RegisterType((*Endpoint_HealthCheckConfig)(nil), "envoy.api.v2.endpoint.Endpoint.HealthCheckConfig") - proto.RegisterType((*LbEndpoint)(nil), "envoy.api.v2.endpoint.LbEndpoint") - proto.RegisterType((*LocalityLbEndpoints)(nil), "envoy.api.v2.endpoint.LocalityLbEndpoints") -} +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("envoy/api/v2/endpoint/endpoint.proto", fileDescriptor_a9d2a3e4ee06324f) } var fileDescriptor_a9d2a3e4ee06324f = []byte{ - // 591 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0xc1, 0x6e, 0xd3, 0x40, - 0x10, 0xed, 0xd6, 0x4d, 0x9b, 0x6e, 0x12, 0x50, 0x1c, 0x2a, 0xac, 0x50, 0x25, 0x25, 0x14, 0x14, - 0xe5, 0xb0, 0x16, 0x29, 0x12, 0x27, 0x84, 0x70, 0x41, 0x0a, 0xa8, 0xa0, 0xc8, 0x08, 0x90, 0x38, - 0x60, 0xad, 0xed, 0x8d, 0xbd, 0xc2, 0xf1, 0x5a, 0xf6, 0x26, 0x25, 0xb7, 0x7e, 0x0b, 0x27, 0xbe, - 0x81, 0x13, 0xc7, 0x1e, 0xf9, 0x02, 0x84, 0xa2, 0x5e, 0xf8, 0x8a, 0x22, 0xaf, 0xbd, 0x6e, 0xda, - 0xa4, 0xe2, 0xc2, 0x6d, 0xbc, 0xf3, 0xde, 0xcc, 0x7b, 0xcf, 0x03, 0xf7, 0x49, 0x38, 0x65, 0x33, - 0x1d, 0x47, 0x54, 0x9f, 0xf6, 0x75, 0x12, 0xba, 0x11, 0xa3, 0x21, 0x2f, 0x0a, 0x14, 0xc5, 0x8c, - 0x33, 0x75, 0x47, 0xa0, 0x10, 0x8e, 0x28, 0x9a, 0xf6, 0x91, 0x6c, 0x36, 0xdb, 0x97, 0xc8, 0x0e, - 0x8b, 0x89, 0x8e, 0x5d, 0x37, 0x26, 0x49, 0x92, 0xf1, 0x9a, 0xbb, 0xcb, 0x00, 0x1b, 0x27, 0x24, - 0xef, 0xee, 0x2f, 0x77, 0x7d, 0x82, 0x03, 0xee, 0x5b, 0x8e, 0x4f, 0x9c, 0xcf, 0x39, 0xaa, 0xe5, - 0x31, 0xe6, 0x05, 0x44, 0x17, 0x5f, 0xf6, 0x64, 0xa4, 0x1f, 0xc7, 0x38, 0x8a, 0x48, 0x2c, 0x77, - 0xdc, 0x9e, 0xe2, 0x80, 0xba, 0x98, 0x13, 0x5d, 0x16, 0x79, 0xe3, 0x96, 0xc7, 0x3c, 0x26, 0x4a, - 0x3d, 0xad, 0xb2, 0xd7, 0xce, 0x19, 0x80, 0xe5, 0x17, 0xb9, 0x01, 0xf5, 0x11, 0xdc, 0xca, 0x05, - 0x6b, 0x60, 0x0f, 0x74, 0x2b, 0xfd, 0x26, 0xba, 0xe4, 0x34, 0xd5, 0x84, 0x9e, 0x65, 0x08, 0x53, - 0x42, 0x55, 0x0c, 0x1b, 0x8b, 0x3a, 0x2d, 0x87, 0x85, 0x23, 0xea, 0x69, 0xeb, 0x62, 0xc2, 0x43, - 0xb4, 0x32, 0x2b, 0x24, 0x77, 0xa2, 0x81, 0xa0, 0x1e, 0xa6, 0xcc, 0x43, 0x41, 0x34, 0xeb, 0xfe, - 0xd5, 0xa7, 0xe6, 0x53, 0x58, 0x5f, 0xc2, 0xa9, 0x3d, 0x08, 0x23, 0x16, 0x73, 0x6b, 0x8a, 0x83, - 0x09, 0x11, 0x82, 0x6b, 0x46, 0xe5, 0xfb, 0x9f, 0x1f, 0xca, 0x66, 0x6f, 0x43, 0x3b, 0x3f, 0x57, - 0xcc, 0xed, 0xb4, 0xfd, 0x3e, 0xed, 0x76, 0xce, 0xd6, 0x21, 0x3c, 0xb2, 0x0b, 0xa3, 0x4f, 0x60, - 0x59, 0x2a, 0xc9, 0x9d, 0xb6, 0xff, 0xa1, 0x73, 0xb0, 0x66, 0x16, 0x14, 0xf5, 0x3e, 0xac, 0xc9, - 0xda, 0x0a, 0xf1, 0x98, 0x68, 0xa5, 0x3d, 0xd0, 0xdd, 0x1e, 0xac, 0x99, 0x55, 0xf9, 0xfc, 0x06, - 0x8f, 0x89, 0xfa, 0x1c, 0xd6, 0xf2, 0x60, 0x12, 0x8e, 0xf9, 0x24, 0x11, 0x91, 0xdc, 0xb8, 0xba, - 0x4a, 0x84, 0x9a, 0xb9, 0x7b, 0x2b, 0x60, 0x66, 0xd5, 0x5f, 0xf8, 0x52, 0x1f, 0xc3, 0xf2, 0x98, - 0x70, 0xec, 0x62, 0x8e, 0x35, 0x45, 0x68, 0xbd, 0xb3, 0x62, 0xc0, 0xeb, 0x1c, 0x62, 0x16, 0x60, - 0xf5, 0x13, 0xdc, 0x09, 0x18, 0x76, 0x2d, 0x1b, 0x07, 0x38, 0x74, 0x68, 0xe8, 0x59, 0xc7, 0x84, - 0x7a, 0x3e, 0xd7, 0x36, 0xc4, 0x94, 0x5d, 0x94, 0x5d, 0x12, 0x92, 0x97, 0x84, 0xde, 0xbd, 0x0c, - 0xf9, 0x41, 0x5f, 0x04, 0x66, 0x54, 0xd3, 0x20, 0xb7, 0x7a, 0x25, 0xed, 0x04, 0x74, 0x81, 0xd9, - 0x48, 0x07, 0x19, 0x72, 0xce, 0x07, 0x31, 0xc6, 0xa8, 0xc3, 0x9b, 0x3e, 0x4b, 0xb8, 0x45, 0x5d, - 0x12, 0x72, 0x3a, 0xa2, 0x24, 0xee, 0x7c, 0x5d, 0x87, 0x8d, 0x23, 0xe6, 0xe0, 0x80, 0xf2, 0xd9, - 0x45, 0xdc, 0xc2, 0x43, 0x90, 0x3f, 0xe7, 0x79, 0xaf, 0xf2, 0x20, 0x99, 0x66, 0x01, 0x56, 0x5f, - 0xc1, 0x6a, 0x60, 0x5b, 0x32, 0xd5, 0x34, 0x41, 0xa5, 0x5b, 0xe9, 0xdf, 0xbd, 0xe6, 0x67, 0x5d, - 0xac, 0x34, 0x36, 0x4e, 0x7f, 0xb5, 0xd7, 0xcc, 0x4a, 0xb0, 0x20, 0xe2, 0xda, 0x3c, 0x94, 0xff, - 0x92, 0x87, 0xfa, 0x00, 0x96, 0xa3, 0x98, 0xb2, 0x38, 0x35, 0x59, 0x12, 0xd7, 0x08, 0x53, 0x52, - 0xa9, 0xa7, 0x68, 0x27, 0xc0, 0x2c, 0x7a, 0xc6, 0xf0, 0xdb, 0xbc, 0x05, 0x4e, 0xe7, 0x2d, 0xf0, - 0x73, 0xde, 0x02, 0xbf, 0xe7, 0x2d, 0x00, 0xef, 0x51, 0x96, 0x39, 0x8a, 0x62, 0xf6, 0x65, 0xb6, - 0xda, 0x9c, 0x51, 0x93, 0x4e, 0x86, 0xa9, 0xbe, 0x21, 0xf8, 0x58, 0xdc, 0xa3, 0xbd, 0x29, 0x24, - 0x1f, 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xa0, 0xb0, 0xf4, 0xcc, 0xbe, 0x04, 0x00, 0x00, -} - -func (this *Endpoint) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Endpoint) - if !ok { - that2, ok := that.(Endpoint) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Address.Equal(that1.Address) { - return false - } - if !this.HealthCheckConfig.Equal(that1.HealthCheckConfig) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Endpoint_HealthCheckConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Endpoint_HealthCheckConfig) - if !ok { - that2, ok := that.(Endpoint_HealthCheckConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.PortValue != that1.PortValue { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *LbEndpoint) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*LbEndpoint) - if !ok { - that2, ok := that.(LbEndpoint) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.HostIdentifier == nil { - if this.HostIdentifier != nil { - return false - } - } else if this.HostIdentifier == nil { - return false - } else if !this.HostIdentifier.Equal(that1.HostIdentifier) { - return false - } - if this.HealthStatus != that1.HealthStatus { - return false - } - if !this.Metadata.Equal(that1.Metadata) { - return false - } - if !this.LoadBalancingWeight.Equal(that1.LoadBalancingWeight) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *LbEndpoint_Endpoint) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*LbEndpoint_Endpoint) - if !ok { - that2, ok := that.(LbEndpoint_Endpoint) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Endpoint.Equal(that1.Endpoint) { - return false - } - return true -} -func (this *LbEndpoint_EndpointName) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*LbEndpoint_EndpointName) - if !ok { - that2, ok := that.(LbEndpoint_EndpointName) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.EndpointName != that1.EndpointName { - return false - } - return true -} -func (this *LocalityLbEndpoints) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*LocalityLbEndpoints) - if !ok { - that2, ok := that.(LocalityLbEndpoints) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Locality.Equal(that1.Locality) { - return false - } - if len(this.LbEndpoints) != len(that1.LbEndpoints) { - return false - } - for i := range this.LbEndpoints { - if !this.LbEndpoints[i].Equal(&that1.LbEndpoints[i]) { - return false - } - } - if !this.LoadBalancingWeight.Equal(that1.LoadBalancingWeight) { - return false - } - if this.Priority != that1.Priority { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *Endpoint) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Endpoint) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Address != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.Address.Size())) - n1, err := m.Address.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.HealthCheckConfig != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.HealthCheckConfig.Size())) - n2, err := m.HealthCheckConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Endpoint_HealthCheckConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Endpoint_HealthCheckConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.PortValue != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.PortValue)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil + // 155 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0x4f, 0xcd, 0x4b, 0x29, 0xc8, 0xcf, 0xcc, + 0x2b, 0x81, 0x33, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x44, 0xc1, 0xaa, 0xf4, 0x12, 0x0b, + 0x32, 0xf5, 0xca, 0x8c, 0xf4, 0x60, 0x92, 0x52, 0xb2, 0xa5, 0x29, 0x05, 0x89, 0xfa, 0x89, 0x79, + 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0xfa, 0xc5, 0x25, 0x89, 0x25, 0xa5, 0xc5, + 0x10, 0x5d, 0x52, 0xfa, 0xf8, 0xcd, 0x8e, 0x4f, 0xce, 0xcf, 0x2d, 0xc8, 0xcf, 0x4b, 0xcd, 0x2b, + 0x81, 0x6a, 0x70, 0xb2, 0xdb, 0xd5, 0x70, 0xe2, 0x22, 0x1b, 0x93, 0x00, 0x23, 0x97, 0x72, 0x66, + 0xbe, 0x1e, 0x58, 0x77, 0x41, 0x51, 0x7e, 0x45, 0xa5, 0x1e, 0x56, 0xeb, 0x9d, 0x78, 0x5d, 0xa1, + 0xac, 0x00, 0x90, 0xee, 0x00, 0xc6, 0x00, 0xc6, 0x24, 0x36, 0xb0, 0x41, 0xc6, 0x80, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x0e, 0x68, 0x62, 0x1a, 0xd7, 0x00, 0x00, 0x00, } - -func (m *LbEndpoint) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LbEndpoint) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.HostIdentifier != nil { - nn3, err := m.HostIdentifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn3 - } - if m.HealthStatus != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.HealthStatus)) - } - if m.Metadata != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.Metadata.Size())) - n4, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.LoadBalancingWeight != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.LoadBalancingWeight.Size())) - n5, err := m.LoadBalancingWeight.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *LbEndpoint_Endpoint) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Endpoint != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.Endpoint.Size())) - n6, err := m.Endpoint.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - return i, nil -} -func (m *LbEndpoint_EndpointName) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x2a - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(len(m.EndpointName))) - i += copy(dAtA[i:], m.EndpointName) - return i, nil -} -func (m *LocalityLbEndpoints) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LocalityLbEndpoints) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Locality != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.Locality.Size())) - n7, err := m.Locality.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if len(m.LbEndpoints) > 0 { - for _, msg := range m.LbEndpoints { - dAtA[i] = 0x12 - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.LoadBalancingWeight != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.LoadBalancingWeight.Size())) - n8, err := m.LoadBalancingWeight.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.Priority != 0 { - dAtA[i] = 0x28 - i++ - i = encodeVarintEndpoint(dAtA, i, uint64(m.Priority)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintEndpoint(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Endpoint) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Address != nil { - l = m.Address.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - if m.HealthCheckConfig != nil { - l = m.HealthCheckConfig.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Endpoint_HealthCheckConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PortValue != 0 { - n += 1 + sovEndpoint(uint64(m.PortValue)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *LbEndpoint) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HostIdentifier != nil { - n += m.HostIdentifier.Size() - } - if m.HealthStatus != 0 { - n += 1 + sovEndpoint(uint64(m.HealthStatus)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - if m.LoadBalancingWeight != nil { - l = m.LoadBalancingWeight.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *LbEndpoint_Endpoint) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - return n -} -func (m *LbEndpoint_EndpointName) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.EndpointName) - n += 1 + l + sovEndpoint(uint64(l)) - return n -} -func (m *LocalityLbEndpoints) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Locality != nil { - l = m.Locality.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - if len(m.LbEndpoints) > 0 { - for _, e := range m.LbEndpoints { - l = e.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - } - if m.LoadBalancingWeight != nil { - l = m.LoadBalancingWeight.Size() - n += 1 + l + sovEndpoint(uint64(l)) - } - if m.Priority != 0 { - n += 1 + sovEndpoint(uint64(m.Priority)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovEndpoint(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozEndpoint(x uint64) (n int) { - return sovEndpoint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Endpoint) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Endpoint: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Endpoint: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Address == nil { - m.Address = &core.Address{} - } - if err := m.Address.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthCheckConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HealthCheckConfig == nil { - m.HealthCheckConfig = &Endpoint_HealthCheckConfig{} - } - if err := m.HealthCheckConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEndpoint(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Endpoint_HealthCheckConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HealthCheckConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PortValue", wireType) - } - m.PortValue = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PortValue |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipEndpoint(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LbEndpoint) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LbEndpoint: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LbEndpoint: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Endpoint{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HostIdentifier = &LbEndpoint_Endpoint{v} - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthStatus", wireType) - } - m.HealthStatus = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HealthStatus |= core.HealthStatus(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &core.Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancingWeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LoadBalancingWeight == nil { - m.LoadBalancingWeight = &types.UInt32Value{} - } - if err := m.LoadBalancingWeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndpointName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HostIdentifier = &LbEndpoint_EndpointName{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipEndpoint(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LocalityLbEndpoints) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LocalityLbEndpoints: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LocalityLbEndpoints: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locality", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Locality == nil { - m.Locality = &core.Locality{} - } - if err := m.Locality.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LbEndpoints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LbEndpoints = append(m.LbEndpoints, LbEndpoint{}) - if err := m.LbEndpoints[len(m.LbEndpoints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancingWeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEndpoint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEndpoint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LoadBalancingWeight == nil { - m.LoadBalancingWeight = &types.UInt32Value{} - } - if err := m.LoadBalancingWeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) - } - m.Priority = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEndpoint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Priority |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipEndpoint(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipEndpoint(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEndpoint - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEndpoint - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEndpoint - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthEndpoint - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthEndpoint - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowEndpoint - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipEndpoint(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthEndpoint - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthEndpoint = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowEndpoint = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/endpoint.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/endpoint/endpoint.proto -package endpoint +package envoy_api_v2_endpoint import ( "bytes" @@ -15,9 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" - - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -32,411 +30,8 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} - - _ = core.HealthStatus(0) + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on Endpoint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Endpoint) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return EndpointValidationError{ - field: "Address", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetHealthCheckConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return EndpointValidationError{ - field: "HealthCheckConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// EndpointValidationError is the validation error returned by -// Endpoint.Validate if the designated constraints aren't met. -type EndpointValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e EndpointValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e EndpointValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e EndpointValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e EndpointValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e EndpointValidationError) ErrorName() string { return "EndpointValidationError" } - -// Error satisfies the builtin error interface -func (e EndpointValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sEndpoint.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = EndpointValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = EndpointValidationError{} - -// Validate checks the field values on LbEndpoint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *LbEndpoint) Validate() error { - if m == nil { - return nil - } - - // no validation rules for HealthStatus - - { - tmp := m.GetMetadata() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return LbEndpointValidationError{ - field: "Metadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if wrapper := m.GetLoadBalancingWeight(); wrapper != nil { - - if val := wrapper.GetValue(); val < 1 || val > 128 { - return LbEndpointValidationError{ - field: "LoadBalancingWeight", - reason: "value must be inside range [1, 128]", - } - } - - } - - switch m.HostIdentifier.(type) { - - case *LbEndpoint_Endpoint: - - { - tmp := m.GetEndpoint() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return LbEndpointValidationError{ - field: "Endpoint", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *LbEndpoint_EndpointName: - // no validation rules for EndpointName - - } - - return nil -} - -// LbEndpointValidationError is the validation error returned by -// LbEndpoint.Validate if the designated constraints aren't met. -type LbEndpointValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e LbEndpointValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e LbEndpointValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e LbEndpointValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e LbEndpointValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e LbEndpointValidationError) ErrorName() string { return "LbEndpointValidationError" } - -// Error satisfies the builtin error interface -func (e LbEndpointValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sLbEndpoint.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = LbEndpointValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = LbEndpointValidationError{} - -// Validate checks the field values on LocalityLbEndpoints with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *LocalityLbEndpoints) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetLocality() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return LocalityLbEndpointsValidationError{ - field: "Locality", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetLbEndpoints() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return LocalityLbEndpointsValidationError{ - field: fmt.Sprintf("LbEndpoints[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if wrapper := m.GetLoadBalancingWeight(); wrapper != nil { - - if val := wrapper.GetValue(); val < 1 || val > 128 { - return LocalityLbEndpointsValidationError{ - field: "LoadBalancingWeight", - reason: "value must be inside range [1, 128]", - } - } - - } - - if m.GetPriority() > 128 { - return LocalityLbEndpointsValidationError{ - field: "Priority", - reason: "value must be less than or equal to 128", - } - } - - return nil -} - -// LocalityLbEndpointsValidationError is the validation error returned by -// LocalityLbEndpoints.Validate if the designated constraints aren't met. -type LocalityLbEndpointsValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e LocalityLbEndpointsValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e LocalityLbEndpointsValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e LocalityLbEndpointsValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e LocalityLbEndpointsValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e LocalityLbEndpointsValidationError) ErrorName() string { - return "LocalityLbEndpointsValidationError" -} - -// Error satisfies the builtin error interface -func (e LocalityLbEndpointsValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sLocalityLbEndpoints.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = LocalityLbEndpointsValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = LocalityLbEndpointsValidationError{} - -// Validate checks the field values on Endpoint_HealthCheckConfig with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Endpoint_HealthCheckConfig) Validate() error { - if m == nil { - return nil - } - - if m.GetPortValue() > 65535 { - return Endpoint_HealthCheckConfigValidationError{ - field: "PortValue", - reason: "value must be less than or equal to 65535", - } - } - - return nil -} - -// Endpoint_HealthCheckConfigValidationError is the validation error returned -// by Endpoint_HealthCheckConfig.Validate if the designated constraints aren't met. -type Endpoint_HealthCheckConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e Endpoint_HealthCheckConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e Endpoint_HealthCheckConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e Endpoint_HealthCheckConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e Endpoint_HealthCheckConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e Endpoint_HealthCheckConfigValidationError) ErrorName() string { - return "Endpoint_HealthCheckConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e Endpoint_HealthCheckConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sEndpoint_HealthCheckConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = Endpoint_HealthCheckConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = Endpoint_HealthCheckConfigValidationError{} +// define the regex for a UUID once up-front +var _endpoint_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,20 +1,17 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/endpoint/load_report.proto -package endpoint +package envoy_api_v2_endpoint import ( - encoding_binary "encoding/binary" fmt "fmt" - io "io" - math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -26,46 +23,20 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// These are stats Envoy reports to GLB every so often. Report frequency is -// defined by -// :ref:`LoadStatsResponse.load_reporting_interval`. -// Stats per upstream region/zone and optionally per subzone. -// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs. type UpstreamLocalityStats struct { - // Name of zone, region and optionally endpoint group these metrics were - // collected from. Zone and region names could be empty if unknown. - Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"` - // The total number of requests sent by this Envoy since the last report. This - // information is aggregated over all the upstream Endpoints. total_requests - // can be inferred from: - // - // .. code-block:: none - // - // total_requests = total_successful_requests + total_requests_in_progress + - // total_error_requests - // - // The total number of requests successfully completed by the endpoints in the - // locality. - TotalSuccessfulRequests uint64 `protobuf:"varint,2,opt,name=total_successful_requests,json=totalSuccessfulRequests,proto3" json:"total_successful_requests,omitempty"` - // The total number of unfinished requests - TotalRequestsInProgress uint64 `protobuf:"varint,3,opt,name=total_requests_in_progress,json=totalRequestsInProgress,proto3" json:"total_requests_in_progress,omitempty"` - // The total number of requests that failed due to errors at the endpoint, - // aggregated over all endpoints in the locality. - TotalErrorRequests uint64 `protobuf:"varint,4,opt,name=total_error_requests,json=totalErrorRequests,proto3" json:"total_error_requests,omitempty"` - // Stats for multi-dimensional load balancing. - LoadMetricStats []*EndpointLoadMetricStats `protobuf:"bytes,5,rep,name=load_metric_stats,json=loadMetricStats,proto3" json:"load_metric_stats,omitempty"` - // Endpoint granularity stats information for this locality. This information - // is populated if the Server requests it by setting - // :ref:`LoadStatsResponse.report_endpoint_granularity`. - UpstreamEndpointStats []*UpstreamEndpointStats `protobuf:"bytes,7,rep,name=upstream_endpoint_stats,json=upstreamEndpointStats,proto3" json:"upstream_endpoint_stats,omitempty"` - // [#not-implemented-hide:] The priority of the endpoint group these metrics - // were collected from. - Priority uint32 `protobuf:"varint,6,opt,name=priority,proto3" json:"priority,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"` + TotalSuccessfulRequests uint64 `protobuf:"varint,2,opt,name=total_successful_requests,json=totalSuccessfulRequests,proto3" json:"total_successful_requests,omitempty"` + TotalRequestsInProgress uint64 `protobuf:"varint,3,opt,name=total_requests_in_progress,json=totalRequestsInProgress,proto3" json:"total_requests_in_progress,omitempty"` + TotalErrorRequests uint64 `protobuf:"varint,4,opt,name=total_error_requests,json=totalErrorRequests,proto3" json:"total_error_requests,omitempty"` + TotalIssuedRequests uint64 `protobuf:"varint,8,opt,name=total_issued_requests,json=totalIssuedRequests,proto3" json:"total_issued_requests,omitempty"` + LoadMetricStats []*EndpointLoadMetricStats `protobuf:"bytes,5,rep,name=load_metric_stats,json=loadMetricStats,proto3" json:"load_metric_stats,omitempty"` + UpstreamEndpointStats []*UpstreamEndpointStats `protobuf:"bytes,7,rep,name=upstream_endpoint_stats,json=upstreamEndpointStats,proto3" json:"upstream_endpoint_stats,omitempty"` + Priority uint32 `protobuf:"varint,6,opt,name=priority,proto3" json:"priority,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpstreamLocalityStats) Reset() { *m = UpstreamLocalityStats{} } @@ -74,26 +45,18 @@ func (*UpstreamLocalityStats) Descriptor() ([]byte, []int) { return fileDescriptor_5134f8f33d8f8d01, []int{0} } + func (m *UpstreamLocalityStats) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_UpstreamLocalityStats.Unmarshal(m, b) } func (m *UpstreamLocalityStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpstreamLocalityStats.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_UpstreamLocalityStats.Marshal(b, m, deterministic) } func (m *UpstreamLocalityStats) XXX_Merge(src proto.Message) { xxx_messageInfo_UpstreamLocalityStats.Merge(m, src) } func (m *UpstreamLocalityStats) XXX_Size() int { - return m.Size() + return xxx_messageInfo_UpstreamLocalityStats.Size(m) } func (m *UpstreamLocalityStats) XXX_DiscardUnknown() { xxx_messageInfo_UpstreamLocalityStats.DiscardUnknown(m) @@ -129,6 +92,13 @@ return 0 } +func (m *UpstreamLocalityStats) GetTotalIssuedRequests() uint64 { + if m != nil { + return m.TotalIssuedRequests + } + return 0 +} + func (m *UpstreamLocalityStats) GetLoadMetricStats() []*EndpointLoadMetricStats { if m != nil { return m.LoadMetricStats @@ -151,44 +121,16 @@ } type UpstreamEndpointStats struct { - // Upstream host address. - Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // Opaque and implementation dependent metadata of the - // endpoint. Envoy will pass this directly to the management server. - Metadata *types.Struct `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` - // The total number of requests successfully completed by the endpoint. A - // single HTTP or gRPC request or stream is counted as one request. A TCP - // connection is also treated as one request. There is no explicit - // total_requests field below for an endpoint, but it may be inferred from: - // - // .. code-block:: none - // - // total_requests = total_successful_requests + total_requests_in_progress + - // total_error_requests - // - // The total number of requests successfully completed by the endpoints in the - // locality. These include non-5xx responses for HTTP, where errors - // originate at the client and the endpoint responded successfully. For gRPC, - // the grpc-status values are those not covered by total_error_requests below. - TotalSuccessfulRequests uint64 `protobuf:"varint,2,opt,name=total_successful_requests,json=totalSuccessfulRequests,proto3" json:"total_successful_requests,omitempty"` - // The total number of unfinished requests for this endpoint. - TotalRequestsInProgress uint64 `protobuf:"varint,3,opt,name=total_requests_in_progress,json=totalRequestsInProgress,proto3" json:"total_requests_in_progress,omitempty"` - // The total number of requests that failed due to errors at the endpoint. - // For HTTP these are responses with 5xx status codes and for gRPC the - // grpc-status values: - // - // - DeadlineExceeded - // - Unimplemented - // - Internal - // - Unavailable - // - Unknown - // - DataLoss - TotalErrorRequests uint64 `protobuf:"varint,4,opt,name=total_error_requests,json=totalErrorRequests,proto3" json:"total_error_requests,omitempty"` - // Stats for multi-dimensional load balancing. - LoadMetricStats []*EndpointLoadMetricStats `protobuf:"bytes,5,rep,name=load_metric_stats,json=loadMetricStats,proto3" json:"load_metric_stats,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Metadata *_struct.Struct `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + TotalSuccessfulRequests uint64 `protobuf:"varint,2,opt,name=total_successful_requests,json=totalSuccessfulRequests,proto3" json:"total_successful_requests,omitempty"` + TotalRequestsInProgress uint64 `protobuf:"varint,3,opt,name=total_requests_in_progress,json=totalRequestsInProgress,proto3" json:"total_requests_in_progress,omitempty"` + TotalErrorRequests uint64 `protobuf:"varint,4,opt,name=total_error_requests,json=totalErrorRequests,proto3" json:"total_error_requests,omitempty"` + TotalIssuedRequests uint64 `protobuf:"varint,7,opt,name=total_issued_requests,json=totalIssuedRequests,proto3" json:"total_issued_requests,omitempty"` + LoadMetricStats []*EndpointLoadMetricStats `protobuf:"bytes,5,rep,name=load_metric_stats,json=loadMetricStats,proto3" json:"load_metric_stats,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UpstreamEndpointStats) Reset() { *m = UpstreamEndpointStats{} } @@ -197,26 +139,18 @@ func (*UpstreamEndpointStats) Descriptor() ([]byte, []int) { return fileDescriptor_5134f8f33d8f8d01, []int{1} } + func (m *UpstreamEndpointStats) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_UpstreamEndpointStats.Unmarshal(m, b) } func (m *UpstreamEndpointStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UpstreamEndpointStats.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_UpstreamEndpointStats.Marshal(b, m, deterministic) } func (m *UpstreamEndpointStats) XXX_Merge(src proto.Message) { xxx_messageInfo_UpstreamEndpointStats.Merge(m, src) } func (m *UpstreamEndpointStats) XXX_Size() int { - return m.Size() + return xxx_messageInfo_UpstreamEndpointStats.Size(m) } func (m *UpstreamEndpointStats) XXX_DiscardUnknown() { xxx_messageInfo_UpstreamEndpointStats.DiscardUnknown(m) @@ -231,7 +165,7 @@ return nil } -func (m *UpstreamEndpointStats) GetMetadata() *types.Struct { +func (m *UpstreamEndpointStats) GetMetadata() *_struct.Struct { if m != nil { return m.Metadata } @@ -259,6 +193,13 @@ return 0 } +func (m *UpstreamEndpointStats) GetTotalIssuedRequests() uint64 { + if m != nil { + return m.TotalIssuedRequests + } + return 0 +} + func (m *UpstreamEndpointStats) GetLoadMetricStats() []*EndpointLoadMetricStats { if m != nil { return m.LoadMetricStats @@ -266,18 +207,13 @@ return nil } -// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs. type EndpointLoadMetricStats struct { - // Name of the metric; may be empty. - MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName,proto3" json:"metric_name,omitempty"` - // Number of calls that finished and included this metric. - NumRequestsFinishedWithMetric uint64 `protobuf:"varint,2,opt,name=num_requests_finished_with_metric,json=numRequestsFinishedWithMetric,proto3" json:"num_requests_finished_with_metric,omitempty"` - // Sum of metric values across all calls that finished with this metric for - // load_reporting_interval. - TotalMetricValue float64 `protobuf:"fixed64,3,opt,name=total_metric_value,json=totalMetricValue,proto3" json:"total_metric_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MetricName string `protobuf:"bytes,1,opt,name=metric_name,json=metricName,proto3" json:"metric_name,omitempty"` + NumRequestsFinishedWithMetric uint64 `protobuf:"varint,2,opt,name=num_requests_finished_with_metric,json=numRequestsFinishedWithMetric,proto3" json:"num_requests_finished_with_metric,omitempty"` + TotalMetricValue float64 `protobuf:"fixed64,3,opt,name=total_metric_value,json=totalMetricValue,proto3" json:"total_metric_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *EndpointLoadMetricStats) Reset() { *m = EndpointLoadMetricStats{} } @@ -286,26 +222,18 @@ func (*EndpointLoadMetricStats) Descriptor() ([]byte, []int) { return fileDescriptor_5134f8f33d8f8d01, []int{2} } + func (m *EndpointLoadMetricStats) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_EndpointLoadMetricStats.Unmarshal(m, b) } func (m *EndpointLoadMetricStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EndpointLoadMetricStats.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_EndpointLoadMetricStats.Marshal(b, m, deterministic) } func (m *EndpointLoadMetricStats) XXX_Merge(src proto.Message) { xxx_messageInfo_EndpointLoadMetricStats.Merge(m, src) } func (m *EndpointLoadMetricStats) XXX_Size() int { - return m.Size() + return xxx_messageInfo_EndpointLoadMetricStats.Size(m) } func (m *EndpointLoadMetricStats) XXX_DiscardUnknown() { xxx_messageInfo_EndpointLoadMetricStats.DiscardUnknown(m) @@ -334,43 +262,16 @@ return 0 } -// Per cluster load stats. Envoy reports these stats a management server in a -// :ref:`LoadStatsRequest` -// [#not-implemented-hide:] Not configuration. TBD how to doc proto APIs. -// Next ID: 7 type ClusterStats struct { - // The name of the cluster. - ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` - // The eds_cluster_config service_name of the cluster. - // It's possible that two clusters send the same service_name to EDS, - // in that case, the management server is supposed to do aggregation on the load reports. - ClusterServiceName string `protobuf:"bytes,6,opt,name=cluster_service_name,json=clusterServiceName,proto3" json:"cluster_service_name,omitempty"` - // Need at least one. - UpstreamLocalityStats []*UpstreamLocalityStats `protobuf:"bytes,2,rep,name=upstream_locality_stats,json=upstreamLocalityStats,proto3" json:"upstream_locality_stats,omitempty"` - // Cluster-level stats such as total_successful_requests may be computed by - // summing upstream_locality_stats. In addition, below there are additional - // cluster-wide stats. The following total_requests equality holds at the - // cluster-level: - // - // .. code-block:: none - // - // sum_locality(total_successful_requests) + sum_locality(total_requests_in_progress) + - // sum_locality(total_error_requests) + total_dropped_requests` - // - // The total number of dropped requests. This covers requests - // deliberately dropped by the drop_overload policy and circuit breaking. - TotalDroppedRequests uint64 `protobuf:"varint,3,opt,name=total_dropped_requests,json=totalDroppedRequests,proto3" json:"total_dropped_requests,omitempty"` - // Information about deliberately dropped requests for each category specified - // in the DropOverload policy. - DroppedRequests []*ClusterStats_DroppedRequests `protobuf:"bytes,5,rep,name=dropped_requests,json=droppedRequests,proto3" json:"dropped_requests,omitempty"` - // Period over which the actual load report occurred. This will be guaranteed to include every - // request reported. Due to system load and delays between the *LoadStatsRequest* sent from Envoy - // and the *LoadStatsResponse* message sent from the management server, this may be longer than - // the requested load reporting interval in the *LoadStatsResponse*. - LoadReportInterval *types.Duration `protobuf:"bytes,4,opt,name=load_report_interval,json=loadReportInterval,proto3" json:"load_report_interval,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + ClusterServiceName string `protobuf:"bytes,6,opt,name=cluster_service_name,json=clusterServiceName,proto3" json:"cluster_service_name,omitempty"` + UpstreamLocalityStats []*UpstreamLocalityStats `protobuf:"bytes,2,rep,name=upstream_locality_stats,json=upstreamLocalityStats,proto3" json:"upstream_locality_stats,omitempty"` + TotalDroppedRequests uint64 `protobuf:"varint,3,opt,name=total_dropped_requests,json=totalDroppedRequests,proto3" json:"total_dropped_requests,omitempty"` + DroppedRequests []*ClusterStats_DroppedRequests `protobuf:"bytes,5,rep,name=dropped_requests,json=droppedRequests,proto3" json:"dropped_requests,omitempty"` + LoadReportInterval *duration.Duration `protobuf:"bytes,4,opt,name=load_report_interval,json=loadReportInterval,proto3" json:"load_report_interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ClusterStats) Reset() { *m = ClusterStats{} } @@ -379,26 +280,18 @@ func (*ClusterStats) Descriptor() ([]byte, []int) { return fileDescriptor_5134f8f33d8f8d01, []int{3} } + func (m *ClusterStats) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ClusterStats.Unmarshal(m, b) } func (m *ClusterStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ClusterStats.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ClusterStats.Marshal(b, m, deterministic) } func (m *ClusterStats) XXX_Merge(src proto.Message) { xxx_messageInfo_ClusterStats.Merge(m, src) } func (m *ClusterStats) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ClusterStats.Size(m) } func (m *ClusterStats) XXX_DiscardUnknown() { xxx_messageInfo_ClusterStats.DiscardUnknown(m) @@ -441,7 +334,7 @@ return nil } -func (m *ClusterStats) GetLoadReportInterval() *types.Duration { +func (m *ClusterStats) GetLoadReportInterval() *duration.Duration { if m != nil { return m.LoadReportInterval } @@ -449,9 +342,7 @@ } type ClusterStats_DroppedRequests struct { - // Identifier for the policy specifying the drop. - Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` - // Total number of deliberately dropped requests for the category. + Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` DroppedCount uint64 `protobuf:"varint,2,opt,name=dropped_count,json=droppedCount,proto3" json:"dropped_count,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -464,26 +355,18 @@ func (*ClusterStats_DroppedRequests) Descriptor() ([]byte, []int) { return fileDescriptor_5134f8f33d8f8d01, []int{3, 0} } + func (m *ClusterStats_DroppedRequests) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ClusterStats_DroppedRequests.Unmarshal(m, b) } func (m *ClusterStats_DroppedRequests) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ClusterStats_DroppedRequests.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ClusterStats_DroppedRequests.Marshal(b, m, deterministic) } func (m *ClusterStats_DroppedRequests) XXX_Merge(src proto.Message) { xxx_messageInfo_ClusterStats_DroppedRequests.Merge(m, src) } func (m *ClusterStats_DroppedRequests) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ClusterStats_DroppedRequests.Size(m) } func (m *ClusterStats_DroppedRequests) XXX_DiscardUnknown() { xxx_messageInfo_ClusterStats_DroppedRequests.DiscardUnknown(m) @@ -518,1539 +401,56 @@ } var fileDescriptor_5134f8f33d8f8d01 = []byte{ - // 760 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0x4d, 0x6e, 0xd3, 0x40, - 0x18, 0x95, 0x93, 0xb4, 0x4d, 0x27, 0xad, 0x52, 0x46, 0x29, 0x49, 0x03, 0xa4, 0x21, 0x15, 0x22, - 0x8b, 0xca, 0xae, 0xd2, 0x4a, 0x48, 0xb0, 0x22, 0x6d, 0x11, 0x15, 0x05, 0x55, 0x8e, 0x00, 0x09, - 0x09, 0xac, 0xa9, 0x3d, 0x4d, 0x47, 0x72, 0x3c, 0x66, 0x66, 0x1c, 0xc8, 0x11, 0xd8, 0x72, 0x04, - 0x8e, 0xc0, 0x92, 0x15, 0x4b, 0x96, 0x6c, 0xd9, 0xa1, 0xee, 0xb8, 0x05, 0xf2, 0xfc, 0x38, 0xbf, - 0x95, 0x38, 0x00, 0xbb, 0xf1, 0xf7, 0xde, 0xf3, 0xf7, 0xf7, 0xc6, 0x06, 0xf7, 0x71, 0x34, 0xa4, - 0x23, 0x07, 0xc5, 0xc4, 0x19, 0x76, 0x1c, 0x1c, 0x05, 0x31, 0x25, 0x91, 0x70, 0x42, 0x8a, 0x02, - 0x8f, 0xe1, 0x98, 0x32, 0x61, 0xc7, 0x8c, 0x0a, 0x0a, 0x37, 0x25, 0xd1, 0x46, 0x31, 0xb1, 0x87, - 0x1d, 0xdb, 0x10, 0xeb, 0xdb, 0x53, 0x7a, 0x9f, 0x32, 0xec, 0xa0, 0x20, 0x60, 0x98, 0x73, 0xa5, - 0xab, 0xdf, 0x9e, 0x27, 0x9c, 0x23, 0x8e, 0x35, 0xda, 0xe8, 0x53, 0xda, 0x0f, 0xb1, 0x23, 0x9f, - 0xce, 0x93, 0x0b, 0x27, 0x48, 0x18, 0x12, 0x84, 0x46, 0x46, 0x3d, 0x8b, 0x73, 0xc1, 0x12, 0x5f, - 0xd7, 0x54, 0xaf, 0x0e, 0x51, 0x48, 0x02, 0x24, 0xb0, 0x63, 0x0e, 0x1a, 0xa8, 0xf4, 0x69, 0x9f, - 0xca, 0xa3, 0x93, 0x9e, 0x54, 0xb4, 0xf5, 0x2b, 0x0f, 0x36, 0x5f, 0xc6, 0x5c, 0x30, 0x8c, 0x06, - 0xa7, 0xd4, 0x47, 0x21, 0x11, 0xa3, 0x9e, 0x40, 0x82, 0xc3, 0x07, 0xa0, 0x18, 0xea, 0x40, 0xcd, - 0x6a, 0x5a, 0xed, 0x52, 0xe7, 0x96, 0x3d, 0xd5, 0x6f, 0x5a, 0xb7, 0x6d, 0x34, 0x6e, 0x46, 0x86, - 0x0f, 0xc1, 0x96, 0xa0, 0x02, 0x85, 0x1e, 0x4f, 0x7c, 0x1f, 0x73, 0x7e, 0x91, 0x84, 0x1e, 0xc3, - 0xef, 0x13, 0xcc, 0x05, 0xaf, 0xe5, 0x9a, 0x56, 0xbb, 0xe0, 0x56, 0x25, 0xa1, 0x97, 0xe1, 0xae, - 0x86, 0xe1, 0x23, 0x50, 0x57, 0x5a, 0x23, 0xf0, 0x48, 0xe4, 0xc5, 0x8c, 0xf6, 0xd3, 0xe9, 0xd5, - 0xf2, 0x13, 0x62, 0x23, 0x39, 0x89, 0xce, 0x34, 0x0c, 0xf7, 0x40, 0x45, 0x89, 0x31, 0x63, 0x94, - 0x8d, 0x73, 0x16, 0xa4, 0x0c, 0x4a, 0xec, 0x38, 0x85, 0xb2, 0x74, 0x6f, 0xc0, 0x0d, 0xb9, 0xd5, - 0x01, 0x16, 0x8c, 0xf8, 0x1e, 0x4f, 0x1b, 0xaf, 0x2d, 0x35, 0xf3, 0xed, 0x52, 0xc7, 0xb6, 0x17, - 0x2e, 0xd7, 0x3e, 0xd6, 0x87, 0x53, 0x8a, 0x82, 0xe7, 0x52, 0x26, 0xc7, 0xe5, 0x96, 0xc3, 0xe9, - 0x00, 0x0c, 0x40, 0x35, 0xd1, 0x83, 0xf5, 0x8c, 0x5a, 0x67, 0x58, 0x91, 0x19, 0x76, 0xaf, 0xc9, - 0x60, 0xd6, 0x61, 0x32, 0xa9, 0xf7, 0x6f, 0x26, 0x8b, 0xc2, 0xb0, 0x0e, 0x8a, 0x31, 0x23, 0x94, - 0xa5, 0x5b, 0x5a, 0x6e, 0x5a, 0xed, 0x75, 0x37, 0x7b, 0x6e, 0x7d, 0x9a, 0xd8, 0xed, 0xb4, 0xea, - 0x00, 0xac, 0x68, 0x47, 0xea, 0xd5, 0xd6, 0x17, 0xac, 0xf6, 0xb1, 0x62, 0xb8, 0x86, 0x0a, 0xf7, - 0x41, 0x71, 0x80, 0x05, 0x0a, 0x90, 0x40, 0x32, 0x57, 0xa9, 0x53, 0xb5, 0x95, 0x17, 0x6d, 0xe3, - 0x45, 0xbb, 0x27, 0xbd, 0xe8, 0x66, 0xc4, 0xff, 0x6e, 0x90, 0x81, 0xd6, 0x57, 0x0b, 0x54, 0xaf, - 0x21, 0xc3, 0x6d, 0x50, 0xd2, 0x29, 0x23, 0x34, 0xc0, 0x72, 0x23, 0xab, 0x2e, 0x50, 0xa1, 0x17, - 0x68, 0x80, 0xe1, 0x53, 0x70, 0x37, 0x4a, 0x06, 0xe3, 0x29, 0x5c, 0x90, 0x88, 0xf0, 0x4b, 0x1c, - 0x78, 0x1f, 0x88, 0xb8, 0xd4, 0xe5, 0xea, 0x59, 0xde, 0x89, 0x92, 0x81, 0x69, 0xe8, 0x89, 0xa6, - 0xbd, 0x26, 0xe2, 0x52, 0xe5, 0x83, 0xbb, 0x40, 0x35, 0x6e, 0x7a, 0x1c, 0xa2, 0x30, 0xc1, 0x72, - 0x92, 0x96, 0xbb, 0x21, 0x11, 0x45, 0x7c, 0x95, 0xc6, 0x5b, 0x5f, 0x0a, 0x60, 0xed, 0x30, 0x4c, - 0xb8, 0xc0, 0x4c, 0x55, 0xba, 0x0b, 0xd6, 0x7c, 0xf5, 0x3c, 0x51, 0x6a, 0x77, 0xf5, 0xdb, 0x9f, - 0xef, 0xf9, 0x02, 0xcb, 0x35, 0x2d, 0xb7, 0xa4, 0x61, 0x59, 0xf6, 0x1e, 0xa8, 0x18, 0x36, 0xc7, - 0x6c, 0x48, 0x7c, 0xac, 0x54, 0xcb, 0xb2, 0x41, 0xa8, 0xb1, 0x9e, 0x82, 0xa4, 0x22, 0x9e, 0xb8, - 0x33, 0xe6, 0x7b, 0xa2, 0xf7, 0x90, 0xfb, 0xa7, 0x3b, 0x33, 0xf5, 0x09, 0xeb, 0x82, 0xb4, 0xb0, - 0xa5, 0xcf, 0x56, 0xae, 0x68, 0x8d, 0xef, 0xcf, 0xf4, 0x57, 0xee, 0x00, 0xdc, 0x54, 0x03, 0x09, - 0x18, 0x8d, 0x63, 0x1c, 0x8c, 0x7d, 0xa2, 0xec, 0xa5, 0x3c, 0x74, 0xa4, 0xc0, 0xcc, 0x29, 0xef, - 0xc0, 0xc6, 0x1c, 0x5f, 0x19, 0x65, 0xff, 0x9a, 0x02, 0x27, 0xc7, 0x68, 0xcf, 0xbc, 0xce, 0x2d, - 0x07, 0x33, 0xef, 0x7f, 0x06, 0x2a, 0x13, 0x7f, 0x1b, 0x8f, 0x44, 0x02, 0xb3, 0x21, 0x0a, 0xa5, - 0x77, 0x4b, 0x9d, 0xad, 0xb9, 0x5b, 0x77, 0xa4, 0xff, 0x10, 0x2e, 0x4c, 0x65, 0xae, 0x54, 0x9d, - 0x68, 0x51, 0xfd, 0x2d, 0x28, 0xcf, 0xd6, 0x7f, 0x0f, 0x14, 0x7d, 0x24, 0x70, 0x9f, 0xb2, 0xd1, - 0xfc, 0x0e, 0x33, 0x08, 0xee, 0x80, 0x75, 0xd3, 0xa6, 0x4f, 0x93, 0x48, 0x68, 0x8f, 0xad, 0xe9, - 0xe0, 0x61, 0x1a, 0xeb, 0x1e, 0xfd, 0xb8, 0x6a, 0x58, 0x3f, 0xaf, 0x1a, 0xd6, 0xef, 0xab, 0x86, - 0x05, 0x76, 0x08, 0x55, 0x13, 0x88, 0x19, 0xfd, 0x38, 0x5a, 0x3c, 0x8c, 0x6e, 0xf9, 0x34, 0xab, - 0xf2, 0x2c, 0x6d, 0xe1, 0xcc, 0x3a, 0x5f, 0x96, 0xbd, 0xec, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, - 0x77, 0xa0, 0xc7, 0x7d, 0x7c, 0x07, 0x00, 0x00, -} - -func (m *UpstreamLocalityStats) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UpstreamLocalityStats) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Locality != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.Locality.Size())) - n1, err := m.Locality.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.TotalSuccessfulRequests != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalSuccessfulRequests)) - } - if m.TotalRequestsInProgress != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalRequestsInProgress)) - } - if m.TotalErrorRequests != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalErrorRequests)) - } - if len(m.LoadMetricStats) > 0 { - for _, msg := range m.LoadMetricStats { - dAtA[i] = 0x2a - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Priority != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.Priority)) - } - if len(m.UpstreamEndpointStats) > 0 { - for _, msg := range m.UpstreamEndpointStats { - dAtA[i] = 0x3a - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *UpstreamEndpointStats) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UpstreamEndpointStats) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Address != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.Address.Size())) - n2, err := m.Address.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.TotalSuccessfulRequests != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalSuccessfulRequests)) - } - if m.TotalRequestsInProgress != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalRequestsInProgress)) - } - if m.TotalErrorRequests != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalErrorRequests)) - } - if len(m.LoadMetricStats) > 0 { - for _, msg := range m.LoadMetricStats { - dAtA[i] = 0x2a - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Metadata != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.Metadata.Size())) - n3, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *EndpointLoadMetricStats) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *EndpointLoadMetricStats) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.MetricName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - } - if m.NumRequestsFinishedWithMetric != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.NumRequestsFinishedWithMetric)) - } - if m.TotalMetricValue != 0 { - dAtA[i] = 0x19 - i++ - encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.TotalMetricValue)))) - i += 8 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ClusterStats) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ClusterStats) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ClusterName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(len(m.ClusterName))) - i += copy(dAtA[i:], m.ClusterName) - } - if len(m.UpstreamLocalityStats) > 0 { - for _, msg := range m.UpstreamLocalityStats { - dAtA[i] = 0x12 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.TotalDroppedRequests != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.TotalDroppedRequests)) - } - if m.LoadReportInterval != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.LoadReportInterval.Size())) - n4, err := m.LoadReportInterval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.DroppedRequests) > 0 { - for _, msg := range m.DroppedRequests { - dAtA[i] = 0x2a - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ClusterServiceName) > 0 { - dAtA[i] = 0x32 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(len(m.ClusterServiceName))) - i += copy(dAtA[i:], m.ClusterServiceName) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ClusterStats_DroppedRequests) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ClusterStats_DroppedRequests) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Category) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(len(m.Category))) - i += copy(dAtA[i:], m.Category) - } - if m.DroppedCount != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintLoadReport(dAtA, i, uint64(m.DroppedCount)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintLoadReport(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *UpstreamLocalityStats) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Locality != nil { - l = m.Locality.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - if m.TotalSuccessfulRequests != 0 { - n += 1 + sovLoadReport(uint64(m.TotalSuccessfulRequests)) - } - if m.TotalRequestsInProgress != 0 { - n += 1 + sovLoadReport(uint64(m.TotalRequestsInProgress)) - } - if m.TotalErrorRequests != 0 { - n += 1 + sovLoadReport(uint64(m.TotalErrorRequests)) - } - if len(m.LoadMetricStats) > 0 { - for _, e := range m.LoadMetricStats { - l = e.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - } - if m.Priority != 0 { - n += 1 + sovLoadReport(uint64(m.Priority)) - } - if len(m.UpstreamEndpointStats) > 0 { - for _, e := range m.UpstreamEndpointStats { - l = e.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *UpstreamEndpointStats) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Address != nil { - l = m.Address.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - if m.TotalSuccessfulRequests != 0 { - n += 1 + sovLoadReport(uint64(m.TotalSuccessfulRequests)) - } - if m.TotalRequestsInProgress != 0 { - n += 1 + sovLoadReport(uint64(m.TotalRequestsInProgress)) - } - if m.TotalErrorRequests != 0 { - n += 1 + sovLoadReport(uint64(m.TotalErrorRequests)) - } - if len(m.LoadMetricStats) > 0 { - for _, e := range m.LoadMetricStats { - l = e.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *EndpointLoadMetricStats) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.MetricName) - if l > 0 { - n += 1 + l + sovLoadReport(uint64(l)) - } - if m.NumRequestsFinishedWithMetric != 0 { - n += 1 + sovLoadReport(uint64(m.NumRequestsFinishedWithMetric)) - } - if m.TotalMetricValue != 0 { - n += 9 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ClusterStats) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterName) - if l > 0 { - n += 1 + l + sovLoadReport(uint64(l)) - } - if len(m.UpstreamLocalityStats) > 0 { - for _, e := range m.UpstreamLocalityStats { - l = e.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - } - if m.TotalDroppedRequests != 0 { - n += 1 + sovLoadReport(uint64(m.TotalDroppedRequests)) - } - if m.LoadReportInterval != nil { - l = m.LoadReportInterval.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - if len(m.DroppedRequests) > 0 { - for _, e := range m.DroppedRequests { - l = e.Size() - n += 1 + l + sovLoadReport(uint64(l)) - } - } - l = len(m.ClusterServiceName) - if l > 0 { - n += 1 + l + sovLoadReport(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ClusterStats_DroppedRequests) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Category) - if l > 0 { - n += 1 + l + sovLoadReport(uint64(l)) - } - if m.DroppedCount != 0 { - n += 1 + sovLoadReport(uint64(m.DroppedCount)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovLoadReport(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozLoadReport(x uint64) (n int) { - return sovLoadReport(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *UpstreamLocalityStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpstreamLocalityStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpstreamLocalityStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locality", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Locality == nil { - m.Locality = &core.Locality{} - } - if err := m.Locality.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalSuccessfulRequests", wireType) - } - m.TotalSuccessfulRequests = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalSuccessfulRequests |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalRequestsInProgress", wireType) - } - m.TotalRequestsInProgress = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalRequestsInProgress |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalErrorRequests", wireType) - } - m.TotalErrorRequests = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalErrorRequests |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LoadMetricStats", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LoadMetricStats = append(m.LoadMetricStats, &EndpointLoadMetricStats{}) - if err := m.LoadMetricStats[len(m.LoadMetricStats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) - } - m.Priority = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Priority |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpstreamEndpointStats", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UpstreamEndpointStats = append(m.UpstreamEndpointStats, &UpstreamEndpointStats{}) - if err := m.UpstreamEndpointStats[len(m.UpstreamEndpointStats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLoadReport(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UpstreamEndpointStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpstreamEndpointStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpstreamEndpointStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Address == nil { - m.Address = &core.Address{} - } - if err := m.Address.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalSuccessfulRequests", wireType) - } - m.TotalSuccessfulRequests = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalSuccessfulRequests |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalRequestsInProgress", wireType) - } - m.TotalRequestsInProgress = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalRequestsInProgress |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalErrorRequests", wireType) - } - m.TotalErrorRequests = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalErrorRequests |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LoadMetricStats", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LoadMetricStats = append(m.LoadMetricStats, &EndpointLoadMetricStats{}) - if err := m.LoadMetricStats[len(m.LoadMetricStats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &types.Struct{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLoadReport(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointLoadMetricStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EndpointLoadMetricStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointLoadMetricStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.MetricName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NumRequestsFinishedWithMetric", wireType) - } - m.NumRequestsFinishedWithMetric = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NumRequestsFinishedWithMetric |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalMetricValue", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) - iNdEx += 8 - m.TotalMetricValue = float64(math.Float64frombits(v)) - default: - iNdEx = preIndex - skippy, err := skipLoadReport(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClusterStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ClusterStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpstreamLocalityStats", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UpstreamLocalityStats = append(m.UpstreamLocalityStats, &UpstreamLocalityStats{}) - if err := m.UpstreamLocalityStats[len(m.UpstreamLocalityStats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalDroppedRequests", wireType) - } - m.TotalDroppedRequests = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TotalDroppedRequests |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LoadReportInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LoadReportInterval == nil { - m.LoadReportInterval = &types.Duration{} - } - if err := m.LoadReportInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DroppedRequests", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DroppedRequests = append(m.DroppedRequests, &ClusterStats_DroppedRequests{}) - if err := m.DroppedRequests[len(m.DroppedRequests)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterServiceName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterServiceName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLoadReport(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + // 812 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x55, 0x4d, 0x8b, 0x23, 0x45, + 0x18, 0xa6, 0x33, 0x99, 0x24, 0x56, 0x66, 0xc9, 0x58, 0x4e, 0x4c, 0x36, 0xba, 0x6e, 0xcc, 0x1c, + 0x0c, 0xb2, 0x74, 0x2f, 0xc9, 0x82, 0xa0, 0x27, 0xb3, 0x3b, 0xe2, 0xe0, 0x28, 0x43, 0x07, 0x15, + 0x14, 0x6c, 0x6b, 0xba, 0x2b, 0x99, 0x82, 0xee, 0xaa, 0xb6, 0x3e, 0x5a, 0x73, 0xf3, 0x0f, 0x88, + 0xe0, 0xc9, 0x83, 0xbf, 0xc2, 0xa3, 0xe0, 0xdd, 0xab, 0x7f, 0xc5, 0xe3, 0x1c, 0x44, 0xba, 0x3e, + 0x3a, 0x9f, 0x03, 0xde, 0x04, 0x6f, 0xdd, 0xef, 0xf3, 0x3c, 0xf5, 0x7e, 0x3d, 0xd5, 0x0d, 0xde, + 0xc2, 0xb4, 0x60, 0xab, 0x00, 0xe5, 0x24, 0x28, 0x26, 0x01, 0xa6, 0x49, 0xce, 0x08, 0x95, 0x41, + 0xca, 0x50, 0x12, 0x71, 0x9c, 0x33, 0x2e, 0xfd, 0x9c, 0x33, 0xc9, 0x60, 0x57, 0x13, 0x7d, 0x94, + 0x13, 0xbf, 0x98, 0xf8, 0x8e, 0x38, 0x78, 0xbc, 0xa5, 0x8f, 0x19, 0xc7, 0x01, 0x4a, 0x12, 0x8e, + 0x85, 0x30, 0xba, 0xc1, 0xeb, 0xfb, 0x84, 0x1b, 0x24, 0xb0, 0x45, 0xdf, 0x58, 0x32, 0xb6, 0x4c, + 0x71, 0xa0, 0xdf, 0x6e, 0xd4, 0x22, 0x48, 0x14, 0x47, 0x92, 0x30, 0xea, 0xd4, 0xbb, 0xb8, 0x90, + 0x5c, 0xc5, 0xd2, 0xa9, 0x55, 0x92, 0xa3, 0x00, 0x51, 0xca, 0xa4, 0x16, 0x89, 0x20, 0x23, 0x4b, + 0x8e, 0xa4, 0x3b, 0xfd, 0xd1, 0x1e, 0x2e, 0x24, 0x92, 0xca, 0x95, 0xd6, 0x2b, 0x50, 0x4a, 0x12, + 0x24, 0x71, 0xe0, 0x1e, 0x0c, 0x30, 0xfa, 0xa1, 0x0e, 0xba, 0x9f, 0xe6, 0x42, 0x72, 0x8c, 0xb2, + 0x2b, 0x16, 0xa3, 0x94, 0xc8, 0xd5, 0x5c, 0x22, 0x29, 0xe0, 0x3b, 0xa0, 0x95, 0xda, 0x40, 0xdf, + 0x1b, 0x7a, 0xe3, 0xf6, 0xe4, 0x35, 0x7f, 0x6b, 0x30, 0x65, 0x83, 0xbe, 0xd3, 0x84, 0x15, 0x19, + 0xbe, 0x0b, 0x1e, 0x4a, 0x26, 0x51, 0x1a, 0x09, 0x15, 0xc7, 0x58, 0x88, 0x85, 0x4a, 0x23, 0x8e, + 0xbf, 0x51, 0x58, 0x48, 0xd1, 0xaf, 0x0d, 0xbd, 0x71, 0x3d, 0xec, 0x69, 0xc2, 0xbc, 0xc2, 0x43, + 0x0b, 0xc3, 0xf7, 0xc0, 0xc0, 0x68, 0x9d, 0x20, 0x22, 0x34, 0xca, 0x39, 0x5b, 0x96, 0x63, 0xee, + 0x1f, 0x6d, 0x88, 0x9d, 0xe4, 0x92, 0x5e, 0x5b, 0x18, 0x3e, 0x05, 0x67, 0x46, 0x8c, 0x39, 0x67, + 0x7c, 0x9d, 0xb3, 0xae, 0x65, 0x50, 0x63, 0x17, 0x25, 0x54, 0xa5, 0x9b, 0x80, 0xae, 0x51, 0x10, + 0x21, 0x14, 0x4e, 0xd6, 0x92, 0x96, 0x96, 0xbc, 0xa2, 0xc1, 0x4b, 0x8d, 0x55, 0x9a, 0x2f, 0xc0, + 0xcb, 0xda, 0x32, 0x19, 0x96, 0x9c, 0xc4, 0x51, 0x39, 0x66, 0xd1, 0x3f, 0x1e, 0x1e, 0x8d, 0xdb, + 0x13, 0xdf, 0x3f, 0xe8, 0x1c, 0xff, 0xc2, 0x3e, 0x5c, 0x31, 0x94, 0x7c, 0xac, 0x65, 0x7a, 0xc4, + 0x61, 0x27, 0xdd, 0x0e, 0xc0, 0x04, 0xf4, 0x94, 0x5d, 0x46, 0xe4, 0xd4, 0x36, 0x43, 0x53, 0x67, + 0x78, 0x72, 0x4f, 0x06, 0xb7, 0x42, 0x97, 0xc9, 0x9c, 0xdf, 0x55, 0x87, 0xc2, 0x70, 0x00, 0x5a, + 0x39, 0x27, 0x8c, 0x97, 0x9b, 0x6d, 0x0c, 0xbd, 0xf1, 0x83, 0xb0, 0x7a, 0x1f, 0xfd, 0x7e, 0xb4, + 0xf6, 0xc3, 0xb6, 0xea, 0x19, 0x68, 0x5a, 0xbb, 0x5b, 0x3b, 0x0c, 0x0e, 0xd8, 0xe1, 0x7d, 0xc3, + 0x08, 0x1d, 0x15, 0x4e, 0x41, 0x2b, 0xc3, 0x12, 0x25, 0x48, 0x22, 0x9d, 0xab, 0x3d, 0xe9, 0xf9, + 0xc6, 0xe8, 0xbe, 0x33, 0xba, 0x3f, 0xd7, 0x46, 0x0f, 0x2b, 0xe2, 0xff, 0xc2, 0x41, 0xcd, 0xff, + 0xc4, 0x41, 0xa3, 0x5f, 0x3d, 0xd0, 0xbb, 0x87, 0x0c, 0x1f, 0x83, 0xb6, 0x4d, 0x49, 0x51, 0x86, + 0xf5, 0x16, 0x5f, 0x0a, 0x81, 0x09, 0x7d, 0x82, 0x32, 0x0c, 0x3f, 0x04, 0x6f, 0x52, 0x95, 0xad, + 0x27, 0xb7, 0x20, 0x94, 0x88, 0x5b, 0x9c, 0x44, 0xdf, 0x12, 0x79, 0x6b, 0xcb, 0xb5, 0xf3, 0x7f, + 0x44, 0x55, 0xe6, 0x1a, 0xfa, 0xc0, 0xd2, 0x3e, 0x27, 0xf2, 0xd6, 0xe4, 0x83, 0x4f, 0x80, 0x19, + 0x96, 0xeb, 0xb1, 0x40, 0xa9, 0xc2, 0x7a, 0xfa, 0x5e, 0x78, 0xaa, 0x11, 0x43, 0xfc, 0xac, 0x8c, + 0x8f, 0x7e, 0xa9, 0x83, 0x93, 0xe7, 0xa9, 0x12, 0x12, 0x73, 0x53, 0xe9, 0xdb, 0xe0, 0x24, 0x36, + 0xef, 0x1b, 0xa5, 0xce, 0x9a, 0x77, 0xb3, 0x3a, 0xaf, 0x0d, 0xbd, 0xb0, 0x6d, 0x41, 0x5d, 0xf4, + 0x53, 0x70, 0xe6, 0xb8, 0x02, 0xf3, 0x82, 0xc4, 0xd8, 0x68, 0x1a, 0xba, 0x3d, 0x68, 0xb1, 0xb9, + 0x81, 0xb4, 0x82, 0x6e, 0xdc, 0x32, 0xf7, 0xd5, 0xb2, 0x5b, 0xa8, 0xfd, 0xab, 0x5b, 0xb6, 0xf5, + 0xa1, 0x9c, 0xb5, 0xee, 0x66, 0xc7, 0x3f, 0x79, 0xb5, 0x96, 0xb7, 0xbe, 0x6f, 0xdb, 0x5f, 0xd2, + 0x67, 0xe0, 0x55, 0x33, 0x8c, 0x84, 0xb3, 0x3c, 0xdf, 0x34, 0x89, 0xb1, 0xa3, 0xf1, 0xdc, 0x0b, + 0x03, 0x56, 0x2e, 0xf9, 0x0a, 0x9c, 0xee, 0xf1, 0x8d, 0x49, 0xa6, 0xf7, 0x94, 0xb7, 0x39, 0x42, + 0x7f, 0xe7, 0xb8, 0xb0, 0x93, 0xec, 0x9c, 0xff, 0x11, 0x38, 0xdb, 0xf8, 0xf5, 0x45, 0x84, 0x4a, + 0xcc, 0x0b, 0x94, 0x6a, 0xaf, 0xb7, 0x27, 0x0f, 0xf7, 0x6e, 0xe9, 0x0b, 0xfb, 0xbb, 0x0a, 0x61, + 0x29, 0x0b, 0xb5, 0xea, 0xd2, 0x8a, 0x06, 0x5f, 0x82, 0xce, 0x6e, 0xfd, 0xe7, 0xa0, 0x15, 0x23, + 0x89, 0x97, 0x8c, 0xaf, 0x76, 0xf7, 0x57, 0x01, 0xf0, 0x1c, 0x3c, 0x70, 0x4d, 0xc6, 0x4c, 0x51, + 0x69, 0xdd, 0x75, 0x62, 0x83, 0xcf, 0xcb, 0xd8, 0xec, 0xeb, 0xbf, 0x7e, 0xfe, 0xfb, 0xc7, 0xe3, + 0x01, 0xec, 0x9b, 0xb6, 0x63, 0x46, 0x17, 0x64, 0xb9, 0x6e, 0xbb, 0x98, 0xfe, 0xf6, 0xfd, 0x1f, + 0x7f, 0x36, 0x6a, 0xa7, 0x1e, 0x38, 0x27, 0xcc, 0xcc, 0x26, 0xe7, 0xec, 0xbb, 0xd5, 0xe1, 0x31, + 0xcd, 0x3a, 0x57, 0x55, 0xfd, 0xd7, 0x65, 0x73, 0xd7, 0xde, 0x4d, 0x43, 0x77, 0x39, 0xfd, 0x27, + 0x00, 0x00, 0xff, 0xff, 0xd3, 0xcb, 0x4d, 0x04, 0x23, 0x08, 0x00, 0x00, } -func (m *ClusterStats_DroppedRequests) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DroppedRequests: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DroppedRequests: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Category", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthLoadReport - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLoadReport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Category = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DroppedCount", wireType) - } - m.DroppedCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLoadReport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DroppedCount |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipLoadReport(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLoadReport - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipLoadReport(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLoadReport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLoadReport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLoadReport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthLoadReport - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthLoadReport - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLoadReport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipLoadReport(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthLoadReport - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthLoadReport = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowLoadReport = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint/load_report.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/endpoint/load_report.proto -package endpoint +package envoy_api_v2_endpoint import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _load_report_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on UpstreamLocalityStats with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -41,17 +44,12 @@ return nil } - { - tmp := m.GetLocality() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamLocalityStatsValidationError{ - field: "Locality", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetLocality()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamLocalityStatsValidationError{ + field: "Locality", + reason: "embedded message failed validation", + cause: err, } } } @@ -62,20 +60,17 @@ // no validation rules for TotalErrorRequests + // no validation rules for TotalIssuedRequests + for idx, item := range m.GetLoadMetricStats() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamLocalityStatsValidationError{ - field: fmt.Sprintf("LoadMetricStats[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamLocalityStatsValidationError{ + field: fmt.Sprintf("LoadMetricStats[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -85,17 +80,12 @@ for idx, item := range m.GetUpstreamEndpointStats() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamLocalityStatsValidationError{ - field: fmt.Sprintf("UpstreamEndpointStats[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamLocalityStatsValidationError{ + field: fmt.Sprintf("UpstreamEndpointStats[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -171,32 +161,22 @@ return nil } - { - tmp := m.GetAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamEndpointStatsValidationError{ - field: "Address", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamEndpointStatsValidationError{ + field: "Address", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetMetadata() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamEndpointStatsValidationError{ - field: "Metadata", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamEndpointStatsValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, } } } @@ -207,20 +187,17 @@ // no validation rules for TotalErrorRequests + // no validation rules for TotalIssuedRequests + for idx, item := range m.GetLoadMetricStats() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return UpstreamEndpointStatsValidationError{ - field: fmt.Sprintf("LoadMetricStats[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpstreamEndpointStatsValidationError{ + field: fmt.Sprintf("LoadMetricStats[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -386,17 +363,12 @@ for idx, item := range m.GetUpstreamLocalityStats() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterStatsValidationError{ - field: fmt.Sprintf("UpstreamLocalityStats[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterStatsValidationError{ + field: fmt.Sprintf("UpstreamLocalityStats[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -408,34 +380,24 @@ for idx, item := range m.GetDroppedRequests() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterStatsValidationError{ - field: fmt.Sprintf("DroppedRequests[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterStatsValidationError{ + field: fmt.Sprintf("DroppedRequests[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } } - { - tmp := m.GetLoadReportInterval() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterStatsValidationError{ - field: "LoadReportInterval", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetLoadReportInterval()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterStatsValidationError{ + field: "LoadReportInterval", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,258 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/endpoint.proto + +package envoy_api_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + endpoint "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ClusterLoadAssignment struct { + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + Endpoints []*endpoint.LocalityLbEndpoints `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints,omitempty"` + NamedEndpoints map[string]*endpoint.Endpoint `protobuf:"bytes,5,rep,name=named_endpoints,json=namedEndpoints,proto3" json:"named_endpoints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Policy *ClusterLoadAssignment_Policy `protobuf:"bytes,4,opt,name=policy,proto3" json:"policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClusterLoadAssignment) Reset() { *m = ClusterLoadAssignment{} } +func (m *ClusterLoadAssignment) String() string { return proto.CompactTextString(m) } +func (*ClusterLoadAssignment) ProtoMessage() {} +func (*ClusterLoadAssignment) Descriptor() ([]byte, []int) { + return fileDescriptor_8dd3a9d301e6758b, []int{0} +} + +func (m *ClusterLoadAssignment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClusterLoadAssignment.Unmarshal(m, b) +} +func (m *ClusterLoadAssignment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClusterLoadAssignment.Marshal(b, m, deterministic) +} +func (m *ClusterLoadAssignment) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterLoadAssignment.Merge(m, src) +} +func (m *ClusterLoadAssignment) XXX_Size() int { + return xxx_messageInfo_ClusterLoadAssignment.Size(m) +} +func (m *ClusterLoadAssignment) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterLoadAssignment.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterLoadAssignment proto.InternalMessageInfo + +func (m *ClusterLoadAssignment) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *ClusterLoadAssignment) GetEndpoints() []*endpoint.LocalityLbEndpoints { + if m != nil { + return m.Endpoints + } + return nil +} + +func (m *ClusterLoadAssignment) GetNamedEndpoints() map[string]*endpoint.Endpoint { + if m != nil { + return m.NamedEndpoints + } + return nil +} + +func (m *ClusterLoadAssignment) GetPolicy() *ClusterLoadAssignment_Policy { + if m != nil { + return m.Policy + } + return nil +} + +type ClusterLoadAssignment_Policy struct { + DropOverloads []*ClusterLoadAssignment_Policy_DropOverload `protobuf:"bytes,2,rep,name=drop_overloads,json=dropOverloads,proto3" json:"drop_overloads,omitempty"` + OverprovisioningFactor *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=overprovisioning_factor,json=overprovisioningFactor,proto3" json:"overprovisioning_factor,omitempty"` + EndpointStaleAfter *duration.Duration `protobuf:"bytes,4,opt,name=endpoint_stale_after,json=endpointStaleAfter,proto3" json:"endpoint_stale_after,omitempty"` + DisableOverprovisioning bool `protobuf:"varint,5,opt,name=disable_overprovisioning,json=disableOverprovisioning,proto3" json:"disable_overprovisioning,omitempty"` // Deprecated: Do not use. + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClusterLoadAssignment_Policy) Reset() { *m = ClusterLoadAssignment_Policy{} } +func (m *ClusterLoadAssignment_Policy) String() string { return proto.CompactTextString(m) } +func (*ClusterLoadAssignment_Policy) ProtoMessage() {} +func (*ClusterLoadAssignment_Policy) Descriptor() ([]byte, []int) { + return fileDescriptor_8dd3a9d301e6758b, []int{0, 0} +} + +func (m *ClusterLoadAssignment_Policy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClusterLoadAssignment_Policy.Unmarshal(m, b) +} +func (m *ClusterLoadAssignment_Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClusterLoadAssignment_Policy.Marshal(b, m, deterministic) +} +func (m *ClusterLoadAssignment_Policy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterLoadAssignment_Policy.Merge(m, src) +} +func (m *ClusterLoadAssignment_Policy) XXX_Size() int { + return xxx_messageInfo_ClusterLoadAssignment_Policy.Size(m) +} +func (m *ClusterLoadAssignment_Policy) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterLoadAssignment_Policy.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterLoadAssignment_Policy proto.InternalMessageInfo + +func (m *ClusterLoadAssignment_Policy) GetDropOverloads() []*ClusterLoadAssignment_Policy_DropOverload { + if m != nil { + return m.DropOverloads + } + return nil +} + +func (m *ClusterLoadAssignment_Policy) GetOverprovisioningFactor() *wrappers.UInt32Value { + if m != nil { + return m.OverprovisioningFactor + } + return nil +} + +func (m *ClusterLoadAssignment_Policy) GetEndpointStaleAfter() *duration.Duration { + if m != nil { + return m.EndpointStaleAfter + } + return nil +} + +// Deprecated: Do not use. +func (m *ClusterLoadAssignment_Policy) GetDisableOverprovisioning() bool { + if m != nil { + return m.DisableOverprovisioning + } + return false +} + +type ClusterLoadAssignment_Policy_DropOverload struct { + Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` + DropPercentage *_type.FractionalPercent `protobuf:"bytes,2,opt,name=drop_percentage,json=dropPercentage,proto3" json:"drop_percentage,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClusterLoadAssignment_Policy_DropOverload) Reset() { + *m = ClusterLoadAssignment_Policy_DropOverload{} +} +func (m *ClusterLoadAssignment_Policy_DropOverload) String() string { return proto.CompactTextString(m) } +func (*ClusterLoadAssignment_Policy_DropOverload) ProtoMessage() {} +func (*ClusterLoadAssignment_Policy_DropOverload) Descriptor() ([]byte, []int) { + return fileDescriptor_8dd3a9d301e6758b, []int{0, 0, 0} +} + +func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Unmarshal(m, b) +} +func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Marshal(b, m, deterministic) +} +func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Merge(m, src) +} +func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_Size() int { + return xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.Size(m) +} +func (m *ClusterLoadAssignment_Policy_DropOverload) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterLoadAssignment_Policy_DropOverload proto.InternalMessageInfo + +func (m *ClusterLoadAssignment_Policy_DropOverload) GetCategory() string { + if m != nil { + return m.Category + } + return "" +} + +func (m *ClusterLoadAssignment_Policy_DropOverload) GetDropPercentage() *_type.FractionalPercent { + if m != nil { + return m.DropPercentage + } + return nil +} + +func init() { + proto.RegisterType((*ClusterLoadAssignment)(nil), "envoy.api.v2.ClusterLoadAssignment") + proto.RegisterMapType((map[string]*endpoint.Endpoint)(nil), "envoy.api.v2.ClusterLoadAssignment.NamedEndpointsEntry") + proto.RegisterType((*ClusterLoadAssignment_Policy)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy") + proto.RegisterType((*ClusterLoadAssignment_Policy_DropOverload)(nil), "envoy.api.v2.ClusterLoadAssignment.Policy.DropOverload") +} + +func init() { proto.RegisterFile("envoy/api/v2/endpoint.proto", fileDescriptor_8dd3a9d301e6758b) } + +var fileDescriptor_8dd3a9d301e6758b = []byte{ + // 645 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4d, 0x6e, 0xd3, 0x40, + 0x14, 0xc7, 0x6b, 0xa7, 0x09, 0xe9, 0xf4, 0x53, 0xc3, 0x47, 0x8d, 0x69, 0x21, 0x82, 0x4d, 0x95, + 0x85, 0x2d, 0xa5, 0x42, 0x45, 0x48, 0x2c, 0x6a, 0xda, 0x0a, 0x50, 0x45, 0x23, 0xa3, 0xb2, 0xac, + 0x99, 0xd8, 0x13, 0x6b, 0x84, 0x33, 0x33, 0x1a, 0x8f, 0x0d, 0x16, 0x1b, 0x6e, 0xc0, 0x96, 0x33, + 0x70, 0x04, 0x4e, 0xc0, 0x96, 0x23, 0x70, 0x05, 0x96, 0x45, 0x42, 0xc8, 0xe3, 0xb1, 0x9b, 0xa6, + 0xa9, 0xc4, 0x6e, 0xec, 0xff, 0xfb, 0xff, 0xde, 0x9b, 0xf7, 0x9e, 0x0d, 0xee, 0x61, 0x9a, 0xb3, + 0xc2, 0x45, 0x9c, 0xb8, 0xf9, 0xc0, 0xc5, 0x34, 0xe2, 0x8c, 0x50, 0xe9, 0x70, 0xc1, 0x24, 0x83, + 0x2b, 0x4a, 0x74, 0x10, 0x27, 0x4e, 0x3e, 0xb0, 0xdd, 0xb9, 0xa1, 0xcd, 0x21, 0x08, 0xd9, 0x84, + 0x33, 0x8a, 0xa9, 0x4c, 0x2b, 0xbb, 0x6d, 0x55, 0x06, 0x59, 0x70, 0xec, 0x72, 0x2c, 0x42, 0x5c, + 0x83, 0xed, 0xad, 0x98, 0xb1, 0x38, 0xc1, 0x8a, 0x85, 0x28, 0x65, 0x12, 0x49, 0xc2, 0x68, 0xed, + 0xbb, 0xaf, 0x55, 0xf5, 0x34, 0xca, 0xc6, 0x6e, 0x94, 0x09, 0x15, 0x70, 0x9d, 0xfe, 0x41, 0x20, + 0xce, 0xb1, 0x68, 0xfc, 0x59, 0xc4, 0xd1, 0x34, 0xd7, 0x9d, 0x90, 0x58, 0x20, 0x89, 0xb5, 0xbe, + 0x7d, 0x45, 0x4f, 0x25, 0x92, 0x59, 0x6d, 0xdf, 0xcc, 0x51, 0x42, 0x22, 0x24, 0xb1, 0x5b, 0x1f, + 0x2a, 0xe1, 0xe1, 0x9f, 0x0e, 0xb8, 0xfd, 0x3c, 0xc9, 0x52, 0x89, 0xc5, 0x31, 0x43, 0xd1, 0x7e, + 0x9a, 0x92, 0x98, 0x4e, 0x30, 0x95, 0xb0, 0x0f, 0x56, 0xc2, 0x4a, 0x08, 0x28, 0x9a, 0x60, 0xcb, + 0xe8, 0x19, 0x3b, 0x4b, 0xde, 0x8d, 0x73, 0x6f, 0x51, 0x98, 0x3d, 0xc3, 0x5f, 0xd6, 0xe2, 0x6b, + 0x34, 0xc1, 0xf0, 0x05, 0x58, 0xaa, 0x5b, 0x96, 0x5a, 0x66, 0xaf, 0xb5, 0xb3, 0x3c, 0xe8, 0x3b, + 0xd3, 0x8d, 0x76, 0x9a, 0x29, 0x1c, 0xb3, 0x10, 0x25, 0x44, 0x16, 0xc7, 0xa3, 0xc3, 0xda, 0xe1, + 0x5f, 0x98, 0xe1, 0x3b, 0xb0, 0x5e, 0x66, 0x8b, 0x82, 0x0b, 0x5e, 0x5b, 0xf1, 0xf6, 0x2e, 0xf3, + 0xe6, 0xd6, 0xec, 0x94, 0xc5, 0x44, 0x0d, 0xf7, 0x90, 0x4a, 0x51, 0xf8, 0x6b, 0xf4, 0xd2, 0x4b, + 0xe8, 0x81, 0x0e, 0x67, 0x09, 0x09, 0x0b, 0x6b, 0xb1, 0x67, 0x5c, 0x2d, 0x74, 0x3e, 0x78, 0xa8, + 0x1c, 0xbe, 0x76, 0xda, 0xbf, 0x5a, 0xa0, 0x53, 0xbd, 0x82, 0x67, 0x60, 0x2d, 0x12, 0x8c, 0x07, + 0x2c, 0xc7, 0x22, 0x61, 0x28, 0xaa, 0xef, 0xbf, 0xf7, 0xff, 0x58, 0xe7, 0x40, 0x30, 0x7e, 0xa2, + 0xfd, 0xfe, 0x6a, 0x34, 0xf5, 0x94, 0xc2, 0x33, 0xb0, 0x59, 0xa2, 0xb9, 0x60, 0x39, 0x49, 0x09, + 0xa3, 0x84, 0xc6, 0xc1, 0x18, 0x85, 0x92, 0x09, 0xab, 0xa5, 0xea, 0xdf, 0x72, 0xaa, 0xd5, 0x71, + 0xea, 0xd5, 0x71, 0x4e, 0x5f, 0x52, 0xb9, 0x3b, 0x78, 0x8b, 0x92, 0x0c, 0xab, 0x79, 0xf5, 0xcd, + 0xde, 0x82, 0x7f, 0x67, 0x96, 0x72, 0xa4, 0x20, 0xf0, 0x14, 0xdc, 0x6a, 0xb6, 0x3d, 0x95, 0x28, + 0xc1, 0x01, 0x1a, 0x4b, 0x2c, 0x74, 0x73, 0xee, 0x5e, 0x81, 0x1f, 0xe8, 0xbd, 0xf5, 0xba, 0xe7, + 0x5e, 0xfb, 0x9b, 0x61, 0xf6, 0x17, 0x7c, 0x58, 0x03, 0xde, 0x94, 0xfe, 0xfd, 0xd2, 0x0e, 0x9f, + 0x01, 0x2b, 0x22, 0x29, 0x1a, 0x25, 0x38, 0x98, 0x4d, 0x6c, 0xb5, 0x7b, 0xc6, 0x4e, 0xd7, 0x33, + 0x2d, 0xc3, 0xdf, 0xd4, 0x31, 0x27, 0x33, 0x21, 0xf6, 0x27, 0xb0, 0x32, 0xdd, 0x14, 0xf8, 0x08, + 0x74, 0x43, 0x24, 0x71, 0xcc, 0x44, 0x31, 0xbb, 0x88, 0x8d, 0x00, 0x8f, 0xc0, 0xba, 0x1a, 0x85, + 0xfe, 0x2e, 0x51, 0x8c, 0x2d, 0x53, 0xdd, 0x62, 0x5b, 0xcf, 0xa2, 0xfc, 0x6a, 0x9d, 0x23, 0x81, + 0xc2, 0xf2, 0x02, 0x28, 0x19, 0x56, 0x71, 0xbe, 0x1a, 0xe0, 0xb0, 0x31, 0xbd, 0x5a, 0xec, 0x1a, + 0x1b, 0xa6, 0x3d, 0x02, 0x37, 0xe7, 0xac, 0x13, 0xdc, 0x00, 0xad, 0xf7, 0x58, 0x17, 0xe1, 0x97, + 0x47, 0xf8, 0x18, 0xb4, 0xf3, 0xb2, 0xd7, 0x3a, 0xd9, 0x83, 0x6b, 0x16, 0xbf, 0xe6, 0xf8, 0x55, + 0xf4, 0x53, 0xf3, 0x89, 0xe1, 0x9d, 0xfe, 0xfe, 0xfa, 0xf7, 0x4b, 0xdb, 0x86, 0xd5, 0x5f, 0xc5, + 0x09, 0x19, 0x1d, 0x93, 0xf8, 0xc2, 0x92, 0xef, 0x7e, 0xff, 0xfc, 0xe3, 0x67, 0xc7, 0xdc, 0x30, + 0x80, 0x4d, 0x58, 0xc5, 0xe5, 0x82, 0x7d, 0x2c, 0x2e, 0xa5, 0xf0, 0x56, 0x6b, 0xf4, 0xb0, 0x1c, + 0xd2, 0xd0, 0x18, 0x75, 0xd4, 0xb4, 0x76, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xef, 0xcb, 0xbf, + 0xb6, 0x09, 0x05, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,355 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/endpoint.proto + +package envoy_api_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _endpoint_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on ClusterLoadAssignment with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ClusterLoadAssignment) Validate() error { + if m == nil { + return nil + } + + if len(m.GetClusterName()) < 1 { + return ClusterLoadAssignmentValidationError{ + field: "ClusterName", + reason: "value length must be at least 1 bytes", + } + } + + for idx, item := range m.GetEndpoints() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterLoadAssignmentValidationError{ + field: fmt.Sprintf("Endpoints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for key, val := range m.GetNamedEndpoints() { + _ = val + + // no validation rules for NamedEndpoints[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterLoadAssignmentValidationError{ + field: fmt.Sprintf("NamedEndpoints[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterLoadAssignmentValidationError{ + field: "Policy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ClusterLoadAssignmentValidationError is the validation error returned by +// ClusterLoadAssignment.Validate if the designated constraints aren't met. +type ClusterLoadAssignmentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ClusterLoadAssignmentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ClusterLoadAssignmentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ClusterLoadAssignmentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ClusterLoadAssignmentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ClusterLoadAssignmentValidationError) ErrorName() string { + return "ClusterLoadAssignmentValidationError" +} + +// Error satisfies the builtin error interface +func (e ClusterLoadAssignmentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sClusterLoadAssignment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ClusterLoadAssignmentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ClusterLoadAssignmentValidationError{} + +// Validate checks the field values on ClusterLoadAssignment_Policy with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ClusterLoadAssignment_Policy) Validate() error { + if m == nil { + return nil + } + + for idx, item := range m.GetDropOverloads() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterLoadAssignment_PolicyValidationError{ + field: fmt.Sprintf("DropOverloads[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if wrapper := m.GetOverprovisioningFactor(); wrapper != nil { + + if wrapper.GetValue() <= 0 { + return ClusterLoadAssignment_PolicyValidationError{ + field: "OverprovisioningFactor", + reason: "value must be greater than 0", + } + } + + } + + if d := m.GetEndpointStaleAfter(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return ClusterLoadAssignment_PolicyValidationError{ + field: "EndpointStaleAfter", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return ClusterLoadAssignment_PolicyValidationError{ + field: "EndpointStaleAfter", + reason: "value must be greater than 0s", + } + } + + } + + // no validation rules for DisableOverprovisioning + + return nil +} + +// ClusterLoadAssignment_PolicyValidationError is the validation error returned +// by ClusterLoadAssignment_Policy.Validate if the designated constraints +// aren't met. +type ClusterLoadAssignment_PolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ClusterLoadAssignment_PolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ClusterLoadAssignment_PolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ClusterLoadAssignment_PolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ClusterLoadAssignment_PolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ClusterLoadAssignment_PolicyValidationError) ErrorName() string { + return "ClusterLoadAssignment_PolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e ClusterLoadAssignment_PolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sClusterLoadAssignment_Policy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ClusterLoadAssignment_PolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ClusterLoadAssignment_PolicyValidationError{} + +// Validate checks the field values on +// ClusterLoadAssignment_Policy_DropOverload with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ClusterLoadAssignment_Policy_DropOverload) Validate() error { + if m == nil { + return nil + } + + if len(m.GetCategory()) < 1 { + return ClusterLoadAssignment_Policy_DropOverloadValidationError{ + field: "Category", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetDropPercentage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterLoadAssignment_Policy_DropOverloadValidationError{ + field: "DropPercentage", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ClusterLoadAssignment_Policy_DropOverloadValidationError is the validation +// error returned by ClusterLoadAssignment_Policy_DropOverload.Validate if the +// designated constraints aren't met. +type ClusterLoadAssignment_Policy_DropOverloadValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) ErrorName() string { + return "ClusterLoadAssignment_Policy_DropOverloadValidationError" +} + +// Error satisfies the builtin error interface +func (e ClusterLoadAssignment_Policy_DropOverloadValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sClusterLoadAssignment_Policy_DropOverload.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ClusterLoadAssignment_Policy_DropOverloadValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ClusterLoadAssignment_Policy_DropOverloadValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,540 +1,99 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/lds.proto -package v2 +package envoy_api_v2 import ( - bytes "bytes" context "context" fmt "fmt" - io "io" - math "math" - time "time" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/googleapis/google/api" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + _ "github.com/golang/protobuf/ptypes/duration" + _ "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" - - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - listener "github.com/envoyproxy/go-control-plane/envoy/api/v2/listener" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -type Listener_DrainType int32 - -const ( - // Drain in response to calling /healthcheck/fail admin endpoint (along with the health check - // filter), listener removal/modification, and hot restart. - Listener_DEFAULT Listener_DrainType = 0 - // Drain in response to listener removal/modification and hot restart. This setting does not - // include /healthcheck/fail. This setting may be desirable if Envoy is hosting both ingress - // and egress listeners. - Listener_MODIFY_ONLY Listener_DrainType = 1 -) - -var Listener_DrainType_name = map[int32]string{ - 0: "DEFAULT", - 1: "MODIFY_ONLY", -} - -var Listener_DrainType_value = map[string]int32{ - "DEFAULT": 0, - "MODIFY_ONLY": 1, -} - -func (x Listener_DrainType) String() string { - return proto.EnumName(Listener_DrainType_name, int32(x)) -} - -func (Listener_DrainType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_34e2cd84a105bcd1, []int{0, 0} -} - -// [#comment:next free field: 16] -type Listener struct { - // The unique name by which this listener is known. If no name is provided, - // Envoy will allocate an internal UUID for the listener. If the listener is to be dynamically - // updated or removed via :ref:`LDS ` a unique name must be provided. - // By default, the maximum length of a listener's name is limited to 60 characters. This limit can - // be increased by setting the :option:`--max-obj-name-len` command line argument to the desired - // value. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The address that the listener should listen on. In general, the address must be unique, though - // that is governed by the bind rules of the OS. E.g., multiple listeners can listen on port 0 on - // Linux as the actual port will be allocated by the OS. - Address core.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address"` - // A list of filter chains to consider for this listener. The - // :ref:`FilterChain ` with the most specific - // :ref:`FilterChainMatch ` criteria is used on a - // connection. - // - // Example using SNI for filter chain selection can be found in the - // :ref:`FAQ entry `. - FilterChains []listener.FilterChain `protobuf:"bytes,3,rep,name=filter_chains,json=filterChains,proto3" json:"filter_chains"` - // If a connection is redirected using *iptables*, the port on which the proxy - // receives it might be different from the original destination address. When this flag is set to - // true, the listener hands off redirected connections to the listener associated with the - // original destination address. If there is no listener associated with the original destination - // address, the connection is handled by the listener that receives it. Defaults to false. - // - // .. attention:: - // - // This field is deprecated. Use :ref:`an original_dst ` - // :ref:`listener filter ` instead. - // - // Note that hand off to another listener is *NOT* performed without this flag. Once - // :ref:`FilterChainMatch ` is implemented this flag - // will be removed, as filter chain matching can be used to select a filter chain based on the - // restored destination address. - UseOriginalDst *types.BoolValue `protobuf:"bytes,4,opt,name=use_original_dst,json=useOriginalDst,proto3" json:"use_original_dst,omitempty"` // Deprecated: Do not use. - // Soft limit on size of the listener’s new connection read and write buffers. - // If unspecified, an implementation defined default is applied (1MiB). - PerConnectionBufferLimitBytes *types.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"` - // Listener metadata. - Metadata *core.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` - // [#not-implemented-hide:] - DeprecatedV1 *Listener_DeprecatedV1 `protobuf:"bytes,7,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` - // The type of draining to perform at a listener-wide level. - DrainType Listener_DrainType `protobuf:"varint,8,opt,name=drain_type,json=drainType,proto3,enum=envoy.api.v2.Listener_DrainType" json:"drain_type,omitempty"` - // Listener filters have the opportunity to manipulate and augment the connection metadata that - // is used in connection filter chain matching, for example. These filters are run before any in - // :ref:`filter_chains `. Order matters as the - // filters are processed sequentially right after a socket has been accepted by the listener, and - // before a connection is created. - ListenerFilters []listener.ListenerFilter `protobuf:"bytes,9,rep,name=listener_filters,json=listenerFilters,proto3" json:"listener_filters"` - // The timeout to wait for all listener filters to complete operation. If the timeout is reached, - // the accepted socket is closed without a connection being created. Specify 0 to disable the - // timeout. If not specified, a default timeout of 15s is used. - ListenerFiltersTimeout *time.Duration `protobuf:"bytes,15,opt,name=listener_filters_timeout,json=listenerFiltersTimeout,proto3,stdduration" json:"listener_filters_timeout,omitempty"` - // Whether the listener should be set as a transparent socket. - // When this flag is set to true, connections can be redirected to the listener using an - // *iptables* *TPROXY* target, in which case the original source and destination addresses and - // ports are preserved on accepted connections. This flag should be used in combination with - // :ref:`an original_dst ` :ref:`listener filter - // ` to mark the connections' local addresses as - // "restored." This can be used to hand off each redirected connection to another listener - // associated with the connection's destination address. Direct connections to the socket without - // using *TPROXY* cannot be distinguished from connections redirected using *TPROXY* and are - // therefore treated as if they were redirected. - // When this flag is set to false, the listener's socket is explicitly reset as non-transparent. - // Setting this flag requires Envoy to run with the *CAP_NET_ADMIN* capability. - // When this flag is not set (default), the socket is not modified, i.e. the transparent option - // is neither set nor reset. - Transparent *types.BoolValue `protobuf:"bytes,10,opt,name=transparent,proto3" json:"transparent,omitempty"` - // Whether the listener should set the *IP_FREEBIND* socket option. When this - // flag is set to true, listeners can be bound to an IP address that is not - // configured on the system running Envoy. When this flag is set to false, the - // option *IP_FREEBIND* is disabled on the socket. When this flag is not set - // (default), the socket is not modified, i.e. the option is neither enabled - // nor disabled. - Freebind *types.BoolValue `protobuf:"bytes,11,opt,name=freebind,proto3" json:"freebind,omitempty"` - // Additional socket options that may not be present in Envoy source code or - // precompiled binaries. - SocketOptions []*core.SocketOption `protobuf:"bytes,13,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"` - // Whether the listener should accept TCP Fast Open (TFO) connections. - // When this flag is set to a value greater than 0, the option TCP_FASTOPEN is enabled on - // the socket, with a queue length of the specified size - // (see `details in RFC7413 `_). - // When this flag is set to 0, the option TCP_FASTOPEN is disabled on the socket. - // When this flag is not set (default), the socket is not modified, - // i.e. the option is neither enabled nor disabled. - // - // On Linux, the net.ipv4.tcp_fastopen kernel parameter must include flag 0x2 to enable - // TCP_FASTOPEN. - // See `ip-sysctl.txt `_. - // - // On macOS, only values of 0, 1, and unset are valid; other values may result in an error. - // To set the queue length on macOS, set the net.inet.tcp.fastopen_backlog kernel parameter. - TcpFastOpenQueueLength *types.UInt32Value `protobuf:"bytes,12,opt,name=tcp_fast_open_queue_length,json=tcpFastOpenQueueLength,proto3" json:"tcp_fast_open_queue_length,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Listener) Reset() { *m = Listener{} } -func (m *Listener) String() string { return proto.CompactTextString(m) } -func (*Listener) ProtoMessage() {} -func (*Listener) Descriptor() ([]byte, []int) { - return fileDescriptor_34e2cd84a105bcd1, []int{0} -} -func (m *Listener) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Listener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Listener.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Listener) XXX_Merge(src proto.Message) { - xxx_messageInfo_Listener.Merge(m, src) -} -func (m *Listener) XXX_Size() int { - return m.Size() -} -func (m *Listener) XXX_DiscardUnknown() { - xxx_messageInfo_Listener.DiscardUnknown(m) -} - -var xxx_messageInfo_Listener proto.InternalMessageInfo - -func (m *Listener) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Listener) GetAddress() core.Address { - if m != nil { - return m.Address - } - return core.Address{} -} - -func (m *Listener) GetFilterChains() []listener.FilterChain { - if m != nil { - return m.FilterChains - } - return nil -} +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Deprecated: Do not use. -func (m *Listener) GetUseOriginalDst() *types.BoolValue { - if m != nil { - return m.UseOriginalDst - } - return nil -} - -func (m *Listener) GetPerConnectionBufferLimitBytes() *types.UInt32Value { - if m != nil { - return m.PerConnectionBufferLimitBytes - } - return nil -} - -func (m *Listener) GetMetadata() *core.Metadata { - if m != nil { - return m.Metadata - } - return nil -} - -func (m *Listener) GetDeprecatedV1() *Listener_DeprecatedV1 { - if m != nil { - return m.DeprecatedV1 - } - return nil -} - -func (m *Listener) GetDrainType() Listener_DrainType { - if m != nil { - return m.DrainType - } - return Listener_DEFAULT +type LdsDummy struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *Listener) GetListenerFilters() []listener.ListenerFilter { - if m != nil { - return m.ListenerFilters - } - return nil -} - -func (m *Listener) GetListenerFiltersTimeout() *time.Duration { - if m != nil { - return m.ListenerFiltersTimeout - } - return nil -} - -func (m *Listener) GetTransparent() *types.BoolValue { - if m != nil { - return m.Transparent - } - return nil -} - -func (m *Listener) GetFreebind() *types.BoolValue { - if m != nil { - return m.Freebind - } - return nil -} - -func (m *Listener) GetSocketOptions() []*core.SocketOption { - if m != nil { - return m.SocketOptions - } - return nil +func (m *LdsDummy) Reset() { *m = LdsDummy{} } +func (m *LdsDummy) String() string { return proto.CompactTextString(m) } +func (*LdsDummy) ProtoMessage() {} +func (*LdsDummy) Descriptor() ([]byte, []int) { + return fileDescriptor_34e2cd84a105bcd1, []int{0} } -func (m *Listener) GetTcpFastOpenQueueLength() *types.UInt32Value { - if m != nil { - return m.TcpFastOpenQueueLength - } - return nil +func (m *LdsDummy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LdsDummy.Unmarshal(m, b) } - -// [#not-implemented-hide:] -type Listener_DeprecatedV1 struct { - // Whether the listener should bind to the port. A listener that doesn't - // bind can only receive connections redirected from other listeners that - // set use_original_dst parameter to true. Default is true. - // - // [V2-API-DIFF] This is deprecated in v2, all Listeners will bind to their - // port. An additional filter chain must be created for every original - // destination port this listener may redirect to in v2, with the original - // port specified in the FilterChainMatch destination_port field. - // - // [#comment:TODO(PiotrSikora): Remove this once verified that we no longer need it.] - BindToPort *types.BoolValue `protobuf:"bytes,1,opt,name=bind_to_port,json=bindToPort,proto3" json:"bind_to_port,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Listener_DeprecatedV1) Reset() { *m = Listener_DeprecatedV1{} } -func (m *Listener_DeprecatedV1) String() string { return proto.CompactTextString(m) } -func (*Listener_DeprecatedV1) ProtoMessage() {} -func (*Listener_DeprecatedV1) Descriptor() ([]byte, []int) { - return fileDescriptor_34e2cd84a105bcd1, []int{0, 0} -} -func (m *Listener_DeprecatedV1) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Listener_DeprecatedV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Listener_DeprecatedV1.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } +func (m *LdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LdsDummy.Marshal(b, m, deterministic) } -func (m *Listener_DeprecatedV1) XXX_Merge(src proto.Message) { - xxx_messageInfo_Listener_DeprecatedV1.Merge(m, src) +func (m *LdsDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_LdsDummy.Merge(m, src) } -func (m *Listener_DeprecatedV1) XXX_Size() int { - return m.Size() +func (m *LdsDummy) XXX_Size() int { + return xxx_messageInfo_LdsDummy.Size(m) } -func (m *Listener_DeprecatedV1) XXX_DiscardUnknown() { - xxx_messageInfo_Listener_DeprecatedV1.DiscardUnknown(m) +func (m *LdsDummy) XXX_DiscardUnknown() { + xxx_messageInfo_LdsDummy.DiscardUnknown(m) } -var xxx_messageInfo_Listener_DeprecatedV1 proto.InternalMessageInfo - -func (m *Listener_DeprecatedV1) GetBindToPort() *types.BoolValue { - if m != nil { - return m.BindToPort - } - return nil -} +var xxx_messageInfo_LdsDummy proto.InternalMessageInfo func init() { - proto.RegisterEnum("envoy.api.v2.Listener_DrainType", Listener_DrainType_name, Listener_DrainType_value) - proto.RegisterType((*Listener)(nil), "envoy.api.v2.Listener") - proto.RegisterType((*Listener_DeprecatedV1)(nil), "envoy.api.v2.Listener.DeprecatedV1") + proto.RegisterType((*LdsDummy)(nil), "envoy.api.v2.LdsDummy") } func init() { proto.RegisterFile("envoy/api/v2/lds.proto", fileDescriptor_34e2cd84a105bcd1) } var fileDescriptor_34e2cd84a105bcd1 = []byte{ - // 857 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0x38, 0x6e, 0xe3, 0x8c, 0x1d, 0xdb, 0x1a, 0xa1, 0x74, 0x31, 0xc1, 0x36, 0x06, 0x24, - 0xc3, 0xc1, 0xa6, 0xae, 0x04, 0x52, 0xa9, 0x84, 0xba, 0x35, 0x56, 0x8b, 0x5c, 0x1c, 0x36, 0x69, - 0x68, 0x4e, 0xab, 0xf1, 0xee, 0xb3, 0x33, 0x62, 0x3d, 0x33, 0x9d, 0x99, 0x35, 0xf8, 0xca, 0x09, - 0x71, 0x84, 0x0b, 0x3f, 0x81, 0xdf, 0xc0, 0x89, 0x63, 0x8f, 0x48, 0xdc, 0x01, 0x45, 0x5c, 0x10, - 0xbf, 0x01, 0x09, 0xed, 0x78, 0xd7, 0xd8, 0x4d, 0x42, 0x38, 0x70, 0x7b, 0x33, 0xef, 0xfb, 0xbe, - 0x7d, 0xf3, 0xbd, 0x37, 0xb3, 0x78, 0x1f, 0xf8, 0x5c, 0x2c, 0xba, 0x54, 0xb2, 0xee, 0xbc, 0xd7, - 0x8d, 0x42, 0xdd, 0x91, 0x4a, 0x18, 0x41, 0x4a, 0x76, 0xbf, 0x43, 0x25, 0xeb, 0xcc, 0x7b, 0xb5, - 0xc6, 0x06, 0x2a, 0x10, 0x0a, 0xba, 0x34, 0x0c, 0x15, 0xe8, 0x14, 0x5e, 0x3b, 0xb8, 0x08, 0x18, - 0x53, 0x0d, 0x97, 0x66, 0x43, 0xa6, 0x03, 0x31, 0x07, 0xb5, 0x48, 0xb3, 0x6f, 0x6c, 0x96, 0xc0, - 0xb4, 0x01, 0x0e, 0x6a, 0x15, 0x64, 0x1a, 0x53, 0x21, 0xa6, 0x11, 0x58, 0x18, 0xe5, 0x5c, 0x18, - 0x6a, 0x98, 0xe0, 0xd9, 0xf7, 0xeb, 0x69, 0xd6, 0xae, 0xc6, 0xf1, 0xa4, 0x1b, 0xc6, 0xca, 0x02, - 0xae, 0xca, 0x7f, 0xae, 0xa8, 0x94, 0xa0, 0x32, 0xfe, 0xad, 0x39, 0x8d, 0x58, 0x48, 0x0d, 0x74, - 0xb3, 0x20, 0x4d, 0xbc, 0x34, 0x15, 0x53, 0x61, 0xc3, 0x6e, 0x12, 0x2d, 0x77, 0x5b, 0x7f, 0x15, - 0x70, 0x61, 0x98, 0xd6, 0x47, 0x08, 0xce, 0x73, 0x3a, 0x03, 0x07, 0x35, 0x51, 0x7b, 0xd7, 0xb3, - 0x31, 0xe9, 0xe3, 0x9d, 0xd4, 0x20, 0x27, 0xd7, 0x44, 0xed, 0x62, 0xaf, 0xd6, 0x59, 0x37, 0xb4, - 0x93, 0x38, 0xd4, 0xb9, 0xbf, 0x44, 0xb8, 0xe5, 0xe7, 0xbf, 0x34, 0xb6, 0x7e, 0xf8, 0xe3, 0xc7, - 0xed, 0x1b, 0x5f, 0xa3, 0x5c, 0x15, 0x79, 0x19, 0x95, 0x7c, 0x8a, 0xf7, 0x26, 0x2c, 0x32, 0xa0, - 0xfc, 0xe0, 0x8c, 0x32, 0xae, 0x9d, 0xed, 0xe6, 0x76, 0xbb, 0xd8, 0x6b, 0x6d, 0x6a, 0xad, 0x8c, - 0x1a, 0x58, 0xec, 0x83, 0x04, 0xba, 0xa6, 0xf9, 0x0d, 0xca, 0x15, 0x90, 0x57, 0x9a, 0xfc, 0x93, - 0xd4, 0xe4, 0x21, 0xae, 0xc6, 0x1a, 0x7c, 0xa1, 0xd8, 0x94, 0x71, 0x1a, 0xf9, 0xa1, 0x36, 0x4e, - 0x3e, 0xad, 0x73, 0xe9, 0x54, 0x27, 0x73, 0xaa, 0xe3, 0x0a, 0x11, 0x9d, 0xd0, 0x28, 0x06, 0x37, - 0xe7, 0x20, 0xaf, 0x1c, 0x6b, 0x18, 0xa5, 0xb4, 0xbe, 0x36, 0x64, 0x82, 0x5f, 0x93, 0x49, 0x7d, - 0x82, 0x73, 0x08, 0x12, 0xc3, 0xfd, 0x71, 0x3c, 0x99, 0x80, 0xf2, 0x23, 0x36, 0x63, 0xc6, 0x1f, - 0x2f, 0x0c, 0x68, 0xe7, 0x86, 0x95, 0x3e, 0xb8, 0x20, 0xfd, 0xe4, 0x11, 0x37, 0x77, 0x7a, 0x56, - 0xdc, 0x7b, 0x55, 0x82, 0x7a, 0xb0, 0x52, 0x71, 0xad, 0xc8, 0x30, 0xd1, 0x70, 0x13, 0x09, 0xf2, - 0x1e, 0x2e, 0xcc, 0xc0, 0xd0, 0x90, 0x1a, 0xea, 0xdc, 0xb4, 0x72, 0xaf, 0x5c, 0xe2, 0xe8, 0xe3, - 0x14, 0xe2, 0xad, 0xc0, 0xe4, 0x21, 0xde, 0x0b, 0x41, 0x2a, 0x08, 0xa8, 0x81, 0xd0, 0x9f, 0xdf, - 0x76, 0x76, 0x2c, 0xfb, 0xf5, 0x4d, 0x76, 0xd6, 0xcc, 0x4e, 0x7f, 0x85, 0x3d, 0xb9, 0xed, 0x95, - 0xc2, 0xb5, 0x15, 0xf9, 0x00, 0xe3, 0x50, 0x51, 0xc6, 0x7d, 0xb3, 0x90, 0xe0, 0x14, 0x9a, 0xa8, - 0x5d, 0xee, 0x35, 0xaf, 0x92, 0x49, 0x80, 0xc7, 0x0b, 0x09, 0xde, 0x6e, 0x98, 0x85, 0xe4, 0x04, - 0x57, 0xb3, 0x5e, 0xf9, 0xcb, 0x76, 0x68, 0x67, 0xd7, 0x76, 0xf4, 0xcd, 0x2b, 0x3a, 0x9a, 0xe9, - 0x2d, 0x3b, 0xeb, 0xe6, 0x93, 0xa6, 0x7a, 0x95, 0x68, 0x63, 0x57, 0x93, 0x53, 0xec, 0xbc, 0xa8, - 0xeb, 0x1b, 0x36, 0x03, 0x11, 0x1b, 0xa7, 0x62, 0x4f, 0xfb, 0xf2, 0x05, 0xeb, 0xfb, 0xe9, 0xfd, - 0x70, 0xf3, 0xdf, 0xfd, 0xda, 0x40, 0xde, 0xfe, 0x0b, 0x9a, 0xc7, 0x4b, 0x3a, 0xb9, 0x87, 0x8b, - 0x46, 0x51, 0xae, 0x25, 0x55, 0xc0, 0x8d, 0x83, 0xaf, 0x9b, 0x11, 0x6f, 0x1d, 0x4e, 0xde, 0xc5, - 0x85, 0x89, 0x02, 0x18, 0x33, 0x1e, 0x3a, 0xc5, 0x6b, 0xa9, 0x2b, 0x2c, 0x19, 0xe0, 0xb2, 0x16, - 0xc1, 0x67, 0x60, 0x7c, 0x21, 0xed, 0x2d, 0x77, 0xf6, 0xac, 0x4d, 0x8d, 0x4b, 0x5a, 0x7e, 0x64, - 0x81, 0x23, 0x8b, 0xf3, 0xf6, 0xf4, 0xda, 0x4a, 0x93, 0xa7, 0xb8, 0x66, 0x02, 0xe9, 0x4f, 0xa8, - 0x4e, 0x94, 0x80, 0xfb, 0xcf, 0x62, 0x88, 0xc1, 0x8f, 0x80, 0x4f, 0xcd, 0x99, 0x53, 0xfa, 0x0f, - 0x53, 0xb9, 0x6f, 0x02, 0x39, 0xa0, 0xda, 0x8c, 0x24, 0xf0, 0x4f, 0x12, 0xf2, 0xd0, 0x72, 0x6b, - 0x43, 0x5c, 0x5a, 0x9f, 0x14, 0x72, 0x0f, 0x97, 0x92, 0xca, 0x7d, 0x23, 0x7c, 0x29, 0x94, 0xb1, - 0x6f, 0xc1, 0xbf, 0x9f, 0x16, 0x27, 0xf8, 0x63, 0x71, 0x28, 0x94, 0x69, 0xbd, 0x85, 0x77, 0x57, - 0x03, 0x43, 0x8a, 0x78, 0xa7, 0xff, 0xe1, 0xe0, 0xfe, 0x93, 0xe1, 0x71, 0x75, 0x8b, 0x54, 0x70, - 0xf1, 0xf1, 0xa8, 0xff, 0x68, 0x70, 0xea, 0x8f, 0x3e, 0x1e, 0x9e, 0x56, 0xd1, 0x47, 0xf9, 0x42, - 0xb9, 0x5a, 0xe9, 0xfd, 0x89, 0xb0, 0x93, 0xcd, 0x46, 0x3f, 0x7b, 0x4e, 0x8f, 0x40, 0xcd, 0x59, - 0x00, 0xe4, 0x29, 0xae, 0x1c, 0x19, 0x05, 0x74, 0x96, 0x21, 0x34, 0xa9, 0x6f, 0x1a, 0xb7, 0xa2, - 0x78, 0xf0, 0x2c, 0x06, 0x6d, 0x6a, 0x8d, 0x2b, 0xf3, 0x5a, 0x0a, 0xae, 0xa1, 0xb5, 0xd5, 0x46, - 0xef, 0x20, 0x12, 0xe3, 0xf2, 0x00, 0x4c, 0x70, 0xf6, 0x3f, 0x0a, 0xb7, 0xbe, 0xfc, 0xf9, 0xf7, - 0x6f, 0x73, 0x07, 0xad, 0x5b, 0x1b, 0x7f, 0x86, 0xbb, 0xd9, 0x38, 0xea, 0xbb, 0xe8, 0x6d, 0xf7, - 0xfd, 0xef, 0xcf, 0xeb, 0xe8, 0xf9, 0x79, 0x1d, 0xfd, 0x74, 0x5e, 0x47, 0xbf, 0x9d, 0xd7, 0x11, - 0xae, 0x31, 0xb1, 0x14, 0x96, 0x4a, 0x7c, 0xb1, 0xd8, 0xf8, 0x86, 0x5b, 0x18, 0x86, 0xfa, 0x30, - 0xf1, 0xfb, 0x10, 0x7d, 0x85, 0xd0, 0xf8, 0xa6, 0xf5, 0xfe, 0xce, 0xdf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x30, 0xb2, 0x88, 0xf1, 0xe9, 0x06, 0x00, 0x00, -} - -func (this *Listener) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Listener) - if !ok { - that2, ok := that.(Listener) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if !this.Address.Equal(&that1.Address) { - return false - } - if len(this.FilterChains) != len(that1.FilterChains) { - return false - } - for i := range this.FilterChains { - if !this.FilterChains[i].Equal(&that1.FilterChains[i]) { - return false - } - } - if !this.UseOriginalDst.Equal(that1.UseOriginalDst) { - return false - } - if !this.PerConnectionBufferLimitBytes.Equal(that1.PerConnectionBufferLimitBytes) { - return false - } - if !this.Metadata.Equal(that1.Metadata) { - return false - } - if !this.DeprecatedV1.Equal(that1.DeprecatedV1) { - return false - } - if this.DrainType != that1.DrainType { - return false - } - if len(this.ListenerFilters) != len(that1.ListenerFilters) { - return false - } - for i := range this.ListenerFilters { - if !this.ListenerFilters[i].Equal(&that1.ListenerFilters[i]) { - return false - } - } - if this.ListenerFiltersTimeout != nil && that1.ListenerFiltersTimeout != nil { - if *this.ListenerFiltersTimeout != *that1.ListenerFiltersTimeout { - return false - } - } else if this.ListenerFiltersTimeout != nil { - return false - } else if that1.ListenerFiltersTimeout != nil { - return false - } - if !this.Transparent.Equal(that1.Transparent) { - return false - } - if !this.Freebind.Equal(that1.Freebind) { - return false - } - if len(this.SocketOptions) != len(that1.SocketOptions) { - return false - } - for i := range this.SocketOptions { - if !this.SocketOptions[i].Equal(that1.SocketOptions[i]) { - return false - } - } - if !this.TcpFastOpenQueueLength.Equal(that1.TcpFastOpenQueueLength) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Listener_DeprecatedV1) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Listener_DeprecatedV1) - if !ok { - that2, ok := that.(Listener_DeprecatedV1) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.BindToPort.Equal(that1.BindToPort) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true + // 394 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0xbd, 0x4e, 0xe3, 0x40, + 0x14, 0x85, 0xd7, 0x59, 0x6d, 0x36, 0x1a, 0xad, 0xb2, 0xc8, 0x12, 0x84, 0x38, 0x3f, 0xa0, 0x40, + 0x11, 0x51, 0xd8, 0x28, 0xe9, 0x52, 0x46, 0x11, 0x55, 0x8a, 0x88, 0x50, 0xd0, 0x4e, 0xec, 0x4b, + 0x18, 0xc9, 0xf6, 0x0c, 0x33, 0x63, 0x83, 0x45, 0x83, 0xa8, 0x10, 0x0d, 0x05, 0x12, 0xe2, 0x01, + 0x78, 0x0a, 0x9e, 0x80, 0x16, 0xf1, 0x0a, 0x3c, 0x01, 0xe9, 0x11, 0x8a, 0xed, 0x49, 0x70, 0x50, + 0xa8, 0xe8, 0x6c, 0x7f, 0xe7, 0x9e, 0x7b, 0x75, 0x8e, 0xd1, 0x1a, 0xf8, 0x21, 0x8d, 0x2c, 0xcc, + 0x88, 0x15, 0xb6, 0x2c, 0xd7, 0x11, 0x26, 0xe3, 0x54, 0x52, 0xfd, 0x5f, 0xfc, 0xdd, 0xc4, 0x8c, + 0x98, 0x61, 0xcb, 0xa8, 0x66, 0x54, 0x0e, 0x11, 0x36, 0x0d, 0x81, 0x47, 0x89, 0xd6, 0xa8, 0x8e, + 0x29, 0x1d, 0xbb, 0x10, 0x63, 0xec, 0xfb, 0x54, 0x62, 0x49, 0xa8, 0x9f, 0x3a, 0x19, 0xf5, 0x94, + 0xc6, 0x6f, 0xa3, 0xe0, 0xc8, 0x72, 0x02, 0x1e, 0x0b, 0x96, 0xf1, 0x53, 0x8e, 0x19, 0x03, 0xae, + 0xe6, 0x37, 0xd3, 0xdd, 0x73, 0x63, 0x8b, 0x83, 0xa0, 0x01, 0xb7, 0x41, 0x39, 0x04, 0x0e, 0xc3, + 0x19, 0x81, 0x47, 0xc6, 0x1c, 0x4b, 0xc5, 0x6b, 0x5f, 0xb8, 0x90, 0x58, 0x06, 0x6a, 0x41, 0x29, + 0xc4, 0x2e, 0x71, 0xb0, 0x04, 0x4b, 0x3d, 0xa4, 0xa0, 0x92, 0xcd, 0x86, 0x08, 0x09, 0x3e, 0xf0, + 0x04, 0x36, 0x10, 0x2a, 0xf4, 0x1d, 0xd1, 0x0b, 0x3c, 0x2f, 0x6a, 0x4d, 0x72, 0x68, 0xbd, 0x9f, + 0xe2, 0x9e, 0x0a, 0x67, 0x08, 0x3c, 0x24, 0x36, 0xe8, 0x18, 0x15, 0x7b, 0xe0, 0x4a, 0xac, 0x04, + 0x42, 0xdf, 0x32, 0x3f, 0x87, 0x6b, 0xc6, 0x74, 0x36, 0xb6, 0x0f, 0x27, 0x01, 0x08, 0x69, 0x6c, + 0x7f, 0x2f, 0x12, 0x8c, 0xfa, 0x02, 0x1a, 0xbf, 0x9a, 0xda, 0xae, 0xa6, 0x1f, 0xa2, 0xff, 0x43, + 0xc9, 0x01, 0x7b, 0xf3, 0x1d, 0xf5, 0x85, 0xf1, 0x45, 0xfb, 0x8d, 0xa5, 0x3c, 0xe3, 0x7c, 0x8e, + 0x8a, 0x7b, 0x20, 0xed, 0xe3, 0x1f, 0x34, 0x6e, 0x5e, 0xbe, 0xbc, 0xde, 0xe6, 0xca, 0x8d, 0x52, + 0xe6, 0x57, 0xea, 0xa8, 0x78, 0x45, 0x8c, 0x7f, 0x77, 0xb4, 0x1d, 0xa3, 0x76, 0xfd, 0x70, 0x37, + 0xf9, 0x5b, 0x42, 0xab, 0x19, 0x47, 0x75, 0x4a, 0xf7, 0xe0, 0xed, 0xfe, 0xfd, 0xe6, 0x4f, 0x45, + 0x2f, 0x27, 0x58, 0x24, 0x79, 0x9b, 0xb3, 0x9e, 0xc2, 0xf6, 0xe3, 0xc5, 0xd3, 0x73, 0x3e, 0xb7, + 0xa2, 0x21, 0x83, 0xd0, 0xe4, 0x2c, 0xc6, 0xe9, 0x59, 0x94, 0xb9, 0xb0, 0x3b, 0xad, 0x71, 0x30, + 0xad, 0x74, 0xa0, 0x5d, 0x69, 0xda, 0xa0, 0x30, 0xca, 0xc7, 0x05, 0xb7, 0x3f, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x34, 0x66, 0x06, 0x72, 0x1b, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -549,6 +108,7 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ListenerDiscoveryServiceClient interface { + DeltaListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_DeltaListenersClient, error) StreamListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_StreamListenersClient, error) FetchListeners(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) } @@ -561,8 +121,39 @@ return &listenerDiscoveryServiceClient{cc} } +func (c *listenerDiscoveryServiceClient) DeltaListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_DeltaListenersClient, error) { + stream, err := c.cc.NewStream(ctx, &_ListenerDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ListenerDiscoveryService/DeltaListeners", opts...) + if err != nil { + return nil, err + } + x := &listenerDiscoveryServiceDeltaListenersClient{stream} + return x, nil +} + +type ListenerDiscoveryService_DeltaListenersClient interface { + Send(*DeltaDiscoveryRequest) error + Recv() (*DeltaDiscoveryResponse, error) + grpc.ClientStream +} + +type listenerDiscoveryServiceDeltaListenersClient struct { + grpc.ClientStream +} + +func (x *listenerDiscoveryServiceDeltaListenersClient) Send(m *DeltaDiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *listenerDiscoveryServiceDeltaListenersClient) Recv() (*DeltaDiscoveryResponse, error) { + m := new(DeltaDiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *listenerDiscoveryServiceClient) StreamListeners(ctx context.Context, opts ...grpc.CallOption) (ListenerDiscoveryService_StreamListenersClient, error) { - stream, err := c.cc.NewStream(ctx, &_ListenerDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ListenerDiscoveryService/StreamListeners", opts...) + stream, err := c.cc.NewStream(ctx, &_ListenerDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ListenerDiscoveryService/StreamListeners", opts...) if err != nil { return nil, err } @@ -603,14 +194,55 @@ // ListenerDiscoveryServiceServer is the server API for ListenerDiscoveryService service. type ListenerDiscoveryServiceServer interface { + DeltaListeners(ListenerDiscoveryService_DeltaListenersServer) error StreamListeners(ListenerDiscoveryService_StreamListenersServer) error FetchListeners(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error) } +// UnimplementedListenerDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedListenerDiscoveryServiceServer struct { +} + +func (*UnimplementedListenerDiscoveryServiceServer) DeltaListeners(srv ListenerDiscoveryService_DeltaListenersServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaListeners not implemented") +} +func (*UnimplementedListenerDiscoveryServiceServer) StreamListeners(srv ListenerDiscoveryService_StreamListenersServer) error { + return status.Errorf(codes.Unimplemented, "method StreamListeners not implemented") +} +func (*UnimplementedListenerDiscoveryServiceServer) FetchListeners(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchListeners not implemented") +} + func RegisterListenerDiscoveryServiceServer(s *grpc.Server, srv ListenerDiscoveryServiceServer) { s.RegisterService(&_ListenerDiscoveryService_serviceDesc, srv) } +func _ListenerDiscoveryService_DeltaListeners_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ListenerDiscoveryServiceServer).DeltaListeners(&listenerDiscoveryServiceDeltaListenersServer{stream}) +} + +type ListenerDiscoveryService_DeltaListenersServer interface { + Send(*DeltaDiscoveryResponse) error + Recv() (*DeltaDiscoveryRequest, error) + grpc.ServerStream +} + +type listenerDiscoveryServiceDeltaListenersServer struct { + grpc.ServerStream +} + +func (x *listenerDiscoveryServiceDeltaListenersServer) Send(m *DeltaDiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *listenerDiscoveryServiceDeltaListenersServer) Recv() (*DeltaDiscoveryRequest, error) { + m := new(DeltaDiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func _ListenerDiscoveryService_StreamListeners_Handler(srv interface{}, stream grpc.ServerStream) error { return srv.(ListenerDiscoveryServiceServer).StreamListeners(&listenerDiscoveryServiceStreamListenersServer{stream}) } @@ -666,6 +298,12 @@ }, Streams: []grpc.StreamDesc{ { + StreamName: "DeltaListeners", + Handler: _ListenerDiscoveryService_DeltaListeners_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { StreamName: "StreamListeners", Handler: _ListenerDiscoveryService_StreamListeners_Handler, ServerStreams: true, @@ -674,1028 +312,3 @@ }, Metadata: "envoy/api/v2/lds.proto", } - -func (m *Listener) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Listener) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintLds(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - dAtA[i] = 0x12 - i++ - i = encodeVarintLds(dAtA, i, uint64(m.Address.Size())) - n1, err := m.Address.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if len(m.FilterChains) > 0 { - for _, msg := range m.FilterChains { - dAtA[i] = 0x1a - i++ - i = encodeVarintLds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.UseOriginalDst != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintLds(dAtA, i, uint64(m.UseOriginalDst.Size())) - n2, err := m.UseOriginalDst.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.PerConnectionBufferLimitBytes != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintLds(dAtA, i, uint64(m.PerConnectionBufferLimitBytes.Size())) - n3, err := m.PerConnectionBufferLimitBytes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Metadata != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintLds(dAtA, i, uint64(m.Metadata.Size())) - n4, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.DeprecatedV1 != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintLds(dAtA, i, uint64(m.DeprecatedV1.Size())) - n5, err := m.DeprecatedV1.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.DrainType != 0 { - dAtA[i] = 0x40 - i++ - i = encodeVarintLds(dAtA, i, uint64(m.DrainType)) - } - if len(m.ListenerFilters) > 0 { - for _, msg := range m.ListenerFilters { - dAtA[i] = 0x4a - i++ - i = encodeVarintLds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Transparent != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintLds(dAtA, i, uint64(m.Transparent.Size())) - n6, err := m.Transparent.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.Freebind != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintLds(dAtA, i, uint64(m.Freebind.Size())) - n7, err := m.Freebind.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.TcpFastOpenQueueLength != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintLds(dAtA, i, uint64(m.TcpFastOpenQueueLength.Size())) - n8, err := m.TcpFastOpenQueueLength.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if len(m.SocketOptions) > 0 { - for _, msg := range m.SocketOptions { - dAtA[i] = 0x6a - i++ - i = encodeVarintLds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.ListenerFiltersTimeout != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintLds(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.ListenerFiltersTimeout))) - n9, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.ListenerFiltersTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Listener_DeprecatedV1) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Listener_DeprecatedV1) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.BindToPort != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintLds(dAtA, i, uint64(m.BindToPort.Size())) - n10, err := m.BindToPort.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintLds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Listener) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovLds(uint64(l)) - } - l = m.Address.Size() - n += 1 + l + sovLds(uint64(l)) - if len(m.FilterChains) > 0 { - for _, e := range m.FilterChains { - l = e.Size() - n += 1 + l + sovLds(uint64(l)) - } - } - if m.UseOriginalDst != nil { - l = m.UseOriginalDst.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.PerConnectionBufferLimitBytes != nil { - l = m.PerConnectionBufferLimitBytes.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.DeprecatedV1 != nil { - l = m.DeprecatedV1.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.DrainType != 0 { - n += 1 + sovLds(uint64(m.DrainType)) - } - if len(m.ListenerFilters) > 0 { - for _, e := range m.ListenerFilters { - l = e.Size() - n += 1 + l + sovLds(uint64(l)) - } - } - if m.Transparent != nil { - l = m.Transparent.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.Freebind != nil { - l = m.Freebind.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.TcpFastOpenQueueLength != nil { - l = m.TcpFastOpenQueueLength.Size() - n += 1 + l + sovLds(uint64(l)) - } - if len(m.SocketOptions) > 0 { - for _, e := range m.SocketOptions { - l = e.Size() - n += 1 + l + sovLds(uint64(l)) - } - } - if m.ListenerFiltersTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.ListenerFiltersTimeout) - n += 1 + l + sovLds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Listener_DeprecatedV1) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.BindToPort != nil { - l = m.BindToPort.Size() - n += 1 + l + sovLds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovLds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozLds(x uint64) (n int) { - return sovLds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Listener) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Listener: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Listener: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Address.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterChains", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FilterChains = append(m.FilterChains, listener.FilterChain{}) - if err := m.FilterChains[len(m.FilterChains)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UseOriginalDst", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UseOriginalDst == nil { - m.UseOriginalDst = &types.BoolValue{} - } - if err := m.UseOriginalDst.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerConnectionBufferLimitBytes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PerConnectionBufferLimitBytes == nil { - m.PerConnectionBufferLimitBytes = &types.UInt32Value{} - } - if err := m.PerConnectionBufferLimitBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &core.Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedV1", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DeprecatedV1 == nil { - m.DeprecatedV1 = &Listener_DeprecatedV1{} - } - if err := m.DeprecatedV1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DrainType", wireType) - } - m.DrainType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DrainType |= Listener_DrainType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListenerFilters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ListenerFilters = append(m.ListenerFilters, listener.ListenerFilter{}) - if err := m.ListenerFilters[len(m.ListenerFilters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Transparent", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Transparent == nil { - m.Transparent = &types.BoolValue{} - } - if err := m.Transparent.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Freebind", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Freebind == nil { - m.Freebind = &types.BoolValue{} - } - if err := m.Freebind.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TcpFastOpenQueueLength", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TcpFastOpenQueueLength == nil { - m.TcpFastOpenQueueLength = &types.UInt32Value{} - } - if err := m.TcpFastOpenQueueLength.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SocketOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SocketOptions = append(m.SocketOptions, &core.SocketOption{}) - if err := m.SocketOptions[len(m.SocketOptions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListenerFiltersTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ListenerFiltersTimeout == nil { - m.ListenerFiltersTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.ListenerFiltersTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Listener_DeprecatedV1) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeprecatedV1: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeprecatedV1: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BindToPort", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowLds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthLds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthLds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.BindToPort == nil { - m.BindToPort = &types.BoolValue{} - } - if err := m.BindToPort.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipLds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthLds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthLds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipLds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthLds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthLds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowLds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipLds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthLds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthLds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowLds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/lds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/lds.proto -package v2 +package envoy_api_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,308 +30,25 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on Listener with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Listener) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Name - - { - tmp := m.GetAddress() - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "Address", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if len(m.GetFilterChains()) < 1 { - return ListenerValidationError{ - field: "FilterChains", - reason: "value must contain at least 1 item(s)", - } - } - - for idx, item := range m.GetFilterChains() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: fmt.Sprintf("FilterChains[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetUseOriginalDst() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "UseOriginalDst", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetPerConnectionBufferLimitBytes() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "PerConnectionBufferLimitBytes", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMetadata() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "Metadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetDeprecatedV1() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "DeprecatedV1", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for DrainType - - for idx, item := range m.GetListenerFilters() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: fmt.Sprintf("ListenerFilters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetListenerFiltersTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "ListenerFiltersTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetTransparent() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "Transparent", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetFreebind() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "Freebind", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetSocketOptions() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: fmt.Sprintf("SocketOptions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetTcpFastOpenQueueLength() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerValidationError{ - field: "TcpFastOpenQueueLength", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// ListenerValidationError is the validation error returned by -// Listener.Validate if the designated constraints aren't met. -type ListenerValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ListenerValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ListenerValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ListenerValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ListenerValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ListenerValidationError) ErrorName() string { return "ListenerValidationError" } - -// Error satisfies the builtin error interface -func (e ListenerValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sListener.%s: %s%s", - key, - e.field, - e.reason, - cause) -} +// define the regex for a UUID once up-front +var _lds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") -var _ error = ListenerValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ListenerValidationError{} - -// Validate checks the field values on Listener_DeprecatedV1 with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *Listener_DeprecatedV1) Validate() error { +// Validate checks the field values on LdsDummy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *LdsDummy) Validate() error { if m == nil { return nil } - { - tmp := m.GetBindToPort() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return Listener_DeprecatedV1ValidationError{ - field: "BindToPort", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - return nil } -// Listener_DeprecatedV1ValidationError is the validation error returned by -// Listener_DeprecatedV1.Validate if the designated constraints aren't met. -type Listener_DeprecatedV1ValidationError struct { +// LdsDummyValidationError is the validation error returned by +// LdsDummy.Validate if the designated constraints aren't met. +type LdsDummyValidationError struct { field string reason string cause error @@ -339,24 +56,22 @@ } // Field function returns field value. -func (e Listener_DeprecatedV1ValidationError) Field() string { return e.field } +func (e LdsDummyValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e Listener_DeprecatedV1ValidationError) Reason() string { return e.reason } +func (e LdsDummyValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e Listener_DeprecatedV1ValidationError) Cause() error { return e.cause } +func (e LdsDummyValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e Listener_DeprecatedV1ValidationError) Key() bool { return e.key } +func (e LdsDummyValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e Listener_DeprecatedV1ValidationError) ErrorName() string { - return "Listener_DeprecatedV1ValidationError" -} +func (e LdsDummyValidationError) ErrorName() string { return "LdsDummyValidationError" } // Error satisfies the builtin error interface -func (e Listener_DeprecatedV1ValidationError) Error() string { +func (e LdsDummyValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -368,14 +83,14 @@ } return fmt.Sprintf( - "invalid %sListener_DeprecatedV1.%s: %s%s", + "invalid %sLdsDummy.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = Listener_DeprecatedV1ValidationError{} +var _ error = LdsDummyValidationError{} var _ interface { Field() string @@ -383,4 +98,4 @@ Key() bool Cause() error ErrorName() string -} = Listener_DeprecatedV1ValidationError{} +} = LdsDummyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,702 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/listener/listener_components.proto + +package envoy_api_v2_listener + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + auth "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type FilterChainMatch_ConnectionSourceType int32 + +const ( + FilterChainMatch_ANY FilterChainMatch_ConnectionSourceType = 0 + FilterChainMatch_LOCAL FilterChainMatch_ConnectionSourceType = 1 + FilterChainMatch_EXTERNAL FilterChainMatch_ConnectionSourceType = 2 +) + +var FilterChainMatch_ConnectionSourceType_name = map[int32]string{ + 0: "ANY", + 1: "LOCAL", + 2: "EXTERNAL", +} + +var FilterChainMatch_ConnectionSourceType_value = map[string]int32{ + "ANY": 0, + "LOCAL": 1, + "EXTERNAL": 2, +} + +func (x FilterChainMatch_ConnectionSourceType) String() string { + return proto.EnumName(FilterChainMatch_ConnectionSourceType_name, int32(x)) +} + +func (FilterChainMatch_ConnectionSourceType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{1, 0} +} + +type Filter struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *Filter_Config + // *Filter_TypedConfig + ConfigType isFilter_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Filter) Reset() { *m = Filter{} } +func (m *Filter) String() string { return proto.CompactTextString(m) } +func (*Filter) ProtoMessage() {} +func (*Filter) Descriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{0} +} + +func (m *Filter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Filter.Unmarshal(m, b) +} +func (m *Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Filter.Marshal(b, m, deterministic) +} +func (m *Filter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Filter.Merge(m, src) +} +func (m *Filter) XXX_Size() int { + return xxx_messageInfo_Filter.Size(m) +} +func (m *Filter) XXX_DiscardUnknown() { + xxx_messageInfo_Filter.DiscardUnknown(m) +} + +var xxx_messageInfo_Filter proto.InternalMessageInfo + +func (m *Filter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type isFilter_ConfigType interface { + isFilter_ConfigType() +} + +type Filter_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type Filter_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*Filter_Config) isFilter_ConfigType() {} + +func (*Filter_TypedConfig) isFilter_ConfigType() {} + +func (m *Filter) GetConfigType() isFilter_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *Filter) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*Filter_Config); ok { + return x.Config + } + return nil +} + +func (m *Filter) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*Filter_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Filter) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Filter_Config)(nil), + (*Filter_TypedConfig)(nil), + } +} + +type FilterChainMatch struct { + DestinationPort *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=destination_port,json=destinationPort,proto3" json:"destination_port,omitempty"` + PrefixRanges []*core.CidrRange `protobuf:"bytes,3,rep,name=prefix_ranges,json=prefixRanges,proto3" json:"prefix_ranges,omitempty"` + AddressSuffix string `protobuf:"bytes,4,opt,name=address_suffix,json=addressSuffix,proto3" json:"address_suffix,omitempty"` + SuffixLen *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=suffix_len,json=suffixLen,proto3" json:"suffix_len,omitempty"` + SourceType FilterChainMatch_ConnectionSourceType `protobuf:"varint,12,opt,name=source_type,json=sourceType,proto3,enum=envoy.api.v2.listener.FilterChainMatch_ConnectionSourceType" json:"source_type,omitempty"` + SourcePrefixRanges []*core.CidrRange `protobuf:"bytes,6,rep,name=source_prefix_ranges,json=sourcePrefixRanges,proto3" json:"source_prefix_ranges,omitempty"` + SourcePorts []uint32 `protobuf:"varint,7,rep,packed,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"` + ServerNames []string `protobuf:"bytes,11,rep,name=server_names,json=serverNames,proto3" json:"server_names,omitempty"` + TransportProtocol string `protobuf:"bytes,9,opt,name=transport_protocol,json=transportProtocol,proto3" json:"transport_protocol,omitempty"` + ApplicationProtocols []string `protobuf:"bytes,10,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FilterChainMatch) Reset() { *m = FilterChainMatch{} } +func (m *FilterChainMatch) String() string { return proto.CompactTextString(m) } +func (*FilterChainMatch) ProtoMessage() {} +func (*FilterChainMatch) Descriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{1} +} + +func (m *FilterChainMatch) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FilterChainMatch.Unmarshal(m, b) +} +func (m *FilterChainMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FilterChainMatch.Marshal(b, m, deterministic) +} +func (m *FilterChainMatch) XXX_Merge(src proto.Message) { + xxx_messageInfo_FilterChainMatch.Merge(m, src) +} +func (m *FilterChainMatch) XXX_Size() int { + return xxx_messageInfo_FilterChainMatch.Size(m) +} +func (m *FilterChainMatch) XXX_DiscardUnknown() { + xxx_messageInfo_FilterChainMatch.DiscardUnknown(m) +} + +var xxx_messageInfo_FilterChainMatch proto.InternalMessageInfo + +func (m *FilterChainMatch) GetDestinationPort() *wrappers.UInt32Value { + if m != nil { + return m.DestinationPort + } + return nil +} + +func (m *FilterChainMatch) GetPrefixRanges() []*core.CidrRange { + if m != nil { + return m.PrefixRanges + } + return nil +} + +func (m *FilterChainMatch) GetAddressSuffix() string { + if m != nil { + return m.AddressSuffix + } + return "" +} + +func (m *FilterChainMatch) GetSuffixLen() *wrappers.UInt32Value { + if m != nil { + return m.SuffixLen + } + return nil +} + +func (m *FilterChainMatch) GetSourceType() FilterChainMatch_ConnectionSourceType { + if m != nil { + return m.SourceType + } + return FilterChainMatch_ANY +} + +func (m *FilterChainMatch) GetSourcePrefixRanges() []*core.CidrRange { + if m != nil { + return m.SourcePrefixRanges + } + return nil +} + +func (m *FilterChainMatch) GetSourcePorts() []uint32 { + if m != nil { + return m.SourcePorts + } + return nil +} + +func (m *FilterChainMatch) GetServerNames() []string { + if m != nil { + return m.ServerNames + } + return nil +} + +func (m *FilterChainMatch) GetTransportProtocol() string { + if m != nil { + return m.TransportProtocol + } + return "" +} + +func (m *FilterChainMatch) GetApplicationProtocols() []string { + if m != nil { + return m.ApplicationProtocols + } + return nil +} + +type FilterChain struct { + FilterChainMatch *FilterChainMatch `protobuf:"bytes,1,opt,name=filter_chain_match,json=filterChainMatch,proto3" json:"filter_chain_match,omitempty"` + TlsContext *auth.DownstreamTlsContext `protobuf:"bytes,2,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` // Deprecated: Do not use. + Filters []*Filter `protobuf:"bytes,3,rep,name=filters,proto3" json:"filters,omitempty"` + UseProxyProto *wrappers.BoolValue `protobuf:"bytes,4,opt,name=use_proxy_proto,json=useProxyProto,proto3" json:"use_proxy_proto,omitempty"` + Metadata *core.Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` + TransportSocket *core.TransportSocket `protobuf:"bytes,6,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"` + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FilterChain) Reset() { *m = FilterChain{} } +func (m *FilterChain) String() string { return proto.CompactTextString(m) } +func (*FilterChain) ProtoMessage() {} +func (*FilterChain) Descriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{2} +} + +func (m *FilterChain) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FilterChain.Unmarshal(m, b) +} +func (m *FilterChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FilterChain.Marshal(b, m, deterministic) +} +func (m *FilterChain) XXX_Merge(src proto.Message) { + xxx_messageInfo_FilterChain.Merge(m, src) +} +func (m *FilterChain) XXX_Size() int { + return xxx_messageInfo_FilterChain.Size(m) +} +func (m *FilterChain) XXX_DiscardUnknown() { + xxx_messageInfo_FilterChain.DiscardUnknown(m) +} + +var xxx_messageInfo_FilterChain proto.InternalMessageInfo + +func (m *FilterChain) GetFilterChainMatch() *FilterChainMatch { + if m != nil { + return m.FilterChainMatch + } + return nil +} + +// Deprecated: Do not use. +func (m *FilterChain) GetTlsContext() *auth.DownstreamTlsContext { + if m != nil { + return m.TlsContext + } + return nil +} + +func (m *FilterChain) GetFilters() []*Filter { + if m != nil { + return m.Filters + } + return nil +} + +func (m *FilterChain) GetUseProxyProto() *wrappers.BoolValue { + if m != nil { + return m.UseProxyProto + } + return nil +} + +func (m *FilterChain) GetMetadata() *core.Metadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *FilterChain) GetTransportSocket() *core.TransportSocket { + if m != nil { + return m.TransportSocket + } + return nil +} + +func (m *FilterChain) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type ListenerFilterChainMatchPredicate struct { + // Types that are valid to be assigned to Rule: + // *ListenerFilterChainMatchPredicate_OrMatch + // *ListenerFilterChainMatchPredicate_AndMatch + // *ListenerFilterChainMatchPredicate_NotMatch + // *ListenerFilterChainMatchPredicate_AnyMatch + // *ListenerFilterChainMatchPredicate_DestinationPortRange + Rule isListenerFilterChainMatchPredicate_Rule `protobuf_oneof:"rule"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListenerFilterChainMatchPredicate) Reset() { *m = ListenerFilterChainMatchPredicate{} } +func (m *ListenerFilterChainMatchPredicate) String() string { return proto.CompactTextString(m) } +func (*ListenerFilterChainMatchPredicate) ProtoMessage() {} +func (*ListenerFilterChainMatchPredicate) Descriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{3} +} + +func (m *ListenerFilterChainMatchPredicate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListenerFilterChainMatchPredicate.Unmarshal(m, b) +} +func (m *ListenerFilterChainMatchPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListenerFilterChainMatchPredicate.Marshal(b, m, deterministic) +} +func (m *ListenerFilterChainMatchPredicate) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListenerFilterChainMatchPredicate.Merge(m, src) +} +func (m *ListenerFilterChainMatchPredicate) XXX_Size() int { + return xxx_messageInfo_ListenerFilterChainMatchPredicate.Size(m) +} +func (m *ListenerFilterChainMatchPredicate) XXX_DiscardUnknown() { + xxx_messageInfo_ListenerFilterChainMatchPredicate.DiscardUnknown(m) +} + +var xxx_messageInfo_ListenerFilterChainMatchPredicate proto.InternalMessageInfo + +type isListenerFilterChainMatchPredicate_Rule interface { + isListenerFilterChainMatchPredicate_Rule() +} + +type ListenerFilterChainMatchPredicate_OrMatch struct { + OrMatch *ListenerFilterChainMatchPredicate_MatchSet `protobuf:"bytes,1,opt,name=or_match,json=orMatch,proto3,oneof"` +} + +type ListenerFilterChainMatchPredicate_AndMatch struct { + AndMatch *ListenerFilterChainMatchPredicate_MatchSet `protobuf:"bytes,2,opt,name=and_match,json=andMatch,proto3,oneof"` +} + +type ListenerFilterChainMatchPredicate_NotMatch struct { + NotMatch *ListenerFilterChainMatchPredicate `protobuf:"bytes,3,opt,name=not_match,json=notMatch,proto3,oneof"` +} + +type ListenerFilterChainMatchPredicate_AnyMatch struct { + AnyMatch bool `protobuf:"varint,4,opt,name=any_match,json=anyMatch,proto3,oneof"` +} + +type ListenerFilterChainMatchPredicate_DestinationPortRange struct { + DestinationPortRange *_type.Int32Range `protobuf:"bytes,5,opt,name=destination_port_range,json=destinationPortRange,proto3,oneof"` +} + +func (*ListenerFilterChainMatchPredicate_OrMatch) isListenerFilterChainMatchPredicate_Rule() {} + +func (*ListenerFilterChainMatchPredicate_AndMatch) isListenerFilterChainMatchPredicate_Rule() {} + +func (*ListenerFilterChainMatchPredicate_NotMatch) isListenerFilterChainMatchPredicate_Rule() {} + +func (*ListenerFilterChainMatchPredicate_AnyMatch) isListenerFilterChainMatchPredicate_Rule() {} + +func (*ListenerFilterChainMatchPredicate_DestinationPortRange) isListenerFilterChainMatchPredicate_Rule() { +} + +func (m *ListenerFilterChainMatchPredicate) GetRule() isListenerFilterChainMatchPredicate_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (m *ListenerFilterChainMatchPredicate) GetOrMatch() *ListenerFilterChainMatchPredicate_MatchSet { + if x, ok := m.GetRule().(*ListenerFilterChainMatchPredicate_OrMatch); ok { + return x.OrMatch + } + return nil +} + +func (m *ListenerFilterChainMatchPredicate) GetAndMatch() *ListenerFilterChainMatchPredicate_MatchSet { + if x, ok := m.GetRule().(*ListenerFilterChainMatchPredicate_AndMatch); ok { + return x.AndMatch + } + return nil +} + +func (m *ListenerFilterChainMatchPredicate) GetNotMatch() *ListenerFilterChainMatchPredicate { + if x, ok := m.GetRule().(*ListenerFilterChainMatchPredicate_NotMatch); ok { + return x.NotMatch + } + return nil +} + +func (m *ListenerFilterChainMatchPredicate) GetAnyMatch() bool { + if x, ok := m.GetRule().(*ListenerFilterChainMatchPredicate_AnyMatch); ok { + return x.AnyMatch + } + return false +} + +func (m *ListenerFilterChainMatchPredicate) GetDestinationPortRange() *_type.Int32Range { + if x, ok := m.GetRule().(*ListenerFilterChainMatchPredicate_DestinationPortRange); ok { + return x.DestinationPortRange + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ListenerFilterChainMatchPredicate) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ListenerFilterChainMatchPredicate_OrMatch)(nil), + (*ListenerFilterChainMatchPredicate_AndMatch)(nil), + (*ListenerFilterChainMatchPredicate_NotMatch)(nil), + (*ListenerFilterChainMatchPredicate_AnyMatch)(nil), + (*ListenerFilterChainMatchPredicate_DestinationPortRange)(nil), + } +} + +type ListenerFilterChainMatchPredicate_MatchSet struct { + Rules []*ListenerFilterChainMatchPredicate `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListenerFilterChainMatchPredicate_MatchSet) Reset() { + *m = ListenerFilterChainMatchPredicate_MatchSet{} +} +func (m *ListenerFilterChainMatchPredicate_MatchSet) String() string { + return proto.CompactTextString(m) +} +func (*ListenerFilterChainMatchPredicate_MatchSet) ProtoMessage() {} +func (*ListenerFilterChainMatchPredicate_MatchSet) Descriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{3, 0} +} + +func (m *ListenerFilterChainMatchPredicate_MatchSet) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListenerFilterChainMatchPredicate_MatchSet.Unmarshal(m, b) +} +func (m *ListenerFilterChainMatchPredicate_MatchSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListenerFilterChainMatchPredicate_MatchSet.Marshal(b, m, deterministic) +} +func (m *ListenerFilterChainMatchPredicate_MatchSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListenerFilterChainMatchPredicate_MatchSet.Merge(m, src) +} +func (m *ListenerFilterChainMatchPredicate_MatchSet) XXX_Size() int { + return xxx_messageInfo_ListenerFilterChainMatchPredicate_MatchSet.Size(m) +} +func (m *ListenerFilterChainMatchPredicate_MatchSet) XXX_DiscardUnknown() { + xxx_messageInfo_ListenerFilterChainMatchPredicate_MatchSet.DiscardUnknown(m) +} + +var xxx_messageInfo_ListenerFilterChainMatchPredicate_MatchSet proto.InternalMessageInfo + +func (m *ListenerFilterChainMatchPredicate_MatchSet) GetRules() []*ListenerFilterChainMatchPredicate { + if m != nil { + return m.Rules + } + return nil +} + +type ListenerFilter struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *ListenerFilter_Config + // *ListenerFilter_TypedConfig + ConfigType isListenerFilter_ConfigType `protobuf_oneof:"config_type"` + FilterDisabled *ListenerFilterChainMatchPredicate `protobuf:"bytes,4,opt,name=filter_disabled,json=filterDisabled,proto3" json:"filter_disabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListenerFilter) Reset() { *m = ListenerFilter{} } +func (m *ListenerFilter) String() string { return proto.CompactTextString(m) } +func (*ListenerFilter) ProtoMessage() {} +func (*ListenerFilter) Descriptor() ([]byte, []int) { + return fileDescriptor_30285372e511ffb4, []int{4} +} + +func (m *ListenerFilter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListenerFilter.Unmarshal(m, b) +} +func (m *ListenerFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListenerFilter.Marshal(b, m, deterministic) +} +func (m *ListenerFilter) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListenerFilter.Merge(m, src) +} +func (m *ListenerFilter) XXX_Size() int { + return xxx_messageInfo_ListenerFilter.Size(m) +} +func (m *ListenerFilter) XXX_DiscardUnknown() { + xxx_messageInfo_ListenerFilter.DiscardUnknown(m) +} + +var xxx_messageInfo_ListenerFilter proto.InternalMessageInfo + +func (m *ListenerFilter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type isListenerFilter_ConfigType interface { + isListenerFilter_ConfigType() +} + +type ListenerFilter_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type ListenerFilter_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*ListenerFilter_Config) isListenerFilter_ConfigType() {} + +func (*ListenerFilter_TypedConfig) isListenerFilter_ConfigType() {} + +func (m *ListenerFilter) GetConfigType() isListenerFilter_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *ListenerFilter) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*ListenerFilter_Config); ok { + return x.Config + } + return nil +} + +func (m *ListenerFilter) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*ListenerFilter_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +func (m *ListenerFilter) GetFilterDisabled() *ListenerFilterChainMatchPredicate { + if m != nil { + return m.FilterDisabled + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ListenerFilter) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ListenerFilter_Config)(nil), + (*ListenerFilter_TypedConfig)(nil), + } +} + +func init() { + proto.RegisterEnum("envoy.api.v2.listener.FilterChainMatch_ConnectionSourceType", FilterChainMatch_ConnectionSourceType_name, FilterChainMatch_ConnectionSourceType_value) + proto.RegisterType((*Filter)(nil), "envoy.api.v2.listener.Filter") + proto.RegisterType((*FilterChainMatch)(nil), "envoy.api.v2.listener.FilterChainMatch") + proto.RegisterType((*FilterChain)(nil), "envoy.api.v2.listener.FilterChain") + proto.RegisterType((*ListenerFilterChainMatchPredicate)(nil), "envoy.api.v2.listener.ListenerFilterChainMatchPredicate") + proto.RegisterType((*ListenerFilterChainMatchPredicate_MatchSet)(nil), "envoy.api.v2.listener.ListenerFilterChainMatchPredicate.MatchSet") + proto.RegisterType((*ListenerFilter)(nil), "envoy.api.v2.listener.ListenerFilter") +} + +func init() { + proto.RegisterFile("envoy/api/v2/listener/listener_components.proto", fileDescriptor_30285372e511ffb4) +} + +var fileDescriptor_30285372e511ffb4 = []byte{ + // 1154 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xae, 0x1d, 0x67, 0x3d, 0xce, 0x9f, 0x65, 0x48, 0x9b, 0x25, 0xfd, 0x83, 0x6b, 0x44, + 0x89, 0x90, 0xd8, 0x95, 0x1c, 0xa1, 0x82, 0xe0, 0xe2, 0x75, 0x83, 0xd2, 0xe2, 0x38, 0xd6, 0x3a, + 0x2d, 0xe5, 0xc2, 0x32, 0xd9, 0x1d, 0xbb, 0x0b, 0xeb, 0x99, 0xd5, 0xcc, 0xd8, 0x8d, 0x6f, 0x88, + 0x2f, 0x80, 0xe8, 0x89, 0x03, 0x5f, 0x00, 0xc4, 0x27, 0xe0, 0x13, 0x20, 0x71, 0xe2, 0x23, 0x70, + 0xe5, 0xc8, 0x09, 0xe5, 0x40, 0xd1, 0xce, 0xcc, 0xba, 0xb1, 0x93, 0xd2, 0xaa, 0x42, 0xdc, 0x76, + 0xde, 0x9f, 0xdf, 0x7b, 0xf3, 0xde, 0xef, 0xbd, 0x59, 0xe0, 0x61, 0x32, 0xa1, 0x53, 0x0f, 0x65, + 0x89, 0x37, 0x69, 0x7a, 0x69, 0xc2, 0x05, 0x26, 0x98, 0xcd, 0x3e, 0xc2, 0x88, 0x8e, 0x32, 0x4a, + 0x30, 0x11, 0xdc, 0xcd, 0x18, 0x15, 0x14, 0x5e, 0x92, 0x0e, 0x2e, 0xca, 0x12, 0x77, 0xd2, 0x74, + 0x0b, 0xbb, 0xed, 0xab, 0x73, 0x38, 0x68, 0x2c, 0x1e, 0x7a, 0x11, 0x66, 0x42, 0x39, 0x6d, 0xbf, + 0x3e, 0xa7, 0x8d, 0x28, 0xc3, 0x1e, 0x8a, 0x63, 0x86, 0xb9, 0x46, 0x5d, 0x70, 0x97, 0x06, 0xc7, + 0x88, 0x63, 0xad, 0xbd, 0xac, 0xb4, 0x62, 0x9a, 0x61, 0x8f, 0x21, 0x32, 0x2c, 0xe4, 0xaf, 0x0d, + 0x29, 0x1d, 0xa6, 0xd8, 0x93, 0xa7, 0xe3, 0xf1, 0xc0, 0x43, 0x64, 0x5a, 0x00, 0x2e, 0xaa, 0xb8, + 0x60, 0xe3, 0xa8, 0xc8, 0xe7, 0xfa, 0xa2, 0xf6, 0x11, 0x43, 0x59, 0x86, 0x59, 0x91, 0xce, 0xf5, + 0x71, 0x9c, 0x21, 0x0f, 0x11, 0x42, 0x05, 0x12, 0x09, 0x25, 0xdc, 0x1b, 0x25, 0x43, 0x86, 0x44, + 0x11, 0xf8, 0xda, 0x39, 0x3d, 0x17, 0x48, 0x8c, 0x0b, 0xf7, 0xad, 0x09, 0x4a, 0x93, 0x18, 0x09, + 0xec, 0x15, 0x1f, 0x4a, 0xd1, 0xf8, 0xc9, 0x00, 0x95, 0x8f, 0x92, 0x54, 0x60, 0x06, 0xaf, 0x80, + 0x32, 0x41, 0x23, 0xec, 0x18, 0x75, 0x63, 0xa7, 0xea, 0xaf, 0x9c, 0xfa, 0x65, 0x66, 0xd6, 0x8d, + 0x40, 0x0a, 0xe1, 0xbb, 0xa0, 0x12, 0x51, 0x32, 0x48, 0x86, 0x8e, 0x59, 0x37, 0x76, 0x6a, 0xcd, + 0x2d, 0x57, 0x25, 0xec, 0x16, 0x09, 0xbb, 0x7d, 0x79, 0x1d, 0xdf, 0x74, 0x8c, 0xfd, 0xa5, 0x40, + 0x1b, 0xc3, 0xf7, 0xc1, 0x6a, 0x5e, 0xa3, 0x38, 0xd4, 0xce, 0x65, 0xe9, 0xbc, 0x79, 0xce, 0xb9, + 0x45, 0xa6, 0xfb, 0x4b, 0x41, 0x4d, 0xda, 0xb6, 0xa5, 0xa9, 0xbf, 0x06, 0x6a, 0xca, 0x29, 0xcc, + 0xa5, 0x77, 0xcb, 0x56, 0xc9, 0x2e, 0x37, 0x7e, 0x5f, 0x06, 0xb6, 0x4a, 0xb7, 0xfd, 0x10, 0x25, + 0xe4, 0x00, 0x89, 0xe8, 0x21, 0x3c, 0x02, 0x76, 0x8c, 0xb9, 0x48, 0x88, 0xbc, 0x79, 0x98, 0x51, + 0x26, 0x1c, 0x4b, 0x06, 0xba, 0x7a, 0x2e, 0xd0, 0xbd, 0x3b, 0x44, 0xec, 0x36, 0xef, 0xa3, 0x74, + 0x8c, 0xfd, 0xda, 0xa9, 0x6f, 0xbd, 0x5d, 0x71, 0x9e, 0x3c, 0x29, 0xed, 0x18, 0xc1, 0xc6, 0x19, + 0x88, 0x1e, 0x65, 0x02, 0xb6, 0xc0, 0x5a, 0xc6, 0xf0, 0x20, 0x39, 0x09, 0x65, 0x83, 0xb9, 0x53, + 0xaa, 0x97, 0x24, 0xe4, 0x1c, 0xdd, 0x72, 0x62, 0xb8, 0xed, 0x24, 0x66, 0x41, 0x6e, 0x14, 0xac, + 0x2a, 0x17, 0x79, 0xe0, 0xf0, 0x4d, 0xb0, 0xae, 0x49, 0x15, 0xf2, 0xf1, 0x60, 0x90, 0x9c, 0xc8, + 0xfb, 0x57, 0x83, 0x35, 0x2d, 0xed, 0x4b, 0x21, 0xfc, 0x00, 0x00, 0xa5, 0x0e, 0x53, 0x4c, 0x9c, + 0xe5, 0xe7, 0x67, 0x1e, 0x54, 0x95, 0x7d, 0x07, 0x13, 0x38, 0x04, 0x35, 0x4e, 0xc7, 0x2c, 0xc2, + 0xb2, 0x4c, 0xce, 0x6a, 0xdd, 0xd8, 0x59, 0x6f, 0x7e, 0xe8, 0x5e, 0x38, 0x13, 0xee, 0x62, 0xe9, + 0xdc, 0x36, 0x25, 0x04, 0x47, 0xf9, 0x9d, 0xfb, 0x12, 0xe4, 0x68, 0x9a, 0x61, 0xdf, 0x3a, 0xf5, + 0x97, 0xbf, 0x36, 0x4c, 0xdb, 0x08, 0x00, 0x9f, 0x49, 0x61, 0x17, 0x6c, 0xea, 0x40, 0xf3, 0x65, + 0xa9, 0xbc, 0x40, 0x59, 0xa0, 0xf2, 0xec, 0x9d, 0x2d, 0xce, 0x2e, 0x58, 0x2d, 0xf0, 0x28, 0x13, + 0xdc, 0x59, 0xa9, 0x97, 0x76, 0xd6, 0x7c, 0xfb, 0xd4, 0x5f, 0x7b, 0x6c, 0x80, 0xc6, 0xd3, 0xc6, + 0xe8, 0xeb, 0xe5, 0x3d, 0xe1, 0xf0, 0x06, 0x58, 0xe5, 0x98, 0x4d, 0x30, 0x0b, 0x73, 0x56, 0x72, + 0xa7, 0x56, 0x2f, 0xed, 0x54, 0x83, 0x9a, 0x92, 0x75, 0x73, 0x11, 0x7c, 0x07, 0x40, 0xc1, 0x10, + 0xe1, 0x39, 0x6a, 0x28, 0xab, 0x17, 0xd1, 0xd4, 0xa9, 0xca, 0xc2, 0xbf, 0x32, 0xd3, 0xf4, 0xb4, + 0x02, 0xee, 0x82, 0x4b, 0x28, 0xcb, 0xd2, 0x24, 0xd2, 0xe4, 0xd1, 0x72, 0xee, 0x00, 0x09, 0xbd, + 0x79, 0x46, 0x59, 0xf8, 0xf0, 0xc6, 0x3d, 0xb0, 0x79, 0x51, 0xe5, 0xe0, 0x0a, 0x28, 0xb5, 0xba, + 0x9f, 0xda, 0x4b, 0xf0, 0x26, 0x58, 0xee, 0x1c, 0xb6, 0x5b, 0x1d, 0xdb, 0xd8, 0xbe, 0xf2, 0xe7, + 0x77, 0x7f, 0x7f, 0xb3, 0x7c, 0x09, 0xbc, 0xda, 0x6f, 0x1d, 0xec, 0x85, 0x77, 0x7a, 0xe1, 0x61, + 0x10, 0x76, 0x0e, 0x0f, 0x7b, 0x7e, 0xab, 0xfd, 0x31, 0x5c, 0x05, 0xd6, 0xde, 0x83, 0xa3, 0xbd, + 0xa0, 0xdb, 0xea, 0xd8, 0xe6, 0xdd, 0xb2, 0x65, 0xd8, 0x66, 0xe3, 0xd7, 0x12, 0xa8, 0x9d, 0x69, + 0x14, 0xbc, 0x07, 0xe0, 0x40, 0x1e, 0xc3, 0x28, 0x3f, 0x87, 0xa3, 0xbc, 0x73, 0x72, 0x4a, 0x6b, + 0xcd, 0xb7, 0x5e, 0xb0, 0xd1, 0x81, 0x3d, 0x58, 0x9c, 0x9a, 0x0e, 0xa8, 0x89, 0x94, 0xe7, 0x83, + 0x29, 0xf0, 0x89, 0xd0, 0x63, 0xbd, 0x80, 0x97, 0x6f, 0x4d, 0xf7, 0x36, 0x7d, 0x44, 0xb8, 0x60, + 0x18, 0x8d, 0x8e, 0x52, 0xde, 0x56, 0xe6, 0xf9, 0x98, 0x07, 0x40, 0xcc, 0xce, 0xf0, 0x16, 0x58, + 0x51, 0x11, 0x8a, 0x39, 0xb9, 0xf6, 0xaf, 0x99, 0x05, 0x85, 0x35, 0xf4, 0xc1, 0xc6, 0x98, 0xe7, + 0x9c, 0xa2, 0x27, 0x53, 0x55, 0x7d, 0xbd, 0x24, 0xb6, 0xcf, 0x4d, 0x80, 0x4f, 0x69, 0xaa, 0xf8, + 0xbf, 0x36, 0xe6, 0xb8, 0x97, 0x7b, 0xc8, 0x96, 0xc0, 0x5b, 0xc0, 0x1a, 0x61, 0x81, 0x62, 0x24, + 0x90, 0x1e, 0x9f, 0x2b, 0x17, 0xd0, 0xf1, 0x40, 0x9b, 0x04, 0x33, 0x63, 0x78, 0x00, 0xec, 0xa7, + 0x5c, 0xe1, 0x34, 0xfa, 0x12, 0x0b, 0xa7, 0x22, 0x01, 0x1a, 0x17, 0x00, 0x1c, 0x15, 0xa6, 0x7d, + 0x69, 0x19, 0x6c, 0x88, 0x79, 0x01, 0x84, 0x7a, 0x83, 0xae, 0x48, 0xb2, 0xc9, 0xef, 0xc6, 0x0f, + 0x65, 0x70, 0xa3, 0xa3, 0x2f, 0xbf, 0xd8, 0x95, 0x1e, 0xc3, 0x71, 0xce, 0x2d, 0x0c, 0x3f, 0x03, + 0x16, 0x65, 0x73, 0x9d, 0x6d, 0x3d, 0xa3, 0x7e, 0xcf, 0xc5, 0x72, 0xe5, 0xb1, 0x8f, 0xc5, 0xfe, + 0x52, 0xb0, 0x42, 0x99, 0x6a, 0xf6, 0xe7, 0xa0, 0x8a, 0x48, 0xac, 0x03, 0x98, 0xff, 0x5d, 0x00, + 0x0b, 0x91, 0x58, 0x45, 0xf8, 0x04, 0x54, 0x09, 0x15, 0x3a, 0x42, 0x49, 0x46, 0x78, 0xef, 0x65, + 0x23, 0xe4, 0xc0, 0x84, 0x0a, 0x05, 0x7c, 0x33, 0x4f, 0x7d, 0xaa, 0x81, 0x73, 0x6a, 0x58, 0xf2, + 0x6d, 0xfa, 0xc2, 0xb4, 0x0c, 0x95, 0xc0, 0x54, 0xd9, 0x75, 0xc1, 0xe5, 0xc5, 0x57, 0x40, 0xad, + 0x28, 0x4d, 0x89, 0xcb, 0x3a, 0x9b, 0x7c, 0x4d, 0xba, 0x72, 0x97, 0xca, 0x45, 0xb4, 0xbf, 0x14, + 0x6c, 0x2e, 0xac, 0x7e, 0x29, 0xdf, 0x8e, 0x81, 0x55, 0x5c, 0x14, 0x3e, 0x00, 0xcb, 0x6c, 0x9c, + 0x62, 0xee, 0x18, 0x92, 0xdb, 0x2f, 0x7d, 0x31, 0xb9, 0x5a, 0x1f, 0x1b, 0xa6, 0x65, 0x06, 0x0a, + 0xd0, 0xaf, 0x81, 0x72, 0xfe, 0x01, 0x4b, 0x7f, 0xf9, 0x46, 0xe3, 0x5b, 0x13, 0xac, 0xcf, 0x63, + 0xfc, 0x2f, 0x8f, 0x72, 0xe9, 0x85, 0x1f, 0x65, 0x88, 0xc0, 0x86, 0xde, 0x45, 0x71, 0xc2, 0xd1, + 0x71, 0x8a, 0x63, 0x3d, 0xad, 0x2f, 0x5d, 0x92, 0x60, 0x5d, 0x01, 0xde, 0xd6, 0x78, 0x0b, 0xef, + 0xbe, 0xff, 0xbd, 0x21, 0xf7, 0xe7, 0x36, 0x74, 0x54, 0x00, 0xa5, 0x7b, 0x1a, 0x60, 0xb2, 0xfb, + 0xf3, 0x57, 0xbf, 0xfc, 0x56, 0x31, 0x6d, 0x03, 0xbc, 0x91, 0x50, 0x95, 0x85, 0x5c, 0x26, 0x17, + 0x27, 0xe4, 0x6f, 0x15, 0x19, 0xb5, 0x67, 0xff, 0x91, 0x72, 0x89, 0xf4, 0x8c, 0x1f, 0xcd, 0xad, + 0x3d, 0xe9, 0xd2, 0xca, 0x12, 0xf7, 0x7e, 0x73, 0x96, 0x7a, 0xb7, 0xff, 0xc7, 0x33, 0x35, 0xc7, + 0x15, 0x59, 0xad, 0xdd, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x9d, 0xc1, 0x3d, 0xb6, 0x0a, + 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener_components.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,742 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/listener/listener_components.proto + +package envoy_api_v2_listener + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _listener_components_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on Filter with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Filter) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return FilterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { + + case *Filter_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Filter_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// FilterValidationError is the validation error returned by Filter.Validate if +// the designated constraints aren't met. +type FilterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FilterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FilterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FilterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FilterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FilterValidationError) ErrorName() string { return "FilterValidationError" } + +// Error satisfies the builtin error interface +func (e FilterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilter.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FilterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FilterValidationError{} + +// Validate checks the field values on FilterChainMatch with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *FilterChainMatch) Validate() error { + if m == nil { + return nil + } + + if wrapper := m.GetDestinationPort(); wrapper != nil { + + if val := wrapper.GetValue(); val < 1 || val > 65535 { + return FilterChainMatchValidationError{ + field: "DestinationPort", + reason: "value must be inside range [1, 65535]", + } + } + + } + + for idx, item := range m.GetPrefixRanges() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainMatchValidationError{ + field: fmt.Sprintf("PrefixRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for AddressSuffix + + if v, ok := interface{}(m.GetSuffixLen()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainMatchValidationError{ + field: "SuffixLen", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if _, ok := FilterChainMatch_ConnectionSourceType_name[int32(m.GetSourceType())]; !ok { + return FilterChainMatchValidationError{ + field: "SourceType", + reason: "value must be one of the defined enum values", + } + } + + for idx, item := range m.GetSourcePrefixRanges() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainMatchValidationError{ + field: fmt.Sprintf("SourcePrefixRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetSourcePorts() { + _, _ = idx, item + + if val := item; val < 1 || val > 65535 { + return FilterChainMatchValidationError{ + field: fmt.Sprintf("SourcePorts[%v]", idx), + reason: "value must be inside range [1, 65535]", + } + } + + } + + // no validation rules for TransportProtocol + + return nil +} + +// FilterChainMatchValidationError is the validation error returned by +// FilterChainMatch.Validate if the designated constraints aren't met. +type FilterChainMatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FilterChainMatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FilterChainMatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FilterChainMatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FilterChainMatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FilterChainMatchValidationError) ErrorName() string { return "FilterChainMatchValidationError" } + +// Error satisfies the builtin error interface +func (e FilterChainMatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilterChainMatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FilterChainMatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FilterChainMatchValidationError{} + +// Validate checks the field values on FilterChain with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *FilterChain) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetFilterChainMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainValidationError{ + field: "FilterChainMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTlsContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainValidationError{ + field: "TlsContext", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetFilters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainValidationError{ + field: fmt.Sprintf("Filters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetUseProxyProto()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainValidationError{ + field: "UseProxyProto", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTransportSocket()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterChainValidationError{ + field: "TransportSocket", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Name + + return nil +} + +// FilterChainValidationError is the validation error returned by +// FilterChain.Validate if the designated constraints aren't met. +type FilterChainValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FilterChainValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FilterChainValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FilterChainValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FilterChainValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FilterChainValidationError) ErrorName() string { return "FilterChainValidationError" } + +// Error satisfies the builtin error interface +func (e FilterChainValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilterChain.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FilterChainValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FilterChainValidationError{} + +// Validate checks the field values on ListenerFilterChainMatchPredicate with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *ListenerFilterChainMatchPredicate) Validate() error { + if m == nil { + return nil + } + + switch m.Rule.(type) { + + case *ListenerFilterChainMatchPredicate_OrMatch: + + if v, ok := interface{}(m.GetOrMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterChainMatchPredicateValidationError{ + field: "OrMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ListenerFilterChainMatchPredicate_AndMatch: + + if v, ok := interface{}(m.GetAndMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterChainMatchPredicateValidationError{ + field: "AndMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ListenerFilterChainMatchPredicate_NotMatch: + + if v, ok := interface{}(m.GetNotMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterChainMatchPredicateValidationError{ + field: "NotMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ListenerFilterChainMatchPredicate_AnyMatch: + + if m.GetAnyMatch() != true { + return ListenerFilterChainMatchPredicateValidationError{ + field: "AnyMatch", + reason: "value must equal true", + } + } + + case *ListenerFilterChainMatchPredicate_DestinationPortRange: + + if v, ok := interface{}(m.GetDestinationPortRange()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterChainMatchPredicateValidationError{ + field: "DestinationPortRange", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ListenerFilterChainMatchPredicateValidationError{ + field: "Rule", + reason: "value is required", + } + + } + + return nil +} + +// ListenerFilterChainMatchPredicateValidationError is the validation error +// returned by ListenerFilterChainMatchPredicate.Validate if the designated +// constraints aren't met. +type ListenerFilterChainMatchPredicateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListenerFilterChainMatchPredicateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListenerFilterChainMatchPredicateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListenerFilterChainMatchPredicateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListenerFilterChainMatchPredicateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListenerFilterChainMatchPredicateValidationError) ErrorName() string { + return "ListenerFilterChainMatchPredicateValidationError" +} + +// Error satisfies the builtin error interface +func (e ListenerFilterChainMatchPredicateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListenerFilterChainMatchPredicate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListenerFilterChainMatchPredicateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListenerFilterChainMatchPredicateValidationError{} + +// Validate checks the field values on ListenerFilter with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ListenerFilter) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return ListenerFilterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetFilterDisabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterValidationError{ + field: "FilterDisabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.ConfigType.(type) { + + case *ListenerFilter_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ListenerFilter_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ListenerFilterValidationError is the validation error returned by +// ListenerFilter.Validate if the designated constraints aren't met. +type ListenerFilterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListenerFilterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListenerFilterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListenerFilterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListenerFilterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListenerFilterValidationError) ErrorName() string { return "ListenerFilterValidationError" } + +// Error satisfies the builtin error interface +func (e ListenerFilterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListenerFilter.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListenerFilterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListenerFilterValidationError{} + +// Validate checks the field values on +// ListenerFilterChainMatchPredicate_MatchSet with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ListenerFilterChainMatchPredicate_MatchSet) Validate() error { + if m == nil { + return nil + } + + if len(m.GetRules()) < 2 { + return ListenerFilterChainMatchPredicate_MatchSetValidationError{ + field: "Rules", + reason: "value must contain at least 2 item(s)", + } + } + + for idx, item := range m.GetRules() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerFilterChainMatchPredicate_MatchSetValidationError{ + field: fmt.Sprintf("Rules[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ListenerFilterChainMatchPredicate_MatchSetValidationError is the validation +// error returned by ListenerFilterChainMatchPredicate_MatchSet.Validate if +// the designated constraints aren't met. +type ListenerFilterChainMatchPredicate_MatchSetValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListenerFilterChainMatchPredicate_MatchSetValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListenerFilterChainMatchPredicate_MatchSetValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListenerFilterChainMatchPredicate_MatchSetValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListenerFilterChainMatchPredicate_MatchSetValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListenerFilterChainMatchPredicate_MatchSetValidationError) ErrorName() string { + return "ListenerFilterChainMatchPredicate_MatchSetValidationError" +} + +// Error satisfies the builtin error interface +func (e ListenerFilterChainMatchPredicate_MatchSetValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListenerFilterChainMatchPredicate_MatchSet.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListenerFilterChainMatchPredicate_MatchSetValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListenerFilterChainMatchPredicate_MatchSetValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,13 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/listener/listener.proto -package listener +package envoy_api_v2_listener import ( - bytes "bytes" fmt "fmt" - io "io" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - - auth "github.com/envoyproxy/go-control-plane/envoy/api/v2/auth" - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" ) // Reference imports to suppress errors if they are not otherwise used. @@ -27,2662 +19,23 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -type FilterChainMatch_ConnectionSourceType int32 - -const ( - // Any connection source matches. - FilterChainMatch_ANY FilterChainMatch_ConnectionSourceType = 0 - // Match a connection originating from the same host. - FilterChainMatch_LOCAL FilterChainMatch_ConnectionSourceType = 1 - // Match a connection originating from a different host. - FilterChainMatch_EXTERNAL FilterChainMatch_ConnectionSourceType = 2 -) - -var FilterChainMatch_ConnectionSourceType_name = map[int32]string{ - 0: "ANY", - 1: "LOCAL", - 2: "EXTERNAL", -} - -var FilterChainMatch_ConnectionSourceType_value = map[string]int32{ - "ANY": 0, - "LOCAL": 1, - "EXTERNAL": 2, -} - -func (x FilterChainMatch_ConnectionSourceType) String() string { - return proto.EnumName(FilterChainMatch_ConnectionSourceType_name, int32(x)) -} - -func (FilterChainMatch_ConnectionSourceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0ced541f18749edd, []int{1, 0} -} - -type Filter struct { - // The name of the filter to instantiate. The name must match a supported - // filter. The built-in filters are: - // - // [#comment:TODO(mattklein123): Auto generate the following list] - // * :ref:`envoy.client_ssl_auth` - // * :ref:`envoy.echo ` - // * :ref:`envoy.http_connection_manager ` - // * :ref:`envoy.mongo_proxy ` - // * :ref:`envoy.ratelimit ` - // * :ref:`envoy.redis_proxy ` - // * :ref:`envoy.tcp_proxy ` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Filter specific configuration which depends on the filter being - // instantiated. See the supported filters for further documentation. - // - // Types that are valid to be assigned to ConfigType: - // *Filter_Config - // *Filter_TypedConfig - ConfigType isFilter_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Filter) Reset() { *m = Filter{} } -func (m *Filter) String() string { return proto.CompactTextString(m) } -func (*Filter) ProtoMessage() {} -func (*Filter) Descriptor() ([]byte, []int) { - return fileDescriptor_0ced541f18749edd, []int{0} -} -func (m *Filter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Filter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Filter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Filter.Merge(m, src) -} -func (m *Filter) XXX_Size() int { - return m.Size() -} -func (m *Filter) XXX_DiscardUnknown() { - xxx_messageInfo_Filter.DiscardUnknown(m) -} - -var xxx_messageInfo_Filter proto.InternalMessageInfo - -type isFilter_ConfigType interface { - isFilter_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type Filter_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type Filter_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"` -} - -func (*Filter_Config) isFilter_ConfigType() {} -func (*Filter_TypedConfig) isFilter_ConfigType() {} - -func (m *Filter) GetConfigType() isFilter_ConfigType { - if m != nil { - return m.ConfigType - } - return nil -} - -func (m *Filter) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Filter) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*Filter_Config); ok { - return x.Config - } - return nil -} - -func (m *Filter) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*Filter_TypedConfig); ok { - return x.TypedConfig - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Filter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Filter_OneofMarshaler, _Filter_OneofUnmarshaler, _Filter_OneofSizer, []interface{}{ - (*Filter_Config)(nil), - (*Filter_TypedConfig)(nil), - } -} - -func _Filter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Filter) - // config_type - switch x := m.ConfigType.(type) { - case *Filter_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *Filter_TypedConfig: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Filter.ConfigType has unexpected type %T", x) - } - return nil -} - -func _Filter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Filter) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &Filter_Config{msg} - return true, err - case 4: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &Filter_TypedConfig{msg} - return true, err - default: - return false, nil - } -} - -func _Filter_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Filter) - // config_type - switch x := m.ConfigType.(type) { - case *Filter_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Filter_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Specifies the match criteria for selecting a specific filter chain for a -// listener. -// -// In order for a filter chain to be selected, *ALL* of its criteria must be -// fulfilled by the incoming connection, properties of which are set by the -// networking stack and/or listener filters. -// -// The following order applies: -// -// 1. Destination port. -// 2. Destination IP address. -// 3. Server name (e.g. SNI for TLS protocol), -// 4. Transport protocol. -// 5. Application protocols (e.g. ALPN for TLS protocol). -// 6. Source type (e.g. any, local or external network). -// -// For criteria that allow ranges or wildcards, the most specific value in any -// of the configured filter chains that matches the incoming connection is going -// to be used (e.g. for SNI ``www.example.com`` the most specific match would be -// ``www.example.com``, then ``*.example.com``, then ``*.com``, then any filter -// chain without ``server_names`` requirements). -// -// [#comment: Implemented rules are kept in the preference order, with deprecated fields -// listed at the end, because that's how we want to list them in the docs. -// -// [#comment:TODO(PiotrSikora): Add support for configurable precedence of the rules] -type FilterChainMatch struct { - // Optional destination port to consider when use_original_dst is set on the - // listener in determining a filter chain match. - DestinationPort *types.UInt32Value `protobuf:"bytes,8,opt,name=destination_port,json=destinationPort,proto3" json:"destination_port,omitempty"` - // If non-empty, an IP address and prefix length to match addresses when the - // listener is bound to 0.0.0.0/:: or when use_original_dst is specified. - PrefixRanges []*core.CidrRange `protobuf:"bytes,3,rep,name=prefix_ranges,json=prefixRanges,proto3" json:"prefix_ranges,omitempty"` - // If non-empty, an IP address and suffix length to match addresses when the - // listener is bound to 0.0.0.0/:: or when use_original_dst is specified. - // [#not-implemented-hide:] - AddressSuffix string `protobuf:"bytes,4,opt,name=address_suffix,json=addressSuffix,proto3" json:"address_suffix,omitempty"` - // [#not-implemented-hide:] - SuffixLen *types.UInt32Value `protobuf:"bytes,5,opt,name=suffix_len,json=suffixLen,proto3" json:"suffix_len,omitempty"` - // Specifies the connection source IP match type. Can be any, local or external network. - SourceType FilterChainMatch_ConnectionSourceType `protobuf:"varint,12,opt,name=source_type,json=sourceType,proto3,enum=envoy.api.v2.listener.FilterChainMatch_ConnectionSourceType" json:"source_type,omitempty"` - // The criteria is satisfied if the source IP address of the downstream - // connection is contained in at least one of the specified subnets. If the - // parameter is not specified or the list is empty, the source IP address is - // ignored. - // [#not-implemented-hide:] - SourcePrefixRanges []*core.CidrRange `protobuf:"bytes,6,rep,name=source_prefix_ranges,json=sourcePrefixRanges,proto3" json:"source_prefix_ranges,omitempty"` - // The criteria is satisfied if the source port of the downstream connection - // is contained in at least one of the specified ports. If the parameter is - // not specified, the source port is ignored. - // [#not-implemented-hide:] - SourcePorts []*types.UInt32Value `protobuf:"bytes,7,rep,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"` - // If non-empty, a list of server names (e.g. SNI for TLS protocol) to consider when determining - // a filter chain match. Those values will be compared against the server names of a new - // connection, when detected by one of the listener filters. - // - // The server name will be matched against all wildcard domains, i.e. ``www.example.com`` - // will be first matched against ``www.example.com``, then ``*.example.com``, then ``*.com``. - // - // Note that partial wildcards are not supported, and values like ``*w.example.com`` are invalid. - // - // .. attention:: - // - // See the :ref:`FAQ entry ` on how to configure SNI for more - // information. - ServerNames []string `protobuf:"bytes,11,rep,name=server_names,json=serverNames,proto3" json:"server_names,omitempty"` - // If non-empty, a transport protocol to consider when determining a filter chain match. - // This value will be compared against the transport protocol of a new connection, when - // it's detected by one of the listener filters. - // - // Suggested values include: - // - // * ``raw_buffer`` - default, used when no transport protocol is detected, - // * ``tls`` - set by :ref:`envoy.listener.tls_inspector ` - // when TLS protocol is detected. - TransportProtocol string `protobuf:"bytes,9,opt,name=transport_protocol,json=transportProtocol,proto3" json:"transport_protocol,omitempty"` - // If non-empty, a list of application protocols (e.g. ALPN for TLS protocol) to consider when - // determining a filter chain match. Those values will be compared against the application - // protocols of a new connection, when detected by one of the listener filters. - // - // Suggested values include: - // - // * ``http/1.1`` - set by :ref:`envoy.listener.tls_inspector - // `, - // * ``h2`` - set by :ref:`envoy.listener.tls_inspector ` - // - // .. attention:: - // - // Currently, only :ref:`TLS Inspector ` provides - // application protocol detection based on the requested - // `ALPN `_ values. - // - // However, the use of ALPN is pretty much limited to the HTTP/2 traffic on the Internet, - // and matching on values other than ``h2`` is going to lead to a lot of false negatives, - // unless all connecting clients are known to use ALPN. - ApplicationProtocols []string `protobuf:"bytes,10,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FilterChainMatch) Reset() { *m = FilterChainMatch{} } -func (m *FilterChainMatch) String() string { return proto.CompactTextString(m) } -func (*FilterChainMatch) ProtoMessage() {} -func (*FilterChainMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_0ced541f18749edd, []int{1} -} -func (m *FilterChainMatch) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FilterChainMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_FilterChainMatch.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *FilterChainMatch) XXX_Merge(src proto.Message) { - xxx_messageInfo_FilterChainMatch.Merge(m, src) -} -func (m *FilterChainMatch) XXX_Size() int { - return m.Size() -} -func (m *FilterChainMatch) XXX_DiscardUnknown() { - xxx_messageInfo_FilterChainMatch.DiscardUnknown(m) -} - -var xxx_messageInfo_FilterChainMatch proto.InternalMessageInfo - -func (m *FilterChainMatch) GetDestinationPort() *types.UInt32Value { - if m != nil { - return m.DestinationPort - } - return nil -} - -func (m *FilterChainMatch) GetPrefixRanges() []*core.CidrRange { - if m != nil { - return m.PrefixRanges - } - return nil -} - -func (m *FilterChainMatch) GetAddressSuffix() string { - if m != nil { - return m.AddressSuffix - } - return "" -} - -func (m *FilterChainMatch) GetSuffixLen() *types.UInt32Value { - if m != nil { - return m.SuffixLen - } - return nil -} - -func (m *FilterChainMatch) GetSourceType() FilterChainMatch_ConnectionSourceType { - if m != nil { - return m.SourceType - } - return FilterChainMatch_ANY -} - -func (m *FilterChainMatch) GetSourcePrefixRanges() []*core.CidrRange { - if m != nil { - return m.SourcePrefixRanges - } - return nil -} - -func (m *FilterChainMatch) GetSourcePorts() []*types.UInt32Value { - if m != nil { - return m.SourcePorts - } - return nil -} - -func (m *FilterChainMatch) GetServerNames() []string { - if m != nil { - return m.ServerNames - } - return nil -} - -func (m *FilterChainMatch) GetTransportProtocol() string { - if m != nil { - return m.TransportProtocol - } - return "" -} - -func (m *FilterChainMatch) GetApplicationProtocols() []string { - if m != nil { - return m.ApplicationProtocols - } - return nil -} - -// A filter chain wraps a set of match criteria, an option TLS context, a set of filters, and -// various other parameters. -type FilterChain struct { - // The criteria to use when matching a connection to this filter chain. - FilterChainMatch *FilterChainMatch `protobuf:"bytes,1,opt,name=filter_chain_match,json=filterChainMatch,proto3" json:"filter_chain_match,omitempty"` - // The TLS context for this filter chain. - TlsContext *auth.DownstreamTlsContext `protobuf:"bytes,2,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` - // A list of individual network filters that make up the filter chain for - // connections established with the listener. Order matters as the filters are - // processed sequentially as connection events happen. Note: If the filter - // list is empty, the connection will close by default. - Filters []Filter `protobuf:"bytes,3,rep,name=filters,proto3" json:"filters"` - // Whether the listener should expect a PROXY protocol V1 header on new - // connections. If this option is enabled, the listener will assume that that - // remote address of the connection is the one specified in the header. Some - // load balancers including the AWS ELB support this option. If the option is - // absent or set to false, Envoy will use the physical peer address of the - // connection as the remote address. - UseProxyProto *types.BoolValue `protobuf:"bytes,4,opt,name=use_proxy_proto,json=useProxyProto,proto3" json:"use_proxy_proto,omitempty"` - // [#not-implemented-hide:] filter chain metadata. - Metadata *core.Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` - // See :ref:`base.TransportSocket` description. - TransportSocket *core.TransportSocket `protobuf:"bytes,6,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FilterChain) Reset() { *m = FilterChain{} } -func (m *FilterChain) String() string { return proto.CompactTextString(m) } -func (*FilterChain) ProtoMessage() {} -func (*FilterChain) Descriptor() ([]byte, []int) { - return fileDescriptor_0ced541f18749edd, []int{2} -} -func (m *FilterChain) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FilterChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_FilterChain.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *FilterChain) XXX_Merge(src proto.Message) { - xxx_messageInfo_FilterChain.Merge(m, src) -} -func (m *FilterChain) XXX_Size() int { - return m.Size() -} -func (m *FilterChain) XXX_DiscardUnknown() { - xxx_messageInfo_FilterChain.DiscardUnknown(m) -} - -var xxx_messageInfo_FilterChain proto.InternalMessageInfo - -func (m *FilterChain) GetFilterChainMatch() *FilterChainMatch { - if m != nil { - return m.FilterChainMatch - } - return nil -} - -func (m *FilterChain) GetTlsContext() *auth.DownstreamTlsContext { - if m != nil { - return m.TlsContext - } - return nil -} - -func (m *FilterChain) GetFilters() []Filter { - if m != nil { - return m.Filters - } - return nil -} - -func (m *FilterChain) GetUseProxyProto() *types.BoolValue { - if m != nil { - return m.UseProxyProto - } - return nil -} - -func (m *FilterChain) GetMetadata() *core.Metadata { - if m != nil { - return m.Metadata - } - return nil -} - -func (m *FilterChain) GetTransportSocket() *core.TransportSocket { - if m != nil { - return m.TransportSocket - } - return nil -} - -type ListenerFilter struct { - // The name of the filter to instantiate. The name must match a supported - // filter. The built-in filters are: - // - // [#comment:TODO(mattklein123): Auto generate the following list] - // * :ref:`envoy.listener.original_dst ` - // * :ref:`envoy.listener.tls_inspector ` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Filter specific configuration which depends on the filter being instantiated. - // See the supported filters for further documentation. - // - // Types that are valid to be assigned to ConfigType: - // *ListenerFilter_Config - // *ListenerFilter_TypedConfig - ConfigType isListenerFilter_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListenerFilter) Reset() { *m = ListenerFilter{} } -func (m *ListenerFilter) String() string { return proto.CompactTextString(m) } -func (*ListenerFilter) ProtoMessage() {} -func (*ListenerFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_0ced541f18749edd, []int{3} -} -func (m *ListenerFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ListenerFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ListenerFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ListenerFilter) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListenerFilter.Merge(m, src) -} -func (m *ListenerFilter) XXX_Size() int { - return m.Size() -} -func (m *ListenerFilter) XXX_DiscardUnknown() { - xxx_messageInfo_ListenerFilter.DiscardUnknown(m) -} - -var xxx_messageInfo_ListenerFilter proto.InternalMessageInfo - -type isListenerFilter_ConfigType interface { - isListenerFilter_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type ListenerFilter_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type ListenerFilter_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` -} - -func (*ListenerFilter_Config) isListenerFilter_ConfigType() {} -func (*ListenerFilter_TypedConfig) isListenerFilter_ConfigType() {} - -func (m *ListenerFilter) GetConfigType() isListenerFilter_ConfigType { - if m != nil { - return m.ConfigType - } - return nil -} - -func (m *ListenerFilter) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *ListenerFilter) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*ListenerFilter_Config); ok { - return x.Config - } - return nil -} - -func (m *ListenerFilter) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*ListenerFilter_TypedConfig); ok { - return x.TypedConfig - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*ListenerFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _ListenerFilter_OneofMarshaler, _ListenerFilter_OneofUnmarshaler, _ListenerFilter_OneofSizer, []interface{}{ - (*ListenerFilter_Config)(nil), - (*ListenerFilter_TypedConfig)(nil), - } -} - -func _ListenerFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*ListenerFilter) - // config_type - switch x := m.ConfigType.(type) { - case *ListenerFilter_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *ListenerFilter_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("ListenerFilter.ConfigType has unexpected type %T", x) - } - return nil -} - -func _ListenerFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*ListenerFilter) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &ListenerFilter_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &ListenerFilter_TypedConfig{msg} - return true, err - default: - return false, nil - } -} - -func _ListenerFilter_OneofSizer(msg proto.Message) (n int) { - m := msg.(*ListenerFilter) - // config_type - switch x := m.ConfigType.(type) { - case *ListenerFilter_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *ListenerFilter_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -func init() { - proto.RegisterEnum("envoy.api.v2.listener.FilterChainMatch_ConnectionSourceType", FilterChainMatch_ConnectionSourceType_name, FilterChainMatch_ConnectionSourceType_value) - proto.RegisterType((*Filter)(nil), "envoy.api.v2.listener.Filter") - proto.RegisterType((*FilterChainMatch)(nil), "envoy.api.v2.listener.FilterChainMatch") - proto.RegisterType((*FilterChain)(nil), "envoy.api.v2.listener.FilterChain") - proto.RegisterType((*ListenerFilter)(nil), "envoy.api.v2.listener.ListenerFilter") -} +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("envoy/api/v2/listener/listener.proto", fileDescriptor_0ced541f18749edd) } var fileDescriptor_0ced541f18749edd = []byte{ - // 883 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xcf, 0x6e, 0xe3, 0x44, - 0x18, 0xaf, 0x93, 0x34, 0x4d, 0x3e, 0x27, 0xad, 0x19, 0x65, 0x55, 0x53, 0x76, 0xb3, 0x21, 0x80, - 0x88, 0x90, 0x70, 0x44, 0x7a, 0x00, 0x04, 0x08, 0xc5, 0xa1, 0xa8, 0xac, 0xd2, 0x10, 0x39, 0xdd, - 0x0a, 0xb8, 0x58, 0x53, 0x67, 0x92, 0x0e, 0x38, 0x33, 0xd6, 0xcc, 0x24, 0xdb, 0x5c, 0x79, 0x1a, - 0xb4, 0xe2, 0x05, 0xe0, 0xc4, 0x71, 0x8f, 0x3c, 0x01, 0x82, 0xde, 0x78, 0x8a, 0x45, 0x1e, 0xdb, - 0xa1, 0x49, 0xa3, 0x65, 0xc5, 0x61, 0x6f, 0x33, 0xdf, 0xf7, 0xfb, 0xfd, 0xe6, 0xfb, 0x3b, 0xf0, - 0x36, 0x61, 0x0b, 0xbe, 0x6c, 0xe3, 0x88, 0xb6, 0x17, 0x9d, 0x76, 0x48, 0xa5, 0x22, 0x8c, 0x88, - 0xd5, 0xc1, 0x89, 0x04, 0x57, 0x1c, 0xdd, 0xd3, 0x28, 0x07, 0x47, 0xd4, 0x59, 0x74, 0x9c, 0xcc, - 0x79, 0xf4, 0x70, 0x8d, 0x1c, 0x70, 0x41, 0xda, 0x78, 0x3c, 0x16, 0x44, 0xca, 0x84, 0x77, 0x74, - 0x7f, 0x0d, 0x80, 0xe7, 0xea, 0xaa, 0x1d, 0x10, 0xa1, 0xb6, 0x7a, 0x35, 0xfd, 0x12, 0x4b, 0x92, - 0x7a, 0x5f, 0x9f, 0x72, 0x3e, 0x0d, 0x49, 0x5b, 0xdf, 0x2e, 0xe7, 0x93, 0x36, 0x66, 0xcb, 0x8c, - 0xb8, 0xe9, 0x92, 0x4a, 0xcc, 0x83, 0x4c, 0xb6, 0xbe, 0xe9, 0x7d, 0x22, 0x70, 0x14, 0x11, 0x91, - 0x05, 0x75, 0xb8, 0xc0, 0x21, 0x1d, 0x63, 0x45, 0xda, 0xd9, 0x21, 0x75, 0xd4, 0xa6, 0x7c, 0xca, - 0xf5, 0xb1, 0x1d, 0x9f, 0x12, 0x6b, 0xf3, 0xa9, 0x01, 0xc5, 0x2f, 0x69, 0xa8, 0x88, 0x40, 0x0f, - 0xa0, 0xc0, 0xf0, 0x8c, 0xd8, 0x46, 0xc3, 0x68, 0x95, 0xdd, 0xf2, 0xaf, 0x7f, 0xff, 0x96, 0x2f, - 0x88, 0x5c, 0xc3, 0xf0, 0xb4, 0x19, 0x7d, 0x00, 0xc5, 0x80, 0xb3, 0x09, 0x9d, 0xda, 0xb9, 0x86, - 0xd1, 0x32, 0x3b, 0x87, 0x4e, 0x12, 0x89, 0x93, 0x45, 0xe2, 0x8c, 0x74, 0x9c, 0xa7, 0x3b, 0x5e, - 0x0a, 0x44, 0x1f, 0x43, 0x45, 0x2d, 0x23, 0x32, 0xf6, 0x53, 0x62, 0x41, 0x13, 0x6b, 0x77, 0x88, - 0x5d, 0xb6, 0x3c, 0xdd, 0xf1, 0x4c, 0x8d, 0xed, 0x69, 0xa8, 0x5b, 0x05, 0x33, 0x21, 0xf9, 0xb1, - 0xf5, 0x51, 0xa1, 0x94, 0xb7, 0x0a, 0xcd, 0xbf, 0x76, 0xc1, 0x4a, 0x82, 0xed, 0x5d, 0x61, 0xca, - 0xce, 0xb0, 0x0a, 0xae, 0xd0, 0x05, 0x58, 0x63, 0x22, 0x15, 0x65, 0x58, 0x51, 0xce, 0xfc, 0x88, - 0x0b, 0x65, 0x97, 0xf4, 0x43, 0xf7, 0xef, 0x3c, 0xf4, 0xf8, 0x2b, 0xa6, 0x8e, 0x3b, 0x17, 0x38, - 0x9c, 0x13, 0xb7, 0x1a, 0x27, 0x58, 0x7a, 0xaf, 0x68, 0x3f, 0x7f, 0x9e, 0x6f, 0x19, 0xde, 0xc1, - 0x2d, 0x91, 0x21, 0x17, 0x0a, 0x75, 0xa1, 0x1a, 0x09, 0x32, 0xa1, 0xd7, 0xbe, 0xc0, 0x6c, 0x4a, - 0xa4, 0x9d, 0x6f, 0xe4, 0xb5, 0xe8, 0xda, 0xb4, 0xc4, 0x7d, 0x75, 0x7a, 0x74, 0x2c, 0xbc, 0x18, - 0xe4, 0x55, 0x12, 0x8a, 0xbe, 0x48, 0xf4, 0x0e, 0xec, 0xa7, 0x13, 0xe3, 0xcb, 0xf9, 0x64, 0x42, - 0xaf, 0x75, 0x05, 0xca, 0x5e, 0x35, 0xb5, 0x8e, 0xb4, 0x11, 0x7d, 0x02, 0x90, 0xb8, 0xfd, 0x90, - 0x30, 0x7b, 0xf7, 0xbf, 0x63, 0xf7, 0xca, 0x09, 0xbe, 0x4f, 0x18, 0xa2, 0x60, 0x4a, 0x3e, 0x17, - 0x01, 0xd1, 0x85, 0xb2, 0x2b, 0x0d, 0xa3, 0xb5, 0xdf, 0xf9, 0xd4, 0xd9, 0x3a, 0xd2, 0xce, 0x66, - 0xf1, 0x9c, 0x1e, 0x67, 0x8c, 0x04, 0x71, 0xce, 0x23, 0x2d, 0x72, 0xbe, 0x8c, 0x88, 0x0b, 0x71, - 0x65, 0x76, 0x7f, 0x34, 0x72, 0x96, 0xe1, 0x81, 0x5c, 0xd9, 0xd1, 0x00, 0x6a, 0xe9, 0x53, 0xeb, - 0x85, 0x29, 0xbe, 0x44, 0x61, 0x50, 0xc2, 0x1c, 0xde, 0x2e, 0xcf, 0xe7, 0x50, 0xc9, 0xf4, 0xb8, - 0x50, 0xd2, 0xde, 0x4b, 0x75, 0x5e, 0x94, 0x79, 0x9a, 0x6c, 0xdc, 0x21, 0x89, 0xde, 0x84, 0x8a, - 0x24, 0x62, 0x41, 0x84, 0x1f, 0x4f, 0xa8, 0xb4, 0xcd, 0x46, 0xbe, 0x55, 0xf6, 0xcc, 0xc4, 0x36, - 0x88, 0x4d, 0xe8, 0x7d, 0x40, 0x4a, 0x60, 0x26, 0xe3, 0x17, 0x7c, 0xad, 0x18, 0xf0, 0xd0, 0x2e, - 0xeb, 0x36, 0xbc, 0xb6, 0xf2, 0x0c, 0x53, 0x07, 0x3a, 0x86, 0x7b, 0x38, 0x8a, 0x42, 0x1a, 0xa4, - 0xc3, 0x94, 0xda, 0xa5, 0x0d, 0x5a, 0xba, 0x76, 0xcb, 0x99, 0x71, 0x64, 0xf3, 0x23, 0xa8, 0x6d, - 0xab, 0x23, 0xda, 0x83, 0x7c, 0x77, 0xf0, 0xad, 0xb5, 0x83, 0xca, 0xb0, 0xdb, 0xff, 0xba, 0xd7, - 0xed, 0x5b, 0x06, 0xaa, 0x40, 0xe9, 0xe4, 0x9b, 0xf3, 0x13, 0x6f, 0xd0, 0xed, 0x5b, 0xb9, 0x47, - 0x85, 0x92, 0x61, 0xe5, 0x3c, 0x53, 0x32, 0xea, 0x8f, 0xf9, 0x0c, 0x53, 0x26, 0x9b, 0xbf, 0xe4, - 0xc1, 0xbc, 0xd5, 0x26, 0xf4, 0x18, 0xd0, 0x44, 0x5f, 0xfd, 0x20, 0xbe, 0xfb, 0xb3, 0xb8, 0x6f, - 0x7a, 0x47, 0xcd, 0xce, 0xbb, 0x2f, 0xd9, 0x66, 0xcf, 0x9a, 0x6c, 0x6e, 0xcd, 0x29, 0x98, 0x2a, - 0x94, 0xf1, 0x62, 0x2a, 0x72, 0xad, 0xd2, 0x95, 0xde, 0xd0, 0x8b, 0x7f, 0x34, 0xe7, 0x0b, 0xfe, - 0x84, 0x49, 0x25, 0x08, 0x9e, 0x9d, 0x87, 0xb2, 0x97, 0xc0, 0x3d, 0x50, 0xab, 0x33, 0xfa, 0x0c, - 0xf6, 0x12, 0xf5, 0x6c, 0x43, 0x1e, 0xbc, 0x30, 0x2a, 0xb7, 0xf0, 0xec, 0x8f, 0x87, 0x3b, 0x5e, - 0xc6, 0x41, 0x2e, 0x1c, 0xcc, 0x65, 0x3c, 0x51, 0xfc, 0x7a, 0x99, 0xd4, 0x3b, 0xfd, 0x26, 0x8e, - 0xee, 0xcc, 0x81, 0xcb, 0x79, 0x98, 0x4c, 0x41, 0x75, 0x2e, 0xc9, 0x30, 0x66, 0xe8, 0x26, 0xa0, - 0x0f, 0xa1, 0x34, 0x23, 0x0a, 0x8f, 0xb1, 0xc2, 0xe9, 0xfa, 0xbc, 0xb1, 0x65, 0x18, 0xcf, 0x52, - 0x88, 0xb7, 0x02, 0xa3, 0x33, 0xb0, 0xfe, 0x9d, 0x0e, 0xc9, 0x83, 0x1f, 0x88, 0xb2, 0x8b, 0x5a, - 0xa0, 0xb9, 0x45, 0xe0, 0x3c, 0x83, 0x8e, 0x34, 0xd2, 0x3b, 0x50, 0xeb, 0x86, 0xe6, 0xcf, 0x06, - 0xec, 0xf7, 0xd3, 0x74, 0x5f, 0xd9, 0xa7, 0x9a, 0xff, 0xbf, 0x9f, 0xaa, 0xfb, 0xfd, 0x4f, 0x37, - 0x75, 0xe3, 0xd9, 0x4d, 0xdd, 0xf8, 0xfd, 0xa6, 0x6e, 0xfc, 0x79, 0x53, 0x37, 0xe0, 0x2d, 0xca, - 0x93, 0xbc, 0x75, 0x3b, 0xb6, 0xf7, 0xd1, 0xad, 0x66, 0x29, 0xea, 0xe2, 0x0f, 0x8d, 0xef, 0x4a, - 0x99, 0xeb, 0x69, 0xee, 0xf0, 0x44, 0x53, 0xba, 0x11, 0x75, 0x2e, 0x3a, 0x4e, 0x06, 0x1c, 0x8c, - 0x2e, 0x8b, 0x3a, 0xae, 0xe3, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xcc, 0x41, 0xcc, 0x92, - 0x07, 0x00, 0x00, -} - -func (this *Filter) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Filter) - if !ok { - that2, ok := that.(Filter) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Filter_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Filter_Config) - if !ok { - that2, ok := that.(Filter_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true -} -func (this *Filter_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Filter_TypedConfig) - if !ok { - that2, ok := that.(Filter_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (this *FilterChainMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*FilterChainMatch) - if !ok { - that2, ok := that.(FilterChainMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.DestinationPort.Equal(that1.DestinationPort) { - return false - } - if len(this.PrefixRanges) != len(that1.PrefixRanges) { - return false - } - for i := range this.PrefixRanges { - if !this.PrefixRanges[i].Equal(that1.PrefixRanges[i]) { - return false - } - } - if this.AddressSuffix != that1.AddressSuffix { - return false - } - if !this.SuffixLen.Equal(that1.SuffixLen) { - return false - } - if this.SourceType != that1.SourceType { - return false - } - if len(this.SourcePrefixRanges) != len(that1.SourcePrefixRanges) { - return false - } - for i := range this.SourcePrefixRanges { - if !this.SourcePrefixRanges[i].Equal(that1.SourcePrefixRanges[i]) { - return false - } - } - if len(this.SourcePorts) != len(that1.SourcePorts) { - return false - } - for i := range this.SourcePorts { - if !this.SourcePorts[i].Equal(that1.SourcePorts[i]) { - return false - } - } - if len(this.ServerNames) != len(that1.ServerNames) { - return false - } - for i := range this.ServerNames { - if this.ServerNames[i] != that1.ServerNames[i] { - return false - } - } - if this.TransportProtocol != that1.TransportProtocol { - return false - } - if len(this.ApplicationProtocols) != len(that1.ApplicationProtocols) { - return false - } - for i := range this.ApplicationProtocols { - if this.ApplicationProtocols[i] != that1.ApplicationProtocols[i] { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *FilterChain) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*FilterChain) - if !ok { - that2, ok := that.(FilterChain) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.FilterChainMatch.Equal(that1.FilterChainMatch) { - return false - } - if !this.TlsContext.Equal(that1.TlsContext) { - return false - } - if len(this.Filters) != len(that1.Filters) { - return false - } - for i := range this.Filters { - if !this.Filters[i].Equal(&that1.Filters[i]) { - return false - } - } - if !this.UseProxyProto.Equal(that1.UseProxyProto) { - return false - } - if !this.Metadata.Equal(that1.Metadata) { - return false - } - if !this.TransportSocket.Equal(that1.TransportSocket) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ListenerFilter) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ListenerFilter) - if !ok { - that2, ok := that.(ListenerFilter) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *ListenerFilter_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ListenerFilter_Config) - if !ok { - that2, ok := that.(ListenerFilter_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true + // 175 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0xcf, 0xc9, 0x2c, 0x2e, 0x49, 0xcd, 0x4b, + 0x2d, 0x82, 0x33, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x44, 0xc1, 0xaa, 0xf4, 0x12, 0x0b, + 0x32, 0xf5, 0xca, 0x8c, 0xf4, 0x60, 0x92, 0x52, 0xb2, 0xa5, 0x29, 0x05, 0x89, 0xfa, 0x89, 0x79, + 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0xfa, 0xc5, 0x25, 0x89, 0x25, 0xa5, 0xc5, + 0x10, 0x5d, 0x52, 0xfa, 0xf8, 0xcd, 0x8e, 0x4f, 0xce, 0xcf, 0x2d, 0xc8, 0xcf, 0x4b, 0xcd, 0x2b, + 0x81, 0x6a, 0x70, 0x2a, 0xda, 0xd5, 0x70, 0xe2, 0x22, 0x1b, 0x93, 0x00, 0x23, 0x97, 0x72, 0x66, + 0xbe, 0x1e, 0x58, 0x77, 0x41, 0x51, 0x7e, 0x45, 0xa5, 0x1e, 0x56, 0xeb, 0x9d, 0x78, 0x7d, 0xa0, + 0xac, 0x00, 0x90, 0xee, 0x00, 0xc6, 0x55, 0x4c, 0xe2, 0xae, 0x60, 0x85, 0x8e, 0x05, 0x99, 0x7a, + 0x61, 0x46, 0x7a, 0x30, 0x69, 0xbf, 0xe0, 0x57, 0x38, 0x65, 0x02, 0x18, 0x93, 0xd8, 0xc0, 0x96, + 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x6d, 0x26, 0x17, 0xb4, 0x0b, 0x01, 0x00, 0x00, } -func (this *ListenerFilter_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*ListenerFilter_TypedConfig) - if !ok { - that2, ok := that.(ListenerFilter_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (m *Filter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Filter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintListener(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn1, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Filter_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.Config.Size())) - n2, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - return i, nil -} -func (m *Filter_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.TypedConfig.Size())) - n3, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - return i, nil -} -func (m *FilterChainMatch) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FilterChainMatch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.PrefixRanges) > 0 { - for _, msg := range m.PrefixRanges { - dAtA[i] = 0x1a - i++ - i = encodeVarintListener(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.AddressSuffix) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintListener(dAtA, i, uint64(len(m.AddressSuffix))) - i += copy(dAtA[i:], m.AddressSuffix) - } - if m.SuffixLen != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintListener(dAtA, i, uint64(m.SuffixLen.Size())) - n4, err := m.SuffixLen.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.SourcePrefixRanges) > 0 { - for _, msg := range m.SourcePrefixRanges { - dAtA[i] = 0x32 - i++ - i = encodeVarintListener(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.SourcePorts) > 0 { - for _, msg := range m.SourcePorts { - dAtA[i] = 0x3a - i++ - i = encodeVarintListener(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.DestinationPort != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.DestinationPort.Size())) - n5, err := m.DestinationPort.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if len(m.TransportProtocol) > 0 { - dAtA[i] = 0x4a - i++ - i = encodeVarintListener(dAtA, i, uint64(len(m.TransportProtocol))) - i += copy(dAtA[i:], m.TransportProtocol) - } - if len(m.ApplicationProtocols) > 0 { - for _, s := range m.ApplicationProtocols { - dAtA[i] = 0x52 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.ServerNames) > 0 { - for _, s := range m.ServerNames { - dAtA[i] = 0x5a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.SourceType != 0 { - dAtA[i] = 0x60 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.SourceType)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *FilterChain) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FilterChain) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.FilterChainMatch != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintListener(dAtA, i, uint64(m.FilterChainMatch.Size())) - n6, err := m.FilterChainMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.TlsContext != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.TlsContext.Size())) - n7, err := m.TlsContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if len(m.Filters) > 0 { - for _, msg := range m.Filters { - dAtA[i] = 0x1a - i++ - i = encodeVarintListener(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.UseProxyProto != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.UseProxyProto.Size())) - n8, err := m.UseProxyProto.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.Metadata != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintListener(dAtA, i, uint64(m.Metadata.Size())) - n9, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.TransportSocket != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.TransportSocket.Size())) - n10, err := m.TransportSocket.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ListenerFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ListenerFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintListener(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn11, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn11 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ListenerFilter_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintListener(dAtA, i, uint64(m.Config.Size())) - n12, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - return i, nil -} -func (m *ListenerFilter_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintListener(dAtA, i, uint64(m.TypedConfig.Size())) - n13, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} -func encodeVarintListener(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Filter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovListener(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Filter_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovListener(uint64(l)) - } - return n -} -func (m *Filter_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovListener(uint64(l)) - } - return n -} -func (m *FilterChainMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.PrefixRanges) > 0 { - for _, e := range m.PrefixRanges { - l = e.Size() - n += 1 + l + sovListener(uint64(l)) - } - } - l = len(m.AddressSuffix) - if l > 0 { - n += 1 + l + sovListener(uint64(l)) - } - if m.SuffixLen != nil { - l = m.SuffixLen.Size() - n += 1 + l + sovListener(uint64(l)) - } - if len(m.SourcePrefixRanges) > 0 { - for _, e := range m.SourcePrefixRanges { - l = e.Size() - n += 1 + l + sovListener(uint64(l)) - } - } - if len(m.SourcePorts) > 0 { - for _, e := range m.SourcePorts { - l = e.Size() - n += 1 + l + sovListener(uint64(l)) - } - } - if m.DestinationPort != nil { - l = m.DestinationPort.Size() - n += 1 + l + sovListener(uint64(l)) - } - l = len(m.TransportProtocol) - if l > 0 { - n += 1 + l + sovListener(uint64(l)) - } - if len(m.ApplicationProtocols) > 0 { - for _, s := range m.ApplicationProtocols { - l = len(s) - n += 1 + l + sovListener(uint64(l)) - } - } - if len(m.ServerNames) > 0 { - for _, s := range m.ServerNames { - l = len(s) - n += 1 + l + sovListener(uint64(l)) - } - } - if m.SourceType != 0 { - n += 1 + sovListener(uint64(m.SourceType)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *FilterChain) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.FilterChainMatch != nil { - l = m.FilterChainMatch.Size() - n += 1 + l + sovListener(uint64(l)) - } - if m.TlsContext != nil { - l = m.TlsContext.Size() - n += 1 + l + sovListener(uint64(l)) - } - if len(m.Filters) > 0 { - for _, e := range m.Filters { - l = e.Size() - n += 1 + l + sovListener(uint64(l)) - } - } - if m.UseProxyProto != nil { - l = m.UseProxyProto.Size() - n += 1 + l + sovListener(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovListener(uint64(l)) - } - if m.TransportSocket != nil { - l = m.TransportSocket.Size() - n += 1 + l + sovListener(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ListenerFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovListener(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ListenerFilter_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovListener(uint64(l)) - } - return n -} -func (m *ListenerFilter_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovListener(uint64(l)) - } - return n -} - -func sovListener(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozListener(x uint64) (n int) { - return sovListener(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Filter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Filter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Filter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &Filter_Config{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &Filter_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipListener(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FilterChainMatch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FilterChainMatch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FilterChainMatch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrefixRanges", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrefixRanges = append(m.PrefixRanges, &core.CidrRange{}) - if err := m.PrefixRanges[len(m.PrefixRanges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AddressSuffix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AddressSuffix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SuffixLen", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SuffixLen == nil { - m.SuffixLen = &types.UInt32Value{} - } - if err := m.SuffixLen.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourcePrefixRanges", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourcePrefixRanges = append(m.SourcePrefixRanges, &core.CidrRange{}) - if err := m.SourcePrefixRanges[len(m.SourcePrefixRanges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourcePorts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourcePorts = append(m.SourcePorts, &types.UInt32Value{}) - if err := m.SourcePorts[len(m.SourcePorts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DestinationPort", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DestinationPort == nil { - m.DestinationPort = &types.UInt32Value{} - } - if err := m.DestinationPort.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TransportProtocol", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TransportProtocol = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApplicationProtocols", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ApplicationProtocols = append(m.ApplicationProtocols, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerNames", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServerNames = append(m.ServerNames, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceType", wireType) - } - m.SourceType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.SourceType |= FilterChainMatch_ConnectionSourceType(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipListener(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FilterChain) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FilterChain: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FilterChain: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterChainMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.FilterChainMatch == nil { - m.FilterChainMatch = &FilterChainMatch{} - } - if err := m.FilterChainMatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TlsContext", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TlsContext == nil { - m.TlsContext = &auth.DownstreamTlsContext{} - } - if err := m.TlsContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filters = append(m.Filters, Filter{}) - if err := m.Filters[len(m.Filters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UseProxyProto", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UseProxyProto == nil { - m.UseProxyProto = &types.BoolValue{} - } - if err := m.UseProxyProto.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &core.Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TransportSocket", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TransportSocket == nil { - m.TransportSocket = &core.TransportSocket{} - } - if err := m.TransportSocket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipListener(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ListenerFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ListenerFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ListenerFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &ListenerFilter_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowListener - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthListener - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthListener - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &ListenerFilter_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipListener(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthListener - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipListener(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowListener - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowListener - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowListener - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthListener - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthListener - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowListener - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipListener(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthListener - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthListener = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowListener = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/listener.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/listener/listener.proto -package listener +package envoy_api_v2_listener import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,546 +30,8 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on Filter with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Filter) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return FilterValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - switch m.ConfigType.(type) { - - case *Filter_Config: - - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *Filter_TypedConfig: - - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// FilterValidationError is the validation error returned by Filter.Validate if -// the designated constraints aren't met. -type FilterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e FilterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e FilterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e FilterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e FilterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e FilterValidationError) ErrorName() string { return "FilterValidationError" } - -// Error satisfies the builtin error interface -func (e FilterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sFilter.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = FilterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = FilterValidationError{} - -// Validate checks the field values on FilterChainMatch with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *FilterChainMatch) Validate() error { - if m == nil { - return nil - } - - if wrapper := m.GetDestinationPort(); wrapper != nil { - - if val := wrapper.GetValue(); val < 1 || val > 65535 { - return FilterChainMatchValidationError{ - field: "DestinationPort", - reason: "value must be inside range [1, 65535]", - } - } - - } - - for idx, item := range m.GetPrefixRanges() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainMatchValidationError{ - field: fmt.Sprintf("PrefixRanges[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for AddressSuffix - - { - tmp := m.GetSuffixLen() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainMatchValidationError{ - field: "SuffixLen", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if _, ok := FilterChainMatch_ConnectionSourceType_name[int32(m.GetSourceType())]; !ok { - return FilterChainMatchValidationError{ - field: "SourceType", - reason: "value must be one of the defined enum values", - } - } - - for idx, item := range m.GetSourcePrefixRanges() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainMatchValidationError{ - field: fmt.Sprintf("SourcePrefixRanges[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - for idx, item := range m.GetSourcePorts() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainMatchValidationError{ - field: fmt.Sprintf("SourcePorts[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for TransportProtocol - - return nil -} - -// FilterChainMatchValidationError is the validation error returned by -// FilterChainMatch.Validate if the designated constraints aren't met. -type FilterChainMatchValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e FilterChainMatchValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e FilterChainMatchValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e FilterChainMatchValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e FilterChainMatchValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e FilterChainMatchValidationError) ErrorName() string { return "FilterChainMatchValidationError" } - -// Error satisfies the builtin error interface -func (e FilterChainMatchValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sFilterChainMatch.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = FilterChainMatchValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = FilterChainMatchValidationError{} - -// Validate checks the field values on FilterChain with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *FilterChain) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetFilterChainMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainValidationError{ - field: "FilterChainMatch", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetTlsContext() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainValidationError{ - field: "TlsContext", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetFilters() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainValidationError{ - field: fmt.Sprintf("Filters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetUseProxyProto() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainValidationError{ - field: "UseProxyProto", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMetadata() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainValidationError{ - field: "Metadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetTransportSocket() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return FilterChainValidationError{ - field: "TransportSocket", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// FilterChainValidationError is the validation error returned by -// FilterChain.Validate if the designated constraints aren't met. -type FilterChainValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e FilterChainValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e FilterChainValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e FilterChainValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e FilterChainValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e FilterChainValidationError) ErrorName() string { return "FilterChainValidationError" } - -// Error satisfies the builtin error interface -func (e FilterChainValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sFilterChain.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = FilterChainValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = FilterChainValidationError{} - -// Validate checks the field values on ListenerFilter with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *ListenerFilter) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return ListenerFilterValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - switch m.ConfigType.(type) { - - case *ListenerFilter_Config: - - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerFilterValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *ListenerFilter_TypedConfig: - - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ListenerFilterValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// ListenerFilterValidationError is the validation error returned by -// ListenerFilter.Validate if the designated constraints aren't met. -type ListenerFilterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ListenerFilterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ListenerFilterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ListenerFilterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ListenerFilterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ListenerFilterValidationError) ErrorName() string { return "ListenerFilterValidationError" } - -// Error satisfies the builtin error interface -func (e ListenerFilterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sListenerFilter.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ListenerFilterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ListenerFilterValidationError{} +// define the regex for a UUID once up-front +var _listener_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,115 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/listener/quic_config.proto + +package envoy_api_v2_listener + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type QuicProtocolOptions struct { + MaxConcurrentStreams *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_concurrent_streams,json=maxConcurrentStreams,proto3" json:"max_concurrent_streams,omitempty"` + IdleTimeout *duration.Duration `protobuf:"bytes,2,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` + CryptoHandshakeTimeout *duration.Duration `protobuf:"bytes,3,opt,name=crypto_handshake_timeout,json=cryptoHandshakeTimeout,proto3" json:"crypto_handshake_timeout,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *QuicProtocolOptions) Reset() { *m = QuicProtocolOptions{} } +func (m *QuicProtocolOptions) String() string { return proto.CompactTextString(m) } +func (*QuicProtocolOptions) ProtoMessage() {} +func (*QuicProtocolOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_1f6a4a402e708e40, []int{0} +} + +func (m *QuicProtocolOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_QuicProtocolOptions.Unmarshal(m, b) +} +func (m *QuicProtocolOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_QuicProtocolOptions.Marshal(b, m, deterministic) +} +func (m *QuicProtocolOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuicProtocolOptions.Merge(m, src) +} +func (m *QuicProtocolOptions) XXX_Size() int { + return xxx_messageInfo_QuicProtocolOptions.Size(m) +} +func (m *QuicProtocolOptions) XXX_DiscardUnknown() { + xxx_messageInfo_QuicProtocolOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_QuicProtocolOptions proto.InternalMessageInfo + +func (m *QuicProtocolOptions) GetMaxConcurrentStreams() *wrappers.UInt32Value { + if m != nil { + return m.MaxConcurrentStreams + } + return nil +} + +func (m *QuicProtocolOptions) GetIdleTimeout() *duration.Duration { + if m != nil { + return m.IdleTimeout + } + return nil +} + +func (m *QuicProtocolOptions) GetCryptoHandshakeTimeout() *duration.Duration { + if m != nil { + return m.CryptoHandshakeTimeout + } + return nil +} + +func init() { + proto.RegisterType((*QuicProtocolOptions)(nil), "envoy.api.v2.listener.QuicProtocolOptions") +} + +func init() { + proto.RegisterFile("envoy/api/v2/listener/quic_config.proto", fileDescriptor_1f6a4a402e708e40) +} + +var fileDescriptor_1f6a4a402e708e40 = []byte{ + // 369 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xb1, 0x4e, 0xeb, 0x30, + 0x14, 0x86, 0x95, 0x5e, 0xdd, 0x0e, 0xe9, 0x95, 0xee, 0x55, 0x2e, 0x94, 0x50, 0x01, 0x42, 0x30, + 0xc0, 0x64, 0x4b, 0xe9, 0xca, 0x42, 0x0b, 0x12, 0x48, 0x08, 0x4a, 0x0b, 0x5d, 0xa3, 0xd3, 0xc4, + 0x4d, 0x2d, 0x12, 0xdb, 0x38, 0x76, 0x68, 0x37, 0xde, 0x80, 0x85, 0x81, 0x67, 0xe0, 0x11, 0x78, + 0x02, 0x56, 0x5e, 0x83, 0x91, 0x19, 0x21, 0x14, 0x27, 0x81, 0xa1, 0x20, 0x46, 0xeb, 0xff, 0xbe, + 0x5f, 0x3e, 0xe7, 0xd8, 0x5b, 0x84, 0x65, 0x7c, 0x86, 0x41, 0x50, 0x9c, 0x79, 0x38, 0xa6, 0xa9, + 0x22, 0x8c, 0x48, 0x7c, 0xa9, 0x69, 0xe0, 0x07, 0x9c, 0x8d, 0x69, 0x84, 0x84, 0xe4, 0x8a, 0x3b, + 0x8b, 0x06, 0x44, 0x20, 0x28, 0xca, 0x3c, 0x54, 0x81, 0xad, 0xb5, 0x88, 0xf3, 0x28, 0x26, 0xd8, + 0x40, 0x23, 0x3d, 0xc6, 0xa1, 0x96, 0xa0, 0x28, 0x67, 0x85, 0x36, 0x9f, 0x5f, 0x49, 0x10, 0x82, + 0xc8, 0xb4, 0xca, 0x75, 0x28, 0x00, 0x03, 0x63, 0x5c, 0x19, 0x2d, 0xc5, 0x09, 0x8d, 0x24, 0x28, + 0x52, 0xe6, 0xab, 0x73, 0x79, 0xaa, 0x40, 0xe9, 0x52, 0xdf, 0x78, 0xb5, 0xec, 0xff, 0xa7, 0x9a, + 0x06, 0xbd, 0xfc, 0x15, 0xf0, 0xf8, 0x44, 0x18, 0xc8, 0xe9, 0xdb, 0xcd, 0x04, 0xa6, 0xf9, 0x04, + 0x81, 0x96, 0x92, 0x30, 0xe5, 0xa7, 0x4a, 0x12, 0x48, 0x52, 0xd7, 0x5a, 0xb7, 0xb6, 0x1b, 0xde, + 0x0a, 0x2a, 0xfe, 0x85, 0xaa, 0x7f, 0xa1, 0xf3, 0x43, 0xa6, 0xda, 0xde, 0x10, 0x62, 0x4d, 0xfa, + 0x0b, 0x09, 0x4c, 0xbb, 0x1f, 0xea, 0xa0, 0x30, 0x9d, 0x1d, 0xfb, 0x0f, 0x0d, 0x63, 0xe2, 0x2b, + 0x9a, 0x10, 0xae, 0x95, 0x5b, 0x33, 0x4d, 0xcb, 0x73, 0x4d, 0x7b, 0xe5, 0x06, 0xfa, 0x8d, 0x1c, + 0x3f, 0x2b, 0x68, 0x67, 0x60, 0xbb, 0x81, 0x9c, 0x09, 0xc5, 0xfd, 0x09, 0xb0, 0x30, 0x9d, 0xc0, + 0xc5, 0x67, 0xd3, 0xaf, 0x9f, 0x9a, 0x9a, 0x85, 0x7a, 0x50, 0x99, 0x65, 0x69, 0xe7, 0xd6, 0x7a, + 0xb9, 0x7b, 0xbb, 0xf9, 0xdd, 0x72, 0xdc, 0xe2, 0x3a, 0xe5, 0xc5, 0xaa, 0xeb, 0xa0, 0xac, 0xfd, + 0x70, 0xfd, 0xf8, 0x54, 0xaf, 0xfd, 0xb3, 0xec, 0x4d, 0xca, 0x91, 0x81, 0x84, 0xe4, 0xd3, 0x19, + 0xfa, 0xf2, 0x9a, 0x9d, 0xbf, 0xf9, 0x2e, 0xbb, 0xa6, 0xc4, 0x6c, 0xb4, 0x67, 0xdd, 0xd7, 0x96, + 0xf6, 0x0d, 0xba, 0x2b, 0x28, 0x1a, 0x7a, 0xe8, 0xa8, 0x44, 0x8f, 0x07, 0xcf, 0xdf, 0x26, 0xa3, + 0xba, 0x99, 0xa0, 0xfd, 0x1e, 0x00, 0x00, 0xff, 0xff, 0x12, 0xf9, 0x6d, 0x9e, 0x5d, 0x02, 0x00, + 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/quic_config.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/listener/quic_config.proto + +package envoy_api_v2_listener + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _quic_config_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on QuicProtocolOptions with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *QuicProtocolOptions) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetMaxConcurrentStreams()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return QuicProtocolOptionsValidationError{ + field: "MaxConcurrentStreams", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return QuicProtocolOptionsValidationError{ + field: "IdleTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetCryptoHandshakeTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return QuicProtocolOptionsValidationError{ + field: "CryptoHandshakeTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// QuicProtocolOptionsValidationError is the validation error returned by +// QuicProtocolOptions.Validate if the designated constraints aren't met. +type QuicProtocolOptionsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e QuicProtocolOptionsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e QuicProtocolOptionsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e QuicProtocolOptionsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e QuicProtocolOptionsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e QuicProtocolOptionsValidationError) ErrorName() string { + return "QuicProtocolOptionsValidationError" +} + +// Error satisfies the builtin error interface +func (e QuicProtocolOptionsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sQuicProtocolOptions.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = QuicProtocolOptionsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = QuicProtocolOptionsValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,180 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/listener/udp_listener_config.proto + +package envoy_api_v2_listener + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + _struct "github.com/golang/protobuf/ptypes/struct" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type UdpListenerConfig struct { + UdpListenerName string `protobuf:"bytes,1,opt,name=udp_listener_name,json=udpListenerName,proto3" json:"udp_listener_name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *UdpListenerConfig_Config + // *UdpListenerConfig_TypedConfig + ConfigType isUdpListenerConfig_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UdpListenerConfig) Reset() { *m = UdpListenerConfig{} } +func (m *UdpListenerConfig) String() string { return proto.CompactTextString(m) } +func (*UdpListenerConfig) ProtoMessage() {} +func (*UdpListenerConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_04a0b1c45e39fc83, []int{0} +} + +func (m *UdpListenerConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UdpListenerConfig.Unmarshal(m, b) +} +func (m *UdpListenerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UdpListenerConfig.Marshal(b, m, deterministic) +} +func (m *UdpListenerConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_UdpListenerConfig.Merge(m, src) +} +func (m *UdpListenerConfig) XXX_Size() int { + return xxx_messageInfo_UdpListenerConfig.Size(m) +} +func (m *UdpListenerConfig) XXX_DiscardUnknown() { + xxx_messageInfo_UdpListenerConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_UdpListenerConfig proto.InternalMessageInfo + +func (m *UdpListenerConfig) GetUdpListenerName() string { + if m != nil { + return m.UdpListenerName + } + return "" +} + +type isUdpListenerConfig_ConfigType interface { + isUdpListenerConfig_ConfigType() +} + +type UdpListenerConfig_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type UdpListenerConfig_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*UdpListenerConfig_Config) isUdpListenerConfig_ConfigType() {} + +func (*UdpListenerConfig_TypedConfig) isUdpListenerConfig_ConfigType() {} + +func (m *UdpListenerConfig) GetConfigType() isUdpListenerConfig_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *UdpListenerConfig) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*UdpListenerConfig_Config); ok { + return x.Config + } + return nil +} + +func (m *UdpListenerConfig) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*UdpListenerConfig_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*UdpListenerConfig) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*UdpListenerConfig_Config)(nil), + (*UdpListenerConfig_TypedConfig)(nil), + } +} + +type ActiveRawUdpListenerConfig struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ActiveRawUdpListenerConfig) Reset() { *m = ActiveRawUdpListenerConfig{} } +func (m *ActiveRawUdpListenerConfig) String() string { return proto.CompactTextString(m) } +func (*ActiveRawUdpListenerConfig) ProtoMessage() {} +func (*ActiveRawUdpListenerConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_04a0b1c45e39fc83, []int{1} +} + +func (m *ActiveRawUdpListenerConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ActiveRawUdpListenerConfig.Unmarshal(m, b) +} +func (m *ActiveRawUdpListenerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ActiveRawUdpListenerConfig.Marshal(b, m, deterministic) +} +func (m *ActiveRawUdpListenerConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ActiveRawUdpListenerConfig.Merge(m, src) +} +func (m *ActiveRawUdpListenerConfig) XXX_Size() int { + return xxx_messageInfo_ActiveRawUdpListenerConfig.Size(m) +} +func (m *ActiveRawUdpListenerConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ActiveRawUdpListenerConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_ActiveRawUdpListenerConfig proto.InternalMessageInfo + +func init() { + proto.RegisterType((*UdpListenerConfig)(nil), "envoy.api.v2.listener.UdpListenerConfig") + proto.RegisterType((*ActiveRawUdpListenerConfig)(nil), "envoy.api.v2.listener.ActiveRawUdpListenerConfig") +} + +func init() { + proto.RegisterFile("envoy/api/v2/listener/udp_listener_config.proto", fileDescriptor_04a0b1c45e39fc83) +} + +var fileDescriptor_04a0b1c45e39fc83 = []byte{ + // 356 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xc1, 0x4a, 0xeb, 0x40, + 0x18, 0x85, 0x3b, 0xb9, 0xdc, 0xc2, 0x9d, 0x5e, 0xd1, 0x06, 0xb5, 0x31, 0x54, 0x29, 0x75, 0x53, + 0x5c, 0xcc, 0x40, 0x8a, 0x0b, 0x97, 0x8d, 0x08, 0x5d, 0x88, 0x94, 0x14, 0xdd, 0x96, 0x69, 0x33, + 0x0d, 0x03, 0xed, 0xcc, 0x90, 0x4c, 0xa2, 0xd9, 0xf9, 0x06, 0x6e, 0x05, 0xdf, 0xc0, 0x47, 0x70, + 0xe5, 0xd2, 0xad, 0xaf, 0xe1, 0xd2, 0x07, 0x10, 0xe9, 0x4c, 0xa2, 0x68, 0x74, 0x99, 0x9c, 0x73, + 0x98, 0xef, 0x9c, 0x1f, 0x62, 0xca, 0x33, 0x91, 0x63, 0x22, 0x19, 0xce, 0x3c, 0xbc, 0x60, 0x89, + 0xa2, 0x9c, 0xc6, 0x38, 0x0d, 0xe5, 0xa4, 0xfc, 0x98, 0xcc, 0x04, 0x9f, 0xb3, 0x08, 0xc9, 0x58, + 0x28, 0x61, 0x6f, 0xe9, 0x00, 0x22, 0x92, 0xa1, 0xcc, 0x43, 0xa5, 0xc7, 0xdd, 0x89, 0x84, 0x88, + 0x16, 0x14, 0x6b, 0xd3, 0x34, 0x9d, 0x63, 0xc2, 0x73, 0x93, 0x70, 0xdb, 0xdf, 0xa5, 0x44, 0xc5, + 0xe9, 0x4c, 0x15, 0xea, 0x5e, 0x1a, 0x4a, 0x82, 0x09, 0xe7, 0x42, 0x11, 0xc5, 0x04, 0x4f, 0xf0, + 0x92, 0x45, 0x31, 0x51, 0xb4, 0xd0, 0x77, 0x2b, 0x7a, 0xa2, 0x88, 0x4a, 0x13, 0x23, 0x77, 0x1f, + 0x01, 0x6c, 0x9e, 0x87, 0xf2, 0xb4, 0xe0, 0x38, 0xd6, 0xa8, 0xf6, 0x01, 0x6c, 0x7e, 0x69, 0xc0, + 0xc9, 0x92, 0x3a, 0xa0, 0x03, 0x7a, 0xff, 0x82, 0xf5, 0xf4, 0xd3, 0x7d, 0x46, 0x96, 0xd4, 0x3e, + 0x84, 0x75, 0x53, 0xd0, 0xb1, 0x3a, 0xa0, 0xd7, 0xf0, 0x5a, 0xc8, 0xf0, 0xa2, 0x92, 0x17, 0x8d, + 0x35, 0xaf, 0x6f, 0x39, 0x60, 0x58, 0x0b, 0x0a, 0xb3, 0x7d, 0x04, 0xff, 0xab, 0x5c, 0xd2, 0xb0, + 0x58, 0xc7, 0xf9, 0xa3, 0xc3, 0x9b, 0x95, 0xf0, 0x80, 0xe7, 0xc3, 0x5a, 0xd0, 0xd0, 0x5e, 0x43, + 0xe7, 0xaf, 0xc1, 0x86, 0x09, 0x4d, 0x56, 0x7f, 0xbb, 0x6d, 0xe8, 0x0e, 0x66, 0x8a, 0x65, 0x34, + 0x20, 0x97, 0x95, 0x2a, 0xfe, 0x1d, 0x78, 0xbd, 0x7d, 0xbb, 0xf9, 0xeb, 0xda, 0x8e, 0x19, 0xbe, + 0x38, 0x46, 0x59, 0x0d, 0x65, 0xfd, 0x87, 0xeb, 0xa7, 0xe7, 0xba, 0xb5, 0x01, 0xe0, 0x3e, 0x13, + 0x48, 0x9b, 0x64, 0x2c, 0xae, 0x72, 0xf4, 0xe3, 0xa1, 0xfc, 0xed, 0xca, 0x13, 0xa3, 0x15, 0xea, + 0x08, 0xdc, 0x5b, 0xad, 0x13, 0x9d, 0x18, 0x48, 0x86, 0x2e, 0x3c, 0xf4, 0x31, 0xd2, 0xf8, 0xe5, + 0x57, 0x65, 0x5a, 0xd7, 0x3d, 0xfb, 0xef, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3e, 0x44, 0x9f, 0x13, + 0x47, 0x02, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener/udp_listener_config.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,201 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/listener/udp_listener_config.proto + +package envoy_api_v2_listener + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _udp_listener_config_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on UdpListenerConfig with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *UdpListenerConfig) Validate() error { + if m == nil { + return nil + } + + // no validation rules for UdpListenerName + + switch m.ConfigType.(type) { + + case *UdpListenerConfig_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UdpListenerConfigValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *UdpListenerConfig_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UdpListenerConfigValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// UdpListenerConfigValidationError is the validation error returned by +// UdpListenerConfig.Validate if the designated constraints aren't met. +type UdpListenerConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UdpListenerConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UdpListenerConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UdpListenerConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UdpListenerConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UdpListenerConfigValidationError) ErrorName() string { + return "UdpListenerConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e UdpListenerConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUdpListenerConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UdpListenerConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UdpListenerConfigValidationError{} + +// Validate checks the field values on ActiveRawUdpListenerConfig with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ActiveRawUdpListenerConfig) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// ActiveRawUdpListenerConfigValidationError is the validation error returned +// by ActiveRawUdpListenerConfig.Validate if the designated constraints aren't met. +type ActiveRawUdpListenerConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ActiveRawUdpListenerConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ActiveRawUdpListenerConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ActiveRawUdpListenerConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ActiveRawUdpListenerConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ActiveRawUdpListenerConfigValidationError) ErrorName() string { + return "ActiveRawUdpListenerConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e ActiveRawUdpListenerConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sActiveRawUdpListenerConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ActiveRawUdpListenerConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ActiveRawUdpListenerConfigValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,475 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/listener.proto + +package envoy_api_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + listener "github.com/envoyproxy/go-control-plane/envoy/api/v2/listener" + v21 "github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2" + v2 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type Listener_DrainType int32 + +const ( + Listener_DEFAULT Listener_DrainType = 0 + Listener_MODIFY_ONLY Listener_DrainType = 1 +) + +var Listener_DrainType_name = map[int32]string{ + 0: "DEFAULT", + 1: "MODIFY_ONLY", +} + +var Listener_DrainType_value = map[string]int32{ + "DEFAULT": 0, + "MODIFY_ONLY": 1, +} + +func (x Listener_DrainType) String() string { + return proto.EnumName(Listener_DrainType_name, int32(x)) +} + +func (Listener_DrainType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0f8f4b6e66505502, []int{0, 0} +} + +type Listener struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Address *core.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + FilterChains []*listener.FilterChain `protobuf:"bytes,3,rep,name=filter_chains,json=filterChains,proto3" json:"filter_chains,omitempty"` + UseOriginalDst *wrappers.BoolValue `protobuf:"bytes,4,opt,name=use_original_dst,json=useOriginalDst,proto3" json:"use_original_dst,omitempty"` // Deprecated: Do not use. + PerConnectionBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"` + Metadata *core.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + DeprecatedV1 *Listener_DeprecatedV1 `protobuf:"bytes,7,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` + DrainType Listener_DrainType `protobuf:"varint,8,opt,name=drain_type,json=drainType,proto3,enum=envoy.api.v2.Listener_DrainType" json:"drain_type,omitempty"` + ListenerFilters []*listener.ListenerFilter `protobuf:"bytes,9,rep,name=listener_filters,json=listenerFilters,proto3" json:"listener_filters,omitempty"` + ListenerFiltersTimeout *duration.Duration `protobuf:"bytes,15,opt,name=listener_filters_timeout,json=listenerFiltersTimeout,proto3" json:"listener_filters_timeout,omitempty"` + ContinueOnListenerFiltersTimeout bool `protobuf:"varint,17,opt,name=continue_on_listener_filters_timeout,json=continueOnListenerFiltersTimeout,proto3" json:"continue_on_listener_filters_timeout,omitempty"` + Transparent *wrappers.BoolValue `protobuf:"bytes,10,opt,name=transparent,proto3" json:"transparent,omitempty"` + Freebind *wrappers.BoolValue `protobuf:"bytes,11,opt,name=freebind,proto3" json:"freebind,omitempty"` + SocketOptions []*core.SocketOption `protobuf:"bytes,13,rep,name=socket_options,json=socketOptions,proto3" json:"socket_options,omitempty"` + TcpFastOpenQueueLength *wrappers.UInt32Value `protobuf:"bytes,12,opt,name=tcp_fast_open_queue_length,json=tcpFastOpenQueueLength,proto3" json:"tcp_fast_open_queue_length,omitempty"` + TrafficDirection core.TrafficDirection `protobuf:"varint,16,opt,name=traffic_direction,json=trafficDirection,proto3,enum=envoy.api.v2.core.TrafficDirection" json:"traffic_direction,omitempty"` + UdpListenerConfig *listener.UdpListenerConfig `protobuf:"bytes,18,opt,name=udp_listener_config,json=udpListenerConfig,proto3" json:"udp_listener_config,omitempty"` + ApiListener *v2.ApiListener `protobuf:"bytes,19,opt,name=api_listener,json=apiListener,proto3" json:"api_listener,omitempty"` + ConnectionBalanceConfig *Listener_ConnectionBalanceConfig `protobuf:"bytes,20,opt,name=connection_balance_config,json=connectionBalanceConfig,proto3" json:"connection_balance_config,omitempty"` + ReusePort bool `protobuf:"varint,21,opt,name=reuse_port,json=reusePort,proto3" json:"reuse_port,omitempty"` + AccessLog []*v21.AccessLog `protobuf:"bytes,22,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Listener) Reset() { *m = Listener{} } +func (m *Listener) String() string { return proto.CompactTextString(m) } +func (*Listener) ProtoMessage() {} +func (*Listener) Descriptor() ([]byte, []int) { + return fileDescriptor_0f8f4b6e66505502, []int{0} +} + +func (m *Listener) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Listener.Unmarshal(m, b) +} +func (m *Listener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Listener.Marshal(b, m, deterministic) +} +func (m *Listener) XXX_Merge(src proto.Message) { + xxx_messageInfo_Listener.Merge(m, src) +} +func (m *Listener) XXX_Size() int { + return xxx_messageInfo_Listener.Size(m) +} +func (m *Listener) XXX_DiscardUnknown() { + xxx_messageInfo_Listener.DiscardUnknown(m) +} + +var xxx_messageInfo_Listener proto.InternalMessageInfo + +func (m *Listener) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Listener) GetAddress() *core.Address { + if m != nil { + return m.Address + } + return nil +} + +func (m *Listener) GetFilterChains() []*listener.FilterChain { + if m != nil { + return m.FilterChains + } + return nil +} + +// Deprecated: Do not use. +func (m *Listener) GetUseOriginalDst() *wrappers.BoolValue { + if m != nil { + return m.UseOriginalDst + } + return nil +} + +func (m *Listener) GetPerConnectionBufferLimitBytes() *wrappers.UInt32Value { + if m != nil { + return m.PerConnectionBufferLimitBytes + } + return nil +} + +func (m *Listener) GetMetadata() *core.Metadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Listener) GetDeprecatedV1() *Listener_DeprecatedV1 { + if m != nil { + return m.DeprecatedV1 + } + return nil +} + +func (m *Listener) GetDrainType() Listener_DrainType { + if m != nil { + return m.DrainType + } + return Listener_DEFAULT +} + +func (m *Listener) GetListenerFilters() []*listener.ListenerFilter { + if m != nil { + return m.ListenerFilters + } + return nil +} + +func (m *Listener) GetListenerFiltersTimeout() *duration.Duration { + if m != nil { + return m.ListenerFiltersTimeout + } + return nil +} + +func (m *Listener) GetContinueOnListenerFiltersTimeout() bool { + if m != nil { + return m.ContinueOnListenerFiltersTimeout + } + return false +} + +func (m *Listener) GetTransparent() *wrappers.BoolValue { + if m != nil { + return m.Transparent + } + return nil +} + +func (m *Listener) GetFreebind() *wrappers.BoolValue { + if m != nil { + return m.Freebind + } + return nil +} + +func (m *Listener) GetSocketOptions() []*core.SocketOption { + if m != nil { + return m.SocketOptions + } + return nil +} + +func (m *Listener) GetTcpFastOpenQueueLength() *wrappers.UInt32Value { + if m != nil { + return m.TcpFastOpenQueueLength + } + return nil +} + +func (m *Listener) GetTrafficDirection() core.TrafficDirection { + if m != nil { + return m.TrafficDirection + } + return core.TrafficDirection_UNSPECIFIED +} + +func (m *Listener) GetUdpListenerConfig() *listener.UdpListenerConfig { + if m != nil { + return m.UdpListenerConfig + } + return nil +} + +func (m *Listener) GetApiListener() *v2.ApiListener { + if m != nil { + return m.ApiListener + } + return nil +} + +func (m *Listener) GetConnectionBalanceConfig() *Listener_ConnectionBalanceConfig { + if m != nil { + return m.ConnectionBalanceConfig + } + return nil +} + +func (m *Listener) GetReusePort() bool { + if m != nil { + return m.ReusePort + } + return false +} + +func (m *Listener) GetAccessLog() []*v21.AccessLog { + if m != nil { + return m.AccessLog + } + return nil +} + +type Listener_DeprecatedV1 struct { + BindToPort *wrappers.BoolValue `protobuf:"bytes,1,opt,name=bind_to_port,json=bindToPort,proto3" json:"bind_to_port,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Listener_DeprecatedV1) Reset() { *m = Listener_DeprecatedV1{} } +func (m *Listener_DeprecatedV1) String() string { return proto.CompactTextString(m) } +func (*Listener_DeprecatedV1) ProtoMessage() {} +func (*Listener_DeprecatedV1) Descriptor() ([]byte, []int) { + return fileDescriptor_0f8f4b6e66505502, []int{0, 0} +} + +func (m *Listener_DeprecatedV1) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Listener_DeprecatedV1.Unmarshal(m, b) +} +func (m *Listener_DeprecatedV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Listener_DeprecatedV1.Marshal(b, m, deterministic) +} +func (m *Listener_DeprecatedV1) XXX_Merge(src proto.Message) { + xxx_messageInfo_Listener_DeprecatedV1.Merge(m, src) +} +func (m *Listener_DeprecatedV1) XXX_Size() int { + return xxx_messageInfo_Listener_DeprecatedV1.Size(m) +} +func (m *Listener_DeprecatedV1) XXX_DiscardUnknown() { + xxx_messageInfo_Listener_DeprecatedV1.DiscardUnknown(m) +} + +var xxx_messageInfo_Listener_DeprecatedV1 proto.InternalMessageInfo + +func (m *Listener_DeprecatedV1) GetBindToPort() *wrappers.BoolValue { + if m != nil { + return m.BindToPort + } + return nil +} + +type Listener_ConnectionBalanceConfig struct { + // Types that are valid to be assigned to BalanceType: + // *Listener_ConnectionBalanceConfig_ExactBalance_ + BalanceType isListener_ConnectionBalanceConfig_BalanceType `protobuf_oneof:"balance_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Listener_ConnectionBalanceConfig) Reset() { *m = Listener_ConnectionBalanceConfig{} } +func (m *Listener_ConnectionBalanceConfig) String() string { return proto.CompactTextString(m) } +func (*Listener_ConnectionBalanceConfig) ProtoMessage() {} +func (*Listener_ConnectionBalanceConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0f8f4b6e66505502, []int{0, 1} +} + +func (m *Listener_ConnectionBalanceConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Listener_ConnectionBalanceConfig.Unmarshal(m, b) +} +func (m *Listener_ConnectionBalanceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Listener_ConnectionBalanceConfig.Marshal(b, m, deterministic) +} +func (m *Listener_ConnectionBalanceConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_Listener_ConnectionBalanceConfig.Merge(m, src) +} +func (m *Listener_ConnectionBalanceConfig) XXX_Size() int { + return xxx_messageInfo_Listener_ConnectionBalanceConfig.Size(m) +} +func (m *Listener_ConnectionBalanceConfig) XXX_DiscardUnknown() { + xxx_messageInfo_Listener_ConnectionBalanceConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_Listener_ConnectionBalanceConfig proto.InternalMessageInfo + +type isListener_ConnectionBalanceConfig_BalanceType interface { + isListener_ConnectionBalanceConfig_BalanceType() +} + +type Listener_ConnectionBalanceConfig_ExactBalance_ struct { + ExactBalance *Listener_ConnectionBalanceConfig_ExactBalance `protobuf:"bytes,1,opt,name=exact_balance,json=exactBalance,proto3,oneof"` +} + +func (*Listener_ConnectionBalanceConfig_ExactBalance_) isListener_ConnectionBalanceConfig_BalanceType() { +} + +func (m *Listener_ConnectionBalanceConfig) GetBalanceType() isListener_ConnectionBalanceConfig_BalanceType { + if m != nil { + return m.BalanceType + } + return nil +} + +func (m *Listener_ConnectionBalanceConfig) GetExactBalance() *Listener_ConnectionBalanceConfig_ExactBalance { + if x, ok := m.GetBalanceType().(*Listener_ConnectionBalanceConfig_ExactBalance_); ok { + return x.ExactBalance + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Listener_ConnectionBalanceConfig) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Listener_ConnectionBalanceConfig_ExactBalance_)(nil), + } +} + +type Listener_ConnectionBalanceConfig_ExactBalance struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Listener_ConnectionBalanceConfig_ExactBalance) Reset() { + *m = Listener_ConnectionBalanceConfig_ExactBalance{} +} +func (m *Listener_ConnectionBalanceConfig_ExactBalance) String() string { + return proto.CompactTextString(m) +} +func (*Listener_ConnectionBalanceConfig_ExactBalance) ProtoMessage() {} +func (*Listener_ConnectionBalanceConfig_ExactBalance) Descriptor() ([]byte, []int) { + return fileDescriptor_0f8f4b6e66505502, []int{0, 1, 0} +} + +func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Unmarshal(m, b) +} +func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Marshal(b, m, deterministic) +} +func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Merge(src proto.Message) { + xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Merge(m, src) +} +func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_Size() int { + return xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.Size(m) +} +func (m *Listener_ConnectionBalanceConfig_ExactBalance) XXX_DiscardUnknown() { + xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance.DiscardUnknown(m) +} + +var xxx_messageInfo_Listener_ConnectionBalanceConfig_ExactBalance proto.InternalMessageInfo + +func init() { + proto.RegisterEnum("envoy.api.v2.Listener_DrainType", Listener_DrainType_name, Listener_DrainType_value) + proto.RegisterType((*Listener)(nil), "envoy.api.v2.Listener") + proto.RegisterType((*Listener_DeprecatedV1)(nil), "envoy.api.v2.Listener.DeprecatedV1") + proto.RegisterType((*Listener_ConnectionBalanceConfig)(nil), "envoy.api.v2.Listener.ConnectionBalanceConfig") + proto.RegisterType((*Listener_ConnectionBalanceConfig_ExactBalance)(nil), "envoy.api.v2.Listener.ConnectionBalanceConfig.ExactBalance") +} + +func init() { proto.RegisterFile("envoy/api/v2/listener.proto", fileDescriptor_0f8f4b6e66505502) } + +var fileDescriptor_0f8f4b6e66505502 = []byte{ + // 1046 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4d, 0x73, 0x1b, 0xb5, + 0x1b, 0xef, 0xa6, 0x79, 0xb1, 0xe5, 0x97, 0x38, 0xca, 0xff, 0x9f, 0x6c, 0xdd, 0x84, 0x9a, 0x94, + 0xce, 0x98, 0xe9, 0xcc, 0x9a, 0x3a, 0x33, 0x70, 0xa0, 0x03, 0x13, 0xc7, 0x0d, 0x69, 0xc7, 0xad, + 0xc3, 0x36, 0xe9, 0xb4, 0x27, 0x8d, 0xbc, 0xab, 0x75, 0x05, 0x6b, 0x49, 0x48, 0x5a, 0xd3, 0xdc, + 0x38, 0x73, 0xe1, 0xca, 0x85, 0x0b, 0x1f, 0x83, 0x4f, 0xc0, 0x95, 0xaf, 0xc2, 0x89, 0xe1, 0xc0, + 0x30, 0xab, 0x7d, 0xc9, 0x3a, 0xb6, 0x09, 0xdc, 0xf4, 0xe8, 0xf9, 0xfd, 0x7e, 0xfb, 0xbc, 0xed, + 0x23, 0x70, 0x97, 0xb0, 0x29, 0xbf, 0xec, 0x60, 0x41, 0x3b, 0xd3, 0x6e, 0x27, 0xa4, 0x4a, 0x13, + 0x46, 0xa4, 0x23, 0x24, 0xd7, 0x1c, 0x56, 0x8d, 0xd3, 0xc1, 0x82, 0x3a, 0xd3, 0x6e, 0xf3, 0xde, + 0x0c, 0xd4, 0xe3, 0x92, 0x74, 0xb0, 0xef, 0x4b, 0xa2, 0x54, 0x02, 0x6f, 0xee, 0xcd, 0x03, 0x46, + 0x58, 0x91, 0xd4, 0xfb, 0x60, 0xde, 0xab, 0xb8, 0xf7, 0x35, 0xd1, 0x88, 0x0b, 0x4d, 0x39, 0x4b, + 0x61, 0x9d, 0x85, 0x01, 0xe5, 0x07, 0xe4, 0xf1, 0x89, 0xe0, 0x8c, 0x30, 0xad, 0xfe, 0x99, 0x10, + 0xf9, 0x02, 0x15, 0x48, 0x2c, 0xa0, 0xe3, 0x94, 0xf0, 0x51, 0x42, 0x48, 0xee, 0x3a, 0x01, 0x0d, + 0x35, 0x91, 0x1d, 0xec, 0x79, 0x44, 0xa9, 0x90, 0x8f, 0x63, 0x91, 0xdc, 0x48, 0x19, 0x0f, 0x67, + 0x18, 0xf9, 0x27, 0x62, 0xa4, 0xa0, 0x68, 0xb6, 0x68, 0xcd, 0xbd, 0x31, 0xe7, 0xe3, 0x90, 0x98, + 0x80, 0x30, 0x63, 0x5c, 0xe3, 0x38, 0xbb, 0x2c, 0xda, 0xf7, 0x52, 0xaf, 0xb1, 0x46, 0x51, 0xd0, + 0xf1, 0x23, 0x89, 0x0b, 0xe9, 0xcf, 0xf9, 0xbf, 0x95, 0x58, 0x08, 0x22, 0x73, 0x7e, 0xe4, 0x0b, + 0x5c, 0xd4, 0xed, 0x4c, 0xe8, 0x58, 0x62, 0x9d, 0x55, 0x79, 0x7f, 0xce, 0xaf, 0x34, 0xd6, 0x51, + 0x46, 0xdf, 0x9d, 0xe2, 0x90, 0xfa, 0x58, 0x93, 0x4e, 0x76, 0x48, 0x1c, 0x07, 0x3f, 0xd5, 0x41, + 0x69, 0x90, 0x26, 0x02, 0x21, 0x58, 0x65, 0x78, 0x42, 0x6c, 0xab, 0x65, 0xb5, 0xcb, 0xae, 0x39, + 0xc3, 0xcf, 0xc0, 0x46, 0xda, 0x6d, 0x7b, 0xa5, 0x65, 0xb5, 0x2b, 0xdd, 0xa6, 0x53, 0x9c, 0x0e, + 0x27, 0x6e, 0xa8, 0x73, 0x94, 0x20, 0x7a, 0xa5, 0x3f, 0x7b, 0x6b, 0xdf, 0x5b, 0x2b, 0x0d, 0xcb, + 0xcd, 0x48, 0xf0, 0x0b, 0x50, 0x4b, 0x4a, 0x8d, 0xbc, 0xb7, 0x98, 0x32, 0x65, 0xdf, 0x6e, 0xdd, + 0x6e, 0x57, 0xba, 0x07, 0xb3, 0x2a, 0x79, 0x2d, 0x4f, 0x0c, 0xf6, 0x38, 0x86, 0xba, 0xd5, 0xe0, + 0xca, 0x50, 0xf0, 0x14, 0x34, 0x22, 0x45, 0x10, 0x97, 0x74, 0x4c, 0x19, 0x0e, 0x91, 0xaf, 0xb4, + 0xbd, 0x9a, 0x46, 0x94, 0x14, 0xcf, 0xc9, 0x8a, 0xe7, 0xf4, 0x38, 0x0f, 0x5f, 0xe1, 0x30, 0x22, + 0xbd, 0x15, 0xdb, 0x72, 0xeb, 0x91, 0x22, 0xc3, 0x94, 0xd6, 0x57, 0x1a, 0x06, 0xe0, 0x7d, 0x91, + 0x0c, 0x07, 0x23, 0x5e, 0x5c, 0x2c, 0x34, 0x8a, 0x82, 0x80, 0x48, 0x14, 0xd2, 0x09, 0xd5, 0x68, + 0x74, 0xa9, 0x89, 0xb2, 0xd7, 0x8c, 0xf4, 0xde, 0x9c, 0xf4, 0xc5, 0x53, 0xa6, 0x0f, 0xbb, 0x46, + 0xdc, 0xdd, 0x17, 0x44, 0x1e, 0xe7, 0x2a, 0x3d, 0x23, 0x32, 0x88, 0x35, 0x7a, 0xb1, 0x04, 0xfc, + 0x04, 0x94, 0x26, 0x44, 0x63, 0x1f, 0x6b, 0x6c, 0xaf, 0x1b, 0xb9, 0xbb, 0x0b, 0x6a, 0xf7, 0x3c, + 0x85, 0xb8, 0x39, 0x18, 0x9e, 0x82, 0x9a, 0x4f, 0x84, 0x24, 0x1e, 0xd6, 0xc4, 0x47, 0xd3, 0x47, + 0xf6, 0x86, 0x61, 0xdf, 0x9f, 0x65, 0x67, 0x6d, 0x73, 0xfa, 0x39, 0xf6, 0xd5, 0x23, 0xb7, 0xea, + 0x17, 0x2c, 0xf8, 0x39, 0x00, 0xbe, 0xc4, 0x94, 0x21, 0x7d, 0x29, 0x88, 0x5d, 0x6a, 0x59, 0xed, + 0x7a, 0xb7, 0xb5, 0x4c, 0x26, 0x06, 0x9e, 0x5f, 0x0a, 0xe2, 0x96, 0xfd, 0xec, 0x08, 0xcf, 0x40, + 0x23, 0xff, 0x9b, 0x92, 0x76, 0x28, 0xbb, 0x6c, 0x3a, 0xf8, 0x60, 0x49, 0x07, 0x33, 0xbd, 0xa4, + 0x93, 0xee, 0x66, 0x38, 0x63, 0x2b, 0xf8, 0x12, 0xd8, 0xd7, 0x15, 0x91, 0xa6, 0x13, 0xc2, 0x23, + 0x6d, 0x6f, 0x9a, 0x3c, 0xef, 0xcc, 0x15, 0xbd, 0x9f, 0xfe, 0x2c, 0xee, 0xce, 0x35, 0xb5, 0xf3, + 0x84, 0x08, 0x5f, 0x80, 0x0f, 0x3c, 0xce, 0x34, 0x65, 0x11, 0x41, 0x9c, 0xa1, 0xa5, 0x1f, 0xd8, + 0x6a, 0x59, 0xed, 0x92, 0xdb, 0xca, 0xb0, 0x43, 0x36, 0x58, 0xac, 0xf7, 0x18, 0x54, 0xb4, 0xc4, + 0x4c, 0x09, 0x2c, 0x09, 0xd3, 0x36, 0xb8, 0x69, 0xce, 0xdc, 0x22, 0x1c, 0x7e, 0x0c, 0x4a, 0x81, + 0x24, 0x64, 0x44, 0x99, 0x6f, 0x57, 0x6e, 0xa4, 0xe6, 0x58, 0x78, 0x02, 0xea, 0x33, 0xab, 0x51, + 0xd9, 0x35, 0x53, 0xea, 0x7b, 0x0b, 0xc6, 0xe6, 0xa5, 0x01, 0x0e, 0x0d, 0xce, 0xad, 0xa9, 0x82, + 0xa5, 0xe0, 0x6b, 0xd0, 0xd4, 0x9e, 0x40, 0x01, 0x56, 0xb1, 0x12, 0x61, 0xe8, 0x9b, 0x88, 0x44, + 0x04, 0x85, 0x84, 0x8d, 0xf5, 0x5b, 0xbb, 0xfa, 0x2f, 0x26, 0x7b, 0x47, 0x7b, 0xe2, 0x04, 0x2b, + 0x3d, 0x14, 0x84, 0x7d, 0x19, 0x93, 0x07, 0x86, 0x0b, 0xcf, 0xc0, 0x96, 0x96, 0x38, 0x08, 0xa8, + 0x87, 0x7c, 0x2a, 0x93, 0xb9, 0xb7, 0x1b, 0x66, 0xac, 0xee, 0x2f, 0x08, 0xf2, 0x3c, 0xc1, 0xf6, + 0x33, 0xa8, 0xdb, 0xd0, 0xd7, 0x6e, 0xe0, 0x6b, 0xb0, 0xbd, 0x60, 0x65, 0xdb, 0xd0, 0x04, 0xd9, + 0x5e, 0x32, 0x63, 0x17, 0xbe, 0xc8, 0x1a, 0x77, 0x6c, 0xf0, 0xee, 0x56, 0x74, 0xfd, 0x0a, 0x9e, + 0x82, 0x6a, 0x71, 0x4d, 0xdb, 0xdb, 0x46, 0x32, 0x1b, 0xdb, 0xf4, 0x69, 0xc8, 0x25, 0xa7, 0x5d, + 0xe7, 0x48, 0xd0, 0x4c, 0xc2, 0xad, 0xe0, 0x2b, 0x03, 0x7e, 0x05, 0xee, 0x14, 0x97, 0x05, 0x0e, + 0x31, 0xf3, 0x48, 0x16, 0xe9, 0xff, 0x8c, 0xac, 0xb3, 0xe4, 0xa7, 0x2a, 0xac, 0x87, 0x84, 0x96, + 0xc6, 0xbb, 0xeb, 0x2d, 0x76, 0xc0, 0x7d, 0x00, 0x24, 0x89, 0x17, 0x9d, 0xe0, 0x52, 0xdb, 0xff, + 0x37, 0xf3, 0x5a, 0x36, 0x37, 0x67, 0x5c, 0x6a, 0xf8, 0x0c, 0x80, 0xe4, 0x95, 0x42, 0x21, 0x1f, + 0xdb, 0x3b, 0x66, 0x3c, 0x1e, 0xce, 0xa6, 0x94, 0xcc, 0xbc, 0x73, 0xf5, 0x98, 0xc5, 0xa9, 0x19, + 0x63, 0xc0, 0xc7, 0x6e, 0x19, 0x67, 0xc7, 0xe6, 0x00, 0x54, 0x8b, 0xab, 0x03, 0x3e, 0x06, 0xd5, + 0x78, 0x0c, 0x91, 0xe6, 0xc9, 0xc7, 0xad, 0x1b, 0x47, 0x17, 0xc4, 0xf8, 0x73, 0x1e, 0x47, 0xd6, + 0xfc, 0xd9, 0x02, 0xbb, 0x4b, 0xb2, 0x85, 0x23, 0x50, 0x23, 0xef, 0xb0, 0xa7, 0xb3, 0xda, 0xa5, + 0xd2, 0x9f, 0xfe, 0xb7, 0xa2, 0x39, 0x4f, 0x62, 0x8d, 0xf4, 0xea, 0xf4, 0x96, 0x5b, 0x25, 0x05, + 0xbb, 0x59, 0x07, 0xd5, 0xa2, 0xbf, 0xb7, 0x0d, 0xaa, 0x59, 0xa7, 0xe2, 0xe5, 0x07, 0x6f, 0xff, + 0xd1, 0xb3, 0x0e, 0x3e, 0x04, 0xe5, 0x7c, 0xcd, 0xc1, 0x0a, 0xd8, 0xe8, 0x3f, 0x39, 0x39, 0xba, + 0x18, 0x9c, 0x37, 0x6e, 0xc1, 0x4d, 0x50, 0x79, 0x3e, 0xec, 0x3f, 0x3d, 0x79, 0x83, 0x86, 0x2f, + 0x06, 0x6f, 0x1a, 0xd6, 0xb3, 0xd5, 0x52, 0xbd, 0xb1, 0xd9, 0xbb, 0xf8, 0xfd, 0xc7, 0xbf, 0x7e, + 0x58, 0x6b, 0x42, 0x7b, 0xc9, 0xd4, 0x1c, 0xfe, 0xf2, 0xdd, 0xaf, 0xbf, 0xad, 0xaf, 0x34, 0x2c, + 0xd0, 0xa4, 0x3c, 0x49, 0x47, 0x48, 0xfe, 0xee, 0x72, 0x26, 0xb3, 0x5e, 0x2d, 0x4b, 0xed, 0x2c, + 0xae, 0xe1, 0x99, 0x35, 0x5a, 0x37, 0xc5, 0x3c, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xcc, + 0xae, 0xe0, 0x87, 0x09, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/listener.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,538 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/listener.proto + +package envoy_api_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" + + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} + + _ = core.TrafficDirection(0) +) + +// define the regex for a UUID once up-front +var _listener_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on Listener with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Listener) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Name + + if m.GetAddress() == nil { + return ListenerValidationError{ + field: "Address", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "Address", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetFilterChains() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: fmt.Sprintf("FilterChains[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetUseOriginalDst()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "UseOriginalDst", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetPerConnectionBufferLimitBytes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "PerConnectionBufferLimitBytes", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetDeprecatedV1()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "DeprecatedV1", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for DrainType + + for idx, item := range m.GetListenerFilters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: fmt.Sprintf("ListenerFilters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetListenerFiltersTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "ListenerFiltersTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for ContinueOnListenerFiltersTimeout + + if v, ok := interface{}(m.GetTransparent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "Transparent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetFreebind()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "Freebind", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetSocketOptions() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: fmt.Sprintf("SocketOptions[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetTcpFastOpenQueueLength()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "TcpFastOpenQueueLength", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for TrafficDirection + + if v, ok := interface{}(m.GetUdpListenerConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "UdpListenerConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetApiListener()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "ApiListener", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetConnectionBalanceConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: "ConnectionBalanceConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for ReusePort + + for idx, item := range m.GetAccessLog() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListenerValidationError{ + field: fmt.Sprintf("AccessLog[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ListenerValidationError is the validation error returned by +// Listener.Validate if the designated constraints aren't met. +type ListenerValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListenerValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListenerValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListenerValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListenerValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListenerValidationError) ErrorName() string { return "ListenerValidationError" } + +// Error satisfies the builtin error interface +func (e ListenerValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListener.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListenerValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListenerValidationError{} + +// Validate checks the field values on Listener_DeprecatedV1 with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *Listener_DeprecatedV1) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetBindToPort()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Listener_DeprecatedV1ValidationError{ + field: "BindToPort", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// Listener_DeprecatedV1ValidationError is the validation error returned by +// Listener_DeprecatedV1.Validate if the designated constraints aren't met. +type Listener_DeprecatedV1ValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Listener_DeprecatedV1ValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Listener_DeprecatedV1ValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Listener_DeprecatedV1ValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Listener_DeprecatedV1ValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Listener_DeprecatedV1ValidationError) ErrorName() string { + return "Listener_DeprecatedV1ValidationError" +} + +// Error satisfies the builtin error interface +func (e Listener_DeprecatedV1ValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListener_DeprecatedV1.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Listener_DeprecatedV1ValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Listener_DeprecatedV1ValidationError{} + +// Validate checks the field values on Listener_ConnectionBalanceConfig with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *Listener_ConnectionBalanceConfig) Validate() error { + if m == nil { + return nil + } + + switch m.BalanceType.(type) { + + case *Listener_ConnectionBalanceConfig_ExactBalance_: + + if v, ok := interface{}(m.GetExactBalance()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Listener_ConnectionBalanceConfigValidationError{ + field: "ExactBalance", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return Listener_ConnectionBalanceConfigValidationError{ + field: "BalanceType", + reason: "value is required", + } + + } + + return nil +} + +// Listener_ConnectionBalanceConfigValidationError is the validation error +// returned by Listener_ConnectionBalanceConfig.Validate if the designated +// constraints aren't met. +type Listener_ConnectionBalanceConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Listener_ConnectionBalanceConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Listener_ConnectionBalanceConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Listener_ConnectionBalanceConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Listener_ConnectionBalanceConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Listener_ConnectionBalanceConfigValidationError) ErrorName() string { + return "Listener_ConnectionBalanceConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e Listener_ConnectionBalanceConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListener_ConnectionBalanceConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Listener_ConnectionBalanceConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Listener_ConnectionBalanceConfigValidationError{} + +// Validate checks the field values on +// Listener_ConnectionBalanceConfig_ExactBalance with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Listener_ConnectionBalanceConfig_ExactBalance) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// Listener_ConnectionBalanceConfig_ExactBalanceValidationError is the +// validation error returned by +// Listener_ConnectionBalanceConfig_ExactBalance.Validate if the designated +// constraints aren't met. +type Listener_ConnectionBalanceConfig_ExactBalanceValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Listener_ConnectionBalanceConfig_ExactBalanceValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Listener_ConnectionBalanceConfig_ExactBalanceValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Listener_ConnectionBalanceConfig_ExactBalanceValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Listener_ConnectionBalanceConfig_ExactBalanceValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Listener_ConnectionBalanceConfig_ExactBalanceValidationError) ErrorName() string { + return "Listener_ConnectionBalanceConfig_ExactBalanceValidationError" +} + +// Error satisfies the builtin error interface +func (e Listener_ConnectionBalanceConfig_ExactBalanceValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListener_ConnectionBalanceConfig_ExactBalance.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Listener_ConnectionBalanceConfig_ExactBalanceValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Listener_ConnectionBalanceConfig_ExactBalanceValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,24 +1,21 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/rds.proto -package v2 +package envoy_api_v2 import ( - bytes "bytes" context "context" fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/googleapis/google/api" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" + proto "github.com/golang/protobuf/proto" + _ "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" - - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - route "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -30,375 +27,74 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -// [#comment:next free field: 10] -type RouteConfiguration struct { - // The name of the route configuration. For example, it might match - // :ref:`route_config_name - // ` in - // :ref:`envoy_api_msg_config.filter.network.http_connection_manager.v2.Rds`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // An array of virtual hosts that make up the route table. - VirtualHosts []route.VirtualHost `protobuf:"bytes,2,rep,name=virtual_hosts,json=virtualHosts,proto3" json:"virtual_hosts"` - // An array of virtual hosts will be dynamically loaded via the VHDS API. - // Both *virtual_hosts* and *vhds* fields will be used when present. *virtual_hosts* can be used - // for a base routing table or for infrequently changing virtual hosts. *vhds* is used for - // on-demand discovery of virtual hosts. The contents of these two fields will be merged to - // generate a routing table for a given RouteConfiguration, with *vhds* derived configuration - // taking precedence. - // [#not-implemented-hide:] - Vhds *Vhds `protobuf:"bytes,9,opt,name=vhds,proto3" json:"vhds,omitempty"` - // Optionally specifies a list of HTTP headers that the connection manager - // will consider to be internal only. If they are found on external requests they will be cleaned - // prior to filter invocation. See :ref:`config_http_conn_man_headers_x-envoy-internal` for more - // information. - InternalOnlyHeaders []string `protobuf:"bytes,3,rep,name=internal_only_headers,json=internalOnlyHeaders,proto3" json:"internal_only_headers,omitempty"` - // Specifies a list of HTTP headers that should be added to each response that - // the connection manager encodes. Headers specified at this level are applied - // after headers from any enclosed :ref:`envoy_api_msg_route.VirtualHost` or - // :ref:`envoy_api_msg_route.RouteAction`. For more information, including details on - // header value syntax, see the documentation on :ref:`custom request headers - // `. - ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,4,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each response - // that the connection manager encodes. - ResponseHeadersToRemove []string `protobuf:"bytes,5,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` - // Specifies a list of HTTP headers that should be added to each request - // routed by the HTTP connection manager. Headers specified at this level are - // applied after headers from any enclosed :ref:`envoy_api_msg_route.VirtualHost` or - // :ref:`envoy_api_msg_route.RouteAction`. For more information, including details on - // header value syntax, see the documentation on :ref:`custom request headers - // `. - RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,6,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each request - // routed by the HTTP connection manager. - RequestHeadersToRemove []string `protobuf:"bytes,8,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` - // An optional boolean that specifies whether the clusters that the route - // table refers to will be validated by the cluster manager. If set to true - // and a route refers to a non-existent cluster, the route table will not - // load. If set to false and a route refers to a non-existent cluster, the - // route table will load and the router filter will return a 404 if the route - // is selected at runtime. This setting defaults to true if the route table - // is statically defined via the :ref:`route_config - // ` - // option. This setting default to false if the route table is loaded dynamically via the - // :ref:`rds - // ` - // option. Users may which to override the default behavior in certain cases (for example when - // using CDS with a static route table). - ValidateClusters *types.BoolValue `protobuf:"bytes,7,opt,name=validate_clusters,json=validateClusters,proto3" json:"validate_clusters,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteConfiguration) Reset() { *m = RouteConfiguration{} } -func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) } -func (*RouteConfiguration) ProtoMessage() {} -func (*RouteConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_78812f46dcff924a, []int{0} -} -func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RouteConfiguration.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *RouteConfiguration) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteConfiguration.Merge(m, src) -} -func (m *RouteConfiguration) XXX_Size() int { - return m.Size() -} -func (m *RouteConfiguration) XXX_DiscardUnknown() { - xxx_messageInfo_RouteConfiguration.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteConfiguration proto.InternalMessageInfo +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -func (m *RouteConfiguration) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *RouteConfiguration) GetVirtualHosts() []route.VirtualHost { - if m != nil { - return m.VirtualHosts - } - return nil +type RdsDummy struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RouteConfiguration) GetVhds() *Vhds { - if m != nil { - return m.Vhds - } - return nil -} - -func (m *RouteConfiguration) GetInternalOnlyHeaders() []string { - if m != nil { - return m.InternalOnlyHeaders - } - return nil -} - -func (m *RouteConfiguration) GetResponseHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.ResponseHeadersToAdd - } - return nil -} - -func (m *RouteConfiguration) GetResponseHeadersToRemove() []string { - if m != nil { - return m.ResponseHeadersToRemove - } - return nil -} - -func (m *RouteConfiguration) GetRequestHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.RequestHeadersToAdd - } - return nil -} - -func (m *RouteConfiguration) GetRequestHeadersToRemove() []string { - if m != nil { - return m.RequestHeadersToRemove - } - return nil +func (m *RdsDummy) Reset() { *m = RdsDummy{} } +func (m *RdsDummy) String() string { return proto.CompactTextString(m) } +func (*RdsDummy) ProtoMessage() {} +func (*RdsDummy) Descriptor() ([]byte, []int) { + return fileDescriptor_78812f46dcff924a, []int{0} } -func (m *RouteConfiguration) GetValidateClusters() *types.BoolValue { - if m != nil { - return m.ValidateClusters - } - return nil +func (m *RdsDummy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RdsDummy.Unmarshal(m, b) } - -// [#not-implemented-hide:] -type Vhds struct { - // Configuration source specifier for VHDS. - ConfigSource core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Vhds) Reset() { *m = Vhds{} } -func (m *Vhds) String() string { return proto.CompactTextString(m) } -func (*Vhds) ProtoMessage() {} -func (*Vhds) Descriptor() ([]byte, []int) { - return fileDescriptor_78812f46dcff924a, []int{1} -} -func (m *Vhds) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Vhds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Vhds.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } +func (m *RdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RdsDummy.Marshal(b, m, deterministic) } -func (m *Vhds) XXX_Merge(src proto.Message) { - xxx_messageInfo_Vhds.Merge(m, src) +func (m *RdsDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RdsDummy.Merge(m, src) } -func (m *Vhds) XXX_Size() int { - return m.Size() +func (m *RdsDummy) XXX_Size() int { + return xxx_messageInfo_RdsDummy.Size(m) } -func (m *Vhds) XXX_DiscardUnknown() { - xxx_messageInfo_Vhds.DiscardUnknown(m) +func (m *RdsDummy) XXX_DiscardUnknown() { + xxx_messageInfo_RdsDummy.DiscardUnknown(m) } -var xxx_messageInfo_Vhds proto.InternalMessageInfo - -func (m *Vhds) GetConfigSource() core.ConfigSource { - if m != nil { - return m.ConfigSource - } - return core.ConfigSource{} -} +var xxx_messageInfo_RdsDummy proto.InternalMessageInfo func init() { - proto.RegisterType((*RouteConfiguration)(nil), "envoy.api.v2.RouteConfiguration") - proto.RegisterType((*Vhds)(nil), "envoy.api.v2.Vhds") + proto.RegisterType((*RdsDummy)(nil), "envoy.api.v2.RdsDummy") } func init() { proto.RegisterFile("envoy/api/v2/rds.proto", fileDescriptor_78812f46dcff924a) } var fileDescriptor_78812f46dcff924a = []byte{ - // 673 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xbf, 0x6f, 0xd3, 0x40, - 0x18, 0xed, 0x25, 0xe9, 0xaf, 0x4b, 0x8a, 0xda, 0xeb, 0xaf, 0x34, 0xa0, 0x24, 0x0a, 0x05, 0x45, - 0x0c, 0x36, 0x32, 0x13, 0xed, 0x44, 0x5a, 0x41, 0xc5, 0xd2, 0xca, 0x2d, 0x99, 0x10, 0xd6, 0xd5, - 0xbe, 0xc6, 0x96, 0x5c, 0x7f, 0xe6, 0xee, 0x6c, 0xc8, 0x0a, 0x0b, 0x62, 0x84, 0x7f, 0x82, 0xbf, - 0x81, 0x05, 0xc6, 0x8e, 0x48, 0xec, 0x08, 0x05, 0x06, 0xf8, 0x2f, 0x90, 0xcf, 0x36, 0xc4, 0x4d, - 0x61, 0x40, 0x5d, 0xa2, 0xcb, 0xbd, 0xf7, 0xbe, 0xef, 0x7d, 0x77, 0xef, 0x8c, 0xd7, 0x58, 0x10, - 0xc3, 0x50, 0xa7, 0xa1, 0xa7, 0xc7, 0x86, 0xce, 0x1d, 0xa1, 0x85, 0x1c, 0x24, 0x90, 0x9a, 0xda, - 0xd7, 0x68, 0xe8, 0x69, 0xb1, 0xd1, 0xb8, 0x56, 0x60, 0xd9, 0xc0, 0x99, 0x7e, 0x4c, 0x05, 0x4b, - 0xb9, 0x8d, 0x1b, 0x93, 0xa8, 0x0d, 0xc1, 0x89, 0x37, 0xb0, 0x04, 0x44, 0xdc, 0xce, 0x69, 0xc5, - 0x22, 0x8e, 0x27, 0x6c, 0x88, 0x19, 0x1f, 0x66, 0x68, 0xb3, 0x68, 0x04, 0x22, 0xc9, 0xd2, 0xdf, - 0x5c, 0x3d, 0x00, 0x18, 0xf8, 0x4c, 0x11, 0x68, 0x10, 0x80, 0xa4, 0xd2, 0x83, 0x40, 0xe4, 0xea, - 0x0c, 0x55, 0xff, 0x8e, 0xa3, 0x13, 0xfd, 0x19, 0xa7, 0x61, 0xc8, 0x78, 0x8e, 0xaf, 0xc7, 0xd4, - 0xf7, 0x1c, 0x2a, 0x99, 0x9e, 0x2f, 0x32, 0x60, 0x65, 0x00, 0x03, 0x50, 0x4b, 0x3d, 0x59, 0xa5, - 0xbb, 0x9d, 0x6f, 0x15, 0x4c, 0xcc, 0xa4, 0xf9, 0x8e, 0x9a, 0x23, 0xe2, 0xaa, 0x19, 0x21, 0xb8, - 0x12, 0xd0, 0x53, 0x56, 0x47, 0x6d, 0xd4, 0x9d, 0x37, 0xd5, 0x9a, 0x3c, 0xc4, 0x0b, 0xb1, 0xc7, - 0x65, 0x44, 0x7d, 0xcb, 0x05, 0x21, 0x45, 0xbd, 0xd4, 0x2e, 0x77, 0xab, 0x46, 0x4b, 0x1b, 0x3f, - 0x40, 0x2d, 0x9d, 0xa4, 0x9f, 0x12, 0xf7, 0x40, 0xc8, 0x5e, 0xe5, 0xec, 0x4b, 0x6b, 0xca, 0xac, - 0xc5, 0x7f, 0xb6, 0x04, 0xb9, 0x89, 0x2b, 0xb1, 0xeb, 0x88, 0xfa, 0x7c, 0x1b, 0x75, 0xab, 0x06, - 0x29, 0x96, 0xe8, 0xbb, 0x8e, 0x30, 0x15, 0x4e, 0x0c, 0xbc, 0xea, 0x05, 0x92, 0xf1, 0x80, 0xfa, - 0x16, 0x04, 0xfe, 0xd0, 0x72, 0x19, 0x75, 0x18, 0x17, 0xf5, 0x72, 0xbb, 0xdc, 0x9d, 0x37, 0x97, - 0x73, 0x70, 0x3f, 0xf0, 0x87, 0x7b, 0x29, 0x44, 0x5c, 0xbc, 0xce, 0x99, 0x08, 0x21, 0x10, 0x2c, - 0xa7, 0x5b, 0x12, 0x2c, 0xea, 0x38, 0xf5, 0x8a, 0x72, 0xbc, 0x59, 0x6c, 0x97, 0x5c, 0xa3, 0x96, - 0x8a, 0xfb, 0xd4, 0x8f, 0xd8, 0x7e, 0x98, 0x1c, 0x41, 0xaf, 0xfa, 0xfe, 0xe7, 0xc7, 0xf2, 0xcc, - 0x1b, 0x54, 0x5e, 0xfc, 0x31, 0x6b, 0xae, 0xe4, 0x15, 0xb3, 0x26, 0x47, 0x70, 0xcf, 0x71, 0xc8, - 0x36, 0x6e, 0x5c, 0xd4, 0x89, 0xb3, 0x53, 0x88, 0x59, 0x7d, 0x5a, 0x59, 0x5c, 0x9f, 0x50, 0x9a, - 0x0a, 0x26, 0x27, 0x78, 0x8d, 0xb3, 0xa7, 0x11, 0x13, 0xf2, 0xbc, 0xcb, 0x99, 0xff, 0x75, 0xb9, - 0x9c, 0x15, 0x2c, 0x98, 0xbc, 0x8b, 0x37, 0x2e, 0xe8, 0x93, 0x79, 0x9c, 0x53, 0x1e, 0xd7, 0xce, - 0xeb, 0x32, 0x8b, 0x0f, 0xf0, 0x52, 0x1e, 0x22, 0xcb, 0xf6, 0x23, 0x21, 0x93, 0x93, 0x9f, 0x55, - 0x57, 0xd6, 0xd0, 0xd2, 0x1c, 0x6a, 0x79, 0x0e, 0xb5, 0x1e, 0x80, 0xaf, 0x9c, 0x99, 0x8b, 0xb9, - 0x68, 0x27, 0xd3, 0x74, 0x1e, 0xe3, 0x4a, 0x72, 0xa9, 0xe4, 0x08, 0x2f, 0x14, 0xde, 0x8b, 0xca, - 0xd7, 0x44, 0x84, 0xd4, 0xa8, 0x69, 0x1e, 0x0f, 0x15, 0xad, 0x77, 0x25, 0x89, 0x50, 0x32, 0xe9, - 0xf4, 0x6b, 0x54, 0x5a, 0x44, 0x66, 0xcd, 0x1e, 0x43, 0x8d, 0x0f, 0x25, 0xbc, 0xaa, 0x32, 0xbc, - 0x9b, 0xbf, 0xb4, 0x43, 0xc6, 0x63, 0xcf, 0x66, 0xe4, 0x11, 0xae, 0x1d, 0x4a, 0xce, 0xe8, 0xa9, - 0x82, 0x05, 0x69, 0x16, 0x1b, 0xfd, 0xe6, 0x9b, 0xe9, 0xfc, 0x8d, 0xd6, 0x5f, 0xf1, 0xf4, 0x0e, - 0x3b, 0x53, 0x5d, 0x74, 0x1b, 0x91, 0x27, 0xb8, 0xba, 0xcb, 0x7c, 0x49, 0xb3, 0xaa, 0xd7, 0xcf, - 0xa9, 0x12, 0x68, 0xa2, 0xf4, 0xe6, 0xbf, 0x49, 0x85, 0xfa, 0x80, 0xab, 0xf7, 0x99, 0xb4, 0xdd, - 0xcb, 0x72, 0xdd, 0x7a, 0xf1, 0xf9, 0xfb, 0xdb, 0xd2, 0x46, 0x67, 0xa5, 0xf0, 0x39, 0xda, 0x52, - 0x4f, 0x55, 0x6c, 0xa1, 0x5b, 0xc6, 0x4b, 0x84, 0xaf, 0x8e, 0x3d, 0xd9, 0x89, 0x73, 0x74, 0xf0, - 0x92, 0x32, 0xdc, 0x1f, 0x7f, 0xc3, 0x97, 0x3d, 0x76, 0x6f, 0xfb, 0xdd, 0xa8, 0x89, 0xce, 0x46, - 0x4d, 0xf4, 0x69, 0xd4, 0x44, 0x5f, 0x47, 0x4d, 0x84, 0x1b, 0x1e, 0xa4, 0xfa, 0x90, 0xc3, 0xf3, - 0x61, 0xa1, 0x54, 0x6f, 0xce, 0x74, 0xc4, 0x41, 0x12, 0xbe, 0x03, 0xf4, 0x0a, 0xa1, 0xe3, 0x19, - 0x15, 0xc4, 0x3b, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x13, 0x2b, 0xc3, 0xe7, 0x05, 0x00, - 0x00, -} - -func (this *RouteConfiguration) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteConfiguration) - if !ok { - that2, ok := that.(RouteConfiguration) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if len(this.VirtualHosts) != len(that1.VirtualHosts) { - return false - } - for i := range this.VirtualHosts { - if !this.VirtualHosts[i].Equal(&that1.VirtualHosts[i]) { - return false - } - } - if !this.Vhds.Equal(that1.Vhds) { - return false - } - if len(this.InternalOnlyHeaders) != len(that1.InternalOnlyHeaders) { - return false - } - for i := range this.InternalOnlyHeaders { - if this.InternalOnlyHeaders[i] != that1.InternalOnlyHeaders[i] { - return false - } - } - if len(this.ResponseHeadersToAdd) != len(that1.ResponseHeadersToAdd) { - return false - } - for i := range this.ResponseHeadersToAdd { - if !this.ResponseHeadersToAdd[i].Equal(that1.ResponseHeadersToAdd[i]) { - return false - } - } - if len(this.ResponseHeadersToRemove) != len(that1.ResponseHeadersToRemove) { - return false - } - for i := range this.ResponseHeadersToRemove { - if this.ResponseHeadersToRemove[i] != that1.ResponseHeadersToRemove[i] { - return false - } - } - if len(this.RequestHeadersToAdd) != len(that1.RequestHeadersToAdd) { - return false - } - for i := range this.RequestHeadersToAdd { - if !this.RequestHeadersToAdd[i].Equal(that1.RequestHeadersToAdd[i]) { - return false - } - } - if len(this.RequestHeadersToRemove) != len(that1.RequestHeadersToRemove) { - return false - } - for i := range this.RequestHeadersToRemove { - if this.RequestHeadersToRemove[i] != that1.RequestHeadersToRemove[i] { - return false - } - } - if !this.ValidateClusters.Equal(that1.ValidateClusters) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Vhds) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Vhds) - if !ok { - that2, ok := that.(Vhds) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ConfigSource.Equal(&that1.ConfigSource) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true + // 432 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x3d, 0x6f, 0xd3, 0x40, + 0x1c, 0xc6, 0xb9, 0x20, 0x12, 0x74, 0xc9, 0x00, 0x16, 0x84, 0xc8, 0x84, 0x24, 0x84, 0x57, 0x31, + 0xd8, 0xc8, 0xd9, 0x32, 0x86, 0x08, 0x31, 0x86, 0x44, 0x30, 0x22, 0x5d, 0xec, 0x8b, 0x39, 0xc9, + 0xf6, 0x1d, 0xf7, 0x62, 0xf0, 0x86, 0x98, 0x10, 0x0b, 0x03, 0x12, 0xe2, 0x03, 0xb0, 0xf5, 0x1b, + 0xf4, 0x13, 0x74, 0xad, 0xfa, 0x15, 0x3a, 0x77, 0x68, 0xf7, 0xaa, 0xf2, 0xd9, 0x6e, 0x73, 0x8d, + 0xda, 0x29, 0x5b, 0xe2, 0xdf, 0xf3, 0x7f, 0xfe, 0x2f, 0x7e, 0x0c, 0xdb, 0x38, 0x49, 0x69, 0xe6, + 0x22, 0x46, 0xdc, 0xd4, 0x73, 0x79, 0x20, 0x1c, 0xc6, 0xa9, 0xa4, 0x56, 0x4b, 0x3f, 0x77, 0x10, + 0x23, 0x4e, 0xea, 0xd9, 0x5d, 0x43, 0x15, 0x10, 0xe1, 0xd3, 0x14, 0xf3, 0xac, 0xd0, 0xda, 0xdd, + 0x90, 0xd2, 0x30, 0xc2, 0x1a, 0xa3, 0x24, 0xa1, 0x12, 0x49, 0x42, 0x93, 0xd2, 0xc9, 0xee, 0x95, + 0x54, 0xff, 0x5b, 0xaa, 0x95, 0xfb, 0x95, 0x23, 0xc6, 0x30, 0xaf, 0xf8, 0xa0, 0xf4, 0xbe, 0x28, + 0x74, 0x39, 0x16, 0x54, 0x71, 0x1f, 0x57, 0x0e, 0x2a, 0x60, 0xc8, 0x10, 0xc4, 0x24, 0xe4, 0x48, + 0x56, 0xfc, 0xd1, 0x06, 0x17, 0x12, 0x49, 0x55, 0x35, 0x78, 0x90, 0xa2, 0x88, 0x04, 0x48, 0x62, + 0xb7, 0xfa, 0x51, 0x82, 0x8e, 0xb9, 0x3b, 0x55, 0x15, 0x19, 0x42, 0x78, 0x7b, 0x1e, 0x88, 0xa9, + 0x8a, 0xe3, 0xcc, 0x3b, 0xaa, 0xc1, 0xfb, 0xf3, 0x9c, 0x4d, 0xab, 0xb5, 0x17, 0x98, 0xa7, 0xc4, + 0xc7, 0xd6, 0x07, 0xd8, 0x5a, 0x48, 0x8e, 0x51, 0xac, 0xb1, 0xb0, 0x7a, 0xce, 0xfa, 0xd1, 0x9c, + 0x73, 0xfd, 0x1c, 0x7f, 0x51, 0x58, 0x48, 0xbb, 0x7f, 0x25, 0x17, 0x8c, 0x26, 0x02, 0x0f, 0x6f, + 0xbc, 0x04, 0xaf, 0x81, 0xf5, 0x09, 0x36, 0xa7, 0x38, 0x92, 0xa8, 0x74, 0x7d, 0x72, 0xa9, 0x2a, + 0x47, 0x1b, 0xd6, 0x4f, 0xaf, 0x17, 0x19, 0xfe, 0x0a, 0x36, 0xdf, 0x62, 0xe9, 0x7f, 0xde, 0xd6, + 0xd4, 0xcf, 0x7e, 0x1c, 0x1c, 0xfe, 0xa9, 0xb5, 0x87, 0xf7, 0x8c, 0x6c, 0x8c, 0xf5, 0x3d, 0x85, + 0x66, 0x37, 0xc7, 0xe0, 0x95, 0xfd, 0xe2, 0xd7, 0xff, 0xbf, 0x27, 0x8d, 0xc7, 0xb0, 0x6f, 0xd8, + 0xe9, 0x21, 0xde, 0xd0, 0x64, 0x45, 0x42, 0xc5, 0xf5, 0xdb, 0xf3, 0x76, 0x00, 0x7c, 0xf8, 0x91, + 0x70, 0xa9, 0x50, 0xf4, 0x8e, 0x0a, 0xb9, 0x71, 0xf6, 0x00, 0xde, 0xd5, 0xfb, 0xad, 0x69, 0xb6, + 0x7f, 0x25, 0xfb, 0xb9, 0x1e, 0x77, 0x00, 0x7b, 0x46, 0x49, 0x11, 0x92, 0xb5, 0xce, 0x93, 0xf7, + 0xc7, 0xff, 0x4e, 0x7f, 0xdf, 0xea, 0x58, 0xc5, 0x87, 0xe4, 0x88, 0x62, 0xc8, 0x52, 0x98, 0x8e, + 0x76, 0xbf, 0xef, 0xed, 0xd7, 0x6b, 0x77, 0x00, 0xb4, 0x09, 0x2d, 0xba, 0x33, 0x4e, 0xbf, 0x65, + 0xc6, 0x20, 0x93, 0x3c, 0x6c, 0xb3, 0x3c, 0x78, 0x33, 0xf0, 0x13, 0x80, 0x59, 0x63, 0x59, 0xd7, + 0x31, 0x1c, 0x9d, 0x05, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x78, 0xb9, 0xf4, 0x9e, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -504,6 +200,20 @@ FetchRoutes(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error) } +// UnimplementedRouteDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedRouteDiscoveryServiceServer struct { +} + +func (*UnimplementedRouteDiscoveryServiceServer) StreamRoutes(srv RouteDiscoveryService_StreamRoutesServer) error { + return status.Errorf(codes.Unimplemented, "method StreamRoutes not implemented") +} +func (*UnimplementedRouteDiscoveryServiceServer) DeltaRoutes(srv RouteDiscoveryService_DeltaRoutesServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaRoutes not implemented") +} +func (*UnimplementedRouteDiscoveryServiceServer) FetchRoutes(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchRoutes not implemented") +} + func RegisterRouteDiscoveryServiceServer(s *grpc.Server, srv RouteDiscoveryServiceServer) { s.RegisterService(&_RouteDiscoveryService_serviceDesc, srv) } @@ -655,6 +365,14 @@ DeltaVirtualHosts(VirtualHostDiscoveryService_DeltaVirtualHostsServer) error } +// UnimplementedVirtualHostDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedVirtualHostDiscoveryServiceServer struct { +} + +func (*UnimplementedVirtualHostDiscoveryServiceServer) DeltaVirtualHosts(srv VirtualHostDiscoveryService_DeltaVirtualHostsServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaVirtualHosts not implemented") +} + func RegisterVirtualHostDiscoveryServiceServer(s *grpc.Server, srv VirtualHostDiscoveryServiceServer) { s.RegisterService(&_VirtualHostDiscoveryService_serviceDesc, srv) } @@ -699,810 +417,3 @@ }, Metadata: "envoy/api/v2/rds.proto", } - -func (m *RouteConfiguration) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteConfiguration) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRds(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.VirtualHosts) > 0 { - for _, msg := range m.VirtualHosts { - dAtA[i] = 0x12 - i++ - i = encodeVarintRds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.InternalOnlyHeaders) > 0 { - for _, s := range m.InternalOnlyHeaders { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, msg := range m.ResponseHeadersToAdd { - dAtA[i] = 0x22 - i++ - i = encodeVarintRds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.RequestHeadersToAdd) > 0 { - for _, msg := range m.RequestHeadersToAdd { - dAtA[i] = 0x32 - i++ - i = encodeVarintRds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.ValidateClusters != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRds(dAtA, i, uint64(m.ValidateClusters.Size())) - n1, err := m.ValidateClusters.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - dAtA[i] = 0x42 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.Vhds != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintRds(dAtA, i, uint64(m.Vhds.Size())) - n2, err := m.Vhds.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Vhds) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Vhds) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintRds(dAtA, i, uint64(m.ConfigSource.Size())) - n3, err := m.ConfigSource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintRds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *RouteConfiguration) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRds(uint64(l)) - } - if len(m.VirtualHosts) > 0 { - for _, e := range m.VirtualHosts { - l = e.Size() - n += 1 + l + sovRds(uint64(l)) - } - } - if len(m.InternalOnlyHeaders) > 0 { - for _, s := range m.InternalOnlyHeaders { - l = len(s) - n += 1 + l + sovRds(uint64(l)) - } - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, e := range m.ResponseHeadersToAdd { - l = e.Size() - n += 1 + l + sovRds(uint64(l)) - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - l = len(s) - n += 1 + l + sovRds(uint64(l)) - } - } - if len(m.RequestHeadersToAdd) > 0 { - for _, e := range m.RequestHeadersToAdd { - l = e.Size() - n += 1 + l + sovRds(uint64(l)) - } - } - if m.ValidateClusters != nil { - l = m.ValidateClusters.Size() - n += 1 + l + sovRds(uint64(l)) - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - l = len(s) - n += 1 + l + sovRds(uint64(l)) - } - } - if m.Vhds != nil { - l = m.Vhds.Size() - n += 1 + l + sovRds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Vhds) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ConfigSource.Size() - n += 1 + l + sovRds(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovRds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozRds(x uint64) (n int) { - return sovRds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *RouteConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RouteConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RouteConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VirtualHosts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VirtualHosts = append(m.VirtualHosts, route.VirtualHost{}) - if err := m.VirtualHosts[len(m.VirtualHosts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InternalOnlyHeaders", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.InternalOnlyHeaders = append(m.InternalOnlyHeaders, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToAdd = append(m.ResponseHeadersToAdd, &core.HeaderValueOption{}) - if err := m.ResponseHeadersToAdd[len(m.ResponseHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToRemove = append(m.ResponseHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToAdd = append(m.RequestHeadersToAdd, &core.HeaderValueOption{}) - if err := m.RequestHeadersToAdd[len(m.RequestHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValidateClusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ValidateClusters == nil { - m.ValidateClusters = &types.BoolValue{} - } - if err := m.ValidateClusters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToRemove = append(m.RequestHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Vhds", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Vhds == nil { - m.Vhds = &Vhds{} - } - if err := m.Vhds.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Vhds) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Vhds: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Vhds: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigSource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ConfigSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthRds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthRds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthRds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthRds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/rds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/rds.proto -package v2 +package envoy_api_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,210 +30,25 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on RouteConfiguration with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteConfiguration) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Name - - for idx, item := range m.GetVirtualHosts() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteConfigurationValidationError{ - field: fmt.Sprintf("VirtualHosts[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetVhds() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteConfigurationValidationError{ - field: "Vhds", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if len(m.GetResponseHeadersToAdd()) > 1000 { - return RouteConfigurationValidationError{ - field: "ResponseHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetResponseHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteConfigurationValidationError{ - field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if len(m.GetRequestHeadersToAdd()) > 1000 { - return RouteConfigurationValidationError{ - field: "RequestHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetRequestHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteConfigurationValidationError{ - field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetValidateClusters() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteConfigurationValidationError{ - field: "ValidateClusters", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// RouteConfigurationValidationError is the validation error returned by -// RouteConfiguration.Validate if the designated constraints aren't met. -type RouteConfigurationValidationError struct { - field string - reason string - cause error - key bool -} +// define the regex for a UUID once up-front +var _rds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") -// Field function returns field value. -func (e RouteConfigurationValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteConfigurationValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteConfigurationValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteConfigurationValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteConfigurationValidationError) ErrorName() string { - return "RouteConfigurationValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteConfigurationValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteConfiguration.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteConfigurationValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteConfigurationValidationError{} - -// Validate checks the field values on Vhds with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. -func (m *Vhds) Validate() error { +// Validate checks the field values on RdsDummy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *RdsDummy) Validate() error { if m == nil { return nil } - { - tmp := m.GetConfigSource() - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VhdsValidationError{ - field: "ConfigSource", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - return nil } -// VhdsValidationError is the validation error returned by Vhds.Validate if the -// designated constraints aren't met. -type VhdsValidationError struct { +// RdsDummyValidationError is the validation error returned by +// RdsDummy.Validate if the designated constraints aren't met. +type RdsDummyValidationError struct { field string reason string cause error @@ -241,22 +56,22 @@ } // Field function returns field value. -func (e VhdsValidationError) Field() string { return e.field } +func (e RdsDummyValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e VhdsValidationError) Reason() string { return e.reason } +func (e RdsDummyValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e VhdsValidationError) Cause() error { return e.cause } +func (e RdsDummyValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e VhdsValidationError) Key() bool { return e.key } +func (e RdsDummyValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e VhdsValidationError) ErrorName() string { return "VhdsValidationError" } +func (e RdsDummyValidationError) ErrorName() string { return "RdsDummyValidationError" } // Error satisfies the builtin error interface -func (e VhdsValidationError) Error() string { +func (e RdsDummyValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -268,14 +83,14 @@ } return fmt.Sprintf( - "invalid %sVhds.%s: %s%s", + "invalid %sRdsDummy.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = VhdsValidationError{} +var _ error = RdsDummyValidationError{} var _ interface { Field() string @@ -283,4 +98,4 @@ Key() bool Cause() error ErrorName() string -} = VhdsValidationError{} +} = RdsDummyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3725 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/route/route_components.proto + +package envoy_api_v2_route + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + matcher "github.com/envoyproxy/go-control-plane/envoy/type/matcher" + v2 "github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type VirtualHost_TlsRequirementType int32 + +const ( + VirtualHost_NONE VirtualHost_TlsRequirementType = 0 + VirtualHost_EXTERNAL_ONLY VirtualHost_TlsRequirementType = 1 + VirtualHost_ALL VirtualHost_TlsRequirementType = 2 +) + +var VirtualHost_TlsRequirementType_name = map[int32]string{ + 0: "NONE", + 1: "EXTERNAL_ONLY", + 2: "ALL", +} + +var VirtualHost_TlsRequirementType_value = map[string]int32{ + "NONE": 0, + "EXTERNAL_ONLY": 1, + "ALL": 2, +} + +func (x VirtualHost_TlsRequirementType) String() string { + return proto.EnumName(VirtualHost_TlsRequirementType_name, int32(x)) +} + +func (VirtualHost_TlsRequirementType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{0, 0} +} + +type RouteAction_ClusterNotFoundResponseCode int32 + +const ( + RouteAction_SERVICE_UNAVAILABLE RouteAction_ClusterNotFoundResponseCode = 0 + RouteAction_NOT_FOUND RouteAction_ClusterNotFoundResponseCode = 1 +) + +var RouteAction_ClusterNotFoundResponseCode_name = map[int32]string{ + 0: "SERVICE_UNAVAILABLE", + 1: "NOT_FOUND", +} + +var RouteAction_ClusterNotFoundResponseCode_value = map[string]int32{ + "SERVICE_UNAVAILABLE": 0, + "NOT_FOUND": 1, +} + +func (x RouteAction_ClusterNotFoundResponseCode) String() string { + return proto.EnumName(RouteAction_ClusterNotFoundResponseCode_name, int32(x)) +} + +func (RouteAction_ClusterNotFoundResponseCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 0} +} + +type RouteAction_InternalRedirectAction int32 + +const ( + RouteAction_PASS_THROUGH_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 0 + RouteAction_HANDLE_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 1 +) + +var RouteAction_InternalRedirectAction_name = map[int32]string{ + 0: "PASS_THROUGH_INTERNAL_REDIRECT", + 1: "HANDLE_INTERNAL_REDIRECT", +} + +var RouteAction_InternalRedirectAction_value = map[string]int32{ + "PASS_THROUGH_INTERNAL_REDIRECT": 0, + "HANDLE_INTERNAL_REDIRECT": 1, +} + +func (x RouteAction_InternalRedirectAction) String() string { + return proto.EnumName(RouteAction_InternalRedirectAction_name, int32(x)) +} + +func (RouteAction_InternalRedirectAction) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1} +} + +type RedirectAction_RedirectResponseCode int32 + +const ( + RedirectAction_MOVED_PERMANENTLY RedirectAction_RedirectResponseCode = 0 + RedirectAction_FOUND RedirectAction_RedirectResponseCode = 1 + RedirectAction_SEE_OTHER RedirectAction_RedirectResponseCode = 2 + RedirectAction_TEMPORARY_REDIRECT RedirectAction_RedirectResponseCode = 3 + RedirectAction_PERMANENT_REDIRECT RedirectAction_RedirectResponseCode = 4 +) + +var RedirectAction_RedirectResponseCode_name = map[int32]string{ + 0: "MOVED_PERMANENTLY", + 1: "FOUND", + 2: "SEE_OTHER", + 3: "TEMPORARY_REDIRECT", + 4: "PERMANENT_REDIRECT", +} + +var RedirectAction_RedirectResponseCode_value = map[string]int32{ + "MOVED_PERMANENTLY": 0, + "FOUND": 1, + "SEE_OTHER": 2, + "TEMPORARY_REDIRECT": 3, + "PERMANENT_REDIRECT": 4, +} + +func (x RedirectAction_RedirectResponseCode) String() string { + return proto.EnumName(RedirectAction_RedirectResponseCode_name, int32(x)) +} + +func (RedirectAction_RedirectResponseCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{9, 0} +} + +type VirtualHost struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Domains []string `protobuf:"bytes,2,rep,name=domains,proto3" json:"domains,omitempty"` + Routes []*Route `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"` + RequireTls VirtualHost_TlsRequirementType `protobuf:"varint,4,opt,name=require_tls,json=requireTls,proto3,enum=envoy.api.v2.route.VirtualHost_TlsRequirementType" json:"require_tls,omitempty"` + VirtualClusters []*VirtualCluster `protobuf:"bytes,5,rep,name=virtual_clusters,json=virtualClusters,proto3" json:"virtual_clusters,omitempty"` + RateLimits []*RateLimit `protobuf:"bytes,6,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"` + RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,7,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` + RequestHeadersToRemove []string `protobuf:"bytes,13,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` + ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` + ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` + Cors *CorsPolicy `protobuf:"bytes,8,opt,name=cors,proto3" json:"cors,omitempty"` + PerFilterConfig map[string]*_struct.Struct `protobuf:"bytes,12,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. + TypedPerFilterConfig map[string]*any.Any `protobuf:"bytes,15,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + IncludeRequestAttemptCount bool `protobuf:"varint,14,opt,name=include_request_attempt_count,json=includeRequestAttemptCount,proto3" json:"include_request_attempt_count,omitempty"` + IncludeAttemptCountInResponse bool `protobuf:"varint,19,opt,name=include_attempt_count_in_response,json=includeAttemptCountInResponse,proto3" json:"include_attempt_count_in_response,omitempty"` + RetryPolicy *RetryPolicy `protobuf:"bytes,16,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` + RetryPolicyTypedConfig *any.Any `protobuf:"bytes,20,opt,name=retry_policy_typed_config,json=retryPolicyTypedConfig,proto3" json:"retry_policy_typed_config,omitempty"` + HedgePolicy *HedgePolicy `protobuf:"bytes,17,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"` + PerRequestBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,18,opt,name=per_request_buffer_limit_bytes,json=perRequestBufferLimitBytes,proto3" json:"per_request_buffer_limit_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VirtualHost) Reset() { *m = VirtualHost{} } +func (m *VirtualHost) String() string { return proto.CompactTextString(m) } +func (*VirtualHost) ProtoMessage() {} +func (*VirtualHost) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{0} +} + +func (m *VirtualHost) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VirtualHost.Unmarshal(m, b) +} +func (m *VirtualHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VirtualHost.Marshal(b, m, deterministic) +} +func (m *VirtualHost) XXX_Merge(src proto.Message) { + xxx_messageInfo_VirtualHost.Merge(m, src) +} +func (m *VirtualHost) XXX_Size() int { + return xxx_messageInfo_VirtualHost.Size(m) +} +func (m *VirtualHost) XXX_DiscardUnknown() { + xxx_messageInfo_VirtualHost.DiscardUnknown(m) +} + +var xxx_messageInfo_VirtualHost proto.InternalMessageInfo + +func (m *VirtualHost) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VirtualHost) GetDomains() []string { + if m != nil { + return m.Domains + } + return nil +} + +func (m *VirtualHost) GetRoutes() []*Route { + if m != nil { + return m.Routes + } + return nil +} + +func (m *VirtualHost) GetRequireTls() VirtualHost_TlsRequirementType { + if m != nil { + return m.RequireTls + } + return VirtualHost_NONE +} + +func (m *VirtualHost) GetVirtualClusters() []*VirtualCluster { + if m != nil { + return m.VirtualClusters + } + return nil +} + +func (m *VirtualHost) GetRateLimits() []*RateLimit { + if m != nil { + return m.RateLimits + } + return nil +} + +func (m *VirtualHost) GetRequestHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.RequestHeadersToAdd + } + return nil +} + +func (m *VirtualHost) GetRequestHeadersToRemove() []string { + if m != nil { + return m.RequestHeadersToRemove + } + return nil +} + +func (m *VirtualHost) GetResponseHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.ResponseHeadersToAdd + } + return nil +} + +func (m *VirtualHost) GetResponseHeadersToRemove() []string { + if m != nil { + return m.ResponseHeadersToRemove + } + return nil +} + +func (m *VirtualHost) GetCors() *CorsPolicy { + if m != nil { + return m.Cors + } + return nil +} + +// Deprecated: Do not use. +func (m *VirtualHost) GetPerFilterConfig() map[string]*_struct.Struct { + if m != nil { + return m.PerFilterConfig + } + return nil +} + +func (m *VirtualHost) GetTypedPerFilterConfig() map[string]*any.Any { + if m != nil { + return m.TypedPerFilterConfig + } + return nil +} + +func (m *VirtualHost) GetIncludeRequestAttemptCount() bool { + if m != nil { + return m.IncludeRequestAttemptCount + } + return false +} + +func (m *VirtualHost) GetIncludeAttemptCountInResponse() bool { + if m != nil { + return m.IncludeAttemptCountInResponse + } + return false +} + +func (m *VirtualHost) GetRetryPolicy() *RetryPolicy { + if m != nil { + return m.RetryPolicy + } + return nil +} + +func (m *VirtualHost) GetRetryPolicyTypedConfig() *any.Any { + if m != nil { + return m.RetryPolicyTypedConfig + } + return nil +} + +func (m *VirtualHost) GetHedgePolicy() *HedgePolicy { + if m != nil { + return m.HedgePolicy + } + return nil +} + +func (m *VirtualHost) GetPerRequestBufferLimitBytes() *wrappers.UInt32Value { + if m != nil { + return m.PerRequestBufferLimitBytes + } + return nil +} + +type FilterAction struct { + Action *any.Any `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FilterAction) Reset() { *m = FilterAction{} } +func (m *FilterAction) String() string { return proto.CompactTextString(m) } +func (*FilterAction) ProtoMessage() {} +func (*FilterAction) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{1} +} + +func (m *FilterAction) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FilterAction.Unmarshal(m, b) +} +func (m *FilterAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FilterAction.Marshal(b, m, deterministic) +} +func (m *FilterAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_FilterAction.Merge(m, src) +} +func (m *FilterAction) XXX_Size() int { + return xxx_messageInfo_FilterAction.Size(m) +} +func (m *FilterAction) XXX_DiscardUnknown() { + xxx_messageInfo_FilterAction.DiscardUnknown(m) +} + +var xxx_messageInfo_FilterAction proto.InternalMessageInfo + +func (m *FilterAction) GetAction() *any.Any { + if m != nil { + return m.Action + } + return nil +} + +type Route struct { + Name string `protobuf:"bytes,14,opt,name=name,proto3" json:"name,omitempty"` + Match *RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match,omitempty"` + // Types that are valid to be assigned to Action: + // *Route_Route + // *Route_Redirect + // *Route_DirectResponse + // *Route_FilterAction + Action isRoute_Action `protobuf_oneof:"action"` + Metadata *core.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + Decorator *Decorator `protobuf:"bytes,5,opt,name=decorator,proto3" json:"decorator,omitempty"` + PerFilterConfig map[string]*_struct.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. + TypedPerFilterConfig map[string]*any.Any `protobuf:"bytes,13,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,9,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` + RequestHeadersToRemove []string `protobuf:"bytes,12,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` + ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` + ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` + Tracing *Tracing `protobuf:"bytes,15,opt,name=tracing,proto3" json:"tracing,omitempty"` + PerRequestBufferLimitBytes *wrappers.UInt32Value `protobuf:"bytes,16,opt,name=per_request_buffer_limit_bytes,json=perRequestBufferLimitBytes,proto3" json:"per_request_buffer_limit_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Route) Reset() { *m = Route{} } +func (m *Route) String() string { return proto.CompactTextString(m) } +func (*Route) ProtoMessage() {} +func (*Route) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{2} +} + +func (m *Route) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Route.Unmarshal(m, b) +} +func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Route.Marshal(b, m, deterministic) +} +func (m *Route) XXX_Merge(src proto.Message) { + xxx_messageInfo_Route.Merge(m, src) +} +func (m *Route) XXX_Size() int { + return xxx_messageInfo_Route.Size(m) +} +func (m *Route) XXX_DiscardUnknown() { + xxx_messageInfo_Route.DiscardUnknown(m) +} + +var xxx_messageInfo_Route proto.InternalMessageInfo + +func (m *Route) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Route) GetMatch() *RouteMatch { + if m != nil { + return m.Match + } + return nil +} + +type isRoute_Action interface { + isRoute_Action() +} + +type Route_Route struct { + Route *RouteAction `protobuf:"bytes,2,opt,name=route,proto3,oneof"` +} + +type Route_Redirect struct { + Redirect *RedirectAction `protobuf:"bytes,3,opt,name=redirect,proto3,oneof"` +} + +type Route_DirectResponse struct { + DirectResponse *DirectResponseAction `protobuf:"bytes,7,opt,name=direct_response,json=directResponse,proto3,oneof"` +} + +type Route_FilterAction struct { + FilterAction *FilterAction `protobuf:"bytes,17,opt,name=filter_action,json=filterAction,proto3,oneof"` +} + +func (*Route_Route) isRoute_Action() {} + +func (*Route_Redirect) isRoute_Action() {} + +func (*Route_DirectResponse) isRoute_Action() {} + +func (*Route_FilterAction) isRoute_Action() {} + +func (m *Route) GetAction() isRoute_Action { + if m != nil { + return m.Action + } + return nil +} + +func (m *Route) GetRoute() *RouteAction { + if x, ok := m.GetAction().(*Route_Route); ok { + return x.Route + } + return nil +} + +func (m *Route) GetRedirect() *RedirectAction { + if x, ok := m.GetAction().(*Route_Redirect); ok { + return x.Redirect + } + return nil +} + +func (m *Route) GetDirectResponse() *DirectResponseAction { + if x, ok := m.GetAction().(*Route_DirectResponse); ok { + return x.DirectResponse + } + return nil +} + +func (m *Route) GetFilterAction() *FilterAction { + if x, ok := m.GetAction().(*Route_FilterAction); ok { + return x.FilterAction + } + return nil +} + +func (m *Route) GetMetadata() *core.Metadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Route) GetDecorator() *Decorator { + if m != nil { + return m.Decorator + } + return nil +} + +// Deprecated: Do not use. +func (m *Route) GetPerFilterConfig() map[string]*_struct.Struct { + if m != nil { + return m.PerFilterConfig + } + return nil +} + +func (m *Route) GetTypedPerFilterConfig() map[string]*any.Any { + if m != nil { + return m.TypedPerFilterConfig + } + return nil +} + +func (m *Route) GetRequestHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.RequestHeadersToAdd + } + return nil +} + +func (m *Route) GetRequestHeadersToRemove() []string { + if m != nil { + return m.RequestHeadersToRemove + } + return nil +} + +func (m *Route) GetResponseHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.ResponseHeadersToAdd + } + return nil +} + +func (m *Route) GetResponseHeadersToRemove() []string { + if m != nil { + return m.ResponseHeadersToRemove + } + return nil +} + +func (m *Route) GetTracing() *Tracing { + if m != nil { + return m.Tracing + } + return nil +} + +func (m *Route) GetPerRequestBufferLimitBytes() *wrappers.UInt32Value { + if m != nil { + return m.PerRequestBufferLimitBytes + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Route) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Route_Route)(nil), + (*Route_Redirect)(nil), + (*Route_DirectResponse)(nil), + (*Route_FilterAction)(nil), + } +} + +type WeightedCluster struct { + Clusters []*WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"` + TotalWeight *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` + RuntimeKeyPrefix string `protobuf:"bytes,2,opt,name=runtime_key_prefix,json=runtimeKeyPrefix,proto3" json:"runtime_key_prefix,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WeightedCluster) Reset() { *m = WeightedCluster{} } +func (m *WeightedCluster) String() string { return proto.CompactTextString(m) } +func (*WeightedCluster) ProtoMessage() {} +func (*WeightedCluster) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{3} +} + +func (m *WeightedCluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WeightedCluster.Unmarshal(m, b) +} +func (m *WeightedCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WeightedCluster.Marshal(b, m, deterministic) +} +func (m *WeightedCluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_WeightedCluster.Merge(m, src) +} +func (m *WeightedCluster) XXX_Size() int { + return xxx_messageInfo_WeightedCluster.Size(m) +} +func (m *WeightedCluster) XXX_DiscardUnknown() { + xxx_messageInfo_WeightedCluster.DiscardUnknown(m) +} + +var xxx_messageInfo_WeightedCluster proto.InternalMessageInfo + +func (m *WeightedCluster) GetClusters() []*WeightedCluster_ClusterWeight { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *WeightedCluster) GetTotalWeight() *wrappers.UInt32Value { + if m != nil { + return m.TotalWeight + } + return nil +} + +func (m *WeightedCluster) GetRuntimeKeyPrefix() string { + if m != nil { + return m.RuntimeKeyPrefix + } + return "" +} + +type WeightedCluster_ClusterWeight struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Weight *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=weight,proto3" json:"weight,omitempty"` + MetadataMatch *core.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` + RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,4,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` + RequestHeadersToRemove []string `protobuf:"bytes,9,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` + ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,5,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` + ResponseHeadersToRemove []string `protobuf:"bytes,6,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` + PerFilterConfig map[string]*_struct.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Deprecated: Do not use. + TypedPerFilterConfig map[string]*any.Any `protobuf:"bytes,10,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WeightedCluster_ClusterWeight) Reset() { *m = WeightedCluster_ClusterWeight{} } +func (m *WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) } +func (*WeightedCluster_ClusterWeight) ProtoMessage() {} +func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{3, 0} +} + +func (m *WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WeightedCluster_ClusterWeight.Unmarshal(m, b) +} +func (m *WeightedCluster_ClusterWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WeightedCluster_ClusterWeight.Marshal(b, m, deterministic) +} +func (m *WeightedCluster_ClusterWeight) XXX_Merge(src proto.Message) { + xxx_messageInfo_WeightedCluster_ClusterWeight.Merge(m, src) +} +func (m *WeightedCluster_ClusterWeight) XXX_Size() int { + return xxx_messageInfo_WeightedCluster_ClusterWeight.Size(m) +} +func (m *WeightedCluster_ClusterWeight) XXX_DiscardUnknown() { + xxx_messageInfo_WeightedCluster_ClusterWeight.DiscardUnknown(m) +} + +var xxx_messageInfo_WeightedCluster_ClusterWeight proto.InternalMessageInfo + +func (m *WeightedCluster_ClusterWeight) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *WeightedCluster_ClusterWeight) GetWeight() *wrappers.UInt32Value { + if m != nil { + return m.Weight + } + return nil +} + +func (m *WeightedCluster_ClusterWeight) GetMetadataMatch() *core.Metadata { + if m != nil { + return m.MetadataMatch + } + return nil +} + +func (m *WeightedCluster_ClusterWeight) GetRequestHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.RequestHeadersToAdd + } + return nil +} + +func (m *WeightedCluster_ClusterWeight) GetRequestHeadersToRemove() []string { + if m != nil { + return m.RequestHeadersToRemove + } + return nil +} + +func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.ResponseHeadersToAdd + } + return nil +} + +func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToRemove() []string { + if m != nil { + return m.ResponseHeadersToRemove + } + return nil +} + +// Deprecated: Do not use. +func (m *WeightedCluster_ClusterWeight) GetPerFilterConfig() map[string]*_struct.Struct { + if m != nil { + return m.PerFilterConfig + } + return nil +} + +func (m *WeightedCluster_ClusterWeight) GetTypedPerFilterConfig() map[string]*any.Any { + if m != nil { + return m.TypedPerFilterConfig + } + return nil +} + +type RouteMatch struct { + // Types that are valid to be assigned to PathSpecifier: + // *RouteMatch_Prefix + // *RouteMatch_Path + // *RouteMatch_Regex + // *RouteMatch_SafeRegex + PathSpecifier isRouteMatch_PathSpecifier `protobuf_oneof:"path_specifier"` + CaseSensitive *wrappers.BoolValue `protobuf:"bytes,4,opt,name=case_sensitive,json=caseSensitive,proto3" json:"case_sensitive,omitempty"` + RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"` + Headers []*HeaderMatcher `protobuf:"bytes,6,rep,name=headers,proto3" json:"headers,omitempty"` + QueryParameters []*QueryParameterMatcher `protobuf:"bytes,7,rep,name=query_parameters,json=queryParameters,proto3" json:"query_parameters,omitempty"` + Grpc *RouteMatch_GrpcRouteMatchOptions `protobuf:"bytes,8,opt,name=grpc,proto3" json:"grpc,omitempty"` + TlsContext *RouteMatch_TlsContextMatchOptions `protobuf:"bytes,11,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteMatch) Reset() { *m = RouteMatch{} } +func (m *RouteMatch) String() string { return proto.CompactTextString(m) } +func (*RouteMatch) ProtoMessage() {} +func (*RouteMatch) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{4} +} + +func (m *RouteMatch) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteMatch.Unmarshal(m, b) +} +func (m *RouteMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteMatch.Marshal(b, m, deterministic) +} +func (m *RouteMatch) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteMatch.Merge(m, src) +} +func (m *RouteMatch) XXX_Size() int { + return xxx_messageInfo_RouteMatch.Size(m) +} +func (m *RouteMatch) XXX_DiscardUnknown() { + xxx_messageInfo_RouteMatch.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteMatch proto.InternalMessageInfo + +type isRouteMatch_PathSpecifier interface { + isRouteMatch_PathSpecifier() +} + +type RouteMatch_Prefix struct { + Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3,oneof"` +} + +type RouteMatch_Path struct { + Path string `protobuf:"bytes,2,opt,name=path,proto3,oneof"` +} + +type RouteMatch_Regex struct { + Regex string `protobuf:"bytes,3,opt,name=regex,proto3,oneof"` +} + +type RouteMatch_SafeRegex struct { + SafeRegex *matcher.RegexMatcher `protobuf:"bytes,10,opt,name=safe_regex,json=safeRegex,proto3,oneof"` +} + +func (*RouteMatch_Prefix) isRouteMatch_PathSpecifier() {} + +func (*RouteMatch_Path) isRouteMatch_PathSpecifier() {} + +func (*RouteMatch_Regex) isRouteMatch_PathSpecifier() {} + +func (*RouteMatch_SafeRegex) isRouteMatch_PathSpecifier() {} + +func (m *RouteMatch) GetPathSpecifier() isRouteMatch_PathSpecifier { + if m != nil { + return m.PathSpecifier + } + return nil +} + +func (m *RouteMatch) GetPrefix() string { + if x, ok := m.GetPathSpecifier().(*RouteMatch_Prefix); ok { + return x.Prefix + } + return "" +} + +func (m *RouteMatch) GetPath() string { + if x, ok := m.GetPathSpecifier().(*RouteMatch_Path); ok { + return x.Path + } + return "" +} + +// Deprecated: Do not use. +func (m *RouteMatch) GetRegex() string { + if x, ok := m.GetPathSpecifier().(*RouteMatch_Regex); ok { + return x.Regex + } + return "" +} + +func (m *RouteMatch) GetSafeRegex() *matcher.RegexMatcher { + if x, ok := m.GetPathSpecifier().(*RouteMatch_SafeRegex); ok { + return x.SafeRegex + } + return nil +} + +func (m *RouteMatch) GetCaseSensitive() *wrappers.BoolValue { + if m != nil { + return m.CaseSensitive + } + return nil +} + +func (m *RouteMatch) GetRuntimeFraction() *core.RuntimeFractionalPercent { + if m != nil { + return m.RuntimeFraction + } + return nil +} + +func (m *RouteMatch) GetHeaders() []*HeaderMatcher { + if m != nil { + return m.Headers + } + return nil +} + +func (m *RouteMatch) GetQueryParameters() []*QueryParameterMatcher { + if m != nil { + return m.QueryParameters + } + return nil +} + +func (m *RouteMatch) GetGrpc() *RouteMatch_GrpcRouteMatchOptions { + if m != nil { + return m.Grpc + } + return nil +} + +func (m *RouteMatch) GetTlsContext() *RouteMatch_TlsContextMatchOptions { + if m != nil { + return m.TlsContext + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RouteMatch) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RouteMatch_Prefix)(nil), + (*RouteMatch_Path)(nil), + (*RouteMatch_Regex)(nil), + (*RouteMatch_SafeRegex)(nil), + } +} + +type RouteMatch_GrpcRouteMatchOptions struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteMatch_GrpcRouteMatchOptions) Reset() { *m = RouteMatch_GrpcRouteMatchOptions{} } +func (m *RouteMatch_GrpcRouteMatchOptions) String() string { return proto.CompactTextString(m) } +func (*RouteMatch_GrpcRouteMatchOptions) ProtoMessage() {} +func (*RouteMatch_GrpcRouteMatchOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{4, 0} +} + +func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Unmarshal(m, b) +} +func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Marshal(b, m, deterministic) +} +func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Merge(m, src) +} +func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Size() int { + return xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Size(m) +} +func (m *RouteMatch_GrpcRouteMatchOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions proto.InternalMessageInfo + +type RouteMatch_TlsContextMatchOptions struct { + Presented *wrappers.BoolValue `protobuf:"bytes,1,opt,name=presented,proto3" json:"presented,omitempty"` + Validated *wrappers.BoolValue `protobuf:"bytes,2,opt,name=validated,proto3" json:"validated,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteMatch_TlsContextMatchOptions) Reset() { *m = RouteMatch_TlsContextMatchOptions{} } +func (m *RouteMatch_TlsContextMatchOptions) String() string { return proto.CompactTextString(m) } +func (*RouteMatch_TlsContextMatchOptions) ProtoMessage() {} +func (*RouteMatch_TlsContextMatchOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{4, 1} +} + +func (m *RouteMatch_TlsContextMatchOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Unmarshal(m, b) +} +func (m *RouteMatch_TlsContextMatchOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Marshal(b, m, deterministic) +} +func (m *RouteMatch_TlsContextMatchOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Merge(m, src) +} +func (m *RouteMatch_TlsContextMatchOptions) XXX_Size() int { + return xxx_messageInfo_RouteMatch_TlsContextMatchOptions.Size(m) +} +func (m *RouteMatch_TlsContextMatchOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RouteMatch_TlsContextMatchOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteMatch_TlsContextMatchOptions proto.InternalMessageInfo + +func (m *RouteMatch_TlsContextMatchOptions) GetPresented() *wrappers.BoolValue { + if m != nil { + return m.Presented + } + return nil +} + +func (m *RouteMatch_TlsContextMatchOptions) GetValidated() *wrappers.BoolValue { + if m != nil { + return m.Validated + } + return nil +} + +type CorsPolicy struct { + AllowOrigin []string `protobuf:"bytes,1,rep,name=allow_origin,json=allowOrigin,proto3" json:"allow_origin,omitempty"` // Deprecated: Do not use. + AllowOriginRegex []string `protobuf:"bytes,8,rep,name=allow_origin_regex,json=allowOriginRegex,proto3" json:"allow_origin_regex,omitempty"` // Deprecated: Do not use. + AllowOriginStringMatch []*matcher.StringMatcher `protobuf:"bytes,11,rep,name=allow_origin_string_match,json=allowOriginStringMatch,proto3" json:"allow_origin_string_match,omitempty"` + AllowMethods string `protobuf:"bytes,2,opt,name=allow_methods,json=allowMethods,proto3" json:"allow_methods,omitempty"` + AllowHeaders string `protobuf:"bytes,3,opt,name=allow_headers,json=allowHeaders,proto3" json:"allow_headers,omitempty"` + ExposeHeaders string `protobuf:"bytes,4,opt,name=expose_headers,json=exposeHeaders,proto3" json:"expose_headers,omitempty"` + MaxAge string `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"` + AllowCredentials *wrappers.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"` + // Types that are valid to be assigned to EnabledSpecifier: + // *CorsPolicy_Enabled + // *CorsPolicy_FilterEnabled + EnabledSpecifier isCorsPolicy_EnabledSpecifier `protobuf_oneof:"enabled_specifier"` + ShadowEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,10,opt,name=shadow_enabled,json=shadowEnabled,proto3" json:"shadow_enabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CorsPolicy) Reset() { *m = CorsPolicy{} } +func (m *CorsPolicy) String() string { return proto.CompactTextString(m) } +func (*CorsPolicy) ProtoMessage() {} +func (*CorsPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{5} +} + +func (m *CorsPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CorsPolicy.Unmarshal(m, b) +} +func (m *CorsPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CorsPolicy.Marshal(b, m, deterministic) +} +func (m *CorsPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_CorsPolicy.Merge(m, src) +} +func (m *CorsPolicy) XXX_Size() int { + return xxx_messageInfo_CorsPolicy.Size(m) +} +func (m *CorsPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_CorsPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_CorsPolicy proto.InternalMessageInfo + +// Deprecated: Do not use. +func (m *CorsPolicy) GetAllowOrigin() []string { + if m != nil { + return m.AllowOrigin + } + return nil +} + +// Deprecated: Do not use. +func (m *CorsPolicy) GetAllowOriginRegex() []string { + if m != nil { + return m.AllowOriginRegex + } + return nil +} + +func (m *CorsPolicy) GetAllowOriginStringMatch() []*matcher.StringMatcher { + if m != nil { + return m.AllowOriginStringMatch + } + return nil +} + +func (m *CorsPolicy) GetAllowMethods() string { + if m != nil { + return m.AllowMethods + } + return "" +} + +func (m *CorsPolicy) GetAllowHeaders() string { + if m != nil { + return m.AllowHeaders + } + return "" +} + +func (m *CorsPolicy) GetExposeHeaders() string { + if m != nil { + return m.ExposeHeaders + } + return "" +} + +func (m *CorsPolicy) GetMaxAge() string { + if m != nil { + return m.MaxAge + } + return "" +} + +func (m *CorsPolicy) GetAllowCredentials() *wrappers.BoolValue { + if m != nil { + return m.AllowCredentials + } + return nil +} + +type isCorsPolicy_EnabledSpecifier interface { + isCorsPolicy_EnabledSpecifier() +} + +type CorsPolicy_Enabled struct { + Enabled *wrappers.BoolValue `protobuf:"bytes,7,opt,name=enabled,proto3,oneof"` +} + +type CorsPolicy_FilterEnabled struct { + FilterEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=filter_enabled,json=filterEnabled,proto3,oneof"` +} + +func (*CorsPolicy_Enabled) isCorsPolicy_EnabledSpecifier() {} + +func (*CorsPolicy_FilterEnabled) isCorsPolicy_EnabledSpecifier() {} + +func (m *CorsPolicy) GetEnabledSpecifier() isCorsPolicy_EnabledSpecifier { + if m != nil { + return m.EnabledSpecifier + } + return nil +} + +// Deprecated: Do not use. +func (m *CorsPolicy) GetEnabled() *wrappers.BoolValue { + if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_Enabled); ok { + return x.Enabled + } + return nil +} + +func (m *CorsPolicy) GetFilterEnabled() *core.RuntimeFractionalPercent { + if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_FilterEnabled); ok { + return x.FilterEnabled + } + return nil +} + +func (m *CorsPolicy) GetShadowEnabled() *core.RuntimeFractionalPercent { + if m != nil { + return m.ShadowEnabled + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*CorsPolicy) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*CorsPolicy_Enabled)(nil), + (*CorsPolicy_FilterEnabled)(nil), + } +} + +type RouteAction struct { + // Types that are valid to be assigned to ClusterSpecifier: + // *RouteAction_Cluster + // *RouteAction_ClusterHeader + // *RouteAction_WeightedClusters + ClusterSpecifier isRouteAction_ClusterSpecifier `protobuf_oneof:"cluster_specifier"` + ClusterNotFoundResponseCode RouteAction_ClusterNotFoundResponseCode `protobuf:"varint,20,opt,name=cluster_not_found_response_code,json=clusterNotFoundResponseCode,proto3,enum=envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode" json:"cluster_not_found_response_code,omitempty"` + MetadataMatch *core.Metadata `protobuf:"bytes,4,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` + PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3" json:"prefix_rewrite,omitempty"` + RegexRewrite *matcher.RegexMatchAndSubstitute `protobuf:"bytes,32,opt,name=regex_rewrite,json=regexRewrite,proto3" json:"regex_rewrite,omitempty"` + // Types that are valid to be assigned to HostRewriteSpecifier: + // *RouteAction_HostRewrite + // *RouteAction_AutoHostRewrite + // *RouteAction_AutoHostRewriteHeader + HostRewriteSpecifier isRouteAction_HostRewriteSpecifier `protobuf_oneof:"host_rewrite_specifier"` + Timeout *duration.Duration `protobuf:"bytes,8,opt,name=timeout,proto3" json:"timeout,omitempty"` + IdleTimeout *duration.Duration `protobuf:"bytes,24,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` + RetryPolicy *RetryPolicy `protobuf:"bytes,9,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` + RetryPolicyTypedConfig *any.Any `protobuf:"bytes,33,opt,name=retry_policy_typed_config,json=retryPolicyTypedConfig,proto3" json:"retry_policy_typed_config,omitempty"` + RequestMirrorPolicy *RouteAction_RequestMirrorPolicy `protobuf:"bytes,10,opt,name=request_mirror_policy,json=requestMirrorPolicy,proto3" json:"request_mirror_policy,omitempty"` // Deprecated: Do not use. + RequestMirrorPolicies []*RouteAction_RequestMirrorPolicy `protobuf:"bytes,30,rep,name=request_mirror_policies,json=requestMirrorPolicies,proto3" json:"request_mirror_policies,omitempty"` + Priority core.RoutingPriority `protobuf:"varint,11,opt,name=priority,proto3,enum=envoy.api.v2.core.RoutingPriority" json:"priority,omitempty"` + RateLimits []*RateLimit `protobuf:"bytes,13,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"` + IncludeVhRateLimits *wrappers.BoolValue `protobuf:"bytes,14,opt,name=include_vh_rate_limits,json=includeVhRateLimits,proto3" json:"include_vh_rate_limits,omitempty"` + HashPolicy []*RouteAction_HashPolicy `protobuf:"bytes,15,rep,name=hash_policy,json=hashPolicy,proto3" json:"hash_policy,omitempty"` + Cors *CorsPolicy `protobuf:"bytes,17,opt,name=cors,proto3" json:"cors,omitempty"` + MaxGrpcTimeout *duration.Duration `protobuf:"bytes,23,opt,name=max_grpc_timeout,json=maxGrpcTimeout,proto3" json:"max_grpc_timeout,omitempty"` + GrpcTimeoutOffset *duration.Duration `protobuf:"bytes,28,opt,name=grpc_timeout_offset,json=grpcTimeoutOffset,proto3" json:"grpc_timeout_offset,omitempty"` + UpgradeConfigs []*RouteAction_UpgradeConfig `protobuf:"bytes,25,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"` + InternalRedirectAction RouteAction_InternalRedirectAction `protobuf:"varint,26,opt,name=internal_redirect_action,json=internalRedirectAction,proto3,enum=envoy.api.v2.route.RouteAction_InternalRedirectAction" json:"internal_redirect_action,omitempty"` + MaxInternalRedirects *wrappers.UInt32Value `protobuf:"bytes,31,opt,name=max_internal_redirects,json=maxInternalRedirects,proto3" json:"max_internal_redirects,omitempty"` + HedgePolicy *HedgePolicy `protobuf:"bytes,27,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction) Reset() { *m = RouteAction{} } +func (m *RouteAction) String() string { return proto.CompactTextString(m) } +func (*RouteAction) ProtoMessage() {} +func (*RouteAction) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6} +} + +func (m *RouteAction) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction.Unmarshal(m, b) +} +func (m *RouteAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction.Marshal(b, m, deterministic) +} +func (m *RouteAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction.Merge(m, src) +} +func (m *RouteAction) XXX_Size() int { + return xxx_messageInfo_RouteAction.Size(m) +} +func (m *RouteAction) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction proto.InternalMessageInfo + +type isRouteAction_ClusterSpecifier interface { + isRouteAction_ClusterSpecifier() +} + +type RouteAction_Cluster struct { + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3,oneof"` +} + +type RouteAction_ClusterHeader struct { + ClusterHeader string `protobuf:"bytes,2,opt,name=cluster_header,json=clusterHeader,proto3,oneof"` +} + +type RouteAction_WeightedClusters struct { + WeightedClusters *WeightedCluster `protobuf:"bytes,3,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"` +} + +func (*RouteAction_Cluster) isRouteAction_ClusterSpecifier() {} + +func (*RouteAction_ClusterHeader) isRouteAction_ClusterSpecifier() {} + +func (*RouteAction_WeightedClusters) isRouteAction_ClusterSpecifier() {} + +func (m *RouteAction) GetClusterSpecifier() isRouteAction_ClusterSpecifier { + if m != nil { + return m.ClusterSpecifier + } + return nil +} + +func (m *RouteAction) GetCluster() string { + if x, ok := m.GetClusterSpecifier().(*RouteAction_Cluster); ok { + return x.Cluster + } + return "" +} + +func (m *RouteAction) GetClusterHeader() string { + if x, ok := m.GetClusterSpecifier().(*RouteAction_ClusterHeader); ok { + return x.ClusterHeader + } + return "" +} + +func (m *RouteAction) GetWeightedClusters() *WeightedCluster { + if x, ok := m.GetClusterSpecifier().(*RouteAction_WeightedClusters); ok { + return x.WeightedClusters + } + return nil +} + +func (m *RouteAction) GetClusterNotFoundResponseCode() RouteAction_ClusterNotFoundResponseCode { + if m != nil { + return m.ClusterNotFoundResponseCode + } + return RouteAction_SERVICE_UNAVAILABLE +} + +func (m *RouteAction) GetMetadataMatch() *core.Metadata { + if m != nil { + return m.MetadataMatch + } + return nil +} + +func (m *RouteAction) GetPrefixRewrite() string { + if m != nil { + return m.PrefixRewrite + } + return "" +} + +func (m *RouteAction) GetRegexRewrite() *matcher.RegexMatchAndSubstitute { + if m != nil { + return m.RegexRewrite + } + return nil +} + +type isRouteAction_HostRewriteSpecifier interface { + isRouteAction_HostRewriteSpecifier() +} + +type RouteAction_HostRewrite struct { + HostRewrite string `protobuf:"bytes,6,opt,name=host_rewrite,json=hostRewrite,proto3,oneof"` +} + +type RouteAction_AutoHostRewrite struct { + AutoHostRewrite *wrappers.BoolValue `protobuf:"bytes,7,opt,name=auto_host_rewrite,json=autoHostRewrite,proto3,oneof"` +} + +type RouteAction_AutoHostRewriteHeader struct { + AutoHostRewriteHeader string `protobuf:"bytes,29,opt,name=auto_host_rewrite_header,json=autoHostRewriteHeader,proto3,oneof"` +} + +func (*RouteAction_HostRewrite) isRouteAction_HostRewriteSpecifier() {} + +func (*RouteAction_AutoHostRewrite) isRouteAction_HostRewriteSpecifier() {} + +func (*RouteAction_AutoHostRewriteHeader) isRouteAction_HostRewriteSpecifier() {} + +func (m *RouteAction) GetHostRewriteSpecifier() isRouteAction_HostRewriteSpecifier { + if m != nil { + return m.HostRewriteSpecifier + } + return nil +} + +func (m *RouteAction) GetHostRewrite() string { + if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_HostRewrite); ok { + return x.HostRewrite + } + return "" +} + +func (m *RouteAction) GetAutoHostRewrite() *wrappers.BoolValue { + if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_AutoHostRewrite); ok { + return x.AutoHostRewrite + } + return nil +} + +func (m *RouteAction) GetAutoHostRewriteHeader() string { + if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_AutoHostRewriteHeader); ok { + return x.AutoHostRewriteHeader + } + return "" +} + +func (m *RouteAction) GetTimeout() *duration.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *RouteAction) GetIdleTimeout() *duration.Duration { + if m != nil { + return m.IdleTimeout + } + return nil +} + +func (m *RouteAction) GetRetryPolicy() *RetryPolicy { + if m != nil { + return m.RetryPolicy + } + return nil +} + +func (m *RouteAction) GetRetryPolicyTypedConfig() *any.Any { + if m != nil { + return m.RetryPolicyTypedConfig + } + return nil +} + +// Deprecated: Do not use. +func (m *RouteAction) GetRequestMirrorPolicy() *RouteAction_RequestMirrorPolicy { + if m != nil { + return m.RequestMirrorPolicy + } + return nil +} + +func (m *RouteAction) GetRequestMirrorPolicies() []*RouteAction_RequestMirrorPolicy { + if m != nil { + return m.RequestMirrorPolicies + } + return nil +} + +func (m *RouteAction) GetPriority() core.RoutingPriority { + if m != nil { + return m.Priority + } + return core.RoutingPriority_DEFAULT +} + +func (m *RouteAction) GetRateLimits() []*RateLimit { + if m != nil { + return m.RateLimits + } + return nil +} + +func (m *RouteAction) GetIncludeVhRateLimits() *wrappers.BoolValue { + if m != nil { + return m.IncludeVhRateLimits + } + return nil +} + +func (m *RouteAction) GetHashPolicy() []*RouteAction_HashPolicy { + if m != nil { + return m.HashPolicy + } + return nil +} + +func (m *RouteAction) GetCors() *CorsPolicy { + if m != nil { + return m.Cors + } + return nil +} + +func (m *RouteAction) GetMaxGrpcTimeout() *duration.Duration { + if m != nil { + return m.MaxGrpcTimeout + } + return nil +} + +func (m *RouteAction) GetGrpcTimeoutOffset() *duration.Duration { + if m != nil { + return m.GrpcTimeoutOffset + } + return nil +} + +func (m *RouteAction) GetUpgradeConfigs() []*RouteAction_UpgradeConfig { + if m != nil { + return m.UpgradeConfigs + } + return nil +} + +func (m *RouteAction) GetInternalRedirectAction() RouteAction_InternalRedirectAction { + if m != nil { + return m.InternalRedirectAction + } + return RouteAction_PASS_THROUGH_INTERNAL_REDIRECT +} + +func (m *RouteAction) GetMaxInternalRedirects() *wrappers.UInt32Value { + if m != nil { + return m.MaxInternalRedirects + } + return nil +} + +func (m *RouteAction) GetHedgePolicy() *HedgePolicy { + if m != nil { + return m.HedgePolicy + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RouteAction) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RouteAction_Cluster)(nil), + (*RouteAction_ClusterHeader)(nil), + (*RouteAction_WeightedClusters)(nil), + (*RouteAction_HostRewrite)(nil), + (*RouteAction_AutoHostRewrite)(nil), + (*RouteAction_AutoHostRewriteHeader)(nil), + } +} + +type RouteAction_RequestMirrorPolicy struct { + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` // Deprecated: Do not use. + RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"` + TraceSampled *wrappers.BoolValue `protobuf:"bytes,4,opt,name=trace_sampled,json=traceSampled,proto3" json:"trace_sampled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_RequestMirrorPolicy) Reset() { *m = RouteAction_RequestMirrorPolicy{} } +func (m *RouteAction_RequestMirrorPolicy) String() string { return proto.CompactTextString(m) } +func (*RouteAction_RequestMirrorPolicy) ProtoMessage() {} +func (*RouteAction_RequestMirrorPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 0} +} + +func (m *RouteAction_RequestMirrorPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Unmarshal(m, b) +} +func (m *RouteAction_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Marshal(b, m, deterministic) +} +func (m *RouteAction_RequestMirrorPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_RequestMirrorPolicy.Merge(m, src) +} +func (m *RouteAction_RequestMirrorPolicy) XXX_Size() int { + return xxx_messageInfo_RouteAction_RequestMirrorPolicy.Size(m) +} +func (m *RouteAction_RequestMirrorPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_RequestMirrorPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_RequestMirrorPolicy proto.InternalMessageInfo + +func (m *RouteAction_RequestMirrorPolicy) GetCluster() string { + if m != nil { + return m.Cluster + } + return "" +} + +// Deprecated: Do not use. +func (m *RouteAction_RequestMirrorPolicy) GetRuntimeKey() string { + if m != nil { + return m.RuntimeKey + } + return "" +} + +func (m *RouteAction_RequestMirrorPolicy) GetRuntimeFraction() *core.RuntimeFractionalPercent { + if m != nil { + return m.RuntimeFraction + } + return nil +} + +func (m *RouteAction_RequestMirrorPolicy) GetTraceSampled() *wrappers.BoolValue { + if m != nil { + return m.TraceSampled + } + return nil +} + +type RouteAction_HashPolicy struct { + // Types that are valid to be assigned to PolicySpecifier: + // *RouteAction_HashPolicy_Header_ + // *RouteAction_HashPolicy_Cookie_ + // *RouteAction_HashPolicy_ConnectionProperties_ + // *RouteAction_HashPolicy_QueryParameter_ + // *RouteAction_HashPolicy_FilterState_ + PolicySpecifier isRouteAction_HashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"` + Terminal bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_HashPolicy) Reset() { *m = RouteAction_HashPolicy{} } +func (m *RouteAction_HashPolicy) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy) ProtoMessage() {} +func (*RouteAction_HashPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1} +} + +func (m *RouteAction_HashPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_HashPolicy.Unmarshal(m, b) +} +func (m *RouteAction_HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_HashPolicy.Marshal(b, m, deterministic) +} +func (m *RouteAction_HashPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy.Merge(m, src) +} +func (m *RouteAction_HashPolicy) XXX_Size() int { + return xxx_messageInfo_RouteAction_HashPolicy.Size(m) +} +func (m *RouteAction_HashPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy proto.InternalMessageInfo + +type isRouteAction_HashPolicy_PolicySpecifier interface { + isRouteAction_HashPolicy_PolicySpecifier() +} + +type RouteAction_HashPolicy_Header_ struct { + Header *RouteAction_HashPolicy_Header `protobuf:"bytes,1,opt,name=header,proto3,oneof"` +} + +type RouteAction_HashPolicy_Cookie_ struct { + Cookie *RouteAction_HashPolicy_Cookie `protobuf:"bytes,2,opt,name=cookie,proto3,oneof"` +} + +type RouteAction_HashPolicy_ConnectionProperties_ struct { + ConnectionProperties *RouteAction_HashPolicy_ConnectionProperties `protobuf:"bytes,3,opt,name=connection_properties,json=connectionProperties,proto3,oneof"` +} + +type RouteAction_HashPolicy_QueryParameter_ struct { + QueryParameter *RouteAction_HashPolicy_QueryParameter `protobuf:"bytes,5,opt,name=query_parameter,json=queryParameter,proto3,oneof"` +} + +type RouteAction_HashPolicy_FilterState_ struct { + FilterState *RouteAction_HashPolicy_FilterState `protobuf:"bytes,6,opt,name=filter_state,json=filterState,proto3,oneof"` +} + +func (*RouteAction_HashPolicy_Header_) isRouteAction_HashPolicy_PolicySpecifier() {} + +func (*RouteAction_HashPolicy_Cookie_) isRouteAction_HashPolicy_PolicySpecifier() {} + +func (*RouteAction_HashPolicy_ConnectionProperties_) isRouteAction_HashPolicy_PolicySpecifier() {} + +func (*RouteAction_HashPolicy_QueryParameter_) isRouteAction_HashPolicy_PolicySpecifier() {} + +func (*RouteAction_HashPolicy_FilterState_) isRouteAction_HashPolicy_PolicySpecifier() {} + +func (m *RouteAction_HashPolicy) GetPolicySpecifier() isRouteAction_HashPolicy_PolicySpecifier { + if m != nil { + return m.PolicySpecifier + } + return nil +} + +func (m *RouteAction_HashPolicy) GetHeader() *RouteAction_HashPolicy_Header { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Header_); ok { + return x.Header + } + return nil +} + +func (m *RouteAction_HashPolicy) GetCookie() *RouteAction_HashPolicy_Cookie { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Cookie_); ok { + return x.Cookie + } + return nil +} + +func (m *RouteAction_HashPolicy) GetConnectionProperties() *RouteAction_HashPolicy_ConnectionProperties { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_ConnectionProperties_); ok { + return x.ConnectionProperties + } + return nil +} + +func (m *RouteAction_HashPolicy) GetQueryParameter() *RouteAction_HashPolicy_QueryParameter { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_QueryParameter_); ok { + return x.QueryParameter + } + return nil +} + +func (m *RouteAction_HashPolicy) GetFilterState() *RouteAction_HashPolicy_FilterState { + if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_FilterState_); ok { + return x.FilterState + } + return nil +} + +func (m *RouteAction_HashPolicy) GetTerminal() bool { + if m != nil { + return m.Terminal + } + return false +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RouteAction_HashPolicy) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RouteAction_HashPolicy_Header_)(nil), + (*RouteAction_HashPolicy_Cookie_)(nil), + (*RouteAction_HashPolicy_ConnectionProperties_)(nil), + (*RouteAction_HashPolicy_QueryParameter_)(nil), + (*RouteAction_HashPolicy_FilterState_)(nil), + } +} + +type RouteAction_HashPolicy_Header struct { + HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_HashPolicy_Header) Reset() { *m = RouteAction_HashPolicy_Header{} } +func (m *RouteAction_HashPolicy_Header) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy_Header) ProtoMessage() {} +func (*RouteAction_HashPolicy_Header) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1, 0} +} + +func (m *RouteAction_HashPolicy_Header) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_HashPolicy_Header.Unmarshal(m, b) +} +func (m *RouteAction_HashPolicy_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_HashPolicy_Header.Marshal(b, m, deterministic) +} +func (m *RouteAction_HashPolicy_Header) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_Header.Merge(m, src) +} +func (m *RouteAction_HashPolicy_Header) XXX_Size() int { + return xxx_messageInfo_RouteAction_HashPolicy_Header.Size(m) +} +func (m *RouteAction_HashPolicy_Header) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_Header.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_Header proto.InternalMessageInfo + +func (m *RouteAction_HashPolicy_Header) GetHeaderName() string { + if m != nil { + return m.HeaderName + } + return "" +} + +type RouteAction_HashPolicy_Cookie struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Ttl *duration.Duration `protobuf:"bytes,2,opt,name=ttl,proto3" json:"ttl,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_HashPolicy_Cookie) Reset() { *m = RouteAction_HashPolicy_Cookie{} } +func (m *RouteAction_HashPolicy_Cookie) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy_Cookie) ProtoMessage() {} +func (*RouteAction_HashPolicy_Cookie) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1, 1} +} + +func (m *RouteAction_HashPolicy_Cookie) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Unmarshal(m, b) +} +func (m *RouteAction_HashPolicy_Cookie) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Marshal(b, m, deterministic) +} +func (m *RouteAction_HashPolicy_Cookie) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_Cookie.Merge(m, src) +} +func (m *RouteAction_HashPolicy_Cookie) XXX_Size() int { + return xxx_messageInfo_RouteAction_HashPolicy_Cookie.Size(m) +} +func (m *RouteAction_HashPolicy_Cookie) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_Cookie.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_Cookie proto.InternalMessageInfo + +func (m *RouteAction_HashPolicy_Cookie) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *RouteAction_HashPolicy_Cookie) GetTtl() *duration.Duration { + if m != nil { + return m.Ttl + } + return nil +} + +func (m *RouteAction_HashPolicy_Cookie) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +type RouteAction_HashPolicy_ConnectionProperties struct { + SourceIp bool `protobuf:"varint,1,opt,name=source_ip,json=sourceIp,proto3" json:"source_ip,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_HashPolicy_ConnectionProperties) Reset() { + *m = RouteAction_HashPolicy_ConnectionProperties{} +} +func (m *RouteAction_HashPolicy_ConnectionProperties) String() string { + return proto.CompactTextString(m) +} +func (*RouteAction_HashPolicy_ConnectionProperties) ProtoMessage() {} +func (*RouteAction_HashPolicy_ConnectionProperties) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1, 2} +} + +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Unmarshal(m, b) +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Marshal(b, m, deterministic) +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Merge(m, src) +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Size() int { + return xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Size(m) +} +func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties proto.InternalMessageInfo + +func (m *RouteAction_HashPolicy_ConnectionProperties) GetSourceIp() bool { + if m != nil { + return m.SourceIp + } + return false +} + +type RouteAction_HashPolicy_QueryParameter struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_HashPolicy_QueryParameter) Reset() { *m = RouteAction_HashPolicy_QueryParameter{} } +func (m *RouteAction_HashPolicy_QueryParameter) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy_QueryParameter) ProtoMessage() {} +func (*RouteAction_HashPolicy_QueryParameter) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1, 3} +} + +func (m *RouteAction_HashPolicy_QueryParameter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_HashPolicy_QueryParameter.Unmarshal(m, b) +} +func (m *RouteAction_HashPolicy_QueryParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_HashPolicy_QueryParameter.Marshal(b, m, deterministic) +} +func (m *RouteAction_HashPolicy_QueryParameter) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_QueryParameter.Merge(m, src) +} +func (m *RouteAction_HashPolicy_QueryParameter) XXX_Size() int { + return xxx_messageInfo_RouteAction_HashPolicy_QueryParameter.Size(m) +} +func (m *RouteAction_HashPolicy_QueryParameter) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_QueryParameter.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_QueryParameter proto.InternalMessageInfo + +func (m *RouteAction_HashPolicy_QueryParameter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type RouteAction_HashPolicy_FilterState struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_HashPolicy_FilterState) Reset() { *m = RouteAction_HashPolicy_FilterState{} } +func (m *RouteAction_HashPolicy_FilterState) String() string { return proto.CompactTextString(m) } +func (*RouteAction_HashPolicy_FilterState) ProtoMessage() {} +func (*RouteAction_HashPolicy_FilterState) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 1, 4} +} + +func (m *RouteAction_HashPolicy_FilterState) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_HashPolicy_FilterState.Unmarshal(m, b) +} +func (m *RouteAction_HashPolicy_FilterState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_HashPolicy_FilterState.Marshal(b, m, deterministic) +} +func (m *RouteAction_HashPolicy_FilterState) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_HashPolicy_FilterState.Merge(m, src) +} +func (m *RouteAction_HashPolicy_FilterState) XXX_Size() int { + return xxx_messageInfo_RouteAction_HashPolicy_FilterState.Size(m) +} +func (m *RouteAction_HashPolicy_FilterState) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_HashPolicy_FilterState.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_HashPolicy_FilterState proto.InternalMessageInfo + +func (m *RouteAction_HashPolicy_FilterState) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +type RouteAction_UpgradeConfig struct { + UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"` + Enabled *wrappers.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteAction_UpgradeConfig) Reset() { *m = RouteAction_UpgradeConfig{} } +func (m *RouteAction_UpgradeConfig) String() string { return proto.CompactTextString(m) } +func (*RouteAction_UpgradeConfig) ProtoMessage() {} +func (*RouteAction_UpgradeConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{6, 2} +} + +func (m *RouteAction_UpgradeConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteAction_UpgradeConfig.Unmarshal(m, b) +} +func (m *RouteAction_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteAction_UpgradeConfig.Marshal(b, m, deterministic) +} +func (m *RouteAction_UpgradeConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteAction_UpgradeConfig.Merge(m, src) +} +func (m *RouteAction_UpgradeConfig) XXX_Size() int { + return xxx_messageInfo_RouteAction_UpgradeConfig.Size(m) +} +func (m *RouteAction_UpgradeConfig) XXX_DiscardUnknown() { + xxx_messageInfo_RouteAction_UpgradeConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteAction_UpgradeConfig proto.InternalMessageInfo + +func (m *RouteAction_UpgradeConfig) GetUpgradeType() string { + if m != nil { + return m.UpgradeType + } + return "" +} + +func (m *RouteAction_UpgradeConfig) GetEnabled() *wrappers.BoolValue { + if m != nil { + return m.Enabled + } + return nil +} + +type RetryPolicy struct { + RetryOn string `protobuf:"bytes,1,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"` + NumRetries *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"` + PerTryTimeout *duration.Duration `protobuf:"bytes,3,opt,name=per_try_timeout,json=perTryTimeout,proto3" json:"per_try_timeout,omitempty"` + RetryPriority *RetryPolicy_RetryPriority `protobuf:"bytes,4,opt,name=retry_priority,json=retryPriority,proto3" json:"retry_priority,omitempty"` + RetryHostPredicate []*RetryPolicy_RetryHostPredicate `protobuf:"bytes,5,rep,name=retry_host_predicate,json=retryHostPredicate,proto3" json:"retry_host_predicate,omitempty"` + HostSelectionRetryMaxAttempts int64 `protobuf:"varint,6,opt,name=host_selection_retry_max_attempts,json=hostSelectionRetryMaxAttempts,proto3" json:"host_selection_retry_max_attempts,omitempty"` + RetriableStatusCodes []uint32 `protobuf:"varint,7,rep,packed,name=retriable_status_codes,json=retriableStatusCodes,proto3" json:"retriable_status_codes,omitempty"` + RetryBackOff *RetryPolicy_RetryBackOff `protobuf:"bytes,8,opt,name=retry_back_off,json=retryBackOff,proto3" json:"retry_back_off,omitempty"` + RetriableHeaders []*HeaderMatcher `protobuf:"bytes,9,rep,name=retriable_headers,json=retriableHeaders,proto3" json:"retriable_headers,omitempty"` + RetriableRequestHeaders []*HeaderMatcher `protobuf:"bytes,10,rep,name=retriable_request_headers,json=retriableRequestHeaders,proto3" json:"retriable_request_headers,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RetryPolicy) Reset() { *m = RetryPolicy{} } +func (m *RetryPolicy) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy) ProtoMessage() {} +func (*RetryPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{7} +} + +func (m *RetryPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RetryPolicy.Unmarshal(m, b) +} +func (m *RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RetryPolicy.Marshal(b, m, deterministic) +} +func (m *RetryPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy.Merge(m, src) +} +func (m *RetryPolicy) XXX_Size() int { + return xxx_messageInfo_RetryPolicy.Size(m) +} +func (m *RetryPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_RetryPolicy proto.InternalMessageInfo + +func (m *RetryPolicy) GetRetryOn() string { + if m != nil { + return m.RetryOn + } + return "" +} + +func (m *RetryPolicy) GetNumRetries() *wrappers.UInt32Value { + if m != nil { + return m.NumRetries + } + return nil +} + +func (m *RetryPolicy) GetPerTryTimeout() *duration.Duration { + if m != nil { + return m.PerTryTimeout + } + return nil +} + +func (m *RetryPolicy) GetRetryPriority() *RetryPolicy_RetryPriority { + if m != nil { + return m.RetryPriority + } + return nil +} + +func (m *RetryPolicy) GetRetryHostPredicate() []*RetryPolicy_RetryHostPredicate { + if m != nil { + return m.RetryHostPredicate + } + return nil +} + +func (m *RetryPolicy) GetHostSelectionRetryMaxAttempts() int64 { + if m != nil { + return m.HostSelectionRetryMaxAttempts + } + return 0 +} + +func (m *RetryPolicy) GetRetriableStatusCodes() []uint32 { + if m != nil { + return m.RetriableStatusCodes + } + return nil +} + +func (m *RetryPolicy) GetRetryBackOff() *RetryPolicy_RetryBackOff { + if m != nil { + return m.RetryBackOff + } + return nil +} + +func (m *RetryPolicy) GetRetriableHeaders() []*HeaderMatcher { + if m != nil { + return m.RetriableHeaders + } + return nil +} + +func (m *RetryPolicy) GetRetriableRequestHeaders() []*HeaderMatcher { + if m != nil { + return m.RetriableRequestHeaders + } + return nil +} + +type RetryPolicy_RetryPriority struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *RetryPolicy_RetryPriority_Config + // *RetryPolicy_RetryPriority_TypedConfig + ConfigType isRetryPolicy_RetryPriority_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RetryPolicy_RetryPriority) Reset() { *m = RetryPolicy_RetryPriority{} } +func (m *RetryPolicy_RetryPriority) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy_RetryPriority) ProtoMessage() {} +func (*RetryPolicy_RetryPriority) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{7, 0} +} + +func (m *RetryPolicy_RetryPriority) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RetryPolicy_RetryPriority.Unmarshal(m, b) +} +func (m *RetryPolicy_RetryPriority) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RetryPolicy_RetryPriority.Marshal(b, m, deterministic) +} +func (m *RetryPolicy_RetryPriority) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy_RetryPriority.Merge(m, src) +} +func (m *RetryPolicy_RetryPriority) XXX_Size() int { + return xxx_messageInfo_RetryPolicy_RetryPriority.Size(m) +} +func (m *RetryPolicy_RetryPriority) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy_RetryPriority.DiscardUnknown(m) +} + +var xxx_messageInfo_RetryPolicy_RetryPriority proto.InternalMessageInfo + +func (m *RetryPolicy_RetryPriority) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type isRetryPolicy_RetryPriority_ConfigType interface { + isRetryPolicy_RetryPriority_ConfigType() +} + +type RetryPolicy_RetryPriority_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type RetryPolicy_RetryPriority_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*RetryPolicy_RetryPriority_Config) isRetryPolicy_RetryPriority_ConfigType() {} + +func (*RetryPolicy_RetryPriority_TypedConfig) isRetryPolicy_RetryPriority_ConfigType() {} + +func (m *RetryPolicy_RetryPriority) GetConfigType() isRetryPolicy_RetryPriority_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *RetryPolicy_RetryPriority) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_Config); ok { + return x.Config + } + return nil +} + +func (m *RetryPolicy_RetryPriority) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RetryPolicy_RetryPriority) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RetryPolicy_RetryPriority_Config)(nil), + (*RetryPolicy_RetryPriority_TypedConfig)(nil), + } +} + +type RetryPolicy_RetryHostPredicate struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *RetryPolicy_RetryHostPredicate_Config + // *RetryPolicy_RetryHostPredicate_TypedConfig + ConfigType isRetryPolicy_RetryHostPredicate_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RetryPolicy_RetryHostPredicate) Reset() { *m = RetryPolicy_RetryHostPredicate{} } +func (m *RetryPolicy_RetryHostPredicate) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy_RetryHostPredicate) ProtoMessage() {} +func (*RetryPolicy_RetryHostPredicate) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{7, 1} +} + +func (m *RetryPolicy_RetryHostPredicate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Unmarshal(m, b) +} +func (m *RetryPolicy_RetryHostPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Marshal(b, m, deterministic) +} +func (m *RetryPolicy_RetryHostPredicate) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy_RetryHostPredicate.Merge(m, src) +} +func (m *RetryPolicy_RetryHostPredicate) XXX_Size() int { + return xxx_messageInfo_RetryPolicy_RetryHostPredicate.Size(m) +} +func (m *RetryPolicy_RetryHostPredicate) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy_RetryHostPredicate.DiscardUnknown(m) +} + +var xxx_messageInfo_RetryPolicy_RetryHostPredicate proto.InternalMessageInfo + +func (m *RetryPolicy_RetryHostPredicate) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type isRetryPolicy_RetryHostPredicate_ConfigType interface { + isRetryPolicy_RetryHostPredicate_ConfigType() +} + +type RetryPolicy_RetryHostPredicate_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type RetryPolicy_RetryHostPredicate_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*RetryPolicy_RetryHostPredicate_Config) isRetryPolicy_RetryHostPredicate_ConfigType() {} + +func (*RetryPolicy_RetryHostPredicate_TypedConfig) isRetryPolicy_RetryHostPredicate_ConfigType() {} + +func (m *RetryPolicy_RetryHostPredicate) GetConfigType() isRetryPolicy_RetryHostPredicate_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *RetryPolicy_RetryHostPredicate) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_Config); ok { + return x.Config + } + return nil +} + +func (m *RetryPolicy_RetryHostPredicate) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RetryPolicy_RetryHostPredicate) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RetryPolicy_RetryHostPredicate_Config)(nil), + (*RetryPolicy_RetryHostPredicate_TypedConfig)(nil), + } +} + +type RetryPolicy_RetryBackOff struct { + BaseInterval *duration.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3" json:"base_interval,omitempty"` + MaxInterval *duration.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3" json:"max_interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RetryPolicy_RetryBackOff) Reset() { *m = RetryPolicy_RetryBackOff{} } +func (m *RetryPolicy_RetryBackOff) String() string { return proto.CompactTextString(m) } +func (*RetryPolicy_RetryBackOff) ProtoMessage() {} +func (*RetryPolicy_RetryBackOff) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{7, 2} +} + +func (m *RetryPolicy_RetryBackOff) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RetryPolicy_RetryBackOff.Unmarshal(m, b) +} +func (m *RetryPolicy_RetryBackOff) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RetryPolicy_RetryBackOff.Marshal(b, m, deterministic) +} +func (m *RetryPolicy_RetryBackOff) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetryPolicy_RetryBackOff.Merge(m, src) +} +func (m *RetryPolicy_RetryBackOff) XXX_Size() int { + return xxx_messageInfo_RetryPolicy_RetryBackOff.Size(m) +} +func (m *RetryPolicy_RetryBackOff) XXX_DiscardUnknown() { + xxx_messageInfo_RetryPolicy_RetryBackOff.DiscardUnknown(m) +} + +var xxx_messageInfo_RetryPolicy_RetryBackOff proto.InternalMessageInfo + +func (m *RetryPolicy_RetryBackOff) GetBaseInterval() *duration.Duration { + if m != nil { + return m.BaseInterval + } + return nil +} + +func (m *RetryPolicy_RetryBackOff) GetMaxInterval() *duration.Duration { + if m != nil { + return m.MaxInterval + } + return nil +} + +type HedgePolicy struct { + InitialRequests *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=initial_requests,json=initialRequests,proto3" json:"initial_requests,omitempty"` + AdditionalRequestChance *_type.FractionalPercent `protobuf:"bytes,2,opt,name=additional_request_chance,json=additionalRequestChance,proto3" json:"additional_request_chance,omitempty"` + HedgeOnPerTryTimeout bool `protobuf:"varint,3,opt,name=hedge_on_per_try_timeout,json=hedgeOnPerTryTimeout,proto3" json:"hedge_on_per_try_timeout,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HedgePolicy) Reset() { *m = HedgePolicy{} } +func (m *HedgePolicy) String() string { return proto.CompactTextString(m) } +func (*HedgePolicy) ProtoMessage() {} +func (*HedgePolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{8} +} + +func (m *HedgePolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HedgePolicy.Unmarshal(m, b) +} +func (m *HedgePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HedgePolicy.Marshal(b, m, deterministic) +} +func (m *HedgePolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_HedgePolicy.Merge(m, src) +} +func (m *HedgePolicy) XXX_Size() int { + return xxx_messageInfo_HedgePolicy.Size(m) +} +func (m *HedgePolicy) XXX_DiscardUnknown() { + xxx_messageInfo_HedgePolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_HedgePolicy proto.InternalMessageInfo + +func (m *HedgePolicy) GetInitialRequests() *wrappers.UInt32Value { + if m != nil { + return m.InitialRequests + } + return nil +} + +func (m *HedgePolicy) GetAdditionalRequestChance() *_type.FractionalPercent { + if m != nil { + return m.AdditionalRequestChance + } + return nil +} + +func (m *HedgePolicy) GetHedgeOnPerTryTimeout() bool { + if m != nil { + return m.HedgeOnPerTryTimeout + } + return false +} + +type RedirectAction struct { + // Types that are valid to be assigned to SchemeRewriteSpecifier: + // *RedirectAction_HttpsRedirect + // *RedirectAction_SchemeRedirect + SchemeRewriteSpecifier isRedirectAction_SchemeRewriteSpecifier `protobuf_oneof:"scheme_rewrite_specifier"` + HostRedirect string `protobuf:"bytes,1,opt,name=host_redirect,json=hostRedirect,proto3" json:"host_redirect,omitempty"` + PortRedirect uint32 `protobuf:"varint,8,opt,name=port_redirect,json=portRedirect,proto3" json:"port_redirect,omitempty"` + // Types that are valid to be assigned to PathRewriteSpecifier: + // *RedirectAction_PathRedirect + // *RedirectAction_PrefixRewrite + PathRewriteSpecifier isRedirectAction_PathRewriteSpecifier `protobuf_oneof:"path_rewrite_specifier"` + ResponseCode RedirectAction_RedirectResponseCode `protobuf:"varint,3,opt,name=response_code,json=responseCode,proto3,enum=envoy.api.v2.route.RedirectAction_RedirectResponseCode" json:"response_code,omitempty"` + StripQuery bool `protobuf:"varint,6,opt,name=strip_query,json=stripQuery,proto3" json:"strip_query,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RedirectAction) Reset() { *m = RedirectAction{} } +func (m *RedirectAction) String() string { return proto.CompactTextString(m) } +func (*RedirectAction) ProtoMessage() {} +func (*RedirectAction) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{9} +} + +func (m *RedirectAction) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RedirectAction.Unmarshal(m, b) +} +func (m *RedirectAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RedirectAction.Marshal(b, m, deterministic) +} +func (m *RedirectAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_RedirectAction.Merge(m, src) +} +func (m *RedirectAction) XXX_Size() int { + return xxx_messageInfo_RedirectAction.Size(m) +} +func (m *RedirectAction) XXX_DiscardUnknown() { + xxx_messageInfo_RedirectAction.DiscardUnknown(m) +} + +var xxx_messageInfo_RedirectAction proto.InternalMessageInfo + +type isRedirectAction_SchemeRewriteSpecifier interface { + isRedirectAction_SchemeRewriteSpecifier() +} + +type RedirectAction_HttpsRedirect struct { + HttpsRedirect bool `protobuf:"varint,4,opt,name=https_redirect,json=httpsRedirect,proto3,oneof"` +} + +type RedirectAction_SchemeRedirect struct { + SchemeRedirect string `protobuf:"bytes,7,opt,name=scheme_redirect,json=schemeRedirect,proto3,oneof"` +} + +func (*RedirectAction_HttpsRedirect) isRedirectAction_SchemeRewriteSpecifier() {} + +func (*RedirectAction_SchemeRedirect) isRedirectAction_SchemeRewriteSpecifier() {} + +func (m *RedirectAction) GetSchemeRewriteSpecifier() isRedirectAction_SchemeRewriteSpecifier { + if m != nil { + return m.SchemeRewriteSpecifier + } + return nil +} + +func (m *RedirectAction) GetHttpsRedirect() bool { + if x, ok := m.GetSchemeRewriteSpecifier().(*RedirectAction_HttpsRedirect); ok { + return x.HttpsRedirect + } + return false +} + +func (m *RedirectAction) GetSchemeRedirect() string { + if x, ok := m.GetSchemeRewriteSpecifier().(*RedirectAction_SchemeRedirect); ok { + return x.SchemeRedirect + } + return "" +} + +func (m *RedirectAction) GetHostRedirect() string { + if m != nil { + return m.HostRedirect + } + return "" +} + +func (m *RedirectAction) GetPortRedirect() uint32 { + if m != nil { + return m.PortRedirect + } + return 0 +} + +type isRedirectAction_PathRewriteSpecifier interface { + isRedirectAction_PathRewriteSpecifier() +} + +type RedirectAction_PathRedirect struct { + PathRedirect string `protobuf:"bytes,2,opt,name=path_redirect,json=pathRedirect,proto3,oneof"` +} + +type RedirectAction_PrefixRewrite struct { + PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3,oneof"` +} + +func (*RedirectAction_PathRedirect) isRedirectAction_PathRewriteSpecifier() {} + +func (*RedirectAction_PrefixRewrite) isRedirectAction_PathRewriteSpecifier() {} + +func (m *RedirectAction) GetPathRewriteSpecifier() isRedirectAction_PathRewriteSpecifier { + if m != nil { + return m.PathRewriteSpecifier + } + return nil +} + +func (m *RedirectAction) GetPathRedirect() string { + if x, ok := m.GetPathRewriteSpecifier().(*RedirectAction_PathRedirect); ok { + return x.PathRedirect + } + return "" +} + +func (m *RedirectAction) GetPrefixRewrite() string { + if x, ok := m.GetPathRewriteSpecifier().(*RedirectAction_PrefixRewrite); ok { + return x.PrefixRewrite + } + return "" +} + +func (m *RedirectAction) GetResponseCode() RedirectAction_RedirectResponseCode { + if m != nil { + return m.ResponseCode + } + return RedirectAction_MOVED_PERMANENTLY +} + +func (m *RedirectAction) GetStripQuery() bool { + if m != nil { + return m.StripQuery + } + return false +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RedirectAction) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RedirectAction_HttpsRedirect)(nil), + (*RedirectAction_SchemeRedirect)(nil), + (*RedirectAction_PathRedirect)(nil), + (*RedirectAction_PrefixRewrite)(nil), + } +} + +type DirectResponseAction struct { + Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + Body *core.DataSource `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DirectResponseAction) Reset() { *m = DirectResponseAction{} } +func (m *DirectResponseAction) String() string { return proto.CompactTextString(m) } +func (*DirectResponseAction) ProtoMessage() {} +func (*DirectResponseAction) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{10} +} + +func (m *DirectResponseAction) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DirectResponseAction.Unmarshal(m, b) +} +func (m *DirectResponseAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DirectResponseAction.Marshal(b, m, deterministic) +} +func (m *DirectResponseAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_DirectResponseAction.Merge(m, src) +} +func (m *DirectResponseAction) XXX_Size() int { + return xxx_messageInfo_DirectResponseAction.Size(m) +} +func (m *DirectResponseAction) XXX_DiscardUnknown() { + xxx_messageInfo_DirectResponseAction.DiscardUnknown(m) +} + +var xxx_messageInfo_DirectResponseAction proto.InternalMessageInfo + +func (m *DirectResponseAction) GetStatus() uint32 { + if m != nil { + return m.Status + } + return 0 +} + +func (m *DirectResponseAction) GetBody() *core.DataSource { + if m != nil { + return m.Body + } + return nil +} + +type Decorator struct { + Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` + Propagate *wrappers.BoolValue `protobuf:"bytes,2,opt,name=propagate,proto3" json:"propagate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Decorator) Reset() { *m = Decorator{} } +func (m *Decorator) String() string { return proto.CompactTextString(m) } +func (*Decorator) ProtoMessage() {} +func (*Decorator) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{11} +} + +func (m *Decorator) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Decorator.Unmarshal(m, b) +} +func (m *Decorator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Decorator.Marshal(b, m, deterministic) +} +func (m *Decorator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Decorator.Merge(m, src) +} +func (m *Decorator) XXX_Size() int { + return xxx_messageInfo_Decorator.Size(m) +} +func (m *Decorator) XXX_DiscardUnknown() { + xxx_messageInfo_Decorator.DiscardUnknown(m) +} + +var xxx_messageInfo_Decorator proto.InternalMessageInfo + +func (m *Decorator) GetOperation() string { + if m != nil { + return m.Operation + } + return "" +} + +func (m *Decorator) GetPropagate() *wrappers.BoolValue { + if m != nil { + return m.Propagate + } + return nil +} + +type Tracing struct { + ClientSampling *_type.FractionalPercent `protobuf:"bytes,1,opt,name=client_sampling,json=clientSampling,proto3" json:"client_sampling,omitempty"` + RandomSampling *_type.FractionalPercent `protobuf:"bytes,2,opt,name=random_sampling,json=randomSampling,proto3" json:"random_sampling,omitempty"` + OverallSampling *_type.FractionalPercent `protobuf:"bytes,3,opt,name=overall_sampling,json=overallSampling,proto3" json:"overall_sampling,omitempty"` + CustomTags []*v2.CustomTag `protobuf:"bytes,4,rep,name=custom_tags,json=customTags,proto3" json:"custom_tags,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Tracing) Reset() { *m = Tracing{} } +func (m *Tracing) String() string { return proto.CompactTextString(m) } +func (*Tracing) ProtoMessage() {} +func (*Tracing) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{12} +} + +func (m *Tracing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Tracing.Unmarshal(m, b) +} +func (m *Tracing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Tracing.Marshal(b, m, deterministic) +} +func (m *Tracing) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tracing.Merge(m, src) +} +func (m *Tracing) XXX_Size() int { + return xxx_messageInfo_Tracing.Size(m) +} +func (m *Tracing) XXX_DiscardUnknown() { + xxx_messageInfo_Tracing.DiscardUnknown(m) +} + +var xxx_messageInfo_Tracing proto.InternalMessageInfo + +func (m *Tracing) GetClientSampling() *_type.FractionalPercent { + if m != nil { + return m.ClientSampling + } + return nil +} + +func (m *Tracing) GetRandomSampling() *_type.FractionalPercent { + if m != nil { + return m.RandomSampling + } + return nil +} + +func (m *Tracing) GetOverallSampling() *_type.FractionalPercent { + if m != nil { + return m.OverallSampling + } + return nil +} + +func (m *Tracing) GetCustomTags() []*v2.CustomTag { + if m != nil { + return m.CustomTags + } + return nil +} + +type VirtualCluster struct { + Pattern string `protobuf:"bytes,1,opt,name=pattern,proto3" json:"pattern,omitempty"` // Deprecated: Do not use. + Headers []*HeaderMatcher `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Method core.RequestMethod `protobuf:"varint,3,opt,name=method,proto3,enum=envoy.api.v2.core.RequestMethod" json:"method,omitempty"` // Deprecated: Do not use. + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VirtualCluster) Reset() { *m = VirtualCluster{} } +func (m *VirtualCluster) String() string { return proto.CompactTextString(m) } +func (*VirtualCluster) ProtoMessage() {} +func (*VirtualCluster) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{13} +} + +func (m *VirtualCluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VirtualCluster.Unmarshal(m, b) +} +func (m *VirtualCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VirtualCluster.Marshal(b, m, deterministic) +} +func (m *VirtualCluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_VirtualCluster.Merge(m, src) +} +func (m *VirtualCluster) XXX_Size() int { + return xxx_messageInfo_VirtualCluster.Size(m) +} +func (m *VirtualCluster) XXX_DiscardUnknown() { + xxx_messageInfo_VirtualCluster.DiscardUnknown(m) +} + +var xxx_messageInfo_VirtualCluster proto.InternalMessageInfo + +// Deprecated: Do not use. +func (m *VirtualCluster) GetPattern() string { + if m != nil { + return m.Pattern + } + return "" +} + +func (m *VirtualCluster) GetHeaders() []*HeaderMatcher { + if m != nil { + return m.Headers + } + return nil +} + +func (m *VirtualCluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Deprecated: Do not use. +func (m *VirtualCluster) GetMethod() core.RequestMethod { + if m != nil { + return m.Method + } + return core.RequestMethod_METHOD_UNSPECIFIED +} + +type RateLimit struct { + Stage *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` + DisableKey string `protobuf:"bytes,2,opt,name=disable_key,json=disableKey,proto3" json:"disable_key,omitempty"` + Actions []*RateLimit_Action `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit) Reset() { *m = RateLimit{} } +func (m *RateLimit) String() string { return proto.CompactTextString(m) } +func (*RateLimit) ProtoMessage() {} +func (*RateLimit) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14} +} + +func (m *RateLimit) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit.Unmarshal(m, b) +} +func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit.Marshal(b, m, deterministic) +} +func (m *RateLimit) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit.Merge(m, src) +} +func (m *RateLimit) XXX_Size() int { + return xxx_messageInfo_RateLimit.Size(m) +} +func (m *RateLimit) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit proto.InternalMessageInfo + +func (m *RateLimit) GetStage() *wrappers.UInt32Value { + if m != nil { + return m.Stage + } + return nil +} + +func (m *RateLimit) GetDisableKey() string { + if m != nil { + return m.DisableKey + } + return "" +} + +func (m *RateLimit) GetActions() []*RateLimit_Action { + if m != nil { + return m.Actions + } + return nil +} + +type RateLimit_Action struct { + // Types that are valid to be assigned to ActionSpecifier: + // *RateLimit_Action_SourceCluster_ + // *RateLimit_Action_DestinationCluster_ + // *RateLimit_Action_RequestHeaders_ + // *RateLimit_Action_RemoteAddress_ + // *RateLimit_Action_GenericKey_ + // *RateLimit_Action_HeaderValueMatch_ + ActionSpecifier isRateLimit_Action_ActionSpecifier `protobuf_oneof:"action_specifier"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action) Reset() { *m = RateLimit_Action{} } +func (m *RateLimit_Action) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action) ProtoMessage() {} +func (*RateLimit_Action) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0} +} + +func (m *RateLimit_Action) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action.Unmarshal(m, b) +} +func (m *RateLimit_Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action.Merge(m, src) +} +func (m *RateLimit_Action) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action.Size(m) +} +func (m *RateLimit_Action) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action proto.InternalMessageInfo + +type isRateLimit_Action_ActionSpecifier interface { + isRateLimit_Action_ActionSpecifier() +} + +type RateLimit_Action_SourceCluster_ struct { + SourceCluster *RateLimit_Action_SourceCluster `protobuf:"bytes,1,opt,name=source_cluster,json=sourceCluster,proto3,oneof"` +} + +type RateLimit_Action_DestinationCluster_ struct { + DestinationCluster *RateLimit_Action_DestinationCluster `protobuf:"bytes,2,opt,name=destination_cluster,json=destinationCluster,proto3,oneof"` +} + +type RateLimit_Action_RequestHeaders_ struct { + RequestHeaders *RateLimit_Action_RequestHeaders `protobuf:"bytes,3,opt,name=request_headers,json=requestHeaders,proto3,oneof"` +} + +type RateLimit_Action_RemoteAddress_ struct { + RemoteAddress *RateLimit_Action_RemoteAddress `protobuf:"bytes,4,opt,name=remote_address,json=remoteAddress,proto3,oneof"` +} + +type RateLimit_Action_GenericKey_ struct { + GenericKey *RateLimit_Action_GenericKey `protobuf:"bytes,5,opt,name=generic_key,json=genericKey,proto3,oneof"` +} + +type RateLimit_Action_HeaderValueMatch_ struct { + HeaderValueMatch *RateLimit_Action_HeaderValueMatch `protobuf:"bytes,6,opt,name=header_value_match,json=headerValueMatch,proto3,oneof"` +} + +func (*RateLimit_Action_SourceCluster_) isRateLimit_Action_ActionSpecifier() {} + +func (*RateLimit_Action_DestinationCluster_) isRateLimit_Action_ActionSpecifier() {} + +func (*RateLimit_Action_RequestHeaders_) isRateLimit_Action_ActionSpecifier() {} + +func (*RateLimit_Action_RemoteAddress_) isRateLimit_Action_ActionSpecifier() {} + +func (*RateLimit_Action_GenericKey_) isRateLimit_Action_ActionSpecifier() {} + +func (*RateLimit_Action_HeaderValueMatch_) isRateLimit_Action_ActionSpecifier() {} + +func (m *RateLimit_Action) GetActionSpecifier() isRateLimit_Action_ActionSpecifier { + if m != nil { + return m.ActionSpecifier + } + return nil +} + +func (m *RateLimit_Action) GetSourceCluster() *RateLimit_Action_SourceCluster { + if x, ok := m.GetActionSpecifier().(*RateLimit_Action_SourceCluster_); ok { + return x.SourceCluster + } + return nil +} + +func (m *RateLimit_Action) GetDestinationCluster() *RateLimit_Action_DestinationCluster { + if x, ok := m.GetActionSpecifier().(*RateLimit_Action_DestinationCluster_); ok { + return x.DestinationCluster + } + return nil +} + +func (m *RateLimit_Action) GetRequestHeaders() *RateLimit_Action_RequestHeaders { + if x, ok := m.GetActionSpecifier().(*RateLimit_Action_RequestHeaders_); ok { + return x.RequestHeaders + } + return nil +} + +func (m *RateLimit_Action) GetRemoteAddress() *RateLimit_Action_RemoteAddress { + if x, ok := m.GetActionSpecifier().(*RateLimit_Action_RemoteAddress_); ok { + return x.RemoteAddress + } + return nil +} + +func (m *RateLimit_Action) GetGenericKey() *RateLimit_Action_GenericKey { + if x, ok := m.GetActionSpecifier().(*RateLimit_Action_GenericKey_); ok { + return x.GenericKey + } + return nil +} + +func (m *RateLimit_Action) GetHeaderValueMatch() *RateLimit_Action_HeaderValueMatch { + if x, ok := m.GetActionSpecifier().(*RateLimit_Action_HeaderValueMatch_); ok { + return x.HeaderValueMatch + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RateLimit_Action) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RateLimit_Action_SourceCluster_)(nil), + (*RateLimit_Action_DestinationCluster_)(nil), + (*RateLimit_Action_RequestHeaders_)(nil), + (*RateLimit_Action_RemoteAddress_)(nil), + (*RateLimit_Action_GenericKey_)(nil), + (*RateLimit_Action_HeaderValueMatch_)(nil), + } +} + +type RateLimit_Action_SourceCluster struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action_SourceCluster) Reset() { *m = RateLimit_Action_SourceCluster{} } +func (m *RateLimit_Action_SourceCluster) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action_SourceCluster) ProtoMessage() {} +func (*RateLimit_Action_SourceCluster) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0, 0} +} + +func (m *RateLimit_Action_SourceCluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action_SourceCluster.Unmarshal(m, b) +} +func (m *RateLimit_Action_SourceCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action_SourceCluster.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action_SourceCluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action_SourceCluster.Merge(m, src) +} +func (m *RateLimit_Action_SourceCluster) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action_SourceCluster.Size(m) +} +func (m *RateLimit_Action_SourceCluster) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action_SourceCluster.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action_SourceCluster proto.InternalMessageInfo + +type RateLimit_Action_DestinationCluster struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action_DestinationCluster) Reset() { *m = RateLimit_Action_DestinationCluster{} } +func (m *RateLimit_Action_DestinationCluster) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action_DestinationCluster) ProtoMessage() {} +func (*RateLimit_Action_DestinationCluster) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0, 1} +} + +func (m *RateLimit_Action_DestinationCluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action_DestinationCluster.Unmarshal(m, b) +} +func (m *RateLimit_Action_DestinationCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action_DestinationCluster.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action_DestinationCluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action_DestinationCluster.Merge(m, src) +} +func (m *RateLimit_Action_DestinationCluster) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action_DestinationCluster.Size(m) +} +func (m *RateLimit_Action_DestinationCluster) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action_DestinationCluster.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action_DestinationCluster proto.InternalMessageInfo + +type RateLimit_Action_RequestHeaders struct { + HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` + DescriptorKey string `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action_RequestHeaders) Reset() { *m = RateLimit_Action_RequestHeaders{} } +func (m *RateLimit_Action_RequestHeaders) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action_RequestHeaders) ProtoMessage() {} +func (*RateLimit_Action_RequestHeaders) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0, 2} +} + +func (m *RateLimit_Action_RequestHeaders) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action_RequestHeaders.Unmarshal(m, b) +} +func (m *RateLimit_Action_RequestHeaders) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action_RequestHeaders.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action_RequestHeaders) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action_RequestHeaders.Merge(m, src) +} +func (m *RateLimit_Action_RequestHeaders) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action_RequestHeaders.Size(m) +} +func (m *RateLimit_Action_RequestHeaders) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action_RequestHeaders.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action_RequestHeaders proto.InternalMessageInfo + +func (m *RateLimit_Action_RequestHeaders) GetHeaderName() string { + if m != nil { + return m.HeaderName + } + return "" +} + +func (m *RateLimit_Action_RequestHeaders) GetDescriptorKey() string { + if m != nil { + return m.DescriptorKey + } + return "" +} + +type RateLimit_Action_RemoteAddress struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action_RemoteAddress) Reset() { *m = RateLimit_Action_RemoteAddress{} } +func (m *RateLimit_Action_RemoteAddress) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action_RemoteAddress) ProtoMessage() {} +func (*RateLimit_Action_RemoteAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0, 3} +} + +func (m *RateLimit_Action_RemoteAddress) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action_RemoteAddress.Unmarshal(m, b) +} +func (m *RateLimit_Action_RemoteAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action_RemoteAddress.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action_RemoteAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action_RemoteAddress.Merge(m, src) +} +func (m *RateLimit_Action_RemoteAddress) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action_RemoteAddress.Size(m) +} +func (m *RateLimit_Action_RemoteAddress) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action_RemoteAddress.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action_RemoteAddress proto.InternalMessageInfo + +type RateLimit_Action_GenericKey struct { + DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action_GenericKey) Reset() { *m = RateLimit_Action_GenericKey{} } +func (m *RateLimit_Action_GenericKey) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action_GenericKey) ProtoMessage() {} +func (*RateLimit_Action_GenericKey) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0, 4} +} + +func (m *RateLimit_Action_GenericKey) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action_GenericKey.Unmarshal(m, b) +} +func (m *RateLimit_Action_GenericKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action_GenericKey.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action_GenericKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action_GenericKey.Merge(m, src) +} +func (m *RateLimit_Action_GenericKey) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action_GenericKey.Size(m) +} +func (m *RateLimit_Action_GenericKey) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action_GenericKey.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action_GenericKey proto.InternalMessageInfo + +func (m *RateLimit_Action_GenericKey) GetDescriptorValue() string { + if m != nil { + return m.DescriptorValue + } + return "" +} + +type RateLimit_Action_HeaderValueMatch struct { + DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"` + ExpectMatch *wrappers.BoolValue `protobuf:"bytes,2,opt,name=expect_match,json=expectMatch,proto3" json:"expect_match,omitempty"` + Headers []*HeaderMatcher `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit_Action_HeaderValueMatch) Reset() { *m = RateLimit_Action_HeaderValueMatch{} } +func (m *RateLimit_Action_HeaderValueMatch) String() string { return proto.CompactTextString(m) } +func (*RateLimit_Action_HeaderValueMatch) ProtoMessage() {} +func (*RateLimit_Action_HeaderValueMatch) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{14, 0, 5} +} + +func (m *RateLimit_Action_HeaderValueMatch) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Unmarshal(m, b) +} +func (m *RateLimit_Action_HeaderValueMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Marshal(b, m, deterministic) +} +func (m *RateLimit_Action_HeaderValueMatch) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Merge(m, src) +} +func (m *RateLimit_Action_HeaderValueMatch) XXX_Size() int { + return xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Size(m) +} +func (m *RateLimit_Action_HeaderValueMatch) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit_Action_HeaderValueMatch.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit_Action_HeaderValueMatch proto.InternalMessageInfo + +func (m *RateLimit_Action_HeaderValueMatch) GetDescriptorValue() string { + if m != nil { + return m.DescriptorValue + } + return "" +} + +func (m *RateLimit_Action_HeaderValueMatch) GetExpectMatch() *wrappers.BoolValue { + if m != nil { + return m.ExpectMatch + } + return nil +} + +func (m *RateLimit_Action_HeaderValueMatch) GetHeaders() []*HeaderMatcher { + if m != nil { + return m.Headers + } + return nil +} + +type HeaderMatcher struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to HeaderMatchSpecifier: + // *HeaderMatcher_ExactMatch + // *HeaderMatcher_RegexMatch + // *HeaderMatcher_SafeRegexMatch + // *HeaderMatcher_RangeMatch + // *HeaderMatcher_PresentMatch + // *HeaderMatcher_PrefixMatch + // *HeaderMatcher_SuffixMatch + HeaderMatchSpecifier isHeaderMatcher_HeaderMatchSpecifier `protobuf_oneof:"header_match_specifier"` + InvertMatch bool `protobuf:"varint,8,opt,name=invert_match,json=invertMatch,proto3" json:"invert_match,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HeaderMatcher) Reset() { *m = HeaderMatcher{} } +func (m *HeaderMatcher) String() string { return proto.CompactTextString(m) } +func (*HeaderMatcher) ProtoMessage() {} +func (*HeaderMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{15} +} + +func (m *HeaderMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HeaderMatcher.Unmarshal(m, b) +} +func (m *HeaderMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HeaderMatcher.Marshal(b, m, deterministic) +} +func (m *HeaderMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_HeaderMatcher.Merge(m, src) +} +func (m *HeaderMatcher) XXX_Size() int { + return xxx_messageInfo_HeaderMatcher.Size(m) +} +func (m *HeaderMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_HeaderMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_HeaderMatcher proto.InternalMessageInfo + +func (m *HeaderMatcher) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type isHeaderMatcher_HeaderMatchSpecifier interface { + isHeaderMatcher_HeaderMatchSpecifier() +} + +type HeaderMatcher_ExactMatch struct { + ExactMatch string `protobuf:"bytes,4,opt,name=exact_match,json=exactMatch,proto3,oneof"` +} + +type HeaderMatcher_RegexMatch struct { + RegexMatch string `protobuf:"bytes,5,opt,name=regex_match,json=regexMatch,proto3,oneof"` +} + +type HeaderMatcher_SafeRegexMatch struct { + SafeRegexMatch *matcher.RegexMatcher `protobuf:"bytes,11,opt,name=safe_regex_match,json=safeRegexMatch,proto3,oneof"` +} + +type HeaderMatcher_RangeMatch struct { + RangeMatch *_type.Int64Range `protobuf:"bytes,6,opt,name=range_match,json=rangeMatch,proto3,oneof"` +} + +type HeaderMatcher_PresentMatch struct { + PresentMatch bool `protobuf:"varint,7,opt,name=present_match,json=presentMatch,proto3,oneof"` +} + +type HeaderMatcher_PrefixMatch struct { + PrefixMatch string `protobuf:"bytes,9,opt,name=prefix_match,json=prefixMatch,proto3,oneof"` +} + +type HeaderMatcher_SuffixMatch struct { + SuffixMatch string `protobuf:"bytes,10,opt,name=suffix_match,json=suffixMatch,proto3,oneof"` +} + +func (*HeaderMatcher_ExactMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (*HeaderMatcher_RegexMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (*HeaderMatcher_SafeRegexMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (*HeaderMatcher_RangeMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (*HeaderMatcher_PresentMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (*HeaderMatcher_PrefixMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (*HeaderMatcher_SuffixMatch) isHeaderMatcher_HeaderMatchSpecifier() {} + +func (m *HeaderMatcher) GetHeaderMatchSpecifier() isHeaderMatcher_HeaderMatchSpecifier { + if m != nil { + return m.HeaderMatchSpecifier + } + return nil +} + +func (m *HeaderMatcher) GetExactMatch() string { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_ExactMatch); ok { + return x.ExactMatch + } + return "" +} + +// Deprecated: Do not use. +func (m *HeaderMatcher) GetRegexMatch() string { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_RegexMatch); ok { + return x.RegexMatch + } + return "" +} + +func (m *HeaderMatcher) GetSafeRegexMatch() *matcher.RegexMatcher { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_SafeRegexMatch); ok { + return x.SafeRegexMatch + } + return nil +} + +func (m *HeaderMatcher) GetRangeMatch() *_type.Int64Range { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_RangeMatch); ok { + return x.RangeMatch + } + return nil +} + +func (m *HeaderMatcher) GetPresentMatch() bool { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_PresentMatch); ok { + return x.PresentMatch + } + return false +} + +func (m *HeaderMatcher) GetPrefixMatch() string { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_PrefixMatch); ok { + return x.PrefixMatch + } + return "" +} + +func (m *HeaderMatcher) GetSuffixMatch() string { + if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_SuffixMatch); ok { + return x.SuffixMatch + } + return "" +} + +func (m *HeaderMatcher) GetInvertMatch() bool { + if m != nil { + return m.InvertMatch + } + return false +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HeaderMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*HeaderMatcher_ExactMatch)(nil), + (*HeaderMatcher_RegexMatch)(nil), + (*HeaderMatcher_SafeRegexMatch)(nil), + (*HeaderMatcher_RangeMatch)(nil), + (*HeaderMatcher_PresentMatch)(nil), + (*HeaderMatcher_PrefixMatch)(nil), + (*HeaderMatcher_SuffixMatch)(nil), + } +} + +type QueryParameterMatcher struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Deprecated: Do not use. + Regex *wrappers.BoolValue `protobuf:"bytes,4,opt,name=regex,proto3" json:"regex,omitempty"` // Deprecated: Do not use. + // Types that are valid to be assigned to QueryParameterMatchSpecifier: + // *QueryParameterMatcher_StringMatch + // *QueryParameterMatcher_PresentMatch + QueryParameterMatchSpecifier isQueryParameterMatcher_QueryParameterMatchSpecifier `protobuf_oneof:"query_parameter_match_specifier"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *QueryParameterMatcher) Reset() { *m = QueryParameterMatcher{} } +func (m *QueryParameterMatcher) String() string { return proto.CompactTextString(m) } +func (*QueryParameterMatcher) ProtoMessage() {} +func (*QueryParameterMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_a23c550601a0f392, []int{16} +} + +func (m *QueryParameterMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_QueryParameterMatcher.Unmarshal(m, b) +} +func (m *QueryParameterMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_QueryParameterMatcher.Marshal(b, m, deterministic) +} +func (m *QueryParameterMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParameterMatcher.Merge(m, src) +} +func (m *QueryParameterMatcher) XXX_Size() int { + return xxx_messageInfo_QueryParameterMatcher.Size(m) +} +func (m *QueryParameterMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParameterMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParameterMatcher proto.InternalMessageInfo + +func (m *QueryParameterMatcher) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Deprecated: Do not use. +func (m *QueryParameterMatcher) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// Deprecated: Do not use. +func (m *QueryParameterMatcher) GetRegex() *wrappers.BoolValue { + if m != nil { + return m.Regex + } + return nil +} + +type isQueryParameterMatcher_QueryParameterMatchSpecifier interface { + isQueryParameterMatcher_QueryParameterMatchSpecifier() +} + +type QueryParameterMatcher_StringMatch struct { + StringMatch *matcher.StringMatcher `protobuf:"bytes,5,opt,name=string_match,json=stringMatch,proto3,oneof"` +} + +type QueryParameterMatcher_PresentMatch struct { + PresentMatch bool `protobuf:"varint,6,opt,name=present_match,json=presentMatch,proto3,oneof"` +} + +func (*QueryParameterMatcher_StringMatch) isQueryParameterMatcher_QueryParameterMatchSpecifier() {} + +func (*QueryParameterMatcher_PresentMatch) isQueryParameterMatcher_QueryParameterMatchSpecifier() {} + +func (m *QueryParameterMatcher) GetQueryParameterMatchSpecifier() isQueryParameterMatcher_QueryParameterMatchSpecifier { + if m != nil { + return m.QueryParameterMatchSpecifier + } + return nil +} + +func (m *QueryParameterMatcher) GetStringMatch() *matcher.StringMatcher { + if x, ok := m.GetQueryParameterMatchSpecifier().(*QueryParameterMatcher_StringMatch); ok { + return x.StringMatch + } + return nil +} + +func (m *QueryParameterMatcher) GetPresentMatch() bool { + if x, ok := m.GetQueryParameterMatchSpecifier().(*QueryParameterMatcher_PresentMatch); ok { + return x.PresentMatch + } + return false +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*QueryParameterMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*QueryParameterMatcher_StringMatch)(nil), + (*QueryParameterMatcher_PresentMatch)(nil), + } +} + +func init() { + proto.RegisterEnum("envoy.api.v2.route.VirtualHost_TlsRequirementType", VirtualHost_TlsRequirementType_name, VirtualHost_TlsRequirementType_value) + proto.RegisterEnum("envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode", RouteAction_ClusterNotFoundResponseCode_name, RouteAction_ClusterNotFoundResponseCode_value) + proto.RegisterEnum("envoy.api.v2.route.RouteAction_InternalRedirectAction", RouteAction_InternalRedirectAction_name, RouteAction_InternalRedirectAction_value) + proto.RegisterEnum("envoy.api.v2.route.RedirectAction_RedirectResponseCode", RedirectAction_RedirectResponseCode_name, RedirectAction_RedirectResponseCode_value) + proto.RegisterType((*VirtualHost)(nil), "envoy.api.v2.route.VirtualHost") + proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.route.VirtualHost.PerFilterConfigEntry") + proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.route.VirtualHost.TypedPerFilterConfigEntry") + proto.RegisterType((*FilterAction)(nil), "envoy.api.v2.route.FilterAction") + proto.RegisterType((*Route)(nil), "envoy.api.v2.route.Route") + proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.route.Route.PerFilterConfigEntry") + proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.route.Route.TypedPerFilterConfigEntry") + proto.RegisterType((*WeightedCluster)(nil), "envoy.api.v2.route.WeightedCluster") + proto.RegisterType((*WeightedCluster_ClusterWeight)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight") + proto.RegisterMapType((map[string]*_struct.Struct)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight.PerFilterConfigEntry") + proto.RegisterMapType((map[string]*any.Any)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry") + proto.RegisterType((*RouteMatch)(nil), "envoy.api.v2.route.RouteMatch") + proto.RegisterType((*RouteMatch_GrpcRouteMatchOptions)(nil), "envoy.api.v2.route.RouteMatch.GrpcRouteMatchOptions") + proto.RegisterType((*RouteMatch_TlsContextMatchOptions)(nil), "envoy.api.v2.route.RouteMatch.TlsContextMatchOptions") + proto.RegisterType((*CorsPolicy)(nil), "envoy.api.v2.route.CorsPolicy") + proto.RegisterType((*RouteAction)(nil), "envoy.api.v2.route.RouteAction") + proto.RegisterType((*RouteAction_RequestMirrorPolicy)(nil), "envoy.api.v2.route.RouteAction.RequestMirrorPolicy") + proto.RegisterType((*RouteAction_HashPolicy)(nil), "envoy.api.v2.route.RouteAction.HashPolicy") + proto.RegisterType((*RouteAction_HashPolicy_Header)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Header") + proto.RegisterType((*RouteAction_HashPolicy_Cookie)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Cookie") + proto.RegisterType((*RouteAction_HashPolicy_ConnectionProperties)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.ConnectionProperties") + proto.RegisterType((*RouteAction_HashPolicy_QueryParameter)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.QueryParameter") + proto.RegisterType((*RouteAction_HashPolicy_FilterState)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.FilterState") + proto.RegisterType((*RouteAction_UpgradeConfig)(nil), "envoy.api.v2.route.RouteAction.UpgradeConfig") + proto.RegisterType((*RetryPolicy)(nil), "envoy.api.v2.route.RetryPolicy") + proto.RegisterType((*RetryPolicy_RetryPriority)(nil), "envoy.api.v2.route.RetryPolicy.RetryPriority") + proto.RegisterType((*RetryPolicy_RetryHostPredicate)(nil), "envoy.api.v2.route.RetryPolicy.RetryHostPredicate") + proto.RegisterType((*RetryPolicy_RetryBackOff)(nil), "envoy.api.v2.route.RetryPolicy.RetryBackOff") + proto.RegisterType((*HedgePolicy)(nil), "envoy.api.v2.route.HedgePolicy") + proto.RegisterType((*RedirectAction)(nil), "envoy.api.v2.route.RedirectAction") + proto.RegisterType((*DirectResponseAction)(nil), "envoy.api.v2.route.DirectResponseAction") + proto.RegisterType((*Decorator)(nil), "envoy.api.v2.route.Decorator") + proto.RegisterType((*Tracing)(nil), "envoy.api.v2.route.Tracing") + proto.RegisterType((*VirtualCluster)(nil), "envoy.api.v2.route.VirtualCluster") + proto.RegisterType((*RateLimit)(nil), "envoy.api.v2.route.RateLimit") + proto.RegisterType((*RateLimit_Action)(nil), "envoy.api.v2.route.RateLimit.Action") + proto.RegisterType((*RateLimit_Action_SourceCluster)(nil), "envoy.api.v2.route.RateLimit.Action.SourceCluster") + proto.RegisterType((*RateLimit_Action_DestinationCluster)(nil), "envoy.api.v2.route.RateLimit.Action.DestinationCluster") + proto.RegisterType((*RateLimit_Action_RequestHeaders)(nil), "envoy.api.v2.route.RateLimit.Action.RequestHeaders") + proto.RegisterType((*RateLimit_Action_RemoteAddress)(nil), "envoy.api.v2.route.RateLimit.Action.RemoteAddress") + proto.RegisterType((*RateLimit_Action_GenericKey)(nil), "envoy.api.v2.route.RateLimit.Action.GenericKey") + proto.RegisterType((*RateLimit_Action_HeaderValueMatch)(nil), "envoy.api.v2.route.RateLimit.Action.HeaderValueMatch") + proto.RegisterType((*HeaderMatcher)(nil), "envoy.api.v2.route.HeaderMatcher") + proto.RegisterType((*QueryParameterMatcher)(nil), "envoy.api.v2.route.QueryParameterMatcher") +} + +func init() { + proto.RegisterFile("envoy/api/v2/route/route_components.proto", fileDescriptor_a23c550601a0f392) +} + +var fileDescriptor_a23c550601a0f392 = []byte{ + // 4549 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4b, 0x70, 0x24, 0x47, + 0x5a, 0x56, 0xa9, 0x5b, 0xfd, 0xf8, 0xfb, 0xa1, 0x52, 0xea, 0xd5, 0xd3, 0xe3, 0x99, 0xd1, 0xb4, + 0xd7, 0xbb, 0xf2, 0xd8, 0x96, 0xb0, 0x66, 0xfc, 0x5e, 0xef, 0x5a, 0xa5, 0xd1, 0xb8, 0xa5, 0xd1, + 0x48, 0x22, 0xa5, 0x99, 0xc5, 0x18, 0x6f, 0x51, 0xd3, 0x95, 0x6a, 0xd5, 0x4e, 0x77, 0x55, 0x39, + 0x2b, 0x5b, 0x23, 0xdd, 0x1c, 0x7b, 0x04, 0x22, 0x00, 0x9f, 0xb8, 0x70, 0xe1, 0xc0, 0xc1, 0x04, + 0x41, 0x04, 0x27, 0x82, 0xd3, 0x9e, 0x08, 0x1f, 0xb8, 0x00, 0x17, 0x82, 0x08, 0x82, 0x1b, 0xc1, + 0x89, 0x83, 0xb9, 0x10, 0x03, 0x41, 0x10, 0xf9, 0xa8, 0x57, 0x77, 0x49, 0x2d, 0x39, 0x36, 0x1c, + 0x6c, 0x70, 0xb1, 0x55, 0x99, 0xdf, 0xff, 0x65, 0x76, 0x66, 0xfe, 0xcf, 0xcc, 0x81, 0x57, 0x89, + 0x7b, 0xe2, 0x9d, 0xad, 0x5a, 0xbe, 0xb3, 0x7a, 0xb2, 0xb6, 0x4a, 0xbd, 0x01, 0x23, 0xf2, 0xbf, + 0x66, 0xc7, 0xeb, 0xfb, 0x9e, 0x4b, 0x5c, 0x16, 0xac, 0xf8, 0xd4, 0x63, 0x1e, 0x42, 0x02, 0xba, + 0x62, 0xf9, 0xce, 0xca, 0xc9, 0xda, 0x8a, 0x00, 0x35, 0x5f, 0x4a, 0x89, 0x77, 0x3c, 0x4a, 0x56, + 0x9f, 0x5a, 0x01, 0x91, 0x12, 0xcd, 0x9b, 0xb2, 0x97, 0x9d, 0xf9, 0x64, 0xb5, 0x6f, 0xb1, 0xce, + 0x31, 0xa1, 0xab, 0x94, 0x74, 0xc9, 0xa9, 0xea, 0xbf, 0x95, 0xd1, 0x1f, 0x30, 0xea, 0xb8, 0x5d, + 0x05, 0x68, 0x24, 0x00, 0x3e, 0xa1, 0x1d, 0xe2, 0x32, 0xd5, 0xb3, 0x90, 0xe8, 0xa1, 0x96, 0xdb, + 0x0d, 0x87, 0xfc, 0x7e, 0xa2, 0x9d, 0x51, 0xab, 0xe3, 0xb8, 0x5d, 0x31, 0xb3, 0x41, 0xc0, 0xbc, + 0xbe, 0xc9, 0xac, 0x90, 0xf9, 0x5a, 0xd7, 0xf3, 0xba, 0x3d, 0xb2, 0x2a, 0xbe, 0x9e, 0x0e, 0x8e, + 0x56, 0x2d, 0xf7, 0x2c, 0x9c, 0xf5, 0x70, 0x97, 0x3d, 0xa0, 0x16, 0x73, 0x3c, 0x57, 0xf5, 0xbf, + 0x34, 0xdc, 0x1f, 0x30, 0x3a, 0xe8, 0xb0, 0xf3, 0xa4, 0x9f, 0x53, 0xcb, 0xf7, 0x09, 0x55, 0xab, + 0xd8, 0x7c, 0x59, 0xad, 0x98, 0xeb, 0x7a, 0x4c, 0xb0, 0x06, 0xab, 0x36, 0xf1, 0x29, 0xe9, 0x24, + 0x87, 0xb8, 0x39, 0xb0, 0x7d, 0x2b, 0x85, 0xe9, 0x3b, 0x5d, 0x6a, 0xb1, 0xf0, 0x57, 0xde, 0x18, + 0xe9, 0x0f, 0x98, 0xc5, 0x06, 0xe1, 0x18, 0x8b, 0x27, 0x56, 0xcf, 0xb1, 0x2d, 0x46, 0x56, 0xc3, + 0x3f, 0x64, 0x47, 0xeb, 0x0f, 0x6b, 0x50, 0x79, 0xe2, 0x50, 0x36, 0xb0, 0x7a, 0x6d, 0x2f, 0x60, + 0xe8, 0x3a, 0xe4, 0x5d, 0xab, 0x4f, 0x1a, 0xda, 0x92, 0xb6, 0x5c, 0x36, 0x8a, 0x2f, 0x8c, 0x3c, + 0x9d, 0x5c, 0xd2, 0xb0, 0x68, 0x44, 0xaf, 0x43, 0xd1, 0xf6, 0xfa, 0x96, 0xe3, 0x06, 0x8d, 0xc9, + 0xa5, 0xdc, 0x72, 0xd9, 0x40, 0x2f, 0x8c, 0xe9, 0x2f, 0xb5, 0x6a, 0x49, 0x6b, 0x95, 0x68, 0xe1, + 0x17, 0xda, 0xe4, 0xd7, 0xda, 0x04, 0x0e, 0x21, 0xe8, 0x4d, 0x28, 0x88, 0x23, 0x11, 0x34, 0x72, + 0x4b, 0xb9, 0xe5, 0xca, 0xda, 0xb5, 0x95, 0xd1, 0xe3, 0xb2, 0x82, 0xf9, 0x7f, 0xb1, 0x02, 0xa2, + 0xcf, 0xa0, 0x42, 0xc9, 0xe7, 0x03, 0x87, 0x12, 0x93, 0xf5, 0x82, 0x46, 0x7e, 0x49, 0x5b, 0xae, + 0xaf, 0xad, 0x65, 0xc9, 0x25, 0xe6, 0xbc, 0x72, 0xd8, 0x0b, 0xb0, 0x94, 0xea, 0x13, 0x97, 0x1d, + 0x9e, 0xf9, 0xc4, 0x28, 0xbd, 0x30, 0xa6, 0x7e, 0xae, 0x4d, 0xea, 0x1a, 0x06, 0x45, 0x78, 0xd8, + 0x0b, 0xd0, 0x23, 0xd0, 0x4f, 0xa4, 0x9c, 0xd9, 0xe9, 0x0d, 0x02, 0x46, 0x68, 0xd0, 0x98, 0x12, + 0x73, 0x6b, 0x5d, 0x30, 0xc6, 0x86, 0x84, 0xe2, 0xe9, 0x93, 0xd4, 0x77, 0x80, 0x7e, 0x04, 0x15, + 0xbe, 0x03, 0x66, 0xcf, 0xe9, 0x3b, 0x2c, 0x68, 0x14, 0x04, 0xd3, 0x8d, 0xcc, 0x5f, 0x69, 0x31, + 0xb2, 0xc3, 0x51, 0x18, 0x68, 0xf8, 0x67, 0x80, 0x6c, 0x58, 0xe0, 0x93, 0x23, 0x01, 0x33, 0x8f, + 0x89, 0x65, 0x13, 0x1a, 0x98, 0xcc, 0x33, 0x2d, 0xdb, 0x6e, 0x14, 0x05, 0xd5, 0xf7, 0xd2, 0x54, + 0x5c, 0x97, 0x56, 0xda, 0x02, 0xf8, 0xc4, 0xea, 0x0d, 0xc8, 0x9e, 0xcf, 0x37, 0xda, 0x28, 0xbf, + 0x30, 0x0a, 0x5f, 0x6a, 0x39, 0xfd, 0xdf, 0x8a, 0x78, 0x56, 0xd1, 0x49, 0x50, 0x70, 0xe8, 0xad, + 0xdb, 0x36, 0x7a, 0x0f, 0xae, 0x65, 0x8c, 0x42, 0x49, 0xdf, 0x3b, 0x21, 0x8d, 0x1a, 0xdf, 0x46, + 0xbc, 0x30, 0x2c, 0x87, 0x45, 0x2f, 0x3a, 0x82, 0x45, 0x4a, 0x02, 0xdf, 0x73, 0x03, 0x32, 0x3c, + 0x43, 0xf8, 0x76, 0x33, 0x9c, 0x0b, 0xf9, 0x52, 0x53, 0xfc, 0x00, 0x9a, 0x59, 0xe3, 0xa8, 0x39, + 0x56, 0xc4, 0x1c, 0x17, 0x47, 0x24, 0xd5, 0x24, 0xd7, 0x20, 0xdf, 0xf1, 0x68, 0xd0, 0x28, 0x2d, + 0x69, 0xcb, 0x95, 0xb5, 0x9b, 0x59, 0xcb, 0xbf, 0xe1, 0xd1, 0x60, 0xdf, 0xeb, 0x39, 0x9d, 0x33, + 0x2c, 0xb0, 0xc8, 0x86, 0x19, 0x9f, 0x50, 0xf3, 0xc8, 0xe9, 0x31, 0x42, 0xcd, 0x8e, 0xe7, 0x1e, + 0x39, 0xdd, 0x46, 0x55, 0xfc, 0xa4, 0x7b, 0xe3, 0x4e, 0xdb, 0x3e, 0xa1, 0x0f, 0x84, 0xdc, 0x86, + 0x10, 0xdb, 0x74, 0x19, 0x3d, 0x33, 0x26, 0x1b, 0x1a, 0x9e, 0xf6, 0xd3, 0x3d, 0xc8, 0x87, 0x45, + 0x6e, 0x75, 0x6c, 0x73, 0x74, 0xac, 0x69, 0x31, 0xd6, 0x7b, 0x63, 0x4f, 0x36, 0x17, 0xcf, 0x1a, + 0x10, 0xcf, 0xb1, 0x8c, 0x2e, 0xb4, 0x0e, 0x37, 0x1c, 0xb7, 0xd3, 0x1b, 0xd8, 0xc4, 0x0c, 0xf7, + 0xdc, 0x62, 0x8c, 0xf4, 0x7d, 0x66, 0x76, 0xbc, 0x81, 0xcb, 0x1a, 0xf5, 0x25, 0x6d, 0xb9, 0x84, + 0x9b, 0x0a, 0x84, 0x25, 0x66, 0x5d, 0x42, 0x36, 0x38, 0x02, 0xb5, 0xe1, 0x76, 0x48, 0x91, 0x12, + 0x35, 0x1d, 0xd7, 0x0c, 0xb7, 0xa0, 0x31, 0x2b, 0x68, 0xc2, 0xb1, 0x92, 0xf2, 0x5b, 0x2e, 0x56, + 0x20, 0x64, 0x40, 0x95, 0x12, 0x46, 0xcf, 0x4c, 0x5f, 0x2c, 0x7d, 0x43, 0x17, 0x1b, 0x74, 0x2b, + 0x53, 0x3f, 0x38, 0x4e, 0xed, 0x50, 0x85, 0xc6, 0x1f, 0x68, 0x8f, 0x1f, 0xde, 0x98, 0xc3, 0x94, + 0xeb, 0xa9, 0x16, 0x71, 0x4e, 0x10, 0xce, 0xad, 0x48, 0xfb, 0xba, 0x12, 0xda, 0xd7, 0x95, 0x75, + 0xf7, 0x8c, 0x1f, 0xe9, 0x88, 0x45, 0xac, 0xa2, 0x5a, 0x21, 0x03, 0xaa, 0xc7, 0xc4, 0xee, 0x92, + 0x70, 0x52, 0x33, 0xe7, 0x4f, 0xaa, 0xcd, 0x71, 0xe1, 0xa4, 0x8e, 0xe3, 0x0f, 0xf4, 0xdb, 0x70, + 0x93, 0xef, 0x68, 0xb8, 0xc2, 0x4f, 0x07, 0x47, 0x47, 0x84, 0x4a, 0x2b, 0x60, 0x3e, 0x3d, 0xe3, + 0x06, 0x0f, 0x09, 0xd6, 0x97, 0x46, 0x66, 0xf6, 0x78, 0xcb, 0x65, 0x77, 0xd7, 0x84, 0x6e, 0xe0, + 0xa6, 0x4f, 0xa8, 0xda, 0x00, 0x43, 0x30, 0x08, 0xab, 0x60, 0x70, 0xf9, 0xe6, 0xa7, 0x30, 0x97, + 0xb5, 0xeb, 0x48, 0x87, 0xdc, 0x33, 0x72, 0x26, 0x8d, 0x33, 0xe6, 0x7f, 0xa2, 0x37, 0x60, 0xea, + 0x84, 0xd3, 0x35, 0x26, 0xc5, 0x90, 0x8b, 0x23, 0x43, 0x1e, 0x08, 0x57, 0x84, 0x25, 0xea, 0xfd, + 0xc9, 0x77, 0xb5, 0xe6, 0x67, 0x70, 0xed, 0xdc, 0x73, 0x95, 0x31, 0xc2, 0x9d, 0xf4, 0x08, 0xd9, + 0xcb, 0x1d, 0xd3, 0xb7, 0xde, 0x07, 0x34, 0x6a, 0x90, 0x51, 0x09, 0xf2, 0xbb, 0x7b, 0xbb, 0x9b, + 0xfa, 0x04, 0x9a, 0x81, 0xda, 0xe6, 0x6f, 0x1c, 0x6e, 0xe2, 0xdd, 0xf5, 0x1d, 0x73, 0x6f, 0x77, + 0xe7, 0x13, 0x5d, 0x43, 0x45, 0xc8, 0xad, 0xef, 0xec, 0xe8, 0x93, 0xdb, 0xf9, 0x52, 0x59, 0x87, + 0xd6, 0x0f, 0xa1, 0x2a, 0x27, 0xb6, 0xde, 0xe1, 0xf6, 0x03, 0xbd, 0x0e, 0x05, 0x4b, 0xfc, 0x25, + 0xa6, 0x75, 0xde, 0x14, 0x14, 0xa6, 0xf5, 0xaf, 0x00, 0x53, 0xc2, 0xab, 0x20, 0xa4, 0x7c, 0x59, + 0x5d, 0xfc, 0x18, 0xe9, 0xc2, 0x7e, 0x04, 0x53, 0x22, 0xae, 0x50, 0x54, 0x37, 0xcf, 0xf5, 0x49, + 0x8f, 0x38, 0x4a, 0xf8, 0x91, 0xdf, 0x11, 0x7e, 0x44, 0x8a, 0xa1, 0x77, 0x60, 0x4a, 0x80, 0xd4, + 0x6a, 0xdc, 0x3a, 0x57, 0x5e, 0xce, 0xbd, 0x3d, 0x81, 0x25, 0x1e, 0x7d, 0x04, 0x25, 0x4a, 0x6c, + 0x87, 0x92, 0x0e, 0x6b, 0xe4, 0x84, 0x6c, 0x2b, 0x5b, 0x13, 0x24, 0x26, 0x12, 0x8f, 0xa4, 0xd0, + 0x01, 0x4c, 0xcb, 0xbf, 0x62, 0x3d, 0x2c, 0x0a, 0xa2, 0xe5, 0x2c, 0xa2, 0xfb, 0x02, 0x1a, 0x2a, + 0x63, 0x44, 0x57, 0xb7, 0x53, 0xed, 0xe8, 0x63, 0xa8, 0x29, 0xcb, 0xa4, 0x96, 0x58, 0x2a, 0xc4, + 0x52, 0x16, 0x65, 0x72, 0x53, 0xda, 0x13, 0xb8, 0x7a, 0x94, 0xdc, 0xa4, 0x77, 0xa0, 0xd4, 0x27, + 0xcc, 0xb2, 0x2d, 0x66, 0x09, 0xbf, 0x5d, 0x59, 0xbb, 0x9e, 0xe1, 0x1c, 0x1e, 0x29, 0x08, 0x8e, + 0xc0, 0xe8, 0x03, 0x28, 0xdb, 0xa4, 0xe3, 0x51, 0x8b, 0x79, 0xb4, 0x31, 0x25, 0x24, 0x33, 0x7d, + 0xe8, 0xfd, 0x10, 0x84, 0x63, 0x3c, 0xfa, 0x69, 0x96, 0x21, 0x2f, 0x09, 0xe3, 0xba, 0x72, 0xee, + 0xd6, 0x5c, 0xc1, 0x84, 0xff, 0xec, 0x7c, 0x13, 0x5e, 0x13, 0xa3, 0xdc, 0x3d, 0x7f, 0x94, 0xab, + 0x1a, 0xef, 0xf3, 0xc3, 0x81, 0xf2, 0x77, 0x15, 0x0e, 0x54, 0x7f, 0xf5, 0xc3, 0x81, 0xb7, 0xa0, + 0xa8, 0xa2, 0xfc, 0xc6, 0x74, 0xd6, 0x31, 0x94, 0x3b, 0x74, 0x28, 0x21, 0x38, 0xc4, 0x5e, 0xc2, + 0xa6, 0xeb, 0xff, 0x7f, 0x6d, 0xba, 0x51, 0x0b, 0x2d, 0x30, 0xca, 0xfd, 0xa7, 0xa1, 0x6d, 0xe7, + 0x4b, 0x05, 0xbd, 0xd8, 0xfa, 0x83, 0x32, 0x4c, 0xff, 0x84, 0x38, 0xdd, 0x63, 0x46, 0x6c, 0x15, + 0x13, 0xa3, 0x9f, 0x40, 0x29, 0x8a, 0xac, 0x35, 0x71, 0x26, 0xde, 0xcc, 0x5a, 0xfe, 0x21, 0xb1, + 0x15, 0xf5, 0x7f, 0xd9, 0x2c, 0x8c, 0xee, 0x97, 0xda, 0x64, 0x49, 0xc3, 0x11, 0x19, 0x6a, 0x43, + 0x95, 0x79, 0xcc, 0xea, 0x99, 0xcf, 0x05, 0x46, 0x99, 0xd0, 0x0b, 0x77, 0x43, 0x64, 0x2f, 0x77, + 0x26, 0x97, 0x35, 0x5c, 0x11, 0xa2, 0x92, 0x1d, 0xbd, 0x0e, 0x88, 0x0e, 0x5c, 0xe6, 0xf4, 0x89, + 0xf9, 0x8c, 0x9c, 0x99, 0x3e, 0x25, 0x47, 0xce, 0xa9, 0x58, 0x88, 0x32, 0xd6, 0x55, 0xcf, 0x43, + 0x72, 0xb6, 0x2f, 0xda, 0x9b, 0x7f, 0x56, 0x84, 0x5a, 0x6a, 0x76, 0x17, 0x67, 0x48, 0xf7, 0xa0, + 0xa0, 0x26, 0x38, 0x79, 0x89, 0xe3, 0xa2, 0xb0, 0xc8, 0x80, 0x7a, 0x68, 0x0e, 0x4d, 0xe9, 0x9d, + 0x72, 0xe3, 0x2d, 0x68, 0x2d, 0x14, 0x11, 0x9e, 0xea, 0x02, 0xeb, 0x91, 0xff, 0xae, 0xac, 0x47, + 0xf9, 0xdb, 0x5a, 0x8f, 0xa9, 0xef, 0xce, 0x7a, 0x14, 0x2e, 0xb6, 0x1e, 0x27, 0xe7, 0xfb, 0x93, + 0x07, 0x57, 0x3e, 0xc8, 0x57, 0xf0, 0x33, 0x3f, 0xd7, 0xce, 0x77, 0x34, 0xd2, 0xb6, 0x3e, 0xbc, + 0xfa, 0xf0, 0x57, 0x74, 0x40, 0xbf, 0xca, 0x16, 0x6a, 0x3b, 0x5f, 0x2a, 0xea, 0xa5, 0xd6, 0xd7, + 0x05, 0x80, 0x38, 0x7a, 0x43, 0x0d, 0x28, 0x28, 0xf5, 0x16, 0xcc, 0xed, 0x09, 0xac, 0xbe, 0xd1, + 0x1c, 0xe4, 0x7d, 0x8b, 0x1d, 0x4b, 0xb5, 0x6f, 0x4f, 0x60, 0xf1, 0x85, 0x96, 0x61, 0x4a, 0x14, + 0xa3, 0x84, 0xfa, 0x95, 0x0d, 0xfd, 0x85, 0x31, 0x45, 0x73, 0xcb, 0x5f, 0x94, 0xfe, 0xea, 0xdf, + 0xbf, 0xf9, 0xfb, 0x29, 0xad, 0xa1, 0x89, 0x68, 0x8e, 0x03, 0xd0, 0x43, 0x80, 0xc0, 0x3a, 0xe2, + 0x59, 0x16, 0x87, 0x43, 0x2a, 0x66, 0xe2, 0x6b, 0xbb, 0xa2, 0x8a, 0x57, 0x2b, 0x98, 0x03, 0x1e, + 0xc9, 0x8f, 0x38, 0x9a, 0x6c, 0x4f, 0xe0, 0x32, 0x97, 0x17, 0xbd, 0x68, 0x1d, 0xea, 0x1d, 0x2b, + 0x20, 0x66, 0x40, 0xdc, 0xc0, 0x61, 0xce, 0x09, 0x51, 0x01, 0x54, 0x73, 0xe4, 0x47, 0x1b, 0x9e, + 0xd7, 0x93, 0xa6, 0xa3, 0xc6, 0x25, 0x0e, 0x42, 0x01, 0xf4, 0x04, 0x42, 0xd3, 0x65, 0x1e, 0x51, + 0x15, 0xc9, 0x95, 0x05, 0xc9, 0x6b, 0x19, 0x5a, 0x85, 0x25, 0xf4, 0x81, 0x42, 0x5a, 0xbd, 0x7d, + 0x59, 0x49, 0xc3, 0xd3, 0x34, 0xdd, 0x83, 0x3e, 0x80, 0xa2, 0xd2, 0x21, 0x55, 0xde, 0xb8, 0x9d, + 0x9d, 0x29, 0x71, 0x88, 0xfa, 0x95, 0x38, 0x94, 0x40, 0x87, 0xa0, 0x7f, 0x3e, 0x20, 0x3c, 0x79, + 0xb3, 0xa8, 0xd5, 0x27, 0xc2, 0x29, 0xc8, 0xca, 0xc6, 0xab, 0x59, 0x2c, 0xbf, 0xce, 0xb1, 0xfb, + 0x21, 0x34, 0x64, 0x9b, 0xfe, 0x3c, 0xd5, 0xcc, 0x3d, 0x41, 0xbe, 0x4b, 0xfd, 0x8e, 0xca, 0xf7, + 0xef, 0x5d, 0x1c, 0xc0, 0xaf, 0x7c, 0x4c, 0xfd, 0x4e, 0xfc, 0x29, 0x6d, 0x48, 0x80, 0x05, 0x03, + 0x7a, 0x02, 0x15, 0xd6, 0x0b, 0xb8, 0x9a, 0x31, 0x72, 0xca, 0x1a, 0x15, 0x41, 0xf8, 0xd6, 0x18, + 0xc2, 0xc3, 0x5e, 0xb0, 0x21, 0x05, 0x52, 0x8c, 0xc0, 0xa2, 0xf6, 0xe6, 0x22, 0xcc, 0x67, 0x0e, + 0xdb, 0xfc, 0x3d, 0x0d, 0x16, 0xb2, 0xe5, 0xd1, 0xbb, 0x50, 0xf6, 0x29, 0x09, 0x88, 0xcb, 0x88, + 0xad, 0x72, 0x93, 0x8b, 0xb6, 0x3f, 0x06, 0x73, 0xc9, 0xb0, 0xa6, 0x67, 0x2b, 0x6d, 0xb9, 0x50, + 0x32, 0x02, 0x1b, 0xf3, 0x50, 0xe7, 0xc7, 0xde, 0x0c, 0x7c, 0xd2, 0x71, 0x8e, 0x1c, 0x42, 0x43, + 0xef, 0x3e, 0xa5, 0x17, 0x5a, 0x5f, 0x4d, 0x01, 0xc4, 0x75, 0x13, 0xf4, 0x1a, 0x54, 0xad, 0x5e, + 0xcf, 0x7b, 0x6e, 0x7a, 0xd4, 0xe9, 0x3a, 0xae, 0x70, 0xee, 0x65, 0x23, 0xd2, 0x0c, 0x5c, 0x11, + 0xbd, 0x7b, 0xa2, 0x13, 0x7d, 0x08, 0x28, 0x09, 0x56, 0x5a, 0x52, 0x12, 0x22, 0xd3, 0x2f, 0x0c, + 0xf8, 0x52, 0x2b, 0xb6, 0xa4, 0x66, 0x35, 0x34, 0xac, 0x27, 0x24, 0xa5, 0x3e, 0xfc, 0x16, 0x5c, + 0x4b, 0x89, 0xcb, 0x02, 0xb0, 0xf2, 0x8c, 0x95, 0xd4, 0x31, 0x4c, 0xe9, 0xda, 0x81, 0xc0, 0x85, + 0x07, 0x67, 0x21, 0xc1, 0x9b, 0xe8, 0x41, 0x2f, 0x43, 0x4d, 0xb2, 0xf7, 0x09, 0x3b, 0xf6, 0xec, + 0x40, 0xb9, 0x7e, 0xf9, 0xf3, 0x1e, 0xc9, 0xb6, 0x18, 0x14, 0x9e, 0xfe, 0x5c, 0x02, 0xa4, 0x9c, + 0x06, 0x7a, 0x05, 0xea, 0xe4, 0xd4, 0xf7, 0x62, 0x3f, 0x23, 0xf4, 0xb6, 0x8c, 0x6b, 0xb2, 0x35, + 0x84, 0x2d, 0x42, 0xb1, 0x6f, 0x9d, 0x9a, 0x56, 0x97, 0x88, 0xf4, 0xa6, 0x8c, 0x0b, 0x7d, 0xeb, + 0x74, 0xbd, 0xcb, 0x73, 0xaf, 0x19, 0x39, 0x48, 0x87, 0x12, 0x9b, 0xb8, 0xcc, 0xb1, 0x7a, 0x5c, + 0xcd, 0xc6, 0xed, 0xa0, 0x5c, 0xb0, 0x8d, 0x58, 0x06, 0x7d, 0x04, 0x45, 0xe2, 0x5a, 0x4f, 0x7b, + 0xc4, 0x56, 0x19, 0xe1, 0x05, 0xe2, 0x46, 0xd2, 0x9a, 0x85, 0x62, 0xe8, 0x10, 0xea, 0xca, 0xe9, + 0x84, 0x44, 0x57, 0xb7, 0x1e, 0xed, 0x09, 0xac, 0x72, 0xc9, 0x4d, 0xc5, 0x8a, 0xa1, 0x1e, 0x1c, + 0x5b, 0xb6, 0xf7, 0x3c, 0x62, 0x85, 0xab, 0xdb, 0xa4, 0x9a, 0xa4, 0x50, 0x9c, 0xc6, 0x2c, 0xcc, + 0x28, 0xb2, 0xf8, 0xdc, 0xb6, 0xfe, 0xeb, 0x3a, 0x54, 0x12, 0x59, 0x37, 0x7a, 0x19, 0x8a, 0x2a, + 0x72, 0x1c, 0x0a, 0xd3, 0xf8, 0x6f, 0x56, 0x3d, 0xe8, 0x6d, 0xa8, 0xab, 0x3f, 0xd5, 0xfe, 0xc9, + 0x93, 0x60, 0xd4, 0x5e, 0x18, 0x40, 0x4b, 0x4b, 0xda, 0x2f, 0x34, 0xed, 0x6b, 0x6d, 0x82, 0xff, + 0x2a, 0x05, 0x93, 0x1b, 0x8a, 0x30, 0xcc, 0x3c, 0x57, 0x7e, 0x37, 0x2e, 0x23, 0xcb, 0x80, 0xed, + 0xe5, 0x4b, 0x38, 0xe9, 0xf6, 0x04, 0xd6, 0x9f, 0xa7, 0x9b, 0x02, 0xf4, 0xbb, 0x1a, 0xdc, 0x0a, + 0x27, 0xe3, 0x7a, 0xcc, 0x3c, 0xf2, 0x06, 0xae, 0x1d, 0xe5, 0xf9, 0x66, 0xc7, 0xb3, 0x89, 0x28, + 0x77, 0xd5, 0xd7, 0x3e, 0x18, 0x53, 0x71, 0x08, 0x63, 0x80, 0x5d, 0x8f, 0x3d, 0xe0, 0x24, 0x61, + 0xa6, 0xbf, 0xe1, 0xd9, 0xc9, 0xb2, 0xf8, 0xf5, 0xce, 0xf9, 0xb0, 0x8c, 0x78, 0x34, 0x7f, 0xe5, + 0x78, 0x74, 0x0d, 0xea, 0xd2, 0xd7, 0x9a, 0x94, 0x3c, 0xa7, 0x0e, 0x53, 0x87, 0xdf, 0xa8, 0xbc, + 0x30, 0xe2, 0xbb, 0x82, 0x9a, 0x84, 0x60, 0x89, 0x40, 0xfb, 0x50, 0x13, 0xa6, 0x22, 0x12, 0x59, + 0x4a, 0x1d, 0x97, 0x73, 0x1c, 0xeb, 0xba, 0x6b, 0x1f, 0x0c, 0x9e, 0x06, 0xcc, 0x61, 0x03, 0x46, + 0x70, 0x55, 0x30, 0x84, 0x8c, 0x3b, 0x50, 0x3d, 0xf6, 0x02, 0x16, 0x11, 0x16, 0xc4, 0x1c, 0x7e, + 0x90, 0x98, 0xc3, 0x37, 0x7f, 0xf4, 0x3f, 0xbf, 0x3f, 0xb5, 0x00, 0x73, 0x49, 0x98, 0xd9, 0x73, + 0x18, 0xa1, 0x56, 0xaf, 0xad, 0xe1, 0x0a, 0x6f, 0x0f, 0xd9, 0xda, 0x30, 0x63, 0x0d, 0x98, 0x67, + 0xa6, 0x28, 0xc7, 0x6a, 0x5c, 0x5b, 0xc3, 0xd3, 0x5c, 0xac, 0x9d, 0x60, 0xb2, 0xa0, 0x31, 0xc2, + 0x14, 0x9e, 0xc2, 0x1b, 0x62, 0x8e, 0xdf, 0x57, 0x73, 0xd4, 0xc2, 0x39, 0xce, 0xc3, 0x6c, 0x06, + 0xba, 0xad, 0xe1, 0xf9, 0x21, 0x72, 0x75, 0x4c, 0xef, 0x42, 0x91, 0x2b, 0x94, 0x37, 0x60, 0xca, + 0x55, 0x5e, 0x1b, 0x99, 0xe2, 0x7d, 0x75, 0x8d, 0x85, 0x43, 0x24, 0xfa, 0x21, 0x54, 0x1d, 0xbb, + 0x47, 0xcc, 0x50, 0xb2, 0x31, 0x4e, 0xb2, 0xc2, 0xe1, 0x87, 0x4a, 0x7a, 0xb8, 0xe2, 0x5b, 0xfe, + 0x65, 0x57, 0x7c, 0x6f, 0x7f, 0x8b, 0x8a, 0xef, 0x33, 0x98, 0x0f, 0x53, 0x96, 0xbe, 0x43, 0xa9, + 0x47, 0xc3, 0xd9, 0x49, 0x5b, 0x74, 0x77, 0x9c, 0x3e, 0xa9, 0x7c, 0xfe, 0x91, 0x90, 0x95, 0xf4, + 0x22, 0x86, 0x0f, 0xf3, 0xa3, 0x64, 0x07, 0x7a, 0xc6, 0x93, 0x9c, 0xd1, 0xc1, 0x1c, 0x12, 0x34, + 0x6e, 0x8e, 0xa9, 0x17, 0x9d, 0x3f, 0x1c, 0x9e, 0x1f, 0x1d, 0xca, 0x21, 0x3c, 0x12, 0x2a, 0xf9, + 0xd4, 0xf1, 0xa8, 0xc3, 0xce, 0x44, 0xf0, 0x52, 0x1f, 0x2e, 0x29, 0x4a, 0xc3, 0xea, 0x0d, 0x98, + 0xe3, 0x76, 0xf7, 0x15, 0x32, 0x61, 0x03, 0x22, 0xe9, 0xe1, 0x9b, 0xac, 0xda, 0x55, 0x6f, 0xb2, + 0xf6, 0x60, 0x21, 0xbc, 0x34, 0x38, 0x39, 0x36, 0x93, 0x54, 0xf5, 0xb1, 0xee, 0x6c, 0x56, 0x49, + 0x3e, 0x39, 0xc6, 0x31, 0xe1, 0x43, 0xa8, 0x1c, 0x5b, 0xc1, 0x71, 0xb8, 0x55, 0xf2, 0xba, 0xe4, + 0xce, 0xb8, 0xb5, 0x6b, 0x5b, 0xc1, 0xb1, 0x5a, 0x32, 0x38, 0x8e, 0xfe, 0x8e, 0x6e, 0x88, 0x66, + 0xae, 0x70, 0x43, 0xb4, 0x01, 0x3a, 0x77, 0xda, 0x3c, 0x4e, 0x8c, 0x94, 0x61, 0x71, 0x9c, 0x32, + 0xd4, 0xfb, 0xd6, 0x29, 0x8f, 0xfc, 0x42, 0x7d, 0xd8, 0x82, 0xd9, 0x24, 0x81, 0xe9, 0x1d, 0x1d, + 0x05, 0x84, 0x35, 0x5e, 0x1a, 0xc7, 0x33, 0xd3, 0x8d, 0x49, 0xf6, 0x84, 0x0c, 0x7a, 0x02, 0xd3, + 0x03, 0xbf, 0x4b, 0x2d, 0x9b, 0x28, 0x5d, 0x08, 0x1a, 0xd7, 0xc4, 0xa2, 0xbc, 0x31, 0x6e, 0x51, + 0x1e, 0x4b, 0x31, 0xa9, 0x0d, 0xb8, 0x3e, 0x48, 0x7e, 0x06, 0xc8, 0x87, 0x86, 0xe3, 0x32, 0x42, + 0x5d, 0xab, 0x67, 0x86, 0x95, 0xe6, 0xb0, 0x14, 0xdc, 0x14, 0x67, 0xea, 0xed, 0x71, 0x03, 0x6c, + 0x29, 0xf9, 0x74, 0xe9, 0x1a, 0x2f, 0x38, 0x99, 0xed, 0x08, 0xc3, 0x02, 0x5f, 0xd9, 0x91, 0x51, + 0x83, 0xc6, 0xad, 0x4b, 0x94, 0x4c, 0xe6, 0xfa, 0xd6, 0xe9, 0xf0, 0x80, 0xc1, 0xc8, 0xad, 0xce, + 0xf5, 0xab, 0xdf, 0xea, 0x34, 0xff, 0x5b, 0x83, 0xd9, 0x0c, 0xe5, 0x43, 0xb7, 0xcf, 0x8b, 0x25, + 0xe2, 0x48, 0xe2, 0x55, 0xa8, 0x24, 0x4a, 0x4a, 0x2a, 0x8c, 0x88, 0x63, 0x63, 0x88, 0xab, 0x4a, + 0x99, 0x89, 0x5a, 0xee, 0x97, 0x90, 0xa8, 0xfd, 0x18, 0x6a, 0x8c, 0x5a, 0x1d, 0x62, 0x06, 0x56, + 0xdf, 0xe7, 0x91, 0xd6, 0xf8, 0x14, 0xb2, 0x2a, 0x04, 0x0e, 0x24, 0xbe, 0xf9, 0x37, 0x05, 0x80, + 0x58, 0x7f, 0xd0, 0x43, 0x28, 0x28, 0x77, 0x24, 0x93, 0x91, 0x37, 0x2f, 0xaf, 0x7b, 0x2a, 0x1d, + 0xe4, 0xd9, 0xb6, 0xa4, 0xe0, 0x64, 0x1d, 0xcf, 0x7b, 0xe6, 0x84, 0xd9, 0xfc, 0x55, 0xc8, 0x36, + 0x84, 0x20, 0x27, 0x93, 0x14, 0xe8, 0x04, 0xe6, 0x3b, 0x9e, 0xeb, 0x12, 0x81, 0x34, 0x7d, 0xea, + 0xf9, 0x84, 0x32, 0x87, 0x84, 0x21, 0xd8, 0x8f, 0xaf, 0xc4, 0x1d, 0xf2, 0xec, 0x47, 0x34, 0xed, + 0x09, 0x3c, 0xd7, 0xc9, 0x68, 0x47, 0x36, 0x4c, 0x0f, 0x65, 0xb3, 0xea, 0xb6, 0xe2, 0xbd, 0x2b, + 0x8c, 0x98, 0xce, 0x71, 0xdb, 0x13, 0xb8, 0x9e, 0x4e, 0x6f, 0xd1, 0xa7, 0xa0, 0xae, 0x55, 0xcc, + 0x80, 0x59, 0x2a, 0x60, 0xa9, 0x8c, 0xd7, 0xc1, 0xc4, 0x10, 0xb2, 0xba, 0x72, 0xc0, 0xa5, 0xdb, + 0x13, 0xb8, 0x72, 0x14, 0x7f, 0xa2, 0x26, 0x94, 0x18, 0xa1, 0x7d, 0xc7, 0xb5, 0x7a, 0xe2, 0x7c, + 0x94, 0x70, 0xf4, 0xdd, 0x7c, 0x17, 0x0a, 0x2a, 0x70, 0x58, 0x81, 0x8a, 0xdc, 0x37, 0x33, 0x51, + 0xe7, 0x4c, 0x07, 0xc5, 0x18, 0x24, 0x62, 0xd7, 0xea, 0x93, 0xe6, 0x11, 0x14, 0xe4, 0x26, 0x5d, + 0x5c, 0x1a, 0x7d, 0x0d, 0x72, 0x8c, 0xf5, 0xd4, 0x09, 0xb8, 0xc0, 0xf8, 0x71, 0x14, 0x42, 0xaa, + 0x3e, 0x23, 0xd3, 0x2e, 0xf1, 0x77, 0xf3, 0x2e, 0xcc, 0x65, 0x6d, 0x18, 0xba, 0x0e, 0xe5, 0xc0, + 0x1b, 0xd0, 0x0e, 0x31, 0x1d, 0x5f, 0x0c, 0x5d, 0xc2, 0x25, 0xd9, 0xb0, 0xe5, 0x37, 0xdf, 0x80, + 0x7a, 0x7a, 0xcd, 0x2f, 0x9c, 0x64, 0x73, 0x19, 0x2a, 0x89, 0xf5, 0x43, 0xd7, 0x12, 0x75, 0xa9, + 0x18, 0xca, 0xdb, 0x8c, 0x45, 0xd0, 0x55, 0x84, 0x92, 0x4e, 0x9f, 0x9b, 0x03, 0xa8, 0xa5, 0x4c, + 0x2e, 0x5a, 0x81, 0x6a, 0x68, 0xba, 0x79, 0x30, 0xa3, 0xd8, 0x52, 0x71, 0x70, 0x45, 0x01, 0xc4, + 0x55, 0xe9, 0xbd, 0x38, 0x9b, 0x1b, 0x9f, 0xce, 0x87, 0xd0, 0xd6, 0x26, 0x5c, 0xbf, 0x20, 0xf2, + 0x47, 0x8b, 0x30, 0x7b, 0xb0, 0x89, 0x9f, 0x6c, 0x6d, 0x6c, 0x9a, 0x8f, 0x77, 0xd7, 0x9f, 0xac, + 0x6f, 0xed, 0xac, 0x1b, 0x3b, 0x9b, 0xfa, 0x04, 0xaa, 0x41, 0x79, 0x77, 0xef, 0xd0, 0x7c, 0xb0, + 0xf7, 0x78, 0xf7, 0xbe, 0xae, 0xb5, 0x7e, 0x13, 0x16, 0xb2, 0xed, 0x39, 0x6a, 0xc1, 0xcd, 0xfd, + 0xf5, 0x83, 0x03, 0xf3, 0xb0, 0x8d, 0xf7, 0x1e, 0x7f, 0xdc, 0x36, 0xb7, 0x76, 0xd5, 0x25, 0x2e, + 0xde, 0xbc, 0xbf, 0x85, 0x37, 0x37, 0x0e, 0xf5, 0x09, 0xf4, 0x12, 0x34, 0xda, 0xeb, 0xbb, 0xf7, + 0x77, 0x36, 0x33, 0x7a, 0x35, 0xa3, 0x01, 0x33, 0x61, 0x8e, 0x93, 0x5e, 0x33, 0xa3, 0x01, 0x0b, + 0xa9, 0xd8, 0x36, 0xea, 0xde, 0xce, 0x97, 0xaa, 0x7a, 0x6d, 0x3b, 0x5f, 0x42, 0xfa, 0xec, 0x76, + 0xbe, 0x34, 0xab, 0xcf, 0x6d, 0xe7, 0x4b, 0xba, 0x3e, 0xb3, 0x9d, 0x2f, 0x2d, 0xe8, 0x8b, 0xdb, + 0xf9, 0xd2, 0xbc, 0xbe, 0xd0, 0xfa, 0x8f, 0x32, 0x54, 0x12, 0xf1, 0x24, 0xba, 0x06, 0x25, 0x19, + 0x42, 0xaa, 0x1b, 0xe3, 0x32, 0x2e, 0x8a, 0xef, 0x3d, 0x17, 0x7d, 0x08, 0x15, 0x77, 0xd0, 0x37, + 0xf9, 0x27, 0x37, 0x19, 0x97, 0x29, 0xd2, 0x83, 0x3b, 0xe8, 0x63, 0x89, 0x47, 0xeb, 0x30, 0xed, + 0x13, 0x6a, 0x72, 0xee, 0x30, 0x28, 0xc8, 0x8d, 0x3b, 0xcf, 0x35, 0x9f, 0xd0, 0x43, 0x7a, 0x16, + 0xc6, 0x04, 0x87, 0x50, 0x57, 0xf1, 0x6d, 0x18, 0xba, 0x49, 0x4b, 0xfd, 0xc6, 0x98, 0x28, 0x59, + 0xfd, 0xad, 0x84, 0x70, 0x8d, 0x26, 0x3f, 0x91, 0x0d, 0x73, 0x92, 0x55, 0x2c, 0xa3, 0xcf, 0x7d, + 0x6a, 0xc7, 0x12, 0x39, 0x17, 0x8f, 0x11, 0xd6, 0x2e, 0xc5, 0xcd, 0x53, 0x88, 0xfd, 0x50, 0x12, + 0x23, 0x3a, 0xd2, 0x86, 0xda, 0x70, 0x5b, 0xf0, 0x07, 0xa4, 0xa7, 0xcc, 0xaf, 0x1c, 0x54, 0x94, + 0x37, 0xe4, 0x23, 0x10, 0x59, 0xc0, 0xc8, 0xe1, 0x1b, 0x1c, 0x78, 0x10, 0xe2, 0x04, 0xff, 0x23, + 0xeb, 0x54, 0xbd, 0x14, 0x09, 0xd0, 0x3d, 0x10, 0xe1, 0xba, 0xc3, 0xcf, 0xae, 0x29, 0x5f, 0xaa, + 0x89, 0x24, 0x57, 0x16, 0x08, 0x6b, 0x78, 0x2e, 0xea, 0x3d, 0x10, 0x9d, 0xfc, 0x0c, 0x07, 0x08, + 0x87, 0x6b, 0xf7, 0xd4, 0xea, 0x3c, 0xe3, 0xd1, 0x94, 0xca, 0x6c, 0x5e, 0xbf, 0xd4, 0xef, 0x33, + 0xac, 0xce, 0xb3, 0xbd, 0xa3, 0x23, 0x2c, 0x73, 0x14, 0xf5, 0x85, 0x76, 0x61, 0x26, 0x9e, 0x49, + 0x58, 0xc7, 0x29, 0x5f, 0xb6, 0xd6, 0xa9, 0x47, 0xb2, 0x61, 0xb5, 0xe7, 0x33, 0x99, 0xbf, 0x48, + 0xbe, 0xa1, 0xbb, 0x12, 0x55, 0xca, 0xbf, 0x04, 0xef, 0x62, 0xc4, 0x81, 0x53, 0xb7, 0x29, 0xcd, + 0x3f, 0xd7, 0xa0, 0x96, 0x3a, 0x09, 0x17, 0x1b, 0xdd, 0xb7, 0xb8, 0xe7, 0x15, 0xa9, 0xd3, 0xc5, + 0x95, 0x7a, 0x9e, 0xd1, 0x48, 0x1f, 0x2b, 0x4c, 0xd6, 0x7b, 0x50, 0x4d, 0xe5, 0x5d, 0xb9, 0xf3, + 0xf3, 0x2e, 0xee, 0x63, 0x58, 0x9c, 0x6e, 0x19, 0x35, 0xa8, 0x48, 0x21, 0x61, 0xec, 0x9a, 0x7f, + 0xa9, 0x01, 0x1a, 0x3d, 0x5d, 0xff, 0xc7, 0x27, 0xfd, 0x27, 0x1a, 0x54, 0x93, 0x47, 0x06, 0x6d, + 0x43, 0xed, 0xa9, 0x15, 0x10, 0x19, 0xb4, 0x9e, 0x58, 0x3d, 0x15, 0x14, 0x9d, 0xaf, 0xf5, 0x06, + 0xbc, 0x30, 0x8a, 0x5f, 0x69, 0xf9, 0x92, 0x76, 0x67, 0x02, 0x57, 0xb9, 0xec, 0x96, 0x12, 0x45, + 0x0f, 0xa0, 0x1a, 0xc5, 0xbf, 0x9c, 0x6a, 0x9c, 0x43, 0x14, 0x09, 0xdb, 0x57, 0xda, 0xe4, 0x9d, + 0x09, 0x5c, 0x09, 0x83, 0xdf, 0x13, 0xab, 0xd7, 0xfa, 0x46, 0x83, 0x4a, 0x22, 0x98, 0x45, 0xfb, + 0xa0, 0x3b, 0xae, 0xc3, 0x1c, 0x11, 0x52, 0x8b, 0x33, 0x13, 0xa8, 0x69, 0x5e, 0xf2, 0x96, 0x74, + 0x5a, 0x89, 0xab, 0x13, 0x17, 0xa0, 0x4f, 0xe0, 0x9a, 0x65, 0xdb, 0x8e, 0x8c, 0x3c, 0xa3, 0xb3, + 0xdc, 0x39, 0xb6, 0xdc, 0x4e, 0x18, 0xc9, 0xdd, 0x48, 0x96, 0x66, 0x46, 0xc3, 0xd4, 0xc5, 0x58, + 0x5e, 0xb1, 0x6e, 0x08, 0x69, 0xf4, 0x36, 0x34, 0x64, 0xc0, 0xce, 0x43, 0xb8, 0x0c, 0x8b, 0x5a, + 0xc2, 0x73, 0xa2, 0x7f, 0xcf, 0xdd, 0x4f, 0x5a, 0xcf, 0xd6, 0x3f, 0xe7, 0xa1, 0x3e, 0xe4, 0x97, + 0x7e, 0x00, 0xf5, 0x63, 0xc6, 0xfc, 0x20, 0x4a, 0x24, 0x64, 0x68, 0xd3, 0x9e, 0xc0, 0x35, 0xd1, + 0x1e, 0xc2, 0xd1, 0xab, 0x30, 0x1d, 0x74, 0x8e, 0x49, 0x9f, 0xc4, 0xc8, 0xa2, 0xba, 0xfe, 0xa9, + 0xcb, 0x8e, 0x08, 0xfa, 0x6b, 0x50, 0x53, 0xfe, 0x48, 0x01, 0x33, 0x7c, 0x76, 0x55, 0x56, 0x86, + 0x94, 0xc4, 0xcb, 0x50, 0xf3, 0x3d, 0x9a, 0x90, 0xe0, 0x96, 0xa9, 0x86, 0xab, 0xbc, 0x31, 0x02, + 0xad, 0x41, 0x4d, 0x14, 0xdc, 0x23, 0xd0, 0xe4, 0x08, 0x6d, 0x5b, 0xc3, 0x55, 0x8e, 0x89, 0x64, + 0xee, 0x5d, 0xa2, 0x8e, 0xd6, 0xd6, 0x86, 0x2b, 0x69, 0x47, 0x50, 0x4b, 0x17, 0x0f, 0x73, 0x22, + 0x97, 0x7b, 0x67, 0xfc, 0x93, 0xa3, 0xe8, 0xf3, 0x9c, 0xc2, 0x61, 0x95, 0x26, 0xc3, 0x8a, 0x5b, + 0x50, 0x09, 0x18, 0x75, 0x7c, 0x53, 0x84, 0xb1, 0xc2, 0xf6, 0x97, 0x30, 0x88, 0x26, 0x11, 0x76, + 0xb5, 0x9e, 0xc3, 0x5c, 0x16, 0x21, 0x9a, 0x87, 0x99, 0x47, 0x7b, 0x4f, 0x36, 0xef, 0x9b, 0xfb, + 0x9b, 0xf8, 0xd1, 0xfa, 0xee, 0xe6, 0xee, 0xe1, 0xce, 0x27, 0xfa, 0x04, 0x2a, 0xc3, 0x94, 0x8a, + 0x44, 0x78, 0x60, 0x72, 0xb0, 0xb9, 0x69, 0xee, 0x1d, 0xb6, 0x37, 0xb1, 0x3e, 0x89, 0x16, 0x00, + 0x1d, 0x6e, 0x3e, 0xda, 0xdf, 0xc3, 0xeb, 0xf8, 0x93, 0x38, 0xa8, 0xc8, 0xf1, 0xf6, 0x88, 0x22, + 0x6e, 0xcf, 0x1b, 0x4d, 0x68, 0x44, 0xbb, 0x3d, 0x14, 0x54, 0xf0, 0x70, 0x43, 0xed, 0xc3, 0x50, + 0x4f, 0xab, 0x0f, 0x73, 0x59, 0x0f, 0xa7, 0x50, 0x0b, 0x0a, 0xd2, 0x4b, 0x89, 0x93, 0x50, 0x13, + 0xea, 0x7d, 0x67, 0x4a, 0xff, 0xc7, 0xfc, 0xb2, 0x8d, 0x55, 0x0f, 0x7a, 0x13, 0xf2, 0x4f, 0x3d, + 0xfb, 0x6c, 0x48, 0x33, 0x92, 0xe9, 0xdc, 0x7d, 0x8b, 0x59, 0x07, 0x22, 0x32, 0xc5, 0x02, 0xda, + 0xea, 0x41, 0x39, 0x7a, 0xd6, 0x84, 0x5e, 0x81, 0x32, 0x8f, 0x69, 0xad, 0xe8, 0xa5, 0x5b, 0xc2, + 0x30, 0xc6, 0x3d, 0xf2, 0xa6, 0xc8, 0xf3, 0xad, 0xae, 0x15, 0xbd, 0x42, 0x1b, 0x73, 0x53, 0xa4, + 0xc0, 0xad, 0x3f, 0x9d, 0x84, 0xa2, 0x7a, 0xf8, 0x82, 0x1e, 0xc0, 0x74, 0xa7, 0xe7, 0x10, 0x97, + 0xc9, 0x84, 0xd1, 0x71, 0xbb, 0xca, 0x58, 0x8c, 0xd1, 0xe8, 0xba, 0x94, 0x3a, 0x50, 0x42, 0x9c, + 0x87, 0x5a, 0xae, 0xed, 0xf5, 0x63, 0x9e, 0x4b, 0x59, 0x86, 0xba, 0x94, 0x8a, 0x78, 0xda, 0xa0, + 0x7b, 0x27, 0x84, 0x5a, 0xbd, 0x5e, 0x4c, 0x94, 0xbb, 0x0c, 0xd1, 0xb4, 0x12, 0x8b, 0x98, 0xd6, + 0xa1, 0x12, 0xbf, 0xed, 0x0f, 0xd4, 0xeb, 0x87, 0xd4, 0xdd, 0xac, 0x7a, 0xf3, 0xc3, 0xb7, 0x65, + 0x43, 0x20, 0x0f, 0xad, 0x2e, 0x86, 0x4e, 0xf8, 0x67, 0xd0, 0xfa, 0x27, 0x0d, 0xea, 0xe9, 0xc7, + 0xdf, 0xe8, 0x0e, 0x14, 0x7d, 0x1e, 0xe2, 0xd0, 0x70, 0x6b, 0x46, 0x2e, 0x87, 0x71, 0x08, 0x48, + 0x5e, 0x9a, 0xe6, 0xaf, 0x7c, 0x69, 0x1a, 0x7a, 0xc6, 0xc9, 0x2c, 0xcf, 0x68, 0x40, 0x41, 0xde, + 0x5a, 0x29, 0x7d, 0x5e, 0xca, 0xaa, 0x19, 0xa8, 0x1a, 0x86, 0xc0, 0x25, 0xaa, 0x10, 0x4a, 0xb2, + 0xf5, 0x0f, 0x65, 0x28, 0x47, 0x95, 0x36, 0xf4, 0x01, 0x4c, 0x05, 0xcc, 0xea, 0x92, 0x2b, 0xb8, + 0x8a, 0x06, 0x60, 0x29, 0xc3, 0xb5, 0xdf, 0x76, 0x02, 0x11, 0xe9, 0x44, 0x75, 0x0f, 0x0c, 0xaa, + 0xe9, 0x21, 0x39, 0x43, 0x6d, 0x28, 0xca, 0xfd, 0x0a, 0xff, 0x0d, 0xc0, 0xf7, 0x2e, 0xac, 0x29, + 0xae, 0x48, 0x6d, 0x4b, 0x3c, 0x00, 0x0a, 0xc5, 0x9b, 0x7f, 0x5c, 0x82, 0x82, 0xd2, 0xc5, 0x4f, + 0xa1, 0xae, 0xf2, 0xbd, 0x64, 0x5d, 0xe6, 0xbc, 0x28, 0x77, 0x88, 0x7b, 0x45, 0xea, 0x5f, 0x7c, + 0x17, 0x53, 0x0b, 0x92, 0x0d, 0xe8, 0x67, 0x30, 0x6b, 0x93, 0x80, 0x39, 0xae, 0x50, 0xb6, 0x68, + 0x04, 0x79, 0xa6, 0xdf, 0xb9, 0xd4, 0x08, 0xf7, 0x63, 0xf9, 0x78, 0x18, 0x64, 0x8f, 0xb4, 0xa2, + 0x9f, 0xc2, 0xf4, 0x70, 0x80, 0x98, 0xbb, 0xa0, 0x26, 0x3d, 0x3c, 0x4e, 0x3a, 0x32, 0xe4, 0x5e, + 0x2c, 0xfd, 0xf2, 0x86, 0x2f, 0x14, 0x25, 0x7d, 0x8f, 0x11, 0xd3, 0xb2, 0x6d, 0x4a, 0x82, 0x40, + 0xa5, 0x1a, 0x6b, 0x97, 0xa4, 0xe7, 0xa2, 0xeb, 0x52, 0x92, 0x2f, 0x14, 0x4d, 0x36, 0x20, 0x0c, + 0x95, 0x2e, 0x71, 0x09, 0x75, 0x3a, 0x62, 0xef, 0x65, 0x29, 0x64, 0xf5, 0x52, 0xcc, 0x1f, 0x4b, + 0xb9, 0x87, 0x84, 0xc7, 0x61, 0xd0, 0x8d, 0xbe, 0x10, 0x01, 0xa4, 0x2a, 0x0f, 0xe2, 0x61, 0x87, + 0xba, 0x7b, 0x2a, 0x5c, 0x70, 0x2f, 0x3f, 0x4c, 0x9d, 0x78, 0x2f, 0x24, 0x34, 0xab, 0x3d, 0x81, + 0xf5, 0xe3, 0xa1, 0xb6, 0xe6, 0x34, 0xd4, 0x52, 0xa7, 0xa0, 0x39, 0x07, 0x68, 0x74, 0xd3, 0x9a, + 0x3e, 0x0f, 0x35, 0x52, 0x0b, 0x7a, 0xc5, 0xca, 0x08, 0x5a, 0x81, 0xba, 0x4d, 0x82, 0x0e, 0x75, + 0x7c, 0xe6, 0xd1, 0x44, 0x69, 0x30, 0xd2, 0xea, 0x5a, 0xdc, 0xfd, 0x90, 0x9c, 0xf1, 0x89, 0xa5, + 0x56, 0xbd, 0xf9, 0x11, 0x40, 0xbc, 0x58, 0x68, 0x0d, 0xf4, 0x04, 0x9d, 0x7c, 0x1e, 0x33, 0xe4, + 0x27, 0xa6, 0x63, 0x80, 0xf8, 0xc1, 0xcd, 0xbf, 0xd5, 0x40, 0x1f, 0x5e, 0x94, 0x6f, 0x43, 0x84, + 0x3e, 0x84, 0x2a, 0x39, 0xf5, 0x49, 0x87, 0xa9, 0x5d, 0x19, 0xef, 0x79, 0x2a, 0x12, 0x2f, 0x87, + 0xdc, 0x8c, 0x6d, 0x62, 0xee, 0x92, 0x36, 0x31, 0x69, 0x06, 0x94, 0xac, 0xb1, 0x08, 0xba, 0xb4, + 0x08, 0x43, 0x15, 0x84, 0xd6, 0xbf, 0xe4, 0xa0, 0x96, 0x92, 0x46, 0xb7, 0x53, 0x29, 0xc6, 0xd0, + 0x2e, 0x49, 0x73, 0x7a, 0x1b, 0x2a, 0xe4, 0xd4, 0x8a, 0x7e, 0x52, 0x5e, 0x45, 0x83, 0x20, 0x1a, + 0xe5, 0xbc, 0xef, 0x42, 0x45, 0x5e, 0x49, 0x4a, 0xc8, 0xd4, 0xb9, 0x0f, 0x83, 0x80, 0x46, 0x17, + 0x92, 0x68, 0x07, 0xf4, 0xf8, 0x75, 0x50, 0xf4, 0x6e, 0xe1, 0x52, 0x6f, 0x84, 0x44, 0x30, 0x1a, + 0xbe, 0x0c, 0x92, 0x6c, 0xef, 0x41, 0x45, 0xfc, 0x7b, 0xb6, 0x94, 0x3a, 0x2c, 0x24, 0x89, 0xb6, + 0x5c, 0xf6, 0xf6, 0x3d, 0xcc, 0x31, 0x62, 0x22, 0xfc, 0x0f, 0x29, 0xfa, 0x0a, 0xd4, 0xd4, 0x43, + 0x11, 0x25, 0x5c, 0x54, 0xa1, 0x71, 0x55, 0x35, 0x4b, 0xd8, 0xeb, 0x50, 0x55, 0x31, 0xa6, 0x44, + 0x95, 0x87, 0xef, 0xcc, 0x2b, 0xb2, 0x3b, 0x42, 0x07, 0x83, 0xa3, 0x18, 0x0d, 0x23, 0x68, 0xd9, + 0x2d, 0xd1, 0xb7, 0xa1, 0xea, 0xb8, 0x27, 0x84, 0x86, 0x33, 0x28, 0x89, 0x10, 0xb1, 0x22, 0xdb, + 0xe4, 0x23, 0xfb, 0x06, 0x2c, 0x28, 0xb5, 0x12, 0x90, 0x54, 0xf5, 0x67, 0x52, 0xcf, 0x6d, 0xe7, + 0x4b, 0x39, 0x3d, 0xdf, 0xfa, 0x8b, 0x49, 0x98, 0xcf, 0x7c, 0x22, 0x84, 0x6e, 0xa6, 0x76, 0x9a, + 0x87, 0x66, 0x94, 0xef, 0xd3, 0x17, 0x25, 0xb5, 0xcd, 0x37, 0xc3, 0xb7, 0x64, 0xb9, 0xa1, 0xc2, + 0xbc, 0x6c, 0x46, 0xef, 0x87, 0xcf, 0xbe, 0xf2, 0x97, 0x7f, 0x3c, 0x11, 0x3e, 0x04, 0xdb, 0x87, + 0x6a, 0xea, 0x79, 0x8a, 0xb4, 0x83, 0xe3, 0x9f, 0xa7, 0xa4, 0xde, 0x82, 0x55, 0x82, 0xc4, 0xfb, + 0x94, 0x91, 0x3d, 0x2b, 0x64, 0xed, 0x99, 0x71, 0x1b, 0x6e, 0x0d, 0x95, 0xa3, 0x87, 0x57, 0xcf, + 0x30, 0xc5, 0xbd, 0xf1, 0x22, 0x9a, 0x97, 0x93, 0x91, 0x19, 0xae, 0xd2, 0xb4, 0x93, 0xbb, 0x7f, + 0xfd, 0xc5, 0xd7, 0x7f, 0x57, 0x98, 0xd4, 0x35, 0x58, 0x72, 0x3c, 0x39, 0x5d, 0x9f, 0x7a, 0xa7, + 0x67, 0x19, 0x6a, 0x69, 0xcc, 0x89, 0x52, 0xf3, 0x46, 0xf4, 0xcf, 0x3f, 0xf7, 0xf9, 0xc2, 0xec, + 0x6b, 0x4f, 0x0b, 0x62, 0x85, 0xee, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x23, 0xa3, 0xe0, + 0x4b, 0x33, 0x3a, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route_components.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4521 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/route/route_components.proto + +package envoy_api_v2_route + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" + + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} + + _ = core.RoutingPriority(0) + + _ = core.RequestMethod(0) +) + +// define the regex for a UUID once up-front +var _route_components_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on VirtualHost with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *VirtualHost) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return VirtualHostValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetDomains()) < 1 { + return VirtualHostValidationError{ + field: "Domains", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetDomains() { + _, _ = idx, item + + if !_VirtualHost_Domains_Pattern.MatchString(item) { + return VirtualHostValidationError{ + field: fmt.Sprintf("Domains[%v]", idx), + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + } + + for idx, item := range m.GetRoutes() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("Routes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if _, ok := VirtualHost_TlsRequirementType_name[int32(m.GetRequireTls())]; !ok { + return VirtualHostValidationError{ + field: "RequireTls", + reason: "value must be one of the defined enum values", + } + } + + for idx, item := range m.GetVirtualClusters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("VirtualClusters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetRateLimits() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("RateLimits[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetRequestHeadersToAdd()) > 1000 { + return VirtualHostValidationError{ + field: "RequestHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetRequestHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetResponseHeadersToAdd()) > 1000 { + return VirtualHostValidationError{ + field: "ResponseHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetResponseHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetCors()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: "Cors", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for key, val := range m.GetPerFilterConfig() { + _ = val + + // no validation rules for PerFilterConfig[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("PerFilterConfig[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for key, val := range m.GetTypedPerFilterConfig() { + _ = val + + // no validation rules for TypedPerFilterConfig[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: fmt.Sprintf("TypedPerFilterConfig[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for IncludeRequestAttemptCount + + // no validation rules for IncludeAttemptCountInResponse + + if v, ok := interface{}(m.GetRetryPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: "RetryPolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRetryPolicyTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: "RetryPolicyTypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetHedgePolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: "HedgePolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetPerRequestBufferLimitBytes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualHostValidationError{ + field: "PerRequestBufferLimitBytes", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// VirtualHostValidationError is the validation error returned by +// VirtualHost.Validate if the designated constraints aren't met. +type VirtualHostValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e VirtualHostValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e VirtualHostValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e VirtualHostValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e VirtualHostValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e VirtualHostValidationError) ErrorName() string { return "VirtualHostValidationError" } + +// Error satisfies the builtin error interface +func (e VirtualHostValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sVirtualHost.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = VirtualHostValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = VirtualHostValidationError{} + +var _VirtualHost_Domains_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on FilterAction with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *FilterAction) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetAction()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return FilterActionValidationError{ + field: "Action", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// FilterActionValidationError is the validation error returned by +// FilterAction.Validate if the designated constraints aren't met. +type FilterActionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e FilterActionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e FilterActionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e FilterActionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e FilterActionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e FilterActionValidationError) ErrorName() string { return "FilterActionValidationError" } + +// Error satisfies the builtin error interface +func (e FilterActionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sFilterAction.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = FilterActionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = FilterActionValidationError{} + +// Validate checks the field values on Route with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Route) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Name + + if m.GetMatch() == nil { + return RouteValidationError{ + field: "Match", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "Match", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetDecorator()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "Decorator", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for key, val := range m.GetPerFilterConfig() { + _ = val + + // no validation rules for PerFilterConfig[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: fmt.Sprintf("PerFilterConfig[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for key, val := range m.GetTypedPerFilterConfig() { + _ = val + + // no validation rules for TypedPerFilterConfig[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: fmt.Sprintf("TypedPerFilterConfig[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetRequestHeadersToAdd()) > 1000 { + return RouteValidationError{ + field: "RequestHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetRequestHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetResponseHeadersToAdd()) > 1000 { + return RouteValidationError{ + field: "ResponseHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetResponseHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetTracing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "Tracing", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetPerRequestBufferLimitBytes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "PerRequestBufferLimitBytes", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.Action.(type) { + + case *Route_Route: + + if v, ok := interface{}(m.GetRoute()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "Route", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Route_Redirect: + + if v, ok := interface{}(m.GetRedirect()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "Redirect", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Route_DirectResponse: + + if v, ok := interface{}(m.GetDirectResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "DirectResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Route_FilterAction: + + if v, ok := interface{}(m.GetFilterAction()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteValidationError{ + field: "FilterAction", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return RouteValidationError{ + field: "Action", + reason: "value is required", + } + + } + + return nil +} + +// RouteValidationError is the validation error returned by Route.Validate if +// the designated constraints aren't met. +type RouteValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteValidationError) ErrorName() string { return "RouteValidationError" } + +// Error satisfies the builtin error interface +func (e RouteValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRoute.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteValidationError{} + +// Validate checks the field values on WeightedCluster with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *WeightedCluster) Validate() error { + if m == nil { + return nil + } + + if len(m.GetClusters()) < 1 { + return WeightedClusterValidationError{ + field: "Clusters", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetClusters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedClusterValidationError{ + field: fmt.Sprintf("Clusters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if wrapper := m.GetTotalWeight(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return WeightedClusterValidationError{ + field: "TotalWeight", + reason: "value must be greater than or equal to 1", + } + } + + } + + // no validation rules for RuntimeKeyPrefix + + return nil +} + +// WeightedClusterValidationError is the validation error returned by +// WeightedCluster.Validate if the designated constraints aren't met. +type WeightedClusterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WeightedClusterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WeightedClusterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WeightedClusterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WeightedClusterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WeightedClusterValidationError) ErrorName() string { return "WeightedClusterValidationError" } + +// Error satisfies the builtin error interface +func (e WeightedClusterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWeightedCluster.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WeightedClusterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WeightedClusterValidationError{} + +// Validate checks the field values on RouteMatch with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *RouteMatch) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetCaseSensitive()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: "CaseSensitive", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRuntimeFraction()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: "RuntimeFraction", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetHeaders() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: fmt.Sprintf("Headers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetQueryParameters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: fmt.Sprintf("QueryParameters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetGrpc()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: "Grpc", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTlsContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: "TlsContext", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.PathSpecifier.(type) { + + case *RouteMatch_Prefix: + // no validation rules for Prefix + + case *RouteMatch_Path: + // no validation rules for Path + + case *RouteMatch_Regex: + + if len(m.GetRegex()) > 1024 { + return RouteMatchValidationError{ + field: "Regex", + reason: "value length must be at most 1024 bytes", + } + } + + case *RouteMatch_SafeRegex: + + if m.GetSafeRegex() == nil { + return RouteMatchValidationError{ + field: "SafeRegex", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSafeRegex()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatchValidationError{ + field: "SafeRegex", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return RouteMatchValidationError{ + field: "PathSpecifier", + reason: "value is required", + } + + } + + return nil +} + +// RouteMatchValidationError is the validation error returned by +// RouteMatch.Validate if the designated constraints aren't met. +type RouteMatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteMatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteMatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteMatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteMatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteMatchValidationError) ErrorName() string { return "RouteMatchValidationError" } + +// Error satisfies the builtin error interface +func (e RouteMatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteMatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteMatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteMatchValidationError{} + +// Validate checks the field values on CorsPolicy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *CorsPolicy) Validate() error { + if m == nil { + return nil + } + + for idx, item := range m.GetAllowOriginRegex() { + _, _ = idx, item + + if len(item) > 1024 { + return CorsPolicyValidationError{ + field: fmt.Sprintf("AllowOriginRegex[%v]", idx), + reason: "value length must be at most 1024 bytes", + } + } + + } + + for idx, item := range m.GetAllowOriginStringMatch() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + field: fmt.Sprintf("AllowOriginStringMatch[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for AllowMethods + + // no validation rules for AllowHeaders + + // no validation rules for ExposeHeaders + + // no validation rules for MaxAge + + if v, ok := interface{}(m.GetAllowCredentials()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + field: "AllowCredentials", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetShadowEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + field: "ShadowEnabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.EnabledSpecifier.(type) { + + case *CorsPolicy_Enabled: + + if v, ok := interface{}(m.GetEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + field: "Enabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *CorsPolicy_FilterEnabled: + + if v, ok := interface{}(m.GetFilterEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CorsPolicyValidationError{ + field: "FilterEnabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// CorsPolicyValidationError is the validation error returned by +// CorsPolicy.Validate if the designated constraints aren't met. +type CorsPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CorsPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CorsPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CorsPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CorsPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CorsPolicyValidationError) ErrorName() string { return "CorsPolicyValidationError" } + +// Error satisfies the builtin error interface +func (e CorsPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCorsPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CorsPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CorsPolicyValidationError{} + +// Validate checks the field values on RouteAction with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *RouteAction) Validate() error { + if m == nil { + return nil + } + + if _, ok := RouteAction_ClusterNotFoundResponseCode_name[int32(m.GetClusterNotFoundResponseCode())]; !ok { + return RouteActionValidationError{ + field: "ClusterNotFoundResponseCode", + reason: "value must be one of the defined enum values", + } + } + + if v, ok := interface{}(m.GetMetadataMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "MetadataMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if !_RouteAction_PrefixRewrite_Pattern.MatchString(m.GetPrefixRewrite()) { + return RouteActionValidationError{ + field: "PrefixRewrite", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + if v, ok := interface{}(m.GetRegexRewrite()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "RegexRewrite", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "IdleTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRetryPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "RetryPolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRetryPolicyTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "RetryPolicyTypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRequestMirrorPolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "RequestMirrorPolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetRequestMirrorPolicies() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: fmt.Sprintf("RequestMirrorPolicies[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if _, ok := core.RoutingPriority_name[int32(m.GetPriority())]; !ok { + return RouteActionValidationError{ + field: "Priority", + reason: "value must be one of the defined enum values", + } + } + + for idx, item := range m.GetRateLimits() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: fmt.Sprintf("RateLimits[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetIncludeVhRateLimits()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "IncludeVhRateLimits", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetHashPolicy() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: fmt.Sprintf("HashPolicy[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetCors()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "Cors", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMaxGrpcTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "MaxGrpcTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetGrpcTimeoutOffset()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "GrpcTimeoutOffset", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetUpgradeConfigs() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: fmt.Sprintf("UpgradeConfigs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for InternalRedirectAction + + if v, ok := interface{}(m.GetMaxInternalRedirects()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "MaxInternalRedirects", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetHedgePolicy()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "HedgePolicy", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.ClusterSpecifier.(type) { + + case *RouteAction_Cluster: + + if len(m.GetCluster()) < 1 { + return RouteActionValidationError{ + field: "Cluster", + reason: "value length must be at least 1 bytes", + } + } + + case *RouteAction_ClusterHeader: + + if len(m.GetClusterHeader()) < 1 { + return RouteActionValidationError{ + field: "ClusterHeader", + reason: "value length must be at least 1 bytes", + } + } + + if !_RouteAction_ClusterHeader_Pattern.MatchString(m.GetClusterHeader()) { + return RouteActionValidationError{ + field: "ClusterHeader", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + case *RouteAction_WeightedClusters: + + if v, ok := interface{}(m.GetWeightedClusters()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "WeightedClusters", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return RouteActionValidationError{ + field: "ClusterSpecifier", + reason: "value is required", + } + + } + + switch m.HostRewriteSpecifier.(type) { + + case *RouteAction_HostRewrite: + + if !_RouteAction_HostRewrite_Pattern.MatchString(m.GetHostRewrite()) { + return RouteActionValidationError{ + field: "HostRewrite", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + case *RouteAction_AutoHostRewrite: + + if v, ok := interface{}(m.GetAutoHostRewrite()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteActionValidationError{ + field: "AutoHostRewrite", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RouteAction_AutoHostRewriteHeader: + + if !_RouteAction_AutoHostRewriteHeader_Pattern.MatchString(m.GetAutoHostRewriteHeader()) { + return RouteActionValidationError{ + field: "AutoHostRewriteHeader", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + } + + return nil +} + +// RouteActionValidationError is the validation error returned by +// RouteAction.Validate if the designated constraints aren't met. +type RouteActionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteActionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteActionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteActionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteActionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteActionValidationError) ErrorName() string { return "RouteActionValidationError" } + +// Error satisfies the builtin error interface +func (e RouteActionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteActionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteActionValidationError{} + +var _RouteAction_ClusterHeader_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RouteAction_PrefixRewrite_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RouteAction_HostRewrite_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RouteAction_AutoHostRewriteHeader_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on RetryPolicy with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *RetryPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for RetryOn + + if v, ok := interface{}(m.GetNumRetries()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: "NumRetries", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetPerTryTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: "PerTryTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRetryPriority()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: "RetryPriority", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetRetryHostPredicate() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: fmt.Sprintf("RetryHostPredicate[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for HostSelectionRetryMaxAttempts + + if v, ok := interface{}(m.GetRetryBackOff()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: "RetryBackOff", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetRetriableHeaders() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: fmt.Sprintf("RetriableHeaders[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetRetriableRequestHeaders() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicyValidationError{ + field: fmt.Sprintf("RetriableRequestHeaders[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// RetryPolicyValidationError is the validation error returned by +// RetryPolicy.Validate if the designated constraints aren't met. +type RetryPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RetryPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RetryPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RetryPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RetryPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RetryPolicyValidationError) ErrorName() string { return "RetryPolicyValidationError" } + +// Error satisfies the builtin error interface +func (e RetryPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRetryPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RetryPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RetryPolicyValidationError{} + +// Validate checks the field values on HedgePolicy with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *HedgePolicy) Validate() error { + if m == nil { + return nil + } + + if wrapper := m.GetInitialRequests(); wrapper != nil { + + if wrapper.GetValue() < 1 { + return HedgePolicyValidationError{ + field: "InitialRequests", + reason: "value must be greater than or equal to 1", + } + } + + } + + if v, ok := interface{}(m.GetAdditionalRequestChance()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HedgePolicyValidationError{ + field: "AdditionalRequestChance", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for HedgeOnPerTryTimeout + + return nil +} + +// HedgePolicyValidationError is the validation error returned by +// HedgePolicy.Validate if the designated constraints aren't met. +type HedgePolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HedgePolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HedgePolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HedgePolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HedgePolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HedgePolicyValidationError) ErrorName() string { return "HedgePolicyValidationError" } + +// Error satisfies the builtin error interface +func (e HedgePolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHedgePolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HedgePolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HedgePolicyValidationError{} + +// Validate checks the field values on RedirectAction with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *RedirectAction) Validate() error { + if m == nil { + return nil + } + + if !_RedirectAction_HostRedirect_Pattern.MatchString(m.GetHostRedirect()) { + return RedirectActionValidationError{ + field: "HostRedirect", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + // no validation rules for PortRedirect + + if _, ok := RedirectAction_RedirectResponseCode_name[int32(m.GetResponseCode())]; !ok { + return RedirectActionValidationError{ + field: "ResponseCode", + reason: "value must be one of the defined enum values", + } + } + + // no validation rules for StripQuery + + switch m.SchemeRewriteSpecifier.(type) { + + case *RedirectAction_HttpsRedirect: + // no validation rules for HttpsRedirect + + case *RedirectAction_SchemeRedirect: + // no validation rules for SchemeRedirect + + } + + switch m.PathRewriteSpecifier.(type) { + + case *RedirectAction_PathRedirect: + + if !_RedirectAction_PathRedirect_Pattern.MatchString(m.GetPathRedirect()) { + return RedirectActionValidationError{ + field: "PathRedirect", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + case *RedirectAction_PrefixRewrite: + + if !_RedirectAction_PrefixRewrite_Pattern.MatchString(m.GetPrefixRewrite()) { + return RedirectActionValidationError{ + field: "PrefixRewrite", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + } + + return nil +} + +// RedirectActionValidationError is the validation error returned by +// RedirectAction.Validate if the designated constraints aren't met. +type RedirectActionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RedirectActionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RedirectActionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RedirectActionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RedirectActionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RedirectActionValidationError) ErrorName() string { return "RedirectActionValidationError" } + +// Error satisfies the builtin error interface +func (e RedirectActionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRedirectAction.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RedirectActionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RedirectActionValidationError{} + +var _RedirectAction_HostRedirect_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RedirectAction_PathRedirect_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RedirectAction_PrefixRewrite_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on DirectResponseAction with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DirectResponseAction) Validate() error { + if m == nil { + return nil + } + + if val := m.GetStatus(); val < 100 || val >= 600 { + return DirectResponseActionValidationError{ + field: "Status", + reason: "value must be inside range [100, 600)", + } + } + + if v, ok := interface{}(m.GetBody()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DirectResponseActionValidationError{ + field: "Body", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DirectResponseActionValidationError is the validation error returned by +// DirectResponseAction.Validate if the designated constraints aren't met. +type DirectResponseActionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DirectResponseActionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DirectResponseActionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DirectResponseActionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DirectResponseActionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DirectResponseActionValidationError) ErrorName() string { + return "DirectResponseActionValidationError" +} + +// Error satisfies the builtin error interface +func (e DirectResponseActionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDirectResponseAction.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DirectResponseActionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DirectResponseActionValidationError{} + +// Validate checks the field values on Decorator with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Decorator) Validate() error { + if m == nil { + return nil + } + + if len(m.GetOperation()) < 1 { + return DecoratorValidationError{ + field: "Operation", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetPropagate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DecoratorValidationError{ + field: "Propagate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DecoratorValidationError is the validation error returned by +// Decorator.Validate if the designated constraints aren't met. +type DecoratorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DecoratorValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DecoratorValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DecoratorValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DecoratorValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DecoratorValidationError) ErrorName() string { return "DecoratorValidationError" } + +// Error satisfies the builtin error interface +func (e DecoratorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDecorator.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DecoratorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DecoratorValidationError{} + +// Validate checks the field values on Tracing with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Tracing) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetClientSampling()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TracingValidationError{ + field: "ClientSampling", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRandomSampling()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TracingValidationError{ + field: "RandomSampling", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetOverallSampling()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TracingValidationError{ + field: "OverallSampling", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetCustomTags() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TracingValidationError{ + field: fmt.Sprintf("CustomTags[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// TracingValidationError is the validation error returned by Tracing.Validate +// if the designated constraints aren't met. +type TracingValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TracingValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TracingValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TracingValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TracingValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TracingValidationError) ErrorName() string { return "TracingValidationError" } + +// Error satisfies the builtin error interface +func (e TracingValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTracing.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TracingValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TracingValidationError{} + +// Validate checks the field values on VirtualCluster with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *VirtualCluster) Validate() error { + if m == nil { + return nil + } + + if len(m.GetPattern()) > 1024 { + return VirtualClusterValidationError{ + field: "Pattern", + reason: "value length must be at most 1024 bytes", + } + } + + for idx, item := range m.GetHeaders() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VirtualClusterValidationError{ + field: fmt.Sprintf("Headers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetName()) < 1 { + return VirtualClusterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for Method + + return nil +} + +// VirtualClusterValidationError is the validation error returned by +// VirtualCluster.Validate if the designated constraints aren't met. +type VirtualClusterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e VirtualClusterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e VirtualClusterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e VirtualClusterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e VirtualClusterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e VirtualClusterValidationError) ErrorName() string { return "VirtualClusterValidationError" } + +// Error satisfies the builtin error interface +func (e VirtualClusterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sVirtualCluster.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = VirtualClusterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = VirtualClusterValidationError{} + +// Validate checks the field values on RateLimit with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *RateLimit) Validate() error { + if m == nil { + return nil + } + + if wrapper := m.GetStage(); wrapper != nil { + + if wrapper.GetValue() > 10 { + return RateLimitValidationError{ + field: "Stage", + reason: "value must be less than or equal to 10", + } + } + + } + + // no validation rules for DisableKey + + if len(m.GetActions()) < 1 { + return RateLimitValidationError{ + field: "Actions", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetActions() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimitValidationError{ + field: fmt.Sprintf("Actions[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// RateLimitValidationError is the validation error returned by +// RateLimit.Validate if the designated constraints aren't met. +type RateLimitValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimitValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimitValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimitValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimitValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimitValidationError) ErrorName() string { return "RateLimitValidationError" } + +// Error satisfies the builtin error interface +func (e RateLimitValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimitValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimitValidationError{} + +// Validate checks the field values on HeaderMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *HeaderMatcher) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return HeaderMatcherValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if !_HeaderMatcher_Name_Pattern.MatchString(m.GetName()) { + return HeaderMatcherValidationError{ + field: "Name", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + // no validation rules for InvertMatch + + switch m.HeaderMatchSpecifier.(type) { + + case *HeaderMatcher_ExactMatch: + // no validation rules for ExactMatch + + case *HeaderMatcher_RegexMatch: + + if len(m.GetRegexMatch()) > 1024 { + return HeaderMatcherValidationError{ + field: "RegexMatch", + reason: "value length must be at most 1024 bytes", + } + } + + case *HeaderMatcher_SafeRegexMatch: + + if v, ok := interface{}(m.GetSafeRegexMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HeaderMatcherValidationError{ + field: "SafeRegexMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *HeaderMatcher_RangeMatch: + + if v, ok := interface{}(m.GetRangeMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HeaderMatcherValidationError{ + field: "RangeMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *HeaderMatcher_PresentMatch: + // no validation rules for PresentMatch + + case *HeaderMatcher_PrefixMatch: + + if len(m.GetPrefixMatch()) < 1 { + return HeaderMatcherValidationError{ + field: "PrefixMatch", + reason: "value length must be at least 1 bytes", + } + } + + case *HeaderMatcher_SuffixMatch: + + if len(m.GetSuffixMatch()) < 1 { + return HeaderMatcherValidationError{ + field: "SuffixMatch", + reason: "value length must be at least 1 bytes", + } + } + + } + + return nil +} + +// HeaderMatcherValidationError is the validation error returned by +// HeaderMatcher.Validate if the designated constraints aren't met. +type HeaderMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HeaderMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HeaderMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HeaderMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HeaderMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HeaderMatcherValidationError) ErrorName() string { return "HeaderMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e HeaderMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHeaderMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HeaderMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HeaderMatcherValidationError{} + +var _HeaderMatcher_Name_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on QueryParameterMatcher with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *QueryParameterMatcher) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetName()); l < 1 || l > 1024 { + return QueryParameterMatcherValidationError{ + field: "Name", + reason: "value length must be between 1 and 1024 bytes, inclusive", + } + } + + // no validation rules for Value + + if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return QueryParameterMatcherValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.QueryParameterMatchSpecifier.(type) { + + case *QueryParameterMatcher_StringMatch: + + if m.GetStringMatch() == nil { + return QueryParameterMatcherValidationError{ + field: "StringMatch", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetStringMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return QueryParameterMatcherValidationError{ + field: "StringMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *QueryParameterMatcher_PresentMatch: + // no validation rules for PresentMatch + + } + + return nil +} + +// QueryParameterMatcherValidationError is the validation error returned by +// QueryParameterMatcher.Validate if the designated constraints aren't met. +type QueryParameterMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e QueryParameterMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e QueryParameterMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e QueryParameterMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e QueryParameterMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e QueryParameterMatcherValidationError) ErrorName() string { + return "QueryParameterMatcherValidationError" +} + +// Error satisfies the builtin error interface +func (e QueryParameterMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sQueryParameterMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = QueryParameterMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = QueryParameterMatcherValidationError{} + +// Validate checks the field values on WeightedCluster_ClusterWeight with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *WeightedCluster_ClusterWeight) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return WeightedCluster_ClusterWeightValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetWeight()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedCluster_ClusterWeightValidationError{ + field: "Weight", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadataMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedCluster_ClusterWeightValidationError{ + field: "MetadataMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetRequestHeadersToAdd()) > 1000 { + return WeightedCluster_ClusterWeightValidationError{ + field: "RequestHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetRequestHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedCluster_ClusterWeightValidationError{ + field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetResponseHeadersToAdd()) > 1000 { + return WeightedCluster_ClusterWeightValidationError{ + field: "ResponseHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetResponseHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedCluster_ClusterWeightValidationError{ + field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for key, val := range m.GetPerFilterConfig() { + _ = val + + // no validation rules for PerFilterConfig[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedCluster_ClusterWeightValidationError{ + field: fmt.Sprintf("PerFilterConfig[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for key, val := range m.GetTypedPerFilterConfig() { + _ = val + + // no validation rules for TypedPerFilterConfig[key] + + if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WeightedCluster_ClusterWeightValidationError{ + field: fmt.Sprintf("TypedPerFilterConfig[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// WeightedCluster_ClusterWeightValidationError is the validation error +// returned by WeightedCluster_ClusterWeight.Validate if the designated +// constraints aren't met. +type WeightedCluster_ClusterWeightValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WeightedCluster_ClusterWeightValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WeightedCluster_ClusterWeightValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WeightedCluster_ClusterWeightValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WeightedCluster_ClusterWeightValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WeightedCluster_ClusterWeightValidationError) ErrorName() string { + return "WeightedCluster_ClusterWeightValidationError" +} + +// Error satisfies the builtin error interface +func (e WeightedCluster_ClusterWeightValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWeightedCluster_ClusterWeight.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WeightedCluster_ClusterWeightValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WeightedCluster_ClusterWeightValidationError{} + +// Validate checks the field values on RouteMatch_GrpcRouteMatchOptions with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *RouteMatch_GrpcRouteMatchOptions) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// RouteMatch_GrpcRouteMatchOptionsValidationError is the validation error +// returned by RouteMatch_GrpcRouteMatchOptions.Validate if the designated +// constraints aren't met. +type RouteMatch_GrpcRouteMatchOptionsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteMatch_GrpcRouteMatchOptionsValidationError) ErrorName() string { + return "RouteMatch_GrpcRouteMatchOptionsValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteMatch_GrpcRouteMatchOptions.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteMatch_GrpcRouteMatchOptionsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteMatch_GrpcRouteMatchOptionsValidationError{} + +// Validate checks the field values on RouteMatch_TlsContextMatchOptions with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *RouteMatch_TlsContextMatchOptions) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetPresented()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatch_TlsContextMatchOptionsValidationError{ + field: "Presented", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetValidated()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteMatch_TlsContextMatchOptionsValidationError{ + field: "Validated", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RouteMatch_TlsContextMatchOptionsValidationError is the validation error +// returned by RouteMatch_TlsContextMatchOptions.Validate if the designated +// constraints aren't met. +type RouteMatch_TlsContextMatchOptionsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteMatch_TlsContextMatchOptionsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteMatch_TlsContextMatchOptionsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteMatch_TlsContextMatchOptionsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteMatch_TlsContextMatchOptionsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteMatch_TlsContextMatchOptionsValidationError) ErrorName() string { + return "RouteMatch_TlsContextMatchOptionsValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteMatch_TlsContextMatchOptionsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteMatch_TlsContextMatchOptions.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteMatch_TlsContextMatchOptionsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteMatch_TlsContextMatchOptionsValidationError{} + +// Validate checks the field values on RouteAction_RequestMirrorPolicy with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_RequestMirrorPolicy) Validate() error { + if m == nil { + return nil + } + + if len(m.GetCluster()) < 1 { + return RouteAction_RequestMirrorPolicyValidationError{ + field: "Cluster", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for RuntimeKey + + if v, ok := interface{}(m.GetRuntimeFraction()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_RequestMirrorPolicyValidationError{ + field: "RuntimeFraction", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetTraceSampled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_RequestMirrorPolicyValidationError{ + field: "TraceSampled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RouteAction_RequestMirrorPolicyValidationError is the validation error +// returned by RouteAction_RequestMirrorPolicy.Validate if the designated +// constraints aren't met. +type RouteAction_RequestMirrorPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_RequestMirrorPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_RequestMirrorPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_RequestMirrorPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_RequestMirrorPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_RequestMirrorPolicyValidationError) ErrorName() string { + return "RouteAction_RequestMirrorPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_RequestMirrorPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_RequestMirrorPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_RequestMirrorPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_RequestMirrorPolicyValidationError{} + +// Validate checks the field values on RouteAction_HashPolicy with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_HashPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Terminal + + switch m.PolicySpecifier.(type) { + + case *RouteAction_HashPolicy_Header_: + + if v, ok := interface{}(m.GetHeader()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicyValidationError{ + field: "Header", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RouteAction_HashPolicy_Cookie_: + + if v, ok := interface{}(m.GetCookie()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicyValidationError{ + field: "Cookie", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RouteAction_HashPolicy_ConnectionProperties_: + + if v, ok := interface{}(m.GetConnectionProperties()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicyValidationError{ + field: "ConnectionProperties", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RouteAction_HashPolicy_QueryParameter_: + + if v, ok := interface{}(m.GetQueryParameter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicyValidationError{ + field: "QueryParameter", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RouteAction_HashPolicy_FilterState_: + + if v, ok := interface{}(m.GetFilterState()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicyValidationError{ + field: "FilterState", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return RouteAction_HashPolicyValidationError{ + field: "PolicySpecifier", + reason: "value is required", + } + + } + + return nil +} + +// RouteAction_HashPolicyValidationError is the validation error returned by +// RouteAction_HashPolicy.Validate if the designated constraints aren't met. +type RouteAction_HashPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_HashPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_HashPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_HashPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_HashPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_HashPolicyValidationError) ErrorName() string { + return "RouteAction_HashPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_HashPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_HashPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_HashPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_HashPolicyValidationError{} + +// Validate checks the field values on RouteAction_UpgradeConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_UpgradeConfig) Validate() error { + if m == nil { + return nil + } + + if !_RouteAction_UpgradeConfig_UpgradeType_Pattern.MatchString(m.GetUpgradeType()) { + return RouteAction_UpgradeConfigValidationError{ + field: "UpgradeType", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + if v, ok := interface{}(m.GetEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_UpgradeConfigValidationError{ + field: "Enabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RouteAction_UpgradeConfigValidationError is the validation error returned by +// RouteAction_UpgradeConfig.Validate if the designated constraints aren't met. +type RouteAction_UpgradeConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_UpgradeConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_UpgradeConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_UpgradeConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_UpgradeConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_UpgradeConfigValidationError) ErrorName() string { + return "RouteAction_UpgradeConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_UpgradeConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_UpgradeConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_UpgradeConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_UpgradeConfigValidationError{} + +var _RouteAction_UpgradeConfig_UpgradeType_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on RouteAction_HashPolicy_Header with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_HashPolicy_Header) Validate() error { + if m == nil { + return nil + } + + if len(m.GetHeaderName()) < 1 { + return RouteAction_HashPolicy_HeaderValidationError{ + field: "HeaderName", + reason: "value length must be at least 1 bytes", + } + } + + if !_RouteAction_HashPolicy_Header_HeaderName_Pattern.MatchString(m.GetHeaderName()) { + return RouteAction_HashPolicy_HeaderValidationError{ + field: "HeaderName", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + return nil +} + +// RouteAction_HashPolicy_HeaderValidationError is the validation error +// returned by RouteAction_HashPolicy_Header.Validate if the designated +// constraints aren't met. +type RouteAction_HashPolicy_HeaderValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_HashPolicy_HeaderValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_HashPolicy_HeaderValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_HashPolicy_HeaderValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_HashPolicy_HeaderValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_HashPolicy_HeaderValidationError) ErrorName() string { + return "RouteAction_HashPolicy_HeaderValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_HashPolicy_HeaderValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_HashPolicy_Header.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_HashPolicy_HeaderValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_HashPolicy_HeaderValidationError{} + +var _RouteAction_HashPolicy_Header_HeaderName_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on RouteAction_HashPolicy_Cookie with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteAction_HashPolicy_Cookie) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return RouteAction_HashPolicy_CookieValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetTtl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteAction_HashPolicy_CookieValidationError{ + field: "Ttl", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Path + + return nil +} + +// RouteAction_HashPolicy_CookieValidationError is the validation error +// returned by RouteAction_HashPolicy_Cookie.Validate if the designated +// constraints aren't met. +type RouteAction_HashPolicy_CookieValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_HashPolicy_CookieValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_HashPolicy_CookieValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_HashPolicy_CookieValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_HashPolicy_CookieValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_HashPolicy_CookieValidationError) ErrorName() string { + return "RouteAction_HashPolicy_CookieValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_HashPolicy_CookieValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_HashPolicy_Cookie.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_HashPolicy_CookieValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_HashPolicy_CookieValidationError{} + +// Validate checks the field values on +// RouteAction_HashPolicy_ConnectionProperties with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *RouteAction_HashPolicy_ConnectionProperties) Validate() error { + if m == nil { + return nil + } + + // no validation rules for SourceIp + + return nil +} + +// RouteAction_HashPolicy_ConnectionPropertiesValidationError is the validation +// error returned by RouteAction_HashPolicy_ConnectionProperties.Validate if +// the designated constraints aren't met. +type RouteAction_HashPolicy_ConnectionPropertiesValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) ErrorName() string { + return "RouteAction_HashPolicy_ConnectionPropertiesValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_HashPolicy_ConnectionProperties.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_HashPolicy_ConnectionPropertiesValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_HashPolicy_ConnectionPropertiesValidationError{} + +// Validate checks the field values on RouteAction_HashPolicy_QueryParameter +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *RouteAction_HashPolicy_QueryParameter) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return RouteAction_HashPolicy_QueryParameterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// RouteAction_HashPolicy_QueryParameterValidationError is the validation error +// returned by RouteAction_HashPolicy_QueryParameter.Validate if the +// designated constraints aren't met. +type RouteAction_HashPolicy_QueryParameterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_HashPolicy_QueryParameterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_HashPolicy_QueryParameterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_HashPolicy_QueryParameterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_HashPolicy_QueryParameterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_HashPolicy_QueryParameterValidationError) ErrorName() string { + return "RouteAction_HashPolicy_QueryParameterValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_HashPolicy_QueryParameterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_HashPolicy_QueryParameter.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_HashPolicy_QueryParameterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_HashPolicy_QueryParameterValidationError{} + +// Validate checks the field values on RouteAction_HashPolicy_FilterState with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *RouteAction_HashPolicy_FilterState) Validate() error { + if m == nil { + return nil + } + + if len(m.GetKey()) < 1 { + return RouteAction_HashPolicy_FilterStateValidationError{ + field: "Key", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// RouteAction_HashPolicy_FilterStateValidationError is the validation error +// returned by RouteAction_HashPolicy_FilterState.Validate if the designated +// constraints aren't met. +type RouteAction_HashPolicy_FilterStateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteAction_HashPolicy_FilterStateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteAction_HashPolicy_FilterStateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteAction_HashPolicy_FilterStateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteAction_HashPolicy_FilterStateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteAction_HashPolicy_FilterStateValidationError) ErrorName() string { + return "RouteAction_HashPolicy_FilterStateValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteAction_HashPolicy_FilterStateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteAction_HashPolicy_FilterState.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteAction_HashPolicy_FilterStateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteAction_HashPolicy_FilterStateValidationError{} + +// Validate checks the field values on RetryPolicy_RetryPriority with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RetryPolicy_RetryPriority) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return RetryPolicy_RetryPriorityValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryPriority_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryPriorityValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RetryPolicy_RetryPriority_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryPriorityValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// RetryPolicy_RetryPriorityValidationError is the validation error returned by +// RetryPolicy_RetryPriority.Validate if the designated constraints aren't met. +type RetryPolicy_RetryPriorityValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RetryPolicy_RetryPriorityValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RetryPolicy_RetryPriorityValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RetryPolicy_RetryPriorityValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RetryPolicy_RetryPriorityValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RetryPolicy_RetryPriorityValidationError) ErrorName() string { + return "RetryPolicy_RetryPriorityValidationError" +} + +// Error satisfies the builtin error interface +func (e RetryPolicy_RetryPriorityValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRetryPolicy_RetryPriority.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RetryPolicy_RetryPriorityValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RetryPolicy_RetryPriorityValidationError{} + +// Validate checks the field values on RetryPolicy_RetryHostPredicate with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RetryPolicy_RetryHostPredicate) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return RetryPolicy_RetryHostPredicateValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryHostPredicate_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryHostPredicateValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RetryPolicy_RetryHostPredicate_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RetryPolicy_RetryHostPredicateValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// RetryPolicy_RetryHostPredicateValidationError is the validation error +// returned by RetryPolicy_RetryHostPredicate.Validate if the designated +// constraints aren't met. +type RetryPolicy_RetryHostPredicateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RetryPolicy_RetryHostPredicateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RetryPolicy_RetryHostPredicateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RetryPolicy_RetryHostPredicateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RetryPolicy_RetryHostPredicateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RetryPolicy_RetryHostPredicateValidationError) ErrorName() string { + return "RetryPolicy_RetryHostPredicateValidationError" +} + +// Error satisfies the builtin error interface +func (e RetryPolicy_RetryHostPredicateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRetryPolicy_RetryHostPredicate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RetryPolicy_RetryHostPredicateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RetryPolicy_RetryHostPredicateValidationError{} + +// Validate checks the field values on RetryPolicy_RetryBackOff with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RetryPolicy_RetryBackOff) Validate() error { + if m == nil { + return nil + } + + if m.GetBaseInterval() == nil { + return RetryPolicy_RetryBackOffValidationError{ + field: "BaseInterval", + reason: "value is required", + } + } + + if d := m.GetBaseInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return RetryPolicy_RetryBackOffValidationError{ + field: "BaseInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return RetryPolicy_RetryBackOffValidationError{ + field: "BaseInterval", + reason: "value must be greater than 0s", + } + } + + } + + if d := m.GetMaxInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return RetryPolicy_RetryBackOffValidationError{ + field: "MaxInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return RetryPolicy_RetryBackOffValidationError{ + field: "MaxInterval", + reason: "value must be greater than 0s", + } + } + + } + + return nil +} + +// RetryPolicy_RetryBackOffValidationError is the validation error returned by +// RetryPolicy_RetryBackOff.Validate if the designated constraints aren't met. +type RetryPolicy_RetryBackOffValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RetryPolicy_RetryBackOffValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RetryPolicy_RetryBackOffValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RetryPolicy_RetryBackOffValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RetryPolicy_RetryBackOffValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RetryPolicy_RetryBackOffValidationError) ErrorName() string { + return "RetryPolicy_RetryBackOffValidationError" +} + +// Error satisfies the builtin error interface +func (e RetryPolicy_RetryBackOffValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRetryPolicy_RetryBackOff.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RetryPolicy_RetryBackOffValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RetryPolicy_RetryBackOffValidationError{} + +// Validate checks the field values on RateLimit_Action with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *RateLimit_Action) Validate() error { + if m == nil { + return nil + } + + switch m.ActionSpecifier.(type) { + + case *RateLimit_Action_SourceCluster_: + + if v, ok := interface{}(m.GetSourceCluster()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_ActionValidationError{ + field: "SourceCluster", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RateLimit_Action_DestinationCluster_: + + if v, ok := interface{}(m.GetDestinationCluster()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_ActionValidationError{ + field: "DestinationCluster", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RateLimit_Action_RequestHeaders_: + + if v, ok := interface{}(m.GetRequestHeaders()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_ActionValidationError{ + field: "RequestHeaders", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RateLimit_Action_RemoteAddress_: + + if v, ok := interface{}(m.GetRemoteAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_ActionValidationError{ + field: "RemoteAddress", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RateLimit_Action_GenericKey_: + + if v, ok := interface{}(m.GetGenericKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_ActionValidationError{ + field: "GenericKey", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *RateLimit_Action_HeaderValueMatch_: + + if v, ok := interface{}(m.GetHeaderValueMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_ActionValidationError{ + field: "HeaderValueMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return RateLimit_ActionValidationError{ + field: "ActionSpecifier", + reason: "value is required", + } + + } + + return nil +} + +// RateLimit_ActionValidationError is the validation error returned by +// RateLimit_Action.Validate if the designated constraints aren't met. +type RateLimit_ActionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_ActionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_ActionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_ActionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_ActionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_ActionValidationError) ErrorName() string { return "RateLimit_ActionValidationError" } + +// Error satisfies the builtin error interface +func (e RateLimit_ActionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_ActionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_ActionValidationError{} + +// Validate checks the field values on RateLimit_Action_SourceCluster with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RateLimit_Action_SourceCluster) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// RateLimit_Action_SourceClusterValidationError is the validation error +// returned by RateLimit_Action_SourceCluster.Validate if the designated +// constraints aren't met. +type RateLimit_Action_SourceClusterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_Action_SourceClusterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_Action_SourceClusterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_Action_SourceClusterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_Action_SourceClusterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_Action_SourceClusterValidationError) ErrorName() string { + return "RateLimit_Action_SourceClusterValidationError" +} + +// Error satisfies the builtin error interface +func (e RateLimit_Action_SourceClusterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action_SourceCluster.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_Action_SourceClusterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_Action_SourceClusterValidationError{} + +// Validate checks the field values on RateLimit_Action_DestinationCluster with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *RateLimit_Action_DestinationCluster) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// RateLimit_Action_DestinationClusterValidationError is the validation error +// returned by RateLimit_Action_DestinationCluster.Validate if the designated +// constraints aren't met. +type RateLimit_Action_DestinationClusterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_Action_DestinationClusterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_Action_DestinationClusterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_Action_DestinationClusterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_Action_DestinationClusterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_Action_DestinationClusterValidationError) ErrorName() string { + return "RateLimit_Action_DestinationClusterValidationError" +} + +// Error satisfies the builtin error interface +func (e RateLimit_Action_DestinationClusterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action_DestinationCluster.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_Action_DestinationClusterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_Action_DestinationClusterValidationError{} + +// Validate checks the field values on RateLimit_Action_RequestHeaders with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RateLimit_Action_RequestHeaders) Validate() error { + if m == nil { + return nil + } + + if len(m.GetHeaderName()) < 1 { + return RateLimit_Action_RequestHeadersValidationError{ + field: "HeaderName", + reason: "value length must be at least 1 bytes", + } + } + + if !_RateLimit_Action_RequestHeaders_HeaderName_Pattern.MatchString(m.GetHeaderName()) { + return RateLimit_Action_RequestHeadersValidationError{ + field: "HeaderName", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + if len(m.GetDescriptorKey()) < 1 { + return RateLimit_Action_RequestHeadersValidationError{ + field: "DescriptorKey", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// RateLimit_Action_RequestHeadersValidationError is the validation error +// returned by RateLimit_Action_RequestHeaders.Validate if the designated +// constraints aren't met. +type RateLimit_Action_RequestHeadersValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_Action_RequestHeadersValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_Action_RequestHeadersValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_Action_RequestHeadersValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_Action_RequestHeadersValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_Action_RequestHeadersValidationError) ErrorName() string { + return "RateLimit_Action_RequestHeadersValidationError" +} + +// Error satisfies the builtin error interface +func (e RateLimit_Action_RequestHeadersValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action_RequestHeaders.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_Action_RequestHeadersValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_Action_RequestHeadersValidationError{} + +var _RateLimit_Action_RequestHeaders_HeaderName_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on RateLimit_Action_RemoteAddress with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RateLimit_Action_RemoteAddress) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// RateLimit_Action_RemoteAddressValidationError is the validation error +// returned by RateLimit_Action_RemoteAddress.Validate if the designated +// constraints aren't met. +type RateLimit_Action_RemoteAddressValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_Action_RemoteAddressValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_Action_RemoteAddressValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_Action_RemoteAddressValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_Action_RemoteAddressValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_Action_RemoteAddressValidationError) ErrorName() string { + return "RateLimit_Action_RemoteAddressValidationError" +} + +// Error satisfies the builtin error interface +func (e RateLimit_Action_RemoteAddressValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action_RemoteAddress.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_Action_RemoteAddressValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_Action_RemoteAddressValidationError{} + +// Validate checks the field values on RateLimit_Action_GenericKey with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RateLimit_Action_GenericKey) Validate() error { + if m == nil { + return nil + } + + if len(m.GetDescriptorValue()) < 1 { + return RateLimit_Action_GenericKeyValidationError{ + field: "DescriptorValue", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// RateLimit_Action_GenericKeyValidationError is the validation error returned +// by RateLimit_Action_GenericKey.Validate if the designated constraints +// aren't met. +type RateLimit_Action_GenericKeyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_Action_GenericKeyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_Action_GenericKeyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_Action_GenericKeyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_Action_GenericKeyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_Action_GenericKeyValidationError) ErrorName() string { + return "RateLimit_Action_GenericKeyValidationError" +} + +// Error satisfies the builtin error interface +func (e RateLimit_Action_GenericKeyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action_GenericKey.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_Action_GenericKeyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_Action_GenericKeyValidationError{} + +// Validate checks the field values on RateLimit_Action_HeaderValueMatch with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *RateLimit_Action_HeaderValueMatch) Validate() error { + if m == nil { + return nil + } + + if len(m.GetDescriptorValue()) < 1 { + return RateLimit_Action_HeaderValueMatchValidationError{ + field: "DescriptorValue", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetExpectMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_Action_HeaderValueMatchValidationError{ + field: "ExpectMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetHeaders()) < 1 { + return RateLimit_Action_HeaderValueMatchValidationError{ + field: "Headers", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetHeaders() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RateLimit_Action_HeaderValueMatchValidationError{ + field: fmt.Sprintf("Headers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// RateLimit_Action_HeaderValueMatchValidationError is the validation error +// returned by RateLimit_Action_HeaderValueMatch.Validate if the designated +// constraints aren't met. +type RateLimit_Action_HeaderValueMatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RateLimit_Action_HeaderValueMatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RateLimit_Action_HeaderValueMatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RateLimit_Action_HeaderValueMatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RateLimit_Action_HeaderValueMatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RateLimit_Action_HeaderValueMatchValidationError) ErrorName() string { + return "RateLimit_Action_HeaderValueMatchValidationError" +} + +// Error satisfies the builtin error interface +func (e RateLimit_Action_HeaderValueMatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRateLimit_Action_HeaderValueMatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RateLimit_Action_HeaderValueMatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RateLimit_Action_HeaderValueMatchValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18518 +1,38 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/api/v2/route/route.proto -package route +package envoy_api_v2_route import ( - bytes "bytes" fmt "fmt" - io "io" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" math "math" - time "time" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" - - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - _type "github.com/envoyproxy/go-control-plane/envoy/type" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -type VirtualHost_TlsRequirementType int32 - -const ( - // No TLS requirement for the virtual host. - VirtualHost_NONE VirtualHost_TlsRequirementType = 0 - // External requests must use TLS. If a request is external and it is not - // using TLS, a 301 redirect will be sent telling the client to use HTTPS. - VirtualHost_EXTERNAL_ONLY VirtualHost_TlsRequirementType = 1 - // All requests must use TLS. If a request is not using TLS, a 301 redirect - // will be sent telling the client to use HTTPS. - VirtualHost_ALL VirtualHost_TlsRequirementType = 2 -) - -var VirtualHost_TlsRequirementType_name = map[int32]string{ - 0: "NONE", - 1: "EXTERNAL_ONLY", - 2: "ALL", -} - -var VirtualHost_TlsRequirementType_value = map[string]int32{ - "NONE": 0, - "EXTERNAL_ONLY": 1, - "ALL": 2, -} - -func (x VirtualHost_TlsRequirementType) String() string { - return proto.EnumName(VirtualHost_TlsRequirementType_name, int32(x)) -} - -func (VirtualHost_TlsRequirementType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{0, 0} -} - -type RouteAction_ClusterNotFoundResponseCode int32 - -const ( - // HTTP status code - 503 Service Unavailable. - RouteAction_SERVICE_UNAVAILABLE RouteAction_ClusterNotFoundResponseCode = 0 - // HTTP status code - 404 Not Found. - RouteAction_NOT_FOUND RouteAction_ClusterNotFoundResponseCode = 1 -) - -var RouteAction_ClusterNotFoundResponseCode_name = map[int32]string{ - 0: "SERVICE_UNAVAILABLE", - 1: "NOT_FOUND", -} - -var RouteAction_ClusterNotFoundResponseCode_value = map[string]int32{ - "SERVICE_UNAVAILABLE": 0, - "NOT_FOUND": 1, -} - -func (x RouteAction_ClusterNotFoundResponseCode) String() string { - return proto.EnumName(RouteAction_ClusterNotFoundResponseCode_name, int32(x)) -} - -func (RouteAction_ClusterNotFoundResponseCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 0} -} - -// Configures :ref:`internal redirect ` behavior. -type RouteAction_InternalRedirectAction int32 - -const ( - RouteAction_PASS_THROUGH_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 0 - RouteAction_HANDLE_INTERNAL_REDIRECT RouteAction_InternalRedirectAction = 1 -) - -var RouteAction_InternalRedirectAction_name = map[int32]string{ - 0: "PASS_THROUGH_INTERNAL_REDIRECT", - 1: "HANDLE_INTERNAL_REDIRECT", -} - -var RouteAction_InternalRedirectAction_value = map[string]int32{ - "PASS_THROUGH_INTERNAL_REDIRECT": 0, - "HANDLE_INTERNAL_REDIRECT": 1, -} - -func (x RouteAction_InternalRedirectAction) String() string { - return proto.EnumName(RouteAction_InternalRedirectAction_name, int32(x)) -} - -func (RouteAction_InternalRedirectAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 1} -} - -type RedirectAction_RedirectResponseCode int32 - -const ( - // Moved Permanently HTTP Status Code - 301. - RedirectAction_MOVED_PERMANENTLY RedirectAction_RedirectResponseCode = 0 - // Found HTTP Status Code - 302. - RedirectAction_FOUND RedirectAction_RedirectResponseCode = 1 - // See Other HTTP Status Code - 303. - RedirectAction_SEE_OTHER RedirectAction_RedirectResponseCode = 2 - // Temporary Redirect HTTP Status Code - 307. - RedirectAction_TEMPORARY_REDIRECT RedirectAction_RedirectResponseCode = 3 - // Permanent Redirect HTTP Status Code - 308. - RedirectAction_PERMANENT_REDIRECT RedirectAction_RedirectResponseCode = 4 -) - -var RedirectAction_RedirectResponseCode_name = map[int32]string{ - 0: "MOVED_PERMANENTLY", - 1: "FOUND", - 2: "SEE_OTHER", - 3: "TEMPORARY_REDIRECT", - 4: "PERMANENT_REDIRECT", -} - -var RedirectAction_RedirectResponseCode_value = map[string]int32{ - "MOVED_PERMANENTLY": 0, - "FOUND": 1, - "SEE_OTHER": 2, - "TEMPORARY_REDIRECT": 3, - "PERMANENT_REDIRECT": 4, -} - -func (x RedirectAction_RedirectResponseCode) String() string { - return proto.EnumName(RedirectAction_RedirectResponseCode_name, int32(x)) -} - -func (RedirectAction_RedirectResponseCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{8, 0} -} - -// The top level element in the routing configuration is a virtual host. Each virtual host has -// a logical name as well as a set of domains that get routed to it based on the incoming request's -// host header. This allows a single listener to service multiple top level domain path trees. Once -// a virtual host is selected based on the domain, the routes are processed in order to see which -// upstream cluster to route to or whether to perform a redirect. -// [#comment:next free field: 17] -type VirtualHost struct { - // The logical name of the virtual host. This is used when emitting certain - // statistics but is not relevant for routing. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // A list of domains (host/authority header) that will be matched to this - // virtual host. Wildcard hosts are supported in the suffix or prefix form. - // - // Domain search order: - // 1. Exact domain names: ``www.foo.com``. - // 2. Suffix domain wildcards: ``*.foo.com`` or ``*-bar.foo.com``. - // 3. Prefix domain wildcards: ``foo.*`` or ``foo-*``. - // 4. Special wildcard ``*`` matching any domain. - // - // .. note:: - // - // The wildcard will not match the empty string. - // e.g. ``*-bar.foo.com`` will match ``baz-bar.foo.com`` but not ``-bar.foo.com``. - // The longest wildcards match first. - // Only a single virtual host in the entire route configuration can match on ``*``. A domain - // must be unique across all virtual hosts or the config will fail to load. - Domains []string `protobuf:"bytes,2,rep,name=domains,proto3" json:"domains,omitempty"` - // The list of routes that will be matched, in order, for incoming requests. - // The first route that matches will be used. - Routes []Route `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes"` - // Specifies the type of TLS enforcement the virtual host expects. If this option is not - // specified, there is no TLS requirement for the virtual host. - RequireTls VirtualHost_TlsRequirementType `protobuf:"varint,4,opt,name=require_tls,json=requireTls,proto3,enum=envoy.api.v2.route.VirtualHost_TlsRequirementType" json:"require_tls,omitempty"` - // A list of virtual clusters defined for this virtual host. Virtual clusters - // are used for additional statistics gathering. - VirtualClusters []*VirtualCluster `protobuf:"bytes,5,rep,name=virtual_clusters,json=virtualClusters,proto3" json:"virtual_clusters,omitempty"` - // Specifies a set of rate limit configurations that will be applied to the - // virtual host. - RateLimits []*RateLimit `protobuf:"bytes,6,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"` - // Specifies a list of HTTP headers that should be added to each request - // handled by this virtual host. Headers specified at this level are applied - // after headers from enclosed :ref:`envoy_api_msg_route.Route` and before headers from the - // enclosing :ref:`envoy_api_msg_RouteConfiguration`. For more information, including - // details on header value syntax, see the documentation on :ref:`custom request headers - // `. - RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,7,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each request - // handled by this virtual host. - RequestHeadersToRemove []string `protobuf:"bytes,13,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` - // Specifies a list of HTTP headers that should be added to each response - // handled by this virtual host. Headers specified at this level are applied - // after headers from enclosed :ref:`envoy_api_msg_route.Route` and before headers from the - // enclosing :ref:`envoy_api_msg_RouteConfiguration`. For more information, including - // details on header value syntax, see the documentation on :ref:`custom request headers - // `. - ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each response - // handled by this virtual host. - ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` - // Indicates that the virtual host has a CORS policy. - Cors *CorsPolicy `protobuf:"bytes,8,opt,name=cors,proto3" json:"cors,omitempty"` - // The per_filter_config field can be used to provide virtual host-specific - // configurations for filters. The key should match the filter name, such as - // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter - // specific; see the :ref:`HTTP filter documentation ` - // for if and how it is utilized. - PerFilterConfig map[string]*types.Struct `protobuf:"bytes,12,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The per_filter_config field can be used to provide virtual host-specific - // configurations for filters. The key should match the filter name, such as - // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter - // specific; see the :ref:`HTTP filter documentation ` - // for if and how it is utilized. - TypedPerFilterConfig map[string]*types.Any `protobuf:"bytes,15,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Decides whether the :ref:`x-envoy-attempt-count - // ` header should be included - // in the upstream request. Setting this option will cause it to override any existing header - // value, so in the case of two Envoys on the request path with this option enabled, the upstream - // will see the attempt count as perceived by the second Envoy. Defaults to false. - // This header is unaffected by the - // :ref:`suppress_envoy_headers - // ` flag. - IncludeRequestAttemptCount bool `protobuf:"varint,14,opt,name=include_request_attempt_count,json=includeRequestAttemptCount,proto3" json:"include_request_attempt_count,omitempty"` - // Indicates the retry policy for all routes in this virtual host. Note that setting a - // route level entry will take precedence over this config and it'll be treated - // independently (e.g.: values are not inherited). - RetryPolicy *RetryPolicy `protobuf:"bytes,16,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` - // Indicates the hedge policy for all routes in this virtual host. Note that setting a - // route level entry will take precedence over this config and it'll be treated - // independently (e.g.: values are not inherited). - // [#not-implemented-hide:] - HedgePolicy *HedgePolicy `protobuf:"bytes,17,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *VirtualHost) Reset() { *m = VirtualHost{} } -func (m *VirtualHost) String() string { return proto.CompactTextString(m) } -func (*VirtualHost) ProtoMessage() {} -func (*VirtualHost) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{0} -} -func (m *VirtualHost) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VirtualHost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *VirtualHost) XXX_Merge(src proto.Message) { - xxx_messageInfo_VirtualHost.Merge(m, src) -} -func (m *VirtualHost) XXX_Size() int { - return m.Size() -} -func (m *VirtualHost) XXX_DiscardUnknown() { - xxx_messageInfo_VirtualHost.DiscardUnknown(m) -} - -var xxx_messageInfo_VirtualHost proto.InternalMessageInfo - -func (m *VirtualHost) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *VirtualHost) GetDomains() []string { - if m != nil { - return m.Domains - } - return nil -} - -func (m *VirtualHost) GetRoutes() []Route { - if m != nil { - return m.Routes - } - return nil -} - -func (m *VirtualHost) GetRequireTls() VirtualHost_TlsRequirementType { - if m != nil { - return m.RequireTls - } - return VirtualHost_NONE -} - -func (m *VirtualHost) GetVirtualClusters() []*VirtualCluster { - if m != nil { - return m.VirtualClusters - } - return nil -} - -func (m *VirtualHost) GetRateLimits() []*RateLimit { - if m != nil { - return m.RateLimits - } - return nil -} - -func (m *VirtualHost) GetRequestHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.RequestHeadersToAdd - } - return nil -} - -func (m *VirtualHost) GetRequestHeadersToRemove() []string { - if m != nil { - return m.RequestHeadersToRemove - } - return nil -} - -func (m *VirtualHost) GetResponseHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.ResponseHeadersToAdd - } - return nil -} - -func (m *VirtualHost) GetResponseHeadersToRemove() []string { - if m != nil { - return m.ResponseHeadersToRemove - } - return nil -} - -func (m *VirtualHost) GetCors() *CorsPolicy { - if m != nil { - return m.Cors - } - return nil -} - -func (m *VirtualHost) GetPerFilterConfig() map[string]*types.Struct { - if m != nil { - return m.PerFilterConfig - } - return nil -} - -func (m *VirtualHost) GetTypedPerFilterConfig() map[string]*types.Any { - if m != nil { - return m.TypedPerFilterConfig - } - return nil -} - -func (m *VirtualHost) GetIncludeRequestAttemptCount() bool { - if m != nil { - return m.IncludeRequestAttemptCount - } - return false -} - -func (m *VirtualHost) GetRetryPolicy() *RetryPolicy { - if m != nil { - return m.RetryPolicy - } - return nil -} - -func (m *VirtualHost) GetHedgePolicy() *HedgePolicy { - if m != nil { - return m.HedgePolicy - } - return nil -} - -// A route is both a specification of how to match a request as well as an indication of what to do -// next (e.g., redirect, forward, rewrite, etc.). -// -// .. attention:: -// -// Envoy supports routing on HTTP method via :ref:`header matching -// `. -// [#comment:next free field: 14] -type Route struct { - // Route matching parameters. - Match RouteMatch `protobuf:"bytes,1,opt,name=match,proto3" json:"match"` - // Types that are valid to be assigned to Action: - // *Route_Route - // *Route_Redirect - // *Route_DirectResponse - Action isRoute_Action `protobuf_oneof:"action"` - // The Metadata field can be used to provide additional information - // about the route. It can be used for configuration, stats, and logging. - // The metadata should go under the filter namespace that will need it. - // For instance, if the metadata is intended for the Router filter, - // the filter name should be specified as *envoy.router*. - Metadata *core.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` - // Decorator for the matched route. - Decorator *Decorator `protobuf:"bytes,5,opt,name=decorator,proto3" json:"decorator,omitempty"` - // The per_filter_config field can be used to provide route-specific - // configurations for filters. The key should match the filter name, such as - // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter - // specific; see the :ref:`HTTP filter documentation ` for - // if and how it is utilized. - PerFilterConfig map[string]*types.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The per_filter_config field can be used to provide route-specific - // configurations for filters. The key should match the filter name, such as - // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter - // specific; see the :ref:`HTTP filter documentation ` for - // if and how it is utilized. - TypedPerFilterConfig map[string]*types.Any `protobuf:"bytes,13,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Specifies a set of headers that will be added to requests matching this - // route. Headers specified at this level are applied before headers from the - // enclosing :ref:`envoy_api_msg_route.VirtualHost` and - // :ref:`envoy_api_msg_RouteConfiguration`. For more information, including details on - // header value syntax, see the documentation on :ref:`custom request headers - // `. - RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,9,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each request - // matching this route. - RequestHeadersToRemove []string `protobuf:"bytes,12,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` - // Specifies a set of headers that will be added to responses to requests - // matching this route. Headers specified at this level are applied before - // headers from the enclosing :ref:`envoy_api_msg_route.VirtualHost` and - // :ref:`envoy_api_msg_RouteConfiguration`. For more information, including - // details on header value syntax, see the documentation on - // :ref:`custom request headers `. - ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,10,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each response - // to requests matching this route. - ResponseHeadersToRemove []string `protobuf:"bytes,11,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Route) Reset() { *m = Route{} } -func (m *Route) String() string { return proto.CompactTextString(m) } -func (*Route) ProtoMessage() {} -func (*Route) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{1} -} -func (m *Route) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Route) XXX_Merge(src proto.Message) { - xxx_messageInfo_Route.Merge(m, src) -} -func (m *Route) XXX_Size() int { - return m.Size() -} -func (m *Route) XXX_DiscardUnknown() { - xxx_messageInfo_Route.DiscardUnknown(m) -} - -var xxx_messageInfo_Route proto.InternalMessageInfo - -type isRoute_Action interface { - isRoute_Action() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type Route_Route struct { - Route *RouteAction `protobuf:"bytes,2,opt,name=route,proto3,oneof"` -} -type Route_Redirect struct { - Redirect *RedirectAction `protobuf:"bytes,3,opt,name=redirect,proto3,oneof"` -} -type Route_DirectResponse struct { - DirectResponse *DirectResponseAction `protobuf:"bytes,7,opt,name=direct_response,json=directResponse,proto3,oneof"` -} - -func (*Route_Route) isRoute_Action() {} -func (*Route_Redirect) isRoute_Action() {} -func (*Route_DirectResponse) isRoute_Action() {} - -func (m *Route) GetAction() isRoute_Action { - if m != nil { - return m.Action - } - return nil -} - -func (m *Route) GetMatch() RouteMatch { - if m != nil { - return m.Match - } - return RouteMatch{} -} - -func (m *Route) GetRoute() *RouteAction { - if x, ok := m.GetAction().(*Route_Route); ok { - return x.Route - } - return nil -} - -func (m *Route) GetRedirect() *RedirectAction { - if x, ok := m.GetAction().(*Route_Redirect); ok { - return x.Redirect - } - return nil -} - -func (m *Route) GetDirectResponse() *DirectResponseAction { - if x, ok := m.GetAction().(*Route_DirectResponse); ok { - return x.DirectResponse - } - return nil -} - -func (m *Route) GetMetadata() *core.Metadata { - if m != nil { - return m.Metadata - } - return nil -} - -func (m *Route) GetDecorator() *Decorator { - if m != nil { - return m.Decorator - } - return nil -} - -func (m *Route) GetPerFilterConfig() map[string]*types.Struct { - if m != nil { - return m.PerFilterConfig - } - return nil -} - -func (m *Route) GetTypedPerFilterConfig() map[string]*types.Any { - if m != nil { - return m.TypedPerFilterConfig - } - return nil -} - -func (m *Route) GetRequestHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.RequestHeadersToAdd - } - return nil -} - -func (m *Route) GetRequestHeadersToRemove() []string { - if m != nil { - return m.RequestHeadersToRemove - } - return nil -} - -func (m *Route) GetResponseHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.ResponseHeadersToAdd - } - return nil -} - -func (m *Route) GetResponseHeadersToRemove() []string { - if m != nil { - return m.ResponseHeadersToRemove - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Route) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Route_OneofMarshaler, _Route_OneofUnmarshaler, _Route_OneofSizer, []interface{}{ - (*Route_Route)(nil), - (*Route_Redirect)(nil), - (*Route_DirectResponse)(nil), - } -} - -func _Route_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Route) - // action - switch x := m.Action.(type) { - case *Route_Route: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Route); err != nil { - return err - } - case *Route_Redirect: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Redirect); err != nil { - return err - } - case *Route_DirectResponse: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.DirectResponse); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Route.Action has unexpected type %T", x) - } - return nil -} - -func _Route_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Route) - switch tag { - case 2: // action.route - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RouteAction) - err := b.DecodeMessage(msg) - m.Action = &Route_Route{msg} - return true, err - case 3: // action.redirect - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RedirectAction) - err := b.DecodeMessage(msg) - m.Action = &Route_Redirect{msg} - return true, err - case 7: // action.direct_response - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(DirectResponseAction) - err := b.DecodeMessage(msg) - m.Action = &Route_DirectResponse{msg} - return true, err - default: - return false, nil - } -} - -func _Route_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Route) - // action - switch x := m.Action.(type) { - case *Route_Route: - s := proto.Size(x.Route) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Route_Redirect: - s := proto.Size(x.Redirect) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *Route_DirectResponse: - s := proto.Size(x.DirectResponse) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Compared to the :ref:`cluster ` field that specifies a -// single upstream cluster as the target of a request, the :ref:`weighted_clusters -// ` option allows for specification of -// multiple upstream clusters along with weights that indicate the percentage of -// traffic to be forwarded to each cluster. The router selects an upstream cluster based on the -// weights. -// [#comment:next free field: 11] -type WeightedCluster struct { - // Specifies one or more upstream clusters associated with the route. - Clusters []*WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"` - // Specifies the total weight across all clusters. The sum of all cluster weights must equal this - // value, which must be greater than 0. Defaults to 100. - TotalWeight *types.UInt32Value `protobuf:"bytes,3,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` - // Specifies the runtime key prefix that should be used to construct the - // runtime keys associated with each cluster. When the *runtime_key_prefix* is - // specified, the router will look for weights associated with each upstream - // cluster under the key *runtime_key_prefix* + "." + *cluster[i].name* where - // *cluster[i]* denotes an entry in the clusters array field. If the runtime - // key for the cluster does not exist, the value specified in the - // configuration file will be used as the default weight. See the :ref:`runtime documentation - // ` for how key names map to the underlying implementation. - RuntimeKeyPrefix string `protobuf:"bytes,2,opt,name=runtime_key_prefix,json=runtimeKeyPrefix,proto3" json:"runtime_key_prefix,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *WeightedCluster) Reset() { *m = WeightedCluster{} } -func (m *WeightedCluster) String() string { return proto.CompactTextString(m) } -func (*WeightedCluster) ProtoMessage() {} -func (*WeightedCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{2} -} -func (m *WeightedCluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WeightedCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *WeightedCluster) XXX_Merge(src proto.Message) { - xxx_messageInfo_WeightedCluster.Merge(m, src) -} -func (m *WeightedCluster) XXX_Size() int { - return m.Size() -} -func (m *WeightedCluster) XXX_DiscardUnknown() { - xxx_messageInfo_WeightedCluster.DiscardUnknown(m) -} - -var xxx_messageInfo_WeightedCluster proto.InternalMessageInfo - -func (m *WeightedCluster) GetClusters() []*WeightedCluster_ClusterWeight { - if m != nil { - return m.Clusters - } - return nil -} - -func (m *WeightedCluster) GetTotalWeight() *types.UInt32Value { - if m != nil { - return m.TotalWeight - } - return nil -} - -func (m *WeightedCluster) GetRuntimeKeyPrefix() string { - if m != nil { - return m.RuntimeKeyPrefix - } - return "" -} - -type WeightedCluster_ClusterWeight struct { - // Name of the upstream cluster. The cluster must exist in the - // :ref:`cluster manager configuration `. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // An integer between 0 and :ref:`total_weight - // `. When a request matches the route, - // the choice of an upstream cluster is determined by its weight. The sum of weights across all - // entries in the clusters array must add up to the total_weight, which defaults to 100. - Weight *types.UInt32Value `protobuf:"bytes,2,opt,name=weight,proto3" json:"weight,omitempty"` - // Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints in - // the upstream cluster with metadata matching what is set in this field will be considered for - // load balancing. Note that this will be merged with what's provided in :ref: - // `RouteAction.MetadataMatch `, with values - // here taking precedence. The filter name should be specified as *envoy.lb*. - MetadataMatch *core.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` - // Specifies a list of headers to be added to requests when this cluster is selected - // through the enclosing :ref:`envoy_api_msg_route.RouteAction`. - // Headers specified at this level are applied before headers from the enclosing - // :ref:`envoy_api_msg_route.Route`, :ref:`envoy_api_msg_route.VirtualHost`, and - // :ref:`envoy_api_msg_RouteConfiguration`. For more information, including details on - // header value syntax, see the documentation on :ref:`custom request headers - // `. - RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,4,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` - // Specifies a list of HTTP headers that should be removed from each request when - // this cluster is selected through the enclosing :ref:`envoy_api_msg_route.RouteAction`. - RequestHeadersToRemove []string `protobuf:"bytes,9,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` - // Specifies a list of headers to be added to responses when this cluster is selected - // through the enclosing :ref:`envoy_api_msg_route.RouteAction`. - // Headers specified at this level are applied before headers from the enclosing - // :ref:`envoy_api_msg_route.Route`, :ref:`envoy_api_msg_route.VirtualHost`, and - // :ref:`envoy_api_msg_RouteConfiguration`. For more information, including details on - // header value syntax, see the documentation on :ref:`custom request headers - // `. - ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,5,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` - // Specifies a list of headers to be removed from responses when this cluster is selected - // through the enclosing :ref:`envoy_api_msg_route.RouteAction`. - ResponseHeadersToRemove []string `protobuf:"bytes,6,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` - // The per_filter_config field can be used to provide weighted cluster-specific - // configurations for filters. The key should match the filter name, such as - // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter - // specific; see the :ref:`HTTP filter documentation ` - // for if and how it is utilized. - PerFilterConfig map[string]*types.Struct `protobuf:"bytes,8,rep,name=per_filter_config,json=perFilterConfig,proto3" json:"per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The per_filter_config field can be used to provide weighted cluster-specific - // configurations for filters. The key should match the filter name, such as - // *envoy.buffer* for the HTTP buffer filter. Use of this field is filter - // specific; see the :ref:`HTTP filter documentation ` - // for if and how it is utilized. - TypedPerFilterConfig map[string]*types.Any `protobuf:"bytes,10,rep,name=typed_per_filter_config,json=typedPerFilterConfig,proto3" json:"typed_per_filter_config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *WeightedCluster_ClusterWeight) Reset() { *m = WeightedCluster_ClusterWeight{} } -func (m *WeightedCluster_ClusterWeight) String() string { return proto.CompactTextString(m) } -func (*WeightedCluster_ClusterWeight) ProtoMessage() {} -func (*WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{2, 0} -} -func (m *WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *WeightedCluster_ClusterWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *WeightedCluster_ClusterWeight) XXX_Merge(src proto.Message) { - xxx_messageInfo_WeightedCluster_ClusterWeight.Merge(m, src) -} -func (m *WeightedCluster_ClusterWeight) XXX_Size() int { - return m.Size() -} -func (m *WeightedCluster_ClusterWeight) XXX_DiscardUnknown() { - xxx_messageInfo_WeightedCluster_ClusterWeight.DiscardUnknown(m) -} - -var xxx_messageInfo_WeightedCluster_ClusterWeight proto.InternalMessageInfo - -func (m *WeightedCluster_ClusterWeight) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *WeightedCluster_ClusterWeight) GetWeight() *types.UInt32Value { - if m != nil { - return m.Weight - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetMetadataMatch() *core.Metadata { - if m != nil { - return m.MetadataMatch - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetRequestHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.RequestHeadersToAdd - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetRequestHeadersToRemove() []string { - if m != nil { - return m.RequestHeadersToRemove - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToAdd() []*core.HeaderValueOption { - if m != nil { - return m.ResponseHeadersToAdd - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetResponseHeadersToRemove() []string { - if m != nil { - return m.ResponseHeadersToRemove - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetPerFilterConfig() map[string]*types.Struct { - if m != nil { - return m.PerFilterConfig - } - return nil -} - -func (m *WeightedCluster_ClusterWeight) GetTypedPerFilterConfig() map[string]*types.Any { - if m != nil { - return m.TypedPerFilterConfig - } - return nil -} - -type RouteMatch struct { - // Types that are valid to be assigned to PathSpecifier: - // *RouteMatch_Prefix - // *RouteMatch_Path - // *RouteMatch_Regex - PathSpecifier isRouteMatch_PathSpecifier `protobuf_oneof:"path_specifier"` - // Indicates that prefix/path matching should be case insensitive. The default - // is true. - CaseSensitive *types.BoolValue `protobuf:"bytes,4,opt,name=case_sensitive,json=caseSensitive,proto3" json:"case_sensitive,omitempty"` - // Indicates that the route should additionally match on a runtime key. Every time the route - // is considered for a match, it must also fall under the percentage of matches indicated by - // this field. For some fraction N/D, a random number in the range [0,D) is selected. If the - // number is <= the value of the numerator N, or if the key is not present, the default - // value, the router continues to evaluate the remaining match criteria. A runtime_fraction - // route configuration can be used to roll out route changes in a gradual manner without full - // code/config deploys. Refer to the :ref:`traffic shifting - // ` docs for additional documentation. - // - // .. note:: - // - // Parsing this field is implemented such that the runtime key's data may be represented - // as a FractionalPercent proto represented as JSON/YAML and may also be represented as an - // integer with the assumption that the value is an integral percentage out of 100. For - // instance, a runtime key lookup returning the value "42" would parse as a FractionalPercent - // whose numerator is 42 and denominator is HUNDRED. This preserves legacy semantics. - RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"` - // Specifies a set of headers that the route should match on. The router will - // check the request’s headers against all the specified headers in the route - // config. A match will happen if all the headers in the route are present in - // the request with the same values (or based on presence if the value field - // is not in the config). - Headers []*HeaderMatcher `protobuf:"bytes,6,rep,name=headers,proto3" json:"headers,omitempty"` - // Specifies a set of URL query parameters on which the route should - // match. The router will check the query string from the *path* header - // against all the specified query parameters. If the number of specified - // query parameters is nonzero, they all must match the *path* header's - // query string for a match to occur. - QueryParameters []*QueryParameterMatcher `protobuf:"bytes,7,rep,name=query_parameters,json=queryParameters,proto3" json:"query_parameters,omitempty"` - // If specified, only gRPC requests will be matched. The router will check - // that the content-type header has a application/grpc or one of the various - // application/grpc+ values. - Grpc *RouteMatch_GrpcRouteMatchOptions `protobuf:"bytes,8,opt,name=grpc,proto3" json:"grpc,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteMatch) Reset() { *m = RouteMatch{} } -func (m *RouteMatch) String() string { return proto.CompactTextString(m) } -func (*RouteMatch) ProtoMessage() {} -func (*RouteMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{3} -} -func (m *RouteMatch) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteMatch) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteMatch.Merge(m, src) -} -func (m *RouteMatch) XXX_Size() int { - return m.Size() -} -func (m *RouteMatch) XXX_DiscardUnknown() { - xxx_messageInfo_RouteMatch.DiscardUnknown(m) -} +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -var xxx_messageInfo_RouteMatch proto.InternalMessageInfo - -type isRouteMatch_PathSpecifier interface { - isRouteMatch_PathSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RouteMatch_Prefix struct { - Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3,oneof"` -} -type RouteMatch_Path struct { - Path string `protobuf:"bytes,2,opt,name=path,proto3,oneof"` -} -type RouteMatch_Regex struct { - Regex string `protobuf:"bytes,3,opt,name=regex,proto3,oneof"` -} - -func (*RouteMatch_Prefix) isRouteMatch_PathSpecifier() {} -func (*RouteMatch_Path) isRouteMatch_PathSpecifier() {} -func (*RouteMatch_Regex) isRouteMatch_PathSpecifier() {} - -func (m *RouteMatch) GetPathSpecifier() isRouteMatch_PathSpecifier { - if m != nil { - return m.PathSpecifier - } - return nil -} - -func (m *RouteMatch) GetPrefix() string { - if x, ok := m.GetPathSpecifier().(*RouteMatch_Prefix); ok { - return x.Prefix - } - return "" -} - -func (m *RouteMatch) GetPath() string { - if x, ok := m.GetPathSpecifier().(*RouteMatch_Path); ok { - return x.Path - } - return "" -} - -func (m *RouteMatch) GetRegex() string { - if x, ok := m.GetPathSpecifier().(*RouteMatch_Regex); ok { - return x.Regex - } - return "" -} - -func (m *RouteMatch) GetCaseSensitive() *types.BoolValue { - if m != nil { - return m.CaseSensitive - } - return nil -} - -func (m *RouteMatch) GetRuntimeFraction() *core.RuntimeFractionalPercent { - if m != nil { - return m.RuntimeFraction - } - return nil -} - -func (m *RouteMatch) GetHeaders() []*HeaderMatcher { - if m != nil { - return m.Headers - } - return nil -} - -func (m *RouteMatch) GetQueryParameters() []*QueryParameterMatcher { - if m != nil { - return m.QueryParameters - } - return nil -} - -func (m *RouteMatch) GetGrpc() *RouteMatch_GrpcRouteMatchOptions { - if m != nil { - return m.Grpc - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RouteMatch) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RouteMatch_OneofMarshaler, _RouteMatch_OneofUnmarshaler, _RouteMatch_OneofSizer, []interface{}{ - (*RouteMatch_Prefix)(nil), - (*RouteMatch_Path)(nil), - (*RouteMatch_Regex)(nil), - } -} - -func _RouteMatch_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RouteMatch) - // path_specifier - switch x := m.PathSpecifier.(type) { - case *RouteMatch_Prefix: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Prefix) - case *RouteMatch_Path: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Path) - case *RouteMatch_Regex: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Regex) - case nil: - default: - return fmt.Errorf("RouteMatch.PathSpecifier has unexpected type %T", x) - } - return nil -} - -func _RouteMatch_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RouteMatch) - switch tag { - case 1: // path_specifier.prefix - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.PathSpecifier = &RouteMatch_Prefix{x} - return true, err - case 2: // path_specifier.path - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.PathSpecifier = &RouteMatch_Path{x} - return true, err - case 3: // path_specifier.regex - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.PathSpecifier = &RouteMatch_Regex{x} - return true, err - default: - return false, nil - } -} - -func _RouteMatch_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RouteMatch) - // path_specifier - switch x := m.PathSpecifier.(type) { - case *RouteMatch_Prefix: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Prefix))) - n += len(x.Prefix) - case *RouteMatch_Path: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Path))) - n += len(x.Path) - case *RouteMatch_Regex: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Regex))) - n += len(x.Regex) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type RouteMatch_GrpcRouteMatchOptions struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteMatch_GrpcRouteMatchOptions) Reset() { *m = RouteMatch_GrpcRouteMatchOptions{} } -func (m *RouteMatch_GrpcRouteMatchOptions) String() string { return proto.CompactTextString(m) } -func (*RouteMatch_GrpcRouteMatchOptions) ProtoMessage() {} -func (*RouteMatch_GrpcRouteMatchOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{3, 0} -} -func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.Merge(m, src) -} -func (m *RouteMatch_GrpcRouteMatchOptions) XXX_Size() int { - return m.Size() -} -func (m *RouteMatch_GrpcRouteMatchOptions) XXX_DiscardUnknown() { - xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteMatch_GrpcRouteMatchOptions proto.InternalMessageInfo - -// [#comment:next free field: 11] -type CorsPolicy struct { - // Specifies the origins that will be allowed to do CORS requests. - // - // An origin is allowed if either allow_origin or allow_origin_regex match. - AllowOrigin []string `protobuf:"bytes,1,rep,name=allow_origin,json=allowOrigin,proto3" json:"allow_origin,omitempty"` - // Specifies regex patterns that match allowed origins. - // - // An origin is allowed if either allow_origin or allow_origin_regex match. - AllowOriginRegex []string `protobuf:"bytes,8,rep,name=allow_origin_regex,json=allowOriginRegex,proto3" json:"allow_origin_regex,omitempty"` - // Specifies the content for the *access-control-allow-methods* header. - AllowMethods string `protobuf:"bytes,2,opt,name=allow_methods,json=allowMethods,proto3" json:"allow_methods,omitempty"` - // Specifies the content for the *access-control-allow-headers* header. - AllowHeaders string `protobuf:"bytes,3,opt,name=allow_headers,json=allowHeaders,proto3" json:"allow_headers,omitempty"` - // Specifies the content for the *access-control-expose-headers* header. - ExposeHeaders string `protobuf:"bytes,4,opt,name=expose_headers,json=exposeHeaders,proto3" json:"expose_headers,omitempty"` - // Specifies the content for the *access-control-max-age* header. - MaxAge string `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"` - // Specifies whether the resource allows credentials. - AllowCredentials *types.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"` - // Types that are valid to be assigned to EnabledSpecifier: - // *CorsPolicy_Enabled - // *CorsPolicy_FilterEnabled - EnabledSpecifier isCorsPolicy_EnabledSpecifier `protobuf_oneof:"enabled_specifier"` - // Specifies if CORS policies are evaluated and tracked when filter is off but - // does not enforce any policies. - // - // More information on how this can be controlled via runtime can be found - // :ref:`here `. - // - // .. note:: - // - // This field defaults to 100/:ref:`HUNDRED - // `. - ShadowEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,10,opt,name=shadow_enabled,json=shadowEnabled,proto3" json:"shadow_enabled,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CorsPolicy) Reset() { *m = CorsPolicy{} } -func (m *CorsPolicy) String() string { return proto.CompactTextString(m) } -func (*CorsPolicy) ProtoMessage() {} -func (*CorsPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{4} -} -func (m *CorsPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *CorsPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *CorsPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_CorsPolicy.Merge(m, src) -} -func (m *CorsPolicy) XXX_Size() int { - return m.Size() -} -func (m *CorsPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_CorsPolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_CorsPolicy proto.InternalMessageInfo - -type isCorsPolicy_EnabledSpecifier interface { - isCorsPolicy_EnabledSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type CorsPolicy_Enabled struct { - Enabled *types.BoolValue `protobuf:"bytes,7,opt,name=enabled,proto3,oneof"` -} -type CorsPolicy_FilterEnabled struct { - FilterEnabled *core.RuntimeFractionalPercent `protobuf:"bytes,9,opt,name=filter_enabled,json=filterEnabled,proto3,oneof"` -} - -func (*CorsPolicy_Enabled) isCorsPolicy_EnabledSpecifier() {} -func (*CorsPolicy_FilterEnabled) isCorsPolicy_EnabledSpecifier() {} - -func (m *CorsPolicy) GetEnabledSpecifier() isCorsPolicy_EnabledSpecifier { - if m != nil { - return m.EnabledSpecifier - } - return nil -} +func init() { proto.RegisterFile("envoy/api/v2/route/route.proto", fileDescriptor_7dc2895fb75d9d41) } -func (m *CorsPolicy) GetAllowOrigin() []string { - if m != nil { - return m.AllowOrigin - } - return nil +var fileDescriptor_7dc2895fb75d9d41 = []byte{ + // 151 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x33, 0xd2, 0x2f, 0xca, 0x2f, 0x2d, 0x49, 0x85, 0x90, + 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x42, 0x60, 0x79, 0xbd, 0xc4, 0x82, 0x4c, 0xbd, 0x32, + 0x23, 0x3d, 0xb0, 0x8c, 0x94, 0x6c, 0x69, 0x4a, 0x41, 0xa2, 0x7e, 0x62, 0x5e, 0x5e, 0x7e, 0x49, + 0x62, 0x49, 0x66, 0x7e, 0x5e, 0xb1, 0x7e, 0x71, 0x49, 0x62, 0x49, 0x69, 0x31, 0x44, 0x8b, 0x94, + 0x26, 0x2e, 0x23, 0xe3, 0x93, 0xf3, 0x73, 0x0b, 0xf2, 0xf3, 0x52, 0xf3, 0x4a, 0xa0, 0x4a, 0x9d, + 0x2c, 0x76, 0x35, 0x9c, 0xb8, 0xc8, 0xc6, 0x24, 0xc0, 0xc8, 0xa5, 0x90, 0x99, 0xaf, 0x07, 0xd6, + 0x57, 0x50, 0x94, 0x5f, 0x51, 0xa9, 0x87, 0x69, 0xab, 0x13, 0x57, 0x10, 0x88, 0x0a, 0x00, 0xe9, + 0x0b, 0x60, 0x0c, 0x60, 0x4c, 0x62, 0x03, 0x1b, 0x61, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x79, + 0xe9, 0x54, 0x84, 0xc2, 0x00, 0x00, 0x00, } - -func (m *CorsPolicy) GetAllowOriginRegex() []string { - if m != nil { - return m.AllowOriginRegex - } - return nil -} - -func (m *CorsPolicy) GetAllowMethods() string { - if m != nil { - return m.AllowMethods - } - return "" -} - -func (m *CorsPolicy) GetAllowHeaders() string { - if m != nil { - return m.AllowHeaders - } - return "" -} - -func (m *CorsPolicy) GetExposeHeaders() string { - if m != nil { - return m.ExposeHeaders - } - return "" -} - -func (m *CorsPolicy) GetMaxAge() string { - if m != nil { - return m.MaxAge - } - return "" -} - -func (m *CorsPolicy) GetAllowCredentials() *types.BoolValue { - if m != nil { - return m.AllowCredentials - } - return nil -} - -// Deprecated: Do not use. -func (m *CorsPolicy) GetEnabled() *types.BoolValue { - if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_Enabled); ok { - return x.Enabled - } - return nil -} - -func (m *CorsPolicy) GetFilterEnabled() *core.RuntimeFractionalPercent { - if x, ok := m.GetEnabledSpecifier().(*CorsPolicy_FilterEnabled); ok { - return x.FilterEnabled - } - return nil -} - -func (m *CorsPolicy) GetShadowEnabled() *core.RuntimeFractionalPercent { - if m != nil { - return m.ShadowEnabled - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*CorsPolicy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _CorsPolicy_OneofMarshaler, _CorsPolicy_OneofUnmarshaler, _CorsPolicy_OneofSizer, []interface{}{ - (*CorsPolicy_Enabled)(nil), - (*CorsPolicy_FilterEnabled)(nil), - } -} - -func _CorsPolicy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*CorsPolicy) - // enabled_specifier - switch x := m.EnabledSpecifier.(type) { - case *CorsPolicy_Enabled: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Enabled); err != nil { - return err - } - case *CorsPolicy_FilterEnabled: - _ = b.EncodeVarint(9<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.FilterEnabled); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("CorsPolicy.EnabledSpecifier has unexpected type %T", x) - } - return nil -} - -func _CorsPolicy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*CorsPolicy) - switch tag { - case 7: // enabled_specifier.enabled - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.BoolValue) - err := b.DecodeMessage(msg) - m.EnabledSpecifier = &CorsPolicy_Enabled{msg} - return true, err - case 9: // enabled_specifier.filter_enabled - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(core.RuntimeFractionalPercent) - err := b.DecodeMessage(msg) - m.EnabledSpecifier = &CorsPolicy_FilterEnabled{msg} - return true, err - default: - return false, nil - } -} - -func _CorsPolicy_OneofSizer(msg proto.Message) (n int) { - m := msg.(*CorsPolicy) - // enabled_specifier - switch x := m.EnabledSpecifier.(type) { - case *CorsPolicy_Enabled: - s := proto.Size(x.Enabled) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *CorsPolicy_FilterEnabled: - s := proto.Size(x.FilterEnabled) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// [#comment:next free field: 27] -type RouteAction struct { - // Types that are valid to be assigned to ClusterSpecifier: - // *RouteAction_Cluster - // *RouteAction_ClusterHeader - // *RouteAction_WeightedClusters - ClusterSpecifier isRouteAction_ClusterSpecifier `protobuf_oneof:"cluster_specifier"` - // The HTTP status code to use when configured cluster is not found. - // The default response code is 503 Service Unavailable. - ClusterNotFoundResponseCode RouteAction_ClusterNotFoundResponseCode `protobuf:"varint,20,opt,name=cluster_not_found_response_code,json=clusterNotFoundResponseCode,proto3,enum=envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode" json:"cluster_not_found_response_code,omitempty"` - // Optional endpoint metadata match criteria used by the subset load balancer. Only endpoints - // in the upstream cluster with metadata matching what's set in this field will be considered - // for load balancing. If using :ref:`weighted_clusters - // `, metadata will be merged, with values - // provided there taking precedence. The filter name should be specified as *envoy.lb*. - MetadataMatch *core.Metadata `protobuf:"bytes,4,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` - // Indicates that during forwarding, the matched prefix (or path) should be - // swapped with this value. This option allows application URLs to be rooted - // at a different path from those exposed at the reverse proxy layer. The router filter will - // place the original path before rewrite into the :ref:`x-envoy-original-path - // ` header. - // - // .. attention:: - // - // Pay careful attention to the use of trailing slashes in the - // :ref:`route's match ` prefix value. - // Stripping a prefix from a path requires multiple Routes to handle all cases. For example, - // rewriting */prefix* to */* and */prefix/etc* to */etc* cannot be done in a single - // :ref:`Route `, as shown by the below config entries: - // - // .. code-block:: yaml - // - // - match: - // prefix: "/prefix/" - // route: - // prefix_rewrite: "/" - // - match: - // prefix: "/prefix" - // route: - // prefix_rewrite: "/" - // - // Having above entries in the config, requests to */prefix* will be stripped to */*, while - // requests to */prefix/etc* will be stripped to */etc*. - PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3" json:"prefix_rewrite,omitempty"` - // Types that are valid to be assigned to HostRewriteSpecifier: - // *RouteAction_HostRewrite - // *RouteAction_AutoHostRewrite - HostRewriteSpecifier isRouteAction_HostRewriteSpecifier `protobuf_oneof:"host_rewrite_specifier"` - // Specifies the upstream timeout for the route. If not specified, the default is 15s. This - // spans between the point at which the entire downstream request (i.e. end-of-stream) has been - // processed and when the upstream response has been completely processed. - // - // .. note:: - // - // This timeout includes all retries. See also - // :ref:`config_http_filters_router_x-envoy-upstream-rq-timeout-ms`, - // :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms`, and the - // :ref:`retry overview `. - Timeout *time.Duration `protobuf:"bytes,8,opt,name=timeout,proto3,stdduration" json:"timeout,omitempty"` - // Specifies the idle timeout for the route. If not specified, there is no per-route idle timeout, - // although the connection manager wide :ref:`stream_idle_timeout - // ` - // will still apply. A value of 0 will completely disable the route's idle timeout, even if a - // connection manager stream idle timeout is configured. - // - // The idle timeout is distinct to :ref:`timeout - // `, which provides an upper bound - // on the upstream response time; :ref:`idle_timeout - // ` instead bounds the amount - // of time the request's stream may be idle. - // - // After header decoding, the idle timeout will apply on downstream and - // upstream request events. Each time an encode/decode event for headers or - // data is processed for the stream, the timer will be reset. If the timeout - // fires, the stream is terminated with a 408 Request Timeout error code if no - // upstream response header has been received, otherwise a stream reset - // occurs. - IdleTimeout *time.Duration `protobuf:"bytes,24,opt,name=idle_timeout,json=idleTimeout,proto3,stdduration" json:"idle_timeout,omitempty"` - // Indicates that the route has a retry policy. Note that if this is set, - // it'll take precedence over the virtual host level retry policy entirely - // (e.g.: policies are not merged, most internal one becomes the enforced policy). - RetryPolicy *RetryPolicy `protobuf:"bytes,9,opt,name=retry_policy,json=retryPolicy,proto3" json:"retry_policy,omitempty"` - // Indicates that the route has a request mirroring policy. - RequestMirrorPolicy *RouteAction_RequestMirrorPolicy `protobuf:"bytes,10,opt,name=request_mirror_policy,json=requestMirrorPolicy,proto3" json:"request_mirror_policy,omitempty"` - // Optionally specifies the :ref:`routing priority `. - // [#comment:TODO(htuch): add (validate.rules).enum.defined_only = true once - // https://github.com/lyft/protoc-gen-validate/issues/42 is resolved.] - Priority core.RoutingPriority `protobuf:"varint,11,opt,name=priority,proto3,enum=envoy.api.v2.core.RoutingPriority" json:"priority,omitempty"` - // Specifies a set of rate limit configurations that could be applied to the - // route. - RateLimits []*RateLimit `protobuf:"bytes,13,rep,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"` - // Specifies if the rate limit filter should include the virtual host rate - // limits. By default, if the route configured rate limits, the virtual host - // :ref:`rate_limits ` are not applied to the - // request. - IncludeVhRateLimits *types.BoolValue `protobuf:"bytes,14,opt,name=include_vh_rate_limits,json=includeVhRateLimits,proto3" json:"include_vh_rate_limits,omitempty"` - // Specifies a list of hash policies to use for ring hash load balancing. Each - // hash policy is evaluated individually and the combined result is used to - // route the request. The method of combination is deterministic such that - // identical lists of hash policies will produce the same hash. Since a hash - // policy examines specific parts of a request, it can fail to produce a hash - // (i.e. if the hashed header is not present). If (and only if) all configured - // hash policies fail to generate a hash, no hash will be produced for - // the route. In this case, the behavior is the same as if no hash policies - // were specified (i.e. the ring hash load balancer will choose a random - // backend). If a hash policy has the "terminal" attribute set to true, and - // there is already a hash generated, the hash is returned immediately, - // ignoring the rest of the hash policy list. - HashPolicy []*RouteAction_HashPolicy `protobuf:"bytes,15,rep,name=hash_policy,json=hashPolicy,proto3" json:"hash_policy,omitempty"` - // Indicates that the route has a CORS policy. - Cors *CorsPolicy `protobuf:"bytes,17,opt,name=cors,proto3" json:"cors,omitempty"` - // If present, and the request is a gRPC request, use the - // `grpc-timeout header `_, - // or its default value (infinity) instead of - // :ref:`timeout `, but limit the applied timeout - // to the maximum value specified here. If configured as 0, the maximum allowed timeout for - // gRPC requests is infinity. If not configured at all, the `grpc-timeout` header is not used - // and gRPC requests time out like any other requests using - // :ref:`timeout ` or its default. - // This can be used to prevent unexpected upstream request timeouts due to potentially long - // time gaps between gRPC request and response in gRPC streaming mode. - MaxGrpcTimeout *time.Duration `protobuf:"bytes,23,opt,name=max_grpc_timeout,json=maxGrpcTimeout,proto3,stdduration" json:"max_grpc_timeout,omitempty"` - // If present, Envoy will adjust the timeout provided by the `grpc-timeout` header by subtracting - // the provided duration from the header. This is useful in allowing Envoy to set its global - // timeout to be less than that of the deadline imposed by the calling client, which makes it more - // likely that Envoy will handle the timeout instead of having the call canceled by the client. - // The offset will only be applied if the provided grpc_timeout is greater than the offset. This - // ensures that the offset will only ever decrease the timeout and never set it to 0 (meaning - // infinity). - GrpcTimeoutOffset *time.Duration `protobuf:"bytes,28,opt,name=grpc_timeout_offset,json=grpcTimeoutOffset,proto3,stdduration" json:"grpc_timeout_offset,omitempty"` - UpgradeConfigs []*RouteAction_UpgradeConfig `protobuf:"bytes,25,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"` - InternalRedirectAction RouteAction_InternalRedirectAction `protobuf:"varint,26,opt,name=internal_redirect_action,json=internalRedirectAction,proto3,enum=envoy.api.v2.route.RouteAction_InternalRedirectAction" json:"internal_redirect_action,omitempty"` - // Indicates that the route has a hedge policy. Note that if this is set, - // it'll take precedence over the virtual host level hedge policy entirely - // (e.g.: policies are not merged, most internal one becomes the enforced policy). - // [#not-implemented-hide:] - HedgePolicy *HedgePolicy `protobuf:"bytes,27,opt,name=hedge_policy,json=hedgePolicy,proto3" json:"hedge_policy,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction) Reset() { *m = RouteAction{} } -func (m *RouteAction) String() string { return proto.CompactTextString(m) } -func (*RouteAction) ProtoMessage() {} -func (*RouteAction) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5} -} -func (m *RouteAction) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction.Merge(m, src) -} -func (m *RouteAction) XXX_Size() int { - return m.Size() -} -func (m *RouteAction) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction proto.InternalMessageInfo - -type isRouteAction_ClusterSpecifier interface { - isRouteAction_ClusterSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} -type isRouteAction_HostRewriteSpecifier interface { - isRouteAction_HostRewriteSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RouteAction_Cluster struct { - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3,oneof"` -} -type RouteAction_ClusterHeader struct { - ClusterHeader string `protobuf:"bytes,2,opt,name=cluster_header,json=clusterHeader,proto3,oneof"` -} -type RouteAction_WeightedClusters struct { - WeightedClusters *WeightedCluster `protobuf:"bytes,3,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"` -} -type RouteAction_HostRewrite struct { - HostRewrite string `protobuf:"bytes,6,opt,name=host_rewrite,json=hostRewrite,proto3,oneof"` -} -type RouteAction_AutoHostRewrite struct { - AutoHostRewrite *types.BoolValue `protobuf:"bytes,7,opt,name=auto_host_rewrite,json=autoHostRewrite,proto3,oneof"` -} - -func (*RouteAction_Cluster) isRouteAction_ClusterSpecifier() {} -func (*RouteAction_ClusterHeader) isRouteAction_ClusterSpecifier() {} -func (*RouteAction_WeightedClusters) isRouteAction_ClusterSpecifier() {} -func (*RouteAction_HostRewrite) isRouteAction_HostRewriteSpecifier() {} -func (*RouteAction_AutoHostRewrite) isRouteAction_HostRewriteSpecifier() {} - -func (m *RouteAction) GetClusterSpecifier() isRouteAction_ClusterSpecifier { - if m != nil { - return m.ClusterSpecifier - } - return nil -} -func (m *RouteAction) GetHostRewriteSpecifier() isRouteAction_HostRewriteSpecifier { - if m != nil { - return m.HostRewriteSpecifier - } - return nil -} - -func (m *RouteAction) GetCluster() string { - if x, ok := m.GetClusterSpecifier().(*RouteAction_Cluster); ok { - return x.Cluster - } - return "" -} - -func (m *RouteAction) GetClusterHeader() string { - if x, ok := m.GetClusterSpecifier().(*RouteAction_ClusterHeader); ok { - return x.ClusterHeader - } - return "" -} - -func (m *RouteAction) GetWeightedClusters() *WeightedCluster { - if x, ok := m.GetClusterSpecifier().(*RouteAction_WeightedClusters); ok { - return x.WeightedClusters - } - return nil -} - -func (m *RouteAction) GetClusterNotFoundResponseCode() RouteAction_ClusterNotFoundResponseCode { - if m != nil { - return m.ClusterNotFoundResponseCode - } - return RouteAction_SERVICE_UNAVAILABLE -} - -func (m *RouteAction) GetMetadataMatch() *core.Metadata { - if m != nil { - return m.MetadataMatch - } - return nil -} - -func (m *RouteAction) GetPrefixRewrite() string { - if m != nil { - return m.PrefixRewrite - } - return "" -} - -func (m *RouteAction) GetHostRewrite() string { - if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_HostRewrite); ok { - return x.HostRewrite - } - return "" -} - -func (m *RouteAction) GetAutoHostRewrite() *types.BoolValue { - if x, ok := m.GetHostRewriteSpecifier().(*RouteAction_AutoHostRewrite); ok { - return x.AutoHostRewrite - } - return nil -} - -func (m *RouteAction) GetTimeout() *time.Duration { - if m != nil { - return m.Timeout - } - return nil -} - -func (m *RouteAction) GetIdleTimeout() *time.Duration { - if m != nil { - return m.IdleTimeout - } - return nil -} - -func (m *RouteAction) GetRetryPolicy() *RetryPolicy { - if m != nil { - return m.RetryPolicy - } - return nil -} - -func (m *RouteAction) GetRequestMirrorPolicy() *RouteAction_RequestMirrorPolicy { - if m != nil { - return m.RequestMirrorPolicy - } - return nil -} - -func (m *RouteAction) GetPriority() core.RoutingPriority { - if m != nil { - return m.Priority - } - return core.RoutingPriority_DEFAULT -} - -func (m *RouteAction) GetRateLimits() []*RateLimit { - if m != nil { - return m.RateLimits - } - return nil -} - -func (m *RouteAction) GetIncludeVhRateLimits() *types.BoolValue { - if m != nil { - return m.IncludeVhRateLimits - } - return nil -} - -func (m *RouteAction) GetHashPolicy() []*RouteAction_HashPolicy { - if m != nil { - return m.HashPolicy - } - return nil -} - -func (m *RouteAction) GetCors() *CorsPolicy { - if m != nil { - return m.Cors - } - return nil -} - -func (m *RouteAction) GetMaxGrpcTimeout() *time.Duration { - if m != nil { - return m.MaxGrpcTimeout - } - return nil -} - -func (m *RouteAction) GetGrpcTimeoutOffset() *time.Duration { - if m != nil { - return m.GrpcTimeoutOffset - } - return nil -} - -func (m *RouteAction) GetUpgradeConfigs() []*RouteAction_UpgradeConfig { - if m != nil { - return m.UpgradeConfigs - } - return nil -} - -func (m *RouteAction) GetInternalRedirectAction() RouteAction_InternalRedirectAction { - if m != nil { - return m.InternalRedirectAction - } - return RouteAction_PASS_THROUGH_INTERNAL_REDIRECT -} - -func (m *RouteAction) GetHedgePolicy() *HedgePolicy { - if m != nil { - return m.HedgePolicy - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RouteAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RouteAction_OneofMarshaler, _RouteAction_OneofUnmarshaler, _RouteAction_OneofSizer, []interface{}{ - (*RouteAction_Cluster)(nil), - (*RouteAction_ClusterHeader)(nil), - (*RouteAction_WeightedClusters)(nil), - (*RouteAction_HostRewrite)(nil), - (*RouteAction_AutoHostRewrite)(nil), - } -} - -func _RouteAction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RouteAction) - // cluster_specifier - switch x := m.ClusterSpecifier.(type) { - case *RouteAction_Cluster: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Cluster) - case *RouteAction_ClusterHeader: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.ClusterHeader) - case *RouteAction_WeightedClusters: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.WeightedClusters); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RouteAction.ClusterSpecifier has unexpected type %T", x) - } - // host_rewrite_specifier - switch x := m.HostRewriteSpecifier.(type) { - case *RouteAction_HostRewrite: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.HostRewrite) - case *RouteAction_AutoHostRewrite: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.AutoHostRewrite); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RouteAction.HostRewriteSpecifier has unexpected type %T", x) - } - return nil -} - -func _RouteAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RouteAction) - switch tag { - case 1: // cluster_specifier.cluster - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ClusterSpecifier = &RouteAction_Cluster{x} - return true, err - case 2: // cluster_specifier.cluster_header - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ClusterSpecifier = &RouteAction_ClusterHeader{x} - return true, err - case 3: // cluster_specifier.weighted_clusters - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(WeightedCluster) - err := b.DecodeMessage(msg) - m.ClusterSpecifier = &RouteAction_WeightedClusters{msg} - return true, err - case 6: // host_rewrite_specifier.host_rewrite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HostRewriteSpecifier = &RouteAction_HostRewrite{x} - return true, err - case 7: // host_rewrite_specifier.auto_host_rewrite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.BoolValue) - err := b.DecodeMessage(msg) - m.HostRewriteSpecifier = &RouteAction_AutoHostRewrite{msg} - return true, err - default: - return false, nil - } -} - -func _RouteAction_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RouteAction) - // cluster_specifier - switch x := m.ClusterSpecifier.(type) { - case *RouteAction_Cluster: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Cluster))) - n += len(x.Cluster) - case *RouteAction_ClusterHeader: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.ClusterHeader))) - n += len(x.ClusterHeader) - case *RouteAction_WeightedClusters: - s := proto.Size(x.WeightedClusters) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - // host_rewrite_specifier - switch x := m.HostRewriteSpecifier.(type) { - case *RouteAction_HostRewrite: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.HostRewrite))) - n += len(x.HostRewrite) - case *RouteAction_AutoHostRewrite: - s := proto.Size(x.AutoHostRewrite) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// The router is capable of shadowing traffic from one cluster to another. The current -// implementation is "fire and forget," meaning Envoy will not wait for the shadow cluster to -// respond before returning the response from the primary cluster. All normal statistics are -// collected for the shadow cluster making this feature useful for testing. -// -// During shadowing, the host/authority header is altered such that *-shadow* is appended. This is -// useful for logging. For example, *cluster1* becomes *cluster1-shadow*. -type RouteAction_RequestMirrorPolicy struct { - // Specifies the cluster that requests will be mirrored to. The cluster must - // exist in the cluster manager configuration. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // If not specified, all requests to the target cluster will be mirrored. If - // specified, Envoy will lookup the runtime key to get the % of requests to - // mirror. Valid values are from 0 to 10000, allowing for increments of - // 0.01% of requests to be mirrored. If the runtime key is specified in the - // configuration but not present in runtime, 0 is the default and thus 0% of - // requests will be mirrored. - // - // .. attention:: - // - // **This field is deprecated**. Set the - // :ref:`runtime_fraction - // ` field instead. - RuntimeKey string `protobuf:"bytes,2,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` // Deprecated: Do not use. - // If both :ref:`runtime_key - // ` and this field are not - // specified, all requests to the target cluster will be mirrored. - // - // If specified, this field takes precedence over the `runtime_key` field and requests must also - // fall under the percentage of matches indicated by this field. - // - // For some fraction N/D, a random number in the range [0,D) is selected. If the - // number is <= the value of the numerator N, or if the key is not present, the default - // value, the request will be mirrored. - // - // .. note:: - // - // Parsing this field is implemented such that the runtime key's data may be represented - // as a :ref:`FractionalPercent ` proto represented - // as JSON/YAML and may also be represented as an integer with the assumption that the value - // is an integral percentage out of 100. For instance, a runtime key lookup returning the - // value "42" would parse as a `FractionalPercent` whose numerator is 42 and denominator is - // HUNDRED. This is behaviour is different to that of the deprecated `runtime_key` field, - // where the implicit denominator is 10000. - RuntimeFraction *core.RuntimeFractionalPercent `protobuf:"bytes,3,opt,name=runtime_fraction,json=runtimeFraction,proto3" json:"runtime_fraction,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_RequestMirrorPolicy) Reset() { *m = RouteAction_RequestMirrorPolicy{} } -func (m *RouteAction_RequestMirrorPolicy) String() string { return proto.CompactTextString(m) } -func (*RouteAction_RequestMirrorPolicy) ProtoMessage() {} -func (*RouteAction_RequestMirrorPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 0} -} -func (m *RouteAction_RequestMirrorPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_RequestMirrorPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction_RequestMirrorPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_RequestMirrorPolicy.Merge(m, src) -} -func (m *RouteAction_RequestMirrorPolicy) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_RequestMirrorPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_RequestMirrorPolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_RequestMirrorPolicy proto.InternalMessageInfo - -func (m *RouteAction_RequestMirrorPolicy) GetCluster() string { - if m != nil { - return m.Cluster - } - return "" -} - -// Deprecated: Do not use. -func (m *RouteAction_RequestMirrorPolicy) GetRuntimeKey() string { - if m != nil { - return m.RuntimeKey - } - return "" -} - -func (m *RouteAction_RequestMirrorPolicy) GetRuntimeFraction() *core.RuntimeFractionalPercent { - if m != nil { - return m.RuntimeFraction - } - return nil -} - -// Specifies the route's hashing policy if the upstream cluster uses a hashing :ref:`load balancer -// `. -type RouteAction_HashPolicy struct { - // Types that are valid to be assigned to PolicySpecifier: - // *RouteAction_HashPolicy_Header_ - // *RouteAction_HashPolicy_Cookie_ - // *RouteAction_HashPolicy_ConnectionProperties_ - PolicySpecifier isRouteAction_HashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"` - // The flag that shortcircuits the hash computing. This field provides a - // 'fallback' style of configuration: "if a terminal policy doesn't work, - // fallback to rest of the policy list", it saves time when the terminal - // policy works. - // - // If true, and there is already a hash computed, ignore rest of the - // list of hash polices. - // For example, if the following hash methods are configured: - // - // ========= ======== - // specifier terminal - // ========= ======== - // Header A true - // Header B false - // Header C false - // ========= ======== - // - // The generateHash process ends if policy "header A" generates a hash, as - // it's a terminal policy. - Terminal bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_HashPolicy) Reset() { *m = RouteAction_HashPolicy{} } -func (m *RouteAction_HashPolicy) String() string { return proto.CompactTextString(m) } -func (*RouteAction_HashPolicy) ProtoMessage() {} -func (*RouteAction_HashPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 1} -} -func (m *RouteAction_HashPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction_HashPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy.Merge(m, src) -} -func (m *RouteAction_HashPolicy) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_HashPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_HashPolicy proto.InternalMessageInfo - -type isRouteAction_HashPolicy_PolicySpecifier interface { - isRouteAction_HashPolicy_PolicySpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RouteAction_HashPolicy_Header_ struct { - Header *RouteAction_HashPolicy_Header `protobuf:"bytes,1,opt,name=header,proto3,oneof"` -} -type RouteAction_HashPolicy_Cookie_ struct { - Cookie *RouteAction_HashPolicy_Cookie `protobuf:"bytes,2,opt,name=cookie,proto3,oneof"` -} -type RouteAction_HashPolicy_ConnectionProperties_ struct { - ConnectionProperties *RouteAction_HashPolicy_ConnectionProperties `protobuf:"bytes,3,opt,name=connection_properties,json=connectionProperties,proto3,oneof"` -} - -func (*RouteAction_HashPolicy_Header_) isRouteAction_HashPolicy_PolicySpecifier() {} -func (*RouteAction_HashPolicy_Cookie_) isRouteAction_HashPolicy_PolicySpecifier() {} -func (*RouteAction_HashPolicy_ConnectionProperties_) isRouteAction_HashPolicy_PolicySpecifier() {} - -func (m *RouteAction_HashPolicy) GetPolicySpecifier() isRouteAction_HashPolicy_PolicySpecifier { - if m != nil { - return m.PolicySpecifier - } - return nil -} - -func (m *RouteAction_HashPolicy) GetHeader() *RouteAction_HashPolicy_Header { - if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Header_); ok { - return x.Header - } - return nil -} - -func (m *RouteAction_HashPolicy) GetCookie() *RouteAction_HashPolicy_Cookie { - if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_Cookie_); ok { - return x.Cookie - } - return nil -} - -func (m *RouteAction_HashPolicy) GetConnectionProperties() *RouteAction_HashPolicy_ConnectionProperties { - if x, ok := m.GetPolicySpecifier().(*RouteAction_HashPolicy_ConnectionProperties_); ok { - return x.ConnectionProperties - } - return nil -} - -func (m *RouteAction_HashPolicy) GetTerminal() bool { - if m != nil { - return m.Terminal - } - return false -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RouteAction_HashPolicy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RouteAction_HashPolicy_OneofMarshaler, _RouteAction_HashPolicy_OneofUnmarshaler, _RouteAction_HashPolicy_OneofSizer, []interface{}{ - (*RouteAction_HashPolicy_Header_)(nil), - (*RouteAction_HashPolicy_Cookie_)(nil), - (*RouteAction_HashPolicy_ConnectionProperties_)(nil), - } -} - -func _RouteAction_HashPolicy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RouteAction_HashPolicy) - // policy_specifier - switch x := m.PolicySpecifier.(type) { - case *RouteAction_HashPolicy_Header_: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Header); err != nil { - return err - } - case *RouteAction_HashPolicy_Cookie_: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Cookie); err != nil { - return err - } - case *RouteAction_HashPolicy_ConnectionProperties_: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ConnectionProperties); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RouteAction_HashPolicy.PolicySpecifier has unexpected type %T", x) - } - return nil -} - -func _RouteAction_HashPolicy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RouteAction_HashPolicy) - switch tag { - case 1: // policy_specifier.header - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RouteAction_HashPolicy_Header) - err := b.DecodeMessage(msg) - m.PolicySpecifier = &RouteAction_HashPolicy_Header_{msg} - return true, err - case 2: // policy_specifier.cookie - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RouteAction_HashPolicy_Cookie) - err := b.DecodeMessage(msg) - m.PolicySpecifier = &RouteAction_HashPolicy_Cookie_{msg} - return true, err - case 3: // policy_specifier.connection_properties - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RouteAction_HashPolicy_ConnectionProperties) - err := b.DecodeMessage(msg) - m.PolicySpecifier = &RouteAction_HashPolicy_ConnectionProperties_{msg} - return true, err - default: - return false, nil - } -} - -func _RouteAction_HashPolicy_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RouteAction_HashPolicy) - // policy_specifier - switch x := m.PolicySpecifier.(type) { - case *RouteAction_HashPolicy_Header_: - s := proto.Size(x.Header) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RouteAction_HashPolicy_Cookie_: - s := proto.Size(x.Cookie) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RouteAction_HashPolicy_ConnectionProperties_: - s := proto.Size(x.ConnectionProperties) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type RouteAction_HashPolicy_Header struct { - // The name of the request header that will be used to obtain the hash - // key. If the request header is not present, no hash will be produced. - HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_HashPolicy_Header) Reset() { *m = RouteAction_HashPolicy_Header{} } -func (m *RouteAction_HashPolicy_Header) String() string { return proto.CompactTextString(m) } -func (*RouteAction_HashPolicy_Header) ProtoMessage() {} -func (*RouteAction_HashPolicy_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 1, 0} -} -func (m *RouteAction_HashPolicy_Header) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_HashPolicy_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction_HashPolicy_Header) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy_Header.Merge(m, src) -} -func (m *RouteAction_HashPolicy_Header) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_HashPolicy_Header) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy_Header.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_HashPolicy_Header proto.InternalMessageInfo - -func (m *RouteAction_HashPolicy_Header) GetHeaderName() string { - if m != nil { - return m.HeaderName - } - return "" -} - -// Envoy supports two types of cookie affinity: -// -// 1. Passive. Envoy takes a cookie that's present in the cookies header and -// hashes on its value. -// -// 2. Generated. Envoy generates and sets a cookie with an expiration (TTL) -// on the first request from the client in its response to the client, -// based on the endpoint the request gets sent to. The client then -// presents this on the next and all subsequent requests. The hash of -// this is sufficient to ensure these requests get sent to the same -// endpoint. The cookie is generated by hashing the source and -// destination ports and addresses so that multiple independent HTTP2 -// streams on the same connection will independently receive the same -// cookie, even if they arrive at the Envoy simultaneously. -type RouteAction_HashPolicy_Cookie struct { - // The name of the cookie that will be used to obtain the hash key. If the - // cookie is not present and ttl below is not set, no hash will be - // produced. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // If specified, a cookie with the TTL will be generated if the cookie is - // not present. If the TTL is present and zero, the generated cookie will - // be a session cookie. - Ttl *time.Duration `protobuf:"bytes,2,opt,name=ttl,proto3,stdduration" json:"ttl,omitempty"` - // The name of the path for the cookie. If no path is specified here, no path - // will be set for the cookie. - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_HashPolicy_Cookie) Reset() { *m = RouteAction_HashPolicy_Cookie{} } -func (m *RouteAction_HashPolicy_Cookie) String() string { return proto.CompactTextString(m) } -func (*RouteAction_HashPolicy_Cookie) ProtoMessage() {} -func (*RouteAction_HashPolicy_Cookie) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 1, 1} -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy_Cookie.Merge(m, src) -} -func (m *RouteAction_HashPolicy_Cookie) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_HashPolicy_Cookie) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy_Cookie.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_HashPolicy_Cookie proto.InternalMessageInfo - -func (m *RouteAction_HashPolicy_Cookie) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *RouteAction_HashPolicy_Cookie) GetTtl() *time.Duration { - if m != nil { - return m.Ttl - } - return nil -} - -func (m *RouteAction_HashPolicy_Cookie) GetPath() string { - if m != nil { - return m.Path - } - return "" -} - -type RouteAction_HashPolicy_ConnectionProperties struct { - // Hash on source IP address. - SourceIp bool `protobuf:"varint,1,opt,name=source_ip,json=sourceIp,proto3" json:"source_ip,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_HashPolicy_ConnectionProperties) Reset() { - *m = RouteAction_HashPolicy_ConnectionProperties{} -} -func (m *RouteAction_HashPolicy_ConnectionProperties) String() string { - return proto.CompactTextString(m) -} -func (*RouteAction_HashPolicy_ConnectionProperties) ProtoMessage() {} -func (*RouteAction_HashPolicy_ConnectionProperties) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 1, 2} -} -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.Merge(m, src) -} -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_HashPolicy_ConnectionProperties) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_HashPolicy_ConnectionProperties proto.InternalMessageInfo - -func (m *RouteAction_HashPolicy_ConnectionProperties) GetSourceIp() bool { - if m != nil { - return m.SourceIp - } - return false -} - -// Allows enabling and disabling upgrades on a per-route basis. -// This overrides any enabled/disabled upgrade filter chain specified in the -// HttpConnectionManager -// :ref:upgrade_configs` -// ` -// but does not affect any custom filter chain specified there. -type RouteAction_UpgradeConfig struct { - // The case-insensitive name of this upgrade, e.g. "websocket". - // For each upgrade type present in upgrade_configs, requests with - // Upgrade: [upgrade_type] will be proxied upstream. - UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"` - // Determines if upgrades are available on this route. Defaults to true. - Enabled *types.BoolValue `protobuf:"bytes,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RouteAction_UpgradeConfig) Reset() { *m = RouteAction_UpgradeConfig{} } -func (m *RouteAction_UpgradeConfig) String() string { return proto.CompactTextString(m) } -func (*RouteAction_UpgradeConfig) ProtoMessage() {} -func (*RouteAction_UpgradeConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{5, 2} -} -func (m *RouteAction_UpgradeConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RouteAction_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RouteAction_UpgradeConfig) XXX_Merge(src proto.Message) { - xxx_messageInfo_RouteAction_UpgradeConfig.Merge(m, src) -} -func (m *RouteAction_UpgradeConfig) XXX_Size() int { - return m.Size() -} -func (m *RouteAction_UpgradeConfig) XXX_DiscardUnknown() { - xxx_messageInfo_RouteAction_UpgradeConfig.DiscardUnknown(m) -} - -var xxx_messageInfo_RouteAction_UpgradeConfig proto.InternalMessageInfo - -func (m *RouteAction_UpgradeConfig) GetUpgradeType() string { - if m != nil { - return m.UpgradeType - } - return "" -} - -func (m *RouteAction_UpgradeConfig) GetEnabled() *types.BoolValue { - if m != nil { - return m.Enabled - } - return nil -} - -// HTTP retry :ref:`architecture overview `. -// [#comment:next free field: 9] -type RetryPolicy struct { - // Specifies the conditions under which retry takes place. These are the same - // conditions documented for :ref:`config_http_filters_router_x-envoy-retry-on` and - // :ref:`config_http_filters_router_x-envoy-retry-grpc-on`. - RetryOn string `protobuf:"bytes,1,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"` - // Specifies the allowed number of retries. This parameter is optional and - // defaults to 1. These are the same conditions documented for - // :ref:`config_http_filters_router_x-envoy-max-retries`. - NumRetries *types.UInt32Value `protobuf:"bytes,2,opt,name=num_retries,json=numRetries,proto3" json:"num_retries,omitempty"` - // Specifies a non-zero upstream timeout per retry attempt. This parameter is optional. The - // same conditions documented for - // :ref:`config_http_filters_router_x-envoy-upstream-rq-per-try-timeout-ms` apply. - // - // .. note:: - // - // If left unspecified, Envoy will use the global - // :ref:`route timeout ` for the request. - // Consequently, when using a :ref:`5xx ` based - // retry policy, a request that times out will not be retried as the total timeout budget - // would have been exhausted. - PerTryTimeout *time.Duration `protobuf:"bytes,3,opt,name=per_try_timeout,json=perTryTimeout,proto3,stdduration" json:"per_try_timeout,omitempty"` - // Specifies an implementation of a RetryPriority which is used to determine the - // distribution of load across priorities used for retries. Refer to - // :ref:`retry plugin configuration ` for more details. - RetryPriority *RetryPolicy_RetryPriority `protobuf:"bytes,4,opt,name=retry_priority,json=retryPriority,proto3" json:"retry_priority,omitempty"` - // Specifies a collection of RetryHostPredicates that will be consulted when selecting a host - // for retries. If any of the predicates reject the host, host selection will be reattempted. - // Refer to :ref:`retry plugin configuration ` for more - // details. - RetryHostPredicate []*RetryPolicy_RetryHostPredicate `protobuf:"bytes,5,rep,name=retry_host_predicate,json=retryHostPredicate,proto3" json:"retry_host_predicate,omitempty"` - // The maximum number of times host selection will be reattempted before giving up, at which - // point the host that was last selected will be routed to. If unspecified, this will default to - // retrying once. - HostSelectionRetryMaxAttempts int64 `protobuf:"varint,6,opt,name=host_selection_retry_max_attempts,json=hostSelectionRetryMaxAttempts,proto3" json:"host_selection_retry_max_attempts,omitempty"` - // HTTP status codes that should trigger a retry in addition to those specified by retry_on. - RetriableStatusCodes []uint32 `protobuf:"varint,7,rep,packed,name=retriable_status_codes,json=retriableStatusCodes,proto3" json:"retriable_status_codes,omitempty"` - // Specifies parameters that control retry back off. This parameter is optional, in which case the - // default base interval is 25 milliseconds or, if set, the current value of the - // `upstream.base_retry_backoff_ms` runtime parameter. The default maximum interval is 10 times - // the base interval. The documentation for :ref:`config_http_filters_router_x-envoy-max-retries` - // describes Envoy's back-off algorithm. - RetryBackOff *RetryPolicy_RetryBackOff `protobuf:"bytes,8,opt,name=retry_back_off,json=retryBackOff,proto3" json:"retry_back_off,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RetryPolicy) Reset() { *m = RetryPolicy{} } -func (m *RetryPolicy) String() string { return proto.CompactTextString(m) } -func (*RetryPolicy) ProtoMessage() {} -func (*RetryPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{6} -} -func (m *RetryPolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RetryPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RetryPolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_RetryPolicy.Merge(m, src) -} -func (m *RetryPolicy) XXX_Size() int { - return m.Size() -} -func (m *RetryPolicy) XXX_DiscardUnknown() { - xxx_messageInfo_RetryPolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_RetryPolicy proto.InternalMessageInfo - -func (m *RetryPolicy) GetRetryOn() string { - if m != nil { - return m.RetryOn - } - return "" -} - -func (m *RetryPolicy) GetNumRetries() *types.UInt32Value { - if m != nil { - return m.NumRetries - } - return nil -} - -func (m *RetryPolicy) GetPerTryTimeout() *time.Duration { - if m != nil { - return m.PerTryTimeout - } - return nil -} - -func (m *RetryPolicy) GetRetryPriority() *RetryPolicy_RetryPriority { - if m != nil { - return m.RetryPriority - } - return nil -} - -func (m *RetryPolicy) GetRetryHostPredicate() []*RetryPolicy_RetryHostPredicate { - if m != nil { - return m.RetryHostPredicate - } - return nil -} - -func (m *RetryPolicy) GetHostSelectionRetryMaxAttempts() int64 { - if m != nil { - return m.HostSelectionRetryMaxAttempts - } - return 0 -} - -func (m *RetryPolicy) GetRetriableStatusCodes() []uint32 { - if m != nil { - return m.RetriableStatusCodes - } - return nil -} - -func (m *RetryPolicy) GetRetryBackOff() *RetryPolicy_RetryBackOff { - if m != nil { - return m.RetryBackOff - } - return nil -} - -type RetryPolicy_RetryPriority struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are valid to be assigned to ConfigType: - // *RetryPolicy_RetryPriority_Config - // *RetryPolicy_RetryPriority_TypedConfig - ConfigType isRetryPolicy_RetryPriority_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RetryPolicy_RetryPriority) Reset() { *m = RetryPolicy_RetryPriority{} } -func (m *RetryPolicy_RetryPriority) String() string { return proto.CompactTextString(m) } -func (*RetryPolicy_RetryPriority) ProtoMessage() {} -func (*RetryPolicy_RetryPriority) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{6, 0} -} -func (m *RetryPolicy_RetryPriority) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RetryPolicy_RetryPriority) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RetryPolicy_RetryPriority) XXX_Merge(src proto.Message) { - xxx_messageInfo_RetryPolicy_RetryPriority.Merge(m, src) -} -func (m *RetryPolicy_RetryPriority) XXX_Size() int { - return m.Size() -} -func (m *RetryPolicy_RetryPriority) XXX_DiscardUnknown() { - xxx_messageInfo_RetryPolicy_RetryPriority.DiscardUnknown(m) -} - -var xxx_messageInfo_RetryPolicy_RetryPriority proto.InternalMessageInfo - -type isRetryPolicy_RetryPriority_ConfigType interface { - isRetryPolicy_RetryPriority_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RetryPolicy_RetryPriority_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type RetryPolicy_RetryPriority_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` -} - -func (*RetryPolicy_RetryPriority_Config) isRetryPolicy_RetryPriority_ConfigType() {} -func (*RetryPolicy_RetryPriority_TypedConfig) isRetryPolicy_RetryPriority_ConfigType() {} - -func (m *RetryPolicy_RetryPriority) GetConfigType() isRetryPolicy_RetryPriority_ConfigType { - if m != nil { - return m.ConfigType - } - return nil -} - -func (m *RetryPolicy_RetryPriority) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *RetryPolicy_RetryPriority) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_Config); ok { - return x.Config - } - return nil -} - -func (m *RetryPolicy_RetryPriority) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*RetryPolicy_RetryPriority_TypedConfig); ok { - return x.TypedConfig - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RetryPolicy_RetryPriority) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RetryPolicy_RetryPriority_OneofMarshaler, _RetryPolicy_RetryPriority_OneofUnmarshaler, _RetryPolicy_RetryPriority_OneofSizer, []interface{}{ - (*RetryPolicy_RetryPriority_Config)(nil), - (*RetryPolicy_RetryPriority_TypedConfig)(nil), - } -} - -func _RetryPolicy_RetryPriority_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RetryPolicy_RetryPriority) - // config_type - switch x := m.ConfigType.(type) { - case *RetryPolicy_RetryPriority_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *RetryPolicy_RetryPriority_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RetryPolicy_RetryPriority.ConfigType has unexpected type %T", x) - } - return nil -} - -func _RetryPolicy_RetryPriority_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RetryPolicy_RetryPriority) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &RetryPolicy_RetryPriority_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &RetryPolicy_RetryPriority_TypedConfig{msg} - return true, err - default: - return false, nil - } -} - -func _RetryPolicy_RetryPriority_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RetryPolicy_RetryPriority) - // config_type - switch x := m.ConfigType.(type) { - case *RetryPolicy_RetryPriority_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RetryPolicy_RetryPriority_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type RetryPolicy_RetryHostPredicate struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are valid to be assigned to ConfigType: - // *RetryPolicy_RetryHostPredicate_Config - // *RetryPolicy_RetryHostPredicate_TypedConfig - ConfigType isRetryPolicy_RetryHostPredicate_ConfigType `protobuf_oneof:"config_type"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RetryPolicy_RetryHostPredicate) Reset() { *m = RetryPolicy_RetryHostPredicate{} } -func (m *RetryPolicy_RetryHostPredicate) String() string { return proto.CompactTextString(m) } -func (*RetryPolicy_RetryHostPredicate) ProtoMessage() {} -func (*RetryPolicy_RetryHostPredicate) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{6, 1} -} -func (m *RetryPolicy_RetryHostPredicate) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RetryPolicy_RetryHostPredicate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RetryPolicy_RetryHostPredicate) XXX_Merge(src proto.Message) { - xxx_messageInfo_RetryPolicy_RetryHostPredicate.Merge(m, src) -} -func (m *RetryPolicy_RetryHostPredicate) XXX_Size() int { - return m.Size() -} -func (m *RetryPolicy_RetryHostPredicate) XXX_DiscardUnknown() { - xxx_messageInfo_RetryPolicy_RetryHostPredicate.DiscardUnknown(m) -} - -var xxx_messageInfo_RetryPolicy_RetryHostPredicate proto.InternalMessageInfo - -type isRetryPolicy_RetryHostPredicate_ConfigType interface { - isRetryPolicy_RetryHostPredicate_ConfigType() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RetryPolicy_RetryHostPredicate_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` -} -type RetryPolicy_RetryHostPredicate_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` -} - -func (*RetryPolicy_RetryHostPredicate_Config) isRetryPolicy_RetryHostPredicate_ConfigType() {} -func (*RetryPolicy_RetryHostPredicate_TypedConfig) isRetryPolicy_RetryHostPredicate_ConfigType() {} - -func (m *RetryPolicy_RetryHostPredicate) GetConfigType() isRetryPolicy_RetryHostPredicate_ConfigType { - if m != nil { - return m.ConfigType - } - return nil -} - -func (m *RetryPolicy_RetryHostPredicate) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *RetryPolicy_RetryHostPredicate) GetConfig() *types.Struct { - if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_Config); ok { - return x.Config - } - return nil -} - -func (m *RetryPolicy_RetryHostPredicate) GetTypedConfig() *types.Any { - if x, ok := m.GetConfigType().(*RetryPolicy_RetryHostPredicate_TypedConfig); ok { - return x.TypedConfig - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RetryPolicy_RetryHostPredicate) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RetryPolicy_RetryHostPredicate_OneofMarshaler, _RetryPolicy_RetryHostPredicate_OneofUnmarshaler, _RetryPolicy_RetryHostPredicate_OneofSizer, []interface{}{ - (*RetryPolicy_RetryHostPredicate_Config)(nil), - (*RetryPolicy_RetryHostPredicate_TypedConfig)(nil), - } -} - -func _RetryPolicy_RetryHostPredicate_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RetryPolicy_RetryHostPredicate) - // config_type - switch x := m.ConfigType.(type) { - case *RetryPolicy_RetryHostPredicate_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *RetryPolicy_RetryHostPredicate_TypedConfig: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RetryPolicy_RetryHostPredicate.ConfigType has unexpected type %T", x) - } - return nil -} - -func _RetryPolicy_RetryHostPredicate_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RetryPolicy_RetryHostPredicate) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &RetryPolicy_RetryHostPredicate_Config{msg} - return true, err - case 3: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &RetryPolicy_RetryHostPredicate_TypedConfig{msg} - return true, err - default: - return false, nil - } -} - -func _RetryPolicy_RetryHostPredicate_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RetryPolicy_RetryHostPredicate) - // config_type - switch x := m.ConfigType.(type) { - case *RetryPolicy_RetryHostPredicate_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RetryPolicy_RetryHostPredicate_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type RetryPolicy_RetryBackOff struct { - // Specifies the base interval between retries. This parameter is required and must be greater - // than zero. Values less than 1 ms are rounded up to 1 ms. - // See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion of Envoy's - // back-off algorithm. - BaseInterval *time.Duration `protobuf:"bytes,1,opt,name=base_interval,json=baseInterval,proto3,stdduration" json:"base_interval,omitempty"` - // Specifies the maximum interval between retries. This parameter is optional, but must be - // greater than or equal to the `base_interval` if set. The default is 10 times the - // `base_interval`. See :ref:`config_http_filters_router_x-envoy-max-retries` for a discussion - // of Envoy's back-off algorithm. - MaxInterval *time.Duration `protobuf:"bytes,2,opt,name=max_interval,json=maxInterval,proto3,stdduration" json:"max_interval,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RetryPolicy_RetryBackOff) Reset() { *m = RetryPolicy_RetryBackOff{} } -func (m *RetryPolicy_RetryBackOff) String() string { return proto.CompactTextString(m) } -func (*RetryPolicy_RetryBackOff) ProtoMessage() {} -func (*RetryPolicy_RetryBackOff) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{6, 2} -} -func (m *RetryPolicy_RetryBackOff) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RetryPolicy_RetryBackOff) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RetryPolicy_RetryBackOff) XXX_Merge(src proto.Message) { - xxx_messageInfo_RetryPolicy_RetryBackOff.Merge(m, src) -} -func (m *RetryPolicy_RetryBackOff) XXX_Size() int { - return m.Size() -} -func (m *RetryPolicy_RetryBackOff) XXX_DiscardUnknown() { - xxx_messageInfo_RetryPolicy_RetryBackOff.DiscardUnknown(m) -} - -var xxx_messageInfo_RetryPolicy_RetryBackOff proto.InternalMessageInfo - -func (m *RetryPolicy_RetryBackOff) GetBaseInterval() *time.Duration { - if m != nil { - return m.BaseInterval - } - return nil -} - -func (m *RetryPolicy_RetryBackOff) GetMaxInterval() *time.Duration { - if m != nil { - return m.MaxInterval - } - return nil -} - -// HTTP request hedging TODO(mpuncel) docs -// [#not-implemented-hide:] -type HedgePolicy struct { - // Specifies the number of initial requests that should be sent upstream. - // Must be at least 1. - // Defaults to 1. - InitialRequests *types.UInt32Value `protobuf:"bytes,1,opt,name=initial_requests,json=initialRequests,proto3" json:"initial_requests,omitempty"` - // Specifies a probability that an additional upstream request should be sent - // on top of what is specified by initial_requests. - // Defaults to 0. - AdditionalRequestChance *_type.FractionalPercent `protobuf:"bytes,2,opt,name=additional_request_chance,json=additionalRequestChance,proto3" json:"additional_request_chance,omitempty"` - // Indicates that a hedged request should be sent when the per-try timeout - // is hit. This will only occur if the retry policy also indicates that a - // timed out request should be retried. Defaults to false. - HedgeOnPerTryTimeout bool `protobuf:"varint,3,opt,name=hedge_on_per_try_timeout,json=hedgeOnPerTryTimeout,proto3" json:"hedge_on_per_try_timeout,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *HedgePolicy) Reset() { *m = HedgePolicy{} } -func (m *HedgePolicy) String() string { return proto.CompactTextString(m) } -func (*HedgePolicy) ProtoMessage() {} -func (*HedgePolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{7} -} -func (m *HedgePolicy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HedgePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *HedgePolicy) XXX_Merge(src proto.Message) { - xxx_messageInfo_HedgePolicy.Merge(m, src) -} -func (m *HedgePolicy) XXX_Size() int { - return m.Size() -} -func (m *HedgePolicy) XXX_DiscardUnknown() { - xxx_messageInfo_HedgePolicy.DiscardUnknown(m) -} - -var xxx_messageInfo_HedgePolicy proto.InternalMessageInfo - -func (m *HedgePolicy) GetInitialRequests() *types.UInt32Value { - if m != nil { - return m.InitialRequests - } - return nil -} - -func (m *HedgePolicy) GetAdditionalRequestChance() *_type.FractionalPercent { - if m != nil { - return m.AdditionalRequestChance - } - return nil -} - -func (m *HedgePolicy) GetHedgeOnPerTryTimeout() bool { - if m != nil { - return m.HedgeOnPerTryTimeout - } - return false -} - -type RedirectAction struct { - // When the scheme redirection take place, the following rules apply: - // 1. If the source URI scheme is `http` and the port is explicitly - // set to `:80`, the port will be removed after the redirection - // 2. If the source URI scheme is `https` and the port is explicitly - // set to `:443`, the port will be removed after the redirection - // - // Types that are valid to be assigned to SchemeRewriteSpecifier: - // *RedirectAction_HttpsRedirect - // *RedirectAction_SchemeRedirect - SchemeRewriteSpecifier isRedirectAction_SchemeRewriteSpecifier `protobuf_oneof:"scheme_rewrite_specifier"` - // The host portion of the URL will be swapped with this value. - HostRedirect string `protobuf:"bytes,1,opt,name=host_redirect,json=hostRedirect,proto3" json:"host_redirect,omitempty"` - // The port value of the URL will be swapped with this value. - PortRedirect uint32 `protobuf:"varint,8,opt,name=port_redirect,json=portRedirect,proto3" json:"port_redirect,omitempty"` - // Types that are valid to be assigned to PathRewriteSpecifier: - // *RedirectAction_PathRedirect - // *RedirectAction_PrefixRewrite - PathRewriteSpecifier isRedirectAction_PathRewriteSpecifier `protobuf_oneof:"path_rewrite_specifier"` - // The HTTP status code to use in the redirect response. The default response - // code is MOVED_PERMANENTLY (301). - ResponseCode RedirectAction_RedirectResponseCode `protobuf:"varint,3,opt,name=response_code,json=responseCode,proto3,enum=envoy.api.v2.route.RedirectAction_RedirectResponseCode" json:"response_code,omitempty"` - // Indicates that during redirection, the query portion of the URL will - // be removed. Default value is false. - StripQuery bool `protobuf:"varint,6,opt,name=strip_query,json=stripQuery,proto3" json:"strip_query,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RedirectAction) Reset() { *m = RedirectAction{} } -func (m *RedirectAction) String() string { return proto.CompactTextString(m) } -func (*RedirectAction) ProtoMessage() {} -func (*RedirectAction) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{8} -} -func (m *RedirectAction) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RedirectAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RedirectAction) XXX_Merge(src proto.Message) { - xxx_messageInfo_RedirectAction.Merge(m, src) -} -func (m *RedirectAction) XXX_Size() int { - return m.Size() -} -func (m *RedirectAction) XXX_DiscardUnknown() { - xxx_messageInfo_RedirectAction.DiscardUnknown(m) -} - -var xxx_messageInfo_RedirectAction proto.InternalMessageInfo - -type isRedirectAction_SchemeRewriteSpecifier interface { - isRedirectAction_SchemeRewriteSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} -type isRedirectAction_PathRewriteSpecifier interface { - isRedirectAction_PathRewriteSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RedirectAction_HttpsRedirect struct { - HttpsRedirect bool `protobuf:"varint,4,opt,name=https_redirect,json=httpsRedirect,proto3,oneof"` -} -type RedirectAction_SchemeRedirect struct { - SchemeRedirect string `protobuf:"bytes,7,opt,name=scheme_redirect,json=schemeRedirect,proto3,oneof"` -} -type RedirectAction_PathRedirect struct { - PathRedirect string `protobuf:"bytes,2,opt,name=path_redirect,json=pathRedirect,proto3,oneof"` -} -type RedirectAction_PrefixRewrite struct { - PrefixRewrite string `protobuf:"bytes,5,opt,name=prefix_rewrite,json=prefixRewrite,proto3,oneof"` -} - -func (*RedirectAction_HttpsRedirect) isRedirectAction_SchemeRewriteSpecifier() {} -func (*RedirectAction_SchemeRedirect) isRedirectAction_SchemeRewriteSpecifier() {} -func (*RedirectAction_PathRedirect) isRedirectAction_PathRewriteSpecifier() {} -func (*RedirectAction_PrefixRewrite) isRedirectAction_PathRewriteSpecifier() {} - -func (m *RedirectAction) GetSchemeRewriteSpecifier() isRedirectAction_SchemeRewriteSpecifier { - if m != nil { - return m.SchemeRewriteSpecifier - } - return nil -} -func (m *RedirectAction) GetPathRewriteSpecifier() isRedirectAction_PathRewriteSpecifier { - if m != nil { - return m.PathRewriteSpecifier - } - return nil -} - -func (m *RedirectAction) GetHttpsRedirect() bool { - if x, ok := m.GetSchemeRewriteSpecifier().(*RedirectAction_HttpsRedirect); ok { - return x.HttpsRedirect - } - return false -} - -func (m *RedirectAction) GetSchemeRedirect() string { - if x, ok := m.GetSchemeRewriteSpecifier().(*RedirectAction_SchemeRedirect); ok { - return x.SchemeRedirect - } - return "" -} - -func (m *RedirectAction) GetHostRedirect() string { - if m != nil { - return m.HostRedirect - } - return "" -} - -func (m *RedirectAction) GetPortRedirect() uint32 { - if m != nil { - return m.PortRedirect - } - return 0 -} - -func (m *RedirectAction) GetPathRedirect() string { - if x, ok := m.GetPathRewriteSpecifier().(*RedirectAction_PathRedirect); ok { - return x.PathRedirect - } - return "" -} - -func (m *RedirectAction) GetPrefixRewrite() string { - if x, ok := m.GetPathRewriteSpecifier().(*RedirectAction_PrefixRewrite); ok { - return x.PrefixRewrite - } - return "" -} - -func (m *RedirectAction) GetResponseCode() RedirectAction_RedirectResponseCode { - if m != nil { - return m.ResponseCode - } - return RedirectAction_MOVED_PERMANENTLY -} - -func (m *RedirectAction) GetStripQuery() bool { - if m != nil { - return m.StripQuery - } - return false -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RedirectAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RedirectAction_OneofMarshaler, _RedirectAction_OneofUnmarshaler, _RedirectAction_OneofSizer, []interface{}{ - (*RedirectAction_HttpsRedirect)(nil), - (*RedirectAction_SchemeRedirect)(nil), - (*RedirectAction_PathRedirect)(nil), - (*RedirectAction_PrefixRewrite)(nil), - } -} - -func _RedirectAction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RedirectAction) - // scheme_rewrite_specifier - switch x := m.SchemeRewriteSpecifier.(type) { - case *RedirectAction_HttpsRedirect: - t := uint64(0) - if x.HttpsRedirect { - t = 1 - } - _ = b.EncodeVarint(4<<3 | proto.WireVarint) - _ = b.EncodeVarint(t) - case *RedirectAction_SchemeRedirect: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.SchemeRedirect) - case nil: - default: - return fmt.Errorf("RedirectAction.SchemeRewriteSpecifier has unexpected type %T", x) - } - // path_rewrite_specifier - switch x := m.PathRewriteSpecifier.(type) { - case *RedirectAction_PathRedirect: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.PathRedirect) - case *RedirectAction_PrefixRewrite: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.PrefixRewrite) - case nil: - default: - return fmt.Errorf("RedirectAction.PathRewriteSpecifier has unexpected type %T", x) - } - return nil -} - -func _RedirectAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RedirectAction) - switch tag { - case 4: // scheme_rewrite_specifier.https_redirect - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.SchemeRewriteSpecifier = &RedirectAction_HttpsRedirect{x != 0} - return true, err - case 7: // scheme_rewrite_specifier.scheme_redirect - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.SchemeRewriteSpecifier = &RedirectAction_SchemeRedirect{x} - return true, err - case 2: // path_rewrite_specifier.path_redirect - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.PathRewriteSpecifier = &RedirectAction_PathRedirect{x} - return true, err - case 5: // path_rewrite_specifier.prefix_rewrite - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.PathRewriteSpecifier = &RedirectAction_PrefixRewrite{x} - return true, err - default: - return false, nil - } -} - -func _RedirectAction_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RedirectAction) - // scheme_rewrite_specifier - switch x := m.SchemeRewriteSpecifier.(type) { - case *RedirectAction_HttpsRedirect: - n += 1 // tag and wire - n += 1 - case *RedirectAction_SchemeRedirect: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.SchemeRedirect))) - n += len(x.SchemeRedirect) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - // path_rewrite_specifier - switch x := m.PathRewriteSpecifier.(type) { - case *RedirectAction_PathRedirect: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.PathRedirect))) - n += len(x.PathRedirect) - case *RedirectAction_PrefixRewrite: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.PrefixRewrite))) - n += len(x.PrefixRewrite) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type DirectResponseAction struct { - // Specifies the HTTP response status to be returned. - Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` - // Specifies the content of the response body. If this setting is omitted, - // no body is included in the generated response. - // - // .. note:: - // - // Headers can be specified using *response_headers_to_add* in the enclosing - // :ref:`envoy_api_msg_route.Route`, :ref:`envoy_api_msg_RouteConfiguration` or - // :ref:`envoy_api_msg_route.VirtualHost`. - Body *core.DataSource `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DirectResponseAction) Reset() { *m = DirectResponseAction{} } -func (m *DirectResponseAction) String() string { return proto.CompactTextString(m) } -func (*DirectResponseAction) ProtoMessage() {} -func (*DirectResponseAction) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{9} -} -func (m *DirectResponseAction) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *DirectResponseAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *DirectResponseAction) XXX_Merge(src proto.Message) { - xxx_messageInfo_DirectResponseAction.Merge(m, src) -} -func (m *DirectResponseAction) XXX_Size() int { - return m.Size() -} -func (m *DirectResponseAction) XXX_DiscardUnknown() { - xxx_messageInfo_DirectResponseAction.DiscardUnknown(m) -} - -var xxx_messageInfo_DirectResponseAction proto.InternalMessageInfo - -func (m *DirectResponseAction) GetStatus() uint32 { - if m != nil { - return m.Status - } - return 0 -} - -func (m *DirectResponseAction) GetBody() *core.DataSource { - if m != nil { - return m.Body - } - return nil -} - -type Decorator struct { - // The operation name associated with the request matched to this route. If tracing is - // enabled, this information will be used as the span name reported for this request. - // - // .. note:: - // - // For ingress (inbound) requests, or egress (outbound) responses, this value may be overridden - // by the :ref:`x-envoy-decorator-operation - // ` header. - Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Decorator) Reset() { *m = Decorator{} } -func (m *Decorator) String() string { return proto.CompactTextString(m) } -func (*Decorator) ProtoMessage() {} -func (*Decorator) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{10} -} -func (m *Decorator) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Decorator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *Decorator) XXX_Merge(src proto.Message) { - xxx_messageInfo_Decorator.Merge(m, src) -} -func (m *Decorator) XXX_Size() int { - return m.Size() -} -func (m *Decorator) XXX_DiscardUnknown() { - xxx_messageInfo_Decorator.DiscardUnknown(m) -} - -var xxx_messageInfo_Decorator proto.InternalMessageInfo - -func (m *Decorator) GetOperation() string { - if m != nil { - return m.Operation - } - return "" -} - -// A virtual cluster is a way of specifying a regex matching rule against -// certain important endpoints such that statistics are generated explicitly for -// the matched requests. The reason this is useful is that when doing -// prefix/path matching Envoy does not always know what the application -// considers to be an endpoint. Thus, it’s impossible for Envoy to generically -// emit per endpoint statistics. However, often systems have highly critical -// endpoints that they wish to get “perfect” statistics on. Virtual cluster -// statistics are perfect in the sense that they are emitted on the downstream -// side such that they include network level failures. -// -// Documentation for :ref:`virtual cluster statistics `. -// -// .. note:: -// -// Virtual clusters are a useful tool, but we do not recommend setting up a virtual cluster for -// every application endpoint. This is both not easily maintainable and as well the matching and -// statistics output are not free. -type VirtualCluster struct { - // Specifies a regex pattern to use for matching requests. The entire path of the request - // must match the regex. The regex grammar used is defined `here - // `_. - // - // Examples: - // - // * The regex */rides/\d+* matches the path */rides/0* - // * The regex */rides/\d+* matches the path */rides/123* - // * The regex */rides/\d+* does not match the path */rides/123/456* - Pattern string `protobuf:"bytes,1,opt,name=pattern,proto3" json:"pattern,omitempty"` - // Specifies the name of the virtual cluster. The virtual cluster name as well - // as the virtual host name are used when emitting statistics. The statistics are emitted by the - // router filter and are documented :ref:`here `. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Optionally specifies the HTTP method to match on. For example GET, PUT, - // etc. - // [#comment:TODO(htuch): add (validate.rules).enum.defined_only = true once - // https://github.com/lyft/protoc-gen-validate/issues/42 is resolved.] - Method core.RequestMethod `protobuf:"varint,3,opt,name=method,proto3,enum=envoy.api.v2.core.RequestMethod" json:"method,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *VirtualCluster) Reset() { *m = VirtualCluster{} } -func (m *VirtualCluster) String() string { return proto.CompactTextString(m) } -func (*VirtualCluster) ProtoMessage() {} -func (*VirtualCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{11} -} -func (m *VirtualCluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *VirtualCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *VirtualCluster) XXX_Merge(src proto.Message) { - xxx_messageInfo_VirtualCluster.Merge(m, src) -} -func (m *VirtualCluster) XXX_Size() int { - return m.Size() -} -func (m *VirtualCluster) XXX_DiscardUnknown() { - xxx_messageInfo_VirtualCluster.DiscardUnknown(m) -} - -var xxx_messageInfo_VirtualCluster proto.InternalMessageInfo - -func (m *VirtualCluster) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *VirtualCluster) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *VirtualCluster) GetMethod() core.RequestMethod { - if m != nil { - return m.Method - } - return core.METHOD_UNSPECIFIED -} - -// Global rate limiting :ref:`architecture overview `. -type RateLimit struct { - // Refers to the stage set in the filter. The rate limit configuration only - // applies to filters with the same stage number. The default stage number is - // 0. - // - // .. note:: - // - // The filter supports a range of 0 - 10 inclusively for stage numbers. - Stage *types.UInt32Value `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"` - // The key to be set in runtime to disable this rate limit configuration. - DisableKey string `protobuf:"bytes,2,opt,name=disable_key,json=disableKey,proto3" json:"disable_key,omitempty"` - // A list of actions that are to be applied for this rate limit configuration. - // Order matters as the actions are processed sequentially and the descriptor - // is composed by appending descriptor entries in that sequence. If an action - // cannot append a descriptor entry, no descriptor is generated for the - // configuration. See :ref:`composing actions - // ` for additional documentation. - Actions []*RateLimit_Action `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit) Reset() { *m = RateLimit{} } -func (m *RateLimit) String() string { return proto.CompactTextString(m) } -func (*RateLimit) ProtoMessage() {} -func (*RateLimit) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12} -} -func (m *RateLimit) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit.Merge(m, src) -} -func (m *RateLimit) XXX_Size() int { - return m.Size() -} -func (m *RateLimit) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit proto.InternalMessageInfo - -func (m *RateLimit) GetStage() *types.UInt32Value { - if m != nil { - return m.Stage - } - return nil -} - -func (m *RateLimit) GetDisableKey() string { - if m != nil { - return m.DisableKey - } - return "" -} - -func (m *RateLimit) GetActions() []*RateLimit_Action { - if m != nil { - return m.Actions - } - return nil -} - -type RateLimit_Action struct { - // Types that are valid to be assigned to ActionSpecifier: - // *RateLimit_Action_SourceCluster_ - // *RateLimit_Action_DestinationCluster_ - // *RateLimit_Action_RequestHeaders_ - // *RateLimit_Action_RemoteAddress_ - // *RateLimit_Action_GenericKey_ - // *RateLimit_Action_HeaderValueMatch_ - ActionSpecifier isRateLimit_Action_ActionSpecifier `protobuf_oneof:"action_specifier"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action) Reset() { *m = RateLimit_Action{} } -func (m *RateLimit_Action) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action) ProtoMessage() {} -func (*RateLimit_Action) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0} -} -func (m *RateLimit_Action) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action.Merge(m, src) -} -func (m *RateLimit_Action) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action proto.InternalMessageInfo - -type isRateLimit_Action_ActionSpecifier interface { - isRateLimit_Action_ActionSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type RateLimit_Action_SourceCluster_ struct { - SourceCluster *RateLimit_Action_SourceCluster `protobuf:"bytes,1,opt,name=source_cluster,json=sourceCluster,proto3,oneof"` -} -type RateLimit_Action_DestinationCluster_ struct { - DestinationCluster *RateLimit_Action_DestinationCluster `protobuf:"bytes,2,opt,name=destination_cluster,json=destinationCluster,proto3,oneof"` -} -type RateLimit_Action_RequestHeaders_ struct { - RequestHeaders *RateLimit_Action_RequestHeaders `protobuf:"bytes,3,opt,name=request_headers,json=requestHeaders,proto3,oneof"` -} -type RateLimit_Action_RemoteAddress_ struct { - RemoteAddress *RateLimit_Action_RemoteAddress `protobuf:"bytes,4,opt,name=remote_address,json=remoteAddress,proto3,oneof"` -} -type RateLimit_Action_GenericKey_ struct { - GenericKey *RateLimit_Action_GenericKey `protobuf:"bytes,5,opt,name=generic_key,json=genericKey,proto3,oneof"` -} -type RateLimit_Action_HeaderValueMatch_ struct { - HeaderValueMatch *RateLimit_Action_HeaderValueMatch `protobuf:"bytes,6,opt,name=header_value_match,json=headerValueMatch,proto3,oneof"` -} - -func (*RateLimit_Action_SourceCluster_) isRateLimit_Action_ActionSpecifier() {} -func (*RateLimit_Action_DestinationCluster_) isRateLimit_Action_ActionSpecifier() {} -func (*RateLimit_Action_RequestHeaders_) isRateLimit_Action_ActionSpecifier() {} -func (*RateLimit_Action_RemoteAddress_) isRateLimit_Action_ActionSpecifier() {} -func (*RateLimit_Action_GenericKey_) isRateLimit_Action_ActionSpecifier() {} -func (*RateLimit_Action_HeaderValueMatch_) isRateLimit_Action_ActionSpecifier() {} - -func (m *RateLimit_Action) GetActionSpecifier() isRateLimit_Action_ActionSpecifier { - if m != nil { - return m.ActionSpecifier - } - return nil -} - -func (m *RateLimit_Action) GetSourceCluster() *RateLimit_Action_SourceCluster { - if x, ok := m.GetActionSpecifier().(*RateLimit_Action_SourceCluster_); ok { - return x.SourceCluster - } - return nil -} - -func (m *RateLimit_Action) GetDestinationCluster() *RateLimit_Action_DestinationCluster { - if x, ok := m.GetActionSpecifier().(*RateLimit_Action_DestinationCluster_); ok { - return x.DestinationCluster - } - return nil -} - -func (m *RateLimit_Action) GetRequestHeaders() *RateLimit_Action_RequestHeaders { - if x, ok := m.GetActionSpecifier().(*RateLimit_Action_RequestHeaders_); ok { - return x.RequestHeaders - } - return nil -} - -func (m *RateLimit_Action) GetRemoteAddress() *RateLimit_Action_RemoteAddress { - if x, ok := m.GetActionSpecifier().(*RateLimit_Action_RemoteAddress_); ok { - return x.RemoteAddress - } - return nil -} - -func (m *RateLimit_Action) GetGenericKey() *RateLimit_Action_GenericKey { - if x, ok := m.GetActionSpecifier().(*RateLimit_Action_GenericKey_); ok { - return x.GenericKey - } - return nil -} - -func (m *RateLimit_Action) GetHeaderValueMatch() *RateLimit_Action_HeaderValueMatch { - if x, ok := m.GetActionSpecifier().(*RateLimit_Action_HeaderValueMatch_); ok { - return x.HeaderValueMatch - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*RateLimit_Action) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _RateLimit_Action_OneofMarshaler, _RateLimit_Action_OneofUnmarshaler, _RateLimit_Action_OneofSizer, []interface{}{ - (*RateLimit_Action_SourceCluster_)(nil), - (*RateLimit_Action_DestinationCluster_)(nil), - (*RateLimit_Action_RequestHeaders_)(nil), - (*RateLimit_Action_RemoteAddress_)(nil), - (*RateLimit_Action_GenericKey_)(nil), - (*RateLimit_Action_HeaderValueMatch_)(nil), - } -} - -func _RateLimit_Action_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*RateLimit_Action) - // action_specifier - switch x := m.ActionSpecifier.(type) { - case *RateLimit_Action_SourceCluster_: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.SourceCluster); err != nil { - return err - } - case *RateLimit_Action_DestinationCluster_: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.DestinationCluster); err != nil { - return err - } - case *RateLimit_Action_RequestHeaders_: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RequestHeaders); err != nil { - return err - } - case *RateLimit_Action_RemoteAddress_: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RemoteAddress); err != nil { - return err - } - case *RateLimit_Action_GenericKey_: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GenericKey); err != nil { - return err - } - case *RateLimit_Action_HeaderValueMatch_: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HeaderValueMatch); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("RateLimit_Action.ActionSpecifier has unexpected type %T", x) - } - return nil -} - -func _RateLimit_Action_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*RateLimit_Action) - switch tag { - case 1: // action_specifier.source_cluster - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RateLimit_Action_SourceCluster) - err := b.DecodeMessage(msg) - m.ActionSpecifier = &RateLimit_Action_SourceCluster_{msg} - return true, err - case 2: // action_specifier.destination_cluster - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RateLimit_Action_DestinationCluster) - err := b.DecodeMessage(msg) - m.ActionSpecifier = &RateLimit_Action_DestinationCluster_{msg} - return true, err - case 3: // action_specifier.request_headers - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RateLimit_Action_RequestHeaders) - err := b.DecodeMessage(msg) - m.ActionSpecifier = &RateLimit_Action_RequestHeaders_{msg} - return true, err - case 4: // action_specifier.remote_address - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RateLimit_Action_RemoteAddress) - err := b.DecodeMessage(msg) - m.ActionSpecifier = &RateLimit_Action_RemoteAddress_{msg} - return true, err - case 5: // action_specifier.generic_key - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RateLimit_Action_GenericKey) - err := b.DecodeMessage(msg) - m.ActionSpecifier = &RateLimit_Action_GenericKey_{msg} - return true, err - case 6: // action_specifier.header_value_match - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RateLimit_Action_HeaderValueMatch) - err := b.DecodeMessage(msg) - m.ActionSpecifier = &RateLimit_Action_HeaderValueMatch_{msg} - return true, err - default: - return false, nil - } -} - -func _RateLimit_Action_OneofSizer(msg proto.Message) (n int) { - m := msg.(*RateLimit_Action) - // action_specifier - switch x := m.ActionSpecifier.(type) { - case *RateLimit_Action_SourceCluster_: - s := proto.Size(x.SourceCluster) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RateLimit_Action_DestinationCluster_: - s := proto.Size(x.DestinationCluster) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RateLimit_Action_RequestHeaders_: - s := proto.Size(x.RequestHeaders) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RateLimit_Action_RemoteAddress_: - s := proto.Size(x.RemoteAddress) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RateLimit_Action_GenericKey_: - s := proto.Size(x.GenericKey) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *RateLimit_Action_HeaderValueMatch_: - s := proto.Size(x.HeaderValueMatch) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// The following descriptor entry is appended to the descriptor: -// -// .. code-block:: cpp -// -// ("source_cluster", "") -// -// is derived from the :option:`--service-cluster` option. -type RateLimit_Action_SourceCluster struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action_SourceCluster) Reset() { *m = RateLimit_Action_SourceCluster{} } -func (m *RateLimit_Action_SourceCluster) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action_SourceCluster) ProtoMessage() {} -func (*RateLimit_Action_SourceCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0, 0} -} -func (m *RateLimit_Action_SourceCluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action_SourceCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action_SourceCluster) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action_SourceCluster.Merge(m, src) -} -func (m *RateLimit_Action_SourceCluster) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action_SourceCluster) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action_SourceCluster.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action_SourceCluster proto.InternalMessageInfo - -// The following descriptor entry is appended to the descriptor: -// -// .. code-block:: cpp -// -// ("destination_cluster", "") -// -// Once a request matches against a route table rule, a routed cluster is determined by one of -// the following :ref:`route table configuration ` -// settings: -// -// * :ref:`cluster ` indicates the upstream cluster -// to route to. -// * :ref:`weighted_clusters ` -// chooses a cluster randomly from a set of clusters with attributed weight. -// * :ref:`cluster_header ` indicates which -// header in the request contains the target cluster. -type RateLimit_Action_DestinationCluster struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action_DestinationCluster) Reset() { *m = RateLimit_Action_DestinationCluster{} } -func (m *RateLimit_Action_DestinationCluster) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action_DestinationCluster) ProtoMessage() {} -func (*RateLimit_Action_DestinationCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0, 1} -} -func (m *RateLimit_Action_DestinationCluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action_DestinationCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action_DestinationCluster) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action_DestinationCluster.Merge(m, src) -} -func (m *RateLimit_Action_DestinationCluster) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action_DestinationCluster) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action_DestinationCluster.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action_DestinationCluster proto.InternalMessageInfo - -// The following descriptor entry is appended when a header contains a key that matches the -// *header_name*: -// -// .. code-block:: cpp -// -// ("", "") -type RateLimit_Action_RequestHeaders struct { - // The header name to be queried from the request headers. The header’s - // value is used to populate the value of the descriptor entry for the - // descriptor_key. - HeaderName string `protobuf:"bytes,1,opt,name=header_name,json=headerName,proto3" json:"header_name,omitempty"` - // The key to use in the descriptor entry. - DescriptorKey string `protobuf:"bytes,2,opt,name=descriptor_key,json=descriptorKey,proto3" json:"descriptor_key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action_RequestHeaders) Reset() { *m = RateLimit_Action_RequestHeaders{} } -func (m *RateLimit_Action_RequestHeaders) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action_RequestHeaders) ProtoMessage() {} -func (*RateLimit_Action_RequestHeaders) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0, 2} -} -func (m *RateLimit_Action_RequestHeaders) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action_RequestHeaders) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action_RequestHeaders) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action_RequestHeaders.Merge(m, src) -} -func (m *RateLimit_Action_RequestHeaders) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action_RequestHeaders) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action_RequestHeaders.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action_RequestHeaders proto.InternalMessageInfo - -func (m *RateLimit_Action_RequestHeaders) GetHeaderName() string { - if m != nil { - return m.HeaderName - } - return "" -} - -func (m *RateLimit_Action_RequestHeaders) GetDescriptorKey() string { - if m != nil { - return m.DescriptorKey - } - return "" -} - -// The following descriptor entry is appended to the descriptor and is populated using the -// trusted address from :ref:`x-forwarded-for `: -// -// .. code-block:: cpp -// -// ("remote_address", "") -type RateLimit_Action_RemoteAddress struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action_RemoteAddress) Reset() { *m = RateLimit_Action_RemoteAddress{} } -func (m *RateLimit_Action_RemoteAddress) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action_RemoteAddress) ProtoMessage() {} -func (*RateLimit_Action_RemoteAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0, 3} -} -func (m *RateLimit_Action_RemoteAddress) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action_RemoteAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action_RemoteAddress) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action_RemoteAddress.Merge(m, src) -} -func (m *RateLimit_Action_RemoteAddress) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action_RemoteAddress) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action_RemoteAddress.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action_RemoteAddress proto.InternalMessageInfo - -// The following descriptor entry is appended to the descriptor: -// -// .. code-block:: cpp -// -// ("generic_key", "") -type RateLimit_Action_GenericKey struct { - // The value to use in the descriptor entry. - DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action_GenericKey) Reset() { *m = RateLimit_Action_GenericKey{} } -func (m *RateLimit_Action_GenericKey) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action_GenericKey) ProtoMessage() {} -func (*RateLimit_Action_GenericKey) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0, 4} -} -func (m *RateLimit_Action_GenericKey) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action_GenericKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action_GenericKey) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action_GenericKey.Merge(m, src) -} -func (m *RateLimit_Action_GenericKey) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action_GenericKey) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action_GenericKey.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action_GenericKey proto.InternalMessageInfo - -func (m *RateLimit_Action_GenericKey) GetDescriptorValue() string { - if m != nil { - return m.DescriptorValue - } - return "" -} - -// The following descriptor entry is appended to the descriptor: -// -// .. code-block:: cpp -// -// ("header_match", "") -type RateLimit_Action_HeaderValueMatch struct { - // The value to use in the descriptor entry. - DescriptorValue string `protobuf:"bytes,1,opt,name=descriptor_value,json=descriptorValue,proto3" json:"descriptor_value,omitempty"` - // If set to true, the action will append a descriptor entry when the - // request matches the headers. If set to false, the action will append a - // descriptor entry when the request does not match the headers. The - // default value is true. - ExpectMatch *types.BoolValue `protobuf:"bytes,2,opt,name=expect_match,json=expectMatch,proto3" json:"expect_match,omitempty"` - // Specifies a set of headers that the rate limit action should match - // on. The action will check the request’s headers against all the - // specified headers in the config. A match will happen if all the - // headers in the config are present in the request with the same values - // (or based on presence if the value field is not in the config). - Headers []*HeaderMatcher `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RateLimit_Action_HeaderValueMatch) Reset() { *m = RateLimit_Action_HeaderValueMatch{} } -func (m *RateLimit_Action_HeaderValueMatch) String() string { return proto.CompactTextString(m) } -func (*RateLimit_Action_HeaderValueMatch) ProtoMessage() {} -func (*RateLimit_Action_HeaderValueMatch) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{12, 0, 5} -} -func (m *RateLimit_Action_HeaderValueMatch) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *RateLimit_Action_HeaderValueMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *RateLimit_Action_HeaderValueMatch) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimit_Action_HeaderValueMatch.Merge(m, src) -} -func (m *RateLimit_Action_HeaderValueMatch) XXX_Size() int { - return m.Size() -} -func (m *RateLimit_Action_HeaderValueMatch) XXX_DiscardUnknown() { - xxx_messageInfo_RateLimit_Action_HeaderValueMatch.DiscardUnknown(m) -} - -var xxx_messageInfo_RateLimit_Action_HeaderValueMatch proto.InternalMessageInfo - -func (m *RateLimit_Action_HeaderValueMatch) GetDescriptorValue() string { - if m != nil { - return m.DescriptorValue - } - return "" -} - -func (m *RateLimit_Action_HeaderValueMatch) GetExpectMatch() *types.BoolValue { - if m != nil { - return m.ExpectMatch - } - return nil -} - -func (m *RateLimit_Action_HeaderValueMatch) GetHeaders() []*HeaderMatcher { - if m != nil { - return m.Headers - } - return nil -} - -// .. attention:: -// -// Internally, Envoy always uses the HTTP/2 *:authority* header to represent the HTTP/1 *Host* -// header. Thus, if attempting to match on *Host*, match on *:authority* instead. -// -// .. attention:: -// -// To route on HTTP method, use the special HTTP/2 *:method* header. This works for both -// HTTP/1 and HTTP/2 as Envoy normalizes headers. E.g., -// -// .. code-block:: json -// -// { -// "name": ":method", -// "exact_match": "POST" -// } -// -// .. attention:: -// In the absence of any header match specifier, match will default to :ref:`present_match -// `. i.e, a request that has the :ref:`name -// ` header will match, regardless of the header's -// value. -// -type HeaderMatcher struct { - // Specifies the name of the header in the request. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Specifies how the header match will be performed to route the request. - // - // Types that are valid to be assigned to HeaderMatchSpecifier: - // *HeaderMatcher_ExactMatch - // *HeaderMatcher_RegexMatch - // *HeaderMatcher_RangeMatch - // *HeaderMatcher_PresentMatch - // *HeaderMatcher_PrefixMatch - // *HeaderMatcher_SuffixMatch - HeaderMatchSpecifier isHeaderMatcher_HeaderMatchSpecifier `protobuf_oneof:"header_match_specifier"` - // If specified, the match result will be inverted before checking. Defaults to false. - // - // Examples: - // - // * The regex *\d{3}* does not match the value *1234*, so it will match when inverted. - // * The range [-10,0) will match the value -1, so it will not match when inverted. - InvertMatch bool `protobuf:"varint,8,opt,name=invert_match,json=invertMatch,proto3" json:"invert_match,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *HeaderMatcher) Reset() { *m = HeaderMatcher{} } -func (m *HeaderMatcher) String() string { return proto.CompactTextString(m) } -func (*HeaderMatcher) ProtoMessage() {} -func (*HeaderMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{13} -} -func (m *HeaderMatcher) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *HeaderMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *HeaderMatcher) XXX_Merge(src proto.Message) { - xxx_messageInfo_HeaderMatcher.Merge(m, src) -} -func (m *HeaderMatcher) XXX_Size() int { - return m.Size() -} -func (m *HeaderMatcher) XXX_DiscardUnknown() { - xxx_messageInfo_HeaderMatcher.DiscardUnknown(m) -} - -var xxx_messageInfo_HeaderMatcher proto.InternalMessageInfo - -type isHeaderMatcher_HeaderMatchSpecifier interface { - isHeaderMatcher_HeaderMatchSpecifier() - Equal(interface{}) bool - MarshalTo([]byte) (int, error) - Size() int -} - -type HeaderMatcher_ExactMatch struct { - ExactMatch string `protobuf:"bytes,4,opt,name=exact_match,json=exactMatch,proto3,oneof"` -} -type HeaderMatcher_RegexMatch struct { - RegexMatch string `protobuf:"bytes,5,opt,name=regex_match,json=regexMatch,proto3,oneof"` -} -type HeaderMatcher_RangeMatch struct { - RangeMatch *_type.Int64Range `protobuf:"bytes,6,opt,name=range_match,json=rangeMatch,proto3,oneof"` -} -type HeaderMatcher_PresentMatch struct { - PresentMatch bool `protobuf:"varint,7,opt,name=present_match,json=presentMatch,proto3,oneof"` -} -type HeaderMatcher_PrefixMatch struct { - PrefixMatch string `protobuf:"bytes,9,opt,name=prefix_match,json=prefixMatch,proto3,oneof"` -} -type HeaderMatcher_SuffixMatch struct { - SuffixMatch string `protobuf:"bytes,10,opt,name=suffix_match,json=suffixMatch,proto3,oneof"` -} - -func (*HeaderMatcher_ExactMatch) isHeaderMatcher_HeaderMatchSpecifier() {} -func (*HeaderMatcher_RegexMatch) isHeaderMatcher_HeaderMatchSpecifier() {} -func (*HeaderMatcher_RangeMatch) isHeaderMatcher_HeaderMatchSpecifier() {} -func (*HeaderMatcher_PresentMatch) isHeaderMatcher_HeaderMatchSpecifier() {} -func (*HeaderMatcher_PrefixMatch) isHeaderMatcher_HeaderMatchSpecifier() {} -func (*HeaderMatcher_SuffixMatch) isHeaderMatcher_HeaderMatchSpecifier() {} - -func (m *HeaderMatcher) GetHeaderMatchSpecifier() isHeaderMatcher_HeaderMatchSpecifier { - if m != nil { - return m.HeaderMatchSpecifier - } - return nil -} - -func (m *HeaderMatcher) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *HeaderMatcher) GetExactMatch() string { - if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_ExactMatch); ok { - return x.ExactMatch - } - return "" -} - -func (m *HeaderMatcher) GetRegexMatch() string { - if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_RegexMatch); ok { - return x.RegexMatch - } - return "" -} - -func (m *HeaderMatcher) GetRangeMatch() *_type.Int64Range { - if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_RangeMatch); ok { - return x.RangeMatch - } - return nil -} - -func (m *HeaderMatcher) GetPresentMatch() bool { - if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_PresentMatch); ok { - return x.PresentMatch - } - return false -} - -func (m *HeaderMatcher) GetPrefixMatch() string { - if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_PrefixMatch); ok { - return x.PrefixMatch - } - return "" -} - -func (m *HeaderMatcher) GetSuffixMatch() string { - if x, ok := m.GetHeaderMatchSpecifier().(*HeaderMatcher_SuffixMatch); ok { - return x.SuffixMatch - } - return "" -} - -func (m *HeaderMatcher) GetInvertMatch() bool { - if m != nil { - return m.InvertMatch - } - return false -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HeaderMatcher) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HeaderMatcher_OneofMarshaler, _HeaderMatcher_OneofUnmarshaler, _HeaderMatcher_OneofSizer, []interface{}{ - (*HeaderMatcher_ExactMatch)(nil), - (*HeaderMatcher_RegexMatch)(nil), - (*HeaderMatcher_RangeMatch)(nil), - (*HeaderMatcher_PresentMatch)(nil), - (*HeaderMatcher_PrefixMatch)(nil), - (*HeaderMatcher_SuffixMatch)(nil), - } -} - -func _HeaderMatcher_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HeaderMatcher) - // header_match_specifier - switch x := m.HeaderMatchSpecifier.(type) { - case *HeaderMatcher_ExactMatch: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.ExactMatch) - case *HeaderMatcher_RegexMatch: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.RegexMatch) - case *HeaderMatcher_RangeMatch: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RangeMatch); err != nil { - return err - } - case *HeaderMatcher_PresentMatch: - t := uint64(0) - if x.PresentMatch { - t = 1 - } - _ = b.EncodeVarint(7<<3 | proto.WireVarint) - _ = b.EncodeVarint(t) - case *HeaderMatcher_PrefixMatch: - _ = b.EncodeVarint(9<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.PrefixMatch) - case *HeaderMatcher_SuffixMatch: - _ = b.EncodeVarint(10<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.SuffixMatch) - case nil: - default: - return fmt.Errorf("HeaderMatcher.HeaderMatchSpecifier has unexpected type %T", x) - } - return nil -} - -func _HeaderMatcher_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HeaderMatcher) - switch tag { - case 4: // header_match_specifier.exact_match - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HeaderMatchSpecifier = &HeaderMatcher_ExactMatch{x} - return true, err - case 5: // header_match_specifier.regex_match - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HeaderMatchSpecifier = &HeaderMatcher_RegexMatch{x} - return true, err - case 6: // header_match_specifier.range_match - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(_type.Int64Range) - err := b.DecodeMessage(msg) - m.HeaderMatchSpecifier = &HeaderMatcher_RangeMatch{msg} - return true, err - case 7: // header_match_specifier.present_match - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.HeaderMatchSpecifier = &HeaderMatcher_PresentMatch{x != 0} - return true, err - case 9: // header_match_specifier.prefix_match - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HeaderMatchSpecifier = &HeaderMatcher_PrefixMatch{x} - return true, err - case 10: // header_match_specifier.suffix_match - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.HeaderMatchSpecifier = &HeaderMatcher_SuffixMatch{x} - return true, err - default: - return false, nil - } -} - -func _HeaderMatcher_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HeaderMatcher) - // header_match_specifier - switch x := m.HeaderMatchSpecifier.(type) { - case *HeaderMatcher_ExactMatch: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.ExactMatch))) - n += len(x.ExactMatch) - case *HeaderMatcher_RegexMatch: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.RegexMatch))) - n += len(x.RegexMatch) - case *HeaderMatcher_RangeMatch: - s := proto.Size(x.RangeMatch) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HeaderMatcher_PresentMatch: - n += 1 // tag and wire - n += 1 - case *HeaderMatcher_PrefixMatch: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.PrefixMatch))) - n += len(x.PrefixMatch) - case *HeaderMatcher_SuffixMatch: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.SuffixMatch))) - n += len(x.SuffixMatch) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Query parameter matching treats the query string of a request's :path header -// as an ampersand-separated list of keys and/or key=value elements. -type QueryParameterMatcher struct { - // Specifies the name of a key that must be present in the requested - // *path*'s query string. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Specifies the value of the key. If the value is absent, a request - // that contains the key in its query string will match, whether the - // key appears with a value (e.g., "?debug=true") or not (e.g., "?debug") - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - // Specifies whether the query parameter value is a regular expression. - // Defaults to false. The entire query parameter value (i.e., the part to - // the right of the equals sign in "key=value") must match the regex. - // E.g., the regex "\d+$" will match "123" but not "a123" or "123a". - Regex *types.BoolValue `protobuf:"bytes,4,opt,name=regex,proto3" json:"regex,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *QueryParameterMatcher) Reset() { *m = QueryParameterMatcher{} } -func (m *QueryParameterMatcher) String() string { return proto.CompactTextString(m) } -func (*QueryParameterMatcher) ProtoMessage() {} -func (*QueryParameterMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_7dc2895fb75d9d41, []int{14} -} -func (m *QueryParameterMatcher) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryParameterMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *QueryParameterMatcher) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParameterMatcher.Merge(m, src) -} -func (m *QueryParameterMatcher) XXX_Size() int { - return m.Size() -} -func (m *QueryParameterMatcher) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParameterMatcher.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParameterMatcher proto.InternalMessageInfo - -func (m *QueryParameterMatcher) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *QueryParameterMatcher) GetValue() string { - if m != nil { - return m.Value - } - return "" -} - -func (m *QueryParameterMatcher) GetRegex() *types.BoolValue { - if m != nil { - return m.Regex - } - return nil -} - -func init() { - proto.RegisterEnum("envoy.api.v2.route.VirtualHost_TlsRequirementType", VirtualHost_TlsRequirementType_name, VirtualHost_TlsRequirementType_value) - proto.RegisterEnum("envoy.api.v2.route.RouteAction_ClusterNotFoundResponseCode", RouteAction_ClusterNotFoundResponseCode_name, RouteAction_ClusterNotFoundResponseCode_value) - proto.RegisterEnum("envoy.api.v2.route.RouteAction_InternalRedirectAction", RouteAction_InternalRedirectAction_name, RouteAction_InternalRedirectAction_value) - proto.RegisterEnum("envoy.api.v2.route.RedirectAction_RedirectResponseCode", RedirectAction_RedirectResponseCode_name, RedirectAction_RedirectResponseCode_value) - proto.RegisterType((*VirtualHost)(nil), "envoy.api.v2.route.VirtualHost") - proto.RegisterMapType((map[string]*types.Struct)(nil), "envoy.api.v2.route.VirtualHost.PerFilterConfigEntry") - proto.RegisterMapType((map[string]*types.Any)(nil), "envoy.api.v2.route.VirtualHost.TypedPerFilterConfigEntry") - proto.RegisterType((*Route)(nil), "envoy.api.v2.route.Route") - proto.RegisterMapType((map[string]*types.Struct)(nil), "envoy.api.v2.route.Route.PerFilterConfigEntry") - proto.RegisterMapType((map[string]*types.Any)(nil), "envoy.api.v2.route.Route.TypedPerFilterConfigEntry") - proto.RegisterType((*WeightedCluster)(nil), "envoy.api.v2.route.WeightedCluster") - proto.RegisterType((*WeightedCluster_ClusterWeight)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight") - proto.RegisterMapType((map[string]*types.Struct)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight.PerFilterConfigEntry") - proto.RegisterMapType((map[string]*types.Any)(nil), "envoy.api.v2.route.WeightedCluster.ClusterWeight.TypedPerFilterConfigEntry") - proto.RegisterType((*RouteMatch)(nil), "envoy.api.v2.route.RouteMatch") - proto.RegisterType((*RouteMatch_GrpcRouteMatchOptions)(nil), "envoy.api.v2.route.RouteMatch.GrpcRouteMatchOptions") - proto.RegisterType((*CorsPolicy)(nil), "envoy.api.v2.route.CorsPolicy") - proto.RegisterType((*RouteAction)(nil), "envoy.api.v2.route.RouteAction") - proto.RegisterType((*RouteAction_RequestMirrorPolicy)(nil), "envoy.api.v2.route.RouteAction.RequestMirrorPolicy") - proto.RegisterType((*RouteAction_HashPolicy)(nil), "envoy.api.v2.route.RouteAction.HashPolicy") - proto.RegisterType((*RouteAction_HashPolicy_Header)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Header") - proto.RegisterType((*RouteAction_HashPolicy_Cookie)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.Cookie") - proto.RegisterType((*RouteAction_HashPolicy_ConnectionProperties)(nil), "envoy.api.v2.route.RouteAction.HashPolicy.ConnectionProperties") - proto.RegisterType((*RouteAction_UpgradeConfig)(nil), "envoy.api.v2.route.RouteAction.UpgradeConfig") - proto.RegisterType((*RetryPolicy)(nil), "envoy.api.v2.route.RetryPolicy") - proto.RegisterType((*RetryPolicy_RetryPriority)(nil), "envoy.api.v2.route.RetryPolicy.RetryPriority") - proto.RegisterType((*RetryPolicy_RetryHostPredicate)(nil), "envoy.api.v2.route.RetryPolicy.RetryHostPredicate") - proto.RegisterType((*RetryPolicy_RetryBackOff)(nil), "envoy.api.v2.route.RetryPolicy.RetryBackOff") - proto.RegisterType((*HedgePolicy)(nil), "envoy.api.v2.route.HedgePolicy") - proto.RegisterType((*RedirectAction)(nil), "envoy.api.v2.route.RedirectAction") - proto.RegisterType((*DirectResponseAction)(nil), "envoy.api.v2.route.DirectResponseAction") - proto.RegisterType((*Decorator)(nil), "envoy.api.v2.route.Decorator") - proto.RegisterType((*VirtualCluster)(nil), "envoy.api.v2.route.VirtualCluster") - proto.RegisterType((*RateLimit)(nil), "envoy.api.v2.route.RateLimit") - proto.RegisterType((*RateLimit_Action)(nil), "envoy.api.v2.route.RateLimit.Action") - proto.RegisterType((*RateLimit_Action_SourceCluster)(nil), "envoy.api.v2.route.RateLimit.Action.SourceCluster") - proto.RegisterType((*RateLimit_Action_DestinationCluster)(nil), "envoy.api.v2.route.RateLimit.Action.DestinationCluster") - proto.RegisterType((*RateLimit_Action_RequestHeaders)(nil), "envoy.api.v2.route.RateLimit.Action.RequestHeaders") - proto.RegisterType((*RateLimit_Action_RemoteAddress)(nil), "envoy.api.v2.route.RateLimit.Action.RemoteAddress") - proto.RegisterType((*RateLimit_Action_GenericKey)(nil), "envoy.api.v2.route.RateLimit.Action.GenericKey") - proto.RegisterType((*RateLimit_Action_HeaderValueMatch)(nil), "envoy.api.v2.route.RateLimit.Action.HeaderValueMatch") - proto.RegisterType((*HeaderMatcher)(nil), "envoy.api.v2.route.HeaderMatcher") - proto.RegisterType((*QueryParameterMatcher)(nil), "envoy.api.v2.route.QueryParameterMatcher") -} - -func init() { proto.RegisterFile("envoy/api/v2/route/route.proto", fileDescriptor_7dc2895fb75d9d41) } - -var fileDescriptor_7dc2895fb75d9d41 = []byte{ - // 3722 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0x4d, 0x70, 0xdb, 0x48, - 0x76, 0x16, 0x44, 0x8a, 0x04, 0x1f, 0x48, 0x0a, 0x6a, 0xc9, 0x12, 0x45, 0x7b, 0x64, 0x99, 0x9e, - 0xc9, 0x68, 0x9d, 0x1d, 0x6a, 0x47, 0x56, 0xc6, 0xeb, 0x99, 0x9a, 0x4d, 0x48, 0x89, 0x36, 0x25, - 0xeb, 0x2f, 0x2d, 0xd9, 0x89, 0x67, 0x2b, 0x41, 0x60, 0xa2, 0x45, 0x62, 0x4d, 0x02, 0x98, 0x06, - 0x28, 0x4b, 0xb7, 0xcd, 0x9e, 0x52, 0x9b, 0x4a, 0x55, 0x32, 0x87, 0x54, 0xce, 0xc9, 0x25, 0xb5, - 0xa9, 0xa4, 0xf6, 0x96, 0xad, 0x54, 0x0e, 0x7b, 0xdc, 0xe3, 0x56, 0x4e, 0x7b, 0xc9, 0x4f, 0xf9, - 0x94, 0xbd, 0xe7, 0x90, 0x63, 0xaa, 0x7f, 0x00, 0x90, 0x22, 0x24, 0x52, 0x4e, 0xd5, 0x54, 0x26, - 0x17, 0x09, 0xe8, 0xfe, 0xde, 0xeb, 0x46, 0xf7, 0xeb, 0xf7, 0xbe, 0xf7, 0x9a, 0xb0, 0x42, 0x9c, - 0x33, 0xf7, 0x62, 0xdd, 0xf4, 0xec, 0xf5, 0xb3, 0x8d, 0x75, 0xea, 0xf6, 0x03, 0x22, 0xfe, 0x56, - 0x3d, 0xea, 0x06, 0x2e, 0x42, 0xbc, 0xbf, 0x6a, 0x7a, 0x76, 0xf5, 0x6c, 0xa3, 0xca, 0x7b, 0xca, - 0x77, 0x86, 0x64, 0x5a, 0x2e, 0x25, 0xeb, 0xaf, 0x4c, 0x5f, 0x4a, 0x94, 0x4b, 0xa2, 0x37, 0xb8, - 0xf0, 0xc8, 0xba, 0x47, 0x68, 0x8b, 0x38, 0x81, 0xec, 0x59, 0x1c, 0xe8, 0xa1, 0xa6, 0xd3, 0x0e, - 0x25, 0x96, 0xdb, 0xae, 0xdb, 0xee, 0x92, 0x75, 0xfe, 0xf6, 0xaa, 0x7f, 0xba, 0x6e, 0x3a, 0x17, - 0xb2, 0x6b, 0xe5, 0x72, 0x97, 0xd5, 0xa7, 0x66, 0x60, 0xbb, 0x8e, 0xec, 0xbf, 0x73, 0xb9, 0xdf, - 0x0f, 0x68, 0xbf, 0x15, 0x5c, 0x25, 0xfd, 0x86, 0x9a, 0x9e, 0x47, 0xa8, 0x2f, 0xfb, 0x97, 0xce, - 0xcc, 0xae, 0x6d, 0x99, 0x01, 0x59, 0x0f, 0x1f, 0x64, 0xc7, 0x42, 0xdb, 0x6d, 0xbb, 0xfc, 0x71, - 0x9d, 0x3d, 0x89, 0xd6, 0xca, 0x8f, 0x35, 0xd0, 0x5e, 0xd8, 0x34, 0xe8, 0x9b, 0xdd, 0xa6, 0xeb, - 0x07, 0xe8, 0x3d, 0x48, 0x3b, 0x66, 0x8f, 0x94, 0x94, 0x55, 0x65, 0x2d, 0x57, 0xcf, 0xfd, 0xd3, - 0xaf, 0x7f, 0x9e, 0x4a, 0xd3, 0xe9, 0x55, 0x05, 0xf3, 0x66, 0xf4, 0x3e, 0x64, 0x2d, 0xb7, 0x67, - 0xda, 0x8e, 0x5f, 0x9a, 0x5e, 0x4d, 0xad, 0xe5, 0xea, 0xc0, 0x10, 0x33, 0x5f, 0x29, 0xd3, 0xaa, - 0x82, 0xc3, 0x2e, 0xf4, 0x08, 0x32, 0x7c, 0x55, 0xfd, 0x52, 0x6a, 0x35, 0xb5, 0xa6, 0x6d, 0x2c, - 0x57, 0x47, 0x57, 0xbc, 0x8a, 0xd9, 0xdf, 0x7a, 0xfa, 0x17, 0xff, 0x76, 0x77, 0x0a, 0x4b, 0x38, - 0x3a, 0x06, 0x8d, 0x92, 0x2f, 0xfb, 0x36, 0x25, 0x46, 0xd0, 0xf5, 0x4b, 0xe9, 0x55, 0x65, 0xad, - 0xb8, 0xb1, 0x91, 0x24, 0x3d, 0x30, 0xe7, 0xea, 0x49, 0xd7, 0xc7, 0x42, 0xaa, 0x47, 0x9c, 0xe0, - 0xe4, 0xc2, 0x23, 0x18, 0xa4, 0x9a, 0x93, 0xae, 0x8f, 0xf6, 0x41, 0x3f, 0x13, 0x68, 0xa3, 0xd5, - 0xed, 0xfb, 0x01, 0xa1, 0x7e, 0x69, 0x86, 0xcf, 0xab, 0x72, 0x8d, 0xe6, 0x2d, 0x01, 0xc5, 0xb3, - 0x67, 0x43, 0xef, 0x3e, 0xfa, 0x1e, 0x68, 0xd4, 0x0c, 0x88, 0xd1, 0xb5, 0x7b, 0x76, 0xe0, 0x97, - 0x32, 0x5c, 0xd3, 0x7b, 0x89, 0x5f, 0x68, 0x06, 0x64, 0x8f, 0xa1, 0x30, 0xd0, 0xf0, 0xd1, 0x47, - 0xa7, 0xb0, 0xc8, 0x26, 0x47, 0xfc, 0xc0, 0xe8, 0x10, 0xd3, 0x22, 0xd4, 0x37, 0x02, 0xd7, 0x30, - 0x2d, 0xab, 0x94, 0xe5, 0xaa, 0xde, 0x1f, 0x56, 0xc5, 0x4c, 0xb1, 0xda, 0xe4, 0xc0, 0x17, 0x66, - 0xb7, 0x4f, 0x0e, 0x3d, 0x66, 0x2a, 0x75, 0x8d, 0xad, 0x7b, 0xe6, 0x2b, 0x25, 0xa5, 0xff, 0x67, - 0x16, 0xcf, 0x4b, 0x85, 0x02, 0xe6, 0x9f, 0xb8, 0x35, 0xcb, 0x42, 0x8f, 0x61, 0x39, 0x61, 0x1c, - 0x4a, 0x7a, 0xee, 0x19, 0x29, 0x15, 0xd8, 0xe6, 0xe1, 0xc5, 0xcb, 0x72, 0x98, 0xf7, 0xa2, 0x0e, - 0x2c, 0x51, 0xe2, 0x7b, 0xae, 0xe3, 0x93, 0xcb, 0x73, 0x84, 0x77, 0x9d, 0xe3, 0x42, 0xa8, 0x71, - 0x68, 0x92, 0x9f, 0x41, 0x39, 0x69, 0x24, 0x39, 0x4b, 0x8d, 0xcf, 0x72, 0x69, 0x44, 0x52, 0x4e, - 0x73, 0x03, 0xd2, 0x2d, 0x97, 0xfa, 0x25, 0x75, 0x55, 0x59, 0xd3, 0x36, 0x56, 0x92, 0xb6, 0x60, - 0xcb, 0xa5, 0xfe, 0x91, 0xdb, 0xb5, 0x5b, 0x17, 0x98, 0x63, 0xd1, 0x1f, 0xc1, 0x9c, 0x47, 0xa8, - 0x71, 0x6a, 0x77, 0x03, 0x42, 0x8d, 0x96, 0xeb, 0x9c, 0xda, 0xed, 0x52, 0x9e, 0x7f, 0xd4, 0xe6, - 0x38, 0x3b, 0x3b, 0x22, 0xf4, 0x09, 0x97, 0xdb, 0xe2, 0x62, 0x0d, 0x27, 0xa0, 0x17, 0x78, 0xd6, - 0x1b, 0x6e, 0x45, 0x1e, 0x2c, 0x31, 0x6f, 0x60, 0x19, 0xa3, 0xe3, 0xcc, 0xf2, 0x71, 0x1e, 0x8f, - 0xb5, 0x67, 0x26, 0x9e, 0x38, 0xd8, 0x42, 0x90, 0xd0, 0x85, 0x6a, 0xf0, 0x9e, 0xed, 0xb4, 0xba, - 0x7d, 0x8b, 0x18, 0xe1, 0x8e, 0x9b, 0x41, 0x40, 0x7a, 0x5e, 0x60, 0xb4, 0xdc, 0xbe, 0x13, 0x94, - 0x8a, 0xab, 0xca, 0x9a, 0x8a, 0xcb, 0x12, 0x84, 0x05, 0xa6, 0x26, 0x20, 0x5b, 0x0c, 0x81, 0xea, - 0x90, 0xa7, 0x24, 0xa0, 0x17, 0x86, 0xc7, 0x17, 0xab, 0xa4, 0xf3, 0x25, 0xbd, 0x9b, 0x68, 0xd5, - 0x0c, 0x27, 0xd7, 0x54, 0xa3, 0xf1, 0x0b, 0xd3, 0xd1, 0x21, 0x56, 0x9b, 0x84, 0x3a, 0xe6, 0xae, - 0xd6, 0xd1, 0x64, 0xb8, 0x50, 0x47, 0x27, 0x7e, 0x29, 0x7f, 0x1f, 0x16, 0x92, 0x3e, 0x1c, 0xe9, - 0x90, 0x7a, 0x4d, 0x2e, 0x84, 0x57, 0xc2, 0xec, 0x11, 0x7d, 0x04, 0x33, 0x67, 0xcc, 0xd6, 0x4a, - 0xd3, 0x7c, 0x98, 0xa5, 0xaa, 0xf0, 0x8b, 0xd5, 0xd0, 0x2f, 0x56, 0x8f, 0xb9, 0xd7, 0xc4, 0x02, - 0xf5, 0xe9, 0xf4, 0x77, 0x95, 0xf2, 0x1f, 0xc0, 0xf2, 0x95, 0x4b, 0x9b, 0x30, 0xc2, 0x83, 0xe1, - 0x11, 0x16, 0x46, 0x46, 0xa8, 0x39, 0x17, 0x03, 0xea, 0x2b, 0x9f, 0x02, 0x1a, 0xf5, 0x44, 0x48, - 0x85, 0xf4, 0xc1, 0xe1, 0x41, 0x43, 0x9f, 0x42, 0x73, 0x50, 0x68, 0xfc, 0xfe, 0x49, 0x03, 0x1f, - 0xd4, 0xf6, 0x8c, 0xc3, 0x83, 0xbd, 0x97, 0xba, 0x82, 0xb2, 0x90, 0xaa, 0xed, 0xed, 0xe9, 0xd3, - 0xbb, 0x69, 0x35, 0xa7, 0x43, 0xe5, 0xbf, 0x55, 0x98, 0xe1, 0x6e, 0x11, 0x6d, 0xc3, 0x4c, 0xcf, - 0x0c, 0x5a, 0x1d, 0x3e, 0x9f, 0x2b, 0x6c, 0x9b, 0x23, 0xf7, 0x19, 0xaa, 0x5e, 0x64, 0x5e, 0x94, - 0x7b, 0xe2, 0x1f, 0x2b, 0xd3, 0xba, 0x82, 0x85, 0x30, 0x7a, 0x04, 0x33, 0x1c, 0x2a, 0xbf, 0xe0, - 0xee, 0x95, 0x5a, 0x6a, 0x2d, 0x76, 0x60, 0x9b, 0x53, 0x58, 0xe0, 0xd1, 0xef, 0x80, 0x4a, 0x89, - 0x65, 0x53, 0xd2, 0x0a, 0x4a, 0x29, 0x2e, 0x5b, 0x49, 0x36, 0x05, 0x81, 0x89, 0xc4, 0x23, 0x29, - 0x74, 0x0c, 0xb3, 0xe2, 0xc9, 0x08, 0x4f, 0x6f, 0x29, 0xcb, 0x15, 0xad, 0x25, 0x29, 0xda, 0xe6, - 0x50, 0x2c, 0x91, 0x91, 0xba, 0xa2, 0x35, 0xd4, 0x8e, 0x1e, 0x81, 0xda, 0x23, 0x81, 0x69, 0x99, - 0x81, 0xc9, 0x63, 0x83, 0xb6, 0x71, 0x3b, 0xc1, 0x11, 0xed, 0x4b, 0x08, 0x8e, 0xc0, 0xe8, 0x33, - 0xc8, 0x59, 0xa4, 0xe5, 0x52, 0x33, 0x70, 0x69, 0x69, 0x86, 0x4b, 0x26, 0x7a, 0xec, 0xed, 0x10, - 0x84, 0x63, 0x3c, 0xfa, 0x22, 0xc9, 0x65, 0xa8, 0xfc, 0x28, 0x57, 0xaf, 0x5c, 0xd1, 0x09, 0x9d, - 0xc5, 0x0f, 0xae, 0x76, 0x16, 0x05, 0x3e, 0xc2, 0xc3, 0xab, 0x47, 0xb8, 0xa9, 0x9b, 0xb8, 0x3a, - 0xf0, 0xe4, 0xbe, 0xbe, 0xc0, 0x93, 0xff, 0x7f, 0x10, 0x78, 0xbe, 0xc9, 0x5e, 0xaa, 0x3e, 0x0b, - 0x19, 0x93, 0x9f, 0x2f, 0x34, 0xf3, 0xb3, 0x5f, 0xff, 0x3c, 0xa5, 0xec, 0xa6, 0xd5, 0x8c, 0x9e, - 0xad, 0xfc, 0x65, 0x0e, 0x66, 0x7f, 0x8f, 0xd8, 0xed, 0x4e, 0x40, 0x2c, 0x49, 0x75, 0xd0, 0x4b, - 0x50, 0x23, 0xc2, 0xa4, 0xf0, 0xe5, 0xff, 0x38, 0xc9, 0x1a, 0x2f, 0x89, 0x55, 0xe5, 0x7f, 0xd1, - 0x3c, 0x44, 0x10, 0x23, 0x75, 0x68, 0x17, 0xf2, 0x81, 0x1b, 0x98, 0x5d, 0xe3, 0x0d, 0x47, 0x49, - 0x27, 0x73, 0x67, 0x64, 0xf2, 0xcf, 0x77, 0x9c, 0xe0, 0xe1, 0x06, 0xdf, 0x5b, 0x49, 0x46, 0x1f, - 0x4c, 0xaf, 0x29, 0x58, 0xe3, 0xc2, 0x62, 0x04, 0xf4, 0x6d, 0x40, 0xb4, 0xef, 0x04, 0x76, 0x8f, - 0x18, 0xaf, 0xc9, 0x85, 0xe1, 0x51, 0x72, 0x6a, 0x9f, 0xf3, 0xe5, 0xc8, 0x61, 0x5d, 0xf6, 0x3c, - 0x23, 0x17, 0x47, 0xbc, 0xbd, 0xfc, 0xf7, 0x59, 0x28, 0x0c, 0xcd, 0x70, 0x1c, 0xe5, 0xdd, 0x84, - 0x8c, 0x9c, 0xe4, 0xf4, 0xf8, 0x49, 0x62, 0x89, 0x45, 0x75, 0x28, 0x86, 0xde, 0xc7, 0x10, 0x9e, - 0x3c, 0x35, 0xde, 0x61, 0x15, 0x42, 0x11, 0xee, 0xd5, 0xaf, 0x39, 0xb0, 0xe9, 0xaf, 0xef, 0xc0, - 0xe6, 0xde, 0xf5, 0xc0, 0xce, 0x7c, 0x9d, 0x07, 0x36, 0x73, 0x3d, 0x53, 0xa4, 0x57, 0xbb, 0xf0, - 0x27, 0x37, 0x36, 0xe9, 0x09, 0x5d, 0xfb, 0x8f, 0x94, 0xab, 0x7d, 0xbb, 0x70, 0x66, 0xcf, 0x6e, - 0x3e, 0xf4, 0x0d, 0x7d, 0xfe, 0x37, 0xd9, 0x53, 0xed, 0xa6, 0xd5, 0xac, 0xae, 0x56, 0xfe, 0x3c, - 0x0d, 0x10, 0x33, 0x1d, 0x54, 0x82, 0x8c, 0x3c, 0xe0, 0x5c, 0x73, 0x73, 0x0a, 0xcb, 0x77, 0xb4, - 0x00, 0x69, 0xcf, 0x0c, 0x3a, 0xe2, 0xe0, 0x37, 0xa7, 0x30, 0x7f, 0x43, 0x15, 0x98, 0xa1, 0xa4, - 0x4d, 0xce, 0xf9, 0xf1, 0x0b, 0xd3, 0x55, 0x9a, 0x5a, 0xfb, 0xa1, 0xca, 0xd9, 0x0e, 0xeb, 0x42, - 0x35, 0x28, 0xb6, 0x4c, 0x9f, 0x18, 0x3e, 0x71, 0x7c, 0x3b, 0xb0, 0xcf, 0x88, 0x24, 0x17, 0xe5, - 0x91, 0x19, 0xd6, 0x5d, 0xb7, 0x2b, 0xce, 0x79, 0x81, 0x49, 0x1c, 0x87, 0x02, 0xe8, 0x05, 0x84, - 0x9e, 0xc6, 0x38, 0xa5, 0xc2, 0xbf, 0x96, 0x72, 0x5c, 0xc9, 0x6f, 0x26, 0x1c, 0x00, 0x2c, 0xa0, - 0x4f, 0x24, 0xd2, 0xec, 0x1e, 0x89, 0x9a, 0x02, 0x9e, 0xa5, 0xc3, 0x3d, 0xe8, 0x33, 0xc8, 0x4a, - 0x63, 0x97, 0x89, 0xe6, 0xbd, 0x64, 0x3a, 0xcd, 0x20, 0x7c, 0x81, 0x08, 0xc5, 0xa1, 0x04, 0x3a, - 0x01, 0xfd, 0xcb, 0x3e, 0x61, 0xa4, 0xde, 0xa4, 0x66, 0x8f, 0x70, 0x3f, 0x2e, 0x72, 0xcc, 0x6f, - 0x25, 0x69, 0xf9, 0x5d, 0x86, 0x3d, 0x0a, 0xa1, 0xa1, 0xb6, 0xd9, 0x2f, 0x87, 0x9a, 0x7d, 0xd4, - 0x84, 0x74, 0x9b, 0x7a, 0x2d, 0x99, 0x75, 0x6d, 0x5e, 0xcf, 0x4c, 0xab, 0x4f, 0xa9, 0xd7, 0x8a, - 0x5f, 0xc5, 0x71, 0xf7, 0x31, 0xd7, 0x50, 0x5e, 0x82, 0x5b, 0x89, 0xdd, 0xf5, 0x25, 0x28, 0xb2, - 0xcd, 0x33, 0x7c, 0x8f, 0xb4, 0xec, 0x53, 0x9b, 0xd0, 0x38, 0x56, 0xcd, 0xe8, 0x99, 0xca, 0x3f, - 0xa7, 0x01, 0xe2, 0xc4, 0x0e, 0xdd, 0x83, 0xbc, 0xd9, 0xed, 0xba, 0x6f, 0x0c, 0x97, 0xda, 0x6d, - 0xdb, 0xe1, 0xa1, 0x2a, 0x87, 0x35, 0xde, 0x76, 0xc8, 0x9b, 0xd0, 0xe7, 0x80, 0x06, 0x21, 0x86, - 0x30, 0x09, 0x95, 0x57, 0x30, 0x66, 0x99, 0x49, 0xc0, 0x57, 0x4a, 0xb6, 0x22, 0xec, 0x02, 0xeb, - 0x03, 0x92, 0x98, 0x1b, 0xc8, 0x7d, 0x28, 0x08, 0xf1, 0x1e, 0x09, 0x3a, 0xae, 0xe5, 0xcb, 0xe0, - 0x22, 0x86, 0xdd, 0x17, 0x6d, 0x31, 0x28, 0xdc, 0xb0, 0xd4, 0x00, 0x48, 0x3a, 0x24, 0xf4, 0x01, - 0x14, 0xc9, 0xb9, 0xe7, 0xc6, 0x3e, 0x8c, 0x9b, 0x5a, 0x0e, 0x17, 0x44, 0x6b, 0x08, 0x5b, 0x82, - 0x6c, 0xcf, 0x3c, 0x37, 0xcc, 0x36, 0xe1, 0x6c, 0x35, 0x87, 0x33, 0x3d, 0xf3, 0xbc, 0xd6, 0x26, - 0xe8, 0x29, 0xcc, 0x89, 0x41, 0x5a, 0x94, 0x58, 0xc4, 0x09, 0x6c, 0xb3, 0xcb, 0x2c, 0x63, 0x9c, - 0xb5, 0x8a, 0x4f, 0xda, 0x8a, 0x65, 0xd0, 0xa7, 0x90, 0x25, 0x8e, 0xf9, 0xaa, 0x4b, 0x2c, 0xc9, - 0xcb, 0xaf, 0x11, 0xaf, 0x4f, 0x97, 0x94, 0xe6, 0x14, 0x0e, 0x05, 0xd0, 0x09, 0x14, 0xa5, 0x3b, - 0x0b, 0x55, 0xdc, 0xdc, 0xd4, 0x9b, 0x53, 0xb8, 0x20, 0x94, 0x34, 0xa4, 0x56, 0x0c, 0x45, 0xbf, - 0x63, 0x5a, 0xee, 0x9b, 0x48, 0x2b, 0xdc, 0xfc, 0x00, 0x15, 0x84, 0x0a, 0xa9, 0xb3, 0x3e, 0x0f, - 0x73, 0x52, 0x59, 0x6c, 0x4b, 0x95, 0xbf, 0xbe, 0x05, 0xda, 0x40, 0xd6, 0x83, 0x3e, 0x80, 0xac, - 0xe4, 0x25, 0x23, 0x14, 0x80, 0x7d, 0xb5, 0xec, 0x43, 0x1b, 0x50, 0x94, 0x8f, 0x72, 0xef, 0x84, - 0x15, 0x0c, 0xa3, 0x0b, 0x12, 0x22, 0x36, 0x12, 0x61, 0x98, 0x7b, 0x23, 0xfd, 0x79, 0x5c, 0x7b, - 0x12, 0x44, 0xe0, 0xfe, 0x04, 0xce, 0xbf, 0x39, 0x85, 0xf5, 0x37, 0xc3, 0x4d, 0x3e, 0xfa, 0x33, - 0x05, 0xee, 0x86, 0x13, 0x71, 0xdc, 0xc0, 0x38, 0x75, 0xfb, 0x8e, 0x15, 0x65, 0x59, 0x46, 0xcb, - 0xb5, 0x48, 0x69, 0x81, 0x17, 0xce, 0x3e, 0x1b, 0x93, 0xef, 0x85, 0xb1, 0xe5, 0xc0, 0x0d, 0x9e, - 0x30, 0x25, 0x61, 0x9e, 0xb5, 0xe5, 0x5a, 0x44, 0x7a, 0xca, 0x1f, 0xf1, 0x74, 0xf2, 0x76, 0xeb, - 0x6a, 0x60, 0x02, 0xd3, 0x49, 0xdf, 0x98, 0xe9, 0x7c, 0x00, 0x45, 0xe1, 0xc5, 0x0d, 0x4a, 0xde, - 0x50, 0x3b, 0x08, 0xcd, 0xbe, 0x20, 0x5a, 0xb1, 0x68, 0x44, 0xf7, 0x21, 0xdf, 0x71, 0xfd, 0x20, - 0x02, 0x65, 0xb8, 0xab, 0x57, 0xb0, 0xc6, 0x5a, 0x43, 0x50, 0x13, 0xe6, 0xcc, 0x7e, 0xe0, 0x1a, - 0x43, 0xc8, 0xb1, 0x36, 0xde, 0x54, 0xf0, 0x2c, 0x13, 0x6b, 0x0e, 0x68, 0x7a, 0x0c, 0x59, 0x66, - 0x65, 0x6e, 0x3f, 0x90, 0xce, 0x6e, 0x79, 0x44, 0x7e, 0x5b, 0x96, 0x6e, 0xeb, 0xe9, 0xbf, 0xfa, - 0xf7, 0xbb, 0x0a, 0x0e, 0xf1, 0xa8, 0x0e, 0x79, 0xdb, 0xea, 0x12, 0x23, 0x94, 0x2f, 0x4d, 0x26, - 0xaf, 0x31, 0xa1, 0x93, 0x58, 0xc7, 0x50, 0x4d, 0x26, 0xf7, 0x0e, 0x35, 0x99, 0x36, 0xdc, 0x0a, - 0xa9, 0x5d, 0xcf, 0xa6, 0xd4, 0xa5, 0xa1, 0x32, 0x71, 0xb6, 0x1e, 0x8e, 0xb3, 0x10, 0x59, 0x2b, - 0xda, 0xe7, 0xb2, 0x72, 0x80, 0x90, 0x43, 0x0e, 0x36, 0xa2, 0xef, 0x81, 0xea, 0x51, 0xdb, 0xa5, - 0x76, 0x70, 0x51, 0xd2, 0xb8, 0xf5, 0x55, 0x92, 0xce, 0xad, 0xdb, 0x0f, 0x6c, 0xa7, 0x7d, 0x24, - 0x91, 0x38, 0x92, 0xb9, 0x5c, 0x55, 0x2d, 0xdc, 0xb4, 0xaa, 0x7a, 0x08, 0x8b, 0x61, 0x0d, 0xec, - 0xac, 0x63, 0x0c, 0xaa, 0x2a, 0x8e, 0xf5, 0x8e, 0xf3, 0x52, 0xf2, 0x45, 0x07, 0xc7, 0x0a, 0x9f, - 0x81, 0xd6, 0x31, 0xfd, 0x4e, 0xb8, 0x5e, 0xa2, 0x74, 0xf7, 0x60, 0xdc, 0x7a, 0x35, 0x4d, 0xbf, - 0x23, 0x97, 0x09, 0x3a, 0xd1, 0x73, 0x54, 0xa9, 0x9c, 0xbb, 0x41, 0xa5, 0x72, 0x07, 0x74, 0x16, - 0x03, 0x58, 0xa4, 0x8c, 0xcc, 0x68, 0x69, 0x32, 0x33, 0x2a, 0xf6, 0xcc, 0x73, 0x16, 0x59, 0x43, - 0x4b, 0x3a, 0x84, 0xf9, 0x41, 0x35, 0x86, 0x7b, 0x7a, 0xea, 0x93, 0xa0, 0x74, 0x67, 0x32, 0x6d, - 0x73, 0xed, 0x58, 0xd5, 0x21, 0x97, 0x44, 0x2f, 0x60, 0xb6, 0xef, 0xb5, 0xa9, 0x69, 0x11, 0xc9, - 0x68, 0xfd, 0xd2, 0x32, 0x5f, 0xa0, 0x8f, 0xc6, 0x2d, 0xd0, 0x73, 0x21, 0x26, 0x98, 0x22, 0x2e, - 0xf6, 0x07, 0x5f, 0x7d, 0xe4, 0x41, 0xc9, 0x76, 0x02, 0x42, 0x1d, 0xb3, 0x6b, 0x84, 0xa5, 0x24, - 0x43, 0xd2, 0xa9, 0x32, 0xb7, 0xaa, 0x4f, 0xc6, 0x0d, 0xb0, 0x23, 0xe5, 0x87, 0x6b, 0x53, 0x78, - 0xd1, 0x4e, 0x6c, 0x1f, 0x29, 0x5a, 0xde, 0x7e, 0x87, 0xa2, 0xe5, 0x3f, 0x2a, 0x30, 0x9f, 0x70, - 0x50, 0xd0, 0xfd, 0xab, 0x03, 0x4b, 0x1c, 0x56, 0xee, 0x83, 0x36, 0x90, 0xbd, 0xca, 0x98, 0x32, - 0x5d, 0x52, 0x30, 0xc4, 0xa9, 0x6b, 0x22, 0xbd, 0x4c, 0xfd, 0xef, 0xe9, 0x65, 0xf9, 0xa7, 0x69, - 0x80, 0xd8, 0x64, 0xd1, 0x33, 0xc8, 0xc8, 0xd0, 0x26, 0xca, 0x8e, 0x1f, 0x4f, 0x6e, 0xee, 0x92, - 0x83, 0x32, 0x3e, 0x2e, 0x54, 0x30, 0x65, 0x2d, 0xd7, 0x7d, 0x6d, 0x87, 0x7c, 0xff, 0x26, 0xca, - 0xb6, 0xb8, 0x20, 0x53, 0x26, 0x54, 0xa0, 0x33, 0xb8, 0xd5, 0x72, 0x1d, 0x87, 0x70, 0xa4, 0xe1, - 0x51, 0xd7, 0x23, 0x34, 0xb0, 0x49, 0x18, 0x4c, 0x7f, 0xfb, 0x46, 0xba, 0x43, 0x3d, 0x47, 0x91, - 0x9a, 0xe6, 0x14, 0x5e, 0x68, 0x25, 0xb4, 0xa3, 0x32, 0xa8, 0x01, 0xa1, 0x3d, 0xdb, 0x31, 0xbb, - 0x3c, 0xac, 0xa9, 0x38, 0x7a, 0x2f, 0x6f, 0x42, 0x46, 0x86, 0xf9, 0x07, 0xa0, 0x89, 0x8f, 0x36, - 0x92, 0x0b, 0x09, 0x20, 0x7a, 0x0f, 0xcc, 0x1e, 0x29, 0x3b, 0x90, 0x11, 0x5f, 0x37, 0xae, 0xee, - 0xf0, 0x31, 0xa4, 0x82, 0xa0, 0x2b, 0x17, 0x6f, 0xec, 0x21, 0x65, 0x58, 0x84, 0x64, 0x0a, 0x24, - 0x98, 0x27, 0x7f, 0x2e, 0x3f, 0x84, 0x85, 0xa4, 0x2f, 0x46, 0xb7, 0x21, 0xe7, 0xbb, 0x7d, 0xda, - 0x22, 0x86, 0xed, 0xf1, 0x29, 0xa8, 0x58, 0x15, 0x0d, 0x3b, 0x5e, 0x7d, 0x19, 0x74, 0x71, 0x1e, - 0x46, 0x28, 0x78, 0xb9, 0x03, 0x85, 0xa1, 0x33, 0xcc, 0xe8, 0x77, 0xe8, 0x0b, 0x58, 0x0a, 0x2a, - 0x33, 0x3e, 0x4d, 0xb6, 0xf1, 0x1a, 0xf8, 0x66, 0x4c, 0x36, 0xa7, 0xc7, 0x7a, 0xe3, 0x10, 0x5a, - 0x69, 0xc0, 0xed, 0x6b, 0x08, 0x0a, 0x5a, 0x82, 0xf9, 0xe3, 0x06, 0x7e, 0xb1, 0xb3, 0xd5, 0x30, - 0x9e, 0x1f, 0xd4, 0x5e, 0xd4, 0x76, 0xf6, 0x6a, 0xf5, 0xbd, 0x86, 0x3e, 0x85, 0x0a, 0x90, 0x3b, - 0x38, 0x3c, 0x31, 0x9e, 0x1c, 0x3e, 0x3f, 0xd8, 0xd6, 0x95, 0xca, 0x17, 0xb0, 0x98, 0xec, 0x13, - 0x50, 0x05, 0x56, 0x8e, 0x6a, 0xc7, 0xc7, 0xc6, 0x49, 0x13, 0x1f, 0x3e, 0x7f, 0xda, 0x34, 0x76, - 0x0e, 0x64, 0x75, 0x1e, 0x37, 0xb6, 0x77, 0x70, 0x63, 0xeb, 0x44, 0x9f, 0x42, 0x77, 0xa0, 0xd4, - 0xac, 0x1d, 0x6c, 0xef, 0x35, 0x12, 0x7a, 0x95, 0x7a, 0x19, 0xe6, 0x42, 0x2a, 0x76, 0x79, 0xa1, - 0xea, 0x25, 0x58, 0x1c, 0xa4, 0x20, 0x31, 0x60, 0x37, 0xad, 0xe6, 0xf5, 0xc2, 0x6e, 0x5a, 0x45, - 0xfa, 0xfc, 0x6e, 0x5a, 0x9d, 0xd7, 0x17, 0x76, 0xd3, 0xaa, 0xae, 0xcf, 0xed, 0xa6, 0xd5, 0x45, - 0x7d, 0x69, 0x37, 0xad, 0xde, 0xd2, 0x17, 0x2b, 0xff, 0xa2, 0x82, 0x36, 0x10, 0xd5, 0xd1, 0x32, - 0xa8, 0x82, 0x0c, 0xb8, 0x8e, 0x5c, 0xe1, 0x2c, 0x7f, 0x3f, 0x64, 0xc9, 0x8d, 0xe6, 0xf4, 0x7b, - 0x06, 0x7b, 0x65, 0x27, 0x62, 0x92, 0x2a, 0x15, 0x38, 0xfd, 0x1e, 0x16, 0x78, 0xf4, 0x14, 0x66, - 0x3d, 0x42, 0x0d, 0xa6, 0x3b, 0x0c, 0x33, 0xa9, 0xc9, 0x6c, 0xae, 0xe0, 0x11, 0x7a, 0x42, 0x2f, - 0xc2, 0x28, 0x73, 0x02, 0x45, 0xc9, 0x57, 0x42, 0x22, 0x20, 0x88, 0xe0, 0x47, 0x63, 0x18, 0x8b, - 0x7c, 0x0e, 0x39, 0x41, 0x81, 0x0e, 0xbe, 0x22, 0x0b, 0x16, 0x84, 0x56, 0xbe, 0x98, 0x1e, 0x8b, - 0x0a, 0x2d, 0x93, 0x13, 0x44, 0x16, 0x6f, 0x36, 0x26, 0xd2, 0xcd, 0x48, 0xdd, 0x51, 0x28, 0x89, - 0x11, 0x1d, 0x69, 0x43, 0x4d, 0xb8, 0xc7, 0xf5, 0xfb, 0xa4, 0x2b, 0x7d, 0x8c, 0x18, 0x94, 0x67, - 0x61, 0xe2, 0xa2, 0x4c, 0xe4, 0x59, 0x29, 0xfc, 0x1e, 0x03, 0x1e, 0x87, 0x38, 0xae, 0x7f, 0xdf, - 0x3c, 0x97, 0xb7, 0x69, 0x3e, 0xda, 0x84, 0x45, 0xbe, 0x13, 0xcc, 0x86, 0x0d, 0x3f, 0x30, 0x83, - 0xbe, 0xcf, 0x39, 0xb9, 0x48, 0xbd, 0x0b, 0x78, 0x21, 0xea, 0x3d, 0xe6, 0x9d, 0xcc, 0x96, 0x7d, - 0x96, 0xfc, 0x88, 0x01, 0x5f, 0x99, 0xad, 0xd7, 0x2c, 0x3e, 0x4b, 0xc6, 0xf9, 0xed, 0x89, 0xbe, - 0xaf, 0x6e, 0xb6, 0x5e, 0x1f, 0x9e, 0x9e, 0x62, 0xc1, 0x17, 0xe5, 0x5b, 0xf9, 0xef, 0x14, 0x28, - 0x0c, 0x2d, 0xed, 0x78, 0x8f, 0x93, 0x91, 0xf5, 0xa9, 0xeb, 0x6b, 0x40, 0xc2, 0x2f, 0xf3, 0xc3, - 0xff, 0x18, 0xf2, 0xa2, 0xc6, 0x25, 0x05, 0x53, 0x57, 0x97, 0x76, 0x9a, 0x53, 0x58, 0xe3, 0x58, - 0xe1, 0x37, 0xea, 0x05, 0xd0, 0x84, 0x10, 0x77, 0x1b, 0xe5, 0x9f, 0x2a, 0x80, 0x46, 0x37, 0xeb, - 0xff, 0xf4, 0x94, 0xff, 0x41, 0x81, 0xfc, 0xe0, 0xfa, 0xa3, 0x23, 0x28, 0xbc, 0x32, 0x7d, 0x62, - 0x70, 0xae, 0x71, 0x66, 0x76, 0x65, 0x18, 0xbd, 0xe6, 0x20, 0xe9, 0xec, 0x20, 0xb1, 0x8f, 0xca, - 0xfe, 0x44, 0x49, 0xab, 0xca, 0x83, 0x29, 0x9c, 0x67, 0x1a, 0x76, 0xa4, 0x02, 0xb4, 0x07, 0x79, - 0x66, 0x82, 0x91, 0xc2, 0xb1, 0xd1, 0xa0, 0x18, 0x2a, 0x9c, 0xf9, 0x89, 0x32, 0xfd, 0x60, 0x0a, - 0x6b, 0x3d, 0xf3, 0x3c, 0xd4, 0x56, 0xf9, 0x2f, 0x05, 0xb4, 0x01, 0x16, 0x83, 0x30, 0xe8, 0xb6, - 0x63, 0x07, 0x36, 0x67, 0x5b, 0x9c, 0xbf, 0xf8, 0x72, 0xca, 0x13, 0x57, 0xe2, 0x67, 0xa5, 0x02, - 0xc9, 0x7f, 0x7c, 0xf4, 0x12, 0x96, 0x4d, 0xcb, 0xb2, 0x05, 0xf1, 0x88, 0xee, 0xa3, 0x5b, 0x1d, - 0xd3, 0x69, 0x85, 0x4c, 0x20, 0xa4, 0xf5, 0x6c, 0x11, 0xab, 0xa3, 0x2c, 0x65, 0x29, 0x96, 0x97, - 0x5a, 0xb7, 0xb8, 0x34, 0xfa, 0x04, 0x4a, 0x82, 0xab, 0x31, 0x0a, 0x90, 0xe0, 0xb2, 0x54, 0xbc, - 0xc0, 0xfb, 0x0f, 0x9d, 0xa3, 0x41, 0xc7, 0x54, 0xf9, 0x59, 0x1a, 0x8a, 0x97, 0x5c, 0xff, 0x87, - 0x50, 0xec, 0x04, 0x81, 0xe7, 0x47, 0x2c, 0x53, 0x44, 0x77, 0x96, 0xc1, 0xf3, 0xf6, 0x10, 0x8e, - 0xbe, 0x05, 0xb3, 0x7e, 0xab, 0x43, 0x7a, 0x24, 0x46, 0x66, 0x65, 0x81, 0xb1, 0x28, 0x3a, 0x22, - 0xe8, 0x7d, 0x28, 0x48, 0x87, 0x2f, 0x81, 0xc2, 0x4f, 0xe7, 0x45, 0x72, 0x1a, 0x83, 0x3c, 0x97, - 0x0e, 0x80, 0xd8, 0x39, 0x2f, 0xe0, 0x3c, 0x6b, 0x8c, 0x40, 0x1f, 0x40, 0x81, 0xd7, 0xbf, 0x22, - 0xd0, 0xb4, 0x4c, 0x74, 0xf3, 0xac, 0x39, 0x82, 0x7d, 0x98, 0x9c, 0x35, 0x37, 0x95, 0xcb, 0x79, - 0x73, 0x07, 0x0a, 0xc3, 0xf5, 0x81, 0x14, 0xe7, 0xd2, 0x8f, 0xc6, 0xdf, 0xe9, 0x46, 0xaf, 0x57, - 0xd6, 0x06, 0xf2, 0x74, 0x30, 0x28, 0xdf, 0x05, 0xcd, 0x0f, 0xa8, 0xed, 0x19, 0xbc, 0x6a, 0xc8, - 0x3d, 0xa6, 0x8a, 0x81, 0x37, 0xf1, 0xf2, 0x62, 0xe5, 0x0d, 0x2c, 0x24, 0xa9, 0x44, 0xb7, 0x60, - 0x6e, 0xff, 0xf0, 0x45, 0x63, 0xdb, 0x38, 0x6a, 0xe0, 0xfd, 0xda, 0x41, 0xe3, 0xe0, 0x64, 0xef, - 0xa5, 0x3e, 0x85, 0x72, 0x30, 0x23, 0xe3, 0x38, 0x0b, 0xeb, 0xc7, 0x8d, 0x86, 0x71, 0x78, 0xd2, - 0x6c, 0x60, 0x7d, 0x1a, 0x2d, 0x02, 0x3a, 0x69, 0xec, 0x1f, 0x1d, 0xe2, 0x1a, 0x7e, 0x19, 0x87, - 0xe4, 0x14, 0x6b, 0x8f, 0x54, 0xc4, 0xed, 0xe9, 0x7a, 0x19, 0x4a, 0xd1, 0x46, 0x5e, 0x0a, 0xc8, - 0x2c, 0x54, 0xcb, 0xf5, 0xbe, 0xd4, 0x53, 0x71, 0x61, 0x21, 0xe9, 0x6e, 0x1a, 0xbd, 0x0f, 0x19, - 0xe1, 0xdb, 0xf9, 0x26, 0x17, 0xea, 0x79, 0x7e, 0x86, 0x1f, 0xcc, 0xe8, 0xbf, 0x4a, 0xaf, 0x59, - 0x58, 0xf6, 0xa1, 0x8f, 0x21, 0xfd, 0xca, 0xb5, 0x2e, 0x2e, 0x99, 0xfd, 0x20, 0x55, 0xdf, 0x36, - 0x03, 0xf3, 0x98, 0xb3, 0x2e, 0xcc, 0xa1, 0x95, 0x4d, 0xc8, 0x45, 0x97, 0xd0, 0xe8, 0x43, 0xc8, - 0x31, 0xbe, 0xc6, 0x4f, 0xf6, 0xa8, 0x07, 0x8c, 0xfb, 0x2a, 0x7f, 0xa1, 0x40, 0x71, 0xf8, 0x77, - 0x4b, 0xe8, 0x37, 0x20, 0xeb, 0xb1, 0xc8, 0x45, 0x43, 0x49, 0x31, 0x45, 0xca, 0x4c, 0xe4, 0x87, - 0x2a, 0x0e, 0x3b, 0x23, 0x07, 0x3b, 0x9d, 0xec, 0x60, 0xbf, 0x0b, 0x19, 0x51, 0xf4, 0x94, 0x36, - 0xb3, 0x9a, 0x94, 0x6f, 0xc8, 0xdc, 0x87, 0xe3, 0xb0, 0xc4, 0x57, 0xfe, 0x35, 0x07, 0xb9, 0x28, - 0x9f, 0x46, 0x9f, 0xc3, 0x8c, 0x1f, 0x98, 0x6d, 0x72, 0x23, 0xff, 0x52, 0x02, 0x2c, 0xa4, 0x98, - 0x5d, 0x59, 0xb6, 0xcf, 0x63, 0x6a, 0x94, 0x25, 0x61, 0x90, 0x4d, 0x2c, 0x43, 0xda, 0x85, 0xac, - 0xf0, 0x23, 0xe1, 0x6f, 0xce, 0xde, 0xbf, 0xb6, 0x76, 0x50, 0x15, 0xfb, 0x38, 0xfc, 0xf3, 0x35, - 0xa9, 0xa0, 0xfc, 0x37, 0x2a, 0x64, 0xe4, 0x3e, 0x7f, 0x1f, 0x8a, 0x92, 0x25, 0x0f, 0x66, 0x72, - 0x57, 0xf1, 0x8e, 0x4b, 0xda, 0xab, 0x62, 0x67, 0xe3, 0x62, 0x5e, 0xc1, 0x1f, 0x6c, 0x40, 0x3f, - 0x80, 0x79, 0x8b, 0xf8, 0x81, 0xed, 0xf0, 0x4d, 0x8c, 0x46, 0x10, 0xd6, 0xf2, 0x68, 0xa2, 0x11, - 0xb6, 0x63, 0xf9, 0x78, 0x18, 0x64, 0x8d, 0xb4, 0xa2, 0x3f, 0x84, 0xd9, 0x4b, 0x77, 0x7c, 0x32, - 0xf0, 0x3d, 0x9c, 0x68, 0x1c, 0x3c, 0x74, 0xfd, 0xc7, 0x9c, 0xdf, 0xf0, 0x85, 0x20, 0x5b, 0x28, - 0x4a, 0x7a, 0x6e, 0x40, 0x0c, 0xd3, 0xb2, 0x28, 0xf1, 0x7d, 0x49, 0xfe, 0x36, 0x26, 0x54, 0xcf, - 0x44, 0x6b, 0x42, 0x92, 0x2d, 0x14, 0x1d, 0x6c, 0x40, 0x18, 0xb4, 0x36, 0x71, 0x08, 0xb5, 0x5b, - 0x7c, 0xf7, 0xc5, 0x0f, 0x38, 0xd6, 0x27, 0xd2, 0xfc, 0x54, 0xc8, 0x3d, 0x23, 0x2c, 0x98, 0x43, - 0x3b, 0x7a, 0x43, 0x04, 0x90, 0xcc, 0xd9, 0xf8, 0x8d, 0x93, 0x2c, 0x5d, 0x8a, 0x52, 0xfa, 0x6f, - 0x4d, 0xa4, 0x7a, 0xe0, 0x1a, 0x93, 0x57, 0x31, 0x9b, 0x53, 0x58, 0xef, 0x5c, 0x6a, 0x2b, 0xcf, - 0x42, 0x61, 0xc8, 0x0a, 0xca, 0x0b, 0x80, 0x46, 0x37, 0xad, 0xec, 0xb0, 0x08, 0x35, 0xb4, 0xa0, - 0x37, 0xc8, 0x29, 0xd1, 0x77, 0xa0, 0x68, 0x11, 0xbf, 0x45, 0x6d, 0x2f, 0x70, 0xe9, 0x40, 0x19, - 0x61, 0x00, 0x5e, 0x88, 0x01, 0xcf, 0xc8, 0x05, 0x9b, 0xd6, 0xd0, 0x9a, 0x97, 0xeb, 0x00, 0xf1, - 0x52, 0xa1, 0x4d, 0xd0, 0x07, 0x14, 0x8a, 0x5b, 0xbb, 0x91, 0x19, 0xcc, 0xc6, 0x10, 0xfe, 0xc1, - 0xe5, 0x5f, 0x2a, 0xa0, 0x5f, 0x5e, 0x94, 0x77, 0x53, 0x85, 0x3e, 0x87, 0x3c, 0x39, 0xf7, 0x48, - 0x2b, 0x90, 0xfb, 0x32, 0x3e, 0x6d, 0xd4, 0x04, 0x5e, 0x0c, 0xfa, 0x34, 0xbe, 0x36, 0x4b, 0x4d, - 0x78, 0x6d, 0x36, 0xec, 0x0a, 0xa4, 0x34, 0x4b, 0x84, 0x85, 0x57, 0x18, 0xc9, 0xef, 0x2a, 0x7f, - 0x9a, 0x82, 0xc2, 0x90, 0x86, 0x71, 0x5c, 0xf5, 0x1e, 0x68, 0xe4, 0xdc, 0x8c, 0x3e, 0x29, 0x2d, - 0x69, 0x04, 0xf0, 0x46, 0x31, 0xef, 0x8f, 0x40, 0xe3, 0x57, 0x53, 0x12, 0x32, 0x93, 0x70, 0x67, - 0x09, 0x1c, 0x20, 0xe0, 0x8f, 0x41, 0xe3, 0xbf, 0x39, 0x1e, 0x32, 0xde, 0xc5, 0x41, 0x76, 0xb5, - 0xe3, 0x04, 0x9f, 0x6c, 0x62, 0x86, 0xe1, 0xa2, 0xec, 0x21, 0xac, 0xb8, 0x33, 0x8e, 0xe0, 0x13, - 0x27, 0x9c, 0x4e, 0x56, 0xf2, 0x9f, 0xbc, 0x6c, 0x16, 0xb0, 0x2a, 0xe4, 0x25, 0xc5, 0x10, 0xa8, - 0xdc, 0xe8, 0x95, 0x87, 0x26, 0x00, 0x11, 0xde, 0xef, 0x9f, 0xc6, 0x78, 0x48, 0xc0, 0x0b, 0x80, - 0xc0, 0xdf, 0x83, 0xbc, 0xed, 0x9c, 0x11, 0x1a, 0xce, 0x42, 0xe5, 0x84, 0x41, 0x13, 0x6d, 0xe2, - 0xb7, 0x6d, 0x2c, 0x8f, 0x16, 0x07, 0x81, 0x43, 0x86, 0xf2, 0xe8, 0x69, 0x3d, 0xb5, 0x9b, 0x56, - 0x53, 0x7a, 0xba, 0xf2, 0xc7, 0x0a, 0xdc, 0x4a, 0xbc, 0xc0, 0x44, 0xab, 0x43, 0xbb, 0x32, 0x1c, - 0x05, 0xc5, 0xc6, 0x2c, 0x84, 0x17, 0xd3, 0xa2, 0x6e, 0x22, 0x5e, 0xd0, 0x77, 0xc2, 0x9b, 0xe3, - 0xf1, 0x97, 0xc1, 0x02, 0x58, 0x3f, 0xf8, 0xdb, 0xb7, 0x2b, 0xca, 0x2f, 0xde, 0xae, 0x28, 0xbf, - 0x7c, 0xbb, 0xa2, 0xfc, 0xea, 0xed, 0x8a, 0xf2, 0x1f, 0x6f, 0x57, 0x14, 0x58, 0xb5, 0x5d, 0xb1, - 0x23, 0x1e, 0x75, 0xcf, 0x2f, 0x12, 0xec, 0xb0, 0x2e, 0xee, 0xb7, 0x8f, 0x98, 0xde, 0x23, 0xe5, - 0x0b, 0xf1, 0x13, 0xbc, 0x3f, 0x51, 0x94, 0x57, 0x19, 0x3e, 0xd4, 0xc3, 0xff, 0x09, 0x00, 0x00, - 0xff, 0xff, 0x3f, 0xad, 0xa9, 0xc1, 0xd0, 0x2e, 0x00, 0x00, -} - -func (this *VirtualHost) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*VirtualHost) - if !ok { - that2, ok := that.(VirtualHost) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if len(this.Domains) != len(that1.Domains) { - return false - } - for i := range this.Domains { - if this.Domains[i] != that1.Domains[i] { - return false - } - } - if len(this.Routes) != len(that1.Routes) { - return false - } - for i := range this.Routes { - if !this.Routes[i].Equal(&that1.Routes[i]) { - return false - } - } - if this.RequireTls != that1.RequireTls { - return false - } - if len(this.VirtualClusters) != len(that1.VirtualClusters) { - return false - } - for i := range this.VirtualClusters { - if !this.VirtualClusters[i].Equal(that1.VirtualClusters[i]) { - return false - } - } - if len(this.RateLimits) != len(that1.RateLimits) { - return false - } - for i := range this.RateLimits { - if !this.RateLimits[i].Equal(that1.RateLimits[i]) { - return false - } - } - if len(this.RequestHeadersToAdd) != len(that1.RequestHeadersToAdd) { - return false - } - for i := range this.RequestHeadersToAdd { - if !this.RequestHeadersToAdd[i].Equal(that1.RequestHeadersToAdd[i]) { - return false - } - } - if len(this.RequestHeadersToRemove) != len(that1.RequestHeadersToRemove) { - return false - } - for i := range this.RequestHeadersToRemove { - if this.RequestHeadersToRemove[i] != that1.RequestHeadersToRemove[i] { - return false - } - } - if len(this.ResponseHeadersToAdd) != len(that1.ResponseHeadersToAdd) { - return false - } - for i := range this.ResponseHeadersToAdd { - if !this.ResponseHeadersToAdd[i].Equal(that1.ResponseHeadersToAdd[i]) { - return false - } - } - if len(this.ResponseHeadersToRemove) != len(that1.ResponseHeadersToRemove) { - return false - } - for i := range this.ResponseHeadersToRemove { - if this.ResponseHeadersToRemove[i] != that1.ResponseHeadersToRemove[i] { - return false - } - } - if !this.Cors.Equal(that1.Cors) { - return false - } - if len(this.PerFilterConfig) != len(that1.PerFilterConfig) { - return false - } - for i := range this.PerFilterConfig { - if !this.PerFilterConfig[i].Equal(that1.PerFilterConfig[i]) { - return false - } - } - if len(this.TypedPerFilterConfig) != len(that1.TypedPerFilterConfig) { - return false - } - for i := range this.TypedPerFilterConfig { - if !this.TypedPerFilterConfig[i].Equal(that1.TypedPerFilterConfig[i]) { - return false - } - } - if this.IncludeRequestAttemptCount != that1.IncludeRequestAttemptCount { - return false - } - if !this.RetryPolicy.Equal(that1.RetryPolicy) { - return false - } - if !this.HedgePolicy.Equal(that1.HedgePolicy) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Route) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Route) - if !ok { - that2, ok := that.(Route) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Match.Equal(&that1.Match) { - return false - } - if that1.Action == nil { - if this.Action != nil { - return false - } - } else if this.Action == nil { - return false - } else if !this.Action.Equal(that1.Action) { - return false - } - if !this.Metadata.Equal(that1.Metadata) { - return false - } - if !this.Decorator.Equal(that1.Decorator) { - return false - } - if len(this.PerFilterConfig) != len(that1.PerFilterConfig) { - return false - } - for i := range this.PerFilterConfig { - if !this.PerFilterConfig[i].Equal(that1.PerFilterConfig[i]) { - return false - } - } - if len(this.TypedPerFilterConfig) != len(that1.TypedPerFilterConfig) { - return false - } - for i := range this.TypedPerFilterConfig { - if !this.TypedPerFilterConfig[i].Equal(that1.TypedPerFilterConfig[i]) { - return false - } - } - if len(this.RequestHeadersToAdd) != len(that1.RequestHeadersToAdd) { - return false - } - for i := range this.RequestHeadersToAdd { - if !this.RequestHeadersToAdd[i].Equal(that1.RequestHeadersToAdd[i]) { - return false - } - } - if len(this.RequestHeadersToRemove) != len(that1.RequestHeadersToRemove) { - return false - } - for i := range this.RequestHeadersToRemove { - if this.RequestHeadersToRemove[i] != that1.RequestHeadersToRemove[i] { - return false - } - } - if len(this.ResponseHeadersToAdd) != len(that1.ResponseHeadersToAdd) { - return false - } - for i := range this.ResponseHeadersToAdd { - if !this.ResponseHeadersToAdd[i].Equal(that1.ResponseHeadersToAdd[i]) { - return false - } - } - if len(this.ResponseHeadersToRemove) != len(that1.ResponseHeadersToRemove) { - return false - } - for i := range this.ResponseHeadersToRemove { - if this.ResponseHeadersToRemove[i] != that1.ResponseHeadersToRemove[i] { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Route_Route) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Route_Route) - if !ok { - that2, ok := that.(Route_Route) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Route.Equal(that1.Route) { - return false - } - return true -} -func (this *Route_Redirect) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Route_Redirect) - if !ok { - that2, ok := that.(Route_Redirect) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Redirect.Equal(that1.Redirect) { - return false - } - return true -} -func (this *Route_DirectResponse) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Route_DirectResponse) - if !ok { - that2, ok := that.(Route_DirectResponse) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.DirectResponse.Equal(that1.DirectResponse) { - return false - } - return true -} -func (this *WeightedCluster) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*WeightedCluster) - if !ok { - that2, ok := that.(WeightedCluster) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.Clusters) != len(that1.Clusters) { - return false - } - for i := range this.Clusters { - if !this.Clusters[i].Equal(that1.Clusters[i]) { - return false - } - } - if !this.TotalWeight.Equal(that1.TotalWeight) { - return false - } - if this.RuntimeKeyPrefix != that1.RuntimeKeyPrefix { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *WeightedCluster_ClusterWeight) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*WeightedCluster_ClusterWeight) - if !ok { - that2, ok := that.(WeightedCluster_ClusterWeight) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if !this.Weight.Equal(that1.Weight) { - return false - } - if !this.MetadataMatch.Equal(that1.MetadataMatch) { - return false - } - if len(this.RequestHeadersToAdd) != len(that1.RequestHeadersToAdd) { - return false - } - for i := range this.RequestHeadersToAdd { - if !this.RequestHeadersToAdd[i].Equal(that1.RequestHeadersToAdd[i]) { - return false - } - } - if len(this.RequestHeadersToRemove) != len(that1.RequestHeadersToRemove) { - return false - } - for i := range this.RequestHeadersToRemove { - if this.RequestHeadersToRemove[i] != that1.RequestHeadersToRemove[i] { - return false - } - } - if len(this.ResponseHeadersToAdd) != len(that1.ResponseHeadersToAdd) { - return false - } - for i := range this.ResponseHeadersToAdd { - if !this.ResponseHeadersToAdd[i].Equal(that1.ResponseHeadersToAdd[i]) { - return false - } - } - if len(this.ResponseHeadersToRemove) != len(that1.ResponseHeadersToRemove) { - return false - } - for i := range this.ResponseHeadersToRemove { - if this.ResponseHeadersToRemove[i] != that1.ResponseHeadersToRemove[i] { - return false - } - } - if len(this.PerFilterConfig) != len(that1.PerFilterConfig) { - return false - } - for i := range this.PerFilterConfig { - if !this.PerFilterConfig[i].Equal(that1.PerFilterConfig[i]) { - return false - } - } - if len(this.TypedPerFilterConfig) != len(that1.TypedPerFilterConfig) { - return false - } - for i := range this.TypedPerFilterConfig { - if !this.TypedPerFilterConfig[i].Equal(that1.TypedPerFilterConfig[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteMatch) - if !ok { - that2, ok := that.(RouteMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.PathSpecifier == nil { - if this.PathSpecifier != nil { - return false - } - } else if this.PathSpecifier == nil { - return false - } else if !this.PathSpecifier.Equal(that1.PathSpecifier) { - return false - } - if !this.CaseSensitive.Equal(that1.CaseSensitive) { - return false - } - if !this.RuntimeFraction.Equal(that1.RuntimeFraction) { - return false - } - if len(this.Headers) != len(that1.Headers) { - return false - } - for i := range this.Headers { - if !this.Headers[i].Equal(that1.Headers[i]) { - return false - } - } - if len(this.QueryParameters) != len(that1.QueryParameters) { - return false - } - for i := range this.QueryParameters { - if !this.QueryParameters[i].Equal(that1.QueryParameters[i]) { - return false - } - } - if !this.Grpc.Equal(that1.Grpc) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteMatch_Prefix) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteMatch_Prefix) - if !ok { - that2, ok := that.(RouteMatch_Prefix) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Prefix != that1.Prefix { - return false - } - return true -} -func (this *RouteMatch_Path) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteMatch_Path) - if !ok { - that2, ok := that.(RouteMatch_Path) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Path != that1.Path { - return false - } - return true -} -func (this *RouteMatch_Regex) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteMatch_Regex) - if !ok { - that2, ok := that.(RouteMatch_Regex) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Regex != that1.Regex { - return false - } - return true -} -func (this *RouteMatch_GrpcRouteMatchOptions) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteMatch_GrpcRouteMatchOptions) - if !ok { - that2, ok := that.(RouteMatch_GrpcRouteMatchOptions) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *CorsPolicy) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CorsPolicy) - if !ok { - that2, ok := that.(CorsPolicy) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if len(this.AllowOrigin) != len(that1.AllowOrigin) { - return false - } - for i := range this.AllowOrigin { - if this.AllowOrigin[i] != that1.AllowOrigin[i] { - return false - } - } - if len(this.AllowOriginRegex) != len(that1.AllowOriginRegex) { - return false - } - for i := range this.AllowOriginRegex { - if this.AllowOriginRegex[i] != that1.AllowOriginRegex[i] { - return false - } - } - if this.AllowMethods != that1.AllowMethods { - return false - } - if this.AllowHeaders != that1.AllowHeaders { - return false - } - if this.ExposeHeaders != that1.ExposeHeaders { - return false - } - if this.MaxAge != that1.MaxAge { - return false - } - if !this.AllowCredentials.Equal(that1.AllowCredentials) { - return false - } - if that1.EnabledSpecifier == nil { - if this.EnabledSpecifier != nil { - return false - } - } else if this.EnabledSpecifier == nil { - return false - } else if !this.EnabledSpecifier.Equal(that1.EnabledSpecifier) { - return false - } - if !this.ShadowEnabled.Equal(that1.ShadowEnabled) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *CorsPolicy_Enabled) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CorsPolicy_Enabled) - if !ok { - that2, ok := that.(CorsPolicy_Enabled) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Enabled.Equal(that1.Enabled) { - return false - } - return true -} -func (this *CorsPolicy_FilterEnabled) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*CorsPolicy_FilterEnabled) - if !ok { - that2, ok := that.(CorsPolicy_FilterEnabled) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.FilterEnabled.Equal(that1.FilterEnabled) { - return false - } - return true -} -func (this *RouteAction) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction) - if !ok { - that2, ok := that.(RouteAction) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.ClusterSpecifier == nil { - if this.ClusterSpecifier != nil { - return false - } - } else if this.ClusterSpecifier == nil { - return false - } else if !this.ClusterSpecifier.Equal(that1.ClusterSpecifier) { - return false - } - if this.ClusterNotFoundResponseCode != that1.ClusterNotFoundResponseCode { - return false - } - if !this.MetadataMatch.Equal(that1.MetadataMatch) { - return false - } - if this.PrefixRewrite != that1.PrefixRewrite { - return false - } - if that1.HostRewriteSpecifier == nil { - if this.HostRewriteSpecifier != nil { - return false - } - } else if this.HostRewriteSpecifier == nil { - return false - } else if !this.HostRewriteSpecifier.Equal(that1.HostRewriteSpecifier) { - return false - } - if this.Timeout != nil && that1.Timeout != nil { - if *this.Timeout != *that1.Timeout { - return false - } - } else if this.Timeout != nil { - return false - } else if that1.Timeout != nil { - return false - } - if this.IdleTimeout != nil && that1.IdleTimeout != nil { - if *this.IdleTimeout != *that1.IdleTimeout { - return false - } - } else if this.IdleTimeout != nil { - return false - } else if that1.IdleTimeout != nil { - return false - } - if !this.RetryPolicy.Equal(that1.RetryPolicy) { - return false - } - if !this.RequestMirrorPolicy.Equal(that1.RequestMirrorPolicy) { - return false - } - if this.Priority != that1.Priority { - return false - } - if len(this.RateLimits) != len(that1.RateLimits) { - return false - } - for i := range this.RateLimits { - if !this.RateLimits[i].Equal(that1.RateLimits[i]) { - return false - } - } - if !this.IncludeVhRateLimits.Equal(that1.IncludeVhRateLimits) { - return false - } - if len(this.HashPolicy) != len(that1.HashPolicy) { - return false - } - for i := range this.HashPolicy { - if !this.HashPolicy[i].Equal(that1.HashPolicy[i]) { - return false - } - } - if !this.Cors.Equal(that1.Cors) { - return false - } - if this.MaxGrpcTimeout != nil && that1.MaxGrpcTimeout != nil { - if *this.MaxGrpcTimeout != *that1.MaxGrpcTimeout { - return false - } - } else if this.MaxGrpcTimeout != nil { - return false - } else if that1.MaxGrpcTimeout != nil { - return false - } - if this.GrpcTimeoutOffset != nil && that1.GrpcTimeoutOffset != nil { - if *this.GrpcTimeoutOffset != *that1.GrpcTimeoutOffset { - return false - } - } else if this.GrpcTimeoutOffset != nil { - return false - } else if that1.GrpcTimeoutOffset != nil { - return false - } - if len(this.UpgradeConfigs) != len(that1.UpgradeConfigs) { - return false - } - for i := range this.UpgradeConfigs { - if !this.UpgradeConfigs[i].Equal(that1.UpgradeConfigs[i]) { - return false - } - } - if this.InternalRedirectAction != that1.InternalRedirectAction { - return false - } - if !this.HedgePolicy.Equal(that1.HedgePolicy) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteAction_Cluster) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_Cluster) - if !ok { - that2, ok := that.(RouteAction_Cluster) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Cluster != that1.Cluster { - return false - } - return true -} -func (this *RouteAction_ClusterHeader) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_ClusterHeader) - if !ok { - that2, ok := that.(RouteAction_ClusterHeader) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.ClusterHeader != that1.ClusterHeader { - return false - } - return true -} -func (this *RouteAction_WeightedClusters) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_WeightedClusters) - if !ok { - that2, ok := that.(RouteAction_WeightedClusters) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.WeightedClusters.Equal(that1.WeightedClusters) { - return false - } - return true -} -func (this *RouteAction_HostRewrite) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HostRewrite) - if !ok { - that2, ok := that.(RouteAction_HostRewrite) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.HostRewrite != that1.HostRewrite { - return false - } - return true -} -func (this *RouteAction_AutoHostRewrite) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_AutoHostRewrite) - if !ok { - that2, ok := that.(RouteAction_AutoHostRewrite) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.AutoHostRewrite.Equal(that1.AutoHostRewrite) { - return false - } - return true -} -func (this *RouteAction_RequestMirrorPolicy) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_RequestMirrorPolicy) - if !ok { - that2, ok := that.(RouteAction_RequestMirrorPolicy) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Cluster != that1.Cluster { - return false - } - if this.RuntimeKey != that1.RuntimeKey { - return false - } - if !this.RuntimeFraction.Equal(that1.RuntimeFraction) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteAction_HashPolicy) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy) - if !ok { - that2, ok := that.(RouteAction_HashPolicy) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.PolicySpecifier == nil { - if this.PolicySpecifier != nil { - return false - } - } else if this.PolicySpecifier == nil { - return false - } else if !this.PolicySpecifier.Equal(that1.PolicySpecifier) { - return false - } - if this.Terminal != that1.Terminal { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteAction_HashPolicy_Header_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_Header_) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_Header_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Header.Equal(that1.Header) { - return false - } - return true -} -func (this *RouteAction_HashPolicy_Cookie_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_Cookie_) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_Cookie_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Cookie.Equal(that1.Cookie) { - return false - } - return true -} -func (this *RouteAction_HashPolicy_ConnectionProperties_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_ConnectionProperties_) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_ConnectionProperties_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.ConnectionProperties.Equal(that1.ConnectionProperties) { - return false - } - return true -} -func (this *RouteAction_HashPolicy_Header) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_Header) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_Header) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.HeaderName != that1.HeaderName { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteAction_HashPolicy_Cookie) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_Cookie) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_Cookie) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if this.Ttl != nil && that1.Ttl != nil { - if *this.Ttl != *that1.Ttl { - return false - } - } else if this.Ttl != nil { - return false - } else if that1.Ttl != nil { - return false - } - if this.Path != that1.Path { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteAction_HashPolicy_ConnectionProperties) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_HashPolicy_ConnectionProperties) - if !ok { - that2, ok := that.(RouteAction_HashPolicy_ConnectionProperties) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.SourceIp != that1.SourceIp { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RouteAction_UpgradeConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RouteAction_UpgradeConfig) - if !ok { - that2, ok := that.(RouteAction_UpgradeConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.UpgradeType != that1.UpgradeType { - return false - } - if !this.Enabled.Equal(that1.Enabled) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RetryPolicy) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy) - if !ok { - that2, ok := that.(RetryPolicy) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.RetryOn != that1.RetryOn { - return false - } - if !this.NumRetries.Equal(that1.NumRetries) { - return false - } - if this.PerTryTimeout != nil && that1.PerTryTimeout != nil { - if *this.PerTryTimeout != *that1.PerTryTimeout { - return false - } - } else if this.PerTryTimeout != nil { - return false - } else if that1.PerTryTimeout != nil { - return false - } - if !this.RetryPriority.Equal(that1.RetryPriority) { - return false - } - if len(this.RetryHostPredicate) != len(that1.RetryHostPredicate) { - return false - } - for i := range this.RetryHostPredicate { - if !this.RetryHostPredicate[i].Equal(that1.RetryHostPredicate[i]) { - return false - } - } - if this.HostSelectionRetryMaxAttempts != that1.HostSelectionRetryMaxAttempts { - return false - } - if len(this.RetriableStatusCodes) != len(that1.RetriableStatusCodes) { - return false - } - for i := range this.RetriableStatusCodes { - if this.RetriableStatusCodes[i] != that1.RetriableStatusCodes[i] { - return false - } - } - if !this.RetryBackOff.Equal(that1.RetryBackOff) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RetryPolicy_RetryPriority) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryPriority) - if !ok { - that2, ok := that.(RetryPolicy_RetryPriority) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RetryPolicy_RetryPriority_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryPriority_Config) - if !ok { - that2, ok := that.(RetryPolicy_RetryPriority_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true -} -func (this *RetryPolicy_RetryPriority_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryPriority_TypedConfig) - if !ok { - that2, ok := that.(RetryPolicy_RetryPriority_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (this *RetryPolicy_RetryHostPredicate) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryHostPredicate) - if !ok { - that2, ok := that.(RetryPolicy_RetryHostPredicate) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.ConfigType == nil { - if this.ConfigType != nil { - return false - } - } else if this.ConfigType == nil { - return false - } else if !this.ConfigType.Equal(that1.ConfigType) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RetryPolicy_RetryHostPredicate_Config) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryHostPredicate_Config) - if !ok { - that2, ok := that.(RetryPolicy_RetryHostPredicate_Config) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Config.Equal(that1.Config) { - return false - } - return true -} -func (this *RetryPolicy_RetryHostPredicate_TypedConfig) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryHostPredicate_TypedConfig) - if !ok { - that2, ok := that.(RetryPolicy_RetryHostPredicate_TypedConfig) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.TypedConfig.Equal(that1.TypedConfig) { - return false - } - return true -} -func (this *RetryPolicy_RetryBackOff) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RetryPolicy_RetryBackOff) - if !ok { - that2, ok := that.(RetryPolicy_RetryBackOff) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.BaseInterval != nil && that1.BaseInterval != nil { - if *this.BaseInterval != *that1.BaseInterval { - return false - } - } else if this.BaseInterval != nil { - return false - } else if that1.BaseInterval != nil { - return false - } - if this.MaxInterval != nil && that1.MaxInterval != nil { - if *this.MaxInterval != *that1.MaxInterval { - return false - } - } else if this.MaxInterval != nil { - return false - } else if that1.MaxInterval != nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HedgePolicy) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HedgePolicy) - if !ok { - that2, ok := that.(HedgePolicy) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.InitialRequests.Equal(that1.InitialRequests) { - return false - } - if !this.AdditionalRequestChance.Equal(that1.AdditionalRequestChance) { - return false - } - if this.HedgeOnPerTryTimeout != that1.HedgeOnPerTryTimeout { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RedirectAction) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RedirectAction) - if !ok { - that2, ok := that.(RedirectAction) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.SchemeRewriteSpecifier == nil { - if this.SchemeRewriteSpecifier != nil { - return false - } - } else if this.SchemeRewriteSpecifier == nil { - return false - } else if !this.SchemeRewriteSpecifier.Equal(that1.SchemeRewriteSpecifier) { - return false - } - if this.HostRedirect != that1.HostRedirect { - return false - } - if this.PortRedirect != that1.PortRedirect { - return false - } - if that1.PathRewriteSpecifier == nil { - if this.PathRewriteSpecifier != nil { - return false - } - } else if this.PathRewriteSpecifier == nil { - return false - } else if !this.PathRewriteSpecifier.Equal(that1.PathRewriteSpecifier) { - return false - } - if this.ResponseCode != that1.ResponseCode { - return false - } - if this.StripQuery != that1.StripQuery { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RedirectAction_HttpsRedirect) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RedirectAction_HttpsRedirect) - if !ok { - that2, ok := that.(RedirectAction_HttpsRedirect) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.HttpsRedirect != that1.HttpsRedirect { - return false - } - return true -} -func (this *RedirectAction_SchemeRedirect) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RedirectAction_SchemeRedirect) - if !ok { - that2, ok := that.(RedirectAction_SchemeRedirect) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.SchemeRedirect != that1.SchemeRedirect { - return false - } - return true -} -func (this *RedirectAction_PathRedirect) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RedirectAction_PathRedirect) - if !ok { - that2, ok := that.(RedirectAction_PathRedirect) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.PathRedirect != that1.PathRedirect { - return false - } - return true -} -func (this *RedirectAction_PrefixRewrite) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RedirectAction_PrefixRewrite) - if !ok { - that2, ok := that.(RedirectAction_PrefixRewrite) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.PrefixRewrite != that1.PrefixRewrite { - return false - } - return true -} -func (this *DirectResponseAction) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DirectResponseAction) - if !ok { - that2, ok := that.(DirectResponseAction) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Status != that1.Status { - return false - } - if !this.Body.Equal(that1.Body) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *Decorator) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Decorator) - if !ok { - that2, ok := that.(Decorator) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Operation != that1.Operation { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *VirtualCluster) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*VirtualCluster) - if !ok { - that2, ok := that.(VirtualCluster) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Pattern != that1.Pattern { - return false - } - if this.Name != that1.Name { - return false - } - if this.Method != that1.Method { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit) - if !ok { - that2, ok := that.(RateLimit) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Stage.Equal(that1.Stage) { - return false - } - if this.DisableKey != that1.DisableKey { - return false - } - if len(this.Actions) != len(that1.Actions) { - return false - } - for i := range this.Actions { - if !this.Actions[i].Equal(that1.Actions[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action) - if !ok { - that2, ok := that.(RateLimit_Action) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if that1.ActionSpecifier == nil { - if this.ActionSpecifier != nil { - return false - } - } else if this.ActionSpecifier == nil { - return false - } else if !this.ActionSpecifier.Equal(that1.ActionSpecifier) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action_SourceCluster_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_SourceCluster_) - if !ok { - that2, ok := that.(RateLimit_Action_SourceCluster_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.SourceCluster.Equal(that1.SourceCluster) { - return false - } - return true -} -func (this *RateLimit_Action_DestinationCluster_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_DestinationCluster_) - if !ok { - that2, ok := that.(RateLimit_Action_DestinationCluster_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.DestinationCluster.Equal(that1.DestinationCluster) { - return false - } - return true -} -func (this *RateLimit_Action_RequestHeaders_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_RequestHeaders_) - if !ok { - that2, ok := that.(RateLimit_Action_RequestHeaders_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.RequestHeaders.Equal(that1.RequestHeaders) { - return false - } - return true -} -func (this *RateLimit_Action_RemoteAddress_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_RemoteAddress_) - if !ok { - that2, ok := that.(RateLimit_Action_RemoteAddress_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.RemoteAddress.Equal(that1.RemoteAddress) { - return false - } - return true -} -func (this *RateLimit_Action_GenericKey_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_GenericKey_) - if !ok { - that2, ok := that.(RateLimit_Action_GenericKey_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.GenericKey.Equal(that1.GenericKey) { - return false - } - return true -} -func (this *RateLimit_Action_HeaderValueMatch_) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_HeaderValueMatch_) - if !ok { - that2, ok := that.(RateLimit_Action_HeaderValueMatch_) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.HeaderValueMatch.Equal(that1.HeaderValueMatch) { - return false - } - return true -} -func (this *RateLimit_Action_SourceCluster) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_SourceCluster) - if !ok { - that2, ok := that.(RateLimit_Action_SourceCluster) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action_DestinationCluster) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_DestinationCluster) - if !ok { - that2, ok := that.(RateLimit_Action_DestinationCluster) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action_RequestHeaders) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_RequestHeaders) - if !ok { - that2, ok := that.(RateLimit_Action_RequestHeaders) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.HeaderName != that1.HeaderName { - return false - } - if this.DescriptorKey != that1.DescriptorKey { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action_RemoteAddress) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_RemoteAddress) - if !ok { - that2, ok := that.(RateLimit_Action_RemoteAddress) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action_GenericKey) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_GenericKey) - if !ok { - that2, ok := that.(RateLimit_Action_GenericKey) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.DescriptorValue != that1.DescriptorValue { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *RateLimit_Action_HeaderValueMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*RateLimit_Action_HeaderValueMatch) - if !ok { - that2, ok := that.(RateLimit_Action_HeaderValueMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.DescriptorValue != that1.DescriptorValue { - return false - } - if !this.ExpectMatch.Equal(that1.ExpectMatch) { - return false - } - if len(this.Headers) != len(that1.Headers) { - return false - } - for i := range this.Headers { - if !this.Headers[i].Equal(that1.Headers[i]) { - return false - } - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HeaderMatcher) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher) - if !ok { - that2, ok := that.(HeaderMatcher) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if that1.HeaderMatchSpecifier == nil { - if this.HeaderMatchSpecifier != nil { - return false - } - } else if this.HeaderMatchSpecifier == nil { - return false - } else if !this.HeaderMatchSpecifier.Equal(that1.HeaderMatchSpecifier) { - return false - } - if this.InvertMatch != that1.InvertMatch { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *HeaderMatcher_ExactMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher_ExactMatch) - if !ok { - that2, ok := that.(HeaderMatcher_ExactMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.ExactMatch != that1.ExactMatch { - return false - } - return true -} -func (this *HeaderMatcher_RegexMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher_RegexMatch) - if !ok { - that2, ok := that.(HeaderMatcher_RegexMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.RegexMatch != that1.RegexMatch { - return false - } - return true -} -func (this *HeaderMatcher_RangeMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher_RangeMatch) - if !ok { - that2, ok := that.(HeaderMatcher_RangeMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.RangeMatch.Equal(that1.RangeMatch) { - return false - } - return true -} -func (this *HeaderMatcher_PresentMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher_PresentMatch) - if !ok { - that2, ok := that.(HeaderMatcher_PresentMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.PresentMatch != that1.PresentMatch { - return false - } - return true -} -func (this *HeaderMatcher_PrefixMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher_PrefixMatch) - if !ok { - that2, ok := that.(HeaderMatcher_PrefixMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.PrefixMatch != that1.PrefixMatch { - return false - } - return true -} -func (this *HeaderMatcher_SuffixMatch) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HeaderMatcher_SuffixMatch) - if !ok { - that2, ok := that.(HeaderMatcher_SuffixMatch) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.SuffixMatch != that1.SuffixMatch { - return false - } - return true -} -func (this *QueryParameterMatcher) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*QueryParameterMatcher) - if !ok { - that2, ok := that.(QueryParameterMatcher) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Name != that1.Name { - return false - } - if this.Value != that1.Value { - return false - } - if !this.Regex.Equal(that1.Regex) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *VirtualHost) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *VirtualHost) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Domains) > 0 { - for _, s := range m.Domains { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Routes) > 0 { - for _, msg := range m.Routes { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.RequireTls != 0 { - dAtA[i] = 0x20 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RequireTls)) - } - if len(m.VirtualClusters) > 0 { - for _, msg := range m.VirtualClusters { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.RateLimits) > 0 { - for _, msg := range m.RateLimits { - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.RequestHeadersToAdd) > 0 { - for _, msg := range m.RequestHeadersToAdd { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Cors != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Cors.Size())) - n1, err := m.Cors.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, msg := range m.ResponseHeadersToAdd { - dAtA[i] = 0x52 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - dAtA[i] = 0x5a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.PerFilterConfig) > 0 { - keysForPerFilterConfig := make([]string, 0, len(m.PerFilterConfig)) - for k, _ := range m.PerFilterConfig { - keysForPerFilterConfig = append(keysForPerFilterConfig, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForPerFilterConfig) - for _, k := range keysForPerFilterConfig { - dAtA[i] = 0x62 - i++ - v := m.PerFilterConfig[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovRoute(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovRoute(uint64(len(k))) + msgSize - i = encodeVarintRoute(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n2, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - } - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - dAtA[i] = 0x6a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.IncludeRequestAttemptCount { - dAtA[i] = 0x70 - i++ - if m.IncludeRequestAttemptCount { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.TypedPerFilterConfig) > 0 { - keysForTypedPerFilterConfig := make([]string, 0, len(m.TypedPerFilterConfig)) - for k, _ := range m.TypedPerFilterConfig { - keysForTypedPerFilterConfig = append(keysForTypedPerFilterConfig, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForTypedPerFilterConfig) - for _, k := range keysForTypedPerFilterConfig { - dAtA[i] = 0x7a - i++ - v := m.TypedPerFilterConfig[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovRoute(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovRoute(uint64(len(k))) + msgSize - i = encodeVarintRoute(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n3, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - } - } - if m.RetryPolicy != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RetryPolicy.Size())) - n4, err := m.RetryPolicy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.HedgePolicy != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.HedgePolicy.Size())) - n5, err := m.HedgePolicy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Route) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Route) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Match.Size())) - n6, err := m.Match.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - if m.Action != nil { - nn7, err := m.Action.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn7 - } - if m.Metadata != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Metadata.Size())) - n8, err := m.Metadata.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.Decorator != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Decorator.Size())) - n9, err := m.Decorator.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if len(m.PerFilterConfig) > 0 { - keysForPerFilterConfig := make([]string, 0, len(m.PerFilterConfig)) - for k, _ := range m.PerFilterConfig { - keysForPerFilterConfig = append(keysForPerFilterConfig, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForPerFilterConfig) - for _, k := range keysForPerFilterConfig { - dAtA[i] = 0x42 - i++ - v := m.PerFilterConfig[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovRoute(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovRoute(uint64(len(k))) + msgSize - i = encodeVarintRoute(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n10, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - } - } - if len(m.RequestHeadersToAdd) > 0 { - for _, msg := range m.RequestHeadersToAdd { - dAtA[i] = 0x4a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, msg := range m.ResponseHeadersToAdd { - dAtA[i] = 0x52 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - dAtA[i] = 0x5a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - dAtA[i] = 0x62 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.TypedPerFilterConfig) > 0 { - keysForTypedPerFilterConfig := make([]string, 0, len(m.TypedPerFilterConfig)) - for k, _ := range m.TypedPerFilterConfig { - keysForTypedPerFilterConfig = append(keysForTypedPerFilterConfig, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForTypedPerFilterConfig) - for _, k := range keysForTypedPerFilterConfig { - dAtA[i] = 0x6a - i++ - v := m.TypedPerFilterConfig[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovRoute(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovRoute(uint64(len(k))) + msgSize - i = encodeVarintRoute(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n11, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Route_Route) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Route != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Route.Size())) - n12, err := m.Route.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - return i, nil -} -func (m *Route_Redirect) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Redirect != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Redirect.Size())) - n13, err := m.Redirect.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} -func (m *Route_DirectResponse) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.DirectResponse != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.DirectResponse.Size())) - n14, err := m.DirectResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - return i, nil -} -func (m *WeightedCluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WeightedCluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Clusters) > 0 { - for _, msg := range m.Clusters { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.RuntimeKeyPrefix) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.RuntimeKeyPrefix))) - i += copy(dAtA[i:], m.RuntimeKeyPrefix) - } - if m.TotalWeight != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.TotalWeight.Size())) - n15, err := m.TotalWeight.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *WeightedCluster_ClusterWeight) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *WeightedCluster_ClusterWeight) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Weight != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Weight.Size())) - n16, err := m.Weight.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.MetadataMatch != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.MetadataMatch.Size())) - n17, err := m.MetadataMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if len(m.RequestHeadersToAdd) > 0 { - for _, msg := range m.RequestHeadersToAdd { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, msg := range m.ResponseHeadersToAdd { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - dAtA[i] = 0x32 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.PerFilterConfig) > 0 { - keysForPerFilterConfig := make([]string, 0, len(m.PerFilterConfig)) - for k, _ := range m.PerFilterConfig { - keysForPerFilterConfig = append(keysForPerFilterConfig, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForPerFilterConfig) - for _, k := range keysForPerFilterConfig { - dAtA[i] = 0x42 - i++ - v := m.PerFilterConfig[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovRoute(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovRoute(uint64(len(k))) + msgSize - i = encodeVarintRoute(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n18, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - } - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - dAtA[i] = 0x4a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.TypedPerFilterConfig) > 0 { - keysForTypedPerFilterConfig := make([]string, 0, len(m.TypedPerFilterConfig)) - for k, _ := range m.TypedPerFilterConfig { - keysForTypedPerFilterConfig = append(keysForTypedPerFilterConfig, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForTypedPerFilterConfig) - for _, k := range keysForTypedPerFilterConfig { - dAtA[i] = 0x52 - i++ - v := m.TypedPerFilterConfig[string(k)] - msgSize := 0 - if v != nil { - msgSize = v.Size() - msgSize += 1 + sovRoute(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovRoute(uint64(len(k))) + msgSize - i = encodeVarintRoute(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(v.Size())) - n19, err := v.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteMatch) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteMatch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.PathSpecifier != nil { - nn20, err := m.PathSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn20 - } - if m.CaseSensitive != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.CaseSensitive.Size())) - n21, err := m.CaseSensitive.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - if len(m.Headers) > 0 { - for _, msg := range m.Headers { - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.QueryParameters) > 0 { - for _, msg := range m.QueryParameters { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Grpc != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Grpc.Size())) - n22, err := m.Grpc.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.RuntimeFraction != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RuntimeFraction.Size())) - n23, err := m.RuntimeFraction.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteMatch_Prefix) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Prefix))) - i += copy(dAtA[i:], m.Prefix) - return i, nil -} -func (m *RouteMatch_Path) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil -} -func (m *RouteMatch_Regex) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Regex))) - i += copy(dAtA[i:], m.Regex) - return i, nil -} -func (m *RouteMatch_GrpcRouteMatchOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteMatch_GrpcRouteMatchOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CorsPolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CorsPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.AllowOrigin) > 0 { - for _, s := range m.AllowOrigin { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.AllowMethods) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.AllowMethods))) - i += copy(dAtA[i:], m.AllowMethods) - } - if len(m.AllowHeaders) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.AllowHeaders))) - i += copy(dAtA[i:], m.AllowHeaders) - } - if len(m.ExposeHeaders) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.ExposeHeaders))) - i += copy(dAtA[i:], m.ExposeHeaders) - } - if len(m.MaxAge) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.MaxAge))) - i += copy(dAtA[i:], m.MaxAge) - } - if m.AllowCredentials != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.AllowCredentials.Size())) - n24, err := m.AllowCredentials.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - if m.EnabledSpecifier != nil { - nn25, err := m.EnabledSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn25 - } - if len(m.AllowOriginRegex) > 0 { - for _, s := range m.AllowOriginRegex { - dAtA[i] = 0x42 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.ShadowEnabled != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.ShadowEnabled.Size())) - n26, err := m.ShadowEnabled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CorsPolicy_Enabled) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Enabled != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Enabled.Size())) - n27, err := m.Enabled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - return i, nil -} -func (m *CorsPolicy_FilterEnabled) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.FilterEnabled != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.FilterEnabled.Size())) - n28, err := m.FilterEnabled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - return i, nil -} -func (m *RouteAction) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ClusterSpecifier != nil { - nn29, err := m.ClusterSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn29 - } - if m.MetadataMatch != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.MetadataMatch.Size())) - n30, err := m.MetadataMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - } - if len(m.PrefixRewrite) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.PrefixRewrite))) - i += copy(dAtA[i:], m.PrefixRewrite) - } - if m.HostRewriteSpecifier != nil { - nn31, err := m.HostRewriteSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn31 - } - if m.Timeout != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout))) - n32, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Timeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - } - if m.RetryPolicy != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RetryPolicy.Size())) - n33, err := m.RetryPolicy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - } - if m.RequestMirrorPolicy != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RequestMirrorPolicy.Size())) - n34, err := m.RequestMirrorPolicy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - if m.Priority != 0 { - dAtA[i] = 0x58 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Priority)) - } - if len(m.RateLimits) > 0 { - for _, msg := range m.RateLimits { - dAtA[i] = 0x6a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.IncludeVhRateLimits != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.IncludeVhRateLimits.Size())) - n35, err := m.IncludeVhRateLimits.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n35 - } - if len(m.HashPolicy) > 0 { - for _, msg := range m.HashPolicy { - dAtA[i] = 0x7a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Cors != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Cors.Size())) - n36, err := m.Cors.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - if m.ClusterNotFoundResponseCode != 0 { - dAtA[i] = 0xa0 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.ClusterNotFoundResponseCode)) - } - if m.MaxGrpcTimeout != nil { - dAtA[i] = 0xba - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxGrpcTimeout))) - n37, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.MaxGrpcTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 - } - if m.IdleTimeout != nil { - dAtA[i] = 0xc2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout))) - n38, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.IdleTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n38 - } - if len(m.UpgradeConfigs) > 0 { - for _, msg := range m.UpgradeConfigs { - dAtA[i] = 0xca - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.InternalRedirectAction != 0 { - dAtA[i] = 0xd0 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.InternalRedirectAction)) - } - if m.HedgePolicy != nil { - dAtA[i] = 0xda - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.HedgePolicy.Size())) - n39, err := m.HedgePolicy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n39 - } - if m.GrpcTimeoutOffset != nil { - dAtA[i] = 0xe2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.GrpcTimeoutOffset))) - n40, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.GrpcTimeoutOffset, dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_Cluster) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - return i, nil -} -func (m *RouteAction_ClusterHeader) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.ClusterHeader))) - i += copy(dAtA[i:], m.ClusterHeader) - return i, nil -} -func (m *RouteAction_WeightedClusters) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.WeightedClusters != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.WeightedClusters.Size())) - n41, err := m.WeightedClusters.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 - } - return i, nil -} -func (m *RouteAction_HostRewrite) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.HostRewrite))) - i += copy(dAtA[i:], m.HostRewrite) - return i, nil -} -func (m *RouteAction_AutoHostRewrite) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.AutoHostRewrite != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.AutoHostRewrite.Size())) - n42, err := m.AutoHostRewrite.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 - } - return i, nil -} -func (m *RouteAction_RequestMirrorPolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_RequestMirrorPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Cluster) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - } - if len(m.RuntimeKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.RuntimeKey))) - i += copy(dAtA[i:], m.RuntimeKey) - } - if m.RuntimeFraction != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RuntimeFraction.Size())) - n43, err := m.RuntimeFraction.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_HashPolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_HashPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.PolicySpecifier != nil { - nn44, err := m.PolicySpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn44 - } - if m.Terminal { - dAtA[i] = 0x20 - i++ - if m.Terminal { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_HashPolicy_Header_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Header.Size())) - n45, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n45 - } - return i, nil -} -func (m *RouteAction_HashPolicy_Cookie_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Cookie != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Cookie.Size())) - n46, err := m.Cookie.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n46 - } - return i, nil -} -func (m *RouteAction_HashPolicy_ConnectionProperties_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ConnectionProperties != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.ConnectionProperties.Size())) - n47, err := m.ConnectionProperties.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - } - return i, nil -} -func (m *RouteAction_HashPolicy_Header) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_HashPolicy_Header) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.HeaderName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.HeaderName))) - i += copy(dAtA[i:], m.HeaderName) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_HashPolicy_Cookie) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_HashPolicy_Cookie) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Ttl != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Ttl))) - n48, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.Ttl, dAtA[i:]) - if err != nil { - return 0, err - } - i += n48 - } - if len(m.Path) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_HashPolicy_ConnectionProperties) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_HashPolicy_ConnectionProperties) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.SourceIp { - dAtA[i] = 0x8 - i++ - if m.SourceIp { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RouteAction_UpgradeConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RouteAction_UpgradeConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.UpgradeType) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.UpgradeType))) - i += copy(dAtA[i:], m.UpgradeType) - } - if m.Enabled != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Enabled.Size())) - n49, err := m.Enabled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n49 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RetryPolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RetryPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.RetryOn) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.RetryOn))) - i += copy(dAtA[i:], m.RetryOn) - } - if m.NumRetries != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.NumRetries.Size())) - n50, err := m.NumRetries.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n50 - } - if m.PerTryTimeout != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.PerTryTimeout))) - n51, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.PerTryTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n51 - } - if m.RetryPriority != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RetryPriority.Size())) - n52, err := m.RetryPriority.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n52 - } - if len(m.RetryHostPredicate) > 0 { - for _, msg := range m.RetryHostPredicate { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.HostSelectionRetryMaxAttempts != 0 { - dAtA[i] = 0x30 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.HostSelectionRetryMaxAttempts)) - } - if len(m.RetriableStatusCodes) > 0 { - dAtA54 := make([]byte, len(m.RetriableStatusCodes)*10) - var j53 int - for _, num := range m.RetriableStatusCodes { - for num >= 1<<7 { - dAtA54[j53] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j53++ - } - dAtA54[j53] = uint8(num) - j53++ - } - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(j53)) - i += copy(dAtA[i:], dAtA54[:j53]) - } - if m.RetryBackOff != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RetryBackOff.Size())) - n55, err := m.RetryBackOff.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n55 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RetryPolicy_RetryPriority) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RetryPolicy_RetryPriority) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn56, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn56 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RetryPolicy_RetryPriority_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Config.Size())) - n57, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n57 - } - return i, nil -} -func (m *RetryPolicy_RetryPriority_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.TypedConfig.Size())) - n58, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n58 - } - return i, nil -} -func (m *RetryPolicy_RetryHostPredicate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RetryPolicy_RetryHostPredicate) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn59, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn59 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RetryPolicy_RetryHostPredicate_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Config.Size())) - n60, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n60 - } - return i, nil -} -func (m *RetryPolicy_RetryHostPredicate_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.TypedConfig.Size())) - n61, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n61 - } - return i, nil -} -func (m *RetryPolicy_RetryBackOff) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RetryPolicy_RetryBackOff) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.BaseInterval != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.BaseInterval))) - n62, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.BaseInterval, dAtA[i:]) - if err != nil { - return 0, err - } - i += n62 - } - if m.MaxInterval != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxInterval))) - n63, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.MaxInterval, dAtA[i:]) - if err != nil { - return 0, err - } - i += n63 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HedgePolicy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HedgePolicy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.InitialRequests != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.InitialRequests.Size())) - n64, err := m.InitialRequests.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n64 - } - if m.AdditionalRequestChance != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.AdditionalRequestChance.Size())) - n65, err := m.AdditionalRequestChance.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n65 - } - if m.HedgeOnPerTryTimeout { - dAtA[i] = 0x18 - i++ - if m.HedgeOnPerTryTimeout { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RedirectAction) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RedirectAction) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.HostRedirect) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.HostRedirect))) - i += copy(dAtA[i:], m.HostRedirect) - } - if m.PathRewriteSpecifier != nil { - nn66, err := m.PathRewriteSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn66 - } - if m.ResponseCode != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.ResponseCode)) - } - if m.SchemeRewriteSpecifier != nil { - nn67, err := m.SchemeRewriteSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn67 - } - if m.StripQuery { - dAtA[i] = 0x30 - i++ - if m.StripQuery { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.PortRedirect != 0 { - dAtA[i] = 0x40 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.PortRedirect)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RedirectAction_PathRedirect) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.PathRedirect))) - i += copy(dAtA[i:], m.PathRedirect) - return i, nil -} -func (m *RedirectAction_HttpsRedirect) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x20 - i++ - if m.HttpsRedirect { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil -} -func (m *RedirectAction_PrefixRewrite) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.PrefixRewrite))) - i += copy(dAtA[i:], m.PrefixRewrite) - return i, nil -} -func (m *RedirectAction_SchemeRedirect) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x3a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.SchemeRedirect))) - i += copy(dAtA[i:], m.SchemeRedirect) - return i, nil -} -func (m *DirectResponseAction) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DirectResponseAction) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Status != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Status)) - } - if m.Body != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Body.Size())) - n68, err := m.Body.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n68 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Decorator) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Decorator) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Operation) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Operation))) - i += copy(dAtA[i:], m.Operation) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *VirtualCluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *VirtualCluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Pattern) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Pattern))) - i += copy(dAtA[i:], m.Pattern) - } - if len(m.Name) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Method != 0 { - dAtA[i] = 0x18 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Method)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Stage != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Stage.Size())) - n69, err := m.Stage.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n69 - } - if len(m.DisableKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.DisableKey))) - i += copy(dAtA[i:], m.DisableKey) - } - if len(m.Actions) > 0 { - for _, msg := range m.Actions { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.ActionSpecifier != nil { - nn70, err := m.ActionSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn70 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action_SourceCluster_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.SourceCluster != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.SourceCluster.Size())) - n71, err := m.SourceCluster.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n71 - } - return i, nil -} -func (m *RateLimit_Action_DestinationCluster_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.DestinationCluster != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.DestinationCluster.Size())) - n72, err := m.DestinationCluster.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n72 - } - return i, nil -} -func (m *RateLimit_Action_RequestHeaders_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RequestHeaders != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RequestHeaders.Size())) - n73, err := m.RequestHeaders.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n73 - } - return i, nil -} -func (m *RateLimit_Action_RemoteAddress_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RemoteAddress != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RemoteAddress.Size())) - n74, err := m.RemoteAddress.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n74 - } - return i, nil -} -func (m *RateLimit_Action_GenericKey_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GenericKey != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.GenericKey.Size())) - n75, err := m.GenericKey.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n75 - } - return i, nil -} -func (m *RateLimit_Action_HeaderValueMatch_) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.HeaderValueMatch != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.HeaderValueMatch.Size())) - n76, err := m.HeaderValueMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n76 - } - return i, nil -} -func (m *RateLimit_Action_SourceCluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action_SourceCluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action_DestinationCluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action_DestinationCluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action_RequestHeaders) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action_RequestHeaders) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.HeaderName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.HeaderName))) - i += copy(dAtA[i:], m.HeaderName) - } - if len(m.DescriptorKey) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.DescriptorKey))) - i += copy(dAtA[i:], m.DescriptorKey) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action_RemoteAddress) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action_RemoteAddress) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action_GenericKey) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action_GenericKey) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.DescriptorValue) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.DescriptorValue))) - i += copy(dAtA[i:], m.DescriptorValue) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RateLimit_Action_HeaderValueMatch) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RateLimit_Action_HeaderValueMatch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.DescriptorValue) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.DescriptorValue))) - i += copy(dAtA[i:], m.DescriptorValue) - } - if m.ExpectMatch != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.ExpectMatch.Size())) - n77, err := m.ExpectMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n77 - } - if len(m.Headers) > 0 { - for _, msg := range m.Headers { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HeaderMatcher) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HeaderMatcher) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.HeaderMatchSpecifier != nil { - nn78, err := m.HeaderMatchSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn78 - } - if m.InvertMatch { - dAtA[i] = 0x40 - i++ - if m.InvertMatch { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HeaderMatcher_ExactMatch) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.ExactMatch))) - i += copy(dAtA[i:], m.ExactMatch) - return i, nil -} -func (m *HeaderMatcher_RegexMatch) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x2a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.RegexMatch))) - i += copy(dAtA[i:], m.RegexMatch) - return i, nil -} -func (m *HeaderMatcher_RangeMatch) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RangeMatch != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.RangeMatch.Size())) - n79, err := m.RangeMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n79 - } - return i, nil -} -func (m *HeaderMatcher_PresentMatch) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x38 - i++ - if m.PresentMatch { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil -} -func (m *HeaderMatcher_PrefixMatch) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x4a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.PrefixMatch))) - i += copy(dAtA[i:], m.PrefixMatch) - return i, nil -} -func (m *HeaderMatcher_SuffixMatch) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x52 - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.SuffixMatch))) - i += copy(dAtA[i:], m.SuffixMatch) - return i, nil -} -func (m *QueryParameterMatcher) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QueryParameterMatcher) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if len(m.Value) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintRoute(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - } - if m.Regex != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRoute(dAtA, i, uint64(m.Regex.Size())) - n80, err := m.Regex.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n80 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintRoute(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *VirtualHost) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.Domains) > 0 { - for _, s := range m.Domains { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.RequireTls != 0 { - n += 1 + sovRoute(uint64(m.RequireTls)) - } - if len(m.VirtualClusters) > 0 { - for _, e := range m.VirtualClusters { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.RateLimits) > 0 { - for _, e := range m.RateLimits { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.RequestHeadersToAdd) > 0 { - for _, e := range m.RequestHeadersToAdd { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.Cors != nil { - l = m.Cors.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, e := range m.ResponseHeadersToAdd { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.PerFilterConfig) > 0 { - for k, v := range m.PerFilterConfig { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovRoute(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovRoute(uint64(len(k))) + l - n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) - } - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.IncludeRequestAttemptCount { - n += 2 - } - if len(m.TypedPerFilterConfig) > 0 { - for k, v := range m.TypedPerFilterConfig { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovRoute(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovRoute(uint64(len(k))) + l - n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) - } - } - if m.RetryPolicy != nil { - l = m.RetryPolicy.Size() - n += 2 + l + sovRoute(uint64(l)) - } - if m.HedgePolicy != nil { - l = m.HedgePolicy.Size() - n += 2 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Route) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Match.Size() - n += 1 + l + sovRoute(uint64(l)) - if m.Action != nil { - n += m.Action.Size() - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.Decorator != nil { - l = m.Decorator.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.PerFilterConfig) > 0 { - for k, v := range m.PerFilterConfig { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovRoute(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovRoute(uint64(len(k))) + l - n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) - } - } - if len(m.RequestHeadersToAdd) > 0 { - for _, e := range m.RequestHeadersToAdd { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, e := range m.ResponseHeadersToAdd { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.TypedPerFilterConfig) > 0 { - for k, v := range m.TypedPerFilterConfig { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovRoute(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovRoute(uint64(len(k))) + l - n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Route_Route) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Route != nil { - l = m.Route.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *Route_Redirect) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Redirect != nil { - l = m.Redirect.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *Route_DirectResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DirectResponse != nil { - l = m.DirectResponse.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *WeightedCluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Clusters) > 0 { - for _, e := range m.Clusters { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - l = len(m.RuntimeKeyPrefix) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.TotalWeight != nil { - l = m.TotalWeight.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *WeightedCluster_ClusterWeight) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.Weight != nil { - l = m.Weight.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.MetadataMatch != nil { - l = m.MetadataMatch.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.RequestHeadersToAdd) > 0 { - for _, e := range m.RequestHeadersToAdd { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.ResponseHeadersToAdd) > 0 { - for _, e := range m.ResponseHeadersToAdd { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.ResponseHeadersToRemove) > 0 { - for _, s := range m.ResponseHeadersToRemove { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.PerFilterConfig) > 0 { - for k, v := range m.PerFilterConfig { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovRoute(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovRoute(uint64(len(k))) + l - n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) - } - } - if len(m.RequestHeadersToRemove) > 0 { - for _, s := range m.RequestHeadersToRemove { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.TypedPerFilterConfig) > 0 { - for k, v := range m.TypedPerFilterConfig { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovRoute(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovRoute(uint64(len(k))) + l - n += mapEntrySize + 1 + sovRoute(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PathSpecifier != nil { - n += m.PathSpecifier.Size() - } - if m.CaseSensitive != nil { - l = m.CaseSensitive.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.Headers) > 0 { - for _, e := range m.Headers { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if len(m.QueryParameters) > 0 { - for _, e := range m.QueryParameters { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.Grpc != nil { - l = m.Grpc.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.RuntimeFraction != nil { - l = m.RuntimeFraction.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteMatch_Prefix) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Prefix) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RouteMatch_Path) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Path) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RouteMatch_Regex) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Regex) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RouteMatch_GrpcRouteMatchOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CorsPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.AllowOrigin) > 0 { - for _, s := range m.AllowOrigin { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - l = len(m.AllowMethods) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.AllowHeaders) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.ExposeHeaders) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.MaxAge) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.AllowCredentials != nil { - l = m.AllowCredentials.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.EnabledSpecifier != nil { - n += m.EnabledSpecifier.Size() - } - if len(m.AllowOriginRegex) > 0 { - for _, s := range m.AllowOriginRegex { - l = len(s) - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.ShadowEnabled != nil { - l = m.ShadowEnabled.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CorsPolicy_Enabled) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Enabled != nil { - l = m.Enabled.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *CorsPolicy_FilterEnabled) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.FilterEnabled != nil { - l = m.FilterEnabled.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RouteAction) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ClusterSpecifier != nil { - n += m.ClusterSpecifier.Size() - } - if m.MetadataMatch != nil { - l = m.MetadataMatch.Size() - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.PrefixRewrite) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.HostRewriteSpecifier != nil { - n += m.HostRewriteSpecifier.Size() - } - if m.Timeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Timeout) - n += 1 + l + sovRoute(uint64(l)) - } - if m.RetryPolicy != nil { - l = m.RetryPolicy.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.RequestMirrorPolicy != nil { - l = m.RequestMirrorPolicy.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.Priority != 0 { - n += 1 + sovRoute(uint64(m.Priority)) - } - if len(m.RateLimits) > 0 { - for _, e := range m.RateLimits { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.IncludeVhRateLimits != nil { - l = m.IncludeVhRateLimits.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.HashPolicy) > 0 { - for _, e := range m.HashPolicy { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.Cors != nil { - l = m.Cors.Size() - n += 2 + l + sovRoute(uint64(l)) - } - if m.ClusterNotFoundResponseCode != 0 { - n += 2 + sovRoute(uint64(m.ClusterNotFoundResponseCode)) - } - if m.MaxGrpcTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxGrpcTimeout) - n += 2 + l + sovRoute(uint64(l)) - } - if m.IdleTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout) - n += 2 + l + sovRoute(uint64(l)) - } - if len(m.UpgradeConfigs) > 0 { - for _, e := range m.UpgradeConfigs { - l = e.Size() - n += 2 + l + sovRoute(uint64(l)) - } - } - if m.InternalRedirectAction != 0 { - n += 2 + sovRoute(uint64(m.InternalRedirectAction)) - } - if m.HedgePolicy != nil { - l = m.HedgePolicy.Size() - n += 2 + l + sovRoute(uint64(l)) - } - if m.GrpcTimeoutOffset != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.GrpcTimeoutOffset) - n += 2 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteAction_Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cluster) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RouteAction_ClusterHeader) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterHeader) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RouteAction_WeightedClusters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.WeightedClusters != nil { - l = m.WeightedClusters.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RouteAction_HostRewrite) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.HostRewrite) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RouteAction_AutoHostRewrite) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.AutoHostRewrite != nil { - l = m.AutoHostRewrite.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RouteAction_RequestMirrorPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cluster) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.RuntimeKey) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.RuntimeFraction != nil { - l = m.RuntimeFraction.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteAction_HashPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PolicySpecifier != nil { - n += m.PolicySpecifier.Size() - } - if m.Terminal { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteAction_HashPolicy_Header_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RouteAction_HashPolicy_Cookie_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Cookie != nil { - l = m.Cookie.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RouteAction_HashPolicy_ConnectionProperties_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ConnectionProperties != nil { - l = m.ConnectionProperties.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RouteAction_HashPolicy_Header) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.HeaderName) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteAction_HashPolicy_Cookie) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.Ttl != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.Ttl) - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.Path) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteAction_HashPolicy_ConnectionProperties) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SourceIp { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RouteAction_UpgradeConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.UpgradeType) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.Enabled != nil { - l = m.Enabled.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RetryPolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.RetryOn) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.NumRetries != nil { - l = m.NumRetries.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.PerTryTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.PerTryTimeout) - n += 1 + l + sovRoute(uint64(l)) - } - if m.RetryPriority != nil { - l = m.RetryPriority.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.RetryHostPredicate) > 0 { - for _, e := range m.RetryHostPredicate { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.HostSelectionRetryMaxAttempts != 0 { - n += 1 + sovRoute(uint64(m.HostSelectionRetryMaxAttempts)) - } - if len(m.RetriableStatusCodes) > 0 { - l = 0 - for _, e := range m.RetriableStatusCodes { - l += sovRoute(uint64(e)) - } - n += 1 + sovRoute(uint64(l)) + l - } - if m.RetryBackOff != nil { - l = m.RetryBackOff.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RetryPolicy_RetryPriority) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RetryPolicy_RetryPriority_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RetryPolicy_RetryPriority_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RetryPolicy_RetryHostPredicate) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RetryPolicy_RetryHostPredicate_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RetryPolicy_RetryHostPredicate_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RetryPolicy_RetryBackOff) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.BaseInterval != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.BaseInterval) - n += 1 + l + sovRoute(uint64(l)) - } - if m.MaxInterval != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.MaxInterval) - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HedgePolicy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.InitialRequests != nil { - l = m.InitialRequests.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.AdditionalRequestChance != nil { - l = m.AdditionalRequestChance.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.HedgeOnPerTryTimeout { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RedirectAction) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.HostRedirect) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.PathRewriteSpecifier != nil { - n += m.PathRewriteSpecifier.Size() - } - if m.ResponseCode != 0 { - n += 1 + sovRoute(uint64(m.ResponseCode)) - } - if m.SchemeRewriteSpecifier != nil { - n += m.SchemeRewriteSpecifier.Size() - } - if m.StripQuery { - n += 2 - } - if m.PortRedirect != 0 { - n += 1 + sovRoute(uint64(m.PortRedirect)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RedirectAction_PathRedirect) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PathRedirect) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RedirectAction_HttpsRedirect) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - return n -} -func (m *RedirectAction_PrefixRewrite) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PrefixRewrite) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *RedirectAction_SchemeRedirect) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SchemeRedirect) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *DirectResponseAction) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Status != 0 { - n += 1 + sovRoute(uint64(m.Status)) - } - if m.Body != nil { - l = m.Body.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Decorator) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Operation) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *VirtualCluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Pattern) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.Method != 0 { - n += 1 + sovRoute(uint64(m.Method)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Stage != nil { - l = m.Stage.Size() - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.DisableKey) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.Actions) > 0 { - for _, e := range m.Actions { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ActionSpecifier != nil { - n += m.ActionSpecifier.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action_SourceCluster_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.SourceCluster != nil { - l = m.SourceCluster.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RateLimit_Action_DestinationCluster_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DestinationCluster != nil { - l = m.DestinationCluster.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RateLimit_Action_RequestHeaders_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RequestHeaders != nil { - l = m.RequestHeaders.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RateLimit_Action_RemoteAddress_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RemoteAddress != nil { - l = m.RemoteAddress.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RateLimit_Action_GenericKey_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GenericKey != nil { - l = m.GenericKey.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RateLimit_Action_HeaderValueMatch_) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HeaderValueMatch != nil { - l = m.HeaderValueMatch.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *RateLimit_Action_SourceCluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action_DestinationCluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action_RequestHeaders) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.HeaderName) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.DescriptorKey) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action_RemoteAddress) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action_GenericKey) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DescriptorValue) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *RateLimit_Action_HeaderValueMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.DescriptorValue) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.ExpectMatch != nil { - l = m.ExpectMatch.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if len(m.Headers) > 0 { - for _, e := range m.Headers { - l = e.Size() - n += 1 + l + sovRoute(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HeaderMatcher) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.HeaderMatchSpecifier != nil { - n += m.HeaderMatchSpecifier.Size() - } - if m.InvertMatch { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HeaderMatcher_ExactMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ExactMatch) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *HeaderMatcher_RegexMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.RegexMatch) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *HeaderMatcher_RangeMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RangeMatch != nil { - l = m.RangeMatch.Size() - n += 1 + l + sovRoute(uint64(l)) - } - return n -} -func (m *HeaderMatcher_PresentMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - return n -} -func (m *HeaderMatcher_PrefixMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PrefixMatch) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *HeaderMatcher_SuffixMatch) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SuffixMatch) - n += 1 + l + sovRoute(uint64(l)) - return n -} -func (m *QueryParameterMatcher) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - l = len(m.Value) - if l > 0 { - n += 1 + l + sovRoute(uint64(l)) - } - if m.Regex != nil { - l = m.Regex.Size() - n += 1 + l + sovRoute(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovRoute(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozRoute(x uint64) (n int) { - return sovRoute(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *VirtualHost) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: VirtualHost: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VirtualHost: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Domains", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Domains = append(m.Domains, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Routes = append(m.Routes, Route{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RequireTls", wireType) - } - m.RequireTls = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RequireTls |= VirtualHost_TlsRequirementType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VirtualClusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VirtualClusters = append(m.VirtualClusters, &VirtualCluster{}) - if err := m.VirtualClusters[len(m.VirtualClusters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RateLimits", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RateLimits = append(m.RateLimits, &RateLimit{}) - if err := m.RateLimits[len(m.RateLimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToAdd = append(m.RequestHeadersToAdd, &core.HeaderValueOption{}) - if err := m.RequestHeadersToAdd[len(m.RequestHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cors", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Cors == nil { - m.Cors = &CorsPolicy{} - } - if err := m.Cors.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToAdd = append(m.ResponseHeadersToAdd, &core.HeaderValueOption{}) - if err := m.ResponseHeadersToAdd[len(m.ResponseHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToRemove = append(m.ResponseHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerFilterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PerFilterConfig == nil { - m.PerFilterConfig = make(map[string]*types.Struct) - } - var mapkey string - var mapvalue *types.Struct - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthRoute - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthRoute - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthRoute - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthRoute - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Struct{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PerFilterConfig[mapkey] = mapvalue - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToRemove = append(m.RequestHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeRequestAttemptCount", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.IncludeRequestAttemptCount = bool(v != 0) - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedPerFilterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TypedPerFilterConfig == nil { - m.TypedPerFilterConfig = make(map[string]*types.Any) - } - var mapkey string - var mapvalue *types.Any - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthRoute - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthRoute - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthRoute - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthRoute - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Any{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.TypedPerFilterConfig[mapkey] = mapvalue - iNdEx = postIndex - case 16: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryPolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RetryPolicy == nil { - m.RetryPolicy = &RetryPolicy{} - } - if err := m.RetryPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 17: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HedgePolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HedgePolicy == nil { - m.HedgePolicy = &HedgePolicy{} - } - if err := m.HedgePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Route) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Route: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Route: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Match", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Match.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Route", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RouteAction{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Action = &Route_Route{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Redirect", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RedirectAction{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Action = &Route_Redirect{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &core.Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Decorator", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Decorator == nil { - m.Decorator = &Decorator{} - } - if err := m.Decorator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DirectResponse", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &DirectResponseAction{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Action = &Route_DirectResponse{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerFilterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PerFilterConfig == nil { - m.PerFilterConfig = make(map[string]*types.Struct) - } - var mapkey string - var mapvalue *types.Struct - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthRoute - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthRoute - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthRoute - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthRoute - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Struct{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PerFilterConfig[mapkey] = mapvalue - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToAdd = append(m.RequestHeadersToAdd, &core.HeaderValueOption{}) - if err := m.RequestHeadersToAdd[len(m.RequestHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToAdd = append(m.ResponseHeadersToAdd, &core.HeaderValueOption{}) - if err := m.ResponseHeadersToAdd[len(m.ResponseHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToRemove = append(m.ResponseHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToRemove = append(m.RequestHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedPerFilterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TypedPerFilterConfig == nil { - m.TypedPerFilterConfig = make(map[string]*types.Any) - } - var mapkey string - var mapvalue *types.Any - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthRoute - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthRoute - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthRoute - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthRoute - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Any{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.TypedPerFilterConfig[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WeightedCluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WeightedCluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WeightedCluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Clusters = append(m.Clusters, &WeightedCluster_ClusterWeight{}) - if err := m.Clusters[len(m.Clusters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKeyPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeKeyPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalWeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TotalWeight == nil { - m.TotalWeight = &types.UInt32Value{} - } - if err := m.TotalWeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *WeightedCluster_ClusterWeight) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ClusterWeight: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterWeight: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Weight == nil { - m.Weight = &types.UInt32Value{} - } - if err := m.Weight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetadataMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MetadataMatch == nil { - m.MetadataMatch = &core.Metadata{} - } - if err := m.MetadataMatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToAdd = append(m.RequestHeadersToAdd, &core.HeaderValueOption{}) - if err := m.RequestHeadersToAdd[len(m.RequestHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToAdd", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToAdd = append(m.ResponseHeadersToAdd, &core.HeaderValueOption{}) - if err := m.ResponseHeadersToAdd[len(m.ResponseHeadersToAdd)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ResponseHeadersToRemove = append(m.ResponseHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerFilterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PerFilterConfig == nil { - m.PerFilterConfig = make(map[string]*types.Struct) - } - var mapkey string - var mapvalue *types.Struct - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthRoute - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthRoute - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthRoute - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthRoute - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Struct{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PerFilterConfig[mapkey] = mapvalue - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersToRemove", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersToRemove = append(m.RequestHeadersToRemove, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedPerFilterConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.TypedPerFilterConfig == nil { - m.TypedPerFilterConfig = make(map[string]*types.Any) - } - var mapkey string - var mapvalue *types.Any - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthRoute - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthRoute - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthRoute - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthRoute - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &types.Any{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.TypedPerFilterConfig[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteMatch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RouteMatch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RouteMatch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Prefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathSpecifier = &RouteMatch_Prefix{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathSpecifier = &RouteMatch_Path{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Regex", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathSpecifier = &RouteMatch_Regex{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CaseSensitive", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CaseSensitive == nil { - m.CaseSensitive = &types.BoolValue{} - } - if err := m.CaseSensitive.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Headers = append(m.Headers, &HeaderMatcher{}) - if err := m.Headers[len(m.Headers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field QueryParameters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.QueryParameters = append(m.QueryParameters, &QueryParameterMatcher{}) - if err := m.QueryParameters[len(m.QueryParameters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Grpc", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Grpc == nil { - m.Grpc = &RouteMatch_GrpcRouteMatchOptions{} - } - if err := m.Grpc.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeFraction", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RuntimeFraction == nil { - m.RuntimeFraction = &core.RuntimeFractionalPercent{} - } - if err := m.RuntimeFraction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteMatch_GrpcRouteMatchOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GrpcRouteMatchOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GrpcRouteMatchOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CorsPolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CorsPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CorsPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowOrigin", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllowOrigin = append(m.AllowOrigin, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowMethods", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllowMethods = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowHeaders", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllowHeaders = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExposeHeaders", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ExposeHeaders = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxAge", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.MaxAge = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowCredentials", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AllowCredentials == nil { - m.AllowCredentials = &types.BoolValue{} - } - if err := m.AllowCredentials.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.BoolValue{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.EnabledSpecifier = &CorsPolicy_Enabled{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowOriginRegex", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllowOriginRegex = append(m.AllowOriginRegex, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FilterEnabled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &core.RuntimeFractionalPercent{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.EnabledSpecifier = &CorsPolicy_FilterEnabled{v} - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShadowEnabled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ShadowEnabled == nil { - m.ShadowEnabled = &core.RuntimeFractionalPercent{} - } - if err := m.ShadowEnabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RouteAction: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RouteAction: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterSpecifier = &RouteAction_Cluster{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterHeader", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterSpecifier = &RouteAction_ClusterHeader{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WeightedClusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &WeightedCluster{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ClusterSpecifier = &RouteAction_WeightedClusters{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetadataMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MetadataMatch == nil { - m.MetadataMatch = &core.Metadata{} - } - if err := m.MetadataMatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrefixRewrite", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrefixRewrite = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HostRewrite", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HostRewriteSpecifier = &RouteAction_HostRewrite{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AutoHostRewrite", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.BoolValue{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HostRewriteSpecifier = &RouteAction_AutoHostRewrite{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Timeout == nil { - m.Timeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Timeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryPolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RetryPolicy == nil { - m.RetryPolicy = &RetryPolicy{} - } - if err := m.RetryPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestMirrorPolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestMirrorPolicy == nil { - m.RequestMirrorPolicy = &RouteAction_RequestMirrorPolicy{} - } - if err := m.RequestMirrorPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) - } - m.Priority = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Priority |= core.RoutingPriority(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RateLimits", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RateLimits = append(m.RateLimits, &RateLimit{}) - if err := m.RateLimits[len(m.RateLimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeVhRateLimits", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IncludeVhRateLimits == nil { - m.IncludeVhRateLimits = &types.BoolValue{} - } - if err := m.IncludeVhRateLimits.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HashPolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HashPolicy = append(m.HashPolicy, &RouteAction_HashPolicy{}) - if err := m.HashPolicy[len(m.HashPolicy)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 17: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cors", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Cors == nil { - m.Cors = &CorsPolicy{} - } - if err := m.Cors.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 20: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterNotFoundResponseCode", wireType) - } - m.ClusterNotFoundResponseCode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClusterNotFoundResponseCode |= RouteAction_ClusterNotFoundResponseCode(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 23: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxGrpcTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxGrpcTimeout == nil { - m.MaxGrpcTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.MaxGrpcTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 24: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IdleTimeout == nil { - m.IdleTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.IdleTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 25: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeConfigs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UpgradeConfigs = append(m.UpgradeConfigs, &RouteAction_UpgradeConfig{}) - if err := m.UpgradeConfigs[len(m.UpgradeConfigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 26: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InternalRedirectAction", wireType) - } - m.InternalRedirectAction = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.InternalRedirectAction |= RouteAction_InternalRedirectAction(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 27: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HedgePolicy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HedgePolicy == nil { - m.HedgePolicy = &HedgePolicy{} - } - if err := m.HedgePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 28: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GrpcTimeoutOffset", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.GrpcTimeoutOffset == nil { - m.GrpcTimeoutOffset = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.GrpcTimeoutOffset, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_RequestMirrorPolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RequestMirrorPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RequestMirrorPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cluster = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeFraction", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RuntimeFraction == nil { - m.RuntimeFraction = &core.RuntimeFractionalPercent{} - } - if err := m.RuntimeFraction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_HashPolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HashPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HashPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RouteAction_HashPolicy_Header{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.PolicySpecifier = &RouteAction_HashPolicy_Header_{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cookie", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RouteAction_HashPolicy_Cookie{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.PolicySpecifier = &RouteAction_HashPolicy_Cookie_{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionProperties", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RouteAction_HashPolicy_ConnectionProperties{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.PolicySpecifier = &RouteAction_HashPolicy_ConnectionProperties_{v} - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Terminal", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Terminal = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_HashPolicy_Header) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Header: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Header: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HeaderName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HeaderName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_HashPolicy_Cookie) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Cookie: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Cookie: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ttl", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Ttl == nil { - m.Ttl = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.Ttl, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Path = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_HashPolicy_ConnectionProperties) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ConnectionProperties: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConnectionProperties: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceIp", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.SourceIp = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RouteAction_UpgradeConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpgradeConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpgradeConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeType", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UpgradeType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Enabled == nil { - m.Enabled = &types.BoolValue{} - } - if err := m.Enabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RetryPolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RetryPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RetryPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryOn", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RetryOn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NumRetries", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NumRetries == nil { - m.NumRetries = &types.UInt32Value{} - } - if err := m.NumRetries.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PerTryTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PerTryTimeout == nil { - m.PerTryTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.PerTryTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryPriority", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RetryPriority == nil { - m.RetryPriority = &RetryPolicy_RetryPriority{} - } - if err := m.RetryPriority.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryHostPredicate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RetryHostPredicate = append(m.RetryHostPredicate, &RetryPolicy_RetryHostPredicate{}) - if err := m.RetryHostPredicate[len(m.RetryHostPredicate)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostSelectionRetryMaxAttempts", wireType) - } - m.HostSelectionRetryMaxAttempts = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HostSelectionRetryMaxAttempts |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 7: - if wireType == 0 { - var v uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RetriableStatusCodes = append(m.RetriableStatusCodes, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA[iNdEx:postIndex] { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.RetriableStatusCodes) == 0 { - m.RetriableStatusCodes = make([]uint32, 0, elementCount) - } - for iNdEx < postIndex { - var v uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RetriableStatusCodes = append(m.RetriableStatusCodes, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field RetriableStatusCodes", wireType) - } - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RetryBackOff", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RetryBackOff == nil { - m.RetryBackOff = &RetryPolicy_RetryBackOff{} - } - if err := m.RetryBackOff.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RetryPolicy_RetryPriority) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RetryPriority: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RetryPriority: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RetryPolicy_RetryPriority_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RetryPolicy_RetryPriority_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RetryPolicy_RetryHostPredicate) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RetryHostPredicate: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RetryHostPredicate: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RetryPolicy_RetryHostPredicate_Config{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &RetryPolicy_RetryHostPredicate_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RetryPolicy_RetryBackOff) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RetryBackOff: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RetryBackOff: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BaseInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.BaseInterval == nil { - m.BaseInterval = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.BaseInterval, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxInterval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxInterval == nil { - m.MaxInterval = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.MaxInterval, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HedgePolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HedgePolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HedgePolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialRequests", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InitialRequests == nil { - m.InitialRequests = &types.UInt32Value{} - } - if err := m.InitialRequests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AdditionalRequestChance", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AdditionalRequestChance == nil { - m.AdditionalRequestChance = &_type.FractionalPercent{} - } - if err := m.AdditionalRequestChance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HedgeOnPerTryTimeout", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.HedgeOnPerTryTimeout = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RedirectAction) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RedirectAction: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RedirectAction: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HostRedirect", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HostRedirect = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PathRedirect", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathRewriteSpecifier = &RedirectAction_PathRedirect{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseCode", wireType) - } - m.ResponseCode = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ResponseCode |= RedirectAction_RedirectResponseCode(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpsRedirect", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.SchemeRewriteSpecifier = &RedirectAction_HttpsRedirect{b} - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrefixRewrite", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathRewriteSpecifier = &RedirectAction_PrefixRewrite{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StripQuery", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.StripQuery = bool(v != 0) - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SchemeRedirect", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SchemeRewriteSpecifier = &RedirectAction_SchemeRedirect{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PortRedirect", wireType) - } - m.PortRedirect = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PortRedirect |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DirectResponseAction) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DirectResponseAction: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DirectResponseAction: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - m.Status = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Status |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Body", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Body == nil { - m.Body = &core.DataSource{} - } - if err := m.Body.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Decorator) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Decorator: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Decorator: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Operation", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Operation = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *VirtualCluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: VirtualCluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VirtualCluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pattern", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pattern = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) - } - m.Method = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Method |= core.RequestMethod(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RateLimit: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RateLimit: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Stage", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Stage == nil { - m.Stage = &types.UInt32Value{} - } - if err := m.Stage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DisableKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DisableKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Actions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Actions = append(m.Actions, &RateLimit_Action{}) - if err := m.Actions[len(m.Actions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Action: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Action: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceCluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RateLimit_Action_SourceCluster{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ActionSpecifier = &RateLimit_Action_SourceCluster_{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DestinationCluster", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RateLimit_Action_DestinationCluster{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ActionSpecifier = &RateLimit_Action_DestinationCluster_{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeaders", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RateLimit_Action_RequestHeaders{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ActionSpecifier = &RateLimit_Action_RequestHeaders_{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RemoteAddress", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RateLimit_Action_RemoteAddress{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ActionSpecifier = &RateLimit_Action_RemoteAddress_{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenericKey", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RateLimit_Action_GenericKey{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ActionSpecifier = &RateLimit_Action_GenericKey_{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HeaderValueMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RateLimit_Action_HeaderValueMatch{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ActionSpecifier = &RateLimit_Action_HeaderValueMatch_{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action_SourceCluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SourceCluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SourceCluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action_DestinationCluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DestinationCluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DestinationCluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action_RequestHeaders) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RequestHeaders: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RequestHeaders: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HeaderName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HeaderName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DescriptorKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DescriptorKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action_RemoteAddress) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RemoteAddress: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RemoteAddress: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action_GenericKey) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GenericKey: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenericKey: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DescriptorValue", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DescriptorValue = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *RateLimit_Action_HeaderValueMatch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HeaderValueMatch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeaderValueMatch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DescriptorValue", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DescriptorValue = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpectMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ExpectMatch == nil { - m.ExpectMatch = &types.BoolValue{} - } - if err := m.ExpectMatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Headers = append(m.Headers, &HeaderMatcher{}) - if err := m.Headers[len(m.Headers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HeaderMatcher) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HeaderMatcher: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeaderMatcher: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExactMatch", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HeaderMatchSpecifier = &HeaderMatcher_ExactMatch{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RegexMatch", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HeaderMatchSpecifier = &HeaderMatcher_RegexMatch{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RangeMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &_type.Int64Range{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HeaderMatchSpecifier = &HeaderMatcher_RangeMatch{v} - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PresentMatch", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.HeaderMatchSpecifier = &HeaderMatcher_PresentMatch{b} - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InvertMatch", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.InvertMatch = bool(v != 0) - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrefixMatch", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HeaderMatchSpecifier = &HeaderMatcher_PrefixMatch{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SuffixMatch", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HeaderMatchSpecifier = &HeaderMatcher_SuffixMatch{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryParameterMatcher) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParameterMatcher: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParameterMatcher: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Value = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Regex", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Regex == nil { - m.Regex = &types.BoolValue{} - } - if err := m.Regex.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRoute(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRoute - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRoute - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRoute - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthRoute - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthRoute - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRoute - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRoute(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthRoute - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthRoute = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRoute = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route/route.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/api/v2/route/route.proto -package route +package envoy_api_v2_route import ( "bytes" @@ -15,9 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" - - core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -32,3931 +30,8 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} - - _ = core.RoutingPriority(0) - - _ = core.RequestMethod(0) + _ = ptypes.DynamicAny{} ) -// Validate checks the field values on VirtualHost with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *VirtualHost) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return VirtualHostValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - if len(m.GetDomains()) < 1 { - return VirtualHostValidationError{ - field: "Domains", - reason: "value must contain at least 1 item(s)", - } - } - - for idx, item := range m.GetRoutes() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: fmt.Sprintf("Routes[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for RequireTls - - for idx, item := range m.GetVirtualClusters() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: fmt.Sprintf("VirtualClusters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - for idx, item := range m.GetRateLimits() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: fmt.Sprintf("RateLimits[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if len(m.GetRequestHeadersToAdd()) > 1000 { - return VirtualHostValidationError{ - field: "RequestHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetRequestHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if len(m.GetResponseHeadersToAdd()) > 1000 { - return VirtualHostValidationError{ - field: "ResponseHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetResponseHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetCors() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: "Cors", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for PerFilterConfig - - // no validation rules for TypedPerFilterConfig - - // no validation rules for IncludeRequestAttemptCount - - { - tmp := m.GetRetryPolicy() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: "RetryPolicy", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetHedgePolicy() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return VirtualHostValidationError{ - field: "HedgePolicy", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// VirtualHostValidationError is the validation error returned by -// VirtualHost.Validate if the designated constraints aren't met. -type VirtualHostValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e VirtualHostValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e VirtualHostValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e VirtualHostValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e VirtualHostValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e VirtualHostValidationError) ErrorName() string { return "VirtualHostValidationError" } - -// Error satisfies the builtin error interface -func (e VirtualHostValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sVirtualHost.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = VirtualHostValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = VirtualHostValidationError{} - -// Validate checks the field values on Route with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Route) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetMatch() - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: "Match", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMetadata() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: "Metadata", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetDecorator() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: "Decorator", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for PerFilterConfig - - // no validation rules for TypedPerFilterConfig - - if len(m.GetRequestHeadersToAdd()) > 1000 { - return RouteValidationError{ - field: "RequestHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetRequestHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if len(m.GetResponseHeadersToAdd()) > 1000 { - return RouteValidationError{ - field: "ResponseHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetResponseHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - switch m.Action.(type) { - - case *Route_Route: - - { - tmp := m.GetRoute() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: "Route", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *Route_Redirect: - - { - tmp := m.GetRedirect() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: "Redirect", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *Route_DirectResponse: - - { - tmp := m.GetDirectResponse() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteValidationError{ - field: "DirectResponse", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - default: - return RouteValidationError{ - field: "Action", - reason: "value is required", - } - - } - - return nil -} - -// RouteValidationError is the validation error returned by Route.Validate if -// the designated constraints aren't met. -type RouteValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteValidationError) ErrorName() string { return "RouteValidationError" } - -// Error satisfies the builtin error interface -func (e RouteValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRoute.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteValidationError{} - -// Validate checks the field values on WeightedCluster with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *WeightedCluster) Validate() error { - if m == nil { - return nil - } - - if len(m.GetClusters()) < 1 { - return WeightedClusterValidationError{ - field: "Clusters", - reason: "value must contain at least 1 item(s)", - } - } - - for idx, item := range m.GetClusters() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return WeightedClusterValidationError{ - field: fmt.Sprintf("Clusters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if wrapper := m.GetTotalWeight(); wrapper != nil { - - if wrapper.GetValue() < 1 { - return WeightedClusterValidationError{ - field: "TotalWeight", - reason: "value must be greater than or equal to 1", - } - } - - } - - // no validation rules for RuntimeKeyPrefix - - return nil -} - -// WeightedClusterValidationError is the validation error returned by -// WeightedCluster.Validate if the designated constraints aren't met. -type WeightedClusterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e WeightedClusterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e WeightedClusterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e WeightedClusterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e WeightedClusterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e WeightedClusterValidationError) ErrorName() string { return "WeightedClusterValidationError" } - -// Error satisfies the builtin error interface -func (e WeightedClusterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sWeightedCluster.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = WeightedClusterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = WeightedClusterValidationError{} - -// Validate checks the field values on RouteMatch with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *RouteMatch) Validate() error { - if m == nil { - return nil - } - - { - tmp := m.GetCaseSensitive() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteMatchValidationError{ - field: "CaseSensitive", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetRuntimeFraction() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteMatchValidationError{ - field: "RuntimeFraction", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetHeaders() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteMatchValidationError{ - field: fmt.Sprintf("Headers[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - for idx, item := range m.GetQueryParameters() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteMatchValidationError{ - field: fmt.Sprintf("QueryParameters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetGrpc() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteMatchValidationError{ - field: "Grpc", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - switch m.PathSpecifier.(type) { - - case *RouteMatch_Prefix: - // no validation rules for Prefix - - case *RouteMatch_Path: - // no validation rules for Path - - case *RouteMatch_Regex: - - if len(m.GetRegex()) > 1024 { - return RouteMatchValidationError{ - field: "Regex", - reason: "value length must be at most 1024 bytes", - } - } - - default: - return RouteMatchValidationError{ - field: "PathSpecifier", - reason: "value is required", - } - - } - - return nil -} - -// RouteMatchValidationError is the validation error returned by -// RouteMatch.Validate if the designated constraints aren't met. -type RouteMatchValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteMatchValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteMatchValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteMatchValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteMatchValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteMatchValidationError) ErrorName() string { return "RouteMatchValidationError" } - -// Error satisfies the builtin error interface -func (e RouteMatchValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteMatch.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteMatchValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteMatchValidationError{} - -// Validate checks the field values on CorsPolicy with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *CorsPolicy) Validate() error { - if m == nil { - return nil - } - - for idx, item := range m.GetAllowOriginRegex() { - _, _ = idx, item - - if len(item) > 1024 { - return CorsPolicyValidationError{ - field: fmt.Sprintf("AllowOriginRegex[%v]", idx), - reason: "value length must be at most 1024 bytes", - } - } - - } - - // no validation rules for AllowMethods - - // no validation rules for AllowHeaders - - // no validation rules for ExposeHeaders - - // no validation rules for MaxAge - - { - tmp := m.GetAllowCredentials() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CorsPolicyValidationError{ - field: "AllowCredentials", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetShadowEnabled() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CorsPolicyValidationError{ - field: "ShadowEnabled", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - switch m.EnabledSpecifier.(type) { - - case *CorsPolicy_Enabled: - - { - tmp := m.GetEnabled() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CorsPolicyValidationError{ - field: "Enabled", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *CorsPolicy_FilterEnabled: - - { - tmp := m.GetFilterEnabled() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CorsPolicyValidationError{ - field: "FilterEnabled", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// CorsPolicyValidationError is the validation error returned by -// CorsPolicy.Validate if the designated constraints aren't met. -type CorsPolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e CorsPolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e CorsPolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e CorsPolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e CorsPolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e CorsPolicyValidationError) ErrorName() string { return "CorsPolicyValidationError" } - -// Error satisfies the builtin error interface -func (e CorsPolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sCorsPolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = CorsPolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = CorsPolicyValidationError{} - -// Validate checks the field values on RouteAction with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *RouteAction) Validate() error { - if m == nil { - return nil - } - - if _, ok := RouteAction_ClusterNotFoundResponseCode_name[int32(m.GetClusterNotFoundResponseCode())]; !ok { - return RouteActionValidationError{ - field: "ClusterNotFoundResponseCode", - reason: "value must be one of the defined enum values", - } - } - - { - tmp := m.GetMetadataMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "MetadataMatch", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for PrefixRewrite - - { - tmp := m.GetTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetIdleTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "IdleTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetRetryPolicy() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "RetryPolicy", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetRequestMirrorPolicy() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "RequestMirrorPolicy", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for Priority - - for idx, item := range m.GetRateLimits() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: fmt.Sprintf("RateLimits[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetIncludeVhRateLimits() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "IncludeVhRateLimits", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetHashPolicy() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: fmt.Sprintf("HashPolicy[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetCors() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "Cors", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMaxGrpcTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "MaxGrpcTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetGrpcTimeoutOffset() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "GrpcTimeoutOffset", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetUpgradeConfigs() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: fmt.Sprintf("UpgradeConfigs[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for InternalRedirectAction - - { - tmp := m.GetHedgePolicy() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "HedgePolicy", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - switch m.ClusterSpecifier.(type) { - - case *RouteAction_Cluster: - - if len(m.GetCluster()) < 1 { - return RouteActionValidationError{ - field: "Cluster", - reason: "value length must be at least 1 bytes", - } - } - - case *RouteAction_ClusterHeader: - - if len(m.GetClusterHeader()) < 1 { - return RouteActionValidationError{ - field: "ClusterHeader", - reason: "value length must be at least 1 bytes", - } - } - - case *RouteAction_WeightedClusters: - - { - tmp := m.GetWeightedClusters() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "WeightedClusters", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - default: - return RouteActionValidationError{ - field: "ClusterSpecifier", - reason: "value is required", - } - - } - - switch m.HostRewriteSpecifier.(type) { - - case *RouteAction_HostRewrite: - // no validation rules for HostRewrite - - case *RouteAction_AutoHostRewrite: - - { - tmp := m.GetAutoHostRewrite() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteActionValidationError{ - field: "AutoHostRewrite", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// RouteActionValidationError is the validation error returned by -// RouteAction.Validate if the designated constraints aren't met. -type RouteActionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteActionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteActionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteActionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteActionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteActionValidationError) ErrorName() string { return "RouteActionValidationError" } - -// Error satisfies the builtin error interface -func (e RouteActionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteActionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteActionValidationError{} - -// Validate checks the field values on RetryPolicy with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *RetryPolicy) Validate() error { - if m == nil { - return nil - } - - // no validation rules for RetryOn - - { - tmp := m.GetNumRetries() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicyValidationError{ - field: "NumRetries", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetPerTryTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicyValidationError{ - field: "PerTryTimeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetRetryPriority() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicyValidationError{ - field: "RetryPriority", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - for idx, item := range m.GetRetryHostPredicate() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicyValidationError{ - field: fmt.Sprintf("RetryHostPredicate[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for HostSelectionRetryMaxAttempts - - { - tmp := m.GetRetryBackOff() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicyValidationError{ - field: "RetryBackOff", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// RetryPolicyValidationError is the validation error returned by -// RetryPolicy.Validate if the designated constraints aren't met. -type RetryPolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RetryPolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RetryPolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RetryPolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RetryPolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RetryPolicyValidationError) ErrorName() string { return "RetryPolicyValidationError" } - -// Error satisfies the builtin error interface -func (e RetryPolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRetryPolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RetryPolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RetryPolicyValidationError{} - -// Validate checks the field values on HedgePolicy with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *HedgePolicy) Validate() error { - if m == nil { - return nil - } - - if wrapper := m.GetInitialRequests(); wrapper != nil { - - if wrapper.GetValue() < 1 { - return HedgePolicyValidationError{ - field: "InitialRequests", - reason: "value must be greater than or equal to 1", - } - } - - } - - { - tmp := m.GetAdditionalRequestChance() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HedgePolicyValidationError{ - field: "AdditionalRequestChance", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for HedgeOnPerTryTimeout - - return nil -} - -// HedgePolicyValidationError is the validation error returned by -// HedgePolicy.Validate if the designated constraints aren't met. -type HedgePolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e HedgePolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e HedgePolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e HedgePolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e HedgePolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e HedgePolicyValidationError) ErrorName() string { return "HedgePolicyValidationError" } - -// Error satisfies the builtin error interface -func (e HedgePolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sHedgePolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = HedgePolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = HedgePolicyValidationError{} - -// Validate checks the field values on RedirectAction with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *RedirectAction) Validate() error { - if m == nil { - return nil - } - - // no validation rules for HostRedirect - - // no validation rules for PortRedirect - - if _, ok := RedirectAction_RedirectResponseCode_name[int32(m.GetResponseCode())]; !ok { - return RedirectActionValidationError{ - field: "ResponseCode", - reason: "value must be one of the defined enum values", - } - } - - // no validation rules for StripQuery - - switch m.SchemeRewriteSpecifier.(type) { - - case *RedirectAction_HttpsRedirect: - // no validation rules for HttpsRedirect - - case *RedirectAction_SchemeRedirect: - // no validation rules for SchemeRedirect - - } - - switch m.PathRewriteSpecifier.(type) { - - case *RedirectAction_PathRedirect: - // no validation rules for PathRedirect - - case *RedirectAction_PrefixRewrite: - // no validation rules for PrefixRewrite - - } - - return nil -} - -// RedirectActionValidationError is the validation error returned by -// RedirectAction.Validate if the designated constraints aren't met. -type RedirectActionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RedirectActionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RedirectActionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RedirectActionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RedirectActionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RedirectActionValidationError) ErrorName() string { return "RedirectActionValidationError" } - -// Error satisfies the builtin error interface -func (e RedirectActionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRedirectAction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RedirectActionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RedirectActionValidationError{} - -// Validate checks the field values on DirectResponseAction with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *DirectResponseAction) Validate() error { - if m == nil { - return nil - } - - if val := m.GetStatus(); val < 100 || val >= 600 { - return DirectResponseActionValidationError{ - field: "Status", - reason: "value must be inside range [100, 600)", - } - } - - { - tmp := m.GetBody() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DirectResponseActionValidationError{ - field: "Body", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// DirectResponseActionValidationError is the validation error returned by -// DirectResponseAction.Validate if the designated constraints aren't met. -type DirectResponseActionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e DirectResponseActionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e DirectResponseActionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e DirectResponseActionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e DirectResponseActionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e DirectResponseActionValidationError) ErrorName() string { - return "DirectResponseActionValidationError" -} - -// Error satisfies the builtin error interface -func (e DirectResponseActionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sDirectResponseAction.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = DirectResponseActionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = DirectResponseActionValidationError{} - -// Validate checks the field values on Decorator with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *Decorator) Validate() error { - if m == nil { - return nil - } - - if len(m.GetOperation()) < 1 { - return DecoratorValidationError{ - field: "Operation", - reason: "value length must be at least 1 bytes", - } - } - - return nil -} - -// DecoratorValidationError is the validation error returned by -// Decorator.Validate if the designated constraints aren't met. -type DecoratorValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e DecoratorValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e DecoratorValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e DecoratorValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e DecoratorValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e DecoratorValidationError) ErrorName() string { return "DecoratorValidationError" } - -// Error satisfies the builtin error interface -func (e DecoratorValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sDecorator.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = DecoratorValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = DecoratorValidationError{} - -// Validate checks the field values on VirtualCluster with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *VirtualCluster) Validate() error { - if m == nil { - return nil - } - - if l := len(m.GetPattern()); l < 1 || l > 1024 { - return VirtualClusterValidationError{ - field: "Pattern", - reason: "value length must be between 1 and 1024 bytes, inclusive", - } - } - - if len(m.GetName()) < 1 { - return VirtualClusterValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - // no validation rules for Method - - return nil -} - -// VirtualClusterValidationError is the validation error returned by -// VirtualCluster.Validate if the designated constraints aren't met. -type VirtualClusterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e VirtualClusterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e VirtualClusterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e VirtualClusterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e VirtualClusterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e VirtualClusterValidationError) ErrorName() string { return "VirtualClusterValidationError" } - -// Error satisfies the builtin error interface -func (e VirtualClusterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sVirtualCluster.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = VirtualClusterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = VirtualClusterValidationError{} - -// Validate checks the field values on RateLimit with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *RateLimit) Validate() error { - if m == nil { - return nil - } - - if wrapper := m.GetStage(); wrapper != nil { - - if wrapper.GetValue() > 10 { - return RateLimitValidationError{ - field: "Stage", - reason: "value must be less than or equal to 10", - } - } - - } - - // no validation rules for DisableKey - - if len(m.GetActions()) < 1 { - return RateLimitValidationError{ - field: "Actions", - reason: "value must contain at least 1 item(s)", - } - } - - for idx, item := range m.GetActions() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimitValidationError{ - field: fmt.Sprintf("Actions[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// RateLimitValidationError is the validation error returned by -// RateLimit.Validate if the designated constraints aren't met. -type RateLimitValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimitValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimitValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimitValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimitValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimitValidationError) ErrorName() string { return "RateLimitValidationError" } - -// Error satisfies the builtin error interface -func (e RateLimitValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimitValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimitValidationError{} - -// Validate checks the field values on HeaderMatcher with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *HeaderMatcher) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return HeaderMatcherValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - // no validation rules for InvertMatch - - switch m.HeaderMatchSpecifier.(type) { - - case *HeaderMatcher_ExactMatch: - // no validation rules for ExactMatch - - case *HeaderMatcher_RegexMatch: - - if len(m.GetRegexMatch()) > 1024 { - return HeaderMatcherValidationError{ - field: "RegexMatch", - reason: "value length must be at most 1024 bytes", - } - } - - case *HeaderMatcher_RangeMatch: - - { - tmp := m.GetRangeMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HeaderMatcherValidationError{ - field: "RangeMatch", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *HeaderMatcher_PresentMatch: - // no validation rules for PresentMatch - - case *HeaderMatcher_PrefixMatch: - - if len(m.GetPrefixMatch()) < 1 { - return HeaderMatcherValidationError{ - field: "PrefixMatch", - reason: "value length must be at least 1 bytes", - } - } - - case *HeaderMatcher_SuffixMatch: - - if len(m.GetSuffixMatch()) < 1 { - return HeaderMatcherValidationError{ - field: "SuffixMatch", - reason: "value length must be at least 1 bytes", - } - } - - } - - return nil -} - -// HeaderMatcherValidationError is the validation error returned by -// HeaderMatcher.Validate if the designated constraints aren't met. -type HeaderMatcherValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e HeaderMatcherValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e HeaderMatcherValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e HeaderMatcherValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e HeaderMatcherValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e HeaderMatcherValidationError) ErrorName() string { return "HeaderMatcherValidationError" } - -// Error satisfies the builtin error interface -func (e HeaderMatcherValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sHeaderMatcher.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = HeaderMatcherValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = HeaderMatcherValidationError{} - -// Validate checks the field values on QueryParameterMatcher with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *QueryParameterMatcher) Validate() error { - if m == nil { - return nil - } - - if l := len(m.GetName()); l < 1 || l > 1024 { - return QueryParameterMatcherValidationError{ - field: "Name", - reason: "value length must be between 1 and 1024 bytes, inclusive", - } - } - - // no validation rules for Value - - { - tmp := m.GetRegex() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return QueryParameterMatcherValidationError{ - field: "Regex", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// QueryParameterMatcherValidationError is the validation error returned by -// QueryParameterMatcher.Validate if the designated constraints aren't met. -type QueryParameterMatcherValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e QueryParameterMatcherValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e QueryParameterMatcherValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e QueryParameterMatcherValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e QueryParameterMatcherValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e QueryParameterMatcherValidationError) ErrorName() string { - return "QueryParameterMatcherValidationError" -} - -// Error satisfies the builtin error interface -func (e QueryParameterMatcherValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sQueryParameterMatcher.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = QueryParameterMatcherValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = QueryParameterMatcherValidationError{} - -// Validate checks the field values on WeightedCluster_ClusterWeight with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *WeightedCluster_ClusterWeight) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return WeightedCluster_ClusterWeightValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - { - tmp := m.GetWeight() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return WeightedCluster_ClusterWeightValidationError{ - field: "Weight", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - { - tmp := m.GetMetadataMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return WeightedCluster_ClusterWeightValidationError{ - field: "MetadataMatch", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if len(m.GetRequestHeadersToAdd()) > 1000 { - return WeightedCluster_ClusterWeightValidationError{ - field: "RequestHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetRequestHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return WeightedCluster_ClusterWeightValidationError{ - field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - if len(m.GetResponseHeadersToAdd()) > 1000 { - return WeightedCluster_ClusterWeightValidationError{ - field: "ResponseHeadersToAdd", - reason: "value must contain no more than 1000 item(s)", - } - } - - for idx, item := range m.GetResponseHeadersToAdd() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return WeightedCluster_ClusterWeightValidationError{ - field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - // no validation rules for PerFilterConfig - - // no validation rules for TypedPerFilterConfig - - return nil -} - -// WeightedCluster_ClusterWeightValidationError is the validation error -// returned by WeightedCluster_ClusterWeight.Validate if the designated -// constraints aren't met. -type WeightedCluster_ClusterWeightValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e WeightedCluster_ClusterWeightValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e WeightedCluster_ClusterWeightValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e WeightedCluster_ClusterWeightValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e WeightedCluster_ClusterWeightValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e WeightedCluster_ClusterWeightValidationError) ErrorName() string { - return "WeightedCluster_ClusterWeightValidationError" -} - -// Error satisfies the builtin error interface -func (e WeightedCluster_ClusterWeightValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sWeightedCluster_ClusterWeight.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = WeightedCluster_ClusterWeightValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = WeightedCluster_ClusterWeightValidationError{} - -// Validate checks the field values on RouteMatch_GrpcRouteMatchOptions with -// the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. -func (m *RouteMatch_GrpcRouteMatchOptions) Validate() error { - if m == nil { - return nil - } - - return nil -} - -// RouteMatch_GrpcRouteMatchOptionsValidationError is the validation error -// returned by RouteMatch_GrpcRouteMatchOptions.Validate if the designated -// constraints aren't met. -type RouteMatch_GrpcRouteMatchOptionsValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteMatch_GrpcRouteMatchOptionsValidationError) ErrorName() string { - return "RouteMatch_GrpcRouteMatchOptionsValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteMatch_GrpcRouteMatchOptionsValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteMatch_GrpcRouteMatchOptions.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteMatch_GrpcRouteMatchOptionsValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteMatch_GrpcRouteMatchOptionsValidationError{} - -// Validate checks the field values on RouteAction_RequestMirrorPolicy with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_RequestMirrorPolicy) Validate() error { - if m == nil { - return nil - } - - if len(m.GetCluster()) < 1 { - return RouteAction_RequestMirrorPolicyValidationError{ - field: "Cluster", - reason: "value length must be at least 1 bytes", - } - } - - // no validation rules for RuntimeKey - - { - tmp := m.GetRuntimeFraction() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteAction_RequestMirrorPolicyValidationError{ - field: "RuntimeFraction", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// RouteAction_RequestMirrorPolicyValidationError is the validation error -// returned by RouteAction_RequestMirrorPolicy.Validate if the designated -// constraints aren't met. -type RouteAction_RequestMirrorPolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteAction_RequestMirrorPolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteAction_RequestMirrorPolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteAction_RequestMirrorPolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteAction_RequestMirrorPolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteAction_RequestMirrorPolicyValidationError) ErrorName() string { - return "RouteAction_RequestMirrorPolicyValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteAction_RequestMirrorPolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_RequestMirrorPolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteAction_RequestMirrorPolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteAction_RequestMirrorPolicyValidationError{} - -// Validate checks the field values on RouteAction_HashPolicy with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_HashPolicy) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Terminal - - switch m.PolicySpecifier.(type) { - - case *RouteAction_HashPolicy_Header_: - - { - tmp := m.GetHeader() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteAction_HashPolicyValidationError{ - field: "Header", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RouteAction_HashPolicy_Cookie_: - - { - tmp := m.GetCookie() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteAction_HashPolicyValidationError{ - field: "Cookie", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RouteAction_HashPolicy_ConnectionProperties_: - - { - tmp := m.GetConnectionProperties() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteAction_HashPolicyValidationError{ - field: "ConnectionProperties", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - default: - return RouteAction_HashPolicyValidationError{ - field: "PolicySpecifier", - reason: "value is required", - } - - } - - return nil -} - -// RouteAction_HashPolicyValidationError is the validation error returned by -// RouteAction_HashPolicy.Validate if the designated constraints aren't met. -type RouteAction_HashPolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteAction_HashPolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteAction_HashPolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteAction_HashPolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteAction_HashPolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteAction_HashPolicyValidationError) ErrorName() string { - return "RouteAction_HashPolicyValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteAction_HashPolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteAction_HashPolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteAction_HashPolicyValidationError{} - -// Validate checks the field values on RouteAction_UpgradeConfig with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_UpgradeConfig) Validate() error { - if m == nil { - return nil - } - - // no validation rules for UpgradeType - - { - tmp := m.GetEnabled() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteAction_UpgradeConfigValidationError{ - field: "Enabled", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - return nil -} - -// RouteAction_UpgradeConfigValidationError is the validation error returned by -// RouteAction_UpgradeConfig.Validate if the designated constraints aren't met. -type RouteAction_UpgradeConfigValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteAction_UpgradeConfigValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteAction_UpgradeConfigValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteAction_UpgradeConfigValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteAction_UpgradeConfigValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteAction_UpgradeConfigValidationError) ErrorName() string { - return "RouteAction_UpgradeConfigValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteAction_UpgradeConfigValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_UpgradeConfig.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteAction_UpgradeConfigValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteAction_UpgradeConfigValidationError{} - -// Validate checks the field values on RouteAction_HashPolicy_Header with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_HashPolicy_Header) Validate() error { - if m == nil { - return nil - } - - if len(m.GetHeaderName()) < 1 { - return RouteAction_HashPolicy_HeaderValidationError{ - field: "HeaderName", - reason: "value length must be at least 1 bytes", - } - } - - return nil -} - -// RouteAction_HashPolicy_HeaderValidationError is the validation error -// returned by RouteAction_HashPolicy_Header.Validate if the designated -// constraints aren't met. -type RouteAction_HashPolicy_HeaderValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteAction_HashPolicy_HeaderValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteAction_HashPolicy_HeaderValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteAction_HashPolicy_HeaderValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteAction_HashPolicy_HeaderValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteAction_HashPolicy_HeaderValidationError) ErrorName() string { - return "RouteAction_HashPolicy_HeaderValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteAction_HashPolicy_HeaderValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy_Header.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteAction_HashPolicy_HeaderValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteAction_HashPolicy_HeaderValidationError{} - -// Validate checks the field values on RouteAction_HashPolicy_Cookie with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RouteAction_HashPolicy_Cookie) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return RouteAction_HashPolicy_CookieValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - { - tmp := m.GetTtl() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RouteAction_HashPolicy_CookieValidationError{ - field: "Ttl", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - // no validation rules for Path - - return nil -} - -// RouteAction_HashPolicy_CookieValidationError is the validation error -// returned by RouteAction_HashPolicy_Cookie.Validate if the designated -// constraints aren't met. -type RouteAction_HashPolicy_CookieValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteAction_HashPolicy_CookieValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteAction_HashPolicy_CookieValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteAction_HashPolicy_CookieValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteAction_HashPolicy_CookieValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteAction_HashPolicy_CookieValidationError) ErrorName() string { - return "RouteAction_HashPolicy_CookieValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteAction_HashPolicy_CookieValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy_Cookie.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteAction_HashPolicy_CookieValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteAction_HashPolicy_CookieValidationError{} - -// Validate checks the field values on -// RouteAction_HashPolicy_ConnectionProperties with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *RouteAction_HashPolicy_ConnectionProperties) Validate() error { - if m == nil { - return nil - } - - // no validation rules for SourceIp - - return nil -} - -// RouteAction_HashPolicy_ConnectionPropertiesValidationError is the validation -// error returned by RouteAction_HashPolicy_ConnectionProperties.Validate if -// the designated constraints aren't met. -type RouteAction_HashPolicy_ConnectionPropertiesValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) ErrorName() string { - return "RouteAction_HashPolicy_ConnectionPropertiesValidationError" -} - -// Error satisfies the builtin error interface -func (e RouteAction_HashPolicy_ConnectionPropertiesValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRouteAction_HashPolicy_ConnectionProperties.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RouteAction_HashPolicy_ConnectionPropertiesValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RouteAction_HashPolicy_ConnectionPropertiesValidationError{} - -// Validate checks the field values on RetryPolicy_RetryPriority with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RetryPolicy_RetryPriority) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return RetryPolicy_RetryPriorityValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - switch m.ConfigType.(type) { - - case *RetryPolicy_RetryPriority_Config: - - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicy_RetryPriorityValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RetryPolicy_RetryPriority_TypedConfig: - - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicy_RetryPriorityValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// RetryPolicy_RetryPriorityValidationError is the validation error returned by -// RetryPolicy_RetryPriority.Validate if the designated constraints aren't met. -type RetryPolicy_RetryPriorityValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RetryPolicy_RetryPriorityValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RetryPolicy_RetryPriorityValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RetryPolicy_RetryPriorityValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RetryPolicy_RetryPriorityValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RetryPolicy_RetryPriorityValidationError) ErrorName() string { - return "RetryPolicy_RetryPriorityValidationError" -} - -// Error satisfies the builtin error interface -func (e RetryPolicy_RetryPriorityValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRetryPolicy_RetryPriority.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RetryPolicy_RetryPriorityValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RetryPolicy_RetryPriorityValidationError{} - -// Validate checks the field values on RetryPolicy_RetryHostPredicate with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RetryPolicy_RetryHostPredicate) Validate() error { - if m == nil { - return nil - } - - if len(m.GetName()) < 1 { - return RetryPolicy_RetryHostPredicateValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", - } - } - - switch m.ConfigType.(type) { - - case *RetryPolicy_RetryHostPredicate_Config: - - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicy_RetryHostPredicateValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RetryPolicy_RetryHostPredicate_TypedConfig: - - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RetryPolicy_RetryHostPredicateValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// RetryPolicy_RetryHostPredicateValidationError is the validation error -// returned by RetryPolicy_RetryHostPredicate.Validate if the designated -// constraints aren't met. -type RetryPolicy_RetryHostPredicateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RetryPolicy_RetryHostPredicateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RetryPolicy_RetryHostPredicateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RetryPolicy_RetryHostPredicateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RetryPolicy_RetryHostPredicateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RetryPolicy_RetryHostPredicateValidationError) ErrorName() string { - return "RetryPolicy_RetryHostPredicateValidationError" -} - -// Error satisfies the builtin error interface -func (e RetryPolicy_RetryHostPredicateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRetryPolicy_RetryHostPredicate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RetryPolicy_RetryHostPredicateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RetryPolicy_RetryHostPredicateValidationError{} - -// Validate checks the field values on RetryPolicy_RetryBackOff with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RetryPolicy_RetryBackOff) Validate() error { - if m == nil { - return nil - } - - if m.GetBaseInterval() == nil { - return RetryPolicy_RetryBackOffValidationError{ - field: "BaseInterval", - reason: "value is required", - } - } - - if d := m.GetBaseInterval(); d != nil { - dur := *d - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return RetryPolicy_RetryBackOffValidationError{ - field: "BaseInterval", - reason: "value must be greater than 0s", - } - } - - } - - if d := m.GetMaxInterval(); d != nil { - dur := *d - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { - return RetryPolicy_RetryBackOffValidationError{ - field: "MaxInterval", - reason: "value must be greater than 0s", - } - } - - } - - return nil -} - -// RetryPolicy_RetryBackOffValidationError is the validation error returned by -// RetryPolicy_RetryBackOff.Validate if the designated constraints aren't met. -type RetryPolicy_RetryBackOffValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RetryPolicy_RetryBackOffValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RetryPolicy_RetryBackOffValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RetryPolicy_RetryBackOffValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RetryPolicy_RetryBackOffValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RetryPolicy_RetryBackOffValidationError) ErrorName() string { - return "RetryPolicy_RetryBackOffValidationError" -} - -// Error satisfies the builtin error interface -func (e RetryPolicy_RetryBackOffValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRetryPolicy_RetryBackOff.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RetryPolicy_RetryBackOffValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RetryPolicy_RetryBackOffValidationError{} - -// Validate checks the field values on RateLimit_Action with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *RateLimit_Action) Validate() error { - if m == nil { - return nil - } - - switch m.ActionSpecifier.(type) { - - case *RateLimit_Action_SourceCluster_: - - { - tmp := m.GetSourceCluster() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_ActionValidationError{ - field: "SourceCluster", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RateLimit_Action_DestinationCluster_: - - { - tmp := m.GetDestinationCluster() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_ActionValidationError{ - field: "DestinationCluster", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RateLimit_Action_RequestHeaders_: - - { - tmp := m.GetRequestHeaders() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_ActionValidationError{ - field: "RequestHeaders", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RateLimit_Action_RemoteAddress_: - - { - tmp := m.GetRemoteAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_ActionValidationError{ - field: "RemoteAddress", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RateLimit_Action_GenericKey_: - - { - tmp := m.GetGenericKey() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_ActionValidationError{ - field: "GenericKey", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *RateLimit_Action_HeaderValueMatch_: - - { - tmp := m.GetHeaderValueMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_ActionValidationError{ - field: "HeaderValueMatch", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - default: - return RateLimit_ActionValidationError{ - field: "ActionSpecifier", - reason: "value is required", - } - - } - - return nil -} - -// RateLimit_ActionValidationError is the validation error returned by -// RateLimit_Action.Validate if the designated constraints aren't met. -type RateLimit_ActionValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_ActionValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_ActionValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_ActionValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_ActionValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_ActionValidationError) ErrorName() string { return "RateLimit_ActionValidationError" } - -// Error satisfies the builtin error interface -func (e RateLimit_ActionValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_ActionValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_ActionValidationError{} - -// Validate checks the field values on RateLimit_Action_SourceCluster with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RateLimit_Action_SourceCluster) Validate() error { - if m == nil { - return nil - } - - return nil -} - -// RateLimit_Action_SourceClusterValidationError is the validation error -// returned by RateLimit_Action_SourceCluster.Validate if the designated -// constraints aren't met. -type RateLimit_Action_SourceClusterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_Action_SourceClusterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_Action_SourceClusterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_Action_SourceClusterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_Action_SourceClusterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_Action_SourceClusterValidationError) ErrorName() string { - return "RateLimit_Action_SourceClusterValidationError" -} - -// Error satisfies the builtin error interface -func (e RateLimit_Action_SourceClusterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action_SourceCluster.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_Action_SourceClusterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_Action_SourceClusterValidationError{} - -// Validate checks the field values on RateLimit_Action_DestinationCluster with -// the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. -func (m *RateLimit_Action_DestinationCluster) Validate() error { - if m == nil { - return nil - } - - return nil -} - -// RateLimit_Action_DestinationClusterValidationError is the validation error -// returned by RateLimit_Action_DestinationCluster.Validate if the designated -// constraints aren't met. -type RateLimit_Action_DestinationClusterValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_Action_DestinationClusterValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_Action_DestinationClusterValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_Action_DestinationClusterValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_Action_DestinationClusterValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_Action_DestinationClusterValidationError) ErrorName() string { - return "RateLimit_Action_DestinationClusterValidationError" -} - -// Error satisfies the builtin error interface -func (e RateLimit_Action_DestinationClusterValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action_DestinationCluster.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_Action_DestinationClusterValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_Action_DestinationClusterValidationError{} - -// Validate checks the field values on RateLimit_Action_RequestHeaders with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RateLimit_Action_RequestHeaders) Validate() error { - if m == nil { - return nil - } - - if len(m.GetHeaderName()) < 1 { - return RateLimit_Action_RequestHeadersValidationError{ - field: "HeaderName", - reason: "value length must be at least 1 bytes", - } - } - - if len(m.GetDescriptorKey()) < 1 { - return RateLimit_Action_RequestHeadersValidationError{ - field: "DescriptorKey", - reason: "value length must be at least 1 bytes", - } - } - - return nil -} - -// RateLimit_Action_RequestHeadersValidationError is the validation error -// returned by RateLimit_Action_RequestHeaders.Validate if the designated -// constraints aren't met. -type RateLimit_Action_RequestHeadersValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_Action_RequestHeadersValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_Action_RequestHeadersValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_Action_RequestHeadersValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_Action_RequestHeadersValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_Action_RequestHeadersValidationError) ErrorName() string { - return "RateLimit_Action_RequestHeadersValidationError" -} - -// Error satisfies the builtin error interface -func (e RateLimit_Action_RequestHeadersValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action_RequestHeaders.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_Action_RequestHeadersValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_Action_RequestHeadersValidationError{} - -// Validate checks the field values on RateLimit_Action_RemoteAddress with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RateLimit_Action_RemoteAddress) Validate() error { - if m == nil { - return nil - } - - return nil -} - -// RateLimit_Action_RemoteAddressValidationError is the validation error -// returned by RateLimit_Action_RemoteAddress.Validate if the designated -// constraints aren't met. -type RateLimit_Action_RemoteAddressValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_Action_RemoteAddressValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_Action_RemoteAddressValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_Action_RemoteAddressValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_Action_RemoteAddressValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_Action_RemoteAddressValidationError) ErrorName() string { - return "RateLimit_Action_RemoteAddressValidationError" -} - -// Error satisfies the builtin error interface -func (e RateLimit_Action_RemoteAddressValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action_RemoteAddress.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_Action_RemoteAddressValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_Action_RemoteAddressValidationError{} - -// Validate checks the field values on RateLimit_Action_GenericKey with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *RateLimit_Action_GenericKey) Validate() error { - if m == nil { - return nil - } - - if len(m.GetDescriptorValue()) < 1 { - return RateLimit_Action_GenericKeyValidationError{ - field: "DescriptorValue", - reason: "value length must be at least 1 bytes", - } - } - - return nil -} - -// RateLimit_Action_GenericKeyValidationError is the validation error returned -// by RateLimit_Action_GenericKey.Validate if the designated constraints -// aren't met. -type RateLimit_Action_GenericKeyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_Action_GenericKeyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_Action_GenericKeyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_Action_GenericKeyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_Action_GenericKeyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_Action_GenericKeyValidationError) ErrorName() string { - return "RateLimit_Action_GenericKeyValidationError" -} - -// Error satisfies the builtin error interface -func (e RateLimit_Action_GenericKeyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action_GenericKey.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_Action_GenericKeyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_Action_GenericKeyValidationError{} - -// Validate checks the field values on RateLimit_Action_HeaderValueMatch with -// the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. -func (m *RateLimit_Action_HeaderValueMatch) Validate() error { - if m == nil { - return nil - } - - if len(m.GetDescriptorValue()) < 1 { - return RateLimit_Action_HeaderValueMatchValidationError{ - field: "DescriptorValue", - reason: "value length must be at least 1 bytes", - } - } - - { - tmp := m.GetExpectMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_Action_HeaderValueMatchValidationError{ - field: "ExpectMatch", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - if len(m.GetHeaders()) < 1 { - return RateLimit_Action_HeaderValueMatchValidationError{ - field: "Headers", - reason: "value must contain at least 1 item(s)", - } - } - - for idx, item := range m.GetHeaders() { - _, _ = idx, item - - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RateLimit_Action_HeaderValueMatchValidationError{ - field: fmt.Sprintf("Headers[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - return nil -} - -// RateLimit_Action_HeaderValueMatchValidationError is the validation error -// returned by RateLimit_Action_HeaderValueMatch.Validate if the designated -// constraints aren't met. -type RateLimit_Action_HeaderValueMatchValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e RateLimit_Action_HeaderValueMatchValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e RateLimit_Action_HeaderValueMatchValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e RateLimit_Action_HeaderValueMatchValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e RateLimit_Action_HeaderValueMatchValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e RateLimit_Action_HeaderValueMatchValidationError) ErrorName() string { - return "RateLimit_Action_HeaderValueMatchValidationError" -} - -// Error satisfies the builtin error interface -func (e RateLimit_Action_HeaderValueMatchValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sRateLimit_Action_HeaderValueMatch.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = RateLimit_Action_HeaderValueMatchValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = RateLimit_Action_HeaderValueMatchValidationError{} +// define the regex for a UUID once up-front +var _route_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,226 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/route.proto + +package envoy_api_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + route "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type RouteConfiguration struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + VirtualHosts []*route.VirtualHost `protobuf:"bytes,2,rep,name=virtual_hosts,json=virtualHosts,proto3" json:"virtual_hosts,omitempty"` + Vhds *Vhds `protobuf:"bytes,9,opt,name=vhds,proto3" json:"vhds,omitempty"` + InternalOnlyHeaders []string `protobuf:"bytes,3,rep,name=internal_only_headers,json=internalOnlyHeaders,proto3" json:"internal_only_headers,omitempty"` + ResponseHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,4,rep,name=response_headers_to_add,json=responseHeadersToAdd,proto3" json:"response_headers_to_add,omitempty"` + ResponseHeadersToRemove []string `protobuf:"bytes,5,rep,name=response_headers_to_remove,json=responseHeadersToRemove,proto3" json:"response_headers_to_remove,omitempty"` + RequestHeadersToAdd []*core.HeaderValueOption `protobuf:"bytes,6,rep,name=request_headers_to_add,json=requestHeadersToAdd,proto3" json:"request_headers_to_add,omitempty"` + RequestHeadersToRemove []string `protobuf:"bytes,8,rep,name=request_headers_to_remove,json=requestHeadersToRemove,proto3" json:"request_headers_to_remove,omitempty"` + MostSpecificHeaderMutationsWins bool `protobuf:"varint,10,opt,name=most_specific_header_mutations_wins,json=mostSpecificHeaderMutationsWins,proto3" json:"most_specific_header_mutations_wins,omitempty"` + ValidateClusters *wrappers.BoolValue `protobuf:"bytes,7,opt,name=validate_clusters,json=validateClusters,proto3" json:"validate_clusters,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RouteConfiguration) Reset() { *m = RouteConfiguration{} } +func (m *RouteConfiguration) String() string { return proto.CompactTextString(m) } +func (*RouteConfiguration) ProtoMessage() {} +func (*RouteConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_1f33b4742f398551, []int{0} +} + +func (m *RouteConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RouteConfiguration.Unmarshal(m, b) +} +func (m *RouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RouteConfiguration.Marshal(b, m, deterministic) +} +func (m *RouteConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteConfiguration.Merge(m, src) +} +func (m *RouteConfiguration) XXX_Size() int { + return xxx_messageInfo_RouteConfiguration.Size(m) +} +func (m *RouteConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_RouteConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteConfiguration proto.InternalMessageInfo + +func (m *RouteConfiguration) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *RouteConfiguration) GetVirtualHosts() []*route.VirtualHost { + if m != nil { + return m.VirtualHosts + } + return nil +} + +func (m *RouteConfiguration) GetVhds() *Vhds { + if m != nil { + return m.Vhds + } + return nil +} + +func (m *RouteConfiguration) GetInternalOnlyHeaders() []string { + if m != nil { + return m.InternalOnlyHeaders + } + return nil +} + +func (m *RouteConfiguration) GetResponseHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.ResponseHeadersToAdd + } + return nil +} + +func (m *RouteConfiguration) GetResponseHeadersToRemove() []string { + if m != nil { + return m.ResponseHeadersToRemove + } + return nil +} + +func (m *RouteConfiguration) GetRequestHeadersToAdd() []*core.HeaderValueOption { + if m != nil { + return m.RequestHeadersToAdd + } + return nil +} + +func (m *RouteConfiguration) GetRequestHeadersToRemove() []string { + if m != nil { + return m.RequestHeadersToRemove + } + return nil +} + +func (m *RouteConfiguration) GetMostSpecificHeaderMutationsWins() bool { + if m != nil { + return m.MostSpecificHeaderMutationsWins + } + return false +} + +func (m *RouteConfiguration) GetValidateClusters() *wrappers.BoolValue { + if m != nil { + return m.ValidateClusters + } + return nil +} + +type Vhds struct { + ConfigSource *core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Vhds) Reset() { *m = Vhds{} } +func (m *Vhds) String() string { return proto.CompactTextString(m) } +func (*Vhds) ProtoMessage() {} +func (*Vhds) Descriptor() ([]byte, []int) { + return fileDescriptor_1f33b4742f398551, []int{1} +} + +func (m *Vhds) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Vhds.Unmarshal(m, b) +} +func (m *Vhds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Vhds.Marshal(b, m, deterministic) +} +func (m *Vhds) XXX_Merge(src proto.Message) { + xxx_messageInfo_Vhds.Merge(m, src) +} +func (m *Vhds) XXX_Size() int { + return xxx_messageInfo_Vhds.Size(m) +} +func (m *Vhds) XXX_DiscardUnknown() { + xxx_messageInfo_Vhds.DiscardUnknown(m) +} + +var xxx_messageInfo_Vhds proto.InternalMessageInfo + +func (m *Vhds) GetConfigSource() *core.ConfigSource { + if m != nil { + return m.ConfigSource + } + return nil +} + +func init() { + proto.RegisterType((*RouteConfiguration)(nil), "envoy.api.v2.RouteConfiguration") + proto.RegisterType((*Vhds)(nil), "envoy.api.v2.Vhds") +} + +func init() { proto.RegisterFile("envoy/api/v2/route.proto", fileDescriptor_1f33b4742f398551) } + +var fileDescriptor_1f33b4742f398551 = []byte{ + // 610 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0xe6, 0x9a, 0x1f, 0x4d, 0xae, 0xad, 0x14, 0xae, 0xb4, 0x31, 0x11, 0xd0, 0xa8, 0xfc, 0x50, + 0x58, 0x6c, 0x29, 0xfd, 0x0b, 0x70, 0x2b, 0x51, 0x09, 0x4a, 0x2b, 0x17, 0x85, 0xd1, 0xba, 0xda, + 0x97, 0xe4, 0x24, 0xe7, 0x9e, 0xb9, 0x3b, 0xbb, 0x64, 0x63, 0x66, 0x41, 0xea, 0xc4, 0xdf, 0xc2, + 0xc4, 0xd8, 0x95, 0x3f, 0x80, 0x9d, 0x99, 0x31, 0x03, 0x42, 0x3e, 0xdb, 0x50, 0x37, 0xed, 0xc2, + 0x12, 0xf9, 0xf2, 0xbe, 0xef, 0x7b, 0xdf, 0xbd, 0xfb, 0x1e, 0xb6, 0x98, 0x48, 0x61, 0xee, 0xd0, + 0x98, 0x3b, 0xe9, 0xd0, 0x91, 0x90, 0x68, 0x66, 0xc7, 0x12, 0x34, 0x90, 0x75, 0x53, 0xb1, 0x69, + 0xcc, 0xed, 0x74, 0xd8, 0x7b, 0x50, 0xc1, 0x05, 0x20, 0x99, 0x73, 0x46, 0x55, 0x81, 0xed, 0x3d, + 0x5d, 0xae, 0x06, 0x20, 0xc6, 0x7c, 0xe2, 0x2b, 0x48, 0x64, 0x50, 0xc2, 0x9e, 0x2f, 0x37, 0xcb, + 0x7f, 0xfd, 0x00, 0x66, 0x31, 0x08, 0x26, 0xb4, 0x2a, 0xa0, 0x8f, 0x26, 0x00, 0x93, 0x88, 0x39, + 0xe6, 0x74, 0x96, 0x8c, 0x9d, 0x73, 0x49, 0xe3, 0x98, 0xc9, 0xbf, 0xf5, 0x24, 0x8c, 0xa9, 0x43, + 0x85, 0x00, 0x4d, 0x35, 0x07, 0xa1, 0x9c, 0x19, 0x9f, 0x48, 0x5a, 0xba, 0xef, 0x3d, 0x5c, 0xaa, + 0x2b, 0x4d, 0x75, 0x52, 0xd2, 0xbb, 0x29, 0x8d, 0x78, 0x48, 0x35, 0x73, 0xca, 0x8f, 0xbc, 0xb0, + 0xfb, 0xa3, 0x81, 0x89, 0x97, 0x59, 0xda, 0x37, 0xfe, 0x13, 0x69, 0xd8, 0x84, 0xe0, 0xba, 0xa0, + 0x33, 0x66, 0xa1, 0x3e, 0x1a, 0xb4, 0x3d, 0xf3, 0x4d, 0x0e, 0xf0, 0x46, 0xca, 0xa5, 0x4e, 0x68, + 0xe4, 0x4f, 0x41, 0x69, 0x65, 0xad, 0xf4, 0x6b, 0x83, 0xb5, 0xe1, 0x8e, 0x7d, 0x75, 0x70, 0x76, + 0x3e, 0xd2, 0x51, 0x0e, 0x3c, 0x04, 0xa5, 0xbd, 0xf5, 0xf4, 0xdf, 0x41, 0x91, 0x67, 0xb8, 0x9e, + 0x4e, 0x43, 0x65, 0xb5, 0xfb, 0x68, 0xb0, 0x36, 0x24, 0x55, 0xf2, 0x68, 0x1a, 0x2a, 0xcf, 0xd4, + 0xc9, 0x01, 0xde, 0xe2, 0x42, 0x33, 0x29, 0x68, 0xe4, 0x83, 0x88, 0xe6, 0xfe, 0x94, 0xd1, 0x90, + 0x49, 0x65, 0xd5, 0xfa, 0xb5, 0x41, 0xdb, 0xed, 0x2c, 0xdc, 0x8d, 0x0b, 0x84, 0x77, 0x5b, 0xb2, + 0xf9, 0x0d, 0xa1, 0x4b, 0x74, 0xc7, 0xdb, 0x2c, 0xe1, 0xc7, 0x22, 0x9a, 0x1f, 0xe6, 0x60, 0x32, + 0xc6, 0x5d, 0xc9, 0x54, 0x0c, 0x42, 0xb1, 0x52, 0xc0, 0xd7, 0xe0, 0xd3, 0x30, 0xb4, 0xea, 0xc6, + 0xfd, 0x93, 0xaa, 0x81, 0xec, 0x29, 0xed, 0x9c, 0x3c, 0xa2, 0x51, 0xc2, 0x8e, 0xe3, 0x6c, 0x1c, + 0x6e, 0x7b, 0xe1, 0x36, 0x2f, 0x50, 0xad, 0xf3, 0x73, 0xd5, 0xbb, 0x57, 0xea, 0x15, 0x2d, 0xde, + 0xc2, 0x8b, 0x30, 0x24, 0x47, 0xb8, 0x77, 0x53, 0x1f, 0xc9, 0x66, 0x90, 0x32, 0xab, 0x71, 0x8b, + 0xe5, 0xee, 0x92, 0x96, 0x67, 0x08, 0x24, 0xc4, 0xdb, 0x92, 0xbd, 0x4f, 0x98, 0xd2, 0xd7, 0x5d, + 0x37, 0xff, 0xcf, 0xf5, 0x66, 0x21, 0x57, 0x31, 0xfd, 0x0a, 0xdf, 0xbf, 0xa1, 0x4b, 0xe1, 0xb9, + 0x75, 0x8b, 0xe7, 0xed, 0xeb, 0x4a, 0x85, 0xe5, 0xd7, 0xf8, 0xf1, 0x0c, 0x94, 0xf6, 0x55, 0xcc, + 0x02, 0x3e, 0xe6, 0x41, 0x21, 0xe9, 0xcf, 0x92, 0x22, 0x90, 0xfe, 0x39, 0x17, 0xca, 0xc2, 0x7d, + 0x34, 0x68, 0x79, 0x3b, 0x19, 0xf4, 0xb4, 0x40, 0xe6, 0x4a, 0x47, 0x25, 0xee, 0x1d, 0x17, 0x8a, + 0xbc, 0xc4, 0x77, 0xcb, 0xa0, 0xfa, 0x41, 0x94, 0x28, 0x9d, 0xbd, 0xfc, 0xaa, 0x89, 0x4c, 0xcf, + 0xce, 0x57, 0xc5, 0x2e, 0x57, 0xc5, 0x76, 0x01, 0x22, 0x73, 0x6f, 0xaf, 0x53, 0x92, 0xf6, 0x0b, + 0xce, 0xee, 0x08, 0xd7, 0xb3, 0x50, 0x91, 0x37, 0x78, 0xa3, 0xb2, 0xa1, 0x26, 0xd9, 0x4b, 0xe1, + 0x35, 0x83, 0xcc, 0x37, 0xe1, 0xd4, 0xc0, 0xdc, 0xd6, 0xc2, 0x6d, 0x7c, 0x42, 0x2b, 0x1d, 0xe4, + 0xad, 0x07, 0x57, 0xff, 0x3f, 0xfe, 0xf5, 0xe5, 0xf7, 0xe7, 0x46, 0x97, 0x6c, 0xe5, 0xfc, 0xbc, + 0x56, 0x84, 0x3f, 0xdd, 0xfb, 0xfa, 0xf1, 0xf2, 0x7b, 0x73, 0xa5, 0x83, 0x70, 0x8f, 0x43, 0xde, + 0x21, 0x96, 0xf0, 0x61, 0x5e, 0x69, 0xe6, 0x62, 0xb3, 0x77, 0x27, 0xd9, 0x2d, 0x4e, 0xd0, 0x59, + 0xd3, 0x5c, 0x67, 0xef, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0x5f, 0x3d, 0xf9, 0xa1, 0x04, + 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/route.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,310 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/route.proto + +package envoy_api_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _route_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on RouteConfiguration with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RouteConfiguration) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Name + + for idx, item := range m.GetVirtualHosts() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteConfigurationValidationError{ + field: fmt.Sprintf("VirtualHosts[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetVhds()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteConfigurationValidationError{ + field: "Vhds", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetInternalOnlyHeaders() { + _, _ = idx, item + + if !_RouteConfiguration_InternalOnlyHeaders_Pattern.MatchString(item) { + return RouteConfigurationValidationError{ + field: fmt.Sprintf("InternalOnlyHeaders[%v]", idx), + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + } + + if len(m.GetResponseHeadersToAdd()) > 1000 { + return RouteConfigurationValidationError{ + field: "ResponseHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetResponseHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteConfigurationValidationError{ + field: fmt.Sprintf("ResponseHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetResponseHeadersToRemove() { + _, _ = idx, item + + if !_RouteConfiguration_ResponseHeadersToRemove_Pattern.MatchString(item) { + return RouteConfigurationValidationError{ + field: fmt.Sprintf("ResponseHeadersToRemove[%v]", idx), + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + } + + if len(m.GetRequestHeadersToAdd()) > 1000 { + return RouteConfigurationValidationError{ + field: "RequestHeadersToAdd", + reason: "value must contain no more than 1000 item(s)", + } + } + + for idx, item := range m.GetRequestHeadersToAdd() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteConfigurationValidationError{ + field: fmt.Sprintf("RequestHeadersToAdd[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetRequestHeadersToRemove() { + _, _ = idx, item + + if !_RouteConfiguration_RequestHeadersToRemove_Pattern.MatchString(item) { + return RouteConfigurationValidationError{ + field: fmt.Sprintf("RequestHeadersToRemove[%v]", idx), + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + } + + // no validation rules for MostSpecificHeaderMutationsWins + + if v, ok := interface{}(m.GetValidateClusters()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RouteConfigurationValidationError{ + field: "ValidateClusters", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RouteConfigurationValidationError is the validation error returned by +// RouteConfiguration.Validate if the designated constraints aren't met. +type RouteConfigurationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RouteConfigurationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RouteConfigurationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RouteConfigurationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RouteConfigurationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RouteConfigurationValidationError) ErrorName() string { + return "RouteConfigurationValidationError" +} + +// Error satisfies the builtin error interface +func (e RouteConfigurationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRouteConfiguration.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RouteConfigurationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RouteConfigurationValidationError{} + +var _RouteConfiguration_InternalOnlyHeaders_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RouteConfiguration_ResponseHeadersToRemove_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +var _RouteConfiguration_RequestHeadersToRemove_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on Vhds with the rules defined in the proto +// definition for this message. If any rules are violated, an error is returned. +func (m *Vhds) Validate() error { + if m == nil { + return nil + } + + if m.GetConfigSource() == nil { + return VhdsValidationError{ + field: "ConfigSource", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetConfigSource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return VhdsValidationError{ + field: "ConfigSource", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// VhdsValidationError is the validation error returned by Vhds.Validate if the +// designated constraints aren't met. +type VhdsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e VhdsValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e VhdsValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e VhdsValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e VhdsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e VhdsValidationError) ErrorName() string { return "VhdsValidationError" } + +// Error satisfies the builtin error interface +func (e VhdsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sVhds.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = VhdsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = VhdsValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,219 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/scoped_route.proto + +package envoy_api_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ScopedRouteConfiguration struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + RouteConfigurationName string `protobuf:"bytes,2,opt,name=route_configuration_name,json=routeConfigurationName,proto3" json:"route_configuration_name,omitempty"` + Key *ScopedRouteConfiguration_Key `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRouteConfiguration) Reset() { *m = ScopedRouteConfiguration{} } +func (m *ScopedRouteConfiguration) String() string { return proto.CompactTextString(m) } +func (*ScopedRouteConfiguration) ProtoMessage() {} +func (*ScopedRouteConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_e1eeeae73441b687, []int{0} +} + +func (m *ScopedRouteConfiguration) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRouteConfiguration.Unmarshal(m, b) +} +func (m *ScopedRouteConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRouteConfiguration.Marshal(b, m, deterministic) +} +func (m *ScopedRouteConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRouteConfiguration.Merge(m, src) +} +func (m *ScopedRouteConfiguration) XXX_Size() int { + return xxx_messageInfo_ScopedRouteConfiguration.Size(m) +} +func (m *ScopedRouteConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRouteConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRouteConfiguration proto.InternalMessageInfo + +func (m *ScopedRouteConfiguration) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ScopedRouteConfiguration) GetRouteConfigurationName() string { + if m != nil { + return m.RouteConfigurationName + } + return "" +} + +func (m *ScopedRouteConfiguration) GetKey() *ScopedRouteConfiguration_Key { + if m != nil { + return m.Key + } + return nil +} + +type ScopedRouteConfiguration_Key struct { + Fragments []*ScopedRouteConfiguration_Key_Fragment `protobuf:"bytes,1,rep,name=fragments,proto3" json:"fragments,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRouteConfiguration_Key) Reset() { *m = ScopedRouteConfiguration_Key{} } +func (m *ScopedRouteConfiguration_Key) String() string { return proto.CompactTextString(m) } +func (*ScopedRouteConfiguration_Key) ProtoMessage() {} +func (*ScopedRouteConfiguration_Key) Descriptor() ([]byte, []int) { + return fileDescriptor_e1eeeae73441b687, []int{0, 0} +} + +func (m *ScopedRouteConfiguration_Key) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRouteConfiguration_Key.Unmarshal(m, b) +} +func (m *ScopedRouteConfiguration_Key) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRouteConfiguration_Key.Marshal(b, m, deterministic) +} +func (m *ScopedRouteConfiguration_Key) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRouteConfiguration_Key.Merge(m, src) +} +func (m *ScopedRouteConfiguration_Key) XXX_Size() int { + return xxx_messageInfo_ScopedRouteConfiguration_Key.Size(m) +} +func (m *ScopedRouteConfiguration_Key) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRouteConfiguration_Key.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRouteConfiguration_Key proto.InternalMessageInfo + +func (m *ScopedRouteConfiguration_Key) GetFragments() []*ScopedRouteConfiguration_Key_Fragment { + if m != nil { + return m.Fragments + } + return nil +} + +type ScopedRouteConfiguration_Key_Fragment struct { + // Types that are valid to be assigned to Type: + // *ScopedRouteConfiguration_Key_Fragment_StringKey + Type isScopedRouteConfiguration_Key_Fragment_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRouteConfiguration_Key_Fragment) Reset() { *m = ScopedRouteConfiguration_Key_Fragment{} } +func (m *ScopedRouteConfiguration_Key_Fragment) String() string { return proto.CompactTextString(m) } +func (*ScopedRouteConfiguration_Key_Fragment) ProtoMessage() {} +func (*ScopedRouteConfiguration_Key_Fragment) Descriptor() ([]byte, []int) { + return fileDescriptor_e1eeeae73441b687, []int{0, 0, 0} +} + +func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Unmarshal(m, b) +} +func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Marshal(b, m, deterministic) +} +func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Merge(m, src) +} +func (m *ScopedRouteConfiguration_Key_Fragment) XXX_Size() int { + return xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.Size(m) +} +func (m *ScopedRouteConfiguration_Key_Fragment) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRouteConfiguration_Key_Fragment proto.InternalMessageInfo + +type isScopedRouteConfiguration_Key_Fragment_Type interface { + isScopedRouteConfiguration_Key_Fragment_Type() +} + +type ScopedRouteConfiguration_Key_Fragment_StringKey struct { + StringKey string `protobuf:"bytes,1,opt,name=string_key,json=stringKey,proto3,oneof"` +} + +func (*ScopedRouteConfiguration_Key_Fragment_StringKey) isScopedRouteConfiguration_Key_Fragment_Type() { +} + +func (m *ScopedRouteConfiguration_Key_Fragment) GetType() isScopedRouteConfiguration_Key_Fragment_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *ScopedRouteConfiguration_Key_Fragment) GetStringKey() string { + if x, ok := m.GetType().(*ScopedRouteConfiguration_Key_Fragment_StringKey); ok { + return x.StringKey + } + return "" +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ScopedRouteConfiguration_Key_Fragment) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ScopedRouteConfiguration_Key_Fragment_StringKey)(nil), + } +} + +func init() { + proto.RegisterType((*ScopedRouteConfiguration)(nil), "envoy.api.v2.ScopedRouteConfiguration") + proto.RegisterType((*ScopedRouteConfiguration_Key)(nil), "envoy.api.v2.ScopedRouteConfiguration.Key") + proto.RegisterType((*ScopedRouteConfiguration_Key_Fragment)(nil), "envoy.api.v2.ScopedRouteConfiguration.Key.Fragment") +} + +func init() { proto.RegisterFile("envoy/api/v2/scoped_route.proto", fileDescriptor_e1eeeae73441b687) } + +var fileDescriptor_e1eeeae73441b687 = []byte{ + // 372 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0xef, 0x24, 0x6d, 0x6f, 0x3b, 0xbd, 0x8b, 0x12, 0xb8, 0xb7, 0x21, 0x17, 0x6d, 0x70, + 0x55, 0x5c, 0x4c, 0x20, 0xdd, 0xb8, 0x75, 0x84, 0x22, 0x14, 0xa4, 0x44, 0x5c, 0xb9, 0x08, 0x63, + 0x3b, 0x0d, 0x83, 0x76, 0x66, 0x98, 0x4c, 0x82, 0xd9, 0xb9, 0x76, 0x23, 0xb8, 0x72, 0xe1, 0x93, + 0xf8, 0x04, 0x6e, 0x7d, 0x04, 0x5f, 0xc1, 0x95, 0x74, 0x21, 0x92, 0x49, 0x8b, 0x2d, 0x45, 0x70, + 0x17, 0xe6, 0x9c, 0xff, 0x3b, 0x5f, 0xce, 0x81, 0x3d, 0xca, 0x73, 0x51, 0x04, 0x44, 0xb2, 0x20, + 0x0f, 0x83, 0x74, 0x22, 0x24, 0x9d, 0xc6, 0x4a, 0x64, 0x9a, 0x22, 0xa9, 0x84, 0x16, 0xce, 0x1f, + 0xd3, 0x80, 0x88, 0x64, 0x28, 0x0f, 0xbd, 0xdd, 0x6c, 0x2a, 0x49, 0x40, 0x38, 0x17, 0x9a, 0x68, + 0x26, 0x78, 0x1a, 0xcc, 0x59, 0xa2, 0xc8, 0xaa, 0xdb, 0xdb, 0xd9, 0xaa, 0xa7, 0x9a, 0xe8, 0x2c, + 0x5d, 0x96, 0xbb, 0x39, 0xb9, 0x62, 0x53, 0xa2, 0x69, 0xb0, 0xfa, 0xa8, 0x0a, 0x7b, 0xaf, 0x16, + 0x74, 0x4f, 0xcd, 0xf0, 0xa8, 0x9c, 0x7d, 0x24, 0xf8, 0x8c, 0x25, 0x99, 0x32, 0x0c, 0xe7, 0x3f, + 0xac, 0x71, 0x32, 0xa7, 0x2e, 0xf0, 0x41, 0xbf, 0x85, 0x7f, 0x2f, 0x70, 0x4d, 0x59, 0x3e, 0x88, + 0xcc, 0xa3, 0x73, 0x08, 0x5d, 0xa3, 0x1b, 0x4f, 0xd6, 0x33, 0xb1, 0x09, 0x58, 0x9b, 0x81, 0x7f, + 0x6a, 0x8b, 0x7d, 0x52, 0x22, 0x86, 0xd0, 0xbe, 0xa4, 0x85, 0x6b, 0xfb, 0xa0, 0xdf, 0x0e, 0xf7, + 0xd1, 0xfa, 0x0f, 0xa3, 0xef, 0xa4, 0xd0, 0x88, 0x16, 0xb8, 0xb9, 0xc0, 0xf5, 0x5b, 0x60, 0x75, + 0x40, 0x54, 0x02, 0xbc, 0x47, 0x00, 0xed, 0x11, 0x2d, 0x9c, 0x73, 0xd8, 0x9a, 0x29, 0x92, 0xcc, + 0x29, 0xd7, 0xa9, 0x0b, 0x7c, 0xbb, 0xdf, 0x0e, 0x07, 0x3f, 0xa7, 0xa2, 0xe1, 0x32, 0x6b, 0xf0, + 0xf7, 0xc0, 0x6a, 0x82, 0xe8, 0x8b, 0xe7, 0x1d, 0xc0, 0xe6, 0xaa, 0xc1, 0xe9, 0x41, 0x98, 0x6a, + 0xc5, 0x78, 0x12, 0x97, 0xfe, 0x66, 0x3d, 0xc7, 0xbf, 0xa2, 0x56, 0xf5, 0x56, 0x0a, 0xb6, 0x61, + 0x4d, 0x17, 0x92, 0x3a, 0xf6, 0x3b, 0x06, 0xf8, 0xec, 0xed, 0xe1, 0xe3, 0xae, 0xde, 0x75, 0xfe, + 0x56, 0x2a, 0xd5, 0xbe, 0x50, 0x75, 0xeb, 0x7c, 0xf0, 0x74, 0xf3, 0xfc, 0xd2, 0xb0, 0x3a, 0x00, + 0x7a, 0x4c, 0x54, 0xb2, 0x52, 0x89, 0xeb, 0x62, 0xc3, 0x1b, 0x77, 0xd6, 0xc4, 0xc7, 0xe5, 0xe1, + 0xc6, 0xe0, 0xa2, 0x61, 0x2e, 0x38, 0xf8, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x93, 0xa7, 0xd0, + 0x4a, 0x02, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/scoped_route.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,306 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/scoped_route.proto + +package envoy_api_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _scoped_route_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on ScopedRouteConfiguration with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ScopedRouteConfiguration) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return ScopedRouteConfigurationValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetRouteConfigurationName()) < 1 { + return ScopedRouteConfigurationValidationError{ + field: "RouteConfigurationName", + reason: "value length must be at least 1 bytes", + } + } + + if m.GetKey() == nil { + return ScopedRouteConfigurationValidationError{ + field: "Key", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRouteConfigurationValidationError{ + field: "Key", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ScopedRouteConfigurationValidationError is the validation error returned by +// ScopedRouteConfiguration.Validate if the designated constraints aren't met. +type ScopedRouteConfigurationValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRouteConfigurationValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ScopedRouteConfigurationValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ScopedRouteConfigurationValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ScopedRouteConfigurationValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ScopedRouteConfigurationValidationError) ErrorName() string { + return "ScopedRouteConfigurationValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRouteConfigurationValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRouteConfiguration.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRouteConfigurationValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRouteConfigurationValidationError{} + +// Validate checks the field values on ScopedRouteConfiguration_Key with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ScopedRouteConfiguration_Key) Validate() error { + if m == nil { + return nil + } + + if len(m.GetFragments()) < 1 { + return ScopedRouteConfiguration_KeyValidationError{ + field: "Fragments", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetFragments() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRouteConfiguration_KeyValidationError{ + field: fmt.Sprintf("Fragments[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ScopedRouteConfiguration_KeyValidationError is the validation error returned +// by ScopedRouteConfiguration_Key.Validate if the designated constraints +// aren't met. +type ScopedRouteConfiguration_KeyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRouteConfiguration_KeyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ScopedRouteConfiguration_KeyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ScopedRouteConfiguration_KeyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ScopedRouteConfiguration_KeyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ScopedRouteConfiguration_KeyValidationError) ErrorName() string { + return "ScopedRouteConfiguration_KeyValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRouteConfiguration_KeyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRouteConfiguration_Key.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRouteConfiguration_KeyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRouteConfiguration_KeyValidationError{} + +// Validate checks the field values on ScopedRouteConfiguration_Key_Fragment +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *ScopedRouteConfiguration_Key_Fragment) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *ScopedRouteConfiguration_Key_Fragment_StringKey: + // no validation rules for StringKey + + default: + return ScopedRouteConfiguration_Key_FragmentValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ScopedRouteConfiguration_Key_FragmentValidationError is the validation error +// returned by ScopedRouteConfiguration_Key_Fragment.Validate if the +// designated constraints aren't met. +type ScopedRouteConfiguration_Key_FragmentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRouteConfiguration_Key_FragmentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ScopedRouteConfiguration_Key_FragmentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ScopedRouteConfiguration_Key_FragmentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ScopedRouteConfiguration_Key_FragmentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ScopedRouteConfiguration_Key_FragmentValidationError) ErrorName() string { + return "ScopedRouteConfiguration_Key_FragmentValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRouteConfiguration_Key_FragmentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRouteConfiguration_Key_Fragment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRouteConfiguration_Key_FragmentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRouteConfiguration_Key_FragmentValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,310 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/api/v2/srds.proto + +package envoy_api_v2 + +import ( + context "context" + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type SrdsDummy struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SrdsDummy) Reset() { *m = SrdsDummy{} } +func (m *SrdsDummy) String() string { return proto.CompactTextString(m) } +func (*SrdsDummy) ProtoMessage() {} +func (*SrdsDummy) Descriptor() ([]byte, []int) { + return fileDescriptor_92f394721ede65e9, []int{0} +} + +func (m *SrdsDummy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SrdsDummy.Unmarshal(m, b) +} +func (m *SrdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SrdsDummy.Marshal(b, m, deterministic) +} +func (m *SrdsDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_SrdsDummy.Merge(m, src) +} +func (m *SrdsDummy) XXX_Size() int { + return xxx_messageInfo_SrdsDummy.Size(m) +} +func (m *SrdsDummy) XXX_DiscardUnknown() { + xxx_messageInfo_SrdsDummy.DiscardUnknown(m) +} + +var xxx_messageInfo_SrdsDummy proto.InternalMessageInfo + +func init() { + proto.RegisterType((*SrdsDummy)(nil), "envoy.api.v2.SrdsDummy") +} + +func init() { proto.RegisterFile("envoy/api/v2/srds.proto", fileDescriptor_92f394721ede65e9) } + +var fileDescriptor_92f394721ede65e9 = []byte{ + // 380 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0xbd, 0x4e, 0xe3, 0x40, + 0x14, 0x85, 0x77, 0x12, 0x25, 0xab, 0x9d, 0xdd, 0x62, 0xe3, 0x62, 0x17, 0x99, 0xfc, 0xa0, 0x00, + 0x02, 0x21, 0x62, 0xa3, 0xa4, 0x4b, 0x19, 0x22, 0xea, 0x28, 0x2e, 0x29, 0xd0, 0x60, 0x0f, 0x66, + 0xa4, 0xd8, 0xd7, 0xcc, 0x8c, 0x2d, 0xdc, 0xa1, 0x54, 0x88, 0x86, 0x02, 0x81, 0x78, 0x00, 0x9e, + 0x82, 0x27, 0xa0, 0x45, 0xbc, 0x02, 0x4f, 0x00, 0x3d, 0x42, 0x19, 0xc7, 0x90, 0x21, 0x82, 0x8a, + 0xfa, 0x7c, 0xe7, 0xfe, 0x9d, 0x8b, 0xff, 0xd3, 0x30, 0x81, 0xd4, 0x26, 0x11, 0xb3, 0x93, 0xb6, + 0x2d, 0xb8, 0x27, 0xac, 0x88, 0x83, 0x04, 0xe3, 0x8f, 0x12, 0x2c, 0x12, 0x31, 0x2b, 0x69, 0x9b, + 0x55, 0x0d, 0xf3, 0x98, 0x70, 0x21, 0xa1, 0x3c, 0xcd, 0x58, 0xb3, 0xea, 0x03, 0xf8, 0x23, 0xaa, + 0x64, 0x12, 0x86, 0x20, 0x89, 0x64, 0x10, 0x4e, 0x2b, 0x99, 0x4b, 0x53, 0xef, 0xbb, 0x60, 0x73, + 0x2a, 0x20, 0xe6, 0x2e, 0x9d, 0x12, 0xf5, 0xd8, 0x8b, 0x88, 0x06, 0x04, 0xcc, 0xe7, 0x44, 0xe6, + 0x7a, 0x6d, 0x4e, 0x17, 0x92, 0xc8, 0x38, 0x6f, 0xd0, 0xd0, 0x77, 0x70, 0x21, 0xa2, 0xde, 0x1e, + 0x87, 0x38, 0xf7, 0x37, 0x7f, 0xe3, 0x5f, 0x0e, 0xf7, 0x44, 0x3f, 0x0e, 0x82, 0xb4, 0x7d, 0x59, + 0xc4, 0x55, 0x47, 0x31, 0xc3, 0x09, 0x22, 0xfa, 0xf9, 0x32, 0x0e, 0xe5, 0x09, 0x73, 0xa9, 0xb1, + 0x8b, 0x0d, 0x47, 0x72, 0x4a, 0x82, 0x59, 0xca, 0xa8, 0x5b, 0xb3, 0x07, 0xb1, 0xde, 0x5c, 0x43, + 0x7a, 0x14, 0x53, 0x21, 0xcd, 0xc6, 0xa7, 0xba, 0x88, 0x20, 0x14, 0xb4, 0xf9, 0x63, 0x1d, 0x6d, + 0x21, 0xc3, 0xc3, 0x95, 0x3e, 0x1d, 0x49, 0xa2, 0xd5, 0x5e, 0xfe, 0xe0, 0x9d, 0x00, 0x73, 0x0d, + 0x56, 0xbe, 0x86, 0xb4, 0x2e, 0x63, 0x84, 0x2b, 0x3b, 0x54, 0xba, 0x87, 0xdf, 0xbb, 0xc2, 0xe6, + 0xf8, 0xe1, 0xf1, 0xa2, 0x50, 0x6b, 0x2e, 0x6a, 0x4f, 0xd0, 0xcd, 0x2e, 0xde, 0x52, 0x17, 0x17, + 0x0a, 0x29, 0x76, 0xd1, 0x86, 0xd9, 0x3a, 0xbb, 0xb9, 0x7a, 0xfe, 0xb9, 0x86, 0x57, 0xb5, 0xaa, + 0x33, 0x13, 0x6d, 0x43, 0x78, 0xc0, 0xfc, 0x98, 0xab, 0x4c, 0x7b, 0xc3, 0xa7, 0xeb, 0x97, 0xf3, + 0xd2, 0x82, 0xf1, 0x2f, 0xc3, 0x45, 0x96, 0x86, 0x95, 0xe5, 0x98, 0x74, 0x6e, 0x4f, 0xee, 0xee, + 0xcb, 0x85, 0xbf, 0x08, 0x9b, 0x0c, 0xb2, 0x39, 0x23, 0x0e, 0xc7, 0xa9, 0x36, 0x72, 0x4f, 0xc5, + 0x3c, 0x98, 0x64, 0x3e, 0x40, 0xa7, 0x08, 0x0d, 0x4a, 0xfb, 0x65, 0xf5, 0x01, 0x9d, 0xd7, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xad, 0x06, 0xf9, 0x5a, 0xe8, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// ScopedRoutesDiscoveryServiceClient is the client API for ScopedRoutesDiscoveryService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ScopedRoutesDiscoveryServiceClient interface { + StreamScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_StreamScopedRoutesClient, error) + DeltaScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_DeltaScopedRoutesClient, error) + FetchScopedRoutes(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) +} + +type scopedRoutesDiscoveryServiceClient struct { + cc *grpc.ClientConn +} + +func NewScopedRoutesDiscoveryServiceClient(cc *grpc.ClientConn) ScopedRoutesDiscoveryServiceClient { + return &scopedRoutesDiscoveryServiceClient{cc} +} + +func (c *scopedRoutesDiscoveryServiceClient) StreamScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_StreamScopedRoutesClient, error) { + stream, err := c.cc.NewStream(ctx, &_ScopedRoutesDiscoveryService_serviceDesc.Streams[0], "/envoy.api.v2.ScopedRoutesDiscoveryService/StreamScopedRoutes", opts...) + if err != nil { + return nil, err + } + x := &scopedRoutesDiscoveryServiceStreamScopedRoutesClient{stream} + return x, nil +} + +type ScopedRoutesDiscoveryService_StreamScopedRoutesClient interface { + Send(*DiscoveryRequest) error + Recv() (*DiscoveryResponse, error) + grpc.ClientStream +} + +type scopedRoutesDiscoveryServiceStreamScopedRoutesClient struct { + grpc.ClientStream +} + +func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesClient) Send(m *DiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesClient) Recv() (*DiscoveryResponse, error) { + m := new(DiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *scopedRoutesDiscoveryServiceClient) DeltaScopedRoutes(ctx context.Context, opts ...grpc.CallOption) (ScopedRoutesDiscoveryService_DeltaScopedRoutesClient, error) { + stream, err := c.cc.NewStream(ctx, &_ScopedRoutesDiscoveryService_serviceDesc.Streams[1], "/envoy.api.v2.ScopedRoutesDiscoveryService/DeltaScopedRoutes", opts...) + if err != nil { + return nil, err + } + x := &scopedRoutesDiscoveryServiceDeltaScopedRoutesClient{stream} + return x, nil +} + +type ScopedRoutesDiscoveryService_DeltaScopedRoutesClient interface { + Send(*DeltaDiscoveryRequest) error + Recv() (*DeltaDiscoveryResponse, error) + grpc.ClientStream +} + +type scopedRoutesDiscoveryServiceDeltaScopedRoutesClient struct { + grpc.ClientStream +} + +func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesClient) Send(m *DeltaDiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesClient) Recv() (*DeltaDiscoveryResponse, error) { + m := new(DeltaDiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *scopedRoutesDiscoveryServiceClient) FetchScopedRoutes(ctx context.Context, in *DiscoveryRequest, opts ...grpc.CallOption) (*DiscoveryResponse, error) { + out := new(DiscoveryResponse) + err := c.cc.Invoke(ctx, "/envoy.api.v2.ScopedRoutesDiscoveryService/FetchScopedRoutes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ScopedRoutesDiscoveryServiceServer is the server API for ScopedRoutesDiscoveryService service. +type ScopedRoutesDiscoveryServiceServer interface { + StreamScopedRoutes(ScopedRoutesDiscoveryService_StreamScopedRoutesServer) error + DeltaScopedRoutes(ScopedRoutesDiscoveryService_DeltaScopedRoutesServer) error + FetchScopedRoutes(context.Context, *DiscoveryRequest) (*DiscoveryResponse, error) +} + +// UnimplementedScopedRoutesDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedScopedRoutesDiscoveryServiceServer struct { +} + +func (*UnimplementedScopedRoutesDiscoveryServiceServer) StreamScopedRoutes(srv ScopedRoutesDiscoveryService_StreamScopedRoutesServer) error { + return status.Errorf(codes.Unimplemented, "method StreamScopedRoutes not implemented") +} +func (*UnimplementedScopedRoutesDiscoveryServiceServer) DeltaScopedRoutes(srv ScopedRoutesDiscoveryService_DeltaScopedRoutesServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaScopedRoutes not implemented") +} +func (*UnimplementedScopedRoutesDiscoveryServiceServer) FetchScopedRoutes(ctx context.Context, req *DiscoveryRequest) (*DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchScopedRoutes not implemented") +} + +func RegisterScopedRoutesDiscoveryServiceServer(s *grpc.Server, srv ScopedRoutesDiscoveryServiceServer) { + s.RegisterService(&_ScopedRoutesDiscoveryService_serviceDesc, srv) +} + +func _ScopedRoutesDiscoveryService_StreamScopedRoutes_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ScopedRoutesDiscoveryServiceServer).StreamScopedRoutes(&scopedRoutesDiscoveryServiceStreamScopedRoutesServer{stream}) +} + +type ScopedRoutesDiscoveryService_StreamScopedRoutesServer interface { + Send(*DiscoveryResponse) error + Recv() (*DiscoveryRequest, error) + grpc.ServerStream +} + +type scopedRoutesDiscoveryServiceStreamScopedRoutesServer struct { + grpc.ServerStream +} + +func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesServer) Send(m *DiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *scopedRoutesDiscoveryServiceStreamScopedRoutesServer) Recv() (*DiscoveryRequest, error) { + m := new(DiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _ScopedRoutesDiscoveryService_DeltaScopedRoutes_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ScopedRoutesDiscoveryServiceServer).DeltaScopedRoutes(&scopedRoutesDiscoveryServiceDeltaScopedRoutesServer{stream}) +} + +type ScopedRoutesDiscoveryService_DeltaScopedRoutesServer interface { + Send(*DeltaDiscoveryResponse) error + Recv() (*DeltaDiscoveryRequest, error) + grpc.ServerStream +} + +type scopedRoutesDiscoveryServiceDeltaScopedRoutesServer struct { + grpc.ServerStream +} + +func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesServer) Send(m *DeltaDiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *scopedRoutesDiscoveryServiceDeltaScopedRoutesServer) Recv() (*DeltaDiscoveryRequest, error) { + m := new(DeltaDiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _ScopedRoutesDiscoveryService_FetchScopedRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DiscoveryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ScopedRoutesDiscoveryServiceServer).FetchScopedRoutes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/envoy.api.v2.ScopedRoutesDiscoveryService/FetchScopedRoutes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ScopedRoutesDiscoveryServiceServer).FetchScopedRoutes(ctx, req.(*DiscoveryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ScopedRoutesDiscoveryService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "envoy.api.v2.ScopedRoutesDiscoveryService", + HandlerType: (*ScopedRoutesDiscoveryServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FetchScopedRoutes", + Handler: _ScopedRoutesDiscoveryService_FetchScopedRoutes_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamScopedRoutes", + Handler: _ScopedRoutesDiscoveryService_StreamScopedRoutes_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "DeltaScopedRoutes", + Handler: _ScopedRoutesDiscoveryService_DeltaScopedRoutes_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "envoy/api/v2/srds.proto", +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/api/v2/srds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/api/v2/srds.proto + +package envoy_api_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _srds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on SrdsDummy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *SrdsDummy) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// SrdsDummyValidationError is the validation error returned by +// SrdsDummy.Validate if the designated constraints aren't met. +type SrdsDummyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SrdsDummyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SrdsDummyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SrdsDummyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SrdsDummyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SrdsDummyValidationError) ErrorName() string { return "SrdsDummyValidationError" } + +// Error satisfies the builtin error interface +func (e SrdsDummyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSrdsDummy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SrdsDummyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SrdsDummyValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,20 +1,19 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/config/filter/accesslog/v2/accesslog.proto -package v2 +package envoy_config_filter_accesslog_v2 import ( fmt "fmt" - io "io" - math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" route "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + _struct "github.com/golang/protobuf/ptypes/struct" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -26,16 +25,13 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type ComparisonFilter_Op int32 const ( - // = ComparisonFilter_EQ ComparisonFilter_Op = 0 - // >= ComparisonFilter_GE ComparisonFilter_Op = 1 - // <= ComparisonFilter_LE ComparisonFilter_Op = 2 ) @@ -130,22 +126,8 @@ } type AccessLog struct { - // The name of the access log implementation to instantiate. The name must - // match a statically registered access log. Current built-in loggers include: - // - // #. "envoy.file_access_log" - // #. "envoy.http_grpc_access_log" - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Filter which is used to determine if the access log needs to be written. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Filter *AccessLogFilter `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"` - // Custom configuration that depends on the access log being instantiated. Built-in - // configurations include: - // - // #. "envoy.file_access_log": :ref:`FileAccessLog - // ` - // #. "envoy.http_grpc_access_log": :ref:`HttpGrpcAccessLogConfig - // ` - // // Types that are valid to be assigned to ConfigType: // *AccessLog_Config // *AccessLog_TypedConfig @@ -161,26 +143,18 @@ func (*AccessLog) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{0} } + func (m *AccessLog) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AccessLog.Unmarshal(m, b) } func (m *AccessLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AccessLog.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_AccessLog.Marshal(b, m, deterministic) } func (m *AccessLog) XXX_Merge(src proto.Message) { xxx_messageInfo_AccessLog.Merge(m, src) } func (m *AccessLog) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AccessLog.Size(m) } func (m *AccessLog) XXX_DiscardUnknown() { xxx_messageInfo_AccessLog.DiscardUnknown(m) @@ -188,20 +162,34 @@ var xxx_messageInfo_AccessLog proto.InternalMessageInfo +func (m *AccessLog) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *AccessLog) GetFilter() *AccessLogFilter { + if m != nil { + return m.Filter + } + return nil +} + type isAccessLog_ConfigType interface { isAccessLog_ConfigType() - MarshalTo([]byte) (int, error) - Size() int } type AccessLog_Config struct { - Config *types.Struct `protobuf:"bytes,3,opt,name=config,proto3,oneof"` + Config *_struct.Struct `protobuf:"bytes,3,opt,name=config,proto3,oneof"` } + type AccessLog_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"` + TypedConfig *any.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -func (*AccessLog_Config) isAccessLog_ConfigType() {} +func (*AccessLog_Config) isAccessLog_ConfigType() {} + func (*AccessLog_TypedConfig) isAccessLog_ConfigType() {} func (m *AccessLog) GetConfigType() isAccessLog_ConfigType { @@ -211,108 +199,29 @@ return nil } -func (m *AccessLog) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *AccessLog) GetFilter() *AccessLogFilter { - if m != nil { - return m.Filter - } - return nil -} - -func (m *AccessLog) GetConfig() *types.Struct { +// Deprecated: Do not use. +func (m *AccessLog) GetConfig() *_struct.Struct { if x, ok := m.GetConfigType().(*AccessLog_Config); ok { return x.Config } return nil } -func (m *AccessLog) GetTypedConfig() *types.Any { +func (m *AccessLog) GetTypedConfig() *any.Any { if x, ok := m.GetConfigType().(*AccessLog_TypedConfig); ok { return x.TypedConfig } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*AccessLog) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _AccessLog_OneofMarshaler, _AccessLog_OneofUnmarshaler, _AccessLog_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*AccessLog) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*AccessLog_Config)(nil), (*AccessLog_TypedConfig)(nil), } } -func _AccessLog_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*AccessLog) - // config_type - switch x := m.ConfigType.(type) { - case *AccessLog_Config: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *AccessLog_TypedConfig: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("AccessLog.ConfigType has unexpected type %T", x) - } - return nil -} - -func _AccessLog_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*AccessLog) - switch tag { - case 3: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &AccessLog_Config{msg} - return true, err - case 4: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &AccessLog_TypedConfig{msg} - return true, err - default: - return false, nil - } -} - -func _AccessLog_OneofSizer(msg proto.Message) (n int) { - m := msg.(*AccessLog) - // config_type - switch x := m.ConfigType.(type) { - case *AccessLog_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLog_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type AccessLogFilter struct { // Types that are valid to be assigned to FilterSpecifier: // *AccessLogFilter_StatusCodeFilter @@ -325,6 +234,7 @@ // *AccessLogFilter_HeaderFilter // *AccessLogFilter_ResponseFlagFilter // *AccessLogFilter_GrpcStatusFilter + // *AccessLogFilter_ExtensionFilter FilterSpecifier isAccessLogFilter_FilterSpecifier `protobuf_oneof:"filter_specifier"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -337,26 +247,18 @@ func (*AccessLogFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{1} } + func (m *AccessLogFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AccessLogFilter.Unmarshal(m, b) } func (m *AccessLogFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AccessLogFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_AccessLogFilter.Marshal(b, m, deterministic) } func (m *AccessLogFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_AccessLogFilter.Merge(m, src) } func (m *AccessLogFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AccessLogFilter.Size(m) } func (m *AccessLogFilter) XXX_DiscardUnknown() { xxx_messageInfo_AccessLogFilter.DiscardUnknown(m) @@ -366,51 +268,73 @@ type isAccessLogFilter_FilterSpecifier interface { isAccessLogFilter_FilterSpecifier() - MarshalTo([]byte) (int, error) - Size() int } type AccessLogFilter_StatusCodeFilter struct { StatusCodeFilter *StatusCodeFilter `protobuf:"bytes,1,opt,name=status_code_filter,json=statusCodeFilter,proto3,oneof"` } + type AccessLogFilter_DurationFilter struct { DurationFilter *DurationFilter `protobuf:"bytes,2,opt,name=duration_filter,json=durationFilter,proto3,oneof"` } + type AccessLogFilter_NotHealthCheckFilter struct { NotHealthCheckFilter *NotHealthCheckFilter `protobuf:"bytes,3,opt,name=not_health_check_filter,json=notHealthCheckFilter,proto3,oneof"` } + type AccessLogFilter_TraceableFilter struct { TraceableFilter *TraceableFilter `protobuf:"bytes,4,opt,name=traceable_filter,json=traceableFilter,proto3,oneof"` } + type AccessLogFilter_RuntimeFilter struct { RuntimeFilter *RuntimeFilter `protobuf:"bytes,5,opt,name=runtime_filter,json=runtimeFilter,proto3,oneof"` } + type AccessLogFilter_AndFilter struct { AndFilter *AndFilter `protobuf:"bytes,6,opt,name=and_filter,json=andFilter,proto3,oneof"` } + type AccessLogFilter_OrFilter struct { OrFilter *OrFilter `protobuf:"bytes,7,opt,name=or_filter,json=orFilter,proto3,oneof"` } + type AccessLogFilter_HeaderFilter struct { HeaderFilter *HeaderFilter `protobuf:"bytes,8,opt,name=header_filter,json=headerFilter,proto3,oneof"` } + type AccessLogFilter_ResponseFlagFilter struct { ResponseFlagFilter *ResponseFlagFilter `protobuf:"bytes,9,opt,name=response_flag_filter,json=responseFlagFilter,proto3,oneof"` } + type AccessLogFilter_GrpcStatusFilter struct { GrpcStatusFilter *GrpcStatusFilter `protobuf:"bytes,10,opt,name=grpc_status_filter,json=grpcStatusFilter,proto3,oneof"` } -func (*AccessLogFilter_StatusCodeFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_DurationFilter) isAccessLogFilter_FilterSpecifier() {} +type AccessLogFilter_ExtensionFilter struct { + ExtensionFilter *ExtensionFilter `protobuf:"bytes,11,opt,name=extension_filter,json=extensionFilter,proto3,oneof"` +} + +func (*AccessLogFilter_StatusCodeFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_DurationFilter) isAccessLogFilter_FilterSpecifier() {} + func (*AccessLogFilter_NotHealthCheckFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_TraceableFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_RuntimeFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_AndFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_OrFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_HeaderFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_ResponseFlagFilter) isAccessLogFilter_FilterSpecifier() {} -func (*AccessLogFilter_GrpcStatusFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_TraceableFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_RuntimeFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_AndFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_OrFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_HeaderFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_ResponseFlagFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_GrpcStatusFilter) isAccessLogFilter_FilterSpecifier() {} + +func (*AccessLogFilter_ExtensionFilter) isAccessLogFilter_FilterSpecifier() {} func (m *AccessLogFilter) GetFilterSpecifier() isAccessLogFilter_FilterSpecifier { if m != nil { @@ -489,9 +413,16 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*AccessLogFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _AccessLogFilter_OneofMarshaler, _AccessLogFilter_OneofUnmarshaler, _AccessLogFilter_OneofSizer, []interface{}{ +func (m *AccessLogFilter) GetExtensionFilter() *ExtensionFilter { + if x, ok := m.GetFilterSpecifier().(*AccessLogFilter_ExtensionFilter); ok { + return x.ExtensionFilter + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*AccessLogFilter) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*AccessLogFilter_StatusCodeFilter)(nil), (*AccessLogFilter_DurationFilter)(nil), (*AccessLogFilter_NotHealthCheckFilter)(nil), @@ -502,224 +433,12 @@ (*AccessLogFilter_HeaderFilter)(nil), (*AccessLogFilter_ResponseFlagFilter)(nil), (*AccessLogFilter_GrpcStatusFilter)(nil), + (*AccessLogFilter_ExtensionFilter)(nil), } } -func _AccessLogFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*AccessLogFilter) - // filter_specifier - switch x := m.FilterSpecifier.(type) { - case *AccessLogFilter_StatusCodeFilter: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.StatusCodeFilter); err != nil { - return err - } - case *AccessLogFilter_DurationFilter: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.DurationFilter); err != nil { - return err - } - case *AccessLogFilter_NotHealthCheckFilter: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.NotHealthCheckFilter); err != nil { - return err - } - case *AccessLogFilter_TraceableFilter: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TraceableFilter); err != nil { - return err - } - case *AccessLogFilter_RuntimeFilter: - _ = b.EncodeVarint(5<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RuntimeFilter); err != nil { - return err - } - case *AccessLogFilter_AndFilter: - _ = b.EncodeVarint(6<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.AndFilter); err != nil { - return err - } - case *AccessLogFilter_OrFilter: - _ = b.EncodeVarint(7<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.OrFilter); err != nil { - return err - } - case *AccessLogFilter_HeaderFilter: - _ = b.EncodeVarint(8<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HeaderFilter); err != nil { - return err - } - case *AccessLogFilter_ResponseFlagFilter: - _ = b.EncodeVarint(9<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ResponseFlagFilter); err != nil { - return err - } - case *AccessLogFilter_GrpcStatusFilter: - _ = b.EncodeVarint(10<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.GrpcStatusFilter); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("AccessLogFilter.FilterSpecifier has unexpected type %T", x) - } - return nil -} - -func _AccessLogFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*AccessLogFilter) - switch tag { - case 1: // filter_specifier.status_code_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(StatusCodeFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_StatusCodeFilter{msg} - return true, err - case 2: // filter_specifier.duration_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(DurationFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_DurationFilter{msg} - return true, err - case 3: // filter_specifier.not_health_check_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(NotHealthCheckFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_NotHealthCheckFilter{msg} - return true, err - case 4: // filter_specifier.traceable_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TraceableFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_TraceableFilter{msg} - return true, err - case 5: // filter_specifier.runtime_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(RuntimeFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_RuntimeFilter{msg} - return true, err - case 6: // filter_specifier.and_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(AndFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_AndFilter{msg} - return true, err - case 7: // filter_specifier.or_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(OrFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_OrFilter{msg} - return true, err - case 8: // filter_specifier.header_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(HeaderFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_HeaderFilter{msg} - return true, err - case 9: // filter_specifier.response_flag_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(ResponseFlagFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_ResponseFlagFilter{msg} - return true, err - case 10: // filter_specifier.grpc_status_filter - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(GrpcStatusFilter) - err := b.DecodeMessage(msg) - m.FilterSpecifier = &AccessLogFilter_GrpcStatusFilter{msg} - return true, err - default: - return false, nil - } -} - -func _AccessLogFilter_OneofSizer(msg proto.Message) (n int) { - m := msg.(*AccessLogFilter) - // filter_specifier - switch x := m.FilterSpecifier.(type) { - case *AccessLogFilter_StatusCodeFilter: - s := proto.Size(x.StatusCodeFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_DurationFilter: - s := proto.Size(x.DurationFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_NotHealthCheckFilter: - s := proto.Size(x.NotHealthCheckFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_TraceableFilter: - s := proto.Size(x.TraceableFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_RuntimeFilter: - s := proto.Size(x.RuntimeFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_AndFilter: - s := proto.Size(x.AndFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_OrFilter: - s := proto.Size(x.OrFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_HeaderFilter: - s := proto.Size(x.HeaderFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_ResponseFlagFilter: - s := proto.Size(x.ResponseFlagFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *AccessLogFilter_GrpcStatusFilter: - s := proto.Size(x.GrpcStatusFilter) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Filter on an integer comparison. type ComparisonFilter struct { - // Comparison operator. - Op ComparisonFilter_Op `protobuf:"varint,1,opt,name=op,proto3,enum=envoy.config.filter.accesslog.v2.ComparisonFilter_Op" json:"op,omitempty"` - // Value to compare against. + Op ComparisonFilter_Op `protobuf:"varint,1,opt,name=op,proto3,enum=envoy.config.filter.accesslog.v2.ComparisonFilter_Op" json:"op,omitempty"` Value *core.RuntimeUInt32 `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -732,26 +451,18 @@ func (*ComparisonFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{2} } + func (m *ComparisonFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ComparisonFilter.Unmarshal(m, b) } func (m *ComparisonFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ComparisonFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ComparisonFilter.Marshal(b, m, deterministic) } func (m *ComparisonFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_ComparisonFilter.Merge(m, src) } func (m *ComparisonFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ComparisonFilter.Size(m) } func (m *ComparisonFilter) XXX_DiscardUnknown() { xxx_messageInfo_ComparisonFilter.DiscardUnknown(m) @@ -773,9 +484,7 @@ return nil } -// Filters on HTTP response/status code. type StatusCodeFilter struct { - // Comparison. Comparison *ComparisonFilter `protobuf:"bytes,1,opt,name=comparison,proto3" json:"comparison,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -788,26 +497,18 @@ func (*StatusCodeFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{3} } + func (m *StatusCodeFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_StatusCodeFilter.Unmarshal(m, b) } func (m *StatusCodeFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_StatusCodeFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_StatusCodeFilter.Marshal(b, m, deterministic) } func (m *StatusCodeFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_StatusCodeFilter.Merge(m, src) } func (m *StatusCodeFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_StatusCodeFilter.Size(m) } func (m *StatusCodeFilter) XXX_DiscardUnknown() { xxx_messageInfo_StatusCodeFilter.DiscardUnknown(m) @@ -822,9 +523,7 @@ return nil } -// Filters on total request duration in milliseconds. type DurationFilter struct { - // Comparison. Comparison *ComparisonFilter `protobuf:"bytes,1,opt,name=comparison,proto3" json:"comparison,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -837,26 +536,18 @@ func (*DurationFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{4} } + func (m *DurationFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DurationFilter.Unmarshal(m, b) } func (m *DurationFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DurationFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_DurationFilter.Marshal(b, m, deterministic) } func (m *DurationFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_DurationFilter.Merge(m, src) } func (m *DurationFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DurationFilter.Size(m) } func (m *DurationFilter) XXX_DiscardUnknown() { xxx_messageInfo_DurationFilter.DiscardUnknown(m) @@ -871,8 +562,6 @@ return nil } -// Filters for requests that are not health check requests. A health check -// request is marked by the health check filter. type NotHealthCheckFilter struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -885,26 +574,18 @@ func (*NotHealthCheckFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{5} } + func (m *NotHealthCheckFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_NotHealthCheckFilter.Unmarshal(m, b) } func (m *NotHealthCheckFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_NotHealthCheckFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_NotHealthCheckFilter.Marshal(b, m, deterministic) } func (m *NotHealthCheckFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_NotHealthCheckFilter.Merge(m, src) } func (m *NotHealthCheckFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_NotHealthCheckFilter.Size(m) } func (m *NotHealthCheckFilter) XXX_DiscardUnknown() { xxx_messageInfo_NotHealthCheckFilter.DiscardUnknown(m) @@ -912,8 +593,6 @@ var xxx_messageInfo_NotHealthCheckFilter proto.InternalMessageInfo -// Filters for requests that are traceable. See the tracing overview for more -// information on how a request becomes traceable. type TraceableFilter struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -926,26 +605,18 @@ func (*TraceableFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{6} } + func (m *TraceableFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TraceableFilter.Unmarshal(m, b) } func (m *TraceableFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TraceableFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TraceableFilter.Marshal(b, m, deterministic) } func (m *TraceableFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_TraceableFilter.Merge(m, src) } func (m *TraceableFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TraceableFilter.Size(m) } func (m *TraceableFilter) XXX_DiscardUnknown() { xxx_messageInfo_TraceableFilter.DiscardUnknown(m) @@ -953,29 +624,13 @@ var xxx_messageInfo_TraceableFilter proto.InternalMessageInfo -// Filters for random sampling of requests. type RuntimeFilter struct { - // Runtime key to get an optional overridden numerator for use in the *percent_sampled* field. - // If found in runtime, this value will replace the default numerator. - RuntimeKey string `protobuf:"bytes,1,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` - // The default sampling percentage. If not specified, defaults to 0% with denominator of 100. - PercentSampled *_type.FractionalPercent `protobuf:"bytes,2,opt,name=percent_sampled,json=percentSampled,proto3" json:"percent_sampled,omitempty"` - // By default, sampling pivots on the header - // :ref:`x-request-id` being present. If - // :ref:`x-request-id` is present, the filter will - // consistently sample across multiple hosts based on the runtime key value and the value - // extracted from :ref:`x-request-id`. If it is - // missing, or *use_independent_randomness* is set to true, the filter will randomly sample based - // on the runtime key value alone. *use_independent_randomness* can be used for logging kill - // switches within complex nested :ref:`AndFilter - // ` and :ref:`OrFilter - // ` blocks that are easier to reason about - // from a probability perspective (i.e., setting to true will cause the filter to behave like - // an independent random variable when composed within logical operator filters). - UseIndependentRandomness bool `protobuf:"varint,3,opt,name=use_independent_randomness,json=useIndependentRandomness,proto3" json:"use_independent_randomness,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RuntimeKey string `protobuf:"bytes,1,opt,name=runtime_key,json=runtimeKey,proto3" json:"runtime_key,omitempty"` + PercentSampled *_type.FractionalPercent `protobuf:"bytes,2,opt,name=percent_sampled,json=percentSampled,proto3" json:"percent_sampled,omitempty"` + UseIndependentRandomness bool `protobuf:"varint,3,opt,name=use_independent_randomness,json=useIndependentRandomness,proto3" json:"use_independent_randomness,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RuntimeFilter) Reset() { *m = RuntimeFilter{} } @@ -984,26 +639,18 @@ func (*RuntimeFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{7} } + func (m *RuntimeFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_RuntimeFilter.Unmarshal(m, b) } func (m *RuntimeFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_RuntimeFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_RuntimeFilter.Marshal(b, m, deterministic) } func (m *RuntimeFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_RuntimeFilter.Merge(m, src) } func (m *RuntimeFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_RuntimeFilter.Size(m) } func (m *RuntimeFilter) XXX_DiscardUnknown() { xxx_messageInfo_RuntimeFilter.DiscardUnknown(m) @@ -1032,9 +679,6 @@ return false } -// Performs a logical “and” operation on the result of each filter in filters. -// Filters are evaluated sequentially and if one of them returns false, the -// filter returns false immediately. type AndFilter struct { Filters []*AccessLogFilter `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1048,26 +692,18 @@ func (*AndFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{8} } + func (m *AndFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AndFilter.Unmarshal(m, b) } func (m *AndFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AndFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_AndFilter.Marshal(b, m, deterministic) } func (m *AndFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_AndFilter.Merge(m, src) } func (m *AndFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AndFilter.Size(m) } func (m *AndFilter) XXX_DiscardUnknown() { xxx_messageInfo_AndFilter.DiscardUnknown(m) @@ -1082,9 +718,6 @@ return nil } -// Performs a logical “or” operation on the result of each individual filter. -// Filters are evaluated sequentially and if one of them returns true, the -// filter returns true immediately. type OrFilter struct { Filters []*AccessLogFilter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1098,26 +731,18 @@ func (*OrFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{9} } + func (m *OrFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_OrFilter.Unmarshal(m, b) } func (m *OrFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_OrFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_OrFilter.Marshal(b, m, deterministic) } func (m *OrFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_OrFilter.Merge(m, src) } func (m *OrFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_OrFilter.Size(m) } func (m *OrFilter) XXX_DiscardUnknown() { xxx_messageInfo_OrFilter.DiscardUnknown(m) @@ -1132,10 +757,7 @@ return nil } -// Filters requests based on the presence or value of a request header. type HeaderFilter struct { - // Only requests with a header which matches the specified HeaderMatcher will pass the filter - // check. Header *route.HeaderMatcher `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1148,26 +770,18 @@ func (*HeaderFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{10} } + func (m *HeaderFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HeaderFilter.Unmarshal(m, b) } func (m *HeaderFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HeaderFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HeaderFilter.Marshal(b, m, deterministic) } func (m *HeaderFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_HeaderFilter.Merge(m, src) } func (m *HeaderFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HeaderFilter.Size(m) } func (m *HeaderFilter) XXX_DiscardUnknown() { xxx_messageInfo_HeaderFilter.DiscardUnknown(m) @@ -1182,13 +796,7 @@ return nil } -// Filters requests that received responses with an Envoy response flag set. -// A list of the response flags can be found -// in the access log formatter :ref:`documentation`. type ResponseFlagFilter struct { - // Only responses with the any of the flags listed in this field will be logged. - // This field is optional. If it is not specified, then any response flag will pass - // the filter check. Flags []string `protobuf:"bytes,1,rep,name=flags,proto3" json:"flags,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1201,26 +809,18 @@ func (*ResponseFlagFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{11} } + func (m *ResponseFlagFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ResponseFlagFilter.Unmarshal(m, b) } func (m *ResponseFlagFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResponseFlagFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ResponseFlagFilter.Marshal(b, m, deterministic) } func (m *ResponseFlagFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_ResponseFlagFilter.Merge(m, src) } func (m *ResponseFlagFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ResponseFlagFilter.Size(m) } func (m *ResponseFlagFilter) XXX_DiscardUnknown() { xxx_messageInfo_ResponseFlagFilter.DiscardUnknown(m) @@ -1235,17 +835,12 @@ return nil } -// Filters gRPC requests based on their response status. If a gRPC status is not provided, the -// filter will infer the status from the HTTP status code. type GrpcStatusFilter struct { - // Logs only responses that have any one of the gRPC statuses in this field. - Statuses []GrpcStatusFilter_Status `protobuf:"varint,1,rep,packed,name=statuses,proto3,enum=envoy.config.filter.accesslog.v2.GrpcStatusFilter_Status" json:"statuses,omitempty"` - // If included and set to true, the filter will instead block all responses with a gRPC status or - // inferred gRPC status enumerated in statuses, and allow all other responses. - Exclude bool `protobuf:"varint,2,opt,name=exclude,proto3" json:"exclude,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Statuses []GrpcStatusFilter_Status `protobuf:"varint,1,rep,packed,name=statuses,proto3,enum=envoy.config.filter.accesslog.v2.GrpcStatusFilter_Status" json:"statuses,omitempty"` + Exclude bool `protobuf:"varint,2,opt,name=exclude,proto3" json:"exclude,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GrpcStatusFilter) Reset() { *m = GrpcStatusFilter{} } @@ -1254,26 +849,18 @@ func (*GrpcStatusFilter) Descriptor() ([]byte, []int) { return fileDescriptor_67bfd82f8b509e9f, []int{12} } + func (m *GrpcStatusFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_GrpcStatusFilter.Unmarshal(m, b) } func (m *GrpcStatusFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GrpcStatusFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_GrpcStatusFilter.Marshal(b, m, deterministic) } func (m *GrpcStatusFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_GrpcStatusFilter.Merge(m, src) } func (m *GrpcStatusFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_GrpcStatusFilter.Size(m) } func (m *GrpcStatusFilter) XXX_DiscardUnknown() { xxx_messageInfo_GrpcStatusFilter.DiscardUnknown(m) @@ -1295,2854 +882,207 @@ return false } -func init() { - proto.RegisterEnum("envoy.config.filter.accesslog.v2.ComparisonFilter_Op", ComparisonFilter_Op_name, ComparisonFilter_Op_value) - proto.RegisterEnum("envoy.config.filter.accesslog.v2.GrpcStatusFilter_Status", GrpcStatusFilter_Status_name, GrpcStatusFilter_Status_value) - proto.RegisterType((*AccessLog)(nil), "envoy.config.filter.accesslog.v2.AccessLog") - proto.RegisterType((*AccessLogFilter)(nil), "envoy.config.filter.accesslog.v2.AccessLogFilter") - proto.RegisterType((*ComparisonFilter)(nil), "envoy.config.filter.accesslog.v2.ComparisonFilter") - proto.RegisterType((*StatusCodeFilter)(nil), "envoy.config.filter.accesslog.v2.StatusCodeFilter") - proto.RegisterType((*DurationFilter)(nil), "envoy.config.filter.accesslog.v2.DurationFilter") - proto.RegisterType((*NotHealthCheckFilter)(nil), "envoy.config.filter.accesslog.v2.NotHealthCheckFilter") - proto.RegisterType((*TraceableFilter)(nil), "envoy.config.filter.accesslog.v2.TraceableFilter") - proto.RegisterType((*RuntimeFilter)(nil), "envoy.config.filter.accesslog.v2.RuntimeFilter") - proto.RegisterType((*AndFilter)(nil), "envoy.config.filter.accesslog.v2.AndFilter") - proto.RegisterType((*OrFilter)(nil), "envoy.config.filter.accesslog.v2.OrFilter") - proto.RegisterType((*HeaderFilter)(nil), "envoy.config.filter.accesslog.v2.HeaderFilter") - proto.RegisterType((*ResponseFlagFilter)(nil), "envoy.config.filter.accesslog.v2.ResponseFlagFilter") - proto.RegisterType((*GrpcStatusFilter)(nil), "envoy.config.filter.accesslog.v2.GrpcStatusFilter") -} - -func init() { - proto.RegisterFile("envoy/config/filter/accesslog/v2/accesslog.proto", fileDescriptor_67bfd82f8b509e9f) -} - -var fileDescriptor_67bfd82f8b509e9f = []byte{ - // 1321 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcf, 0x6f, 0xdb, 0x46, - 0x16, 0x36, 0x69, 0x5b, 0x96, 0x9e, 0x6d, 0x69, 0x32, 0xf1, 0xc6, 0x4e, 0x90, 0x35, 0xbc, 0x3c, - 0x05, 0x59, 0x40, 0x4a, 0x94, 0xdd, 0x00, 0x01, 0x7a, 0xa1, 0xc4, 0x91, 0x45, 0x98, 0x26, 0x9d, - 0x91, 0x98, 0xb8, 0x2d, 0x10, 0x82, 0x26, 0xc7, 0xb2, 0x10, 0x99, 0x24, 0x48, 0xca, 0x88, 0x8f, - 0xed, 0xb1, 0xc7, 0xfc, 0x35, 0x41, 0x7b, 0x49, 0x6f, 0xbd, 0xb5, 0xa7, 0x9e, 0x8b, 0x5c, 0x8a, - 0xfc, 0x17, 0xc5, 0x70, 0x48, 0xda, 0x52, 0x02, 0xc8, 0x2d, 0xda, 0x83, 0x44, 0xce, 0xbc, 0xf7, - 0x7d, 0xef, 0x07, 0xe7, 0x7d, 0x24, 0x3c, 0x62, 0xc1, 0x45, 0x78, 0xd9, 0xf2, 0xc2, 0xe0, 0x74, - 0x3c, 0x6a, 0x9d, 0x8e, 0x27, 0x29, 0x8b, 0x5b, 0xae, 0xe7, 0xb1, 0x24, 0x99, 0x84, 0xa3, 0xd6, - 0x45, 0xfb, 0x6a, 0xd1, 0x8c, 0xe2, 0x30, 0x0d, 0xf1, 0x5e, 0x86, 0x68, 0x0a, 0x44, 0x53, 0x20, - 0x9a, 0x57, 0x4e, 0x17, 0xed, 0x7b, 0xf7, 0x05, 0xa7, 0x1b, 0x8d, 0x39, 0xde, 0x0b, 0x63, 0xd6, - 0x3a, 0x71, 0x13, 0x26, 0xf0, 0xf7, 0x76, 0x67, 0xac, 0x71, 0x38, 0x4d, 0x99, 0xf8, 0xcf, 0xed, - 0x3b, 0xc2, 0x9e, 0x5e, 0x46, 0xac, 0x15, 0xb1, 0xd8, 0x63, 0x41, 0x9a, 0x5b, 0xee, 0x8e, 0xc2, - 0x70, 0x34, 0x61, 0xad, 0x6c, 0x75, 0x32, 0x3d, 0x6d, 0xb9, 0xc1, 0x65, 0x6e, 0xba, 0x3f, 0x6f, - 0x4a, 0xd2, 0x78, 0xea, 0x15, 0xc0, 0xed, 0x0b, 0x77, 0x32, 0xf6, 0xdd, 0x94, 0xb5, 0x8a, 0x1b, - 0x61, 0x50, 0x7e, 0x97, 0xa0, 0xa6, 0x66, 0xa9, 0x1b, 0xe1, 0x08, 0x63, 0x58, 0x09, 0xdc, 0x73, - 0xb6, 0x23, 0xed, 0x49, 0x0f, 0x6a, 0x34, 0xbb, 0xc7, 0x3a, 0x54, 0x44, 0x89, 0x3b, 0xf2, 0x9e, - 0xf4, 0x60, 0xbd, 0xfd, 0xb8, 0xb9, 0xa8, 0xfc, 0x66, 0x49, 0xd8, 0xcb, 0x8c, 0x34, 0x27, 0xc0, - 0x8f, 0xa1, 0x22, 0x50, 0x3b, 0xcb, 0x19, 0xd5, 0x76, 0x53, 0x24, 0xdd, 0x2c, 0x92, 0x6e, 0x0e, - 0xb2, 0xa4, 0xfb, 0x4b, 0x34, 0x77, 0xc4, 0xcf, 0x60, 0x83, 0xf7, 0xc1, 0x77, 0x72, 0xe0, 0x4a, - 0x06, 0xdc, 0xfa, 0x04, 0xa8, 0x06, 0x97, 0xfd, 0x25, 0xba, 0x9e, 0xf9, 0x76, 0x33, 0xd7, 0xce, - 0x26, 0xac, 0x0b, 0x90, 0xc3, 0x77, 0x95, 0x5f, 0xd7, 0xa0, 0x31, 0x97, 0x18, 0x3e, 0x01, 0x9c, - 0xa4, 0x6e, 0x3a, 0x4d, 0x1c, 0x2f, 0xf4, 0x99, 0x93, 0xd7, 0x29, 0x65, 0x31, 0xda, 0x8b, 0xeb, - 0x1c, 0x64, 0xd8, 0x6e, 0xe8, 0x33, 0xc1, 0xd7, 0x5f, 0xa2, 0x28, 0x99, 0xdb, 0xc3, 0x5f, 0x43, - 0xc3, 0x9f, 0xc6, 0x6e, 0x3a, 0x0e, 0x03, 0x67, 0xa6, 0x91, 0x8f, 0x16, 0x07, 0xd0, 0x72, 0x60, - 0x49, 0x5f, 0xf7, 0x67, 0x76, 0x70, 0x08, 0xdb, 0x41, 0x98, 0x3a, 0x67, 0xcc, 0x9d, 0xa4, 0x67, - 0x8e, 0x77, 0xc6, 0xbc, 0xd7, 0x45, 0x10, 0xd1, 0xe2, 0xa7, 0x8b, 0x83, 0x98, 0x61, 0xda, 0xcf, - 0xf0, 0x5d, 0x0e, 0x2f, 0x43, 0x6d, 0x05, 0x9f, 0xd9, 0xc7, 0xaf, 0x00, 0xa5, 0xb1, 0xeb, 0x31, - 0xf7, 0x64, 0x52, 0xf6, 0x6b, 0xe5, 0xa6, 0xe7, 0x62, 0x58, 0x20, 0xcb, 0x20, 0x8d, 0x74, 0x76, - 0x0b, 0x1f, 0x43, 0x3d, 0x9e, 0x06, 0xe9, 0xf8, 0xbc, 0x64, 0x5f, 0xcd, 0xd8, 0x5b, 0x8b, 0xd9, - 0xa9, 0xc0, 0x95, 0xdc, 0x9b, 0xf1, 0xf5, 0x0d, 0x6c, 0x00, 0xb8, 0x81, 0x5f, 0xb0, 0x56, 0x32, - 0xd6, 0xff, 0xde, 0xe0, 0x2c, 0x07, 0x7e, 0xc9, 0x58, 0x73, 0x8b, 0x05, 0xd6, 0xa1, 0x16, 0xc6, - 0x05, 0xd9, 0x5a, 0x46, 0xf6, 0x70, 0x31, 0x99, 0x15, 0x97, 0x5c, 0xd5, 0x30, 0xbf, 0xc7, 0x36, - 0x6c, 0x9e, 0x31, 0xd7, 0x67, 0x25, 0x5d, 0x35, 0xa3, 0x6b, 0x2e, 0xa6, 0xeb, 0x67, 0xb0, 0x92, - 0x72, 0xe3, 0xec, 0xda, 0x1a, 0x9f, 0xc1, 0x56, 0xcc, 0x92, 0x28, 0x0c, 0x12, 0xe6, 0x9c, 0x4e, - 0xdc, 0x51, 0xc1, 0x5e, 0xcb, 0xd8, 0xff, 0x77, 0x83, 0x7e, 0xe6, 0xe8, 0xde, 0xc4, 0x1d, 0x95, - 0x31, 0x70, 0xfc, 0xc9, 0x2e, 0x9f, 0xa2, 0x51, 0x1c, 0x79, 0x4e, 0x3e, 0x4a, 0x79, 0x1c, 0xb8, - 0xe9, 0x14, 0xed, 0xc7, 0x91, 0x27, 0x26, 0xe9, 0x6a, 0x8a, 0x46, 0x73, 0x7b, 0x9d, 0xbb, 0x80, - 0x04, 0xd6, 0x49, 0x22, 0xe6, 0x8d, 0x4f, 0xc7, 0x2c, 0xc6, 0xab, 0xef, 0x3e, 0xbe, 0x5f, 0x96, - 0x94, 0x1f, 0x24, 0x40, 0xdd, 0xf0, 0x3c, 0x72, 0xe3, 0x71, 0x52, 0x0e, 0xc6, 0x73, 0x90, 0xc3, - 0x28, 0x9b, 0xe4, 0x7a, 0xfb, 0xff, 0x8b, 0x73, 0x98, 0xc7, 0x37, 0xad, 0xa8, 0x03, 0xdf, 0x7f, - 0x7c, 0xbf, 0xbc, 0xfa, 0xad, 0x24, 0x23, 0x89, 0xca, 0x61, 0x84, 0x9f, 0xc2, 0xea, 0x85, 0x3b, - 0x99, 0xb2, 0x7c, 0x7c, 0xf7, 0x72, 0x56, 0x37, 0x1a, 0x73, 0x06, 0x2e, 0xf2, 0xc5, 0x11, 0xb4, - 0xf5, 0x20, 0x7d, 0xd2, 0xa6, 0xc2, 0x5d, 0xb9, 0x0f, 0xb2, 0x15, 0xe1, 0x0a, 0xc8, 0xe4, 0x39, - 0x5a, 0xe2, 0xd7, 0x7d, 0x82, 0x24, 0x7e, 0x35, 0x08, 0x92, 0x95, 0x18, 0xd0, 0xbc, 0x8c, 0xe0, - 0x57, 0x00, 0x5e, 0x99, 0xd0, 0xcd, 0xe5, 0x68, 0xbe, 0x88, 0xbc, 0x82, 0xef, 0xb2, 0x0a, 0xae, - 0x31, 0x2a, 0x11, 0xd4, 0x67, 0x95, 0xe5, 0x1f, 0x8f, 0x78, 0x07, 0xb6, 0x3e, 0x27, 0x33, 0xca, - 0x2d, 0x68, 0xcc, 0x89, 0x82, 0xf2, 0xa3, 0x04, 0x9b, 0x33, 0xa3, 0x8c, 0x1f, 0xc2, 0x7a, 0xa1, - 0x09, 0xaf, 0xd9, 0xa5, 0x78, 0x39, 0x75, 0x6a, 0x3c, 0xd2, 0x4a, 0x2c, 0xef, 0x49, 0x14, 0x72, - 0xeb, 0x01, 0xbb, 0xc4, 0x3d, 0x68, 0xe4, 0xaf, 0x4c, 0x27, 0x71, 0xcf, 0xa3, 0x09, 0xf3, 0xf3, - 0xc7, 0xf5, 0xef, 0xbc, 0x1a, 0xfe, 0x2e, 0x68, 0xf6, 0x62, 0xd7, 0xe3, 0xd5, 0xbb, 0x93, 0x23, - 0xe1, 0x4c, 0xeb, 0x39, 0x6a, 0x20, 0x40, 0xf8, 0x0b, 0xb8, 0x37, 0x4d, 0x98, 0x33, 0x0e, 0x7c, - 0x16, 0xb1, 0xc0, 0xe7, 0x7c, 0xb1, 0x1b, 0xf8, 0xe1, 0x79, 0xc0, 0x92, 0x24, 0xd3, 0xd6, 0x2a, - 0xdd, 0x99, 0x26, 0x4c, 0xbf, 0x72, 0xa0, 0xa5, 0x5d, 0xf1, 0xa1, 0x56, 0xea, 0x06, 0x7e, 0x09, - 0x6b, 0xa2, 0x77, 0xc9, 0x8e, 0xb4, 0xb7, 0xfc, 0x97, 0xde, 0xa0, 0x79, 0x5f, 0xdf, 0x4a, 0x72, - 0x55, 0xa6, 0x05, 0x9b, 0xe2, 0x41, 0xb5, 0x10, 0x94, 0xeb, 0x41, 0xe4, 0xbf, 0x35, 0x88, 0x0d, - 0x1b, 0xd7, 0x65, 0x06, 0x13, 0xa8, 0x08, 0x99, 0xc9, 0x4f, 0xc9, 0x7f, 0x66, 0xc7, 0x40, 0x7c, - 0xc7, 0x08, 0xc4, 0xa1, 0x9b, 0x7a, 0x67, 0x73, 0x87, 0x22, 0x07, 0x2b, 0xdf, 0x48, 0x80, 0x3f, - 0x15, 0x18, 0xfc, 0x1a, 0x56, 0xb9, 0x56, 0x89, 0x4e, 0xd5, 0x3a, 0x36, 0x47, 0x1e, 0xbd, 0x95, - 0x0e, 0x95, 0x83, 0x58, 0xa7, 0xb2, 0xd1, 0xa7, 0xb2, 0xcd, 0x7f, 0x43, 0x2a, 0x1b, 0x94, 0xca, - 0x36, 0xff, 0xf5, 0xa8, 0x6c, 0x77, 0xa9, 0x6c, 0x5b, 0x54, 0x36, 0x29, 0x95, 0x35, 0x9d, 0xca, - 0x3d, 0x9d, 0xca, 0xd4, 0xa0, 0x2b, 0xb6, 0x4a, 0x8e, 0xe9, 0x0a, 0x35, 0x06, 0x84, 0xca, 0x5a, - 0x97, 0x2e, 0xdb, 0xf4, 0x98, 0xca, 0x03, 0x9d, 0x8a, 0x18, 0xca, 0xcf, 0xcb, 0x80, 0xe6, 0xc5, - 0x07, 0x9f, 0x42, 0x55, 0xe8, 0x18, 0x13, 0x49, 0xd4, 0xdb, 0xcf, 0xfe, 0xbc, 0x84, 0xe5, 0x5f, - 0x06, 0x9d, 0x06, 0xcf, 0x1f, 0xde, 0x4a, 0x6b, 0x4a, 0xae, 0x23, 0x25, 0x37, 0xde, 0x81, 0x35, - 0xf6, 0xc6, 0x9b, 0x4c, 0x7d, 0xa1, 0x27, 0x55, 0x5a, 0x2c, 0x95, 0x77, 0x32, 0x54, 0x04, 0x9e, - 0x8b, 0x84, 0x75, 0x80, 0x96, 0xf0, 0x06, 0x54, 0xbb, 0xaa, 0xd9, 0x25, 0x06, 0xd1, 0x90, 0x84, - 0xd7, 0x61, 0xcd, 0x36, 0x0f, 0x4c, 0xeb, 0xa5, 0x89, 0x64, 0xbc, 0x05, 0x48, 0x37, 0x5f, 0xa8, - 0x86, 0xae, 0x39, 0x2a, 0xdd, 0xb7, 0x0f, 0x89, 0x39, 0x44, 0xcb, 0xf8, 0x5f, 0x70, 0x4b, 0x23, - 0xaa, 0x66, 0xe8, 0x26, 0x71, 0xc8, 0x71, 0x97, 0x10, 0x8d, 0x68, 0x68, 0x05, 0x6f, 0x42, 0xcd, - 0xb4, 0x86, 0x4e, 0xcf, 0xb2, 0x4d, 0x0d, 0xad, 0x62, 0x0c, 0x75, 0xd5, 0xa0, 0x44, 0xd5, 0xbe, - 0x74, 0xc8, 0xb1, 0x3e, 0x18, 0x0e, 0x50, 0x85, 0x23, 0x8f, 0x08, 0x3d, 0xd4, 0x07, 0x03, 0xdd, - 0x32, 0x1d, 0x8d, 0x98, 0x3a, 0xd1, 0xd0, 0x1a, 0xbe, 0x03, 0x98, 0x92, 0x81, 0x65, 0xd3, 0x2e, - 0x27, 0xec, 0xab, 0xf6, 0x60, 0x48, 0x34, 0x54, 0xc5, 0xdb, 0x70, 0xbb, 0xa7, 0xea, 0x06, 0xd1, - 0x9c, 0x23, 0x4a, 0xba, 0x96, 0xa9, 0xe9, 0x43, 0xdd, 0x32, 0x51, 0x8d, 0x27, 0xa9, 0x76, 0x2c, - 0xca, 0xbd, 0x00, 0x23, 0xd8, 0xb0, 0xec, 0xa1, 0x63, 0xf5, 0x1c, 0xaa, 0x9a, 0xfb, 0x04, 0xad, - 0xe3, 0x5b, 0xb0, 0x69, 0x9b, 0xfa, 0xe1, 0x91, 0x41, 0x78, 0xc6, 0x44, 0x43, 0x1b, 0xbc, 0x48, - 0xdd, 0x1c, 0x12, 0x6a, 0xaa, 0x06, 0xda, 0xc4, 0x0d, 0x58, 0xb7, 0x4d, 0xf5, 0x85, 0xaa, 0x1b, - 0x6a, 0xc7, 0x20, 0xa8, 0xce, 0x73, 0xd7, 0xd4, 0xa1, 0xea, 0x18, 0xd6, 0x60, 0x80, 0x1a, 0xf8, - 0x36, 0x34, 0x6c, 0x53, 0xb5, 0x87, 0x7d, 0x62, 0x0e, 0xf5, 0xae, 0xca, 0x29, 0x50, 0x87, 0xfe, - 0xf4, 0x61, 0x57, 0xfa, 0xe5, 0xc3, 0xae, 0xf4, 0xdb, 0x87, 0x5d, 0x09, 0x9a, 0xe3, 0x50, 0x3c, - 0xba, 0x28, 0x0e, 0xdf, 0x5c, 0x2e, 0x7c, 0x8a, 0x9d, 0xba, 0x5a, 0xac, 0x8e, 0xf8, 0x67, 0xe5, - 0x91, 0xf4, 0x95, 0x7c, 0xd1, 0x3e, 0xa9, 0x64, 0xdf, 0x98, 0x4f, 0xfe, 0x08, 0x00, 0x00, 0xff, - 0xff, 0x97, 0xa8, 0x58, 0x3d, 0x28, 0x0c, 0x00, 0x00, -} - -func (m *AccessLog) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AccessLog) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Filter != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Filter.Size())) - n1, err := m.Filter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.ConfigType != nil { - nn2, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn2 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AccessLog_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Config.Size())) - n3, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - return i, nil -} -func (m *AccessLog_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.TypedConfig.Size())) - n4, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - return i, nil -} -func (m *AccessLogFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AccessLogFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.FilterSpecifier != nil { - nn5, err := m.FilterSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn5 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AccessLogFilter_StatusCodeFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.StatusCodeFilter != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.StatusCodeFilter.Size())) - n6, err := m.StatusCodeFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - return i, nil -} -func (m *AccessLogFilter_DurationFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.DurationFilter != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.DurationFilter.Size())) - n7, err := m.DurationFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - return i, nil -} -func (m *AccessLogFilter_NotHealthCheckFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.NotHealthCheckFilter != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.NotHealthCheckFilter.Size())) - n8, err := m.NotHealthCheckFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *AccessLogFilter_TraceableFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TraceableFilter != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.TraceableFilter.Size())) - n9, err := m.TraceableFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - return i, nil -} -func (m *AccessLogFilter_RuntimeFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RuntimeFilter != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.RuntimeFilter.Size())) - n10, err := m.RuntimeFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - return i, nil -} -func (m *AccessLogFilter_AndFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.AndFilter != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.AndFilter.Size())) - n11, err := m.AndFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - return i, nil -} -func (m *AccessLogFilter_OrFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.OrFilter != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.OrFilter.Size())) - n12, err := m.OrFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - return i, nil -} -func (m *AccessLogFilter_HeaderFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.HeaderFilter != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.HeaderFilter.Size())) - n13, err := m.HeaderFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - return i, nil -} -func (m *AccessLogFilter_ResponseFlagFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.ResponseFlagFilter != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.ResponseFlagFilter.Size())) - n14, err := m.ResponseFlagFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - return i, nil -} -func (m *AccessLogFilter_GrpcStatusFilter) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.GrpcStatusFilter != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.GrpcStatusFilter.Size())) - n15, err := m.GrpcStatusFilter.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - return i, nil -} -func (m *ComparisonFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ComparisonFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Op != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Op)) - } - if m.Value != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Value.Size())) - n16, err := m.Value.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *StatusCodeFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *StatusCodeFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Comparison != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Comparison.Size())) - n17, err := m.Comparison.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DurationFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DurationFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Comparison != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Comparison.Size())) - n18, err := m.Comparison.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *NotHealthCheckFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *NotHealthCheckFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TraceableFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TraceableFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *RuntimeFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RuntimeFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.RuntimeKey) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(len(m.RuntimeKey))) - i += copy(dAtA[i:], m.RuntimeKey) - } - if m.PercentSampled != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.PercentSampled.Size())) - n19, err := m.PercentSampled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if m.UseIndependentRandomness { - dAtA[i] = 0x18 - i++ - if m.UseIndependentRandomness { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AndFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AndFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Filters) > 0 { - for _, msg := range m.Filters { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *OrFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *OrFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Filters) > 0 { - for _, msg := range m.Filters { - dAtA[i] = 0x12 - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HeaderFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HeaderFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Header != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(m.Header.Size())) - n20, err := m.Header.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ResponseFlagFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ResponseFlagFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Flags) > 0 { - for _, s := range m.Flags { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *GrpcStatusFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GrpcStatusFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Statuses) > 0 { - dAtA22 := make([]byte, len(m.Statuses)*10) - var j21 int - for _, num := range m.Statuses { - for num >= 1<<7 { - dAtA22[j21] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j21++ - } - dAtA22[j21] = uint8(num) - j21++ - } - dAtA[i] = 0xa - i++ - i = encodeVarintAccesslog(dAtA, i, uint64(j21)) - i += copy(dAtA[i:], dAtA22[:j21]) - } - if m.Exclude { - dAtA[i] = 0x10 - i++ - if m.Exclude { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintAccesslog(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *AccessLog) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.Filter != nil { - l = m.Filter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *AccessLog_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLog_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.FilterSpecifier != nil { - n += m.FilterSpecifier.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *AccessLogFilter_StatusCodeFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.StatusCodeFilter != nil { - l = m.StatusCodeFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_DurationFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DurationFilter != nil { - l = m.DurationFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_NotHealthCheckFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NotHealthCheckFilter != nil { - l = m.NotHealthCheckFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_TraceableFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TraceableFilter != nil { - l = m.TraceableFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_RuntimeFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RuntimeFilter != nil { - l = m.RuntimeFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_AndFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.AndFilter != nil { - l = m.AndFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_OrFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.OrFilter != nil { - l = m.OrFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_HeaderFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HeaderFilter != nil { - l = m.HeaderFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_ResponseFlagFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ResponseFlagFilter != nil { - l = m.ResponseFlagFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *AccessLogFilter_GrpcStatusFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.GrpcStatusFilter != nil { - l = m.GrpcStatusFilter.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - return n -} -func (m *ComparisonFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Op != 0 { - n += 1 + sovAccesslog(uint64(m.Op)) - } - if m.Value != nil { - l = m.Value.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *StatusCodeFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Comparison != nil { - l = m.Comparison.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DurationFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Comparison != nil { - l = m.Comparison.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *NotHealthCheckFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TraceableFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +type ExtensionFilter struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *ExtensionFilter_Config + // *ExtensionFilter_TypedConfig + ConfigType isExtensionFilter_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *RuntimeFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.RuntimeKey) - if l > 0 { - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.PercentSampled != nil { - l = m.PercentSampled.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.UseIndependentRandomness { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +func (m *ExtensionFilter) Reset() { *m = ExtensionFilter{} } +func (m *ExtensionFilter) String() string { return proto.CompactTextString(m) } +func (*ExtensionFilter) ProtoMessage() {} +func (*ExtensionFilter) Descriptor() ([]byte, []int) { + return fileDescriptor_67bfd82f8b509e9f, []int{13} } -func (m *AndFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Filters) > 0 { - for _, e := range m.Filters { - l = e.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +func (m *ExtensionFilter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExtensionFilter.Unmarshal(m, b) } - -func (m *OrFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Filters) > 0 { - for _, e := range m.Filters { - l = e.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +func (m *ExtensionFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExtensionFilter.Marshal(b, m, deterministic) } - -func (m *HeaderFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Header != nil { - l = m.Header.Size() - n += 1 + l + sovAccesslog(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +func (m *ExtensionFilter) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtensionFilter.Merge(m, src) } - -func (m *ResponseFlagFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Flags) > 0 { - for _, s := range m.Flags { - l = len(s) - n += 1 + l + sovAccesslog(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +func (m *ExtensionFilter) XXX_Size() int { + return xxx_messageInfo_ExtensionFilter.Size(m) } - -func (m *GrpcStatusFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Statuses) > 0 { - l = 0 - for _, e := range m.Statuses { - l += sovAccesslog(uint64(e)) - } - n += 1 + sovAccesslog(uint64(l)) + l - } - if m.Exclude { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n +func (m *ExtensionFilter) XXX_DiscardUnknown() { + xxx_messageInfo_ExtensionFilter.DiscardUnknown(m) } -func sovAccesslog(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozAccesslog(x uint64) (n int) { - return sovAccesslog(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *AccessLog) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AccessLog: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AccessLog: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Filter == nil { - m.Filter = &AccessLogFilter{} - } - if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &AccessLog_Config{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &AccessLog_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } +var xxx_messageInfo_ExtensionFilter proto.InternalMessageInfo - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *ExtensionFilter) GetName() string { + if m != nil { + return m.Name } - return nil + return "" } -func (m *AccessLogFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AccessLogFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AccessLogFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StatusCodeFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &StatusCodeFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_StatusCodeFilter{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DurationFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &DurationFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_DurationFilter{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NotHealthCheckFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &NotHealthCheckFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_NotHealthCheckFilter{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TraceableFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &TraceableFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_TraceableFilter{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &RuntimeFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_RuntimeFilter{v} - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AndFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &AndFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_AndFilter{v} - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OrFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &OrFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_OrFilter{v} - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HeaderFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &HeaderFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_HeaderFilter{v} - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResponseFlagFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &ResponseFlagFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_ResponseFlagFilter{v} - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GrpcStatusFilter", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &GrpcStatusFilter{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.FilterSpecifier = &AccessLogFilter_GrpcStatusFilter{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +type isExtensionFilter_ConfigType interface { + isExtensionFilter_ConfigType() } -func (m *ComparisonFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ComparisonFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ComparisonFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Op", wireType) - } - m.Op = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Op |= ComparisonFilter_Op(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Value == nil { - m.Value = &core.RuntimeUInt32{} - } - if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +type ExtensionFilter_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` } -func (m *StatusCodeFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: StatusCodeFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: StatusCodeFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Comparison", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Comparison == nil { - m.Comparison = &ComparisonFilter{} - } - if err := m.Comparison.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +type ExtensionFilter_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -func (m *DurationFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DurationFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DurationFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Comparison", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Comparison == nil { - m.Comparison = &ComparisonFilter{} - } - if err := m.Comparison.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *NotHealthCheckFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: NotHealthCheckFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: NotHealthCheckFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } +func (*ExtensionFilter_Config) isExtensionFilter_ConfigType() {} - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TraceableFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TraceableFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TraceableFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } +func (*ExtensionFilter_TypedConfig) isExtensionFilter_ConfigType() {} - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *ExtensionFilter) GetConfigType() isExtensionFilter_ConfigType { + if m != nil { + return m.ConfigType } return nil } -func (m *RuntimeFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RuntimeFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RuntimeFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeKey", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RuntimeKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PercentSampled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.PercentSampled == nil { - m.PercentSampled = &_type.FractionalPercent{} - } - if err := m.PercentSampled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UseIndependentRandomness", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.UseIndependentRandomness = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +// Deprecated: Do not use. +func (m *ExtensionFilter) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*ExtensionFilter_Config); ok { + return x.Config } return nil } -func (m *AndFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AndFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AndFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filters = append(m.Filters, &AccessLogFilter{}) - if err := m.Filters[len(m.Filters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +func (m *ExtensionFilter) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*ExtensionFilter_TypedConfig); ok { + return x.TypedConfig } return nil } -func (m *OrFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OrFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OrFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filters = append(m.Filters, &AccessLogFilter{}) - if err := m.Filters[len(m.Filters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ExtensionFilter) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ExtensionFilter_Config)(nil), + (*ExtensionFilter_TypedConfig)(nil), } - return nil } -func (m *HeaderFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HeaderFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HeaderFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Header == nil { - m.Header = &route.HeaderMatcher{} - } - if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func init() { + proto.RegisterEnum("envoy.config.filter.accesslog.v2.ComparisonFilter_Op", ComparisonFilter_Op_name, ComparisonFilter_Op_value) + proto.RegisterEnum("envoy.config.filter.accesslog.v2.GrpcStatusFilter_Status", GrpcStatusFilter_Status_name, GrpcStatusFilter_Status_value) + proto.RegisterType((*AccessLog)(nil), "envoy.config.filter.accesslog.v2.AccessLog") + proto.RegisterType((*AccessLogFilter)(nil), "envoy.config.filter.accesslog.v2.AccessLogFilter") + proto.RegisterType((*ComparisonFilter)(nil), "envoy.config.filter.accesslog.v2.ComparisonFilter") + proto.RegisterType((*StatusCodeFilter)(nil), "envoy.config.filter.accesslog.v2.StatusCodeFilter") + proto.RegisterType((*DurationFilter)(nil), "envoy.config.filter.accesslog.v2.DurationFilter") + proto.RegisterType((*NotHealthCheckFilter)(nil), "envoy.config.filter.accesslog.v2.NotHealthCheckFilter") + proto.RegisterType((*TraceableFilter)(nil), "envoy.config.filter.accesslog.v2.TraceableFilter") + proto.RegisterType((*RuntimeFilter)(nil), "envoy.config.filter.accesslog.v2.RuntimeFilter") + proto.RegisterType((*AndFilter)(nil), "envoy.config.filter.accesslog.v2.AndFilter") + proto.RegisterType((*OrFilter)(nil), "envoy.config.filter.accesslog.v2.OrFilter") + proto.RegisterType((*HeaderFilter)(nil), "envoy.config.filter.accesslog.v2.HeaderFilter") + proto.RegisterType((*ResponseFlagFilter)(nil), "envoy.config.filter.accesslog.v2.ResponseFlagFilter") + proto.RegisterType((*GrpcStatusFilter)(nil), "envoy.config.filter.accesslog.v2.GrpcStatusFilter") + proto.RegisterType((*ExtensionFilter)(nil), "envoy.config.filter.accesslog.v2.ExtensionFilter") } -func (m *ResponseFlagFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ResponseFlagFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResponseFlagFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Flags", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Flags = append(m.Flags, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func init() { + proto.RegisterFile("envoy/config/filter/accesslog/v2/accesslog.proto", fileDescriptor_67bfd82f8b509e9f) } -func (m *GrpcStatusFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GrpcStatusFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GrpcStatusFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType == 0 { - var v GrpcStatusFilter_Status - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= GrpcStatusFilter_Status(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Statuses = append(m.Statuses, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthAccesslog - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthAccesslog - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.Statuses) == 0 { - m.Statuses = make([]GrpcStatusFilter_Status, 0, elementCount) - } - for iNdEx < postIndex { - var v GrpcStatusFilter_Status - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= GrpcStatusFilter_Status(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Statuses = append(m.Statuses, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Statuses", wireType) - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Exclude", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAccesslog - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Exclude = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipAccesslog(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAccesslog - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipAccesslog(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAccesslog - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAccesslog - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAccesslog - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthAccesslog - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthAccesslog - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAccesslog - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipAccesslog(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthAccesslog - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") +var fileDescriptor_67bfd82f8b509e9f = []byte{ + // 1418 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x3f, 0x6f, 0xdb, 0x46, + 0x1b, 0x37, 0x29, 0x5b, 0x96, 0x1e, 0x59, 0x12, 0x73, 0xf1, 0x1b, 0x2b, 0x79, 0x93, 0x17, 0x7e, + 0x39, 0xa5, 0x2d, 0x20, 0xa5, 0x4e, 0x13, 0x20, 0x40, 0x17, 0x52, 0x3c, 0x59, 0x44, 0x68, 0xd2, + 0x3d, 0x8a, 0xa9, 0x83, 0x06, 0x25, 0x68, 0xf2, 0x2c, 0x0b, 0x91, 0x49, 0x82, 0xa4, 0x8c, 0x78, + 0x2b, 0x3a, 0x15, 0x5d, 0x0a, 0x64, 0xea, 0x27, 0xe8, 0x27, 0xe8, 0xd0, 0x76, 0xe9, 0xda, 0xa5, + 0x43, 0x3f, 0x47, 0xb7, 0x4e, 0x85, 0x87, 0xa2, 0x20, 0x8f, 0xa4, 0x2d, 0x39, 0x80, 0xdc, 0xb4, + 0x1d, 0x24, 0xf2, 0xee, 0x9e, 0xdf, 0xef, 0xf9, 0xc3, 0xe7, 0x7e, 0x77, 0xf0, 0x80, 0xfa, 0xa7, + 0xc1, 0x59, 0xcf, 0x0d, 0xfc, 0xa3, 0xc9, 0xb8, 0x77, 0x34, 0x99, 0x26, 0x34, 0xea, 0x39, 0xae, + 0x4b, 0xe3, 0x78, 0x1a, 0x8c, 0x7b, 0xa7, 0x3b, 0x17, 0x83, 0x6e, 0x18, 0x05, 0x49, 0x80, 0xb6, + 0x33, 0x44, 0x97, 0x21, 0xba, 0x0c, 0xd1, 0xbd, 0x30, 0x3a, 0xdd, 0xb9, 0x73, 0x97, 0x71, 0x3a, + 0xe1, 0x24, 0xc5, 0xbb, 0x41, 0x44, 0x7b, 0x87, 0x4e, 0x4c, 0x19, 0xfe, 0xce, 0x3b, 0x73, 0xab, + 0x51, 0x30, 0x4b, 0x28, 0xfb, 0xb7, 0xdd, 0xe0, 0x24, 0x0c, 0x7c, 0xea, 0x27, 0x71, 0x6e, 0xda, + 0x61, 0xa6, 0xc9, 0x59, 0x48, 0x7b, 0x21, 0x8d, 0x5c, 0xea, 0x27, 0xf9, 0xca, 0xed, 0x71, 0x10, + 0x8c, 0xa7, 0xb4, 0x97, 0x8d, 0x0e, 0x67, 0x47, 0x3d, 0xc7, 0x3f, 0xcb, 0x97, 0xee, 0x2e, 0x2e, + 0xc5, 0x49, 0x34, 0x73, 0x0b, 0xe0, 0xff, 0x66, 0x5e, 0xe8, 0xf4, 0x1c, 0xdf, 0x0f, 0x12, 0x27, + 0x99, 0x04, 0x7e, 0xdc, 0x3b, 0x99, 0x8c, 0x23, 0x27, 0x29, 0xa2, 0xbb, 0x77, 0x65, 0x3d, 0x4e, + 0x9c, 0x64, 0x56, 0x44, 0xb4, 0x75, 0xea, 0x4c, 0x27, 0x9e, 0x93, 0xd0, 0x5e, 0xf1, 0xc2, 0x16, + 0xc4, 0x5f, 0x39, 0xa8, 0x4b, 0x59, 0x11, 0xb4, 0x60, 0x8c, 0x10, 0xac, 0xfa, 0xce, 0x09, 0xed, + 0x70, 0xdb, 0xdc, 0xfd, 0x3a, 0xc9, 0xde, 0x91, 0x0a, 0x55, 0x56, 0xac, 0x0e, 0xbf, 0xcd, 0xdd, + 0x6f, 0xec, 0xbc, 0xdf, 0x5d, 0x56, 0xc8, 0x6e, 0x49, 0x38, 0xc8, 0x16, 0x49, 0x4e, 0x80, 0x1e, + 0x41, 0x95, 0xa1, 0x3a, 0x95, 0x8c, 0x6a, 0xab, 0xcb, 0x72, 0xee, 0x16, 0x39, 0x77, 0xcd, 0x2c, + 0x67, 0x99, 0xef, 0x70, 0xc3, 0x15, 0x92, 0x1b, 0xa3, 0x27, 0xb0, 0x91, 0x96, 0xd2, 0xb3, 0x73, + 0xf0, 0x6a, 0x06, 0xde, 0xbc, 0x02, 0x96, 0xfc, 0xb3, 0xe1, 0x0a, 0x69, 0x64, 0xb6, 0xfd, 0xcc, + 0x54, 0x6e, 0x42, 0x83, 0x81, 0xec, 0x74, 0x56, 0xfc, 0xb6, 0x06, 0xed, 0x85, 0xe0, 0xd0, 0x21, + 0x20, 0x56, 0x2a, 0xdb, 0x0d, 0x3c, 0x6a, 0xe7, 0xb9, 0x72, 0x99, 0x8f, 0x9d, 0xe5, 0xb9, 0x9a, + 0x19, 0xb6, 0x1f, 0x78, 0x94, 0xf1, 0x0d, 0x57, 0x88, 0x10, 0x2f, 0xcc, 0xa1, 0x4f, 0xa0, 0xed, + 0xcd, 0xa2, 0xec, 0xc3, 0xd8, 0x73, 0xc5, 0x7c, 0xb0, 0xdc, 0x81, 0x92, 0x03, 0x4b, 0xfa, 0x96, + 0x37, 0x37, 0x83, 0x02, 0xd8, 0xf2, 0x83, 0xc4, 0x3e, 0xa6, 0xce, 0x34, 0x39, 0xb6, 0xdd, 0x63, + 0xea, 0xbe, 0x2c, 0x9c, 0xb0, 0x32, 0x3f, 0x5e, 0xee, 0x44, 0x0f, 0x92, 0x61, 0x86, 0xef, 0xa7, + 0xf0, 0xd2, 0xd5, 0xa6, 0xff, 0x86, 0x79, 0xf4, 0x29, 0x08, 0x49, 0xe4, 0xb8, 0xd4, 0x39, 0x9c, + 0x96, 0xf5, 0x5a, 0xbd, 0x6e, 0x6f, 0x8c, 0x0a, 0x64, 0xe9, 0xa4, 0x9d, 0xcc, 0x4f, 0xa1, 0x03, + 0x68, 0x45, 0x33, 0x3f, 0x99, 0x9c, 0x94, 0xec, 0x6b, 0x19, 0x7b, 0x6f, 0x39, 0x3b, 0x61, 0xb8, + 0x92, 0xbb, 0x19, 0x5d, 0x9e, 0x40, 0x1a, 0x80, 0xe3, 0x7b, 0x05, 0x6b, 0x35, 0x63, 0x7d, 0xef, + 0x1a, 0xfd, 0xec, 0x7b, 0x25, 0x63, 0xdd, 0x29, 0x06, 0x48, 0x85, 0x7a, 0x10, 0x15, 0x64, 0xeb, + 0x19, 0xd9, 0xbb, 0xcb, 0xc9, 0x8c, 0xa8, 0xe4, 0xaa, 0x05, 0xf9, 0x3b, 0xb2, 0xa0, 0x79, 0x4c, + 0x1d, 0x8f, 0x96, 0x74, 0xb5, 0x8c, 0xae, 0xbb, 0x9c, 0x6e, 0x98, 0xc1, 0x4a, 0xca, 0x8d, 0xe3, + 0x4b, 0x63, 0x74, 0x0c, 0x9b, 0x11, 0x8d, 0xc3, 0xc0, 0x8f, 0xa9, 0x7d, 0x34, 0x75, 0xc6, 0x05, + 0x7b, 0x3d, 0x63, 0xff, 0xe0, 0x1a, 0xf5, 0xcc, 0xd1, 0x83, 0xa9, 0x33, 0x2e, 0x7d, 0xa0, 0xe8, + 0xca, 0x6c, 0xba, 0x8b, 0xc6, 0x51, 0xe8, 0xda, 0xf9, 0x56, 0xca, 0xfd, 0xc0, 0x75, 0x77, 0xd1, + 0x6e, 0x14, 0xba, 0x6c, 0x27, 0x5d, 0xec, 0xa2, 0xf1, 0xc2, 0x5c, 0xda, 0x77, 0xf4, 0x55, 0x42, + 0xfd, 0xf8, 0xd2, 0x36, 0x6a, 0x5c, 0xb7, 0xef, 0x70, 0x81, 0xbc, 0xe8, 0x3b, 0x3a, 0x3f, 0x25, + 0x6f, 0x81, 0xc0, 0x90, 0x76, 0x1c, 0x52, 0x77, 0x72, 0x34, 0xa1, 0x11, 0xaa, 0xfc, 0x2e, 0x73, + 0xe2, 0xf7, 0x1c, 0x08, 0xfd, 0xe0, 0x24, 0x74, 0xa2, 0x49, 0x5c, 0x6e, 0x3b, 0x03, 0xf8, 0x20, + 0xcc, 0x74, 0xa2, 0xb5, 0xf3, 0x68, 0xb9, 0xff, 0x45, 0x7c, 0xd7, 0x08, 0xe5, 0xda, 0xb9, 0xbc, + 0xf6, 0x39, 0xc7, 0x0b, 0x1c, 0xe1, 0x83, 0x10, 0x3d, 0x86, 0xb5, 0x53, 0x67, 0x3a, 0xa3, 0xb9, + 0x34, 0x6c, 0xe7, 0x9c, 0x4e, 0x38, 0x49, 0xf1, 0xe9, 0x71, 0x54, 0xb4, 0xb7, 0xa5, 0xfa, 0xc9, + 0xc3, 0x1d, 0xc2, 0xcc, 0xc5, 0xbb, 0xc0, 0x1b, 0x21, 0xaa, 0x02, 0x8f, 0x3f, 0x12, 0x56, 0xd2, + 0xe7, 0x2e, 0x16, 0xb8, 0xf4, 0xa9, 0x61, 0x81, 0x17, 0x43, 0x10, 0x16, 0x25, 0x0a, 0xbd, 0x00, + 0x70, 0xcb, 0x70, 0xae, 0x2f, 0x75, 0x8b, 0x29, 0x64, 0xf1, 0x7f, 0x99, 0xc5, 0x7f, 0x89, 0x4f, + 0xf4, 0xa1, 0x35, 0xaf, 0x59, 0xff, 0xb2, 0xbf, 0x5b, 0xb0, 0xf9, 0x26, 0xf9, 0x12, 0x6f, 0x40, + 0x7b, 0x41, 0x6c, 0xc4, 0x1f, 0x39, 0x68, 0xce, 0x49, 0x04, 0xba, 0x0f, 0x8d, 0x42, 0x6b, 0x5e, + 0xd2, 0x33, 0x76, 0xf0, 0xc9, 0xeb, 0xe7, 0xf2, 0x6a, 0xc4, 0x6f, 0x73, 0x04, 0xf2, 0xb5, 0xa7, + 0xf4, 0x0c, 0x0d, 0xa0, 0x9d, 0x9f, 0xe5, 0x76, 0xec, 0x9c, 0x84, 0x53, 0xea, 0xe5, 0x1f, 0xea, + 0x5e, 0x9e, 0x49, 0x7a, 0xc2, 0x74, 0x07, 0x91, 0xe3, 0xa6, 0x99, 0x3b, 0xd3, 0x7d, 0x66, 0x4c, + 0x5a, 0x39, 0xca, 0x64, 0x20, 0xf4, 0x21, 0xdc, 0x99, 0xc5, 0xd4, 0x9e, 0xf8, 0x1e, 0x0d, 0xa9, + 0xef, 0xa5, 0x7c, 0x91, 0xe3, 0x7b, 0xc1, 0x89, 0x4f, 0xe3, 0x38, 0x53, 0xec, 0x1a, 0xe9, 0xcc, + 0x62, 0xaa, 0x5e, 0x18, 0x90, 0x72, 0x5d, 0x3c, 0x84, 0x7a, 0xa9, 0x46, 0xc8, 0x82, 0x75, 0x56, + 0xb7, 0xb8, 0xc3, 0x6d, 0x57, 0xde, 0xea, 0x6c, 0xce, 0x6a, 0xfa, 0x9a, 0xe3, 0x6b, 0x3c, 0x29, + 0xb8, 0x44, 0x07, 0x6a, 0x46, 0x74, 0xd5, 0x05, 0xff, 0x0f, 0xba, 0x30, 0x61, 0xe3, 0xb2, 0x70, + 0xa1, 0x3e, 0x54, 0x99, 0x70, 0xe5, 0xdd, 0xf1, 0xff, 0xf9, 0xe6, 0xcf, 0xee, 0x59, 0xb9, 0xd4, + 0xed, 0x39, 0x89, 0x7b, 0x3c, 0xd7, 0x0c, 0x39, 0x54, 0xfc, 0x82, 0x03, 0x74, 0x55, 0xb0, 0x50, + 0x04, 0x6b, 0xa9, 0xf6, 0xb1, 0x1a, 0xd5, 0xe5, 0x17, 0xe7, 0xf2, 0xf3, 0xd7, 0xdc, 0x33, 0x71, + 0x14, 0x11, 0xc2, 0x6b, 0x43, 0xc2, 0x5b, 0xe9, 0x6f, 0x44, 0x78, 0x8d, 0x10, 0xde, 0x4a, 0x7f, + 0x03, 0xc2, 0x5b, 0x7d, 0xc2, 0x5b, 0x06, 0xe1, 0x75, 0x42, 0x78, 0x45, 0x25, 0xfc, 0x40, 0x25, + 0x3c, 0xd1, 0xc8, 0xaa, 0x25, 0xe1, 0x03, 0xb2, 0x4a, 0x34, 0x13, 0x13, 0x5e, 0xe9, 0x93, 0x8a, + 0x45, 0x0e, 0x08, 0x6f, 0xaa, 0x84, 0x57, 0x87, 0xa4, 0xa2, 0xec, 0x63, 0xc2, 0x5c, 0x89, 0x3f, + 0x57, 0x40, 0x58, 0xd4, 0x34, 0xe4, 0x41, 0x8d, 0xc9, 0x23, 0x65, 0xb1, 0xb4, 0x76, 0x9e, 0xfc, + 0x75, 0x65, 0xcc, 0x2f, 0x1c, 0x72, 0xf3, 0x5c, 0x86, 0xd7, 0xdc, 0xba, 0x98, 0x0b, 0x48, 0xc9, + 0x8c, 0x3a, 0xb0, 0x4e, 0x5f, 0xb9, 0xd3, 0x99, 0xc7, 0x84, 0xa4, 0x46, 0x8a, 0xa1, 0xf8, 0x1d, + 0x0f, 0x55, 0x86, 0x4e, 0xd5, 0xc1, 0x78, 0x2a, 0xac, 0xa0, 0x0d, 0xa8, 0xf5, 0x25, 0xbd, 0x8f, + 0x35, 0xac, 0x08, 0x1c, 0x6a, 0xc0, 0xba, 0xa5, 0x3f, 0xd5, 0x8d, 0x8f, 0x75, 0x81, 0x47, 0x9b, + 0x20, 0xa8, 0xfa, 0x33, 0x49, 0x53, 0x15, 0x5b, 0x22, 0xbb, 0xd6, 0x1e, 0xd6, 0x47, 0x42, 0x05, + 0xfd, 0x07, 0x6e, 0x28, 0x58, 0x52, 0x34, 0x55, 0xc7, 0x36, 0x3e, 0xe8, 0x63, 0xac, 0x60, 0x45, + 0x58, 0x45, 0x4d, 0xa8, 0xeb, 0xc6, 0xc8, 0x1e, 0x18, 0x96, 0xae, 0x08, 0x6b, 0x08, 0x41, 0x4b, + 0xd2, 0x08, 0x96, 0x94, 0xe7, 0x36, 0x3e, 0x50, 0xcd, 0x91, 0x29, 0x54, 0x53, 0xe4, 0x3e, 0x26, + 0x7b, 0xaa, 0x69, 0xaa, 0x86, 0x6e, 0x2b, 0x58, 0x57, 0xb1, 0x22, 0xac, 0xa3, 0x5b, 0x80, 0x08, + 0x36, 0x0d, 0x8b, 0xf4, 0x53, 0xc2, 0xa1, 0x64, 0x99, 0x23, 0xac, 0x08, 0x35, 0xb4, 0x05, 0x37, + 0x07, 0x92, 0xaa, 0x61, 0xc5, 0xde, 0x27, 0xb8, 0x6f, 0xe8, 0x8a, 0x3a, 0x52, 0x0d, 0x5d, 0xa8, + 0xa7, 0x41, 0x4a, 0xb2, 0x41, 0x52, 0x2b, 0x40, 0x02, 0x6c, 0x18, 0xd6, 0xc8, 0x36, 0x06, 0x36, + 0x91, 0xf4, 0x5d, 0x2c, 0x34, 0xd0, 0x0d, 0x68, 0x5a, 0xba, 0xba, 0xb7, 0xaf, 0xe1, 0x34, 0x62, + 0xac, 0x08, 0x1b, 0x69, 0x92, 0xaa, 0x3e, 0xc2, 0x44, 0x97, 0x34, 0xa1, 0x89, 0xda, 0xd0, 0xb0, + 0x74, 0xe9, 0x99, 0xa4, 0x6a, 0x92, 0xac, 0x61, 0xa1, 0x95, 0xc6, 0xae, 0x48, 0x23, 0xc9, 0xd6, + 0x0c, 0xd3, 0x14, 0xda, 0xe8, 0x26, 0xb4, 0x2d, 0x5d, 0xb2, 0x46, 0x43, 0xac, 0x8f, 0xd4, 0xbe, + 0x94, 0x52, 0x08, 0xe2, 0x37, 0x1c, 0xb4, 0x17, 0x4e, 0x90, 0x37, 0x5e, 0x96, 0x2f, 0x6e, 0xb8, + 0xfc, 0xdf, 0xb9, 0xe1, 0x56, 0xde, 0xf6, 0x86, 0x2b, 0xbf, 0xfc, 0xed, 0xeb, 0x3f, 0xbe, 0x5a, + 0xfb, 0x2f, 0xba, 0x3d, 0xd7, 0x58, 0x97, 0x3a, 0xea, 0xe1, 0x0f, 0x9f, 0xfd, 0xf4, 0x4b, 0x95, + 0x17, 0x38, 0xe8, 0x4e, 0x02, 0xd6, 0x7e, 0x61, 0x14, 0xbc, 0x3a, 0x5b, 0xda, 0x89, 0x72, 0x4b, + 0x2a, 0x46, 0xfb, 0x69, 0x3c, 0xfb, 0xdc, 0x61, 0x35, 0x0b, 0xec, 0xe1, 0x9f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x6e, 0x9f, 0xa8, 0xb4, 0x8d, 0x0d, 0x00, 0x00, } - -var ( - ErrInvalidLengthAccesslog = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowAccesslog = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2/accesslog.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/config/filter/accesslog/v2/accesslog.proto -package v2 +package envoy_config_filter_accesslog_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _accesslog_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on AccessLog with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *AccessLog) Validate() error { @@ -42,17 +45,12 @@ // no validation rules for Name - { - tmp := m.GetFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogValidationError{ - field: "Filter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogValidationError{ + field: "Filter", + reason: "embedded message failed validation", + cause: err, } } } @@ -61,34 +59,24 @@ case *AccessLog_Config: - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLog_TypedConfig: - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, } } } @@ -164,170 +152,132 @@ case *AccessLogFilter_StatusCodeFilter: - { - tmp := m.GetStatusCodeFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "StatusCodeFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetStatusCodeFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "StatusCodeFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_DurationFilter: - { - tmp := m.GetDurationFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "DurationFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDurationFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "DurationFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_NotHealthCheckFilter: - { - tmp := m.GetNotHealthCheckFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "NotHealthCheckFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetNotHealthCheckFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "NotHealthCheckFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_TraceableFilter: - { - tmp := m.GetTraceableFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "TraceableFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTraceableFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "TraceableFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_RuntimeFilter: - { - tmp := m.GetRuntimeFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "RuntimeFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRuntimeFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "RuntimeFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_AndFilter: - { - tmp := m.GetAndFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "AndFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAndFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "AndFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_OrFilter: - { - tmp := m.GetOrFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "OrFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetOrFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "OrFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_HeaderFilter: - { - tmp := m.GetHeaderFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "HeaderFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHeaderFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "HeaderFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_ResponseFlagFilter: - { - tmp := m.GetResponseFlagFilter() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "ResponseFlagFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetResponseFlagFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "ResponseFlagFilter", + reason: "embedded message failed validation", + cause: err, } } } case *AccessLogFilter_GrpcStatusFilter: - { - tmp := m.GetGrpcStatusFilter() + if v, ok := interface{}(m.GetGrpcStatusFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "GrpcStatusFilter", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *AccessLogFilter_ExtensionFilter: - if err := v.Validate(); err != nil { - return AccessLogFilterValidationError{ - field: "GrpcStatusFilter", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetExtensionFilter()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AccessLogFilterValidationError{ + field: "ExtensionFilter", + reason: "embedded message failed validation", + cause: err, } } } @@ -412,17 +362,12 @@ } } - { - tmp := m.GetValue() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ComparisonFilterValidationError{ - field: "Value", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ComparisonFilterValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, } } } @@ -499,17 +444,12 @@ } } - { - tmp := m.GetComparison() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return StatusCodeFilterValidationError{ - field: "Comparison", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetComparison()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StatusCodeFilterValidationError{ + field: "Comparison", + reason: "embedded message failed validation", + cause: err, } } } @@ -586,17 +526,12 @@ } } - { - tmp := m.GetComparison() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DurationFilterValidationError{ - field: "Comparison", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetComparison()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DurationFilterValidationError{ + field: "Comparison", + reason: "embedded message failed validation", + cause: err, } } } @@ -805,17 +740,12 @@ } } - { - tmp := m.GetPercentSampled() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return RuntimeFilterValidationError{ - field: "PercentSampled", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetPercentSampled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuntimeFilterValidationError{ + field: "PercentSampled", + reason: "embedded message failed validation", + cause: err, } } } @@ -896,17 +826,12 @@ for idx, item := range m.GetFilters() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AndFilterValidationError{ - field: fmt.Sprintf("Filters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AndFilterValidationError{ + field: fmt.Sprintf("Filters[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -987,17 +912,12 @@ for idx, item := range m.GetFilters() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return OrFilterValidationError{ - field: fmt.Sprintf("Filters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OrFilterValidationError{ + field: fmt.Sprintf("Filters[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -1076,17 +996,12 @@ } } - { - tmp := m.GetHeader() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HeaderFilterValidationError{ - field: "Header", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHeader()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HeaderFilterValidationError{ + field: "Header", + reason: "embedded message failed validation", + cause: err, } } } @@ -1162,7 +1077,7 @@ if _, ok := _ResponseFlagFilter_Flags_InLookup[item]; !ok { return ResponseFlagFilterValidationError{ field: fmt.Sprintf("Flags[%v]", idx), - reason: "value must be in list [LH UH UT LR UR UF UC UO NR DI FI RL UAEX RLSE DC URX SI]", + reason: "value must be in list [LH UH UT LR UR UF UC UO NR DI FI RL UAEX RLSE DC URX SI IH DPE]", } } @@ -1245,6 +1160,8 @@ "DC": {}, "URX": {}, "SI": {}, + "IH": {}, + "DPE": {}, } // Validate checks the field values on GrpcStatusFilter with the rules defined @@ -1325,3 +1242,98 @@ Cause() error ErrorName() string } = GrpcStatusFilterValidationError{} + +// Validate checks the field values on ExtensionFilter with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ExtensionFilter) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Name + + switch m.ConfigType.(type) { + + case *ExtensionFilter_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExtensionFilterValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExtensionFilter_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExtensionFilterValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ExtensionFilterValidationError is the validation error returned by +// ExtensionFilter.Validate if the designated constraints aren't met. +type ExtensionFilterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ExtensionFilterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ExtensionFilterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ExtensionFilterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ExtensionFilterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ExtensionFilterValidationError) ErrorName() string { return "ExtensionFilterValidationError" } + +// Error satisfies the builtin error interface +func (e ExtensionFilterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sExtensionFilter.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ExtensionFilterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ExtensionFilterValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,17 +1,15 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/config/filter/network/ext_authz/v2/ext_authz.proto -package v2 +package envoy_config_filter_network_ext_authz_v2 import ( fmt "fmt" - io "io" - math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - proto "github.com/gogo/protobuf/proto" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -23,26 +21,16 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// External Authorization filter calls out to an external service over the -// gRPC Authorization API defined by -// :ref:`CheckRequest `. -// A failed check will cause this filter to close the TCP connection. type ExtAuthz struct { - // The prefix to use when emitting statistics. - StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` - // The external authorization gRPC service configuration. - // The default timeout is set to 200ms by this filter. - GrpcService *core.GrpcService `protobuf:"bytes,2,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"` - // The filter's behaviour in case the external authorization service does - // not respond back. When it is set to true, Envoy will also allow traffic in case of - // communication failure between authorization service and the proxy. - // Defaults to false. - FailureModeAllow bool `protobuf:"varint,3,opt,name=failure_mode_allow,json=failureModeAllow,proto3" json:"failure_mode_allow,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` + GrpcService *core.GrpcService `protobuf:"bytes,2,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"` + FailureModeAllow bool `protobuf:"varint,3,opt,name=failure_mode_allow,json=failureModeAllow,proto3" json:"failure_mode_allow,omitempty"` + IncludePeerCertificate bool `protobuf:"varint,4,opt,name=include_peer_certificate,json=includePeerCertificate,proto3" json:"include_peer_certificate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ExtAuthz) Reset() { *m = ExtAuthz{} } @@ -51,26 +39,18 @@ func (*ExtAuthz) Descriptor() ([]byte, []int) { return fileDescriptor_3ec2615c2696024a, []int{0} } + func (m *ExtAuthz) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ExtAuthz.Unmarshal(m, b) } func (m *ExtAuthz) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ExtAuthz.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ExtAuthz.Marshal(b, m, deterministic) } func (m *ExtAuthz) XXX_Merge(src proto.Message) { xxx_messageInfo_ExtAuthz.Merge(m, src) } func (m *ExtAuthz) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ExtAuthz.Size(m) } func (m *ExtAuthz) XXX_DiscardUnknown() { xxx_messageInfo_ExtAuthz.DiscardUnknown(m) @@ -99,6 +79,13 @@ return false } +func (m *ExtAuthz) GetIncludePeerCertificate() bool { + if m != nil { + return m.IncludePeerCertificate + } + return false +} + func init() { proto.RegisterType((*ExtAuthz)(nil), "envoy.config.filter.network.ext_authz.v2.ExtAuthz") } @@ -108,370 +95,29 @@ } var fileDescriptor_3ec2615c2696024a = []byte{ - // 307 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x41, 0x4b, 0xc3, 0x30, - 0x14, 0xc7, 0xc9, 0x26, 0xb2, 0x65, 0x0a, 0xd2, 0x8b, 0x63, 0x87, 0x52, 0xc4, 0x43, 0x11, 0x49, - 0xa0, 0x82, 0x78, 0xdd, 0x40, 0x3c, 0x09, 0xa5, 0x9e, 0xf4, 0x52, 0x62, 0xfb, 0x5a, 0x83, 0xb5, - 0x09, 0x59, 0x96, 0x75, 0x7e, 0x21, 0xbf, 0x83, 0x27, 0x8f, 0x1e, 0xfd, 0x08, 0xd2, 0x9b, 0xdf, - 0x42, 0xd2, 0x6c, 0xd4, 0xa3, 0xb7, 0xbc, 0xfc, 0xdf, 0xef, 0xff, 0x7f, 0xef, 0xe1, 0x2b, 0xa8, - 0x8d, 0xd8, 0xd0, 0x4c, 0xd4, 0x05, 0x2f, 0x69, 0xc1, 0x2b, 0x0d, 0x8a, 0xd6, 0xa0, 0xd7, 0x42, - 0x3d, 0x53, 0x68, 0x74, 0xca, 0x56, 0xfa, 0xe9, 0x95, 0x9a, 0xa8, 0x2f, 0x88, 0x54, 0x42, 0x0b, - 0x2f, 0xec, 0x48, 0xe2, 0x48, 0xe2, 0x48, 0xb2, 0x25, 0x49, 0xdf, 0x6c, 0xa2, 0xd9, 0xa9, 0xcb, - 0x60, 0x92, 0x5b, 0x9f, 0x4c, 0x28, 0xa0, 0xa5, 0x92, 0x59, 0xba, 0x04, 0x65, 0x78, 0x06, 0xce, - 0x6f, 0x76, 0x6c, 0x58, 0xc5, 0x73, 0xa6, 0x81, 0xee, 0x1e, 0x4e, 0x38, 0x79, 0x43, 0x78, 0x74, - 0xdd, 0xe8, 0xb9, 0xb5, 0xf3, 0xce, 0xf0, 0x64, 0xa9, 0x99, 0x4e, 0xa5, 0x82, 0x82, 0x37, 0x53, - 0x14, 0xa0, 0x70, 0xbc, 0x18, 0xbf, 0xff, 0x7c, 0x0c, 0xf7, 0xd4, 0x20, 0x40, 0x09, 0xb6, 0x6a, - 0xdc, 0x89, 0xde, 0x1c, 0x1f, 0xfc, 0xcd, 0x99, 0x0e, 0x02, 0x14, 0x4e, 0x22, 0x9f, 0xb8, 0xc1, - 0x99, 0xe4, 0xc4, 0x44, 0xc4, 0x8e, 0x43, 0x6e, 0x94, 0xcc, 0xee, 0x5c, 0x57, 0x32, 0x29, 0xfb, - 0xc2, 0x3b, 0xc7, 0x5e, 0xc1, 0x78, 0xb5, 0x52, 0x90, 0xbe, 0x88, 0x1c, 0x52, 0x56, 0x55, 0x62, - 0x3d, 0x1d, 0x06, 0x28, 0x1c, 0x25, 0x47, 0x5b, 0xe5, 0x56, 0xe4, 0x30, 0xb7, 0xff, 0x8b, 0xfb, - 0xcf, 0xd6, 0x47, 0x5f, 0xad, 0x8f, 0xbe, 0x5b, 0x1f, 0xe1, 0x4b, 0x2e, 0x5c, 0x94, 0x54, 0xa2, - 0xd9, 0x90, 0xff, 0x9e, 0x6b, 0x71, 0xb8, 0x5b, 0x36, 0xb6, 0xeb, 0xc7, 0xe8, 0x61, 0x60, 0xa2, - 0xc7, 0xfd, 0xee, 0x16, 0x17, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x17, 0xc6, 0x56, 0xb0, - 0x01, 0x00, 0x00, -} - -func (m *ExtAuthz) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ExtAuthz) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.StatPrefix) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintExtAuthz(dAtA, i, uint64(len(m.StatPrefix))) - i += copy(dAtA[i:], m.StatPrefix) - } - if m.GrpcService != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintExtAuthz(dAtA, i, uint64(m.GrpcService.Size())) - n1, err := m.GrpcService.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.FailureModeAllow { - dAtA[i] = 0x18 - i++ - if m.FailureModeAllow { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintExtAuthz(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *ExtAuthz) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.StatPrefix) - if l > 0 { - n += 1 + l + sovExtAuthz(uint64(l)) - } - if m.GrpcService != nil { - l = m.GrpcService.Size() - n += 1 + l + sovExtAuthz(uint64(l)) - } - if m.FailureModeAllow { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovExtAuthz(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + // 384 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xb1, 0xee, 0xd3, 0x30, + 0x10, 0xc6, 0xe5, 0x52, 0x4a, 0x71, 0x41, 0xaa, 0x32, 0x40, 0x54, 0x89, 0x2a, 0x42, 0x0c, 0x19, + 0xc0, 0x96, 0x52, 0x09, 0x75, 0x6d, 0x10, 0x62, 0x42, 0x8a, 0xca, 0x03, 0x44, 0xc6, 0xb9, 0x04, + 0x8b, 0xd4, 0xb6, 0x1c, 0x27, 0x4d, 0x99, 0x98, 0x58, 0x59, 0x79, 0x16, 0x9e, 0x80, 0x95, 0x27, + 0xe0, 0x1d, 0x18, 0x19, 0x10, 0x72, 0x9c, 0x2a, 0x48, 0x30, 0xfc, 0xb7, 0x5c, 0x7e, 0xf7, 0x9d, + 0xef, 0xbe, 0x0f, 0xef, 0x41, 0x76, 0xea, 0x42, 0xb9, 0x92, 0xa5, 0xa8, 0x68, 0x29, 0x6a, 0x0b, + 0x86, 0x4a, 0xb0, 0x67, 0x65, 0xde, 0x53, 0xe8, 0x6d, 0xce, 0x5a, 0xfb, 0xee, 0x03, 0xed, 0x92, + 0xa9, 0x20, 0xda, 0x28, 0xab, 0x82, 0x78, 0x50, 0x12, 0xaf, 0x24, 0x5e, 0x49, 0x46, 0x25, 0x99, + 0x9a, 0xbb, 0x64, 0xf3, 0xc4, 0xbf, 0xc1, 0xb4, 0x70, 0x73, 0xb8, 0x32, 0x40, 0x2b, 0xa3, 0x79, + 0xde, 0x80, 0xe9, 0x04, 0x07, 0x3f, 0x6f, 0xb3, 0x6d, 0x0b, 0xcd, 0x28, 0x93, 0x52, 0x59, 0x66, + 0x85, 0x92, 0x0d, 0x3d, 0x89, 0xca, 0x30, 0x7b, 0xe5, 0x8f, 0xfe, 0xe1, 0x8d, 0x65, 0xb6, 0x6d, + 0x46, 0xfc, 0xb0, 0x63, 0xb5, 0x28, 0x98, 0x05, 0x7a, 0xfd, 0xf0, 0xe0, 0xf1, 0x0f, 0x84, 0x97, + 0x2f, 0x7b, 0x7b, 0x70, 0xdb, 0x04, 0x31, 0x5e, 0x39, 0x55, 0xae, 0x0d, 0x94, 0xa2, 0x0f, 0x51, + 0x84, 0xe2, 0xbb, 0xe9, 0x9d, 0x5f, 0xe9, 0xdc, 0xcc, 0x22, 0x74, 0xc4, 0x8e, 0x65, 0x03, 0x0a, + 0x0e, 0xf8, 0xde, 0xdf, 0x4b, 0x86, 0xb3, 0x08, 0xc5, 0xab, 0x64, 0x4b, 0xfc, 0xd5, 0x4c, 0x0b, + 0xd2, 0x25, 0xc4, 0xdd, 0x42, 0x5e, 0x19, 0xcd, 0xdf, 0xf8, 0xae, 0xe3, 0xaa, 0x9a, 0x8a, 0xe0, + 0x29, 0x0e, 0x4a, 0x26, 0xea, 0xd6, 0x40, 0x7e, 0x52, 0x05, 0xe4, 0xac, 0xae, 0xd5, 0x39, 0xbc, + 0x15, 0xa1, 0x78, 0x79, 0x5c, 0x8f, 0xe4, 0xb5, 0x2a, 0xe0, 0xe0, 0xfe, 0x07, 0x7b, 0x1c, 0x0a, + 0xc9, 0xeb, 0xb6, 0x80, 0x5c, 0x03, 0x98, 0x9c, 0x83, 0xb1, 0xa2, 0x14, 0x9c, 0x59, 0x08, 0xe7, + 0x83, 0xe6, 0xc1, 0xc8, 0x33, 0x00, 0xf3, 0x62, 0xa2, 0xe9, 0x27, 0xf4, 0xf3, 0xcb, 0xef, 0xcf, + 0xb7, 0x69, 0xf0, 0xcc, 0x2f, 0x07, 0xbd, 0x05, 0xd9, 0x38, 0x8b, 0xc6, 0x58, 0x9a, 0xff, 0xe5, + 0xb2, 0xfb, 0xfa, 0xf1, 0xdb, 0xf7, 0xc5, 0x6c, 0x8d, 0xf0, 0x73, 0xa1, 0xfc, 0x59, 0xda, 0xa8, + 0xfe, 0x42, 0x6e, 0x9a, 0x6b, 0x7a, 0xff, 0x6a, 0x6b, 0xe6, 0x8c, 0xce, 0xd0, 0xdb, 0xc5, 0xe0, + 0xf8, 0xee, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x56, 0xa0, 0x9b, 0x55, 0x02, 0x00, 0x00, } -func sozExtAuthz(x uint64) (n int) { - return sovExtAuthz(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *ExtAuthz) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ExtAuthz: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ExtAuthz: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StatPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthExtAuthz - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthExtAuthz - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StatPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GrpcService", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExtAuthz - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExtAuthz - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.GrpcService == nil { - m.GrpcService = &core.GrpcService{} - } - if err := m.GrpcService.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field FailureModeAllow", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.FailureModeAllow = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipExtAuthz(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthExtAuthz - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthExtAuthz - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipExtAuthz(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthExtAuthz - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthExtAuthz - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExtAuthz - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipExtAuthz(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthExtAuthz - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthExtAuthz = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowExtAuthz = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2/ext_authz.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/config/filter/network/ext_authz/v2/ext_authz.proto -package v2 +package envoy_config_filter_network_ext_authz_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _ext_authz_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on ExtAuthz with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *ExtAuthz) Validate() error { @@ -47,23 +50,20 @@ } } - { - tmp := m.GetGrpcService() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ExtAuthzValidationError{ - field: "GrpcService", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGrpcService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExtAuthzValidationError{ + field: "GrpcService", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for FailureModeAllow + // no validation rules for IncludePeerCertificate + return nil } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,65 +1,59 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto -package v2 +package envoy_config_filter_network_http_connection_manager_v2 import ( fmt "fmt" - io "io" - math "math" - time "time" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" v21 "github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2" + v23 "github.com/envoyproxy/go-control-plane/envoy/config/trace/v2" _type "github.com/envoyproxy/go-control-plane/envoy/type" + v22 "github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + duration "github.com/golang/protobuf/ptypes/duration" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type HttpConnectionManager_CodecType int32 const ( - // For every new connection, the connection manager will determine which - // codec to use. This mode supports both ALPN for TLS listeners as well as - // protocol inference for plaintext listeners. If ALPN data is available, it - // is preferred, otherwise protocol inference is used. In almost all cases, - // this is the right option to choose for this setting. - AUTO HttpConnectionManager_CodecType = 0 - // The connection manager will assume that the client is speaking HTTP/1.1. - HTTP1 HttpConnectionManager_CodecType = 1 - // The connection manager will assume that the client is speaking HTTP/2 - // (Envoy does not require HTTP/2 to take place over TLS or to use ALPN. - // Prior knowledge is allowed). - HTTP2 HttpConnectionManager_CodecType = 2 + HttpConnectionManager_AUTO HttpConnectionManager_CodecType = 0 + HttpConnectionManager_HTTP1 HttpConnectionManager_CodecType = 1 + HttpConnectionManager_HTTP2 HttpConnectionManager_CodecType = 2 + HttpConnectionManager_HTTP3 HttpConnectionManager_CodecType = 3 ) var HttpConnectionManager_CodecType_name = map[int32]string{ 0: "AUTO", 1: "HTTP1", 2: "HTTP2", + 3: "HTTP3", } var HttpConnectionManager_CodecType_value = map[string]int32{ "AUTO": 0, "HTTP1": 1, "HTTP2": 2, + "HTTP3": 3, } func (x HttpConnectionManager_CodecType) String() string { @@ -70,25 +64,42 @@ return fileDescriptor_8fe65268985a88f7, []int{0, 0} } -// How to handle the :ref:`config_http_conn_man_headers_x-forwarded-client-cert` (XFCC) HTTP -// header. +type HttpConnectionManager_ServerHeaderTransformation int32 + +const ( + HttpConnectionManager_OVERWRITE HttpConnectionManager_ServerHeaderTransformation = 0 + HttpConnectionManager_APPEND_IF_ABSENT HttpConnectionManager_ServerHeaderTransformation = 1 + HttpConnectionManager_PASS_THROUGH HttpConnectionManager_ServerHeaderTransformation = 2 +) + +var HttpConnectionManager_ServerHeaderTransformation_name = map[int32]string{ + 0: "OVERWRITE", + 1: "APPEND_IF_ABSENT", + 2: "PASS_THROUGH", +} + +var HttpConnectionManager_ServerHeaderTransformation_value = map[string]int32{ + "OVERWRITE": 0, + "APPEND_IF_ABSENT": 1, + "PASS_THROUGH": 2, +} + +func (x HttpConnectionManager_ServerHeaderTransformation) String() string { + return proto.EnumName(HttpConnectionManager_ServerHeaderTransformation_name, int32(x)) +} + +func (HttpConnectionManager_ServerHeaderTransformation) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{0, 1} +} + type HttpConnectionManager_ForwardClientCertDetails int32 const ( - // Do not send the XFCC header to the next hop. This is the default value. - SANITIZE HttpConnectionManager_ForwardClientCertDetails = 0 - // When the client connection is mTLS (Mutual TLS), forward the XFCC header - // in the request. - FORWARD_ONLY HttpConnectionManager_ForwardClientCertDetails = 1 - // When the client connection is mTLS, append the client certificate - // information to the request’s XFCC header and forward it. - APPEND_FORWARD HttpConnectionManager_ForwardClientCertDetails = 2 - // When the client connection is mTLS, reset the XFCC header with the client - // certificate information and send it to the next hop. - SANITIZE_SET HttpConnectionManager_ForwardClientCertDetails = 3 - // Always forward the XFCC header in the request, regardless of whether the - // client connection is mTLS. - ALWAYS_FORWARD_ONLY HttpConnectionManager_ForwardClientCertDetails = 4 + HttpConnectionManager_SANITIZE HttpConnectionManager_ForwardClientCertDetails = 0 + HttpConnectionManager_FORWARD_ONLY HttpConnectionManager_ForwardClientCertDetails = 1 + HttpConnectionManager_APPEND_FORWARD HttpConnectionManager_ForwardClientCertDetails = 2 + HttpConnectionManager_SANITIZE_SET HttpConnectionManager_ForwardClientCertDetails = 3 + HttpConnectionManager_ALWAYS_FORWARD_ONLY HttpConnectionManager_ForwardClientCertDetails = 4 ) var HttpConnectionManager_ForwardClientCertDetails_name = map[int32]string{ @@ -112,16 +123,14 @@ } func (HttpConnectionManager_ForwardClientCertDetails) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8fe65268985a88f7, []int{0, 1} + return fileDescriptor_8fe65268985a88f7, []int{0, 2} } type HttpConnectionManager_Tracing_OperationName int32 const ( - // The HTTP listener is used for ingress/incoming requests. - INGRESS HttpConnectionManager_Tracing_OperationName = 0 - // The HTTP listener is used for egress/outgoing requests. - EGRESS HttpConnectionManager_Tracing_OperationName = 1 + HttpConnectionManager_Tracing_INGRESS HttpConnectionManager_Tracing_OperationName = 0 + HttpConnectionManager_Tracing_EGRESS HttpConnectionManager_Tracing_OperationName = 1 ) var HttpConnectionManager_Tracing_OperationName_name = map[int32]string{ @@ -142,208 +151,47 @@ return fileDescriptor_8fe65268985a88f7, []int{0, 0, 0} } -// [#comment:next free field: 31] type HttpConnectionManager struct { - // Supplies the type of codec that the connection manager should use. - CodecType HttpConnectionManager_CodecType `protobuf:"varint,1,opt,name=codec_type,json=codecType,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_CodecType" json:"codec_type,omitempty"` - // The human readable prefix to use when emitting statistics for the - // connection manager. See the :ref:`statistics documentation ` for - // more information. - StatPrefix string `protobuf:"bytes,2,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` + CodecType HttpConnectionManager_CodecType `protobuf:"varint,1,opt,name=codec_type,json=codecType,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_CodecType" json:"codec_type,omitempty"` + StatPrefix string `protobuf:"bytes,2,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` // Types that are valid to be assigned to RouteSpecifier: // *HttpConnectionManager_Rds // *HttpConnectionManager_RouteConfig - RouteSpecifier isHttpConnectionManager_RouteSpecifier `protobuf_oneof:"route_specifier"` - // A list of individual HTTP filters that make up the filter chain for - // requests made to the connection manager. Order matters as the filters are - // processed sequentially as request events happen. - HttpFilters []*HttpFilter `protobuf:"bytes,5,rep,name=http_filters,json=httpFilters,proto3" json:"http_filters,omitempty"` - // Whether the connection manager manipulates the :ref:`config_http_conn_man_headers_user-agent` - // and :ref:`config_http_conn_man_headers_downstream-service-cluster` headers. See the linked - // documentation for more information. Defaults to false. - AddUserAgent *types.BoolValue `protobuf:"bytes,6,opt,name=add_user_agent,json=addUserAgent,proto3" json:"add_user_agent,omitempty"` - // Presence of the object defines whether the connection manager - // emits :ref:`tracing ` data to the :ref:`configured tracing provider - // `. - Tracing *HttpConnectionManager_Tracing `protobuf:"bytes,7,opt,name=tracing,proto3" json:"tracing,omitempty"` - // Additional HTTP/1 settings that are passed to the HTTP/1 codec. - HttpProtocolOptions *core.Http1ProtocolOptions `protobuf:"bytes,8,opt,name=http_protocol_options,json=httpProtocolOptions,proto3" json:"http_protocol_options,omitempty"` - // Additional HTTP/2 settings that are passed directly to the HTTP/2 codec. - Http2ProtocolOptions *core.Http2ProtocolOptions `protobuf:"bytes,9,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"` - // An optional override that the connection manager will write to the server - // header in responses. If not set, the default is *envoy*. - ServerName string `protobuf:"bytes,10,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"` - // The maximum request headers size for incoming connections. - // If unconfigured, the default max request headers allowed is 60 KiB. - // Requests that exceed this limit will receive a 431 response. - // The max configurable limit is 96 KiB, based on current implementation - // constraints. - MaxRequestHeadersKb *types.UInt32Value `protobuf:"bytes,29,opt,name=max_request_headers_kb,json=maxRequestHeadersKb,proto3" json:"max_request_headers_kb,omitempty"` - // The idle timeout for connections managed by the connection manager. The - // idle timeout is defined as the period in which there are no active - // requests. If not set, there is no idle timeout. When the idle timeout is - // reached the connection will be closed. If the connection is an HTTP/2 - // connection a drain sequence will occur prior to closing the connection. See - // :ref:`drain_timeout - // `. - IdleTimeout *time.Duration `protobuf:"bytes,11,opt,name=idle_timeout,json=idleTimeout,proto3,stdduration" json:"idle_timeout,omitempty"` - // The stream idle timeout for connections managed by the connection manager. - // If not specified, this defaults to 5 minutes. The default value was selected - // so as not to interfere with any smaller configured timeouts that may have - // existed in configurations prior to the introduction of this feature, while - // introducing robustness to TCP connections that terminate without a FIN. - // - // This idle timeout applies to new streams and is overridable by the - // :ref:`route-level idle_timeout - // `. Even on a stream in - // which the override applies, prior to receipt of the initial request - // headers, the :ref:`stream_idle_timeout - // ` - // applies. Each time an encode/decode event for headers or data is processed - // for the stream, the timer will be reset. If the timeout fires, the stream - // is terminated with a 408 Request Timeout error code if no upstream response - // header has been received, otherwise a stream reset occurs. - // - // Note that it is possible to idle timeout even if the wire traffic for a stream is non-idle, due - // to the granularity of events presented to the connection manager. For example, while receiving - // very large request headers, it may be the case that there is traffic regularly arriving on the - // wire while the connection manage is only able to observe the end-of-headers event, hence the - // stream may still idle timeout. - // - // A value of 0 will completely disable the connection manager stream idle - // timeout, although per-route idle timeout overrides will continue to apply. - StreamIdleTimeout *time.Duration `protobuf:"bytes,24,opt,name=stream_idle_timeout,json=streamIdleTimeout,proto3,stdduration" json:"stream_idle_timeout,omitempty"` - // A timeout for idle requests managed by the connection manager. - // The timer is activated when the request is initiated, and is disarmed when the last byte of the - // request is sent upstream (i.e. all decoding filters have processed the request), OR when the - // response is initiated. If not specified or set to 0, this timeout is disabled. - RequestTimeout *time.Duration `protobuf:"bytes,28,opt,name=request_timeout,json=requestTimeout,proto3,stdduration" json:"request_timeout,omitempty"` - // The time that Envoy will wait between sending an HTTP/2 “shutdown - // notification” (GOAWAY frame with max stream ID) and a final GOAWAY frame. - // This is used so that Envoy provides a grace period for new streams that - // race with the final GOAWAY frame. During this grace period, Envoy will - // continue to accept new streams. After the grace period, a final GOAWAY - // frame is sent and Envoy will start refusing new streams. Draining occurs - // both when a connection hits the idle timeout or during general server - // draining. The default grace period is 5000 milliseconds (5 seconds) if this - // option is not specified. - DrainTimeout *time.Duration `protobuf:"bytes,12,opt,name=drain_timeout,json=drainTimeout,proto3,stdduration" json:"drain_timeout,omitempty"` - // The delayed close timeout is for downstream connections managed by the HTTP connection manager. - // It is defined as a grace period after connection close processing has been locally initiated - // during which Envoy will wait for the peer to close (i.e., a TCP FIN/RST is received by Envoy - // from the downstream connection) prior to Envoy closing the socket associated with that - // connection. - // NOTE: This timeout is enforced even when the socket associated with the downstream connection - // is pending a flush of the write buffer. However, any progress made writing data to the socket - // will restart the timer associated with this timeout. This means that the total grace period for - // a socket in this state will be - // +. - // - // Delaying Envoy's connection close and giving the peer the opportunity to initiate the close - // sequence mitigates a race condition that exists when downstream clients do not drain/process - // data in a connection's receive buffer after a remote close has been detected via a socket - // write(). This race leads to such clients failing to process the response code sent by Envoy, - // which could result in erroneous downstream processing. - // - // If the timeout triggers, Envoy will close the connection's socket. - // - // The default timeout is 1000 ms if this option is not specified. - // - // .. NOTE:: - // To be useful in avoiding the race condition described above, this timeout must be set - // to *at least* +<100ms to account for - // a reasonsable "worst" case processing time for a full iteration of Envoy's event loop>. - // - // .. WARNING:: - // A value of 0 will completely disable delayed close processing. When disabled, the downstream - // connection's socket will be closed immediately after the write flush is completed or will - // never close if the write flush does not complete. - DelayedCloseTimeout *time.Duration `protobuf:"bytes,26,opt,name=delayed_close_timeout,json=delayedCloseTimeout,proto3,stdduration" json:"delayed_close_timeout,omitempty"` - // Configuration for :ref:`HTTP access logs ` - // emitted by the connection manager. - AccessLog []*v21.AccessLog `protobuf:"bytes,13,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"` - // If set to true, the connection manager will use the real remote address - // of the client connection when determining internal versus external origin and manipulating - // various headers. If set to false or absent, the connection manager will use the - // :ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header. See the documentation for - // :ref:`config_http_conn_man_headers_x-forwarded-for`, - // :ref:`config_http_conn_man_headers_x-envoy-internal`, and - // :ref:`config_http_conn_man_headers_x-envoy-external-address` for more information. - UseRemoteAddress *types.BoolValue `protobuf:"bytes,14,opt,name=use_remote_address,json=useRemoteAddress,proto3" json:"use_remote_address,omitempty"` - // The number of additional ingress proxy hops from the right side of the - // :ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header to trust when - // determining the origin client's IP address. The default is zero if this option - // is not specified. See the documentation for - // :ref:`config_http_conn_man_headers_x-forwarded-for` for more information. - XffNumTrustedHops uint32 `protobuf:"varint,19,opt,name=xff_num_trusted_hops,json=xffNumTrustedHops,proto3" json:"xff_num_trusted_hops,omitempty"` - // Configures what network addresses are considered internal for stats and header sanitation - // purposes. If unspecified, only RFC1918 IP addresses will be considered internal. - // See the documentation for :ref:`config_http_conn_man_headers_x-envoy-internal` for more - // information about internal/external addresses. - InternalAddressConfig *HttpConnectionManager_InternalAddressConfig `protobuf:"bytes,25,opt,name=internal_address_config,json=internalAddressConfig,proto3" json:"internal_address_config,omitempty"` - // If set, Envoy will not append the remote address to the - // :ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header. This may be used in - // conjunction with HTTP filters that explicitly manipulate XFF after the HTTP connection manager - // has mutated the request headers. While :ref:`use_remote_address - // ` - // will also suppress XFF addition, it has consequences for logging and other - // Envoy uses of the remote address, so *skip_xff_append* should be used - // when only an elision of XFF addition is intended. - SkipXffAppend bool `protobuf:"varint,21,opt,name=skip_xff_append,json=skipXffAppend,proto3" json:"skip_xff_append,omitempty"` - // Via header value to append to request and response headers. If this is - // empty, no via header will be appended. - Via string `protobuf:"bytes,22,opt,name=via,proto3" json:"via,omitempty"` - // Whether the connection manager will generate the :ref:`x-request-id - // ` header if it does not exist. This defaults to - // true. Generating a random UUID4 is expensive so in high throughput scenarios where this feature - // is not desired it can be disabled. - GenerateRequestId *types.BoolValue `protobuf:"bytes,15,opt,name=generate_request_id,json=generateRequestId,proto3" json:"generate_request_id,omitempty"` - // How to handle the :ref:`config_http_conn_man_headers_x-forwarded-client-cert` (XFCC) HTTP - // header. - ForwardClientCertDetails HttpConnectionManager_ForwardClientCertDetails `protobuf:"varint,16,opt,name=forward_client_cert_details,json=forwardClientCertDetails,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ForwardClientCertDetails" json:"forward_client_cert_details,omitempty"` - // This field is valid only when :ref:`forward_client_cert_details - // ` - // is APPEND_FORWARD or SANITIZE_SET and the client connection is mTLS. It specifies the fields in - // the client certificate to be forwarded. Note that in the - // :ref:`config_http_conn_man_headers_x-forwarded-client-cert` header, *Hash* is always set, and - // *By* is always set when the client certificate presents the URI type Subject Alternative Name - // value. - SetCurrentClientCertDetails *HttpConnectionManager_SetCurrentClientCertDetails `protobuf:"bytes,17,opt,name=set_current_client_cert_details,json=setCurrentClientCertDetails,proto3" json:"set_current_client_cert_details,omitempty"` - // If proxy_100_continue is true, Envoy will proxy incoming "Expect: - // 100-continue" headers upstream, and forward "100 Continue" responses - // downstream. If this is false or not set, Envoy will instead strip the - // "Expect: 100-continue" header, and send a "100 Continue" response itself. - Proxy_100Continue bool `protobuf:"varint,18,opt,name=proxy_100_continue,json=proxy100Continue,proto3" json:"proxy_100_continue,omitempty"` - // If - // :ref:`use_remote_address - // ` - // is true and represent_ipv4_remote_address_as_ipv4_mapped_ipv6 is true and the remote address is - // an IPv4 address, the address will be mapped to IPv6 before it is appended to *x-forwarded-for*. - // This is useful for testing compatibility of upstream services that parse the header value. For - // example, 50.0.0.1 is represented as ::FFFF:50.0.0.1. See `IPv4-Mapped IPv6 Addresses - // `_ for details. This will also affect the - // :ref:`config_http_conn_man_headers_x-envoy-external-address` header. See - // :ref:`http_connection_manager.represent_ipv4_remote_address_as_ipv4_mapped_ipv6 - // ` for runtime - // control. - // [#not-implemented-hide:] - RepresentIpv4RemoteAddressAsIpv4MappedIpv6 bool `protobuf:"varint,20,opt,name=represent_ipv4_remote_address_as_ipv4_mapped_ipv6,json=representIpv4RemoteAddressAsIpv4MappedIpv6,proto3" json:"represent_ipv4_remote_address_as_ipv4_mapped_ipv6,omitempty"` - UpgradeConfigs []*HttpConnectionManager_UpgradeConfig `protobuf:"bytes,23,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"` - // Should paths be normalized according to RFC 3986 before any processing of - // requests by HTTP filters or routing? This affects the upstream *:path* header - // as well. For paths that fail this check, Envoy will respond with 400 to - // paths that are malformed. This defaults to false currently but will default - // true in the future. When not specified, this value may be overridden by the - // runtime variable - // :ref:`http_connection_manager.normalize_path`. - // See `Normalization and Comparison ` - // for details of normalization. - // Note that Envoy does not perform - // `case normalization ` - NormalizePath *types.BoolValue `protobuf:"bytes,30,opt,name=normalize_path,json=normalizePath,proto3" json:"normalize_path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // *HttpConnectionManager_ScopedRoutes + RouteSpecifier isHttpConnectionManager_RouteSpecifier `protobuf_oneof:"route_specifier"` + HttpFilters []*HttpFilter `protobuf:"bytes,5,rep,name=http_filters,json=httpFilters,proto3" json:"http_filters,omitempty"` + AddUserAgent *wrappers.BoolValue `protobuf:"bytes,6,opt,name=add_user_agent,json=addUserAgent,proto3" json:"add_user_agent,omitempty"` + Tracing *HttpConnectionManager_Tracing `protobuf:"bytes,7,opt,name=tracing,proto3" json:"tracing,omitempty"` + CommonHttpProtocolOptions *core.HttpProtocolOptions `protobuf:"bytes,35,opt,name=common_http_protocol_options,json=commonHttpProtocolOptions,proto3" json:"common_http_protocol_options,omitempty"` + HttpProtocolOptions *core.Http1ProtocolOptions `protobuf:"bytes,8,opt,name=http_protocol_options,json=httpProtocolOptions,proto3" json:"http_protocol_options,omitempty"` + Http2ProtocolOptions *core.Http2ProtocolOptions `protobuf:"bytes,9,opt,name=http2_protocol_options,json=http2ProtocolOptions,proto3" json:"http2_protocol_options,omitempty"` + ServerName string `protobuf:"bytes,10,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"` + ServerHeaderTransformation HttpConnectionManager_ServerHeaderTransformation `protobuf:"varint,34,opt,name=server_header_transformation,json=serverHeaderTransformation,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ServerHeaderTransformation" json:"server_header_transformation,omitempty"` + MaxRequestHeadersKb *wrappers.UInt32Value `protobuf:"bytes,29,opt,name=max_request_headers_kb,json=maxRequestHeadersKb,proto3" json:"max_request_headers_kb,omitempty"` + IdleTimeout *duration.Duration `protobuf:"bytes,11,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` // Deprecated: Do not use. + StreamIdleTimeout *duration.Duration `protobuf:"bytes,24,opt,name=stream_idle_timeout,json=streamIdleTimeout,proto3" json:"stream_idle_timeout,omitempty"` + RequestTimeout *duration.Duration `protobuf:"bytes,28,opt,name=request_timeout,json=requestTimeout,proto3" json:"request_timeout,omitempty"` + DrainTimeout *duration.Duration `protobuf:"bytes,12,opt,name=drain_timeout,json=drainTimeout,proto3" json:"drain_timeout,omitempty"` + DelayedCloseTimeout *duration.Duration `protobuf:"bytes,26,opt,name=delayed_close_timeout,json=delayedCloseTimeout,proto3" json:"delayed_close_timeout,omitempty"` + AccessLog []*v21.AccessLog `protobuf:"bytes,13,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"` + UseRemoteAddress *wrappers.BoolValue `protobuf:"bytes,14,opt,name=use_remote_address,json=useRemoteAddress,proto3" json:"use_remote_address,omitempty"` + XffNumTrustedHops uint32 `protobuf:"varint,19,opt,name=xff_num_trusted_hops,json=xffNumTrustedHops,proto3" json:"xff_num_trusted_hops,omitempty"` + InternalAddressConfig *HttpConnectionManager_InternalAddressConfig `protobuf:"bytes,25,opt,name=internal_address_config,json=internalAddressConfig,proto3" json:"internal_address_config,omitempty"` + SkipXffAppend bool `protobuf:"varint,21,opt,name=skip_xff_append,json=skipXffAppend,proto3" json:"skip_xff_append,omitempty"` + Via string `protobuf:"bytes,22,opt,name=via,proto3" json:"via,omitempty"` + GenerateRequestId *wrappers.BoolValue `protobuf:"bytes,15,opt,name=generate_request_id,json=generateRequestId,proto3" json:"generate_request_id,omitempty"` + PreserveExternalRequestId bool `protobuf:"varint,32,opt,name=preserve_external_request_id,json=preserveExternalRequestId,proto3" json:"preserve_external_request_id,omitempty"` + ForwardClientCertDetails HttpConnectionManager_ForwardClientCertDetails `protobuf:"varint,16,opt,name=forward_client_cert_details,json=forwardClientCertDetails,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ForwardClientCertDetails" json:"forward_client_cert_details,omitempty"` + SetCurrentClientCertDetails *HttpConnectionManager_SetCurrentClientCertDetails `protobuf:"bytes,17,opt,name=set_current_client_cert_details,json=setCurrentClientCertDetails,proto3" json:"set_current_client_cert_details,omitempty"` + Proxy_100Continue bool `protobuf:"varint,18,opt,name=proxy_100_continue,json=proxy100Continue,proto3" json:"proxy_100_continue,omitempty"` + RepresentIpv4RemoteAddressAsIpv4MappedIpv6 bool `protobuf:"varint,20,opt,name=represent_ipv4_remote_address_as_ipv4_mapped_ipv6,json=representIpv4RemoteAddressAsIpv4MappedIpv6,proto3" json:"represent_ipv4_remote_address_as_ipv4_mapped_ipv6,omitempty"` + UpgradeConfigs []*HttpConnectionManager_UpgradeConfig `protobuf:"bytes,23,rep,name=upgrade_configs,json=upgradeConfigs,proto3" json:"upgrade_configs,omitempty"` + NormalizePath *wrappers.BoolValue `protobuf:"bytes,30,opt,name=normalize_path,json=normalizePath,proto3" json:"normalize_path,omitempty"` + MergeSlashes bool `protobuf:"varint,33,opt,name=merge_slashes,json=mergeSlashes,proto3" json:"merge_slashes,omitempty"` + RequestIdExtension *RequestIDExtension `protobuf:"bytes,36,opt,name=request_id_extension,json=requestIdExtension,proto3" json:"request_id_extension,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpConnectionManager) Reset() { *m = HttpConnectionManager{} } @@ -352,26 +200,18 @@ func (*HttpConnectionManager) Descriptor() ([]byte, []int) { return fileDescriptor_8fe65268985a88f7, []int{0} } + func (m *HttpConnectionManager) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpConnectionManager.Unmarshal(m, b) } func (m *HttpConnectionManager) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpConnectionManager.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpConnectionManager.Marshal(b, m, deterministic) } func (m *HttpConnectionManager) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpConnectionManager.Merge(m, src) } func (m *HttpConnectionManager) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpConnectionManager.Size(m) } func (m *HttpConnectionManager) XXX_DiscardUnknown() { xxx_messageInfo_HttpConnectionManager.DiscardUnknown(m) @@ -379,22 +219,42 @@ var xxx_messageInfo_HttpConnectionManager proto.InternalMessageInfo +func (m *HttpConnectionManager) GetCodecType() HttpConnectionManager_CodecType { + if m != nil { + return m.CodecType + } + return HttpConnectionManager_AUTO +} + +func (m *HttpConnectionManager) GetStatPrefix() string { + if m != nil { + return m.StatPrefix + } + return "" +} + type isHttpConnectionManager_RouteSpecifier interface { isHttpConnectionManager_RouteSpecifier() - MarshalTo([]byte) (int, error) - Size() int } type HttpConnectionManager_Rds struct { Rds *Rds `protobuf:"bytes,3,opt,name=rds,proto3,oneof"` } + type HttpConnectionManager_RouteConfig struct { RouteConfig *v2.RouteConfiguration `protobuf:"bytes,4,opt,name=route_config,json=routeConfig,proto3,oneof"` } -func (*HttpConnectionManager_Rds) isHttpConnectionManager_RouteSpecifier() {} +type HttpConnectionManager_ScopedRoutes struct { + ScopedRoutes *ScopedRoutes `protobuf:"bytes,31,opt,name=scoped_routes,json=scopedRoutes,proto3,oneof"` +} + +func (*HttpConnectionManager_Rds) isHttpConnectionManager_RouteSpecifier() {} + func (*HttpConnectionManager_RouteConfig) isHttpConnectionManager_RouteSpecifier() {} +func (*HttpConnectionManager_ScopedRoutes) isHttpConnectionManager_RouteSpecifier() {} + func (m *HttpConnectionManager) GetRouteSpecifier() isHttpConnectionManager_RouteSpecifier { if m != nil { return m.RouteSpecifier @@ -402,20 +262,6 @@ return nil } -func (m *HttpConnectionManager) GetCodecType() HttpConnectionManager_CodecType { - if m != nil { - return m.CodecType - } - return AUTO -} - -func (m *HttpConnectionManager) GetStatPrefix() string { - if m != nil { - return m.StatPrefix - } - return "" -} - func (m *HttpConnectionManager) GetRds() *Rds { if x, ok := m.GetRouteSpecifier().(*HttpConnectionManager_Rds); ok { return x.Rds @@ -430,6 +276,13 @@ return nil } +func (m *HttpConnectionManager) GetScopedRoutes() *ScopedRoutes { + if x, ok := m.GetRouteSpecifier().(*HttpConnectionManager_ScopedRoutes); ok { + return x.ScopedRoutes + } + return nil +} + func (m *HttpConnectionManager) GetHttpFilters() []*HttpFilter { if m != nil { return m.HttpFilters @@ -437,7 +290,7 @@ return nil } -func (m *HttpConnectionManager) GetAddUserAgent() *types.BoolValue { +func (m *HttpConnectionManager) GetAddUserAgent() *wrappers.BoolValue { if m != nil { return m.AddUserAgent } @@ -451,6 +304,13 @@ return nil } +func (m *HttpConnectionManager) GetCommonHttpProtocolOptions() *core.HttpProtocolOptions { + if m != nil { + return m.CommonHttpProtocolOptions + } + return nil +} + func (m *HttpConnectionManager) GetHttpProtocolOptions() *core.Http1ProtocolOptions { if m != nil { return m.HttpProtocolOptions @@ -472,42 +332,50 @@ return "" } -func (m *HttpConnectionManager) GetMaxRequestHeadersKb() *types.UInt32Value { +func (m *HttpConnectionManager) GetServerHeaderTransformation() HttpConnectionManager_ServerHeaderTransformation { + if m != nil { + return m.ServerHeaderTransformation + } + return HttpConnectionManager_OVERWRITE +} + +func (m *HttpConnectionManager) GetMaxRequestHeadersKb() *wrappers.UInt32Value { if m != nil { return m.MaxRequestHeadersKb } return nil } -func (m *HttpConnectionManager) GetIdleTimeout() *time.Duration { +// Deprecated: Do not use. +func (m *HttpConnectionManager) GetIdleTimeout() *duration.Duration { if m != nil { return m.IdleTimeout } return nil } -func (m *HttpConnectionManager) GetStreamIdleTimeout() *time.Duration { +func (m *HttpConnectionManager) GetStreamIdleTimeout() *duration.Duration { if m != nil { return m.StreamIdleTimeout } return nil } -func (m *HttpConnectionManager) GetRequestTimeout() *time.Duration { +func (m *HttpConnectionManager) GetRequestTimeout() *duration.Duration { if m != nil { return m.RequestTimeout } return nil } -func (m *HttpConnectionManager) GetDrainTimeout() *time.Duration { +func (m *HttpConnectionManager) GetDrainTimeout() *duration.Duration { if m != nil { return m.DrainTimeout } return nil } -func (m *HttpConnectionManager) GetDelayedCloseTimeout() *time.Duration { +func (m *HttpConnectionManager) GetDelayedCloseTimeout() *duration.Duration { if m != nil { return m.DelayedCloseTimeout } @@ -521,7 +389,7 @@ return nil } -func (m *HttpConnectionManager) GetUseRemoteAddress() *types.BoolValue { +func (m *HttpConnectionManager) GetUseRemoteAddress() *wrappers.BoolValue { if m != nil { return m.UseRemoteAddress } @@ -556,18 +424,25 @@ return "" } -func (m *HttpConnectionManager) GetGenerateRequestId() *types.BoolValue { +func (m *HttpConnectionManager) GetGenerateRequestId() *wrappers.BoolValue { if m != nil { return m.GenerateRequestId } return nil } +func (m *HttpConnectionManager) GetPreserveExternalRequestId() bool { + if m != nil { + return m.PreserveExternalRequestId + } + return false +} + func (m *HttpConnectionManager) GetForwardClientCertDetails() HttpConnectionManager_ForwardClientCertDetails { if m != nil { return m.ForwardClientCertDetails } - return SANITIZE + return HttpConnectionManager_SANITIZE } func (m *HttpConnectionManager) GetSetCurrentClientCertDetails() *HttpConnectionManager_SetCurrentClientCertDetails { @@ -598,122 +473,49 @@ return nil } -func (m *HttpConnectionManager) GetNormalizePath() *types.BoolValue { +func (m *HttpConnectionManager) GetNormalizePath() *wrappers.BoolValue { if m != nil { return m.NormalizePath } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HttpConnectionManager) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HttpConnectionManager_OneofMarshaler, _HttpConnectionManager_OneofUnmarshaler, _HttpConnectionManager_OneofSizer, []interface{}{ - (*HttpConnectionManager_Rds)(nil), - (*HttpConnectionManager_RouteConfig)(nil), +func (m *HttpConnectionManager) GetMergeSlashes() bool { + if m != nil { + return m.MergeSlashes } + return false } -func _HttpConnectionManager_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HttpConnectionManager) - // route_specifier - switch x := m.RouteSpecifier.(type) { - case *HttpConnectionManager_Rds: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Rds); err != nil { - return err - } - case *HttpConnectionManager_RouteConfig: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.RouteConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("HttpConnectionManager.RouteSpecifier has unexpected type %T", x) - } - return nil -} - -func _HttpConnectionManager_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HttpConnectionManager) - switch tag { - case 3: // route_specifier.rds - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Rds) - err := b.DecodeMessage(msg) - m.RouteSpecifier = &HttpConnectionManager_Rds{msg} - return true, err - case 4: // route_specifier.route_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(v2.RouteConfiguration) - err := b.DecodeMessage(msg) - m.RouteSpecifier = &HttpConnectionManager_RouteConfig{msg} - return true, err - default: - return false, nil - } -} - -func _HttpConnectionManager_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HttpConnectionManager) - // route_specifier - switch x := m.RouteSpecifier.(type) { - case *HttpConnectionManager_Rds: - s := proto.Size(x.Rds) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HttpConnectionManager_RouteConfig: - s := proto.Size(x.RouteConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +func (m *HttpConnectionManager) GetRequestIdExtension() *RequestIDExtension { + if m != nil { + return m.RequestIdExtension + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HttpConnectionManager) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*HttpConnectionManager_Rds)(nil), + (*HttpConnectionManager_RouteConfig)(nil), + (*HttpConnectionManager_ScopedRoutes)(nil), } - return n } type HttpConnectionManager_Tracing struct { - // The span name will be derived from this field. - OperationName HttpConnectionManager_Tracing_OperationName `protobuf:"varint,1,opt,name=operation_name,json=operationName,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_Tracing_OperationName" json:"operation_name,omitempty"` - // A list of header names used to create tags for the active span. The header name is used to - // populate the tag name, and the header value is used to populate the tag value. The tag is - // created if the specified header name is present in the request's headers. - RequestHeadersForTags []string `protobuf:"bytes,2,rep,name=request_headers_for_tags,json=requestHeadersForTags,proto3" json:"request_headers_for_tags,omitempty"` - // Target percentage of requests managed by this HTTP connection manager that will be force - // traced if the :ref:`x-client-trace-id ` - // header is set. This field is a direct analog for the runtime variable - // 'tracing.client_sampling' in the :ref:`HTTP Connection Manager - // `. - // Default: 100% - ClientSampling *_type.Percent `protobuf:"bytes,3,opt,name=client_sampling,json=clientSampling,proto3" json:"client_sampling,omitempty"` - // Target percentage of requests managed by this HTTP connection manager that will be randomly - // selected for trace generation, if not requested by the client or not forced. This field is - // a direct analog for the runtime variable 'tracing.random_sampling' in the - // :ref:`HTTP Connection Manager `. - // Default: 100% - RandomSampling *_type.Percent `protobuf:"bytes,4,opt,name=random_sampling,json=randomSampling,proto3" json:"random_sampling,omitempty"` - // Target percentage of requests managed by this HTTP connection manager that will be traced - // after all other sampling checks have been applied (client-directed, force tracing, random - // sampling). This field functions as an upper limit on the total configured sampling rate. For - // instance, setting client_sampling to 100% but overall_sampling to 1% will result in only 1% - // of client requests with the appropriate headers to be force traced. This field is a direct - // analog for the runtime variable 'tracing.global_enabled' in the - // :ref:`HTTP Connection Manager `. - // Default: 100% - OverallSampling *_type.Percent `protobuf:"bytes,5,opt,name=overall_sampling,json=overallSampling,proto3" json:"overall_sampling,omitempty"` - // Whether to annotate spans with additional data. If true, spans will include logs for stream - // events. - Verbose bool `protobuf:"varint,6,opt,name=verbose,proto3" json:"verbose,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + OperationName HttpConnectionManager_Tracing_OperationName `protobuf:"varint,1,opt,name=operation_name,json=operationName,proto3,enum=envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_Tracing_OperationName" json:"operation_name,omitempty"` // Deprecated: Do not use. + RequestHeadersForTags []string `protobuf:"bytes,2,rep,name=request_headers_for_tags,json=requestHeadersForTags,proto3" json:"request_headers_for_tags,omitempty"` // Deprecated: Do not use. + ClientSampling *_type.Percent `protobuf:"bytes,3,opt,name=client_sampling,json=clientSampling,proto3" json:"client_sampling,omitempty"` + RandomSampling *_type.Percent `protobuf:"bytes,4,opt,name=random_sampling,json=randomSampling,proto3" json:"random_sampling,omitempty"` + OverallSampling *_type.Percent `protobuf:"bytes,5,opt,name=overall_sampling,json=overallSampling,proto3" json:"overall_sampling,omitempty"` + Verbose bool `protobuf:"varint,6,opt,name=verbose,proto3" json:"verbose,omitempty"` + MaxPathTagLength *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_path_tag_length,json=maxPathTagLength,proto3" json:"max_path_tag_length,omitempty"` + CustomTags []*v22.CustomTag `protobuf:"bytes,8,rep,name=custom_tags,json=customTags,proto3" json:"custom_tags,omitempty"` + Provider *v23.Tracing_Http `protobuf:"bytes,9,opt,name=provider,proto3" json:"provider,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpConnectionManager_Tracing) Reset() { *m = HttpConnectionManager_Tracing{} } @@ -722,26 +524,18 @@ func (*HttpConnectionManager_Tracing) Descriptor() ([]byte, []int) { return fileDescriptor_8fe65268985a88f7, []int{0, 0} } + func (m *HttpConnectionManager_Tracing) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpConnectionManager_Tracing.Unmarshal(m, b) } func (m *HttpConnectionManager_Tracing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpConnectionManager_Tracing.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpConnectionManager_Tracing.Marshal(b, m, deterministic) } func (m *HttpConnectionManager_Tracing) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpConnectionManager_Tracing.Merge(m, src) } func (m *HttpConnectionManager_Tracing) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpConnectionManager_Tracing.Size(m) } func (m *HttpConnectionManager_Tracing) XXX_DiscardUnknown() { xxx_messageInfo_HttpConnectionManager_Tracing.DiscardUnknown(m) @@ -749,13 +543,15 @@ var xxx_messageInfo_HttpConnectionManager_Tracing proto.InternalMessageInfo +// Deprecated: Do not use. func (m *HttpConnectionManager_Tracing) GetOperationName() HttpConnectionManager_Tracing_OperationName { if m != nil { return m.OperationName } - return INGRESS + return HttpConnectionManager_Tracing_INGRESS } +// Deprecated: Do not use. func (m *HttpConnectionManager_Tracing) GetRequestHeadersForTags() []string { if m != nil { return m.RequestHeadersForTags @@ -791,8 +587,28 @@ return false } +func (m *HttpConnectionManager_Tracing) GetMaxPathTagLength() *wrappers.UInt32Value { + if m != nil { + return m.MaxPathTagLength + } + return nil +} + +func (m *HttpConnectionManager_Tracing) GetCustomTags() []*v22.CustomTag { + if m != nil { + return m.CustomTags + } + return nil +} + +func (m *HttpConnectionManager_Tracing) GetProvider() *v23.Tracing_Http { + if m != nil { + return m.Provider + } + return nil +} + type HttpConnectionManager_InternalAddressConfig struct { - // Whether unix socket addresses should be considered internal. UnixSockets bool `protobuf:"varint,1,opt,name=unix_sockets,json=unixSockets,proto3" json:"unix_sockets,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -809,26 +625,18 @@ func (*HttpConnectionManager_InternalAddressConfig) Descriptor() ([]byte, []int) { return fileDescriptor_8fe65268985a88f7, []int{0, 1} } + func (m *HttpConnectionManager_InternalAddressConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Unmarshal(m, b) } func (m *HttpConnectionManager_InternalAddressConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Marshal(b, m, deterministic) } func (m *HttpConnectionManager_InternalAddressConfig) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Merge(m, src) } func (m *HttpConnectionManager_InternalAddressConfig) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.Size(m) } func (m *HttpConnectionManager_InternalAddressConfig) XXX_DiscardUnknown() { xxx_messageInfo_HttpConnectionManager_InternalAddressConfig.DiscardUnknown(m) @@ -844,21 +652,14 @@ } type HttpConnectionManager_SetCurrentClientCertDetails struct { - // Whether to forward the subject of the client cert. Defaults to false. - Subject *types.BoolValue `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` - // Whether to forward the entire client cert in URL encoded PEM format. This will appear in the - // XFCC header comma separated from other values with the value Cert="PEM". - // Defaults to false. - Cert bool `protobuf:"varint,3,opt,name=cert,proto3" json:"cert,omitempty"` - // Whether to forward the DNS type Subject Alternative Names of the client cert. - // Defaults to false. - Dns bool `protobuf:"varint,4,opt,name=dns,proto3" json:"dns,omitempty"` - // Whether to forward the URI type Subject Alternative Name of the client cert. Defaults to - // false. - Uri bool `protobuf:"varint,5,opt,name=uri,proto3" json:"uri,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Subject *wrappers.BoolValue `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` + Cert bool `protobuf:"varint,3,opt,name=cert,proto3" json:"cert,omitempty"` + Chain bool `protobuf:"varint,6,opt,name=chain,proto3" json:"chain,omitempty"` + Dns bool `protobuf:"varint,4,opt,name=dns,proto3" json:"dns,omitempty"` + Uri bool `protobuf:"varint,5,opt,name=uri,proto3" json:"uri,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpConnectionManager_SetCurrentClientCertDetails) Reset() { @@ -871,26 +672,18 @@ func (*HttpConnectionManager_SetCurrentClientCertDetails) Descriptor() ([]byte, []int) { return fileDescriptor_8fe65268985a88f7, []int{0, 2} } + func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Unmarshal(m, b) } func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Marshal(b, m, deterministic) } func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Merge(m, src) } func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.Size(m) } func (m *HttpConnectionManager_SetCurrentClientCertDetails) XXX_DiscardUnknown() { xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails.DiscardUnknown(m) @@ -898,7 +691,7 @@ var xxx_messageInfo_HttpConnectionManager_SetCurrentClientCertDetails proto.InternalMessageInfo -func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetSubject() *types.BoolValue { +func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetSubject() *wrappers.BoolValue { if m != nil { return m.Subject } @@ -912,6 +705,13 @@ return false } +func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetChain() bool { + if m != nil { + return m.Chain + } + return false +} + func (m *HttpConnectionManager_SetCurrentClientCertDetails) GetDns() bool { if m != nil { return m.Dns @@ -926,36 +726,13 @@ return false } -// The configuration for HTTP upgrades. -// For each upgrade type desired, an UpgradeConfig must be added. -// -// .. warning:: -// -// The current implementation of upgrade headers does not handle -// multi-valued upgrade headers. Support for multi-valued headers may be -// added in the future if needed. -// -// .. warning:: -// The current implementation of upgrade headers does not work with HTTP/2 -// upstreams. type HttpConnectionManager_UpgradeConfig struct { - // The case-insensitive name of this upgrade, e.g. "websocket". - // For each upgrade type present in upgrade_configs, requests with - // Upgrade: [upgrade_type] - // will be proxied upstream. - UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"` - // If present, this represents the filter chain which will be created for - // this type of upgrade. If no filters are present, the filter chain for - // HTTP connections will be used for this upgrade type. - Filters []*HttpFilter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"` - // Determines if upgrades are enabled or disabled by default. Defaults to true. - // This can be overridden on a per-route basis with :ref:`cluster - // ` as documented in the - // :ref:`upgrade documentation `. - Enabled *types.BoolValue `protobuf:"bytes,3,opt,name=enabled,proto3" json:"enabled,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UpgradeType string `protobuf:"bytes,1,opt,name=upgrade_type,json=upgradeType,proto3" json:"upgrade_type,omitempty"` + Filters []*HttpFilter `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"` + Enabled *wrappers.BoolValue `protobuf:"bytes,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HttpConnectionManager_UpgradeConfig) Reset() { *m = HttpConnectionManager_UpgradeConfig{} } @@ -964,26 +741,18 @@ func (*HttpConnectionManager_UpgradeConfig) Descriptor() ([]byte, []int) { return fileDescriptor_8fe65268985a88f7, []int{0, 3} } + func (m *HttpConnectionManager_UpgradeConfig) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Unmarshal(m, b) } func (m *HttpConnectionManager_UpgradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Marshal(b, m, deterministic) } func (m *HttpConnectionManager_UpgradeConfig) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Merge(m, src) } func (m *HttpConnectionManager_UpgradeConfig) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpConnectionManager_UpgradeConfig.Size(m) } func (m *HttpConnectionManager_UpgradeConfig) XXX_DiscardUnknown() { xxx_messageInfo_HttpConnectionManager_UpgradeConfig.DiscardUnknown(m) @@ -1005,7 +774,7 @@ return nil } -func (m *HttpConnectionManager_UpgradeConfig) GetEnabled() *types.BoolValue { +func (m *HttpConnectionManager_UpgradeConfig) GetEnabled() *wrappers.BoolValue { if m != nil { return m.Enabled } @@ -1013,16 +782,11 @@ } type Rds struct { - // Configuration source specifier for RDS. - ConfigSource core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source"` - // The name of the route configuration. This name will be passed to the RDS - // API. This allows an Envoy configuration with multiple HTTP listeners (and - // associated HTTP connection manager filters) to use different route - // configurations. - RouteConfigName string `protobuf:"bytes,2,opt,name=route_config_name,json=routeConfigName,proto3" json:"route_config_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ConfigSource *core.ConfigSource `protobuf:"bytes,1,opt,name=config_source,json=configSource,proto3" json:"config_source,omitempty"` + RouteConfigName string `protobuf:"bytes,2,opt,name=route_config_name,json=routeConfigName,proto3" json:"route_config_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Rds) Reset() { *m = Rds{} } @@ -1031,26 +795,18 @@ func (*Rds) Descriptor() ([]byte, []int) { return fileDescriptor_8fe65268985a88f7, []int{1} } + func (m *Rds) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Rds.Unmarshal(m, b) } func (m *Rds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Rds.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Rds.Marshal(b, m, deterministic) } func (m *Rds) XXX_Merge(src proto.Message) { xxx_messageInfo_Rds.Merge(m, src) } func (m *Rds) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Rds.Size(m) } func (m *Rds) XXX_DiscardUnknown() { xxx_messageInfo_Rds.DiscardUnknown(m) @@ -1058,11 +814,11 @@ var xxx_messageInfo_Rds proto.InternalMessageInfo -func (m *Rds) GetConfigSource() core.ConfigSource { +func (m *Rds) GetConfigSource() *core.ConfigSource { if m != nil { return m.ConfigSource } - return core.ConfigSource{} + return nil } func (m *Rds) GetRouteConfigName() string { @@ -1072,37 +828,452 @@ return "" } +type ScopedRouteConfigurationsList struct { + ScopedRouteConfigurations []*v2.ScopedRouteConfiguration `protobuf:"bytes,1,rep,name=scoped_route_configurations,json=scopedRouteConfigurations,proto3" json:"scoped_route_configurations,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRouteConfigurationsList) Reset() { *m = ScopedRouteConfigurationsList{} } +func (m *ScopedRouteConfigurationsList) String() string { return proto.CompactTextString(m) } +func (*ScopedRouteConfigurationsList) ProtoMessage() {} +func (*ScopedRouteConfigurationsList) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{2} +} + +func (m *ScopedRouteConfigurationsList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRouteConfigurationsList.Unmarshal(m, b) +} +func (m *ScopedRouteConfigurationsList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRouteConfigurationsList.Marshal(b, m, deterministic) +} +func (m *ScopedRouteConfigurationsList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRouteConfigurationsList.Merge(m, src) +} +func (m *ScopedRouteConfigurationsList) XXX_Size() int { + return xxx_messageInfo_ScopedRouteConfigurationsList.Size(m) +} +func (m *ScopedRouteConfigurationsList) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRouteConfigurationsList.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRouteConfigurationsList proto.InternalMessageInfo + +func (m *ScopedRouteConfigurationsList) GetScopedRouteConfigurations() []*v2.ScopedRouteConfiguration { + if m != nil { + return m.ScopedRouteConfigurations + } + return nil +} + +type ScopedRoutes struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + ScopeKeyBuilder *ScopedRoutes_ScopeKeyBuilder `protobuf:"bytes,2,opt,name=scope_key_builder,json=scopeKeyBuilder,proto3" json:"scope_key_builder,omitempty"` + RdsConfigSource *core.ConfigSource `protobuf:"bytes,3,opt,name=rds_config_source,json=rdsConfigSource,proto3" json:"rds_config_source,omitempty"` + // Types that are valid to be assigned to ConfigSpecifier: + // *ScopedRoutes_ScopedRouteConfigurationsList + // *ScopedRoutes_ScopedRds + ConfigSpecifier isScopedRoutes_ConfigSpecifier `protobuf_oneof:"config_specifier"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRoutes) Reset() { *m = ScopedRoutes{} } +func (m *ScopedRoutes) String() string { return proto.CompactTextString(m) } +func (*ScopedRoutes) ProtoMessage() {} +func (*ScopedRoutes) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{3} +} + +func (m *ScopedRoutes) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRoutes.Unmarshal(m, b) +} +func (m *ScopedRoutes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRoutes.Marshal(b, m, deterministic) +} +func (m *ScopedRoutes) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRoutes.Merge(m, src) +} +func (m *ScopedRoutes) XXX_Size() int { + return xxx_messageInfo_ScopedRoutes.Size(m) +} +func (m *ScopedRoutes) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRoutes.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRoutes proto.InternalMessageInfo + +func (m *ScopedRoutes) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ScopedRoutes) GetScopeKeyBuilder() *ScopedRoutes_ScopeKeyBuilder { + if m != nil { + return m.ScopeKeyBuilder + } + return nil +} + +func (m *ScopedRoutes) GetRdsConfigSource() *core.ConfigSource { + if m != nil { + return m.RdsConfigSource + } + return nil +} + +type isScopedRoutes_ConfigSpecifier interface { + isScopedRoutes_ConfigSpecifier() +} + +type ScopedRoutes_ScopedRouteConfigurationsList struct { + ScopedRouteConfigurationsList *ScopedRouteConfigurationsList `protobuf:"bytes,4,opt,name=scoped_route_configurations_list,json=scopedRouteConfigurationsList,proto3,oneof"` +} + +type ScopedRoutes_ScopedRds struct { + ScopedRds *ScopedRds `protobuf:"bytes,5,opt,name=scoped_rds,json=scopedRds,proto3,oneof"` +} + +func (*ScopedRoutes_ScopedRouteConfigurationsList) isScopedRoutes_ConfigSpecifier() {} + +func (*ScopedRoutes_ScopedRds) isScopedRoutes_ConfigSpecifier() {} + +func (m *ScopedRoutes) GetConfigSpecifier() isScopedRoutes_ConfigSpecifier { + if m != nil { + return m.ConfigSpecifier + } + return nil +} + +func (m *ScopedRoutes) GetScopedRouteConfigurationsList() *ScopedRouteConfigurationsList { + if x, ok := m.GetConfigSpecifier().(*ScopedRoutes_ScopedRouteConfigurationsList); ok { + return x.ScopedRouteConfigurationsList + } + return nil +} + +func (m *ScopedRoutes) GetScopedRds() *ScopedRds { + if x, ok := m.GetConfigSpecifier().(*ScopedRoutes_ScopedRds); ok { + return x.ScopedRds + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ScopedRoutes) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ScopedRoutes_ScopedRouteConfigurationsList)(nil), + (*ScopedRoutes_ScopedRds)(nil), + } +} + +type ScopedRoutes_ScopeKeyBuilder struct { + Fragments []*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder `protobuf:"bytes,1,rep,name=fragments,proto3" json:"fragments,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRoutes_ScopeKeyBuilder) Reset() { *m = ScopedRoutes_ScopeKeyBuilder{} } +func (m *ScopedRoutes_ScopeKeyBuilder) String() string { return proto.CompactTextString(m) } +func (*ScopedRoutes_ScopeKeyBuilder) ProtoMessage() {} +func (*ScopedRoutes_ScopeKeyBuilder) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{3, 0} +} + +func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Unmarshal(m, b) +} +func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Marshal(b, m, deterministic) +} +func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Merge(m, src) +} +func (m *ScopedRoutes_ScopeKeyBuilder) XXX_Size() int { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.Size(m) +} +func (m *ScopedRoutes_ScopeKeyBuilder) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder proto.InternalMessageInfo + +func (m *ScopedRoutes_ScopeKeyBuilder) GetFragments() []*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder { + if m != nil { + return m.Fragments + } + return nil +} + +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder struct { + // Types that are valid to be assigned to Type: + // *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ + Type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) Reset() { + *m = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder{} +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) String() string { + return proto.CompactTextString(m) +} +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) ProtoMessage() {} +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{3, 0, 0} +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Unmarshal(m, b) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Marshal(b, m, deterministic) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Merge(m, src) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_Size() int { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Size(m) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder proto.InternalMessageInfo + +type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type interface { + isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type() +} + +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ struct { + HeaderValueExtractor *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor `protobuf:"bytes,1,opt,name=header_value_extractor,json=headerValueExtractor,proto3,oneof"` +} + +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type() { +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) GetType() isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) GetHeaderValueExtractor() *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor { + if x, ok := m.GetType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_); ok { + return x.HeaderValueExtractor + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_)(nil), + } +} + +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + ElementSeparator string `protobuf:"bytes,2,opt,name=element_separator,json=elementSeparator,proto3" json:"element_separator,omitempty"` + // Types that are valid to be assigned to ExtractType: + // *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index + // *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element + ExtractType isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType `protobuf_oneof:"extract_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) Reset() { + *m = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor{} +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) String() string { + return proto.CompactTextString(m) +} +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) ProtoMessage() {} +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{3, 0, 0, 0} +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Unmarshal(m, b) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Marshal(b, m, deterministic) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Merge(m, src) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_Size() int { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Size(m) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor proto.InternalMessageInfo + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetElementSeparator() string { + if m != nil { + return m.ElementSeparator + } + return "" +} + +type isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType interface { + isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType() +} + +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index struct { + Index uint32 `protobuf:"varint,3,opt,name=index,proto3,oneof"` +} + +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element struct { + Element *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement `protobuf:"bytes,4,opt,name=element,proto3,oneof"` +} + +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType() { +} + +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element) isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType() { +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetExtractType() isScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_ExtractType { + if m != nil { + return m.ExtractType + } + return nil +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetIndex() uint32 { + if x, ok := m.GetExtractType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index); ok { + return x.Index + } + return 0 +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) GetElement() *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement { + if x, ok := m.GetExtractType().(*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element); ok { + return x.Element + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index)(nil), + (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element)(nil), + } +} + +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement struct { + Separator string `protobuf:"bytes,1,opt,name=separator,proto3" json:"separator,omitempty"` + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) Reset() { + *m = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement{} +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) String() string { + return proto.CompactTextString(m) +} +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) ProtoMessage() {} +func (*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{3, 0, 0, 0, 0} +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Unmarshal(m, b) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Marshal(b, m, deterministic) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Merge(m, src) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_Size() int { + return xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Size(m) +} +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement proto.InternalMessageInfo + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) GetSeparator() string { + if m != nil { + return m.Separator + } + return "" +} + +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +type ScopedRds struct { + ScopedRdsConfigSource *core.ConfigSource `protobuf:"bytes,1,opt,name=scoped_rds_config_source,json=scopedRdsConfigSource,proto3" json:"scoped_rds_config_source,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ScopedRds) Reset() { *m = ScopedRds{} } +func (m *ScopedRds) String() string { return proto.CompactTextString(m) } +func (*ScopedRds) ProtoMessage() {} +func (*ScopedRds) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{4} +} + +func (m *ScopedRds) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ScopedRds.Unmarshal(m, b) +} +func (m *ScopedRds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ScopedRds.Marshal(b, m, deterministic) +} +func (m *ScopedRds) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedRds.Merge(m, src) +} +func (m *ScopedRds) XXX_Size() int { + return xxx_messageInfo_ScopedRds.Size(m) +} +func (m *ScopedRds) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedRds.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopedRds proto.InternalMessageInfo + +func (m *ScopedRds) GetScopedRdsConfigSource() *core.ConfigSource { + if m != nil { + return m.ScopedRdsConfigSource + } + return nil +} + type HttpFilter struct { - // The name of the filter to instantiate. The name must match a supported - // filter. The built-in filters are: - // - // [#comment:TODO(mattklein123): Auto generate the following list] - // * :ref:`envoy.buffer ` - // * :ref:`envoy.cors ` - // * :ref:`envoy.ext_authz ` - // * :ref:`envoy.fault ` - // * :ref:`envoy.filters.http.csrf ` - // * :ref:`envoy.filters.http.header_to_metadata ` - // * :ref:`envoy.filters.http.grpc_http1_reverse_bridge \ - // ` - // * :ref:`envoy.filters.http.jwt_authn ` - // * :ref:`envoy.filters.http.rbac ` - // * :ref:`envoy.filters.http.tap ` - // * :ref:`envoy.gzip ` - // * :ref:`envoy.http_dynamo_filter ` - // * :ref:`envoy.grpc_http1_bridge ` - // * :ref:`envoy.grpc_json_transcoder ` - // * :ref:`envoy.grpc_web ` - // * :ref:`envoy.health_check ` - // * :ref:`envoy.ip_tagging ` - // * :ref:`envoy.lua ` - // * :ref:`envoy.rate_limit ` - // * :ref:`envoy.router ` - // * :ref:`envoy.squash ` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Filter specific configuration which depends on the filter being instantiated. See the supported - // filters for further documentation. - // // Types that are valid to be assigned to ConfigType: // *HttpFilter_Config // *HttpFilter_TypedConfig @@ -1116,28 +1287,20 @@ func (m *HttpFilter) String() string { return proto.CompactTextString(m) } func (*HttpFilter) ProtoMessage() {} func (*HttpFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_8fe65268985a88f7, []int{2} + return fileDescriptor_8fe65268985a88f7, []int{5} } + func (m *HttpFilter) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpFilter.Unmarshal(m, b) } func (m *HttpFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpFilter.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpFilter.Marshal(b, m, deterministic) } func (m *HttpFilter) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpFilter.Merge(m, src) } func (m *HttpFilter) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpFilter.Size(m) } func (m *HttpFilter) XXX_DiscardUnknown() { xxx_messageInfo_HttpFilter.DiscardUnknown(m) @@ -1145,20 +1308,27 @@ var xxx_messageInfo_HttpFilter proto.InternalMessageInfo +func (m *HttpFilter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type isHttpFilter_ConfigType interface { isHttpFilter_ConfigType() - MarshalTo([]byte) (int, error) - Size() int } type HttpFilter_Config struct { - Config *types.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` } + type HttpFilter_TypedConfig struct { - TypedConfig *types.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"` + TypedConfig *any.Any `protobuf:"bytes,4,opt,name=typed_config,json=typedConfig,proto3,oneof"` } -func (*HttpFilter_Config) isHttpFilter_ConfigType() {} +func (*HttpFilter_Config) isHttpFilter_ConfigType() {} + func (*HttpFilter_TypedConfig) isHttpFilter_ConfigType() {} func (m *HttpFilter) GetConfigType() isHttpFilter_ConfigType { @@ -1168,103 +1338,71 @@ return nil } -func (m *HttpFilter) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *HttpFilter) GetConfig() *types.Struct { +// Deprecated: Do not use. +func (m *HttpFilter) GetConfig() *_struct.Struct { if x, ok := m.GetConfigType().(*HttpFilter_Config); ok { return x.Config } return nil } -func (m *HttpFilter) GetTypedConfig() *types.Any { +func (m *HttpFilter) GetTypedConfig() *any.Any { if x, ok := m.GetConfigType().(*HttpFilter_TypedConfig); ok { return x.TypedConfig } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HttpFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HttpFilter_OneofMarshaler, _HttpFilter_OneofUnmarshaler, _HttpFilter_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HttpFilter) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*HttpFilter_Config)(nil), (*HttpFilter_TypedConfig)(nil), } } -func _HttpFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HttpFilter) - // config_type - switch x := m.ConfigType.(type) { - case *HttpFilter_Config: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Config); err != nil { - return err - } - case *HttpFilter_TypedConfig: - _ = b.EncodeVarint(4<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TypedConfig); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("HttpFilter.ConfigType has unexpected type %T", x) - } - return nil -} - -func _HttpFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HttpFilter) - switch tag { - case 2: // config_type.config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Struct) - err := b.DecodeMessage(msg) - m.ConfigType = &HttpFilter_Config{msg} - return true, err - case 4: // config_type.typed_config - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(types.Any) - err := b.DecodeMessage(msg) - m.ConfigType = &HttpFilter_TypedConfig{msg} - return true, err - default: - return false, nil - } -} - -func _HttpFilter_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HttpFilter) - // config_type - switch x := m.ConfigType.(type) { - case *HttpFilter_Config: - s := proto.Size(x.Config) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HttpFilter_TypedConfig: - s := proto.Size(x.TypedConfig) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) +type RequestIDExtension struct { + TypedConfig *any.Any `protobuf:"bytes,1,opt,name=typed_config,json=typedConfig,proto3" json:"typed_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RequestIDExtension) Reset() { *m = RequestIDExtension{} } +func (m *RequestIDExtension) String() string { return proto.CompactTextString(m) } +func (*RequestIDExtension) ProtoMessage() {} +func (*RequestIDExtension) Descriptor() ([]byte, []int) { + return fileDescriptor_8fe65268985a88f7, []int{6} +} + +func (m *RequestIDExtension) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RequestIDExtension.Unmarshal(m, b) +} +func (m *RequestIDExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RequestIDExtension.Marshal(b, m, deterministic) +} +func (m *RequestIDExtension) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestIDExtension.Merge(m, src) +} +func (m *RequestIDExtension) XXX_Size() int { + return xxx_messageInfo_RequestIDExtension.Size(m) +} +func (m *RequestIDExtension) XXX_DiscardUnknown() { + xxx_messageInfo_RequestIDExtension.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestIDExtension proto.InternalMessageInfo + +func (m *RequestIDExtension) GetTypedConfig() *any.Any { + if m != nil { + return m.TypedConfig } - return n + return nil } func init() { proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_CodecType", HttpConnectionManager_CodecType_name, HttpConnectionManager_CodecType_value) + proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ServerHeaderTransformation", HttpConnectionManager_ServerHeaderTransformation_name, HttpConnectionManager_ServerHeaderTransformation_value) proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_ForwardClientCertDetails", HttpConnectionManager_ForwardClientCertDetails_name, HttpConnectionManager_ForwardClientCertDetails_value) proto.RegisterEnum("envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager_Tracing_OperationName", HttpConnectionManager_Tracing_OperationName_name, HttpConnectionManager_Tracing_OperationName_value) proto.RegisterType((*HttpConnectionManager)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager") @@ -1273,7 +1411,15 @@ proto.RegisterType((*HttpConnectionManager_SetCurrentClientCertDetails)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.SetCurrentClientCertDetails") proto.RegisterType((*HttpConnectionManager_UpgradeConfig)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager.UpgradeConfig") proto.RegisterType((*Rds)(nil), "envoy.config.filter.network.http_connection_manager.v2.Rds") + proto.RegisterType((*ScopedRouteConfigurationsList)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRouteConfigurationsList") + proto.RegisterType((*ScopedRoutes)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes") + proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder") + proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder") + proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor") + proto.RegisterType((*ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRoutes.ScopeKeyBuilder.FragmentBuilder.HeaderValueExtractor.KvElement") + proto.RegisterType((*ScopedRds)(nil), "envoy.config.filter.network.http_connection_manager.v2.ScopedRds") proto.RegisterType((*HttpFilter)(nil), "envoy.config.filter.network.http_connection_manager.v2.HttpFilter") + proto.RegisterType((*RequestIDExtension)(nil), "envoy.config.filter.network.http_connection_manager.v2.RequestIDExtension") } func init() { @@ -1281,3078 +1427,164 @@ } var fileDescriptor_8fe65268985a88f7 = []byte{ - // 1758 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6f, 0x23, 0x49, - 0x15, 0x4f, 0xdb, 0xce, 0xc4, 0x79, 0xfe, 0x88, 0x53, 0x49, 0x26, 0x3d, 0x9e, 0x6c, 0x62, 0x22, - 0x01, 0xd1, 0x80, 0xec, 0xc4, 0x3b, 0x0c, 0xe2, 0x43, 0x08, 0x3b, 0xc9, 0x90, 0x84, 0xd9, 0x24, - 0x6a, 0x3b, 0x0c, 0xbb, 0x0b, 0x6a, 0x2a, 0xdd, 0x65, 0xa7, 0x99, 0x76, 0x57, 0x53, 0x55, 0xed, - 0x49, 0xb8, 0x20, 0xad, 0x38, 0x20, 0x6e, 0x70, 0x40, 0x48, 0x1c, 0xb9, 0x83, 0xb8, 0x01, 0xa7, - 0x3d, 0xa1, 0x3d, 0xf2, 0x17, 0xf0, 0x31, 0xb7, 0xf9, 0x2f, 0x50, 0x7d, 0xb4, 0x13, 0xe7, 0x6b, - 0x46, 0x43, 0xf6, 0x56, 0xf5, 0xde, 0xfb, 0xfd, 0xde, 0xab, 0x57, 0xef, 0xd5, 0x07, 0x74, 0x49, - 0x34, 0xa4, 0x67, 0x0d, 0x8f, 0x46, 0xbd, 0xa0, 0xdf, 0xe8, 0x05, 0xa1, 0x20, 0xac, 0x11, 0x11, - 0xf1, 0x92, 0xb2, 0x17, 0x8d, 0x13, 0x21, 0x62, 0xd7, 0xa3, 0x51, 0x44, 0x3c, 0x11, 0xd0, 0xc8, - 0x1d, 0xe0, 0x08, 0xf7, 0x09, 0x6b, 0x0c, 0x9b, 0x37, 0xa9, 0xea, 0x31, 0xa3, 0x82, 0xa2, 0x27, - 0x8a, 0xb5, 0xae, 0x59, 0xeb, 0x9a, 0xb5, 0x6e, 0x58, 0xeb, 0x37, 0x41, 0x87, 0xcd, 0xea, 0x17, - 0x75, 0x34, 0x38, 0x0e, 0xa4, 0x0f, 0x8f, 0x32, 0x62, 0x22, 0x73, 0x39, 0x4d, 0x98, 0x47, 0x34, - 0x7d, 0xb5, 0x76, 0xd5, 0x4c, 0x29, 0x3c, 0x1a, 0x1a, 0x8b, 0xfb, 0x63, 0x16, 0xcc, 0xe7, 0x46, - 0xbe, 0x7e, 0xdd, 0x72, 0xb1, 0xe7, 0x11, 0xce, 0x43, 0xda, 0x97, 0xb6, 0xa3, 0x89, 0x41, 0xd8, - 0x1a, 0x21, 0xce, 0x62, 0xd2, 0x88, 0x09, 0xf3, 0x48, 0x24, 0x8c, 0xe6, 0x41, 0x9f, 0xd2, 0x7e, - 0x68, 0x5c, 0x1f, 0x27, 0xbd, 0x06, 0x8e, 0xce, 0x8c, 0x6a, 0xf9, 0xb2, 0xca, 0x4f, 0x18, 0x96, - 0x8b, 0x35, 0xfa, 0xa5, 0xcb, 0x7a, 0x2e, 0x58, 0xe2, 0x89, 0x9b, 0xd0, 0x2f, 0x19, 0x8e, 0x63, - 0xc2, 0xd2, 0x45, 0x2c, 0x0e, 0x71, 0x18, 0xf8, 0x58, 0x90, 0x46, 0x3a, 0x30, 0x8a, 0xf9, 0x3e, - 0xed, 0x53, 0x35, 0x6c, 0xc8, 0x91, 0x96, 0xae, 0xfe, 0x6d, 0x09, 0x16, 0x76, 0x84, 0x88, 0x37, - 0x47, 0x29, 0xff, 0x40, 0x67, 0x1c, 0x7d, 0x62, 0x01, 0x78, 0xd4, 0x27, 0x9e, 0x2b, 0x97, 0x67, - 0x5b, 0x35, 0x6b, 0xad, 0xdc, 0x7c, 0x5e, 0x7f, 0xb7, 0xcd, 0xab, 0x5f, 0xeb, 0xa3, 0xbe, 0x29, - 0xf9, 0xbb, 0x67, 0x31, 0x69, 0xc3, 0xdf, 0x5f, 0x7f, 0x9a, 0x9d, 0xfc, 0xc4, 0xca, 0x54, 0x2c, - 0x67, 0xda, 0x4b, 0xc5, 0xe8, 0x11, 0x14, 0xb8, 0xc0, 0xc2, 0x8d, 0x19, 0xe9, 0x05, 0xa7, 0x76, - 0xa6, 0x66, 0xad, 0x4d, 0xb7, 0xa7, 0xa5, 0x6d, 0x8e, 0x65, 0x6a, 0x96, 0x03, 0x52, 0x7b, 0xa8, - 0x94, 0xe8, 0x00, 0xb2, 0xcc, 0xe7, 0x76, 0xb6, 0x66, 0xad, 0x15, 0x9a, 0xdf, 0x7a, 0xd7, 0x40, - 0x1d, 0x9f, 0xef, 0x4c, 0x38, 0x92, 0x09, 0x6d, 0x43, 0x91, 0xd1, 0x44, 0x10, 0x57, 0x93, 0xd8, - 0x39, 0xc5, 0x5c, 0x33, 0xcc, 0x38, 0x0e, 0x94, 0xbd, 0xb4, 0xd8, 0x54, 0x06, 0x66, 0x1b, 0x77, - 0x26, 0x9c, 0x02, 0x3b, 0x97, 0x22, 0x02, 0x45, 0xe5, 0x4f, 0xc7, 0xc0, 0xed, 0xc9, 0x5a, 0x76, - 0xad, 0xd0, 0x6c, 0xff, 0x3f, 0x99, 0x7c, 0xaa, 0xac, 0x9d, 0xc2, 0xc9, 0x68, 0xcc, 0xd1, 0x77, - 0xa1, 0x8c, 0x7d, 0xdf, 0x4d, 0x38, 0x61, 0x2e, 0xee, 0x93, 0x48, 0xd8, 0xf7, 0x54, 0xbc, 0xd5, - 0xba, 0xae, 0x98, 0x7a, 0x5a, 0x31, 0xf5, 0x36, 0xa5, 0xe1, 0x0f, 0x70, 0x98, 0x10, 0xa7, 0x88, - 0x7d, 0xff, 0x88, 0x13, 0xd6, 0x92, 0xf6, 0x88, 0xc2, 0x94, 0x60, 0xd8, 0x0b, 0xa2, 0xbe, 0x3d, - 0xa5, 0xa0, 0x47, 0x77, 0xbb, 0xdb, 0x5d, 0x4d, 0xee, 0xa4, 0x5e, 0xd0, 0xc7, 0xb0, 0xa0, 0x48, - 0xd2, 0xfe, 0x74, 0x69, 0x2c, 0xed, 0xb9, 0x9d, 0x57, 0xee, 0xbf, 0x3c, 0x9e, 0x69, 0xd9, 0xca, - 0x8a, 0x79, 0xe3, 0xd0, 0xd8, 0x1f, 0x68, 0x73, 0x67, 0x4e, 0xb2, 0x5c, 0x12, 0xa2, 0x1f, 0xc3, - 0x7d, 0x29, 0x6e, 0x5e, 0x65, 0x9f, 0xbe, 0x95, 0xbd, 0x79, 0x99, 0x7d, 0xfe, 0xe4, 0x1a, 0x29, - 0x5a, 0x81, 0x02, 0x27, 0x6c, 0x48, 0x98, 0x1b, 0xe1, 0x01, 0xb1, 0x41, 0x56, 0xa6, 0x03, 0x5a, - 0xb4, 0x8f, 0x07, 0x04, 0x11, 0xb8, 0x3f, 0xc0, 0xa7, 0x2e, 0x23, 0x3f, 0x4b, 0x08, 0x17, 0xee, - 0x09, 0xc1, 0x3e, 0x61, 0xdc, 0x7d, 0x71, 0x6c, 0xbf, 0xa7, 0xfc, 0x2f, 0x5d, 0xd9, 0x97, 0xa3, - 0xdd, 0x48, 0xbc, 0xdf, 0x54, 0x3b, 0xd3, 0x46, 0xaa, 0xc6, 0x1f, 0x65, 0x6a, 0x13, 0x66, 0x60, - 0xff, 0xc4, 0x99, 0x1b, 0xe0, 0x53, 0x47, 0xd3, 0xed, 0x68, 0xb6, 0xef, 0x1f, 0xa3, 0x36, 0x14, - 0x03, 0x3f, 0x24, 0xae, 0x08, 0x06, 0x84, 0x26, 0xc2, 0x2e, 0x28, 0xf2, 0x07, 0x57, 0xc8, 0xb7, - 0x4c, 0x75, 0xb6, 0x73, 0xbf, 0xff, 0xf7, 0x8a, 0xe5, 0x14, 0x24, 0xa8, 0xab, 0x31, 0xe8, 0x00, - 0xe6, 0xb8, 0x60, 0x04, 0x0f, 0xdc, 0x31, 0x2a, 0xfb, 0xed, 0xa8, 0x66, 0x35, 0x76, 0xf7, 0x02, - 0xe1, 0x0e, 0xcc, 0xa4, 0xeb, 0x4e, 0xc9, 0x96, 0xde, 0x8e, 0xac, 0x6c, 0x70, 0x29, 0xd3, 0x16, - 0x94, 0x7c, 0x86, 0x83, 0x68, 0xc4, 0x53, 0x7c, 0x3b, 0x9e, 0xa2, 0x42, 0xa5, 0x2c, 0x1d, 0x58, - 0xf0, 0x49, 0x88, 0xcf, 0x88, 0xef, 0x7a, 0x21, 0xe5, 0xe7, 0x4b, 0xac, 0xbe, 0x1d, 0xdb, 0x9c, - 0x41, 0x6f, 0x4a, 0x70, 0x4a, 0xba, 0x07, 0xa0, 0xef, 0x03, 0x37, 0xa4, 0x7d, 0xbb, 0xa4, 0xba, - 0xfa, 0x2b, 0xd7, 0x76, 0xcc, 0xf9, 0xb5, 0x31, 0x6c, 0xd6, 0x5b, 0x6a, 0xf2, 0x8c, 0xf6, 0x9d, - 0x69, 0x9c, 0x0e, 0xd1, 0x0e, 0xa0, 0x84, 0x13, 0x97, 0x91, 0x01, 0x15, 0xc4, 0xc5, 0xbe, 0xcf, - 0x08, 0xe7, 0x76, 0xf9, 0x8d, 0x0d, 0x5c, 0x49, 0x38, 0x71, 0x14, 0xa8, 0xa5, 0x31, 0xa8, 0x01, - 0xf3, 0xa7, 0xbd, 0x9e, 0x1b, 0x25, 0x03, 0x57, 0xb0, 0x84, 0x0b, 0xe2, 0xbb, 0x27, 0x34, 0xe6, - 0xf6, 0x5c, 0xcd, 0x5a, 0x2b, 0x39, 0xb3, 0xa7, 0xbd, 0xde, 0x7e, 0x32, 0xe8, 0x6a, 0xcd, 0x0e, - 0x8d, 0x39, 0xfa, 0x83, 0x05, 0x8b, 0x41, 0x24, 0x08, 0x8b, 0x70, 0x98, 0x7a, 0x4e, 0x4f, 0xbc, - 0x07, 0x2a, 0x00, 0xef, 0x6e, 0x8f, 0x81, 0x5d, 0xe3, 0xcc, 0x44, 0xac, 0x4f, 0x49, 0x67, 0x21, - 0xb8, 0x4e, 0x8c, 0xbe, 0x04, 0x33, 0xfc, 0x45, 0x10, 0xbb, 0x72, 0x4d, 0xf2, 0x9e, 0x8b, 0x7c, - 0x7b, 0xa1, 0x66, 0xad, 0xe5, 0x9d, 0x92, 0x14, 0xff, 0xb0, 0xd7, 0x6b, 0x29, 0x21, 0xaa, 0x40, - 0x76, 0x18, 0x60, 0xfb, 0xbe, 0x6a, 0x43, 0x39, 0x44, 0x7b, 0x30, 0xd7, 0x27, 0x11, 0x61, 0x58, - 0x90, 0x51, 0x13, 0x06, 0xbe, 0x3d, 0xf3, 0xc6, 0x9c, 0xce, 0xa6, 0x30, 0xd3, 0x6b, 0xbb, 0x3e, - 0xfa, 0x8b, 0x05, 0x0f, 0x7b, 0x94, 0xbd, 0xc4, 0x4c, 0x16, 0x50, 0x40, 0x22, 0xe1, 0x7a, 0x84, - 0x09, 0xd7, 0x27, 0x02, 0x07, 0x21, 0xb7, 0x2b, 0xea, 0x72, 0xec, 0xdd, 0x6d, 0x9e, 0x9e, 0x6a, - 0x87, 0x9b, 0xca, 0xdf, 0x26, 0x61, 0x62, 0x4b, 0x7b, 0x1b, 0xbb, 0x2b, 0xed, 0xde, 0x0d, 0x56, - 0xe8, 0xcf, 0x16, 0xac, 0x70, 0x22, 0x5c, 0x2f, 0x61, 0x4c, 0x05, 0x7c, 0x4d, 0xdc, 0xb3, 0x2a, - 0x19, 0xc1, 0xdd, 0xc6, 0xdd, 0x21, 0x62, 0x53, 0xfb, 0xbc, 0x12, 0x94, 0xf3, 0x90, 0xdf, 0xac, - 0x44, 0x5f, 0x05, 0x14, 0x33, 0x7a, 0x7a, 0xe6, 0x6e, 0xac, 0xaf, 0x4b, 0x8f, 0x22, 0x88, 0x12, - 0x62, 0x23, 0xb5, 0xdd, 0x15, 0xa5, 0xd9, 0x58, 0x5f, 0xdf, 0x34, 0x72, 0x44, 0x60, 0x83, 0x91, - 0x98, 0x11, 0x2e, 0x57, 0x15, 0xc4, 0xc3, 0xc7, 0x97, 0xba, 0xc7, 0xc5, 0x5c, 0x8b, 0x07, 0xb2, - 0x6e, 0x7c, 0x39, 0x7e, 0x62, 0xcf, 0x2b, 0xb2, 0x47, 0x23, 0xe0, 0x6e, 0x3c, 0x7c, 0x3c, 0xd6, - 0x3f, 0x2d, 0x2e, 0x45, 0x1f, 0x28, 0xc8, 0x6e, 0x3c, 0x7c, 0x82, 0x7e, 0x69, 0xc1, 0x4c, 0x12, - 0xf7, 0x19, 0xf6, 0xd3, 0x77, 0x00, 0xb7, 0x17, 0x55, 0xaf, 0x7f, 0x7c, 0xb7, 0x69, 0x3b, 0xd2, - 0x4e, 0x4c, 0x3b, 0x94, 0x93, 0x8b, 0x53, 0x8e, 0x5a, 0x50, 0x8e, 0x28, 0x1b, 0xe0, 0x30, 0xf8, - 0x39, 0x71, 0x63, 0x2c, 0x4e, 0xec, 0xe5, 0x37, 0x16, 0x72, 0x69, 0x84, 0x38, 0xc4, 0xe2, 0xa4, - 0xfa, 0xdf, 0x2c, 0x4c, 0x99, 0x2b, 0x18, 0xfd, 0xce, 0x82, 0x32, 0x8d, 0x89, 0x3e, 0xe4, 0xf4, - 0x0d, 0xa6, 0x1f, 0x78, 0xde, 0xe7, 0x72, 0xe5, 0xd7, 0x0f, 0x52, 0x5f, 0xf2, 0x6a, 0x1c, 0x2b, - 0xe0, 0x12, 0xbd, 0xa8, 0x42, 0x5f, 0x07, 0xfb, 0xf2, 0x8d, 0xd9, 0xa3, 0xcc, 0x15, 0xb8, 0xcf, - 0xed, 0x4c, 0x2d, 0xbb, 0x36, 0xed, 0x2c, 0xb0, 0xb1, 0x2b, 0xf0, 0x29, 0x65, 0x5d, 0xdc, 0xe7, - 0xe8, 0xdb, 0x30, 0x63, 0x2a, 0x9c, 0xe3, 0x41, 0x1c, 0xca, 0x47, 0x8c, 0x7e, 0x09, 0xce, 0x99, - 0x15, 0xc9, 0x57, 0x6c, 0xfd, 0x50, 0x3f, 0xd2, 0x9d, 0xb2, 0xb6, 0xed, 0x18, 0x53, 0x89, 0x66, - 0x38, 0xf2, 0xe9, 0xe0, 0x1c, 0x9d, 0xbb, 0x05, 0xad, 0x6d, 0x47, 0xe8, 0xef, 0x40, 0x85, 0x0e, - 0x09, 0xc3, 0x61, 0x78, 0x0e, 0x9f, 0xbc, 0x19, 0x3e, 0x63, 0x8c, 0x47, 0x78, 0x1b, 0xa6, 0x86, - 0x84, 0x1d, 0x53, 0x4e, 0xd4, 0x9b, 0x2d, 0xef, 0xa4, 0xd3, 0xd5, 0x3a, 0x94, 0xc6, 0x52, 0x87, - 0x0a, 0x30, 0xb5, 0xbb, 0xff, 0x3d, 0x67, 0xbb, 0xd3, 0xa9, 0x4c, 0x20, 0x80, 0x7b, 0xdb, 0x7a, - 0x6c, 0x55, 0x73, 0xbf, 0xfa, 0xe3, 0xf2, 0x44, 0xf5, 0x9b, 0xb0, 0x70, 0xed, 0xf1, 0x8a, 0xbe, - 0x00, 0xc5, 0x24, 0x0a, 0x4e, 0x5d, 0x4e, 0xbd, 0x17, 0x44, 0x70, 0xb5, 0xdb, 0x79, 0xa7, 0x20, - 0x65, 0x1d, 0x2d, 0xaa, 0xfe, 0xc6, 0x82, 0x87, 0xb7, 0xf4, 0x2e, 0x7a, 0x0c, 0x53, 0x3c, 0x39, - 0xfe, 0x29, 0xf1, 0x84, 0x42, 0xdf, 0x5e, 0x7b, 0xa9, 0x29, 0x42, 0x90, 0x93, 0x47, 0x8e, 0xda, - 0x8c, 0xbc, 0xa3, 0xc6, 0xf2, 0xb0, 0xf6, 0x23, 0xae, 0x32, 0x9c, 0x77, 0xe4, 0x50, 0x4a, 0x12, - 0x16, 0xa8, 0xa4, 0xe5, 0x1d, 0x39, 0xdc, 0xcb, 0xe5, 0x33, 0x95, 0x6c, 0xf5, 0x1f, 0x16, 0x94, - 0xc6, 0x1a, 0x43, 0x2d, 0xc4, 0xb4, 0xe3, 0xe8, 0x5f, 0x32, 0xed, 0x14, 0x8c, 0x4c, 0x7d, 0x1a, - 0x7e, 0x04, 0x53, 0xe9, 0x5b, 0x3b, 0x73, 0x67, 0x6f, 0xed, 0x94, 0x52, 0xa6, 0x81, 0x44, 0xf8, - 0x38, 0x24, 0xbe, 0x29, 0xb0, 0x5b, 0xd3, 0x60, 0x4c, 0x57, 0x37, 0x60, 0x7a, 0xf4, 0xd9, 0x41, - 0x79, 0xc8, 0xb5, 0x8e, 0xba, 0x07, 0x95, 0x09, 0x34, 0x0d, 0x93, 0x3b, 0xdd, 0xee, 0xe1, 0x46, - 0xc5, 0x4a, 0x87, 0xcd, 0x4a, 0x46, 0xef, 0xe5, 0xea, 0x2f, 0xc0, 0xbe, 0xe9, 0x0a, 0x40, 0x45, - 0xc8, 0x77, 0x5a, 0xfb, 0xbb, 0xdd, 0xdd, 0x8f, 0xb6, 0x2b, 0x13, 0xa8, 0x02, 0xc5, 0xa7, 0x07, - 0xce, 0xf3, 0x96, 0xb3, 0xe5, 0x1e, 0xec, 0x3f, 0xfb, 0xb0, 0x62, 0x21, 0x04, 0xe5, 0xd6, 0xe1, - 0xe1, 0xf6, 0xfe, 0x96, 0x6b, 0x14, 0x95, 0x8c, 0xb4, 0x4a, 0x31, 0x6e, 0x67, 0xbb, 0x5b, 0xc9, - 0xa2, 0x45, 0x98, 0x6b, 0x3d, 0x7b, 0xde, 0xfa, 0xb0, 0xe3, 0x8e, 0xc1, 0x73, 0x3a, 0x80, 0xb6, - 0x0d, 0x33, 0xfa, 0xff, 0xc3, 0x63, 0xe2, 0x05, 0xbd, 0x80, 0x30, 0x34, 0xf9, 0xd7, 0xd7, 0x9f, - 0x66, 0xad, 0xbd, 0x5c, 0xfe, 0x61, 0x65, 0x69, 0xf5, 0xb7, 0x16, 0x64, 0x1d, 0x9f, 0xa3, 0x2e, - 0x94, 0xc6, 0x3e, 0xe2, 0xa6, 0x3c, 0x56, 0xae, 0x79, 0x60, 0xeb, 0x4d, 0xec, 0x28, 0xb3, 0x76, - 0xf9, 0xb3, 0x7f, 0xad, 0xa8, 0xe7, 0xed, 0xe4, 0xaf, 0xd5, 0x51, 0x50, 0xf4, 0x2e, 0x68, 0xd1, - 0xd7, 0x60, 0xf6, 0xe2, 0xef, 0x4b, 0x1f, 0x52, 0x57, 0x3e, 0x80, 0x33, 0x17, 0x7e, 0x5a, 0xb2, - 0x41, 0x56, 0xff, 0x64, 0x01, 0x9c, 0x6f, 0x1b, 0x7a, 0x0f, 0x72, 0xa3, 0xd3, 0x6d, 0x0c, 0xa8, - 0xc4, 0x68, 0x03, 0xee, 0x99, 0xa7, 0x4e, 0x46, 0xc5, 0xbc, 0x78, 0x65, 0x2f, 0x3b, 0xea, 0xf3, - 0xbd, 0x33, 0xe1, 0x18, 0x43, 0xf4, 0x0d, 0x28, 0xca, 0xc2, 0xf3, 0xc7, 0x7f, 0x85, 0xf3, 0x57, - 0x80, 0xad, 0xe8, 0x4c, 0xfe, 0x04, 0x95, 0xad, 0x8e, 0xaf, 0x5d, 0x82, 0x82, 0x59, 0x8c, 0x94, - 0xee, 0xe5, 0xf2, 0xd9, 0x4a, 0xae, 0x2d, 0x3e, 0x7b, 0xb5, 0x6c, 0xfd, 0xf3, 0xd5, 0xb2, 0xf5, - 0x9f, 0x57, 0xcb, 0x16, 0x6c, 0x05, 0x54, 0xa7, 0x4d, 0xdd, 0x77, 0xef, 0x58, 0xb7, 0xed, 0xea, - 0xb5, 0xa7, 0xb1, 0xfa, 0xc2, 0x1c, 0x5a, 0x1f, 0x65, 0x86, 0xcd, 0xe3, 0x7b, 0x2a, 0xce, 0xf7, - 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xb4, 0x5b, 0xb5, 0xe3, 0x11, 0x00, 0x00, -} - -func (m *HttpConnectionManager) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpConnectionManager) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.CodecType != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.CodecType)) - } - if len(m.StatPrefix) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(len(m.StatPrefix))) - i += copy(dAtA[i:], m.StatPrefix) - } - if m.RouteSpecifier != nil { - nn1, err := m.RouteSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if len(m.HttpFilters) > 0 { - for _, msg := range m.HttpFilters { - dAtA[i] = 0x2a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.AddUserAgent != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.AddUserAgent.Size())) - n2, err := m.AddUserAgent.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Tracing != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.Tracing.Size())) - n3, err := m.Tracing.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.HttpProtocolOptions != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.HttpProtocolOptions.Size())) - n4, err := m.HttpProtocolOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.Http2ProtocolOptions != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.Http2ProtocolOptions.Size())) - n5, err := m.Http2ProtocolOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if len(m.ServerName) > 0 { - dAtA[i] = 0x52 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(len(m.ServerName))) - i += copy(dAtA[i:], m.ServerName) - } - if m.IdleTimeout != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout))) - n6, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.IdleTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.DrainTimeout != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.DrainTimeout))) - n7, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.DrainTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if len(m.AccessLog) > 0 { - for _, msg := range m.AccessLog { - dAtA[i] = 0x6a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.UseRemoteAddress != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.UseRemoteAddress.Size())) - n8, err := m.UseRemoteAddress.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - if m.GenerateRequestId != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.GenerateRequestId.Size())) - n9, err := m.GenerateRequestId.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.ForwardClientCertDetails != 0 { - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.ForwardClientCertDetails)) - } - if m.SetCurrentClientCertDetails != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.SetCurrentClientCertDetails.Size())) - n10, err := m.SetCurrentClientCertDetails.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.Proxy_100Continue { - dAtA[i] = 0x90 - i++ - dAtA[i] = 0x1 - i++ - if m.Proxy_100Continue { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XffNumTrustedHops != 0 { - dAtA[i] = 0x98 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.XffNumTrustedHops)) - } - if m.RepresentIpv4RemoteAddressAsIpv4MappedIpv6 { - dAtA[i] = 0xa0 - i++ - dAtA[i] = 0x1 - i++ - if m.RepresentIpv4RemoteAddressAsIpv4MappedIpv6 { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.SkipXffAppend { - dAtA[i] = 0xa8 - i++ - dAtA[i] = 0x1 - i++ - if m.SkipXffAppend { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.Via) > 0 { - dAtA[i] = 0xb2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(len(m.Via))) - i += copy(dAtA[i:], m.Via) - } - if len(m.UpgradeConfigs) > 0 { - for _, msg := range m.UpgradeConfigs { - dAtA[i] = 0xba - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.StreamIdleTimeout != nil { - dAtA[i] = 0xc2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.StreamIdleTimeout))) - n11, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.StreamIdleTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 - } - if m.InternalAddressConfig != nil { - dAtA[i] = 0xca - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.InternalAddressConfig.Size())) - n12, err := m.InternalAddressConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - } - if m.DelayedCloseTimeout != nil { - dAtA[i] = 0xd2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.DelayedCloseTimeout))) - n13, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.DelayedCloseTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - } - if m.RequestTimeout != nil { - dAtA[i] = 0xe2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.RequestTimeout))) - n14, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.RequestTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.MaxRequestHeadersKb != nil { - dAtA[i] = 0xea - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.MaxRequestHeadersKb.Size())) - n15, err := m.MaxRequestHeadersKb.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if m.NormalizePath != nil { - dAtA[i] = 0xf2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.NormalizePath.Size())) - n16, err := m.NormalizePath.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpConnectionManager_Rds) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Rds != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.Rds.Size())) - n17, err := m.Rds.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 - } - return i, nil -} -func (m *HttpConnectionManager_RouteConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.RouteConfig != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.RouteConfig.Size())) - n18, err := m.RouteConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - return i, nil -} -func (m *HttpConnectionManager_Tracing) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpConnectionManager_Tracing) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.OperationName != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.OperationName)) - } - if len(m.RequestHeadersForTags) > 0 { - for _, s := range m.RequestHeadersForTags { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.ClientSampling != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.ClientSampling.Size())) - n19, err := m.ClientSampling.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - if m.RandomSampling != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.RandomSampling.Size())) - n20, err := m.RandomSampling.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if m.OverallSampling != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.OverallSampling.Size())) - n21, err := m.OverallSampling.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - } - if m.Verbose { - dAtA[i] = 0x30 - i++ - if m.Verbose { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpConnectionManager_InternalAddressConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpConnectionManager_InternalAddressConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.UnixSockets { - dAtA[i] = 0x8 - i++ - if m.UnixSockets { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpConnectionManager_SetCurrentClientCertDetails) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpConnectionManager_SetCurrentClientCertDetails) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Subject != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.Subject.Size())) - n22, err := m.Subject.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.Cert { - dAtA[i] = 0x18 - i++ - if m.Cert { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.Dns { - dAtA[i] = 0x20 - i++ - if m.Dns { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.Uri { - dAtA[i] = 0x28 - i++ - if m.Uri { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpConnectionManager_UpgradeConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpConnectionManager_UpgradeConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.UpgradeType) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(len(m.UpgradeType))) - i += copy(dAtA[i:], m.UpgradeType) - } - if len(m.Filters) > 0 { - for _, msg := range m.Filters { - dAtA[i] = 0x12 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Enabled != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.Enabled.Size())) - n23, err := m.Enabled.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *Rds) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Rds) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.ConfigSource.Size())) - n24, err := m.ConfigSource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - if len(m.RouteConfigName) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(len(m.RouteConfigName))) - i += copy(dAtA[i:], m.RouteConfigName) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpFilter) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HttpFilter) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.ConfigType != nil { - nn25, err := m.ConfigType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn25 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HttpFilter_Config) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.Config != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.Config.Size())) - n26, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - return i, nil -} -func (m *HttpFilter_TypedConfig) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.TypedConfig != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintHttpConnectionManager(dAtA, i, uint64(m.TypedConfig.Size())) - n27, err := m.TypedConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - return i, nil -} -func encodeVarintHttpConnectionManager(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *HttpConnectionManager) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CodecType != 0 { - n += 1 + sovHttpConnectionManager(uint64(m.CodecType)) - } - l = len(m.StatPrefix) - if l > 0 { - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.RouteSpecifier != nil { - n += m.RouteSpecifier.Size() - } - if len(m.HttpFilters) > 0 { - for _, e := range m.HttpFilters { - l = e.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - } - if m.AddUserAgent != nil { - l = m.AddUserAgent.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.Tracing != nil { - l = m.Tracing.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.HttpProtocolOptions != nil { - l = m.HttpProtocolOptions.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.Http2ProtocolOptions != nil { - l = m.Http2ProtocolOptions.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - l = len(m.ServerName) - if l > 0 { - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.IdleTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout) - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.DrainTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.DrainTimeout) - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if len(m.AccessLog) > 0 { - for _, e := range m.AccessLog { - l = e.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - } - if m.UseRemoteAddress != nil { - l = m.UseRemoteAddress.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.GenerateRequestId != nil { - l = m.GenerateRequestId.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.ForwardClientCertDetails != 0 { - n += 2 + sovHttpConnectionManager(uint64(m.ForwardClientCertDetails)) - } - if m.SetCurrentClientCertDetails != nil { - l = m.SetCurrentClientCertDetails.Size() - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.Proxy_100Continue { - n += 3 - } - if m.XffNumTrustedHops != 0 { - n += 2 + sovHttpConnectionManager(uint64(m.XffNumTrustedHops)) - } - if m.RepresentIpv4RemoteAddressAsIpv4MappedIpv6 { - n += 3 - } - if m.SkipXffAppend { - n += 3 - } - l = len(m.Via) - if l > 0 { - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if len(m.UpgradeConfigs) > 0 { - for _, e := range m.UpgradeConfigs { - l = e.Size() - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - } - if m.StreamIdleTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.StreamIdleTimeout) - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.InternalAddressConfig != nil { - l = m.InternalAddressConfig.Size() - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.DelayedCloseTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.DelayedCloseTimeout) - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.RequestTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.RequestTimeout) - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.MaxRequestHeadersKb != nil { - l = m.MaxRequestHeadersKb.Size() - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.NormalizePath != nil { - l = m.NormalizePath.Size() - n += 2 + l + sovHttpConnectionManager(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpConnectionManager_Rds) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Rds != nil { - l = m.Rds.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - return n -} -func (m *HttpConnectionManager_RouteConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RouteConfig != nil { - l = m.RouteConfig.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - return n -} -func (m *HttpConnectionManager_Tracing) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.OperationName != 0 { - n += 1 + sovHttpConnectionManager(uint64(m.OperationName)) - } - if len(m.RequestHeadersForTags) > 0 { - for _, s := range m.RequestHeadersForTags { - l = len(s) - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - } - if m.ClientSampling != nil { - l = m.ClientSampling.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.RandomSampling != nil { - l = m.RandomSampling.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.OverallSampling != nil { - l = m.OverallSampling.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.Verbose { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpConnectionManager_InternalAddressConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.UnixSockets { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpConnectionManager_SetCurrentClientCertDetails) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Subject != nil { - l = m.Subject.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.Cert { - n += 2 - } - if m.Dns { - n += 2 - } - if m.Uri { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpConnectionManager_UpgradeConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.UpgradeType) - if l > 0 { - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if len(m.Filters) > 0 { - for _, e := range m.Filters { - l = e.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - } - if m.Enabled != nil { - l = m.Enabled.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Rds) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ConfigSource.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - l = len(m.RouteConfigName) - if l > 0 { - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpFilter) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - if m.ConfigType != nil { - n += m.ConfigType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HttpFilter_Config) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - return n -} -func (m *HttpFilter_TypedConfig) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TypedConfig != nil { - l = m.TypedConfig.Size() - n += 1 + l + sovHttpConnectionManager(uint64(l)) - } - return n -} - -func sovHttpConnectionManager(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozHttpConnectionManager(x uint64) (n int) { - return sovHttpConnectionManager(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *HttpConnectionManager) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpConnectionManager: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpConnectionManager: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CodecType", wireType) - } - m.CodecType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CodecType |= HttpConnectionManager_CodecType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StatPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StatPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rds", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &Rds{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RouteSpecifier = &HttpConnectionManager_Rds{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RouteConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &v2.RouteConfiguration{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RouteSpecifier = &HttpConnectionManager_RouteConfig{v} - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpFilters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HttpFilters = append(m.HttpFilters, &HttpFilter{}) - if err := m.HttpFilters[len(m.HttpFilters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AddUserAgent", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AddUserAgent == nil { - m.AddUserAgent = &types.BoolValue{} - } - if err := m.AddUserAgent.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tracing", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Tracing == nil { - m.Tracing = &HttpConnectionManager_Tracing{} - } - if err := m.Tracing.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HttpProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.HttpProtocolOptions == nil { - m.HttpProtocolOptions = &core.Http1ProtocolOptions{} - } - if err := m.HttpProtocolOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Http2ProtocolOptions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Http2ProtocolOptions == nil { - m.Http2ProtocolOptions = &core.Http2ProtocolOptions{} - } - if err := m.Http2ProtocolOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ServerName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IdleTimeout == nil { - m.IdleTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.IdleTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DrainTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DrainTimeout == nil { - m.DrainTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.DrainTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessLog", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AccessLog = append(m.AccessLog, &v21.AccessLog{}) - if err := m.AccessLog[len(m.AccessLog)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UseRemoteAddress", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UseRemoteAddress == nil { - m.UseRemoteAddress = &types.BoolValue{} - } - if err := m.UseRemoteAddress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenerateRequestId", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.GenerateRequestId == nil { - m.GenerateRequestId = &types.BoolValue{} - } - if err := m.GenerateRequestId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 16: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ForwardClientCertDetails", wireType) - } - m.ForwardClientCertDetails = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ForwardClientCertDetails |= HttpConnectionManager_ForwardClientCertDetails(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 17: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SetCurrentClientCertDetails", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SetCurrentClientCertDetails == nil { - m.SetCurrentClientCertDetails = &HttpConnectionManager_SetCurrentClientCertDetails{} - } - if err := m.SetCurrentClientCertDetails.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 18: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Proxy_100Continue", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Proxy_100Continue = bool(v != 0) - case 19: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field XffNumTrustedHops", wireType) - } - m.XffNumTrustedHops = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.XffNumTrustedHops |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 20: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RepresentIpv4RemoteAddressAsIpv4MappedIpv6", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RepresentIpv4RemoteAddressAsIpv4MappedIpv6 = bool(v != 0) - case 21: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SkipXffAppend", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.SkipXffAppend = bool(v != 0) - case 22: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Via", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Via = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 23: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeConfigs", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UpgradeConfigs = append(m.UpgradeConfigs, &HttpConnectionManager_UpgradeConfig{}) - if err := m.UpgradeConfigs[len(m.UpgradeConfigs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 24: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StreamIdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.StreamIdleTimeout == nil { - m.StreamIdleTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.StreamIdleTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 25: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InternalAddressConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InternalAddressConfig == nil { - m.InternalAddressConfig = &HttpConnectionManager_InternalAddressConfig{} - } - if err := m.InternalAddressConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 26: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DelayedCloseTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DelayedCloseTimeout == nil { - m.DelayedCloseTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.DelayedCloseTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 28: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RequestTimeout == nil { - m.RequestTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.RequestTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 29: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxRequestHeadersKb", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxRequestHeadersKb == nil { - m.MaxRequestHeadersKb = &types.UInt32Value{} - } - if err := m.MaxRequestHeadersKb.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 30: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NormalizePath", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.NormalizePath == nil { - m.NormalizePath = &types.BoolValue{} - } - if err := m.NormalizePath.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HttpConnectionManager_Tracing) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Tracing: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Tracing: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field OperationName", wireType) - } - m.OperationName = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.OperationName |= HttpConnectionManager_Tracing_OperationName(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestHeadersForTags", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequestHeadersForTags = append(m.RequestHeadersForTags, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientSampling", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ClientSampling == nil { - m.ClientSampling = &_type.Percent{} - } - if err := m.ClientSampling.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RandomSampling", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.RandomSampling == nil { - m.RandomSampling = &_type.Percent{} - } - if err := m.RandomSampling.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OverallSampling", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.OverallSampling == nil { - m.OverallSampling = &_type.Percent{} - } - if err := m.OverallSampling.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Verbose = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HttpConnectionManager_InternalAddressConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InternalAddressConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InternalAddressConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field UnixSockets", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.UnixSockets = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HttpConnectionManager_SetCurrentClientCertDetails) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SetCurrentClientCertDetails: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SetCurrentClientCertDetails: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subject", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Subject == nil { - m.Subject = &types.BoolValue{} - } - if err := m.Subject.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Cert", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Cert = bool(v != 0) - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Dns", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Dns = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Uri = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HttpConnectionManager_UpgradeConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: UpgradeConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UpgradeConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpgradeType", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UpgradeType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filters = append(m.Filters, &HttpFilter{}) - if err := m.Filters[len(m.Filters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Enabled == nil { - m.Enabled = &types.BoolValue{} - } - if err := m.Enabled.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Rds) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Rds: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Rds: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigSource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ConfigSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RouteConfigName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RouteConfigName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HttpFilter) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpFilter: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpFilter: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Struct{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &HttpFilter_Config{v} - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TypedConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHttpConnectionManager - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &types.Any{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ConfigType = &HttpFilter_TypedConfig{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHttpConnectionManager(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpConnectionManager - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipHttpConnectionManager(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthHttpConnectionManager - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthHttpConnectionManager - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpConnectionManager - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipHttpConnectionManager(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthHttpConnectionManager - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthHttpConnectionManager = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHttpConnectionManager = fmt.Errorf("proto: integer overflow") -) + // 2531 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcd, 0x6f, 0x23, 0x49, + 0x15, 0x4f, 0xdb, 0xce, 0xc4, 0x7e, 0xb6, 0x93, 0x4e, 0x25, 0x99, 0xe9, 0x78, 0x32, 0x3b, 0xde, + 0x0c, 0xbb, 0x44, 0xbb, 0xc8, 0x99, 0xc9, 0x2c, 0x83, 0x60, 0x61, 0x17, 0x3b, 0x1f, 0xeb, 0xcc, + 0x47, 0x12, 0xb5, 0x9d, 0x1d, 0x96, 0x5d, 0xd4, 0x54, 0xba, 0xcb, 0x76, 0x13, 0xbb, 0xbb, 0xa9, + 0xea, 0xf6, 0xc6, 0x88, 0xc3, 0x0a, 0x38, 0xad, 0x90, 0x10, 0x9c, 0x90, 0xe0, 0xc0, 0x01, 0x89, + 0xe3, 0x82, 0x84, 0x10, 0xe2, 0x8c, 0x10, 0x37, 0x04, 0x7f, 0x08, 0x87, 0x3d, 0xa1, 0x39, 0x20, + 0x54, 0x1f, 0xed, 0xaf, 0xd8, 0x89, 0x98, 0xc9, 0xc2, 0xc9, 0xd5, 0xef, 0xe3, 0xf7, 0x5e, 0x55, + 0xbd, 0xf7, 0xea, 0x55, 0x19, 0xea, 0xc4, 0xeb, 0xfa, 0xbd, 0x4d, 0xdb, 0xf7, 0x1a, 0x6e, 0x73, + 0xb3, 0xe1, 0xb6, 0x43, 0x42, 0x37, 0x3d, 0x12, 0x7e, 0xe8, 0xd3, 0xd3, 0xcd, 0x56, 0x18, 0x06, + 0x96, 0xed, 0x7b, 0x1e, 0xb1, 0x43, 0xd7, 0xf7, 0xac, 0x0e, 0xf6, 0x70, 0x93, 0xd0, 0xcd, 0xee, + 0xd6, 0x34, 0x56, 0x29, 0xa0, 0x7e, 0xe8, 0xa3, 0x07, 0x02, 0xb5, 0x24, 0x51, 0x4b, 0x12, 0xb5, + 0xa4, 0x50, 0x4b, 0xd3, 0x54, 0xbb, 0x5b, 0x85, 0x57, 0xa4, 0x37, 0x38, 0x70, 0xb9, 0x0d, 0xdb, + 0xa7, 0x44, 0x79, 0x66, 0x31, 0x3f, 0xa2, 0x36, 0x91, 0xf0, 0x85, 0xe2, 0x79, 0x31, 0xc1, 0xb0, + 0xfd, 0xb6, 0x92, 0x30, 0x46, 0x24, 0xa8, 0x1f, 0x85, 0xb1, 0xee, 0xed, 0x11, 0x0e, 0xb3, 0xfd, + 0x80, 0x38, 0xd6, 0xb0, 0xc0, 0xdd, 0x49, 0x2b, 0x82, 0x6d, 0x9b, 0x30, 0xd6, 0xf6, 0x9b, 0x5c, + 0xa9, 0xff, 0xa1, 0x34, 0x5e, 0x1e, 0xd1, 0x08, 0x29, 0xb6, 0x09, 0x17, 0x13, 0x83, 0x51, 0x7f, + 0xc2, 0x5e, 0x40, 0x36, 0x03, 0x42, 0x6d, 0xe2, 0x85, 0x8a, 0xf3, 0xea, 0x10, 0x87, 0x6b, 0xb8, + 0x9e, 0xb0, 0x61, 0x47, 0x2c, 0xf4, 0x3b, 0x56, 0x88, 0x63, 0x23, 0xab, 0x4d, 0xdf, 0x6f, 0xb6, + 0xd5, 0x44, 0x4f, 0xa2, 0xc6, 0x26, 0xf6, 0x7a, 0x8a, 0xf5, 0xd2, 0x38, 0xcb, 0x89, 0x28, 0xe6, + 0x4b, 0xab, 0xf8, 0x6b, 0xe3, 0x7c, 0x16, 0xd2, 0xc8, 0x0e, 0xa7, 0x69, 0x7f, 0x48, 0x71, 0x10, + 0x10, 0xca, 0x14, 0xff, 0x8e, 0x5a, 0x30, 0xcf, 0xf3, 0x43, 0x81, 0xca, 0x36, 0x1d, 0x12, 0x50, + 0x62, 0x0f, 0x9b, 0x78, 0x29, 0x72, 0x02, 0x3c, 0x22, 0xd3, 0x71, 0x9b, 0x14, 0xf7, 0x17, 0xf5, + 0xd6, 0x39, 0x3e, 0x0b, 0x71, 0x18, 0xc5, 0x36, 0x6e, 0x74, 0x71, 0xdb, 0x75, 0x70, 0x48, 0x36, + 0xe3, 0x81, 0x64, 0xac, 0xff, 0xf9, 0x0e, 0xac, 0x54, 0xc3, 0x30, 0xd8, 0xee, 0x87, 0xcb, 0x13, + 0x19, 0x2d, 0xe8, 0x23, 0x0d, 0xc0, 0xf6, 0x1d, 0x62, 0x5b, 0x7c, 0xe9, 0x0c, 0xad, 0xa8, 0x6d, + 0xcc, 0x6f, 0x3d, 0x2d, 0x3d, 0x5f, 0xe0, 0x95, 0x26, 0xda, 0x28, 0x6d, 0x73, 0xfc, 0x7a, 0x2f, + 0x20, 0x95, 0xf4, 0xb3, 0xca, 0xec, 0x0f, 0xb4, 0x84, 0xae, 0x99, 0x19, 0x3b, 0x26, 0xa2, 0x0d, + 0xc8, 0xf2, 0x59, 0x58, 0x01, 0x25, 0x0d, 0xf7, 0xcc, 0x48, 0x14, 0xb5, 0x8d, 0x4c, 0x65, 0xee, + 0x59, 0x25, 0x45, 0x13, 0x45, 0xcd, 0x04, 0xce, 0x3b, 0x12, 0x2c, 0x74, 0x08, 0x49, 0xea, 0x30, + 0x23, 0x59, 0xd4, 0x36, 0xb2, 0x5b, 0x6f, 0x3e, 0xaf, 0x93, 0xa6, 0xc3, 0xaa, 0x33, 0x26, 0x47, + 0x42, 0xbb, 0x90, 0x13, 0x31, 0x6b, 0x49, 0x10, 0x23, 0x25, 0x90, 0x8b, 0x0a, 0x19, 0x07, 0xae, + 0x90, 0xe7, 0x12, 0xdb, 0x42, 0x40, 0x05, 0x44, 0x75, 0xc6, 0xcc, 0xd2, 0x01, 0x15, 0x9d, 0x42, + 0x7e, 0x38, 0x03, 0x98, 0x71, 0x5b, 0xe0, 0xec, 0x3c, 0xaf, 0x87, 0x35, 0x01, 0x26, 0xec, 0x72, + 0x57, 0x73, 0x6c, 0xe8, 0x1b, 0x11, 0xc8, 0x09, 0x55, 0x09, 0xc7, 0x8c, 0xd9, 0x62, 0x72, 0x23, + 0xbb, 0x55, 0x79, 0x91, 0x2d, 0xdb, 0x13, 0xd2, 0x66, 0xb6, 0xd5, 0x1f, 0x33, 0xf4, 0x75, 0x98, + 0xc7, 0x8e, 0x63, 0x45, 0x8c, 0x50, 0x0b, 0x37, 0x89, 0x17, 0x1a, 0xd7, 0xc4, 0xa4, 0x0a, 0x25, + 0x19, 0xe8, 0xa5, 0x38, 0xd0, 0x4b, 0x15, 0xdf, 0x6f, 0xbf, 0x8b, 0xdb, 0x11, 0x31, 0x73, 0xd8, + 0x71, 0x8e, 0x19, 0xa1, 0x65, 0x2e, 0x8f, 0x7c, 0x98, 0x53, 0x99, 0x68, 0xcc, 0x09, 0xd5, 0xe3, + 0xab, 0x0d, 0xab, 0xba, 0x04, 0x37, 0x63, 0x2b, 0xa8, 0x09, 0x6b, 0xb6, 0xdf, 0xe9, 0xf8, 0x9e, + 0x25, 0xb0, 0xe2, 0x5a, 0x66, 0xf9, 0x81, 0xc8, 0x15, 0xe3, 0x8e, 0xf0, 0xe2, 0xd5, 0xd1, 0xdd, + 0xe5, 0x65, 0x4f, 0x18, 0x38, 0x52, 0xe2, 0x87, 0x52, 0xda, 0x5c, 0x95, 0x58, 0x13, 0x58, 0xe8, + 0x7d, 0x58, 0x99, 0x6c, 0x21, 0x2d, 0x2c, 0x7c, 0x7e, 0x8a, 0x85, 0x7b, 0xe3, 0x26, 0x96, 0x5a, + 0x13, 0xc0, 0xbf, 0x05, 0xd7, 0x39, 0x79, 0xeb, 0x3c, 0x7a, 0xe6, 0x42, 0xf4, 0xad, 0x71, 0xf4, + 0xe5, 0xd6, 0x04, 0x2a, 0xba, 0x0d, 0x59, 0x46, 0x68, 0x97, 0x50, 0xcb, 0xc3, 0x1d, 0x62, 0x00, + 0xcf, 0x36, 0x13, 0x24, 0xe9, 0x00, 0x77, 0x08, 0xfa, 0xbd, 0x06, 0x6b, 0x4a, 0xa2, 0x45, 0xb0, + 0x43, 0xa8, 0x15, 0x52, 0xec, 0xb1, 0x86, 0x4f, 0x3b, 0x22, 0xf8, 0x8d, 0x75, 0x51, 0x23, 0x5a, + 0x57, 0xbb, 0x99, 0x35, 0x61, 0xb1, 0x2a, 0x0c, 0xd6, 0x47, 0xec, 0x0d, 0x15, 0x8d, 0x02, 0x9b, + 0x2a, 0x85, 0x3e, 0x80, 0xeb, 0x1d, 0x7c, 0x66, 0x51, 0xf2, 0xdd, 0x88, 0xb0, 0x50, 0xb9, 0xce, + 0xac, 0xd3, 0x13, 0xe3, 0x96, 0x58, 0xb6, 0xb5, 0x73, 0x71, 0x7b, 0xbc, 0xef, 0x85, 0xf7, 0xb7, + 0x44, 0xe4, 0x56, 0x32, 0xcf, 0x2a, 0xd7, 0x5e, 0x4b, 0x19, 0xdf, 0x2e, 0xce, 0x98, 0x4b, 0x1d, + 0x7c, 0x66, 0x4a, 0x14, 0x69, 0x88, 0x3d, 0x3a, 0x41, 0x7b, 0x90, 0x73, 0x9d, 0x36, 0xb1, 0x42, + 0xb7, 0x43, 0xfc, 0x28, 0x34, 0xb2, 0x02, 0x73, 0xf5, 0x1c, 0xe6, 0x8e, 0xaa, 0x10, 0x95, 0xf4, + 0x1f, 0xff, 0xf9, 0xe9, 0x3f, 0x66, 0x35, 0x43, 0x33, 0xb3, 0x5c, 0xb1, 0x2e, 0xf5, 0xd0, 0x3e, + 0x2c, 0xb1, 0x90, 0x12, 0xdc, 0xb1, 0x46, 0xe0, 0x8c, 0x4b, 0xe0, 0xcc, 0x45, 0xa9, 0xb5, 0x3f, + 0x04, 0x55, 0x81, 0x85, 0x78, 0xb2, 0x31, 0xcc, 0xda, 0x65, 0x30, 0xf3, 0x4a, 0x23, 0xc6, 0x78, + 0x0b, 0xf2, 0x0e, 0xc5, 0xae, 0xd7, 0x47, 0xc8, 0x5d, 0x86, 0x90, 0x13, 0xf2, 0xb1, 0xfe, 0x13, + 0x58, 0x71, 0x48, 0x1b, 0xf7, 0x88, 0x63, 0xd9, 0x6d, 0x9f, 0x0d, 0x26, 0x54, 0xb8, 0x0c, 0x67, + 0x49, 0xe9, 0x6d, 0x73, 0xb5, 0x18, 0xee, 0x21, 0x80, 0x6c, 0x0a, 0xac, 0xb6, 0xdf, 0x34, 0xf2, + 0xa2, 0xb0, 0xbd, 0x3e, 0x31, 0xce, 0x06, 0xbd, 0x43, 0x77, 0xab, 0x54, 0x16, 0x1f, 0x8f, 0xfd, + 0xa6, 0x99, 0xc1, 0xf1, 0x10, 0x55, 0x01, 0x45, 0x8c, 0x58, 0x94, 0x74, 0xfc, 0x90, 0x58, 0xd8, + 0x71, 0x28, 0x61, 0xcc, 0x98, 0xbf, 0xb4, 0x86, 0xe9, 0x11, 0x23, 0xa6, 0x50, 0x2a, 0x4b, 0x1d, + 0xb4, 0x09, 0xcb, 0x67, 0x8d, 0x86, 0xe5, 0x45, 0x1d, 0x2b, 0xa4, 0x11, 0x0b, 0x89, 0x63, 0xb5, + 0xfc, 0x80, 0x19, 0x4b, 0x45, 0x6d, 0x23, 0x6f, 0x2e, 0x9e, 0x35, 0x1a, 0x07, 0x51, 0xa7, 0x2e, + 0x39, 0x55, 0x3f, 0x60, 0xe8, 0x17, 0x1a, 0xdc, 0x70, 0xbd, 0x90, 0x50, 0x0f, 0xb7, 0x63, 0xcb, + 0xf1, 0x09, 0xb3, 0x2a, 0x1c, 0xb0, 0xaf, 0x36, 0x79, 0xf6, 0x95, 0x31, 0xe5, 0xb1, 0x3c, 0x95, + 0xcc, 0x15, 0x77, 0x12, 0x19, 0xbd, 0x0a, 0x0b, 0xec, 0xd4, 0x0d, 0x2c, 0x3e, 0x27, 0xde, 0xa1, + 0x78, 0x8e, 0xb1, 0x52, 0xd4, 0x36, 0xd2, 0x66, 0x9e, 0x93, 0xbf, 0xd1, 0x68, 0x94, 0x05, 0x11, + 0xe9, 0x90, 0xec, 0xba, 0xd8, 0xb8, 0x2e, 0x0a, 0x04, 0x1f, 0xa2, 0x87, 0xb0, 0xd4, 0x24, 0x1e, + 0xe1, 0xfd, 0x48, 0x3f, 0xcf, 0x5c, 0xc7, 0x58, 0xb8, 0x74, 0x4d, 0x17, 0x63, 0x35, 0x95, 0x57, + 0xfb, 0x0e, 0x7a, 0x1b, 0xd6, 0x02, 0x4a, 0x44, 0x3e, 0x5b, 0xe4, 0x4c, 0xad, 0xd5, 0x10, 0x68, + 0x51, 0xb8, 0xb4, 0x1a, 0xcb, 0xec, 0x2a, 0x91, 0x01, 0xc0, 0x27, 0x1a, 0xdc, 0x6c, 0xf8, 0xf4, + 0x43, 0x4c, 0x79, 0xec, 0xb9, 0xc4, 0x0b, 0x2d, 0x9b, 0xd0, 0xd0, 0x72, 0x48, 0x88, 0xdd, 0x36, + 0x33, 0x74, 0x51, 0xa5, 0x1a, 0x57, 0xbb, 0xd0, 0x7b, 0xd2, 0xe0, 0xb6, 0xb0, 0xb7, 0x4d, 0x68, + 0xb8, 0x23, 0xad, 0x0d, 0xd5, 0x28, 0xa3, 0x31, 0x45, 0x86, 0x7b, 0x7c, 0x9b, 0x91, 0xd0, 0xb2, + 0x23, 0x4a, 0x85, 0xbb, 0x13, 0xbc, 0x5e, 0x14, 0x6b, 0xe9, 0x5e, 0x75, 0x6d, 0x0d, 0xb7, 0xa5, + 0xcd, 0x73, 0x4e, 0x99, 0x37, 0xd9, 0x74, 0x26, 0xfa, 0x02, 0xa0, 0x80, 0xfa, 0x67, 0x3d, 0xeb, + 0xde, 0xdd, 0xbb, 0xdc, 0x62, 0xe8, 0x7a, 0x11, 0x31, 0x90, 0xd8, 0x1a, 0x5d, 0x70, 0xee, 0xdd, + 0xbd, 0xbb, 0xad, 0xe8, 0x88, 0xc0, 0x3d, 0x4a, 0xc4, 0x86, 0x79, 0xa1, 0xe5, 0x06, 0xdd, 0x37, + 0xc6, 0x92, 0xcf, 0xc2, 0x4c, 0x92, 0x3b, 0x3c, 0xec, 0x1c, 0x3e, 0x7e, 0x60, 0x2c, 0x0b, 0xb0, + 0xd7, 0xfa, 0x8a, 0xfb, 0x41, 0xf7, 0x8d, 0x91, 0xf4, 0x2b, 0x33, 0x4e, 0x7a, 0x22, 0x54, 0xf6, + 0x83, 0xee, 0x03, 0xf4, 0x23, 0x0d, 0x16, 0xa2, 0xa0, 0x49, 0xb1, 0x13, 0xb7, 0x6d, 0xcc, 0xb8, + 0x21, 0x4a, 0xc5, 0xfb, 0x57, 0xbb, 0x6c, 0xc7, 0xd2, 0x88, 0xca, 0xa6, 0xf9, 0x68, 0xf8, 0x93, + 0xa1, 0x32, 0xcc, 0x7b, 0xfc, 0xf0, 0x69, 0xbb, 0xdf, 0x23, 0x56, 0x80, 0xc3, 0x96, 0xf1, 0xd2, + 0xa5, 0x79, 0x90, 0xef, 0x6b, 0x1c, 0xe1, 0xb0, 0x85, 0xee, 0x40, 0xbe, 0x43, 0x68, 0x93, 0x58, + 0xac, 0x8d, 0x59, 0x8b, 0x30, 0xe3, 0x65, 0xb1, 0x18, 0x39, 0x41, 0xac, 0x49, 0x1a, 0xfa, 0x3e, + 0x2c, 0x0f, 0xd2, 0x42, 0xa4, 0x8a, 0xc7, 0xf8, 0x29, 0xfc, 0x39, 0x61, 0xed, 0xe1, 0x73, 0x37, + 0xc1, 0x2a, 0x91, 0x76, 0x76, 0x63, 0x44, 0x13, 0xd1, 0x38, 0xb9, 0xfa, 0xb4, 0xc2, 0x1f, 0x66, + 0x61, 0x4e, 0xf5, 0x59, 0xe8, 0x97, 0x1a, 0xcc, 0xfb, 0x01, 0x91, 0x05, 0x5c, 0x76, 0x0f, 0xf2, + 0xba, 0x60, 0x7f, 0x26, 0x7d, 0x5d, 0xe9, 0x30, 0xb6, 0xc5, 0xdb, 0x92, 0x8a, 0x1e, 0x67, 0x58, + 0xff, 0x60, 0xcd, 0xfb, 0xc3, 0x02, 0xe8, 0x4d, 0x30, 0xc6, 0x0f, 0xff, 0x86, 0x4f, 0xf9, 0xd5, + 0x8f, 0x19, 0x89, 0x62, 0x72, 0x23, 0x53, 0x49, 0x18, 0x9a, 0xb9, 0x42, 0x47, 0x8e, 0xf6, 0x3d, + 0x9f, 0xd6, 0x71, 0x93, 0xa1, 0xaf, 0xc2, 0x82, 0x4a, 0x47, 0x86, 0x3b, 0x41, 0x9b, 0xf7, 0xac, + 0xf2, 0x96, 0xb1, 0xa4, 0xe6, 0xc6, 0x6f, 0x47, 0xa5, 0x23, 0x79, 0xe5, 0x34, 0xe7, 0xa5, 0x6c, + 0x4d, 0x89, 0x72, 0x6d, 0x8a, 0x3d, 0xc7, 0xef, 0x0c, 0xb4, 0x53, 0x17, 0x68, 0x4b, 0xd9, 0xbe, + 0xf6, 0x5b, 0xa0, 0xfb, 0x5d, 0x42, 0x71, 0xbb, 0x3d, 0x50, 0x9f, 0x9d, 0xae, 0xbe, 0xa0, 0x84, + 0xfb, 0xfa, 0x06, 0xcc, 0x75, 0x09, 0x3d, 0xf1, 0x19, 0x11, 0x2d, 0x7a, 0xda, 0x8c, 0x3f, 0xd1, + 0x23, 0xe0, 0xcd, 0x8c, 0x88, 0x4e, 0xbe, 0x0e, 0x56, 0x9b, 0x78, 0xcd, 0xb0, 0xa5, 0xba, 0xf1, + 0x0b, 0x1b, 0x22, 0x53, 0xef, 0xe0, 0x33, 0x1e, 0xa4, 0x75, 0xdc, 0x7c, 0x2c, 0xb4, 0x50, 0x19, + 0xb2, 0x83, 0xdb, 0x34, 0x6f, 0x75, 0x93, 0x43, 0x57, 0x25, 0xe1, 0xa1, 0xea, 0xc3, 0xf9, 0xce, + 0x6e, 0x0b, 0xc9, 0x3a, 0x6e, 0x9a, 0x60, 0xc7, 0x43, 0x86, 0xde, 0x86, 0x74, 0x40, 0xfd, 0xae, + 0xeb, 0x10, 0xaa, 0x9a, 0xd9, 0x3b, 0xa3, 0xa1, 0x23, 0xef, 0xfa, 0xdd, 0xad, 0x7e, 0x0c, 0xf0, + 0x08, 0x31, 0xfb, 0x4a, 0xeb, 0x1b, 0x90, 0x1f, 0x89, 0x0a, 0x94, 0x85, 0xb9, 0xfd, 0x83, 0x77, + 0xcc, 0xdd, 0x5a, 0x4d, 0x9f, 0x41, 0x00, 0xd7, 0x76, 0xe5, 0x58, 0x2b, 0x7c, 0x05, 0x56, 0x26, + 0x9e, 0x8a, 0xe8, 0x65, 0xc8, 0x45, 0x9e, 0x7b, 0x66, 0x31, 0xdf, 0x3e, 0x25, 0x21, 0x13, 0x21, + 0x9c, 0x36, 0xb3, 0x9c, 0x56, 0x93, 0xa4, 0xc2, 0x6f, 0x34, 0xb8, 0x79, 0x41, 0xcd, 0x44, 0x6f, + 0xc0, 0x1c, 0x8b, 0x4e, 0xbe, 0x43, 0xec, 0x50, 0x68, 0x5f, 0x9c, 0xf3, 0xb1, 0x28, 0x42, 0x90, + 0xe2, 0xa5, 0x5e, 0xc4, 0x55, 0xda, 0x14, 0x63, 0xb4, 0x0c, 0xb3, 0x76, 0x0b, 0xbb, 0x9e, 0xda, + 0x38, 0xf9, 0xc1, 0x4f, 0x5e, 0xc7, 0x63, 0x22, 0x84, 0xd2, 0x26, 0x1f, 0x72, 0x4a, 0x44, 0x5d, + 0x11, 0x15, 0x69, 0x93, 0x0f, 0x1f, 0xa6, 0xd2, 0x09, 0x3d, 0x59, 0xf8, 0x8b, 0x06, 0xf9, 0x91, + 0x32, 0x25, 0xa6, 0xa7, 0x8a, 0x63, 0xff, 0x42, 0x9f, 0x31, 0xb3, 0x8a, 0x26, 0xee, 0xdb, 0x1f, + 0xc0, 0x5c, 0x7c, 0x77, 0x4c, 0x5c, 0xd9, 0xdd, 0x31, 0x86, 0xe4, 0x8b, 0x43, 0x3c, 0x7c, 0xd2, + 0x26, 0x8e, 0xca, 0xa0, 0x0b, 0x17, 0x47, 0x89, 0xae, 0x3f, 0x80, 0x4c, 0xff, 0x95, 0x00, 0xa5, + 0x21, 0x55, 0x3e, 0xae, 0x1f, 0xea, 0x33, 0x28, 0x03, 0xb3, 0xd5, 0x7a, 0xfd, 0xe8, 0x9e, 0xae, + 0xc5, 0xc3, 0x2d, 0x3d, 0x11, 0x0f, 0xef, 0xeb, 0xc9, 0xf5, 0x1a, 0x14, 0xa6, 0xdf, 0x1c, 0x50, + 0x1e, 0x32, 0x87, 0xef, 0xee, 0x9a, 0x4f, 0xcd, 0xfd, 0xfa, 0xae, 0x3e, 0x83, 0x96, 0x41, 0x2f, + 0x1f, 0x1d, 0xed, 0x1e, 0xec, 0x58, 0xfb, 0x7b, 0x56, 0xb9, 0x52, 0xdb, 0x3d, 0xa8, 0xeb, 0x1a, + 0xd2, 0x21, 0x77, 0x54, 0xae, 0xd5, 0xac, 0x7a, 0xd5, 0x3c, 0x3c, 0x7e, 0xa7, 0xaa, 0x27, 0xd6, + 0x7b, 0x60, 0x4c, 0x3b, 0xe8, 0x51, 0x0e, 0xd2, 0xb5, 0xf2, 0xc1, 0x7e, 0x7d, 0xff, 0x9b, 0x1c, + 0x51, 0x87, 0xdc, 0xde, 0xa1, 0xf9, 0xb4, 0x6c, 0xee, 0x58, 0x87, 0x07, 0x8f, 0xdf, 0xd3, 0x35, + 0x84, 0x60, 0x5e, 0xd9, 0x50, 0x0c, 0x3d, 0xc1, 0xa5, 0x62, 0x1d, 0xab, 0xb6, 0x5b, 0xd7, 0x93, + 0xe8, 0x06, 0x2c, 0x95, 0x1f, 0x3f, 0x2d, 0xbf, 0x57, 0xb3, 0x46, 0xd4, 0x53, 0x95, 0xeb, 0xb0, + 0x20, 0x1f, 0x24, 0x58, 0x40, 0x6c, 0xb7, 0xe1, 0x12, 0x8a, 0x92, 0xff, 0xaa, 0x68, 0x0f, 0x53, + 0xe9, 0x9b, 0xfa, 0xda, 0xfa, 0xc7, 0x1a, 0x24, 0x4d, 0x87, 0xa1, 0x03, 0xc8, 0x8f, 0xbc, 0xe7, + 0xa9, 0x30, 0xbc, 0x3d, 0xe1, 0x66, 0x28, 0xc3, 0xa2, 0x26, 0xc4, 0x44, 0x97, 0xf2, 0xb1, 0xe8, + 0x52, 0x72, 0xf6, 0x10, 0x1d, 0xdd, 0x87, 0xc5, 0xe1, 0x67, 0x10, 0x59, 0xdb, 0xc7, 0xde, 0x61, + 0x16, 0x86, 0x1e, 0x3c, 0x78, 0xea, 0xad, 0xff, 0x54, 0x83, 0x5b, 0x43, 0x0f, 0x15, 0x23, 0x0f, + 0x24, 0xec, 0xb1, 0xcb, 0x42, 0x14, 0xc0, 0xcd, 0xe1, 0x67, 0x11, 0x85, 0x1e, 0x8b, 0x18, 0x9a, + 0x08, 0xbe, 0xb1, 0xeb, 0xf8, 0x34, 0x44, 0xe1, 0xfb, 0xcf, 0xb4, 0x44, 0x5a, 0x33, 0x57, 0xd9, + 0x34, 0xab, 0xeb, 0xbf, 0x06, 0xc8, 0x0d, 0x3f, 0x9e, 0xa0, 0x9b, 0x90, 0xea, 0x1f, 0x54, 0x43, + 0x93, 0x11, 0x44, 0xf4, 0xb1, 0x06, 0x8b, 0x02, 0xcb, 0x3a, 0x25, 0x3d, 0xeb, 0x24, 0x72, 0xdb, + 0xbc, 0x30, 0x25, 0xc4, 0x5a, 0xd6, 0xaf, 0xe2, 0xed, 0x46, 0x7e, 0x3c, 0x22, 0xbd, 0x8a, 0xc4, + 0x1e, 0xda, 0x80, 0x05, 0x36, 0xca, 0x42, 0xc7, 0xb0, 0x48, 0x9d, 0xf8, 0x9a, 0x10, 0xef, 0x6b, + 0xf2, 0xbf, 0xdd, 0xd7, 0x05, 0xea, 0xb0, 0x61, 0x16, 0xfa, 0x95, 0x06, 0xc5, 0x0b, 0x36, 0xc1, + 0x6a, 0xbb, 0x2c, 0x54, 0x87, 0xd5, 0xf1, 0x15, 0x4c, 0xf9, 0x7c, 0x14, 0x54, 0x67, 0xcc, 0x5b, + 0xec, 0xc2, 0x30, 0x39, 0x01, 0x88, 0x3d, 0x74, 0x98, 0x3a, 0xf9, 0xca, 0x2f, 0xe8, 0x8b, 0x78, + 0xe2, 0xcb, 0xb0, 0xf8, 0xa3, 0xf0, 0xe9, 0x2c, 0x2c, 0x8c, 0x6d, 0x06, 0xfa, 0xb1, 0x06, 0x99, + 0x06, 0xc5, 0xcd, 0x0e, 0xf1, 0xc2, 0x38, 0x1a, 0x9d, 0xcf, 0x62, 0xdb, 0x4b, 0x7b, 0xca, 0xca, + 0x70, 0x18, 0xc8, 0x58, 0x1e, 0x38, 0x50, 0xf8, 0x5b, 0x0a, 0x16, 0xc6, 0x04, 0xd1, 0xef, 0x34, + 0xb8, 0xae, 0x1e, 0x61, 0xba, 0xbc, 0x60, 0xf2, 0xfe, 0x8f, 0x62, 0x3b, 0xf4, 0xa9, 0x4a, 0xf9, + 0xde, 0xff, 0xc2, 0xdf, 0x92, 0x2c, 0xae, 0xa2, 0x64, 0xef, 0xc6, 0x0e, 0x54, 0x67, 0xcc, 0xe5, + 0xd6, 0x04, 0x7a, 0xe1, 0x59, 0x02, 0x96, 0x27, 0x29, 0x5c, 0x9c, 0x8b, 0xaf, 0xc3, 0x22, 0x69, + 0x93, 0x8e, 0xe8, 0xc0, 0x48, 0x80, 0x29, 0xe6, 0x73, 0x14, 0x25, 0xc8, 0xd4, 0x15, 0xa3, 0x16, + 0xd3, 0xd1, 0x75, 0x98, 0x75, 0x3d, 0x87, 0x9c, 0x89, 0xfc, 0xc8, 0x57, 0x67, 0x4c, 0xf9, 0xc9, + 0x83, 0x7d, 0x4e, 0x09, 0xab, 0x98, 0xfe, 0xa1, 0xf6, 0x7f, 0x5b, 0xa0, 0xd2, 0xa3, 0xee, 0xae, + 0xf4, 0xa5, 0x3a, 0x63, 0xc6, 0x6e, 0x15, 0x9e, 0x40, 0xa6, 0x4f, 0x47, 0xaf, 0x40, 0x66, 0x30, + 0xd9, 0xb1, 0x65, 0x19, 0x70, 0xd0, 0x2a, 0x24, 0x4f, 0x49, 0x6f, 0xbc, 0x20, 0x73, 0x5a, 0x65, + 0x1e, 0x72, 0x2a, 0x24, 0xc4, 0x71, 0x5f, 0xc9, 0x42, 0x8a, 0xff, 0x8a, 0x43, 0xa3, 0x72, 0x03, + 0xf4, 0xb8, 0x9c, 0x8c, 0x9c, 0x26, 0xeb, 0x3e, 0x64, 0xfa, 0x79, 0x82, 0x4e, 0xc0, 0x18, 0xa4, + 0x9f, 0xf5, 0x82, 0xe7, 0xca, 0x4a, 0x3f, 0xe5, 0x86, 0x05, 0xd6, 0x7f, 0xab, 0x01, 0x0c, 0x9a, + 0x85, 0x8b, 0x23, 0xe1, 0x8b, 0x70, 0x4d, 0xbd, 0x95, 0xc8, 0x4a, 0x7c, 0xe3, 0x5c, 0xff, 0x50, + 0x13, 0xff, 0xbb, 0xf0, 0x76, 0xbe, 0x3a, 0x63, 0x2a, 0x61, 0xf4, 0x65, 0xc8, 0xf1, 0x99, 0x3b, + 0xa3, 0x4f, 0xf9, 0xcb, 0xe7, 0x94, 0xcb, 0x5e, 0xaf, 0x3a, 0x63, 0x66, 0x85, 0xac, 0xf4, 0xb1, + 0x92, 0x87, 0xac, 0x9a, 0x36, 0xa7, 0x3e, 0x4c, 0xa5, 0x93, 0x7a, 0x6a, 0xfd, 0x09, 0xa0, 0xf3, + 0x77, 0x24, 0xf4, 0xa5, 0x31, 0x2b, 0xda, 0x74, 0x2b, 0xa3, 0x36, 0x3e, 0xd1, 0x3e, 0xfd, 0xf9, + 0xbf, 0x7f, 0x32, 0xfb, 0x35, 0xf4, 0xa6, 0x5c, 0xcb, 0xfe, 0x45, 0x8e, 0xa9, 0x98, 0x64, 0x97, + 0x07, 0xe5, 0xfd, 0x3f, 0x7d, 0xf4, 0xd7, 0xbf, 0x5f, 0x4b, 0xe8, 0x1a, 0xec, 0xb8, 0xbe, 0xdc, + 0x13, 0x71, 0x09, 0x7f, 0xce, 0x10, 0xaf, 0x14, 0x26, 0xde, 0xbf, 0xc4, 0x83, 0xf1, 0x91, 0x76, + 0x72, 0x4d, 0x4c, 0xe6, 0xfe, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xed, 0x6d, 0x7a, 0x83, 0xdb, + 0x1c, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto -package v2 +package envoy_config_filter_network_http_connection_manager_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _http_connection_manager_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on HttpConnectionManager with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -58,167 +61,134 @@ for idx, item := range m.GetHttpFilters() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: fmt.Sprintf("HttpFilters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - } - - { - tmp := m.GetAddUserAgent() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HttpConnectionManagerValidationError{ - field: "AddUserAgent", + field: fmt.Sprintf("HttpFilters[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - } - { - tmp := m.GetTracing() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + } - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "Tracing", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAddUserAgent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "AddUserAgent", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetHttpProtocolOptions() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "HttpProtocolOptions", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTracing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "Tracing", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetHttp2ProtocolOptions() + if v, ok := interface{}(m.GetCommonHttpProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "CommonHttpProtocolOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetHttpProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "HttpProtocolOptions", + reason: "embedded message failed validation", + cause: err, + } + } + } - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "Http2ProtocolOptions", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHttp2ProtocolOptions()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "Http2ProtocolOptions", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for ServerName + if _, ok := HttpConnectionManager_ServerHeaderTransformation_name[int32(m.GetServerHeaderTransformation())]; !ok { + return HttpConnectionManagerValidationError{ + field: "ServerHeaderTransformation", + reason: "value must be one of the defined enum values", + } + } + if wrapper := m.GetMaxRequestHeadersKb(); wrapper != nil { - if wrapper.GetValue() > 96 { + if val := wrapper.GetValue(); val <= 0 || val > 96 { return HttpConnectionManagerValidationError{ field: "MaxRequestHeadersKb", - reason: "value must be less than or equal to 96", + reason: "value must be inside range (0, 96]", } } } - { - tmp := m.GetIdleTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "IdleTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "IdleTimeout", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetStreamIdleTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "StreamIdleTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetStreamIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "StreamIdleTimeout", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetRequestTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "RequestTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRequestTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "RequestTimeout", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetDrainTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "DrainTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDrainTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "DrainTimeout", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetDelayedCloseTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "DelayedCloseTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDelayedCloseTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "DelayedCloseTimeout", + reason: "embedded message failed validation", + cause: err, } } } @@ -226,51 +196,36 @@ for idx, item := range m.GetAccessLog() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: fmt.Sprintf("AccessLog[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: fmt.Sprintf("AccessLog[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } } - { - tmp := m.GetUseRemoteAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "UseRemoteAddress", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetUseRemoteAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "UseRemoteAddress", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for XffNumTrustedHops - { - tmp := m.GetInternalAddressConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "InternalAddressConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetInternalAddressConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "InternalAddressConfig", + reason: "embedded message failed validation", + cause: err, } } } @@ -279,21 +234,18 @@ // no validation rules for Via - { - tmp := m.GetGenerateRequestId() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "GenerateRequestId", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetGenerateRequestId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "GenerateRequestId", + reason: "embedded message failed validation", + cause: err, } } } + // no validation rules for PreserveExternalRequestId + if _, ok := HttpConnectionManager_ForwardClientCertDetails_name[int32(m.GetForwardClientCertDetails())]; !ok { return HttpConnectionManagerValidationError{ field: "ForwardClientCertDetails", @@ -301,17 +253,12 @@ } } - { - tmp := m.GetSetCurrentClientCertDetails() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "SetCurrentClientCertDetails", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSetCurrentClientCertDetails()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "SetCurrentClientCertDetails", + reason: "embedded message failed validation", + cause: err, } } } @@ -323,34 +270,36 @@ for idx, item := range m.GetUpgradeConfigs() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: fmt.Sprintf("UpgradeConfigs[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: fmt.Sprintf("UpgradeConfigs[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } } - { - tmp := m.GetNormalizePath() + if v, ok := interface{}(m.GetNormalizePath()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "NormalizePath", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + // no validation rules for MergeSlashes - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "NormalizePath", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRequestIdExtension()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "RequestIdExtension", + reason: "embedded message failed validation", + cause: err, } } } @@ -359,34 +308,36 @@ case *HttpConnectionManager_Rds: - { - tmp := m.GetRds() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "Rds", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRds()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "Rds", + reason: "embedded message failed validation", + cause: err, } } } case *HttpConnectionManager_RouteConfig: - { - tmp := m.GetRouteConfig() + if v, ok := interface{}(m.GetRouteConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "RouteConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *HttpConnectionManager_ScopedRoutes: - if err := v.Validate(); err != nil { - return HttpConnectionManagerValidationError{ - field: "RouteConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetScopedRoutes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManagerValidationError{ + field: "ScopedRoutes", + reason: "embedded message failed validation", + cause: err, } } } @@ -465,17 +416,19 @@ return nil } - { - tmp := m.GetConfigSource() - - if v, ok := interface{}(&tmp).(interface{ Validate() error }); ok { + if m.GetConfigSource() == nil { + return RdsValidationError{ + field: "ConfigSource", + reason: "value is required", + } + } - if err := v.Validate(); err != nil { - return RdsValidationError{ - field: "ConfigSource", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetConfigSource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RdsValidationError{ + field: "ConfigSource", + reason: "embedded message failed validation", + cause: err, } } } @@ -544,52 +497,30 @@ ErrorName() string } = RdsValidationError{} -// Validate checks the field values on HttpFilter with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *HttpFilter) Validate() error { +// Validate checks the field values on ScopedRouteConfigurationsList with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ScopedRouteConfigurationsList) Validate() error { if m == nil { return nil } - if len(m.GetName()) < 1 { - return HttpFilterValidationError{ - field: "Name", - reason: "value length must be at least 1 bytes", + if len(m.GetScopedRouteConfigurations()) < 1 { + return ScopedRouteConfigurationsListValidationError{ + field: "ScopedRouteConfigurations", + reason: "value must contain at least 1 item(s)", } } - switch m.ConfigType.(type) { - - case *HttpFilter_Config: - - { - tmp := m.GetConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HttpFilterValidationError{ - field: "Config", - reason: "embedded message failed validation", - cause: err, - } - } - } - } - - case *HttpFilter_TypedConfig: - - { - tmp := m.GetTypedConfig() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetScopedRouteConfigurations() { + _, _ = idx, item - if err := v.Validate(); err != nil { - return HttpFilterValidationError{ - field: "TypedConfig", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRouteConfigurationsListValidationError{ + field: fmt.Sprintf("ScopedRouteConfigurations[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -599,9 +530,10 @@ return nil } -// HttpFilterValidationError is the validation error returned by -// HttpFilter.Validate if the designated constraints aren't met. -type HttpFilterValidationError struct { +// ScopedRouteConfigurationsListValidationError is the validation error +// returned by ScopedRouteConfigurationsList.Validate if the designated +// constraints aren't met. +type ScopedRouteConfigurationsListValidationError struct { field string reason string cause error @@ -609,22 +541,24 @@ } // Field function returns field value. -func (e HttpFilterValidationError) Field() string { return e.field } +func (e ScopedRouteConfigurationsListValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e HttpFilterValidationError) Reason() string { return e.reason } +func (e ScopedRouteConfigurationsListValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e HttpFilterValidationError) Cause() error { return e.cause } +func (e ScopedRouteConfigurationsListValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e HttpFilterValidationError) Key() bool { return e.key } +func (e ScopedRouteConfigurationsListValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e HttpFilterValidationError) ErrorName() string { return "HttpFilterValidationError" } +func (e ScopedRouteConfigurationsListValidationError) ErrorName() string { + return "ScopedRouteConfigurationsListValidationError" +} // Error satisfies the builtin error interface -func (e HttpFilterValidationError) Error() string { +func (e ScopedRouteConfigurationsListValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -636,14 +570,14 @@ } return fmt.Sprintf( - "invalid %sHttpFilter.%s: %s%s", + "invalid %sScopedRouteConfigurationsList.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = HttpFilterValidationError{} +var _ error = ScopedRouteConfigurationsListValidationError{} var _ interface { Field() string @@ -651,77 +585,97 @@ Key() bool Cause() error ErrorName() string -} = HttpFilterValidationError{} +} = ScopedRouteConfigurationsListValidationError{} -// Validate checks the field values on HttpConnectionManager_Tracing with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *HttpConnectionManager_Tracing) Validate() error { +// Validate checks the field values on ScopedRoutes with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ScopedRoutes) Validate() error { if m == nil { return nil } - if _, ok := HttpConnectionManager_Tracing_OperationName_name[int32(m.GetOperationName())]; !ok { - return HttpConnectionManager_TracingValidationError{ - field: "OperationName", - reason: "value must be one of the defined enum values", + if len(m.GetName()) < 1 { + return ScopedRoutesValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if m.GetScopeKeyBuilder() == nil { + return ScopedRoutesValidationError{ + field: "ScopeKeyBuilder", + reason: "value is required", } } - { - tmp := m.GetClientSampling() + if v, ok := interface{}(m.GetScopeKeyBuilder()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRoutesValidationError{ + field: "ScopeKeyBuilder", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if m.GetRdsConfigSource() == nil { + return ScopedRoutesValidationError{ + field: "RdsConfigSource", + reason: "value is required", + } + } - if err := v.Validate(); err != nil { - return HttpConnectionManager_TracingValidationError{ - field: "ClientSampling", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRdsConfigSource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRoutesValidationError{ + field: "RdsConfigSource", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetRandomSampling() + switch m.ConfigSpecifier.(type) { - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *ScopedRoutes_ScopedRouteConfigurationsList: + if v, ok := interface{}(m.GetScopedRouteConfigurationsList()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return HttpConnectionManager_TracingValidationError{ - field: "RandomSampling", + return ScopedRoutesValidationError{ + field: "ScopedRouteConfigurationsList", reason: "embedded message failed validation", cause: err, } } } - } - { - tmp := m.GetOverallSampling() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *ScopedRoutes_ScopedRds: + if v, ok := interface{}(m.GetScopedRds()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return HttpConnectionManager_TracingValidationError{ - field: "OverallSampling", + return ScopedRoutesValidationError{ + field: "ScopedRds", reason: "embedded message failed validation", cause: err, } } } - } - // no validation rules for Verbose + default: + return ScopedRoutesValidationError{ + field: "ConfigSpecifier", + reason: "value is required", + } + + } return nil } -// HttpConnectionManager_TracingValidationError is the validation error -// returned by HttpConnectionManager_Tracing.Validate if the designated -// constraints aren't met. -type HttpConnectionManager_TracingValidationError struct { +// ScopedRoutesValidationError is the validation error returned by +// ScopedRoutes.Validate if the designated constraints aren't met. +type ScopedRoutesValidationError struct { field string reason string cause error @@ -729,24 +683,22 @@ } // Field function returns field value. -func (e HttpConnectionManager_TracingValidationError) Field() string { return e.field } +func (e ScopedRoutesValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e HttpConnectionManager_TracingValidationError) Reason() string { return e.reason } +func (e ScopedRoutesValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e HttpConnectionManager_TracingValidationError) Cause() error { return e.cause } +func (e ScopedRoutesValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e HttpConnectionManager_TracingValidationError) Key() bool { return e.key } +func (e ScopedRoutesValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e HttpConnectionManager_TracingValidationError) ErrorName() string { - return "HttpConnectionManager_TracingValidationError" -} +func (e ScopedRoutesValidationError) ErrorName() string { return "ScopedRoutesValidationError" } // Error satisfies the builtin error interface -func (e HttpConnectionManager_TracingValidationError) Error() string { +func (e ScopedRoutesValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -758,14 +710,14 @@ } return fmt.Sprintf( - "invalid %sHttpConnectionManager_Tracing.%s: %s%s", + "invalid %sScopedRoutes.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = HttpConnectionManager_TracingValidationError{} +var _ error = ScopedRoutesValidationError{} var _ interface { Field() string @@ -773,25 +725,38 @@ Key() bool Cause() error ErrorName() string -} = HttpConnectionManager_TracingValidationError{} +} = ScopedRoutesValidationError{} -// Validate checks the field values on -// HttpConnectionManager_InternalAddressConfig with the rules defined in the +// Validate checks the field values on ScopedRds with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. -func (m *HttpConnectionManager_InternalAddressConfig) Validate() error { +func (m *ScopedRds) Validate() error { if m == nil { return nil } - // no validation rules for UnixSockets + if m.GetScopedRdsConfigSource() == nil { + return ScopedRdsValidationError{ + field: "ScopedRdsConfigSource", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetScopedRdsConfigSource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRdsValidationError{ + field: "ScopedRdsConfigSource", + reason: "embedded message failed validation", + cause: err, + } + } + } return nil } -// HttpConnectionManager_InternalAddressConfigValidationError is the validation -// error returned by HttpConnectionManager_InternalAddressConfig.Validate if -// the designated constraints aren't met. -type HttpConnectionManager_InternalAddressConfigValidationError struct { +// ScopedRdsValidationError is the validation error returned by +// ScopedRds.Validate if the designated constraints aren't met. +type ScopedRdsValidationError struct { field string reason string cause error @@ -799,24 +764,22 @@ } // Field function returns field value. -func (e HttpConnectionManager_InternalAddressConfigValidationError) Field() string { return e.field } +func (e ScopedRdsValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e HttpConnectionManager_InternalAddressConfigValidationError) Reason() string { return e.reason } +func (e ScopedRdsValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e HttpConnectionManager_InternalAddressConfigValidationError) Cause() error { return e.cause } +func (e ScopedRdsValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e HttpConnectionManager_InternalAddressConfigValidationError) Key() bool { return e.key } +func (e ScopedRdsValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e HttpConnectionManager_InternalAddressConfigValidationError) ErrorName() string { - return "HttpConnectionManager_InternalAddressConfigValidationError" -} +func (e ScopedRdsValidationError) ErrorName() string { return "ScopedRdsValidationError" } // Error satisfies the builtin error interface -func (e HttpConnectionManager_InternalAddressConfigValidationError) Error() string { +func (e ScopedRdsValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -828,14 +791,14 @@ } return fmt.Sprintf( - "invalid %sHttpConnectionManager_InternalAddressConfig.%s: %s%s", + "invalid %sScopedRds.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = HttpConnectionManager_InternalAddressConfigValidationError{} +var _ error = ScopedRdsValidationError{} var _ interface { Field() string @@ -843,46 +806,56 @@ Key() bool Cause() error ErrorName() string -} = HttpConnectionManager_InternalAddressConfigValidationError{} +} = ScopedRdsValidationError{} -// Validate checks the field values on -// HttpConnectionManager_SetCurrentClientCertDetails with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *HttpConnectionManager_SetCurrentClientCertDetails) Validate() error { +// Validate checks the field values on HttpFilter with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *HttpFilter) Validate() error { if m == nil { return nil } - { - tmp := m.GetSubject() + if len(m.GetName()) < 1 { + return HttpFilterValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + case *HttpFilter_Config: + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return HttpConnectionManager_SetCurrentClientCertDetailsValidationError{ - field: "Subject", + return HttpFilterValidationError{ + field: "Config", reason: "embedded message failed validation", cause: err, } } } - } - // no validation rules for Cert + case *HttpFilter_TypedConfig: - // no validation rules for Dns + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpFilterValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for Uri + } return nil } -// HttpConnectionManager_SetCurrentClientCertDetailsValidationError is the -// validation error returned by -// HttpConnectionManager_SetCurrentClientCertDetails.Validate if the -// designated constraints aren't met. -type HttpConnectionManager_SetCurrentClientCertDetailsValidationError struct { +// HttpFilterValidationError is the validation error returned by +// HttpFilter.Validate if the designated constraints aren't met. +type HttpFilterValidationError struct { field string reason string cause error @@ -890,30 +863,22 @@ } // Field function returns field value. -func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Field() string { - return e.field -} +func (e HttpFilterValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Reason() string { - return e.reason -} +func (e HttpFilterValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Cause() error { - return e.cause -} +func (e HttpFilterValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Key() bool { return e.key } +func (e HttpFilterValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) ErrorName() string { - return "HttpConnectionManager_SetCurrentClientCertDetailsValidationError" -} +func (e HttpFilterValidationError) ErrorName() string { return "HttpFilterValidationError" } // Error satisfies the builtin error interface -func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Error() string { +func (e HttpFilterValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -925,14 +890,14 @@ } return fmt.Sprintf( - "invalid %sHttpConnectionManager_SetCurrentClientCertDetails.%s: %s%s", + "invalid %sHttpFilter.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = HttpConnectionManager_SetCurrentClientCertDetailsValidationError{} +var _ error = HttpFilterValidationError{} var _ interface { Field() string @@ -940,60 +905,174 @@ Key() bool Cause() error ErrorName() string -} = HttpConnectionManager_SetCurrentClientCertDetailsValidationError{} +} = HttpFilterValidationError{} -// Validate checks the field values on HttpConnectionManager_UpgradeConfig with -// the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. -func (m *HttpConnectionManager_UpgradeConfig) Validate() error { +// Validate checks the field values on RequestIDExtension with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RequestIDExtension) Validate() error { if m == nil { return nil } - // no validation rules for UpgradeType + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RequestIDExtensionValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } - for idx, item := range m.GetFilters() { - _, _ = idx, item + return nil +} + +// RequestIDExtensionValidationError is the validation error returned by +// RequestIDExtension.Validate if the designated constraints aren't met. +type RequestIDExtensionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RequestIDExtensionValidationError) Field() string { return e.field } - { - tmp := item +// Reason function returns reason value. +func (e RequestIDExtensionValidationError) Reason() string { return e.reason } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { +// Cause function returns cause value. +func (e RequestIDExtensionValidationError) Cause() error { return e.cause } - if err := v.Validate(); err != nil { - return HttpConnectionManager_UpgradeConfigValidationError{ - field: fmt.Sprintf("Filters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } +// Key function returns key value. +func (e RequestIDExtensionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RequestIDExtensionValidationError) ErrorName() string { + return "RequestIDExtensionValidationError" +} + +// Error satisfies the builtin error interface +func (e RequestIDExtensionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRequestIDExtension.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RequestIDExtensionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RequestIDExtensionValidationError{} + +// Validate checks the field values on HttpConnectionManager_Tracing with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *HttpConnectionManager_Tracing) Validate() error { + if m == nil { + return nil + } + + if _, ok := HttpConnectionManager_Tracing_OperationName_name[int32(m.GetOperationName())]; !ok { + return HttpConnectionManager_TracingValidationError{ + field: "OperationName", + reason: "value must be one of the defined enum values", + } + } + + if v, ok := interface{}(m.GetClientSampling()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_TracingValidationError{ + field: "ClientSampling", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetRandomSampling()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_TracingValidationError{ + field: "RandomSampling", + reason: "embedded message failed validation", + cause: err, } } + } + if v, ok := interface{}(m.GetOverallSampling()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_TracingValidationError{ + field: "OverallSampling", + reason: "embedded message failed validation", + cause: err, + } + } } - { - tmp := m.GetEnabled() + // no validation rules for Verbose + + if v, ok := interface{}(m.GetMaxPathTagLength()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_TracingValidationError{ + field: "MaxPathTagLength", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetCustomTags() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return HttpConnectionManager_UpgradeConfigValidationError{ - field: "Enabled", + return HttpConnectionManager_TracingValidationError{ + field: fmt.Sprintf("CustomTags[%v]", idx), reason: "embedded message failed validation", cause: err, } } } + + } + + if v, ok := interface{}(m.GetProvider()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_TracingValidationError{ + field: "Provider", + reason: "embedded message failed validation", + cause: err, + } + } } return nil } -// HttpConnectionManager_UpgradeConfigValidationError is the validation error -// returned by HttpConnectionManager_UpgradeConfig.Validate if the designated +// HttpConnectionManager_TracingValidationError is the validation error +// returned by HttpConnectionManager_Tracing.Validate if the designated // constraints aren't met. -type HttpConnectionManager_UpgradeConfigValidationError struct { +type HttpConnectionManager_TracingValidationError struct { field string reason string cause error @@ -1001,24 +1080,24 @@ } // Field function returns field value. -func (e HttpConnectionManager_UpgradeConfigValidationError) Field() string { return e.field } +func (e HttpConnectionManager_TracingValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e HttpConnectionManager_UpgradeConfigValidationError) Reason() string { return e.reason } +func (e HttpConnectionManager_TracingValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e HttpConnectionManager_UpgradeConfigValidationError) Cause() error { return e.cause } +func (e HttpConnectionManager_TracingValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e HttpConnectionManager_UpgradeConfigValidationError) Key() bool { return e.key } +func (e HttpConnectionManager_TracingValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e HttpConnectionManager_UpgradeConfigValidationError) ErrorName() string { - return "HttpConnectionManager_UpgradeConfigValidationError" +func (e HttpConnectionManager_TracingValidationError) ErrorName() string { + return "HttpConnectionManager_TracingValidationError" } // Error satisfies the builtin error interface -func (e HttpConnectionManager_UpgradeConfigValidationError) Error() string { +func (e HttpConnectionManager_TracingValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1030,14 +1109,14 @@ } return fmt.Sprintf( - "invalid %sHttpConnectionManager_UpgradeConfig.%s: %s%s", + "invalid %sHttpConnectionManager_Tracing.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = HttpConnectionManager_UpgradeConfigValidationError{} +var _ error = HttpConnectionManager_TracingValidationError{} var _ interface { Field() string @@ -1045,4 +1124,642 @@ Key() bool Cause() error ErrorName() string -} = HttpConnectionManager_UpgradeConfigValidationError{} +} = HttpConnectionManager_TracingValidationError{} + +// Validate checks the field values on +// HttpConnectionManager_InternalAddressConfig with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *HttpConnectionManager_InternalAddressConfig) Validate() error { + if m == nil { + return nil + } + + // no validation rules for UnixSockets + + return nil +} + +// HttpConnectionManager_InternalAddressConfigValidationError is the validation +// error returned by HttpConnectionManager_InternalAddressConfig.Validate if +// the designated constraints aren't met. +type HttpConnectionManager_InternalAddressConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HttpConnectionManager_InternalAddressConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HttpConnectionManager_InternalAddressConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HttpConnectionManager_InternalAddressConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HttpConnectionManager_InternalAddressConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HttpConnectionManager_InternalAddressConfigValidationError) ErrorName() string { + return "HttpConnectionManager_InternalAddressConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e HttpConnectionManager_InternalAddressConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttpConnectionManager_InternalAddressConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HttpConnectionManager_InternalAddressConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HttpConnectionManager_InternalAddressConfigValidationError{} + +// Validate checks the field values on +// HttpConnectionManager_SetCurrentClientCertDetails with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *HttpConnectionManager_SetCurrentClientCertDetails) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetSubject()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_SetCurrentClientCertDetailsValidationError{ + field: "Subject", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Cert + + // no validation rules for Chain + + // no validation rules for Dns + + // no validation rules for Uri + + return nil +} + +// HttpConnectionManager_SetCurrentClientCertDetailsValidationError is the +// validation error returned by +// HttpConnectionManager_SetCurrentClientCertDetails.Validate if the +// designated constraints aren't met. +type HttpConnectionManager_SetCurrentClientCertDetailsValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Cause() error { + return e.cause +} + +// Key function returns key value. +func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) ErrorName() string { + return "HttpConnectionManager_SetCurrentClientCertDetailsValidationError" +} + +// Error satisfies the builtin error interface +func (e HttpConnectionManager_SetCurrentClientCertDetailsValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttpConnectionManager_SetCurrentClientCertDetails.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HttpConnectionManager_SetCurrentClientCertDetailsValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HttpConnectionManager_SetCurrentClientCertDetailsValidationError{} + +// Validate checks the field values on HttpConnectionManager_UpgradeConfig with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *HttpConnectionManager_UpgradeConfig) Validate() error { + if m == nil { + return nil + } + + // no validation rules for UpgradeType + + for idx, item := range m.GetFilters() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_UpgradeConfigValidationError{ + field: fmt.Sprintf("Filters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if v, ok := interface{}(m.GetEnabled()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HttpConnectionManager_UpgradeConfigValidationError{ + field: "Enabled", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// HttpConnectionManager_UpgradeConfigValidationError is the validation error +// returned by HttpConnectionManager_UpgradeConfig.Validate if the designated +// constraints aren't met. +type HttpConnectionManager_UpgradeConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HttpConnectionManager_UpgradeConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HttpConnectionManager_UpgradeConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HttpConnectionManager_UpgradeConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HttpConnectionManager_UpgradeConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HttpConnectionManager_UpgradeConfigValidationError) ErrorName() string { + return "HttpConnectionManager_UpgradeConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e HttpConnectionManager_UpgradeConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHttpConnectionManager_UpgradeConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HttpConnectionManager_UpgradeConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HttpConnectionManager_UpgradeConfigValidationError{} + +// Validate checks the field values on ScopedRoutes_ScopeKeyBuilder with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ScopedRoutes_ScopeKeyBuilder) Validate() error { + if m == nil { + return nil + } + + if len(m.GetFragments()) < 1 { + return ScopedRoutes_ScopeKeyBuilderValidationError{ + field: "Fragments", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetFragments() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRoutes_ScopeKeyBuilderValidationError{ + field: fmt.Sprintf("Fragments[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ScopedRoutes_ScopeKeyBuilderValidationError is the validation error returned +// by ScopedRoutes_ScopeKeyBuilder.Validate if the designated constraints +// aren't met. +type ScopedRoutes_ScopeKeyBuilderValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRoutes_ScopeKeyBuilderValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ScopedRoutes_ScopeKeyBuilderValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ScopedRoutes_ScopeKeyBuilderValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ScopedRoutes_ScopeKeyBuilderValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ScopedRoutes_ScopeKeyBuilderValidationError) ErrorName() string { + return "ScopedRoutes_ScopeKeyBuilderValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRoutes_ScopeKeyBuilderValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRoutes_ScopeKeyBuilder.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRoutes_ScopeKeyBuilderValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRoutes_ScopeKeyBuilderValidationError{} + +// Validate checks the field values on +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_: + + if v, ok := interface{}(m.GetHeaderValueExtractor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{ + field: "HeaderValueExtractor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError is the +// validation error returned by +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder.Validate if the designated +// constraints aren't met. +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError) ErrorName() string { + return "ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRoutes_ScopeKeyBuilder_FragmentBuilder.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRoutes_ScopeKeyBuilder_FragmentBuilderValidationError{} + +// Validate checks the field values on +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for ElementSeparator + + switch m.ExtractType.(type) { + + case *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Index: + // no validation rules for Index + + case *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_Element: + + if v, ok := interface{}(m.GetElement()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError{ + field: "Element", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError +// is the validation error returned by +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.Validate +// if the designated constraints aren't met. +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError) Cause() error { + return e.cause +} + +// Key function returns key value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError) Key() bool { + return e.key +} + +// ErrorName returns error name. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError) ErrorName() string { + return "ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractorValidationError{} + +// Validate checks the field values on +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement) Validate() error { + if m == nil { + return nil + } + + if len(m.GetSeparator()) < 1 { + return ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError{ + field: "Separator", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetKey()) < 1 { + return ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError{ + field: "Key", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError +// is the validation error returned by +// ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.Validate +// if the designated constraints aren't met. +type ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError) Field() string { + return e.field +} + +// Reason function returns reason value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError) Reason() string { + return e.reason +} + +// Cause function returns cause value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError) Cause() error { + return e.cause +} + +// Key function returns key value. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError) Key() bool { + return e.key +} + +// ErrorName returns error name. +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError) ErrorName() string { + return "ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError" +} + +// Error satisfies the builtin error interface +func (e ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElementValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,111 +1,50 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto -package v2 +package envoy_config_filter_network_tcp_proxy_v2 import ( fmt "fmt" - io "io" - math "math" - time "time" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" v2 "github.com/envoyproxy/go-control-plane/envoy/config/filter/accesslog/v2" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type TcpProxy struct { - // The prefix to use when emitting :ref:`statistics - // `. StatPrefix string `protobuf:"bytes,1,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` // Types that are valid to be assigned to ClusterSpecifier: // *TcpProxy_Cluster // *TcpProxy_WeightedClusters - ClusterSpecifier isTcpProxy_ClusterSpecifier `protobuf_oneof:"cluster_specifier"` - // Optional endpoint metadata match criteria. Only endpoints in the upstream - // cluster with metadata matching that set in metadata_match will be - // considered. The filter name should be specified as *envoy.lb*. - MetadataMatch *core.Metadata `protobuf:"bytes,9,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` - // The idle timeout for connections managed by the TCP proxy filter. The idle timeout - // is defined as the period in which there are no bytes sent or received on either - // the upstream or downstream connection. If not set, connections will never be closed - // by the TCP proxy due to being idle. - IdleTimeout *time.Duration `protobuf:"bytes,8,opt,name=idle_timeout,json=idleTimeout,proto3,stdduration" json:"idle_timeout,omitempty"` - // [#not-implemented-hide:] The idle timeout for connections managed by the TCP proxy - // filter. The idle timeout is defined as the period in which there is no - // active traffic. If not set, there is no idle timeout. When the idle timeout - // is reached the connection will be closed. The distinction between - // downstream_idle_timeout/upstream_idle_timeout provides a means to set - // timeout based on the last byte sent on the downstream/upstream connection. - DownstreamIdleTimeout *types.Duration `protobuf:"bytes,3,opt,name=downstream_idle_timeout,json=downstreamIdleTimeout,proto3" json:"downstream_idle_timeout,omitempty"` - // [#not-implemented-hide:] - UpstreamIdleTimeout *types.Duration `protobuf:"bytes,4,opt,name=upstream_idle_timeout,json=upstreamIdleTimeout,proto3" json:"upstream_idle_timeout,omitempty"` - // Configuration for :ref:`access logs ` - // emitted by the this tcp_proxy. - AccessLog []*v2.AccessLog `protobuf:"bytes,5,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"` - // TCP Proxy filter configuration using deprecated V1 format. This is required for complex - // routing until filter chain matching in the listener is implemented. - // - // Example: - // - // .. code-block:: yaml - // - // - name: "envoy.tcp_proxy" - // config: - // deprecated_v1: true - // value: - // stat_prefix: "prefix" - // access_log: - // - ... - // route_config: - // routes: - // - cluster: "cluster" - // destination_ip_list: - // - "10.1.0.0/8" - // destination_ports: "8080" - // source_ip_list: - // - "10.1.0.0/16" - // - "2001:db8::/32" - // source_ports: "8000,9000-9999" - // - // .. attention:: - // - // Using the deprecated V1 configuration excludes the use of any V2 configuration options. Only - // the V1 configuration is used. All available fields are shown in the example, although the - // access log configuration is omitted for simplicity. The access log configuration uses the - // :repo:`deprecated V1 access log configuration`. - // - // .. attention:: - // - // In the deprecated V1 configuration, source and destination CIDR ranges are specified as a - // list of strings with each string in CIDR notation. Source and destination ports are - // specified as single strings containing a comma-separated list of ports and/or port ranges. - // - // Deprecation pending https://github.com/envoyproxy/envoy/issues/4457 - DeprecatedV1 *TcpProxy_DeprecatedV1 `protobuf:"bytes,6,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` - // The maximum number of unsuccessful connection attempts that will be made before - // giving up. If the parameter is not specified, 1 connection attempt will be made. - MaxConnectAttempts *types.UInt32Value `protobuf:"bytes,7,opt,name=max_connect_attempts,json=maxConnectAttempts,proto3" json:"max_connect_attempts,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ClusterSpecifier isTcpProxy_ClusterSpecifier `protobuf_oneof:"cluster_specifier"` + MetadataMatch *core.Metadata `protobuf:"bytes,9,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` + IdleTimeout *duration.Duration `protobuf:"bytes,8,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` + DownstreamIdleTimeout *duration.Duration `protobuf:"bytes,3,opt,name=downstream_idle_timeout,json=downstreamIdleTimeout,proto3" json:"downstream_idle_timeout,omitempty"` + UpstreamIdleTimeout *duration.Duration `protobuf:"bytes,4,opt,name=upstream_idle_timeout,json=upstreamIdleTimeout,proto3" json:"upstream_idle_timeout,omitempty"` + AccessLog []*v2.AccessLog `protobuf:"bytes,5,rep,name=access_log,json=accessLog,proto3" json:"access_log,omitempty"` + DeprecatedV1 *TcpProxy_DeprecatedV1 `protobuf:"bytes,6,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` // Deprecated: Do not use. + MaxConnectAttempts *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=max_connect_attempts,json=maxConnectAttempts,proto3" json:"max_connect_attempts,omitempty"` + HashPolicy []*_type.HashPolicy `protobuf:"bytes,11,rep,name=hash_policy,json=hashPolicy,proto3" json:"hash_policy,omitempty"` + TunnelingConfig *TcpProxy_TunnelingConfig `protobuf:"bytes,12,opt,name=tunneling_config,json=tunnelingConfig,proto3" json:"tunneling_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TcpProxy) Reset() { *m = TcpProxy{} } @@ -114,26 +53,18 @@ func (*TcpProxy) Descriptor() ([]byte, []int) { return fileDescriptor_1f6b35dbcbad27ba, []int{0} } + func (m *TcpProxy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpProxy.Unmarshal(m, b) } func (m *TcpProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpProxy.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpProxy.Marshal(b, m, deterministic) } func (m *TcpProxy) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpProxy.Merge(m, src) } func (m *TcpProxy) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpProxy.Size(m) } func (m *TcpProxy) XXX_DiscardUnknown() { xxx_messageInfo_TcpProxy.DiscardUnknown(m) @@ -141,20 +72,27 @@ var xxx_messageInfo_TcpProxy proto.InternalMessageInfo +func (m *TcpProxy) GetStatPrefix() string { + if m != nil { + return m.StatPrefix + } + return "" +} + type isTcpProxy_ClusterSpecifier interface { isTcpProxy_ClusterSpecifier() - MarshalTo([]byte) (int, error) - Size() int } type TcpProxy_Cluster struct { Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3,oneof"` } + type TcpProxy_WeightedClusters struct { WeightedClusters *TcpProxy_WeightedCluster `protobuf:"bytes,10,opt,name=weighted_clusters,json=weightedClusters,proto3,oneof"` } -func (*TcpProxy_Cluster) isTcpProxy_ClusterSpecifier() {} +func (*TcpProxy_Cluster) isTcpProxy_ClusterSpecifier() {} + func (*TcpProxy_WeightedClusters) isTcpProxy_ClusterSpecifier() {} func (m *TcpProxy) GetClusterSpecifier() isTcpProxy_ClusterSpecifier { @@ -164,13 +102,6 @@ return nil } -func (m *TcpProxy) GetStatPrefix() string { - if m != nil { - return m.StatPrefix - } - return "" -} - func (m *TcpProxy) GetCluster() string { if x, ok := m.GetClusterSpecifier().(*TcpProxy_Cluster); ok { return x.Cluster @@ -192,21 +123,21 @@ return nil } -func (m *TcpProxy) GetIdleTimeout() *time.Duration { +func (m *TcpProxy) GetIdleTimeout() *duration.Duration { if m != nil { return m.IdleTimeout } return nil } -func (m *TcpProxy) GetDownstreamIdleTimeout() *types.Duration { +func (m *TcpProxy) GetDownstreamIdleTimeout() *duration.Duration { if m != nil { return m.DownstreamIdleTimeout } return nil } -func (m *TcpProxy) GetUpstreamIdleTimeout() *types.Duration { +func (m *TcpProxy) GetUpstreamIdleTimeout() *duration.Duration { if m != nil { return m.UpstreamIdleTimeout } @@ -220,6 +151,7 @@ return nil } +// Deprecated: Do not use. func (m *TcpProxy) GetDeprecatedV1() *TcpProxy_DeprecatedV1 { if m != nil { return m.DeprecatedV1 @@ -227,89 +159,37 @@ return nil } -func (m *TcpProxy) GetMaxConnectAttempts() *types.UInt32Value { +func (m *TcpProxy) GetMaxConnectAttempts() *wrappers.UInt32Value { if m != nil { return m.MaxConnectAttempts } return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*TcpProxy) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _TcpProxy_OneofMarshaler, _TcpProxy_OneofUnmarshaler, _TcpProxy_OneofSizer, []interface{}{ - (*TcpProxy_Cluster)(nil), - (*TcpProxy_WeightedClusters)(nil), +func (m *TcpProxy) GetHashPolicy() []*_type.HashPolicy { + if m != nil { + return m.HashPolicy } + return nil } -func _TcpProxy_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*TcpProxy) - // cluster_specifier - switch x := m.ClusterSpecifier.(type) { - case *TcpProxy_Cluster: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - _ = b.EncodeStringBytes(x.Cluster) - case *TcpProxy_WeightedClusters: - _ = b.EncodeVarint(10<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.WeightedClusters); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("TcpProxy.ClusterSpecifier has unexpected type %T", x) +func (m *TcpProxy) GetTunnelingConfig() *TcpProxy_TunnelingConfig { + if m != nil { + return m.TunnelingConfig } return nil } -func _TcpProxy_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*TcpProxy) - switch tag { - case 2: // cluster_specifier.cluster - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ClusterSpecifier = &TcpProxy_Cluster{x} - return true, err - case 10: // cluster_specifier.weighted_clusters - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TcpProxy_WeightedCluster) - err := b.DecodeMessage(msg) - m.ClusterSpecifier = &TcpProxy_WeightedClusters{msg} - return true, err - default: - return false, nil +// XXX_OneofWrappers is for the internal use of the proto package. +func (*TcpProxy) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*TcpProxy_Cluster)(nil), + (*TcpProxy_WeightedClusters)(nil), } } -func _TcpProxy_OneofSizer(msg proto.Message) (n int) { - m := msg.(*TcpProxy) - // cluster_specifier - switch x := m.ClusterSpecifier.(type) { - case *TcpProxy_Cluster: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Cluster))) - n += len(x.Cluster) - case *TcpProxy_WeightedClusters: - s := proto.Size(x.WeightedClusters) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// TCP Proxy filter configuration using V1 format, until Envoy gets the -// ability to match source/destination at the listener level (called -// :ref:`filter chain match `). +// Deprecated: Do not use. type TcpProxy_DeprecatedV1 struct { - // The route table for the filter. All filter instances must have a route - // table, even if it is empty. Routes []*TcpProxy_DeprecatedV1_TCPRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -322,26 +202,18 @@ func (*TcpProxy_DeprecatedV1) Descriptor() ([]byte, []int) { return fileDescriptor_1f6b35dbcbad27ba, []int{0, 0} } + func (m *TcpProxy_DeprecatedV1) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpProxy_DeprecatedV1.Unmarshal(m, b) } func (m *TcpProxy_DeprecatedV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpProxy_DeprecatedV1.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpProxy_DeprecatedV1.Marshal(b, m, deterministic) } func (m *TcpProxy_DeprecatedV1) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpProxy_DeprecatedV1.Merge(m, src) } func (m *TcpProxy_DeprecatedV1) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpProxy_DeprecatedV1.Size(m) } func (m *TcpProxy_DeprecatedV1) XXX_DiscardUnknown() { xxx_messageInfo_TcpProxy_DeprecatedV1.DiscardUnknown(m) @@ -356,49 +228,15 @@ return nil } -// A TCP proxy route consists of a set of optional L4 criteria and the -// name of a cluster. If a downstream connection matches all the -// specified criteria, the cluster in the route is used for the -// corresponding upstream connection. Routes are tried in the order -// specified until a match is found. If no match is found, the connection -// is closed. A route with no criteria is valid and always produces a -// match. type TcpProxy_DeprecatedV1_TCPRoute struct { - // The cluster to connect to when a the downstream network connection - // matches the specified criteria. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // An optional list of IP address subnets in the form - // “ip_address/xx”. The criteria is satisfied if the destination IP - // address of the downstream connection is contained in at least one of - // the specified subnets. If the parameter is not specified or the list - // is empty, the destination IP address is ignored. The destination IP - // address of the downstream connection might be different from the - // addresses on which the proxy is listening if the connection has been - // redirected. - DestinationIpList []*core.CidrRange `protobuf:"bytes,2,rep,name=destination_ip_list,json=destinationIpList,proto3" json:"destination_ip_list,omitempty"` - // An optional string containing a comma-separated list of port numbers - // or ranges. The criteria is satisfied if the destination port of the - // downstream connection is contained in at least one of the specified - // ranges. If the parameter is not specified, the destination port is - // ignored. The destination port address of the downstream connection - // might be different from the port on which the proxy is listening if - // the connection has been redirected. - DestinationPorts string `protobuf:"bytes,3,opt,name=destination_ports,json=destinationPorts,proto3" json:"destination_ports,omitempty"` - // An optional list of IP address subnets in the form - // “ip_address/xx”. The criteria is satisfied if the source IP address - // of the downstream connection is contained in at least one of the - // specified subnets. If the parameter is not specified or the list is - // empty, the source IP address is ignored. - SourceIpList []*core.CidrRange `protobuf:"bytes,4,rep,name=source_ip_list,json=sourceIpList,proto3" json:"source_ip_list,omitempty"` - // An optional string containing a comma-separated list of port numbers - // or ranges. The criteria is satisfied if the source port of the - // downstream connection is contained in at least one of the specified - // ranges. If the parameter is not specified, the source port is - // ignored. - SourcePorts string `protobuf:"bytes,5,opt,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + DestinationIpList []*core.CidrRange `protobuf:"bytes,2,rep,name=destination_ip_list,json=destinationIpList,proto3" json:"destination_ip_list,omitempty"` + DestinationPorts string `protobuf:"bytes,3,opt,name=destination_ports,json=destinationPorts,proto3" json:"destination_ports,omitempty"` + SourceIpList []*core.CidrRange `protobuf:"bytes,4,rep,name=source_ip_list,json=sourceIpList,proto3" json:"source_ip_list,omitempty"` + SourcePorts string `protobuf:"bytes,5,opt,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TcpProxy_DeprecatedV1_TCPRoute) Reset() { *m = TcpProxy_DeprecatedV1_TCPRoute{} } @@ -407,26 +245,18 @@ func (*TcpProxy_DeprecatedV1_TCPRoute) Descriptor() ([]byte, []int) { return fileDescriptor_1f6b35dbcbad27ba, []int{0, 0, 0} } + func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Unmarshal(m, b) } func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Marshal(b, m, deterministic) } func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Merge(m, src) } func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.Size(m) } func (m *TcpProxy_DeprecatedV1_TCPRoute) XXX_DiscardUnknown() { xxx_messageInfo_TcpProxy_DeprecatedV1_TCPRoute.DiscardUnknown(m) @@ -469,11 +299,7 @@ return "" } -// Allows for specification of multiple upstream clusters along with weights -// that indicate the percentage of traffic to be forwarded to each cluster. -// The router selects an upstream cluster based on these weights. type TcpProxy_WeightedCluster struct { - // Specifies one or more upstream clusters associated with the route. Clusters []*TcpProxy_WeightedCluster_ClusterWeight `protobuf:"bytes,1,rep,name=clusters,proto3" json:"clusters,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -486,26 +312,18 @@ func (*TcpProxy_WeightedCluster) Descriptor() ([]byte, []int) { return fileDescriptor_1f6b35dbcbad27ba, []int{0, 1} } + func (m *TcpProxy_WeightedCluster) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpProxy_WeightedCluster.Unmarshal(m, b) } func (m *TcpProxy_WeightedCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpProxy_WeightedCluster.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpProxy_WeightedCluster.Marshal(b, m, deterministic) } func (m *TcpProxy_WeightedCluster) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpProxy_WeightedCluster.Merge(m, src) } func (m *TcpProxy_WeightedCluster) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpProxy_WeightedCluster.Size(m) } func (m *TcpProxy_WeightedCluster) XXX_DiscardUnknown() { xxx_messageInfo_TcpProxy_WeightedCluster.DiscardUnknown(m) @@ -521,15 +339,12 @@ } type TcpProxy_WeightedCluster_ClusterWeight struct { - // Name of the upstream cluster. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // When a request matches the route, the choice of an upstream cluster is - // determined by its weight. The sum of weights across all entries in the - // clusters array determines the total weight. - Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` + MetadataMatch *core.Metadata `protobuf:"bytes,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TcpProxy_WeightedCluster_ClusterWeight) Reset() { @@ -540,26 +355,18 @@ func (*TcpProxy_WeightedCluster_ClusterWeight) Descriptor() ([]byte, []int) { return fileDescriptor_1f6b35dbcbad27ba, []int{0, 1, 0} } + func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Unmarshal(m, b) } func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Marshal(b, m, deterministic) } func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Merge(src proto.Message) { xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Merge(m, src) } func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_Size() int { - return m.Size() + return xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.Size(m) } func (m *TcpProxy_WeightedCluster_ClusterWeight) XXX_DiscardUnknown() { xxx_messageInfo_TcpProxy_WeightedCluster_ClusterWeight.DiscardUnknown(m) @@ -581,1555 +388,124 @@ return 0 } -func init() { - proto.RegisterType((*TcpProxy)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy") - proto.RegisterType((*TcpProxy_DeprecatedV1)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.DeprecatedV1") - proto.RegisterType((*TcpProxy_DeprecatedV1_TCPRoute)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.DeprecatedV1.TCPRoute") - proto.RegisterType((*TcpProxy_WeightedCluster)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.WeightedCluster") - proto.RegisterType((*TcpProxy_WeightedCluster_ClusterWeight)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.WeightedCluster.ClusterWeight") +func (m *TcpProxy_WeightedCluster_ClusterWeight) GetMetadataMatch() *core.Metadata { + if m != nil { + return m.MetadataMatch + } + return nil } -func init() { - proto.RegisterFile("envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto", fileDescriptor_1f6b35dbcbad27ba) +type TcpProxy_TunnelingConfig struct { + Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -var fileDescriptor_1f6b35dbcbad27ba = []byte{ - // 812 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcf, 0x6e, 0xdc, 0x44, - 0x18, 0xcf, 0xec, 0x26, 0xe9, 0xee, 0x6c, 0xb6, 0x34, 0xd3, 0x56, 0x35, 0x26, 0xa4, 0x29, 0x5c, - 0x56, 0xa9, 0x64, 0xd3, 0xad, 0x84, 0xb8, 0xa1, 0x3a, 0x3d, 0x24, 0x28, 0x91, 0xb6, 0x56, 0x28, - 0x2a, 0x17, 0x6b, 0x62, 0xcf, 0xba, 0x23, 0x6c, 0xcf, 0x30, 0x33, 0xde, 0xdd, 0xbe, 0x05, 0x70, - 0x40, 0x3c, 0x03, 0x4f, 0x80, 0x38, 0xf5, 0xc8, 0x91, 0x27, 0x00, 0x94, 0x5b, 0xdf, 0x02, 0xcd, - 0x1f, 0xef, 0x3a, 0x24, 0xa8, 0x51, 0x7b, 0xf2, 0xcc, 0xf7, 0x7d, 0xbf, 0xdf, 0xcf, 0xdf, 0xbf, - 0x81, 0x5f, 0x90, 0x6a, 0xc6, 0x5e, 0x85, 0x29, 0xab, 0xa6, 0x34, 0x0f, 0xa7, 0xb4, 0x50, 0x44, - 0x84, 0x15, 0x51, 0x73, 0x26, 0xbe, 0x0b, 0x55, 0xca, 0x13, 0x2e, 0xd8, 0xe2, 0x55, 0x38, 0x1b, - 0xaf, 0x2e, 0x01, 0x17, 0x4c, 0x31, 0x34, 0x32, 0xc8, 0xc0, 0x22, 0x03, 0x8b, 0x0c, 0x1c, 0x32, - 0x58, 0x05, 0xcf, 0xc6, 0xfe, 0x67, 0x57, 0x69, 0xe0, 0x34, 0x25, 0x52, 0x16, 0x2c, 0xd7, 0xdc, - 0xcb, 0x8b, 0xe5, 0xf6, 0xef, 0x5b, 0x04, 0xe6, 0x54, 0x7b, 0x53, 0x26, 0x48, 0x88, 0xb3, 0x4c, - 0x10, 0x29, 0x5d, 0xc0, 0xce, 0xe5, 0x80, 0x33, 0x2c, 0x89, 0xf3, 0xee, 0xe6, 0x8c, 0xe5, 0x05, - 0x09, 0xcd, 0xed, 0xac, 0x9e, 0x86, 0x59, 0x2d, 0xb0, 0xa2, 0xac, 0xfa, 0x3f, 0xff, 0x5c, 0x60, - 0xce, 0x89, 0x68, 0xd8, 0xef, 0xcd, 0x70, 0x41, 0x33, 0xac, 0x48, 0xd8, 0x1c, 0x9c, 0xe3, 0x4e, - 0xce, 0x72, 0x66, 0x8e, 0xa1, 0x3e, 0x59, 0xeb, 0x27, 0x3f, 0x0f, 0x60, 0xef, 0x34, 0xe5, 0x13, - 0x9d, 0x2f, 0xda, 0x87, 0x03, 0xa9, 0xb0, 0x4a, 0xb8, 0x20, 0x53, 0xba, 0xf0, 0xc0, 0x1e, 0x18, - 0xf5, 0xa3, 0xfe, 0xef, 0x6f, 0x5e, 0x77, 0xd7, 0x45, 0x67, 0x0f, 0xc4, 0x50, 0x7b, 0x27, 0xc6, - 0x89, 0x7c, 0x78, 0x23, 0x2d, 0x6a, 0xa9, 0x88, 0xf0, 0x3a, 0x3a, 0xee, 0x70, 0x2d, 0x6e, 0x0c, - 0xe8, 0x7b, 0xb8, 0x3d, 0x27, 0x34, 0x7f, 0xa9, 0x48, 0x96, 0x38, 0x9b, 0xf4, 0xe0, 0x1e, 0x18, - 0x0d, 0xc6, 0x51, 0x70, 0xdd, 0xd2, 0x07, 0xcd, 0x6f, 0x05, 0xdf, 0x38, 0xae, 0x03, 0x4b, 0x75, - 0xb8, 0x16, 0xdf, 0x9a, 0x5f, 0x34, 0x49, 0x14, 0xc1, 0x9b, 0x25, 0x51, 0x38, 0xc3, 0x0a, 0x27, - 0x25, 0x56, 0xe9, 0x4b, 0xaf, 0x6f, 0xf4, 0x3e, 0x72, 0x7a, 0x98, 0x53, 0xcd, 0xa9, 0xab, 0x1d, - 0x9c, 0xb8, 0xc0, 0x78, 0xd8, 0x40, 0x4e, 0x34, 0x02, 0x1d, 0xc3, 0x2d, 0x9a, 0x15, 0x24, 0x51, - 0xb4, 0x24, 0xac, 0x56, 0x5e, 0xcf, 0x30, 0x7c, 0x18, 0xd8, 0x8a, 0x07, 0x4d, 0xc5, 0x83, 0xa7, - 0xae, 0x23, 0xd1, 0xcd, 0x5f, 0xfe, 0xbe, 0x0f, 0x74, 0x79, 0x36, 0x7e, 0x05, 0x9d, 0xfd, 0xb5, - 0x78, 0xa0, 0xe1, 0xa7, 0x16, 0x8d, 0x9e, 0xc1, 0x7b, 0x19, 0x9b, 0x57, 0x52, 0x09, 0x82, 0xcb, - 0xe4, 0x02, 0x71, 0xf7, 0x2d, 0xc4, 0xf1, 0xdd, 0x15, 0xf2, 0xa8, 0x45, 0x79, 0x02, 0xef, 0xd6, - 0xfc, 0x2a, 0xc2, 0xf5, 0xb7, 0x11, 0xde, 0x6e, 0x70, 0x6d, 0xba, 0xaf, 0x20, 0xb4, 0xc3, 0x9b, - 0x14, 0x2c, 0xf7, 0x36, 0xf6, 0xba, 0xa3, 0xc1, 0xf8, 0xe1, 0x95, 0xfd, 0x59, 0xcd, 0xf8, 0x6c, - 0x1c, 0x3c, 0x31, 0x97, 0x63, 0x96, 0xc7, 0x7d, 0xdc, 0x1c, 0x51, 0x06, 0x87, 0x19, 0xe1, 0x82, - 0xa4, 0x58, 0x37, 0x7d, 0xf6, 0xc8, 0xdb, 0x34, 0xbf, 0xf4, 0xe5, 0x3b, 0xb4, 0xfb, 0xe9, 0x92, - 0xe7, 0xf9, 0xa3, 0x78, 0x2b, 0x6b, 0xdd, 0xd0, 0x0b, 0x78, 0xa7, 0xc4, 0x8b, 0x24, 0x65, 0x55, - 0x45, 0x52, 0x95, 0x60, 0xa5, 0x48, 0xc9, 0x95, 0xf4, 0x6e, 0x18, 0xb1, 0x9d, 0x4b, 0xf9, 0x7f, - 0x7d, 0x54, 0xa9, 0xc7, 0xe3, 0xe7, 0xb8, 0xa8, 0x89, 0x9b, 0xe3, 0xfd, 0xce, 0x08, 0xc4, 0xa8, - 0xc4, 0x8b, 0x03, 0xcb, 0xf1, 0xc4, 0x51, 0xf8, 0x3f, 0x74, 0xe1, 0x56, 0x5b, 0x19, 0x15, 0x70, - 0x53, 0xb0, 0x5a, 0x11, 0xe9, 0x01, 0x53, 0x99, 0xc3, 0xf7, 0x4c, 0x25, 0x38, 0x3d, 0x98, 0xc4, - 0x9a, 0x30, 0x82, 0x66, 0x64, 0x7e, 0x02, 0x9d, 0x1e, 0x88, 0x9d, 0x86, 0xff, 0x63, 0x07, 0xf6, - 0x9a, 0x00, 0xf4, 0xe9, 0x6a, 0xb7, 0x2e, 0xed, 0xe0, 0x72, 0xc9, 0x8e, 0xe1, 0xed, 0x8c, 0x48, - 0x45, 0x2b, 0xd3, 0xe1, 0x84, 0xf2, 0xa4, 0xa0, 0x52, 0x79, 0x1d, 0xf3, 0xb3, 0x3b, 0x57, 0x8c, - 0xfd, 0x01, 0xcd, 0x44, 0x8c, 0xab, 0x9c, 0xc4, 0xdb, 0x2d, 0xe0, 0x11, 0x3f, 0xa6, 0x52, 0xa1, - 0x87, 0xb0, 0x6d, 0x4c, 0x38, 0x13, 0x4a, 0x9a, 0x39, 0xed, 0xc7, 0xb7, 0x5a, 0x8e, 0x89, 0xb6, - 0xeb, 0x65, 0x93, 0xac, 0x16, 0x29, 0x59, 0xaa, 0xae, 0x5f, 0x43, 0x75, 0xcb, 0x62, 0x9c, 0xe0, - 0x03, 0xe8, 0xee, 0x4e, 0x6b, 0xc3, 0x68, 0x0d, 0xac, 0xcd, 0xc8, 0xf8, 0x7f, 0x01, 0xf8, 0xc1, - 0x7f, 0x76, 0x1f, 0x2d, 0x60, 0x6f, 0xf9, 0xa2, 0xd8, 0xbe, 0x4c, 0xde, 0xff, 0x45, 0x09, 0xdc, - 0xd7, 0x9a, 0x2f, 0xf4, 0x67, 0xa9, 0xe6, 0x3f, 0x83, 0xc3, 0x0b, 0x61, 0xe8, 0x63, 0xb8, 0x5e, - 0xe1, 0x92, 0x5c, 0x6e, 0x91, 0x31, 0xa3, 0x07, 0x70, 0xd3, 0xbe, 0x52, 0xe6, 0x7d, 0x1c, 0xb6, - 0xe7, 0xcf, 0x39, 0x22, 0x1f, 0x6e, 0x3b, 0xfa, 0x44, 0x72, 0x92, 0xd2, 0x29, 0x25, 0x02, 0x6d, - 0xfc, 0xf6, 0xe6, 0x75, 0x17, 0x44, 0x2f, 0xfe, 0x38, 0xdf, 0x05, 0x7f, 0x9e, 0xef, 0x82, 0x7f, - 0xce, 0x77, 0x01, 0xfc, 0x9c, 0x32, 0x9b, 0xa6, 0xcd, 0xe5, 0xba, 0x19, 0x47, 0xc3, 0x26, 0xe5, - 0x89, 0x5e, 0x89, 0x09, 0xf8, 0xb6, 0x33, 0x1b, 0x9f, 0x6d, 0x9a, 0xfd, 0x78, 0xfc, 0x6f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x02, 0x23, 0xf6, 0x27, 0x40, 0x07, 0x00, 0x00, -} - -func (m *TcpProxy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpProxy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.StatPrefix) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(len(m.StatPrefix))) - i += copy(dAtA[i:], m.StatPrefix) - } - if m.ClusterSpecifier != nil { - nn1, err := m.ClusterSpecifier.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn1 - } - if m.DownstreamIdleTimeout != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.DownstreamIdleTimeout.Size())) - n2, err := m.DownstreamIdleTimeout.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.UpstreamIdleTimeout != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.UpstreamIdleTimeout.Size())) - n3, err := m.UpstreamIdleTimeout.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if len(m.AccessLog) > 0 { - for _, msg := range m.AccessLog { - dAtA[i] = 0x2a - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.DeprecatedV1 != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.DeprecatedV1.Size())) - n4, err := m.DeprecatedV1.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.MaxConnectAttempts != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.MaxConnectAttempts.Size())) - n5, err := m.MaxConnectAttempts.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.IdleTimeout != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout))) - n6, err := github_com_gogo_protobuf_types.StdDurationMarshalTo(*m.IdleTimeout, dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.MetadataMatch != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.MetadataMatch.Size())) - n7, err := m.MetadataMatch.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TcpProxy_Cluster) MarshalTo(dAtA []byte) (int, error) { - i := 0 - dAtA[i] = 0x12 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - return i, nil -} -func (m *TcpProxy_WeightedClusters) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.WeightedClusters != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.WeightedClusters.Size())) - n8, err := m.WeightedClusters.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *TcpProxy_DeprecatedV1) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpProxy_DeprecatedV1) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Routes) > 0 { - for _, msg := range m.Routes { - dAtA[i] = 0xa - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TcpProxy_DeprecatedV1_TCPRoute) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpProxy_DeprecatedV1_TCPRoute) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Cluster) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(len(m.Cluster))) - i += copy(dAtA[i:], m.Cluster) - } - if len(m.DestinationIpList) > 0 { - for _, msg := range m.DestinationIpList { - dAtA[i] = 0x12 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.DestinationPorts) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(len(m.DestinationPorts))) - i += copy(dAtA[i:], m.DestinationPorts) - } - if len(m.SourceIpList) > 0 { - for _, msg := range m.SourceIpList { - dAtA[i] = 0x22 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.SourcePorts) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(len(m.SourcePorts))) - i += copy(dAtA[i:], m.SourcePorts) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TcpProxy_WeightedCluster) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpProxy_WeightedCluster) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Clusters) > 0 { - for _, msg := range m.Clusters { - dAtA[i] = 0xa - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *TcpProxy_WeightedCluster_ClusterWeight) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TcpProxy_WeightedCluster_ClusterWeight) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Name) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - } - if m.Weight != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintTcpProxy(dAtA, i, uint64(m.Weight)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintTcpProxy(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *TcpProxy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.StatPrefix) - if l > 0 { - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.ClusterSpecifier != nil { - n += m.ClusterSpecifier.Size() - } - if m.DownstreamIdleTimeout != nil { - l = m.DownstreamIdleTimeout.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.UpstreamIdleTimeout != nil { - l = m.UpstreamIdleTimeout.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - if len(m.AccessLog) > 0 { - for _, e := range m.AccessLog { - l = e.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - } - if m.DeprecatedV1 != nil { - l = m.DeprecatedV1.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.MaxConnectAttempts != nil { - l = m.MaxConnectAttempts.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.IdleTimeout != nil { - l = github_com_gogo_protobuf_types.SizeOfStdDuration(*m.IdleTimeout) - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.MetadataMatch != nil { - l = m.MetadataMatch.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TcpProxy_Cluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cluster) - n += 1 + l + sovTcpProxy(uint64(l)) - return n -} -func (m *TcpProxy_WeightedClusters) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.WeightedClusters != nil { - l = m.WeightedClusters.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - return n -} -func (m *TcpProxy_DeprecatedV1) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TcpProxy_DeprecatedV1_TCPRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cluster) - if l > 0 { - n += 1 + l + sovTcpProxy(uint64(l)) - } - if len(m.DestinationIpList) > 0 { - for _, e := range m.DestinationIpList { - l = e.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - } - l = len(m.DestinationPorts) - if l > 0 { - n += 1 + l + sovTcpProxy(uint64(l)) - } - if len(m.SourceIpList) > 0 { - for _, e := range m.SourceIpList { - l = e.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - } - l = len(m.SourcePorts) - if l > 0 { - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TcpProxy_WeightedCluster) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Clusters) > 0 { - for _, e := range m.Clusters { - l = e.Size() - n += 1 + l + sovTcpProxy(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TcpProxy_WeightedCluster_ClusterWeight) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovTcpProxy(uint64(l)) - } - if m.Weight != 0 { - n += 1 + sovTcpProxy(uint64(m.Weight)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovTcpProxy(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozTcpProxy(x uint64) (n int) { - return sovTcpProxy(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *TcpProxy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TcpProxy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TcpProxy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StatPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StatPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterSpecifier = &TcpProxy_Cluster{string(dAtA[iNdEx:postIndex])} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DownstreamIdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DownstreamIdleTimeout == nil { - m.DownstreamIdleTimeout = &types.Duration{} - } - if err := m.DownstreamIdleTimeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpstreamIdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.UpstreamIdleTimeout == nil { - m.UpstreamIdleTimeout = &types.Duration{} - } - if err := m.UpstreamIdleTimeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessLog", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AccessLog = append(m.AccessLog, &v2.AccessLog{}) - if err := m.AccessLog[len(m.AccessLog)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedV1", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.DeprecatedV1 == nil { - m.DeprecatedV1 = &TcpProxy_DeprecatedV1{} - } - if err := m.DeprecatedV1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxConnectAttempts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MaxConnectAttempts == nil { - m.MaxConnectAttempts = &types.UInt32Value{} - } - if err := m.MaxConnectAttempts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IdleTimeout", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.IdleTimeout == nil { - m.IdleTimeout = new(time.Duration) - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(m.IdleTimeout, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetadataMatch", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MetadataMatch == nil { - m.MetadataMatch = &core.Metadata{} - } - if err := m.MetadataMatch.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WeightedClusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &TcpProxy_WeightedCluster{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.ClusterSpecifier = &TcpProxy_WeightedClusters{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTcpProxy(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } +func (m *TcpProxy_TunnelingConfig) Reset() { *m = TcpProxy_TunnelingConfig{} } +func (m *TcpProxy_TunnelingConfig) String() string { return proto.CompactTextString(m) } +func (*TcpProxy_TunnelingConfig) ProtoMessage() {} +func (*TcpProxy_TunnelingConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_1f6b35dbcbad27ba, []int{0, 2} +} - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func (m *TcpProxy_TunnelingConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TcpProxy_TunnelingConfig.Unmarshal(m, b) +} +func (m *TcpProxy_TunnelingConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TcpProxy_TunnelingConfig.Marshal(b, m, deterministic) +} +func (m *TcpProxy_TunnelingConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_TcpProxy_TunnelingConfig.Merge(m, src) +} +func (m *TcpProxy_TunnelingConfig) XXX_Size() int { + return xxx_messageInfo_TcpProxy_TunnelingConfig.Size(m) +} +func (m *TcpProxy_TunnelingConfig) XXX_DiscardUnknown() { + xxx_messageInfo_TcpProxy_TunnelingConfig.DiscardUnknown(m) } -func (m *TcpProxy_DeprecatedV1) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeprecatedV1: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeprecatedV1: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Routes = append(m.Routes, &TcpProxy_DeprecatedV1_TCPRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTcpProxy(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF +var xxx_messageInfo_TcpProxy_TunnelingConfig proto.InternalMessageInfo + +func (m *TcpProxy_TunnelingConfig) GetHostname() string { + if m != nil { + return m.Hostname } - return nil + return "" } -func (m *TcpProxy_DeprecatedV1_TCPRoute) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TCPRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TCPRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cluster = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DestinationIpList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DestinationIpList = append(m.DestinationIpList, &core.CidrRange{}) - if err := m.DestinationIpList[len(m.DestinationIpList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DestinationPorts", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DestinationPorts = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceIpList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourceIpList = append(m.SourceIpList, &core.CidrRange{}) - if err := m.SourceIpList[len(m.SourceIpList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourcePorts", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourcePorts = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTcpProxy(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func init() { + proto.RegisterType((*TcpProxy)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy") + proto.RegisterType((*TcpProxy_DeprecatedV1)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.DeprecatedV1") + proto.RegisterType((*TcpProxy_DeprecatedV1_TCPRoute)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.DeprecatedV1.TCPRoute") + proto.RegisterType((*TcpProxy_WeightedCluster)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.WeightedCluster") + proto.RegisterType((*TcpProxy_WeightedCluster_ClusterWeight)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.WeightedCluster.ClusterWeight") + proto.RegisterType((*TcpProxy_TunnelingConfig)(nil), "envoy.config.filter.network.tcp_proxy.v2.TcpProxy.TunnelingConfig") } -func (m *TcpProxy_WeightedCluster) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: WeightedCluster: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: WeightedCluster: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Clusters = append(m.Clusters, &TcpProxy_WeightedCluster_ClusterWeight{}) - if err := m.Clusters[len(m.Clusters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTcpProxy(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +func init() { + proto.RegisterFile("envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto", fileDescriptor_1f6b35dbcbad27ba) } -func (m *TcpProxy_WeightedCluster_ClusterWeight) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ClusterWeight: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterWeight: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTcpProxy - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTcpProxy - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) - } - m.Weight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Weight |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTcpProxy(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTcpProxy - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil +var fileDescriptor_1f6b35dbcbad27ba = []byte{ + // 929 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x41, 0x73, 0xdb, 0x44, + 0x14, 0xae, 0x94, 0xc4, 0x71, 0xd6, 0x36, 0x71, 0xb6, 0x94, 0x0a, 0x37, 0xb4, 0x29, 0x5c, 0x3c, + 0x74, 0x90, 0xa8, 0x33, 0xd3, 0x61, 0x18, 0x66, 0x98, 0xc8, 0x3d, 0x24, 0x4c, 0x32, 0x63, 0x34, + 0xa1, 0x3d, 0x6a, 0x36, 0xd2, 0x5a, 0x5e, 0x90, 0xb4, 0xcb, 0xee, 0xca, 0x76, 0x6e, 0x9c, 0xb8, + 0x16, 0x38, 0x71, 0xe1, 0x27, 0xf0, 0x07, 0xf8, 0x05, 0x5c, 0xf9, 0x2b, 0x9c, 0x98, 0x1e, 0x18, + 0x46, 0xbb, 0x2b, 0x5b, 0x4e, 0xcc, 0x34, 0x6d, 0x4f, 0xd6, 0xbe, 0xf7, 0xbe, 0xef, 0xbd, 0x7d, + 0xdf, 0xbe, 0x67, 0xf0, 0x19, 0xce, 0xa7, 0xf4, 0xd2, 0x8b, 0x68, 0x3e, 0x26, 0x89, 0x37, 0x26, + 0xa9, 0xc4, 0xdc, 0xcb, 0xb1, 0x9c, 0x51, 0xfe, 0x9d, 0x27, 0x23, 0x16, 0x32, 0x4e, 0xe7, 0x97, + 0xde, 0x74, 0xb0, 0x3c, 0xb8, 0x8c, 0x53, 0x49, 0x61, 0x5f, 0x21, 0x5d, 0x8d, 0x74, 0x35, 0xd2, + 0x35, 0x48, 0x77, 0x19, 0x3c, 0x1d, 0xf4, 0x1e, 0xe8, 0x1c, 0x88, 0x91, 0x92, 0x27, 0xa2, 0x1c, + 0x7b, 0x28, 0x8e, 0x39, 0x16, 0x42, 0x53, 0xf5, 0xf6, 0xaf, 0x07, 0x5c, 0x20, 0x81, 0x8d, 0xf7, + 0xd3, 0x75, 0x25, 0xa2, 0x28, 0xc2, 0x42, 0xa4, 0x34, 0x29, 0x11, 0x8b, 0xc3, 0x2a, 0x9f, 0xbc, + 0x64, 0xd8, 0x9b, 0x20, 0x31, 0x09, 0x19, 0x4d, 0x49, 0x64, 0x0a, 0xef, 0xdd, 0x4f, 0x28, 0x4d, + 0x52, 0xec, 0xa9, 0xd3, 0x45, 0x31, 0xf6, 0xe2, 0x82, 0x23, 0x49, 0x68, 0xfe, 0x7f, 0xfe, 0x19, + 0x47, 0x8c, 0x61, 0x5e, 0x55, 0x7b, 0xbf, 0x88, 0x19, 0xf2, 0x50, 0x9e, 0x53, 0xa9, 0x60, 0xc2, + 0xcb, 0x48, 0xc2, 0x91, 0xac, 0xea, 0xfd, 0xe0, 0x9a, 0x5f, 0x48, 0x24, 0x8b, 0x0a, 0x7e, 0x77, + 0x8a, 0x52, 0x12, 0x23, 0x89, 0xbd, 0xea, 0x43, 0x3b, 0x3e, 0xfc, 0xbd, 0x03, 0x9a, 0xe7, 0x11, + 0x1b, 0x95, 0x6d, 0x83, 0x7d, 0xd0, 0x2a, 0x51, 0x21, 0xe3, 0x78, 0x4c, 0xe6, 0x8e, 0x75, 0x60, + 0xf5, 0x77, 0xfc, 0xed, 0x97, 0xfe, 0x26, 0xb7, 0x0f, 0xac, 0x00, 0x94, 0xbe, 0x91, 0x72, 0xc1, + 0x1e, 0xd8, 0x8e, 0xd2, 0x42, 0x48, 0xcc, 0x1d, 0xbb, 0x8c, 0x3a, 0xbe, 0x15, 0x54, 0x06, 0xf8, + 0x3d, 0xd8, 0x9b, 0x61, 0x92, 0x4c, 0x24, 0x8e, 0x43, 0x63, 0x13, 0x0e, 0x38, 0xb0, 0xfa, 0xad, + 0x81, 0xef, 0xde, 0x54, 0x3f, 0xb7, 0x2a, 0xca, 0x7d, 0x6e, 0xb8, 0x86, 0x9a, 0xea, 0xf8, 0x56, + 0xd0, 0x9d, 0xad, 0x9a, 0x04, 0xf4, 0xc1, 0x3b, 0x19, 0x96, 0x28, 0x46, 0x12, 0x85, 0x19, 0x92, + 0xd1, 0xc4, 0xd9, 0x51, 0xf9, 0xee, 0x99, 0x7c, 0x88, 0x91, 0x92, 0xb3, 0x14, 0xd9, 0x3d, 0x33, + 0x81, 0x41, 0xa7, 0x82, 0x9c, 0x95, 0x08, 0xf8, 0x05, 0x68, 0x93, 0x38, 0xc5, 0xa1, 0x24, 0x19, + 0xa6, 0x85, 0x74, 0x9a, 0x8a, 0xe1, 0x7d, 0x57, 0x0b, 0xe3, 0x56, 0xc2, 0xb8, 0x4f, 0x8d, 0x70, + 0x41, 0xab, 0x0c, 0x3f, 0xd7, 0xd1, 0xf0, 0x6b, 0x70, 0x37, 0xa6, 0xb3, 0x5c, 0x48, 0x8e, 0x51, + 0x16, 0xae, 0x10, 0x6d, 0xbc, 0x8a, 0xe8, 0xce, 0x12, 0x79, 0x52, 0xa3, 0x3c, 0x03, 0x77, 0x0a, + 0xb6, 0x8e, 0x70, 0xf3, 0x55, 0x84, 0xb7, 0x2b, 0x5c, 0x9d, 0xee, 0x2b, 0x00, 0xf4, 0x93, 0x0d, + 0x53, 0x9a, 0x38, 0x5b, 0x07, 0x1b, 0xfd, 0xd6, 0xe0, 0xd1, 0x5a, 0x3d, 0x96, 0x2f, 0x7b, 0x3a, + 0x70, 0x8f, 0xd4, 0xe1, 0x94, 0x26, 0xc1, 0x0e, 0xaa, 0x3e, 0xe1, 0x04, 0x74, 0x62, 0xcc, 0x38, + 0x8e, 0x50, 0x29, 0xf2, 0xf4, 0xb1, 0xd3, 0x50, 0x25, 0x7d, 0xf9, 0x06, 0xf2, 0x3e, 0x5d, 0xf0, + 0x3c, 0x7b, 0xec, 0xdb, 0x8e, 0x15, 0xb4, 0xe3, 0x9a, 0x05, 0x3e, 0x07, 0xef, 0x66, 0x68, 0x1e, + 0x46, 0x34, 0xcf, 0x71, 0x24, 0x43, 0x24, 0x25, 0xce, 0x98, 0x14, 0xce, 0xb6, 0x4a, 0xb8, 0x7f, + 0xad, 0x07, 0xdf, 0x9c, 0xe4, 0xf2, 0x70, 0xf0, 0x0c, 0xa5, 0x05, 0x56, 0x2f, 0xf7, 0x63, 0xbb, + 0x6f, 0x05, 0x30, 0x43, 0xf3, 0xa1, 0x66, 0x38, 0x32, 0x04, 0xf0, 0x08, 0xb4, 0x6a, 0x53, 0xea, + 0xb4, 0x54, 0x3f, 0xde, 0x33, 0x17, 0x28, 0x87, 0xd8, 0x3d, 0x46, 0x62, 0x32, 0x52, 0x5e, 0xbf, + 0xf9, 0xd2, 0xdf, 0xfa, 0xc5, 0xb2, 0xbb, 0x56, 0x00, 0x26, 0x0b, 0x2b, 0xcc, 0x40, 0x57, 0x16, + 0x79, 0x8e, 0x53, 0x92, 0x27, 0xa1, 0xbe, 0xb3, 0xd3, 0x7e, 0xe3, 0x77, 0x7e, 0x5e, 0x51, 0x0d, + 0x15, 0x28, 0xd8, 0x95, 0xab, 0x86, 0xde, 0x4f, 0x1b, 0xa0, 0x5d, 0xef, 0x16, 0xfc, 0x16, 0x34, + 0x38, 0x2d, 0x24, 0x16, 0x8e, 0xa5, 0xaa, 0x3f, 0x7e, 0xcb, 0xf6, 0xbb, 0xe7, 0xc3, 0x51, 0x50, + 0x12, 0x56, 0xf7, 0x6d, 0x5a, 0x81, 0xc9, 0xd0, 0x7b, 0x61, 0x83, 0x66, 0xe5, 0x86, 0x0f, 0x97, + 0xd3, 0x7f, 0x65, 0x47, 0x2c, 0x96, 0xc0, 0x29, 0xb8, 0x1d, 0x63, 0x21, 0x49, 0xae, 0x5e, 0x64, + 0x48, 0x58, 0x98, 0x12, 0x21, 0x1d, 0x5b, 0x15, 0xba, 0xbf, 0x66, 0x2c, 0x87, 0x24, 0xe6, 0x01, + 0xca, 0x13, 0x1c, 0xec, 0xd5, 0x80, 0x27, 0xec, 0x94, 0x08, 0x09, 0x1f, 0x81, 0xba, 0x31, 0x64, + 0x94, 0x4b, 0xa1, 0xe6, 0x6a, 0x27, 0xe8, 0xd6, 0x1c, 0xa3, 0xd2, 0x5e, 0x2e, 0x03, 0x41, 0x0b, + 0x1e, 0xe1, 0x45, 0xd6, 0xcd, 0x1b, 0x64, 0x6d, 0x6b, 0x8c, 0x49, 0xf8, 0x10, 0x98, 0xb3, 0xc9, + 0xb5, 0xa5, 0x72, 0xb5, 0xb4, 0x4d, 0xa5, 0xf9, 0xdc, 0x76, 0xac, 0xde, 0x6f, 0x36, 0xd8, 0xbd, + 0xb2, 0x9f, 0xe0, 0x14, 0x34, 0x17, 0x5b, 0x4f, 0xeb, 0x32, 0x7a, 0xfb, 0xad, 0xe7, 0x9a, 0x5f, + 0x6d, 0xae, 0xe9, 0xb3, 0xc8, 0xd5, 0xfb, 0xd9, 0x02, 0x9d, 0x95, 0x28, 0x78, 0x0f, 0x6c, 0xe6, + 0x28, 0xc3, 0x57, 0x35, 0x52, 0x46, 0xf8, 0x00, 0x34, 0xf4, 0x1a, 0x55, 0x0b, 0xbc, 0xb3, 0x1c, + 0x16, 0x63, 0x5e, 0xb3, 0x53, 0x37, 0x5e, 0x77, 0xa7, 0xf6, 0x9e, 0x80, 0xdd, 0x2b, 0xcf, 0x1a, + 0x7e, 0x04, 0x9a, 0x13, 0x2a, 0xe4, 0xba, 0xc2, 0x16, 0x0e, 0xdf, 0x01, 0x7b, 0xe6, 0x5e, 0xa1, + 0x60, 0x38, 0x22, 0x63, 0x82, 0x39, 0xdc, 0xf8, 0xc7, 0xb7, 0xfc, 0x1f, 0xad, 0xbf, 0x7f, 0xfd, + 0xf7, 0xc5, 0x96, 0x07, 0x3f, 0xd1, 0x55, 0xe0, 0xb9, 0xc4, 0xb9, 0x28, 0xff, 0xf0, 0x4c, 0x5f, + 0xc5, 0xba, 0xc6, 0x1e, 0xfe, 0xf1, 0xc3, 0x9f, 0x7f, 0x35, 0xec, 0xae, 0x05, 0x9e, 0x10, 0xaa, + 0xeb, 0xd7, 0x9e, 0x9b, 0x0a, 0xe3, 0x77, 0x2a, 0x65, 0x46, 0xe5, 0xa6, 0x19, 0x59, 0x17, 0x0d, + 0xb5, 0x72, 0x0e, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x09, 0x51, 0xfd, 0xc8, 0xcc, 0x08, 0x00, + 0x00, } -func skipTcpProxy(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthTcpProxy - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthTcpProxy - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTcpProxy - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipTcpProxy(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthTcpProxy - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthTcpProxy = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTcpProxy = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/config/filter/network/tcp_proxy/v2/tcp_proxy.proto -package v2 +package envoy_config_filter_network_tcp_proxy_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _tcp_proxy_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on TcpProxy with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *TcpProxy) Validate() error { @@ -47,109 +50,112 @@ } } - { - tmp := m.GetMetadataMatch() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxyValidationError{ - field: "MetadataMatch", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetMetadataMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxyValidationError{ + field: "MetadataMatch", + reason: "embedded message failed validation", + cause: err, } } } - if d := m.GetIdleTimeout(); d != nil { - dur := *d - - gt := time.Duration(0*time.Second + 0*time.Nanosecond) - - if dur <= gt { + if v, ok := interface{}(m.GetIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { return TcpProxyValidationError{ field: "IdleTimeout", - reason: "value must be greater than 0s", + reason: "embedded message failed validation", + cause: err, } } - } - { - tmp := m.GetDownstreamIdleTimeout() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxyValidationError{ - field: "DownstreamIdleTimeout", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDownstreamIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxyValidationError{ + field: "DownstreamIdleTimeout", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetUpstreamIdleTimeout() + if v, ok := interface{}(m.GetUpstreamIdleTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxyValidationError{ + field: "UpstreamIdleTimeout", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetAccessLog() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return TcpProxyValidationError{ - field: "UpstreamIdleTimeout", + field: fmt.Sprintf("AccessLog[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - } - for idx, item := range m.GetAccessLog() { - _, _ = idx, item + } - { - tmp := item + if v, ok := interface{}(m.GetDeprecatedV1()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxyValidationError{ + field: "DeprecatedV1", + reason: "embedded message failed validation", + cause: err, + } + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + if wrapper := m.GetMaxConnectAttempts(); wrapper != nil { - if err := v.Validate(); err != nil { - return TcpProxyValidationError{ - field: fmt.Sprintf("AccessLog[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } - } + if wrapper.GetValue() < 1 { + return TcpProxyValidationError{ + field: "MaxConnectAttempts", + reason: "value must be greater than or equal to 1", } } } - { - tmp := m.GetDeprecatedV1() + if len(m.GetHashPolicy()) > 1 { + return TcpProxyValidationError{ + field: "HashPolicy", + reason: "value must contain no more than 1 item(s)", + } + } - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { + for idx, item := range m.GetHashPolicy() { + _, _ = idx, item + if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return TcpProxyValidationError{ - field: "DeprecatedV1", + field: fmt.Sprintf("HashPolicy[%v]", idx), reason: "embedded message failed validation", cause: err, } } } - } - if wrapper := m.GetMaxConnectAttempts(); wrapper != nil { + } - if wrapper.GetValue() < 1 { + if v, ok := interface{}(m.GetTunnelingConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { return TcpProxyValidationError{ - field: "MaxConnectAttempts", - reason: "value must be greater than or equal to 1", + field: "TunnelingConfig", + reason: "embedded message failed validation", + cause: err, } } - } switch m.ClusterSpecifier.(type) { @@ -159,17 +165,12 @@ case *TcpProxy_WeightedClusters: - { - tmp := m.GetWeightedClusters() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxyValidationError{ - field: "WeightedClusters", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetWeightedClusters()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxyValidationError{ + field: "WeightedClusters", + reason: "embedded message failed validation", + cause: err, } } } @@ -257,17 +258,12 @@ for idx, item := range m.GetRoutes() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxy_DeprecatedV1ValidationError{ - field: fmt.Sprintf("Routes[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxy_DeprecatedV1ValidationError{ + field: fmt.Sprintf("Routes[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -351,17 +347,12 @@ for idx, item := range m.GetClusters() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxy_WeightedClusterValidationError{ - field: fmt.Sprintf("Clusters[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxy_WeightedClusterValidationError{ + field: fmt.Sprintf("Clusters[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -427,6 +418,80 @@ ErrorName() string } = TcpProxy_WeightedClusterValidationError{} +// Validate checks the field values on TcpProxy_TunnelingConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *TcpProxy_TunnelingConfig) Validate() error { + if m == nil { + return nil + } + + if len(m.GetHostname()) < 1 { + return TcpProxy_TunnelingConfigValidationError{ + field: "Hostname", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// TcpProxy_TunnelingConfigValidationError is the validation error returned by +// TcpProxy_TunnelingConfig.Validate if the designated constraints aren't met. +type TcpProxy_TunnelingConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TcpProxy_TunnelingConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TcpProxy_TunnelingConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TcpProxy_TunnelingConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TcpProxy_TunnelingConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TcpProxy_TunnelingConfigValidationError) ErrorName() string { + return "TcpProxy_TunnelingConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e TcpProxy_TunnelingConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTcpProxy_TunnelingConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TcpProxy_TunnelingConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TcpProxy_TunnelingConfigValidationError{} + // Validate checks the field values on TcpProxy_DeprecatedV1_TCPRoute with the // rules defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -445,17 +510,12 @@ for idx, item := range m.GetDestinationIpList() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxy_DeprecatedV1_TCPRouteValidationError{ - field: fmt.Sprintf("DestinationIpList[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxy_DeprecatedV1_TCPRouteValidationError{ + field: fmt.Sprintf("DestinationIpList[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -467,17 +527,12 @@ for idx, item := range m.GetSourceIpList() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return TcpProxy_DeprecatedV1_TCPRouteValidationError{ - field: fmt.Sprintf("SourceIpList[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxy_DeprecatedV1_TCPRouteValidationError{ + field: fmt.Sprintf("SourceIpList[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -568,6 +623,16 @@ } } + if v, ok := interface{}(m.GetMetadataMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TcpProxy_WeightedCluster_ClusterWeightValidationError{ + field: "MetadataMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,88 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/config/listener/v2/api_listener.proto + +package envoy_config_listener_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ApiListener struct { + ApiListener *any.Any `protobuf:"bytes,1,opt,name=api_listener,json=apiListener,proto3" json:"api_listener,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ApiListener) Reset() { *m = ApiListener{} } +func (m *ApiListener) String() string { return proto.CompactTextString(m) } +func (*ApiListener) ProtoMessage() {} +func (*ApiListener) Descriptor() ([]byte, []int) { + return fileDescriptor_c474ffebb332e36e, []int{0} +} + +func (m *ApiListener) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ApiListener.Unmarshal(m, b) +} +func (m *ApiListener) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ApiListener.Marshal(b, m, deterministic) +} +func (m *ApiListener) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApiListener.Merge(m, src) +} +func (m *ApiListener) XXX_Size() int { + return xxx_messageInfo_ApiListener.Size(m) +} +func (m *ApiListener) XXX_DiscardUnknown() { + xxx_messageInfo_ApiListener.DiscardUnknown(m) +} + +var xxx_messageInfo_ApiListener proto.InternalMessageInfo + +func (m *ApiListener) GetApiListener() *any.Any { + if m != nil { + return m.ApiListener + } + return nil +} + +func init() { + proto.RegisterType((*ApiListener)(nil), "envoy.config.listener.v2.ApiListener") +} + +func init() { + proto.RegisterFile("envoy/config/listener/v2/api_listener.proto", fileDescriptor_c474ffebb332e36e) +} + +var fileDescriptor_c474ffebb332e36e = []byte{ + // 224 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4e, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0xcf, 0xc9, 0x2c, 0x2e, 0x49, 0xcd, 0x4b, + 0x2d, 0xd2, 0x2f, 0x33, 0xd2, 0x4f, 0x2c, 0xc8, 0x8c, 0x87, 0xf1, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, + 0xf2, 0x85, 0x24, 0xc0, 0x8a, 0xf5, 0x20, 0x8a, 0xf5, 0xe0, 0x92, 0x65, 0x46, 0x52, 0x92, 0xe9, + 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x60, 0x75, 0x49, 0xa5, 0x69, 0xfa, 0x89, 0x79, 0x95, 0x10, + 0x4d, 0x52, 0x72, 0xa5, 0x29, 0x05, 0x89, 0xfa, 0x89, 0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, + 0xf9, 0x79, 0xc5, 0xfa, 0xb9, 0x99, 0xe9, 0x45, 0x89, 0x25, 0xa9, 0x50, 0x79, 0x59, 0x0c, 0xf9, + 0xe2, 0x92, 0xc4, 0x92, 0xd2, 0x62, 0x88, 0xb4, 0x92, 0x1b, 0x17, 0xb7, 0x63, 0x41, 0xa6, 0x0f, + 0xd4, 0x2e, 0x21, 0x73, 0x2e, 0x1e, 0x64, 0x87, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0x89, + 0xe8, 0x41, 0xec, 0xd7, 0x83, 0xd9, 0xaf, 0xe7, 0x98, 0x57, 0x19, 0xc4, 0x9d, 0x88, 0xd0, 0xe8, + 0x94, 0xf2, 0x69, 0xc6, 0xbf, 0x7e, 0x56, 0x29, 0x9c, 0x7e, 0x30, 0xde, 0xd5, 0x70, 0xe2, 0x22, + 0x1b, 0x93, 0x00, 0x23, 0x97, 0x5a, 0x66, 0xbe, 0x1e, 0x58, 0x51, 0x41, 0x51, 0x7e, 0x45, 0xa5, + 0x1e, 0x2e, 0x3f, 0x3b, 0x09, 0x20, 0xb9, 0x2b, 0x00, 0x64, 0x6f, 0x00, 0x63, 0x12, 0x1b, 0xd8, + 0x01, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x64, 0x61, 0xf2, 0x79, 0x57, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/listener/v2/api_listener.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,112 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/config/listener/v2/api_listener.proto + +package envoy_config_listener_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _api_listener_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on ApiListener with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ApiListener) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetApiListener()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ApiListenerValidationError{ + field: "ApiListener", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ApiListenerValidationError is the validation error returned by +// ApiListener.Validate if the designated constraints aren't met. +type ApiListenerValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ApiListenerValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ApiListenerValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ApiListenerValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ApiListenerValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ApiListenerValidationError) ErrorName() string { return "ApiListenerValidationError" } + +// Error satisfies the builtin error interface +func (e ApiListenerValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sApiListener.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ApiListenerValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ApiListenerValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,741 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/config/trace/v2/trace.proto + +package envoy_config_trace_v2 + +import ( + fmt "fmt" + v1 "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + _struct "github.com/golang/protobuf/ptypes/struct" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type LightstepConfig_PropagationMode int32 + +const ( + LightstepConfig_ENVOY LightstepConfig_PropagationMode = 0 + LightstepConfig_LIGHTSTEP LightstepConfig_PropagationMode = 1 + LightstepConfig_B3 LightstepConfig_PropagationMode = 2 + LightstepConfig_TRACE_CONTEXT LightstepConfig_PropagationMode = 3 +) + +var LightstepConfig_PropagationMode_name = map[int32]string{ + 0: "ENVOY", + 1: "LIGHTSTEP", + 2: "B3", + 3: "TRACE_CONTEXT", +} + +var LightstepConfig_PropagationMode_value = map[string]int32{ + "ENVOY": 0, + "LIGHTSTEP": 1, + "B3": 2, + "TRACE_CONTEXT": 3, +} + +func (x LightstepConfig_PropagationMode) String() string { + return proto.EnumName(LightstepConfig_PropagationMode_name, int32(x)) +} + +func (LightstepConfig_PropagationMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{1, 0} +} + +type ZipkinConfig_CollectorEndpointVersion int32 + +const ( + ZipkinConfig_HTTP_JSON_V1 ZipkinConfig_CollectorEndpointVersion = 0 // Deprecated: Do not use. + ZipkinConfig_HTTP_JSON ZipkinConfig_CollectorEndpointVersion = 1 + ZipkinConfig_HTTP_PROTO ZipkinConfig_CollectorEndpointVersion = 2 + ZipkinConfig_GRPC ZipkinConfig_CollectorEndpointVersion = 3 +) + +var ZipkinConfig_CollectorEndpointVersion_name = map[int32]string{ + 0: "HTTP_JSON_V1", + 1: "HTTP_JSON", + 2: "HTTP_PROTO", + 3: "GRPC", +} + +var ZipkinConfig_CollectorEndpointVersion_value = map[string]int32{ + "HTTP_JSON_V1": 0, + "HTTP_JSON": 1, + "HTTP_PROTO": 2, + "GRPC": 3, +} + +func (x ZipkinConfig_CollectorEndpointVersion) String() string { + return proto.EnumName(ZipkinConfig_CollectorEndpointVersion_name, int32(x)) +} + +func (ZipkinConfig_CollectorEndpointVersion) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{2, 0} +} + +type OpenCensusConfig_TraceContext int32 + +const ( + OpenCensusConfig_NONE OpenCensusConfig_TraceContext = 0 + OpenCensusConfig_TRACE_CONTEXT OpenCensusConfig_TraceContext = 1 + OpenCensusConfig_GRPC_TRACE_BIN OpenCensusConfig_TraceContext = 2 + OpenCensusConfig_CLOUD_TRACE_CONTEXT OpenCensusConfig_TraceContext = 3 + OpenCensusConfig_B3 OpenCensusConfig_TraceContext = 4 +) + +var OpenCensusConfig_TraceContext_name = map[int32]string{ + 0: "NONE", + 1: "TRACE_CONTEXT", + 2: "GRPC_TRACE_BIN", + 3: "CLOUD_TRACE_CONTEXT", + 4: "B3", +} + +var OpenCensusConfig_TraceContext_value = map[string]int32{ + "NONE": 0, + "TRACE_CONTEXT": 1, + "GRPC_TRACE_BIN": 2, + "CLOUD_TRACE_CONTEXT": 3, + "B3": 4, +} + +func (x OpenCensusConfig_TraceContext) String() string { + return proto.EnumName(OpenCensusConfig_TraceContext_name, int32(x)) +} + +func (OpenCensusConfig_TraceContext) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{5, 0} +} + +type Tracing struct { + Http *Tracing_Http `protobuf:"bytes,1,opt,name=http,proto3" json:"http,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Tracing) Reset() { *m = Tracing{} } +func (m *Tracing) String() string { return proto.CompactTextString(m) } +func (*Tracing) ProtoMessage() {} +func (*Tracing) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{0} +} + +func (m *Tracing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Tracing.Unmarshal(m, b) +} +func (m *Tracing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Tracing.Marshal(b, m, deterministic) +} +func (m *Tracing) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tracing.Merge(m, src) +} +func (m *Tracing) XXX_Size() int { + return xxx_messageInfo_Tracing.Size(m) +} +func (m *Tracing) XXX_DiscardUnknown() { + xxx_messageInfo_Tracing.DiscardUnknown(m) +} + +var xxx_messageInfo_Tracing proto.InternalMessageInfo + +func (m *Tracing) GetHttp() *Tracing_Http { + if m != nil { + return m.Http + } + return nil +} + +type Tracing_Http struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to ConfigType: + // *Tracing_Http_Config + // *Tracing_Http_TypedConfig + ConfigType isTracing_Http_ConfigType `protobuf_oneof:"config_type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Tracing_Http) Reset() { *m = Tracing_Http{} } +func (m *Tracing_Http) String() string { return proto.CompactTextString(m) } +func (*Tracing_Http) ProtoMessage() {} +func (*Tracing_Http) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{0, 0} +} + +func (m *Tracing_Http) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Tracing_Http.Unmarshal(m, b) +} +func (m *Tracing_Http) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Tracing_Http.Marshal(b, m, deterministic) +} +func (m *Tracing_Http) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tracing_Http.Merge(m, src) +} +func (m *Tracing_Http) XXX_Size() int { + return xxx_messageInfo_Tracing_Http.Size(m) +} +func (m *Tracing_Http) XXX_DiscardUnknown() { + xxx_messageInfo_Tracing_Http.DiscardUnknown(m) +} + +var xxx_messageInfo_Tracing_Http proto.InternalMessageInfo + +func (m *Tracing_Http) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type isTracing_Http_ConfigType interface { + isTracing_Http_ConfigType() +} + +type Tracing_Http_Config struct { + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3,oneof"` +} + +type Tracing_Http_TypedConfig struct { + TypedConfig *any.Any `protobuf:"bytes,3,opt,name=typed_config,json=typedConfig,proto3,oneof"` +} + +func (*Tracing_Http_Config) isTracing_Http_ConfigType() {} + +func (*Tracing_Http_TypedConfig) isTracing_Http_ConfigType() {} + +func (m *Tracing_Http) GetConfigType() isTracing_Http_ConfigType { + if m != nil { + return m.ConfigType + } + return nil +} + +// Deprecated: Do not use. +func (m *Tracing_Http) GetConfig() *_struct.Struct { + if x, ok := m.GetConfigType().(*Tracing_Http_Config); ok { + return x.Config + } + return nil +} + +func (m *Tracing_Http) GetTypedConfig() *any.Any { + if x, ok := m.GetConfigType().(*Tracing_Http_TypedConfig); ok { + return x.TypedConfig + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Tracing_Http) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Tracing_Http_Config)(nil), + (*Tracing_Http_TypedConfig)(nil), + } +} + +type LightstepConfig struct { + CollectorCluster string `protobuf:"bytes,1,opt,name=collector_cluster,json=collectorCluster,proto3" json:"collector_cluster,omitempty"` + AccessTokenFile string `protobuf:"bytes,2,opt,name=access_token_file,json=accessTokenFile,proto3" json:"access_token_file,omitempty"` + PropagationModes []LightstepConfig_PropagationMode `protobuf:"varint,3,rep,packed,name=propagation_modes,json=propagationModes,proto3,enum=envoy.config.trace.v2.LightstepConfig_PropagationMode" json:"propagation_modes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LightstepConfig) Reset() { *m = LightstepConfig{} } +func (m *LightstepConfig) String() string { return proto.CompactTextString(m) } +func (*LightstepConfig) ProtoMessage() {} +func (*LightstepConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{1} +} + +func (m *LightstepConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LightstepConfig.Unmarshal(m, b) +} +func (m *LightstepConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LightstepConfig.Marshal(b, m, deterministic) +} +func (m *LightstepConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_LightstepConfig.Merge(m, src) +} +func (m *LightstepConfig) XXX_Size() int { + return xxx_messageInfo_LightstepConfig.Size(m) +} +func (m *LightstepConfig) XXX_DiscardUnknown() { + xxx_messageInfo_LightstepConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_LightstepConfig proto.InternalMessageInfo + +func (m *LightstepConfig) GetCollectorCluster() string { + if m != nil { + return m.CollectorCluster + } + return "" +} + +func (m *LightstepConfig) GetAccessTokenFile() string { + if m != nil { + return m.AccessTokenFile + } + return "" +} + +func (m *LightstepConfig) GetPropagationModes() []LightstepConfig_PropagationMode { + if m != nil { + return m.PropagationModes + } + return nil +} + +type ZipkinConfig struct { + CollectorCluster string `protobuf:"bytes,1,opt,name=collector_cluster,json=collectorCluster,proto3" json:"collector_cluster,omitempty"` + CollectorEndpoint string `protobuf:"bytes,2,opt,name=collector_endpoint,json=collectorEndpoint,proto3" json:"collector_endpoint,omitempty"` + TraceId_128Bit bool `protobuf:"varint,3,opt,name=trace_id_128bit,json=traceId128bit,proto3" json:"trace_id_128bit,omitempty"` + SharedSpanContext *wrappers.BoolValue `protobuf:"bytes,4,opt,name=shared_span_context,json=sharedSpanContext,proto3" json:"shared_span_context,omitempty"` + CollectorEndpointVersion ZipkinConfig_CollectorEndpointVersion `protobuf:"varint,5,opt,name=collector_endpoint_version,json=collectorEndpointVersion,proto3,enum=envoy.config.trace.v2.ZipkinConfig_CollectorEndpointVersion" json:"collector_endpoint_version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ZipkinConfig) Reset() { *m = ZipkinConfig{} } +func (m *ZipkinConfig) String() string { return proto.CompactTextString(m) } +func (*ZipkinConfig) ProtoMessage() {} +func (*ZipkinConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{2} +} + +func (m *ZipkinConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ZipkinConfig.Unmarshal(m, b) +} +func (m *ZipkinConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ZipkinConfig.Marshal(b, m, deterministic) +} +func (m *ZipkinConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ZipkinConfig.Merge(m, src) +} +func (m *ZipkinConfig) XXX_Size() int { + return xxx_messageInfo_ZipkinConfig.Size(m) +} +func (m *ZipkinConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ZipkinConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_ZipkinConfig proto.InternalMessageInfo + +func (m *ZipkinConfig) GetCollectorCluster() string { + if m != nil { + return m.CollectorCluster + } + return "" +} + +func (m *ZipkinConfig) GetCollectorEndpoint() string { + if m != nil { + return m.CollectorEndpoint + } + return "" +} + +func (m *ZipkinConfig) GetTraceId_128Bit() bool { + if m != nil { + return m.TraceId_128Bit + } + return false +} + +func (m *ZipkinConfig) GetSharedSpanContext() *wrappers.BoolValue { + if m != nil { + return m.SharedSpanContext + } + return nil +} + +func (m *ZipkinConfig) GetCollectorEndpointVersion() ZipkinConfig_CollectorEndpointVersion { + if m != nil { + return m.CollectorEndpointVersion + } + return ZipkinConfig_HTTP_JSON_V1 +} + +type DynamicOtConfig struct { + Library string `protobuf:"bytes,1,opt,name=library,proto3" json:"library,omitempty"` + Config *_struct.Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DynamicOtConfig) Reset() { *m = DynamicOtConfig{} } +func (m *DynamicOtConfig) String() string { return proto.CompactTextString(m) } +func (*DynamicOtConfig) ProtoMessage() {} +func (*DynamicOtConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{3} +} + +func (m *DynamicOtConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DynamicOtConfig.Unmarshal(m, b) +} +func (m *DynamicOtConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DynamicOtConfig.Marshal(b, m, deterministic) +} +func (m *DynamicOtConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_DynamicOtConfig.Merge(m, src) +} +func (m *DynamicOtConfig) XXX_Size() int { + return xxx_messageInfo_DynamicOtConfig.Size(m) +} +func (m *DynamicOtConfig) XXX_DiscardUnknown() { + xxx_messageInfo_DynamicOtConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_DynamicOtConfig proto.InternalMessageInfo + +func (m *DynamicOtConfig) GetLibrary() string { + if m != nil { + return m.Library + } + return "" +} + +func (m *DynamicOtConfig) GetConfig() *_struct.Struct { + if m != nil { + return m.Config + } + return nil +} + +type DatadogConfig struct { + CollectorCluster string `protobuf:"bytes,1,opt,name=collector_cluster,json=collectorCluster,proto3" json:"collector_cluster,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DatadogConfig) Reset() { *m = DatadogConfig{} } +func (m *DatadogConfig) String() string { return proto.CompactTextString(m) } +func (*DatadogConfig) ProtoMessage() {} +func (*DatadogConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{4} +} + +func (m *DatadogConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DatadogConfig.Unmarshal(m, b) +} +func (m *DatadogConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DatadogConfig.Marshal(b, m, deterministic) +} +func (m *DatadogConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_DatadogConfig.Merge(m, src) +} +func (m *DatadogConfig) XXX_Size() int { + return xxx_messageInfo_DatadogConfig.Size(m) +} +func (m *DatadogConfig) XXX_DiscardUnknown() { + xxx_messageInfo_DatadogConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_DatadogConfig proto.InternalMessageInfo + +func (m *DatadogConfig) GetCollectorCluster() string { + if m != nil { + return m.CollectorCluster + } + return "" +} + +func (m *DatadogConfig) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +type OpenCensusConfig struct { + TraceConfig *v1.TraceConfig `protobuf:"bytes,1,opt,name=trace_config,json=traceConfig,proto3" json:"trace_config,omitempty"` + StdoutExporterEnabled bool `protobuf:"varint,2,opt,name=stdout_exporter_enabled,json=stdoutExporterEnabled,proto3" json:"stdout_exporter_enabled,omitempty"` + StackdriverExporterEnabled bool `protobuf:"varint,3,opt,name=stackdriver_exporter_enabled,json=stackdriverExporterEnabled,proto3" json:"stackdriver_exporter_enabled,omitempty"` + StackdriverProjectId string `protobuf:"bytes,4,opt,name=stackdriver_project_id,json=stackdriverProjectId,proto3" json:"stackdriver_project_id,omitempty"` + StackdriverAddress string `protobuf:"bytes,10,opt,name=stackdriver_address,json=stackdriverAddress,proto3" json:"stackdriver_address,omitempty"` + StackdriverGrpcService *core.GrpcService `protobuf:"bytes,13,opt,name=stackdriver_grpc_service,json=stackdriverGrpcService,proto3" json:"stackdriver_grpc_service,omitempty"` + ZipkinExporterEnabled bool `protobuf:"varint,5,opt,name=zipkin_exporter_enabled,json=zipkinExporterEnabled,proto3" json:"zipkin_exporter_enabled,omitempty"` + ZipkinUrl string `protobuf:"bytes,6,opt,name=zipkin_url,json=zipkinUrl,proto3" json:"zipkin_url,omitempty"` + OcagentExporterEnabled bool `protobuf:"varint,11,opt,name=ocagent_exporter_enabled,json=ocagentExporterEnabled,proto3" json:"ocagent_exporter_enabled,omitempty"` + OcagentAddress string `protobuf:"bytes,12,opt,name=ocagent_address,json=ocagentAddress,proto3" json:"ocagent_address,omitempty"` + OcagentGrpcService *core.GrpcService `protobuf:"bytes,14,opt,name=ocagent_grpc_service,json=ocagentGrpcService,proto3" json:"ocagent_grpc_service,omitempty"` + IncomingTraceContext []OpenCensusConfig_TraceContext `protobuf:"varint,8,rep,packed,name=incoming_trace_context,json=incomingTraceContext,proto3,enum=envoy.config.trace.v2.OpenCensusConfig_TraceContext" json:"incoming_trace_context,omitempty"` + OutgoingTraceContext []OpenCensusConfig_TraceContext `protobuf:"varint,9,rep,packed,name=outgoing_trace_context,json=outgoingTraceContext,proto3,enum=envoy.config.trace.v2.OpenCensusConfig_TraceContext" json:"outgoing_trace_context,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OpenCensusConfig) Reset() { *m = OpenCensusConfig{} } +func (m *OpenCensusConfig) String() string { return proto.CompactTextString(m) } +func (*OpenCensusConfig) ProtoMessage() {} +func (*OpenCensusConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{5} +} + +func (m *OpenCensusConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OpenCensusConfig.Unmarshal(m, b) +} +func (m *OpenCensusConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OpenCensusConfig.Marshal(b, m, deterministic) +} +func (m *OpenCensusConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_OpenCensusConfig.Merge(m, src) +} +func (m *OpenCensusConfig) XXX_Size() int { + return xxx_messageInfo_OpenCensusConfig.Size(m) +} +func (m *OpenCensusConfig) XXX_DiscardUnknown() { + xxx_messageInfo_OpenCensusConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_OpenCensusConfig proto.InternalMessageInfo + +func (m *OpenCensusConfig) GetTraceConfig() *v1.TraceConfig { + if m != nil { + return m.TraceConfig + } + return nil +} + +func (m *OpenCensusConfig) GetStdoutExporterEnabled() bool { + if m != nil { + return m.StdoutExporterEnabled + } + return false +} + +func (m *OpenCensusConfig) GetStackdriverExporterEnabled() bool { + if m != nil { + return m.StackdriverExporterEnabled + } + return false +} + +func (m *OpenCensusConfig) GetStackdriverProjectId() string { + if m != nil { + return m.StackdriverProjectId + } + return "" +} + +func (m *OpenCensusConfig) GetStackdriverAddress() string { + if m != nil { + return m.StackdriverAddress + } + return "" +} + +func (m *OpenCensusConfig) GetStackdriverGrpcService() *core.GrpcService { + if m != nil { + return m.StackdriverGrpcService + } + return nil +} + +func (m *OpenCensusConfig) GetZipkinExporterEnabled() bool { + if m != nil { + return m.ZipkinExporterEnabled + } + return false +} + +func (m *OpenCensusConfig) GetZipkinUrl() string { + if m != nil { + return m.ZipkinUrl + } + return "" +} + +func (m *OpenCensusConfig) GetOcagentExporterEnabled() bool { + if m != nil { + return m.OcagentExporterEnabled + } + return false +} + +func (m *OpenCensusConfig) GetOcagentAddress() string { + if m != nil { + return m.OcagentAddress + } + return "" +} + +func (m *OpenCensusConfig) GetOcagentGrpcService() *core.GrpcService { + if m != nil { + return m.OcagentGrpcService + } + return nil +} + +func (m *OpenCensusConfig) GetIncomingTraceContext() []OpenCensusConfig_TraceContext { + if m != nil { + return m.IncomingTraceContext + } + return nil +} + +func (m *OpenCensusConfig) GetOutgoingTraceContext() []OpenCensusConfig_TraceContext { + if m != nil { + return m.OutgoingTraceContext + } + return nil +} + +type TraceServiceConfig struct { + GrpcService *core.GrpcService `protobuf:"bytes,1,opt,name=grpc_service,json=grpcService,proto3" json:"grpc_service,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceServiceConfig) Reset() { *m = TraceServiceConfig{} } +func (m *TraceServiceConfig) String() string { return proto.CompactTextString(m) } +func (*TraceServiceConfig) ProtoMessage() {} +func (*TraceServiceConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_0785d24fc8ab55c7, []int{6} +} + +func (m *TraceServiceConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TraceServiceConfig.Unmarshal(m, b) +} +func (m *TraceServiceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TraceServiceConfig.Marshal(b, m, deterministic) +} +func (m *TraceServiceConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceServiceConfig.Merge(m, src) +} +func (m *TraceServiceConfig) XXX_Size() int { + return xxx_messageInfo_TraceServiceConfig.Size(m) +} +func (m *TraceServiceConfig) XXX_DiscardUnknown() { + xxx_messageInfo_TraceServiceConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceServiceConfig proto.InternalMessageInfo + +func (m *TraceServiceConfig) GetGrpcService() *core.GrpcService { + if m != nil { + return m.GrpcService + } + return nil +} + +func init() { + proto.RegisterEnum("envoy.config.trace.v2.LightstepConfig_PropagationMode", LightstepConfig_PropagationMode_name, LightstepConfig_PropagationMode_value) + proto.RegisterEnum("envoy.config.trace.v2.ZipkinConfig_CollectorEndpointVersion", ZipkinConfig_CollectorEndpointVersion_name, ZipkinConfig_CollectorEndpointVersion_value) + proto.RegisterEnum("envoy.config.trace.v2.OpenCensusConfig_TraceContext", OpenCensusConfig_TraceContext_name, OpenCensusConfig_TraceContext_value) + proto.RegisterType((*Tracing)(nil), "envoy.config.trace.v2.Tracing") + proto.RegisterType((*Tracing_Http)(nil), "envoy.config.trace.v2.Tracing.Http") + proto.RegisterType((*LightstepConfig)(nil), "envoy.config.trace.v2.LightstepConfig") + proto.RegisterType((*ZipkinConfig)(nil), "envoy.config.trace.v2.ZipkinConfig") + proto.RegisterType((*DynamicOtConfig)(nil), "envoy.config.trace.v2.DynamicOtConfig") + proto.RegisterType((*DatadogConfig)(nil), "envoy.config.trace.v2.DatadogConfig") + proto.RegisterType((*OpenCensusConfig)(nil), "envoy.config.trace.v2.OpenCensusConfig") + proto.RegisterType((*TraceServiceConfig)(nil), "envoy.config.trace.v2.TraceServiceConfig") +} + +func init() { proto.RegisterFile("envoy/config/trace/v2/trace.proto", fileDescriptor_0785d24fc8ab55c7) } + +var fileDescriptor_0785d24fc8ab55c7 = []byte{ + // 1178 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x41, 0x73, 0xdb, 0x44, + 0x14, 0x8e, 0x1c, 0x27, 0x71, 0x9e, 0xed, 0x44, 0xd9, 0xa6, 0x8d, 0x30, 0x6d, 0x27, 0x75, 0x99, + 0xd2, 0x61, 0x18, 0x79, 0xe2, 0x96, 0x52, 0x06, 0x0e, 0x54, 0xae, 0xdb, 0xa4, 0x14, 0xdb, 0xa3, + 0xb8, 0x99, 0xc2, 0x45, 0x6c, 0xa4, 0xad, 0xaa, 0x56, 0xd1, 0x2e, 0xab, 0xb5, 0xa9, 0x7b, 0x62, + 0x38, 0xc2, 0x8d, 0xdf, 0xc0, 0x81, 0x1f, 0xc0, 0x81, 0xe1, 0x17, 0x70, 0xe1, 0xc0, 0x7f, 0xe0, + 0xc2, 0x2f, 0x60, 0xa6, 0x27, 0x46, 0xbb, 0xab, 0x44, 0x91, 0x9b, 0x99, 0xce, 0xf4, 0x26, 0xbd, + 0xef, 0xfb, 0xde, 0xbe, 0xfd, 0xf6, 0xed, 0x5b, 0xb8, 0x42, 0x92, 0x29, 0x9d, 0x75, 0x7c, 0x9a, + 0x3c, 0x89, 0xc2, 0x8e, 0xe0, 0xd8, 0x27, 0x9d, 0x69, 0x57, 0x7d, 0xd8, 0x8c, 0x53, 0x41, 0xd1, + 0x79, 0x49, 0xb1, 0x15, 0xc5, 0x56, 0xc8, 0xb4, 0xdb, 0x7a, 0x4f, 0x29, 0x31, 0x8b, 0x32, 0x81, + 0x4f, 0x39, 0xe9, 0x84, 0x9c, 0xf9, 0x5e, 0x4a, 0xf8, 0x34, 0xca, 0xc5, 0xad, 0x77, 0x42, 0x4a, + 0xc3, 0x98, 0x74, 0xe4, 0xdf, 0xe1, 0xe4, 0x49, 0x07, 0x27, 0x33, 0x0d, 0x5d, 0x2c, 0x43, 0xa9, + 0xe0, 0x13, 0x5f, 0x68, 0xf4, 0x72, 0x19, 0xfd, 0x8e, 0x63, 0xc6, 0x08, 0x4f, 0x35, 0xfe, 0x21, + 0x65, 0x24, 0xf1, 0x49, 0x92, 0x4e, 0x52, 0xc5, 0xc9, 0x8b, 0xdf, 0x51, 0x1f, 0x9e, 0xae, 0x57, + 0xb1, 0xaf, 0xea, 0x62, 0x93, 0x84, 0x0a, 0x2c, 0x22, 0x9a, 0xa4, 0x9d, 0x80, 0x30, 0x4e, 0x7c, + 0xf9, 0xa3, 0x49, 0x97, 0x26, 0x01, 0xc3, 0xa7, 0x38, 0xa9, 0xc0, 0x62, 0x92, 0xaf, 0xb8, 0x35, + 0xc5, 0x71, 0x14, 0x60, 0x41, 0x3a, 0xf9, 0x87, 0x02, 0xda, 0xff, 0x1a, 0xb0, 0x32, 0xe6, 0xd8, + 0x8f, 0x92, 0x10, 0x7d, 0x0c, 0xd5, 0xa7, 0x42, 0x30, 0xcb, 0xd8, 0x36, 0xae, 0xd7, 0xbb, 0x57, + 0xed, 0xd7, 0x7a, 0x67, 0x6b, 0xb6, 0xbd, 0x2b, 0x04, 0x73, 0xa5, 0xa0, 0xf5, 0x8b, 0x01, 0xd5, + 0xec, 0x17, 0xbd, 0x0b, 0xd5, 0x04, 0x1f, 0x11, 0x99, 0x61, 0xd5, 0x59, 0x79, 0xe5, 0x54, 0x79, + 0x65, 0xdb, 0x70, 0x65, 0x10, 0x7d, 0x04, 0xcb, 0x2a, 0x97, 0x55, 0x91, 0x0b, 0x6c, 0xd9, 0xca, + 0x26, 0x3b, 0xb7, 0xc9, 0xde, 0x97, 0x26, 0x3a, 0x15, 0xcb, 0xd8, 0x5d, 0x70, 0x35, 0x19, 0x7d, + 0x02, 0x0d, 0x31, 0x63, 0x24, 0xd0, 0xa6, 0x58, 0x8b, 0x52, 0xbc, 0x39, 0x27, 0xbe, 0x93, 0xcc, + 0x76, 0x17, 0xdc, 0xba, 0xe4, 0xf6, 0x24, 0xd5, 0x69, 0x42, 0x5d, 0x89, 0xbc, 0x2c, 0xda, 0xfe, + 0xbd, 0x02, 0xeb, 0x0f, 0xa3, 0xf0, 0xa9, 0x48, 0x05, 0x61, 0x8a, 0x82, 0x6e, 0xc2, 0x86, 0x4f, + 0xe3, 0x98, 0xf8, 0x82, 0x72, 0xcf, 0x8f, 0x27, 0xa9, 0x20, 0xbc, 0x5c, 0xbe, 0x79, 0xcc, 0xe8, + 0x29, 0x02, 0xba, 0x01, 0x1b, 0xd8, 0xf7, 0x49, 0x9a, 0x7a, 0x82, 0x3e, 0x27, 0x89, 0xf7, 0x24, + 0x8a, 0x89, 0xdc, 0x55, 0x41, 0xb5, 0xae, 0x18, 0xe3, 0x8c, 0x70, 0x2f, 0x8a, 0x09, 0xe2, 0xb0, + 0xc1, 0x38, 0x65, 0x38, 0x94, 0x07, 0xe4, 0x1d, 0xd1, 0x80, 0xa4, 0xd6, 0xe2, 0xf6, 0xe2, 0xf5, + 0xb5, 0xee, 0xad, 0x33, 0xbc, 0x2e, 0x55, 0x6b, 0x8f, 0x4e, 0xf4, 0x5f, 0xd2, 0x80, 0x38, 0xcd, + 0x57, 0x0e, 0xfc, 0x6c, 0xac, 0xb4, 0x97, 0x7e, 0x30, 0x2a, 0xa6, 0xe1, 0x9a, 0xec, 0x34, 0x9e, + 0xb6, 0xef, 0xc1, 0x7a, 0x49, 0x83, 0x56, 0x61, 0xa9, 0x3f, 0x38, 0x18, 0x7e, 0x65, 0x2e, 0xa0, + 0x26, 0xac, 0x3e, 0xdc, 0xbb, 0xbf, 0x3b, 0xde, 0x1f, 0xf7, 0x47, 0xa6, 0x81, 0x96, 0xa1, 0xe2, + 0xdc, 0x30, 0x2b, 0x68, 0x03, 0x9a, 0x63, 0xf7, 0x4e, 0xaf, 0xef, 0xf5, 0x86, 0x83, 0x71, 0xff, + 0xf1, 0xd8, 0x5c, 0x6c, 0xff, 0xb5, 0x08, 0x8d, 0xaf, 0x23, 0xf6, 0x3c, 0x4a, 0xde, 0xca, 0xb7, + 0x5b, 0x80, 0x4e, 0x54, 0x24, 0x09, 0x18, 0x8d, 0x12, 0x51, 0x36, 0xee, 0x24, 0x71, 0x5f, 0x33, + 0xd0, 0x35, 0x58, 0x57, 0x17, 0x23, 0x0a, 0xbc, 0x9d, 0xee, 0xed, 0xc3, 0x48, 0xc8, 0x36, 0xa8, + 0xb9, 0x4d, 0x19, 0xde, 0x0b, 0x54, 0x10, 0x3d, 0x80, 0x73, 0xe9, 0x53, 0xcc, 0x49, 0xe0, 0xa5, + 0x0c, 0x27, 0x59, 0xc7, 0x08, 0xf2, 0x42, 0x58, 0x55, 0xd9, 0x32, 0xad, 0xb9, 0x96, 0x71, 0x28, + 0x8d, 0x0f, 0x70, 0x3c, 0x21, 0xee, 0x86, 0x92, 0xed, 0x33, 0x9c, 0x6d, 0x30, 0x13, 0xa1, 0x97, + 0xd0, 0x9a, 0xaf, 0xd5, 0x9b, 0x12, 0x9e, 0x46, 0x34, 0xb1, 0x96, 0xb6, 0x8d, 0xeb, 0x6b, 0xdd, + 0xcf, 0xce, 0x38, 0xb7, 0xa2, 0x55, 0x76, 0xaf, 0xbc, 0x9d, 0x03, 0x95, 0xc3, 0xb5, 0xfc, 0x33, + 0x90, 0xb6, 0x07, 0xd6, 0x59, 0x2a, 0xd4, 0x82, 0xc6, 0xee, 0x78, 0x3c, 0xf2, 0x1e, 0xec, 0x0f, + 0x07, 0xde, 0xc1, 0x8e, 0xb9, 0xd0, 0xaa, 0xfd, 0xfa, 0xdf, 0x6f, 0x3f, 0x55, 0x8c, 0x9a, 0x91, + 0x1d, 0xe8, 0x31, 0x66, 0x1a, 0x68, 0x0d, 0x40, 0xfe, 0x8e, 0xdc, 0xe1, 0x78, 0x68, 0x56, 0x50, + 0x0d, 0xaa, 0xf7, 0xdd, 0x51, 0xcf, 0x5c, 0x6c, 0x13, 0x58, 0xbf, 0x3b, 0x4b, 0xf0, 0x51, 0xe4, + 0x0f, 0x85, 0x3e, 0xd1, 0x2b, 0xb0, 0x12, 0x47, 0x87, 0x1c, 0xf3, 0x59, 0xf9, 0x1c, 0xf3, 0x38, + 0xea, 0xbc, 0xe1, 0x0d, 0xce, 0xef, 0x6e, 0xfb, 0x5b, 0x68, 0xde, 0xc5, 0x02, 0x07, 0x34, 0x7c, + 0xab, 0xb6, 0xf9, 0x00, 0x1a, 0x7a, 0x32, 0x7b, 0x72, 0xbc, 0x94, 0x1a, 0xa6, 0xae, 0xc1, 0x01, + 0x3e, 0x22, 0xed, 0x7f, 0x56, 0xc0, 0x1c, 0x32, 0x92, 0xf4, 0xe4, 0x78, 0xd5, 0xcb, 0xee, 0x41, + 0xa3, 0x38, 0x58, 0xf5, 0x84, 0xbb, 0x66, 0x9f, 0xcc, 0x61, 0xb5, 0x85, 0xfc, 0x04, 0x77, 0xe4, + 0x94, 0x23, 0x4a, 0xed, 0xd6, 0xc5, 0xc9, 0x0f, 0xba, 0x05, 0x5b, 0xa9, 0x08, 0xe8, 0x44, 0x78, + 0xe4, 0x05, 0xa3, 0x5c, 0x90, 0xac, 0x39, 0xf0, 0x61, 0x4c, 0x02, 0x59, 0x56, 0xcd, 0x3d, 0xaf, + 0xe0, 0xbe, 0x46, 0xfb, 0x0a, 0x44, 0x9f, 0xc3, 0xc5, 0x54, 0x60, 0xff, 0x79, 0xc0, 0xa3, 0x69, + 0xa6, 0x29, 0x8b, 0x55, 0x3f, 0xb7, 0x0a, 0x9c, 0x72, 0x86, 0x9b, 0x70, 0xa1, 0x98, 0x81, 0x71, + 0xfa, 0x8c, 0xf8, 0xc2, 0x8b, 0x02, 0xd9, 0xdf, 0xab, 0xee, 0x66, 0x01, 0x1d, 0x29, 0x70, 0x2f, + 0x40, 0x1d, 0x38, 0x57, 0x54, 0xe1, 0x20, 0xe0, 0x24, 0x4d, 0x2d, 0x90, 0x12, 0x54, 0x80, 0xee, + 0x28, 0x04, 0x3d, 0x06, 0xab, 0x28, 0x28, 0xbe, 0x8b, 0x56, 0x53, 0xfa, 0x76, 0x59, 0x77, 0x3d, + 0x66, 0x51, 0xd6, 0xec, 0xd9, 0xf3, 0x69, 0xdf, 0xe7, 0xcc, 0xdf, 0x57, 0x2c, 0xb7, 0x58, 0x66, + 0x21, 0x9e, 0x59, 0xf7, 0x52, 0x5e, 0x8c, 0xf9, 0xdd, 0x2f, 0x29, 0xeb, 0x14, 0x5c, 0xde, 0xf8, + 0x25, 0x00, 0xad, 0x9b, 0xf0, 0xd8, 0x5a, 0x96, 0x95, 0xaf, 0xaa, 0xc8, 0x23, 0x1e, 0xa3, 0xdb, + 0x60, 0x51, 0x1f, 0x87, 0x24, 0x79, 0xcd, 0x91, 0xd4, 0x65, 0xde, 0x0b, 0x1a, 0x2f, 0x27, 0x7e, + 0x1f, 0xd6, 0x73, 0x65, 0xee, 0x4b, 0x43, 0x66, 0x5f, 0xd3, 0xe1, 0xdc, 0x93, 0x11, 0x6c, 0xe6, + 0xc4, 0x53, 0x7e, 0xac, 0xbd, 0x91, 0x1f, 0x48, 0x6b, 0x8b, 0x5e, 0x3c, 0x83, 0x0b, 0x51, 0xe2, + 0xd3, 0xa3, 0x28, 0x09, 0xbd, 0xe3, 0xd6, 0x94, 0xc3, 0xaa, 0x26, 0x5f, 0x84, 0x9b, 0x67, 0x4c, + 0x96, 0x72, 0x6b, 0x1f, 0x37, 0x6a, 0xa6, 0x75, 0x37, 0xf3, 0x9c, 0xc5, 0x68, 0xb6, 0x16, 0x9d, + 0x88, 0x90, 0xce, 0xaf, 0xb5, 0xfa, 0x36, 0x6b, 0xe5, 0x39, 0x8b, 0xd1, 0xf6, 0x37, 0xd0, 0x38, + 0xb5, 0x76, 0x0d, 0xaa, 0x83, 0xe1, 0xa0, 0x6f, 0x2e, 0xcc, 0xbf, 0x2a, 0x06, 0x42, 0xb0, 0x96, + 0xcd, 0x23, 0x4f, 0xc5, 0x9d, 0xbd, 0x81, 0x59, 0x41, 0x5b, 0x70, 0xae, 0xf7, 0x70, 0xf8, 0xe8, + 0xae, 0x57, 0x7a, 0x82, 0xf4, 0xeb, 0x54, 0x7d, 0x50, 0xad, 0xad, 0x98, 0xb5, 0x36, 0x06, 0x24, + 0xd7, 0xd1, 0x7e, 0xea, 0xcb, 0xf9, 0x05, 0x34, 0x4e, 0x9d, 0x8f, 0xf1, 0x26, 0xe7, 0xe3, 0xd4, + 0x5e, 0x39, 0x4b, 0x3f, 0xca, 0x07, 0xb4, 0x1e, 0x16, 0xc2, 0x9f, 0xfe, 0xf1, 0xfd, 0x9f, 0x7f, + 0x2f, 0x57, 0x4c, 0x03, 0xae, 0x46, 0x54, 0xa5, 0x60, 0x9c, 0xbe, 0x98, 0xbd, 0xde, 0x2d, 0x07, + 0x64, 0x3d, 0xa3, 0x6c, 0x8c, 0x8c, 0x8c, 0xc3, 0x65, 0x39, 0x4f, 0x6e, 0xfc, 0x1f, 0x00, 0x00, + 0xff, 0xff, 0xa8, 0xc0, 0x9e, 0xf5, 0xa4, 0x0a, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/config/trace/v2/trace.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,751 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/config/trace/v2/trace.proto + +package envoy_config_trace_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _trace_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on Tracing with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Tracing) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetHttp()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TracingValidationError{ + field: "Http", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// TracingValidationError is the validation error returned by Tracing.Validate +// if the designated constraints aren't met. +type TracingValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TracingValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TracingValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TracingValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TracingValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TracingValidationError) ErrorName() string { return "TracingValidationError" } + +// Error satisfies the builtin error interface +func (e TracingValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTracing.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TracingValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TracingValidationError{} + +// Validate checks the field values on LightstepConfig with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *LightstepConfig) Validate() error { + if m == nil { + return nil + } + + if len(m.GetCollectorCluster()) < 1 { + return LightstepConfigValidationError{ + field: "CollectorCluster", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetAccessTokenFile()) < 1 { + return LightstepConfigValidationError{ + field: "AccessTokenFile", + reason: "value length must be at least 1 bytes", + } + } + + for idx, item := range m.GetPropagationModes() { + _, _ = idx, item + + if _, ok := LightstepConfig_PropagationMode_name[int32(item)]; !ok { + return LightstepConfigValidationError{ + field: fmt.Sprintf("PropagationModes[%v]", idx), + reason: "value must be one of the defined enum values", + } + } + + } + + return nil +} + +// LightstepConfigValidationError is the validation error returned by +// LightstepConfig.Validate if the designated constraints aren't met. +type LightstepConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LightstepConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LightstepConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LightstepConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LightstepConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LightstepConfigValidationError) ErrorName() string { return "LightstepConfigValidationError" } + +// Error satisfies the builtin error interface +func (e LightstepConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLightstepConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LightstepConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LightstepConfigValidationError{} + +// Validate checks the field values on ZipkinConfig with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ZipkinConfig) Validate() error { + if m == nil { + return nil + } + + if len(m.GetCollectorCluster()) < 1 { + return ZipkinConfigValidationError{ + field: "CollectorCluster", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetCollectorEndpoint()) < 1 { + return ZipkinConfigValidationError{ + field: "CollectorEndpoint", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for TraceId_128Bit + + if v, ok := interface{}(m.GetSharedSpanContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ZipkinConfigValidationError{ + field: "SharedSpanContext", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for CollectorEndpointVersion + + return nil +} + +// ZipkinConfigValidationError is the validation error returned by +// ZipkinConfig.Validate if the designated constraints aren't met. +type ZipkinConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ZipkinConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ZipkinConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ZipkinConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ZipkinConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ZipkinConfigValidationError) ErrorName() string { return "ZipkinConfigValidationError" } + +// Error satisfies the builtin error interface +func (e ZipkinConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sZipkinConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ZipkinConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ZipkinConfigValidationError{} + +// Validate checks the field values on DynamicOtConfig with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *DynamicOtConfig) Validate() error { + if m == nil { + return nil + } + + if len(m.GetLibrary()) < 1 { + return DynamicOtConfigValidationError{ + field: "Library", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DynamicOtConfigValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DynamicOtConfigValidationError is the validation error returned by +// DynamicOtConfig.Validate if the designated constraints aren't met. +type DynamicOtConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DynamicOtConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DynamicOtConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DynamicOtConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DynamicOtConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DynamicOtConfigValidationError) ErrorName() string { return "DynamicOtConfigValidationError" } + +// Error satisfies the builtin error interface +func (e DynamicOtConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDynamicOtConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DynamicOtConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DynamicOtConfigValidationError{} + +// Validate checks the field values on DatadogConfig with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *DatadogConfig) Validate() error { + if m == nil { + return nil + } + + if len(m.GetCollectorCluster()) < 1 { + return DatadogConfigValidationError{ + field: "CollectorCluster", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetServiceName()) < 1 { + return DatadogConfigValidationError{ + field: "ServiceName", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// DatadogConfigValidationError is the validation error returned by +// DatadogConfig.Validate if the designated constraints aren't met. +type DatadogConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DatadogConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DatadogConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DatadogConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DatadogConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DatadogConfigValidationError) ErrorName() string { return "DatadogConfigValidationError" } + +// Error satisfies the builtin error interface +func (e DatadogConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDatadogConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DatadogConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DatadogConfigValidationError{} + +// Validate checks the field values on OpenCensusConfig with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *OpenCensusConfig) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetTraceConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenCensusConfigValidationError{ + field: "TraceConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for StdoutExporterEnabled + + // no validation rules for StackdriverExporterEnabled + + // no validation rules for StackdriverProjectId + + // no validation rules for StackdriverAddress + + if v, ok := interface{}(m.GetStackdriverGrpcService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenCensusConfigValidationError{ + field: "StackdriverGrpcService", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for ZipkinExporterEnabled + + // no validation rules for ZipkinUrl + + // no validation rules for OcagentExporterEnabled + + // no validation rules for OcagentAddress + + if v, ok := interface{}(m.GetOcagentGrpcService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenCensusConfigValidationError{ + field: "OcagentGrpcService", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// OpenCensusConfigValidationError is the validation error returned by +// OpenCensusConfig.Validate if the designated constraints aren't met. +type OpenCensusConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OpenCensusConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OpenCensusConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OpenCensusConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OpenCensusConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OpenCensusConfigValidationError) ErrorName() string { return "OpenCensusConfigValidationError" } + +// Error satisfies the builtin error interface +func (e OpenCensusConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOpenCensusConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OpenCensusConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OpenCensusConfigValidationError{} + +// Validate checks the field values on TraceServiceConfig with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *TraceServiceConfig) Validate() error { + if m == nil { + return nil + } + + if m.GetGrpcService() == nil { + return TraceServiceConfigValidationError{ + field: "GrpcService", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetGrpcService()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TraceServiceConfigValidationError{ + field: "GrpcService", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// TraceServiceConfigValidationError is the validation error returned by +// TraceServiceConfig.Validate if the designated constraints aren't met. +type TraceServiceConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TraceServiceConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TraceServiceConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TraceServiceConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TraceServiceConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TraceServiceConfigValidationError) ErrorName() string { + return "TraceServiceConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e TraceServiceConfigValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTraceServiceConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TraceServiceConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TraceServiceConfigValidationError{} + +// Validate checks the field values on Tracing_Http with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *Tracing_Http) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return Tracing_HttpValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + switch m.ConfigType.(type) { + + case *Tracing_Http_Config: + + if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Tracing_HttpValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Tracing_Http_TypedConfig: + + if v, ok := interface{}(m.GetTypedConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Tracing_HttpValidationError{ + field: "TypedConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// Tracing_HttpValidationError is the validation error returned by +// Tracing_Http.Validate if the designated constraints aren't met. +type Tracing_HttpValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Tracing_HttpValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Tracing_HttpValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Tracing_HttpValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Tracing_HttpValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Tracing_HttpValidationError) ErrorName() string { return "Tracing_HttpValidationError" } + +// Error satisfies the builtin error interface +func (e Tracing_HttpValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTracing_Http.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Tracing_HttpValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Tracing_HttpValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,15 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/service/auth/v2/attribute_context.proto -package v2 +package envoy_service_auth_v2 import ( fmt "fmt" - io "io" - math "math" - - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - types "github.com/gogo/protobuf/types" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" + proto "github.com/golang/protobuf/proto" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -25,33 +21,17 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// An attribute is a piece of metadata that describes an activity on a network. -// For example, the size of an HTTP request, or the status code of an HTTP response. -// -// Each attribute has a type and a name, which is logically defined as a proto message field -// of the `AttributeContext`. The `AttributeContext` is a collection of individual attributes -// supported by Envoy authorization system. type AttributeContext struct { - // The source of a network activity, such as starting a TCP connection. - // In a multi hop network activity, the source represents the sender of the - // last hop. - Source *AttributeContext_Peer `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` - // The destination of a network activity, such as accepting a TCP connection. - // In a multi hop network activity, the destination represents the receiver of - // the last hop. - Destination *AttributeContext_Peer `protobuf:"bytes,2,opt,name=destination,proto3" json:"destination,omitempty"` - // Represents a network request, such as an HTTP request. - Request *AttributeContext_Request `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"` - // This is analogous to http_request.headers, however these contents will not be sent to the - // upstream server. Context_extensions provide an extension mechanism for sending additional - // information to the auth server without modifying the proto definition. It maps to the - // internal opaque context in the filter chain. - ContextExtensions map[string]string `protobuf:"bytes,10,rep,name=context_extensions,json=contextExtensions,proto3" json:"context_extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Source *AttributeContext_Peer `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Destination *AttributeContext_Peer `protobuf:"bytes,2,opt,name=destination,proto3" json:"destination,omitempty"` + Request *AttributeContext_Request `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"` + ContextExtensions map[string]string `protobuf:"bytes,10,rep,name=context_extensions,json=contextExtensions,proto3" json:"context_extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MetadataContext *core.Metadata `protobuf:"bytes,11,opt,name=metadata_context,json=metadataContext,proto3" json:"metadata_context,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AttributeContext) Reset() { *m = AttributeContext{} } @@ -60,22 +40,18 @@ func (*AttributeContext) Descriptor() ([]byte, []int) { return fileDescriptor_a6030c9468e3591b, []int{0} } + func (m *AttributeContext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AttributeContext.Unmarshal(m, b) } func (m *AttributeContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_AttributeContext.Marshal(b, m, deterministic) } func (m *AttributeContext) XXX_Merge(src proto.Message) { xxx_messageInfo_AttributeContext.Merge(m, src) } func (m *AttributeContext) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AttributeContext.Size(m) } func (m *AttributeContext) XXX_DiscardUnknown() { xxx_messageInfo_AttributeContext.DiscardUnknown(m) @@ -111,37 +87,22 @@ return nil } -// This message defines attributes for a node that handles a network request. -// The node can be either a service or an application that sends, forwards, -// or receives the request. Service peers should fill in the `service`, -// `principal`, and `labels` as appropriate. +func (m *AttributeContext) GetMetadataContext() *core.Metadata { + if m != nil { + return m.MetadataContext + } + return nil +} + type AttributeContext_Peer struct { - // The address of the peer, this is typically the IP address. - // It can also be UDS path, or others. - Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // The canonical service name of the peer. - // It should be set to :ref:`the HTTP x-envoy-downstream-service-cluster - // ` - // If a more trusted source of the service name is available through mTLS/secure naming, it - // should be used. - Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` - // The labels associated with the peer. - // These could be pod labels for Kubernetes or tags for VMs. - // The source of the labels could be an X.509 certificate or other configuration. - Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The authenticated identity of this peer. - // For example, the identity associated with the workload such as a service account. - // If an X.509 certificate is used to assert the identity this field should be sourced from - // `Subject` or `Subject Alternative Names`. The primary identity should be the principal. - // The principal format is issuer specific. - // - // Example: - // * SPIFFE format is `spiffe://trust-domain/path` - // * Google account format is `https://accounts.google.com/{userid}` - Principal string `protobuf:"bytes,4,opt,name=principal,proto3" json:"principal,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Address *core.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Principal string `protobuf:"bytes,4,opt,name=principal,proto3" json:"principal,omitempty"` + Certificate string `protobuf:"bytes,5,opt,name=certificate,proto3" json:"certificate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AttributeContext_Peer) Reset() { *m = AttributeContext_Peer{} } @@ -150,22 +111,18 @@ func (*AttributeContext_Peer) Descriptor() ([]byte, []int) { return fileDescriptor_a6030c9468e3591b, []int{0, 0} } + func (m *AttributeContext_Peer) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AttributeContext_Peer.Unmarshal(m, b) } func (m *AttributeContext_Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_AttributeContext_Peer.Marshal(b, m, deterministic) } func (m *AttributeContext_Peer) XXX_Merge(src proto.Message) { xxx_messageInfo_AttributeContext_Peer.Merge(m, src) } func (m *AttributeContext_Peer) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AttributeContext_Peer.Size(m) } func (m *AttributeContext_Peer) XXX_DiscardUnknown() { xxx_messageInfo_AttributeContext_Peer.DiscardUnknown(m) @@ -201,11 +158,15 @@ return "" } -// Represents a network request, such as an HTTP request. +func (m *AttributeContext_Peer) GetCertificate() string { + if m != nil { + return m.Certificate + } + return "" +} + type AttributeContext_Request struct { - // The timestamp when the proxy receives the first byte of the request. - Time *types.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` - // Represents an HTTP request or an HTTP-like request. + Time *timestamp.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` Http *AttributeContext_HttpRequest `protobuf:"bytes,2,opt,name=http,proto3" json:"http,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -218,22 +179,18 @@ func (*AttributeContext_Request) Descriptor() ([]byte, []int) { return fileDescriptor_a6030c9468e3591b, []int{0, 1} } + func (m *AttributeContext_Request) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AttributeContext_Request.Unmarshal(m, b) } func (m *AttributeContext_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_AttributeContext_Request.Marshal(b, m, deterministic) } func (m *AttributeContext_Request) XXX_Merge(src proto.Message) { xxx_messageInfo_AttributeContext_Request.Merge(m, src) } func (m *AttributeContext_Request) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AttributeContext_Request.Size(m) } func (m *AttributeContext_Request) XXX_DiscardUnknown() { xxx_messageInfo_AttributeContext_Request.DiscardUnknown(m) @@ -241,7 +198,7 @@ var xxx_messageInfo_AttributeContext_Request proto.InternalMessageInfo -func (m *AttributeContext_Request) GetTime() *types.Timestamp { +func (m *AttributeContext_Request) GetTime() *timestamp.Timestamp { if m != nil { return m.Time } @@ -255,45 +212,21 @@ return nil } -// This message defines attributes for an HTTP request. -// HTTP/1.x, HTTP/2, gRPC are all considered as HTTP requests. type AttributeContext_HttpRequest struct { - // The unique ID for a request, which can be propagated to downstream - // systems. The ID should have low probability of collision - // within a single day for a specific service. - // For HTTP requests, it should be X-Request-ID or equivalent. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // The HTTP request method, such as `GET`, `POST`. - Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` - // The HTTP request headers. If multiple headers share the same key, they - // must be merged according to the HTTP spec. All header keys must be - // lowercased, because HTTP header keys are case-insensitive. - Headers map[string]string `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // The request target, as it appears in the first line of the HTTP request. This includes - // the URL path and query-string. No decoding is performed. - Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` - // The HTTP request `Host` or 'Authority` header value. - Host string `protobuf:"bytes,5,opt,name=host,proto3" json:"host,omitempty"` - // The HTTP URL scheme, such as `http` and `https`. - Scheme string `protobuf:"bytes,6,opt,name=scheme,proto3" json:"scheme,omitempty"` - // This field is always empty, and exists for compatibility reasons. The HTTP URL query is - // included in `path` field. - Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` - // This field is always empty, and exists for compatibility reasons. The URL fragment is - // not submitted as part of HTTP requests; it is unknowable. - Fragment string `protobuf:"bytes,8,opt,name=fragment,proto3" json:"fragment,omitempty"` - // The HTTP request size in bytes. If unknown, it must be -1. - Size_ int64 `protobuf:"varint,9,opt,name=size,proto3" json:"size,omitempty"` - // The network protocol used with the request, such as "HTTP/1.0", "HTTP/1.1", or "HTTP/2". - // - // See :repo:`headers.h:ProtocolStrings ` for a list of all - // possible values. - Protocol string `protobuf:"bytes,10,opt,name=protocol,proto3" json:"protocol,omitempty"` - // The HTTP request body. - Body string `protobuf:"bytes,11,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` + Headers map[string]string `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` + Host string `protobuf:"bytes,5,opt,name=host,proto3" json:"host,omitempty"` + Scheme string `protobuf:"bytes,6,opt,name=scheme,proto3" json:"scheme,omitempty"` + Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` + Fragment string `protobuf:"bytes,8,opt,name=fragment,proto3" json:"fragment,omitempty"` + Size int64 `protobuf:"varint,9,opt,name=size,proto3" json:"size,omitempty"` + Protocol string `protobuf:"bytes,10,opt,name=protocol,proto3" json:"protocol,omitempty"` + Body string `protobuf:"bytes,11,opt,name=body,proto3" json:"body,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AttributeContext_HttpRequest) Reset() { *m = AttributeContext_HttpRequest{} } @@ -302,22 +235,18 @@ func (*AttributeContext_HttpRequest) Descriptor() ([]byte, []int) { return fileDescriptor_a6030c9468e3591b, []int{0, 2} } + func (m *AttributeContext_HttpRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AttributeContext_HttpRequest.Unmarshal(m, b) } func (m *AttributeContext_HttpRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil + return xxx_messageInfo_AttributeContext_HttpRequest.Marshal(b, m, deterministic) } func (m *AttributeContext_HttpRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_AttributeContext_HttpRequest.Merge(m, src) } func (m *AttributeContext_HttpRequest) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AttributeContext_HttpRequest.Size(m) } func (m *AttributeContext_HttpRequest) XXX_DiscardUnknown() { xxx_messageInfo_AttributeContext_HttpRequest.DiscardUnknown(m) @@ -381,9 +310,9 @@ return "" } -func (m *AttributeContext_HttpRequest) GetSize_() int64 { +func (m *AttributeContext_HttpRequest) GetSize() int64 { if m != nil { - return m.Size_ + return m.Size } return 0 } @@ -417,1786 +346,47 @@ } var fileDescriptor_a6030c9468e3591b = []byte{ - // 630 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x4f, 0x6f, 0xd3, 0x4e, - 0x10, 0x95, 0x93, 0x34, 0x69, 0x26, 0x3f, 0xfd, 0x54, 0x56, 0x6d, 0x65, 0x59, 0x55, 0xa8, 0xe0, - 0xd2, 0x03, 0xac, 0xa5, 0x94, 0x43, 0xe9, 0x01, 0xd1, 0xd2, 0x8a, 0x22, 0xa1, 0x2a, 0xb2, 0x38, - 0x71, 0xa9, 0x36, 0xf6, 0x34, 0x5e, 0x91, 0x78, 0xdd, 0xdd, 0x75, 0xd4, 0x70, 0x03, 0x3e, 0x14, - 0x5f, 0x81, 0x23, 0x47, 0x8e, 0x28, 0x9f, 0x04, 0xed, 0x1f, 0x97, 0xa8, 0xf4, 0xd0, 0xf4, 0x94, - 0x99, 0xf1, 0x9b, 0xb7, 0x6f, 0xde, 0x4c, 0xe0, 0x39, 0x16, 0x33, 0x31, 0x8f, 0x15, 0xca, 0x19, - 0x4f, 0x31, 0x66, 0x95, 0xce, 0xe3, 0xd9, 0x20, 0x66, 0x5a, 0x4b, 0x3e, 0xaa, 0x34, 0x5e, 0xa4, - 0xa2, 0xd0, 0x78, 0xad, 0x69, 0x29, 0x85, 0x16, 0x64, 0xcb, 0xc2, 0xa9, 0x87, 0x53, 0x03, 0xa7, - 0xb3, 0x41, 0xb4, 0xe3, 0x58, 0x58, 0xc9, 0x4d, 0x73, 0x2a, 0x24, 0xc6, 0x23, 0xa6, 0xd0, 0x35, - 0x45, 0x8f, 0xff, 0xfd, 0xca, 0xb2, 0x4c, 0xa2, 0x52, 0x35, 0x60, 0x2c, 0xc4, 0x78, 0x82, 0xb1, - 0xcd, 0x46, 0xd5, 0x65, 0xac, 0xf9, 0x14, 0x95, 0x66, 0xd3, 0xd2, 0x03, 0x36, 0xc7, 0x62, 0x2c, - 0x6c, 0x18, 0x9b, 0xc8, 0x55, 0x9f, 0x7c, 0xef, 0xc2, 0xc6, 0x51, 0x2d, 0xf4, 0x8d, 0xd3, 0x49, - 0x4e, 0xa0, 0xad, 0x44, 0x25, 0x53, 0x0c, 0x83, 0xdd, 0x60, 0xaf, 0x37, 0x78, 0x46, 0xef, 0x94, - 0x4c, 0x6f, 0x37, 0xd2, 0x21, 0xa2, 0x4c, 0x7c, 0x2f, 0x39, 0x87, 0x5e, 0x86, 0x4a, 0xf3, 0x82, - 0x69, 0x2e, 0x8a, 0xb0, 0xf1, 0x00, 0xaa, 0x65, 0x02, 0xf2, 0x0e, 0x3a, 0x12, 0xaf, 0x2a, 0x54, - 0x3a, 0x6c, 0x59, 0xae, 0xf8, 0xbe, 0x5c, 0x89, 0x6b, 0x4b, 0xea, 0x7e, 0x32, 0x05, 0xe2, 0x77, - 0x72, 0x81, 0xd7, 0x1a, 0x0b, 0xc5, 0x45, 0xa1, 0x42, 0xd8, 0x6d, 0xee, 0xf5, 0x06, 0xaf, 0xee, - 0xcb, 0xea, 0x7f, 0x4f, 0x6f, 0x08, 0x4e, 0x0b, 0x2d, 0xe7, 0xc9, 0xa3, 0xf4, 0x76, 0x3d, 0xfa, - 0xd2, 0x80, 0x96, 0x99, 0x87, 0xbc, 0x80, 0x8e, 0xdf, 0x9a, 0x77, 0x36, 0xf2, 0x8f, 0xb1, 0x92, - 0x9b, 0x37, 0xcc, 0x5e, 0xe9, 0x91, 0x43, 0x24, 0x35, 0x94, 0x84, 0xd0, 0xf1, 0x62, 0xac, 0x89, - 0xdd, 0xa4, 0x4e, 0xc9, 0x10, 0xda, 0x13, 0x36, 0xc2, 0x89, 0x0a, 0x9b, 0x56, 0xfb, 0xc1, 0x2a, - 0xee, 0xd2, 0xf7, 0xb6, 0xd5, 0xa9, 0xf6, 0x3c, 0x64, 0x07, 0xba, 0xa5, 0xe4, 0x45, 0xca, 0x4b, - 0x36, 0xb1, 0x36, 0x77, 0x93, 0xbf, 0x85, 0xe8, 0x25, 0xf4, 0x96, 0x9a, 0xc8, 0x06, 0x34, 0x3f, - 0xe1, 0xdc, 0x8e, 0xd2, 0x4d, 0x4c, 0x48, 0x36, 0x61, 0x6d, 0xc6, 0x26, 0x55, 0x2d, 0xd4, 0x25, - 0x87, 0x8d, 0x83, 0x20, 0xfa, 0x1a, 0x40, 0xc7, 0xef, 0x81, 0x50, 0x68, 0x99, 0xeb, 0xbc, 0xf1, - 0xc0, 0x9d, 0x2e, 0xad, 0x4f, 0x97, 0x7e, 0xa8, 0x4f, 0x37, 0xb1, 0x38, 0xf2, 0x16, 0x5a, 0xb9, - 0xd6, 0xa5, 0x3f, 0xa1, 0xfd, 0xfb, 0x0e, 0x79, 0xa6, 0x75, 0x59, 0xaf, 0xde, 0x12, 0x44, 0xdf, - 0x9a, 0xd0, 0x5b, 0xaa, 0x92, 0xff, 0xa1, 0xc1, 0x33, 0xaf, 0xbf, 0xc1, 0x33, 0xb2, 0x0d, 0xed, - 0x29, 0xea, 0x5c, 0x64, 0x5e, 0xbf, 0xcf, 0xc8, 0x47, 0xe8, 0xe4, 0xc8, 0x32, 0x94, 0xb5, 0xd1, - 0xaf, 0x1f, 0xa0, 0x81, 0x9e, 0x39, 0x0a, 0x67, 0x78, 0x4d, 0x48, 0x08, 0xb4, 0x4a, 0xa6, 0x73, - 0x6f, 0xb6, 0x8d, 0x4d, 0x2d, 0x17, 0x4a, 0x87, 0x6b, 0xae, 0x66, 0x62, 0xa3, 0x4d, 0xa5, 0x39, - 0x4e, 0x31, 0x6c, 0x3b, 0x6d, 0x2e, 0x33, 0x96, 0x5f, 0x55, 0x28, 0xe7, 0x61, 0xc7, 0x59, 0x6e, - 0x13, 0x12, 0xc1, 0xfa, 0xa5, 0x64, 0xe3, 0x29, 0x16, 0x3a, 0x5c, 0xb7, 0x1f, 0x6e, 0x72, 0xc3, - 0xae, 0xf8, 0x67, 0x0c, 0xbb, 0xbb, 0xc1, 0x5e, 0x33, 0xb1, 0xb1, 0xc1, 0x5b, 0xfb, 0x53, 0x31, - 0x09, 0xc1, 0xe1, 0xeb, 0xdc, 0xe0, 0x47, 0x22, 0x9b, 0x87, 0x3d, 0xa7, 0xc6, 0xc4, 0xd1, 0x21, - 0xfc, 0xb7, 0x3c, 0xce, 0x4a, 0xa7, 0x70, 0x02, 0xdb, 0x77, 0xff, 0x77, 0x56, 0x61, 0x39, 0x3e, - 0xff, 0xb1, 0xe8, 0x07, 0x3f, 0x17, 0xfd, 0xe0, 0xd7, 0xa2, 0x1f, 0xfc, 0x5e, 0xf4, 0x03, 0x78, - 0xca, 0x85, 0x5b, 0x4b, 0x29, 0xc5, 0xf5, 0xfc, 0xee, 0x0d, 0x1d, 0x6f, 0xdd, 0x5e, 0xd1, 0xd0, - 0x8c, 0x39, 0x0c, 0x46, 0x6d, 0x3b, 0xef, 0xfe, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x3a, - 0x48, 0x43, 0xce, 0x05, 0x00, 0x00, -} - -func (m *AttributeContext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AttributeContext) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Source != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Source.Size())) - n1, err := m.Source.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.Destination != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Destination.Size())) - n2, err := m.Destination.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Request != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Request.Size())) - n3, err := m.Request.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if len(m.ContextExtensions) > 0 { - keysForContextExtensions := make([]string, 0, len(m.ContextExtensions)) - for k, _ := range m.ContextExtensions { - keysForContextExtensions = append(keysForContextExtensions, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForContextExtensions) - for _, k := range keysForContextExtensions { - dAtA[i] = 0x52 - i++ - v := m.ContextExtensions[string(k)] - mapSize := 1 + len(k) + sovAttributeContext(uint64(len(k))) + 1 + len(v) + sovAttributeContext(uint64(len(v))) - i = encodeVarintAttributeContext(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AttributeContext_Peer) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AttributeContext_Peer) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Address != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Address.Size())) - n4, err := m.Address.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if len(m.Service) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Service))) - i += copy(dAtA[i:], m.Service) - } - if len(m.Labels) > 0 { - keysForLabels := make([]string, 0, len(m.Labels)) - for k, _ := range m.Labels { - keysForLabels = append(keysForLabels, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - for _, k := range keysForLabels { - dAtA[i] = 0x1a - i++ - v := m.Labels[string(k)] - mapSize := 1 + len(k) + sovAttributeContext(uint64(len(k))) + 1 + len(v) + sovAttributeContext(uint64(len(v))) - i = encodeVarintAttributeContext(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if len(m.Principal) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Principal))) - i += copy(dAtA[i:], m.Principal) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AttributeContext_Request) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AttributeContext_Request) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Time != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Time.Size())) - n5, err := m.Time.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.Http != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Http.Size())) - n6, err := m.Http.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *AttributeContext_HttpRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AttributeContext_HttpRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Id) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Id))) - i += copy(dAtA[i:], m.Id) - } - if len(m.Method) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Method))) - i += copy(dAtA[i:], m.Method) - } - if len(m.Headers) > 0 { - keysForHeaders := make([]string, 0, len(m.Headers)) - for k, _ := range m.Headers { - keysForHeaders = append(keysForHeaders, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForHeaders) - for _, k := range keysForHeaders { - dAtA[i] = 0x1a - i++ - v := m.Headers[string(k)] - mapSize := 1 + len(k) + sovAttributeContext(uint64(len(k))) + 1 + len(v) + sovAttributeContext(uint64(len(v))) - i = encodeVarintAttributeContext(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if len(m.Path) > 0 { - dAtA[i] = 0x22 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - } - if len(m.Host) > 0 { - dAtA[i] = 0x2a - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Host))) - i += copy(dAtA[i:], m.Host) - } - if len(m.Scheme) > 0 { - dAtA[i] = 0x32 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Scheme))) - i += copy(dAtA[i:], m.Scheme) - } - if len(m.Query) > 0 { - dAtA[i] = 0x3a - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Query))) - i += copy(dAtA[i:], m.Query) - } - if len(m.Fragment) > 0 { - dAtA[i] = 0x42 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Fragment))) - i += copy(dAtA[i:], m.Fragment) - } - if m.Size_ != 0 { - dAtA[i] = 0x48 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(m.Size_)) - } - if len(m.Protocol) > 0 { - dAtA[i] = 0x52 - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Protocol))) - i += copy(dAtA[i:], m.Protocol) - } - if len(m.Body) > 0 { - dAtA[i] = 0x5a - i++ - i = encodeVarintAttributeContext(dAtA, i, uint64(len(m.Body))) - i += copy(dAtA[i:], m.Body) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintAttributeContext(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *AttributeContext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Source != nil { - l = m.Source.Size() - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.Destination != nil { - l = m.Destination.Size() - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.Request != nil { - l = m.Request.Size() - n += 1 + l + sovAttributeContext(uint64(l)) - } - if len(m.ContextExtensions) > 0 { - for k, v := range m.ContextExtensions { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovAttributeContext(uint64(len(k))) + 1 + len(v) + sovAttributeContext(uint64(len(v))) - n += mapEntrySize + 1 + sovAttributeContext(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *AttributeContext_Peer) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Address != nil { - l = m.Address.Size() - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Service) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - if len(m.Labels) > 0 { - for k, v := range m.Labels { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovAttributeContext(uint64(len(k))) + 1 + len(v) + sovAttributeContext(uint64(len(v))) - n += mapEntrySize + 1 + sovAttributeContext(uint64(mapEntrySize)) - } - } - l = len(m.Principal) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *AttributeContext_Request) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Time != nil { - l = m.Time.Size() - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.Http != nil { - l = m.Http.Size() - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *AttributeContext_HttpRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Id) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Method) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - if len(m.Headers) > 0 { - for k, v := range m.Headers { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovAttributeContext(uint64(len(k))) + 1 + len(v) + sovAttributeContext(uint64(len(v))) - n += mapEntrySize + 1 + sovAttributeContext(uint64(mapEntrySize)) - } - } - l = len(m.Path) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Host) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Scheme) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Query) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Fragment) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.Size_ != 0 { - n += 1 + sovAttributeContext(uint64(m.Size_)) - } - l = len(m.Protocol) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - l = len(m.Body) - if l > 0 { - n += 1 + l + sovAttributeContext(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovAttributeContext(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozAttributeContext(x uint64) (n int) { - return sovAttributeContext(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *AttributeContext) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AttributeContext: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AttributeContext: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Source == nil { - m.Source = &AttributeContext_Peer{} - } - if err := m.Source.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Destination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Destination == nil { - m.Destination = &AttributeContext_Peer{} - } - if err := m.Destination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Request == nil { - m.Request = &AttributeContext_Request{} - } - if err := m.Request.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContextExtensions", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ContextExtensions == nil { - m.ContextExtensions = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthAttributeContext - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthAttributeContext - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthAttributeContext - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthAttributeContext - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.ContextExtensions[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil + // 668 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x56, 0x7e, 0x9a, 0x34, 0x13, 0x04, 0x61, 0x45, 0x2b, 0xcb, 0x14, 0x35, 0x82, 0x4b, 0x0f, + 0x60, 0x4b, 0x29, 0x87, 0xd2, 0x03, 0xa2, 0xa5, 0x2d, 0x45, 0x02, 0x14, 0x59, 0x9c, 0xb8, 0x54, + 0x1b, 0x7b, 0xda, 0xac, 0x48, 0xbc, 0xee, 0xee, 0x38, 0x6a, 0x38, 0x21, 0x78, 0x12, 0xc4, 0x5b, + 0xf0, 0x04, 0x5c, 0x79, 0x23, 0xb4, 0x3f, 0x2e, 0x51, 0xc9, 0xa1, 0xed, 0xc9, 0x33, 0xe3, 0x6f, + 0xbe, 0x9d, 0x99, 0x6f, 0x06, 0x9e, 0x61, 0x3e, 0x93, 0xf3, 0x58, 0xa3, 0x9a, 0x89, 0x14, 0x63, + 0x5e, 0xd2, 0x38, 0x9e, 0x0d, 0x62, 0x4e, 0xa4, 0xc4, 0xa8, 0x24, 0x3c, 0x49, 0x65, 0x4e, 0x78, + 0x41, 0x51, 0xa1, 0x24, 0x49, 0xb6, 0x66, 0xe1, 0x91, 0x87, 0x47, 0x06, 0x1e, 0xcd, 0x06, 0xe1, + 0xa6, 0x63, 0xe1, 0x85, 0x30, 0xc9, 0xa9, 0x54, 0x18, 0xf3, 0x2c, 0x53, 0xa8, 0xb5, 0xcb, 0x0b, + 0x37, 0xfe, 0x07, 0x8c, 0xb8, 0x46, 0xff, 0x77, 0xf3, 0x4c, 0xca, 0xb3, 0x09, 0xc6, 0xd6, 0x1b, + 0x95, 0xa7, 0x31, 0x89, 0x29, 0x6a, 0xe2, 0xd3, 0xc2, 0x03, 0x1e, 0x95, 0x59, 0xc1, 0x63, 0x9e, + 0xe7, 0x92, 0x38, 0x09, 0x99, 0xeb, 0x58, 0x13, 0xa7, 0xd2, 0xb3, 0x3f, 0xfe, 0x01, 0xd0, 0xdb, + 0xab, 0x2a, 0x7e, 0xed, 0x0a, 0x66, 0x07, 0xd0, 0xd2, 0xb2, 0x54, 0x29, 0x06, 0xb5, 0x7e, 0x6d, + 0xab, 0x3b, 0x78, 0x1a, 0x2d, 0xad, 0x3d, 0xba, 0x9a, 0x18, 0x0d, 0x11, 0x55, 0xe2, 0x73, 0xd9, + 0x07, 0xe8, 0x66, 0xa8, 0x49, 0xe4, 0xf6, 0xdd, 0xa0, 0x7e, 0x0b, 0xaa, 0x45, 0x02, 0xf6, 0x16, + 0xda, 0x0a, 0xcf, 0x4b, 0xd4, 0x14, 0x34, 0x2d, 0x57, 0x7c, 0x5d, 0xae, 0xc4, 0xa5, 0x25, 0x55, + 0x3e, 0x9b, 0x02, 0xf3, 0xe2, 0x9c, 0xe0, 0x05, 0x61, 0xae, 0xcd, 0x60, 0x02, 0xe8, 0x37, 0xb6, + 0xba, 0x83, 0x97, 0xd7, 0x65, 0xf5, 0xdf, 0xc3, 0x4b, 0x82, 0xc3, 0x9c, 0xd4, 0x3c, 0xb9, 0x9f, + 0x5e, 0x8d, 0xb3, 0x23, 0xe8, 0x4d, 0x91, 0x78, 0xc6, 0x89, 0x57, 0x4b, 0x11, 0x74, 0x6d, 0x0b, + 0x0f, 0xfd, 0x63, 0xbc, 0x10, 0xe6, 0x0d, 0xa3, 0x6e, 0xf4, 0xde, 0x43, 0x93, 0x7b, 0x55, 0x92, + 0x7f, 0x29, 0xfc, 0x59, 0x87, 0xa6, 0x99, 0x0b, 0x7b, 0x0e, 0x6d, 0xbf, 0x24, 0x5e, 0xa1, 0x70, + 0x09, 0xcf, 0x9e, 0x43, 0x24, 0x15, 0x94, 0x05, 0xd0, 0xf6, 0x4d, 0x59, 0x31, 0x3a, 0x49, 0xe5, + 0xb2, 0x21, 0xb4, 0x26, 0x7c, 0x84, 0x13, 0x1d, 0x34, 0xec, 0x0c, 0x76, 0x6e, 0xa2, 0x52, 0xf4, + 0xce, 0xa6, 0xba, 0xee, 0x3d, 0x0f, 0xdb, 0x80, 0x4e, 0xa1, 0x44, 0x9e, 0x8a, 0x82, 0x4f, 0xac, + 0x5c, 0x9d, 0xe4, 0x5f, 0x80, 0xf5, 0xa1, 0x9b, 0xa2, 0x22, 0x71, 0x2a, 0x52, 0x4e, 0x18, 0xac, + 0xd8, 0xff, 0x8b, 0xa1, 0xf0, 0x05, 0x74, 0x17, 0x68, 0x59, 0x0f, 0x1a, 0x9f, 0x71, 0x6e, 0x9b, + 0xed, 0x24, 0xc6, 0x64, 0x0f, 0x60, 0x65, 0xc6, 0x27, 0x65, 0xd5, 0x8a, 0x73, 0x76, 0xeb, 0x3b, + 0xb5, 0xf0, 0x5b, 0x0d, 0xda, 0x5e, 0x71, 0x16, 0x41, 0xd3, 0x1c, 0xc4, 0xe5, 0x94, 0xdc, 0xb5, + 0x44, 0xd5, 0xb5, 0x44, 0x1f, 0xab, 0x6b, 0x49, 0x2c, 0x8e, 0xbd, 0x81, 0xe6, 0x98, 0xa8, 0xf0, + 0xcb, 0xba, 0x7d, 0xdd, 0x31, 0x1c, 0x13, 0x15, 0xd5, 0x92, 0x59, 0x82, 0xf0, 0x7b, 0x03, 0xba, + 0x0b, 0x51, 0x76, 0x17, 0xea, 0x22, 0xf3, 0xf5, 0xd7, 0x45, 0xc6, 0xd6, 0xa1, 0x35, 0x45, 0x1a, + 0xcb, 0xcc, 0xd7, 0xef, 0x3d, 0xf6, 0x09, 0xda, 0x63, 0xe4, 0x19, 0xaa, 0x4a, 0x8a, 0x57, 0xb7, + 0xa8, 0x21, 0x3a, 0x76, 0x14, 0x4e, 0x92, 0x8a, 0x90, 0x31, 0x68, 0x16, 0x9c, 0xc6, 0x5e, 0x0e, + 0x6b, 0x9b, 0xd8, 0x58, 0x6a, 0xf2, 0x12, 0x58, 0xdb, 0xd4, 0xa6, 0xd3, 0x31, 0x4e, 0x31, 0x68, + 0xb9, 0xda, 0x9c, 0x67, 0x46, 0x7e, 0x5e, 0xa2, 0x9a, 0x07, 0x6d, 0x37, 0x72, 0xeb, 0xb0, 0x10, + 0x56, 0x4f, 0x15, 0x3f, 0x9b, 0x62, 0x4e, 0xc1, 0xaa, 0xfd, 0x71, 0xe9, 0x1b, 0x76, 0x2d, 0xbe, + 0x60, 0xd0, 0xe9, 0xd7, 0xb6, 0x1a, 0x89, 0xb5, 0x0d, 0xde, 0x8e, 0x3f, 0x95, 0x93, 0x00, 0x1c, + 0xbe, 0xf2, 0x0d, 0x7e, 0x24, 0xb3, 0xb9, 0x3d, 0x8e, 0x4e, 0x62, 0xed, 0x70, 0x17, 0xee, 0x2c, + 0xb6, 0x73, 0xa3, 0x55, 0x38, 0x80, 0xf5, 0xe5, 0x57, 0x7a, 0x13, 0x96, 0xfd, 0xa3, 0x5f, 0x5f, + 0x7f, 0xff, 0x69, 0xd5, 0x7b, 0x35, 0x78, 0x22, 0xa4, 0x93, 0xa3, 0x50, 0xf2, 0x62, 0xbe, 0x5c, + 0x99, 0xfd, 0xb5, 0xab, 0xd2, 0x0c, 0x4d, 0x7b, 0xc3, 0xda, 0xa8, 0x65, 0xfb, 0xdc, 0xfe, 0x1b, + 0x00, 0x00, 0xff, 0xff, 0xd1, 0xda, 0x79, 0x9c, 0x39, 0x06, 0x00, 0x00, } -func (m *AttributeContext_Peer) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Peer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Peer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Address == nil { - m.Address = &core.Address{} - } - if err := m.Address.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Service = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Labels == nil { - m.Labels = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthAttributeContext - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthAttributeContext - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthAttributeContext - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthAttributeContext - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Labels[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Principal", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Principal = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AttributeContext_Request) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Request: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Time == nil { - m.Time = &types.Timestamp{} - } - if err := m.Time.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Http", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Http == nil { - m.Http = &AttributeContext_HttpRequest{} - } - if err := m.Http.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AttributeContext_HttpRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Id = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Method = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Headers == nil { - m.Headers = make(map[string]string) - } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthAttributeContext - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthAttributeContext - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthAttributeContext - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthAttributeContext - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Headers[mapkey] = mapvalue - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Path = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Host = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Scheme", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Scheme = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Query", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Query = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fragment", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Fragment = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Size_", wireType) - } - m.Size_ = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Size_ |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Protocol = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Body", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthAttributeContext - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthAttributeContext - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Body = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAttributeContext(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAttributeContext - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipAttributeContext(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthAttributeContext - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthAttributeContext - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAttributeContext - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipAttributeContext(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthAttributeContext - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthAttributeContext = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowAttributeContext = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/attribute_context.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/service/auth/v2/attribute_context.proto -package v2 +package envoy_service_auth_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _attribute_context_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on AttributeContext with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. @@ -41,53 +44,48 @@ return nil } - { - tmp := m.GetSource() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AttributeContextValidationError{ - field: "Source", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetSource()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContextValidationError{ + field: "Source", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetDestination() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AttributeContextValidationError{ - field: "Destination", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDestination()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContextValidationError{ + field: "Destination", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetRequest() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AttributeContextValidationError{ - field: "Request", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContextValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, } } } // no validation rules for ContextExtensions + if v, ok := interface{}(m.GetMetadataContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContextValidationError{ + field: "MetadataContext", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -153,17 +151,12 @@ return nil } - { - tmp := m.GetAddress() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AttributeContext_PeerValidationError{ - field: "Address", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAddress()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContext_PeerValidationError{ + field: "Address", + reason: "embedded message failed validation", + cause: err, } } } @@ -174,6 +167,8 @@ // no validation rules for Principal + // no validation rules for Certificate + return nil } @@ -241,32 +236,22 @@ return nil } - { - tmp := m.GetTime() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AttributeContext_RequestValidationError{ - field: "Time", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetTime()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContext_RequestValidationError{ + field: "Time", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetHttp() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return AttributeContext_RequestValidationError{ - field: "Http", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHttp()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AttributeContext_RequestValidationError{ + field: "Http", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,21 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/service/auth/v2/external_auth.proto -package v2 +package envoy_service_auth_v2 import ( context "context" fmt "fmt" - io "io" - math "math" - - _ "github.com/envoyproxy/protoc-gen-validate/validate" - rpc "github.com/gogo/googleapis/google/rpc" - proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + status "google.golang.org/genproto/googleapis/rpc/status" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status1 "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -27,10 +27,9 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type CheckRequest struct { - // The request attributes. Attributes *AttributeContext `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -43,26 +42,18 @@ func (*CheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor_5257cfee93a30acb, []int{0} } + func (m *CheckRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CheckRequest.Unmarshal(m, b) } func (m *CheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CheckRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CheckRequest.Marshal(b, m, deterministic) } func (m *CheckRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_CheckRequest.Merge(m, src) } func (m *CheckRequest) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CheckRequest.Size(m) } func (m *CheckRequest) XXX_DiscardUnknown() { xxx_messageInfo_CheckRequest.DiscardUnknown(m) @@ -77,20 +68,13 @@ return nil } -// HTTP attributes for a denied response. type DeniedHttpResponse struct { - // This field allows the authorization service to send a HTTP response status - // code to the downstream client other than 403 (Forbidden). - Status *_type.HttpStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - // This field allows the authorization service to send HTTP response headers - // to the downstream client. - Headers []*core.HeaderValueOption `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"` - // This field allows the authorization service to send a response body data - // to the downstream client. - Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Status *_type.HttpStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + Headers []*core.HeaderValueOption `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"` + Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DeniedHttpResponse) Reset() { *m = DeniedHttpResponse{} } @@ -99,26 +83,18 @@ func (*DeniedHttpResponse) Descriptor() ([]byte, []int) { return fileDescriptor_5257cfee93a30acb, []int{1} } + func (m *DeniedHttpResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DeniedHttpResponse.Unmarshal(m, b) } func (m *DeniedHttpResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DeniedHttpResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_DeniedHttpResponse.Marshal(b, m, deterministic) } func (m *DeniedHttpResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_DeniedHttpResponse.Merge(m, src) } func (m *DeniedHttpResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DeniedHttpResponse.Size(m) } func (m *DeniedHttpResponse) XXX_DiscardUnknown() { xxx_messageInfo_DeniedHttpResponse.DiscardUnknown(m) @@ -147,14 +123,7 @@ return "" } -// HTTP attributes for an ok response. type OkHttpResponse struct { - // HTTP entity headers in addition to the original request headers. This allows the authorization - // service to append, to add or to override headers from the original request before - // dispatching it to the upstream. By setting `append` field to `true` in the `HeaderValueOption`, - // the filter will append the correspondent header value to the matched request header. Note that - // by Leaving `append` as false, the filter will either add a new header, or override an existing - // one if there is a match. Headers []*core.HeaderValueOption `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -167,26 +136,18 @@ func (*OkHttpResponse) Descriptor() ([]byte, []int) { return fileDescriptor_5257cfee93a30acb, []int{2} } + func (m *OkHttpResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_OkHttpResponse.Unmarshal(m, b) } func (m *OkHttpResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_OkHttpResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_OkHttpResponse.Marshal(b, m, deterministic) } func (m *OkHttpResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_OkHttpResponse.Merge(m, src) } func (m *OkHttpResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_OkHttpResponse.Size(m) } func (m *OkHttpResponse) XXX_DiscardUnknown() { xxx_messageInfo_OkHttpResponse.DiscardUnknown(m) @@ -201,15 +162,8 @@ return nil } -// Intended for gRPC and Network Authorization servers `only`. type CheckResponse struct { - // Status `OK` allows the request. Status `UNKNOWN` causes Envoy to abort. Any other status - // indicates the request should be denied. - Status *rpc.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - // An message that contains HTTP response attributes. This message is - // used when the authorization service needs to send custom responses to the - // downstream client or, to modify/add request headers being dispatched to the upstream. - // + Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` // Types that are valid to be assigned to HttpResponse: // *CheckResponse_DeniedResponse // *CheckResponse_OkResponse @@ -225,26 +179,18 @@ func (*CheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor_5257cfee93a30acb, []int{3} } + func (m *CheckResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_CheckResponse.Unmarshal(m, b) } func (m *CheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_CheckResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_CheckResponse.Marshal(b, m, deterministic) } func (m *CheckResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_CheckResponse.Merge(m, src) } func (m *CheckResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_CheckResponse.Size(m) } func (m *CheckResponse) XXX_DiscardUnknown() { xxx_messageInfo_CheckResponse.DiscardUnknown(m) @@ -252,21 +198,28 @@ var xxx_messageInfo_CheckResponse proto.InternalMessageInfo +func (m *CheckResponse) GetStatus() *status.Status { + if m != nil { + return m.Status + } + return nil +} + type isCheckResponse_HttpResponse interface { isCheckResponse_HttpResponse() - MarshalTo([]byte) (int, error) - Size() int } type CheckResponse_DeniedResponse struct { DeniedResponse *DeniedHttpResponse `protobuf:"bytes,2,opt,name=denied_response,json=deniedResponse,proto3,oneof"` } + type CheckResponse_OkResponse struct { OkResponse *OkHttpResponse `protobuf:"bytes,3,opt,name=ok_response,json=okResponse,proto3,oneof"` } func (*CheckResponse_DeniedResponse) isCheckResponse_HttpResponse() {} -func (*CheckResponse_OkResponse) isCheckResponse_HttpResponse() {} + +func (*CheckResponse_OkResponse) isCheckResponse_HttpResponse() {} func (m *CheckResponse) GetHttpResponse() isCheckResponse_HttpResponse { if m != nil { @@ -275,13 +228,6 @@ return nil } -func (m *CheckResponse) GetStatus() *rpc.Status { - if m != nil { - return m.Status - } - return nil -} - func (m *CheckResponse) GetDeniedResponse() *DeniedHttpResponse { if x, ok := m.GetHttpResponse().(*CheckResponse_DeniedResponse); ok { return x.DeniedResponse @@ -296,80 +242,14 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*CheckResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _CheckResponse_OneofMarshaler, _CheckResponse_OneofUnmarshaler, _CheckResponse_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*CheckResponse) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*CheckResponse_DeniedResponse)(nil), (*CheckResponse_OkResponse)(nil), } } -func _CheckResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*CheckResponse) - // http_response - switch x := m.HttpResponse.(type) { - case *CheckResponse_DeniedResponse: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.DeniedResponse); err != nil { - return err - } - case *CheckResponse_OkResponse: - _ = b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.OkResponse); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("CheckResponse.HttpResponse has unexpected type %T", x) - } - return nil -} - -func _CheckResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*CheckResponse) - switch tag { - case 2: // http_response.denied_response - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(DeniedHttpResponse) - err := b.DecodeMessage(msg) - m.HttpResponse = &CheckResponse_DeniedResponse{msg} - return true, err - case 3: // http_response.ok_response - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(OkHttpResponse) - err := b.DecodeMessage(msg) - m.HttpResponse = &CheckResponse_OkResponse{msg} - return true, err - default: - return false, nil - } -} - -func _CheckResponse_OneofSizer(msg proto.Message) (n int) { - m := msg.(*CheckResponse) - // http_response - switch x := m.HttpResponse.(type) { - case *CheckResponse_DeniedResponse: - s := proto.Size(x.DeniedResponse) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *CheckResponse_OkResponse: - s := proto.Size(x.OkResponse) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - func init() { proto.RegisterType((*CheckRequest)(nil), "envoy.service.auth.v2.CheckRequest") proto.RegisterType((*DeniedHttpResponse)(nil), "envoy.service.auth.v2.DeniedHttpResponse") @@ -382,39 +262,39 @@ } var fileDescriptor_5257cfee93a30acb = []byte{ - // 497 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xd1, 0x8a, 0xd3, 0x4e, - 0x14, 0xc6, 0x77, 0xda, 0xff, 0xee, 0x1f, 0xa7, 0x76, 0x57, 0x07, 0x74, 0xcb, 0x22, 0xa5, 0x74, - 0x57, 0xec, 0x0a, 0x4e, 0x20, 0xde, 0x79, 0x21, 0x6c, 0x57, 0x31, 0x37, 0xb2, 0x25, 0x8a, 0x82, - 0x37, 0x65, 0x9a, 0x1c, 0x36, 0xa1, 0x25, 0x33, 0x4e, 0x4e, 0x42, 0xeb, 0x13, 0x88, 0xcf, 0xe1, - 0x53, 0x78, 0xe5, 0xa5, 0x97, 0x3e, 0x82, 0xf4, 0x4e, 0xf0, 0x21, 0x24, 0x33, 0x93, 0xba, 0xd5, - 0xd6, 0x1b, 0xef, 0x86, 0x9c, 0xef, 0xfb, 0xcd, 0xf9, 0xce, 0x9c, 0xd0, 0x53, 0xc8, 0x4a, 0xb9, - 0xf0, 0x72, 0xd0, 0x65, 0x1a, 0x81, 0x27, 0x0a, 0x4c, 0xbc, 0xd2, 0xf7, 0x60, 0x8e, 0xa0, 0x33, - 0x31, 0x1b, 0x57, 0x1f, 0xb8, 0xd2, 0x12, 0x25, 0xbb, 0x65, 0xa4, 0xdc, 0x49, 0xb9, 0xa9, 0x94, - 0xfe, 0xd1, 0x1d, 0x4b, 0x10, 0x2a, 0xad, 0x8c, 0x91, 0xd4, 0xe0, 0x4d, 0x44, 0x0e, 0xd6, 0x54, - 0x57, 0x71, 0xa1, 0xc0, 0x4b, 0x10, 0xd5, 0x38, 0x47, 0x81, 0x45, 0xee, 0xaa, 0x0f, 0x36, 0xdf, - 0x2e, 0x10, 0x75, 0x3a, 0x29, 0x10, 0xc6, 0x91, 0xcc, 0x10, 0xe6, 0xe8, 0xe4, 0x87, 0x97, 0x52, - 0x5e, 0xce, 0xc0, 0xd3, 0x2a, 0xf2, 0xd6, 0x38, 0x87, 0xa5, 0x98, 0xa5, 0xb1, 0x40, 0xf0, 0xea, - 0x83, 0x2d, 0xf4, 0x5f, 0xd3, 0xeb, 0xe7, 0x09, 0x44, 0xd3, 0x10, 0xde, 0x16, 0x90, 0x23, 0x7b, - 0x46, 0xe9, 0x0a, 0x9e, 0x77, 0x48, 0x8f, 0x0c, 0x5a, 0xfe, 0x3d, 0xbe, 0x31, 0x18, 0x3f, 0xab, - 0x85, 0xe7, 0xb6, 0x89, 0xf0, 0x8a, 0xb5, 0xff, 0x91, 0x50, 0xf6, 0x04, 0xb2, 0x14, 0xe2, 0x00, - 0x51, 0x85, 0x90, 0x2b, 0x99, 0xe5, 0xc0, 0x1e, 0xd1, 0x3d, 0xdb, 0x98, 0x63, 0xdf, 0x76, 0xec, - 0x2a, 0x3f, 0xaf, 0x94, 0x2f, 0x4c, 0x75, 0x48, 0x3f, 0x7d, 0xff, 0xdc, 0xdc, 0xfd, 0x40, 0x1a, - 0x37, 0x48, 0xe8, 0x1c, 0xec, 0x31, 0xfd, 0x3f, 0x01, 0x11, 0x83, 0xce, 0x3b, 0x8d, 0x5e, 0x73, - 0xd0, 0xf2, 0x4f, 0x9c, 0x59, 0xa8, 0xb4, 0xea, 0xa7, 0x1a, 0x2d, 0x0f, 0x8c, 0xe2, 0x95, 0x98, - 0x15, 0x70, 0xa1, 0x30, 0x95, 0x59, 0x58, 0x9b, 0x18, 0xa3, 0xff, 0x4d, 0x64, 0xbc, 0xe8, 0x34, - 0x7b, 0x64, 0x70, 0x2d, 0x34, 0xe7, 0xfe, 0x88, 0xee, 0x5f, 0x4c, 0xd7, 0x3a, 0xfc, 0xc7, 0x5b, - 0xfa, 0x3f, 0x08, 0x6d, 0xbb, 0x91, 0x3a, 0xe2, 0xfd, 0xdf, 0x32, 0x33, 0x6e, 0x9f, 0x89, 0x6b, - 0x15, 0x71, 0x9b, 0x77, 0x95, 0xf1, 0x25, 0x3d, 0x88, 0xcd, 0xd4, 0xc6, 0xda, 0xd9, 0x3b, 0x0d, - 0x63, 0x3a, 0xdd, 0xf2, 0x08, 0x7f, 0xce, 0x38, 0xd8, 0x09, 0xf7, 0x2d, 0x63, 0xd5, 0x41, 0x40, - 0x5b, 0x72, 0xfa, 0x8b, 0xd8, 0x34, 0xc4, 0xbb, 0x5b, 0x88, 0xeb, 0xf3, 0x08, 0x76, 0x42, 0x2a, - 0x57, 0x59, 0x86, 0x07, 0xb4, 0x6d, 0xb6, 0xb4, 0x66, 0xf9, 0x11, 0x6d, 0x9f, 0x15, 0x98, 0x48, - 0x9d, 0xbe, 0x13, 0xd5, 0x20, 0x58, 0x48, 0x77, 0x4d, 0x7c, 0x76, 0xbc, 0x85, 0x7f, 0x75, 0xdf, - 0x8e, 0x4e, 0xfe, 0x2e, 0x72, 0xb7, 0x3e, 0xff, 0xb2, 0xec, 0x92, 0xaf, 0xcb, 0x2e, 0xf9, 0xb6, - 0xec, 0x12, 0x7a, 0x9c, 0x4a, 0xeb, 0x52, 0x5a, 0xce, 0x17, 0x9b, 0x01, 0xc3, 0x9b, 0x4f, 0xdd, - 0x1f, 0x5a, 0x75, 0x37, 0xaa, 0x76, 0x7d, 0x44, 0xde, 0x34, 0x4a, 0xff, 0x3d, 0x21, 0x93, 0x3d, - 0xb3, 0xfb, 0x0f, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x84, 0x03, 0xe3, 0xae, 0xdc, 0x03, 0x00, - 0x00, + // 500 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xc1, 0x6e, 0x13, 0x3f, + 0x10, 0xc6, 0xe3, 0xe4, 0xdf, 0xfc, 0xc1, 0x21, 0x6d, 0xb1, 0x04, 0x8d, 0x22, 0x90, 0xa2, 0xb4, + 0x88, 0x14, 0x09, 0x5b, 0x0a, 0x17, 0x4e, 0x48, 0x4d, 0xa9, 0xc8, 0xad, 0xd1, 0x52, 0xc1, 0x31, + 0x72, 0x76, 0x47, 0xcd, 0x2a, 0xd1, 0xda, 0xd8, 0xb3, 0xab, 0x84, 0x13, 0x47, 0xc4, 0x63, 0xf0, + 0x18, 0x3c, 0x01, 0x57, 0xde, 0x83, 0x27, 0xe0, 0x84, 0xd6, 0x76, 0x42, 0x03, 0x09, 0x17, 0x6e, + 0xd6, 0xce, 0xf7, 0xfd, 0x3c, 0xdf, 0x78, 0x96, 0x9e, 0x42, 0x56, 0xa8, 0xa5, 0xb0, 0x60, 0x8a, + 0x34, 0x06, 0x21, 0x73, 0x9c, 0x8a, 0xa2, 0x2f, 0x60, 0x81, 0x60, 0x32, 0x39, 0x1f, 0x97, 0x1f, + 0xb8, 0x36, 0x0a, 0x15, 0xbb, 0xe7, 0xa4, 0x3c, 0x48, 0xb9, 0xab, 0x14, 0xfd, 0xf6, 0x03, 0x4f, + 0x90, 0x3a, 0x2d, 0x8d, 0xb1, 0x32, 0x20, 0x26, 0xd2, 0x82, 0x37, 0xb5, 0x9f, 0x6e, 0xe7, 0x4b, + 0x44, 0x93, 0x4e, 0x72, 0x84, 0x71, 0xac, 0x32, 0x84, 0x05, 0x06, 0x79, 0x80, 0xe1, 0x52, 0x83, + 0x98, 0x22, 0xea, 0xb1, 0x45, 0x89, 0xb9, 0x0d, 0xd5, 0xa3, 0x6b, 0xa5, 0xae, 0xe7, 0x20, 0x8c, + 0x8e, 0xc5, 0x46, 0xe1, 0x61, 0x9e, 0x68, 0x29, 0x64, 0x96, 0x29, 0x94, 0x98, 0xaa, 0xcc, 0x6e, + 0x96, 0x8f, 0x0a, 0x39, 0x4f, 0x13, 0x89, 0x20, 0x56, 0x07, 0x5f, 0xe8, 0xbe, 0xa5, 0x77, 0xce, + 0xa7, 0x10, 0xcf, 0x22, 0x78, 0x97, 0x83, 0x45, 0xf6, 0x8a, 0xd2, 0x75, 0x67, 0xb6, 0x45, 0x3a, + 0xa4, 0xd7, 0xe8, 0x3f, 0xe6, 0x5b, 0x73, 0xf3, 0xb3, 0x95, 0xf0, 0xdc, 0x27, 0x88, 0x6e, 0x58, + 0xbb, 0x9f, 0x09, 0x65, 0x2f, 0x21, 0x4b, 0x21, 0x19, 0x22, 0xea, 0x08, 0xac, 0x56, 0x99, 0x05, + 0xf6, 0x9c, 0xd6, 0x7d, 0x63, 0x81, 0x7d, 0x3f, 0xb0, 0xcb, 0xbc, 0xbc, 0x54, 0xbe, 0x76, 0xd5, + 0xc1, 0xad, 0x1f, 0x83, 0xbd, 0x4f, 0xa4, 0x7a, 0x48, 0xa2, 0xa0, 0x67, 0x2f, 0xe8, 0xff, 0x53, + 0x90, 0x09, 0x18, 0xdb, 0xaa, 0x76, 0x6a, 0xbd, 0x46, 0xff, 0x24, 0x58, 0xa5, 0x4e, 0xcb, 0x6e, + 0xca, 0xb9, 0xf3, 0xa1, 0x53, 0xbc, 0x91, 0xf3, 0x1c, 0x2e, 0x75, 0x39, 0x87, 0x68, 0x65, 0x62, + 0x8c, 0xfe, 0x37, 0x51, 0xc9, 0xb2, 0x55, 0xeb, 0x90, 0xde, 0xed, 0xc8, 0x9d, 0xbb, 0x23, 0xba, + 0x7f, 0x39, 0xdb, 0xe8, 0xef, 0x1f, 0x6f, 0xe9, 0x7e, 0x27, 0xb4, 0x19, 0x06, 0x1a, 0x88, 0x4f, + 0x7e, 0x4b, 0xcc, 0xb8, 0x7f, 0x43, 0x6e, 0x74, 0xcc, 0x7d, 0xda, 0x75, 0xc6, 0x2b, 0x7a, 0x90, + 0xb8, 0x99, 0x8d, 0x4d, 0xb0, 0xb7, 0xaa, 0xce, 0x74, 0xba, 0xe3, 0x09, 0xfe, 0x9c, 0xf0, 0xb0, + 0x12, 0xed, 0x7b, 0xc6, 0xba, 0x83, 0x21, 0x6d, 0xa8, 0xd9, 0x2f, 0x62, 0xcd, 0x11, 0x1f, 0xed, + 0x20, 0x6e, 0xce, 0x63, 0x58, 0x89, 0xa8, 0x5a, 0x67, 0x19, 0x1c, 0xd0, 0xa6, 0xdb, 0xc9, 0x15, + 0xab, 0x0f, 0xb4, 0x79, 0x96, 0xe3, 0x54, 0x99, 0xf4, 0xbd, 0x5b, 0x3b, 0x76, 0x45, 0xf7, 0x5c, + 0x7c, 0x76, 0xbc, 0x83, 0x7f, 0x73, 0xdb, 0xda, 0x27, 0x7f, 0x17, 0xf9, 0x4b, 0xba, 0x95, 0xc1, + 0xc5, 0x97, 0x0f, 0x5f, 0xbf, 0xd5, 0xab, 0x87, 0x84, 0x1e, 0xa7, 0xca, 0x7b, 0xb4, 0x51, 0x8b, + 0xe5, 0x76, 0xfb, 0xe0, 0xee, 0x45, 0xf8, 0x79, 0xcb, 0xde, 0x46, 0xe5, 0x9e, 0x8f, 0xc8, 0x47, + 0x42, 0x26, 0x75, 0xb7, 0xf3, 0xcf, 0x7e, 0x06, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x1b, 0x7b, 0xd5, + 0xf3, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -429,8 +309,6 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type AuthorizationClient interface { - // Performs authorization check based on the attributes associated with the - // incoming request, and returns status `OK` or not `OK`. Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) } @@ -453,11 +331,17 @@ // AuthorizationServer is the server API for Authorization service. type AuthorizationServer interface { - // Performs authorization check based on the attributes associated with the - // incoming request, and returns status `OK` or not `OK`. Check(context.Context, *CheckRequest) (*CheckResponse, error) } +// UnimplementedAuthorizationServer can be embedded to have forward compatible implementations. +type UnimplementedAuthorizationServer struct { +} + +func (*UnimplementedAuthorizationServer) Check(ctx context.Context, req *CheckRequest) (*CheckResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method Check not implemented") +} + func RegisterAuthorizationServer(s *grpc.Server, srv AuthorizationServer) { s.RegisterService(&_Authorization_serviceDesc, srv) } @@ -492,913 +376,3 @@ Streams: []grpc.StreamDesc{}, Metadata: "envoy/service/auth/v2/external_auth.proto", } - -func (m *CheckRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CheckRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Attributes != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(m.Attributes.Size())) - n1, err := m.Attributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DeniedHttpResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeniedHttpResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Status != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(m.Status.Size())) - n2, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if len(m.Headers) > 0 { - for _, msg := range m.Headers { - dAtA[i] = 0x12 - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Body) > 0 { - dAtA[i] = 0x1a - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(len(m.Body))) - i += copy(dAtA[i:], m.Body) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *OkHttpResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *OkHttpResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Headers) > 0 { - for _, msg := range m.Headers { - dAtA[i] = 0x12 - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CheckResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *CheckResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Status != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.HttpResponse != nil { - nn4, err := m.HttpResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn4 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *CheckResponse_DeniedResponse) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.DeniedResponse != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(m.DeniedResponse.Size())) - n5, err := m.DeniedResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - return i, nil -} -func (m *CheckResponse_OkResponse) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.OkResponse != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintExternalAuth(dAtA, i, uint64(m.OkResponse.Size())) - n6, err := m.OkResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - return i, nil -} -func encodeVarintExternalAuth(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *CheckRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Attributes != nil { - l = m.Attributes.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DeniedHttpResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Status != nil { - l = m.Status.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - if len(m.Headers) > 0 { - for _, e := range m.Headers { - l = e.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - } - l = len(m.Body) - if l > 0 { - n += 1 + l + sovExternalAuth(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *OkHttpResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Headers) > 0 { - for _, e := range m.Headers { - l = e.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CheckResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Status != nil { - l = m.Status.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - if m.HttpResponse != nil { - n += m.HttpResponse.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *CheckResponse_DeniedResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.DeniedResponse != nil { - l = m.DeniedResponse.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - return n -} -func (m *CheckResponse_OkResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.OkResponse != nil { - l = m.OkResponse.Size() - n += 1 + l + sovExternalAuth(uint64(l)) - } - return n -} - -func sovExternalAuth(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozExternalAuth(x uint64) (n int) { - return sovExternalAuth(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *CheckRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CheckRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CheckRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Attributes == nil { - m.Attributes = &AttributeContext{} - } - if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipExternalAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DeniedHttpResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DeniedHttpResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DeniedHttpResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Status == nil { - m.Status = &_type.HttpStatus{} - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Headers = append(m.Headers, &core.HeaderValueOption{}) - if err := m.Headers[len(m.Headers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Body", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Body = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipExternalAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *OkHttpResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: OkHttpResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: OkHttpResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Headers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Headers = append(m.Headers, &core.HeaderValueOption{}) - if err := m.Headers[len(m.Headers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipExternalAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CheckResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CheckResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CheckResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Status == nil { - m.Status = &rpc.Status{} - } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeniedResponse", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &DeniedHttpResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HttpResponse = &CheckResponse_DeniedResponse{v} - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OkResponse", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthExternalAuth - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthExternalAuth - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &OkHttpResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.HttpResponse = &CheckResponse_OkResponse{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipExternalAuth(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthExternalAuth - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipExternalAuth(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthExternalAuth - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthExternalAuth - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExternalAuth - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipExternalAuth(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthExternalAuth - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthExternalAuth = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowExternalAuth = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2/external_auth.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/service/auth/v2/external_auth.proto -package v2 +package envoy_service_auth_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _external_auth_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on CheckRequest with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -41,17 +44,12 @@ return nil } - { - tmp := m.GetAttributes() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CheckRequestValidationError{ - field: "Attributes", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetAttributes()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckRequestValidationError{ + field: "Attributes", + reason: "embedded message failed validation", + cause: err, } } } @@ -128,17 +126,12 @@ } } - { - tmp := m.GetStatus() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DeniedHttpResponseValidationError{ - field: "Status", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetStatus()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeniedHttpResponseValidationError{ + field: "Status", + reason: "embedded message failed validation", + cause: err, } } } @@ -146,17 +139,12 @@ for idx, item := range m.GetHeaders() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return DeniedHttpResponseValidationError{ - field: fmt.Sprintf("Headers[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeniedHttpResponseValidationError{ + field: fmt.Sprintf("Headers[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -235,17 +223,12 @@ for idx, item := range m.GetHeaders() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return OkHttpResponseValidationError{ - field: fmt.Sprintf("Headers[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OkHttpResponseValidationError{ + field: fmt.Sprintf("Headers[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -317,17 +300,12 @@ return nil } - { - tmp := m.GetStatus() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CheckResponseValidationError{ - field: "Status", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetStatus()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckResponseValidationError{ + field: "Status", + reason: "embedded message failed validation", + cause: err, } } } @@ -336,34 +314,24 @@ case *CheckResponse_DeniedResponse: - { - tmp := m.GetDeniedResponse() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CheckResponseValidationError{ - field: "DeniedResponse", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetDeniedResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckResponseValidationError{ + field: "DeniedResponse", + reason: "embedded message failed validation", + cause: err, } } } case *CheckResponse_OkResponse: - { - tmp := m.GetOkResponse() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return CheckResponseValidationError{ - field: "OkResponse", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetOkResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckResponseValidationError{ + field: "OkResponse", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,17 +1,17 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/service/auth/v2alpha/external_auth.proto -package v2alpha +package envoy_service_auth_v2alpha import ( context "context" fmt "fmt" - math "math" - - proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - v2 "github.com/envoyproxy/go-control-plane/envoy/service/auth/v2" + proto "github.com/golang/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -23,27 +23,25 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("envoy/service/auth/v2alpha/external_auth.proto", fileDescriptor_878c0ddb0c43de8d) } var fileDescriptor_878c0ddb0c43de8d = []byte{ - // 194 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4b, 0xcd, 0x2b, 0xcb, - 0xaf, 0xd4, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x4f, 0x2c, 0x2d, 0xc9, 0xd0, 0x2f, - 0x33, 0x4a, 0xcc, 0x29, 0xc8, 0x48, 0xd4, 0x4f, 0xad, 0x28, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0x89, - 0x07, 0x89, 0xea, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x49, 0x81, 0xd5, 0xeb, 0x41, 0xd5, 0xeb, - 0x81, 0x65, 0xa0, 0xea, 0xa5, 0x34, 0xb1, 0x9a, 0x85, 0xcd, 0x18, 0xa3, 0x64, 0x2e, 0x5e, 0xc7, - 0xd2, 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0xaa, 0xc4, 0x92, 0xcc, 0xfc, 0x3c, 0xa1, 0x20, 0x2e, 0x56, - 0xe7, 0x8c, 0xd4, 0xe4, 0x6c, 0x21, 0x65, 0x3d, 0xac, 0x36, 0xe8, 0x81, 0x65, 0x83, 0x52, 0x0b, - 0x4b, 0x53, 0x8b, 0x4b, 0xa4, 0x54, 0xf0, 0x2b, 0x2a, 0x2e, 0xc8, 0xcf, 0x2b, 0x4e, 0x75, 0x0a, - 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0xb9, 0x34, 0x32, - 0xf3, 0x21, 0xba, 0x0a, 0x8a, 0xf2, 0x2b, 0x2a, 0xf5, 0x70, 0xfb, 0xc3, 0x89, 0xcb, 0x39, 0xb5, - 0xa8, 0xa4, 0x38, 0x00, 0xe4, 0xd0, 0x00, 0xc6, 0x28, 0x76, 0xa8, 0x70, 0x07, 0x23, 0x63, 0x12, - 0x1b, 0xd8, 0xf5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x67, 0xd9, 0x7c, 0x50, 0x36, 0x01, - 0x00, 0x00, + // 176 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xce, 0xb1, 0x0e, 0x82, 0x30, + 0x10, 0x06, 0xe0, 0x30, 0xe8, 0xd0, 0xc4, 0x85, 0x91, 0x55, 0x07, 0x5d, 0xae, 0x09, 0x8e, 0x4e, + 0xc2, 0x0b, 0x10, 0x5e, 0xc0, 0x54, 0x72, 0x49, 0x1b, 0x49, 0xaf, 0xb6, 0x07, 0x01, 0x9f, 0xc0, + 0xc7, 0x36, 0x54, 0xc6, 0xea, 0x7a, 0xff, 0x97, 0xff, 0x7e, 0x01, 0x68, 0x47, 0x9a, 0x65, 0x40, + 0x3f, 0x9a, 0x0e, 0xa5, 0x1a, 0x58, 0xcb, 0xb1, 0x54, 0xbd, 0xd3, 0x4a, 0xe2, 0xc4, 0xe8, 0xad, + 0xea, 0x6f, 0xcb, 0x15, 0x9c, 0x27, 0xa6, 0xbc, 0x88, 0x1e, 0x56, 0x0f, 0x31, 0x59, 0x7d, 0x71, + 0x4a, 0x76, 0xa5, 0x6a, 0xca, 0x4e, 0xec, 0xae, 0x03, 0x6b, 0xf2, 0xe6, 0xa5, 0xd8, 0x90, 0xcd, + 0x5b, 0xb1, 0xa9, 0x35, 0x76, 0x8f, 0x7c, 0x0f, 0xc9, 0x0f, 0x10, 0xd3, 0x16, 0x9f, 0x03, 0x06, + 0x2e, 0x0e, 0xff, 0x51, 0x70, 0x64, 0x03, 0x56, 0x17, 0x71, 0x34, 0xf4, 0x95, 0xce, 0xd3, 0x34, + 0xc3, 0xef, 0xed, 0x95, 0xa8, 0xd1, 0x73, 0x68, 0x96, 0x71, 0x4d, 0xf6, 0xce, 0xb2, 0xfb, 0x36, + 0x0e, 0x3d, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xed, 0xe3, 0x41, 0xb2, 0x21, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -58,8 +56,6 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type AuthorizationClient interface { - // Performs authorization check based on the attributes associated with the - // incoming request, and returns status `OK` or not `OK`. Check(ctx context.Context, in *v2.CheckRequest, opts ...grpc.CallOption) (*v2.CheckResponse, error) } @@ -82,11 +78,17 @@ // AuthorizationServer is the server API for Authorization service. type AuthorizationServer interface { - // Performs authorization check based on the attributes associated with the - // incoming request, and returns status `OK` or not `OK`. Check(context.Context, *v2.CheckRequest) (*v2.CheckResponse, error) } +// UnimplementedAuthorizationServer can be embedded to have forward compatible implementations. +type UnimplementedAuthorizationServer struct { +} + +func (*UnimplementedAuthorizationServer) Check(ctx context.Context, req *v2.CheckRequest) (*v2.CheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") +} + func RegisterAuthorizationServer(s *grpc.Server, srv AuthorizationServer) { s.RegisterService(&_Authorization_serviceDesc, srv) } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha/external_auth.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/service/auth/v2alpha/external_auth.proto -package v2alpha +package envoy_service_auth_v2alpha import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,5 +30,8 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) + +// define the regex for a UUID once up-front +var _external_auth_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18 +1,18 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/service/discovery/v2/ads.proto -package v2 +package envoy_service_discovery_v2 import ( context "context" fmt "fmt" - io "io" - math "math" - - proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - + _ "github.com/cncf/udpa/go/udpa/annotations" v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" + proto "github.com/golang/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,10 +24,8 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// [#not-implemented-hide:] Not configuration. Workaround c++ protobuf issue with importing -// services: https://github.com/google/protobuf/issues/4221 type AdsDummy struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -40,26 +38,18 @@ func (*AdsDummy) Descriptor() ([]byte, []int) { return fileDescriptor_187fd5dcc2dab695, []int{0} } + func (m *AdsDummy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_AdsDummy.Unmarshal(m, b) } func (m *AdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AdsDummy.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_AdsDummy.Marshal(b, m, deterministic) } func (m *AdsDummy) XXX_Merge(src proto.Message) { xxx_messageInfo_AdsDummy.Merge(m, src) } func (m *AdsDummy) XXX_Size() int { - return m.Size() + return xxx_messageInfo_AdsDummy.Size(m) } func (m *AdsDummy) XXX_DiscardUnknown() { xxx_messageInfo_AdsDummy.DiscardUnknown(m) @@ -76,23 +66,24 @@ } var fileDescriptor_187fd5dcc2dab695 = []byte{ - // 251 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4e, 0xc3, 0x30, - 0x10, 0x86, 0x39, 0x06, 0x84, 0x3c, 0x66, 0x82, 0x08, 0x05, 0xa9, 0x74, 0xe8, 0xe4, 0x20, 0xf3, - 0x04, 0xad, 0xb2, 0xb0, 0x55, 0xed, 0xc6, 0xe6, 0x26, 0xa7, 0xc8, 0x82, 0xf4, 0x8c, 0xcf, 0xb1, - 0xc8, 0x1b, 0xf0, 0x68, 0x8c, 0x3c, 0x02, 0xca, 0xce, 0x3b, 0xa0, 0xc4, 0xd0, 0x22, 0xa0, 0xcc, - 0xf7, 0xfd, 0xff, 0x7f, 0xfa, 0xc4, 0x14, 0xb7, 0x81, 0xba, 0x9c, 0xd1, 0x05, 0x53, 0x62, 0x5e, - 0x19, 0x2e, 0x29, 0xa0, 0xeb, 0xf2, 0xa0, 0x72, 0x5d, 0xb1, 0xb4, 0x8e, 0x3c, 0x25, 0xe9, 0x48, - 0xc9, 0x4f, 0x4a, 0xee, 0x28, 0x19, 0x54, 0x7a, 0x11, 0x1b, 0xb4, 0x35, 0x43, 0x66, 0x7f, 0x1a, - 0x93, 0x13, 0x21, 0x4e, 0xe7, 0x15, 0x17, 0x6d, 0xd3, 0x74, 0xea, 0x1d, 0x44, 0x3a, 0xaf, 0x6b, - 0x87, 0xb5, 0xf6, 0x58, 0x15, 0x5f, 0xe4, 0x3a, 0xb6, 0x26, 0x1b, 0x71, 0xbe, 0xf6, 0x0e, 0x75, - 0xb3, 0x67, 0x56, 0xc8, 0xd4, 0xba, 0x12, 0x39, 0xc9, 0x64, 0x7c, 0x41, 0x5b, 0x23, 0x83, 0x92, - 0xbb, 0xf0, 0x0a, 0x1f, 0x5b, 0x64, 0x9f, 0x5e, 0x1e, 0xbc, 0xb3, 0xa5, 0x2d, 0xe3, 0xe4, 0x68, - 0x06, 0xd7, 0x90, 0xdc, 0x8b, 0xb3, 0x02, 0x1f, 0xbc, 0xfe, 0x6b, 0xe2, 0xea, 0x47, 0xc5, 0xc0, - 0xfd, 0xda, 0x99, 0xfe, 0x0f, 0x7d, 0x1f, 0x5b, 0xdc, 0xbe, 0xf4, 0x19, 0xbc, 0xf6, 0x19, 0xbc, - 0xf5, 0x19, 0x88, 0x99, 0xa1, 0x98, 0xb5, 0x8e, 0x9e, 0x3a, 0x79, 0xd8, 0xe8, 0x62, 0x30, 0xb6, - 0x1c, 0xec, 0x2d, 0xe1, 0xee, 0x38, 0xa8, 0x67, 0x80, 0xcd, 0xc9, 0x68, 0xf3, 0xe6, 0x23, 0x00, - 0x00, 0xff, 0xff, 0xe5, 0x2b, 0x38, 0xe9, 0xaf, 0x01, 0x00, 0x00, + // 264 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4d, 0x4e, 0xc3, 0x30, + 0x10, 0x85, 0x31, 0x8b, 0x0a, 0x79, 0x85, 0xb2, 0x82, 0x88, 0x1f, 0xa9, 0x74, 0xd1, 0x95, 0x8d, + 0xc2, 0x09, 0x52, 0xe5, 0x00, 0x55, 0x7b, 0x82, 0x69, 0x32, 0x8a, 0x2c, 0x48, 0xc6, 0x78, 0x6c, + 0x8b, 0xec, 0x58, 0x72, 0x26, 0x4e, 0xc0, 0x96, 0x83, 0x70, 0x07, 0x94, 0xa4, 0xb4, 0x08, 0x28, + 0xeb, 0xf9, 0xde, 0x7b, 0xa3, 0x4f, 0xce, 0xb0, 0x8d, 0xd4, 0x69, 0x46, 0x17, 0x4d, 0x89, 0xba, + 0x32, 0x5c, 0x52, 0x44, 0xd7, 0xe9, 0x98, 0x69, 0xa8, 0x58, 0x59, 0x47, 0x9e, 0x92, 0x74, 0xa0, + 0xd4, 0x96, 0x52, 0x3b, 0x4a, 0xc5, 0x2c, 0xbd, 0x18, 0x1b, 0xc0, 0x9a, 0x3e, 0xb3, 0x3f, 0x0d, + 0xc9, 0xf4, 0x32, 0x54, 0x16, 0x34, 0xb4, 0x2d, 0x79, 0xf0, 0x86, 0x5a, 0xd6, 0xec, 0xc1, 0x87, + 0x6d, 0xf1, 0x54, 0xca, 0x93, 0xbc, 0xe2, 0x22, 0x34, 0x4d, 0x97, 0x7d, 0x08, 0x99, 0xe6, 0x75, + 0xed, 0xb0, 0x06, 0x8f, 0x55, 0xf1, 0x55, 0xb4, 0x1e, 0x47, 0x93, 0x8d, 0x3c, 0x5f, 0x7b, 0x87, + 0xd0, 0xec, 0x99, 0x15, 0x32, 0x05, 0x57, 0x22, 0x27, 0x57, 0x6a, 0xfc, 0x10, 0xac, 0x51, 0x31, + 0x53, 0xbb, 0xf0, 0x0a, 0x1f, 0x03, 0xb2, 0x4f, 0xaf, 0x0f, 0xde, 0xd9, 0x52, 0xcb, 0x38, 0x3d, + 0x9a, 0x8b, 0x5b, 0x91, 0xdc, 0xcb, 0xb3, 0x02, 0x1f, 0x3c, 0xfc, 0x35, 0x71, 0xf3, 0xa3, 0xa2, + 0xe7, 0x7e, 0xed, 0xcc, 0xfe, 0x87, 0xbe, 0x8f, 0x2d, 0xf2, 0xd7, 0xe7, 0xb7, 0xf7, 0xc9, 0xf1, + 0xa9, 0x90, 0x73, 0x43, 0x63, 0xce, 0x3a, 0x7a, 0xea, 0xd4, 0x61, 0xd9, 0x8b, 0xde, 0xd6, 0xb2, + 0x37, 0xb7, 0x14, 0x2f, 0x42, 0x6c, 0x26, 0x83, 0xc5, 0xbb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xf0, 0xa8, 0xc5, 0xb7, 0xc6, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -107,7 +98,6 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type AggregatedDiscoveryServiceClient interface { - // This is a gRPC-only API. StreamAggregatedResources(ctx context.Context, opts ...grpc.CallOption) (AggregatedDiscoveryService_StreamAggregatedResourcesClient, error) DeltaAggregatedResources(ctx context.Context, opts ...grpc.CallOption) (AggregatedDiscoveryService_DeltaAggregatedResourcesClient, error) } @@ -184,11 +174,21 @@ // AggregatedDiscoveryServiceServer is the server API for AggregatedDiscoveryService service. type AggregatedDiscoveryServiceServer interface { - // This is a gRPC-only API. StreamAggregatedResources(AggregatedDiscoveryService_StreamAggregatedResourcesServer) error DeltaAggregatedResources(AggregatedDiscoveryService_DeltaAggregatedResourcesServer) error } +// UnimplementedAggregatedDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedAggregatedDiscoveryServiceServer struct { +} + +func (*UnimplementedAggregatedDiscoveryServiceServer) StreamAggregatedResources(srv AggregatedDiscoveryService_StreamAggregatedResourcesServer) error { + return status.Errorf(codes.Unimplemented, "method StreamAggregatedResources not implemented") +} +func (*UnimplementedAggregatedDiscoveryServiceServer) DeltaAggregatedResources(srv AggregatedDiscoveryService_DeltaAggregatedResourcesServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaAggregatedResources not implemented") +} + func RegisterAggregatedDiscoveryServiceServer(s *grpc.Server, srv AggregatedDiscoveryServiceServer) { s.RegisterService(&_AggregatedDiscoveryService_serviceDesc, srv) } @@ -265,223 +265,3 @@ }, Metadata: "envoy/service/discovery/v2/ads.proto", } - -func (m *AdsDummy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AdsDummy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintAds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *AdsDummy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovAds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozAds(x uint64) (n int) { - return sovAds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *AdsDummy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AdsDummy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AdsDummy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipAds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthAds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthAds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipAds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthAds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthAds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowAds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipAds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthAds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthAds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowAds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/ads.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/service/discovery/v2/ads.proto -package v2 +package envoy_service_discovery_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _ads_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on AdsDummy with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *AdsDummy) Validate() error { diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,21 +1,21 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/service/discovery/v2/hds.proto -package v2 +package envoy_service_discovery_v2 import ( context "context" fmt "fmt" - io "io" - math "math" - - _ "github.com/gogo/googleapis/google/api" - proto "github.com/gogo/protobuf/proto" - types "github.com/gogo/protobuf/types" - grpc "google.golang.org/grpc" - + _ "github.com/cncf/udpa/go/udpa/annotations" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" endpoint "github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -27,10 +27,8 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Different Envoy instances may have different capabilities (e.g. Redis) -// and/or have ports enabled for different protocols. type Capability_Protocol int32 const ( @@ -59,8 +57,6 @@ return fileDescriptor_773ad67555497672, []int{0, 0} } -// Defines supported protocols etc, so the management server can assign proper -// endpoints to healthcheck. type Capability struct { HealthCheckProtocols []Capability_Protocol `protobuf:"varint,1,rep,packed,name=health_check_protocols,json=healthCheckProtocols,proto3,enum=envoy.service.discovery.v2.Capability_Protocol" json:"health_check_protocols,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -74,26 +70,18 @@ func (*Capability) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{0} } + func (m *Capability) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Capability.Unmarshal(m, b) } func (m *Capability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Capability.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Capability.Marshal(b, m, deterministic) } func (m *Capability) XXX_Merge(src proto.Message) { xxx_messageInfo_Capability.Merge(m, src) } func (m *Capability) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Capability.Size(m) } func (m *Capability) XXX_DiscardUnknown() { xxx_messageInfo_Capability.DiscardUnknown(m) @@ -122,26 +110,18 @@ func (*HealthCheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{1} } + func (m *HealthCheckRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheckRequest.Unmarshal(m, b) } func (m *HealthCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheckRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheckRequest.Marshal(b, m, deterministic) } func (m *HealthCheckRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheckRequest.Merge(m, src) } func (m *HealthCheckRequest) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheckRequest.Size(m) } func (m *HealthCheckRequest) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheckRequest.DiscardUnknown(m) @@ -177,26 +157,18 @@ func (*EndpointHealth) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{2} } + func (m *EndpointHealth) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_EndpointHealth.Unmarshal(m, b) } func (m *EndpointHealth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EndpointHealth.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_EndpointHealth.Marshal(b, m, deterministic) } func (m *EndpointHealth) XXX_Merge(src proto.Message) { xxx_messageInfo_EndpointHealth.Merge(m, src) } func (m *EndpointHealth) XXX_Size() int { - return m.Size() + return xxx_messageInfo_EndpointHealth.Size(m) } func (m *EndpointHealth) XXX_DiscardUnknown() { xxx_messageInfo_EndpointHealth.DiscardUnknown(m) @@ -231,26 +203,18 @@ func (*EndpointHealthResponse) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{3} } + func (m *EndpointHealthResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_EndpointHealthResponse.Unmarshal(m, b) } func (m *EndpointHealthResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EndpointHealthResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_EndpointHealthResponse.Marshal(b, m, deterministic) } func (m *EndpointHealthResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_EndpointHealthResponse.Merge(m, src) } func (m *EndpointHealthResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_EndpointHealthResponse.Size(m) } func (m *EndpointHealthResponse) XXX_DiscardUnknown() { xxx_messageInfo_EndpointHealthResponse.DiscardUnknown(m) @@ -285,26 +249,18 @@ func (*HealthCheckRequestOrEndpointHealthResponse) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{4} } + func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Unmarshal(m, b) } func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Marshal(b, m, deterministic) } func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Merge(m, src) } func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.Size(m) } func (m *HealthCheckRequestOrEndpointHealthResponse) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheckRequestOrEndpointHealthResponse.DiscardUnknown(m) @@ -314,19 +270,19 @@ type isHealthCheckRequestOrEndpointHealthResponse_RequestType interface { isHealthCheckRequestOrEndpointHealthResponse_RequestType() - MarshalTo([]byte) (int, error) - Size() int } type HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest struct { HealthCheckRequest *HealthCheckRequest `protobuf:"bytes,1,opt,name=health_check_request,json=healthCheckRequest,proto3,oneof"` } + type HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse struct { EndpointHealthResponse *EndpointHealthResponse `protobuf:"bytes,2,opt,name=endpoint_health_response,json=endpointHealthResponse,proto3,oneof"` } func (*HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest) isHealthCheckRequestOrEndpointHealthResponse_RequestType() { } + func (*HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse) isHealthCheckRequestOrEndpointHealthResponse_RequestType() { } @@ -351,80 +307,14 @@ return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*HealthCheckRequestOrEndpointHealthResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _HealthCheckRequestOrEndpointHealthResponse_OneofMarshaler, _HealthCheckRequestOrEndpointHealthResponse_OneofUnmarshaler, _HealthCheckRequestOrEndpointHealthResponse_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HealthCheckRequestOrEndpointHealthResponse) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest)(nil), (*HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse)(nil), } } -func _HealthCheckRequestOrEndpointHealthResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*HealthCheckRequestOrEndpointHealthResponse) - // request_type - switch x := m.RequestType.(type) { - case *HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.HealthCheckRequest); err != nil { - return err - } - case *HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.EndpointHealthResponse); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("HealthCheckRequestOrEndpointHealthResponse.RequestType has unexpected type %T", x) - } - return nil -} - -func _HealthCheckRequestOrEndpointHealthResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*HealthCheckRequestOrEndpointHealthResponse) - switch tag { - case 1: // request_type.health_check_request - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(HealthCheckRequest) - err := b.DecodeMessage(msg) - m.RequestType = &HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest{msg} - return true, err - case 2: // request_type.endpoint_health_response - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(EndpointHealthResponse) - err := b.DecodeMessage(msg) - m.RequestType = &HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse{msg} - return true, err - default: - return false, nil - } -} - -func _HealthCheckRequestOrEndpointHealthResponse_OneofSizer(msg proto.Message) (n int) { - m := msg.(*HealthCheckRequestOrEndpointHealthResponse) - // request_type - switch x := m.RequestType.(type) { - case *HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest: - s := proto.Size(x.HealthCheckRequest) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse: - s := proto.Size(x.EndpointHealthResponse) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type LocalityEndpoints struct { Locality *core.Locality `protobuf:"bytes,1,opt,name=locality,proto3" json:"locality,omitempty"` Endpoints []*endpoint.Endpoint `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints,omitempty"` @@ -439,26 +329,18 @@ func (*LocalityEndpoints) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{5} } + func (m *LocalityEndpoints) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_LocalityEndpoints.Unmarshal(m, b) } func (m *LocalityEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LocalityEndpoints.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_LocalityEndpoints.Marshal(b, m, deterministic) } func (m *LocalityEndpoints) XXX_Merge(src proto.Message) { xxx_messageInfo_LocalityEndpoints.Merge(m, src) } func (m *LocalityEndpoints) XXX_Size() int { - return m.Size() + return xxx_messageInfo_LocalityEndpoints.Size(m) } func (m *LocalityEndpoints) XXX_DiscardUnknown() { xxx_messageInfo_LocalityEndpoints.DiscardUnknown(m) @@ -480,10 +362,6 @@ return nil } -// The cluster name and locality is provided to Envoy for the endpoints that it -// health checks to support statistics reporting, logging and debugging by the -// Envoy instance (outside of HDS). For maximum usefulness, it should match the -// same cluster structure as that provided by EDS. type ClusterHealthCheck struct { ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` HealthChecks []*core.HealthCheck `protobuf:"bytes,2,rep,name=health_checks,json=healthChecks,proto3" json:"health_checks,omitempty"` @@ -499,26 +377,18 @@ func (*ClusterHealthCheck) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{6} } + func (m *ClusterHealthCheck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_ClusterHealthCheck.Unmarshal(m, b) } func (m *ClusterHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ClusterHealthCheck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_ClusterHealthCheck.Marshal(b, m, deterministic) } func (m *ClusterHealthCheck) XXX_Merge(src proto.Message) { xxx_messageInfo_ClusterHealthCheck.Merge(m, src) } func (m *ClusterHealthCheck) XXX_Size() int { - return m.Size() + return xxx_messageInfo_ClusterHealthCheck.Size(m) } func (m *ClusterHealthCheck) XXX_DiscardUnknown() { xxx_messageInfo_ClusterHealthCheck.DiscardUnknown(m) @@ -548,12 +418,11 @@ } type HealthCheckSpecifier struct { - ClusterHealthChecks []*ClusterHealthCheck `protobuf:"bytes,1,rep,name=cluster_health_checks,json=clusterHealthChecks,proto3" json:"cluster_health_checks,omitempty"` - // The default is 1 second. - Interval *types.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ClusterHealthChecks []*ClusterHealthCheck `protobuf:"bytes,1,rep,name=cluster_health_checks,json=clusterHealthChecks,proto3" json:"cluster_health_checks,omitempty"` + Interval *duration.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HealthCheckSpecifier) Reset() { *m = HealthCheckSpecifier{} } @@ -562,26 +431,18 @@ func (*HealthCheckSpecifier) Descriptor() ([]byte, []int) { return fileDescriptor_773ad67555497672, []int{7} } + func (m *HealthCheckSpecifier) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HealthCheckSpecifier.Unmarshal(m, b) } func (m *HealthCheckSpecifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HealthCheckSpecifier.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HealthCheckSpecifier.Marshal(b, m, deterministic) } func (m *HealthCheckSpecifier) XXX_Merge(src proto.Message) { xxx_messageInfo_HealthCheckSpecifier.Merge(m, src) } func (m *HealthCheckSpecifier) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HealthCheckSpecifier.Size(m) } func (m *HealthCheckSpecifier) XXX_DiscardUnknown() { xxx_messageInfo_HealthCheckSpecifier.DiscardUnknown(m) @@ -596,7 +457,7 @@ return nil } -func (m *HealthCheckSpecifier) GetInterval() *types.Duration { +func (m *HealthCheckSpecifier) GetInterval() *duration.Duration { if m != nil { return m.Interval } @@ -620,55 +481,58 @@ } var fileDescriptor_773ad67555497672 = []byte{ - // 762 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0x41, 0x6f, 0x12, 0x41, - 0x14, 0x66, 0x68, 0x55, 0xfa, 0x8a, 0x48, 0xc7, 0x8a, 0x88, 0x0d, 0xad, 0x9b, 0x6a, 0x48, 0x8d, - 0x4b, 0x83, 0x31, 0x26, 0x35, 0x5e, 0x0a, 0x6d, 0x30, 0x31, 0x95, 0x0c, 0xf5, 0x66, 0x42, 0x96, - 0x65, 0x5a, 0x36, 0x6e, 0x77, 0xd6, 0x9d, 0x81, 0xc8, 0xd5, 0x93, 0xc6, 0x8b, 0x49, 0xcf, 0xfe, - 0x08, 0xe3, 0x9f, 0xf0, 0x68, 0xe2, 0xcd, 0x93, 0x69, 0xfa, 0x43, 0x0c, 0x33, 0xb3, 0xcb, 0x52, - 0x0a, 0xb6, 0x37, 0x6f, 0xec, 0x9b, 0xef, 0xbd, 0xf7, 0x7d, 0xef, 0x7b, 0x33, 0xc0, 0x3a, 0xf5, - 0xfa, 0x6c, 0x50, 0xe6, 0x34, 0xe8, 0x3b, 0x36, 0x2d, 0x77, 0x1c, 0x6e, 0xb3, 0x3e, 0x0d, 0x06, - 0xe5, 0x7e, 0xa5, 0xdc, 0xed, 0x70, 0xd3, 0x0f, 0x98, 0x60, 0xb8, 0x20, 0x51, 0xa6, 0x46, 0x99, - 0x11, 0xca, 0xec, 0x57, 0x0a, 0x2b, 0xaa, 0x82, 0xe5, 0x3b, 0xc3, 0x1c, 0x9b, 0x05, 0xb4, 0xdc, - 0xb6, 0x38, 0x55, 0x99, 0x85, 0xf5, 0xc9, 0xd3, 0x2e, 0xb5, 0x5c, 0xd1, 0x6d, 0xd9, 0x5d, 0x6a, - 0xbf, 0x3d, 0x17, 0x45, 0xbd, 0x8e, 0xcf, 0x1c, 0x4f, 0x44, 0x3f, 0x34, 0x6a, 0xe5, 0x90, 0xb1, - 0x43, 0x97, 0x4a, 0x98, 0xe5, 0x79, 0x4c, 0x58, 0xc2, 0x61, 0x9e, 0xe6, 0x58, 0x28, 0xea, 0x53, - 0xf9, 0xd5, 0xee, 0x1d, 0x94, 0x3b, 0xbd, 0x40, 0x02, 0xd4, 0xb9, 0xf1, 0x15, 0x01, 0x54, 0x2d, - 0xdf, 0x6a, 0x3b, 0xae, 0x23, 0x06, 0x98, 0x42, 0x2e, 0x4e, 0xa4, 0x25, 0x41, 0x36, 0x73, 0x79, - 0x1e, 0xad, 0xcd, 0x95, 0x32, 0x95, 0xb2, 0x39, 0x5d, 0xb3, 0x39, 0xaa, 0x63, 0x36, 0x74, 0x1e, - 0x59, 0x56, 0xe5, 0xaa, 0xc3, 0x6a, 0x61, 0x90, 0x1b, 0x25, 0x48, 0x85, 0x1f, 0x38, 0x05, 0xf3, - 0xf5, 0xfd, 0xfd, 0x46, 0x36, 0x81, 0xaf, 0xc1, 0xdc, 0x7e, 0xb5, 0x91, 0x45, 0x78, 0x01, 0xae, - 0x90, 0x9d, 0xda, 0x8b, 0x66, 0x36, 0x69, 0x7c, 0x42, 0x80, 0xeb, 0xa3, 0x12, 0x84, 0xbe, 0xeb, - 0x51, 0x2e, 0xf0, 0x43, 0x98, 0xf7, 0x58, 0x87, 0xe6, 0xd1, 0x1a, 0x2a, 0x2d, 0x56, 0x6e, 0x6b, - 0x56, 0x96, 0xef, 0x0c, 0x79, 0x0c, 0xe7, 0x69, 0xee, 0xb1, 0x0e, 0x25, 0x12, 0x84, 0x77, 0x01, - 0xec, 0x88, 0x5a, 0x3e, 0x29, 0x53, 0x1e, 0x5c, 0x4c, 0x08, 0x89, 0x65, 0x1a, 0xc7, 0x08, 0x32, - 0x3b, 0x7a, 0xf8, 0x8a, 0x13, 0x7e, 0x06, 0xa9, 0xd0, 0x0e, 0xcd, 0x65, 0x75, 0x9c, 0x4b, 0x64, - 0x56, 0x98, 0x48, 0xa2, 0x04, 0x5c, 0x83, 0xeb, 0x7a, 0xd8, 0x5c, 0x58, 0xa2, 0xc7, 0x25, 0xb5, - 0xcc, 0xd9, 0x0a, 0x52, 0x8d, 0x6a, 0xd7, 0x94, 0x30, 0x92, 0xee, 0xc6, 0xbe, 0x0c, 0x06, 0xb9, - 0x71, 0x52, 0x84, 0x72, 0x9f, 0x79, 0x9c, 0xe2, 0xd7, 0x90, 0x0d, 0x7b, 0xf1, 0x96, 0xca, 0x91, - 0x36, 0x2e, 0x56, 0x36, 0x66, 0xa9, 0x3f, 0x53, 0xed, 0x46, 0x54, 0x43, 0x05, 0x8c, 0x2f, 0x49, - 0xd8, 0x98, 0xb4, 0xe4, 0x55, 0x30, 0x85, 0x45, 0x1b, 0x96, 0xc7, 0x56, 0x2a, 0x50, 0x78, 0x3d, - 0x2e, 0x73, 0x16, 0x93, 0xc9, 0x2e, 0xf5, 0x04, 0xc1, 0xdd, 0xc9, 0x75, 0xf0, 0x20, 0x1f, 0xb2, - 0xd4, 0x42, 0x5b, 0x81, 0xee, 0xaf, 0xfd, 0xae, 0x5c, 0x42, 0xb1, 0xce, 0xac, 0x27, 0x48, 0x8e, - 0x9e, 0x7b, 0xb2, 0x9d, 0x81, 0xb4, 0x96, 0xd1, 0x12, 0x03, 0x9f, 0x1a, 0x9f, 0x11, 0x2c, 0xbd, - 0x64, 0xb6, 0x35, 0x5c, 0x93, 0xb0, 0x18, 0xc7, 0x4f, 0x21, 0xe5, 0xea, 0xa0, 0x56, 0x7b, 0xf7, - 0x1c, 0x6b, 0xc3, 0x3c, 0x12, 0x81, 0xf1, 0x73, 0x58, 0x88, 0x86, 0x9e, 0x4f, 0x4a, 0xc7, 0xfe, - 0xb9, 0x56, 0xa3, 0x0c, 0xe3, 0x37, 0x02, 0x5c, 0x75, 0x7b, 0x5c, 0xd0, 0x20, 0x36, 0x41, 0x7c, - 0x0f, 0xd2, 0xb6, 0x8a, 0xb6, 0x3c, 0xeb, 0x48, 0xdd, 0x9d, 0x05, 0xb2, 0xa8, 0x63, 0x7b, 0xd6, - 0x11, 0xc5, 0xd5, 0x68, 0x23, 0xa5, 0x57, 0x61, 0xf3, 0xe2, 0xd4, 0x8d, 0x54, 0x2e, 0xa4, 0x63, - 0x96, 0x70, 0xfc, 0x06, 0x70, 0xa8, 0xa4, 0x35, 0x92, 0x31, 0x27, 0x2b, 0x3d, 0x9a, 0x65, 0xc3, - 0xc4, 0x04, 0xc9, 0x92, 0x7b, 0x36, 0x64, 0x7c, 0x43, 0xb0, 0x1c, 0xeb, 0xdd, 0xf4, 0xa9, 0xed, - 0x1c, 0x38, 0x34, 0xc0, 0x6d, 0xb8, 0x15, 0xca, 0x1b, 0xd7, 0xa0, 0x56, 0x7e, 0xe6, 0xa2, 0x4d, - 0x4e, 0x8b, 0xdc, 0xb4, 0x27, 0x62, 0x1c, 0x3f, 0x81, 0x94, 0xe3, 0x09, 0x1a, 0xf4, 0x2d, 0x57, - 0xef, 0xd5, 0x1d, 0x53, 0x3d, 0xb0, 0x66, 0xf8, 0xc0, 0x9a, 0x35, 0xfd, 0xc0, 0x92, 0x08, 0x5a, - 0x39, 0x4d, 0x42, 0x4e, 0xd5, 0xa9, 0x85, 0x5d, 0x9b, 0x8a, 0x06, 0x3e, 0x46, 0xb0, 0xd4, 0x14, - 0x01, 0xb5, 0x8e, 0xe2, 0x56, 0xed, 0x5e, 0xee, 0x56, 0x4c, 0xbb, 0x7b, 0x85, 0xcd, 0x0b, 0xd6, - 0x89, 0xa6, 0x68, 0x24, 0x4a, 0x68, 0x13, 0xe1, 0xef, 0x08, 0xb2, 0xbb, 0x54, 0xd8, 0xdd, 0xff, - 0x83, 0xd4, 0xfd, 0x0f, 0xbf, 0x4e, 0x8f, 0x93, 0xab, 0x46, 0x61, 0xf8, 0x3f, 0x18, 0xc1, 0xb7, - 0xe2, 0x36, 0x6f, 0xa1, 0x8d, 0xed, 0x9d, 0x1f, 0x27, 0x45, 0xf4, 0xf3, 0xa4, 0x88, 0xfe, 0x9c, - 0x14, 0x11, 0x94, 0x1c, 0xa6, 0x1a, 0xf9, 0x01, 0x7b, 0x3f, 0x98, 0xd1, 0x73, 0x3b, 0x55, 0xef, - 0x70, 0xf9, 0x77, 0xd4, 0x40, 0x1f, 0x11, 0x6a, 0x5f, 0x95, 0x56, 0x3e, 0xfe, 0x1b, 0x00, 0x00, - 0xff, 0xff, 0x20, 0xa7, 0x6b, 0xb6, 0x05, 0x08, 0x00, 0x00, + // 814 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xce, 0x24, 0xbb, 0x4b, 0xfa, 0x1a, 0x42, 0x3a, 0x94, 0x6c, 0x36, 0x94, 0x65, 0xb1, 0x56, + 0x28, 0x6a, 0x85, 0x5d, 0xa5, 0x42, 0x48, 0x45, 0x5c, 0x9a, 0xb4, 0x0a, 0x12, 0x2a, 0x91, 0x53, + 0x6e, 0x48, 0x61, 0x62, 0x4f, 0x1b, 0x0b, 0xc7, 0x63, 0x3c, 0x93, 0x88, 0xdc, 0x10, 0x27, 0x10, + 0x07, 0x90, 0x7a, 0xe1, 0xc2, 0x1f, 0xc1, 0x11, 0xfe, 0x02, 0xae, 0x88, 0x1b, 0x67, 0x4e, 0x1c, + 0xf9, 0x03, 0x10, 0xca, 0xfc, 0x70, 0x9c, 0xba, 0x09, 0xed, 0x6d, 0x6f, 0xf1, 0x7b, 0xdf, 0xfb, + 0xde, 0xf7, 0xde, 0xf7, 0xec, 0xc0, 0x73, 0x1a, 0xcd, 0xd8, 0xdc, 0xe1, 0x34, 0x99, 0x05, 0x1e, + 0x75, 0xfc, 0x80, 0x7b, 0x6c, 0x46, 0x93, 0xb9, 0x33, 0x6b, 0x3b, 0x63, 0x9f, 0xdb, 0x71, 0xc2, + 0x04, 0xc3, 0x4d, 0x89, 0xb2, 0x35, 0xca, 0x4e, 0x51, 0xf6, 0xac, 0xdd, 0xdc, 0x53, 0x0c, 0x24, + 0x0e, 0x16, 0x35, 0x1e, 0x4b, 0xa8, 0x33, 0x22, 0x9c, 0xaa, 0xca, 0xe6, 0xf3, 0x7c, 0x76, 0x4c, + 0x49, 0x28, 0xc6, 0x43, 0x6f, 0x4c, 0xbd, 0xcf, 0x35, 0xca, 0x59, 0x41, 0xd1, 0xc8, 0x8f, 0x59, + 0x10, 0x89, 0xf4, 0xc7, 0xd0, 0x63, 0x93, 0x98, 0x45, 0x34, 0x12, 0x5a, 0x50, 0x73, 0xef, 0x8a, + 0xb1, 0xab, 0x90, 0xca, 0x0a, 0x12, 0x45, 0x4c, 0x10, 0x11, 0xb0, 0xc8, 0x64, 0x9f, 0xea, 0xac, + 0x7c, 0x1a, 0x4d, 0x2f, 0x1d, 0x7f, 0x9a, 0x48, 0x80, 0xc9, 0x4f, 0xfd, 0x98, 0x64, 0xeb, 0x9c, + 0x49, 0x70, 0x95, 0x10, 0x61, 0x44, 0xbf, 0x91, 0xcb, 0x73, 0x41, 0xc4, 0x54, 0xd3, 0x5b, 0x3f, + 0x21, 0x80, 0x0e, 0x89, 0xc9, 0x28, 0x08, 0x03, 0x31, 0xc7, 0x14, 0xea, 0xd9, 0x91, 0x86, 0x12, + 0xe4, 0xb1, 0x90, 0x37, 0xd0, 0xb3, 0x52, 0xab, 0xda, 0x76, 0xec, 0xf5, 0xdb, 0xb3, 0x97, 0x3c, + 0x76, 0x5f, 0xd7, 0xb9, 0xbb, 0x8a, 0xae, 0xb3, 0x60, 0x33, 0x41, 0x6e, 0xb5, 0xa0, 0x6c, 0x1e, + 0x70, 0x19, 0x1e, 0xf4, 0x2e, 0x2e, 0xfa, 0xb5, 0x02, 0x7e, 0x09, 0x4a, 0x17, 0x9d, 0x7e, 0x0d, + 0xe1, 0x2d, 0x78, 0xe8, 0x9e, 0x76, 0x3f, 0x1c, 0xd4, 0x8a, 0xd6, 0xb7, 0x08, 0x70, 0x6f, 0x49, + 0xe1, 0xd2, 0x2f, 0xa6, 0x94, 0x0b, 0x7c, 0x00, 0x0f, 0x22, 0xe6, 0xd3, 0x06, 0x7a, 0x86, 0x5a, + 0xdb, 0xed, 0xc7, 0x5a, 0x15, 0x89, 0x83, 0x85, 0x8e, 0x85, 0x33, 0xf6, 0x39, 0xf3, 0xa9, 0x2b, + 0x41, 0xf8, 0x0c, 0xc0, 0x4b, 0xa5, 0x35, 0x8a, 0xb2, 0xe4, 0xed, 0xbb, 0x0d, 0xe2, 0x66, 0x2a, + 0xad, 0x6b, 0x04, 0xd5, 0x53, 0x6d, 0xa3, 0xd2, 0x84, 0xdf, 0x87, 0xb2, 0x31, 0x56, 0x6b, 0x79, + 0x73, 0x55, 0x8b, 0xc9, 0xda, 0xa6, 0xd0, 0x4d, 0x0b, 0x70, 0x17, 0x5e, 0xd6, 0xcb, 0x56, 0x96, + 0x48, 0x69, 0xd5, 0x9b, 0x0c, 0x72, 0x1a, 0xd5, 0x6e, 0x20, 0x61, 0x6e, 0x65, 0x9c, 0x79, 0xb2, + 0x18, 0xd4, 0x57, 0x45, 0xb9, 0x94, 0xc7, 0x2c, 0xe2, 0x14, 0x7f, 0x02, 0x35, 0xd3, 0x8b, 0x0f, + 0x55, 0x8d, 0xb4, 0x71, 0xbb, 0xbd, 0xbf, 0x69, 0xfa, 0x1b, 0x6c, 0xaf, 0xa4, 0x1c, 0x2a, 0x60, + 0xfd, 0x50, 0x84, 0xfd, 0xbc, 0x25, 0x1f, 0x27, 0x6b, 0x54, 0x8c, 0x60, 0x77, 0xe5, 0xa4, 0x12, + 0x85, 0xd7, 0xeb, 0xb2, 0x37, 0x29, 0xc9, 0x77, 0xe9, 0x15, 0x5c, 0x3c, 0xce, 0x9f, 0x43, 0x04, + 0x8d, 0xf4, 0xfd, 0xd2, 0xcd, 0x12, 0xdd, 0x5f, 0xfb, 0xdd, 0xbe, 0xc7, 0xc4, 0xba, 0xb2, 0x57, + 0x70, 0xeb, 0xf4, 0xd6, 0xcc, 0x49, 0x15, 0x2a, 0x7a, 0x8c, 0xa1, 0x98, 0xc7, 0xd4, 0xfa, 0x0e, + 0xc1, 0xce, 0x47, 0xcc, 0x23, 0x8b, 0x33, 0x31, 0x64, 0x1c, 0xbf, 0x07, 0xe5, 0x50, 0x07, 0xf5, + 0xb4, 0xaf, 0xdf, 0x62, 0xad, 0xa9, 0x73, 0x53, 0x30, 0xfe, 0x00, 0xb6, 0xd2, 0xa5, 0x37, 0x8a, + 0xd2, 0xb1, 0xff, 0x3d, 0xab, 0x65, 0x85, 0xf5, 0x27, 0x02, 0xdc, 0x09, 0xa7, 0x5c, 0xd0, 0x24, + 0xb3, 0x41, 0xfc, 0x16, 0x54, 0x3c, 0x15, 0x1d, 0x46, 0x64, 0xa2, 0xde, 0x9d, 0x2d, 0x77, 0x5b, + 0xc7, 0xce, 0xc9, 0x84, 0xe2, 0x4e, 0x7a, 0x91, 0xd2, 0x2b, 0xd3, 0xfc, 0xe9, 0xda, 0x8b, 0x54, + 0x2e, 0x54, 0x32, 0x96, 0x70, 0xfc, 0x29, 0x60, 0x33, 0xc9, 0x70, 0x39, 0x46, 0x49, 0x32, 0xbd, + 0xb3, 0xc9, 0x86, 0xdc, 0x06, 0xdd, 0x9d, 0xf0, 0x66, 0xc8, 0xfa, 0x19, 0xc1, 0x6e, 0xa6, 0xf7, + 0x20, 0xa6, 0x5e, 0x70, 0x19, 0xd0, 0x04, 0x8f, 0xe0, 0x35, 0x33, 0xde, 0xea, 0x0c, 0xea, 0xe4, + 0x37, 0x1e, 0x5a, 0x7e, 0x5b, 0xee, 0xab, 0x5e, 0x2e, 0xc6, 0xf1, 0xbb, 0x50, 0x0e, 0x22, 0x41, + 0x93, 0x19, 0x09, 0xf5, 0x5d, 0x3d, 0xb1, 0xd5, 0xf7, 0xd9, 0x36, 0xdf, 0x67, 0xbb, 0xab, 0xbf, + 0xcf, 0x6e, 0x0a, 0x6d, 0xff, 0x5d, 0x84, 0xba, 0xe2, 0xe9, 0x9a, 0xae, 0x03, 0x25, 0x03, 0x5f, + 0x23, 0xd8, 0x19, 0x88, 0x84, 0x92, 0x49, 0xd6, 0xaa, 0xb3, 0xfb, 0xbd, 0x15, 0xeb, 0xde, 0xbd, + 0xe6, 0xe1, 0x1d, 0x79, 0xd2, 0x2d, 0x5a, 0x85, 0x16, 0x3a, 0x44, 0xf8, 0x17, 0x04, 0xb5, 0x33, + 0x2a, 0xbc, 0xf1, 0x8b, 0x21, 0xea, 0xe0, 0xeb, 0x3f, 0xfe, 0xba, 0x2e, 0xee, 0x59, 0xcd, 0xc5, + 0x3f, 0x6a, 0x0a, 0x3f, 0xce, 0xda, 0x2c, 0x11, 0xa5, 0x63, 0xb4, 0x7f, 0xf2, 0xd9, 0x3f, 0x3f, + 0xfe, 0xfb, 0xfd, 0xc3, 0x27, 0xf8, 0xf1, 0x6a, 0x17, 0x05, 0xb6, 0x67, 0x47, 0xbf, 0x7e, 0xf5, + 0xdb, 0xef, 0x8f, 0x8a, 0x35, 0x04, 0xad, 0x80, 0x29, 0x25, 0x71, 0xc2, 0xbe, 0x9c, 0x6f, 0x10, + 0x75, 0x52, 0xee, 0xf9, 0x5c, 0xfe, 0x5f, 0xf5, 0xd1, 0x37, 0x08, 0x8d, 0x1e, 0x49, 0xaf, 0x8f, + 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x44, 0xf0, 0xa3, 0x70, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -683,44 +547,7 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type HealthDiscoveryServiceClient interface { - // 1. Envoy starts up and if its can_healthcheck option in the static - // bootstrap config is enabled, sends HealthCheckRequest to the management - // server. It supplies its capabilities (which protocol it can health check - // with, what zone it resides in, etc.). - // 2. In response to (1), the management server designates this Envoy as a - // healthchecker to health check a subset of all upstream hosts for a given - // cluster (for example upstream Host 1 and Host 2). It streams - // HealthCheckSpecifier messages with cluster related configuration for all - // clusters this Envoy is designated to health check. Subsequent - // HealthCheckSpecifier message will be sent on changes to: - // a. Endpoints to health checks - // b. Per cluster configuration change - // 3. Envoy creates a health probe based on the HealthCheck config and sends - // it to endpoint(ip:port) of Host 1 and 2. Based on the HealthCheck - // configuration Envoy waits upon the arrival of the probe response and - // looks at the content of the response to decide whether the endpoint is - // healthy or not. If a response hasn't been received within the timeout - // interval, the endpoint health status is considered TIMEOUT. - // 4. Envoy reports results back in an EndpointHealthResponse message. - // Envoy streams responses as often as the interval configured by the - // management server in HealthCheckSpecifier. - // 5. The management Server collects health statuses for all endpoints in the - // cluster (for all clusters) and uses this information to construct - // EndpointDiscoveryResponse messages. - // 6. Once Envoy has a list of upstream endpoints to send traffic to, it load - // balances traffic to them without additional health checking. It may - // use inline healthcheck (i.e. consider endpoint UNHEALTHY if connection - // failed to a particular endpoint to account for health status propagation - // delay between HDS and EDS). - // By default, can_healthcheck is true. If can_healthcheck is false, Cluster - // configuration may not contain HealthCheck message. - // TODO(htuch): How is can_healthcheck communicated to CDS to ensure the above - // invariant? - // TODO(htuch): Add @amb67's diagram. StreamHealthCheck(ctx context.Context, opts ...grpc.CallOption) (HealthDiscoveryService_StreamHealthCheckClient, error) - // TODO(htuch): Unlike the gRPC version, there is no stream-based binding of - // request/response. Should we add an identifier to the HealthCheckSpecifier - // to bind with the response? FetchHealthCheck(ctx context.Context, in *HealthCheckRequestOrEndpointHealthResponse, opts ...grpc.CallOption) (*HealthCheckSpecifier, error) } @@ -774,47 +601,21 @@ // HealthDiscoveryServiceServer is the server API for HealthDiscoveryService service. type HealthDiscoveryServiceServer interface { - // 1. Envoy starts up and if its can_healthcheck option in the static - // bootstrap config is enabled, sends HealthCheckRequest to the management - // server. It supplies its capabilities (which protocol it can health check - // with, what zone it resides in, etc.). - // 2. In response to (1), the management server designates this Envoy as a - // healthchecker to health check a subset of all upstream hosts for a given - // cluster (for example upstream Host 1 and Host 2). It streams - // HealthCheckSpecifier messages with cluster related configuration for all - // clusters this Envoy is designated to health check. Subsequent - // HealthCheckSpecifier message will be sent on changes to: - // a. Endpoints to health checks - // b. Per cluster configuration change - // 3. Envoy creates a health probe based on the HealthCheck config and sends - // it to endpoint(ip:port) of Host 1 and 2. Based on the HealthCheck - // configuration Envoy waits upon the arrival of the probe response and - // looks at the content of the response to decide whether the endpoint is - // healthy or not. If a response hasn't been received within the timeout - // interval, the endpoint health status is considered TIMEOUT. - // 4. Envoy reports results back in an EndpointHealthResponse message. - // Envoy streams responses as often as the interval configured by the - // management server in HealthCheckSpecifier. - // 5. The management Server collects health statuses for all endpoints in the - // cluster (for all clusters) and uses this information to construct - // EndpointDiscoveryResponse messages. - // 6. Once Envoy has a list of upstream endpoints to send traffic to, it load - // balances traffic to them without additional health checking. It may - // use inline healthcheck (i.e. consider endpoint UNHEALTHY if connection - // failed to a particular endpoint to account for health status propagation - // delay between HDS and EDS). - // By default, can_healthcheck is true. If can_healthcheck is false, Cluster - // configuration may not contain HealthCheck message. - // TODO(htuch): How is can_healthcheck communicated to CDS to ensure the above - // invariant? - // TODO(htuch): Add @amb67's diagram. StreamHealthCheck(HealthDiscoveryService_StreamHealthCheckServer) error - // TODO(htuch): Unlike the gRPC version, there is no stream-based binding of - // request/response. Should we add an identifier to the HealthCheckSpecifier - // to bind with the response? FetchHealthCheck(context.Context, *HealthCheckRequestOrEndpointHealthResponse) (*HealthCheckSpecifier, error) } +// UnimplementedHealthDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedHealthDiscoveryServiceServer struct { +} + +func (*UnimplementedHealthDiscoveryServiceServer) StreamHealthCheck(srv HealthDiscoveryService_StreamHealthCheckServer) error { + return status.Errorf(codes.Unimplemented, "method StreamHealthCheck not implemented") +} +func (*UnimplementedHealthDiscoveryServiceServer) FetchHealthCheck(ctx context.Context, req *HealthCheckRequestOrEndpointHealthResponse) (*HealthCheckSpecifier, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchHealthCheck not implemented") +} + func RegisterHealthDiscoveryServiceServer(s *grpc.Server, srv HealthDiscoveryServiceServer) { s.RegisterService(&_HealthDiscoveryService_serviceDesc, srv) } @@ -882,1636 +683,3 @@ }, Metadata: "envoy/service/discovery/v2/hds.proto", } - -func (m *Capability) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Capability) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.HealthCheckProtocols) > 0 { - dAtA2 := make([]byte, len(m.HealthCheckProtocols)*10) - var j1 int - for _, num := range m.HealthCheckProtocols { - for num >= 1<<7 { - dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j1++ - } - dAtA2[j1] = uint8(num) - j1++ - } - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(j1)) - i += copy(dAtA[i:], dAtA2[:j1]) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheckRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheckRequest) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Node != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(m.Node.Size())) - n3, err := m.Node.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Capability != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHds(dAtA, i, uint64(m.Capability.Size())) - n4, err := m.Capability.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *EndpointHealth) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *EndpointHealth) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Endpoint != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(m.Endpoint.Size())) - n5, err := m.Endpoint.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } - if m.HealthStatus != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintHds(dAtA, i, uint64(m.HealthStatus)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *EndpointHealthResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *EndpointHealthResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.EndpointsHealth) > 0 { - for _, msg := range m.EndpointsHealth { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheckRequestOrEndpointHealthResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheckRequestOrEndpointHealthResponse) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.RequestType != nil { - nn6, err := m.RequestType.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += nn6 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.HealthCheckRequest != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(m.HealthCheckRequest.Size())) - n7, err := m.HealthCheckRequest.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - return i, nil -} -func (m *HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse) MarshalTo(dAtA []byte) (int, error) { - i := 0 - if m.EndpointHealthResponse != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHds(dAtA, i, uint64(m.EndpointHealthResponse.Size())) - n8, err := m.EndpointHealthResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil -} -func (m *LocalityEndpoints) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LocalityEndpoints) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Locality != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(m.Locality.Size())) - n9, err := m.Locality.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if len(m.Endpoints) > 0 { - for _, msg := range m.Endpoints { - dAtA[i] = 0x12 - i++ - i = encodeVarintHds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *ClusterHealthCheck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ClusterHealthCheck) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ClusterName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(len(m.ClusterName))) - i += copy(dAtA[i:], m.ClusterName) - } - if len(m.HealthChecks) > 0 { - for _, msg := range m.HealthChecks { - dAtA[i] = 0x12 - i++ - i = encodeVarintHds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.LocalityEndpoints) > 0 { - for _, msg := range m.LocalityEndpoints { - dAtA[i] = 0x1a - i++ - i = encodeVarintHds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *HealthCheckSpecifier) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *HealthCheckSpecifier) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.ClusterHealthChecks) > 0 { - for _, msg := range m.ClusterHealthChecks { - dAtA[i] = 0xa - i++ - i = encodeVarintHds(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Interval != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintHds(dAtA, i, uint64(m.Interval.Size())) - n10, err := m.Interval.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintHds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Capability) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.HealthCheckProtocols) > 0 { - l = 0 - for _, e := range m.HealthCheckProtocols { - l += sovHds(uint64(e)) - } - n += 1 + sovHds(uint64(l)) + l - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheckRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Node != nil { - l = m.Node.Size() - n += 1 + l + sovHds(uint64(l)) - } - if m.Capability != nil { - l = m.Capability.Size() - n += 1 + l + sovHds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *EndpointHealth) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovHds(uint64(l)) - } - if m.HealthStatus != 0 { - n += 1 + sovHds(uint64(m.HealthStatus)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *EndpointHealthResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.EndpointsHealth) > 0 { - for _, e := range m.EndpointsHealth { - l = e.Size() - n += 1 + l + sovHds(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheckRequestOrEndpointHealthResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.RequestType != nil { - n += m.RequestType.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.HealthCheckRequest != nil { - l = m.HealthCheckRequest.Size() - n += 1 + l + sovHds(uint64(l)) - } - return n -} -func (m *HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.EndpointHealthResponse != nil { - l = m.EndpointHealthResponse.Size() - n += 1 + l + sovHds(uint64(l)) - } - return n -} -func (m *LocalityEndpoints) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Locality != nil { - l = m.Locality.Size() - n += 1 + l + sovHds(uint64(l)) - } - if len(m.Endpoints) > 0 { - for _, e := range m.Endpoints { - l = e.Size() - n += 1 + l + sovHds(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *ClusterHealthCheck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClusterName) - if l > 0 { - n += 1 + l + sovHds(uint64(l)) - } - if len(m.HealthChecks) > 0 { - for _, e := range m.HealthChecks { - l = e.Size() - n += 1 + l + sovHds(uint64(l)) - } - } - if len(m.LocalityEndpoints) > 0 { - for _, e := range m.LocalityEndpoints { - l = e.Size() - n += 1 + l + sovHds(uint64(l)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *HealthCheckSpecifier) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.ClusterHealthChecks) > 0 { - for _, e := range m.ClusterHealthChecks { - l = e.Size() - n += 1 + l + sovHds(uint64(l)) - } - } - if m.Interval != nil { - l = m.Interval.Size() - n += 1 + l + sovHds(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovHds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozHds(x uint64) (n int) { - return sovHds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Capability) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Capability: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Capability: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType == 0 { - var v Capability_Protocol - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= Capability_Protocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.HealthCheckProtocols = append(m.HealthCheckProtocols, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - if elementCount != 0 && len(m.HealthCheckProtocols) == 0 { - m.HealthCheckProtocols = make([]Capability_Protocol, 0, elementCount) - } - for iNdEx < postIndex { - var v Capability_Protocol - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= Capability_Protocol(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.HealthCheckProtocols = append(m.HealthCheckProtocols, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field HealthCheckProtocols", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheckRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HealthCheckRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Node == nil { - m.Node = &core.Node{} - } - if err := m.Node.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Capability", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Capability == nil { - m.Capability = &Capability{} - } - if err := m.Capability.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointHealth) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EndpointHealth: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointHealth: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Endpoint == nil { - m.Endpoint = &endpoint.Endpoint{} - } - if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthStatus", wireType) - } - m.HealthStatus = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HealthStatus |= core.HealthStatus(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointHealthResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EndpointHealthResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointHealthResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndpointsHealth", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EndpointsHealth = append(m.EndpointsHealth, &EndpointHealth{}) - if err := m.EndpointsHealth[len(m.EndpointsHealth)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheckRequestOrEndpointHealthResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HealthCheckRequestOrEndpointHealthResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckRequestOrEndpointHealthResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthCheckRequest", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &HealthCheckRequest{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RequestType = &HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest{v} - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EndpointHealthResponse", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &EndpointHealthResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.RequestType = &HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *LocalityEndpoints) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: LocalityEndpoints: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LocalityEndpoints: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Locality", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Locality == nil { - m.Locality = &core.Locality{} - } - if err := m.Locality.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Endpoints = append(m.Endpoints, &endpoint.Endpoint{}) - if err := m.Endpoints[len(m.Endpoints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClusterHealthCheck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ClusterHealthCheck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClusterHealthCheck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthChecks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.HealthChecks = append(m.HealthChecks, &core.HealthCheck{}) - if err := m.HealthChecks[len(m.HealthChecks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalityEndpoints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.LocalityEndpoints = append(m.LocalityEndpoints, &LocalityEndpoints{}) - if err := m.LocalityEndpoints[len(m.LocalityEndpoints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthCheckSpecifier) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HealthCheckSpecifier: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckSpecifier: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterHealthChecks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClusterHealthChecks = append(m.ClusterHealthChecks, &ClusterHealthCheck{}) - if err := m.ClusterHealthChecks[len(m.ClusterHealthChecks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Interval", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthHds - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthHds - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Interval == nil { - m.Interval = &types.Duration{} - } - if err := m.Interval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipHds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipHds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthHds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthHds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipHds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthHds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthHds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/hds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/service/discovery/v2/hds.proto -package v2 +package envoy_service_discovery_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" core "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" ) @@ -32,11 +32,14 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} _ = core.HealthStatus(0) ) +// define the regex for a UUID once up-front +var _hds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on Capability with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Capability) Validate() error { @@ -109,32 +112,22 @@ return nil } - { - tmp := m.GetNode() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckRequestValidationError{ - field: "Node", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetNode()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckRequestValidationError{ + field: "Node", + reason: "embedded message failed validation", + cause: err, } } } - { - tmp := m.GetCapability() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckRequestValidationError{ - field: "Capability", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetCapability()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckRequestValidationError{ + field: "Capability", + reason: "embedded message failed validation", + cause: err, } } } @@ -206,17 +199,12 @@ return nil } - { - tmp := m.GetEndpoint() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return EndpointHealthValidationError{ - field: "Endpoint", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetEndpoint()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EndpointHealthValidationError{ + field: "Endpoint", + reason: "embedded message failed validation", + cause: err, } } } @@ -291,17 +279,12 @@ for idx, item := range m.GetEndpointsHealth() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return EndpointHealthResponseValidationError{ - field: fmt.Sprintf("EndpointsHealth[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EndpointHealthResponseValidationError{ + field: fmt.Sprintf("EndpointsHealth[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -379,34 +362,24 @@ case *HealthCheckRequestOrEndpointHealthResponse_HealthCheckRequest: - { - tmp := m.GetHealthCheckRequest() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckRequestOrEndpointHealthResponseValidationError{ - field: "HealthCheckRequest", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetHealthCheckRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckRequestOrEndpointHealthResponseValidationError{ + field: "HealthCheckRequest", + reason: "embedded message failed validation", + cause: err, } } } case *HealthCheckRequestOrEndpointHealthResponse_EndpointHealthResponse: - { - tmp := m.GetEndpointHealthResponse() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckRequestOrEndpointHealthResponseValidationError{ - field: "EndpointHealthResponse", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetEndpointHealthResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckRequestOrEndpointHealthResponseValidationError{ + field: "EndpointHealthResponse", + reason: "embedded message failed validation", + cause: err, } } } @@ -481,17 +454,12 @@ return nil } - { - tmp := m.GetLocality() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return LocalityEndpointsValidationError{ - field: "Locality", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetLocality()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LocalityEndpointsValidationError{ + field: "Locality", + reason: "embedded message failed validation", + cause: err, } } } @@ -499,17 +467,12 @@ for idx, item := range m.GetEndpoints() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return LocalityEndpointsValidationError{ - field: fmt.Sprintf("Endpoints[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LocalityEndpointsValidationError{ + field: fmt.Sprintf("Endpoints[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -588,17 +551,12 @@ for idx, item := range m.GetHealthChecks() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterHealthCheckValidationError{ - field: fmt.Sprintf("HealthChecks[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterHealthCheckValidationError{ + field: fmt.Sprintf("HealthChecks[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -608,17 +566,12 @@ for idx, item := range m.GetLocalityEndpoints() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return ClusterHealthCheckValidationError{ - field: fmt.Sprintf("LocalityEndpoints[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterHealthCheckValidationError{ + field: fmt.Sprintf("LocalityEndpoints[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } @@ -695,34 +648,24 @@ for idx, item := range m.GetClusterHealthChecks() { _, _ = idx, item - { - tmp := item - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckSpecifierValidationError{ - field: fmt.Sprintf("ClusterHealthChecks[%v]", idx), - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckSpecifierValidationError{ + field: fmt.Sprintf("ClusterHealthChecks[%v]", idx), + reason: "embedded message failed validation", + cause: err, } } } } - { - tmp := m.GetInterval() - - if v, ok := interface{}(tmp).(interface{ Validate() error }); ok { - - if err := v.Validate(); err != nil { - return HealthCheckSpecifierValidationError{ - field: "Interval", - reason: "embedded message failed validation", - cause: err, - } + if v, ok := interface{}(m.GetInterval()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HealthCheckSpecifierValidationError{ + field: "Interval", + reason: "embedded message failed validation", + cause: err, } } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,367 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/service/discovery/v2/rtds.proto + +package envoy_service_discovery_v2 + +import ( + context "context" + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + _struct "github.com/golang/protobuf/ptypes/struct" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type RtdsDummy struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RtdsDummy) Reset() { *m = RtdsDummy{} } +func (m *RtdsDummy) String() string { return proto.CompactTextString(m) } +func (*RtdsDummy) ProtoMessage() {} +func (*RtdsDummy) Descriptor() ([]byte, []int) { + return fileDescriptor_60ef541a8dd8cfbb, []int{0} +} + +func (m *RtdsDummy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RtdsDummy.Unmarshal(m, b) +} +func (m *RtdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RtdsDummy.Marshal(b, m, deterministic) +} +func (m *RtdsDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RtdsDummy.Merge(m, src) +} +func (m *RtdsDummy) XXX_Size() int { + return xxx_messageInfo_RtdsDummy.Size(m) +} +func (m *RtdsDummy) XXX_DiscardUnknown() { + xxx_messageInfo_RtdsDummy.DiscardUnknown(m) +} + +var xxx_messageInfo_RtdsDummy proto.InternalMessageInfo + +type Runtime struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Layer *_struct.Struct `protobuf:"bytes,2,opt,name=layer,proto3" json:"layer,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Runtime) Reset() { *m = Runtime{} } +func (m *Runtime) String() string { return proto.CompactTextString(m) } +func (*Runtime) ProtoMessage() {} +func (*Runtime) Descriptor() ([]byte, []int) { + return fileDescriptor_60ef541a8dd8cfbb, []int{1} +} + +func (m *Runtime) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Runtime.Unmarshal(m, b) +} +func (m *Runtime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Runtime.Marshal(b, m, deterministic) +} +func (m *Runtime) XXX_Merge(src proto.Message) { + xxx_messageInfo_Runtime.Merge(m, src) +} +func (m *Runtime) XXX_Size() int { + return xxx_messageInfo_Runtime.Size(m) +} +func (m *Runtime) XXX_DiscardUnknown() { + xxx_messageInfo_Runtime.DiscardUnknown(m) +} + +var xxx_messageInfo_Runtime proto.InternalMessageInfo + +func (m *Runtime) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Runtime) GetLayer() *_struct.Struct { + if m != nil { + return m.Layer + } + return nil +} + +func init() { + proto.RegisterType((*RtdsDummy)(nil), "envoy.service.discovery.v2.RtdsDummy") + proto.RegisterType((*Runtime)(nil), "envoy.service.discovery.v2.Runtime") +} + +func init() { + proto.RegisterFile("envoy/service/discovery/v2/rtds.proto", fileDescriptor_60ef541a8dd8cfbb) +} + +var fileDescriptor_60ef541a8dd8cfbb = []byte{ + // 444 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0x41, 0x6b, 0x13, 0x41, + 0x14, 0xc7, 0x9d, 0xb5, 0x6d, 0xe8, 0xb4, 0x82, 0x2c, 0x48, 0xc2, 0x5a, 0x6b, 0x58, 0xab, 0x84, + 0x82, 0xb3, 0xb2, 0xbd, 0xf5, 0x18, 0x82, 0xe7, 0xb2, 0x41, 0xaf, 0x32, 0xd9, 0x7d, 0xc6, 0x81, + 0xec, 0xce, 0x3a, 0xf3, 0x66, 0x74, 0x6f, 0xe2, 0x49, 0xbc, 0x78, 0x10, 0xc4, 0x0f, 0xe0, 0xa7, + 0xf0, 0x13, 0x78, 0x15, 0xbf, 0x82, 0x9f, 0x40, 0x0f, 0x82, 0x07, 0x91, 0xcc, 0xec, 0xb6, 0xa4, + 0x21, 0x9e, 0xbc, 0x25, 0xfb, 0xfb, 0xff, 0xff, 0xef, 0xbd, 0x79, 0x8f, 0xde, 0x85, 0xca, 0xca, + 0x26, 0xd1, 0xa0, 0xac, 0xc8, 0x21, 0x29, 0x84, 0xce, 0xa5, 0x05, 0xd5, 0x24, 0x36, 0x4d, 0x14, + 0x16, 0x9a, 0xd5, 0x4a, 0xa2, 0x0c, 0x23, 0x27, 0x63, 0xad, 0x8c, 0x9d, 0xcb, 0x98, 0x4d, 0xa3, + 0x03, 0x1f, 0xc1, 0x6b, 0xb1, 0x34, 0x5d, 0x20, 0xe7, 0x8c, 0x0e, 0xe6, 0x52, 0xce, 0x17, 0xe0, + 0x30, 0xaf, 0x2a, 0x89, 0x1c, 0x85, 0xac, 0xf4, 0x25, 0xea, 0xfe, 0xcd, 0xcc, 0xd3, 0x44, 0xa3, + 0x32, 0x39, 0xb6, 0x74, 0xd8, 0x26, 0x5f, 0xd8, 0x12, 0x05, 0x5a, 0x1a, 0x95, 0x43, 0xab, 0x38, + 0x34, 0x45, 0xcd, 0x57, 0x04, 0xa5, 0x98, 0x2b, 0x8e, 0x1d, 0xbf, 0xb5, 0xc6, 0x35, 0x72, 0x34, + 0x5d, 0xf9, 0xbe, 0xe5, 0x0b, 0x51, 0x70, 0x84, 0xa4, 0xfb, 0xe1, 0x41, 0xbc, 0x47, 0x77, 0x33, + 0x2c, 0xf4, 0xc4, 0x94, 0x65, 0x13, 0x3f, 0xa2, 0xbd, 0xcc, 0x54, 0x28, 0x4a, 0x08, 0x6f, 0xd2, + 0xad, 0x8a, 0x97, 0x30, 0x20, 0x43, 0x32, 0xda, 0x1d, 0xf7, 0x7e, 0x8f, 0xb7, 0x54, 0x30, 0x24, + 0x99, 0xfb, 0x18, 0xde, 0xa7, 0xdb, 0x0b, 0xde, 0x80, 0x1a, 0x04, 0x43, 0x32, 0xda, 0x4b, 0xfb, + 0xcc, 0x0f, 0xc7, 0xba, 0xe1, 0xd8, 0xd4, 0x0d, 0x97, 0x79, 0x55, 0xfa, 0x2b, 0xa0, 0xfd, 0x36, + 0x77, 0xd2, 0x3d, 0xda, 0xd4, 0x3f, 0x70, 0xf8, 0x98, 0x5e, 0x9b, 0xa2, 0x02, 0x5e, 0x76, 0x85, + 0x0f, 0x99, 0xdf, 0x00, 0xaf, 0x05, 0xb3, 0x29, 0x3b, 0x37, 0x64, 0xf0, 0xdc, 0x80, 0xc6, 0xe8, + 0xf6, 0x46, 0xae, 0x6b, 0x59, 0x69, 0x88, 0xaf, 0x8c, 0xc8, 0x03, 0x12, 0x3e, 0xa1, 0xfb, 0x13, + 0x58, 0x20, 0xef, 0x62, 0xef, 0x5c, 0xb2, 0x2d, 0xd9, 0x5a, 0xf6, 0xd1, 0xbf, 0x45, 0x2b, 0x05, + 0x5e, 0xd0, 0xfd, 0x87, 0x80, 0xf9, 0xb3, 0xff, 0xd6, 0xf7, 0xbd, 0xd7, 0xdf, 0xbe, 0xbf, 0x0f, + 0xfa, 0xf1, 0x8d, 0x95, 0xe3, 0x3a, 0x55, 0x3e, 0xdf, 0xc1, 0xab, 0xa7, 0xe4, 0x38, 0x3a, 0x7e, + 0xfb, 0xe9, 0xc3, 0xcf, 0xde, 0x11, 0x8d, 0x37, 0x5f, 0x2a, 0x6b, 0x9b, 0x1a, 0xcf, 0x7e, 0x7c, + 0xfc, 0xf3, 0x6e, 0x3b, 0x0a, 0x07, 0xab, 0xda, 0x36, 0x93, 0xd9, 0x93, 0xcf, 0xaf, 0xbe, 0x7c, + 0xdd, 0x09, 0xae, 0x13, 0x3a, 0x12, 0xd2, 0x37, 0x58, 0x2b, 0xf9, 0xb2, 0x61, 0x9b, 0xb3, 0xc7, + 0xee, 0x5e, 0xce, 0x96, 0x9b, 0x3e, 0x23, 0x6f, 0x08, 0x99, 0xed, 0xb8, 0xad, 0x9f, 0xfc, 0x0d, + 0x00, 0x00, 0xff, 0xff, 0xfb, 0x7d, 0x1e, 0xbe, 0x61, 0x03, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// RuntimeDiscoveryServiceClient is the client API for RuntimeDiscoveryService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type RuntimeDiscoveryServiceClient interface { + StreamRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_StreamRuntimeClient, error) + DeltaRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_DeltaRuntimeClient, error) + FetchRuntime(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) +} + +type runtimeDiscoveryServiceClient struct { + cc *grpc.ClientConn +} + +func NewRuntimeDiscoveryServiceClient(cc *grpc.ClientConn) RuntimeDiscoveryServiceClient { + return &runtimeDiscoveryServiceClient{cc} +} + +func (c *runtimeDiscoveryServiceClient) StreamRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_StreamRuntimeClient, error) { + stream, err := c.cc.NewStream(ctx, &_RuntimeDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.RuntimeDiscoveryService/StreamRuntime", opts...) + if err != nil { + return nil, err + } + x := &runtimeDiscoveryServiceStreamRuntimeClient{stream} + return x, nil +} + +type RuntimeDiscoveryService_StreamRuntimeClient interface { + Send(*v2.DiscoveryRequest) error + Recv() (*v2.DiscoveryResponse, error) + grpc.ClientStream +} + +type runtimeDiscoveryServiceStreamRuntimeClient struct { + grpc.ClientStream +} + +func (x *runtimeDiscoveryServiceStreamRuntimeClient) Send(m *v2.DiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *runtimeDiscoveryServiceStreamRuntimeClient) Recv() (*v2.DiscoveryResponse, error) { + m := new(v2.DiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *runtimeDiscoveryServiceClient) DeltaRuntime(ctx context.Context, opts ...grpc.CallOption) (RuntimeDiscoveryService_DeltaRuntimeClient, error) { + stream, err := c.cc.NewStream(ctx, &_RuntimeDiscoveryService_serviceDesc.Streams[1], "/envoy.service.discovery.v2.RuntimeDiscoveryService/DeltaRuntime", opts...) + if err != nil { + return nil, err + } + x := &runtimeDiscoveryServiceDeltaRuntimeClient{stream} + return x, nil +} + +type RuntimeDiscoveryService_DeltaRuntimeClient interface { + Send(*v2.DeltaDiscoveryRequest) error + Recv() (*v2.DeltaDiscoveryResponse, error) + grpc.ClientStream +} + +type runtimeDiscoveryServiceDeltaRuntimeClient struct { + grpc.ClientStream +} + +func (x *runtimeDiscoveryServiceDeltaRuntimeClient) Send(m *v2.DeltaDiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *runtimeDiscoveryServiceDeltaRuntimeClient) Recv() (*v2.DeltaDiscoveryResponse, error) { + m := new(v2.DeltaDiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *runtimeDiscoveryServiceClient) FetchRuntime(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) { + out := new(v2.DiscoveryResponse) + err := c.cc.Invoke(ctx, "/envoy.service.discovery.v2.RuntimeDiscoveryService/FetchRuntime", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RuntimeDiscoveryServiceServer is the server API for RuntimeDiscoveryService service. +type RuntimeDiscoveryServiceServer interface { + StreamRuntime(RuntimeDiscoveryService_StreamRuntimeServer) error + DeltaRuntime(RuntimeDiscoveryService_DeltaRuntimeServer) error + FetchRuntime(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) +} + +// UnimplementedRuntimeDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedRuntimeDiscoveryServiceServer struct { +} + +func (*UnimplementedRuntimeDiscoveryServiceServer) StreamRuntime(srv RuntimeDiscoveryService_StreamRuntimeServer) error { + return status.Errorf(codes.Unimplemented, "method StreamRuntime not implemented") +} +func (*UnimplementedRuntimeDiscoveryServiceServer) DeltaRuntime(srv RuntimeDiscoveryService_DeltaRuntimeServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaRuntime not implemented") +} +func (*UnimplementedRuntimeDiscoveryServiceServer) FetchRuntime(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchRuntime not implemented") +} + +func RegisterRuntimeDiscoveryServiceServer(s *grpc.Server, srv RuntimeDiscoveryServiceServer) { + s.RegisterService(&_RuntimeDiscoveryService_serviceDesc, srv) +} + +func _RuntimeDiscoveryService_StreamRuntime_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(RuntimeDiscoveryServiceServer).StreamRuntime(&runtimeDiscoveryServiceStreamRuntimeServer{stream}) +} + +type RuntimeDiscoveryService_StreamRuntimeServer interface { + Send(*v2.DiscoveryResponse) error + Recv() (*v2.DiscoveryRequest, error) + grpc.ServerStream +} + +type runtimeDiscoveryServiceStreamRuntimeServer struct { + grpc.ServerStream +} + +func (x *runtimeDiscoveryServiceStreamRuntimeServer) Send(m *v2.DiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *runtimeDiscoveryServiceStreamRuntimeServer) Recv() (*v2.DiscoveryRequest, error) { + m := new(v2.DiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _RuntimeDiscoveryService_DeltaRuntime_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(RuntimeDiscoveryServiceServer).DeltaRuntime(&runtimeDiscoveryServiceDeltaRuntimeServer{stream}) +} + +type RuntimeDiscoveryService_DeltaRuntimeServer interface { + Send(*v2.DeltaDiscoveryResponse) error + Recv() (*v2.DeltaDiscoveryRequest, error) + grpc.ServerStream +} + +type runtimeDiscoveryServiceDeltaRuntimeServer struct { + grpc.ServerStream +} + +func (x *runtimeDiscoveryServiceDeltaRuntimeServer) Send(m *v2.DeltaDiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *runtimeDiscoveryServiceDeltaRuntimeServer) Recv() (*v2.DeltaDiscoveryRequest, error) { + m := new(v2.DeltaDiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _RuntimeDiscoveryService_FetchRuntime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(v2.DiscoveryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeDiscoveryServiceServer).FetchRuntime(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/envoy.service.discovery.v2.RuntimeDiscoveryService/FetchRuntime", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeDiscoveryServiceServer).FetchRuntime(ctx, req.(*v2.DiscoveryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _RuntimeDiscoveryService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "envoy.service.discovery.v2.RuntimeDiscoveryService", + HandlerType: (*RuntimeDiscoveryServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FetchRuntime", + Handler: _RuntimeDiscoveryService_FetchRuntime_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamRuntime", + Handler: _RuntimeDiscoveryService_StreamRuntime_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "DeltaRuntime", + Handler: _RuntimeDiscoveryService_DeltaRuntime_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "envoy/service/discovery/v2/rtds.proto", +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/rtds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,182 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/service/discovery/v2/rtds.proto + +package envoy_service_discovery_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _rtds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on RtdsDummy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *RtdsDummy) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// RtdsDummyValidationError is the validation error returned by +// RtdsDummy.Validate if the designated constraints aren't met. +type RtdsDummyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RtdsDummyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RtdsDummyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RtdsDummyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RtdsDummyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RtdsDummyValidationError) ErrorName() string { return "RtdsDummyValidationError" } + +// Error satisfies the builtin error interface +func (e RtdsDummyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRtdsDummy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RtdsDummyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RtdsDummyValidationError{} + +// Validate checks the field values on Runtime with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Runtime) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return RuntimeValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if v, ok := interface{}(m.GetLayer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RuntimeValidationError{ + field: "Layer", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RuntimeValidationError is the validation error returned by Runtime.Validate +// if the designated constraints aren't met. +type RuntimeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RuntimeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RuntimeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RuntimeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RuntimeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RuntimeValidationError) ErrorName() string { return "RuntimeValidationError" } + +// Error satisfies the builtin error interface +func (e RuntimeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRuntime.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RuntimeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RuntimeValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,20 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/service/discovery/v2/sds.proto -package v2 +package envoy_service_discovery_v2 import ( context "context" fmt "fmt" - io "io" - math "math" - - _ "github.com/gogo/googleapis/google/api" - proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" v2 "github.com/envoyproxy/go-control-plane/envoy/api/v2" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -25,10 +26,8 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// [#not-implemented-hide:] Not configuration. Workaround c++ protobuf issue with importing -// services: https://github.com/google/protobuf/issues/4221 type SdsDummy struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -41,26 +40,18 @@ func (*SdsDummy) Descriptor() ([]byte, []int) { return fileDescriptor_f2a4da2e99d9a3e6, []int{0} } + func (m *SdsDummy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_SdsDummy.Unmarshal(m, b) } func (m *SdsDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SdsDummy.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_SdsDummy.Marshal(b, m, deterministic) } func (m *SdsDummy) XXX_Merge(src proto.Message) { xxx_messageInfo_SdsDummy.Merge(m, src) } func (m *SdsDummy) XXX_Size() int { - return m.Size() + return xxx_messageInfo_SdsDummy.Size(m) } func (m *SdsDummy) XXX_DiscardUnknown() { xxx_messageInfo_SdsDummy.DiscardUnknown(m) @@ -77,24 +68,30 @@ } var fileDescriptor_f2a4da2e99d9a3e6 = []byte{ - // 262 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x90, 0xb1, 0x4a, 0xc4, 0x40, - 0x10, 0x86, 0x5d, 0x0b, 0x91, 0x45, 0x9b, 0x80, 0x16, 0xcb, 0x11, 0x25, 0x58, 0x1c, 0x16, 0x1b, - 0x89, 0xdd, 0x95, 0xe1, 0xb0, 0x3e, 0x0c, 0xd8, 0xaf, 0xc9, 0x70, 0x2e, 0x98, 0x9d, 0xbd, 0x9d, - 0xbd, 0xc5, 0xb4, 0xbe, 0x82, 0x2f, 0x65, 0x29, 0xf8, 0x02, 0x12, 0x7d, 0x10, 0x49, 0xf6, 0x3c, - 0xb1, 0xb8, 0xce, 0xfa, 0xff, 0xff, 0x6f, 0x86, 0x8f, 0x5f, 0x80, 0x09, 0xd8, 0xe5, 0x04, 0x2e, - 0xe8, 0x1a, 0xf2, 0x46, 0x53, 0x8d, 0x01, 0x5c, 0x97, 0x87, 0x22, 0xa7, 0x86, 0xa4, 0x75, 0xe8, - 0x31, 0x11, 0x63, 0x4b, 0x6e, 0x5a, 0x72, 0xdb, 0x92, 0xa1, 0x10, 0x93, 0x48, 0x50, 0x56, 0x0f, - 0x9b, 0xdf, 0x68, 0x5c, 0x8a, 0xc9, 0x12, 0x71, 0xf9, 0x08, 0x63, 0xac, 0x8c, 0x41, 0xaf, 0xbc, - 0x46, 0xb3, 0xe1, 0x66, 0x9c, 0x1f, 0x56, 0x0d, 0xcd, 0xd7, 0x6d, 0xdb, 0x15, 0x9f, 0x8c, 0x9f, - 0x56, 0x50, 0x3b, 0xf0, 0xf3, 0x1f, 0x46, 0x15, 0xef, 0x25, 0x77, 0xfc, 0xb8, 0xf2, 0x0e, 0x54, - 0x1b, 0x73, 0x4a, 0x52, 0x19, 0x1f, 0x52, 0x56, 0xcb, 0x50, 0xc8, 0xed, 0xe0, 0x16, 0x56, 0x6b, - 0x20, 0x2f, 0xce, 0x76, 0xe6, 0x64, 0xd1, 0x10, 0x64, 0x7b, 0x53, 0x76, 0xc5, 0x92, 0x15, 0x3f, - 0xba, 0x01, 0x5f, 0x3f, 0xfc, 0x1b, 0xf6, 0xfc, 0xf9, 0xfd, 0xeb, 0x65, 0x5f, 0x64, 0x27, 0x7f, - 0x54, 0xcc, 0x28, 0xf2, 0x67, 0xec, 0xb2, 0x2c, 0x5f, 0xfb, 0x94, 0xbd, 0xf5, 0x29, 0xfb, 0xe8, - 0x53, 0xc6, 0xa7, 0x1a, 0x23, 0xd2, 0x3a, 0x7c, 0xea, 0xe4, 0x6e, 0xcb, 0xe5, 0xe0, 0x69, 0x31, - 0x38, 0x5b, 0xb0, 0xfb, 0x83, 0x51, 0xde, 0xf5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xad, 0xfe, - 0x01, 0x55, 0xbc, 0x01, 0x00, 0x00, + // 362 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0xb1, 0x4a, 0xc3, 0x40, + 0x18, 0xc7, 0x4d, 0xc5, 0x2a, 0x47, 0x05, 0x09, 0x68, 0x35, 0xd4, 0x5a, 0x6a, 0x91, 0xe2, 0x70, + 0x91, 0x74, 0xeb, 0x58, 0x8a, 0x73, 0x31, 0xe0, 0xaa, 0x67, 0xf2, 0xd1, 0x1e, 0x34, 0xb9, 0x78, + 0x77, 0x39, 0xcd, 0x26, 0x4e, 0xe2, 0xe2, 0x20, 0x88, 0x0f, 0xe0, 0x53, 0xf8, 0x04, 0xae, 0xe2, + 0x2b, 0x38, 0x3a, 0xe9, 0x2e, 0xd2, 0x5c, 0xda, 0x92, 0x4a, 0x9d, 0x9c, 0x7f, 0xff, 0xff, 0xef, + 0xbe, 0xe3, 0xfb, 0x50, 0x03, 0x42, 0xc5, 0x12, 0x5b, 0x00, 0x57, 0xd4, 0x03, 0xdb, 0xa7, 0xc2, + 0x63, 0x0a, 0x78, 0x62, 0x2b, 0xc7, 0x16, 0xbe, 0xc0, 0x11, 0x67, 0x92, 0x99, 0x56, 0x9a, 0xc2, + 0x59, 0x0a, 0x4f, 0x52, 0x58, 0x39, 0x56, 0x45, 0x1b, 0x48, 0x44, 0x47, 0x9d, 0x29, 0x4a, 0x9b, + 0x56, 0xa5, 0xcf, 0x58, 0x7f, 0x08, 0x29, 0x26, 0x61, 0xc8, 0x24, 0x91, 0x94, 0x85, 0x99, 0xd7, + 0xaa, 0x65, 0xdd, 0x29, 0xb0, 0x39, 0x08, 0x16, 0x73, 0x0f, 0xb2, 0x44, 0x35, 0xf6, 0x23, 0x92, + 0x0b, 0x04, 0xb4, 0xcf, 0x89, 0x1c, 0xf3, 0xed, 0x5f, 0x5c, 0x48, 0x22, 0xe3, 0xec, 0x81, 0x3a, + 0x42, 0x2b, 0xae, 0x2f, 0xba, 0x71, 0x10, 0x24, 0xce, 0x47, 0x01, 0x6d, 0xb8, 0xe0, 0x71, 0x90, + 0xdd, 0xf1, 0x90, 0xae, 0xfe, 0x90, 0x79, 0x82, 0x4a, 0x5d, 0x18, 0x4a, 0xa2, 0xb1, 0x30, 0x77, + 0xb1, 0xfe, 0x30, 0x89, 0x28, 0x56, 0x0e, 0x4e, 0xd9, 0xa4, 0x74, 0x04, 0xe7, 0x31, 0x08, 0x69, + 0x35, 0xfe, 0x0e, 0x89, 0x88, 0x85, 0x02, 0xea, 0x0b, 0x4d, 0xe3, 0xc0, 0x30, 0x8f, 0xd1, 0xaa, + 0x2b, 0x39, 0x90, 0x60, 0xfc, 0x42, 0x75, 0xa6, 0x3c, 0x2b, 0xdf, 0x99, 0xcb, 0x73, 0xde, 0x0b, + 0x54, 0x3a, 0x04, 0xe9, 0x0d, 0xfe, 0x4d, 0xbb, 0x77, 0xfd, 0xf6, 0x7e, 0x5f, 0x28, 0xd7, 0xd7, + 0x73, 0xcb, 0x6c, 0x0b, 0xed, 0x4f, 0xe1, 0x62, 0xdb, 0xd8, 0xb7, 0x6a, 0xb7, 0x4f, 0x0f, 0x5f, + 0xcb, 0x16, 0xda, 0xcc, 0xf9, 0x48, 0x2c, 0x07, 0x58, 0xcf, 0xd2, 0x39, 0xfd, 0x7c, 0xfc, 0xbe, + 0x5b, 0xda, 0x32, 0xcb, 0xf9, 0xdb, 0xd1, 0x26, 0xac, 0x5a, 0xcf, 0x57, 0x2f, 0xaf, 0xc5, 0xc2, + 0x9a, 0x81, 0x9a, 0x94, 0xe9, 0xa9, 0x22, 0xce, 0x2e, 0x13, 0x3c, 0xff, 0xd4, 0x3a, 0xa3, 0x5d, + 0xf6, 0x46, 0x7b, 0xed, 0x19, 0x37, 0x86, 0x71, 0x56, 0x4c, 0x77, 0xdc, 0xfa, 0x09, 0x00, 0x00, + 0xff, 0xff, 0x32, 0x5d, 0xb1, 0xc7, 0xc4, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -109,6 +106,7 @@ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type SecretDiscoveryServiceClient interface { + DeltaSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_DeltaSecretsClient, error) StreamSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_StreamSecretsClient, error) FetchSecrets(ctx context.Context, in *v2.DiscoveryRequest, opts ...grpc.CallOption) (*v2.DiscoveryResponse, error) } @@ -121,8 +119,39 @@ return &secretDiscoveryServiceClient{cc} } +func (c *secretDiscoveryServiceClient) DeltaSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_DeltaSecretsClient, error) { + stream, err := c.cc.NewStream(ctx, &_SecretDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.SecretDiscoveryService/DeltaSecrets", opts...) + if err != nil { + return nil, err + } + x := &secretDiscoveryServiceDeltaSecretsClient{stream} + return x, nil +} + +type SecretDiscoveryService_DeltaSecretsClient interface { + Send(*v2.DeltaDiscoveryRequest) error + Recv() (*v2.DeltaDiscoveryResponse, error) + grpc.ClientStream +} + +type secretDiscoveryServiceDeltaSecretsClient struct { + grpc.ClientStream +} + +func (x *secretDiscoveryServiceDeltaSecretsClient) Send(m *v2.DeltaDiscoveryRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *secretDiscoveryServiceDeltaSecretsClient) Recv() (*v2.DeltaDiscoveryResponse, error) { + m := new(v2.DeltaDiscoveryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *secretDiscoveryServiceClient) StreamSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretDiscoveryService_StreamSecretsClient, error) { - stream, err := c.cc.NewStream(ctx, &_SecretDiscoveryService_serviceDesc.Streams[0], "/envoy.service.discovery.v2.SecretDiscoveryService/StreamSecrets", opts...) + stream, err := c.cc.NewStream(ctx, &_SecretDiscoveryService_serviceDesc.Streams[1], "/envoy.service.discovery.v2.SecretDiscoveryService/StreamSecrets", opts...) if err != nil { return nil, err } @@ -163,14 +192,55 @@ // SecretDiscoveryServiceServer is the server API for SecretDiscoveryService service. type SecretDiscoveryServiceServer interface { + DeltaSecrets(SecretDiscoveryService_DeltaSecretsServer) error StreamSecrets(SecretDiscoveryService_StreamSecretsServer) error FetchSecrets(context.Context, *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) } +// UnimplementedSecretDiscoveryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedSecretDiscoveryServiceServer struct { +} + +func (*UnimplementedSecretDiscoveryServiceServer) DeltaSecrets(srv SecretDiscoveryService_DeltaSecretsServer) error { + return status.Errorf(codes.Unimplemented, "method DeltaSecrets not implemented") +} +func (*UnimplementedSecretDiscoveryServiceServer) StreamSecrets(srv SecretDiscoveryService_StreamSecretsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamSecrets not implemented") +} +func (*UnimplementedSecretDiscoveryServiceServer) FetchSecrets(ctx context.Context, req *v2.DiscoveryRequest) (*v2.DiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchSecrets not implemented") +} + func RegisterSecretDiscoveryServiceServer(s *grpc.Server, srv SecretDiscoveryServiceServer) { s.RegisterService(&_SecretDiscoveryService_serviceDesc, srv) } +func _SecretDiscoveryService_DeltaSecrets_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SecretDiscoveryServiceServer).DeltaSecrets(&secretDiscoveryServiceDeltaSecretsServer{stream}) +} + +type SecretDiscoveryService_DeltaSecretsServer interface { + Send(*v2.DeltaDiscoveryResponse) error + Recv() (*v2.DeltaDiscoveryRequest, error) + grpc.ServerStream +} + +type secretDiscoveryServiceDeltaSecretsServer struct { + grpc.ServerStream +} + +func (x *secretDiscoveryServiceDeltaSecretsServer) Send(m *v2.DeltaDiscoveryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *secretDiscoveryServiceDeltaSecretsServer) Recv() (*v2.DeltaDiscoveryRequest, error) { + m := new(v2.DeltaDiscoveryRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func _SecretDiscoveryService_StreamSecrets_Handler(srv interface{}, stream grpc.ServerStream) error { return srv.(SecretDiscoveryServiceServer).StreamSecrets(&secretDiscoveryServiceStreamSecretsServer{stream}) } @@ -226,6 +296,12 @@ }, Streams: []grpc.StreamDesc{ { + StreamName: "DeltaSecrets", + Handler: _SecretDiscoveryService_DeltaSecrets_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { StreamName: "StreamSecrets", Handler: _SecretDiscoveryService_StreamSecrets_Handler, ServerStreams: true, @@ -234,223 +310,3 @@ }, Metadata: "envoy/service/discovery/v2/sds.proto", } - -func (m *SdsDummy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SdsDummy) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintSds(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *SdsDummy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovSds(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozSds(x uint64) (n int) { - return sovSds(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *SdsDummy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSds - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SdsDummy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SdsDummy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipSds(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthSds - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthSds - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipSds(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthSds - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthSds - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSds - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipSds(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthSds - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthSds = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowSds = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2/sds.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-validate. DO NOT EDIT. // source: envoy/service/discovery/v2/sds.proto -package v2 +package envoy_service_discovery_v2 import ( "bytes" @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _sds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on SdsDummy with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *SdsDummy) Validate() error { diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,144 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/hash_policy.proto + +package envoy_type + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type HashPolicy struct { + // Types that are valid to be assigned to PolicySpecifier: + // *HashPolicy_SourceIp_ + PolicySpecifier isHashPolicy_PolicySpecifier `protobuf_oneof:"policy_specifier"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HashPolicy) Reset() { *m = HashPolicy{} } +func (m *HashPolicy) String() string { return proto.CompactTextString(m) } +func (*HashPolicy) ProtoMessage() {} +func (*HashPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_b409d49e989a073d, []int{0} +} + +func (m *HashPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HashPolicy.Unmarshal(m, b) +} +func (m *HashPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HashPolicy.Marshal(b, m, deterministic) +} +func (m *HashPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_HashPolicy.Merge(m, src) +} +func (m *HashPolicy) XXX_Size() int { + return xxx_messageInfo_HashPolicy.Size(m) +} +func (m *HashPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_HashPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_HashPolicy proto.InternalMessageInfo + +type isHashPolicy_PolicySpecifier interface { + isHashPolicy_PolicySpecifier() +} + +type HashPolicy_SourceIp_ struct { + SourceIp *HashPolicy_SourceIp `protobuf:"bytes,1,opt,name=source_ip,json=sourceIp,proto3,oneof"` +} + +func (*HashPolicy_SourceIp_) isHashPolicy_PolicySpecifier() {} + +func (m *HashPolicy) GetPolicySpecifier() isHashPolicy_PolicySpecifier { + if m != nil { + return m.PolicySpecifier + } + return nil +} + +func (m *HashPolicy) GetSourceIp() *HashPolicy_SourceIp { + if x, ok := m.GetPolicySpecifier().(*HashPolicy_SourceIp_); ok { + return x.SourceIp + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*HashPolicy) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*HashPolicy_SourceIp_)(nil), + } +} + +type HashPolicy_SourceIp struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HashPolicy_SourceIp) Reset() { *m = HashPolicy_SourceIp{} } +func (m *HashPolicy_SourceIp) String() string { return proto.CompactTextString(m) } +func (*HashPolicy_SourceIp) ProtoMessage() {} +func (*HashPolicy_SourceIp) Descriptor() ([]byte, []int) { + return fileDescriptor_b409d49e989a073d, []int{0, 0} +} + +func (m *HashPolicy_SourceIp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HashPolicy_SourceIp.Unmarshal(m, b) +} +func (m *HashPolicy_SourceIp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HashPolicy_SourceIp.Marshal(b, m, deterministic) +} +func (m *HashPolicy_SourceIp) XXX_Merge(src proto.Message) { + xxx_messageInfo_HashPolicy_SourceIp.Merge(m, src) +} +func (m *HashPolicy_SourceIp) XXX_Size() int { + return xxx_messageInfo_HashPolicy_SourceIp.Size(m) +} +func (m *HashPolicy_SourceIp) XXX_DiscardUnknown() { + xxx_messageInfo_HashPolicy_SourceIp.DiscardUnknown(m) +} + +var xxx_messageInfo_HashPolicy_SourceIp proto.InternalMessageInfo + +func init() { + proto.RegisterType((*HashPolicy)(nil), "envoy.type.HashPolicy") + proto.RegisterType((*HashPolicy_SourceIp)(nil), "envoy.type.HashPolicy.SourceIp") +} + +func init() { proto.RegisterFile("envoy/type/hash_policy.proto", fileDescriptor_b409d49e989a073d) } + +var fileDescriptor_b409d49e989a073d = []byte{ + // 219 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x48, 0x2c, 0xce, 0x88, 0x2f, 0xc8, 0xcf, 0xc9, + 0x4c, 0xae, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0xcb, 0xea, 0x81, 0x64, 0xa5, + 0x64, 0x4b, 0x53, 0x0a, 0x12, 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, + 0x8a, 0xf5, 0x8b, 0x4b, 0x12, 0x4b, 0x4a, 0x8b, 0x21, 0x4a, 0xa5, 0xc4, 0xcb, 0x12, 0x73, 0x32, + 0x53, 0x12, 0x4b, 0x52, 0xf5, 0x61, 0x0c, 0x88, 0x84, 0x52, 0x21, 0x17, 0x97, 0x47, 0x62, 0x71, + 0x46, 0x00, 0xd8, 0x5c, 0x21, 0x3b, 0x2e, 0xce, 0xe2, 0xfc, 0xd2, 0xa2, 0xe4, 0xd4, 0xf8, 0xcc, + 0x02, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x79, 0x3d, 0x84, 0x2d, 0x7a, 0x08, 0xa5, 0x7a, + 0xc1, 0x60, 0x75, 0x9e, 0x05, 0x1e, 0x0c, 0x41, 0x1c, 0xc5, 0x50, 0xb6, 0x14, 0x17, 0x17, 0x07, + 0x4c, 0xdc, 0x49, 0x9c, 0x4b, 0x00, 0xe2, 0xda, 0xf8, 0xe2, 0x82, 0xd4, 0xe4, 0xcc, 0xb4, 0xcc, + 0xd4, 0x22, 0x21, 0xe6, 0x1f, 0x4e, 0x8c, 0x4e, 0xa6, 0xbb, 0x1a, 0x4e, 0x5c, 0x64, 0x63, 0x12, + 0x60, 0xe4, 0x92, 0xc8, 0xcc, 0x87, 0x98, 0x5e, 0x50, 0x94, 0x5f, 0x51, 0x89, 0x64, 0x91, 0x13, + 0x3f, 0xc2, 0xa6, 0x00, 0x90, 0x3b, 0x03, 0x18, 0x93, 0xd8, 0xc0, 0x0e, 0x36, 0x06, 0x04, 0x00, + 0x00, 0xff, 0xff, 0xac, 0xf3, 0x7d, 0x5a, 0x14, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/hash_policy.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,190 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/hash_policy.proto + +package envoy_type + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _hash_policy_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on HashPolicy with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *HashPolicy) Validate() error { + if m == nil { + return nil + } + + switch m.PolicySpecifier.(type) { + + case *HashPolicy_SourceIp_: + + if v, ok := interface{}(m.GetSourceIp()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return HashPolicyValidationError{ + field: "SourceIp", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return HashPolicyValidationError{ + field: "PolicySpecifier", + reason: "value is required", + } + + } + + return nil +} + +// HashPolicyValidationError is the validation error returned by +// HashPolicy.Validate if the designated constraints aren't met. +type HashPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HashPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HashPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HashPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HashPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HashPolicyValidationError) ErrorName() string { return "HashPolicyValidationError" } + +// Error satisfies the builtin error interface +func (e HashPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHashPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HashPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HashPolicyValidationError{} + +// Validate checks the field values on HashPolicy_SourceIp with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *HashPolicy_SourceIp) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// HashPolicy_SourceIpValidationError is the validation error returned by +// HashPolicy_SourceIp.Validate if the designated constraints aren't met. +type HashPolicy_SourceIpValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e HashPolicy_SourceIpValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e HashPolicy_SourceIpValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e HashPolicy_SourceIpValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e HashPolicy_SourceIpValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e HashPolicy_SourceIpValidationError) ErrorName() string { + return "HashPolicy_SourceIpValidationError" +} + +// Error satisfies the builtin error interface +func (e HashPolicy_SourceIpValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sHashPolicy_SourceIp.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = HashPolicy_SourceIpValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = HashPolicy_SourceIpValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,71 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/http.proto + +package envoy_type + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type CodecClientType int32 + +const ( + CodecClientType_HTTP1 CodecClientType = 0 + CodecClientType_HTTP2 CodecClientType = 1 + CodecClientType_HTTP3 CodecClientType = 2 +) + +var CodecClientType_name = map[int32]string{ + 0: "HTTP1", + 1: "HTTP2", + 2: "HTTP3", +} + +var CodecClientType_value = map[string]int32{ + "HTTP1": 0, + "HTTP2": 1, + "HTTP3": 2, +} + +func (x CodecClientType) String() string { + return proto.EnumName(CodecClientType_name, int32(x)) +} + +func (CodecClientType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_e223f71709aae71c, []int{0} +} + +func init() { + proto.RegisterEnum("envoy.type.CodecClientType", CodecClientType_name, CodecClientType_value) +} + +func init() { proto.RegisterFile("envoy/type/http.proto", fileDescriptor_e223f71709aae71c) } + +var fileDescriptor_e223f71709aae71c = []byte{ + // 162 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x28, 0x29, 0x29, 0xd0, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0xe2, 0x02, 0x0b, 0xeb, 0x81, 0x84, 0xa5, 0x64, 0x4b, 0x53, 0x0a, 0x12, 0xf5, 0x13, + 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0xf5, 0x8b, 0x4b, 0x12, 0x4b, 0x4a, + 0x8b, 0x21, 0x4a, 0xb5, 0x8c, 0xb8, 0xf8, 0x9d, 0xf3, 0x53, 0x52, 0x93, 0x9d, 0x73, 0x32, 0x53, + 0xf3, 0x4a, 0x42, 0x2a, 0x0b, 0x52, 0x85, 0x38, 0xb9, 0x58, 0x3d, 0x42, 0x42, 0x02, 0x0c, 0x05, + 0x18, 0x60, 0x4c, 0x23, 0x01, 0x46, 0x18, 0xd3, 0x58, 0x80, 0xc9, 0x49, 0x7f, 0x57, 0xc3, 0x89, + 0x8b, 0x6c, 0x4c, 0x02, 0x8c, 0x5c, 0x12, 0x99, 0xf9, 0x7a, 0x60, 0xbb, 0x0a, 0x8a, 0xf2, 0x2b, + 0x2a, 0xf5, 0x10, 0xd6, 0x3a, 0x71, 0x7a, 0x94, 0x94, 0x14, 0x04, 0x80, 0xac, 0x08, 0x60, 0x4c, + 0x62, 0x03, 0xdb, 0x65, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xaf, 0xbe, 0x34, 0x37, 0xaf, 0x00, + 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,37 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/http.proto + +package envoy_type + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _http_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,15 +1,14 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/type/http_status.proto package envoy_type import ( fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - proto "github.com/gogo/protobuf/proto" + proto "github.com/golang/protobuf/proto" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -21,15 +20,11 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// HTTP response codes supported in Envoy. -// For more details: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml type StatusCode int32 const ( - // Empty - This code not part of the HTTP status code specification, but it is needed for proto - // `enum` type. StatusCode_Empty StatusCode = 0 StatusCode_Continue StatusCode = 100 StatusCode_OK StatusCode = 200 @@ -217,9 +212,7 @@ return fileDescriptor_7544d7adacd3389b, []int{0} } -// HTTP status. type HttpStatus struct { - // Supplies HTTP response code. Code StatusCode `protobuf:"varint,1,opt,name=code,proto3,enum=envoy.type.StatusCode" json:"code,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -232,26 +225,18 @@ func (*HttpStatus) Descriptor() ([]byte, []int) { return fileDescriptor_7544d7adacd3389b, []int{0} } + func (m *HttpStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_HttpStatus.Unmarshal(m, b) } func (m *HttpStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_HttpStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_HttpStatus.Marshal(b, m, deterministic) } func (m *HttpStatus) XXX_Merge(src proto.Message) { xxx_messageInfo_HttpStatus.Merge(m, src) } func (m *HttpStatus) XXX_Size() int { - return m.Size() + return xxx_messageInfo_HttpStatus.Size(m) } func (m *HttpStatus) XXX_DiscardUnknown() { xxx_messageInfo_HttpStatus.DiscardUnknown(m) @@ -274,311 +259,64 @@ func init() { proto.RegisterFile("envoy/type/http_status.proto", fileDescriptor_7544d7adacd3389b) } var fileDescriptor_7544d7adacd3389b = []byte{ - // 931 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0x49, 0x73, 0x5b, 0x45, - 0x10, 0xce, 0xd3, 0x64, 0xf3, 0x64, 0xeb, 0x4c, 0x9c, 0xd8, 0x84, 0xe0, 0x72, 0xe5, 0x44, 0x71, - 0xb0, 0xab, 0xe0, 0xc4, 0x0d, 0xdb, 0xb1, 0x63, 0x17, 0x96, 0xa2, 0x92, 0xa5, 0x5c, 0xa9, 0xf1, - 0x9b, 0x96, 0x34, 0x95, 0xa7, 0xe9, 0x97, 0x79, 0x2d, 0xd9, 0x8f, 0x23, 0xbf, 0x80, 0x7d, 0x5f, - 0x0f, 0x2c, 0x45, 0x25, 0x04, 0x0a, 0xb8, 0x70, 0xe2, 0x18, 0xf6, 0xfc, 0x04, 0xca, 0x37, 0xee, - 0xec, 0x50, 0x40, 0xcd, 0x68, 0xb1, 0x2f, 0xdc, 0xf4, 0x7a, 0x7a, 0xf9, 0x96, 0x56, 0xcb, 0x4b, - 0xe8, 0x06, 0x54, 0x2e, 0x72, 0x99, 0xe3, 0x62, 0x97, 0x39, 0x7f, 0xa2, 0x60, 0xcd, 0xfd, 0x62, - 0x21, 0xf7, 0xc4, 0xa4, 0x64, 0x7c, 0x5d, 0x08, 0xaf, 0x17, 0x67, 0x06, 0x3a, 0xb3, 0x46, 0x33, - 0x2e, 0x8e, 0x7f, 0x0c, 0x93, 0x2e, 0xd7, 0xa4, 0x5c, 0x67, 0xce, 0xb7, 0x62, 0xa1, 0x7a, 0x4c, - 0x1e, 0x4e, 0xc9, 0xe0, 0x6c, 0x32, 0x9f, 0x3c, 0x78, 0xfa, 0xe1, 0x0b, 0x0b, 0xfb, 0x1d, 0x16, - 0x86, 0x19, 0x2b, 0x64, 0x70, 0x79, 0xfa, 0x8b, 0x9f, 0xbe, 0x14, 0x47, 0x9e, 0x4a, 0x2a, 0xf3, - 0x87, 0xc6, 0xbf, 0x20, 0x69, 0xc4, 0xca, 0x87, 0x3e, 0x9f, 0x92, 0x72, 0x3f, 0x55, 0x4d, 0xc9, - 0x23, 0xab, 0xbd, 0x9c, 0x4b, 0x38, 0xa4, 0x4e, 0xca, 0xe3, 0x2b, 0xe4, 0xd8, 0xba, 0x3e, 0x82, - 0x51, 0xc7, 0x64, 0xe5, 0xda, 0xe3, 0x70, 0x37, 0x51, 0x27, 0xe5, 0xb1, 0x15, 0x8f, 0x9a, 0xd1, - 0xc0, 0x57, 0x89, 0x3a, 0x25, 0x8f, 0x2f, 0xa5, 0x29, 0xe6, 0xe1, 0xf3, 0xeb, 0x44, 0xcd, 0xcb, - 0xfb, 0x6b, 0xe4, 0x96, 0xfa, 0xdc, 0x25, 0x6f, 0x59, 0xb3, 0x1d, 0xe0, 0x86, 0x6b, 0x93, 0xef, - 0x69, 0xb6, 0xe4, 0xe0, 0x9b, 0x44, 0x9d, 0x96, 0x53, 0x35, 0x0a, 0x7d, 0xd1, 0x31, 0x7c, 0x9b, - 0xa8, 0xb3, 0xf2, 0x64, 0x03, 0x0b, 0xe4, 0x71, 0xe8, 0xbb, 0x44, 0x9d, 0x93, 0xa7, 0xeb, 0xda, - 0xb3, 0xd5, 0xd9, 0x38, 0xf8, 0x7d, 0xa2, 0x40, 0x9e, 0xa8, 0xf6, 0x33, 0xb6, 0x43, 0xac, 0xf0, - 0x43, 0xa2, 0xa6, 0xe5, 0x99, 0xa5, 0xcc, 0xa3, 0x36, 0x65, 0x03, 0x73, 0xf2, 0x01, 0xc1, 0xbd, - 0x44, 0x9d, 0x90, 0x47, 0x37, 0xaa, 0xad, 0x02, 0x0d, 0xec, 0xc5, 0x94, 0x58, 0x94, 0x67, 0xb8, - 0xd2, 0x25, 0x9b, 0x62, 0x01, 0xb7, 0x2a, 0xea, 0xbc, 0x84, 0x2a, 0x0d, 0xd0, 0xd4, 0xd1, 0xf7, - 0xb4, 0x43, 0xc7, 0x59, 0x09, 0xb7, 0x2b, 0x4a, 0xca, 0x23, 0x6b, 0xd4, 0x77, 0x06, 0x3e, 0xaa, - 0x04, 0x5a, 0x5b, 0x88, 0xd7, 0xb8, 0x8b, 0x1e, 0xee, 0x54, 0xc2, 0xf0, 0x1a, 0x71, 0x95, 0x8c, - 0x6d, 0x5b, 0x34, 0xf0, 0x71, 0x4c, 0x68, 0x15, 0x58, 0xf7, 0xb4, 0x5b, 0xc2, 0x27, 0x15, 0x75, - 0x41, 0x9e, 0x6d, 0x62, 0x2f, 0x27, 0xaf, 0x7d, 0xd9, 0x40, 0x63, 0x3d, 0xa6, 0x0c, 0x9f, 0xc6, - 0xf8, 0x64, 0xca, 0x24, 0xfe, 0x59, 0x45, 0x9d, 0x91, 0x72, 0x59, 0x9b, 0x06, 0xde, 0xec, 0x63, - 0xc1, 0xf0, 0xb4, 0x08, 0x32, 0xb4, 0x9c, 0x1e, 0xea, 0xf6, 0x24, 0x1a, 0x78, 0x46, 0x04, 0xf0, - 0x75, 0x5d, 0xf6, 0x62, 0xe5, 0xcd, 0xbe, 0xf5, 0x68, 0xe0, 0x59, 0x11, 0xf4, 0x5b, 0x23, 0xbf, - 0x6d, 0x8d, 0x41, 0x07, 0xcf, 0x89, 0x00, 0xa4, 0x46, 0x3c, 0x04, 0xfe, 0xbc, 0x88, 0xdc, 0x90, - 0xbb, 0x64, 0x6a, 0xc4, 0x4b, 0x59, 0x46, 0x3b, 0x68, 0xe0, 0x05, 0xa1, 0x94, 0x3c, 0x15, 0x02, - 0xd1, 0x29, 0xbd, 0x9d, 0x21, 0xbc, 0x28, 0x82, 0x57, 0x11, 0x7f, 0x70, 0x0b, 0x1d, 0xdb, 0x34, - 0x7a, 0x34, 0x99, 0xf5, 0x92, 0x08, 0x46, 0x8c, 0x20, 0x36, 0x6d, 0x0f, 0xa9, 0xcf, 0xf0, 0x72, - 0x1c, 0xb8, 0x42, 0xae, 0x9d, 0xd9, 0x94, 0xe1, 0x15, 0xa1, 0xa6, 0xe4, 0xe1, 0xab, 0xe4, 0x10, - 0x5e, 0x8d, 0xe9, 0x9b, 0xe8, 0x3a, 0xdc, 0x9d, 0xf4, 0x78, 0x4d, 0xa8, 0x19, 0xa9, 0xea, 0x1e, - 0x53, 0x72, 0xc6, 0x86, 0xf6, 0x6b, 0xda, 0x66, 0x68, 0xe0, 0xf5, 0x31, 0xbd, 0x8c, 0xb4, 0x69, - 0x12, 0x6d, 0x6a, 0xdf, 0x41, 0x78, 0x43, 0x04, 0x61, 0x5a, 0x8d, 0x8d, 0x10, 0x21, 0xd7, 0x81, - 0x37, 0x85, 0xba, 0x4f, 0x4e, 0xb7, 0x5c, 0xd1, 0xcf, 0x87, 0x0e, 0x57, 0xd1, 0x58, 0xdd, 0x2c, - 0x73, 0x84, 0xb7, 0x84, 0x9a, 0x95, 0xe7, 0x1a, 0xda, 0x75, 0xb0, 0x46, 0xbc, 0xa5, 0xd9, 0x16, - 0x6d, 0x1b, 0xa9, 0xbd, 0x2d, 0x82, 0xec, 0xab, 0xbb, 0x39, 0xa6, 0xac, 0x0f, 0xcc, 0x7c, 0x27, - 0x82, 0xa9, 0xda, 0x62, 0x68, 0x03, 0x4e, 0xe4, 0x7f, 0x37, 0xb6, 0x6a, 0xb9, 0xdc, 0x53, 0x8a, - 0x45, 0x11, 0x9a, 0xac, 0x3a, 0xb6, 0x5c, 0xc2, 0x7b, 0x22, 0xec, 0xd3, 0x26, 0xa5, 0x37, 0xd0, - 0xc0, 0xfb, 0x51, 0xdd, 0x61, 0xb3, 0x2b, 0x98, 0xa3, 0x33, 0xe8, 0xd2, 0x12, 0x3e, 0x88, 0x54, - 0x5a, 0x79, 0xc7, 0x6b, 0x83, 0x13, 0xe6, 0x1f, 0x46, 0xe4, 0x07, 0x99, 0x4f, 0x9e, 0x6e, 0xc5, - 0x82, 0x26, 0x51, 0x55, 0xbb, 0x72, 0x84, 0xa1, 0x80, 0xdb, 0xd1, 0x90, 0xd1, 0xe7, 0x3a, 0x6a, - 0x83, 0x7e, 0xcd, 0x62, 0x66, 0x8a, 0x89, 0x3a, 0x77, 0x22, 0xcc, 0x0d, 0xc7, 0xe8, 0x9d, 0xce, - 0xb6, 0xd0, 0x0f, 0xd0, 0xaf, 0x7a, 0x4f, 0x1e, 0x7e, 0x8e, 0xda, 0xd7, 0x88, 0x37, 0x7a, 0x79, - 0x86, 0x61, 0x63, 0xd0, 0xc0, 0x2f, 0x62, 0xb4, 0x65, 0x57, 0x35, 0xe3, 0x8e, 0x2e, 0xe1, 0xd7, - 0xc8, 0x3f, 0xd4, 0xd9, 0x14, 0x5b, 0x4e, 0x0f, 0xb4, 0xcd, 0xa2, 0x60, 0xbf, 0xc5, 0xf2, 0x51, - 0xda, 0xd8, 0xe9, 0xdf, 0x85, 0xba, 0x24, 0x67, 0xd6, 0x9b, 0xcd, 0xfa, 0x75, 0xf4, 0x85, 0x25, - 0x17, 0x54, 0x1e, 0xdb, 0x00, 0x7f, 0x08, 0x75, 0x51, 0x9e, 0xbf, 0xae, 0xbd, 0xd5, 0x8e, 0x97, - 0xb2, 0x82, 0x6a, 0xd8, 0x21, 0xb6, 0x9a, 0xb1, 0x80, 0x3f, 0x47, 0x38, 0x8b, 0x7e, 0xbb, 0x6d, - 0x53, 0x8b, 0x8e, 0xb7, 0x98, 0xbc, 0xee, 0x20, 0xfc, 0x15, 0xf7, 0x7c, 0x93, 0x28, 0xbf, 0x82, - 0x1c, 0x2d, 0x80, 0xbf, 0xc5, 0xe8, 0xcf, 0xb5, 0xba, 0xcb, 0x41, 0x51, 0x03, 0xff, 0x08, 0x75, - 0x59, 0x3e, 0x50, 0x43, 0xde, 0x21, 0x7f, 0xe3, 0x7f, 0x76, 0xf3, 0x5f, 0xb1, 0xfc, 0xe8, 0xdd, - 0xbd, 0xb9, 0xe4, 0xde, 0xde, 0x5c, 0xf2, 0xe3, 0xde, 0x5c, 0x22, 0x67, 0x2d, 0x0d, 0x6f, 0x5f, - 0x1e, 0x36, 0xfa, 0xc0, 0x19, 0x5c, 0x3e, 0xb3, 0x7f, 0x2d, 0xeb, 0xe1, 0x80, 0xd6, 0x93, 0xed, - 0xa3, 0xf1, 0x92, 0x3e, 0xf2, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6d, 0xca, 0xec, 0x2e, 0x8e, - 0x05, 0x00, 0x00, -} - -func (m *HttpStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + // 936 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0x49, 0x6f, 0x1c, 0x45, + 0x14, 0x4e, 0x4f, 0x3b, 0x76, 0x5c, 0x71, 0xec, 0x97, 0xca, 0x62, 0x63, 0x12, 0xc9, 0xca, 0x09, + 0x71, 0xb0, 0x25, 0x10, 0xdc, 0xbd, 0xc6, 0x16, 0x9e, 0xc9, 0x68, 0x3c, 0x93, 0x2b, 0x2a, 0x77, + 0xbd, 0x99, 0x29, 0xa5, 0xa7, 0x5e, 0xa7, 0xfa, 0xf5, 0xd8, 0xcd, 0x09, 0xf1, 0x0b, 0xd8, 0xf7, + 0xf5, 0xc0, 0x22, 0x94, 0x10, 0x10, 0x70, 0xe1, 0x17, 0x84, 0x1d, 0xfe, 0x02, 0xbf, 0x81, 0x35, + 0x20, 0x40, 0x55, 0xb3, 0xd8, 0x97, 0xdc, 0x66, 0x5e, 0xbd, 0xe5, 0x5b, 0x5e, 0x3f, 0x71, 0x09, + 0x6d, 0x9f, 0xca, 0x15, 0x2e, 0x33, 0x5c, 0xe9, 0x32, 0x67, 0x4f, 0xe6, 0xac, 0xb8, 0xc8, 0x97, + 0x33, 0x47, 0x4c, 0x52, 0x84, 0xd7, 0x65, 0xff, 0xba, 0x78, 0xb9, 0xd0, 0x99, 0x5a, 0x51, 0xd6, + 0x12, 0x2b, 0x36, 0x64, 0xf3, 0x95, 0xe3, 0xa9, 0x8b, 0xf3, 0x7d, 0x95, 0x1a, 0xad, 0x18, 0x57, + 0x46, 0x3f, 0x06, 0x0f, 0x57, 0x36, 0x84, 0xd8, 0x66, 0xce, 0xf6, 0x42, 0xb2, 0x7c, 0x5c, 0x4c, + 0x24, 0xa4, 0x71, 0x21, 0x5a, 0x8a, 0x1e, 0x9a, 0x7d, 0xe4, 0xe2, 0xf2, 0xd1, 0x80, 0xe5, 0x41, + 0xc6, 0x3a, 0x69, 0x5c, 0x13, 0xf7, 0xd6, 0xa6, 0x9e, 0x89, 0x26, 0x20, 0x5a, 0x3a, 0xd1, 0x08, + 0xf9, 0x0f, 0x7f, 0x39, 0x2d, 0xc4, 0x51, 0x82, 0x9c, 0x16, 0x27, 0x37, 0x7b, 0x19, 0x97, 0x70, + 0x42, 0xce, 0x88, 0x53, 0xeb, 0x64, 0xd9, 0xd8, 0x02, 0x41, 0xcb, 0x29, 0x51, 0xb9, 0xf6, 0x04, + 0xdc, 0x8d, 0xe4, 0x8c, 0x98, 0x5a, 0x77, 0xa8, 0x18, 0x35, 0x7c, 0x1d, 0xc9, 0x33, 0xe2, 0xd4, + 0x6a, 0x92, 0x60, 0xe6, 0xff, 0x7e, 0x13, 0xc9, 0x25, 0xf1, 0x60, 0x8d, 0xec, 0x6a, 0xc1, 0x5d, + 0x72, 0xc6, 0xd3, 0xe9, 0xe3, 0x8e, 0x6d, 0x93, 0xeb, 0x05, 0x66, 0xf0, 0x6d, 0x24, 0x67, 0xc5, + 0x74, 0x8d, 0x7c, 0x5f, 0xb4, 0x0c, 0xdf, 0x45, 0xf2, 0xac, 0x98, 0x69, 0x60, 0x8e, 0x3c, 0x0a, + 0x7d, 0x1f, 0xc9, 0x73, 0x62, 0xb6, 0xae, 0x1c, 0x1b, 0x95, 0x8e, 0x82, 0x3f, 0x44, 0x12, 0xc4, + 0xe9, 0x6a, 0x91, 0xb2, 0x19, 0x60, 0x85, 0x1f, 0x23, 0x79, 0x5e, 0xcc, 0xad, 0xa6, 0x0e, 0x95, + 0x2e, 0x1b, 0x98, 0x91, 0xf3, 0x08, 0x7e, 0x8a, 0xe4, 0x69, 0x31, 0xb9, 0x53, 0x6d, 0xe5, 0xa8, + 0xe1, 0x97, 0x90, 0x12, 0x8a, 0xb2, 0x14, 0xd7, 0xbb, 0x64, 0x12, 0xcc, 0xe1, 0x56, 0x45, 0x5e, + 0x10, 0x50, 0xa5, 0x3e, 0xea, 0x3a, 0xba, 0x9e, 0xb2, 0x68, 0x39, 0x2d, 0xe1, 0x76, 0x45, 0x0a, + 0x71, 0x72, 0x8b, 0x0a, 0xab, 0xe1, 0x93, 0x8a, 0xa7, 0xb5, 0x87, 0x78, 0x8d, 0xbb, 0xe8, 0xe0, + 0x4e, 0xc5, 0x0f, 0xaf, 0x11, 0x57, 0x49, 0x9b, 0xb6, 0x41, 0x0d, 0x9f, 0x86, 0x84, 0x56, 0x8e, + 0x75, 0x47, 0x87, 0x25, 0x7c, 0x56, 0x91, 0x17, 0xc5, 0xd9, 0x26, 0xf6, 0x32, 0x72, 0xca, 0x95, + 0x0d, 0xd4, 0xc6, 0x61, 0xc2, 0xf0, 0x79, 0x88, 0x8f, 0xa7, 0x8c, 0xe3, 0x5f, 0x54, 0xe4, 0x9c, + 0x10, 0x6b, 0x4a, 0x37, 0xf0, 0x66, 0x81, 0x39, 0xc3, 0xb3, 0xb1, 0x97, 0xa1, 0x65, 0xd5, 0x40, + 0xb7, 0xa7, 0x50, 0xc3, 0x73, 0xb1, 0x07, 0x5f, 0x57, 0x65, 0x2f, 0x54, 0xde, 0x2c, 0x8c, 0x43, + 0x0d, 0xcf, 0xc7, 0x5e, 0xbf, 0x2d, 0x72, 0xfb, 0x46, 0x6b, 0xb4, 0xf0, 0x42, 0xec, 0x81, 0xd4, + 0x88, 0x07, 0xc0, 0x5f, 0x8c, 0x03, 0x37, 0xe4, 0x2e, 0xe9, 0x1a, 0xf1, 0x6a, 0x9a, 0xd2, 0x01, + 0x6a, 0x78, 0x29, 0x96, 0x52, 0x9c, 0xf1, 0x81, 0xe0, 0x94, 0xda, 0x4f, 0x11, 0x5e, 0x8e, 0xbd, + 0x57, 0x01, 0xbf, 0x77, 0x0b, 0x2d, 0x9b, 0x24, 0x78, 0x34, 0x9e, 0xf5, 0x4a, 0xec, 0x8d, 0x18, + 0x42, 0x6c, 0x9a, 0x1e, 0x52, 0xc1, 0xf0, 0x6a, 0x18, 0xb8, 0x4e, 0xb6, 0x9d, 0x9a, 0x84, 0xe1, + 0xb5, 0x58, 0x4e, 0x8b, 0x89, 0xab, 0x64, 0x11, 0x5e, 0x0f, 0xe9, 0xbb, 0x68, 0x3b, 0xdc, 0x1d, + 0xf7, 0x78, 0x23, 0x96, 0xf3, 0x42, 0xd6, 0x1d, 0x26, 0x64, 0xb5, 0xf1, 0xed, 0xb7, 0x94, 0x49, + 0x51, 0xc3, 0x9b, 0x23, 0x7a, 0x29, 0x29, 0xdd, 0x24, 0xda, 0x55, 0xae, 0x83, 0xf0, 0x56, 0xec, + 0x85, 0x69, 0x35, 0x76, 0x7c, 0x84, 0x6c, 0x07, 0xde, 0x8e, 0xe5, 0x03, 0xe2, 0x7c, 0xcb, 0xe6, + 0x45, 0x36, 0x70, 0xb8, 0x8a, 0xda, 0xa8, 0x66, 0x99, 0x21, 0xbc, 0x13, 0xcb, 0x05, 0x71, 0xae, + 0xa1, 0x6c, 0x07, 0x6b, 0xc4, 0x7b, 0x8a, 0x4d, 0xde, 0x36, 0x81, 0xda, 0xbb, 0xb1, 0x97, 0x7d, + 0xf3, 0x30, 0xc3, 0x64, 0xf0, 0x41, 0x0d, 0x67, 0xbe, 0x17, 0xc0, 0x54, 0x4d, 0x3e, 0xb0, 0x01, + 0xc7, 0xf2, 0xbf, 0x1f, 0x5a, 0xb5, 0x6c, 0xe6, 0x28, 0xc1, 0x3c, 0xf7, 0x4d, 0x36, 0x2d, 0x1b, + 0x2e, 0xe1, 0x83, 0xd8, 0xef, 0xd3, 0x2e, 0x25, 0x37, 0x50, 0xc3, 0x87, 0x41, 0xdd, 0x41, 0xb3, + 0x0d, 0xcc, 0xd0, 0x6a, 0xb4, 0x49, 0x09, 0x1f, 0x05, 0x2a, 0xad, 0xac, 0xe3, 0x94, 0xc6, 0x31, + 0xf3, 0x8f, 0x03, 0xf2, 0xe3, 0xcc, 0xc7, 0x4f, 0xb7, 0x42, 0x41, 0x93, 0xa8, 0xaa, 0x6c, 0x39, + 0xc4, 0x90, 0xc3, 0xed, 0x60, 0xc8, 0xf0, 0xef, 0x36, 0x2a, 0x8d, 0x6e, 0xcb, 0x60, 0xaa, 0xf3, + 0xb1, 0x3a, 0x77, 0x02, 0xcc, 0x1d, 0xcb, 0xe8, 0xac, 0x4a, 0xf7, 0xd0, 0xf5, 0xd1, 0x6d, 0x3a, + 0x47, 0x0e, 0x7e, 0x0d, 0xda, 0xd7, 0x88, 0x77, 0x7a, 0x59, 0x8a, 0x7e, 0x63, 0x50, 0xc3, 0x6f, + 0xf1, 0x70, 0xcb, 0xae, 0x2a, 0xc6, 0x03, 0x55, 0xc2, 0xef, 0x81, 0xbf, 0xaf, 0x33, 0x09, 0xb6, + 0xac, 0xea, 0x2b, 0x93, 0x06, 0xc1, 0xfe, 0x08, 0xe5, 0xc3, 0xb4, 0x91, 0xd3, 0x7f, 0xc6, 0xf2, + 0x92, 0x98, 0xdf, 0x6e, 0x36, 0xeb, 0xd7, 0xd1, 0xe5, 0x86, 0xac, 0x57, 0x79, 0x64, 0x03, 0xfc, + 0x15, 0xcb, 0x45, 0x71, 0xe1, 0xba, 0x72, 0x46, 0x59, 0x5e, 0x4d, 0x73, 0xaa, 0x61, 0x87, 0xd8, + 0x28, 0xc6, 0x1c, 0xee, 0x0d, 0x71, 0xe6, 0x45, 0xbb, 0x6d, 0x12, 0x83, 0x96, 0xf7, 0x98, 0x9c, + 0xea, 0x20, 0xfc, 0x1d, 0xf6, 0x7c, 0x97, 0x28, 0xdb, 0x40, 0x0e, 0x16, 0xc0, 0x3f, 0xf1, 0xf0, + 0xe3, 0xda, 0x3c, 0x64, 0xaf, 0xa8, 0x86, 0x7f, 0x63, 0x79, 0x45, 0x5c, 0xae, 0x21, 0x1f, 0x90, + 0xbb, 0x71, 0x9f, 0xdd, 0xfc, 0x2f, 0x5e, 0x7b, 0xec, 0xab, 0xa7, 0xef, 0xfe, 0x3c, 0x59, 0x81, + 0x48, 0x2c, 0x18, 0x1a, 0x5c, 0xbb, 0xcc, 0x6f, 0xf3, 0xb1, 0xc3, 0xb7, 0x36, 0x77, 0x74, 0x1f, + 0xeb, 0xfe, 0x64, 0xd6, 0xa3, 0xfd, 0xc9, 0x70, 0x3b, 0x1f, 0xfd, 0x3f, 0x00, 0x00, 0xff, 0xff, + 0x93, 0x0c, 0x30, 0xee, 0x9f, 0x05, 0x00, 0x00, } - -func (m *HttpStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Code != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintHttpStatus(dAtA, i, uint64(m.Code)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintHttpStatus(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *HttpStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Code != 0 { - n += 1 + sovHttpStatus(uint64(m.Code)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovHttpStatus(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozHttpStatus(x uint64) (n int) { - return sovHttpStatus(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *HttpStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpStatus - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HttpStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HttpStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) - } - m.Code = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowHttpStatus - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Code |= StatusCode(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipHttpStatus(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthHttpStatus - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthHttpStatus - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipHttpStatus(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpStatus - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpStatus - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpStatus - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthHttpStatus - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthHttpStatus - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHttpStatus - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipHttpStatus(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthHttpStatus - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthHttpStatus = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHttpStatus = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/http_status.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _http_status_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on HttpStatus with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *HttpStatus) Validate() error { @@ -40,6 +43,13 @@ return nil } + if _, ok := _HttpStatus_Code_NotInLookup[m.GetCode()]; ok { + return HttpStatusValidationError{ + field: "Code", + reason: "value must not be in list [0]", + } + } + if _, ok := StatusCode_name[int32(m.GetCode())]; !ok { return HttpStatusValidationError{ field: "Code", @@ -103,3 +113,7 @@ Cause() error ErrorName() string } = HttpStatusValidationError{} + +var _HttpStatus_Code_NotInLookup = map[StatusCode]struct{}{ + 0: {}, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,173 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/metadata.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type MetadataMatcher struct { + Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` + Path []*MetadataMatcher_PathSegment `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` + Value *ValueMatcher `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataMatcher) Reset() { *m = MetadataMatcher{} } +func (m *MetadataMatcher) String() string { return proto.CompactTextString(m) } +func (*MetadataMatcher) ProtoMessage() {} +func (*MetadataMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_865eaf6a1e9e266d, []int{0} +} + +func (m *MetadataMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataMatcher.Unmarshal(m, b) +} +func (m *MetadataMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataMatcher.Marshal(b, m, deterministic) +} +func (m *MetadataMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataMatcher.Merge(m, src) +} +func (m *MetadataMatcher) XXX_Size() int { + return xxx_messageInfo_MetadataMatcher.Size(m) +} +func (m *MetadataMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataMatcher proto.InternalMessageInfo + +func (m *MetadataMatcher) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *MetadataMatcher) GetPath() []*MetadataMatcher_PathSegment { + if m != nil { + return m.Path + } + return nil +} + +func (m *MetadataMatcher) GetValue() *ValueMatcher { + if m != nil { + return m.Value + } + return nil +} + +type MetadataMatcher_PathSegment struct { + // Types that are valid to be assigned to Segment: + // *MetadataMatcher_PathSegment_Key + Segment isMetadataMatcher_PathSegment_Segment `protobuf_oneof:"segment"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataMatcher_PathSegment) Reset() { *m = MetadataMatcher_PathSegment{} } +func (m *MetadataMatcher_PathSegment) String() string { return proto.CompactTextString(m) } +func (*MetadataMatcher_PathSegment) ProtoMessage() {} +func (*MetadataMatcher_PathSegment) Descriptor() ([]byte, []int) { + return fileDescriptor_865eaf6a1e9e266d, []int{0, 0} +} + +func (m *MetadataMatcher_PathSegment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataMatcher_PathSegment.Unmarshal(m, b) +} +func (m *MetadataMatcher_PathSegment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataMatcher_PathSegment.Marshal(b, m, deterministic) +} +func (m *MetadataMatcher_PathSegment) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataMatcher_PathSegment.Merge(m, src) +} +func (m *MetadataMatcher_PathSegment) XXX_Size() int { + return xxx_messageInfo_MetadataMatcher_PathSegment.Size(m) +} +func (m *MetadataMatcher_PathSegment) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataMatcher_PathSegment.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataMatcher_PathSegment proto.InternalMessageInfo + +type isMetadataMatcher_PathSegment_Segment interface { + isMetadataMatcher_PathSegment_Segment() +} + +type MetadataMatcher_PathSegment_Key struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3,oneof"` +} + +func (*MetadataMatcher_PathSegment_Key) isMetadataMatcher_PathSegment_Segment() {} + +func (m *MetadataMatcher_PathSegment) GetSegment() isMetadataMatcher_PathSegment_Segment { + if m != nil { + return m.Segment + } + return nil +} + +func (m *MetadataMatcher_PathSegment) GetKey() string { + if x, ok := m.GetSegment().(*MetadataMatcher_PathSegment_Key); ok { + return x.Key + } + return "" +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*MetadataMatcher_PathSegment) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*MetadataMatcher_PathSegment_Key)(nil), + } +} + +func init() { + proto.RegisterType((*MetadataMatcher)(nil), "envoy.type.matcher.MetadataMatcher") + proto.RegisterType((*MetadataMatcher_PathSegment)(nil), "envoy.type.matcher.MetadataMatcher.PathSegment") +} + +func init() { proto.RegisterFile("envoy/type/matcher/metadata.proto", fileDescriptor_865eaf6a1e9e266d) } + +var fileDescriptor_865eaf6a1e9e266d = []byte{ + // 304 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x3f, 0x4f, 0xc3, 0x30, + 0x10, 0xc5, 0xb9, 0xa4, 0xff, 0x70, 0x05, 0x54, 0x5e, 0xa8, 0x8a, 0x00, 0xc3, 0xd4, 0xc9, 0x96, + 0xca, 0x06, 0x0b, 0xf2, 0xc4, 0x52, 0xa9, 0x0a, 0x12, 0xfb, 0x41, 0x0d, 0x8d, 0x68, 0xe3, 0x28, + 0xb9, 0x44, 0x64, 0x63, 0x66, 0xe4, 0xe3, 0xf0, 0x09, 0x58, 0xf9, 0x36, 0xa8, 0x0b, 0x28, 0x89, + 0x2b, 0xa1, 0x92, 0xcd, 0xf2, 0xbd, 0xf7, 0x7b, 0xef, 0x8e, 0x9d, 0x99, 0x28, 0xb7, 0x85, 0xa2, + 0x22, 0x36, 0x6a, 0x85, 0xf4, 0xb0, 0x30, 0x89, 0x5a, 0x19, 0xc2, 0x39, 0x12, 0xca, 0x38, 0xb1, + 0x64, 0x39, 0xaf, 0x24, 0xb2, 0x94, 0x48, 0x27, 0x19, 0x9d, 0x34, 0xd8, 0x72, 0x5c, 0x66, 0xa6, + 0xf6, 0x8c, 0x8e, 0xb3, 0x79, 0x8c, 0x0a, 0xa3, 0xc8, 0x12, 0x52, 0x68, 0xa3, 0x54, 0xa5, 0x84, + 0x94, 0xa5, 0x6e, 0x7c, 0x98, 0xe3, 0x32, 0x9c, 0x23, 0x19, 0xb5, 0x79, 0xd4, 0x83, 0xf3, 0x1f, + 0x60, 0x07, 0x53, 0x17, 0x3f, 0xad, 0xb9, 0xfc, 0x94, 0x75, 0x1e, 0xc3, 0x25, 0x99, 0x64, 0x08, + 0x02, 0xc6, 0xbb, 0xba, 0xbb, 0xd6, 0xad, 0xc4, 0x13, 0x10, 0xb8, 0x6f, 0x3e, 0x65, 0xad, 0x18, + 0x69, 0x31, 0xf4, 0x84, 0x3f, 0xee, 0x4f, 0x94, 0xfc, 0xdf, 0x57, 0x6e, 0x31, 0xe5, 0x0c, 0x69, + 0x71, 0x6b, 0x9e, 0x56, 0x26, 0x22, 0xdd, 0x5b, 0xeb, 0xf6, 0x3b, 0x78, 0x3d, 0x08, 0x2a, 0x0c, + 0xbf, 0x66, 0xed, 0x6a, 0x95, 0xa1, 0x2f, 0x60, 0xdc, 0x9f, 0x88, 0x26, 0xde, 0x5d, 0x29, 0x70, + 0xb0, 0x0a, 0xf0, 0x06, 0xde, 0x00, 0x82, 0xda, 0x38, 0xba, 0x64, 0xfd, 0x3f, 0x01, 0xfc, 0x88, + 0xf9, 0xcf, 0xa6, 0xd8, 0x6a, 0x7f, 0xb3, 0x13, 0x94, 0xbf, 0x7a, 0x9f, 0x75, 0x53, 0xa7, 0xf3, + 0xbf, 0x35, 0xe8, 0xab, 0x8f, 0xd7, 0xcf, 0xaf, 0x8e, 0x37, 0x00, 0x26, 0x42, 0x5b, 0x47, 0xc7, + 0x89, 0x7d, 0x29, 0x1a, 0x5a, 0xe8, 0xbd, 0xcd, 0x5a, 0xb3, 0xf2, 0x78, 0x33, 0xb8, 0xef, 0x54, + 0x57, 0xbc, 0xf8, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x76, 0x5a, 0x88, 0xd6, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/metadata.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,235 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/metadata.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _metadata_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on MetadataMatcher with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *MetadataMatcher) Validate() error { + if m == nil { + return nil + } + + if len(m.GetFilter()) < 1 { + return MetadataMatcherValidationError{ + field: "Filter", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetPath()) < 1 { + return MetadataMatcherValidationError{ + field: "Path", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetPath() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataMatcherValidationError{ + field: fmt.Sprintf("Path[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.GetValue() == nil { + return MetadataMatcherValidationError{ + field: "Value", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataMatcherValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// MetadataMatcherValidationError is the validation error returned by +// MetadataMatcher.Validate if the designated constraints aren't met. +type MetadataMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataMatcherValidationError) ErrorName() string { return "MetadataMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e MetadataMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataMatcherValidationError{} + +// Validate checks the field values on MetadataMatcher_PathSegment with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *MetadataMatcher_PathSegment) Validate() error { + if m == nil { + return nil + } + + switch m.Segment.(type) { + + case *MetadataMatcher_PathSegment_Key: + + if len(m.GetKey()) < 1 { + return MetadataMatcher_PathSegmentValidationError{ + field: "Key", + reason: "value length must be at least 1 bytes", + } + } + + default: + return MetadataMatcher_PathSegmentValidationError{ + field: "Segment", + reason: "value is required", + } + + } + + return nil +} + +// MetadataMatcher_PathSegmentValidationError is the validation error returned +// by MetadataMatcher_PathSegment.Validate if the designated constraints +// aren't met. +type MetadataMatcher_PathSegmentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataMatcher_PathSegmentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataMatcher_PathSegmentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataMatcher_PathSegmentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataMatcher_PathSegmentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataMatcher_PathSegmentValidationError) ErrorName() string { + return "MetadataMatcher_PathSegmentValidationError" +} + +// Error satisfies the builtin error interface +func (e MetadataMatcher_PathSegmentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataMatcher_PathSegment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataMatcher_PathSegmentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataMatcher_PathSegmentValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,94 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/node.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type NodeMatcher struct { + NodeId *StringMatcher `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + NodeMetadatas []*StructMatcher `protobuf:"bytes,2,rep,name=node_metadatas,json=nodeMetadatas,proto3" json:"node_metadatas,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NodeMatcher) Reset() { *m = NodeMatcher{} } +func (m *NodeMatcher) String() string { return proto.CompactTextString(m) } +func (*NodeMatcher) ProtoMessage() {} +func (*NodeMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_c20314fb2f725fb2, []int{0} +} + +func (m *NodeMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NodeMatcher.Unmarshal(m, b) +} +func (m *NodeMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NodeMatcher.Marshal(b, m, deterministic) +} +func (m *NodeMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeMatcher.Merge(m, src) +} +func (m *NodeMatcher) XXX_Size() int { + return xxx_messageInfo_NodeMatcher.Size(m) +} +func (m *NodeMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_NodeMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_NodeMatcher proto.InternalMessageInfo + +func (m *NodeMatcher) GetNodeId() *StringMatcher { + if m != nil { + return m.NodeId + } + return nil +} + +func (m *NodeMatcher) GetNodeMetadatas() []*StructMatcher { + if m != nil { + return m.NodeMetadatas + } + return nil +} + +func init() { + proto.RegisterType((*NodeMatcher)(nil), "envoy.type.matcher.NodeMatcher") +} + +func init() { proto.RegisterFile("envoy/type/matcher/node.proto", fileDescriptor_c20314fb2f725fb2) } + +var fileDescriptor_c20314fb2f725fb2 = []byte{ + // 226 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0xcf, + 0xcb, 0x4f, 0x49, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x4b, 0xeb, 0x81, 0xa4, + 0xf5, 0xa0, 0xd2, 0x52, 0xf2, 0x58, 0xb4, 0x14, 0x97, 0x14, 0x65, 0xe6, 0xa5, 0x43, 0x34, 0xe1, + 0x52, 0x50, 0x9a, 0x5c, 0x02, 0x55, 0x20, 0x5b, 0x9a, 0x52, 0x90, 0xa8, 0x9f, 0x98, 0x97, 0x97, + 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0xac, 0x5f, 0x5c, 0x92, 0x58, 0x52, 0x5a, 0x0c, 0x91, + 0x56, 0x9a, 0xcc, 0xc8, 0xc5, 0xed, 0x97, 0x9f, 0x92, 0xea, 0x0b, 0xd1, 0x2b, 0x64, 0xc5, 0xc5, + 0x0e, 0x72, 0x52, 0x7c, 0x66, 0x8a, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0xa2, 0x1e, 0xa6, + 0xb3, 0xf4, 0x82, 0xc1, 0x4e, 0x80, 0xea, 0x09, 0x62, 0x03, 0xe9, 0xf0, 0x4c, 0x11, 0xf2, 0xe0, + 0xe2, 0x03, 0xeb, 0xcd, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0x2c, 0x96, 0x60, 0x52, 0x60, + 0xc6, 0x63, 0x44, 0x69, 0x72, 0x09, 0xcc, 0x08, 0x5e, 0x90, 0x46, 0x5f, 0x98, 0x3e, 0x27, 0xf3, + 0x5d, 0x0d, 0x27, 0x2e, 0xb2, 0x31, 0x09, 0x30, 0x72, 0x29, 0x64, 0xe6, 0x43, 0x74, 0x17, 0x14, + 0xe5, 0x57, 0x54, 0x62, 0x31, 0xc8, 0x89, 0x13, 0xe4, 0xfc, 0x00, 0x90, 0x67, 0x02, 0x18, 0x93, + 0xd8, 0xc0, 0xbe, 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x95, 0xbe, 0xac, 0x6b, 0x01, + 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/node.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,127 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/node.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _node_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on NodeMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *NodeMatcher) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetNodeId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeMatcherValidationError{ + field: "NodeId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetNodeMetadatas() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NodeMatcherValidationError{ + field: fmt.Sprintf("NodeMetadatas[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// NodeMatcherValidationError is the validation error returned by +// NodeMatcher.Validate if the designated constraints aren't met. +type NodeMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NodeMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NodeMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NodeMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NodeMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NodeMatcherValidationError) ErrorName() string { return "NodeMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e NodeMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNodeMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NodeMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NodeMatcherValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,129 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/number.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _type "github.com/envoyproxy/go-control-plane/envoy/type" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type DoubleMatcher struct { + // Types that are valid to be assigned to MatchPattern: + // *DoubleMatcher_Range + // *DoubleMatcher_Exact + MatchPattern isDoubleMatcher_MatchPattern `protobuf_oneof:"match_pattern"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DoubleMatcher) Reset() { *m = DoubleMatcher{} } +func (m *DoubleMatcher) String() string { return proto.CompactTextString(m) } +func (*DoubleMatcher) ProtoMessage() {} +func (*DoubleMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_58ad3770a33c5fc2, []int{0} +} + +func (m *DoubleMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DoubleMatcher.Unmarshal(m, b) +} +func (m *DoubleMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DoubleMatcher.Marshal(b, m, deterministic) +} +func (m *DoubleMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_DoubleMatcher.Merge(m, src) +} +func (m *DoubleMatcher) XXX_Size() int { + return xxx_messageInfo_DoubleMatcher.Size(m) +} +func (m *DoubleMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_DoubleMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_DoubleMatcher proto.InternalMessageInfo + +type isDoubleMatcher_MatchPattern interface { + isDoubleMatcher_MatchPattern() +} + +type DoubleMatcher_Range struct { + Range *_type.DoubleRange `protobuf:"bytes,1,opt,name=range,proto3,oneof"` +} + +type DoubleMatcher_Exact struct { + Exact float64 `protobuf:"fixed64,2,opt,name=exact,proto3,oneof"` +} + +func (*DoubleMatcher_Range) isDoubleMatcher_MatchPattern() {} + +func (*DoubleMatcher_Exact) isDoubleMatcher_MatchPattern() {} + +func (m *DoubleMatcher) GetMatchPattern() isDoubleMatcher_MatchPattern { + if m != nil { + return m.MatchPattern + } + return nil +} + +func (m *DoubleMatcher) GetRange() *_type.DoubleRange { + if x, ok := m.GetMatchPattern().(*DoubleMatcher_Range); ok { + return x.Range + } + return nil +} + +func (m *DoubleMatcher) GetExact() float64 { + if x, ok := m.GetMatchPattern().(*DoubleMatcher_Exact); ok { + return x.Exact + } + return 0 +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*DoubleMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*DoubleMatcher_Range)(nil), + (*DoubleMatcher_Exact)(nil), + } +} + +func init() { + proto.RegisterType((*DoubleMatcher)(nil), "envoy.type.matcher.DoubleMatcher") +} + +func init() { proto.RegisterFile("envoy/type/matcher/number.proto", fileDescriptor_58ad3770a33c5fc2) } + +var fileDescriptor_58ad3770a33c5fc2 = []byte{ + // 238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0xcf, + 0x2b, 0xcd, 0x4d, 0x4a, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x2b, 0xd0, + 0x03, 0x29, 0xd0, 0x83, 0x2a, 0x90, 0x12, 0x43, 0xd2, 0x54, 0x94, 0x98, 0x97, 0x9e, 0x0a, 0x51, + 0x2b, 0x25, 0x5b, 0x9a, 0x52, 0x90, 0xa8, 0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, + 0x9f, 0x57, 0xac, 0x5f, 0x5c, 0x92, 0x58, 0x52, 0x5a, 0x0c, 0x95, 0x16, 0x2f, 0x4b, 0xcc, 0xc9, + 0x4c, 0x49, 0x2c, 0x49, 0xd5, 0x87, 0x31, 0x20, 0x12, 0x4a, 0x79, 0x5c, 0xbc, 0x2e, 0xf9, 0xa5, + 0x49, 0x39, 0xa9, 0xbe, 0x10, 0x0b, 0x84, 0xf4, 0xb9, 0x58, 0xc1, 0xe6, 0x4a, 0x30, 0x2a, 0x30, + 0x6a, 0x70, 0x1b, 0x89, 0xeb, 0x21, 0x39, 0x02, 0xa2, 0x32, 0x08, 0x24, 0xed, 0xc1, 0x10, 0x04, + 0x51, 0x27, 0x24, 0xc6, 0xc5, 0x9a, 0x5a, 0x91, 0x98, 0x5c, 0x22, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, + 0x08, 0x12, 0x07, 0x73, 0x9d, 0x44, 0xb8, 0x78, 0xc1, 0x8e, 0x8e, 0x2f, 0x48, 0x2c, 0x29, 0x49, + 0x2d, 0xca, 0x13, 0x62, 0xfe, 0xe1, 0xc4, 0xe8, 0x64, 0xb9, 0xab, 0xe1, 0xc4, 0x45, 0x36, 0x26, + 0x01, 0x46, 0x2e, 0x85, 0xcc, 0x7c, 0x88, 0xd9, 0x05, 0x45, 0xf9, 0x15, 0x95, 0x7a, 0x98, 0x7e, + 0x75, 0xe2, 0xf6, 0x03, 0x87, 0x46, 0x00, 0xc8, 0xa1, 0x01, 0x8c, 0x49, 0x6c, 0x60, 0x17, 0x1b, + 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x61, 0x6c, 0x1a, 0x17, 0x38, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/number.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,127 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/number.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _number_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on DoubleMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *DoubleMatcher) Validate() error { + if m == nil { + return nil + } + + switch m.MatchPattern.(type) { + + case *DoubleMatcher_Range: + + if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DoubleMatcherValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *DoubleMatcher_Exact: + // no validation rules for Exact + + default: + return DoubleMatcherValidationError{ + field: "MatchPattern", + reason: "value is required", + } + + } + + return nil +} + +// DoubleMatcherValidationError is the validation error returned by +// DoubleMatcher.Validate if the designated constraints aren't met. +type DoubleMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DoubleMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DoubleMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DoubleMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DoubleMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DoubleMatcherValidationError) ErrorName() string { return "DoubleMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e DoubleMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDoubleMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DoubleMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DoubleMatcherValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,112 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/path.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type PathMatcher struct { + // Types that are valid to be assigned to Rule: + // *PathMatcher_Path + Rule isPathMatcher_Rule `protobuf_oneof:"rule"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PathMatcher) Reset() { *m = PathMatcher{} } +func (m *PathMatcher) String() string { return proto.CompactTextString(m) } +func (*PathMatcher) ProtoMessage() {} +func (*PathMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_bec7ed88adc90b4e, []int{0} +} + +func (m *PathMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PathMatcher.Unmarshal(m, b) +} +func (m *PathMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PathMatcher.Marshal(b, m, deterministic) +} +func (m *PathMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_PathMatcher.Merge(m, src) +} +func (m *PathMatcher) XXX_Size() int { + return xxx_messageInfo_PathMatcher.Size(m) +} +func (m *PathMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_PathMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_PathMatcher proto.InternalMessageInfo + +type isPathMatcher_Rule interface { + isPathMatcher_Rule() +} + +type PathMatcher_Path struct { + Path *StringMatcher `protobuf:"bytes,1,opt,name=path,proto3,oneof"` +} + +func (*PathMatcher_Path) isPathMatcher_Rule() {} + +func (m *PathMatcher) GetRule() isPathMatcher_Rule { + if m != nil { + return m.Rule + } + return nil +} + +func (m *PathMatcher) GetPath() *StringMatcher { + if x, ok := m.GetRule().(*PathMatcher_Path); ok { + return x.Path + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*PathMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*PathMatcher_Path)(nil), + } +} + +func init() { + proto.RegisterType((*PathMatcher)(nil), "envoy.type.matcher.PathMatcher") +} + +func init() { proto.RegisterFile("envoy/type/matcher/path.proto", fileDescriptor_bec7ed88adc90b4e) } + +var fileDescriptor_bec7ed88adc90b4e = []byte{ + // 219 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0xcf, 0x4d, 0x2c, 0x49, 0xce, 0x48, 0x2d, 0xd2, 0x2f, + 0x48, 0x2c, 0xc9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x02, 0x4b, 0xeb, 0x81, 0xa4, + 0xf5, 0xa0, 0xd2, 0x52, 0xf2, 0x58, 0xb4, 0x14, 0x97, 0x14, 0x65, 0xe6, 0xa5, 0x43, 0x34, 0x49, + 0xc9, 0x96, 0xa6, 0x14, 0x24, 0xea, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, 0x96, 0x64, 0xe6, 0xe7, + 0x15, 0xeb, 0x17, 0x97, 0x24, 0x96, 0x94, 0x16, 0x43, 0xa5, 0xc5, 0xcb, 0x12, 0x73, 0x32, 0x53, + 0x12, 0x4b, 0x52, 0xf5, 0x61, 0x0c, 0x88, 0x84, 0x52, 0x2c, 0x17, 0x77, 0x40, 0x62, 0x49, 0x86, + 0x2f, 0xc4, 0x4c, 0x21, 0x47, 0x2e, 0x16, 0x90, 0x4b, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, + 0x14, 0xf5, 0x30, 0x9d, 0xa2, 0x17, 0x0c, 0xb6, 0x16, 0xaa, 0xc1, 0x89, 0xe3, 0x97, 0x13, 0x6b, + 0x17, 0x23, 0x93, 0x00, 0xa3, 0x07, 0x43, 0x10, 0x58, 0xab, 0x13, 0x37, 0x17, 0x4b, 0x51, 0x69, + 0x4e, 0xaa, 0x10, 0xf3, 0x0f, 0x27, 0x46, 0x27, 0xf3, 0x5d, 0x0d, 0x27, 0x2e, 0xb2, 0x31, 0x09, + 0x30, 0x72, 0x29, 0x64, 0xe6, 0x43, 0x4c, 0x2b, 0x28, 0xca, 0xaf, 0xa8, 0xc4, 0x62, 0xb0, 0x13, + 0x27, 0xc8, 0x21, 0x01, 0x20, 0x57, 0x05, 0x30, 0x26, 0xb1, 0x81, 0x9d, 0x67, 0x0c, 0x08, 0x00, + 0x00, 0xff, 0xff, 0xd2, 0xe6, 0x6d, 0x00, 0x2c, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/path.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,131 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/path.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _path_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on PathMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *PathMatcher) Validate() error { + if m == nil { + return nil + } + + switch m.Rule.(type) { + + case *PathMatcher_Path: + + if m.GetPath() == nil { + return PathMatcherValidationError{ + field: "Path", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetPath()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PathMatcherValidationError{ + field: "Path", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return PathMatcherValidationError{ + field: "Rule", + reason: "value is required", + } + + } + + return nil +} + +// PathMatcherValidationError is the validation error returned by +// PathMatcher.Validate if the designated constraints aren't met. +type PathMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PathMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PathMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PathMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PathMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PathMatcherValidationError) ErrorName() string { return "PathMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e PathMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPathMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PathMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PathMatcherValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,218 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/regex.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type RegexMatcher struct { + // Types that are valid to be assigned to EngineType: + // *RegexMatcher_GoogleRe2 + EngineType isRegexMatcher_EngineType `protobuf_oneof:"engine_type"` + Regex string `protobuf:"bytes,2,opt,name=regex,proto3" json:"regex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RegexMatcher) Reset() { *m = RegexMatcher{} } +func (m *RegexMatcher) String() string { return proto.CompactTextString(m) } +func (*RegexMatcher) ProtoMessage() {} +func (*RegexMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_0ba289439e2572f3, []int{0} +} + +func (m *RegexMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RegexMatcher.Unmarshal(m, b) +} +func (m *RegexMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RegexMatcher.Marshal(b, m, deterministic) +} +func (m *RegexMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_RegexMatcher.Merge(m, src) +} +func (m *RegexMatcher) XXX_Size() int { + return xxx_messageInfo_RegexMatcher.Size(m) +} +func (m *RegexMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_RegexMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_RegexMatcher proto.InternalMessageInfo + +type isRegexMatcher_EngineType interface { + isRegexMatcher_EngineType() +} + +type RegexMatcher_GoogleRe2 struct { + GoogleRe2 *RegexMatcher_GoogleRE2 `protobuf:"bytes,1,opt,name=google_re2,json=googleRe2,proto3,oneof"` +} + +func (*RegexMatcher_GoogleRe2) isRegexMatcher_EngineType() {} + +func (m *RegexMatcher) GetEngineType() isRegexMatcher_EngineType { + if m != nil { + return m.EngineType + } + return nil +} + +func (m *RegexMatcher) GetGoogleRe2() *RegexMatcher_GoogleRE2 { + if x, ok := m.GetEngineType().(*RegexMatcher_GoogleRe2); ok { + return x.GoogleRe2 + } + return nil +} + +func (m *RegexMatcher) GetRegex() string { + if m != nil { + return m.Regex + } + return "" +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RegexMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RegexMatcher_GoogleRe2)(nil), + } +} + +type RegexMatcher_GoogleRE2 struct { + MaxProgramSize *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=max_program_size,json=maxProgramSize,proto3" json:"max_program_size,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RegexMatcher_GoogleRE2) Reset() { *m = RegexMatcher_GoogleRE2{} } +func (m *RegexMatcher_GoogleRE2) String() string { return proto.CompactTextString(m) } +func (*RegexMatcher_GoogleRE2) ProtoMessage() {} +func (*RegexMatcher_GoogleRE2) Descriptor() ([]byte, []int) { + return fileDescriptor_0ba289439e2572f3, []int{0, 0} +} + +func (m *RegexMatcher_GoogleRE2) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RegexMatcher_GoogleRE2.Unmarshal(m, b) +} +func (m *RegexMatcher_GoogleRE2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RegexMatcher_GoogleRE2.Marshal(b, m, deterministic) +} +func (m *RegexMatcher_GoogleRE2) XXX_Merge(src proto.Message) { + xxx_messageInfo_RegexMatcher_GoogleRE2.Merge(m, src) +} +func (m *RegexMatcher_GoogleRE2) XXX_Size() int { + return xxx_messageInfo_RegexMatcher_GoogleRE2.Size(m) +} +func (m *RegexMatcher_GoogleRE2) XXX_DiscardUnknown() { + xxx_messageInfo_RegexMatcher_GoogleRE2.DiscardUnknown(m) +} + +var xxx_messageInfo_RegexMatcher_GoogleRE2 proto.InternalMessageInfo + +func (m *RegexMatcher_GoogleRE2) GetMaxProgramSize() *wrappers.UInt32Value { + if m != nil { + return m.MaxProgramSize + } + return nil +} + +type RegexMatchAndSubstitute struct { + Pattern *RegexMatcher `protobuf:"bytes,1,opt,name=pattern,proto3" json:"pattern,omitempty"` + Substitution string `protobuf:"bytes,2,opt,name=substitution,proto3" json:"substitution,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RegexMatchAndSubstitute) Reset() { *m = RegexMatchAndSubstitute{} } +func (m *RegexMatchAndSubstitute) String() string { return proto.CompactTextString(m) } +func (*RegexMatchAndSubstitute) ProtoMessage() {} +func (*RegexMatchAndSubstitute) Descriptor() ([]byte, []int) { + return fileDescriptor_0ba289439e2572f3, []int{1} +} + +func (m *RegexMatchAndSubstitute) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RegexMatchAndSubstitute.Unmarshal(m, b) +} +func (m *RegexMatchAndSubstitute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RegexMatchAndSubstitute.Marshal(b, m, deterministic) +} +func (m *RegexMatchAndSubstitute) XXX_Merge(src proto.Message) { + xxx_messageInfo_RegexMatchAndSubstitute.Merge(m, src) +} +func (m *RegexMatchAndSubstitute) XXX_Size() int { + return xxx_messageInfo_RegexMatchAndSubstitute.Size(m) +} +func (m *RegexMatchAndSubstitute) XXX_DiscardUnknown() { + xxx_messageInfo_RegexMatchAndSubstitute.DiscardUnknown(m) +} + +var xxx_messageInfo_RegexMatchAndSubstitute proto.InternalMessageInfo + +func (m *RegexMatchAndSubstitute) GetPattern() *RegexMatcher { + if m != nil { + return m.Pattern + } + return nil +} + +func (m *RegexMatchAndSubstitute) GetSubstitution() string { + if m != nil { + return m.Substitution + } + return "" +} + +func init() { + proto.RegisterType((*RegexMatcher)(nil), "envoy.type.matcher.RegexMatcher") + proto.RegisterType((*RegexMatcher_GoogleRE2)(nil), "envoy.type.matcher.RegexMatcher.GoogleRE2") + proto.RegisterType((*RegexMatchAndSubstitute)(nil), "envoy.type.matcher.RegexMatchAndSubstitute") +} + +func init() { proto.RegisterFile("envoy/type/matcher/regex.proto", fileDescriptor_0ba289439e2572f3) } + +var fileDescriptor_0ba289439e2572f3 = []byte{ + // 367 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xcf, 0x0b, 0xd3, 0x30, + 0x1c, 0xc5, 0x4d, 0x75, 0x9b, 0xcb, 0x86, 0x8c, 0x5c, 0x36, 0x86, 0x1b, 0x65, 0xa7, 0xe1, 0x21, + 0x81, 0xee, 0x22, 0xde, 0x0c, 0xf8, 0xeb, 0x20, 0x8c, 0x8c, 0x79, 0x2d, 0x99, 0xfb, 0x5a, 0x03, + 0x6b, 0x12, 0xd2, 0x74, 0xb6, 0x3b, 0x79, 0xf6, 0x4f, 0xf2, 0x2f, 0xf0, 0xea, 0x1f, 0xe2, 0x5d, + 0x76, 0x92, 0x36, 0xab, 0x3f, 0x50, 0xf0, 0x56, 0xbe, 0xaf, 0xef, 0x7d, 0xde, 0x0b, 0x5e, 0x82, + 0x3e, 0x9b, 0x9a, 0xf9, 0xda, 0x02, 0xcb, 0xa5, 0x7f, 0xfb, 0x1e, 0x1c, 0x73, 0x90, 0x41, 0x45, + 0xad, 0x33, 0xde, 0x10, 0xd2, 0xea, 0xb4, 0xd1, 0xe9, 0x4d, 0x9f, 0x2f, 0x33, 0x63, 0xb2, 0x13, + 0xb0, 0xf6, 0x8f, 0x43, 0xf9, 0x8e, 0x7d, 0x70, 0xd2, 0x5a, 0x70, 0x45, 0xf0, 0xcc, 0x17, 0xe5, + 0xd1, 0x4a, 0x26, 0xb5, 0x36, 0x5e, 0x7a, 0x65, 0x74, 0xc1, 0x0a, 0x2f, 0x7d, 0xd9, 0xc9, 0xd3, + 0xb3, 0x3c, 0xa9, 0xa3, 0xf4, 0xc0, 0xba, 0x8f, 0x20, 0xac, 0xbe, 0x21, 0x3c, 0x16, 0x0d, 0xfb, + 0x75, 0x00, 0x91, 0x3d, 0xc6, 0x01, 0x95, 0x3a, 0x48, 0x66, 0x28, 0x46, 0xeb, 0x51, 0xf2, 0x88, + 0xfe, 0xdd, 0x88, 0xfe, 0xee, 0xa2, 0x2f, 0x5a, 0x8b, 0x78, 0x96, 0xf0, 0xfb, 0x57, 0xde, 0xfb, + 0x84, 0xa2, 0x09, 0x7a, 0x79, 0x47, 0x0c, 0x43, 0x92, 0x80, 0x84, 0x2c, 0x70, 0xaf, 0x9d, 0x38, + 0x8b, 0x62, 0xb4, 0x1e, 0xf2, 0xc1, 0x95, 0xdf, 0x73, 0x51, 0x8c, 0x44, 0xb8, 0xce, 0x77, 0x78, + 0xf8, 0x33, 0x82, 0x3c, 0xc7, 0x93, 0x5c, 0x56, 0xa9, 0x75, 0x26, 0x73, 0x32, 0x4f, 0x0b, 0x75, + 0x81, 0x5b, 0x91, 0x87, 0x34, 0x24, 0xd2, 0xee, 0x19, 0xe8, 0xfe, 0x95, 0xf6, 0x9b, 0xe4, 0x8d, + 0x3c, 0x95, 0x20, 0x1e, 0xe4, 0xb2, 0xda, 0x06, 0xd3, 0x4e, 0x5d, 0x80, 0x13, 0x3c, 0x02, 0x9d, + 0x29, 0x0d, 0x69, 0x53, 0x9c, 0xdc, 0xfd, 0xce, 0xd1, 0xaa, 0xc6, 0xd3, 0x5f, 0xc5, 0x9f, 0xea, + 0xe3, 0xae, 0x3c, 0x14, 0x5e, 0xf9, 0xd2, 0x03, 0x79, 0x82, 0x07, 0x56, 0x7a, 0x0f, 0x4e, 0xdf, + 0x68, 0xf1, 0xff, 0x66, 0x8b, 0xce, 0x40, 0x56, 0x78, 0x5c, 0x74, 0x49, 0xca, 0xe8, 0xb0, 0x52, + 0xfc, 0x71, 0xe3, 0x8f, 0x3f, 0x7f, 0xfc, 0xf2, 0xb5, 0x1f, 0x4d, 0x10, 0x8e, 0x95, 0x09, 0xd1, + 0xd6, 0x99, 0xaa, 0xfe, 0x07, 0x85, 0xe3, 0x16, 0xb3, 0x6d, 0x56, 0x6e, 0xd1, 0xa1, 0xdf, 0xce, + 0xdd, 0xfc, 0x08, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xf7, 0x0c, 0x0f, 0x39, 0x02, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/regex.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,294 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/regex.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _regex_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on RegexMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *RegexMatcher) Validate() error { + if m == nil { + return nil + } + + if len(m.GetRegex()) < 1 { + return RegexMatcherValidationError{ + field: "Regex", + reason: "value length must be at least 1 bytes", + } + } + + switch m.EngineType.(type) { + + case *RegexMatcher_GoogleRe2: + + if m.GetGoogleRe2() == nil { + return RegexMatcherValidationError{ + field: "GoogleRe2", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetGoogleRe2()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RegexMatcherValidationError{ + field: "GoogleRe2", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return RegexMatcherValidationError{ + field: "EngineType", + reason: "value is required", + } + + } + + return nil +} + +// RegexMatcherValidationError is the validation error returned by +// RegexMatcher.Validate if the designated constraints aren't met. +type RegexMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RegexMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RegexMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RegexMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RegexMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RegexMatcherValidationError) ErrorName() string { return "RegexMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e RegexMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRegexMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RegexMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RegexMatcherValidationError{} + +// Validate checks the field values on RegexMatchAndSubstitute with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RegexMatchAndSubstitute) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetPattern()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RegexMatchAndSubstituteValidationError{ + field: "Pattern", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Substitution + + return nil +} + +// RegexMatchAndSubstituteValidationError is the validation error returned by +// RegexMatchAndSubstitute.Validate if the designated constraints aren't met. +type RegexMatchAndSubstituteValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RegexMatchAndSubstituteValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RegexMatchAndSubstituteValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RegexMatchAndSubstituteValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RegexMatchAndSubstituteValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RegexMatchAndSubstituteValidationError) ErrorName() string { + return "RegexMatchAndSubstituteValidationError" +} + +// Error satisfies the builtin error interface +func (e RegexMatchAndSubstituteValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRegexMatchAndSubstitute.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RegexMatchAndSubstituteValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RegexMatchAndSubstituteValidationError{} + +// Validate checks the field values on RegexMatcher_GoogleRE2 with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RegexMatcher_GoogleRE2) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetMaxProgramSize()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RegexMatcher_GoogleRE2ValidationError{ + field: "MaxProgramSize", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RegexMatcher_GoogleRE2ValidationError is the validation error returned by +// RegexMatcher_GoogleRE2.Validate if the designated constraints aren't met. +type RegexMatcher_GoogleRE2ValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RegexMatcher_GoogleRE2ValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RegexMatcher_GoogleRE2ValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RegexMatcher_GoogleRE2ValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RegexMatcher_GoogleRE2ValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RegexMatcher_GoogleRE2ValidationError) ErrorName() string { + return "RegexMatcher_GoogleRE2ValidationError" +} + +// Error satisfies the builtin error interface +func (e RegexMatcher_GoogleRE2ValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRegexMatcher_GoogleRE2.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RegexMatcher_GoogleRE2ValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RegexMatcher_GoogleRE2ValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,233 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/string.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/go-control-plane/envoy/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type StringMatcher struct { + // Types that are valid to be assigned to MatchPattern: + // *StringMatcher_Exact + // *StringMatcher_Prefix + // *StringMatcher_Suffix + // *StringMatcher_Regex + // *StringMatcher_SafeRegex + MatchPattern isStringMatcher_MatchPattern `protobuf_oneof:"match_pattern"` + IgnoreCase bool `protobuf:"varint,6,opt,name=ignore_case,json=ignoreCase,proto3" json:"ignore_case,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StringMatcher) Reset() { *m = StringMatcher{} } +func (m *StringMatcher) String() string { return proto.CompactTextString(m) } +func (*StringMatcher) ProtoMessage() {} +func (*StringMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_1dc62c75a0f154e3, []int{0} +} + +func (m *StringMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StringMatcher.Unmarshal(m, b) +} +func (m *StringMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StringMatcher.Marshal(b, m, deterministic) +} +func (m *StringMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_StringMatcher.Merge(m, src) +} +func (m *StringMatcher) XXX_Size() int { + return xxx_messageInfo_StringMatcher.Size(m) +} +func (m *StringMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_StringMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_StringMatcher proto.InternalMessageInfo + +type isStringMatcher_MatchPattern interface { + isStringMatcher_MatchPattern() +} + +type StringMatcher_Exact struct { + Exact string `protobuf:"bytes,1,opt,name=exact,proto3,oneof"` +} + +type StringMatcher_Prefix struct { + Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3,oneof"` +} + +type StringMatcher_Suffix struct { + Suffix string `protobuf:"bytes,3,opt,name=suffix,proto3,oneof"` +} + +type StringMatcher_Regex struct { + Regex string `protobuf:"bytes,4,opt,name=regex,proto3,oneof"` +} + +type StringMatcher_SafeRegex struct { + SafeRegex *RegexMatcher `protobuf:"bytes,5,opt,name=safe_regex,json=safeRegex,proto3,oneof"` +} + +func (*StringMatcher_Exact) isStringMatcher_MatchPattern() {} + +func (*StringMatcher_Prefix) isStringMatcher_MatchPattern() {} + +func (*StringMatcher_Suffix) isStringMatcher_MatchPattern() {} + +func (*StringMatcher_Regex) isStringMatcher_MatchPattern() {} + +func (*StringMatcher_SafeRegex) isStringMatcher_MatchPattern() {} + +func (m *StringMatcher) GetMatchPattern() isStringMatcher_MatchPattern { + if m != nil { + return m.MatchPattern + } + return nil +} + +func (m *StringMatcher) GetExact() string { + if x, ok := m.GetMatchPattern().(*StringMatcher_Exact); ok { + return x.Exact + } + return "" +} + +func (m *StringMatcher) GetPrefix() string { + if x, ok := m.GetMatchPattern().(*StringMatcher_Prefix); ok { + return x.Prefix + } + return "" +} + +func (m *StringMatcher) GetSuffix() string { + if x, ok := m.GetMatchPattern().(*StringMatcher_Suffix); ok { + return x.Suffix + } + return "" +} + +// Deprecated: Do not use. +func (m *StringMatcher) GetRegex() string { + if x, ok := m.GetMatchPattern().(*StringMatcher_Regex); ok { + return x.Regex + } + return "" +} + +func (m *StringMatcher) GetSafeRegex() *RegexMatcher { + if x, ok := m.GetMatchPattern().(*StringMatcher_SafeRegex); ok { + return x.SafeRegex + } + return nil +} + +func (m *StringMatcher) GetIgnoreCase() bool { + if m != nil { + return m.IgnoreCase + } + return false +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StringMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StringMatcher_Exact)(nil), + (*StringMatcher_Prefix)(nil), + (*StringMatcher_Suffix)(nil), + (*StringMatcher_Regex)(nil), + (*StringMatcher_SafeRegex)(nil), + } +} + +type ListStringMatcher struct { + Patterns []*StringMatcher `protobuf:"bytes,1,rep,name=patterns,proto3" json:"patterns,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListStringMatcher) Reset() { *m = ListStringMatcher{} } +func (m *ListStringMatcher) String() string { return proto.CompactTextString(m) } +func (*ListStringMatcher) ProtoMessage() {} +func (*ListStringMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_1dc62c75a0f154e3, []int{1} +} + +func (m *ListStringMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListStringMatcher.Unmarshal(m, b) +} +func (m *ListStringMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListStringMatcher.Marshal(b, m, deterministic) +} +func (m *ListStringMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListStringMatcher.Merge(m, src) +} +func (m *ListStringMatcher) XXX_Size() int { + return xxx_messageInfo_ListStringMatcher.Size(m) +} +func (m *ListStringMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_ListStringMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_ListStringMatcher proto.InternalMessageInfo + +func (m *ListStringMatcher) GetPatterns() []*StringMatcher { + if m != nil { + return m.Patterns + } + return nil +} + +func init() { + proto.RegisterType((*StringMatcher)(nil), "envoy.type.matcher.StringMatcher") + proto.RegisterType((*ListStringMatcher)(nil), "envoy.type.matcher.ListStringMatcher") +} + +func init() { proto.RegisterFile("envoy/type/matcher/string.proto", fileDescriptor_1dc62c75a0f154e3) } + +var fileDescriptor_1dc62c75a0f154e3 = []byte{ + // 387 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0xc1, 0x4a, 0xeb, 0x40, + 0x18, 0x85, 0x3b, 0x49, 0x93, 0x9b, 0x4e, 0x28, 0xf4, 0x0e, 0x97, 0x7b, 0x43, 0xe1, 0xda, 0xb4, + 0x6e, 0xb2, 0x4a, 0xa0, 0xae, 0xdc, 0x8e, 0x0b, 0x0b, 0x2a, 0x94, 0xb8, 0x15, 0xca, 0x98, 0x4e, + 0x6b, 0x40, 0x33, 0x61, 0x66, 0x5a, 0xd2, 0x5d, 0xd7, 0x2e, 0xdd, 0xfa, 0x22, 0xe2, 0x13, 0xb8, + 0xd5, 0x07, 0x71, 0xe1, 0x4a, 0xba, 0x92, 0x99, 0x89, 0x42, 0x69, 0x77, 0xf9, 0x73, 0xbe, 0x73, + 0x72, 0xf2, 0xff, 0xb0, 0x47, 0x8b, 0x25, 0x5b, 0x25, 0x72, 0x55, 0xd2, 0xe4, 0x8e, 0xc8, 0xec, + 0x86, 0xf2, 0x44, 0x48, 0x9e, 0x17, 0xf3, 0xb8, 0xe4, 0x4c, 0x32, 0x84, 0x34, 0x10, 0x2b, 0x20, + 0xae, 0x81, 0xee, 0xc1, 0x1e, 0x13, 0xa7, 0x73, 0x5a, 0x19, 0x4f, 0xf7, 0xd0, 0xe8, 0xa4, 0x28, + 0x98, 0x24, 0x32, 0x67, 0x85, 0x48, 0xa6, 0xb4, 0xe4, 0x34, 0xd3, 0x43, 0x0d, 0xfd, 0x5f, 0x4c, + 0x4b, 0xb2, 0xc5, 0x08, 0x49, 0xe4, 0x42, 0xd4, 0xf2, 0xbf, 0x25, 0xb9, 0xcd, 0xa7, 0x44, 0xd2, + 0xe4, 0xfb, 0xc1, 0x08, 0x83, 0x47, 0x0b, 0xb6, 0x2f, 0x75, 0xc3, 0x0b, 0xf3, 0x69, 0xf4, 0x17, + 0x3a, 0xb4, 0x22, 0x99, 0x0c, 0x40, 0x08, 0xa2, 0xd6, 0xa8, 0x91, 0x9a, 0x11, 0xf5, 0xa1, 0x5b, + 0x72, 0x3a, 0xcb, 0xab, 0xc0, 0x52, 0x02, 0xfe, 0xb5, 0xc1, 0x4d, 0x6e, 0x85, 0x60, 0xd4, 0x48, + 0x6b, 0x41, 0x21, 0x62, 0x31, 0x53, 0x88, 0xbd, 0x83, 0x18, 0x01, 0x45, 0xd0, 0xd1, 0xff, 0x16, + 0x34, 0x35, 0xd1, 0xd9, 0x60, 0x87, 0xdb, 0xd1, 0xda, 0x7b, 0x7a, 0xff, 0x78, 0x73, 0x40, 0xa0, + 0x50, 0x03, 0xa0, 0x33, 0x08, 0x05, 0x99, 0xd1, 0x89, 0xc1, 0x9d, 0x10, 0x44, 0xfe, 0x30, 0x8c, + 0x77, 0xf7, 0x17, 0xa7, 0x0a, 0xa8, 0xdb, 0x63, 0x6f, 0x83, 0x9d, 0x7b, 0x60, 0x75, 0x54, 0x50, + 0x4b, 0xf9, 0xb5, 0x8a, 0x7a, 0xd0, 0xcf, 0xe7, 0x05, 0xe3, 0x74, 0x92, 0x11, 0x41, 0x03, 0x37, + 0x04, 0x91, 0x97, 0x42, 0xf3, 0xea, 0x84, 0x08, 0x8a, 0xff, 0xc0, 0xb6, 0xce, 0x9b, 0x94, 0x44, + 0x4a, 0xca, 0x0b, 0x64, 0x7f, 0x62, 0x30, 0xb8, 0x82, 0xbf, 0xcf, 0x73, 0x21, 0xb7, 0x17, 0x74, + 0x0a, 0xbd, 0x1a, 0x12, 0x01, 0x08, 0xed, 0xc8, 0x1f, 0xf6, 0xf7, 0xd5, 0xda, 0x32, 0xe9, 0x5e, + 0x0f, 0xc0, 0xf2, 0x40, 0xfa, 0x63, 0xc6, 0xc7, 0xcf, 0xeb, 0x97, 0x57, 0xd7, 0xea, 0x00, 0x18, + 0xe6, 0xcc, 0x44, 0x94, 0x9c, 0x55, 0xab, 0x3d, 0x69, 0xd8, 0x37, 0x71, 0x63, 0x75, 0xb4, 0x31, + 0xb8, 0x76, 0xf5, 0xf5, 0x8e, 0xbe, 0x02, 0x00, 0x00, 0xff, 0xff, 0x89, 0xee, 0xc2, 0xe5, 0x71, + 0x02, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/string.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,252 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/string.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _string_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on StringMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *StringMatcher) Validate() error { + if m == nil { + return nil + } + + // no validation rules for IgnoreCase + + switch m.MatchPattern.(type) { + + case *StringMatcher_Exact: + // no validation rules for Exact + + case *StringMatcher_Prefix: + + if len(m.GetPrefix()) < 1 { + return StringMatcherValidationError{ + field: "Prefix", + reason: "value length must be at least 1 bytes", + } + } + + case *StringMatcher_Suffix: + + if len(m.GetSuffix()) < 1 { + return StringMatcherValidationError{ + field: "Suffix", + reason: "value length must be at least 1 bytes", + } + } + + case *StringMatcher_Regex: + + if len(m.GetRegex()) > 1024 { + return StringMatcherValidationError{ + field: "Regex", + reason: "value length must be at most 1024 bytes", + } + } + + case *StringMatcher_SafeRegex: + + if m.GetSafeRegex() == nil { + return StringMatcherValidationError{ + field: "SafeRegex", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSafeRegex()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StringMatcherValidationError{ + field: "SafeRegex", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StringMatcherValidationError{ + field: "MatchPattern", + reason: "value is required", + } + + } + + return nil +} + +// StringMatcherValidationError is the validation error returned by +// StringMatcher.Validate if the designated constraints aren't met. +type StringMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StringMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StringMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StringMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StringMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StringMatcherValidationError) ErrorName() string { return "StringMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e StringMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStringMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StringMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StringMatcherValidationError{} + +// Validate checks the field values on ListStringMatcher with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ListStringMatcher) Validate() error { + if m == nil { + return nil + } + + if len(m.GetPatterns()) < 1 { + return ListStringMatcherValidationError{ + field: "Patterns", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetPatterns() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListStringMatcherValidationError{ + field: fmt.Sprintf("Patterns[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ListStringMatcherValidationError is the validation error returned by +// ListStringMatcher.Validate if the designated constraints aren't met. +type ListStringMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListStringMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListStringMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListStringMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListStringMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListStringMatcherValidationError) ErrorName() string { + return "ListStringMatcherValidationError" +} + +// Error satisfies the builtin error interface +func (e ListStringMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListStringMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListStringMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListStringMatcherValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/struct.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type StructMatcher struct { + Path []*StructMatcher_PathSegment `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` + Value *ValueMatcher `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StructMatcher) Reset() { *m = StructMatcher{} } +func (m *StructMatcher) String() string { return proto.CompactTextString(m) } +func (*StructMatcher) ProtoMessage() {} +func (*StructMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_80addaed29127401, []int{0} +} + +func (m *StructMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StructMatcher.Unmarshal(m, b) +} +func (m *StructMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StructMatcher.Marshal(b, m, deterministic) +} +func (m *StructMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_StructMatcher.Merge(m, src) +} +func (m *StructMatcher) XXX_Size() int { + return xxx_messageInfo_StructMatcher.Size(m) +} +func (m *StructMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_StructMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_StructMatcher proto.InternalMessageInfo + +func (m *StructMatcher) GetPath() []*StructMatcher_PathSegment { + if m != nil { + return m.Path + } + return nil +} + +func (m *StructMatcher) GetValue() *ValueMatcher { + if m != nil { + return m.Value + } + return nil +} + +type StructMatcher_PathSegment struct { + // Types that are valid to be assigned to Segment: + // *StructMatcher_PathSegment_Key + Segment isStructMatcher_PathSegment_Segment `protobuf_oneof:"segment"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StructMatcher_PathSegment) Reset() { *m = StructMatcher_PathSegment{} } +func (m *StructMatcher_PathSegment) String() string { return proto.CompactTextString(m) } +func (*StructMatcher_PathSegment) ProtoMessage() {} +func (*StructMatcher_PathSegment) Descriptor() ([]byte, []int) { + return fileDescriptor_80addaed29127401, []int{0, 0} +} + +func (m *StructMatcher_PathSegment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StructMatcher_PathSegment.Unmarshal(m, b) +} +func (m *StructMatcher_PathSegment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StructMatcher_PathSegment.Marshal(b, m, deterministic) +} +func (m *StructMatcher_PathSegment) XXX_Merge(src proto.Message) { + xxx_messageInfo_StructMatcher_PathSegment.Merge(m, src) +} +func (m *StructMatcher_PathSegment) XXX_Size() int { + return xxx_messageInfo_StructMatcher_PathSegment.Size(m) +} +func (m *StructMatcher_PathSegment) XXX_DiscardUnknown() { + xxx_messageInfo_StructMatcher_PathSegment.DiscardUnknown(m) +} + +var xxx_messageInfo_StructMatcher_PathSegment proto.InternalMessageInfo + +type isStructMatcher_PathSegment_Segment interface { + isStructMatcher_PathSegment_Segment() +} + +type StructMatcher_PathSegment_Key struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3,oneof"` +} + +func (*StructMatcher_PathSegment_Key) isStructMatcher_PathSegment_Segment() {} + +func (m *StructMatcher_PathSegment) GetSegment() isStructMatcher_PathSegment_Segment { + if m != nil { + return m.Segment + } + return nil +} + +func (m *StructMatcher_PathSegment) GetKey() string { + if x, ok := m.GetSegment().(*StructMatcher_PathSegment_Key); ok { + return x.Key + } + return "" +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StructMatcher_PathSegment) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StructMatcher_PathSegment_Key)(nil), + } +} + +func init() { + proto.RegisterType((*StructMatcher)(nil), "envoy.type.matcher.StructMatcher") + proto.RegisterType((*StructMatcher_PathSegment)(nil), "envoy.type.matcher.StructMatcher.PathSegment") +} + +func init() { proto.RegisterFile("envoy/type/matcher/struct.proto", fileDescriptor_80addaed29127401) } + +var fileDescriptor_80addaed29127401 = []byte{ + // 292 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x3f, 0x4b, 0xc4, 0x40, + 0x10, 0xc5, 0x9d, 0xe4, 0xfe, 0xb9, 0x41, 0x39, 0xd2, 0x78, 0x44, 0xd4, 0xc5, 0x2a, 0x8d, 0xbb, + 0x70, 0x56, 0x5a, 0xc9, 0x56, 0x82, 0x08, 0x21, 0x07, 0xf6, 0xeb, 0xdd, 0x62, 0x82, 0x77, 0xd9, + 0x90, 0x4c, 0x82, 0xe9, 0xac, 0x2d, 0xfd, 0x38, 0x7e, 0x02, 0x5b, 0x5b, 0x3f, 0x89, 0x5c, 0x25, + 0xd9, 0x8d, 0xa0, 0x98, 0x6e, 0xd9, 0x79, 0xef, 0xf7, 0xde, 0x0c, 0x39, 0x51, 0x59, 0xad, 0x1b, + 0x8e, 0x4d, 0xae, 0xf8, 0x46, 0xe2, 0x32, 0x51, 0x05, 0x2f, 0xb1, 0xa8, 0x96, 0xc8, 0xf2, 0x42, + 0xa3, 0xf6, 0x7d, 0x23, 0x60, 0xad, 0x80, 0x75, 0x82, 0xe0, 0xb8, 0xc7, 0x54, 0xcb, 0x75, 0xa5, + 0xac, 0x27, 0x38, 0xaa, 0x56, 0xb9, 0xe4, 0x32, 0xcb, 0x34, 0x4a, 0x4c, 0x75, 0x56, 0xf2, 0x12, + 0x25, 0x56, 0x65, 0x37, 0x3e, 0xa8, 0xe5, 0x3a, 0x5d, 0x49, 0x54, 0xfc, 0xe7, 0x61, 0x07, 0xa7, + 0x9f, 0x40, 0xf6, 0x16, 0x26, 0xfc, 0xd6, 0x52, 0xfd, 0x1b, 0x32, 0xc8, 0x25, 0x26, 0x33, 0x87, + 0xba, 0xa1, 0x37, 0x3f, 0x63, 0xff, 0xcb, 0xb0, 0x3f, 0x06, 0x16, 0x49, 0x4c, 0x16, 0xea, 0x61, + 0xa3, 0x32, 0x14, 0x93, 0xad, 0x18, 0xbe, 0x82, 0x33, 0x81, 0xd8, 0x40, 0xfc, 0x2b, 0x32, 0x34, + 0x2d, 0x67, 0x2e, 0x85, 0xd0, 0x9b, 0xd3, 0x3e, 0xda, 0x5d, 0x2b, 0xe8, 0x60, 0x06, 0xf0, 0x02, + 0xce, 0x14, 0x62, 0x6b, 0x0c, 0x2e, 0x89, 0xf7, 0x2b, 0xc0, 0x3f, 0x24, 0xee, 0xa3, 0x6a, 0x66, + 0x40, 0x21, 0xdc, 0x15, 0xe3, 0xad, 0x18, 0x14, 0x0e, 0x85, 0xeb, 0x9d, 0xb8, 0xfd, 0x15, 0xfb, + 0x64, 0x5c, 0x76, 0x3a, 0xf7, 0x4b, 0x80, 0xb8, 0x78, 0x7b, 0x7e, 0xff, 0x18, 0x39, 0x53, 0x20, + 0x34, 0xd5, 0x36, 0x3a, 0x2f, 0xf4, 0x53, 0xd3, 0xd3, 0x42, 0x78, 0x76, 0xa9, 0xa8, 0xbd, 0x4a, + 0x04, 0xf7, 0x23, 0x73, 0x9e, 0xf3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x73, 0x85, 0x38, + 0xad, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/struct.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,227 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/struct.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _struct_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on StructMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *StructMatcher) Validate() error { + if m == nil { + return nil + } + + if len(m.GetPath()) < 1 { + return StructMatcherValidationError{ + field: "Path", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetPath() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StructMatcherValidationError{ + field: fmt.Sprintf("Path[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.GetValue() == nil { + return StructMatcherValidationError{ + field: "Value", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StructMatcherValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// StructMatcherValidationError is the validation error returned by +// StructMatcher.Validate if the designated constraints aren't met. +type StructMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StructMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StructMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StructMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StructMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StructMatcherValidationError) ErrorName() string { return "StructMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e StructMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStructMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StructMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StructMatcherValidationError{} + +// Validate checks the field values on StructMatcher_PathSegment with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StructMatcher_PathSegment) Validate() error { + if m == nil { + return nil + } + + switch m.Segment.(type) { + + case *StructMatcher_PathSegment_Key: + + if len(m.GetKey()) < 1 { + return StructMatcher_PathSegmentValidationError{ + field: "Key", + reason: "value length must be at least 1 bytes", + } + } + + default: + return StructMatcher_PathSegmentValidationError{ + field: "Segment", + reason: "value is required", + } + + } + + return nil +} + +// StructMatcher_PathSegmentValidationError is the validation error returned by +// StructMatcher_PathSegment.Validate if the designated constraints aren't met. +type StructMatcher_PathSegmentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StructMatcher_PathSegmentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StructMatcher_PathSegmentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StructMatcher_PathSegmentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StructMatcher_PathSegmentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StructMatcher_PathSegmentValidationError) ErrorName() string { + return "StructMatcher_PathSegmentValidationError" +} + +// Error satisfies the builtin error interface +func (e StructMatcher_PathSegmentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStructMatcher_PathSegment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StructMatcher_PathSegmentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StructMatcher_PathSegmentValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,295 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/matcher/value.proto + +package envoy_type_matcher + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type ValueMatcher struct { + // Types that are valid to be assigned to MatchPattern: + // *ValueMatcher_NullMatch_ + // *ValueMatcher_DoubleMatch + // *ValueMatcher_StringMatch + // *ValueMatcher_BoolMatch + // *ValueMatcher_PresentMatch + // *ValueMatcher_ListMatch + MatchPattern isValueMatcher_MatchPattern `protobuf_oneof:"match_pattern"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValueMatcher) Reset() { *m = ValueMatcher{} } +func (m *ValueMatcher) String() string { return proto.CompactTextString(m) } +func (*ValueMatcher) ProtoMessage() {} +func (*ValueMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_145b36501d266253, []int{0} +} + +func (m *ValueMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValueMatcher.Unmarshal(m, b) +} +func (m *ValueMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValueMatcher.Marshal(b, m, deterministic) +} +func (m *ValueMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValueMatcher.Merge(m, src) +} +func (m *ValueMatcher) XXX_Size() int { + return xxx_messageInfo_ValueMatcher.Size(m) +} +func (m *ValueMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_ValueMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_ValueMatcher proto.InternalMessageInfo + +type isValueMatcher_MatchPattern interface { + isValueMatcher_MatchPattern() +} + +type ValueMatcher_NullMatch_ struct { + NullMatch *ValueMatcher_NullMatch `protobuf:"bytes,1,opt,name=null_match,json=nullMatch,proto3,oneof"` +} + +type ValueMatcher_DoubleMatch struct { + DoubleMatch *DoubleMatcher `protobuf:"bytes,2,opt,name=double_match,json=doubleMatch,proto3,oneof"` +} + +type ValueMatcher_StringMatch struct { + StringMatch *StringMatcher `protobuf:"bytes,3,opt,name=string_match,json=stringMatch,proto3,oneof"` +} + +type ValueMatcher_BoolMatch struct { + BoolMatch bool `protobuf:"varint,4,opt,name=bool_match,json=boolMatch,proto3,oneof"` +} + +type ValueMatcher_PresentMatch struct { + PresentMatch bool `protobuf:"varint,5,opt,name=present_match,json=presentMatch,proto3,oneof"` +} + +type ValueMatcher_ListMatch struct { + ListMatch *ListMatcher `protobuf:"bytes,6,opt,name=list_match,json=listMatch,proto3,oneof"` +} + +func (*ValueMatcher_NullMatch_) isValueMatcher_MatchPattern() {} + +func (*ValueMatcher_DoubleMatch) isValueMatcher_MatchPattern() {} + +func (*ValueMatcher_StringMatch) isValueMatcher_MatchPattern() {} + +func (*ValueMatcher_BoolMatch) isValueMatcher_MatchPattern() {} + +func (*ValueMatcher_PresentMatch) isValueMatcher_MatchPattern() {} + +func (*ValueMatcher_ListMatch) isValueMatcher_MatchPattern() {} + +func (m *ValueMatcher) GetMatchPattern() isValueMatcher_MatchPattern { + if m != nil { + return m.MatchPattern + } + return nil +} + +func (m *ValueMatcher) GetNullMatch() *ValueMatcher_NullMatch { + if x, ok := m.GetMatchPattern().(*ValueMatcher_NullMatch_); ok { + return x.NullMatch + } + return nil +} + +func (m *ValueMatcher) GetDoubleMatch() *DoubleMatcher { + if x, ok := m.GetMatchPattern().(*ValueMatcher_DoubleMatch); ok { + return x.DoubleMatch + } + return nil +} + +func (m *ValueMatcher) GetStringMatch() *StringMatcher { + if x, ok := m.GetMatchPattern().(*ValueMatcher_StringMatch); ok { + return x.StringMatch + } + return nil +} + +func (m *ValueMatcher) GetBoolMatch() bool { + if x, ok := m.GetMatchPattern().(*ValueMatcher_BoolMatch); ok { + return x.BoolMatch + } + return false +} + +func (m *ValueMatcher) GetPresentMatch() bool { + if x, ok := m.GetMatchPattern().(*ValueMatcher_PresentMatch); ok { + return x.PresentMatch + } + return false +} + +func (m *ValueMatcher) GetListMatch() *ListMatcher { + if x, ok := m.GetMatchPattern().(*ValueMatcher_ListMatch); ok { + return x.ListMatch + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ValueMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ValueMatcher_NullMatch_)(nil), + (*ValueMatcher_DoubleMatch)(nil), + (*ValueMatcher_StringMatch)(nil), + (*ValueMatcher_BoolMatch)(nil), + (*ValueMatcher_PresentMatch)(nil), + (*ValueMatcher_ListMatch)(nil), + } +} + +type ValueMatcher_NullMatch struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValueMatcher_NullMatch) Reset() { *m = ValueMatcher_NullMatch{} } +func (m *ValueMatcher_NullMatch) String() string { return proto.CompactTextString(m) } +func (*ValueMatcher_NullMatch) ProtoMessage() {} +func (*ValueMatcher_NullMatch) Descriptor() ([]byte, []int) { + return fileDescriptor_145b36501d266253, []int{0, 0} +} + +func (m *ValueMatcher_NullMatch) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValueMatcher_NullMatch.Unmarshal(m, b) +} +func (m *ValueMatcher_NullMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValueMatcher_NullMatch.Marshal(b, m, deterministic) +} +func (m *ValueMatcher_NullMatch) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValueMatcher_NullMatch.Merge(m, src) +} +func (m *ValueMatcher_NullMatch) XXX_Size() int { + return xxx_messageInfo_ValueMatcher_NullMatch.Size(m) +} +func (m *ValueMatcher_NullMatch) XXX_DiscardUnknown() { + xxx_messageInfo_ValueMatcher_NullMatch.DiscardUnknown(m) +} + +var xxx_messageInfo_ValueMatcher_NullMatch proto.InternalMessageInfo + +type ListMatcher struct { + // Types that are valid to be assigned to MatchPattern: + // *ListMatcher_OneOf + MatchPattern isListMatcher_MatchPattern `protobuf_oneof:"match_pattern"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListMatcher) Reset() { *m = ListMatcher{} } +func (m *ListMatcher) String() string { return proto.CompactTextString(m) } +func (*ListMatcher) ProtoMessage() {} +func (*ListMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_145b36501d266253, []int{1} +} + +func (m *ListMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListMatcher.Unmarshal(m, b) +} +func (m *ListMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListMatcher.Marshal(b, m, deterministic) +} +func (m *ListMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListMatcher.Merge(m, src) +} +func (m *ListMatcher) XXX_Size() int { + return xxx_messageInfo_ListMatcher.Size(m) +} +func (m *ListMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_ListMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_ListMatcher proto.InternalMessageInfo + +type isListMatcher_MatchPattern interface { + isListMatcher_MatchPattern() +} + +type ListMatcher_OneOf struct { + OneOf *ValueMatcher `protobuf:"bytes,1,opt,name=one_of,json=oneOf,proto3,oneof"` +} + +func (*ListMatcher_OneOf) isListMatcher_MatchPattern() {} + +func (m *ListMatcher) GetMatchPattern() isListMatcher_MatchPattern { + if m != nil { + return m.MatchPattern + } + return nil +} + +func (m *ListMatcher) GetOneOf() *ValueMatcher { + if x, ok := m.GetMatchPattern().(*ListMatcher_OneOf); ok { + return x.OneOf + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ListMatcher) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ListMatcher_OneOf)(nil), + } +} + +func init() { + proto.RegisterType((*ValueMatcher)(nil), "envoy.type.matcher.ValueMatcher") + proto.RegisterType((*ValueMatcher_NullMatch)(nil), "envoy.type.matcher.ValueMatcher.NullMatch") + proto.RegisterType((*ListMatcher)(nil), "envoy.type.matcher.ListMatcher") +} + +func init() { proto.RegisterFile("envoy/type/matcher/value.proto", fileDescriptor_145b36501d266253) } + +var fileDescriptor_145b36501d266253 = []byte{ + // 376 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcd, 0x4a, 0xeb, 0x40, + 0x1c, 0xc5, 0x9b, 0xf6, 0x36, 0xdc, 0xfe, 0xd3, 0xc2, 0x65, 0xb8, 0x70, 0x2f, 0x05, 0x6d, 0x2c, + 0x08, 0xc5, 0x45, 0x02, 0xba, 0xd1, 0x9d, 0x04, 0x91, 0x82, 0x5f, 0xa5, 0x82, 0x4b, 0xcb, 0xc4, + 0x4c, 0x35, 0x30, 0x9d, 0x09, 0xf3, 0x51, 0xec, 0xce, 0xc7, 0xf0, 0x59, 0x7c, 0x02, 0xb7, 0xbe, + 0x8d, 0x4b, 0xc9, 0xcc, 0xc4, 0x16, 0x8c, 0xb8, 0x9b, 0xf9, 0x9f, 0x73, 0x7e, 0x39, 0x93, 0x19, + 0xd8, 0x26, 0x6c, 0xc9, 0x57, 0xb1, 0x5a, 0x15, 0x24, 0x5e, 0x60, 0x75, 0xf7, 0x40, 0x44, 0xbc, + 0xc4, 0x54, 0x93, 0xa8, 0x10, 0x5c, 0x71, 0x84, 0x8c, 0x1e, 0x95, 0x7a, 0xe4, 0xf4, 0xfe, 0xa0, + 0x26, 0xc3, 0xf4, 0x22, 0x25, 0xc2, 0x86, 0x6a, 0x0d, 0x52, 0x89, 0x9c, 0xdd, 0x3b, 0xc3, 0x96, + 0xce, 0x0a, 0x1c, 0x63, 0xc6, 0xb8, 0xc2, 0x2a, 0xe7, 0x4c, 0xc6, 0x52, 0x61, 0xa5, 0xa5, 0x93, + 0xff, 0x2d, 0x31, 0xcd, 0x33, 0xac, 0x48, 0x5c, 0x2d, 0xac, 0x30, 0x7c, 0x6e, 0x41, 0xf7, 0xa6, + 0x6c, 0x77, 0x61, 0xa9, 0xe8, 0x0c, 0x80, 0x69, 0x4a, 0x67, 0xe6, 0x2b, 0xff, 0xbd, 0xd0, 0x1b, + 0x05, 0xfb, 0x7b, 0xd1, 0xd7, 0xce, 0xd1, 0x66, 0x2a, 0xba, 0xd4, 0x94, 0x9a, 0xf5, 0xb8, 0x31, + 0xed, 0xb0, 0x6a, 0x83, 0x4e, 0xa1, 0x9b, 0x71, 0x9d, 0x52, 0xe2, 0x70, 0x4d, 0x83, 0xdb, 0xa9, + 0xc3, 0x9d, 0x18, 0x9f, 0xe3, 0x8d, 0x1b, 0xd3, 0x20, 0x5b, 0x0f, 0x4a, 0x8e, 0x3d, 0xad, 0xe3, + 0xb4, 0xbe, 0xe7, 0x5c, 0x1b, 0xdf, 0x06, 0x47, 0xae, 0x07, 0x68, 0x00, 0x90, 0x72, 0x5e, 0x1d, + 0xee, 0x57, 0xe8, 0x8d, 0x7e, 0x97, 0x85, 0xcb, 0x99, 0x35, 0xec, 0x42, 0xaf, 0x10, 0x44, 0x12, + 0xa6, 0x9c, 0xa7, 0xed, 0x3c, 0x5d, 0x37, 0xb6, 0xb6, 0x63, 0x00, 0x9a, 0xcb, 0xca, 0xe3, 0x9b, + 0x36, 0x83, 0xba, 0x36, 0xe7, 0xb9, 0x54, 0xeb, 0x2e, 0x1d, 0x5a, 0x6d, 0xfb, 0x01, 0x74, 0x3e, + 0xff, 0x59, 0xf2, 0x17, 0x7a, 0x26, 0x30, 0x2b, 0xb0, 0x52, 0x44, 0x30, 0xd4, 0x7a, 0x4f, 0xbc, + 0xe1, 0x2d, 0x04, 0x1b, 0x71, 0x74, 0x04, 0x3e, 0x67, 0x64, 0xc6, 0xe7, 0xee, 0x52, 0xc2, 0x9f, + 0x2e, 0x65, 0xdc, 0x98, 0xb6, 0x39, 0x23, 0x57, 0xf3, 0x7a, 0x7e, 0x72, 0xf8, 0xf2, 0xf4, 0xfa, + 0xe6, 0x37, 0xff, 0x78, 0x10, 0xe6, 0xdc, 0xc2, 0x0a, 0xc1, 0x1f, 0x57, 0x35, 0xdc, 0x04, 0x0c, + 0x78, 0x52, 0x3e, 0x99, 0x89, 0x97, 0xfa, 0xe6, 0xed, 0x1c, 0x7c, 0x04, 0x00, 0x00, 0xff, 0xff, + 0x57, 0x34, 0x64, 0x98, 0xeb, 0x02, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/matcher/value.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,320 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/matcher/value.proto + +package envoy_type_matcher + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _value_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on ValueMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ValueMatcher) Validate() error { + if m == nil { + return nil + } + + switch m.MatchPattern.(type) { + + case *ValueMatcher_NullMatch_: + + if v, ok := interface{}(m.GetNullMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ValueMatcherValidationError{ + field: "NullMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ValueMatcher_DoubleMatch: + + if v, ok := interface{}(m.GetDoubleMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ValueMatcherValidationError{ + field: "DoubleMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ValueMatcher_StringMatch: + + if v, ok := interface{}(m.GetStringMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ValueMatcherValidationError{ + field: "StringMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ValueMatcher_BoolMatch: + // no validation rules for BoolMatch + + case *ValueMatcher_PresentMatch: + // no validation rules for PresentMatch + + case *ValueMatcher_ListMatch: + + if v, ok := interface{}(m.GetListMatch()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ValueMatcherValidationError{ + field: "ListMatch", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ValueMatcherValidationError{ + field: "MatchPattern", + reason: "value is required", + } + + } + + return nil +} + +// ValueMatcherValidationError is the validation error returned by +// ValueMatcher.Validate if the designated constraints aren't met. +type ValueMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ValueMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ValueMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ValueMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ValueMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ValueMatcherValidationError) ErrorName() string { return "ValueMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e ValueMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sValueMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ValueMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ValueMatcherValidationError{} + +// Validate checks the field values on ListMatcher with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ListMatcher) Validate() error { + if m == nil { + return nil + } + + switch m.MatchPattern.(type) { + + case *ListMatcher_OneOf: + + if v, ok := interface{}(m.GetOneOf()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListMatcherValidationError{ + field: "OneOf", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ListMatcherValidationError{ + field: "MatchPattern", + reason: "value is required", + } + + } + + return nil +} + +// ListMatcherValidationError is the validation error returned by +// ListMatcher.Validate if the designated constraints aren't met. +type ListMatcherValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListMatcherValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListMatcherValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListMatcherValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListMatcherValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListMatcherValidationError) ErrorName() string { return "ListMatcherValidationError" } + +// Error satisfies the builtin error interface +func (e ListMatcherValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListMatcher.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListMatcherValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListMatcherValidationError{} + +// Validate checks the field values on ValueMatcher_NullMatch with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ValueMatcher_NullMatch) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// ValueMatcher_NullMatchValidationError is the validation error returned by +// ValueMatcher_NullMatch.Validate if the designated constraints aren't met. +type ValueMatcher_NullMatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ValueMatcher_NullMatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ValueMatcher_NullMatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ValueMatcher_NullMatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ValueMatcher_NullMatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ValueMatcher_NullMatchValidationError) ErrorName() string { + return "ValueMatcher_NullMatchValidationError" +} + +// Error satisfies the builtin error interface +func (e ValueMatcher_NullMatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sValueMatcher_NullMatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ValueMatcher_NullMatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ValueMatcher_NullMatchValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,413 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/metadata/v2/metadata.proto + +package envoy_type_metadata_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type MetadataKey struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Path []*MetadataKey_PathSegment `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKey) Reset() { *m = MetadataKey{} } +func (m *MetadataKey) String() string { return proto.CompactTextString(m) } +func (*MetadataKey) ProtoMessage() {} +func (*MetadataKey) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{0} +} + +func (m *MetadataKey) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKey.Unmarshal(m, b) +} +func (m *MetadataKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKey.Marshal(b, m, deterministic) +} +func (m *MetadataKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKey.Merge(m, src) +} +func (m *MetadataKey) XXX_Size() int { + return xxx_messageInfo_MetadataKey.Size(m) +} +func (m *MetadataKey) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKey.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKey proto.InternalMessageInfo + +func (m *MetadataKey) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *MetadataKey) GetPath() []*MetadataKey_PathSegment { + if m != nil { + return m.Path + } + return nil +} + +type MetadataKey_PathSegment struct { + // Types that are valid to be assigned to Segment: + // *MetadataKey_PathSegment_Key + Segment isMetadataKey_PathSegment_Segment `protobuf_oneof:"segment"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKey_PathSegment) Reset() { *m = MetadataKey_PathSegment{} } +func (m *MetadataKey_PathSegment) String() string { return proto.CompactTextString(m) } +func (*MetadataKey_PathSegment) ProtoMessage() {} +func (*MetadataKey_PathSegment) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{0, 0} +} + +func (m *MetadataKey_PathSegment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKey_PathSegment.Unmarshal(m, b) +} +func (m *MetadataKey_PathSegment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKey_PathSegment.Marshal(b, m, deterministic) +} +func (m *MetadataKey_PathSegment) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKey_PathSegment.Merge(m, src) +} +func (m *MetadataKey_PathSegment) XXX_Size() int { + return xxx_messageInfo_MetadataKey_PathSegment.Size(m) +} +func (m *MetadataKey_PathSegment) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKey_PathSegment.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKey_PathSegment proto.InternalMessageInfo + +type isMetadataKey_PathSegment_Segment interface { + isMetadataKey_PathSegment_Segment() +} + +type MetadataKey_PathSegment_Key struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3,oneof"` +} + +func (*MetadataKey_PathSegment_Key) isMetadataKey_PathSegment_Segment() {} + +func (m *MetadataKey_PathSegment) GetSegment() isMetadataKey_PathSegment_Segment { + if m != nil { + return m.Segment + } + return nil +} + +func (m *MetadataKey_PathSegment) GetKey() string { + if x, ok := m.GetSegment().(*MetadataKey_PathSegment_Key); ok { + return x.Key + } + return "" +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*MetadataKey_PathSegment) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*MetadataKey_PathSegment_Key)(nil), + } +} + +type MetadataKind struct { + // Types that are valid to be assigned to Kind: + // *MetadataKind_Request_ + // *MetadataKind_Route_ + // *MetadataKind_Cluster_ + // *MetadataKind_Host_ + Kind isMetadataKind_Kind `protobuf_oneof:"kind"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKind) Reset() { *m = MetadataKind{} } +func (m *MetadataKind) String() string { return proto.CompactTextString(m) } +func (*MetadataKind) ProtoMessage() {} +func (*MetadataKind) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{1} +} + +func (m *MetadataKind) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKind.Unmarshal(m, b) +} +func (m *MetadataKind) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKind.Marshal(b, m, deterministic) +} +func (m *MetadataKind) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKind.Merge(m, src) +} +func (m *MetadataKind) XXX_Size() int { + return xxx_messageInfo_MetadataKind.Size(m) +} +func (m *MetadataKind) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKind.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKind proto.InternalMessageInfo + +type isMetadataKind_Kind interface { + isMetadataKind_Kind() +} + +type MetadataKind_Request_ struct { + Request *MetadataKind_Request `protobuf:"bytes,1,opt,name=request,proto3,oneof"` +} + +type MetadataKind_Route_ struct { + Route *MetadataKind_Route `protobuf:"bytes,2,opt,name=route,proto3,oneof"` +} + +type MetadataKind_Cluster_ struct { + Cluster *MetadataKind_Cluster `protobuf:"bytes,3,opt,name=cluster,proto3,oneof"` +} + +type MetadataKind_Host_ struct { + Host *MetadataKind_Host `protobuf:"bytes,4,opt,name=host,proto3,oneof"` +} + +func (*MetadataKind_Request_) isMetadataKind_Kind() {} + +func (*MetadataKind_Route_) isMetadataKind_Kind() {} + +func (*MetadataKind_Cluster_) isMetadataKind_Kind() {} + +func (*MetadataKind_Host_) isMetadataKind_Kind() {} + +func (m *MetadataKind) GetKind() isMetadataKind_Kind { + if m != nil { + return m.Kind + } + return nil +} + +func (m *MetadataKind) GetRequest() *MetadataKind_Request { + if x, ok := m.GetKind().(*MetadataKind_Request_); ok { + return x.Request + } + return nil +} + +func (m *MetadataKind) GetRoute() *MetadataKind_Route { + if x, ok := m.GetKind().(*MetadataKind_Route_); ok { + return x.Route + } + return nil +} + +func (m *MetadataKind) GetCluster() *MetadataKind_Cluster { + if x, ok := m.GetKind().(*MetadataKind_Cluster_); ok { + return x.Cluster + } + return nil +} + +func (m *MetadataKind) GetHost() *MetadataKind_Host { + if x, ok := m.GetKind().(*MetadataKind_Host_); ok { + return x.Host + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*MetadataKind) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*MetadataKind_Request_)(nil), + (*MetadataKind_Route_)(nil), + (*MetadataKind_Cluster_)(nil), + (*MetadataKind_Host_)(nil), + } +} + +type MetadataKind_Request struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKind_Request) Reset() { *m = MetadataKind_Request{} } +func (m *MetadataKind_Request) String() string { return proto.CompactTextString(m) } +func (*MetadataKind_Request) ProtoMessage() {} +func (*MetadataKind_Request) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{1, 0} +} + +func (m *MetadataKind_Request) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKind_Request.Unmarshal(m, b) +} +func (m *MetadataKind_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKind_Request.Marshal(b, m, deterministic) +} +func (m *MetadataKind_Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKind_Request.Merge(m, src) +} +func (m *MetadataKind_Request) XXX_Size() int { + return xxx_messageInfo_MetadataKind_Request.Size(m) +} +func (m *MetadataKind_Request) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKind_Request.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKind_Request proto.InternalMessageInfo + +type MetadataKind_Route struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKind_Route) Reset() { *m = MetadataKind_Route{} } +func (m *MetadataKind_Route) String() string { return proto.CompactTextString(m) } +func (*MetadataKind_Route) ProtoMessage() {} +func (*MetadataKind_Route) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{1, 1} +} + +func (m *MetadataKind_Route) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKind_Route.Unmarshal(m, b) +} +func (m *MetadataKind_Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKind_Route.Marshal(b, m, deterministic) +} +func (m *MetadataKind_Route) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKind_Route.Merge(m, src) +} +func (m *MetadataKind_Route) XXX_Size() int { + return xxx_messageInfo_MetadataKind_Route.Size(m) +} +func (m *MetadataKind_Route) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKind_Route.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKind_Route proto.InternalMessageInfo + +type MetadataKind_Cluster struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKind_Cluster) Reset() { *m = MetadataKind_Cluster{} } +func (m *MetadataKind_Cluster) String() string { return proto.CompactTextString(m) } +func (*MetadataKind_Cluster) ProtoMessage() {} +func (*MetadataKind_Cluster) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{1, 2} +} + +func (m *MetadataKind_Cluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKind_Cluster.Unmarshal(m, b) +} +func (m *MetadataKind_Cluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKind_Cluster.Marshal(b, m, deterministic) +} +func (m *MetadataKind_Cluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKind_Cluster.Merge(m, src) +} +func (m *MetadataKind_Cluster) XXX_Size() int { + return xxx_messageInfo_MetadataKind_Cluster.Size(m) +} +func (m *MetadataKind_Cluster) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKind_Cluster.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKind_Cluster proto.InternalMessageInfo + +type MetadataKind_Host struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MetadataKind_Host) Reset() { *m = MetadataKind_Host{} } +func (m *MetadataKind_Host) String() string { return proto.CompactTextString(m) } +func (*MetadataKind_Host) ProtoMessage() {} +func (*MetadataKind_Host) Descriptor() ([]byte, []int) { + return fileDescriptor_3d75f017d303239e, []int{1, 3} +} + +func (m *MetadataKind_Host) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MetadataKind_Host.Unmarshal(m, b) +} +func (m *MetadataKind_Host) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MetadataKind_Host.Marshal(b, m, deterministic) +} +func (m *MetadataKind_Host) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetadataKind_Host.Merge(m, src) +} +func (m *MetadataKind_Host) XXX_Size() int { + return xxx_messageInfo_MetadataKind_Host.Size(m) +} +func (m *MetadataKind_Host) XXX_DiscardUnknown() { + xxx_messageInfo_MetadataKind_Host.DiscardUnknown(m) +} + +var xxx_messageInfo_MetadataKind_Host proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MetadataKey)(nil), "envoy.type.metadata.v2.MetadataKey") + proto.RegisterType((*MetadataKey_PathSegment)(nil), "envoy.type.metadata.v2.MetadataKey.PathSegment") + proto.RegisterType((*MetadataKind)(nil), "envoy.type.metadata.v2.MetadataKind") + proto.RegisterType((*MetadataKind_Request)(nil), "envoy.type.metadata.v2.MetadataKind.Request") + proto.RegisterType((*MetadataKind_Route)(nil), "envoy.type.metadata.v2.MetadataKind.Route") + proto.RegisterType((*MetadataKind_Cluster)(nil), "envoy.type.metadata.v2.MetadataKind.Cluster") + proto.RegisterType((*MetadataKind_Host)(nil), "envoy.type.metadata.v2.MetadataKind.Host") +} + +func init() { + proto.RegisterFile("envoy/type/metadata/v2/metadata.proto", fileDescriptor_3d75f017d303239e) +} + +var fileDescriptor_3d75f017d303239e = []byte{ + // 412 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x3f, 0x6b, 0xdb, 0x40, + 0x18, 0xc6, 0x7d, 0xfa, 0x63, 0xd9, 0xa7, 0xb6, 0x14, 0x0d, 0xad, 0xaa, 0xd2, 0x62, 0x4c, 0x0b, + 0x6e, 0x29, 0x12, 0xc8, 0x5b, 0x97, 0xc2, 0x75, 0x11, 0x04, 0x83, 0x51, 0xe6, 0x0c, 0x97, 0xe8, + 0xb0, 0x85, 0x6d, 0x9d, 0x22, 0xbd, 0x12, 0xd1, 0x96, 0x6f, 0x10, 0xc8, 0x94, 0xef, 0x91, 0x2d, + 0x9f, 0x20, 0x6b, 0xe6, 0x7c, 0x8b, 0x4c, 0xc1, 0x43, 0x08, 0x77, 0x92, 0x8d, 0x21, 0x36, 0x71, + 0xb6, 0xe3, 0x9e, 0xf7, 0x79, 0x9e, 0xdf, 0x1d, 0x2f, 0xfe, 0xc9, 0x92, 0x92, 0x57, 0x1e, 0x54, + 0x29, 0xf3, 0x16, 0x0c, 0x68, 0x44, 0x81, 0x7a, 0xa5, 0xbf, 0x3e, 0xbb, 0x69, 0xc6, 0x81, 0x5b, + 0x9f, 0xe4, 0x98, 0x2b, 0xc6, 0xdc, 0xb5, 0x54, 0xfa, 0xce, 0xf7, 0x22, 0x4a, 0xa9, 0x47, 0x93, + 0x84, 0x03, 0x85, 0x98, 0x27, 0xb9, 0xb7, 0x88, 0x27, 0x19, 0x05, 0x56, 0xfb, 0x9c, 0x6f, 0x2f, + 0xf4, 0x1c, 0x28, 0x14, 0x79, 0x23, 0x7f, 0x2e, 0xe9, 0x3c, 0x8e, 0x28, 0x30, 0x6f, 0x75, 0xa8, + 0x85, 0xfe, 0x35, 0xc2, 0xe6, 0xa8, 0xe9, 0x39, 0x60, 0x95, 0xf5, 0x05, 0xab, 0x33, 0x56, 0xd9, + 0xa8, 0x87, 0x06, 0x5d, 0x62, 0x2c, 0x89, 0x96, 0x29, 0x3d, 0x14, 0x8a, 0x3b, 0x6b, 0x84, 0xb5, + 0x94, 0xc2, 0xd4, 0x56, 0x7a, 0xea, 0xc0, 0xf4, 0x3d, 0x77, 0x3b, 0xa9, 0xbb, 0x91, 0xe6, 0x8e, + 0x29, 0x4c, 0x0f, 0xd9, 0x64, 0xc1, 0x12, 0x20, 0x9d, 0x25, 0xd1, 0x2f, 0x91, 0xd2, 0x41, 0xa1, + 0x8c, 0x71, 0xfe, 0x62, 0x73, 0x43, 0xb6, 0xbe, 0x6e, 0x2b, 0x0e, 0x5a, 0xb2, 0x9a, 0x7c, 0xc0, + 0x46, 0xde, 0xcc, 0xa9, 0x8f, 0x04, 0xf5, 0xef, 0x15, 0xfc, 0x6e, 0xdd, 0x13, 0x27, 0x91, 0x15, + 0x60, 0x23, 0x63, 0xa7, 0x05, 0xcb, 0x41, 0x26, 0x98, 0xfe, 0x9f, 0x57, 0xf1, 0xe2, 0x24, 0x72, + 0xc3, 0xda, 0x13, 0xb4, 0xc2, 0x95, 0xdd, 0x22, 0x58, 0xcf, 0x78, 0x01, 0xcc, 0x56, 0x64, 0xce, + 0xef, 0xfd, 0x72, 0x84, 0x23, 0x68, 0x85, 0xb5, 0x55, 0xd0, 0x9c, 0xcc, 0x8b, 0x1c, 0x58, 0x66, + 0xab, 0x6f, 0xa0, 0xf9, 0x5f, 0x7b, 0x04, 0x4d, 0x63, 0xb7, 0xfe, 0x61, 0x6d, 0xca, 0x73, 0xb0, + 0x35, 0x19, 0xf3, 0x6b, 0xaf, 0x98, 0x80, 0xcb, 0x17, 0x49, 0xa3, 0xd3, 0xc5, 0x46, 0xf3, 0x48, + 0xc7, 0xc0, 0xba, 0xe4, 0x14, 0x77, 0x4d, 0x95, 0xd3, 0xc6, 0x9a, 0x18, 0x27, 0x26, 0xd6, 0x66, + 0xe2, 0x1f, 0xc5, 0xef, 0x92, 0xa3, 0x87, 0xab, 0xa7, 0x0b, 0xdd, 0xde, 0xb1, 0x8b, 0xc3, 0x9b, + 0xf3, 0xdb, 0xbb, 0xb6, 0xf2, 0x11, 0xe1, 0x1f, 0x31, 0xaf, 0x81, 0xd2, 0x8c, 0x9f, 0x55, 0x3b, + 0xd8, 0xc8, 0xfb, 0x15, 0xdc, 0x58, 0x2c, 0xdc, 0x18, 0x1d, 0xb7, 0xe5, 0xe6, 0x0d, 0x9f, 0x03, + 0x00, 0x00, 0xff, 0xff, 0xe1, 0x4b, 0x2c, 0x5d, 0x12, 0x03, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2/metadata.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,608 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/metadata/v2/metadata.proto + +package envoy_type_metadata_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _metadata_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on MetadataKey with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *MetadataKey) Validate() error { + if m == nil { + return nil + } + + if len(m.GetKey()) < 1 { + return MetadataKeyValidationError{ + field: "Key", + reason: "value length must be at least 1 bytes", + } + } + + if len(m.GetPath()) < 1 { + return MetadataKeyValidationError{ + field: "Path", + reason: "value must contain at least 1 item(s)", + } + } + + for idx, item := range m.GetPath() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataKeyValidationError{ + field: fmt.Sprintf("Path[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// MetadataKeyValidationError is the validation error returned by +// MetadataKey.Validate if the designated constraints aren't met. +type MetadataKeyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKeyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKeyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKeyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKeyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKeyValidationError) ErrorName() string { return "MetadataKeyValidationError" } + +// Error satisfies the builtin error interface +func (e MetadataKeyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKey.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKeyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKeyValidationError{} + +// Validate checks the field values on MetadataKind with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *MetadataKind) Validate() error { + if m == nil { + return nil + } + + switch m.Kind.(type) { + + case *MetadataKind_Request_: + + if v, ok := interface{}(m.GetRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataKindValidationError{ + field: "Request", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *MetadataKind_Route_: + + if v, ok := interface{}(m.GetRoute()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataKindValidationError{ + field: "Route", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *MetadataKind_Cluster_: + + if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataKindValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *MetadataKind_Host_: + + if v, ok := interface{}(m.GetHost()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetadataKindValidationError{ + field: "Host", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return MetadataKindValidationError{ + field: "Kind", + reason: "value is required", + } + + } + + return nil +} + +// MetadataKindValidationError is the validation error returned by +// MetadataKind.Validate if the designated constraints aren't met. +type MetadataKindValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKindValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKindValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKindValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKindValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKindValidationError) ErrorName() string { return "MetadataKindValidationError" } + +// Error satisfies the builtin error interface +func (e MetadataKindValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKind.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKindValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKindValidationError{} + +// Validate checks the field values on MetadataKey_PathSegment with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *MetadataKey_PathSegment) Validate() error { + if m == nil { + return nil + } + + switch m.Segment.(type) { + + case *MetadataKey_PathSegment_Key: + + if len(m.GetKey()) < 1 { + return MetadataKey_PathSegmentValidationError{ + field: "Key", + reason: "value length must be at least 1 bytes", + } + } + + default: + return MetadataKey_PathSegmentValidationError{ + field: "Segment", + reason: "value is required", + } + + } + + return nil +} + +// MetadataKey_PathSegmentValidationError is the validation error returned by +// MetadataKey_PathSegment.Validate if the designated constraints aren't met. +type MetadataKey_PathSegmentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKey_PathSegmentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKey_PathSegmentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKey_PathSegmentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKey_PathSegmentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKey_PathSegmentValidationError) ErrorName() string { + return "MetadataKey_PathSegmentValidationError" +} + +// Error satisfies the builtin error interface +func (e MetadataKey_PathSegmentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKey_PathSegment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKey_PathSegmentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKey_PathSegmentValidationError{} + +// Validate checks the field values on MetadataKind_Request with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *MetadataKind_Request) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// MetadataKind_RequestValidationError is the validation error returned by +// MetadataKind_Request.Validate if the designated constraints aren't met. +type MetadataKind_RequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKind_RequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKind_RequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKind_RequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKind_RequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKind_RequestValidationError) ErrorName() string { + return "MetadataKind_RequestValidationError" +} + +// Error satisfies the builtin error interface +func (e MetadataKind_RequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKind_Request.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKind_RequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKind_RequestValidationError{} + +// Validate checks the field values on MetadataKind_Route with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *MetadataKind_Route) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// MetadataKind_RouteValidationError is the validation error returned by +// MetadataKind_Route.Validate if the designated constraints aren't met. +type MetadataKind_RouteValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKind_RouteValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKind_RouteValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKind_RouteValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKind_RouteValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKind_RouteValidationError) ErrorName() string { + return "MetadataKind_RouteValidationError" +} + +// Error satisfies the builtin error interface +func (e MetadataKind_RouteValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKind_Route.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKind_RouteValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKind_RouteValidationError{} + +// Validate checks the field values on MetadataKind_Cluster with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *MetadataKind_Cluster) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// MetadataKind_ClusterValidationError is the validation error returned by +// MetadataKind_Cluster.Validate if the designated constraints aren't met. +type MetadataKind_ClusterValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKind_ClusterValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKind_ClusterValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKind_ClusterValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKind_ClusterValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKind_ClusterValidationError) ErrorName() string { + return "MetadataKind_ClusterValidationError" +} + +// Error satisfies the builtin error interface +func (e MetadataKind_ClusterValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKind_Cluster.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKind_ClusterValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKind_ClusterValidationError{} + +// Validate checks the field values on MetadataKind_Host with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *MetadataKind_Host) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// MetadataKind_HostValidationError is the validation error returned by +// MetadataKind_Host.Validate if the designated constraints aren't met. +type MetadataKind_HostValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetadataKind_HostValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetadataKind_HostValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetadataKind_HostValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetadataKind_HostValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetadataKind_HostValidationError) ErrorName() string { + return "MetadataKind_HostValidationError" +} + +// Error satisfies the builtin error interface +func (e MetadataKind_HostValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetadataKind_Host.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetadataKind_HostValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetadataKind_HostValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,18 +1,14 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/type/percent.proto package envoy_type import ( - bytes "bytes" - encoding_binary "encoding/binary" fmt "fmt" - io "io" - math "math" - + _ "github.com/cncf/udpa/go/udpa/annotations" _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/golang/protobuf/proto" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,24 +20,14 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Fraction percentages support several fixed denominator values. type FractionalPercent_DenominatorType int32 const ( - // 100. - // - // **Example**: 1/100 = 1%. - FractionalPercent_HUNDRED FractionalPercent_DenominatorType = 0 - // 10,000. - // - // **Example**: 1/10000 = 0.01%. + FractionalPercent_HUNDRED FractionalPercent_DenominatorType = 0 FractionalPercent_TEN_THOUSAND FractionalPercent_DenominatorType = 1 - // 1,000,000. - // - // **Example**: 1/1000000 = 0.0001%. - FractionalPercent_MILLION FractionalPercent_DenominatorType = 2 + FractionalPercent_MILLION FractionalPercent_DenominatorType = 2 ) var FractionalPercent_DenominatorType_name = map[int32]string{ @@ -64,7 +50,6 @@ return fileDescriptor_89401f90eb07307e, []int{1, 0} } -// Identifies a percentage, in the range [0.0, 100.0]. type Percent struct { Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -78,26 +63,18 @@ func (*Percent) Descriptor() ([]byte, []int) { return fileDescriptor_89401f90eb07307e, []int{0} } + func (m *Percent) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Percent.Unmarshal(m, b) } func (m *Percent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Percent.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Percent.Marshal(b, m, deterministic) } func (m *Percent) XXX_Merge(src proto.Message) { xxx_messageInfo_Percent.Merge(m, src) } func (m *Percent) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Percent.Size(m) } func (m *Percent) XXX_DiscardUnknown() { xxx_messageInfo_Percent.DiscardUnknown(m) @@ -112,17 +89,8 @@ return 0 } -// A fractional percentage is used in cases in which for performance reasons performing floating -// point to integer conversions during randomness calculations is undesirable. The message includes -// both a numerator and denominator that together determine the final fractional value. -// -// * **Example**: 1/100 = 1%. -// * **Example**: 3/10000 = 0.03%. type FractionalPercent struct { - // Specifies the numerator. Defaults to 0. - Numerator uint32 `protobuf:"varint,1,opt,name=numerator,proto3" json:"numerator,omitempty"` - // Specifies the denominator. If the denominator specified is less than the numerator, the final - // fractional percentage is capped at 1 (100%). + Numerator uint32 `protobuf:"varint,1,opt,name=numerator,proto3" json:"numerator,omitempty"` Denominator FractionalPercent_DenominatorType `protobuf:"varint,2,opt,name=denominator,proto3,enum=envoy.type.FractionalPercent_DenominatorType" json:"denominator,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -135,26 +103,18 @@ func (*FractionalPercent) Descriptor() ([]byte, []int) { return fileDescriptor_89401f90eb07307e, []int{1} } + func (m *FractionalPercent) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_FractionalPercent.Unmarshal(m, b) } func (m *FractionalPercent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_FractionalPercent.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_FractionalPercent.Marshal(b, m, deterministic) } func (m *FractionalPercent) XXX_Merge(src proto.Message) { xxx_messageInfo_FractionalPercent.Merge(m, src) } func (m *FractionalPercent) XXX_Size() int { - return m.Size() + return xxx_messageInfo_FractionalPercent.Size(m) } func (m *FractionalPercent) XXX_DiscardUnknown() { xxx_messageInfo_FractionalPercent.DiscardUnknown(m) @@ -185,463 +145,25 @@ func init() { proto.RegisterFile("envoy/type/percent.proto", fileDescriptor_89401f90eb07307e) } var fileDescriptor_89401f90eb07307e = []byte{ - // 306 bytes of a gzipped FileDescriptorProto + // 308 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x48, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x48, 0x2d, 0x4a, 0x4e, 0xcd, 0x2b, 0xd1, 0x2b, - 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0xcb, 0xe8, 0x81, 0x64, 0xa4, 0xc4, 0xcb, 0x12, 0x73, - 0x32, 0x53, 0x12, 0x4b, 0x52, 0xf5, 0x61, 0x0c, 0x88, 0x22, 0x29, 0x91, 0xf4, 0xfc, 0xf4, 0x7c, - 0x30, 0x53, 0x1f, 0xc4, 0x82, 0x88, 0x2a, 0x59, 0x71, 0xb1, 0x07, 0x40, 0xcc, 0x12, 0xd2, 0xe7, - 0x62, 0x2d, 0x4b, 0xcc, 0x29, 0x4d, 0x95, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x74, 0x92, 0xdc, 0xf5, - 0xf2, 0x00, 0xb3, 0x88, 0x90, 0x90, 0x24, 0x03, 0x18, 0x44, 0x3a, 0x68, 0x32, 0x40, 0x41, 0x10, - 0x44, 0x9d, 0xd2, 0x59, 0x46, 0x2e, 0x41, 0xb7, 0xa2, 0xc4, 0xe4, 0x92, 0xcc, 0xfc, 0xbc, 0xc4, - 0x1c, 0x98, 0x31, 0x32, 0x5c, 0x9c, 0x79, 0xa5, 0xb9, 0xa9, 0x45, 0x89, 0x25, 0xf9, 0x45, 0x60, - 0xa3, 0x78, 0x83, 0x10, 0x02, 0x42, 0xd1, 0x5c, 0xdc, 0x29, 0xa9, 0x79, 0xf9, 0xb9, 0x99, 0x79, - 0x60, 0x79, 0x26, 0x05, 0x46, 0x0d, 0x3e, 0x23, 0x5d, 0x3d, 0x84, 0x07, 0xf4, 0x30, 0x4c, 0xd4, - 0x73, 0x41, 0x68, 0x08, 0xa9, 0x2c, 0x48, 0x75, 0xe2, 0x02, 0xb9, 0x8c, 0xb5, 0x89, 0x91, 0x49, - 0x80, 0x31, 0x08, 0xd9, 0x34, 0x25, 0x5b, 0x2e, 0x7e, 0x34, 0xb5, 0x42, 0xdc, 0x5c, 0xec, 0x1e, - 0xa1, 0x7e, 0x2e, 0x41, 0xae, 0x2e, 0x02, 0x0c, 0x42, 0x02, 0x5c, 0x3c, 0x21, 0xae, 0x7e, 0xf1, - 0x21, 0x1e, 0xfe, 0xa1, 0xc1, 0x8e, 0x7e, 0x2e, 0x02, 0x8c, 0x20, 0x69, 0x5f, 0x4f, 0x1f, 0x1f, - 0x4f, 0x7f, 0x3f, 0x01, 0x26, 0x27, 0xab, 0x15, 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, - 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0x46, 0x2e, 0x89, 0xcc, 0x7c, 0x88, 0xd3, 0x0a, 0x8a, - 0xf2, 0x2b, 0x2a, 0x91, 0x5c, 0xe9, 0xc4, 0x03, 0x75, 0x5c, 0x00, 0x28, 0x14, 0x03, 0x18, 0x93, - 0xd8, 0xc0, 0xc1, 0x69, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xb0, 0xde, 0x3c, 0x4c, 0xa5, 0x01, - 0x00, 0x00, -} - -func (this *Percent) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Percent) - if !ok { - that2, ok := that.(Percent) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Value != that1.Value { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (this *FractionalPercent) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*FractionalPercent) - if !ok { - that2, ok := that.(FractionalPercent) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Numerator != that1.Numerator { - return false - } - if this.Denominator != that1.Denominator { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *Percent) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Percent) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Value != 0 { - dAtA[i] = 0x9 - i++ - encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Value)))) - i += 8 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *FractionalPercent) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FractionalPercent) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Numerator != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintPercent(dAtA, i, uint64(m.Numerator)) - } - if m.Denominator != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintPercent(dAtA, i, uint64(m.Denominator)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintPercent(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Percent) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Value != 0 { - n += 9 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *FractionalPercent) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Numerator != 0 { - n += 1 + sovPercent(uint64(m.Numerator)) - } - if m.Denominator != 0 { - n += 1 + sovPercent(uint64(m.Denominator)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n + 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0xcb, 0xe8, 0x81, 0x64, 0xa4, 0x64, 0x4b, 0x53, 0x0a, + 0x12, 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0xf5, 0x8b, 0x4b, + 0x12, 0x4b, 0x4a, 0x8b, 0x21, 0x4a, 0xa5, 0xc4, 0xcb, 0x12, 0x73, 0x32, 0x53, 0x12, 0x4b, 0x52, + 0xf5, 0x61, 0x0c, 0x88, 0x84, 0x92, 0x05, 0x17, 0x7b, 0x00, 0xc4, 0x50, 0x21, 0x5d, 0x2e, 0xd6, + 0xb2, 0xc4, 0x9c, 0xd2, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x46, 0x27, 0xf1, 0x5f, 0x4e, 0x22, + 0x42, 0x42, 0x92, 0x0c, 0x60, 0x10, 0xe9, 0xa0, 0xc9, 0x00, 0x05, 0x41, 0x10, 0x55, 0x4a, 0xa7, + 0x19, 0xb9, 0x04, 0xdd, 0x8a, 0x12, 0x93, 0x41, 0xb6, 0x25, 0xe6, 0xc0, 0x0c, 0x91, 0xe1, 0xe2, + 0xcc, 0x2b, 0xcd, 0x4d, 0x2d, 0x4a, 0x2c, 0xc9, 0x2f, 0x02, 0x1b, 0xc4, 0x1b, 0x84, 0x10, 0x10, + 0x8a, 0xe4, 0xe2, 0x4e, 0x49, 0xcd, 0xcb, 0xcf, 0xcd, 0xcc, 0x03, 0xcb, 0x33, 0x29, 0x30, 0x6a, + 0xf0, 0x19, 0xe9, 0xea, 0x21, 0xfc, 0xa1, 0x87, 0x61, 0xa2, 0x9e, 0x0b, 0x42, 0x43, 0x48, 0x65, + 0x41, 0xaa, 0x13, 0xc7, 0x2f, 0x27, 0xd6, 0x26, 0x46, 0x26, 0x01, 0xc6, 0x20, 0x64, 0xb3, 0x94, + 0x6c, 0xb9, 0xf8, 0xd1, 0x54, 0x0a, 0x71, 0x73, 0xb1, 0x7b, 0x84, 0xfa, 0xb9, 0x04, 0xb9, 0xba, + 0x08, 0x30, 0x08, 0x09, 0x70, 0xf1, 0x84, 0xb8, 0xfa, 0xc5, 0x87, 0x78, 0xf8, 0x87, 0x06, 0x3b, + 0xfa, 0xb9, 0x08, 0x30, 0x82, 0xa4, 0x7d, 0x3d, 0x7d, 0x7c, 0x3c, 0xfd, 0xfd, 0x04, 0x98, 0x9c, + 0x8c, 0x76, 0x35, 0x9c, 0xb8, 0xc8, 0xc6, 0x24, 0xc0, 0xc8, 0x25, 0x91, 0x99, 0x0f, 0x71, 0x50, + 0x41, 0x51, 0x7e, 0x45, 0x25, 0x92, 0xdb, 0x9c, 0x78, 0xa0, 0x4e, 0x0a, 0x00, 0x85, 0x5c, 0x00, + 0x63, 0x12, 0x1b, 0x38, 0x08, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x0b, 0xd6, 0x6f, + 0xa2, 0x01, 0x00, 0x00, } - -func sovPercent(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozPercent(x uint64) (n int) { - return sovPercent(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Percent) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPercent - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Percent: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Percent: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) - iNdEx += 8 - m.Value = float64(math.Float64frombits(v)) - default: - iNdEx = preIndex - skippy, err := skipPercent(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPercent - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthPercent - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FractionalPercent) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPercent - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FractionalPercent: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FractionalPercent: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Numerator", wireType) - } - m.Numerator = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPercent - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Numerator |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Denominator", wireType) - } - m.Denominator = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowPercent - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Denominator |= FractionalPercent_DenominatorType(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipPercent(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthPercent - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthPercent - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipPercent(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPercent - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPercent - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPercent - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthPercent - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthPercent - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowPercent - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipPercent(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthPercent - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthPercent = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowPercent = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/percent.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _percent_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on Percent with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Percent) Validate() error { diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,17 +1,13 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: envoy/type/range.proto package envoy_type import ( - bytes "bytes" - encoding_binary "encoding/binary" fmt "fmt" - io "io" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" math "math" - - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" ) // Reference imports to suppress errors if they are not otherwise used. @@ -23,14 +19,10 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package -// Specifies the int64 start and end of the range using half-open interval semantics [start, -// end). type Int64Range struct { - // start of the range (inclusive) - Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` - // end of the range (exclusive) + Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -43,26 +35,18 @@ func (*Int64Range) Descriptor() ([]byte, []int) { return fileDescriptor_6d5354588716e6e7, []int{0} } + func (m *Int64Range) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_Int64Range.Unmarshal(m, b) } func (m *Int64Range) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Int64Range.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_Int64Range.Marshal(b, m, deterministic) } func (m *Int64Range) XXX_Merge(src proto.Message) { xxx_messageInfo_Int64Range.Merge(m, src) } func (m *Int64Range) XXX_Size() int { - return m.Size() + return xxx_messageInfo_Int64Range.Size(m) } func (m *Int64Range) XXX_DiscardUnknown() { xxx_messageInfo_Int64Range.DiscardUnknown(m) @@ -84,12 +68,55 @@ return 0 } -// Specifies the double start and end of the range using half-open interval semantics [start, -// end). +type Int32Range struct { + Start int32 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` + End int32 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Int32Range) Reset() { *m = Int32Range{} } +func (m *Int32Range) String() string { return proto.CompactTextString(m) } +func (*Int32Range) ProtoMessage() {} +func (*Int32Range) Descriptor() ([]byte, []int) { + return fileDescriptor_6d5354588716e6e7, []int{1} +} + +func (m *Int32Range) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Int32Range.Unmarshal(m, b) +} +func (m *Int32Range) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Int32Range.Marshal(b, m, deterministic) +} +func (m *Int32Range) XXX_Merge(src proto.Message) { + xxx_messageInfo_Int32Range.Merge(m, src) +} +func (m *Int32Range) XXX_Size() int { + return xxx_messageInfo_Int32Range.Size(m) +} +func (m *Int32Range) XXX_DiscardUnknown() { + xxx_messageInfo_Int32Range.DiscardUnknown(m) +} + +var xxx_messageInfo_Int32Range proto.InternalMessageInfo + +func (m *Int32Range) GetStart() int32 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Int32Range) GetEnd() int32 { + if m != nil { + return m.End + } + return 0 +} + type DoubleRange struct { - // start of the range (inclusive) - Start float64 `protobuf:"fixed64,1,opt,name=start,proto3" json:"start,omitempty"` - // end of the range (exclusive) + Start float64 `protobuf:"fixed64,1,opt,name=start,proto3" json:"start,omitempty"` End float64 `protobuf:"fixed64,2,opt,name=end,proto3" json:"end,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -100,28 +127,20 @@ func (m *DoubleRange) String() string { return proto.CompactTextString(m) } func (*DoubleRange) ProtoMessage() {} func (*DoubleRange) Descriptor() ([]byte, []int) { - return fileDescriptor_6d5354588716e6e7, []int{1} + return fileDescriptor_6d5354588716e6e7, []int{2} } + func (m *DoubleRange) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + return xxx_messageInfo_DoubleRange.Unmarshal(m, b) } func (m *DoubleRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_DoubleRange.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalTo(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + return xxx_messageInfo_DoubleRange.Marshal(b, m, deterministic) } func (m *DoubleRange) XXX_Merge(src proto.Message) { xxx_messageInfo_DoubleRange.Merge(m, src) } func (m *DoubleRange) XXX_Size() int { - return m.Size() + return xxx_messageInfo_DoubleRange.Size(m) } func (m *DoubleRange) XXX_DiscardUnknown() { xxx_messageInfo_DoubleRange.DiscardUnknown(m) @@ -145,484 +164,25 @@ func init() { proto.RegisterType((*Int64Range)(nil), "envoy.type.Int64Range") + proto.RegisterType((*Int32Range)(nil), "envoy.type.Int32Range") proto.RegisterType((*DoubleRange)(nil), "envoy.type.DoubleRange") } func init() { proto.RegisterFile("envoy/type/range.proto", fileDescriptor_6d5354588716e6e7) } var fileDescriptor_6d5354588716e6e7 = []byte{ - // 184 bytes of a gzipped FileDescriptorProto + // 195 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcd, 0x2b, 0xcb, 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x4a, 0xcc, 0x4b, 0x4f, 0xd5, 0x2b, 0x28, 0xca, - 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x8b, 0xeb, 0x81, 0xc4, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, - 0xc2, 0xfa, 0x20, 0x16, 0x44, 0x85, 0x92, 0x09, 0x17, 0x97, 0x67, 0x5e, 0x89, 0x99, 0x49, 0x10, - 0x48, 0x97, 0x90, 0x08, 0x17, 0x6b, 0x71, 0x49, 0x62, 0x51, 0x89, 0x04, 0xa3, 0x02, 0xa3, 0x06, - 0x73, 0x10, 0x84, 0x23, 0x24, 0xc0, 0xc5, 0x9c, 0x9a, 0x97, 0x22, 0xc1, 0x04, 0x16, 0x03, 0x31, - 0x95, 0x4c, 0xb9, 0xb8, 0x5d, 0xf2, 0x4b, 0x93, 0x72, 0x52, 0xb1, 0x68, 0x63, 0xc4, 0xa2, 0x8d, - 0x11, 0xac, 0xcd, 0xc9, 0x65, 0xc5, 0x23, 0x39, 0xc6, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, - 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x91, 0x4b, 0x22, 0x33, 0x5f, 0x0f, 0xec, 0xc6, 0x82, 0xa2, 0xfc, - 0x8a, 0x4a, 0x3d, 0x84, 0x73, 0x9d, 0xb8, 0xc0, 0x46, 0x07, 0x80, 0x1c, 0x19, 0xc0, 0x18, 0x05, - 0xf1, 0x48, 0x3c, 0x48, 0x26, 0x89, 0x0d, 0xec, 0x72, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xf5, 0x05, 0x36, 0xce, 0xf5, 0x00, 0x00, 0x00, -} - -func (this *Int64Range) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Int64Range) - if !ok { - that2, ok := that.(Int64Range) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Start != that1.Start { - return false - } - if this.End != that1.End { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true + 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x8b, 0xeb, 0x81, 0xc4, 0xa5, 0x64, 0x4b, 0x53, 0x0a, 0x12, 0xf5, + 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0xf5, 0x8b, 0x4b, 0x12, 0x4b, + 0x4a, 0x8b, 0x21, 0x4a, 0x95, 0x4c, 0xb8, 0xb8, 0x3c, 0xf3, 0x4a, 0xcc, 0x4c, 0x82, 0x40, 0xda, + 0x85, 0x44, 0xb8, 0x58, 0x8b, 0x4b, 0x12, 0x8b, 0x4a, 0x24, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, + 0x20, 0x1c, 0x21, 0x01, 0x2e, 0xe6, 0xd4, 0xbc, 0x14, 0x09, 0x26, 0xb0, 0x18, 0x88, 0x09, 0xd5, + 0x65, 0x6c, 0x84, 0x45, 0x17, 0x2b, 0x16, 0x5d, 0xac, 0x10, 0x5d, 0xa6, 0x5c, 0xdc, 0x2e, 0xf9, + 0xa5, 0x49, 0x39, 0xa9, 0x58, 0xb4, 0x31, 0x62, 0xd1, 0xc6, 0x08, 0xd6, 0xe6, 0x64, 0xb0, 0xab, + 0xe1, 0xc4, 0x45, 0x36, 0x26, 0x01, 0x46, 0x2e, 0x89, 0xcc, 0x7c, 0x3d, 0xb0, 0xd7, 0x0a, 0x8a, + 0xf2, 0x2b, 0x2a, 0xf5, 0x10, 0xbe, 0x74, 0xe2, 0x02, 0x1b, 0x19, 0x00, 0xf2, 0x52, 0x00, 0x63, + 0x12, 0x1b, 0xd8, 0x6f, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc3, 0xfa, 0xc1, 0x35, 0x20, + 0x01, 0x00, 0x00, } -func (this *DoubleRange) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*DoubleRange) - if !ok { - that2, ok := that.(DoubleRange) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Start != that1.Start { - return false - } - if this.End != that1.End { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *Int64Range) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Int64Range) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Start != 0 { - dAtA[i] = 0x8 - i++ - i = encodeVarintRange(dAtA, i, uint64(m.Start)) - } - if m.End != 0 { - dAtA[i] = 0x10 - i++ - i = encodeVarintRange(dAtA, i, uint64(m.End)) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func (m *DoubleRange) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DoubleRange) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Start != 0 { - dAtA[i] = 0x9 - i++ - encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.Start)))) - i += 8 - } - if m.End != 0 { - dAtA[i] = 0x11 - i++ - encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.End)))) - i += 8 - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil -} - -func encodeVarintRange(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Int64Range) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Start != 0 { - n += 1 + sovRange(uint64(m.Start)) - } - if m.End != 0 { - n += 1 + sovRange(uint64(m.End)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *DoubleRange) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Start != 0 { - n += 9 - } - if m.End != 0 { - n += 9 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovRange(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozRange(x uint64) (n int) { - return sovRange(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Int64Range) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRange - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Int64Range: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Int64Range: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) - } - m.Start = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRange - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Start |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field End", wireType) - } - m.End = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRange - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.End |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipRange(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRange - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRange - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DoubleRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRange - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DoubleRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DoubleRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) - iNdEx += 8 - m.Start = float64(math.Float64frombits(v)) - case 2: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field End", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) - iNdEx += 8 - m.End = float64(math.Float64frombits(v)) - default: - iNdEx = preIndex - skippy, err := skipRange(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthRange - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthRange - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipRange(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRange - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRange - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRange - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthRange - } - iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthRange - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRange - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRange(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthRange - } - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthRange = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRange = fmt.Errorf("proto: integer overflow") -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.validate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/range.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,7 @@ "time" "unicode/utf8" - "github.com/gogo/protobuf/types" + "github.com/golang/protobuf/ptypes" ) // ensure the imports are used @@ -30,9 +30,12 @@ _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = types.DynamicAny{} + _ = ptypes.DynamicAny{} ) +// define the regex for a UUID once up-front +var _range_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + // Validate checks the field values on Int64Range with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Int64Range) Validate() error { @@ -101,6 +104,74 @@ ErrorName() string } = Int64RangeValidationError{} +// Validate checks the field values on Int32Range with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Int32Range) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Start + + // no validation rules for End + + return nil +} + +// Int32RangeValidationError is the validation error returned by +// Int32Range.Validate if the designated constraints aren't met. +type Int32RangeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Int32RangeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Int32RangeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Int32RangeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Int32RangeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Int32RangeValidationError) ErrorName() string { return "Int32RangeValidationError" } + +// Error satisfies the builtin error interface +func (e Int32RangeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sInt32Range.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Int32RangeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Int32RangeValidationError{} + // Validate checks the field values on DoubleRange with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,100 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/semantic_version.proto + +package envoy_type + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type SemanticVersion struct { + MajorNumber uint32 `protobuf:"varint,1,opt,name=major_number,json=majorNumber,proto3" json:"major_number,omitempty"` + MinorNumber uint32 `protobuf:"varint,2,opt,name=minor_number,json=minorNumber,proto3" json:"minor_number,omitempty"` + Patch uint32 `protobuf:"varint,3,opt,name=patch,proto3" json:"patch,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SemanticVersion) Reset() { *m = SemanticVersion{} } +func (m *SemanticVersion) String() string { return proto.CompactTextString(m) } +func (*SemanticVersion) ProtoMessage() {} +func (*SemanticVersion) Descriptor() ([]byte, []int) { + return fileDescriptor_9d201ef6b9829a8e, []int{0} +} + +func (m *SemanticVersion) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SemanticVersion.Unmarshal(m, b) +} +func (m *SemanticVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SemanticVersion.Marshal(b, m, deterministic) +} +func (m *SemanticVersion) XXX_Merge(src proto.Message) { + xxx_messageInfo_SemanticVersion.Merge(m, src) +} +func (m *SemanticVersion) XXX_Size() int { + return xxx_messageInfo_SemanticVersion.Size(m) +} +func (m *SemanticVersion) XXX_DiscardUnknown() { + xxx_messageInfo_SemanticVersion.DiscardUnknown(m) +} + +var xxx_messageInfo_SemanticVersion proto.InternalMessageInfo + +func (m *SemanticVersion) GetMajorNumber() uint32 { + if m != nil { + return m.MajorNumber + } + return 0 +} + +func (m *SemanticVersion) GetMinorNumber() uint32 { + if m != nil { + return m.MinorNumber + } + return 0 +} + +func (m *SemanticVersion) GetPatch() uint32 { + if m != nil { + return m.Patch + } + return 0 +} + +func init() { + proto.RegisterType((*SemanticVersion)(nil), "envoy.type.SemanticVersion") +} + +func init() { proto.RegisterFile("envoy/type/semantic_version.proto", fileDescriptor_9d201ef6b9829a8e) } + +var fileDescriptor_9d201ef6b9829a8e = []byte{ + // 199 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xcd, 0x2b, 0xcb, + 0xaf, 0xd4, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2f, 0x4e, 0xcd, 0x4d, 0xcc, 0x2b, 0xc9, 0x4c, 0x8e, + 0x2f, 0x4b, 0x2d, 0x2a, 0xce, 0xcc, 0xcf, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, + 0x2b, 0xd1, 0x03, 0x29, 0x91, 0x92, 0x2d, 0x4d, 0x29, 0x48, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, + 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0x2d, 0x86, 0x28, 0x55, + 0xca, 0xe5, 0xe2, 0x0f, 0x86, 0x1a, 0x12, 0x06, 0x31, 0x43, 0x48, 0x91, 0x8b, 0x27, 0x37, 0x31, + 0x2b, 0xbf, 0x28, 0x3e, 0xaf, 0x34, 0x37, 0x29, 0xb5, 0x48, 0x82, 0x51, 0x81, 0x51, 0x83, 0x37, + 0x88, 0x1b, 0x2c, 0xe6, 0x07, 0x16, 0x02, 0x2b, 0xc9, 0xcc, 0x43, 0x28, 0x61, 0x82, 0x2a, 0x01, + 0x89, 0x41, 0x95, 0x88, 0x70, 0xb1, 0x16, 0x24, 0x96, 0x24, 0x67, 0x48, 0x30, 0x83, 0xe5, 0x20, + 0x1c, 0x27, 0xab, 0x5d, 0x0d, 0x27, 0x2e, 0xb2, 0x31, 0x09, 0x30, 0x72, 0x49, 0x64, 0xe6, 0xeb, + 0x81, 0x9d, 0x59, 0x50, 0x94, 0x5f, 0x51, 0xa9, 0x87, 0x70, 0xb1, 0x93, 0x08, 0x9a, 0x83, 0x02, + 0x40, 0x0e, 0x0d, 0x60, 0x4c, 0x62, 0x03, 0xbb, 0xd8, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xd3, + 0x44, 0x4c, 0xaa, 0x01, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/semantic_version.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,108 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/semantic_version.proto + +package envoy_type + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _semantic_version_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on SemanticVersion with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *SemanticVersion) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MajorNumber + + // no validation rules for MinorNumber + + // no validation rules for Patch + + return nil +} + +// SemanticVersionValidationError is the validation error returned by +// SemanticVersion.Validate if the designated constraints aren't met. +type SemanticVersionValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SemanticVersionValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SemanticVersionValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SemanticVersionValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SemanticVersionValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SemanticVersionValidationError) ErrorName() string { return "SemanticVersionValidationError" } + +// Error satisfies the builtin error interface +func (e SemanticVersionValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSemanticVersion.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SemanticVersionValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SemanticVersionValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,110 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/token_bucket.proto + +package envoy_type + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type TokenBucket struct { + MaxTokens uint32 `protobuf:"varint,1,opt,name=max_tokens,json=maxTokens,proto3" json:"max_tokens,omitempty"` + TokensPerFill *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=tokens_per_fill,json=tokensPerFill,proto3" json:"tokens_per_fill,omitempty"` + FillInterval *duration.Duration `protobuf:"bytes,3,opt,name=fill_interval,json=fillInterval,proto3" json:"fill_interval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TokenBucket) Reset() { *m = TokenBucket{} } +func (m *TokenBucket) String() string { return proto.CompactTextString(m) } +func (*TokenBucket) ProtoMessage() {} +func (*TokenBucket) Descriptor() ([]byte, []int) { + return fileDescriptor_04e870b436501a80, []int{0} +} + +func (m *TokenBucket) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TokenBucket.Unmarshal(m, b) +} +func (m *TokenBucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TokenBucket.Marshal(b, m, deterministic) +} +func (m *TokenBucket) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenBucket.Merge(m, src) +} +func (m *TokenBucket) XXX_Size() int { + return xxx_messageInfo_TokenBucket.Size(m) +} +func (m *TokenBucket) XXX_DiscardUnknown() { + xxx_messageInfo_TokenBucket.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenBucket proto.InternalMessageInfo + +func (m *TokenBucket) GetMaxTokens() uint32 { + if m != nil { + return m.MaxTokens + } + return 0 +} + +func (m *TokenBucket) GetTokensPerFill() *wrappers.UInt32Value { + if m != nil { + return m.TokensPerFill + } + return nil +} + +func (m *TokenBucket) GetFillInterval() *duration.Duration { + if m != nil { + return m.FillInterval + } + return nil +} + +func init() { + proto.RegisterType((*TokenBucket)(nil), "envoy.type.TokenBucket") +} + +func init() { proto.RegisterFile("envoy/type/token_bucket.proto", fileDescriptor_04e870b436501a80) } + +var fileDescriptor_04e870b436501a80 = []byte{ + // 311 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xc1, 0x4a, 0xc3, 0x30, + 0x1c, 0xc6, 0x97, 0x39, 0x36, 0xcd, 0x1c, 0x8e, 0x5e, 0xac, 0xe2, 0x64, 0x78, 0x90, 0xb1, 0x43, + 0x02, 0x1b, 0xf8, 0x00, 0x41, 0x84, 0x09, 0xc2, 0x18, 0xea, 0xb5, 0x64, 0x36, 0x1b, 0x61, 0x59, + 0x12, 0xd2, 0xa4, 0xb6, 0x37, 0x9f, 0xc7, 0x47, 0xf0, 0x09, 0x3c, 0xea, 0xeb, 0xec, 0x24, 0x4d, + 0x5b, 0x26, 0xec, 0x16, 0xf8, 0x7d, 0xdf, 0x97, 0xef, 0xff, 0xc1, 0x01, 0x93, 0xa9, 0xca, 0xb1, + 0xcd, 0x35, 0xc3, 0x56, 0x6d, 0x98, 0x8c, 0x96, 0xee, 0x6d, 0xc3, 0x2c, 0xd2, 0x46, 0x59, 0x15, + 0x40, 0x8f, 0x51, 0x81, 0x2f, 0xaf, 0xd7, 0x4a, 0xad, 0x05, 0xc3, 0x9e, 0x2c, 0xdd, 0x0a, 0xc7, + 0xce, 0x50, 0xcb, 0x95, 0x2c, 0xb5, 0x87, 0xfc, 0xdd, 0x50, 0xad, 0x99, 0x49, 0x2a, 0x3e, 0x70, + 0xb1, 0xa6, 0x98, 0x4a, 0xa9, 0xac, 0xb7, 0x25, 0x38, 0xb1, 0xd4, 0xba, 0x1a, 0x9f, 0xa7, 0x54, + 0xf0, 0x98, 0x5a, 0x86, 0xeb, 0x47, 0x09, 0x6e, 0x7e, 0x00, 0xec, 0x3e, 0x17, 0xd5, 0x88, 0x6f, + 0x16, 0xdc, 0x42, 0xb8, 0xa5, 0x59, 0xe4, 0xdb, 0x26, 0x21, 0x18, 0x82, 0x51, 0x8f, 0x74, 0x76, + 0xa4, 0x35, 0x6e, 0x0e, 0x1b, 0x8b, 0x93, 0x2d, 0xcd, 0xbc, 0x38, 0x09, 0x9e, 0xe0, 0x59, 0xa9, + 0x89, 0x34, 0x33, 0xd1, 0x8a, 0x0b, 0x11, 0x36, 0x87, 0x60, 0xd4, 0x9d, 0x5c, 0xa1, 0xb2, 0x29, + 0xaa, 0x9b, 0xa2, 0x97, 0x99, 0xb4, 0xd3, 0xc9, 0x2b, 0x15, 0x8e, 0xed, 0xa3, 0x7a, 0xa5, 0x7b, + 0xce, 0xcc, 0x03, 0x17, 0x22, 0x78, 0x84, 0xbd, 0x22, 0x23, 0xe2, 0xd2, 0x32, 0x93, 0x52, 0x11, + 0x1e, 0xf9, 0xb0, 0x8b, 0x83, 0xb0, 0xfb, 0x6a, 0x16, 0x02, 0x77, 0xa4, 0xf3, 0x09, 0x5a, 0xc7, + 0x60, 0xdc, 0x58, 0x9c, 0x16, 0xde, 0x59, 0x65, 0x25, 0x77, 0x5f, 0x1f, 0xdf, 0xbf, 0xed, 0x66, + 0x1f, 0xc0, 0x90, 0x2b, 0xe4, 0x37, 0xd6, 0x46, 0x65, 0x39, 0xda, 0xcf, 0x4d, 0xfa, 0xff, 0x6e, + 0x9e, 0x17, 0xd9, 0x73, 0xb0, 0x6c, 0xfb, 0x4f, 0xa6, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf2, + 0x4d, 0xa8, 0xdc, 0xb6, 0x01, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/token_bucket.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,148 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/token_bucket.proto + +package envoy_type + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _token_bucket_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on TokenBucket with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TokenBucket) Validate() error { + if m == nil { + return nil + } + + if m.GetMaxTokens() <= 0 { + return TokenBucketValidationError{ + field: "MaxTokens", + reason: "value must be greater than 0", + } + } + + if wrapper := m.GetTokensPerFill(); wrapper != nil { + + if wrapper.GetValue() <= 0 { + return TokenBucketValidationError{ + field: "TokensPerFill", + reason: "value must be greater than 0", + } + } + + } + + if m.GetFillInterval() == nil { + return TokenBucketValidationError{ + field: "FillInterval", + reason: "value is required", + } + } + + if d := m.GetFillInterval(); d != nil { + dur, err := ptypes.Duration(d) + if err != nil { + return TokenBucketValidationError{ + field: "FillInterval", + reason: "value is not a valid duration", + cause: err, + } + } + + gt := time.Duration(0*time.Second + 0*time.Nanosecond) + + if dur <= gt { + return TokenBucketValidationError{ + field: "FillInterval", + reason: "value must be greater than 0s", + } + } + + } + + return nil +} + +// TokenBucketValidationError is the validation error returned by +// TokenBucket.Validate if the designated constraints aren't met. +type TokenBucketValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TokenBucketValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TokenBucketValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TokenBucketValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TokenBucketValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TokenBucketValidationError) ErrorName() string { return "TokenBucketValidationError" } + +// Error satisfies the builtin error interface +func (e TokenBucketValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTokenBucket.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TokenBucketValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TokenBucketValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,376 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: envoy/type/tracing/v2/custom_tag.proto + +package envoy_type_tracing_v2 + +import ( + fmt "fmt" + _ "github.com/cncf/udpa/go/udpa/annotations" + v2 "github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + proto "github.com/golang/protobuf/proto" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type CustomTag struct { + Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"` + // Types that are valid to be assigned to Type: + // *CustomTag_Literal_ + // *CustomTag_Environment_ + // *CustomTag_RequestHeader + // *CustomTag_Metadata_ + Type isCustomTag_Type `protobuf_oneof:"type"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CustomTag) Reset() { *m = CustomTag{} } +func (m *CustomTag) String() string { return proto.CompactTextString(m) } +func (*CustomTag) ProtoMessage() {} +func (*CustomTag) Descriptor() ([]byte, []int) { + return fileDescriptor_d6b7ba7857eb6848, []int{0} +} + +func (m *CustomTag) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CustomTag.Unmarshal(m, b) +} +func (m *CustomTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CustomTag.Marshal(b, m, deterministic) +} +func (m *CustomTag) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomTag.Merge(m, src) +} +func (m *CustomTag) XXX_Size() int { + return xxx_messageInfo_CustomTag.Size(m) +} +func (m *CustomTag) XXX_DiscardUnknown() { + xxx_messageInfo_CustomTag.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomTag proto.InternalMessageInfo + +func (m *CustomTag) GetTag() string { + if m != nil { + return m.Tag + } + return "" +} + +type isCustomTag_Type interface { + isCustomTag_Type() +} + +type CustomTag_Literal_ struct { + Literal *CustomTag_Literal `protobuf:"bytes,2,opt,name=literal,proto3,oneof"` +} + +type CustomTag_Environment_ struct { + Environment *CustomTag_Environment `protobuf:"bytes,3,opt,name=environment,proto3,oneof"` +} + +type CustomTag_RequestHeader struct { + RequestHeader *CustomTag_Header `protobuf:"bytes,4,opt,name=request_header,json=requestHeader,proto3,oneof"` +} + +type CustomTag_Metadata_ struct { + Metadata *CustomTag_Metadata `protobuf:"bytes,5,opt,name=metadata,proto3,oneof"` +} + +func (*CustomTag_Literal_) isCustomTag_Type() {} + +func (*CustomTag_Environment_) isCustomTag_Type() {} + +func (*CustomTag_RequestHeader) isCustomTag_Type() {} + +func (*CustomTag_Metadata_) isCustomTag_Type() {} + +func (m *CustomTag) GetType() isCustomTag_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *CustomTag) GetLiteral() *CustomTag_Literal { + if x, ok := m.GetType().(*CustomTag_Literal_); ok { + return x.Literal + } + return nil +} + +func (m *CustomTag) GetEnvironment() *CustomTag_Environment { + if x, ok := m.GetType().(*CustomTag_Environment_); ok { + return x.Environment + } + return nil +} + +func (m *CustomTag) GetRequestHeader() *CustomTag_Header { + if x, ok := m.GetType().(*CustomTag_RequestHeader); ok { + return x.RequestHeader + } + return nil +} + +func (m *CustomTag) GetMetadata() *CustomTag_Metadata { + if x, ok := m.GetType().(*CustomTag_Metadata_); ok { + return x.Metadata + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*CustomTag) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*CustomTag_Literal_)(nil), + (*CustomTag_Environment_)(nil), + (*CustomTag_RequestHeader)(nil), + (*CustomTag_Metadata_)(nil), + } +} + +type CustomTag_Literal struct { + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CustomTag_Literal) Reset() { *m = CustomTag_Literal{} } +func (m *CustomTag_Literal) String() string { return proto.CompactTextString(m) } +func (*CustomTag_Literal) ProtoMessage() {} +func (*CustomTag_Literal) Descriptor() ([]byte, []int) { + return fileDescriptor_d6b7ba7857eb6848, []int{0, 0} +} + +func (m *CustomTag_Literal) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CustomTag_Literal.Unmarshal(m, b) +} +func (m *CustomTag_Literal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CustomTag_Literal.Marshal(b, m, deterministic) +} +func (m *CustomTag_Literal) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomTag_Literal.Merge(m, src) +} +func (m *CustomTag_Literal) XXX_Size() int { + return xxx_messageInfo_CustomTag_Literal.Size(m) +} +func (m *CustomTag_Literal) XXX_DiscardUnknown() { + xxx_messageInfo_CustomTag_Literal.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomTag_Literal proto.InternalMessageInfo + +func (m *CustomTag_Literal) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +type CustomTag_Environment struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DefaultValue string `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CustomTag_Environment) Reset() { *m = CustomTag_Environment{} } +func (m *CustomTag_Environment) String() string { return proto.CompactTextString(m) } +func (*CustomTag_Environment) ProtoMessage() {} +func (*CustomTag_Environment) Descriptor() ([]byte, []int) { + return fileDescriptor_d6b7ba7857eb6848, []int{0, 1} +} + +func (m *CustomTag_Environment) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CustomTag_Environment.Unmarshal(m, b) +} +func (m *CustomTag_Environment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CustomTag_Environment.Marshal(b, m, deterministic) +} +func (m *CustomTag_Environment) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomTag_Environment.Merge(m, src) +} +func (m *CustomTag_Environment) XXX_Size() int { + return xxx_messageInfo_CustomTag_Environment.Size(m) +} +func (m *CustomTag_Environment) XXX_DiscardUnknown() { + xxx_messageInfo_CustomTag_Environment.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomTag_Environment proto.InternalMessageInfo + +func (m *CustomTag_Environment) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CustomTag_Environment) GetDefaultValue() string { + if m != nil { + return m.DefaultValue + } + return "" +} + +type CustomTag_Header struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DefaultValue string `protobuf:"bytes,2,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CustomTag_Header) Reset() { *m = CustomTag_Header{} } +func (m *CustomTag_Header) String() string { return proto.CompactTextString(m) } +func (*CustomTag_Header) ProtoMessage() {} +func (*CustomTag_Header) Descriptor() ([]byte, []int) { + return fileDescriptor_d6b7ba7857eb6848, []int{0, 2} +} + +func (m *CustomTag_Header) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CustomTag_Header.Unmarshal(m, b) +} +func (m *CustomTag_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CustomTag_Header.Marshal(b, m, deterministic) +} +func (m *CustomTag_Header) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomTag_Header.Merge(m, src) +} +func (m *CustomTag_Header) XXX_Size() int { + return xxx_messageInfo_CustomTag_Header.Size(m) +} +func (m *CustomTag_Header) XXX_DiscardUnknown() { + xxx_messageInfo_CustomTag_Header.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomTag_Header proto.InternalMessageInfo + +func (m *CustomTag_Header) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CustomTag_Header) GetDefaultValue() string { + if m != nil { + return m.DefaultValue + } + return "" +} + +type CustomTag_Metadata struct { + Kind *v2.MetadataKind `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + MetadataKey *v2.MetadataKey `protobuf:"bytes,2,opt,name=metadata_key,json=metadataKey,proto3" json:"metadata_key,omitempty"` + DefaultValue string `protobuf:"bytes,3,opt,name=default_value,json=defaultValue,proto3" json:"default_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CustomTag_Metadata) Reset() { *m = CustomTag_Metadata{} } +func (m *CustomTag_Metadata) String() string { return proto.CompactTextString(m) } +func (*CustomTag_Metadata) ProtoMessage() {} +func (*CustomTag_Metadata) Descriptor() ([]byte, []int) { + return fileDescriptor_d6b7ba7857eb6848, []int{0, 3} +} + +func (m *CustomTag_Metadata) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CustomTag_Metadata.Unmarshal(m, b) +} +func (m *CustomTag_Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CustomTag_Metadata.Marshal(b, m, deterministic) +} +func (m *CustomTag_Metadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomTag_Metadata.Merge(m, src) +} +func (m *CustomTag_Metadata) XXX_Size() int { + return xxx_messageInfo_CustomTag_Metadata.Size(m) +} +func (m *CustomTag_Metadata) XXX_DiscardUnknown() { + xxx_messageInfo_CustomTag_Metadata.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomTag_Metadata proto.InternalMessageInfo + +func (m *CustomTag_Metadata) GetKind() *v2.MetadataKind { + if m != nil { + return m.Kind + } + return nil +} + +func (m *CustomTag_Metadata) GetMetadataKey() *v2.MetadataKey { + if m != nil { + return m.MetadataKey + } + return nil +} + +func (m *CustomTag_Metadata) GetDefaultValue() string { + if m != nil { + return m.DefaultValue + } + return "" +} + +func init() { + proto.RegisterType((*CustomTag)(nil), "envoy.type.tracing.v2.CustomTag") + proto.RegisterType((*CustomTag_Literal)(nil), "envoy.type.tracing.v2.CustomTag.Literal") + proto.RegisterType((*CustomTag_Environment)(nil), "envoy.type.tracing.v2.CustomTag.Environment") + proto.RegisterType((*CustomTag_Header)(nil), "envoy.type.tracing.v2.CustomTag.Header") + proto.RegisterType((*CustomTag_Metadata)(nil), "envoy.type.tracing.v2.CustomTag.Metadata") +} + +func init() { + proto.RegisterFile("envoy/type/tracing/v2/custom_tag.proto", fileDescriptor_d6b7ba7857eb6848) +} + +var fileDescriptor_d6b7ba7857eb6848 = []byte{ + // 473 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xcb, 0x8a, 0xd4, 0x40, + 0x14, 0x86, 0x53, 0xdd, 0xe9, 0xdb, 0xc9, 0xf4, 0x20, 0x05, 0x62, 0x6c, 0x19, 0x68, 0x6d, 0x2f, + 0x2d, 0x48, 0x02, 0x71, 0xe3, 0x4e, 0x88, 0xb7, 0x80, 0x8a, 0x21, 0x88, 0xdb, 0xe6, 0x38, 0x29, + 0xdb, 0x30, 0x49, 0xa5, 0xad, 0x54, 0x82, 0xd9, 0xf9, 0x4a, 0x6e, 0x5d, 0xb9, 0x9c, 0xad, 0x4f, + 0xe1, 0x2b, 0xc8, 0xac, 0x24, 0x95, 0xcb, 0xb4, 0x76, 0x43, 0x33, 0xbb, 0xca, 0xa9, 0xff, 0xff, + 0x72, 0xea, 0x3f, 0x55, 0x70, 0x9f, 0xf1, 0x22, 0x2d, 0x6d, 0x59, 0x6e, 0x98, 0x2d, 0x05, 0x9e, + 0x46, 0x7c, 0x6d, 0x17, 0x8e, 0x7d, 0x9a, 0x67, 0x32, 0x4d, 0x56, 0x12, 0xd7, 0xd6, 0x46, 0xa4, + 0x32, 0xa5, 0xd7, 0x95, 0xce, 0xaa, 0x74, 0x56, 0xa3, 0xb3, 0x0a, 0x67, 0x76, 0x6f, 0xcb, 0x9e, + 0x30, 0x89, 0x21, 0x4a, 0xac, 0xfc, 0xed, 0xba, 0x76, 0xcf, 0x4e, 0xf2, 0x70, 0x83, 0x36, 0x72, + 0x9e, 0x4a, 0x94, 0x51, 0xca, 0x33, 0x3b, 0x93, 0x28, 0xf3, 0xac, 0xd9, 0xbe, 0x51, 0x60, 0x1c, + 0x85, 0x28, 0x99, 0xdd, 0x2e, 0xea, 0x8d, 0x3b, 0xbf, 0x07, 0x30, 0x79, 0xa6, 0x5a, 0x79, 0x8f, + 0x6b, 0x7a, 0x13, 0xfa, 0x12, 0xd7, 0x26, 0x99, 0x93, 0xe5, 0xc4, 0x1d, 0x5d, 0xb8, 0xba, 0xe8, + 0xcd, 0x49, 0x50, 0xd5, 0xe8, 0x73, 0x18, 0xc5, 0x91, 0x64, 0x02, 0x63, 0xb3, 0x37, 0x27, 0x4b, + 0xc3, 0x59, 0x5a, 0x7b, 0x1b, 0xb6, 0x3a, 0x9a, 0xf5, 0xa6, 0xd6, 0x7b, 0x5a, 0xd0, 0x5a, 0xa9, + 0x0f, 0x06, 0xe3, 0x45, 0x24, 0x52, 0x9e, 0x30, 0x2e, 0xcd, 0xbe, 0x22, 0x3d, 0x3a, 0x48, 0x7a, + 0x71, 0xe9, 0xf1, 0xb4, 0x60, 0x1b, 0x41, 0x7d, 0x38, 0x16, 0xec, 0x4b, 0xce, 0x32, 0xb9, 0xfa, + 0xcc, 0x30, 0x64, 0xc2, 0xd4, 0x15, 0xf4, 0xc1, 0x41, 0xa8, 0xa7, 0xe4, 0x9e, 0x16, 0x4c, 0x1b, + 0x40, 0x5d, 0xa0, 0xaf, 0x60, 0xdc, 0x86, 0x6b, 0x0e, 0x14, 0xeb, 0xe1, 0x41, 0xd6, 0xdb, 0xc6, + 0xe0, 0x69, 0x41, 0x67, 0x9e, 0x2d, 0x61, 0xd4, 0x44, 0x40, 0x4f, 0x60, 0x50, 0x60, 0x9c, 0xb3, + 0xff, 0xa3, 0xad, 0xab, 0xb3, 0x77, 0x60, 0x6c, 0x1d, 0x91, 0xde, 0x02, 0x9d, 0x63, 0xb2, 0x23, + 0x56, 0x45, 0xba, 0x80, 0x69, 0xc8, 0x3e, 0x61, 0x1e, 0xcb, 0x55, 0x8d, 0xac, 0xc6, 0x31, 0x09, + 0x8e, 0x9a, 0xe2, 0x07, 0x05, 0xf4, 0x61, 0xd8, 0x9c, 0xe6, 0xf6, 0x3f, 0xac, 0xe9, 0x85, 0x0b, + 0x62, 0x3c, 0x27, 0x3f, 0x09, 0x39, 0x27, 0xda, 0x55, 0x88, 0xdf, 0x09, 0x8c, 0xdb, 0x53, 0xd2, + 0x27, 0xa0, 0x9f, 0x45, 0x3c, 0x54, 0x50, 0xc3, 0xb9, 0xbb, 0x1d, 0x4f, 0x77, 0x2f, 0x0b, 0xa7, + 0x4b, 0xe5, 0x75, 0xc4, 0xc3, 0x40, 0x39, 0xe8, 0x4b, 0x38, 0x6a, 0x15, 0xab, 0x33, 0x56, 0x36, + 0x77, 0x69, 0x71, 0x90, 0xc0, 0xca, 0xc0, 0x48, 0x2e, 0x3f, 0x76, 0x7b, 0xee, 0xef, 0xf6, 0xec, + 0x1a, 0xa0, 0x57, 0x44, 0xda, 0xff, 0xe3, 0x12, 0xf7, 0xe9, 0x8f, 0x6f, 0xe7, 0xbf, 0x86, 0xbd, + 0x6b, 0x04, 0x16, 0x51, 0x5a, 0xff, 0x6f, 0x23, 0xd2, 0xaf, 0xe5, 0xfe, 0xd9, 0xba, 0xc7, 0xdd, + 0x70, 0xfd, 0xea, 0xa1, 0xf8, 0xe4, 0xe3, 0x50, 0xbd, 0x98, 0xc7, 0x7f, 0x03, 0x00, 0x00, 0xff, + 0xff, 0xea, 0x2c, 0x64, 0xf5, 0xd1, 0x03, 0x00, 0x00, +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.validate.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.validate.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.validate.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2/custom_tag.pb.validate.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,488 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: envoy/type/tracing/v2/custom_tag.proto + +package envoy_type_tracing_v2 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// define the regex for a UUID once up-front +var _custom_tag_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") + +// Validate checks the field values on CustomTag with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *CustomTag) Validate() error { + if m == nil { + return nil + } + + if len(m.GetTag()) < 1 { + return CustomTagValidationError{ + field: "Tag", + reason: "value length must be at least 1 bytes", + } + } + + switch m.Type.(type) { + + case *CustomTag_Literal_: + + if v, ok := interface{}(m.GetLiteral()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomTagValidationError{ + field: "Literal", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *CustomTag_Environment_: + + if v, ok := interface{}(m.GetEnvironment()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomTagValidationError{ + field: "Environment", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *CustomTag_RequestHeader: + + if v, ok := interface{}(m.GetRequestHeader()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomTagValidationError{ + field: "RequestHeader", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *CustomTag_Metadata_: + + if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomTagValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return CustomTagValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// CustomTagValidationError is the validation error returned by +// CustomTag.Validate if the designated constraints aren't met. +type CustomTagValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CustomTagValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CustomTagValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CustomTagValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CustomTagValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CustomTagValidationError) ErrorName() string { return "CustomTagValidationError" } + +// Error satisfies the builtin error interface +func (e CustomTagValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCustomTag.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CustomTagValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CustomTagValidationError{} + +// Validate checks the field values on CustomTag_Literal with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *CustomTag_Literal) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) < 1 { + return CustomTag_LiteralValidationError{ + field: "Value", + reason: "value length must be at least 1 bytes", + } + } + + return nil +} + +// CustomTag_LiteralValidationError is the validation error returned by +// CustomTag_Literal.Validate if the designated constraints aren't met. +type CustomTag_LiteralValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CustomTag_LiteralValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CustomTag_LiteralValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CustomTag_LiteralValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CustomTag_LiteralValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CustomTag_LiteralValidationError) ErrorName() string { + return "CustomTag_LiteralValidationError" +} + +// Error satisfies the builtin error interface +func (e CustomTag_LiteralValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCustomTag_Literal.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CustomTag_LiteralValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CustomTag_LiteralValidationError{} + +// Validate checks the field values on CustomTag_Environment with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *CustomTag_Environment) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return CustomTag_EnvironmentValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + // no validation rules for DefaultValue + + return nil +} + +// CustomTag_EnvironmentValidationError is the validation error returned by +// CustomTag_Environment.Validate if the designated constraints aren't met. +type CustomTag_EnvironmentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CustomTag_EnvironmentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CustomTag_EnvironmentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CustomTag_EnvironmentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CustomTag_EnvironmentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CustomTag_EnvironmentValidationError) ErrorName() string { + return "CustomTag_EnvironmentValidationError" +} + +// Error satisfies the builtin error interface +func (e CustomTag_EnvironmentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCustomTag_Environment.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CustomTag_EnvironmentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CustomTag_EnvironmentValidationError{} + +// Validate checks the field values on CustomTag_Header with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *CustomTag_Header) Validate() error { + if m == nil { + return nil + } + + if len(m.GetName()) < 1 { + return CustomTag_HeaderValidationError{ + field: "Name", + reason: "value length must be at least 1 bytes", + } + } + + if !_CustomTag_Header_Name_Pattern.MatchString(m.GetName()) { + return CustomTag_HeaderValidationError{ + field: "Name", + reason: "value does not match regex pattern \"^[^\\x00\\n\\r]*$\"", + } + } + + // no validation rules for DefaultValue + + return nil +} + +// CustomTag_HeaderValidationError is the validation error returned by +// CustomTag_Header.Validate if the designated constraints aren't met. +type CustomTag_HeaderValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CustomTag_HeaderValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CustomTag_HeaderValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CustomTag_HeaderValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CustomTag_HeaderValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CustomTag_HeaderValidationError) ErrorName() string { return "CustomTag_HeaderValidationError" } + +// Error satisfies the builtin error interface +func (e CustomTag_HeaderValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCustomTag_Header.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CustomTag_HeaderValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CustomTag_HeaderValidationError{} + +var _CustomTag_Header_Name_Pattern = regexp.MustCompile("^[^\x00\n\r]*$") + +// Validate checks the field values on CustomTag_Metadata with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *CustomTag_Metadata) Validate() error { + if m == nil { + return nil + } + + if v, ok := interface{}(m.GetKind()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomTag_MetadataValidationError{ + field: "Kind", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMetadataKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CustomTag_MetadataValidationError{ + field: "MetadataKey", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for DefaultValue + + return nil +} + +// CustomTag_MetadataValidationError is the validation error returned by +// CustomTag_Metadata.Validate if the designated constraints aren't met. +type CustomTag_MetadataValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CustomTag_MetadataValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CustomTag_MetadataValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CustomTag_MetadataValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CustomTag_MetadataValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CustomTag_MetadataValidationError) ErrorName() string { + return "CustomTag_MetadataValidationError" +} + +// Error satisfies the builtin error interface +func (e CustomTag_MetadataValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCustomTag_Metadata.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CustomTag_MetadataValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CustomTag_MetadataValidationError{} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/conversion/struct.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/conversion/struct.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/conversion/struct.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/conversion/struct.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,60 @@ +// Copyright 2018 Envoyproxy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package conversion contains shared utility functions for converting xDS resources. +package conversion + +import ( + "bytes" + "errors" + + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" + pstruct "github.com/golang/protobuf/ptypes/struct" +) + +// MessageToStruct encodes a protobuf Message into a Struct. Hilariously, it +// uses JSON as the intermediary +// author:glen@turbinelabs.io +func MessageToStruct(msg proto.Message) (*pstruct.Struct, error) { + if msg == nil { + return nil, errors.New("nil message") + } + + buf := &bytes.Buffer{} + if err := (&jsonpb.Marshaler{OrigName: true}).Marshal(buf, msg); err != nil { + return nil, err + } + + pbs := &pstruct.Struct{} + if err := jsonpb.Unmarshal(buf, pbs); err != nil { + return nil, err + } + + return pbs, nil +} + +// StructToMessage decodes a protobuf Message from a Struct. +func StructToMessage(pbst *pstruct.Struct, out proto.Message) error { + if pbst == nil { + return errors.New("nil struct") + } + + buf := &bytes.Buffer{} + if err := (&jsonpb.Marshaler{OrigName: true}).Marshal(buf, pbst); err != nil { + return err + } + + return jsonpb.Unmarshal(buf, out) +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/struct.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/struct.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/struct.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/struct.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -// Copyright 2018 Envoyproxy Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package util contains shared utility functions. -package util - -import ( - "bytes" - "errors" - - "github.com/gogo/protobuf/jsonpb" - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/types" -) - -// MessageToStruct encodes a protobuf Message into a Struct. Hilariously, it -// uses JSON as the intermediary -// author:glen@turbinelabs.io -func MessageToStruct(msg proto.Message) (*types.Struct, error) { - if msg == nil { - return nil, errors.New("nil message") - } - - buf := &bytes.Buffer{} - if err := (&jsonpb.Marshaler{OrigName: true}).Marshal(buf, msg); err != nil { - return nil, err - } - - pbs := &types.Struct{} - if err := jsonpb.Unmarshal(buf, pbs); err != nil { - return nil, err - } - - return pbs, nil -} - -// StructToMessage decodes a protobuf Message from a Struct. -func StructToMessage(pbst *types.Struct, out proto.Message) error { - if pbst == nil { - return errors.New("nil struct") - } - - buf := &bytes.Buffer{} - if err := (&jsonpb.Marshaler{OrigName: true}).Marshal(buf, pbst); err != nil { - return err - } - - return jsonpb.Unmarshal(buf, out) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/util/wellknown.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -// Copyright 2018 Envoyproxy Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package util - -// HTTP filter names -const ( - // Buffer HTTP filter - Buffer = "envoy.buffer" - // CORS HTTP filter - CORS = "envoy.cors" - // Dynamo HTTP filter - Dynamo = "envoy.http_dynamo_filter" - // Fault HTTP filter - Fault = "envoy.fault" - // GRPCHTTP1Bridge HTTP filter - GRPCHTTP1Bridge = "envoy.grpc_http1_bridge" - // GRPCJSONTranscoder HTTP filter - GRPCJSONTranscoder = "envoy.grpc_json_transcoder" - // GRPCWeb HTTP filter - GRPCWeb = "envoy.grpc_web" - // Gzip HTTP filter - Gzip = "envoy.gzip" - // IPTagging HTTP filter - IPTagging = "envoy.ip_tagging" - // HTTPRateLimit filter - HTTPRateLimit = "envoy.rate_limit" - // Router HTTP filter - Router = "envoy.router" - // Health checking HTTP filter - HealthCheck = "envoy.health_check" - // Lua HTTP filter - Lua = "envoy.lua" - // Squash HTTP filter - Squash = "envoy.squash" - // HTTPExternalAuthorization HTTP filter - HTTPExternalAuthorization = "envoy.ext_authz" -) - -// Network filter names -const ( - // ClientSSLAuth network filter - ClientSSLAuth = "envoy.client_ssl_auth" - // Echo network filter - Echo = "envoy.echo" - // HTTPConnectionManager network filter - HTTPConnectionManager = "envoy.http_connection_manager" - // TCPProxy network filter - TCPProxy = "envoy.tcp_proxy" - // RateLimit network filter - RateLimit = "envoy.ratelimit" - // MongoProxy network filter - MongoProxy = "envoy.mongo_proxy" - // ThriftProxy network filter - ThriftProxy = "envoy.filters.network.thrift_proxy" - // RedisProxy network filter - RedisProxy = "envoy.redis_proxy" - // MySQLProxy network filter - MySQLProxy = "envoy.filters.network.mysql_proxy" - // ExternalAuthorization network filter - ExternalAuthorization = "envoy.ext_authz" -) - -// Listener filter names -const ( - // OriginalDestination listener filter - OriginalDestination = "envoy.listener.original_dst" - // ProxyProtocol listener filter - ProxyProtocol = "envoy.listener.proxy_protocol" - // TlsInspector listener filter - TlsInspector = "envoy.listener.tls_inspector" -) - -// Tracing provider names -const ( - // Lightstep tracer name - Lightstep = "envoy.lightstep" - // Zipkin tracer name - Zipkin = "envoy.zipkin" - // DynamicOT tracer name - DynamicOT = "envoy.dynamic.ot" -) - -// Stats sink names -const ( - // Statsd sink - Statsd = "envoy.statsd" - // DogStatsD compatible stastsd sink - DogStatsd = "envoy.dog_statsd" - // MetricsService sink - MetricsService = "envoy.metrics_service" -) - -// Access log sink names -const ( - // FileAccessLog sink name - FileAccessLog = "envoy.file_access_log" - // HTTPGRPCAccessLog sink for the HTTP gRPC access log service - HTTPGRPCAccessLog = "envoy.http_grpc_access_log" -) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/wellknown/wellknown.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/wellknown/wellknown.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/wellknown/wellknown.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/go-control-plane/pkg/wellknown/wellknown.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,134 @@ +// Copyright 2018 Envoyproxy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package wellknown contains common names for filters, listeners, etc. +package wellknown + +// HTTP filter names +const ( + // Buffer HTTP filter + Buffer = "envoy.buffer" + // CORS HTTP filter + CORS = "envoy.cors" + // Dynamo HTTP filter + Dynamo = "envoy.http_dynamo_filter" + // Fault HTTP filter + Fault = "envoy.fault" + // GRPCHTTP1Bridge HTTP filter + GRPCHTTP1Bridge = "envoy.grpc_http1_bridge" + // GRPCJSONTranscoder HTTP filter + GRPCJSONTranscoder = "envoy.grpc_json_transcoder" + // GRPCWeb HTTP filter + GRPCWeb = "envoy.grpc_web" + // Gzip HTTP filter + Gzip = "envoy.gzip" + // IPTagging HTTP filter + IPTagging = "envoy.ip_tagging" + // HTTPRateLimit filter + HTTPRateLimit = "envoy.rate_limit" + // Router HTTP filter + Router = "envoy.router" + // Health checking HTTP filter + HealthCheck = "envoy.health_check" + // Lua HTTP filter + Lua = "envoy.lua" + // Squash HTTP filter + Squash = "envoy.squash" + // HTTPExternalAuthorization HTTP filter + HTTPExternalAuthorization = "envoy.filters.http.ext_authz" + // HTTPRoleBasedAccessControl HTTP filter + HTTPRoleBasedAccessControl = "envoy.filters.http.rbac" + // HTTPGRPCStats HTTP filter + HTTPGRPCStats = "envoy.filters.http.grpc_stats" +) + +// Network filter names +const ( + // ClientSSLAuth network filter + ClientSSLAuth = "envoy.client_ssl_auth" + // Echo network filter + Echo = "envoy.echo" + // HTTPConnectionManager network filter + HTTPConnectionManager = "envoy.http_connection_manager" + // TCPProxy network filter + TCPProxy = "envoy.tcp_proxy" + // RateLimit network filter + RateLimit = "envoy.ratelimit" + // MongoProxy network filter + MongoProxy = "envoy.mongo_proxy" + // ThriftProxy network filter + ThriftProxy = "envoy.filters.network.thrift_proxy" + // RedisProxy network filter + RedisProxy = "envoy.redis_proxy" + // MySQLProxy network filter + MySQLProxy = "envoy.filters.network.mysql_proxy" + // ExternalAuthorization network filter + ExternalAuthorization = "envoy.filters.network.ext_authz" + // RoleBasedAccessControl network filter + RoleBasedAccessControl = "envoy.filters.network.rbac" +) + +// Listener filter names +const ( + // OriginalDestination listener filter + OriginalDestination = "envoy.listener.original_dst" + // ProxyProtocol listener filter + ProxyProtocol = "envoy.listener.proxy_protocol" + // TlsInspector listener filter + TlsInspector = "envoy.listener.tls_inspector" + // HttpInspector listener filter + HttpInspector = "envoy.listener.http_inspector" +) + +// Tracing provider names +const ( + // Lightstep tracer name + Lightstep = "envoy.lightstep" + // Zipkin tracer name + Zipkin = "envoy.zipkin" + // DynamicOT tracer name + DynamicOT = "envoy.dynamic.ot" +) + +// Stats sink names +const ( + // Statsd sink + Statsd = "envoy.statsd" + // DogStatsD compatible stastsd sink + DogStatsd = "envoy.dog_statsd" + // MetricsService sink + MetricsService = "envoy.metrics_service" +) + +// Access log sink names +const ( + // FileAccessLog sink name + FileAccessLog = "envoy.file_access_log" + // HTTPGRPCAccessLog sink for the HTTP gRPC access log service + HTTPGRPCAccessLog = "envoy.http_grpc_access_log" +) + +// Transport socket names +const ( + // TransportSocket Alts + TransportSocketAlts = "envoy.transport_sockets.alts" + // TransportSocket Tap + TransportSocketTap = "envoy.transport_sockets.tap" + // TransportSocket RawBuffer + TransportSocketRawBuffer = "envoy.transport_sockets.raw_buffer" + // TransportSocket Tls + TransportSocketTls = "envoy.transport_sockets.tls" + // TransportSocket Quic + TransportSocketQuic = "envoy.transport_sockets.quic" +) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/NOTICE consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/NOTICE --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/NOTICE 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/NOTICE 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +protoc-gen-validate +Copyright 2019 Envoy Project Authors + +Licensed under Apache License 2.0. See LICENSE for terms. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/BUILD consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/BUILD --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/BUILD 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/BUILD 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ go_proto_library( name = "go_default_library", - importpath = "github.com/lyft/protoc-gen-validate/validate", + importpath = "github.com/envoyproxy/protoc-gen-validate/validate", proto = ":validate_proto", visibility = ["//visibility:public"], ) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.h consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.h --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.h 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.h 2020-12-10 21:46:52.000000000 +0000 @@ -2,12 +2,20 @@ #define _VALIDATE_H #include +#include #include #include #include #include #include +#if !defined(_WIN32) +#include +#else +#include +#include +#endif + namespace pgv { using std::string; @@ -68,6 +76,49 @@ return search_in.find(to_find) != string::npos; } +static inline bool IsIpv4(const string& to_validate) { + struct sockaddr_in sa; + return !(inet_pton(AF_INET, to_validate.c_str(), &sa.sin_addr) < 1); +} + +static inline bool IsIpv6(const string& to_validate) { + struct sockaddr_in6 sa_six; + return !(inet_pton(AF_INET6, to_validate.c_str(), &sa_six.sin6_addr) < 1); +} + +static inline bool IsIp(const string& to_validate) { + return IsIpv4(to_validate) || IsIpv6(to_validate); +} + +static inline bool IsHostname(const string& to_validate) { + if (to_validate.length() > 253) { + return false; + } + + const std::regex dot_regex{"\\."}; + const auto iter_end = std::sregex_token_iterator(); + auto iter = std::sregex_token_iterator(to_validate.begin(), to_validate.end(), dot_regex, -1); + for (; iter != iter_end; ++iter) { + const std::string &part = *iter; + if (part.empty() || part.length() > 63) { + return false; + } + if (part.at(0) == '-') { + return false; + } + if (part.at(part.length() - 1) == '-') { + return false; + } + for (const auto &character : part) { + if ((character < 'A' || character > 'Z') && (character < 'a' || character > 'z') && (character < '0' || character > '9') && character != '-') { + return false; + } + } + } + + return true; +} + } // namespace pgv #endif // _VALIDATE_H diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.pb.go consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.pb.go --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: validate/validate.proto -package validate // import "github.com/lyft/protoc-gen-validate/validate" +package validate // import "github.com/envoyproxy/protoc-gen-validate/validate" import proto "github.com/golang/protobuf/proto" import fmt "fmt" @@ -21,6 +21,8 @@ // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +// FieldRules encapsulates the rules for each type of field. Depending on the +// field, the correct set should be used to ensure proper validations. type FieldRules struct { // Types that are valid to be assigned to Type: // *FieldRules_Float @@ -55,7 +57,7 @@ func (m *FieldRules) String() string { return proto.CompactTextString(m) } func (*FieldRules) ProtoMessage() {} func (*FieldRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{0} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{0} } func (m *FieldRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FieldRules.Unmarshal(m, b) @@ -82,91 +84,133 @@ type FieldRules_Float struct { Float *FloatRules `protobuf:"bytes,1,opt,name=float,oneof"` } + type FieldRules_Double struct { Double *DoubleRules `protobuf:"bytes,2,opt,name=double,oneof"` } + type FieldRules_Int32 struct { Int32 *Int32Rules `protobuf:"bytes,3,opt,name=int32,oneof"` } + type FieldRules_Int64 struct { Int64 *Int64Rules `protobuf:"bytes,4,opt,name=int64,oneof"` } + type FieldRules_Uint32 struct { Uint32 *UInt32Rules `protobuf:"bytes,5,opt,name=uint32,oneof"` } + type FieldRules_Uint64 struct { Uint64 *UInt64Rules `protobuf:"bytes,6,opt,name=uint64,oneof"` } + type FieldRules_Sint32 struct { Sint32 *SInt32Rules `protobuf:"bytes,7,opt,name=sint32,oneof"` } + type FieldRules_Sint64 struct { Sint64 *SInt64Rules `protobuf:"bytes,8,opt,name=sint64,oneof"` } + type FieldRules_Fixed32 struct { Fixed32 *Fixed32Rules `protobuf:"bytes,9,opt,name=fixed32,oneof"` } + type FieldRules_Fixed64 struct { Fixed64 *Fixed64Rules `protobuf:"bytes,10,opt,name=fixed64,oneof"` } + type FieldRules_Sfixed32 struct { Sfixed32 *SFixed32Rules `protobuf:"bytes,11,opt,name=sfixed32,oneof"` } + type FieldRules_Sfixed64 struct { Sfixed64 *SFixed64Rules `protobuf:"bytes,12,opt,name=sfixed64,oneof"` } + type FieldRules_Bool struct { Bool *BoolRules `protobuf:"bytes,13,opt,name=bool,oneof"` } + type FieldRules_String_ struct { String_ *StringRules `protobuf:"bytes,14,opt,name=string,oneof"` } + type FieldRules_Bytes struct { Bytes *BytesRules `protobuf:"bytes,15,opt,name=bytes,oneof"` } + type FieldRules_Enum struct { Enum *EnumRules `protobuf:"bytes,16,opt,name=enum,oneof"` } + type FieldRules_Message struct { Message *MessageRules `protobuf:"bytes,17,opt,name=message,oneof"` } + type FieldRules_Repeated struct { Repeated *RepeatedRules `protobuf:"bytes,18,opt,name=repeated,oneof"` } + type FieldRules_Map struct { Map *MapRules `protobuf:"bytes,19,opt,name=map,oneof"` } + type FieldRules_Any struct { Any *AnyRules `protobuf:"bytes,20,opt,name=any,oneof"` } + type FieldRules_Duration struct { Duration *DurationRules `protobuf:"bytes,21,opt,name=duration,oneof"` } + type FieldRules_Timestamp struct { Timestamp *TimestampRules `protobuf:"bytes,22,opt,name=timestamp,oneof"` } -func (*FieldRules_Float) isFieldRules_Type() {} -func (*FieldRules_Double) isFieldRules_Type() {} -func (*FieldRules_Int32) isFieldRules_Type() {} -func (*FieldRules_Int64) isFieldRules_Type() {} -func (*FieldRules_Uint32) isFieldRules_Type() {} -func (*FieldRules_Uint64) isFieldRules_Type() {} -func (*FieldRules_Sint32) isFieldRules_Type() {} -func (*FieldRules_Sint64) isFieldRules_Type() {} -func (*FieldRules_Fixed32) isFieldRules_Type() {} -func (*FieldRules_Fixed64) isFieldRules_Type() {} -func (*FieldRules_Sfixed32) isFieldRules_Type() {} -func (*FieldRules_Sfixed64) isFieldRules_Type() {} -func (*FieldRules_Bool) isFieldRules_Type() {} -func (*FieldRules_String_) isFieldRules_Type() {} -func (*FieldRules_Bytes) isFieldRules_Type() {} -func (*FieldRules_Enum) isFieldRules_Type() {} -func (*FieldRules_Message) isFieldRules_Type() {} -func (*FieldRules_Repeated) isFieldRules_Type() {} -func (*FieldRules_Map) isFieldRules_Type() {} -func (*FieldRules_Any) isFieldRules_Type() {} -func (*FieldRules_Duration) isFieldRules_Type() {} +func (*FieldRules_Float) isFieldRules_Type() {} + +func (*FieldRules_Double) isFieldRules_Type() {} + +func (*FieldRules_Int32) isFieldRules_Type() {} + +func (*FieldRules_Int64) isFieldRules_Type() {} + +func (*FieldRules_Uint32) isFieldRules_Type() {} + +func (*FieldRules_Uint64) isFieldRules_Type() {} + +func (*FieldRules_Sint32) isFieldRules_Type() {} + +func (*FieldRules_Sint64) isFieldRules_Type() {} + +func (*FieldRules_Fixed32) isFieldRules_Type() {} + +func (*FieldRules_Fixed64) isFieldRules_Type() {} + +func (*FieldRules_Sfixed32) isFieldRules_Type() {} + +func (*FieldRules_Sfixed64) isFieldRules_Type() {} + +func (*FieldRules_Bool) isFieldRules_Type() {} + +func (*FieldRules_String_) isFieldRules_Type() {} + +func (*FieldRules_Bytes) isFieldRules_Type() {} + +func (*FieldRules_Enum) isFieldRules_Type() {} + +func (*FieldRules_Message) isFieldRules_Type() {} + +func (*FieldRules_Repeated) isFieldRules_Type() {} + +func (*FieldRules_Map) isFieldRules_Type() {} + +func (*FieldRules_Any) isFieldRules_Type() {} + +func (*FieldRules_Duration) isFieldRules_Type() {} + func (*FieldRules_Timestamp) isFieldRules_Type() {} func (m *FieldRules) GetType() isFieldRules_Type { @@ -784,13 +828,29 @@ return n } +// FloatRules describes the constraints applied to `float` values type FloatRules struct { - Const *float32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` - Lt *float32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"` - Lte *float32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"` - Gt *float32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"` - Gte *float32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"` - In []float32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *float32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *float32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *float32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *float32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *float32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []float32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []float32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -801,7 +861,7 @@ func (m *FloatRules) String() string { return proto.CompactTextString(m) } func (*FloatRules) ProtoMessage() {} func (*FloatRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{1} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{1} } func (m *FloatRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FloatRules.Unmarshal(m, b) @@ -870,13 +930,29 @@ return nil } +// DoubleRules describes the constraints applied to `double` values type DoubleRules struct { - Const *float64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` - Lt *float64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"` - Lte *float64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"` - Gt *float64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"` - Gte *float64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"` - In []float64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *float64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *float64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *float64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *float64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *float64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []float64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []float64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -887,7 +963,7 @@ func (m *DoubleRules) String() string { return proto.CompactTextString(m) } func (*DoubleRules) ProtoMessage() {} func (*DoubleRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{2} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{2} } func (m *DoubleRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DoubleRules.Unmarshal(m, b) @@ -956,13 +1032,29 @@ return nil } +// Int32Rules describes the constraints applied to `int32` values type Int32Rules struct { - Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - Lt *int32 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` - Lte *int32 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` - Gt *int32 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` - Gte *int32 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` - In []int32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *int32 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *int32 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *int32 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *int32 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int32 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -973,7 +1065,7 @@ func (m *Int32Rules) String() string { return proto.CompactTextString(m) } func (*Int32Rules) ProtoMessage() {} func (*Int32Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{3} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{3} } func (m *Int32Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Int32Rules.Unmarshal(m, b) @@ -1042,13 +1134,29 @@ return nil } +// Int64Rules describes the constraints applied to `int64` values type Int64Rules struct { - Const *int64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - Lt *int64 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` - Lte *int64 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` - Gt *int64 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` - Gte *int64 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` - In []int64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *int64 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *int64 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *int64 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *int64 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int64 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1059,7 +1167,7 @@ func (m *Int64Rules) String() string { return proto.CompactTextString(m) } func (*Int64Rules) ProtoMessage() {} func (*Int64Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{4} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{4} } func (m *Int64Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Int64Rules.Unmarshal(m, b) @@ -1128,13 +1236,29 @@ return nil } +// UInt32Rules describes the constraints applied to `uint32` values type UInt32Rules struct { - Const *uint32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - Lt *uint32 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` - Lte *uint32 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` - Gt *uint32 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` - Gte *uint32 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` - In []uint32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *uint32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *uint32 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *uint32 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *uint32 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *uint32 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []uint32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []uint32 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1145,7 +1269,7 @@ func (m *UInt32Rules) String() string { return proto.CompactTextString(m) } func (*UInt32Rules) ProtoMessage() {} func (*UInt32Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{5} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{5} } func (m *UInt32Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UInt32Rules.Unmarshal(m, b) @@ -1214,13 +1338,29 @@ return nil } +// UInt64Rules describes the constraints applied to `uint64` values type UInt64Rules struct { - Const *uint64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - Lt *uint64 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` - Lte *uint64 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` - Gt *uint64 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` - Gte *uint64 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` - In []uint64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *uint64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *uint64 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *uint64 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *uint64 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *uint64 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []uint64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []uint64 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1231,7 +1371,7 @@ func (m *UInt64Rules) String() string { return proto.CompactTextString(m) } func (*UInt64Rules) ProtoMessage() {} func (*UInt64Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{6} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{6} } func (m *UInt64Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UInt64Rules.Unmarshal(m, b) @@ -1300,13 +1440,29 @@ return nil } +// SInt32Rules describes the constraints applied to `sint32` values type SInt32Rules struct { - Const *int32 `protobuf:"zigzag32,1,opt,name=const" json:"const,omitempty"` - Lt *int32 `protobuf:"zigzag32,2,opt,name=lt" json:"lt,omitempty"` - Lte *int32 `protobuf:"zigzag32,3,opt,name=lte" json:"lte,omitempty"` - Gt *int32 `protobuf:"zigzag32,4,opt,name=gt" json:"gt,omitempty"` - Gte *int32 `protobuf:"zigzag32,5,opt,name=gte" json:"gte,omitempty"` - In []int32 `protobuf:"zigzag32,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int32 `protobuf:"zigzag32,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *int32 `protobuf:"zigzag32,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *int32 `protobuf:"zigzag32,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *int32 `protobuf:"zigzag32,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *int32 `protobuf:"zigzag32,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int32 `protobuf:"zigzag32,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int32 `protobuf:"zigzag32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1317,7 +1473,7 @@ func (m *SInt32Rules) String() string { return proto.CompactTextString(m) } func (*SInt32Rules) ProtoMessage() {} func (*SInt32Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{7} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{7} } func (m *SInt32Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SInt32Rules.Unmarshal(m, b) @@ -1386,13 +1542,29 @@ return nil } +// SInt64Rules describes the constraints applied to `sint64` values type SInt64Rules struct { - Const *int64 `protobuf:"zigzag64,1,opt,name=const" json:"const,omitempty"` - Lt *int64 `protobuf:"zigzag64,2,opt,name=lt" json:"lt,omitempty"` - Lte *int64 `protobuf:"zigzag64,3,opt,name=lte" json:"lte,omitempty"` - Gt *int64 `protobuf:"zigzag64,4,opt,name=gt" json:"gt,omitempty"` - Gte *int64 `protobuf:"zigzag64,5,opt,name=gte" json:"gte,omitempty"` - In []int64 `protobuf:"zigzag64,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int64 `protobuf:"zigzag64,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *int64 `protobuf:"zigzag64,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *int64 `protobuf:"zigzag64,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *int64 `protobuf:"zigzag64,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *int64 `protobuf:"zigzag64,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int64 `protobuf:"zigzag64,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int64 `protobuf:"zigzag64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1403,7 +1575,7 @@ func (m *SInt64Rules) String() string { return proto.CompactTextString(m) } func (*SInt64Rules) ProtoMessage() {} func (*SInt64Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{8} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{8} } func (m *SInt64Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SInt64Rules.Unmarshal(m, b) @@ -1472,13 +1644,29 @@ return nil } +// Fixed32Rules describes the constraints applied to `fixed32` values type Fixed32Rules struct { - Const *uint32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` - Lt *uint32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"` - Lte *uint32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"` - Gt *uint32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"` - Gte *uint32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"` - In []uint32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *uint32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *uint32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *uint32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *uint32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *uint32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []uint32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []uint32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1489,7 +1677,7 @@ func (m *Fixed32Rules) String() string { return proto.CompactTextString(m) } func (*Fixed32Rules) ProtoMessage() {} func (*Fixed32Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{9} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{9} } func (m *Fixed32Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Fixed32Rules.Unmarshal(m, b) @@ -1558,13 +1746,29 @@ return nil } +// Fixed64Rules describes the constraints applied to `fixed64` values type Fixed64Rules struct { - Const *uint64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` - Lt *uint64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"` - Lte *uint64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"` - Gt *uint64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"` - Gte *uint64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"` - In []uint64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *uint64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *uint64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *uint64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *uint64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *uint64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []uint64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []uint64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1575,7 +1779,7 @@ func (m *Fixed64Rules) String() string { return proto.CompactTextString(m) } func (*Fixed64Rules) ProtoMessage() {} func (*Fixed64Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{10} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{10} } func (m *Fixed64Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Fixed64Rules.Unmarshal(m, b) @@ -1644,13 +1848,29 @@ return nil } +// SFixed32Rules describes the constraints applied to `sfixed32` values type SFixed32Rules struct { - Const *int32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` - Lt *int32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"` - Lte *int32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"` - Gt *int32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"` - Gte *int32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"` - In []int32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *int32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *int32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *int32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *int32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1661,7 +1881,7 @@ func (m *SFixed32Rules) String() string { return proto.CompactTextString(m) } func (*SFixed32Rules) ProtoMessage() {} func (*SFixed32Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{11} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{11} } func (m *SFixed32Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SFixed32Rules.Unmarshal(m, b) @@ -1730,13 +1950,29 @@ return nil } +// SFixed64Rules describes the constraints applied to `sfixed64` values type SFixed64Rules struct { - Const *int64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` - Lt *int64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"` - Lte *int64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"` - Gt *int64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"` - Gte *int64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"` - In []int64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *int64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than or equal to the + // specified value, inclusive + Lte *int64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive. If the value of Gt is larger than a specified Lt or Lte, the + // range is reversed. + Gt *int64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than or equal to the + // specified value, inclusive. If the value of Gte is larger than a + // specified Lt or Lte, the range is reversed. + Gte *int64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1747,7 +1983,7 @@ func (m *SFixed64Rules) String() string { return proto.CompactTextString(m) } func (*SFixed64Rules) ProtoMessage() {} func (*SFixed64Rules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{12} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{12} } func (m *SFixed64Rules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SFixed64Rules.Unmarshal(m, b) @@ -1816,7 +2052,9 @@ return nil } +// BoolRules describes the constraints applied to `bool` values type BoolRules struct { + // Const specifies that this field must be exactly the specified value Const *bool `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1827,7 +2065,7 @@ func (m *BoolRules) String() string { return proto.CompactTextString(m) } func (*BoolRules) ProtoMessage() {} func (*BoolRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{13} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{13} } func (m *BoolRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BoolRules.Unmarshal(m, b) @@ -1854,20 +2092,53 @@ return false } +// StringRules describe the constraints applied to `string` values type StringRules struct { - Const *string `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` - Len *uint64 `protobuf:"varint,19,opt,name=len" json:"len,omitempty"` - MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"` - MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"` - LenBytes *uint64 `protobuf:"varint,20,opt,name=len_bytes,json=lenBytes" json:"len_bytes,omitempty"` - MinBytes *uint64 `protobuf:"varint,4,opt,name=min_bytes,json=minBytes" json:"min_bytes,omitempty"` - MaxBytes *uint64 `protobuf:"varint,5,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` - Pattern *string `protobuf:"bytes,6,opt,name=pattern" json:"pattern,omitempty"` - Prefix *string `protobuf:"bytes,7,opt,name=prefix" json:"prefix,omitempty"` - Suffix *string `protobuf:"bytes,8,opt,name=suffix" json:"suffix,omitempty"` - Contains *string `protobuf:"bytes,9,opt,name=contains" json:"contains,omitempty"` - In []string `protobuf:"bytes,10,rep,name=in" json:"in,omitempty"` - NotIn []string `protobuf:"bytes,11,rep,name=not_in,json=notIn" json:"not_in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *string `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` + // Len specifies that this field must be the specified number of + // characters (Unicode code points). Note that the number of + // characters may differ from the number of bytes in the string. + Len *uint64 `protobuf:"varint,19,opt,name=len" json:"len,omitempty"` + // MinLen specifies that this field must be the specified number of + // characters (Unicode code points) at a minimum. Note that the number of + // characters may differ from the number of bytes in the string. + MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"` + // MaxLen specifies that this field must be the specified number of + // characters (Unicode code points) at a maximum. Note that the number of + // characters may differ from the number of bytes in the string. + MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"` + // LenBytes specifies that this field must be the specified number of bytes + // at a minimum + LenBytes *uint64 `protobuf:"varint,20,opt,name=len_bytes,json=lenBytes" json:"len_bytes,omitempty"` + // MinBytes specifies that this field must be the specified number of bytes + // at a minimum + MinBytes *uint64 `protobuf:"varint,4,opt,name=min_bytes,json=minBytes" json:"min_bytes,omitempty"` + // MaxBytes specifies that this field must be the specified number of bytes + // at a maximum + MaxBytes *uint64 `protobuf:"varint,5,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"` + // Pattern specifes that this field must match against the specified + // regular expression (RE2 syntax). The included expression should elide + // any delimiters. + Pattern *string `protobuf:"bytes,6,opt,name=pattern" json:"pattern,omitempty"` + // Prefix specifies that this field must have the specified substring at + // the beginning of the string. + Prefix *string `protobuf:"bytes,7,opt,name=prefix" json:"prefix,omitempty"` + // Suffix specifies that this field must have the specified substring at + // the end of the string. + Suffix *string `protobuf:"bytes,8,opt,name=suffix" json:"suffix,omitempty"` + // Contains specifies that this field must have the specified substring + // anywhere in the string. + Contains *string `protobuf:"bytes,9,opt,name=contains" json:"contains,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []string `protobuf:"bytes,10,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values + NotIn []string `protobuf:"bytes,11,rep,name=not_in,json=notIn" json:"not_in,omitempty"` + // WellKnown rules provide advanced constraints against common string + // patterns + // // Types that are valid to be assigned to WellKnown: // *StringRules_Email // *StringRules_Hostname @@ -1876,6 +2147,7 @@ // *StringRules_Ipv6 // *StringRules_Uri // *StringRules_UriRef + // *StringRules_Address WellKnown isStringRules_WellKnown `protobuf_oneof:"well_known"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1886,7 +2158,7 @@ func (m *StringRules) String() string { return proto.CompactTextString(m) } func (*StringRules) ProtoMessage() {} func (*StringRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{14} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{14} } func (m *StringRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StringRules.Unmarshal(m, b) @@ -1906,47 +2178,6 @@ var xxx_messageInfo_StringRules proto.InternalMessageInfo -type isStringRules_WellKnown interface { - isStringRules_WellKnown() -} - -type StringRules_Email struct { - Email bool `protobuf:"varint,12,opt,name=email,oneof"` -} -type StringRules_Hostname struct { - Hostname bool `protobuf:"varint,13,opt,name=hostname,oneof"` -} -type StringRules_Ip struct { - Ip bool `protobuf:"varint,14,opt,name=ip,oneof"` -} -type StringRules_Ipv4 struct { - Ipv4 bool `protobuf:"varint,15,opt,name=ipv4,oneof"` -} -type StringRules_Ipv6 struct { - Ipv6 bool `protobuf:"varint,16,opt,name=ipv6,oneof"` -} -type StringRules_Uri struct { - Uri bool `protobuf:"varint,17,opt,name=uri,oneof"` -} -type StringRules_UriRef struct { - UriRef bool `protobuf:"varint,18,opt,name=uri_ref,json=uriRef,oneof"` -} - -func (*StringRules_Email) isStringRules_WellKnown() {} -func (*StringRules_Hostname) isStringRules_WellKnown() {} -func (*StringRules_Ip) isStringRules_WellKnown() {} -func (*StringRules_Ipv4) isStringRules_WellKnown() {} -func (*StringRules_Ipv6) isStringRules_WellKnown() {} -func (*StringRules_Uri) isStringRules_WellKnown() {} -func (*StringRules_UriRef) isStringRules_WellKnown() {} - -func (m *StringRules) GetWellKnown() isStringRules_WellKnown { - if m != nil { - return m.WellKnown - } - return nil -} - func (m *StringRules) GetConst() string { if m != nil && m.Const != nil { return *m.Const @@ -2038,6 +2269,65 @@ return nil } +type isStringRules_WellKnown interface { + isStringRules_WellKnown() +} + +type StringRules_Email struct { + Email bool `protobuf:"varint,12,opt,name=email,oneof"` +} + +type StringRules_Hostname struct { + Hostname bool `protobuf:"varint,13,opt,name=hostname,oneof"` +} + +type StringRules_Ip struct { + Ip bool `protobuf:"varint,14,opt,name=ip,oneof"` +} + +type StringRules_Ipv4 struct { + Ipv4 bool `protobuf:"varint,15,opt,name=ipv4,oneof"` +} + +type StringRules_Ipv6 struct { + Ipv6 bool `protobuf:"varint,16,opt,name=ipv6,oneof"` +} + +type StringRules_Uri struct { + Uri bool `protobuf:"varint,17,opt,name=uri,oneof"` +} + +type StringRules_UriRef struct { + UriRef bool `protobuf:"varint,18,opt,name=uri_ref,json=uriRef,oneof"` +} + +type StringRules_Address struct { + Address bool `protobuf:"varint,21,opt,name=address,oneof"` +} + +func (*StringRules_Email) isStringRules_WellKnown() {} + +func (*StringRules_Hostname) isStringRules_WellKnown() {} + +func (*StringRules_Ip) isStringRules_WellKnown() {} + +func (*StringRules_Ipv4) isStringRules_WellKnown() {} + +func (*StringRules_Ipv6) isStringRules_WellKnown() {} + +func (*StringRules_Uri) isStringRules_WellKnown() {} + +func (*StringRules_UriRef) isStringRules_WellKnown() {} + +func (*StringRules_Address) isStringRules_WellKnown() {} + +func (m *StringRules) GetWellKnown() isStringRules_WellKnown { + if m != nil { + return m.WellKnown + } + return nil +} + func (m *StringRules) GetEmail() bool { if x, ok := m.GetWellKnown().(*StringRules_Email); ok { return x.Email @@ -2087,6 +2377,13 @@ return false } +func (m *StringRules) GetAddress() bool { + if x, ok := m.GetWellKnown().(*StringRules_Address); ok { + return x.Address + } + return false +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*StringRules) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _StringRules_OneofMarshaler, _StringRules_OneofUnmarshaler, _StringRules_OneofSizer, []interface{}{ @@ -2097,6 +2394,7 @@ (*StringRules_Ipv6)(nil), (*StringRules_Uri)(nil), (*StringRules_UriRef)(nil), + (*StringRules_Address)(nil), } } @@ -2153,6 +2451,13 @@ } b.EncodeVarint(18<<3 | proto.WireVarint) b.EncodeVarint(t) + case *StringRules_Address: + t := uint64(0) + if x.Address { + t = 1 + } + b.EncodeVarint(21<<3 | proto.WireVarint) + b.EncodeVarint(t) case nil: default: return fmt.Errorf("StringRules.WellKnown has unexpected type %T", x) @@ -2212,6 +2517,13 @@ x, err := b.DecodeVarint() m.WellKnown = &StringRules_UriRef{x != 0} return true, err + case 21: // well_known.address + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.WellKnown = &StringRules_Address{x != 0} + return true, err default: return false, nil } @@ -2242,6 +2554,9 @@ case *StringRules_UriRef: n += 2 // tag and wire n += 1 + case *StringRules_Address: + n += 2 // tag and wire + n += 1 case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -2249,17 +2564,40 @@ return n } +// BytesRules describe the constraints applied to `bytes` values type BytesRules struct { - Const []byte `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` - Len *uint64 `protobuf:"varint,13,opt,name=len" json:"len,omitempty"` - MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"` - MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"` - Pattern *string `protobuf:"bytes,4,opt,name=pattern" json:"pattern,omitempty"` - Prefix []byte `protobuf:"bytes,5,opt,name=prefix" json:"prefix,omitempty"` - Suffix []byte `protobuf:"bytes,6,opt,name=suffix" json:"suffix,omitempty"` - Contains []byte `protobuf:"bytes,7,opt,name=contains" json:"contains,omitempty"` - In [][]byte `protobuf:"bytes,8,rep,name=in" json:"in,omitempty"` - NotIn [][]byte `protobuf:"bytes,9,rep,name=not_in,json=notIn" json:"not_in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const []byte `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"` + // Len specifies that this field must be the specified number of bytes + Len *uint64 `protobuf:"varint,13,opt,name=len" json:"len,omitempty"` + // MinLen specifies that this field must be the specified number of bytes + // at a minimum + MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"` + // MaxLen specifies that this field must be the specified number of bytes + // at a maximum + MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"` + // Pattern specifes that this field must match against the specified + // regular expression (RE2 syntax). The included expression should elide + // any delimiters. + Pattern *string `protobuf:"bytes,4,opt,name=pattern" json:"pattern,omitempty"` + // Prefix specifies that this field must have the specified bytes at the + // beginning of the string. + Prefix []byte `protobuf:"bytes,5,opt,name=prefix" json:"prefix,omitempty"` + // Suffix specifies that this field must have the specified bytes at the + // end of the string. + Suffix []byte `protobuf:"bytes,6,opt,name=suffix" json:"suffix,omitempty"` + // Contains specifies that this field must have the specified bytes + // anywhere in the string. + Contains []byte `protobuf:"bytes,7,opt,name=contains" json:"contains,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In [][]byte `protobuf:"bytes,8,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values + NotIn [][]byte `protobuf:"bytes,9,rep,name=not_in,json=notIn" json:"not_in,omitempty"` + // WellKnown rules provide advanced constraints against common byte + // patterns + // // Types that are valid to be assigned to WellKnown: // *BytesRules_Ip // *BytesRules_Ipv4 @@ -2274,7 +2612,7 @@ func (m *BytesRules) String() string { return proto.CompactTextString(m) } func (*BytesRules) ProtoMessage() {} func (*BytesRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{15} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{15} } func (m *BytesRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BytesRules.Unmarshal(m, b) @@ -2294,31 +2632,6 @@ var xxx_messageInfo_BytesRules proto.InternalMessageInfo -type isBytesRules_WellKnown interface { - isBytesRules_WellKnown() -} - -type BytesRules_Ip struct { - Ip bool `protobuf:"varint,10,opt,name=ip,oneof"` -} -type BytesRules_Ipv4 struct { - Ipv4 bool `protobuf:"varint,11,opt,name=ipv4,oneof"` -} -type BytesRules_Ipv6 struct { - Ipv6 bool `protobuf:"varint,12,opt,name=ipv6,oneof"` -} - -func (*BytesRules_Ip) isBytesRules_WellKnown() {} -func (*BytesRules_Ipv4) isBytesRules_WellKnown() {} -func (*BytesRules_Ipv6) isBytesRules_WellKnown() {} - -func (m *BytesRules) GetWellKnown() isBytesRules_WellKnown { - if m != nil { - return m.WellKnown - } - return nil -} - func (m *BytesRules) GetConst() []byte { if m != nil { return m.Const @@ -2389,6 +2702,35 @@ return nil } +type isBytesRules_WellKnown interface { + isBytesRules_WellKnown() +} + +type BytesRules_Ip struct { + Ip bool `protobuf:"varint,10,opt,name=ip,oneof"` +} + +type BytesRules_Ipv4 struct { + Ipv4 bool `protobuf:"varint,11,opt,name=ipv4,oneof"` +} + +type BytesRules_Ipv6 struct { + Ipv6 bool `protobuf:"varint,12,opt,name=ipv6,oneof"` +} + +func (*BytesRules_Ip) isBytesRules_WellKnown() {} + +func (*BytesRules_Ipv4) isBytesRules_WellKnown() {} + +func (*BytesRules_Ipv6) isBytesRules_WellKnown() {} + +func (m *BytesRules) GetWellKnown() isBytesRules_WellKnown { + if m != nil { + return m.WellKnown + } + return nil +} + func (m *BytesRules) GetIp() bool { if x, ok := m.GetWellKnown().(*BytesRules_Ip); ok { return x.Ip @@ -2500,10 +2842,18 @@ return n } +// EnumRules describe the constraints applied to enum values type EnumRules struct { - Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` - DefinedOnly *bool `protobuf:"varint,2,opt,name=defined_only,json=definedOnly" json:"defined_only,omitempty"` - In []int32 `protobuf:"varint,3,rep,name=in" json:"in,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"` + // DefinedOnly specifies that this field must be only one of the defined + // values for this enum, failing on any undefined value. + DefinedOnly *bool `protobuf:"varint,2,opt,name=defined_only,json=definedOnly" json:"defined_only,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []int32 `protobuf:"varint,3,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []int32 `protobuf:"varint,4,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2514,7 +2864,7 @@ func (m *EnumRules) String() string { return proto.CompactTextString(m) } func (*EnumRules) ProtoMessage() {} func (*EnumRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{16} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{16} } func (m *EnumRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EnumRules.Unmarshal(m, b) @@ -2562,8 +2912,13 @@ return nil } +// MessageRules describe the constraints applied to embedded message values. +// For message-type fields, validation is performed recursively. type MessageRules struct { - Skip *bool `protobuf:"varint,1,opt,name=skip" json:"skip,omitempty"` + // Skip specifies that the validation rules of this field should not be + // evaluated + Skip *bool `protobuf:"varint,1,opt,name=skip" json:"skip,omitempty"` + // Required specifies that this field must be set Required *bool `protobuf:"varint,2,opt,name=required" json:"required,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2574,7 +2929,7 @@ func (m *MessageRules) String() string { return proto.CompactTextString(m) } func (*MessageRules) ProtoMessage() {} func (*MessageRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{17} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{17} } func (m *MessageRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageRules.Unmarshal(m, b) @@ -2608,10 +2963,21 @@ return false } +// RepeatedRules describe the constraints applied to `repeated` values type RepeatedRules struct { - MinItems *uint64 `protobuf:"varint,1,opt,name=min_items,json=minItems" json:"min_items,omitempty"` - MaxItems *uint64 `protobuf:"varint,2,opt,name=max_items,json=maxItems" json:"max_items,omitempty"` - Unique *bool `protobuf:"varint,3,opt,name=unique" json:"unique,omitempty"` + // MinItems specifies that this field must have the specified number of + // items at a minimum + MinItems *uint64 `protobuf:"varint,1,opt,name=min_items,json=minItems" json:"min_items,omitempty"` + // MaxItems specifies that this field must have the specified number of + // items at a maximum + MaxItems *uint64 `protobuf:"varint,2,opt,name=max_items,json=maxItems" json:"max_items,omitempty"` + // Unique specifies that all elements in this field must be unique. This + // contraint is only applicable to scalar and enum types (messages are not + // supported). + Unique *bool `protobuf:"varint,3,opt,name=unique" json:"unique,omitempty"` + // Items specifies the contraints to be applied to each item in the field. + // Repeated message fields will still execute validation against each item + // unless skip is specified here. Items *FieldRules `protobuf:"bytes,4,opt,name=items" json:"items,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2622,7 +2988,7 @@ func (m *RepeatedRules) String() string { return proto.CompactTextString(m) } func (*RepeatedRules) ProtoMessage() {} func (*RepeatedRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{18} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{18} } func (m *RepeatedRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedRules.Unmarshal(m, b) @@ -2670,11 +3036,22 @@ return nil } +// MapRules describe the constraints applied to `map` values type MapRules struct { - MinPairs *uint64 `protobuf:"varint,1,opt,name=min_pairs,json=minPairs" json:"min_pairs,omitempty"` - MaxPairs *uint64 `protobuf:"varint,2,opt,name=max_pairs,json=maxPairs" json:"max_pairs,omitempty"` - NoSparse *bool `protobuf:"varint,3,opt,name=no_sparse,json=noSparse" json:"no_sparse,omitempty"` - Keys *FieldRules `protobuf:"bytes,4,opt,name=keys" json:"keys,omitempty"` + // MinPairs specifies that this field must have the specified number of + // KVs at a minimum + MinPairs *uint64 `protobuf:"varint,1,opt,name=min_pairs,json=minPairs" json:"min_pairs,omitempty"` + // MaxPairs specifies that this field must have the specified number of + // KVs at a maximum + MaxPairs *uint64 `protobuf:"varint,2,opt,name=max_pairs,json=maxPairs" json:"max_pairs,omitempty"` + // NoSparse specifies values in this field cannot be unset. This only + // applies to map's with message value types. + NoSparse *bool `protobuf:"varint,3,opt,name=no_sparse,json=noSparse" json:"no_sparse,omitempty"` + // Keys specifies the constraints to be applied to each key in the field. + Keys *FieldRules `protobuf:"bytes,4,opt,name=keys" json:"keys,omitempty"` + // Values specifies the constraints to be applied to the value of each key + // in the field. Message values will still have their validations evaluated + // unless skip is specified here. Values *FieldRules `protobuf:"bytes,5,opt,name=values" json:"values,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2685,7 +3062,7 @@ func (m *MapRules) String() string { return proto.CompactTextString(m) } func (*MapRules) ProtoMessage() {} func (*MapRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{19} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{19} } func (m *MapRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MapRules.Unmarshal(m, b) @@ -2740,9 +3117,16 @@ return nil } +// AnyRules describe constraints applied exclusively to the +// `google.protobuf.Any` well-known type type AnyRules struct { - Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` - In []string `protobuf:"bytes,2,rep,name=in" json:"in,omitempty"` + // Required specifies that this field must be set + Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` + // In specifies that this field's `type_url` must be equal to one of the + // specified values. + In []string `protobuf:"bytes,2,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field's `type_url` must not be equal to any of + // the specified values. NotIn []string `protobuf:"bytes,3,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2753,7 +3137,7 @@ func (m *AnyRules) String() string { return proto.CompactTextString(m) } func (*AnyRules) ProtoMessage() {} func (*AnyRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{20} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{20} } func (m *AnyRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AnyRules.Unmarshal(m, b) @@ -2794,14 +3178,30 @@ return nil } +// DurationRules describe the constraints applied exclusively to the +// `google.protobuf.Duration` well-known type type DurationRules struct { - Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` - Const *duration.Duration `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"` - Lt *duration.Duration `protobuf:"bytes,3,opt,name=lt" json:"lt,omitempty"` - Lte *duration.Duration `protobuf:"bytes,4,opt,name=lte" json:"lte,omitempty"` - Gt *duration.Duration `protobuf:"bytes,5,opt,name=gt" json:"gt,omitempty"` - Gte *duration.Duration `protobuf:"bytes,6,opt,name=gte" json:"gte,omitempty"` - In []*duration.Duration `protobuf:"bytes,7,rep,name=in" json:"in,omitempty"` + // Required specifies that this field must be set + Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *duration.Duration `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *duration.Duration `protobuf:"bytes,3,opt,name=lt" json:"lt,omitempty"` + // Lt specifies that this field must be less than the specified value, + // inclusive + Lte *duration.Duration `protobuf:"bytes,4,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive + Gt *duration.Duration `protobuf:"bytes,5,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than the specified value, + // inclusive + Gte *duration.Duration `protobuf:"bytes,6,opt,name=gte" json:"gte,omitempty"` + // In specifies that this field must be equal to one of the specified + // values + In []*duration.Duration `protobuf:"bytes,7,rep,name=in" json:"in,omitempty"` + // NotIn specifies that this field cannot be equal to one of the specified + // values NotIn []*duration.Duration `protobuf:"bytes,8,rep,name=not_in,json=notIn" json:"not_in,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2812,7 +3212,7 @@ func (m *DurationRules) String() string { return proto.CompactTextString(m) } func (*DurationRules) ProtoMessage() {} func (*DurationRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{21} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{21} } func (m *DurationRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DurationRules.Unmarshal(m, b) @@ -2888,26 +3288,45 @@ return nil } +// TimestampRules describe the constraints applied exclusively to the +// `google.protobuf.Timestamp` well-known type type TimestampRules struct { - Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` - Const *timestamp.Timestamp `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"` - Lt *timestamp.Timestamp `protobuf:"bytes,3,opt,name=lt" json:"lt,omitempty"` - Lte *timestamp.Timestamp `protobuf:"bytes,4,opt,name=lte" json:"lte,omitempty"` - Gt *timestamp.Timestamp `protobuf:"bytes,5,opt,name=gt" json:"gt,omitempty"` - Gte *timestamp.Timestamp `protobuf:"bytes,6,opt,name=gte" json:"gte,omitempty"` - LtNow *bool `protobuf:"varint,7,opt,name=lt_now,json=ltNow" json:"lt_now,omitempty"` - GtNow *bool `protobuf:"varint,8,opt,name=gt_now,json=gtNow" json:"gt_now,omitempty"` - Within *duration.Duration `protobuf:"bytes,9,opt,name=within" json:"within,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Required specifies that this field must be set + Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"` + // Const specifies that this field must be exactly the specified value + Const *timestamp.Timestamp `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"` + // Lt specifies that this field must be less than the specified value, + // exclusive + Lt *timestamp.Timestamp `protobuf:"bytes,3,opt,name=lt" json:"lt,omitempty"` + // Lte specifies that this field must be less than the specified value, + // inclusive + Lte *timestamp.Timestamp `protobuf:"bytes,4,opt,name=lte" json:"lte,omitempty"` + // Gt specifies that this field must be greater than the specified value, + // exclusive + Gt *timestamp.Timestamp `protobuf:"bytes,5,opt,name=gt" json:"gt,omitempty"` + // Gte specifies that this field must be greater than the specified value, + // inclusive + Gte *timestamp.Timestamp `protobuf:"bytes,6,opt,name=gte" json:"gte,omitempty"` + // LtNow specifies that this must be less than the current time. LtNow + // can only be used with the Within rule. + LtNow *bool `protobuf:"varint,7,opt,name=lt_now,json=ltNow" json:"lt_now,omitempty"` + // GtNow specifies that this must be greater than the current time. GtNow + // can only be used with the Within rule. + GtNow *bool `protobuf:"varint,8,opt,name=gt_now,json=gtNow" json:"gt_now,omitempty"` + // Within specifies that this field must be within this duration of the + // current time. This constraint can be used alone or with the LtNow and + // GtNow rules. + Within *duration.Duration `protobuf:"bytes,9,opt,name=within" json:"within,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TimestampRules) Reset() { *m = TimestampRules{} } func (m *TimestampRules) String() string { return proto.CompactTextString(m) } func (*TimestampRules) ProtoMessage() {} func (*TimestampRules) Descriptor() ([]byte, []int) { - return fileDescriptor_validate_42a9c75c83428773, []int{22} + return fileDescriptor_validate_c8f5e113dd6422a8, []int{22} } func (m *TimestampRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TimestampRules.Unmarshal(m, b) @@ -3046,109 +3465,111 @@ proto.RegisterExtension(E_Rules) } -func init() { proto.RegisterFile("validate/validate.proto", fileDescriptor_validate_42a9c75c83428773) } +func init() { proto.RegisterFile("validate/validate.proto", fileDescriptor_validate_c8f5e113dd6422a8) } -var fileDescriptor_validate_42a9c75c83428773 = []byte{ - // 1609 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x98, 0xcb, 0x6e, 0xdb, 0x46, - 0x17, 0xc7, 0x3f, 0xf1, 0x26, 0x6a, 0x2c, 0x45, 0xd2, 0xc4, 0x76, 0x18, 0x7f, 0x97, 0x38, 0x5a, - 0x7c, 0x70, 0x52, 0xc7, 0x4e, 0x1d, 0x57, 0x08, 0x52, 0xb4, 0x40, 0x8d, 0x34, 0x68, 0xd0, 0xa6, - 0x29, 0xe8, 0x66, 0xd3, 0x8d, 0x40, 0x5b, 0x23, 0x65, 0x60, 0x6a, 0xc8, 0x90, 0x54, 0x6c, 0x3d, - 0x44, 0xda, 0xee, 0xfa, 0x2c, 0x5d, 0x75, 0xdf, 0x37, 0xe9, 0xba, 0xdb, 0x2e, 0x8a, 0xb9, 0xf1, - 0x72, 0x48, 0xcb, 0x8b, 0xee, 0x34, 0xe7, 0xfc, 0xcf, 0xcc, 0x0f, 0xff, 0x11, 0x67, 0x0e, 0x89, - 0xee, 0xbc, 0x0f, 0x42, 0x3a, 0x0d, 0x32, 0x72, 0xa8, 0x7f, 0x1c, 0xc4, 0x49, 0x94, 0x45, 0xd8, - 0xd5, 0xe3, 0x9d, 0xdd, 0x79, 0x14, 0xcd, 0x43, 0x72, 0x28, 0xe2, 0x67, 0xcb, 0xd9, 0xe1, 0x94, - 0xa4, 0xe7, 0x09, 0x8d, 0xb3, 0x28, 0x91, 0xda, 0x9d, 0xff, 0xd5, 0x14, 0xcb, 0x24, 0xc8, 0x68, - 0xc4, 0x54, 0xfe, 0x1e, 0xcc, 0x67, 0x74, 0x41, 0xd2, 0x2c, 0x58, 0xc4, 0x52, 0x30, 0xfa, 0xdd, - 0x45, 0xe8, 0x05, 0x25, 0xe1, 0xd4, 0x5f, 0x86, 0x24, 0xc5, 0xfb, 0xc8, 0x9e, 0x85, 0x51, 0x90, - 0x79, 0xad, 0xdd, 0xd6, 0xde, 0xc6, 0xd1, 0xe6, 0x41, 0xce, 0xf6, 0x82, 0x87, 0x85, 0xe8, 0xab, - 0x7f, 0xf9, 0x52, 0x84, 0x0f, 0x91, 0x33, 0x8d, 0x96, 0x67, 0x21, 0xf1, 0x0c, 0x21, 0xdf, 0x2a, - 0xe4, 0xcf, 0x45, 0x5c, 0xeb, 0x95, 0x8c, 0x4f, 0x4f, 0x59, 0xf6, 0xe4, 0xc8, 0x33, 0xe1, 0xf4, - 0x2f, 0x79, 0x38, 0x9f, 0x5e, 0x88, 0x94, 0x7a, 0x7c, 0xec, 0x59, 0x0d, 0xea, 0xf1, 0x71, 0x59, - 0x3d, 0x3e, 0xe6, 0x30, 0x4b, 0x39, 0xb9, 0x0d, 0x61, 0xde, 0x54, 0x66, 0x57, 0x32, 0x5d, 0x30, - 0x3e, 0xf6, 0x9c, 0xa6, 0x82, 0x62, 0x01, 0x25, 0xe3, 0x05, 0xa9, 0x5c, 0xa1, 0x0d, 0x0b, 0x4e, - 0xab, 0x2b, 0xa4, 0xf9, 0x0a, 0xa9, 0x5c, 0xc1, 0x6d, 0x2a, 0x28, 0xad, 0x20, 0x65, 0xf8, 0x08, - 0xb5, 0x67, 0xf4, 0x8a, 0x4c, 0x9f, 0x1c, 0x79, 0x1d, 0x51, 0xb1, 0x5d, 0xda, 0x00, 0x99, 0xd0, - 0x25, 0x5a, 0x98, 0xd7, 0x8c, 0x8f, 0x3d, 0xd4, 0x58, 0x53, 0x2c, 0xa3, 0x85, 0xf8, 0x13, 0xe4, - 0xa6, 0x7a, 0xa1, 0x0d, 0x51, 0x74, 0xa7, 0x84, 0x06, 0x56, 0xca, 0xa5, 0x45, 0xd9, 0xf8, 0xd8, - 0xeb, 0x36, 0x97, 0x15, 0x8b, 0xe5, 0x52, 0xfc, 0x00, 0x59, 0x67, 0x51, 0x14, 0x7a, 0x3d, 0x51, - 0x72, 0xbb, 0x28, 0x39, 0x89, 0xa2, 0x50, 0xcb, 0x85, 0x44, 0x38, 0x96, 0x25, 0x94, 0xcd, 0xbd, - 0x5b, 0x35, 0xc7, 0x44, 0xbc, 0x70, 0x4c, 0x0c, 0xf9, 0x7f, 0xe4, 0x6c, 0x95, 0x91, 0xd4, 0xeb, - 0xc3, 0xff, 0xc8, 0x09, 0x0f, 0xe7, 0xff, 0x11, 0x21, 0xe2, 0x24, 0x84, 0x2d, 0x17, 0xde, 0x00, +var fileDescriptor_validate_c8f5e113dd6422a8 = []byte{ + // 1640 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x98, 0xcd, 0x6e, 0xdb, 0xc6, + 0x16, 0xc7, 0xaf, 0xf8, 0x25, 0x6a, 0x2c, 0x45, 0xd2, 0xc4, 0x76, 0x18, 0xdf, 0x8f, 0x38, 0x5a, + 0x5c, 0x38, 0xb9, 0x89, 0x9d, 0xeb, 0xb8, 0x42, 0x90, 0xa2, 0x05, 0x6a, 0xa4, 0x41, 0x83, 0x36, + 0x4d, 0x40, 0x37, 0x9b, 0x6e, 0x04, 0xda, 0x1a, 0x29, 0x03, 0x53, 0x43, 0x86, 0xa4, 0x6c, 0xeb, + 0x21, 0xd2, 0x76, 0xd7, 0xbe, 0x4a, 0x57, 0xdd, 0xf7, 0x4d, 0xba, 0xee, 0x0b, 0x14, 0xf3, 0xc5, + 0x8f, 0x43, 0x5a, 0x5e, 0x74, 0xa7, 0x39, 0xe7, 0x7f, 0x66, 0x7e, 0xf8, 0x0f, 0x39, 0x73, 0x28, + 0x74, 0xe7, 0x22, 0x08, 0xe9, 0x34, 0xc8, 0xc8, 0x81, 0xfe, 0xb1, 0x1f, 0x27, 0x51, 0x16, 0x61, + 0x57, 0x8f, 0x77, 0x76, 0xe7, 0x51, 0x34, 0x0f, 0xc9, 0x81, 0x88, 0x9f, 0x2e, 0x67, 0x07, 0x53, + 0x92, 0x9e, 0x25, 0x34, 0xce, 0xa2, 0x44, 0x6a, 0x77, 0xfe, 0x53, 0x53, 0x2c, 0x93, 0x20, 0xa3, + 0x11, 0x53, 0xf9, 0x7b, 0x30, 0x9f, 0xd1, 0x05, 0x49, 0xb3, 0x60, 0x11, 0x4b, 0xc1, 0xe8, 0x77, + 0x17, 0xa1, 0x97, 0x94, 0x84, 0x53, 0x7f, 0x19, 0x92, 0x14, 0x3f, 0x42, 0xf6, 0x2c, 0x8c, 0x82, + 0xcc, 0x6b, 0xed, 0xb6, 0xf6, 0x36, 0x0e, 0x37, 0xf7, 0x73, 0xb6, 0x97, 0x3c, 0x2c, 0x44, 0x5f, + 0xfd, 0xc3, 0x97, 0x22, 0x7c, 0x80, 0x9c, 0x69, 0xb4, 0x3c, 0x0d, 0x89, 0x67, 0x08, 0xf9, 0x56, + 0x21, 0x7f, 0x21, 0xe2, 0x5a, 0xaf, 0x64, 0x7c, 0x7a, 0xca, 0xb2, 0xa7, 0x87, 0x9e, 0x09, 0xa7, + 0x7f, 0xc5, 0xc3, 0xf9, 0xf4, 0x42, 0xa4, 0xd4, 0xe3, 0x23, 0xcf, 0x6a, 0x50, 0x8f, 0x8f, 0xca, + 0xea, 0xf1, 0x11, 0x87, 0x59, 0xca, 0xc9, 0x6d, 0x08, 0xf3, 0xae, 0x32, 0xbb, 0x92, 0xe9, 0x82, + 0xf1, 0x91, 0xe7, 0x34, 0x15, 0x14, 0x0b, 0x28, 0x19, 0x2f, 0x48, 0xe5, 0x0a, 0x6d, 0x58, 0x70, + 0x52, 0x5d, 0x21, 0xcd, 0x57, 0x48, 0xe5, 0x0a, 0x6e, 0x53, 0x41, 0x69, 0x05, 0x29, 0xc3, 0x87, + 0xa8, 0x3d, 0xa3, 0x57, 0x64, 0xfa, 0xf4, 0xd0, 0xeb, 0x88, 0x8a, 0xed, 0xd2, 0x06, 0xc8, 0x84, + 0x2e, 0xd1, 0xc2, 0xbc, 0x66, 0x7c, 0xe4, 0xa1, 0xc6, 0x9a, 0x62, 0x19, 0x2d, 0xc4, 0x9f, 0x20, + 0x37, 0xd5, 0x0b, 0x6d, 0x88, 0xa2, 0x3b, 0x25, 0x34, 0xb0, 0x52, 0x2e, 0x2d, 0xca, 0xc6, 0x47, + 0x5e, 0xb7, 0xb9, 0xac, 0x58, 0x2c, 0x97, 0xe2, 0x07, 0xc8, 0x3a, 0x8d, 0xa2, 0xd0, 0xeb, 0x89, + 0x92, 0xdb, 0x45, 0xc9, 0x71, 0x14, 0x85, 0x5a, 0x2e, 0x24, 0xc2, 0xb1, 0x2c, 0xa1, 0x6c, 0xee, + 0xdd, 0xaa, 0x39, 0x26, 0xe2, 0x85, 0x63, 0x62, 0xc8, 0x9f, 0x91, 0xd3, 0x55, 0x46, 0x52, 0xaf, + 0x0f, 0x9f, 0x91, 0x63, 0x1e, 0xce, 0x9f, 0x11, 0x21, 0xe2, 0x24, 0x84, 0x2d, 0x17, 0xde, 0x00, 0x92, 0x7c, 0xc9, 0x96, 0x8b, 0x9c, 0x84, 0x4b, 0xb8, 0xad, 0x0b, 0x92, 0xa6, 0xc1, 0x9c, 0x78, - 0x43, 0x68, 0xeb, 0x2b, 0x99, 0xc8, 0x6d, 0x55, 0x42, 0xee, 0x4f, 0x42, 0x62, 0x12, 0x64, 0x64, - 0xea, 0x61, 0xe8, 0x8f, 0xaf, 0x32, 0xb9, 0x3f, 0x5a, 0x8a, 0xff, 0x8f, 0xcc, 0x45, 0x10, 0x7b, + 0x43, 0x68, 0xeb, 0x6b, 0x99, 0xc8, 0x6d, 0x55, 0x42, 0xee, 0x4f, 0x42, 0x62, 0x12, 0x64, 0x64, + 0xea, 0x61, 0xe8, 0x8f, 0xaf, 0x32, 0xb9, 0x3f, 0x5a, 0x8a, 0xff, 0x8b, 0xcc, 0x45, 0x10, 0x7b, 0xb7, 0x45, 0x05, 0x2e, 0x2d, 0x13, 0xc4, 0x5a, 0xcc, 0x05, 0x5c, 0x17, 0xb0, 0x95, 0xb7, 0x09, - 0x75, 0x5f, 0xb0, 0x55, 0xae, 0x0b, 0xd8, 0x8a, 0x63, 0xe8, 0x63, 0xc0, 0xdb, 0x82, 0x18, 0xcf, - 0x55, 0x26, 0xc7, 0xd0, 0x52, 0xfc, 0x14, 0x75, 0xf2, 0xd3, 0xc1, 0xdb, 0x16, 0x75, 0x5e, 0x51, - 0xf7, 0xbd, 0x4e, 0xe9, 0xc2, 0x42, 0x7c, 0xe2, 0x20, 0x2b, 0x5b, 0xc5, 0x64, 0xf4, 0xa1, 0x85, - 0x50, 0x71, 0x4e, 0xe0, 0x4d, 0x64, 0x9f, 0x47, 0x2c, 0x95, 0x87, 0x89, 0xe1, 0xcb, 0x01, 0xbe, + 0x75, 0x5f, 0xb0, 0x55, 0xae, 0x0b, 0xd8, 0x8a, 0x63, 0xe8, 0x63, 0xc0, 0xdb, 0x82, 0x18, 0x2f, + 0x54, 0x26, 0xc7, 0xd0, 0x52, 0xfc, 0x0c, 0x75, 0xf2, 0xd3, 0xc1, 0xdb, 0x16, 0x75, 0x5e, 0x51, + 0xf7, 0x9d, 0x4e, 0xe9, 0xc2, 0x42, 0x7c, 0xec, 0x20, 0x2b, 0x5b, 0xc5, 0x64, 0xf4, 0xb1, 0x85, + 0x50, 0x71, 0x4e, 0xe0, 0x4d, 0x64, 0x9f, 0x45, 0x2c, 0x95, 0x87, 0x89, 0xe1, 0xcb, 0x01, 0xbe, 0x85, 0x8c, 0x30, 0x13, 0x07, 0x86, 0xe1, 0x1b, 0x61, 0x86, 0x07, 0xc8, 0x0c, 0x33, 0x22, 0x4e, - 0x04, 0xc3, 0xe7, 0x3f, 0xb9, 0x62, 0x9e, 0x89, 0x87, 0xde, 0xf0, 0x8d, 0xb9, 0x50, 0xcc, 0x33, - 0x22, 0x1e, 0x6b, 0xc3, 0xe7, 0x3f, 0xb9, 0x82, 0x32, 0xcf, 0xd9, 0x35, 0xb9, 0x82, 0x32, 0xbc, - 0x85, 0x1c, 0x16, 0x65, 0x13, 0xca, 0xbc, 0xb6, 0x88, 0xd9, 0x2c, 0xca, 0x5e, 0xb2, 0xd1, 0x8f, + 0x04, 0xc3, 0xe7, 0x3f, 0xb9, 0x62, 0x9e, 0x89, 0x97, 0xde, 0xf0, 0x8d, 0xb9, 0x50, 0xcc, 0x33, + 0x22, 0x5e, 0x6b, 0xc3, 0xe7, 0x3f, 0xb9, 0x82, 0x32, 0xcf, 0xd9, 0x35, 0xb9, 0x82, 0x32, 0xbc, + 0x85, 0x1c, 0x16, 0x65, 0x13, 0xca, 0xbc, 0xb6, 0x88, 0xd9, 0x2c, 0xca, 0x5e, 0xb1, 0xd1, 0x0f, 0x2d, 0xb4, 0x51, 0x3a, 0x88, 0xaa, 0x40, 0xad, 0x3a, 0x50, 0x0b, 0x02, 0xb5, 0x20, 0x50, 0x0b, 0x02, 0xb5, 0x20, 0x50, 0xab, 0x01, 0xa8, 0xa5, 0x81, 0xb8, 0x41, 0xc5, 0x49, 0x51, 0xe5, 0xb1, 0xeb, 0x3c, 0x36, 0xe4, 0xb1, 0x21, 0x8f, 0x0d, 0x79, 0x6c, 0xc8, 0x63, 0x37, 0xf0, 0xd8, 0x80, - 0x47, 0x3d, 0xb4, 0x55, 0x1e, 0xb3, 0xce, 0x63, 0x42, 0x1e, 0x13, 0xf2, 0x98, 0x90, 0xc7, 0x84, - 0x3c, 0x66, 0x03, 0x8f, 0x59, 0xde, 0xb0, 0x37, 0xd7, 0x19, 0xd4, 0xab, 0x03, 0xf5, 0x20, 0x50, + 0x47, 0xbd, 0xb4, 0x55, 0x1e, 0xb3, 0xce, 0x63, 0x42, 0x1e, 0x13, 0xf2, 0x98, 0x90, 0xc7, 0x84, + 0x3c, 0x66, 0x03, 0x8f, 0x59, 0xde, 0xb0, 0x77, 0xd7, 0x19, 0xd4, 0xab, 0x03, 0xf5, 0x20, 0x50, 0x0f, 0x02, 0xf5, 0x20, 0x50, 0x0f, 0x02, 0xf5, 0x1a, 0x80, 0x7a, 0x10, 0xa8, 0xd1, 0x21, 0xab, 0x0e, 0x64, 0x41, 0x20, 0x0b, 0x02, 0x59, 0x10, 0xc8, 0x82, 0x40, 0x56, 0x03, 0x90, 0x55, 0x06, - 0x3a, 0xbd, 0xce, 0xa1, 0x61, 0x1d, 0x68, 0x08, 0x81, 0x86, 0x10, 0x68, 0x08, 0x81, 0x86, 0x10, + 0x3a, 0xb9, 0xce, 0xa1, 0x61, 0x1d, 0x68, 0x08, 0x81, 0x86, 0x10, 0x68, 0x08, 0x81, 0x86, 0x10, 0x68, 0xd8, 0x00, 0x34, 0x84, 0x40, 0x8d, 0x0e, 0xe1, 0x3a, 0x10, 0x86, 0x40, 0x18, 0x02, 0x61, - 0x08, 0x84, 0x21, 0x10, 0x6e, 0x00, 0xc2, 0x1a, 0xe8, 0xa7, 0x16, 0xea, 0x96, 0x6f, 0xb0, 0x2a, + 0x08, 0x84, 0x21, 0x10, 0x6e, 0x00, 0xc2, 0x1a, 0xe8, 0xc7, 0x16, 0xea, 0x96, 0x6f, 0xb0, 0x2a, 0x51, 0xbb, 0x4e, 0xd4, 0x86, 0x44, 0x6d, 0x48, 0xd4, 0x86, 0x44, 0x6d, 0x48, 0xd4, 0x6e, 0x20, 0x6a, 0xd7, 0x88, 0x1a, 0x3d, 0x72, 0xea, 0x44, 0x0e, 0x24, 0x72, 0x20, 0x91, 0x03, 0x89, 0x1c, - 0x48, 0xe4, 0x34, 0x10, 0x39, 0x9a, 0xe8, 0xe7, 0x16, 0xea, 0x9d, 0x5e, 0x6f, 0x52, 0xbf, 0x8e, + 0x48, 0xe4, 0x34, 0x10, 0x39, 0x9a, 0xe8, 0xa7, 0x16, 0xea, 0x9d, 0x5c, 0x6f, 0x52, 0xbf, 0x8e, 0xd4, 0x87, 0x48, 0x7d, 0x88, 0xd4, 0x87, 0x48, 0x7d, 0x88, 0xd4, 0x6f, 0x40, 0xea, 0xd7, 0x91, 0x1a, 0x5d, 0x1a, 0xd4, 0x91, 0x06, 0x10, 0x69, 0x00, 0x91, 0x06, 0x10, 0x69, 0x00, 0x91, 0x06, - 0x0d, 0x48, 0x03, 0x8d, 0x74, 0x1f, 0x75, 0xf2, 0x0e, 0xa5, 0x4a, 0xe3, 0x2a, 0x9a, 0xd1, 0x5f, - 0x26, 0xda, 0x28, 0x35, 0x26, 0x55, 0x55, 0x47, 0x33, 0x73, 0x46, 0xc2, 0xc4, 0x05, 0xcf, 0xcf, + 0x0d, 0x48, 0x03, 0x8d, 0x74, 0x1f, 0x75, 0xf2, 0x0e, 0xa5, 0x4a, 0xe3, 0x2a, 0x9a, 0xd1, 0x2f, + 0x16, 0xda, 0x28, 0x35, 0x26, 0x55, 0x55, 0x47, 0x33, 0x73, 0x46, 0xc2, 0xc4, 0x05, 0xcf, 0xcf, 0x03, 0xc2, 0xf0, 0x1d, 0xd4, 0x5e, 0x50, 0x36, 0xe1, 0x51, 0x79, 0x6c, 0x38, 0x0b, 0xca, 0xbe, - 0x51, 0x89, 0xe0, 0x4a, 0x24, 0x4c, 0x95, 0x08, 0xae, 0x78, 0xe2, 0xdf, 0xa8, 0x13, 0x12, 0x36, + 0x51, 0x89, 0xe0, 0x4a, 0x24, 0x4c, 0x95, 0x08, 0xae, 0x78, 0xe2, 0x9f, 0xa8, 0x13, 0x12, 0x36, 0x91, 0xcd, 0xce, 0xa6, 0x48, 0xb9, 0x21, 0x61, 0xa2, 0xcb, 0xe1, 0x49, 0x3e, 0x9d, 0x4c, 0xca, 0x53, 0xc6, 0x5d, 0xd0, 0x52, 0x32, 0xb8, 0x52, 0x49, 0x5b, 0x25, 0x83, 0x2b, 0x99, 0xf4, 0x50, 0x3b, 0x0e, 0xb2, 0x8c, 0x24, 0x4c, 0x74, 0xc1, 0x1d, 0x5f, 0x0f, 0xf1, 0x36, 0x72, 0xe2, 0x84, 0xcc, 0xe8, 0x95, 0xe8, 0x76, 0x3b, 0xbe, 0x1a, 0xf1, 0x78, 0xba, 0x9c, 0xf1, 0xb8, 0x2b, 0xe3, - 0x72, 0x84, 0x77, 0x90, 0x7b, 0x1e, 0xb1, 0x2c, 0xa0, 0x2c, 0x15, 0xcd, 0x6b, 0xc7, 0xcf, 0xc7, + 0x72, 0x84, 0x77, 0x90, 0x7b, 0x16, 0xb1, 0x2c, 0xa0, 0x2c, 0x15, 0xcd, 0x6b, 0xc7, 0xcf, 0xc7, 0xca, 0x70, 0xb4, 0x6b, 0xee, 0x75, 0x80, 0xe1, 0x1b, 0x22, 0x26, 0x0d, 0xc7, 0xdb, 0xc8, 0x26, - 0x8b, 0x80, 0x86, 0xa2, 0xb9, 0x74, 0x79, 0xdb, 0x26, 0x86, 0xf8, 0x3f, 0xc8, 0x7d, 0x1b, 0xa5, + 0x8b, 0x80, 0x86, 0xa2, 0xb9, 0x74, 0x79, 0xdb, 0x26, 0x86, 0xf8, 0x5f, 0xc8, 0x7d, 0x1f, 0xa5, 0x19, 0x0b, 0x16, 0x44, 0x34, 0x91, 0x3c, 0x95, 0x47, 0xf0, 0x00, 0x19, 0x34, 0x16, 0xfd, 0x22, - 0x8f, 0x1b, 0x34, 0xc6, 0x9b, 0xc8, 0xa2, 0xf1, 0xfb, 0x63, 0xd1, 0x13, 0xf2, 0x98, 0x18, 0xa9, - 0xe8, 0x58, 0x34, 0x7f, 0x3a, 0x3a, 0xc6, 0x18, 0x99, 0xcb, 0x84, 0x8a, 0x1e, 0x8f, 0x07, 0xf9, - 0x00, 0xdf, 0x45, 0xed, 0x65, 0x42, 0x27, 0x09, 0x99, 0x89, 0x36, 0xce, 0x15, 0xef, 0x00, 0x09, - 0xf5, 0xc9, 0xec, 0xa4, 0x8b, 0xd0, 0x25, 0x09, 0xc3, 0xc9, 0x05, 0x8b, 0x2e, 0xd9, 0xe8, 0x37, - 0x03, 0xa1, 0xa2, 0xcf, 0xac, 0xee, 0x7e, 0x17, 0xec, 0x7e, 0xef, 0x9f, 0xec, 0x7e, 0x69, 0x9b, - 0xac, 0xeb, 0xb6, 0xc9, 0x16, 0x8b, 0xd6, 0xb7, 0xc9, 0x91, 0xf1, 0x86, 0x6d, 0x6a, 0x8b, 0x0c, - 0xdc, 0x26, 0x77, 0xd7, 0xdc, 0xeb, 0x82, 0x6d, 0xea, 0x88, 0x98, 0xda, 0x26, 0x69, 0x38, 0x6a, - 0x30, 0x7c, 0xa3, 0xd1, 0xf0, 0x6e, 0xd9, 0x70, 0xe0, 0xe0, 0x05, 0xea, 0xe4, 0xbd, 0xf7, 0x35, - 0xfd, 0xd0, 0x7d, 0xd4, 0x9d, 0x92, 0x19, 0x65, 0x64, 0x3a, 0x89, 0x58, 0xb8, 0x12, 0x96, 0xb9, - 0xfe, 0x86, 0x8a, 0xbd, 0x66, 0xe1, 0x4a, 0x81, 0x9b, 0x0d, 0xed, 0x8e, 0x55, 0x6e, 0x77, 0x3e, - 0x47, 0xdd, 0x72, 0xeb, 0x8e, 0x31, 0xb2, 0xd2, 0x0b, 0x1a, 0xab, 0x47, 0x5a, 0xfc, 0xe6, 0xfe, - 0x24, 0xe4, 0xdd, 0x92, 0x26, 0x64, 0xaa, 0x56, 0xca, 0xc7, 0xbc, 0x5d, 0xea, 0x55, 0xda, 0x78, - 0xfd, 0xe0, 0xd1, 0x8c, 0x2c, 0x52, 0xd5, 0x13, 0xf0, 0x07, 0xef, 0x25, 0x1f, 0xeb, 0x07, 0x4f, - 0x26, 0x8d, 0xfc, 0xc1, 0x93, 0xc9, 0x6d, 0xe4, 0x2c, 0x19, 0x7d, 0xb7, 0x94, 0x47, 0x97, 0xeb, - 0xab, 0x11, 0x7e, 0x88, 0x6c, 0x59, 0x50, 0x7b, 0xe9, 0x2d, 0x5e, 0xd3, 0x7d, 0x29, 0x19, 0xfd, - 0xda, 0x42, 0xae, 0x7e, 0x49, 0xd0, 0x28, 0x71, 0x40, 0x93, 0x32, 0xca, 0x77, 0x7c, 0xac, 0x51, - 0x64, 0xb2, 0x40, 0xc9, 0x93, 0x2c, 0x9a, 0xa4, 0x71, 0x90, 0xa4, 0x9a, 0xc6, 0x65, 0xd1, 0xa9, - 0x18, 0xe3, 0x3d, 0x64, 0x5d, 0x90, 0xd5, 0x7a, 0x1c, 0xa1, 0xc0, 0xfb, 0xc8, 0x79, 0x1f, 0x84, - 0x4b, 0x75, 0xc8, 0x5c, 0xa7, 0x55, 0x9a, 0xd1, 0x2b, 0xe4, 0xea, 0xf7, 0x96, 0x8a, 0xe7, 0xad, - 0xaa, 0xe7, 0x6a, 0x6b, 0x8d, 0x86, 0xa3, 0xc3, 0x2c, 0x1d, 0x1d, 0xa3, 0x3f, 0x0c, 0xd4, 0xab, - 0xbc, 0xda, 0xac, 0x9d, 0xf4, 0x50, 0xff, 0xd1, 0xe4, 0x77, 0x8b, 0xbb, 0x07, 0xf2, 0x33, 0xc9, - 0x81, 0xfe, 0x4c, 0x52, 0xbc, 0x25, 0xa9, 0xff, 0xe0, 0x03, 0x71, 0xeb, 0x98, 0x37, 0xa9, 0xf9, - 0x85, 0xf4, 0x91, 0xbc, 0x90, 0xac, 0x9b, 0xb4, 0xe2, 0xae, 0x7a, 0x20, 0xee, 0x2a, 0xfb, 0xc6, - 0x79, 0xe7, 0x62, 0x5e, 0x7e, 0x8d, 0x39, 0x37, 0xce, 0x3b, 0x97, 0xf3, 0xaa, 0xdb, 0x6c, 0xfd, - 0xbc, 0x94, 0xe1, 0xc7, 0xb9, 0xa1, 0xee, 0x4d, 0x72, 0xe5, 0xf5, 0x9f, 0x06, 0xba, 0x55, 0x7d, - 0x1d, 0x5c, 0x6b, 0xf6, 0xe3, 0xaa, 0xd9, 0x3b, 0xb5, 0xf9, 0x8b, 0xb9, 0x94, 0xdb, 0x0f, 0x4b, - 0x6e, 0xaf, 0x93, 0x73, 0xbb, 0xf7, 0xcb, 0x76, 0xaf, 0x13, 0x0b, 0xbf, 0x1f, 0x96, 0xfc, 0x5e, - 0x3b, 0xf3, 0x5c, 0xcc, 0x5c, 0x18, 0xbe, 0x76, 0x66, 0xee, 0xf8, 0x16, 0x72, 0xc2, 0x6c, 0xc2, - 0xa2, 0x4b, 0x71, 0xaa, 0xba, 0xbe, 0x1d, 0x66, 0xdf, 0x46, 0x97, 0x3c, 0x3c, 0x97, 0x61, 0x57, - 0x86, 0xe7, 0x22, 0xfc, 0x31, 0x72, 0x2e, 0x69, 0xf6, 0x56, 0x9c, 0xac, 0x37, 0xec, 0xa7, 0x12, - 0x3e, 0xfb, 0x0c, 0xb9, 0x53, 0x9a, 0x06, 0x67, 0x21, 0x99, 0xe2, 0x7b, 0x35, 0xb9, 0x3a, 0xd7, - 0x5e, 0xc7, 0xbc, 0x26, 0xf5, 0x7e, 0xf9, 0xf0, 0x54, 0xee, 0x82, 0x2e, 0x79, 0xf6, 0x69, 0xb1, - 0x43, 0xf8, 0xbf, 0xb5, 0xf2, 0xd7, 0x8c, 0x44, 0xb3, 0x5a, 0xb1, 0x2e, 0x78, 0xf6, 0x35, 0xb2, - 0x13, 0xb1, 0xcf, 0xf5, 0x4a, 0xf1, 0x68, 0x57, 0x2b, 0xaf, 0x3d, 0xb5, 0xc4, 0x1c, 0x27, 0x07, - 0x3f, 0xec, 0xcf, 0x69, 0xf6, 0x76, 0x79, 0x76, 0x70, 0x1e, 0x2d, 0x0e, 0xc3, 0xd5, 0x2c, 0x93, - 0x9f, 0x27, 0xcf, 0x1f, 0xcd, 0x09, 0x7b, 0x54, 0xfb, 0x2a, 0xfa, 0x77, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xe1, 0xd8, 0xec, 0xea, 0x29, 0x15, 0x00, 0x00, + 0x8f, 0x1b, 0x34, 0xc6, 0x9b, 0xc8, 0xa2, 0xf1, 0xc5, 0x91, 0xe8, 0x09, 0x79, 0x4c, 0x8c, 0x54, + 0x74, 0x2c, 0x9a, 0x3f, 0x1d, 0x1d, 0x63, 0x8c, 0xcc, 0x65, 0x42, 0x45, 0x8f, 0xc7, 0x83, 0x7c, + 0x80, 0xef, 0xa2, 0xf6, 0x32, 0xa1, 0x93, 0x84, 0xcc, 0x44, 0x1b, 0xe7, 0x8a, 0x6f, 0x80, 0x84, + 0xfa, 0x64, 0x86, 0x77, 0x50, 0x3b, 0x98, 0x4e, 0x13, 0x92, 0xa6, 0xa2, 0xb5, 0xe2, 0x29, 0x1d, + 0x38, 0xee, 0x22, 0x74, 0x49, 0xc2, 0x70, 0x72, 0xce, 0xa2, 0x4b, 0x36, 0xfa, 0xcd, 0x40, 0xa8, + 0xe8, 0x41, 0xab, 0x4f, 0x46, 0x17, 0x3c, 0x19, 0xbd, 0xbf, 0xf3, 0x64, 0x94, 0xb6, 0xd0, 0xba, + 0x6e, 0x0b, 0x6d, 0xb1, 0x68, 0x7d, 0x0b, 0x1d, 0x19, 0x6f, 0xd8, 0xc2, 0xb6, 0xc8, 0xc0, 0x2d, + 0x74, 0x77, 0xcd, 0xbd, 0x2e, 0xd8, 0xc2, 0x8e, 0x88, 0xa9, 0x2d, 0x94, 0x9b, 0x81, 0x1a, 0x36, + 0x63, 0xa3, 0x71, 0x33, 0xba, 0xe5, 0xcd, 0x00, 0x0e, 0x9e, 0xa3, 0x4e, 0xde, 0x97, 0x5f, 0xd3, + 0x2b, 0xdd, 0x47, 0xdd, 0x29, 0x99, 0x51, 0x46, 0xa6, 0x93, 0x88, 0x85, 0x2b, 0x61, 0x99, 0xeb, + 0x6f, 0xa8, 0xd8, 0x1b, 0x16, 0xae, 0x14, 0xb8, 0xd9, 0xd0, 0x0a, 0x59, 0xe5, 0x56, 0xe8, 0x73, + 0xd4, 0x2d, 0xb7, 0xf5, 0x18, 0x23, 0x2b, 0x3d, 0xa7, 0xb1, 0x7a, 0xdd, 0xc5, 0x6f, 0xee, 0x4f, + 0x42, 0x3e, 0x2c, 0x69, 0x42, 0xa6, 0x6a, 0xa5, 0x7c, 0xcc, 0x5b, 0xa9, 0x5e, 0xa5, 0xc5, 0xd7, + 0x2f, 0x25, 0xcd, 0xc8, 0x22, 0x55, 0xfd, 0x02, 0x7f, 0x29, 0x5f, 0xf1, 0xb1, 0x7e, 0x29, 0x65, + 0xd2, 0xc8, 0x5f, 0x4a, 0x99, 0xdc, 0x46, 0xce, 0x92, 0xd1, 0x0f, 0x4b, 0x79, 0xac, 0xb9, 0xbe, + 0x1a, 0xe1, 0x87, 0xc8, 0x96, 0x05, 0xb5, 0x0f, 0xe2, 0xe2, 0x13, 0xde, 0x97, 0x92, 0xd1, 0xaf, + 0x2d, 0xe4, 0xea, 0x0f, 0x08, 0x8d, 0x12, 0x07, 0x34, 0x29, 0xa3, 0xbc, 0xe5, 0x63, 0x8d, 0x22, + 0x93, 0x05, 0x4a, 0x9e, 0x64, 0xd1, 0x24, 0x8d, 0x83, 0x24, 0xd5, 0x34, 0x2e, 0x8b, 0x4e, 0xc4, + 0x18, 0xef, 0x21, 0xeb, 0x9c, 0xac, 0xd6, 0xe3, 0x08, 0x05, 0x7e, 0x84, 0x9c, 0x8b, 0x20, 0x5c, + 0xaa, 0x03, 0xe8, 0x3a, 0xad, 0xd2, 0x8c, 0x5e, 0x23, 0x57, 0x7f, 0xd3, 0x54, 0x3c, 0x6f, 0x55, + 0x3d, 0x57, 0x5b, 0x6b, 0x34, 0x1c, 0x2b, 0x66, 0xe9, 0x58, 0x19, 0xfd, 0x61, 0xa0, 0x5e, 0xe5, + 0xb3, 0x67, 0xed, 0xa4, 0x07, 0xfa, 0x41, 0x93, 0xff, 0x69, 0xdc, 0xdd, 0x97, 0x7f, 0xa1, 0xec, + 0xeb, 0xbf, 0x50, 0x8a, 0x2f, 0x28, 0xf5, 0x0c, 0x3e, 0x10, 0x37, 0x92, 0x79, 0x93, 0x9a, 0x5f, + 0x56, 0xff, 0x93, 0x97, 0x95, 0x75, 0x93, 0x56, 0xdc, 0x63, 0x0f, 0xc4, 0x3d, 0x66, 0xdf, 0x38, + 0xef, 0x5c, 0xcc, 0xcb, 0xaf, 0x38, 0xe7, 0xc6, 0x79, 0xe7, 0x72, 0x5e, 0x75, 0xd3, 0xad, 0x9f, + 0x97, 0x32, 0xfc, 0x24, 0x37, 0xd4, 0xbd, 0x49, 0xae, 0xbc, 0xfe, 0xd3, 0x40, 0xb7, 0xaa, 0x9f, + 0x8a, 0x6b, 0xcd, 0x7e, 0x52, 0x35, 0x7b, 0xa7, 0x36, 0x7f, 0x31, 0x97, 0x72, 0xfb, 0x61, 0xc9, + 0xed, 0x75, 0x72, 0x6e, 0xf7, 0xa3, 0xb2, 0xdd, 0xeb, 0xc4, 0xc2, 0xef, 0x87, 0x25, 0xbf, 0xd7, + 0xce, 0x3c, 0x17, 0x33, 0x17, 0x86, 0xaf, 0x9d, 0x99, 0x3b, 0xbe, 0x85, 0x9c, 0x30, 0x9b, 0xb0, + 0xe8, 0x52, 0x9c, 0xaa, 0xae, 0x6f, 0x87, 0xd9, 0xb7, 0xd1, 0x25, 0x0f, 0xcf, 0x65, 0xd8, 0x95, + 0xe1, 0xb9, 0x08, 0xff, 0x1f, 0x39, 0x97, 0x34, 0x7b, 0x2f, 0x4e, 0xd6, 0x1b, 0xf6, 0x53, 0x09, + 0x9f, 0x7f, 0x86, 0xdc, 0x29, 0x4d, 0x83, 0xd3, 0x90, 0x4c, 0xf1, 0xbd, 0x9a, 0x5c, 0x9d, 0x6b, + 0x6f, 0x62, 0x5e, 0x93, 0x7a, 0x3f, 0x7f, 0x7c, 0x26, 0x77, 0x41, 0x97, 0x3c, 0xff, 0xb4, 0xd8, + 0x21, 0xfc, 0xef, 0x5a, 0xf9, 0x1b, 0x46, 0xa2, 0x59, 0xad, 0x58, 0x17, 0x3c, 0xff, 0x1a, 0xd9, + 0x89, 0xd8, 0xe7, 0x7a, 0xa5, 0x78, 0xb5, 0xab, 0x95, 0xd7, 0x9e, 0x5a, 0x62, 0x8e, 0xe3, 0xb7, + 0x68, 0x87, 0x46, 0xfb, 0x84, 0x5d, 0x44, 0xab, 0x38, 0x89, 0xae, 0x56, 0xfb, 0xf1, 0xfc, 0x22, + 0xd7, 0x7f, 0x7f, 0x38, 0xa7, 0xd9, 0xfb, 0xe5, 0xe9, 0xfe, 0x59, 0xb4, 0x38, 0x28, 0x34, 0xf2, + 0xcf, 0xcd, 0xb3, 0xc7, 0x73, 0xc2, 0x1e, 0xd7, 0xfe, 0x53, 0xfd, 0x2b, 0x00, 0x00, 0xff, 0xff, + 0xca, 0xcb, 0x15, 0xa8, 0x67, 0x15, 0x00, 0x00, } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.proto consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.proto --- consul-1.7.4+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/envoyproxy/protoc-gen-validate/validate/validate.proto 2020-12-10 21:46:52.000000000 +0000 @@ -1,8 +1,8 @@ syntax = "proto2"; package validate; -option go_package = "github.com/lyft/protoc-gen-validate/validate"; -option java_package = "com.lyft.pgv.validate"; +option go_package = "github.com/envoyproxy/protoc-gen-validate/validate"; +option java_package = "io.envoyproxy.pgv.validate"; import "google/protobuf/descriptor.proto"; import "google/protobuf/duration.proto"; @@ -540,6 +540,11 @@ // UriRef specifies that the field must be a valid URI as defined by RFC // 3986 and may be relative or absolute. bool uri_ref = 18; + + // Address specifies that the field must be either a valid hostname as + // defined by RFC 1034 (which does not support internationalized domain + // names or IDNs), or it can be a valid IP (v4 or v6). + bool address = 21; } } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/CONTRIBUTING.md consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/CONTRIBUTING.md --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/CONTRIBUTING.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +Contributions are welcome by pull request. + +You need to sign the Google Contributor License Agreement before your +contributions can be accepted. You can find the individual and organization +level CLAs here: + +Individual: https://cla.developers.google.com/about/google-individual +Organization: https://cla.developers.google.com/about/google-corporate diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/.gitignore consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/.gitignore --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/.gitignore 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +tlsrouter +tlsrouter.test diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/http.go consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/http.go --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/http.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/http.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,125 @@ +// Copyright 2017 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcpproxy + +import ( + "bufio" + "bytes" + "context" + "net/http" +) + +// AddHTTPHostRoute appends a route to the ipPort listener that +// routes to dest if the incoming HTTP/1.x Host header name is +// httpHost. If it doesn't match, rule processing continues for any +// additional routes on ipPort. +// +// The ipPort is any valid net.Listen TCP address. +func (p *Proxy) AddHTTPHostRoute(ipPort, httpHost string, dest Target) { + p.AddHTTPHostMatchRoute(ipPort, equals(httpHost), dest) +} + +// AddHTTPHostMatchRoute appends a route to the ipPort listener that +// routes to dest if the incoming HTTP/1.x Host header name is +// accepted by matcher. If it doesn't match, rule processing continues +// for any additional routes on ipPort. +// +// The ipPort is any valid net.Listen TCP address. +func (p *Proxy) AddHTTPHostMatchRoute(ipPort string, match Matcher, dest Target) { + p.addRoute(ipPort, httpHostMatch{match, dest}) +} + +type httpHostMatch struct { + matcher Matcher + target Target +} + +func (m httpHostMatch) match(br *bufio.Reader) (Target, string) { + hh := httpHostHeader(br) + if m.matcher(context.TODO(), hh) { + return m.target, hh + } + return nil, "" +} + +// httpHostHeader returns the HTTP Host header from br without +// consuming any of its bytes. It returns "" if it can't find one. +func httpHostHeader(br *bufio.Reader) string { + const maxPeek = 4 << 10 + peekSize := 0 + for { + peekSize++ + if peekSize > maxPeek { + b, _ := br.Peek(br.Buffered()) + return httpHostHeaderFromBytes(b) + } + b, err := br.Peek(peekSize) + if n := br.Buffered(); n > peekSize { + b, _ = br.Peek(n) + peekSize = n + } + if len(b) > 0 { + if b[0] < 'A' || b[0] > 'Z' { + // Doesn't look like an HTTP verb + // (GET, POST, etc). + return "" + } + if bytes.Index(b, crlfcrlf) != -1 || bytes.Index(b, lflf) != -1 { + req, err := http.ReadRequest(bufio.NewReader(bytes.NewReader(b))) + if err != nil { + return "" + } + if len(req.Header["Host"]) > 1 { + // TODO(bradfitz): what does + // ReadRequest do if there are + // multiple Host headers? + return "" + } + return req.Host + } + } + if err != nil { + return httpHostHeaderFromBytes(b) + } + } +} + +var ( + lfHostColon = []byte("\nHost:") + lfhostColon = []byte("\nhost:") + crlf = []byte("\r\n") + lf = []byte("\n") + crlfcrlf = []byte("\r\n\r\n") + lflf = []byte("\n\n") +) + +func httpHostHeaderFromBytes(b []byte) string { + if i := bytes.Index(b, lfHostColon); i != -1 { + return string(bytes.TrimSpace(untilEOL(b[i+len(lfHostColon):]))) + } + if i := bytes.Index(b, lfhostColon); i != -1 { + return string(bytes.TrimSpace(untilEOL(b[i+len(lfhostColon):]))) + } + return "" +} + +// untilEOL returns v, truncated before the first '\n' byte, if any. +// The returned slice may include a '\r' at the end. +func untilEOL(v []byte) []byte { + if i := bytes.IndexByte(v, '\n'); i != -1 { + return v[:i] + } + return v +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/LICENSE consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/LICENSE --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/LICENSE 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/listener.go consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/listener.go --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/listener.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/listener.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,108 @@ +// Copyright 2017 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcpproxy + +import ( + "io" + "net" + "sync" +) + +// TargetListener implements both net.Listener and Target. +// Matched Targets become accepted connections. +type TargetListener struct { + Address string // Address is the string reported by TargetListener.Addr().String(). + + mu sync.Mutex + cond *sync.Cond + closed bool + nextConn net.Conn +} + +var ( + _ net.Listener = (*TargetListener)(nil) + _ Target = (*TargetListener)(nil) +) + +func (tl *TargetListener) lock() { + tl.mu.Lock() + if tl.cond == nil { + tl.cond = sync.NewCond(&tl.mu) + } +} + +type tcpAddr string + +func (a tcpAddr) Network() string { return "tcp" } +func (a tcpAddr) String() string { return string(a) } + +// Addr returns the listener's Address field as a net.Addr. +func (tl *TargetListener) Addr() net.Addr { return tcpAddr(tl.Address) } + +// Close stops listening for new connections. All new connections +// routed to this listener will be closed. Already accepted +// connections are not closed. +func (tl *TargetListener) Close() error { + tl.lock() + if tl.closed { + tl.mu.Unlock() + return nil + } + tl.closed = true + tl.mu.Unlock() + tl.cond.Broadcast() + return nil +} + +// HandleConn implements the Target interface. It blocks until tl is +// closed or another goroutine has called Accept and received c. +func (tl *TargetListener) HandleConn(c net.Conn) { + tl.lock() + defer tl.mu.Unlock() + for tl.nextConn != nil && !tl.closed { + tl.cond.Wait() + } + if tl.closed { + c.Close() + return + } + tl.nextConn = c + tl.cond.Broadcast() // Signal might be sufficient; verify. + for tl.nextConn == c && !tl.closed { + tl.cond.Wait() + } + if tl.closed { + c.Close() + return + } +} + +// Accept implements the Accept method in the net.Listener interface. +func (tl *TargetListener) Accept() (net.Conn, error) { + tl.lock() + for tl.nextConn == nil && !tl.closed { + tl.cond.Wait() + } + if tl.closed { + tl.mu.Unlock() + return nil, io.EOF + } + c := tl.nextConn + tl.nextConn = nil + tl.mu.Unlock() + tl.cond.Broadcast() // Signal might be sufficient; verify. + + return c, nil +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/README.md consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/README.md --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/README.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +# tcpproxy + +For library usage, see https://godoc.org/github.com/google/tcpproxy/ + +For CLI usage, see https://github.com/google/tcpproxy/blob/master/cmd/tlsrouter/README.md diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/sni.go consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/sni.go --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/sni.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/sni.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,192 @@ +// Copyright 2017 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tcpproxy + +import ( + "bufio" + "bytes" + "context" + "crypto/tls" + "io" + "net" + "strings" +) + +// AddSNIRoute appends a route to the ipPort listener that routes to +// dest if the incoming TLS SNI server name is sni. If it doesn't +// match, rule processing continues for any additional routes on +// ipPort. +// +// By default, the proxy will route all ACME tls-sni-01 challenges +// received on ipPort to all SNI dests. You can disable ACME routing +// with AddStopACMESearch. +// +// The ipPort is any valid net.Listen TCP address. +func (p *Proxy) AddSNIRoute(ipPort, sni string, dest Target) { + p.AddSNIMatchRoute(ipPort, equals(sni), dest) +} + +// AddSNIMatchRoute appends a route to the ipPort listener that routes +// to dest if the incoming TLS SNI server name is accepted by +// matcher. If it doesn't match, rule processing continues for any +// additional routes on ipPort. +// +// By default, the proxy will route all ACME tls-sni-01 challenges +// received on ipPort to all SNI dests. You can disable ACME routing +// with AddStopACMESearch. +// +// The ipPort is any valid net.Listen TCP address. +func (p *Proxy) AddSNIMatchRoute(ipPort string, matcher Matcher, dest Target) { + cfg := p.configFor(ipPort) + if !cfg.stopACME { + if len(cfg.acmeTargets) == 0 { + p.addRoute(ipPort, &acmeMatch{cfg}) + } + cfg.acmeTargets = append(cfg.acmeTargets, dest) + } + + p.addRoute(ipPort, sniMatch{matcher, dest}) +} + +// AddStopACMESearch prevents ACME probing of subsequent SNI routes. +// Any ACME challenges on ipPort for SNI routes previously added +// before this call will still be proxied to all possible SNI +// backends. +func (p *Proxy) AddStopACMESearch(ipPort string) { + p.configFor(ipPort).stopACME = true +} + +type sniMatch struct { + matcher Matcher + target Target +} + +func (m sniMatch) match(br *bufio.Reader) (Target, string) { + sni := clientHelloServerName(br) + if m.matcher(context.TODO(), sni) { + return m.target, sni + } + return nil, "" +} + +// acmeMatch matches "*.acme.invalid" ACME tls-sni-01 challenges and +// searches for a Target in cfg.acmeTargets that has the challenge +// response. +type acmeMatch struct { + cfg *config +} + +func (m *acmeMatch) match(br *bufio.Reader) (Target, string) { + sni := clientHelloServerName(br) + if !strings.HasSuffix(sni, ".acme.invalid") { + return nil, "" + } + + // TODO: cache. ACME issuers will hit multiple times in a short + // burst for each issuance event. A short TTL cache + singleflight + // should have an excellent hit rate. + // TODO: maybe an acme-specific timeout as well? + // TODO: plumb context upwards? + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + ch := make(chan Target, len(m.cfg.acmeTargets)) + for _, target := range m.cfg.acmeTargets { + go tryACME(ctx, ch, target, sni) + } + for range m.cfg.acmeTargets { + if target := <-ch; target != nil { + return target, sni + } + } + + // No target was happy with the provided challenge. + return nil, "" +} + +func tryACME(ctx context.Context, ch chan<- Target, dest Target, sni string) { + var ret Target + defer func() { ch <- ret }() + + conn, targetConn := net.Pipe() + defer conn.Close() + go dest.HandleConn(targetConn) + + deadline, ok := ctx.Deadline() + if ok { + conn.SetDeadline(deadline) + } + + client := tls.Client(conn, &tls.Config{ + ServerName: sni, + InsecureSkipVerify: true, + }) + if err := client.Handshake(); err != nil { + // TODO: log? + return + } + certs := client.ConnectionState().PeerCertificates + if len(certs) == 0 { + // TODO: log? + return + } + // acme says the first cert offered by the server must match the + // challenge hostname. + if err := certs[0].VerifyHostname(sni); err != nil { + // TODO: log? + return + } + + // Target presented what looks like a valid challenge + // response, send it back to the matcher. + ret = dest +} + +// clientHelloServerName returns the SNI server name inside the TLS ClientHello, +// without consuming any bytes from br. +// On any error, the empty string is returned. +func clientHelloServerName(br *bufio.Reader) (sni string) { + const recordHeaderLen = 5 + hdr, err := br.Peek(recordHeaderLen) + if err != nil { + return "" + } + const recordTypeHandshake = 0x16 + if hdr[0] != recordTypeHandshake { + return "" // Not TLS. + } + recLen := int(hdr[3])<<8 | int(hdr[4]) // ignoring version in hdr[1:3] + helloBytes, err := br.Peek(recordHeaderLen + recLen) + if err != nil { + return "" + } + tls.Server(sniSniffConn{r: bytes.NewReader(helloBytes)}, &tls.Config{ + GetConfigForClient: func(hello *tls.ClientHelloInfo) (*tls.Config, error) { + sni = hello.ServerName + return nil, nil + }, + }).Handshake() + return +} + +// sniSniffConn is a net.Conn that reads from r, fails on Writes, +// and crashes otherwise. +type sniSniffConn struct { + r io.Reader + net.Conn // nil; crash on any unexpected use +} + +func (c sniSniffConn) Read(p []byte) (int, error) { return c.r.Read(p) } +func (sniSniffConn) Write(p []byte) (int, error) { return 0, io.EOF } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/tcpproxy.go consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/tcpproxy.go --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/tcpproxy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/tcpproxy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,474 @@ +// Copyright 2017 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package tcpproxy lets users build TCP proxies, optionally making +// routing decisions based on HTTP/1 Host headers and the SNI hostname +// in TLS connections. +// +// Typical usage: +// +// var p tcpproxy.Proxy +// p.AddHTTPHostRoute(":80", "foo.com", tcpproxy.To("10.0.0.1:8081")) +// p.AddHTTPHostRoute(":80", "bar.com", tcpproxy.To("10.0.0.2:8082")) +// p.AddRoute(":80", tcpproxy.To("10.0.0.1:8081")) // fallback +// p.AddSNIRoute(":443", "foo.com", tcpproxy.To("10.0.0.1:4431")) +// p.AddSNIRoute(":443", "bar.com", tcpproxy.To("10.0.0.2:4432")) +// p.AddRoute(":443", tcpproxy.To("10.0.0.1:4431")) // fallback +// log.Fatal(p.Run()) +// +// Calling Run (or Start) on a proxy also starts all the necessary +// listeners. +// +// For each accepted connection, the rules for that ipPort are +// matched, in order. If one matches (currently HTTP Host, SNI, or +// always), then the connection is handed to the target. +// +// The two predefined Target implementations are: +// +// 1) DialProxy, proxying to another address (use the To func to return a +// DialProxy value), +// +// 2) TargetListener, making the matched connection available via a +// net.Listener.Accept call. +// +// But Target is an interface, so you can also write your own. +// +// Note that tcpproxy does not do any TLS encryption or decryption. It +// only (via DialProxy) copies bytes around. The SNI hostname in the TLS +// header is unencrypted, for better or worse. +// +// This package makes no API stability promises. If you depend on it, +// vendor it. +package tcpproxy + +import ( + "bufio" + "context" + "errors" + "fmt" + "io" + "log" + "net" + "time" +) + +// Proxy is a proxy. Its zero value is a valid proxy that does +// nothing. Call methods to add routes before calling Start or Run. +// +// The order that routes are added in matters; each is matched in the order +// registered. +type Proxy struct { + configs map[string]*config // ip:port => config + + lns []net.Listener + donec chan struct{} // closed before err + err error // any error from listening + + // ListenFunc optionally specifies an alternate listen + // function. If nil, net.Dial is used. + // The provided net is always "tcp". + ListenFunc func(net, laddr string) (net.Listener, error) +} + +// Matcher reports whether hostname matches the Matcher's criteria. +type Matcher func(ctx context.Context, hostname string) bool + +// equals is a trivial Matcher that implements string equality. +func equals(want string) Matcher { + return func(_ context.Context, got string) bool { + return want == got + } +} + +// config contains the proxying state for one listener. +type config struct { + routes []route + acmeTargets []Target // accumulates targets that should be probed for acme. + stopACME bool // if true, AddSNIRoute doesn't add targets to acmeTargets. +} + +// A route matches a connection to a target. +type route interface { + // match examines the initial bytes of a connection, looking for a + // match. If a match is found, match returns a non-nil Target to + // which the stream should be proxied. match returns nil if the + // connection doesn't match. + // + // match must not consume bytes from the given bufio.Reader, it + // can only Peek. + // + // If an sni or host header was parsed successfully, that will be + // returned as the second parameter. + match(*bufio.Reader) (Target, string) +} + +func (p *Proxy) netListen() func(net, laddr string) (net.Listener, error) { + if p.ListenFunc != nil { + return p.ListenFunc + } + return net.Listen +} + +func (p *Proxy) configFor(ipPort string) *config { + if p.configs == nil { + p.configs = make(map[string]*config) + } + if p.configs[ipPort] == nil { + p.configs[ipPort] = &config{} + } + return p.configs[ipPort] +} + +func (p *Proxy) addRoute(ipPort string, r route) { + cfg := p.configFor(ipPort) + cfg.routes = append(cfg.routes, r) +} + +// AddRoute appends an always-matching route to the ipPort listener, +// directing any connection to dest. +// +// This is generally used as either the only rule (for simple TCP +// proxies), or as the final fallback rule for an ipPort. +// +// The ipPort is any valid net.Listen TCP address. +func (p *Proxy) AddRoute(ipPort string, dest Target) { + p.addRoute(ipPort, fixedTarget{dest}) +} + +type fixedTarget struct { + t Target +} + +func (m fixedTarget) match(*bufio.Reader) (Target, string) { return m.t, "" } + +// Run is calls Start, and then Wait. +// +// It blocks until there's an error. The return value is always +// non-nil. +func (p *Proxy) Run() error { + if err := p.Start(); err != nil { + return err + } + return p.Wait() +} + +// Wait waits for the Proxy to finish running. Currently this can only +// happen if a Listener is closed, or Close is called on the proxy. +// +// It is only valid to call Wait after a successful call to Start. +func (p *Proxy) Wait() error { + <-p.donec + return p.err +} + +// Close closes all the proxy's self-opened listeners. +func (p *Proxy) Close() error { + for _, c := range p.lns { + c.Close() + } + return nil +} + +// Start creates a TCP listener for each unique ipPort from the +// previously created routes and starts the proxy. It returns any +// error from starting listeners. +// +// If it returns a non-nil error, any successfully opened listeners +// are closed. +func (p *Proxy) Start() error { + if p.donec != nil { + return errors.New("already started") + } + p.donec = make(chan struct{}) + errc := make(chan error, len(p.configs)) + p.lns = make([]net.Listener, 0, len(p.configs)) + for ipPort, config := range p.configs { + ln, err := p.netListen()("tcp", ipPort) + if err != nil { + p.Close() + return err + } + p.lns = append(p.lns, ln) + go p.serveListener(errc, ln, config.routes) + } + go p.awaitFirstError(errc) + return nil +} + +func (p *Proxy) awaitFirstError(errc <-chan error) { + p.err = <-errc + close(p.donec) +} + +func (p *Proxy) serveListener(ret chan<- error, ln net.Listener, routes []route) { + for { + c, err := ln.Accept() + if err != nil { + ret <- err + return + } + go p.serveConn(c, routes) + } +} + +// serveConn runs in its own goroutine and matches c against routes. +// It returns whether it matched purely for testing. +func (p *Proxy) serveConn(c net.Conn, routes []route) bool { + br := bufio.NewReader(c) + for _, route := range routes { + if target, hostName := route.match(br); target != nil { + if n := br.Buffered(); n > 0 { + peeked, _ := br.Peek(br.Buffered()) + c = &Conn{ + HostName: hostName, + Peeked: peeked, + Conn: c, + } + } + target.HandleConn(c) + return true + } + } + // TODO: hook for this? + log.Printf("tcpproxy: no routes matched conn %v/%v; closing", c.RemoteAddr().String(), c.LocalAddr().String()) + c.Close() + return false +} + +// Conn is an incoming connection that has had some bytes read from it +// to determine how to route the connection. The Read method stitches +// the peeked bytes and unread bytes back together. +type Conn struct { + // HostName is the hostname field that was sent to the request router. + // In the case of TLS, this is the SNI header, in the case of HTTPHost + // route, it will be the host header. In the case of a fixed + // route, i.e. those created with AddRoute(), this will always be + // empty. This can be useful in the case where further routing decisions + // need to be made in the Target impementation. + HostName string + + // Peeked are the bytes that have been read from Conn for the + // purposes of route matching, but have not yet been consumed + // by Read calls. It set to nil by Read when fully consumed. + Peeked []byte + + // Conn is the underlying connection. + // It can be type asserted against *net.TCPConn or other types + // as needed. It should not be read from directly unless + // Peeked is nil. + net.Conn +} + +func (c *Conn) Read(p []byte) (n int, err error) { + if len(c.Peeked) > 0 { + n = copy(p, c.Peeked) + c.Peeked = c.Peeked[n:] + if len(c.Peeked) == 0 { + c.Peeked = nil + } + return n, nil + } + return c.Conn.Read(p) +} + +// Target is what an incoming matched connection is sent to. +type Target interface { + // HandleConn is called when an incoming connection is + // matched. After the call to HandleConn, the tcpproxy + // package never touches the conn again. Implementations are + // responsible for closing the connection when needed. + // + // The concrete type of conn will be of type *Conn if any + // bytes have been consumed for the purposes of route + // matching. + HandleConn(net.Conn) +} + +// To is shorthand way of writing &tlsproxy.DialProxy{Addr: addr}. +func To(addr string) *DialProxy { + return &DialProxy{Addr: addr} +} + +// DialProxy implements Target by dialing a new connection to Addr +// and then proxying data back and forth. +// +// The To func is a shorthand way of creating a DialProxy. +type DialProxy struct { + // Addr is the TCP address to proxy to. + Addr string + + // KeepAlivePeriod sets the period between TCP keep alives. + // If zero, a default is used. To disable, use a negative number. + // The keep-alive is used for both the client connection and + KeepAlivePeriod time.Duration + + // DialTimeout optionally specifies a dial timeout. + // If zero, a default is used. + // If negative, the timeout is disabled. + DialTimeout time.Duration + + // DialContext optionally specifies an alternate dial function + // for TCP targets. If nil, the standard + // net.Dialer.DialContext method is used. + DialContext func(ctx context.Context, network, address string) (net.Conn, error) + + // OnDialError optionally specifies an alternate way to handle errors dialing Addr. + // If nil, the error is logged and src is closed. + // If non-nil, src is not closed automatically. + OnDialError func(src net.Conn, dstDialErr error) + + // ProxyProtocolVersion optionally specifies the version of + // HAProxy's PROXY protocol to use. The PROXY protocol provides + // connection metadata to the DialProxy target, via a header + // inserted ahead of the client's traffic. The DialProxy target + // must explicitly support and expect the PROXY header; there is + // no graceful downgrade. + // If zero, no PROXY header is sent. Currently, version 1 is supported. + ProxyProtocolVersion int +} + +// UnderlyingConn returns c.Conn if c of type *Conn, +// otherwise it returns c. +func UnderlyingConn(c net.Conn) net.Conn { + if wrap, ok := c.(*Conn); ok { + return wrap.Conn + } + return c +} + +func goCloseConn(c net.Conn) { go c.Close() } + +// HandleConn implements the Target interface. +func (dp *DialProxy) HandleConn(src net.Conn) { + ctx := context.Background() + var cancel context.CancelFunc + if dp.DialTimeout >= 0 { + ctx, cancel = context.WithTimeout(ctx, dp.dialTimeout()) + } + dst, err := dp.dialContext()(ctx, "tcp", dp.Addr) + if cancel != nil { + cancel() + } + if err != nil { + dp.onDialError()(src, err) + return + } + defer goCloseConn(dst) + + if err = dp.sendProxyHeader(dst, src); err != nil { + dp.onDialError()(src, err) + return + } + defer goCloseConn(src) + + if ka := dp.keepAlivePeriod(); ka > 0 { + if c, ok := UnderlyingConn(src).(*net.TCPConn); ok { + c.SetKeepAlive(true) + c.SetKeepAlivePeriod(ka) + } + if c, ok := dst.(*net.TCPConn); ok { + c.SetKeepAlive(true) + c.SetKeepAlivePeriod(ka) + } + } + + errc := make(chan error, 1) + go proxyCopy(errc, src, dst) + go proxyCopy(errc, dst, src) + <-errc +} + +func (dp *DialProxy) sendProxyHeader(w io.Writer, src net.Conn) error { + switch dp.ProxyProtocolVersion { + case 0: + return nil + case 1: + var srcAddr, dstAddr *net.TCPAddr + if a, ok := src.RemoteAddr().(*net.TCPAddr); ok { + srcAddr = a + } + if a, ok := src.LocalAddr().(*net.TCPAddr); ok { + dstAddr = a + } + + if srcAddr == nil || dstAddr == nil { + _, err := io.WriteString(w, "PROXY UNKNOWN\r\n") + return err + } + + family := "TCP4" + if srcAddr.IP.To4() == nil { + family = "TCP6" + } + _, err := fmt.Fprintf(w, "PROXY %s %s %d %s %d\r\n", family, srcAddr.IP, srcAddr.Port, dstAddr.IP, dstAddr.Port) + return err + default: + return fmt.Errorf("PROXY protocol version %d not supported", dp.ProxyProtocolVersion) + } +} + +// proxyCopy is the function that copies bytes around. +// It's a named function instead of a func literal so users get +// named goroutines in debug goroutine stack dumps. +func proxyCopy(errc chan<- error, dst, src net.Conn) { + // Before we unwrap src and/or dst, copy any buffered data. + if wc, ok := src.(*Conn); ok && len(wc.Peeked) > 0 { + if _, err := dst.Write(wc.Peeked); err != nil { + errc <- err + return + } + wc.Peeked = nil + } + + // Unwrap the src and dst from *Conn to *net.TCPConn so Go + // 1.11's splice optimization kicks in. + src = UnderlyingConn(src) + dst = UnderlyingConn(dst) + + _, err := io.Copy(dst, src) + errc <- err +} + +func (dp *DialProxy) keepAlivePeriod() time.Duration { + if dp.KeepAlivePeriod != 0 { + return dp.KeepAlivePeriod + } + return time.Minute +} + +func (dp *DialProxy) dialTimeout() time.Duration { + if dp.DialTimeout > 0 { + return dp.DialTimeout + } + return 10 * time.Second +} + +var defaultDialer = new(net.Dialer) + +func (dp *DialProxy) dialContext() func(ctx context.Context, network, address string) (net.Conn, error) { + if dp.DialContext != nil { + return dp.DialContext + } + return defaultDialer.DialContext +} + +func (dp *DialProxy) onDialError() func(src net.Conn, dstDialErr error) { + if dp.OnDialError != nil { + return dp.OnDialError + } + return func(src net.Conn, dstDialErr error) { + log.Printf("tcpproxy: for incoming conn %v, error dialing %q: %v", src.RemoteAddr().String(), dp.Addr, dstDialErr) + src.Close() + } +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/.travis.yml consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/.travis.yml --- consul-1.7.4+dfsg1/vendor/github.com/google/tcpproxy/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/google/tcpproxy/.travis.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,49 @@ +language: go +go: +- 1.8 +- tip +os: +- linux +install: +- go get github.com/golang/lint/golint +before_script: +script: +- go get -t ./... +- go build ./... +- go test ./... +- go vet ./... +- golint -set_exit_status . + +jobs: + include: + - stage: deploy + go: 1.8 + install: + - gem install fpm + script: + - go build ./cmd/tlsrouter + - fpm -s dir -t deb -n tlsrouter -v $(date '+%Y%m%d%H%M%S') + --license Apache2 + --vendor "David Anderson " + --maintainer "David Anderson " + --description "TLS SNI router" + --url "https://github.com/google/tlsrouter" + ./tlsrouter=/usr/bin/tlsrouter + ./systemd/tlsrouter.service=/lib/systemd/system/tlsrouter.service + deploy: + - provider: packagecloud + repository: tlsrouter + username: danderson + dist: debian/stretch + skip_cleanup: true + on: + branch: master + token: + secure: gNU3o70EU4oYeIS6pr0K5oLMGqqxrcf41EOv6c/YoHPVdV6Cx4j9NW0/ISgu6a1/Xf2NgWKT5BWwLpAuhmGdALuOz1Ah//YBWd9N8mGHGaC6RpOPDU8/9NkQdBEmjEH9sgX4PNOh1KQ7d7O0OH0g8RqJlJa0MkUYbTtN6KJ29oiUXxKmZM4D/iWB8VonKOnrtx1NwQL8jL8imZyEV/1fknhDwumz2iKeU1le4Neq9zkxwICMLUonmgphlrp+SDb1EOoHxT6cn51bqBQtQUplfC4dN4OQU/CPqE9E1N1noibvN29YA93qfcrjD3I95KT9wzq+3B6he33+kb0Gz+Cj5ypGy4P85l7TuX4CtQg0U3NAlJCk32IfsdjK+o47pdmADij9IIb9yKt+g99FMERkJJY5EInqEsxHlW/vNF5OqQCmpiHstZL4R2XaHEsWh6j77npnjjC1Aea8xZTWr8PTsbSzVkbG7bTmFpZoPH8eEmr4GNuw5gnbi6D1AJDjcA+UdY9s5qZNpzuWOqfhOFxL+zUW+8sHBvcoFw3R+pwHECs2LCL1c0xAC1LtNUnmW/gnwHavtvKkzErjR1P8Xl7obCbeChJjp+b/BcFYlNACldZcuzBAPyPwIdlWVyUonL4bm63upfMEEShiAIDDJ21y7fjsQK7CfPA7g25bpyo+hV8= + - provider: script + on: + branch: master + script: go run scripts/prune_old_versions.go -user=danderson -repo=tlsrouter -distro=debian -version=stretch -package=tlsrouter -arch=amd64 -limit=2 + env: + # Packagecloud API key, for prune_old_versions.go + - secure: "SRcNwt+45QyPS1w9aGxMg9905Y6d9w4mBM29G6iTTnUB5nD7cAk4m+tf834knGSobVXlWcRnTDW8zrHdQ9yX22dPqCpH5qE+qzTmIvxRHrVJRMmPeYvligJ/9jYfHgQbvuRT8cUpIcpCQAla6rw8nXfKTOE3h8XqMP2hdc3DTVOu2HCfKCNco1tJ7is+AIAnFV2Wpsbb3ZsdKFvHvi2RKUfFaX61J1GNt2/XJIlZs8jC6Y1IAC+ftjql9UsAE/WjZ9fL0Ww1b9/LBIIGHXWI3HpVv9WvlhhIxIlJgOVjmU2lbSuj2w/EBDJ9cd1Qe+wJkT3yKzE1NRsNScVjGg+Ku5igJu/XXuaHkIX01+15BqgPduBYRL0atiNQDhqgBiSyVhXZBX9vsgsp0bgpKaBSF++CV18Q9dara8aljqqS33M3imO3I8JmXU10944QA9Wvu7pCYuIzXxhINcDXRvqxBqz5LnFJGwnGqngTrOCSVS2xn7Y+sjmhe1n5cPCEISlozfa9mPYPvMPp8zg3TbATOOM8CVfcpaNscLqa/+SExN3zMwSanjNKrBgoaQcBzGW5mIgSPxhXkWikBgapiEN7+2Y032Lhqdb9dYjH+EuwcnofspDjjMabWxnuJaln+E3/9vZi2ooQrBEtvymUTy4VMSnqwIX5bU7nPdIuQycdWhk=" diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/auth_token.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/auth_token.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/auth_token.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/auth_token.go 2020-12-10 21:46:52.000000000 +0000 @@ -115,6 +115,26 @@ return ParseSecret(resp.Body) } +func (c *TokenAuth) RenewAccessor(accessor string, increment int) (*Secret, error) { + r := c.c.NewRequest("POST", "/v1/auth/token/renew-accessor") + if err := r.SetJSONBody(map[string]interface{}{ + "accessor": accessor, + "increment": increment, + }); err != nil { + return nil, err + } + + ctx, cancelFunc := context.WithCancel(context.Background()) + defer cancelFunc() + resp, err := c.c.RawRequestWithContext(ctx, r) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + return ParseSecret(resp.Body) +} + func (c *TokenAuth) Renew(token string, increment int) (*Secret, error) { r := c.c.NewRequest("PUT", "/v1/auth/token/renew") if err := r.SetJSONBody(map[string]interface{}{ diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/client.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/client.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/client.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,6 +32,7 @@ const EnvVaultClientCert = "VAULT_CLIENT_CERT" const EnvVaultClientKey = "VAULT_CLIENT_KEY" const EnvVaultClientTimeout = "VAULT_CLIENT_TIMEOUT" +const EnvVaultSRVLookup = "VAULT_SRV_LOOKUP" const EnvVaultSkipVerify = "VAULT_SKIP_VERIFY" const EnvVaultNamespace = "VAULT_NAMESPACE" const EnvVaultTLSServerName = "VAULT_TLS_SERVER_NAME" @@ -49,7 +50,8 @@ // returns an optional string duration to be used for response wrapping (e.g. // "15s", or simply "15"). The path will not begin with "/v1/" or "v1/" or "/", // however, end-of-path forward slashes are not trimmed, so must match your -// called path precisely. +// called path precisely. Response wrapping will only be used when the return +// value is not the empty string. type WrappingLookupFunc func(operation, path string) string // Config is used to configure the creation of the client. @@ -88,6 +90,9 @@ // The Backoff function to use; a default is used if not provided Backoff retryablehttp.Backoff + // The CheckRetry function to use; a default is used if not provided + CheckRetry retryablehttp.CheckRetry + // Limiter is the rate limiter used by the client. // If this pointer is nil, then there will be no limit set. // In contrast, if this pointer is set, even to an empty struct, @@ -102,6 +107,9 @@ // Note: It is not thread-safe to set this and make concurrent requests // with the same client. Cloning a client will not clone this value. OutputCurlString bool + + // SRVLookup enables the client to lookup the host through DNS SRV lookup + SRVLookup bool } // TLSConfig contains the parameters needed to configure TLS on the HTTP client @@ -140,8 +148,8 @@ config := &Config{ Address: "https://127.0.0.1:8200", HttpClient: cleanhttp.DefaultPooledClient(), + Timeout: time.Second * 60, } - config.HttpClient.Timeout = time.Second * 60 transport := config.HttpClient.Transport.(*http.Transport) transport.TLSHandshakeTimeout = 10 * time.Second @@ -242,6 +250,7 @@ var envInsecure bool var envTLSServerName string var envMaxRetries *uint64 + var envSRVLookup bool var limit *rate.Limiter // Parse the environment variables @@ -299,6 +308,13 @@ return fmt.Errorf("could not parse VAULT_INSECURE") } } + if v := os.Getenv(EnvVaultSRVLookup); v != "" { + var err error + envSRVLookup, err = strconv.ParseBool(v) + if err != nil { + return fmt.Errorf("could not parse %s", EnvVaultSRVLookup) + } + } if v := os.Getenv(EnvVaultTLSServerName); v != "" { envTLSServerName = v @@ -317,6 +333,7 @@ c.modifyLock.Lock() defer c.modifyLock.Unlock() + c.SRVLookup = envSRVLookup c.Limiter = limit if err := c.ConfigureTLS(t); err != nil { @@ -427,10 +444,14 @@ } client := &Client{ - addr: u, - config: c, + addr: u, + config: c, + headers: make(http.Header), } + // Add the VaultRequest SSRF protection header + client.headers[consts.RequestHeaderName] = []string{"true"} + if token := os.Getenv(EnvVaultToken); token != "" { client.token = token } @@ -488,6 +509,16 @@ c.config.MaxRetries = retries } +// SetCheckRetry sets the CheckRetry function to be used for future requests. +func (c *Client) SetCheckRetry(checkRetry retryablehttp.CheckRetry) { + c.modifyLock.RLock() + c.config.modifyLock.Lock() + defer c.config.modifyLock.Unlock() + c.modifyLock.RUnlock() + + c.config.CheckRetry = checkRetry +} + // SetClientTimeout sets the client request timeout func (c *Client) SetClientTimeout(timeout time.Duration) { c.modifyLock.RLock() @@ -517,7 +548,7 @@ } // CurrentWrappingLookupFunc sets a lookup function that returns desired wrap TTLs -// for a given operation and path +// for a given operation and path. func (c *Client) CurrentWrappingLookupFunc() WrappingLookupFunc { c.modifyLock.RLock() defer c.modifyLock.RUnlock() @@ -526,7 +557,7 @@ } // SetWrappingLookupFunc sets a lookup function that returns desired wrap TTLs -// for a given operation and path +// for a given operation and path. func (c *Client) SetWrappingLookupFunc(lookupFunc WrappingLookupFunc) { c.modifyLock.Lock() defer c.modifyLock.Unlock() @@ -586,7 +617,7 @@ } // Headers gets the current set of headers used for requests. This returns a -// copy; to modify it make modifications locally and use SetHeaders. +// copy; to modify it call AddHeader or SetHeaders. func (c *Client) Headers() http.Header { c.modifyLock.RLock() defer c.modifyLock.RUnlock() @@ -605,11 +636,19 @@ return ret } -// SetHeaders sets the headers to be used for future requests. -func (c *Client) SetHeaders(headers http.Header) { +// AddHeader allows a single header key/value pair to be added +// in a race-safe fashion. +func (c *Client) AddHeader(key, value string) { c.modifyLock.Lock() defer c.modifyLock.Unlock() + c.headers.Add(key, value) +} +// SetHeaders clears all previous headers and uses only the given +// ones going forward. +func (c *Client) SetHeaders(headers http.Header) { + c.modifyLock.Lock() + defer c.modifyLock.Unlock() c.headers = headers } @@ -643,6 +682,7 @@ MaxRetries: config.MaxRetries, Timeout: config.Timeout, Backoff: config.Backoff, + CheckRetry: config.CheckRetry, Limiter: config.Limiter, } config.modifyLock.RUnlock() @@ -669,15 +709,14 @@ token := c.token mfaCreds := c.mfaCreds wrappingLookupFunc := c.wrappingLookupFunc - headers := c.headers policyOverride := c.policyOverride c.modifyLock.RUnlock() + var host = addr.Host // if SRV records exist (see https://tools.ietf.org/html/draft-andrews-http-srv-02), lookup the SRV // record and take the highest match; this is not designed for high-availability, just discovery - var host string = addr.Host - if addr.Port() == "" { - // Internet Draft specifies that the SRV record is ignored if a port is given + // Internet Draft specifies that the SRV record is ignored if a port is given + if addr.Port() == "" && c.config.SRVLookup { _, addrs, err := net.LookupSRV("http", "tcp", addr.Hostname()) if err == nil && len(addrs) > 0 { host = fmt.Sprintf("%s:%d", addrs[0].Target, addrs[0].Port) @@ -692,6 +731,7 @@ Host: host, Path: path.Join(addr.Path, requestPath), }, + Host: addr.Host, ClientToken: token, Params: make(map[string][]string), } @@ -714,10 +754,7 @@ req.WrapTTL = DefaultWrappingLookupFunc(method, lookupPath) } - if headers != nil { - req.Headers = headers - } - + req.Headers = c.Headers() req.PolicyOverride = policyOverride return req @@ -740,6 +777,7 @@ c.config.modifyLock.RLock() limiter := c.config.Limiter maxRetries := c.config.MaxRetries + checkRetry := c.config.CheckRetry backoff := c.config.Backoff httpClient := c.config.HttpClient timeout := c.config.Timeout @@ -776,6 +814,10 @@ } if timeout != 0 { + // Note: we purposefully do not call cancel manually. The reason is + // when canceled, the request.Body will EOF when reading due to the way + // it streams data in. Cancel will still be run when the timeout is + // hit, so this doesn't really harm anything. ctx, _ = context.WithTimeout(ctx, timeout) } req.Request = req.Request.WithContext(ctx) @@ -784,13 +826,17 @@ backoff = retryablehttp.LinearJitterBackoff } + if checkRetry == nil { + checkRetry = retryablehttp.DefaultRetryPolicy + } + client := &retryablehttp.Client{ HTTPClient: httpClient, RetryWaitMin: 1000 * time.Millisecond, RetryWaitMax: 1500 * time.Millisecond, RetryMax: maxRetries, - CheckRetry: retryablehttp.DefaultRetryPolicy, Backoff: backoff, + CheckRetry: checkRetry, ErrorHandler: retryablehttp.PassthroughErrorHandler, } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/go.mod consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/go.mod --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/go.mod 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/go.mod 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,20 @@ module github.com/hashicorp/vault/api -go 1.12 +go 1.13 replace github.com/hashicorp/vault/sdk => ../sdk require ( + github.com/go-test/deep v1.0.2 github.com/hashicorp/errwrap v1.0.0 github.com/hashicorp/go-cleanhttp v0.5.1 - github.com/hashicorp/go-multierror v1.0.0 - github.com/hashicorp/go-retryablehttp v0.5.4 - github.com/hashicorp/go-rootcerts v1.0.1 + github.com/hashicorp/go-multierror v1.1.0 + github.com/hashicorp/go-retryablehttp v0.6.6 + github.com/hashicorp/go-rootcerts v1.0.2 github.com/hashicorp/hcl v1.0.0 - github.com/hashicorp/vault/sdk v0.1.13 - github.com/mitchellh/mapstructure v1.1.2 - golang.org/x/net v0.0.0-20190620200207-3b0461eec859 - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 - gopkg.in/square/go-jose.v2 v2.3.1 + github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 + github.com/mitchellh/mapstructure v1.3.2 + golang.org/x/net v0.0.0-20200602114024-627f9648deb9 + golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 + gopkg.in/square/go-jose.v2 v2.5.1 ) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/go.sum consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/go.sum --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/go.sum 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/go.sum 2020-12-10 21:46:52.000000000 +0000 @@ -1,118 +1,711 @@ 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.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= +code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= +git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/Azure/azure-sdk-for-go v36.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.2/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.6.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.7.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.0/go.mod h1:Oo5cRhLvZteXzI2itUm5ziqsoIxRkzrt3t61FeZaS18= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.0/go.mod h1:rNYMNAefZMRowqCV0cVhr/YDW5dD7afFq9nXAXL4ykE= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Microsoft/go-winio v0.4.13/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/SAP/go-hdb v0.14.1/go.mod h1:7fdQLVC2lER3urZLjZCm0AuMQfApof92n3aylBPEkMo= +github.com/Sectorbob/mlab-ns2 v0.0.0-20171030222938-d3aa0c295a8a/go.mod h1:D73UAuEPckrDorYZdtlCu2ySOLuPB5W4rhIkmmc/XbI= +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-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= +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/aliyun/alibaba-cloud-sdk-go v0.0.0-20190412020505-60e2075261b6/go.mod h1:T9M45xf79ahXVelWoOBmH0y4aC1t5kXO5BxwyakgIGA= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= +github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apple/foundationdb/bindings/go v0.0.0-20190411004307-cd5c9d91fad2/go.mod h1:OMVSB21p9+xQUIqlGizHPZfjK+SHws1ht+ZytVDoz9U= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs= +github.com/armon/go-metrics v0.3.1/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= +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/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/briankassouf/jose v0.9.2-0.20180619214549-d2569464773f/go.mod h1:HQhVmdUf7dBNwIIdBTivnCDxcf6IZY3/zrb+uKSJz6Y= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/centrify/cloud-golang-sdk v0.0.0-20190214225812-119110094d0f/go.mod h1:C0rtzmGXgN78pYR0tGJFhtHgkbAs0lIbHwkB81VxDQE= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chrismalek/oktasdk-go v0.0.0-20181212195951-3430665dfaa0/go.mod h1:5d8DqS60xkj9k3aXfL3+mXBH0DPYO0FQjcKosxl+b/Q= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381/go.mod h1:e5+USP2j8Le2M0Jo3qKPFnNhuo1wueU4nWHCXBOfQ14= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/coreos/go-oidc v2.0.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 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/denisenkom/go-mssqldb v0.0.0-20190412130859-3b1d194e553a/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74/go.mod h1:UqXY1lYT/ERa4OEAywUqdok1T4RCRdArkhic1Opuavo= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= +github.com/frankban/quicktest v1.4.0/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= +github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= +github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/gammazero/deque v0.0.0-20190130191400-2afb3858e9c7/go.mod h1:GeIq9qoE43YdGnDXURnmKTnGg15pQz4mYkXSTChbneI= +github.com/gammazero/workerpool v0.0.0-20190406235159-88d534f22b56/go.mod h1:w9RqFVO2BM3xwWEcAB8Fwp0OviTBBEiRmSBDfbXnd3w= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= +github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +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-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8= +github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= +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-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +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-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31 h1:28FVBuwkwowZMjbA7M0wXsI6t3PYulRTMio3SO+eKCM= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= +github.com/gocql/gocql v0.0.0-20190402132108-0e1d5de854df/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= +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/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 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.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/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-metrics-stackdriver v0.2.0/go.mod h1:KLcPyp3dWJAFD+yHisGlJSZktIsTjb50eB72U2YZ9K0= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/uuid v1.0.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/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= +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/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= +github.com/hashicorp/consul-template v0.25.0/go.mod h1:/vUsrJvDuuQHcxEw0zik+YXTS7ZKWZjQeaQhshBmfH0= +github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.4.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-gatedio v0.5.0/go.mod h1:Lr3t8L6IyxD3DAeaUxGcgl2JnRUpWMCsmBl4Omu/2t4= +github.com/hashicorp/go-gcp-common v0.5.0/go.mod h1:IDGUI2N/OS3PiU4qZcXJeWKPI6O/9Y8hOrbSiMcqyYw= +github.com/hashicorp/go-gcp-common v0.6.0/go.mod h1:RuZi18562/z30wxOzpjeRrGcmk9Ro/rBzixaSZDhIhY= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.10.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-kms-wrapping v0.5.1/go.mod h1:cGIibZmMx9qlxS1pZTUrEgGqA+7u3zJyvVYMhjU2bDs= +github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= +github.com/hashicorp/go-memdb v1.0.2/go.mod h1:I6dKdmYhZqU0RJSheVEWgTNWdVQH5QvTgIUQ0t/t32M= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-retryablehttp v0.5.4 h1:1BZvpawXoJCWX6pNtow9+rpEj+3itIlutiqnntI6jOE= +github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a/go.mod h1:xbXnmKqX9/+RhPkJ4zrEx4738HacP72aaUPlT2RZ4sU= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.6.2 h1:bHM2aVXwBtBJWxHtkSrWuI4umABCUczs52eiUS9nSiw= +github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY= +github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.1 h1:DMo4fmknnz0E0evoNYnV48RjWndOsmd6OW+09R3cEP8= github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2-0.20191001231223-f32f5fe8d6a8/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= 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/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/nomad/api v0.0.0-20191220223628-edc62acd919d/go.mod h1:WKCL+tLVhN1D+APwH3JiTRZoxcdwRk86bWu1LVCUPaE= +github.com/hashicorp/raft v1.0.1/go.mod h1:DVSAWItjLjTOkVbSpWQ0j0kUADIvDaCtBxIcbNAQLkI= +github.com/hashicorp/raft v1.1.2-0.20191002163536-9c6bd3e3eb17/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= +github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= +github.com/hashicorp/raft-snapshot v1.0.2-0.20190827162939-8117efcc5aab/go.mod h1:5sL9eUn72lH5DzsFIJ9jaysITbHksSSszImWSOTC8Ic= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= +github.com/hashicorp/vault v1.4.2/go.mod h1:500fLOj7p92Ys4X265LizqF78MzmHJUf1jV1zNJt060= +github.com/hashicorp/vault-plugin-auth-alicloud v0.5.5/go.mod h1:sQ+VNwPQlemgXHXikYH6onfH9gPwDZ1GUVRLz0ZvHx8= +github.com/hashicorp/vault-plugin-auth-azure v0.5.6-0.20200422235613-1b5c70f9ef68/go.mod h1:RCVBsf8AJndh4c6iGZtvVZFui9SG0Bj9fnF0SodNIkw= +github.com/hashicorp/vault-plugin-auth-centrify v0.5.5/go.mod h1:GfRoy7NHsuR/ogmZtbExdJXUwbfwcxPrS9xzkyy2J/c= +github.com/hashicorp/vault-plugin-auth-cf v0.5.4/go.mod h1:idkFYHc6ske2BE7fe00SpH+SBIlqDKz8vk/IPLJuX2o= +github.com/hashicorp/vault-plugin-auth-gcp v0.5.1/go.mod h1:eLj92eX8MPI4vY1jaazVLF2sVbSAJ3LRHLRhF/pUmlI= +github.com/hashicorp/vault-plugin-auth-gcp v0.6.2-0.20200428223335-82bd3a3ad5b3/go.mod h1:U0fkAlxWTEyQ74lx8wlGdD493lP1DD/qpMjXgOEbwj0= +github.com/hashicorp/vault-plugin-auth-jwt v0.6.2/go.mod h1:SFadxIfoLGzugEjwUUmUaCGbsYEz2/jJymZDDQjEqYg= +github.com/hashicorp/vault-plugin-auth-kerberos v0.1.5/go.mod h1:r4UqWITHYKmBeAMKPWqLo4V8bl/wNqoSIaQcMpeK9ss= +github.com/hashicorp/vault-plugin-auth-kubernetes v0.6.1/go.mod h1:/Y9W5aZULfPeNVRQK0/nrFGpHWyNm0J3UWhOdsAu0vM= +github.com/hashicorp/vault-plugin-auth-oci v0.5.4/go.mod h1:j05O2b9fw2Q82NxDPhHMYVfHKvitUYGWfmqmpBdqmmc= +github.com/hashicorp/vault-plugin-database-elasticsearch v0.5.4/go.mod h1:QjGrrxcRXv/4XkEZAlM0VMZEa3uxKAICFqDj27FP/48= +github.com/hashicorp/vault-plugin-database-mongodbatlas v0.1.2-0.20200520204052-f840e9d4895c/go.mod h1:MP3kfr0N+7miOTZFwKv952b9VkXM4S2Q6YtQCiNKWq8= +github.com/hashicorp/vault-plugin-secrets-ad v0.6.6-0.20200520202259-fc6b89630f9f/go.mod h1:kk98nB+cwDbt3I7UGQq3ota7+eHZrGSTQZfSRGpluvA= +github.com/hashicorp/vault-plugin-secrets-alicloud v0.5.5/go.mod h1:gAoReoUpBHaBwkxQqTK7FY8nQC0MuaZHLiW5WOSny5g= +github.com/hashicorp/vault-plugin-secrets-azure v0.5.6/go.mod h1:Q0cIL4kZWnMmQWkBfWtyOd7+JXTEpAyU4L932PMHq3E= +github.com/hashicorp/vault-plugin-secrets-gcp v0.6.2-0.20200507171538-2548e2b5058d/go.mod h1:jVTE1fuhRcBOb/gnCT9W++AnlwiyQEX4S8iVCKhKQsE= +github.com/hashicorp/vault-plugin-secrets-gcpkms v0.5.5/go.mod h1:b6RwFD1bny1zbfqhD35iGJdQYHRtJLx3HfBD109GO38= +github.com/hashicorp/vault-plugin-secrets-kv v0.5.5/go.mod h1:oNyUoMMQq6uNTwyYPnkldiedaknYbPfQIdKoyKQdy2g= +github.com/hashicorp/vault-plugin-secrets-mongodbatlas v0.1.2/go.mod h1:YRW9zn9NZNitRlPYNAWRp/YEdKCF/X8aOg8IYSxFT5Y= +github.com/hashicorp/vault-plugin-secrets-openldap v0.1.3-0.20200518214608-746aba5fead6/go.mod h1:9Cy4Jp779BjuIOhYLjEfH3M3QCUxZgPnvJ3tAOOmof4= +github.com/hashicorp/vault/api v1.0.1/go.mod h1:AV/+M5VPDpB90arloVX0rVDUIHkONiwz5Uza9HRtpUE= +github.com/hashicorp/vault/api v1.0.5-0.20190730042357-746c0b111519/go.mod h1:i9PKqwFko/s/aihU1uuHGh/FaQS+Xcgvd9dvnfAvQb0= +github.com/hashicorp/vault/api v1.0.5-0.20191122173911-80fcc7907c78/go.mod h1:Uf8LaHyrYsgVgHzO2tMZKhqRGlL3UJ6XaSwW2EA1Iqo= +github.com/hashicorp/vault/api v1.0.5-0.20200215224050-f6547fa8e820/go.mod h1:3f12BMfgDGjTsTtIUj+ZKZwSobQpZtYGFIEehOv5z1o= +github.com/hashicorp/vault/api v1.0.5-0.20200317185738-82f498082f02/go.mod h1:3f12BMfgDGjTsTtIUj+ZKZwSobQpZtYGFIEehOv5z1o= +github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f/go.mod h1:euTFbi2YJgwcju3imEt919lhJKF68nN1cQPq3aA+kBE= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= +github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jcmturner/aescts v1.0.1/go.mod h1:k9gJoDUf1GH5r2IBtBjwjDCoLELYxOcEhitdP8RL7qQ= +github.com/jcmturner/dnsutils v1.0.1/go.mod h1:tqMo38L01jO8AKxT0S9OQVlGZu3dkEt+z5CA+LOhwB0= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.0.0/go.mod h1:4/sqKY8Yzo/TIQ8MoCyk/EPcjb+czI9czxHcdXuZbFA= +github.com/jcmturner/rpc/v2 v2.0.2/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= +github.com/jeffchao/backoff v0.0.0-20140404060208-9d7fd7aa17f2/go.mod h1:xkfESuHriIekR+4RoV+fu91j/CfnYM29Zi2tMFw5iD4= +github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f/go.mod h1:3J2qVK16Lq8V+wfiL2lPeDZ7UWMxk5LemerHa1p6N00= +github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo8vFvoQ= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +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/kelseyhightower/envconfig v1.3.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= +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/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/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/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/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/michaelklishin/rabbit-hole v0.0.0-20191008194146-93d9988f0cd5/go.mod h1:+pmbihVqjC3GPdfWv1V2TnRSuVvwrWLKfEP/MZVB/Wc= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 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-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.2.2 h1:dxe5oCinTXiTIcfgmZecdCzPmAJKd46KsCWc35r0TV4= +github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v0.0.0-20190430161007-f252a8fd71c8/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +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= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mongodb/go-client-mongodb-atlas v0.1.2/go.mod h1:LS8O0YLkA+sbtOb3fZLF10yY3tJM+1xATXMJ3oU35LU= +github.com/mwielbut/pointy v1.1.0/go.mod h1:MvvO+uMFj9T5DMda33HlvogsFBX7pWWKAkFIn4teYwY= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/natefinch/atomic v0.0.0-20150920032501-a62ce929ffcc/go.mod h1:1rLVY/DWf3U6vSZgH16S7pymfrhK2lcUlXjgGglw/lY= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/okta/okta-sdk-golang v1.0.1/go.mod h1:8k//sN2mFTq8Ayo90DqGbcumCkSmYjF0+2zkIbZysec= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= +github.com/oracle/oci-go-sdk v12.5.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= +github.com/ory/dockertest v3.3.4+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v0.0.0-20180815053127-5633e0862627/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.2.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +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.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +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/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +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/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/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/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil v2.19.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= 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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= 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/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +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= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver v1.2.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= +go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 h1:O5YqonU5IWby+w98jVUG9h7zlCWCcH4RHyPVReBmhzk= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/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/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-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/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-20190206173232-65e2d4e15006/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-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +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-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/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-20200519113804-d87ec0cfa476/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/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-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= +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-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-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= 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-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/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-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/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-20190718200317-82a3ea8a504c/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= +google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 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.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/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-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190513181449-d00d292a067c/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +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-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +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.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +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= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= +gopkg.in/ldap.v3 v3.0.3/go.mod h1:oxD7NyBuxchC+SgJDE1Q5Od05eGt29SDQVBmV+HYbzw= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/ory-am/dockertest.v3 v3.3.4/go.mod h1:s9mmoLkaGeAh97qygnNj4xWkiN7e1SKekYC6CovU+ek= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.3.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +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.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= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/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= +k8s.io/api v0.0.0-20190409092523-d687e77c8ae9/go.mod h1:FQEUn50aaytlU65qqBn/w+5ugllHwrBzKm7DzbnXdzE= +k8s.io/apimachinery v0.0.0-20190409092423-760d1845f48b/go.mod h1:FW86P8YXVLsbuplGMZeb20J3jYHscrDqw4jELaFJvRU= +k8s.io/klog v0.0.0-20190306015804-8e90cee79f82/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +layeh.com/radius v0.0.0-20190322222518-890bc1058917/go.mod h1:fywZKyu//X7iRzaxLgPWsvc0L26IUpVvE/aeIL2JtIQ= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,384 @@ +package api + +import ( + "errors" + "math/rand" + "sync" + "time" +) + +var ( + ErrLifetimeWatcherMissingInput = errors.New("missing input") + ErrLifetimeWatcherMissingSecret = errors.New("missing secret") + ErrLifetimeWatcherNotRenewable = errors.New("secret is not renewable") + ErrLifetimeWatcherNoSecretData = errors.New("returned empty secret data") + + // Deprecated; kept for compatibility + ErrRenewerMissingInput = errors.New("missing input to renewer") + ErrRenewerMissingSecret = errors.New("missing secret to renew") + ErrRenewerNotRenewable = errors.New("secret is not renewable") + ErrRenewerNoSecretData = errors.New("returned empty secret data") + + // DefaultLifetimeWatcherRenewBuffer is the default size of the buffer for renew + // messages on the channel. + DefaultLifetimeWatcherRenewBuffer = 5 + // Deprecated: kept for backwards compatibility + DefaultRenewerRenewBuffer = 5 +) + +type RenewBehavior uint + +const ( + // RenewBehaviorIgnoreErrors means we will attempt to keep renewing until + // we hit the lifetime threshold. It also ignores errors stemming from + // passing a non-renewable lease in. In practice, this means you simply + // reauthenticate/refetch credentials when the watcher exits. This is the + // default. + RenewBehaviorIgnoreErrors RenewBehavior = iota + + // RenewBehaviorRenewDisabled turns off renewal attempts entirely. This + // allows you to simply watch lifetime and have the watcher return at a + // reasonable threshold without actually making Vault calls. + RenewBehaviorRenewDisabled + + // RenewBehaviorErrorOnErrors is the "legacy" behavior which always exits + // on some kind of error + RenewBehaviorErrorOnErrors +) + +// LifetimeWatcher is a process for watching lifetime of a secret. +// +// watcher, err := client.NewLifetimeWatcher(&LifetimeWatcherInput{ +// Secret: mySecret, +// }) +// go watcher.Start() +// defer watcher.Stop() +// +// for { +// select { +// case err := <-watcher.DoneCh(): +// if err != nil { +// log.Fatal(err) +// } +// +// // Renewal is now over +// case renewal := <-watcher.RenewCh(): +// log.Printf("Successfully renewed: %#v", renewal) +// } +// } +// +// +// `DoneCh` will return if renewal fails, or if the remaining lease duration is +// under a built-in threshold and either renewing is not extending it or +// renewing is disabled. In both cases, the caller should attempt a re-read of +// the secret. Clients should check the return value of the channel to see if +// renewal was successful. +type LifetimeWatcher struct { + l sync.Mutex + + client *Client + secret *Secret + grace time.Duration + random *rand.Rand + increment int + doneCh chan error + renewCh chan *RenewOutput + renewBehavior RenewBehavior + + stopped bool + stopCh chan struct{} + + errLifetimeWatcherNotRenewable error + errLifetimeWatcherNoSecretData error +} + +// LifetimeWatcherInput is used as input to the renew function. +type LifetimeWatcherInput struct { + // Secret is the secret to renew + Secret *Secret + + // DEPRECATED: this does not do anything. + Grace time.Duration + + // Rand is the randomizer to use for underlying randomization. If not + // provided, one will be generated and seeded automatically. If provided, it + // is assumed to have already been seeded. + Rand *rand.Rand + + // RenewBuffer is the size of the buffered channel where renew messages are + // dispatched. + RenewBuffer int + + // The new TTL, in seconds, that should be set on the lease. The TTL set + // here may or may not be honored by the vault server, based on Vault + // configuration or any associated max TTL values. + Increment int + + // RenewBehavior controls what happens when a renewal errors or the + // passed-in secret is not renewable. + RenewBehavior RenewBehavior +} + +// RenewOutput is the metadata returned to the client (if it's listening) to +// renew messages. +type RenewOutput struct { + // RenewedAt is the timestamp when the renewal took place (UTC). + RenewedAt time.Time + + // Secret is the underlying renewal data. It's the same struct as all data + // that is returned from Vault, but since this is renewal data, it will not + // usually include the secret itself. + Secret *Secret +} + +// NewLifetimeWatcher creates a new renewer from the given input. +func (c *Client) NewLifetimeWatcher(i *LifetimeWatcherInput) (*LifetimeWatcher, error) { + if i == nil { + return nil, ErrLifetimeWatcherMissingInput + } + + secret := i.Secret + if secret == nil { + return nil, ErrLifetimeWatcherMissingSecret + } + + random := i.Rand + if random == nil { + random = rand.New(rand.NewSource(int64(time.Now().Nanosecond()))) + } + + renewBuffer := i.RenewBuffer + if renewBuffer == 0 { + renewBuffer = DefaultLifetimeWatcherRenewBuffer + } + + return &LifetimeWatcher{ + client: c, + secret: secret, + increment: i.Increment, + random: random, + doneCh: make(chan error, 1), + renewCh: make(chan *RenewOutput, renewBuffer), + renewBehavior: i.RenewBehavior, + + stopped: false, + stopCh: make(chan struct{}), + + errLifetimeWatcherNotRenewable: ErrLifetimeWatcherNotRenewable, + errLifetimeWatcherNoSecretData: ErrLifetimeWatcherNoSecretData, + }, nil +} + +// Deprecated: exists only for backwards compatibility. Calls +// NewLifetimeWatcher, and sets compatibility flags. +func (c *Client) NewRenewer(i *LifetimeWatcherInput) (*LifetimeWatcher, error) { + if i == nil { + return nil, ErrRenewerMissingInput + } + + secret := i.Secret + if secret == nil { + return nil, ErrRenewerMissingSecret + } + + renewer, err := c.NewLifetimeWatcher(i) + if err != nil { + return nil, err + } + + renewer.renewBehavior = RenewBehaviorErrorOnErrors + renewer.errLifetimeWatcherNotRenewable = ErrRenewerNotRenewable + renewer.errLifetimeWatcherNoSecretData = ErrRenewerNoSecretData + return renewer, err +} + +// DoneCh returns the channel where the renewer will publish when renewal stops. +// If there is an error, this will be an error. +func (r *LifetimeWatcher) DoneCh() <-chan error { + return r.doneCh +} + +// RenewCh is a channel that receives a message when a successful renewal takes +// place and includes metadata about the renewal. +func (r *LifetimeWatcher) RenewCh() <-chan *RenewOutput { + return r.renewCh +} + +// Stop stops the renewer. +func (r *LifetimeWatcher) Stop() { + r.l.Lock() + defer r.l.Unlock() + + if !r.stopped { + close(r.stopCh) + r.stopped = true + } +} + +// Start starts a background process for watching the lifetime of this secret. +// If renewal is enabled, when the secret has auth data, this attempts to renew +// the auth (token); When the secret has a lease, this attempts to renew the +// lease. +func (r *LifetimeWatcher) Start() { + r.doneCh <- r.doRenew() +} + +// Renew is for comnpatibility with the legacy api.Renewer. Calling Renew +// simply chains to Start. +func (r *LifetimeWatcher) Renew() { + r.Start() +} + +// renewAuth is a helper for renewing authentication. +func (r *LifetimeWatcher) doRenew() error { + var nonRenewable bool + var tokenMode bool + var initLeaseDuration int + var credString string + var renewFunc func(string, int) (*Secret, error) + + switch { + case r.secret.Auth != nil: + tokenMode = true + nonRenewable = !r.secret.Auth.Renewable + initLeaseDuration = r.secret.Auth.LeaseDuration + credString = r.secret.Auth.ClientToken + renewFunc = r.client.Auth().Token().RenewTokenAsSelf + default: + nonRenewable = !r.secret.Renewable + initLeaseDuration = r.secret.LeaseDuration + credString = r.secret.LeaseID + renewFunc = r.client.Sys().Renew + } + + if credString == "" || + (nonRenewable && r.renewBehavior == RenewBehaviorErrorOnErrors) { + return r.errLifetimeWatcherNotRenewable + } + + initialTime := time.Now() + priorDuration := time.Duration(initLeaseDuration) * time.Second + r.calculateGrace(priorDuration) + + for { + // Check if we are stopped. + select { + case <-r.stopCh: + return nil + default: + } + + var leaseDuration time.Duration + fallbackLeaseDuration := initialTime.Add(priorDuration).Sub(time.Now()) + + switch { + case nonRenewable || r.renewBehavior == RenewBehaviorRenewDisabled: + // Can't or won't renew, just keep the same expiration so we exit + // when it's reauthentication time + leaseDuration = fallbackLeaseDuration + + default: + // Renew the token + renewal, err := renewFunc(credString, r.increment) + if err != nil || renewal == nil || (tokenMode && renewal.Auth == nil) { + if r.renewBehavior == RenewBehaviorErrorOnErrors { + if err != nil { + return err + } + if renewal == nil || (tokenMode && renewal.Auth == nil) { + return r.errLifetimeWatcherNoSecretData + } + } + + leaseDuration = fallbackLeaseDuration + break + } + + // Push a message that a renewal took place. + select { + case r.renewCh <- &RenewOutput{time.Now().UTC(), renewal}: + default: + } + + // Possibly error if we are not renewable + if ((tokenMode && !renewal.Auth.Renewable) || (!tokenMode && !renewal.Renewable)) && + r.renewBehavior == RenewBehaviorErrorOnErrors { + return r.errLifetimeWatcherNotRenewable + } + + // Grab the lease duration + newDuration := renewal.LeaseDuration + if tokenMode { + newDuration = renewal.Auth.LeaseDuration + } + + leaseDuration = time.Duration(newDuration) * time.Second + } + + // We keep evaluating a new grace period so long as the lease is + // extending. Once it stops extending, we've hit the max and need to + // rely on the grace duration. + if leaseDuration > priorDuration { + r.calculateGrace(leaseDuration) + } + priorDuration = leaseDuration + + // The sleep duration is set to 2/3 of the current lease duration plus + // 1/3 of the current grace period, which adds jitter. + sleepDuration := time.Duration(float64(leaseDuration.Nanoseconds())*2/3 + float64(r.grace.Nanoseconds())/3) + + // If we are within grace, return now; or, if the amount of time we + // would sleep would land us in the grace period. This helps with short + // tokens; for example, you don't want a current lease duration of 4 + // seconds, a grace period of 3 seconds, and end up sleeping for more + // than three of those seconds and having a very small budget of time + // to renew. + if leaseDuration <= r.grace || leaseDuration-sleepDuration <= r.grace { + return nil + } + + select { + case <-r.stopCh: + return nil + case <-time.After(sleepDuration): + continue + } + } +} + +// sleepDuration calculates the time to sleep given the base lease duration. The +// base is the resulting lease duration. It will be reduced to 1/3 and +// multiplied by a random float between 0.0 and 1.0. This extra randomness +// prevents multiple clients from all trying to renew simultaneously. +func (r *LifetimeWatcher) sleepDuration(base time.Duration) time.Duration { + sleep := float64(base) + + // Renew at 1/3 the remaining lease. This will give us an opportunity to retry + // at least one more time should the first renewal fail. + sleep = sleep / 3.0 + + // Use a randomness so many clients do not hit Vault simultaneously. + sleep = sleep * (r.random.Float64() + 1) / 2.0 + + return time.Duration(sleep) +} + +// calculateGrace calculates the grace period based on a reasonable set of +// assumptions given the total lease time; it also adds some jitter to not have +// clients be in sync. +func (r *LifetimeWatcher) calculateGrace(leaseDuration time.Duration) { + if leaseDuration == 0 { + r.grace = 0 + return + } + + leaseNanos := float64(leaseDuration.Nanoseconds()) + jitterMax := 0.1 * leaseNanos + + // For a given lease duration, we want to allow 80-90% of that to elapse, + // so the remaining amount is the grace period + r.grace = time.Duration(jitterMax) + time.Duration(uint64(r.random.Int63())%uint64(jitterMax)) +} + +type Renewer = LifetimeWatcher +type RenewerInput = LifetimeWatcherInput diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/logical.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/logical.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/logical.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/logical.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,8 +21,9 @@ // changed DefaultWrappingTTL = "5m" - // The default function used if no other function is set, which honors the - // env var and wraps `sys/wrapping/wrap` + // The default function used if no other function is set. It honors the env + // var to set the wrap TTL. The default wrap TTL will apply when when writing + // to `sys/wrapping/wrap` when the env var is not set. DefaultWrappingLookupFunc = func(operation, path string) string { if os.Getenv(EnvVaultWrapTTL) != "" { return os.Getenv(EnvVaultWrapTTL) @@ -134,9 +135,20 @@ return nil, err } + return c.write(path, r) +} + +func (c *Logical) WriteBytes(path string, data []byte) (*Secret, error) { + r := c.c.NewRequest("PUT", "/v1/"+path) + r.BodyBytes = data + + return c.write(path, r) +} + +func (c *Logical) write(path string, request *Request) (*Secret, error) { ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.RawRequestWithContext(ctx, request) if resp != nil { defer resp.Body.Close() } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/plugin_helpers.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/plugin_helpers.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/plugin_helpers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/plugin_helpers.go 2020-12-10 21:46:52.000000000 +0000 @@ -118,6 +118,9 @@ return nil, errwrap.Wrapf("error during api client creation: {{err}}", err) } + // Reset token value to make sure nothing has been set by default + client.ClearToken() + secret, err := client.Logical().Unwrap(unwrapToken) if err != nil { return nil, errwrap.Wrapf("error during token unwrap request: {{err}}", err) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/renewer.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/renewer.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/renewer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/renewer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,349 +0,0 @@ -package api - -import ( - "errors" - "math/rand" - "sync" - "time" -) - -var ( - ErrRenewerMissingInput = errors.New("missing input to renewer") - ErrRenewerMissingSecret = errors.New("missing secret to renew") - ErrRenewerNotRenewable = errors.New("secret is not renewable") - ErrRenewerNoSecretData = errors.New("returned empty secret data") - - // DefaultRenewerRenewBuffer is the default size of the buffer for renew - // messages on the channel. - DefaultRenewerRenewBuffer = 5 -) - -// Renewer is a process for renewing a secret. -// -// renewer, err := client.NewRenewer(&RenewerInput{ -// Secret: mySecret, -// }) -// go renewer.Renew() -// defer renewer.Stop() -// -// for { -// select { -// case err := <-renewer.DoneCh(): -// if err != nil { -// log.Fatal(err) -// } -// -// // Renewal is now over -// case renewal := <-renewer.RenewCh(): -// log.Printf("Successfully renewed: %#v", renewal) -// } -// } -// -// -// The `DoneCh` will return if renewal fails or if the remaining lease duration -// after a renewal is less than or equal to the grace (in number of seconds). In -// both cases, the caller should attempt a re-read of the secret. Clients should -// check the return value of the channel to see if renewal was successful. -type Renewer struct { - l sync.Mutex - - client *Client - secret *Secret - grace time.Duration - random *rand.Rand - increment int - doneCh chan error - renewCh chan *RenewOutput - - stopped bool - stopCh chan struct{} -} - -// RenewerInput is used as input to the renew function. -type RenewerInput struct { - // Secret is the secret to renew - Secret *Secret - - // DEPRECATED: this does not do anything. - Grace time.Duration - - // Rand is the randomizer to use for underlying randomization. If not - // provided, one will be generated and seeded automatically. If provided, it - // is assumed to have already been seeded. - Rand *rand.Rand - - // RenewBuffer is the size of the buffered channel where renew messages are - // dispatched. - RenewBuffer int - - // The new TTL, in seconds, that should be set on the lease. The TTL set - // here may or may not be honored by the vault server, based on Vault - // configuration or any associated max TTL values. - Increment int -} - -// RenewOutput is the metadata returned to the client (if it's listening) to -// renew messages. -type RenewOutput struct { - // RenewedAt is the timestamp when the renewal took place (UTC). - RenewedAt time.Time - - // Secret is the underlying renewal data. It's the same struct as all data - // that is returned from Vault, but since this is renewal data, it will not - // usually include the secret itself. - Secret *Secret -} - -// NewRenewer creates a new renewer from the given input. -func (c *Client) NewRenewer(i *RenewerInput) (*Renewer, error) { - if i == nil { - return nil, ErrRenewerMissingInput - } - - secret := i.Secret - if secret == nil { - return nil, ErrRenewerMissingSecret - } - - random := i.Rand - if random == nil { - random = rand.New(rand.NewSource(int64(time.Now().Nanosecond()))) - } - - renewBuffer := i.RenewBuffer - if renewBuffer == 0 { - renewBuffer = DefaultRenewerRenewBuffer - } - - return &Renewer{ - client: c, - secret: secret, - increment: i.Increment, - random: random, - doneCh: make(chan error, 1), - renewCh: make(chan *RenewOutput, renewBuffer), - - stopped: false, - stopCh: make(chan struct{}), - }, nil -} - -// DoneCh returns the channel where the renewer will publish when renewal stops. -// If there is an error, this will be an error. -func (r *Renewer) DoneCh() <-chan error { - return r.doneCh -} - -// RenewCh is a channel that receives a message when a successful renewal takes -// place and includes metadata about the renewal. -func (r *Renewer) RenewCh() <-chan *RenewOutput { - return r.renewCh -} - -// Stop stops the renewer. -func (r *Renewer) Stop() { - r.l.Lock() - if !r.stopped { - close(r.stopCh) - r.stopped = true - } - r.l.Unlock() -} - -// Renew starts a background process for renewing this secret. When the secret -// has auth data, this attempts to renew the auth (token). When the secret has -// a lease, this attempts to renew the lease. -func (r *Renewer) Renew() { - var result error - if r.secret.Auth != nil { - result = r.renewAuth() - } else { - result = r.renewLease() - } - - r.doneCh <- result -} - -// renewAuth is a helper for renewing authentication. -func (r *Renewer) renewAuth() error { - if !r.secret.Auth.Renewable || r.secret.Auth.ClientToken == "" { - return ErrRenewerNotRenewable - } - - priorDuration := time.Duration(r.secret.Auth.LeaseDuration) * time.Second - r.calculateGrace(priorDuration) - - client, token := r.client, r.secret.Auth.ClientToken - - for { - // Check if we are stopped. - select { - case <-r.stopCh: - return nil - default: - } - - // Renew the auth. - renewal, err := client.Auth().Token().RenewTokenAsSelf(token, r.increment) - if err != nil { - return err - } - - // Push a message that a renewal took place. - select { - case r.renewCh <- &RenewOutput{time.Now().UTC(), renewal}: - default: - } - - // Somehow, sometimes, this happens. - if renewal == nil || renewal.Auth == nil { - return ErrRenewerNoSecretData - } - - // Do nothing if we are not renewable - if !renewal.Auth.Renewable { - return ErrRenewerNotRenewable - } - - // Grab the lease duration - leaseDuration := time.Duration(renewal.Auth.LeaseDuration) * time.Second - - // We keep evaluating a new grace period so long as the lease is - // extending. Once it stops extending, we've hit the max and need to - // rely on the grace duration. - if leaseDuration > priorDuration { - r.calculateGrace(leaseDuration) - } - priorDuration = leaseDuration - - // The sleep duration is set to 2/3 of the current lease duration plus - // 1/3 of the current grace period, which adds jitter. - sleepDuration := time.Duration(float64(leaseDuration.Nanoseconds())*2/3 + float64(r.grace.Nanoseconds())/3) - - // If we are within grace, return now; or, if the amount of time we - // would sleep would land us in the grace period. This helps with short - // tokens; for example, you don't want a current lease duration of 4 - // seconds, a grace period of 3 seconds, and end up sleeping for more - // than three of those seconds and having a very small budget of time - // to renew. - if leaseDuration <= r.grace || leaseDuration-sleepDuration <= r.grace { - return nil - } - - select { - case <-r.stopCh: - return nil - case <-time.After(sleepDuration): - continue - } - } -} - -// renewLease is a helper for renewing a lease. -func (r *Renewer) renewLease() error { - if !r.secret.Renewable || r.secret.LeaseID == "" { - return ErrRenewerNotRenewable - } - - priorDuration := time.Duration(r.secret.LeaseDuration) * time.Second - r.calculateGrace(priorDuration) - - client, leaseID := r.client, r.secret.LeaseID - - for { - // Check if we are stopped. - select { - case <-r.stopCh: - return nil - default: - } - - // Renew the lease. - renewal, err := client.Sys().Renew(leaseID, r.increment) - if err != nil { - return err - } - - // Push a message that a renewal took place. - select { - case r.renewCh <- &RenewOutput{time.Now().UTC(), renewal}: - default: - } - - // Somehow, sometimes, this happens. - if renewal == nil { - return ErrRenewerNoSecretData - } - - // Do nothing if we are not renewable - if !renewal.Renewable { - return ErrRenewerNotRenewable - } - - // Grab the lease duration - leaseDuration := time.Duration(renewal.LeaseDuration) * time.Second - - // We keep evaluating a new grace period so long as the lease is - // extending. Once it stops extending, we've hit the max and need to - // rely on the grace duration. - if leaseDuration > priorDuration { - r.calculateGrace(leaseDuration) - } - priorDuration = leaseDuration - - // The sleep duration is set to 2/3 of the current lease duration plus - // 1/3 of the current grace period, which adds jitter. - sleepDuration := time.Duration(float64(leaseDuration.Nanoseconds())*2/3 + float64(r.grace.Nanoseconds())/3) - - // If we are within grace, return now; or, if the amount of time we - // would sleep would land us in the grace period. This helps with short - // tokens; for example, you don't want a current lease duration of 4 - // seconds, a grace period of 3 seconds, and end up sleeping for more - // than three of those seconds and having a very small budget of time - // to renew. - if leaseDuration <= r.grace || leaseDuration-sleepDuration <= r.grace { - return nil - } - - select { - case <-r.stopCh: - return nil - case <-time.After(sleepDuration): - continue - } - } -} - -// sleepDuration calculates the time to sleep given the base lease duration. The -// base is the resulting lease duration. It will be reduced to 1/3 and -// multiplied by a random float between 0.0 and 1.0. This extra randomness -// prevents multiple clients from all trying to renew simultaneously. -func (r *Renewer) sleepDuration(base time.Duration) time.Duration { - sleep := float64(base) - - // Renew at 1/3 the remaining lease. This will give us an opportunity to retry - // at least one more time should the first renewal fail. - sleep = sleep / 3.0 - - // Use a randomness so many clients do not hit Vault simultaneously. - sleep = sleep * (r.random.Float64() + 1) / 2.0 - - return time.Duration(sleep) -} - -// calculateGrace calculates the grace period based on a reasonable set of -// assumptions given the total lease time; it also adds some jitter to not have -// clients be in sync. -func (r *Renewer) calculateGrace(leaseDuration time.Duration) { - if leaseDuration == 0 { - r.grace = 0 - return - } - - leaseNanos := float64(leaseDuration.Nanoseconds()) - jitterMax := 0.1 * leaseNanos - - // For a given lease duration, we want to allow 80-90% of that to elapse, - // so the remaining amount is the grace period - r.grace = time.Duration(jitterMax) + time.Duration(uint64(r.random.Int63())%uint64(jitterMax)) -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/request.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/request.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/request.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/request.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,6 +18,7 @@ type Request struct { Method string URL *url.URL + Host string Params url.Values Headers http.Header ClientToken string @@ -115,7 +116,7 @@ req.URL.User = r.URL.User req.URL.Scheme = r.URL.Scheme req.URL.Host = r.URL.Host - req.Host = r.URL.Host + req.Host = r.Host if r.Headers != nil { for header, vals := range r.Headers { diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/response.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/response.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/response.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/response.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,8 +27,8 @@ // body must still be closed manually. func (r *Response) Error() error { // 200 to 399 are okay status codes. 429 is the code for health status of - // standby nodes. - if (r.StatusCode >= 200 && r.StatusCode < 400) || r.StatusCode == 429 { + // standby nodes, otherwise, 429 is treated as quota limit reached. + if (r.StatusCode >= 200 && r.StatusCode < 400) || (r.StatusCode == 429 && r.Request.URL.Path == "/v1/sys/health") { return nil } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/ssh_agent.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/ssh_agent.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/ssh_agent.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/ssh_agent.go 2020-12-10 21:46:52.000000000 +0000 @@ -60,6 +60,7 @@ type SSHHelperConfig struct { VaultAddr string `hcl:"vault_addr"` SSHMountPoint string `hcl:"ssh_mount_point"` + Namespace string `hcl:"namespace"` CACert string `hcl:"ca_cert"` CAPath string `hcl:"ca_path"` AllowedCidrList string `hcl:"allowed_cidr_list"` @@ -123,6 +124,11 @@ return nil, err } + // Configure namespace + if c.Namespace != "" { + client.SetNamespace(c.Namespace) + } + return client, nil } @@ -155,6 +161,7 @@ valid := []string{ "vault_addr", "ssh_mount_point", + "namespace", "ca_cert", "ca_path", "allowed_cidr_list", diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_audit.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_audit.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_audit.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_audit.go 2020-12-10 21:46:52.000000000 +0000 @@ -116,7 +116,7 @@ return err } -// Structures for the requests/resposne are all down here. They aren't +// Structures for the requests/response are all down here. They aren't // individually documented because the map almost directly to the raw HTTP API // documentation. Please refer to that documentation for more details. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_generate_root.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_generate_root.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_generate_root.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_generate_root.go 2020-12-10 21:46:52.000000000 +0000 @@ -10,6 +10,10 @@ return c.generateRootStatusCommon("/v1/sys/replication/dr/secondary/generate-operation-token/attempt") } +func (c *Sys) GenerateRecoveryOperationTokenStatus() (*GenerateRootStatusResponse, error) { + return c.generateRootStatusCommon("/v1/sys/generate-recovery-token/attempt") +} + func (c *Sys) generateRootStatusCommon(path string) (*GenerateRootStatusResponse, error) { r := c.c.NewRequest("GET", path) @@ -34,6 +38,10 @@ return c.generateRootInitCommon("/v1/sys/replication/dr/secondary/generate-operation-token/attempt", otp, pgpKey) } +func (c *Sys) GenerateRecoveryOperationTokenInit(otp, pgpKey string) (*GenerateRootStatusResponse, error) { + return c.generateRootInitCommon("/v1/sys/generate-recovery-token/attempt", otp, pgpKey) +} + func (c *Sys) generateRootInitCommon(path, otp, pgpKey string) (*GenerateRootStatusResponse, error) { body := map[string]interface{}{ "otp": otp, @@ -66,6 +74,10 @@ return c.generateRootCancelCommon("/v1/sys/replication/dr/secondary/generate-operation-token/attempt") } +func (c *Sys) GenerateRecoveryOperationTokenCancel() error { + return c.generateRootCancelCommon("/v1/sys/generate-recovery-token/attempt") +} + func (c *Sys) generateRootCancelCommon(path string) error { r := c.c.NewRequest("DELETE", path) @@ -86,6 +98,10 @@ return c.generateRootUpdateCommon("/v1/sys/replication/dr/secondary/generate-operation-token/update", shard, nonce) } +func (c *Sys) GenerateRecoveryOperationTokenUpdate(shard, nonce string) (*GenerateRootStatusResponse, error) { + return c.generateRootUpdateCommon("/v1/sys/generate-recovery-token/update", shard, nonce) +} + func (c *Sys) generateRootUpdateCommon(path, shard, nonce string) (*GenerateRootStatusResponse, error) { body := map[string]interface{}{ "key": shard, diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leader.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leader.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leader.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leader.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,4 +26,6 @@ PerfStandby bool `json:"performance_standby"` PerfStandbyLastRemoteWAL uint64 `json:"performance_standby_last_remote_wal"` LastWAL uint64 `json:"last_wal"` + RaftCommittedIndex uint64 `json:"raft_committed_index,omitempty"` + RaftAppliedIndex uint64 `json:"raft_applied_index,omitempty"` } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leases.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leases.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leases.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_leases.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,13 @@ } func (c *Sys) Revoke(id string) error { - r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke/"+id) + r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke") + body := map[string]interface{}{ + "lease_id": id, + } + if err := r.SetJSONBody(body); err != nil { + return err + } ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_monitor.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_monitor.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_monitor.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_monitor.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,64 @@ +package api + +import ( + "bufio" + "context" + "fmt" +) + +// Monitor returns a channel that outputs strings containing the log messages +// coming from the server. +func (c *Sys) Monitor(ctx context.Context, logLevel string) (chan string, error) { + r := c.c.NewRequest("GET", "/v1/sys/monitor") + + if logLevel == "" { + r.Params.Add("log_level", "info") + } else { + r.Params.Add("log_level", logLevel) + } + + resp, err := c.c.RawRequestWithContext(ctx, r) + if err != nil { + return nil, err + } + + logCh := make(chan string, 64) + + go func() { + scanner := bufio.NewScanner(resp.Body) + droppedCount := 0 + + defer close(logCh) + defer resp.Body.Close() + + for { + if ctx.Err() != nil { + return + } + + if !scanner.Scan() { + return + } + + logMessage := scanner.Text() + + if droppedCount > 0 { + select { + case logCh <- fmt.Sprintf("Monitor dropped %d logs during monitor request\n", droppedCount): + droppedCount = 0 + default: + droppedCount++ + continue + } + } + + select { + case logCh <- logMessage: + default: + droppedCount++ + } + } + }() + + return logCh, nil +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_mounts.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_mounts.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_mounts.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_mounts.go 2020-12-10 21:46:52.000000000 +0000 @@ -129,12 +129,13 @@ } type MountInput struct { - Type string `json:"type"` - Description string `json:"description"` - Config MountConfigInput `json:"config"` - Local bool `json:"local"` - SealWrap bool `json:"seal_wrap" mapstructure:"seal_wrap"` - Options map[string]string `json:"options"` + Type string `json:"type"` + Description string `json:"description"` + Config MountConfigInput `json:"config"` + Local bool `json:"local"` + SealWrap bool `json:"seal_wrap" mapstructure:"seal_wrap"` + ExternalEntropyAccess bool `json:"external_entropy_access" mapstructure:"external_entropy_access"` + Options map[string]string `json:"options"` // Deprecated: Newer server responses should be returning this information in the // Type field (json: "type") instead. @@ -159,14 +160,15 @@ } type MountOutput struct { - UUID string `json:"uuid"` - Type string `json:"type"` - Description string `json:"description"` - Accessor string `json:"accessor"` - Config MountConfigOutput `json:"config"` - Options map[string]string `json:"options"` - Local bool `json:"local"` - SealWrap bool `json:"seal_wrap" mapstructure:"seal_wrap"` + UUID string `json:"uuid"` + Type string `json:"type"` + Description string `json:"description"` + Accessor string `json:"accessor"` + Config MountConfigOutput `json:"config"` + Options map[string]string `json:"options"` + Local bool `json:"local"` + SealWrap bool `json:"seal_wrap" mapstructure:"seal_wrap"` + ExternalEntropyAccess bool `json:"external_entropy_access" mapstructure:"external_entropy_access"` } type MountConfigOutput struct { diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_plugins.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_plugins.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_plugins.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_plugins.go 2020-12-10 21:46:52.000000000 +0000 @@ -5,6 +5,7 @@ "errors" "fmt" "net/http" + "time" "github.com/hashicorp/vault/sdk/helper/consts" "github.com/mitchellh/mapstructure" @@ -225,6 +226,106 @@ return err } +// ReloadPluginInput is used as input to the ReloadPlugin function. +type ReloadPluginInput struct { + // Plugin is the name of the plugin to reload, as registered in the plugin catalog + Plugin string `json:"plugin"` + + // Mounts is the array of string mount paths of the plugin backends to reload + Mounts []string `json:"mounts"` + + // Scope is the scope of the plugin reload + Scope string `json:"scope"` +} + +// ReloadPlugin reloads mounted plugin backends, possibly returning +// reloadId for a cluster scoped reload +func (c *Sys) ReloadPlugin(i *ReloadPluginInput) (string, error) { + path := "/v1/sys/plugins/reload/backend" + req := c.c.NewRequest(http.MethodPut, path) + + if err := req.SetJSONBody(i); err != nil { + return "", err + } + + ctx, cancelFunc := context.WithCancel(context.Background()) + defer cancelFunc() + + resp, err := c.c.RawRequestWithContext(ctx, req) + if err != nil { + return "", err + } + defer resp.Body.Close() + + if i.Scope == "global" { + // Get the reload id + secret, parseErr := ParseSecret(resp.Body) + if parseErr != nil { + return "", parseErr + } + if _, ok := secret.Data["reload_id"]; ok { + return secret.Data["reload_id"].(string), nil + } + } + return "", err +} + +// ReloadStatus is the status of an individual node's plugin reload +type ReloadStatus struct { + Timestamp time.Time `json:"timestamp" mapstructure:"timestamp"` + Error string `json:"error" mapstructure:"error"` +} + +// ReloadStatusResponse is the combined response of all known completed plugin reloads +type ReloadStatusResponse struct { + ReloadID string `mapstructure:"reload_id"` + Results map[string]*ReloadStatus `mapstructure:"results"` +} + +// ReloadPluginStatusInput is used as input to the ReloadStatusPlugin function. +type ReloadPluginStatusInput struct { + // ReloadID is the ID of the reload operation + ReloadID string `json:"reload_id"` +} + +// ReloadPluginStatus retrieves the status of a reload operation +func (c *Sys) ReloadPluginStatus(reloadStatusInput *ReloadPluginStatusInput) (*ReloadStatusResponse, error) { + path := "/v1/sys/plugins/reload/backend/status" + req := c.c.NewRequest(http.MethodGet, path) + req.Params.Add("reload_id", reloadStatusInput.ReloadID) + + ctx, cancelFunc := context.WithCancel(context.Background()) + defer cancelFunc() + + resp, err := c.c.RawRequestWithContext(ctx, req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp != nil { + secret, parseErr := ParseSecret(resp.Body) + if parseErr != nil { + return nil, err + } + + var r ReloadStatusResponse + d, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: mapstructure.StringToTimeHookFunc(time.RFC3339), + Result: &r, + }) + if err != nil { + return nil, err + } + err = d.Decode(secret.Data) + if err != nil { + return nil, err + } + return &r, nil + } + return nil, nil + +} + // catalogPathByType is a helper to construct the proper API path by plugin type func catalogPathByType(pluginType consts.PluginType, name string) string { path := fmt.Sprintf("/v1/sys/plugins/catalog/%s/%s", pluginType, name) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_raft.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_raft.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_raft.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_raft.go 2020-12-10 21:46:52.000000000 +0000 @@ -2,6 +2,7 @@ import ( "context" + "fmt" "io" "net/http" @@ -16,10 +17,11 @@ // RaftJoinRequest represents the parameters consumed by the raft join API type RaftJoinRequest struct { LeaderAPIAddr string `json:"leader_api_addr"` - LeaderCACert string `json:"leader_ca_cert":` + LeaderCACert string `json:"leader_ca_cert"` LeaderClientCert string `json:"leader_client_cert"` LeaderClientKey string `json:"leader_client_key"` Retry bool `json:"retry"` + NonVoter bool `json:"non_voter"` } // RaftJoin adds the node from which this call is invoked from to the raft @@ -90,10 +92,37 @@ // to determine if the body contains error message. var result *Response resp, err := c.c.config.HttpClient.Do(req) + if err != nil { + return err + } + if resp == nil { return nil } + // Check for a redirect, only allowing for a single redirect + if resp.StatusCode == 301 || resp.StatusCode == 302 || resp.StatusCode == 307 { + // Parse the updated location + respLoc, err := resp.Location() + if err != nil { + return err + } + + // Ensure a protocol downgrade doesn't happen + if req.URL.Scheme == "https" && respLoc.Scheme != "https" { + return fmt.Errorf("redirect would cause protocol downgrade") + } + + // Update the request + req.URL = respLoc + + // Retry the request + resp, err = c.c.config.HttpClient.Do(req) + if err != nil { + return err + } + } + result = &Response{Response: resp} if err := result.Error(); err != nil { return err diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_seal.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_seal.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/api/sys_seal.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/api/sys_seal.go 2020-12-10 21:46:52.000000000 +0000 @@ -77,6 +77,7 @@ ClusterName string `json:"cluster_name,omitempty"` ClusterID string `json:"cluster_id,omitempty"` RecoverySeal bool `json:"recovery_seal"` + StorageType string `json:"storage_type,omitempty"` } type UnsealOpts struct { diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go 2020-12-10 21:46:52.000000000 +0000 @@ -12,12 +12,15 @@ // AuthHeaderName is the name of the header containing the token. AuthHeaderName = "X-Vault-Token" + // RequestHeaderName is the name of the header used by the Agent for + // SSRF protection. + RequestHeaderName = "X-Vault-Request" + // PerformanceReplicationALPN is the negotiated protocol used for // performance replication. PerformanceReplicationALPN = "replication_v1" - // DRReplicationALPN is the negotiated protocol used for - // dr replication. + // DRReplicationALPN is the negotiated protocol used for dr replication. DRReplicationALPN = "replication_dr_v1" PerfStandbyALPN = "perf_standby_v1" @@ -25,4 +28,8 @@ RequestForwardingALPN = "req_fw_sb-act_v1" RaftStorageALPN = "raft_storage_v1" + + // ReplicationResolverALPN is the negotiated protocol used for + // resolving replicaiton addresses + ReplicationResolverALPN = "replication_resolver_v1" ) diff -Nru consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/replication.go consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/replication.go --- consul-1.7.4+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/replication.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/hashicorp/vault/sdk/helper/consts/replication.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,6 +18,7 @@ // manager. It should contain a character that is not allowed in secondary // ids to ensure it doesn't collide. CurrentReplicatedSecondaryIdentifier = ".current" + CoreFeatureFlagPath = "core/cluster/feature-flags" ) type ReplicationState uint32 @@ -144,6 +145,10 @@ } } +func (r ReplicationState) IsPrimaryState() bool { + return r.HasState(ReplicationPerformancePrimary | ReplicationDRPrimary) +} + func (r ReplicationState) HasState(flag ReplicationState) bool { return r&flag != 0 } func (r *ReplicationState) AddState(flag ReplicationState) { *r |= flag } func (r *ReplicationState) ClearState(flag ReplicationState) { *r &= ^flag } diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/delete.go consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/delete.go --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/delete.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/delete.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,112 @@ +package pointerstructure + +import ( + "fmt" + "reflect" +) + +// Delete deletes the value specified by the pointer p in structure s. +// +// When deleting a slice index, all other elements will be shifted to +// the left. This is specified in RFC6902 (JSON Patch) and not RFC6901 since +// RFC6901 doesn't specify operations on pointers. If you don't want to +// shift elements, you should use Set to set the slice index to the zero value. +// +// The structures s must have non-zero values set up to this pointer. +// For example, if deleting "/bob/0/name", then "/bob/0" must be set already. +// +// The returned value is potentially a new value if this pointer represents +// the root document. Otherwise, the returned value will always be s. +func (p *Pointer) Delete(s interface{}) (interface{}, error) { + // if we represent the root doc, we've deleted everything + if len(p.Parts) == 0 { + return nil, nil + } + + // Save the original since this is going to be our return value + originalS := s + + // Get the parent value + var err error + s, err = p.Parent().Get(s) + if err != nil { + return nil, err + } + + // Map for lookup of getter to call for type + funcMap := map[reflect.Kind]deleteFunc{ + reflect.Array: p.deleteSlice, + reflect.Map: p.deleteMap, + reflect.Slice: p.deleteSlice, + } + + val := reflect.ValueOf(s) + for val.Kind() == reflect.Interface { + val = val.Elem() + } + + for val.Kind() == reflect.Ptr { + val = reflect.Indirect(val) + } + + f, ok := funcMap[val.Kind()] + if !ok { + return nil, fmt.Errorf("delete %s: invalid value kind: %s", p, val.Kind()) + } + + result, err := f(originalS, val) + if err != nil { + return nil, fmt.Errorf("delete %s: %s", p, err) + } + + return result, nil +} + +type deleteFunc func(interface{}, reflect.Value) (interface{}, error) + +func (p *Pointer) deleteMap(root interface{}, m reflect.Value) (interface{}, error) { + part := p.Parts[len(p.Parts)-1] + key, err := coerce(reflect.ValueOf(part), m.Type().Key()) + if err != nil { + return root, err + } + + // Delete the key + var elem reflect.Value + m.SetMapIndex(key, elem) + return root, nil +} + +func (p *Pointer) deleteSlice(root interface{}, s reflect.Value) (interface{}, error) { + // Coerce the key to an int + part := p.Parts[len(p.Parts)-1] + idxVal, err := coerce(reflect.ValueOf(part), reflect.TypeOf(42)) + if err != nil { + return root, err + } + idx := int(idxVal.Int()) + + // Verify we're within bounds + if idx < 0 || idx >= s.Len() { + return root, fmt.Errorf( + "index %d is out of range (length = %d)", idx, s.Len()) + } + + // Mimicing the following with reflection to do this: + // + // copy(a[i:], a[i+1:]) + // a[len(a)-1] = nil // or the zero value of T + // a = a[:len(a)-1] + + // copy(a[i:], a[i+1:]) + reflect.Copy(s.Slice(idx, s.Len()), s.Slice(idx+1, s.Len())) + + // a[len(a)-1] = nil // or the zero value of T + s.Index(s.Len() - 1).Set(reflect.Zero(s.Type().Elem())) + + // a = a[:len(a)-1] + s = s.Slice(0, s.Len()-1) + + // set the slice back on the parent + return p.Parent().Set(root, s.Interface()) +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/get.go consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/get.go --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/get.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/get.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,96 @@ +package pointerstructure + +import ( + "fmt" + "reflect" +) + +// Get reads the value out of the total value v. +func (p *Pointer) Get(v interface{}) (interface{}, error) { + // fast-path the empty address case to avoid reflect.ValueOf below + if len(p.Parts) == 0 { + return v, nil + } + + // Map for lookup of getter to call for type + funcMap := map[reflect.Kind]func(string, reflect.Value) (reflect.Value, error){ + reflect.Array: p.getSlice, + reflect.Map: p.getMap, + reflect.Slice: p.getSlice, + reflect.Struct: p.getStruct, + } + + currentVal := reflect.ValueOf(v) + for i, part := range p.Parts { + for currentVal.Kind() == reflect.Interface { + currentVal = currentVal.Elem() + } + + for currentVal.Kind() == reflect.Ptr { + currentVal = reflect.Indirect(currentVal) + } + + f, ok := funcMap[currentVal.Kind()] + if !ok { + return nil, fmt.Errorf( + "%s: at part %d, invalid value kind: %s", p, i, currentVal.Kind()) + } + + var err error + currentVal, err = f(part, currentVal) + if err != nil { + return nil, fmt.Errorf("%s at part %d: %s", p, i, err) + } + } + + return currentVal.Interface(), nil +} + +func (p *Pointer) getMap(part string, m reflect.Value) (reflect.Value, error) { + var zeroValue reflect.Value + + // Coerce the string part to the correct key type + key, err := coerce(reflect.ValueOf(part), m.Type().Key()) + if err != nil { + return zeroValue, err + } + + // Verify that the key exists + found := false + for _, k := range m.MapKeys() { + if k.Interface() == key.Interface() { + found = true + break + } + } + if !found { + return zeroValue, fmt.Errorf("couldn't find key %#v", key.Interface()) + } + + // Get the key + return m.MapIndex(key), nil +} + +func (p *Pointer) getSlice(part string, v reflect.Value) (reflect.Value, error) { + var zeroValue reflect.Value + + // Coerce the key to an int + idxVal, err := coerce(reflect.ValueOf(part), reflect.TypeOf(42)) + if err != nil { + return zeroValue, err + } + idx := int(idxVal.Int()) + + // Verify we're within bounds + if idx < 0 || idx >= v.Len() { + return zeroValue, fmt.Errorf( + "index %d is out of range (length = %d)", idx, v.Len()) + } + + // Get the key + return v.Index(idx), nil +} + +func (p *Pointer) getStruct(part string, m reflect.Value) (reflect.Value, error) { + return m.FieldByName(part), nil +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.mod consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.mod --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.mod 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +module github.com/mitchellh/pointerstructure + +go 1.12 + +require github.com/mitchellh/mapstructure v1.1.2 diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.sum consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.sum --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.sum 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/go.sum 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/LICENSE consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/LICENSE --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/LICENSE 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/parse.go consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/parse.go --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/parse.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/parse.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,57 @@ +package pointerstructure + +import ( + "fmt" + "strings" +) + +// Parse parses a pointer from the input string. The input string +// is expected to follow the format specified by RFC 6901: '/'-separated +// parts. Each part can contain escape codes to contain '/' or '~'. +func Parse(input string) (*Pointer, error) { + // Special case the empty case + if input == "" { + return &Pointer{}, nil + } + + // We expect the first character to be "/" + if input[0] != '/' { + return nil, fmt.Errorf( + "parse Go pointer %q: first char must be '/'", input) + } + + // Trim out the first slash so we don't have to +1 every index + input = input[1:] + + // Parse out all the parts + var parts []string + lastSlash := -1 + for i, r := range input { + if r == '/' { + parts = append(parts, input[lastSlash+1:i]) + lastSlash = i + } + } + + // Add last part + parts = append(parts, input[lastSlash+1:]) + + // Process each part for string replacement + for i, p := range parts { + // Replace ~1 followed by ~0 as specified by the RFC + parts[i] = strings.Replace( + strings.Replace(p, "~1", "/", -1), "~0", "~", -1) + } + + return &Pointer{Parts: parts}, nil +} + +// MustParse is like Parse but panics if the input cannot be parsed. +func MustParse(input string) *Pointer { + p, err := Parse(input) + if err != nil { + panic(err) + } + + return p +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/pointer.go consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/pointer.go --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/pointer.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/pointer.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,123 @@ +// Package pointerstructure provides functions for identifying a specific +// value within any Go structure using a string syntax. +// +// The syntax used is based on JSON Pointer (RFC 6901). +package pointerstructure + +import ( + "fmt" + "reflect" + "strings" + + "github.com/mitchellh/mapstructure" +) + +// Pointer represents a pointer to a specific value. You can construct +// a pointer manually or use Parse. +type Pointer struct { + // Parts are the pointer parts. No escape codes are processed here. + // The values are expected to be exact. If you have escape codes, use + // the Parse functions. + Parts []string +} + +// Get reads the value at the given pointer. +// +// This is a shorthand for calling Parse on the pointer and then calling Get +// on that result. An error will be returned if the value cannot be found or +// there is an error with the format of pointer. +func Get(value interface{}, pointer string) (interface{}, error) { + p, err := Parse(pointer) + if err != nil { + return nil, err + } + + return p.Get(value) +} + +// Set sets the value at the given pointer. +// +// This is a shorthand for calling Parse on the pointer and then calling Set +// on that result. An error will be returned if the value cannot be found or +// there is an error with the format of pointer. +// +// Set returns the complete document, which might change if the pointer value +// points to the root (""). +func Set(doc interface{}, pointer string, value interface{}) (interface{}, error) { + p, err := Parse(pointer) + if err != nil { + return nil, err + } + + return p.Set(doc, value) +} + +// String returns the string value that can be sent back to Parse to get +// the same Pointer result. +func (p *Pointer) String() string { + if len(p.Parts) == 0 { + return "" + } + + // Copy the parts so we can convert back the escapes + result := make([]string, len(p.Parts)) + copy(result, p.Parts) + for i, p := range p.Parts { + result[i] = strings.Replace( + strings.Replace(p, "~", "~0", -1), "/", "~1", -1) + + } + + return "/" + strings.Join(result, "/") +} + +// Parent returns a pointer to the parent element of this pointer. +// +// If Pointer represents the root (empty parts), a pointer representing +// the root is returned. Therefore, to check for the root, IsRoot() should be +// called. +func (p *Pointer) Parent() *Pointer { + // If this is root, then we just return a new root pointer. We allocate + // a new one though so this can still be modified. + if p.IsRoot() { + return &Pointer{} + } + + parts := make([]string, len(p.Parts)-1) + copy(parts, p.Parts[:len(p.Parts)-1]) + return &Pointer{ + Parts: parts, + } +} + +// IsRoot returns true if this pointer represents the root document. +func (p *Pointer) IsRoot() bool { + return len(p.Parts) == 0 +} + +// coerce is a helper to coerce a value to a specific type if it must +// and if its possible. If it isn't possible, an error is returned. +func coerce(value reflect.Value, to reflect.Type) (reflect.Value, error) { + // If the value is already assignable to the type, then let it go + if value.Type().AssignableTo(to) { + return value, nil + } + + // If a direct conversion is possible, do that + if value.Type().ConvertibleTo(to) { + return value.Convert(to), nil + } + + // Create a new value to hold our result + result := reflect.New(to) + + // Decode + if err := mapstructure.WeakDecode(value.Interface(), result.Interface()); err != nil { + return result, fmt.Errorf( + "couldn't convert value %#v to type %s", + value.Interface(), to.String()) + } + + // We need to indirect the value since reflect.New always creates a pointer + return reflect.Indirect(result), nil +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/README.md consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/README.md --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/README.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,74 @@ +# pointerstructure [![GoDoc](https://godoc.org/github.com/mitchellh/pointerstructure?status.svg)](https://godoc.org/github.com/mitchellh/pointerstructure) + +pointerstructure is a Go library for identifying a specific value within +any Go structure using a string syntax. + +pointerstructure is based on +[JSON Pointer (RFC 6901)](https://tools.ietf.org/html/rfc6901), but +reimplemented for Go. + +The goal of pointerstructure is to provide a single, well-known format +for addressing a specific value. This can be useful for user provided +input on structures, diffs of structures, etc. + +## Features + + * Get the value for an address + + * Set the value for an address within an existing structure + + * Delete the value at an address + + * Sorting a list of addresses + +## Installation + +Standard `go get`: + +``` +$ go get github.com/mitchellh/pointerstructure +``` + +## Usage & Example + +For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/pointerstructure). + +A quick code example is shown below: + +```go +complex := map[string]interface{}{ + "alice": 42, + "bob": []interface{}{ + map[string]interface{}{ + "name": "Bob", + }, + }, +} + +value, err := pointerstructure.Get(complex, "/bob/0/name") +if err != nil { + panic(err) +} + +fmt.Printf("%s", value) +// Output: +// Bob +``` + +Continuing the example above, you can also set values: + +```go +value, err = pointerstructure.Set(complex, "/bob/0/name", "Alice") +if err != nil { + panic(err) +} + +value, err = pointerstructure.Get(complex, "/bob/0/name") +if err != nil { + panic(err) +} + +fmt.Printf("%s", value) +// Output: +// Alice +``` diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/set.go consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/set.go --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/set.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/set.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,122 @@ +package pointerstructure + +import ( + "fmt" + "reflect" +) + +// Set writes a value v to the pointer p in structure s. +// +// The structures s must have non-zero values set up to this pointer. +// For example, if setting "/bob/0/name", then "/bob/0" must be set already. +// +// The returned value is potentially a new value if this pointer represents +// the root document. Otherwise, the returned value will always be s. +func (p *Pointer) Set(s, v interface{}) (interface{}, error) { + // if we represent the root doc, return that + if len(p.Parts) == 0 { + return v, nil + } + + // Save the original since this is going to be our return value + originalS := s + + // Get the parent value + var err error + s, err = p.Parent().Get(s) + if err != nil { + return nil, err + } + + // Map for lookup of getter to call for type + funcMap := map[reflect.Kind]setFunc{ + reflect.Array: p.setSlice, + reflect.Map: p.setMap, + reflect.Slice: p.setSlice, + } + + val := reflect.ValueOf(s) + for val.Kind() == reflect.Interface { + val = val.Elem() + } + + for val.Kind() == reflect.Ptr { + val = reflect.Indirect(val) + } + + f, ok := funcMap[val.Kind()] + if !ok { + return nil, fmt.Errorf("set %s: invalid value kind: %s", p, val.Kind()) + } + + result, err := f(originalS, val, reflect.ValueOf(v)) + if err != nil { + return nil, fmt.Errorf("set %s: %s", p, err) + } + + return result, nil +} + +type setFunc func(interface{}, reflect.Value, reflect.Value) (interface{}, error) + +func (p *Pointer) setMap(root interface{}, m, value reflect.Value) (interface{}, error) { + part := p.Parts[len(p.Parts)-1] + key, err := coerce(reflect.ValueOf(part), m.Type().Key()) + if err != nil { + return root, err + } + + elem, err := coerce(value, m.Type().Elem()) + if err != nil { + return root, err + } + + // Set the key + m.SetMapIndex(key, elem) + return root, nil +} + +func (p *Pointer) setSlice(root interface{}, s, value reflect.Value) (interface{}, error) { + // Coerce the value, we'll need that no matter what + value, err := coerce(value, s.Type().Elem()) + if err != nil { + return root, err + } + + // If the part is the special "-", that means to append it (RFC6901 4.) + part := p.Parts[len(p.Parts)-1] + if part == "-" { + return p.setSliceAppend(root, s, value) + } + + // Coerce the key to an int + idxVal, err := coerce(reflect.ValueOf(part), reflect.TypeOf(42)) + if err != nil { + return root, err + } + idx := int(idxVal.Int()) + + // Verify we're within bounds + if idx < 0 || idx >= s.Len() { + return root, fmt.Errorf( + "index %d is out of range (length = %d)", idx, s.Len()) + } + + // Set the key + s.Index(idx).Set(value) + return root, nil +} + +func (p *Pointer) setSliceAppend(root interface{}, s, value reflect.Value) (interface{}, error) { + // Coerce the value, we'll need that no matter what. This should + // be a no-op since we expect it to be done already, but there is + // a fast-path check for that in coerce so do it anyways. + value, err := coerce(value, s.Type().Elem()) + if err != nil { + return root, err + } + + // We can assume "s" is the parent of pointer value. We need to actually + // write s back because Append can return a new slice. + return p.Parent().Set(root, reflect.Append(s, value).Interface()) +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/sort.go consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/sort.go --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/sort.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/sort.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +package pointerstructure + +import ( + "sort" +) + +// Sort does an in-place sort of the pointers so that they are in order +// of least specific to most specific alphabetized. For example: +// "/foo", "/foo/0", "/qux" +// +// This ordering is ideal for applying the changes in a way that ensures +// that parents are set first. +func Sort(p []*Pointer) { sort.Sort(PointerSlice(p)) } + +// PointerSlice is a slice of pointers that adheres to sort.Interface +type PointerSlice []*Pointer + +func (p PointerSlice) Len() int { return len(p) } +func (p PointerSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p PointerSlice) Less(i, j int) bool { + // Equal number of parts, do a string compare per part + for idx, ival := range p[i].Parts { + // If we're passed the length of p[j] parts, then we're done + if idx >= len(p[j].Parts) { + break + } + + // Compare the values if they're not equal + jval := p[j].Parts[idx] + if ival != jval { + return ival < jval + } + } + + // Equal prefix, take the shorter + if len(p[i].Parts) != len(p[j].Parts) { + return len(p[i].Parts) < len(p[j].Parts) + } + + // Equal, it doesn't matter + return false +} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/.travis.yml consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/.travis.yml --- consul-1.7.4+dfsg1/vendor/github.com/mitchellh/pointerstructure/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/mitchellh/pointerstructure/.travis.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +language: go + +go: + - 1.7 + - tip + +script: + - go test + +matrix: + allow_failures: + - go: tip diff -Nru consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/.gitignore consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/.gitignore --- consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/.gitignore 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff -Nru consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/init.go consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/init.go --- consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/init.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/init.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -package seed - -import ( - crand "crypto/rand" - "fmt" - "math" - "math/big" - "math/rand" - "sync" - "sync/atomic" - "time" -) - -var ( - m sync.Mutex - secure int32 - seeded int32 -) - -func cryptoSeed() error { - defer atomic.StoreInt32(&seeded, 1) - - var err error - var n *big.Int - n, err = crand.Int(crand.Reader, big.NewInt(math.MaxInt64)) - if err != nil { - rand.Seed(time.Now().UTC().UnixNano()) - return err - } - rand.Seed(n.Int64()) - atomic.StoreInt32(&secure, 1) - return nil -} - -// Init provides best-effort seeding (which is better than running with Go's -// default seed of 1). If `/dev/urandom` is available, Init() will seed Go's -// runtime with entropy from `/dev/urandom` and return true because the runtime -// was securely seeded. If Init() has already initialized the random number or -// it had failed to securely initialize the random number generation, Init() -// will return false. See MustInit(). -func Init() (seededSecurely bool, err error) { - if atomic.LoadInt32(&seeded) == 1 { - return false, nil - } - - // Slow-path - m.Lock() - defer m.Unlock() - - if err := cryptoSeed(); err != nil { - return false, err - } - - return true, nil -} - -// MustInit provides guaranteed secure seeding. If `/dev/urandom` is not -// available, MustInit will panic() with an error indicating why reading from -// `/dev/urandom` failed. MustInit() will upgrade the seed if for some reason a -// call to Init() failed in the past. -func MustInit() { - if atomic.LoadInt32(&secure) == 1 { - return - } - - // Slow-path - m.Lock() - defer m.Unlock() - - if err := cryptoSeed(); err != nil { - panic(fmt.Sprintf("Unable to seed the random number generator: %v", err)) - } -} - -// Secure returns true if a cryptographically secure seed was used to -// initialize rand. -func Secure() bool { - return atomic.LoadInt32(&secure) == 1 -} - -// Seeded returns true if Init has seeded the random number generator. -func Seeded() bool { - return atomic.LoadInt32(&seeded) == 1 -} diff -Nru consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/LICENSE consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/LICENSE --- consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/LICENSE 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -MIT License - -Copyright (c) 2017 Sean Chittenden -Copyright (c) 2016 Alex Dadgar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -===== - -Bits of Go-lang's `once.Do()` were cribbed and reused here, too. - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -Nru consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/README.md consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/README.md --- consul-1.7.4+dfsg1/vendor/github.com/sean-/seed/README.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/github.com/sean-/seed/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# `seed` - Quickly Seed Go's Random Number Generator - -Boiler-plate to securely [seed](https://en.wikipedia.org/wiki/Random_seed) Go's -random number generator (if possible). This library isn't anything fancy, it's -just a canonical way of seeding Go's random number generator. Cribbed from -[`Nomad`](https://github.com/hashicorp/nomad/commit/f89a993ec6b91636a3384dd568898245fbc273a1) -before it was moved into -[`Consul`](https://github.com/hashicorp/consul/commit/d695bcaae6e31ee307c11fdf55bb0bf46ea9fcf4) -and made into a helper function, and now further modularized to be a super -lightweight and reusable library. - -Time is better than -[Go's default seed of `1`](https://golang.org/pkg/math/rand/#Seed), but friends -don't let friends use time as a seed to a random number generator. Use -`seed.MustInit()` instead. - -`seed.Init()` is an idempotent and reentrant call that will return an error if -it can't seed the value the first time it is called. `Init()` is reentrant. - -`seed.MustInit()` is idempotent and reentrant call that will `panic()` if it -can't seed the value the first time it is called. `MustInit()` is reentrant. - -## Usage - -``` -package mypackage - -import ( - "github.com/sean-/seed" -) - -// MustInit will panic() if it is unable to set a high-entropy random seed: -func init() { - seed.MustInit() -} - -// Or if you want to not panic() and can actually handle this error: -func init() { - if secure, err := !seed.Init(); !secure { - // Handle the error - //panic(fmt.Sprintf("Unable to securely seed Go's RNG: %v", err)) - } -} -``` diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/BUILD.bazel consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/BUILD.bazel --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/BUILD.bazel 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/BUILD.bazel 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -package(default_visibility = ["//visibility:private"]) - -load("@bazel_gazelle//:def.bzl", "gazelle") -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - -gazelle( - name = "gazelle", - command = "fix", - prefix = "gopkg.in/resty.v1", -) - -go_library( - name = "go_default_library", - srcs = glob( - ["*.go"], - exclude = ["*_test.go"], - ), - importpath = "gopkg.in/resty.v1", - visibility = ["//visibility:public"], - deps = ["@org_golang_x_net//publicsuffix:go_default_library"], -) - -go_test( - name = "go_default_test", - srcs = - glob( - ["*_test.go"], - exclude = ["example_test.go"], - ), - data = glob([".testdata/*"]), - embed = [":go_default_library"], - importpath = "gopkg.in/resty.v1", - deps = [ - "@org_golang_x_net//proxy:go_default_library", - ], -) diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/client.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/client.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/client.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,926 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "bytes" - "compress/gzip" - "crypto/tls" - "crypto/x509" - "errors" - "fmt" - "io" - "io/ioutil" - "log" - "net/http" - "net/url" - "reflect" - "regexp" - "strings" - "sync" - "time" -) - -const ( - // MethodGet HTTP method - MethodGet = "GET" - - // MethodPost HTTP method - MethodPost = "POST" - - // MethodPut HTTP method - MethodPut = "PUT" - - // MethodDelete HTTP method - MethodDelete = "DELETE" - - // MethodPatch HTTP method - MethodPatch = "PATCH" - - // MethodHead HTTP method - MethodHead = "HEAD" - - // MethodOptions HTTP method - MethodOptions = "OPTIONS" -) - -var ( - hdrUserAgentKey = http.CanonicalHeaderKey("User-Agent") - hdrAcceptKey = http.CanonicalHeaderKey("Accept") - hdrContentTypeKey = http.CanonicalHeaderKey("Content-Type") - hdrContentLengthKey = http.CanonicalHeaderKey("Content-Length") - hdrContentEncodingKey = http.CanonicalHeaderKey("Content-Encoding") - hdrAuthorizationKey = http.CanonicalHeaderKey("Authorization") - - plainTextType = "text/plain; charset=utf-8" - jsonContentType = "application/json; charset=utf-8" - formContentType = "application/x-www-form-urlencoded" - - jsonCheck = regexp.MustCompile(`(?i:(application|text)/(json|.*\+json|json\-.*)(;|$))`) - xmlCheck = regexp.MustCompile(`(?i:(application|text)/(xml|.*\+xml)(;|$))`) - - hdrUserAgentValue = "go-resty/%s (https://github.com/go-resty/resty)" - bufPool = &sync.Pool{New: func() interface{} { return &bytes.Buffer{} }} -) - -// Client type is used for HTTP/RESTful global values -// for all request raised from the client -type Client struct { - HostURL string - QueryParam url.Values - FormData url.Values - Header http.Header - UserInfo *User - Token string - Cookies []*http.Cookie - Error reflect.Type - Debug bool - DisableWarn bool - AllowGetMethodPayload bool - Log *log.Logger - RetryCount int - RetryWaitTime time.Duration - RetryMaxWaitTime time.Duration - RetryConditions []RetryConditionFunc - JSONMarshal func(v interface{}) ([]byte, error) - JSONUnmarshal func(data []byte, v interface{}) error - - jsonEscapeHTML bool - httpClient *http.Client - setContentLength bool - isHTTPMode bool - outputDirectory string - scheme string - proxyURL *url.URL - closeConnection bool - notParseResponse bool - debugBodySizeLimit int64 - logPrefix string - pathParams map[string]string - beforeRequest []func(*Client, *Request) error - udBeforeRequest []func(*Client, *Request) error - preReqHook func(*Client, *Request) error - afterResponse []func(*Client, *Response) error - requestLog func(*RequestLog) error - responseLog func(*ResponseLog) error -} - -// User type is to hold an username and password information -type User struct { - Username, Password string -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Client methods -//___________________________________ - -// SetHostURL method is to set Host URL in the client instance. It will be used with request -// raised from this client with relative URL -// // Setting HTTP address -// resty.SetHostURL("http://myjeeva.com") -// -// // Setting HTTPS address -// resty.SetHostURL("https://myjeeva.com") -// -func (c *Client) SetHostURL(url string) *Client { - c.HostURL = strings.TrimRight(url, "/") - return c -} - -// SetHeader method sets a single header field and its value in the client instance. -// These headers will be applied to all requests raised from this client instance. -// Also it can be overridden at request level header options, see `resty.R().SetHeader` -// or `resty.R().SetHeaders`. -// -// Example: To set `Content-Type` and `Accept` as `application/json` -// -// resty. -// SetHeader("Content-Type", "application/json"). -// SetHeader("Accept", "application/json") -// -func (c *Client) SetHeader(header, value string) *Client { - c.Header.Set(header, value) - return c -} - -// SetHeaders method sets multiple headers field and its values at one go in the client instance. -// These headers will be applied to all requests raised from this client instance. Also it can be -// overridden at request level headers options, see `resty.R().SetHeaders` or `resty.R().SetHeader`. -// -// Example: To set `Content-Type` and `Accept` as `application/json` -// -// resty.SetHeaders(map[string]string{ -// "Content-Type": "application/json", -// "Accept": "application/json", -// }) -// -func (c *Client) SetHeaders(headers map[string]string) *Client { - for h, v := range headers { - c.Header.Set(h, v) - } - - return c -} - -// SetCookieJar method sets custom http.CookieJar in the resty client. Its way to override default. -// Example: sometimes we don't want to save cookies in api contacting, we can remove the default -// CookieJar in resty client. -// -// resty.SetCookieJar(nil) -// -func (c *Client) SetCookieJar(jar http.CookieJar) *Client { - c.httpClient.Jar = jar - return c -} - -// SetCookie method appends a single cookie in the client instance. -// These cookies will be added to all the request raised from this client instance. -// resty.SetCookie(&http.Cookie{ -// Name:"go-resty", -// Value:"This is cookie value", -// Path: "/", -// Domain: "sample.com", -// MaxAge: 36000, -// HttpOnly: true, -// Secure: false, -// }) -// -func (c *Client) SetCookie(hc *http.Cookie) *Client { - c.Cookies = append(c.Cookies, hc) - return c -} - -// SetCookies method sets an array of cookies in the client instance. -// These cookies will be added to all the request raised from this client instance. -// cookies := make([]*http.Cookie, 0) -// -// cookies = append(cookies, &http.Cookie{ -// Name:"go-resty-1", -// Value:"This is cookie 1 value", -// Path: "/", -// Domain: "sample.com", -// MaxAge: 36000, -// HttpOnly: true, -// Secure: false, -// }) -// -// cookies = append(cookies, &http.Cookie{ -// Name:"go-resty-2", -// Value:"This is cookie 2 value", -// Path: "/", -// Domain: "sample.com", -// MaxAge: 36000, -// HttpOnly: true, -// Secure: false, -// }) -// -// // Setting a cookies into resty -// resty.SetCookies(cookies) -// -func (c *Client) SetCookies(cs []*http.Cookie) *Client { - c.Cookies = append(c.Cookies, cs...) - return c -} - -// SetQueryParam method sets single parameter and its value in the client instance. -// It will be formed as query string for the request. For example: `search=kitchen%20papers&size=large` -// in the URL after `?` mark. These query params will be added to all the request raised from -// this client instance. Also it can be overridden at request level Query Param options, -// see `resty.R().SetQueryParam` or `resty.R().SetQueryParams`. -// resty. -// SetQueryParam("search", "kitchen papers"). -// SetQueryParam("size", "large") -// -func (c *Client) SetQueryParam(param, value string) *Client { - c.QueryParam.Set(param, value) - return c -} - -// SetQueryParams method sets multiple parameters and their values at one go in the client instance. -// It will be formed as query string for the request. For example: `search=kitchen%20papers&size=large` -// in the URL after `?` mark. These query params will be added to all the request raised from this -// client instance. Also it can be overridden at request level Query Param options, -// see `resty.R().SetQueryParams` or `resty.R().SetQueryParam`. -// resty.SetQueryParams(map[string]string{ -// "search": "kitchen papers", -// "size": "large", -// }) -// -func (c *Client) SetQueryParams(params map[string]string) *Client { - for p, v := range params { - c.SetQueryParam(p, v) - } - - return c -} - -// SetFormData method sets Form parameters and their values in the client instance. -// It's applicable only HTTP method `POST` and `PUT` and requets content type would be set as -// `application/x-www-form-urlencoded`. These form data will be added to all the request raised from -// this client instance. Also it can be overridden at request level form data, see `resty.R().SetFormData`. -// resty.SetFormData(map[string]string{ -// "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F", -// "user_id": "3455454545", -// }) -// -func (c *Client) SetFormData(data map[string]string) *Client { - for k, v := range data { - c.FormData.Set(k, v) - } - - return c -} - -// SetBasicAuth method sets the basic authentication header in the HTTP request. Example: -// Authorization: Basic -// -// Example: To set the header for username "go-resty" and password "welcome" -// resty.SetBasicAuth("go-resty", "welcome") -// -// This basic auth information gets added to all the request rasied from this client instance. -// Also it can be overridden or set one at the request level is supported, see `resty.R().SetBasicAuth`. -// -func (c *Client) SetBasicAuth(username, password string) *Client { - c.UserInfo = &User{Username: username, Password: password} - return c -} - -// SetAuthToken method sets bearer auth token header in the HTTP request. Example: -// Authorization: Bearer -// -// Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F -// -// resty.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F") -// -// This bearer auth token gets added to all the request rasied from this client instance. -// Also it can be overridden or set one at the request level is supported, see `resty.R().SetAuthToken`. -// -func (c *Client) SetAuthToken(token string) *Client { - c.Token = token - return c -} - -// R method creates a request instance, its used for Get, Post, Put, Delete, Patch, Head and Options. -func (c *Client) R() *Request { - r := &Request{ - QueryParam: url.Values{}, - FormData: url.Values{}, - Header: http.Header{}, - - client: c, - multipartFiles: []*File{}, - multipartFields: []*MultipartField{}, - pathParams: map[string]string{}, - jsonEscapeHTML: true, - } - - return r -} - -// NewRequest is an alias for R(). Creates a request instance, its used for -// Get, Post, Put, Delete, Patch, Head and Options. -func (c *Client) NewRequest() *Request { - return c.R() -} - -// OnBeforeRequest method appends request middleware into the before request chain. -// Its gets applied after default `go-resty` request middlewares and before request -// been sent from `go-resty` to host server. -// resty.OnBeforeRequest(func(c *resty.Client, r *resty.Request) error { -// // Now you have access to Client and Request instance -// // manipulate it as per your need -// -// return nil // if its success otherwise return error -// }) -// -func (c *Client) OnBeforeRequest(m func(*Client, *Request) error) *Client { - c.udBeforeRequest = append(c.udBeforeRequest, m) - return c -} - -// OnAfterResponse method appends response middleware into the after response chain. -// Once we receive response from host server, default `go-resty` response middleware -// gets applied and then user assigened response middlewares applied. -// resty.OnAfterResponse(func(c *resty.Client, r *resty.Response) error { -// // Now you have access to Client and Response instance -// // manipulate it as per your need -// -// return nil // if its success otherwise return error -// }) -// -func (c *Client) OnAfterResponse(m func(*Client, *Response) error) *Client { - c.afterResponse = append(c.afterResponse, m) - return c -} - -// SetPreRequestHook method sets the given pre-request function into resty client. -// It is called right before the request is fired. -// -// Note: Only one pre-request hook can be registered. Use `resty.OnBeforeRequest` for mutilple. -func (c *Client) SetPreRequestHook(h func(*Client, *Request) error) *Client { - if c.preReqHook != nil { - c.Log.Printf("Overwriting an existing pre-request hook: %s", functionName(h)) - } - c.preReqHook = h - return c -} - -// SetDebug method enables the debug mode on `go-resty` client. Client logs details of every request and response. -// For `Request` it logs information such as HTTP verb, Relative URL path, Host, Headers, Body if it has one. -// For `Response` it logs information such as Status, Response Time, Headers, Body if it has one. -// resty.SetDebug(true) -// -func (c *Client) SetDebug(d bool) *Client { - c.Debug = d - return c -} - -// SetDebugBodyLimit sets the maximum size for which the response body will be logged in debug mode. -// resty.SetDebugBodyLimit(1000000) -// -func (c *Client) SetDebugBodyLimit(sl int64) *Client { - c.debugBodySizeLimit = sl - return c -} - -// OnRequestLog method used to set request log callback into resty. Registered callback gets -// called before the resty actually logs the information. -func (c *Client) OnRequestLog(rl func(*RequestLog) error) *Client { - if c.requestLog != nil { - c.Log.Printf("Overwriting an existing on-request-log callback from=%s to=%s", functionName(c.requestLog), functionName(rl)) - } - c.requestLog = rl - return c -} - -// OnResponseLog method used to set response log callback into resty. Registered callback gets -// called before the resty actually logs the information. -func (c *Client) OnResponseLog(rl func(*ResponseLog) error) *Client { - if c.responseLog != nil { - c.Log.Printf("Overwriting an existing on-response-log callback from=%s to=%s", functionName(c.responseLog), functionName(rl)) - } - c.responseLog = rl - return c -} - -// SetDisableWarn method disables the warning message on `go-resty` client. -// For example: go-resty warns the user when BasicAuth used on HTTP mode. -// resty.SetDisableWarn(true) -// -func (c *Client) SetDisableWarn(d bool) *Client { - c.DisableWarn = d - return c -} - -// SetAllowGetMethodPayload method allows the GET method with payload on `go-resty` client. -// For example: go-resty allows the user sends request with a payload on HTTP GET method. -// resty.SetAllowGetMethodPayload(true) -// -func (c *Client) SetAllowGetMethodPayload(a bool) *Client { - c.AllowGetMethodPayload = a - return c -} - -// SetLogger method sets given writer for logging go-resty request and response details. -// Default is os.Stderr -// file, _ := os.OpenFile("/Users/jeeva/go-resty.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) -// -// resty.SetLogger(file) -// -func (c *Client) SetLogger(w io.Writer) *Client { - c.Log = getLogger(w) - return c -} - -// SetContentLength method enables the HTTP header `Content-Length` value for every request. -// By default go-resty won't set `Content-Length`. -// resty.SetContentLength(true) -// -// Also you have an option to enable for particular request. See `resty.R().SetContentLength` -// -func (c *Client) SetContentLength(l bool) *Client { - c.setContentLength = l - return c -} - -// SetTimeout method sets timeout for request raised from client. -// resty.SetTimeout(time.Duration(1 * time.Minute)) -// -func (c *Client) SetTimeout(timeout time.Duration) *Client { - c.httpClient.Timeout = timeout - return c -} - -// SetError method is to register the global or client common `Error` object into go-resty. -// It is used for automatic unmarshalling if response status code is greater than 399 and -// content type either JSON or XML. Can be pointer or non-pointer. -// resty.SetError(&Error{}) -// // OR -// resty.SetError(Error{}) -// -func (c *Client) SetError(err interface{}) *Client { - c.Error = typeOf(err) - return c -} - -// SetRedirectPolicy method sets the client redirect poilicy. go-resty provides ready to use -// redirect policies. Wanna create one for yourself refer `redirect.go`. -// -// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20)) -// -// // Need multiple redirect policies together -// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20), DomainCheckRedirectPolicy("host1.com", "host2.net")) -// -func (c *Client) SetRedirectPolicy(policies ...interface{}) *Client { - for _, p := range policies { - if _, ok := p.(RedirectPolicy); !ok { - c.Log.Printf("ERORR: %v does not implement resty.RedirectPolicy (missing Apply method)", - functionName(p)) - } - } - - c.httpClient.CheckRedirect = func(req *http.Request, via []*http.Request) error { - for _, p := range policies { - if err := p.(RedirectPolicy).Apply(req, via); err != nil { - return err - } - } - return nil // looks good, go ahead - } - - return c -} - -// SetRetryCount method enables retry on `go-resty` client and allows you -// to set no. of retry count. Resty uses a Backoff mechanism. -func (c *Client) SetRetryCount(count int) *Client { - c.RetryCount = count - return c -} - -// SetRetryWaitTime method sets default wait time to sleep before retrying -// request. -// Default is 100 milliseconds. -func (c *Client) SetRetryWaitTime(waitTime time.Duration) *Client { - c.RetryWaitTime = waitTime - return c -} - -// SetRetryMaxWaitTime method sets max wait time to sleep before retrying -// request. -// Default is 2 seconds. -func (c *Client) SetRetryMaxWaitTime(maxWaitTime time.Duration) *Client { - c.RetryMaxWaitTime = maxWaitTime - return c -} - -// AddRetryCondition method adds a retry condition function to array of functions -// that are checked to determine if the request is retried. The request will -// retry if any of the functions return true and error is nil. -func (c *Client) AddRetryCondition(condition RetryConditionFunc) *Client { - c.RetryConditions = append(c.RetryConditions, condition) - return c -} - -// SetHTTPMode method sets go-resty mode to 'http' -func (c *Client) SetHTTPMode() *Client { - return c.SetMode("http") -} - -// SetRESTMode method sets go-resty mode to 'rest' -func (c *Client) SetRESTMode() *Client { - return c.SetMode("rest") -} - -// SetMode method sets go-resty client mode to given value such as 'http' & 'rest'. -// 'rest': -// - No Redirect -// - Automatic response unmarshal if it is JSON or XML -// 'http': -// - Up to 10 Redirects -// - No automatic unmarshall. Response will be treated as `response.String()` -// -// If you want more redirects, use FlexibleRedirectPolicy -// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20)) -// -func (c *Client) SetMode(mode string) *Client { - // HTTP - if mode == "http" { - c.isHTTPMode = true - c.SetRedirectPolicy(FlexibleRedirectPolicy(10)) - c.afterResponse = []func(*Client, *Response) error{ - responseLogger, - saveResponseIntoFile, - } - return c - } - - // RESTful - c.isHTTPMode = false - c.SetRedirectPolicy(NoRedirectPolicy()) - c.afterResponse = []func(*Client, *Response) error{ - responseLogger, - parseResponseBody, - saveResponseIntoFile, - } - return c -} - -// Mode method returns the current client mode. Typically its a "http" or "rest". -// Default is "rest" -func (c *Client) Mode() string { - if c.isHTTPMode { - return "http" - } - return "rest" -} - -// SetTLSClientConfig method sets TLSClientConfig for underling client Transport. -// -// Example: -// // One can set custom root-certificate. Refer: http://golang.org/pkg/crypto/tls/#example_Dial -// resty.SetTLSClientConfig(&tls.Config{ RootCAs: roots }) -// -// // or One can disable security check (https) -// resty.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true }) -// Note: This method overwrites existing `TLSClientConfig`. -// -func (c *Client) SetTLSClientConfig(config *tls.Config) *Client { - transport, err := c.getTransport() - if err != nil { - c.Log.Printf("ERROR %v", err) - return c - } - transport.TLSClientConfig = config - return c -} - -// SetProxy method sets the Proxy URL and Port for resty client. -// resty.SetProxy("http://proxyserver:8888") -// -// Alternatives: At request level proxy, see `Request.SetProxy`. OR Without this `SetProxy` method, -// you can also set Proxy via environment variable. By default `Go` uses setting from `HTTP_PROXY`. -// -func (c *Client) SetProxy(proxyURL string) *Client { - transport, err := c.getTransport() - if err != nil { - c.Log.Printf("ERROR %v", err) - return c - } - - if pURL, err := url.Parse(proxyURL); err == nil { - c.proxyURL = pURL - transport.Proxy = http.ProxyURL(c.proxyURL) - } else { - c.Log.Printf("ERROR %v", err) - c.RemoveProxy() - } - return c -} - -// RemoveProxy method removes the proxy configuration from resty client -// resty.RemoveProxy() -// -func (c *Client) RemoveProxy() *Client { - transport, err := c.getTransport() - if err != nil { - c.Log.Printf("ERROR %v", err) - return c - } - c.proxyURL = nil - transport.Proxy = nil - return c -} - -// SetCertificates method helps to set client certificates into resty conveniently. -// -func (c *Client) SetCertificates(certs ...tls.Certificate) *Client { - config, err := c.getTLSConfig() - if err != nil { - c.Log.Printf("ERROR %v", err) - return c - } - config.Certificates = append(config.Certificates, certs...) - return c -} - -// SetRootCertificate method helps to add one or more root certificates into resty client -// resty.SetRootCertificate("/path/to/root/pemFile.pem") -// -func (c *Client) SetRootCertificate(pemFilePath string) *Client { - rootPemData, err := ioutil.ReadFile(pemFilePath) - if err != nil { - c.Log.Printf("ERROR %v", err) - return c - } - - config, err := c.getTLSConfig() - if err != nil { - c.Log.Printf("ERROR %v", err) - return c - } - if config.RootCAs == nil { - config.RootCAs = x509.NewCertPool() - } - - config.RootCAs.AppendCertsFromPEM(rootPemData) - - return c -} - -// SetOutputDirectory method sets output directory for saving HTTP response into file. -// If the output directory not exists then resty creates one. This setting is optional one, -// if you're planning using absoule path in `Request.SetOutput` and can used together. -// resty.SetOutputDirectory("/save/http/response/here") -// -func (c *Client) SetOutputDirectory(dirPath string) *Client { - c.outputDirectory = dirPath - return c -} - -// SetTransport method sets custom `*http.Transport` or any `http.RoundTripper` -// compatible interface implementation in the resty client. -// -// NOTE: -// -// - If transport is not type of `*http.Transport` then you may not be able to -// take advantage of some of the `resty` client settings. -// -// - It overwrites the resty client transport instance and it's configurations. -// -// transport := &http.Transport{ -// // somthing like Proxying to httptest.Server, etc... -// Proxy: func(req *http.Request) (*url.URL, error) { -// return url.Parse(server.URL) -// }, -// } -// -// resty.SetTransport(transport) -// -func (c *Client) SetTransport(transport http.RoundTripper) *Client { - if transport != nil { - c.httpClient.Transport = transport - } - return c -} - -// SetScheme method sets custom scheme in the resty client. It's way to override default. -// resty.SetScheme("http") -// -func (c *Client) SetScheme(scheme string) *Client { - if !IsStringEmpty(scheme) { - c.scheme = scheme - } - - return c -} - -// SetCloseConnection method sets variable `Close` in http request struct with the given -// value. More info: https://golang.org/src/net/http/request.go -func (c *Client) SetCloseConnection(close bool) *Client { - c.closeConnection = close - return c -} - -// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically. -// Resty exposes the raw response body as `io.ReadCloser`. Also do not forget to close the body, -// otherwise you might get into connection leaks, no connection reuse. -// -// Please Note: Response middlewares are not applicable, if you use this option. Basically you have -// taken over the control of response parsing from `Resty`. -func (c *Client) SetDoNotParseResponse(parse bool) *Client { - c.notParseResponse = parse - return c -} - -// SetLogPrefix method sets the Resty logger prefix value. -func (c *Client) SetLogPrefix(prefix string) *Client { - c.logPrefix = prefix - c.Log.SetPrefix(prefix) - return c -} - -// SetPathParams method sets multiple URL path key-value pairs at one go in the -// resty client instance. -// resty.SetPathParams(map[string]string{ -// "userId": "sample@sample.com", -// "subAccountId": "100002", -// }) -// -// Result: -// URL - /v1/users/{userId}/{subAccountId}/details -// Composed URL - /v1/users/sample@sample.com/100002/details -// It replace the value of the key while composing request URL. Also it can be -// overridden at request level Path Params options, see `Request.SetPathParams`. -func (c *Client) SetPathParams(params map[string]string) *Client { - for p, v := range params { - c.pathParams[p] = v - } - return c -} - -// SetJSONEscapeHTML method is to enable/disable the HTML escape on JSON marshal. -// -// NOTE: This option only applicable to standard JSON Marshaller. -func (c *Client) SetJSONEscapeHTML(b bool) *Client { - c.jsonEscapeHTML = b - return c -} - -// IsProxySet method returns the true if proxy is set on client otherwise false. -func (c *Client) IsProxySet() bool { - return c.proxyURL != nil -} - -// GetClient method returns the current http.Client used by the resty client. -func (c *Client) GetClient() *http.Client { - return c.httpClient -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Client Unexported methods -//___________________________________ - -// executes the given `Request` object and returns response -func (c *Client) execute(req *Request) (*Response, error) { - defer releaseBuffer(req.bodyBuf) - // Apply Request middleware - var err error - - // user defined on before request methods - // to modify the *resty.Request object - for _, f := range c.udBeforeRequest { - if err = f(c, req); err != nil { - return nil, err - } - } - - // resty middlewares - for _, f := range c.beforeRequest { - if err = f(c, req); err != nil { - return nil, err - } - } - - // call pre-request if defined - if c.preReqHook != nil { - if err = c.preReqHook(c, req); err != nil { - return nil, err - } - } - - if hostHeader := req.Header.Get("Host"); hostHeader != "" { - req.RawRequest.Host = hostHeader - } - - if err = requestLogger(c, req); err != nil { - return nil, err - } - - req.Time = time.Now() - resp, err := c.httpClient.Do(req.RawRequest) - - response := &Response{ - Request: req, - RawResponse: resp, - receivedAt: time.Now(), - } - - if err != nil || req.notParseResponse || c.notParseResponse { - return response, err - } - - if !req.isSaveResponse { - defer closeq(resp.Body) - body := resp.Body - - // GitHub #142 & #187 - if strings.EqualFold(resp.Header.Get(hdrContentEncodingKey), "gzip") && resp.ContentLength != 0 { - if _, ok := body.(*gzip.Reader); !ok { - body, err = gzip.NewReader(body) - if err != nil { - return response, err - } - defer closeq(body) - } - } - - if response.body, err = ioutil.ReadAll(body); err != nil { - return response, err - } - - response.size = int64(len(response.body)) - } - - // Apply Response middleware - for _, f := range c.afterResponse { - if err = f(c, response); err != nil { - break - } - } - - return response, err -} - -// enables a log prefix -func (c *Client) enableLogPrefix() { - c.Log.SetFlags(log.LstdFlags) - c.Log.SetPrefix(c.logPrefix) -} - -// disables a log prefix -func (c *Client) disableLogPrefix() { - c.Log.SetFlags(0) - c.Log.SetPrefix("") -} - -// getting TLS client config if not exists then create one -func (c *Client) getTLSConfig() (*tls.Config, error) { - transport, err := c.getTransport() - if err != nil { - return nil, err - } - if transport.TLSClientConfig == nil { - transport.TLSClientConfig = &tls.Config{} - } - return transport.TLSClientConfig, nil -} - -// returns `*http.Transport` currently in use or error -// in case currently used `transport` is not an `*http.Transport` -func (c *Client) getTransport() (*http.Transport, error) { - if c.httpClient.Transport == nil { - c.SetTransport(new(http.Transport)) - } - - if transport, ok := c.httpClient.Transport.(*http.Transport); ok { - return transport, nil - } - return nil, errors.New("current transport is not an *http.Transport instance") -} - -// -// File -// - -// File represent file information for multipart request -type File struct { - Name string - ParamName string - io.Reader -} - -// String returns string value of current file details -func (f *File) String() string { - return fmt.Sprintf("ParamName: %v; FileName: %v", f.ParamName, f.Name) -} - -// MultipartField represent custom data part for multipart request -type MultipartField struct { - Param string - FileName string - ContentType string - io.Reader -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/default.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/default.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/default.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/default.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "crypto/tls" - "encoding/json" - "io" - "math" - "net/http" - "net/http/cookiejar" - "net/url" - "os" - "time" - - "golang.org/x/net/publicsuffix" -) - -// DefaultClient of resty -var DefaultClient *Client - -// New method creates a new go-resty client. -func New() *Client { - cookieJar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) - return createClient(&http.Client{Jar: cookieJar}) -} - -// NewWithClient method create a new go-resty client with given `http.Client`. -func NewWithClient(hc *http.Client) *Client { - return createClient(hc) -} - -// R creates a new resty request object, it is used form a HTTP/RESTful request -// such as GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS. -func R() *Request { - return DefaultClient.R() -} - -// NewRequest is an alias for R(). Creates a new resty request object, it is used form a HTTP/RESTful request -// such as GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS. -func NewRequest() *Request { - return R() -} - -// SetHostURL sets Host URL. See `Client.SetHostURL for more information. -func SetHostURL(url string) *Client { - return DefaultClient.SetHostURL(url) -} - -// SetHeader sets single header. See `Client.SetHeader` for more information. -func SetHeader(header, value string) *Client { - return DefaultClient.SetHeader(header, value) -} - -// SetHeaders sets multiple headers. See `Client.SetHeaders` for more information. -func SetHeaders(headers map[string]string) *Client { - return DefaultClient.SetHeaders(headers) -} - -// SetCookieJar sets custom http.CookieJar. See `Client.SetCookieJar` for more information. -func SetCookieJar(jar http.CookieJar) *Client { - return DefaultClient.SetCookieJar(jar) -} - -// SetCookie sets single cookie object. See `Client.SetCookie` for more information. -func SetCookie(hc *http.Cookie) *Client { - return DefaultClient.SetCookie(hc) -} - -// SetCookies sets multiple cookie object. See `Client.SetCookies` for more information. -func SetCookies(cs []*http.Cookie) *Client { - return DefaultClient.SetCookies(cs) -} - -// SetQueryParam method sets single parameter and its value. See `Client.SetQueryParam` for more information. -func SetQueryParam(param, value string) *Client { - return DefaultClient.SetQueryParam(param, value) -} - -// SetQueryParams method sets multiple parameters and its value. See `Client.SetQueryParams` for more information. -func SetQueryParams(params map[string]string) *Client { - return DefaultClient.SetQueryParams(params) -} - -// SetFormData method sets Form parameters and its values. See `Client.SetFormData` for more information. -func SetFormData(data map[string]string) *Client { - return DefaultClient.SetFormData(data) -} - -// SetBasicAuth method sets the basic authentication header. See `Client.SetBasicAuth` for more information. -func SetBasicAuth(username, password string) *Client { - return DefaultClient.SetBasicAuth(username, password) -} - -// SetAuthToken method sets bearer auth token header. See `Client.SetAuthToken` for more information. -func SetAuthToken(token string) *Client { - return DefaultClient.SetAuthToken(token) -} - -// OnBeforeRequest method sets request middleware. See `Client.OnBeforeRequest` for more information. -func OnBeforeRequest(m func(*Client, *Request) error) *Client { - return DefaultClient.OnBeforeRequest(m) -} - -// OnAfterResponse method sets response middleware. See `Client.OnAfterResponse` for more information. -func OnAfterResponse(m func(*Client, *Response) error) *Client { - return DefaultClient.OnAfterResponse(m) -} - -// SetPreRequestHook method sets the pre-request hook. See `Client.SetPreRequestHook` for more information. -func SetPreRequestHook(h func(*Client, *Request) error) *Client { - return DefaultClient.SetPreRequestHook(h) -} - -// SetDebug method enables the debug mode. See `Client.SetDebug` for more information. -func SetDebug(d bool) *Client { - return DefaultClient.SetDebug(d) -} - -// SetDebugBodyLimit method sets the response body limit for debug mode. See `Client.SetDebugBodyLimit` for more information. -func SetDebugBodyLimit(sl int64) *Client { - return DefaultClient.SetDebugBodyLimit(sl) -} - -// SetAllowGetMethodPayload method allows the GET method with payload. See `Client.SetAllowGetMethodPayload` for more information. -func SetAllowGetMethodPayload(a bool) *Client { - return DefaultClient.SetAllowGetMethodPayload(a) -} - -// SetRetryCount method sets the retry count. See `Client.SetRetryCount` for more information. -func SetRetryCount(count int) *Client { - return DefaultClient.SetRetryCount(count) -} - -// SetRetryWaitTime method sets the retry wait time. See `Client.SetRetryWaitTime` for more information. -func SetRetryWaitTime(waitTime time.Duration) *Client { - return DefaultClient.SetRetryWaitTime(waitTime) -} - -// SetRetryMaxWaitTime method sets the retry max wait time. See `Client.SetRetryMaxWaitTime` for more information. -func SetRetryMaxWaitTime(maxWaitTime time.Duration) *Client { - return DefaultClient.SetRetryMaxWaitTime(maxWaitTime) -} - -// AddRetryCondition method appends check function for retry. See `Client.AddRetryCondition` for more information. -func AddRetryCondition(condition RetryConditionFunc) *Client { - return DefaultClient.AddRetryCondition(condition) -} - -// SetDisableWarn method disables warning comes from `go-resty` client. See `Client.SetDisableWarn` for more information. -func SetDisableWarn(d bool) *Client { - return DefaultClient.SetDisableWarn(d) -} - -// SetLogger method sets given writer for logging. See `Client.SetLogger` for more information. -func SetLogger(w io.Writer) *Client { - return DefaultClient.SetLogger(w) -} - -// SetContentLength method enables `Content-Length` value. See `Client.SetContentLength` for more information. -func SetContentLength(l bool) *Client { - return DefaultClient.SetContentLength(l) -} - -// SetError method is to register the global or client common `Error` object. See `Client.SetError` for more information. -func SetError(err interface{}) *Client { - return DefaultClient.SetError(err) -} - -// SetRedirectPolicy method sets the client redirect poilicy. See `Client.SetRedirectPolicy` for more information. -func SetRedirectPolicy(policies ...interface{}) *Client { - return DefaultClient.SetRedirectPolicy(policies...) -} - -// SetHTTPMode method sets go-resty mode into HTTP. See `Client.SetMode` for more information. -func SetHTTPMode() *Client { - return DefaultClient.SetHTTPMode() -} - -// SetRESTMode method sets go-resty mode into RESTful. See `Client.SetMode` for more information. -func SetRESTMode() *Client { - return DefaultClient.SetRESTMode() -} - -// Mode method returns the current client mode. See `Client.Mode` for more information. -func Mode() string { - return DefaultClient.Mode() -} - -// SetTLSClientConfig method sets TLSClientConfig for underling client Transport. See `Client.SetTLSClientConfig` for more information. -func SetTLSClientConfig(config *tls.Config) *Client { - return DefaultClient.SetTLSClientConfig(config) -} - -// SetTimeout method sets timeout for request. See `Client.SetTimeout` for more information. -func SetTimeout(timeout time.Duration) *Client { - return DefaultClient.SetTimeout(timeout) -} - -// SetProxy method sets Proxy for request. See `Client.SetProxy` for more information. -func SetProxy(proxyURL string) *Client { - return DefaultClient.SetProxy(proxyURL) -} - -// RemoveProxy method removes the proxy configuration. See `Client.RemoveProxy` for more information. -func RemoveProxy() *Client { - return DefaultClient.RemoveProxy() -} - -// SetCertificates method helps to set client certificates into resty conveniently. -// See `Client.SetCertificates` for more information and example. -func SetCertificates(certs ...tls.Certificate) *Client { - return DefaultClient.SetCertificates(certs...) -} - -// SetRootCertificate method helps to add one or more root certificates into resty client. -// See `Client.SetRootCertificate` for more information. -func SetRootCertificate(pemFilePath string) *Client { - return DefaultClient.SetRootCertificate(pemFilePath) -} - -// SetOutputDirectory method sets output directory. See `Client.SetOutputDirectory` for more information. -func SetOutputDirectory(dirPath string) *Client { - return DefaultClient.SetOutputDirectory(dirPath) -} - -// SetTransport method sets custom `*http.Transport` or any `http.RoundTripper` -// compatible interface implementation in the resty client. -// See `Client.SetTransport` for more information. -func SetTransport(transport http.RoundTripper) *Client { - return DefaultClient.SetTransport(transport) -} - -// SetScheme method sets custom scheme in the resty client. -// See `Client.SetScheme` for more information. -func SetScheme(scheme string) *Client { - return DefaultClient.SetScheme(scheme) -} - -// SetCloseConnection method sets close connection value in the resty client. -// See `Client.SetCloseConnection` for more information. -func SetCloseConnection(close bool) *Client { - return DefaultClient.SetCloseConnection(close) -} - -// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically. -// See `Client.SetDoNotParseResponse` for more information. -func SetDoNotParseResponse(parse bool) *Client { - return DefaultClient.SetDoNotParseResponse(parse) -} - -// SetPathParams method sets the Request path parameter key-value pairs. See -// `Client.SetPathParams` for more information. -func SetPathParams(params map[string]string) *Client { - return DefaultClient.SetPathParams(params) -} - -// IsProxySet method returns the true if proxy is set on client otherwise false. -// See `Client.IsProxySet` for more information. -func IsProxySet() bool { - return DefaultClient.IsProxySet() -} - -// GetClient method returns the current `http.Client` used by the default resty client. -func GetClient() *http.Client { - return DefaultClient.httpClient -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Unexported methods -//___________________________________ - -func createClient(hc *http.Client) *Client { - c := &Client{ - HostURL: "", - QueryParam: url.Values{}, - FormData: url.Values{}, - Header: http.Header{}, - UserInfo: nil, - Token: "", - Cookies: make([]*http.Cookie, 0), - Debug: false, - Log: getLogger(os.Stderr), - RetryCount: 0, - RetryWaitTime: defaultWaitTime, - RetryMaxWaitTime: defaultMaxWaitTime, - JSONMarshal: json.Marshal, - JSONUnmarshal: json.Unmarshal, - jsonEscapeHTML: true, - httpClient: hc, - debugBodySizeLimit: math.MaxInt32, - pathParams: make(map[string]string), - } - - // Log Prefix - c.SetLogPrefix("RESTY ") - - // Default redirect policy - c.SetRedirectPolicy(NoRedirectPolicy()) - - // default before request middlewares - c.beforeRequest = []func(*Client, *Request) error{ - parseRequestURL, - parseRequestHeader, - parseRequestBody, - createHTTPRequest, - addCredentials, - } - - // user defined request middlewares - c.udBeforeRequest = []func(*Client, *Request) error{} - - // default after response middlewares - c.afterResponse = []func(*Client, *Response) error{ - responseLogger, - parseResponseBody, - saveResponseIntoFile, - } - - return c -} - -func init() { - DefaultClient = New() -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/.gitignore consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/.gitignore --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/.gitignore 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof - -coverage.out -coverage.txt -go.sum diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/go.mod consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/go.mod --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/go.mod 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/go.mod 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -module gopkg.in/resty.v1 - -require golang.org/x/net v0.0.0-20181220203305-927f97764cc3 diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/LICENSE consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/LICENSE --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/LICENSE 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2019 Jeevanandam M., https://myjeeva.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/middleware.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/middleware.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/middleware.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/middleware.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,469 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "bytes" - "encoding/xml" - "errors" - "fmt" - "io" - "mime/multipart" - "net/http" - "net/url" - "os" - "path/filepath" - "reflect" - "strings" - "time" -) - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Request Middleware(s) -//___________________________________ - -func parseRequestURL(c *Client, r *Request) error { - // GitHub #103 Path Params - if len(r.pathParams) > 0 { - for p, v := range r.pathParams { - r.URL = strings.Replace(r.URL, "{"+p+"}", url.PathEscape(v), -1) - } - } - if len(c.pathParams) > 0 { - for p, v := range c.pathParams { - r.URL = strings.Replace(r.URL, "{"+p+"}", url.PathEscape(v), -1) - } - } - - // Parsing request URL - reqURL, err := url.Parse(r.URL) - if err != nil { - return err - } - - // If Request.URL is relative path then added c.HostURL into - // the request URL otherwise Request.URL will be used as-is - if !reqURL.IsAbs() { - r.URL = reqURL.String() - if len(r.URL) > 0 && r.URL[0] != '/' { - r.URL = "/" + r.URL - } - - reqURL, err = url.Parse(c.HostURL + r.URL) - if err != nil { - return err - } - } - - // Adding Query Param - query := make(url.Values) - for k, v := range c.QueryParam { - for _, iv := range v { - query.Add(k, iv) - } - } - - for k, v := range r.QueryParam { - // remove query param from client level by key - // since overrides happens for that key in the request - query.Del(k) - - for _, iv := range v { - query.Add(k, iv) - } - } - - // GitHub #123 Preserve query string order partially. - // Since not feasible in `SetQuery*` resty methods, because - // standard package `url.Encode(...)` sorts the query params - // alphabetically - if len(query) > 0 { - if IsStringEmpty(reqURL.RawQuery) { - reqURL.RawQuery = query.Encode() - } else { - reqURL.RawQuery = reqURL.RawQuery + "&" + query.Encode() - } - } - - r.URL = reqURL.String() - - return nil -} - -func parseRequestHeader(c *Client, r *Request) error { - hdr := make(http.Header) - for k := range c.Header { - hdr[k] = append(hdr[k], c.Header[k]...) - } - - for k := range r.Header { - hdr.Del(k) - hdr[k] = append(hdr[k], r.Header[k]...) - } - - if IsStringEmpty(hdr.Get(hdrUserAgentKey)) { - hdr.Set(hdrUserAgentKey, fmt.Sprintf(hdrUserAgentValue, Version)) - } - - ct := hdr.Get(hdrContentTypeKey) - if IsStringEmpty(hdr.Get(hdrAcceptKey)) && !IsStringEmpty(ct) && - (IsJSONType(ct) || IsXMLType(ct)) { - hdr.Set(hdrAcceptKey, hdr.Get(hdrContentTypeKey)) - } - - r.Header = hdr - - return nil -} - -func parseRequestBody(c *Client, r *Request) (err error) { - if isPayloadSupported(r.Method, c.AllowGetMethodPayload) { - // Handling Multipart - if r.isMultiPart && !(r.Method == MethodPatch) { - if err = handleMultipart(c, r); err != nil { - return - } - - goto CL - } - - // Handling Form Data - if len(c.FormData) > 0 || len(r.FormData) > 0 { - handleFormData(c, r) - - goto CL - } - - // Handling Request body - if r.Body != nil { - handleContentType(c, r) - - if err = handleRequestBody(c, r); err != nil { - return - } - } - } - -CL: - // by default resty won't set content length, you can if you want to :) - if (c.setContentLength || r.setContentLength) && r.bodyBuf != nil { - r.Header.Set(hdrContentLengthKey, fmt.Sprintf("%d", r.bodyBuf.Len())) - } - - return -} - -func createHTTPRequest(c *Client, r *Request) (err error) { - if r.bodyBuf == nil { - if reader, ok := r.Body.(io.Reader); ok { - r.RawRequest, err = http.NewRequest(r.Method, r.URL, reader) - } else { - r.RawRequest, err = http.NewRequest(r.Method, r.URL, nil) - } - } else { - r.RawRequest, err = http.NewRequest(r.Method, r.URL, r.bodyBuf) - } - - if err != nil { - return - } - - // Assign close connection option - r.RawRequest.Close = c.closeConnection - - // Add headers into http request - r.RawRequest.Header = r.Header - - // Add cookies into http request - for _, cookie := range c.Cookies { - r.RawRequest.AddCookie(cookie) - } - - // it's for non-http scheme option - if r.RawRequest.URL != nil && r.RawRequest.URL.Scheme == "" { - r.RawRequest.URL.Scheme = c.scheme - r.RawRequest.URL.Host = r.URL - } - - // Use context if it was specified - r.addContextIfAvailable() - - return -} - -func addCredentials(c *Client, r *Request) error { - var isBasicAuth bool - // Basic Auth - if r.UserInfo != nil { // takes precedence - r.RawRequest.SetBasicAuth(r.UserInfo.Username, r.UserInfo.Password) - isBasicAuth = true - } else if c.UserInfo != nil { - r.RawRequest.SetBasicAuth(c.UserInfo.Username, c.UserInfo.Password) - isBasicAuth = true - } - - if !c.DisableWarn { - if isBasicAuth && !strings.HasPrefix(r.URL, "https") { - c.Log.Println("WARNING - Using Basic Auth in HTTP mode is not secure.") - } - } - - // Token Auth - if !IsStringEmpty(r.Token) { // takes precedence - r.RawRequest.Header.Set(hdrAuthorizationKey, "Bearer "+r.Token) - } else if !IsStringEmpty(c.Token) { - r.RawRequest.Header.Set(hdrAuthorizationKey, "Bearer "+c.Token) - } - - return nil -} - -func requestLogger(c *Client, r *Request) error { - if c.Debug { - rr := r.RawRequest - rl := &RequestLog{Header: copyHeaders(rr.Header), Body: r.fmtBodyString()} - if c.requestLog != nil { - if err := c.requestLog(rl); err != nil { - return err - } - } - - reqLog := "\n---------------------- REQUEST LOG -----------------------\n" + - fmt.Sprintf("%s %s %s\n", r.Method, rr.URL.RequestURI(), rr.Proto) + - fmt.Sprintf("HOST : %s\n", rr.URL.Host) + - fmt.Sprintf("HEADERS:\n") + - composeHeaders(rl.Header) + "\n" + - fmt.Sprintf("BODY :\n%v\n", rl.Body) + - "----------------------------------------------------------\n" - - c.Log.Print(reqLog) - } - - return nil -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Response Middleware(s) -//___________________________________ - -func responseLogger(c *Client, res *Response) error { - if c.Debug { - rl := &ResponseLog{Header: copyHeaders(res.Header()), Body: res.fmtBodyString(c.debugBodySizeLimit)} - if c.responseLog != nil { - if err := c.responseLog(rl); err != nil { - return err - } - } - - resLog := "\n---------------------- RESPONSE LOG -----------------------\n" + - fmt.Sprintf("STATUS : %s\n", res.Status()) + - fmt.Sprintf("RECEIVED AT : %v\n", res.ReceivedAt().Format(time.RFC3339Nano)) + - fmt.Sprintf("RESPONSE TIME : %v\n", res.Time()) + - "HEADERS:\n" + - composeHeaders(rl.Header) + "\n" - if res.Request.isSaveResponse { - resLog += fmt.Sprintf("BODY :\n***** RESPONSE WRITTEN INTO FILE *****\n") - } else { - resLog += fmt.Sprintf("BODY :\n%v\n", rl.Body) - } - resLog += "----------------------------------------------------------\n" - - c.Log.Print(resLog) - } - - return nil -} - -func parseResponseBody(c *Client, res *Response) (err error) { - if res.StatusCode() == http.StatusNoContent { - return - } - // Handles only JSON or XML content type - ct := firstNonEmpty(res.Header().Get(hdrContentTypeKey), res.Request.fallbackContentType) - if IsJSONType(ct) || IsXMLType(ct) { - // HTTP status code > 199 and < 300, considered as Result - if res.IsSuccess() { - if res.Request.Result != nil { - err = Unmarshalc(c, ct, res.body, res.Request.Result) - return - } - } - - // HTTP status code > 399, considered as Error - if res.IsError() { - // global error interface - if res.Request.Error == nil && c.Error != nil { - res.Request.Error = reflect.New(c.Error).Interface() - } - - if res.Request.Error != nil { - err = Unmarshalc(c, ct, res.body, res.Request.Error) - } - } - } - - return -} - -func handleMultipart(c *Client, r *Request) (err error) { - r.bodyBuf = acquireBuffer() - w := multipart.NewWriter(r.bodyBuf) - - for k, v := range c.FormData { - for _, iv := range v { - if err = w.WriteField(k, iv); err != nil { - return err - } - } - } - - for k, v := range r.FormData { - for _, iv := range v { - if strings.HasPrefix(k, "@") { // file - err = addFile(w, k[1:], iv) - if err != nil { - return - } - } else { // form value - if err = w.WriteField(k, iv); err != nil { - return err - } - } - } - } - - // #21 - adding io.Reader support - if len(r.multipartFiles) > 0 { - for _, f := range r.multipartFiles { - err = addFileReader(w, f) - if err != nil { - return - } - } - } - - // GitHub #130 adding multipart field support with content type - if len(r.multipartFields) > 0 { - for _, mf := range r.multipartFields { - if err = addMultipartFormField(w, mf); err != nil { - return - } - } - } - - r.Header.Set(hdrContentTypeKey, w.FormDataContentType()) - err = w.Close() - - return -} - -func handleFormData(c *Client, r *Request) { - formData := url.Values{} - - for k, v := range c.FormData { - for _, iv := range v { - formData.Add(k, iv) - } - } - - for k, v := range r.FormData { - // remove form data field from client level by key - // since overrides happens for that key in the request - formData.Del(k) - - for _, iv := range v { - formData.Add(k, iv) - } - } - - r.bodyBuf = bytes.NewBuffer([]byte(formData.Encode())) - r.Header.Set(hdrContentTypeKey, formContentType) - r.isFormData = true -} - -func handleContentType(c *Client, r *Request) { - contentType := r.Header.Get(hdrContentTypeKey) - if IsStringEmpty(contentType) { - contentType = DetectContentType(r.Body) - r.Header.Set(hdrContentTypeKey, contentType) - } -} - -func handleRequestBody(c *Client, r *Request) (err error) { - var bodyBytes []byte - contentType := r.Header.Get(hdrContentTypeKey) - kind := kindOf(r.Body) - r.bodyBuf = nil - - if reader, ok := r.Body.(io.Reader); ok { - if c.setContentLength || r.setContentLength { // keep backward compability - r.bodyBuf = acquireBuffer() - _, err = r.bodyBuf.ReadFrom(reader) - r.Body = nil - } else { - // Otherwise buffer less processing for `io.Reader`, sounds good. - return - } - } else if b, ok := r.Body.([]byte); ok { - bodyBytes = b - } else if s, ok := r.Body.(string); ok { - bodyBytes = []byte(s) - } else if IsJSONType(contentType) && - (kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice) { - bodyBytes, err = jsonMarshal(c, r, r.Body) - } else if IsXMLType(contentType) && (kind == reflect.Struct) { - bodyBytes, err = xml.Marshal(r.Body) - } - - if bodyBytes == nil && r.bodyBuf == nil { - err = errors.New("unsupported 'Body' type/value") - } - - // if any errors during body bytes handling, return it - if err != nil { - return - } - - // []byte into Buffer - if bodyBytes != nil && r.bodyBuf == nil { - r.bodyBuf = acquireBuffer() - _, _ = r.bodyBuf.Write(bodyBytes) - } - - return -} - -func saveResponseIntoFile(c *Client, res *Response) error { - if res.Request.isSaveResponse { - file := "" - - if len(c.outputDirectory) > 0 && !filepath.IsAbs(res.Request.outputFile) { - file += c.outputDirectory + string(filepath.Separator) - } - - file = filepath.Clean(file + res.Request.outputFile) - if err := createDirectory(filepath.Dir(file)); err != nil { - return err - } - - outFile, err := os.Create(file) - if err != nil { - return err - } - defer closeq(outFile) - - // io.Copy reads maximum 32kb size, it is perfect for large file download too - defer closeq(res.RawResponse.Body) - - written, err := io.Copy(outFile, res.RawResponse.Body) - if err != nil { - return err - } - - res.size = written - } - - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/README.md consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/README.md --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/README.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,741 +0,0 @@ -

    -

    Resty

    -

    Simple HTTP and REST client library for Go (inspired by Ruby rest-client)

    -

    Features section describes in detail about Resty capabilities

    -

    -

    -

    Build Status Code Coverage Go Report Card Release Version GoDoc License

    -

    -

    -

    Resty Communication Channels

    -

    Chat on Gitter - Resty Community Twitter @go_resty

    -

    - -## News - - * Resty `v2` development is in-progress :smile: - * v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019. - * v1.11.0 [released](https://github.com/go-resty/resty/releases/tag/v1.11.0) and tagged on Jan 06, 2019. - * v1.10.3 [released](https://github.com/go-resty/resty/releases/tag/v1.10.3) and tagged on Dec 04, 2018. - * v1.0 released and tagged on Sep 25, 2017. - Resty's first version was released on Sep 15, 2015 then it grew gradually as a very handy and helpful library. Its been a two years since first release. I'm very thankful to Resty users and its [contributors](https://github.com/go-resty/resty/graphs/contributors). - -## Features - - * GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS, etc. - * Simple and chainable methods for settings and request - * Request Body can be `string`, `[]byte`, `struct`, `map`, `slice` and `io.Reader` too - * Auto detects `Content-Type` - * Buffer less processing for `io.Reader` - * [Response](https://godoc.org/gopkg.in/resty.v1#Response) object gives you more possibility - * Access as `[]byte` array - `response.Body()` OR Access as `string` - `response.String()` - * Know your `response.Time()` and when we `response.ReceivedAt()` - * Automatic marshal and unmarshal for `JSON` and `XML` content type - * Default is `JSON`, if you supply `struct/map` without header `Content-Type` - * For auto-unmarshal, refer to - - - Success scenario [Request.SetResult()](https://godoc.org/gopkg.in/resty.v1#Request.SetResult) and [Response.Result()](https://godoc.org/gopkg.in/resty.v1#Response.Result). - - Error scenario [Request.SetError()](https://godoc.org/gopkg.in/resty.v1#Request.SetError) and [Response.Error()](https://godoc.org/gopkg.in/resty.v1#Response.Error). - - Supports [RFC7807](https://tools.ietf.org/html/rfc7807) - `application/problem+json` & `application/problem+xml` - * Easy to upload one or more file(s) via `multipart/form-data` - * Auto detects file content type - * Request URL [Path Params (aka URI Params)](https://godoc.org/gopkg.in/resty.v1#Request.SetPathParams) - * Backoff Retry Mechanism with retry condition function [reference](retry_test.go) - * resty client HTTP & REST [Request](https://godoc.org/gopkg.in/resty.v1#Client.OnBeforeRequest) and [Response](https://godoc.org/gopkg.in/resty.v1#Client.OnAfterResponse) middlewares - * `Request.SetContext` supported `go1.7` and above - * Authorization option of `BasicAuth` and `Bearer` token - * Set request `ContentLength` value for all request or particular request - * Choose between HTTP and REST mode. Default is `REST` - * `HTTP` - default up to 10 redirects and no automatic response unmarshal - * `REST` - defaults to no redirects and automatic response marshal/unmarshal for `JSON` & `XML` - * Custom [Root Certificates](https://godoc.org/gopkg.in/resty.v1#Client.SetRootCertificate) and Client [Certificates](https://godoc.org/gopkg.in/resty.v1#Client.SetCertificates) - * Download/Save HTTP response directly into File, like `curl -o` flag. See [SetOutputDirectory](https://godoc.org/gopkg.in/resty.v1#Client.SetOutputDirectory) & [SetOutput](https://godoc.org/gopkg.in/resty.v1#Request.SetOutput). - * Cookies for your request and CookieJar support - * SRV Record based request instead of Host URL - * Client settings like `Timeout`, `RedirectPolicy`, `Proxy`, `TLSClientConfig`, `Transport`, etc. - * Optionally allows GET request with payload, see [SetAllowGetMethodPayload](https://godoc.org/gopkg.in/resty.v1#Client.SetAllowGetMethodPayload) - * Supports registering external JSON library into resty, see [how to use](https://github.com/go-resty/resty/issues/76#issuecomment-314015250) - * Exposes Response reader without reading response (no auto-unmarshaling) if need be, see [how to use](https://github.com/go-resty/resty/issues/87#issuecomment-322100604) - * Option to specify expected `Content-Type` when response `Content-Type` header missing. Refer to [#92](https://github.com/go-resty/resty/issues/92) - * Resty design - * Have client level settings & options and also override at Request level if you want to - * Request and Response middlewares - * Create Multiple clients if you want to `resty.New()` - * Supports `http.RoundTripper` implementation, see [SetTransport](https://godoc.org/gopkg.in/resty.v1#Client.SetTransport) - * goroutine concurrent safe - * REST and HTTP modes - * Debug mode - clean and informative logging presentation - * Gzip - Go does it automatically also resty has fallback handling too - * Works fine with `HTTP/2` and `HTTP/1.1` - * [Bazel support](#bazel-support) - * Easily mock resty for testing, [for e.g.](#mocking-http-requests-using-httpmock-library) - * Well tested client library - -Resty works with `go1.3` and above. - -### Included Batteries - - * Redirect Policies - see [how to use](#redirect-policy) - * NoRedirectPolicy - * FlexibleRedirectPolicy - * DomainCheckRedirectPolicy - * etc. [more info](redirect.go) - * Retry Mechanism [how to use](#retries) - * Backoff Retry - * Conditional Retry - * SRV Record based request instead of Host URL [how to use](resty_test.go#L1412) - * etc (upcoming - throw your idea's [here](https://github.com/go-resty/resty/issues)). - -## Installation - -#### Stable Version - Production Ready - -Please refer section [Versioning](#versioning) for detailed info. - -##### go.mod - -```bash -require gopkg.in/resty.v1 v1.12.0 -``` - -##### go get -```bash -go get -u gopkg.in/resty.v1 -``` - -#### Heads up for upcoming Resty v2 - -Resty v2 release will be moving away from `gopkg.in` proxy versioning. It will completely follow and adpating Go Mod versioning recommendation. For e.g.: module definition would be `module github.com/go-resty/resty/v2`. - - -## It might be beneficial for your project :smile: - -Resty author also published following projects for Go Community. - - * [aah framework](https://aahframework.org) - A secure, flexible, rapid Go web framework. - * [THUMBAI](https://thumbai.app), [Source Code](https://github.com/thumbai/thumbai) - Go Mod Repository, Go Vanity Service and Simple Proxy Server. - * [go-model](https://github.com/jeevatkm/go-model) - Robust & Easy to use model mapper and utility methods for Go `struct`. - -## Usage - -The following samples will assist you to become as comfortable as possible with resty library. Resty comes with ready to use DefaultClient. - -Import resty into your code and refer it as `resty`. - -```go -import "gopkg.in/resty.v1" -``` - -#### Simple GET - -```go -// GET request -resp, err := resty.R().Get("http://httpbin.org/get") - -// explore response object -fmt.Printf("\nError: %v", err) -fmt.Printf("\nResponse Status Code: %v", resp.StatusCode()) -fmt.Printf("\nResponse Status: %v", resp.Status()) -fmt.Printf("\nResponse Time: %v", resp.Time()) -fmt.Printf("\nResponse Received At: %v", resp.ReceivedAt()) -fmt.Printf("\nResponse Body: %v", resp) // or resp.String() or string(resp.Body()) -// more... - -/* Output -Error: -Response Status Code: 200 -Response Status: 200 OK -Response Time: 160.1151ms -Response Received At: 2018-10-16 16:28:34.8595663 -0700 PDT m=+0.166119401 -Response Body: { - "args": {}, - "headers": { - "Accept-Encoding": "gzip", - "Connection": "close", - "Host": "httpbin.org", - "User-Agent": "go-resty/1.10.0 (https://github.com/go-resty/resty)" - }, - "origin": "0.0.0.0", - "url": "http://httpbin.org/get" -} -*/ -``` - -#### Enhanced GET - -```go -resp, err := resty.R(). - SetQueryParams(map[string]string{ - "page_no": "1", - "limit": "20", - "sort":"name", - "order": "asc", - "random":strconv.FormatInt(time.Now().Unix(), 10), - }). - SetHeader("Accept", "application/json"). - SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F"). - Get("/search_result") - - -// Sample of using Request.SetQueryString method -resp, err := resty.R(). - SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more"). - SetHeader("Accept", "application/json"). - SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F"). - Get("/show_product") -``` - -#### Various POST method combinations - -```go -// POST JSON string -// No need to set content type, if you have client level setting -resp, err := resty.R(). - SetHeader("Content-Type", "application/json"). - SetBody(`{"username":"testuser", "password":"testpass"}`). - SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). - Post("https://myapp.com/login") - -// POST []byte array -// No need to set content type, if you have client level setting -resp, err := resty.R(). - SetHeader("Content-Type", "application/json"). - SetBody([]byte(`{"username":"testuser", "password":"testpass"}`)). - SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). - Post("https://myapp.com/login") - -// POST Struct, default is JSON content type. No need to set one -resp, err := resty.R(). - SetBody(User{Username: "testuser", Password: "testpass"}). - SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). - SetError(&AuthError{}). // or SetError(AuthError{}). - Post("https://myapp.com/login") - -// POST Map, default is JSON content type. No need to set one -resp, err := resty.R(). - SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}). - SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). - SetError(&AuthError{}). // or SetError(AuthError{}). - Post("https://myapp.com/login") - -// POST of raw bytes for file upload. For example: upload file to Dropbox -fileBytes, _ := ioutil.ReadFile("/Users/jeeva/mydocument.pdf") - -// See we are not setting content-type header, since go-resty automatically detects Content-Type for you -resp, err := resty.R(). - SetBody(fileBytes). - SetContentLength(true). // Dropbox expects this value - SetAuthToken(""). - SetError(&DropboxError{}). // or SetError(DropboxError{}). - Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // for upload Dropbox supports PUT too - -// Note: resty detects Content-Type for request body/payload if content type header is not set. -// * For struct and map data type defaults to 'application/json' -// * Fallback is plain text content type -``` - -#### Sample PUT - -You can use various combinations of `PUT` method call like demonstrated for `POST`. - -```go -// Note: This is one sample of PUT method usage, refer POST for more combination - -// Request goes as JSON content type -// No need to set auth token, error, if you have client level settings -resp, err := resty.R(). - SetBody(Article{ - Title: "go-resty", - Content: "This is my article content, oh ya!", - Author: "Jeevanandam M", - Tags: []string{"article", "sample", "resty"}, - }). - SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). - SetError(&Error{}). // or SetError(Error{}). - Put("https://myapp.com/article/1234") -``` - -#### Sample PATCH - -You can use various combinations of `PATCH` method call like demonstrated for `POST`. - -```go -// Note: This is one sample of PUT method usage, refer POST for more combination - -// Request goes as JSON content type -// No need to set auth token, error, if you have client level settings -resp, err := resty.R(). - SetBody(Article{ - Tags: []string{"new tag1", "new tag2"}, - }). - SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). - SetError(&Error{}). // or SetError(Error{}). - Patch("https://myapp.com/articles/1234") -``` - -#### Sample DELETE, HEAD, OPTIONS - -```go -// DELETE a article -// No need to set auth token, error, if you have client level settings -resp, err := resty.R(). - SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). - SetError(&Error{}). // or SetError(Error{}). - Delete("https://myapp.com/articles/1234") - -// DELETE a articles with payload/body as a JSON string -// No need to set auth token, error, if you have client level settings -resp, err := resty.R(). - SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). - SetError(&Error{}). // or SetError(Error{}). - SetHeader("Content-Type", "application/json"). - SetBody(`{article_ids: [1002, 1006, 1007, 87683, 45432] }`). - Delete("https://myapp.com/articles") - -// HEAD of resource -// No need to set auth token, if you have client level settings -resp, err := resty.R(). - SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). - Head("https://myapp.com/videos/hi-res-video") - -// OPTIONS of resource -// No need to set auth token, if you have client level settings -resp, err := resty.R(). - SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). - Options("https://myapp.com/servers/nyc-dc-01") -``` - -### Multipart File(s) upload - -#### Using io.Reader - -```go -profileImgBytes, _ := ioutil.ReadFile("/Users/jeeva/test-img.png") -notesBytes, _ := ioutil.ReadFile("/Users/jeeva/text-file.txt") - -resp, err := resty.R(). - SetFileReader("profile_img", "test-img.png", bytes.NewReader(profileImgBytes)). - SetFileReader("notes", "text-file.txt", bytes.NewReader(notesBytes)). - SetFormData(map[string]string{ - "first_name": "Jeevanandam", - "last_name": "M", - }). - Post("http://myapp.com/upload") -``` - -#### Using File directly from Path - -```go -// Single file scenario -resp, err := resty.R(). - SetFile("profile_img", "/Users/jeeva/test-img.png"). - Post("http://myapp.com/upload") - -// Multiple files scenario -resp, err := resty.R(). - SetFiles(map[string]string{ - "profile_img": "/Users/jeeva/test-img.png", - "notes": "/Users/jeeva/text-file.txt", - }). - Post("http://myapp.com/upload") - -// Multipart of form fields and files -resp, err := resty.R(). - SetFiles(map[string]string{ - "profile_img": "/Users/jeeva/test-img.png", - "notes": "/Users/jeeva/text-file.txt", - }). - SetFormData(map[string]string{ - "first_name": "Jeevanandam", - "last_name": "M", - "zip_code": "00001", - "city": "my city", - "access_token": "C6A79608-782F-4ED0-A11D-BD82FAD829CD", - }). - Post("http://myapp.com/profile") -``` - -#### Sample Form submission - -```go -// just mentioning about POST as an example with simple flow -// User Login -resp, err := resty.R(). - SetFormData(map[string]string{ - "username": "jeeva", - "password": "mypass", - }). - Post("http://myapp.com/login") - -// Followed by profile update -resp, err := resty.R(). - SetFormData(map[string]string{ - "first_name": "Jeevanandam", - "last_name": "M", - "zip_code": "00001", - "city": "new city update", - }). - Post("http://myapp.com/profile") - -// Multi value form data -criteria := url.Values{ - "search_criteria": []string{"book", "glass", "pencil"}, -} -resp, err := resty.R(). - SetMultiValueFormData(criteria). - Post("http://myapp.com/search") -``` - -#### Save HTTP Response into File - -```go -// Setting output directory path, If directory not exists then resty creates one! -// This is optional one, if you're planning using absoule path in -// `Request.SetOutput` and can used together. -resty.SetOutputDirectory("/Users/jeeva/Downloads") - -// HTTP response gets saved into file, similar to curl -o flag -_, err := resty.R(). - SetOutput("plugin/ReplyWithHeader-v5.1-beta.zip"). - Get("http://bit.ly/1LouEKr") - -// OR using absolute path -// Note: output directory path is not used for absoulte path -_, err := resty.R(). - SetOutput("/MyDownloads/plugin/ReplyWithHeader-v5.1-beta.zip"). - Get("http://bit.ly/1LouEKr") -``` - -#### Request URL Path Params - -Resty provides easy to use dynamic request URL path params. Params can be set at client and request level. Client level params value can be overridden at request level. - -```go -resty.R().SetPathParams(map[string]string{ - "userId": "sample@sample.com", - "subAccountId": "100002", -}). -Get("/v1/users/{userId}/{subAccountId}/details") - -// Result: -// Composed URL - /v1/users/sample@sample.com/100002/details -``` - -#### Request and Response Middleware - -Resty provides middleware ability to manipulate for Request and Response. It is more flexible than callback approach. - -```go -// Registering Request Middleware -resty.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error { - // Now you have access to Client and current Request object - // manipulate it as per your need - - return nil // if its success otherwise return error - }) - -// Registering Response Middleware -resty.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error { - // Now you have access to Client and current Response object - // manipulate it as per your need - - return nil // if its success otherwise return error - }) -``` - -#### Redirect Policy - -Resty provides few ready to use redirect policy(s) also it supports multiple policies together. - -```go -// Assign Client Redirect Policy. Create one as per you need -resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15)) - -// Wanna multiple policies such as redirect count, domain name check, etc -resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20), - resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net")) -``` - -##### Custom Redirect Policy - -Implement [RedirectPolicy](redirect.go#L20) interface and register it with resty client. Have a look [redirect.go](redirect.go) for more information. - -```go -// Using raw func into resty.SetRedirectPolicy -resty.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { - // Implement your logic here - - // return nil for continue redirect otherwise return error to stop/prevent redirect - return nil -})) - -//--------------------------------------------------- - -// Using struct create more flexible redirect policy -type CustomRedirectPolicy struct { - // variables goes here -} - -func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error { - // Implement your logic here - - // return nil for continue redirect otherwise return error to stop/prevent redirect - return nil -} - -// Registering in resty -resty.SetRedirectPolicy(CustomRedirectPolicy{/* initialize variables */}) -``` - -#### Custom Root Certificates and Client Certificates - -```go -// Custom Root certificates, just supply .pem file. -// you can add one or more root certificates, its get appended -resty.SetRootCertificate("/path/to/root/pemFile1.pem") -resty.SetRootCertificate("/path/to/root/pemFile2.pem") -// ... and so on! - -// Adding Client Certificates, you add one or more certificates -// Sample for creating certificate object -// Parsing public/private key pair from a pair of files. The files must contain PEM encoded data. -cert1, err := tls.LoadX509KeyPair("certs/client.pem", "certs/client.key") -if err != nil { - log.Fatalf("ERROR client certificate: %s", err) -} -// ... - -// You add one or more certificates -resty.SetCertificates(cert1, cert2, cert3) -``` - -#### Proxy Settings - Client as well as at Request Level - -Default `Go` supports Proxy via environment variable `HTTP_PROXY`. Resty provides support via `SetProxy` & `RemoveProxy`. -Choose as per your need. - -**Client Level Proxy** settings applied to all the request - -```go -// Setting a Proxy URL and Port -resty.SetProxy("http://proxyserver:8888") - -// Want to remove proxy setting -resty.RemoveProxy() -``` - -#### Retries - -Resty uses [backoff](http://www.awsarchitectureblog.com/2015/03/backoff.html) -to increase retry intervals after each attempt. - -Usage example: - -```go -// Retries are configured per client -resty. - // Set retry count to non zero to enable retries - SetRetryCount(3). - // You can override initial retry wait time. - // Default is 100 milliseconds. - SetRetryWaitTime(5 * time.Second). - // MaxWaitTime can be overridden as well. - // Default is 2 seconds. - SetRetryMaxWaitTime(20 * time.Second) -``` - -Above setup will result in resty retrying requests returned non nil error up to -3 times with delay increased after each attempt. - -You can optionally provide client with custom retry conditions: - -```go -resty.AddRetryCondition( - // Condition function will be provided with *resty.Response as a - // parameter. It is expected to return (bool, error) pair. Resty will retry - // in case condition returns true or non nil error. - func(r *resty.Response) (bool, error) { - return r.StatusCode() == http.StatusTooManyRequests, nil - }, -) -``` - -Above example will make resty retry requests ended with `429 Too Many Requests` -status code. - -Multiple retry conditions can be added. - -It is also possible to use `resty.Backoff(...)` to get arbitrary retry scenarios -implemented. [Reference](retry_test.go). - -#### Choose REST or HTTP mode - -```go -// REST mode. This is Default. -resty.SetRESTMode() - -// HTTP mode -resty.SetHTTPMode() -``` - -#### Allow GET request with Payload - -```go -// Allow GET request with Payload. This is disabled by default. -resty.SetAllowGetMethodPayload(true) -``` - -#### Wanna Multiple Clients - -```go -// Here you go! -// Client 1 -client1 := resty.New() -client1.R().Get("http://httpbin.org") -// ... - -// Client 2 -client2 := resty.New() -client2.R().Head("http://httpbin.org") -// ... - -// Bend it as per your need!!! -``` - -#### Remaining Client Settings & its Options - -```go -// Unique settings at Client level -//-------------------------------- -// Enable debug mode -resty.SetDebug(true) - -// Using you custom log writer -logFile, _ := os.OpenFile("/Users/jeeva/go-resty.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) -resty.SetLogger(logFile) - -// Assign Client TLSClientConfig -// One can set custom root-certificate. Refer: http://golang.org/pkg/crypto/tls/#example_Dial -resty.SetTLSClientConfig(&tls.Config{ RootCAs: roots }) - -// or One can disable security check (https) -resty.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true }) - -// Set client timeout as per your need -resty.SetTimeout(1 * time.Minute) - - -// You can override all below settings and options at request level if you want to -//-------------------------------------------------------------------------------- -// Host URL for all request. So you can use relative URL in the request -resty.SetHostURL("http://httpbin.org") - -// Headers for all request -resty.SetHeader("Accept", "application/json") -resty.SetHeaders(map[string]string{ - "Content-Type": "application/json", - "User-Agent": "My custom User Agent String", - }) - -// Cookies for all request -resty.SetCookie(&http.Cookie{ - Name:"go-resty", - Value:"This is cookie value", - Path: "/", - Domain: "sample.com", - MaxAge: 36000, - HttpOnly: true, - Secure: false, - }) -resty.SetCookies(cookies) - -// URL query parameters for all request -resty.SetQueryParam("user_id", "00001") -resty.SetQueryParams(map[string]string{ // sample of those who use this manner - "api_key": "api-key-here", - "api_secert": "api-secert", - }) -resty.R().SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more") - -// Form data for all request. Typically used with POST and PUT -resty.SetFormData(map[string]string{ - "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F", - }) - -// Basic Auth for all request -resty.SetBasicAuth("myuser", "mypass") - -// Bearer Auth Token for all request -resty.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F") - -// Enabling Content length value for all request -resty.SetContentLength(true) - -// Registering global Error object structure for JSON/XML request -resty.SetError(&Error{}) // or resty.SetError(Error{}) -``` - -#### Unix Socket - -```go -unixSocket := "/var/run/my_socket.sock" - -// Create a Go's http.Transport so we can set it in resty. -transport := http.Transport{ - Dial: func(_, _ string) (net.Conn, error) { - return net.Dial("unix", unixSocket) - }, -} - -// Set the previous transport that we created, set the scheme of the communication to the -// socket and set the unixSocket as the HostURL. -r := resty.New().SetTransport(&transport).SetScheme("http").SetHostURL(unixSocket) - -// No need to write the host's URL on the request, just the path. -r.R().Get("/index.html") -``` - -#### Bazel support - -Resty can be built, tested and depended upon via [Bazel](https://bazel.build). -For example, to run all tests: - -```shell -bazel test :go_default_test -``` - -#### Mocking http requests using [httpmock](https://github.com/jarcoal/httpmock) library - -In order to mock the http requests when testing your application you -could use the `httpmock` library. - -When using the default resty client, you should pass the client to the library as follow: - -```go -httpmock.ActivateNonDefault(resty.DefaultClient.GetClient()) -``` - -More detailed example of mocking resty http requests using ginko could be found [here](https://github.com/jarcoal/httpmock#ginkgo--resty-example). - -## Versioning - -resty releases versions according to [Semantic Versioning](http://semver.org) - - * `gopkg.in/resty.vX` points to appropriate tagged versions; `X` denotes version series number and it's a stable release for production use. For e.g. `gopkg.in/resty.v0`. - * Development takes place at the master branch. Although the code in master should always compile and test successfully, it might break API's. I aim to maintain backwards compatibility, but sometimes API's and behavior might be changed to fix a bug. - -## Contribution - -I would welcome your contribution! If you find any improvement or issue you want to fix, feel free to send a pull request, I like pull requests that include test cases for fix/enhancement. I have done my best to bring pretty good code coverage. Feel free to write tests. - -BTW, I'd like to know what you think about `Resty`. Kindly open an issue or send me an email; it'd mean a lot to me. - -## Creator - -[Jeevanandam M.](https://github.com/jeevatkm) (jeeva@myjeeva.com) - -## Contributors - -Have a look on [Contributors](https://github.com/go-resty/resty/graphs/contributors) page. - -## License - -Resty released under MIT license, refer [LICENSE](LICENSE) file. diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/redirect.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/redirect.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/redirect.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/redirect.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "errors" - "fmt" - "net" - "net/http" - "strings" -) - -type ( - // RedirectPolicy to regulate the redirects in the resty client. - // Objects implementing the RedirectPolicy interface can be registered as - // - // Apply function should return nil to continue the redirect jounery, otherwise - // return error to stop the redirect. - RedirectPolicy interface { - Apply(req *http.Request, via []*http.Request) error - } - - // The RedirectPolicyFunc type is an adapter to allow the use of ordinary functions as RedirectPolicy. - // If f is a function with the appropriate signature, RedirectPolicyFunc(f) is a RedirectPolicy object that calls f. - RedirectPolicyFunc func(*http.Request, []*http.Request) error -) - -// Apply calls f(req, via). -func (f RedirectPolicyFunc) Apply(req *http.Request, via []*http.Request) error { - return f(req, via) -} - -// NoRedirectPolicy is used to disable redirects in the HTTP client -// resty.SetRedirectPolicy(NoRedirectPolicy()) -func NoRedirectPolicy() RedirectPolicy { - return RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { - return errors.New("auto redirect is disabled") - }) -} - -// FlexibleRedirectPolicy is convenient method to create No of redirect policy for HTTP client. -// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20)) -func FlexibleRedirectPolicy(noOfRedirect int) RedirectPolicy { - return RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { - if len(via) >= noOfRedirect { - return fmt.Errorf("stopped after %d redirects", noOfRedirect) - } - - checkHostAndAddHeaders(req, via[0]) - - return nil - }) -} - -// DomainCheckRedirectPolicy is convenient method to define domain name redirect rule in resty client. -// Redirect is allowed for only mentioned host in the policy. -// resty.SetRedirectPolicy(DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net")) -func DomainCheckRedirectPolicy(hostnames ...string) RedirectPolicy { - hosts := make(map[string]bool) - for _, h := range hostnames { - hosts[strings.ToLower(h)] = true - } - - fn := RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { - if ok := hosts[getHostname(req.URL.Host)]; !ok { - return errors.New("redirect is not allowed as per DomainCheckRedirectPolicy") - } - - return nil - }) - - return fn -} - -func getHostname(host string) (hostname string) { - if strings.Index(host, ":") > 0 { - host, _, _ = net.SplitHostPort(host) - } - hostname = strings.ToLower(host) - return -} - -// By default Golang will not redirect request headers -// after go throughing various discussion comments from thread -// https://github.com/golang/go/issues/4800 -// go-resty will add all the headers during a redirect for the same host -func checkHostAndAddHeaders(cur *http.Request, pre *http.Request) { - curHostname := getHostname(cur.URL.Host) - preHostname := getHostname(pre.URL.Host) - if strings.EqualFold(curHostname, preHostname) { - for key, val := range pre.Header { - cur.Header[key] = val - } - } else { // only library User-Agent header is added - cur.Header.Set(hdrUserAgentKey, fmt.Sprintf(hdrUserAgentValue, Version)) - } -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/request16.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/request16.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/request16.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/request16.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -// +build !go1.7 - -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com) -// 2016 Andrew Grigorev (https://github.com/ei-grad) -// All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "bytes" - "encoding/json" - "net/http" - "net/url" - "time" -) - -// Request type is used to compose and send individual request from client -// go-resty is provide option override client level settings such as -// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object -// and also you can add more options for that particular request -type Request struct { - URL string - Method string - Token string - QueryParam url.Values - FormData url.Values - Header http.Header - Time time.Time - Body interface{} - Result interface{} - Error interface{} - RawRequest *http.Request - SRV *SRVRecord - UserInfo *User - - isMultiPart bool - isFormData bool - setContentLength bool - isSaveResponse bool - notParseResponse bool - jsonEscapeHTML bool - outputFile string - fallbackContentType string - pathParams map[string]string - client *Client - bodyBuf *bytes.Buffer - multipartFiles []*File - multipartFields []*MultipartField -} - -func (r *Request) addContextIfAvailable() { - // nothing to do for golang<1.7 -} - -func (r *Request) isContextCancelledIfAvailable() bool { - // just always return false golang<1.7 - return false -} - -// for !go1.7 -var noescapeJSONMarshal = json.Marshal diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/request17.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/request17.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/request17.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/request17.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -// +build go1.7 go1.8 - -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com) -// 2016 Andrew Grigorev (https://github.com/ei-grad) -// All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "bytes" - "context" - "encoding/json" - "net/http" - "net/url" - "time" -) - -// Request type is used to compose and send individual request from client -// go-resty is provide option override client level settings such as -// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object -// and also you can add more options for that particular request -type Request struct { - URL string - Method string - Token string - QueryParam url.Values - FormData url.Values - Header http.Header - Time time.Time - Body interface{} - Result interface{} - Error interface{} - RawRequest *http.Request - SRV *SRVRecord - UserInfo *User - - isMultiPart bool - isFormData bool - setContentLength bool - isSaveResponse bool - notParseResponse bool - jsonEscapeHTML bool - outputFile string - fallbackContentType string - ctx context.Context - pathParams map[string]string - client *Client - bodyBuf *bytes.Buffer - multipartFiles []*File - multipartFields []*MultipartField -} - -// Context method returns the Context if its already set in request -// otherwise it creates new one using `context.Background()`. -func (r *Request) Context() context.Context { - if r.ctx == nil { - return context.Background() - } - return r.ctx -} - -// SetContext method sets the context.Context for current Request. It allows -// to interrupt the request execution if ctx.Done() channel is closed. -// See https://blog.golang.org/context article and the "context" package -// documentation. -func (r *Request) SetContext(ctx context.Context) *Request { - r.ctx = ctx - return r -} - -func (r *Request) addContextIfAvailable() { - if r.ctx != nil { - r.RawRequest = r.RawRequest.WithContext(r.ctx) - } -} - -func (r *Request) isContextCancelledIfAvailable() bool { - if r.ctx != nil { - if r.ctx.Err() != nil { - return true - } - } - return false -} - -// for go1.7+ -var noescapeJSONMarshal = func(v interface{}) ([]byte, error) { - buf := acquireBuffer() - defer releaseBuffer(buf) - encoder := json.NewEncoder(buf) - encoder.SetEscapeHTML(false) - err := encoder.Encode(v) - return buf.Bytes(), err -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/request.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/request.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/request.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/request.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,586 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "encoding/base64" - "encoding/json" - "encoding/xml" - "fmt" - "io" - "net" - "net/url" - "reflect" - "strings" -) - -// SRVRecord holds the data to query the SRV record for the following service -type SRVRecord struct { - Service string - Domain string -} - -// SetHeader method is to set a single header field and its value in the current request. -// Example: To set `Content-Type` and `Accept` as `application/json`. -// resty.R(). -// SetHeader("Content-Type", "application/json"). -// SetHeader("Accept", "application/json") -// -// Also you can override header value, which was set at client instance level. -// -func (r *Request) SetHeader(header, value string) *Request { - r.Header.Set(header, value) - return r -} - -// SetHeaders method sets multiple headers field and its values at one go in the current request. -// Example: To set `Content-Type` and `Accept` as `application/json` -// -// resty.R(). -// SetHeaders(map[string]string{ -// "Content-Type": "application/json", -// "Accept": "application/json", -// }) -// Also you can override header value, which was set at client instance level. -// -func (r *Request) SetHeaders(headers map[string]string) *Request { - for h, v := range headers { - r.SetHeader(h, v) - } - - return r -} - -// SetQueryParam method sets single parameter and its value in the current request. -// It will be formed as query string for the request. -// Example: `search=kitchen%20papers&size=large` in the URL after `?` mark. -// resty.R(). -// SetQueryParam("search", "kitchen papers"). -// SetQueryParam("size", "large") -// Also you can override query params value, which was set at client instance level -// -func (r *Request) SetQueryParam(param, value string) *Request { - r.QueryParam.Set(param, value) - return r -} - -// SetQueryParams method sets multiple parameters and its values at one go in the current request. -// It will be formed as query string for the request. -// Example: `search=kitchen%20papers&size=large` in the URL after `?` mark. -// resty.R(). -// SetQueryParams(map[string]string{ -// "search": "kitchen papers", -// "size": "large", -// }) -// Also you can override query params value, which was set at client instance level -// -func (r *Request) SetQueryParams(params map[string]string) *Request { - for p, v := range params { - r.SetQueryParam(p, v) - } - - return r -} - -// SetMultiValueQueryParams method appends multiple parameters with multi-value -// at one go in the current request. It will be formed as query string for the request. -// Example: `status=pending&status=approved&status=open` in the URL after `?` mark. -// resty.R(). -// SetMultiValueQueryParams(url.Values{ -// "status": []string{"pending", "approved", "open"}, -// }) -// Also you can override query params value, which was set at client instance level -// -func (r *Request) SetMultiValueQueryParams(params url.Values) *Request { - for p, v := range params { - for _, pv := range v { - r.QueryParam.Add(p, pv) - } - } - - return r -} - -// SetQueryString method provides ability to use string as an input to set URL query string for the request. -// -// Using String as an input -// resty.R(). -// SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more") -// -func (r *Request) SetQueryString(query string) *Request { - params, err := url.ParseQuery(strings.TrimSpace(query)) - if err == nil { - for p, v := range params { - for _, pv := range v { - r.QueryParam.Add(p, pv) - } - } - } else { - r.client.Log.Printf("ERROR %v", err) - } - return r -} - -// SetFormData method sets Form parameters and their values in the current request. -// It's applicable only HTTP method `POST` and `PUT` and requests content type would be set as -// `application/x-www-form-urlencoded`. -// resty.R(). -// SetFormData(map[string]string{ -// "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F", -// "user_id": "3455454545", -// }) -// Also you can override form data value, which was set at client instance level -// -func (r *Request) SetFormData(data map[string]string) *Request { - for k, v := range data { - r.FormData.Set(k, v) - } - - return r -} - -// SetMultiValueFormData method appends multiple form parameters with multi-value -// at one go in the current request. -// resty.R(). -// SetMultiValueFormData(url.Values{ -// "search_criteria": []string{"book", "glass", "pencil"}, -// }) -// Also you can override form data value, which was set at client instance level -// -func (r *Request) SetMultiValueFormData(params url.Values) *Request { - for k, v := range params { - for _, kv := range v { - r.FormData.Add(k, kv) - } - } - - return r -} - -// SetBody method sets the request body for the request. It supports various realtime needs as easy. -// We can say its quite handy or powerful. Supported request body data types is `string`, -// `[]byte`, `struct`, `map`, `slice` and `io.Reader`. Body value can be pointer or non-pointer. -// Automatic marshalling for JSON and XML content type, if it is `struct`, `map`, or `slice`. -// -// Note: `io.Reader` is processed as bufferless mode while sending request. -// -// Example: -// -// Struct as a body input, based on content type, it will be marshalled. -// resty.R(). -// SetBody(User{ -// Username: "jeeva@myjeeva.com", -// Password: "welcome2resty", -// }) -// -// Map as a body input, based on content type, it will be marshalled. -// resty.R(). -// SetBody(map[string]interface{}{ -// "username": "jeeva@myjeeva.com", -// "password": "welcome2resty", -// "address": &Address{ -// Address1: "1111 This is my street", -// Address2: "Apt 201", -// City: "My City", -// State: "My State", -// ZipCode: 00000, -// }, -// }) -// -// String as a body input. Suitable for any need as a string input. -// resty.R(). -// SetBody(`{ -// "username": "jeeva@getrightcare.com", -// "password": "admin" -// }`) -// -// []byte as a body input. Suitable for raw request such as file upload, serialize & deserialize, etc. -// resty.R(). -// SetBody([]byte("This is my raw request, sent as-is")) -// -func (r *Request) SetBody(body interface{}) *Request { - r.Body = body - return r -} - -// SetResult method is to register the response `Result` object for automatic unmarshalling in the RESTful mode -// if response status code is between 200 and 299 and content type either JSON or XML. -// -// Note: Result object can be pointer or non-pointer. -// resty.R().SetResult(&AuthToken{}) -// // OR -// resty.R().SetResult(AuthToken{}) -// -// Accessing a result value -// response.Result().(*AuthToken) -// -func (r *Request) SetResult(res interface{}) *Request { - r.Result = getPointer(res) - return r -} - -// SetError method is to register the request `Error` object for automatic unmarshalling in the RESTful mode -// if response status code is greater than 399 and content type either JSON or XML. -// -// Note: Error object can be pointer or non-pointer. -// resty.R().SetError(&AuthError{}) -// // OR -// resty.R().SetError(AuthError{}) -// -// Accessing a error value -// response.Error().(*AuthError) -// -func (r *Request) SetError(err interface{}) *Request { - r.Error = getPointer(err) - return r -} - -// SetFile method is to set single file field name and its path for multipart upload. -// resty.R(). -// SetFile("my_file", "/Users/jeeva/Gas Bill - Sep.pdf") -// -func (r *Request) SetFile(param, filePath string) *Request { - r.isMultiPart = true - r.FormData.Set("@"+param, filePath) - return r -} - -// SetFiles method is to set multiple file field name and its path for multipart upload. -// resty.R(). -// SetFiles(map[string]string{ -// "my_file1": "/Users/jeeva/Gas Bill - Sep.pdf", -// "my_file2": "/Users/jeeva/Electricity Bill - Sep.pdf", -// "my_file3": "/Users/jeeva/Water Bill - Sep.pdf", -// }) -// -func (r *Request) SetFiles(files map[string]string) *Request { - r.isMultiPart = true - - for f, fp := range files { - r.FormData.Set("@"+f, fp) - } - - return r -} - -// SetFileReader method is to set single file using io.Reader for multipart upload. -// resty.R(). -// SetFileReader("profile_img", "my-profile-img.png", bytes.NewReader(profileImgBytes)). -// SetFileReader("notes", "user-notes.txt", bytes.NewReader(notesBytes)) -// -func (r *Request) SetFileReader(param, fileName string, reader io.Reader) *Request { - r.isMultiPart = true - r.multipartFiles = append(r.multipartFiles, &File{ - Name: fileName, - ParamName: param, - Reader: reader, - }) - return r -} - -// SetMultipartField method is to set custom data using io.Reader for multipart upload. -func (r *Request) SetMultipartField(param, fileName, contentType string, reader io.Reader) *Request { - r.isMultiPart = true - r.multipartFields = append(r.multipartFields, &MultipartField{ - Param: param, - FileName: fileName, - ContentType: contentType, - Reader: reader, - }) - return r -} - -// SetMultipartFields method is to set multiple data fields using io.Reader for multipart upload. -// Example: -// resty.R().SetMultipartFields( -// &resty.MultipartField{ -// Param: "uploadManifest1", -// FileName: "upload-file-1.json", -// ContentType: "application/json", -// Reader: strings.NewReader(`{"input": {"name": "Uploaded document 1", "_filename" : ["file1.txt"]}}`), -// }, -// &resty.MultipartField{ -// Param: "uploadManifest2", -// FileName: "upload-file-2.json", -// ContentType: "application/json", -// Reader: strings.NewReader(`{"input": {"name": "Uploaded document 2", "_filename" : ["file2.txt"]}}`), -// }) -// -// If you have slice already, then simply call- -// resty.R().SetMultipartFields(fields...) -func (r *Request) SetMultipartFields(fields ...*MultipartField) *Request { - r.isMultiPart = true - r.multipartFields = append(r.multipartFields, fields...) - return r -} - -// SetContentLength method sets the HTTP header `Content-Length` value for current request. -// By default go-resty won't set `Content-Length`. Also you have an option to enable for every -// request. See `resty.SetContentLength` -// resty.R().SetContentLength(true) -// -func (r *Request) SetContentLength(l bool) *Request { - r.setContentLength = true - return r -} - -// SetBasicAuth method sets the basic authentication header in the current HTTP request. -// For Header example: -// Authorization: Basic -// -// To set the header for username "go-resty" and password "welcome" -// resty.R().SetBasicAuth("go-resty", "welcome") -// -// This method overrides the credentials set by method `resty.SetBasicAuth`. -// -func (r *Request) SetBasicAuth(username, password string) *Request { - r.UserInfo = &User{Username: username, Password: password} - return r -} - -// SetAuthToken method sets bearer auth token header in the current HTTP request. Header example: -// Authorization: Bearer -// -// Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F -// -// resty.R().SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F") -// -// This method overrides the Auth token set by method `resty.SetAuthToken`. -// -func (r *Request) SetAuthToken(token string) *Request { - r.Token = token - return r -} - -// SetOutput method sets the output file for current HTTP request. Current HTTP response will be -// saved into given file. It is similar to `curl -o` flag. Absolute path or relative path can be used. -// If is it relative path then output file goes under the output directory, as mentioned -// in the `Client.SetOutputDirectory`. -// resty.R(). -// SetOutput("/Users/jeeva/Downloads/ReplyWithHeader-v5.1-beta.zip"). -// Get("http://bit.ly/1LouEKr") -// -// Note: In this scenario `Response.Body` might be nil. -func (r *Request) SetOutput(file string) *Request { - r.outputFile = file - r.isSaveResponse = true - return r -} - -// SetSRV method sets the details to query the service SRV record and execute the -// request. -// resty.R(). -// SetSRV(SRVRecord{"web", "testservice.com"}). -// Get("/get") -func (r *Request) SetSRV(srv *SRVRecord) *Request { - r.SRV = srv - return r -} - -// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically. -// Resty exposes the raw response body as `io.ReadCloser`. Also do not forget to close the body, -// otherwise you might get into connection leaks, no connection reuse. -// -// Please Note: Response middlewares are not applicable, if you use this option. Basically you have -// taken over the control of response parsing from `Resty`. -func (r *Request) SetDoNotParseResponse(parse bool) *Request { - r.notParseResponse = parse - return r -} - -// SetPathParams method sets multiple URL path key-value pairs at one go in the -// resty current request instance. -// resty.R().SetPathParams(map[string]string{ -// "userId": "sample@sample.com", -// "subAccountId": "100002", -// }) -// -// Result: -// URL - /v1/users/{userId}/{subAccountId}/details -// Composed URL - /v1/users/sample@sample.com/100002/details -// It replace the value of the key while composing request URL. Also you can -// override Path Params value, which was set at client instance level. -func (r *Request) SetPathParams(params map[string]string) *Request { - for p, v := range params { - r.pathParams[p] = v - } - return r -} - -// ExpectContentType method allows to provide fallback `Content-Type` for automatic unmarshalling -// when `Content-Type` response header is unavailable. -func (r *Request) ExpectContentType(contentType string) *Request { - r.fallbackContentType = contentType - return r -} - -// SetJSONEscapeHTML method is to enable/disable the HTML escape on JSON marshal. -// -// NOTE: This option only applicable to standard JSON Marshaller. -func (r *Request) SetJSONEscapeHTML(b bool) *Request { - r.jsonEscapeHTML = b - return r -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// HTTP verb method starts here -//___________________________________ - -// Get method does GET HTTP request. It's defined in section 4.3.1 of RFC7231. -func (r *Request) Get(url string) (*Response, error) { - return r.Execute(MethodGet, url) -} - -// Head method does HEAD HTTP request. It's defined in section 4.3.2 of RFC7231. -func (r *Request) Head(url string) (*Response, error) { - return r.Execute(MethodHead, url) -} - -// Post method does POST HTTP request. It's defined in section 4.3.3 of RFC7231. -func (r *Request) Post(url string) (*Response, error) { - return r.Execute(MethodPost, url) -} - -// Put method does PUT HTTP request. It's defined in section 4.3.4 of RFC7231. -func (r *Request) Put(url string) (*Response, error) { - return r.Execute(MethodPut, url) -} - -// Delete method does DELETE HTTP request. It's defined in section 4.3.5 of RFC7231. -func (r *Request) Delete(url string) (*Response, error) { - return r.Execute(MethodDelete, url) -} - -// Options method does OPTIONS HTTP request. It's defined in section 4.3.7 of RFC7231. -func (r *Request) Options(url string) (*Response, error) { - return r.Execute(MethodOptions, url) -} - -// Patch method does PATCH HTTP request. It's defined in section 2 of RFC5789. -func (r *Request) Patch(url string) (*Response, error) { - return r.Execute(MethodPatch, url) -} - -// Execute method performs the HTTP request with given HTTP method and URL -// for current `Request`. -// resp, err := resty.R().Execute(resty.GET, "http://httpbin.org/get") -// -func (r *Request) Execute(method, url string) (*Response, error) { - var addrs []*net.SRV - var err error - - if r.isMultiPart && !(method == MethodPost || method == MethodPut) { - return nil, fmt.Errorf("multipart content is not allowed in HTTP verb [%v]", method) - } - - if r.SRV != nil { - _, addrs, err = net.LookupSRV(r.SRV.Service, "tcp", r.SRV.Domain) - if err != nil { - return nil, err - } - } - - r.Method = method - r.URL = r.selectAddr(addrs, url, 0) - - if r.client.RetryCount == 0 { - return r.client.execute(r) - } - - var resp *Response - attempt := 0 - _ = Backoff( - func() (*Response, error) { - attempt++ - - r.URL = r.selectAddr(addrs, url, attempt) - - resp, err = r.client.execute(r) - if err != nil { - r.client.Log.Printf("ERROR %v, Attempt %v", err, attempt) - if r.isContextCancelledIfAvailable() { - // stop Backoff from retrying request if request has been - // canceled by context - return resp, nil - } - } - - return resp, err - }, - Retries(r.client.RetryCount), - WaitTime(r.client.RetryWaitTime), - MaxWaitTime(r.client.RetryMaxWaitTime), - RetryConditions(r.client.RetryConditions), - ) - - return resp, err -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Request Unexported methods -//___________________________________ - -func (r *Request) fmtBodyString() (body string) { - body = "***** NO CONTENT *****" - if isPayloadSupported(r.Method, r.client.AllowGetMethodPayload) { - if _, ok := r.Body.(io.Reader); ok { - body = "***** BODY IS io.Reader *****" - return - } - - // multipart or form-data - if r.isMultiPart || r.isFormData { - body = r.bodyBuf.String() - return - } - - // request body data - if r.Body == nil { - return - } - var prtBodyBytes []byte - var err error - - contentType := r.Header.Get(hdrContentTypeKey) - kind := kindOf(r.Body) - if canJSONMarshal(contentType, kind) { - prtBodyBytes, err = json.MarshalIndent(&r.Body, "", " ") - } else if IsXMLType(contentType) && (kind == reflect.Struct) { - prtBodyBytes, err = xml.MarshalIndent(&r.Body, "", " ") - } else if b, ok := r.Body.(string); ok { - if IsJSONType(contentType) { - bodyBytes := []byte(b) - out := acquireBuffer() - defer releaseBuffer(out) - if err = json.Indent(out, bodyBytes, "", " "); err == nil { - prtBodyBytes = out.Bytes() - } - } else { - body = b - return - } - } else if b, ok := r.Body.([]byte); ok { - body = base64.StdEncoding.EncodeToString(b) - } - - if prtBodyBytes != nil && err == nil { - body = string(prtBodyBytes) - } - } - - return -} - -func (r *Request) selectAddr(addrs []*net.SRV, path string, attempt int) string { - if addrs == nil { - return path - } - - idx := attempt % len(addrs) - domain := strings.TrimRight(addrs[idx].Target, ".") - path = strings.TrimLeft(path, "/") - - return fmt.Sprintf("%s://%s:%d/%s", r.client.scheme, domain, addrs[idx].Port, path) -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/response.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/response.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/response.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/response.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - "time" -) - -// Response is an object represents executed request and its values. -type Response struct { - Request *Request - RawResponse *http.Response - - body []byte - size int64 - receivedAt time.Time -} - -// Body method returns HTTP response as []byte array for the executed request. -// Note: `Response.Body` might be nil, if `Request.SetOutput` is used. -func (r *Response) Body() []byte { - if r.RawResponse == nil { - return []byte{} - } - return r.body -} - -// Status method returns the HTTP status string for the executed request. -// Example: 200 OK -func (r *Response) Status() string { - if r.RawResponse == nil { - return "" - } - - return r.RawResponse.Status -} - -// StatusCode method returns the HTTP status code for the executed request. -// Example: 200 -func (r *Response) StatusCode() int { - if r.RawResponse == nil { - return 0 - } - - return r.RawResponse.StatusCode -} - -// Result method returns the response value as an object if it has one -func (r *Response) Result() interface{} { - return r.Request.Result -} - -// Error method returns the error object if it has one -func (r *Response) Error() interface{} { - return r.Request.Error -} - -// Header method returns the response headers -func (r *Response) Header() http.Header { - if r.RawResponse == nil { - return http.Header{} - } - - return r.RawResponse.Header -} - -// Cookies method to access all the response cookies -func (r *Response) Cookies() []*http.Cookie { - if r.RawResponse == nil { - return make([]*http.Cookie, 0) - } - - return r.RawResponse.Cookies() -} - -// String method returns the body of the server response as String. -func (r *Response) String() string { - if r.body == nil { - return "" - } - - return strings.TrimSpace(string(r.body)) -} - -// Time method returns the time of HTTP response time that from request we sent and received a request. -// See `response.ReceivedAt` to know when client recevied response and see `response.Request.Time` to know -// when client sent a request. -func (r *Response) Time() time.Duration { - return r.receivedAt.Sub(r.Request.Time) -} - -// ReceivedAt method returns when response got recevied from server for the request. -func (r *Response) ReceivedAt() time.Time { - return r.receivedAt -} - -// Size method returns the HTTP response size in bytes. Ya, you can relay on HTTP `Content-Length` header, -// however it won't be good for chucked transfer/compressed response. Since Resty calculates response size -// at the client end. You will get actual size of the http response. -func (r *Response) Size() int64 { - return r.size -} - -// RawBody method exposes the HTTP raw response body. Use this method in-conjunction with `SetDoNotParseResponse` -// option otherwise you get an error as `read err: http: read on closed response body`. -// -// Do not forget to close the body, otherwise you might get into connection leaks, no connection reuse. -// Basically you have taken over the control of response parsing from `Resty`. -func (r *Response) RawBody() io.ReadCloser { - if r.RawResponse == nil { - return nil - } - return r.RawResponse.Body -} - -// IsSuccess method returns true if HTTP status code >= 200 and <= 299 otherwise false. -func (r *Response) IsSuccess() bool { - return r.StatusCode() > 199 && r.StatusCode() < 300 -} - -// IsError method returns true if HTTP status code >= 400 otherwise false. -func (r *Response) IsError() bool { - return r.StatusCode() > 399 -} - -func (r *Response) fmtBodyString(sl int64) string { - if r.body != nil { - if int64(len(r.body)) > sl { - return fmt.Sprintf("***** RESPONSE TOO LARGE (size - %d) *****", len(r.body)) - } - ct := r.Header().Get(hdrContentTypeKey) - if IsJSONType(ct) { - out := acquireBuffer() - defer releaseBuffer(out) - if err := json.Indent(out, r.body, "", " "); err == nil { - return out.String() - } - } - return r.String() - } - - return "***** NO CONTENT *****" -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/resty.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/resty.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/resty.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/resty.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -// Package resty provides Simple HTTP and REST client library for Go. -package resty - -// Version # of resty -const Version = "1.12.0" diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/retry.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/retry.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/retry.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/retry.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "math" - "math/rand" - "time" -) - -const ( - defaultMaxRetries = 3 - defaultWaitTime = time.Duration(100) * time.Millisecond - defaultMaxWaitTime = time.Duration(2000) * time.Millisecond -) - -type ( - // Option is to create convenient retry options like wait time, max retries, etc. - Option func(*Options) - - // RetryConditionFunc type is for retry condition function - RetryConditionFunc func(*Response) (bool, error) - - // Options to hold go-resty retry values - Options struct { - maxRetries int - waitTime time.Duration - maxWaitTime time.Duration - retryConditions []RetryConditionFunc - } -) - -// Retries sets the max number of retries -func Retries(value int) Option { - return func(o *Options) { - o.maxRetries = value - } -} - -// WaitTime sets the default wait time to sleep between requests -func WaitTime(value time.Duration) Option { - return func(o *Options) { - o.waitTime = value - } -} - -// MaxWaitTime sets the max wait time to sleep between requests -func MaxWaitTime(value time.Duration) Option { - return func(o *Options) { - o.maxWaitTime = value - } -} - -// RetryConditions sets the conditions that will be checked for retry. -func RetryConditions(conditions []RetryConditionFunc) Option { - return func(o *Options) { - o.retryConditions = conditions - } -} - -// Backoff retries with increasing timeout duration up until X amount of retries -// (Default is 3 attempts, Override with option Retries(n)) -func Backoff(operation func() (*Response, error), options ...Option) error { - // Defaults - opts := Options{ - maxRetries: defaultMaxRetries, - waitTime: defaultWaitTime, - maxWaitTime: defaultMaxWaitTime, - retryConditions: []RetryConditionFunc{}, - } - - for _, o := range options { - o(&opts) - } - - var ( - resp *Response - err error - ) - base := float64(opts.waitTime) // Time to wait between each attempt - capLevel := float64(opts.maxWaitTime) // Maximum amount of wait time for the retry - for attempt := 0; attempt < opts.maxRetries; attempt++ { - resp, err = operation() - - var needsRetry bool - var conditionErr error - for _, condition := range opts.retryConditions { - needsRetry, conditionErr = condition(resp) - if needsRetry || conditionErr != nil { - break - } - } - - // If the operation returned no error, there was no condition satisfied and - // there was no error caused by the conditional functions. - if err == nil && !needsRetry && conditionErr == nil { - return nil - } - // Adding capped exponential backup with jitter - // See the following article... - // http://www.awsarchitectureblog.com/2015/03/backoff.html - temp := math.Min(capLevel, base*math.Exp2(float64(attempt))) - ri := int(temp / 2) - if ri <= 0 { - ri = 1<<31 - 1 // max int for arch 386 - } - sleepDuration := time.Duration(math.Abs(float64(ri + rand.Intn(ri)))) - - if sleepDuration < opts.waitTime { - sleepDuration = opts.waitTime - } - time.Sleep(sleepDuration) - } - - return err -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/.travis.yml consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/.travis.yml --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/.travis.yml 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -language: go - -sudo: false - -go: -# - 1.3 -# - 1.4 -# - 1.5 -# - 1.6 -# - 1.7 -# - 1.8.x -# - 1.9.x - - 1.10.x - - 1.11.x - - tip - -install: - - go get -v -t ./... - -script: - - go test ./... -coverprofile=coverage.txt -covermode=atomic - -after_success: - - bash <(curl -s https://codecov.io/bash) - -matrix: - allow_failures: - - go: tip diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/util.go consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/util.go --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/util.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/util.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,281 +0,0 @@ -// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. -// resty source code and usage is governed by a MIT style -// license that can be found in the LICENSE file. - -package resty - -import ( - "bytes" - "encoding/json" - "encoding/xml" - "fmt" - "io" - "log" - "mime/multipart" - "net/http" - "net/textproto" - "os" - "path/filepath" - "reflect" - "runtime" - "sort" - "strings" -) - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Package Helper methods -//___________________________________ - -// IsStringEmpty method tells whether given string is empty or not -func IsStringEmpty(str string) bool { - return len(strings.TrimSpace(str)) == 0 -} - -// DetectContentType method is used to figure out `Request.Body` content type for request header -func DetectContentType(body interface{}) string { - contentType := plainTextType - kind := kindOf(body) - switch kind { - case reflect.Struct, reflect.Map: - contentType = jsonContentType - case reflect.String: - contentType = plainTextType - default: - if b, ok := body.([]byte); ok { - contentType = http.DetectContentType(b) - } else if kind == reflect.Slice { - contentType = jsonContentType - } - } - - return contentType -} - -// IsJSONType method is to check JSON content type or not -func IsJSONType(ct string) bool { - return jsonCheck.MatchString(ct) -} - -// IsXMLType method is to check XML content type or not -func IsXMLType(ct string) bool { - return xmlCheck.MatchString(ct) -} - -// Unmarshal content into object from JSON or XML -// Deprecated: kept for backward compatibility -func Unmarshal(ct string, b []byte, d interface{}) (err error) { - if IsJSONType(ct) { - err = json.Unmarshal(b, d) - } else if IsXMLType(ct) { - err = xml.Unmarshal(b, d) - } - - return -} - -// Unmarshalc content into object from JSON or XML -func Unmarshalc(c *Client, ct string, b []byte, d interface{}) (err error) { - if IsJSONType(ct) { - err = c.JSONUnmarshal(b, d) - } else if IsXMLType(ct) { - err = xml.Unmarshal(b, d) - } - - return -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// RequestLog and ResponseLog type -//___________________________________ - -// RequestLog struct is used to collected information from resty request -// instance for debug logging. It sent to request log callback before resty -// actually logs the information. -type RequestLog struct { - Header http.Header - Body string -} - -// ResponseLog struct is used to collected information from resty response -// instance for debug logging. It sent to response log callback before resty -// actually logs the information. -type ResponseLog struct { - Header http.Header - Body string -} - -//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -// Package Unexported methods -//___________________________________ - -// way to disable the HTML escape as opt-in -func jsonMarshal(c *Client, r *Request, d interface{}) ([]byte, error) { - if !r.jsonEscapeHTML { - return noescapeJSONMarshal(d) - } else if !c.jsonEscapeHTML { - return noescapeJSONMarshal(d) - } - return c.JSONMarshal(d) -} - -func firstNonEmpty(v ...string) string { - for _, s := range v { - if !IsStringEmpty(s) { - return s - } - } - return "" -} - -func getLogger(w io.Writer) *log.Logger { - return log.New(w, "RESTY ", log.LstdFlags) -} - -var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") - -func escapeQuotes(s string) string { - return quoteEscaper.Replace(s) -} - -func createMultipartHeader(param, fileName, contentType string) textproto.MIMEHeader { - hdr := make(textproto.MIMEHeader) - hdr.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s"; filename="%s"`, - escapeQuotes(param), escapeQuotes(fileName))) - hdr.Set("Content-Type", contentType) - return hdr -} - -func addMultipartFormField(w *multipart.Writer, mf *MultipartField) error { - partWriter, err := w.CreatePart(createMultipartHeader(mf.Param, mf.FileName, mf.ContentType)) - if err != nil { - return err - } - - _, err = io.Copy(partWriter, mf.Reader) - return err -} - -func writeMultipartFormFile(w *multipart.Writer, fieldName, fileName string, r io.Reader) error { - // Auto detect actual multipart content type - cbuf := make([]byte, 512) - size, err := r.Read(cbuf) - if err != nil { - return err - } - - partWriter, err := w.CreatePart(createMultipartHeader(fieldName, fileName, http.DetectContentType(cbuf))) - if err != nil { - return err - } - - if _, err = partWriter.Write(cbuf[:size]); err != nil { - return err - } - - _, err = io.Copy(partWriter, r) - return err -} - -func addFile(w *multipart.Writer, fieldName, path string) error { - file, err := os.Open(path) - if err != nil { - return err - } - defer closeq(file) - return writeMultipartFormFile(w, fieldName, filepath.Base(path), file) -} - -func addFileReader(w *multipart.Writer, f *File) error { - return writeMultipartFormFile(w, f.ParamName, f.Name, f.Reader) -} - -func getPointer(v interface{}) interface{} { - vv := valueOf(v) - if vv.Kind() == reflect.Ptr { - return v - } - return reflect.New(vv.Type()).Interface() -} - -func isPayloadSupported(m string, allowMethodGet bool) bool { - return !(m == MethodHead || m == MethodOptions || (m == MethodGet && !allowMethodGet)) -} - -func typeOf(i interface{}) reflect.Type { - return indirect(valueOf(i)).Type() -} - -func valueOf(i interface{}) reflect.Value { - return reflect.ValueOf(i) -} - -func indirect(v reflect.Value) reflect.Value { - return reflect.Indirect(v) -} - -func kindOf(v interface{}) reflect.Kind { - return typeOf(v).Kind() -} - -func createDirectory(dir string) (err error) { - if _, err = os.Stat(dir); err != nil { - if os.IsNotExist(err) { - if err = os.MkdirAll(dir, 0755); err != nil { - return - } - } - } - return -} - -func canJSONMarshal(contentType string, kind reflect.Kind) bool { - return IsJSONType(contentType) && (kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice) -} - -func functionName(i interface{}) string { - return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() -} - -func acquireBuffer() *bytes.Buffer { - return bufPool.Get().(*bytes.Buffer) -} - -func releaseBuffer(buf *bytes.Buffer) { - if buf != nil { - buf.Reset() - bufPool.Put(buf) - } -} - -func closeq(v interface{}) { - if c, ok := v.(io.Closer); ok { - sliently(c.Close()) - } -} - -func sliently(_ ...interface{}) {} - -func composeHeaders(hdrs http.Header) string { - var str []string - for _, k := range sortHeaderKeys(hdrs) { - str = append(str, fmt.Sprintf("%25s: %s", k, strings.Join(hdrs[k], ", "))) - } - return strings.Join(str, "\n") -} - -func sortHeaderKeys(hdrs http.Header) []string { - var keys []string - for key := range hdrs { - keys = append(keys, key) - } - sort.Strings(keys) - return keys -} - -func copyHeaders(hdrs http.Header) http.Header { - nh := http.Header{} - for k, v := range hdrs { - nh[k] = v - } - return nh -} diff -Nru consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/WORKSPACE consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/WORKSPACE --- consul-1.7.4+dfsg1/vendor/gopkg.in/resty.v1/WORKSPACE 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/gopkg.in/resty.v1/WORKSPACE 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -workspace(name = "resty") - -git_repository( - name = "io_bazel_rules_go", - remote = "https://github.com/bazelbuild/rules_go.git", - tag = "0.13.0", -) - -git_repository( - name = "bazel_gazelle", - remote = "https://github.com/bazelbuild/bazel-gazelle.git", - tag = "0.13.0", -) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_rules_dependencies", - "go_register_toolchains", -) - -go_rules_dependencies() - -go_register_toolchains() - -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") - -gazelle_dependencies() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true +// +groupName=admissionregistration.k8s.io + +// Package v1 is the v1 version of the API. +// AdmissionConfiguration and AdmissionPluginConfiguration are legacy static admission plugin configuration +// MutatingWebhookConfiguration and ValidatingWebhookConfiguration are for the +// new dynamic admission controller configuration. +package v1 // import "k8s.io/api/admissionregistration/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3469 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *MutatingWebhook) Reset() { *m = MutatingWebhook{} } +func (*MutatingWebhook) ProtoMessage() {} +func (*MutatingWebhook) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{0} +} +func (m *MutatingWebhook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MutatingWebhook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MutatingWebhook) XXX_Merge(src proto.Message) { + xxx_messageInfo_MutatingWebhook.Merge(m, src) +} +func (m *MutatingWebhook) XXX_Size() int { + return m.Size() +} +func (m *MutatingWebhook) XXX_DiscardUnknown() { + xxx_messageInfo_MutatingWebhook.DiscardUnknown(m) +} + +var xxx_messageInfo_MutatingWebhook proto.InternalMessageInfo + +func (m *MutatingWebhookConfiguration) Reset() { *m = MutatingWebhookConfiguration{} } +func (*MutatingWebhookConfiguration) ProtoMessage() {} +func (*MutatingWebhookConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{1} +} +func (m *MutatingWebhookConfiguration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MutatingWebhookConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MutatingWebhookConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_MutatingWebhookConfiguration.Merge(m, src) +} +func (m *MutatingWebhookConfiguration) XXX_Size() int { + return m.Size() +} +func (m *MutatingWebhookConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_MutatingWebhookConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_MutatingWebhookConfiguration proto.InternalMessageInfo + +func (m *MutatingWebhookConfigurationList) Reset() { *m = MutatingWebhookConfigurationList{} } +func (*MutatingWebhookConfigurationList) ProtoMessage() {} +func (*MutatingWebhookConfigurationList) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{2} +} +func (m *MutatingWebhookConfigurationList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MutatingWebhookConfigurationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MutatingWebhookConfigurationList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MutatingWebhookConfigurationList.Merge(m, src) +} +func (m *MutatingWebhookConfigurationList) XXX_Size() int { + return m.Size() +} +func (m *MutatingWebhookConfigurationList) XXX_DiscardUnknown() { + xxx_messageInfo_MutatingWebhookConfigurationList.DiscardUnknown(m) +} + +var xxx_messageInfo_MutatingWebhookConfigurationList proto.InternalMessageInfo + +func (m *Rule) Reset() { *m = Rule{} } +func (*Rule) ProtoMessage() {} +func (*Rule) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{3} +} +func (m *Rule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Rule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Rule) XXX_Merge(src proto.Message) { + xxx_messageInfo_Rule.Merge(m, src) +} +func (m *Rule) XXX_Size() int { + return m.Size() +} +func (m *Rule) XXX_DiscardUnknown() { + xxx_messageInfo_Rule.DiscardUnknown(m) +} + +var xxx_messageInfo_Rule proto.InternalMessageInfo + +func (m *RuleWithOperations) Reset() { *m = RuleWithOperations{} } +func (*RuleWithOperations) ProtoMessage() {} +func (*RuleWithOperations) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{4} +} +func (m *RuleWithOperations) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuleWithOperations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuleWithOperations) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuleWithOperations.Merge(m, src) +} +func (m *RuleWithOperations) XXX_Size() int { + return m.Size() +} +func (m *RuleWithOperations) XXX_DiscardUnknown() { + xxx_messageInfo_RuleWithOperations.DiscardUnknown(m) +} + +var xxx_messageInfo_RuleWithOperations proto.InternalMessageInfo + +func (m *ServiceReference) Reset() { *m = ServiceReference{} } +func (*ServiceReference) ProtoMessage() {} +func (*ServiceReference) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{5} +} +func (m *ServiceReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServiceReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceReference.Merge(m, src) +} +func (m *ServiceReference) XXX_Size() int { + return m.Size() +} +func (m *ServiceReference) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceReference.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceReference proto.InternalMessageInfo + +func (m *ValidatingWebhook) Reset() { *m = ValidatingWebhook{} } +func (*ValidatingWebhook) ProtoMessage() {} +func (*ValidatingWebhook) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{6} +} +func (m *ValidatingWebhook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingWebhook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingWebhook) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingWebhook.Merge(m, src) +} +func (m *ValidatingWebhook) XXX_Size() int { + return m.Size() +} +func (m *ValidatingWebhook) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingWebhook.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingWebhook proto.InternalMessageInfo + +func (m *ValidatingWebhookConfiguration) Reset() { *m = ValidatingWebhookConfiguration{} } +func (*ValidatingWebhookConfiguration) ProtoMessage() {} +func (*ValidatingWebhookConfiguration) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{7} +} +func (m *ValidatingWebhookConfiguration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingWebhookConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingWebhookConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingWebhookConfiguration.Merge(m, src) +} +func (m *ValidatingWebhookConfiguration) XXX_Size() int { + return m.Size() +} +func (m *ValidatingWebhookConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingWebhookConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingWebhookConfiguration proto.InternalMessageInfo + +func (m *ValidatingWebhookConfigurationList) Reset() { *m = ValidatingWebhookConfigurationList{} } +func (*ValidatingWebhookConfigurationList) ProtoMessage() {} +func (*ValidatingWebhookConfigurationList) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{8} +} +func (m *ValidatingWebhookConfigurationList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingWebhookConfigurationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingWebhookConfigurationList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingWebhookConfigurationList.Merge(m, src) +} +func (m *ValidatingWebhookConfigurationList) XXX_Size() int { + return m.Size() +} +func (m *ValidatingWebhookConfigurationList) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingWebhookConfigurationList.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingWebhookConfigurationList proto.InternalMessageInfo + +func (m *WebhookClientConfig) Reset() { *m = WebhookClientConfig{} } +func (*WebhookClientConfig) ProtoMessage() {} +func (*WebhookClientConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_aaac5994f79683e8, []int{9} +} +func (m *WebhookClientConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WebhookClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WebhookClientConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_WebhookClientConfig.Merge(m, src) +} +func (m *WebhookClientConfig) XXX_Size() int { + return m.Size() +} +func (m *WebhookClientConfig) XXX_DiscardUnknown() { + xxx_messageInfo_WebhookClientConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_WebhookClientConfig proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MutatingWebhook)(nil), "k8s.io.api.admissionregistration.v1.MutatingWebhook") + proto.RegisterType((*MutatingWebhookConfiguration)(nil), "k8s.io.api.admissionregistration.v1.MutatingWebhookConfiguration") + proto.RegisterType((*MutatingWebhookConfigurationList)(nil), "k8s.io.api.admissionregistration.v1.MutatingWebhookConfigurationList") + proto.RegisterType((*Rule)(nil), "k8s.io.api.admissionregistration.v1.Rule") + proto.RegisterType((*RuleWithOperations)(nil), "k8s.io.api.admissionregistration.v1.RuleWithOperations") + proto.RegisterType((*ServiceReference)(nil), "k8s.io.api.admissionregistration.v1.ServiceReference") + proto.RegisterType((*ValidatingWebhook)(nil), "k8s.io.api.admissionregistration.v1.ValidatingWebhook") + proto.RegisterType((*ValidatingWebhookConfiguration)(nil), "k8s.io.api.admissionregistration.v1.ValidatingWebhookConfiguration") + proto.RegisterType((*ValidatingWebhookConfigurationList)(nil), "k8s.io.api.admissionregistration.v1.ValidatingWebhookConfigurationList") + proto.RegisterType((*WebhookClientConfig)(nil), "k8s.io.api.admissionregistration.v1.WebhookClientConfig") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1/generated.proto", fileDescriptor_aaac5994f79683e8) +} + +var fileDescriptor_aaac5994f79683e8 = []byte{ + // 1104 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xc6, 0x76, 0x63, 0x8f, 0xf3, 0xa7, 0x19, 0xa0, 0x35, 0xa1, 0xf2, 0x5a, 0x46, 0x42, + 0x46, 0xc0, 0x6e, 0x13, 0x4a, 0xa9, 0xb8, 0xa0, 0x6c, 0xf8, 0xa3, 0x88, 0xa4, 0x8d, 0x26, 0x6d, + 0x8a, 0x50, 0x0e, 0x1d, 0xaf, 0xc7, 0xf6, 0x10, 0x7b, 0x67, 0x35, 0x33, 0xeb, 0x92, 0x1b, 0x1f, + 0x81, 0xaf, 0x00, 0x9f, 0x82, 0x1b, 0xe2, 0x96, 0x63, 0x8f, 0x39, 0xa0, 0x85, 0x2c, 0x17, 0x0e, + 0x7c, 0x82, 0x9c, 0xd0, 0xcc, 0xae, 0x77, 0xfd, 0x27, 0x09, 0x56, 0x0e, 0x3d, 0xe5, 0xb6, 0xf3, + 0x7b, 0xf3, 0x7e, 0x6f, 0xde, 0xdb, 0xf7, 0xde, 0x0f, 0xec, 0x1c, 0x3d, 0x12, 0x16, 0x65, 0xf6, + 0x51, 0xd0, 0x24, 0xdc, 0x23, 0x92, 0x08, 0x7b, 0x40, 0xbc, 0x16, 0xe3, 0x76, 0x62, 0xc0, 0x3e, + 0xb5, 0x71, 0xab, 0x4f, 0x85, 0xa0, 0xcc, 0xe3, 0xa4, 0x43, 0x85, 0xe4, 0x58, 0x52, 0xe6, 0xd9, + 0x83, 0x75, 0xbb, 0x43, 0x3c, 0xc2, 0xb1, 0x24, 0x2d, 0xcb, 0xe7, 0x4c, 0x32, 0xf8, 0x6e, 0xec, + 0x64, 0x61, 0x9f, 0x5a, 0x17, 0x3a, 0x59, 0x83, 0xf5, 0xb5, 0x8f, 0x3a, 0x54, 0x76, 0x83, 0xa6, + 0xe5, 0xb2, 0xbe, 0xdd, 0x61, 0x1d, 0x66, 0x6b, 0xdf, 0x66, 0xd0, 0xd6, 0x27, 0x7d, 0xd0, 0x5f, + 0x31, 0xe7, 0xda, 0x83, 0xec, 0x21, 0x7d, 0xec, 0x76, 0xa9, 0x47, 0xf8, 0xb1, 0xed, 0x1f, 0x75, + 0x14, 0x20, 0xec, 0x3e, 0x91, 0xf8, 0x82, 0x97, 0xac, 0xd9, 0x97, 0x79, 0xf1, 0xc0, 0x93, 0xb4, + 0x4f, 0xa6, 0x1c, 0x1e, 0xfe, 0x9f, 0x83, 0x70, 0xbb, 0xa4, 0x8f, 0x27, 0xfd, 0xea, 0xbf, 0x2d, + 0x80, 0x95, 0xdd, 0x40, 0x62, 0x49, 0xbd, 0xce, 0x73, 0xd2, 0xec, 0x32, 0x76, 0x04, 0x6b, 0x20, + 0xef, 0xe1, 0x3e, 0xa9, 0x18, 0x35, 0xa3, 0x51, 0x72, 0x16, 0x4f, 0x42, 0x73, 0x2e, 0x0a, 0xcd, + 0xfc, 0x63, 0xdc, 0x27, 0x48, 0x5b, 0x20, 0x07, 0x8b, 0x6e, 0x8f, 0x12, 0x4f, 0x6e, 0x31, 0xaf, + 0x4d, 0x3b, 0x95, 0xf9, 0x9a, 0xd1, 0x28, 0x6f, 0x3c, 0xb2, 0x66, 0xa8, 0x9f, 0x95, 0x44, 0xd9, + 0x1a, 0xf1, 0x77, 0xde, 0x4c, 0x62, 0x2c, 0x8e, 0xa2, 0x68, 0x2c, 0x06, 0x3c, 0x04, 0x05, 0x1e, + 0xf4, 0x88, 0xa8, 0xe4, 0x6a, 0xb9, 0x46, 0x79, 0xe3, 0xd3, 0x99, 0x82, 0xa1, 0xa0, 0x47, 0x9e, + 0x53, 0xd9, 0x7d, 0xe2, 0x93, 0x18, 0x14, 0xce, 0x52, 0x12, 0xab, 0xa0, 0x6c, 0x02, 0xc5, 0xa4, + 0x70, 0x07, 0x2c, 0xb5, 0x31, 0xed, 0x05, 0x9c, 0xec, 0xb1, 0x1e, 0x75, 0x8f, 0x2b, 0x79, 0x9d, + 0xfc, 0x7b, 0x51, 0x68, 0x2e, 0x7d, 0x35, 0x6a, 0x38, 0x0f, 0xcd, 0xd5, 0x31, 0xe0, 0xe9, 0xb1, + 0x4f, 0xd0, 0xb8, 0x33, 0xfc, 0x02, 0x94, 0xfb, 0x58, 0xba, 0xdd, 0x84, 0xab, 0xa4, 0xb9, 0xea, + 0x51, 0x68, 0x96, 0x77, 0x33, 0xf8, 0x3c, 0x34, 0x57, 0x46, 0x8e, 0x9a, 0x67, 0xd4, 0x0d, 0xfe, + 0x00, 0x56, 0x55, 0xb5, 0x85, 0x8f, 0x5d, 0xb2, 0x4f, 0x7a, 0xc4, 0x95, 0x8c, 0x57, 0x0a, 0xba, + 0xd4, 0x1f, 0x8f, 0x64, 0x9f, 0xfe, 0x6f, 0xcb, 0x3f, 0xea, 0x28, 0x40, 0x58, 0xaa, 0xad, 0x54, + 0xfa, 0x3b, 0xb8, 0x49, 0x7a, 0x43, 0x57, 0xe7, 0xad, 0x28, 0x34, 0x57, 0x1f, 0x4f, 0x32, 0xa2, + 0xe9, 0x20, 0x90, 0x81, 0x65, 0xd6, 0xfc, 0x9e, 0xb8, 0x32, 0x0d, 0x5b, 0xbe, 0x7e, 0x58, 0x18, + 0x85, 0xe6, 0xf2, 0x93, 0x31, 0x3a, 0x34, 0x41, 0xaf, 0x0a, 0x26, 0x68, 0x8b, 0x7c, 0xd9, 0x6e, + 0x13, 0x57, 0x8a, 0xca, 0xad, 0xac, 0x60, 0xfb, 0x19, 0xac, 0x0a, 0x96, 0x1d, 0xb7, 0x7a, 0x58, + 0x08, 0x34, 0xea, 0x06, 0x3f, 0x03, 0xcb, 0xaa, 0xd7, 0x59, 0x20, 0xf7, 0x89, 0xcb, 0xbc, 0x96, + 0xa8, 0x2c, 0xd4, 0x8c, 0x46, 0x21, 0x7e, 0xc1, 0xd3, 0x31, 0x0b, 0x9a, 0xb8, 0x09, 0x9f, 0x81, + 0xbb, 0x69, 0x17, 0x21, 0x32, 0xa0, 0xe4, 0xe5, 0x01, 0xe1, 0xea, 0x20, 0x2a, 0xc5, 0x5a, 0xae, + 0x51, 0x72, 0xde, 0x89, 0x42, 0xf3, 0xee, 0xe6, 0xc5, 0x57, 0xd0, 0x65, 0xbe, 0xf0, 0x05, 0x80, + 0x9c, 0x50, 0x6f, 0xc0, 0x5c, 0xdd, 0x7e, 0x49, 0x43, 0x00, 0x9d, 0xdf, 0xfd, 0x28, 0x34, 0x21, + 0x9a, 0xb2, 0x9e, 0x87, 0xe6, 0x9d, 0x69, 0x54, 0xb7, 0xc7, 0x05, 0x5c, 0xf5, 0x53, 0x03, 0xdc, + 0x9b, 0x98, 0xe0, 0x78, 0x62, 0x82, 0xb8, 0xe3, 0xe1, 0x0b, 0x50, 0x54, 0x3f, 0xa6, 0x85, 0x25, + 0xd6, 0x23, 0x5d, 0xde, 0xb8, 0x3f, 0xdb, 0x6f, 0x8c, 0xff, 0xd9, 0x2e, 0x91, 0xd8, 0x81, 0xc9, + 0xd0, 0x80, 0x0c, 0x43, 0x29, 0x2b, 0x3c, 0x00, 0xc5, 0x24, 0xb2, 0xa8, 0xcc, 0xeb, 0xe9, 0x7c, + 0x30, 0xd3, 0x74, 0x4e, 0x3c, 0xdb, 0xc9, 0xab, 0x28, 0xa8, 0xf8, 0x32, 0xe1, 0xaa, 0xff, 0x63, + 0x80, 0xda, 0x55, 0xa9, 0xed, 0x50, 0x21, 0xe1, 0xe1, 0x54, 0x7a, 0xd6, 0x8c, 0x5d, 0x4a, 0x45, + 0x9c, 0xdc, 0xed, 0x24, 0xb9, 0xe2, 0x10, 0x19, 0x49, 0xad, 0x0d, 0x0a, 0x54, 0x92, 0xfe, 0x30, + 0xaf, 0xcd, 0xeb, 0xe4, 0x35, 0xf6, 0xe6, 0x6c, 0xff, 0x6c, 0x2b, 0x5e, 0x14, 0xd3, 0xd7, 0x7f, + 0x37, 0x40, 0x5e, 0x2d, 0x24, 0xf8, 0x01, 0x28, 0x61, 0x9f, 0x7e, 0xcd, 0x59, 0xe0, 0x8b, 0x8a, + 0xa1, 0x3b, 0x6f, 0x29, 0x0a, 0xcd, 0xd2, 0xe6, 0xde, 0x76, 0x0c, 0xa2, 0xcc, 0x0e, 0xd7, 0x41, + 0x19, 0xfb, 0x34, 0x6d, 0xd4, 0x79, 0x7d, 0x7d, 0x45, 0x8d, 0xcd, 0xe6, 0xde, 0x76, 0xda, 0x9c, + 0xa3, 0x77, 0x14, 0x3f, 0x27, 0x82, 0x05, 0xdc, 0x4d, 0x56, 0x69, 0xc2, 0x8f, 0x86, 0x20, 0xca, + 0xec, 0xf0, 0x43, 0x50, 0x10, 0x2e, 0xf3, 0x49, 0xb2, 0x0d, 0xef, 0xa8, 0x67, 0xef, 0x2b, 0xe0, + 0x3c, 0x34, 0x4b, 0xfa, 0x43, 0xb7, 0x65, 0x7c, 0xa9, 0xfe, 0x8b, 0x01, 0xe0, 0xf4, 0xc2, 0x85, + 0x9f, 0x03, 0xc0, 0xd2, 0x53, 0x92, 0x92, 0xa9, 0x7b, 0x29, 0x45, 0xcf, 0x43, 0x73, 0x29, 0x3d, + 0x69, 0xca, 0x11, 0x17, 0xf8, 0x0d, 0xc8, 0xab, 0x25, 0x9d, 0xa8, 0xcc, 0xfb, 0x33, 0x2f, 0xfe, + 0x4c, 0xba, 0xd4, 0x09, 0x69, 0x92, 0xfa, 0xcf, 0x06, 0xb8, 0xbd, 0x4f, 0xf8, 0x80, 0xba, 0x04, + 0x91, 0x36, 0xe1, 0xc4, 0x73, 0x09, 0xb4, 0x41, 0x29, 0x5d, 0x82, 0x89, 0xec, 0xad, 0x26, 0xbe, + 0xa5, 0x74, 0x61, 0xa2, 0xec, 0x4e, 0x2a, 0x91, 0xf3, 0x97, 0x4a, 0xe4, 0x3d, 0x90, 0xf7, 0xb1, + 0xec, 0x56, 0x72, 0xfa, 0x46, 0x51, 0x59, 0xf7, 0xb0, 0xec, 0x22, 0x8d, 0x6a, 0x2b, 0xe3, 0x52, + 0xd7, 0xb5, 0x90, 0x58, 0x19, 0x97, 0x48, 0xa3, 0xf5, 0x3f, 0x6f, 0x81, 0xd5, 0x03, 0xdc, 0xa3, + 0xad, 0x1b, 0x59, 0xbe, 0x91, 0xe5, 0x2b, 0x65, 0x19, 0xdc, 0xc8, 0xf2, 0x75, 0x64, 0xb9, 0xfe, + 0x87, 0x01, 0xaa, 0x53, 0x13, 0xf6, 0xba, 0x65, 0xf3, 0xdb, 0x29, 0xd9, 0x7c, 0x38, 0xd3, 0xf4, + 0x4c, 0x3d, 0x7c, 0x4a, 0x38, 0xff, 0x35, 0x40, 0xfd, 0xea, 0xf4, 0x5e, 0x83, 0x74, 0x76, 0xc7, + 0xa5, 0x73, 0xeb, 0x7a, 0xb9, 0xcd, 0x22, 0x9e, 0xbf, 0x1a, 0xe0, 0x8d, 0x0b, 0xf6, 0x17, 0x7c, + 0x1b, 0xe4, 0x02, 0xde, 0x4b, 0x56, 0xf0, 0x42, 0x14, 0x9a, 0xb9, 0x67, 0x68, 0x07, 0x29, 0x0c, + 0x1e, 0x82, 0x05, 0x11, 0xab, 0x40, 0x92, 0xf9, 0x27, 0x33, 0x3d, 0x6f, 0x52, 0x39, 0x9c, 0x72, + 0x14, 0x9a, 0x0b, 0x43, 0x74, 0x48, 0x09, 0x1b, 0xa0, 0xe8, 0x62, 0x27, 0xf0, 0x5a, 0x89, 0x6a, + 0x2d, 0x3a, 0x8b, 0xaa, 0x48, 0x5b, 0x9b, 0x31, 0x86, 0x52, 0xab, 0xd3, 0x38, 0x39, 0xab, 0xce, + 0xbd, 0x3a, 0xab, 0xce, 0x9d, 0x9e, 0x55, 0xe7, 0x7e, 0x8c, 0xaa, 0xc6, 0x49, 0x54, 0x35, 0x5e, + 0x45, 0x55, 0xe3, 0x34, 0xaa, 0x1a, 0x7f, 0x45, 0x55, 0xe3, 0xa7, 0xbf, 0xab, 0x73, 0xdf, 0xcd, + 0x0f, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x57, 0x91, 0x2c, 0x7b, 0xeb, 0x0e, 0x00, 0x00, +} + +func (m *MutatingWebhook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MutatingWebhook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MutatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ObjectSelector != nil { + { + size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + if m.ReinvocationPolicy != nil { + i -= len(*m.ReinvocationPolicy) + copy(dAtA[i:], *m.ReinvocationPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReinvocationPolicy))) + i-- + dAtA[i] = 0x52 + } + if m.MatchPolicy != nil { + i -= len(*m.MatchPolicy) + copy(dAtA[i:], *m.MatchPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) + i-- + dAtA[i] = 0x4a + } + if len(m.AdmissionReviewVersions) > 0 { + for iNdEx := len(m.AdmissionReviewVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdmissionReviewVersions[iNdEx]) + copy(dAtA[i:], m.AdmissionReviewVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdmissionReviewVersions[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x38 + } + if m.SideEffects != nil { + i -= len(*m.SideEffects) + copy(dAtA[i:], *m.SideEffects) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) + i-- + dAtA[i] = 0x32 + } + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.FailurePolicy != nil { + i -= len(*m.FailurePolicy) + copy(dAtA[i:], *m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MutatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MutatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MutatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Webhooks) > 0 { + for iNdEx := len(m.Webhooks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Webhooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MutatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MutatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MutatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Rule) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Rule) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Rule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scope != nil { + i -= len(*m.Scope) + copy(dAtA[i:], *m.Scope) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Scope))) + i-- + dAtA[i] = 0x22 + } + if len(m.Resources) > 0 { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.APIVersions) > 0 { + for iNdEx := len(m.APIVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIVersions[iNdEx]) + copy(dAtA[i:], m.APIVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersions[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *RuleWithOperations) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuleWithOperations) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuleWithOperations) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Rule.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Operations) > 0 { + for iNdEx := len(m.Operations) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Operations[iNdEx]) + copy(dAtA[i:], m.Operations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operations[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ServiceReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ServiceReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Port != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Port)) + i-- + dAtA[i] = 0x20 + } + if m.Path != nil { + i -= len(*m.Path) + copy(dAtA[i:], *m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Path))) + i-- + dAtA[i] = 0x1a + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ValidatingWebhook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatingWebhook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ObjectSelector != nil { + { + size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if m.MatchPolicy != nil { + i -= len(*m.MatchPolicy) + copy(dAtA[i:], *m.MatchPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) + i-- + dAtA[i] = 0x4a + } + if len(m.AdmissionReviewVersions) > 0 { + for iNdEx := len(m.AdmissionReviewVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdmissionReviewVersions[iNdEx]) + copy(dAtA[i:], m.AdmissionReviewVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdmissionReviewVersions[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x38 + } + if m.SideEffects != nil { + i -= len(*m.SideEffects) + copy(dAtA[i:], *m.SideEffects) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) + i-- + dAtA[i] = 0x32 + } + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.FailurePolicy != nil { + i -= len(*m.FailurePolicy) + copy(dAtA[i:], *m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ValidatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Webhooks) > 0 { + for iNdEx := len(m.Webhooks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Webhooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ValidatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *WebhookClientConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WebhookClientConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WebhookClientConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.URL != nil { + i -= len(*m.URL) + copy(dAtA[i:], *m.URL) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.URL))) + i-- + dAtA[i] = 0x1a + } + if m.CABundle != nil { + i -= len(m.CABundle) + copy(dAtA[i:], m.CABundle) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CABundle))) + i-- + dAtA[i] = 0x12 + } + if m.Service != nil { + { + size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MutatingWebhook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SideEffects != nil { + l = len(*m.SideEffects) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReinvocationPolicy != nil { + l = len(*m.ReinvocationPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *MutatingWebhookConfiguration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Webhooks) > 0 { + for _, e := range m.Webhooks { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *MutatingWebhookConfigurationList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Rule) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.APIGroups) > 0 { + for _, s := range m.APIGroups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.APIVersions) > 0 { + for _, s := range m.APIVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Resources) > 0 { + for _, s := range m.Resources { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Scope != nil { + l = len(*m.Scope) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RuleWithOperations) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Operations) > 0 { + for _, s := range m.Operations { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.Rule.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Path != nil { + l = len(*m.Path) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Port != nil { + n += 1 + sovGenerated(uint64(*m.Port)) + } + return n +} + +func (m *ValidatingWebhook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SideEffects != nil { + l = len(*m.SideEffects) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ValidatingWebhookConfiguration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Webhooks) > 0 { + for _, e := range m.Webhooks { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ValidatingWebhookConfigurationList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *WebhookClientConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Service != nil { + l = m.Service.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CABundle != nil { + l = len(m.CABundle) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.URL != nil { + l = len(*m.URL) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *MutatingWebhook) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]RuleWithOperations{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "RuleWithOperations", "RuleWithOperations", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&MutatingWebhook{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, + `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, + `ReinvocationPolicy:` + valueToStringGenerated(this.ReinvocationPolicy) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *MutatingWebhookConfiguration) String() string { + if this == nil { + return "nil" + } + repeatedStringForWebhooks := "[]MutatingWebhook{" + for _, f := range this.Webhooks { + repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "MutatingWebhook", "MutatingWebhook", 1), `&`, ``, 1) + "," + } + repeatedStringForWebhooks += "}" + s := strings.Join([]string{`&MutatingWebhookConfiguration{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Webhooks:` + repeatedStringForWebhooks + `,`, + `}`, + }, "") + return s +} +func (this *MutatingWebhookConfigurationList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]MutatingWebhookConfiguration{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "MutatingWebhookConfiguration", "MutatingWebhookConfiguration", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&MutatingWebhookConfigurationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *Rule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Rule{`, + `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, + `APIVersions:` + fmt.Sprintf("%v", this.APIVersions) + `,`, + `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, + `Scope:` + valueToStringGenerated(this.Scope) + `,`, + `}`, + }, "") + return s +} +func (this *RuleWithOperations) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuleWithOperations{`, + `Operations:` + fmt.Sprintf("%v", this.Operations) + `,`, + `Rule:` + strings.Replace(strings.Replace(this.Rule.String(), "Rule", "Rule", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceReference{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Path:` + valueToStringGenerated(this.Path) + `,`, + `Port:` + valueToStringGenerated(this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingWebhook) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]RuleWithOperations{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "RuleWithOperations", "RuleWithOperations", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&ValidatingWebhook{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, + `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingWebhookConfiguration) String() string { + if this == nil { + return "nil" + } + repeatedStringForWebhooks := "[]ValidatingWebhook{" + for _, f := range this.Webhooks { + repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "ValidatingWebhook", "ValidatingWebhook", 1), `&`, ``, 1) + "," + } + repeatedStringForWebhooks += "}" + s := strings.Join([]string{`&ValidatingWebhookConfiguration{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Webhooks:` + repeatedStringForWebhooks + `,`, + `}`, + }, "") + return s +} +func (this *ValidatingWebhookConfigurationList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ValidatingWebhookConfiguration{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ValidatingWebhookConfiguration", "ValidatingWebhookConfiguration", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ValidatingWebhookConfigurationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *WebhookClientConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WebhookClientConfig{`, + `Service:` + strings.Replace(this.Service.String(), "ServiceReference", "ServiceReference", 1) + `,`, + `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, + `URL:` + valueToStringGenerated(this.URL) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, RuleWithOperations{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := FailurePolicyType(dAtA[iNdEx:postIndex]) + m.FailurePolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideEffects", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := SideEffectClass(dAtA[iNdEx:postIndex]) + m.SideEffects = &s + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReinvocationPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ReinvocationPolicyType(dAtA[iNdEx:postIndex]) + m.ReinvocationPolicy = &s + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhookConfiguration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Webhooks = append(m.Webhooks, MutatingWebhook{}) + if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhookConfigurationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, MutatingWebhookConfiguration{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Rule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Rule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Rule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIGroups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIGroups = append(m.APIGroups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersions = append(m.APIVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ScopeType(dAtA[iNdEx:postIndex]) + m.Scope = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuleWithOperations) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuleWithOperations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuleWithOperations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operations = append(m.Operations, OperationType(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Rule.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Path = &s + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Port = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingWebhook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingWebhook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, RuleWithOperations{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := FailurePolicyType(dAtA[iNdEx:postIndex]) + m.FailurePolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideEffects", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := SideEffectClass(dAtA[iNdEx:postIndex]) + m.SideEffects = &s + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingWebhookConfiguration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Webhooks = append(m.Webhooks, ValidatingWebhook{}) + if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatingWebhookConfigurationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ValidatingWebhookConfiguration{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WebhookClientConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WebhookClientConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WebhookClientConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Service == nil { + m.Service = &ServiceReference{} + } + if err := m.Service.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CABundle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CABundle = append(m.CABundle[:0], dAtA[iNdEx:postIndex]...) + if m.CABundle == nil { + m.CABundle = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.URL = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,479 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.admissionregistration.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// MutatingWebhook describes an admission webhook and the resources and operations it applies to. +message MutatingWebhook { + // The name of the admission webhook. + // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where + // "imagepolicy" is the name of the webhook, and kubernetes.io is the name + // of the organization. + // Required. + optional string name = 1; + + // ClientConfig defines how to communicate with the hook. + // Required + optional WebhookClientConfig clientConfig = 2; + + // Rules describes what operations on what resources/subresources the webhook cares about. + // The webhook cares about an operation if it matches _any_ Rule. + // However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks + // from putting the cluster in a state which cannot be recovered from without completely + // disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called + // on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects. + repeated RuleWithOperations rules = 3; + + // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - + // allowed values are Ignore or Fail. Defaults to Fail. + // +optional + optional string failurePolicy = 4; + + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Equivalent" + // +optional + optional string matchPolicy = 9; + + // NamespaceSelector decides whether to run the webhook on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the webhook. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the webhook on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 5; + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector objectSelector = 11; + + // SideEffects states whether this webhook has side effects. + // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. + optional string sideEffects = 6; + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 10 seconds. + // +optional + optional int32 timeoutSeconds = 7; + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + repeated string admissionReviewVersions = 8; + + // reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. + // Allowed values are "Never" and "IfNeeded". + // + // Never: the webhook will not be called more than once in a single admission evaluation. + // + // IfNeeded: the webhook will be called at least one additional time as part of the admission evaluation + // if the object being admitted is modified by other admission plugins after the initial webhook call. + // Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. + // Note: + // * the number of additional invocations is not guaranteed to be exactly one. + // * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. + // * webhooks that use this option may be reordered to minimize the number of additional invocations. + // * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead. + // + // Defaults to "Never". + // +optional + optional string reinvocationPolicy = 10; +} + +// MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object. +message MutatingWebhookConfiguration { + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Webhooks is a list of webhooks and the affected resources and operations. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + repeated MutatingWebhook Webhooks = 2; +} + +// MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration. +message MutatingWebhookConfigurationList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of MutatingWebhookConfiguration. + repeated MutatingWebhookConfiguration items = 2; +} + +// Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended +// to make sure that all the tuple expansions are valid. +message Rule { + // APIGroups is the API groups the resources belong to. '*' is all groups. + // If '*' is present, the length of the slice must be one. + // Required. + repeated string apiGroups = 1; + + // APIVersions is the API versions the resources belong to. '*' is all versions. + // If '*' is present, the length of the slice must be one. + // Required. + repeated string apiVersions = 2; + + // Resources is a list of resources this rule applies to. + // + // For example: + // 'pods' means pods. + // 'pods/log' means the log subresource of pods. + // '*' means all resources, but not subresources. + // 'pods/*' means all subresources of pods. + // '*/scale' means all scale subresources. + // '*/*' means all resources and their subresources. + // + // If wildcard is present, the validation rule will ensure resources do not + // overlap with each other. + // + // Depending on the enclosing object, subresources might not be allowed. + // Required. + repeated string resources = 3; + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + optional string scope = 4; +} + +// RuleWithOperations is a tuple of Operations and Resources. It is recommended to make +// sure that all the tuple expansions are valid. +message RuleWithOperations { + // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * + // for all operations. + // If '*' is present, the length of the slice must be one. + // Required. + repeated string operations = 1; + + // Rule is embedded, it describes other criteria of the rule, like + // APIGroups, APIVersions, Resources, etc. + optional Rule rule = 2; +} + +// ServiceReference holds a reference to Service.legacy.k8s.io +message ServiceReference { + // `namespace` is the namespace of the service. + // Required + optional string namespace = 1; + + // `name` is the name of the service. + // Required + optional string name = 2; + + // `path` is an optional URL path which will be sent in any request to + // this service. + // +optional + optional string path = 3; + + // If specified, the port on the service that hosting webhook. + // Default to 443 for backward compatibility. + // `port` should be a valid port number (1-65535, inclusive). + // +optional + optional int32 port = 4; +} + +// ValidatingWebhook describes an admission webhook and the resources and operations it applies to. +message ValidatingWebhook { + // The name of the admission webhook. + // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where + // "imagepolicy" is the name of the webhook, and kubernetes.io is the name + // of the organization. + // Required. + optional string name = 1; + + // ClientConfig defines how to communicate with the hook. + // Required + optional WebhookClientConfig clientConfig = 2; + + // Rules describes what operations on what resources/subresources the webhook cares about. + // The webhook cares about an operation if it matches _any_ Rule. + // However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks + // from putting the cluster in a state which cannot be recovered from without completely + // disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called + // on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects. + repeated RuleWithOperations rules = 3; + + // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - + // allowed values are Ignore or Fail. Defaults to Fail. + // +optional + optional string failurePolicy = 4; + + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Equivalent" + // +optional + optional string matchPolicy = 9; + + // NamespaceSelector decides whether to run the webhook on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the webhook. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the webhook on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 5; + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector objectSelector = 10; + + // SideEffects states whether this webhook has side effects. + // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. + optional string sideEffects = 6; + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 10 seconds. + // +optional + optional int32 timeoutSeconds = 7; + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + repeated string admissionReviewVersions = 8; +} + +// ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. +message ValidatingWebhookConfiguration { + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Webhooks is a list of webhooks and the affected resources and operations. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + repeated ValidatingWebhook Webhooks = 2; +} + +// ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration. +message ValidatingWebhookConfigurationList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of ValidatingWebhookConfiguration. + repeated ValidatingWebhookConfiguration items = 2; +} + +// WebhookClientConfig contains the information to make a TLS +// connection with the webhook +message WebhookClientConfig { + // `url` gives the location of the webhook, in standard URL form + // (`scheme://host:port/path`). Exactly one of `url` or `service` + // must be specified. + // + // The `host` should not refer to a service running in the cluster; use + // the `service` field instead. The host might be resolved via external + // DNS in some apiservers (e.g., `kube-apiserver` cannot resolve + // in-cluster DNS as that would be a layering violation). `host` may + // also be an IP address. + // + // Please note that using `localhost` or `127.0.0.1` as a `host` is + // risky unless you take great care to run this webhook on all hosts + // which run an apiserver which might need to make calls to this + // webhook. Such installs are likely to be non-portable, i.e., not easy + // to turn up in a new cluster. + // + // The scheme must be "https"; the URL must begin with "https://". + // + // A path is optional, and if present may be any string permissible in + // a URL. You may use the path to pass an arbitrary string to the + // webhook, for example, a cluster identifier. + // + // Attempting to use a user or basic auth e.g. "user:password@" is not + // allowed. Fragments ("#...") and query parameters ("?...") are not + // allowed, either. + // + // +optional + optional string url = 3; + + // `service` is a reference to the service for this webhook. Either + // `service` or `url` must be specified. + // + // If the webhook is running within the cluster, then you should use `service`. + // + // +optional + optional ServiceReference service = 1; + + // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. + // If unspecified, system trust roots on the apiserver are used. + // +optional + optional bytes caBundle = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const GroupName = "admissionregistration.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ValidatingWebhookConfiguration{}, + &ValidatingWebhookConfigurationList{}, + &MutatingWebhookConfiguration{}, + &MutatingWebhookConfigurationList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,551 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended +// to make sure that all the tuple expansions are valid. +type Rule struct { + // APIGroups is the API groups the resources belong to. '*' is all groups. + // If '*' is present, the length of the slice must be one. + // Required. + APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,1,rep,name=apiGroups"` + + // APIVersions is the API versions the resources belong to. '*' is all versions. + // If '*' is present, the length of the slice must be one. + // Required. + APIVersions []string `json:"apiVersions,omitempty" protobuf:"bytes,2,rep,name=apiVersions"` + + // Resources is a list of resources this rule applies to. + // + // For example: + // 'pods' means pods. + // 'pods/log' means the log subresource of pods. + // '*' means all resources, but not subresources. + // 'pods/*' means all subresources of pods. + // '*/scale' means all scale subresources. + // '*/*' means all resources and their subresources. + // + // If wildcard is present, the validation rule will ensure resources do not + // overlap with each other. + // + // Depending on the enclosing object, subresources might not be allowed. + // Required. + Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + Scope *ScopeType `json:"scope,omitempty" protobuf:"bytes,4,rep,name=scope"` +} + +type ScopeType string + +const ( + // ClusterScope means that scope is limited to cluster-scoped objects. + // Namespace objects are cluster-scoped. + ClusterScope ScopeType = "Cluster" + // NamespacedScope means that scope is limited to namespaced objects. + NamespacedScope ScopeType = "Namespaced" + // AllScopes means that all scopes are included. + AllScopes ScopeType = "*" +) + +type FailurePolicyType string + +const ( + // Ignore means that an error calling the webhook is ignored. + Ignore FailurePolicyType = "Ignore" + // Fail means that an error calling the webhook causes the admission to fail. + Fail FailurePolicyType = "Fail" +) + +// MatchPolicyType specifies the type of match policy +type MatchPolicyType string + +const ( + // Exact means requests should only be sent to the webhook if they exactly match a given rule + Exact MatchPolicyType = "Exact" + // Equivalent means requests should be sent to the webhook if they modify a resource listed in rules via another API group or version. + Equivalent MatchPolicyType = "Equivalent" +) + +type SideEffectClass string + +const ( + // SideEffectClassUnknown means that no information is known about the side effects of calling the webhook. + // If a request with the dry-run attribute would trigger a call to this webhook, the request will instead fail. + SideEffectClassUnknown SideEffectClass = "Unknown" + // SideEffectClassNone means that calling the webhook will have no side effects. + SideEffectClassNone SideEffectClass = "None" + // SideEffectClassSome means that calling the webhook will possibly have side effects. + // If a request with the dry-run attribute would trigger a call to this webhook, the request will instead fail. + SideEffectClassSome SideEffectClass = "Some" + // SideEffectClassNoneOnDryRun means that calling the webhook will possibly have side effects, but if the + // request being reviewed has the dry-run attribute, the side effects will be suppressed. + SideEffectClassNoneOnDryRun SideEffectClass = "NoneOnDryRun" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. +type ValidatingWebhookConfiguration struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Webhooks is a list of webhooks and the affected resources and operations. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + Webhooks []ValidatingWebhook `json:"webhooks,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=Webhooks"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration. +type ValidatingWebhookConfigurationList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of ValidatingWebhookConfiguration. + Items []ValidatingWebhookConfiguration `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object. +type MutatingWebhookConfiguration struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Webhooks is a list of webhooks and the affected resources and operations. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + Webhooks []MutatingWebhook `json:"webhooks,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=Webhooks"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration. +type MutatingWebhookConfigurationList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of MutatingWebhookConfiguration. + Items []MutatingWebhookConfiguration `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// ValidatingWebhook describes an admission webhook and the resources and operations it applies to. +type ValidatingWebhook struct { + // The name of the admission webhook. + // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where + // "imagepolicy" is the name of the webhook, and kubernetes.io is the name + // of the organization. + // Required. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // ClientConfig defines how to communicate with the hook. + // Required + ClientConfig WebhookClientConfig `json:"clientConfig" protobuf:"bytes,2,opt,name=clientConfig"` + + // Rules describes what operations on what resources/subresources the webhook cares about. + // The webhook cares about an operation if it matches _any_ Rule. + // However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks + // from putting the cluster in a state which cannot be recovered from without completely + // disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called + // on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects. + Rules []RuleWithOperations `json:"rules,omitempty" protobuf:"bytes,3,rep,name=rules"` + + // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - + // allowed values are Ignore or Fail. Defaults to Fail. + // +optional + FailurePolicy *FailurePolicyType `json:"failurePolicy,omitempty" protobuf:"bytes,4,opt,name=failurePolicy,casttype=FailurePolicyType"` + + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Equivalent" + // +optional + MatchPolicy *MatchPolicyType `json:"matchPolicy,omitempty" protobuf:"bytes,9,opt,name=matchPolicy,casttype=MatchPolicyType"` + + // NamespaceSelector decides whether to run the webhook on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the webhook. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the webhook on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,5,opt,name=namespaceSelector"` + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + ObjectSelector *metav1.LabelSelector `json:"objectSelector,omitempty" protobuf:"bytes,10,opt,name=objectSelector"` + + // SideEffects states whether this webhook has side effects. + // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. + SideEffects *SideEffectClass `json:"sideEffects" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 10 seconds. + // +optional + TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,7,opt,name=timeoutSeconds"` + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + AdmissionReviewVersions []string `json:"admissionReviewVersions" protobuf:"bytes,8,rep,name=admissionReviewVersions"` +} + +// MutatingWebhook describes an admission webhook and the resources and operations it applies to. +type MutatingWebhook struct { + // The name of the admission webhook. + // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where + // "imagepolicy" is the name of the webhook, and kubernetes.io is the name + // of the organization. + // Required. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // ClientConfig defines how to communicate with the hook. + // Required + ClientConfig WebhookClientConfig `json:"clientConfig" protobuf:"bytes,2,opt,name=clientConfig"` + + // Rules describes what operations on what resources/subresources the webhook cares about. + // The webhook cares about an operation if it matches _any_ Rule. + // However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks + // from putting the cluster in a state which cannot be recovered from without completely + // disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called + // on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects. + Rules []RuleWithOperations `json:"rules,omitempty" protobuf:"bytes,3,rep,name=rules"` + + // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - + // allowed values are Ignore or Fail. Defaults to Fail. + // +optional + FailurePolicy *FailurePolicyType `json:"failurePolicy,omitempty" protobuf:"bytes,4,opt,name=failurePolicy,casttype=FailurePolicyType"` + + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Equivalent" + // +optional + MatchPolicy *MatchPolicyType `json:"matchPolicy,omitempty" protobuf:"bytes,9,opt,name=matchPolicy,casttype=MatchPolicyType"` + + // NamespaceSelector decides whether to run the webhook on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the webhook. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the webhook on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,5,opt,name=namespaceSelector"` + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + ObjectSelector *metav1.LabelSelector `json:"objectSelector,omitempty" protobuf:"bytes,11,opt,name=objectSelector"` + + // SideEffects states whether this webhook has side effects. + // Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. + SideEffects *SideEffectClass `json:"sideEffects" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 10 seconds. + // +optional + TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,7,opt,name=timeoutSeconds"` + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + AdmissionReviewVersions []string `json:"admissionReviewVersions" protobuf:"bytes,8,rep,name=admissionReviewVersions"` + + // reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. + // Allowed values are "Never" and "IfNeeded". + // + // Never: the webhook will not be called more than once in a single admission evaluation. + // + // IfNeeded: the webhook will be called at least one additional time as part of the admission evaluation + // if the object being admitted is modified by other admission plugins after the initial webhook call. + // Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. + // Note: + // * the number of additional invocations is not guaranteed to be exactly one. + // * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. + // * webhooks that use this option may be reordered to minimize the number of additional invocations. + // * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead. + // + // Defaults to "Never". + // +optional + ReinvocationPolicy *ReinvocationPolicyType `json:"reinvocationPolicy,omitempty" protobuf:"bytes,10,opt,name=reinvocationPolicy,casttype=ReinvocationPolicyType"` +} + +// ReinvocationPolicyType specifies what type of policy the admission hook uses. +type ReinvocationPolicyType string + +const ( + // NeverReinvocationPolicy indicates that the webhook must not be called more than once in a + // single admission evaluation. + NeverReinvocationPolicy ReinvocationPolicyType = "Never" + // IfNeededReinvocationPolicy indicates that the webhook may be called at least one + // additional time as part of the admission evaluation if the object being admitted is + // modified by other admission plugins after the initial webhook call. + IfNeededReinvocationPolicy ReinvocationPolicyType = "IfNeeded" +) + +// RuleWithOperations is a tuple of Operations and Resources. It is recommended to make +// sure that all the tuple expansions are valid. +type RuleWithOperations struct { + // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * + // for all operations. + // If '*' is present, the length of the slice must be one. + // Required. + Operations []OperationType `json:"operations,omitempty" protobuf:"bytes,1,rep,name=operations,casttype=OperationType"` + // Rule is embedded, it describes other criteria of the rule, like + // APIGroups, APIVersions, Resources, etc. + Rule `json:",inline" protobuf:"bytes,2,opt,name=rule"` +} + +type OperationType string + +// The constants should be kept in sync with those defined in k8s.io/kubernetes/pkg/admission/interface.go. +const ( + OperationAll OperationType = "*" + Create OperationType = "CREATE" + Update OperationType = "UPDATE" + Delete OperationType = "DELETE" + Connect OperationType = "CONNECT" +) + +// WebhookClientConfig contains the information to make a TLS +// connection with the webhook +type WebhookClientConfig struct { + // `url` gives the location of the webhook, in standard URL form + // (`scheme://host:port/path`). Exactly one of `url` or `service` + // must be specified. + // + // The `host` should not refer to a service running in the cluster; use + // the `service` field instead. The host might be resolved via external + // DNS in some apiservers (e.g., `kube-apiserver` cannot resolve + // in-cluster DNS as that would be a layering violation). `host` may + // also be an IP address. + // + // Please note that using `localhost` or `127.0.0.1` as a `host` is + // risky unless you take great care to run this webhook on all hosts + // which run an apiserver which might need to make calls to this + // webhook. Such installs are likely to be non-portable, i.e., not easy + // to turn up in a new cluster. + // + // The scheme must be "https"; the URL must begin with "https://". + // + // A path is optional, and if present may be any string permissible in + // a URL. You may use the path to pass an arbitrary string to the + // webhook, for example, a cluster identifier. + // + // Attempting to use a user or basic auth e.g. "user:password@" is not + // allowed. Fragments ("#...") and query parameters ("?...") are not + // allowed, either. + // + // +optional + URL *string `json:"url,omitempty" protobuf:"bytes,3,opt,name=url"` + + // `service` is a reference to the service for this webhook. Either + // `service` or `url` must be specified. + // + // If the webhook is running within the cluster, then you should use `service`. + // + // +optional + Service *ServiceReference `json:"service,omitempty" protobuf:"bytes,1,opt,name=service"` + + // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. + // If unspecified, system trust roots on the apiserver are used. + // +optional + CABundle []byte `json:"caBundle,omitempty" protobuf:"bytes,2,opt,name=caBundle"` +} + +// ServiceReference holds a reference to Service.legacy.k8s.io +type ServiceReference struct { + // `namespace` is the namespace of the service. + // Required + Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` + // `name` is the name of the service. + // Required + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + + // `path` is an optional URL path which will be sent in any request to + // this service. + // +optional + Path *string `json:"path,omitempty" protobuf:"bytes,3,opt,name=path"` + + // If specified, the port on the service that hosting webhook. + // Default to 443 for backward compatibility. + // `port` should be a valid port number (1-65535, inclusive). + // +optional + Port *int32 `json:"port,omitempty" protobuf:"varint,4,opt,name=port"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,151 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_MutatingWebhook = map[string]string{ + "": "MutatingWebhook describes an admission webhook and the resources and operations it applies to.", + "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + "clientConfig": "ClientConfig defines how to communicate with the hook. Required", + "rules": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + "failurePolicy": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Fail.", + "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Equivalent\"", + "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", + "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 10 seconds.", + "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy.", + "reinvocationPolicy": "reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. Allowed values are \"Never\" and \"IfNeeded\".\n\nNever: the webhook will not be called more than once in a single admission evaluation.\n\nIfNeeded: the webhook will be called at least one additional time as part of the admission evaluation if the object being admitted is modified by other admission plugins after the initial webhook call. Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. Note: * the number of additional invocations is not guaranteed to be exactly one. * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. * webhooks that use this option may be reordered to minimize the number of additional invocations. * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead.\n\nDefaults to \"Never\".", +} + +func (MutatingWebhook) SwaggerDoc() map[string]string { + return map_MutatingWebhook +} + +var map_MutatingWebhookConfiguration = map[string]string{ + "": "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "webhooks": "Webhooks is a list of webhooks and the affected resources and operations.", +} + +func (MutatingWebhookConfiguration) SwaggerDoc() map[string]string { + return map_MutatingWebhookConfiguration +} + +var map_MutatingWebhookConfigurationList = map[string]string{ + "": "MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "items": "List of MutatingWebhookConfiguration.", +} + +func (MutatingWebhookConfigurationList) SwaggerDoc() map[string]string { + return map_MutatingWebhookConfigurationList +} + +var map_Rule = map[string]string{ + "": "Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.", + "apiGroups": "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", + "apiVersions": "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", + "resources": "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", + "scope": "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", +} + +func (Rule) SwaggerDoc() map[string]string { + return map_Rule +} + +var map_RuleWithOperations = map[string]string{ + "": "RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.", + "operations": "Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.", +} + +func (RuleWithOperations) SwaggerDoc() map[string]string { + return map_RuleWithOperations +} + +var map_ServiceReference = map[string]string{ + "": "ServiceReference holds a reference to Service.legacy.k8s.io", + "namespace": "`namespace` is the namespace of the service. Required", + "name": "`name` is the name of the service. Required", + "path": "`path` is an optional URL path which will be sent in any request to this service.", + "port": "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", +} + +func (ServiceReference) SwaggerDoc() map[string]string { + return map_ServiceReference +} + +var map_ValidatingWebhook = map[string]string{ + "": "ValidatingWebhook describes an admission webhook and the resources and operations it applies to.", + "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + "clientConfig": "ClientConfig defines how to communicate with the hook. Required", + "rules": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + "failurePolicy": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Fail.", + "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Equivalent\"", + "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + "sideEffects": "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", + "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 10 seconds.", + "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy.", +} + +func (ValidatingWebhook) SwaggerDoc() map[string]string { + return map_ValidatingWebhook +} + +var map_ValidatingWebhookConfiguration = map[string]string{ + "": "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "webhooks": "Webhooks is a list of webhooks and the affected resources and operations.", +} + +func (ValidatingWebhookConfiguration) SwaggerDoc() map[string]string { + return map_ValidatingWebhookConfiguration +} + +var map_ValidatingWebhookConfigurationList = map[string]string{ + "": "ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "items": "List of ValidatingWebhookConfiguration.", +} + +func (ValidatingWebhookConfigurationList) SwaggerDoc() map[string]string { + return map_ValidatingWebhookConfigurationList +} + +var map_WebhookClientConfig = map[string]string{ + "": "WebhookClientConfig contains the information to make a TLS connection with the webhook", + "url": "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + "service": "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + "caBundle": "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", +} + +func (WebhookClientConfig) SwaggerDoc() map[string]string { + return map_WebhookClientConfig +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,396 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MutatingWebhook) DeepCopyInto(out *MutatingWebhook) { + *out = *in + in.ClientConfig.DeepCopyInto(&out.ClientConfig) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]RuleWithOperations, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.FailurePolicy != nil { + in, out := &in.FailurePolicy, &out.FailurePolicy + *out = new(FailurePolicyType) + **out = **in + } + if in.MatchPolicy != nil { + in, out := &in.MatchPolicy, &out.MatchPolicy + *out = new(MatchPolicyType) + **out = **in + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ObjectSelector != nil { + in, out := &in.ObjectSelector, &out.ObjectSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.SideEffects != nil { + in, out := &in.SideEffects, &out.SideEffects + *out = new(SideEffectClass) + **out = **in + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AdmissionReviewVersions != nil { + in, out := &in.AdmissionReviewVersions, &out.AdmissionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ReinvocationPolicy != nil { + in, out := &in.ReinvocationPolicy, &out.ReinvocationPolicy + *out = new(ReinvocationPolicyType) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MutatingWebhook. +func (in *MutatingWebhook) DeepCopy() *MutatingWebhook { + if in == nil { + return nil + } + out := new(MutatingWebhook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MutatingWebhookConfiguration) DeepCopyInto(out *MutatingWebhookConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Webhooks != nil { + in, out := &in.Webhooks, &out.Webhooks + *out = make([]MutatingWebhook, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MutatingWebhookConfiguration. +func (in *MutatingWebhookConfiguration) DeepCopy() *MutatingWebhookConfiguration { + if in == nil { + return nil + } + out := new(MutatingWebhookConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MutatingWebhookConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MutatingWebhookConfigurationList) DeepCopyInto(out *MutatingWebhookConfigurationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MutatingWebhookConfiguration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MutatingWebhookConfigurationList. +func (in *MutatingWebhookConfigurationList) DeepCopy() *MutatingWebhookConfigurationList { + if in == nil { + return nil + } + out := new(MutatingWebhookConfigurationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MutatingWebhookConfigurationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Rule) DeepCopyInto(out *Rule) { + *out = *in + if in.APIGroups != nil { + in, out := &in.APIGroups, &out.APIGroups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.APIVersions != nil { + in, out := &in.APIVersions, &out.APIVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(ScopeType) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Rule. +func (in *Rule) DeepCopy() *Rule { + if in == nil { + return nil + } + out := new(Rule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuleWithOperations) DeepCopyInto(out *RuleWithOperations) { + *out = *in + if in.Operations != nil { + in, out := &in.Operations, &out.Operations + *out = make([]OperationType, len(*in)) + copy(*out, *in) + } + in.Rule.DeepCopyInto(&out.Rule) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuleWithOperations. +func (in *RuleWithOperations) DeepCopy() *RuleWithOperations { + if in == nil { + return nil + } + out := new(RuleWithOperations) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceReference) DeepCopyInto(out *ServiceReference) { + *out = *in + if in.Path != nil { + in, out := &in.Path, &out.Path + *out = new(string) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceReference. +func (in *ServiceReference) DeepCopy() *ServiceReference { + if in == nil { + return nil + } + out := new(ServiceReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingWebhook) DeepCopyInto(out *ValidatingWebhook) { + *out = *in + in.ClientConfig.DeepCopyInto(&out.ClientConfig) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]RuleWithOperations, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.FailurePolicy != nil { + in, out := &in.FailurePolicy, &out.FailurePolicy + *out = new(FailurePolicyType) + **out = **in + } + if in.MatchPolicy != nil { + in, out := &in.MatchPolicy, &out.MatchPolicy + *out = new(MatchPolicyType) + **out = **in + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ObjectSelector != nil { + in, out := &in.ObjectSelector, &out.ObjectSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.SideEffects != nil { + in, out := &in.SideEffects, &out.SideEffects + *out = new(SideEffectClass) + **out = **in + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AdmissionReviewVersions != nil { + in, out := &in.AdmissionReviewVersions, &out.AdmissionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingWebhook. +func (in *ValidatingWebhook) DeepCopy() *ValidatingWebhook { + if in == nil { + return nil + } + out := new(ValidatingWebhook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingWebhookConfiguration) DeepCopyInto(out *ValidatingWebhookConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Webhooks != nil { + in, out := &in.Webhooks, &out.Webhooks + *out = make([]ValidatingWebhook, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingWebhookConfiguration. +func (in *ValidatingWebhookConfiguration) DeepCopy() *ValidatingWebhookConfiguration { + if in == nil { + return nil + } + out := new(ValidatingWebhookConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ValidatingWebhookConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingWebhookConfigurationList) DeepCopyInto(out *ValidatingWebhookConfigurationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ValidatingWebhookConfiguration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingWebhookConfigurationList. +func (in *ValidatingWebhookConfigurationList) DeepCopy() *ValidatingWebhookConfigurationList { + if in == nil { + return nil + } + out := new(ValidatingWebhookConfigurationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ValidatingWebhookConfigurationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookClientConfig) DeepCopyInto(out *WebhookClientConfig) { + *out = *in + if in.URL != nil { + in, out := &in.URL, &out.URL + *out = new(string) + **out = **in + } + if in.Service != nil { + in, out := &in.Service, &out.Service + *out = new(ServiceReference) + (*in).DeepCopyInto(*out) + } + if in.CABundle != nil { + in, out := &in.CABundle, &out.CABundle + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookClientConfig. +func (in *WebhookClientConfig) DeepCopy() *WebhookClientConfig { + if in == nil { + return nil + } + out := new(WebhookClientConfig) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:openapi-gen=true - -// Package v1alpha1 is the v1alpha1 version of the API. -// AdmissionConfiguration and AdmissionPluginConfiguration are legacy static admission plugin configuration -// InitializerConfiguration and validatingWebhookConfiguration is for the -// new dynamic admission controller configuration. -// +groupName=admissionregistration.k8s.io -package v1alpha1 // import "k8s.io/api/admissionregistration/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,1027 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by protoc-gen-gogo. -// source: k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto -// DO NOT EDIT! - -/* - Package v1alpha1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto - - It has these top-level messages: - Initializer - InitializerConfiguration - InitializerConfigurationList - Rule -*/ -package v1alpha1 - -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import strings "strings" -import reflect "reflect" - -import io "io" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -func (m *Initializer) Reset() { *m = Initializer{} } -func (*Initializer) ProtoMessage() {} -func (*Initializer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *InitializerConfiguration) Reset() { *m = InitializerConfiguration{} } -func (*InitializerConfiguration) ProtoMessage() {} -func (*InitializerConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} -} - -func (m *InitializerConfigurationList) Reset() { *m = InitializerConfigurationList{} } -func (*InitializerConfigurationList) ProtoMessage() {} -func (*InitializerConfigurationList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{2} -} - -func (m *Rule) Reset() { *m = Rule{} } -func (*Rule) ProtoMessage() {} -func (*Rule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func init() { - proto.RegisterType((*Initializer)(nil), "k8s.io.api.admissionregistration.v1alpha1.Initializer") - proto.RegisterType((*InitializerConfiguration)(nil), "k8s.io.api.admissionregistration.v1alpha1.InitializerConfiguration") - proto.RegisterType((*InitializerConfigurationList)(nil), "k8s.io.api.admissionregistration.v1alpha1.InitializerConfigurationList") - proto.RegisterType((*Rule)(nil), "k8s.io.api.admissionregistration.v1alpha1.Rule") -} -func (m *Initializer) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Initializer) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *InitializerConfiguration) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InitializerConfiguration) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if len(m.Initializers) > 0 { - for _, msg := range m.Initializers { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *InitializerConfigurationList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InitializerConfigurationList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *Rule) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Rule) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.APIVersions) > 0 { - for _, s := range m.APIVersions { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Resources) > 0 { - for _, s := range m.Resources { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil -} - -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *Initializer) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Rules) > 0 { - for _, e := range m.Rules { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *InitializerConfiguration) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Initializers) > 0 { - for _, e := range m.Initializers { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *InitializerConfigurationList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *Rule) Size() (n int) { - var l int - _ = l - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.APIVersions) > 0 { - for _, s := range m.APIVersions { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.Resources) > 0 { - for _, s := range m.Resources { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *Initializer) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Initializer{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "Rule", "Rule", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *InitializerConfiguration) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&InitializerConfiguration{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Initializers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Initializers), "Initializer", "Initializer", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *InitializerConfigurationList) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&InitializerConfigurationList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "InitializerConfiguration", "InitializerConfiguration", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *Rule) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&Rule{`, - `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, - `APIVersions:` + fmt.Sprintf("%v", this.APIVersions) + `,`, - `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *Initializer) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Initializer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Initializer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Rules = append(m.Rules, Rule{}) - if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InitializerConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InitializerConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InitializerConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Initializers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Initializers = append(m.Initializers, Initializer{}) - if err := m.Initializers[len(m.Initializers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InitializerConfigurationList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InitializerConfigurationList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InitializerConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, InitializerConfiguration{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Rule) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Rule: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Rule: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIGroups", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.APIGroups = append(m.APIGroups, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIVersions", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.APIVersions = append(m.APIVersions, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenerated(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthGenerated - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipGenerated(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") -) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 531 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x51, 0x4d, 0x8b, 0x13, 0x31, - 0x18, 0x6e, 0x6c, 0x0b, 0x6d, 0xda, 0x45, 0x19, 0x3c, 0x94, 0x22, 0xd3, 0xd2, 0x53, 0x45, 0x4c, - 0xec, 0x22, 0x8b, 0xd7, 0x9d, 0x3d, 0x48, 0xc1, 0x8f, 0x25, 0x88, 0x07, 0xf1, 0x60, 0xda, 0xbe, - 0x3b, 0x8d, 0xed, 0x4c, 0x86, 0x24, 0x53, 0xd0, 0x93, 0x17, 0xef, 0x82, 0x7f, 0xaa, 0xc7, 0x3d, - 0xee, 0xa9, 0xd8, 0x11, 0x3c, 0xfa, 0x1b, 0x24, 0x33, 0x9d, 0x9d, 0x59, 0xeb, 0xe2, 0xea, 0x2d, - 0xef, 0xf3, 0xe6, 0xf9, 0x4a, 0x30, 0x5b, 0x3c, 0xd1, 0x44, 0x48, 0xba, 0x88, 0x27, 0xa0, 0x42, - 0x30, 0xa0, 0xe9, 0x0a, 0xc2, 0x99, 0x54, 0x74, 0xb7, 0xe0, 0x91, 0xa0, 0x7c, 0x16, 0x08, 0xad, - 0x85, 0x0c, 0x15, 0xf8, 0x42, 0x1b, 0xc5, 0x8d, 0x90, 0x21, 0x5d, 0x8d, 0xf8, 0x32, 0x9a, 0xf3, - 0x11, 0xf5, 0x21, 0x04, 0xc5, 0x0d, 0xcc, 0x48, 0xa4, 0xa4, 0x91, 0xce, 0xfd, 0x8c, 0x4a, 0x78, - 0x24, 0xc8, 0x1f, 0xa9, 0x24, 0xa7, 0x76, 0x1f, 0xfa, 0xc2, 0xcc, 0xe3, 0x09, 0x99, 0xca, 0x80, - 0xfa, 0xd2, 0x97, 0x34, 0x55, 0x98, 0xc4, 0x67, 0xe9, 0x94, 0x0e, 0xe9, 0x29, 0x53, 0xee, 0x3e, - 0x2e, 0x42, 0x05, 0x7c, 0x3a, 0x17, 0x21, 0xa8, 0x0f, 0x34, 0x5a, 0xf8, 0x16, 0xd0, 0x34, 0x00, - 0xc3, 0xe9, 0x6a, 0x2f, 0x4f, 0x97, 0x5e, 0xc7, 0x52, 0x71, 0x68, 0x44, 0x00, 0x7b, 0x84, 0xa3, - 0xbf, 0x11, 0xf4, 0x74, 0x0e, 0x01, 0xff, 0x9d, 0x37, 0xf8, 0x8c, 0x70, 0x6b, 0x1c, 0x0a, 0x23, - 0xf8, 0x52, 0x7c, 0x04, 0xe5, 0xf4, 0x71, 0x2d, 0xe4, 0x01, 0x74, 0x50, 0x1f, 0x0d, 0x9b, 0x5e, - 0x7b, 0xbd, 0xe9, 0x55, 0x92, 0x4d, 0xaf, 0xf6, 0x82, 0x07, 0xc0, 0xd2, 0x8d, 0xf3, 0x0a, 0xd7, - 0x55, 0xbc, 0x04, 0xdd, 0xb9, 0xd5, 0xaf, 0x0e, 0x5b, 0x87, 0x94, 0xdc, 0xf8, 0xe9, 0x08, 0x8b, - 0x97, 0xe0, 0x1d, 0xec, 0x34, 0xeb, 0x76, 0xd2, 0x2c, 0x13, 0x1b, 0xfc, 0x44, 0xb8, 0x53, 0xca, - 0x71, 0x22, 0xc3, 0x33, 0xe1, 0xc7, 0x99, 0x80, 0xf3, 0x0e, 0x37, 0xec, 0x43, 0xcd, 0xb8, 0xe1, - 0x69, 0xb0, 0xd6, 0xe1, 0xa3, 0x92, 0xeb, 0x65, 0x5f, 0x12, 0x2d, 0x7c, 0x0b, 0x68, 0x62, 0x6f, - 0x93, 0xd5, 0x88, 0xbc, 0x9c, 0xbc, 0x87, 0xa9, 0x79, 0x0e, 0x86, 0x7b, 0xce, 0xce, 0x16, 0x17, - 0x18, 0xbb, 0x54, 0x75, 0x22, 0xdc, 0x16, 0x85, 0x7b, 0xde, 0xed, 0xe8, 0x1f, 0xba, 0x95, 0xc2, - 0x7b, 0x77, 0x77, 0x5e, 0xed, 0x12, 0xa8, 0xd9, 0x15, 0x87, 0xc1, 0x0f, 0x84, 0xef, 0x5d, 0x57, - 0xf8, 0x99, 0xd0, 0xc6, 0x79, 0xbb, 0x57, 0x9a, 0xdc, 0xac, 0xb4, 0x65, 0xa7, 0x95, 0xef, 0xec, - 0x62, 0x34, 0x72, 0xa4, 0x54, 0x78, 0x8e, 0xeb, 0xc2, 0x40, 0x90, 0x37, 0x3d, 0xf9, 0xbf, 0xa6, - 0x57, 0x52, 0x17, 0x3f, 0x3b, 0xb6, 0xca, 0x2c, 0x33, 0x18, 0x7c, 0x45, 0xb8, 0x66, 0xbf, 0xda, - 0x79, 0x80, 0x9b, 0x3c, 0x12, 0x4f, 0x95, 0x8c, 0x23, 0xdd, 0x41, 0xfd, 0xea, 0xb0, 0xe9, 0x1d, - 0x24, 0x9b, 0x5e, 0xf3, 0xf8, 0x74, 0x9c, 0x81, 0xac, 0xd8, 0x3b, 0x23, 0xdc, 0xe2, 0x91, 0x78, - 0x0d, 0xca, 0xe6, 0xc8, 0x52, 0x36, 0xbd, 0xdb, 0xc9, 0xa6, 0xd7, 0x3a, 0x3e, 0x1d, 0xe7, 0x30, - 0x2b, 0xdf, 0xb1, 0xfa, 0x0a, 0xb4, 0x8c, 0xd5, 0x14, 0x74, 0xa7, 0x5a, 0xe8, 0xb3, 0x1c, 0x64, - 0xc5, 0xde, 0x23, 0xeb, 0xad, 0x5b, 0x39, 0xdf, 0xba, 0x95, 0x8b, 0xad, 0x5b, 0xf9, 0x94, 0xb8, - 0x68, 0x9d, 0xb8, 0xe8, 0x3c, 0x71, 0xd1, 0x45, 0xe2, 0xa2, 0x6f, 0x89, 0x8b, 0xbe, 0x7c, 0x77, - 0x2b, 0x6f, 0x1a, 0x79, 0xe9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa2, 0x06, 0xa3, 0xcb, 0x75, - 0x04, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - -// This file was autogenerated by go-to-protobuf. Do not edit it manually! - -syntax = 'proto2'; - -package k8s.io.api.admissionregistration.v1alpha1; - -import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; - -// Package-wide variables from generator "generated". -option go_package = "v1alpha1"; - -// Initializer describes the name and the failure policy of an initializer, and -// what resources it applies to. -message Initializer { - // Name is the identifier of the initializer. It will be added to the - // object that needs to be initialized. - // Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where - // "alwayspullimages" is the name of the webhook, and kubernetes.io is the name - // of the organization. - // Required - optional string name = 1; - - // Rules describes what resources/subresources the initializer cares about. - // The initializer cares about an operation if it matches _any_ Rule. - // Rule.Resources must not include subresources. - repeated Rule rules = 2; -} - -// InitializerConfiguration describes the configuration of initializers. -message InitializerConfiguration { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // Initializers is a list of resources and their default initializers - // Order-sensitive. - // When merging multiple InitializerConfigurations, we sort the initializers - // from different InitializerConfigurations by the name of the - // InitializerConfigurations; the order of the initializers from the same - // InitializerConfiguration is preserved. - // +patchMergeKey=name - // +patchStrategy=merge - // +optional - repeated Initializer initializers = 2; -} - -// InitializerConfigurationList is a list of InitializerConfiguration. -message InitializerConfigurationList { - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; - - // List of InitializerConfiguration. - repeated InitializerConfiguration items = 2; -} - -// Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended -// to make sure that all the tuple expansions are valid. -message Rule { - // APIGroups is the API groups the resources belong to. '*' is all groups. - // If '*' is present, the length of the slice must be one. - // Required. - repeated string apiGroups = 1; - - // APIVersions is the API versions the resources belong to. '*' is all versions. - // If '*' is present, the length of the slice must be one. - // Required. - repeated string apiVersions = 2; - - // Resources is a list of resources this rule applies to. - // - // For example: - // 'pods' means pods. - // 'pods/log' means the log subresource of pods. - // '*' means all resources, but not subresources. - // 'pods/*' means all subresources of pods. - // '*/scale' means all scale subresources. - // '*/*' means all resources and their subresources. - // - // If wildcard is present, the validation rule will ensure resources do not - // overlap with each other. - // - // Depending on the enclosing object, subresources might not be allowed. - // Required. - repeated string resources = 3; -} - diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/register.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -const GroupName = "admissionregistration.k8s.io" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} - -// Resource takes an unqualified resource and returns a Group qualified GroupResource -func Resource(resource string) schema.GroupResource { - return SchemeGroupVersion.WithResource(resource).GroupResource() -} - -var ( - // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. - // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme -) - -// Adds the list of known types to scheme. -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(SchemeGroupVersion, - &InitializerConfiguration{}, - &InitializerConfigurationList{}, - ) - metav1.AddToGroupVersion(scheme, SchemeGroupVersion) - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +genclient -// +genclient:nonNamespaced -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// InitializerConfiguration describes the configuration of initializers. -type InitializerConfiguration struct { - metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - // +optional - metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // Initializers is a list of resources and their default initializers - // Order-sensitive. - // When merging multiple InitializerConfigurations, we sort the initializers - // from different InitializerConfigurations by the name of the - // InitializerConfigurations; the order of the initializers from the same - // InitializerConfiguration is preserved. - // +patchMergeKey=name - // +patchStrategy=merge - // +optional - Initializers []Initializer `json:"initializers,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=initializers"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// InitializerConfigurationList is a list of InitializerConfiguration. -type InitializerConfigurationList struct { - metav1.TypeMeta `json:",inline"` - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - // +optional - metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - - // List of InitializerConfiguration. - Items []InitializerConfiguration `json:"items" protobuf:"bytes,2,rep,name=items"` -} - -// Initializer describes the name and the failure policy of an initializer, and -// what resources it applies to. -type Initializer struct { - // Name is the identifier of the initializer. It will be added to the - // object that needs to be initialized. - // Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where - // "alwayspullimages" is the name of the webhook, and kubernetes.io is the name - // of the organization. - // Required - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` - - // Rules describes what resources/subresources the initializer cares about. - // The initializer cares about an operation if it matches _any_ Rule. - // Rule.Resources must not include subresources. - Rules []Rule `json:"rules,omitempty" protobuf:"bytes,2,rep,name=rules"` -} - -// Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended -// to make sure that all the tuple expansions are valid. -type Rule struct { - // APIGroups is the API groups the resources belong to. '*' is all groups. - // If '*' is present, the length of the slice must be one. - // Required. - APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,1,rep,name=apiGroups"` - - // APIVersions is the API versions the resources belong to. '*' is all versions. - // If '*' is present, the length of the slice must be one. - // Required. - APIVersions []string `json:"apiVersions,omitempty" protobuf:"bytes,2,rep,name=apiVersions"` - - // Resources is a list of resources this rule applies to. - // - // For example: - // 'pods' means pods. - // 'pods/log' means the log subresource of pods. - // '*' means all resources, but not subresources. - // 'pods/*' means all subresources of pods. - // '*/scale' means all scale subresources. - // '*/*' means all resources and their subresources. - // - // If wildcard is present, the validation rule will ensure resources do not - // overlap with each other. - // - // Depending on the enclosing object, subresources might not be allowed. - // Required. - Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha1 - -// This file contains a collection of methods that can be used from go-restful to -// generate Swagger API documentation for its models. Please read this PR for more -// information on the implementation: https://github.com/emicklei/go-restful/pull/215 -// -// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if -// they are on one line! For multiple line or blocks that you want to ignore use ---. -// Any context after a --- is ignored. -// -// Those methods can be generated by using hack/update-generated-swagger-docs.sh - -// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_Initializer = map[string]string{ - "": "Initializer describes the name and the failure policy of an initializer, and what resources it applies to.", - "name": "Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where \"alwayspullimages\" is the name of the webhook, and kubernetes.io is the name of the organization. Required", - "rules": "Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.", -} - -func (Initializer) SwaggerDoc() map[string]string { - return map_Initializer -} - -var map_InitializerConfiguration = map[string]string{ - "": "InitializerConfiguration describes the configuration of initializers.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "initializers": "Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.", -} - -func (InitializerConfiguration) SwaggerDoc() map[string]string { - return map_InitializerConfiguration -} - -var map_InitializerConfigurationList = map[string]string{ - "": "InitializerConfigurationList is a list of InitializerConfiguration.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "items": "List of InitializerConfiguration.", -} - -func (InitializerConfigurationList) SwaggerDoc() map[string]string { - return map_InitializerConfigurationList -} - -var map_Rule = map[string]string{ - "": "Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.", - "apiGroups": "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", - "apiVersions": "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", - "resources": "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", -} - -func (Rule) SwaggerDoc() map[string]string { - return map_Rule -} - -// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1alpha1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Initializer) DeepCopyInto(out *Initializer) { - *out = *in - if in.Rules != nil { - in, out := &in.Rules, &out.Rules - *out = make([]Rule, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Initializer. -func (in *Initializer) DeepCopy() *Initializer { - if in == nil { - return nil - } - out := new(Initializer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *InitializerConfiguration) DeepCopyInto(out *InitializerConfiguration) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Initializers != nil { - in, out := &in.Initializers, &out.Initializers - *out = make([]Initializer, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitializerConfiguration. -func (in *InitializerConfiguration) DeepCopy() *InitializerConfiguration { - if in == nil { - return nil - } - out := new(InitializerConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *InitializerConfiguration) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *InitializerConfigurationList) DeepCopyInto(out *InitializerConfigurationList) { - *out = *in - out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]InitializerConfiguration, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InitializerConfigurationList. -func (in *InitializerConfigurationList) DeepCopy() *InitializerConfigurationList { - if in == nil { - return nil - } - out := new(InitializerConfigurationList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *InitializerConfigurationList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Rule) DeepCopyInto(out *Rule) { - *out = *in - if in.APIGroups != nil { - in, out := &in.APIGroups, &out.APIGroups - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.APIVersions != nil { - in, out := &in.APIVersions, &out.APIVersions - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Rule. -func (in *Rule) DeepCopy() *Rule { - if in == nil { - return nil - } - out := new(Rule) - in.DeepCopyInto(out) - return out -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,11 +15,12 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true +// +groupName=admissionregistration.k8s.io // Package v1beta1 is the v1beta1 version of the API. // AdmissionConfiguration and AdmissionPluginConfiguration are legacy static admission plugin configuration -// InitializerConfiguration and validatingWebhookConfiguration is for the +// MutatingWebhookConfiguration and ValidatingWebhookConfiguration are for the // new dynamic admission controller configuration. -// +groupName=admissionregistration.k8s.io package v1beta1 // import "k8s.io/api/admissionregistration/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,39 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto - - It has these top-level messages: - MutatingWebhookConfiguration - MutatingWebhookConfigurationList - Rule - RuleWithOperations - ServiceReference - ValidatingWebhookConfiguration - ValidatingWebhookConfigurationList - Webhook - WebhookClientConfig -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -59,141 +44,593 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +func (m *MutatingWebhook) Reset() { *m = MutatingWebhook{} } +func (*MutatingWebhook) ProtoMessage() {} +func (*MutatingWebhook) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{0} +} +func (m *MutatingWebhook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MutatingWebhook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MutatingWebhook) XXX_Merge(src proto.Message) { + xxx_messageInfo_MutatingWebhook.Merge(m, src) +} +func (m *MutatingWebhook) XXX_Size() int { + return m.Size() +} +func (m *MutatingWebhook) XXX_DiscardUnknown() { + xxx_messageInfo_MutatingWebhook.DiscardUnknown(m) +} + +var xxx_messageInfo_MutatingWebhook proto.InternalMessageInfo + func (m *MutatingWebhookConfiguration) Reset() { *m = MutatingWebhookConfiguration{} } func (*MutatingWebhookConfiguration) ProtoMessage() {} func (*MutatingWebhookConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{0} + return fileDescriptor_abeea74cbc46f55a, []int{1} +} +func (m *MutatingWebhookConfiguration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MutatingWebhookConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MutatingWebhookConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_MutatingWebhookConfiguration.Merge(m, src) +} +func (m *MutatingWebhookConfiguration) XXX_Size() int { + return m.Size() } +func (m *MutatingWebhookConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_MutatingWebhookConfiguration.DiscardUnknown(m) +} + +var xxx_messageInfo_MutatingWebhookConfiguration proto.InternalMessageInfo func (m *MutatingWebhookConfigurationList) Reset() { *m = MutatingWebhookConfigurationList{} } func (*MutatingWebhookConfigurationList) ProtoMessage() {} func (*MutatingWebhookConfigurationList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} + return fileDescriptor_abeea74cbc46f55a, []int{2} +} +func (m *MutatingWebhookConfigurationList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MutatingWebhookConfigurationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MutatingWebhookConfigurationList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MutatingWebhookConfigurationList.Merge(m, src) +} +func (m *MutatingWebhookConfigurationList) XXX_Size() int { + return m.Size() +} +func (m *MutatingWebhookConfigurationList) XXX_DiscardUnknown() { + xxx_messageInfo_MutatingWebhookConfigurationList.DiscardUnknown(m) +} + +var xxx_messageInfo_MutatingWebhookConfigurationList proto.InternalMessageInfo + +func (m *Rule) Reset() { *m = Rule{} } +func (*Rule) ProtoMessage() {} +func (*Rule) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{3} +} +func (m *Rule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Rule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Rule) XXX_Merge(src proto.Message) { + xxx_messageInfo_Rule.Merge(m, src) +} +func (m *Rule) XXX_Size() int { + return m.Size() +} +func (m *Rule) XXX_DiscardUnknown() { + xxx_messageInfo_Rule.DiscardUnknown(m) +} + +var xxx_messageInfo_Rule proto.InternalMessageInfo + +func (m *RuleWithOperations) Reset() { *m = RuleWithOperations{} } +func (*RuleWithOperations) ProtoMessage() {} +func (*RuleWithOperations) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{4} +} +func (m *RuleWithOperations) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuleWithOperations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuleWithOperations) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuleWithOperations.Merge(m, src) +} +func (m *RuleWithOperations) XXX_Size() int { + return m.Size() +} +func (m *RuleWithOperations) XXX_DiscardUnknown() { + xxx_messageInfo_RuleWithOperations.DiscardUnknown(m) +} + +var xxx_messageInfo_RuleWithOperations proto.InternalMessageInfo + +func (m *ServiceReference) Reset() { *m = ServiceReference{} } +func (*ServiceReference) ProtoMessage() {} +func (*ServiceReference) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{5} +} +func (m *ServiceReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServiceReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceReference.Merge(m, src) +} +func (m *ServiceReference) XXX_Size() int { + return m.Size() +} +func (m *ServiceReference) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceReference.DiscardUnknown(m) } -func (m *Rule) Reset() { *m = Rule{} } -func (*Rule) ProtoMessage() {} -func (*Rule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +var xxx_messageInfo_ServiceReference proto.InternalMessageInfo -func (m *RuleWithOperations) Reset() { *m = RuleWithOperations{} } -func (*RuleWithOperations) ProtoMessage() {} -func (*RuleWithOperations) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (m *ValidatingWebhook) Reset() { *m = ValidatingWebhook{} } +func (*ValidatingWebhook) ProtoMessage() {} +func (*ValidatingWebhook) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{6} +} +func (m *ValidatingWebhook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingWebhook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingWebhook) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingWebhook.Merge(m, src) +} +func (m *ValidatingWebhook) XXX_Size() int { + return m.Size() +} +func (m *ValidatingWebhook) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingWebhook.DiscardUnknown(m) +} -func (m *ServiceReference) Reset() { *m = ServiceReference{} } -func (*ServiceReference) ProtoMessage() {} -func (*ServiceReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +var xxx_messageInfo_ValidatingWebhook proto.InternalMessageInfo func (m *ValidatingWebhookConfiguration) Reset() { *m = ValidatingWebhookConfiguration{} } func (*ValidatingWebhookConfiguration) ProtoMessage() {} func (*ValidatingWebhookConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{5} + return fileDescriptor_abeea74cbc46f55a, []int{7} +} +func (m *ValidatingWebhookConfiguration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingWebhookConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingWebhookConfiguration) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingWebhookConfiguration.Merge(m, src) +} +func (m *ValidatingWebhookConfiguration) XXX_Size() int { + return m.Size() +} +func (m *ValidatingWebhookConfiguration) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingWebhookConfiguration.DiscardUnknown(m) } +var xxx_messageInfo_ValidatingWebhookConfiguration proto.InternalMessageInfo + func (m *ValidatingWebhookConfigurationList) Reset() { *m = ValidatingWebhookConfigurationList{} } func (*ValidatingWebhookConfigurationList) ProtoMessage() {} func (*ValidatingWebhookConfigurationList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{6} + return fileDescriptor_abeea74cbc46f55a, []int{8} +} +func (m *ValidatingWebhookConfigurationList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatingWebhookConfigurationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ValidatingWebhookConfigurationList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatingWebhookConfigurationList.Merge(m, src) +} +func (m *ValidatingWebhookConfigurationList) XXX_Size() int { + return m.Size() } +func (m *ValidatingWebhookConfigurationList) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatingWebhookConfigurationList.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatingWebhookConfigurationList proto.InternalMessageInfo -func (m *Webhook) Reset() { *m = Webhook{} } -func (*Webhook) ProtoMessage() {} -func (*Webhook) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +func (m *WebhookClientConfig) Reset() { *m = WebhookClientConfig{} } +func (*WebhookClientConfig) ProtoMessage() {} +func (*WebhookClientConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_abeea74cbc46f55a, []int{9} +} +func (m *WebhookClientConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WebhookClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WebhookClientConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_WebhookClientConfig.Merge(m, src) +} +func (m *WebhookClientConfig) XXX_Size() int { + return m.Size() +} +func (m *WebhookClientConfig) XXX_DiscardUnknown() { + xxx_messageInfo_WebhookClientConfig.DiscardUnknown(m) +} -func (m *WebhookClientConfig) Reset() { *m = WebhookClientConfig{} } -func (*WebhookClientConfig) ProtoMessage() {} -func (*WebhookClientConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +var xxx_messageInfo_WebhookClientConfig proto.InternalMessageInfo func init() { + proto.RegisterType((*MutatingWebhook)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhook") proto.RegisterType((*MutatingWebhookConfiguration)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhookConfiguration") proto.RegisterType((*MutatingWebhookConfigurationList)(nil), "k8s.io.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList") proto.RegisterType((*Rule)(nil), "k8s.io.api.admissionregistration.v1beta1.Rule") proto.RegisterType((*RuleWithOperations)(nil), "k8s.io.api.admissionregistration.v1beta1.RuleWithOperations") proto.RegisterType((*ServiceReference)(nil), "k8s.io.api.admissionregistration.v1beta1.ServiceReference") + proto.RegisterType((*ValidatingWebhook)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingWebhook") proto.RegisterType((*ValidatingWebhookConfiguration)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration") proto.RegisterType((*ValidatingWebhookConfigurationList)(nil), "k8s.io.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList") - proto.RegisterType((*Webhook)(nil), "k8s.io.api.admissionregistration.v1beta1.Webhook") proto.RegisterType((*WebhookClientConfig)(nil), "k8s.io.api.admissionregistration.v1beta1.WebhookClientConfig") } -func (m *MutatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto", fileDescriptor_abeea74cbc46f55a) +} + +var fileDescriptor_abeea74cbc46f55a = []byte{ + // 1114 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0x4d, 0x6f, 0x23, 0x45, + 0x13, 0xce, 0xc4, 0xf6, 0xda, 0x6e, 0x27, 0xbb, 0x9b, 0x7e, 0x5f, 0x76, 0x4d, 0x58, 0x79, 0x2c, + 0x1f, 0x90, 0x25, 0xd8, 0x99, 0x4d, 0x40, 0x08, 0x16, 0x10, 0x8a, 0x03, 0x0b, 0x91, 0x92, 0xdd, + 0xd0, 0xd9, 0x0f, 0x89, 0x0f, 0x69, 0xdb, 0xe3, 0xb2, 0xdd, 0xd8, 0x9e, 0x1e, 0x4d, 0xf7, 0x38, + 0xe4, 0xc6, 0x4f, 0xe0, 0x2f, 0x70, 0xe2, 0x57, 0x70, 0xe0, 0x16, 0x6e, 0x7b, 0xdc, 0x0b, 0x23, + 0x32, 0x9c, 0x38, 0x70, 0xe0, 0x9a, 0x13, 0x9a, 0x9e, 0xf6, 0xf8, 0x2b, 0x59, 0x4c, 0x90, 0xf6, + 0x94, 0xdb, 0xf4, 0x53, 0x5d, 0x4f, 0x75, 0xd5, 0x54, 0xd5, 0x83, 0x3e, 0xef, 0xbd, 0x2b, 0x2c, + 0xc6, 0xed, 0x5e, 0xd0, 0x04, 0xdf, 0x05, 0x09, 0xc2, 0x1e, 0x82, 0xdb, 0xe2, 0xbe, 0xad, 0x0d, + 0xd4, 0x63, 0x36, 0x6d, 0x0d, 0x98, 0x10, 0x8c, 0xbb, 0x3e, 0x74, 0x98, 0x90, 0x3e, 0x95, 0x8c, + 0xbb, 0xf6, 0x70, 0xa3, 0x09, 0x92, 0x6e, 0xd8, 0x1d, 0x70, 0xc1, 0xa7, 0x12, 0x5a, 0x96, 0xe7, + 0x73, 0xc9, 0x71, 0x3d, 0xf1, 0xb4, 0xa8, 0xc7, 0xac, 0x33, 0x3d, 0x2d, 0xed, 0xb9, 0x7e, 0xbb, + 0xc3, 0x64, 0x37, 0x68, 0x5a, 0x0e, 0x1f, 0xd8, 0x1d, 0xde, 0xe1, 0xb6, 0x22, 0x68, 0x06, 0x6d, + 0x75, 0x52, 0x07, 0xf5, 0x95, 0x10, 0xaf, 0xbf, 0x3d, 0x7e, 0xd2, 0x80, 0x3a, 0x5d, 0xe6, 0x82, + 0x7f, 0x64, 0x7b, 0xbd, 0x4e, 0x0c, 0x08, 0x7b, 0x00, 0x92, 0xda, 0xc3, 0xb9, 0xe7, 0xac, 0xdb, + 0xe7, 0x79, 0xf9, 0x81, 0x2b, 0xd9, 0x00, 0xe6, 0x1c, 0xde, 0xf9, 0x27, 0x07, 0xe1, 0x74, 0x61, + 0x40, 0x67, 0xfd, 0x6a, 0xbf, 0xe4, 0xd1, 0xb5, 0xbd, 0x40, 0x52, 0xc9, 0xdc, 0xce, 0x13, 0x68, + 0x76, 0x39, 0xef, 0xe1, 0x2a, 0xca, 0xba, 0x74, 0x00, 0x65, 0xa3, 0x6a, 0xd4, 0x8b, 0x8d, 0x95, + 0xe3, 0xd0, 0x5c, 0x8a, 0x42, 0x33, 0x7b, 0x9f, 0x0e, 0x80, 0x28, 0x0b, 0x3e, 0x44, 0x2b, 0x4e, + 0x9f, 0x81, 0x2b, 0xb7, 0xb9, 0xdb, 0x66, 0x9d, 0xf2, 0x72, 0xd5, 0xa8, 0x97, 0x36, 0x3f, 0xb4, + 0x16, 0x2d, 0xa2, 0xa5, 0x43, 0x6d, 0x4f, 0x90, 0x34, 0xfe, 0xaf, 0x03, 0xad, 0x4c, 0xa2, 0x64, + 0x2a, 0x10, 0xa6, 0x28, 0xe7, 0x07, 0x7d, 0x10, 0xe5, 0x4c, 0x35, 0x53, 0x2f, 0x6d, 0x7e, 0xb0, + 0x78, 0x44, 0x12, 0xf4, 0xe1, 0x09, 0x93, 0xdd, 0x07, 0x1e, 0x24, 0x16, 0xd1, 0x58, 0xd5, 0x01, + 0x73, 0xb1, 0x4d, 0x90, 0x84, 0x19, 0xef, 0xa2, 0xd5, 0x36, 0x65, 0xfd, 0xc0, 0x87, 0x7d, 0xde, + 0x67, 0xce, 0x51, 0x39, 0xab, 0xca, 0xf0, 0x7a, 0x14, 0x9a, 0xab, 0xf7, 0x26, 0x0d, 0xa7, 0xa1, + 0xb9, 0x36, 0x05, 0x3c, 0x3c, 0xf2, 0x80, 0x4c, 0x3b, 0xe3, 0x8f, 0x51, 0x69, 0x40, 0xa5, 0xd3, + 0xd5, 0x5c, 0x45, 0xc5, 0x55, 0x8b, 0x42, 0xb3, 0xb4, 0x37, 0x86, 0x4f, 0x43, 0xf3, 0xda, 0xc4, + 0x51, 0xf1, 0x4c, 0xba, 0xe1, 0x6f, 0xd1, 0x5a, 0x5c, 0x77, 0xe1, 0x51, 0x07, 0x0e, 0xa0, 0x0f, + 0x8e, 0xe4, 0x7e, 0x39, 0xa7, 0x8a, 0xfe, 0xd6, 0x44, 0x09, 0xd2, 0x3f, 0x6f, 0x79, 0xbd, 0x4e, + 0x0c, 0x08, 0x2b, 0x6e, 0x30, 0x6b, 0xb8, 0x61, 0xed, 0xd2, 0x26, 0xf4, 0x47, 0xae, 0x8d, 0x57, + 0xa2, 0xd0, 0x5c, 0xbb, 0x3f, 0xcb, 0x48, 0xe6, 0x83, 0x60, 0x8e, 0xae, 0xf2, 0xe6, 0x37, 0xe0, + 0xc8, 0x34, 0x6c, 0xe9, 0xe2, 0x61, 0x71, 0x14, 0x9a, 0x57, 0x1f, 0x4c, 0xd1, 0x91, 0x19, 0xfa, + 0xb8, 0x60, 0x82, 0xb5, 0xe0, 0x93, 0x76, 0x1b, 0x1c, 0x29, 0xca, 0x57, 0xc6, 0x05, 0x3b, 0x18, + 0xc3, 0x71, 0xc1, 0xc6, 0xc7, 0xed, 0x3e, 0x15, 0x82, 0x4c, 0xba, 0xe1, 0xbb, 0xe8, 0x6a, 0xdc, + 0xf5, 0x3c, 0x90, 0x07, 0xe0, 0x70, 0xb7, 0x25, 0xca, 0xf9, 0xaa, 0x51, 0xcf, 0x25, 0x2f, 0x78, + 0x38, 0x65, 0x21, 0x33, 0x37, 0xf1, 0x23, 0x74, 0x33, 0x6d, 0x25, 0x02, 0x43, 0x06, 0x87, 0x8f, + 0xc1, 0x8f, 0x0f, 0xa2, 0x5c, 0xa8, 0x66, 0xea, 0xc5, 0xc6, 0x6b, 0x51, 0x68, 0xde, 0xdc, 0x3a, + 0xfb, 0x0a, 0x39, 0xcf, 0x17, 0x3f, 0x45, 0xd8, 0x07, 0xe6, 0x0e, 0xb9, 0xa3, 0xda, 0x4f, 0x37, + 0x04, 0x52, 0xf9, 0xdd, 0x89, 0x42, 0x13, 0x93, 0x39, 0xeb, 0x69, 0x68, 0xde, 0x98, 0x47, 0x55, + 0x7b, 0x9c, 0xc1, 0x55, 0xfb, 0xd5, 0x40, 0xb7, 0x66, 0x66, 0x39, 0x19, 0x9b, 0x20, 0xe9, 0x78, + 0xfc, 0x14, 0x15, 0xe2, 0x1f, 0xd3, 0xa2, 0x92, 0xaa, 0xe1, 0x2e, 0x6d, 0xde, 0x59, 0xec, 0x37, + 0x26, 0xff, 0x6c, 0x0f, 0x24, 0x6d, 0x60, 0x3d, 0x34, 0x68, 0x8c, 0x91, 0x94, 0x15, 0x7f, 0x89, + 0x0a, 0x3a, 0xb2, 0x28, 0x2f, 0xab, 0x11, 0x7d, 0x6f, 0xf1, 0x11, 0x9d, 0x79, 0x7b, 0x23, 0x1b, + 0x87, 0x22, 0x85, 0x43, 0x4d, 0x58, 0xfb, 0xd3, 0x40, 0xd5, 0x17, 0xe5, 0xb7, 0xcb, 0x84, 0xc4, + 0x5f, 0xcd, 0xe5, 0x68, 0x2d, 0xd8, 0xaa, 0x4c, 0x24, 0x19, 0x5e, 0xd7, 0x19, 0x16, 0x46, 0xc8, + 0x44, 0x7e, 0x3d, 0x94, 0x63, 0x12, 0x06, 0xa3, 0xe4, 0xee, 0x5d, 0x38, 0xb9, 0xa9, 0x87, 0x8f, + 0x37, 0xd1, 0x4e, 0x4c, 0x4e, 0x92, 0x18, 0xb5, 0x9f, 0x0d, 0x94, 0x8d, 0x57, 0x13, 0x7e, 0x03, + 0x15, 0xa9, 0xc7, 0x3e, 0xf5, 0x79, 0xe0, 0x89, 0xb2, 0xa1, 0x7a, 0x70, 0x35, 0x0a, 0xcd, 0xe2, + 0xd6, 0xfe, 0x4e, 0x02, 0x92, 0xb1, 0x1d, 0x6f, 0xa0, 0x12, 0xf5, 0x58, 0xda, 0xb2, 0xcb, 0xea, + 0xfa, 0xb5, 0x78, 0x80, 0xb6, 0xf6, 0x77, 0xd2, 0x36, 0x9d, 0xbc, 0x13, 0xf3, 0xfb, 0x20, 0x78, + 0xe0, 0x3b, 0x7a, 0xb3, 0x6a, 0x7e, 0x32, 0x02, 0xc9, 0xd8, 0x8e, 0xdf, 0x44, 0x39, 0xe1, 0x70, + 0x0f, 0xf4, 0x5e, 0xbc, 0x11, 0x3f, 0xfb, 0x20, 0x06, 0x4e, 0x43, 0xb3, 0xa8, 0x3e, 0x54, 0x83, + 0x26, 0x97, 0x6a, 0x3f, 0x1a, 0x08, 0xcf, 0xaf, 0x5e, 0xfc, 0x11, 0x42, 0x3c, 0x3d, 0xe9, 0x94, + 0x4c, 0xd5, 0x55, 0x29, 0x7a, 0x1a, 0x9a, 0xab, 0xe9, 0x49, 0x51, 0x4e, 0xb8, 0xe0, 0x7d, 0x94, + 0x8d, 0xd7, 0xb5, 0x56, 0x1e, 0xeb, 0xdf, 0xe9, 0xc0, 0x58, 0xd3, 0xe2, 0x13, 0x51, 0x4c, 0xb5, + 0x1f, 0x0c, 0x74, 0xfd, 0x00, 0xfc, 0x21, 0x73, 0x80, 0x40, 0x1b, 0x7c, 0x70, 0x1d, 0xc0, 0x36, + 0x2a, 0xa6, 0x3b, 0x51, 0xeb, 0xe1, 0x9a, 0xf6, 0x2d, 0xa6, 0xfb, 0x93, 0x8c, 0xef, 0xa4, 0xda, + 0xb9, 0x7c, 0xae, 0x76, 0xde, 0x42, 0x59, 0x8f, 0xca, 0x6e, 0x39, 0xa3, 0x6e, 0x14, 0x62, 0xeb, + 0x3e, 0x95, 0x5d, 0xa2, 0x50, 0x65, 0xe5, 0xbe, 0x54, 0xc5, 0xcd, 0x69, 0x2b, 0xf7, 0x25, 0x51, + 0x68, 0xed, 0x8f, 0x2b, 0x68, 0xed, 0x31, 0xed, 0xb3, 0xd6, 0xa5, 0x5e, 0x5f, 0xea, 0xf5, 0x82, + 0x7a, 0x8d, 0x2e, 0xf5, 0xfa, 0x22, 0x7a, 0x5d, 0x3b, 0x31, 0x50, 0x65, 0x6e, 0xd6, 0x5e, 0xb6, + 0x9e, 0x7e, 0x3d, 0xa7, 0xa7, 0xef, 0x2f, 0x3e, 0x42, 0x73, 0xaf, 0x9f, 0x53, 0xd4, 0xbf, 0x0c, + 0x54, 0x7b, 0x71, 0x8e, 0x2f, 0x41, 0x53, 0x07, 0xd3, 0x9a, 0xfa, 0xd9, 0x7f, 0x48, 0x70, 0x11, + 0x55, 0xfd, 0xc9, 0x40, 0xff, 0x3b, 0x63, 0x9d, 0xe1, 0x57, 0x51, 0x26, 0xf0, 0xfb, 0x7a, 0x2d, + 0xe7, 0xa3, 0xd0, 0xcc, 0x3c, 0x22, 0xbb, 0x24, 0xc6, 0x30, 0x45, 0x79, 0x91, 0x28, 0x83, 0x4e, + 0xff, 0xee, 0xe2, 0x6f, 0x9c, 0x95, 0x94, 0x46, 0x29, 0x0a, 0xcd, 0xfc, 0x08, 0x1d, 0xf1, 0xe2, + 0x3a, 0x2a, 0x38, 0xb4, 0x11, 0xb8, 0x2d, 0xad, 0x69, 0x2b, 0x8d, 0x95, 0xb8, 0x5c, 0xdb, 0x5b, + 0x09, 0x46, 0x52, 0x6b, 0xe3, 0xf6, 0xf1, 0x49, 0x65, 0xe9, 0xd9, 0x49, 0x65, 0xe9, 0xf9, 0x49, + 0x65, 0xe9, 0xbb, 0xa8, 0x62, 0x1c, 0x47, 0x15, 0xe3, 0x59, 0x54, 0x31, 0x9e, 0x47, 0x15, 0xe3, + 0xb7, 0xa8, 0x62, 0x7c, 0xff, 0x7b, 0x65, 0xe9, 0x8b, 0xbc, 0x8e, 0xff, 0x77, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xae, 0x27, 0x2b, 0xcb, 0x2c, 0x0f, 0x00, 0x00, +} + +func (m *MutatingWebhook) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *MutatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *MutatingWebhook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MutatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.ObjectSelector != nil { + { + size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a } - i += n1 - if len(m.Webhooks) > 0 { - for _, msg := range m.Webhooks { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.ReinvocationPolicy != nil { + i -= len(*m.ReinvocationPolicy) + copy(dAtA[i:], *m.ReinvocationPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReinvocationPolicy))) + i-- + dAtA[i] = 0x52 + } + if m.MatchPolicy != nil { + i -= len(*m.MatchPolicy) + copy(dAtA[i:], *m.MatchPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) + i-- + dAtA[i] = 0x4a + } + if len(m.AdmissionReviewVersions) > 0 { + for iNdEx := len(m.AdmissionReviewVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdmissionReviewVersions[iNdEx]) + copy(dAtA[i:], m.AdmissionReviewVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdmissionReviewVersions[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x38 + } + if m.SideEffects != nil { + i -= len(*m.SideEffects) + copy(dAtA[i:], *m.SideEffects) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) + i-- + dAtA[i] = 0x32 + } + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.FailurePolicy != nil { + i -= len(*m.FailurePolicy) + copy(dAtA[i:], *m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *MutatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { +func (m *MutatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *MutatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *MutatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MutatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Webhooks) > 0 { + for iNdEx := len(m.Webhooks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Webhooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) + return len(dAtA) - i, nil +} + +func (m *MutatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err + return nil, err } - i += n2 + return dAtA[:n], nil +} + +func (m *MutatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MutatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Rule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -201,62 +638,56 @@ } func (m *Rule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Rule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.Scope != nil { + i -= len(*m.Scope) + copy(dAtA[i:], *m.Scope) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Scope))) + i-- + dAtA[i] = 0x22 + } + if len(m.Resources) > 0 { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- + dAtA[i] = 0x1a } } if len(m.APIVersions) > 0 { - for _, s := range m.APIVersions { + for iNdEx := len(m.APIVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIVersions[iNdEx]) + copy(dAtA[i:], m.APIVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersions[iNdEx]))) + i-- dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if len(m.Resources) > 0 { - for _, s := range m.Resources { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *RuleWithOperations) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -264,40 +695,41 @@ } func (m *RuleWithOperations) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuleWithOperations) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Operations) > 0 { - for _, s := range m.Operations { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + { + size, err := m.Rule.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Rule.Size())) - n3, err := m.Rule.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Operations) > 0 { + for iNdEx := len(m.Operations) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Operations[iNdEx]) + copy(dAtA[i:], m.Operations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operations[iNdEx]))) + i-- + dAtA[i] = 0xa + } } - i += n3 - return i, nil + return len(dAtA) - i, nil } func (m *ServiceReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -305,165 +737,249 @@ } func (m *ServiceReference) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) + if m.Port != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Port)) + i-- + dAtA[i] = 0x20 + } if m.Path != nil { - dAtA[i] = 0x1a - i++ + i -= len(*m.Path) + copy(dAtA[i:], *m.Path) i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Path))) - i += copy(dAtA[i:], *m.Path) + i-- + dAtA[i] = 0x1a } - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ValidatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { +func (m *ValidatingWebhook) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ValidatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ValidatingWebhook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - if len(m.Webhooks) > 0 { - for _, msg := range m.Webhooks { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.ObjectSelector != nil { + { + size, err := m.ObjectSelector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x52 } - return i, nil -} - -func (m *ValidatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if m.MatchPolicy != nil { + i -= len(*m.MatchPolicy) + copy(dAtA[i:], *m.MatchPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MatchPolicy))) + i-- + dAtA[i] = 0x4a + } + if len(m.AdmissionReviewVersions) > 0 { + for iNdEx := len(m.AdmissionReviewVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdmissionReviewVersions[iNdEx]) + copy(dAtA[i:], m.AdmissionReviewVersions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdmissionReviewVersions[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x38 + } + if m.SideEffects != nil { + i -= len(*m.SideEffects) + copy(dAtA[i:], *m.SideEffects) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SideEffects))) + i-- + dAtA[i] = 0x32 } - return dAtA[:n], nil -} - -func (m *ValidatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.NamespaceSelector != nil { + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.FailurePolicy != nil { + i -= len(*m.FailurePolicy) + copy(dAtA[i:], *m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Webhook) Marshal() (dAtA []byte, err error) { +func (m *ValidatingWebhookConfiguration) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Webhook) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ValidatingWebhookConfiguration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhookConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Webhooks) > 0 { + for iNdEx := len(m.Webhooks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Webhooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ClientConfig.Size())) - n6, err := m.ClientConfig.MarshalTo(dAtA[i:]) + return len(dAtA) - i, nil +} + +func (m *ValidatingWebhookConfigurationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err + return nil, err } - i += n6 - if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + return dAtA[:n], nil +} + +func (m *ValidatingWebhookConfigurationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatingWebhookConfigurationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if m.FailurePolicy != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailurePolicy))) - i += copy(dAtA[i:], *m.FailurePolicy) - } - if m.NamespaceSelector != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NamespaceSelector.Size())) - n7, err := m.NamespaceSelector.MarshalTo(dAtA[i:]) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n7 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *WebhookClientConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -471,63 +987,111 @@ } func (m *WebhookClientConfig) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WebhookClientConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Service != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Service.Size())) - n8, err := m.Service.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 + if m.URL != nil { + i -= len(*m.URL) + copy(dAtA[i:], *m.URL) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.URL))) + i-- + dAtA[i] = 0x1a } if m.CABundle != nil { - dAtA[i] = 0x12 - i++ + i -= len(m.CABundle) + copy(dAtA[i:], m.CABundle) i = encodeVarintGenerated(dAtA, i, uint64(len(m.CABundle))) - i += copy(dAtA[i:], m.CABundle) + i-- + dAtA[i] = 0x12 } - if m.URL != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.URL))) - i += copy(dAtA[i:], *m.URL) + if m.Service != nil { + { + size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base +} +func (m *MutatingWebhook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SideEffects != nil { + l = len(*m.SideEffects) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReinvocationPolicy != nil { + l = len(*m.ReinvocationPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n } + func (m *MutatingWebhookConfiguration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -542,6 +1106,9 @@ } func (m *MutatingWebhookConfigurationList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -556,6 +1123,9 @@ } func (m *Rule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.APIGroups) > 0 { @@ -576,10 +1146,17 @@ n += 1 + l + sovGenerated(uint64(l)) } } + if m.Scope != nil { + l = len(*m.Scope) + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *RuleWithOperations) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Operations) > 0 { @@ -594,6 +1171,9 @@ } func (m *ServiceReference) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Namespace) @@ -604,30 +1184,70 @@ l = len(*m.Path) n += 1 + l + sovGenerated(uint64(l)) } + if m.Port != nil { + n += 1 + sovGenerated(uint64(*m.Port)) + } return n } -func (m *ValidatingWebhookConfiguration) Size() (n int) { +func (m *ValidatingWebhook) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.ObjectMeta.Size() + l = len(m.Name) n += 1 + l + sovGenerated(uint64(l)) - if len(m.Webhooks) > 0 { - for _, e := range m.Webhooks { + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { l = e.Size() n += 1 + l + sovGenerated(uint64(l)) } } + if m.FailurePolicy != nil { + l = len(*m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NamespaceSelector != nil { + l = m.NamespaceSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SideEffects != nil { + l = len(*m.SideEffects) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if len(m.AdmissionReviewVersions) > 0 { + for _, s := range m.AdmissionReviewVersions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MatchPolicy != nil { + l = len(*m.MatchPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ObjectSelector != nil { + l = m.ObjectSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } -func (m *ValidatingWebhookConfigurationList) Size() (n int) { +func (m *ValidatingWebhookConfiguration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.ListMeta.Size() + l = m.ObjectMeta.Size() n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { + if len(m.Webhooks) > 0 { + for _, e := range m.Webhooks { l = e.Size() n += 1 + l + sovGenerated(uint64(l)) } @@ -635,31 +1255,27 @@ return n } -func (m *Webhook) Size() (n int) { +func (m *ValidatingWebhookConfigurationList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = m.ClientConfig.Size() + l = m.ListMeta.Size() n += 1 + l + sovGenerated(uint64(l)) - if len(m.Rules) > 0 { - for _, e := range m.Rules { + if len(m.Items) > 0 { + for _, e := range m.Items { l = e.Size() n += 1 + l + sovGenerated(uint64(l)) } } - if m.FailurePolicy != nil { - l = len(*m.FailurePolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.NamespaceSelector != nil { - l = m.NamespaceSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } return n } func (m *WebhookClientConfig) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Service != nil { @@ -678,25 +1294,48 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *MutatingWebhook) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]RuleWithOperations{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "RuleWithOperations", "RuleWithOperations", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&MutatingWebhook{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, + `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, + `ReinvocationPolicy:` + valueToStringGenerated(this.ReinvocationPolicy) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} func (this *MutatingWebhookConfiguration) String() string { if this == nil { return "nil" } + repeatedStringForWebhooks := "[]MutatingWebhook{" + for _, f := range this.Webhooks { + repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "MutatingWebhook", "MutatingWebhook", 1), `&`, ``, 1) + "," + } + repeatedStringForWebhooks += "}" s := strings.Join([]string{`&MutatingWebhookConfiguration{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Webhooks:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Webhooks), "Webhook", "Webhook", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Webhooks:` + repeatedStringForWebhooks + `,`, `}`, }, "") return s @@ -705,9 +1344,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]MutatingWebhookConfiguration{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "MutatingWebhookConfiguration", "MutatingWebhookConfiguration", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&MutatingWebhookConfigurationList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "MutatingWebhookConfiguration", "MutatingWebhookConfiguration", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -720,6 +1364,7 @@ `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, `APIVersions:` + fmt.Sprintf("%v", this.APIVersions) + `,`, `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, + `Scope:` + valueToStringGenerated(this.Scope) + `,`, `}`, }, "") return s @@ -743,42 +1388,63 @@ `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `Path:` + valueToStringGenerated(this.Path) + `,`, + `Port:` + valueToStringGenerated(this.Port) + `,`, `}`, }, "") return s } -func (this *ValidatingWebhookConfiguration) String() string { +func (this *ValidatingWebhook) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&ValidatingWebhookConfiguration{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Webhooks:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Webhooks), "Webhook", "Webhook", 1), `&`, ``, 1) + `,`, + repeatedStringForRules := "[]RuleWithOperations{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "RuleWithOperations", "RuleWithOperations", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&ValidatingWebhook{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `SideEffects:` + valueToStringGenerated(this.SideEffects) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `AdmissionReviewVersions:` + fmt.Sprintf("%v", this.AdmissionReviewVersions) + `,`, + `MatchPolicy:` + valueToStringGenerated(this.MatchPolicy) + `,`, + `ObjectSelector:` + strings.Replace(fmt.Sprintf("%v", this.ObjectSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `}`, }, "") return s } -func (this *ValidatingWebhookConfigurationList) String() string { +func (this *ValidatingWebhookConfiguration) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&ValidatingWebhookConfigurationList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ValidatingWebhookConfiguration", "ValidatingWebhookConfiguration", 1), `&`, ``, 1) + `,`, + repeatedStringForWebhooks := "[]ValidatingWebhook{" + for _, f := range this.Webhooks { + repeatedStringForWebhooks += strings.Replace(strings.Replace(f.String(), "ValidatingWebhook", "ValidatingWebhook", 1), `&`, ``, 1) + "," + } + repeatedStringForWebhooks += "}" + s := strings.Join([]string{`&ValidatingWebhookConfiguration{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Webhooks:` + repeatedStringForWebhooks + `,`, `}`, }, "") return s } -func (this *Webhook) String() string { +func (this *ValidatingWebhookConfigurationList) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&Webhook{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "RuleWithOperations", "RuleWithOperations", 1), `&`, ``, 1) + `,`, - `FailurePolicy:` + valueToStringGenerated(this.FailurePolicy) + `,`, - `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + repeatedStringForItems := "[]ValidatingWebhookConfiguration{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ValidatingWebhookConfiguration", "ValidatingWebhookConfiguration", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ValidatingWebhookConfigurationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -788,7 +1454,7 @@ return "nil" } s := strings.Join([]string{`&WebhookClientConfig{`, - `Service:` + strings.Replace(fmt.Sprintf("%v", this.Service), "ServiceReference", "ServiceReference", 1) + `,`, + `Service:` + strings.Replace(this.Service.String(), "ServiceReference", "ServiceReference", 1) + `,`, `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, `URL:` + valueToStringGenerated(this.URL) + `,`, `}`, @@ -803,7 +1469,7 @@ pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } -func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { +func (m *MutatingWebhook) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -816,27 +1482,739 @@ if iNdEx >= l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MutatingWebhookConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MutatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, RuleWithOperations{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := FailurePolicyType(dAtA[iNdEx:postIndex]) + m.FailurePolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SideEffects", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := SideEffectClass(dAtA[iNdEx:postIndex]) + m.SideEffects = &s + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReinvocationPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ReinvocationPolicyType(dAtA[iNdEx:postIndex]) + m.ReinvocationPolicy = &s + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhookConfiguration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhookConfiguration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Webhooks = append(m.Webhooks, MutatingWebhook{}) + if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MutatingWebhookConfigurationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MutatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, MutatingWebhookConfiguration{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Rule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Rule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Rule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIGroups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIGroups = append(m.APIGroups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersions = append(m.APIVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -846,27 +2224,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -876,22 +2256,24 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Webhooks = append(m.Webhooks, Webhook{}) - if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := ScopeType(dAtA[iNdEx:postIndex]) + m.Scope = &s iNdEx = postIndex default: iNdEx = preIndex @@ -902,6 +2284,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -914,7 +2299,7 @@ } return nil } -func (m *MutatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { +func (m *RuleWithOperations) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -929,7 +2314,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -937,17 +2322,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MutatingWebhookConfigurationList: wiretype end group for non-group") + return fmt.Errorf("proto: RuleWithOperations: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MutatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RuleWithOperations: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Operations", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -957,25 +2342,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Operations = append(m.Operations, OperationType(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -987,7 +2374,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -996,11 +2383,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, MutatingWebhookConfiguration{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Rule.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1013,6 +2402,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1025,7 +2417,7 @@ } return nil } -func (m *Rule) Unmarshal(dAtA []byte) error { +func (m *ServiceReference) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1040,7 +2432,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1048,15 +2440,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Rule: wiretype end group for non-group") + return fmt.Errorf("proto: ServiceReference: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Rule: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ServiceReference: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIGroups", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1068,7 +2460,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1078,14 +2470,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.APIGroups = append(m.APIGroups, string(dAtA[iNdEx:postIndex])) + m.Namespace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIVersions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1097,7 +2492,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1107,14 +2502,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.APIVersions = append(m.APIVersions, string(dAtA[iNdEx:postIndex])) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1126,7 +2524,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1136,11 +2534,35 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) + s := string(dAtA[iNdEx:postIndex]) + m.Path = &s iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Port = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1150,6 +2572,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1162,7 +2587,7 @@ } return nil } -func (m *RuleWithOperations) Unmarshal(dAtA []byte) error { +func (m *ValidatingWebhook) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1177,7 +2602,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1185,15 +2610,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RuleWithOperations: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingWebhook: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RuleWithOperations: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingWebhook: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Operations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1205,7 +2630,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1215,14 +2640,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Operations = append(m.Operations, OperationType(dAtA[iNdEx:postIndex])) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1234,7 +2662,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1243,66 +2671,122 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Rule.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, RuleWithOperations{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if skippy < 0 { + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ServiceReference) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + s := FailurePolicyType(dAtA[iNdEx:postIndex]) + m.FailurePolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) } - if iNdEx >= l { + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if m.NamespaceSelector == nil { + m.NamespaceSelector = &v1.LabelSelector{} + } + if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ServiceReference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceReference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SideEffects", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1314,7 +2798,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1324,16 +2808,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Namespace = string(dAtA[iNdEx:postIndex]) + s := SideEffectClass(dAtA[iNdEx:postIndex]) + m.SideEffects = &s iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) } - var stringLen uint64 + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1343,24 +2831,15 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: + m.TimeoutSeconds = &v + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionReviewVersions", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1372,7 +2851,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1382,67 +2861,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(dAtA[iNdEx:postIndex]) - m.Path = &s - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ValidatingWebhookConfiguration: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ValidatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.AdmissionReviewVersions = append(m.AdmissionReviewVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchPolicy", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1452,25 +2883,28 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := MatchPolicyType(dAtA[iNdEx:postIndex]) + m.MatchPolicy = &s iNdEx = postIndex - case 2: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectSelector", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1482,7 +2916,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1491,11 +2925,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Webhooks = append(m.Webhooks, Webhook{}) - if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ObjectSelector == nil { + m.ObjectSelector = &v1.LabelSelector{} + } + if err := m.ObjectSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1508,6 +2947,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1520,7 +2962,7 @@ } return nil } -func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { +func (m *ValidatingWebhookConfiguration) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1535,7 +2977,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1543,15 +2985,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ValidatingWebhookConfigurationList: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingWebhookConfiguration: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ValidatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingWebhookConfiguration: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1563,7 +3005,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1572,16 +3014,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Webhooks", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1593,7 +3038,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1602,11 +3047,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, ValidatingWebhookConfiguration{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Webhooks = append(m.Webhooks, ValidatingWebhook{}) + if err := m.Webhooks[len(m.Webhooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1619,6 +3067,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1631,7 +3082,7 @@ } return nil } -func (m *Webhook) Unmarshal(dAtA []byte) error { +func (m *ValidatingWebhookConfigurationList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1646,7 +3097,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1654,44 +3105,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Webhook: wiretype end group for non-group") + return fmt.Errorf("proto: ValidatingWebhookConfigurationList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Webhook: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ValidatingWebhookConfigurationList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1703,7 +3125,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1712,77 +3134,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Rules = append(m.Rules, RuleWithOperations{}) - if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := FailurePolicyType(dAtA[iNdEx:postIndex]) - m.FailurePolicy = &s - iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NamespaceSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1794,7 +3158,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1803,13 +3167,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.NamespaceSelector == nil { - m.NamespaceSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} - } - if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, ValidatingWebhookConfiguration{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1822,6 +3187,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1849,7 +3217,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1877,7 +3245,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1886,6 +3254,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1910,7 +3281,7 @@ } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1919,6 +3290,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1941,7 +3315,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1951,6 +3325,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1966,6 +3343,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2032,10 +3412,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -2064,6 +3447,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -2082,66 +3468,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 872 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x54, 0xcf, 0x8f, 0xdb, 0x44, - 0x14, 0x8e, 0x9b, 0xac, 0x92, 0x4c, 0x12, 0xd1, 0x1d, 0x40, 0x0a, 0xab, 0xca, 0x8e, 0x72, 0x40, - 0x91, 0x50, 0x6d, 0xb2, 0x20, 0x84, 0x10, 0x08, 0xad, 0x57, 0x2a, 0xac, 0xb4, 0x6d, 0xc3, 0x2c, - 0xb4, 0x12, 0xe2, 0xc0, 0xc4, 0x79, 0xeb, 0x0c, 0xf1, 0x2f, 0x8d, 0xc7, 0x29, 0x7b, 0x43, 0xe2, - 0x1f, 0x40, 0xe2, 0x8f, 0xe0, 0xaf, 0xe0, 0xbe, 0x37, 0x7a, 0x41, 0xf4, 0x64, 0xb1, 0xe6, 0xcc, - 0x81, 0x6b, 0x4f, 0x68, 0xec, 0x49, 0x9c, 0x6c, 0xba, 0x69, 0x7a, 0xe1, 0xc0, 0xcd, 0xf3, 0xbd, - 0xf9, 0xbe, 0xf7, 0xbe, 0xe7, 0xf7, 0x06, 0x7d, 0x31, 0xfb, 0x30, 0x36, 0x59, 0x68, 0xcd, 0x92, - 0x31, 0xf0, 0x00, 0x04, 0xc4, 0xd6, 0x1c, 0x82, 0x49, 0xc8, 0x2d, 0x15, 0xa0, 0x11, 0xb3, 0xe8, - 0xc4, 0x67, 0x71, 0xcc, 0xc2, 0x80, 0x83, 0xcb, 0x62, 0xc1, 0xa9, 0x60, 0x61, 0x60, 0xcd, 0x87, - 0x63, 0x10, 0x74, 0x68, 0xb9, 0x10, 0x00, 0xa7, 0x02, 0x26, 0x66, 0xc4, 0x43, 0x11, 0xe2, 0x41, - 0xc1, 0x34, 0x69, 0xc4, 0xcc, 0x17, 0x32, 0x4d, 0xc5, 0x3c, 0xb8, 0xeb, 0x32, 0x31, 0x4d, 0xc6, - 0xa6, 0x13, 0xfa, 0x96, 0x1b, 0xba, 0xa1, 0x95, 0x0b, 0x8c, 0x93, 0xf3, 0xfc, 0x94, 0x1f, 0xf2, - 0xaf, 0x42, 0xf8, 0xe0, 0xfd, 0xb2, 0x24, 0x9f, 0x3a, 0x53, 0x16, 0x00, 0xbf, 0xb0, 0xa2, 0x99, - 0x2b, 0x81, 0xd8, 0xf2, 0x41, 0x50, 0x6b, 0xbe, 0x51, 0xce, 0x81, 0x75, 0x13, 0x8b, 0x27, 0x81, - 0x60, 0x3e, 0x6c, 0x10, 0x3e, 0x78, 0x19, 0x21, 0x76, 0xa6, 0xe0, 0xd3, 0xeb, 0xbc, 0xfe, 0xef, - 0x1a, 0xba, 0x73, 0x3f, 0x11, 0x54, 0xb0, 0xc0, 0x7d, 0x0c, 0xe3, 0x69, 0x18, 0xce, 0x8e, 0xc3, - 0xe0, 0x9c, 0xb9, 0x49, 0x61, 0x1b, 0x7f, 0x8b, 0x1a, 0xb2, 0xc8, 0x09, 0x15, 0xb4, 0xab, 0xf5, - 0xb4, 0x41, 0xeb, 0xf0, 0x5d, 0xb3, 0xec, 0xd5, 0x32, 0x97, 0x19, 0xcd, 0x5c, 0x09, 0xc4, 0xa6, - 0xbc, 0x6d, 0xce, 0x87, 0xe6, 0xc3, 0xf1, 0x77, 0xe0, 0x88, 0xfb, 0x20, 0xa8, 0x8d, 0x2f, 0x53, - 0xa3, 0x92, 0xa5, 0x06, 0x2a, 0x31, 0xb2, 0x54, 0xc5, 0x67, 0xa8, 0xa1, 0x32, 0xc7, 0xdd, 0x5b, - 0xbd, 0xea, 0xa0, 0x75, 0x38, 0x34, 0x77, 0xfd, 0x1b, 0xa6, 0x62, 0xda, 0x35, 0x99, 0x82, 0x34, - 0x9e, 0x28, 0xa1, 0xfe, 0xdf, 0x1a, 0xea, 0x6d, 0xf3, 0x75, 0xca, 0x62, 0x81, 0xbf, 0xd9, 0xf0, - 0x66, 0xee, 0xe6, 0x4d, 0xb2, 0x73, 0x67, 0xb7, 0x95, 0xb3, 0xc6, 0x02, 0x59, 0xf1, 0x35, 0x43, - 0x7b, 0x4c, 0x80, 0xbf, 0x30, 0x75, 0x6f, 0x77, 0x53, 0xdb, 0x0a, 0xb7, 0x3b, 0x2a, 0xe5, 0xde, - 0x89, 0x14, 0x27, 0x45, 0x8e, 0xfe, 0xcf, 0x1a, 0xaa, 0x91, 0xc4, 0x03, 0xfc, 0x0e, 0x6a, 0xd2, - 0x88, 0x7d, 0xc6, 0xc3, 0x24, 0x8a, 0xbb, 0x5a, 0xaf, 0x3a, 0x68, 0xda, 0x9d, 0x2c, 0x35, 0x9a, - 0x47, 0xa3, 0x93, 0x02, 0x24, 0x65, 0x1c, 0x0f, 0x51, 0x8b, 0x46, 0xec, 0x11, 0x70, 0x59, 0x4a, - 0x51, 0x68, 0xd3, 0x7e, 0x2d, 0x4b, 0x8d, 0xd6, 0xd1, 0xe8, 0x64, 0x01, 0x93, 0xd5, 0x3b, 0x52, - 0x9f, 0x43, 0x1c, 0x26, 0xdc, 0x81, 0xb8, 0x5b, 0x2d, 0xf5, 0xc9, 0x02, 0x24, 0x65, 0xbc, 0xff, - 0x8b, 0x86, 0xb0, 0xac, 0xea, 0x31, 0x13, 0xd3, 0x87, 0x11, 0x14, 0x0e, 0x62, 0xfc, 0x29, 0x42, - 0xe1, 0xf2, 0xa4, 0x8a, 0x34, 0xf2, 0xf9, 0x58, 0xa2, 0xcf, 0x53, 0xa3, 0xb3, 0x3c, 0x7d, 0x79, - 0x11, 0x01, 0x59, 0xa1, 0xe0, 0x11, 0xaa, 0xf1, 0xc4, 0x83, 0xee, 0xad, 0x8d, 0x9f, 0xf6, 0x92, - 0xce, 0xca, 0x62, 0xec, 0xb6, 0xea, 0x60, 0xde, 0x30, 0x92, 0x2b, 0xf5, 0x7f, 0xd4, 0xd0, 0xed, - 0x33, 0xe0, 0x73, 0xe6, 0x00, 0x81, 0x73, 0xe0, 0x10, 0x38, 0x80, 0x2d, 0xd4, 0x0c, 0xa8, 0x0f, - 0x71, 0x44, 0x1d, 0xc8, 0x07, 0xa4, 0x69, 0xef, 0x2b, 0x6e, 0xf3, 0xc1, 0x22, 0x40, 0xca, 0x3b, - 0xb8, 0x87, 0x6a, 0xf2, 0x90, 0xd7, 0xd5, 0x2c, 0xf3, 0xc8, 0xbb, 0x24, 0x8f, 0xe0, 0x3b, 0xa8, - 0x16, 0x51, 0x31, 0xed, 0x56, 0xf3, 0x1b, 0x0d, 0x19, 0x1d, 0x51, 0x31, 0x25, 0x39, 0xda, 0xff, - 0x43, 0x43, 0xfa, 0x23, 0xea, 0xb1, 0xc9, 0xff, 0x6e, 0x1f, 0xff, 0xd1, 0x50, 0x7f, 0xbb, 0xb3, - 0xff, 0x60, 0x23, 0xfd, 0xf5, 0x8d, 0xfc, 0x7c, 0x77, 0x5b, 0xdb, 0x4b, 0xbf, 0x61, 0x27, 0x7f, - 0xab, 0xa2, 0xba, 0xba, 0xbe, 0x9c, 0x0c, 0xed, 0xc6, 0xc9, 0x78, 0x82, 0xda, 0x8e, 0xc7, 0x20, - 0x10, 0x85, 0xb4, 0x9a, 0xed, 0x4f, 0x5e, 0xb9, 0xf5, 0xc7, 0x2b, 0x22, 0xf6, 0x1b, 0x2a, 0x51, - 0x7b, 0x15, 0x25, 0x6b, 0x89, 0x30, 0x45, 0x7b, 0x72, 0x05, 0x8a, 0x6d, 0x6e, 0x1d, 0x7e, 0xfc, - 0x6a, 0xdb, 0xb4, 0xbe, 0xda, 0x65, 0x27, 0x64, 0x2c, 0x26, 0x85, 0x32, 0x3e, 0x45, 0x9d, 0x73, - 0xca, 0xbc, 0x84, 0xc3, 0x28, 0xf4, 0x98, 0x73, 0xd1, 0xad, 0xe5, 0x6d, 0x78, 0x3b, 0x4b, 0x8d, - 0xce, 0xbd, 0xd5, 0xc0, 0xf3, 0xd4, 0xd8, 0x5f, 0x03, 0xf2, 0xd5, 0x5f, 0x27, 0xe3, 0xef, 0xd1, - 0xfe, 0x72, 0xe5, 0xce, 0xc0, 0x03, 0x47, 0x84, 0xbc, 0xbb, 0x97, 0xb7, 0xeb, 0xbd, 0x1d, 0xa7, - 0x85, 0x8e, 0xc1, 0x5b, 0x50, 0xed, 0x37, 0xb3, 0xd4, 0xd8, 0x7f, 0x70, 0x5d, 0x91, 0x6c, 0x26, - 0xe9, 0xff, 0xaa, 0xa1, 0xd7, 0x5f, 0xd0, 0x66, 0x4c, 0x51, 0x3d, 0x2e, 0x1e, 0x0f, 0x35, 0xb5, - 0x1f, 0xed, 0xde, 0xc4, 0xeb, 0xaf, 0x8e, 0xdd, 0xca, 0x52, 0xa3, 0xbe, 0x40, 0x17, 0xba, 0x78, - 0x80, 0x1a, 0x0e, 0xb5, 0x93, 0x60, 0xa2, 0x9e, 0xbd, 0xb6, 0xdd, 0x96, 0x53, 0x7e, 0x7c, 0x54, - 0x60, 0x64, 0x19, 0xc5, 0x6f, 0xa1, 0x6a, 0xc2, 0x3d, 0xf5, 0xc2, 0xd4, 0xb3, 0xd4, 0xa8, 0x7e, - 0x45, 0x4e, 0x89, 0xc4, 0xec, 0xbb, 0x97, 0x57, 0x7a, 0xe5, 0xe9, 0x95, 0x5e, 0x79, 0x76, 0xa5, - 0x57, 0x7e, 0xc8, 0x74, 0xed, 0x32, 0xd3, 0xb5, 0xa7, 0x99, 0xae, 0x3d, 0xcb, 0x74, 0xed, 0xcf, - 0x4c, 0xd7, 0x7e, 0xfa, 0x4b, 0xaf, 0x7c, 0x5d, 0x57, 0xa5, 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff, - 0xeb, 0x1f, 0xdb, 0x50, 0x68, 0x09, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -28,9 +28,160 @@ // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// MutatingWebhook describes an admission webhook and the resources and operations it applies to. +message MutatingWebhook { + // The name of the admission webhook. + // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where + // "imagepolicy" is the name of the webhook, and kubernetes.io is the name + // of the organization. + // Required. + optional string name = 1; + + // ClientConfig defines how to communicate with the hook. + // Required + optional WebhookClientConfig clientConfig = 2; + + // Rules describes what operations on what resources/subresources the webhook cares about. + // The webhook cares about an operation if it matches _any_ Rule. + // However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks + // from putting the cluster in a state which cannot be recovered from without completely + // disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called + // on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects. + repeated RuleWithOperations rules = 3; + + // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - + // allowed values are Ignore or Fail. Defaults to Ignore. + // +optional + optional string failurePolicy = 4; + + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Exact" + // +optional + optional string matchPolicy = 9; + + // NamespaceSelector decides whether to run the webhook on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the webhook. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the webhook on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 5; + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector objectSelector = 11; + + // SideEffects states whether this webhookk has side effects. + // Acceptable values are: Unknown, None, Some, NoneOnDryRun + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. Defaults to Unknown. + // +optional + optional string sideEffects = 6; + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 30 seconds. + // +optional + optional int32 timeoutSeconds = 7; + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + // Default to `['v1beta1']`. + // +optional + repeated string admissionReviewVersions = 8; + + // reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. + // Allowed values are "Never" and "IfNeeded". + // + // Never: the webhook will not be called more than once in a single admission evaluation. + // + // IfNeeded: the webhook will be called at least one additional time as part of the admission evaluation + // if the object being admitted is modified by other admission plugins after the initial webhook call. + // Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. + // Note: + // * the number of additional invocations is not guaranteed to be exactly one. + // * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. + // * webhooks that use this option may be reordered to minimize the number of additional invocations. + // * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead. + // + // Defaults to "Never". + // +optional + optional string reinvocationPolicy = 10; +} + // MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object. +// Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration instead. message MutatingWebhookConfiguration { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -38,13 +189,13 @@ // +optional // +patchMergeKey=name // +patchStrategy=merge - repeated Webhook Webhooks = 2; + repeated MutatingWebhook Webhooks = 2; } // MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration. message MutatingWebhookConfigurationList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -66,7 +217,7 @@ repeated string apiVersions = 2; // Resources is a list of resources this rule applies to. - // + // // For example: // 'pods' means pods. // 'pods/log' means the log subresource of pods. @@ -74,13 +225,25 @@ // 'pods/*' means all subresources of pods. // '*/scale' means all scale subresources. // '*/*' means all resources and their subresources. - // + // // If wildcard is present, the validation rule will ensure resources do not // overlap with each other. - // + // // Depending on the enclosing object, subresources might not be allowed. // Required. repeated string resources = 3; + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + optional string scope = 4; } // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make @@ -111,34 +274,16 @@ // this service. // +optional optional string path = 3; -} - -// ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. -message ValidatingWebhookConfiguration { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - - // Webhooks is a list of webhooks and the affected resources and operations. - // +optional - // +patchMergeKey=name - // +patchStrategy=merge - repeated Webhook Webhooks = 2; -} -// ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration. -message ValidatingWebhookConfigurationList { - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // If specified, the port on the service that hosting webhook. + // Default to 443 for backward compatibility. + // `port` should be a valid port number (1-65535, inclusive). // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; - - // List of ValidatingWebhookConfiguration. - repeated ValidatingWebhookConfiguration items = 2; + optional int32 port = 4; } -// Webhook describes an admission webhook and the resources and operations it applies to. -message Webhook { +// ValidatingWebhook describes an admission webhook and the resources and operations it applies to. +message ValidatingWebhook { // The name of the admission webhook. // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where // "imagepolicy" is the name of the webhook, and kubernetes.io is the name @@ -163,12 +308,29 @@ // +optional optional string failurePolicy = 4; + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Exact" + // +optional + optional string matchPolicy = 9; + // NamespaceSelector decides whether to run the webhook on an object based // on whether the namespace for that object matches the selector. If the // object itself is a namespace, the matching is performed on // object.metadata.labels. If the object is another cluster scoped resource, // it never skips the webhook. - // + // // For example, to run the webhook on any objects whose namespace is not // associated with "runlevel" of "0" or "1"; you will set the selector as // follows: @@ -184,7 +346,7 @@ // } // ] // } - // + // // If instead you want to only run the webhook on any objects whose // namespace is associated with the "environment" of "prod" or "staging"; // you will set the selector as follows: @@ -200,61 +362,126 @@ // } // ] // } - // + // // See - // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels // for more examples of label selectors. - // + // // Default to the empty LabelSelector, which matches everything. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector namespaceSelector = 5; + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector objectSelector = 10; + + // SideEffects states whether this webhookk has side effects. + // Acceptable values are: Unknown, None, Some, NoneOnDryRun + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. Defaults to Unknown. + // +optional + optional string sideEffects = 6; + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 30 seconds. + // +optional + optional int32 timeoutSeconds = 7; + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + // Default to `['v1beta1']`. + // +optional + repeated string admissionReviewVersions = 8; +} + +// ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. +// Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration instead. +message ValidatingWebhookConfiguration { + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Webhooks is a list of webhooks and the affected resources and operations. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + repeated ValidatingWebhook Webhooks = 2; +} + +// ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration. +message ValidatingWebhookConfigurationList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of ValidatingWebhookConfiguration. + repeated ValidatingWebhookConfiguration items = 2; } // WebhookClientConfig contains the information to make a TLS // connection with the webhook message WebhookClientConfig { // `url` gives the location of the webhook, in standard URL form - // (`[scheme://]host:port/path`). Exactly one of `url` or `service` + // (`scheme://host:port/path`). Exactly one of `url` or `service` // must be specified. - // + // // The `host` should not refer to a service running in the cluster; use // the `service` field instead. The host might be resolved via external // DNS in some apiservers (e.g., `kube-apiserver` cannot resolve // in-cluster DNS as that would be a layering violation). `host` may // also be an IP address. - // + // // Please note that using `localhost` or `127.0.0.1` as a `host` is // risky unless you take great care to run this webhook on all hosts // which run an apiserver which might need to make calls to this // webhook. Such installs are likely to be non-portable, i.e., not easy // to turn up in a new cluster. - // + // // The scheme must be "https"; the URL must begin with "https://". - // + // // A path is optional, and if present may be any string permissible in // a URL. You may use the path to pass an arbitrary string to the // webhook, for example, a cluster identifier. - // + // // Attempting to use a user or basic auth e.g. "user:password@" is not // allowed. Fragments ("#...") and query parameters ("?...") are not // allowed, either. - // + // // +optional optional string url = 3; // `service` is a reference to the service for this webhook. Either // `service` or `url` must be specified. - // + // // If the webhook is running within the cluster, then you should use `service`. - // - // Port 443 will be used if it is open, otherwise it is an error. - // + // // +optional optional ServiceReference service = 1; - // `caBundle` is a PEM encoded CA bundle which will be used to validate - // the webhook's server certificate. - // Required. + // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. + // If unspecified, system trust roots on the apiserver are used. + // +optional optional bytes caBundle = 2; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -49,8 +49,32 @@ // Depending on the enclosing object, subresources might not be allowed. // Required. Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` + + // scope specifies the scope of this rule. + // Valid values are "Cluster", "Namespaced", and "*" + // "Cluster" means that only cluster-scoped resources will match this rule. + // Namespace API objects are cluster-scoped. + // "Namespaced" means that only namespaced resources will match this rule. + // "*" means that there are no scope restrictions. + // Subresources match the scope of their parent resource. + // Default is "*". + // + // +optional + Scope *ScopeType `json:"scope,omitempty" protobuf:"bytes,4,rep,name=scope"` } +type ScopeType string + +const ( + // ClusterScope means that scope is limited to cluster-scoped objects. + // Namespace objects are cluster-scoped. + ClusterScope ScopeType = "Cluster" + // NamespacedScope means that scope is limited to namespaced objects. + NamespacedScope ScopeType = "Namespaced" + // AllScopes means that all scopes are included. + AllScopes ScopeType = "*" +) + type FailurePolicyType string const ( @@ -60,21 +84,48 @@ Fail FailurePolicyType = "Fail" ) +// MatchPolicyType specifies the type of match policy +type MatchPolicyType string + +const ( + // Exact means requests should only be sent to the webhook if they exactly match a given rule + Exact MatchPolicyType = "Exact" + // Equivalent means requests should be sent to the webhook if they modify a resource listed in rules via another API group or version. + Equivalent MatchPolicyType = "Equivalent" +) + +type SideEffectClass string + +const ( + // SideEffectClassUnknown means that no information is known about the side effects of calling the webhook. + // If a request with the dry-run attribute would trigger a call to this webhook, the request will instead fail. + SideEffectClassUnknown SideEffectClass = "Unknown" + // SideEffectClassNone means that calling the webhook will have no side effects. + SideEffectClassNone SideEffectClass = "None" + // SideEffectClassSome means that calling the webhook will possibly have side effects. + // If a request with the dry-run attribute would trigger a call to this webhook, the request will instead fail. + SideEffectClassSome SideEffectClass = "Some" + // SideEffectClassNoneOnDryRun means that calling the webhook will possibly have side effects, but if the + // request being reviewed has the dry-run attribute, the side effects will be suppressed. + SideEffectClassNoneOnDryRun SideEffectClass = "NoneOnDryRun" +) + // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. +// Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration instead. type ValidatingWebhookConfiguration struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Webhooks is a list of webhooks and the affected resources and operations. // +optional // +patchMergeKey=name // +patchStrategy=merge - Webhooks []Webhook `json:"webhooks,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=Webhooks"` + Webhooks []ValidatingWebhook `json:"webhooks,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=Webhooks"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -83,7 +134,7 @@ type ValidatingWebhookConfigurationList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of ValidatingWebhookConfiguration. @@ -95,16 +146,17 @@ // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object. +// Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration instead. type MutatingWebhookConfiguration struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Webhooks is a list of webhooks and the affected resources and operations. // +optional // +patchMergeKey=name // +patchStrategy=merge - Webhooks []Webhook `json:"webhooks,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=Webhooks"` + Webhooks []MutatingWebhook `json:"webhooks,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=Webhooks"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -113,15 +165,15 @@ type MutatingWebhookConfigurationList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of MutatingWebhookConfiguration. Items []MutatingWebhookConfiguration `json:"items" protobuf:"bytes,2,rep,name=items"` } -// Webhook describes an admission webhook and the resources and operations it applies to. -type Webhook struct { +// ValidatingWebhook describes an admission webhook and the resources and operations it applies to. +type ValidatingWebhook struct { // The name of the admission webhook. // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where // "imagepolicy" is the name of the webhook, and kubernetes.io is the name @@ -146,6 +198,155 @@ // +optional FailurePolicy *FailurePolicyType `json:"failurePolicy,omitempty" protobuf:"bytes,4,opt,name=failurePolicy,casttype=FailurePolicyType"` + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Exact" + // +optional + MatchPolicy *MatchPolicyType `json:"matchPolicy,omitempty" protobuf:"bytes,9,opt,name=matchPolicy,casttype=MatchPolicyType"` + + // NamespaceSelector decides whether to run the webhook on an object based + // on whether the namespace for that object matches the selector. If the + // object itself is a namespace, the matching is performed on + // object.metadata.labels. If the object is another cluster scoped resource, + // it never skips the webhook. + // + // For example, to run the webhook on any objects whose namespace is not + // associated with "runlevel" of "0" or "1"; you will set the selector as + // follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "runlevel", + // "operator": "NotIn", + // "values": [ + // "0", + // "1" + // ] + // } + // ] + // } + // + // If instead you want to only run the webhook on any objects whose + // namespace is associated with the "environment" of "prod" or "staging"; + // you will set the selector as follows: + // "namespaceSelector": { + // "matchExpressions": [ + // { + // "key": "environment", + // "operator": "In", + // "values": [ + // "prod", + // "staging" + // ] + // } + // ] + // } + // + // See + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + // for more examples of label selectors. + // + // Default to the empty LabelSelector, which matches everything. + // +optional + NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,5,opt,name=namespaceSelector"` + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + ObjectSelector *metav1.LabelSelector `json:"objectSelector,omitempty" protobuf:"bytes,10,opt,name=objectSelector"` + + // SideEffects states whether this webhookk has side effects. + // Acceptable values are: Unknown, None, Some, NoneOnDryRun + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. Defaults to Unknown. + // +optional + SideEffects *SideEffectClass `json:"sideEffects,omitempty" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 30 seconds. + // +optional + TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,7,opt,name=timeoutSeconds"` + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + // Default to `['v1beta1']`. + // +optional + AdmissionReviewVersions []string `json:"admissionReviewVersions,omitempty" protobuf:"bytes,8,rep,name=admissionReviewVersions"` +} + +// MutatingWebhook describes an admission webhook and the resources and operations it applies to. +type MutatingWebhook struct { + // The name of the admission webhook. + // Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where + // "imagepolicy" is the name of the webhook, and kubernetes.io is the name + // of the organization. + // Required. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // ClientConfig defines how to communicate with the hook. + // Required + ClientConfig WebhookClientConfig `json:"clientConfig" protobuf:"bytes,2,opt,name=clientConfig"` + + // Rules describes what operations on what resources/subresources the webhook cares about. + // The webhook cares about an operation if it matches _any_ Rule. + // However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks + // from putting the cluster in a state which cannot be recovered from without completely + // disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called + // on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects. + Rules []RuleWithOperations `json:"rules,omitempty" protobuf:"bytes,3,rep,name=rules"` + + // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - + // allowed values are Ignore or Fail. Defaults to Ignore. + // +optional + FailurePolicy *FailurePolicyType `json:"failurePolicy,omitempty" protobuf:"bytes,4,opt,name=failurePolicy,casttype=FailurePolicyType"` + + // matchPolicy defines how the "rules" list is used to match incoming requests. + // Allowed values are "Exact" or "Equivalent". + // + // - Exact: match a request only if it exactly matches a specified rule. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // but "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook. + // + // - Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. + // For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, + // and "rules" only included `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`, + // a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook. + // + // Defaults to "Exact" + // +optional + MatchPolicy *MatchPolicyType `json:"matchPolicy,omitempty" protobuf:"bytes,9,opt,name=matchPolicy,casttype=MatchPolicyType"` + // NamespaceSelector decides whether to run the webhook on an object based // on whether the namespace for that object matches the selector. If the // object itself is a namespace, the matching is performed on @@ -191,8 +392,81 @@ // Default to the empty LabelSelector, which matches everything. // +optional NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,5,opt,name=namespaceSelector"` + + // ObjectSelector decides whether to run the webhook based on if the + // object has matching labels. objectSelector is evaluated against both + // the oldObject and newObject that would be sent to the webhook, and + // is considered to match if either object matches the selector. A null + // object (oldObject in the case of create, or newObject in the case of + // delete) or an object that cannot have labels (like a + // DeploymentRollback or a PodProxyOptions object) is not considered to + // match. + // Use the object selector only if the webhook is opt-in, because end + // users may skip the admission webhook by setting the labels. + // Default to the empty LabelSelector, which matches everything. + // +optional + ObjectSelector *metav1.LabelSelector `json:"objectSelector,omitempty" protobuf:"bytes,11,opt,name=objectSelector"` + + // SideEffects states whether this webhookk has side effects. + // Acceptable values are: Unknown, None, Some, NoneOnDryRun + // Webhooks with side effects MUST implement a reconciliation system, since a request may be + // rejected by a future step in the admission change and the side effects therefore need to be undone. + // Requests with the dryRun attribute will be auto-rejected if they match a webhook with + // sideEffects == Unknown or Some. Defaults to Unknown. + // +optional + SideEffects *SideEffectClass `json:"sideEffects,omitempty" protobuf:"bytes,6,opt,name=sideEffects,casttype=SideEffectClass"` + + // TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, + // the webhook call will be ignored or the API call will fail based on the + // failure policy. + // The timeout value must be between 1 and 30 seconds. + // Default to 30 seconds. + // +optional + TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,7,opt,name=timeoutSeconds"` + + // AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` + // versions the Webhook expects. API server will try to use first version in + // the list which it supports. If none of the versions specified in this list + // supported by API server, validation will fail for this object. + // If a persisted webhook configuration specifies allowed versions and does not + // include any versions known to the API Server, calls to the webhook will fail + // and be subject to the failure policy. + // Default to `['v1beta1']`. + // +optional + AdmissionReviewVersions []string `json:"admissionReviewVersions,omitempty" protobuf:"bytes,8,rep,name=admissionReviewVersions"` + + // reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. + // Allowed values are "Never" and "IfNeeded". + // + // Never: the webhook will not be called more than once in a single admission evaluation. + // + // IfNeeded: the webhook will be called at least one additional time as part of the admission evaluation + // if the object being admitted is modified by other admission plugins after the initial webhook call. + // Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. + // Note: + // * the number of additional invocations is not guaranteed to be exactly one. + // * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. + // * webhooks that use this option may be reordered to minimize the number of additional invocations. + // * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead. + // + // Defaults to "Never". + // +optional + ReinvocationPolicy *ReinvocationPolicyType `json:"reinvocationPolicy,omitempty" protobuf:"bytes,10,opt,name=reinvocationPolicy,casttype=ReinvocationPolicyType"` } +// ReinvocationPolicyType specifies what type of policy the admission hook uses. +type ReinvocationPolicyType string + +const ( + // NeverReinvocationPolicy indicates that the webhook must not be called more than once in a + // single admission evaluation. + NeverReinvocationPolicy ReinvocationPolicyType = "Never" + // IfNeededReinvocationPolicy indicates that the webhook may be called at least one + // additional time as part of the admission evaluation if the object being admitted is + // modified by other admission plugins after the initial webhook call. + IfNeededReinvocationPolicy ReinvocationPolicyType = "IfNeeded" +) + // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make // sure that all the tuple expansions are valid. type RuleWithOperations struct { @@ -221,7 +495,7 @@ // connection with the webhook type WebhookClientConfig struct { // `url` gives the location of the webhook, in standard URL form - // (`[scheme://]host:port/path`). Exactly one of `url` or `service` + // (`scheme://host:port/path`). Exactly one of `url` or `service` // must be specified. // // The `host` should not refer to a service running in the cluster; use @@ -254,15 +528,13 @@ // // If the webhook is running within the cluster, then you should use `service`. // - // Port 443 will be used if it is open, otherwise it is an error. - // // +optional - Service *ServiceReference `json:"service" protobuf:"bytes,1,opt,name=service"` + Service *ServiceReference `json:"service,omitempty" protobuf:"bytes,1,opt,name=service"` - // `caBundle` is a PEM encoded CA bundle which will be used to validate - // the webhook's server certificate. - // Required. - CABundle []byte `json:"caBundle" protobuf:"bytes,2,opt,name=caBundle"` + // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. + // If unspecified, system trust roots on the apiserver are used. + // +optional + CABundle []byte `json:"caBundle,omitempty" protobuf:"bytes,2,opt,name=caBundle"` } // ServiceReference holds a reference to Service.legacy.k8s.io @@ -278,4 +550,10 @@ // this service. // +optional Path *string `json:"path,omitempty" protobuf:"bytes,3,opt,name=path"` + + // If specified, the port on the service that hosting webhook. + // Default to 443 for backward compatibility. + // `port` should be a valid port number (1-65535, inclusive). + // +optional + Port *int32 `json:"port,omitempty" protobuf:"varint,4,opt,name=port"` } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,9 +27,28 @@ // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_MutatingWebhook = map[string]string{ + "": "MutatingWebhook describes an admission webhook and the resources and operations it applies to.", + "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + "clientConfig": "ClientConfig defines how to communicate with the hook. Required", + "rules": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + "failurePolicy": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", + "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Exact\"", + "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + "sideEffects": "SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", + "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", + "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", + "reinvocationPolicy": "reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. Allowed values are \"Never\" and \"IfNeeded\".\n\nNever: the webhook will not be called more than once in a single admission evaluation.\n\nIfNeeded: the webhook will be called at least one additional time as part of the admission evaluation if the object being admitted is modified by other admission plugins after the initial webhook call. Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. Note: * the number of additional invocations is not guaranteed to be exactly one. * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. * webhooks that use this option may be reordered to minimize the number of additional invocations. * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead.\n\nDefaults to \"Never\".", +} + +func (MutatingWebhook) SwaggerDoc() map[string]string { + return map_MutatingWebhook +} + var map_MutatingWebhookConfiguration = map[string]string{ - "": "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", + "": "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object. Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration instead.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", "webhooks": "Webhooks is a list of webhooks and the affected resources and operations.", } @@ -39,7 +58,7 @@ var map_MutatingWebhookConfigurationList = map[string]string{ "": "MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of MutatingWebhookConfiguration.", } @@ -52,6 +71,7 @@ "apiGroups": "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", "apiVersions": "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", "resources": "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", + "scope": "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", } func (Rule) SwaggerDoc() map[string]string { @@ -72,15 +92,34 @@ "namespace": "`namespace` is the namespace of the service. Required", "name": "`name` is the name of the service. Required", "path": "`path` is an optional URL path which will be sent in any request to this service.", + "port": "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", } func (ServiceReference) SwaggerDoc() map[string]string { return map_ServiceReference } +var map_ValidatingWebhook = map[string]string{ + "": "ValidatingWebhook describes an admission webhook and the resources and operations it applies to.", + "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + "clientConfig": "ClientConfig defines how to communicate with the hook. Required", + "rules": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + "failurePolicy": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", + "matchPolicy": "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Exact\"", + "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + "objectSelector": "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + "sideEffects": "SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", + "timeoutSeconds": "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", + "admissionReviewVersions": "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", +} + +func (ValidatingWebhook) SwaggerDoc() map[string]string { + return map_ValidatingWebhook +} + var map_ValidatingWebhookConfiguration = map[string]string{ - "": "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", + "": "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration instead.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", "webhooks": "Webhooks is a list of webhooks and the affected resources and operations.", } @@ -90,7 +129,7 @@ var map_ValidatingWebhookConfigurationList = map[string]string{ "": "ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of ValidatingWebhookConfiguration.", } @@ -98,24 +137,11 @@ return map_ValidatingWebhookConfigurationList } -var map_Webhook = map[string]string{ - "": "Webhook describes an admission webhook and the resources and operations it applies to.", - "name": "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", - "clientConfig": "ClientConfig defines how to communicate with the hook. Required", - "rules": "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", - "failurePolicy": "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", - "namespaceSelector": "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", -} - -func (Webhook) SwaggerDoc() map[string]string { - return map_Webhook -} - var map_WebhookClientConfig = map[string]string{ "": "WebhookClientConfig contains the information to make a TLS connection with the webhook", - "url": "`url` gives the location of the webhook, in standard URL form (`[scheme://]host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", - "service": "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.", - "caBundle": "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. Required.", + "url": "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + "service": "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + "caBundle": "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", } func (WebhookClientConfig) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,13 +26,77 @@ ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MutatingWebhook) DeepCopyInto(out *MutatingWebhook) { + *out = *in + in.ClientConfig.DeepCopyInto(&out.ClientConfig) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]RuleWithOperations, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.FailurePolicy != nil { + in, out := &in.FailurePolicy, &out.FailurePolicy + *out = new(FailurePolicyType) + **out = **in + } + if in.MatchPolicy != nil { + in, out := &in.MatchPolicy, &out.MatchPolicy + *out = new(MatchPolicyType) + **out = **in + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ObjectSelector != nil { + in, out := &in.ObjectSelector, &out.ObjectSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.SideEffects != nil { + in, out := &in.SideEffects, &out.SideEffects + *out = new(SideEffectClass) + **out = **in + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AdmissionReviewVersions != nil { + in, out := &in.AdmissionReviewVersions, &out.AdmissionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ReinvocationPolicy != nil { + in, out := &in.ReinvocationPolicy, &out.ReinvocationPolicy + *out = new(ReinvocationPolicyType) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MutatingWebhook. +func (in *MutatingWebhook) DeepCopy() *MutatingWebhook { + if in == nil { + return nil + } + out := new(MutatingWebhook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MutatingWebhookConfiguration) DeepCopyInto(out *MutatingWebhookConfiguration) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) if in.Webhooks != nil { in, out := &in.Webhooks, &out.Webhooks - *out = make([]Webhook, len(*in)) + *out = make([]MutatingWebhook, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -62,7 +126,7 @@ func (in *MutatingWebhookConfigurationList) DeepCopyInto(out *MutatingWebhookConfigurationList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]MutatingWebhookConfiguration, len(*in)) @@ -109,6 +173,11 @@ *out = make([]string, len(*in)) copy(*out, *in) } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(ScopeType) + **out = **in + } return } @@ -149,12 +218,13 @@ *out = *in if in.Path != nil { in, out := &in.Path, &out.Path - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(int32) + **out = **in } return } @@ -170,13 +240,72 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValidatingWebhook) DeepCopyInto(out *ValidatingWebhook) { + *out = *in + in.ClientConfig.DeepCopyInto(&out.ClientConfig) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]RuleWithOperations, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.FailurePolicy != nil { + in, out := &in.FailurePolicy, &out.FailurePolicy + *out = new(FailurePolicyType) + **out = **in + } + if in.MatchPolicy != nil { + in, out := &in.MatchPolicy, &out.MatchPolicy + *out = new(MatchPolicyType) + **out = **in + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ObjectSelector != nil { + in, out := &in.ObjectSelector, &out.ObjectSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.SideEffects != nil { + in, out := &in.SideEffects, &out.SideEffects + *out = new(SideEffectClass) + **out = **in + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AdmissionReviewVersions != nil { + in, out := &in.AdmissionReviewVersions, &out.AdmissionReviewVersions + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValidatingWebhook. +func (in *ValidatingWebhook) DeepCopy() *ValidatingWebhook { + if in == nil { + return nil + } + out := new(ValidatingWebhook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ValidatingWebhookConfiguration) DeepCopyInto(out *ValidatingWebhookConfiguration) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) if in.Webhooks != nil { in, out := &in.Webhooks, &out.Webhooks - *out = make([]Webhook, len(*in)) + *out = make([]ValidatingWebhook, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -206,7 +335,7 @@ func (in *ValidatingWebhookConfigurationList) DeepCopyInto(out *ValidatingWebhookConfigurationList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ValidatingWebhookConfiguration, len(*in)) @@ -236,67 +365,17 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Webhook) DeepCopyInto(out *Webhook) { - *out = *in - in.ClientConfig.DeepCopyInto(&out.ClientConfig) - if in.Rules != nil { - in, out := &in.Rules, &out.Rules - *out = make([]RuleWithOperations, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.FailurePolicy != nil { - in, out := &in.FailurePolicy, &out.FailurePolicy - if *in == nil { - *out = nil - } else { - *out = new(FailurePolicyType) - **out = **in - } - } - if in.NamespaceSelector != nil { - in, out := &in.NamespaceSelector, &out.NamespaceSelector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Webhook. -func (in *Webhook) DeepCopy() *Webhook { - if in == nil { - return nil - } - out := new(Webhook) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *WebhookClientConfig) DeepCopyInto(out *WebhookClientConfig) { *out = *in if in.URL != nil { in, out := &in.URL, &out.URL - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } if in.Service != nil { in, out := &in.Service, &out.Service - if *in == nil { - *out = nil - } else { - *out = new(ServiceReference) - (*in).DeepCopyInto(*out) - } + *out = new(ServiceReference) + (*in).DeepCopyInto(*out) } if in.CABundle != nil { in, out := &in.CABundle, &out.CABundle diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1 // import "k8s.io/api/apps/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,61 +14,28 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto - - It has these top-level messages: - ControllerRevision - ControllerRevisionList - DaemonSet - DaemonSetCondition - DaemonSetList - DaemonSetSpec - DaemonSetStatus - DaemonSetUpdateStrategy - Deployment - DeploymentCondition - DeploymentList - DeploymentSpec - DeploymentStatus - DeploymentStrategy - ReplicaSet - ReplicaSetCondition - ReplicaSetList - ReplicaSetSpec - ReplicaSetStatus - RollingUpdateDaemonSet - RollingUpdateDeployment - RollingUpdateStatefulSetStrategy - StatefulSet - StatefulSetCondition - StatefulSetList - StatefulSetSpec - StatefulSetStatus - StatefulSetUpdateStrategy -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" + proto "github.com/gogo/protobuf/proto" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import strings "strings" -import reflect "reflect" - -import io "io" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -81,124 +48,790 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *ControllerRevision) Reset() { *m = ControllerRevision{} } -func (*ControllerRevision) ProtoMessage() {} -func (*ControllerRevision) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ControllerRevisionList) Reset() { *m = ControllerRevisionList{} } -func (*ControllerRevisionList) ProtoMessage() {} -func (*ControllerRevisionList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *DaemonSet) Reset() { *m = DaemonSet{} } -func (*DaemonSet) ProtoMessage() {} -func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } -func (*DaemonSetCondition) ProtoMessage() {} -func (*DaemonSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } -func (*DaemonSetList) ProtoMessage() {} -func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } -func (*DaemonSetSpec) ProtoMessage() {} -func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } -func (*DaemonSetStatus) ProtoMessage() {} -func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } -func (*DaemonSetUpdateStrategy) ProtoMessage() {} -func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *Deployment) Reset() { *m = Deployment{} } -func (*Deployment) ProtoMessage() {} -func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } -func (*DeploymentCondition) ProtoMessage() {} -func (*DeploymentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } - -func (m *DeploymentList) Reset() { *m = DeploymentList{} } -func (*DeploymentList) ProtoMessage() {} -func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } - -func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } -func (*DeploymentSpec) ProtoMessage() {} -func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } - -func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } -func (*DeploymentStatus) ProtoMessage() {} -func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } - -func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } -func (*DeploymentStrategy) ProtoMessage() {} -func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } - -func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } -func (*ReplicaSet) ProtoMessage() {} -func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } - -func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } -func (*ReplicaSetCondition) ProtoMessage() {} -func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } - -func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } -func (*ReplicaSetList) ProtoMessage() {} -func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } - -func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } -func (*ReplicaSetSpec) ProtoMessage() {} -func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } - -func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } -func (*ReplicaSetStatus) ProtoMessage() {} -func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } - -func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } -func (*RollingUpdateDaemonSet) ProtoMessage() {} -func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +func (m *ControllerRevision) Reset() { *m = ControllerRevision{} } +func (*ControllerRevision) ProtoMessage() {} +func (*ControllerRevision) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{0} +} +func (m *ControllerRevision) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerRevision) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerRevision) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerRevision.Merge(m, src) +} +func (m *ControllerRevision) XXX_Size() int { + return m.Size() +} +func (m *ControllerRevision) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerRevision.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerRevision proto.InternalMessageInfo + +func (m *ControllerRevisionList) Reset() { *m = ControllerRevisionList{} } +func (*ControllerRevisionList) ProtoMessage() {} +func (*ControllerRevisionList) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{1} +} +func (m *ControllerRevisionList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerRevisionList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerRevisionList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerRevisionList.Merge(m, src) +} +func (m *ControllerRevisionList) XXX_Size() int { + return m.Size() +} +func (m *ControllerRevisionList) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerRevisionList.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerRevisionList proto.InternalMessageInfo + +func (m *DaemonSet) Reset() { *m = DaemonSet{} } +func (*DaemonSet) ProtoMessage() {} +func (*DaemonSet) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{2} +} +func (m *DaemonSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSet.Merge(m, src) +} +func (m *DaemonSet) XXX_Size() int { + return m.Size() +} +func (m *DaemonSet) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSet.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSet proto.InternalMessageInfo + +func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } +func (*DaemonSetCondition) ProtoMessage() {} +func (*DaemonSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{3} +} +func (m *DaemonSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetCondition.Merge(m, src) +} +func (m *DaemonSetCondition) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetCondition proto.InternalMessageInfo + +func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } +func (*DaemonSetList) ProtoMessage() {} +func (*DaemonSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{4} +} +func (m *DaemonSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetList.Merge(m, src) +} +func (m *DaemonSetList) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetList) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetList proto.InternalMessageInfo + +func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } +func (*DaemonSetSpec) ProtoMessage() {} +func (*DaemonSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{5} +} +func (m *DaemonSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetSpec.Merge(m, src) +} +func (m *DaemonSetSpec) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetSpec proto.InternalMessageInfo + +func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } +func (*DaemonSetStatus) ProtoMessage() {} +func (*DaemonSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{6} +} +func (m *DaemonSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetStatus.Merge(m, src) +} +func (m *DaemonSetStatus) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetStatus proto.InternalMessageInfo + +func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } +func (*DaemonSetUpdateStrategy) ProtoMessage() {} +func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{7} +} +func (m *DaemonSetUpdateStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetUpdateStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetUpdateStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetUpdateStrategy.Merge(m, src) +} +func (m *DaemonSetUpdateStrategy) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetUpdateStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetUpdateStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetUpdateStrategy proto.InternalMessageInfo + +func (m *Deployment) Reset() { *m = Deployment{} } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{8} +} +func (m *Deployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Deployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Deployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_Deployment.Merge(m, src) +} +func (m *Deployment) XXX_Size() int { + return m.Size() +} +func (m *Deployment) XXX_DiscardUnknown() { + xxx_messageInfo_Deployment.DiscardUnknown(m) +} + +var xxx_messageInfo_Deployment proto.InternalMessageInfo + +func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } +func (*DeploymentCondition) ProtoMessage() {} +func (*DeploymentCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{9} +} +func (m *DeploymentCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCondition.Merge(m, src) +} +func (m *DeploymentCondition) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentCondition proto.InternalMessageInfo + +func (m *DeploymentList) Reset() { *m = DeploymentList{} } +func (*DeploymentList) ProtoMessage() {} +func (*DeploymentList) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{10} +} +func (m *DeploymentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentList.Merge(m, src) +} +func (m *DeploymentList) XXX_Size() int { + return m.Size() +} +func (m *DeploymentList) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentList.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentList proto.InternalMessageInfo + +func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } +func (*DeploymentSpec) ProtoMessage() {} +func (*DeploymentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{11} +} +func (m *DeploymentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentSpec.Merge(m, src) +} +func (m *DeploymentSpec) XXX_Size() int { + return m.Size() +} +func (m *DeploymentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentSpec proto.InternalMessageInfo + +func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } +func (*DeploymentStatus) ProtoMessage() {} +func (*DeploymentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{12} +} +func (m *DeploymentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStatus.Merge(m, src) +} +func (m *DeploymentStatus) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStatus proto.InternalMessageInfo + +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{13} +} +func (m *DeploymentStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStrategy.Merge(m, src) +} +func (m *DeploymentStrategy) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStrategy proto.InternalMessageInfo + +func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } +func (*ReplicaSet) ProtoMessage() {} +func (*ReplicaSet) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{14} +} +func (m *ReplicaSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSet.Merge(m, src) +} +func (m *ReplicaSet) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSet) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSet.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSet proto.InternalMessageInfo + +func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } +func (*ReplicaSetCondition) ProtoMessage() {} +func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{15} +} +func (m *ReplicaSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetCondition.Merge(m, src) +} +func (m *ReplicaSetCondition) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetCondition proto.InternalMessageInfo + +func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } +func (*ReplicaSetList) ProtoMessage() {} +func (*ReplicaSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{16} +} +func (m *ReplicaSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetList.Merge(m, src) +} +func (m *ReplicaSetList) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetList) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetList proto.InternalMessageInfo + +func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } +func (*ReplicaSetSpec) ProtoMessage() {} +func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{17} +} +func (m *ReplicaSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetSpec.Merge(m, src) +} +func (m *ReplicaSetSpec) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetSpec proto.InternalMessageInfo + +func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } +func (*ReplicaSetStatus) ProtoMessage() {} +func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{18} +} +func (m *ReplicaSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetStatus.Merge(m, src) +} +func (m *ReplicaSetStatus) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetStatus proto.InternalMessageInfo + +func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } +func (*RollingUpdateDaemonSet) ProtoMessage() {} +func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{19} +} +func (m *RollingUpdateDaemonSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateDaemonSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDaemonSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDaemonSet.Merge(m, src) +} +func (m *RollingUpdateDaemonSet) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateDaemonSet) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDaemonSet.DiscardUnknown(m) +} + +var xxx_messageInfo_RollingUpdateDaemonSet proto.InternalMessageInfo func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } func (*RollingUpdateDeployment) ProtoMessage() {} func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{20} + return fileDescriptor_e1014cab6f31e43b, []int{20} +} +func (m *RollingUpdateDeployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateDeployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDeployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDeployment.Merge(m, src) +} +func (m *RollingUpdateDeployment) XXX_Size() int { + return m.Size() } +func (m *RollingUpdateDeployment) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDeployment.DiscardUnknown(m) +} + +var xxx_messageInfo_RollingUpdateDeployment proto.InternalMessageInfo func (m *RollingUpdateStatefulSetStrategy) Reset() { *m = RollingUpdateStatefulSetStrategy{} } func (*RollingUpdateStatefulSetStrategy) ProtoMessage() {} func (*RollingUpdateStatefulSetStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{21} + return fileDescriptor_e1014cab6f31e43b, []int{21} +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateStatefulSetStrategy.Merge(m, src) +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateStatefulSetStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateStatefulSetStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_RollingUpdateStatefulSetStrategy proto.InternalMessageInfo + +func (m *StatefulSet) Reset() { *m = StatefulSet{} } +func (*StatefulSet) ProtoMessage() {} +func (*StatefulSet) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{22} +} +func (m *StatefulSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSet.Merge(m, src) +} +func (m *StatefulSet) XXX_Size() int { + return m.Size() +} +func (m *StatefulSet) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSet.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSet proto.InternalMessageInfo + +func (m *StatefulSetCondition) Reset() { *m = StatefulSetCondition{} } +func (*StatefulSetCondition) ProtoMessage() {} +func (*StatefulSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{23} +} +func (m *StatefulSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetCondition.Merge(m, src) +} +func (m *StatefulSetCondition) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetCondition proto.InternalMessageInfo + +func (m *StatefulSetList) Reset() { *m = StatefulSetList{} } +func (*StatefulSetList) ProtoMessage() {} +func (*StatefulSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{24} +} +func (m *StatefulSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetList.Merge(m, src) +} +func (m *StatefulSetList) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetList) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetList proto.InternalMessageInfo + +func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } +func (*StatefulSetSpec) ProtoMessage() {} +func (*StatefulSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{25} +} +func (m *StatefulSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetSpec.Merge(m, src) +} +func (m *StatefulSetSpec) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetSpec proto.InternalMessageInfo + +func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } +func (*StatefulSetStatus) ProtoMessage() {} +func (*StatefulSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_e1014cab6f31e43b, []int{26} +} +func (m *StatefulSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetStatus.Merge(m, src) +} +func (m *StatefulSetStatus) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetStatus.DiscardUnknown(m) } -func (m *StatefulSet) Reset() { *m = StatefulSet{} } -func (*StatefulSet) ProtoMessage() {} -func (*StatefulSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } - -func (m *StatefulSetCondition) Reset() { *m = StatefulSetCondition{} } -func (*StatefulSetCondition) ProtoMessage() {} -func (*StatefulSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } - -func (m *StatefulSetList) Reset() { *m = StatefulSetList{} } -func (*StatefulSetList) ProtoMessage() {} -func (*StatefulSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } - -func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } -func (*StatefulSetSpec) ProtoMessage() {} -func (*StatefulSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } - -func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } -func (*StatefulSetStatus) ProtoMessage() {} -func (*StatefulSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +var xxx_messageInfo_StatefulSetStatus proto.InternalMessageInfo func (m *StatefulSetUpdateStrategy) Reset() { *m = StatefulSetUpdateStrategy{} } func (*StatefulSetUpdateStrategy) ProtoMessage() {} func (*StatefulSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{27} + return fileDescriptor_e1014cab6f31e43b, []int{27} +} +func (m *StatefulSetUpdateStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetUpdateStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetUpdateStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetUpdateStrategy.Merge(m, src) +} +func (m *StatefulSetUpdateStrategy) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetUpdateStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetUpdateStrategy.DiscardUnknown(m) } +var xxx_messageInfo_StatefulSetUpdateStrategy proto.InternalMessageInfo + func init() { proto.RegisterType((*ControllerRevision)(nil), "k8s.io.api.apps.v1.ControllerRevision") proto.RegisterType((*ControllerRevisionList)(nil), "k8s.io.api.apps.v1.ControllerRevisionList") @@ -229,10 +862,146 @@ proto.RegisterType((*StatefulSetStatus)(nil), "k8s.io.api.apps.v1.StatefulSetStatus") proto.RegisterType((*StatefulSetUpdateStrategy)(nil), "k8s.io.api.apps.v1.StatefulSetUpdateStrategy") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto", fileDescriptor_e1014cab6f31e43b) +} + +var fileDescriptor_e1014cab6f31e43b = []byte{ + // 2031 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x24, 0x47, + 0x1d, 0x75, 0xcf, 0x87, 0x3d, 0x2e, 0xaf, 0xed, 0xdd, 0xb2, 0xb1, 0x27, 0xbb, 0x64, 0x66, 0x19, + 0x60, 0xe3, 0x64, 0xb3, 0x3d, 0xec, 0x66, 0x13, 0xa1, 0x2c, 0x02, 0x79, 0xc6, 0x21, 0x84, 0x78, + 0x6c, 0x53, 0x5e, 0xef, 0x61, 0x09, 0x12, 0xe5, 0xe9, 0xda, 0x71, 0xc7, 0xfd, 0xa5, 0xee, 0xea, + 0x61, 0x47, 0x5c, 0x10, 0x12, 0x9c, 0x38, 0xf0, 0x9f, 0x20, 0x84, 0xe0, 0x86, 0x22, 0xc4, 0x65, + 0x2f, 0x48, 0x11, 0x17, 0x72, 0xb2, 0xd8, 0xc9, 0x09, 0xa1, 0x1c, 0xb9, 0xe4, 0x02, 0xaa, 0xea, + 0xea, 0xef, 0x6a, 0xcf, 0xd8, 0x9b, 0x38, 0x24, 0xca, 0xcd, 0x53, 0xf5, 0x7e, 0xaf, 0x7f, 0x55, + 0xf5, 0xab, 0x7a, 0xaf, 0xab, 0x0d, 0xee, 0x1d, 0x7f, 0xdb, 0x53, 0x75, 0xbb, 0x7d, 0xec, 0x1f, + 0x12, 0xd7, 0x22, 0x94, 0x78, 0xed, 0x21, 0xb1, 0x34, 0xdb, 0x6d, 0x8b, 0x0e, 0xec, 0xe8, 0x6d, + 0xec, 0x38, 0x5e, 0x7b, 0x78, 0xbb, 0x3d, 0x20, 0x16, 0x71, 0x31, 0x25, 0x9a, 0xea, 0xb8, 0x36, + 0xb5, 0x21, 0x0c, 0x30, 0x2a, 0x76, 0x74, 0x95, 0x61, 0xd4, 0xe1, 0xed, 0xab, 0xb7, 0x06, 0x3a, + 0x3d, 0xf2, 0x0f, 0xd5, 0xbe, 0x6d, 0xb6, 0x07, 0xf6, 0xc0, 0x6e, 0x73, 0xe8, 0xa1, 0xff, 0x88, + 0xff, 0xe2, 0x3f, 0xf8, 0x5f, 0x01, 0xc5, 0xd5, 0x56, 0xe2, 0x31, 0x7d, 0xdb, 0x25, 0x92, 0xc7, + 0x5c, 0xbd, 0x1b, 0x63, 0x4c, 0xdc, 0x3f, 0xd2, 0x2d, 0xe2, 0x8e, 0xda, 0xce, 0xf1, 0x80, 0x35, + 0x78, 0x6d, 0x93, 0x50, 0x2c, 0x8b, 0x6a, 0x17, 0x45, 0xb9, 0xbe, 0x45, 0x75, 0x93, 0xe4, 0x02, + 0x5e, 0x9b, 0x14, 0xe0, 0xf5, 0x8f, 0x88, 0x89, 0x73, 0x71, 0xaf, 0x14, 0xc5, 0xf9, 0x54, 0x37, + 0xda, 0xba, 0x45, 0x3d, 0xea, 0x66, 0x83, 0x5a, 0xff, 0x51, 0x00, 0xec, 0xda, 0x16, 0x75, 0x6d, + 0xc3, 0x20, 0x2e, 0x22, 0x43, 0xdd, 0xd3, 0x6d, 0x0b, 0xfe, 0x14, 0xd4, 0xd8, 0x78, 0x34, 0x4c, + 0x71, 0x5d, 0xb9, 0xae, 0x6c, 0x2c, 0xdc, 0xf9, 0x96, 0x1a, 0x4f, 0x72, 0x44, 0xaf, 0x3a, 0xc7, + 0x03, 0xd6, 0xe0, 0xa9, 0x0c, 0xad, 0x0e, 0x6f, 0xab, 0xbb, 0x87, 0xef, 0x92, 0x3e, 0xed, 0x11, + 0x8a, 0x3b, 0xf0, 0xc9, 0x49, 0x73, 0x66, 0x7c, 0xd2, 0x04, 0x71, 0x1b, 0x8a, 0x58, 0xe1, 0x2e, + 0xa8, 0x70, 0xf6, 0x12, 0x67, 0xbf, 0x55, 0xc8, 0x2e, 0x06, 0xad, 0x22, 0xfc, 0xb3, 0x37, 0x1e, + 0x53, 0x62, 0xb1, 0xf4, 0x3a, 0x97, 0x04, 0x75, 0x65, 0x0b, 0x53, 0x8c, 0x38, 0x11, 0x7c, 0x19, + 0xd4, 0x5c, 0x91, 0x7e, 0xbd, 0x7c, 0x5d, 0xd9, 0x28, 0x77, 0x2e, 0x0b, 0x54, 0x2d, 0x1c, 0x16, + 0x8a, 0x10, 0xad, 0xbf, 0x2a, 0x60, 0x2d, 0x3f, 0xee, 0x6d, 0xdd, 0xa3, 0xf0, 0x9d, 0xdc, 0xd8, + 0xd5, 0xe9, 0xc6, 0xce, 0xa2, 0xf9, 0xc8, 0xa3, 0x07, 0x87, 0x2d, 0x89, 0x71, 0xbf, 0x0d, 0xaa, + 0x3a, 0x25, 0xa6, 0x57, 0x2f, 0x5d, 0x2f, 0x6f, 0x2c, 0xdc, 0xb9, 0xa1, 0xe6, 0x6b, 0x57, 0xcd, + 0x27, 0xd6, 0x59, 0x14, 0x94, 0xd5, 0xb7, 0x58, 0x30, 0x0a, 0x38, 0x5a, 0xff, 0x55, 0xc0, 0xfc, + 0x16, 0x26, 0xa6, 0x6d, 0xed, 0x13, 0x7a, 0x01, 0x8b, 0xd6, 0x05, 0x15, 0xcf, 0x21, 0x7d, 0xb1, + 0x68, 0x5f, 0x93, 0xe5, 0x1e, 0xa5, 0xb3, 0xef, 0x90, 0x7e, 0xbc, 0x50, 0xec, 0x17, 0xe2, 0xc1, + 0xf0, 0x6d, 0x30, 0xeb, 0x51, 0x4c, 0x7d, 0x8f, 0x2f, 0xd3, 0xc2, 0x9d, 0xaf, 0x9f, 0x4e, 0xc3, + 0xa1, 0x9d, 0x25, 0x41, 0x34, 0x1b, 0xfc, 0x46, 0x82, 0xa2, 0xf5, 0xaf, 0x12, 0x80, 0x11, 0xb6, + 0x6b, 0x5b, 0x9a, 0x4e, 0x59, 0xfd, 0xbe, 0x0e, 0x2a, 0x74, 0xe4, 0x10, 0x3e, 0x0d, 0xf3, 0x9d, + 0x1b, 0x61, 0x16, 0xf7, 0x47, 0x0e, 0xf9, 0xf8, 0xa4, 0xb9, 0x96, 0x8f, 0x60, 0x3d, 0x88, 0xc7, + 0xc0, 0xed, 0x28, 0xbf, 0x12, 0x8f, 0xbe, 0x9b, 0x7e, 0xf4, 0xc7, 0x27, 0x4d, 0xc9, 0x61, 0xa1, + 0x46, 0x4c, 0xe9, 0x04, 0xe1, 0x10, 0x40, 0x03, 0x7b, 0xf4, 0xbe, 0x8b, 0x2d, 0x2f, 0x78, 0x92, + 0x6e, 0x12, 0x31, 0xf2, 0x97, 0xa6, 0x5b, 0x1e, 0x16, 0xd1, 0xb9, 0x2a, 0xb2, 0x80, 0xdb, 0x39, + 0x36, 0x24, 0x79, 0x02, 0xbc, 0x01, 0x66, 0x5d, 0x82, 0x3d, 0xdb, 0xaa, 0x57, 0xf8, 0x28, 0xa2, + 0x09, 0x44, 0xbc, 0x15, 0x89, 0x5e, 0xf8, 0x22, 0x98, 0x33, 0x89, 0xe7, 0xe1, 0x01, 0xa9, 0x57, + 0x39, 0x70, 0x59, 0x00, 0xe7, 0x7a, 0x41, 0x33, 0x0a, 0xfb, 0x5b, 0xbf, 0x57, 0xc0, 0x62, 0x34, + 0x73, 0x17, 0xb0, 0x55, 0x3a, 0xe9, 0xad, 0xf2, 0xfc, 0xa9, 0x75, 0x52, 0xb0, 0x43, 0xde, 0x2b, + 0x27, 0x72, 0x66, 0x45, 0x08, 0x7f, 0x02, 0x6a, 0x1e, 0x31, 0x48, 0x9f, 0xda, 0xae, 0xc8, 0xf9, + 0x95, 0x29, 0x73, 0xc6, 0x87, 0xc4, 0xd8, 0x17, 0xa1, 0x9d, 0x4b, 0x2c, 0xe9, 0xf0, 0x17, 0x8a, + 0x28, 0xe1, 0x8f, 0x40, 0x8d, 0x12, 0xd3, 0x31, 0x30, 0x25, 0x62, 0x9b, 0xa4, 0xea, 0x9b, 0x95, + 0x0b, 0x23, 0xdb, 0xb3, 0xb5, 0xfb, 0x02, 0xc6, 0x37, 0x4a, 0x34, 0x0f, 0x61, 0x2b, 0x8a, 0x68, + 0xe0, 0x31, 0x58, 0xf2, 0x1d, 0x8d, 0x21, 0x29, 0x3b, 0xba, 0x07, 0x23, 0x51, 0x3e, 0x37, 0x4f, + 0x9d, 0x90, 0x83, 0x54, 0x48, 0x67, 0x4d, 0x3c, 0x60, 0x29, 0xdd, 0x8e, 0x32, 0xd4, 0x70, 0x13, + 0x2c, 0x9b, 0xba, 0x85, 0x08, 0xd6, 0x46, 0xfb, 0xa4, 0x6f, 0x5b, 0x9a, 0xc7, 0x0b, 0xa8, 0xda, + 0x59, 0x17, 0x04, 0xcb, 0xbd, 0x74, 0x37, 0xca, 0xe2, 0xe1, 0x36, 0x58, 0x0d, 0xcf, 0xd9, 0x1f, + 0xe8, 0x1e, 0xb5, 0xdd, 0xd1, 0xb6, 0x6e, 0xea, 0xb4, 0x3e, 0xcb, 0x79, 0xea, 0xe3, 0x93, 0xe6, + 0x2a, 0x92, 0xf4, 0x23, 0x69, 0x54, 0xeb, 0x37, 0xb3, 0x60, 0x39, 0x73, 0x1a, 0xc0, 0x07, 0x60, + 0xad, 0xef, 0xbb, 0x2e, 0xb1, 0xe8, 0x8e, 0x6f, 0x1e, 0x12, 0x77, 0xbf, 0x7f, 0x44, 0x34, 0xdf, + 0x20, 0x1a, 0x5f, 0xd1, 0x6a, 0xa7, 0x21, 0x72, 0x5d, 0xeb, 0x4a, 0x51, 0xa8, 0x20, 0x1a, 0xfe, + 0x10, 0x40, 0x8b, 0x37, 0xf5, 0x74, 0xcf, 0x8b, 0x38, 0x4b, 0x9c, 0x33, 0xda, 0x80, 0x3b, 0x39, + 0x04, 0x92, 0x44, 0xb1, 0x1c, 0x35, 0xe2, 0xe9, 0x2e, 0xd1, 0xb2, 0x39, 0x96, 0xd3, 0x39, 0x6e, + 0x49, 0x51, 0xa8, 0x20, 0x1a, 0xbe, 0x0a, 0x16, 0x82, 0xa7, 0xf1, 0x39, 0x17, 0x8b, 0xb3, 0x22, + 0xc8, 0x16, 0x76, 0xe2, 0x2e, 0x94, 0xc4, 0xb1, 0xa1, 0xd9, 0x87, 0x1e, 0x71, 0x87, 0x44, 0x7b, + 0x33, 0xf0, 0x00, 0x4c, 0x28, 0xab, 0x5c, 0x28, 0xa3, 0xa1, 0xed, 0xe6, 0x10, 0x48, 0x12, 0xc5, + 0x86, 0x16, 0x54, 0x4d, 0x6e, 0x68, 0xb3, 0xe9, 0xa1, 0x1d, 0x48, 0x51, 0xa8, 0x20, 0x9a, 0xd5, + 0x5e, 0x90, 0xf2, 0xe6, 0x10, 0xeb, 0x06, 0x3e, 0x34, 0x48, 0x7d, 0x2e, 0x5d, 0x7b, 0x3b, 0xe9, + 0x6e, 0x94, 0xc5, 0xc3, 0x37, 0xc1, 0x95, 0xa0, 0xe9, 0xc0, 0xc2, 0x11, 0x49, 0x8d, 0x93, 0x3c, + 0x27, 0x48, 0xae, 0xec, 0x64, 0x01, 0x28, 0x1f, 0x03, 0x5f, 0x07, 0x4b, 0x7d, 0xdb, 0x30, 0x78, + 0x3d, 0x76, 0x6d, 0xdf, 0xa2, 0xf5, 0x79, 0xce, 0x02, 0xd9, 0x1e, 0xea, 0xa6, 0x7a, 0x50, 0x06, + 0x09, 0x1f, 0x02, 0xd0, 0x0f, 0xe5, 0xc0, 0xab, 0x83, 0x62, 0xa1, 0xcf, 0xeb, 0x50, 0x2c, 0xc0, + 0x51, 0x93, 0x87, 0x12, 0x6c, 0xad, 0xf7, 0x14, 0xb0, 0x5e, 0xb0, 0xc7, 0xe1, 0xf7, 0x52, 0xaa, + 0x77, 0x33, 0xa3, 0x7a, 0xd7, 0x0a, 0xc2, 0x12, 0xd2, 0xd7, 0x07, 0x8b, 0xcc, 0x77, 0xe8, 0xd6, + 0x20, 0x80, 0x88, 0x13, 0xec, 0x25, 0x59, 0xee, 0x28, 0x09, 0x8c, 0x8f, 0xe1, 0x2b, 0xe3, 0x93, + 0xe6, 0x62, 0xaa, 0x0f, 0xa5, 0x39, 0x5b, 0xbf, 0x2c, 0x01, 0xb0, 0x45, 0x1c, 0xc3, 0x1e, 0x99, + 0xc4, 0xba, 0x08, 0xd7, 0xb2, 0x95, 0x72, 0x2d, 0x2d, 0xe9, 0x42, 0x44, 0xf9, 0x14, 0xda, 0x96, + 0xed, 0x8c, 0x6d, 0xf9, 0xc6, 0x04, 0x9e, 0xd3, 0x7d, 0xcb, 0x3f, 0xca, 0x60, 0x25, 0x06, 0xc7, + 0xc6, 0xe5, 0x5e, 0x6a, 0x09, 0x5f, 0xc8, 0x2c, 0xe1, 0xba, 0x24, 0xe4, 0x53, 0x73, 0x2e, 0xef, + 0x82, 0x25, 0xe6, 0x2b, 0x82, 0x55, 0xe3, 0xae, 0x65, 0xf6, 0xcc, 0xae, 0x25, 0x52, 0x9d, 0xed, + 0x14, 0x13, 0xca, 0x30, 0x17, 0xb8, 0xa4, 0xb9, 0xcf, 0xa3, 0x4b, 0xfa, 0x83, 0x02, 0x96, 0xe2, + 0x65, 0xba, 0x00, 0x9b, 0xd4, 0x4d, 0xdb, 0xa4, 0xc6, 0xe9, 0x75, 0x59, 0xe0, 0x93, 0xfe, 0x5e, + 0x49, 0x66, 0xcd, 0x8d, 0xd2, 0x06, 0x7b, 0xa1, 0x72, 0x0c, 0xbd, 0x8f, 0x3d, 0x21, 0xab, 0x97, + 0x82, 0x97, 0xa9, 0xa0, 0x0d, 0x45, 0xbd, 0x29, 0x4b, 0x55, 0xfa, 0x74, 0x2d, 0x55, 0xf9, 0x93, + 0xb1, 0x54, 0xf7, 0x41, 0xcd, 0x0b, 0xcd, 0x54, 0x85, 0x53, 0xde, 0x98, 0xb4, 0x9d, 0x85, 0x8f, + 0x8a, 0x58, 0x23, 0x07, 0x15, 0x31, 0xc9, 0xbc, 0x53, 0xf5, 0xb3, 0xf4, 0x4e, 0xac, 0xbc, 0x1d, + 0xec, 0x7b, 0x44, 0xe3, 0x5b, 0xa9, 0x16, 0x97, 0xf7, 0x1e, 0x6f, 0x45, 0xa2, 0x17, 0x1e, 0x80, + 0x75, 0xc7, 0xb5, 0x07, 0x2e, 0xf1, 0xbc, 0x2d, 0x82, 0x35, 0x43, 0xb7, 0x48, 0x38, 0x80, 0x40, + 0xf5, 0xae, 0x8d, 0x4f, 0x9a, 0xeb, 0x7b, 0x72, 0x08, 0x2a, 0x8a, 0x6d, 0xfd, 0xb9, 0x02, 0x2e, + 0x67, 0x4f, 0xc4, 0x02, 0x23, 0xa2, 0x9c, 0xcb, 0x88, 0xbc, 0x9c, 0x28, 0xd1, 0xc0, 0xa5, 0x25, + 0xde, 0xf9, 0x73, 0x65, 0xba, 0x09, 0x96, 0x85, 0xf1, 0x08, 0x3b, 0x85, 0x15, 0x8b, 0x96, 0xe7, + 0x20, 0xdd, 0x8d, 0xb2, 0x78, 0x78, 0x0f, 0x2c, 0xba, 0xdc, 0x5b, 0x85, 0x04, 0x81, 0x3f, 0xf9, + 0x8a, 0x20, 0x58, 0x44, 0xc9, 0x4e, 0x94, 0xc6, 0x32, 0x6f, 0x12, 0x5b, 0x8e, 0x90, 0xa0, 0x92, + 0xf6, 0x26, 0x9b, 0x59, 0x00, 0xca, 0xc7, 0xc0, 0x1e, 0x58, 0xf1, 0xad, 0x3c, 0x55, 0x50, 0x6b, + 0xd7, 0x04, 0xd5, 0xca, 0x41, 0x1e, 0x82, 0x64, 0x71, 0xf0, 0xc7, 0x29, 0xbb, 0x32, 0xcb, 0x4f, + 0x91, 0x17, 0x4e, 0xdf, 0x0e, 0x53, 0xfb, 0x15, 0x89, 0x8f, 0xaa, 0x4d, 0xeb, 0xa3, 0x5a, 0x7f, + 0x52, 0x00, 0xcc, 0x6f, 0xc1, 0x89, 0x2f, 0xf7, 0xb9, 0x88, 0x84, 0x44, 0x6a, 0x72, 0x87, 0x73, + 0x73, 0xb2, 0xc3, 0x89, 0x4f, 0xd0, 0xe9, 0x2c, 0x8e, 0x98, 0xde, 0x8b, 0xb9, 0x98, 0x99, 0xc2, + 0xe2, 0xc4, 0xf9, 0x3c, 0x9b, 0xc5, 0x49, 0xf0, 0x9c, 0x6e, 0x71, 0xfe, 0x5d, 0x02, 0x2b, 0x31, + 0x78, 0x6a, 0x8b, 0x23, 0x09, 0xf9, 0xf2, 0x72, 0x66, 0x3a, 0xdb, 0x11, 0x4f, 0xdd, 0xff, 0x89, + 0xed, 0x88, 0x13, 0x2a, 0xb0, 0x1d, 0xbf, 0x2b, 0x25, 0xb3, 0x3e, 0xa3, 0xed, 0xf8, 0x04, 0xae, + 0x2a, 0x3e, 0x77, 0xce, 0xa5, 0xf5, 0x97, 0x32, 0xb8, 0x9c, 0xdd, 0x82, 0x29, 0x1d, 0x54, 0x26, + 0xea, 0xe0, 0x1e, 0x58, 0x7d, 0xe4, 0x1b, 0xc6, 0x88, 0x8f, 0x21, 0x21, 0x86, 0x81, 0x82, 0x7e, + 0x55, 0x44, 0xae, 0x7e, 0x5f, 0x82, 0x41, 0xd2, 0xc8, 0xbc, 0x2c, 0x56, 0x9e, 0x55, 0x16, 0xab, + 0xe7, 0x90, 0x45, 0xb9, 0xb3, 0x28, 0x9f, 0xcb, 0x59, 0x4c, 0xad, 0x89, 0x92, 0xe3, 0x6a, 0xe2, + 0x3b, 0xfc, 0xaf, 0x15, 0xb0, 0x26, 0x7f, 0x7d, 0x86, 0x06, 0x58, 0x32, 0xf1, 0xe3, 0xe4, 0xe5, + 0xc5, 0x24, 0xc1, 0xf0, 0xa9, 0x6e, 0xa8, 0xc1, 0xd7, 0x1d, 0xf5, 0x2d, 0x8b, 0xee, 0xba, 0xfb, + 0xd4, 0xd5, 0xad, 0x41, 0x20, 0xb0, 0xbd, 0x14, 0x17, 0xca, 0x70, 0xb7, 0x3e, 0x54, 0xc0, 0x7a, + 0x81, 0xca, 0x5d, 0x6c, 0x26, 0xf0, 0x21, 0xa8, 0x99, 0xf8, 0xf1, 0xbe, 0xef, 0x0e, 0x42, 0x49, + 0x3e, 0xfb, 0x73, 0xf8, 0x2e, 0xec, 0x09, 0x16, 0x14, 0xf1, 0xb5, 0x76, 0xc1, 0xf5, 0xd4, 0x20, + 0xd9, 0xa6, 0x21, 0x8f, 0x7c, 0x83, 0xef, 0x1f, 0xe1, 0x29, 0x6e, 0x82, 0x79, 0x07, 0xbb, 0x54, + 0x8f, 0xcc, 0x68, 0xb5, 0xb3, 0x38, 0x3e, 0x69, 0xce, 0xef, 0x85, 0x8d, 0x28, 0xee, 0x6f, 0xfd, + 0xaa, 0x04, 0x16, 0x12, 0x24, 0x17, 0xa0, 0xef, 0x6f, 0xa4, 0xf4, 0x5d, 0xfa, 0xc5, 0x24, 0x39, + 0xaa, 0x22, 0x81, 0xef, 0x65, 0x04, 0xfe, 0x9b, 0x93, 0x88, 0x4e, 0x57, 0xf8, 0x8f, 0x4a, 0x60, + 0x35, 0x81, 0x8e, 0x25, 0xfe, 0x3b, 0x29, 0x89, 0xdf, 0xc8, 0x48, 0x7c, 0x5d, 0x16, 0xf3, 0xa5, + 0xc6, 0x4f, 0xd6, 0xf8, 0x3f, 0x2a, 0x60, 0x39, 0x31, 0x77, 0x17, 0x20, 0xf2, 0x5b, 0x69, 0x91, + 0x6f, 0x4e, 0xa8, 0x97, 0x02, 0x95, 0x7f, 0x52, 0x4d, 0xe5, 0xfd, 0x85, 0xbf, 0x5d, 0xf8, 0x39, + 0x58, 0x1d, 0xda, 0x86, 0x6f, 0x92, 0xae, 0x81, 0x75, 0x33, 0x04, 0x30, 0x55, 0x64, 0x93, 0xf8, + 0xa2, 0x94, 0x9e, 0xb8, 0x9e, 0xee, 0x51, 0x62, 0xd1, 0x07, 0x71, 0x64, 0xac, 0xc5, 0x0f, 0x24, + 0x74, 0x48, 0xfa, 0x10, 0xf8, 0x2a, 0x58, 0x60, 0x6a, 0xa6, 0xf7, 0xc9, 0x0e, 0x36, 0xc3, 0x9a, + 0x8a, 0xbe, 0x0f, 0xec, 0xc7, 0x5d, 0x28, 0x89, 0x83, 0x47, 0x60, 0xc5, 0xb1, 0xb5, 0x1e, 0xb6, + 0xf0, 0x80, 0xb0, 0xf3, 0x7f, 0xcf, 0x36, 0xf4, 0xfe, 0x88, 0xdf, 0x3b, 0xcc, 0x77, 0x5e, 0x0b, + 0xdf, 0x29, 0xf7, 0xf2, 0x10, 0xe6, 0xd9, 0x25, 0xcd, 0x7c, 0x3f, 0xcb, 0x28, 0xa1, 0x99, 0xfb, + 0x9c, 0x35, 0x97, 0xfb, 0x1f, 0x00, 0x59, 0x71, 0x9d, 0xf3, 0x83, 0x56, 0xd1, 0x8d, 0x4a, 0xed, + 0x5c, 0x5f, 0xa3, 0x3e, 0xaa, 0x80, 0x2b, 0xb9, 0x03, 0xf2, 0x33, 0xbc, 0xd3, 0xc8, 0x39, 0xaf, + 0xf2, 0x19, 0x9c, 0xd7, 0x26, 0x58, 0x16, 0x1f, 0xc2, 0x32, 0xc6, 0x2d, 0x32, 0xd0, 0xdd, 0x74, + 0x37, 0xca, 0xe2, 0x65, 0x77, 0x2a, 0xd5, 0x33, 0xde, 0xa9, 0x24, 0xb3, 0x10, 0xff, 0xbf, 0x11, + 0x54, 0x5d, 0x3e, 0x0b, 0xf1, 0x6f, 0x1c, 0x59, 0x3c, 0xfc, 0x6e, 0x58, 0x52, 0x11, 0xc3, 0x1c, + 0x67, 0xc8, 0xd4, 0x48, 0x44, 0x90, 0x41, 0x3f, 0xd3, 0xc7, 0x9e, 0x77, 0x24, 0x1f, 0x7b, 0x36, + 0x26, 0x94, 0xf2, 0xf4, 0x56, 0xf1, 0x6f, 0x0a, 0x78, 0xae, 0x70, 0x0f, 0xc0, 0xcd, 0x94, 0xce, + 0xde, 0xca, 0xe8, 0xec, 0xf3, 0x85, 0x81, 0x09, 0xb1, 0x35, 0xe5, 0x17, 0x22, 0x77, 0x27, 0x5e, + 0x88, 0x48, 0x5c, 0xd4, 0xe4, 0x9b, 0x91, 0xce, 0xc6, 0x93, 0xa7, 0x8d, 0x99, 0xf7, 0x9f, 0x36, + 0x66, 0x3e, 0x78, 0xda, 0x98, 0xf9, 0xc5, 0xb8, 0xa1, 0x3c, 0x19, 0x37, 0x94, 0xf7, 0xc7, 0x0d, + 0xe5, 0x83, 0x71, 0x43, 0xf9, 0xe7, 0xb8, 0xa1, 0xfc, 0xf6, 0xc3, 0xc6, 0xcc, 0xc3, 0xd2, 0xf0, + 0xf6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x59, 0xb3, 0x11, 0xc0, 0x12, 0x26, 0x00, 0x00, +} + func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -240,36 +1009,45 @@ } func (m *ControllerRevision) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) + i-- + dAtA[i] = 0x18 + { + size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Data.Size())) - n2, err := m.Data.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ControllerRevisionList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -277,37 +1055,46 @@ } func (m *ControllerRevisionList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerRevisionList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n3, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -315,41 +1102,52 @@ } func (m *DaemonSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n5, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n6, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -357,41 +1155,52 @@ } func (m *DaemonSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n7, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -399,37 +1208,46 @@ } func (m *DaemonSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n8, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -437,51 +1255,62 @@ } func (m *DaemonSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Selector != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n9, err := m.Selector.MarshalTo(dAtA[i:]) + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + { + size, err := m.UpdateStrategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n9 - } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n10, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) - n11, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x12 + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *DaemonSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -489,58 +1318,65 @@ } func (m *DaemonSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) - if m.CollisionCount != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x52 } } - return i, nil + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x48 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) + i-- + dAtA[i] = 0x40 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) + i-- + dAtA[i] = 0x38 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DaemonSetUpdateStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -548,31 +1384,39 @@ } func (m *DaemonSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetUpdateStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n12, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n12 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Deployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -580,91 +1424,115 @@ } func (m *Deployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Deployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n13, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n14, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n14 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n15, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } - -func (m *DeploymentCondition) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastUpdateTime.Size())) - n16, err := m.LastUpdateTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + +func (m *DeploymentCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n16 + i-- dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n17, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n17 - return i, nil + i-- + dAtA[i] = 0x32 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -672,37 +1540,46 @@ } func (m *DeploymentList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n18, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -710,69 +1587,80 @@ } func (m *DeploymentSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + if m.ProgressDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + i-- + dAtA[i] = 0x48 } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n19, err := m.Selector.MarshalTo(dAtA[i:]) + i-- + if m.Paused { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x28 + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n19 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n20, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n20 + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Strategy.Size())) - n21, err := m.Strategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x38 - i++ - if m.Paused { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i++ - if m.ProgressDeadlineSeconds != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *DeploymentStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -780,52 +1668,59 @@ } func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x40 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x38 if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x32 } } - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - if m.CollisionCount != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DeploymentStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -833,31 +1728,39 @@ } func (m *DeploymentStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n22, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n22 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -865,41 +1768,52 @@ } func (m *ReplicaSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n23, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n24, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n24 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n25, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n25 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -907,41 +1821,52 @@ } func (m *ReplicaSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n26, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -949,37 +1874,46 @@ } func (m *ReplicaSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n27, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -987,43 +1921,52 @@ } func (m *ReplicaSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) - } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n28, err := m.Selector.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n28 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n29, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n29 - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - return i, nil + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *ReplicaSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1031,44 +1974,51 @@ } func (m *ReplicaSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x32 } } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *RollingUpdateDaemonSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1076,27 +2026,34 @@ } func (m *RollingUpdateDaemonSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n30, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n30 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RollingUpdateDeployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1104,37 +2061,46 @@ } func (m *RollingUpdateDeployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDeployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n31, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n31 - } if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxSurge.Size())) - n32, err := m.MaxSurge.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.MaxUnavailable != nil { + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n32 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RollingUpdateStatefulSetStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1142,22 +2108,27 @@ } func (m *RollingUpdateStatefulSetStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateStatefulSetStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Partition != nil { - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.Partition)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *StatefulSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1165,41 +2136,52 @@ } func (m *StatefulSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n33, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n34, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n34 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n35, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n35 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1207,41 +2189,52 @@ } func (m *StatefulSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n36, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1249,37 +2242,46 @@ } func (m *StatefulSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n37, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1287,73 +2289,88 @@ } func (m *StatefulSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x40 } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n38, err := m.Selector.MarshalTo(dAtA[i:]) + { + size, err := m.UpdateStrategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n38 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n39, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n39 + i-- + dAtA[i] = 0x3a + i -= len(m.PodManagementPolicy) + copy(dAtA[i:], m.PodManagementPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodManagementPolicy))) + i-- + dAtA[i] = 0x32 + i -= len(m.ServiceName) + copy(dAtA[i:], m.ServiceName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) + i-- + dAtA[i] = 0x2a if len(m.VolumeClaimTemplates) > 0 { - for _, msg := range m.VolumeClaimTemplates { + for iNdEx := len(m.VolumeClaimTemplates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeClaimTemplates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + } + } + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodManagementPolicy))) - i += copy(dAtA[i:], m.PodManagementPolicy) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) - n40, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *StatefulSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1361,57 +2378,66 @@ } func (m *StatefulSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CurrentRevision))) - i += copy(dAtA[i:], m.CurrentRevision) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UpdateRevision))) - i += copy(dAtA[i:], m.UpdateRevision) - if m.CollisionCount != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x52 } } - return i, nil + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x48 + } + i -= len(m.UpdateRevision) + copy(dAtA[i:], m.UpdateRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UpdateRevision))) + i-- + dAtA[i] = 0x3a + i -= len(m.CurrentRevision) + copy(dAtA[i:], m.CurrentRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CurrentRevision))) + i-- + dAtA[i] = 0x32 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *StatefulSetUpdateStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1419,55 +2445,50 @@ } func (m *StatefulSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetUpdateStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n41, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n41 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *ControllerRevision) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1479,6 +2500,9 @@ } func (m *ControllerRevisionList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1493,6 +2517,9 @@ } func (m *DaemonSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1505,6 +2532,9 @@ } func (m *DaemonSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1521,6 +2551,9 @@ } func (m *DaemonSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1535,6 +2568,9 @@ } func (m *DaemonSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Selector != nil { @@ -1553,6 +2589,9 @@ } func (m *DaemonSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.CurrentNumberScheduled)) @@ -1576,6 +2615,9 @@ } func (m *DaemonSetUpdateStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1588,6 +2630,9 @@ } func (m *Deployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1600,6 +2645,9 @@ } func (m *DeploymentCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1618,6 +2666,9 @@ } func (m *DeploymentList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1632,6 +2683,9 @@ } func (m *DeploymentSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1657,6 +2711,9 @@ } func (m *DeploymentStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -1678,6 +2735,9 @@ } func (m *DeploymentStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1690,6 +2750,9 @@ } func (m *ReplicaSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1702,6 +2765,9 @@ } func (m *ReplicaSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1718,6 +2784,9 @@ } func (m *ReplicaSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1732,6 +2801,9 @@ } func (m *ReplicaSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1748,6 +2820,9 @@ } func (m *ReplicaSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1765,6 +2840,9 @@ } func (m *RollingUpdateDaemonSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -1775,6 +2853,9 @@ } func (m *RollingUpdateDeployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -1789,6 +2870,9 @@ } func (m *RollingUpdateStatefulSetStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Partition != nil { @@ -1798,6 +2882,9 @@ } func (m *StatefulSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1810,6 +2897,9 @@ } func (m *StatefulSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1826,6 +2916,9 @@ } func (m *StatefulSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1840,6 +2933,9 @@ } func (m *StatefulSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1870,6 +2966,9 @@ } func (m *StatefulSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -1894,6 +2993,9 @@ } func (m *StatefulSetUpdateStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1906,14 +3008,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1923,8 +3018,8 @@ return "nil" } s := strings.Join([]string{`&ControllerRevision{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Data:` + strings.Replace(strings.Replace(this.Data.String(), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Data), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, `}`, }, "") @@ -1934,9 +3029,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ControllerRevision{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ControllerRevision", "ControllerRevision", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ControllerRevisionList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ControllerRevision", "ControllerRevision", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1946,7 +3046,7 @@ return "nil" } s := strings.Join([]string{`&DaemonSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DaemonSetSpec", "DaemonSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DaemonSetStatus", "DaemonSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1960,7 +3060,7 @@ s := strings.Join([]string{`&DaemonSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -1971,9 +3071,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]DaemonSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DaemonSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1983,8 +3088,8 @@ return "nil" } s := strings.Join([]string{`&DaemonSetSpec{`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "DaemonSetUpdateStrategy", "DaemonSetUpdateStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, @@ -1996,6 +3101,11 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DaemonSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DaemonSetCondition", "DaemonSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DaemonSetStatus{`, `CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`, `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, @@ -2006,7 +3116,7 @@ `NumberAvailable:` + fmt.Sprintf("%v", this.NumberAvailable) + `,`, `NumberUnavailable:` + fmt.Sprintf("%v", this.NumberUnavailable) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DaemonSetCondition", "DaemonSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2017,7 +3127,7 @@ } s := strings.Join([]string{`&DaemonSetUpdateStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, `}`, }, "") return s @@ -2027,7 +3137,7 @@ return "nil" } s := strings.Join([]string{`&Deployment{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentSpec", "DeploymentSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentStatus", "DeploymentStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2043,8 +3153,8 @@ `Status:` + fmt.Sprintf("%v", this.Status) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `LastUpdateTime:` + strings.Replace(strings.Replace(this.LastUpdateTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -2053,9 +3163,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Deployment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Deployment", "Deployment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DeploymentList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Deployment", "Deployment", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2066,8 +3181,8 @@ } s := strings.Join([]string{`&DeploymentSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, @@ -2081,13 +3196,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DeploymentCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DeploymentStatus{`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, @@ -2100,7 +3220,7 @@ } s := strings.Join([]string{`&DeploymentStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, `}`, }, "") return s @@ -2110,7 +3230,7 @@ return "nil" } s := strings.Join([]string{`&ReplicaSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicaSetSpec", "ReplicaSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicaSetStatus", "ReplicaSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2124,7 +3244,7 @@ s := strings.Join([]string{`&ReplicaSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -2135,9 +3255,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ReplicaSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ReplicaSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2148,8 +3273,8 @@ } s := strings.Join([]string{`&ReplicaSetSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `}`, }, "") @@ -2159,13 +3284,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]ReplicaSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "ReplicaSetCondition", "ReplicaSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&ReplicaSetStatus{`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ReplicaSetCondition", "ReplicaSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2175,7 +3305,7 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDaemonSet{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -2185,8 +3315,8 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDeployment{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, - `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -2206,7 +3336,7 @@ return "nil" } s := strings.Join([]string{`&StatefulSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "StatefulSetSpec", "StatefulSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "StatefulSetStatus", "StatefulSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2220,7 +3350,7 @@ s := strings.Join([]string{`&StatefulSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -2231,9 +3361,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]StatefulSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "StatefulSet", "StatefulSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&StatefulSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "StatefulSet", "StatefulSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2242,11 +3377,16 @@ if this == nil { return "nil" } + repeatedStringForVolumeClaimTemplates := "[]PersistentVolumeClaim{" + for _, f := range this.VolumeClaimTemplates { + repeatedStringForVolumeClaimTemplates += fmt.Sprintf("%v", f) + "," + } + repeatedStringForVolumeClaimTemplates += "}" s := strings.Join([]string{`&StatefulSetSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, - `VolumeClaimTemplates:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeClaimTemplates), "PersistentVolumeClaim", "k8s_io_api_core_v1.PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `VolumeClaimTemplates:` + repeatedStringForVolumeClaimTemplates + `,`, `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, `PodManagementPolicy:` + fmt.Sprintf("%v", this.PodManagementPolicy) + `,`, `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "StatefulSetUpdateStrategy", "StatefulSetUpdateStrategy", 1), `&`, ``, 1) + `,`, @@ -2259,6 +3399,11 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]StatefulSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "StatefulSetCondition", "StatefulSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&StatefulSetStatus{`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, @@ -2268,7 +3413,7 @@ `CurrentRevision:` + fmt.Sprintf("%v", this.CurrentRevision) + `,`, `UpdateRevision:` + fmt.Sprintf("%v", this.UpdateRevision) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "StatefulSetCondition", "StatefulSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2279,7 +3424,7 @@ } s := strings.Join([]string{`&StatefulSetUpdateStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateStatefulSetStrategy", "RollingUpdateStatefulSetStrategy", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateStatefulSetStrategy", "RollingUpdateStatefulSetStrategy", 1) + `,`, `}`, }, "") return s @@ -2307,7 +3452,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2335,7 +3480,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2344,6 +3489,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2365,7 +3513,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2374,6 +3522,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2395,7 +3546,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift + m.Revision |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -2409,6 +3560,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2436,7 +3590,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2464,7 +3618,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2473,6 +3627,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2494,7 +3651,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2503,6 +3660,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2520,6 +3680,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2547,7 +3710,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2575,7 +3738,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2584,6 +3747,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2605,7 +3771,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2614,6 +3780,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2635,7 +3804,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2644,6 +3813,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2660,6 +3832,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2687,7 +3862,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2715,7 +3890,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2725,6 +3900,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2744,7 +3922,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2754,6 +3932,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2773,7 +3954,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2782,6 +3963,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2803,7 +3987,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2813,6 +3997,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2832,7 +4019,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2842,6 +4029,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2856,6 +4046,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2883,7 +4076,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2911,7 +4104,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2920,6 +4113,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2941,7 +4137,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2950,6 +4146,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2967,6 +4166,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2994,7 +4196,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3022,7 +4224,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3031,11 +4233,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3055,7 +4260,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3064,6 +4269,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3085,7 +4293,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3094,6 +4302,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3115,7 +4326,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3134,7 +4345,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3149,6 +4360,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3176,7 +4390,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3204,7 +4418,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentNumberScheduled |= (int32(b) & 0x7F) << shift + m.CurrentNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3223,7 +4437,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberMisscheduled |= (int32(b) & 0x7F) << shift + m.NumberMisscheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3242,7 +4456,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.DesiredNumberScheduled |= (int32(b) & 0x7F) << shift + m.DesiredNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3261,7 +4475,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberReady |= (int32(b) & 0x7F) << shift + m.NumberReady |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3280,7 +4494,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -3299,7 +4513,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedNumberScheduled |= (int32(b) & 0x7F) << shift + m.UpdatedNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3318,7 +4532,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberAvailable |= (int32(b) & 0x7F) << shift + m.NumberAvailable |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3337,7 +4551,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberUnavailable |= (int32(b) & 0x7F) << shift + m.NumberUnavailable |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3356,7 +4570,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3376,7 +4590,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3385,6 +4599,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3402,6 +4619,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3429,7 +4649,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3457,7 +4677,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3467,6 +4687,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3486,7 +4709,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3495,6 +4718,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3514,6 +4740,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3541,7 +4770,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3569,7 +4798,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3578,6 +4807,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3599,7 +4831,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3608,6 +4840,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3629,7 +4864,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3638,6 +4873,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3654,6 +4892,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3681,7 +4922,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3709,7 +4950,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3719,6 +4960,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3738,7 +4982,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3748,6 +4992,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3767,7 +5014,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3777,6 +5024,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3796,7 +5046,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3806,6 +5056,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3825,7 +5078,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3834,6 +5087,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3855,7 +5111,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3864,6 +5120,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3880,6 +5139,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3907,7 +5169,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3935,7 +5197,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3944,6 +5206,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3965,7 +5230,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3974,6 +5239,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3991,6 +5259,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4018,7 +5289,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4046,7 +5317,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4066,7 +5337,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4075,11 +5346,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -4099,7 +5373,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4108,6 +5382,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4129,7 +5406,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4138,6 +5415,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4159,7 +5439,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4178,7 +5458,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4198,7 +5478,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4218,7 +5498,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4233,6 +5513,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4260,7 +5543,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4288,7 +5571,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -4307,7 +5590,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4326,7 +5609,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4345,7 +5628,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4364,7 +5647,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UnavailableReplicas |= (int32(b) & 0x7F) << shift + m.UnavailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4383,7 +5666,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4392,6 +5675,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4414,7 +5700,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4433,7 +5719,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4448,6 +5734,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4475,7 +5764,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4503,7 +5792,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4513,6 +5802,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4532,7 +5824,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4541,6 +5833,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4560,6 +5855,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4587,7 +5885,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4615,7 +5913,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4624,6 +5922,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4645,7 +5946,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4654,6 +5955,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4675,7 +5979,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4684,6 +5988,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4700,6 +6007,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4727,7 +6037,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4755,7 +6065,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4765,6 +6075,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4784,7 +6097,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4794,6 +6107,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4813,7 +6129,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4822,6 +6138,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4843,7 +6162,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4853,6 +6172,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4872,7 +6194,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4882,6 +6204,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4896,6 +6221,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4923,7 +6251,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4951,7 +6279,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4960,6 +6288,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4981,7 +6312,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4990,6 +6321,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5007,6 +6341,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5034,7 +6371,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5062,7 +6399,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5082,7 +6419,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5091,11 +6428,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5115,7 +6455,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5124,6 +6464,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5145,7 +6488,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5159,6 +6502,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5186,7 +6532,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5214,7 +6560,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5233,7 +6579,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.FullyLabeledReplicas |= (int32(b) & 0x7F) << shift + m.FullyLabeledReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5252,7 +6598,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -5271,7 +6617,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5290,7 +6636,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5309,7 +6655,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5318,6 +6664,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5335,6 +6684,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5362,7 +6714,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5390,7 +6742,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5399,11 +6751,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxUnavailable = &intstr.IntOrString{} } if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5418,6 +6773,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5445,7 +6803,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5473,7 +6831,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5482,11 +6840,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxUnavailable = &intstr.IntOrString{} } if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5506,7 +6867,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5515,11 +6876,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxSurge == nil { - m.MaxSurge = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxSurge = &intstr.IntOrString{} } if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5534,6 +6898,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5561,7 +6928,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5589,7 +6956,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5604,6 +6971,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5631,7 +7001,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5659,7 +7029,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5668,6 +7038,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5689,7 +7062,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5698,6 +7071,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5719,7 +7095,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5728,6 +7104,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5744,6 +7123,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5771,7 +7153,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5799,7 +7181,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5809,6 +7191,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5828,7 +7213,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5838,6 +7223,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5857,7 +7245,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5866,6 +7254,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5887,7 +7278,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5897,6 +7288,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5916,7 +7310,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5926,6 +7320,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5940,6 +7337,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5967,7 +7367,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5995,7 +7395,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6004,6 +7404,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6025,7 +7428,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6034,6 +7437,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6051,6 +7457,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6078,7 +7487,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6106,7 +7515,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6126,7 +7535,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6135,11 +7544,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -6159,7 +7571,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6168,6 +7580,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6189,7 +7604,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6198,10 +7613,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeClaimTemplates = append(m.VolumeClaimTemplates, k8s_io_api_core_v1.PersistentVolumeClaim{}) + m.VolumeClaimTemplates = append(m.VolumeClaimTemplates, v11.PersistentVolumeClaim{}) if err := m.VolumeClaimTemplates[len(m.VolumeClaimTemplates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -6220,7 +7638,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6230,6 +7648,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6249,7 +7670,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6259,6 +7680,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6278,7 +7702,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6287,6 +7711,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6308,7 +7735,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6323,6 +7750,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6350,7 +7780,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6378,7 +7808,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -6397,7 +7827,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6416,7 +7846,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6435,7 +7865,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentReplicas |= (int32(b) & 0x7F) << shift + m.CurrentReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6454,7 +7884,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6473,7 +7903,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6483,6 +7913,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6502,7 +7935,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6512,6 +7945,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6531,7 +7967,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6551,7 +7987,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6560,6 +7996,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6577,6 +8016,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6604,7 +8046,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6632,7 +8074,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6642,6 +8084,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6661,7 +8106,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6670,6 +8115,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6689,6 +8137,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6755,10 +8206,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -6787,6 +8241,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -6805,139 +8262,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 2037 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x24, 0x47, - 0x1d, 0x75, 0xcf, 0x87, 0x3d, 0x2e, 0xaf, 0xed, 0xdd, 0xb2, 0xb1, 0x27, 0xbb, 0x64, 0x66, 0x19, - 0x60, 0xe3, 0x64, 0xb3, 0x3d, 0xec, 0x66, 0x13, 0xa1, 0x2c, 0x02, 0x79, 0xc6, 0x21, 0x84, 0x78, - 0x6c, 0x53, 0x5e, 0xef, 0x61, 0x09, 0x12, 0xe5, 0xe9, 0xda, 0x71, 0xc7, 0xfd, 0xa5, 0xee, 0xea, - 0x61, 0x47, 0x5c, 0x10, 0x12, 0x9c, 0x38, 0xf0, 0x9f, 0x20, 0x84, 0xe0, 0x86, 0x22, 0xc4, 0x65, - 0x2f, 0x48, 0x11, 0x17, 0x72, 0xb2, 0xd8, 0xc9, 0x09, 0xa1, 0x1c, 0xb9, 0xe4, 0x02, 0xaa, 0xea, - 0xea, 0xef, 0x6a, 0xcf, 0xd8, 0x9b, 0x75, 0x50, 0x94, 0x9b, 0xa7, 0xea, 0xfd, 0x5e, 0xff, 0xaa, - 0xea, 0x57, 0xf5, 0x5e, 0x57, 0x1b, 0xdc, 0x3b, 0xfe, 0xb6, 0xa7, 0xea, 0x76, 0xfb, 0xd8, 0x3f, - 0x24, 0xae, 0x45, 0x28, 0xf1, 0xda, 0x43, 0x62, 0x69, 0xb6, 0xdb, 0x16, 0x1d, 0xd8, 0xd1, 0xdb, - 0xd8, 0x71, 0xbc, 0xf6, 0xf0, 0x76, 0x7b, 0x40, 0x2c, 0xe2, 0x62, 0x4a, 0x34, 0xd5, 0x71, 0x6d, - 0x6a, 0x43, 0x18, 0x60, 0x54, 0xec, 0xe8, 0x2a, 0xc3, 0xa8, 0xc3, 0xdb, 0x57, 0x6f, 0x0d, 0x74, - 0x7a, 0xe4, 0x1f, 0xaa, 0x7d, 0xdb, 0x6c, 0x0f, 0xec, 0x81, 0xdd, 0xe6, 0xd0, 0x43, 0xff, 0x11, - 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x02, 0x8a, 0xab, 0xad, 0xc4, 0x63, 0xfa, 0xb6, 0x4b, 0x24, 0x8f, - 0xb9, 0x7a, 0x37, 0xc6, 0x98, 0xb8, 0x7f, 0xa4, 0x5b, 0xc4, 0x1d, 0xb5, 0x9d, 0xe3, 0x01, 0x6b, - 0xf0, 0xda, 0x26, 0xa1, 0x58, 0x16, 0xd5, 0x2e, 0x8a, 0x72, 0x7d, 0x8b, 0xea, 0x26, 0xc9, 0x05, - 0xbc, 0x31, 0x29, 0xc0, 0xeb, 0x1f, 0x11, 0x13, 0xe7, 0xe2, 0x5e, 0x2b, 0x8a, 0xf3, 0xa9, 0x6e, - 0xb4, 0x75, 0x8b, 0x7a, 0xd4, 0xcd, 0x06, 0xb5, 0xfe, 0xa3, 0x00, 0xd8, 0xb5, 0x2d, 0xea, 0xda, - 0x86, 0x41, 0x5c, 0x44, 0x86, 0xba, 0xa7, 0xdb, 0x16, 0xfc, 0x29, 0xa8, 0xb1, 0xf1, 0x68, 0x98, - 0xe2, 0xba, 0x72, 0x5d, 0xd9, 0x58, 0xb8, 0xf3, 0x2d, 0x35, 0x9e, 0xe4, 0x88, 0x5e, 0x75, 0x8e, - 0x07, 0xac, 0xc1, 0x53, 0x19, 0x5a, 0x1d, 0xde, 0x56, 0x77, 0x0f, 0xdf, 0x27, 0x7d, 0xda, 0x23, - 0x14, 0x77, 0xe0, 0x93, 0x93, 0xe6, 0xcc, 0xf8, 0xa4, 0x09, 0xe2, 0x36, 0x14, 0xb1, 0xc2, 0x5d, - 0x50, 0xe1, 0xec, 0x25, 0xce, 0x7e, 0xab, 0x90, 0x5d, 0x0c, 0x5a, 0x45, 0xf8, 0x67, 0x6f, 0x3d, - 0xa6, 0xc4, 0x62, 0xe9, 0x75, 0x2e, 0x09, 0xea, 0xca, 0x16, 0xa6, 0x18, 0x71, 0x22, 0xf8, 0x2a, - 0xa8, 0xb9, 0x22, 0xfd, 0x7a, 0xf9, 0xba, 0xb2, 0x51, 0xee, 0x5c, 0x16, 0xa8, 0x5a, 0x38, 0x2c, - 0x14, 0x21, 0x5a, 0x7f, 0x55, 0xc0, 0x5a, 0x7e, 0xdc, 0xdb, 0xba, 0x47, 0xe1, 0x7b, 0xb9, 0xb1, - 0xab, 0xd3, 0x8d, 0x9d, 0x45, 0xf3, 0x91, 0x47, 0x0f, 0x0e, 0x5b, 0x12, 0xe3, 0x7e, 0x17, 0x54, - 0x75, 0x4a, 0x4c, 0xaf, 0x5e, 0xba, 0x5e, 0xde, 0x58, 0xb8, 0x73, 0x43, 0xcd, 0xd7, 0xae, 0x9a, - 0x4f, 0xac, 0xb3, 0x28, 0x28, 0xab, 0xef, 0xb0, 0x60, 0x14, 0x70, 0xb4, 0xfe, 0xab, 0x80, 0xf9, - 0x2d, 0x4c, 0x4c, 0xdb, 0xda, 0x27, 0xf4, 0x02, 0x16, 0xad, 0x0b, 0x2a, 0x9e, 0x43, 0xfa, 0x62, - 0xd1, 0xbe, 0x26, 0xcb, 0x3d, 0x4a, 0x67, 0xdf, 0x21, 0xfd, 0x78, 0xa1, 0xd8, 0x2f, 0xc4, 0x83, - 0xe1, 0xbb, 0x60, 0xd6, 0xa3, 0x98, 0xfa, 0x1e, 0x5f, 0xa6, 0x85, 0x3b, 0x5f, 0x3f, 0x9d, 0x86, - 0x43, 0x3b, 0x4b, 0x82, 0x68, 0x36, 0xf8, 0x8d, 0x04, 0x45, 0xeb, 0x5f, 0x25, 0x00, 0x23, 0x6c, - 0xd7, 0xb6, 0x34, 0x9d, 0xb2, 0xfa, 0x7d, 0x13, 0x54, 0xe8, 0xc8, 0x21, 0x7c, 0x1a, 0xe6, 0x3b, - 0x37, 0xc2, 0x2c, 0xee, 0x8f, 0x1c, 0xf2, 0xe9, 0x49, 0x73, 0x2d, 0x1f, 0xc1, 0x7a, 0x10, 0x8f, - 0x81, 0xdb, 0x51, 0x7e, 0x25, 0x1e, 0x7d, 0x37, 0xfd, 0xe8, 0x4f, 0x4f, 0x9a, 0x92, 0xc3, 0x42, - 0x8d, 0x98, 0xd2, 0x09, 0xc2, 0x21, 0x80, 0x06, 0xf6, 0xe8, 0x7d, 0x17, 0x5b, 0x5e, 0xf0, 0x24, - 0xdd, 0x24, 0x62, 0xe4, 0xaf, 0x4c, 0xb7, 0x3c, 0x2c, 0xa2, 0x73, 0x55, 0x64, 0x01, 0xb7, 0x73, - 0x6c, 0x48, 0xf2, 0x04, 0x78, 0x03, 0xcc, 0xba, 0x04, 0x7b, 0xb6, 0x55, 0xaf, 0xf0, 0x51, 0x44, - 0x13, 0x88, 0x78, 0x2b, 0x12, 0xbd, 0xf0, 0x65, 0x30, 0x67, 0x12, 0xcf, 0xc3, 0x03, 0x52, 0xaf, - 0x72, 0xe0, 0xb2, 0x00, 0xce, 0xf5, 0x82, 0x66, 0x14, 0xf6, 0xb7, 0x7e, 0xaf, 0x80, 0xc5, 0x68, - 0xe6, 0x2e, 0x60, 0xab, 0x74, 0xd2, 0x5b, 0xe5, 0xc5, 0x53, 0xeb, 0xa4, 0x60, 0x87, 0x7c, 0x50, - 0x4e, 0xe4, 0xcc, 0x8a, 0x10, 0xfe, 0x04, 0xd4, 0x3c, 0x62, 0x90, 0x3e, 0xb5, 0x5d, 0x91, 0xf3, - 0x6b, 0x53, 0xe6, 0x8c, 0x0f, 0x89, 0xb1, 0x2f, 0x42, 0x3b, 0x97, 0x58, 0xd2, 0xe1, 0x2f, 0x14, - 0x51, 0xc2, 0x1f, 0x81, 0x1a, 0x25, 0xa6, 0x63, 0x60, 0x4a, 0xc4, 0x36, 0x49, 0xd5, 0x37, 0x2b, - 0x17, 0x46, 0xb6, 0x67, 0x6b, 0xf7, 0x05, 0x8c, 0x6f, 0x94, 0x68, 0x1e, 0xc2, 0x56, 0x14, 0xd1, - 0xc0, 0x63, 0xb0, 0xe4, 0x3b, 0x1a, 0x43, 0x52, 0x76, 0x74, 0x0f, 0x46, 0xa2, 0x7c, 0x6e, 0x9e, - 0x3a, 0x21, 0x07, 0xa9, 0x90, 0xce, 0x9a, 0x78, 0xc0, 0x52, 0xba, 0x1d, 0x65, 0xa8, 0xe1, 0x26, - 0x58, 0x36, 0x75, 0x0b, 0x11, 0xac, 0x8d, 0xf6, 0x49, 0xdf, 0xb6, 0x34, 0x8f, 0x17, 0x50, 0xb5, - 0xb3, 0x2e, 0x08, 0x96, 0x7b, 0xe9, 0x6e, 0x94, 0xc5, 0xc3, 0x6d, 0xb0, 0x1a, 0x9e, 0xb3, 0x3f, - 0xd0, 0x3d, 0x6a, 0xbb, 0xa3, 0x6d, 0xdd, 0xd4, 0x69, 0x7d, 0x96, 0xf3, 0xd4, 0xc7, 0x27, 0xcd, - 0x55, 0x24, 0xe9, 0x47, 0xd2, 0xa8, 0xd6, 0x6f, 0x66, 0xc1, 0x72, 0xe6, 0x34, 0x80, 0x0f, 0xc0, - 0x5a, 0xdf, 0x77, 0x5d, 0x62, 0xd1, 0x1d, 0xdf, 0x3c, 0x24, 0xee, 0x7e, 0xff, 0x88, 0x68, 0xbe, - 0x41, 0x34, 0xbe, 0xa2, 0xd5, 0x4e, 0x43, 0xe4, 0xba, 0xd6, 0x95, 0xa2, 0x50, 0x41, 0x34, 0xfc, - 0x21, 0x80, 0x16, 0x6f, 0xea, 0xe9, 0x9e, 0x17, 0x71, 0x96, 0x38, 0x67, 0xb4, 0x01, 0x77, 0x72, - 0x08, 0x24, 0x89, 0x62, 0x39, 0x6a, 0xc4, 0xd3, 0x5d, 0xa2, 0x65, 0x73, 0x2c, 0xa7, 0x73, 0xdc, - 0x92, 0xa2, 0x50, 0x41, 0x34, 0x7c, 0x1d, 0x2c, 0x04, 0x4f, 0xe3, 0x73, 0x2e, 0x16, 0x67, 0x45, - 0x90, 0x2d, 0xec, 0xc4, 0x5d, 0x28, 0x89, 0x63, 0x43, 0xb3, 0x0f, 0x3d, 0xe2, 0x0e, 0x89, 0xf6, - 0x76, 0xe0, 0x01, 0x98, 0x50, 0x56, 0xb9, 0x50, 0x46, 0x43, 0xdb, 0xcd, 0x21, 0x90, 0x24, 0x8a, - 0x0d, 0x2d, 0xa8, 0x9a, 0xdc, 0xd0, 0x66, 0xd3, 0x43, 0x3b, 0x90, 0xa2, 0x50, 0x41, 0x34, 0xab, - 0xbd, 0x20, 0xe5, 0xcd, 0x21, 0xd6, 0x0d, 0x7c, 0x68, 0x90, 0xfa, 0x5c, 0xba, 0xf6, 0x76, 0xd2, - 0xdd, 0x28, 0x8b, 0x87, 0x6f, 0x83, 0x2b, 0x41, 0xd3, 0x81, 0x85, 0x23, 0x92, 0x1a, 0x27, 0x79, - 0x41, 0x90, 0x5c, 0xd9, 0xc9, 0x02, 0x50, 0x3e, 0x06, 0xbe, 0x09, 0x96, 0xfa, 0xb6, 0x61, 0xf0, - 0x7a, 0xec, 0xda, 0xbe, 0x45, 0xeb, 0xf3, 0x9c, 0x05, 0xb2, 0x3d, 0xd4, 0x4d, 0xf5, 0xa0, 0x0c, - 0x12, 0x3e, 0x04, 0xa0, 0x1f, 0xca, 0x81, 0x57, 0x07, 0xc5, 0x42, 0x9f, 0xd7, 0xa1, 0x58, 0x80, - 0xa3, 0x26, 0x0f, 0x25, 0xd8, 0x5a, 0x1f, 0x28, 0x60, 0xbd, 0x60, 0x8f, 0xc3, 0xef, 0xa5, 0x54, - 0xef, 0x66, 0x46, 0xf5, 0xae, 0x15, 0x84, 0x25, 0xa4, 0xaf, 0x0f, 0x16, 0x99, 0xef, 0xd0, 0xad, - 0x41, 0x00, 0x11, 0x27, 0xd8, 0x2b, 0xb2, 0xdc, 0x51, 0x12, 0x18, 0x1f, 0xc3, 0x57, 0xc6, 0x27, - 0xcd, 0xc5, 0x54, 0x1f, 0x4a, 0x73, 0xb6, 0x7e, 0x59, 0x02, 0x60, 0x8b, 0x38, 0x86, 0x3d, 0x32, - 0x89, 0x75, 0x11, 0xae, 0x65, 0x2b, 0xe5, 0x5a, 0x5a, 0xd2, 0x85, 0x88, 0xf2, 0x29, 0xb4, 0x2d, - 0xdb, 0x19, 0xdb, 0xf2, 0x8d, 0x09, 0x3c, 0xa7, 0xfb, 0x96, 0x7f, 0x94, 0xc1, 0x4a, 0x0c, 0x8e, - 0x8d, 0xcb, 0xbd, 0xd4, 0x12, 0xbe, 0x94, 0x59, 0xc2, 0x75, 0x49, 0xc8, 0x73, 0x73, 0x2e, 0x9f, - 0xbd, 0x83, 0x80, 0xef, 0x83, 0x25, 0x66, 0x55, 0x82, 0x42, 0xe0, 0x46, 0x68, 0xf6, 0xcc, 0x46, - 0x28, 0x12, 0xb2, 0xed, 0x14, 0x13, 0xca, 0x30, 0x17, 0x18, 0xaf, 0xb9, 0xe7, 0x6d, 0xbc, 0x5a, - 0x7f, 0x50, 0xc0, 0x52, 0xbc, 0x4c, 0x17, 0x60, 0x93, 0xba, 0x69, 0x9b, 0xd4, 0x38, 0xbd, 0x2e, - 0x0b, 0x7c, 0xd2, 0xdf, 0x2b, 0xc9, 0xac, 0xb9, 0x51, 0xda, 0x60, 0x2f, 0x54, 0x8e, 0xa1, 0xf7, - 0xb1, 0x27, 0x64, 0xf5, 0x52, 0xf0, 0x32, 0x15, 0xb4, 0xa1, 0xa8, 0x37, 0x65, 0xa9, 0x4a, 0xcf, - 0xd7, 0x52, 0x95, 0x3f, 0x1b, 0x4b, 0x75, 0x1f, 0xd4, 0xbc, 0xd0, 0x4c, 0x55, 0x38, 0xe5, 0x8d, - 0x49, 0xdb, 0x59, 0xf8, 0xa8, 0x88, 0x35, 0x72, 0x50, 0x11, 0x93, 0xcc, 0x3b, 0x55, 0x3f, 0x4f, - 0xef, 0xc4, 0xb6, 0xb0, 0x83, 0x7d, 0x8f, 0x68, 0xbc, 0xee, 0x6b, 0xf1, 0x16, 0xde, 0xe3, 0xad, - 0x48, 0xf4, 0xc2, 0x03, 0xb0, 0xee, 0xb8, 0xf6, 0xc0, 0x25, 0x9e, 0xb7, 0x45, 0xb0, 0x66, 0xe8, - 0x16, 0x09, 0x07, 0x10, 0xa8, 0xde, 0xb5, 0xf1, 0x49, 0x73, 0x7d, 0x4f, 0x0e, 0x41, 0x45, 0xb1, - 0xad, 0x3f, 0x57, 0xc0, 0xe5, 0xec, 0x89, 0x58, 0x60, 0x44, 0x94, 0x73, 0x19, 0x91, 0x57, 0x13, - 0x25, 0x1a, 0xb8, 0xb4, 0xc4, 0x3b, 0x7f, 0xae, 0x4c, 0x37, 0xc1, 0xb2, 0x30, 0x1e, 0x61, 0xa7, - 0xb0, 0x62, 0xd1, 0xf2, 0x1c, 0xa4, 0xbb, 0x51, 0x16, 0xcf, 0xec, 0x45, 0xec, 0x1a, 0x42, 0x92, - 0x4a, 0xda, 0x5e, 0x6c, 0x66, 0x01, 0x28, 0x1f, 0x03, 0x7b, 0x60, 0xc5, 0xb7, 0xf2, 0x54, 0x41, - 0xb9, 0x5c, 0x13, 0x54, 0x2b, 0x07, 0x79, 0x08, 0x92, 0xc5, 0xc1, 0x1f, 0xa7, 0x1c, 0xc7, 0x2c, - 0x3f, 0x08, 0x5e, 0x3a, 0xbd, 0xa2, 0xa7, 0xb6, 0x1c, 0xf0, 0x1e, 0x58, 0x74, 0xb9, 0xa1, 0x0c, - 0xb3, 0x0c, 0x4c, 0xd9, 0x57, 0x44, 0xd8, 0x22, 0x4a, 0x76, 0xa2, 0x34, 0x56, 0xe2, 0xa3, 0x6a, - 0xd3, 0xfa, 0xa8, 0xd6, 0x9f, 0x14, 0x00, 0xf3, 0x5b, 0x70, 0xe2, 0xcb, 0x7d, 0x2e, 0x22, 0x21, - 0x91, 0x9a, 0xdc, 0xe1, 0xdc, 0x9c, 0xec, 0x70, 0xe2, 0x13, 0x74, 0x3a, 0x8b, 0x23, 0x66, 0xe0, - 0x62, 0x2e, 0x66, 0xa6, 0xb0, 0x38, 0x71, 0x3e, 0xcf, 0x66, 0x71, 0x12, 0x3c, 0xa7, 0x5b, 0x9c, - 0x7f, 0x97, 0xc0, 0x4a, 0x0c, 0x9e, 0xda, 0xe2, 0x48, 0x42, 0xbe, 0xbc, 0x9c, 0x99, 0x7c, 0x39, - 0xc3, 0x6c, 0x47, 0x3c, 0x75, 0xff, 0x27, 0xb6, 0x23, 0x4e, 0xa8, 0xc0, 0x76, 0xfc, 0xae, 0x94, - 0xcc, 0xfa, 0x0b, 0x6f, 0x3b, 0x9e, 0xfd, 0x72, 0xa5, 0xf5, 0x97, 0x32, 0xb8, 0x9c, 0xdd, 0x82, - 0x29, 0x1d, 0x54, 0x26, 0xea, 0xe0, 0x1e, 0x58, 0x7d, 0xe4, 0x1b, 0xc6, 0x88, 0x4f, 0x43, 0x42, - 0x0c, 0x03, 0x05, 0xfd, 0xaa, 0x88, 0x5c, 0xfd, 0xbe, 0x04, 0x83, 0xa4, 0x91, 0x05, 0x9a, 0x5e, - 0x3e, 0x97, 0xa6, 0xe7, 0xd4, 0xa6, 0x72, 0x06, 0xb5, 0x91, 0xea, 0x73, 0xf5, 0x1c, 0xfa, 0x3c, - 0xb5, 0xa0, 0x4a, 0x8e, 0xab, 0x89, 0xef, 0xf0, 0xbf, 0x56, 0xc0, 0x9a, 0xfc, 0xf5, 0x19, 0x1a, - 0x60, 0xc9, 0xc4, 0x8f, 0x93, 0x97, 0x17, 0x93, 0x04, 0xc3, 0xa7, 0xba, 0xa1, 0x06, 0x5f, 0x77, - 0xd4, 0x77, 0x2c, 0xba, 0xeb, 0xee, 0x53, 0x57, 0xb7, 0x06, 0x81, 0xc0, 0xf6, 0x52, 0x5c, 0x28, - 0xc3, 0xdd, 0xfa, 0x58, 0x01, 0xeb, 0x05, 0x2a, 0x77, 0xb1, 0x99, 0xc0, 0x87, 0xa0, 0x66, 0xe2, - 0xc7, 0xfb, 0xbe, 0x3b, 0x08, 0x25, 0xf9, 0xec, 0xcf, 0xe1, 0x1b, 0xb9, 0x27, 0x58, 0x50, 0xc4, - 0xd7, 0xda, 0x05, 0xd7, 0x53, 0x83, 0x64, 0x9b, 0x86, 0x3c, 0xf2, 0x0d, 0xbe, 0x7f, 0x84, 0xa7, - 0xb8, 0x09, 0xe6, 0x1d, 0xec, 0x52, 0x3d, 0x32, 0xa3, 0xd5, 0xce, 0xe2, 0xf8, 0xa4, 0x39, 0xbf, - 0x17, 0x36, 0xa2, 0xb8, 0xbf, 0xf5, 0xab, 0x12, 0x58, 0x48, 0x90, 0x5c, 0x80, 0xbe, 0xbf, 0x95, - 0xd2, 0x77, 0xe9, 0x17, 0x93, 0xe4, 0xa8, 0x8a, 0x04, 0xbe, 0x97, 0x11, 0xf8, 0x6f, 0x4e, 0x22, - 0x3a, 0x5d, 0xe1, 0x3f, 0x29, 0x81, 0xd5, 0x04, 0x3a, 0x96, 0xf8, 0xef, 0xa4, 0x24, 0x7e, 0x23, - 0x23, 0xf1, 0x75, 0x59, 0xcc, 0x97, 0x1a, 0x3f, 0x59, 0xe3, 0xff, 0xa8, 0x80, 0xe5, 0xc4, 0xdc, - 0x5d, 0x80, 0xc8, 0x6f, 0xa5, 0x45, 0xbe, 0x39, 0xa1, 0x5e, 0x0a, 0x54, 0xfe, 0x49, 0x35, 0x95, - 0xf7, 0x17, 0x5e, 0xe6, 0x7f, 0x0e, 0x56, 0x87, 0xb6, 0xe1, 0x9b, 0xa4, 0x6b, 0x60, 0xdd, 0x0c, - 0x01, 0x4c, 0xc9, 0xd8, 0x24, 0xbe, 0x2c, 0xa5, 0x27, 0xae, 0xa7, 0x7b, 0x94, 0x58, 0xf4, 0x41, - 0x1c, 0x19, 0x6b, 0xf1, 0x03, 0x09, 0x1d, 0x92, 0x3e, 0x04, 0xbe, 0x0e, 0x16, 0x98, 0xa6, 0xea, - 0x7d, 0xb2, 0x83, 0xcd, 0xb0, 0xa6, 0xa2, 0xef, 0x03, 0xfb, 0x71, 0x17, 0x4a, 0xe2, 0xe0, 0x11, - 0x58, 0x71, 0x6c, 0xad, 0x87, 0x2d, 0x3c, 0x20, 0xec, 0xfc, 0xdf, 0xb3, 0x0d, 0xbd, 0x3f, 0xe2, - 0xf7, 0x0e, 0xf3, 0x9d, 0x37, 0xc2, 0x17, 0xd2, 0xbd, 0x3c, 0x84, 0x79, 0x76, 0x49, 0x33, 0xdf, - 0xcf, 0x32, 0x4a, 0x68, 0xe6, 0x3e, 0x67, 0xcd, 0xe5, 0xfe, 0x07, 0x40, 0x56, 0x5c, 0xe7, 0xfc, - 0xa0, 0x55, 0x74, 0xa3, 0x52, 0x3b, 0xd7, 0xd7, 0xa8, 0x4f, 0x2a, 0xe0, 0x4a, 0xee, 0x80, 0xfc, - 0x1c, 0xef, 0x34, 0x72, 0x6e, 0xa9, 0x7c, 0x06, 0xb7, 0xb4, 0x09, 0x96, 0xc5, 0x87, 0xb0, 0x8c, - 0xd9, 0x8a, 0xec, 0x68, 0x37, 0xdd, 0x8d, 0xb2, 0x78, 0xd9, 0x9d, 0x4a, 0xf5, 0x8c, 0x77, 0x2a, - 0xc9, 0x2c, 0xc4, 0xff, 0x6f, 0x04, 0x55, 0x97, 0xcf, 0x42, 0xfc, 0x1b, 0x47, 0x16, 0x0f, 0xbf, - 0x1b, 0x96, 0x54, 0xc4, 0x30, 0xc7, 0x19, 0x32, 0x35, 0x12, 0x11, 0x64, 0xd0, 0xcf, 0xf4, 0xb1, - 0xe7, 0x3d, 0xc9, 0xc7, 0x9e, 0x8d, 0x09, 0xa5, 0x3c, 0xbd, 0x55, 0xfc, 0x9b, 0x02, 0x5e, 0x28, - 0xdc, 0x03, 0x70, 0x33, 0xa5, 0xb3, 0xb7, 0x32, 0x3a, 0xfb, 0x62, 0x61, 0x60, 0x42, 0x6c, 0x4d, - 0xf9, 0x85, 0xc8, 0xdd, 0x89, 0x17, 0x22, 0x12, 0x17, 0x35, 0xf9, 0x66, 0xa4, 0xb3, 0xf1, 0xe4, - 0x69, 0x63, 0xe6, 0xc3, 0xa7, 0x8d, 0x99, 0x8f, 0x9e, 0x36, 0x66, 0x7e, 0x31, 0x6e, 0x28, 0x4f, - 0xc6, 0x0d, 0xe5, 0xc3, 0x71, 0x43, 0xf9, 0x68, 0xdc, 0x50, 0xfe, 0x39, 0x6e, 0x28, 0xbf, 0xfd, - 0xb8, 0x31, 0xf3, 0xb0, 0x34, 0xbc, 0xfd, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x6b, 0x01, - 0x7b, 0x12, 0x26, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -41,7 +41,7 @@ // depend on its stability. It is primarily for internal use by controllers. message ControllerRevision { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -54,7 +54,7 @@ // ControllerRevisionList is a resource containing a list of ControllerRevision objects. message ControllerRevisionList { - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -65,12 +65,12 @@ // DaemonSet represents the configuration of a daemon set. message DaemonSet { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetSpec spec = 2; @@ -78,7 +78,7 @@ // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetStatus status = 3; } @@ -107,7 +107,7 @@ // DaemonSetList is a collection of daemon sets. message DaemonSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -280,6 +280,7 @@ // The deployment strategy to use to replace existing pods with new ones. // +optional + // +patchStrategy=retainKeys optional DeploymentStrategy strategy = 4; // Minimum number of seconds for which a newly created pod should be ready @@ -365,12 +366,12 @@ message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetSpec spec = 2; @@ -378,7 +379,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetStatus status = 3; } @@ -407,7 +408,7 @@ // ReplicaSetList is a collection of ReplicaSets. message ReplicaSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,6 +32,8 @@ ) // +genclient +// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/autoscaling/v1.Scale +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/autoscaling/v1.Scale,result=k8s.io/api/autoscaling/v1.Scale // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // StatefulSet represents a set of pods with consistent identities. @@ -67,7 +69,7 @@ // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet @@ -93,13 +95,13 @@ // ordering constraints. When a scale operation is performed with this // strategy, new Pods will be created from the specification version indicated // by the StatefulSet's updateRevision. - RollingUpdateStatefulSetStrategyType = "RollingUpdate" + RollingUpdateStatefulSetStrategyType StatefulSetUpdateStrategyType = "RollingUpdate" // OnDeleteStatefulSetStrategyType triggers the legacy behavior. Version // tracking and ordered rolling restarts are disabled. Pods are recreated // from the StatefulSetSpec when they are manually deleted. When a scale // operation is performed with this strategy,specification version indicated // by the StatefulSet's currentRevision. - OnDeleteStatefulSetStrategyType = "OnDelete" + OnDeleteStatefulSetStrategyType StatefulSetUpdateStrategyType = "OnDelete" ) // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType. @@ -244,6 +246,8 @@ } // +genclient +// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/autoscaling/v1.Scale +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/autoscaling/v1.Scale,result=k8s.io/api/autoscaling/v1.Scale // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // Deployment enables declarative updates for Pods and ReplicaSets. @@ -279,7 +283,8 @@ // The deployment strategy to use to replace existing pods with new ones. // +optional - Strategy DeploymentStrategy `json:"strategy,omitempty" protobuf:"bytes,4,opt,name=strategy"` + // +patchStrategy=retainKeys + Strategy DeploymentStrategy `json:"strategy,omitempty" patchStrategy:"retainKeys" protobuf:"bytes,4,opt,name=strategy"` // Minimum number of seconds for which a newly created pod should be ready // without any of its container crashing, for it to be considered available. @@ -613,12 +618,12 @@ type DaemonSet struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -626,7 +631,7 @@ // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -644,7 +649,7 @@ type DaemonSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -653,6 +658,8 @@ } // +genclient +// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/autoscaling/v1.Scale +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/autoscaling/v1.Scale,result=k8s.io/api/autoscaling/v1.Scale // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ReplicaSet ensures that a specified number of pod replicas are running at any given time. @@ -661,12 +668,12 @@ // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ReplicaSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -674,7 +681,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ReplicaSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -685,7 +692,7 @@ type ReplicaSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -793,7 +800,7 @@ type ControllerRevision struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -810,7 +817,7 @@ type ControllerRevisionList struct { metav1.TypeMeta `json:",inline"` - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_ControllerRevision = map[string]string{ "": "ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "data": "Data is the serialized representation of the state.", "revision": "Revision indicates the revision of the state represented by Data.", } @@ -40,7 +40,7 @@ var map_ControllerRevisionList = map[string]string{ "": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "metadata": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of ControllerRevisions", } @@ -50,9 +50,9 @@ var map_DaemonSet = map[string]string{ "": "DaemonSet represents the configuration of a daemon set.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (DaemonSet) SwaggerDoc() map[string]string { @@ -74,7 +74,7 @@ var map_DaemonSetList = map[string]string{ "": "DaemonSetList is a collection of daemon sets.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "A list of daemon sets.", } @@ -96,7 +96,7 @@ } var map_DaemonSetStatus = map[string]string{ - "": "DaemonSetStatus represents the current status of a daemon set.", + "": "DaemonSetStatus represents the current status of a daemon set.", "currentNumberScheduled": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", "numberMisscheduled": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", "desiredNumberScheduled": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", @@ -202,9 +202,9 @@ var map_ReplicaSet = map[string]string{ "": "ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (ReplicaSet) SwaggerDoc() map[string]string { @@ -226,7 +226,7 @@ var map_ReplicaSetList = map[string]string{ "": "ReplicaSetList is a collection of ReplicaSets.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,8 +21,8 @@ package v1 import ( - core_v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" ) @@ -58,7 +58,7 @@ func (in *ControllerRevisionList) DeepCopyInto(out *ControllerRevisionList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ControllerRevision, len(*in)) @@ -136,7 +136,7 @@ func (in *DaemonSetList) DeepCopyInto(out *DaemonSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]DaemonSet, len(*in)) @@ -170,23 +170,15 @@ *out = *in if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -206,12 +198,8 @@ *out = *in if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions @@ -238,12 +226,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDaemonSet) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDaemonSet) + (*in).DeepCopyInto(*out) } return } @@ -308,7 +292,7 @@ func (in *DeploymentList) DeepCopyInto(out *DeploymentList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Deployment, len(*in)) @@ -342,41 +326,25 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.Strategy.DeepCopyInto(&out.Strategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.ProgressDeadlineSeconds != nil { in, out := &in.ProgressDeadlineSeconds, &out.ProgressDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -403,12 +371,8 @@ } if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -428,12 +392,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDeployment) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDeployment) + (*in).DeepCopyInto(*out) } return } @@ -497,7 +457,7 @@ func (in *ReplicaSetList) DeepCopyInto(out *ReplicaSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ReplicaSet, len(*in)) @@ -531,21 +491,13 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) return @@ -589,12 +541,8 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -614,21 +562,13 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } if in.MaxSurge != nil { in, out := &in.MaxSurge, &out.MaxSurge - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -648,12 +588,8 @@ *out = *in if in.Partition != nil { in, out := &in.Partition, &out.Partition - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -717,7 +653,7 @@ func (in *StatefulSetList) DeepCopyInto(out *StatefulSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]StatefulSet, len(*in)) @@ -751,26 +687,18 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) if in.VolumeClaimTemplates != nil { in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates - *out = make([]core_v1.PersistentVolumeClaim, len(*in)) + *out = make([]corev1.PersistentVolumeClaim, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -778,12 +706,8 @@ in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -803,12 +727,8 @@ *out = *in if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions @@ -835,12 +755,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateStatefulSetStrategy) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateStatefulSetStrategy) + (*in).DeepCopyInto(*out) } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/apps/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,56 +14,29 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta1/generated.proto - - It has these top-level messages: - ControllerRevision - ControllerRevisionList - Deployment - DeploymentCondition - DeploymentList - DeploymentRollback - DeploymentSpec - DeploymentStatus - DeploymentStrategy - RollbackConfig - RollingUpdateDeployment - RollingUpdateStatefulSetStrategy - Scale - ScaleSpec - ScaleStatus - StatefulSet - StatefulSetCondition - StatefulSetList - StatefulSetSpec - StatefulSetStatus - StatefulSetUpdateStrategy -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - -import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import io "io" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -76,96 +49,594 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *ControllerRevision) Reset() { *m = ControllerRevision{} } -func (*ControllerRevision) ProtoMessage() {} -func (*ControllerRevision) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ControllerRevisionList) Reset() { *m = ControllerRevisionList{} } -func (*ControllerRevisionList) ProtoMessage() {} -func (*ControllerRevisionList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *Deployment) Reset() { *m = Deployment{} } -func (*Deployment) ProtoMessage() {} -func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } -func (*DeploymentCondition) ProtoMessage() {} -func (*DeploymentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *DeploymentList) Reset() { *m = DeploymentList{} } -func (*DeploymentList) ProtoMessage() {} -func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } -func (*DeploymentRollback) ProtoMessage() {} -func (*DeploymentRollback) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } -func (*DeploymentSpec) ProtoMessage() {} -func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } -func (*DeploymentStatus) ProtoMessage() {} -func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } -func (*DeploymentStrategy) ProtoMessage() {} -func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } -func (*RollbackConfig) ProtoMessage() {} -func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (m *ControllerRevision) Reset() { *m = ControllerRevision{} } +func (*ControllerRevision) ProtoMessage() {} +func (*ControllerRevision) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{0} +} +func (m *ControllerRevision) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerRevision) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerRevision) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerRevision.Merge(m, src) +} +func (m *ControllerRevision) XXX_Size() int { + return m.Size() +} +func (m *ControllerRevision) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerRevision.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerRevision proto.InternalMessageInfo + +func (m *ControllerRevisionList) Reset() { *m = ControllerRevisionList{} } +func (*ControllerRevisionList) ProtoMessage() {} +func (*ControllerRevisionList) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{1} +} +func (m *ControllerRevisionList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerRevisionList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerRevisionList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerRevisionList.Merge(m, src) +} +func (m *ControllerRevisionList) XXX_Size() int { + return m.Size() +} +func (m *ControllerRevisionList) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerRevisionList.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerRevisionList proto.InternalMessageInfo + +func (m *Deployment) Reset() { *m = Deployment{} } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{2} +} +func (m *Deployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Deployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Deployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_Deployment.Merge(m, src) +} +func (m *Deployment) XXX_Size() int { + return m.Size() +} +func (m *Deployment) XXX_DiscardUnknown() { + xxx_messageInfo_Deployment.DiscardUnknown(m) +} + +var xxx_messageInfo_Deployment proto.InternalMessageInfo + +func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } +func (*DeploymentCondition) ProtoMessage() {} +func (*DeploymentCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{3} +} +func (m *DeploymentCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCondition.Merge(m, src) +} +func (m *DeploymentCondition) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentCondition proto.InternalMessageInfo + +func (m *DeploymentList) Reset() { *m = DeploymentList{} } +func (*DeploymentList) ProtoMessage() {} +func (*DeploymentList) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{4} +} +func (m *DeploymentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentList.Merge(m, src) +} +func (m *DeploymentList) XXX_Size() int { + return m.Size() +} +func (m *DeploymentList) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentList.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentList proto.InternalMessageInfo + +func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } +func (*DeploymentRollback) ProtoMessage() {} +func (*DeploymentRollback) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{5} +} +func (m *DeploymentRollback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentRollback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentRollback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentRollback.Merge(m, src) +} +func (m *DeploymentRollback) XXX_Size() int { + return m.Size() +} +func (m *DeploymentRollback) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentRollback.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentRollback proto.InternalMessageInfo + +func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } +func (*DeploymentSpec) ProtoMessage() {} +func (*DeploymentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{6} +} +func (m *DeploymentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentSpec.Merge(m, src) +} +func (m *DeploymentSpec) XXX_Size() int { + return m.Size() +} +func (m *DeploymentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentSpec proto.InternalMessageInfo + +func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } +func (*DeploymentStatus) ProtoMessage() {} +func (*DeploymentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{7} +} +func (m *DeploymentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStatus.Merge(m, src) +} +func (m *DeploymentStatus) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStatus proto.InternalMessageInfo + +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{8} +} +func (m *DeploymentStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStrategy.Merge(m, src) +} +func (m *DeploymentStrategy) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStrategy proto.InternalMessageInfo + +func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } +func (*RollbackConfig) ProtoMessage() {} +func (*RollbackConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{9} +} +func (m *RollbackConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollbackConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollbackConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollbackConfig.Merge(m, src) +} +func (m *RollbackConfig) XXX_Size() int { + return m.Size() +} +func (m *RollbackConfig) XXX_DiscardUnknown() { + xxx_messageInfo_RollbackConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_RollbackConfig proto.InternalMessageInfo func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } func (*RollingUpdateDeployment) ProtoMessage() {} func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{10} + return fileDescriptor_2a07313e8f66e805, []int{10} +} +func (m *RollingUpdateDeployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } +func (m *RollingUpdateDeployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDeployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDeployment.Merge(m, src) +} +func (m *RollingUpdateDeployment) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateDeployment) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDeployment.DiscardUnknown(m) +} + +var xxx_messageInfo_RollingUpdateDeployment proto.InternalMessageInfo func (m *RollingUpdateStatefulSetStrategy) Reset() { *m = RollingUpdateStatefulSetStrategy{} } func (*RollingUpdateStatefulSetStrategy) ProtoMessage() {} func (*RollingUpdateStatefulSetStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{11} + return fileDescriptor_2a07313e8f66e805, []int{11} +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateStatefulSetStrategy.Merge(m, src) +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateStatefulSetStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateStatefulSetStrategy.DiscardUnknown(m) } -func (m *Scale) Reset() { *m = Scale{} } -func (*Scale) ProtoMessage() {} -func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +var xxx_messageInfo_RollingUpdateStatefulSetStrategy proto.InternalMessageInfo -func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } -func (*ScaleSpec) ProtoMessage() {} -func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +func (m *Scale) Reset() { *m = Scale{} } +func (*Scale) ProtoMessage() {} +func (*Scale) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{12} +} +func (m *Scale) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Scale) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Scale) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scale.Merge(m, src) +} +func (m *Scale) XXX_Size() int { + return m.Size() +} +func (m *Scale) XXX_DiscardUnknown() { + xxx_messageInfo_Scale.DiscardUnknown(m) +} -func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } -func (*ScaleStatus) ProtoMessage() {} -func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +var xxx_messageInfo_Scale proto.InternalMessageInfo -func (m *StatefulSet) Reset() { *m = StatefulSet{} } -func (*StatefulSet) ProtoMessage() {} -func (*StatefulSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } +func (*ScaleSpec) ProtoMessage() {} +func (*ScaleSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{13} +} +func (m *ScaleSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleSpec.Merge(m, src) +} +func (m *ScaleSpec) XXX_Size() int { + return m.Size() +} +func (m *ScaleSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleSpec.DiscardUnknown(m) +} -func (m *StatefulSetCondition) Reset() { *m = StatefulSetCondition{} } -func (*StatefulSetCondition) ProtoMessage() {} -func (*StatefulSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +var xxx_messageInfo_ScaleSpec proto.InternalMessageInfo -func (m *StatefulSetList) Reset() { *m = StatefulSetList{} } -func (*StatefulSetList) ProtoMessage() {} -func (*StatefulSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } +func (*ScaleStatus) ProtoMessage() {} +func (*ScaleStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{14} +} +func (m *ScaleStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleStatus.Merge(m, src) +} +func (m *ScaleStatus) XXX_Size() int { + return m.Size() +} +func (m *ScaleStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleStatus.DiscardUnknown(m) +} -func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } -func (*StatefulSetSpec) ProtoMessage() {} -func (*StatefulSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +var xxx_messageInfo_ScaleStatus proto.InternalMessageInfo -func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } -func (*StatefulSetStatus) ProtoMessage() {} -func (*StatefulSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +func (m *StatefulSet) Reset() { *m = StatefulSet{} } +func (*StatefulSet) ProtoMessage() {} +func (*StatefulSet) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{15} +} +func (m *StatefulSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSet.Merge(m, src) +} +func (m *StatefulSet) XXX_Size() int { + return m.Size() +} +func (m *StatefulSet) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSet.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSet proto.InternalMessageInfo + +func (m *StatefulSetCondition) Reset() { *m = StatefulSetCondition{} } +func (*StatefulSetCondition) ProtoMessage() {} +func (*StatefulSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{16} +} +func (m *StatefulSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetCondition.Merge(m, src) +} +func (m *StatefulSetCondition) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetCondition proto.InternalMessageInfo + +func (m *StatefulSetList) Reset() { *m = StatefulSetList{} } +func (*StatefulSetList) ProtoMessage() {} +func (*StatefulSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{17} +} +func (m *StatefulSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetList.Merge(m, src) +} +func (m *StatefulSetList) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetList) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetList proto.InternalMessageInfo + +func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } +func (*StatefulSetSpec) ProtoMessage() {} +func (*StatefulSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{18} +} +func (m *StatefulSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetSpec.Merge(m, src) +} +func (m *StatefulSetSpec) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetSpec proto.InternalMessageInfo + +func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } +func (*StatefulSetStatus) ProtoMessage() {} +func (*StatefulSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2a07313e8f66e805, []int{19} +} +func (m *StatefulSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetStatus.Merge(m, src) +} +func (m *StatefulSetStatus) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetStatus proto.InternalMessageInfo func (m *StatefulSetUpdateStrategy) Reset() { *m = StatefulSetUpdateStrategy{} } func (*StatefulSetUpdateStrategy) ProtoMessage() {} func (*StatefulSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{20} + return fileDescriptor_2a07313e8f66e805, []int{20} +} +func (m *StatefulSetUpdateStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetUpdateStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetUpdateStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetUpdateStrategy.Merge(m, src) +} +func (m *StatefulSetUpdateStrategy) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetUpdateStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetUpdateStrategy.DiscardUnknown(m) } +var xxx_messageInfo_StatefulSetUpdateStrategy proto.InternalMessageInfo + func init() { proto.RegisterType((*ControllerRevision)(nil), "k8s.io.api.apps.v1beta1.ControllerRevision") proto.RegisterType((*ControllerRevisionList)(nil), "k8s.io.api.apps.v1beta1.ControllerRevisionList") @@ -173,6 +644,7 @@ proto.RegisterType((*DeploymentCondition)(nil), "k8s.io.api.apps.v1beta1.DeploymentCondition") proto.RegisterType((*DeploymentList)(nil), "k8s.io.api.apps.v1beta1.DeploymentList") proto.RegisterType((*DeploymentRollback)(nil), "k8s.io.api.apps.v1beta1.DeploymentRollback") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.apps.v1beta1.DeploymentRollback.UpdatedAnnotationsEntry") proto.RegisterType((*DeploymentSpec)(nil), "k8s.io.api.apps.v1beta1.DeploymentSpec") proto.RegisterType((*DeploymentStatus)(nil), "k8s.io.api.apps.v1beta1.DeploymentStatus") proto.RegisterType((*DeploymentStrategy)(nil), "k8s.io.api.apps.v1beta1.DeploymentStrategy") @@ -182,6 +654,7 @@ proto.RegisterType((*Scale)(nil), "k8s.io.api.apps.v1beta1.Scale") proto.RegisterType((*ScaleSpec)(nil), "k8s.io.api.apps.v1beta1.ScaleSpec") proto.RegisterType((*ScaleStatus)(nil), "k8s.io.api.apps.v1beta1.ScaleStatus") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.apps.v1beta1.ScaleStatus.SelectorEntry") proto.RegisterType((*StatefulSet)(nil), "k8s.io.api.apps.v1beta1.StatefulSet") proto.RegisterType((*StatefulSetCondition)(nil), "k8s.io.api.apps.v1beta1.StatefulSetCondition") proto.RegisterType((*StatefulSetList)(nil), "k8s.io.api.apps.v1beta1.StatefulSetList") @@ -189,10 +662,135 @@ proto.RegisterType((*StatefulSetStatus)(nil), "k8s.io.api.apps.v1beta1.StatefulSetStatus") proto.RegisterType((*StatefulSetUpdateStrategy)(nil), "k8s.io.api.apps.v1beta1.StatefulSetUpdateStrategy") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta1/generated.proto", fileDescriptor_2a07313e8f66e805) +} + +var fileDescriptor_2a07313e8f66e805 = []byte{ + // 1855 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6f, 0x24, 0x47, + 0x15, 0x77, 0x8f, 0x67, 0xec, 0xf1, 0x73, 0x3c, 0xde, 0x2d, 0x9b, 0xf5, 0xc4, 0x81, 0xb1, 0x35, + 0x44, 0x89, 0xf3, 0xe1, 0x9e, 0xac, 0x13, 0xa2, 0x64, 0x17, 0x45, 0x78, 0xbc, 0x4b, 0xb2, 0x91, + 0x8d, 0x9d, 0xb2, 0x1d, 0x44, 0x00, 0x29, 0x35, 0x3d, 0xb5, 0xb3, 0x1d, 0xf7, 0x97, 0xba, 0xab, + 0x87, 0x1d, 0x71, 0xe1, 0x0f, 0x40, 0x0a, 0x67, 0xfe, 0x0a, 0x8e, 0x08, 0x6e, 0x9c, 0xf6, 0x82, + 0x14, 0x71, 0x21, 0x27, 0x8b, 0x9d, 0x5c, 0x81, 0x1b, 0x97, 0x95, 0x90, 0x50, 0x55, 0x57, 0x7f, + 0x77, 0xdb, 0x6d, 0xa4, 0xb5, 0x04, 0xb7, 0xe9, 0x7a, 0xef, 0xfd, 0x5e, 0x7d, 0xbc, 0xaf, 0xdf, + 0xc0, 0x0f, 0xce, 0xde, 0xf3, 0x54, 0xdd, 0xee, 0x9d, 0xf9, 0x03, 0xea, 0x5a, 0x94, 0x51, 0xaf, + 0x37, 0xa6, 0xd6, 0xd0, 0x76, 0x7b, 0x52, 0x40, 0x1c, 0xbd, 0x47, 0x1c, 0xc7, 0xeb, 0x8d, 0x6f, + 0x0f, 0x28, 0x23, 0xb7, 0x7b, 0x23, 0x6a, 0x51, 0x97, 0x30, 0x3a, 0x54, 0x1d, 0xd7, 0x66, 0x36, + 0x5a, 0x0b, 0x14, 0x55, 0xe2, 0xe8, 0x2a, 0x57, 0x54, 0xa5, 0xe2, 0xfa, 0xf6, 0x48, 0x67, 0x8f, + 0xfc, 0x81, 0xaa, 0xd9, 0x66, 0x6f, 0x64, 0x8f, 0xec, 0x9e, 0xd0, 0x1f, 0xf8, 0x0f, 0xc5, 0x97, + 0xf8, 0x10, 0xbf, 0x02, 0x9c, 0xf5, 0x6e, 0xc2, 0xa1, 0x66, 0xbb, 0xb4, 0x37, 0xce, 0xf9, 0x5a, + 0x7f, 0x27, 0xd6, 0x31, 0x89, 0xf6, 0x48, 0xb7, 0xa8, 0x3b, 0xe9, 0x39, 0x67, 0x23, 0xbe, 0xe0, + 0xf5, 0x4c, 0xca, 0x48, 0x91, 0x55, 0xaf, 0xcc, 0xca, 0xf5, 0x2d, 0xa6, 0x9b, 0x34, 0x67, 0xf0, + 0xee, 0x65, 0x06, 0x9e, 0xf6, 0x88, 0x9a, 0x24, 0x67, 0xf7, 0x76, 0x99, 0x9d, 0xcf, 0x74, 0xa3, + 0xa7, 0x5b, 0xcc, 0x63, 0x6e, 0xd6, 0xa8, 0xfb, 0x2f, 0x05, 0xd0, 0x9e, 0x6d, 0x31, 0xd7, 0x36, + 0x0c, 0xea, 0x62, 0x3a, 0xd6, 0x3d, 0xdd, 0xb6, 0xd0, 0xe7, 0xd0, 0xe4, 0xe7, 0x19, 0x12, 0x46, + 0xda, 0xca, 0xa6, 0xb2, 0xb5, 0xb8, 0xf3, 0x96, 0x1a, 0xdf, 0x74, 0x04, 0xaf, 0x3a, 0x67, 0x23, + 0xbe, 0xe0, 0xa9, 0x5c, 0x5b, 0x1d, 0xdf, 0x56, 0x0f, 0x07, 0x5f, 0x50, 0x8d, 0x1d, 0x50, 0x46, + 0xfa, 0xe8, 0xc9, 0xf9, 0xc6, 0xcc, 0xf4, 0x7c, 0x03, 0xe2, 0x35, 0x1c, 0xa1, 0xa2, 0x43, 0xa8, + 0x0b, 0xf4, 0x9a, 0x40, 0xdf, 0x2e, 0x45, 0x97, 0x87, 0x56, 0x31, 0xf9, 0xc5, 0xfd, 0xc7, 0x8c, + 0x5a, 0x7c, 0x7b, 0xfd, 0x17, 0x24, 0x74, 0xfd, 0x1e, 0x61, 0x04, 0x0b, 0x20, 0xf4, 0x26, 0x34, + 0x5d, 0xb9, 0xfd, 0xf6, 0xec, 0xa6, 0xb2, 0x35, 0xdb, 0xbf, 0x21, 0xb5, 0x9a, 0xe1, 0xb1, 0x70, + 0xa4, 0xd1, 0x7d, 0xa2, 0xc0, 0xad, 0xfc, 0xb9, 0xf7, 0x75, 0x8f, 0xa1, 0x9f, 0xe5, 0xce, 0xae, + 0x56, 0x3b, 0x3b, 0xb7, 0x16, 0x27, 0x8f, 0x1c, 0x87, 0x2b, 0x89, 0x73, 0x1f, 0x41, 0x43, 0x67, + 0xd4, 0xf4, 0xda, 0xb5, 0xcd, 0xd9, 0xad, 0xc5, 0x9d, 0x37, 0xd4, 0x92, 0x00, 0x56, 0xf3, 0xbb, + 0xeb, 0x2f, 0x49, 0xdc, 0xc6, 0x03, 0x8e, 0x80, 0x03, 0xa0, 0xee, 0xaf, 0x6b, 0x00, 0xf7, 0xa8, + 0x63, 0xd8, 0x13, 0x93, 0x5a, 0xec, 0x1a, 0x9e, 0xee, 0x01, 0xd4, 0x3d, 0x87, 0x6a, 0xf2, 0xe9, + 0x5e, 0x2d, 0x3d, 0x41, 0xbc, 0xa9, 0x63, 0x87, 0x6a, 0xf1, 0xa3, 0xf1, 0x2f, 0x2c, 0x20, 0xd0, + 0x27, 0x30, 0xe7, 0x31, 0xc2, 0x7c, 0x4f, 0x3c, 0xd9, 0xe2, 0xce, 0x6b, 0x55, 0xc0, 0x84, 0x41, + 0xbf, 0x25, 0xe1, 0xe6, 0x82, 0x6f, 0x2c, 0x81, 0xba, 0x7f, 0x9d, 0x85, 0x95, 0x58, 0x79, 0xcf, + 0xb6, 0x86, 0x3a, 0xe3, 0x21, 0x7d, 0x17, 0xea, 0x6c, 0xe2, 0x50, 0x71, 0x27, 0x0b, 0xfd, 0x57, + 0xc3, 0xcd, 0x9c, 0x4c, 0x1c, 0xfa, 0xec, 0x7c, 0x63, 0xad, 0xc0, 0x84, 0x8b, 0xb0, 0x30, 0x42, + 0xfb, 0xd1, 0x3e, 0x6b, 0xc2, 0xfc, 0x9d, 0xb4, 0xf3, 0x67, 0xe7, 0x1b, 0x05, 0x05, 0x44, 0x8d, + 0x90, 0xd2, 0x5b, 0x44, 0x5f, 0x40, 0xcb, 0x20, 0x1e, 0x3b, 0x75, 0x86, 0x84, 0xd1, 0x13, 0xdd, + 0xa4, 0xed, 0x39, 0x71, 0xfa, 0xd7, 0xab, 0x3d, 0x14, 0xb7, 0xe8, 0xdf, 0x92, 0x3b, 0x68, 0xed, + 0xa7, 0x90, 0x70, 0x06, 0x19, 0x8d, 0x01, 0xf1, 0x95, 0x13, 0x97, 0x58, 0x5e, 0x70, 0x2a, 0xee, + 0x6f, 0xfe, 0xca, 0xfe, 0xd6, 0xa5, 0x3f, 0xb4, 0x9f, 0x43, 0xc3, 0x05, 0x1e, 0xd0, 0x2b, 0x30, + 0xe7, 0x52, 0xe2, 0xd9, 0x56, 0xbb, 0x2e, 0x6e, 0x2c, 0x7a, 0x2e, 0x2c, 0x56, 0xb1, 0x94, 0xa2, + 0xd7, 0x60, 0xde, 0xa4, 0x9e, 0x47, 0x46, 0xb4, 0xdd, 0x10, 0x8a, 0xcb, 0x52, 0x71, 0xfe, 0x20, + 0x58, 0xc6, 0xa1, 0xbc, 0xfb, 0x7b, 0x05, 0x5a, 0xf1, 0x33, 0x5d, 0x43, 0xae, 0x7e, 0x94, 0xce, + 0xd5, 0xef, 0x56, 0x08, 0xce, 0x92, 0x1c, 0xfd, 0x7b, 0x0d, 0x50, 0xac, 0x84, 0x6d, 0xc3, 0x18, + 0x10, 0xed, 0x0c, 0x6d, 0x42, 0xdd, 0x22, 0x66, 0x18, 0x93, 0x51, 0x82, 0xfc, 0x88, 0x98, 0x14, + 0x0b, 0x09, 0xfa, 0x52, 0x01, 0xe4, 0x8b, 0xd7, 0x1c, 0xee, 0x5a, 0x96, 0xcd, 0x08, 0xbf, 0xe0, + 0x70, 0x43, 0x7b, 0x15, 0x36, 0x14, 0xfa, 0x52, 0x4f, 0x73, 0x28, 0xf7, 0x2d, 0xe6, 0x4e, 0xe2, + 0x87, 0xcd, 0x2b, 0xe0, 0x02, 0xd7, 0xe8, 0xa7, 0x00, 0xae, 0xc4, 0x3c, 0xb1, 0x65, 0xda, 0x96, + 0xd7, 0x80, 0xd0, 0xfd, 0x9e, 0x6d, 0x3d, 0xd4, 0x47, 0x71, 0x61, 0xc1, 0x11, 0x04, 0x4e, 0xc0, + 0xad, 0xdf, 0x87, 0xb5, 0x92, 0x7d, 0xa2, 0x1b, 0x30, 0x7b, 0x46, 0x27, 0xc1, 0x55, 0x61, 0xfe, + 0x13, 0xad, 0x42, 0x63, 0x4c, 0x0c, 0x9f, 0x06, 0x39, 0x89, 0x83, 0x8f, 0x3b, 0xb5, 0xf7, 0x94, + 0xee, 0xef, 0x1a, 0xc9, 0x48, 0xe1, 0xf5, 0x06, 0x6d, 0xf1, 0xf6, 0xe0, 0x18, 0xba, 0x46, 0x3c, + 0x81, 0xd1, 0xe8, 0xbf, 0x10, 0xb4, 0x86, 0x60, 0x0d, 0x47, 0x52, 0xf4, 0x73, 0x68, 0x7a, 0xd4, + 0xa0, 0x1a, 0xb3, 0x5d, 0x59, 0xe2, 0xde, 0xae, 0x18, 0x53, 0x64, 0x40, 0x8d, 0x63, 0x69, 0x1a, + 0xc0, 0x87, 0x5f, 0x38, 0x82, 0x44, 0x9f, 0x40, 0x93, 0x51, 0xd3, 0x31, 0x08, 0xa3, 0xf2, 0xf6, + 0x52, 0x71, 0xc5, 0x6b, 0x07, 0x07, 0x3b, 0xb2, 0x87, 0x27, 0x52, 0x4d, 0x54, 0xcf, 0x28, 0x4e, + 0xc3, 0x55, 0x1c, 0xc1, 0xa0, 0x9f, 0x40, 0xd3, 0x63, 0xbc, 0xab, 0x8f, 0x26, 0x22, 0xdb, 0x2e, + 0x6a, 0x2b, 0xc9, 0x3a, 0x1a, 0x98, 0xc4, 0xd0, 0xe1, 0x0a, 0x8e, 0xe0, 0xd0, 0x2e, 0x2c, 0x9b, + 0xba, 0x85, 0x29, 0x19, 0x4e, 0x8e, 0xa9, 0x66, 0x5b, 0x43, 0x4f, 0xa4, 0x69, 0xa3, 0xbf, 0x26, + 0x8d, 0x96, 0x0f, 0xd2, 0x62, 0x9c, 0xd5, 0x47, 0xfb, 0xb0, 0x1a, 0xb6, 0xdd, 0x8f, 0x74, 0x8f, + 0xd9, 0xee, 0x64, 0x5f, 0x37, 0x75, 0x26, 0x6a, 0x5e, 0xa3, 0xdf, 0x9e, 0x9e, 0x6f, 0xac, 0xe2, + 0x02, 0x39, 0x2e, 0xb4, 0xe2, 0x75, 0xc5, 0x21, 0xbe, 0x47, 0x87, 0xa2, 0x86, 0x35, 0xe3, 0xba, + 0x72, 0x24, 0x56, 0xb1, 0x94, 0xa2, 0x1f, 0xa7, 0xc2, 0xb4, 0x79, 0xb5, 0x30, 0x6d, 0x95, 0x87, + 0x28, 0x3a, 0x85, 0x35, 0xc7, 0xb5, 0x47, 0x2e, 0xf5, 0xbc, 0x7b, 0x94, 0x0c, 0x0d, 0xdd, 0xa2, + 0xe1, 0xcd, 0x2c, 0x88, 0x13, 0xbd, 0x34, 0x3d, 0xdf, 0x58, 0x3b, 0x2a, 0x56, 0xc1, 0x65, 0xb6, + 0xdd, 0x3f, 0xd5, 0xe1, 0x46, 0xb6, 0xc7, 0xa1, 0x8f, 0x01, 0xd9, 0x03, 0x8f, 0xba, 0x63, 0x3a, + 0xfc, 0x30, 0x18, 0xdc, 0xf8, 0x74, 0xa3, 0x88, 0xe9, 0x26, 0xca, 0xdb, 0xc3, 0x9c, 0x06, 0x2e, + 0xb0, 0x0a, 0xe6, 0x23, 0x99, 0x00, 0x35, 0xb1, 0xd1, 0xc4, 0x7c, 0x94, 0x4b, 0x82, 0x5d, 0x58, + 0x96, 0xb9, 0x1f, 0x0a, 0x45, 0xb0, 0x26, 0xde, 0xfd, 0x34, 0x2d, 0xc6, 0x59, 0x7d, 0x74, 0x17, + 0x96, 0x5c, 0x1e, 0x07, 0x11, 0xc0, 0xbc, 0x00, 0xf8, 0x96, 0x04, 0x58, 0xc2, 0x49, 0x21, 0x4e, + 0xeb, 0xa2, 0x0f, 0xe1, 0x26, 0x19, 0x13, 0xdd, 0x20, 0x03, 0x83, 0x46, 0x00, 0x75, 0x01, 0xf0, + 0xa2, 0x04, 0xb8, 0xb9, 0x9b, 0x55, 0xc0, 0x79, 0x1b, 0x74, 0x00, 0x2b, 0xbe, 0x95, 0x87, 0x0a, + 0x82, 0xf8, 0x25, 0x09, 0xb5, 0x72, 0x9a, 0x57, 0xc1, 0x45, 0x76, 0xe8, 0x73, 0x00, 0x2d, 0xec, + 0xea, 0x5e, 0x7b, 0x4e, 0x94, 0xe1, 0x37, 0x2b, 0x24, 0x5b, 0x34, 0x0a, 0xc4, 0x25, 0x30, 0x5a, + 0xf2, 0x70, 0x02, 0x13, 0xdd, 0x81, 0x96, 0x66, 0x1b, 0x86, 0x88, 0xfc, 0x3d, 0xdb, 0xb7, 0x98, + 0x08, 0xde, 0x46, 0x1f, 0xf1, 0x66, 0xbf, 0x97, 0x92, 0xe0, 0x8c, 0x66, 0xf7, 0x8f, 0x4a, 0xb2, + 0xcd, 0x84, 0xe9, 0x8c, 0xee, 0xa4, 0x46, 0x9f, 0x57, 0x32, 0xa3, 0xcf, 0xad, 0xbc, 0x45, 0x62, + 0xf2, 0xd1, 0x61, 0x89, 0x07, 0xbf, 0x6e, 0x8d, 0x82, 0x07, 0x97, 0x25, 0xf1, 0xad, 0x0b, 0x53, + 0x29, 0xd2, 0x4e, 0x34, 0xc6, 0x9b, 0xe2, 0xcd, 0x93, 0x42, 0x9c, 0x46, 0xee, 0x7e, 0x00, 0xad, + 0x74, 0x1e, 0xa6, 0x66, 0x7a, 0xe5, 0xd2, 0x99, 0xfe, 0x1b, 0x05, 0xd6, 0x4a, 0xbc, 0x23, 0x03, + 0x5a, 0x26, 0x79, 0x9c, 0x78, 0xe6, 0x4b, 0x67, 0x63, 0xce, 0x9a, 0xd4, 0x80, 0x35, 0xa9, 0x0f, + 0x2c, 0x76, 0xe8, 0x1e, 0x33, 0x57, 0xb7, 0x46, 0xc1, 0x3b, 0x1c, 0xa4, 0xb0, 0x70, 0x06, 0x1b, + 0x7d, 0x06, 0x4d, 0x93, 0x3c, 0x3e, 0xf6, 0xdd, 0x51, 0xd1, 0x7d, 0x55, 0xf3, 0x23, 0xfa, 0xc7, + 0x81, 0x44, 0xc1, 0x11, 0x5e, 0xf7, 0x10, 0x36, 0x53, 0x87, 0xe4, 0xa5, 0x82, 0x3e, 0xf4, 0x8d, + 0x63, 0x1a, 0x3f, 0xf8, 0x1b, 0xb0, 0xe0, 0x10, 0x97, 0xe9, 0x51, 0xb9, 0x68, 0xf4, 0x97, 0xa6, + 0xe7, 0x1b, 0x0b, 0x47, 0xe1, 0x22, 0x8e, 0xe5, 0xdd, 0x7f, 0x2b, 0xd0, 0x38, 0xd6, 0x88, 0x41, + 0xaf, 0x81, 0x3a, 0xdc, 0x4b, 0x51, 0x87, 0x6e, 0x69, 0x10, 0x89, 0xfd, 0x94, 0xb2, 0x86, 0xfd, + 0x0c, 0x6b, 0x78, 0xf9, 0x12, 0x9c, 0x8b, 0x09, 0xc3, 0xfb, 0xb0, 0x10, 0xb9, 0x4b, 0x55, 0x49, + 0xe5, 0xb2, 0x2a, 0xd9, 0xfd, 0x6d, 0x0d, 0x16, 0x13, 0x2e, 0xae, 0x66, 0xcd, 0xaf, 0x3b, 0x31, + 0x68, 0xf0, 0x4a, 0xb2, 0x53, 0xe5, 0x20, 0x6a, 0x38, 0x54, 0x04, 0xf3, 0x5b, 0xdc, 0xbd, 0xf3, + 0xb3, 0xc6, 0x07, 0xd0, 0x62, 0xc4, 0x1d, 0x51, 0x16, 0xca, 0xc4, 0x85, 0x2d, 0xc4, 0xe4, 0xe1, + 0x24, 0x25, 0xc5, 0x19, 0xed, 0xf5, 0xbb, 0xb0, 0x94, 0x72, 0x76, 0xa5, 0x21, 0xec, 0x4b, 0x7e, + 0x39, 0x71, 0x70, 0x5e, 0x43, 0x74, 0x7d, 0x9c, 0x8a, 0xae, 0xad, 0xf2, 0xcb, 0x4c, 0xa4, 0x4c, + 0x59, 0x8c, 0xe1, 0x4c, 0x8c, 0xbd, 0x5e, 0x09, 0xed, 0xe2, 0x48, 0xfb, 0x47, 0x0d, 0x56, 0x13, + 0xda, 0x31, 0x37, 0xfd, 0x7e, 0xaa, 0x40, 0x6f, 0x65, 0x0a, 0x74, 0xbb, 0xc8, 0xe6, 0xb9, 0x91, + 0xd3, 0x62, 0xc2, 0x38, 0xfb, 0xbf, 0x48, 0x18, 0xff, 0xa0, 0xc0, 0x72, 0xe2, 0xee, 0xae, 0x81, + 0x31, 0x3e, 0x48, 0x33, 0xc6, 0x97, 0xab, 0x04, 0x4d, 0x09, 0x65, 0xfc, 0x73, 0x23, 0xb5, 0xf9, + 0xff, 0x7b, 0x12, 0xf3, 0x4b, 0x58, 0x1d, 0xdb, 0x86, 0x6f, 0xd2, 0x3d, 0x83, 0xe8, 0x66, 0xa8, + 0xc0, 0x87, 0xbe, 0xd9, 0xec, 0x1f, 0x43, 0x11, 0x3c, 0x75, 0x3d, 0xdd, 0x63, 0xd4, 0x62, 0x9f, + 0xc6, 0x96, 0xfd, 0x6f, 0x4b, 0x27, 0xab, 0x9f, 0x16, 0xc0, 0xe1, 0x42, 0x27, 0xe8, 0x7b, 0xb0, + 0xc8, 0x07, 0x66, 0x5d, 0xa3, 0x9c, 0x7b, 0xcb, 0xc0, 0x5a, 0x91, 0x40, 0x8b, 0xc7, 0xb1, 0x08, + 0x27, 0xf5, 0xd0, 0x23, 0x58, 0x71, 0xec, 0xe1, 0x01, 0xb1, 0xc8, 0x88, 0xf2, 0x31, 0xe3, 0xc8, + 0x36, 0x74, 0x6d, 0x22, 0x98, 0xcd, 0x42, 0xff, 0xdd, 0x70, 0xb8, 0x3c, 0xca, 0xab, 0x3c, 0xe3, + 0x14, 0x21, 0xbf, 0x2c, 0x92, 0xba, 0x08, 0x12, 0xb9, 0xd0, 0xf2, 0x65, 0xbb, 0x97, 0x44, 0x2f, + 0xf8, 0x0b, 0x67, 0xa7, 0x4a, 0x84, 0x9d, 0xa6, 0x2c, 0xe3, 0xea, 0x9f, 0x5e, 0xc7, 0x19, 0x0f, + 0xa5, 0xc4, 0xad, 0xf9, 0xdf, 0x10, 0xb7, 0xee, 0x3f, 0xeb, 0x70, 0x33, 0x57, 0x2a, 0xd1, 0x0f, + 0x2f, 0x60, 0x38, 0xb7, 0x9e, 0x1b, 0xbb, 0xc9, 0x51, 0x93, 0xd9, 0x2b, 0x50, 0x93, 0x5d, 0x58, + 0xd6, 0x7c, 0xd7, 0xa5, 0x16, 0xcb, 0x10, 0x93, 0x88, 0x1a, 0xed, 0xa5, 0xc5, 0x38, 0xab, 0x5f, + 0xc4, 0xae, 0x1a, 0x57, 0x64, 0x57, 0xc9, 0x5d, 0xc8, 0x09, 0x39, 0x08, 0xbb, 0xfc, 0x2e, 0xe4, + 0xa0, 0x9c, 0xd5, 0xe7, 0xd3, 0x41, 0x80, 0x1a, 0x21, 0xcc, 0xa7, 0xa7, 0x83, 0xd3, 0x94, 0x14, + 0x67, 0xb4, 0x0b, 0x98, 0xca, 0x42, 0x55, 0xa6, 0x82, 0x48, 0x8a, 0x47, 0x81, 0xc8, 0xf1, 0xed, + 0x2a, 0xb1, 0x5c, 0x99, 0x48, 0x75, 0xff, 0xa2, 0xc0, 0x8b, 0xa5, 0x49, 0x80, 0x76, 0x53, 0x2d, + 0x77, 0x3b, 0xd3, 0x72, 0xbf, 0x53, 0x6a, 0x98, 0xe8, 0xbb, 0x6e, 0x31, 0x35, 0x7a, 0xbf, 0x1a, + 0x35, 0x2a, 0x98, 0xdb, 0x2f, 0xe7, 0x48, 0xfd, 0xed, 0x27, 0x4f, 0x3b, 0x33, 0x5f, 0x3d, 0xed, + 0xcc, 0x7c, 0xfd, 0xb4, 0x33, 0xf3, 0xab, 0x69, 0x47, 0x79, 0x32, 0xed, 0x28, 0x5f, 0x4d, 0x3b, + 0xca, 0xd7, 0xd3, 0x8e, 0xf2, 0xb7, 0x69, 0x47, 0xf9, 0xcd, 0x37, 0x9d, 0x99, 0xcf, 0xe6, 0xa5, + 0xc7, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x99, 0x8d, 0x1e, 0xaf, 0x61, 0x1b, 0x00, 0x00, +} + func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -200,36 +798,45 @@ } func (m *ControllerRevision) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) + i-- + dAtA[i] = 0x18 + { + size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Data.Size())) - n2, err := m.Data.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ControllerRevisionList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -237,37 +844,46 @@ } func (m *ControllerRevisionList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerRevisionList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n3, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Deployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -275,41 +891,52 @@ } func (m *Deployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Deployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n5, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n6, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -317,49 +944,62 @@ } func (m *DeploymentCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastUpdateTime.Size())) - n7, err := m.LastUpdateTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 + i-- dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n8, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 - return i, nil + i-- + dAtA[i] = 0x32 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -367,37 +1007,46 @@ } func (m *DeploymentList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n9, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentRollback) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -405,51 +1054,61 @@ } func (m *DeploymentRollback) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentRollback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) + { + size, err := m.RollbackTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a if len(m.UpdatedAnnotations) > 0 { keysForUpdatedAnnotations := make([]string, 0, len(m.UpdatedAnnotations)) for k := range m.UpdatedAnnotations { keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) - for _, k := range keysForUpdatedAnnotations { + for iNdEx := len(keysForUpdatedAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.UpdatedAnnotations[string(keysForUpdatedAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - v := m.UpdatedAnnotations[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForUpdatedAnnotations[iNdEx]) + copy(dAtA[i:], keysForUpdatedAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForUpdatedAnnotations[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollbackTo.Size())) - n10, err := m.RollbackTo.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -457,79 +1116,92 @@ } func (m *DeploymentSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + if m.ProgressDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + i-- + dAtA[i] = 0x48 } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n11, err := m.Selector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.RollbackTo != nil { + { + size, err := m.RollbackTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n12, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Strategy.Size())) - n13, err := m.Strategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x42 } - dAtA[i] = 0x38 - i++ + i-- if m.Paused { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if m.RollbackTo != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollbackTo.Size())) - n14, err := m.RollbackTo.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x38 + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x28 + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n14 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.ProgressDeadlineSeconds != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + i-- + dAtA[i] = 0x22 + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *DeploymentStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -537,52 +1209,59 @@ } func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x40 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x38 if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x32 } } - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - if m.CollisionCount != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DeploymentStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -590,31 +1269,39 @@ } func (m *DeploymentStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n15, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RollbackConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -622,20 +1309,25 @@ } func (m *RollbackConfig) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollbackConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *RollingUpdateDeployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -643,37 +1335,46 @@ } func (m *RollingUpdateDeployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDeployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n16, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxSurge.Size())) - n17, err := m.MaxSurge.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.MaxUnavailable != nil { + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n17 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RollingUpdateStatefulSetStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -681,22 +1382,27 @@ } func (m *RollingUpdateStatefulSetStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateStatefulSetStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Partition != nil { - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.Partition)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *Scale) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -704,41 +1410,52 @@ } func (m *Scale) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Scale) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n18, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n19, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n19 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n20, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n20 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ScaleSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -746,20 +1463,25 @@ } func (m *ScaleSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *ScaleStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -767,46 +1489,54 @@ } func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i -= len(m.TargetSelector) + copy(dAtA[i:], m.TargetSelector) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetSelector))) + i-- + dAtA[i] = 0x1a if len(m.Selector) > 0 { keysForSelector := make([]string, 0, len(m.Selector)) for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - for _, k := range keysForSelector { + for iNdEx := len(keysForSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.Selector[string(keysForSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - v := m.Selector[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForSelector[iNdEx]) + copy(dAtA[i:], keysForSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSelector[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetSelector))) - i += copy(dAtA[i:], m.TargetSelector) - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *StatefulSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -814,41 +1544,52 @@ } func (m *StatefulSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n21, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n22, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n22 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n23, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n23 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -856,41 +1597,52 @@ } func (m *StatefulSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n24, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -898,37 +1650,46 @@ } func (m *StatefulSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n25, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -936,73 +1697,88 @@ } func (m *StatefulSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x40 } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n26, err := m.Selector.MarshalTo(dAtA[i:]) + { + size, err := m.UpdateStrategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n26 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n27, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n27 + i-- + dAtA[i] = 0x3a + i -= len(m.PodManagementPolicy) + copy(dAtA[i:], m.PodManagementPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodManagementPolicy))) + i-- + dAtA[i] = 0x32 + i -= len(m.ServiceName) + copy(dAtA[i:], m.ServiceName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) + i-- + dAtA[i] = 0x2a if len(m.VolumeClaimTemplates) > 0 { - for _, msg := range m.VolumeClaimTemplates { + for iNdEx := len(m.VolumeClaimTemplates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeClaimTemplates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + } + } + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodManagementPolicy))) - i += copy(dAtA[i:], m.PodManagementPolicy) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) - n28, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *StatefulSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1010,59 +1786,68 @@ } func (m *StatefulSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ObservedGeneration != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } } - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CurrentRevision))) - i += copy(dAtA[i:], m.CurrentRevision) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UpdateRevision))) - i += copy(dAtA[i:], m.UpdateRevision) if m.CollisionCount != nil { - dAtA[i] = 0x48 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x48 } - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i -= len(m.UpdateRevision) + copy(dAtA[i:], m.UpdateRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UpdateRevision))) + i-- + dAtA[i] = 0x3a + i -= len(m.CurrentRevision) + copy(dAtA[i:], m.CurrentRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CurrentRevision))) + i-- + dAtA[i] = 0x32 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + if m.ObservedGeneration != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *StatefulSetUpdateStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1070,55 +1855,50 @@ } func (m *StatefulSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetUpdateStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n29, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n29 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *ControllerRevision) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1130,6 +1910,9 @@ } func (m *ControllerRevisionList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1144,6 +1927,9 @@ } func (m *Deployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1156,6 +1942,9 @@ } func (m *DeploymentCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1174,6 +1963,9 @@ } func (m *DeploymentList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1188,6 +1980,9 @@ } func (m *DeploymentRollback) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1206,6 +2001,9 @@ } func (m *DeploymentSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1235,6 +2033,9 @@ } func (m *DeploymentStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -1256,6 +2057,9 @@ } func (m *DeploymentStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1268,6 +2072,9 @@ } func (m *RollbackConfig) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Revision)) @@ -1275,6 +2082,9 @@ } func (m *RollingUpdateDeployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -1289,6 +2099,9 @@ } func (m *RollingUpdateStatefulSetStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Partition != nil { @@ -1298,6 +2111,9 @@ } func (m *Scale) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1310,6 +2126,9 @@ } func (m *ScaleSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1317,6 +2136,9 @@ } func (m *ScaleStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1334,6 +2156,9 @@ } func (m *StatefulSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1346,6 +2171,9 @@ } func (m *StatefulSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1362,6 +2190,9 @@ } func (m *StatefulSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1376,6 +2207,9 @@ } func (m *StatefulSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1406,6 +2240,9 @@ } func (m *StatefulSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ObservedGeneration != nil { @@ -1432,6 +2269,9 @@ } func (m *StatefulSetUpdateStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1444,14 +2284,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1461,8 +2294,8 @@ return "nil" } s := strings.Join([]string{`&ControllerRevision{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Data:` + strings.Replace(strings.Replace(this.Data.String(), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Data), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, `}`, }, "") @@ -1472,9 +2305,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ControllerRevision{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ControllerRevision", "ControllerRevision", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ControllerRevisionList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ControllerRevision", "ControllerRevision", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1484,7 +2322,7 @@ return "nil" } s := strings.Join([]string{`&Deployment{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentSpec", "DeploymentSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentStatus", "DeploymentStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1500,8 +2338,8 @@ `Status:` + fmt.Sprintf("%v", this.Status) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `LastUpdateTime:` + strings.Replace(strings.Replace(this.LastUpdateTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -1510,9 +2348,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Deployment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Deployment", "Deployment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DeploymentList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Deployment", "Deployment", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1545,13 +2388,13 @@ } s := strings.Join([]string{`&DeploymentSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, - `RollbackTo:` + strings.Replace(fmt.Sprintf("%v", this.RollbackTo), "RollbackConfig", "RollbackConfig", 1) + `,`, + `RollbackTo:` + strings.Replace(this.RollbackTo.String(), "RollbackConfig", "RollbackConfig", 1) + `,`, `ProgressDeadlineSeconds:` + valueToStringGenerated(this.ProgressDeadlineSeconds) + `,`, `}`, }, "") @@ -1561,13 +2404,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DeploymentCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DeploymentStatus{`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, @@ -1580,7 +2428,7 @@ } s := strings.Join([]string{`&DeploymentStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, `}`, }, "") return s @@ -1600,8 +2448,8 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDeployment{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, - `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -1621,7 +2469,7 @@ return "nil" } s := strings.Join([]string{`&Scale{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScaleSpec", "ScaleSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScaleStatus", "ScaleStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1665,7 +2513,7 @@ return "nil" } s := strings.Join([]string{`&StatefulSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "StatefulSetSpec", "StatefulSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "StatefulSetStatus", "StatefulSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1679,7 +2527,7 @@ s := strings.Join([]string{`&StatefulSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -1690,9 +2538,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]StatefulSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "StatefulSet", "StatefulSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&StatefulSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "StatefulSet", "StatefulSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1701,11 +2554,16 @@ if this == nil { return "nil" } + repeatedStringForVolumeClaimTemplates := "[]PersistentVolumeClaim{" + for _, f := range this.VolumeClaimTemplates { + repeatedStringForVolumeClaimTemplates += fmt.Sprintf("%v", f) + "," + } + repeatedStringForVolumeClaimTemplates += "}" s := strings.Join([]string{`&StatefulSetSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, - `VolumeClaimTemplates:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeClaimTemplates), "PersistentVolumeClaim", "k8s_io_api_core_v1.PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `VolumeClaimTemplates:` + repeatedStringForVolumeClaimTemplates + `,`, `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, `PodManagementPolicy:` + fmt.Sprintf("%v", this.PodManagementPolicy) + `,`, `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "StatefulSetUpdateStrategy", "StatefulSetUpdateStrategy", 1), `&`, ``, 1) + `,`, @@ -1718,6 +2576,11 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]StatefulSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "StatefulSetCondition", "StatefulSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&StatefulSetStatus{`, `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, @@ -1727,7 +2590,7 @@ `CurrentRevision:` + fmt.Sprintf("%v", this.CurrentRevision) + `,`, `UpdateRevision:` + fmt.Sprintf("%v", this.UpdateRevision) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "StatefulSetCondition", "StatefulSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -1738,7 +2601,7 @@ } s := strings.Join([]string{`&StatefulSetUpdateStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateStatefulSetStrategy", "RollingUpdateStatefulSetStrategy", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateStatefulSetStrategy", "RollingUpdateStatefulSetStrategy", 1) + `,`, `}`, }, "") return s @@ -1766,7 +2629,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1794,7 +2657,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1803,6 +2666,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1824,7 +2690,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1833,6 +2699,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1854,7 +2723,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift + m.Revision |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -1868,6 +2737,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1895,7 +2767,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1923,7 +2795,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1932,6 +2804,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1953,7 +2828,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1962,6 +2837,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1979,6 +2857,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2006,7 +2887,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2034,7 +2915,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2043,6 +2924,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2064,7 +2948,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2073,6 +2957,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2094,7 +2981,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2103,6 +2990,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2119,6 +3009,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2146,7 +3039,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2174,7 +3067,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2183,7 +3076,10 @@ if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2203,7 +3099,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2213,6 +3109,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2232,7 +3131,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2242,6 +3141,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2261,7 +3163,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2271,6 +3173,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2290,7 +3195,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2299,6 +3204,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2320,7 +3228,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2329,6 +3237,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2345,6 +3256,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2372,7 +3286,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2400,7 +3314,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2409,6 +3323,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2430,7 +3347,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2439,6 +3356,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2456,6 +3376,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2483,7 +3406,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2511,7 +3434,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2521,6 +3444,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2540,7 +3466,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2549,54 +3475,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.UpdatedAnnotations == nil { m.UpdatedAnnotations = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2606,41 +3498,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.UpdatedAnnotations[mapkey] = mapvalue - } else { - var mapvalue string - m.UpdatedAnnotations[mapkey] = mapvalue } + m.UpdatedAnnotations[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -2656,7 +3593,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2665,6 +3602,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2681,6 +3621,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2708,7 +3651,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2736,7 +3679,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2756,7 +3699,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2765,11 +3708,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2789,7 +3735,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2798,6 +3744,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2819,7 +3768,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2828,6 +3777,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2849,7 +3801,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2868,7 +3820,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2888,7 +3840,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2908,7 +3860,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2917,6 +3869,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2941,7 +3896,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2956,6 +3911,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2983,7 +3941,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3011,7 +3969,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -3030,7 +3988,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3049,7 +4007,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3068,7 +4026,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3087,7 +4045,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UnavailableReplicas |= (int32(b) & 0x7F) << shift + m.UnavailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3106,7 +4064,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3115,6 +4073,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3137,7 +4098,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3156,7 +4117,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3171,6 +4132,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3198,7 +4162,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3226,7 +4190,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3236,6 +4200,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3255,7 +4222,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3264,6 +4231,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3283,6 +4253,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3310,7 +4283,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3338,7 +4311,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift + m.Revision |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -3352,6 +4325,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3379,7 +4355,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3407,7 +4383,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3416,11 +4392,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxUnavailable = &intstr.IntOrString{} } if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3440,7 +4419,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3449,11 +4428,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxSurge == nil { - m.MaxSurge = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxSurge = &intstr.IntOrString{} } if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3468,6 +4450,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3495,7 +4480,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3523,7 +4508,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3538,6 +4523,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3565,7 +4553,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3593,7 +4581,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3602,6 +4590,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3623,7 +4614,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3632,6 +4623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3653,7 +4647,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3662,6 +4656,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3678,6 +4675,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3705,7 +4705,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3733,7 +4733,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3747,6 +4747,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3774,7 +4777,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3802,7 +4805,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3821,7 +4824,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3830,54 +4833,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Selector == nil { m.Selector = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3887,41 +4856,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Selector[mapkey] = mapvalue - } else { - var mapvalue string - m.Selector[mapkey] = mapvalue } + m.Selector[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -3937,7 +4951,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3947,6 +4961,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3961,6 +4978,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3988,7 +5008,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4016,7 +5036,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4025,6 +5045,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4046,7 +5069,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4055,6 +5078,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4076,7 +5102,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4085,6 +5111,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4101,6 +5130,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4128,7 +5160,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4156,7 +5188,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4166,6 +5198,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4185,7 +5220,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4195,6 +5230,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4214,7 +5252,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4223,6 +5261,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4244,7 +5285,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4254,6 +5295,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4273,7 +5317,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4283,6 +5327,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4297,6 +5344,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4324,7 +5374,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4352,7 +5402,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4361,6 +5411,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4382,7 +5435,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4391,6 +5444,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4408,6 +5464,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4435,7 +5494,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4463,7 +5522,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4483,7 +5542,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4492,11 +5551,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -4516,7 +5578,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4525,6 +5587,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4546,7 +5611,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4555,10 +5620,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeClaimTemplates = append(m.VolumeClaimTemplates, k8s_io_api_core_v1.PersistentVolumeClaim{}) + m.VolumeClaimTemplates = append(m.VolumeClaimTemplates, v11.PersistentVolumeClaim{}) if err := m.VolumeClaimTemplates[len(m.VolumeClaimTemplates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -4577,7 +5645,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4587,6 +5655,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4606,7 +5677,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4616,6 +5687,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4635,7 +5709,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4644,6 +5718,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4665,7 +5742,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4680,6 +5757,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4707,7 +5787,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4735,7 +5815,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -4755,7 +5835,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4774,7 +5854,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4793,7 +5873,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentReplicas |= (int32(b) & 0x7F) << shift + m.CurrentReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4812,7 +5892,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4831,7 +5911,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4841,6 +5921,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4860,7 +5943,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4870,6 +5953,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4889,7 +5975,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4909,7 +5995,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4918,6 +6004,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4935,6 +6024,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4962,7 +6054,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4990,7 +6082,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5000,6 +6092,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5019,7 +6114,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5028,6 +6123,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5047,6 +6145,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5113,10 +6214,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -5145,6 +6249,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -5163,128 +6270,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 1859 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6f, 0x24, 0x47, - 0x15, 0x77, 0x8f, 0x67, 0xec, 0xf1, 0x73, 0x3c, 0xde, 0x2d, 0x9b, 0xf5, 0xc4, 0x81, 0xb1, 0xd5, - 0x44, 0x89, 0xf3, 0xe1, 0x9e, 0xac, 0x13, 0xa2, 0x64, 0x17, 0x45, 0x78, 0xbc, 0x4b, 0xb2, 0x91, - 0x8d, 0x9d, 0xb2, 0x1d, 0x44, 0x00, 0x29, 0x35, 0x3d, 0xb5, 0xb3, 0x1d, 0xf7, 0x97, 0xba, 0x6b, - 0x86, 0x1d, 0x71, 0xe1, 0x0f, 0x40, 0x0a, 0x67, 0xfe, 0x0a, 0x8e, 0x08, 0x6e, 0x9c, 0xf6, 0x82, - 0x14, 0x71, 0x21, 0x27, 0x8b, 0x9d, 0x5c, 0x81, 0x1b, 0x97, 0x95, 0x90, 0x50, 0x55, 0x57, 0x7f, - 0x77, 0xdb, 0x6d, 0xa4, 0xf5, 0x21, 0xb7, 0xe9, 0x7a, 0xef, 0xfd, 0x5e, 0x7d, 0xbc, 0xaf, 0xdf, - 0xc0, 0x8f, 0xce, 0xde, 0xf3, 0x35, 0xc3, 0xe9, 0x9e, 0x8d, 0xfa, 0xd4, 0xb3, 0x29, 0xa3, 0x7e, - 0x77, 0x4c, 0xed, 0x81, 0xe3, 0x75, 0xa5, 0x80, 0xb8, 0x46, 0x97, 0xb8, 0xae, 0xdf, 0x1d, 0xdf, - 0xee, 0x53, 0x46, 0x6e, 0x77, 0x87, 0xd4, 0xa6, 0x1e, 0x61, 0x74, 0xa0, 0xb9, 0x9e, 0xc3, 0x1c, - 0xb4, 0x16, 0x28, 0x6a, 0xc4, 0x35, 0x34, 0xae, 0xa8, 0x49, 0xc5, 0xf5, 0xed, 0xa1, 0xc1, 0x1e, - 0x8d, 0xfa, 0x9a, 0xee, 0x58, 0xdd, 0xa1, 0x33, 0x74, 0xba, 0x42, 0xbf, 0x3f, 0x7a, 0x28, 0xbe, - 0xc4, 0x87, 0xf8, 0x15, 0xe0, 0xac, 0xab, 0x09, 0x87, 0xba, 0xe3, 0xd1, 0xee, 0x38, 0xe7, 0x6b, - 0xfd, 0x9d, 0x58, 0xc7, 0x22, 0xfa, 0x23, 0xc3, 0xa6, 0xde, 0xa4, 0xeb, 0x9e, 0x0d, 0xf9, 0x82, - 0xdf, 0xb5, 0x28, 0x23, 0x45, 0x56, 0xdd, 0x32, 0x2b, 0x6f, 0x64, 0x33, 0xc3, 0xa2, 0x39, 0x83, - 0x77, 0x2f, 0x33, 0xf0, 0xf5, 0x47, 0xd4, 0x22, 0x39, 0xbb, 0xb7, 0xcb, 0xec, 0x46, 0xcc, 0x30, - 0xbb, 0x86, 0xcd, 0x7c, 0xe6, 0x65, 0x8d, 0xd4, 0xff, 0x28, 0x80, 0xf6, 0x1c, 0x9b, 0x79, 0x8e, - 0x69, 0x52, 0x0f, 0xd3, 0xb1, 0xe1, 0x1b, 0x8e, 0x8d, 0x3e, 0x87, 0x26, 0x3f, 0xcf, 0x80, 0x30, - 0xd2, 0x56, 0x36, 0x95, 0xad, 0xc5, 0x9d, 0xb7, 0xb4, 0xf8, 0xa6, 0x23, 0x78, 0xcd, 0x3d, 0x1b, - 0xf2, 0x05, 0x5f, 0xe3, 0xda, 0xda, 0xf8, 0xb6, 0x76, 0xd8, 0xff, 0x82, 0xea, 0xec, 0x80, 0x32, - 0xd2, 0x43, 0x4f, 0xce, 0x37, 0x66, 0xa6, 0xe7, 0x1b, 0x10, 0xaf, 0xe1, 0x08, 0x15, 0x1d, 0x42, - 0x5d, 0xa0, 0xd7, 0x04, 0xfa, 0x76, 0x29, 0xba, 0x3c, 0xb4, 0x86, 0xc9, 0xaf, 0xee, 0x3f, 0x66, - 0xd4, 0xe6, 0xdb, 0xeb, 0xbd, 0x20, 0xa1, 0xeb, 0xf7, 0x08, 0x23, 0x58, 0x00, 0xa1, 0x37, 0xa1, - 0xe9, 0xc9, 0xed, 0xb7, 0x67, 0x37, 0x95, 0xad, 0xd9, 0xde, 0x0d, 0xa9, 0xd5, 0x0c, 0x8f, 0x85, - 0x23, 0x0d, 0xf5, 0x89, 0x02, 0xb7, 0xf2, 0xe7, 0xde, 0x37, 0x7c, 0x86, 0x7e, 0x91, 0x3b, 0xbb, - 0x56, 0xed, 0xec, 0xdc, 0x5a, 0x9c, 0x3c, 0x72, 0x1c, 0xae, 0x24, 0xce, 0x7d, 0x04, 0x0d, 0x83, - 0x51, 0xcb, 0x6f, 0xd7, 0x36, 0x67, 0xb7, 0x16, 0x77, 0xde, 0xd0, 0x4a, 0x02, 0x58, 0xcb, 0xef, - 0xae, 0xb7, 0x24, 0x71, 0x1b, 0x0f, 0x38, 0x02, 0x0e, 0x80, 0xd4, 0xdf, 0xd6, 0x00, 0xee, 0x51, - 0xd7, 0x74, 0x26, 0x16, 0xb5, 0xd9, 0x35, 0x3c, 0xdd, 0x03, 0xa8, 0xfb, 0x2e, 0xd5, 0xe5, 0xd3, - 0xbd, 0x5a, 0x7a, 0x82, 0x78, 0x53, 0xc7, 0x2e, 0xd5, 0xe3, 0x47, 0xe3, 0x5f, 0x58, 0x40, 0xa0, - 0x4f, 0x60, 0xce, 0x67, 0x84, 0x8d, 0x7c, 0xf1, 0x64, 0x8b, 0x3b, 0xaf, 0x55, 0x01, 0x13, 0x06, - 0xbd, 0x96, 0x84, 0x9b, 0x0b, 0xbe, 0xb1, 0x04, 0x52, 0xff, 0x3e, 0x0b, 0x2b, 0xb1, 0xf2, 0x9e, - 0x63, 0x0f, 0x0c, 0xc6, 0x43, 0xfa, 0x2e, 0xd4, 0xd9, 0xc4, 0xa5, 0xe2, 0x4e, 0x16, 0x7a, 0xaf, - 0x86, 0x9b, 0x39, 0x99, 0xb8, 0xf4, 0xd9, 0xf9, 0xc6, 0x5a, 0x81, 0x09, 0x17, 0x61, 0x61, 0x84, - 0xf6, 0xa3, 0x7d, 0xd6, 0x84, 0xf9, 0x3b, 0x69, 0xe7, 0xcf, 0xce, 0x37, 0x0a, 0x0a, 0x88, 0x16, - 0x21, 0xa5, 0xb7, 0x88, 0x5e, 0x81, 0x39, 0x8f, 0x12, 0xdf, 0xb1, 0xdb, 0x75, 0x81, 0x16, 0x1d, - 0x05, 0x8b, 0x55, 0x2c, 0xa5, 0xe8, 0x35, 0x98, 0xb7, 0xa8, 0xef, 0x93, 0x21, 0x6d, 0x37, 0x84, - 0xe2, 0xb2, 0x54, 0x9c, 0x3f, 0x08, 0x96, 0x71, 0x28, 0x47, 0x5f, 0x40, 0xcb, 0x24, 0x3e, 0x3b, - 0x75, 0x07, 0x84, 0xd1, 0x13, 0xc3, 0xa2, 0xed, 0x39, 0x71, 0xa1, 0xaf, 0x57, 0x7b, 0x7b, 0x6e, - 0xd1, 0xbb, 0x25, 0xd1, 0x5b, 0xfb, 0x29, 0x24, 0x9c, 0x41, 0x46, 0x63, 0x40, 0x7c, 0xe5, 0xc4, - 0x23, 0xb6, 0x1f, 0x5c, 0x14, 0xf7, 0x37, 0x7f, 0x65, 0x7f, 0xeb, 0xd2, 0x1f, 0xda, 0xcf, 0xa1, - 0xe1, 0x02, 0x0f, 0xea, 0x1f, 0x15, 0x68, 0xc5, 0xcf, 0x74, 0x0d, 0xb9, 0xfa, 0x51, 0x3a, 0x57, - 0xbf, 0x5f, 0x21, 0x38, 0x4b, 0x72, 0xf4, 0x9f, 0x35, 0x40, 0xb1, 0x12, 0x76, 0x4c, 0xb3, 0x4f, - 0xf4, 0x33, 0xb4, 0x09, 0x75, 0x9b, 0x58, 0x61, 0x4c, 0x46, 0x09, 0xf2, 0x13, 0x62, 0x51, 0x2c, - 0x24, 0xe8, 0x4b, 0x05, 0xd0, 0x48, 0x5c, 0xfd, 0x60, 0xd7, 0xb6, 0x1d, 0x46, 0xf8, 0x6d, 0x84, - 0x1b, 0xda, 0xab, 0xb0, 0xa1, 0xd0, 0x97, 0x76, 0x9a, 0x43, 0xb9, 0x6f, 0x33, 0x6f, 0x12, 0xbf, - 0x42, 0x5e, 0x01, 0x17, 0xb8, 0x46, 0x3f, 0x07, 0xf0, 0x24, 0xe6, 0x89, 0x23, 0xd3, 0xb6, 0xbc, - 0x06, 0x84, 0xee, 0xf7, 0x1c, 0xfb, 0xa1, 0x31, 0x8c, 0x0b, 0x0b, 0x8e, 0x20, 0x70, 0x02, 0x6e, - 0xfd, 0x3e, 0xac, 0x95, 0xec, 0x13, 0xdd, 0x80, 0xd9, 0x33, 0x3a, 0x09, 0xae, 0x0a, 0xf3, 0x9f, - 0x68, 0x15, 0x1a, 0x63, 0x62, 0x8e, 0x68, 0x90, 0x93, 0x38, 0xf8, 0xb8, 0x53, 0x7b, 0x4f, 0x51, - 0xff, 0xd0, 0x48, 0x46, 0x0a, 0xaf, 0x37, 0x68, 0x8b, 0xb7, 0x07, 0xd7, 0x34, 0x74, 0xe2, 0x0b, - 0x8c, 0x46, 0xef, 0x85, 0xa0, 0x35, 0x04, 0x6b, 0x38, 0x92, 0xa2, 0x5f, 0x42, 0xd3, 0xa7, 0x26, - 0xd5, 0x99, 0xe3, 0xc9, 0x12, 0xf7, 0x76, 0xc5, 0x98, 0x22, 0x7d, 0x6a, 0x1e, 0x4b, 0xd3, 0x00, - 0x3e, 0xfc, 0xc2, 0x11, 0x24, 0xfa, 0x04, 0x9a, 0x8c, 0x5a, 0xae, 0x49, 0x18, 0x95, 0xb7, 0x97, - 0x8a, 0x2b, 0x5e, 0x3b, 0x38, 0xd8, 0x91, 0x33, 0x38, 0x91, 0x6a, 0xa2, 0x7a, 0x46, 0x71, 0x1a, - 0xae, 0xe2, 0x08, 0x06, 0xfd, 0x0c, 0x9a, 0x3e, 0xe3, 0x5d, 0x7d, 0x38, 0x11, 0x15, 0xe5, 0xa2, - 0xb6, 0x92, 0xac, 0xa3, 0x81, 0x49, 0x0c, 0x1d, 0xae, 0xe0, 0x08, 0x0e, 0xed, 0xc2, 0xb2, 0x65, - 0xd8, 0x98, 0x92, 0xc1, 0xe4, 0x98, 0xea, 0x8e, 0x3d, 0xf0, 0x45, 0x29, 0x6a, 0xf4, 0xd6, 0xa4, - 0xd1, 0xf2, 0x41, 0x5a, 0x8c, 0xb3, 0xfa, 0x68, 0x1f, 0x56, 0xc3, 0xb6, 0xfb, 0x91, 0xe1, 0x33, - 0xc7, 0x9b, 0xec, 0x1b, 0x96, 0xc1, 0x44, 0x81, 0x6a, 0xf4, 0xda, 0xd3, 0xf3, 0x8d, 0x55, 0x5c, - 0x20, 0xc7, 0x85, 0x56, 0xbc, 0x76, 0xba, 0x64, 0xe4, 0xd3, 0x81, 0x28, 0x38, 0xcd, 0xb8, 0x76, - 0x1e, 0x89, 0x55, 0x2c, 0xa5, 0xe8, 0xa7, 0xa9, 0x30, 0x6d, 0x5e, 0x2d, 0x4c, 0x5b, 0xe5, 0x21, - 0x8a, 0x4e, 0x61, 0xcd, 0xf5, 0x9c, 0xa1, 0x47, 0x7d, 0xff, 0x1e, 0x25, 0x03, 0xd3, 0xb0, 0x69, - 0x78, 0x33, 0x0b, 0xe2, 0x44, 0x2f, 0x4d, 0xcf, 0x37, 0xd6, 0x8e, 0x8a, 0x55, 0x70, 0x99, 0xad, - 0xfa, 0x97, 0x3a, 0xdc, 0xc8, 0xf6, 0x38, 0xf4, 0x31, 0x20, 0xa7, 0xef, 0x53, 0x6f, 0x4c, 0x07, - 0x1f, 0x06, 0x83, 0x1b, 0x9f, 0x6e, 0x14, 0x31, 0xdd, 0x44, 0x79, 0x7b, 0x98, 0xd3, 0xc0, 0x05, - 0x56, 0xc1, 0x7c, 0x24, 0x13, 0xa0, 0x26, 0x36, 0x9a, 0x98, 0x8f, 0x72, 0x49, 0xb0, 0x0b, 0xcb, - 0x32, 0xf7, 0x43, 0xa1, 0x08, 0xd6, 0xc4, 0xbb, 0x9f, 0xa6, 0xc5, 0x38, 0xab, 0x8f, 0x3e, 0x84, - 0x9b, 0x64, 0x4c, 0x0c, 0x93, 0xf4, 0x4d, 0x1a, 0x81, 0xd4, 0x05, 0xc8, 0x8b, 0x12, 0xe4, 0xe6, - 0x6e, 0x56, 0x01, 0xe7, 0x6d, 0xd0, 0x01, 0xac, 0x8c, 0xec, 0x3c, 0x54, 0x10, 0x87, 0x2f, 0x49, - 0xa8, 0x95, 0xd3, 0xbc, 0x0a, 0x2e, 0xb2, 0x43, 0x9f, 0x03, 0xe8, 0x61, 0x63, 0xf6, 0xdb, 0x73, - 0xa2, 0x92, 0xbe, 0x59, 0x21, 0x5f, 0xa2, 0x6e, 0x1e, 0x57, 0xb1, 0x68, 0xc9, 0xc7, 0x09, 0x4c, - 0x74, 0x17, 0x96, 0x3c, 0x9e, 0x01, 0xd1, 0x56, 0xe7, 0xc5, 0x56, 0xbf, 0x23, 0xcd, 0x96, 0x70, - 0x52, 0x88, 0xd3, 0xba, 0xe8, 0x0e, 0xb4, 0x74, 0xc7, 0x34, 0x45, 0xe4, 0xef, 0x39, 0x23, 0x9b, - 0x89, 0xe0, 0x6d, 0xf4, 0x10, 0xef, 0xcc, 0x7b, 0x29, 0x09, 0xce, 0x68, 0xaa, 0x7f, 0x56, 0x92, - 0x6d, 0x26, 0x4c, 0x67, 0x74, 0x27, 0x35, 0xfa, 0xbc, 0x92, 0x19, 0x7d, 0x6e, 0xe5, 0x2d, 0x12, - 0x93, 0x8f, 0x01, 0x4b, 0x3c, 0xf8, 0x0d, 0x7b, 0x18, 0x3c, 0xb8, 0x2c, 0x89, 0x6f, 0x5d, 0x98, - 0x4a, 0x91, 0x76, 0xa2, 0x31, 0xde, 0x14, 0x27, 0x4f, 0x0a, 0x71, 0x1a, 0x59, 0xfd, 0x00, 0x5a, - 0xe9, 0x3c, 0x4c, 0xcd, 0xf4, 0xca, 0xa5, 0x33, 0xfd, 0x37, 0x0a, 0xac, 0x95, 0x78, 0x47, 0x26, - 0xb4, 0x2c, 0xf2, 0x38, 0x11, 0x23, 0x97, 0xce, 0xc6, 0x9c, 0x35, 0x69, 0x01, 0x6b, 0xd2, 0x1e, - 0xd8, 0xec, 0xd0, 0x3b, 0x66, 0x9e, 0x61, 0x0f, 0x83, 0x77, 0x38, 0x48, 0x61, 0xe1, 0x0c, 0x36, - 0xfa, 0x0c, 0x9a, 0x16, 0x79, 0x7c, 0x3c, 0xf2, 0x86, 0x45, 0xf7, 0x55, 0xcd, 0x8f, 0xe8, 0x1f, - 0x07, 0x12, 0x05, 0x47, 0x78, 0xea, 0x21, 0x6c, 0xa6, 0x0e, 0xc9, 0x4b, 0x05, 0x7d, 0x38, 0x32, - 0x8f, 0x69, 0xfc, 0xe0, 0x6f, 0xc0, 0x82, 0x4b, 0x3c, 0x66, 0x44, 0xe5, 0xa2, 0xd1, 0x5b, 0x9a, - 0x9e, 0x6f, 0x2c, 0x1c, 0x85, 0x8b, 0x38, 0x96, 0xab, 0xff, 0x55, 0xa0, 0x71, 0xac, 0x13, 0x93, - 0x5e, 0x03, 0x75, 0xb8, 0x97, 0xa2, 0x0e, 0x6a, 0x69, 0x10, 0x89, 0xfd, 0x94, 0xb2, 0x86, 0xfd, - 0x0c, 0x6b, 0x78, 0xf9, 0x12, 0x9c, 0x8b, 0x09, 0xc3, 0xfb, 0xb0, 0x10, 0xb9, 0x4b, 0x55, 0x49, - 0xe5, 0xb2, 0x2a, 0xa9, 0xfe, 0xbe, 0x06, 0x8b, 0x09, 0x17, 0x57, 0xb3, 0xe6, 0xd7, 0x9d, 0x18, - 0x34, 0x78, 0x19, 0xda, 0xa9, 0x72, 0x10, 0x2d, 0x1c, 0x2a, 0x82, 0xf9, 0x2d, 0xee, 0xde, 0xf9, - 0x59, 0xe3, 0x03, 0x68, 0x31, 0xe2, 0x0d, 0x29, 0x0b, 0x65, 0xe2, 0xc2, 0x16, 0xe2, 0x49, 0xff, - 0x24, 0x25, 0xc5, 0x19, 0xed, 0xf5, 0xbb, 0xb0, 0x94, 0x72, 0x76, 0xa5, 0x21, 0xec, 0x4b, 0x7e, - 0x39, 0x71, 0x70, 0x5e, 0x43, 0x74, 0x7d, 0x9c, 0x8a, 0xae, 0xad, 0xf2, 0xcb, 0x4c, 0xa4, 0x4c, - 0x59, 0x8c, 0xe1, 0x4c, 0x8c, 0xbd, 0x5e, 0x09, 0xed, 0xe2, 0x48, 0xfb, 0x57, 0x0d, 0x56, 0x13, - 0xda, 0x31, 0x37, 0xfd, 0x61, 0xaa, 0x40, 0x6f, 0x65, 0x0a, 0x74, 0xbb, 0xc8, 0xe6, 0xb9, 0x91, - 0xd3, 0x62, 0x76, 0x37, 0xfb, 0xbc, 0xd9, 0xdd, 0x73, 0x20, 0xc5, 0xea, 0x9f, 0x14, 0x58, 0x4e, - 0xdc, 0xdd, 0x35, 0x30, 0xc6, 0x07, 0x69, 0xc6, 0xf8, 0x72, 0x95, 0xa0, 0x29, 0xa1, 0x8c, 0x7f, - 0x6d, 0xa4, 0x36, 0xff, 0xad, 0x27, 0x31, 0xbf, 0x86, 0xd5, 0xb1, 0x63, 0x8e, 0x2c, 0xba, 0x67, - 0x12, 0xc3, 0x0a, 0x15, 0xf8, 0xc4, 0x38, 0x9b, 0xfd, 0x63, 0x28, 0x82, 0xa7, 0x9e, 0x6f, 0xf8, - 0x8c, 0xda, 0xec, 0xd3, 0xd8, 0xb2, 0xf7, 0x5d, 0xe9, 0x64, 0xf5, 0xd3, 0x02, 0x38, 0x5c, 0xe8, - 0x04, 0xfd, 0x00, 0x16, 0xf9, 0xc0, 0x6c, 0xe8, 0x94, 0x73, 0x6f, 0x19, 0x58, 0x2b, 0x12, 0x68, - 0xf1, 0x38, 0x16, 0xe1, 0xa4, 0x1e, 0x7a, 0x04, 0x2b, 0xae, 0x33, 0x38, 0x20, 0x36, 0x19, 0x52, - 0x3e, 0x66, 0x1c, 0x39, 0xa6, 0xa1, 0x4f, 0x04, 0xb3, 0x59, 0xe8, 0xbd, 0x1b, 0x4e, 0xa6, 0x47, - 0x79, 0x95, 0x67, 0x9c, 0x22, 0xe4, 0x97, 0x45, 0x52, 0x17, 0x41, 0x22, 0x0f, 0x5a, 0x23, 0xd9, - 0xee, 0x25, 0xd1, 0x0b, 0xfe, 0x6f, 0xd9, 0xa9, 0x12, 0x61, 0xa7, 0x29, 0xcb, 0xb8, 0xfa, 0xa7, - 0xd7, 0x71, 0xc6, 0x43, 0x29, 0x71, 0x6b, 0xfe, 0x3f, 0xc4, 0x4d, 0xfd, 0x77, 0x1d, 0x6e, 0xe6, - 0x4a, 0x25, 0xfa, 0xf1, 0x05, 0x0c, 0xe7, 0xd6, 0x73, 0x63, 0x37, 0xb9, 0x01, 0x7d, 0xf6, 0x0a, - 0x03, 0xfa, 0x2e, 0x2c, 0xeb, 0x23, 0xcf, 0xa3, 0x36, 0xcb, 0xb0, 0x9a, 0x88, 0x1a, 0xed, 0xa5, - 0xc5, 0x38, 0xab, 0x5f, 0xc4, 0xae, 0x1a, 0x57, 0x64, 0x57, 0xc9, 0x5d, 0xc8, 0x09, 0x39, 0x08, - 0xbb, 0xfc, 0x2e, 0xe4, 0xa0, 0x9c, 0xd5, 0xe7, 0xd3, 0x41, 0x80, 0x1a, 0x21, 0xcc, 0xa7, 0xa7, - 0x83, 0xd3, 0x94, 0x14, 0x67, 0xb4, 0x0b, 0x98, 0xca, 0x42, 0x55, 0xa6, 0x82, 0x48, 0x8a, 0x84, - 0x81, 0xc8, 0xf1, 0xed, 0x2a, 0xb1, 0x5c, 0x99, 0x85, 0xa9, 0x7f, 0x53, 0xe0, 0xc5, 0xd2, 0x24, - 0x40, 0xbb, 0xa9, 0x96, 0xbb, 0x9d, 0x69, 0xb9, 0xdf, 0x2b, 0x35, 0x4c, 0xf4, 0x5d, 0xaf, 0x98, - 0x1a, 0xbd, 0x5f, 0x8d, 0x1a, 0x15, 0xcc, 0xed, 0x97, 0x73, 0xa4, 0xde, 0xf6, 0x93, 0xa7, 0x9d, - 0x99, 0xaf, 0x9e, 0x76, 0x66, 0xbe, 0x7e, 0xda, 0x99, 0xf9, 0xcd, 0xb4, 0xa3, 0x3c, 0x99, 0x76, - 0x94, 0xaf, 0xa6, 0x1d, 0xe5, 0xeb, 0x69, 0x47, 0xf9, 0xc7, 0xb4, 0xa3, 0xfc, 0xee, 0x9b, 0xce, - 0xcc, 0x67, 0xf3, 0xd2, 0xe3, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x89, 0x29, 0x5c, 0x61, - 0x1b, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -43,7 +43,7 @@ // depend on its stability. It is primarily for internal use by controllers. message ControllerRevision { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -56,7 +56,7 @@ // ControllerRevisionList is a resource containing a list of ControllerRevision objects. message ControllerRevisionList { - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -143,6 +143,7 @@ // The deployment strategy to use to replace existing pods with new ones. // +optional + // +patchStrategy=retainKeys optional DeploymentStrategy strategy = 4; // Minimum number of seconds for which a newly created pod should be ready @@ -262,7 +263,7 @@ // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } @@ -276,15 +277,15 @@ // Scale represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional ScaleSpec spec = 2; - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional optional ScaleStatus status = 3; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ package v1beta1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" @@ -55,22 +55,20 @@ TargetSelector string `json:"targetSelector,omitempty" protobuf:"bytes,3,opt,name=targetSelector"` } -// +genclient -// +genclient:noVerbs // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // Scale represents a scaling request for a resource. type Scale struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -113,7 +111,7 @@ // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet @@ -136,13 +134,13 @@ // ordering constraints. When a scale operation is performed with this // strategy, new Pods will be created from the specification version indicated // by the StatefulSet's updateRevision. - RollingUpdateStatefulSetStrategyType = "RollingUpdate" + RollingUpdateStatefulSetStrategyType StatefulSetUpdateStrategyType = "RollingUpdate" // OnDeleteStatefulSetStrategyType triggers the legacy behavior. Version // tracking and ordered rolling restarts are disabled. Pods are recreated // from the StatefulSetSpec when they are manually deleted. When a scale // operation is performed with this strategy,specification version indicated // by the StatefulSet's currentRevision. - OnDeleteStatefulSetStrategyType = "OnDelete" + OnDeleteStatefulSetStrategyType StatefulSetUpdateStrategyType = "OnDelete" ) // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType. @@ -323,7 +321,8 @@ // The deployment strategy to use to replace existing pods with new ones. // +optional - Strategy DeploymentStrategy `json:"strategy,omitempty" protobuf:"bytes,4,opt,name=strategy"` + // +patchStrategy=retainKeys + Strategy DeploymentStrategy `json:"strategy,omitempty" patchStrategy:"retainKeys" protobuf:"bytes,4,opt,name=strategy"` // Minimum number of seconds for which a newly created pod should be ready // without any of its container crashing, for it to be considered available. @@ -434,7 +433,7 @@ // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } @@ -542,7 +541,7 @@ type ControllerRevision struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -559,7 +558,7 @@ type ControllerRevisionList struct { metav1.TypeMeta `json:",inline"` - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_ControllerRevision = map[string]string{ "": "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "data": "Data is the serialized representation of the state.", "revision": "Revision indicates the revision of the state represented by Data.", } @@ -40,7 +40,7 @@ var map_ControllerRevisionList = map[string]string{ "": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "metadata": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of ControllerRevisions", } @@ -149,7 +149,7 @@ var map_RollingUpdateDeployment = map[string]string{ "": "Spec to control the desired behavior of rolling update.", "maxUnavailable": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "maxSurge": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", + "maxSurge": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", } func (RollingUpdateDeployment) SwaggerDoc() map[string]string { @@ -167,9 +167,9 @@ var map_Scale = map[string]string{ "": "Scale represents a scaling request for a resource.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", } func (Scale) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1beta1 import ( - core_v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" @@ -58,7 +58,7 @@ func (in *ControllerRevisionList) DeepCopyInto(out *ControllerRevisionList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ControllerRevision, len(*in)) @@ -137,7 +137,7 @@ func (in *DeploymentList) DeepCopyInto(out *DeploymentList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Deployment, len(*in)) @@ -204,50 +204,30 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.Strategy.DeepCopyInto(&out.Strategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.RollbackTo != nil { in, out := &in.RollbackTo, &out.RollbackTo - if *in == nil { - *out = nil - } else { - *out = new(RollbackConfig) - **out = **in - } + *out = new(RollbackConfig) + **out = **in } if in.ProgressDeadlineSeconds != nil { in, out := &in.ProgressDeadlineSeconds, &out.ProgressDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -274,12 +254,8 @@ } if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -299,12 +275,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDeployment) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDeployment) + (*in).DeepCopyInto(*out) } return } @@ -340,21 +312,13 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } if in.MaxSurge != nil { in, out := &in.MaxSurge, &out.MaxSurge - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -374,12 +338,8 @@ *out = *in if in.Partition != nil { in, out := &in.Partition, &out.Partition - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -510,7 +470,7 @@ func (in *StatefulSetList) DeepCopyInto(out *StatefulSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]StatefulSet, len(*in)) @@ -544,26 +504,18 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) if in.VolumeClaimTemplates != nil { in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates - *out = make([]core_v1.PersistentVolumeClaim, len(*in)) + *out = make([]corev1.PersistentVolumeClaim, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -571,12 +523,8 @@ in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -596,21 +544,13 @@ *out = *in if in.ObservedGeneration != nil { in, out := &in.ObservedGeneration, &out.ObservedGeneration - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions @@ -637,12 +577,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateStatefulSetStrategy) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateStatefulSetStrategy) + (*in).DeepCopyInto(*out) } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta2 // import "k8s.io/api/apps/v1beta2" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,66 +14,29 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta2/generated.proto -// DO NOT EDIT! -/* - Package v1beta2 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta2/generated.proto - - It has these top-level messages: - ControllerRevision - ControllerRevisionList - DaemonSet - DaemonSetCondition - DaemonSetList - DaemonSetSpec - DaemonSetStatus - DaemonSetUpdateStrategy - Deployment - DeploymentCondition - DeploymentList - DeploymentSpec - DeploymentStatus - DeploymentStrategy - ReplicaSet - ReplicaSetCondition - ReplicaSetList - ReplicaSetSpec - ReplicaSetStatus - RollingUpdateDaemonSet - RollingUpdateDeployment - RollingUpdateStatefulSetStrategy - Scale - ScaleSpec - ScaleStatus - StatefulSet - StatefulSetCondition - StatefulSetList - StatefulSetSpec - StatefulSetStatus - StatefulSetUpdateStrategy -*/ package v1beta2 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" + io "io" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import strings "strings" -import reflect "reflect" - -import io "io" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -86,136 +49,874 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *ControllerRevision) Reset() { *m = ControllerRevision{} } -func (*ControllerRevision) ProtoMessage() {} -func (*ControllerRevision) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ControllerRevisionList) Reset() { *m = ControllerRevisionList{} } -func (*ControllerRevisionList) ProtoMessage() {} -func (*ControllerRevisionList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *DaemonSet) Reset() { *m = DaemonSet{} } -func (*DaemonSet) ProtoMessage() {} -func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } -func (*DaemonSetCondition) ProtoMessage() {} -func (*DaemonSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } -func (*DaemonSetList) ProtoMessage() {} -func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } -func (*DaemonSetSpec) ProtoMessage() {} -func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } -func (*DaemonSetStatus) ProtoMessage() {} -func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } -func (*DaemonSetUpdateStrategy) ProtoMessage() {} -func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *Deployment) Reset() { *m = Deployment{} } -func (*Deployment) ProtoMessage() {} -func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } -func (*DeploymentCondition) ProtoMessage() {} -func (*DeploymentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } - -func (m *DeploymentList) Reset() { *m = DeploymentList{} } -func (*DeploymentList) ProtoMessage() {} -func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } - -func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } -func (*DeploymentSpec) ProtoMessage() {} -func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } - -func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } -func (*DeploymentStatus) ProtoMessage() {} -func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } - -func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } -func (*DeploymentStrategy) ProtoMessage() {} -func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } - -func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } -func (*ReplicaSet) ProtoMessage() {} -func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } - -func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } -func (*ReplicaSetCondition) ProtoMessage() {} -func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } - -func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } -func (*ReplicaSetList) ProtoMessage() {} -func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } - -func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } -func (*ReplicaSetSpec) ProtoMessage() {} -func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } - -func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } -func (*ReplicaSetStatus) ProtoMessage() {} -func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } - -func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } -func (*RollingUpdateDaemonSet) ProtoMessage() {} -func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +func (m *ControllerRevision) Reset() { *m = ControllerRevision{} } +func (*ControllerRevision) ProtoMessage() {} +func (*ControllerRevision) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{0} +} +func (m *ControllerRevision) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerRevision) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerRevision) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerRevision.Merge(m, src) +} +func (m *ControllerRevision) XXX_Size() int { + return m.Size() +} +func (m *ControllerRevision) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerRevision.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerRevision proto.InternalMessageInfo + +func (m *ControllerRevisionList) Reset() { *m = ControllerRevisionList{} } +func (*ControllerRevisionList) ProtoMessage() {} +func (*ControllerRevisionList) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{1} +} +func (m *ControllerRevisionList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerRevisionList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerRevisionList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerRevisionList.Merge(m, src) +} +func (m *ControllerRevisionList) XXX_Size() int { + return m.Size() +} +func (m *ControllerRevisionList) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerRevisionList.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerRevisionList proto.InternalMessageInfo + +func (m *DaemonSet) Reset() { *m = DaemonSet{} } +func (*DaemonSet) ProtoMessage() {} +func (*DaemonSet) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{2} +} +func (m *DaemonSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSet.Merge(m, src) +} +func (m *DaemonSet) XXX_Size() int { + return m.Size() +} +func (m *DaemonSet) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSet.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSet proto.InternalMessageInfo + +func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } +func (*DaemonSetCondition) ProtoMessage() {} +func (*DaemonSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{3} +} +func (m *DaemonSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetCondition.Merge(m, src) +} +func (m *DaemonSetCondition) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetCondition proto.InternalMessageInfo + +func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } +func (*DaemonSetList) ProtoMessage() {} +func (*DaemonSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{4} +} +func (m *DaemonSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetList.Merge(m, src) +} +func (m *DaemonSetList) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetList) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetList proto.InternalMessageInfo + +func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } +func (*DaemonSetSpec) ProtoMessage() {} +func (*DaemonSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{5} +} +func (m *DaemonSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetSpec.Merge(m, src) +} +func (m *DaemonSetSpec) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetSpec proto.InternalMessageInfo + +func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } +func (*DaemonSetStatus) ProtoMessage() {} +func (*DaemonSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{6} +} +func (m *DaemonSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetStatus.Merge(m, src) +} +func (m *DaemonSetStatus) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetStatus proto.InternalMessageInfo + +func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } +func (*DaemonSetUpdateStrategy) ProtoMessage() {} +func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{7} +} +func (m *DaemonSetUpdateStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetUpdateStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetUpdateStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetUpdateStrategy.Merge(m, src) +} +func (m *DaemonSetUpdateStrategy) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetUpdateStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetUpdateStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetUpdateStrategy proto.InternalMessageInfo + +func (m *Deployment) Reset() { *m = Deployment{} } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{8} +} +func (m *Deployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Deployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Deployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_Deployment.Merge(m, src) +} +func (m *Deployment) XXX_Size() int { + return m.Size() +} +func (m *Deployment) XXX_DiscardUnknown() { + xxx_messageInfo_Deployment.DiscardUnknown(m) +} + +var xxx_messageInfo_Deployment proto.InternalMessageInfo + +func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } +func (*DeploymentCondition) ProtoMessage() {} +func (*DeploymentCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{9} +} +func (m *DeploymentCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCondition.Merge(m, src) +} +func (m *DeploymentCondition) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentCondition proto.InternalMessageInfo + +func (m *DeploymentList) Reset() { *m = DeploymentList{} } +func (*DeploymentList) ProtoMessage() {} +func (*DeploymentList) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{10} +} +func (m *DeploymentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentList.Merge(m, src) +} +func (m *DeploymentList) XXX_Size() int { + return m.Size() +} +func (m *DeploymentList) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentList.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentList proto.InternalMessageInfo + +func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } +func (*DeploymentSpec) ProtoMessage() {} +func (*DeploymentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{11} +} +func (m *DeploymentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentSpec.Merge(m, src) +} +func (m *DeploymentSpec) XXX_Size() int { + return m.Size() +} +func (m *DeploymentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentSpec proto.InternalMessageInfo + +func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } +func (*DeploymentStatus) ProtoMessage() {} +func (*DeploymentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{12} +} +func (m *DeploymentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStatus.Merge(m, src) +} +func (m *DeploymentStatus) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStatus proto.InternalMessageInfo + +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{13} +} +func (m *DeploymentStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStrategy.Merge(m, src) +} +func (m *DeploymentStrategy) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStrategy proto.InternalMessageInfo + +func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } +func (*ReplicaSet) ProtoMessage() {} +func (*ReplicaSet) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{14} +} +func (m *ReplicaSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSet.Merge(m, src) +} +func (m *ReplicaSet) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSet) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSet.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSet proto.InternalMessageInfo + +func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } +func (*ReplicaSetCondition) ProtoMessage() {} +func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{15} +} +func (m *ReplicaSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetCondition.Merge(m, src) +} +func (m *ReplicaSetCondition) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetCondition proto.InternalMessageInfo + +func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } +func (*ReplicaSetList) ProtoMessage() {} +func (*ReplicaSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{16} +} +func (m *ReplicaSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetList.Merge(m, src) +} +func (m *ReplicaSetList) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetList) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetList proto.InternalMessageInfo + +func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } +func (*ReplicaSetSpec) ProtoMessage() {} +func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{17} +} +func (m *ReplicaSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetSpec.Merge(m, src) +} +func (m *ReplicaSetSpec) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetSpec proto.InternalMessageInfo + +func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } +func (*ReplicaSetStatus) ProtoMessage() {} +func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{18} +} +func (m *ReplicaSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetStatus.Merge(m, src) +} +func (m *ReplicaSetStatus) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSetStatus proto.InternalMessageInfo + +func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } +func (*RollingUpdateDaemonSet) ProtoMessage() {} +func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{19} +} +func (m *RollingUpdateDaemonSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateDaemonSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDaemonSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDaemonSet.Merge(m, src) +} +func (m *RollingUpdateDaemonSet) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateDaemonSet) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDaemonSet.DiscardUnknown(m) +} + +var xxx_messageInfo_RollingUpdateDaemonSet proto.InternalMessageInfo func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } func (*RollingUpdateDeployment) ProtoMessage() {} func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{20} + return fileDescriptor_42fe616264472f7e, []int{20} +} +func (m *RollingUpdateDeployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateDeployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDeployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDeployment.Merge(m, src) +} +func (m *RollingUpdateDeployment) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateDeployment) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDeployment.DiscardUnknown(m) } +var xxx_messageInfo_RollingUpdateDeployment proto.InternalMessageInfo + func (m *RollingUpdateStatefulSetStrategy) Reset() { *m = RollingUpdateStatefulSetStrategy{} } func (*RollingUpdateStatefulSetStrategy) ProtoMessage() {} func (*RollingUpdateStatefulSetStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{21} + return fileDescriptor_42fe616264472f7e, []int{21} +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateStatefulSetStrategy.Merge(m, src) +} +func (m *RollingUpdateStatefulSetStrategy) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateStatefulSetStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateStatefulSetStrategy.DiscardUnknown(m) } -func (m *Scale) Reset() { *m = Scale{} } -func (*Scale) ProtoMessage() {} -func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +var xxx_messageInfo_RollingUpdateStatefulSetStrategy proto.InternalMessageInfo -func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } -func (*ScaleSpec) ProtoMessage() {} -func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +func (m *Scale) Reset() { *m = Scale{} } +func (*Scale) ProtoMessage() {} +func (*Scale) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{22} +} +func (m *Scale) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Scale) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Scale) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scale.Merge(m, src) +} +func (m *Scale) XXX_Size() int { + return m.Size() +} +func (m *Scale) XXX_DiscardUnknown() { + xxx_messageInfo_Scale.DiscardUnknown(m) +} -func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } -func (*ScaleStatus) ProtoMessage() {} -func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +var xxx_messageInfo_Scale proto.InternalMessageInfo -func (m *StatefulSet) Reset() { *m = StatefulSet{} } -func (*StatefulSet) ProtoMessage() {} -func (*StatefulSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } +func (*ScaleSpec) ProtoMessage() {} +func (*ScaleSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{23} +} +func (m *ScaleSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleSpec.Merge(m, src) +} +func (m *ScaleSpec) XXX_Size() int { + return m.Size() +} +func (m *ScaleSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleSpec.DiscardUnknown(m) +} -func (m *StatefulSetCondition) Reset() { *m = StatefulSetCondition{} } -func (*StatefulSetCondition) ProtoMessage() {} -func (*StatefulSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +var xxx_messageInfo_ScaleSpec proto.InternalMessageInfo -func (m *StatefulSetList) Reset() { *m = StatefulSetList{} } -func (*StatefulSetList) ProtoMessage() {} -func (*StatefulSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } +func (*ScaleStatus) ProtoMessage() {} +func (*ScaleStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{24} +} +func (m *ScaleStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleStatus.Merge(m, src) +} +func (m *ScaleStatus) XXX_Size() int { + return m.Size() +} +func (m *ScaleStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ScaleStatus proto.InternalMessageInfo + +func (m *StatefulSet) Reset() { *m = StatefulSet{} } +func (*StatefulSet) ProtoMessage() {} +func (*StatefulSet) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{25} +} +func (m *StatefulSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSet.Merge(m, src) +} +func (m *StatefulSet) XXX_Size() int { + return m.Size() +} +func (m *StatefulSet) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSet.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSet proto.InternalMessageInfo + +func (m *StatefulSetCondition) Reset() { *m = StatefulSetCondition{} } +func (*StatefulSetCondition) ProtoMessage() {} +func (*StatefulSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{26} +} +func (m *StatefulSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetCondition.Merge(m, src) +} +func (m *StatefulSetCondition) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetCondition.DiscardUnknown(m) +} -func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } -func (*StatefulSetSpec) ProtoMessage() {} -func (*StatefulSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +var xxx_messageInfo_StatefulSetCondition proto.InternalMessageInfo + +func (m *StatefulSetList) Reset() { *m = StatefulSetList{} } +func (*StatefulSetList) ProtoMessage() {} +func (*StatefulSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{27} +} +func (m *StatefulSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetList.Merge(m, src) +} +func (m *StatefulSetList) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetList) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetList.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetList proto.InternalMessageInfo + +func (m *StatefulSetSpec) Reset() { *m = StatefulSetSpec{} } +func (*StatefulSetSpec) ProtoMessage() {} +func (*StatefulSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{28} +} +func (m *StatefulSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetSpec.Merge(m, src) +} +func (m *StatefulSetSpec) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_StatefulSetSpec proto.InternalMessageInfo + +func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } +func (*StatefulSetStatus) ProtoMessage() {} +func (*StatefulSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_42fe616264472f7e, []int{29} +} +func (m *StatefulSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetStatus.Merge(m, src) +} +func (m *StatefulSetStatus) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetStatus.DiscardUnknown(m) +} -func (m *StatefulSetStatus) Reset() { *m = StatefulSetStatus{} } -func (*StatefulSetStatus) ProtoMessage() {} -func (*StatefulSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +var xxx_messageInfo_StatefulSetStatus proto.InternalMessageInfo func (m *StatefulSetUpdateStrategy) Reset() { *m = StatefulSetUpdateStrategy{} } func (*StatefulSetUpdateStrategy) ProtoMessage() {} func (*StatefulSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{30} + return fileDescriptor_42fe616264472f7e, []int{30} +} +func (m *StatefulSetUpdateStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatefulSetUpdateStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatefulSetUpdateStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatefulSetUpdateStrategy.Merge(m, src) +} +func (m *StatefulSetUpdateStrategy) XXX_Size() int { + return m.Size() +} +func (m *StatefulSetUpdateStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_StatefulSetUpdateStrategy.DiscardUnknown(m) } +var xxx_messageInfo_StatefulSetUpdateStrategy proto.InternalMessageInfo + func init() { proto.RegisterType((*ControllerRevision)(nil), "k8s.io.api.apps.v1beta2.ControllerRevision") proto.RegisterType((*ControllerRevisionList)(nil), "k8s.io.api.apps.v1beta2.ControllerRevisionList") @@ -242,6 +943,7 @@ proto.RegisterType((*Scale)(nil), "k8s.io.api.apps.v1beta2.Scale") proto.RegisterType((*ScaleSpec)(nil), "k8s.io.api.apps.v1beta2.ScaleSpec") proto.RegisterType((*ScaleStatus)(nil), "k8s.io.api.apps.v1beta2.ScaleStatus") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.apps.v1beta2.ScaleStatus.SelectorEntry") proto.RegisterType((*StatefulSet)(nil), "k8s.io.api.apps.v1beta2.StatefulSet") proto.RegisterType((*StatefulSetCondition)(nil), "k8s.io.api.apps.v1beta2.StatefulSetCondition") proto.RegisterType((*StatefulSetList)(nil), "k8s.io.api.apps.v1beta2.StatefulSetList") @@ -249,10 +951,155 @@ proto.RegisterType((*StatefulSetStatus)(nil), "k8s.io.api.apps.v1beta2.StatefulSetStatus") proto.RegisterType((*StatefulSetUpdateStrategy)(nil), "k8s.io.api.apps.v1beta2.StatefulSetUpdateStrategy") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta2/generated.proto", fileDescriptor_42fe616264472f7e) +} + +var fileDescriptor_42fe616264472f7e = []byte{ + // 2171 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1c, 0xb7, + 0xf9, 0xd6, 0xec, 0x87, 0xb4, 0xa2, 0x2c, 0xc9, 0xa6, 0xf4, 0x93, 0x36, 0xf2, 0xaf, 0x2b, 0x63, + 0x13, 0x38, 0x4a, 0x6c, 0xcd, 0xda, 0xca, 0x07, 0x12, 0xbb, 0x68, 0xab, 0x95, 0x52, 0xdb, 0x81, + 0xbe, 0x42, 0x59, 0x06, 0x1a, 0xb4, 0xa8, 0xa9, 0x5d, 0x7a, 0x35, 0xd1, 0x7c, 0x61, 0x86, 0xb3, + 0xf5, 0xa2, 0x97, 0x9e, 0x0a, 0x14, 0x28, 0xd0, 0xf6, 0xda, 0x7f, 0xa2, 0xb7, 0xa2, 0x68, 0x6f, + 0x45, 0x50, 0xf8, 0x52, 0x20, 0xe8, 0x25, 0x39, 0x09, 0xf5, 0xe6, 0x54, 0x14, 0xbd, 0x14, 0xe8, + 0x25, 0x40, 0x81, 0x82, 0x1c, 0xce, 0x07, 0xe7, 0xc3, 0x3b, 0x52, 0x1c, 0xa5, 0x29, 0x72, 0xd3, + 0x92, 0xcf, 0xfb, 0xf0, 0x7d, 0xc9, 0x97, 0x7c, 0x1f, 0x72, 0x04, 0xbe, 0x73, 0xfc, 0x96, 0xab, + 0x6a, 0x56, 0xeb, 0xd8, 0x3b, 0x24, 0x8e, 0x49, 0x28, 0x71, 0x5b, 0x7d, 0x62, 0x76, 0x2d, 0xa7, + 0x25, 0x3a, 0xb0, 0xad, 0xb5, 0xb0, 0x6d, 0xbb, 0xad, 0xfe, 0xcd, 0x43, 0x42, 0xf1, 0x5a, 0xab, + 0x47, 0x4c, 0xe2, 0x60, 0x4a, 0xba, 0xaa, 0xed, 0x58, 0xd4, 0x82, 0x8b, 0x3e, 0x50, 0xc5, 0xb6, + 0xa6, 0x32, 0xa0, 0x2a, 0x80, 0x4b, 0xab, 0x3d, 0x8d, 0x1e, 0x79, 0x87, 0x6a, 0xc7, 0x32, 0x5a, + 0x3d, 0xab, 0x67, 0xb5, 0x38, 0xfe, 0xd0, 0x7b, 0xc4, 0x7f, 0xf1, 0x1f, 0xfc, 0x2f, 0x9f, 0x67, + 0xa9, 0x19, 0x1b, 0xb0, 0x63, 0x39, 0xa4, 0xd5, 0xbf, 0x99, 0x1c, 0x6b, 0xe9, 0xf5, 0x08, 0x63, + 0xe0, 0xce, 0x91, 0x66, 0x12, 0x67, 0xd0, 0xb2, 0x8f, 0x7b, 0xac, 0xc1, 0x6d, 0x19, 0x84, 0xe2, + 0x2c, 0xab, 0x56, 0x9e, 0x95, 0xe3, 0x99, 0x54, 0x33, 0x48, 0xca, 0xe0, 0xcd, 0x51, 0x06, 0x6e, + 0xe7, 0x88, 0x18, 0x38, 0x65, 0xf7, 0x5a, 0x9e, 0x9d, 0x47, 0x35, 0xbd, 0xa5, 0x99, 0xd4, 0xa5, + 0x4e, 0xd2, 0xa8, 0xf9, 0x2f, 0x05, 0xc0, 0x0d, 0xcb, 0xa4, 0x8e, 0xa5, 0xeb, 0xc4, 0x41, 0xa4, + 0xaf, 0xb9, 0x9a, 0x65, 0xc2, 0x87, 0xa0, 0xc6, 0xe2, 0xe9, 0x62, 0x8a, 0xeb, 0xca, 0x15, 0x65, + 0x65, 0x6a, 0xed, 0x86, 0x1a, 0xcd, 0x74, 0x48, 0xaf, 0xda, 0xc7, 0x3d, 0xd6, 0xe0, 0xaa, 0x0c, + 0xad, 0xf6, 0x6f, 0xaa, 0xbb, 0x87, 0x1f, 0x90, 0x0e, 0xdd, 0x26, 0x14, 0xb7, 0xe1, 0x93, 0x93, + 0xe5, 0xb1, 0xe1, 0xc9, 0x32, 0x88, 0xda, 0x50, 0xc8, 0x0a, 0x77, 0x41, 0x85, 0xb3, 0x97, 0x38, + 0xfb, 0x6a, 0x2e, 0xbb, 0x08, 0x5a, 0x45, 0xf8, 0x47, 0xef, 0x3c, 0xa6, 0xc4, 0x64, 0xee, 0xb5, + 0x2f, 0x08, 0xea, 0xca, 0x26, 0xa6, 0x18, 0x71, 0x22, 0x78, 0x1d, 0xd4, 0x1c, 0xe1, 0x7e, 0xbd, + 0x7c, 0x45, 0x59, 0x29, 0xb7, 0x2f, 0x0a, 0x54, 0x2d, 0x08, 0x0b, 0x85, 0x88, 0xe6, 0x13, 0x05, + 0x2c, 0xa4, 0xe3, 0xde, 0xd2, 0x5c, 0x0a, 0xbf, 0x9f, 0x8a, 0x5d, 0x2d, 0x16, 0x3b, 0xb3, 0xe6, + 0x91, 0x87, 0x03, 0x07, 0x2d, 0xb1, 0xb8, 0xf7, 0x40, 0x55, 0xa3, 0xc4, 0x70, 0xeb, 0xa5, 0x2b, + 0xe5, 0x95, 0xa9, 0xb5, 0x6b, 0x6a, 0x4e, 0x02, 0xab, 0x69, 0xef, 0xda, 0xd3, 0x82, 0xb7, 0x7a, + 0x8f, 0x31, 0x20, 0x9f, 0xa8, 0xf9, 0xb3, 0x12, 0x98, 0xdc, 0xc4, 0xc4, 0xb0, 0xcc, 0x7d, 0x42, + 0xcf, 0x61, 0xe5, 0xee, 0x82, 0x8a, 0x6b, 0x93, 0x8e, 0x58, 0xb9, 0xab, 0xb9, 0x01, 0x84, 0x3e, + 0xed, 0xdb, 0xa4, 0x13, 0x2d, 0x19, 0xfb, 0x85, 0x38, 0x03, 0xdc, 0x03, 0xe3, 0x2e, 0xc5, 0xd4, + 0x73, 0xf9, 0x82, 0x4d, 0xad, 0xad, 0x14, 0xe0, 0xe2, 0xf8, 0xf6, 0x8c, 0x60, 0x1b, 0xf7, 0x7f, + 0x23, 0xc1, 0xd3, 0xfc, 0x5b, 0x09, 0xc0, 0x10, 0xbb, 0x61, 0x99, 0x5d, 0x8d, 0xb2, 0x74, 0xbe, + 0x05, 0x2a, 0x74, 0x60, 0x13, 0x3e, 0x21, 0x93, 0xed, 0xab, 0x81, 0x2b, 0xf7, 0x07, 0x36, 0xf9, + 0xec, 0x64, 0x79, 0x21, 0x6d, 0xc1, 0x7a, 0x10, 0xb7, 0x81, 0x5b, 0xa1, 0x93, 0x25, 0x6e, 0xfd, + 0xba, 0x3c, 0xf4, 0x67, 0x27, 0xcb, 0x19, 0x67, 0x87, 0x1a, 0x32, 0xc9, 0x0e, 0xc2, 0x3e, 0x80, + 0x3a, 0x76, 0xe9, 0x7d, 0x07, 0x9b, 0xae, 0x3f, 0x92, 0x66, 0x10, 0x11, 0xfe, 0xab, 0xc5, 0x16, + 0x8a, 0x59, 0xb4, 0x97, 0x84, 0x17, 0x70, 0x2b, 0xc5, 0x86, 0x32, 0x46, 0x80, 0x57, 0xc1, 0xb8, + 0x43, 0xb0, 0x6b, 0x99, 0xf5, 0x0a, 0x8f, 0x22, 0x9c, 0x40, 0xc4, 0x5b, 0x91, 0xe8, 0x85, 0xaf, + 0x80, 0x09, 0x83, 0xb8, 0x2e, 0xee, 0x91, 0x7a, 0x95, 0x03, 0x67, 0x05, 0x70, 0x62, 0xdb, 0x6f, + 0x46, 0x41, 0x7f, 0xf3, 0xb7, 0x0a, 0x98, 0x0e, 0x67, 0xee, 0x1c, 0x76, 0xce, 0x1d, 0x79, 0xe7, + 0x34, 0x47, 0x27, 0x4b, 0xce, 0x86, 0xf9, 0xb0, 0x1c, 0x73, 0x9c, 0xa5, 0x23, 0xfc, 0x01, 0xa8, + 0xb9, 0x44, 0x27, 0x1d, 0x6a, 0x39, 0xc2, 0xf1, 0xd7, 0x0a, 0x3a, 0x8e, 0x0f, 0x89, 0xbe, 0x2f, + 0x4c, 0xdb, 0x17, 0x98, 0xe7, 0xc1, 0x2f, 0x14, 0x52, 0xc2, 0xf7, 0x40, 0x8d, 0x12, 0xc3, 0xd6, + 0x31, 0x25, 0x62, 0xd7, 0xbc, 0x18, 0x77, 0x9e, 0xe5, 0x0c, 0x23, 0xdb, 0xb3, 0xba, 0xf7, 0x05, + 0x8c, 0x6f, 0x99, 0x70, 0x32, 0x82, 0x56, 0x14, 0xd2, 0x40, 0x1b, 0xcc, 0x78, 0x76, 0x97, 0x21, + 0x29, 0x3b, 0xce, 0x7b, 0x03, 0x91, 0x43, 0x37, 0x46, 0xcf, 0xca, 0x81, 0x64, 0xd7, 0x5e, 0x10, + 0xa3, 0xcc, 0xc8, 0xed, 0x28, 0xc1, 0x0f, 0xd7, 0xc1, 0xac, 0xa1, 0x99, 0x88, 0xe0, 0xee, 0x60, + 0x9f, 0x74, 0x2c, 0xb3, 0xeb, 0xf2, 0x54, 0xaa, 0xb6, 0x17, 0x05, 0xc1, 0xec, 0xb6, 0xdc, 0x8d, + 0x92, 0x78, 0xb8, 0x05, 0xe6, 0x83, 0x03, 0xf8, 0xae, 0xe6, 0x52, 0xcb, 0x19, 0x6c, 0x69, 0x86, + 0x46, 0xeb, 0xe3, 0x9c, 0xa7, 0x3e, 0x3c, 0x59, 0x9e, 0x47, 0x19, 0xfd, 0x28, 0xd3, 0xaa, 0xf9, + 0xab, 0x71, 0x30, 0x9b, 0x38, 0x17, 0xe0, 0x03, 0xb0, 0xd0, 0xf1, 0x1c, 0x87, 0x98, 0x74, 0xc7, + 0x33, 0x0e, 0x89, 0xb3, 0xdf, 0x39, 0x22, 0x5d, 0x4f, 0x27, 0x5d, 0xbe, 0xac, 0xd5, 0x76, 0x43, + 0xf8, 0xba, 0xb0, 0x91, 0x89, 0x42, 0x39, 0xd6, 0xf0, 0x5d, 0x00, 0x4d, 0xde, 0xb4, 0xad, 0xb9, + 0x6e, 0xc8, 0x59, 0xe2, 0x9c, 0xe1, 0x56, 0xdc, 0x49, 0x21, 0x50, 0x86, 0x15, 0xf3, 0xb1, 0x4b, + 0x5c, 0xcd, 0x21, 0xdd, 0xa4, 0x8f, 0x65, 0xd9, 0xc7, 0xcd, 0x4c, 0x14, 0xca, 0xb1, 0x86, 0x6f, + 0x80, 0x29, 0x7f, 0x34, 0x3e, 0xe7, 0x62, 0x71, 0xe6, 0x04, 0xd9, 0xd4, 0x4e, 0xd4, 0x85, 0xe2, + 0x38, 0x16, 0x9a, 0x75, 0xe8, 0x12, 0xa7, 0x4f, 0xba, 0x77, 0x7c, 0x71, 0xc0, 0x2a, 0x68, 0x95, + 0x57, 0xd0, 0x30, 0xb4, 0xdd, 0x14, 0x02, 0x65, 0x58, 0xb1, 0xd0, 0xfc, 0xac, 0x49, 0x85, 0x36, + 0x2e, 0x87, 0x76, 0x90, 0x89, 0x42, 0x39, 0xd6, 0x2c, 0xf7, 0x7c, 0x97, 0xd7, 0xfb, 0x58, 0xd3, + 0xf1, 0xa1, 0x4e, 0xea, 0x13, 0x72, 0xee, 0xed, 0xc8, 0xdd, 0x28, 0x89, 0x87, 0x77, 0xc0, 0x25, + 0xbf, 0xe9, 0xc0, 0xc4, 0x21, 0x49, 0x8d, 0x93, 0xbc, 0x20, 0x48, 0x2e, 0xed, 0x24, 0x01, 0x28, + 0x6d, 0x03, 0x6f, 0x81, 0x99, 0x8e, 0xa5, 0xeb, 0x3c, 0x1f, 0x37, 0x2c, 0xcf, 0xa4, 0xf5, 0x49, + 0xce, 0x02, 0xd9, 0x1e, 0xda, 0x90, 0x7a, 0x50, 0x02, 0x09, 0x7f, 0x08, 0x40, 0x27, 0x28, 0x0c, + 0x6e, 0x1d, 0x8c, 0x50, 0x00, 0xe9, 0xb2, 0x14, 0x55, 0xe6, 0xb0, 0xc9, 0x45, 0x31, 0xca, 0xe6, + 0x87, 0x0a, 0x58, 0xcc, 0xd9, 0xe8, 0xf0, 0xdb, 0x52, 0x11, 0xbc, 0x96, 0x28, 0x82, 0x97, 0x73, + 0xcc, 0x62, 0x95, 0xf0, 0x08, 0x4c, 0x33, 0x41, 0xa2, 0x99, 0x3d, 0x1f, 0x22, 0xce, 0xb2, 0x56, + 0x6e, 0x00, 0x28, 0x8e, 0x8e, 0x4e, 0xe5, 0x4b, 0xc3, 0x93, 0xe5, 0x69, 0xa9, 0x0f, 0xc9, 0xc4, + 0xcd, 0x9f, 0x97, 0x00, 0xd8, 0x24, 0xb6, 0x6e, 0x0d, 0x0c, 0x62, 0x9e, 0x87, 0xa6, 0xb9, 0x27, + 0x69, 0x9a, 0x97, 0xf3, 0x97, 0x24, 0x74, 0x2a, 0x57, 0xd4, 0xbc, 0x97, 0x10, 0x35, 0xaf, 0x14, + 0x21, 0x7b, 0xb6, 0xaa, 0xf9, 0xb8, 0x0c, 0xe6, 0x22, 0x70, 0x24, 0x6b, 0x6e, 0x4b, 0x2b, 0xfa, + 0x72, 0x62, 0x45, 0x17, 0x33, 0x4c, 0xbe, 0x30, 0x5d, 0xf3, 0x01, 0x98, 0x61, 0xaa, 0xc3, 0x5f, + 0x3f, 0xae, 0x69, 0xc6, 0x4f, 0xad, 0x69, 0xc2, 0x4a, 0xb4, 0x25, 0x31, 0xa1, 0x04, 0x73, 0x8e, + 0x86, 0x9a, 0xf8, 0x2a, 0x6a, 0xa8, 0xdf, 0x29, 0x60, 0x26, 0x5a, 0xa6, 0x73, 0x10, 0x51, 0x77, + 0x65, 0x11, 0xf5, 0x62, 0x81, 0xe4, 0xcc, 0x51, 0x51, 0x1f, 0x57, 0xe2, 0xae, 0x73, 0x19, 0xb5, + 0xc2, 0xae, 0x60, 0xb6, 0xae, 0x75, 0xb0, 0x2b, 0xea, 0xed, 0x05, 0xff, 0xfa, 0xe5, 0xb7, 0xa1, + 0xb0, 0x57, 0x12, 0x5c, 0xa5, 0x2f, 0x56, 0x70, 0x95, 0x9f, 0x8f, 0xe0, 0xfa, 0x1e, 0xa8, 0xb9, + 0x81, 0xd4, 0xaa, 0x70, 0xca, 0x6b, 0x85, 0x36, 0xb6, 0x50, 0x59, 0x21, 0x75, 0xa8, 0xaf, 0x42, + 0xba, 0x2c, 0x65, 0x55, 0xfd, 0x32, 0x95, 0x15, 0x4b, 0x74, 0x1b, 0x7b, 0x2e, 0xe9, 0xf2, 0x4d, + 0x55, 0x8b, 0x12, 0x7d, 0x8f, 0xb7, 0x22, 0xd1, 0x0b, 0x0f, 0xc0, 0xa2, 0xed, 0x58, 0x3d, 0x87, + 0xb8, 0xee, 0x26, 0xc1, 0x5d, 0x5d, 0x33, 0x49, 0x10, 0x80, 0x5f, 0x13, 0x2f, 0x0f, 0x4f, 0x96, + 0x17, 0xf7, 0xb2, 0x21, 0x28, 0xcf, 0xb6, 0xf9, 0xc7, 0x0a, 0xb8, 0x98, 0x3c, 0x1b, 0x73, 0x64, + 0x8a, 0x72, 0x26, 0x99, 0x72, 0x3d, 0x96, 0xa7, 0xbe, 0x86, 0x8b, 0x3d, 0x15, 0xa4, 0x72, 0x75, + 0x1d, 0xcc, 0x0a, 0x59, 0x12, 0x74, 0x0a, 0xa1, 0x16, 0x2e, 0xcf, 0x81, 0xdc, 0x8d, 0x92, 0x78, + 0x78, 0x1b, 0x4c, 0x3b, 0x5c, 0x79, 0x05, 0x04, 0xbe, 0x7a, 0xf9, 0x3f, 0x41, 0x30, 0x8d, 0xe2, + 0x9d, 0x48, 0xc6, 0x32, 0xe5, 0x12, 0x09, 0x92, 0x80, 0xa0, 0x22, 0x2b, 0x97, 0xf5, 0x24, 0x00, + 0xa5, 0x6d, 0xe0, 0x36, 0x98, 0xf3, 0xcc, 0x34, 0x95, 0x9f, 0x6b, 0x97, 0x05, 0xd5, 0xdc, 0x41, + 0x1a, 0x82, 0xb2, 0xec, 0xe0, 0x43, 0x49, 0xcc, 0x8c, 0xf3, 0xf3, 0xe4, 0x7a, 0x81, 0x3d, 0x51, + 0x58, 0xcd, 0x64, 0x48, 0xad, 0x5a, 0x51, 0xa9, 0xd5, 0xfc, 0x83, 0x02, 0x60, 0x7a, 0x1f, 0x8e, + 0x7c, 0x09, 0x48, 0x59, 0xc4, 0x2a, 0xa6, 0x96, 0xad, 0x7f, 0x6e, 0x14, 0xd4, 0x3f, 0xd1, 0x81, + 0x5a, 0x4c, 0x00, 0x89, 0x89, 0x3e, 0x9f, 0x47, 0x9d, 0xa2, 0x02, 0x28, 0x72, 0xea, 0x39, 0x08, + 0xa0, 0x18, 0xd9, 0xb3, 0x05, 0xd0, 0xdf, 0x4b, 0x60, 0x2e, 0x02, 0x17, 0x16, 0x40, 0x19, 0x26, + 0x5f, 0x3f, 0xec, 0x14, 0x13, 0x25, 0xd1, 0xd4, 0xfd, 0x37, 0x89, 0x92, 0xc8, 0xab, 0x1c, 0x51, + 0xf2, 0x9b, 0x52, 0xdc, 0xf5, 0x53, 0x8a, 0x92, 0xe7, 0xf0, 0xc2, 0xf1, 0x95, 0xd3, 0x35, 0xcd, + 0x3f, 0x95, 0xc1, 0xc5, 0xe4, 0x3e, 0x94, 0x0a, 0xa4, 0x32, 0xb2, 0x40, 0xee, 0x81, 0xf9, 0x47, + 0x9e, 0xae, 0x0f, 0x78, 0x0c, 0xb1, 0x2a, 0xe9, 0x97, 0xd6, 0xff, 0x17, 0x96, 0xf3, 0xdf, 0xcd, + 0xc0, 0xa0, 0x4c, 0xcb, 0x74, 0xbd, 0xac, 0x7c, 0xde, 0x7a, 0x59, 0x3d, 0x43, 0xbd, 0xcc, 0x96, + 0x1c, 0xe5, 0x33, 0x49, 0x8e, 0xd3, 0x15, 0xcb, 0x8c, 0x83, 0x6b, 0xe4, 0xd5, 0xff, 0xa7, 0x0a, + 0x58, 0xc8, 0xbe, 0x70, 0x43, 0x1d, 0xcc, 0x18, 0xf8, 0x71, 0xfc, 0xe1, 0x63, 0x54, 0x11, 0xf1, + 0xa8, 0xa6, 0xab, 0xfe, 0x27, 0x23, 0xf5, 0x9e, 0x49, 0x77, 0x9d, 0x7d, 0xea, 0x68, 0x66, 0xcf, + 0xaf, 0xbc, 0xdb, 0x12, 0x17, 0x4a, 0x70, 0x37, 0x3f, 0x55, 0xc0, 0x62, 0x4e, 0xe5, 0x3b, 0x5f, + 0x4f, 0xe0, 0xfb, 0xa0, 0x66, 0xe0, 0xc7, 0xfb, 0x9e, 0xd3, 0xcb, 0xaa, 0xd5, 0xc5, 0xc6, 0xe1, + 0x5b, 0x71, 0x5b, 0xb0, 0xa0, 0x90, 0xaf, 0xb9, 0x0b, 0xae, 0x48, 0x41, 0xb2, 0x9d, 0x43, 0x1e, + 0x79, 0x3a, 0xdf, 0x44, 0x42, 0x6c, 0x5c, 0x03, 0x93, 0x36, 0x76, 0xa8, 0x16, 0x4a, 0xd5, 0x6a, + 0x7b, 0x7a, 0x78, 0xb2, 0x3c, 0xb9, 0x17, 0x34, 0xa2, 0xa8, 0xbf, 0xf9, 0x6f, 0x05, 0x54, 0xf7, + 0x3b, 0x58, 0x27, 0xe7, 0x50, 0xed, 0x37, 0xa5, 0x6a, 0x9f, 0xff, 0x92, 0xce, 0xfd, 0xc9, 0x2d, + 0xf4, 0x5b, 0x89, 0x42, 0xff, 0xd2, 0x08, 0x9e, 0x67, 0xd7, 0xf8, 0xb7, 0xc1, 0x64, 0x38, 0xdc, + 0xe9, 0x0e, 0xa0, 0xe6, 0xaf, 0x4b, 0x60, 0x2a, 0x36, 0xc4, 0x29, 0x8f, 0xaf, 0x87, 0xd2, 0x99, + 0xcd, 0x36, 0xe6, 0x5a, 0x91, 0x40, 0xd4, 0xe0, 0x7c, 0x7e, 0xc7, 0xa4, 0x4e, 0xfc, 0x82, 0x97, + 0x3e, 0xb6, 0xbf, 0x05, 0x66, 0x28, 0x76, 0x7a, 0x84, 0x06, 0x7d, 0x7c, 0xc2, 0x26, 0xa3, 0x07, + 0x8f, 0xfb, 0x52, 0x2f, 0x4a, 0xa0, 0x97, 0x6e, 0x83, 0x69, 0x69, 0x30, 0x78, 0x11, 0x94, 0x8f, + 0xc9, 0xc0, 0x97, 0x3d, 0x88, 0xfd, 0x09, 0xe7, 0x41, 0xb5, 0x8f, 0x75, 0xcf, 0xcf, 0xf3, 0x49, + 0xe4, 0xff, 0xb8, 0x55, 0x7a, 0x4b, 0x69, 0xfe, 0x82, 0x4d, 0x4e, 0x94, 0x9c, 0xe7, 0x90, 0x5d, + 0xef, 0x4a, 0xd9, 0x95, 0xff, 0x51, 0x2f, 0xbe, 0x65, 0xf2, 0x72, 0x0c, 0x25, 0x72, 0xec, 0xd5, + 0x42, 0x6c, 0xcf, 0xce, 0xb4, 0x7f, 0x94, 0xc0, 0x7c, 0x0c, 0x1d, 0xc9, 0xc9, 0x6f, 0x4a, 0x72, + 0x72, 0x25, 0x21, 0x27, 0xeb, 0x59, 0x36, 0x5f, 0xeb, 0xc9, 0xd1, 0x7a, 0xf2, 0xf7, 0x0a, 0x98, + 0x8d, 0xcd, 0xdd, 0x39, 0x08, 0xca, 0x7b, 0xb2, 0xa0, 0x7c, 0xa9, 0x48, 0xd2, 0xe4, 0x28, 0xca, + 0x3f, 0x57, 0x25, 0xe7, 0xff, 0xe7, 0xdf, 0xb9, 0x7e, 0x0c, 0xe6, 0xfb, 0x96, 0xee, 0x19, 0x64, + 0x43, 0xc7, 0x9a, 0x11, 0x00, 0x98, 0x02, 0x2b, 0x27, 0xef, 0x72, 0x21, 0x3d, 0x71, 0x5c, 0xcd, + 0xa5, 0xc4, 0xa4, 0x0f, 0x22, 0xcb, 0x48, 0xf7, 0x3d, 0xc8, 0xa0, 0x43, 0x99, 0x83, 0xc0, 0x37, + 0xc0, 0x14, 0x53, 0x4e, 0x5a, 0x87, 0xec, 0x60, 0x23, 0x48, 0xac, 0xf0, 0x13, 0xd6, 0x7e, 0xd4, + 0x85, 0xe2, 0x38, 0x78, 0x04, 0xe6, 0x6c, 0xab, 0xbb, 0x8d, 0x4d, 0xdc, 0x23, 0x4c, 0x66, 0xec, + 0x59, 0xba, 0xd6, 0x19, 0xf0, 0xc7, 0xaf, 0xc9, 0xf6, 0x9b, 0xc1, 0xc3, 0xc6, 0x5e, 0x1a, 0xc2, + 0x2e, 0x89, 0x19, 0xcd, 0x7c, 0x53, 0x67, 0x51, 0x42, 0x27, 0xf5, 0xd9, 0xd5, 0x7f, 0x76, 0x5e, + 0x2b, 0x92, 0x61, 0x67, 0xfc, 0xf0, 0x9a, 0xf7, 0xb6, 0x57, 0x3b, 0xd3, 0x57, 0xd3, 0x7f, 0x56, + 0xc0, 0xa5, 0xd4, 0x51, 0xf9, 0x25, 0xbe, 0xae, 0xa5, 0xa4, 0x7e, 0xf9, 0x14, 0x52, 0x7f, 0x1d, + 0xcc, 0x8a, 0x0f, 0xb6, 0x89, 0x9b, 0x42, 0x78, 0x63, 0xdb, 0x90, 0xbb, 0x51, 0x12, 0x9f, 0xf5, + 0xba, 0x57, 0x3d, 0xe5, 0xeb, 0x5e, 0xdc, 0x0b, 0xf1, 0x0f, 0x48, 0x7e, 0xea, 0xa5, 0xbd, 0x10, + 0xff, 0x87, 0x94, 0xc4, 0x33, 0x85, 0xe0, 0xb3, 0x86, 0x0c, 0x13, 0xb2, 0x42, 0x38, 0x90, 0x7a, + 0x51, 0x02, 0xfd, 0xb9, 0x3e, 0x4a, 0xe2, 0x8c, 0x8f, 0x92, 0xab, 0x45, 0xf2, 0xb9, 0xf8, 0xdd, + 0xe4, 0x2f, 0x0a, 0x78, 0x21, 0x77, 0x23, 0xc0, 0x75, 0xa9, 0xec, 0xae, 0x26, 0xca, 0xee, 0x37, + 0x72, 0x0d, 0x63, 0xb5, 0xd7, 0xc9, 0x7e, 0x9a, 0x7b, 0xbb, 0xd8, 0xd3, 0x5c, 0x86, 0x76, 0x1f, + 0xfd, 0x46, 0xd7, 0x5e, 0x7d, 0xf2, 0xb4, 0x31, 0xf6, 0xd1, 0xd3, 0xc6, 0xd8, 0x27, 0x4f, 0x1b, + 0x63, 0x3f, 0x19, 0x36, 0x94, 0x27, 0xc3, 0x86, 0xf2, 0xd1, 0xb0, 0xa1, 0x7c, 0x32, 0x6c, 0x28, + 0x7f, 0x1d, 0x36, 0x94, 0x5f, 0x7e, 0xda, 0x18, 0x7b, 0x7f, 0x42, 0x8c, 0xf8, 0x9f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x70, 0x2d, 0x26, 0x9d, 0xec, 0x28, 0x00, 0x00, +} + func (m *ControllerRevision) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -260,36 +1107,45 @@ } func (m *ControllerRevision) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) + i-- + dAtA[i] = 0x18 + { + size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Data.Size())) - n2, err := m.Data.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ControllerRevisionList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -297,37 +1153,46 @@ } func (m *ControllerRevisionList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerRevisionList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n3, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -335,41 +1200,52 @@ } func (m *DaemonSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n5, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n6, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -377,41 +1253,52 @@ } func (m *DaemonSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n7, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -419,37 +1306,46 @@ } func (m *DaemonSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n8, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -457,51 +1353,62 @@ } func (m *DaemonSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Selector != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n9, err := m.Selector.MarshalTo(dAtA[i:]) + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + { + size, err := m.UpdateStrategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n9 - } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n10, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) - n11, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x12 + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *DaemonSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -509,58 +1416,65 @@ } func (m *DaemonSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) - if m.CollisionCount != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x52 } } - return i, nil + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x48 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) + i-- + dAtA[i] = 0x40 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) + i-- + dAtA[i] = 0x38 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DaemonSetUpdateStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -568,31 +1482,39 @@ } func (m *DaemonSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetUpdateStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n12, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n12 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Deployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -600,41 +1522,52 @@ } func (m *Deployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Deployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n13, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n14, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n14 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n15, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -642,49 +1575,62 @@ } func (m *DeploymentCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastUpdateTime.Size())) - n16, err := m.LastUpdateTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n16 + i-- dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n17, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n17 - return i, nil + i-- + dAtA[i] = 0x32 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -692,37 +1638,46 @@ } func (m *DeploymentList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n18, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -730,122 +1685,140 @@ } func (m *DeploymentSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + if m.ProgressDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + i-- + dAtA[i] = 0x48 } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n19, err := m.Selector.MarshalTo(dAtA[i:]) + i-- + if m.Paused { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x28 + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n19 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n20, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Strategy.Size())) - n21, err := m.Strategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n21 - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x38 - i++ - if m.Paused { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i++ - if m.ProgressDeadlineSeconds != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *DeploymentStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + return dAtA[:n], nil +} + +func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l if m.CollisionCount != nil { - dAtA[i] = 0x40 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x40 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x38 + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DeploymentStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -853,31 +1826,39 @@ } func (m *DeploymentStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n22, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n22 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -885,41 +1866,52 @@ } func (m *ReplicaSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n23, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n24, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n24 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n25, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n25 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -927,41 +1919,52 @@ } func (m *ReplicaSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n26, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -969,37 +1972,46 @@ } func (m *ReplicaSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n27, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1007,43 +2019,52 @@ } func (m *ReplicaSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) - } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n28, err := m.Selector.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n28 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n29, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n29 - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - return i, nil + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *ReplicaSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1051,44 +2072,51 @@ } func (m *ReplicaSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x32 } } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *RollingUpdateDaemonSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1096,27 +2124,34 @@ } func (m *RollingUpdateDaemonSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n30, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n30 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RollingUpdateDeployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1124,37 +2159,46 @@ } func (m *RollingUpdateDeployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDeployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n31, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n31 - } if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxSurge.Size())) - n32, err := m.MaxSurge.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.MaxUnavailable != nil { + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n32 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RollingUpdateStatefulSetStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1162,22 +2206,27 @@ } func (m *RollingUpdateStatefulSetStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateStatefulSetStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Partition != nil { - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.Partition)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *Scale) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1185,41 +2234,52 @@ } func (m *Scale) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Scale) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n33, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n33 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n34, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n34 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n35, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n35 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ScaleSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1227,20 +2287,25 @@ } func (m *ScaleSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *ScaleStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1248,46 +2313,54 @@ } func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i -= len(m.TargetSelector) + copy(dAtA[i:], m.TargetSelector) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetSelector))) + i-- + dAtA[i] = 0x1a if len(m.Selector) > 0 { keysForSelector := make([]string, 0, len(m.Selector)) for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - for _, k := range keysForSelector { + for iNdEx := len(keysForSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.Selector[string(keysForSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - v := m.Selector[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForSelector[iNdEx]) + copy(dAtA[i:], keysForSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSelector[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetSelector))) - i += copy(dAtA[i:], m.TargetSelector) - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *StatefulSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1295,41 +2368,52 @@ } func (m *StatefulSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n36, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n36 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n37, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n37 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n38, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n38 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1337,41 +2421,52 @@ } func (m *StatefulSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n39, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n39 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1379,37 +2474,46 @@ } func (m *StatefulSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n40, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatefulSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1417,73 +2521,88 @@ } func (m *StatefulSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x40 } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n41, err := m.Selector.MarshalTo(dAtA[i:]) + { + size, err := m.UpdateStrategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n41 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n42, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n42 + i-- + dAtA[i] = 0x3a + i -= len(m.PodManagementPolicy) + copy(dAtA[i:], m.PodManagementPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodManagementPolicy))) + i-- + dAtA[i] = 0x32 + i -= len(m.ServiceName) + copy(dAtA[i:], m.ServiceName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) + i-- + dAtA[i] = 0x2a if len(m.VolumeClaimTemplates) > 0 { - for _, msg := range m.VolumeClaimTemplates { + for iNdEx := len(m.VolumeClaimTemplates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeClaimTemplates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + } + } + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodManagementPolicy))) - i += copy(dAtA[i:], m.PodManagementPolicy) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) - n43, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *StatefulSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1491,57 +2610,66 @@ } func (m *StatefulSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CurrentRevision))) - i += copy(dAtA[i:], m.CurrentRevision) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UpdateRevision))) - i += copy(dAtA[i:], m.UpdateRevision) - if m.CollisionCount != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x52 } } - return i, nil + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x48 + } + i -= len(m.UpdateRevision) + copy(dAtA[i:], m.UpdateRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UpdateRevision))) + i-- + dAtA[i] = 0x3a + i -= len(m.CurrentRevision) + copy(dAtA[i:], m.CurrentRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CurrentRevision))) + i-- + dAtA[i] = 0x32 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *StatefulSetUpdateStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1549,55 +2677,50 @@ } func (m *StatefulSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatefulSetUpdateStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n44, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n44 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *ControllerRevision) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1609,6 +2732,9 @@ } func (m *ControllerRevisionList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1623,6 +2749,9 @@ } func (m *DaemonSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1635,6 +2764,9 @@ } func (m *DaemonSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1651,6 +2783,9 @@ } func (m *DaemonSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1665,6 +2800,9 @@ } func (m *DaemonSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Selector != nil { @@ -1683,6 +2821,9 @@ } func (m *DaemonSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.CurrentNumberScheduled)) @@ -1706,6 +2847,9 @@ } func (m *DaemonSetUpdateStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1718,6 +2862,9 @@ } func (m *Deployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1730,6 +2877,9 @@ } func (m *DeploymentCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1748,6 +2898,9 @@ } func (m *DeploymentList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1762,6 +2915,9 @@ } func (m *DeploymentSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1787,6 +2943,9 @@ } func (m *DeploymentStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -1808,6 +2967,9 @@ } func (m *DeploymentStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1820,6 +2982,9 @@ } func (m *ReplicaSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1832,6 +2997,9 @@ } func (m *ReplicaSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1848,6 +3016,9 @@ } func (m *ReplicaSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1862,6 +3033,9 @@ } func (m *ReplicaSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -1878,6 +3052,9 @@ } func (m *ReplicaSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1895,6 +3072,9 @@ } func (m *RollingUpdateDaemonSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -1905,6 +3085,9 @@ } func (m *RollingUpdateDeployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -1919,6 +3102,9 @@ } func (m *RollingUpdateStatefulSetStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Partition != nil { @@ -1928,6 +3114,9 @@ } func (m *Scale) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1940,6 +3129,9 @@ } func (m *ScaleSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1947,6 +3139,9 @@ } func (m *ScaleStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1964,6 +3159,9 @@ } func (m *StatefulSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1976,6 +3174,9 @@ } func (m *StatefulSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1992,6 +3193,9 @@ } func (m *StatefulSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -2006,6 +3210,9 @@ } func (m *StatefulSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -2036,6 +3243,9 @@ } func (m *StatefulSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -2060,6 +3270,9 @@ } func (m *StatefulSetUpdateStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -2072,14 +3285,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -2089,8 +3295,8 @@ return "nil" } s := strings.Join([]string{`&ControllerRevision{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Data:` + strings.Replace(strings.Replace(this.Data.String(), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Data), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, `}`, }, "") @@ -2100,9 +3306,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ControllerRevision{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ControllerRevision", "ControllerRevision", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ControllerRevisionList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ControllerRevision", "ControllerRevision", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2112,7 +3323,7 @@ return "nil" } s := strings.Join([]string{`&DaemonSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DaemonSetSpec", "DaemonSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DaemonSetStatus", "DaemonSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2126,7 +3337,7 @@ s := strings.Join([]string{`&DaemonSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -2137,9 +3348,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]DaemonSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DaemonSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2149,8 +3365,8 @@ return "nil" } s := strings.Join([]string{`&DaemonSetSpec{`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "DaemonSetUpdateStrategy", "DaemonSetUpdateStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, @@ -2162,6 +3378,11 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DaemonSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DaemonSetCondition", "DaemonSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DaemonSetStatus{`, `CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`, `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, @@ -2172,7 +3393,7 @@ `NumberAvailable:` + fmt.Sprintf("%v", this.NumberAvailable) + `,`, `NumberUnavailable:` + fmt.Sprintf("%v", this.NumberUnavailable) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DaemonSetCondition", "DaemonSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2183,7 +3404,7 @@ } s := strings.Join([]string{`&DaemonSetUpdateStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, `}`, }, "") return s @@ -2193,7 +3414,7 @@ return "nil" } s := strings.Join([]string{`&Deployment{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentSpec", "DeploymentSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentStatus", "DeploymentStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2209,8 +3430,8 @@ `Status:` + fmt.Sprintf("%v", this.Status) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `LastUpdateTime:` + strings.Replace(strings.Replace(this.LastUpdateTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -2219,9 +3440,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Deployment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Deployment", "Deployment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DeploymentList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Deployment", "Deployment", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2232,8 +3458,8 @@ } s := strings.Join([]string{`&DeploymentSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, @@ -2247,13 +3473,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DeploymentCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DeploymentStatus{`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, @@ -2266,7 +3497,7 @@ } s := strings.Join([]string{`&DeploymentStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, `}`, }, "") return s @@ -2276,7 +3507,7 @@ return "nil" } s := strings.Join([]string{`&ReplicaSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicaSetSpec", "ReplicaSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicaSetStatus", "ReplicaSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2290,7 +3521,7 @@ s := strings.Join([]string{`&ReplicaSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -2301,9 +3532,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ReplicaSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ReplicaSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2314,8 +3550,8 @@ } s := strings.Join([]string{`&ReplicaSetSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `}`, }, "") @@ -2325,13 +3561,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]ReplicaSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "ReplicaSetCondition", "ReplicaSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&ReplicaSetStatus{`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ReplicaSetCondition", "ReplicaSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2341,7 +3582,7 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDaemonSet{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -2351,8 +3592,8 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDeployment{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, - `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -2372,7 +3613,7 @@ return "nil" } s := strings.Join([]string{`&Scale{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScaleSpec", "ScaleSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScaleStatus", "ScaleStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2416,7 +3657,7 @@ return "nil" } s := strings.Join([]string{`&StatefulSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "StatefulSetSpec", "StatefulSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "StatefulSetStatus", "StatefulSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -2430,7 +3671,7 @@ s := strings.Join([]string{`&StatefulSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -2441,9 +3682,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]StatefulSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "StatefulSet", "StatefulSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&StatefulSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "StatefulSet", "StatefulSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2452,11 +3698,16 @@ if this == nil { return "nil" } + repeatedStringForVolumeClaimTemplates := "[]PersistentVolumeClaim{" + for _, f := range this.VolumeClaimTemplates { + repeatedStringForVolumeClaimTemplates += fmt.Sprintf("%v", f) + "," + } + repeatedStringForVolumeClaimTemplates += "}" s := strings.Join([]string{`&StatefulSetSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, - `VolumeClaimTemplates:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeClaimTemplates), "PersistentVolumeClaim", "k8s_io_api_core_v1.PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `VolumeClaimTemplates:` + repeatedStringForVolumeClaimTemplates + `,`, `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, `PodManagementPolicy:` + fmt.Sprintf("%v", this.PodManagementPolicy) + `,`, `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "StatefulSetUpdateStrategy", "StatefulSetUpdateStrategy", 1), `&`, ``, 1) + `,`, @@ -2469,6 +3720,11 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]StatefulSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "StatefulSetCondition", "StatefulSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&StatefulSetStatus{`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, @@ -2478,7 +3734,7 @@ `CurrentRevision:` + fmt.Sprintf("%v", this.CurrentRevision) + `,`, `UpdateRevision:` + fmt.Sprintf("%v", this.UpdateRevision) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "StatefulSetCondition", "StatefulSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -2489,7 +3745,7 @@ } s := strings.Join([]string{`&StatefulSetUpdateStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateStatefulSetStrategy", "RollingUpdateStatefulSetStrategy", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateStatefulSetStrategy", "RollingUpdateStatefulSetStrategy", 1) + `,`, `}`, }, "") return s @@ -2517,7 +3773,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2545,7 +3801,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2554,6 +3810,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2575,7 +3834,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2584,6 +3843,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2605,7 +3867,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift + m.Revision |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -2619,6 +3881,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2646,7 +3911,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2674,7 +3939,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2683,6 +3948,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2704,7 +3972,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2713,6 +3981,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2730,6 +4001,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2757,7 +4031,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2785,7 +4059,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2794,6 +4068,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2815,7 +4092,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2824,6 +4101,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2845,7 +4125,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2854,6 +4134,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2870,6 +4153,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2897,7 +4183,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2925,7 +4211,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2935,6 +4221,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2954,7 +4243,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2964,6 +4253,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2983,7 +4275,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2992,6 +4284,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3013,7 +4308,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3023,6 +4318,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3042,7 +4340,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3052,6 +4350,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3066,6 +4367,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3093,7 +4397,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3121,7 +4425,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3130,6 +4434,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3151,7 +4458,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3160,6 +4467,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3177,6 +4487,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3204,7 +4517,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3232,7 +4545,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3241,11 +4554,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3265,7 +4581,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3274,6 +4590,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3295,7 +4614,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3304,6 +4623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3325,7 +4647,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3344,7 +4666,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3359,6 +4681,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3386,7 +4711,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3414,7 +4739,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentNumberScheduled |= (int32(b) & 0x7F) << shift + m.CurrentNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3433,7 +4758,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberMisscheduled |= (int32(b) & 0x7F) << shift + m.NumberMisscheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3452,7 +4777,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.DesiredNumberScheduled |= (int32(b) & 0x7F) << shift + m.DesiredNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3471,7 +4796,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberReady |= (int32(b) & 0x7F) << shift + m.NumberReady |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3490,7 +4815,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -3509,7 +4834,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedNumberScheduled |= (int32(b) & 0x7F) << shift + m.UpdatedNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3528,7 +4853,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberAvailable |= (int32(b) & 0x7F) << shift + m.NumberAvailable |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3547,7 +4872,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberUnavailable |= (int32(b) & 0x7F) << shift + m.NumberUnavailable |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3566,7 +4891,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3586,7 +4911,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3595,6 +4920,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3612,6 +4940,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3639,7 +4970,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3667,7 +4998,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3677,6 +5008,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3696,7 +5030,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3705,6 +5039,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3724,6 +5061,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3751,7 +5091,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3779,7 +5119,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3788,6 +5128,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3809,7 +5152,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3818,6 +5161,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3839,7 +5185,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3848,6 +5194,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3864,6 +5213,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3891,7 +5243,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3919,7 +5271,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3929,6 +5281,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3948,7 +5303,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3958,6 +5313,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3977,7 +5335,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3987,6 +5345,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4006,7 +5367,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4016,6 +5377,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4035,7 +5399,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4044,6 +5408,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4065,7 +5432,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4074,6 +5441,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4090,6 +5460,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4117,7 +5490,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4145,7 +5518,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4154,6 +5527,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4175,7 +5551,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4184,6 +5560,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4201,6 +5580,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4228,7 +5610,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4256,7 +5638,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4276,7 +5658,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4285,11 +5667,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -4309,7 +5694,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4318,6 +5703,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4339,7 +5727,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4348,6 +5736,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4369,7 +5760,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4388,7 +5779,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4408,7 +5799,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4428,7 +5819,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4443,6 +5834,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4470,7 +5864,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4498,7 +5892,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -4517,7 +5911,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4536,7 +5930,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4555,7 +5949,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4574,7 +5968,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UnavailableReplicas |= (int32(b) & 0x7F) << shift + m.UnavailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4593,7 +5987,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4602,6 +5996,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4624,7 +6021,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4643,7 +6040,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4658,6 +6055,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4685,7 +6085,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4713,7 +6113,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4723,6 +6123,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4742,7 +6145,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4751,6 +6154,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4770,6 +6176,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4797,7 +6206,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4825,7 +6234,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4834,6 +6243,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4855,7 +6267,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4864,6 +6276,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4885,7 +6300,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4894,6 +6309,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4910,6 +6328,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4937,7 +6358,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4965,7 +6386,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4975,6 +6396,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4994,7 +6418,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5004,6 +6428,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5023,7 +6450,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5032,6 +6459,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5053,7 +6483,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5063,6 +6493,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5082,7 +6515,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5092,6 +6525,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5106,6 +6542,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5133,7 +6572,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5161,7 +6600,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5170,6 +6609,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5191,7 +6633,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5200,6 +6642,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5217,6 +6662,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5244,7 +6692,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5272,7 +6720,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5292,7 +6740,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5301,11 +6749,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5325,7 +6776,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5334,6 +6785,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5355,7 +6809,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5369,6 +6823,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5396,7 +6853,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5424,7 +6881,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5443,7 +6900,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.FullyLabeledReplicas |= (int32(b) & 0x7F) << shift + m.FullyLabeledReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5462,7 +6919,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -5481,7 +6938,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5500,7 +6957,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5519,7 +6976,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5528,6 +6985,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5545,6 +7005,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5572,7 +7035,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5600,7 +7063,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5609,11 +7072,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxUnavailable = &intstr.IntOrString{} } if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5628,6 +7094,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5655,7 +7124,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5683,7 +7152,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5692,11 +7161,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxUnavailable = &intstr.IntOrString{} } if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5716,7 +7188,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5725,11 +7197,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MaxSurge == nil { - m.MaxSurge = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.MaxSurge = &intstr.IntOrString{} } if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5744,6 +7219,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5771,7 +7249,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5799,7 +7277,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5814,6 +7292,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5841,7 +7322,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5869,7 +7350,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5878,6 +7359,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5899,7 +7383,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5908,6 +7392,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5929,7 +7416,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5938,6 +7425,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5954,6 +7444,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5981,7 +7474,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6009,7 +7502,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6023,6 +7516,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6050,7 +7546,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6078,7 +7574,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6097,7 +7593,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6106,54 +7602,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Selector == nil { m.Selector = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -6163,41 +7625,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Selector[mapkey] = mapvalue - } else { - var mapvalue string - m.Selector[mapkey] = mapvalue } + m.Selector[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -6213,7 +7720,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6223,6 +7730,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6237,6 +7747,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6264,7 +7777,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6292,7 +7805,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6301,6 +7814,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6322,7 +7838,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6331,6 +7847,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6352,7 +7871,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6361,6 +7880,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6377,6 +7899,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6404,7 +7929,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6432,7 +7957,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6442,6 +7967,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6461,7 +7989,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6471,6 +7999,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6490,7 +8021,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6499,6 +8030,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6520,7 +8054,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6530,6 +8064,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6549,7 +8086,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6559,6 +8096,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6573,6 +8113,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6600,7 +8143,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6628,7 +8171,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6637,6 +8180,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6658,7 +8204,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6667,6 +8213,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6684,6 +8233,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6711,7 +8263,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6739,7 +8291,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6759,7 +8311,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6768,11 +8320,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -6792,7 +8347,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6801,6 +8356,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6822,7 +8380,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6831,10 +8389,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeClaimTemplates = append(m.VolumeClaimTemplates, k8s_io_api_core_v1.PersistentVolumeClaim{}) + m.VolumeClaimTemplates = append(m.VolumeClaimTemplates, v11.PersistentVolumeClaim{}) if err := m.VolumeClaimTemplates[len(m.VolumeClaimTemplates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -6853,7 +8414,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6863,6 +8424,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6882,7 +8446,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6892,6 +8456,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6911,7 +8478,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6920,6 +8487,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6941,7 +8511,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6956,6 +8526,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6983,7 +8556,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7011,7 +8584,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -7030,7 +8603,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7049,7 +8622,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7068,7 +8641,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentReplicas |= (int32(b) & 0x7F) << shift + m.CurrentReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7087,7 +8660,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7106,7 +8679,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7116,6 +8689,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7135,7 +8711,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7145,6 +8721,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7164,7 +8743,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7184,7 +8763,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7193,6 +8772,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7210,6 +8792,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7237,7 +8822,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7265,7 +8850,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7275,6 +8860,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7294,7 +8882,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7303,6 +8891,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7322,6 +8913,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7388,10 +8982,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -7420,6 +9017,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -7438,147 +9038,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1beta2/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 2176 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x6f, 0x1c, 0xb7, - 0x19, 0xd7, 0xec, 0x43, 0x5a, 0x51, 0x91, 0x64, 0x53, 0xaa, 0xb4, 0x91, 0xdb, 0x95, 0xb1, 0x09, - 0x1c, 0x25, 0xb6, 0x66, 0x6d, 0xe5, 0x81, 0xc4, 0x2e, 0xda, 0x6a, 0xa5, 0xd4, 0x76, 0xa0, 0x57, - 0x28, 0xcb, 0x40, 0x83, 0x16, 0x35, 0xb5, 0x4b, 0xaf, 0x26, 0x9a, 0x17, 0x66, 0x38, 0x5b, 0x2f, - 0x7a, 0xe9, 0xa9, 0x40, 0x81, 0x02, 0x6d, 0xaf, 0xfd, 0x27, 0x7a, 0x2b, 0x8a, 0xf6, 0x56, 0x04, - 0x85, 0x2f, 0x05, 0x82, 0x5e, 0x92, 0x93, 0x50, 0x6f, 0x4e, 0x45, 0xd1, 0x4b, 0x81, 0x5e, 0x02, - 0x14, 0x28, 0xc8, 0xe1, 0x3c, 0x38, 0x0f, 0xef, 0x48, 0xb1, 0x95, 0x22, 0xc8, 0x6d, 0x87, 0xfc, - 0x7d, 0x3f, 0x7e, 0x24, 0xbf, 0x8f, 0xdf, 0x6f, 0x38, 0x0b, 0xbe, 0x77, 0xfc, 0xb6, 0xab, 0x6a, - 0x56, 0xeb, 0xd8, 0x3b, 0x24, 0x8e, 0x49, 0x28, 0x71, 0x5b, 0x7d, 0x62, 0x76, 0x2d, 0xa7, 0x25, - 0x3a, 0xb0, 0xad, 0xb5, 0xb0, 0x6d, 0xbb, 0xad, 0xfe, 0x8d, 0x43, 0x42, 0xf1, 0x5a, 0xab, 0x47, - 0x4c, 0xe2, 0x60, 0x4a, 0xba, 0xaa, 0xed, 0x58, 0xd4, 0x82, 0x8b, 0x3e, 0x50, 0xc5, 0xb6, 0xa6, - 0x32, 0xa0, 0x2a, 0x80, 0x4b, 0xab, 0x3d, 0x8d, 0x1e, 0x79, 0x87, 0x6a, 0xc7, 0x32, 0x5a, 0x3d, - 0xab, 0x67, 0xb5, 0x38, 0xfe, 0xd0, 0x7b, 0xc8, 0x9f, 0xf8, 0x03, 0xff, 0xe5, 0xf3, 0x2c, 0x35, - 0x63, 0x03, 0x76, 0x2c, 0x87, 0xb4, 0xfa, 0x37, 0x92, 0x63, 0x2d, 0xbd, 0x11, 0x61, 0x0c, 0xdc, - 0x39, 0xd2, 0x4c, 0xe2, 0x0c, 0x5a, 0xf6, 0x71, 0x8f, 0x35, 0xb8, 0x2d, 0x83, 0x50, 0x9c, 0x65, - 0xd5, 0xca, 0xb3, 0x72, 0x3c, 0x93, 0x6a, 0x06, 0x49, 0x19, 0xbc, 0x35, 0xca, 0xc0, 0xed, 0x1c, - 0x11, 0x03, 0xa7, 0xec, 0x5e, 0xcf, 0xb3, 0xf3, 0xa8, 0xa6, 0xb7, 0x34, 0x93, 0xba, 0xd4, 0x49, - 0x1a, 0x35, 0xff, 0xa3, 0x00, 0xb8, 0x61, 0x99, 0xd4, 0xb1, 0x74, 0x9d, 0x38, 0x88, 0xf4, 0x35, - 0x57, 0xb3, 0x4c, 0xf8, 0x00, 0xd4, 0xd8, 0x7c, 0xba, 0x98, 0xe2, 0xba, 0x72, 0x59, 0x59, 0x99, - 0x5a, 0xbb, 0xae, 0x46, 0x2b, 0x1d, 0xd2, 0xab, 0xf6, 0x71, 0x8f, 0x35, 0xb8, 0x2a, 0x43, 0xab, - 0xfd, 0x1b, 0xea, 0xee, 0xe1, 0x87, 0xa4, 0x43, 0xb7, 0x09, 0xc5, 0x6d, 0xf8, 0xf8, 0x64, 0x79, - 0x6c, 0x78, 0xb2, 0x0c, 0xa2, 0x36, 0x14, 0xb2, 0xc2, 0x5d, 0x50, 0xe1, 0xec, 0x25, 0xce, 0xbe, - 0x9a, 0xcb, 0x2e, 0x26, 0xad, 0x22, 0xfc, 0x93, 0x77, 0x1f, 0x51, 0x62, 0x32, 0xf7, 0xda, 0x2f, - 0x08, 0xea, 0xca, 0x26, 0xa6, 0x18, 0x71, 0x22, 0x78, 0x0d, 0xd4, 0x1c, 0xe1, 0x7e, 0xbd, 0x7c, - 0x59, 0x59, 0x29, 0xb7, 0x2f, 0x08, 0x54, 0x2d, 0x98, 0x16, 0x0a, 0x11, 0xcd, 0xc7, 0x0a, 0x58, - 0x48, 0xcf, 0x7b, 0x4b, 0x73, 0x29, 0xfc, 0x61, 0x6a, 0xee, 0x6a, 0xb1, 0xb9, 0x33, 0x6b, 0x3e, - 0xf3, 0x70, 0xe0, 0xa0, 0x25, 0x36, 0xef, 0x3d, 0x50, 0xd5, 0x28, 0x31, 0xdc, 0x7a, 0xe9, 0x72, - 0x79, 0x65, 0x6a, 0xed, 0xaa, 0x9a, 0x13, 0xc0, 0x6a, 0xda, 0xbb, 0xf6, 0xb4, 0xe0, 0xad, 0xde, - 0x65, 0x0c, 0xc8, 0x27, 0x6a, 0xfe, 0xa2, 0x04, 0x26, 0x37, 0x31, 0x31, 0x2c, 0x73, 0x9f, 0xd0, - 0x73, 0xd8, 0xb9, 0x3b, 0xa0, 0xe2, 0xda, 0xa4, 0x23, 0x76, 0xee, 0x4a, 0xee, 0x04, 0x42, 0x9f, - 0xf6, 0x6d, 0xd2, 0x89, 0xb6, 0x8c, 0x3d, 0x21, 0xce, 0x00, 0xf7, 0xc0, 0xb8, 0x4b, 0x31, 0xf5, - 0x5c, 0xbe, 0x61, 0x53, 0x6b, 0x2b, 0x05, 0xb8, 0x38, 0xbe, 0x3d, 0x23, 0xd8, 0xc6, 0xfd, 0x67, - 0x24, 0x78, 0x9a, 0xff, 0x28, 0x01, 0x18, 0x62, 0x37, 0x2c, 0xb3, 0xab, 0x51, 0x16, 0xce, 0x37, - 0x41, 0x85, 0x0e, 0x6c, 0xc2, 0x17, 0x64, 0xb2, 0x7d, 0x25, 0x70, 0xe5, 0xde, 0xc0, 0x26, 0x9f, - 0x9f, 0x2c, 0x2f, 0xa4, 0x2d, 0x58, 0x0f, 0xe2, 0x36, 0x70, 0x2b, 0x74, 0xb2, 0xc4, 0xad, 0xdf, - 0x90, 0x87, 0xfe, 0xfc, 0x64, 0x39, 0xe3, 0xec, 0x50, 0x43, 0x26, 0xd9, 0x41, 0xd8, 0x07, 0x50, - 0xc7, 0x2e, 0xbd, 0xe7, 0x60, 0xd3, 0xf5, 0x47, 0xd2, 0x0c, 0x22, 0xa6, 0xff, 0x5a, 0xb1, 0x8d, - 0x62, 0x16, 0xed, 0x25, 0xe1, 0x05, 0xdc, 0x4a, 0xb1, 0xa1, 0x8c, 0x11, 0xe0, 0x15, 0x30, 0xee, - 0x10, 0xec, 0x5a, 0x66, 0xbd, 0xc2, 0x67, 0x11, 0x2e, 0x20, 0xe2, 0xad, 0x48, 0xf4, 0xc2, 0x57, - 0xc1, 0x84, 0x41, 0x5c, 0x17, 0xf7, 0x48, 0xbd, 0xca, 0x81, 0xb3, 0x02, 0x38, 0xb1, 0xed, 0x37, - 0xa3, 0xa0, 0xbf, 0xf9, 0x7b, 0x05, 0x4c, 0x87, 0x2b, 0x77, 0x0e, 0x99, 0x73, 0x5b, 0xce, 0x9c, - 0xe6, 0xe8, 0x60, 0xc9, 0x49, 0x98, 0x8f, 0xca, 0x31, 0xc7, 0x59, 0x38, 0xc2, 0x1f, 0x81, 0x9a, - 0x4b, 0x74, 0xd2, 0xa1, 0x96, 0x23, 0x1c, 0x7f, 0xbd, 0xa0, 0xe3, 0xf8, 0x90, 0xe8, 0xfb, 0xc2, - 0xb4, 0xfd, 0x02, 0xf3, 0x3c, 0x78, 0x42, 0x21, 0x25, 0x7c, 0x1f, 0xd4, 0x28, 0x31, 0x6c, 0x1d, - 0x53, 0x22, 0xb2, 0xe6, 0xa5, 0xb8, 0xf3, 0x2c, 0x66, 0x18, 0xd9, 0x9e, 0xd5, 0xbd, 0x27, 0x60, - 0x3c, 0x65, 0xc2, 0xc5, 0x08, 0x5a, 0x51, 0x48, 0x03, 0x6d, 0x30, 0xe3, 0xd9, 0x5d, 0x86, 0xa4, - 0xec, 0x38, 0xef, 0x0d, 0x44, 0x0c, 0x5d, 0x1f, 0xbd, 0x2a, 0x07, 0x92, 0x5d, 0x7b, 0x41, 0x8c, - 0x32, 0x23, 0xb7, 0xa3, 0x04, 0x3f, 0x5c, 0x07, 0xb3, 0x86, 0x66, 0x22, 0x82, 0xbb, 0x83, 0x7d, - 0xd2, 0xb1, 0xcc, 0xae, 0xcb, 0x43, 0xa9, 0xda, 0x5e, 0x14, 0x04, 0xb3, 0xdb, 0x72, 0x37, 0x4a, - 0xe2, 0xe1, 0x16, 0x98, 0x0f, 0x0e, 0xe0, 0x3b, 0x9a, 0x4b, 0x2d, 0x67, 0xb0, 0xa5, 0x19, 0x1a, - 0xad, 0x8f, 0x73, 0x9e, 0xfa, 0xf0, 0x64, 0x79, 0x1e, 0x65, 0xf4, 0xa3, 0x4c, 0xab, 0xe6, 0x6f, - 0xc6, 0xc1, 0x6c, 0xe2, 0x5c, 0x80, 0xf7, 0xc1, 0x42, 0xc7, 0x73, 0x1c, 0x62, 0xd2, 0x1d, 0xcf, - 0x38, 0x24, 0xce, 0x7e, 0xe7, 0x88, 0x74, 0x3d, 0x9d, 0x74, 0xf9, 0xb6, 0x56, 0xdb, 0x0d, 0xe1, - 0xeb, 0xc2, 0x46, 0x26, 0x0a, 0xe5, 0x58, 0xc3, 0xf7, 0x00, 0x34, 0x79, 0xd3, 0xb6, 0xe6, 0xba, - 0x21, 0x67, 0x89, 0x73, 0x86, 0xa9, 0xb8, 0x93, 0x42, 0xa0, 0x0c, 0x2b, 0xe6, 0x63, 0x97, 0xb8, - 0x9a, 0x43, 0xba, 0x49, 0x1f, 0xcb, 0xb2, 0x8f, 0x9b, 0x99, 0x28, 0x94, 0x63, 0x0d, 0xdf, 0x04, - 0x53, 0xfe, 0x68, 0x7c, 0xcd, 0xc5, 0xe6, 0xcc, 0x09, 0xb2, 0xa9, 0x9d, 0xa8, 0x0b, 0xc5, 0x71, - 0x6c, 0x6a, 0xd6, 0xa1, 0x4b, 0x9c, 0x3e, 0xe9, 0xde, 0xf6, 0xc5, 0x01, 0xab, 0xa0, 0x55, 0x5e, - 0x41, 0xc3, 0xa9, 0xed, 0xa6, 0x10, 0x28, 0xc3, 0x8a, 0x4d, 0xcd, 0x8f, 0x9a, 0xd4, 0xd4, 0xc6, - 0xe5, 0xa9, 0x1d, 0x64, 0xa2, 0x50, 0x8e, 0x35, 0x8b, 0x3d, 0xdf, 0xe5, 0xf5, 0x3e, 0xd6, 0x74, - 0x7c, 0xa8, 0x93, 0xfa, 0x84, 0x1c, 0x7b, 0x3b, 0x72, 0x37, 0x4a, 0xe2, 0xe1, 0x6d, 0x70, 0xd1, - 0x6f, 0x3a, 0x30, 0x71, 0x48, 0x52, 0xe3, 0x24, 0x2f, 0x0a, 0x92, 0x8b, 0x3b, 0x49, 0x00, 0x4a, - 0xdb, 0xc0, 0x9b, 0x60, 0xa6, 0x63, 0xe9, 0x3a, 0x8f, 0xc7, 0x0d, 0xcb, 0x33, 0x69, 0x7d, 0x92, - 0xb3, 0x40, 0x96, 0x43, 0x1b, 0x52, 0x0f, 0x4a, 0x20, 0xe1, 0x8f, 0x01, 0xe8, 0x04, 0x85, 0xc1, - 0xad, 0x83, 0x11, 0x0a, 0x20, 0x5d, 0x96, 0xa2, 0xca, 0x1c, 0x36, 0xb9, 0x28, 0x46, 0xd9, 0xfc, - 0x48, 0x01, 0x8b, 0x39, 0x89, 0x0e, 0xbf, 0x2b, 0x15, 0xc1, 0xab, 0x89, 0x22, 0x78, 0x29, 0xc7, - 0x2c, 0x56, 0x09, 0x8f, 0xc0, 0x34, 0x13, 0x24, 0x9a, 0xd9, 0xf3, 0x21, 0xe2, 0x2c, 0x6b, 0xe5, - 0x4e, 0x00, 0xc5, 0xd1, 0xd1, 0xa9, 0x7c, 0x71, 0x78, 0xb2, 0x3c, 0x2d, 0xf5, 0x21, 0x99, 0xb8, - 0xf9, 0xcb, 0x12, 0x00, 0x9b, 0xc4, 0xd6, 0xad, 0x81, 0x41, 0xcc, 0xf3, 0xd0, 0x34, 0x77, 0x25, - 0x4d, 0xf3, 0x4a, 0xfe, 0x96, 0x84, 0x4e, 0xe5, 0x8a, 0x9a, 0xf7, 0x13, 0xa2, 0xe6, 0xd5, 0x22, - 0x64, 0x4f, 0x57, 0x35, 0x9f, 0x94, 0xc1, 0x5c, 0x04, 0x8e, 0x64, 0xcd, 0x2d, 0x69, 0x47, 0x5f, - 0x49, 0xec, 0xe8, 0x62, 0x86, 0xc9, 0x73, 0xd3, 0x35, 0xcf, 0x5e, 0x5f, 0xc0, 0x0f, 0xc1, 0x0c, - 0x13, 0x32, 0x7e, 0x48, 0x70, 0x99, 0x34, 0x7e, 0x6a, 0x99, 0x14, 0x16, 0xb7, 0x2d, 0x89, 0x09, - 0x25, 0x98, 0x73, 0x64, 0xd9, 0xc4, 0xf3, 0x96, 0x65, 0xcd, 0x3f, 0x28, 0x60, 0x26, 0xda, 0xa6, - 0x73, 0x10, 0x51, 0x77, 0x64, 0x11, 0xf5, 0x52, 0x81, 0xe0, 0xcc, 0x51, 0x51, 0x9f, 0x54, 0xe2, - 0xae, 0x73, 0x19, 0xb5, 0xc2, 0x5e, 0xc1, 0x6c, 0x5d, 0xeb, 0x60, 0x57, 0xd4, 0xdb, 0x17, 0xfc, - 0xd7, 0x2f, 0xbf, 0x0d, 0x85, 0xbd, 0x92, 0xe0, 0x2a, 0x3d, 0x5f, 0xc1, 0x55, 0x7e, 0x36, 0x82, - 0xeb, 0x07, 0xa0, 0xe6, 0x06, 0x52, 0xab, 0xc2, 0x29, 0xaf, 0x16, 0x4a, 0x6c, 0xa1, 0xb2, 0x42, - 0xea, 0x50, 0x5f, 0x85, 0x74, 0x59, 0xca, 0xaa, 0xfa, 0x65, 0x2a, 0x2b, 0x96, 0xcc, 0x36, 0xf6, - 0x5c, 0xd2, 0xe5, 0x19, 0x50, 0x8b, 0x92, 0x79, 0x8f, 0xb7, 0x22, 0xd1, 0x0b, 0x0f, 0xc0, 0xa2, - 0xed, 0x58, 0x3d, 0x87, 0xb8, 0xee, 0x26, 0xc1, 0x5d, 0x5d, 0x33, 0x49, 0x30, 0x01, 0xbf, 0x26, - 0x5e, 0x1a, 0x9e, 0x2c, 0x2f, 0xee, 0x65, 0x43, 0x50, 0x9e, 0x6d, 0xf3, 0xcf, 0x15, 0x70, 0x21, - 0x79, 0x36, 0xe6, 0xc8, 0x14, 0xe5, 0x4c, 0x32, 0xe5, 0x5a, 0x2c, 0x4e, 0x7d, 0x0d, 0x17, 0xbb, - 0x2a, 0x48, 0xc5, 0xea, 0x3a, 0x98, 0x15, 0xb2, 0x24, 0xe8, 0x14, 0x42, 0x2d, 0xdc, 0x9e, 0x03, - 0xb9, 0x1b, 0x25, 0xf1, 0x4c, 0x7c, 0x44, 0x9a, 0x22, 0x20, 0xa9, 0xc8, 0xe2, 0x63, 0x3d, 0x09, - 0x40, 0x69, 0x1b, 0xb8, 0x0d, 0xe6, 0x3c, 0x33, 0x4d, 0xe5, 0x87, 0xcb, 0x25, 0x41, 0x35, 0x77, - 0x90, 0x86, 0xa0, 0x2c, 0x3b, 0xf8, 0x40, 0xd2, 0x23, 0xe3, 0xfc, 0x48, 0xb8, 0x56, 0x20, 0xac, - 0x0b, 0x0b, 0x12, 0x78, 0x0b, 0x4c, 0x3b, 0x5c, 0x73, 0x06, 0xae, 0xfa, 0xba, 0xed, 0x1b, 0xc2, - 0x6c, 0x1a, 0xc5, 0x3b, 0x91, 0x8c, 0xcd, 0x90, 0x5a, 0xb5, 0xa2, 0x52, 0xab, 0xf9, 0x27, 0x05, - 0xc0, 0x74, 0x1e, 0x8e, 0xbc, 0x09, 0x48, 0x59, 0xc4, 0x2a, 0xa6, 0x96, 0xad, 0x7f, 0xae, 0x17, - 0xd4, 0x3f, 0xd1, 0x81, 0x5a, 0x4c, 0x00, 0x89, 0x65, 0x38, 0x9f, 0x4b, 0x9d, 0xa2, 0x02, 0x28, - 0x72, 0xea, 0x19, 0x08, 0xa0, 0x18, 0xd9, 0xd3, 0x05, 0xd0, 0x3f, 0x4b, 0x60, 0x2e, 0x02, 0x17, - 0x16, 0x40, 0x19, 0x26, 0x5f, 0x5f, 0xec, 0x8c, 0xbe, 0xd8, 0x61, 0xa2, 0x24, 0x5a, 0xba, 0xff, - 0x27, 0x51, 0x12, 0x79, 0x95, 0x23, 0x4a, 0x7e, 0x57, 0x8a, 0xbb, 0xfe, 0x95, 0x17, 0x25, 0x5f, - 0xfc, 0x4e, 0xa6, 0xf9, 0x97, 0x32, 0xb8, 0x90, 0xcc, 0x43, 0xa9, 0x40, 0x2a, 0x23, 0x0b, 0xe4, - 0x1e, 0x98, 0x7f, 0xe8, 0xe9, 0xfa, 0x80, 0x2f, 0x43, 0xac, 0x4a, 0xfa, 0xa5, 0xf5, 0x9b, 0xc2, - 0x72, 0xfe, 0xfb, 0x19, 0x18, 0x94, 0x69, 0x99, 0x53, 0xec, 0xcb, 0x67, 0x2a, 0xf6, 0xa9, 0x0a, - 0x54, 0x39, 0x45, 0x05, 0xca, 0x2c, 0xdc, 0xd5, 0x33, 0x14, 0xee, 0xd3, 0x55, 0xda, 0x8c, 0x83, - 0x6b, 0xe4, 0xab, 0xff, 0xcf, 0x15, 0xb0, 0x90, 0xfd, 0xc2, 0x0d, 0x75, 0x30, 0x63, 0xe0, 0x47, - 0xf1, 0x8b, 0x8f, 0x51, 0x45, 0xc4, 0xa3, 0x9a, 0xae, 0xfa, 0x9f, 0x8c, 0xd4, 0xbb, 0x26, 0xdd, - 0x75, 0xf6, 0xa9, 0xa3, 0x99, 0x3d, 0xbf, 0xf2, 0x6e, 0x4b, 0x5c, 0x28, 0xc1, 0xdd, 0xfc, 0x4c, - 0x01, 0x8b, 0x39, 0x95, 0xef, 0x7c, 0x3d, 0x81, 0x1f, 0x80, 0x9a, 0x81, 0x1f, 0xed, 0x7b, 0x4e, - 0x2f, 0xab, 0x56, 0x17, 0x1b, 0x87, 0x67, 0xf3, 0xb6, 0x60, 0x41, 0x21, 0x5f, 0x73, 0x17, 0x5c, - 0x96, 0x26, 0xc9, 0x32, 0x87, 0x3c, 0xf4, 0x74, 0x9e, 0x44, 0x42, 0x6c, 0x5c, 0x05, 0x93, 0x36, - 0x76, 0xa8, 0x16, 0x4a, 0xd5, 0x6a, 0x7b, 0x7a, 0x78, 0xb2, 0x3c, 0xb9, 0x17, 0x34, 0xa2, 0xa8, - 0xbf, 0xf9, 0x5f, 0x05, 0x54, 0xf7, 0x3b, 0x58, 0x27, 0xe7, 0x50, 0xed, 0x37, 0xa5, 0x6a, 0x9f, - 0x7f, 0x93, 0xce, 0xfd, 0xc9, 0x2d, 0xf4, 0x5b, 0x89, 0x42, 0xff, 0xf2, 0x08, 0x9e, 0xa7, 0xd7, - 0xf8, 0x77, 0xc0, 0x64, 0x38, 0xdc, 0xe9, 0x0e, 0xa0, 0xe6, 0x6f, 0x4b, 0x60, 0x2a, 0x36, 0xc4, - 0x29, 0x8f, 0xaf, 0x07, 0xd2, 0xb1, 0xcf, 0x12, 0x73, 0xad, 0xc8, 0x44, 0xd4, 0xe0, 0x88, 0x7f, - 0xd7, 0xa4, 0x4e, 0xfc, 0x05, 0x2f, 0x7d, 0xf2, 0x7f, 0x07, 0xcc, 0x50, 0xec, 0xf4, 0x08, 0x0d, - 0xfa, 0xf8, 0x82, 0x4d, 0x46, 0xb7, 0x13, 0xf7, 0xa4, 0x5e, 0x94, 0x40, 0x2f, 0xdd, 0x02, 0xd3, - 0xd2, 0x60, 0xf0, 0x02, 0x28, 0x1f, 0x93, 0x81, 0x2f, 0x7b, 0x10, 0xfb, 0x09, 0xe7, 0x41, 0xb5, - 0x8f, 0x75, 0xcf, 0x8f, 0xf3, 0x49, 0xe4, 0x3f, 0xdc, 0x2c, 0xbd, 0xad, 0x34, 0x7f, 0xc5, 0x16, - 0x27, 0x0a, 0xce, 0x73, 0x88, 0xae, 0xf7, 0xa4, 0xe8, 0xca, 0xff, 0xa8, 0x17, 0x4f, 0x99, 0xbc, - 0x18, 0x43, 0x89, 0x18, 0x7b, 0xad, 0x10, 0xdb, 0xd3, 0x23, 0xed, 0x5f, 0x25, 0x30, 0x1f, 0x43, - 0x47, 0x72, 0xf2, 0xdb, 0x92, 0x9c, 0x5c, 0x49, 0xc8, 0xc9, 0x7a, 0x96, 0xcd, 0xd7, 0x7a, 0x72, - 0xb4, 0x9e, 0xfc, 0xa3, 0x02, 0x66, 0x63, 0x6b, 0x77, 0x0e, 0x82, 0xf2, 0xae, 0x2c, 0x28, 0x5f, - 0x2e, 0x12, 0x34, 0x39, 0x8a, 0xf2, 0xaf, 0x55, 0xc9, 0xf9, 0xaf, 0xbc, 0xa4, 0xfc, 0x29, 0x98, - 0xef, 0x5b, 0xba, 0x67, 0x90, 0x0d, 0x1d, 0x6b, 0x46, 0x00, 0x60, 0xaa, 0xa9, 0x9c, 0x7c, 0x97, - 0x0b, 0xe9, 0x89, 0xe3, 0x6a, 0x2e, 0x25, 0x26, 0xbd, 0x1f, 0x59, 0x46, 0xba, 0xef, 0x7e, 0x06, - 0x1d, 0xca, 0x1c, 0x04, 0xbe, 0x09, 0xa6, 0x98, 0x7e, 0xd3, 0x3a, 0x64, 0x07, 0x1b, 0x41, 0x60, - 0x85, 0x9f, 0xb0, 0xf6, 0xa3, 0x2e, 0x14, 0xc7, 0xc1, 0x23, 0x30, 0x67, 0x5b, 0xdd, 0x6d, 0x6c, - 0xe2, 0x1e, 0x61, 0x32, 0x63, 0xcf, 0xd2, 0xb5, 0xce, 0x80, 0x5f, 0x7e, 0x4d, 0xb6, 0xdf, 0x0a, - 0x6e, 0x45, 0xf6, 0xd2, 0x10, 0xf6, 0x92, 0x98, 0xd1, 0xcc, 0x93, 0x3a, 0x8b, 0x12, 0x3a, 0xa9, - 0xcf, 0xae, 0xfe, 0x1d, 0xf1, 0x5a, 0x91, 0x08, 0x3b, 0xe3, 0x87, 0xd7, 0xbc, 0xbb, 0xbd, 0xda, - 0x99, 0xbe, 0x9a, 0xfe, 0xbb, 0x02, 0x2e, 0xa6, 0x8e, 0xca, 0x2f, 0xf1, 0x76, 0x2d, 0x25, 0xcf, - 0xcb, 0xa7, 0x90, 0xe7, 0xeb, 0x60, 0x56, 0x7c, 0xb0, 0x4d, 0xa8, 0xfb, 0xf0, 0xfd, 0x67, 0x43, - 0xee, 0x46, 0x49, 0x7c, 0xd6, 0xed, 0x5e, 0xf5, 0x94, 0xb7, 0x7b, 0x71, 0x2f, 0xc4, 0x1f, 0x90, - 0xfc, 0xd0, 0x4b, 0x7b, 0x21, 0xfe, 0x87, 0x94, 0xc4, 0x33, 0x85, 0xe0, 0xb3, 0x86, 0x0c, 0x13, - 0xb2, 0x42, 0x38, 0x90, 0x7a, 0x51, 0x02, 0xfd, 0x85, 0x3e, 0x4a, 0xe2, 0x8c, 0x8f, 0x92, 0xab, - 0x45, 0xe2, 0xb9, 0xf8, 0xbb, 0xc9, 0xdf, 0x14, 0xf0, 0x62, 0x6e, 0x22, 0xc0, 0x75, 0xa9, 0xec, - 0xae, 0x26, 0xca, 0xee, 0xb7, 0x72, 0x0d, 0x63, 0xb5, 0xd7, 0xc9, 0xbe, 0x9a, 0x7b, 0xa7, 0xd8, - 0xd5, 0x5c, 0x86, 0x76, 0x1f, 0x7d, 0x47, 0xd7, 0x5e, 0x7d, 0xfc, 0xa4, 0x31, 0xf6, 0xf1, 0x93, - 0xc6, 0xd8, 0xa7, 0x4f, 0x1a, 0x63, 0x3f, 0x1b, 0x36, 0x94, 0xc7, 0xc3, 0x86, 0xf2, 0xf1, 0xb0, - 0xa1, 0x7c, 0x3a, 0x6c, 0x28, 0x7f, 0x1f, 0x36, 0x94, 0x5f, 0x7f, 0xd6, 0x18, 0xfb, 0x60, 0x42, - 0x8c, 0xf8, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x85, 0x43, 0x0a, 0xec, 0x28, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -43,7 +43,7 @@ // depend on its stability. It is primarily for internal use by controllers. message ControllerRevision { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -56,7 +56,7 @@ // ControllerRevisionList is a resource containing a list of ControllerRevision objects. message ControllerRevisionList { - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -69,12 +69,12 @@ // DaemonSet represents the configuration of a daemon set. message DaemonSet { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetSpec spec = 2; @@ -82,7 +82,7 @@ // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetStatus status = 3; } @@ -111,7 +111,7 @@ // DaemonSetList is a collection of daemon sets. message DaemonSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -286,6 +286,7 @@ // The deployment strategy to use to replace existing pods with new ones. // +optional + // +patchStrategy=retainKeys optional DeploymentStrategy strategy = 4; // Minimum number of seconds for which a newly created pod should be ready @@ -373,12 +374,12 @@ message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetSpec spec = 2; @@ -386,7 +387,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetStatus status = 3; } @@ -415,7 +416,7 @@ // ReplicaSetList is a collection of ReplicaSets. message ReplicaSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -526,7 +527,7 @@ // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } @@ -542,15 +543,15 @@ // Scale represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional ScaleSpec spec = 2; - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional optional ScaleStatus status = 3; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ package v1beta2 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" @@ -57,22 +57,20 @@ TargetSelector string `json:"targetSelector,omitempty" protobuf:"bytes,3,opt,name=targetSelector"` } -// +genclient -// +genclient:noVerbs // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // Scale represents a scaling request for a resource. type Scale struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -117,7 +115,7 @@ // ParallelPodManagement will create and delete pods as soon as the stateful set // replica count is changed, and will not wait for pods to be ready or complete // termination. - ParallelPodManagement = "Parallel" + ParallelPodManagement PodManagementPolicyType = "Parallel" ) // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet @@ -143,13 +141,13 @@ // ordering constraints. When a scale operation is performed with this // strategy, new Pods will be created from the specification version indicated // by the StatefulSet's updateRevision. - RollingUpdateStatefulSetStrategyType = "RollingUpdate" + RollingUpdateStatefulSetStrategyType StatefulSetUpdateStrategyType = "RollingUpdate" // OnDeleteStatefulSetStrategyType triggers the legacy behavior. Version // tracking and ordered rolling restarts are disabled. Pods are recreated // from the StatefulSetSpec when they are manually deleted. When a scale // operation is performed with this strategy,specification version indicated // by the StatefulSet's currentRevision. - OnDeleteStatefulSetStrategyType = "OnDelete" + OnDeleteStatefulSetStrategyType StatefulSetUpdateStrategyType = "OnDelete" ) // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType. @@ -331,7 +329,8 @@ // The deployment strategy to use to replace existing pods with new ones. // +optional - Strategy DeploymentStrategy `json:"strategy,omitempty" protobuf:"bytes,4,opt,name=strategy"` + // +patchStrategy=retainKeys + Strategy DeploymentStrategy `json:"strategy,omitempty" patchStrategy:"retainKeys" protobuf:"bytes,4,opt,name=strategy"` // Minimum number of seconds for which a newly created pod should be ready // without any of its container crashing, for it to be considered available. @@ -414,7 +413,7 @@ // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new ReplicaSet can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } @@ -667,12 +666,12 @@ type DaemonSet struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -680,7 +679,7 @@ // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -698,7 +697,7 @@ type DaemonSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -717,12 +716,12 @@ // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ReplicaSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -730,7 +729,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ReplicaSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -741,7 +740,7 @@ type ReplicaSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -851,7 +850,7 @@ type ControllerRevision struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -868,7 +867,7 @@ type ControllerRevisionList struct { metav1.TypeMeta `json:",inline"` - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_ControllerRevision = map[string]string{ "": "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "data": "Data is the serialized representation of the state.", "revision": "Revision indicates the revision of the state represented by Data.", } @@ -40,7 +40,7 @@ var map_ControllerRevisionList = map[string]string{ "": "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - "metadata": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of ControllerRevisions", } @@ -50,9 +50,9 @@ var map_DaemonSet = map[string]string{ "": "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (DaemonSet) SwaggerDoc() map[string]string { @@ -74,7 +74,7 @@ var map_DaemonSetList = map[string]string{ "": "DaemonSetList is a collection of daemon sets.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "A list of daemon sets.", } @@ -96,7 +96,7 @@ } var map_DaemonSetStatus = map[string]string{ - "": "DaemonSetStatus represents the current status of a daemon set.", + "": "DaemonSetStatus represents the current status of a daemon set.", "currentNumberScheduled": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", "numberMisscheduled": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", "desiredNumberScheduled": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", @@ -202,9 +202,9 @@ var map_ReplicaSet = map[string]string{ "": "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (ReplicaSet) SwaggerDoc() map[string]string { @@ -226,7 +226,7 @@ var map_ReplicaSetList = map[string]string{ "": "ReplicaSetList is a collection of ReplicaSets.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", } @@ -272,7 +272,7 @@ var map_RollingUpdateDeployment = map[string]string{ "": "Spec to control the desired behavior of rolling update.", "maxUnavailable": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "maxSurge": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", + "maxSurge": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", } func (RollingUpdateDeployment) SwaggerDoc() map[string]string { @@ -290,9 +290,9 @@ var map_Scale = map[string]string{ "": "Scale represents a scaling request for a resource.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", } func (Scale) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/apps/v1beta2/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1beta2 import ( - core_v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" @@ -58,7 +58,7 @@ func (in *ControllerRevisionList) DeepCopyInto(out *ControllerRevisionList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ControllerRevision, len(*in)) @@ -136,7 +136,7 @@ func (in *DaemonSetList) DeepCopyInto(out *DaemonSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]DaemonSet, len(*in)) @@ -170,23 +170,15 @@ *out = *in if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -206,12 +198,8 @@ *out = *in if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions @@ -238,12 +226,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDaemonSet) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDaemonSet) + (*in).DeepCopyInto(*out) } return } @@ -308,7 +292,7 @@ func (in *DeploymentList) DeepCopyInto(out *DeploymentList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Deployment, len(*in)) @@ -342,41 +326,25 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.Strategy.DeepCopyInto(&out.Strategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.ProgressDeadlineSeconds != nil { in, out := &in.ProgressDeadlineSeconds, &out.ProgressDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -403,12 +371,8 @@ } if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -428,12 +392,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDeployment) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDeployment) + (*in).DeepCopyInto(*out) } return } @@ -497,7 +457,7 @@ func (in *ReplicaSetList) DeepCopyInto(out *ReplicaSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ReplicaSet, len(*in)) @@ -531,21 +491,13 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) return @@ -589,12 +541,8 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -614,21 +562,13 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } if in.MaxSurge != nil { in, out := &in.MaxSurge, &out.MaxSurge - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -648,12 +588,8 @@ *out = *in if in.Partition != nil { in, out := &in.Partition, &out.Partition - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -784,7 +720,7 @@ func (in *StatefulSetList) DeepCopyInto(out *StatefulSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]StatefulSet, len(*in)) @@ -818,26 +754,18 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) if in.VolumeClaimTemplates != nil { in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates - *out = make([]core_v1.PersistentVolumeClaim, len(*in)) + *out = make([]corev1.PersistentVolumeClaim, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -845,12 +773,8 @@ in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -870,12 +794,8 @@ *out = *in if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions @@ -902,12 +822,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateStatefulSetStrategy) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateStatefulSetStrategy) + (*in).DeepCopyInto(*out) } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=auditregistration.k8s.io + +package v1alpha1 // import "k8s.io/api/auditregistration/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2056 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto + +package v1alpha1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *AuditSink) Reset() { *m = AuditSink{} } +func (*AuditSink) ProtoMessage() {} +func (*AuditSink) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{0} +} +func (m *AuditSink) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditSink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AuditSink) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditSink.Merge(m, src) +} +func (m *AuditSink) XXX_Size() int { + return m.Size() +} +func (m *AuditSink) XXX_DiscardUnknown() { + xxx_messageInfo_AuditSink.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditSink proto.InternalMessageInfo + +func (m *AuditSinkList) Reset() { *m = AuditSinkList{} } +func (*AuditSinkList) ProtoMessage() {} +func (*AuditSinkList) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{1} +} +func (m *AuditSinkList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditSinkList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AuditSinkList) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditSinkList.Merge(m, src) +} +func (m *AuditSinkList) XXX_Size() int { + return m.Size() +} +func (m *AuditSinkList) XXX_DiscardUnknown() { + xxx_messageInfo_AuditSinkList.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditSinkList proto.InternalMessageInfo + +func (m *AuditSinkSpec) Reset() { *m = AuditSinkSpec{} } +func (*AuditSinkSpec) ProtoMessage() {} +func (*AuditSinkSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{2} +} +func (m *AuditSinkSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuditSinkSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AuditSinkSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuditSinkSpec.Merge(m, src) +} +func (m *AuditSinkSpec) XXX_Size() int { + return m.Size() +} +func (m *AuditSinkSpec) XXX_DiscardUnknown() { + xxx_messageInfo_AuditSinkSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_AuditSinkSpec proto.InternalMessageInfo + +func (m *Policy) Reset() { *m = Policy{} } +func (*Policy) ProtoMessage() {} +func (*Policy) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{3} +} +func (m *Policy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Policy) XXX_Merge(src proto.Message) { + xxx_messageInfo_Policy.Merge(m, src) +} +func (m *Policy) XXX_Size() int { + return m.Size() +} +func (m *Policy) XXX_DiscardUnknown() { + xxx_messageInfo_Policy.DiscardUnknown(m) +} + +var xxx_messageInfo_Policy proto.InternalMessageInfo + +func (m *ServiceReference) Reset() { *m = ServiceReference{} } +func (*ServiceReference) ProtoMessage() {} +func (*ServiceReference) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{4} +} +func (m *ServiceReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServiceReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceReference.Merge(m, src) +} +func (m *ServiceReference) XXX_Size() int { + return m.Size() +} +func (m *ServiceReference) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceReference.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceReference proto.InternalMessageInfo + +func (m *Webhook) Reset() { *m = Webhook{} } +func (*Webhook) ProtoMessage() {} +func (*Webhook) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{5} +} +func (m *Webhook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Webhook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Webhook) XXX_Merge(src proto.Message) { + xxx_messageInfo_Webhook.Merge(m, src) +} +func (m *Webhook) XXX_Size() int { + return m.Size() +} +func (m *Webhook) XXX_DiscardUnknown() { + xxx_messageInfo_Webhook.DiscardUnknown(m) +} + +var xxx_messageInfo_Webhook proto.InternalMessageInfo + +func (m *WebhookClientConfig) Reset() { *m = WebhookClientConfig{} } +func (*WebhookClientConfig) ProtoMessage() {} +func (*WebhookClientConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{6} +} +func (m *WebhookClientConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WebhookClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WebhookClientConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_WebhookClientConfig.Merge(m, src) +} +func (m *WebhookClientConfig) XXX_Size() int { + return m.Size() +} +func (m *WebhookClientConfig) XXX_DiscardUnknown() { + xxx_messageInfo_WebhookClientConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_WebhookClientConfig proto.InternalMessageInfo + +func (m *WebhookThrottleConfig) Reset() { *m = WebhookThrottleConfig{} } +func (*WebhookThrottleConfig) ProtoMessage() {} +func (*WebhookThrottleConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_642d3597c6afa8ba, []int{7} +} +func (m *WebhookThrottleConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WebhookThrottleConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WebhookThrottleConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_WebhookThrottleConfig.Merge(m, src) +} +func (m *WebhookThrottleConfig) XXX_Size() int { + return m.Size() +} +func (m *WebhookThrottleConfig) XXX_DiscardUnknown() { + xxx_messageInfo_WebhookThrottleConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_WebhookThrottleConfig proto.InternalMessageInfo + +func init() { + proto.RegisterType((*AuditSink)(nil), "k8s.io.api.auditregistration.v1alpha1.AuditSink") + proto.RegisterType((*AuditSinkList)(nil), "k8s.io.api.auditregistration.v1alpha1.AuditSinkList") + proto.RegisterType((*AuditSinkSpec)(nil), "k8s.io.api.auditregistration.v1alpha1.AuditSinkSpec") + proto.RegisterType((*Policy)(nil), "k8s.io.api.auditregistration.v1alpha1.Policy") + proto.RegisterType((*ServiceReference)(nil), "k8s.io.api.auditregistration.v1alpha1.ServiceReference") + proto.RegisterType((*Webhook)(nil), "k8s.io.api.auditregistration.v1alpha1.Webhook") + proto.RegisterType((*WebhookClientConfig)(nil), "k8s.io.api.auditregistration.v1alpha1.WebhookClientConfig") + proto.RegisterType((*WebhookThrottleConfig)(nil), "k8s.io.api.auditregistration.v1alpha1.WebhookThrottleConfig") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto", fileDescriptor_642d3597c6afa8ba) +} + +var fileDescriptor_642d3597c6afa8ba = []byte{ + // 765 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0x41, 0x6f, 0x13, 0x47, + 0x14, 0xf6, 0xc6, 0x76, 0x6c, 0x4f, 0x9c, 0x36, 0x9d, 0xb4, 0x95, 0x1b, 0x55, 0x6b, 0x6b, 0xa5, + 0x4a, 0x91, 0xda, 0xcc, 0x36, 0x55, 0xd4, 0x56, 0x88, 0x4b, 0x36, 0x27, 0xa4, 0x10, 0xc2, 0x98, + 0x80, 0x40, 0x08, 0x31, 0x5e, 0x3f, 0xef, 0x0e, 0xb6, 0x77, 0x97, 0xdd, 0x59, 0xa3, 0xdc, 0xf8, + 0x09, 0xfc, 0x05, 0xfe, 0x06, 0x37, 0x24, 0x90, 0x72, 0xcc, 0x31, 0xa7, 0x88, 0x98, 0x03, 0xff, + 0x81, 0x13, 0x9a, 0xd9, 0x59, 0xdb, 0xc4, 0x41, 0x38, 0xb7, 0x79, 0xdf, 0x7b, 0xdf, 0xf7, 0xbe, + 0xf7, 0xde, 0xa0, 0x83, 0xfe, 0xff, 0x09, 0xe1, 0xa1, 0xdd, 0x4f, 0x3b, 0x10, 0x07, 0x20, 0x20, + 0xb1, 0x47, 0x10, 0x74, 0xc3, 0xd8, 0xd6, 0x09, 0x16, 0x71, 0x9b, 0xa5, 0x5d, 0x2e, 0x62, 0xf0, + 0x78, 0x22, 0x62, 0x26, 0x78, 0x18, 0xd8, 0xa3, 0x6d, 0x36, 0x88, 0x7c, 0xb6, 0x6d, 0x7b, 0x10, + 0x40, 0xcc, 0x04, 0x74, 0x49, 0x14, 0x87, 0x22, 0xc4, 0x7f, 0x64, 0x34, 0xc2, 0x22, 0x4e, 0xe6, + 0x68, 0x24, 0xa7, 0x6d, 0x6c, 0x79, 0x5c, 0xf8, 0x69, 0x87, 0xb8, 0xe1, 0xd0, 0xf6, 0x42, 0x2f, + 0xb4, 0x15, 0xbb, 0x93, 0xf6, 0x54, 0xa4, 0x02, 0xf5, 0xca, 0x54, 0x37, 0x76, 0xa6, 0x66, 0x86, + 0xcc, 0xf5, 0x79, 0x00, 0xf1, 0xb1, 0x1d, 0xf5, 0x3d, 0x09, 0x24, 0xf6, 0x10, 0x04, 0xb3, 0x47, + 0x73, 0x5e, 0x36, 0xec, 0x6f, 0xb1, 0xe2, 0x34, 0x10, 0x7c, 0x08, 0x73, 0x84, 0x7f, 0xbf, 0x47, + 0x48, 0x5c, 0x1f, 0x86, 0xec, 0x32, 0xcf, 0x7a, 0x6f, 0xa0, 0xda, 0xae, 0x1c, 0xb6, 0xcd, 0x83, + 0x3e, 0x7e, 0x8a, 0xaa, 0xd2, 0x51, 0x97, 0x09, 0xd6, 0x30, 0x5a, 0xc6, 0xe6, 0xca, 0x3f, 0x7f, + 0x93, 0xe9, 0x56, 0x26, 0xc2, 0x24, 0xea, 0x7b, 0x12, 0x48, 0x88, 0xac, 0x26, 0xa3, 0x6d, 0x72, + 0xa7, 0xf3, 0x0c, 0x5c, 0x71, 0x1b, 0x04, 0x73, 0xf0, 0xc9, 0x79, 0xb3, 0x30, 0x3e, 0x6f, 0xa2, + 0x29, 0x46, 0x27, 0xaa, 0xf8, 0x3e, 0x2a, 0x25, 0x11, 0xb8, 0x8d, 0x25, 0xa5, 0xbe, 0x43, 0x16, + 0xda, 0x39, 0x99, 0x38, 0x6c, 0x47, 0xe0, 0x3a, 0x75, 0xdd, 0xa1, 0x24, 0x23, 0xaa, 0xf4, 0xac, + 0x77, 0x06, 0x5a, 0x9d, 0x54, 0xed, 0xf3, 0x44, 0xe0, 0xc7, 0x73, 0xb3, 0x90, 0xc5, 0x66, 0x91, + 0x6c, 0x35, 0xc9, 0x9a, 0xee, 0x53, 0xcd, 0x91, 0x99, 0x39, 0x8e, 0x50, 0x99, 0x0b, 0x18, 0x26, + 0x8d, 0xa5, 0x56, 0xf1, 0xd2, 0x9a, 0x16, 0x1a, 0xc4, 0x59, 0xd5, 0xe2, 0xe5, 0x5b, 0x52, 0x86, + 0x66, 0x6a, 0xd6, 0xdb, 0xd9, 0x31, 0xe4, 0x78, 0xf8, 0x08, 0x2d, 0x47, 0xe1, 0x80, 0xbb, 0xc7, + 0x7a, 0x88, 0xad, 0x05, 0x3b, 0x1d, 0x2a, 0x92, 0xf3, 0x83, 0x6e, 0xb3, 0x9c, 0xc5, 0x54, 0x8b, + 0xe1, 0x87, 0xa8, 0xf2, 0x02, 0x3a, 0x7e, 0x18, 0xf6, 0xf5, 0x29, 0xc8, 0x82, 0xba, 0x0f, 0x32, + 0x96, 0xf3, 0xa3, 0x16, 0xae, 0x68, 0x80, 0xe6, 0x7a, 0x96, 0x8b, 0x74, 0x33, 0xfc, 0x17, 0x2a, + 0x0f, 0x60, 0x04, 0x03, 0x65, 0xbd, 0xe6, 0xfc, 0x9a, 0x8f, 0xbc, 0x2f, 0xc1, 0xcf, 0xf9, 0x83, + 0x66, 0x45, 0xf8, 0x4f, 0xb4, 0x9c, 0x08, 0xe6, 0x41, 0xb6, 0xd3, 0x9a, 0xb3, 0x2e, 0x6d, 0xb7, + 0x15, 0x22, 0x6b, 0xd5, 0x8b, 0xea, 0x12, 0xeb, 0xb5, 0x81, 0xd6, 0xda, 0x10, 0x8f, 0xb8, 0x0b, + 0x14, 0x7a, 0x10, 0x43, 0xe0, 0x02, 0xb6, 0x51, 0x2d, 0x60, 0x43, 0x48, 0x22, 0xe6, 0x82, 0xee, + 0xf9, 0x93, 0xee, 0x59, 0x3b, 0xc8, 0x13, 0x74, 0x5a, 0x83, 0x5b, 0xa8, 0x24, 0x03, 0xb5, 0x82, + 0xda, 0xf4, 0x5f, 0xc9, 0x5a, 0xaa, 0x32, 0xf8, 0x77, 0x54, 0x8a, 0x98, 0xf0, 0x1b, 0x45, 0x55, + 0x51, 0x95, 0xd9, 0x43, 0x26, 0x7c, 0xaa, 0x50, 0x95, 0x0d, 0x63, 0xd1, 0x28, 0xb5, 0x8c, 0xcd, + 0xb2, 0xce, 0x86, 0xb1, 0xa0, 0x0a, 0xb5, 0x3e, 0x19, 0x28, 0xdf, 0x0e, 0xee, 0xa1, 0xaa, 0xf0, + 0xe3, 0x50, 0x88, 0x01, 0xe8, 0x43, 0xde, 0xbc, 0xde, 0xc2, 0xef, 0x69, 0xf6, 0x5e, 0x18, 0xf4, + 0xb8, 0xe7, 0xd4, 0xe5, 0xbf, 0xcc, 0x31, 0x3a, 0xd1, 0xc6, 0x02, 0xd5, 0xdd, 0x01, 0x87, 0x40, + 0x64, 0x75, 0xfa, 0xb8, 0x37, 0xae, 0xd7, 0x6b, 0x6f, 0x46, 0xc1, 0xf9, 0x59, 0x6f, 0xa5, 0x3e, + 0x8b, 0xd2, 0xaf, 0xba, 0x58, 0x6f, 0x0c, 0xb4, 0x7e, 0x05, 0x17, 0xff, 0x86, 0x8a, 0x69, 0x9c, + 0x9f, 0xbf, 0x32, 0x3e, 0x6f, 0x16, 0x8f, 0xe8, 0x3e, 0x95, 0x18, 0x7e, 0x82, 0x2a, 0x49, 0x76, + 0x3f, 0xed, 0xf1, 0xbf, 0x05, 0x3d, 0x5e, 0xbe, 0xba, 0xb3, 0x22, 0x7f, 0x61, 0x8e, 0xe6, 0xa2, + 0x78, 0x13, 0x55, 0x5d, 0xe6, 0xa4, 0x41, 0x77, 0x00, 0xea, 0x78, 0xf5, 0x6c, 0x65, 0x7b, 0xbb, + 0x19, 0x46, 0x27, 0x59, 0xab, 0x8d, 0x7e, 0xb9, 0x72, 0xc7, 0xd2, 0xfd, 0xf3, 0x28, 0x51, 0xee, + 0x8b, 0x99, 0xfb, 0xbb, 0x87, 0x6d, 0x2a, 0x31, 0xdc, 0x44, 0xe5, 0x4e, 0x1a, 0x27, 0x42, 0x79, + 0x2f, 0x3a, 0x35, 0xf9, 0xab, 0x1d, 0x09, 0xd0, 0x0c, 0x77, 0xc8, 0xc9, 0x85, 0x59, 0x38, 0xbd, + 0x30, 0x0b, 0x67, 0x17, 0x66, 0xe1, 0xe5, 0xd8, 0x34, 0x4e, 0xc6, 0xa6, 0x71, 0x3a, 0x36, 0x8d, + 0xb3, 0xb1, 0x69, 0x7c, 0x18, 0x9b, 0xc6, 0xab, 0x8f, 0x66, 0xe1, 0x51, 0x35, 0x9f, 0xea, 0x4b, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x6c, 0xff, 0x86, 0xcd, 0x06, 0x00, 0x00, +} + +func (m *AuditSink) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuditSink) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditSink) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *AuditSinkList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuditSinkList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditSinkList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *AuditSinkSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AuditSinkSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AuditSinkSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Webhook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Policy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Policy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Policy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Policy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Stages) > 0 { + for iNdEx := len(m.Stages) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Stages[iNdEx]) + copy(dAtA[i:], m.Stages[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Stages[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Level) + copy(dAtA[i:], m.Level) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Level))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ServiceReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ServiceReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Port != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Port)) + i-- + dAtA[i] = 0x20 + } + if m.Path != nil { + i -= len(*m.Path) + copy(dAtA[i:], *m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Path))) + i-- + dAtA[i] = 0x1a + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Webhook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Webhook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Webhook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ClientConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if m.Throttle != nil { + { + size, err := m.Throttle.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *WebhookClientConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WebhookClientConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WebhookClientConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CABundle != nil { + i -= len(m.CABundle) + copy(dAtA[i:], m.CABundle) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CABundle))) + i-- + dAtA[i] = 0x1a + } + if m.Service != nil { + { + size, err := m.Service.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.URL != nil { + i -= len(*m.URL) + copy(dAtA[i:], *m.URL) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.URL))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *WebhookThrottleConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WebhookThrottleConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WebhookThrottleConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Burst != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Burst)) + i-- + dAtA[i] = 0x10 + } + if m.QPS != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.QPS)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AuditSink) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *AuditSinkList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *AuditSinkSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Policy.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Webhook.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Policy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Level) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Stages) > 0 { + for _, s := range m.Stages { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServiceReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Path != nil { + l = len(*m.Path) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Port != nil { + n += 1 + sovGenerated(uint64(*m.Port)) + } + return n +} + +func (m *Webhook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Throttle != nil { + l = m.Throttle.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.ClientConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *WebhookClientConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.URL != nil { + l = len(*m.URL) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Service != nil { + l = m.Service.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CABundle != nil { + l = len(m.CABundle) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *WebhookThrottleConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.QPS != nil { + n += 1 + sovGenerated(uint64(*m.QPS)) + } + if m.Burst != nil { + n += 1 + sovGenerated(uint64(*m.Burst)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *AuditSink) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AuditSink{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "AuditSinkSpec", "AuditSinkSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *AuditSinkList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]AuditSink{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "AuditSink", "AuditSink", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&AuditSinkList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *AuditSinkSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AuditSinkSpec{`, + `Policy:` + strings.Replace(strings.Replace(this.Policy.String(), "Policy", "Policy", 1), `&`, ``, 1) + `,`, + `Webhook:` + strings.Replace(strings.Replace(this.Webhook.String(), "Webhook", "Webhook", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Policy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Policy{`, + `Level:` + fmt.Sprintf("%v", this.Level) + `,`, + `Stages:` + fmt.Sprintf("%v", this.Stages) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceReference{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Path:` + valueToStringGenerated(this.Path) + `,`, + `Port:` + valueToStringGenerated(this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *Webhook) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Webhook{`, + `Throttle:` + strings.Replace(this.Throttle.String(), "WebhookThrottleConfig", "WebhookThrottleConfig", 1) + `,`, + `ClientConfig:` + strings.Replace(strings.Replace(this.ClientConfig.String(), "WebhookClientConfig", "WebhookClientConfig", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *WebhookClientConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WebhookClientConfig{`, + `URL:` + valueToStringGenerated(this.URL) + `,`, + `Service:` + strings.Replace(this.Service.String(), "ServiceReference", "ServiceReference", 1) + `,`, + `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, + `}`, + }, "") + return s +} +func (this *WebhookThrottleConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WebhookThrottleConfig{`, + `QPS:` + valueToStringGenerated(this.QPS) + `,`, + `Burst:` + valueToStringGenerated(this.Burst) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *AuditSink) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuditSink: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditSink: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuditSinkList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuditSinkList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditSinkList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, AuditSink{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuditSinkSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuditSinkSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuditSinkSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Policy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Policy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Webhook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Webhook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Policy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Policy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Policy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Level = Level(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Stages", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Stages = append(m.Stages, Stage(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Path = &s + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Port = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Webhook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Webhook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Webhook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Throttle", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Throttle == nil { + m.Throttle = &WebhookThrottleConfig{} + } + if err := m.Throttle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClientConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WebhookClientConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WebhookClientConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WebhookClientConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.URL = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Service", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Service == nil { + m.Service = &ServiceReference{} + } + if err := m.Service.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CABundle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CABundle = append(m.CABundle[:0], dAtA[iNdEx:postIndex]...) + if m.CABundle == nil { + m.CABundle = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WebhookThrottleConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WebhookThrottleConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WebhookThrottleConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QPS", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.QPS = &v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Burst", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Burst = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,162 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.auditregistration.v1alpha1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1alpha1"; + +// AuditSink represents a cluster level audit sink +message AuditSink { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec defines the audit configuration spec + optional AuditSinkSpec spec = 2; +} + +// AuditSinkList is a list of AuditSink items. +message AuditSinkList { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of audit configurations. + repeated AuditSink items = 2; +} + +// AuditSinkSpec holds the spec for the audit sink +message AuditSinkSpec { + // Policy defines the policy for selecting which events should be sent to the webhook + // required + optional Policy policy = 1; + + // Webhook to send events + // required + optional Webhook webhook = 2; +} + +// Policy defines the configuration of how audit events are logged +message Policy { + // The Level that all requests are recorded at. + // available options: None, Metadata, Request, RequestResponse + // required + optional string level = 1; + + // Stages is a list of stages for which events are created. + // +optional + repeated string stages = 2; +} + +// ServiceReference holds a reference to Service.legacy.k8s.io +message ServiceReference { + // `namespace` is the namespace of the service. + // Required + optional string namespace = 1; + + // `name` is the name of the service. + // Required + optional string name = 2; + + // `path` is an optional URL path which will be sent in any request to + // this service. + // +optional + optional string path = 3; + + // If specified, the port on the service that hosting webhook. + // Default to 443 for backward compatibility. + // `port` should be a valid port number (1-65535, inclusive). + // +optional + optional int32 port = 4; +} + +// Webhook holds the configuration of the webhook +message Webhook { + // Throttle holds the options for throttling the webhook + // +optional + optional WebhookThrottleConfig throttle = 1; + + // ClientConfig holds the connection parameters for the webhook + // required + optional WebhookClientConfig clientConfig = 2; +} + +// WebhookClientConfig contains the information to make a connection with the webhook +message WebhookClientConfig { + // `url` gives the location of the webhook, in standard URL form + // (`scheme://host:port/path`). Exactly one of `url` or `service` + // must be specified. + // + // The `host` should not refer to a service running in the cluster; use + // the `service` field instead. The host might be resolved via external + // DNS in some apiservers (e.g., `kube-apiserver` cannot resolve + // in-cluster DNS as that would be a layering violation). `host` may + // also be an IP address. + // + // Please note that using `localhost` or `127.0.0.1` as a `host` is + // risky unless you take great care to run this webhook on all hosts + // which run an apiserver which might need to make calls to this + // webhook. Such installs are likely to be non-portable, i.e., not easy + // to turn up in a new cluster. + // + // The scheme must be "https"; the URL must begin with "https://". + // + // A path is optional, and if present may be any string permissible in + // a URL. You may use the path to pass an arbitrary string to the + // webhook, for example, a cluster identifier. + // + // Attempting to use a user or basic auth e.g. "user:password@" is not + // allowed. Fragments ("#...") and query parameters ("?...") are not + // allowed, either. + // + // +optional + optional string url = 1; + + // `service` is a reference to the service for this webhook. Either + // `service` or `url` must be specified. + // + // If the webhook is running within the cluster, then you should use `service`. + // + // +optional + optional ServiceReference service = 2; + + // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. + // If unspecified, system trust roots on the apiserver are used. + // +optional + optional bytes caBundle = 3; +} + +// WebhookThrottleConfig holds the configuration for throttling events +message WebhookThrottleConfig { + // ThrottleQPS maximum number of batches per second + // default 10 QPS + // +optional + optional int64 qps = 1; + + // ThrottleBurst is the maximum number of events sent at the same moment + // default 15 QPS + // +optional + optional int64 burst = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "auditregistration.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder runtime.SchemeBuilder + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +func init() { + // We only register manually written functions here. The registration of the + // generated functions takes place in the generated files. The separation + // makes the code compile even when the generated files are missing. + localSchemeBuilder.Register(addKnownTypes) +} + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &AuditSink{}, + &AuditSinkList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,198 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:openapi-gen=true + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Level defines the amount of information logged during auditing +type Level string + +// Valid audit levels +const ( + // LevelNone disables auditing + LevelNone Level = "None" + // LevelMetadata provides the basic level of auditing. + LevelMetadata Level = "Metadata" + // LevelRequest provides Metadata level of auditing, and additionally + // logs the request object (does not apply for non-resource requests). + LevelRequest Level = "Request" + // LevelRequestResponse provides Request level of auditing, and additionally + // logs the response object (does not apply for non-resource requests and watches). + LevelRequestResponse Level = "RequestResponse" +) + +// Stage defines the stages in request handling during which audit events may be generated. +type Stage string + +// Valid audit stages. +const ( + // The stage for events generated after the audit handler receives the request, but before it + // is delegated down the handler chain. + StageRequestReceived = "RequestReceived" + // The stage for events generated after the response headers are sent, but before the response body + // is sent. This stage is only generated for long-running requests (e.g. watch). + StageResponseStarted = "ResponseStarted" + // The stage for events generated after the response body has been completed, and no more bytes + // will be sent. + StageResponseComplete = "ResponseComplete" + // The stage for events generated when a panic occurred. + StagePanic = "Panic" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AuditSink represents a cluster level audit sink +type AuditSink struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the audit configuration spec + Spec AuditSinkSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// AuditSinkSpec holds the spec for the audit sink +type AuditSinkSpec struct { + // Policy defines the policy for selecting which events should be sent to the webhook + // required + Policy Policy `json:"policy" protobuf:"bytes,1,opt,name=policy"` + + // Webhook to send events + // required + Webhook Webhook `json:"webhook" protobuf:"bytes,2,opt,name=webhook"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AuditSinkList is a list of AuditSink items. +type AuditSinkList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of audit configurations. + Items []AuditSink `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// Policy defines the configuration of how audit events are logged +type Policy struct { + // The Level that all requests are recorded at. + // available options: None, Metadata, Request, RequestResponse + // required + Level Level `json:"level" protobuf:"bytes,1,opt,name=level"` + + // Stages is a list of stages for which events are created. + // +optional + Stages []Stage `json:"stages" protobuf:"bytes,2,opt,name=stages"` +} + +// Webhook holds the configuration of the webhook +type Webhook struct { + // Throttle holds the options for throttling the webhook + // +optional + Throttle *WebhookThrottleConfig `json:"throttle,omitempty" protobuf:"bytes,1,opt,name=throttle"` + + // ClientConfig holds the connection parameters for the webhook + // required + ClientConfig WebhookClientConfig `json:"clientConfig" protobuf:"bytes,2,opt,name=clientConfig"` +} + +// WebhookThrottleConfig holds the configuration for throttling events +type WebhookThrottleConfig struct { + // ThrottleQPS maximum number of batches per second + // default 10 QPS + // +optional + QPS *int64 `json:"qps,omitempty" protobuf:"bytes,1,opt,name=qps"` + + // ThrottleBurst is the maximum number of events sent at the same moment + // default 15 QPS + // +optional + Burst *int64 `json:"burst,omitempty" protobuf:"bytes,2,opt,name=burst"` +} + +// WebhookClientConfig contains the information to make a connection with the webhook +type WebhookClientConfig struct { + // `url` gives the location of the webhook, in standard URL form + // (`scheme://host:port/path`). Exactly one of `url` or `service` + // must be specified. + // + // The `host` should not refer to a service running in the cluster; use + // the `service` field instead. The host might be resolved via external + // DNS in some apiservers (e.g., `kube-apiserver` cannot resolve + // in-cluster DNS as that would be a layering violation). `host` may + // also be an IP address. + // + // Please note that using `localhost` or `127.0.0.1` as a `host` is + // risky unless you take great care to run this webhook on all hosts + // which run an apiserver which might need to make calls to this + // webhook. Such installs are likely to be non-portable, i.e., not easy + // to turn up in a new cluster. + // + // The scheme must be "https"; the URL must begin with "https://". + // + // A path is optional, and if present may be any string permissible in + // a URL. You may use the path to pass an arbitrary string to the + // webhook, for example, a cluster identifier. + // + // Attempting to use a user or basic auth e.g. "user:password@" is not + // allowed. Fragments ("#...") and query parameters ("?...") are not + // allowed, either. + // + // +optional + URL *string `json:"url,omitempty" protobuf:"bytes,1,opt,name=url"` + + // `service` is a reference to the service for this webhook. Either + // `service` or `url` must be specified. + // + // If the webhook is running within the cluster, then you should use `service`. + // + // +optional + Service *ServiceReference `json:"service,omitempty" protobuf:"bytes,2,opt,name=service"` + + // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. + // If unspecified, system trust roots on the apiserver are used. + // +optional + CABundle []byte `json:"caBundle,omitempty" protobuf:"bytes,3,opt,name=caBundle"` +} + +// ServiceReference holds a reference to Service.legacy.k8s.io +type ServiceReference struct { + // `namespace` is the namespace of the service. + // Required + Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` + + // `name` is the name of the service. + // Required + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + + // `path` is an optional URL path which will be sent in any request to + // this service. + // +optional + Path *string `json:"path,omitempty" protobuf:"bytes,3,opt,name=path"` + + // If specified, the port on the service that hosting webhook. + // Default to 443 for backward compatibility. + // `port` should be a valid port number (1-65535, inclusive). + // +optional + Port *int32 `json:"port,omitempty" protobuf:"varint,4,opt,name=port"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,111 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_AuditSink = map[string]string{ + "": "AuditSink represents a cluster level audit sink", + "spec": "Spec defines the audit configuration spec", +} + +func (AuditSink) SwaggerDoc() map[string]string { + return map_AuditSink +} + +var map_AuditSinkList = map[string]string{ + "": "AuditSinkList is a list of AuditSink items.", + "items": "List of audit configurations.", +} + +func (AuditSinkList) SwaggerDoc() map[string]string { + return map_AuditSinkList +} + +var map_AuditSinkSpec = map[string]string{ + "": "AuditSinkSpec holds the spec for the audit sink", + "policy": "Policy defines the policy for selecting which events should be sent to the webhook required", + "webhook": "Webhook to send events required", +} + +func (AuditSinkSpec) SwaggerDoc() map[string]string { + return map_AuditSinkSpec +} + +var map_Policy = map[string]string{ + "": "Policy defines the configuration of how audit events are logged", + "level": "The Level that all requests are recorded at. available options: None, Metadata, Request, RequestResponse required", + "stages": "Stages is a list of stages for which events are created.", +} + +func (Policy) SwaggerDoc() map[string]string { + return map_Policy +} + +var map_ServiceReference = map[string]string{ + "": "ServiceReference holds a reference to Service.legacy.k8s.io", + "namespace": "`namespace` is the namespace of the service. Required", + "name": "`name` is the name of the service. Required", + "path": "`path` is an optional URL path which will be sent in any request to this service.", + "port": "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", +} + +func (ServiceReference) SwaggerDoc() map[string]string { + return map_ServiceReference +} + +var map_Webhook = map[string]string{ + "": "Webhook holds the configuration of the webhook", + "throttle": "Throttle holds the options for throttling the webhook", + "clientConfig": "ClientConfig holds the connection parameters for the webhook required", +} + +func (Webhook) SwaggerDoc() map[string]string { + return map_Webhook +} + +var map_WebhookClientConfig = map[string]string{ + "": "WebhookClientConfig contains the information to make a connection with the webhook", + "url": "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + "service": "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + "caBundle": "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", +} + +func (WebhookClientConfig) SwaggerDoc() map[string]string { + return map_WebhookClientConfig +} + +var map_WebhookThrottleConfig = map[string]string{ + "": "WebhookThrottleConfig holds the configuration for throttling events", + "qps": "ThrottleQPS maximum number of batches per second default 10 QPS", + "burst": "ThrottleBurst is the maximum number of events sent at the same moment default 15 QPS", +} + +func (WebhookThrottleConfig) SwaggerDoc() map[string]string { + return map_WebhookThrottleConfig +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,229 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuditSink) DeepCopyInto(out *AuditSink) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuditSink. +func (in *AuditSink) DeepCopy() *AuditSink { + if in == nil { + return nil + } + out := new(AuditSink) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuditSink) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuditSinkList) DeepCopyInto(out *AuditSinkList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AuditSink, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuditSinkList. +func (in *AuditSinkList) DeepCopy() *AuditSinkList { + if in == nil { + return nil + } + out := new(AuditSinkList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuditSinkList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuditSinkSpec) DeepCopyInto(out *AuditSinkSpec) { + *out = *in + in.Policy.DeepCopyInto(&out.Policy) + in.Webhook.DeepCopyInto(&out.Webhook) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuditSinkSpec. +func (in *AuditSinkSpec) DeepCopy() *AuditSinkSpec { + if in == nil { + return nil + } + out := new(AuditSinkSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Policy) DeepCopyInto(out *Policy) { + *out = *in + if in.Stages != nil { + in, out := &in.Stages, &out.Stages + *out = make([]Stage, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Policy. +func (in *Policy) DeepCopy() *Policy { + if in == nil { + return nil + } + out := new(Policy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceReference) DeepCopyInto(out *ServiceReference) { + *out = *in + if in.Path != nil { + in, out := &in.Path, &out.Path + *out = new(string) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceReference. +func (in *ServiceReference) DeepCopy() *ServiceReference { + if in == nil { + return nil + } + out := new(ServiceReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Webhook) DeepCopyInto(out *Webhook) { + *out = *in + if in.Throttle != nil { + in, out := &in.Throttle, &out.Throttle + *out = new(WebhookThrottleConfig) + (*in).DeepCopyInto(*out) + } + in.ClientConfig.DeepCopyInto(&out.ClientConfig) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Webhook. +func (in *Webhook) DeepCopy() *Webhook { + if in == nil { + return nil + } + out := new(Webhook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookClientConfig) DeepCopyInto(out *WebhookClientConfig) { + *out = *in + if in.URL != nil { + in, out := &in.URL, &out.URL + *out = new(string) + **out = **in + } + if in.Service != nil { + in, out := &in.Service, &out.Service + *out = new(ServiceReference) + (*in).DeepCopyInto(*out) + } + if in.CABundle != nil { + in, out := &in.CABundle, &out.CABundle + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookClientConfig. +func (in *WebhookClientConfig) DeepCopy() *WebhookClientConfig { + if in == nil { + return nil + } + out := new(WebhookClientConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookThrottleConfig) DeepCopyInto(out *WebhookThrottleConfig) { + *out = *in + if in.QPS != nil { + in, out := &in.QPS, &out.QPS + *out = new(int64) + **out = **in + } + if in.Burst != nil { + in, out := &in.Burst, &out.Burst + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookThrottleConfig. +func (in *WebhookThrottleConfig) DeepCopy() *WebhookThrottleConfig { + if in == nil { + return nil + } + out := new(WebhookThrottleConfig) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,8 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=authentication.k8s.io // +k8s:openapi-gen=true + package v1 // import "k8s.io/api/authentication/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,41 +14,26 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1/generated.proto - - It has these top-level messages: - BoundObjectReference - ExtraValue - TokenRequest - TokenRequestSpec - TokenRequestStatus - TokenReview - TokenReviewSpec - TokenReviewStatus - UserInfo -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" + io "io" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" -import strings "strings" -import reflect "reflect" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import io "io" + k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -61,41 +46,257 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *BoundObjectReference) Reset() { *m = BoundObjectReference{} } -func (*BoundObjectReference) ProtoMessage() {} -func (*BoundObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ExtraValue) Reset() { *m = ExtraValue{} } -func (*ExtraValue) ProtoMessage() {} -func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *TokenRequest) Reset() { *m = TokenRequest{} } -func (*TokenRequest) ProtoMessage() {} -func (*TokenRequest) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *TokenRequestSpec) Reset() { *m = TokenRequestSpec{} } -func (*TokenRequestSpec) ProtoMessage() {} -func (*TokenRequestSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *TokenRequestStatus) Reset() { *m = TokenRequestStatus{} } -func (*TokenRequestStatus) ProtoMessage() {} -func (*TokenRequestStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *TokenReview) Reset() { *m = TokenReview{} } -func (*TokenReview) ProtoMessage() {} -func (*TokenReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *TokenReviewSpec) Reset() { *m = TokenReviewSpec{} } -func (*TokenReviewSpec) ProtoMessage() {} -func (*TokenReviewSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *TokenReviewStatus) Reset() { *m = TokenReviewStatus{} } -func (*TokenReviewStatus) ProtoMessage() {} -func (*TokenReviewStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *UserInfo) Reset() { *m = UserInfo{} } -func (*UserInfo) ProtoMessage() {} -func (*UserInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (m *BoundObjectReference) Reset() { *m = BoundObjectReference{} } +func (*BoundObjectReference) ProtoMessage() {} +func (*BoundObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{0} +} +func (m *BoundObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BoundObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BoundObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_BoundObjectReference.Merge(m, src) +} +func (m *BoundObjectReference) XXX_Size() int { + return m.Size() +} +func (m *BoundObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_BoundObjectReference.DiscardUnknown(m) +} + +var xxx_messageInfo_BoundObjectReference proto.InternalMessageInfo + +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{1} +} +func (m *ExtraValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExtraValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExtraValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraValue.Merge(m, src) +} +func (m *ExtraValue) XXX_Size() int { + return m.Size() +} +func (m *ExtraValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExtraValue.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtraValue proto.InternalMessageInfo + +func (m *TokenRequest) Reset() { *m = TokenRequest{} } +func (*TokenRequest) ProtoMessage() {} +func (*TokenRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{2} +} +func (m *TokenRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenRequest.Merge(m, src) +} +func (m *TokenRequest) XXX_Size() int { + return m.Size() +} +func (m *TokenRequest) XXX_DiscardUnknown() { + xxx_messageInfo_TokenRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenRequest proto.InternalMessageInfo + +func (m *TokenRequestSpec) Reset() { *m = TokenRequestSpec{} } +func (*TokenRequestSpec) ProtoMessage() {} +func (*TokenRequestSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{3} +} +func (m *TokenRequestSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenRequestSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenRequestSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenRequestSpec.Merge(m, src) +} +func (m *TokenRequestSpec) XXX_Size() int { + return m.Size() +} +func (m *TokenRequestSpec) XXX_DiscardUnknown() { + xxx_messageInfo_TokenRequestSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenRequestSpec proto.InternalMessageInfo + +func (m *TokenRequestStatus) Reset() { *m = TokenRequestStatus{} } +func (*TokenRequestStatus) ProtoMessage() {} +func (*TokenRequestStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{4} +} +func (m *TokenRequestStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenRequestStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenRequestStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenRequestStatus.Merge(m, src) +} +func (m *TokenRequestStatus) XXX_Size() int { + return m.Size() +} +func (m *TokenRequestStatus) XXX_DiscardUnknown() { + xxx_messageInfo_TokenRequestStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenRequestStatus proto.InternalMessageInfo + +func (m *TokenReview) Reset() { *m = TokenReview{} } +func (*TokenReview) ProtoMessage() {} +func (*TokenReview) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{5} +} +func (m *TokenReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenReview.Merge(m, src) +} +func (m *TokenReview) XXX_Size() int { + return m.Size() +} +func (m *TokenReview) XXX_DiscardUnknown() { + xxx_messageInfo_TokenReview.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenReview proto.InternalMessageInfo + +func (m *TokenReviewSpec) Reset() { *m = TokenReviewSpec{} } +func (*TokenReviewSpec) ProtoMessage() {} +func (*TokenReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{6} +} +func (m *TokenReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenReviewSpec.Merge(m, src) +} +func (m *TokenReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *TokenReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_TokenReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenReviewSpec proto.InternalMessageInfo + +func (m *TokenReviewStatus) Reset() { *m = TokenReviewStatus{} } +func (*TokenReviewStatus) ProtoMessage() {} +func (*TokenReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{7} +} +func (m *TokenReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenReviewStatus.Merge(m, src) +} +func (m *TokenReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *TokenReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_TokenReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenReviewStatus proto.InternalMessageInfo + +func (m *UserInfo) Reset() { *m = UserInfo{} } +func (*UserInfo) ProtoMessage() {} +func (*UserInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_2953ea822e7ffe1e, []int{8} +} +func (m *UserInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *UserInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserInfo.Merge(m, src) +} +func (m *UserInfo) XXX_Size() int { + return m.Size() +} +func (m *UserInfo) XXX_DiscardUnknown() { + xxx_messageInfo_UserInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_UserInfo proto.InternalMessageInfo func init() { proto.RegisterType((*BoundObjectReference)(nil), "k8s.io.api.authentication.v1.BoundObjectReference") @@ -107,11 +308,78 @@ proto.RegisterType((*TokenReviewSpec)(nil), "k8s.io.api.authentication.v1.TokenReviewSpec") proto.RegisterType((*TokenReviewStatus)(nil), "k8s.io.api.authentication.v1.TokenReviewStatus") proto.RegisterType((*UserInfo)(nil), "k8s.io.api.authentication.v1.UserInfo") + proto.RegisterMapType((map[string]ExtraValue)(nil), "k8s.io.api.authentication.v1.UserInfo.ExtraEntry") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1/generated.proto", fileDescriptor_2953ea822e7ffe1e) +} + +var fileDescriptor_2953ea822e7ffe1e = []byte{ + // 903 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0x8e, 0xf3, 0xa3, 0x4a, 0x26, 0xdb, 0xd2, 0xce, 0xb2, 0x52, 0x54, 0x20, 0x2e, 0x5e, 0x09, + 0x55, 0xc0, 0xda, 0x9b, 0x08, 0xc1, 0x6a, 0x91, 0x90, 0x6a, 0x1a, 0x41, 0x84, 0x60, 0x57, 0xb3, + 0xdb, 0x82, 0x38, 0x31, 0xb1, 0x5f, 0x53, 0x13, 0x3c, 0x36, 0xf6, 0x38, 0x6c, 0x6e, 0xfb, 0x27, + 0x70, 0x04, 0x89, 0x03, 0x7f, 0x04, 0x12, 0xff, 0x42, 0x8f, 0x2b, 0x4e, 0x3d, 0xa0, 0x88, 0x9a, + 0x2b, 0x47, 0x4e, 0x9c, 0xd0, 0x8c, 0xa7, 0x71, 0x9c, 0xb4, 0x69, 0x4e, 0x7b, 0x8b, 0xdf, 0xfb, + 0xde, 0xf7, 0xde, 0xfb, 0xe6, 0xcb, 0x0c, 0xea, 0x8d, 0x1e, 0xc4, 0xa6, 0x17, 0x58, 0xa3, 0x64, + 0x00, 0x11, 0x03, 0x0e, 0xb1, 0x35, 0x06, 0xe6, 0x06, 0x91, 0xa5, 0x12, 0x34, 0xf4, 0x2c, 0x9a, + 0xf0, 0x53, 0x60, 0xdc, 0x73, 0x28, 0xf7, 0x02, 0x66, 0x8d, 0x3b, 0xd6, 0x10, 0x18, 0x44, 0x94, + 0x83, 0x6b, 0x86, 0x51, 0xc0, 0x03, 0xfc, 0x7a, 0x86, 0x36, 0x69, 0xe8, 0x99, 0x45, 0xb4, 0x39, + 0xee, 0xec, 0xde, 0x1b, 0x7a, 0xfc, 0x34, 0x19, 0x98, 0x4e, 0xe0, 0x5b, 0xc3, 0x60, 0x18, 0x58, + 0xb2, 0x68, 0x90, 0x9c, 0xc8, 0x2f, 0xf9, 0x21, 0x7f, 0x65, 0x64, 0xbb, 0xef, 0xe5, 0xad, 0x7d, + 0xea, 0x9c, 0x7a, 0x0c, 0xa2, 0x89, 0x15, 0x8e, 0x86, 0x22, 0x10, 0x5b, 0x3e, 0x70, 0x7a, 0xc5, + 0x08, 0xbb, 0xd6, 0x75, 0x55, 0x51, 0xc2, 0xb8, 0xe7, 0xc3, 0x52, 0xc1, 0xfb, 0x37, 0x15, 0xc4, + 0xce, 0x29, 0xf8, 0x74, 0xb1, 0xce, 0xf8, 0x43, 0x43, 0xaf, 0xda, 0x41, 0xc2, 0xdc, 0x47, 0x83, + 0x6f, 0xc1, 0xe1, 0x04, 0x4e, 0x20, 0x02, 0xe6, 0x00, 0xde, 0x43, 0xd5, 0x91, 0xc7, 0xdc, 0x96, + 0xb6, 0xa7, 0xed, 0x37, 0xec, 0x5b, 0x67, 0x53, 0xbd, 0x94, 0x4e, 0xf5, 0xea, 0x67, 0x1e, 0x73, + 0x89, 0xcc, 0xe0, 0x2e, 0x42, 0xf4, 0x71, 0xff, 0x18, 0xa2, 0xd8, 0x0b, 0x58, 0xab, 0x2c, 0x71, + 0x58, 0xe1, 0xd0, 0xc1, 0x2c, 0x43, 0xe6, 0x50, 0x82, 0x95, 0x51, 0x1f, 0x5a, 0x95, 0x22, 0xeb, + 0x17, 0xd4, 0x07, 0x22, 0x33, 0xd8, 0x46, 0x95, 0xa4, 0x7f, 0xd8, 0xaa, 0x4a, 0xc0, 0x7d, 0x05, + 0xa8, 0x1c, 0xf5, 0x0f, 0xff, 0x9b, 0xea, 0x6f, 0x5e, 0xb7, 0x24, 0x9f, 0x84, 0x10, 0x9b, 0x47, + 0xfd, 0x43, 0x22, 0x8a, 0x8d, 0x0f, 0x10, 0xea, 0x3d, 0xe3, 0x11, 0x3d, 0xa6, 0xdf, 0x25, 0x80, + 0x75, 0x54, 0xf3, 0x38, 0xf8, 0x71, 0x4b, 0xdb, 0xab, 0xec, 0x37, 0xec, 0x46, 0x3a, 0xd5, 0x6b, + 0x7d, 0x11, 0x20, 0x59, 0xfc, 0x61, 0xfd, 0xa7, 0x5f, 0xf5, 0xd2, 0xf3, 0x3f, 0xf7, 0x4a, 0xc6, + 0x2f, 0x65, 0x74, 0xeb, 0x69, 0x30, 0x02, 0x46, 0xe0, 0xfb, 0x04, 0x62, 0x8e, 0xbf, 0x41, 0x75, + 0x71, 0x44, 0x2e, 0xe5, 0x54, 0x2a, 0xd1, 0xec, 0xde, 0x37, 0x73, 0x77, 0xcc, 0x86, 0x30, 0xc3, + 0xd1, 0x50, 0x04, 0x62, 0x53, 0xa0, 0xcd, 0x71, 0xc7, 0xcc, 0xe4, 0xfc, 0x1c, 0x38, 0xcd, 0x35, + 0xc9, 0x63, 0x64, 0xc6, 0x8a, 0x1f, 0xa3, 0x6a, 0x1c, 0x82, 0x23, 0xf5, 0x6b, 0x76, 0x4d, 0x73, + 0x95, 0xf7, 0xcc, 0xf9, 0xd9, 0x9e, 0x84, 0xe0, 0xe4, 0x0a, 0x8a, 0x2f, 0x22, 0x99, 0xf0, 0x57, + 0x68, 0x23, 0xe6, 0x94, 0x27, 0xb1, 0x54, 0xb9, 0x38, 0xf1, 0x4d, 0x9c, 0xb2, 0xce, 0xde, 0x52, + 0xac, 0x1b, 0xd9, 0x37, 0x51, 0x7c, 0xc6, 0xbf, 0x1a, 0xda, 0x5e, 0x1c, 0x01, 0xbf, 0x83, 0x1a, + 0x34, 0x71, 0x3d, 0x61, 0x9a, 0x4b, 0x89, 0x37, 0xd3, 0xa9, 0xde, 0x38, 0xb8, 0x0c, 0x92, 0x3c, + 0x8f, 0x3f, 0x46, 0x3b, 0xf0, 0x2c, 0xf4, 0x22, 0xd9, 0xfd, 0x09, 0x38, 0x01, 0x73, 0x63, 0x79, + 0xd6, 0x15, 0xfb, 0x4e, 0x3a, 0xd5, 0x77, 0x7a, 0x8b, 0x49, 0xb2, 0x8c, 0xc7, 0x0c, 0x6d, 0x0d, + 0x0a, 0x96, 0x55, 0x8b, 0x76, 0x57, 0x2f, 0x7a, 0x95, 0xcd, 0x6d, 0x9c, 0x4e, 0xf5, 0xad, 0x62, + 0x86, 0x2c, 0xb0, 0x1b, 0xbf, 0x69, 0x08, 0x2f, 0xab, 0x84, 0xef, 0xa2, 0x1a, 0x17, 0x51, 0xf5, + 0x17, 0xd9, 0x54, 0xa2, 0xd5, 0x32, 0x68, 0x96, 0xc3, 0x13, 0x74, 0x3b, 0x5f, 0xe0, 0xa9, 0xe7, + 0x43, 0xcc, 0xa9, 0x1f, 0xaa, 0xd3, 0x7e, 0x7b, 0x3d, 0x2f, 0x89, 0x32, 0xfb, 0x35, 0x45, 0x7f, + 0xbb, 0xb7, 0x4c, 0x47, 0xae, 0xea, 0x61, 0xfc, 0x5c, 0x46, 0x4d, 0x35, 0xf6, 0xd8, 0x83, 0x1f, + 0x5e, 0x82, 0x97, 0x1f, 0x15, 0xbc, 0x7c, 0x6f, 0x2d, 0xdf, 0x89, 0xd1, 0xae, 0xb5, 0xf2, 0x97, + 0x0b, 0x56, 0xb6, 0xd6, 0xa7, 0x5c, 0xed, 0x64, 0x07, 0xbd, 0xb2, 0xd0, 0x7f, 0xbd, 0xe3, 0x2c, + 0x98, 0xbd, 0xbc, 0xda, 0xec, 0xc6, 0x3f, 0x1a, 0xda, 0x59, 0x1a, 0x09, 0x7f, 0x88, 0x36, 0xe7, + 0x26, 0x87, 0xec, 0x86, 0xad, 0xdb, 0x77, 0x54, 0xbf, 0xcd, 0x83, 0xf9, 0x24, 0x29, 0x62, 0xf1, + 0xa7, 0xa8, 0x9a, 0xc4, 0x10, 0x29, 0x85, 0xdf, 0x5a, 0x2d, 0xc7, 0x51, 0x0c, 0x51, 0x9f, 0x9d, + 0x04, 0xb9, 0xb4, 0x22, 0x42, 0x24, 0x43, 0x71, 0x93, 0xea, 0x0d, 0x7f, 0xdb, 0xbb, 0xa8, 0x06, + 0x51, 0x14, 0x44, 0xea, 0xde, 0x9e, 0x69, 0xd3, 0x13, 0x41, 0x92, 0xe5, 0x8c, 0xdf, 0xcb, 0xa8, + 0x7e, 0xd9, 0x12, 0xbf, 0x8b, 0xea, 0xa2, 0x8d, 0xbc, 0xec, 0x33, 0x41, 0xb7, 0x55, 0x91, 0xc4, + 0x88, 0x38, 0x99, 0x21, 0xf0, 0x1b, 0xa8, 0x92, 0x78, 0xae, 0x7a, 0x43, 0x9a, 0x73, 0x97, 0x3e, + 0x11, 0x71, 0x6c, 0xa0, 0x8d, 0x61, 0x14, 0x24, 0xa1, 0xb0, 0x81, 0x18, 0x14, 0x89, 0x13, 0xfd, + 0x44, 0x46, 0x88, 0xca, 0xe0, 0x63, 0x54, 0x03, 0x71, 0xe7, 0xcb, 0x5d, 0x9a, 0xdd, 0xce, 0x7a, + 0xd2, 0x98, 0xf2, 0x9d, 0xe8, 0x31, 0x1e, 0x4d, 0xe6, 0xb6, 0x12, 0x31, 0x92, 0xd1, 0xed, 0x0e, + 0xd4, 0x5b, 0x22, 0x31, 0x78, 0x1b, 0x55, 0x46, 0x30, 0xc9, 0x36, 0x22, 0xe2, 0x27, 0xfe, 0x08, + 0xd5, 0xc6, 0xe2, 0x99, 0x51, 0x47, 0xb2, 0xbf, 0xba, 0x6f, 0xfe, 0x2c, 0x91, 0xac, 0xec, 0x61, + 0xf9, 0x81, 0x66, 0xef, 0x9f, 0x5d, 0xb4, 0x4b, 0x2f, 0x2e, 0xda, 0xa5, 0xf3, 0x8b, 0x76, 0xe9, + 0x79, 0xda, 0xd6, 0xce, 0xd2, 0xb6, 0xf6, 0x22, 0x6d, 0x6b, 0xe7, 0x69, 0x5b, 0xfb, 0x2b, 0x6d, + 0x6b, 0x3f, 0xfe, 0xdd, 0x2e, 0x7d, 0x5d, 0x1e, 0x77, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x8c, + 0x44, 0x87, 0xd0, 0xe2, 0x08, 0x00, 0x00, +} + func (m *BoundObjectReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -119,33 +387,42 @@ } func (m *BoundObjectReference) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BoundObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x22 - i++ + i -= len(m.UID) + copy(dAtA[i:], m.UID) i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - return i, nil + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m ExtraValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -153,32 +430,31 @@ } func (m ExtraValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m ExtraValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m) > 0 { - for _, s := range m { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } func (m *TokenRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -186,41 +462,52 @@ } func (m *TokenRequest) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *TokenRequestSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -228,47 +515,48 @@ } func (m *TokenRequestSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenRequestSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Audiences) > 0 { - for _, s := range m.Audiences { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + if m.ExpirationSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ExpirationSeconds)) + i-- + dAtA[i] = 0x20 } if m.BoundObjectRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.BoundObjectRef.Size())) - n4, err := m.BoundObjectRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.BoundObjectRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- + dAtA[i] = 0x1a } - if m.ExpirationSeconds != nil { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ExpirationSeconds)) + if len(m.Audiences) > 0 { + for iNdEx := len(m.Audiences) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Audiences[iNdEx]) + copy(dAtA[i:], m.Audiences[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audiences[iNdEx]))) + i-- + dAtA[i] = 0xa + } } - return i, nil + return len(dAtA) - i, nil } func (m *TokenRequestStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -276,29 +564,37 @@ } func (m *TokenRequestStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenRequestStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Token))) - i += copy(dAtA[i:], m.Token) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ExpirationTimestamp.Size())) - n5, err := m.ExpirationTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ExpirationTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Token) + copy(dAtA[i:], m.Token) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Token))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *TokenReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -306,41 +602,52 @@ } func (m *TokenReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n6, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n7, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n8, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *TokenReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -348,21 +655,36 @@ } func (m *TokenReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + if len(m.Audiences) > 0 { + for iNdEx := len(m.Audiences) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Audiences[iNdEx]) + copy(dAtA[i:], m.Audiences[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audiences[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Token) + copy(dAtA[i:], m.Token) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Token))) - i += copy(dAtA[i:], m.Token) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *TokenReviewStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -370,37 +692,54 @@ } func (m *TokenReviewStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ + if len(m.Audiences) > 0 { + for iNdEx := len(m.Audiences) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Audiences[iNdEx]) + copy(dAtA[i:], m.Audiences[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audiences[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i -= len(m.Error) + copy(dAtA[i:], m.Error) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) + i-- + dAtA[i] = 0x1a + { + size, err := m.User.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i-- if m.Authenticated { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.User.Size())) - n9, err := m.User.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *UserInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -408,95 +747,81 @@ } func (m *UserInfo) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) - i += copy(dAtA[i:], m.Username) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - if len(m.Groups) > 0 { - for _, s := range m.Groups { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } if len(m.Extra) > 0 { keysForExtra := make([]string, 0, len(m.Extra)) for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) - for _, k := range keysForExtra { - dAtA[i] = 0x22 - i++ - v := m.Extra[string(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n10, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 } } - return i, nil + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x12 + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *BoundObjectReference) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -511,6 +836,9 @@ } func (m ExtraValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m) > 0 { @@ -523,6 +851,9 @@ } func (m *TokenRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -535,6 +866,9 @@ } func (m *TokenRequestSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Audiences) > 0 { @@ -554,6 +888,9 @@ } func (m *TokenRequestStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Token) @@ -564,6 +901,9 @@ } func (m *TokenReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -576,14 +916,26 @@ } func (m *TokenReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Token) n += 1 + l + sovGenerated(uint64(l)) + if len(m.Audiences) > 0 { + for _, s := range m.Audiences { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } func (m *TokenReviewStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -591,10 +943,19 @@ n += 1 + l + sovGenerated(uint64(l)) l = len(m.Error) n += 1 + l + sovGenerated(uint64(l)) + if len(m.Audiences) > 0 { + for _, s := range m.Audiences { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } func (m *UserInfo) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Username) @@ -620,14 +981,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -650,7 +1004,7 @@ return "nil" } s := strings.Join([]string{`&TokenRequest{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "TokenRequestSpec", "TokenRequestSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "TokenRequestStatus", "TokenRequestStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -663,7 +1017,7 @@ } s := strings.Join([]string{`&TokenRequestSpec{`, `Audiences:` + fmt.Sprintf("%v", this.Audiences) + `,`, - `BoundObjectRef:` + strings.Replace(fmt.Sprintf("%v", this.BoundObjectRef), "BoundObjectReference", "BoundObjectReference", 1) + `,`, + `BoundObjectRef:` + strings.Replace(this.BoundObjectRef.String(), "BoundObjectReference", "BoundObjectReference", 1) + `,`, `ExpirationSeconds:` + valueToStringGenerated(this.ExpirationSeconds) + `,`, `}`, }, "") @@ -675,7 +1029,7 @@ } s := strings.Join([]string{`&TokenRequestStatus{`, `Token:` + fmt.Sprintf("%v", this.Token) + `,`, - `ExpirationTimestamp:` + strings.Replace(strings.Replace(this.ExpirationTimestamp.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `ExpirationTimestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ExpirationTimestamp), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -685,7 +1039,7 @@ return "nil" } s := strings.Join([]string{`&TokenReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "TokenReviewSpec", "TokenReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "TokenReviewStatus", "TokenReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -698,6 +1052,7 @@ } s := strings.Join([]string{`&TokenReviewSpec{`, `Token:` + fmt.Sprintf("%v", this.Token) + `,`, + `Audiences:` + fmt.Sprintf("%v", this.Audiences) + `,`, `}`, }, "") return s @@ -710,6 +1065,7 @@ `Authenticated:` + fmt.Sprintf("%v", this.Authenticated) + `,`, `User:` + strings.Replace(strings.Replace(this.User.String(), "UserInfo", "UserInfo", 1), `&`, ``, 1) + `,`, `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `Audiences:` + fmt.Sprintf("%v", this.Audiences) + `,`, `}`, }, "") return s @@ -760,7 +1116,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -788,7 +1144,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -798,6 +1154,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -817,7 +1176,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -827,6 +1186,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -846,7 +1208,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -856,6 +1218,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -875,7 +1240,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -885,6 +1250,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -899,6 +1267,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -926,7 +1297,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -954,7 +1325,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -964,6 +1335,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -978,6 +1352,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1005,7 +1382,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1033,7 +1410,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1042,6 +1419,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1063,7 +1443,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1072,6 +1452,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1093,7 +1476,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1102,6 +1485,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1118,6 +1504,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1145,7 +1534,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1173,7 +1562,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1183,6 +1572,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1202,7 +1594,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1211,6 +1603,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1235,7 +1630,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -1250,6 +1645,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1277,7 +1675,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1305,7 +1703,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1315,6 +1713,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1334,7 +1735,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1343,6 +1744,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1359,6 +1763,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1386,7 +1793,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1414,7 +1821,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1423,6 +1830,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1444,7 +1854,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1453,6 +1863,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1474,7 +1887,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1483,6 +1896,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1499,6 +1915,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1526,7 +1945,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1554,7 +1973,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1564,11 +1983,46 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Token = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Audiences", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Audiences = append(m.Audiences, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1578,6 +2032,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1605,7 +2062,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1633,7 +2090,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1653,7 +2110,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1662,6 +2119,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1683,7 +2143,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1693,11 +2153,46 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Audiences", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Audiences = append(m.Audiences, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1707,6 +2202,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1734,7 +2232,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1762,7 +2260,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1772,6 +2270,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1791,7 +2292,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1801,6 +2302,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1820,7 +2324,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1830,6 +2334,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1849,7 +2356,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1858,54 +2365,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Extra == nil { m.Extra = make(map[string]ExtraValue) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := &ExtraValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1915,46 +2388,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ExtraValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &ExtraValue{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Extra[mapkey] = *mapvalue - } else { - var mapvalue ExtraValue - m.Extra[mapkey] = mapvalue } + m.Extra[mapkey] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -1965,6 +2480,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2031,10 +2549,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -2063,6 +2584,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -2081,67 +2605,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 892 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x8f, 0xdb, 0x44, - 0x14, 0x8e, 0xf3, 0x63, 0xb5, 0x99, 0x74, 0x97, 0xdd, 0x29, 0x95, 0xa2, 0x05, 0xec, 0x60, 0x24, - 0x14, 0x01, 0xb5, 0x9b, 0x08, 0x95, 0xaa, 0x48, 0x48, 0x6b, 0x36, 0x82, 0x08, 0x41, 0xab, 0x69, - 0x77, 0x41, 0x9c, 0x98, 0xd8, 0x6f, 0xb3, 0x26, 0x78, 0x6c, 0xec, 0x71, 0x68, 0x6e, 0xfd, 0x13, - 0x38, 0x82, 0xc4, 0x81, 0x3f, 0x02, 0x89, 0x23, 0xd7, 0x3d, 0x56, 0x9c, 0x7a, 0x40, 0x11, 0x6b, - 0xfe, 0x05, 0x4e, 0x9c, 0xd0, 0x8c, 0x67, 0xe3, 0xfc, 0xd8, 0x4d, 0x73, 0xea, 0x2d, 0xf3, 0xde, - 0xf7, 0xbe, 0x79, 0xef, 0x9b, 0x2f, 0xcf, 0xa8, 0x37, 0xba, 0x97, 0x58, 0x7e, 0x68, 0x8f, 0xd2, - 0x01, 0xc4, 0x0c, 0x38, 0x24, 0xf6, 0x18, 0x98, 0x17, 0xc6, 0xb6, 0x4a, 0xd0, 0xc8, 0xb7, 0x69, - 0xca, 0xcf, 0x80, 0x71, 0xdf, 0xa5, 0xdc, 0x0f, 0x99, 0x3d, 0xee, 0xd8, 0x43, 0x60, 0x10, 0x53, - 0x0e, 0x9e, 0x15, 0xc5, 0x21, 0x0f, 0xf1, 0xeb, 0x39, 0xda, 0xa2, 0x91, 0x6f, 0x2d, 0xa2, 0xad, - 0x71, 0xe7, 0xe0, 0xf6, 0xd0, 0xe7, 0x67, 0xe9, 0xc0, 0x72, 0xc3, 0xc0, 0x1e, 0x86, 0xc3, 0xd0, - 0x96, 0x45, 0x83, 0xf4, 0x54, 0x9e, 0xe4, 0x41, 0xfe, 0xca, 0xc9, 0x0e, 0xde, 0x2f, 0xae, 0x0e, - 0xa8, 0x7b, 0xe6, 0x33, 0x88, 0x27, 0x76, 0x34, 0x1a, 0x8a, 0x40, 0x62, 0x07, 0xc0, 0xe9, 0x15, - 0x2d, 0x1c, 0xd8, 0xd7, 0x55, 0xc5, 0x29, 0xe3, 0x7e, 0x00, 0x2b, 0x05, 0x77, 0x5f, 0x54, 0x90, - 0xb8, 0x67, 0x10, 0xd0, 0xe5, 0x3a, 0xf3, 0x4f, 0x0d, 0xbd, 0xea, 0x84, 0x29, 0xf3, 0x1e, 0x0c, - 0xbe, 0x05, 0x97, 0x13, 0x38, 0x85, 0x18, 0x98, 0x0b, 0xb8, 0x85, 0xaa, 0x23, 0x9f, 0x79, 0x4d, - 0xad, 0xa5, 0xb5, 0xeb, 0xce, 0x8d, 0xf3, 0xa9, 0x51, 0xca, 0xa6, 0x46, 0xf5, 0x33, 0x9f, 0x79, - 0x44, 0x66, 0x70, 0x17, 0x21, 0xfa, 0xb0, 0x7f, 0x02, 0x71, 0xe2, 0x87, 0xac, 0x59, 0x96, 0x38, - 0xac, 0x70, 0xe8, 0x70, 0x96, 0x21, 0x73, 0x28, 0xc1, 0xca, 0x68, 0x00, 0xcd, 0xca, 0x22, 0xeb, - 0x17, 0x34, 0x00, 0x22, 0x33, 0xd8, 0x41, 0x95, 0xb4, 0x7f, 0xd4, 0xac, 0x4a, 0xc0, 0x1d, 0x05, - 0xa8, 0x1c, 0xf7, 0x8f, 0xfe, 0x9b, 0x1a, 0x6f, 0x5e, 0x37, 0x24, 0x9f, 0x44, 0x90, 0x58, 0xc7, - 0xfd, 0x23, 0x22, 0x8a, 0xcd, 0x0f, 0x10, 0xea, 0x3d, 0xe1, 0x31, 0x3d, 0xa1, 0xdf, 0xa5, 0x80, - 0x0d, 0x54, 0xf3, 0x39, 0x04, 0x49, 0x53, 0x6b, 0x55, 0xda, 0x75, 0xa7, 0x9e, 0x4d, 0x8d, 0x5a, - 0x5f, 0x04, 0x48, 0x1e, 0xbf, 0xbf, 0xfd, 0xd3, 0xaf, 0x46, 0xe9, 0xe9, 0x5f, 0xad, 0x92, 0xf9, - 0x4b, 0x19, 0xdd, 0x78, 0x1c, 0x8e, 0x80, 0x11, 0xf8, 0x3e, 0x85, 0x84, 0xe3, 0x6f, 0xd0, 0xb6, - 0x78, 0x22, 0x8f, 0x72, 0x2a, 0x95, 0x68, 0x74, 0xef, 0x58, 0x85, 0x3b, 0x66, 0x4d, 0x58, 0xd1, - 0x68, 0x28, 0x02, 0x89, 0x25, 0xd0, 0xd6, 0xb8, 0x63, 0xe5, 0x72, 0x7e, 0x0e, 0x9c, 0x16, 0x9a, - 0x14, 0x31, 0x32, 0x63, 0xc5, 0x0f, 0x51, 0x35, 0x89, 0xc0, 0x95, 0xfa, 0x35, 0xba, 0x96, 0xb5, - 0xce, 0x7b, 0xd6, 0x7c, 0x6f, 0x8f, 0x22, 0x70, 0x0b, 0x05, 0xc5, 0x89, 0x48, 0x26, 0xfc, 0x15, - 0xda, 0x4a, 0x38, 0xe5, 0x69, 0x22, 0x55, 0x5e, 0xec, 0xf8, 0x45, 0x9c, 0xb2, 0xce, 0xd9, 0x55, - 0xac, 0x5b, 0xf9, 0x99, 0x28, 0x3e, 0xf3, 0x5f, 0x0d, 0xed, 0x2d, 0xb7, 0x80, 0xdf, 0x45, 0x75, - 0x9a, 0x7a, 0xbe, 0x30, 0xcd, 0xa5, 0xc4, 0x3b, 0xd9, 0xd4, 0xa8, 0x1f, 0x5e, 0x06, 0x49, 0x91, - 0xc7, 0x0c, 0xed, 0x0e, 0x16, 0xdc, 0xa6, 0x7a, 0xec, 0xae, 0xef, 0xf1, 0x2a, 0x87, 0x3a, 0x38, - 0x9b, 0x1a, 0xbb, 0x8b, 0x19, 0xb2, 0xc4, 0x8e, 0x3f, 0x46, 0xfb, 0xf0, 0x24, 0xf2, 0x63, 0xc9, - 0xf4, 0x08, 0xdc, 0x90, 0x79, 0x89, 0xf4, 0x56, 0xc5, 0xb9, 0x95, 0x4d, 0x8d, 0xfd, 0xde, 0x72, - 0x92, 0xac, 0xe2, 0xcd, 0xdf, 0x34, 0x84, 0x57, 0x55, 0xc2, 0x6f, 0xa1, 0x1a, 0x17, 0x51, 0xf5, - 0x17, 0xd9, 0x51, 0xa2, 0xd5, 0x72, 0x68, 0x9e, 0xc3, 0x13, 0x74, 0xb3, 0x20, 0x7c, 0xec, 0x07, - 0x90, 0x70, 0x1a, 0x44, 0xea, 0xb5, 0xdf, 0xd9, 0xcc, 0x4b, 0xa2, 0xcc, 0x79, 0x4d, 0xd1, 0xdf, - 0xec, 0xad, 0xd2, 0x91, 0xab, 0xee, 0x30, 0x7f, 0x2e, 0xa3, 0x86, 0x6a, 0x7b, 0xec, 0xc3, 0x0f, - 0x2f, 0xc1, 0xcb, 0x0f, 0x16, 0xbc, 0x7c, 0x7b, 0x23, 0xdf, 0x89, 0xd6, 0xae, 0xb5, 0xf2, 0x97, - 0x4b, 0x56, 0xb6, 0x37, 0xa7, 0x5c, 0xef, 0xe4, 0xbb, 0xe8, 0x95, 0xa5, 0xfb, 0x37, 0x7a, 0x4e, - 0xf3, 0x0f, 0x0d, 0xed, 0xaf, 0xdc, 0x82, 0x3f, 0x44, 0x3b, 0x73, 0xcd, 0x40, 0xbe, 0x34, 0xb7, - 0x9d, 0x5b, 0x8a, 0x62, 0xe7, 0x70, 0x3e, 0x49, 0x16, 0xb1, 0xf8, 0x53, 0x54, 0x4d, 0x13, 0x88, - 0x95, 0x68, 0x6f, 0xaf, 0x9f, 0xf0, 0x38, 0x81, 0xb8, 0xcf, 0x4e, 0xc3, 0x42, 0x2d, 0x11, 0x21, - 0x92, 0x41, 0x4c, 0x00, 0x71, 0x1c, 0xc6, 0x6a, 0xbb, 0xce, 0x26, 0xe8, 0x89, 0x20, 0xc9, 0x73, - 0xe6, 0xef, 0x65, 0xb4, 0x7d, 0xc9, 0x82, 0xdf, 0x43, 0xdb, 0xa2, 0x52, 0xae, 0xe4, 0x7c, 0xec, - 0x3d, 0x55, 0x24, 0x31, 0x22, 0x4e, 0x66, 0x08, 0xfc, 0x06, 0xaa, 0xa4, 0xbe, 0xa7, 0x36, 0x7d, - 0x63, 0x6e, 0x35, 0x13, 0x11, 0xc7, 0x26, 0xda, 0x1a, 0xc6, 0x61, 0x1a, 0x89, 0xc7, 0x12, 0x5b, - 0x00, 0x09, 0xdd, 0x3f, 0x91, 0x11, 0xa2, 0x32, 0xf8, 0x04, 0xd5, 0x40, 0x6c, 0xe6, 0x66, 0xb5, - 0x55, 0x69, 0x37, 0xba, 0x9d, 0xcd, 0xa6, 0xb5, 0xe4, 0x36, 0xef, 0x31, 0x1e, 0x4f, 0xe6, 0xa6, - 0x12, 0x31, 0x92, 0xd3, 0x1d, 0x0c, 0xd4, 0xc6, 0x97, 0x18, 0xbc, 0x87, 0x2a, 0x23, 0x98, 0xe4, - 0x13, 0x11, 0xf1, 0x13, 0x7f, 0x84, 0x6a, 0x63, 0xf1, 0x31, 0x50, 0x2a, 0xb7, 0xd7, 0xdf, 0x5b, - 0x7c, 0x3c, 0x48, 0x5e, 0x76, 0xbf, 0x7c, 0x4f, 0x73, 0xda, 0xe7, 0x17, 0x7a, 0xe9, 0xd9, 0x85, - 0x5e, 0x7a, 0x7e, 0xa1, 0x97, 0x9e, 0x66, 0xba, 0x76, 0x9e, 0xe9, 0xda, 0xb3, 0x4c, 0xd7, 0x9e, - 0x67, 0xba, 0xf6, 0x77, 0xa6, 0x6b, 0x3f, 0xfe, 0xa3, 0x97, 0xbe, 0x2e, 0x8f, 0x3b, 0xff, 0x07, - 0x00, 0x00, 0xff, 0xff, 0x5e, 0x8d, 0x94, 0x78, 0x88, 0x08, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -84,7 +84,10 @@ optional int64 expirationSeconds = 4; // BoundObjectRef is a reference to an object that the token will be bound to. - // The token will only be valid for as long as the bound objet exists. + // The token will only be valid for as long as the bound object exists. + // NOTE: The API server's TokenReview endpoint will validate the + // BoundObjectRef, but other audiences may not. Keep ExpirationSeconds + // small if you want prompt revocation. // +optional optional BoundObjectReference boundObjectRef = 3; } @@ -118,6 +121,14 @@ // Token is the opaque bearer token. // +optional optional string token = 1; + + // Audiences is a list of the identifiers that the resource server presented + // with the token identifies as. Audience-aware token authenticators will + // verify that the token was intended for at least one of the audiences in + // this list. If no audiences are provided, the audience will default to the + // audience of the Kubernetes apiserver. + // +optional + repeated string audiences = 2; } // TokenReviewStatus is the result of the token authentication request. @@ -130,6 +141,18 @@ // +optional optional UserInfo user = 2; + // Audiences are audience identifiers chosen by the authenticator that are + // compatible with both the TokenReview and token. An identifier is any + // identifier in the intersection of the TokenReviewSpec audiences and the + // token's audiences. A client of the TokenReview API that sets the + // spec.audiences field should validate that a compatible audience identifier + // is returned in the status.audiences field to ensure that the TokenReview + // server is audience aware. If a TokenReview returns an empty + // status.audience field where status.authenticated is "true", the token is + // valid against the audience of the Kubernetes API server. + // +optional + repeated string audiences = 4; + // Error indicates that the token couldn't be checked // +optional optional string error = 3; diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -64,6 +64,13 @@ // Token is the opaque bearer token. // +optional Token string `json:"token,omitempty" protobuf:"bytes,1,opt,name=token"` + // Audiences is a list of the identifiers that the resource server presented + // with the token identifies as. Audience-aware token authenticators will + // verify that the token was intended for at least one of the audiences in + // this list. If no audiences are provided, the audience will default to the + // audience of the Kubernetes apiserver. + // +optional + Audiences []string `json:"audiences,omitempty" protobuf:"bytes,2,rep,name=audiences"` } // TokenReviewStatus is the result of the token authentication request. @@ -74,6 +81,17 @@ // User is the UserInfo associated with the provided token. // +optional User UserInfo `json:"user,omitempty" protobuf:"bytes,2,opt,name=user"` + // Audiences are audience identifiers chosen by the authenticator that are + // compatible with both the TokenReview and token. An identifier is any + // identifier in the intersection of the TokenReviewSpec audiences and the + // token's audiences. A client of the TokenReview API that sets the + // spec.audiences field should validate that a compatible audience identifier + // is returned in the status.audiences field to ensure that the TokenReview + // server is audience aware. If a TokenReview returns an empty + // status.audience field where status.authenticated is "true", the token is + // valid against the audience of the Kubernetes API server. + // +optional + Audiences []string `json:"audiences,omitempty" protobuf:"bytes,4,rep,name=audiences"` // Error indicates that the token couldn't be checked // +optional Error string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"` @@ -137,7 +155,10 @@ ExpirationSeconds *int64 `json:"expirationSeconds" protobuf:"varint,4,opt,name=expirationSeconds"` // BoundObjectRef is a reference to an object that the token will be bound to. - // The token will only be valid for as long as the bound objet exists. + // The token will only be valid for as long as the bound object exists. + // NOTE: The API server's TokenReview endpoint will validate the + // BoundObjectRef, but other audiences may not. Keep ExpirationSeconds + // small if you want prompt revocation. // +optional BoundObjectRef *BoundObjectReference `json:"boundObjectRef" protobuf:"bytes,3,opt,name=boundObjectRef"` } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -51,7 +51,7 @@ "": "TokenRequestSpec contains client provided parameters of a token request.", "audiences": "Audiences are the intendend audiences of the token. A recipient of a token must identitfy themself with an identifier in the list of audiences of the token, and otherwise should reject the token. A token issued for multiple audiences may be used to authenticate against any of the audiences listed but implies a high degree of trust between the target audiences.", "expirationSeconds": "ExpirationSeconds is the requested duration of validity of the request. The token issuer may return a token with a different validity duration so a client needs to check the 'expiration' field in a response.", - "boundObjectRef": "BoundObjectRef is a reference to an object that the token will be bound to. The token will only be valid for as long as the bound objet exists.", + "boundObjectRef": "BoundObjectRef is a reference to an object that the token will be bound to. The token will only be valid for as long as the bound object exists. NOTE: The API server's TokenReview endpoint will validate the BoundObjectRef, but other audiences may not. Keep ExpirationSeconds small if you want prompt revocation.", } func (TokenRequestSpec) SwaggerDoc() map[string]string { @@ -79,8 +79,9 @@ } var map_TokenReviewSpec = map[string]string{ - "": "TokenReviewSpec is a description of the token authentication request.", - "token": "Token is the opaque bearer token.", + "": "TokenReviewSpec is a description of the token authentication request.", + "token": "Token is the opaque bearer token.", + "audiences": "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", } func (TokenReviewSpec) SwaggerDoc() map[string]string { @@ -91,6 +92,7 @@ "": "TokenReviewStatus is the result of the token authentication request.", "authenticated": "Authenticated indicates that the token was associated with a known user.", "user": "User is the UserInfo associated with the provided token.", + "audiences": "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", "error": "Error indicates that the token couldn't be checked", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -98,21 +98,13 @@ } if in.ExpirationSeconds != nil { in, out := &in.ExpirationSeconds, &out.ExpirationSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.BoundObjectRef != nil { in, out := &in.BoundObjectRef, &out.BoundObjectRef - if *in == nil { - *out = nil - } else { - *out = new(BoundObjectReference) - **out = **in - } + *out = new(BoundObjectReference) + **out = **in } return } @@ -149,7 +141,7 @@ *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec + in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) return } @@ -175,6 +167,11 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TokenReviewSpec) DeepCopyInto(out *TokenReviewSpec) { *out = *in + if in.Audiences != nil { + in, out := &in.Audiences, &out.Audiences + *out = make([]string, len(*in)) + copy(*out, *in) + } return } @@ -192,6 +189,11 @@ func (in *TokenReviewStatus) DeepCopyInto(out *TokenReviewStatus) { *out = *in in.User.DeepCopyInto(&out.User) + if in.Audiences != nil { + in, out := &in.Audiences, &out.Audiences + *out = make([]string, len(*in)) + copy(*out, *in) + } return } @@ -217,12 +219,15 @@ in, out := &in.Extra, &out.Extra *out = make(map[string]ExtraValue, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make(ExtraValue, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,8 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=authentication.k8s.io // +k8s:openapi-gen=true + package v1beta1 // import "k8s.io/api/authentication/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,35 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1beta1/generated.proto - - It has these top-level messages: - ExtraValue - TokenReview - TokenReviewSpec - TokenReviewStatus - UserInfo -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -55,25 +44,145 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *ExtraValue) Reset() { *m = ExtraValue{} } -func (*ExtraValue) ProtoMessage() {} -func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *TokenReview) Reset() { *m = TokenReview{} } -func (*TokenReview) ProtoMessage() {} -func (*TokenReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *TokenReviewSpec) Reset() { *m = TokenReviewSpec{} } -func (*TokenReviewSpec) ProtoMessage() {} -func (*TokenReviewSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *TokenReviewStatus) Reset() { *m = TokenReviewStatus{} } -func (*TokenReviewStatus) ProtoMessage() {} -func (*TokenReviewStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *UserInfo) Reset() { *m = UserInfo{} } -func (*UserInfo) ProtoMessage() {} -func (*UserInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { + return fileDescriptor_77c9b20d3ad27844, []int{0} +} +func (m *ExtraValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExtraValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExtraValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraValue.Merge(m, src) +} +func (m *ExtraValue) XXX_Size() int { + return m.Size() +} +func (m *ExtraValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExtraValue.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtraValue proto.InternalMessageInfo + +func (m *TokenReview) Reset() { *m = TokenReview{} } +func (*TokenReview) ProtoMessage() {} +func (*TokenReview) Descriptor() ([]byte, []int) { + return fileDescriptor_77c9b20d3ad27844, []int{1} +} +func (m *TokenReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenReview.Merge(m, src) +} +func (m *TokenReview) XXX_Size() int { + return m.Size() +} +func (m *TokenReview) XXX_DiscardUnknown() { + xxx_messageInfo_TokenReview.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenReview proto.InternalMessageInfo + +func (m *TokenReviewSpec) Reset() { *m = TokenReviewSpec{} } +func (*TokenReviewSpec) ProtoMessage() {} +func (*TokenReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_77c9b20d3ad27844, []int{2} +} +func (m *TokenReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenReviewSpec.Merge(m, src) +} +func (m *TokenReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *TokenReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_TokenReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenReviewSpec proto.InternalMessageInfo + +func (m *TokenReviewStatus) Reset() { *m = TokenReviewStatus{} } +func (*TokenReviewStatus) ProtoMessage() {} +func (*TokenReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_77c9b20d3ad27844, []int{3} +} +func (m *TokenReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TokenReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenReviewStatus.Merge(m, src) +} +func (m *TokenReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *TokenReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_TokenReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenReviewStatus proto.InternalMessageInfo + +func (m *UserInfo) Reset() { *m = UserInfo{} } +func (*UserInfo) ProtoMessage() {} +func (*UserInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_77c9b20d3ad27844, []int{4} +} +func (m *UserInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *UserInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserInfo.Merge(m, src) +} +func (m *UserInfo) XXX_Size() int { + return m.Size() +} +func (m *UserInfo) XXX_DiscardUnknown() { + xxx_messageInfo_UserInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_UserInfo proto.InternalMessageInfo func init() { proto.RegisterType((*ExtraValue)(nil), "k8s.io.api.authentication.v1beta1.ExtraValue") @@ -81,11 +190,63 @@ proto.RegisterType((*TokenReviewSpec)(nil), "k8s.io.api.authentication.v1beta1.TokenReviewSpec") proto.RegisterType((*TokenReviewStatus)(nil), "k8s.io.api.authentication.v1beta1.TokenReviewStatus") proto.RegisterType((*UserInfo)(nil), "k8s.io.api.authentication.v1beta1.UserInfo") + proto.RegisterMapType((map[string]ExtraValue)(nil), "k8s.io.api.authentication.v1beta1.UserInfo.ExtraEntry") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1beta1/generated.proto", fileDescriptor_77c9b20d3ad27844) +} + +var fileDescriptor_77c9b20d3ad27844 = []byte{ + // 663 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xb6, 0xf3, 0x53, 0x92, 0x0d, 0x81, 0xb2, 0x12, 0x52, 0x14, 0x09, 0xa7, 0x84, 0x4b, 0xa5, + 0xd2, 0x35, 0xad, 0xaa, 0x52, 0x95, 0x53, 0x0d, 0x15, 0x2a, 0x52, 0x85, 0xb4, 0xb4, 0x1c, 0x80, + 0x03, 0x1b, 0x67, 0xea, 0x98, 0xe0, 0x1f, 0xad, 0xd7, 0x81, 0xde, 0xfa, 0x08, 0x1c, 0x39, 0x22, + 0xf1, 0x24, 0xdc, 0x7a, 0xec, 0xb1, 0x07, 0x14, 0x51, 0xf3, 0x04, 0xbc, 0x01, 0xda, 0xf5, 0xb6, + 0x4e, 0x1b, 0x41, 0xdb, 0x9b, 0xf7, 0x9b, 0xf9, 0xbe, 0x99, 0xf9, 0xc6, 0x83, 0x5e, 0x0c, 0xd7, + 0x12, 0xe2, 0x47, 0xf6, 0x30, 0xed, 0x01, 0x0f, 0x41, 0x40, 0x62, 0x8f, 0x20, 0xec, 0x47, 0xdc, + 0xd6, 0x01, 0x16, 0xfb, 0x36, 0x4b, 0xc5, 0x00, 0x42, 0xe1, 0xbb, 0x4c, 0xf8, 0x51, 0x68, 0x8f, + 0x96, 0x7a, 0x20, 0xd8, 0x92, 0xed, 0x41, 0x08, 0x9c, 0x09, 0xe8, 0x93, 0x98, 0x47, 0x22, 0xc2, + 0xf7, 0x73, 0x0a, 0x61, 0xb1, 0x4f, 0xce, 0x53, 0x88, 0xa6, 0xb4, 0x17, 0x3d, 0x5f, 0x0c, 0xd2, + 0x1e, 0x71, 0xa3, 0xc0, 0xf6, 0x22, 0x2f, 0xb2, 0x15, 0xb3, 0x97, 0xee, 0xa9, 0x97, 0x7a, 0xa8, + 0xaf, 0x5c, 0xb1, 0xbd, 0x52, 0x34, 0x11, 0x30, 0x77, 0xe0, 0x87, 0xc0, 0xf7, 0xed, 0x78, 0xe8, + 0x49, 0x20, 0xb1, 0x03, 0x10, 0xcc, 0x1e, 0x4d, 0xf5, 0xd1, 0xb6, 0xff, 0xc5, 0xe2, 0x69, 0x28, + 0xfc, 0x00, 0xa6, 0x08, 0xab, 0x97, 0x11, 0x12, 0x77, 0x00, 0x01, 0xbb, 0xc8, 0xeb, 0x3e, 0x46, + 0x68, 0xf3, 0xb3, 0xe0, 0xec, 0x35, 0xfb, 0x98, 0x02, 0xee, 0xa0, 0xaa, 0x2f, 0x20, 0x48, 0x5a, + 0xe6, 0x5c, 0x79, 0xbe, 0xee, 0xd4, 0xb3, 0x71, 0xa7, 0xba, 0x25, 0x01, 0x9a, 0xe3, 0xeb, 0xb5, + 0xaf, 0xdf, 0x3a, 0xc6, 0xc1, 0xcf, 0x39, 0xa3, 0xfb, 0xbd, 0x84, 0x1a, 0x3b, 0xd1, 0x10, 0x42, + 0x0a, 0x23, 0x1f, 0x3e, 0xe1, 0xf7, 0xa8, 0x26, 0x87, 0xe9, 0x33, 0xc1, 0x5a, 0xe6, 0x9c, 0x39, + 0xdf, 0x58, 0x7e, 0x44, 0x0a, 0x33, 0xcf, 0x7a, 0x22, 0xf1, 0xd0, 0x93, 0x40, 0x42, 0x64, 0x36, + 0x19, 0x2d, 0x91, 0x97, 0xbd, 0x0f, 0xe0, 0x8a, 0x6d, 0x10, 0xcc, 0xc1, 0x87, 0xe3, 0x8e, 0x91, + 0x8d, 0x3b, 0xa8, 0xc0, 0xe8, 0x99, 0x2a, 0xde, 0x41, 0x95, 0x24, 0x06, 0xb7, 0x55, 0x52, 0xea, + 0xcb, 0xe4, 0xd2, 0x55, 0x91, 0x89, 0xfe, 0x5e, 0xc5, 0xe0, 0x3a, 0x37, 0xb5, 0x7e, 0x45, 0xbe, + 0xa8, 0x52, 0xc3, 0xef, 0xd0, 0x4c, 0x22, 0x98, 0x48, 0x93, 0x56, 0x59, 0xe9, 0xae, 0x5c, 0x53, + 0x57, 0x71, 0x9d, 0x5b, 0x5a, 0x79, 0x26, 0x7f, 0x53, 0xad, 0xd9, 0x75, 0xd1, 0xed, 0x0b, 0x4d, + 0xe0, 0x07, 0xa8, 0x2a, 0x24, 0xa4, 0x5c, 0xaa, 0x3b, 0x4d, 0xcd, 0xac, 0xe6, 0x79, 0x79, 0x0c, + 0x2f, 0xa0, 0x3a, 0x4b, 0xfb, 0x3e, 0x84, 0x2e, 0x24, 0xad, 0x92, 0x5a, 0x46, 0x33, 0x1b, 0x77, + 0xea, 0x1b, 0xa7, 0x20, 0x2d, 0xe2, 0xdd, 0x3f, 0x26, 0xba, 0x33, 0xd5, 0x12, 0x7e, 0x82, 0x9a, + 0x13, 0xed, 0x43, 0x5f, 0xd5, 0xab, 0x39, 0x77, 0x75, 0xbd, 0xe6, 0xc6, 0x64, 0x90, 0x9e, 0xcf, + 0xc5, 0xdb, 0xa8, 0x92, 0x26, 0xc0, 0xb5, 0xd7, 0x0b, 0x57, 0xf0, 0x64, 0x37, 0x01, 0xbe, 0x15, + 0xee, 0x45, 0x85, 0xc9, 0x12, 0xa1, 0x4a, 0xe6, 0xfc, 0x38, 0x95, 0xff, 0x8f, 0x23, 0x0d, 0x02, + 0xce, 0x23, 0xae, 0x16, 0x32, 0x61, 0xd0, 0xa6, 0x04, 0x69, 0x1e, 0xeb, 0xfe, 0x28, 0xa1, 0xda, + 0x69, 0x49, 0xfc, 0x10, 0xd5, 0x64, 0x99, 0x90, 0x05, 0xa0, 0x5d, 0x9d, 0xd5, 0x24, 0x95, 0x23, + 0x71, 0x7a, 0x96, 0x81, 0xef, 0xa1, 0x72, 0xea, 0xf7, 0xd5, 0x68, 0x75, 0xa7, 0xa1, 0x13, 0xcb, + 0xbb, 0x5b, 0xcf, 0xa8, 0xc4, 0x71, 0x17, 0xcd, 0x78, 0x3c, 0x4a, 0x63, 0xf9, 0x43, 0xc8, 0x46, + 0x91, 0x5c, 0xeb, 0x73, 0x85, 0x50, 0x1d, 0xc1, 0x6f, 0x51, 0x15, 0xe4, 0xd5, 0xa8, 0x59, 0x1a, + 0xcb, 0xab, 0xd7, 0xf0, 0x87, 0xa8, 0x73, 0xdb, 0x0c, 0x05, 0xdf, 0x9f, 0x18, 0x4d, 0x62, 0x34, + 0xd7, 0x6c, 0x7b, 0xfa, 0x24, 0x55, 0x0e, 0x9e, 0x45, 0xe5, 0x21, 0xec, 0xe7, 0x63, 0x51, 0xf9, + 0x89, 0x9f, 0xa2, 0xea, 0x48, 0x5e, 0xab, 0x5e, 0xce, 0xe2, 0x15, 0x8a, 0x17, 0x27, 0x4e, 0x73, + 0xee, 0x7a, 0x69, 0xcd, 0x74, 0x16, 0x0f, 0x4f, 0x2c, 0xe3, 0xe8, 0xc4, 0x32, 0x8e, 0x4f, 0x2c, + 0xe3, 0x20, 0xb3, 0xcc, 0xc3, 0xcc, 0x32, 0x8f, 0x32, 0xcb, 0x3c, 0xce, 0x2c, 0xf3, 0x57, 0x66, + 0x99, 0x5f, 0x7e, 0x5b, 0xc6, 0x9b, 0x1b, 0x5a, 0xe4, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x66, + 0xbb, 0x89, 0x53, 0x68, 0x05, 0x00, 0x00, +} + func (m ExtraValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -93,32 +254,31 @@ } func (m ExtraValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m ExtraValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m) > 0 { - for _, s := range m { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } func (m *TokenReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -126,41 +286,52 @@ } func (m *TokenReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *TokenReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -168,21 +339,36 @@ } func (m *TokenReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + if len(m.Audiences) > 0 { + for iNdEx := len(m.Audiences) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Audiences[iNdEx]) + copy(dAtA[i:], m.Audiences[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audiences[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Token) + copy(dAtA[i:], m.Token) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Token))) - i += copy(dAtA[i:], m.Token) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *TokenReviewStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -190,37 +376,54 @@ } func (m *TokenReviewStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ + if len(m.Audiences) > 0 { + for iNdEx := len(m.Audiences) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Audiences[iNdEx]) + copy(dAtA[i:], m.Audiences[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audiences[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i -= len(m.Error) + copy(dAtA[i:], m.Error) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) + i-- + dAtA[i] = 0x1a + { + size, err := m.User.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i-- if m.Authenticated { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.User.Size())) - n4, err := m.User.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *UserInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -228,95 +431,81 @@ } func (m *UserInfo) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) - i += copy(dAtA[i:], m.Username) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - if len(m.Groups) > 0 { - for _, s := range m.Groups { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } if len(m.Extra) > 0 { keysForExtra := make([]string, 0, len(m.Extra)) for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) - for _, k := range keysForExtra { - dAtA[i] = 0x22 - i++ - v := m.Extra[string(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n5, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x1a } } - return i, nil + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x12 + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m ExtraValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m) > 0 { @@ -329,6 +518,9 @@ } func (m *TokenReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -341,14 +533,26 @@ } func (m *TokenReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Token) n += 1 + l + sovGenerated(uint64(l)) + if len(m.Audiences) > 0 { + for _, s := range m.Audiences { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } func (m *TokenReviewStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -356,10 +560,19 @@ n += 1 + l + sovGenerated(uint64(l)) l = len(m.Error) n += 1 + l + sovGenerated(uint64(l)) + if len(m.Audiences) > 0 { + for _, s := range m.Audiences { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } func (m *UserInfo) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Username) @@ -385,14 +598,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -402,7 +608,7 @@ return "nil" } s := strings.Join([]string{`&TokenReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "TokenReviewSpec", "TokenReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "TokenReviewStatus", "TokenReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -415,6 +621,7 @@ } s := strings.Join([]string{`&TokenReviewSpec{`, `Token:` + fmt.Sprintf("%v", this.Token) + `,`, + `Audiences:` + fmt.Sprintf("%v", this.Audiences) + `,`, `}`, }, "") return s @@ -427,6 +634,7 @@ `Authenticated:` + fmt.Sprintf("%v", this.Authenticated) + `,`, `User:` + strings.Replace(strings.Replace(this.User.String(), "UserInfo", "UserInfo", 1), `&`, ``, 1) + `,`, `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `Audiences:` + fmt.Sprintf("%v", this.Audiences) + `,`, `}`, }, "") return s @@ -477,7 +685,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -505,7 +713,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -515,6 +723,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -529,6 +740,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -556,7 +770,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -584,7 +798,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -593,6 +807,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -614,7 +831,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -623,6 +840,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -644,7 +864,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -653,6 +873,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -669,6 +892,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -696,7 +922,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -724,7 +950,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -734,11 +960,46 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Token = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Audiences", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Audiences = append(m.Audiences, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -748,6 +1009,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -775,7 +1039,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -803,7 +1067,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -823,7 +1087,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -832,6 +1096,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -853,7 +1120,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -863,11 +1130,46 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Audiences", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Audiences = append(m.Audiences, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -877,6 +1179,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -904,7 +1209,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -932,7 +1237,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -942,6 +1247,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -961,7 +1269,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -971,6 +1279,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -990,7 +1301,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1000,6 +1311,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1019,7 +1333,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1028,54 +1342,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Extra == nil { m.Extra = make(map[string]ExtraValue) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := &ExtraValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1085,46 +1365,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ExtraValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &ExtraValue{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Extra[mapkey] = *mapvalue - } else { - var mapvalue ExtraValue - m.Extra[mapkey] = mapvalue } + m.Extra[mapkey] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -1135,6 +1457,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1201,10 +1526,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1233,6 +1561,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1251,51 +1582,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authentication/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 635 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xcf, 0x4f, 0xd4, 0x40, - 0x14, 0x6e, 0xf7, 0x07, 0xee, 0xce, 0x8a, 0xe2, 0x24, 0x26, 0x9b, 0x4d, 0xec, 0xae, 0xeb, 0x85, - 0x44, 0x99, 0x0a, 0x21, 0x48, 0xf0, 0x64, 0x95, 0x18, 0x4c, 0x88, 0xc9, 0x08, 0x1e, 0xd4, 0x83, - 0xb3, 0xdd, 0x47, 0xb7, 0xae, 0xed, 0x34, 0xd3, 0x69, 0x95, 0x1b, 0x7f, 0x82, 0x47, 0x8f, 0x26, - 0xfe, 0x25, 0x26, 0x1e, 0x38, 0x72, 0xe4, 0x60, 0x88, 0xd4, 0x7f, 0xc4, 0xcc, 0x74, 0x64, 0x17, - 0x88, 0x01, 0x6e, 0xf3, 0xbe, 0xf7, 0xbe, 0x6f, 0xde, 0xf7, 0x66, 0x1e, 0x7a, 0x31, 0x5e, 0x4d, - 0x49, 0xc8, 0xdd, 0x71, 0x36, 0x00, 0x11, 0x83, 0x84, 0xd4, 0xcd, 0x21, 0x1e, 0x72, 0xe1, 0x9a, - 0x04, 0x4b, 0x42, 0x97, 0x65, 0x72, 0x04, 0xb1, 0x0c, 0x7d, 0x26, 0x43, 0x1e, 0xbb, 0xf9, 0xe2, - 0x00, 0x24, 0x5b, 0x74, 0x03, 0x88, 0x41, 0x30, 0x09, 0x43, 0x92, 0x08, 0x2e, 0x39, 0xbe, 0x5b, - 0x52, 0x08, 0x4b, 0x42, 0x72, 0x9a, 0x42, 0x0c, 0xa5, 0xb3, 0x10, 0x84, 0x72, 0x94, 0x0d, 0x88, - 0xcf, 0x23, 0x37, 0xe0, 0x01, 0x77, 0x35, 0x73, 0x90, 0xed, 0xe8, 0x48, 0x07, 0xfa, 0x54, 0x2a, - 0x76, 0x96, 0x27, 0x4d, 0x44, 0xcc, 0x1f, 0x85, 0x31, 0x88, 0x5d, 0x37, 0x19, 0x07, 0x0a, 0x48, - 0xdd, 0x08, 0x24, 0x73, 0xf3, 0x73, 0x7d, 0x74, 0xdc, 0xff, 0xb1, 0x44, 0x16, 0xcb, 0x30, 0x82, - 0x73, 0x84, 0x95, 0x8b, 0x08, 0xa9, 0x3f, 0x82, 0x88, 0x9d, 0xe5, 0xf5, 0x1f, 0x21, 0xb4, 0xfe, - 0x59, 0x0a, 0xf6, 0x9a, 0x7d, 0xcc, 0x00, 0x77, 0x51, 0x3d, 0x94, 0x10, 0xa5, 0x6d, 0xbb, 0x57, - 0x9d, 0x6f, 0x7a, 0xcd, 0xe2, 0xa8, 0x5b, 0xdf, 0x50, 0x00, 0x2d, 0xf1, 0xb5, 0xc6, 0xd7, 0x6f, - 0x5d, 0x6b, 0xef, 0x57, 0xcf, 0xea, 0x7f, 0xaf, 0xa0, 0xd6, 0x16, 0x1f, 0x43, 0x4c, 0x21, 0x0f, - 0xe1, 0x13, 0x7e, 0x8f, 0x1a, 0xca, 0xcc, 0x90, 0x49, 0xd6, 0xb6, 0x7b, 0xf6, 0x7c, 0x6b, 0xe9, - 0x21, 0x99, 0x0c, 0xf3, 0xa4, 0x27, 0x92, 0x8c, 0x03, 0x05, 0xa4, 0x44, 0x55, 0x93, 0x7c, 0x91, - 0xbc, 0x1c, 0x7c, 0x00, 0x5f, 0x6e, 0x82, 0x64, 0x1e, 0xde, 0x3f, 0xea, 0x5a, 0xc5, 0x51, 0x17, - 0x4d, 0x30, 0x7a, 0xa2, 0x8a, 0xb7, 0x50, 0x2d, 0x4d, 0xc0, 0x6f, 0x57, 0xb4, 0xfa, 0x12, 0xb9, - 0xf0, 0xa9, 0xc8, 0x54, 0x7f, 0xaf, 0x12, 0xf0, 0xbd, 0xeb, 0x46, 0xbf, 0xa6, 0x22, 0xaa, 0xd5, - 0xf0, 0x3b, 0x34, 0x93, 0x4a, 0x26, 0xb3, 0xb4, 0x5d, 0xd5, 0xba, 0xcb, 0x57, 0xd4, 0xd5, 0x5c, - 0xef, 0x86, 0x51, 0x9e, 0x29, 0x63, 0x6a, 0x34, 0xfb, 0x2b, 0xe8, 0xe6, 0x99, 0x26, 0xf0, 0x3d, - 0x54, 0x97, 0x0a, 0xd2, 0x53, 0x6a, 0x7a, 0xb3, 0x86, 0x59, 0x2f, 0xeb, 0xca, 0x5c, 0xff, 0xa7, - 0x8d, 0x6e, 0x9d, 0xbb, 0x05, 0x3f, 0x46, 0xb3, 0x53, 0x1d, 0xc1, 0x50, 0x4b, 0x34, 0xbc, 0xdb, - 0x46, 0x62, 0xf6, 0xc9, 0x74, 0x92, 0x9e, 0xae, 0xc5, 0x9b, 0xa8, 0x96, 0xa5, 0x20, 0xcc, 0xf8, - 0xee, 0x5f, 0xc2, 0xe6, 0x76, 0x0a, 0x62, 0x23, 0xde, 0xe1, 0x93, 0xb9, 0x29, 0x84, 0x6a, 0x19, - 0x65, 0x03, 0x84, 0xe0, 0x42, 0x8f, 0x6d, 0xca, 0xc6, 0xba, 0x02, 0x69, 0x99, 0xeb, 0xff, 0xa8, - 0xa0, 0xc6, 0x3f, 0x15, 0xfc, 0x00, 0x35, 0x14, 0x33, 0x66, 0x11, 0x18, 0xef, 0x73, 0x86, 0xa4, - 0x6b, 0x14, 0x4e, 0x4f, 0x2a, 0xf0, 0x1d, 0x54, 0xcd, 0xc2, 0xa1, 0xee, 0xb6, 0xe9, 0xb5, 0x4c, - 0x61, 0x75, 0x7b, 0xe3, 0x19, 0x55, 0x38, 0xee, 0xa3, 0x99, 0x40, 0xf0, 0x2c, 0x51, 0xcf, 0xa6, - 0xbe, 0x2a, 0x52, 0xc3, 0x7f, 0xae, 0x11, 0x6a, 0x32, 0xf8, 0x2d, 0xaa, 0x83, 0xfa, 0xdb, 0xed, - 0x5a, 0xaf, 0x3a, 0xdf, 0x5a, 0x5a, 0xb9, 0x82, 0x65, 0xa2, 0x97, 0x62, 0x3d, 0x96, 0x62, 0x77, - 0xca, 0x9a, 0xc2, 0x68, 0xa9, 0xd9, 0x09, 0xcc, 0xe2, 0xe8, 0x1a, 0x3c, 0x87, 0xaa, 0x63, 0xd8, - 0x2d, 0x6d, 0x51, 0x75, 0xc4, 0x4f, 0x51, 0x3d, 0x57, 0x3b, 0x65, 0xe6, 0xbd, 0x70, 0x89, 0xcb, - 0x27, 0x8b, 0x48, 0x4b, 0xee, 0x5a, 0x65, 0xd5, 0xf6, 0x16, 0xf6, 0x8f, 0x1d, 0xeb, 0xe0, 0xd8, - 0xb1, 0x0e, 0x8f, 0x1d, 0x6b, 0xaf, 0x70, 0xec, 0xfd, 0xc2, 0xb1, 0x0f, 0x0a, 0xc7, 0x3e, 0x2c, - 0x1c, 0xfb, 0x77, 0xe1, 0xd8, 0x5f, 0xfe, 0x38, 0xd6, 0x9b, 0x6b, 0x46, 0xe4, 0x6f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x39, 0x00, 0xe7, 0xfa, 0x0e, 0x05, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -57,6 +57,14 @@ // Token is the opaque bearer token. // +optional optional string token = 1; + + // Audiences is a list of the identifiers that the resource server presented + // with the token identifies as. Audience-aware token authenticators will + // verify that the token was intended for at least one of the audiences in + // this list. If no audiences are provided, the audience will default to the + // audience of the Kubernetes apiserver. + // +optional + repeated string audiences = 2; } // TokenReviewStatus is the result of the token authentication request. @@ -69,6 +77,18 @@ // +optional optional UserInfo user = 2; + // Audiences are audience identifiers chosen by the authenticator that are + // compatible with both the TokenReview and token. An identifier is any + // identifier in the intersection of the TokenReviewSpec audiences and the + // token's audiences. A client of the TokenReview API that sets the + // spec.audiences field should validate that a compatible audience identifier + // is returned in the status.audiences field to ensure that the TokenReview + // server is audience aware. If a TokenReview returns an empty + // status.audience field where status.authenticated is "true", the token is + // valid against the audience of the Kubernetes API server. + // +optional + repeated string audiences = 4; + // Error indicates that the token couldn't be checked // +optional optional string error = 3; diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,6 +48,13 @@ // Token is the opaque bearer token. // +optional Token string `json:"token,omitempty" protobuf:"bytes,1,opt,name=token"` + // Audiences is a list of the identifiers that the resource server presented + // with the token identifies as. Audience-aware token authenticators will + // verify that the token was intended for at least one of the audiences in + // this list. If no audiences are provided, the audience will default to the + // audience of the Kubernetes apiserver. + // +optional + Audiences []string `json:"audiences,omitempty" protobuf:"bytes,2,rep,name=audiences"` } // TokenReviewStatus is the result of the token authentication request. @@ -58,6 +65,17 @@ // User is the UserInfo associated with the provided token. // +optional User UserInfo `json:"user,omitempty" protobuf:"bytes,2,opt,name=user"` + // Audiences are audience identifiers chosen by the authenticator that are + // compatible with both the TokenReview and token. An identifier is any + // identifier in the intersection of the TokenReviewSpec audiences and the + // token's audiences. A client of the TokenReview API that sets the + // spec.audiences field should validate that a compatible audience identifier + // is returned in the status.audiences field to ensure that the TokenReview + // server is audience aware. If a TokenReview returns an empty + // status.audience field where status.authenticated is "true", the token is + // valid against the audience of the Kubernetes API server. + // +optional + Audiences []string `json:"audiences,omitempty" protobuf:"bytes,4,rep,name=audiences"` // Error indicates that the token couldn't be checked // +optional Error string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -38,8 +38,9 @@ } var map_TokenReviewSpec = map[string]string{ - "": "TokenReviewSpec is a description of the token authentication request.", - "token": "Token is the opaque bearer token.", + "": "TokenReviewSpec is a description of the token authentication request.", + "token": "Token is the opaque bearer token.", + "audiences": "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", } func (TokenReviewSpec) SwaggerDoc() map[string]string { @@ -50,6 +51,7 @@ "": "TokenReviewStatus is the result of the token authentication request.", "authenticated": "Authenticated indicates that the token was associated with a known user.", "user": "User is the UserInfo associated with the provided token.", + "audiences": "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", "error": "Error indicates that the token couldn't be checked", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authentication/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -49,7 +49,7 @@ *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec + in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) return } @@ -75,6 +75,11 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TokenReviewSpec) DeepCopyInto(out *TokenReviewSpec) { *out = *in + if in.Audiences != nil { + in, out := &in.Audiences, &out.Audiences + *out = make([]string, len(*in)) + copy(*out, *in) + } return } @@ -92,6 +97,11 @@ func (in *TokenReviewStatus) DeepCopyInto(out *TokenReviewStatus) { *out = *in in.User.DeepCopyInto(&out.User) + if in.Audiences != nil { + in, out := &in.Audiences, &out.Audiences + *out = make([]string, len(*in)) + copy(*out, *in) + } return } @@ -117,12 +127,15 @@ in, out := &in.Extra, &out.Extra *out = make(map[string]ExtraValue, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make(ExtraValue, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=authorization.k8s.io + package v1 // import "k8s.io/api/authorization/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,44 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1/generated.proto - - It has these top-level messages: - ExtraValue - LocalSubjectAccessReview - NonResourceAttributes - NonResourceRule - ResourceAttributes - ResourceRule - SelfSubjectAccessReview - SelfSubjectAccessReviewSpec - SelfSubjectRulesReview - SelfSubjectRulesReviewSpec - SubjectAccessReview - SubjectAccessReviewSpec - SubjectAccessReviewStatus - SubjectRulesReviewStatus -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -64,73 +44,397 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *ExtraValue) Reset() { *m = ExtraValue{} } -func (*ExtraValue) ProtoMessage() {} -func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{0} +} +func (m *ExtraValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExtraValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExtraValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraValue.Merge(m, src) +} +func (m *ExtraValue) XXX_Size() int { + return m.Size() +} +func (m *ExtraValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExtraValue.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtraValue proto.InternalMessageInfo func (m *LocalSubjectAccessReview) Reset() { *m = LocalSubjectAccessReview{} } func (*LocalSubjectAccessReview) ProtoMessage() {} func (*LocalSubjectAccessReview) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} + return fileDescriptor_e50da13573e369bd, []int{1} +} +func (m *LocalSubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LocalSubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LocalSubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalSubjectAccessReview.Merge(m, src) +} +func (m *LocalSubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *LocalSubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_LocalSubjectAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_LocalSubjectAccessReview proto.InternalMessageInfo + +func (m *NonResourceAttributes) Reset() { *m = NonResourceAttributes{} } +func (*NonResourceAttributes) ProtoMessage() {} +func (*NonResourceAttributes) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{2} +} +func (m *NonResourceAttributes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NonResourceAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NonResourceAttributes) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonResourceAttributes.Merge(m, src) +} +func (m *NonResourceAttributes) XXX_Size() int { + return m.Size() +} +func (m *NonResourceAttributes) XXX_DiscardUnknown() { + xxx_messageInfo_NonResourceAttributes.DiscardUnknown(m) } -func (m *NonResourceAttributes) Reset() { *m = NonResourceAttributes{} } -func (*NonResourceAttributes) ProtoMessage() {} -func (*NonResourceAttributes) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +var xxx_messageInfo_NonResourceAttributes proto.InternalMessageInfo -func (m *NonResourceRule) Reset() { *m = NonResourceRule{} } -func (*NonResourceRule) ProtoMessage() {} -func (*NonResourceRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (m *NonResourceRule) Reset() { *m = NonResourceRule{} } +func (*NonResourceRule) ProtoMessage() {} +func (*NonResourceRule) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{3} +} +func (m *NonResourceRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NonResourceRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NonResourceRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonResourceRule.Merge(m, src) +} +func (m *NonResourceRule) XXX_Size() int { + return m.Size() +} +func (m *NonResourceRule) XXX_DiscardUnknown() { + xxx_messageInfo_NonResourceRule.DiscardUnknown(m) +} -func (m *ResourceAttributes) Reset() { *m = ResourceAttributes{} } -func (*ResourceAttributes) ProtoMessage() {} -func (*ResourceAttributes) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +var xxx_messageInfo_NonResourceRule proto.InternalMessageInfo -func (m *ResourceRule) Reset() { *m = ResourceRule{} } -func (*ResourceRule) ProtoMessage() {} -func (*ResourceRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (m *ResourceAttributes) Reset() { *m = ResourceAttributes{} } +func (*ResourceAttributes) ProtoMessage() {} +func (*ResourceAttributes) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{4} +} +func (m *ResourceAttributes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceAttributes) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceAttributes.Merge(m, src) +} +func (m *ResourceAttributes) XXX_Size() int { + return m.Size() +} +func (m *ResourceAttributes) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceAttributes.DiscardUnknown(m) +} -func (m *SelfSubjectAccessReview) Reset() { *m = SelfSubjectAccessReview{} } -func (*SelfSubjectAccessReview) ProtoMessage() {} -func (*SelfSubjectAccessReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +var xxx_messageInfo_ResourceAttributes proto.InternalMessageInfo + +func (m *ResourceRule) Reset() { *m = ResourceRule{} } +func (*ResourceRule) ProtoMessage() {} +func (*ResourceRule) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{5} +} +func (m *ResourceRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceRule.Merge(m, src) +} +func (m *ResourceRule) XXX_Size() int { + return m.Size() +} +func (m *ResourceRule) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceRule.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceRule proto.InternalMessageInfo + +func (m *SelfSubjectAccessReview) Reset() { *m = SelfSubjectAccessReview{} } +func (*SelfSubjectAccessReview) ProtoMessage() {} +func (*SelfSubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{6} +} +func (m *SelfSubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectAccessReview.Merge(m, src) +} +func (m *SelfSubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectAccessReview proto.InternalMessageInfo func (m *SelfSubjectAccessReviewSpec) Reset() { *m = SelfSubjectAccessReviewSpec{} } func (*SelfSubjectAccessReviewSpec) ProtoMessage() {} func (*SelfSubjectAccessReviewSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{7} + return fileDescriptor_e50da13573e369bd, []int{7} +} +func (m *SelfSubjectAccessReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectAccessReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectAccessReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectAccessReviewSpec.Merge(m, src) +} +func (m *SelfSubjectAccessReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectAccessReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectAccessReviewSpec.DiscardUnknown(m) } -func (m *SelfSubjectRulesReview) Reset() { *m = SelfSubjectRulesReview{} } -func (*SelfSubjectRulesReview) ProtoMessage() {} -func (*SelfSubjectRulesReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +var xxx_messageInfo_SelfSubjectAccessReviewSpec proto.InternalMessageInfo + +func (m *SelfSubjectRulesReview) Reset() { *m = SelfSubjectRulesReview{} } +func (*SelfSubjectRulesReview) ProtoMessage() {} +func (*SelfSubjectRulesReview) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{8} +} +func (m *SelfSubjectRulesReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectRulesReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectRulesReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectRulesReview.Merge(m, src) +} +func (m *SelfSubjectRulesReview) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectRulesReview) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectRulesReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectRulesReview proto.InternalMessageInfo func (m *SelfSubjectRulesReviewSpec) Reset() { *m = SelfSubjectRulesReviewSpec{} } func (*SelfSubjectRulesReviewSpec) ProtoMessage() {} func (*SelfSubjectRulesReviewSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{9} + return fileDescriptor_e50da13573e369bd, []int{9} +} +func (m *SelfSubjectRulesReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectRulesReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectRulesReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectRulesReviewSpec.Merge(m, src) +} +func (m *SelfSubjectRulesReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectRulesReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectRulesReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectRulesReviewSpec proto.InternalMessageInfo + +func (m *SubjectAccessReview) Reset() { *m = SubjectAccessReview{} } +func (*SubjectAccessReview) ProtoMessage() {} +func (*SubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_e50da13573e369bd, []int{10} +} +func (m *SubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReview.Merge(m, src) +} +func (m *SubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReview.DiscardUnknown(m) } -func (m *SubjectAccessReview) Reset() { *m = SubjectAccessReview{} } -func (*SubjectAccessReview) ProtoMessage() {} -func (*SubjectAccessReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +var xxx_messageInfo_SubjectAccessReview proto.InternalMessageInfo func (m *SubjectAccessReviewSpec) Reset() { *m = SubjectAccessReviewSpec{} } func (*SubjectAccessReviewSpec) ProtoMessage() {} func (*SubjectAccessReviewSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{11} + return fileDescriptor_e50da13573e369bd, []int{11} +} +func (m *SubjectAccessReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReviewSpec.Merge(m, src) +} +func (m *SubjectAccessReviewSpec) XXX_Size() int { + return m.Size() } +func (m *SubjectAccessReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectAccessReviewSpec proto.InternalMessageInfo func (m *SubjectAccessReviewStatus) Reset() { *m = SubjectAccessReviewStatus{} } func (*SubjectAccessReviewStatus) ProtoMessage() {} func (*SubjectAccessReviewStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{12} + return fileDescriptor_e50da13573e369bd, []int{12} +} +func (m *SubjectAccessReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReviewStatus.Merge(m, src) +} +func (m *SubjectAccessReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReviewStatus.DiscardUnknown(m) } +var xxx_messageInfo_SubjectAccessReviewStatus proto.InternalMessageInfo + func (m *SubjectRulesReviewStatus) Reset() { *m = SubjectRulesReviewStatus{} } func (*SubjectRulesReviewStatus) ProtoMessage() {} func (*SubjectRulesReviewStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{13} + return fileDescriptor_e50da13573e369bd, []int{13} +} +func (m *SubjectRulesReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectRulesReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectRulesReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectRulesReviewStatus.Merge(m, src) } +func (m *SubjectRulesReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *SubjectRulesReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectRulesReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectRulesReviewStatus proto.InternalMessageInfo func init() { proto.RegisterType((*ExtraValue)(nil), "k8s.io.api.authorization.v1.ExtraValue") @@ -145,13 +449,95 @@ proto.RegisterType((*SelfSubjectRulesReviewSpec)(nil), "k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec") proto.RegisterType((*SubjectAccessReview)(nil), "k8s.io.api.authorization.v1.SubjectAccessReview") proto.RegisterType((*SubjectAccessReviewSpec)(nil), "k8s.io.api.authorization.v1.SubjectAccessReviewSpec") + proto.RegisterMapType((map[string]ExtraValue)(nil), "k8s.io.api.authorization.v1.SubjectAccessReviewSpec.ExtraEntry") proto.RegisterType((*SubjectAccessReviewStatus)(nil), "k8s.io.api.authorization.v1.SubjectAccessReviewStatus") proto.RegisterType((*SubjectRulesReviewStatus)(nil), "k8s.io.api.authorization.v1.SubjectRulesReviewStatus") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1/generated.proto", fileDescriptor_e50da13573e369bd) +} + +var fileDescriptor_e50da13573e369bd = []byte{ + // 1140 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xf7, 0xae, 0xed, 0xc4, 0x1e, 0x37, 0xdf, 0xa4, 0x13, 0xa5, 0xd9, 0xa6, 0xfa, 0xda, 0xd1, + 0x22, 0x41, 0x2a, 0xca, 0x2e, 0xb1, 0xda, 0x26, 0xaa, 0x54, 0xa1, 0x58, 0x89, 0x50, 0xa4, 0xb6, + 0x54, 0x13, 0x25, 0x12, 0x45, 0x20, 0xc6, 0xeb, 0x89, 0xbd, 0xc4, 0xde, 0x5d, 0x66, 0x66, 0x1d, + 0xc2, 0xa9, 0x12, 0xff, 0x00, 0x47, 0x0e, 0x1c, 0xf8, 0x0f, 0xb8, 0x20, 0x71, 0xe3, 0xc0, 0x01, + 0xe5, 0xd8, 0x63, 0x91, 0x90, 0x45, 0x96, 0x33, 0xff, 0x03, 0x9a, 0xd9, 0xb1, 0x77, 0x9d, 0xac, + 0xdd, 0x84, 0x03, 0xbd, 0xf4, 0xb6, 0xfb, 0x3e, 0x9f, 0xf7, 0xe6, 0xcd, 0xfb, 0x35, 0x0f, 0x6c, + 0x1f, 0x6d, 0x32, 0xcb, 0xf5, 0xed, 0xa3, 0xb0, 0x49, 0xa8, 0x47, 0x38, 0x61, 0x76, 0x9f, 0x78, + 0x2d, 0x9f, 0xda, 0x0a, 0xc0, 0x81, 0x6b, 0xe3, 0x90, 0x77, 0x7c, 0xea, 0x7e, 0x8d, 0xb9, 0xeb, + 0x7b, 0x76, 0x7f, 0xdd, 0x6e, 0x13, 0x8f, 0x50, 0xcc, 0x49, 0xcb, 0x0a, 0xa8, 0xcf, 0x7d, 0x78, + 0x2b, 0x26, 0x5b, 0x38, 0x70, 0xad, 0x31, 0xb2, 0xd5, 0x5f, 0x5f, 0x79, 0xaf, 0xed, 0xf2, 0x4e, + 0xd8, 0xb4, 0x1c, 0xbf, 0x67, 0xb7, 0xfd, 0xb6, 0x6f, 0x4b, 0x9d, 0x66, 0x78, 0x28, 0xff, 0xe4, + 0x8f, 0xfc, 0x8a, 0x6d, 0xad, 0xdc, 0x4d, 0x0e, 0xee, 0x61, 0xa7, 0xe3, 0x7a, 0x84, 0x9e, 0xd8, + 0xc1, 0x51, 0x5b, 0x08, 0x98, 0xdd, 0x23, 0x1c, 0x67, 0x78, 0xb0, 0x62, 0x4f, 0xd2, 0xa2, 0xa1, + 0xc7, 0xdd, 0x1e, 0xb9, 0xa0, 0x70, 0xff, 0x55, 0x0a, 0xcc, 0xe9, 0x90, 0x1e, 0x3e, 0xaf, 0x67, + 0x6e, 0x00, 0xb0, 0xf3, 0x15, 0xa7, 0xf8, 0x00, 0x77, 0x43, 0x02, 0x6b, 0xa0, 0xe8, 0x72, 0xd2, + 0x63, 0x86, 0xb6, 0x9a, 0x5f, 0x2b, 0x37, 0xca, 0xd1, 0xa0, 0x56, 0xdc, 0x15, 0x02, 0x14, 0xcb, + 0x1f, 0x94, 0xbe, 0xfb, 0xa1, 0x96, 0x7b, 0xfe, 0xc7, 0x6a, 0xce, 0xfc, 0x49, 0x07, 0xc6, 0x23, + 0xdf, 0xc1, 0xdd, 0xbd, 0xb0, 0xf9, 0x05, 0x71, 0xf8, 0x96, 0xe3, 0x10, 0xc6, 0x10, 0xe9, 0xbb, + 0xe4, 0x18, 0x7e, 0x0e, 0x4a, 0xe2, 0x66, 0x2d, 0xcc, 0xb1, 0xa1, 0xad, 0x6a, 0x6b, 0x95, 0xfa, + 0xfb, 0x56, 0x12, 0xd3, 0x91, 0x83, 0x56, 0x70, 0xd4, 0x16, 0x02, 0x66, 0x09, 0xb6, 0xd5, 0x5f, + 0xb7, 0x3e, 0x92, 0xb6, 0x1e, 0x13, 0x8e, 0x1b, 0xf0, 0x74, 0x50, 0xcb, 0x45, 0x83, 0x1a, 0x48, + 0x64, 0x68, 0x64, 0x15, 0x1e, 0x80, 0x02, 0x0b, 0x88, 0x63, 0xe8, 0xd2, 0xfa, 0x5d, 0x6b, 0x4a, + 0xc6, 0xac, 0x0c, 0x0f, 0xf7, 0x02, 0xe2, 0x34, 0xae, 0xa9, 0x13, 0x0a, 0xe2, 0x0f, 0x49, 0x7b, + 0xf0, 0x33, 0x30, 0xc3, 0x38, 0xe6, 0x21, 0x33, 0xf2, 0xd2, 0xf2, 0xfd, 0x2b, 0x5b, 0x96, 0xda, + 0x8d, 0xff, 0x29, 0xdb, 0x33, 0xf1, 0x3f, 0x52, 0x56, 0xcd, 0x4f, 0xc0, 0xd2, 0x13, 0xdf, 0x43, + 0x84, 0xf9, 0x21, 0x75, 0xc8, 0x16, 0xe7, 0xd4, 0x6d, 0x86, 0x9c, 0x30, 0xb8, 0x0a, 0x0a, 0x01, + 0xe6, 0x1d, 0x19, 0xae, 0x72, 0xe2, 0xda, 0x53, 0xcc, 0x3b, 0x48, 0x22, 0x82, 0xd1, 0x27, 0xb4, + 0x29, 0xaf, 0x9c, 0x62, 0x1c, 0x10, 0xda, 0x44, 0x12, 0x31, 0xbf, 0x04, 0xf3, 0x29, 0xe3, 0x28, + 0xec, 0xca, 0x8c, 0x0a, 0x68, 0x2c, 0xa3, 0x42, 0x83, 0xa1, 0x58, 0x0e, 0x1f, 0x82, 0x79, 0x2f, + 0xd1, 0xd9, 0x47, 0x8f, 0x98, 0xa1, 0x4b, 0xea, 0x62, 0x34, 0xa8, 0xa5, 0xcd, 0x09, 0x08, 0x9d, + 0xe7, 0x9a, 0xbf, 0xe8, 0x00, 0x66, 0xdc, 0xc6, 0x06, 0x65, 0x0f, 0xf7, 0x08, 0x0b, 0xb0, 0x43, + 0xd4, 0x95, 0xae, 0x2b, 0x87, 0xcb, 0x4f, 0x86, 0x00, 0x4a, 0x38, 0xaf, 0xbe, 0x1c, 0x7c, 0x0b, + 0x14, 0xdb, 0xd4, 0x0f, 0x03, 0x99, 0x98, 0x72, 0x63, 0x4e, 0x51, 0x8a, 0x1f, 0x0a, 0x21, 0x8a, + 0x31, 0x78, 0x1b, 0xcc, 0xf6, 0x09, 0x65, 0xae, 0xef, 0x19, 0x05, 0x49, 0x9b, 0x57, 0xb4, 0xd9, + 0x83, 0x58, 0x8c, 0x86, 0x38, 0xbc, 0x03, 0x4a, 0x54, 0x39, 0x6e, 0x14, 0x25, 0x77, 0x41, 0x71, + 0x4b, 0xa3, 0x08, 0x8e, 0x18, 0xf0, 0x1e, 0xa8, 0xb0, 0xb0, 0x39, 0x52, 0x98, 0x91, 0x0a, 0x8b, + 0x4a, 0xa1, 0xb2, 0x97, 0x40, 0x28, 0xcd, 0x13, 0xd7, 0x12, 0x77, 0x34, 0x66, 0xc7, 0xaf, 0x25, + 0x42, 0x80, 0x24, 0x62, 0xfe, 0xaa, 0x81, 0x6b, 0x57, 0xcb, 0xd8, 0xbb, 0xa0, 0x8c, 0x03, 0x57, + 0x5e, 0x7b, 0x98, 0xab, 0x39, 0x11, 0xd7, 0xad, 0xa7, 0xbb, 0xb1, 0x10, 0x25, 0xb8, 0x20, 0x0f, + 0x9d, 0x11, 0x25, 0x3d, 0x22, 0x0f, 0x8f, 0x64, 0x28, 0xc1, 0xe1, 0x06, 0x98, 0x1b, 0xfe, 0xc8, + 0x24, 0x19, 0x05, 0xa9, 0x70, 0x3d, 0x1a, 0xd4, 0xe6, 0x50, 0x1a, 0x40, 0xe3, 0x3c, 0xf3, 0x67, + 0x1d, 0x2c, 0xef, 0x91, 0xee, 0xe1, 0xeb, 0x99, 0x05, 0xcf, 0xc6, 0x66, 0xc1, 0xe6, 0xf4, 0x8e, + 0xcd, 0xf6, 0xf2, 0xb5, 0xcd, 0x83, 0xef, 0x75, 0x70, 0x6b, 0x8a, 0x4f, 0xf0, 0x18, 0x40, 0x7a, + 0xa1, 0xbd, 0x54, 0x1c, 0xed, 0xa9, 0xbe, 0x5c, 0xec, 0xca, 0xc6, 0x8d, 0x68, 0x50, 0xcb, 0xe8, + 0x56, 0x94, 0x71, 0x04, 0xfc, 0x46, 0x03, 0x4b, 0x5e, 0xd6, 0xa4, 0x52, 0x61, 0xae, 0x4f, 0x3d, + 0x3c, 0x73, 0xc6, 0x35, 0x6e, 0x46, 0x83, 0x5a, 0xf6, 0xf8, 0x43, 0xd9, 0x67, 0x89, 0x57, 0xe6, + 0x46, 0x2a, 0x3c, 0xa2, 0x41, 0xfe, 0xbb, 0xba, 0xfa, 0x78, 0xac, 0xae, 0x36, 0x2e, 0x5b, 0x57, + 0x29, 0x27, 0x27, 0x96, 0xd5, 0xa7, 0xe7, 0xca, 0xea, 0xde, 0x65, 0xca, 0x2a, 0x6d, 0x78, 0x7a, + 0x55, 0x3d, 0x06, 0x2b, 0x93, 0x1d, 0xba, 0xf2, 0x70, 0x36, 0x7f, 0xd4, 0xc1, 0xe2, 0x9b, 0x67, + 0xfe, 0x2a, 0x6d, 0xfd, 0x5b, 0x01, 0x2c, 0xbf, 0x69, 0xe9, 0x49, 0x8b, 0x4e, 0xc8, 0x08, 0x55, + 0xcf, 0xf8, 0x28, 0x39, 0xfb, 0x8c, 0x50, 0x24, 0x11, 0x68, 0x82, 0x99, 0x76, 0xfc, 0xba, 0xc5, + 0xef, 0x0f, 0x10, 0x01, 0x56, 0x4f, 0x9b, 0x42, 0x60, 0x0b, 0x14, 0x89, 0xd8, 0x5b, 0x8d, 0xe2, + 0x6a, 0x7e, 0xad, 0x52, 0xff, 0xe0, 0xdf, 0x54, 0x86, 0x25, 0x37, 0xdf, 0x1d, 0x8f, 0xd3, 0x93, + 0x64, 0x9d, 0x90, 0x32, 0x14, 0x1b, 0x87, 0xff, 0x07, 0xf9, 0xd0, 0x6d, 0xa9, 0xd7, 0xbe, 0xa2, + 0x28, 0xf9, 0xfd, 0xdd, 0x6d, 0x24, 0xe4, 0x2b, 0x58, 0x2d, 0xcf, 0xd2, 0x04, 0x5c, 0x00, 0xf9, + 0x23, 0x72, 0x12, 0x37, 0x14, 0x12, 0x9f, 0xf0, 0x21, 0x28, 0xf6, 0xc5, 0x5e, 0xad, 0xe2, 0xfb, + 0xce, 0x54, 0x27, 0x93, 0x35, 0x1c, 0xc5, 0x5a, 0x0f, 0xf4, 0x4d, 0xcd, 0xfc, 0x5d, 0x03, 0x37, + 0x27, 0x96, 0x9f, 0x58, 0x77, 0x70, 0xb7, 0xeb, 0x1f, 0x93, 0x96, 0x3c, 0xb6, 0x94, 0xac, 0x3b, + 0x5b, 0xb1, 0x18, 0x0d, 0x71, 0xf8, 0x36, 0x98, 0x69, 0x11, 0xcf, 0x25, 0x2d, 0xb9, 0x18, 0x95, + 0x92, 0xca, 0xdd, 0x96, 0x52, 0xa4, 0x50, 0xc1, 0xa3, 0x04, 0x33, 0xdf, 0x53, 0xab, 0xd8, 0x88, + 0x87, 0xa4, 0x14, 0x29, 0x14, 0x6e, 0x81, 0x79, 0x22, 0xdc, 0x94, 0xfe, 0xef, 0x50, 0xea, 0x0f, + 0x33, 0xba, 0xac, 0x14, 0xe6, 0x77, 0xc6, 0x61, 0x74, 0x9e, 0x6f, 0xfe, 0xad, 0x03, 0x63, 0xd2, + 0x68, 0x83, 0x87, 0xc9, 0x2e, 0x22, 0x41, 0xb9, 0x0e, 0x55, 0xea, 0xb7, 0x2f, 0xd5, 0x20, 0x42, + 0xa3, 0xb1, 0xa4, 0x1c, 0x99, 0x4b, 0x4b, 0x53, 0xab, 0x8b, 0xfc, 0x85, 0x14, 0x2c, 0x78, 0xe3, + 0x3b, 0x73, 0xbc, 0x54, 0x55, 0xea, 0x77, 0x2e, 0xdb, 0x0e, 0xf2, 0x34, 0x43, 0x9d, 0xb6, 0x70, + 0x0e, 0x60, 0xe8, 0x82, 0x7d, 0x58, 0x07, 0xc0, 0xf5, 0x1c, 0xbf, 0x17, 0x74, 0x09, 0x27, 0x32, + 0x6c, 0xa5, 0x64, 0x0e, 0xee, 0x8e, 0x10, 0x94, 0x62, 0x65, 0xc5, 0xbb, 0x70, 0xb5, 0x78, 0x37, + 0xd6, 0x4e, 0xcf, 0xaa, 0xb9, 0x17, 0x67, 0xd5, 0xdc, 0xcb, 0xb3, 0x6a, 0xee, 0x79, 0x54, 0xd5, + 0x4e, 0xa3, 0xaa, 0xf6, 0x22, 0xaa, 0x6a, 0x2f, 0xa3, 0xaa, 0xf6, 0x67, 0x54, 0xd5, 0xbe, 0xfd, + 0xab, 0x9a, 0x7b, 0xa6, 0xf7, 0xd7, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x99, 0x87, 0xb8, 0x24, + 0x47, 0x0f, 0x00, 0x00, +} + func (m ExtraValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -159,32 +545,31 @@ } func (m ExtraValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m ExtraValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m) > 0 { - for _, s := range m { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } func (m *LocalSubjectAccessReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -192,41 +577,52 @@ } func (m *LocalSubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LocalSubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NonResourceAttributes) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -234,25 +630,32 @@ } func (m *NonResourceAttributes) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NonResourceAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x12 - i++ + i -= len(m.Verb) + copy(dAtA[i:], m.Verb) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) - i += copy(dAtA[i:], m.Verb) - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NonResourceRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -260,47 +663,40 @@ } func (m *NonResourceRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NonResourceRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } if len(m.NonResourceURLs) > 0 { - for _, s := range m.NonResourceURLs { + for iNdEx := len(m.NonResourceURLs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NonResourceURLs[iNdEx]) + copy(dAtA[i:], m.NonResourceURLs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLs[iNdEx]))) + i-- dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } func (m *ResourceAttributes) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -308,45 +704,57 @@ } func (m *ResourceAttributes) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) - i += copy(dAtA[i:], m.Verb) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) - i += copy(dAtA[i:], m.Resource) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subresource))) - i += copy(dAtA[i:], m.Subresource) - dAtA[i] = 0x3a - i++ + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + i-- + dAtA[i] = 0x3a + i -= len(m.Subresource) + copy(dAtA[i:], m.Subresource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subresource))) + i-- + dAtA[i] = 0x32 + i -= len(m.Resource) + copy(dAtA[i:], m.Resource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) + i-- + dAtA[i] = 0x2a + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x22 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x1a + i -= len(m.Verb) + copy(dAtA[i:], m.Verb) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ResourceRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -354,77 +762,58 @@ } func (m *ResourceRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0x22 } } if len(m.Resources) > 0 { - for _, s := range m.Resources { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *SelfSubjectAccessReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -432,41 +821,52 @@ } func (m *SelfSubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n5, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n6, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SelfSubjectAccessReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -474,37 +874,46 @@ } func (m *SelfSubjectAccessReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectAccessReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ResourceAttributes != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceAttributes.Size())) - n7, err := m.ResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } if m.NonResourceAttributes != nil { + { + size, err := m.NonResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NonResourceAttributes.Size())) - n8, err := m.NonResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.ResourceAttributes != nil { + { + size, err := m.ResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *SelfSubjectRulesReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -512,41 +921,52 @@ } func (m *SelfSubjectRulesReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectRulesReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n9, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n10, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n11, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SelfSubjectRulesReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -554,21 +974,27 @@ } func (m *SelfSubjectRulesReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectRulesReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SubjectAccessReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -576,41 +1002,52 @@ } func (m *SubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n12, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n13, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n13 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n14, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n14 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SubjectAccessReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -618,91 +1055,94 @@ } func (m *SubjectAccessReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ResourceAttributes != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceAttributes.Size())) - n15, err := m.ResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if m.NonResourceAttributes != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NonResourceAttributes.Size())) - n16, err := m.NonResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) - if len(m.Groups) > 0 { - for _, s := range m.Groups { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x32 if len(m.Extra) > 0 { keysForExtra := make([]string, 0, len(m.Extra)) for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) - for _, k := range keysForExtra { - dAtA[i] = 0x2a - i++ - v := m.Extra[string(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n17, err := (&v).MarshalTo(dAtA[i:]) + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x1a + if m.NonResourceAttributes != nil { + { + size, err := m.NonResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n17 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - return i, nil + if m.ResourceAttributes != nil { + { + size, err := m.ResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *SubjectAccessReviewStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -710,41 +1150,48 @@ } func (m *SubjectAccessReviewStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Allowed { + i-- + if m.Denied { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) - i += copy(dAtA[i:], m.EvaluationError) + i-- dAtA[i] = 0x20 - i++ - if m.Denied { + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x1a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x12 + i-- + if m.Allowed { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *SubjectRulesReviewStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -752,77 +1199,74 @@ } func (m *SubjectRulesReviewStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectRulesReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.ResourceRules) > 0 { - for _, msg := range m.ResourceRules { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x22 + i-- + if m.Incomplete { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x18 if len(m.NonResourceRules) > 0 { - for _, msg := range m.NonResourceRules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.NonResourceRules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NonResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x18 - i++ - if m.Incomplete { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.ResourceRules) > 0 { + for iNdEx := len(m.ResourceRules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - i++ - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) - i += copy(dAtA[i:], m.EvaluationError) - return i, nil + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m ExtraValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m) > 0 { @@ -835,6 +1279,9 @@ } func (m *LocalSubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -847,6 +1294,9 @@ } func (m *NonResourceAttributes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Path) @@ -857,6 +1307,9 @@ } func (m *NonResourceRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -875,6 +1328,9 @@ } func (m *ResourceAttributes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Namespace) @@ -895,6 +1351,9 @@ } func (m *ResourceRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -925,6 +1384,9 @@ } func (m *SelfSubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -937,6 +1399,9 @@ } func (m *SelfSubjectAccessReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ResourceAttributes != nil { @@ -951,6 +1416,9 @@ } func (m *SelfSubjectRulesReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -963,6 +1431,9 @@ } func (m *SelfSubjectRulesReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Namespace) @@ -971,6 +1442,9 @@ } func (m *SubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -983,6 +1457,9 @@ } func (m *SubjectAccessReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ResourceAttributes != nil { @@ -1016,6 +1493,9 @@ } func (m *SubjectAccessReviewStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -1028,6 +1508,9 @@ } func (m *SubjectRulesReviewStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.ResourceRules) > 0 { @@ -1049,14 +1532,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1066,7 +1542,7 @@ return "nil" } s := strings.Join([]string{`&LocalSubjectAccessReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectAccessReviewSpec", "SubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1129,7 +1605,7 @@ return "nil" } s := strings.Join([]string{`&SelfSubjectAccessReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SelfSubjectAccessReviewSpec", "SelfSubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1141,8 +1617,8 @@ return "nil" } s := strings.Join([]string{`&SelfSubjectAccessReviewSpec{`, - `ResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.ResourceAttributes), "ResourceAttributes", "ResourceAttributes", 1) + `,`, - `NonResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.NonResourceAttributes), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, + `ResourceAttributes:` + strings.Replace(this.ResourceAttributes.String(), "ResourceAttributes", "ResourceAttributes", 1) + `,`, + `NonResourceAttributes:` + strings.Replace(this.NonResourceAttributes.String(), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, `}`, }, "") return s @@ -1152,7 +1628,7 @@ return "nil" } s := strings.Join([]string{`&SelfSubjectRulesReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SelfSubjectRulesReviewSpec", "SelfSubjectRulesReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectRulesReviewStatus", "SubjectRulesReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1174,7 +1650,7 @@ return "nil" } s := strings.Join([]string{`&SubjectAccessReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectAccessReviewSpec", "SubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1196,8 +1672,8 @@ } mapStringForExtra += "}" s := strings.Join([]string{`&SubjectAccessReviewSpec{`, - `ResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.ResourceAttributes), "ResourceAttributes", "ResourceAttributes", 1) + `,`, - `NonResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.NonResourceAttributes), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, + `ResourceAttributes:` + strings.Replace(this.ResourceAttributes.String(), "ResourceAttributes", "ResourceAttributes", 1) + `,`, + `NonResourceAttributes:` + strings.Replace(this.NonResourceAttributes.String(), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, `User:` + fmt.Sprintf("%v", this.User) + `,`, `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, `Extra:` + mapStringForExtra + `,`, @@ -1223,9 +1699,19 @@ if this == nil { return "nil" } + repeatedStringForResourceRules := "[]ResourceRule{" + for _, f := range this.ResourceRules { + repeatedStringForResourceRules += strings.Replace(strings.Replace(f.String(), "ResourceRule", "ResourceRule", 1), `&`, ``, 1) + "," + } + repeatedStringForResourceRules += "}" + repeatedStringForNonResourceRules := "[]NonResourceRule{" + for _, f := range this.NonResourceRules { + repeatedStringForNonResourceRules += strings.Replace(strings.Replace(f.String(), "NonResourceRule", "NonResourceRule", 1), `&`, ``, 1) + "," + } + repeatedStringForNonResourceRules += "}" s := strings.Join([]string{`&SubjectRulesReviewStatus{`, - `ResourceRules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ResourceRules), "ResourceRule", "ResourceRule", 1), `&`, ``, 1) + `,`, - `NonResourceRules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NonResourceRules), "NonResourceRule", "NonResourceRule", 1), `&`, ``, 1) + `,`, + `ResourceRules:` + repeatedStringForResourceRules + `,`, + `NonResourceRules:` + repeatedStringForNonResourceRules + `,`, `Incomplete:` + fmt.Sprintf("%v", this.Incomplete) + `,`, `EvaluationError:` + fmt.Sprintf("%v", this.EvaluationError) + `,`, `}`, @@ -1255,7 +1741,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1283,7 +1769,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1293,6 +1779,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1307,6 +1796,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1334,7 +1826,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1362,7 +1854,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1371,6 +1863,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1392,7 +1887,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1401,6 +1896,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1422,7 +1920,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1431,6 +1929,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1447,6 +1948,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1474,7 +1978,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1502,7 +2006,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1512,6 +2016,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1531,7 +2038,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1541,6 +2048,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1555,6 +2065,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1582,7 +2095,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1610,7 +2123,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1620,6 +2133,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1639,7 +2155,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1649,6 +2165,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1663,6 +2182,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1690,7 +2212,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1718,7 +2240,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1728,6 +2250,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1747,7 +2272,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1757,6 +2282,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1776,7 +2304,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1786,6 +2314,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1805,7 +2336,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1815,6 +2346,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1834,7 +2368,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1844,6 +2378,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1863,7 +2400,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1873,6 +2410,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1892,7 +2432,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1902,6 +2442,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1916,6 +2459,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1943,7 +2489,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1971,7 +2517,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1981,6 +2527,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2000,7 +2549,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2010,6 +2559,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2029,7 +2581,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2039,6 +2591,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2058,7 +2613,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2068,6 +2623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2082,6 +2640,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2109,7 +2670,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2137,7 +2698,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2146,6 +2707,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2167,7 +2731,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2176,6 +2740,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2197,7 +2764,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2206,6 +2773,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2222,6 +2792,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2249,7 +2822,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2277,7 +2850,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2286,6 +2859,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2310,7 +2886,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2319,6 +2895,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2338,6 +2917,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2365,7 +2947,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2393,7 +2975,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2402,6 +2984,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2423,7 +3008,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2432,6 +3017,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2453,7 +3041,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2462,6 +3050,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2478,6 +3069,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2505,7 +3099,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2533,7 +3127,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2543,6 +3137,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2557,6 +3154,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2584,7 +3184,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2612,7 +3212,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2621,6 +3221,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2642,7 +3245,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2651,6 +3254,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2672,7 +3278,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2681,6 +3287,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2697,6 +3306,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2724,7 +3336,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2752,7 +3364,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2761,6 +3373,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2785,7 +3400,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2794,6 +3409,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2818,7 +3436,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2828,6 +3446,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2847,7 +3468,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2857,6 +3478,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2876,7 +3500,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2885,54 +3509,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Extra == nil { m.Extra = make(map[string]ExtraValue) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := &ExtraValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2942,46 +3532,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ExtraValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &ExtraValue{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Extra[mapkey] = *mapvalue - } else { - var mapvalue ExtraValue - m.Extra[mapkey] = mapvalue } + m.Extra[mapkey] = *mapvalue iNdEx = postIndex case 6: if wireType != 2 { @@ -2997,7 +3629,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3007,6 +3639,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3021,6 +3656,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3048,7 +3686,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3076,7 +3714,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3096,7 +3734,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3106,6 +3744,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3125,7 +3766,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3135,6 +3776,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3154,7 +3798,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3169,6 +3813,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3196,7 +3843,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3224,7 +3871,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3233,6 +3880,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3255,7 +3905,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3264,6 +3914,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3286,7 +3939,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3306,7 +3959,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3316,6 +3969,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3330,6 +3986,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3396,10 +4055,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -3428,6 +4090,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -3446,83 +4111,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 1140 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0x4d, 0x6f, 0x1b, 0xc5, - 0x1b, 0xf7, 0xae, 0xed, 0xc4, 0x1e, 0x37, 0xff, 0xa4, 0x13, 0xa5, 0xd9, 0xa6, 0xfa, 0xdb, 0xd1, - 0x22, 0x41, 0x2a, 0xca, 0x2e, 0xb1, 0xda, 0x26, 0xaa, 0x54, 0xa1, 0x58, 0x89, 0x50, 0xa4, 0xb6, - 0x54, 0x13, 0x25, 0x12, 0x45, 0x20, 0xc6, 0xeb, 0x89, 0xbd, 0xc4, 0xde, 0x5d, 0x66, 0x66, 0x1d, - 0xc2, 0xa9, 0x12, 0x5f, 0x80, 0x23, 0x07, 0x0e, 0x7c, 0x03, 0x2e, 0x48, 0xdc, 0x38, 0x70, 0x40, - 0x39, 0xf6, 0x58, 0x24, 0x64, 0x91, 0xe5, 0xcc, 0x77, 0x40, 0x33, 0x3b, 0xf6, 0xae, 0x93, 0xb5, - 0x9b, 0x70, 0xa0, 0x97, 0xde, 0x76, 0x9f, 0xdf, 0xef, 0x79, 0x99, 0xe7, 0x65, 0xe6, 0x01, 0xdb, - 0x47, 0x9b, 0xcc, 0x72, 0x7d, 0xfb, 0x28, 0x6c, 0x12, 0xea, 0x11, 0x4e, 0x98, 0xdd, 0x27, 0x5e, - 0xcb, 0xa7, 0xb6, 0x02, 0x70, 0xe0, 0xda, 0x38, 0xe4, 0x1d, 0x9f, 0xba, 0x5f, 0x63, 0xee, 0xfa, - 0x9e, 0xdd, 0x5f, 0xb7, 0xdb, 0xc4, 0x23, 0x14, 0x73, 0xd2, 0xb2, 0x02, 0xea, 0x73, 0x1f, 0xde, - 0x8a, 0xc9, 0x16, 0x0e, 0x5c, 0x6b, 0x8c, 0x6c, 0xf5, 0xd7, 0x57, 0xde, 0x6b, 0xbb, 0xbc, 0x13, - 0x36, 0x2d, 0xc7, 0xef, 0xd9, 0x6d, 0xbf, 0xed, 0xdb, 0x52, 0xa7, 0x19, 0x1e, 0xca, 0x3f, 0xf9, - 0x23, 0xbf, 0x62, 0x5b, 0x2b, 0x77, 0x13, 0xc7, 0x3d, 0xec, 0x74, 0x5c, 0x8f, 0xd0, 0x13, 0x3b, - 0x38, 0x6a, 0x0b, 0x01, 0xb3, 0x7b, 0x84, 0xe3, 0x8c, 0x08, 0x56, 0xec, 0x49, 0x5a, 0x34, 0xf4, - 0xb8, 0xdb, 0x23, 0x17, 0x14, 0xee, 0xbf, 0x4a, 0x81, 0x39, 0x1d, 0xd2, 0xc3, 0xe7, 0xf5, 0xcc, - 0x0d, 0x00, 0x76, 0xbe, 0xe2, 0x14, 0x1f, 0xe0, 0x6e, 0x48, 0x60, 0x0d, 0x14, 0x5d, 0x4e, 0x7a, - 0xcc, 0xd0, 0x56, 0xf3, 0x6b, 0xe5, 0x46, 0x39, 0x1a, 0xd4, 0x8a, 0xbb, 0x42, 0x80, 0x62, 0xf9, - 0x83, 0xd2, 0x77, 0x3f, 0xd4, 0x72, 0xcf, 0xff, 0x58, 0xcd, 0x99, 0x3f, 0xe9, 0xc0, 0x78, 0xe4, - 0x3b, 0xb8, 0xbb, 0x17, 0x36, 0xbf, 0x20, 0x0e, 0xdf, 0x72, 0x1c, 0xc2, 0x18, 0x22, 0x7d, 0x97, - 0x1c, 0xc3, 0xcf, 0x41, 0x49, 0x9c, 0xac, 0x85, 0x39, 0x36, 0xb4, 0x55, 0x6d, 0xad, 0x52, 0x7f, - 0xdf, 0x4a, 0x72, 0x3a, 0x0a, 0xd0, 0x0a, 0x8e, 0xda, 0x42, 0xc0, 0x2c, 0xc1, 0xb6, 0xfa, 0xeb, - 0xd6, 0x47, 0xd2, 0xd6, 0x63, 0xc2, 0x71, 0x03, 0x9e, 0x0e, 0x6a, 0xb9, 0x68, 0x50, 0x03, 0x89, - 0x0c, 0x8d, 0xac, 0xc2, 0x03, 0x50, 0x60, 0x01, 0x71, 0x0c, 0x5d, 0x5a, 0xbf, 0x6b, 0x4d, 0xa9, - 0x98, 0x95, 0x11, 0xe1, 0x5e, 0x40, 0x9c, 0xc6, 0x35, 0xe5, 0xa1, 0x20, 0xfe, 0x90, 0xb4, 0x07, - 0x3f, 0x03, 0x33, 0x8c, 0x63, 0x1e, 0x32, 0x23, 0x2f, 0x2d, 0xdf, 0xbf, 0xb2, 0x65, 0xa9, 0xdd, - 0xf8, 0x9f, 0xb2, 0x3d, 0x13, 0xff, 0x23, 0x65, 0xd5, 0xfc, 0x04, 0x2c, 0x3d, 0xf1, 0x3d, 0x44, - 0x98, 0x1f, 0x52, 0x87, 0x6c, 0x71, 0x4e, 0xdd, 0x66, 0xc8, 0x09, 0x83, 0xab, 0xa0, 0x10, 0x60, - 0xde, 0x91, 0xe9, 0x2a, 0x27, 0xa1, 0x3d, 0xc5, 0xbc, 0x83, 0x24, 0x22, 0x18, 0x7d, 0x42, 0x9b, - 0xf2, 0xc8, 0x29, 0xc6, 0x01, 0xa1, 0x4d, 0x24, 0x11, 0xf3, 0x4b, 0x30, 0x9f, 0x32, 0x8e, 0xc2, - 0xae, 0xac, 0xa8, 0x80, 0xc6, 0x2a, 0x2a, 0x34, 0x18, 0x8a, 0xe5, 0xf0, 0x21, 0x98, 0xf7, 0x12, - 0x9d, 0x7d, 0xf4, 0x88, 0x19, 0xba, 0xa4, 0x2e, 0x46, 0x83, 0x5a, 0xda, 0x9c, 0x80, 0xd0, 0x79, - 0xae, 0xf9, 0x8b, 0x0e, 0x60, 0xc6, 0x69, 0x6c, 0x50, 0xf6, 0x70, 0x8f, 0xb0, 0x00, 0x3b, 0x44, - 0x1d, 0xe9, 0xba, 0x0a, 0xb8, 0xfc, 0x64, 0x08, 0xa0, 0x84, 0xf3, 0xea, 0xc3, 0xc1, 0xb7, 0x40, - 0xb1, 0x4d, 0xfd, 0x30, 0x90, 0x85, 0x29, 0x37, 0xe6, 0x14, 0xa5, 0xf8, 0xa1, 0x10, 0xa2, 0x18, - 0x83, 0xb7, 0xc1, 0x6c, 0x9f, 0x50, 0xe6, 0xfa, 0x9e, 0x51, 0x90, 0xb4, 0x79, 0x45, 0x9b, 0x3d, - 0x88, 0xc5, 0x68, 0x88, 0xc3, 0x3b, 0xa0, 0x44, 0x55, 0xe0, 0x46, 0x51, 0x72, 0x17, 0x14, 0xb7, - 0x34, 0xca, 0xe0, 0x88, 0x01, 0xef, 0x81, 0x0a, 0x0b, 0x9b, 0x23, 0x85, 0x19, 0xa9, 0xb0, 0xa8, - 0x14, 0x2a, 0x7b, 0x09, 0x84, 0xd2, 0x3c, 0x71, 0x2c, 0x71, 0x46, 0x63, 0x76, 0xfc, 0x58, 0x22, - 0x05, 0x48, 0x22, 0xe6, 0xaf, 0x1a, 0xb8, 0x76, 0xb5, 0x8a, 0xbd, 0x0b, 0xca, 0x38, 0x70, 0xe5, - 0xb1, 0x87, 0xb5, 0x9a, 0x13, 0x79, 0xdd, 0x7a, 0xba, 0x1b, 0x0b, 0x51, 0x82, 0x0b, 0xf2, 0x30, - 0x18, 0xd1, 0xd2, 0x23, 0xf2, 0xd0, 0x25, 0x43, 0x09, 0x0e, 0x37, 0xc0, 0xdc, 0xf0, 0x47, 0x16, - 0xc9, 0x28, 0x48, 0x85, 0xeb, 0xd1, 0xa0, 0x36, 0x87, 0xd2, 0x00, 0x1a, 0xe7, 0x99, 0x3f, 0xeb, - 0x60, 0x79, 0x8f, 0x74, 0x0f, 0x5f, 0xcf, 0x5d, 0xf0, 0x6c, 0xec, 0x2e, 0xd8, 0x9c, 0x3e, 0xb1, - 0xd9, 0x51, 0xbe, 0xb6, 0xfb, 0xe0, 0x7b, 0x1d, 0xdc, 0x9a, 0x12, 0x13, 0x3c, 0x06, 0x90, 0x5e, - 0x18, 0x2f, 0x95, 0x47, 0x7b, 0x6a, 0x2c, 0x17, 0xa7, 0xb2, 0x71, 0x23, 0x1a, 0xd4, 0x32, 0xa6, - 0x15, 0x65, 0xb8, 0x80, 0xdf, 0x68, 0x60, 0xc9, 0xcb, 0xba, 0xa9, 0x54, 0x9a, 0xeb, 0x53, 0x9d, - 0x67, 0xde, 0x71, 0x8d, 0x9b, 0xd1, 0xa0, 0x96, 0x7d, 0xfd, 0xa1, 0x6c, 0x5f, 0xe2, 0x95, 0xb9, - 0x91, 0x4a, 0x8f, 0x18, 0x90, 0xff, 0xae, 0xaf, 0x3e, 0x1e, 0xeb, 0xab, 0x8d, 0xcb, 0xf6, 0x55, - 0x2a, 0xc8, 0x89, 0x6d, 0xf5, 0xe9, 0xb9, 0xb6, 0xba, 0x77, 0x99, 0xb6, 0x4a, 0x1b, 0x9e, 0xde, - 0x55, 0x8f, 0xc1, 0xca, 0xe4, 0x80, 0xae, 0x7c, 0x39, 0x9b, 0x3f, 0xea, 0x60, 0xf1, 0xcd, 0x33, - 0x7f, 0x95, 0xb1, 0xfe, 0xad, 0x00, 0x96, 0xdf, 0x8c, 0xf4, 0xa4, 0x45, 0x27, 0x64, 0x84, 0xaa, - 0x67, 0x7c, 0x54, 0x9c, 0x7d, 0x46, 0x28, 0x92, 0x08, 0x34, 0xc1, 0x4c, 0x3b, 0x7e, 0xdd, 0xe2, - 0xf7, 0x07, 0x88, 0x04, 0xab, 0xa7, 0x4d, 0x21, 0xb0, 0x05, 0x8a, 0x44, 0xec, 0xad, 0x46, 0x71, - 0x35, 0xbf, 0x56, 0xa9, 0x7f, 0xf0, 0x6f, 0x3a, 0xc3, 0x92, 0x9b, 0xef, 0x8e, 0xc7, 0xe9, 0x49, - 0xb2, 0x4e, 0x48, 0x19, 0x8a, 0x8d, 0xc3, 0xff, 0x83, 0x7c, 0xe8, 0xb6, 0xd4, 0x6b, 0x5f, 0x51, - 0x94, 0xfc, 0xfe, 0xee, 0x36, 0x12, 0xf2, 0x15, 0xac, 0x96, 0x67, 0x69, 0x02, 0x2e, 0x80, 0xfc, - 0x11, 0x39, 0x89, 0x07, 0x0a, 0x89, 0x4f, 0xf8, 0x10, 0x14, 0xfb, 0x62, 0xaf, 0x56, 0xf9, 0x7d, - 0x67, 0x6a, 0x90, 0xc9, 0x1a, 0x8e, 0x62, 0xad, 0x07, 0xfa, 0xa6, 0x66, 0xfe, 0xae, 0x81, 0x9b, - 0x13, 0xdb, 0x4f, 0xac, 0x3b, 0xb8, 0xdb, 0xf5, 0x8f, 0x49, 0x4b, 0xba, 0x2d, 0x25, 0xeb, 0xce, - 0x56, 0x2c, 0x46, 0x43, 0x1c, 0xbe, 0x0d, 0x66, 0x28, 0xc1, 0xcc, 0xf7, 0xd4, 0x8a, 0x35, 0xea, - 0x5c, 0x24, 0xa5, 0x48, 0xa1, 0x70, 0x0b, 0xcc, 0x13, 0xe1, 0x5e, 0xc6, 0xb5, 0x43, 0xa9, 0x3f, - 0xac, 0xd4, 0xb2, 0x52, 0x98, 0xdf, 0x19, 0x87, 0xd1, 0x79, 0xbe, 0x70, 0xd5, 0x22, 0x9e, 0x4b, - 0x5a, 0x72, 0x07, 0x2b, 0x25, 0xae, 0xb6, 0xa5, 0x14, 0x29, 0xd4, 0xfc, 0x5b, 0x07, 0xc6, 0xa4, - 0xab, 0x0d, 0x1e, 0x26, 0xbb, 0x88, 0x04, 0xe5, 0x3a, 0x54, 0xa9, 0xdf, 0xbe, 0xd4, 0x80, 0x08, - 0x8d, 0xc6, 0x92, 0x72, 0x3b, 0x97, 0x96, 0xa6, 0x56, 0x17, 0xf9, 0x0b, 0x29, 0x58, 0xf0, 0xc6, - 0x77, 0xe6, 0x78, 0xa9, 0xaa, 0xd4, 0xef, 0x5c, 0x76, 0x1c, 0xa4, 0x37, 0x43, 0x79, 0x5b, 0x38, - 0x07, 0x30, 0x74, 0xc1, 0x3e, 0xac, 0x03, 0xe0, 0x7a, 0x8e, 0xdf, 0x0b, 0xba, 0x84, 0x13, 0x99, - 0xde, 0x52, 0x72, 0x0f, 0xee, 0x8e, 0x10, 0x94, 0x62, 0x65, 0xd5, 0xa5, 0x70, 0xb5, 0xba, 0x34, - 0xd6, 0x4e, 0xcf, 0xaa, 0xb9, 0x17, 0x67, 0xd5, 0xdc, 0xcb, 0xb3, 0x6a, 0xee, 0x79, 0x54, 0xd5, - 0x4e, 0xa3, 0xaa, 0xf6, 0x22, 0xaa, 0x6a, 0x2f, 0xa3, 0xaa, 0xf6, 0x67, 0x54, 0xd5, 0xbe, 0xfd, - 0xab, 0x9a, 0x7b, 0xa6, 0xf7, 0xd7, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x85, 0x45, 0x74, - 0x47, 0x0f, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -199,21 +199,13 @@ *out = *in if in.ResourceAttributes != nil { in, out := &in.ResourceAttributes, &out.ResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(ResourceAttributes) - **out = **in - } + *out = new(ResourceAttributes) + **out = **in } if in.NonResourceAttributes != nil { in, out := &in.NonResourceAttributes, &out.NonResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(NonResourceAttributes) - **out = **in - } + *out = new(NonResourceAttributes) + **out = **in } return } @@ -305,21 +297,13 @@ *out = *in if in.ResourceAttributes != nil { in, out := &in.ResourceAttributes, &out.ResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(ResourceAttributes) - **out = **in - } + *out = new(ResourceAttributes) + **out = **in } if in.NonResourceAttributes != nil { in, out := &in.NonResourceAttributes, &out.NonResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(NonResourceAttributes) - **out = **in - } + *out = new(NonResourceAttributes) + **out = **in } if in.Groups != nil { in, out := &in.Groups, &out.Groups @@ -330,12 +314,15 @@ in, out := &in.Extra, &out.Extra *out = make(map[string]ExtraValue, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make(ExtraValue, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=authorization.k8s.io + package v1beta1 // import "k8s.io/api/authorization/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,44 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1beta1/generated.proto - - It has these top-level messages: - ExtraValue - LocalSubjectAccessReview - NonResourceAttributes - NonResourceRule - ResourceAttributes - ResourceRule - SelfSubjectAccessReview - SelfSubjectAccessReviewSpec - SelfSubjectRulesReview - SelfSubjectRulesReviewSpec - SubjectAccessReview - SubjectAccessReviewSpec - SubjectAccessReviewStatus - SubjectRulesReviewStatus -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -64,73 +44,397 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *ExtraValue) Reset() { *m = ExtraValue{} } -func (*ExtraValue) ProtoMessage() {} -func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{0} +} +func (m *ExtraValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExtraValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExtraValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraValue.Merge(m, src) +} +func (m *ExtraValue) XXX_Size() int { + return m.Size() +} +func (m *ExtraValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExtraValue.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtraValue proto.InternalMessageInfo func (m *LocalSubjectAccessReview) Reset() { *m = LocalSubjectAccessReview{} } func (*LocalSubjectAccessReview) ProtoMessage() {} func (*LocalSubjectAccessReview) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} + return fileDescriptor_43130d8376f09103, []int{1} +} +func (m *LocalSubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LocalSubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LocalSubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalSubjectAccessReview.Merge(m, src) +} +func (m *LocalSubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *LocalSubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_LocalSubjectAccessReview.DiscardUnknown(m) } -func (m *NonResourceAttributes) Reset() { *m = NonResourceAttributes{} } -func (*NonResourceAttributes) ProtoMessage() {} -func (*NonResourceAttributes) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +var xxx_messageInfo_LocalSubjectAccessReview proto.InternalMessageInfo -func (m *NonResourceRule) Reset() { *m = NonResourceRule{} } -func (*NonResourceRule) ProtoMessage() {} -func (*NonResourceRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (m *NonResourceAttributes) Reset() { *m = NonResourceAttributes{} } +func (*NonResourceAttributes) ProtoMessage() {} +func (*NonResourceAttributes) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{2} +} +func (m *NonResourceAttributes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NonResourceAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NonResourceAttributes) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonResourceAttributes.Merge(m, src) +} +func (m *NonResourceAttributes) XXX_Size() int { + return m.Size() +} +func (m *NonResourceAttributes) XXX_DiscardUnknown() { + xxx_messageInfo_NonResourceAttributes.DiscardUnknown(m) +} -func (m *ResourceAttributes) Reset() { *m = ResourceAttributes{} } -func (*ResourceAttributes) ProtoMessage() {} -func (*ResourceAttributes) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +var xxx_messageInfo_NonResourceAttributes proto.InternalMessageInfo -func (m *ResourceRule) Reset() { *m = ResourceRule{} } -func (*ResourceRule) ProtoMessage() {} -func (*ResourceRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (m *NonResourceRule) Reset() { *m = NonResourceRule{} } +func (*NonResourceRule) ProtoMessage() {} +func (*NonResourceRule) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{3} +} +func (m *NonResourceRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NonResourceRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NonResourceRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonResourceRule.Merge(m, src) +} +func (m *NonResourceRule) XXX_Size() int { + return m.Size() +} +func (m *NonResourceRule) XXX_DiscardUnknown() { + xxx_messageInfo_NonResourceRule.DiscardUnknown(m) +} -func (m *SelfSubjectAccessReview) Reset() { *m = SelfSubjectAccessReview{} } -func (*SelfSubjectAccessReview) ProtoMessage() {} -func (*SelfSubjectAccessReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +var xxx_messageInfo_NonResourceRule proto.InternalMessageInfo + +func (m *ResourceAttributes) Reset() { *m = ResourceAttributes{} } +func (*ResourceAttributes) ProtoMessage() {} +func (*ResourceAttributes) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{4} +} +func (m *ResourceAttributes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceAttributes) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceAttributes.Merge(m, src) +} +func (m *ResourceAttributes) XXX_Size() int { + return m.Size() +} +func (m *ResourceAttributes) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceAttributes.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceAttributes proto.InternalMessageInfo + +func (m *ResourceRule) Reset() { *m = ResourceRule{} } +func (*ResourceRule) ProtoMessage() {} +func (*ResourceRule) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{5} +} +func (m *ResourceRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceRule.Merge(m, src) +} +func (m *ResourceRule) XXX_Size() int { + return m.Size() +} +func (m *ResourceRule) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceRule.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceRule proto.InternalMessageInfo + +func (m *SelfSubjectAccessReview) Reset() { *m = SelfSubjectAccessReview{} } +func (*SelfSubjectAccessReview) ProtoMessage() {} +func (*SelfSubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{6} +} +func (m *SelfSubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectAccessReview.Merge(m, src) +} +func (m *SelfSubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectAccessReview proto.InternalMessageInfo func (m *SelfSubjectAccessReviewSpec) Reset() { *m = SelfSubjectAccessReviewSpec{} } func (*SelfSubjectAccessReviewSpec) ProtoMessage() {} func (*SelfSubjectAccessReviewSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{7} + return fileDescriptor_43130d8376f09103, []int{7} +} +func (m *SelfSubjectAccessReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectAccessReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } +func (m *SelfSubjectAccessReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectAccessReviewSpec.Merge(m, src) +} +func (m *SelfSubjectAccessReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectAccessReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectAccessReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectAccessReviewSpec proto.InternalMessageInfo -func (m *SelfSubjectRulesReview) Reset() { *m = SelfSubjectRulesReview{} } -func (*SelfSubjectRulesReview) ProtoMessage() {} -func (*SelfSubjectRulesReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (m *SelfSubjectRulesReview) Reset() { *m = SelfSubjectRulesReview{} } +func (*SelfSubjectRulesReview) ProtoMessage() {} +func (*SelfSubjectRulesReview) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{8} +} +func (m *SelfSubjectRulesReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectRulesReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectRulesReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectRulesReview.Merge(m, src) +} +func (m *SelfSubjectRulesReview) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectRulesReview) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectRulesReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectRulesReview proto.InternalMessageInfo func (m *SelfSubjectRulesReviewSpec) Reset() { *m = SelfSubjectRulesReviewSpec{} } func (*SelfSubjectRulesReviewSpec) ProtoMessage() {} func (*SelfSubjectRulesReviewSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{9} + return fileDescriptor_43130d8376f09103, []int{9} +} +func (m *SelfSubjectRulesReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectRulesReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectRulesReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectRulesReviewSpec.Merge(m, src) +} +func (m *SelfSubjectRulesReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectRulesReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectRulesReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectRulesReviewSpec proto.InternalMessageInfo + +func (m *SubjectAccessReview) Reset() { *m = SubjectAccessReview{} } +func (*SubjectAccessReview) ProtoMessage() {} +func (*SubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_43130d8376f09103, []int{10} +} +func (m *SubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReview.Merge(m, src) +} +func (m *SubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReview.DiscardUnknown(m) } -func (m *SubjectAccessReview) Reset() { *m = SubjectAccessReview{} } -func (*SubjectAccessReview) ProtoMessage() {} -func (*SubjectAccessReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +var xxx_messageInfo_SubjectAccessReview proto.InternalMessageInfo func (m *SubjectAccessReviewSpec) Reset() { *m = SubjectAccessReviewSpec{} } func (*SubjectAccessReviewSpec) ProtoMessage() {} func (*SubjectAccessReviewSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{11} + return fileDescriptor_43130d8376f09103, []int{11} +} +func (m *SubjectAccessReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } +func (m *SubjectAccessReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReviewSpec.Merge(m, src) +} +func (m *SubjectAccessReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectAccessReviewSpec proto.InternalMessageInfo func (m *SubjectAccessReviewStatus) Reset() { *m = SubjectAccessReviewStatus{} } func (*SubjectAccessReviewStatus) ProtoMessage() {} func (*SubjectAccessReviewStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{12} + return fileDescriptor_43130d8376f09103, []int{12} } +func (m *SubjectAccessReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReviewStatus.Merge(m, src) +} +func (m *SubjectAccessReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectAccessReviewStatus proto.InternalMessageInfo func (m *SubjectRulesReviewStatus) Reset() { *m = SubjectRulesReviewStatus{} } func (*SubjectRulesReviewStatus) ProtoMessage() {} func (*SubjectRulesReviewStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{13} + return fileDescriptor_43130d8376f09103, []int{13} } +func (m *SubjectRulesReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectRulesReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectRulesReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectRulesReviewStatus.Merge(m, src) +} +func (m *SubjectRulesReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *SubjectRulesReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectRulesReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectRulesReviewStatus proto.InternalMessageInfo func init() { proto.RegisterType((*ExtraValue)(nil), "k8s.io.api.authorization.v1beta1.ExtraValue") @@ -145,13 +449,95 @@ proto.RegisterType((*SelfSubjectRulesReviewSpec)(nil), "k8s.io.api.authorization.v1beta1.SelfSubjectRulesReviewSpec") proto.RegisterType((*SubjectAccessReview)(nil), "k8s.io.api.authorization.v1beta1.SubjectAccessReview") proto.RegisterType((*SubjectAccessReviewSpec)(nil), "k8s.io.api.authorization.v1beta1.SubjectAccessReviewSpec") + proto.RegisterMapType((map[string]ExtraValue)(nil), "k8s.io.api.authorization.v1beta1.SubjectAccessReviewSpec.ExtraEntry") proto.RegisterType((*SubjectAccessReviewStatus)(nil), "k8s.io.api.authorization.v1beta1.SubjectAccessReviewStatus") proto.RegisterType((*SubjectRulesReviewStatus)(nil), "k8s.io.api.authorization.v1beta1.SubjectRulesReviewStatus") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1beta1/generated.proto", fileDescriptor_43130d8376f09103) +} + +var fileDescriptor_43130d8376f09103 = []byte{ + // 1141 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0xfa, 0x4f, 0x62, 0x8f, 0x1b, 0x92, 0x4e, 0x94, 0x66, 0x1b, 0x84, 0x6d, 0x19, 0x09, + 0x05, 0xd1, 0xee, 0x92, 0xa8, 0x90, 0x12, 0xe8, 0x21, 0x56, 0x22, 0x14, 0xa9, 0x2d, 0xd5, 0x44, + 0xc9, 0x81, 0x4a, 0xc0, 0xec, 0x7a, 0x62, 0x2f, 0xb6, 0x77, 0x97, 0x99, 0x59, 0x87, 0x20, 0x0e, + 0x3d, 0x72, 0xe4, 0xc8, 0x91, 0x13, 0xdf, 0x81, 0x0b, 0x12, 0x9c, 0x72, 0xec, 0x31, 0x48, 0xc8, + 0x22, 0xcb, 0x87, 0xe0, 0x8a, 0x66, 0x76, 0xec, 0x5d, 0x27, 0x9b, 0x38, 0xce, 0x81, 0x5e, 0x7a, + 0xdb, 0x79, 0xbf, 0xdf, 0x7b, 0xf3, 0xde, 0x9b, 0xf7, 0xde, 0x3e, 0xb0, 0xdb, 0x79, 0xc8, 0x0c, + 0xc7, 0x33, 0x3b, 0x81, 0x45, 0xa8, 0x4b, 0x38, 0x61, 0x66, 0x9f, 0xb8, 0x4d, 0x8f, 0x9a, 0x0a, + 0xc0, 0xbe, 0x63, 0xe2, 0x80, 0xb7, 0x3d, 0xea, 0x7c, 0x87, 0xb9, 0xe3, 0xb9, 0x66, 0x7f, 0xcd, + 0x22, 0x1c, 0xaf, 0x99, 0x2d, 0xe2, 0x12, 0x8a, 0x39, 0x69, 0x1a, 0x3e, 0xf5, 0xb8, 0x07, 0x6b, + 0x91, 0x86, 0x81, 0x7d, 0xc7, 0x18, 0xd3, 0x30, 0x94, 0xc6, 0xca, 0xfd, 0x96, 0xc3, 0xdb, 0x81, + 0x65, 0xd8, 0x5e, 0xcf, 0x6c, 0x79, 0x2d, 0xcf, 0x94, 0x8a, 0x56, 0x70, 0x28, 0x4f, 0xf2, 0x20, + 0xbf, 0x22, 0x83, 0x2b, 0x0f, 0x62, 0x17, 0x7a, 0xd8, 0x6e, 0x3b, 0x2e, 0xa1, 0xc7, 0xa6, 0xdf, + 0x69, 0x09, 0x01, 0x33, 0x7b, 0x84, 0x63, 0xb3, 0x7f, 0xc1, 0x8d, 0x15, 0xf3, 0x32, 0x2d, 0x1a, + 0xb8, 0xdc, 0xe9, 0x91, 0x0b, 0x0a, 0x1f, 0x4e, 0x52, 0x60, 0x76, 0x9b, 0xf4, 0xf0, 0x79, 0xbd, + 0xfa, 0x06, 0x00, 0x3b, 0xdf, 0x72, 0x8a, 0x0f, 0x70, 0x37, 0x20, 0xb0, 0x0a, 0x0a, 0x0e, 0x27, + 0x3d, 0xa6, 0x6b, 0xb5, 0xdc, 0x6a, 0xa9, 0x51, 0x0a, 0x07, 0xd5, 0xc2, 0xae, 0x10, 0xa0, 0x48, + 0xbe, 0x59, 0xfc, 0xe9, 0xe7, 0x6a, 0xe6, 0xc5, 0x5f, 0xb5, 0x4c, 0xfd, 0xb7, 0x2c, 0xd0, 0x1f, + 0x7b, 0x36, 0xee, 0xee, 0x05, 0xd6, 0xd7, 0xc4, 0xe6, 0x5b, 0xb6, 0x4d, 0x18, 0x43, 0xa4, 0xef, + 0x90, 0x23, 0xf8, 0x15, 0x28, 0x8a, 0xc8, 0x9a, 0x98, 0x63, 0x5d, 0xab, 0x69, 0xab, 0xe5, 0xf5, + 0xf7, 0x8d, 0x38, 0xb1, 0x23, 0x07, 0x0d, 0xbf, 0xd3, 0x12, 0x02, 0x66, 0x08, 0xb6, 0xd1, 0x5f, + 0x33, 0x3e, 0x93, 0xb6, 0x9e, 0x10, 0x8e, 0x1b, 0xf0, 0x64, 0x50, 0xcd, 0x84, 0x83, 0x2a, 0x88, + 0x65, 0x68, 0x64, 0x15, 0x3e, 0x07, 0x79, 0xe6, 0x13, 0x5b, 0xcf, 0x4a, 0xeb, 0x1f, 0x19, 0x93, + 0x9e, 0xcd, 0x48, 0x71, 0x73, 0xcf, 0x27, 0x76, 0xe3, 0x96, 0xba, 0x26, 0x2f, 0x4e, 0x48, 0x1a, + 0x85, 0x36, 0x98, 0x61, 0x1c, 0xf3, 0x80, 0xe9, 0x39, 0x69, 0xfe, 0xe3, 0x9b, 0x99, 0x97, 0x26, + 0x1a, 0x6f, 0xa8, 0x0b, 0x66, 0xa2, 0x33, 0x52, 0xa6, 0xeb, 0xcf, 0xc1, 0xd2, 0x53, 0xcf, 0x45, + 0x84, 0x79, 0x01, 0xb5, 0xc9, 0x16, 0xe7, 0xd4, 0xb1, 0x02, 0x4e, 0x18, 0xac, 0x81, 0xbc, 0x8f, + 0x79, 0x5b, 0x26, 0xae, 0x14, 0xfb, 0xf7, 0x0c, 0xf3, 0x36, 0x92, 0x88, 0x60, 0xf4, 0x09, 0xb5, + 0x64, 0xf0, 0x09, 0xc6, 0x01, 0xa1, 0x16, 0x92, 0x48, 0xfd, 0x1b, 0x30, 0x9f, 0x30, 0x8e, 0x82, + 0xae, 0x7c, 0x5b, 0x01, 0x8d, 0xbd, 0xad, 0xd0, 0x60, 0x28, 0x92, 0xc3, 0x47, 0x60, 0xde, 0x8d, + 0x75, 0xf6, 0xd1, 0x63, 0xa6, 0x67, 0x25, 0x75, 0x31, 0x1c, 0x54, 0x93, 0xe6, 0x04, 0x84, 0xce, + 0x73, 0x45, 0x41, 0xc0, 0x94, 0x68, 0x4c, 0x50, 0x72, 0x71, 0x8f, 0x30, 0x1f, 0xdb, 0x44, 0x85, + 0x74, 0x5b, 0x39, 0x5c, 0x7a, 0x3a, 0x04, 0x50, 0xcc, 0x99, 0x1c, 0x1c, 0x7c, 0x1b, 0x14, 0x5a, + 0xd4, 0x0b, 0x7c, 0xf9, 0x3a, 0xa5, 0xc6, 0x9c, 0xa2, 0x14, 0x3e, 0x15, 0x42, 0x14, 0x61, 0xf0, + 0x5d, 0x30, 0xdb, 0x27, 0x94, 0x39, 0x9e, 0xab, 0xe7, 0x25, 0x6d, 0x5e, 0xd1, 0x66, 0x0f, 0x22, + 0x31, 0x1a, 0xe2, 0xf0, 0x1e, 0x28, 0x52, 0xe5, 0xb8, 0x5e, 0x90, 0xdc, 0x05, 0xc5, 0x2d, 0x8e, + 0x32, 0x38, 0x62, 0xc0, 0x0f, 0x40, 0x99, 0x05, 0xd6, 0x48, 0x61, 0x46, 0x2a, 0x2c, 0x2a, 0x85, + 0xf2, 0x5e, 0x0c, 0xa1, 0x24, 0x4f, 0x84, 0x25, 0x62, 0xd4, 0x67, 0xc7, 0xc3, 0x12, 0x29, 0x40, + 0x12, 0xa9, 0xff, 0xa1, 0x81, 0x5b, 0xd3, 0xbd, 0xd8, 0x7b, 0xa0, 0x84, 0x7d, 0x47, 0x86, 0x3d, + 0x7c, 0xab, 0x39, 0x91, 0xd7, 0xad, 0x67, 0xbb, 0x91, 0x10, 0xc5, 0xb8, 0x20, 0x0f, 0x9d, 0x11, + 0x75, 0x3d, 0x22, 0x0f, 0xaf, 0x64, 0x28, 0xc6, 0xe1, 0x06, 0x98, 0x1b, 0x1e, 0xe4, 0x23, 0xe9, + 0x79, 0xa9, 0x70, 0x3b, 0x1c, 0x54, 0xe7, 0x50, 0x12, 0x40, 0xe3, 0xbc, 0xfa, 0xef, 0x59, 0xb0, + 0xbc, 0x47, 0xba, 0x87, 0xaf, 0x66, 0x2a, 0x7c, 0x39, 0x36, 0x15, 0x1e, 0x5d, 0xa3, 0x6d, 0xd3, + 0x5d, 0x7d, 0xb5, 0x93, 0xe1, 0x97, 0x2c, 0x78, 0xf3, 0x0a, 0xc7, 0xe0, 0xf7, 0x00, 0xd2, 0x0b, + 0x8d, 0xa6, 0x32, 0xfa, 0x60, 0xb2, 0x43, 0x17, 0x9b, 0xb4, 0x71, 0x27, 0x1c, 0x54, 0x53, 0x9a, + 0x17, 0xa5, 0xdc, 0x03, 0x7f, 0xd0, 0xc0, 0x92, 0x9b, 0x36, 0xb8, 0x54, 0xd6, 0x37, 0x26, 0x7b, + 0x90, 0x3a, 0xf7, 0x1a, 0x77, 0xc3, 0x41, 0x35, 0x7d, 0x24, 0xa2, 0xf4, 0x0b, 0xc5, 0xc8, 0xb9, + 0x93, 0x48, 0x94, 0x68, 0x9a, 0xff, 0xaf, 0xd6, 0xbe, 0x18, 0xab, 0xb5, 0x4f, 0xa6, 0xaa, 0xb5, + 0x84, 0xa7, 0x97, 0x96, 0x9a, 0x75, 0xae, 0xd4, 0x36, 0xaf, 0x5d, 0x6a, 0x49, 0xeb, 0x57, 0x57, + 0xda, 0x13, 0xb0, 0x72, 0xb9, 0x57, 0x53, 0x8f, 0xee, 0xfa, 0xaf, 0x59, 0xb0, 0xf8, 0x7a, 0x1d, + 0xb8, 0x59, 0xd3, 0x9f, 0xe6, 0xc1, 0xf2, 0xeb, 0x86, 0xbf, 0xba, 0xe1, 0xc5, 0x4f, 0x34, 0x60, + 0x84, 0xaa, 0x1f, 0xff, 0xe8, 0xad, 0xf6, 0x19, 0xa1, 0x48, 0x22, 0xb0, 0x36, 0xdc, 0x0d, 0xa2, + 0x1f, 0x16, 0x10, 0x99, 0x56, 0xff, 0x42, 0xb5, 0x18, 0x38, 0xa0, 0x40, 0xc4, 0xc6, 0xab, 0x17, + 0x6a, 0xb9, 0xd5, 0xf2, 0xfa, 0xf6, 0x8d, 0x6b, 0xc5, 0x90, 0x8b, 0xf3, 0x8e, 0xcb, 0xe9, 0x71, + 0xbc, 0x83, 0x48, 0x19, 0x8a, 0x6e, 0x80, 0x6f, 0x81, 0x5c, 0xe0, 0x34, 0xd5, 0x8a, 0x50, 0x56, + 0x94, 0xdc, 0xfe, 0xee, 0x36, 0x12, 0xf2, 0x95, 0x43, 0xb5, 0x7b, 0x4b, 0x13, 0x70, 0x01, 0xe4, + 0x3a, 0xe4, 0x38, 0xea, 0x33, 0x24, 0x3e, 0x61, 0x03, 0x14, 0xfa, 0x62, 0x2d, 0x57, 0x79, 0xbe, + 0x37, 0xd9, 0xd3, 0x78, 0x95, 0x47, 0x91, 0xea, 0x66, 0xf6, 0xa1, 0x56, 0xff, 0x53, 0x03, 0x77, + 0x2f, 0x2d, 0x48, 0xb1, 0x28, 0xe1, 0x6e, 0xd7, 0x3b, 0x22, 0x4d, 0x79, 0x77, 0x31, 0x5e, 0x94, + 0xb6, 0x22, 0x31, 0x1a, 0xe2, 0xf0, 0x1d, 0x30, 0xd3, 0x24, 0xae, 0x43, 0x9a, 0x72, 0xa5, 0x2a, + 0xc6, 0xb5, 0xbc, 0x2d, 0xa5, 0x48, 0xa1, 0x82, 0x47, 0x09, 0x66, 0x9e, 0xab, 0x96, 0xb8, 0x11, + 0x0f, 0x49, 0x29, 0x52, 0x28, 0xdc, 0x02, 0xf3, 0x44, 0xb8, 0x29, 0x83, 0xd8, 0xa1, 0xd4, 0x1b, + 0xbe, 0xec, 0xb2, 0x52, 0x98, 0xdf, 0x19, 0x87, 0xd1, 0x79, 0x7e, 0xfd, 0xdf, 0x2c, 0xd0, 0x2f, + 0x1b, 0x7b, 0xb0, 0x13, 0x6f, 0x31, 0x12, 0x94, 0x8b, 0x54, 0x79, 0xdd, 0xb8, 0x7e, 0xcb, 0x08, + 0xb5, 0xc6, 0x92, 0xf2, 0x66, 0x2e, 0x29, 0x4d, 0x6c, 0x3e, 0xf2, 0x08, 0x8f, 0xc0, 0x82, 0x3b, + 0xbe, 0x72, 0x47, 0x3b, 0x59, 0x79, 0x7d, 0x6d, 0xaa, 0x06, 0x91, 0x57, 0xea, 0xea, 0xca, 0x85, + 0x73, 0x00, 0x43, 0x17, 0x2e, 0x81, 0xeb, 0x00, 0x38, 0xae, 0xed, 0xf5, 0xfc, 0x2e, 0xe1, 0x44, + 0x26, 0xb0, 0x18, 0x4f, 0xcb, 0xdd, 0x11, 0x82, 0x12, 0xac, 0xb4, 0xcc, 0xe7, 0xa7, 0xcb, 0x7c, + 0xe3, 0xfe, 0xc9, 0x59, 0x25, 0xf3, 0xf2, 0xac, 0x92, 0x39, 0x3d, 0xab, 0x64, 0x5e, 0x84, 0x15, + 0xed, 0x24, 0xac, 0x68, 0x2f, 0xc3, 0x8a, 0x76, 0x1a, 0x56, 0xb4, 0xbf, 0xc3, 0x8a, 0xf6, 0xe3, + 0x3f, 0x95, 0xcc, 0xe7, 0xb3, 0x2a, 0xc2, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7b, 0xc9, 0xa5, + 0x34, 0xa4, 0x0f, 0x00, 0x00, +} + func (m ExtraValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -159,32 +545,31 @@ } func (m ExtraValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m ExtraValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m) > 0 { - for _, s := range m { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } func (m *LocalSubjectAccessReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -192,41 +577,52 @@ } func (m *LocalSubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LocalSubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NonResourceAttributes) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -234,25 +630,32 @@ } func (m *NonResourceAttributes) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NonResourceAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x12 - i++ + i -= len(m.Verb) + copy(dAtA[i:], m.Verb) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) - i += copy(dAtA[i:], m.Verb) - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NonResourceRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -260,47 +663,40 @@ } func (m *NonResourceRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NonResourceRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } if len(m.NonResourceURLs) > 0 { - for _, s := range m.NonResourceURLs { + for iNdEx := len(m.NonResourceURLs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NonResourceURLs[iNdEx]) + copy(dAtA[i:], m.NonResourceURLs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLs[iNdEx]))) + i-- dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } func (m *ResourceAttributes) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -308,45 +704,57 @@ } func (m *ResourceAttributes) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) - i += copy(dAtA[i:], m.Verb) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) - i += copy(dAtA[i:], m.Resource) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subresource))) - i += copy(dAtA[i:], m.Subresource) - dAtA[i] = 0x3a - i++ + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + i-- + dAtA[i] = 0x3a + i -= len(m.Subresource) + copy(dAtA[i:], m.Subresource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subresource))) + i-- + dAtA[i] = 0x32 + i -= len(m.Resource) + copy(dAtA[i:], m.Resource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) + i-- + dAtA[i] = 0x2a + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x22 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x1a + i -= len(m.Verb) + copy(dAtA[i:], m.Verb) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ResourceRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -354,77 +762,58 @@ } func (m *ResourceRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0x22 } } if len(m.Resources) > 0 { - for _, s := range m.Resources { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - return i, nil + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } func (m *SelfSubjectAccessReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -432,41 +821,52 @@ } func (m *SelfSubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n5, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n6, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SelfSubjectAccessReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -474,37 +874,46 @@ } func (m *SelfSubjectAccessReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectAccessReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ResourceAttributes != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceAttributes.Size())) - n7, err := m.ResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } if m.NonResourceAttributes != nil { + { + size, err := m.NonResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NonResourceAttributes.Size())) - n8, err := m.NonResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.ResourceAttributes != nil { + { + size, err := m.ResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *SelfSubjectRulesReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -512,41 +921,52 @@ } func (m *SelfSubjectRulesReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectRulesReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n9, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n10, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n11, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SelfSubjectRulesReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -554,21 +974,27 @@ } func (m *SelfSubjectRulesReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectRulesReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SubjectAccessReview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -576,41 +1002,52 @@ } func (m *SubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n12, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n13, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n13 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n14, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n14 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SubjectAccessReviewSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -618,91 +1055,94 @@ } func (m *SubjectAccessReviewSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ResourceAttributes != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceAttributes.Size())) - n15, err := m.ResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n15 - } - if m.NonResourceAttributes != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NonResourceAttributes.Size())) - n16, err := m.NonResourceAttributes.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n16 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) - if len(m.Groups) > 0 { - for _, s := range m.Groups { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x32 if len(m.Extra) > 0 { keysForExtra := make([]string, 0, len(m.Extra)) for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) - for _, k := range keysForExtra { - dAtA[i] = 0x2a - i++ - v := m.Extra[string(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n17, err := (&v).MarshalTo(dAtA[i:]) + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x1a + if m.NonResourceAttributes != nil { + { + size, err := m.NonResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n17 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - return i, nil + if m.ResourceAttributes != nil { + { + size, err := m.ResourceAttributes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *SubjectAccessReviewStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -710,41 +1150,48 @@ } func (m *SubjectAccessReviewStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Allowed { + i-- + if m.Denied { dAtA[i] = 1 } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) - i += copy(dAtA[i:], m.EvaluationError) + dAtA[i] = 0 + } + i-- dAtA[i] = 0x20 - i++ - if m.Denied { + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x1a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x12 + i-- + if m.Allowed { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *SubjectRulesReviewStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -752,77 +1199,74 @@ } func (m *SubjectRulesReviewStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectRulesReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.ResourceRules) > 0 { - for _, msg := range m.ResourceRules { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x22 + i-- + if m.Incomplete { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x18 if len(m.NonResourceRules) > 0 { - for _, msg := range m.NonResourceRules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.NonResourceRules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NonResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x18 - i++ - if m.Incomplete { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.ResourceRules) > 0 { + for iNdEx := len(m.ResourceRules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ResourceRules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - i++ - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) - i += copy(dAtA[i:], m.EvaluationError) - return i, nil + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m ExtraValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m) > 0 { @@ -835,6 +1279,9 @@ } func (m *LocalSubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -847,6 +1294,9 @@ } func (m *NonResourceAttributes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Path) @@ -857,6 +1307,9 @@ } func (m *NonResourceRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -875,6 +1328,9 @@ } func (m *ResourceAttributes) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Namespace) @@ -895,6 +1351,9 @@ } func (m *ResourceRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -925,6 +1384,9 @@ } func (m *SelfSubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -937,6 +1399,9 @@ } func (m *SelfSubjectAccessReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ResourceAttributes != nil { @@ -951,6 +1416,9 @@ } func (m *SelfSubjectRulesReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -963,6 +1431,9 @@ } func (m *SelfSubjectRulesReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Namespace) @@ -971,6 +1442,9 @@ } func (m *SubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -983,6 +1457,9 @@ } func (m *SubjectAccessReviewSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ResourceAttributes != nil { @@ -1016,6 +1493,9 @@ } func (m *SubjectAccessReviewStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -1028,6 +1508,9 @@ } func (m *SubjectRulesReviewStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.ResourceRules) > 0 { @@ -1049,14 +1532,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1066,7 +1542,7 @@ return "nil" } s := strings.Join([]string{`&LocalSubjectAccessReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectAccessReviewSpec", "SubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1129,7 +1605,7 @@ return "nil" } s := strings.Join([]string{`&SelfSubjectAccessReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SelfSubjectAccessReviewSpec", "SelfSubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1141,8 +1617,8 @@ return "nil" } s := strings.Join([]string{`&SelfSubjectAccessReviewSpec{`, - `ResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.ResourceAttributes), "ResourceAttributes", "ResourceAttributes", 1) + `,`, - `NonResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.NonResourceAttributes), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, + `ResourceAttributes:` + strings.Replace(this.ResourceAttributes.String(), "ResourceAttributes", "ResourceAttributes", 1) + `,`, + `NonResourceAttributes:` + strings.Replace(this.NonResourceAttributes.String(), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, `}`, }, "") return s @@ -1152,7 +1628,7 @@ return "nil" } s := strings.Join([]string{`&SelfSubjectRulesReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SelfSubjectRulesReviewSpec", "SelfSubjectRulesReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectRulesReviewStatus", "SubjectRulesReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1174,7 +1650,7 @@ return "nil" } s := strings.Join([]string{`&SubjectAccessReview{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectAccessReviewSpec", "SubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1196,8 +1672,8 @@ } mapStringForExtra += "}" s := strings.Join([]string{`&SubjectAccessReviewSpec{`, - `ResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.ResourceAttributes), "ResourceAttributes", "ResourceAttributes", 1) + `,`, - `NonResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.NonResourceAttributes), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, + `ResourceAttributes:` + strings.Replace(this.ResourceAttributes.String(), "ResourceAttributes", "ResourceAttributes", 1) + `,`, + `NonResourceAttributes:` + strings.Replace(this.NonResourceAttributes.String(), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, `User:` + fmt.Sprintf("%v", this.User) + `,`, `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, `Extra:` + mapStringForExtra + `,`, @@ -1223,9 +1699,19 @@ if this == nil { return "nil" } + repeatedStringForResourceRules := "[]ResourceRule{" + for _, f := range this.ResourceRules { + repeatedStringForResourceRules += strings.Replace(strings.Replace(f.String(), "ResourceRule", "ResourceRule", 1), `&`, ``, 1) + "," + } + repeatedStringForResourceRules += "}" + repeatedStringForNonResourceRules := "[]NonResourceRule{" + for _, f := range this.NonResourceRules { + repeatedStringForNonResourceRules += strings.Replace(strings.Replace(f.String(), "NonResourceRule", "NonResourceRule", 1), `&`, ``, 1) + "," + } + repeatedStringForNonResourceRules += "}" s := strings.Join([]string{`&SubjectRulesReviewStatus{`, - `ResourceRules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ResourceRules), "ResourceRule", "ResourceRule", 1), `&`, ``, 1) + `,`, - `NonResourceRules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NonResourceRules), "NonResourceRule", "NonResourceRule", 1), `&`, ``, 1) + `,`, + `ResourceRules:` + repeatedStringForResourceRules + `,`, + `NonResourceRules:` + repeatedStringForNonResourceRules + `,`, `Incomplete:` + fmt.Sprintf("%v", this.Incomplete) + `,`, `EvaluationError:` + fmt.Sprintf("%v", this.EvaluationError) + `,`, `}`, @@ -1255,7 +1741,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1283,7 +1769,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1293,6 +1779,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1307,6 +1796,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1334,7 +1826,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1362,7 +1854,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1371,6 +1863,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1392,7 +1887,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1401,6 +1896,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1422,7 +1920,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1431,6 +1929,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1447,6 +1948,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1474,7 +1978,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1502,7 +2006,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1512,6 +2016,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1531,7 +2038,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1541,6 +2048,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1555,6 +2065,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1582,7 +2095,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1610,7 +2123,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1620,6 +2133,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1639,7 +2155,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1649,6 +2165,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1663,6 +2182,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1690,7 +2212,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1718,7 +2240,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1728,6 +2250,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1747,7 +2272,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1757,6 +2282,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1776,7 +2304,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1786,6 +2314,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1805,7 +2336,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1815,6 +2346,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1834,7 +2368,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1844,6 +2378,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1863,7 +2400,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1873,6 +2410,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1892,7 +2432,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1902,6 +2442,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1916,6 +2459,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1943,7 +2489,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1971,7 +2517,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1981,6 +2527,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2000,7 +2549,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2010,6 +2559,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2029,7 +2581,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2039,6 +2591,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2058,7 +2613,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2068,6 +2623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2082,6 +2640,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2109,7 +2670,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2137,7 +2698,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2146,6 +2707,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2167,7 +2731,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2176,6 +2740,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2197,7 +2764,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2206,6 +2773,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2222,6 +2792,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2249,7 +2822,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2277,7 +2850,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2286,6 +2859,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2310,7 +2886,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2319,6 +2895,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2338,6 +2917,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2365,7 +2947,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2393,7 +2975,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2402,6 +2984,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2423,7 +3008,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2432,6 +3017,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2453,7 +3041,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2462,6 +3050,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2478,6 +3069,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2505,7 +3099,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2533,7 +3127,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2543,6 +3137,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2557,6 +3154,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2584,7 +3184,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2612,7 +3212,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2621,6 +3221,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2642,7 +3245,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2651,6 +3254,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2672,7 +3278,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2681,6 +3287,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2697,6 +3306,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2724,7 +3336,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2752,7 +3364,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2761,6 +3373,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2785,7 +3400,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2794,6 +3409,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2818,7 +3436,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2828,6 +3446,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2847,7 +3468,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2857,6 +3478,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2876,7 +3500,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2885,54 +3509,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Extra == nil { m.Extra = make(map[string]ExtraValue) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := &ExtraValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2942,46 +3532,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ExtraValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &ExtraValue{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Extra[mapkey] = *mapvalue - } else { - var mapvalue ExtraValue - m.Extra[mapkey] = mapvalue } + m.Extra[mapkey] = *mapvalue iNdEx = postIndex case 6: if wireType != 2 { @@ -2997,7 +3629,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3007,6 +3639,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3021,6 +3656,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3048,7 +3686,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3076,7 +3714,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3096,7 +3734,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3106,6 +3744,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3125,7 +3766,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3135,6 +3776,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3154,7 +3798,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3169,6 +3813,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3196,7 +3843,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3224,7 +3871,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3233,6 +3880,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3255,7 +3905,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3264,6 +3914,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3286,7 +3939,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3306,7 +3959,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3316,6 +3969,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3330,6 +3986,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3396,10 +4055,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -3428,6 +4090,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -3446,83 +4111,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/authorization/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 1137 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0xcb, 0x6f, 0x1b, 0x45, - 0x18, 0xf7, 0xfa, 0x91, 0xd8, 0xe3, 0x86, 0xa4, 0x13, 0xa5, 0xd9, 0x06, 0x61, 0x5b, 0x46, 0x42, - 0x41, 0xb4, 0xbb, 0x24, 0x2a, 0xa4, 0x04, 0x7a, 0x88, 0x95, 0x08, 0x45, 0x6a, 0x4b, 0x35, 0x51, - 0x72, 0xa0, 0x12, 0x30, 0xbb, 0x9e, 0xd8, 0x8b, 0xed, 0xdd, 0x65, 0x66, 0xd6, 0x21, 0x88, 0x43, - 0x8f, 0x1c, 0x39, 0x72, 0xe4, 0xc4, 0xff, 0xc0, 0x05, 0x09, 0x4e, 0x39, 0xf6, 0x18, 0x24, 0x64, - 0x91, 0xe5, 0x8f, 0xe0, 0x8a, 0x66, 0x76, 0xec, 0x5d, 0x27, 0x9b, 0x38, 0xce, 0x81, 0x5e, 0x7a, - 0xdb, 0xf9, 0x7e, 0xdf, 0xfb, 0xb5, 0x1f, 0xd8, 0xed, 0x3c, 0x64, 0x86, 0xe3, 0x99, 0x9d, 0xc0, - 0x22, 0xd4, 0x25, 0x9c, 0x30, 0xb3, 0x4f, 0xdc, 0xa6, 0x47, 0x4d, 0x05, 0x60, 0xdf, 0x31, 0x71, - 0xc0, 0xdb, 0x1e, 0x75, 0xbe, 0xc3, 0xdc, 0xf1, 0x5c, 0xb3, 0xbf, 0x66, 0x11, 0x8e, 0xd7, 0xcc, - 0x16, 0x71, 0x09, 0xc5, 0x9c, 0x34, 0x0d, 0x9f, 0x7a, 0xdc, 0x83, 0xb5, 0x48, 0xc2, 0xc0, 0xbe, - 0x63, 0x8c, 0x49, 0x18, 0x4a, 0x62, 0xe5, 0x7e, 0xcb, 0xe1, 0xed, 0xc0, 0x32, 0x6c, 0xaf, 0x67, - 0xb6, 0xbc, 0x96, 0x67, 0x4a, 0x41, 0x2b, 0x38, 0x94, 0x2f, 0xf9, 0x90, 0x5f, 0x91, 0xc2, 0x95, - 0x07, 0xb1, 0x0b, 0x3d, 0x6c, 0xb7, 0x1d, 0x97, 0xd0, 0x63, 0xd3, 0xef, 0xb4, 0x04, 0x81, 0x99, - 0x3d, 0xc2, 0xb1, 0xd9, 0xbf, 0xe0, 0xc6, 0x8a, 0x79, 0x99, 0x14, 0x0d, 0x5c, 0xee, 0xf4, 0xc8, - 0x05, 0x81, 0x0f, 0x27, 0x09, 0x30, 0xbb, 0x4d, 0x7a, 0xf8, 0xbc, 0x5c, 0x7d, 0x03, 0x80, 0x9d, - 0x6f, 0x39, 0xc5, 0x07, 0xb8, 0x1b, 0x10, 0x58, 0x05, 0x05, 0x87, 0x93, 0x1e, 0xd3, 0xb5, 0x5a, - 0x6e, 0xb5, 0xd4, 0x28, 0x85, 0x83, 0x6a, 0x61, 0x57, 0x10, 0x50, 0x44, 0xdf, 0x2c, 0xfe, 0xf4, - 0x73, 0x35, 0xf3, 0xe2, 0xaf, 0x5a, 0xa6, 0xfe, 0x5b, 0x16, 0xe8, 0x8f, 0x3d, 0x1b, 0x77, 0xf7, - 0x02, 0xeb, 0x6b, 0x62, 0xf3, 0x2d, 0xdb, 0x26, 0x8c, 0x21, 0xd2, 0x77, 0xc8, 0x11, 0xfc, 0x0a, - 0x14, 0x45, 0x64, 0x4d, 0xcc, 0xb1, 0xae, 0xd5, 0xb4, 0xd5, 0xf2, 0xfa, 0xfb, 0x46, 0x9c, 0xd8, - 0x91, 0x83, 0x86, 0xdf, 0x69, 0x09, 0x02, 0x33, 0x04, 0xb7, 0xd1, 0x5f, 0x33, 0x3e, 0x93, 0xba, - 0x9e, 0x10, 0x8e, 0x1b, 0xf0, 0x64, 0x50, 0xcd, 0x84, 0x83, 0x2a, 0x88, 0x69, 0x68, 0xa4, 0x15, - 0x3e, 0x07, 0x79, 0xe6, 0x13, 0x5b, 0xcf, 0x4a, 0xed, 0x1f, 0x19, 0x93, 0xca, 0x66, 0xa4, 0xb8, - 0xb9, 0xe7, 0x13, 0xbb, 0x71, 0x4b, 0x99, 0xc9, 0x8b, 0x17, 0x92, 0x4a, 0xa1, 0x0d, 0x66, 0x18, - 0xc7, 0x3c, 0x60, 0x7a, 0x4e, 0xaa, 0xff, 0xf8, 0x66, 0xea, 0xa5, 0x8a, 0xc6, 0x1b, 0xca, 0xc0, - 0x4c, 0xf4, 0x46, 0x4a, 0x75, 0xfd, 0x39, 0x58, 0x7a, 0xea, 0xb9, 0x88, 0x30, 0x2f, 0xa0, 0x36, - 0xd9, 0xe2, 0x9c, 0x3a, 0x56, 0xc0, 0x09, 0x83, 0x35, 0x90, 0xf7, 0x31, 0x6f, 0xcb, 0xc4, 0x95, - 0x62, 0xff, 0x9e, 0x61, 0xde, 0x46, 0x12, 0x11, 0x1c, 0x7d, 0x42, 0x2d, 0x19, 0x7c, 0x82, 0xe3, - 0x80, 0x50, 0x0b, 0x49, 0xa4, 0xfe, 0x0d, 0x98, 0x4f, 0x28, 0x47, 0x41, 0x57, 0xd6, 0x56, 0x40, - 0x63, 0xb5, 0x15, 0x12, 0x0c, 0x45, 0x74, 0xf8, 0x08, 0xcc, 0xbb, 0xb1, 0xcc, 0x3e, 0x7a, 0xcc, - 0xf4, 0xac, 0x64, 0x5d, 0x0c, 0x07, 0xd5, 0xa4, 0x3a, 0x01, 0xa1, 0xf3, 0xbc, 0xa2, 0x21, 0x60, - 0x4a, 0x34, 0x26, 0x28, 0xb9, 0xb8, 0x47, 0x98, 0x8f, 0x6d, 0xa2, 0x42, 0xba, 0xad, 0x1c, 0x2e, - 0x3d, 0x1d, 0x02, 0x28, 0xe6, 0x99, 0x1c, 0x1c, 0x7c, 0x1b, 0x14, 0x5a, 0xd4, 0x0b, 0x7c, 0x59, - 0x9d, 0x52, 0x63, 0x4e, 0xb1, 0x14, 0x3e, 0x15, 0x44, 0x14, 0x61, 0xf0, 0x5d, 0x30, 0xdb, 0x27, - 0x94, 0x39, 0x9e, 0xab, 0xe7, 0x25, 0xdb, 0xbc, 0x62, 0x9b, 0x3d, 0x88, 0xc8, 0x68, 0x88, 0xc3, - 0x7b, 0xa0, 0x48, 0x95, 0xe3, 0x7a, 0x41, 0xf2, 0x2e, 0x28, 0xde, 0xe2, 0x28, 0x83, 0x23, 0x0e, - 0xf8, 0x01, 0x28, 0xb3, 0xc0, 0x1a, 0x09, 0xcc, 0x48, 0x81, 0x45, 0x25, 0x50, 0xde, 0x8b, 0x21, - 0x94, 0xe4, 0x13, 0x61, 0x89, 0x18, 0xf5, 0xd9, 0xf1, 0xb0, 0x44, 0x0a, 0x90, 0x44, 0xea, 0x7f, - 0x68, 0xe0, 0xd6, 0x74, 0x15, 0x7b, 0x0f, 0x94, 0xb0, 0xef, 0xc8, 0xb0, 0x87, 0xb5, 0x9a, 0x13, - 0x79, 0xdd, 0x7a, 0xb6, 0x1b, 0x11, 0x51, 0x8c, 0x0b, 0xe6, 0xa1, 0x33, 0xa2, 0xaf, 0x47, 0xcc, - 0x43, 0x93, 0x0c, 0xc5, 0x38, 0xdc, 0x00, 0x73, 0xc3, 0x87, 0x2c, 0x92, 0x9e, 0x97, 0x02, 0xb7, - 0xc3, 0x41, 0x75, 0x0e, 0x25, 0x01, 0x34, 0xce, 0x57, 0xff, 0x3d, 0x0b, 0x96, 0xf7, 0x48, 0xf7, - 0xf0, 0xd5, 0x6c, 0x85, 0x2f, 0xc7, 0xb6, 0xc2, 0xa3, 0x6b, 0x8c, 0x6d, 0xba, 0xab, 0xaf, 0x76, - 0x33, 0xfc, 0x92, 0x05, 0x6f, 0x5e, 0xe1, 0x18, 0xfc, 0x1e, 0x40, 0x7a, 0x61, 0xd0, 0x54, 0x46, - 0x1f, 0x4c, 0x76, 0xe8, 0xe2, 0x90, 0x36, 0xee, 0x84, 0x83, 0x6a, 0xca, 0xf0, 0xa2, 0x14, 0x3b, - 0xf0, 0x07, 0x0d, 0x2c, 0xb9, 0x69, 0x8b, 0x4b, 0x65, 0x7d, 0x63, 0xb2, 0x07, 0xa9, 0x7b, 0xaf, - 0x71, 0x37, 0x1c, 0x54, 0xd3, 0x57, 0x22, 0x4a, 0x37, 0x28, 0x56, 0xce, 0x9d, 0x44, 0xa2, 0xc4, - 0xd0, 0xfc, 0x7f, 0xbd, 0xf6, 0xc5, 0x58, 0xaf, 0x7d, 0x32, 0x55, 0xaf, 0x25, 0x3c, 0xbd, 0xb4, - 0xd5, 0xac, 0x73, 0xad, 0xb6, 0x79, 0xed, 0x56, 0x4b, 0x6a, 0xbf, 0xba, 0xd3, 0x9e, 0x80, 0x95, - 0xcb, 0xbd, 0x9a, 0x7a, 0x75, 0xd7, 0x7f, 0xcd, 0x82, 0xc5, 0xd7, 0xe7, 0xc0, 0xcd, 0x86, 0xfe, - 0x34, 0x0f, 0x96, 0x5f, 0x0f, 0xfc, 0xd5, 0x03, 0x2f, 0x7e, 0xa2, 0x01, 0x23, 0x54, 0xfd, 0xf8, - 0x47, 0xb5, 0xda, 0x67, 0x84, 0x22, 0x89, 0xc0, 0xda, 0xf0, 0x36, 0x88, 0x7e, 0x58, 0x40, 0x64, - 0x5a, 0xfd, 0x0b, 0xd5, 0x61, 0xe0, 0x80, 0x02, 0x11, 0x17, 0xaf, 0x5e, 0xa8, 0xe5, 0x56, 0xcb, - 0xeb, 0xdb, 0x37, 0xee, 0x15, 0x43, 0x1e, 0xce, 0x3b, 0x2e, 0xa7, 0xc7, 0xf1, 0x0d, 0x22, 0x69, - 0x28, 0xb2, 0x00, 0xdf, 0x02, 0xb9, 0xc0, 0x69, 0xaa, 0x13, 0xa1, 0xac, 0x58, 0x72, 0xfb, 0xbb, - 0xdb, 0x48, 0xd0, 0x57, 0x0e, 0xd5, 0xed, 0x2d, 0x55, 0xc0, 0x05, 0x90, 0xeb, 0x90, 0xe3, 0x68, - 0xce, 0x90, 0xf8, 0x84, 0x0d, 0x50, 0xe8, 0x8b, 0xb3, 0x5c, 0xe5, 0xf9, 0xde, 0x64, 0x4f, 0xe3, - 0x53, 0x1e, 0x45, 0xa2, 0x9b, 0xd9, 0x87, 0x5a, 0xfd, 0x4f, 0x0d, 0xdc, 0xbd, 0xb4, 0x21, 0xc5, - 0xa1, 0x84, 0xbb, 0x5d, 0xef, 0x88, 0x34, 0xa5, 0xed, 0x62, 0x7c, 0x28, 0x6d, 0x45, 0x64, 0x34, - 0xc4, 0xe1, 0x3b, 0x60, 0x86, 0x12, 0xcc, 0x3c, 0x57, 0x1d, 0x67, 0xa3, 0x5e, 0x46, 0x92, 0x8a, - 0x14, 0x0a, 0xb7, 0xc0, 0x3c, 0x11, 0xe6, 0xa5, 0x73, 0x3b, 0x94, 0x7a, 0xc3, 0x8a, 0x2d, 0x2b, - 0x81, 0xf9, 0x9d, 0x71, 0x18, 0x9d, 0xe7, 0x17, 0xa6, 0x9a, 0xc4, 0x75, 0x48, 0x53, 0x5e, 0x6f, - 0xc5, 0xd8, 0xd4, 0xb6, 0xa4, 0x22, 0x85, 0xd6, 0xff, 0xcd, 0x02, 0xfd, 0xb2, 0xb5, 0x07, 0x3b, - 0xf1, 0x15, 0x23, 0x41, 0x79, 0x48, 0x95, 0xd7, 0x8d, 0xeb, 0x8f, 0x8c, 0x10, 0x6b, 0x2c, 0x29, - 0xdb, 0x73, 0x49, 0x6a, 0xe2, 0xf2, 0x91, 0x4f, 0x78, 0x04, 0x16, 0xdc, 0xf1, 0x93, 0x3b, 0xba, - 0xc9, 0xca, 0xeb, 0x6b, 0x53, 0x0d, 0x88, 0x34, 0xa9, 0x2b, 0x93, 0x0b, 0xe7, 0x00, 0x86, 0x2e, - 0x18, 0x81, 0xeb, 0x00, 0x38, 0xae, 0xed, 0xf5, 0xfc, 0x2e, 0xe1, 0x44, 0x26, 0xba, 0x18, 0x6f, - 0xcb, 0xdd, 0x11, 0x82, 0x12, 0x5c, 0x69, 0x15, 0xca, 0x4f, 0x57, 0xa1, 0xc6, 0xfd, 0x93, 0xb3, - 0x4a, 0xe6, 0xe5, 0x59, 0x25, 0x73, 0x7a, 0x56, 0xc9, 0xbc, 0x08, 0x2b, 0xda, 0x49, 0x58, 0xd1, - 0x5e, 0x86, 0x15, 0xed, 0x34, 0xac, 0x68, 0x7f, 0x87, 0x15, 0xed, 0xc7, 0x7f, 0x2a, 0x99, 0xcf, - 0x67, 0x55, 0x84, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xc5, 0xba, 0xf8, 0x96, 0xa4, 0x0f, 0x00, - 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/authorization/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -199,21 +199,13 @@ *out = *in if in.ResourceAttributes != nil { in, out := &in.ResourceAttributes, &out.ResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(ResourceAttributes) - **out = **in - } + *out = new(ResourceAttributes) + **out = **in } if in.NonResourceAttributes != nil { in, out := &in.NonResourceAttributes, &out.NonResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(NonResourceAttributes) - **out = **in - } + *out = new(NonResourceAttributes) + **out = **in } return } @@ -305,21 +297,13 @@ *out = *in if in.ResourceAttributes != nil { in, out := &in.ResourceAttributes, &out.ResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(ResourceAttributes) - **out = **in - } + *out = new(ResourceAttributes) + **out = **in } if in.NonResourceAttributes != nil { in, out := &in.NonResourceAttributes, &out.NonResourceAttributes - if *in == nil { - *out = nil - } else { - *out = new(NonResourceAttributes) - **out = **in - } + *out = new(NonResourceAttributes) + **out = **in } if in.Groups != nil { in, out := &in.Groups, &out.Groups @@ -330,12 +314,15 @@ in, out := &in.Extra, &out.Extra *out = make(map[string]ExtraValue, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make(ExtraValue, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1 // import "k8s.io/api/autoscaling/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,52 +14,27 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v1/generated.proto - - It has these top-level messages: - CrossVersionObjectReference - ExternalMetricSource - ExternalMetricStatus - HorizontalPodAutoscaler - HorizontalPodAutoscalerCondition - HorizontalPodAutoscalerList - HorizontalPodAutoscalerSpec - HorizontalPodAutoscalerStatus - MetricSpec - MetricStatus - ObjectMetricSource - ObjectMetricStatus - PodsMetricSource - PodsMetricStatus - ResourceMetricSource - ResourceMetricStatus - Scale - ScaleSpec - ScaleStatus -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" + proto "github.com/gogo/protobuf/proto" -import strings "strings" -import reflect "reflect" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + resource "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -75,88 +50,534 @@ func (m *CrossVersionObjectReference) Reset() { *m = CrossVersionObjectReference{} } func (*CrossVersionObjectReference) ProtoMessage() {} func (*CrossVersionObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{0} + return fileDescriptor_2bb1f2101a7f10e2, []int{0} +} +func (m *CrossVersionObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CrossVersionObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CrossVersionObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_CrossVersionObjectReference.Merge(m, src) +} +func (m *CrossVersionObjectReference) XXX_Size() int { + return m.Size() +} +func (m *CrossVersionObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_CrossVersionObjectReference.DiscardUnknown(m) +} + +var xxx_messageInfo_CrossVersionObjectReference proto.InternalMessageInfo + +func (m *ExternalMetricSource) Reset() { *m = ExternalMetricSource{} } +func (*ExternalMetricSource) ProtoMessage() {} +func (*ExternalMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{1} +} +func (m *ExternalMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricSource.Merge(m, src) +} +func (m *ExternalMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ExternalMetricSource proto.InternalMessageInfo + +func (m *ExternalMetricStatus) Reset() { *m = ExternalMetricStatus{} } +func (*ExternalMetricStatus) ProtoMessage() {} +func (*ExternalMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{2} +} +func (m *ExternalMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricStatus.Merge(m, src) +} +func (m *ExternalMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricStatus.DiscardUnknown(m) } -func (m *ExternalMetricSource) Reset() { *m = ExternalMetricSource{} } -func (*ExternalMetricSource) ProtoMessage() {} -func (*ExternalMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +var xxx_messageInfo_ExternalMetricStatus proto.InternalMessageInfo -func (m *ExternalMetricStatus) Reset() { *m = ExternalMetricStatus{} } -func (*ExternalMetricStatus) ProtoMessage() {} -func (*ExternalMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } +func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{3} +} +func (m *HorizontalPodAutoscaler) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscaler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscaler) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscaler.Merge(m, src) +} +func (m *HorizontalPodAutoscaler) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscaler) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscaler.DiscardUnknown(m) +} -func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } -func (*HorizontalPodAutoscaler) ProtoMessage() {} -func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +var xxx_messageInfo_HorizontalPodAutoscaler proto.InternalMessageInfo func (m *HorizontalPodAutoscalerCondition) Reset() { *m = HorizontalPodAutoscalerCondition{} } func (*HorizontalPodAutoscalerCondition) ProtoMessage() {} func (*HorizontalPodAutoscalerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{4} + return fileDescriptor_2bb1f2101a7f10e2, []int{4} +} +func (m *HorizontalPodAutoscalerCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerCondition.Merge(m, src) +} +func (m *HorizontalPodAutoscalerCondition) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerCondition) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerCondition.DiscardUnknown(m) } +var xxx_messageInfo_HorizontalPodAutoscalerCondition proto.InternalMessageInfo + func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } func (*HorizontalPodAutoscalerList) ProtoMessage() {} func (*HorizontalPodAutoscalerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{5} + return fileDescriptor_2bb1f2101a7f10e2, []int{5} +} +func (m *HorizontalPodAutoscalerList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerList) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerList.Merge(m, src) +} +func (m *HorizontalPodAutoscalerList) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerList) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerList.DiscardUnknown(m) } +var xxx_messageInfo_HorizontalPodAutoscalerList proto.InternalMessageInfo + func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} func (*HorizontalPodAutoscalerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{6} + return fileDescriptor_2bb1f2101a7f10e2, []int{6} +} +func (m *HorizontalPodAutoscalerSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } +func (m *HorizontalPodAutoscalerSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerSpec.Merge(m, src) +} +func (m *HorizontalPodAutoscalerSpec) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerSpec) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerSpec proto.InternalMessageInfo func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} func (*HorizontalPodAutoscalerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{7} + return fileDescriptor_2bb1f2101a7f10e2, []int{7} +} +func (m *HorizontalPodAutoscalerStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerStatus.Merge(m, src) +} +func (m *HorizontalPodAutoscalerStatus) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerStatus) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerStatus proto.InternalMessageInfo + +func (m *MetricSpec) Reset() { *m = MetricSpec{} } +func (*MetricSpec) ProtoMessage() {} +func (*MetricSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{8} +} +func (m *MetricSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricSpec.Merge(m, src) +} +func (m *MetricSpec) XXX_Size() int { + return m.Size() +} +func (m *MetricSpec) XXX_DiscardUnknown() { + xxx_messageInfo_MetricSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricSpec proto.InternalMessageInfo + +func (m *MetricStatus) Reset() { *m = MetricStatus{} } +func (*MetricStatus) ProtoMessage() {} +func (*MetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{9} +} +func (m *MetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricStatus.Merge(m, src) +} +func (m *MetricStatus) XXX_Size() int { + return m.Size() +} +func (m *MetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_MetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricStatus proto.InternalMessageInfo + +func (m *ObjectMetricSource) Reset() { *m = ObjectMetricSource{} } +func (*ObjectMetricSource) ProtoMessage() {} +func (*ObjectMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{10} +} +func (m *ObjectMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMetricSource.Merge(m, src) +} +func (m *ObjectMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ObjectMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ObjectMetricSource proto.InternalMessageInfo + +func (m *ObjectMetricStatus) Reset() { *m = ObjectMetricStatus{} } +func (*ObjectMetricStatus) ProtoMessage() {} +func (*ObjectMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{11} +} +func (m *ObjectMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMetricStatus.Merge(m, src) +} +func (m *ObjectMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ObjectMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMetricStatus.DiscardUnknown(m) } -func (m *MetricSpec) Reset() { *m = MetricSpec{} } -func (*MetricSpec) ProtoMessage() {} -func (*MetricSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +var xxx_messageInfo_ObjectMetricStatus proto.InternalMessageInfo -func (m *MetricStatus) Reset() { *m = MetricStatus{} } -func (*MetricStatus) ProtoMessage() {} -func (*MetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (m *PodsMetricSource) Reset() { *m = PodsMetricSource{} } +func (*PodsMetricSource) ProtoMessage() {} +func (*PodsMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{12} +} +func (m *PodsMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodsMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodsMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodsMetricSource.Merge(m, src) +} +func (m *PodsMetricSource) XXX_Size() int { + return m.Size() +} +func (m *PodsMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_PodsMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_PodsMetricSource proto.InternalMessageInfo + +func (m *PodsMetricStatus) Reset() { *m = PodsMetricStatus{} } +func (*PodsMetricStatus) ProtoMessage() {} +func (*PodsMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{13} +} +func (m *PodsMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodsMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodsMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodsMetricStatus.Merge(m, src) +} +func (m *PodsMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *PodsMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodsMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodsMetricStatus proto.InternalMessageInfo + +func (m *ResourceMetricSource) Reset() { *m = ResourceMetricSource{} } +func (*ResourceMetricSource) ProtoMessage() {} +func (*ResourceMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{14} +} +func (m *ResourceMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceMetricSource.Merge(m, src) +} +func (m *ResourceMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ResourceMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceMetricSource.DiscardUnknown(m) +} -func (m *ObjectMetricSource) Reset() { *m = ObjectMetricSource{} } -func (*ObjectMetricSource) ProtoMessage() {} -func (*ObjectMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +var xxx_messageInfo_ResourceMetricSource proto.InternalMessageInfo -func (m *ObjectMetricStatus) Reset() { *m = ObjectMetricStatus{} } -func (*ObjectMetricStatus) ProtoMessage() {} -func (*ObjectMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *ResourceMetricStatus) Reset() { *m = ResourceMetricStatus{} } +func (*ResourceMetricStatus) ProtoMessage() {} +func (*ResourceMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{15} +} +func (m *ResourceMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceMetricStatus.Merge(m, src) +} +func (m *ResourceMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ResourceMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceMetricStatus.DiscardUnknown(m) +} -func (m *PodsMetricSource) Reset() { *m = PodsMetricSource{} } -func (*PodsMetricSource) ProtoMessage() {} -func (*PodsMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +var xxx_messageInfo_ResourceMetricStatus proto.InternalMessageInfo -func (m *PodsMetricStatus) Reset() { *m = PodsMetricStatus{} } -func (*PodsMetricStatus) ProtoMessage() {} -func (*PodsMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +func (m *Scale) Reset() { *m = Scale{} } +func (*Scale) ProtoMessage() {} +func (*Scale) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{16} +} +func (m *Scale) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Scale) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Scale) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scale.Merge(m, src) +} +func (m *Scale) XXX_Size() int { + return m.Size() +} +func (m *Scale) XXX_DiscardUnknown() { + xxx_messageInfo_Scale.DiscardUnknown(m) +} -func (m *ResourceMetricSource) Reset() { *m = ResourceMetricSource{} } -func (*ResourceMetricSource) ProtoMessage() {} -func (*ResourceMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +var xxx_messageInfo_Scale proto.InternalMessageInfo -func (m *ResourceMetricStatus) Reset() { *m = ResourceMetricStatus{} } -func (*ResourceMetricStatus) ProtoMessage() {} -func (*ResourceMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } +func (*ScaleSpec) ProtoMessage() {} +func (*ScaleSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{17} +} +func (m *ScaleSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleSpec.Merge(m, src) +} +func (m *ScaleSpec) XXX_Size() int { + return m.Size() +} +func (m *ScaleSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleSpec.DiscardUnknown(m) +} -func (m *Scale) Reset() { *m = Scale{} } -func (*Scale) ProtoMessage() {} -func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +var xxx_messageInfo_ScaleSpec proto.InternalMessageInfo -func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } -func (*ScaleSpec) ProtoMessage() {} -func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } +func (*ScaleStatus) ProtoMessage() {} +func (*ScaleStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2bb1f2101a7f10e2, []int{18} +} +func (m *ScaleStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleStatus.Merge(m, src) +} +func (m *ScaleStatus) XXX_Size() int { + return m.Size() +} +func (m *ScaleStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleStatus.DiscardUnknown(m) +} -func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } -func (*ScaleStatus) ProtoMessage() {} -func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +var xxx_messageInfo_ScaleStatus proto.InternalMessageInfo func init() { proto.RegisterType((*CrossVersionObjectReference)(nil), "k8s.io.api.autoscaling.v1.CrossVersionObjectReference") @@ -179,10 +600,114 @@ proto.RegisterType((*ScaleSpec)(nil), "k8s.io.api.autoscaling.v1.ScaleSpec") proto.RegisterType((*ScaleStatus)(nil), "k8s.io.api.autoscaling.v1.ScaleStatus") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v1/generated.proto", fileDescriptor_2bb1f2101a7f10e2) +} + +var fileDescriptor_2bb1f2101a7f10e2 = []byte{ + // 1516 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcf, 0x6f, 0x13, 0xc7, + 0x17, 0x8f, 0x7f, 0x24, 0x24, 0xe3, 0x90, 0xe4, 0x3b, 0x20, 0x08, 0xe1, 0x8b, 0x37, 0xda, 0x22, + 0x44, 0x7f, 0xb0, 0x6e, 0x52, 0x8a, 0xe8, 0x31, 0x76, 0x4b, 0x41, 0x8d, 0x21, 0x4c, 0x02, 0xa5, + 0x3f, 0xc5, 0x64, 0x3d, 0x38, 0x43, 0xbc, 0xbb, 0xd6, 0xec, 0xd8, 0x22, 0x48, 0x95, 0xda, 0x43, + 0xef, 0xbd, 0xb4, 0xea, 0xb1, 0x95, 0x7a, 0xed, 0x99, 0x73, 0x6f, 0x1c, 0x39, 0x20, 0x95, 0xd3, + 0xaa, 0x6c, 0x8f, 0xfd, 0x0f, 0x38, 0x55, 0xf3, 0xc3, 0xeb, 0x5d, 0xdb, 0xeb, 0x24, 0x26, 0x44, + 0x6d, 0x6f, 0x3b, 0x33, 0xef, 0x7d, 0xde, 0xec, 0x7b, 0x6f, 0xde, 0x2f, 0x50, 0xde, 0xbe, 0xec, + 0x5b, 0xd4, 0x2b, 0x6d, 0xb7, 0x36, 0x09, 0x73, 0x09, 0x27, 0x7e, 0xa9, 0x4d, 0xdc, 0x9a, 0xc7, + 0x4a, 0xfa, 0x00, 0x37, 0x69, 0x09, 0xb7, 0xb8, 0xe7, 0xdb, 0xb8, 0x41, 0xdd, 0x7a, 0xa9, 0xbd, + 0x54, 0xaa, 0x13, 0x97, 0x30, 0xcc, 0x49, 0xcd, 0x6a, 0x32, 0x8f, 0x7b, 0xf0, 0x94, 0x22, 0xb5, + 0x70, 0x93, 0x5a, 0x31, 0x52, 0xab, 0xbd, 0xb4, 0x70, 0xa1, 0x4e, 0xf9, 0x56, 0x6b, 0xd3, 0xb2, + 0x3d, 0xa7, 0x54, 0xf7, 0xea, 0x5e, 0x49, 0x72, 0x6c, 0xb6, 0xee, 0xc9, 0x95, 0x5c, 0xc8, 0x2f, + 0x85, 0xb4, 0x60, 0xc6, 0x84, 0xda, 0x1e, 0x23, 0x03, 0xa4, 0x2d, 0x5c, 0xec, 0xd2, 0x38, 0xd8, + 0xde, 0xa2, 0x2e, 0x61, 0x3b, 0xa5, 0xe6, 0x76, 0x5d, 0x32, 0x31, 0xe2, 0x7b, 0x2d, 0x66, 0x93, + 0x7d, 0x71, 0xf9, 0x25, 0x87, 0x70, 0x3c, 0x48, 0x56, 0x29, 0x8d, 0x8b, 0xb5, 0x5c, 0x4e, 0x9d, + 0x7e, 0x31, 0x97, 0x76, 0x63, 0xf0, 0xed, 0x2d, 0xe2, 0xe0, 0x5e, 0x3e, 0xf3, 0xfb, 0x0c, 0x38, + 0x5d, 0x61, 0x9e, 0xef, 0xdf, 0x26, 0xcc, 0xa7, 0x9e, 0x7b, 0x63, 0xf3, 0x3e, 0xb1, 0x39, 0x22, + 0xf7, 0x08, 0x23, 0xae, 0x4d, 0xe0, 0x22, 0xc8, 0x6f, 0x53, 0xb7, 0x36, 0x9f, 0x59, 0xcc, 0x9c, + 0x9f, 0x2a, 0x4f, 0x3f, 0x0e, 0x8c, 0xb1, 0x30, 0x30, 0xf2, 0x1f, 0x51, 0xb7, 0x86, 0xe4, 0x89, + 0xa0, 0x70, 0xb1, 0x43, 0xe6, 0xb3, 0x49, 0x8a, 0xeb, 0xd8, 0x21, 0x48, 0x9e, 0xc0, 0x65, 0x00, + 0x70, 0x93, 0x6a, 0x01, 0xf3, 0x39, 0x49, 0x07, 0x35, 0x1d, 0x58, 0x59, 0xbb, 0xa6, 0x4f, 0x50, + 0x8c, 0xca, 0xfc, 0x21, 0x07, 0x8e, 0x7f, 0xf0, 0x80, 0x13, 0xe6, 0xe2, 0x46, 0x95, 0x70, 0x46, + 0xed, 0x75, 0xa9, 0x5f, 0x01, 0xe6, 0xc8, 0xb5, 0x10, 0xa0, 0xaf, 0x15, 0x81, 0x55, 0xa3, 0x13, + 0x14, 0xa3, 0x82, 0x1e, 0x98, 0x51, 0xab, 0x75, 0xd2, 0x20, 0x36, 0xf7, 0x98, 0xbc, 0x6c, 0x61, + 0xf9, 0x1d, 0xab, 0xeb, 0x40, 0x91, 0xd6, 0xac, 0xe6, 0x76, 0x5d, 0x6c, 0xf8, 0x96, 0x30, 0x8e, + 0xd5, 0x5e, 0xb2, 0x56, 0xf1, 0x26, 0x69, 0x74, 0x58, 0xcb, 0x30, 0x0c, 0x8c, 0x99, 0x6a, 0x02, + 0x0e, 0xf5, 0xc0, 0x43, 0x0c, 0x0a, 0x1c, 0xb3, 0x3a, 0xe1, 0xb7, 0x71, 0xa3, 0x45, 0xe4, 0x2f, + 0x17, 0x96, 0xad, 0x61, 0xd2, 0xac, 0x8e, 0x03, 0x59, 0x37, 0x5b, 0xd8, 0xe5, 0x94, 0xef, 0x94, + 0x67, 0xc3, 0xc0, 0x28, 0x6c, 0x74, 0x61, 0x50, 0x1c, 0x13, 0xb6, 0x01, 0x54, 0xcb, 0x95, 0x36, + 0x61, 0xb8, 0x4e, 0x94, 0xa4, 0xfc, 0x48, 0x92, 0x4e, 0x84, 0x81, 0x01, 0x37, 0xfa, 0xd0, 0xd0, + 0x00, 0x09, 0xe6, 0x4f, 0xfd, 0x86, 0xe1, 0x98, 0xb7, 0xfc, 0x7f, 0x87, 0x61, 0xb6, 0xc0, 0xb4, + 0xdd, 0x62, 0x8c, 0xb8, 0x2f, 0x65, 0x99, 0xe3, 0xfa, 0xb7, 0xa6, 0x2b, 0x31, 0x2c, 0x94, 0x40, + 0x86, 0x3b, 0xe0, 0x98, 0x5e, 0x1f, 0x80, 0x81, 0x4e, 0x86, 0x81, 0x71, 0xac, 0xd2, 0x0f, 0x87, + 0x06, 0xc9, 0x30, 0x1f, 0x65, 0xc1, 0xc9, 0xab, 0x1e, 0xa3, 0x0f, 0x3d, 0x97, 0xe3, 0xc6, 0x9a, + 0x57, 0x5b, 0xd1, 0xb1, 0x91, 0x30, 0x78, 0x17, 0x4c, 0x0a, 0xed, 0xd5, 0x30, 0xc7, 0xd2, 0x46, + 0x85, 0xe5, 0xb7, 0xf7, 0xa6, 0x6b, 0x15, 0x18, 0xaa, 0x84, 0xe3, 0xae, 0x55, 0xbb, 0x7b, 0x28, + 0x42, 0x85, 0x77, 0x40, 0xde, 0x6f, 0x12, 0x5b, 0x5b, 0xf2, 0x92, 0x95, 0x1a, 0xa3, 0xad, 0x94, + 0x3b, 0xae, 0x37, 0x89, 0xdd, 0x8d, 0x23, 0x62, 0x85, 0x24, 0x22, 0xbc, 0x0b, 0x26, 0x7c, 0xe9, + 0x6b, 0xda, 0x6c, 0x97, 0x47, 0xc0, 0x96, 0xfc, 0xe5, 0x19, 0x8d, 0x3e, 0xa1, 0xd6, 0x48, 0xe3, + 0x9a, 0xdf, 0xe6, 0xc0, 0x62, 0x0a, 0x67, 0xc5, 0x73, 0x6b, 0x94, 0x53, 0xcf, 0x85, 0x57, 0x41, + 0x9e, 0xef, 0x34, 0x3b, 0x2e, 0x7e, 0xb1, 0x73, 0xd1, 0x8d, 0x9d, 0x26, 0x79, 0x11, 0x18, 0x67, + 0x77, 0xe3, 0x17, 0x74, 0x48, 0x22, 0xc0, 0xd5, 0xe8, 0x87, 0xb2, 0x09, 0x2c, 0x7d, 0xad, 0x17, + 0x81, 0x31, 0x20, 0x2f, 0x59, 0x11, 0x52, 0xf2, 0xf2, 0x22, 0x22, 0x34, 0xb0, 0xcf, 0x37, 0x18, + 0x76, 0x7d, 0x25, 0x89, 0x3a, 0x1d, 0x0f, 0x7f, 0x63, 0x6f, 0x46, 0x16, 0x1c, 0xe5, 0x05, 0x7d, + 0x0b, 0xb8, 0xda, 0x87, 0x86, 0x06, 0x48, 0x80, 0xe7, 0xc0, 0x04, 0x23, 0xd8, 0xf7, 0x5c, 0xe9, + 0xdc, 0x53, 0x5d, 0xe5, 0x22, 0xb9, 0x8b, 0xf4, 0x29, 0x7c, 0x1d, 0x1c, 0x71, 0x88, 0xef, 0xe3, + 0x3a, 0x99, 0x1f, 0x97, 0x84, 0xb3, 0x9a, 0xf0, 0x48, 0x55, 0x6d, 0xa3, 0xce, 0xb9, 0xf9, 0x34, + 0x03, 0x4e, 0xa7, 0xe8, 0x71, 0x95, 0xfa, 0x1c, 0x7e, 0xde, 0xe7, 0xc5, 0xd6, 0x1e, 0x23, 0x06, + 0xf5, 0x95, 0x0f, 0xcf, 0x69, 0xd9, 0x93, 0x9d, 0x9d, 0x98, 0x07, 0x7f, 0x0c, 0xc6, 0x29, 0x27, + 0x8e, 0xb0, 0x4a, 0xee, 0x7c, 0x61, 0x79, 0x79, 0xff, 0x6e, 0x56, 0x3e, 0xaa, 0xe1, 0xc7, 0xaf, + 0x09, 0x20, 0xa4, 0xf0, 0xcc, 0xbf, 0xb2, 0xa9, 0xbf, 0x25, 0xdc, 0x1c, 0xb6, 0xc1, 0x8c, 0x5c, + 0xa9, 0x50, 0x8c, 0xc8, 0x3d, 0xfd, 0x73, 0xc3, 0x1e, 0xd1, 0x90, 0xe4, 0x5d, 0x3e, 0xa1, 0x6f, + 0x31, 0xb3, 0x9e, 0x40, 0x45, 0x3d, 0x52, 0xe0, 0x12, 0x28, 0x38, 0xd4, 0x45, 0xa4, 0xd9, 0xa0, + 0x36, 0x56, 0xce, 0x38, 0xae, 0xd2, 0x4f, 0xb5, 0xbb, 0x8d, 0xe2, 0x34, 0xf0, 0x5d, 0x50, 0x70, + 0xf0, 0x83, 0x88, 0x25, 0x27, 0x59, 0x8e, 0x69, 0x79, 0x85, 0x6a, 0xf7, 0x08, 0xc5, 0xe9, 0xe0, + 0x7d, 0x50, 0x54, 0x39, 0xa5, 0xb2, 0x76, 0xeb, 0x16, 0xa7, 0x0d, 0xfa, 0x10, 0x0b, 0x3f, 0x5a, + 0x23, 0xcc, 0x26, 0x2e, 0x17, 0xae, 0x91, 0x97, 0x48, 0x66, 0x18, 0x18, 0xc5, 0x8d, 0xa1, 0x94, + 0x68, 0x17, 0x24, 0xf3, 0xb7, 0x1c, 0x38, 0x33, 0x34, 0x0c, 0xc0, 0x2b, 0x00, 0x7a, 0x9b, 0x3e, + 0x61, 0x6d, 0x52, 0xfb, 0x50, 0xd5, 0x45, 0xa2, 0x40, 0x11, 0x3a, 0xcf, 0xa9, 0x9c, 0x78, 0xa3, + 0xef, 0x14, 0x0d, 0xe0, 0x80, 0x36, 0x38, 0x2a, 0xde, 0x85, 0xd2, 0x32, 0xd5, 0xb5, 0xd0, 0xfe, + 0x1e, 0xdd, 0xff, 0xc2, 0xc0, 0x38, 0xba, 0x1a, 0x07, 0x41, 0x49, 0x4c, 0xb8, 0x02, 0x66, 0x75, + 0xb0, 0xef, 0xd1, 0xfa, 0x49, 0xad, 0xf5, 0xd9, 0x4a, 0xf2, 0x18, 0xf5, 0xd2, 0x0b, 0x88, 0x1a, + 0xf1, 0x29, 0x23, 0xb5, 0x08, 0x22, 0x9f, 0x84, 0x78, 0x3f, 0x79, 0x8c, 0x7a, 0xe9, 0xa1, 0x03, + 0x0c, 0x8d, 0x9a, 0x6a, 0xc1, 0x71, 0x09, 0xf9, 0x5a, 0x18, 0x18, 0x46, 0x65, 0x38, 0x29, 0xda, + 0x0d, 0x4b, 0x94, 0x81, 0xba, 0x76, 0x90, 0x0f, 0xe4, 0x62, 0x22, 0xf4, 0x2e, 0xf6, 0x84, 0xde, + 0xb9, 0x78, 0xa1, 0x18, 0x0b, 0xb3, 0x37, 0xc1, 0x84, 0x27, 0x5f, 0x86, 0xb6, 0xcb, 0x85, 0x21, + 0xcf, 0x29, 0x4a, 0x69, 0x11, 0x50, 0x19, 0x88, 0x58, 0xa6, 0x9f, 0x96, 0x06, 0x82, 0xd7, 0x40, + 0xbe, 0xe9, 0xd5, 0x3a, 0x89, 0xe8, 0xcd, 0x21, 0x80, 0x6b, 0x5e, 0xcd, 0x4f, 0xc0, 0x4d, 0x8a, + 0x1b, 0x8b, 0x5d, 0x24, 0x21, 0xe0, 0x27, 0x60, 0xb2, 0x93, 0xf0, 0x75, 0x75, 0x50, 0x1a, 0x02, + 0x87, 0x34, 0x69, 0x02, 0x72, 0x5a, 0x04, 0xb2, 0xce, 0x09, 0x8a, 0xe0, 0x04, 0x34, 0xd1, 0xa5, + 0x9a, 0xb4, 0xca, 0x70, 0xe8, 0x41, 0xe5, 0xb6, 0x82, 0xee, 0x9c, 0xa0, 0x08, 0xce, 0xfc, 0x31, + 0x07, 0xa6, 0x13, 0xe5, 0xdf, 0x21, 0x9b, 0x46, 0xe5, 0xf1, 0x03, 0x33, 0x8d, 0x82, 0x3b, 0x50, + 0xd3, 0x28, 0xc8, 0x57, 0x62, 0x9a, 0x18, 0xf4, 0x00, 0xd3, 0x3c, 0xcd, 0x01, 0xd8, 0xef, 0xc6, + 0xf0, 0x4b, 0x30, 0xa1, 0x02, 0xe6, 0x4b, 0x26, 0x95, 0x28, 0xbd, 0xeb, 0xfc, 0xa1, 0x51, 0x7b, + 0xea, 0xff, 0xec, 0x9e, 0xea, 0x7f, 0x72, 0x10, 0x7d, 0x52, 0x94, 0x75, 0x52, 0x7b, 0xa5, 0x2f, + 0xc0, 0xa4, 0xdf, 0x69, 0x30, 0xf2, 0xa3, 0x37, 0x18, 0x52, 0xe1, 0x51, 0x6b, 0x11, 0x41, 0xc2, + 0x1a, 0x98, 0xc6, 0xf1, 0x1a, 0x7f, 0x7c, 0xa4, 0xdf, 0x98, 0x13, 0x0d, 0x45, 0xa2, 0xb8, 0x4f, + 0xa0, 0x9a, 0xbf, 0xf7, 0x9a, 0x55, 0xbd, 0xbb, 0x7f, 0xa2, 0x59, 0x0f, 0xaf, 0xcb, 0xfa, 0x4f, + 0x58, 0xf6, 0xe7, 0x2c, 0x98, 0xeb, 0x4d, 0x13, 0x23, 0xb5, 0xd3, 0x0f, 0x07, 0xce, 0x04, 0xb2, + 0x23, 0x5d, 0x3a, 0xea, 0x02, 0xf6, 0x36, 0x17, 0x48, 0x58, 0x22, 0x77, 0xe0, 0x96, 0x30, 0x7f, + 0x49, 0xea, 0x68, 0xf4, 0x91, 0xc3, 0x57, 0x83, 0xfb, 0xf2, 0xd1, 0x94, 0x74, 0x5a, 0x0b, 0xdb, + 0x73, 0x6f, 0xfe, 0xaa, 0xd5, 0xf4, 0x6b, 0x16, 0x1c, 0x1f, 0x54, 0x22, 0xc0, 0x8a, 0x9e, 0xd2, + 0x29, 0x25, 0x95, 0xe2, 0x53, 0xba, 0x17, 0x81, 0x61, 0x0c, 0x68, 0x33, 0x3b, 0x30, 0xb1, 0x41, + 0xde, 0x1d, 0x30, 0x9f, 0xb0, 0x7c, 0xac, 0x66, 0xd3, 0x4d, 0xc3, 0xff, 0xc3, 0xc0, 0x98, 0xdf, + 0x48, 0xa1, 0x41, 0xa9, 0xdc, 0x29, 0xd3, 0xac, 0xdc, 0x2b, 0x9f, 0x66, 0x3d, 0xea, 0xd7, 0x97, + 0x72, 0xad, 0x03, 0xd1, 0xd7, 0x67, 0xe0, 0x54, 0xd2, 0x07, 0xfa, 0x15, 0x76, 0x26, 0x0c, 0x8c, + 0x53, 0x95, 0x34, 0x22, 0x94, 0xce, 0x9f, 0xe6, 0xc8, 0xb9, 0xc3, 0x71, 0x64, 0xf3, 0x9b, 0x2c, + 0x18, 0x97, 0xcd, 0xc9, 0x21, 0x8c, 0x94, 0xae, 0x24, 0x46, 0x4a, 0x67, 0x87, 0x64, 0x38, 0x79, + 0xa3, 0xd4, 0x01, 0xd2, 0xf5, 0x9e, 0x01, 0xd2, 0xb9, 0x5d, 0x91, 0x86, 0x8f, 0x8b, 0xde, 0x03, + 0x53, 0x91, 0x40, 0xf8, 0x96, 0x28, 0x16, 0x75, 0x57, 0x95, 0x91, 0xb6, 0x8d, 0x66, 0x0c, 0x51, + 0x3b, 0x15, 0x51, 0x98, 0x14, 0x14, 0x62, 0x12, 0xf6, 0xc7, 0x2c, 0xa8, 0xfd, 0xf8, 0xc0, 0x74, + 0xaa, 0x4b, 0xdd, 0x1f, 0x13, 0xca, 0xe7, 0x1f, 0x3f, 0x2f, 0x8e, 0x3d, 0x79, 0x5e, 0x1c, 0x7b, + 0xf6, 0xbc, 0x38, 0xf6, 0x75, 0x58, 0xcc, 0x3c, 0x0e, 0x8b, 0x99, 0x27, 0x61, 0x31, 0xf3, 0x2c, + 0x2c, 0x66, 0xfe, 0x08, 0x8b, 0x99, 0xef, 0xfe, 0x2c, 0x8e, 0x7d, 0x9a, 0x6d, 0x2f, 0xfd, 0x1d, + 0x00, 0x00, 0xff, 0xff, 0x3c, 0x26, 0x41, 0xcb, 0x94, 0x19, 0x00, 0x00, +} + func (m *CrossVersionObjectReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -190,29 +715,37 @@ } func (m *CrossVersionObjectReference) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CrossVersionObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x1a - i++ + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ExternalMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -220,51 +753,63 @@ } func (m *ExternalMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - if m.MetricSelector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MetricSelector.Size())) - n1, err := m.MetricSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.TargetAverageValue != nil { + { + size, err := m.TargetAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- + dAtA[i] = 0x22 } if m.TargetValue != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) - n2, err := m.TargetValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.TargetValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- + dAtA[i] = 0x1a } - if m.TargetAverageValue != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) - n3, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.MetricSelector != nil { + { + size, err := m.MetricSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ExternalMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -272,49 +817,61 @@ } func (m *ExternalMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - if m.MetricSelector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MetricSelector.Size())) - n4, err := m.MetricSelector.MarshalTo(dAtA[i:]) + if m.CurrentAverageValue != nil { + { + size, err := m.CurrentAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.CurrentValue.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n4 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) - n5, err := m.CurrentValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if m.CurrentAverageValue != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) - n6, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.MetricSelector != nil { + { + size, err := m.MetricSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscaler) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -322,41 +879,52 @@ } func (m *HorizontalPodAutoscaler) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscaler) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n8, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n9, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -364,41 +932,52 @@ } func (m *HorizontalPodAutoscalerCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n10, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -406,37 +985,46 @@ } func (m *HorizontalPodAutoscalerList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n11, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -444,38 +1032,45 @@ } func (m *HorizontalPodAutoscalerSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleTargetRef.Size())) - n12, err := m.ScaleTargetRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.TargetCPUUtilizationPercentage != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetCPUUtilizationPercentage)) + i-- + dAtA[i] = 0x20 } - i += n12 + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxReplicas)) + i-- + dAtA[i] = 0x18 if m.MinReplicas != nil { - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.MinReplicas)) + i-- + dAtA[i] = 0x10 } - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxReplicas)) - if m.TargetCPUUtilizationPercentage != nil { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetCPUUtilizationPercentage)) + { + size, err := m.ScaleTargetRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -483,43 +1078,50 @@ } func (m *HorizontalPodAutoscalerStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ObservedGeneration != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + if m.CurrentCPUUtilizationPercentage != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentCPUUtilizationPercentage)) + i-- + dAtA[i] = 0x28 } + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + i-- + dAtA[i] = 0x18 if m.LastScaleTime != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastScaleTime.Size())) - n13, err := m.LastScaleTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastScaleTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n13 + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredReplicas)) - if m.CurrentCPUUtilizationPercentage != nil { - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentCPUUtilizationPercentage)) + if m.ObservedGeneration != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *MetricSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -527,61 +1129,75 @@ } func (m *MetricSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if m.Object != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) - n14, err := m.Object.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.Pods != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Pods.Size())) - n15, err := m.Pods.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.External != nil { + { + size, err := m.External.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 + i-- + dAtA[i] = 0x2a } if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Resource.Size())) - n16, err := m.Resource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.Pods != nil { + { + size, err := m.Pods.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n16 + i-- + dAtA[i] = 0x1a } - if m.External != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.External.Size())) - n17, err := m.External.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Object != nil { + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n17 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *MetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -589,61 +1205,75 @@ } func (m *MetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if m.Object != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) - n18, err := m.Object.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - } - if m.Pods != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Pods.Size())) - n19, err := m.Pods.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.External != nil { + { + size, err := m.External.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n19 + i-- + dAtA[i] = 0x2a } if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Resource.Size())) - n20, err := m.Resource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.Pods != nil { + { + size, err := m.Pods.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n20 + i-- + dAtA[i] = 0x1a } - if m.External != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.External.Size())) - n21, err := m.External.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Object != nil { + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n21 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ObjectMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -651,37 +1281,71 @@ } func (m *ObjectMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) - n22, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.AverageValue != nil { + { + size, err := m.AverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } - i += n22 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.TargetValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) - n23, err := m.TargetValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n23 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ObjectMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -689,37 +1353,71 @@ } func (m *ObjectMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) - n24, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.AverageValue != nil { + { + size, err := m.AverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } - i += n24 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.CurrentValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) - n25, err := m.CurrentValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n25 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodsMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -727,29 +1425,49 @@ } func (m *PodsMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodsMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) - n26, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + { + size, err := m.TargetAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n26 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodsMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -757,29 +1475,49 @@ } func (m *PodsMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodsMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) - n27, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + { + size, err := m.CurrentAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n27 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ResourceMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -787,36 +1525,44 @@ } func (m *ResourceMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if m.TargetAverageUtilization != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetAverageUtilization)) - } if m.TargetAverageValue != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) - n28, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.TargetAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n28 + i-- + dAtA[i] = 0x1a + } + if m.TargetAverageUtilization != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetAverageUtilization)) + i-- + dAtA[i] = 0x10 } - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ResourceMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -824,34 +1570,42 @@ } func (m *ResourceMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if m.CurrentAverageUtilization != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentAverageUtilization)) + { + size, err := m.CurrentAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) - n29, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.CurrentAverageUtilization != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentAverageUtilization)) + i-- + dAtA[i] = 0x10 } - i += n29 - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Scale) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -859,41 +1613,52 @@ } func (m *Scale) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Scale) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n30, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n31, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n31 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n32, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n32 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ScaleSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -901,20 +1666,25 @@ } func (m *ScaleSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *ScaleStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -922,48 +1692,41 @@ } func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x12 - i++ + i -= len(m.Selector) + copy(dAtA[i:], m.Selector) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Selector))) - i += copy(dAtA[i:], m.Selector) - return i, nil + i-- + dAtA[i] = 0x12 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *CrossVersionObjectReference) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -976,6 +1739,9 @@ } func (m *ExternalMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) @@ -996,6 +1762,9 @@ } func (m *ExternalMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) @@ -1014,6 +1783,9 @@ } func (m *HorizontalPodAutoscaler) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1026,6 +1798,9 @@ } func (m *HorizontalPodAutoscalerCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1042,6 +1817,9 @@ } func (m *HorizontalPodAutoscalerList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1056,6 +1834,9 @@ } func (m *HorizontalPodAutoscalerSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ScaleTargetRef.Size() @@ -1071,6 +1852,9 @@ } func (m *HorizontalPodAutoscalerStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ObservedGeneration != nil { @@ -1089,6 +1873,9 @@ } func (m *MetricSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1113,6 +1900,9 @@ } func (m *MetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1137,6 +1927,9 @@ } func (m *ObjectMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Target.Size() @@ -1145,10 +1938,21 @@ n += 1 + l + sovGenerated(uint64(l)) l = m.TargetValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *ObjectMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Target.Size() @@ -1157,30 +1961,55 @@ n += 1 + l + sovGenerated(uint64(l)) l = m.CurrentValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *PodsMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) n += 1 + l + sovGenerated(uint64(l)) l = m.TargetAverageValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *PodsMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) n += 1 + l + sovGenerated(uint64(l)) l = m.CurrentAverageValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *ResourceMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1196,6 +2025,9 @@ } func (m *ResourceMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1209,6 +2041,9 @@ } func (m *Scale) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1221,6 +2056,9 @@ } func (m *ScaleSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1228,6 +2066,9 @@ } func (m *ScaleStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -1237,14 +2078,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1267,9 +2101,9 @@ } s := strings.Join([]string{`&ExternalMetricSource{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `TargetValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, - `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `TargetValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "resource.Quantity", 1) + `,`, + `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1280,9 +2114,9 @@ } s := strings.Join([]string{`&ExternalMetricStatus{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, - `CurrentAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1292,7 +2126,7 @@ return "nil" } s := strings.Join([]string{`&HorizontalPodAutoscaler{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "HorizontalPodAutoscalerSpec", "HorizontalPodAutoscalerSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "HorizontalPodAutoscalerStatus", "HorizontalPodAutoscalerStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1306,7 +2140,7 @@ s := strings.Join([]string{`&HorizontalPodAutoscalerCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -1317,9 +2151,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]HorizontalPodAutoscaler{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&HorizontalPodAutoscalerList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1343,7 +2182,7 @@ } s := strings.Join([]string{`&HorizontalPodAutoscalerStatus{`, `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, - `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, + `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "v1.Time", 1) + `,`, `CurrentReplicas:` + fmt.Sprintf("%v", this.CurrentReplicas) + `,`, `DesiredReplicas:` + fmt.Sprintf("%v", this.DesiredReplicas) + `,`, `CurrentCPUUtilizationPercentage:` + valueToStringGenerated(this.CurrentCPUUtilizationPercentage) + `,`, @@ -1357,10 +2196,10 @@ } s := strings.Join([]string{`&MetricSpec{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Object:` + strings.Replace(fmt.Sprintf("%v", this.Object), "ObjectMetricSource", "ObjectMetricSource", 1) + `,`, - `Pods:` + strings.Replace(fmt.Sprintf("%v", this.Pods), "PodsMetricSource", "PodsMetricSource", 1) + `,`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "ResourceMetricSource", "ResourceMetricSource", 1) + `,`, - `External:` + strings.Replace(fmt.Sprintf("%v", this.External), "ExternalMetricSource", "ExternalMetricSource", 1) + `,`, + `Object:` + strings.Replace(this.Object.String(), "ObjectMetricSource", "ObjectMetricSource", 1) + `,`, + `Pods:` + strings.Replace(this.Pods.String(), "PodsMetricSource", "PodsMetricSource", 1) + `,`, + `Resource:` + strings.Replace(this.Resource.String(), "ResourceMetricSource", "ResourceMetricSource", 1) + `,`, + `External:` + strings.Replace(this.External.String(), "ExternalMetricSource", "ExternalMetricSource", 1) + `,`, `}`, }, "") return s @@ -1371,10 +2210,10 @@ } s := strings.Join([]string{`&MetricStatus{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Object:` + strings.Replace(fmt.Sprintf("%v", this.Object), "ObjectMetricStatus", "ObjectMetricStatus", 1) + `,`, - `Pods:` + strings.Replace(fmt.Sprintf("%v", this.Pods), "PodsMetricStatus", "PodsMetricStatus", 1) + `,`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "ResourceMetricStatus", "ResourceMetricStatus", 1) + `,`, - `External:` + strings.Replace(fmt.Sprintf("%v", this.External), "ExternalMetricStatus", "ExternalMetricStatus", 1) + `,`, + `Object:` + strings.Replace(this.Object.String(), "ObjectMetricStatus", "ObjectMetricStatus", 1) + `,`, + `Pods:` + strings.Replace(this.Pods.String(), "PodsMetricStatus", "PodsMetricStatus", 1) + `,`, + `Resource:` + strings.Replace(this.Resource.String(), "ResourceMetricStatus", "ResourceMetricStatus", 1) + `,`, + `External:` + strings.Replace(this.External.String(), "ExternalMetricStatus", "ExternalMetricStatus", 1) + `,`, `}`, }, "") return s @@ -1386,7 +2225,9 @@ s := strings.Join([]string{`&ObjectMetricSource{`, `Target:` + strings.Replace(strings.Replace(this.Target.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `TargetValue:` + strings.Replace(strings.Replace(this.TargetValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `TargetValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1398,7 +2239,9 @@ s := strings.Join([]string{`&ObjectMetricStatus{`, `Target:` + strings.Replace(strings.Replace(this.Target.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1409,7 +2252,8 @@ } s := strings.Join([]string{`&PodsMetricSource{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `TargetAverageValue:` + strings.Replace(strings.Replace(this.TargetAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `TargetAverageValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `}`, }, "") return s @@ -1420,7 +2264,8 @@ } s := strings.Join([]string{`&PodsMetricStatus{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `CurrentAverageValue:` + strings.Replace(strings.Replace(this.CurrentAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `}`, }, "") return s @@ -1432,7 +2277,7 @@ s := strings.Join([]string{`&ResourceMetricSource{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `TargetAverageUtilization:` + valueToStringGenerated(this.TargetAverageUtilization) + `,`, - `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1444,7 +2289,7 @@ s := strings.Join([]string{`&ResourceMetricStatus{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `CurrentAverageUtilization:` + valueToStringGenerated(this.CurrentAverageUtilization) + `,`, - `CurrentAverageValue:` + strings.Replace(strings.Replace(this.CurrentAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -1454,7 +2299,7 @@ return "nil" } s := strings.Join([]string{`&Scale{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScaleSpec", "ScaleSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScaleStatus", "ScaleStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1505,7 +2350,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1533,7 +2378,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1543,6 +2388,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1562,7 +2410,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1572,6 +2420,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1591,7 +2442,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1601,6 +2452,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1615,6 +2469,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1642,7 +2499,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1670,7 +2527,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1680,6 +2537,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1699,7 +2559,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1708,11 +2568,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MetricSelector == nil { - m.MetricSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.MetricSelector = &v1.LabelSelector{} } if err := m.MetricSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1732,7 +2595,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1741,11 +2604,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.TargetValue == nil { - m.TargetValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.TargetValue = &resource.Quantity{} } if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1765,7 +2631,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1774,11 +2640,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.TargetAverageValue == nil { - m.TargetAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.TargetAverageValue = &resource.Quantity{} } if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1793,6 +2662,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1820,7 +2692,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1848,7 +2720,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1858,6 +2730,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1877,7 +2752,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1886,11 +2761,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MetricSelector == nil { - m.MetricSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.MetricSelector = &v1.LabelSelector{} } if err := m.MetricSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1910,7 +2788,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1919,6 +2797,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1940,7 +2821,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1949,11 +2830,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.CurrentAverageValue == nil { - m.CurrentAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.CurrentAverageValue = &resource.Quantity{} } if err := m.CurrentAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1968,6 +2852,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1995,7 +2882,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2023,7 +2910,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2032,6 +2919,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2053,7 +2943,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2062,6 +2952,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2083,7 +2976,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2092,6 +2985,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2108,6 +3004,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2135,7 +3034,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2163,7 +3062,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2173,6 +3072,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2192,7 +3094,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2202,6 +3104,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2221,7 +3126,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2230,6 +3135,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2251,7 +3159,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2261,6 +3169,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2280,7 +3191,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2290,6 +3201,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2304,6 +3218,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2331,7 +3248,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2359,7 +3276,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2368,6 +3285,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2389,7 +3309,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2398,6 +3318,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2415,6 +3338,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2442,7 +3368,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2470,7 +3396,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2479,6 +3405,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2500,7 +3429,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2520,7 +3449,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MaxReplicas |= (int32(b) & 0x7F) << shift + m.MaxReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2539,7 +3468,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2554,6 +3483,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2581,7 +3513,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2609,7 +3541,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -2629,7 +3561,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2638,11 +3570,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.LastScaleTime == nil { - m.LastScaleTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.LastScaleTime = &v1.Time{} } if err := m.LastScaleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2662,7 +3597,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentReplicas |= (int32(b) & 0x7F) << shift + m.CurrentReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2681,7 +3616,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.DesiredReplicas |= (int32(b) & 0x7F) << shift + m.DesiredReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2700,7 +3635,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2715,6 +3650,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2742,7 +3680,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2770,7 +3708,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2780,6 +3718,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2799,7 +3740,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2808,6 +3749,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2832,7 +3776,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2841,6 +3785,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2865,7 +3812,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2874,6 +3821,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2898,7 +3848,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2907,6 +3857,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2926,6 +3879,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2953,7 +3909,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2981,7 +3937,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2991,6 +3947,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3010,7 +3969,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3019,6 +3978,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3031,7 +3993,233 @@ iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pods == nil { + m.Pods = &PodsMetricStatus{} + } + if err := m.Pods.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &ResourceMetricStatus{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field External", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.External == nil { + m.External = &ExternalMetricStatus{} + } + if err := m.External.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetValue", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3043,7 +4231,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3052,19 +4240,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pods == nil { - m.Pods = &PodsMetricStatus{} - } - if err := m.Pods.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3076,7 +4264,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3085,19 +4273,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Resource == nil { - m.Resource = &ResourceMetricStatus{} + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field External", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3109,7 +4300,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3118,13 +4309,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.External == nil { - m.External = &ExternalMetricStatus{} + if m.AverageValue == nil { + m.AverageValue = &resource.Quantity{} } - if err := m.External.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3137,6 +4331,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3149,7 +4346,7 @@ } return nil } -func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { +func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3164,7 +4361,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3172,10 +4369,10 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ObjectMetricSource: wiretype end group for non-group") + return fmt.Errorf("proto: ObjectMetricStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ObjectMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ObjectMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3192,7 +4389,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3201,6 +4398,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3222,7 +4422,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3232,6 +4432,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3239,7 +4442,7 @@ iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetValue", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CurrentValue", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3251,7 +4454,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3260,66 +4463,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.CurrentValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ObjectMetricStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ObjectMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3331,7 +4487,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3340,45 +4496,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MetricName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.MetricName = string(dAtA[iNdEx:postIndex]) + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CurrentValue", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3390,7 +4523,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3399,10 +4532,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.CurrentValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.AverageValue == nil { + m.AverageValue = &resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3415,6 +4554,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3442,7 +4584,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3470,7 +4612,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3480,6 +4622,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3499,7 +4644,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3508,6 +4653,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3515,6 +4663,42 @@ return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3524,6 +4708,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3551,7 +4738,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3579,7 +4766,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3589,6 +4776,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3608,7 +4798,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3617,6 +4807,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3624,6 +4817,42 @@ return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3633,6 +4862,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3660,7 +4892,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3688,7 +4920,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3698,6 +4930,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3717,7 +4952,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3737,7 +4972,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3746,11 +4981,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.TargetAverageValue == nil { - m.TargetAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.TargetAverageValue = &resource.Quantity{} } if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3765,6 +5003,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3792,7 +5033,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3820,7 +5061,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3830,6 +5071,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3849,7 +5093,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3869,7 +5113,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3878,6 +5122,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3894,6 +5141,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3921,7 +5171,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3949,7 +5199,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3958,6 +5208,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3979,7 +5232,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3988,6 +5241,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4009,7 +5265,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4018,6 +5274,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4034,6 +5293,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4061,7 +5323,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4089,7 +5351,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4103,6 +5365,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4130,7 +5395,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4158,7 +5423,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -4177,7 +5442,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4187,6 +5452,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4201,6 +5469,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4267,10 +5538,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -4299,6 +5573,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -4317,103 +5594,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 1471 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4b, 0x6f, 0x14, 0xc7, - 0x13, 0xf7, 0x3e, 0x6c, 0xec, 0x5e, 0x63, 0xf3, 0x6f, 0x10, 0x18, 0xf3, 0x67, 0xc7, 0x9a, 0x20, - 0x44, 0x1e, 0xcc, 0xc6, 0x0e, 0x41, 0xe4, 0xe8, 0xdd, 0x84, 0x80, 0xe2, 0x05, 0xd3, 0x36, 0x84, - 0x3c, 0x14, 0xd1, 0x9e, 0x6d, 0xd6, 0x8d, 0x77, 0x66, 0x56, 0x3d, 0xbd, 0x2b, 0x8c, 0x14, 0x29, - 0x39, 0xe4, 0x9c, 0x28, 0x52, 0xa2, 0x1c, 0xf3, 0x05, 0x72, 0xe6, 0x9c, 0x48, 0x91, 0x38, 0x72, - 0xc8, 0x81, 0xd3, 0x28, 0x4c, 0x8e, 0xf9, 0x06, 0x9c, 0xa2, 0x7e, 0xec, 0xec, 0xcc, 0xee, 0xcc, - 0xfa, 0x81, 0xb1, 0x92, 0xdb, 0xf4, 0x54, 0xd5, 0xaf, 0xba, 0xab, 0xaa, 0xeb, 0xd1, 0xa0, 0xba, - 0x75, 0xc5, 0xb7, 0xa8, 0x57, 0xd9, 0xea, 0x6c, 0x10, 0xe6, 0x12, 0x4e, 0xfc, 0x4a, 0x97, 0xb8, - 0x0d, 0x8f, 0x55, 0x34, 0x01, 0xb7, 0x69, 0x05, 0x77, 0xb8, 0xe7, 0xdb, 0xb8, 0x45, 0xdd, 0x66, - 0xa5, 0xbb, 0x58, 0x69, 0x12, 0x97, 0x30, 0xcc, 0x49, 0xc3, 0x6a, 0x33, 0x8f, 0x7b, 0xf0, 0xb4, - 0x62, 0xb5, 0x70, 0x9b, 0x5a, 0x31, 0x56, 0xab, 0xbb, 0x38, 0x7f, 0xb1, 0x49, 0xf9, 0x66, 0x67, - 0xc3, 0xb2, 0x3d, 0xa7, 0xd2, 0xf4, 0x9a, 0x5e, 0x45, 0x4a, 0x6c, 0x74, 0xee, 0xcb, 0x95, 0x5c, - 0xc8, 0x2f, 0x85, 0x34, 0x6f, 0xc6, 0x94, 0xda, 0x1e, 0x23, 0x29, 0xda, 0xe6, 0x2f, 0xf5, 0x79, - 0x1c, 0x6c, 0x6f, 0x52, 0x97, 0xb0, 0xed, 0x4a, 0x7b, 0xab, 0x29, 0x85, 0x18, 0xf1, 0xbd, 0x0e, - 0xb3, 0xc9, 0x9e, 0xa4, 0xfc, 0x8a, 0x43, 0x38, 0x4e, 0xd3, 0x55, 0xc9, 0x92, 0x62, 0x1d, 0x97, - 0x53, 0x67, 0x58, 0xcd, 0xe5, 0x9d, 0x04, 0x7c, 0x7b, 0x93, 0x38, 0x78, 0x50, 0xce, 0xfc, 0x21, - 0x07, 0xce, 0xd4, 0x98, 0xe7, 0xfb, 0x77, 0x08, 0xf3, 0xa9, 0xe7, 0xde, 0xdc, 0x78, 0x40, 0x6c, - 0x8e, 0xc8, 0x7d, 0xc2, 0x88, 0x6b, 0x13, 0xb8, 0x00, 0x8a, 0x5b, 0xd4, 0x6d, 0xcc, 0xe5, 0x16, - 0x72, 0x17, 0xa6, 0xaa, 0xd3, 0x4f, 0x02, 0x63, 0x2c, 0x0c, 0x8c, 0xe2, 0x47, 0xd4, 0x6d, 0x20, - 0x49, 0x11, 0x1c, 0x2e, 0x76, 0xc8, 0x5c, 0x3e, 0xc9, 0x71, 0x03, 0x3b, 0x04, 0x49, 0x0a, 0x5c, - 0x02, 0x00, 0xb7, 0xa9, 0x56, 0x30, 0x57, 0x90, 0x7c, 0x50, 0xf3, 0x81, 0xe5, 0xd5, 0xeb, 0x9a, - 0x82, 0x62, 0x5c, 0xe6, 0x8f, 0x05, 0x70, 0xe2, 0x83, 0x87, 0x9c, 0x30, 0x17, 0xb7, 0xea, 0x84, - 0x33, 0x6a, 0xaf, 0x49, 0xfb, 0x0a, 0x30, 0x47, 0xae, 0x85, 0x02, 0xbd, 0xad, 0x08, 0xac, 0x1e, - 0x51, 0x50, 0x8c, 0x0b, 0x7a, 0x60, 0x46, 0xad, 0xd6, 0x48, 0x8b, 0xd8, 0xdc, 0x63, 0x72, 0xb3, - 0xa5, 0xa5, 0x77, 0xac, 0x7e, 0x00, 0x45, 0x56, 0xb3, 0xda, 0x5b, 0x4d, 0xf1, 0xc3, 0xb7, 0x84, - 0x73, 0xac, 0xee, 0xa2, 0xb5, 0x82, 0x37, 0x48, 0xab, 0x27, 0x5a, 0x85, 0x61, 0x60, 0xcc, 0xd4, - 0x13, 0x70, 0x68, 0x00, 0x1e, 0x62, 0x50, 0xe2, 0x98, 0x35, 0x09, 0xbf, 0x83, 0x5b, 0x1d, 0x22, - 0x8f, 0x5c, 0x5a, 0xb2, 0x46, 0x69, 0xb3, 0x7a, 0x01, 0x64, 0xdd, 0xea, 0x60, 0x97, 0x53, 0xbe, - 0x5d, 0x9d, 0x0d, 0x03, 0xa3, 0xb4, 0xde, 0x87, 0x41, 0x71, 0x4c, 0xd8, 0x05, 0x50, 0x2d, 0x97, - 0xbb, 0x84, 0xe1, 0x26, 0x51, 0x9a, 0x8a, 0xfb, 0xd2, 0x74, 0x32, 0x0c, 0x0c, 0xb8, 0x3e, 0x84, - 0x86, 0x52, 0x34, 0x98, 0x3f, 0x0f, 0x3b, 0x86, 0x63, 0xde, 0xf1, 0xff, 0x1b, 0x8e, 0xd9, 0x04, - 0xd3, 0x76, 0x87, 0x31, 0xe2, 0xbe, 0x94, 0x67, 0x4e, 0xe8, 0x63, 0x4d, 0xd7, 0x62, 0x58, 0x28, - 0x81, 0x0c, 0xb7, 0xc1, 0x71, 0xbd, 0x3e, 0x00, 0x07, 0x9d, 0x0a, 0x03, 0xe3, 0x78, 0x6d, 0x18, - 0x0e, 0xa5, 0xe9, 0x30, 0x1f, 0xe7, 0xc1, 0xa9, 0x6b, 0x1e, 0xa3, 0x8f, 0x3c, 0x97, 0xe3, 0xd6, - 0xaa, 0xd7, 0x58, 0xd6, 0xb9, 0x91, 0x30, 0x78, 0x0f, 0x4c, 0x0a, 0xeb, 0x35, 0x30, 0xc7, 0xd2, - 0x47, 0xa5, 0xa5, 0xb7, 0x77, 0x67, 0x6b, 0x95, 0x18, 0xea, 0x84, 0xe3, 0xbe, 0x57, 0xfb, 0xff, - 0x50, 0x84, 0x0a, 0xef, 0x82, 0xa2, 0xdf, 0x26, 0xb6, 0xf6, 0xe4, 0x65, 0x2b, 0x33, 0x47, 0x5b, - 0x19, 0x7b, 0x5c, 0x6b, 0x13, 0xbb, 0x9f, 0x47, 0xc4, 0x0a, 0x49, 0x44, 0x78, 0x0f, 0x4c, 0xf8, - 0x32, 0xd6, 0xb4, 0xdb, 0xae, 0xec, 0x03, 0x5b, 0xca, 0x57, 0x67, 0x34, 0xfa, 0x84, 0x5a, 0x23, - 0x8d, 0x6b, 0x7e, 0x53, 0x00, 0x0b, 0x19, 0x92, 0x35, 0xcf, 0x6d, 0x50, 0x4e, 0x3d, 0x17, 0x5e, - 0x03, 0x45, 0xbe, 0xdd, 0xee, 0x85, 0xf8, 0xa5, 0xde, 0x46, 0xd7, 0xb7, 0xdb, 0xe4, 0x45, 0x60, - 0x9c, 0xdb, 0x49, 0x5e, 0xf0, 0x21, 0x89, 0x00, 0x57, 0xa2, 0x03, 0xe5, 0x13, 0x58, 0x7a, 0x5b, - 0x2f, 0x02, 0x23, 0xa5, 0x2e, 0x59, 0x11, 0x52, 0x72, 0xf3, 0x22, 0x23, 0xb4, 0xb0, 0xcf, 0xd7, - 0x19, 0x76, 0x7d, 0xa5, 0x89, 0x3a, 0xbd, 0x08, 0x7f, 0x63, 0x77, 0x4e, 0x16, 0x12, 0xd5, 0x79, - 0xbd, 0x0b, 0xb8, 0x32, 0x84, 0x86, 0x52, 0x34, 0xc0, 0xf3, 0x60, 0x82, 0x11, 0xec, 0x7b, 0xae, - 0x0c, 0xee, 0xa9, 0xbe, 0x71, 0x91, 0xfc, 0x8b, 0x34, 0x15, 0xbe, 0x0e, 0x8e, 0x38, 0xc4, 0xf7, - 0x71, 0x93, 0xcc, 0x8d, 0x4b, 0xc6, 0x59, 0xcd, 0x78, 0xa4, 0xae, 0x7e, 0xa3, 0x1e, 0xdd, 0xfc, - 0x23, 0x07, 0xce, 0x64, 0xd8, 0x71, 0x85, 0xfa, 0x1c, 0x7e, 0x3e, 0x14, 0xc5, 0xd6, 0x2e, 0x33, - 0x06, 0xf5, 0x55, 0x0c, 0x1f, 0xd3, 0xba, 0x27, 0x7b, 0x7f, 0x62, 0x11, 0xfc, 0x31, 0x18, 0xa7, - 0x9c, 0x38, 0xc2, 0x2b, 0x85, 0x0b, 0xa5, 0xa5, 0xa5, 0xbd, 0x87, 0x59, 0xf5, 0xa8, 0x86, 0x1f, - 0xbf, 0x2e, 0x80, 0x90, 0xc2, 0x33, 0xff, 0xce, 0x67, 0x1e, 0x4b, 0x84, 0x39, 0xec, 0x82, 0x19, - 0xb9, 0x52, 0xa9, 0x18, 0x91, 0xfb, 0xfa, 0x70, 0xa3, 0x2e, 0xd1, 0x88, 0xe2, 0x5d, 0x3d, 0xa9, - 0x77, 0x31, 0xb3, 0x96, 0x40, 0x45, 0x03, 0x5a, 0xe0, 0x22, 0x28, 0x39, 0xd4, 0x45, 0xa4, 0xdd, - 0xa2, 0x36, 0x56, 0xc1, 0x38, 0xae, 0xca, 0x4f, 0xbd, 0xff, 0x1b, 0xc5, 0x79, 0xe0, 0xbb, 0xa0, - 0xe4, 0xe0, 0x87, 0x91, 0x48, 0x41, 0x8a, 0x1c, 0xd7, 0xfa, 0x4a, 0xf5, 0x3e, 0x09, 0xc5, 0xf9, - 0xe0, 0x03, 0x50, 0x56, 0x35, 0xa5, 0xb6, 0x7a, 0xfb, 0x36, 0xa7, 0x2d, 0xfa, 0x08, 0x8b, 0x38, - 0x5a, 0x25, 0xcc, 0x26, 0x2e, 0x17, 0xa1, 0x51, 0x94, 0x48, 0x66, 0x18, 0x18, 0xe5, 0xf5, 0x91, - 0x9c, 0x68, 0x07, 0x24, 0xf3, 0xd7, 0x02, 0x38, 0x3b, 0x32, 0x0d, 0xc0, 0xab, 0x00, 0x7a, 0x1b, - 0x3e, 0x61, 0x5d, 0xd2, 0xf8, 0x50, 0xf5, 0x45, 0xa2, 0x41, 0x11, 0x36, 0x2f, 0xa8, 0x9a, 0x78, - 0x73, 0x88, 0x8a, 0x52, 0x24, 0xa0, 0x0d, 0x8e, 0x8a, 0x7b, 0xa1, 0xac, 0x4c, 0x75, 0x2f, 0xb4, - 0xb7, 0x4b, 0xf7, 0xbf, 0x30, 0x30, 0x8e, 0xae, 0xc4, 0x41, 0x50, 0x12, 0x13, 0x2e, 0x83, 0x59, - 0x9d, 0xec, 0x07, 0xac, 0x7e, 0x4a, 0x5b, 0x7d, 0xb6, 0x96, 0x24, 0xa3, 0x41, 0x7e, 0x01, 0xd1, - 0x20, 0x3e, 0x65, 0xa4, 0x11, 0x41, 0x14, 0x93, 0x10, 0xef, 0x27, 0xc9, 0x68, 0x90, 0x1f, 0x3a, - 0xc0, 0xd0, 0xa8, 0x99, 0x1e, 0x1c, 0x97, 0x90, 0xaf, 0x85, 0x81, 0x61, 0xd4, 0x46, 0xb3, 0xa2, - 0x9d, 0xb0, 0x44, 0x1b, 0xa8, 0x7b, 0x07, 0x79, 0x41, 0x2e, 0x25, 0x52, 0xef, 0xc2, 0x40, 0xea, - 0x3d, 0x16, 0x6f, 0x14, 0x63, 0x69, 0xf6, 0x16, 0x98, 0xf0, 0xe4, 0xcd, 0xd0, 0x7e, 0xb9, 0x38, - 0xe2, 0x3a, 0x45, 0x25, 0x2d, 0x02, 0xaa, 0x02, 0x91, 0xcb, 0xf4, 0xd5, 0xd2, 0x40, 0xf0, 0x3a, - 0x28, 0xb6, 0xbd, 0x46, 0xaf, 0x10, 0xbd, 0x39, 0x02, 0x70, 0xd5, 0x6b, 0xf8, 0x09, 0xb8, 0x49, - 0xb1, 0x63, 0xf1, 0x17, 0x49, 0x08, 0xf8, 0x09, 0x98, 0xec, 0x15, 0x7c, 0xdd, 0x1d, 0x54, 0x46, - 0xc0, 0x21, 0xcd, 0x9a, 0x80, 0x9c, 0x16, 0x89, 0xac, 0x47, 0x41, 0x11, 0x9c, 0x80, 0x26, 0xba, - 0x55, 0x93, 0x5e, 0x19, 0x0d, 0x9d, 0xd6, 0x6e, 0x2b, 0xe8, 0x1e, 0x05, 0x45, 0x70, 0xe6, 0x4f, - 0x05, 0x30, 0x9d, 0x68, 0xff, 0x0e, 0xd9, 0x35, 0xaa, 0x8e, 0x1f, 0x98, 0x6b, 0x14, 0xdc, 0x81, - 0xba, 0x46, 0x41, 0xbe, 0x12, 0xd7, 0xc4, 0xa0, 0x53, 0x5c, 0xf3, 0x6d, 0x1e, 0xc0, 0xe1, 0x30, - 0x86, 0x5f, 0x80, 0x09, 0x95, 0x30, 0x5f, 0xb2, 0xa8, 0x44, 0xe5, 0x5d, 0xd7, 0x0f, 0x8d, 0x3a, - 0xd0, 0xff, 0xe7, 0x77, 0xd5, 0xff, 0x93, 0x83, 0x98, 0x93, 0xa2, 0xaa, 0x93, 0x35, 0x2b, 0x99, - 0xdf, 0x0f, 0x5a, 0x44, 0x85, 0xec, 0xbf, 0xd1, 0x22, 0x87, 0x36, 0xa0, 0x98, 0xbf, 0xe5, 0xc0, - 0xb1, 0xc1, 0xe4, 0xb4, 0xaf, 0x21, 0xee, 0x51, 0xea, 0x24, 0x9a, 0xdf, 0xd7, 0xc6, 0xa3, 0xde, - 0x73, 0x97, 0xd3, 0xe8, 0xef, 0xc9, 0x43, 0xec, 0x7f, 0x12, 0xfd, 0x32, 0x7d, 0x5c, 0xdb, 0xdf, - 0x29, 0xce, 0x68, 0x65, 0xbb, 0x1f, 0xd9, 0x7e, 0xc9, 0x83, 0x13, 0x69, 0xa9, 0x1d, 0xd6, 0xf4, - 0xeb, 0x8a, 0x3a, 0x45, 0x25, 0xfe, 0xba, 0xf2, 0x22, 0x30, 0x8c, 0x94, 0xf1, 0xa0, 0x07, 0x13, - 0x7b, 0x80, 0xb9, 0x0b, 0xe6, 0x12, 0xb6, 0x8b, 0xd5, 0x5a, 0xdd, 0xec, 0xfd, 0x3f, 0x0c, 0x8c, - 0xb9, 0xf5, 0x0c, 0x1e, 0x94, 0x29, 0x9d, 0xf1, 0x0a, 0x51, 0x78, 0xe5, 0xaf, 0x10, 0x8f, 0x87, - 0xed, 0xa5, 0x7c, 0x7f, 0x20, 0xf6, 0xfa, 0x0c, 0x9c, 0x4e, 0x3a, 0x69, 0xd8, 0x60, 0x67, 0xc3, - 0xc0, 0x38, 0x5d, 0xcb, 0x62, 0x42, 0xd9, 0xf2, 0x59, 0x91, 0x56, 0x38, 0xa4, 0x48, 0xfb, 0x3a, - 0x0f, 0xc6, 0x65, 0x53, 0x79, 0x08, 0x4f, 0x01, 0x57, 0x13, 0x4f, 0x01, 0xe7, 0x46, 0xa4, 0x57, - 0xb9, 0xa3, 0xcc, 0xc1, 0xff, 0xc6, 0xc0, 0xe0, 0x7f, 0x7e, 0x47, 0xa4, 0xd1, 0x63, 0xfe, 0x7b, - 0x60, 0x2a, 0x52, 0x08, 0xdf, 0x12, 0x45, 0x5e, 0x77, 0xc3, 0x39, 0xe9, 0xdb, 0x68, 0x36, 0x8c, - 0xda, 0xe0, 0x88, 0xc3, 0xa4, 0xa0, 0x14, 0xd3, 0xb0, 0x37, 0x61, 0xc1, 0xed, 0xc7, 0x1f, 0xba, - 0xa6, 0xfa, 0xdc, 0xd1, 0x8b, 0x55, 0xc4, 0x51, 0xbd, 0xf0, 0xe4, 0x79, 0x79, 0xec, 0xe9, 0xf3, - 0xf2, 0xd8, 0xb3, 0xe7, 0xe5, 0xb1, 0xaf, 0xc2, 0x72, 0xee, 0x49, 0x58, 0xce, 0x3d, 0x0d, 0xcb, - 0xb9, 0x67, 0x61, 0x39, 0xf7, 0x67, 0x58, 0xce, 0x7d, 0xf7, 0x57, 0x79, 0xec, 0xd3, 0x7c, 0x77, - 0xf1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4d, 0x5f, 0x69, 0x0c, 0x4c, 0x17, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ // CrossVersionObjectReference contains enough information to let you identify the referred resource. message CrossVersionObjectReference { - // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" optional string kind = 1; // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names @@ -88,11 +88,11 @@ // configuration of a horizontal pod autoscaler. message HorizontalPodAutoscaler { - // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional HorizontalPodAutoscalerSpec spec = 2; @@ -141,7 +141,11 @@ // and will set the desired number of pods by using its Scale subresource. optional CrossVersionObjectReference scaleTargetRef = 1; - // lower limit for the number of pods that can be set by the autoscaler, default 1. + // minReplicas is the lower limit for the number of replicas to which the autoscaler + // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the + // alpha feature gate HPAScaleToZero is enabled and at least one Object or External + // metric is configured. Scaling is active as long as at least one metric value is + // available. // +optional optional int32 minReplicas = 2; @@ -257,6 +261,17 @@ // targetValue is the target value of the metric (as a quantity). optional k8s.io.apimachinery.pkg.api.resource.Quantity targetValue = 3; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric. + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4; + + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 5; } // ObjectMetricStatus indicates the current value of a metric describing a @@ -270,6 +285,17 @@ // currentValue is the current value of the metric (as a quantity). optional k8s.io.apimachinery.pkg.api.resource.Quantity currentValue = 3; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4; + + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 5; } // PodsMetricSource indicates how to scale on a metric describing each pod in @@ -283,6 +309,12 @@ // targetAverageValue is the target value of the average of the // metric across all relevant pods (as a quantity) optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 2; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; } // PodsMetricStatus indicates the current value of a metric describing each pod in @@ -294,6 +326,12 @@ // currentAverageValue is the current value of the average of the // metric across all relevant pods (as a quantity) optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 2; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; } // ResourceMetricSource indicates how to scale on a resource metric known to @@ -346,15 +384,15 @@ // Scale represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional ScaleSpec spec = 2; - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional optional ScaleStatus status = 3; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,14 +17,14 @@ package v1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // CrossVersionObjectReference contains enough information to let you identify the referred resource. type CrossVersionObjectReference struct { - // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names Name string `json:"name" protobuf:"bytes,2,opt,name=name"` @@ -38,7 +38,11 @@ // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption // and will set the desired number of pods by using its Scale subresource. ScaleTargetRef CrossVersionObjectReference `json:"scaleTargetRef" protobuf:"bytes,1,opt,name=scaleTargetRef"` - // lower limit for the number of pods that can be set by the autoscaler, default 1. + // minReplicas is the lower limit for the number of replicas to which the autoscaler + // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the + // alpha feature gate HPAScaleToZero is enabled and at least one Object or External + // metric is configured. Scaling is active as long as at least one metric value is + // available. // +optional MinReplicas *int32 `json:"minReplicas,omitempty" protobuf:"varint,2,opt,name=minReplicas"` // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas. @@ -78,11 +82,11 @@ // configuration of a horizontal pod autoscaler. type HorizontalPodAutoscaler struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -109,15 +113,15 @@ // Scale represents a scaling request for a resource. type Scale struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -211,6 +215,16 @@ MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"` // targetValue is the target value of the metric (as a quantity). TargetValue resource.Quantity `json:"targetValue" protobuf:"bytes,3,name=targetValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric. + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,name=selector"` + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,5,name=averageValue"` } // PodsMetricSource indicates how to scale on a metric describing each pod in @@ -223,6 +237,12 @@ // targetAverageValue is the target value of the average of the // metric across all relevant pods (as a quantity) TargetAverageValue resource.Quantity `json:"targetAverageValue" protobuf:"bytes,2,name=targetAverageValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,name=selector"` } // ResourceMetricSource indicates how to scale on a resource metric known to @@ -344,6 +364,16 @@ MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"` // currentValue is the current value of the metric (as a quantity). CurrentValue resource.Quantity `json:"currentValue" protobuf:"bytes,3,name=currentValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,name=selector"` + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,5,name=averageValue"` } // PodsMetricStatus indicates the current value of a metric describing each pod in @@ -354,6 +384,12 @@ // currentAverageValue is the current value of the average of the // metric across all relevant pods (as a quantity) CurrentAverageValue resource.Quantity `json:"currentAverageValue" protobuf:"bytes,2,name=currentAverageValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,name=selector"` } // ResourceMetricStatus indicates the current value of a resource metric known to diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_CrossVersionObjectReference = map[string]string{ "": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "kind": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", + "kind": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"", "name": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", "apiVersion": "API version of the referent", } @@ -64,8 +64,8 @@ var map_HorizontalPodAutoscaler = map[string]string{ "": "configuration of a horizontal pod autoscaler.", - "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", + "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", "status": "current information about the autoscaler.", } @@ -99,7 +99,7 @@ var map_HorizontalPodAutoscalerSpec = map[string]string{ "": "specification of a horizontal pod autoscaler.", "scaleTargetRef": "reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.", - "minReplicas": "lower limit for the number of pods that can be set by the autoscaler, default 1.", + "minReplicas": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the alpha feature gate HPAScaleToZero is enabled and at least one Object or External metric is configured. Scaling is active as long as at least one metric value is available.", "maxReplicas": "upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.", "targetCPUUtilizationPercentage": "target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.", } @@ -148,10 +148,12 @@ } var map_ObjectMetricSource = map[string]string{ - "": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - "target": "target is the described Kubernetes object.", - "metricName": "metricName is the name of the metric in question.", - "targetValue": "targetValue is the target value of the metric (as a quantity).", + "": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + "target": "target is the described Kubernetes object.", + "metricName": "metricName is the name of the metric in question.", + "targetValue": "targetValue is the target value of the metric (as a quantity).", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric. When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + "averageValue": "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", } func (ObjectMetricSource) SwaggerDoc() map[string]string { @@ -163,6 +165,8 @@ "target": "target is the described Kubernetes object.", "metricName": "metricName is the name of the metric in question.", "currentValue": "currentValue is the current value of the metric (as a quantity).", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + "averageValue": "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", } func (ObjectMetricStatus) SwaggerDoc() map[string]string { @@ -173,6 +177,7 @@ "": "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", "metricName": "metricName is the name of the metric in question", "targetAverageValue": "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", } func (PodsMetricSource) SwaggerDoc() map[string]string { @@ -183,6 +188,7 @@ "": "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", "metricName": "metricName is the name of the metric in question", "currentAverageValue": "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", } func (PodsMetricStatus) SwaggerDoc() map[string]string { @@ -190,8 +196,8 @@ } var map_ResourceMetricSource = map[string]string{ - "": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - "name": "name is the name of the resource in question.", + "": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + "name": "name is the name of the resource in question.", "targetAverageUtilization": "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", "targetAverageValue": "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", } @@ -201,8 +207,8 @@ } var map_ResourceMetricStatus = map[string]string{ - "": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "name": "name is the name of the resource in question.", + "": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "name": "name is the name of the resource in question.", "currentAverageUtilization": "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", "currentAverageValue": "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", } @@ -213,9 +219,9 @@ var map_Scale = map[string]string{ "": "Scale represents a scaling request for a resource.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", } func (Scale) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1 import ( - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -46,30 +46,18 @@ *out = *in if in.MetricSelector != nil { in, out := &in.MetricSelector, &out.MetricSelector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.TargetValue != nil { in, out := &in.TargetValue, &out.TargetValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } if in.TargetAverageValue != nil { in, out := &in.TargetAverageValue, &out.TargetAverageValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -89,22 +77,14 @@ *out = *in if in.MetricSelector != nil { in, out := &in.MetricSelector, &out.MetricSelector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } out.CurrentValue = in.CurrentValue.DeepCopy() if in.CurrentAverageValue != nil { in, out := &in.CurrentAverageValue, &out.CurrentAverageValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -168,7 +148,7 @@ func (in *HorizontalPodAutoscalerList) DeepCopyInto(out *HorizontalPodAutoscalerList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]HorizontalPodAutoscaler, len(*in)) @@ -203,21 +183,13 @@ out.ScaleTargetRef = in.ScaleTargetRef if in.MinReplicas != nil { in, out := &in.MinReplicas, &out.MinReplicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.TargetCPUUtilizationPercentage != nil { in, out := &in.TargetCPUUtilizationPercentage, &out.TargetCPUUtilizationPercentage - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -237,29 +209,17 @@ *out = *in if in.ObservedGeneration != nil { in, out := &in.ObservedGeneration, &out.ObservedGeneration - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.LastScaleTime != nil { in, out := &in.LastScaleTime, &out.LastScaleTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } if in.CurrentCPUUtilizationPercentage != nil { in, out := &in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -279,39 +239,23 @@ *out = *in if in.Object != nil { in, out := &in.Object, &out.Object - if *in == nil { - *out = nil - } else { - *out = new(ObjectMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(ObjectMetricSource) + (*in).DeepCopyInto(*out) } if in.Pods != nil { in, out := &in.Pods, &out.Pods - if *in == nil { - *out = nil - } else { - *out = new(PodsMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(PodsMetricSource) + (*in).DeepCopyInto(*out) } if in.Resource != nil { in, out := &in.Resource, &out.Resource - if *in == nil { - *out = nil - } else { - *out = new(ResourceMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(ResourceMetricSource) + (*in).DeepCopyInto(*out) } if in.External != nil { in, out := &in.External, &out.External - if *in == nil { - *out = nil - } else { - *out = new(ExternalMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(ExternalMetricSource) + (*in).DeepCopyInto(*out) } return } @@ -331,39 +275,23 @@ *out = *in if in.Object != nil { in, out := &in.Object, &out.Object - if *in == nil { - *out = nil - } else { - *out = new(ObjectMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ObjectMetricStatus) + (*in).DeepCopyInto(*out) } if in.Pods != nil { in, out := &in.Pods, &out.Pods - if *in == nil { - *out = nil - } else { - *out = new(PodsMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(PodsMetricStatus) + (*in).DeepCopyInto(*out) } if in.Resource != nil { in, out := &in.Resource, &out.Resource - if *in == nil { - *out = nil - } else { - *out = new(ResourceMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ResourceMetricStatus) + (*in).DeepCopyInto(*out) } if in.External != nil { in, out := &in.External, &out.External - if *in == nil { - *out = nil - } else { - *out = new(ExternalMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ExternalMetricStatus) + (*in).DeepCopyInto(*out) } return } @@ -383,6 +311,16 @@ *out = *in out.Target = in.Target out.TargetValue = in.TargetValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } return } @@ -401,6 +339,16 @@ *out = *in out.Target = in.Target out.CurrentValue = in.CurrentValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } return } @@ -418,6 +366,11 @@ func (in *PodsMetricSource) DeepCopyInto(out *PodsMetricSource) { *out = *in out.TargetAverageValue = in.TargetAverageValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } return } @@ -435,6 +388,11 @@ func (in *PodsMetricStatus) DeepCopyInto(out *PodsMetricStatus) { *out = *in out.CurrentAverageValue = in.CurrentAverageValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } return } @@ -453,21 +411,13 @@ *out = *in if in.TargetAverageUtilization != nil { in, out := &in.TargetAverageUtilization, &out.TargetAverageUtilization - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.TargetAverageValue != nil { in, out := &in.TargetAverageValue, &out.TargetAverageValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -487,12 +437,8 @@ *out = *in if in.CurrentAverageUtilization != nil { in, out := &in.CurrentAverageUtilization, &out.CurrentAverageUtilization - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } out.CurrentAverageValue = in.CurrentAverageValue.DeepCopy() return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v2beta1 // import "k8s.io/api/autoscaling/v2beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,49 +14,27 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto -// DO NOT EDIT! -/* - Package v2beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto - - It has these top-level messages: - CrossVersionObjectReference - ExternalMetricSource - ExternalMetricStatus - HorizontalPodAutoscaler - HorizontalPodAutoscalerCondition - HorizontalPodAutoscalerList - HorizontalPodAutoscalerSpec - HorizontalPodAutoscalerStatus - MetricSpec - MetricStatus - ObjectMetricSource - ObjectMetricStatus - PodsMetricSource - PodsMetricStatus - ResourceMetricSource - ResourceMetricStatus -*/ package v2beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" + proto "github.com/gogo/protobuf/proto" -import strings "strings" -import reflect "reflect" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + resource "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -72,76 +50,450 @@ func (m *CrossVersionObjectReference) Reset() { *m = CrossVersionObjectReference{} } func (*CrossVersionObjectReference) ProtoMessage() {} func (*CrossVersionObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{0} + return fileDescriptor_26c1bfc7a52d0478, []int{0} +} +func (m *CrossVersionObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CrossVersionObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CrossVersionObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_CrossVersionObjectReference.Merge(m, src) +} +func (m *CrossVersionObjectReference) XXX_Size() int { + return m.Size() +} +func (m *CrossVersionObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_CrossVersionObjectReference.DiscardUnknown(m) +} + +var xxx_messageInfo_CrossVersionObjectReference proto.InternalMessageInfo + +func (m *ExternalMetricSource) Reset() { *m = ExternalMetricSource{} } +func (*ExternalMetricSource) ProtoMessage() {} +func (*ExternalMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{1} +} +func (m *ExternalMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricSource.Merge(m, src) +} +func (m *ExternalMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ExternalMetricSource proto.InternalMessageInfo + +func (m *ExternalMetricStatus) Reset() { *m = ExternalMetricStatus{} } +func (*ExternalMetricStatus) ProtoMessage() {} +func (*ExternalMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{2} +} +func (m *ExternalMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricStatus.Merge(m, src) +} +func (m *ExternalMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricStatus.DiscardUnknown(m) } -func (m *ExternalMetricSource) Reset() { *m = ExternalMetricSource{} } -func (*ExternalMetricSource) ProtoMessage() {} -func (*ExternalMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +var xxx_messageInfo_ExternalMetricStatus proto.InternalMessageInfo -func (m *ExternalMetricStatus) Reset() { *m = ExternalMetricStatus{} } -func (*ExternalMetricStatus) ProtoMessage() {} -func (*ExternalMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } +func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{3} +} +func (m *HorizontalPodAutoscaler) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscaler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscaler) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscaler.Merge(m, src) +} +func (m *HorizontalPodAutoscaler) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscaler) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscaler.DiscardUnknown(m) +} -func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } -func (*HorizontalPodAutoscaler) ProtoMessage() {} -func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +var xxx_messageInfo_HorizontalPodAutoscaler proto.InternalMessageInfo func (m *HorizontalPodAutoscalerCondition) Reset() { *m = HorizontalPodAutoscalerCondition{} } func (*HorizontalPodAutoscalerCondition) ProtoMessage() {} func (*HorizontalPodAutoscalerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{4} + return fileDescriptor_26c1bfc7a52d0478, []int{4} +} +func (m *HorizontalPodAutoscalerCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerCondition.Merge(m, src) +} +func (m *HorizontalPodAutoscalerCondition) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerCondition) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerCondition.DiscardUnknown(m) } +var xxx_messageInfo_HorizontalPodAutoscalerCondition proto.InternalMessageInfo + func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } func (*HorizontalPodAutoscalerList) ProtoMessage() {} func (*HorizontalPodAutoscalerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{5} + return fileDescriptor_26c1bfc7a52d0478, []int{5} +} +func (m *HorizontalPodAutoscalerList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerList) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerList.Merge(m, src) +} +func (m *HorizontalPodAutoscalerList) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerList) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerList.DiscardUnknown(m) } +var xxx_messageInfo_HorizontalPodAutoscalerList proto.InternalMessageInfo + func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} func (*HorizontalPodAutoscalerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{6} + return fileDescriptor_26c1bfc7a52d0478, []int{6} +} +func (m *HorizontalPodAutoscalerSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerSpec.Merge(m, src) +} +func (m *HorizontalPodAutoscalerSpec) XXX_Size() int { + return m.Size() } +func (m *HorizontalPodAutoscalerSpec) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerSpec proto.InternalMessageInfo func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} func (*HorizontalPodAutoscalerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{7} + return fileDescriptor_26c1bfc7a52d0478, []int{7} +} +func (m *HorizontalPodAutoscalerStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerStatus.Merge(m, src) +} +func (m *HorizontalPodAutoscalerStatus) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerStatus) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerStatus.DiscardUnknown(m) } -func (m *MetricSpec) Reset() { *m = MetricSpec{} } -func (*MetricSpec) ProtoMessage() {} -func (*MetricSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +var xxx_messageInfo_HorizontalPodAutoscalerStatus proto.InternalMessageInfo -func (m *MetricStatus) Reset() { *m = MetricStatus{} } -func (*MetricStatus) ProtoMessage() {} -func (*MetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (m *MetricSpec) Reset() { *m = MetricSpec{} } +func (*MetricSpec) ProtoMessage() {} +func (*MetricSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{8} +} +func (m *MetricSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricSpec.Merge(m, src) +} +func (m *MetricSpec) XXX_Size() int { + return m.Size() +} +func (m *MetricSpec) XXX_DiscardUnknown() { + xxx_messageInfo_MetricSpec.DiscardUnknown(m) +} -func (m *ObjectMetricSource) Reset() { *m = ObjectMetricSource{} } -func (*ObjectMetricSource) ProtoMessage() {} -func (*ObjectMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +var xxx_messageInfo_MetricSpec proto.InternalMessageInfo -func (m *ObjectMetricStatus) Reset() { *m = ObjectMetricStatus{} } -func (*ObjectMetricStatus) ProtoMessage() {} -func (*ObjectMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *MetricStatus) Reset() { *m = MetricStatus{} } +func (*MetricStatus) ProtoMessage() {} +func (*MetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{9} +} +func (m *MetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricStatus.Merge(m, src) +} +func (m *MetricStatus) XXX_Size() int { + return m.Size() +} +func (m *MetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_MetricStatus.DiscardUnknown(m) +} -func (m *PodsMetricSource) Reset() { *m = PodsMetricSource{} } -func (*PodsMetricSource) ProtoMessage() {} -func (*PodsMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +var xxx_messageInfo_MetricStatus proto.InternalMessageInfo -func (m *PodsMetricStatus) Reset() { *m = PodsMetricStatus{} } -func (*PodsMetricStatus) ProtoMessage() {} -func (*PodsMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +func (m *ObjectMetricSource) Reset() { *m = ObjectMetricSource{} } +func (*ObjectMetricSource) ProtoMessage() {} +func (*ObjectMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{10} +} +func (m *ObjectMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMetricSource.Merge(m, src) +} +func (m *ObjectMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ObjectMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMetricSource.DiscardUnknown(m) +} -func (m *ResourceMetricSource) Reset() { *m = ResourceMetricSource{} } -func (*ResourceMetricSource) ProtoMessage() {} -func (*ResourceMetricSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +var xxx_messageInfo_ObjectMetricSource proto.InternalMessageInfo -func (m *ResourceMetricStatus) Reset() { *m = ResourceMetricStatus{} } -func (*ResourceMetricStatus) ProtoMessage() {} -func (*ResourceMetricStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +func (m *ObjectMetricStatus) Reset() { *m = ObjectMetricStatus{} } +func (*ObjectMetricStatus) ProtoMessage() {} +func (*ObjectMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{11} +} +func (m *ObjectMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMetricStatus.Merge(m, src) +} +func (m *ObjectMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ObjectMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ObjectMetricStatus proto.InternalMessageInfo + +func (m *PodsMetricSource) Reset() { *m = PodsMetricSource{} } +func (*PodsMetricSource) ProtoMessage() {} +func (*PodsMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{12} +} +func (m *PodsMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodsMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodsMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodsMetricSource.Merge(m, src) +} +func (m *PodsMetricSource) XXX_Size() int { + return m.Size() +} +func (m *PodsMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_PodsMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_PodsMetricSource proto.InternalMessageInfo + +func (m *PodsMetricStatus) Reset() { *m = PodsMetricStatus{} } +func (*PodsMetricStatus) ProtoMessage() {} +func (*PodsMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{13} +} +func (m *PodsMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodsMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodsMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodsMetricStatus.Merge(m, src) +} +func (m *PodsMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *PodsMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodsMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodsMetricStatus proto.InternalMessageInfo + +func (m *ResourceMetricSource) Reset() { *m = ResourceMetricSource{} } +func (*ResourceMetricSource) ProtoMessage() {} +func (*ResourceMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{14} +} +func (m *ResourceMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceMetricSource.Merge(m, src) +} +func (m *ResourceMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ResourceMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceMetricSource proto.InternalMessageInfo + +func (m *ResourceMetricStatus) Reset() { *m = ResourceMetricStatus{} } +func (*ResourceMetricStatus) ProtoMessage() {} +func (*ResourceMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_26c1bfc7a52d0478, []int{15} +} +func (m *ResourceMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceMetricStatus.Merge(m, src) +} +func (m *ResourceMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ResourceMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceMetricStatus proto.InternalMessageInfo func init() { proto.RegisterType((*CrossVersionObjectReference)(nil), "k8s.io.api.autoscaling.v2beta1.CrossVersionObjectReference") @@ -161,10 +513,112 @@ proto.RegisterType((*ResourceMetricSource)(nil), "k8s.io.api.autoscaling.v2beta1.ResourceMetricSource") proto.RegisterType((*ResourceMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta1.ResourceMetricStatus") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto", fileDescriptor_26c1bfc7a52d0478) +} + +var fileDescriptor_26c1bfc7a52d0478 = []byte{ + // 1475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcb, 0x8f, 0x1b, 0x45, + 0x13, 0x5f, 0x3f, 0x76, 0xb3, 0x69, 0x6f, 0x76, 0xf7, 0xeb, 0x44, 0x89, 0xb3, 0xf9, 0x62, 0xaf, + 0x2c, 0x84, 0x42, 0x44, 0x66, 0x12, 0xb3, 0x3c, 0x24, 0x84, 0xc4, 0xda, 0x40, 0x12, 0xb1, 0x4e, + 0x42, 0xef, 0x26, 0x42, 0x90, 0x20, 0xda, 0x33, 0x1d, 0x6f, 0xb3, 0x9e, 0x19, 0x6b, 0xba, 0x6d, + 0x65, 0x83, 0x90, 0xb8, 0x70, 0xe7, 0x02, 0x67, 0x90, 0x38, 0x21, 0xb8, 0xc2, 0x99, 0x5b, 0x8e, + 0x39, 0x26, 0x02, 0x59, 0x64, 0xf8, 0x2f, 0x72, 0x42, 0xfd, 0x98, 0xf1, 0x8c, 0x1f, 0x6b, 0xc7, + 0x38, 0xe1, 0x71, 0x9b, 0xee, 0xaa, 0xfa, 0x55, 0x4f, 0xfd, 0xaa, 0xab, 0xbb, 0x1a, 0x5c, 0xdc, + 0x7b, 0x8d, 0x19, 0xd4, 0x33, 0xf7, 0xda, 0x75, 0xe2, 0xbb, 0x84, 0x13, 0x66, 0x76, 0x88, 0x6b, + 0x7b, 0xbe, 0xa9, 0x05, 0xb8, 0x45, 0x4d, 0xdc, 0xe6, 0x1e, 0xb3, 0x70, 0x93, 0xba, 0x0d, 0xb3, + 0x53, 0xae, 0x13, 0x8e, 0x2f, 0x98, 0x0d, 0xe2, 0x12, 0x1f, 0x73, 0x62, 0x1b, 0x2d, 0xdf, 0xe3, + 0x1e, 0x2c, 0x28, 0x7d, 0x03, 0xb7, 0xa8, 0x11, 0xd3, 0x37, 0xb4, 0xfe, 0xda, 0xb9, 0x06, 0xe5, + 0xbb, 0xed, 0xba, 0x61, 0x79, 0x8e, 0xd9, 0xf0, 0x1a, 0x9e, 0x29, 0xcd, 0xea, 0xed, 0xdb, 0x72, + 0x24, 0x07, 0xf2, 0x4b, 0xc1, 0xad, 0x95, 0x62, 0xee, 0x2d, 0xcf, 0x27, 0x66, 0x67, 0xc0, 0xe5, + 0xda, 0x46, 0x4f, 0xc7, 0xc1, 0xd6, 0x2e, 0x75, 0x89, 0xbf, 0x6f, 0xb6, 0xf6, 0x1a, 0xd2, 0xc8, + 0x27, 0xcc, 0x6b, 0xfb, 0x16, 0x79, 0x22, 0x2b, 0x66, 0x3a, 0x84, 0xe3, 0x61, 0xbe, 0xcc, 0x51, + 0x56, 0x7e, 0xdb, 0xe5, 0xd4, 0x19, 0x74, 0xf3, 0xca, 0x38, 0x03, 0x66, 0xed, 0x12, 0x07, 0xf7, + 0xdb, 0x95, 0xbe, 0x4a, 0x81, 0x53, 0x55, 0xdf, 0x63, 0xec, 0x06, 0xf1, 0x19, 0xf5, 0xdc, 0xab, + 0xf5, 0x4f, 0x88, 0xc5, 0x11, 0xb9, 0x4d, 0x7c, 0xe2, 0x5a, 0x04, 0xae, 0x83, 0xec, 0x1e, 0x75, + 0xed, 0x7c, 0x6a, 0x3d, 0x75, 0xe6, 0x70, 0x65, 0xe9, 0x5e, 0xb7, 0x38, 0x17, 0x74, 0x8b, 0xd9, + 0x77, 0xa9, 0x6b, 0x23, 0x29, 0x11, 0x1a, 0x2e, 0x76, 0x48, 0x3e, 0x9d, 0xd4, 0xb8, 0x82, 0x1d, + 0x82, 0xa4, 0x04, 0x96, 0x01, 0xc0, 0x2d, 0xaa, 0x1d, 0xe4, 0x33, 0x52, 0x0f, 0x6a, 0x3d, 0xb0, + 0x79, 0xed, 0xb2, 0x96, 0xa0, 0x98, 0x56, 0xe9, 0xeb, 0x0c, 0x38, 0xf6, 0xf6, 0x1d, 0x4e, 0x7c, + 0x17, 0x37, 0x6b, 0x84, 0xfb, 0xd4, 0xda, 0x96, 0xf1, 0x15, 0x60, 0x8e, 0x1c, 0x0b, 0x07, 0x7a, + 0x59, 0x11, 0x58, 0x2d, 0x92, 0xa0, 0x98, 0x16, 0xf4, 0xc0, 0xb2, 0x1a, 0x6d, 0x93, 0x26, 0xb1, + 0xb8, 0xe7, 0xcb, 0xc5, 0xe6, 0xca, 0x2f, 0x19, 0xbd, 0x2c, 0x8a, 0xa2, 0x66, 0xb4, 0xf6, 0x1a, + 0x62, 0x82, 0x19, 0x82, 0x1c, 0xa3, 0x73, 0xc1, 0xd8, 0xc2, 0x75, 0xd2, 0x0c, 0x4d, 0x2b, 0x30, + 0xe8, 0x16, 0x97, 0x6b, 0x09, 0x38, 0xd4, 0x07, 0x0f, 0x31, 0xc8, 0x71, 0xec, 0x37, 0x08, 0xbf, + 0x81, 0x9b, 0x6d, 0x22, 0x7f, 0x39, 0x57, 0x36, 0x0e, 0xf2, 0x66, 0x84, 0x09, 0x64, 0xbc, 0xd7, + 0xc6, 0x2e, 0xa7, 0x7c, 0xbf, 0xb2, 0x12, 0x74, 0x8b, 0xb9, 0x9d, 0x1e, 0x0c, 0x8a, 0x63, 0xc2, + 0x0e, 0x80, 0x6a, 0xb8, 0xd9, 0x21, 0x3e, 0x6e, 0x10, 0xe5, 0x29, 0x3b, 0x95, 0xa7, 0xe3, 0x41, + 0xb7, 0x08, 0x77, 0x06, 0xd0, 0xd0, 0x10, 0x0f, 0xa5, 0x6f, 0x06, 0x89, 0xe1, 0x98, 0xb7, 0xd9, + 0xbf, 0x83, 0x98, 0x5d, 0xb0, 0x64, 0xb5, 0x7d, 0x9f, 0xb8, 0x7f, 0x89, 0x99, 0x63, 0xfa, 0xb7, + 0x96, 0xaa, 0x31, 0x2c, 0x94, 0x40, 0x86, 0xfb, 0xe0, 0xa8, 0x1e, 0xcf, 0x80, 0xa0, 0x13, 0x41, + 0xb7, 0x78, 0xb4, 0x3a, 0x08, 0x87, 0x86, 0xf9, 0x28, 0xfd, 0x92, 0x06, 0x27, 0x2e, 0x79, 0x3e, + 0xbd, 0xeb, 0xb9, 0x1c, 0x37, 0xaf, 0x79, 0xf6, 0xa6, 0x2e, 0x90, 0xc4, 0x87, 0x1f, 0x83, 0x45, + 0x11, 0x3d, 0x1b, 0x73, 0x2c, 0x39, 0xca, 0x95, 0xcf, 0x4f, 0x16, 0x6b, 0x55, 0x18, 0x6a, 0x84, + 0xe3, 0x1e, 0xab, 0xbd, 0x39, 0x14, 0xa1, 0xc2, 0x5b, 0x20, 0xcb, 0x5a, 0xc4, 0xd2, 0x4c, 0xbe, + 0x6e, 0x1c, 0x5c, 0xa8, 0x8d, 0x11, 0x0b, 0xdd, 0x6e, 0x11, 0xab, 0x57, 0x4c, 0xc4, 0x08, 0x49, + 0x58, 0x48, 0xc0, 0x02, 0x93, 0x09, 0xa7, 0xb9, 0x7b, 0x63, 0x5a, 0x07, 0x12, 0xa4, 0xb2, 0xac, + 0x5d, 0x2c, 0xa8, 0x31, 0xd2, 0xe0, 0xa5, 0x2f, 0x32, 0x60, 0x7d, 0x84, 0x65, 0xd5, 0x73, 0x6d, + 0xca, 0xa9, 0xe7, 0xc2, 0x4b, 0x20, 0xcb, 0xf7, 0x5b, 0x61, 0xb2, 0x6f, 0x84, 0xab, 0xdd, 0xd9, + 0x6f, 0x91, 0xc7, 0xdd, 0xe2, 0x73, 0xe3, 0xec, 0x85, 0x1e, 0x92, 0x08, 0x70, 0x2b, 0xfa, 0xab, + 0x74, 0x02, 0x4b, 0x2f, 0xeb, 0x71, 0xb7, 0x38, 0xe4, 0x84, 0x32, 0x22, 0xa4, 0xe4, 0xe2, 0x45, + 0x6d, 0x68, 0x62, 0xc6, 0x77, 0x7c, 0xec, 0x32, 0xe5, 0x89, 0x3a, 0x61, 0xae, 0x9f, 0x9d, 0x8c, + 0x6e, 0x61, 0x51, 0x59, 0xd3, 0xab, 0x80, 0x5b, 0x03, 0x68, 0x68, 0x88, 0x07, 0xf8, 0x3c, 0x58, + 0xf0, 0x09, 0x66, 0x9e, 0x2b, 0xd3, 0xfc, 0x70, 0x2f, 0xb8, 0x48, 0xce, 0x22, 0x2d, 0x85, 0x2f, + 0x80, 0x43, 0x0e, 0x61, 0x0c, 0x37, 0x48, 0x7e, 0x5e, 0x2a, 0xae, 0x68, 0xc5, 0x43, 0x35, 0x35, + 0x8d, 0x42, 0x79, 0xe9, 0x61, 0x0a, 0x9c, 0x1a, 0x11, 0xc7, 0x2d, 0xca, 0x38, 0xbc, 0x39, 0x90, + 0xcf, 0xc6, 0x84, 0xb5, 0x83, 0x32, 0x95, 0xcd, 0xab, 0xda, 0xf7, 0x62, 0x38, 0x13, 0xcb, 0xe5, + 0x9b, 0x60, 0x9e, 0x72, 0xe2, 0x08, 0x56, 0x32, 0x67, 0x72, 0xe5, 0x57, 0xa7, 0xcc, 0xb5, 0xca, + 0x11, 0xed, 0x63, 0xfe, 0xb2, 0x40, 0x43, 0x0a, 0xb4, 0xf4, 0x6b, 0x7a, 0xe4, 0xbf, 0x89, 0x84, + 0x87, 0x9f, 0x82, 0x65, 0x39, 0x52, 0x95, 0x19, 0x91, 0xdb, 0xfa, 0x0f, 0xc7, 0xee, 0xa9, 0x03, + 0x0e, 0xf4, 0xca, 0x71, 0xbd, 0x94, 0xe5, 0xed, 0x04, 0x34, 0xea, 0x73, 0x05, 0x2f, 0x80, 0x9c, + 0x43, 0x5d, 0x44, 0x5a, 0x4d, 0x6a, 0x61, 0x95, 0x96, 0xf3, 0xea, 0x48, 0xaa, 0xf5, 0xa6, 0x51, + 0x5c, 0x07, 0xbe, 0x0c, 0x72, 0x0e, 0xbe, 0x13, 0x99, 0x64, 0xa4, 0xc9, 0x51, 0xed, 0x2f, 0x57, + 0xeb, 0x89, 0x50, 0x5c, 0x0f, 0x5e, 0x17, 0xd9, 0x20, 0xaa, 0x34, 0xcb, 0x67, 0x65, 0x98, 0xcf, + 0x8e, 0xfb, 0x3f, 0x5d, 0xe4, 0x45, 0x89, 0x88, 0x65, 0x8e, 0x84, 0x40, 0x21, 0x56, 0xe9, 0xa7, + 0x2c, 0x38, 0x7d, 0xe0, 0xde, 0x87, 0xef, 0x00, 0xe8, 0xd5, 0x19, 0xf1, 0x3b, 0xc4, 0xbe, 0xa8, + 0xae, 0x45, 0xe2, 0x7e, 0x22, 0x62, 0x9c, 0x51, 0x47, 0xe2, 0xd5, 0x01, 0x29, 0x1a, 0x62, 0x01, + 0x2d, 0x70, 0x44, 0x6c, 0x06, 0x15, 0x50, 0xaa, 0xaf, 0x42, 0x4f, 0xb6, 0xd3, 0xfe, 0x17, 0x74, + 0x8b, 0x47, 0xb6, 0xe2, 0x20, 0x28, 0x89, 0x09, 0x37, 0xc1, 0x8a, 0xae, 0xf5, 0x7d, 0x01, 0x3e, + 0xa1, 0x23, 0xb0, 0x52, 0x4d, 0x8a, 0x51, 0xbf, 0xbe, 0x80, 0xb0, 0x09, 0xa3, 0x3e, 0xb1, 0x23, + 0x88, 0x6c, 0x12, 0xe2, 0xad, 0xa4, 0x18, 0xf5, 0xeb, 0xc3, 0x26, 0x58, 0xd6, 0xa8, 0x3a, 0xde, + 0xf9, 0x79, 0x49, 0xd9, 0x8b, 0x13, 0x52, 0xa6, 0x8a, 0x6e, 0x94, 0x83, 0xd5, 0x04, 0x16, 0xea, + 0xc3, 0x86, 0x1c, 0x00, 0x2b, 0x2c, 0x71, 0x2c, 0xbf, 0x20, 0x3d, 0xbd, 0x39, 0xe5, 0x1e, 0x8c, + 0x6a, 0x65, 0xef, 0xf8, 0x8a, 0xa6, 0x18, 0x8a, 0xf9, 0x29, 0x7d, 0x9f, 0x01, 0xa0, 0x97, 0x61, + 0x70, 0x23, 0x51, 0xe4, 0xd7, 0xfb, 0x8a, 0xfc, 0x6a, 0xfc, 0x72, 0x1a, 0x2b, 0xe8, 0x37, 0xc0, + 0x82, 0x27, 0x77, 0x9e, 0x4e, 0x86, 0xf2, 0xb8, 0x65, 0x47, 0x67, 0x69, 0x84, 0x56, 0x01, 0xa2, + 0x74, 0xea, 0xfd, 0xab, 0xd1, 0xe0, 0x15, 0x90, 0x6d, 0x79, 0x76, 0x78, 0xf8, 0x9d, 0x1f, 0x87, + 0x7a, 0xcd, 0xb3, 0x59, 0x02, 0x73, 0x51, 0xac, 0x5d, 0xcc, 0x22, 0x89, 0x03, 0x3f, 0x02, 0x8b, + 0xe1, 0x75, 0x43, 0xdf, 0x4d, 0x36, 0xc6, 0x61, 0x22, 0xad, 0x9f, 0xc0, 0x5d, 0x12, 0x15, 0x34, + 0x94, 0xa0, 0x08, 0x53, 0xe0, 0x13, 0x7d, 0x5b, 0x94, 0xb5, 0x7e, 0x02, 0xfc, 0x61, 0xd7, 0x7e, + 0x85, 0x1f, 0x4a, 0x50, 0x84, 0x59, 0xfa, 0x21, 0x03, 0x96, 0x12, 0xd7, 0xd0, 0xbf, 0x83, 0x2e, + 0x95, 0xd5, 0xb3, 0xa5, 0x4b, 0x61, 0xce, 0x9e, 0x2e, 0x85, 0xfb, 0xf4, 0xe8, 0x8a, 0xe1, 0x0f, + 0xa1, 0xeb, 0x61, 0x06, 0xc0, 0xc1, 0x4c, 0x87, 0x16, 0x58, 0x50, 0xad, 0xc6, 0x2c, 0x4e, 0xb8, + 0xe8, 0xd6, 0xa1, 0x0f, 0x33, 0x0d, 0xdd, 0xd7, 0xa0, 0xa4, 0x27, 0x6a, 0x50, 0xc8, 0x2c, 0x1a, + 0xb9, 0xe8, 0x08, 0x1c, 0xd9, 0xcc, 0xdd, 0x02, 0x8b, 0x2c, 0xec, 0x80, 0xb2, 0xd3, 0x77, 0x40, + 0x32, 0xea, 0x51, 0xef, 0x13, 0x41, 0x42, 0x1b, 0x2c, 0xe1, 0x78, 0x13, 0x32, 0x3f, 0xd5, 0x6f, + 0xac, 0x8a, 0x8e, 0x27, 0xd1, 0x7d, 0x24, 0x50, 0x4b, 0xbf, 0xf5, 0x73, 0xab, 0x36, 0xe4, 0x3f, + 0x96, 0xdb, 0x67, 0xd7, 0x0b, 0xfe, 0x27, 0xe8, 0xfd, 0x36, 0x0d, 0x56, 0xfb, 0x8f, 0x93, 0xa9, + 0x9a, 0xfe, 0xbb, 0x43, 0x5f, 0x2e, 0xd2, 0x53, 0x2d, 0x3a, 0xea, 0x50, 0x26, 0x7b, 0xbd, 0x48, + 0x30, 0x91, 0x99, 0x39, 0x13, 0xa5, 0xef, 0x92, 0x31, 0x9a, 0xfe, 0x61, 0xe4, 0xb3, 0xe1, 0xaf, + 0x07, 0xd3, 0x05, 0xe9, 0x94, 0x76, 0x36, 0xf1, 0x0b, 0xc2, 0xd3, 0x0e, 0xd3, 0x8f, 0x69, 0x70, + 0x6c, 0xd8, 0x2d, 0x02, 0x56, 0xf5, 0x5b, 0xa2, 0x0a, 0x92, 0x19, 0x7f, 0x4b, 0x7c, 0xdc, 0x2d, + 0x16, 0x87, 0xb4, 0xc0, 0x21, 0x4c, 0xec, 0xb9, 0xf1, 0x7d, 0x90, 0x4f, 0x30, 0x7f, 0x9d, 0xd3, + 0x26, 0xbd, 0xab, 0x2e, 0xf7, 0xaa, 0x8d, 0xf9, 0x7f, 0xd0, 0x2d, 0xe6, 0x77, 0x46, 0xe8, 0xa0, + 0x91, 0xd6, 0x23, 0xde, 0xdc, 0x32, 0x4f, 0xfd, 0xcd, 0xed, 0xe7, 0xc1, 0x78, 0xa9, 0xd4, 0x9a, + 0x49, 0xbc, 0x3e, 0x04, 0x27, 0x93, 0x39, 0x30, 0x18, 0xb0, 0xd3, 0x41, 0xb7, 0x78, 0xb2, 0x3a, + 0x4a, 0x09, 0x8d, 0xb6, 0x1f, 0x95, 0xc8, 0x99, 0x67, 0x93, 0xc8, 0x95, 0x73, 0xf7, 0x1e, 0x15, + 0xe6, 0xee, 0x3f, 0x2a, 0xcc, 0x3d, 0x78, 0x54, 0x98, 0xfb, 0x3c, 0x28, 0xa4, 0xee, 0x05, 0x85, + 0xd4, 0xfd, 0xa0, 0x90, 0x7a, 0x10, 0x14, 0x52, 0xbf, 0x07, 0x85, 0xd4, 0x97, 0x7f, 0x14, 0xe6, + 0x3e, 0x38, 0xa4, 0x8f, 0x9e, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x05, 0x26, 0x31, 0x5d, 0x9f, + 0x18, 0x00, 0x00, +} + func (m *CrossVersionObjectReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -172,29 +626,37 @@ } func (m *CrossVersionObjectReference) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CrossVersionObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x1a - i++ + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ExternalMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -202,51 +664,63 @@ } func (m *ExternalMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - if m.MetricSelector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MetricSelector.Size())) - n1, err := m.MetricSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.TargetAverageValue != nil { + { + size, err := m.TargetAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- + dAtA[i] = 0x22 } if m.TargetValue != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) - n2, err := m.TargetValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.TargetValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- + dAtA[i] = 0x1a } - if m.TargetAverageValue != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) - n3, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.MetricSelector != nil { + { + size, err := m.MetricSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ExternalMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -254,49 +728,61 @@ } func (m *ExternalMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - if m.MetricSelector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MetricSelector.Size())) - n4, err := m.MetricSelector.MarshalTo(dAtA[i:]) + if m.CurrentAverageValue != nil { + { + size, err := m.CurrentAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.CurrentValue.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n4 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) - n5, err := m.CurrentValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if m.CurrentAverageValue != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) - n6, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.MetricSelector != nil { + { + size, err := m.MetricSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscaler) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -304,41 +790,52 @@ } func (m *HorizontalPodAutoscaler) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscaler) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n8, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n9, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -346,41 +843,52 @@ } func (m *HorizontalPodAutoscalerCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n10, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -388,37 +896,46 @@ } func (m *HorizontalPodAutoscalerList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n11, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -426,45 +943,54 @@ } func (m *HorizontalPodAutoscalerSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleTargetRef.Size())) - n12, err := m.ScaleTargetRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Metrics) > 0 { + for iNdEx := len(m.Metrics) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Metrics[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } } - i += n12 + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxReplicas)) + i-- + dAtA[i] = 0x18 if m.MinReplicas != nil { - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(*m.MinReplicas)) + i-- + dAtA[i] = 0x10 } - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxReplicas)) - if len(m.Metrics) > 0 { - for _, msg := range m.Metrics { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + { + size, err := m.ScaleTargetRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HorizontalPodAutoscalerStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -472,62 +998,73 @@ } func (m *HorizontalPodAutoscalerStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ObservedGeneration != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) - } - if m.LastScaleTime != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastScaleTime.Size())) - n13, err := m.LastScaleTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 } - i += n13 } - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredReplicas)) if len(m.CurrentMetrics) > 0 { - for _, msg := range m.CurrentMetrics { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.CurrentMetrics) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CurrentMetrics[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x2a } } - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + i-- + dAtA[i] = 0x18 + if m.LastScaleTime != nil { + { + size, err := m.LastScaleTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - return i, nil + if m.ObservedGeneration != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *MetricSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -535,61 +1072,75 @@ } func (m *MetricSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if m.Object != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) - n14, err := m.Object.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n14 - } - if m.Pods != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Pods.Size())) - n15, err := m.Pods.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.External != nil { + { + size, err := m.External.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 + i-- + dAtA[i] = 0x2a } if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Resource.Size())) - n16, err := m.Resource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.Pods != nil { + { + size, err := m.Pods.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n16 + i-- + dAtA[i] = 0x1a } - if m.External != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.External.Size())) - n17, err := m.External.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Object != nil { + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n17 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *MetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -597,99 +1148,147 @@ } func (m *MetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if m.Object != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) - n18, err := m.Object.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.External != nil { + { + size, err := m.External.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n18 + i-- + dAtA[i] = 0x22 } if m.Pods != nil { + { + size, err := m.Pods.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Pods.Size())) - n19, err := m.Pods.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if m.Object != nil { + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n19 + i-- + dAtA[i] = 0x12 } - if m.Resource != nil { + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ObjectMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ObjectMetricSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AverageValue != nil { + { + size, err := m.AverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Resource.Size())) - n20, err := m.Resource.MarshalTo(dAtA[i:]) + } + { + size, err := m.TargetValue.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n20 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.External != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.External.Size())) - n21, err := m.External.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x1a + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n21 - } - return i, nil -} - -func (m *ObjectMetricSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return dAtA[:n], nil -} - -func (m *ObjectMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) - n22, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) - n23, err := m.TargetValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - return i, nil + return len(dAtA) - i, nil } func (m *ObjectMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -697,37 +1296,71 @@ } func (m *ObjectMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) - n24, err := m.Target.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.AverageValue != nil { + { + size, err := m.AverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } - i += n24 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.CurrentValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) - n25, err := m.CurrentValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n25 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodsMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -735,29 +1368,49 @@ } func (m *PodsMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodsMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) - n26, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + { + size, err := m.TargetAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n26 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodsMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -765,29 +1418,49 @@ } func (m *PodsMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodsMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) - i += copy(dAtA[i:], m.MetricName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) - n27, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i += n27 - return i, nil + { + size, err := m.CurrentAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.MetricName) + copy(dAtA[i:], m.MetricName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MetricName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ResourceMetricSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -795,36 +1468,44 @@ } func (m *ResourceMetricSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if m.TargetAverageUtilization != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetAverageUtilization)) - } if m.TargetAverageValue != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetAverageValue.Size())) - n28, err := m.TargetAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.TargetAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n28 + i-- + dAtA[i] = 0x1a + } + if m.TargetAverageUtilization != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TargetAverageUtilization)) + i-- + dAtA[i] = 0x10 } - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ResourceMetricStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -832,58 +1513,53 @@ } func (m *ResourceMetricStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if m.CurrentAverageUtilization != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentAverageUtilization)) + { + size, err := m.CurrentAverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentAverageValue.Size())) - n29, err := m.CurrentAverageValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.CurrentAverageUtilization != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CurrentAverageUtilization)) + i-- + dAtA[i] = 0x10 } - i += n29 - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *CrossVersionObjectReference) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -896,6 +1572,9 @@ } func (m *ExternalMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) @@ -916,6 +1595,9 @@ } func (m *ExternalMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) @@ -934,6 +1616,9 @@ } func (m *HorizontalPodAutoscaler) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -946,6 +1631,9 @@ } func (m *HorizontalPodAutoscalerCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -962,6 +1650,9 @@ } func (m *HorizontalPodAutoscalerList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -976,6 +1667,9 @@ } func (m *HorizontalPodAutoscalerSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ScaleTargetRef.Size() @@ -994,6 +1688,9 @@ } func (m *HorizontalPodAutoscalerStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.ObservedGeneration != nil { @@ -1021,6 +1718,9 @@ } func (m *MetricSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1045,6 +1745,9 @@ } func (m *MetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -1069,6 +1772,9 @@ } func (m *ObjectMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Target.Size() @@ -1077,10 +1783,21 @@ n += 1 + l + sovGenerated(uint64(l)) l = m.TargetValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *ObjectMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Target.Size() @@ -1089,30 +1806,55 @@ n += 1 + l + sovGenerated(uint64(l)) l = m.CurrentValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *PodsMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) n += 1 + l + sovGenerated(uint64(l)) l = m.TargetAverageValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *PodsMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.MetricName) n += 1 + l + sovGenerated(uint64(l)) l = m.CurrentAverageValue.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *ResourceMetricSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1128,6 +1870,9 @@ } func (m *ResourceMetricStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1141,14 +1886,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1171,9 +1909,9 @@ } s := strings.Join([]string{`&ExternalMetricSource{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `TargetValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, - `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `TargetValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "resource.Quantity", 1) + `,`, + `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1184,9 +1922,9 @@ } s := strings.Join([]string{`&ExternalMetricStatus{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, - `CurrentAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `MetricSelector:` + strings.Replace(fmt.Sprintf("%v", this.MetricSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1196,7 +1934,7 @@ return "nil" } s := strings.Join([]string{`&HorizontalPodAutoscaler{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "HorizontalPodAutoscalerSpec", "HorizontalPodAutoscalerSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "HorizontalPodAutoscalerStatus", "HorizontalPodAutoscalerStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1210,7 +1948,7 @@ s := strings.Join([]string{`&HorizontalPodAutoscalerCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -1221,9 +1959,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]HorizontalPodAutoscaler{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&HorizontalPodAutoscalerList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1232,11 +1975,16 @@ if this == nil { return "nil" } + repeatedStringForMetrics := "[]MetricSpec{" + for _, f := range this.Metrics { + repeatedStringForMetrics += strings.Replace(strings.Replace(f.String(), "MetricSpec", "MetricSpec", 1), `&`, ``, 1) + "," + } + repeatedStringForMetrics += "}" s := strings.Join([]string{`&HorizontalPodAutoscalerSpec{`, `ScaleTargetRef:` + strings.Replace(strings.Replace(this.ScaleTargetRef.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, `MinReplicas:` + valueToStringGenerated(this.MinReplicas) + `,`, `MaxReplicas:` + fmt.Sprintf("%v", this.MaxReplicas) + `,`, - `Metrics:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Metrics), "MetricSpec", "MetricSpec", 1), `&`, ``, 1) + `,`, + `Metrics:` + repeatedStringForMetrics + `,`, `}`, }, "") return s @@ -1245,13 +1993,23 @@ if this == nil { return "nil" } + repeatedStringForCurrentMetrics := "[]MetricStatus{" + for _, f := range this.CurrentMetrics { + repeatedStringForCurrentMetrics += strings.Replace(strings.Replace(f.String(), "MetricStatus", "MetricStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForCurrentMetrics += "}" + repeatedStringForConditions := "[]HorizontalPodAutoscalerCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "HorizontalPodAutoscalerCondition", "HorizontalPodAutoscalerCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&HorizontalPodAutoscalerStatus{`, `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, - `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, + `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "v1.Time", 1) + `,`, `CurrentReplicas:` + fmt.Sprintf("%v", this.CurrentReplicas) + `,`, `DesiredReplicas:` + fmt.Sprintf("%v", this.DesiredReplicas) + `,`, - `CurrentMetrics:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentMetrics), "MetricStatus", "MetricStatus", 1), `&`, ``, 1) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "HorizontalPodAutoscalerCondition", "HorizontalPodAutoscalerCondition", 1), `&`, ``, 1) + `,`, + `CurrentMetrics:` + repeatedStringForCurrentMetrics + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -1262,10 +2020,10 @@ } s := strings.Join([]string{`&MetricSpec{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Object:` + strings.Replace(fmt.Sprintf("%v", this.Object), "ObjectMetricSource", "ObjectMetricSource", 1) + `,`, - `Pods:` + strings.Replace(fmt.Sprintf("%v", this.Pods), "PodsMetricSource", "PodsMetricSource", 1) + `,`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "ResourceMetricSource", "ResourceMetricSource", 1) + `,`, - `External:` + strings.Replace(fmt.Sprintf("%v", this.External), "ExternalMetricSource", "ExternalMetricSource", 1) + `,`, + `Object:` + strings.Replace(this.Object.String(), "ObjectMetricSource", "ObjectMetricSource", 1) + `,`, + `Pods:` + strings.Replace(this.Pods.String(), "PodsMetricSource", "PodsMetricSource", 1) + `,`, + `Resource:` + strings.Replace(this.Resource.String(), "ResourceMetricSource", "ResourceMetricSource", 1) + `,`, + `External:` + strings.Replace(this.External.String(), "ExternalMetricSource", "ExternalMetricSource", 1) + `,`, `}`, }, "") return s @@ -1276,10 +2034,10 @@ } s := strings.Join([]string{`&MetricStatus{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Object:` + strings.Replace(fmt.Sprintf("%v", this.Object), "ObjectMetricStatus", "ObjectMetricStatus", 1) + `,`, - `Pods:` + strings.Replace(fmt.Sprintf("%v", this.Pods), "PodsMetricStatus", "PodsMetricStatus", 1) + `,`, - `Resource:` + strings.Replace(fmt.Sprintf("%v", this.Resource), "ResourceMetricStatus", "ResourceMetricStatus", 1) + `,`, - `External:` + strings.Replace(fmt.Sprintf("%v", this.External), "ExternalMetricStatus", "ExternalMetricStatus", 1) + `,`, + `Object:` + strings.Replace(this.Object.String(), "ObjectMetricStatus", "ObjectMetricStatus", 1) + `,`, + `Pods:` + strings.Replace(this.Pods.String(), "PodsMetricStatus", "PodsMetricStatus", 1) + `,`, + `Resource:` + strings.Replace(this.Resource.String(), "ResourceMetricStatus", "ResourceMetricStatus", 1) + `,`, + `External:` + strings.Replace(this.External.String(), "ExternalMetricStatus", "ExternalMetricStatus", 1) + `,`, `}`, }, "") return s @@ -1291,7 +2049,9 @@ s := strings.Join([]string{`&ObjectMetricSource{`, `Target:` + strings.Replace(strings.Replace(this.Target.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `TargetValue:` + strings.Replace(strings.Replace(this.TargetValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `TargetValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TargetValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1303,7 +2063,9 @@ s := strings.Join([]string{`&ObjectMetricStatus{`, `Target:` + strings.Replace(strings.Replace(this.Target.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1314,7 +2076,8 @@ } s := strings.Join([]string{`&PodsMetricSource{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `TargetAverageValue:` + strings.Replace(strings.Replace(this.TargetAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `TargetAverageValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `}`, }, "") return s @@ -1325,7 +2088,8 @@ } s := strings.Join([]string{`&PodsMetricStatus{`, `MetricName:` + fmt.Sprintf("%v", this.MetricName) + `,`, - `CurrentAverageValue:` + strings.Replace(strings.Replace(this.CurrentAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `}`, }, "") return s @@ -1337,7 +2101,7 @@ s := strings.Join([]string{`&ResourceMetricSource{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `TargetAverageUtilization:` + valueToStringGenerated(this.TargetAverageUtilization) + `,`, - `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, + `TargetAverageValue:` + strings.Replace(fmt.Sprintf("%v", this.TargetAverageValue), "Quantity", "resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -1349,7 +2113,7 @@ s := strings.Join([]string{`&ResourceMetricStatus{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `CurrentAverageUtilization:` + valueToStringGenerated(this.CurrentAverageUtilization) + `,`, - `CurrentAverageValue:` + strings.Replace(strings.Replace(this.CurrentAverageValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `CurrentAverageValue:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CurrentAverageValue), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -1377,7 +2141,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1405,7 +2169,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1415,6 +2179,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1434,7 +2201,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1444,6 +2211,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1463,7 +2233,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1473,6 +2243,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1487,6 +2260,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1514,7 +2290,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1542,7 +2318,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1552,6 +2328,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1571,7 +2350,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1580,11 +2359,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MetricSelector == nil { - m.MetricSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.MetricSelector = &v1.LabelSelector{} } if err := m.MetricSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1604,7 +2386,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1613,11 +2395,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.TargetValue == nil { - m.TargetValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.TargetValue = &resource.Quantity{} } if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1637,7 +2422,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1646,11 +2431,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.TargetAverageValue == nil { - m.TargetAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.TargetAverageValue = &resource.Quantity{} } if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1665,6 +2453,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1692,7 +2483,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1720,7 +2511,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1730,6 +2521,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1749,7 +2543,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1758,11 +2552,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.MetricSelector == nil { - m.MetricSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.MetricSelector = &v1.LabelSelector{} } if err := m.MetricSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1782,7 +2579,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1791,6 +2588,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1812,7 +2612,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1821,11 +2621,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.CurrentAverageValue == nil { - m.CurrentAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.CurrentAverageValue = &resource.Quantity{} } if err := m.CurrentAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1840,6 +2643,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1867,7 +2673,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1895,7 +2701,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1904,6 +2710,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1925,7 +2734,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1934,6 +2743,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1955,7 +2767,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1964,6 +2776,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1980,6 +2795,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2007,7 +2825,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2035,7 +2853,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2045,6 +2863,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2064,7 +2885,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2074,6 +2895,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2093,7 +2917,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2102,6 +2926,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2123,7 +2950,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2133,6 +2960,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2152,7 +2982,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2162,6 +2992,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2176,6 +3009,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2203,7 +3039,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2231,7 +3067,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2240,6 +3076,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2261,7 +3100,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2270,6 +3109,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2287,6 +3129,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2314,7 +3159,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2342,7 +3187,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2351,6 +3196,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2372,7 +3220,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2392,7 +3240,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MaxReplicas |= (int32(b) & 0x7F) << shift + m.MaxReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2411,7 +3259,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2420,6 +3268,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2437,6 +3288,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2464,7 +3318,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2492,7 +3346,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -2512,7 +3366,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2521,11 +3375,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.LastScaleTime == nil { - m.LastScaleTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.LastScaleTime = &v1.Time{} } if err := m.LastScaleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -2545,7 +3402,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentReplicas |= (int32(b) & 0x7F) << shift + m.CurrentReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2564,7 +3421,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.DesiredReplicas |= (int32(b) & 0x7F) << shift + m.DesiredReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -2583,7 +3440,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2592,6 +3449,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2614,7 +3474,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2623,6 +3483,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2640,6 +3503,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2667,7 +3533,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2695,7 +3561,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2705,6 +3571,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2724,7 +3593,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2733,6 +3602,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2757,7 +3629,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2765,7 +3637,10 @@ if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2790,7 +3665,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2799,6 +3674,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2823,7 +3701,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2832,6 +3710,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2851,6 +3732,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2878,7 +3762,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2906,7 +3790,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2916,6 +3800,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2935,7 +3822,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2944,6 +3831,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2968,7 +3858,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2977,6 +3867,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3001,7 +3894,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3010,6 +3903,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3034,7 +3930,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3043,6 +3939,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3062,6 +3961,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3089,7 +3991,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3117,7 +4019,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3126,6 +4028,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3147,7 +4052,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3157,6 +4062,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3176,7 +4084,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3185,6 +4093,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3192,6 +4103,78 @@ return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AverageValue == nil { + m.AverageValue = &resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3201,6 +4184,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3228,7 +4214,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3256,7 +4242,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3265,6 +4251,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3286,7 +4275,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3296,6 +4285,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3315,7 +4307,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3324,6 +4316,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3331,6 +4326,78 @@ return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AverageValue == nil { + m.AverageValue = &resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3340,6 +4407,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3367,7 +4437,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3395,7 +4465,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3405,6 +4475,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3424,7 +4497,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3433,6 +4506,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3440,6 +4516,42 @@ return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3449,6 +4561,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3476,7 +4591,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3504,7 +4619,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3514,6 +4629,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3533,7 +4651,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3542,6 +4660,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3549,6 +4670,42 @@ return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3558,6 +4715,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3585,7 +4745,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3613,7 +4773,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3623,6 +4783,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3642,7 +4805,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3662,7 +4825,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3671,11 +4834,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.TargetAverageValue == nil { - m.TargetAverageValue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + m.TargetAverageValue = &resource.Quantity{} } if err := m.TargetAverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3690,6 +4856,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3717,7 +4886,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3745,7 +4914,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3755,6 +4924,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3774,7 +4946,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -3794,7 +4966,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3803,6 +4975,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3819,6 +4994,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3885,10 +5063,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -3917,6 +5098,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -3935,101 +5119,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 1426 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcb, 0x8f, 0x1b, 0x45, - 0x13, 0x5f, 0x3f, 0x76, 0xb3, 0x69, 0x6f, 0x76, 0xf3, 0x75, 0xa2, 0xc4, 0xd9, 0x7c, 0xf1, 0xac, - 0x46, 0x08, 0x85, 0x88, 0xcc, 0x24, 0x66, 0x79, 0x48, 0x08, 0x89, 0xb5, 0x81, 0x24, 0x62, 0x9d, - 0x84, 0xde, 0x4d, 0x84, 0x20, 0x20, 0xda, 0xe3, 0x8e, 0xb7, 0x59, 0xcf, 0x8c, 0x35, 0xdd, 0xb6, - 0xb2, 0x41, 0x48, 0x5c, 0xb8, 0x73, 0xe0, 0x71, 0xe5, 0x8c, 0xe0, 0x0a, 0x67, 0x90, 0x90, 0x72, - 0xcc, 0x31, 0x08, 0xc9, 0x22, 0xc3, 0x7f, 0x91, 0x13, 0xea, 0xc7, 0x8c, 0x67, 0xfc, 0x58, 0x3b, - 0x66, 0x13, 0xe0, 0x36, 0xdd, 0x55, 0xf5, 0xab, 0xea, 0xaa, 0xea, 0xea, 0xaa, 0x01, 0x97, 0x76, - 0x5f, 0x61, 0x16, 0xf5, 0xed, 0xdd, 0x4e, 0x9d, 0x04, 0x1e, 0xe1, 0x84, 0xd9, 0x5d, 0xe2, 0x35, - 0xfc, 0xc0, 0xd6, 0x04, 0xdc, 0xa6, 0x36, 0xee, 0x70, 0x9f, 0x39, 0xb8, 0x45, 0xbd, 0xa6, 0xdd, - 0x2d, 0xd7, 0x09, 0xc7, 0x17, 0xed, 0x26, 0xf1, 0x48, 0x80, 0x39, 0x69, 0x58, 0xed, 0xc0, 0xe7, - 0x3e, 0x2c, 0x29, 0x7e, 0x0b, 0xb7, 0xa9, 0x95, 0xe0, 0xb7, 0x34, 0xff, 0xea, 0xf9, 0x26, 0xe5, - 0x3b, 0x9d, 0xba, 0xe5, 0xf8, 0xae, 0xdd, 0xf4, 0x9b, 0xbe, 0x2d, 0xc5, 0xea, 0x9d, 0xdb, 0x72, - 0x25, 0x17, 0xf2, 0x4b, 0xc1, 0xad, 0x9a, 0x09, 0xf5, 0x8e, 0x1f, 0x10, 0xbb, 0x3b, 0xa4, 0x72, - 0x75, 0xbd, 0xcf, 0xe3, 0x62, 0x67, 0x87, 0x7a, 0x24, 0xd8, 0xb3, 0xdb, 0xbb, 0x4d, 0x29, 0x14, - 0x10, 0xe6, 0x77, 0x02, 0x87, 0x3c, 0x96, 0x14, 0xb3, 0x5d, 0xc2, 0xf1, 0x28, 0x5d, 0xf6, 0x38, - 0xa9, 0xa0, 0xe3, 0x71, 0xea, 0x0e, 0xab, 0x79, 0x69, 0x92, 0x00, 0x73, 0x76, 0x88, 0x8b, 0x07, - 0xe5, 0xcc, 0xaf, 0x32, 0xe0, 0x74, 0x35, 0xf0, 0x19, 0xbb, 0x49, 0x02, 0x46, 0x7d, 0xef, 0x5a, - 0xfd, 0x63, 0xe2, 0x70, 0x44, 0x6e, 0x93, 0x80, 0x78, 0x0e, 0x81, 0x6b, 0x20, 0xbf, 0x4b, 0xbd, - 0x46, 0x31, 0xb3, 0x96, 0x39, 0x7b, 0xb8, 0xb2, 0x74, 0xaf, 0x67, 0xcc, 0x85, 0x3d, 0x23, 0xff, - 0x36, 0xf5, 0x1a, 0x48, 0x52, 0x04, 0x87, 0x87, 0x5d, 0x52, 0xcc, 0xa6, 0x39, 0xae, 0x62, 0x97, - 0x20, 0x49, 0x81, 0x65, 0x00, 0x70, 0x9b, 0x6a, 0x05, 0xc5, 0x9c, 0xe4, 0x83, 0x9a, 0x0f, 0x6c, - 0x5c, 0xbf, 0xa2, 0x29, 0x28, 0xc1, 0x65, 0x7e, 0x9d, 0x03, 0xc7, 0xdf, 0xbc, 0xc3, 0x49, 0xe0, - 0xe1, 0x56, 0x8d, 0xf0, 0x80, 0x3a, 0x5b, 0xd2, 0xbf, 0x02, 0xcc, 0x95, 0x6b, 0xa1, 0x40, 0x9b, - 0x15, 0x83, 0xd5, 0x62, 0x0a, 0x4a, 0x70, 0x41, 0x1f, 0x2c, 0xab, 0xd5, 0x16, 0x69, 0x11, 0x87, - 0xfb, 0x81, 0x34, 0xb6, 0x50, 0x7e, 0xc1, 0xea, 0x67, 0x51, 0xec, 0x35, 0xab, 0xbd, 0xdb, 0x14, - 0x1b, 0xcc, 0x12, 0xc1, 0xb1, 0xba, 0x17, 0xad, 0x4d, 0x5c, 0x27, 0xad, 0x48, 0xb4, 0x02, 0xc3, - 0x9e, 0xb1, 0x5c, 0x4b, 0xc1, 0xa1, 0x01, 0x78, 0x88, 0x41, 0x81, 0xe3, 0xa0, 0x49, 0xf8, 0x4d, - 0xdc, 0xea, 0x10, 0x79, 0xe4, 0x42, 0xd9, 0xda, 0x4f, 0x9b, 0x15, 0x25, 0x90, 0xf5, 0x4e, 0x07, - 0x7b, 0x9c, 0xf2, 0xbd, 0xca, 0x4a, 0xd8, 0x33, 0x0a, 0xdb, 0x7d, 0x18, 0x94, 0xc4, 0x84, 0x5d, - 0x00, 0xd5, 0x72, 0xa3, 0x4b, 0x02, 0xdc, 0x24, 0x4a, 0x53, 0x7e, 0x26, 0x4d, 0x27, 0xc2, 0x9e, - 0x01, 0xb7, 0x87, 0xd0, 0xd0, 0x08, 0x0d, 0xe6, 0xb7, 0xc3, 0x81, 0xe1, 0x98, 0x77, 0xd8, 0x7f, - 0x23, 0x30, 0x3b, 0x60, 0xc9, 0xe9, 0x04, 0x01, 0xf1, 0xfe, 0x56, 0x64, 0x8e, 0xeb, 0x63, 0x2d, - 0x55, 0x13, 0x58, 0x28, 0x85, 0x0c, 0xf7, 0xc0, 0x31, 0xbd, 0x3e, 0x80, 0x00, 0x9d, 0x0c, 0x7b, - 0xc6, 0xb1, 0xea, 0x30, 0x1c, 0x1a, 0xa5, 0xc3, 0xfc, 0x39, 0x0b, 0x4e, 0x5e, 0xf6, 0x03, 0x7a, - 0xd7, 0xf7, 0x38, 0x6e, 0x5d, 0xf7, 0x1b, 0x1b, 0xba, 0x40, 0x92, 0x00, 0x7e, 0x04, 0x16, 0x85, - 0xf7, 0x1a, 0x98, 0x63, 0x19, 0xa3, 0x42, 0xf9, 0xc2, 0x74, 0xbe, 0x56, 0x85, 0xa1, 0x46, 0x38, - 0xee, 0x47, 0xb5, 0xbf, 0x87, 0x62, 0x54, 0xf8, 0x01, 0xc8, 0xb3, 0x36, 0x71, 0x74, 0x24, 0x5f, - 0xb5, 0xf6, 0x2f, 0xd4, 0xd6, 0x18, 0x43, 0xb7, 0xda, 0xc4, 0xe9, 0x17, 0x13, 0xb1, 0x42, 0x12, - 0x16, 0x12, 0xb0, 0xc0, 0x64, 0xc2, 0xe9, 0xd8, 0xbd, 0x36, 0xab, 0x02, 0x09, 0x52, 0x59, 0xd6, - 0x2a, 0x16, 0xd4, 0x1a, 0x69, 0x70, 0xf3, 0xf3, 0x1c, 0x58, 0x1b, 0x23, 0x59, 0xf5, 0xbd, 0x06, - 0xe5, 0xd4, 0xf7, 0xe0, 0x65, 0x90, 0xe7, 0x7b, 0xed, 0x28, 0xd9, 0xd7, 0x23, 0x6b, 0xb7, 0xf7, - 0xda, 0xe4, 0x51, 0xcf, 0x78, 0x66, 0x92, 0xbc, 0xe0, 0x43, 0x12, 0x01, 0x6e, 0xc6, 0xa7, 0xca, - 0xa6, 0xb0, 0xb4, 0x59, 0x8f, 0x7a, 0xc6, 0x88, 0x17, 0xca, 0x8a, 0x91, 0xd2, 0xc6, 0x8b, 0xda, - 0xd0, 0xc2, 0x8c, 0x6f, 0x07, 0xd8, 0x63, 0x4a, 0x13, 0x75, 0xa3, 0x5c, 0x3f, 0x37, 0x5d, 0xb8, - 0x85, 0x44, 0x65, 0x55, 0x5b, 0x01, 0x37, 0x87, 0xd0, 0xd0, 0x08, 0x0d, 0xf0, 0x59, 0xb0, 0x10, - 0x10, 0xcc, 0x7c, 0x4f, 0xa6, 0xf9, 0xe1, 0xbe, 0x73, 0x91, 0xdc, 0x45, 0x9a, 0x0a, 0x9f, 0x03, - 0x87, 0x5c, 0xc2, 0x18, 0x6e, 0x92, 0xe2, 0xbc, 0x64, 0x5c, 0xd1, 0x8c, 0x87, 0x6a, 0x6a, 0x1b, - 0x45, 0x74, 0xf3, 0xb7, 0x0c, 0x38, 0x3d, 0xc6, 0x8f, 0x9b, 0x94, 0x71, 0x78, 0x6b, 0x28, 0x9f, - 0xad, 0x29, 0x6b, 0x07, 0x65, 0x2a, 0x9b, 0x8f, 0x6a, 0xdd, 0x8b, 0xd1, 0x4e, 0x22, 0x97, 0x6f, - 0x81, 0x79, 0xca, 0x89, 0x2b, 0xa2, 0x92, 0x3b, 0x5b, 0x28, 0xbf, 0x3c, 0x63, 0xae, 0x55, 0x8e, - 0x68, 0x1d, 0xf3, 0x57, 0x04, 0x1a, 0x52, 0xa0, 0xe6, 0xef, 0xd9, 0xb1, 0x67, 0x13, 0x09, 0x0f, - 0x3f, 0x01, 0xcb, 0x72, 0xa5, 0x2a, 0x33, 0x22, 0xb7, 0xf5, 0x09, 0x27, 0xde, 0xa9, 0x7d, 0x1e, - 0xf4, 0xca, 0x09, 0x6d, 0xca, 0xf2, 0x56, 0x0a, 0x1a, 0x0d, 0xa8, 0x82, 0x17, 0x41, 0xc1, 0xa5, - 0x1e, 0x22, 0xed, 0x16, 0x75, 0xb0, 0x4a, 0xcb, 0x79, 0xf5, 0x24, 0xd5, 0xfa, 0xdb, 0x28, 0xc9, - 0x03, 0x5f, 0x04, 0x05, 0x17, 0xdf, 0x89, 0x45, 0x72, 0x52, 0xe4, 0x98, 0xd6, 0x57, 0xa8, 0xf5, - 0x49, 0x28, 0xc9, 0x07, 0x6f, 0x88, 0x6c, 0x10, 0x55, 0x9a, 0x15, 0xf3, 0xd2, 0xcd, 0xe7, 0x26, - 0x9d, 0x4f, 0x17, 0x79, 0x51, 0x22, 0x12, 0x99, 0x23, 0x21, 0x50, 0x84, 0x65, 0xfe, 0x98, 0x07, - 0x67, 0xf6, 0xbd, 0xfb, 0xf0, 0x2d, 0x00, 0xfd, 0x3a, 0x23, 0x41, 0x97, 0x34, 0x2e, 0xa9, 0xb6, - 0x48, 0xf4, 0x27, 0xc2, 0xc7, 0x39, 0xf5, 0x24, 0x5e, 0x1b, 0xa2, 0xa2, 0x11, 0x12, 0xd0, 0x01, - 0x47, 0xc4, 0x65, 0x50, 0x0e, 0xa5, 0xba, 0x15, 0x7a, 0xbc, 0x9b, 0xf6, 0xbf, 0xb0, 0x67, 0x1c, - 0xd9, 0x4c, 0x82, 0xa0, 0x34, 0x26, 0xdc, 0x00, 0x2b, 0xba, 0xd6, 0x0f, 0x38, 0xf8, 0xa4, 0xf6, - 0xc0, 0x4a, 0x35, 0x4d, 0x46, 0x83, 0xfc, 0x02, 0xa2, 0x41, 0x18, 0x0d, 0x48, 0x23, 0x86, 0xc8, - 0xa7, 0x21, 0xde, 0x48, 0x93, 0xd1, 0x20, 0x3f, 0x6c, 0x81, 0x65, 0x8d, 0xaa, 0xfd, 0x5d, 0x9c, - 0x97, 0x21, 0x7b, 0x7e, 0xca, 0x90, 0xa9, 0xa2, 0x1b, 0xe7, 0x60, 0x35, 0x85, 0x85, 0x06, 0xb0, - 0x21, 0x07, 0xc0, 0x89, 0x4a, 0x1c, 0x2b, 0x2e, 0x48, 0x4d, 0xaf, 0xcf, 0x78, 0x07, 0xe3, 0x5a, - 0xd9, 0x7f, 0xbe, 0xe2, 0x2d, 0x86, 0x12, 0x7a, 0xcc, 0xef, 0x72, 0x00, 0xf4, 0x33, 0x0c, 0xae, - 0xa7, 0x8a, 0xfc, 0xda, 0x40, 0x91, 0x3f, 0x9a, 0x6c, 0x4e, 0x13, 0x05, 0xfd, 0x26, 0x58, 0xf0, - 0xe5, 0xcd, 0xd3, 0xc9, 0x50, 0x9e, 0x64, 0x76, 0xfc, 0x96, 0xc6, 0x68, 0x15, 0x20, 0x4a, 0xa7, - 0xbe, 0xbf, 0x1a, 0x0d, 0x5e, 0x05, 0xf9, 0xb6, 0xdf, 0x88, 0x1e, 0xbf, 0x0b, 0x93, 0x50, 0xaf, - 0xfb, 0x0d, 0x96, 0xc2, 0x5c, 0x14, 0xb6, 0x8b, 0x5d, 0x24, 0x71, 0xe0, 0x87, 0x60, 0x31, 0x6a, - 0x37, 0x74, 0x6f, 0xb2, 0x3e, 0x09, 0x13, 0x69, 0xfe, 0x14, 0xee, 0x92, 0xa8, 0xa0, 0x11, 0x05, - 0xc5, 0x98, 0x02, 0x9f, 0xe8, 0x6e, 0x51, 0xd6, 0xfa, 0x29, 0xf0, 0x47, 0xb5, 0xfd, 0x0a, 0x3f, - 0xa2, 0xa0, 0x18, 0xd3, 0xfc, 0x3e, 0x07, 0x96, 0x52, 0x6d, 0xe8, 0x3f, 0x11, 0x2e, 0x95, 0xd5, - 0x07, 0x1b, 0x2e, 0x85, 0x79, 0xf0, 0xe1, 0x52, 0xb8, 0x4f, 0x2e, 0x5c, 0x09, 0xfc, 0x11, 0xe1, - 0xfa, 0x32, 0x0b, 0xe0, 0x70, 0xa6, 0x43, 0x07, 0x2c, 0xa8, 0x51, 0xe3, 0x20, 0x5e, 0xb8, 0xb8, - 0xeb, 0xd0, 0x8f, 0x99, 0x86, 0x1e, 0x18, 0x50, 0xb2, 0x53, 0x0d, 0x28, 0xe4, 0x20, 0x06, 0xb9, - 0xf8, 0x09, 0x1c, 0x37, 0xcc, 0x99, 0xdf, 0x0c, 0xba, 0x45, 0xe5, 0xf2, 0xbf, 0xd6, 0x2d, 0x4f, - 0x6d, 0x8c, 0x32, 0x7f, 0xc9, 0x80, 0xa3, 0x83, 0x45, 0x6c, 0xa6, 0x51, 0xf3, 0xee, 0xc8, 0x79, - 0x39, 0x3b, 0x93, 0xe1, 0x71, 0x5f, 0x3c, 0xe5, 0xcc, 0xfc, 0x6b, 0xfa, 0x10, 0xb3, 0xcf, 0xcb, - 0x9f, 0x8e, 0x1e, 0x2a, 0x67, 0x3b, 0xc5, 0x69, 0xad, 0x6c, 0xfa, 0xc1, 0xf2, 0x87, 0x2c, 0x38, - 0x3e, 0xaa, 0xfa, 0xc3, 0xaa, 0xfe, 0x07, 0xa4, 0x4e, 0x61, 0x27, 0xff, 0x01, 0x3d, 0xea, 0x19, - 0xc6, 0x88, 0xd1, 0x25, 0x82, 0x49, 0xfc, 0x26, 0x7a, 0x17, 0x14, 0x53, 0xbe, 0xbb, 0xc1, 0x69, - 0x8b, 0xde, 0x55, 0x4d, 0x99, 0x6a, 0x3f, 0xff, 0x1f, 0xf6, 0x8c, 0xe2, 0xf6, 0x18, 0x1e, 0x34, - 0x56, 0x7a, 0xcc, 0xbf, 0x92, 0xdc, 0x13, 0xff, 0x57, 0xf2, 0xd3, 0xb0, 0xbf, 0x54, 0xec, 0x0f, - 0xc4, 0x5f, 0xef, 0x83, 0x53, 0xe9, 0x20, 0x0d, 0x3b, 0xec, 0x4c, 0xd8, 0x33, 0x4e, 0x55, 0xc7, - 0x31, 0xa1, 0xf1, 0xf2, 0xe3, 0x32, 0x2d, 0xf7, 0x74, 0x32, 0xad, 0x72, 0xfe, 0xde, 0xc3, 0xd2, - 0xdc, 0xfd, 0x87, 0xa5, 0xb9, 0x07, 0x0f, 0x4b, 0x73, 0x9f, 0x85, 0xa5, 0xcc, 0xbd, 0xb0, 0x94, - 0xb9, 0x1f, 0x96, 0x32, 0x0f, 0xc2, 0x52, 0xe6, 0x8f, 0xb0, 0x94, 0xf9, 0xe2, 0xcf, 0xd2, 0xdc, - 0x7b, 0x87, 0x74, 0xdd, 0xfb, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xe1, 0xb1, 0xdd, 0xcd, 0x57, 0x16, - 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ // CrossVersionObjectReference contains enough information to let you identify the referred resource. message CrossVersionObjectReference { - // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" optional string kind = 1; // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names @@ -92,12 +92,12 @@ // implementing the scale subresource based on the metrics specified. message HorizontalPodAutoscaler { // metadata is the standard object metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // spec is the specification for the behaviour of the autoscaler. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional HorizontalPodAutoscalerSpec spec = 2; @@ -146,8 +146,11 @@ // should be collected, as well as to actually change the replica count. optional CrossVersionObjectReference scaleTargetRef = 1; - // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. - // It defaults to 1 pod. + // minReplicas is the lower limit for the number of replicas to which the autoscaler + // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the + // alpha feature gate HPAScaleToZero is enabled and at least one Object or External + // metric is configured. Scaling is active as long as at least one metric value is + // available. // +optional optional int32 minReplicas = 2; @@ -186,6 +189,7 @@ optional int32 desiredReplicas = 4; // currentMetrics is the last read state of the metrics used by this autoscaler. + // +optional repeated MetricStatus currentMetrics = 5; // conditions is the set of conditions required for this autoscaler to scale its target, @@ -273,6 +277,17 @@ // targetValue is the target value of the metric (as a quantity). optional k8s.io.apimachinery.pkg.api.resource.Quantity targetValue = 3; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4; + + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 5; } // ObjectMetricStatus indicates the current value of a metric describing a @@ -286,6 +301,17 @@ // currentValue is the current value of the metric (as a quantity). optional k8s.io.apimachinery.pkg.api.resource.Quantity currentValue = 3; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4; + + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 5; } // PodsMetricSource indicates how to scale on a metric describing each pod in @@ -299,6 +325,12 @@ // targetAverageValue is the target value of the average of the // metric across all relevant pods (as a quantity) optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 2; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; } // PodsMetricStatus indicates the current value of a metric describing each pod in @@ -310,6 +342,12 @@ // currentAverageValue is the current value of the average of the // metric across all relevant pods (as a quantity) optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 2; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3; } // ResourceMetricSource indicates how to scale on a resource metric known to diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,14 +17,14 @@ package v2beta1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // CrossVersionObjectReference contains enough information to let you identify the referred resource. type CrossVersionObjectReference struct { - // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names Name string `json:"name" protobuf:"bytes,2,opt,name=name"` @@ -38,8 +38,11 @@ // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics // should be collected, as well as to actually change the replica count. ScaleTargetRef CrossVersionObjectReference `json:"scaleTargetRef" protobuf:"bytes,1,opt,name=scaleTargetRef"` - // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. - // It defaults to 1 pod. + // minReplicas is the lower limit for the number of replicas to which the autoscaler + // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the + // alpha feature gate HPAScaleToZero is enabled and at least one Object or External + // metric is configured. Scaling is active as long as at least one metric value is + // available. // +optional MinReplicas *int32 `json:"minReplicas,omitempty" protobuf:"varint,2,opt,name=minReplicas"` // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. @@ -123,6 +126,16 @@ MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"` // targetValue is the target value of the metric (as a quantity). TargetValue resource.Quantity `json:"targetValue" protobuf:"bytes,3,name=targetValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,name=selector"` + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,5,name=averageValue"` } // PodsMetricSource indicates how to scale on a metric describing each pod in @@ -135,6 +148,12 @@ // targetAverageValue is the target value of the average of the // metric across all relevant pods (as a quantity) TargetAverageValue resource.Quantity `json:"targetAverageValue" protobuf:"bytes,2,name=targetAverageValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,name=selector"` } // ResourceMetricSource indicates how to scale on a resource metric known to @@ -200,6 +219,7 @@ DesiredReplicas int32 `json:"desiredReplicas" protobuf:"varint,4,opt,name=desiredReplicas"` // currentMetrics is the last read state of the metrics used by this autoscaler. + // +optional CurrentMetrics []MetricStatus `json:"currentMetrics" protobuf:"bytes,5,rep,name=currentMetrics"` // conditions is the set of conditions required for this autoscaler to scale its target, @@ -284,6 +304,16 @@ MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"` // currentValue is the current value of the metric (as a quantity). CurrentValue resource.Quantity `json:"currentValue" protobuf:"bytes,3,name=currentValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,name=selector"` + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,5,name=averageValue"` } // PodsMetricStatus indicates the current value of a metric describing each pod in @@ -294,6 +324,12 @@ // currentAverageValue is the current value of the average of the // metric across all relevant pods (as a quantity) CurrentAverageValue resource.Quantity `json:"currentAverageValue" protobuf:"bytes,2,name=currentAverageValue"` + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,3,name=selector"` } // ResourceMetricStatus indicates the current value of a resource metric known to @@ -344,12 +380,12 @@ type HorizontalPodAutoscaler struct { metav1.TypeMeta `json:",inline"` // metadata is the standard object metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // spec is the specification for the behaviour of the autoscaler. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_CrossVersionObjectReference = map[string]string{ "": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "kind": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", + "kind": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"", "name": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", "apiVersion": "API version of the referent", } @@ -64,8 +64,8 @@ var map_HorizontalPodAutoscaler = map[string]string{ "": "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", - "metadata": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", + "metadata": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", "status": "status is the current information about the autoscaler.", } @@ -99,7 +99,7 @@ var map_HorizontalPodAutoscalerSpec = map[string]string{ "": "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", "scaleTargetRef": "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", - "minReplicas": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.", + "minReplicas": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the alpha feature gate HPAScaleToZero is enabled and at least one Object or External metric is configured. Scaling is active as long as at least one metric value is available.", "maxReplicas": "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", "metrics": "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.", } @@ -149,10 +149,12 @@ } var map_ObjectMetricSource = map[string]string{ - "": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - "target": "target is the described Kubernetes object.", - "metricName": "metricName is the name of the metric in question.", - "targetValue": "targetValue is the target value of the metric (as a quantity).", + "": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + "target": "target is the described Kubernetes object.", + "metricName": "metricName is the name of the metric in question.", + "targetValue": "targetValue is the target value of the metric (as a quantity).", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + "averageValue": "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", } func (ObjectMetricSource) SwaggerDoc() map[string]string { @@ -164,6 +166,8 @@ "target": "target is the described Kubernetes object.", "metricName": "metricName is the name of the metric in question.", "currentValue": "currentValue is the current value of the metric (as a quantity).", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + "averageValue": "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", } func (ObjectMetricStatus) SwaggerDoc() map[string]string { @@ -174,6 +178,7 @@ "": "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", "metricName": "metricName is the name of the metric in question", "targetAverageValue": "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", } func (PodsMetricSource) SwaggerDoc() map[string]string { @@ -184,6 +189,7 @@ "": "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", "metricName": "metricName is the name of the metric in question", "currentAverageValue": "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", } func (PodsMetricStatus) SwaggerDoc() map[string]string { @@ -191,8 +197,8 @@ } var map_ResourceMetricSource = map[string]string{ - "": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - "name": "name is the name of the resource in question.", + "": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + "name": "name is the name of the resource in question.", "targetAverageUtilization": "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", "targetAverageValue": "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", } @@ -202,8 +208,8 @@ } var map_ResourceMetricStatus = map[string]string{ - "": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - "name": "name is the name of the resource in question.", + "": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "name": "name is the name of the resource in question.", "currentAverageUtilization": "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", "currentAverageValue": "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,30 +46,18 @@ *out = *in if in.MetricSelector != nil { in, out := &in.MetricSelector, &out.MetricSelector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.TargetValue != nil { in, out := &in.TargetValue, &out.TargetValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } if in.TargetAverageValue != nil { in, out := &in.TargetAverageValue, &out.TargetAverageValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -89,22 +77,14 @@ *out = *in if in.MetricSelector != nil { in, out := &in.MetricSelector, &out.MetricSelector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } out.CurrentValue = in.CurrentValue.DeepCopy() if in.CurrentAverageValue != nil { in, out := &in.CurrentAverageValue, &out.CurrentAverageValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -168,7 +148,7 @@ func (in *HorizontalPodAutoscalerList) DeepCopyInto(out *HorizontalPodAutoscalerList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]HorizontalPodAutoscaler, len(*in)) @@ -203,12 +183,8 @@ out.ScaleTargetRef = in.ScaleTargetRef if in.MinReplicas != nil { in, out := &in.MinReplicas, &out.MinReplicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Metrics != nil { in, out := &in.Metrics, &out.Metrics @@ -235,20 +211,12 @@ *out = *in if in.ObservedGeneration != nil { in, out := &in.ObservedGeneration, &out.ObservedGeneration - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.LastScaleTime != nil { in, out := &in.LastScaleTime, &out.LastScaleTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } if in.CurrentMetrics != nil { in, out := &in.CurrentMetrics, &out.CurrentMetrics @@ -282,39 +250,23 @@ *out = *in if in.Object != nil { in, out := &in.Object, &out.Object - if *in == nil { - *out = nil - } else { - *out = new(ObjectMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(ObjectMetricSource) + (*in).DeepCopyInto(*out) } if in.Pods != nil { in, out := &in.Pods, &out.Pods - if *in == nil { - *out = nil - } else { - *out = new(PodsMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(PodsMetricSource) + (*in).DeepCopyInto(*out) } if in.Resource != nil { in, out := &in.Resource, &out.Resource - if *in == nil { - *out = nil - } else { - *out = new(ResourceMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(ResourceMetricSource) + (*in).DeepCopyInto(*out) } if in.External != nil { in, out := &in.External, &out.External - if *in == nil { - *out = nil - } else { - *out = new(ExternalMetricSource) - (*in).DeepCopyInto(*out) - } + *out = new(ExternalMetricSource) + (*in).DeepCopyInto(*out) } return } @@ -334,39 +286,23 @@ *out = *in if in.Object != nil { in, out := &in.Object, &out.Object - if *in == nil { - *out = nil - } else { - *out = new(ObjectMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ObjectMetricStatus) + (*in).DeepCopyInto(*out) } if in.Pods != nil { in, out := &in.Pods, &out.Pods - if *in == nil { - *out = nil - } else { - *out = new(PodsMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(PodsMetricStatus) + (*in).DeepCopyInto(*out) } if in.Resource != nil { in, out := &in.Resource, &out.Resource - if *in == nil { - *out = nil - } else { - *out = new(ResourceMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ResourceMetricStatus) + (*in).DeepCopyInto(*out) } if in.External != nil { in, out := &in.External, &out.External - if *in == nil { - *out = nil - } else { - *out = new(ExternalMetricStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ExternalMetricStatus) + (*in).DeepCopyInto(*out) } return } @@ -386,6 +322,16 @@ *out = *in out.Target = in.Target out.TargetValue = in.TargetValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } return } @@ -404,6 +350,16 @@ *out = *in out.Target = in.Target out.CurrentValue = in.CurrentValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } return } @@ -421,6 +377,11 @@ func (in *PodsMetricSource) DeepCopyInto(out *PodsMetricSource) { *out = *in out.TargetAverageValue = in.TargetAverageValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } return } @@ -438,6 +399,11 @@ func (in *PodsMetricStatus) DeepCopyInto(out *PodsMetricStatus) { *out = *in out.CurrentAverageValue = in.CurrentAverageValue.DeepCopy() + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } return } @@ -456,21 +422,13 @@ *out = *in if in.TargetAverageUtilization != nil { in, out := &in.TargetAverageUtilization, &out.TargetAverageUtilization - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.TargetAverageValue != nil { in, out := &in.TargetAverageValue, &out.TargetAverageValue - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -490,12 +448,8 @@ *out = *in if in.CurrentAverageUtilization != nil { in, out := &in.CurrentAverageUtilization, &out.CurrentAverageUtilization - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } out.CurrentAverageValue = in.CurrentAverageValue.DeepCopy() return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +package v2beta2 // import "k8s.io/api/autoscaling/v2beta2" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5324 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto + +package v2beta2 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + k8s_io_api_core_v1 "k8s.io/api/core/v1" + resource "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *CrossVersionObjectReference) Reset() { *m = CrossVersionObjectReference{} } +func (*CrossVersionObjectReference) ProtoMessage() {} +func (*CrossVersionObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{0} +} +func (m *CrossVersionObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CrossVersionObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CrossVersionObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_CrossVersionObjectReference.Merge(m, src) +} +func (m *CrossVersionObjectReference) XXX_Size() int { + return m.Size() +} +func (m *CrossVersionObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_CrossVersionObjectReference.DiscardUnknown(m) +} + +var xxx_messageInfo_CrossVersionObjectReference proto.InternalMessageInfo + +func (m *ExternalMetricSource) Reset() { *m = ExternalMetricSource{} } +func (*ExternalMetricSource) ProtoMessage() {} +func (*ExternalMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{1} +} +func (m *ExternalMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricSource.Merge(m, src) +} +func (m *ExternalMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ExternalMetricSource proto.InternalMessageInfo + +func (m *ExternalMetricStatus) Reset() { *m = ExternalMetricStatus{} } +func (*ExternalMetricStatus) ProtoMessage() {} +func (*ExternalMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{2} +} +func (m *ExternalMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExternalMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExternalMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalMetricStatus.Merge(m, src) +} +func (m *ExternalMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ExternalMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ExternalMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ExternalMetricStatus proto.InternalMessageInfo + +func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } +func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{3} +} +func (m *HorizontalPodAutoscaler) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscaler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscaler) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscaler.Merge(m, src) +} +func (m *HorizontalPodAutoscaler) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscaler) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscaler.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscaler proto.InternalMessageInfo + +func (m *HorizontalPodAutoscalerCondition) Reset() { *m = HorizontalPodAutoscalerCondition{} } +func (*HorizontalPodAutoscalerCondition) ProtoMessage() {} +func (*HorizontalPodAutoscalerCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{4} +} +func (m *HorizontalPodAutoscalerCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerCondition.Merge(m, src) +} +func (m *HorizontalPodAutoscalerCondition) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerCondition) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerCondition proto.InternalMessageInfo + +func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } +func (*HorizontalPodAutoscalerList) ProtoMessage() {} +func (*HorizontalPodAutoscalerList) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{5} +} +func (m *HorizontalPodAutoscalerList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerList) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerList.Merge(m, src) +} +func (m *HorizontalPodAutoscalerList) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerList) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerList.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerList proto.InternalMessageInfo + +func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } +func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} +func (*HorizontalPodAutoscalerSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{6} +} +func (m *HorizontalPodAutoscalerSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerSpec.Merge(m, src) +} +func (m *HorizontalPodAutoscalerSpec) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerSpec) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerSpec proto.InternalMessageInfo + +func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } +func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} +func (*HorizontalPodAutoscalerStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{7} +} +func (m *HorizontalPodAutoscalerStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HorizontalPodAutoscalerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HorizontalPodAutoscalerStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_HorizontalPodAutoscalerStatus.Merge(m, src) +} +func (m *HorizontalPodAutoscalerStatus) XXX_Size() int { + return m.Size() +} +func (m *HorizontalPodAutoscalerStatus) XXX_DiscardUnknown() { + xxx_messageInfo_HorizontalPodAutoscalerStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_HorizontalPodAutoscalerStatus proto.InternalMessageInfo + +func (m *MetricIdentifier) Reset() { *m = MetricIdentifier{} } +func (*MetricIdentifier) ProtoMessage() {} +func (*MetricIdentifier) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{8} +} +func (m *MetricIdentifier) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricIdentifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricIdentifier) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricIdentifier.Merge(m, src) +} +func (m *MetricIdentifier) XXX_Size() int { + return m.Size() +} +func (m *MetricIdentifier) XXX_DiscardUnknown() { + xxx_messageInfo_MetricIdentifier.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricIdentifier proto.InternalMessageInfo + +func (m *MetricSpec) Reset() { *m = MetricSpec{} } +func (*MetricSpec) ProtoMessage() {} +func (*MetricSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{9} +} +func (m *MetricSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricSpec.Merge(m, src) +} +func (m *MetricSpec) XXX_Size() int { + return m.Size() +} +func (m *MetricSpec) XXX_DiscardUnknown() { + xxx_messageInfo_MetricSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricSpec proto.InternalMessageInfo + +func (m *MetricStatus) Reset() { *m = MetricStatus{} } +func (*MetricStatus) ProtoMessage() {} +func (*MetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{10} +} +func (m *MetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricStatus.Merge(m, src) +} +func (m *MetricStatus) XXX_Size() int { + return m.Size() +} +func (m *MetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_MetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricStatus proto.InternalMessageInfo + +func (m *MetricTarget) Reset() { *m = MetricTarget{} } +func (*MetricTarget) ProtoMessage() {} +func (*MetricTarget) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{11} +} +func (m *MetricTarget) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricTarget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricTarget) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricTarget.Merge(m, src) +} +func (m *MetricTarget) XXX_Size() int { + return m.Size() +} +func (m *MetricTarget) XXX_DiscardUnknown() { + xxx_messageInfo_MetricTarget.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricTarget proto.InternalMessageInfo + +func (m *MetricValueStatus) Reset() { *m = MetricValueStatus{} } +func (*MetricValueStatus) ProtoMessage() {} +func (*MetricValueStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{12} +} +func (m *MetricValueStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MetricValueStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *MetricValueStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricValueStatus.Merge(m, src) +} +func (m *MetricValueStatus) XXX_Size() int { + return m.Size() +} +func (m *MetricValueStatus) XXX_DiscardUnknown() { + xxx_messageInfo_MetricValueStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_MetricValueStatus proto.InternalMessageInfo + +func (m *ObjectMetricSource) Reset() { *m = ObjectMetricSource{} } +func (*ObjectMetricSource) ProtoMessage() {} +func (*ObjectMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{13} +} +func (m *ObjectMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMetricSource.Merge(m, src) +} +func (m *ObjectMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ObjectMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ObjectMetricSource proto.InternalMessageInfo + +func (m *ObjectMetricStatus) Reset() { *m = ObjectMetricStatus{} } +func (*ObjectMetricStatus) ProtoMessage() {} +func (*ObjectMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{14} +} +func (m *ObjectMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMetricStatus.Merge(m, src) +} +func (m *ObjectMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ObjectMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ObjectMetricStatus proto.InternalMessageInfo + +func (m *PodsMetricSource) Reset() { *m = PodsMetricSource{} } +func (*PodsMetricSource) ProtoMessage() {} +func (*PodsMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{15} +} +func (m *PodsMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodsMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodsMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodsMetricSource.Merge(m, src) +} +func (m *PodsMetricSource) XXX_Size() int { + return m.Size() +} +func (m *PodsMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_PodsMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_PodsMetricSource proto.InternalMessageInfo + +func (m *PodsMetricStatus) Reset() { *m = PodsMetricStatus{} } +func (*PodsMetricStatus) ProtoMessage() {} +func (*PodsMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{16} +} +func (m *PodsMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodsMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodsMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodsMetricStatus.Merge(m, src) +} +func (m *PodsMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *PodsMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodsMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodsMetricStatus proto.InternalMessageInfo + +func (m *ResourceMetricSource) Reset() { *m = ResourceMetricSource{} } +func (*ResourceMetricSource) ProtoMessage() {} +func (*ResourceMetricSource) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{17} +} +func (m *ResourceMetricSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceMetricSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceMetricSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceMetricSource.Merge(m, src) +} +func (m *ResourceMetricSource) XXX_Size() int { + return m.Size() +} +func (m *ResourceMetricSource) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceMetricSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceMetricSource proto.InternalMessageInfo + +func (m *ResourceMetricStatus) Reset() { *m = ResourceMetricStatus{} } +func (*ResourceMetricStatus) ProtoMessage() {} +func (*ResourceMetricStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_592ad94d7d6be24f, []int{18} +} +func (m *ResourceMetricStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceMetricStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceMetricStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceMetricStatus.Merge(m, src) +} +func (m *ResourceMetricStatus) XXX_Size() int { + return m.Size() +} +func (m *ResourceMetricStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceMetricStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceMetricStatus proto.InternalMessageInfo + +func init() { + proto.RegisterType((*CrossVersionObjectReference)(nil), "k8s.io.api.autoscaling.v2beta2.CrossVersionObjectReference") + proto.RegisterType((*ExternalMetricSource)(nil), "k8s.io.api.autoscaling.v2beta2.ExternalMetricSource") + proto.RegisterType((*ExternalMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta2.ExternalMetricStatus") + proto.RegisterType((*HorizontalPodAutoscaler)(nil), "k8s.io.api.autoscaling.v2beta2.HorizontalPodAutoscaler") + proto.RegisterType((*HorizontalPodAutoscalerCondition)(nil), "k8s.io.api.autoscaling.v2beta2.HorizontalPodAutoscalerCondition") + proto.RegisterType((*HorizontalPodAutoscalerList)(nil), "k8s.io.api.autoscaling.v2beta2.HorizontalPodAutoscalerList") + proto.RegisterType((*HorizontalPodAutoscalerSpec)(nil), "k8s.io.api.autoscaling.v2beta2.HorizontalPodAutoscalerSpec") + proto.RegisterType((*HorizontalPodAutoscalerStatus)(nil), "k8s.io.api.autoscaling.v2beta2.HorizontalPodAutoscalerStatus") + proto.RegisterType((*MetricIdentifier)(nil), "k8s.io.api.autoscaling.v2beta2.MetricIdentifier") + proto.RegisterType((*MetricSpec)(nil), "k8s.io.api.autoscaling.v2beta2.MetricSpec") + proto.RegisterType((*MetricStatus)(nil), "k8s.io.api.autoscaling.v2beta2.MetricStatus") + proto.RegisterType((*MetricTarget)(nil), "k8s.io.api.autoscaling.v2beta2.MetricTarget") + proto.RegisterType((*MetricValueStatus)(nil), "k8s.io.api.autoscaling.v2beta2.MetricValueStatus") + proto.RegisterType((*ObjectMetricSource)(nil), "k8s.io.api.autoscaling.v2beta2.ObjectMetricSource") + proto.RegisterType((*ObjectMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta2.ObjectMetricStatus") + proto.RegisterType((*PodsMetricSource)(nil), "k8s.io.api.autoscaling.v2beta2.PodsMetricSource") + proto.RegisterType((*PodsMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta2.PodsMetricStatus") + proto.RegisterType((*ResourceMetricSource)(nil), "k8s.io.api.autoscaling.v2beta2.ResourceMetricSource") + proto.RegisterType((*ResourceMetricStatus)(nil), "k8s.io.api.autoscaling.v2beta2.ResourceMetricStatus") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto", fileDescriptor_592ad94d7d6be24f) +} + +var fileDescriptor_592ad94d7d6be24f = []byte{ + // 1425 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xdd, 0x6f, 0x1b, 0xc5, + 0x16, 0xcf, 0xda, 0x8e, 0x93, 0x8e, 0xd3, 0x24, 0x9d, 0x5b, 0xb5, 0x56, 0xaa, 0x6b, 0x47, 0xab, + 0xab, 0xab, 0x52, 0xd1, 0x35, 0x31, 0xe1, 0x43, 0x42, 0x48, 0xc4, 0x01, 0xda, 0x8a, 0xa4, 0x2d, + 0x93, 0xb4, 0x42, 0xa8, 0x45, 0x8c, 0x77, 0x4f, 0xdc, 0x21, 0xde, 0x5d, 0x6b, 0x76, 0x6c, 0x35, + 0x45, 0x42, 0xbc, 0xf0, 0x8e, 0x40, 0xfc, 0x13, 0x88, 0x17, 0x5e, 0x90, 0x78, 0xe4, 0x43, 0xa8, + 0x42, 0x08, 0xf5, 0xb1, 0x08, 0xc9, 0xa2, 0xe6, 0xbf, 0xe8, 0x13, 0xda, 0x99, 0xd9, 0xf5, 0xae, + 0xed, 0xc4, 0x4e, 0x95, 0x14, 0xf5, 0xcd, 0x33, 0xe7, 0x9c, 0xdf, 0xf9, 0x9c, 0x73, 0xce, 0x1a, + 0x5d, 0xda, 0x7d, 0x35, 0xb0, 0x98, 0x5f, 0xd9, 0x6d, 0xd7, 0x81, 0x7b, 0x20, 0x20, 0xa8, 0x74, + 0xc0, 0x73, 0x7c, 0x5e, 0xd1, 0x04, 0xda, 0x62, 0x15, 0xda, 0x16, 0x7e, 0x60, 0xd3, 0x26, 0xf3, + 0x1a, 0x95, 0x4e, 0xb5, 0x0e, 0x82, 0x56, 0x2b, 0x0d, 0xf0, 0x80, 0x53, 0x01, 0x8e, 0xd5, 0xe2, + 0xbe, 0xf0, 0x71, 0x49, 0xf1, 0x5b, 0xb4, 0xc5, 0xac, 0x04, 0xbf, 0xa5, 0xf9, 0x97, 0x2e, 0x36, + 0x98, 0xb8, 0xd3, 0xae, 0x5b, 0xb6, 0xef, 0x56, 0x1a, 0x7e, 0xc3, 0xaf, 0x48, 0xb1, 0x7a, 0x7b, + 0x47, 0x9e, 0xe4, 0x41, 0xfe, 0x52, 0x70, 0x4b, 0x66, 0x42, 0xbd, 0xed, 0x73, 0xa8, 0x74, 0x56, + 0x06, 0x55, 0x2e, 0xad, 0xf6, 0x79, 0x5c, 0x6a, 0xdf, 0x61, 0x1e, 0xf0, 0xbd, 0x4a, 0x6b, 0xb7, + 0x21, 0x85, 0x38, 0x04, 0x7e, 0x9b, 0xdb, 0x70, 0x28, 0xa9, 0xa0, 0xe2, 0x82, 0xa0, 0xa3, 0x74, + 0x55, 0xf6, 0x93, 0xe2, 0x6d, 0x4f, 0x30, 0x77, 0x58, 0xcd, 0xcb, 0xe3, 0x04, 0x02, 0xfb, 0x0e, + 0xb8, 0x74, 0x50, 0xce, 0xfc, 0xca, 0x40, 0xe7, 0xd6, 0xb9, 0x1f, 0x04, 0x37, 0x81, 0x07, 0xcc, + 0xf7, 0xae, 0xd5, 0x3f, 0x02, 0x5b, 0x10, 0xd8, 0x01, 0x0e, 0x9e, 0x0d, 0x78, 0x19, 0xe5, 0x76, + 0x99, 0xe7, 0x14, 0x8d, 0x65, 0xe3, 0xfc, 0x89, 0xda, 0xdc, 0xfd, 0x6e, 0x79, 0xaa, 0xd7, 0x2d, + 0xe7, 0xde, 0x61, 0x9e, 0x43, 0x24, 0x25, 0xe4, 0xf0, 0xa8, 0x0b, 0xc5, 0x4c, 0x9a, 0xe3, 0x2a, + 0x75, 0x81, 0x48, 0x0a, 0xae, 0x22, 0x44, 0x5b, 0x4c, 0x2b, 0x28, 0x66, 0x25, 0x1f, 0xd6, 0x7c, + 0x68, 0xed, 0xfa, 0x15, 0x4d, 0x21, 0x09, 0x2e, 0xf3, 0x17, 0x03, 0x9d, 0x7e, 0xeb, 0xae, 0x00, + 0xee, 0xd1, 0xe6, 0x26, 0x08, 0xce, 0xec, 0x2d, 0x19, 0x5f, 0xfc, 0x1e, 0xca, 0xbb, 0xf2, 0x2c, + 0x4d, 0x2a, 0x54, 0x5f, 0xb0, 0x0e, 0xae, 0x04, 0x4b, 0x49, 0x5f, 0x71, 0xc0, 0x13, 0x6c, 0x87, + 0x01, 0xaf, 0xcd, 0x6b, 0xd5, 0x79, 0x45, 0x21, 0x1a, 0x0f, 0x6f, 0xa3, 0xbc, 0xa0, 0xbc, 0x01, + 0x42, 0xba, 0x52, 0xa8, 0x3e, 0x3f, 0x19, 0xf2, 0xb6, 0x94, 0xe9, 0xa3, 0xaa, 0x33, 0xd1, 0x58, + 0xe6, 0xef, 0xc3, 0x8e, 0x08, 0x2a, 0xda, 0xc1, 0x31, 0x3a, 0x72, 0x0b, 0xcd, 0xd8, 0x6d, 0xce, + 0xc1, 0x8b, 0x3c, 0x59, 0x99, 0x0c, 0xfa, 0x26, 0x6d, 0xb6, 0x41, 0x59, 0x57, 0x5b, 0xd0, 0xd8, + 0x33, 0xeb, 0x0a, 0x89, 0x44, 0x90, 0xe6, 0x0f, 0x19, 0x74, 0xf6, 0xb2, 0xcf, 0xd9, 0x3d, 0xdf, + 0x13, 0xb4, 0x79, 0xdd, 0x77, 0xd6, 0x34, 0x20, 0x70, 0xfc, 0x21, 0x9a, 0x0d, 0x2b, 0xda, 0xa1, + 0x82, 0x8e, 0xf0, 0x2a, 0x2e, 0x4c, 0xab, 0xb5, 0xdb, 0x08, 0x2f, 0x02, 0x2b, 0xe4, 0xb6, 0x3a, + 0x2b, 0x96, 0x2a, 0xbb, 0x4d, 0x10, 0xb4, 0x5f, 0x19, 0xfd, 0x3b, 0x12, 0xa3, 0xe2, 0xdb, 0x28, + 0x17, 0xb4, 0xc0, 0xd6, 0x8e, 0xbd, 0x36, 0xce, 0xb1, 0x7d, 0x0c, 0xdd, 0x6a, 0x81, 0xdd, 0x2f, + 0xd5, 0xf0, 0x44, 0x24, 0x2c, 0x06, 0x94, 0x0f, 0x64, 0x00, 0x64, 0x99, 0x16, 0xaa, 0xaf, 0x3f, + 0xa9, 0x02, 0x15, 0xc5, 0x38, 0x43, 0xea, 0x4c, 0x34, 0xb8, 0xf9, 0x59, 0x16, 0x2d, 0xef, 0x23, + 0xb9, 0xee, 0x7b, 0x0e, 0x13, 0xcc, 0xf7, 0xf0, 0x65, 0x94, 0x13, 0x7b, 0x2d, 0xd0, 0x4f, 0x6f, + 0x35, 0xb2, 0x76, 0x7b, 0xaf, 0x05, 0x8f, 0xbb, 0xe5, 0xff, 0x8d, 0x93, 0x0f, 0xf9, 0x88, 0x44, + 0xc0, 0x1b, 0xb1, 0x57, 0x99, 0x14, 0x96, 0x36, 0xeb, 0x71, 0xb7, 0x3c, 0xa2, 0xff, 0x59, 0x31, + 0x52, 0xda, 0x78, 0xdc, 0x41, 0xb8, 0x49, 0x03, 0xb1, 0xcd, 0xa9, 0x17, 0x28, 0x4d, 0xcc, 0x05, + 0x1d, 0xaf, 0x0b, 0x93, 0xa5, 0x3b, 0x94, 0xa8, 0x2d, 0x69, 0x2b, 0xf0, 0xc6, 0x10, 0x1a, 0x19, + 0xa1, 0x01, 0xff, 0x1f, 0xe5, 0x39, 0xd0, 0xc0, 0xf7, 0x8a, 0x39, 0xe9, 0x45, 0x1c, 0x5c, 0x22, + 0x6f, 0x89, 0xa6, 0xe2, 0xe7, 0xd0, 0x8c, 0x0b, 0x41, 0x40, 0x1b, 0x50, 0x9c, 0x96, 0x8c, 0x71, + 0x2d, 0x6f, 0xaa, 0x6b, 0x12, 0xd1, 0xcd, 0x3f, 0x0c, 0x74, 0x6e, 0x9f, 0x38, 0x6e, 0xb0, 0x40, + 0xe0, 0x5b, 0x43, 0xf5, 0x6c, 0x4d, 0xe6, 0x60, 0x28, 0x2d, 0xab, 0x79, 0x51, 0xeb, 0x9e, 0x8d, + 0x6e, 0x12, 0xb5, 0x7c, 0x0b, 0x4d, 0x33, 0x01, 0x6e, 0x98, 0x95, 0xec, 0xf9, 0x42, 0xf5, 0x95, + 0x27, 0xac, 0xb5, 0xda, 0x49, 0xad, 0x63, 0xfa, 0x4a, 0x88, 0x46, 0x14, 0xa8, 0xf9, 0x67, 0x66, + 0x5f, 0xdf, 0xc2, 0x82, 0xc7, 0x1f, 0xa3, 0x79, 0x79, 0xd2, 0xfd, 0x0a, 0x76, 0xb4, 0x87, 0x63, + 0xdf, 0xd4, 0x01, 0xe3, 0xa2, 0x76, 0x46, 0x9b, 0x32, 0xbf, 0x95, 0x82, 0x26, 0x03, 0xaa, 0xf0, + 0x0a, 0x2a, 0xb8, 0xcc, 0x23, 0xd0, 0x6a, 0x32, 0x9b, 0xaa, 0xb2, 0x9c, 0xae, 0x2d, 0xf4, 0xba, + 0xe5, 0xc2, 0x66, 0xff, 0x9a, 0x24, 0x79, 0xf0, 0x4b, 0xa8, 0xe0, 0xd2, 0xbb, 0xb1, 0x48, 0x56, + 0x8a, 0xfc, 0x47, 0xeb, 0x2b, 0x6c, 0xf6, 0x49, 0x24, 0xc9, 0x87, 0x6f, 0x84, 0xd5, 0x10, 0x76, + 0xb7, 0xa0, 0x98, 0x93, 0x61, 0xbe, 0x30, 0x59, 0x33, 0x94, 0x2d, 0x22, 0x51, 0x39, 0x12, 0x82, + 0x44, 0x58, 0xe6, 0x77, 0x39, 0xf4, 0xdf, 0x03, 0xdf, 0x3e, 0x7e, 0x1b, 0x61, 0xbf, 0x1e, 0x00, + 0xef, 0x80, 0x73, 0x49, 0x0d, 0xdd, 0x70, 0xfa, 0x85, 0x31, 0xce, 0xd6, 0xce, 0x84, 0x65, 0x7f, + 0x6d, 0x88, 0x4a, 0x46, 0x48, 0x60, 0x1b, 0x9d, 0x0c, 0x1f, 0x83, 0x0a, 0x28, 0xd3, 0x83, 0xf6, + 0x70, 0x2f, 0xed, 0x54, 0xaf, 0x5b, 0x3e, 0xb9, 0x91, 0x04, 0x21, 0x69, 0x4c, 0xbc, 0x86, 0x16, + 0x74, 0x7f, 0x1f, 0x08, 0xf0, 0x59, 0x1d, 0x81, 0x85, 0xf5, 0x34, 0x99, 0x0c, 0xf2, 0x87, 0x10, + 0x0e, 0x04, 0x8c, 0x83, 0x13, 0x43, 0xe4, 0xd2, 0x10, 0x6f, 0xa6, 0xc9, 0x64, 0x90, 0x1f, 0x37, + 0xd1, 0xbc, 0x46, 0xd5, 0xf1, 0x2e, 0x4e, 0xcb, 0x94, 0x4d, 0x38, 0x89, 0x75, 0xd3, 0x8d, 0x6b, + 0x70, 0x3d, 0x85, 0x45, 0x06, 0xb0, 0xb1, 0x40, 0xc8, 0x8e, 0x5a, 0x5c, 0x50, 0xcc, 0x4b, 0x4d, + 0x6f, 0x3c, 0xe1, 0x1b, 0x8c, 0x7b, 0x65, 0x7f, 0x7c, 0xc5, 0x57, 0x01, 0x49, 0xe8, 0x31, 0xbf, + 0x34, 0xd0, 0xe2, 0xe0, 0x24, 0x8f, 0x77, 0x28, 0x63, 0xdf, 0x1d, 0xea, 0x36, 0x9a, 0x0d, 0xa0, + 0x09, 0xb6, 0xf0, 0xb9, 0x2e, 0x80, 0x17, 0x27, 0xec, 0x44, 0xb4, 0x0e, 0xcd, 0x2d, 0x2d, 0x5a, + 0x9b, 0x0b, 0x5b, 0x51, 0x74, 0x22, 0x31, 0xa4, 0xf9, 0x75, 0x16, 0xa1, 0x7e, 0xdd, 0xe3, 0xd5, + 0xd4, 0xe8, 0x59, 0x1e, 0x18, 0x3d, 0x8b, 0xc9, 0x85, 0x2c, 0x31, 0x66, 0x6e, 0xa2, 0xbc, 0x2f, + 0xfb, 0x81, 0xb6, 0xb0, 0x3a, 0x2e, 0x98, 0xf1, 0x84, 0x8f, 0xd1, 0x6a, 0x28, 0x6c, 0xe8, 0xba, + 0xab, 0x68, 0x34, 0x7c, 0x15, 0xe5, 0x5a, 0xbe, 0x13, 0x8d, 0xe4, 0xb1, 0x7b, 0xd2, 0x75, 0xdf, + 0x09, 0x52, 0x98, 0xb3, 0xa1, 0xed, 0xe1, 0x2d, 0x91, 0x38, 0xf8, 0x03, 0x34, 0x1b, 0xad, 0xeb, + 0xb2, 0x44, 0x0b, 0xd5, 0xd5, 0x71, 0x98, 0x44, 0xf3, 0xa7, 0x70, 0x65, 0x30, 0x23, 0x0a, 0x89, + 0x31, 0x43, 0x7c, 0xd0, 0x1b, 0x9f, 0x9c, 0x40, 0x13, 0xe0, 0x8f, 0x5a, 0x75, 0x15, 0x7e, 0x44, + 0x21, 0x31, 0xa6, 0xf9, 0x4d, 0x16, 0xcd, 0xa5, 0x56, 0xc9, 0x7f, 0x23, 0x5d, 0xea, 0xad, 0x1d, + 0x6d, 0xba, 0x14, 0xe6, 0xd1, 0xa7, 0x4b, 0xe1, 0x1e, 0x5f, 0xba, 0x12, 0xf8, 0x23, 0xd2, 0xf5, + 0x53, 0x26, 0x4a, 0x97, 0x9a, 0x7f, 0x93, 0xa5, 0x4b, 0xf1, 0x26, 0xd2, 0x75, 0x0d, 0x4d, 0x77, + 0xc2, 0x05, 0x5d, 0x67, 0xeb, 0xc0, 0x45, 0xc4, 0x8a, 0x9c, 0xb3, 0xde, 0x6d, 0x53, 0x4f, 0x30, + 0xb1, 0x57, 0x3b, 0x11, 0x2e, 0x08, 0x72, 0xc3, 0x27, 0x0a, 0x07, 0x3b, 0x68, 0x8e, 0x76, 0x80, + 0xd3, 0x06, 0xc8, 0x6b, 0x9d, 0xaf, 0xc3, 0xe2, 0x2e, 0xf6, 0xba, 0xe5, 0xb9, 0xb5, 0x04, 0x0e, + 0x49, 0xa1, 0x86, 0x63, 0x50, 0x9f, 0x6f, 0x08, 0xd6, 0x64, 0xf7, 0xd4, 0x18, 0x54, 0x93, 0x41, + 0x8e, 0xc1, 0xb5, 0x21, 0x2a, 0x19, 0x21, 0x61, 0x7e, 0x91, 0x41, 0xa7, 0x86, 0x3e, 0x53, 0xfa, + 0x41, 0x31, 0x8e, 0x29, 0x28, 0x99, 0xa7, 0x18, 0x94, 0xec, 0xa1, 0x83, 0xf2, 0x73, 0x06, 0xe1, + 0xe1, 0x26, 0x8a, 0x3f, 0x91, 0xa3, 0xd8, 0xe6, 0xac, 0x0e, 0x8e, 0x22, 0x1f, 0xc5, 0x6e, 0x97, + 0x9c, 0xe3, 0x49, 0x6c, 0x32, 0xa8, 0xec, 0x78, 0xbe, 0xa4, 0x13, 0x1f, 0xcc, 0xd9, 0xa3, 0xfd, + 0x60, 0x36, 0x7f, 0x1b, 0x0c, 0xe3, 0x33, 0xfd, 0x85, 0x3e, 0x2a, 0xfd, 0xd9, 0xa7, 0x98, 0x7e, + 0xf3, 0x47, 0x03, 0x2d, 0x0e, 0x0e, 0xe1, 0x67, 0xee, 0x7f, 0x9b, 0x5f, 0xd3, 0x4e, 0x3c, 0xdb, + 0xff, 0xd9, 0x7c, 0x6b, 0xa0, 0xd3, 0xa3, 0x56, 0x18, 0xbc, 0x9e, 0x5a, 0x3c, 0x2b, 0xc9, 0xc5, + 0xf3, 0x71, 0xb7, 0x5c, 0x1e, 0xf1, 0xaf, 0x40, 0x04, 0x93, 0xd8, 0x4d, 0x8f, 0x27, 0x01, 0xdf, + 0x0f, 0xdb, 0xac, 0x92, 0x70, 0x24, 0x36, 0x1f, 0x6b, 0xbc, 0x6b, 0x17, 0xef, 0x3f, 0x2a, 0x4d, + 0x3d, 0x78, 0x54, 0x9a, 0x7a, 0xf8, 0xa8, 0x34, 0xf5, 0x69, 0xaf, 0x64, 0xdc, 0xef, 0x95, 0x8c, + 0x07, 0xbd, 0x92, 0xf1, 0xb0, 0x57, 0x32, 0xfe, 0xea, 0x95, 0x8c, 0xcf, 0xff, 0x2e, 0x4d, 0xbd, + 0x3f, 0xa3, 0xa1, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xa0, 0xce, 0xf5, 0x16, 0x17, 0x00, + 0x00, +} + +func (m *CrossVersionObjectReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CrossVersionObjectReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CrossVersionObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x1a + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ExternalMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExternalMetricSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ExternalMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExternalMetricStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExternalMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Current.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HorizontalPodAutoscaler) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscaler) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscaler) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HorizontalPodAutoscalerCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HorizontalPodAutoscalerList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HorizontalPodAutoscalerSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Metrics) > 0 { + for iNdEx := len(m.Metrics) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Metrics[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxReplicas)) + i-- + dAtA[i] = 0x18 + if m.MinReplicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.MinReplicas)) + i-- + dAtA[i] = 0x10 + } + { + size, err := m.ScaleTargetRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HorizontalPodAutoscalerStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HorizontalPodAutoscalerStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HorizontalPodAutoscalerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + if len(m.CurrentMetrics) > 0 { + for iNdEx := len(m.CurrentMetrics) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CurrentMetrics[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentReplicas)) + i-- + dAtA[i] = 0x18 + if m.LastScaleTime != nil { + { + size, err := m.LastScaleTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.ObservedGeneration != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MetricIdentifier) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricIdentifier) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricIdentifier) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MetricSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.External != nil { + { + size, err := m.External.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Pods != nil { + { + size, err := m.Pods.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Object != nil { + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.External != nil { + { + size, err := m.External.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Pods != nil { + { + size, err := m.Pods.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Object != nil { + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MetricTarget) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricTarget) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricTarget) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AverageUtilization != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.AverageUtilization)) + i-- + dAtA[i] = 0x20 + } + if m.AverageValue != nil { + { + size, err := m.AverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Value != nil { + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MetricValueStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MetricValueStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MetricValueStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AverageUtilization != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.AverageUtilization)) + i-- + dAtA[i] = 0x18 + } + if m.AverageValue != nil { + { + size, err := m.AverageValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Value != nil { + { + size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ObjectMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ObjectMetricSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.DescribedObject.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ObjectMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ObjectMetricStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.DescribedObject.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Current.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodsMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodsMetricSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodsMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodsMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodsMetricStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodsMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Current.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ResourceMetricSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceMetricSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceMetricSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ResourceMetricStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceMetricStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceMetricStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Current.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CrossVersionObjectReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ExternalMetricSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metric.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ExternalMetricStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metric.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Current.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HorizontalPodAutoscaler) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HorizontalPodAutoscalerCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HorizontalPodAutoscalerList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HorizontalPodAutoscalerSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ScaleTargetRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.MinReplicas != nil { + n += 1 + sovGenerated(uint64(*m.MinReplicas)) + } + n += 1 + sovGenerated(uint64(m.MaxReplicas)) + if len(m.Metrics) > 0 { + for _, e := range m.Metrics { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HorizontalPodAutoscalerStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ObservedGeneration != nil { + n += 1 + sovGenerated(uint64(*m.ObservedGeneration)) + } + if m.LastScaleTime != nil { + l = m.LastScaleTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.CurrentReplicas)) + n += 1 + sovGenerated(uint64(m.DesiredReplicas)) + if len(m.CurrentMetrics) > 0 { + for _, e := range m.CurrentMetrics { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *MetricIdentifier) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *MetricSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Object != nil { + l = m.Object.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Pods != nil { + l = m.Pods.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Resource != nil { + l = m.Resource.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.External != nil { + l = m.External.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *MetricStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Object != nil { + l = m.Object.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Pods != nil { + l = m.Pods.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Resource != nil { + l = m.Resource.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.External != nil { + l = m.External.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *MetricTarget) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Value != nil { + l = m.Value.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageUtilization != nil { + n += 1 + sovGenerated(uint64(*m.AverageUtilization)) + } + return n +} + +func (m *MetricValueStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Value != nil { + l = m.Value.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageValue != nil { + l = m.AverageValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AverageUtilization != nil { + n += 1 + sovGenerated(uint64(*m.AverageUtilization)) + } + return n +} + +func (m *ObjectMetricSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.DescribedObject.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Metric.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ObjectMetricStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metric.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Current.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.DescribedObject.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodsMetricSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metric.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodsMetricStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metric.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Current.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceMetricSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceMetricStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Current.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CrossVersionObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CrossVersionObjectReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `}`, + }, "") + return s +} +func (this *ExternalMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExternalMetricSource{`, + `Metric:` + strings.Replace(strings.Replace(this.Metric.String(), "MetricIdentifier", "MetricIdentifier", 1), `&`, ``, 1) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "MetricTarget", "MetricTarget", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ExternalMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExternalMetricStatus{`, + `Metric:` + strings.Replace(strings.Replace(this.Metric.String(), "MetricIdentifier", "MetricIdentifier", 1), `&`, ``, 1) + `,`, + `Current:` + strings.Replace(strings.Replace(this.Current.String(), "MetricValueStatus", "MetricValueStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscaler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscaler{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "HorizontalPodAutoscalerSpec", "HorizontalPodAutoscalerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "HorizontalPodAutoscalerStatus", "HorizontalPodAutoscalerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]HorizontalPodAutoscaler{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&HorizontalPodAutoscalerList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForMetrics := "[]MetricSpec{" + for _, f := range this.Metrics { + repeatedStringForMetrics += strings.Replace(strings.Replace(f.String(), "MetricSpec", "MetricSpec", 1), `&`, ``, 1) + "," + } + repeatedStringForMetrics += "}" + s := strings.Join([]string{`&HorizontalPodAutoscalerSpec{`, + `ScaleTargetRef:` + strings.Replace(strings.Replace(this.ScaleTargetRef.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `MinReplicas:` + valueToStringGenerated(this.MinReplicas) + `,`, + `MaxReplicas:` + fmt.Sprintf("%v", this.MaxReplicas) + `,`, + `Metrics:` + repeatedStringForMetrics + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForCurrentMetrics := "[]MetricStatus{" + for _, f := range this.CurrentMetrics { + repeatedStringForCurrentMetrics += strings.Replace(strings.Replace(f.String(), "MetricStatus", "MetricStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForCurrentMetrics += "}" + repeatedStringForConditions := "[]HorizontalPodAutoscalerCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "HorizontalPodAutoscalerCondition", "HorizontalPodAutoscalerCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&HorizontalPodAutoscalerStatus{`, + `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, + `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "v1.Time", 1) + `,`, + `CurrentReplicas:` + fmt.Sprintf("%v", this.CurrentReplicas) + `,`, + `DesiredReplicas:` + fmt.Sprintf("%v", this.DesiredReplicas) + `,`, + `CurrentMetrics:` + repeatedStringForCurrentMetrics + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *MetricIdentifier) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricIdentifier{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *MetricSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricSpec{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Object:` + strings.Replace(this.Object.String(), "ObjectMetricSource", "ObjectMetricSource", 1) + `,`, + `Pods:` + strings.Replace(this.Pods.String(), "PodsMetricSource", "PodsMetricSource", 1) + `,`, + `Resource:` + strings.Replace(this.Resource.String(), "ResourceMetricSource", "ResourceMetricSource", 1) + `,`, + `External:` + strings.Replace(this.External.String(), "ExternalMetricSource", "ExternalMetricSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *MetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricStatus{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Object:` + strings.Replace(this.Object.String(), "ObjectMetricStatus", "ObjectMetricStatus", 1) + `,`, + `Pods:` + strings.Replace(this.Pods.String(), "PodsMetricStatus", "PodsMetricStatus", 1) + `,`, + `Resource:` + strings.Replace(this.Resource.String(), "ResourceMetricStatus", "ResourceMetricStatus", 1) + `,`, + `External:` + strings.Replace(this.External.String(), "ExternalMetricStatus", "ExternalMetricStatus", 1) + `,`, + `}`, + }, "") + return s +} +func (this *MetricTarget) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricTarget{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Value:` + strings.Replace(fmt.Sprintf("%v", this.Value), "Quantity", "resource.Quantity", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "resource.Quantity", 1) + `,`, + `AverageUtilization:` + valueToStringGenerated(this.AverageUtilization) + `,`, + `}`, + }, "") + return s +} +func (this *MetricValueStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MetricValueStatus{`, + `Value:` + strings.Replace(fmt.Sprintf("%v", this.Value), "Quantity", "resource.Quantity", 1) + `,`, + `AverageValue:` + strings.Replace(fmt.Sprintf("%v", this.AverageValue), "Quantity", "resource.Quantity", 1) + `,`, + `AverageUtilization:` + valueToStringGenerated(this.AverageUtilization) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectMetricSource{`, + `DescribedObject:` + strings.Replace(strings.Replace(this.DescribedObject.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "MetricTarget", "MetricTarget", 1), `&`, ``, 1) + `,`, + `Metric:` + strings.Replace(strings.Replace(this.Metric.String(), "MetricIdentifier", "MetricIdentifier", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectMetricStatus{`, + `Metric:` + strings.Replace(strings.Replace(this.Metric.String(), "MetricIdentifier", "MetricIdentifier", 1), `&`, ``, 1) + `,`, + `Current:` + strings.Replace(strings.Replace(this.Current.String(), "MetricValueStatus", "MetricValueStatus", 1), `&`, ``, 1) + `,`, + `DescribedObject:` + strings.Replace(strings.Replace(this.DescribedObject.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodsMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodsMetricSource{`, + `Metric:` + strings.Replace(strings.Replace(this.Metric.String(), "MetricIdentifier", "MetricIdentifier", 1), `&`, ``, 1) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "MetricTarget", "MetricTarget", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodsMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodsMetricStatus{`, + `Metric:` + strings.Replace(strings.Replace(this.Metric.String(), "MetricIdentifier", "MetricIdentifier", 1), `&`, ``, 1) + `,`, + `Current:` + strings.Replace(strings.Replace(this.Current.String(), "MetricValueStatus", "MetricValueStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceMetricSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceMetricSource{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "MetricTarget", "MetricTarget", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceMetricStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceMetricStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Current:` + strings.Replace(strings.Replace(this.Current.String(), "MetricValueStatus", "MetricValueStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CrossVersionObjectReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CrossVersionObjectReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CrossVersionObjectReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExternalMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExternalMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExternalMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExternalMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExternalMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExternalMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Current", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Current.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscaler) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscaler: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscaler: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = HorizontalPodAutoscalerConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, HorizontalPodAutoscaler{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ScaleTargetRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ScaleTargetRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinReplicas", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MinReplicas = &v + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxReplicas", wireType) + } + m.MaxReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metrics", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metrics = append(m.Metrics, MetricSpec{}) + if err := m.Metrics[len(m.Metrics)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HorizontalPodAutoscalerStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HorizontalPodAutoscalerStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HorizontalPodAutoscalerStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ObservedGeneration = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastScaleTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastScaleTime == nil { + m.LastScaleTime = &v1.Time{} + } + if err := m.LastScaleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentReplicas", wireType) + } + m.CurrentReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredReplicas", wireType) + } + m.DesiredReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DesiredReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentMetrics", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CurrentMetrics = append(m.CurrentMetrics, MetricStatus{}) + if err := m.CurrentMetrics[len(m.CurrentMetrics)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, HorizontalPodAutoscalerCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricIdentifier) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricIdentifier: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricIdentifier: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = MetricSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Object", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Object == nil { + m.Object = &ObjectMetricSource{} + } + if err := m.Object.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pods == nil { + m.Pods = &PodsMetricSource{} + } + if err := m.Pods.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &ResourceMetricSource{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field External", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.External == nil { + m.External = &ExternalMetricSource{} + } + if err := m.External.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = MetricSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Object", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Object == nil { + m.Object = &ObjectMetricStatus{} + } + if err := m.Object.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pods == nil { + m.Pods = &PodsMetricStatus{} + } + if err := m.Pods.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &ResourceMetricStatus{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field External", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.External == nil { + m.External = &ExternalMetricStatus{} + } + if err := m.External.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricTarget) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricTarget: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricTarget: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = MetricTargetType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Value == nil { + m.Value = &resource.Quantity{} + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AverageValue == nil { + m.AverageValue = &resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageUtilization", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AverageUtilization = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MetricValueStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MetricValueStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MetricValueStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Value == nil { + m.Value = &resource.Quantity{} + } + if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AverageValue == nil { + m.AverageValue = &resource.Quantity{} + } + if err := m.AverageValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AverageUtilization", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AverageUtilization = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DescribedObject", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DescribedObject.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Current", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Current.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DescribedObject", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DescribedObject.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodsMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodsMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodsMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodsMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodsMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodsMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Current", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Current.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceMetricSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceMetricSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceMetricSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceMetricStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceMetricStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceMetricStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Current", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Current.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,372 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.autoscaling.v2beta2; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v2beta2"; + +// CrossVersionObjectReference contains enough information to let you identify the referred resource. +message CrossVersionObjectReference { + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + optional string kind = 1; + + // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names + optional string name = 2; + + // API version of the referent + // +optional + optional string apiVersion = 3; +} + +// ExternalMetricSource indicates how to scale on a metric not associated with +// any Kubernetes object (for example length of queue in cloud +// messaging service, or QPS from loadbalancer running outside of cluster). +message ExternalMetricSource { + // metric identifies the target metric by name and selector + optional MetricIdentifier metric = 1; + + // target specifies the target value for the given metric + optional MetricTarget target = 2; +} + +// ExternalMetricStatus indicates the current value of a global metric +// not associated with any Kubernetes object. +message ExternalMetricStatus { + // metric identifies the target metric by name and selector + optional MetricIdentifier metric = 1; + + // current contains the current value for the given metric + optional MetricValueStatus current = 2; +} + +// HorizontalPodAutoscaler is the configuration for a horizontal pod +// autoscaler, which automatically manages the replica count of any resource +// implementing the scale subresource based on the metrics specified. +message HorizontalPodAutoscaler { + // metadata is the standard object metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the specification for the behaviour of the autoscaler. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. + // +optional + optional HorizontalPodAutoscalerSpec spec = 2; + + // status is the current information about the autoscaler. + // +optional + optional HorizontalPodAutoscalerStatus status = 3; +} + +// HorizontalPodAutoscalerCondition describes the state of +// a HorizontalPodAutoscaler at a certain point. +message HorizontalPodAutoscalerCondition { + // type describes the current condition + optional string type = 1; + + // status is the status of the condition (True, False, Unknown) + optional string status = 2; + + // lastTransitionTime is the last time the condition transitioned from + // one status to another + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; + + // reason is the reason for the condition's last transition. + // +optional + optional string reason = 4; + + // message is a human-readable explanation containing details about + // the transition + // +optional + optional string message = 5; +} + +// HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects. +message HorizontalPodAutoscalerList { + // metadata is the standard list metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of horizontal pod autoscaler objects. + repeated HorizontalPodAutoscaler items = 2; +} + +// HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler. +message HorizontalPodAutoscalerSpec { + // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics + // should be collected, as well as to actually change the replica count. + optional CrossVersionObjectReference scaleTargetRef = 1; + + // minReplicas is the lower limit for the number of replicas to which the autoscaler + // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the + // alpha feature gate HPAScaleToZero is enabled and at least one Object or External + // metric is configured. Scaling is active as long as at least one metric value is + // available. + // +optional + optional int32 minReplicas = 2; + + // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. + // It cannot be less that minReplicas. + optional int32 maxReplicas = 3; + + // metrics contains the specifications for which to use to calculate the + // desired replica count (the maximum replica count across all metrics will + // be used). The desired replica count is calculated multiplying the + // ratio between the target value and the current value by the current + // number of pods. Ergo, metrics used must decrease as the pod count is + // increased, and vice-versa. See the individual metric source types for + // more information about how each type of metric must respond. + // If not set, the default metric will be set to 80% average CPU utilization. + // +optional + repeated MetricSpec metrics = 4; +} + +// HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler. +message HorizontalPodAutoscalerStatus { + // observedGeneration is the most recent generation observed by this autoscaler. + // +optional + optional int64 observedGeneration = 1; + + // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, + // used by the autoscaler to control how often the number of pods is changed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastScaleTime = 2; + + // currentReplicas is current number of replicas of pods managed by this autoscaler, + // as last seen by the autoscaler. + optional int32 currentReplicas = 3; + + // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, + // as last calculated by the autoscaler. + optional int32 desiredReplicas = 4; + + // currentMetrics is the last read state of the metrics used by this autoscaler. + // +optional + repeated MetricStatus currentMetrics = 5; + + // conditions is the set of conditions required for this autoscaler to scale its target, + // and indicates whether or not those conditions are met. + repeated HorizontalPodAutoscalerCondition conditions = 6; +} + +// MetricIdentifier defines the name and optionally selector for a metric +message MetricIdentifier { + // name is the name of the given metric + optional string name = 1; + + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; +} + +// MetricSpec specifies how to scale based on a single metric +// (only `type` and one other matching field should be set at once). +message MetricSpec { + // type is the type of metric source. It should be one of "Object", + // "Pods" or "Resource", each mapping to a matching field in the object. + optional string type = 1; + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + optional ObjectMetricSource object = 2; + + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + optional PodsMetricSource pods = 3; + + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + optional ResourceMetricSource resource = 4; + + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + optional ExternalMetricSource external = 5; +} + +// MetricStatus describes the last-read state of a single metric. +message MetricStatus { + // type is the type of metric source. It will be one of "Object", + // "Pods" or "Resource", each corresponds to a matching field in the object. + optional string type = 1; + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + optional ObjectMetricStatus object = 2; + + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + optional PodsMetricStatus pods = 3; + + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + optional ResourceMetricStatus resource = 4; + + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + optional ExternalMetricStatus external = 5; +} + +// MetricTarget defines the target value, average value, or average utilization of a specific metric +message MetricTarget { + // type represents whether the metric type is Utilization, Value, or AverageValue + optional string type = 1; + + // value is the target value of the metric (as a quantity). + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 2; + + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 3; + + // averageUtilization is the target value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. + // Currently only valid for Resource metric source type + // +optional + optional int32 averageUtilization = 4; +} + +// MetricValueStatus holds the current value for a metric +message MetricValueStatus { + // value is the current value of the metric (as a quantity). + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 1; + + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + optional k8s.io.apimachinery.pkg.api.resource.Quantity averageValue = 2; + + // currentAverageUtilization is the current value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. + // +optional + optional int32 averageUtilization = 3; +} + +// ObjectMetricSource indicates how to scale on a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +message ObjectMetricSource { + optional CrossVersionObjectReference describedObject = 1; + + // target specifies the target value for the given metric + optional MetricTarget target = 2; + + // metric identifies the target metric by name and selector + optional MetricIdentifier metric = 3; +} + +// ObjectMetricStatus indicates the current value of a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +message ObjectMetricStatus { + // metric identifies the target metric by name and selector + optional MetricIdentifier metric = 1; + + // current contains the current value for the given metric + optional MetricValueStatus current = 2; + + optional CrossVersionObjectReference describedObject = 3; +} + +// PodsMetricSource indicates how to scale on a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +// The values will be averaged together before being compared to the target +// value. +message PodsMetricSource { + // metric identifies the target metric by name and selector + optional MetricIdentifier metric = 1; + + // target specifies the target value for the given metric + optional MetricTarget target = 2; +} + +// PodsMetricStatus indicates the current value of a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +message PodsMetricStatus { + // metric identifies the target metric by name and selector + optional MetricIdentifier metric = 1; + + // current contains the current value for the given metric + optional MetricValueStatus current = 2; +} + +// ResourceMetricSource indicates how to scale on a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). The values will be averaged +// together before being compared to the target. Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. Only one "target" type +// should be set. +message ResourceMetricSource { + // name is the name of the resource in question. + optional string name = 1; + + // target specifies the target value for the given metric + optional MetricTarget target = 2; +} + +// ResourceMetricStatus indicates the current value of a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. +message ResourceMetricStatus { + // Name is the name of the resource in question. + optional string name = 1; + + // current contains the current value for the given metric + optional MetricValueStatus current = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,50 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta2 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "autoscaling" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v2beta2"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &HorizontalPodAutoscaler{}, + &HorizontalPodAutoscalerList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,396 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:openapi-gen=true + +package v2beta2 + +import ( + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HorizontalPodAutoscaler is the configuration for a horizontal pod +// autoscaler, which automatically manages the replica count of any resource +// implementing the scale subresource based on the metrics specified. +type HorizontalPodAutoscaler struct { + metav1.TypeMeta `json:",inline"` + // metadata is the standard object metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the specification for the behaviour of the autoscaler. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. + // +optional + Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // status is the current information about the autoscaler. + // +optional + Status HorizontalPodAutoscalerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler. +type HorizontalPodAutoscalerSpec struct { + // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics + // should be collected, as well as to actually change the replica count. + ScaleTargetRef CrossVersionObjectReference `json:"scaleTargetRef" protobuf:"bytes,1,opt,name=scaleTargetRef"` + // minReplicas is the lower limit for the number of replicas to which the autoscaler + // can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the + // alpha feature gate HPAScaleToZero is enabled and at least one Object or External + // metric is configured. Scaling is active as long as at least one metric value is + // available. + // +optional + MinReplicas *int32 `json:"minReplicas,omitempty" protobuf:"varint,2,opt,name=minReplicas"` + // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. + // It cannot be less that minReplicas. + MaxReplicas int32 `json:"maxReplicas" protobuf:"varint,3,opt,name=maxReplicas"` + // metrics contains the specifications for which to use to calculate the + // desired replica count (the maximum replica count across all metrics will + // be used). The desired replica count is calculated multiplying the + // ratio between the target value and the current value by the current + // number of pods. Ergo, metrics used must decrease as the pod count is + // increased, and vice-versa. See the individual metric source types for + // more information about how each type of metric must respond. + // If not set, the default metric will be set to 80% average CPU utilization. + // +optional + Metrics []MetricSpec `json:"metrics,omitempty" protobuf:"bytes,4,rep,name=metrics"` +} + +// CrossVersionObjectReference contains enough information to let you identify the referred resource. +type CrossVersionObjectReference struct { + // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + // API version of the referent + // +optional + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` +} + +// MetricSpec specifies how to scale based on a single metric +// (only `type` and one other matching field should be set at once). +type MetricSpec struct { + // type is the type of metric source. It should be one of "Object", + // "Pods" or "Resource", each mapping to a matching field in the object. + Type MetricSourceType `json:"type" protobuf:"bytes,1,name=type"` + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + Object *ObjectMetricSource `json:"object,omitempty" protobuf:"bytes,2,opt,name=object"` + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + Pods *PodsMetricSource `json:"pods,omitempty" protobuf:"bytes,3,opt,name=pods"` + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + Resource *ResourceMetricSource `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"` + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + External *ExternalMetricSource `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"` +} + +// MetricSourceType indicates the type of metric. +type MetricSourceType string + +var ( + // ObjectMetricSourceType is a metric describing a kubernetes object + // (for example, hits-per-second on an Ingress object). + ObjectMetricSourceType MetricSourceType = "Object" + // PodsMetricSourceType is a metric describing each pod in the current scale + // target (for example, transactions-processed-per-second). The values + // will be averaged together before being compared to the target value. + PodsMetricSourceType MetricSourceType = "Pods" + // ResourceMetricSourceType is a resource metric known to Kubernetes, as + // specified in requests and limits, describing each pod in the current + // scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics (the "pods" source). + ResourceMetricSourceType MetricSourceType = "Resource" + // ExternalMetricSourceType is a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + ExternalMetricSourceType MetricSourceType = "External" +) + +// ObjectMetricSource indicates how to scale on a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +type ObjectMetricSource struct { + DescribedObject CrossVersionObjectReference `json:"describedObject" protobuf:"bytes,1,name=describedObject"` + // target specifies the target value for the given metric + Target MetricTarget `json:"target" protobuf:"bytes,2,name=target"` + // metric identifies the target metric by name and selector + Metric MetricIdentifier `json:"metric" protobuf:"bytes,3,name=metric"` +} + +// PodsMetricSource indicates how to scale on a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +// The values will be averaged together before being compared to the target +// value. +type PodsMetricSource struct { + // metric identifies the target metric by name and selector + Metric MetricIdentifier `json:"metric" protobuf:"bytes,1,name=metric"` + // target specifies the target value for the given metric + Target MetricTarget `json:"target" protobuf:"bytes,2,name=target"` +} + +// ResourceMetricSource indicates how to scale on a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). The values will be averaged +// together before being compared to the target. Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. Only one "target" type +// should be set. +type ResourceMetricSource struct { + // name is the name of the resource in question. + Name v1.ResourceName `json:"name" protobuf:"bytes,1,name=name"` + // target specifies the target value for the given metric + Target MetricTarget `json:"target" protobuf:"bytes,2,name=target"` +} + +// ExternalMetricSource indicates how to scale on a metric not associated with +// any Kubernetes object (for example length of queue in cloud +// messaging service, or QPS from loadbalancer running outside of cluster). +type ExternalMetricSource struct { + // metric identifies the target metric by name and selector + Metric MetricIdentifier `json:"metric" protobuf:"bytes,1,name=metric"` + // target specifies the target value for the given metric + Target MetricTarget `json:"target" protobuf:"bytes,2,name=target"` +} + +// MetricIdentifier defines the name and optionally selector for a metric +type MetricIdentifier struct { + // name is the name of the given metric + Name string `json:"name" protobuf:"bytes,1,name=name"` + // selector is the string-encoded form of a standard kubernetes label selector for the given metric + // When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. + // When unset, just the metricName will be used to gather metrics. + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,name=selector"` +} + +// MetricTarget defines the target value, average value, or average utilization of a specific metric +type MetricTarget struct { + // type represents whether the metric type is Utilization, Value, or AverageValue + Type MetricTargetType `json:"type" protobuf:"bytes,1,name=type"` + // value is the target value of the metric (as a quantity). + // +optional + Value *resource.Quantity `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` + // averageValue is the target value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,3,opt,name=averageValue"` + // averageUtilization is the target value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. + // Currently only valid for Resource metric source type + // +optional + AverageUtilization *int32 `json:"averageUtilization,omitempty" protobuf:"bytes,4,opt,name=averageUtilization"` +} + +// MetricTargetType specifies the type of metric being targeted, and should be either +// "Value", "AverageValue", or "Utilization" +type MetricTargetType string + +var ( + // UtilizationMetricType declares a MetricTarget is an AverageUtilization value + UtilizationMetricType MetricTargetType = "Utilization" + // ValueMetricType declares a MetricTarget is a raw value + ValueMetricType MetricTargetType = "Value" + // AverageValueMetricType declares a MetricTarget is an + AverageValueMetricType MetricTargetType = "AverageValue" +) + +// HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler. +type HorizontalPodAutoscalerStatus struct { + // observedGeneration is the most recent generation observed by this autoscaler. + // +optional + ObservedGeneration *int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"` + + // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, + // used by the autoscaler to control how often the number of pods is changed. + // +optional + LastScaleTime *metav1.Time `json:"lastScaleTime,omitempty" protobuf:"bytes,2,opt,name=lastScaleTime"` + + // currentReplicas is current number of replicas of pods managed by this autoscaler, + // as last seen by the autoscaler. + CurrentReplicas int32 `json:"currentReplicas" protobuf:"varint,3,opt,name=currentReplicas"` + + // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, + // as last calculated by the autoscaler. + DesiredReplicas int32 `json:"desiredReplicas" protobuf:"varint,4,opt,name=desiredReplicas"` + + // currentMetrics is the last read state of the metrics used by this autoscaler. + // +optional + CurrentMetrics []MetricStatus `json:"currentMetrics" protobuf:"bytes,5,rep,name=currentMetrics"` + + // conditions is the set of conditions required for this autoscaler to scale its target, + // and indicates whether or not those conditions are met. + Conditions []HorizontalPodAutoscalerCondition `json:"conditions" protobuf:"bytes,6,rep,name=conditions"` +} + +// HorizontalPodAutoscalerConditionType are the valid conditions of +// a HorizontalPodAutoscaler. +type HorizontalPodAutoscalerConditionType string + +var ( + // ScalingActive indicates that the HPA controller is able to scale if necessary: + // it's correctly configured, can fetch the desired metrics, and isn't disabled. + ScalingActive HorizontalPodAutoscalerConditionType = "ScalingActive" + // AbleToScale indicates a lack of transient issues which prevent scaling from occurring, + // such as being in a backoff window, or being unable to access/update the target scale. + AbleToScale HorizontalPodAutoscalerConditionType = "AbleToScale" + // ScalingLimited indicates that the calculated scale based on metrics would be above or + // below the range for the HPA, and has thus been capped. + ScalingLimited HorizontalPodAutoscalerConditionType = "ScalingLimited" +) + +// HorizontalPodAutoscalerCondition describes the state of +// a HorizontalPodAutoscaler at a certain point. +type HorizontalPodAutoscalerCondition struct { + // type describes the current condition + Type HorizontalPodAutoscalerConditionType `json:"type" protobuf:"bytes,1,name=type"` + // status is the status of the condition (True, False, Unknown) + Status v1.ConditionStatus `json:"status" protobuf:"bytes,2,name=status"` + // lastTransitionTime is the last time the condition transitioned from + // one status to another + // +optional + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` + // reason is the reason for the condition's last transition. + // +optional + Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` + // message is a human-readable explanation containing details about + // the transition + // +optional + Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` +} + +// MetricStatus describes the last-read state of a single metric. +type MetricStatus struct { + // type is the type of metric source. It will be one of "Object", + // "Pods" or "Resource", each corresponds to a matching field in the object. + Type MetricSourceType `json:"type" protobuf:"bytes,1,name=type"` + + // object refers to a metric describing a single kubernetes object + // (for example, hits-per-second on an Ingress object). + // +optional + Object *ObjectMetricStatus `json:"object,omitempty" protobuf:"bytes,2,opt,name=object"` + // pods refers to a metric describing each pod in the current scale target + // (for example, transactions-processed-per-second). The values will be + // averaged together before being compared to the target value. + // +optional + Pods *PodsMetricStatus `json:"pods,omitempty" protobuf:"bytes,3,opt,name=pods"` + // resource refers to a resource metric (such as those specified in + // requests and limits) known to Kubernetes describing each pod in the + // current scale target (e.g. CPU or memory). Such metrics are built in to + // Kubernetes, and have special scaling options on top of those available + // to normal per-pod metrics using the "pods" source. + // +optional + Resource *ResourceMetricStatus `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"` + // external refers to a global metric that is not associated + // with any Kubernetes object. It allows autoscaling based on information + // coming from components running outside of cluster + // (for example length of queue in cloud messaging service, or + // QPS from loadbalancer running outside of cluster). + // +optional + External *ExternalMetricStatus `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"` +} + +// ObjectMetricStatus indicates the current value of a metric describing a +// kubernetes object (for example, hits-per-second on an Ingress object). +type ObjectMetricStatus struct { + // metric identifies the target metric by name and selector + Metric MetricIdentifier `json:"metric" protobuf:"bytes,1,name=metric"` + // current contains the current value for the given metric + Current MetricValueStatus `json:"current" protobuf:"bytes,2,name=current"` + + DescribedObject CrossVersionObjectReference `json:"describedObject" protobuf:"bytes,3,name=describedObject"` +} + +// PodsMetricStatus indicates the current value of a metric describing each pod in +// the current scale target (for example, transactions-processed-per-second). +type PodsMetricStatus struct { + // metric identifies the target metric by name and selector + Metric MetricIdentifier `json:"metric" protobuf:"bytes,1,name=metric"` + // current contains the current value for the given metric + Current MetricValueStatus `json:"current" protobuf:"bytes,2,name=current"` +} + +// ResourceMetricStatus indicates the current value of a resource metric known to +// Kubernetes, as specified in requests and limits, describing each pod in the +// current scale target (e.g. CPU or memory). Such metrics are built in to +// Kubernetes, and have special scaling options on top of those available to +// normal per-pod metrics using the "pods" source. +type ResourceMetricStatus struct { + // Name is the name of the resource in question. + Name v1.ResourceName `json:"name" protobuf:"bytes,1,name=name"` + // current contains the current value for the given metric + Current MetricValueStatus `json:"current" protobuf:"bytes,2,name=current"` +} + +// ExternalMetricStatus indicates the current value of a global metric +// not associated with any Kubernetes object. +type ExternalMetricStatus struct { + // metric identifies the target metric by name and selector + Metric MetricIdentifier `json:"metric" protobuf:"bytes,1,name=metric"` + // current contains the current value for the given metric + Current MetricValueStatus `json:"current" protobuf:"bytes,2,name=current"` +} + +// MetricValueStatus holds the current value for a metric +type MetricValueStatus struct { + // value is the current value of the metric (as a quantity). + // +optional + Value *resource.Quantity `json:"value,omitempty" protobuf:"bytes,1,opt,name=value"` + // averageValue is the current value of the average of the + // metric across all relevant pods (as a quantity) + // +optional + AverageValue *resource.Quantity `json:"averageValue,omitempty" protobuf:"bytes,2,opt,name=averageValue"` + // currentAverageUtilization is the current value of the average of the + // resource metric across all relevant pods, represented as a percentage of + // the requested value of the resource for the pods. + // +optional + AverageUtilization *int32 `json:"averageUtilization,omitempty" protobuf:"bytes,3,opt,name=averageUtilization"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects. +type HorizontalPodAutoscalerList struct { + metav1.TypeMeta `json:",inline"` + // metadata is the standard list metadata. + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of horizontal pod autoscaler objects. + Items []HorizontalPodAutoscaler `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,240 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v2beta2 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_CrossVersionObjectReference = map[string]string{ + "": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", + "kind": "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"", + "name": "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "apiVersion": "API version of the referent", +} + +func (CrossVersionObjectReference) SwaggerDoc() map[string]string { + return map_CrossVersionObjectReference +} + +var map_ExternalMetricSource = map[string]string{ + "": "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + "metric": "metric identifies the target metric by name and selector", + "target": "target specifies the target value for the given metric", +} + +func (ExternalMetricSource) SwaggerDoc() map[string]string { + return map_ExternalMetricSource +} + +var map_ExternalMetricStatus = map[string]string{ + "": "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", + "metric": "metric identifies the target metric by name and selector", + "current": "current contains the current value for the given metric", +} + +func (ExternalMetricStatus) SwaggerDoc() map[string]string { + return map_ExternalMetricStatus +} + +var map_HorizontalPodAutoscaler = map[string]string{ + "": "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", + "metadata": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + "status": "status is the current information about the autoscaler.", +} + +func (HorizontalPodAutoscaler) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscaler +} + +var map_HorizontalPodAutoscalerCondition = map[string]string{ + "": "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", + "type": "type describes the current condition", + "status": "status is the status of the condition (True, False, Unknown)", + "lastTransitionTime": "lastTransitionTime is the last time the condition transitioned from one status to another", + "reason": "reason is the reason for the condition's last transition.", + "message": "message is a human-readable explanation containing details about the transition", +} + +func (HorizontalPodAutoscalerCondition) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerCondition +} + +var map_HorizontalPodAutoscalerList = map[string]string{ + "": "HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.", + "metadata": "metadata is the standard list metadata.", + "items": "items is the list of horizontal pod autoscaler objects.", +} + +func (HorizontalPodAutoscalerList) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerList +} + +var map_HorizontalPodAutoscalerSpec = map[string]string{ + "": "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", + "scaleTargetRef": "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", + "minReplicas": "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the alpha feature gate HPAScaleToZero is enabled and at least one Object or External metric is configured. Scaling is active as long as at least one metric value is available.", + "maxReplicas": "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", + "metrics": "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.", +} + +func (HorizontalPodAutoscalerSpec) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerSpec +} + +var map_HorizontalPodAutoscalerStatus = map[string]string{ + "": "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", + "observedGeneration": "observedGeneration is the most recent generation observed by this autoscaler.", + "lastScaleTime": "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", + "currentReplicas": "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", + "desiredReplicas": "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", + "currentMetrics": "currentMetrics is the last read state of the metrics used by this autoscaler.", + "conditions": "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", +} + +func (HorizontalPodAutoscalerStatus) SwaggerDoc() map[string]string { + return map_HorizontalPodAutoscalerStatus +} + +var map_MetricIdentifier = map[string]string{ + "": "MetricIdentifier defines the name and optionally selector for a metric", + "name": "name is the name of the given metric", + "selector": "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", +} + +func (MetricIdentifier) SwaggerDoc() map[string]string { + return map_MetricIdentifier +} + +var map_MetricSpec = map[string]string{ + "": "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", + "type": "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", + "object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + "pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + "resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", +} + +func (MetricSpec) SwaggerDoc() map[string]string { + return map_MetricSpec +} + +var map_MetricStatus = map[string]string{ + "": "MetricStatus describes the last-read state of a single metric.", + "type": "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", + "object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + "pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + "resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", +} + +func (MetricStatus) SwaggerDoc() map[string]string { + return map_MetricStatus +} + +var map_MetricTarget = map[string]string{ + "": "MetricTarget defines the target value, average value, or average utilization of a specific metric", + "type": "type represents whether the metric type is Utilization, Value, or AverageValue", + "value": "value is the target value of the metric (as a quantity).", + "averageValue": "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + "averageUtilization": "averageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type", +} + +func (MetricTarget) SwaggerDoc() map[string]string { + return map_MetricTarget +} + +var map_MetricValueStatus = map[string]string{ + "": "MetricValueStatus holds the current value for a metric", + "value": "value is the current value of the metric (as a quantity).", + "averageValue": "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + "averageUtilization": "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", +} + +func (MetricValueStatus) SwaggerDoc() map[string]string { + return map_MetricValueStatus +} + +var map_ObjectMetricSource = map[string]string{ + "": "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + "target": "target specifies the target value for the given metric", + "metric": "metric identifies the target metric by name and selector", +} + +func (ObjectMetricSource) SwaggerDoc() map[string]string { + return map_ObjectMetricSource +} + +var map_ObjectMetricStatus = map[string]string{ + "": "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + "metric": "metric identifies the target metric by name and selector", + "current": "current contains the current value for the given metric", +} + +func (ObjectMetricStatus) SwaggerDoc() map[string]string { + return map_ObjectMetricStatus +} + +var map_PodsMetricSource = map[string]string{ + "": "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + "metric": "metric identifies the target metric by name and selector", + "target": "target specifies the target value for the given metric", +} + +func (PodsMetricSource) SwaggerDoc() map[string]string { + return map_PodsMetricSource +} + +var map_PodsMetricStatus = map[string]string{ + "": "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", + "metric": "metric identifies the target metric by name and selector", + "current": "current contains the current value for the given metric", +} + +func (PodsMetricStatus) SwaggerDoc() map[string]string { + return map_PodsMetricStatus +} + +var map_ResourceMetricSource = map[string]string{ + "": "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + "name": "name is the name of the resource in question.", + "target": "target specifies the target value for the given metric", +} + +func (ResourceMetricSource) SwaggerDoc() map[string]string { + return map_ResourceMetricSource +} + +var map_ResourceMetricStatus = map[string]string{ + "": "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + "name": "Name is the name of the resource in question.", + "current": "current contains the current value for the given metric", +} + +func (ResourceMetricStatus) SwaggerDoc() map[string]string { + return map_ResourceMetricStatus +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,487 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v2beta2 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CrossVersionObjectReference) DeepCopyInto(out *CrossVersionObjectReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CrossVersionObjectReference. +func (in *CrossVersionObjectReference) DeepCopy() *CrossVersionObjectReference { + if in == nil { + return nil + } + out := new(CrossVersionObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricSource) DeepCopyInto(out *ExternalMetricSource) { + *out = *in + in.Metric.DeepCopyInto(&out.Metric) + in.Target.DeepCopyInto(&out.Target) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricSource. +func (in *ExternalMetricSource) DeepCopy() *ExternalMetricSource { + if in == nil { + return nil + } + out := new(ExternalMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalMetricStatus) DeepCopyInto(out *ExternalMetricStatus) { + *out = *in + in.Metric.DeepCopyInto(&out.Metric) + in.Current.DeepCopyInto(&out.Current) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricStatus. +func (in *ExternalMetricStatus) DeepCopy() *ExternalMetricStatus { + if in == nil { + return nil + } + out := new(ExternalMetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscaler) DeepCopyInto(out *HorizontalPodAutoscaler) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscaler. +func (in *HorizontalPodAutoscaler) DeepCopy() *HorizontalPodAutoscaler { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscaler) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HorizontalPodAutoscaler) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerCondition) DeepCopyInto(out *HorizontalPodAutoscalerCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerCondition. +func (in *HorizontalPodAutoscalerCondition) DeepCopy() *HorizontalPodAutoscalerCondition { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerList) DeepCopyInto(out *HorizontalPodAutoscalerList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HorizontalPodAutoscaler, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerList. +func (in *HorizontalPodAutoscalerList) DeepCopy() *HorizontalPodAutoscalerList { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HorizontalPodAutoscalerList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerSpec) DeepCopyInto(out *HorizontalPodAutoscalerSpec) { + *out = *in + out.ScaleTargetRef = in.ScaleTargetRef + if in.MinReplicas != nil { + in, out := &in.MinReplicas, &out.MinReplicas + *out = new(int32) + **out = **in + } + if in.Metrics != nil { + in, out := &in.Metrics, &out.Metrics + *out = make([]MetricSpec, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerSpec. +func (in *HorizontalPodAutoscalerSpec) DeepCopy() *HorizontalPodAutoscalerSpec { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HorizontalPodAutoscalerStatus) DeepCopyInto(out *HorizontalPodAutoscalerStatus) { + *out = *in + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } + if in.LastScaleTime != nil { + in, out := &in.LastScaleTime, &out.LastScaleTime + *out = (*in).DeepCopy() + } + if in.CurrentMetrics != nil { + in, out := &in.CurrentMetrics, &out.CurrentMetrics + *out = make([]MetricStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]HorizontalPodAutoscalerCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HorizontalPodAutoscalerStatus. +func (in *HorizontalPodAutoscalerStatus) DeepCopy() *HorizontalPodAutoscalerStatus { + if in == nil { + return nil + } + out := new(HorizontalPodAutoscalerStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricIdentifier) DeepCopyInto(out *MetricIdentifier) { + *out = *in + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricIdentifier. +func (in *MetricIdentifier) DeepCopy() *MetricIdentifier { + if in == nil { + return nil + } + out := new(MetricIdentifier) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricSpec) DeepCopyInto(out *MetricSpec) { + *out = *in + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(ObjectMetricSource) + (*in).DeepCopyInto(*out) + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(PodsMetricSource) + (*in).DeepCopyInto(*out) + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(ResourceMetricSource) + (*in).DeepCopyInto(*out) + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalMetricSource) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricSpec. +func (in *MetricSpec) DeepCopy() *MetricSpec { + if in == nil { + return nil + } + out := new(MetricSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricStatus) DeepCopyInto(out *MetricStatus) { + *out = *in + if in.Object != nil { + in, out := &in.Object, &out.Object + *out = new(ObjectMetricStatus) + (*in).DeepCopyInto(*out) + } + if in.Pods != nil { + in, out := &in.Pods, &out.Pods + *out = new(PodsMetricStatus) + (*in).DeepCopyInto(*out) + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(ResourceMetricStatus) + (*in).DeepCopyInto(*out) + } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalMetricStatus) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricStatus. +func (in *MetricStatus) DeepCopy() *MetricStatus { + if in == nil { + return nil + } + out := new(MetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricTarget) DeepCopyInto(out *MetricTarget) { + *out = *in + if in.Value != nil { + in, out := &in.Value, &out.Value + x := (*in).DeepCopy() + *out = &x + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } + if in.AverageUtilization != nil { + in, out := &in.AverageUtilization, &out.AverageUtilization + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricTarget. +func (in *MetricTarget) DeepCopy() *MetricTarget { + if in == nil { + return nil + } + out := new(MetricTarget) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetricValueStatus) DeepCopyInto(out *MetricValueStatus) { + *out = *in + if in.Value != nil { + in, out := &in.Value, &out.Value + x := (*in).DeepCopy() + *out = &x + } + if in.AverageValue != nil { + in, out := &in.AverageValue, &out.AverageValue + x := (*in).DeepCopy() + *out = &x + } + if in.AverageUtilization != nil { + in, out := &in.AverageUtilization, &out.AverageUtilization + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricValueStatus. +func (in *MetricValueStatus) DeepCopy() *MetricValueStatus { + if in == nil { + return nil + } + out := new(MetricValueStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectMetricSource) DeepCopyInto(out *ObjectMetricSource) { + *out = *in + out.DescribedObject = in.DescribedObject + in.Target.DeepCopyInto(&out.Target) + in.Metric.DeepCopyInto(&out.Metric) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectMetricSource. +func (in *ObjectMetricSource) DeepCopy() *ObjectMetricSource { + if in == nil { + return nil + } + out := new(ObjectMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectMetricStatus) DeepCopyInto(out *ObjectMetricStatus) { + *out = *in + in.Metric.DeepCopyInto(&out.Metric) + in.Current.DeepCopyInto(&out.Current) + out.DescribedObject = in.DescribedObject + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectMetricStatus. +func (in *ObjectMetricStatus) DeepCopy() *ObjectMetricStatus { + if in == nil { + return nil + } + out := new(ObjectMetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodsMetricSource) DeepCopyInto(out *PodsMetricSource) { + *out = *in + in.Metric.DeepCopyInto(&out.Metric) + in.Target.DeepCopyInto(&out.Target) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodsMetricSource. +func (in *PodsMetricSource) DeepCopy() *PodsMetricSource { + if in == nil { + return nil + } + out := new(PodsMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodsMetricStatus) DeepCopyInto(out *PodsMetricStatus) { + *out = *in + in.Metric.DeepCopyInto(&out.Metric) + in.Current.DeepCopyInto(&out.Current) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodsMetricStatus. +func (in *PodsMetricStatus) DeepCopy() *PodsMetricStatus { + if in == nil { + return nil + } + out := new(PodsMetricStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceMetricSource) DeepCopyInto(out *ResourceMetricSource) { + *out = *in + in.Target.DeepCopyInto(&out.Target) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceMetricSource. +func (in *ResourceMetricSource) DeepCopy() *ResourceMetricSource { + if in == nil { + return nil + } + out := new(ResourceMetricSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceMetricStatus) DeepCopyInto(out *ResourceMetricStatus) { + *out = *in + in.Current.DeepCopyInto(&out.Current) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceMetricStatus. +func (in *ResourceMetricStatus) DeepCopy() *ResourceMetricStatus { + if in == nil { + return nil + } + out := new(ResourceMetricStatus) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1 // import "k8s.io/api/batch/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,36 +14,25 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/batch/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/batch/v1/generated.proto - - It has these top-level messages: - Job - JobCondition - JobList - JobSpec - JobStatus -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" - -import io "io" + proto "github.com/gogo/protobuf/proto" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -56,25 +45,145 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *Job) Reset() { *m = Job{} } -func (*Job) ProtoMessage() {} -func (*Job) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *JobCondition) Reset() { *m = JobCondition{} } -func (*JobCondition) ProtoMessage() {} -func (*JobCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *JobList) Reset() { *m = JobList{} } -func (*JobList) ProtoMessage() {} -func (*JobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *JobSpec) Reset() { *m = JobSpec{} } -func (*JobSpec) ProtoMessage() {} -func (*JobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *JobStatus) Reset() { *m = JobStatus{} } -func (*JobStatus) ProtoMessage() {} -func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (m *Job) Reset() { *m = Job{} } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{0} +} +func (m *Job) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Job) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Job) XXX_Merge(src proto.Message) { + xxx_messageInfo_Job.Merge(m, src) +} +func (m *Job) XXX_Size() int { + return m.Size() +} +func (m *Job) XXX_DiscardUnknown() { + xxx_messageInfo_Job.DiscardUnknown(m) +} + +var xxx_messageInfo_Job proto.InternalMessageInfo + +func (m *JobCondition) Reset() { *m = JobCondition{} } +func (*JobCondition) ProtoMessage() {} +func (*JobCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{1} +} +func (m *JobCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobCondition.Merge(m, src) +} +func (m *JobCondition) XXX_Size() int { + return m.Size() +} +func (m *JobCondition) XXX_DiscardUnknown() { + xxx_messageInfo_JobCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_JobCondition proto.InternalMessageInfo + +func (m *JobList) Reset() { *m = JobList{} } +func (*JobList) ProtoMessage() {} +func (*JobList) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{2} +} +func (m *JobList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobList) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobList.Merge(m, src) +} +func (m *JobList) XXX_Size() int { + return m.Size() +} +func (m *JobList) XXX_DiscardUnknown() { + xxx_messageInfo_JobList.DiscardUnknown(m) +} + +var xxx_messageInfo_JobList proto.InternalMessageInfo + +func (m *JobSpec) Reset() { *m = JobSpec{} } +func (*JobSpec) ProtoMessage() {} +func (*JobSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{3} +} +func (m *JobSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobSpec.Merge(m, src) +} +func (m *JobSpec) XXX_Size() int { + return m.Size() +} +func (m *JobSpec) XXX_DiscardUnknown() { + xxx_messageInfo_JobSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_JobSpec proto.InternalMessageInfo + +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_3b52da57c93de713, []int{4} +} +func (m *JobStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobStatus.Merge(m, src) +} +func (m *JobStatus) XXX_Size() int { + return m.Size() +} +func (m *JobStatus) XXX_DiscardUnknown() { + xxx_messageInfo_JobStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_JobStatus proto.InternalMessageInfo func init() { proto.RegisterType((*Job)(nil), "k8s.io.api.batch.v1.Job") @@ -83,10 +192,78 @@ proto.RegisterType((*JobSpec)(nil), "k8s.io.api.batch.v1.JobSpec") proto.RegisterType((*JobStatus)(nil), "k8s.io.api.batch.v1.JobStatus") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v1/generated.proto", fileDescriptor_3b52da57c93de713) +} + +var fileDescriptor_3b52da57c93de713 = []byte{ + // 929 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x5d, 0x6f, 0xe3, 0x44, + 0x14, 0xad, 0x9b, 0xa6, 0x4d, 0xa6, 0x1f, 0x5b, 0x06, 0x55, 0x1b, 0x0a, 0xb2, 0x97, 0x20, 0xa1, + 0x82, 0x84, 0x4d, 0x4b, 0x85, 0x10, 0x02, 0xa4, 0x75, 0x51, 0x25, 0xaa, 0x54, 0x5b, 0x26, 0x59, + 0x21, 0x21, 0x90, 0x18, 0xdb, 0x37, 0x89, 0x89, 0xed, 0xb1, 0x3c, 0x93, 0x48, 0x7d, 0xe3, 0x27, + 0xf0, 0x23, 0x10, 0x7f, 0x82, 0x77, 0xd4, 0xc7, 0x7d, 0xdc, 0x27, 0x8b, 0x9a, 0x1f, 0xc0, 0xfb, + 0x3e, 0xa1, 0x19, 0x3b, 0xb6, 0xd3, 0x26, 0xa2, 0xcb, 0x5b, 0xe6, 0xcc, 0x39, 0xe7, 0x5e, 0xcf, + 0x3d, 0xb9, 0xe8, 0x8b, 0xc9, 0x67, 0xdc, 0xf4, 0x99, 0x35, 0x99, 0x3a, 0x90, 0x44, 0x20, 0x80, + 0x5b, 0x33, 0x88, 0x3c, 0x96, 0x58, 0xc5, 0x05, 0x8d, 0x7d, 0xcb, 0xa1, 0xc2, 0x1d, 0x5b, 0xb3, + 0x63, 0x6b, 0x04, 0x11, 0x24, 0x54, 0x80, 0x67, 0xc6, 0x09, 0x13, 0x0c, 0xbf, 0x99, 0x93, 0x4c, + 0x1a, 0xfb, 0xa6, 0x22, 0x99, 0xb3, 0xe3, 0xc3, 0x8f, 0x46, 0xbe, 0x18, 0x4f, 0x1d, 0xd3, 0x65, + 0xa1, 0x35, 0x62, 0x23, 0x66, 0x29, 0xae, 0x33, 0x1d, 0xaa, 0x93, 0x3a, 0xa8, 0x5f, 0xb9, 0xc7, + 0x61, 0xb7, 0x56, 0xc8, 0x65, 0x09, 0x2c, 0xa9, 0x73, 0x78, 0x5a, 0x71, 0x42, 0xea, 0x8e, 0xfd, + 0x08, 0x92, 0x6b, 0x2b, 0x9e, 0x8c, 0x24, 0xc0, 0xad, 0x10, 0x04, 0x5d, 0xa6, 0xb2, 0x56, 0xa9, + 0x92, 0x69, 0x24, 0xfc, 0x10, 0xee, 0x09, 0x3e, 0xfd, 0x2f, 0x01, 0x77, 0xc7, 0x10, 0xd2, 0xbb, + 0xba, 0xee, 0x3f, 0x1a, 0x6a, 0x5c, 0x30, 0x07, 0xff, 0x84, 0x5a, 0xb2, 0x17, 0x8f, 0x0a, 0xda, + 0xd1, 0x9e, 0x68, 0x47, 0xdb, 0x27, 0x1f, 0x9b, 0xd5, 0x0b, 0x95, 0x96, 0x66, 0x3c, 0x19, 0x49, + 0x80, 0x9b, 0x92, 0x6d, 0xce, 0x8e, 0xcd, 0x67, 0xce, 0xcf, 0xe0, 0x8a, 0x4b, 0x10, 0xd4, 0xc6, + 0x37, 0xa9, 0xb1, 0x96, 0xa5, 0x06, 0xaa, 0x30, 0x52, 0xba, 0xe2, 0xaf, 0xd0, 0x06, 0x8f, 0xc1, + 0xed, 0xac, 0x2b, 0xf7, 0x77, 0xcc, 0x25, 0xef, 0x6f, 0x5e, 0x30, 0xa7, 0x1f, 0x83, 0x6b, 0xef, + 0x14, 0x4e, 0x1b, 0xf2, 0x44, 0x94, 0x0e, 0x9f, 0xa3, 0x4d, 0x2e, 0xa8, 0x98, 0xf2, 0x4e, 0x43, + 0x39, 0xe8, 0x2b, 0x1d, 0x14, 0xcb, 0xde, 0x2b, 0x3c, 0x36, 0xf3, 0x33, 0x29, 0xd4, 0xdd, 0x3f, + 0x1b, 0x68, 0xe7, 0x82, 0x39, 0x67, 0x2c, 0xf2, 0x7c, 0xe1, 0xb3, 0x08, 0x9f, 0xa2, 0x0d, 0x71, + 0x1d, 0x83, 0xfa, 0xec, 0xb6, 0xfd, 0x64, 0x5e, 0x7a, 0x70, 0x1d, 0xc3, 0xab, 0xd4, 0xd8, 0xaf, + 0x73, 0x25, 0x46, 0x14, 0x1b, 0xf7, 0xca, 0x76, 0xd6, 0x95, 0xee, 0x74, 0xb1, 0xdc, 0xab, 0xd4, + 0x58, 0x92, 0x0e, 0xb3, 0x74, 0x5a, 0x6c, 0x0a, 0x8f, 0xd0, 0x6e, 0x40, 0xb9, 0xb8, 0x4a, 0x98, + 0x03, 0x03, 0x3f, 0x84, 0xe2, 0x1b, 0x3f, 0x7c, 0xd8, 0x0c, 0xa4, 0xc2, 0x3e, 0x28, 0x1a, 0xd8, + 0xed, 0xd5, 0x8d, 0xc8, 0xa2, 0x2f, 0x9e, 0x21, 0x2c, 0x81, 0x41, 0x42, 0x23, 0x9e, 0x7f, 0x92, + 0xac, 0xb6, 0xf1, 0xda, 0xd5, 0x0e, 0x8b, 0x6a, 0xb8, 0x77, 0xcf, 0x8d, 0x2c, 0xa9, 0x80, 0xdf, + 0x47, 0x9b, 0x09, 0x50, 0xce, 0xa2, 0x4e, 0x53, 0x3d, 0x57, 0x39, 0x1d, 0xa2, 0x50, 0x52, 0xdc, + 0xe2, 0x0f, 0xd0, 0x56, 0x08, 0x9c, 0xd3, 0x11, 0x74, 0x36, 0x15, 0xf1, 0x51, 0x41, 0xdc, 0xba, + 0xcc, 0x61, 0x32, 0xbf, 0xef, 0xfe, 0xae, 0xa1, 0xad, 0x0b, 0xe6, 0xf4, 0x7c, 0x2e, 0xf0, 0x0f, + 0xf7, 0xe2, 0x6b, 0x3e, 0xec, 0x63, 0xa4, 0x5a, 0x85, 0x77, 0xbf, 0xa8, 0xd3, 0x9a, 0x23, 0xb5, + 0xe8, 0x7e, 0x89, 0x9a, 0xbe, 0x80, 0x50, 0x8e, 0xba, 0x71, 0xb4, 0x7d, 0xd2, 0x59, 0x95, 0x3c, + 0x7b, 0xb7, 0x30, 0x69, 0x7e, 0x23, 0xe9, 0x24, 0x57, 0x75, 0xff, 0xd8, 0x50, 0x8d, 0xca, 0x2c, + 0xe3, 0x63, 0xb4, 0x1d, 0xd3, 0x84, 0x06, 0x01, 0x04, 0x3e, 0x0f, 0x55, 0xaf, 0x4d, 0xfb, 0x51, + 0x96, 0x1a, 0xdb, 0x57, 0x15, 0x4c, 0xea, 0x1c, 0x29, 0x71, 0x59, 0x18, 0x07, 0x20, 0x1f, 0x33, + 0x8f, 0x5b, 0x21, 0x39, 0xab, 0x60, 0x52, 0xe7, 0xe0, 0x67, 0xe8, 0x80, 0xba, 0xc2, 0x9f, 0xc1, + 0xd7, 0x40, 0xbd, 0xc0, 0x8f, 0xa0, 0x0f, 0x2e, 0x8b, 0xbc, 0xfc, 0xaf, 0xd3, 0xb0, 0xdf, 0xca, + 0x52, 0xe3, 0xe0, 0xe9, 0x32, 0x02, 0x59, 0xae, 0xc3, 0xa7, 0x68, 0xc7, 0xa1, 0xee, 0x84, 0x0d, + 0x87, 0x3d, 0x3f, 0xf4, 0x45, 0x67, 0x4b, 0x35, 0xb1, 0x9f, 0xa5, 0xc6, 0x8e, 0x5d, 0xc3, 0xc9, + 0x02, 0x0b, 0xff, 0x88, 0x5a, 0x1c, 0x02, 0x70, 0x05, 0x4b, 0x8a, 0x88, 0x7d, 0xf2, 0xc0, 0xa9, + 0x50, 0x07, 0x82, 0x7e, 0x21, 0xb5, 0x77, 0xe4, 0x58, 0xe6, 0x27, 0x52, 0x5a, 0xe2, 0xcf, 0xd1, + 0x5e, 0x48, 0xa3, 0x29, 0x2d, 0x99, 0x2a, 0x5b, 0x2d, 0x1b, 0x67, 0xa9, 0xb1, 0x77, 0xb9, 0x70, + 0x43, 0xee, 0x30, 0xf1, 0xb7, 0xa8, 0x25, 0x20, 0x8c, 0x03, 0x2a, 0xf2, 0xa0, 0x6d, 0x9f, 0xbc, + 0x57, 0x9f, 0xaa, 0xfc, 0xbf, 0xca, 0x46, 0xae, 0x98, 0x37, 0x28, 0x68, 0x6a, 0x31, 0x95, 0x29, + 0x99, 0xa3, 0xa4, 0xb4, 0xc1, 0xcf, 0xd1, 0x63, 0x21, 0x82, 0xe2, 0xc5, 0x9e, 0x0e, 0x05, 0x24, + 0xe7, 0x7e, 0xe4, 0xf3, 0x31, 0x78, 0x9d, 0x96, 0x7a, 0xae, 0xb7, 0xb3, 0xd4, 0x78, 0x3c, 0x18, + 0xf4, 0x96, 0x51, 0xc8, 0x2a, 0x6d, 0xf7, 0xb7, 0x06, 0x6a, 0x97, 0x5b, 0x0d, 0x3f, 0x47, 0xc8, + 0x9d, 0xef, 0x10, 0xde, 0xd1, 0x54, 0x1e, 0xdf, 0x5d, 0x95, 0xc7, 0x72, 0xdb, 0x54, 0xab, 0xb9, + 0x84, 0x38, 0xa9, 0x19, 0xe1, 0xef, 0x50, 0x9b, 0x0b, 0x9a, 0x08, 0xb5, 0x0d, 0xd6, 0x5f, 0x7b, + 0x1b, 0xec, 0x66, 0xa9, 0xd1, 0xee, 0xcf, 0x0d, 0x48, 0xe5, 0x85, 0x87, 0x68, 0xaf, 0x0a, 0xe6, + 0xff, 0xdc, 0x6c, 0x6a, 0x9e, 0x67, 0x0b, 0x2e, 0xe4, 0x8e, 0xab, 0xdc, 0x2f, 0x79, 0x72, 0x55, + 0xd0, 0x9a, 0xd5, 0x7e, 0xc9, 0x63, 0x4e, 0x8a, 0x5b, 0x6c, 0xa1, 0x36, 0x9f, 0xba, 0x2e, 0x80, + 0x07, 0x9e, 0x8a, 0x4b, 0xd3, 0x7e, 0xa3, 0xa0, 0xb6, 0xfb, 0xf3, 0x0b, 0x52, 0x71, 0xa4, 0xf1, + 0x90, 0xfa, 0x01, 0x78, 0x2a, 0x26, 0x35, 0xe3, 0x73, 0x85, 0x92, 0xe2, 0xd6, 0x3e, 0xba, 0xb9, + 0xd5, 0xd7, 0x5e, 0xdc, 0xea, 0x6b, 0x2f, 0x6f, 0xf5, 0xb5, 0x5f, 0x32, 0x5d, 0xbb, 0xc9, 0x74, + 0xed, 0x45, 0xa6, 0x6b, 0x2f, 0x33, 0x5d, 0xfb, 0x2b, 0xd3, 0xb5, 0x5f, 0xff, 0xd6, 0xd7, 0xbe, + 0x5f, 0x9f, 0x1d, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x73, 0xe7, 0x7a, 0xb8, 0x08, 0x00, + 0x00, +} + func (m *Job) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -94,41 +271,52 @@ } func (m *Job) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *JobCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -136,49 +324,62 @@ } func (m *JobCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n4, err := m.LastProbeTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n5, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastProbeTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *JobList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -186,37 +387,46 @@ } func (m *JobList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *JobSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -224,65 +434,79 @@ } func (m *JobSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Parallelism != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Parallelism)) - } - if m.Completions != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Completions)) + if m.TTLSecondsAfterFinished != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TTLSecondsAfterFinished)) + i-- + dAtA[i] = 0x40 } - if m.ActiveDeadlineSeconds != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) + if m.BackoffLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.BackoffLimit)) + i-- + dAtA[i] = 0x38 } - if m.Selector != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n7, err := m.Selector.MarshalTo(dAtA[i:]) + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n7 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x32 if m.ManualSelector != nil { - dAtA[i] = 0x28 - i++ + i-- if *m.ManualSelector { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ + i-- + dAtA[i] = 0x28 } - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n8, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i += n8 - if m.BackoffLimit != nil { - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.BackoffLimit)) + if m.ActiveDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) + i-- + dAtA[i] = 0x18 + } + if m.Completions != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Completions)) + i-- + dAtA[i] = 0x10 + } + if m.Parallelism != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Parallelism)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *JobStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -290,82 +514,80 @@ } func (m *JobStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Failed)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.Succeeded)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.Active)) + i-- + dAtA[i] = 0x20 + if m.CompletionTime != nil { + { + size, err := m.CompletionTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } if m.StartTime != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size())) - n9, err := m.StartTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.StartTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 + i-- + dAtA[i] = 0x12 } - if m.CompletionTime != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CompletionTime.Size())) - n10, err := m.CompletionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i += n10 } - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Active)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Succeeded)) - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Failed)) - return i, nil + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *Job) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -378,6 +600,9 @@ } func (m *JobCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -396,6 +621,9 @@ } func (m *JobList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -410,6 +638,9 @@ } func (m *JobSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Parallelism != nil { @@ -433,10 +664,16 @@ if m.BackoffLimit != nil { n += 1 + sovGenerated(uint64(*m.BackoffLimit)) } + if m.TTLSecondsAfterFinished != nil { + n += 1 + sovGenerated(uint64(*m.TTLSecondsAfterFinished)) + } return n } func (m *JobStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Conditions) > 0 { @@ -460,14 +697,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -477,7 +707,7 @@ return "nil" } s := strings.Join([]string{`&Job{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "JobStatus", "JobStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -491,8 +721,8 @@ s := strings.Join([]string{`&JobCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastProbeTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -503,9 +733,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Job{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Job", "Job", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&JobList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Job", "Job", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -518,10 +753,11 @@ `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, `Completions:` + valueToStringGenerated(this.Completions) + `,`, `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, `ManualSelector:` + valueToStringGenerated(this.ManualSelector) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `BackoffLimit:` + valueToStringGenerated(this.BackoffLimit) + `,`, + `TTLSecondsAfterFinished:` + valueToStringGenerated(this.TTLSecondsAfterFinished) + `,`, `}`, }, "") return s @@ -530,10 +766,15 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]JobCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "JobCondition", "JobCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&JobStatus{`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "JobCondition", "JobCondition", 1), `&`, ``, 1) + `,`, - `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, - `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "v1.Time", 1) + `,`, + `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "v1.Time", 1) + `,`, `Active:` + fmt.Sprintf("%v", this.Active) + `,`, `Succeeded:` + fmt.Sprintf("%v", this.Succeeded) + `,`, `Failed:` + fmt.Sprintf("%v", this.Failed) + `,`, @@ -564,7 +805,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -592,7 +833,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -601,6 +842,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -622,7 +866,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -631,6 +875,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -652,7 +899,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -661,6 +908,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -677,6 +927,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -704,7 +957,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -732,7 +985,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -742,6 +995,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -761,7 +1017,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -771,6 +1027,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -790,7 +1049,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -799,6 +1058,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -820,7 +1082,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -829,6 +1091,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -850,7 +1115,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -860,6 +1125,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -879,7 +1147,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -889,6 +1157,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -903,6 +1174,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -930,7 +1204,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -958,7 +1232,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -967,6 +1241,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -988,7 +1265,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -997,6 +1274,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1014,6 +1294,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1041,7 +1324,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1069,7 +1352,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1089,7 +1372,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1109,7 +1392,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -1129,7 +1412,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1138,11 +1421,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1162,7 +1448,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1183,7 +1469,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1192,6 +1478,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1213,12 +1502,32 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } m.BackoffLimit = &v + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTLSecondsAfterFinished", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TTLSecondsAfterFinished = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1228,6 +1537,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1255,7 +1567,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1283,7 +1595,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1292,6 +1604,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1314,7 +1629,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1323,11 +1638,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.StartTime == nil { - m.StartTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.StartTime = &v1.Time{} } if err := m.StartTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1347,7 +1665,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1356,11 +1674,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.CompletionTime == nil { - m.CompletionTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.CompletionTime = &v1.Time{} } if err := m.CompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1380,7 +1701,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Active |= (int32(b) & 0x7F) << shift + m.Active |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1399,7 +1720,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Succeeded |= (int32(b) & 0x7F) << shift + m.Succeeded |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1418,7 +1739,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Failed |= (int32(b) & 0x7F) << shift + m.Failed |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1432,6 +1753,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1498,10 +1822,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1530,6 +1857,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1548,67 +1878,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 893 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6f, 0xe3, 0x44, - 0x18, 0x8d, 0x9b, 0xa6, 0x4d, 0x26, 0x69, 0xb7, 0x0c, 0xaa, 0x14, 0x2a, 0xe4, 0x2c, 0x41, 0x42, - 0x05, 0x09, 0x9b, 0x94, 0x0a, 0x21, 0x04, 0x48, 0xb8, 0x68, 0x25, 0xaa, 0x54, 0x5b, 0x26, 0x45, - 0x48, 0x08, 0x24, 0xc6, 0xf6, 0x97, 0xd4, 0xc4, 0xf6, 0x58, 0x9e, 0x49, 0xa4, 0xde, 0xf8, 0x09, - 0xfc, 0x08, 0xc4, 0x4f, 0x41, 0x3d, 0xee, 0x71, 0x4f, 0x11, 0x35, 0xdc, 0xb9, 0xef, 0x09, 0xcd, - 0x78, 0x62, 0x3b, 0x6d, 0x2a, 0xda, 0xbd, 0x79, 0xde, 0xbc, 0xf7, 0xbe, 0xf1, 0x37, 0x6f, 0x3e, - 0xf4, 0xf9, 0xf4, 0x53, 0x6e, 0x05, 0xcc, 0x9e, 0xce, 0x5c, 0x48, 0x63, 0x10, 0xc0, 0xed, 0x39, - 0xc4, 0x3e, 0x4b, 0x6d, 0xbd, 0x41, 0x93, 0xc0, 0x76, 0xa9, 0xf0, 0x2e, 0xed, 0xf9, 0xc0, 0x9e, - 0x40, 0x0c, 0x29, 0x15, 0xe0, 0x5b, 0x49, 0xca, 0x04, 0xc3, 0x6f, 0xe6, 0x24, 0x8b, 0x26, 0x81, - 0xa5, 0x48, 0xd6, 0x7c, 0x70, 0xf0, 0xe1, 0x24, 0x10, 0x97, 0x33, 0xd7, 0xf2, 0x58, 0x64, 0x4f, - 0xd8, 0x84, 0xd9, 0x8a, 0xeb, 0xce, 0xc6, 0x6a, 0xa5, 0x16, 0xea, 0x2b, 0xf7, 0x38, 0xe8, 0x57, - 0x0a, 0x79, 0x2c, 0x85, 0x35, 0x75, 0x0e, 0x8e, 0x4b, 0x4e, 0x44, 0xbd, 0xcb, 0x20, 0x86, 0xf4, - 0xca, 0x4e, 0xa6, 0x13, 0x09, 0x70, 0x3b, 0x02, 0x41, 0xd7, 0xa9, 0xec, 0xfb, 0x54, 0xe9, 0x2c, - 0x16, 0x41, 0x04, 0x77, 0x04, 0x9f, 0xfc, 0x9f, 0x80, 0x7b, 0x97, 0x10, 0xd1, 0xdb, 0xba, 0xfe, - 0xbf, 0x06, 0xaa, 0x9f, 0x32, 0x17, 0xff, 0x8c, 0x9a, 0xf2, 0x2c, 0x3e, 0x15, 0xb4, 0x6b, 0x3c, - 0x35, 0x0e, 0xdb, 0x47, 0x1f, 0x59, 0x65, 0x87, 0x0a, 0x4b, 0x2b, 0x99, 0x4e, 0x24, 0xc0, 0x2d, - 0xc9, 0xb6, 0xe6, 0x03, 0xeb, 0xb9, 0xfb, 0x0b, 0x78, 0xe2, 0x0c, 0x04, 0x75, 0xf0, 0xf5, 0xa2, - 0x57, 0xcb, 0x16, 0x3d, 0x54, 0x62, 0xa4, 0x70, 0xc5, 0x5f, 0xa2, 0x4d, 0x9e, 0x80, 0xd7, 0xdd, - 0x50, 0xee, 0x6f, 0x5b, 0x6b, 0xfa, 0x6f, 0x9d, 0x32, 0x77, 0x94, 0x80, 0xe7, 0x74, 0xb4, 0xd3, - 0xa6, 0x5c, 0x11, 0xa5, 0xc3, 0xcf, 0xd0, 0x16, 0x17, 0x54, 0xcc, 0x78, 0xb7, 0xae, 0x1c, 0xcc, - 0x7b, 0x1d, 0x14, 0xcb, 0xd9, 0xd5, 0x1e, 0x5b, 0xf9, 0x9a, 0x68, 0x75, 0xff, 0xcf, 0x3a, 0xea, - 0x9c, 0x32, 0xf7, 0x84, 0xc5, 0x7e, 0x20, 0x02, 0x16, 0xe3, 0x63, 0xb4, 0x29, 0xae, 0x12, 0x50, - 0xbf, 0xdd, 0x72, 0x9e, 0x2e, 0x4b, 0x5f, 0x5c, 0x25, 0xf0, 0x6a, 0xd1, 0xdb, 0xab, 0x72, 0x25, - 0x46, 0x14, 0x1b, 0x0f, 0x8b, 0xe3, 0x6c, 0x28, 0xdd, 0xf1, 0x6a, 0xb9, 0x57, 0x8b, 0xde, 0x9a, - 0x74, 0x58, 0x85, 0xd3, 0xea, 0xa1, 0xf0, 0x04, 0xed, 0x84, 0x94, 0x8b, 0xf3, 0x94, 0xb9, 0x70, - 0x11, 0x44, 0xa0, 0xff, 0xf1, 0x83, 0x87, 0xdd, 0x81, 0x54, 0x38, 0xfb, 0xfa, 0x00, 0x3b, 0xc3, - 0xaa, 0x11, 0x59, 0xf5, 0xc5, 0x73, 0x84, 0x25, 0x70, 0x91, 0xd2, 0x98, 0xe7, 0xbf, 0x24, 0xab, - 0x6d, 0x3e, 0xba, 0xda, 0x81, 0xae, 0x86, 0x87, 0x77, 0xdc, 0xc8, 0x9a, 0x0a, 0xf8, 0x3d, 0xb4, - 0x95, 0x02, 0xe5, 0x2c, 0xee, 0x36, 0x54, 0xbb, 0x8a, 0xdb, 0x21, 0x0a, 0x25, 0x7a, 0x17, 0xbf, - 0x8f, 0xb6, 0x23, 0xe0, 0x9c, 0x4e, 0xa0, 0xbb, 0xa5, 0x88, 0x4f, 0x34, 0x71, 0xfb, 0x2c, 0x87, - 0xc9, 0x72, 0xbf, 0xff, 0x87, 0x81, 0xb6, 0x4f, 0x99, 0x3b, 0x0c, 0xb8, 0xc0, 0x3f, 0xde, 0x89, - 0xaf, 0xf5, 0xb0, 0x9f, 0x91, 0x6a, 0x15, 0xde, 0x3d, 0x5d, 0xa7, 0xb9, 0x44, 0x2a, 0xd1, 0xfd, - 0x02, 0x35, 0x02, 0x01, 0x91, 0xbc, 0xea, 0xfa, 0x61, 0xfb, 0xa8, 0x7b, 0x5f, 0xf2, 0x9c, 0x1d, - 0x6d, 0xd2, 0xf8, 0x46, 0xd2, 0x49, 0xae, 0xea, 0xff, 0x53, 0x57, 0x07, 0x95, 0x59, 0xc6, 0x03, - 0xd4, 0x4e, 0x68, 0x4a, 0xc3, 0x10, 0xc2, 0x80, 0x47, 0xea, 0xac, 0x0d, 0xe7, 0x49, 0xb6, 0xe8, - 0xb5, 0xcf, 0x4b, 0x98, 0x54, 0x39, 0x52, 0xe2, 0xb1, 0x28, 0x09, 0x41, 0x36, 0x33, 0x8f, 0x9b, - 0x96, 0x9c, 0x94, 0x30, 0xa9, 0x72, 0xf0, 0x73, 0xb4, 0x4f, 0x3d, 0x11, 0xcc, 0xe1, 0x6b, 0xa0, - 0x7e, 0x18, 0xc4, 0x30, 0x02, 0x8f, 0xc5, 0x7e, 0xfe, 0x74, 0xea, 0xce, 0x5b, 0xd9, 0xa2, 0xb7, - 0xff, 0xd5, 0x3a, 0x02, 0x59, 0xaf, 0xc3, 0x3f, 0xa1, 0x26, 0x87, 0x10, 0x3c, 0xc1, 0x52, 0x1d, - 0x96, 0x8f, 0x1f, 0xd8, 0x5f, 0xea, 0x42, 0x38, 0xd2, 0x52, 0xa7, 0x23, 0x1b, 0xbc, 0x5c, 0x91, - 0xc2, 0x12, 0x7f, 0x86, 0x76, 0x23, 0x1a, 0xcf, 0x68, 0xc1, 0x54, 0x29, 0x69, 0x3a, 0x38, 0x5b, - 0xf4, 0x76, 0xcf, 0x56, 0x76, 0xc8, 0x2d, 0x26, 0xfe, 0x16, 0x35, 0x05, 0x44, 0x49, 0x48, 0x45, - 0x1e, 0x99, 0xf6, 0xd1, 0xbb, 0xd5, 0xfb, 0x91, 0x2f, 0x4f, 0x1e, 0xe4, 0x9c, 0xf9, 0x17, 0x9a, - 0xa6, 0x46, 0x4c, 0x71, 0xdf, 0x4b, 0x94, 0x14, 0x36, 0xf8, 0x18, 0x75, 0x5c, 0xea, 0x4d, 0xd9, - 0x78, 0x3c, 0x0c, 0xa2, 0x40, 0x74, 0xb7, 0x55, 0xcb, 0xf7, 0xb2, 0x45, 0xaf, 0xe3, 0x54, 0x70, - 0xb2, 0xc2, 0xea, 0xff, 0x5e, 0x47, 0xad, 0x62, 0xfc, 0xe0, 0xef, 0x10, 0xf2, 0x96, 0x8f, 0x9d, - 0x77, 0x0d, 0x15, 0x9c, 0x77, 0xee, 0x0b, 0x4e, 0x31, 0x16, 0xca, 0x19, 0x5a, 0x40, 0x9c, 0x54, - 0x8c, 0xf0, 0xf7, 0xa8, 0xc5, 0x05, 0x4d, 0x85, 0x7a, 0xb6, 0x1b, 0x8f, 0x7e, 0xb6, 0x3b, 0xd9, - 0xa2, 0xd7, 0x1a, 0x2d, 0x0d, 0x48, 0xe9, 0x85, 0xc7, 0x68, 0xb7, 0x4c, 0xd0, 0x6b, 0x8e, 0x20, - 0x75, 0x5d, 0x27, 0x2b, 0x2e, 0xe4, 0x96, 0xab, 0x1c, 0x04, 0x79, 0xc4, 0x54, 0x8e, 0x1a, 0xe5, - 0x20, 0xc8, 0xf3, 0x48, 0xf4, 0x2e, 0xb6, 0x51, 0x8b, 0xcf, 0x3c, 0x0f, 0xc0, 0x07, 0x5f, 0xa5, - 0xa1, 0xe1, 0xbc, 0xa1, 0xa9, 0xad, 0xd1, 0x72, 0x83, 0x94, 0x1c, 0x69, 0x3c, 0xa6, 0x41, 0x08, - 0xbe, 0x4a, 0x41, 0xc5, 0xf8, 0x99, 0x42, 0x89, 0xde, 0x75, 0x0e, 0xaf, 0x6f, 0xcc, 0xda, 0x8b, - 0x1b, 0xb3, 0xf6, 0xf2, 0xc6, 0xac, 0xfd, 0x9a, 0x99, 0xc6, 0x75, 0x66, 0x1a, 0x2f, 0x32, 0xd3, - 0x78, 0x99, 0x99, 0xc6, 0x5f, 0x99, 0x69, 0xfc, 0xf6, 0xb7, 0x59, 0xfb, 0x61, 0x63, 0x3e, 0xf8, - 0x2f, 0x00, 0x00, 0xff, 0xff, 0xdd, 0xcc, 0x84, 0xd1, 0x61, 0x08, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -32,17 +32,17 @@ // Job represents the configuration of a single job. message Job { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of a job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional JobSpec spec = 2; // Current status of a job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional JobStatus status = 3; } @@ -75,7 +75,7 @@ // JobList is a collection of jobs. message JobList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -134,6 +134,18 @@ // Describes the pod that will be created when executing a job. // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ optional k8s.io.api.core.v1.PodTemplateSpec template = 6; + + // ttlSecondsAfterFinished limits the lifetime of a Job that has finished + // execution (either Complete or Failed). If this field is set, + // ttlSecondsAfterFinished after the Job finishes, it is eligible to be + // automatically deleted. When the Job is being deleted, its lifecycle + // guarantees (e.g. finalizers) will be honored. If this field is unset, + // the Job won't be automatically deleted. If this field is set to zero, + // the Job becomes eligible to be deleted immediately after it finishes. + // This field is alpha-level and is only honored by servers that enable the + // TTLAfterFinished feature. + // +optional + optional int32 ttlSecondsAfterFinished = 8; } // JobStatus represents the current state of a Job. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,17 +28,17 @@ type Job struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of a job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Current status of a job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status JobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -49,7 +49,7 @@ type JobList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -114,6 +114,18 @@ // Describes the pod that will be created when executing a job. // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,6,opt,name=template"` + + // ttlSecondsAfterFinished limits the lifetime of a Job that has finished + // execution (either Complete or Failed). If this field is set, + // ttlSecondsAfterFinished after the Job finishes, it is eligible to be + // automatically deleted. When the Job is being deleted, its lifecycle + // guarantees (e.g. finalizers) will be honored. If this field is unset, + // the Job won't be automatically deleted. If this field is set to zero, + // the Job becomes eligible to be deleted immediately after it finishes. + // This field is alpha-level and is only honored by servers that enable the + // TTLAfterFinished feature. + // +optional + TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty" protobuf:"varint,8,opt,name=ttlSecondsAfterFinished"` } // JobStatus represents the current state of a Job. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,9 +29,9 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_Job = map[string]string{ "": "Job represents the configuration of a single job.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Current status of a job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (Job) SwaggerDoc() map[string]string { @@ -54,7 +54,7 @@ var map_JobList = map[string]string{ "": "JobList is a collection of jobs.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is the list of Jobs.", } @@ -63,14 +63,15 @@ } var map_JobSpec = map[string]string{ - "": "JobSpec describes how the job execution will look like.", - "parallelism": "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "completions": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - "activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - "backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6", - "selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", - "template": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + "": "JobSpec describes how the job execution will look like.", + "parallelism": "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + "completions": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + "activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", + "backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6", + "selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + "manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", + "template": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + "ttlSecondsAfterFinished": "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.", } func (JobSpec) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1 import ( - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -75,7 +75,7 @@ func (in *JobList) DeepCopyInto(out *JobList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Job, len(*in)) @@ -109,59 +109,40 @@ *out = *in if in.Parallelism != nil { in, out := &in.Parallelism, &out.Parallelism - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Completions != nil { in, out := &in.Completions, &out.Completions - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.ActiveDeadlineSeconds != nil { in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.BackoffLimit != nil { in, out := &in.BackoffLimit, &out.BackoffLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.ManualSelector != nil { in, out := &in.ManualSelector, &out.ManualSelector - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } in.Template.DeepCopyInto(&out.Template) + if in.TTLSecondsAfterFinished != nil { + in, out := &in.TTLSecondsAfterFinished, &out.TTLSecondsAfterFinished + *out = new(int32) + **out = **in + } return } @@ -187,19 +168,11 @@ } if in.StartTime != nil { in, out := &in.StartTime, &out.StartTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } if in.CompletionTime != nil { in, out := &in.CompletionTime, &out.CompletionTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/batch/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,37 +14,25 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/batch/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/batch/v1beta1/generated.proto - - It has these top-level messages: - CronJob - CronJobList - CronJobSpec - CronJobStatus - JobTemplate - JobTemplateSpec -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" - -import io "io" + proto "github.com/gogo/protobuf/proto" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -57,29 +45,173 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *CronJob) Reset() { *m = CronJob{} } -func (*CronJob) ProtoMessage() {} -func (*CronJob) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *CronJobList) Reset() { *m = CronJobList{} } -func (*CronJobList) ProtoMessage() {} -func (*CronJobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *CronJobSpec) Reset() { *m = CronJobSpec{} } -func (*CronJobSpec) ProtoMessage() {} -func (*CronJobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *CronJobStatus) Reset() { *m = CronJobStatus{} } -func (*CronJobStatus) ProtoMessage() {} -func (*CronJobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *JobTemplate) Reset() { *m = JobTemplate{} } -func (*JobTemplate) ProtoMessage() {} -func (*JobTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } -func (*JobTemplateSpec) ProtoMessage() {} -func (*JobTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (m *CronJob) Reset() { *m = CronJob{} } +func (*CronJob) ProtoMessage() {} +func (*CronJob) Descriptor() ([]byte, []int) { + return fileDescriptor_e57b277b05179ae7, []int{0} +} +func (m *CronJob) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJob) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJob.Merge(m, src) +} +func (m *CronJob) XXX_Size() int { + return m.Size() +} +func (m *CronJob) XXX_DiscardUnknown() { + xxx_messageInfo_CronJob.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJob proto.InternalMessageInfo + +func (m *CronJobList) Reset() { *m = CronJobList{} } +func (*CronJobList) ProtoMessage() {} +func (*CronJobList) Descriptor() ([]byte, []int) { + return fileDescriptor_e57b277b05179ae7, []int{1} +} +func (m *CronJobList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobList.Merge(m, src) +} +func (m *CronJobList) XXX_Size() int { + return m.Size() +} +func (m *CronJobList) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobList.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobList proto.InternalMessageInfo + +func (m *CronJobSpec) Reset() { *m = CronJobSpec{} } +func (*CronJobSpec) ProtoMessage() {} +func (*CronJobSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e57b277b05179ae7, []int{2} +} +func (m *CronJobSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobSpec.Merge(m, src) +} +func (m *CronJobSpec) XXX_Size() int { + return m.Size() +} +func (m *CronJobSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobSpec proto.InternalMessageInfo + +func (m *CronJobStatus) Reset() { *m = CronJobStatus{} } +func (*CronJobStatus) ProtoMessage() {} +func (*CronJobStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_e57b277b05179ae7, []int{3} +} +func (m *CronJobStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobStatus.Merge(m, src) +} +func (m *CronJobStatus) XXX_Size() int { + return m.Size() +} +func (m *CronJobStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobStatus proto.InternalMessageInfo + +func (m *JobTemplate) Reset() { *m = JobTemplate{} } +func (*JobTemplate) ProtoMessage() {} +func (*JobTemplate) Descriptor() ([]byte, []int) { + return fileDescriptor_e57b277b05179ae7, []int{4} +} +func (m *JobTemplate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobTemplate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobTemplate) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobTemplate.Merge(m, src) +} +func (m *JobTemplate) XXX_Size() int { + return m.Size() +} +func (m *JobTemplate) XXX_DiscardUnknown() { + xxx_messageInfo_JobTemplate.DiscardUnknown(m) +} + +var xxx_messageInfo_JobTemplate proto.InternalMessageInfo + +func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } +func (*JobTemplateSpec) ProtoMessage() {} +func (*JobTemplateSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e57b277b05179ae7, []int{5} +} +func (m *JobTemplateSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobTemplateSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobTemplateSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobTemplateSpec.Merge(m, src) +} +func (m *JobTemplateSpec) XXX_Size() int { + return m.Size() +} +func (m *JobTemplateSpec) XXX_DiscardUnknown() { + xxx_messageInfo_JobTemplateSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_JobTemplateSpec proto.InternalMessageInfo func init() { proto.RegisterType((*CronJob)(nil), "k8s.io.api.batch.v1beta1.CronJob") @@ -89,10 +221,68 @@ proto.RegisterType((*JobTemplate)(nil), "k8s.io.api.batch.v1beta1.JobTemplate") proto.RegisterType((*JobTemplateSpec)(nil), "k8s.io.api.batch.v1beta1.JobTemplateSpec") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v1beta1/generated.proto", fileDescriptor_e57b277b05179ae7) +} + +var fileDescriptor_e57b277b05179ae7 = []byte{ + // 771 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xc7, 0xe3, 0x34, 0xbf, 0x76, 0xc2, 0x42, 0xd7, 0xa0, 0x5d, 0x2b, 0x20, 0x27, 0x64, 0xb5, + 0x22, 0x20, 0x76, 0x4c, 0x2b, 0x84, 0x38, 0x21, 0xad, 0x17, 0x2d, 0x50, 0x8a, 0x16, 0x39, 0x45, + 0x48, 0xa8, 0x42, 0x1d, 0x8f, 0x5f, 0x92, 0x69, 0x6c, 0x8f, 0xe5, 0x19, 0x47, 0xca, 0x8d, 0x0b, + 0x77, 0xfe, 0x11, 0x4e, 0xfc, 0x13, 0x11, 0xa7, 0x1e, 0x7b, 0x8a, 0xa8, 0xf9, 0x2f, 0x38, 0x21, + 0x4f, 0x9c, 0x1f, 0xcd, 0x8f, 0xb6, 0x7b, 0xe9, 0xcd, 0xf3, 0xe6, 0xfb, 0xfd, 0xcc, 0xf3, 0x7b, + 0x6f, 0x06, 0xbd, 0x18, 0x7e, 0x29, 0x30, 0xe3, 0xd6, 0x30, 0x71, 0x21, 0x0e, 0x41, 0x82, 0xb0, + 0x46, 0x10, 0x7a, 0x3c, 0xb6, 0xf2, 0x0d, 0x12, 0x31, 0xcb, 0x25, 0x92, 0x0e, 0xac, 0xd1, 0x81, + 0x0b, 0x92, 0x1c, 0x58, 0x7d, 0x08, 0x21, 0x26, 0x12, 0x3c, 0x1c, 0xc5, 0x5c, 0x72, 0xdd, 0x98, + 0x29, 0x31, 0x89, 0x18, 0x56, 0x4a, 0x9c, 0x2b, 0x1b, 0xcf, 0xfb, 0x4c, 0x0e, 0x12, 0x17, 0x53, + 0x1e, 0x58, 0x7d, 0xde, 0xe7, 0x96, 0x32, 0xb8, 0x49, 0x4f, 0xad, 0xd4, 0x42, 0x7d, 0xcd, 0x40, + 0x8d, 0xa7, 0x5b, 0x8e, 0x5c, 0x3f, 0xad, 0xd1, 0x5e, 0x11, 0x51, 0x1e, 0xc3, 0x36, 0xcd, 0xe7, + 0x4b, 0x4d, 0x40, 0xe8, 0x80, 0x85, 0x10, 0x8f, 0xad, 0x68, 0xd8, 0xcf, 0x02, 0xc2, 0x0a, 0x40, + 0x92, 0x6d, 0x2e, 0x6b, 0x97, 0x2b, 0x4e, 0x42, 0xc9, 0x02, 0xd8, 0x30, 0x7c, 0x71, 0x9b, 0x41, + 0xd0, 0x01, 0x04, 0x64, 0xdd, 0xd7, 0xfe, 0xbd, 0x88, 0xaa, 0x2f, 0x63, 0x1e, 0x1e, 0x71, 0x57, + 0x3f, 0x43, 0xb5, 0x2c, 0x1f, 0x8f, 0x48, 0x62, 0x68, 0x2d, 0xad, 0x53, 0x3f, 0xfc, 0x0c, 0x2f, + 0xeb, 0xb9, 0xc0, 0xe2, 0x68, 0xd8, 0xcf, 0x02, 0x02, 0x67, 0x6a, 0x3c, 0x3a, 0xc0, 0xaf, 0xdd, + 0x73, 0xa0, 0xf2, 0x07, 0x90, 0xc4, 0xd6, 0x27, 0xd3, 0x66, 0x21, 0x9d, 0x36, 0xd1, 0x32, 0xe6, + 0x2c, 0xa8, 0xfa, 0x37, 0xa8, 0x24, 0x22, 0xa0, 0x46, 0x51, 0xd1, 0x9f, 0xe1, 0x5d, 0xdd, 0xc2, + 0x79, 0x4a, 0xdd, 0x08, 0xa8, 0xfd, 0x56, 0x8e, 0x2c, 0x65, 0x2b, 0x47, 0x01, 0xf4, 0xd7, 0xa8, + 0x22, 0x24, 0x91, 0x89, 0x30, 0xf6, 0x14, 0xea, 0xa3, 0xdb, 0x51, 0x4a, 0x6e, 0xbf, 0x9d, 0xc3, + 0x2a, 0xb3, 0xb5, 0x93, 0x63, 0xda, 0x7f, 0x69, 0xa8, 0x9e, 0x2b, 0x8f, 0x99, 0x90, 0xfa, 0xe9, + 0x46, 0x2d, 0xf0, 0xdd, 0x6a, 0x91, 0xb9, 0x55, 0x25, 0xf6, 0xf3, 0x93, 0x6a, 0xf3, 0xc8, 0x4a, + 0x1d, 0x5e, 0xa1, 0x32, 0x93, 0x10, 0x08, 0xa3, 0xd8, 0xda, 0xeb, 0xd4, 0x0f, 0x3f, 0xbc, 0x35, + 0x7b, 0xfb, 0x61, 0x4e, 0x2b, 0x7f, 0x97, 0xf9, 0x9c, 0x99, 0xbd, 0xfd, 0x67, 0x69, 0x91, 0x75, + 0x56, 0x1c, 0xfd, 0x53, 0x54, 0xcb, 0xfa, 0xec, 0x25, 0x3e, 0xa8, 0xac, 0x1f, 0x2c, 0xb3, 0xe8, + 0xe6, 0x71, 0x67, 0xa1, 0xd0, 0x7f, 0x42, 0x4f, 0x84, 0x24, 0xb1, 0x64, 0x61, 0xff, 0x6b, 0x20, + 0x9e, 0xcf, 0x42, 0xe8, 0x02, 0xe5, 0xa1, 0x27, 0x54, 0x83, 0xf6, 0xec, 0xf7, 0xd3, 0x69, 0xf3, + 0x49, 0x77, 0xbb, 0xc4, 0xd9, 0xe5, 0xd5, 0x4f, 0xd1, 0x23, 0xca, 0x43, 0x9a, 0xc4, 0x31, 0x84, + 0x74, 0xfc, 0x23, 0xf7, 0x19, 0x1d, 0xab, 0x36, 0x3d, 0xb0, 0x71, 0x9e, 0xcd, 0xa3, 0x97, 0xeb, + 0x82, 0xff, 0xb6, 0x05, 0x9d, 0x4d, 0x90, 0xfe, 0x0c, 0x55, 0x45, 0x22, 0x22, 0x08, 0x3d, 0xa3, + 0xd4, 0xd2, 0x3a, 0x35, 0xbb, 0x9e, 0x4e, 0x9b, 0xd5, 0xee, 0x2c, 0xe4, 0xcc, 0xf7, 0xf4, 0x33, + 0x54, 0x3f, 0xe7, 0xee, 0x09, 0x04, 0x91, 0x4f, 0x24, 0x18, 0x65, 0xd5, 0xc2, 0x8f, 0x77, 0xd7, + 0xf9, 0x68, 0x29, 0x56, 0x43, 0xf7, 0x6e, 0x9e, 0x69, 0x7d, 0x65, 0xc3, 0x59, 0x45, 0xea, 0xbf, + 0xa2, 0x86, 0x48, 0x28, 0x05, 0x21, 0x7a, 0x89, 0x7f, 0xc4, 0x5d, 0xf1, 0x2d, 0x13, 0x92, 0xc7, + 0xe3, 0x63, 0x16, 0x30, 0x69, 0x54, 0x5a, 0x5a, 0xa7, 0x6c, 0x9b, 0xe9, 0xb4, 0xd9, 0xe8, 0xee, + 0x54, 0x39, 0x37, 0x10, 0x74, 0x07, 0x3d, 0xee, 0x11, 0xe6, 0x83, 0xb7, 0xc1, 0xae, 0x2a, 0x76, + 0x23, 0x9d, 0x36, 0x1f, 0xbf, 0xda, 0xaa, 0x70, 0x76, 0x38, 0xdb, 0x7f, 0x6b, 0xe8, 0xe1, 0xb5, + 0xfb, 0xa0, 0x7f, 0x8f, 0x2a, 0x84, 0x4a, 0x36, 0xca, 0xe6, 0x25, 0x1b, 0xc5, 0xa7, 0xab, 0x25, + 0xca, 0xde, 0xb4, 0xe5, 0xfd, 0x76, 0xa0, 0x07, 0x59, 0x27, 0x60, 0x79, 0x89, 0x5e, 0x28, 0xab, + 0x93, 0x23, 0x74, 0x1f, 0xed, 0xfb, 0x44, 0xc8, 0xf9, 0xa8, 0x9d, 0xb0, 0x00, 0x54, 0x93, 0xea, + 0x87, 0x9f, 0xdc, 0xed, 0xf2, 0x64, 0x0e, 0xfb, 0xbd, 0x74, 0xda, 0xdc, 0x3f, 0x5e, 0xe3, 0x38, + 0x1b, 0xe4, 0xf6, 0x44, 0x43, 0xab, 0xdd, 0xb9, 0x87, 0xe7, 0xeb, 0x67, 0x54, 0x93, 0xf3, 0x89, + 0x2a, 0xbe, 0xe9, 0x44, 0x2d, 0x6e, 0xe2, 0x62, 0x9c, 0x16, 0xb0, 0xec, 0xf5, 0x79, 0x67, 0x4d, + 0x7f, 0x0f, 0xbf, 0xf3, 0xd5, 0xb5, 0xd7, 0xf8, 0x83, 0x6d, 0xbf, 0x82, 0x6f, 0x78, 0x84, 0xed, + 0xe7, 0x93, 0x2b, 0xb3, 0x70, 0x71, 0x65, 0x16, 0x2e, 0xaf, 0xcc, 0xc2, 0x6f, 0xa9, 0xa9, 0x4d, + 0x52, 0x53, 0xbb, 0x48, 0x4d, 0xed, 0x32, 0x35, 0xb5, 0x7f, 0x52, 0x53, 0xfb, 0xe3, 0x5f, 0xb3, + 0xf0, 0x4b, 0x35, 0x2f, 0xc8, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x9f, 0xb3, 0xdd, 0xdf, + 0x07, 0x00, 0x00, +} + func (m *CronJob) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -100,41 +290,52 @@ } func (m *CronJob) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CronJobList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -142,37 +343,46 @@ } func (m *CronJobList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n4, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CronJobSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -180,58 +390,67 @@ } func (m *CronJobSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) - i += copy(dAtA[i:], m.Schedule) - if m.StartingDeadlineSeconds != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) + if m.FailedJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i-- + dAtA[i] = 0x38 } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) - i += copy(dAtA[i:], m.ConcurrencyPolicy) + if m.SuccessfulJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + { + size, err := m.JobTemplate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a if m.Suspend != nil { - dAtA[i] = 0x20 - i++ + i-- if *m.Suspend { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.JobTemplate.Size())) - n5, err := m.JobTemplate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if m.SuccessfulJobsHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x20 } - if m.FailedJobsHistoryLimit != nil { - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i -= len(m.ConcurrencyPolicy) + copy(dAtA[i:], m.ConcurrencyPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) + i-- + dAtA[i] = 0x1a + if m.StartingDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) + i-- + dAtA[i] = 0x10 } - return i, nil + i -= len(m.Schedule) + copy(dAtA[i:], m.Schedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CronJobStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -239,39 +458,48 @@ } func (m *CronJobStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Active) > 0 { - for _, msg := range m.Active { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.LastScheduleTime != nil { + { + size, err := m.LastScheduleTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - } - if m.LastScheduleTime != nil { + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastScheduleTime.Size())) - n6, err := m.LastScheduleTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if len(m.Active) > 0 { + for iNdEx := len(m.Active) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Active[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i += n6 } - return i, nil + return len(dAtA) - i, nil } func (m *JobTemplate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -279,33 +507,42 @@ } func (m *JobTemplate) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n8, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *JobTemplateSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -313,57 +550,53 @@ } func (m *JobTemplateSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobTemplateSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n9, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n10, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *CronJob) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -376,6 +609,9 @@ } func (m *CronJobList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -390,6 +626,9 @@ } func (m *CronJobSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Schedule) @@ -414,6 +653,9 @@ } func (m *CronJobStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Active) > 0 { @@ -430,6 +672,9 @@ } func (m *JobTemplate) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -440,6 +685,9 @@ } func (m *JobTemplateSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -450,14 +698,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -467,7 +708,7 @@ return "nil" } s := strings.Join([]string{`&CronJob{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CronJobSpec", "CronJobSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronJobStatus", "CronJobStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -478,9 +719,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]CronJob{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CronJob", "CronJob", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&CronJobList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CronJob", "CronJob", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -505,9 +751,14 @@ if this == nil { return "nil" } + repeatedStringForActive := "[]ObjectReference{" + for _, f := range this.Active { + repeatedStringForActive += fmt.Sprintf("%v", f) + "," + } + repeatedStringForActive += "}" s := strings.Join([]string{`&CronJobStatus{`, - `Active:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Active), "ObjectReference", "k8s_io_api_core_v1.ObjectReference", 1), `&`, ``, 1) + `,`, - `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, + `Active:` + repeatedStringForActive + `,`, + `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "v1.Time", 1) + `,`, `}`, }, "") return s @@ -517,7 +768,7 @@ return "nil" } s := strings.Join([]string{`&JobTemplate{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Template:` + strings.Replace(strings.Replace(this.Template.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -528,8 +779,8 @@ return "nil" } s := strings.Join([]string{`&JobTemplateSpec{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "k8s_io_api_batch_v1.JobSpec", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "JobSpec", "v12.JobSpec", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -557,7 +808,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -585,7 +836,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -594,6 +845,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -615,7 +869,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -624,6 +878,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -645,7 +902,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -654,6 +911,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -670,6 +930,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -697,7 +960,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -725,7 +988,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -734,6 +997,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -755,7 +1021,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -764,6 +1030,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -781,6 +1050,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -808,7 +1080,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -836,7 +1108,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -846,6 +1118,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -865,7 +1140,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -885,7 +1160,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -895,6 +1170,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -914,7 +1192,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -935,7 +1213,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -944,6 +1222,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -965,7 +1246,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -985,7 +1266,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1000,6 +1281,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1027,7 +1311,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1055,7 +1339,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1064,10 +1348,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Active = append(m.Active, k8s_io_api_core_v1.ObjectReference{}) + m.Active = append(m.Active, v11.ObjectReference{}) if err := m.Active[len(m.Active)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1086,7 +1373,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1095,11 +1382,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.LastScheduleTime == nil { - m.LastScheduleTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.LastScheduleTime = &v1.Time{} } if err := m.LastScheduleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1114,6 +1404,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1141,7 +1434,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1169,7 +1462,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1178,6 +1471,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1199,7 +1495,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1208,6 +1504,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1224,6 +1523,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1251,7 +1553,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1279,7 +1581,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1288,6 +1590,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1309,7 +1614,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1318,6 +1623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1334,6 +1642,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1400,10 +1711,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1432,6 +1746,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1450,60 +1767,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 771 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0xc7, 0xe3, 0x34, 0xbf, 0x76, 0xc2, 0x42, 0xd7, 0xa0, 0x5d, 0x2b, 0x20, 0x27, 0x64, 0xb5, - 0x22, 0x20, 0x76, 0x4c, 0x2b, 0x84, 0x38, 0x21, 0xad, 0x17, 0x2d, 0x50, 0x8a, 0x16, 0x39, 0x45, - 0x48, 0xa8, 0x42, 0x1d, 0x8f, 0x5f, 0x92, 0x69, 0x6c, 0x8f, 0xe5, 0x19, 0x47, 0xca, 0x8d, 0x0b, - 0x77, 0xfe, 0x11, 0x4e, 0xfc, 0x13, 0x11, 0xa7, 0x1e, 0x7b, 0x8a, 0xa8, 0xf9, 0x2f, 0x38, 0x21, - 0x4f, 0x9c, 0x1f, 0xcd, 0x8f, 0xb6, 0x7b, 0xe9, 0xcd, 0xf3, 0xe6, 0xfb, 0xfd, 0xcc, 0xf3, 0x7b, - 0x6f, 0x06, 0xbd, 0x18, 0x7e, 0x29, 0x30, 0xe3, 0xd6, 0x30, 0x71, 0x21, 0x0e, 0x41, 0x82, 0xb0, - 0x46, 0x10, 0x7a, 0x3c, 0xb6, 0xf2, 0x0d, 0x12, 0x31, 0xcb, 0x25, 0x92, 0x0e, 0xac, 0xd1, 0x81, - 0x0b, 0x92, 0x1c, 0x58, 0x7d, 0x08, 0x21, 0x26, 0x12, 0x3c, 0x1c, 0xc5, 0x5c, 0x72, 0xdd, 0x98, - 0x29, 0x31, 0x89, 0x18, 0x56, 0x4a, 0x9c, 0x2b, 0x1b, 0xcf, 0xfb, 0x4c, 0x0e, 0x12, 0x17, 0x53, - 0x1e, 0x58, 0x7d, 0xde, 0xe7, 0x96, 0x32, 0xb8, 0x49, 0x4f, 0xad, 0xd4, 0x42, 0x7d, 0xcd, 0x40, - 0x8d, 0xa7, 0x5b, 0x8e, 0x5c, 0x3f, 0xad, 0xd1, 0x5e, 0x11, 0x51, 0x1e, 0xc3, 0x36, 0xcd, 0xe7, - 0x4b, 0x4d, 0x40, 0xe8, 0x80, 0x85, 0x10, 0x8f, 0xad, 0x68, 0xd8, 0xcf, 0x02, 0xc2, 0x0a, 0x40, - 0x92, 0x6d, 0x2e, 0x6b, 0x97, 0x2b, 0x4e, 0x42, 0xc9, 0x02, 0xd8, 0x30, 0x7c, 0x71, 0x9b, 0x41, - 0xd0, 0x01, 0x04, 0x64, 0xdd, 0xd7, 0xfe, 0xbd, 0x88, 0xaa, 0x2f, 0x63, 0x1e, 0x1e, 0x71, 0x57, - 0x3f, 0x43, 0xb5, 0x2c, 0x1f, 0x8f, 0x48, 0x62, 0x68, 0x2d, 0xad, 0x53, 0x3f, 0xfc, 0x0c, 0x2f, - 0xeb, 0xb9, 0xc0, 0xe2, 0x68, 0xd8, 0xcf, 0x02, 0x02, 0x67, 0x6a, 0x3c, 0x3a, 0xc0, 0xaf, 0xdd, - 0x73, 0xa0, 0xf2, 0x07, 0x90, 0xc4, 0xd6, 0x27, 0xd3, 0x66, 0x21, 0x9d, 0x36, 0xd1, 0x32, 0xe6, - 0x2c, 0xa8, 0xfa, 0x37, 0xa8, 0x24, 0x22, 0xa0, 0x46, 0x51, 0xd1, 0x9f, 0xe1, 0x5d, 0xdd, 0xc2, - 0x79, 0x4a, 0xdd, 0x08, 0xa8, 0xfd, 0x56, 0x8e, 0x2c, 0x65, 0x2b, 0x47, 0x01, 0xf4, 0xd7, 0xa8, - 0x22, 0x24, 0x91, 0x89, 0x30, 0xf6, 0x14, 0xea, 0xa3, 0xdb, 0x51, 0x4a, 0x6e, 0xbf, 0x9d, 0xc3, - 0x2a, 0xb3, 0xb5, 0x93, 0x63, 0xda, 0x7f, 0x69, 0xa8, 0x9e, 0x2b, 0x8f, 0x99, 0x90, 0xfa, 0xe9, - 0x46, 0x2d, 0xf0, 0xdd, 0x6a, 0x91, 0xb9, 0x55, 0x25, 0xf6, 0xf3, 0x93, 0x6a, 0xf3, 0xc8, 0x4a, - 0x1d, 0x5e, 0xa1, 0x32, 0x93, 0x10, 0x08, 0xa3, 0xd8, 0xda, 0xeb, 0xd4, 0x0f, 0x3f, 0xbc, 0x35, - 0x7b, 0xfb, 0x61, 0x4e, 0x2b, 0x7f, 0x97, 0xf9, 0x9c, 0x99, 0xbd, 0xfd, 0x67, 0x69, 0x91, 0x75, - 0x56, 0x1c, 0xfd, 0x53, 0x54, 0xcb, 0xfa, 0xec, 0x25, 0x3e, 0xa8, 0xac, 0x1f, 0x2c, 0xb3, 0xe8, - 0xe6, 0x71, 0x67, 0xa1, 0xd0, 0x7f, 0x42, 0x4f, 0x84, 0x24, 0xb1, 0x64, 0x61, 0xff, 0x6b, 0x20, - 0x9e, 0xcf, 0x42, 0xe8, 0x02, 0xe5, 0xa1, 0x27, 0x54, 0x83, 0xf6, 0xec, 0xf7, 0xd3, 0x69, 0xf3, - 0x49, 0x77, 0xbb, 0xc4, 0xd9, 0xe5, 0xd5, 0x4f, 0xd1, 0x23, 0xca, 0x43, 0x9a, 0xc4, 0x31, 0x84, - 0x74, 0xfc, 0x23, 0xf7, 0x19, 0x1d, 0xab, 0x36, 0x3d, 0xb0, 0x71, 0x9e, 0xcd, 0xa3, 0x97, 0xeb, - 0x82, 0xff, 0xb6, 0x05, 0x9d, 0x4d, 0x90, 0xfe, 0x0c, 0x55, 0x45, 0x22, 0x22, 0x08, 0x3d, 0xa3, - 0xd4, 0xd2, 0x3a, 0x35, 0xbb, 0x9e, 0x4e, 0x9b, 0xd5, 0xee, 0x2c, 0xe4, 0xcc, 0xf7, 0xf4, 0x33, - 0x54, 0x3f, 0xe7, 0xee, 0x09, 0x04, 0x91, 0x4f, 0x24, 0x18, 0x65, 0xd5, 0xc2, 0x8f, 0x77, 0xd7, - 0xf9, 0x68, 0x29, 0x56, 0x43, 0xf7, 0x6e, 0x9e, 0x69, 0x7d, 0x65, 0xc3, 0x59, 0x45, 0xea, 0xbf, - 0xa2, 0x86, 0x48, 0x28, 0x05, 0x21, 0x7a, 0x89, 0x7f, 0xc4, 0x5d, 0xf1, 0x2d, 0x13, 0x92, 0xc7, - 0xe3, 0x63, 0x16, 0x30, 0x69, 0x54, 0x5a, 0x5a, 0xa7, 0x6c, 0x9b, 0xe9, 0xb4, 0xd9, 0xe8, 0xee, - 0x54, 0x39, 0x37, 0x10, 0x74, 0x07, 0x3d, 0xee, 0x11, 0xe6, 0x83, 0xb7, 0xc1, 0xae, 0x2a, 0x76, - 0x23, 0x9d, 0x36, 0x1f, 0xbf, 0xda, 0xaa, 0x70, 0x76, 0x38, 0xdb, 0x7f, 0x6b, 0xe8, 0xe1, 0xb5, - 0xfb, 0xa0, 0x7f, 0x8f, 0x2a, 0x84, 0x4a, 0x36, 0xca, 0xe6, 0x25, 0x1b, 0xc5, 0xa7, 0xab, 0x25, - 0xca, 0xde, 0xb4, 0xe5, 0xfd, 0x76, 0xa0, 0x07, 0x59, 0x27, 0x60, 0x79, 0x89, 0x5e, 0x28, 0xab, - 0x93, 0x23, 0x74, 0x1f, 0xed, 0xfb, 0x44, 0xc8, 0xf9, 0xa8, 0x9d, 0xb0, 0x00, 0x54, 0x93, 0xea, - 0x87, 0x9f, 0xdc, 0xed, 0xf2, 0x64, 0x0e, 0xfb, 0xbd, 0x74, 0xda, 0xdc, 0x3f, 0x5e, 0xe3, 0x38, - 0x1b, 0xe4, 0xf6, 0x44, 0x43, 0xab, 0xdd, 0xb9, 0x87, 0xe7, 0xeb, 0x67, 0x54, 0x93, 0xf3, 0x89, - 0x2a, 0xbe, 0xe9, 0x44, 0x2d, 0x6e, 0xe2, 0x62, 0x9c, 0x16, 0xb0, 0xec, 0xf5, 0x79, 0x67, 0x4d, - 0x7f, 0x0f, 0xbf, 0xf3, 0xd5, 0xb5, 0xd7, 0xf8, 0x83, 0x6d, 0xbf, 0x82, 0x6f, 0x78, 0x84, 0xed, - 0xe7, 0x93, 0x2b, 0xb3, 0x70, 0x71, 0x65, 0x16, 0x2e, 0xaf, 0xcc, 0xc2, 0x6f, 0xa9, 0xa9, 0x4d, - 0x52, 0x53, 0xbb, 0x48, 0x4d, 0xed, 0x32, 0x35, 0xb5, 0x7f, 0x52, 0x53, 0xfb, 0xe3, 0x5f, 0xb3, - 0xf0, 0x4b, 0x35, 0x2f, 0xc8, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x9f, 0xb3, 0xdd, 0xdf, - 0x07, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -33,17 +33,17 @@ // CronJob represents the configuration of a single cron job. message CronJob { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of a cron job, including the schedule. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional CronJobSpec spec = 2; // Current status of a cron job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional CronJobStatus status = 3; } @@ -51,7 +51,7 @@ // CronJobList is a collection of cron jobs. message CronJobList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -112,12 +112,12 @@ // JobTemplate describes a template for creating copies of a predefined pod. message JobTemplate { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Defines jobs that will be created from this template. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional JobTemplateSpec template = 2; } @@ -125,12 +125,12 @@ // JobTemplateSpec describes the data a Job should have when created from a template message JobTemplateSpec { // Standard object's metadata of the jobs created from this template. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of the job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional k8s.io.api.batch.v1.JobSpec spec = 2; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,12 +28,12 @@ type JobTemplate struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Defines jobs that will be created from this template. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Template JobTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` } @@ -41,12 +41,12 @@ // JobTemplateSpec describes the data a Job should have when created from a template type JobTemplateSpec struct { // Standard object's metadata of the jobs created from this template. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec batchv1.JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -58,17 +58,17 @@ type CronJob struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of a cron job, including the schedule. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec CronJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Current status of a cron job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status CronJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -80,7 +80,7 @@ metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,9 +29,9 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_CronJob = map[string]string{ "": "CronJob represents the configuration of a single cron job.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (CronJob) SwaggerDoc() map[string]string { @@ -40,7 +40,7 @@ var map_CronJobList = map[string]string{ "": "CronJobList is a collection of cron jobs.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is the list of CronJobs.", } @@ -75,8 +75,8 @@ var map_JobTemplate = map[string]string{ "": "JobTemplate describes a template for creating copies of a predefined pod.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "template": "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "template": "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (JobTemplate) SwaggerDoc() map[string]string { @@ -85,8 +85,8 @@ var map_JobTemplateSpec = map[string]string{ "": "JobTemplateSpec describes the data a Job should have when created from a template", - "metadata": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (JobTemplateSpec) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -57,7 +57,7 @@ func (in *CronJobList) DeepCopyInto(out *CronJobList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]CronJob, len(*in)) @@ -91,40 +91,24 @@ *out = *in if in.StartingDeadlineSeconds != nil { in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.Suspend != nil { in, out := &in.Suspend, &out.Suspend - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } in.JobTemplate.DeepCopyInto(&out.JobTemplate) if in.SuccessfulJobsHistoryLimit != nil { in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.FailedJobsHistoryLimit != nil { in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -149,11 +133,7 @@ } if in.LastScheduleTime != nil { in, out := &in.LastScheduleTime, &out.LastScheduleTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v2alpha1 // import "k8s.io/api/batch/v2alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,37 +14,25 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/batch/v2alpha1/generated.proto -// DO NOT EDIT! -/* - Package v2alpha1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/batch/v2alpha1/generated.proto - - It has these top-level messages: - CronJob - CronJobList - CronJobSpec - CronJobStatus - JobTemplate - JobTemplateSpec -*/ package v2alpha1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" - -import io "io" + proto "github.com/gogo/protobuf/proto" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -57,29 +45,173 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *CronJob) Reset() { *m = CronJob{} } -func (*CronJob) ProtoMessage() {} -func (*CronJob) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *CronJobList) Reset() { *m = CronJobList{} } -func (*CronJobList) ProtoMessage() {} -func (*CronJobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *CronJobSpec) Reset() { *m = CronJobSpec{} } -func (*CronJobSpec) ProtoMessage() {} -func (*CronJobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *CronJobStatus) Reset() { *m = CronJobStatus{} } -func (*CronJobStatus) ProtoMessage() {} -func (*CronJobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *JobTemplate) Reset() { *m = JobTemplate{} } -func (*JobTemplate) ProtoMessage() {} -func (*JobTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } -func (*JobTemplateSpec) ProtoMessage() {} -func (*JobTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (m *CronJob) Reset() { *m = CronJob{} } +func (*CronJob) ProtoMessage() {} +func (*CronJob) Descriptor() ([]byte, []int) { + return fileDescriptor_5495a0550fe29c46, []int{0} +} +func (m *CronJob) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJob) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJob.Merge(m, src) +} +func (m *CronJob) XXX_Size() int { + return m.Size() +} +func (m *CronJob) XXX_DiscardUnknown() { + xxx_messageInfo_CronJob.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJob proto.InternalMessageInfo + +func (m *CronJobList) Reset() { *m = CronJobList{} } +func (*CronJobList) ProtoMessage() {} +func (*CronJobList) Descriptor() ([]byte, []int) { + return fileDescriptor_5495a0550fe29c46, []int{1} +} +func (m *CronJobList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobList.Merge(m, src) +} +func (m *CronJobList) XXX_Size() int { + return m.Size() +} +func (m *CronJobList) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobList.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobList proto.InternalMessageInfo + +func (m *CronJobSpec) Reset() { *m = CronJobSpec{} } +func (*CronJobSpec) ProtoMessage() {} +func (*CronJobSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_5495a0550fe29c46, []int{2} +} +func (m *CronJobSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobSpec.Merge(m, src) +} +func (m *CronJobSpec) XXX_Size() int { + return m.Size() +} +func (m *CronJobSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobSpec proto.InternalMessageInfo + +func (m *CronJobStatus) Reset() { *m = CronJobStatus{} } +func (*CronJobStatus) ProtoMessage() {} +func (*CronJobStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_5495a0550fe29c46, []int{3} +} +func (m *CronJobStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CronJobStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CronJobStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CronJobStatus.Merge(m, src) +} +func (m *CronJobStatus) XXX_Size() int { + return m.Size() +} +func (m *CronJobStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CronJobStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CronJobStatus proto.InternalMessageInfo + +func (m *JobTemplate) Reset() { *m = JobTemplate{} } +func (*JobTemplate) ProtoMessage() {} +func (*JobTemplate) Descriptor() ([]byte, []int) { + return fileDescriptor_5495a0550fe29c46, []int{4} +} +func (m *JobTemplate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobTemplate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobTemplate) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobTemplate.Merge(m, src) +} +func (m *JobTemplate) XXX_Size() int { + return m.Size() +} +func (m *JobTemplate) XXX_DiscardUnknown() { + xxx_messageInfo_JobTemplate.DiscardUnknown(m) +} + +var xxx_messageInfo_JobTemplate proto.InternalMessageInfo + +func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } +func (*JobTemplateSpec) ProtoMessage() {} +func (*JobTemplateSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_5495a0550fe29c46, []int{5} +} +func (m *JobTemplateSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JobTemplateSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JobTemplateSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_JobTemplateSpec.Merge(m, src) +} +func (m *JobTemplateSpec) XXX_Size() int { + return m.Size() +} +func (m *JobTemplateSpec) XXX_DiscardUnknown() { + xxx_messageInfo_JobTemplateSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_JobTemplateSpec proto.InternalMessageInfo func init() { proto.RegisterType((*CronJob)(nil), "k8s.io.api.batch.v2alpha1.CronJob") @@ -89,10 +221,68 @@ proto.RegisterType((*JobTemplate)(nil), "k8s.io.api.batch.v2alpha1.JobTemplate") proto.RegisterType((*JobTemplateSpec)(nil), "k8s.io.api.batch.v2alpha1.JobTemplateSpec") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v2alpha1/generated.proto", fileDescriptor_5495a0550fe29c46) +} + +var fileDescriptor_5495a0550fe29c46 = []byte{ + // 774 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x4d, 0x6f, 0xdb, 0x36, + 0x18, 0xc7, 0x2d, 0xc7, 0x6f, 0xa1, 0x97, 0x2d, 0xd1, 0x86, 0xc4, 0xf3, 0x06, 0xd9, 0x50, 0xb0, + 0xc1, 0x18, 0x36, 0x6a, 0x09, 0x86, 0x61, 0xa7, 0x01, 0x53, 0x86, 0x36, 0x4d, 0x53, 0x34, 0x90, + 0x53, 0xa0, 0x28, 0x82, 0xa2, 0x14, 0x45, 0xdb, 0x8c, 0x25, 0x51, 0x10, 0x29, 0x03, 0xbe, 0xf5, + 0xd6, 0x6b, 0x3f, 0x49, 0x2f, 0xed, 0x87, 0x48, 0x7b, 0xca, 0x31, 0x27, 0xa3, 0x51, 0xbf, 0x45, + 0x4f, 0x85, 0x68, 0xf9, 0x25, 0x7e, 0x49, 0xd2, 0x4b, 0x6e, 0xe2, 0xa3, 0xff, 0xff, 0xc7, 0x87, + 0xcf, 0xf3, 0x90, 0xc0, 0xec, 0xfe, 0xc3, 0x21, 0x65, 0x46, 0x37, 0xb2, 0x49, 0xe8, 0x13, 0x41, + 0xb8, 0xd1, 0x23, 0xbe, 0xc3, 0x42, 0x23, 0xfd, 0x81, 0x02, 0x6a, 0xd8, 0x48, 0xe0, 0x8e, 0xd1, + 0xdb, 0x45, 0x6e, 0xd0, 0x41, 0x3b, 0x46, 0x9b, 0xf8, 0x24, 0x44, 0x82, 0x38, 0x30, 0x08, 0x99, + 0x60, 0xea, 0x8f, 0x43, 0x29, 0x44, 0x01, 0x85, 0x52, 0x0a, 0x47, 0xd2, 0xea, 0x1f, 0x6d, 0x2a, + 0x3a, 0x91, 0x0d, 0x31, 0xf3, 0x8c, 0x36, 0x6b, 0x33, 0x43, 0x3a, 0xec, 0xa8, 0x25, 0x57, 0x72, + 0x21, 0xbf, 0x86, 0xa4, 0xea, 0xf6, 0xfc, 0xa6, 0x73, 0xdb, 0x55, 0xf5, 0x29, 0x11, 0x66, 0x21, + 0x59, 0xa4, 0xf9, 0x6b, 0xa2, 0xf1, 0x10, 0xee, 0x50, 0x9f, 0x84, 0x7d, 0x23, 0xe8, 0xb6, 0x93, + 0x00, 0x37, 0x3c, 0x22, 0xd0, 0x22, 0x97, 0xb1, 0xcc, 0x15, 0x46, 0xbe, 0xa0, 0x1e, 0x99, 0x33, + 0xfc, 0x7d, 0x93, 0x81, 0xe3, 0x0e, 0xf1, 0xd0, 0xac, 0x4f, 0x7f, 0x95, 0x05, 0xc5, 0xbd, 0x90, + 0xf9, 0x07, 0xcc, 0x56, 0x5f, 0x80, 0x52, 0x92, 0x8f, 0x83, 0x04, 0xaa, 0x28, 0x75, 0xa5, 0x51, + 0xde, 0xfd, 0x13, 0x4e, 0x0a, 0x3a, 0xc6, 0xc2, 0xa0, 0xdb, 0x4e, 0x02, 0x1c, 0x26, 0x6a, 0xd8, + 0xdb, 0x81, 0x8f, 0xed, 0x53, 0x82, 0xc5, 0x23, 0x22, 0x90, 0xa9, 0x9e, 0x0d, 0x6a, 0x99, 0x78, + 0x50, 0x03, 0x93, 0x98, 0x35, 0xa6, 0xaa, 0xfb, 0x20, 0xc7, 0x03, 0x82, 0x2b, 0x59, 0x49, 0xff, + 0x15, 0x2e, 0x6d, 0x17, 0x4c, 0x73, 0x6a, 0x06, 0x04, 0x9b, 0xdf, 0xa4, 0xcc, 0x5c, 0xb2, 0xb2, + 0x24, 0x41, 0x3d, 0x02, 0x05, 0x2e, 0x90, 0x88, 0x78, 0x65, 0x45, 0xb2, 0x1a, 0xb7, 0x60, 0x49, + 0xbd, 0xf9, 0x6d, 0x4a, 0x2b, 0x0c, 0xd7, 0x56, 0xca, 0xd1, 0xdf, 0x29, 0xa0, 0x9c, 0x2a, 0x0f, + 0x29, 0x17, 0xea, 0xc9, 0x5c, 0x35, 0xe0, 0xed, 0xaa, 0x91, 0xb8, 0x65, 0x2d, 0xd6, 0xd3, 0x9d, + 0x4a, 0xa3, 0xc8, 0x54, 0x25, 0xee, 0x83, 0x3c, 0x15, 0xc4, 0xe3, 0x95, 0x6c, 0x7d, 0xa5, 0x51, + 0xde, 0xd5, 0x6f, 0x4e, 0xdf, 0x5c, 0x4b, 0x71, 0xf9, 0x07, 0x89, 0xd1, 0x1a, 0xfa, 0xf5, 0x37, + 0xb9, 0x71, 0xda, 0x49, 0x79, 0xd4, 0xdf, 0x41, 0x29, 0x69, 0xb5, 0x13, 0xb9, 0x44, 0xa6, 0xbd, + 0x3a, 0x49, 0xa3, 0x99, 0xc6, 0xad, 0xb1, 0x42, 0x7d, 0x02, 0xb6, 0xb8, 0x40, 0xa1, 0xa0, 0x7e, + 0xfb, 0x7f, 0x82, 0x1c, 0x97, 0xfa, 0xa4, 0x49, 0x30, 0xf3, 0x1d, 0x2e, 0x7b, 0xb4, 0x62, 0xfe, + 0x14, 0x0f, 0x6a, 0x5b, 0xcd, 0xc5, 0x12, 0x6b, 0x99, 0x57, 0x3d, 0x01, 0x1b, 0x98, 0xf9, 0x38, + 0x0a, 0x43, 0xe2, 0xe3, 0xfe, 0x11, 0x73, 0x29, 0xee, 0xcb, 0x46, 0xad, 0x9a, 0x30, 0xcd, 0x66, + 0x63, 0x6f, 0x56, 0xf0, 0x79, 0x51, 0xd0, 0x9a, 0x07, 0xa9, 0xbf, 0x80, 0x22, 0x8f, 0x78, 0x40, + 0x7c, 0xa7, 0x92, 0xab, 0x2b, 0x8d, 0x92, 0x59, 0x8e, 0x07, 0xb5, 0x62, 0x73, 0x18, 0xb2, 0x46, + 0xff, 0x54, 0x04, 0xca, 0xa7, 0xcc, 0x3e, 0x26, 0x5e, 0xe0, 0x22, 0x41, 0x2a, 0x79, 0xd9, 0xc3, + 0xdf, 0xae, 0x29, 0xf4, 0xc1, 0x44, 0x2d, 0xe7, 0xee, 0xfb, 0x34, 0xd5, 0xf2, 0xd4, 0x0f, 0x6b, + 0x9a, 0xa9, 0x3e, 0x07, 0x55, 0x1e, 0x61, 0x4c, 0x38, 0x6f, 0x45, 0xee, 0x01, 0xb3, 0xf9, 0x3e, + 0xe5, 0x82, 0x85, 0xfd, 0x43, 0xea, 0x51, 0x51, 0x29, 0xd4, 0x95, 0x46, 0xde, 0xd4, 0xe2, 0x41, + 0xad, 0xda, 0x5c, 0xaa, 0xb2, 0xae, 0x21, 0xa8, 0x16, 0xd8, 0x6c, 0x21, 0xea, 0x12, 0x67, 0x8e, + 0x5d, 0x94, 0xec, 0x6a, 0x3c, 0xa8, 0x6d, 0xde, 0x5b, 0xa8, 0xb0, 0x96, 0x38, 0xf5, 0x0f, 0x0a, + 0x58, 0xbb, 0x72, 0x23, 0xd4, 0x87, 0xa0, 0x80, 0xb0, 0xa0, 0xbd, 0x64, 0x60, 0x92, 0x61, 0xdc, + 0x9e, 0xae, 0x51, 0xf2, 0xae, 0x4d, 0xee, 0xb8, 0x45, 0x5a, 0x24, 0x69, 0x05, 0x99, 0x5c, 0xa3, + 0xff, 0xa4, 0xd5, 0x4a, 0x11, 0xaa, 0x0b, 0xd6, 0x5d, 0xc4, 0xc5, 0x68, 0xd6, 0x8e, 0xa9, 0x47, + 0x64, 0x97, 0xae, 0x96, 0xfe, 0x9a, 0xeb, 0x93, 0x38, 0xcc, 0x1f, 0xe2, 0x41, 0x6d, 0xfd, 0x70, + 0x86, 0x63, 0xcd, 0x91, 0xf5, 0xf7, 0x0a, 0x98, 0xee, 0xce, 0x1d, 0x3c, 0x61, 0x4f, 0x41, 0x49, + 0x8c, 0x46, 0x2a, 0xfb, 0xd5, 0x23, 0x35, 0xbe, 0x8b, 0xe3, 0x79, 0x1a, 0xd3, 0xf4, 0xb7, 0x0a, + 0xf8, 0x6e, 0x46, 0x7f, 0x07, 0xe7, 0xf9, 0xf7, 0xca, 0x93, 0xfc, 0xf3, 0x82, 0xb3, 0xc8, 0x53, + 0x2c, 0x7b, 0x88, 0x4d, 0x78, 0x76, 0xa9, 0x65, 0xce, 0x2f, 0xb5, 0xcc, 0xc5, 0xa5, 0x96, 0x79, + 0x19, 0x6b, 0xca, 0x59, 0xac, 0x29, 0xe7, 0xb1, 0xa6, 0x5c, 0xc4, 0x9a, 0xf2, 0x31, 0xd6, 0x94, + 0xd7, 0x9f, 0xb4, 0xcc, 0xb3, 0xd2, 0xa8, 0x22, 0x5f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x20, 0x1c, + 0xcf, 0x94, 0xe7, 0x07, 0x00, 0x00, +} + func (m *CronJob) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -100,41 +290,52 @@ } func (m *CronJob) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJob) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CronJobList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -142,37 +343,46 @@ } func (m *CronJobList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJobList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n4, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CronJobSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -180,58 +390,67 @@ } func (m *CronJobSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJobSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) - i += copy(dAtA[i:], m.Schedule) - if m.StartingDeadlineSeconds != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) + if m.FailedJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i-- + dAtA[i] = 0x38 } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) - i += copy(dAtA[i:], m.ConcurrencyPolicy) + if m.SuccessfulJobsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + { + size, err := m.JobTemplate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a if m.Suspend != nil { - dAtA[i] = 0x20 - i++ + i-- if *m.Suspend { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.JobTemplate.Size())) - n5, err := m.JobTemplate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - if m.SuccessfulJobsHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulJobsHistoryLimit)) + i-- + dAtA[i] = 0x20 } - if m.FailedJobsHistoryLimit != nil { - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedJobsHistoryLimit)) + i -= len(m.ConcurrencyPolicy) + copy(dAtA[i:], m.ConcurrencyPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConcurrencyPolicy))) + i-- + dAtA[i] = 0x1a + if m.StartingDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.StartingDeadlineSeconds)) + i-- + dAtA[i] = 0x10 } - return i, nil + i -= len(m.Schedule) + copy(dAtA[i:], m.Schedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CronJobStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -239,39 +458,48 @@ } func (m *CronJobStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CronJobStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Active) > 0 { - for _, msg := range m.Active { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.LastScheduleTime != nil { + { + size, err := m.LastScheduleTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - } - if m.LastScheduleTime != nil { + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastScheduleTime.Size())) - n6, err := m.LastScheduleTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + } + if len(m.Active) > 0 { + for iNdEx := len(m.Active) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Active[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i += n6 } - return i, nil + return len(dAtA) - i, nil } func (m *JobTemplate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -279,33 +507,42 @@ } func (m *JobTemplate) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n8, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *JobTemplateSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -313,57 +550,53 @@ } func (m *JobTemplateSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JobTemplateSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n9, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n10, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *CronJob) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -376,6 +609,9 @@ } func (m *CronJobList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -390,6 +626,9 @@ } func (m *CronJobSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Schedule) @@ -414,6 +653,9 @@ } func (m *CronJobStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Active) > 0 { @@ -430,6 +672,9 @@ } func (m *JobTemplate) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -440,6 +685,9 @@ } func (m *JobTemplateSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -450,14 +698,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -467,7 +708,7 @@ return "nil" } s := strings.Join([]string{`&CronJob{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CronJobSpec", "CronJobSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CronJobStatus", "CronJobStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -478,9 +719,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]CronJob{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CronJob", "CronJob", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&CronJobList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CronJob", "CronJob", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -505,9 +751,14 @@ if this == nil { return "nil" } + repeatedStringForActive := "[]ObjectReference{" + for _, f := range this.Active { + repeatedStringForActive += fmt.Sprintf("%v", f) + "," + } + repeatedStringForActive += "}" s := strings.Join([]string{`&CronJobStatus{`, - `Active:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Active), "ObjectReference", "k8s_io_api_core_v1.ObjectReference", 1), `&`, ``, 1) + `,`, - `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, + `Active:` + repeatedStringForActive + `,`, + `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "v1.Time", 1) + `,`, `}`, }, "") return s @@ -517,7 +768,7 @@ return "nil" } s := strings.Join([]string{`&JobTemplate{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Template:` + strings.Replace(strings.Replace(this.Template.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -528,8 +779,8 @@ return "nil" } s := strings.Join([]string{`&JobTemplateSpec{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "k8s_io_api_batch_v1.JobSpec", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Spec), "JobSpec", "v12.JobSpec", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -557,7 +808,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -585,7 +836,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -594,6 +845,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -615,7 +869,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -624,6 +878,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -645,7 +902,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -654,6 +911,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -670,6 +930,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -697,7 +960,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -725,7 +988,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -734,6 +997,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -755,7 +1021,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -764,6 +1030,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -781,6 +1050,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -808,7 +1080,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -836,7 +1108,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -846,6 +1118,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -865,7 +1140,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -885,7 +1160,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -895,6 +1170,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -914,7 +1192,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -935,7 +1213,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -944,6 +1222,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -965,7 +1246,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -985,7 +1266,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1000,6 +1281,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1027,7 +1311,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1055,7 +1339,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1064,10 +1348,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Active = append(m.Active, k8s_io_api_core_v1.ObjectReference{}) + m.Active = append(m.Active, v11.ObjectReference{}) if err := m.Active[len(m.Active)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1086,7 +1373,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1095,11 +1382,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.LastScheduleTime == nil { - m.LastScheduleTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.LastScheduleTime = &v1.Time{} } if err := m.LastScheduleTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1114,6 +1404,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1141,7 +1434,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1169,7 +1462,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1178,6 +1471,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1199,7 +1495,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1208,6 +1504,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1224,6 +1523,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1251,7 +1553,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1279,7 +1581,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1288,6 +1590,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1309,7 +1614,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1318,6 +1623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1334,6 +1642,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1400,10 +1711,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1432,6 +1746,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1450,60 +1767,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/batch/v2alpha1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 774 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x4d, 0x6f, 0xdb, 0x36, - 0x18, 0xc7, 0x2d, 0xc7, 0x6f, 0xa1, 0x97, 0x2d, 0xd1, 0x86, 0xc4, 0xf3, 0x06, 0xd9, 0x50, 0xb0, - 0xc1, 0x18, 0x36, 0x6a, 0x09, 0x86, 0x61, 0xa7, 0x01, 0x53, 0x86, 0x36, 0x4d, 0x53, 0x34, 0x90, - 0x53, 0xa0, 0x28, 0x82, 0xa2, 0x14, 0x45, 0xdb, 0x8c, 0x25, 0x51, 0x10, 0x29, 0x03, 0xbe, 0xf5, - 0xd6, 0x6b, 0x3f, 0x49, 0x2f, 0xed, 0x87, 0x48, 0x7b, 0xca, 0x31, 0x27, 0xa3, 0x51, 0xbf, 0x45, - 0x4f, 0x85, 0x68, 0xf9, 0x25, 0x7e, 0x49, 0xd2, 0x4b, 0x6e, 0xe2, 0xa3, 0xff, 0xff, 0xc7, 0x87, - 0xcf, 0xf3, 0x90, 0xc0, 0xec, 0xfe, 0xc3, 0x21, 0x65, 0x46, 0x37, 0xb2, 0x49, 0xe8, 0x13, 0x41, - 0xb8, 0xd1, 0x23, 0xbe, 0xc3, 0x42, 0x23, 0xfd, 0x81, 0x02, 0x6a, 0xd8, 0x48, 0xe0, 0x8e, 0xd1, - 0xdb, 0x45, 0x6e, 0xd0, 0x41, 0x3b, 0x46, 0x9b, 0xf8, 0x24, 0x44, 0x82, 0x38, 0x30, 0x08, 0x99, - 0x60, 0xea, 0x8f, 0x43, 0x29, 0x44, 0x01, 0x85, 0x52, 0x0a, 0x47, 0xd2, 0xea, 0x1f, 0x6d, 0x2a, - 0x3a, 0x91, 0x0d, 0x31, 0xf3, 0x8c, 0x36, 0x6b, 0x33, 0x43, 0x3a, 0xec, 0xa8, 0x25, 0x57, 0x72, - 0x21, 0xbf, 0x86, 0xa4, 0xea, 0xf6, 0xfc, 0xa6, 0x73, 0xdb, 0x55, 0xf5, 0x29, 0x11, 0x66, 0x21, - 0x59, 0xa4, 0xf9, 0x6b, 0xa2, 0xf1, 0x10, 0xee, 0x50, 0x9f, 0x84, 0x7d, 0x23, 0xe8, 0xb6, 0x93, - 0x00, 0x37, 0x3c, 0x22, 0xd0, 0x22, 0x97, 0xb1, 0xcc, 0x15, 0x46, 0xbe, 0xa0, 0x1e, 0x99, 0x33, - 0xfc, 0x7d, 0x93, 0x81, 0xe3, 0x0e, 0xf1, 0xd0, 0xac, 0x4f, 0x7f, 0x95, 0x05, 0xc5, 0xbd, 0x90, - 0xf9, 0x07, 0xcc, 0x56, 0x5f, 0x80, 0x52, 0x92, 0x8f, 0x83, 0x04, 0xaa, 0x28, 0x75, 0xa5, 0x51, - 0xde, 0xfd, 0x13, 0x4e, 0x0a, 0x3a, 0xc6, 0xc2, 0xa0, 0xdb, 0x4e, 0x02, 0x1c, 0x26, 0x6a, 0xd8, - 0xdb, 0x81, 0x8f, 0xed, 0x53, 0x82, 0xc5, 0x23, 0x22, 0x90, 0xa9, 0x9e, 0x0d, 0x6a, 0x99, 0x78, - 0x50, 0x03, 0x93, 0x98, 0x35, 0xa6, 0xaa, 0xfb, 0x20, 0xc7, 0x03, 0x82, 0x2b, 0x59, 0x49, 0xff, - 0x15, 0x2e, 0x6d, 0x17, 0x4c, 0x73, 0x6a, 0x06, 0x04, 0x9b, 0xdf, 0xa4, 0xcc, 0x5c, 0xb2, 0xb2, - 0x24, 0x41, 0x3d, 0x02, 0x05, 0x2e, 0x90, 0x88, 0x78, 0x65, 0x45, 0xb2, 0x1a, 0xb7, 0x60, 0x49, - 0xbd, 0xf9, 0x6d, 0x4a, 0x2b, 0x0c, 0xd7, 0x56, 0xca, 0xd1, 0xdf, 0x29, 0xa0, 0x9c, 0x2a, 0x0f, - 0x29, 0x17, 0xea, 0xc9, 0x5c, 0x35, 0xe0, 0xed, 0xaa, 0x91, 0xb8, 0x65, 0x2d, 0xd6, 0xd3, 0x9d, - 0x4a, 0xa3, 0xc8, 0x54, 0x25, 0xee, 0x83, 0x3c, 0x15, 0xc4, 0xe3, 0x95, 0x6c, 0x7d, 0xa5, 0x51, - 0xde, 0xd5, 0x6f, 0x4e, 0xdf, 0x5c, 0x4b, 0x71, 0xf9, 0x07, 0x89, 0xd1, 0x1a, 0xfa, 0xf5, 0x37, - 0xb9, 0x71, 0xda, 0x49, 0x79, 0xd4, 0xdf, 0x41, 0x29, 0x69, 0xb5, 0x13, 0xb9, 0x44, 0xa6, 0xbd, - 0x3a, 0x49, 0xa3, 0x99, 0xc6, 0xad, 0xb1, 0x42, 0x7d, 0x02, 0xb6, 0xb8, 0x40, 0xa1, 0xa0, 0x7e, - 0xfb, 0x7f, 0x82, 0x1c, 0x97, 0xfa, 0xa4, 0x49, 0x30, 0xf3, 0x1d, 0x2e, 0x7b, 0xb4, 0x62, 0xfe, - 0x14, 0x0f, 0x6a, 0x5b, 0xcd, 0xc5, 0x12, 0x6b, 0x99, 0x57, 0x3d, 0x01, 0x1b, 0x98, 0xf9, 0x38, - 0x0a, 0x43, 0xe2, 0xe3, 0xfe, 0x11, 0x73, 0x29, 0xee, 0xcb, 0x46, 0xad, 0x9a, 0x30, 0xcd, 0x66, - 0x63, 0x6f, 0x56, 0xf0, 0x79, 0x51, 0xd0, 0x9a, 0x07, 0xa9, 0xbf, 0x80, 0x22, 0x8f, 0x78, 0x40, - 0x7c, 0xa7, 0x92, 0xab, 0x2b, 0x8d, 0x92, 0x59, 0x8e, 0x07, 0xb5, 0x62, 0x73, 0x18, 0xb2, 0x46, - 0xff, 0x54, 0x04, 0xca, 0xa7, 0xcc, 0x3e, 0x26, 0x5e, 0xe0, 0x22, 0x41, 0x2a, 0x79, 0xd9, 0xc3, - 0xdf, 0xae, 0x29, 0xf4, 0xc1, 0x44, 0x2d, 0xe7, 0xee, 0xfb, 0x34, 0xd5, 0xf2, 0xd4, 0x0f, 0x6b, - 0x9a, 0xa9, 0x3e, 0x07, 0x55, 0x1e, 0x61, 0x4c, 0x38, 0x6f, 0x45, 0xee, 0x01, 0xb3, 0xf9, 0x3e, - 0xe5, 0x82, 0x85, 0xfd, 0x43, 0xea, 0x51, 0x51, 0x29, 0xd4, 0x95, 0x46, 0xde, 0xd4, 0xe2, 0x41, - 0xad, 0xda, 0x5c, 0xaa, 0xb2, 0xae, 0x21, 0xa8, 0x16, 0xd8, 0x6c, 0x21, 0xea, 0x12, 0x67, 0x8e, - 0x5d, 0x94, 0xec, 0x6a, 0x3c, 0xa8, 0x6d, 0xde, 0x5b, 0xa8, 0xb0, 0x96, 0x38, 0xf5, 0x0f, 0x0a, - 0x58, 0xbb, 0x72, 0x23, 0xd4, 0x87, 0xa0, 0x80, 0xb0, 0xa0, 0xbd, 0x64, 0x60, 0x92, 0x61, 0xdc, - 0x9e, 0xae, 0x51, 0xf2, 0xae, 0x4d, 0xee, 0xb8, 0x45, 0x5a, 0x24, 0x69, 0x05, 0x99, 0x5c, 0xa3, - 0xff, 0xa4, 0xd5, 0x4a, 0x11, 0xaa, 0x0b, 0xd6, 0x5d, 0xc4, 0xc5, 0x68, 0xd6, 0x8e, 0xa9, 0x47, - 0x64, 0x97, 0xae, 0x96, 0xfe, 0x9a, 0xeb, 0x93, 0x38, 0xcc, 0x1f, 0xe2, 0x41, 0x6d, 0xfd, 0x70, - 0x86, 0x63, 0xcd, 0x91, 0xf5, 0xf7, 0x0a, 0x98, 0xee, 0xce, 0x1d, 0x3c, 0x61, 0x4f, 0x41, 0x49, - 0x8c, 0x46, 0x2a, 0xfb, 0xd5, 0x23, 0x35, 0xbe, 0x8b, 0xe3, 0x79, 0x1a, 0xd3, 0xf4, 0xb7, 0x0a, - 0xf8, 0x6e, 0x46, 0x7f, 0x07, 0xe7, 0xf9, 0xf7, 0xca, 0x93, 0xfc, 0xf3, 0x82, 0xb3, 0xc8, 0x53, - 0x2c, 0x7b, 0x88, 0x4d, 0x78, 0x76, 0xa9, 0x65, 0xce, 0x2f, 0xb5, 0xcc, 0xc5, 0xa5, 0x96, 0x79, - 0x19, 0x6b, 0xca, 0x59, 0xac, 0x29, 0xe7, 0xb1, 0xa6, 0x5c, 0xc4, 0x9a, 0xf2, 0x31, 0xd6, 0x94, - 0xd7, 0x9f, 0xb4, 0xcc, 0xb3, 0xd2, 0xa8, 0x22, 0x5f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x20, 0x1c, - 0xcf, 0x94, 0xe7, 0x07, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -33,17 +33,17 @@ // CronJob represents the configuration of a single cron job. message CronJob { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of a cron job, including the schedule. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional CronJobSpec spec = 2; // Current status of a cron job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional CronJobStatus status = 3; } @@ -51,7 +51,7 @@ // CronJobList is a collection of cron jobs. message CronJobList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -110,12 +110,12 @@ // JobTemplate describes a template for creating copies of a predefined pod. message JobTemplate { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Defines jobs that will be created from this template. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional JobTemplateSpec template = 2; } @@ -123,12 +123,12 @@ // JobTemplateSpec describes the data a Job should have when created from a template message JobTemplateSpec { // Standard object's metadata of the jobs created from this template. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of the job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional k8s.io.api.batch.v1.JobSpec spec = 2; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,12 +28,12 @@ type JobTemplate struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Defines jobs that will be created from this template. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Template JobTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` } @@ -41,12 +41,12 @@ // JobTemplateSpec describes the data a Job should have when created from a template type JobTemplateSpec struct { // Standard object's metadata of the jobs created from this template. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec batchv1.JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -58,17 +58,17 @@ type CronJob struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of a cron job, including the schedule. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec CronJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Current status of a cron job. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status CronJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -80,7 +80,7 @@ metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,9 +29,9 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_CronJob = map[string]string{ "": "CronJob represents the configuration of a single cron job.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (CronJob) SwaggerDoc() map[string]string { @@ -40,7 +40,7 @@ var map_CronJobList = map[string]string{ "": "CronJobList is a collection of cron jobs.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is the list of CronJobs.", } @@ -75,8 +75,8 @@ var map_JobTemplate = map[string]string{ "": "JobTemplate describes a template for creating copies of a predefined pod.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "template": "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "template": "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (JobTemplate) SwaggerDoc() map[string]string { @@ -85,8 +85,8 @@ var map_JobTemplateSpec = map[string]string{ "": "JobTemplateSpec describes the data a Job should have when created from a template", - "metadata": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (JobTemplateSpec) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/batch/v2alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -57,7 +57,7 @@ func (in *CronJobList) DeepCopyInto(out *CronJobList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]CronJob, len(*in)) @@ -91,40 +91,24 @@ *out = *in if in.StartingDeadlineSeconds != nil { in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.Suspend != nil { in, out := &in.Suspend, &out.Suspend - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } in.JobTemplate.DeepCopyInto(&out.JobTemplate) if in.SuccessfulJobsHistoryLimit != nil { in, out := &in.SuccessfulJobsHistoryLimit, &out.SuccessfulJobsHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.FailedJobsHistoryLimit != nil { in, out := &in.FailedJobsHistoryLimit, &out.FailedJobsHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -149,11 +133,7 @@ } if in.LastScheduleTime != nil { in, out := &in.LastScheduleTime, &out.LastScheduleTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/certificates/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/certificates/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/certificates/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/certificates/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=certificates.k8s.io + package v1beta1 // import "k8s.io/api/certificates/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,36 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/certificates/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/certificates/v1beta1/generated.proto - - It has these top-level messages: - CertificateSigningRequest - CertificateSigningRequestCondition - CertificateSigningRequestList - CertificateSigningRequestSpec - CertificateSigningRequestStatus - ExtraValue -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -59,49 +47,244 @@ func (m *CertificateSigningRequest) Reset() { *m = CertificateSigningRequest{} } func (*CertificateSigningRequest) ProtoMessage() {} func (*CertificateSigningRequest) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{0} + return fileDescriptor_09d156762b8218ef, []int{0} +} +func (m *CertificateSigningRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CertificateSigningRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CertificateSigningRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CertificateSigningRequest.Merge(m, src) } +func (m *CertificateSigningRequest) XXX_Size() int { + return m.Size() +} +func (m *CertificateSigningRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CertificateSigningRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CertificateSigningRequest proto.InternalMessageInfo func (m *CertificateSigningRequestCondition) Reset() { *m = CertificateSigningRequestCondition{} } func (*CertificateSigningRequestCondition) ProtoMessage() {} func (*CertificateSigningRequestCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} + return fileDescriptor_09d156762b8218ef, []int{1} +} +func (m *CertificateSigningRequestCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CertificateSigningRequestCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CertificateSigningRequestCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_CertificateSigningRequestCondition.Merge(m, src) +} +func (m *CertificateSigningRequestCondition) XXX_Size() int { + return m.Size() } +func (m *CertificateSigningRequestCondition) XXX_DiscardUnknown() { + xxx_messageInfo_CertificateSigningRequestCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_CertificateSigningRequestCondition proto.InternalMessageInfo func (m *CertificateSigningRequestList) Reset() { *m = CertificateSigningRequestList{} } func (*CertificateSigningRequestList) ProtoMessage() {} func (*CertificateSigningRequestList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{2} + return fileDescriptor_09d156762b8218ef, []int{2} +} +func (m *CertificateSigningRequestList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CertificateSigningRequestList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CertificateSigningRequestList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CertificateSigningRequestList.Merge(m, src) +} +func (m *CertificateSigningRequestList) XXX_Size() int { + return m.Size() +} +func (m *CertificateSigningRequestList) XXX_DiscardUnknown() { + xxx_messageInfo_CertificateSigningRequestList.DiscardUnknown(m) } +var xxx_messageInfo_CertificateSigningRequestList proto.InternalMessageInfo + func (m *CertificateSigningRequestSpec) Reset() { *m = CertificateSigningRequestSpec{} } func (*CertificateSigningRequestSpec) ProtoMessage() {} func (*CertificateSigningRequestSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{3} + return fileDescriptor_09d156762b8218ef, []int{3} +} +func (m *CertificateSigningRequestSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CertificateSigningRequestSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CertificateSigningRequestSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CertificateSigningRequestSpec.Merge(m, src) +} +func (m *CertificateSigningRequestSpec) XXX_Size() int { + return m.Size() } +func (m *CertificateSigningRequestSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CertificateSigningRequestSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CertificateSigningRequestSpec proto.InternalMessageInfo func (m *CertificateSigningRequestStatus) Reset() { *m = CertificateSigningRequestStatus{} } func (*CertificateSigningRequestStatus) ProtoMessage() {} func (*CertificateSigningRequestStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{4} + return fileDescriptor_09d156762b8218ef, []int{4} +} +func (m *CertificateSigningRequestStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CertificateSigningRequestStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CertificateSigningRequestStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CertificateSigningRequestStatus.Merge(m, src) +} +func (m *CertificateSigningRequestStatus) XXX_Size() int { + return m.Size() +} +func (m *CertificateSigningRequestStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CertificateSigningRequestStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CertificateSigningRequestStatus proto.InternalMessageInfo + +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { + return fileDescriptor_09d156762b8218ef, []int{5} +} +func (m *ExtraValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExtraValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExtraValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraValue.Merge(m, src) +} +func (m *ExtraValue) XXX_Size() int { + return m.Size() +} +func (m *ExtraValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExtraValue.DiscardUnknown(m) } -func (m *ExtraValue) Reset() { *m = ExtraValue{} } -func (*ExtraValue) ProtoMessage() {} -func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +var xxx_messageInfo_ExtraValue proto.InternalMessageInfo func init() { proto.RegisterType((*CertificateSigningRequest)(nil), "k8s.io.api.certificates.v1beta1.CertificateSigningRequest") proto.RegisterType((*CertificateSigningRequestCondition)(nil), "k8s.io.api.certificates.v1beta1.CertificateSigningRequestCondition") proto.RegisterType((*CertificateSigningRequestList)(nil), "k8s.io.api.certificates.v1beta1.CertificateSigningRequestList") proto.RegisterType((*CertificateSigningRequestSpec)(nil), "k8s.io.api.certificates.v1beta1.CertificateSigningRequestSpec") + proto.RegisterMapType((map[string]ExtraValue)(nil), "k8s.io.api.certificates.v1beta1.CertificateSigningRequestSpec.ExtraEntry") proto.RegisterType((*CertificateSigningRequestStatus)(nil), "k8s.io.api.certificates.v1beta1.CertificateSigningRequestStatus") proto.RegisterType((*ExtraValue)(nil), "k8s.io.api.certificates.v1beta1.ExtraValue") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/certificates/v1beta1/generated.proto", fileDescriptor_09d156762b8218ef) +} + +var fileDescriptor_09d156762b8218ef = []byte{ + // 805 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4b, 0x8f, 0x1b, 0x45, + 0x10, 0xf6, 0xf8, 0xb5, 0x76, 0x7b, 0xd9, 0x44, 0x2d, 0x14, 0x0d, 0x2b, 0x65, 0x66, 0x35, 0x02, + 0xb4, 0x3c, 0xd2, 0xc3, 0x46, 0x08, 0x56, 0x7b, 0x40, 0x30, 0x4b, 0x04, 0x2b, 0x12, 0x21, 0x75, + 0x62, 0x0e, 0x08, 0x89, 0xb4, 0xc7, 0x95, 0x71, 0xc7, 0x99, 0x07, 0xd3, 0x3d, 0x06, 0xdf, 0xf2, + 0x13, 0x38, 0x72, 0x41, 0xe2, 0x97, 0x70, 0x5e, 0x0e, 0x48, 0x39, 0xe6, 0x80, 0x2c, 0xd6, 0xfc, + 0x8b, 0x9c, 0x50, 0xf7, 0xb4, 0x3d, 0xc6, 0x2b, 0xe3, 0x28, 0x7b, 0x9b, 0xfa, 0xaa, 0xbe, 0xaf, + 0x1e, 0x5d, 0x35, 0xe8, 0xcb, 0xf1, 0xb1, 0x20, 0x3c, 0xf5, 0xc7, 0xc5, 0x00, 0xf2, 0x04, 0x24, + 0x08, 0x7f, 0x02, 0xc9, 0x30, 0xcd, 0x7d, 0xe3, 0x60, 0x19, 0xf7, 0x43, 0xc8, 0x25, 0x7f, 0xc4, + 0x43, 0xa6, 0xdd, 0x47, 0x03, 0x90, 0xec, 0xc8, 0x8f, 0x20, 0x81, 0x9c, 0x49, 0x18, 0x92, 0x2c, + 0x4f, 0x65, 0x8a, 0xdd, 0x92, 0x40, 0x58, 0xc6, 0xc9, 0x2a, 0x81, 0x18, 0xc2, 0xfe, 0xad, 0x88, + 0xcb, 0x51, 0x31, 0x20, 0x61, 0x1a, 0xfb, 0x51, 0x1a, 0xa5, 0xbe, 0xe6, 0x0d, 0x8a, 0x47, 0xda, + 0xd2, 0x86, 0xfe, 0x2a, 0xf5, 0xf6, 0x3f, 0xac, 0x0a, 0x88, 0x59, 0x38, 0xe2, 0x09, 0xe4, 0x53, + 0x3f, 0x1b, 0x47, 0x0a, 0x10, 0x7e, 0x0c, 0x92, 0xf9, 0x93, 0x4b, 0x55, 0xec, 0xfb, 0x9b, 0x58, + 0x79, 0x91, 0x48, 0x1e, 0xc3, 0x25, 0xc2, 0x47, 0xdb, 0x08, 0x22, 0x1c, 0x41, 0xcc, 0xd6, 0x79, + 0xde, 0x1f, 0x75, 0xf4, 0xc6, 0x69, 0xd5, 0xe6, 0x7d, 0x1e, 0x25, 0x3c, 0x89, 0x28, 0xfc, 0x50, + 0x80, 0x90, 0xf8, 0x21, 0xea, 0xa8, 0x0a, 0x87, 0x4c, 0x32, 0xdb, 0x3a, 0xb0, 0x0e, 0x7b, 0xb7, + 0x3f, 0x20, 0xd5, 0x7c, 0x96, 0x89, 0x48, 0x36, 0x8e, 0x14, 0x20, 0x88, 0x8a, 0x26, 0x93, 0x23, + 0xf2, 0xf5, 0xe0, 0x31, 0x84, 0xf2, 0x1e, 0x48, 0x16, 0xe0, 0xf3, 0x99, 0x5b, 0x9b, 0xcf, 0x5c, + 0x54, 0x61, 0x74, 0xa9, 0x8a, 0x1f, 0xa2, 0xa6, 0xc8, 0x20, 0xb4, 0xeb, 0x5a, 0xfd, 0x13, 0xb2, + 0x65, 0xfa, 0x64, 0x63, 0xad, 0xf7, 0x33, 0x08, 0x83, 0x5d, 0x93, 0xab, 0xa9, 0x2c, 0xaa, 0x95, + 0xf1, 0x08, 0xb5, 0x85, 0x64, 0xb2, 0x10, 0x76, 0x43, 0xe7, 0xf8, 0xf4, 0x0a, 0x39, 0xb4, 0x4e, + 0xb0, 0x67, 0xb2, 0xb4, 0x4b, 0x9b, 0x1a, 0x7d, 0xef, 0xd7, 0x3a, 0xf2, 0x36, 0x72, 0x4f, 0xd3, + 0x64, 0xc8, 0x25, 0x4f, 0x13, 0x7c, 0x8c, 0x9a, 0x72, 0x9a, 0x81, 0x1e, 0x68, 0x37, 0x78, 0x73, + 0x51, 0xf2, 0x83, 0x69, 0x06, 0x2f, 0x66, 0xee, 0xeb, 0xeb, 0xf1, 0x0a, 0xa7, 0x9a, 0x81, 0xdf, + 0x46, 0xed, 0x1c, 0x98, 0x48, 0x13, 0x3d, 0xae, 0x6e, 0x55, 0x08, 0xd5, 0x28, 0x35, 0x5e, 0xfc, + 0x0e, 0xda, 0x89, 0x41, 0x08, 0x16, 0x81, 0xee, 0xb9, 0x1b, 0x5c, 0x33, 0x81, 0x3b, 0xf7, 0x4a, + 0x98, 0x2e, 0xfc, 0xf8, 0x31, 0xda, 0x7b, 0xc2, 0x84, 0xec, 0x67, 0x43, 0x26, 0xe1, 0x01, 0x8f, + 0xc1, 0x6e, 0xea, 0x29, 0xbd, 0xfb, 0x72, 0xef, 0xac, 0x18, 0xc1, 0x0d, 0xa3, 0xbe, 0x77, 0xf7, + 0x3f, 0x4a, 0x74, 0x4d, 0xd9, 0x9b, 0x59, 0xe8, 0xe6, 0xc6, 0xf9, 0xdc, 0xe5, 0x42, 0xe2, 0xef, + 0x2e, 0xed, 0x1b, 0x79, 0xb9, 0x3a, 0x14, 0x5b, 0x6f, 0xdb, 0x75, 0x53, 0x4b, 0x67, 0x81, 0xac, + 0xec, 0xda, 0xf7, 0xa8, 0xc5, 0x25, 0xc4, 0xc2, 0xae, 0x1f, 0x34, 0x0e, 0x7b, 0xb7, 0x4f, 0x5e, + 0x7d, 0x11, 0x82, 0xd7, 0x4c, 0x9a, 0xd6, 0x99, 0x12, 0xa4, 0xa5, 0xae, 0xf7, 0x7b, 0xe3, 0x7f, + 0x1a, 0x54, 0x2b, 0x89, 0xdf, 0x42, 0x3b, 0x79, 0x69, 0xea, 0xfe, 0x76, 0x83, 0x9e, 0x7a, 0x15, + 0x13, 0x41, 0x17, 0x3e, 0x4c, 0x50, 0xbb, 0x50, 0xcf, 0x23, 0xec, 0xd6, 0x41, 0xe3, 0xb0, 0x1b, + 0xdc, 0x50, 0x8f, 0xdc, 0xd7, 0xc8, 0x8b, 0x99, 0xdb, 0xf9, 0x0a, 0xa6, 0xda, 0xa0, 0x26, 0x0a, + 0xbf, 0x8f, 0x3a, 0x85, 0x80, 0x3c, 0x61, 0x31, 0x98, 0xd5, 0x58, 0xce, 0xa1, 0x6f, 0x70, 0xba, + 0x8c, 0xc0, 0x37, 0x51, 0xa3, 0xe0, 0x43, 0xb3, 0x1a, 0x3d, 0x13, 0xd8, 0xe8, 0x9f, 0x7d, 0x4e, + 0x15, 0x8e, 0x3d, 0xd4, 0x8e, 0xf2, 0xb4, 0xc8, 0x84, 0xdd, 0xd4, 0xc9, 0x91, 0x4a, 0xfe, 0x85, + 0x46, 0xa8, 0xf1, 0xe0, 0x04, 0xb5, 0xe0, 0x27, 0x99, 0x33, 0xbb, 0xad, 0x47, 0x79, 0x76, 0xb5, + 0xbb, 0x25, 0x77, 0x94, 0xd6, 0x9d, 0x44, 0xe6, 0xd3, 0x6a, 0xb2, 0x1a, 0xa3, 0x65, 0x9a, 0x7d, + 0x40, 0xa8, 0x8a, 0xc1, 0xd7, 0x51, 0x63, 0x0c, 0xd3, 0xf2, 0x80, 0xa8, 0xfa, 0xc4, 0x9f, 0xa1, + 0xd6, 0x84, 0x3d, 0x29, 0xc0, 0xfc, 0x47, 0xde, 0xdb, 0x5a, 0x8f, 0x56, 0xfb, 0x46, 0x51, 0x68, + 0xc9, 0x3c, 0xa9, 0x1f, 0x5b, 0xde, 0x9f, 0x16, 0x72, 0xb7, 0x5c, 0x3f, 0xfe, 0x11, 0xa1, 0x70, + 0x71, 0x9b, 0xc2, 0xb6, 0x74, 0xff, 0xa7, 0xaf, 0xde, 0xff, 0xf2, 0xce, 0xab, 0x1f, 0xe5, 0x12, + 0x12, 0x74, 0x25, 0x15, 0x3e, 0x42, 0xbd, 0x15, 0x69, 0xdd, 0xe9, 0x6e, 0x70, 0x6d, 0x3e, 0x73, + 0x7b, 0x2b, 0xe2, 0x74, 0x35, 0xc6, 0xfb, 0xd8, 0x8c, 0x4d, 0x37, 0x8a, 0xdd, 0xc5, 0xfe, 0x5b, + 0xfa, 0x5d, 0xbb, 0xeb, 0xfb, 0x7b, 0xd2, 0xf9, 0xe5, 0x37, 0xb7, 0xf6, 0xf4, 0xaf, 0x83, 0x5a, + 0x70, 0xeb, 0xfc, 0xc2, 0xa9, 0x3d, 0xbb, 0x70, 0x6a, 0xcf, 0x2f, 0x9c, 0xda, 0xd3, 0xb9, 0x63, + 0x9d, 0xcf, 0x1d, 0xeb, 0xd9, 0xdc, 0xb1, 0x9e, 0xcf, 0x1d, 0xeb, 0xef, 0xb9, 0x63, 0xfd, 0xfc, + 0x8f, 0x53, 0xfb, 0x76, 0xc7, 0x74, 0xf7, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0x0e, 0xb6, + 0xcd, 0x7f, 0x07, 0x00, 0x00, +} + func (m *CertificateSigningRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -109,41 +292,52 @@ } func (m *CertificateSigningRequest) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CertificateSigningRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CertificateSigningRequestCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -151,37 +345,47 @@ } func (m *CertificateSigningRequestCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CertificateSigningRequestCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastUpdateTime.Size())) - n4, err := m.LastUpdateTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 - return i, nil + i-- + dAtA[i] = 0x22 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x1a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CertificateSigningRequestList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -189,37 +393,46 @@ } func (m *CertificateSigningRequestList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CertificateSigningRequestList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *CertificateSigningRequestSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -227,92 +440,86 @@ } func (m *CertificateSigningRequestSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CertificateSigningRequestSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Request != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Request))) - i += copy(dAtA[i:], m.Request) - } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) - i += copy(dAtA[i:], m.Username) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - if len(m.Groups) > 0 { - for _, s := range m.Groups { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Usages) > 0 { - for _, s := range m.Usages { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } if len(m.Extra) > 0 { keysForExtra := make([]string, 0, len(m.Extra)) for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) - for _, k := range keysForExtra { - dAtA[i] = 0x32 - i++ - v := m.Extra[string(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n6, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x32 + } + } + if len(m.Usages) > 0 { + for iNdEx := len(m.Usages) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Usages[iNdEx]) + copy(dAtA[i:], m.Usages[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Usages[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x22 } } - return i, nil + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x1a + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0x12 + if m.Request != nil { + i -= len(m.Request) + copy(dAtA[i:], m.Request) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Request))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *CertificateSigningRequestStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -320,35 +527,43 @@ } func (m *CertificateSigningRequestStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CertificateSigningRequestStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.Certificate != nil { + i -= len(m.Certificate) + copy(dAtA[i:], m.Certificate) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Certificate))) + i-- + dAtA[i] = 0x12 + } if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - if m.Certificate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Certificate))) - i += copy(dAtA[i:], m.Certificate) - } - return i, nil + return len(dAtA) - i, nil } func (m ExtraValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -356,56 +571,42 @@ } func (m ExtraValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m ExtraValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m) > 0 { - for _, s := range m { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *CertificateSigningRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -418,6 +619,9 @@ } func (m *CertificateSigningRequestCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -432,6 +636,9 @@ } func (m *CertificateSigningRequestList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -446,6 +653,9 @@ } func (m *CertificateSigningRequestSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Request != nil { @@ -481,6 +691,9 @@ } func (m *CertificateSigningRequestStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Conditions) > 0 { @@ -497,6 +710,9 @@ } func (m ExtraValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m) > 0 { @@ -509,14 +725,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -526,7 +735,7 @@ return "nil" } s := strings.Join([]string{`&CertificateSigningRequest{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CertificateSigningRequestSpec", "CertificateSigningRequestSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CertificateSigningRequestStatus", "CertificateSigningRequestStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -541,7 +750,7 @@ `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `LastUpdateTime:` + strings.Replace(strings.Replace(this.LastUpdateTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -550,9 +759,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]CertificateSigningRequest{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CertificateSigningRequest", "CertificateSigningRequest", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&CertificateSigningRequestList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CertificateSigningRequest", "CertificateSigningRequest", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -586,8 +800,13 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]CertificateSigningRequestCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "CertificateSigningRequestCondition", "CertificateSigningRequestCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&CertificateSigningRequestStatus{`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "CertificateSigningRequestCondition", "CertificateSigningRequestCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `Certificate:` + valueToStringGenerated(this.Certificate) + `,`, `}`, }, "") @@ -616,7 +835,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -644,7 +863,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -653,6 +872,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -674,7 +896,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -683,6 +905,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -704,7 +929,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -713,6 +938,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -729,6 +957,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -756,7 +987,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -784,7 +1015,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -794,6 +1025,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -813,7 +1047,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -823,6 +1057,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -842,7 +1079,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -852,6 +1089,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -871,7 +1111,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -880,6 +1120,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -896,6 +1139,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -923,7 +1169,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -951,7 +1197,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -960,6 +1206,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -981,7 +1230,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -990,6 +1239,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1007,6 +1259,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1034,7 +1289,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1062,7 +1317,7 @@ } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1071,6 +1326,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1093,7 +1351,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1103,6 +1361,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1122,7 +1383,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1132,6 +1393,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1151,7 +1415,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1161,6 +1425,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1180,7 +1447,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1190,6 +1457,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1209,7 +1479,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1218,54 +1488,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Extra == nil { m.Extra = make(map[string]ExtraValue) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := &ExtraValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1275,46 +1511,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ExtraValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &ExtraValue{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Extra[mapkey] = *mapvalue - } else { - var mapvalue ExtraValue - m.Extra[mapkey] = mapvalue } + m.Extra[mapkey] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -1325,6 +1603,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1352,7 +1633,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1380,7 +1661,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1389,6 +1670,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1411,7 +1695,7 @@ } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1420,6 +1704,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1437,6 +1724,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1464,7 +1754,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1492,7 +1782,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1502,6 +1792,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1516,6 +1809,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1582,10 +1878,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1614,6 +1913,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1632,62 +1934,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/certificates/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 804 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x8f, 0xdb, 0x44, - 0x18, 0x8e, 0xf3, 0xb5, 0xc9, 0x64, 0xd9, 0x56, 0x23, 0x54, 0x99, 0x95, 0x6a, 0xaf, 0x2c, 0x40, - 0xcb, 0x47, 0xc7, 0x6c, 0x85, 0x60, 0xb5, 0x07, 0x04, 0x5e, 0x2a, 0x58, 0xd1, 0x0a, 0x69, 0xda, - 0x70, 0x40, 0x48, 0x74, 0xe2, 0xbc, 0x75, 0xa6, 0xa9, 0x3f, 0xf0, 0x8c, 0x03, 0xb9, 0xf5, 0x27, - 0x70, 0xe4, 0x82, 0xc4, 0x2f, 0xe1, 0xbc, 0x1c, 0x90, 0x7a, 0xec, 0x01, 0x45, 0x6c, 0xf8, 0x17, - 0x3d, 0xa1, 0x19, 0x4f, 0xe2, 0x90, 0x55, 0x48, 0xd5, 0xbd, 0x79, 0x9e, 0xf7, 0x79, 0x9e, 0xf7, - 0x63, 0xde, 0x31, 0xfa, 0x72, 0x7c, 0x2c, 0x08, 0x4f, 0xfd, 0x71, 0x31, 0x80, 0x3c, 0x01, 0x09, - 0xc2, 0x9f, 0x40, 0x32, 0x4c, 0x73, 0xdf, 0x04, 0x58, 0xc6, 0xfd, 0x10, 0x72, 0xc9, 0x1f, 0xf1, - 0x90, 0xe9, 0xf0, 0xd1, 0x00, 0x24, 0x3b, 0xf2, 0x23, 0x48, 0x20, 0x67, 0x12, 0x86, 0x24, 0xcb, - 0x53, 0x99, 0x62, 0xb7, 0x14, 0x10, 0x96, 0x71, 0xb2, 0x2a, 0x20, 0x46, 0xb0, 0x7f, 0x2b, 0xe2, - 0x72, 0x54, 0x0c, 0x48, 0x98, 0xc6, 0x7e, 0x94, 0x46, 0xa9, 0xaf, 0x75, 0x83, 0xe2, 0x91, 0x3e, - 0xe9, 0x83, 0xfe, 0x2a, 0xfd, 0xf6, 0x3f, 0xac, 0x0a, 0x88, 0x59, 0x38, 0xe2, 0x09, 0xe4, 0x53, - 0x3f, 0x1b, 0x47, 0x0a, 0x10, 0x7e, 0x0c, 0x92, 0xf9, 0x93, 0x4b, 0x55, 0xec, 0xfb, 0x9b, 0x54, - 0x79, 0x91, 0x48, 0x1e, 0xc3, 0x25, 0xc1, 0x47, 0xdb, 0x04, 0x22, 0x1c, 0x41, 0xcc, 0xd6, 0x75, - 0xde, 0x1f, 0x75, 0xf4, 0xc6, 0x69, 0xd5, 0xe6, 0x7d, 0x1e, 0x25, 0x3c, 0x89, 0x28, 0xfc, 0x50, - 0x80, 0x90, 0xf8, 0x21, 0xea, 0xa8, 0x0a, 0x87, 0x4c, 0x32, 0xdb, 0x3a, 0xb0, 0x0e, 0x7b, 0xb7, - 0x3f, 0x20, 0xd5, 0x7c, 0x96, 0x89, 0x48, 0x36, 0x8e, 0x14, 0x20, 0x88, 0x62, 0x93, 0xc9, 0x11, - 0xf9, 0x7a, 0xf0, 0x18, 0x42, 0x79, 0x0f, 0x24, 0x0b, 0xf0, 0xf9, 0xcc, 0xad, 0xcd, 0x67, 0x2e, - 0xaa, 0x30, 0xba, 0x74, 0xc5, 0x0f, 0x51, 0x53, 0x64, 0x10, 0xda, 0x75, 0xed, 0xfe, 0x09, 0xd9, - 0x32, 0x7d, 0xb2, 0xb1, 0xd6, 0xfb, 0x19, 0x84, 0xc1, 0xae, 0xc9, 0xd5, 0x54, 0x27, 0xaa, 0x9d, - 0xf1, 0x08, 0xb5, 0x85, 0x64, 0xb2, 0x10, 0x76, 0x43, 0xe7, 0xf8, 0xf4, 0x0a, 0x39, 0xb4, 0x4f, - 0xb0, 0x67, 0xb2, 0xb4, 0xcb, 0x33, 0x35, 0xfe, 0xde, 0xaf, 0x75, 0xe4, 0x6d, 0xd4, 0x9e, 0xa6, - 0xc9, 0x90, 0x4b, 0x9e, 0x26, 0xf8, 0x18, 0x35, 0xe5, 0x34, 0x03, 0x3d, 0xd0, 0x6e, 0xf0, 0xe6, - 0xa2, 0xe4, 0x07, 0xd3, 0x0c, 0x5e, 0xcc, 0xdc, 0xd7, 0xd7, 0xf9, 0x0a, 0xa7, 0x5a, 0x81, 0xdf, - 0x46, 0xed, 0x1c, 0x98, 0x48, 0x13, 0x3d, 0xae, 0x6e, 0x55, 0x08, 0xd5, 0x28, 0x35, 0x51, 0xfc, - 0x0e, 0xda, 0x89, 0x41, 0x08, 0x16, 0x81, 0xee, 0xb9, 0x1b, 0x5c, 0x33, 0xc4, 0x9d, 0x7b, 0x25, - 0x4c, 0x17, 0x71, 0xfc, 0x18, 0xed, 0x3d, 0x61, 0x42, 0xf6, 0xb3, 0x21, 0x93, 0xf0, 0x80, 0xc7, - 0x60, 0x37, 0xf5, 0x94, 0xde, 0x7d, 0xb9, 0x7b, 0x56, 0x8a, 0xe0, 0x86, 0x71, 0xdf, 0xbb, 0xfb, - 0x1f, 0x27, 0xba, 0xe6, 0xec, 0xcd, 0x2c, 0x74, 0x73, 0xe3, 0x7c, 0xee, 0x72, 0x21, 0xf1, 0x77, - 0x97, 0xf6, 0x8d, 0xbc, 0x5c, 0x1d, 0x4a, 0xad, 0xb7, 0xed, 0xba, 0xa9, 0xa5, 0xb3, 0x40, 0x56, - 0x76, 0xed, 0x7b, 0xd4, 0xe2, 0x12, 0x62, 0x61, 0xd7, 0x0f, 0x1a, 0x87, 0xbd, 0xdb, 0x27, 0xaf, - 0xbe, 0x08, 0xc1, 0x6b, 0x26, 0x4d, 0xeb, 0x4c, 0x19, 0xd2, 0xd2, 0xd7, 0xfb, 0xbd, 0xf1, 0x3f, - 0x0d, 0xaa, 0x95, 0xc4, 0x6f, 0xa1, 0x9d, 0xbc, 0x3c, 0xea, 0xfe, 0x76, 0x83, 0x9e, 0xba, 0x15, - 0xc3, 0xa0, 0x8b, 0x18, 0x7e, 0x1f, 0x75, 0x0a, 0x01, 0x79, 0xc2, 0x62, 0x30, 0x57, 0xbd, 0xec, - 0xab, 0x6f, 0x70, 0xba, 0x64, 0xe0, 0x9b, 0xa8, 0x51, 0xf0, 0xa1, 0xb9, 0xea, 0x9e, 0x21, 0x36, - 0xfa, 0x67, 0x9f, 0x53, 0x85, 0x63, 0x0f, 0xb5, 0xa3, 0x3c, 0x2d, 0x32, 0x61, 0x37, 0x0f, 0x1a, - 0x87, 0xdd, 0x00, 0xa9, 0x8d, 0xf9, 0x42, 0x23, 0xd4, 0x44, 0x30, 0x41, 0xed, 0x42, 0xed, 0x83, - 0xb0, 0x5b, 0x9a, 0x73, 0x43, 0x71, 0xfa, 0x1a, 0x79, 0x31, 0x73, 0x3b, 0x5f, 0xc1, 0x54, 0x1f, - 0xa8, 0x61, 0xe1, 0x04, 0xb5, 0xe0, 0x27, 0x99, 0x33, 0xbb, 0xad, 0x47, 0x79, 0x76, 0xb5, 0x77, - 0x4b, 0xee, 0x28, 0xaf, 0x3b, 0x89, 0xcc, 0xa7, 0xd5, 0x64, 0x35, 0x46, 0xcb, 0x34, 0xfb, 0x80, - 0x50, 0xc5, 0xc1, 0xd7, 0x51, 0x63, 0x0c, 0xd3, 0xf2, 0x01, 0x51, 0xf5, 0x89, 0x3f, 0x43, 0xad, - 0x09, 0x7b, 0x52, 0x80, 0xf9, 0x8f, 0xbc, 0xb7, 0xb5, 0x1e, 0xed, 0xf6, 0x8d, 0x92, 0xd0, 0x52, - 0x79, 0x52, 0x3f, 0xb6, 0xbc, 0x3f, 0x2d, 0xe4, 0x6e, 0x79, 0xfd, 0xf8, 0x47, 0x84, 0xc2, 0xc5, - 0xdb, 0x14, 0xb6, 0xa5, 0xfb, 0x3f, 0x7d, 0xf5, 0xfe, 0x97, 0xef, 0xbc, 0xfa, 0x51, 0x2e, 0x21, - 0x41, 0x57, 0x52, 0xe1, 0x23, 0xd4, 0x5b, 0xb1, 0xd6, 0x9d, 0xee, 0x06, 0xd7, 0xe6, 0x33, 0xb7, - 0xb7, 0x62, 0x4e, 0x57, 0x39, 0xde, 0xc7, 0x66, 0x6c, 0xba, 0x51, 0xec, 0x2e, 0xf6, 0xdf, 0xd2, - 0x77, 0xdc, 0x5d, 0xdf, 0xdf, 0x93, 0xce, 0x2f, 0xbf, 0xb9, 0xb5, 0xa7, 0x7f, 0x1d, 0xd4, 0x82, - 0x5b, 0xe7, 0x17, 0x4e, 0xed, 0xd9, 0x85, 0x53, 0x7b, 0x7e, 0xe1, 0xd4, 0x9e, 0xce, 0x1d, 0xeb, - 0x7c, 0xee, 0x58, 0xcf, 0xe6, 0x8e, 0xf5, 0x7c, 0xee, 0x58, 0x7f, 0xcf, 0x1d, 0xeb, 0xe7, 0x7f, - 0x9c, 0xda, 0xb7, 0x3b, 0xa6, 0xbb, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x6b, 0x5b, 0xf9, - 0x7f, 0x07, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/certificates/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -73,7 +73,7 @@ func (in *CertificateSigningRequestList) DeepCopyInto(out *CertificateSigningRequestList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]CertificateSigningRequest, len(*in)) @@ -124,12 +124,15 @@ in, out := &in.Extra, &out.Extra *out = make(map[string]ExtraValue, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make(ExtraValue, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=coordination.k8s.io + +package v1 // import "k8s.io/api/coordination/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1002 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Lease) Reset() { *m = Lease{} } +func (*Lease) ProtoMessage() {} +func (*Lease) Descriptor() ([]byte, []int) { + return fileDescriptor_929e1148ad9baca3, []int{0} +} +func (m *Lease) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Lease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Lease) XXX_Merge(src proto.Message) { + xxx_messageInfo_Lease.Merge(m, src) +} +func (m *Lease) XXX_Size() int { + return m.Size() +} +func (m *Lease) XXX_DiscardUnknown() { + xxx_messageInfo_Lease.DiscardUnknown(m) +} + +var xxx_messageInfo_Lease proto.InternalMessageInfo + +func (m *LeaseList) Reset() { *m = LeaseList{} } +func (*LeaseList) ProtoMessage() {} +func (*LeaseList) Descriptor() ([]byte, []int) { + return fileDescriptor_929e1148ad9baca3, []int{1} +} +func (m *LeaseList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LeaseList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LeaseList) XXX_Merge(src proto.Message) { + xxx_messageInfo_LeaseList.Merge(m, src) +} +func (m *LeaseList) XXX_Size() int { + return m.Size() +} +func (m *LeaseList) XXX_DiscardUnknown() { + xxx_messageInfo_LeaseList.DiscardUnknown(m) +} + +var xxx_messageInfo_LeaseList proto.InternalMessageInfo + +func (m *LeaseSpec) Reset() { *m = LeaseSpec{} } +func (*LeaseSpec) ProtoMessage() {} +func (*LeaseSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_929e1148ad9baca3, []int{2} +} +func (m *LeaseSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LeaseSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LeaseSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_LeaseSpec.Merge(m, src) +} +func (m *LeaseSpec) XXX_Size() int { + return m.Size() +} +func (m *LeaseSpec) XXX_DiscardUnknown() { + xxx_messageInfo_LeaseSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_LeaseSpec proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Lease)(nil), "k8s.io.api.coordination.v1.Lease") + proto.RegisterType((*LeaseList)(nil), "k8s.io.api.coordination.v1.LeaseList") + proto.RegisterType((*LeaseSpec)(nil), "k8s.io.api.coordination.v1.LeaseSpec") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1/generated.proto", fileDescriptor_929e1148ad9baca3) +} + +var fileDescriptor_929e1148ad9baca3 = []byte{ + // 535 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x90, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xe3, 0x36, 0x91, 0x9a, 0x0d, 0x2d, 0x91, 0x95, 0x83, 0x95, 0x83, 0x5d, 0x22, 0x21, + 0xe5, 0xc2, 0x2e, 0xa9, 0x10, 0x42, 0x9c, 0xc0, 0x20, 0xa0, 0x52, 0x2a, 0x24, 0xb7, 0x27, 0xd4, + 0x03, 0x1b, 0x7b, 0x70, 0x96, 0xd4, 0x5e, 0xb3, 0xbb, 0x0e, 0xea, 0x8d, 0x47, 0xe0, 0xca, 0x63, + 0xc0, 0x53, 0xe4, 0xd8, 0x63, 0x4f, 0x16, 0x31, 0x2f, 0x82, 0x76, 0x93, 0x36, 0x21, 0x49, 0xd5, + 0x8a, 0xdb, 0xee, 0xcc, 0xfc, 0xdf, 0xfc, 0xf3, 0xa3, 0x57, 0xa3, 0x67, 0x12, 0x33, 0x4e, 0x46, + 0xf9, 0x00, 0x44, 0x0a, 0x0a, 0x24, 0x19, 0x43, 0x1a, 0x71, 0x41, 0xe6, 0x0d, 0x9a, 0x31, 0x12, + 0x72, 0x2e, 0x22, 0x96, 0x52, 0xc5, 0x78, 0x4a, 0xc6, 0x3d, 0x12, 0x43, 0x0a, 0x82, 0x2a, 0x88, + 0x70, 0x26, 0xb8, 0xe2, 0x76, 0x7b, 0x36, 0x8b, 0x69, 0xc6, 0xf0, 0xf2, 0x2c, 0x1e, 0xf7, 0xda, + 0x8f, 0x62, 0xa6, 0x86, 0xf9, 0x00, 0x87, 0x3c, 0x21, 0x31, 0x8f, 0x39, 0x31, 0x92, 0x41, 0xfe, + 0xc9, 0xfc, 0xcc, 0xc7, 0xbc, 0x66, 0xa8, 0xf6, 0x93, 0xc5, 0xda, 0x84, 0x86, 0x43, 0x96, 0x82, + 0x38, 0x27, 0xd9, 0x28, 0xd6, 0x05, 0x49, 0x12, 0x50, 0x74, 0x83, 0x81, 0x36, 0xb9, 0x49, 0x25, + 0xf2, 0x54, 0xb1, 0x04, 0xd6, 0x04, 0x4f, 0x6f, 0x13, 0xc8, 0x70, 0x08, 0x09, 0x5d, 0xd5, 0x75, + 0x7e, 0x59, 0xa8, 0xd6, 0x07, 0x2a, 0xc1, 0xfe, 0x88, 0x76, 0xb4, 0x9b, 0x88, 0x2a, 0xea, 0x58, + 0xfb, 0x56, 0xb7, 0x71, 0xf0, 0x18, 0x2f, 0x62, 0xb8, 0x86, 0xe2, 0x6c, 0x14, 0xeb, 0x82, 0xc4, + 0x7a, 0x1a, 0x8f, 0x7b, 0xf8, 0xfd, 0xe0, 0x33, 0x84, 0xea, 0x08, 0x14, 0xf5, 0xed, 0x49, 0xe1, + 0x55, 0xca, 0xc2, 0x43, 0x8b, 0x5a, 0x70, 0x4d, 0xb5, 0xdf, 0xa2, 0xaa, 0xcc, 0x20, 0x74, 0xb6, + 0x0c, 0xfd, 0x21, 0xbe, 0x39, 0x64, 0x6c, 0x2c, 0x1d, 0x67, 0x10, 0xfa, 0xf7, 0xe6, 0xc8, 0xaa, + 0xfe, 0x05, 0x06, 0xd0, 0xf9, 0x69, 0xa1, 0xba, 0x99, 0xe8, 0x33, 0xa9, 0xec, 0xd3, 0x35, 0xe3, + 0xf8, 0x6e, 0xc6, 0xb5, 0xda, 0xd8, 0x6e, 0xce, 0x77, 0xec, 0x5c, 0x55, 0x96, 0x4c, 0xbf, 0x41, + 0x35, 0xa6, 0x20, 0x91, 0xce, 0xd6, 0xfe, 0x76, 0xb7, 0x71, 0xf0, 0xe0, 0x56, 0xd7, 0xfe, 0xee, + 0x9c, 0x56, 0x3b, 0xd4, 0xba, 0x60, 0x26, 0xef, 0xfc, 0xd8, 0x9e, 0x7b, 0xd6, 0x77, 0xd8, 0xcf, + 0xd1, 0xde, 0x90, 0x9f, 0x45, 0x20, 0x0e, 0x23, 0x48, 0x15, 0x53, 0xe7, 0xc6, 0x79, 0xdd, 0xb7, + 0xcb, 0xc2, 0xdb, 0x7b, 0xf7, 0x4f, 0x27, 0x58, 0x99, 0xb4, 0xfb, 0xa8, 0x75, 0xa6, 0x41, 0xaf, + 0x73, 0x61, 0x36, 0x1f, 0x43, 0xc8, 0xd3, 0x48, 0x9a, 0x58, 0x6b, 0xbe, 0x53, 0x16, 0x5e, 0xab, + 0xbf, 0xa1, 0x1f, 0x6c, 0x54, 0xd9, 0x03, 0xd4, 0xa0, 0xe1, 0x97, 0x9c, 0x09, 0x38, 0x61, 0x09, + 0x38, 0xdb, 0x26, 0x40, 0x72, 0xb7, 0x00, 0x8f, 0x58, 0x28, 0xb8, 0x96, 0xf9, 0xf7, 0xcb, 0xc2, + 0x6b, 0xbc, 0x5c, 0x70, 0x82, 0x65, 0xa8, 0x7d, 0x8a, 0xea, 0x02, 0x52, 0xf8, 0x6a, 0x36, 0x54, + 0xff, 0x6f, 0xc3, 0x6e, 0x59, 0x78, 0xf5, 0xe0, 0x8a, 0x12, 0x2c, 0x80, 0xf6, 0x0b, 0xd4, 0x34, + 0x97, 0x9d, 0x08, 0x9a, 0x4a, 0xa6, 0x6f, 0x93, 0x4e, 0xcd, 0x64, 0xd1, 0x2a, 0x0b, 0xaf, 0xd9, + 0x5f, 0xe9, 0x05, 0x6b, 0xd3, 0x7e, 0x77, 0x32, 0x75, 0x2b, 0x17, 0x53, 0xb7, 0x72, 0x39, 0x75, + 0x2b, 0xdf, 0x4a, 0xd7, 0x9a, 0x94, 0xae, 0x75, 0x51, 0xba, 0xd6, 0x65, 0xe9, 0x5a, 0xbf, 0x4b, + 0xd7, 0xfa, 0xfe, 0xc7, 0xad, 0x7c, 0xd8, 0x1a, 0xf7, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x41, + 0x5e, 0x94, 0x96, 0x5e, 0x04, 0x00, 0x00, +} + +func (m *Lease) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Lease) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Lease) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *LeaseList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LeaseList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *LeaseSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LeaseSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LeaseTransitions != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseTransitions)) + i-- + dAtA[i] = 0x28 + } + if m.RenewTime != nil { + { + size, err := m.RenewTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.AcquireTime != nil { + { + size, err := m.AcquireTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LeaseDurationSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseDurationSeconds)) + i-- + dAtA[i] = 0x10 + } + if m.HolderIdentity != nil { + i -= len(*m.HolderIdentity) + copy(dAtA[i:], *m.HolderIdentity) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.HolderIdentity))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Lease) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LeaseList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LeaseSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.HolderIdentity != nil { + l = len(*m.HolderIdentity) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseDurationSeconds != nil { + n += 1 + sovGenerated(uint64(*m.LeaseDurationSeconds)) + } + if m.AcquireTime != nil { + l = m.AcquireTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RenewTime != nil { + l = m.RenewTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseTransitions != nil { + n += 1 + sovGenerated(uint64(*m.LeaseTransitions)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Lease) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lease{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LeaseSpec", "LeaseSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LeaseList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Lease{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Lease", "Lease", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&LeaseList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *LeaseSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LeaseSpec{`, + `HolderIdentity:` + valueToStringGenerated(this.HolderIdentity) + `,`, + `LeaseDurationSeconds:` + valueToStringGenerated(this.LeaseDurationSeconds) + `,`, + `AcquireTime:` + strings.Replace(fmt.Sprintf("%v", this.AcquireTime), "MicroTime", "v1.MicroTime", 1) + `,`, + `RenewTime:` + strings.Replace(fmt.Sprintf("%v", this.RenewTime), "MicroTime", "v1.MicroTime", 1) + `,`, + `LeaseTransitions:` + valueToStringGenerated(this.LeaseTransitions) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Lease) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Lease: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Lease: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Lease{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HolderIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.HolderIdentity = &s + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseDurationSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseDurationSeconds = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AcquireTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AcquireTime == nil { + m.AcquireTime = &v1.MicroTime{} + } + if err := m.AcquireTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RenewTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RenewTime == nil { + m.RenewTime = &v1.MicroTime{} + } + if err := m.RenewTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseTransitions", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseTransitions = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,80 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.coordination.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// Lease defines a lease concept. +message Lease { + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional LeaseSpec spec = 2; +} + +// LeaseList is a list of Lease objects. +message LeaseList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated Lease items = 2; +} + +// LeaseSpec is a specification of a Lease. +message LeaseSpec { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + optional string holderIdentity = 1; + + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + optional int32 leaseDurationSeconds = 2; + + // acquireTime is a time when the current lease was acquired. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime acquireTime = 3; + + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime renewTime = 4; + + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + optional int32 leaseTransitions = 5; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Lease{}, + &LeaseList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,74 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Lease defines a lease concept. +type Lease struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Spec LeaseSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// LeaseSpec is a specification of a Lease. +type LeaseSpec struct { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + HolderIdentity *string `json:"holderIdentity,omitempty" protobuf:"bytes,1,opt,name=holderIdentity"` + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + LeaseDurationSeconds *int32 `json:"leaseDurationSeconds,omitempty" protobuf:"varint,2,opt,name=leaseDurationSeconds"` + // acquireTime is a time when the current lease was acquired. + // +optional + AcquireTime *metav1.MicroTime `json:"acquireTime,omitempty" protobuf:"bytes,3,opt,name=acquireTime"` + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + RenewTime *metav1.MicroTime `json:"renewTime,omitempty" protobuf:"bytes,4,opt,name=renewTime"` + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + LeaseTransitions *int32 `json:"leaseTransitions,omitempty" protobuf:"varint,5,opt,name=leaseTransitions"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LeaseList is a list of Lease objects. +type LeaseList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []Lease `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,63 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_Lease = map[string]string{ + "": "Lease defines a lease concept.", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", +} + +func (Lease) SwaggerDoc() map[string]string { + return map_Lease +} + +var map_LeaseList = map[string]string{ + "": "LeaseList is a list of Lease objects.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is a list of schema objects.", +} + +func (LeaseList) SwaggerDoc() map[string]string { + return map_LeaseList +} + +var map_LeaseSpec = map[string]string{ + "": "LeaseSpec is a specification of a Lease.", + "holderIdentity": "holderIdentity contains the identity of the holder of a current lease.", + "leaseDurationSeconds": "leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.", + "acquireTime": "acquireTime is a time when the current lease was acquired.", + "renewTime": "renewTime is a time when the current holder of a lease has last updated the lease.", + "leaseTransitions": "leaseTransitions is the number of transitions of a lease between holders.", +} + +func (LeaseSpec) SwaggerDoc() map[string]string { + return map_LeaseSpec +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,124 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Lease) DeepCopyInto(out *Lease) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lease. +func (in *Lease) DeepCopy() *Lease { + if in == nil { + return nil + } + out := new(Lease) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Lease) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseList) DeepCopyInto(out *LeaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Lease, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseList. +func (in *LeaseList) DeepCopy() *LeaseList { + if in == nil { + return nil + } + out := new(LeaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LeaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseSpec) DeepCopyInto(out *LeaseSpec) { + *out = *in + if in.HolderIdentity != nil { + in, out := &in.HolderIdentity, &out.HolderIdentity + *out = new(string) + **out = **in + } + if in.LeaseDurationSeconds != nil { + in, out := &in.LeaseDurationSeconds, &out.LeaseDurationSeconds + *out = new(int32) + **out = **in + } + if in.AcquireTime != nil { + in, out := &in.AcquireTime, &out.AcquireTime + *out = (*in).DeepCopy() + } + if in.RenewTime != nil { + in, out := &in.RenewTime, &out.RenewTime + *out = (*in).DeepCopy() + } + if in.LeaseTransitions != nil { + in, out := &in.LeaseTransitions, &out.LeaseTransitions + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseSpec. +func (in *LeaseSpec) DeepCopy() *LeaseSpec { + if in == nil { + return nil + } + out := new(LeaseSpec) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=coordination.k8s.io + +package v1beta1 // import "k8s.io/api/coordination/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1002 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1beta1/generated.proto + +package v1beta1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Lease) Reset() { *m = Lease{} } +func (*Lease) ProtoMessage() {} +func (*Lease) Descriptor() ([]byte, []int) { + return fileDescriptor_daca6bcd2ff63a80, []int{0} +} +func (m *Lease) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Lease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Lease) XXX_Merge(src proto.Message) { + xxx_messageInfo_Lease.Merge(m, src) +} +func (m *Lease) XXX_Size() int { + return m.Size() +} +func (m *Lease) XXX_DiscardUnknown() { + xxx_messageInfo_Lease.DiscardUnknown(m) +} + +var xxx_messageInfo_Lease proto.InternalMessageInfo + +func (m *LeaseList) Reset() { *m = LeaseList{} } +func (*LeaseList) ProtoMessage() {} +func (*LeaseList) Descriptor() ([]byte, []int) { + return fileDescriptor_daca6bcd2ff63a80, []int{1} +} +func (m *LeaseList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LeaseList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LeaseList) XXX_Merge(src proto.Message) { + xxx_messageInfo_LeaseList.Merge(m, src) +} +func (m *LeaseList) XXX_Size() int { + return m.Size() +} +func (m *LeaseList) XXX_DiscardUnknown() { + xxx_messageInfo_LeaseList.DiscardUnknown(m) +} + +var xxx_messageInfo_LeaseList proto.InternalMessageInfo + +func (m *LeaseSpec) Reset() { *m = LeaseSpec{} } +func (*LeaseSpec) ProtoMessage() {} +func (*LeaseSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_daca6bcd2ff63a80, []int{2} +} +func (m *LeaseSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LeaseSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LeaseSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_LeaseSpec.Merge(m, src) +} +func (m *LeaseSpec) XXX_Size() int { + return m.Size() +} +func (m *LeaseSpec) XXX_DiscardUnknown() { + xxx_messageInfo_LeaseSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_LeaseSpec proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Lease)(nil), "k8s.io.api.coordination.v1beta1.Lease") + proto.RegisterType((*LeaseList)(nil), "k8s.io.api.coordination.v1beta1.LeaseList") + proto.RegisterType((*LeaseSpec)(nil), "k8s.io.api.coordination.v1beta1.LeaseSpec") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/coordination/v1beta1/generated.proto", fileDescriptor_daca6bcd2ff63a80) +} + +var fileDescriptor_daca6bcd2ff63a80 = []byte{ + // 540 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x91, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xe3, 0xb6, 0x11, 0xcd, 0x86, 0x96, 0xc8, 0xca, 0xc1, 0xca, 0xc1, 0xae, 0x72, 0x40, + 0x15, 0x52, 0x77, 0x49, 0x85, 0x10, 0xe2, 0x04, 0x16, 0x87, 0x56, 0xb8, 0x42, 0x72, 0x7b, 0x42, + 0x3d, 0xb0, 0xb6, 0x07, 0x67, 0x49, 0xed, 0x35, 0xbb, 0xeb, 0xa0, 0xde, 0x78, 0x04, 0xae, 0xbc, + 0x08, 0xbc, 0x42, 0x8e, 0x3d, 0xf6, 0x64, 0x11, 0xf3, 0x22, 0xc8, 0x1b, 0xb7, 0x09, 0x49, 0x51, + 0x23, 0x6e, 0xde, 0x99, 0xf9, 0xbf, 0xf9, 0xe7, 0x37, 0x3a, 0x1a, 0xbd, 0x90, 0x98, 0x71, 0x32, + 0xca, 0x03, 0x10, 0x29, 0x28, 0x90, 0x64, 0x0c, 0x69, 0xc4, 0x05, 0xa9, 0x1b, 0x34, 0x63, 0x24, + 0xe4, 0x5c, 0x44, 0x2c, 0xa5, 0x8a, 0xf1, 0x94, 0x8c, 0x07, 0x01, 0x28, 0x3a, 0x20, 0x31, 0xa4, + 0x20, 0xa8, 0x82, 0x08, 0x67, 0x82, 0x2b, 0x6e, 0x3a, 0x33, 0x01, 0xa6, 0x19, 0xc3, 0x8b, 0x02, + 0x5c, 0x0b, 0x7a, 0x07, 0x31, 0x53, 0xc3, 0x3c, 0xc0, 0x21, 0x4f, 0x48, 0xcc, 0x63, 0x4e, 0xb4, + 0x2e, 0xc8, 0x3f, 0xea, 0x97, 0x7e, 0xe8, 0xaf, 0x19, 0xaf, 0xf7, 0x6c, 0x6e, 0x20, 0xa1, 0xe1, + 0x90, 0xa5, 0x20, 0x2e, 0x49, 0x36, 0x8a, 0xab, 0x82, 0x24, 0x09, 0x28, 0x4a, 0xc6, 0x2b, 0x2e, + 0x7a, 0xe4, 0x5f, 0x2a, 0x91, 0xa7, 0x8a, 0x25, 0xb0, 0x22, 0x78, 0x7e, 0x9f, 0x40, 0x86, 0x43, + 0x48, 0xe8, 0xb2, 0xae, 0xff, 0xd3, 0x40, 0x4d, 0x0f, 0xa8, 0x04, 0xf3, 0x03, 0xda, 0xae, 0xdc, + 0x44, 0x54, 0x51, 0xcb, 0xd8, 0x33, 0xf6, 0xdb, 0x87, 0x4f, 0xf1, 0x3c, 0x8b, 0x5b, 0x28, 0xce, + 0x46, 0x71, 0x55, 0x90, 0xb8, 0x9a, 0xc6, 0xe3, 0x01, 0x7e, 0x17, 0x7c, 0x82, 0x50, 0x9d, 0x80, + 0xa2, 0xae, 0x39, 0x29, 0x9c, 0x46, 0x59, 0x38, 0x68, 0x5e, 0xf3, 0x6f, 0xa9, 0xa6, 0x87, 0xb6, + 0x64, 0x06, 0xa1, 0xb5, 0xa1, 0xe9, 0x4f, 0xf0, 0x3d, 0x49, 0x63, 0xed, 0xeb, 0x34, 0x83, 0xd0, + 0x7d, 0x58, 0x73, 0xb7, 0xaa, 0x97, 0xaf, 0x29, 0xfd, 0x1f, 0x06, 0x6a, 0xe9, 0x09, 0x8f, 0x49, + 0x65, 0x9e, 0xaf, 0xb8, 0xc7, 0xeb, 0xb9, 0xaf, 0xd4, 0xda, 0x7b, 0xa7, 0xde, 0xb1, 0x7d, 0x53, + 0x59, 0x70, 0xfe, 0x16, 0x35, 0x99, 0x82, 0x44, 0x5a, 0x1b, 0x7b, 0x9b, 0xfb, 0xed, 0xc3, 0xc7, + 0xeb, 0x59, 0x77, 0x77, 0x6a, 0x64, 0xf3, 0xb8, 0x12, 0xfb, 0x33, 0x46, 0xff, 0xfb, 0x66, 0x6d, + 0xbc, 0x3a, 0xc6, 0x7c, 0x89, 0x76, 0x87, 0xfc, 0x22, 0x02, 0x71, 0x1c, 0x41, 0xaa, 0x98, 0xba, + 0xd4, 0xf6, 0x5b, 0xae, 0x59, 0x16, 0xce, 0xee, 0xd1, 0x5f, 0x1d, 0x7f, 0x69, 0xd2, 0xf4, 0x50, + 0xf7, 0xa2, 0x02, 0xbd, 0xc9, 0x85, 0x5e, 0x7f, 0x0a, 0x21, 0x4f, 0x23, 0xa9, 0x03, 0x6e, 0xba, + 0x56, 0x59, 0x38, 0x5d, 0xef, 0x8e, 0xbe, 0x7f, 0xa7, 0xca, 0x0c, 0x50, 0x9b, 0x86, 0x9f, 0x73, + 0x26, 0xe0, 0x8c, 0x25, 0x60, 0x6d, 0xea, 0x14, 0xc9, 0x7a, 0x29, 0x9e, 0xb0, 0x50, 0xf0, 0x4a, + 0xe6, 0x3e, 0x2a, 0x0b, 0xa7, 0xfd, 0x7a, 0xce, 0xf1, 0x17, 0xa1, 0xe6, 0x39, 0x6a, 0x09, 0x48, + 0xe1, 0x8b, 0xde, 0xb0, 0xf5, 0x7f, 0x1b, 0x76, 0xca, 0xc2, 0x69, 0xf9, 0x37, 0x14, 0x7f, 0x0e, + 0x34, 0x5f, 0xa1, 0x8e, 0xbe, 0xec, 0x4c, 0xd0, 0x54, 0xb2, 0xea, 0x36, 0x69, 0x35, 0x75, 0x16, + 0xdd, 0xb2, 0x70, 0x3a, 0xde, 0x52, 0xcf, 0x5f, 0x99, 0x76, 0x0f, 0x26, 0x53, 0xbb, 0x71, 0x35, + 0xb5, 0x1b, 0xd7, 0x53, 0xbb, 0xf1, 0xb5, 0xb4, 0x8d, 0x49, 0x69, 0x1b, 0x57, 0xa5, 0x6d, 0x5c, + 0x97, 0xb6, 0xf1, 0xab, 0xb4, 0x8d, 0x6f, 0xbf, 0xed, 0xc6, 0xfb, 0x07, 0xf5, 0x6f, 0xfe, 0x13, + 0x00, 0x00, 0xff, 0xff, 0x51, 0x34, 0x6a, 0x0f, 0x77, 0x04, 0x00, 0x00, +} + +func (m *Lease) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Lease) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Lease) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *LeaseList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LeaseList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *LeaseSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LeaseSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LeaseSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LeaseTransitions != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseTransitions)) + i-- + dAtA[i] = 0x28 + } + if m.RenewTime != nil { + { + size, err := m.RenewTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.AcquireTime != nil { + { + size, err := m.AcquireTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LeaseDurationSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LeaseDurationSeconds)) + i-- + dAtA[i] = 0x10 + } + if m.HolderIdentity != nil { + i -= len(*m.HolderIdentity) + copy(dAtA[i:], *m.HolderIdentity) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.HolderIdentity))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Lease) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LeaseList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LeaseSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.HolderIdentity != nil { + l = len(*m.HolderIdentity) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseDurationSeconds != nil { + n += 1 + sovGenerated(uint64(*m.LeaseDurationSeconds)) + } + if m.AcquireTime != nil { + l = m.AcquireTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RenewTime != nil { + l = m.RenewTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LeaseTransitions != nil { + n += 1 + sovGenerated(uint64(*m.LeaseTransitions)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Lease) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lease{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LeaseSpec", "LeaseSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LeaseList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Lease{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Lease", "Lease", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&LeaseList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *LeaseSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LeaseSpec{`, + `HolderIdentity:` + valueToStringGenerated(this.HolderIdentity) + `,`, + `LeaseDurationSeconds:` + valueToStringGenerated(this.LeaseDurationSeconds) + `,`, + `AcquireTime:` + strings.Replace(fmt.Sprintf("%v", this.AcquireTime), "MicroTime", "v1.MicroTime", 1) + `,`, + `RenewTime:` + strings.Replace(fmt.Sprintf("%v", this.RenewTime), "MicroTime", "v1.MicroTime", 1) + `,`, + `LeaseTransitions:` + valueToStringGenerated(this.LeaseTransitions) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Lease) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Lease: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Lease: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Lease{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HolderIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.HolderIdentity = &s + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseDurationSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseDurationSeconds = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AcquireTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AcquireTime == nil { + m.AcquireTime = &v1.MicroTime{} + } + if err := m.AcquireTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RenewTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RenewTime == nil { + m.RenewTime = &v1.MicroTime{} + } + if err := m.RenewTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseTransitions", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LeaseTransitions = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,80 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.coordination.v1beta1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// Lease defines a lease concept. +message Lease { + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional LeaseSpec spec = 2; +} + +// LeaseList is a list of Lease objects. +message LeaseList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated Lease items = 2; +} + +// LeaseSpec is a specification of a Lease. +message LeaseSpec { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + optional string holderIdentity = 1; + + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + optional int32 leaseDurationSeconds = 2; + + // acquireTime is a time when the current lease was acquired. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime acquireTime = 3; + + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime renewTime = 4; + + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + optional int32 leaseTransitions = 5; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "coordination.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Lease{}, + &LeaseList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,74 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Lease defines a lease concept. +type Lease struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the Lease. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Spec LeaseSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// LeaseSpec is a specification of a Lease. +type LeaseSpec struct { + // holderIdentity contains the identity of the holder of a current lease. + // +optional + HolderIdentity *string `json:"holderIdentity,omitempty" protobuf:"bytes,1,opt,name=holderIdentity"` + // leaseDurationSeconds is a duration that candidates for a lease need + // to wait to force acquire it. This is measure against time of last + // observed RenewTime. + // +optional + LeaseDurationSeconds *int32 `json:"leaseDurationSeconds,omitempty" protobuf:"varint,2,opt,name=leaseDurationSeconds"` + // acquireTime is a time when the current lease was acquired. + // +optional + AcquireTime *metav1.MicroTime `json:"acquireTime,omitempty" protobuf:"bytes,3,opt,name=acquireTime"` + // renewTime is a time when the current holder of a lease has last + // updated the lease. + // +optional + RenewTime *metav1.MicroTime `json:"renewTime,omitempty" protobuf:"bytes,4,opt,name=renewTime"` + // leaseTransitions is the number of transitions of a lease between + // holders. + // +optional + LeaseTransitions *int32 `json:"leaseTransitions,omitempty" protobuf:"varint,5,opt,name=leaseTransitions"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LeaseList is a list of Lease objects. +type LeaseList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []Lease `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,63 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_Lease = map[string]string{ + "": "Lease defines a lease concept.", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", +} + +func (Lease) SwaggerDoc() map[string]string { + return map_Lease +} + +var map_LeaseList = map[string]string{ + "": "LeaseList is a list of Lease objects.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is a list of schema objects.", +} + +func (LeaseList) SwaggerDoc() map[string]string { + return map_LeaseList +} + +var map_LeaseSpec = map[string]string{ + "": "LeaseSpec is a specification of a Lease.", + "holderIdentity": "holderIdentity contains the identity of the holder of a current lease.", + "leaseDurationSeconds": "leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.", + "acquireTime": "acquireTime is a time when the current lease was acquired.", + "renewTime": "renewTime is a time when the current holder of a lease has last updated the lease.", + "leaseTransitions": "leaseTransitions is the number of transitions of a lease between holders.", +} + +func (LeaseSpec) SwaggerDoc() map[string]string { + return map_LeaseSpec +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/coordination/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,124 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Lease) DeepCopyInto(out *Lease) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lease. +func (in *Lease) DeepCopy() *Lease { + if in == nil { + return nil + } + out := new(Lease) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Lease) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseList) DeepCopyInto(out *LeaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Lease, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseList. +func (in *LeaseList) DeepCopy() *LeaseList { + if in == nil { + return nil + } + out := new(LeaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LeaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaseSpec) DeepCopyInto(out *LeaseSpec) { + *out = *in + if in.HolderIdentity != nil { + in, out := &in.HolderIdentity, &out.HolderIdentity + *out = new(string) + **out = **in + } + if in.LeaseDurationSeconds != nil { + in, out := &in.LeaseDurationSeconds, &out.LeaseDurationSeconds + *out = new(int32) + **out = **in + } + if in.AcquireTime != nil { + in, out := &in.AcquireTime, &out.AcquireTime + *out = (*in).DeepCopy() + } + if in.RenewTime != nil { + in, out := &in.RenewTime, &out.RenewTime + *out = (*in).DeepCopy() + } + if in.LeaseTransitions != nil { + in, out := &in.LeaseTransitions, &out.LeaseTransitions + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaseSpec. +func (in *LeaseSpec) DeepCopy() *LeaseSpec { + if in == nil { + return nil + } + out := new(LeaseSpec) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/annotation_key_constants.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/annotation_key_constants.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/annotation_key_constants.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/annotation_key_constants.go 2020-12-10 21:46:52.000000000 +0000 @@ -78,4 +78,29 @@ // // Not all cloud providers support this annotation, though AWS & GCE do. AnnotationLoadBalancerSourceRangesKey = "service.beta.kubernetes.io/load-balancer-source-ranges" + + // EndpointsLastChangeTriggerTime is the annotation key, set for endpoints objects, that + // represents the timestamp (stored as RFC 3339 date-time string, e.g. '2018-10-22T19:32:52.1Z') + // of the last change, of some Pod or Service object, that triggered the endpoints object change. + // In other words, if a Pod / Service changed at time T0, that change was observed by endpoints + // controller at T1, and the Endpoints object was changed at T2, the + // EndpointsLastChangeTriggerTime would be set to T0. + // + // The "endpoints change trigger" here means any Pod or Service change that resulted in the + // Endpoints object change. + // + // Given the definition of the "endpoints change trigger", please note that this annotation will + // be set ONLY for endpoints object changes triggered by either Pod or Service change. If the + // Endpoints object changes due to other reasons, this annotation won't be set (or updated if it's + // already set). + // + // This annotation will be used to compute the in-cluster network programming latency SLI, see + // https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md + EndpointsLastChangeTriggerTime = "endpoints.kubernetes.io/last-change-trigger-time" + + // MigratedPluginsAnnotationKey is the annotation key, set for CSINode objects, that is a comma-separated + // list of in-tree plugins that will be serviced by the CSI backend on the Node represented by CSINode. + // This annotation is used by the Attach Detach Controller to determine whether to use the in-tree or + // CSI Backend for a volume plugin on a specific node. + MigratedPluginsAnnotationKey = "storage.alpha.kubernetes.io/migrated-plugins" ) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,6 +16,7 @@ // +k8s:openapi-gen=true // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // Package v1 is the v1 version of the core API. package v1 // import "k8s.io/api/core/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,230 +14,29 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/core/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/core/v1/generated.proto - - It has these top-level messages: - AWSElasticBlockStoreVolumeSource - Affinity - AttachedVolume - AvoidPods - AzureDiskVolumeSource - AzureFilePersistentVolumeSource - AzureFileVolumeSource - Binding - CSIPersistentVolumeSource - Capabilities - CephFSPersistentVolumeSource - CephFSVolumeSource - CinderPersistentVolumeSource - CinderVolumeSource - ClientIPConfig - ComponentCondition - ComponentStatus - ComponentStatusList - ConfigMap - ConfigMapEnvSource - ConfigMapKeySelector - ConfigMapList - ConfigMapNodeConfigSource - ConfigMapProjection - ConfigMapVolumeSource - Container - ContainerImage - ContainerPort - ContainerState - ContainerStateRunning - ContainerStateTerminated - ContainerStateWaiting - ContainerStatus - DaemonEndpoint - DownwardAPIProjection - DownwardAPIVolumeFile - DownwardAPIVolumeSource - EmptyDirVolumeSource - EndpointAddress - EndpointPort - EndpointSubset - Endpoints - EndpointsList - EnvFromSource - EnvVar - EnvVarSource - Event - EventList - EventSeries - EventSource - ExecAction - FCVolumeSource - FlexPersistentVolumeSource - FlexVolumeSource - FlockerVolumeSource - GCEPersistentDiskVolumeSource - GitRepoVolumeSource - GlusterfsVolumeSource - HTTPGetAction - HTTPHeader - Handler - HostAlias - HostPathVolumeSource - ISCSIPersistentVolumeSource - ISCSIVolumeSource - KeyToPath - Lifecycle - LimitRange - LimitRangeItem - LimitRangeList - LimitRangeSpec - List - LoadBalancerIngress - LoadBalancerStatus - LocalObjectReference - LocalVolumeSource - NFSVolumeSource - Namespace - NamespaceList - NamespaceSpec - NamespaceStatus - Node - NodeAddress - NodeAffinity - NodeCondition - NodeConfigSource - NodeConfigStatus - NodeDaemonEndpoints - NodeList - NodeProxyOptions - NodeResources - NodeSelector - NodeSelectorRequirement - NodeSelectorTerm - NodeSpec - NodeStatus - NodeSystemInfo - ObjectFieldSelector - ObjectReference - PersistentVolume - PersistentVolumeClaim - PersistentVolumeClaimCondition - PersistentVolumeClaimList - PersistentVolumeClaimSpec - PersistentVolumeClaimStatus - PersistentVolumeClaimVolumeSource - PersistentVolumeList - PersistentVolumeSource - PersistentVolumeSpec - PersistentVolumeStatus - PhotonPersistentDiskVolumeSource - Pod - PodAffinity - PodAffinityTerm - PodAntiAffinity - PodAttachOptions - PodCondition - PodDNSConfig - PodDNSConfigOption - PodExecOptions - PodList - PodLogOptions - PodPortForwardOptions - PodProxyOptions - PodReadinessGate - PodSecurityContext - PodSignature - PodSpec - PodStatus - PodStatusResult - PodTemplate - PodTemplateList - PodTemplateSpec - PortworxVolumeSource - Preconditions - PreferAvoidPodsEntry - PreferredSchedulingTerm - Probe - ProjectedVolumeSource - QuobyteVolumeSource - RBDPersistentVolumeSource - RBDVolumeSource - RangeAllocation - ReplicationController - ReplicationControllerCondition - ReplicationControllerList - ReplicationControllerSpec - ReplicationControllerStatus - ResourceFieldSelector - ResourceQuota - ResourceQuotaList - ResourceQuotaSpec - ResourceQuotaStatus - ResourceRequirements - SELinuxOptions - ScaleIOPersistentVolumeSource - ScaleIOVolumeSource - ScopeSelector - ScopedResourceSelectorRequirement - Secret - SecretEnvSource - SecretKeySelector - SecretList - SecretProjection - SecretReference - SecretVolumeSource - SecurityContext - SerializedReference - Service - ServiceAccount - ServiceAccountList - ServiceAccountTokenProjection - ServiceList - ServicePort - ServiceProxyOptions - ServiceSpec - ServiceStatus - SessionAffinityConfig - StorageOSPersistentVolumeSource - StorageOSVolumeSource - Sysctl - TCPSocketAction - Taint - Toleration - TopologySelectorLabelRequirement - TopologySelectorTerm - Volume - VolumeDevice - VolumeMount - VolumeNodeAffinity - VolumeProjection - VolumeSource - VsphereVirtualDiskVolumeSource - WeightedPodAffinityTerm -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import k8s_io_apimachinery_pkg_runtime "k8s.io/apimachinery/pkg/runtime" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" + io "io" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + resource "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import strings "strings" -import reflect "reflect" - -import io "io" + k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -253,13713 +52,19039 @@ func (m *AWSElasticBlockStoreVolumeSource) Reset() { *m = AWSElasticBlockStoreVolumeSource{} } func (*AWSElasticBlockStoreVolumeSource) ProtoMessage() {} func (*AWSElasticBlockStoreVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{0} + return fileDescriptor_83c10c24ec417dc9, []int{0} } - -func (m *Affinity) Reset() { *m = Affinity{} } -func (*Affinity) ProtoMessage() {} -func (*Affinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *AttachedVolume) Reset() { *m = AttachedVolume{} } -func (*AttachedVolume) ProtoMessage() {} -func (*AttachedVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *AvoidPods) Reset() { *m = AvoidPods{} } -func (*AvoidPods) ProtoMessage() {} -func (*AvoidPods) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *AzureDiskVolumeSource) Reset() { *m = AzureDiskVolumeSource{} } -func (*AzureDiskVolumeSource) ProtoMessage() {} -func (*AzureDiskVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *AzureFilePersistentVolumeSource) Reset() { *m = AzureFilePersistentVolumeSource{} } -func (*AzureFilePersistentVolumeSource) ProtoMessage() {} -func (*AzureFilePersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{5} +func (m *AWSElasticBlockStoreVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } - -func (m *AzureFileVolumeSource) Reset() { *m = AzureFileVolumeSource{} } -func (*AzureFileVolumeSource) ProtoMessage() {} -func (*AzureFileVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *Binding) Reset() { *m = Binding{} } -func (*Binding) ProtoMessage() {} -func (*Binding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *CSIPersistentVolumeSource) Reset() { *m = CSIPersistentVolumeSource{} } -func (*CSIPersistentVolumeSource) ProtoMessage() {} -func (*CSIPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{8} +func (m *AWSElasticBlockStoreVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AWSElasticBlockStoreVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_AWSElasticBlockStoreVolumeSource.Merge(m, src) +} +func (m *AWSElasticBlockStoreVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *AWSElasticBlockStoreVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_AWSElasticBlockStoreVolumeSource.DiscardUnknown(m) } -func (m *Capabilities) Reset() { *m = Capabilities{} } -func (*Capabilities) ProtoMessage() {} -func (*Capabilities) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +var xxx_messageInfo_AWSElasticBlockStoreVolumeSource proto.InternalMessageInfo -func (m *CephFSPersistentVolumeSource) Reset() { *m = CephFSPersistentVolumeSource{} } -func (*CephFSPersistentVolumeSource) ProtoMessage() {} -func (*CephFSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{10} +func (m *Affinity) Reset() { *m = Affinity{} } +func (*Affinity) ProtoMessage() {} +func (*Affinity) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{1} +} +func (m *Affinity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Affinity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Affinity) XXX_Merge(src proto.Message) { + xxx_messageInfo_Affinity.Merge(m, src) +} +func (m *Affinity) XXX_Size() int { + return m.Size() +} +func (m *Affinity) XXX_DiscardUnknown() { + xxx_messageInfo_Affinity.DiscardUnknown(m) } -func (m *CephFSVolumeSource) Reset() { *m = CephFSVolumeSource{} } -func (*CephFSVolumeSource) ProtoMessage() {} -func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +var xxx_messageInfo_Affinity proto.InternalMessageInfo -func (m *CinderPersistentVolumeSource) Reset() { *m = CinderPersistentVolumeSource{} } -func (*CinderPersistentVolumeSource) ProtoMessage() {} -func (*CinderPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{12} +func (m *AttachedVolume) Reset() { *m = AttachedVolume{} } +func (*AttachedVolume) ProtoMessage() {} +func (*AttachedVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{2} +} +func (m *AttachedVolume) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AttachedVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AttachedVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_AttachedVolume.Merge(m, src) +} +func (m *AttachedVolume) XXX_Size() int { + return m.Size() +} +func (m *AttachedVolume) XXX_DiscardUnknown() { + xxx_messageInfo_AttachedVolume.DiscardUnknown(m) } -func (m *CinderVolumeSource) Reset() { *m = CinderVolumeSource{} } -func (*CinderVolumeSource) ProtoMessage() {} -func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +var xxx_messageInfo_AttachedVolume proto.InternalMessageInfo -func (m *ClientIPConfig) Reset() { *m = ClientIPConfig{} } -func (*ClientIPConfig) ProtoMessage() {} -func (*ClientIPConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +func (m *AvoidPods) Reset() { *m = AvoidPods{} } +func (*AvoidPods) ProtoMessage() {} +func (*AvoidPods) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{3} +} +func (m *AvoidPods) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AvoidPods) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AvoidPods) XXX_Merge(src proto.Message) { + xxx_messageInfo_AvoidPods.Merge(m, src) +} +func (m *AvoidPods) XXX_Size() int { + return m.Size() +} +func (m *AvoidPods) XXX_DiscardUnknown() { + xxx_messageInfo_AvoidPods.DiscardUnknown(m) +} -func (m *ComponentCondition) Reset() { *m = ComponentCondition{} } -func (*ComponentCondition) ProtoMessage() {} -func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +var xxx_messageInfo_AvoidPods proto.InternalMessageInfo -func (m *ComponentStatus) Reset() { *m = ComponentStatus{} } -func (*ComponentStatus) ProtoMessage() {} -func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +func (m *AzureDiskVolumeSource) Reset() { *m = AzureDiskVolumeSource{} } +func (*AzureDiskVolumeSource) ProtoMessage() {} +func (*AzureDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{4} +} +func (m *AzureDiskVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AzureDiskVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AzureDiskVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_AzureDiskVolumeSource.Merge(m, src) +} +func (m *AzureDiskVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *AzureDiskVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_AzureDiskVolumeSource.DiscardUnknown(m) +} -func (m *ComponentStatusList) Reset() { *m = ComponentStatusList{} } -func (*ComponentStatusList) ProtoMessage() {} -func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +var xxx_messageInfo_AzureDiskVolumeSource proto.InternalMessageInfo -func (m *ConfigMap) Reset() { *m = ConfigMap{} } -func (*ConfigMap) ProtoMessage() {} -func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +func (m *AzureFilePersistentVolumeSource) Reset() { *m = AzureFilePersistentVolumeSource{} } +func (*AzureFilePersistentVolumeSource) ProtoMessage() {} +func (*AzureFilePersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{5} +} +func (m *AzureFilePersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AzureFilePersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AzureFilePersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_AzureFilePersistentVolumeSource.Merge(m, src) +} +func (m *AzureFilePersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *AzureFilePersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_AzureFilePersistentVolumeSource.DiscardUnknown(m) +} -func (m *ConfigMapEnvSource) Reset() { *m = ConfigMapEnvSource{} } -func (*ConfigMapEnvSource) ProtoMessage() {} -func (*ConfigMapEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +var xxx_messageInfo_AzureFilePersistentVolumeSource proto.InternalMessageInfo -func (m *ConfigMapKeySelector) Reset() { *m = ConfigMapKeySelector{} } -func (*ConfigMapKeySelector) ProtoMessage() {} -func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (m *AzureFileVolumeSource) Reset() { *m = AzureFileVolumeSource{} } +func (*AzureFileVolumeSource) ProtoMessage() {} +func (*AzureFileVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{6} +} +func (m *AzureFileVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AzureFileVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AzureFileVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_AzureFileVolumeSource.Merge(m, src) +} +func (m *AzureFileVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *AzureFileVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_AzureFileVolumeSource.DiscardUnknown(m) +} -func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } -func (*ConfigMapList) ProtoMessage() {} -func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +var xxx_messageInfo_AzureFileVolumeSource proto.InternalMessageInfo -func (m *ConfigMapNodeConfigSource) Reset() { *m = ConfigMapNodeConfigSource{} } -func (*ConfigMapNodeConfigSource) ProtoMessage() {} -func (*ConfigMapNodeConfigSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{22} +func (m *Binding) Reset() { *m = Binding{} } +func (*Binding) ProtoMessage() {} +func (*Binding) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{7} +} +func (m *Binding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Binding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Binding) XXX_Merge(src proto.Message) { + xxx_messageInfo_Binding.Merge(m, src) +} +func (m *Binding) XXX_Size() int { + return m.Size() +} +func (m *Binding) XXX_DiscardUnknown() { + xxx_messageInfo_Binding.DiscardUnknown(m) } -func (m *ConfigMapProjection) Reset() { *m = ConfigMapProjection{} } -func (*ConfigMapProjection) ProtoMessage() {} -func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +var xxx_messageInfo_Binding proto.InternalMessageInfo -func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } -func (*ConfigMapVolumeSource) ProtoMessage() {} -func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (m *CSIPersistentVolumeSource) Reset() { *m = CSIPersistentVolumeSource{} } +func (*CSIPersistentVolumeSource) ProtoMessage() {} +func (*CSIPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{8} +} +func (m *CSIPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CSIPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIPersistentVolumeSource.Merge(m, src) +} +func (m *CSIPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *CSIPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_CSIPersistentVolumeSource.DiscardUnknown(m) +} -func (m *Container) Reset() { *m = Container{} } -func (*Container) ProtoMessage() {} -func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +var xxx_messageInfo_CSIPersistentVolumeSource proto.InternalMessageInfo -func (m *ContainerImage) Reset() { *m = ContainerImage{} } -func (*ContainerImage) ProtoMessage() {} -func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (m *CSIVolumeSource) Reset() { *m = CSIVolumeSource{} } +func (*CSIVolumeSource) ProtoMessage() {} +func (*CSIVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{9} +} +func (m *CSIVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CSIVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIVolumeSource.Merge(m, src) +} +func (m *CSIVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *CSIVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_CSIVolumeSource.DiscardUnknown(m) +} -func (m *ContainerPort) Reset() { *m = ContainerPort{} } -func (*ContainerPort) ProtoMessage() {} -func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +var xxx_messageInfo_CSIVolumeSource proto.InternalMessageInfo -func (m *ContainerState) Reset() { *m = ContainerState{} } -func (*ContainerState) ProtoMessage() {} -func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +func (m *Capabilities) Reset() { *m = Capabilities{} } +func (*Capabilities) ProtoMessage() {} +func (*Capabilities) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{10} +} +func (m *Capabilities) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Capabilities) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Capabilities) XXX_Merge(src proto.Message) { + xxx_messageInfo_Capabilities.Merge(m, src) +} +func (m *Capabilities) XXX_Size() int { + return m.Size() +} +func (m *Capabilities) XXX_DiscardUnknown() { + xxx_messageInfo_Capabilities.DiscardUnknown(m) +} -func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } -func (*ContainerStateRunning) ProtoMessage() {} -func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +var xxx_messageInfo_Capabilities proto.InternalMessageInfo -func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } -func (*ContainerStateTerminated) ProtoMessage() {} -func (*ContainerStateTerminated) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{30} +func (m *CephFSPersistentVolumeSource) Reset() { *m = CephFSPersistentVolumeSource{} } +func (*CephFSPersistentVolumeSource) ProtoMessage() {} +func (*CephFSPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{11} +} +func (m *CephFSPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CephFSPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CephFSPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_CephFSPersistentVolumeSource.Merge(m, src) +} +func (m *CephFSPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *CephFSPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_CephFSPersistentVolumeSource.DiscardUnknown(m) } -func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } -func (*ContainerStateWaiting) ProtoMessage() {} -func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } +var xxx_messageInfo_CephFSPersistentVolumeSource proto.InternalMessageInfo -func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } -func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (m *CephFSVolumeSource) Reset() { *m = CephFSVolumeSource{} } +func (*CephFSVolumeSource) ProtoMessage() {} +func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{12} +} +func (m *CephFSVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CephFSVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CephFSVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_CephFSVolumeSource.Merge(m, src) +} +func (m *CephFSVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *CephFSVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_CephFSVolumeSource.DiscardUnknown(m) +} -func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } -func (*DaemonEndpoint) ProtoMessage() {} -func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +var xxx_messageInfo_CephFSVolumeSource proto.InternalMessageInfo -func (m *DownwardAPIProjection) Reset() { *m = DownwardAPIProjection{} } -func (*DownwardAPIProjection) ProtoMessage() {} -func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } +func (m *CinderPersistentVolumeSource) Reset() { *m = CinderPersistentVolumeSource{} } +func (*CinderPersistentVolumeSource) ProtoMessage() {} +func (*CinderPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{13} +} +func (m *CinderPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CinderPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CinderPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_CinderPersistentVolumeSource.Merge(m, src) +} +func (m *CinderPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *CinderPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_CinderPersistentVolumeSource.DiscardUnknown(m) +} -func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } -func (*DownwardAPIVolumeFile) ProtoMessage() {} -func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +var xxx_messageInfo_CinderPersistentVolumeSource proto.InternalMessageInfo -func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } -func (*DownwardAPIVolumeSource) ProtoMessage() {} -func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{36} +func (m *CinderVolumeSource) Reset() { *m = CinderVolumeSource{} } +func (*CinderVolumeSource) ProtoMessage() {} +func (*CinderVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{14} +} +func (m *CinderVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CinderVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CinderVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_CinderVolumeSource.Merge(m, src) +} +func (m *CinderVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *CinderVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_CinderVolumeSource.DiscardUnknown(m) } -func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } -func (*EmptyDirVolumeSource) ProtoMessage() {} -func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +var xxx_messageInfo_CinderVolumeSource proto.InternalMessageInfo -func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } -func (*EndpointAddress) ProtoMessage() {} -func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (m *ClientIPConfig) Reset() { *m = ClientIPConfig{} } +func (*ClientIPConfig) ProtoMessage() {} +func (*ClientIPConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{15} +} +func (m *ClientIPConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClientIPConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClientIPConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClientIPConfig.Merge(m, src) +} +func (m *ClientIPConfig) XXX_Size() int { + return m.Size() +} +func (m *ClientIPConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ClientIPConfig.DiscardUnknown(m) +} -func (m *EndpointPort) Reset() { *m = EndpointPort{} } -func (*EndpointPort) ProtoMessage() {} -func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } +var xxx_messageInfo_ClientIPConfig proto.InternalMessageInfo -func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } -func (*EndpointSubset) ProtoMessage() {} -func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } +func (m *ComponentCondition) Reset() { *m = ComponentCondition{} } +func (*ComponentCondition) ProtoMessage() {} +func (*ComponentCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{16} +} +func (m *ComponentCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ComponentCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ComponentCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_ComponentCondition.Merge(m, src) +} +func (m *ComponentCondition) XXX_Size() int { + return m.Size() +} +func (m *ComponentCondition) XXX_DiscardUnknown() { + xxx_messageInfo_ComponentCondition.DiscardUnknown(m) +} -func (m *Endpoints) Reset() { *m = Endpoints{} } -func (*Endpoints) ProtoMessage() {} -func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } +var xxx_messageInfo_ComponentCondition proto.InternalMessageInfo -func (m *EndpointsList) Reset() { *m = EndpointsList{} } -func (*EndpointsList) ProtoMessage() {} -func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (m *ComponentStatus) Reset() { *m = ComponentStatus{} } +func (*ComponentStatus) ProtoMessage() {} +func (*ComponentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{17} +} +func (m *ComponentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ComponentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ComponentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ComponentStatus.Merge(m, src) +} +func (m *ComponentStatus) XXX_Size() int { + return m.Size() +} +func (m *ComponentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ComponentStatus.DiscardUnknown(m) +} -func (m *EnvFromSource) Reset() { *m = EnvFromSource{} } -func (*EnvFromSource) ProtoMessage() {} -func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +var xxx_messageInfo_ComponentStatus proto.InternalMessageInfo -func (m *EnvVar) Reset() { *m = EnvVar{} } -func (*EnvVar) ProtoMessage() {} -func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } +func (m *ComponentStatusList) Reset() { *m = ComponentStatusList{} } +func (*ComponentStatusList) ProtoMessage() {} +func (*ComponentStatusList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{18} +} +func (m *ComponentStatusList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ComponentStatusList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ComponentStatusList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ComponentStatusList.Merge(m, src) +} +func (m *ComponentStatusList) XXX_Size() int { + return m.Size() +} +func (m *ComponentStatusList) XXX_DiscardUnknown() { + xxx_messageInfo_ComponentStatusList.DiscardUnknown(m) +} -func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } -func (*EnvVarSource) ProtoMessage() {} -func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } +var xxx_messageInfo_ComponentStatusList proto.InternalMessageInfo -func (m *Event) Reset() { *m = Event{} } -func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (m *ConfigMap) Reset() { *m = ConfigMap{} } +func (*ConfigMap) ProtoMessage() {} +func (*ConfigMap) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{19} +} +func (m *ConfigMap) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMap) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMap.Merge(m, src) +} +func (m *ConfigMap) XXX_Size() int { + return m.Size() +} +func (m *ConfigMap) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMap.DiscardUnknown(m) +} -func (m *EventList) Reset() { *m = EventList{} } -func (*EventList) ProtoMessage() {} -func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } +var xxx_messageInfo_ConfigMap proto.InternalMessageInfo -func (m *EventSeries) Reset() { *m = EventSeries{} } -func (*EventSeries) ProtoMessage() {} -func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } +func (m *ConfigMapEnvSource) Reset() { *m = ConfigMapEnvSource{} } +func (*ConfigMapEnvSource) ProtoMessage() {} +func (*ConfigMapEnvSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{20} +} +func (m *ConfigMapEnvSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapEnvSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapEnvSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapEnvSource.Merge(m, src) +} +func (m *ConfigMapEnvSource) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapEnvSource) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapEnvSource.DiscardUnknown(m) +} -func (m *EventSource) Reset() { *m = EventSource{} } -func (*EventSource) ProtoMessage() {} -func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } +var xxx_messageInfo_ConfigMapEnvSource proto.InternalMessageInfo -func (m *ExecAction) Reset() { *m = ExecAction{} } -func (*ExecAction) ProtoMessage() {} -func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } +func (m *ConfigMapKeySelector) Reset() { *m = ConfigMapKeySelector{} } +func (*ConfigMapKeySelector) ProtoMessage() {} +func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{21} +} +func (m *ConfigMapKeySelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapKeySelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapKeySelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapKeySelector.Merge(m, src) +} +func (m *ConfigMapKeySelector) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapKeySelector) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapKeySelector.DiscardUnknown(m) +} -func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } -func (*FCVolumeSource) ProtoMessage() {} -func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } +var xxx_messageInfo_ConfigMapKeySelector proto.InternalMessageInfo -func (m *FlexPersistentVolumeSource) Reset() { *m = FlexPersistentVolumeSource{} } -func (*FlexPersistentVolumeSource) ProtoMessage() {} -func (*FlexPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{52} +func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } +func (*ConfigMapList) ProtoMessage() {} +func (*ConfigMapList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{22} +} +func (m *ConfigMapList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapList.Merge(m, src) +} +func (m *ConfigMapList) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapList) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapList.DiscardUnknown(m) } -func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } -func (*FlexVolumeSource) ProtoMessage() {} -func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } - -func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } -func (*FlockerVolumeSource) ProtoMessage() {} -func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } +var xxx_messageInfo_ConfigMapList proto.InternalMessageInfo -func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } -func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} -func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{55} +func (m *ConfigMapNodeConfigSource) Reset() { *m = ConfigMapNodeConfigSource{} } +func (*ConfigMapNodeConfigSource) ProtoMessage() {} +func (*ConfigMapNodeConfigSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{23} +} +func (m *ConfigMapNodeConfigSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapNodeConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapNodeConfigSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapNodeConfigSource.Merge(m, src) +} +func (m *ConfigMapNodeConfigSource) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapNodeConfigSource) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapNodeConfigSource.DiscardUnknown(m) } -func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } -func (*GitRepoVolumeSource) ProtoMessage() {} -func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } +var xxx_messageInfo_ConfigMapNodeConfigSource proto.InternalMessageInfo -func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } -func (*GlusterfsVolumeSource) ProtoMessage() {} -func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } +func (m *ConfigMapProjection) Reset() { *m = ConfigMapProjection{} } +func (*ConfigMapProjection) ProtoMessage() {} +func (*ConfigMapProjection) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{24} +} +func (m *ConfigMapProjection) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapProjection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapProjection) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapProjection.Merge(m, src) +} +func (m *ConfigMapProjection) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapProjection) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapProjection.DiscardUnknown(m) +} -func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } -func (*HTTPGetAction) ProtoMessage() {} -func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } +var xxx_messageInfo_ConfigMapProjection proto.InternalMessageInfo -func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } -func (*HTTPHeader) ProtoMessage() {} -func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } +func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } +func (*ConfigMapVolumeSource) ProtoMessage() {} +func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{25} +} +func (m *ConfigMapVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapVolumeSource.Merge(m, src) +} +func (m *ConfigMapVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapVolumeSource.DiscardUnknown(m) +} -func (m *Handler) Reset() { *m = Handler{} } -func (*Handler) ProtoMessage() {} -func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } +var xxx_messageInfo_ConfigMapVolumeSource proto.InternalMessageInfo -func (m *HostAlias) Reset() { *m = HostAlias{} } -func (*HostAlias) ProtoMessage() {} -func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } +func (m *Container) Reset() { *m = Container{} } +func (*Container) ProtoMessage() {} +func (*Container) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{26} +} +func (m *Container) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Container) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Container) XXX_Merge(src proto.Message) { + xxx_messageInfo_Container.Merge(m, src) +} +func (m *Container) XXX_Size() int { + return m.Size() +} +func (m *Container) XXX_DiscardUnknown() { + xxx_messageInfo_Container.DiscardUnknown(m) +} -func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } -func (*HostPathVolumeSource) ProtoMessage() {} -func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } +var xxx_messageInfo_Container proto.InternalMessageInfo -func (m *ISCSIPersistentVolumeSource) Reset() { *m = ISCSIPersistentVolumeSource{} } -func (*ISCSIPersistentVolumeSource) ProtoMessage() {} -func (*ISCSIPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{63} +func (m *ContainerImage) Reset() { *m = ContainerImage{} } +func (*ContainerImage) ProtoMessage() {} +func (*ContainerImage) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{27} +} +func (m *ContainerImage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerImage) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerImage.Merge(m, src) +} +func (m *ContainerImage) XXX_Size() int { + return m.Size() +} +func (m *ContainerImage) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerImage.DiscardUnknown(m) } -func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } -func (*ISCSIVolumeSource) ProtoMessage() {} -func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } - -func (m *KeyToPath) Reset() { *m = KeyToPath{} } -func (*KeyToPath) ProtoMessage() {} -func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } +var xxx_messageInfo_ContainerImage proto.InternalMessageInfo -func (m *Lifecycle) Reset() { *m = Lifecycle{} } -func (*Lifecycle) ProtoMessage() {} -func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } +func (m *ContainerPort) Reset() { *m = ContainerPort{} } +func (*ContainerPort) ProtoMessage() {} +func (*ContainerPort) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{28} +} +func (m *ContainerPort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerPort) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerPort.Merge(m, src) +} +func (m *ContainerPort) XXX_Size() int { + return m.Size() +} +func (m *ContainerPort) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerPort.DiscardUnknown(m) +} -func (m *LimitRange) Reset() { *m = LimitRange{} } -func (*LimitRange) ProtoMessage() {} -func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } +var xxx_messageInfo_ContainerPort proto.InternalMessageInfo -func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } -func (*LimitRangeItem) ProtoMessage() {} -func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } +func (m *ContainerState) Reset() { *m = ContainerState{} } +func (*ContainerState) ProtoMessage() {} +func (*ContainerState) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{29} +} +func (m *ContainerState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerState) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerState.Merge(m, src) +} +func (m *ContainerState) XXX_Size() int { + return m.Size() +} +func (m *ContainerState) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerState.DiscardUnknown(m) +} -func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } -func (*LimitRangeList) ProtoMessage() {} -func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } +var xxx_messageInfo_ContainerState proto.InternalMessageInfo -func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } -func (*LimitRangeSpec) ProtoMessage() {} -func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } +func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } +func (*ContainerStateRunning) ProtoMessage() {} +func (*ContainerStateRunning) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{30} +} +func (m *ContainerStateRunning) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerStateRunning) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerStateRunning) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerStateRunning.Merge(m, src) +} +func (m *ContainerStateRunning) XXX_Size() int { + return m.Size() +} +func (m *ContainerStateRunning) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerStateRunning.DiscardUnknown(m) +} -func (m *List) Reset() { *m = List{} } -func (*List) ProtoMessage() {} -func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } +var xxx_messageInfo_ContainerStateRunning proto.InternalMessageInfo -func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } -func (*LoadBalancerIngress) ProtoMessage() {} -func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } +func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } +func (*ContainerStateTerminated) ProtoMessage() {} +func (*ContainerStateTerminated) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{31} +} +func (m *ContainerStateTerminated) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerStateTerminated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerStateTerminated) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerStateTerminated.Merge(m, src) +} +func (m *ContainerStateTerminated) XXX_Size() int { + return m.Size() +} +func (m *ContainerStateTerminated) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerStateTerminated.DiscardUnknown(m) +} -func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } -func (*LoadBalancerStatus) ProtoMessage() {} -func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } +var xxx_messageInfo_ContainerStateTerminated proto.InternalMessageInfo -func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } -func (*LocalObjectReference) ProtoMessage() {} -func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } +func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } +func (*ContainerStateWaiting) ProtoMessage() {} +func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{32} +} +func (m *ContainerStateWaiting) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerStateWaiting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerStateWaiting) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerStateWaiting.Merge(m, src) +} +func (m *ContainerStateWaiting) XXX_Size() int { + return m.Size() +} +func (m *ContainerStateWaiting) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerStateWaiting.DiscardUnknown(m) +} -func (m *LocalVolumeSource) Reset() { *m = LocalVolumeSource{} } -func (*LocalVolumeSource) ProtoMessage() {} -func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } +var xxx_messageInfo_ContainerStateWaiting proto.InternalMessageInfo -func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } -func (*NFSVolumeSource) ProtoMessage() {} -func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } +func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } +func (*ContainerStatus) ProtoMessage() {} +func (*ContainerStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{33} +} +func (m *ContainerStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ContainerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ContainerStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContainerStatus.Merge(m, src) +} +func (m *ContainerStatus) XXX_Size() int { + return m.Size() +} +func (m *ContainerStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ContainerStatus.DiscardUnknown(m) +} -func (m *Namespace) Reset() { *m = Namespace{} } -func (*Namespace) ProtoMessage() {} -func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } +var xxx_messageInfo_ContainerStatus proto.InternalMessageInfo -func (m *NamespaceList) Reset() { *m = NamespaceList{} } -func (*NamespaceList) ProtoMessage() {} -func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } +func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } +func (*DaemonEndpoint) ProtoMessage() {} +func (*DaemonEndpoint) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{34} +} +func (m *DaemonEndpoint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonEndpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonEndpoint) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonEndpoint.Merge(m, src) +} +func (m *DaemonEndpoint) XXX_Size() int { + return m.Size() +} +func (m *DaemonEndpoint) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonEndpoint.DiscardUnknown(m) +} -func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } -func (*NamespaceSpec) ProtoMessage() {} -func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } +var xxx_messageInfo_DaemonEndpoint proto.InternalMessageInfo -func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } -func (*NamespaceStatus) ProtoMessage() {} -func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } +func (m *DownwardAPIProjection) Reset() { *m = DownwardAPIProjection{} } +func (*DownwardAPIProjection) ProtoMessage() {} +func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{35} +} +func (m *DownwardAPIProjection) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DownwardAPIProjection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DownwardAPIProjection) XXX_Merge(src proto.Message) { + xxx_messageInfo_DownwardAPIProjection.Merge(m, src) +} +func (m *DownwardAPIProjection) XXX_Size() int { + return m.Size() +} +func (m *DownwardAPIProjection) XXX_DiscardUnknown() { + xxx_messageInfo_DownwardAPIProjection.DiscardUnknown(m) +} -func (m *Node) Reset() { *m = Node{} } -func (*Node) ProtoMessage() {} -func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } +var xxx_messageInfo_DownwardAPIProjection proto.InternalMessageInfo -func (m *NodeAddress) Reset() { *m = NodeAddress{} } -func (*NodeAddress) ProtoMessage() {} -func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } +func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } +func (*DownwardAPIVolumeFile) ProtoMessage() {} +func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{36} +} +func (m *DownwardAPIVolumeFile) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DownwardAPIVolumeFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DownwardAPIVolumeFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_DownwardAPIVolumeFile.Merge(m, src) +} +func (m *DownwardAPIVolumeFile) XXX_Size() int { + return m.Size() +} +func (m *DownwardAPIVolumeFile) XXX_DiscardUnknown() { + xxx_messageInfo_DownwardAPIVolumeFile.DiscardUnknown(m) +} -func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } -func (*NodeAffinity) ProtoMessage() {} -func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } +var xxx_messageInfo_DownwardAPIVolumeFile proto.InternalMessageInfo -func (m *NodeCondition) Reset() { *m = NodeCondition{} } -func (*NodeCondition) ProtoMessage() {} -func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } +func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } +func (*DownwardAPIVolumeSource) ProtoMessage() {} +func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{37} +} +func (m *DownwardAPIVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DownwardAPIVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DownwardAPIVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_DownwardAPIVolumeSource.Merge(m, src) +} +func (m *DownwardAPIVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *DownwardAPIVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_DownwardAPIVolumeSource.DiscardUnknown(m) +} -func (m *NodeConfigSource) Reset() { *m = NodeConfigSource{} } -func (*NodeConfigSource) ProtoMessage() {} -func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } +var xxx_messageInfo_DownwardAPIVolumeSource proto.InternalMessageInfo -func (m *NodeConfigStatus) Reset() { *m = NodeConfigStatus{} } -func (*NodeConfigStatus) ProtoMessage() {} -func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } +func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } +func (*EmptyDirVolumeSource) ProtoMessage() {} +func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{38} +} +func (m *EmptyDirVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EmptyDirVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EmptyDirVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_EmptyDirVolumeSource.Merge(m, src) +} +func (m *EmptyDirVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *EmptyDirVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_EmptyDirVolumeSource.DiscardUnknown(m) +} -func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } -func (*NodeDaemonEndpoints) ProtoMessage() {} -func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } +var xxx_messageInfo_EmptyDirVolumeSource proto.InternalMessageInfo -func (m *NodeList) Reset() { *m = NodeList{} } -func (*NodeList) ProtoMessage() {} -func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } +func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } +func (*EndpointAddress) ProtoMessage() {} +func (*EndpointAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{39} +} +func (m *EndpointAddress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointAddress.Merge(m, src) +} +func (m *EndpointAddress) XXX_Size() int { + return m.Size() +} +func (m *EndpointAddress) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointAddress.DiscardUnknown(m) +} -func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } -func (*NodeProxyOptions) ProtoMessage() {} -func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } +var xxx_messageInfo_EndpointAddress proto.InternalMessageInfo -func (m *NodeResources) Reset() { *m = NodeResources{} } -func (*NodeResources) ProtoMessage() {} -func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } +func (m *EndpointPort) Reset() { *m = EndpointPort{} } +func (*EndpointPort) ProtoMessage() {} +func (*EndpointPort) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{40} +} +func (m *EndpointPort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointPort) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointPort.Merge(m, src) +} +func (m *EndpointPort) XXX_Size() int { + return m.Size() +} +func (m *EndpointPort) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointPort.DiscardUnknown(m) +} -func (m *NodeSelector) Reset() { *m = NodeSelector{} } -func (*NodeSelector) ProtoMessage() {} -func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } +var xxx_messageInfo_EndpointPort proto.InternalMessageInfo -func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } -func (*NodeSelectorRequirement) ProtoMessage() {} -func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{92} +func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } +func (*EndpointSubset) ProtoMessage() {} +func (*EndpointSubset) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{41} +} +func (m *EndpointSubset) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointSubset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointSubset) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointSubset.Merge(m, src) +} +func (m *EndpointSubset) XXX_Size() int { + return m.Size() +} +func (m *EndpointSubset) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointSubset.DiscardUnknown(m) } -func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } -func (*NodeSelectorTerm) ProtoMessage() {} -func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } - -func (m *NodeSpec) Reset() { *m = NodeSpec{} } -func (*NodeSpec) ProtoMessage() {} -func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } +var xxx_messageInfo_EndpointSubset proto.InternalMessageInfo -func (m *NodeStatus) Reset() { *m = NodeStatus{} } -func (*NodeStatus) ProtoMessage() {} -func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } +func (m *Endpoints) Reset() { *m = Endpoints{} } +func (*Endpoints) ProtoMessage() {} +func (*Endpoints) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{42} +} +func (m *Endpoints) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Endpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Endpoints) XXX_Merge(src proto.Message) { + xxx_messageInfo_Endpoints.Merge(m, src) +} +func (m *Endpoints) XXX_Size() int { + return m.Size() +} +func (m *Endpoints) XXX_DiscardUnknown() { + xxx_messageInfo_Endpoints.DiscardUnknown(m) +} -func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } -func (*NodeSystemInfo) ProtoMessage() {} -func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } +var xxx_messageInfo_Endpoints proto.InternalMessageInfo -func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } -func (*ObjectFieldSelector) ProtoMessage() {} -func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } +func (m *EndpointsList) Reset() { *m = EndpointsList{} } +func (*EndpointsList) ProtoMessage() {} +func (*EndpointsList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{43} +} +func (m *EndpointsList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointsList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointsList) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointsList.Merge(m, src) +} +func (m *EndpointsList) XXX_Size() int { + return m.Size() +} +func (m *EndpointsList) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointsList.DiscardUnknown(m) +} -func (m *ObjectReference) Reset() { *m = ObjectReference{} } -func (*ObjectReference) ProtoMessage() {} -func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } +var xxx_messageInfo_EndpointsList proto.InternalMessageInfo -func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } -func (*PersistentVolume) ProtoMessage() {} -func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } +func (m *EnvFromSource) Reset() { *m = EnvFromSource{} } +func (*EnvFromSource) ProtoMessage() {} +func (*EnvFromSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{44} +} +func (m *EnvFromSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EnvFromSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EnvFromSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnvFromSource.Merge(m, src) +} +func (m *EnvFromSource) XXX_Size() int { + return m.Size() +} +func (m *EnvFromSource) XXX_DiscardUnknown() { + xxx_messageInfo_EnvFromSource.DiscardUnknown(m) +} -func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } -func (*PersistentVolumeClaim) ProtoMessage() {} -func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } +var xxx_messageInfo_EnvFromSource proto.InternalMessageInfo -func (m *PersistentVolumeClaimCondition) Reset() { *m = PersistentVolumeClaimCondition{} } -func (*PersistentVolumeClaimCondition) ProtoMessage() {} -func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{101} +func (m *EnvVar) Reset() { *m = EnvVar{} } +func (*EnvVar) ProtoMessage() {} +func (*EnvVar) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{45} } - -func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } -func (*PersistentVolumeClaimList) ProtoMessage() {} -func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{102} +func (m *EnvVar) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } - -func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } -func (*PersistentVolumeClaimSpec) ProtoMessage() {} -func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{103} +func (m *EnvVar) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } - -func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } -func (*PersistentVolumeClaimStatus) ProtoMessage() {} -func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{104} +func (m *EnvVar) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnvVar.Merge(m, src) } - -func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } -func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} -func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{105} +func (m *EnvVar) XXX_Size() int { + return m.Size() +} +func (m *EnvVar) XXX_DiscardUnknown() { + xxx_messageInfo_EnvVar.DiscardUnknown(m) } -func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } -func (*PersistentVolumeList) ProtoMessage() {} -func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} } +var xxx_messageInfo_EnvVar proto.InternalMessageInfo -func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } -func (*PersistentVolumeSource) ProtoMessage() {} -func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{107} +func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } +func (*EnvVarSource) ProtoMessage() {} +func (*EnvVarSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{46} +} +func (m *EnvVarSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EnvVarSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EnvVarSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnvVarSource.Merge(m, src) +} +func (m *EnvVarSource) XXX_Size() int { + return m.Size() +} +func (m *EnvVarSource) XXX_DiscardUnknown() { + xxx_messageInfo_EnvVarSource.DiscardUnknown(m) } -func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } -func (*PersistentVolumeSpec) ProtoMessage() {} -func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } +var xxx_messageInfo_EnvVarSource proto.InternalMessageInfo -func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } -func (*PersistentVolumeStatus) ProtoMessage() {} -func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{109} +func (m *EphemeralContainer) Reset() { *m = EphemeralContainer{} } +func (*EphemeralContainer) ProtoMessage() {} +func (*EphemeralContainer) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{47} } - -func (m *PhotonPersistentDiskVolumeSource) Reset() { *m = PhotonPersistentDiskVolumeSource{} } -func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {} -func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{110} +func (m *EphemeralContainer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EphemeralContainer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EphemeralContainer) XXX_Merge(src proto.Message) { + xxx_messageInfo_EphemeralContainer.Merge(m, src) +} +func (m *EphemeralContainer) XXX_Size() int { + return m.Size() +} +func (m *EphemeralContainer) XXX_DiscardUnknown() { + xxx_messageInfo_EphemeralContainer.DiscardUnknown(m) } -func (m *Pod) Reset() { *m = Pod{} } -func (*Pod) ProtoMessage() {} -func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } +var xxx_messageInfo_EphemeralContainer proto.InternalMessageInfo -func (m *PodAffinity) Reset() { *m = PodAffinity{} } -func (*PodAffinity) ProtoMessage() {} -func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } +func (m *EphemeralContainerCommon) Reset() { *m = EphemeralContainerCommon{} } +func (*EphemeralContainerCommon) ProtoMessage() {} +func (*EphemeralContainerCommon) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{48} +} +func (m *EphemeralContainerCommon) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EphemeralContainerCommon) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EphemeralContainerCommon) XXX_Merge(src proto.Message) { + xxx_messageInfo_EphemeralContainerCommon.Merge(m, src) +} +func (m *EphemeralContainerCommon) XXX_Size() int { + return m.Size() +} +func (m *EphemeralContainerCommon) XXX_DiscardUnknown() { + xxx_messageInfo_EphemeralContainerCommon.DiscardUnknown(m) +} -func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } -func (*PodAffinityTerm) ProtoMessage() {} -func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } +var xxx_messageInfo_EphemeralContainerCommon proto.InternalMessageInfo -func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } -func (*PodAntiAffinity) ProtoMessage() {} -func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } +func (m *EphemeralContainers) Reset() { *m = EphemeralContainers{} } +func (*EphemeralContainers) ProtoMessage() {} +func (*EphemeralContainers) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{49} +} +func (m *EphemeralContainers) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EphemeralContainers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EphemeralContainers) XXX_Merge(src proto.Message) { + xxx_messageInfo_EphemeralContainers.Merge(m, src) +} +func (m *EphemeralContainers) XXX_Size() int { + return m.Size() +} +func (m *EphemeralContainers) XXX_DiscardUnknown() { + xxx_messageInfo_EphemeralContainers.DiscardUnknown(m) +} -func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } -func (*PodAttachOptions) ProtoMessage() {} -func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } +var xxx_messageInfo_EphemeralContainers proto.InternalMessageInfo -func (m *PodCondition) Reset() { *m = PodCondition{} } -func (*PodCondition) ProtoMessage() {} -func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } +func (m *Event) Reset() { *m = Event{} } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{50} +} +func (m *Event) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Event) XXX_Merge(src proto.Message) { + xxx_messageInfo_Event.Merge(m, src) +} +func (m *Event) XXX_Size() int { + return m.Size() +} +func (m *Event) XXX_DiscardUnknown() { + xxx_messageInfo_Event.DiscardUnknown(m) +} -func (m *PodDNSConfig) Reset() { *m = PodDNSConfig{} } -func (*PodDNSConfig) ProtoMessage() {} -func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } +var xxx_messageInfo_Event proto.InternalMessageInfo -func (m *PodDNSConfigOption) Reset() { *m = PodDNSConfigOption{} } -func (*PodDNSConfigOption) ProtoMessage() {} -func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } +func (m *EventList) Reset() { *m = EventList{} } +func (*EventList) ProtoMessage() {} +func (*EventList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{51} +} +func (m *EventList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EventList) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventList.Merge(m, src) +} +func (m *EventList) XXX_Size() int { + return m.Size() +} +func (m *EventList) XXX_DiscardUnknown() { + xxx_messageInfo_EventList.DiscardUnknown(m) +} -func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } -func (*PodExecOptions) ProtoMessage() {} -func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } +var xxx_messageInfo_EventList proto.InternalMessageInfo -func (m *PodList) Reset() { *m = PodList{} } -func (*PodList) ProtoMessage() {} -func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (m *EventSeries) Reset() { *m = EventSeries{} } +func (*EventSeries) ProtoMessage() {} +func (*EventSeries) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{52} +} +func (m *EventSeries) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSeries) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EventSeries) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSeries.Merge(m, src) +} +func (m *EventSeries) XXX_Size() int { + return m.Size() +} +func (m *EventSeries) XXX_DiscardUnknown() { + xxx_messageInfo_EventSeries.DiscardUnknown(m) +} -func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } -func (*PodLogOptions) ProtoMessage() {} -func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } +var xxx_messageInfo_EventSeries proto.InternalMessageInfo -func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } -func (*PodPortForwardOptions) ProtoMessage() {} -func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } +func (m *EventSource) Reset() { *m = EventSource{} } +func (*EventSource) ProtoMessage() {} +func (*EventSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{53} +} +func (m *EventSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EventSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSource.Merge(m, src) +} +func (m *EventSource) XXX_Size() int { + return m.Size() +} +func (m *EventSource) XXX_DiscardUnknown() { + xxx_messageInfo_EventSource.DiscardUnknown(m) +} -func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } -func (*PodProxyOptions) ProtoMessage() {} -func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +var xxx_messageInfo_EventSource proto.InternalMessageInfo -func (m *PodReadinessGate) Reset() { *m = PodReadinessGate{} } -func (*PodReadinessGate) ProtoMessage() {} -func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (m *ExecAction) Reset() { *m = ExecAction{} } +func (*ExecAction) ProtoMessage() {} +func (*ExecAction) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{54} +} +func (m *ExecAction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExecAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExecAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExecAction.Merge(m, src) +} +func (m *ExecAction) XXX_Size() int { + return m.Size() +} +func (m *ExecAction) XXX_DiscardUnknown() { + xxx_messageInfo_ExecAction.DiscardUnknown(m) +} -func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } -func (*PodSecurityContext) ProtoMessage() {} -func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +var xxx_messageInfo_ExecAction proto.InternalMessageInfo -func (m *PodSignature) Reset() { *m = PodSignature{} } -func (*PodSignature) ProtoMessage() {} -func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } +func (*FCVolumeSource) ProtoMessage() {} +func (*FCVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{55} +} +func (m *FCVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FCVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FCVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_FCVolumeSource.Merge(m, src) +} +func (m *FCVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *FCVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_FCVolumeSource.DiscardUnknown(m) +} -func (m *PodSpec) Reset() { *m = PodSpec{} } -func (*PodSpec) ProtoMessage() {} -func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +var xxx_messageInfo_FCVolumeSource proto.InternalMessageInfo -func (m *PodStatus) Reset() { *m = PodStatus{} } -func (*PodStatus) ProtoMessage() {} -func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } +func (m *FlexPersistentVolumeSource) Reset() { *m = FlexPersistentVolumeSource{} } +func (*FlexPersistentVolumeSource) ProtoMessage() {} +func (*FlexPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{56} +} +func (m *FlexPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FlexPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FlexPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_FlexPersistentVolumeSource.Merge(m, src) +} +func (m *FlexPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *FlexPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_FlexPersistentVolumeSource.DiscardUnknown(m) +} -func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } -func (*PodStatusResult) ProtoMessage() {} -func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } +var xxx_messageInfo_FlexPersistentVolumeSource proto.InternalMessageInfo -func (m *PodTemplate) Reset() { *m = PodTemplate{} } -func (*PodTemplate) ProtoMessage() {} -func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } +func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } +func (*FlexVolumeSource) ProtoMessage() {} +func (*FlexVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{57} +} +func (m *FlexVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FlexVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FlexVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_FlexVolumeSource.Merge(m, src) +} +func (m *FlexVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *FlexVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_FlexVolumeSource.DiscardUnknown(m) +} -func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } -func (*PodTemplateList) ProtoMessage() {} -func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } +var xxx_messageInfo_FlexVolumeSource proto.InternalMessageInfo -func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } -func (*PodTemplateSpec) ProtoMessage() {} -func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } +func (*FlockerVolumeSource) ProtoMessage() {} +func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{58} +} +func (m *FlockerVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FlockerVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FlockerVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_FlockerVolumeSource.Merge(m, src) +} +func (m *FlockerVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *FlockerVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_FlockerVolumeSource.DiscardUnknown(m) +} -func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } -func (*PortworxVolumeSource) ProtoMessage() {} -func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +var xxx_messageInfo_FlockerVolumeSource proto.InternalMessageInfo -func (m *Preconditions) Reset() { *m = Preconditions{} } -func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } +func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} +func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{59} +} +func (m *GCEPersistentDiskVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GCEPersistentDiskVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GCEPersistentDiskVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GCEPersistentDiskVolumeSource.Merge(m, src) +} +func (m *GCEPersistentDiskVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *GCEPersistentDiskVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_GCEPersistentDiskVolumeSource.DiscardUnknown(m) +} -func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } -func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +var xxx_messageInfo_GCEPersistentDiskVolumeSource proto.InternalMessageInfo -func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } -func (*PreferredSchedulingTerm) ProtoMessage() {} -func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{136} +func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } +func (*GitRepoVolumeSource) ProtoMessage() {} +func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{60} +} +func (m *GitRepoVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitRepoVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitRepoVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitRepoVolumeSource.Merge(m, src) +} +func (m *GitRepoVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *GitRepoVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_GitRepoVolumeSource.DiscardUnknown(m) } -func (m *Probe) Reset() { *m = Probe{} } -func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +var xxx_messageInfo_GitRepoVolumeSource proto.InternalMessageInfo -func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } -func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (m *GlusterfsPersistentVolumeSource) Reset() { *m = GlusterfsPersistentVolumeSource{} } +func (*GlusterfsPersistentVolumeSource) ProtoMessage() {} +func (*GlusterfsPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{61} +} +func (m *GlusterfsPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GlusterfsPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GlusterfsPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GlusterfsPersistentVolumeSource.Merge(m, src) +} +func (m *GlusterfsPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *GlusterfsPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_GlusterfsPersistentVolumeSource.DiscardUnknown(m) +} -func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } -func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +var xxx_messageInfo_GlusterfsPersistentVolumeSource proto.InternalMessageInfo -func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } -func (*RBDPersistentVolumeSource) ProtoMessage() {} -func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{140} +func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } +func (*GlusterfsVolumeSource) ProtoMessage() {} +func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{62} +} +func (m *GlusterfsVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GlusterfsVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GlusterfsVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GlusterfsVolumeSource.Merge(m, src) +} +func (m *GlusterfsVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *GlusterfsVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_GlusterfsVolumeSource.DiscardUnknown(m) } -func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } -func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +var xxx_messageInfo_GlusterfsVolumeSource proto.InternalMessageInfo -func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } -func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } +func (*HTTPGetAction) ProtoMessage() {} +func (*HTTPGetAction) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{63} +} +func (m *HTTPGetAction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HTTPGetAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HTTPGetAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTTPGetAction.Merge(m, src) +} +func (m *HTTPGetAction) XXX_Size() int { + return m.Size() +} +func (m *HTTPGetAction) XXX_DiscardUnknown() { + xxx_messageInfo_HTTPGetAction.DiscardUnknown(m) +} -func (m *ReplicationController) Reset() { *m = ReplicationController{} } -func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +var xxx_messageInfo_HTTPGetAction proto.InternalMessageInfo -func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } -func (*ReplicationControllerCondition) ProtoMessage() {} -func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{144} +func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } +func (*HTTPHeader) ProtoMessage() {} +func (*HTTPHeader) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{64} +} +func (m *HTTPHeader) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HTTPHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HTTPHeader) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTTPHeader.Merge(m, src) +} +func (m *HTTPHeader) XXX_Size() int { + return m.Size() +} +func (m *HTTPHeader) XXX_DiscardUnknown() { + xxx_messageInfo_HTTPHeader.DiscardUnknown(m) } -func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } -func (*ReplicationControllerList) ProtoMessage() {} -func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{145} +var xxx_messageInfo_HTTPHeader proto.InternalMessageInfo + +func (m *Handler) Reset() { *m = Handler{} } +func (*Handler) ProtoMessage() {} +func (*Handler) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{65} +} +func (m *Handler) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Handler) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Handler) XXX_Merge(src proto.Message) { + xxx_messageInfo_Handler.Merge(m, src) +} +func (m *Handler) XXX_Size() int { + return m.Size() +} +func (m *Handler) XXX_DiscardUnknown() { + xxx_messageInfo_Handler.DiscardUnknown(m) } -func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } -func (*ReplicationControllerSpec) ProtoMessage() {} -func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{146} +var xxx_messageInfo_Handler proto.InternalMessageInfo + +func (m *HostAlias) Reset() { *m = HostAlias{} } +func (*HostAlias) ProtoMessage() {} +func (*HostAlias) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{66} +} +func (m *HostAlias) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostAlias) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HostAlias) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostAlias.Merge(m, src) +} +func (m *HostAlias) XXX_Size() int { + return m.Size() +} +func (m *HostAlias) XXX_DiscardUnknown() { + xxx_messageInfo_HostAlias.DiscardUnknown(m) } -func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } -func (*ReplicationControllerStatus) ProtoMessage() {} -func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{147} +var xxx_messageInfo_HostAlias proto.InternalMessageInfo + +func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } +func (*HostPathVolumeSource) ProtoMessage() {} +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{67} +} +func (m *HostPathVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostPathVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HostPathVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostPathVolumeSource.Merge(m, src) +} +func (m *HostPathVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *HostPathVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_HostPathVolumeSource.DiscardUnknown(m) } -func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } -func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } +var xxx_messageInfo_HostPathVolumeSource proto.InternalMessageInfo -func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } -func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (m *ISCSIPersistentVolumeSource) Reset() { *m = ISCSIPersistentVolumeSource{} } +func (*ISCSIPersistentVolumeSource) ProtoMessage() {} +func (*ISCSIPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{68} +} +func (m *ISCSIPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ISCSIPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ISCSIPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ISCSIPersistentVolumeSource.Merge(m, src) +} +func (m *ISCSIPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *ISCSIPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_ISCSIPersistentVolumeSource.DiscardUnknown(m) +} -func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } -func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +var xxx_messageInfo_ISCSIPersistentVolumeSource proto.InternalMessageInfo -func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } -func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } +func (*ISCSIVolumeSource) ProtoMessage() {} +func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{69} +} +func (m *ISCSIVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ISCSIVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ISCSIVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ISCSIVolumeSource.Merge(m, src) +} +func (m *ISCSIVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *ISCSIVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_ISCSIVolumeSource.DiscardUnknown(m) +} -func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } -func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +var xxx_messageInfo_ISCSIVolumeSource proto.InternalMessageInfo -func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } -func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (m *KeyToPath) Reset() { *m = KeyToPath{} } +func (*KeyToPath) ProtoMessage() {} +func (*KeyToPath) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{70} +} +func (m *KeyToPath) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KeyToPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *KeyToPath) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyToPath.Merge(m, src) +} +func (m *KeyToPath) XXX_Size() int { + return m.Size() +} +func (m *KeyToPath) XXX_DiscardUnknown() { + xxx_messageInfo_KeyToPath.DiscardUnknown(m) +} -func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } -func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +var xxx_messageInfo_KeyToPath proto.InternalMessageInfo -func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } -func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} -func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{155} +func (m *Lifecycle) Reset() { *m = Lifecycle{} } +func (*Lifecycle) ProtoMessage() {} +func (*Lifecycle) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{71} +} +func (m *Lifecycle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Lifecycle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Lifecycle) XXX_Merge(src proto.Message) { + xxx_messageInfo_Lifecycle.Merge(m, src) +} +func (m *Lifecycle) XXX_Size() int { + return m.Size() +} +func (m *Lifecycle) XXX_DiscardUnknown() { + xxx_messageInfo_Lifecycle.DiscardUnknown(m) } -func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } -func (*ScaleIOVolumeSource) ProtoMessage() {} -func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +var xxx_messageInfo_Lifecycle proto.InternalMessageInfo + +func (m *LimitRange) Reset() { *m = LimitRange{} } +func (*LimitRange) ProtoMessage() {} +func (*LimitRange) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{72} +} +func (m *LimitRange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LimitRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LimitRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_LimitRange.Merge(m, src) +} +func (m *LimitRange) XXX_Size() int { + return m.Size() +} +func (m *LimitRange) XXX_DiscardUnknown() { + xxx_messageInfo_LimitRange.DiscardUnknown(m) +} -func (m *ScopeSelector) Reset() { *m = ScopeSelector{} } -func (*ScopeSelector) ProtoMessage() {} -func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +var xxx_messageInfo_LimitRange proto.InternalMessageInfo -func (m *ScopedResourceSelectorRequirement) Reset() { *m = ScopedResourceSelectorRequirement{} } -func (*ScopedResourceSelectorRequirement) ProtoMessage() {} -func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{158} +func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } +func (*LimitRangeItem) ProtoMessage() {} +func (*LimitRangeItem) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{73} +} +func (m *LimitRangeItem) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LimitRangeItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LimitRangeItem) XXX_Merge(src proto.Message) { + xxx_messageInfo_LimitRangeItem.Merge(m, src) +} +func (m *LimitRangeItem) XXX_Size() int { + return m.Size() +} +func (m *LimitRangeItem) XXX_DiscardUnknown() { + xxx_messageInfo_LimitRangeItem.DiscardUnknown(m) } -func (m *Secret) Reset() { *m = Secret{} } -func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } +var xxx_messageInfo_LimitRangeItem proto.InternalMessageInfo -func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } -func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } +func (*LimitRangeList) ProtoMessage() {} +func (*LimitRangeList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{74} +} +func (m *LimitRangeList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LimitRangeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LimitRangeList) XXX_Merge(src proto.Message) { + xxx_messageInfo_LimitRangeList.Merge(m, src) +} +func (m *LimitRangeList) XXX_Size() int { + return m.Size() +} +func (m *LimitRangeList) XXX_DiscardUnknown() { + xxx_messageInfo_LimitRangeList.DiscardUnknown(m) +} -func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } -func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } +var xxx_messageInfo_LimitRangeList proto.InternalMessageInfo -func (m *SecretList) Reset() { *m = SecretList{} } -func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } +func (*LimitRangeSpec) ProtoMessage() {} +func (*LimitRangeSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{75} +} +func (m *LimitRangeSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LimitRangeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LimitRangeSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_LimitRangeSpec.Merge(m, src) +} +func (m *LimitRangeSpec) XXX_Size() int { + return m.Size() +} +func (m *LimitRangeSpec) XXX_DiscardUnknown() { + xxx_messageInfo_LimitRangeSpec.DiscardUnknown(m) +} -func (m *SecretProjection) Reset() { *m = SecretProjection{} } -func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } +var xxx_messageInfo_LimitRangeSpec proto.InternalMessageInfo -func (m *SecretReference) Reset() { *m = SecretReference{} } -func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } +func (m *List) Reset() { *m = List{} } +func (*List) ProtoMessage() {} +func (*List) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{76} +} +func (m *List) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *List) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *List) XXX_Merge(src proto.Message) { + xxx_messageInfo_List.Merge(m, src) +} +func (m *List) XXX_Size() int { + return m.Size() +} +func (m *List) XXX_DiscardUnknown() { + xxx_messageInfo_List.DiscardUnknown(m) +} -func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } -func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } +var xxx_messageInfo_List proto.InternalMessageInfo -func (m *SecurityContext) Reset() { *m = SecurityContext{} } -func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } +func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } +func (*LoadBalancerIngress) ProtoMessage() {} +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{77} +} +func (m *LoadBalancerIngress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LoadBalancerIngress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LoadBalancerIngress) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadBalancerIngress.Merge(m, src) +} +func (m *LoadBalancerIngress) XXX_Size() int { + return m.Size() +} +func (m *LoadBalancerIngress) XXX_DiscardUnknown() { + xxx_messageInfo_LoadBalancerIngress.DiscardUnknown(m) +} -func (m *SerializedReference) Reset() { *m = SerializedReference{} } -func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } +var xxx_messageInfo_LoadBalancerIngress proto.InternalMessageInfo -func (m *Service) Reset() { *m = Service{} } -func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } +func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } +func (*LoadBalancerStatus) ProtoMessage() {} +func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{78} +} +func (m *LoadBalancerStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LoadBalancerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LoadBalancerStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadBalancerStatus.Merge(m, src) +} +func (m *LoadBalancerStatus) XXX_Size() int { + return m.Size() +} +func (m *LoadBalancerStatus) XXX_DiscardUnknown() { + xxx_messageInfo_LoadBalancerStatus.DiscardUnknown(m) +} -func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } -func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } +var xxx_messageInfo_LoadBalancerStatus proto.InternalMessageInfo -func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } -func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } +func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } +func (*LocalObjectReference) ProtoMessage() {} +func (*LocalObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{79} +} +func (m *LocalObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LocalObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LocalObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalObjectReference.Merge(m, src) +} +func (m *LocalObjectReference) XXX_Size() int { + return m.Size() +} +func (m *LocalObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_LocalObjectReference.DiscardUnknown(m) +} -func (m *ServiceAccountTokenProjection) Reset() { *m = ServiceAccountTokenProjection{} } -func (*ServiceAccountTokenProjection) ProtoMessage() {} -func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{171} +var xxx_messageInfo_LocalObjectReference proto.InternalMessageInfo + +func (m *LocalVolumeSource) Reset() { *m = LocalVolumeSource{} } +func (*LocalVolumeSource) ProtoMessage() {} +func (*LocalVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{80} +} +func (m *LocalVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LocalVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LocalVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalVolumeSource.Merge(m, src) +} +func (m *LocalVolumeSource) XXX_Size() int { + return m.Size() } +func (m *LocalVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_LocalVolumeSource.DiscardUnknown(m) +} + +var xxx_messageInfo_LocalVolumeSource proto.InternalMessageInfo -func (m *ServiceList) Reset() { *m = ServiceList{} } -func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } +func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } +func (*NFSVolumeSource) ProtoMessage() {} +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{81} +} +func (m *NFSVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NFSVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NFSVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_NFSVolumeSource.Merge(m, src) +} +func (m *NFSVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *NFSVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_NFSVolumeSource.DiscardUnknown(m) +} -func (m *ServicePort) Reset() { *m = ServicePort{} } -func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } +var xxx_messageInfo_NFSVolumeSource proto.InternalMessageInfo -func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } -func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } +func (m *Namespace) Reset() { *m = Namespace{} } +func (*Namespace) ProtoMessage() {} +func (*Namespace) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{82} +} +func (m *Namespace) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Namespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Namespace) XXX_Merge(src proto.Message) { + xxx_messageInfo_Namespace.Merge(m, src) +} +func (m *Namespace) XXX_Size() int { + return m.Size() +} +func (m *Namespace) XXX_DiscardUnknown() { + xxx_messageInfo_Namespace.DiscardUnknown(m) +} -func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } -func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } +var xxx_messageInfo_Namespace proto.InternalMessageInfo -func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } -func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } +func (m *NamespaceCondition) Reset() { *m = NamespaceCondition{} } +func (*NamespaceCondition) ProtoMessage() {} +func (*NamespaceCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{83} +} +func (m *NamespaceCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespaceCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespaceCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespaceCondition.Merge(m, src) +} +func (m *NamespaceCondition) XXX_Size() int { + return m.Size() +} +func (m *NamespaceCondition) XXX_DiscardUnknown() { + xxx_messageInfo_NamespaceCondition.DiscardUnknown(m) +} -func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } -func (*SessionAffinityConfig) ProtoMessage() {} -func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } +var xxx_messageInfo_NamespaceCondition proto.InternalMessageInfo -func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } -func (*StorageOSPersistentVolumeSource) ProtoMessage() {} -func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{178} +func (m *NamespaceList) Reset() { *m = NamespaceList{} } +func (*NamespaceList) ProtoMessage() {} +func (*NamespaceList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{84} +} +func (m *NamespaceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespaceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespaceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespaceList.Merge(m, src) +} +func (m *NamespaceList) XXX_Size() int { + return m.Size() +} +func (m *NamespaceList) XXX_DiscardUnknown() { + xxx_messageInfo_NamespaceList.DiscardUnknown(m) } -func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } -func (*StorageOSVolumeSource) ProtoMessage() {} -func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } +var xxx_messageInfo_NamespaceList proto.InternalMessageInfo -func (m *Sysctl) Reset() { *m = Sysctl{} } -func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } +func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } +func (*NamespaceSpec) ProtoMessage() {} +func (*NamespaceSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{85} +} +func (m *NamespaceSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespaceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespaceSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespaceSpec.Merge(m, src) +} +func (m *NamespaceSpec) XXX_Size() int { + return m.Size() +} +func (m *NamespaceSpec) XXX_DiscardUnknown() { + xxx_messageInfo_NamespaceSpec.DiscardUnknown(m) +} -func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } -func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } +var xxx_messageInfo_NamespaceSpec proto.InternalMessageInfo -func (m *Taint) Reset() { *m = Taint{} } -func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } +func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } +func (*NamespaceStatus) ProtoMessage() {} +func (*NamespaceStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{86} +} +func (m *NamespaceStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamespaceStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamespaceStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamespaceStatus.Merge(m, src) +} +func (m *NamespaceStatus) XXX_Size() int { + return m.Size() +} +func (m *NamespaceStatus) XXX_DiscardUnknown() { + xxx_messageInfo_NamespaceStatus.DiscardUnknown(m) +} -func (m *Toleration) Reset() { *m = Toleration{} } -func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } +var xxx_messageInfo_NamespaceStatus proto.InternalMessageInfo -func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelectorLabelRequirement{} } -func (*TopologySelectorLabelRequirement) ProtoMessage() {} -func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{184} +func (m *Node) Reset() { *m = Node{} } +func (*Node) ProtoMessage() {} +func (*Node) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{87} +} +func (m *Node) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Node) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Node) XXX_Merge(src proto.Message) { + xxx_messageInfo_Node.Merge(m, src) +} +func (m *Node) XXX_Size() int { + return m.Size() +} +func (m *Node) XXX_DiscardUnknown() { + xxx_messageInfo_Node.DiscardUnknown(m) } -func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} } -func (*TopologySelectorTerm) ProtoMessage() {} -func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} } +var xxx_messageInfo_Node proto.InternalMessageInfo -func (m *Volume) Reset() { *m = Volume{} } -func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} } +func (m *NodeAddress) Reset() { *m = NodeAddress{} } +func (*NodeAddress) ProtoMessage() {} +func (*NodeAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{88} +} +func (m *NodeAddress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NodeAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeAddress.Merge(m, src) +} +func (m *NodeAddress) XXX_Size() int { + return m.Size() +} +func (m *NodeAddress) XXX_DiscardUnknown() { + xxx_messageInfo_NodeAddress.DiscardUnknown(m) +} -func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } -func (*VolumeDevice) ProtoMessage() {} -func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} } +var xxx_messageInfo_NodeAddress proto.InternalMessageInfo -func (m *VolumeMount) Reset() { *m = VolumeMount{} } -func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} } +func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } +func (*NodeAffinity) ProtoMessage() {} +func (*NodeAffinity) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{89} +} +func (m *NodeAffinity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeAffinity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NodeAffinity) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeAffinity.Merge(m, src) +} +func (m *NodeAffinity) XXX_Size() int { + return m.Size() +} +func (m *NodeAffinity) XXX_DiscardUnknown() { + xxx_messageInfo_NodeAffinity.DiscardUnknown(m) +} -func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } -func (*VolumeNodeAffinity) ProtoMessage() {} -func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} } +var xxx_messageInfo_NodeAffinity proto.InternalMessageInfo -func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } -func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } +func (m *NodeCondition) Reset() { *m = NodeCondition{} } +func (*NodeCondition) ProtoMessage() {} +func (*NodeCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{90} +} +func (m *NodeCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NodeCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeCondition.Merge(m, src) +} +func (m *NodeCondition) XXX_Size() int { + return m.Size() +} +func (m *NodeCondition) XXX_DiscardUnknown() { + xxx_messageInfo_NodeCondition.DiscardUnknown(m) +} -func (m *VolumeSource) Reset() { *m = VolumeSource{} } -func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} } +var xxx_messageInfo_NodeCondition proto.InternalMessageInfo -func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } -func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} -func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{192} +func (m *NodeConfigSource) Reset() { *m = NodeConfigSource{} } +func (*NodeConfigSource) ProtoMessage() {} +func (*NodeConfigSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{91} +} +func (m *NodeConfigSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeConfigSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NodeConfigSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeConfigSource.Merge(m, src) +} +func (m *NodeConfigSource) XXX_Size() int { + return m.Size() +} +func (m *NodeConfigSource) XXX_DiscardUnknown() { + xxx_messageInfo_NodeConfigSource.DiscardUnknown(m) } -func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } -func (*WeightedPodAffinityTerm) ProtoMessage() {} -func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{193} +var xxx_messageInfo_NodeConfigSource proto.InternalMessageInfo + +func (m *NodeConfigStatus) Reset() { *m = NodeConfigStatus{} } +func (*NodeConfigStatus) ProtoMessage() {} +func (*NodeConfigStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{92} +} +func (m *NodeConfigStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeConfigStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NodeConfigStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeConfigStatus.Merge(m, src) +} +func (m *NodeConfigStatus) XXX_Size() int { + return m.Size() +} +func (m *NodeConfigStatus) XXX_DiscardUnknown() { + xxx_messageInfo_NodeConfigStatus.DiscardUnknown(m) } -func init() { - proto.RegisterType((*AWSElasticBlockStoreVolumeSource)(nil), "k8s.io.api.core.v1.AWSElasticBlockStoreVolumeSource") - proto.RegisterType((*Affinity)(nil), "k8s.io.api.core.v1.Affinity") - proto.RegisterType((*AttachedVolume)(nil), "k8s.io.api.core.v1.AttachedVolume") - proto.RegisterType((*AvoidPods)(nil), "k8s.io.api.core.v1.AvoidPods") - proto.RegisterType((*AzureDiskVolumeSource)(nil), "k8s.io.api.core.v1.AzureDiskVolumeSource") - proto.RegisterType((*AzureFilePersistentVolumeSource)(nil), "k8s.io.api.core.v1.AzureFilePersistentVolumeSource") - proto.RegisterType((*AzureFileVolumeSource)(nil), "k8s.io.api.core.v1.AzureFileVolumeSource") - proto.RegisterType((*Binding)(nil), "k8s.io.api.core.v1.Binding") - proto.RegisterType((*CSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CSIPersistentVolumeSource") - proto.RegisterType((*Capabilities)(nil), "k8s.io.api.core.v1.Capabilities") - proto.RegisterType((*CephFSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CephFSPersistentVolumeSource") - proto.RegisterType((*CephFSVolumeSource)(nil), "k8s.io.api.core.v1.CephFSVolumeSource") - proto.RegisterType((*CinderPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CinderPersistentVolumeSource") - proto.RegisterType((*CinderVolumeSource)(nil), "k8s.io.api.core.v1.CinderVolumeSource") - proto.RegisterType((*ClientIPConfig)(nil), "k8s.io.api.core.v1.ClientIPConfig") - proto.RegisterType((*ComponentCondition)(nil), "k8s.io.api.core.v1.ComponentCondition") - proto.RegisterType((*ComponentStatus)(nil), "k8s.io.api.core.v1.ComponentStatus") - proto.RegisterType((*ComponentStatusList)(nil), "k8s.io.api.core.v1.ComponentStatusList") - proto.RegisterType((*ConfigMap)(nil), "k8s.io.api.core.v1.ConfigMap") - proto.RegisterType((*ConfigMapEnvSource)(nil), "k8s.io.api.core.v1.ConfigMapEnvSource") - proto.RegisterType((*ConfigMapKeySelector)(nil), "k8s.io.api.core.v1.ConfigMapKeySelector") - proto.RegisterType((*ConfigMapList)(nil), "k8s.io.api.core.v1.ConfigMapList") - proto.RegisterType((*ConfigMapNodeConfigSource)(nil), "k8s.io.api.core.v1.ConfigMapNodeConfigSource") - proto.RegisterType((*ConfigMapProjection)(nil), "k8s.io.api.core.v1.ConfigMapProjection") - proto.RegisterType((*ConfigMapVolumeSource)(nil), "k8s.io.api.core.v1.ConfigMapVolumeSource") - proto.RegisterType((*Container)(nil), "k8s.io.api.core.v1.Container") - proto.RegisterType((*ContainerImage)(nil), "k8s.io.api.core.v1.ContainerImage") - proto.RegisterType((*ContainerPort)(nil), "k8s.io.api.core.v1.ContainerPort") - proto.RegisterType((*ContainerState)(nil), "k8s.io.api.core.v1.ContainerState") - proto.RegisterType((*ContainerStateRunning)(nil), "k8s.io.api.core.v1.ContainerStateRunning") - proto.RegisterType((*ContainerStateTerminated)(nil), "k8s.io.api.core.v1.ContainerStateTerminated") - proto.RegisterType((*ContainerStateWaiting)(nil), "k8s.io.api.core.v1.ContainerStateWaiting") - proto.RegisterType((*ContainerStatus)(nil), "k8s.io.api.core.v1.ContainerStatus") - proto.RegisterType((*DaemonEndpoint)(nil), "k8s.io.api.core.v1.DaemonEndpoint") - proto.RegisterType((*DownwardAPIProjection)(nil), "k8s.io.api.core.v1.DownwardAPIProjection") - proto.RegisterType((*DownwardAPIVolumeFile)(nil), "k8s.io.api.core.v1.DownwardAPIVolumeFile") - proto.RegisterType((*DownwardAPIVolumeSource)(nil), "k8s.io.api.core.v1.DownwardAPIVolumeSource") - proto.RegisterType((*EmptyDirVolumeSource)(nil), "k8s.io.api.core.v1.EmptyDirVolumeSource") - proto.RegisterType((*EndpointAddress)(nil), "k8s.io.api.core.v1.EndpointAddress") - proto.RegisterType((*EndpointPort)(nil), "k8s.io.api.core.v1.EndpointPort") - proto.RegisterType((*EndpointSubset)(nil), "k8s.io.api.core.v1.EndpointSubset") - proto.RegisterType((*Endpoints)(nil), "k8s.io.api.core.v1.Endpoints") - proto.RegisterType((*EndpointsList)(nil), "k8s.io.api.core.v1.EndpointsList") - proto.RegisterType((*EnvFromSource)(nil), "k8s.io.api.core.v1.EnvFromSource") - proto.RegisterType((*EnvVar)(nil), "k8s.io.api.core.v1.EnvVar") - proto.RegisterType((*EnvVarSource)(nil), "k8s.io.api.core.v1.EnvVarSource") - proto.RegisterType((*Event)(nil), "k8s.io.api.core.v1.Event") - proto.RegisterType((*EventList)(nil), "k8s.io.api.core.v1.EventList") - proto.RegisterType((*EventSeries)(nil), "k8s.io.api.core.v1.EventSeries") - proto.RegisterType((*EventSource)(nil), "k8s.io.api.core.v1.EventSource") - proto.RegisterType((*ExecAction)(nil), "k8s.io.api.core.v1.ExecAction") - proto.RegisterType((*FCVolumeSource)(nil), "k8s.io.api.core.v1.FCVolumeSource") - proto.RegisterType((*FlexPersistentVolumeSource)(nil), "k8s.io.api.core.v1.FlexPersistentVolumeSource") - proto.RegisterType((*FlexVolumeSource)(nil), "k8s.io.api.core.v1.FlexVolumeSource") - proto.RegisterType((*FlockerVolumeSource)(nil), "k8s.io.api.core.v1.FlockerVolumeSource") - proto.RegisterType((*GCEPersistentDiskVolumeSource)(nil), "k8s.io.api.core.v1.GCEPersistentDiskVolumeSource") - proto.RegisterType((*GitRepoVolumeSource)(nil), "k8s.io.api.core.v1.GitRepoVolumeSource") - proto.RegisterType((*GlusterfsVolumeSource)(nil), "k8s.io.api.core.v1.GlusterfsVolumeSource") - proto.RegisterType((*HTTPGetAction)(nil), "k8s.io.api.core.v1.HTTPGetAction") - proto.RegisterType((*HTTPHeader)(nil), "k8s.io.api.core.v1.HTTPHeader") - proto.RegisterType((*Handler)(nil), "k8s.io.api.core.v1.Handler") - proto.RegisterType((*HostAlias)(nil), "k8s.io.api.core.v1.HostAlias") - proto.RegisterType((*HostPathVolumeSource)(nil), "k8s.io.api.core.v1.HostPathVolumeSource") - proto.RegisterType((*ISCSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.ISCSIPersistentVolumeSource") - proto.RegisterType((*ISCSIVolumeSource)(nil), "k8s.io.api.core.v1.ISCSIVolumeSource") - proto.RegisterType((*KeyToPath)(nil), "k8s.io.api.core.v1.KeyToPath") - proto.RegisterType((*Lifecycle)(nil), "k8s.io.api.core.v1.Lifecycle") - proto.RegisterType((*LimitRange)(nil), "k8s.io.api.core.v1.LimitRange") - proto.RegisterType((*LimitRangeItem)(nil), "k8s.io.api.core.v1.LimitRangeItem") - proto.RegisterType((*LimitRangeList)(nil), "k8s.io.api.core.v1.LimitRangeList") - proto.RegisterType((*LimitRangeSpec)(nil), "k8s.io.api.core.v1.LimitRangeSpec") - proto.RegisterType((*List)(nil), "k8s.io.api.core.v1.List") - proto.RegisterType((*LoadBalancerIngress)(nil), "k8s.io.api.core.v1.LoadBalancerIngress") - proto.RegisterType((*LoadBalancerStatus)(nil), "k8s.io.api.core.v1.LoadBalancerStatus") - proto.RegisterType((*LocalObjectReference)(nil), "k8s.io.api.core.v1.LocalObjectReference") - proto.RegisterType((*LocalVolumeSource)(nil), "k8s.io.api.core.v1.LocalVolumeSource") - proto.RegisterType((*NFSVolumeSource)(nil), "k8s.io.api.core.v1.NFSVolumeSource") - proto.RegisterType((*Namespace)(nil), "k8s.io.api.core.v1.Namespace") - proto.RegisterType((*NamespaceList)(nil), "k8s.io.api.core.v1.NamespaceList") - proto.RegisterType((*NamespaceSpec)(nil), "k8s.io.api.core.v1.NamespaceSpec") - proto.RegisterType((*NamespaceStatus)(nil), "k8s.io.api.core.v1.NamespaceStatus") - proto.RegisterType((*Node)(nil), "k8s.io.api.core.v1.Node") - proto.RegisterType((*NodeAddress)(nil), "k8s.io.api.core.v1.NodeAddress") - proto.RegisterType((*NodeAffinity)(nil), "k8s.io.api.core.v1.NodeAffinity") - proto.RegisterType((*NodeCondition)(nil), "k8s.io.api.core.v1.NodeCondition") - proto.RegisterType((*NodeConfigSource)(nil), "k8s.io.api.core.v1.NodeConfigSource") - proto.RegisterType((*NodeConfigStatus)(nil), "k8s.io.api.core.v1.NodeConfigStatus") - proto.RegisterType((*NodeDaemonEndpoints)(nil), "k8s.io.api.core.v1.NodeDaemonEndpoints") - proto.RegisterType((*NodeList)(nil), "k8s.io.api.core.v1.NodeList") - proto.RegisterType((*NodeProxyOptions)(nil), "k8s.io.api.core.v1.NodeProxyOptions") - proto.RegisterType((*NodeResources)(nil), "k8s.io.api.core.v1.NodeResources") - proto.RegisterType((*NodeSelector)(nil), "k8s.io.api.core.v1.NodeSelector") - proto.RegisterType((*NodeSelectorRequirement)(nil), "k8s.io.api.core.v1.NodeSelectorRequirement") - proto.RegisterType((*NodeSelectorTerm)(nil), "k8s.io.api.core.v1.NodeSelectorTerm") - proto.RegisterType((*NodeSpec)(nil), "k8s.io.api.core.v1.NodeSpec") - proto.RegisterType((*NodeStatus)(nil), "k8s.io.api.core.v1.NodeStatus") - proto.RegisterType((*NodeSystemInfo)(nil), "k8s.io.api.core.v1.NodeSystemInfo") - proto.RegisterType((*ObjectFieldSelector)(nil), "k8s.io.api.core.v1.ObjectFieldSelector") - proto.RegisterType((*ObjectReference)(nil), "k8s.io.api.core.v1.ObjectReference") - proto.RegisterType((*PersistentVolume)(nil), "k8s.io.api.core.v1.PersistentVolume") - proto.RegisterType((*PersistentVolumeClaim)(nil), "k8s.io.api.core.v1.PersistentVolumeClaim") - proto.RegisterType((*PersistentVolumeClaimCondition)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimCondition") - proto.RegisterType((*PersistentVolumeClaimList)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimList") - proto.RegisterType((*PersistentVolumeClaimSpec)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimSpec") - proto.RegisterType((*PersistentVolumeClaimStatus)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimStatus") - proto.RegisterType((*PersistentVolumeClaimVolumeSource)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimVolumeSource") - proto.RegisterType((*PersistentVolumeList)(nil), "k8s.io.api.core.v1.PersistentVolumeList") - proto.RegisterType((*PersistentVolumeSource)(nil), "k8s.io.api.core.v1.PersistentVolumeSource") - proto.RegisterType((*PersistentVolumeSpec)(nil), "k8s.io.api.core.v1.PersistentVolumeSpec") - proto.RegisterType((*PersistentVolumeStatus)(nil), "k8s.io.api.core.v1.PersistentVolumeStatus") - proto.RegisterType((*PhotonPersistentDiskVolumeSource)(nil), "k8s.io.api.core.v1.PhotonPersistentDiskVolumeSource") - proto.RegisterType((*Pod)(nil), "k8s.io.api.core.v1.Pod") - proto.RegisterType((*PodAffinity)(nil), "k8s.io.api.core.v1.PodAffinity") - proto.RegisterType((*PodAffinityTerm)(nil), "k8s.io.api.core.v1.PodAffinityTerm") - proto.RegisterType((*PodAntiAffinity)(nil), "k8s.io.api.core.v1.PodAntiAffinity") - proto.RegisterType((*PodAttachOptions)(nil), "k8s.io.api.core.v1.PodAttachOptions") - proto.RegisterType((*PodCondition)(nil), "k8s.io.api.core.v1.PodCondition") - proto.RegisterType((*PodDNSConfig)(nil), "k8s.io.api.core.v1.PodDNSConfig") - proto.RegisterType((*PodDNSConfigOption)(nil), "k8s.io.api.core.v1.PodDNSConfigOption") - proto.RegisterType((*PodExecOptions)(nil), "k8s.io.api.core.v1.PodExecOptions") - proto.RegisterType((*PodList)(nil), "k8s.io.api.core.v1.PodList") - proto.RegisterType((*PodLogOptions)(nil), "k8s.io.api.core.v1.PodLogOptions") - proto.RegisterType((*PodPortForwardOptions)(nil), "k8s.io.api.core.v1.PodPortForwardOptions") - proto.RegisterType((*PodProxyOptions)(nil), "k8s.io.api.core.v1.PodProxyOptions") - proto.RegisterType((*PodReadinessGate)(nil), "k8s.io.api.core.v1.PodReadinessGate") - proto.RegisterType((*PodSecurityContext)(nil), "k8s.io.api.core.v1.PodSecurityContext") - proto.RegisterType((*PodSignature)(nil), "k8s.io.api.core.v1.PodSignature") - proto.RegisterType((*PodSpec)(nil), "k8s.io.api.core.v1.PodSpec") - proto.RegisterType((*PodStatus)(nil), "k8s.io.api.core.v1.PodStatus") - proto.RegisterType((*PodStatusResult)(nil), "k8s.io.api.core.v1.PodStatusResult") - proto.RegisterType((*PodTemplate)(nil), "k8s.io.api.core.v1.PodTemplate") - proto.RegisterType((*PodTemplateList)(nil), "k8s.io.api.core.v1.PodTemplateList") - proto.RegisterType((*PodTemplateSpec)(nil), "k8s.io.api.core.v1.PodTemplateSpec") - proto.RegisterType((*PortworxVolumeSource)(nil), "k8s.io.api.core.v1.PortworxVolumeSource") - proto.RegisterType((*Preconditions)(nil), "k8s.io.api.core.v1.Preconditions") - proto.RegisterType((*PreferAvoidPodsEntry)(nil), "k8s.io.api.core.v1.PreferAvoidPodsEntry") - proto.RegisterType((*PreferredSchedulingTerm)(nil), "k8s.io.api.core.v1.PreferredSchedulingTerm") - proto.RegisterType((*Probe)(nil), "k8s.io.api.core.v1.Probe") - proto.RegisterType((*ProjectedVolumeSource)(nil), "k8s.io.api.core.v1.ProjectedVolumeSource") - proto.RegisterType((*QuobyteVolumeSource)(nil), "k8s.io.api.core.v1.QuobyteVolumeSource") - proto.RegisterType((*RBDPersistentVolumeSource)(nil), "k8s.io.api.core.v1.RBDPersistentVolumeSource") - proto.RegisterType((*RBDVolumeSource)(nil), "k8s.io.api.core.v1.RBDVolumeSource") - proto.RegisterType((*RangeAllocation)(nil), "k8s.io.api.core.v1.RangeAllocation") - proto.RegisterType((*ReplicationController)(nil), "k8s.io.api.core.v1.ReplicationController") - proto.RegisterType((*ReplicationControllerCondition)(nil), "k8s.io.api.core.v1.ReplicationControllerCondition") - proto.RegisterType((*ReplicationControllerList)(nil), "k8s.io.api.core.v1.ReplicationControllerList") - proto.RegisterType((*ReplicationControllerSpec)(nil), "k8s.io.api.core.v1.ReplicationControllerSpec") - proto.RegisterType((*ReplicationControllerStatus)(nil), "k8s.io.api.core.v1.ReplicationControllerStatus") - proto.RegisterType((*ResourceFieldSelector)(nil), "k8s.io.api.core.v1.ResourceFieldSelector") - proto.RegisterType((*ResourceQuota)(nil), "k8s.io.api.core.v1.ResourceQuota") - proto.RegisterType((*ResourceQuotaList)(nil), "k8s.io.api.core.v1.ResourceQuotaList") - proto.RegisterType((*ResourceQuotaSpec)(nil), "k8s.io.api.core.v1.ResourceQuotaSpec") - proto.RegisterType((*ResourceQuotaStatus)(nil), "k8s.io.api.core.v1.ResourceQuotaStatus") - proto.RegisterType((*ResourceRequirements)(nil), "k8s.io.api.core.v1.ResourceRequirements") - proto.RegisterType((*SELinuxOptions)(nil), "k8s.io.api.core.v1.SELinuxOptions") - proto.RegisterType((*ScaleIOPersistentVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOPersistentVolumeSource") - proto.RegisterType((*ScaleIOVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOVolumeSource") - proto.RegisterType((*ScopeSelector)(nil), "k8s.io.api.core.v1.ScopeSelector") - proto.RegisterType((*ScopedResourceSelectorRequirement)(nil), "k8s.io.api.core.v1.ScopedResourceSelectorRequirement") - proto.RegisterType((*Secret)(nil), "k8s.io.api.core.v1.Secret") - proto.RegisterType((*SecretEnvSource)(nil), "k8s.io.api.core.v1.SecretEnvSource") - proto.RegisterType((*SecretKeySelector)(nil), "k8s.io.api.core.v1.SecretKeySelector") - proto.RegisterType((*SecretList)(nil), "k8s.io.api.core.v1.SecretList") - proto.RegisterType((*SecretProjection)(nil), "k8s.io.api.core.v1.SecretProjection") - proto.RegisterType((*SecretReference)(nil), "k8s.io.api.core.v1.SecretReference") - proto.RegisterType((*SecretVolumeSource)(nil), "k8s.io.api.core.v1.SecretVolumeSource") - proto.RegisterType((*SecurityContext)(nil), "k8s.io.api.core.v1.SecurityContext") - proto.RegisterType((*SerializedReference)(nil), "k8s.io.api.core.v1.SerializedReference") - proto.RegisterType((*Service)(nil), "k8s.io.api.core.v1.Service") - proto.RegisterType((*ServiceAccount)(nil), "k8s.io.api.core.v1.ServiceAccount") - proto.RegisterType((*ServiceAccountList)(nil), "k8s.io.api.core.v1.ServiceAccountList") - proto.RegisterType((*ServiceAccountTokenProjection)(nil), "k8s.io.api.core.v1.ServiceAccountTokenProjection") - proto.RegisterType((*ServiceList)(nil), "k8s.io.api.core.v1.ServiceList") - proto.RegisterType((*ServicePort)(nil), "k8s.io.api.core.v1.ServicePort") - proto.RegisterType((*ServiceProxyOptions)(nil), "k8s.io.api.core.v1.ServiceProxyOptions") - proto.RegisterType((*ServiceSpec)(nil), "k8s.io.api.core.v1.ServiceSpec") - proto.RegisterType((*ServiceStatus)(nil), "k8s.io.api.core.v1.ServiceStatus") - proto.RegisterType((*SessionAffinityConfig)(nil), "k8s.io.api.core.v1.SessionAffinityConfig") - proto.RegisterType((*StorageOSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.StorageOSPersistentVolumeSource") - proto.RegisterType((*StorageOSVolumeSource)(nil), "k8s.io.api.core.v1.StorageOSVolumeSource") - proto.RegisterType((*Sysctl)(nil), "k8s.io.api.core.v1.Sysctl") - proto.RegisterType((*TCPSocketAction)(nil), "k8s.io.api.core.v1.TCPSocketAction") - proto.RegisterType((*Taint)(nil), "k8s.io.api.core.v1.Taint") - proto.RegisterType((*Toleration)(nil), "k8s.io.api.core.v1.Toleration") - proto.RegisterType((*TopologySelectorLabelRequirement)(nil), "k8s.io.api.core.v1.TopologySelectorLabelRequirement") - proto.RegisterType((*TopologySelectorTerm)(nil), "k8s.io.api.core.v1.TopologySelectorTerm") - proto.RegisterType((*Volume)(nil), "k8s.io.api.core.v1.Volume") - proto.RegisterType((*VolumeDevice)(nil), "k8s.io.api.core.v1.VolumeDevice") - proto.RegisterType((*VolumeMount)(nil), "k8s.io.api.core.v1.VolumeMount") - proto.RegisterType((*VolumeNodeAffinity)(nil), "k8s.io.api.core.v1.VolumeNodeAffinity") - proto.RegisterType((*VolumeProjection)(nil), "k8s.io.api.core.v1.VolumeProjection") - proto.RegisterType((*VolumeSource)(nil), "k8s.io.api.core.v1.VolumeSource") - proto.RegisterType((*VsphereVirtualDiskVolumeSource)(nil), "k8s.io.api.core.v1.VsphereVirtualDiskVolumeSource") - proto.RegisterType((*WeightedPodAffinityTerm)(nil), "k8s.io.api.core.v1.WeightedPodAffinityTerm") +var xxx_messageInfo_NodeConfigStatus proto.InternalMessageInfo + +func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } +func (*NodeDaemonEndpoints) ProtoMessage() {} +func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{93} } -func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +func (m *NodeDaemonEndpoints) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeDaemonEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *AWSElasticBlockStoreVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) - i += copy(dAtA[i:], m.VolumeID) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Partition)) - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil +func (m *NodeDaemonEndpoints) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeDaemonEndpoints.Merge(m, src) +} +func (m *NodeDaemonEndpoints) XXX_Size() int { + return m.Size() +} +func (m *NodeDaemonEndpoints) XXX_DiscardUnknown() { + xxx_messageInfo_NodeDaemonEndpoints.DiscardUnknown(m) } -func (m *Affinity) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_NodeDaemonEndpoints proto.InternalMessageInfo + +func (m *NodeList) Reset() { *m = NodeList{} } +func (*NodeList) ProtoMessage() {} +func (*NodeList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{94} +} +func (m *NodeList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *NodeList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeList.Merge(m, src) +} +func (m *NodeList) XXX_Size() int { + return m.Size() +} +func (m *NodeList) XXX_DiscardUnknown() { + xxx_messageInfo_NodeList.DiscardUnknown(m) } -func (m *Affinity) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.NodeAffinity != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodeAffinity.Size())) - n1, err := m.NodeAffinity.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.PodAffinity != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinity.Size())) - n2, err := m.PodAffinity.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.PodAntiAffinity != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodAntiAffinity.Size())) - n3, err := m.PodAntiAffinity.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 +var xxx_messageInfo_NodeList proto.InternalMessageInfo + +func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } +func (*NodeProxyOptions) ProtoMessage() {} +func (*NodeProxyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{95} +} +func (m *NodeProxyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeProxyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *NodeProxyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeProxyOptions.Merge(m, src) +} +func (m *NodeProxyOptions) XXX_Size() int { + return m.Size() +} +func (m *NodeProxyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_NodeProxyOptions.DiscardUnknown(m) } -func (m *AttachedVolume) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_NodeProxyOptions proto.InternalMessageInfo + +func (m *NodeResources) Reset() { *m = NodeResources{} } +func (*NodeResources) ProtoMessage() {} +func (*NodeResources) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{96} +} +func (m *NodeResources) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *AttachedVolume) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DevicePath))) - i += copy(dAtA[i:], m.DevicePath) - return i, nil +func (m *NodeResources) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeResources.Merge(m, src) +} +func (m *NodeResources) XXX_Size() int { + return m.Size() +} +func (m *NodeResources) XXX_DiscardUnknown() { + xxx_messageInfo_NodeResources.DiscardUnknown(m) } -func (m *AvoidPods) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_NodeResources proto.InternalMessageInfo + +func (m *NodeSelector) Reset() { *m = NodeSelector{} } +func (*NodeSelector) ProtoMessage() {} +func (*NodeSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{97} +} +func (m *NodeSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *NodeSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeSelector.Merge(m, src) +} +func (m *NodeSelector) XXX_Size() int { + return m.Size() +} +func (m *NodeSelector) XXX_DiscardUnknown() { + xxx_messageInfo_NodeSelector.DiscardUnknown(m) } -func (m *AvoidPods) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.PreferAvoidPods) > 0 { - for _, msg := range m.PreferAvoidPods { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } +var xxx_messageInfo_NodeSelector proto.InternalMessageInfo + +func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } +func (*NodeSelectorRequirement) ProtoMessage() {} +func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{98} +} +func (m *NodeSelectorRequirement) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeSelectorRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *NodeSelectorRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeSelectorRequirement.Merge(m, src) +} +func (m *NodeSelectorRequirement) XXX_Size() int { + return m.Size() +} +func (m *NodeSelectorRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_NodeSelectorRequirement.DiscardUnknown(m) } -func (m *AzureDiskVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_NodeSelectorRequirement proto.InternalMessageInfo + +func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } +func (*NodeSelectorTerm) ProtoMessage() {} +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{99} +} +func (m *NodeSelectorTerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeSelectorTerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *NodeSelectorTerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeSelectorTerm.Merge(m, src) +} +func (m *NodeSelectorTerm) XXX_Size() int { + return m.Size() +} +func (m *NodeSelectorTerm) XXX_DiscardUnknown() { + xxx_messageInfo_NodeSelectorTerm.DiscardUnknown(m) } -func (m *AzureDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DiskName))) - i += copy(dAtA[i:], m.DiskName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DataDiskURI))) - i += copy(dAtA[i:], m.DataDiskURI) - if m.CachingMode != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.CachingMode))) - i += copy(dAtA[i:], *m.CachingMode) - } - if m.FSType != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FSType))) - i += copy(dAtA[i:], *m.FSType) - } - if m.ReadOnly != nil { - dAtA[i] = 0x28 - i++ - if *m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.Kind != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Kind))) - i += copy(dAtA[i:], *m.Kind) +var xxx_messageInfo_NodeSelectorTerm proto.InternalMessageInfo + +func (m *NodeSpec) Reset() { *m = NodeSpec{} } +func (*NodeSpec) ProtoMessage() {} +func (*NodeSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{100} +} +func (m *NodeSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *NodeSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeSpec.Merge(m, src) +} +func (m *NodeSpec) XXX_Size() int { + return m.Size() +} +func (m *NodeSpec) XXX_DiscardUnknown() { + xxx_messageInfo_NodeSpec.DiscardUnknown(m) } -func (m *AzureFilePersistentVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_NodeSpec proto.InternalMessageInfo + +func (m *NodeStatus) Reset() { *m = NodeStatus{} } +func (*NodeStatus) ProtoMessage() {} +func (*NodeStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{101} +} +func (m *NodeStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *NodeStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeStatus.Merge(m, src) +} +func (m *NodeStatus) XXX_Size() int { + return m.Size() +} +func (m *NodeStatus) XXX_DiscardUnknown() { + xxx_messageInfo_NodeStatus.DiscardUnknown(m) } -func (m *AzureFilePersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) - i += copy(dAtA[i:], m.SecretName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShareName))) - i += copy(dAtA[i:], m.ShareName) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SecretNamespace != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SecretNamespace))) - i += copy(dAtA[i:], *m.SecretNamespace) +var xxx_messageInfo_NodeStatus proto.InternalMessageInfo + +func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } +func (*NodeSystemInfo) ProtoMessage() {} +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{102} +} +func (m *NodeSystemInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NodeSystemInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *NodeSystemInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_NodeSystemInfo.Merge(m, src) +} +func (m *NodeSystemInfo) XXX_Size() int { + return m.Size() +} +func (m *NodeSystemInfo) XXX_DiscardUnknown() { + xxx_messageInfo_NodeSystemInfo.DiscardUnknown(m) } -func (m *AzureFileVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_NodeSystemInfo proto.InternalMessageInfo + +func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } +func (*ObjectFieldSelector) ProtoMessage() {} +func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{103} +} +func (m *ObjectFieldSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectFieldSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ObjectFieldSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectFieldSelector.Merge(m, src) +} +func (m *ObjectFieldSelector) XXX_Size() int { + return m.Size() +} +func (m *ObjectFieldSelector) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectFieldSelector.DiscardUnknown(m) } -func (m *AzureFileVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) - i += copy(dAtA[i:], m.SecretName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShareName))) - i += copy(dAtA[i:], m.ShareName) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 +var xxx_messageInfo_ObjectFieldSelector proto.InternalMessageInfo + +func (m *ObjectReference) Reset() { *m = ObjectReference{} } +func (*ObjectReference) ProtoMessage() {} +func (*ObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{104} +} +func (m *ObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - i++ - return i, nil + return b[:n], nil +} +func (m *ObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectReference.Merge(m, src) +} +func (m *ObjectReference) XXX_Size() int { + return m.Size() +} +func (m *ObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectReference.DiscardUnknown(m) } -func (m *Binding) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ObjectReference proto.InternalMessageInfo + +func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } +func (*PersistentVolume) ProtoMessage() {} +func (*PersistentVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{105} +} +func (m *PersistentVolume) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PersistentVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolume.Merge(m, src) +} +func (m *PersistentVolume) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolume) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolume.DiscardUnknown(m) } -func (m *Binding) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n4, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PersistentVolume proto.InternalMessageInfo + +func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } +func (*PersistentVolumeClaim) ProtoMessage() {} +func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{106} +} +func (m *PersistentVolumeClaim) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeClaim) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n4 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Target.Size())) - n5, err := m.Target.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *PersistentVolumeClaim) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeClaim.Merge(m, src) +} +func (m *PersistentVolumeClaim) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeClaim) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeClaim.DiscardUnknown(m) +} + +var xxx_messageInfo_PersistentVolumeClaim proto.InternalMessageInfo + +func (m *PersistentVolumeClaimCondition) Reset() { *m = PersistentVolumeClaimCondition{} } +func (*PersistentVolumeClaimCondition) ProtoMessage() {} +func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{107} +} +func (m *PersistentVolumeClaimCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeClaimCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n5 - return i, nil + return b[:n], nil +} +func (m *PersistentVolumeClaimCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeClaimCondition.Merge(m, src) +} +func (m *PersistentVolumeClaimCondition) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeClaimCondition) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeClaimCondition.DiscardUnknown(m) } -func (m *CSIPersistentVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PersistentVolumeClaimCondition proto.InternalMessageInfo + +func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } +func (*PersistentVolumeClaimList) ProtoMessage() {} +func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{108} +} +func (m *PersistentVolumeClaimList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeClaimList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PersistentVolumeClaimList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeClaimList.Merge(m, src) +} +func (m *PersistentVolumeClaimList) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeClaimList) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeClaimList.DiscardUnknown(m) } -func (m *CSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) - i += copy(dAtA[i:], m.Driver) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeHandle))) - i += copy(dAtA[i:], m.VolumeHandle) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - if len(m.VolumeAttributes) > 0 { - keysForVolumeAttributes := make([]string, 0, len(m.VolumeAttributes)) - for k := range m.VolumeAttributes { - keysForVolumeAttributes = append(keysForVolumeAttributes, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) - for _, k := range keysForVolumeAttributes { - dAtA[i] = 0x2a - i++ - v := m.VolumeAttributes[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if m.ControllerPublishSecretRef != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ControllerPublishSecretRef.Size())) - n6, err := m.ControllerPublishSecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } - if m.NodeStageSecretRef != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodeStageSecretRef.Size())) - n7, err := m.NodeStageSecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.NodePublishSecretRef != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodePublishSecretRef.Size())) - n8, err := m.NodePublishSecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 +var xxx_messageInfo_PersistentVolumeClaimList proto.InternalMessageInfo + +func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } +func (*PersistentVolumeClaimSpec) ProtoMessage() {} +func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{109} +} +func (m *PersistentVolumeClaimSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeClaimSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PersistentVolumeClaimSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeClaimSpec.Merge(m, src) +} +func (m *PersistentVolumeClaimSpec) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeClaimSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeClaimSpec.DiscardUnknown(m) } -func (m *Capabilities) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PersistentVolumeClaimSpec proto.InternalMessageInfo + +func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } +func (*PersistentVolumeClaimStatus) ProtoMessage() {} +func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{110} +} +func (m *PersistentVolumeClaimStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeClaimStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PersistentVolumeClaimStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeClaimStatus.Merge(m, src) +} +func (m *PersistentVolumeClaimStatus) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeClaimStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeClaimStatus.DiscardUnknown(m) } -func (m *Capabilities) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Add) > 0 { - for _, s := range m.Add { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Drop) > 0 { - for _, s := range m.Drop { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } +var xxx_messageInfo_PersistentVolumeClaimStatus proto.InternalMessageInfo + +func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } +func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} +func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{111} +} +func (m *PersistentVolumeClaimVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeClaimVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PersistentVolumeClaimVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeClaimVolumeSource.Merge(m, src) +} +func (m *PersistentVolumeClaimVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeClaimVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeClaimVolumeSource.DiscardUnknown(m) } -func (m *CephFSPersistentVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PersistentVolumeClaimVolumeSource proto.InternalMessageInfo + +func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } +func (*PersistentVolumeList) ProtoMessage() {} +func (*PersistentVolumeList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{112} +} +func (m *PersistentVolumeList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PersistentVolumeList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeList.Merge(m, src) +} +func (m *PersistentVolumeList) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeList) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeList.DiscardUnknown(m) } -func (m *CephFSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Monitors) > 0 { - for _, s := range m.Monitors { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretFile))) - i += copy(dAtA[i:], m.SecretFile) - if m.SecretRef != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n9, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - } - dAtA[i] = 0x30 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil -} +var xxx_messageInfo_PersistentVolumeList proto.InternalMessageInfo -func (m *CephFSVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } +func (*PersistentVolumeSource) ProtoMessage() {} +func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{113} +} +func (m *PersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeSource.Merge(m, src) +} +func (m *PersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeSource.DiscardUnknown(m) } -func (m *CephFSVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Monitors) > 0 { - for _, s := range m.Monitors { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretFile))) - i += copy(dAtA[i:], m.SecretFile) - if m.SecretRef != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n10, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - } - dAtA[i] = 0x30 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 +var xxx_messageInfo_PersistentVolumeSource proto.InternalMessageInfo + +func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } +func (*PersistentVolumeSpec) ProtoMessage() {} +func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{114} +} +func (m *PersistentVolumeSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - i++ - return i, nil + return b[:n], nil +} +func (m *PersistentVolumeSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeSpec.Merge(m, src) +} +func (m *PersistentVolumeSpec) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeSpec.DiscardUnknown(m) } -func (m *CinderPersistentVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PersistentVolumeSpec proto.InternalMessageInfo + +func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } +func (*PersistentVolumeStatus) ProtoMessage() {} +func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{115} +} +func (m *PersistentVolumeStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PersistentVolumeStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PersistentVolumeStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PersistentVolumeStatus.Merge(m, src) +} +func (m *PersistentVolumeStatus) XXX_Size() int { + return m.Size() +} +func (m *PersistentVolumeStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PersistentVolumeStatus.DiscardUnknown(m) } -func (m *CinderPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) - i += copy(dAtA[i:], m.VolumeID) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SecretRef != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n11, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 +var xxx_messageInfo_PersistentVolumeStatus proto.InternalMessageInfo + +func (m *PhotonPersistentDiskVolumeSource) Reset() { *m = PhotonPersistentDiskVolumeSource{} } +func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {} +func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{116} +} +func (m *PhotonPersistentDiskVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PhotonPersistentDiskVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PhotonPersistentDiskVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PhotonPersistentDiskVolumeSource.Merge(m, src) +} +func (m *PhotonPersistentDiskVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *PhotonPersistentDiskVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_PhotonPersistentDiskVolumeSource.DiscardUnknown(m) } -func (m *CinderVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PhotonPersistentDiskVolumeSource proto.InternalMessageInfo + +func (m *Pod) Reset() { *m = Pod{} } +func (*Pod) ProtoMessage() {} +func (*Pod) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{117} +} +func (m *Pod) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Pod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *Pod) XXX_Merge(src proto.Message) { + xxx_messageInfo_Pod.Merge(m, src) +} +func (m *Pod) XXX_Size() int { + return m.Size() +} +func (m *Pod) XXX_DiscardUnknown() { + xxx_messageInfo_Pod.DiscardUnknown(m) } -func (m *CinderVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) - i += copy(dAtA[i:], m.VolumeID) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SecretRef != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n12, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 +var xxx_messageInfo_Pod proto.InternalMessageInfo + +func (m *PodAffinity) Reset() { *m = PodAffinity{} } +func (*PodAffinity) ProtoMessage() {} +func (*PodAffinity) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{118} +} +func (m *PodAffinity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodAffinity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodAffinity) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodAffinity.Merge(m, src) +} +func (m *PodAffinity) XXX_Size() int { + return m.Size() +} +func (m *PodAffinity) XXX_DiscardUnknown() { + xxx_messageInfo_PodAffinity.DiscardUnknown(m) } -func (m *ClientIPConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodAffinity proto.InternalMessageInfo + +func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } +func (*PodAffinityTerm) ProtoMessage() {} +func (*PodAffinityTerm) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{119} +} +func (m *PodAffinityTerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodAffinityTerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodAffinityTerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodAffinityTerm.Merge(m, src) +} +func (m *PodAffinityTerm) XXX_Size() int { + return m.Size() +} +func (m *PodAffinityTerm) XXX_DiscardUnknown() { + xxx_messageInfo_PodAffinityTerm.DiscardUnknown(m) } -func (m *ClientIPConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.TimeoutSeconds != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) +var xxx_messageInfo_PodAffinityTerm proto.InternalMessageInfo + +func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } +func (*PodAntiAffinity) ProtoMessage() {} +func (*PodAntiAffinity) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{120} +} +func (m *PodAntiAffinity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodAntiAffinity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodAntiAffinity) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodAntiAffinity.Merge(m, src) +} +func (m *PodAntiAffinity) XXX_Size() int { + return m.Size() +} +func (m *PodAntiAffinity) XXX_DiscardUnknown() { + xxx_messageInfo_PodAntiAffinity.DiscardUnknown(m) } -func (m *ComponentCondition) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodAntiAffinity proto.InternalMessageInfo + +func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } +func (*PodAttachOptions) ProtoMessage() {} +func (*PodAttachOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{121} +} +func (m *PodAttachOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodAttachOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *ComponentCondition) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - return i, nil +func (m *PodAttachOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodAttachOptions.Merge(m, src) +} +func (m *PodAttachOptions) XXX_Size() int { + return m.Size() +} +func (m *PodAttachOptions) XXX_DiscardUnknown() { + xxx_messageInfo_PodAttachOptions.DiscardUnknown(m) } -func (m *ComponentStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodAttachOptions proto.InternalMessageInfo + +func (m *PodCondition) Reset() { *m = PodCondition{} } +func (*PodCondition) ProtoMessage() {} +func (*PodCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{122} +} +func (m *PodCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodCondition.Merge(m, src) +} +func (m *PodCondition) XXX_Size() int { + return m.Size() +} +func (m *PodCondition) XXX_DiscardUnknown() { + xxx_messageInfo_PodCondition.DiscardUnknown(m) } -func (m *ComponentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n13, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodCondition proto.InternalMessageInfo + +func (m *PodDNSConfig) Reset() { *m = PodDNSConfig{} } +func (*PodDNSConfig) ProtoMessage() {} +func (*PodDNSConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{123} +} +func (m *PodDNSConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDNSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n13 - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodDNSConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDNSConfig.Merge(m, src) +} +func (m *PodDNSConfig) XXX_Size() int { + return m.Size() +} +func (m *PodDNSConfig) XXX_DiscardUnknown() { + xxx_messageInfo_PodDNSConfig.DiscardUnknown(m) } -func (m *ComponentStatusList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodDNSConfig proto.InternalMessageInfo + +func (m *PodDNSConfigOption) Reset() { *m = PodDNSConfigOption{} } +func (*PodDNSConfigOption) ProtoMessage() {} +func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{124} +} +func (m *PodDNSConfigOption) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDNSConfigOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodDNSConfigOption) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDNSConfigOption.Merge(m, src) +} +func (m *PodDNSConfigOption) XXX_Size() int { + return m.Size() +} +func (m *PodDNSConfigOption) XXX_DiscardUnknown() { + xxx_messageInfo_PodDNSConfigOption.DiscardUnknown(m) } -func (m *ComponentStatusList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n14, err := m.ListMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodDNSConfigOption proto.InternalMessageInfo + +func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } +func (*PodExecOptions) ProtoMessage() {} +func (*PodExecOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{125} +} +func (m *PodExecOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodExecOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n14 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodExecOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodExecOptions.Merge(m, src) +} +func (m *PodExecOptions) XXX_Size() int { + return m.Size() +} +func (m *PodExecOptions) XXX_DiscardUnknown() { + xxx_messageInfo_PodExecOptions.DiscardUnknown(m) } -func (m *ConfigMap) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodExecOptions proto.InternalMessageInfo + +func (m *PodIP) Reset() { *m = PodIP{} } +func (*PodIP) ProtoMessage() {} +func (*PodIP) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{126} +} +func (m *PodIP) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodIP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodIP) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodIP.Merge(m, src) +} +func (m *PodIP) XXX_Size() int { + return m.Size() +} +func (m *PodIP) XXX_DiscardUnknown() { + xxx_messageInfo_PodIP.DiscardUnknown(m) } -func (m *ConfigMap) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n15, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodIP proto.InternalMessageInfo + +func (m *PodList) Reset() { *m = PodList{} } +func (*PodList) ProtoMessage() {} +func (*PodList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{127} +} +func (m *PodList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n15 - if len(m.Data) > 0 { - keysForData := make([]string, 0, len(m.Data)) - for k := range m.Data { - keysForData = append(keysForData, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForData) - for _, k := range keysForData { - dAtA[i] = 0x12 - i++ - v := m.Data[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if len(m.BinaryData) > 0 { - keysForBinaryData := make([]string, 0, len(m.BinaryData)) - for k := range m.BinaryData { - keysForBinaryData = append(keysForBinaryData, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForBinaryData) - for _, k := range keysForBinaryData { - dAtA[i] = 0x1a - i++ - v := m.BinaryData[string(k)] - byteSize := 0 - if v != nil { - byteSize = 1 + len(v) + sovGenerated(uint64(len(v))) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + byteSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodList.Merge(m, src) +} +func (m *PodList) XXX_Size() int { + return m.Size() +} +func (m *PodList) XXX_DiscardUnknown() { + xxx_messageInfo_PodList.DiscardUnknown(m) } -func (m *ConfigMapEnvSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodList proto.InternalMessageInfo + +func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } +func (*PodLogOptions) ProtoMessage() {} +func (*PodLogOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{128} +} +func (m *PodLogOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodLogOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodLogOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodLogOptions.Merge(m, src) +} +func (m *PodLogOptions) XXX_Size() int { + return m.Size() +} +func (m *PodLogOptions) XXX_DiscardUnknown() { + xxx_messageInfo_PodLogOptions.DiscardUnknown(m) } -func (m *ConfigMapEnvSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n16, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodLogOptions proto.InternalMessageInfo + +func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } +func (*PodPortForwardOptions) ProtoMessage() {} +func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{129} +} +func (m *PodPortForwardOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodPortForwardOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n16 - if m.Optional != nil { - dAtA[i] = 0x10 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodPortForwardOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodPortForwardOptions.Merge(m, src) +} +func (m *PodPortForwardOptions) XXX_Size() int { + return m.Size() +} +func (m *PodPortForwardOptions) XXX_DiscardUnknown() { + xxx_messageInfo_PodPortForwardOptions.DiscardUnknown(m) } -func (m *ConfigMapKeySelector) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodPortForwardOptions proto.InternalMessageInfo + +func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } +func (*PodProxyOptions) ProtoMessage() {} +func (*PodProxyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{130} +} +func (m *PodProxyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodProxyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodProxyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodProxyOptions.Merge(m, src) +} +func (m *PodProxyOptions) XXX_Size() int { + return m.Size() +} +func (m *PodProxyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_PodProxyOptions.DiscardUnknown(m) } -func (m *ConfigMapKeySelector) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n17, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodProxyOptions proto.InternalMessageInfo + +func (m *PodReadinessGate) Reset() { *m = PodReadinessGate{} } +func (*PodReadinessGate) ProtoMessage() {} +func (*PodReadinessGate) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{131} +} +func (m *PodReadinessGate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodReadinessGate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n17 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - if m.Optional != nil { - dAtA[i] = 0x18 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodReadinessGate) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodReadinessGate.Merge(m, src) +} +func (m *PodReadinessGate) XXX_Size() int { + return m.Size() +} +func (m *PodReadinessGate) XXX_DiscardUnknown() { + xxx_messageInfo_PodReadinessGate.DiscardUnknown(m) } -func (m *ConfigMapList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodReadinessGate proto.InternalMessageInfo + +func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } +func (*PodSecurityContext) ProtoMessage() {} +func (*PodSecurityContext) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{132} +} +func (m *PodSecurityContext) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodSecurityContext) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityContext.Merge(m, src) +} +func (m *PodSecurityContext) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityContext) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityContext.DiscardUnknown(m) } -func (m *ConfigMapList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n18, err := m.ListMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodSecurityContext proto.InternalMessageInfo + +func (m *PodSignature) Reset() { *m = PodSignature{} } +func (*PodSignature) ProtoMessage() {} +func (*PodSignature) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{133} +} +func (m *PodSignature) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n18 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodSignature) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSignature.Merge(m, src) +} +func (m *PodSignature) XXX_Size() int { + return m.Size() +} +func (m *PodSignature) XXX_DiscardUnknown() { + xxx_messageInfo_PodSignature.DiscardUnknown(m) } -func (m *ConfigMapNodeConfigSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodSignature proto.InternalMessageInfo + +func (m *PodSpec) Reset() { *m = PodSpec{} } +func (*PodSpec) ProtoMessage() {} +func (*PodSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{134} +} +func (m *PodSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *ConfigMapNodeConfigSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) - i += copy(dAtA[i:], m.ResourceVersion) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeletConfigKey))) - i += copy(dAtA[i:], m.KubeletConfigKey) - return i, nil +func (m *PodSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSpec.Merge(m, src) +} +func (m *PodSpec) XXX_Size() int { + return m.Size() +} +func (m *PodSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodSpec.DiscardUnknown(m) } -func (m *ConfigMapProjection) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodSpec proto.InternalMessageInfo + +func (m *PodStatus) Reset() { *m = PodStatus{} } +func (*PodStatus) ProtoMessage() {} +func (*PodStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{135} +} +func (m *PodStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodStatus.Merge(m, src) +} +func (m *PodStatus) XXX_Size() int { + return m.Size() +} +func (m *PodStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodStatus.DiscardUnknown(m) } -func (m *ConfigMapProjection) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n19, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodStatus proto.InternalMessageInfo + +func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } +func (*PodStatusResult) ProtoMessage() {} +func (*PodStatusResult) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{136} +} +func (m *PodStatusResult) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodStatusResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n19 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.Optional != nil { - dAtA[i] = 0x20 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodStatusResult) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodStatusResult.Merge(m, src) +} +func (m *PodStatusResult) XXX_Size() int { + return m.Size() +} +func (m *PodStatusResult) XXX_DiscardUnknown() { + xxx_messageInfo_PodStatusResult.DiscardUnknown(m) } -func (m *ConfigMapVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodStatusResult proto.InternalMessageInfo + +func (m *PodTemplate) Reset() { *m = PodTemplate{} } +func (*PodTemplate) ProtoMessage() {} +func (*PodTemplate) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{137} +} +func (m *PodTemplate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodTemplate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodTemplate) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodTemplate.Merge(m, src) +} +func (m *PodTemplate) XXX_Size() int { + return m.Size() +} +func (m *PodTemplate) XXX_DiscardUnknown() { + xxx_messageInfo_PodTemplate.DiscardUnknown(m) } -func (m *ConfigMapVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n20, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodTemplate proto.InternalMessageInfo + +func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } +func (*PodTemplateList) ProtoMessage() {} +func (*PodTemplateList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{138} +} +func (m *PodTemplateList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodTemplateList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n20 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.DefaultMode != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) - } - if m.Optional != nil { - dAtA[i] = 0x20 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PodTemplateList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodTemplateList.Merge(m, src) +} +func (m *PodTemplateList) XXX_Size() int { + return m.Size() +} +func (m *PodTemplateList) XXX_DiscardUnknown() { + xxx_messageInfo_PodTemplateList.DiscardUnknown(m) } -func (m *Container) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PodTemplateList proto.InternalMessageInfo + +func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } +func (*PodTemplateSpec) ProtoMessage() {} +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{139} +} +func (m *PodTemplateSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodTemplateSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *PodTemplateSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodTemplateSpec.Merge(m, src) +} +func (m *PodTemplateSpec) XXX_Size() int { + return m.Size() +} +func (m *PodTemplateSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodTemplateSpec.DiscardUnknown(m) } -func (m *Container) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) - i += copy(dAtA[i:], m.Image) - if len(m.Command) > 0 { - for _, s := range m.Command { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Args) > 0 { - for _, s := range m.Args { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.WorkingDir))) - i += copy(dAtA[i:], m.WorkingDir) - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Env) > 0 { - for _, msg := range m.Env { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size())) - n21, err := m.Resources.MarshalTo(dAtA[i:]) +var xxx_messageInfo_PodTemplateSpec proto.InternalMessageInfo + +func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } +func (*PortworxVolumeSource) ProtoMessage() {} +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{140} +} +func (m *PortworxVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PortworxVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n21 - if len(m.VolumeMounts) > 0 { - for _, msg := range m.VolumeMounts { - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.LivenessProbe != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LivenessProbe.Size())) - n22, err := m.LivenessProbe.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n22 - } - if m.ReadinessProbe != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadinessProbe.Size())) - n23, err := m.ReadinessProbe.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n23 - } - if m.Lifecycle != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Lifecycle.Size())) - n24, err := m.Lifecycle.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n24 - } - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePath))) - i += copy(dAtA[i:], m.TerminationMessagePath) - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImagePullPolicy))) - i += copy(dAtA[i:], m.ImagePullPolicy) - if m.SecurityContext != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size())) - n25, err := m.SecurityContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - } - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x1 - i++ - if m.Stdin { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x88 - i++ - dAtA[i] = 0x1 - i++ - if m.StdinOnce { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x90 - i++ - dAtA[i] = 0x1 - i++ - if m.TTY { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if len(m.EnvFrom) > 0 { - for _, msg := range m.EnvFrom { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePolicy))) - i += copy(dAtA[i:], m.TerminationMessagePolicy) - if len(m.VolumeDevices) > 0 { - for _, msg := range m.VolumeDevices { - dAtA[i] = 0xaa - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *PortworxVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_PortworxVolumeSource.Merge(m, src) +} +func (m *PortworxVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *PortworxVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_PortworxVolumeSource.DiscardUnknown(m) } -func (m *ContainerImage) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PortworxVolumeSource proto.InternalMessageInfo + +func (m *Preconditions) Reset() { *m = Preconditions{} } +func (*Preconditions) ProtoMessage() {} +func (*Preconditions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{141} +} +func (m *Preconditions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Preconditions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *ContainerImage) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SizeBytes)) - return i, nil +func (m *Preconditions) XXX_Merge(src proto.Message) { + xxx_messageInfo_Preconditions.Merge(m, src) +} +func (m *Preconditions) XXX_Size() int { + return m.Size() +} +func (m *Preconditions) XXX_DiscardUnknown() { + xxx_messageInfo_Preconditions.DiscardUnknown(m) } -func (m *ContainerPort) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_Preconditions proto.InternalMessageInfo + +func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } +func (*PreferAvoidPodsEntry) ProtoMessage() {} +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{142} +} +func (m *PreferAvoidPodsEntry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PreferAvoidPodsEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *ContainerPort) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HostPort)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ContainerPort)) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Protocol))) - i += copy(dAtA[i:], m.Protocol) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.HostIP))) - i += copy(dAtA[i:], m.HostIP) - return i, nil +func (m *PreferAvoidPodsEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_PreferAvoidPodsEntry.Merge(m, src) +} +func (m *PreferAvoidPodsEntry) XXX_Size() int { + return m.Size() +} +func (m *PreferAvoidPodsEntry) XXX_DiscardUnknown() { + xxx_messageInfo_PreferAvoidPodsEntry.DiscardUnknown(m) } -func (m *ContainerState) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PreferAvoidPodsEntry proto.InternalMessageInfo + +func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } +func (*PreferredSchedulingTerm) ProtoMessage() {} +func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{143} +} +func (m *PreferredSchedulingTerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PreferredSchedulingTerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *ContainerState) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Waiting != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Waiting.Size())) - n26, err := m.Waiting.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n26 - } - if m.Running != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Running.Size())) - n27, err := m.Running.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n27 - } - if m.Terminated != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Terminated.Size())) - n28, err := m.Terminated.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n28 - } - return i, nil +func (m *PreferredSchedulingTerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_PreferredSchedulingTerm.Merge(m, src) +} +func (m *PreferredSchedulingTerm) XXX_Size() int { + return m.Size() +} +func (m *PreferredSchedulingTerm) XXX_DiscardUnknown() { + xxx_messageInfo_PreferredSchedulingTerm.DiscardUnknown(m) } -func (m *ContainerStateRunning) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_PreferredSchedulingTerm proto.InternalMessageInfo + +func (m *Probe) Reset() { *m = Probe{} } +func (*Probe) ProtoMessage() {} +func (*Probe) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{144} +} +func (m *Probe) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Probe) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *Probe) XXX_Merge(src proto.Message) { + xxx_messageInfo_Probe.Merge(m, src) +} +func (m *Probe) XXX_Size() int { + return m.Size() +} +func (m *Probe) XXX_DiscardUnknown() { + xxx_messageInfo_Probe.DiscardUnknown(m) } -func (m *ContainerStateRunning) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.StartedAt.Size())) - n29, err := m.StartedAt.MarshalTo(dAtA[i:]) +var xxx_messageInfo_Probe proto.InternalMessageInfo + +func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } +func (*ProjectedVolumeSource) ProtoMessage() {} +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{145} +} +func (m *ProjectedVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProjectedVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n29 - return i, nil + return b[:n], nil +} +func (m *ProjectedVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectedVolumeSource.Merge(m, src) +} +func (m *ProjectedVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *ProjectedVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_ProjectedVolumeSource.DiscardUnknown(m) } -func (m *ContainerStateTerminated) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ProjectedVolumeSource proto.InternalMessageInfo + +func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } +func (*QuobyteVolumeSource) ProtoMessage() {} +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{146} +} +func (m *QuobyteVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuobyteVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *QuobyteVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuobyteVolumeSource.Merge(m, src) +} +func (m *QuobyteVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *QuobyteVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_QuobyteVolumeSource.DiscardUnknown(m) } -func (m *ContainerStateTerminated) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ExitCode)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Signal)) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.StartedAt.Size())) - n30, err := m.StartedAt.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n30 - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FinishedAt.Size())) - n31, err := m.FinishedAt.MarshalTo(dAtA[i:]) +var xxx_messageInfo_QuobyteVolumeSource proto.InternalMessageInfo + +func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } +func (*RBDPersistentVolumeSource) ProtoMessage() {} +func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{147} +} +func (m *RBDPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RBDPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n31 - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerID))) - i += copy(dAtA[i:], m.ContainerID) - return i, nil + return b[:n], nil +} +func (m *RBDPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_RBDPersistentVolumeSource.Merge(m, src) +} +func (m *RBDPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *RBDPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_RBDPersistentVolumeSource.DiscardUnknown(m) } -func (m *ContainerStateWaiting) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_RBDPersistentVolumeSource proto.InternalMessageInfo + +func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } +func (*RBDVolumeSource) ProtoMessage() {} +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{148} +} +func (m *RBDVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RBDVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *ContainerStateWaiting) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil +func (m *RBDVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_RBDVolumeSource.Merge(m, src) +} +func (m *RBDVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *RBDVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_RBDVolumeSource.DiscardUnknown(m) } -func (m *ContainerStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_RBDVolumeSource proto.InternalMessageInfo + +func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } +func (*RangeAllocation) ProtoMessage() {} +func (*RangeAllocation) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{149} +} +func (m *RangeAllocation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RangeAllocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *RangeAllocation) XXX_Merge(src proto.Message) { + xxx_messageInfo_RangeAllocation.Merge(m, src) +} +func (m *RangeAllocation) XXX_Size() int { + return m.Size() +} +func (m *RangeAllocation) XXX_DiscardUnknown() { + xxx_messageInfo_RangeAllocation.DiscardUnknown(m) } -func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.State.Size())) - n32, err := m.State.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n32 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTerminationState.Size())) - n33, err := m.LastTerminationState.MarshalTo(dAtA[i:]) +var xxx_messageInfo_RangeAllocation proto.InternalMessageInfo + +func (m *ReplicationController) Reset() { *m = ReplicationController{} } +func (*ReplicationController) ProtoMessage() {} +func (*ReplicationController) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{150} +} +func (m *ReplicationController) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicationController) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n33 - dAtA[i] = 0x20 - i++ - if m.Ready { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + return nil, err } - i++ - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RestartCount)) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) - i += copy(dAtA[i:], m.Image) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImageID))) - i += copy(dAtA[i:], m.ImageID) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerID))) - i += copy(dAtA[i:], m.ContainerID) - return i, nil + return b[:n], nil +} +func (m *ReplicationController) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicationController.Merge(m, src) +} +func (m *ReplicationController) XXX_Size() int { + return m.Size() +} +func (m *ReplicationController) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicationController.DiscardUnknown(m) } -func (m *DaemonEndpoint) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ReplicationController proto.InternalMessageInfo + +func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } +func (*ReplicationControllerCondition) ProtoMessage() {} +func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{151} +} +func (m *ReplicationControllerCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicationControllerCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *DaemonEndpoint) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port)) - return i, nil +func (m *ReplicationControllerCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicationControllerCondition.Merge(m, src) +} +func (m *ReplicationControllerCondition) XXX_Size() int { + return m.Size() +} +func (m *ReplicationControllerCondition) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicationControllerCondition.DiscardUnknown(m) } -func (m *DownwardAPIProjection) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ReplicationControllerCondition proto.InternalMessageInfo + +func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } +func (*ReplicationControllerList) ProtoMessage() {} +func (*ReplicationControllerList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{152} +} +func (m *ReplicationControllerList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicationControllerList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *DownwardAPIProjection) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil +func (m *ReplicationControllerList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicationControllerList.Merge(m, src) +} +func (m *ReplicationControllerList) XXX_Size() int { + return m.Size() +} +func (m *ReplicationControllerList) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicationControllerList.DiscardUnknown(m) } -func (m *DownwardAPIVolumeFile) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ReplicationControllerList proto.InternalMessageInfo + +func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } +func (*ReplicationControllerSpec) ProtoMessage() {} +func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{153} +} +func (m *ReplicationControllerSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicationControllerSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *DownwardAPIVolumeFile) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - if m.FieldRef != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FieldRef.Size())) - n34, err := m.FieldRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n34 - } - if m.ResourceFieldRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) - n35, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n35 - } - if m.Mode != nil { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Mode)) - } - return i, nil +func (m *ReplicationControllerSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicationControllerSpec.Merge(m, src) +} +func (m *ReplicationControllerSpec) XXX_Size() int { + return m.Size() +} +func (m *ReplicationControllerSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicationControllerSpec.DiscardUnknown(m) } -func (m *DownwardAPIVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ReplicationControllerSpec proto.InternalMessageInfo + +func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } +func (*ReplicationControllerStatus) ProtoMessage() {} +func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{154} +} +func (m *ReplicationControllerStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicationControllerStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *DownwardAPIVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if m.DefaultMode != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) - } - return i, nil +func (m *ReplicationControllerStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicationControllerStatus.Merge(m, src) +} +func (m *ReplicationControllerStatus) XXX_Size() int { + return m.Size() +} +func (m *ReplicationControllerStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicationControllerStatus.DiscardUnknown(m) } -func (m *EmptyDirVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ReplicationControllerStatus proto.InternalMessageInfo + +func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } +func (*ResourceFieldSelector) ProtoMessage() {} +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{155} +} +func (m *ResourceFieldSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceFieldSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *EmptyDirVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Medium))) - i += copy(dAtA[i:], m.Medium) - if m.SizeLimit != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SizeLimit.Size())) - n36, err := m.SizeLimit.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 - } - return i, nil +func (m *ResourceFieldSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceFieldSelector.Merge(m, src) +} +func (m *ResourceFieldSelector) XXX_Size() int { + return m.Size() +} +func (m *ResourceFieldSelector) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceFieldSelector.DiscardUnknown(m) } -func (m *EndpointAddress) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ResourceFieldSelector proto.InternalMessageInfo + +func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } +func (*ResourceQuota) ProtoMessage() {} +func (*ResourceQuota) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{156} +} +func (m *ResourceQuota) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceQuota) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ResourceQuota) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceQuota.Merge(m, src) +} +func (m *ResourceQuota) XXX_Size() int { + return m.Size() +} +func (m *ResourceQuota) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceQuota.DiscardUnknown(m) } -func (m *EndpointAddress) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) - i += copy(dAtA[i:], m.IP) - if m.TargetRef != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetRef.Size())) - n37, err := m.TargetRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n37 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) - i += copy(dAtA[i:], m.Hostname) - if m.NodeName != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.NodeName))) - i += copy(dAtA[i:], *m.NodeName) +var xxx_messageInfo_ResourceQuota proto.InternalMessageInfo + +func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } +func (*ResourceQuotaList) ProtoMessage() {} +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{157} +} +func (m *ResourceQuotaList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceQuotaList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *ResourceQuotaList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceQuotaList.Merge(m, src) +} +func (m *ResourceQuotaList) XXX_Size() int { + return m.Size() +} +func (m *ResourceQuotaList) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceQuotaList.DiscardUnknown(m) } -func (m *EndpointPort) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ResourceQuotaList proto.InternalMessageInfo + +func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } +func (*ResourceQuotaSpec) ProtoMessage() {} +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{158} +} +func (m *ResourceQuotaSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceQuotaSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *EndpointPort) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port)) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Protocol))) - i += copy(dAtA[i:], m.Protocol) - return i, nil +func (m *ResourceQuotaSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceQuotaSpec.Merge(m, src) +} +func (m *ResourceQuotaSpec) XXX_Size() int { + return m.Size() +} +func (m *ResourceQuotaSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceQuotaSpec.DiscardUnknown(m) } -func (m *EndpointSubset) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ResourceQuotaSpec proto.InternalMessageInfo + +func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } +func (*ResourceQuotaStatus) ProtoMessage() {} +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{159} +} +func (m *ResourceQuotaStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceQuotaStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ResourceQuotaStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceQuotaStatus.Merge(m, src) +} +func (m *ResourceQuotaStatus) XXX_Size() int { + return m.Size() +} +func (m *ResourceQuotaStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceQuotaStatus.DiscardUnknown(m) } -func (m *EndpointSubset) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Addresses) > 0 { - for _, msg := range m.Addresses { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.NotReadyAddresses) > 0 { - for _, msg := range m.NotReadyAddresses { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} +var xxx_messageInfo_ResourceQuotaStatus proto.InternalMessageInfo -func (m *Endpoints) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } +func (*ResourceRequirements) ProtoMessage() {} +func (*ResourceRequirements) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{160} +} +func (m *ResourceRequirements) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceRequirements) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ResourceRequirements) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceRequirements.Merge(m, src) +} +func (m *ResourceRequirements) XXX_Size() int { + return m.Size() +} +func (m *ResourceRequirements) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceRequirements.DiscardUnknown(m) } -func (m *Endpoints) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n38, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_ResourceRequirements proto.InternalMessageInfo + +func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } +func (*SELinuxOptions) ProtoMessage() {} +func (*SELinuxOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{161} +} +func (m *SELinuxOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SELinuxOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n38 - if len(m.Subsets) > 0 { - for _, msg := range m.Subsets { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *SELinuxOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SELinuxOptions.Merge(m, src) +} +func (m *SELinuxOptions) XXX_Size() int { + return m.Size() +} +func (m *SELinuxOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SELinuxOptions.DiscardUnknown(m) } -func (m *EndpointsList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_SELinuxOptions proto.InternalMessageInfo + +func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } +func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} +func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{162} +} +func (m *ScaleIOPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleIOPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ScaleIOPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleIOPersistentVolumeSource.Merge(m, src) +} +func (m *ScaleIOPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *ScaleIOPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleIOPersistentVolumeSource.DiscardUnknown(m) } -func (m *EndpointsList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n39, err := m.ListMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_ScaleIOPersistentVolumeSource proto.InternalMessageInfo + +func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } +func (*ScaleIOVolumeSource) ProtoMessage() {} +func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{163} +} +func (m *ScaleIOVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleIOVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n39 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *ScaleIOVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleIOVolumeSource.Merge(m, src) +} +func (m *ScaleIOVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *ScaleIOVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleIOVolumeSource.DiscardUnknown(m) } -func (m *EnvFromSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ScaleIOVolumeSource proto.InternalMessageInfo + +func (m *ScopeSelector) Reset() { *m = ScopeSelector{} } +func (*ScopeSelector) ProtoMessage() {} +func (*ScopeSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{164} +} +func (m *ScopeSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScopeSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ScopeSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopeSelector.Merge(m, src) +} +func (m *ScopeSelector) XXX_Size() int { + return m.Size() +} +func (m *ScopeSelector) XXX_DiscardUnknown() { + xxx_messageInfo_ScopeSelector.DiscardUnknown(m) } -func (m *EnvFromSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Prefix))) - i += copy(dAtA[i:], m.Prefix) - if m.ConfigMapRef != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapRef.Size())) - n40, err := m.ConfigMapRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n40 - } - if m.SecretRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n41, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 +var xxx_messageInfo_ScopeSelector proto.InternalMessageInfo + +func (m *ScopedResourceSelectorRequirement) Reset() { *m = ScopedResourceSelectorRequirement{} } +func (*ScopedResourceSelectorRequirement) ProtoMessage() {} +func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{165} +} +func (m *ScopedResourceSelectorRequirement) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScopedResourceSelectorRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *ScopedResourceSelectorRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopedResourceSelectorRequirement.Merge(m, src) +} +func (m *ScopedResourceSelectorRequirement) XXX_Size() int { + return m.Size() +} +func (m *ScopedResourceSelectorRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_ScopedResourceSelectorRequirement.DiscardUnknown(m) } -func (m *EnvVar) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ScopedResourceSelectorRequirement proto.InternalMessageInfo + +func (m *Secret) Reset() { *m = Secret{} } +func (*Secret) ProtoMessage() {} +func (*Secret) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{166} +} +func (m *Secret) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *Secret) XXX_Merge(src proto.Message) { + xxx_messageInfo_Secret.Merge(m, src) +} +func (m *Secret) XXX_Size() int { + return m.Size() +} +func (m *Secret) XXX_DiscardUnknown() { + xxx_messageInfo_Secret.DiscardUnknown(m) } -func (m *EnvVar) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - if m.ValueFrom != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ValueFrom.Size())) - n42, err := m.ValueFrom.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n42 +var xxx_messageInfo_Secret proto.InternalMessageInfo + +func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } +func (*SecretEnvSource) ProtoMessage() {} +func (*SecretEnvSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{167} +} +func (m *SecretEnvSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretEnvSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *SecretEnvSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretEnvSource.Merge(m, src) +} +func (m *SecretEnvSource) XXX_Size() int { + return m.Size() +} +func (m *SecretEnvSource) XXX_DiscardUnknown() { + xxx_messageInfo_SecretEnvSource.DiscardUnknown(m) } -func (m *EnvVarSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_SecretEnvSource proto.InternalMessageInfo + +func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } +func (*SecretKeySelector) ProtoMessage() {} +func (*SecretKeySelector) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{168} +} +func (m *SecretKeySelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretKeySelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *SecretKeySelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretKeySelector.Merge(m, src) +} +func (m *SecretKeySelector) XXX_Size() int { + return m.Size() +} +func (m *SecretKeySelector) XXX_DiscardUnknown() { + xxx_messageInfo_SecretKeySelector.DiscardUnknown(m) } -func (m *EnvVarSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.FieldRef != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FieldRef.Size())) - n43, err := m.FieldRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n43 - } - if m.ResourceFieldRef != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) - n44, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n44 - } - if m.ConfigMapKeyRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapKeyRef.Size())) - n45, err := m.ConfigMapKeyRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n45 - } - if m.SecretKeyRef != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretKeyRef.Size())) - n46, err := m.SecretKeyRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n46 +var xxx_messageInfo_SecretKeySelector proto.InternalMessageInfo + +func (m *SecretList) Reset() { *m = SecretList{} } +func (*SecretList) ProtoMessage() {} +func (*SecretList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{169} +} +func (m *SecretList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *SecretList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretList.Merge(m, src) +} +func (m *SecretList) XXX_Size() int { + return m.Size() +} +func (m *SecretList) XXX_DiscardUnknown() { + xxx_messageInfo_SecretList.DiscardUnknown(m) } -func (m *Event) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_SecretList proto.InternalMessageInfo + +func (m *SecretProjection) Reset() { *m = SecretProjection{} } +func (*SecretProjection) ProtoMessage() {} +func (*SecretProjection) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{170} +} +func (m *SecretProjection) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretProjection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *SecretProjection) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretProjection.Merge(m, src) +} +func (m *SecretProjection) XXX_Size() int { + return m.Size() +} +func (m *SecretProjection) XXX_DiscardUnknown() { + xxx_messageInfo_SecretProjection.DiscardUnknown(m) } -func (m *Event) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n47, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_SecretProjection proto.InternalMessageInfo + +func (m *SecretReference) Reset() { *m = SecretReference{} } +func (*SecretReference) ProtoMessage() {} +func (*SecretReference) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{171} +} +func (m *SecretReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n47 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.InvolvedObject.Size())) - n48, err := m.InvolvedObject.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *SecretReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretReference.Merge(m, src) +} +func (m *SecretReference) XXX_Size() int { + return m.Size() +} +func (m *SecretReference) XXX_DiscardUnknown() { + xxx_messageInfo_SecretReference.DiscardUnknown(m) +} + +var xxx_messageInfo_SecretReference proto.InternalMessageInfo + +func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } +func (*SecretVolumeSource) ProtoMessage() {} +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{172} +} +func (m *SecretVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n48 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n49, err := m.Source.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *SecretVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretVolumeSource.Merge(m, src) +} +func (m *SecretVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *SecretVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_SecretVolumeSource.DiscardUnknown(m) +} + +var xxx_messageInfo_SecretVolumeSource proto.InternalMessageInfo + +func (m *SecurityContext) Reset() { *m = SecurityContext{} } +func (*SecurityContext) ProtoMessage() {} +func (*SecurityContext) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{173} +} +func (m *SecurityContext) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecurityContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n49 - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FirstTimestamp.Size())) - n50, err := m.FirstTimestamp.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *SecurityContext) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityContext.Merge(m, src) +} +func (m *SecurityContext) XXX_Size() int { + return m.Size() +} +func (m *SecurityContext) XXX_DiscardUnknown() { + xxx_messageInfo_SecurityContext.DiscardUnknown(m) +} + +var xxx_messageInfo_SecurityContext proto.InternalMessageInfo + +func (m *SerializedReference) Reset() { *m = SerializedReference{} } +func (*SerializedReference) ProtoMessage() {} +func (*SerializedReference) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{174} +} +func (m *SerializedReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SerializedReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n50 - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTimestamp.Size())) - n51, err := m.LastTimestamp.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *SerializedReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_SerializedReference.Merge(m, src) +} +func (m *SerializedReference) XXX_Size() int { + return m.Size() +} +func (m *SerializedReference) XXX_DiscardUnknown() { + xxx_messageInfo_SerializedReference.DiscardUnknown(m) +} + +var xxx_messageInfo_SerializedReference proto.InternalMessageInfo + +func (m *Service) Reset() { *m = Service{} } +func (*Service) ProtoMessage() {} +func (*Service) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{175} +} +func (m *Service) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n51 - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EventTime.Size())) - n52, err := m.EventTime.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *Service) XXX_Merge(src proto.Message) { + xxx_messageInfo_Service.Merge(m, src) +} +func (m *Service) XXX_Size() int { + return m.Size() +} +func (m *Service) XXX_DiscardUnknown() { + xxx_messageInfo_Service.DiscardUnknown(m) +} + +var xxx_messageInfo_Service proto.InternalMessageInfo + +func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } +func (*ServiceAccount) ProtoMessage() {} +func (*ServiceAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{176} +} +func (m *ServiceAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n52 - if m.Series != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Series.Size())) - n53, err := m.Series.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n53 - } - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Action))) - i += copy(dAtA[i:], m.Action) - if m.Related != nil { - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Related.Size())) - n54, err := m.Related.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n54 + return nil, err } - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingController))) - i += copy(dAtA[i:], m.ReportingController) - dAtA[i] = 0x7a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingInstance))) - i += copy(dAtA[i:], m.ReportingInstance) - return i, nil + return b[:n], nil +} +func (m *ServiceAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAccount.Merge(m, src) +} +func (m *ServiceAccount) XXX_Size() int { + return m.Size() +} +func (m *ServiceAccount) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAccount.DiscardUnknown(m) } -func (m *EventList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ServiceAccount proto.InternalMessageInfo + +func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } +func (*ServiceAccountList) ProtoMessage() {} +func (*ServiceAccountList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{177} +} +func (m *ServiceAccountList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceAccountList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ServiceAccountList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAccountList.Merge(m, src) +} +func (m *ServiceAccountList) XXX_Size() int { + return m.Size() +} +func (m *ServiceAccountList) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAccountList.DiscardUnknown(m) } -func (m *EventList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n55, err := m.ListMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_ServiceAccountList proto.InternalMessageInfo + +func (m *ServiceAccountTokenProjection) Reset() { *m = ServiceAccountTokenProjection{} } +func (*ServiceAccountTokenProjection) ProtoMessage() {} +func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{178} +} +func (m *ServiceAccountTokenProjection) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceAccountTokenProjection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n55 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *ServiceAccountTokenProjection) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAccountTokenProjection.Merge(m, src) +} +func (m *ServiceAccountTokenProjection) XXX_Size() int { + return m.Size() +} +func (m *ServiceAccountTokenProjection) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAccountTokenProjection.DiscardUnknown(m) } -func (m *EventSeries) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ServiceAccountTokenProjection proto.InternalMessageInfo + +func (m *ServiceList) Reset() { *m = ServiceList{} } +func (*ServiceList) ProtoMessage() {} +func (*ServiceList) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{179} +} +func (m *ServiceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ServiceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceList.Merge(m, src) +} +func (m *ServiceList) XXX_Size() int { + return m.Size() +} +func (m *ServiceList) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceList.DiscardUnknown(m) } -func (m *EventSeries) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastObservedTime.Size())) - n56, err := m.LastObservedTime.MarshalTo(dAtA[i:]) +var xxx_messageInfo_ServiceList proto.InternalMessageInfo + +func (m *ServicePort) Reset() { *m = ServicePort{} } +func (*ServicePort) ProtoMessage() {} +func (*ServicePort) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{180} +} +func (m *ServicePort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServicePort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n56 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) - i += copy(dAtA[i:], m.State) - return i, nil + return b[:n], nil +} +func (m *ServicePort) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServicePort.Merge(m, src) +} +func (m *ServicePort) XXX_Size() int { + return m.Size() +} +func (m *ServicePort) XXX_DiscardUnknown() { + xxx_messageInfo_ServicePort.DiscardUnknown(m) } -func (m *EventSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ServicePort proto.InternalMessageInfo + +func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } +func (*ServiceProxyOptions) ProtoMessage() {} +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{181} +} +func (m *ServiceProxyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceProxyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil } - -func (m *EventSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Component))) - i += copy(dAtA[i:], m.Component) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) - i += copy(dAtA[i:], m.Host) - return i, nil +func (m *ServiceProxyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceProxyOptions.Merge(m, src) +} +func (m *ServiceProxyOptions) XXX_Size() int { + return m.Size() +} +func (m *ServiceProxyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceProxyOptions.DiscardUnknown(m) } -func (m *ExecAction) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ServiceProxyOptions proto.InternalMessageInfo + +func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } +func (*ServiceSpec) ProtoMessage() {} +func (*ServiceSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{182} +} +func (m *ServiceSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *ServiceSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceSpec.Merge(m, src) +} +func (m *ServiceSpec) XXX_Size() int { + return m.Size() +} +func (m *ServiceSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceSpec.DiscardUnknown(m) } -func (m *ExecAction) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Command) > 0 { - for _, s := range m.Command { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } +var xxx_messageInfo_ServiceSpec proto.InternalMessageInfo + +func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } +func (*ServiceStatus) ProtoMessage() {} +func (*ServiceStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{183} +} +func (m *ServiceStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *ServiceStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceStatus.Merge(m, src) +} +func (m *ServiceStatus) XXX_Size() int { + return m.Size() +} +func (m *ServiceStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceStatus.DiscardUnknown(m) } -func (m *FCVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_ServiceStatus proto.InternalMessageInfo + +func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } +func (*SessionAffinityConfig) ProtoMessage() {} +func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{184} +} +func (m *SessionAffinityConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SessionAffinityConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *SessionAffinityConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_SessionAffinityConfig.Merge(m, src) +} +func (m *SessionAffinityConfig) XXX_Size() int { + return m.Size() +} +func (m *SessionAffinityConfig) XXX_DiscardUnknown() { + xxx_messageInfo_SessionAffinityConfig.DiscardUnknown(m) } -func (m *FCVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.TargetWWNs) > 0 { - for _, s := range m.TargetWWNs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.Lun != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Lun)) - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if len(m.WWIDs) > 0 { - for _, s := range m.WWIDs { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } +var xxx_messageInfo_SessionAffinityConfig proto.InternalMessageInfo + +func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } +func (*StorageOSPersistentVolumeSource) ProtoMessage() {} +func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{185} +} +func (m *StorageOSPersistentVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageOSPersistentVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *StorageOSPersistentVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageOSPersistentVolumeSource.Merge(m, src) +} +func (m *StorageOSPersistentVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *StorageOSPersistentVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_StorageOSPersistentVolumeSource.DiscardUnknown(m) } -func (m *FlexPersistentVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_StorageOSPersistentVolumeSource proto.InternalMessageInfo + +func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } +func (*StorageOSVolumeSource) ProtoMessage() {} +func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{186} +} +func (m *StorageOSVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageOSVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *StorageOSVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageOSVolumeSource.Merge(m, src) +} +func (m *StorageOSVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *StorageOSVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_StorageOSVolumeSource.DiscardUnknown(m) } -func (m *FlexPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) - i += copy(dAtA[i:], m.Driver) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - if m.SecretRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n57, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n57 - } - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if len(m.Options) > 0 { - keysForOptions := make([]string, 0, len(m.Options)) - for k := range m.Options { - keysForOptions = append(keysForOptions, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) - for _, k := range keysForOptions { - dAtA[i] = 0x2a - i++ - v := m.Options[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } +var xxx_messageInfo_StorageOSVolumeSource proto.InternalMessageInfo + +func (m *Sysctl) Reset() { *m = Sysctl{} } +func (*Sysctl) ProtoMessage() {} +func (*Sysctl) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{187} +} +func (m *Sysctl) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Sysctl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *Sysctl) XXX_Merge(src proto.Message) { + xxx_messageInfo_Sysctl.Merge(m, src) +} +func (m *Sysctl) XXX_Size() int { + return m.Size() +} +func (m *Sysctl) XXX_DiscardUnknown() { + xxx_messageInfo_Sysctl.DiscardUnknown(m) } -func (m *FlexVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_Sysctl proto.InternalMessageInfo + +func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } +func (*TCPSocketAction) ProtoMessage() {} +func (*TCPSocketAction) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{188} +} +func (m *TCPSocketAction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TCPSocketAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *TCPSocketAction) XXX_Merge(src proto.Message) { + xxx_messageInfo_TCPSocketAction.Merge(m, src) +} +func (m *TCPSocketAction) XXX_Size() int { + return m.Size() +} +func (m *TCPSocketAction) XXX_DiscardUnknown() { + xxx_messageInfo_TCPSocketAction.DiscardUnknown(m) } -func (m *FlexVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) - i += copy(dAtA[i:], m.Driver) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - if m.SecretRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n58, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n58 +var xxx_messageInfo_TCPSocketAction proto.InternalMessageInfo + +func (m *Taint) Reset() { *m = Taint{} } +func (*Taint) ProtoMessage() {} +func (*Taint) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{189} +} +func (m *Taint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Taint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + return b[:n], nil +} +func (m *Taint) XXX_Merge(src proto.Message) { + xxx_messageInfo_Taint.Merge(m, src) +} +func (m *Taint) XXX_Size() int { + return m.Size() +} +func (m *Taint) XXX_DiscardUnknown() { + xxx_messageInfo_Taint.DiscardUnknown(m) +} + +var xxx_messageInfo_Taint proto.InternalMessageInfo + +func (m *Toleration) Reset() { *m = Toleration{} } +func (*Toleration) ProtoMessage() {} +func (*Toleration) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{190} +} +func (m *Toleration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Toleration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - i++ - if len(m.Options) > 0 { - keysForOptions := make([]string, 0, len(m.Options)) - for k := range m.Options { - keysForOptions = append(keysForOptions, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) - for _, k := range keysForOptions { - dAtA[i] = 0x2a - i++ - v := m.Options[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } + return b[:n], nil +} +func (m *Toleration) XXX_Merge(src proto.Message) { + xxx_messageInfo_Toleration.Merge(m, src) +} +func (m *Toleration) XXX_Size() int { + return m.Size() +} +func (m *Toleration) XXX_DiscardUnknown() { + xxx_messageInfo_Toleration.DiscardUnknown(m) +} + +var xxx_messageInfo_Toleration proto.InternalMessageInfo + +func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelectorLabelRequirement{} } +func (*TopologySelectorLabelRequirement) ProtoMessage() {} +func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{191} +} +func (m *TopologySelectorLabelRequirement) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TopologySelectorLabelRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *TopologySelectorLabelRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_TopologySelectorLabelRequirement.Merge(m, src) +} +func (m *TopologySelectorLabelRequirement) XXX_Size() int { + return m.Size() +} +func (m *TopologySelectorLabelRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_TopologySelectorLabelRequirement.DiscardUnknown(m) } -func (m *FlockerVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_TopologySelectorLabelRequirement proto.InternalMessageInfo + +func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} } +func (*TopologySelectorTerm) ProtoMessage() {} +func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{192} +} +func (m *TopologySelectorTerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TopologySelectorTerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *TopologySelectorTerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_TopologySelectorTerm.Merge(m, src) +} +func (m *TopologySelectorTerm) XXX_Size() int { + return m.Size() +} +func (m *TopologySelectorTerm) XXX_DiscardUnknown() { + xxx_messageInfo_TopologySelectorTerm.DiscardUnknown(m) } -func (m *FlockerVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DatasetName))) - i += copy(dAtA[i:], m.DatasetName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DatasetUUID))) - i += copy(dAtA[i:], m.DatasetUUID) - return i, nil +var xxx_messageInfo_TopologySelectorTerm proto.InternalMessageInfo + +func (m *TopologySpreadConstraint) Reset() { *m = TopologySpreadConstraint{} } +func (*TopologySpreadConstraint) ProtoMessage() {} +func (*TopologySpreadConstraint) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{193} +} +func (m *TopologySpreadConstraint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TopologySpreadConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TopologySpreadConstraint) XXX_Merge(src proto.Message) { + xxx_messageInfo_TopologySpreadConstraint.Merge(m, src) +} +func (m *TopologySpreadConstraint) XXX_Size() int { + return m.Size() +} +func (m *TopologySpreadConstraint) XXX_DiscardUnknown() { + xxx_messageInfo_TopologySpreadConstraint.DiscardUnknown(m) } -func (m *GCEPersistentDiskVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_TopologySpreadConstraint proto.InternalMessageInfo + +func (m *TypedLocalObjectReference) Reset() { *m = TypedLocalObjectReference{} } +func (*TypedLocalObjectReference) ProtoMessage() {} +func (*TypedLocalObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{194} +} +func (m *TypedLocalObjectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TypedLocalObjectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *TypedLocalObjectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_TypedLocalObjectReference.Merge(m, src) +} +func (m *TypedLocalObjectReference) XXX_Size() int { + return m.Size() +} +func (m *TypedLocalObjectReference) XXX_DiscardUnknown() { + xxx_messageInfo_TypedLocalObjectReference.DiscardUnknown(m) } -func (m *GCEPersistentDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PDName))) - i += copy(dAtA[i:], m.PDName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Partition)) - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 +var xxx_messageInfo_TypedLocalObjectReference proto.InternalMessageInfo + +func (m *Volume) Reset() { *m = Volume{} } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{195} +} +func (m *Volume) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Volume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - i++ - return i, nil + return b[:n], nil +} +func (m *Volume) XXX_Merge(src proto.Message) { + xxx_messageInfo_Volume.Merge(m, src) +} +func (m *Volume) XXX_Size() int { + return m.Size() +} +func (m *Volume) XXX_DiscardUnknown() { + xxx_messageInfo_Volume.DiscardUnknown(m) } -func (m *GitRepoVolumeSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_Volume proto.InternalMessageInfo + +func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } +func (*VolumeDevice) ProtoMessage() {} +func (*VolumeDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{196} +} +func (m *VolumeDevice) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *VolumeDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeDevice.Merge(m, src) +} +func (m *VolumeDevice) XXX_Size() int { + return m.Size() +} +func (m *VolumeDevice) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeDevice.DiscardUnknown(m) } -func (m *GitRepoVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Repository))) - i += copy(dAtA[i:], m.Repository) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Revision))) - i += copy(dAtA[i:], m.Revision) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Directory))) - i += copy(dAtA[i:], m.Directory) - return i, nil +var xxx_messageInfo_VolumeDevice proto.InternalMessageInfo + +func (m *VolumeMount) Reset() { *m = VolumeMount{} } +func (*VolumeMount) ProtoMessage() {} +func (*VolumeMount) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{197} +} +func (m *VolumeMount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeMount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeMount) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeMount.Merge(m, src) +} +func (m *VolumeMount) XXX_Size() int { + return m.Size() +} +func (m *VolumeMount) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeMount.DiscardUnknown(m) } -func (m *GlusterfsVolumeSource) Marshal() (dAtA []byte, err error) { +var xxx_messageInfo_VolumeMount proto.InternalMessageInfo + +func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } +func (*VolumeNodeAffinity) ProtoMessage() {} +func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{198} +} +func (m *VolumeNodeAffinity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeNodeAffinity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeNodeAffinity) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeNodeAffinity.Merge(m, src) +} +func (m *VolumeNodeAffinity) XXX_Size() int { + return m.Size() +} +func (m *VolumeNodeAffinity) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeNodeAffinity.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeNodeAffinity proto.InternalMessageInfo + +func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } +func (*VolumeProjection) ProtoMessage() {} +func (*VolumeProjection) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{199} +} +func (m *VolumeProjection) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeProjection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeProjection) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeProjection.Merge(m, src) +} +func (m *VolumeProjection) XXX_Size() int { + return m.Size() +} +func (m *VolumeProjection) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeProjection.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeProjection proto.InternalMessageInfo + +func (m *VolumeSource) Reset() { *m = VolumeSource{} } +func (*VolumeSource) ProtoMessage() {} +func (*VolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{200} +} +func (m *VolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeSource.Merge(m, src) +} +func (m *VolumeSource) XXX_Size() int { + return m.Size() +} +func (m *VolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeSource proto.InternalMessageInfo + +func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } +func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} +func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{201} +} +func (m *VsphereVirtualDiskVolumeSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VsphereVirtualDiskVolumeSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VsphereVirtualDiskVolumeSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VsphereVirtualDiskVolumeSource.Merge(m, src) +} +func (m *VsphereVirtualDiskVolumeSource) XXX_Size() int { + return m.Size() +} +func (m *VsphereVirtualDiskVolumeSource) XXX_DiscardUnknown() { + xxx_messageInfo_VsphereVirtualDiskVolumeSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VsphereVirtualDiskVolumeSource proto.InternalMessageInfo + +func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } +func (*WeightedPodAffinityTerm) ProtoMessage() {} +func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{202} +} +func (m *WeightedPodAffinityTerm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WeightedPodAffinityTerm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WeightedPodAffinityTerm) XXX_Merge(src proto.Message) { + xxx_messageInfo_WeightedPodAffinityTerm.Merge(m, src) +} +func (m *WeightedPodAffinityTerm) XXX_Size() int { + return m.Size() +} +func (m *WeightedPodAffinityTerm) XXX_DiscardUnknown() { + xxx_messageInfo_WeightedPodAffinityTerm.DiscardUnknown(m) +} + +var xxx_messageInfo_WeightedPodAffinityTerm proto.InternalMessageInfo + +func (m *WindowsSecurityContextOptions) Reset() { *m = WindowsSecurityContextOptions{} } +func (*WindowsSecurityContextOptions) ProtoMessage() {} +func (*WindowsSecurityContextOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_83c10c24ec417dc9, []int{203} +} +func (m *WindowsSecurityContextOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WindowsSecurityContextOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WindowsSecurityContextOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_WindowsSecurityContextOptions.Merge(m, src) +} +func (m *WindowsSecurityContextOptions) XXX_Size() int { + return m.Size() +} +func (m *WindowsSecurityContextOptions) XXX_DiscardUnknown() { + xxx_messageInfo_WindowsSecurityContextOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_WindowsSecurityContextOptions proto.InternalMessageInfo + +func init() { + proto.RegisterType((*AWSElasticBlockStoreVolumeSource)(nil), "k8s.io.api.core.v1.AWSElasticBlockStoreVolumeSource") + proto.RegisterType((*Affinity)(nil), "k8s.io.api.core.v1.Affinity") + proto.RegisterType((*AttachedVolume)(nil), "k8s.io.api.core.v1.AttachedVolume") + proto.RegisterType((*AvoidPods)(nil), "k8s.io.api.core.v1.AvoidPods") + proto.RegisterType((*AzureDiskVolumeSource)(nil), "k8s.io.api.core.v1.AzureDiskVolumeSource") + proto.RegisterType((*AzureFilePersistentVolumeSource)(nil), "k8s.io.api.core.v1.AzureFilePersistentVolumeSource") + proto.RegisterType((*AzureFileVolumeSource)(nil), "k8s.io.api.core.v1.AzureFileVolumeSource") + proto.RegisterType((*Binding)(nil), "k8s.io.api.core.v1.Binding") + proto.RegisterType((*CSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CSIPersistentVolumeSource") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.CSIPersistentVolumeSource.VolumeAttributesEntry") + proto.RegisterType((*CSIVolumeSource)(nil), "k8s.io.api.core.v1.CSIVolumeSource") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.CSIVolumeSource.VolumeAttributesEntry") + proto.RegisterType((*Capabilities)(nil), "k8s.io.api.core.v1.Capabilities") + proto.RegisterType((*CephFSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CephFSPersistentVolumeSource") + proto.RegisterType((*CephFSVolumeSource)(nil), "k8s.io.api.core.v1.CephFSVolumeSource") + proto.RegisterType((*CinderPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CinderPersistentVolumeSource") + proto.RegisterType((*CinderVolumeSource)(nil), "k8s.io.api.core.v1.CinderVolumeSource") + proto.RegisterType((*ClientIPConfig)(nil), "k8s.io.api.core.v1.ClientIPConfig") + proto.RegisterType((*ComponentCondition)(nil), "k8s.io.api.core.v1.ComponentCondition") + proto.RegisterType((*ComponentStatus)(nil), "k8s.io.api.core.v1.ComponentStatus") + proto.RegisterType((*ComponentStatusList)(nil), "k8s.io.api.core.v1.ComponentStatusList") + proto.RegisterType((*ConfigMap)(nil), "k8s.io.api.core.v1.ConfigMap") + proto.RegisterMapType((map[string][]byte)(nil), "k8s.io.api.core.v1.ConfigMap.BinaryDataEntry") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.ConfigMap.DataEntry") + proto.RegisterType((*ConfigMapEnvSource)(nil), "k8s.io.api.core.v1.ConfigMapEnvSource") + proto.RegisterType((*ConfigMapKeySelector)(nil), "k8s.io.api.core.v1.ConfigMapKeySelector") + proto.RegisterType((*ConfigMapList)(nil), "k8s.io.api.core.v1.ConfigMapList") + proto.RegisterType((*ConfigMapNodeConfigSource)(nil), "k8s.io.api.core.v1.ConfigMapNodeConfigSource") + proto.RegisterType((*ConfigMapProjection)(nil), "k8s.io.api.core.v1.ConfigMapProjection") + proto.RegisterType((*ConfigMapVolumeSource)(nil), "k8s.io.api.core.v1.ConfigMapVolumeSource") + proto.RegisterType((*Container)(nil), "k8s.io.api.core.v1.Container") + proto.RegisterType((*ContainerImage)(nil), "k8s.io.api.core.v1.ContainerImage") + proto.RegisterType((*ContainerPort)(nil), "k8s.io.api.core.v1.ContainerPort") + proto.RegisterType((*ContainerState)(nil), "k8s.io.api.core.v1.ContainerState") + proto.RegisterType((*ContainerStateRunning)(nil), "k8s.io.api.core.v1.ContainerStateRunning") + proto.RegisterType((*ContainerStateTerminated)(nil), "k8s.io.api.core.v1.ContainerStateTerminated") + proto.RegisterType((*ContainerStateWaiting)(nil), "k8s.io.api.core.v1.ContainerStateWaiting") + proto.RegisterType((*ContainerStatus)(nil), "k8s.io.api.core.v1.ContainerStatus") + proto.RegisterType((*DaemonEndpoint)(nil), "k8s.io.api.core.v1.DaemonEndpoint") + proto.RegisterType((*DownwardAPIProjection)(nil), "k8s.io.api.core.v1.DownwardAPIProjection") + proto.RegisterType((*DownwardAPIVolumeFile)(nil), "k8s.io.api.core.v1.DownwardAPIVolumeFile") + proto.RegisterType((*DownwardAPIVolumeSource)(nil), "k8s.io.api.core.v1.DownwardAPIVolumeSource") + proto.RegisterType((*EmptyDirVolumeSource)(nil), "k8s.io.api.core.v1.EmptyDirVolumeSource") + proto.RegisterType((*EndpointAddress)(nil), "k8s.io.api.core.v1.EndpointAddress") + proto.RegisterType((*EndpointPort)(nil), "k8s.io.api.core.v1.EndpointPort") + proto.RegisterType((*EndpointSubset)(nil), "k8s.io.api.core.v1.EndpointSubset") + proto.RegisterType((*Endpoints)(nil), "k8s.io.api.core.v1.Endpoints") + proto.RegisterType((*EndpointsList)(nil), "k8s.io.api.core.v1.EndpointsList") + proto.RegisterType((*EnvFromSource)(nil), "k8s.io.api.core.v1.EnvFromSource") + proto.RegisterType((*EnvVar)(nil), "k8s.io.api.core.v1.EnvVar") + proto.RegisterType((*EnvVarSource)(nil), "k8s.io.api.core.v1.EnvVarSource") + proto.RegisterType((*EphemeralContainer)(nil), "k8s.io.api.core.v1.EphemeralContainer") + proto.RegisterType((*EphemeralContainerCommon)(nil), "k8s.io.api.core.v1.EphemeralContainerCommon") + proto.RegisterType((*EphemeralContainers)(nil), "k8s.io.api.core.v1.EphemeralContainers") + proto.RegisterType((*Event)(nil), "k8s.io.api.core.v1.Event") + proto.RegisterType((*EventList)(nil), "k8s.io.api.core.v1.EventList") + proto.RegisterType((*EventSeries)(nil), "k8s.io.api.core.v1.EventSeries") + proto.RegisterType((*EventSource)(nil), "k8s.io.api.core.v1.EventSource") + proto.RegisterType((*ExecAction)(nil), "k8s.io.api.core.v1.ExecAction") + proto.RegisterType((*FCVolumeSource)(nil), "k8s.io.api.core.v1.FCVolumeSource") + proto.RegisterType((*FlexPersistentVolumeSource)(nil), "k8s.io.api.core.v1.FlexPersistentVolumeSource") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.FlexPersistentVolumeSource.OptionsEntry") + proto.RegisterType((*FlexVolumeSource)(nil), "k8s.io.api.core.v1.FlexVolumeSource") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.FlexVolumeSource.OptionsEntry") + proto.RegisterType((*FlockerVolumeSource)(nil), "k8s.io.api.core.v1.FlockerVolumeSource") + proto.RegisterType((*GCEPersistentDiskVolumeSource)(nil), "k8s.io.api.core.v1.GCEPersistentDiskVolumeSource") + proto.RegisterType((*GitRepoVolumeSource)(nil), "k8s.io.api.core.v1.GitRepoVolumeSource") + proto.RegisterType((*GlusterfsPersistentVolumeSource)(nil), "k8s.io.api.core.v1.GlusterfsPersistentVolumeSource") + proto.RegisterType((*GlusterfsVolumeSource)(nil), "k8s.io.api.core.v1.GlusterfsVolumeSource") + proto.RegisterType((*HTTPGetAction)(nil), "k8s.io.api.core.v1.HTTPGetAction") + proto.RegisterType((*HTTPHeader)(nil), "k8s.io.api.core.v1.HTTPHeader") + proto.RegisterType((*Handler)(nil), "k8s.io.api.core.v1.Handler") + proto.RegisterType((*HostAlias)(nil), "k8s.io.api.core.v1.HostAlias") + proto.RegisterType((*HostPathVolumeSource)(nil), "k8s.io.api.core.v1.HostPathVolumeSource") + proto.RegisterType((*ISCSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.ISCSIPersistentVolumeSource") + proto.RegisterType((*ISCSIVolumeSource)(nil), "k8s.io.api.core.v1.ISCSIVolumeSource") + proto.RegisterType((*KeyToPath)(nil), "k8s.io.api.core.v1.KeyToPath") + proto.RegisterType((*Lifecycle)(nil), "k8s.io.api.core.v1.Lifecycle") + proto.RegisterType((*LimitRange)(nil), "k8s.io.api.core.v1.LimitRange") + proto.RegisterType((*LimitRangeItem)(nil), "k8s.io.api.core.v1.LimitRangeItem") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.LimitRangeItem.DefaultEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.LimitRangeItem.DefaultRequestEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.LimitRangeItem.MaxEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.LimitRangeItem.MaxLimitRequestRatioEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.LimitRangeItem.MinEntry") + proto.RegisterType((*LimitRangeList)(nil), "k8s.io.api.core.v1.LimitRangeList") + proto.RegisterType((*LimitRangeSpec)(nil), "k8s.io.api.core.v1.LimitRangeSpec") + proto.RegisterType((*List)(nil), "k8s.io.api.core.v1.List") + proto.RegisterType((*LoadBalancerIngress)(nil), "k8s.io.api.core.v1.LoadBalancerIngress") + proto.RegisterType((*LoadBalancerStatus)(nil), "k8s.io.api.core.v1.LoadBalancerStatus") + proto.RegisterType((*LocalObjectReference)(nil), "k8s.io.api.core.v1.LocalObjectReference") + proto.RegisterType((*LocalVolumeSource)(nil), "k8s.io.api.core.v1.LocalVolumeSource") + proto.RegisterType((*NFSVolumeSource)(nil), "k8s.io.api.core.v1.NFSVolumeSource") + proto.RegisterType((*Namespace)(nil), "k8s.io.api.core.v1.Namespace") + proto.RegisterType((*NamespaceCondition)(nil), "k8s.io.api.core.v1.NamespaceCondition") + proto.RegisterType((*NamespaceList)(nil), "k8s.io.api.core.v1.NamespaceList") + proto.RegisterType((*NamespaceSpec)(nil), "k8s.io.api.core.v1.NamespaceSpec") + proto.RegisterType((*NamespaceStatus)(nil), "k8s.io.api.core.v1.NamespaceStatus") + proto.RegisterType((*Node)(nil), "k8s.io.api.core.v1.Node") + proto.RegisterType((*NodeAddress)(nil), "k8s.io.api.core.v1.NodeAddress") + proto.RegisterType((*NodeAffinity)(nil), "k8s.io.api.core.v1.NodeAffinity") + proto.RegisterType((*NodeCondition)(nil), "k8s.io.api.core.v1.NodeCondition") + proto.RegisterType((*NodeConfigSource)(nil), "k8s.io.api.core.v1.NodeConfigSource") + proto.RegisterType((*NodeConfigStatus)(nil), "k8s.io.api.core.v1.NodeConfigStatus") + proto.RegisterType((*NodeDaemonEndpoints)(nil), "k8s.io.api.core.v1.NodeDaemonEndpoints") + proto.RegisterType((*NodeList)(nil), "k8s.io.api.core.v1.NodeList") + proto.RegisterType((*NodeProxyOptions)(nil), "k8s.io.api.core.v1.NodeProxyOptions") + proto.RegisterType((*NodeResources)(nil), "k8s.io.api.core.v1.NodeResources") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.NodeResources.CapacityEntry") + proto.RegisterType((*NodeSelector)(nil), "k8s.io.api.core.v1.NodeSelector") + proto.RegisterType((*NodeSelectorRequirement)(nil), "k8s.io.api.core.v1.NodeSelectorRequirement") + proto.RegisterType((*NodeSelectorTerm)(nil), "k8s.io.api.core.v1.NodeSelectorTerm") + proto.RegisterType((*NodeSpec)(nil), "k8s.io.api.core.v1.NodeSpec") + proto.RegisterType((*NodeStatus)(nil), "k8s.io.api.core.v1.NodeStatus") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.NodeStatus.AllocatableEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.NodeStatus.CapacityEntry") + proto.RegisterType((*NodeSystemInfo)(nil), "k8s.io.api.core.v1.NodeSystemInfo") + proto.RegisterType((*ObjectFieldSelector)(nil), "k8s.io.api.core.v1.ObjectFieldSelector") + proto.RegisterType((*ObjectReference)(nil), "k8s.io.api.core.v1.ObjectReference") + proto.RegisterType((*PersistentVolume)(nil), "k8s.io.api.core.v1.PersistentVolume") + proto.RegisterType((*PersistentVolumeClaim)(nil), "k8s.io.api.core.v1.PersistentVolumeClaim") + proto.RegisterType((*PersistentVolumeClaimCondition)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimCondition") + proto.RegisterType((*PersistentVolumeClaimList)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimList") + proto.RegisterType((*PersistentVolumeClaimSpec)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimSpec") + proto.RegisterType((*PersistentVolumeClaimStatus)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimStatus") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimStatus.CapacityEntry") + proto.RegisterType((*PersistentVolumeClaimVolumeSource)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimVolumeSource") + proto.RegisterType((*PersistentVolumeList)(nil), "k8s.io.api.core.v1.PersistentVolumeList") + proto.RegisterType((*PersistentVolumeSource)(nil), "k8s.io.api.core.v1.PersistentVolumeSource") + proto.RegisterType((*PersistentVolumeSpec)(nil), "k8s.io.api.core.v1.PersistentVolumeSpec") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.PersistentVolumeSpec.CapacityEntry") + proto.RegisterType((*PersistentVolumeStatus)(nil), "k8s.io.api.core.v1.PersistentVolumeStatus") + proto.RegisterType((*PhotonPersistentDiskVolumeSource)(nil), "k8s.io.api.core.v1.PhotonPersistentDiskVolumeSource") + proto.RegisterType((*Pod)(nil), "k8s.io.api.core.v1.Pod") + proto.RegisterType((*PodAffinity)(nil), "k8s.io.api.core.v1.PodAffinity") + proto.RegisterType((*PodAffinityTerm)(nil), "k8s.io.api.core.v1.PodAffinityTerm") + proto.RegisterType((*PodAntiAffinity)(nil), "k8s.io.api.core.v1.PodAntiAffinity") + proto.RegisterType((*PodAttachOptions)(nil), "k8s.io.api.core.v1.PodAttachOptions") + proto.RegisterType((*PodCondition)(nil), "k8s.io.api.core.v1.PodCondition") + proto.RegisterType((*PodDNSConfig)(nil), "k8s.io.api.core.v1.PodDNSConfig") + proto.RegisterType((*PodDNSConfigOption)(nil), "k8s.io.api.core.v1.PodDNSConfigOption") + proto.RegisterType((*PodExecOptions)(nil), "k8s.io.api.core.v1.PodExecOptions") + proto.RegisterType((*PodIP)(nil), "k8s.io.api.core.v1.PodIP") + proto.RegisterType((*PodList)(nil), "k8s.io.api.core.v1.PodList") + proto.RegisterType((*PodLogOptions)(nil), "k8s.io.api.core.v1.PodLogOptions") + proto.RegisterType((*PodPortForwardOptions)(nil), "k8s.io.api.core.v1.PodPortForwardOptions") + proto.RegisterType((*PodProxyOptions)(nil), "k8s.io.api.core.v1.PodProxyOptions") + proto.RegisterType((*PodReadinessGate)(nil), "k8s.io.api.core.v1.PodReadinessGate") + proto.RegisterType((*PodSecurityContext)(nil), "k8s.io.api.core.v1.PodSecurityContext") + proto.RegisterType((*PodSignature)(nil), "k8s.io.api.core.v1.PodSignature") + proto.RegisterType((*PodSpec)(nil), "k8s.io.api.core.v1.PodSpec") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.PodSpec.NodeSelectorEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.PodSpec.OverheadEntry") + proto.RegisterType((*PodStatus)(nil), "k8s.io.api.core.v1.PodStatus") + proto.RegisterType((*PodStatusResult)(nil), "k8s.io.api.core.v1.PodStatusResult") + proto.RegisterType((*PodTemplate)(nil), "k8s.io.api.core.v1.PodTemplate") + proto.RegisterType((*PodTemplateList)(nil), "k8s.io.api.core.v1.PodTemplateList") + proto.RegisterType((*PodTemplateSpec)(nil), "k8s.io.api.core.v1.PodTemplateSpec") + proto.RegisterType((*PortworxVolumeSource)(nil), "k8s.io.api.core.v1.PortworxVolumeSource") + proto.RegisterType((*Preconditions)(nil), "k8s.io.api.core.v1.Preconditions") + proto.RegisterType((*PreferAvoidPodsEntry)(nil), "k8s.io.api.core.v1.PreferAvoidPodsEntry") + proto.RegisterType((*PreferredSchedulingTerm)(nil), "k8s.io.api.core.v1.PreferredSchedulingTerm") + proto.RegisterType((*Probe)(nil), "k8s.io.api.core.v1.Probe") + proto.RegisterType((*ProjectedVolumeSource)(nil), "k8s.io.api.core.v1.ProjectedVolumeSource") + proto.RegisterType((*QuobyteVolumeSource)(nil), "k8s.io.api.core.v1.QuobyteVolumeSource") + proto.RegisterType((*RBDPersistentVolumeSource)(nil), "k8s.io.api.core.v1.RBDPersistentVolumeSource") + proto.RegisterType((*RBDVolumeSource)(nil), "k8s.io.api.core.v1.RBDVolumeSource") + proto.RegisterType((*RangeAllocation)(nil), "k8s.io.api.core.v1.RangeAllocation") + proto.RegisterType((*ReplicationController)(nil), "k8s.io.api.core.v1.ReplicationController") + proto.RegisterType((*ReplicationControllerCondition)(nil), "k8s.io.api.core.v1.ReplicationControllerCondition") + proto.RegisterType((*ReplicationControllerList)(nil), "k8s.io.api.core.v1.ReplicationControllerList") + proto.RegisterType((*ReplicationControllerSpec)(nil), "k8s.io.api.core.v1.ReplicationControllerSpec") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.ReplicationControllerSpec.SelectorEntry") + proto.RegisterType((*ReplicationControllerStatus)(nil), "k8s.io.api.core.v1.ReplicationControllerStatus") + proto.RegisterType((*ResourceFieldSelector)(nil), "k8s.io.api.core.v1.ResourceFieldSelector") + proto.RegisterType((*ResourceQuota)(nil), "k8s.io.api.core.v1.ResourceQuota") + proto.RegisterType((*ResourceQuotaList)(nil), "k8s.io.api.core.v1.ResourceQuotaList") + proto.RegisterType((*ResourceQuotaSpec)(nil), "k8s.io.api.core.v1.ResourceQuotaSpec") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceQuotaSpec.HardEntry") + proto.RegisterType((*ResourceQuotaStatus)(nil), "k8s.io.api.core.v1.ResourceQuotaStatus") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceQuotaStatus.HardEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceQuotaStatus.UsedEntry") + proto.RegisterType((*ResourceRequirements)(nil), "k8s.io.api.core.v1.ResourceRequirements") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceRequirements.LimitsEntry") + proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceRequirements.RequestsEntry") + proto.RegisterType((*SELinuxOptions)(nil), "k8s.io.api.core.v1.SELinuxOptions") + proto.RegisterType((*ScaleIOPersistentVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOPersistentVolumeSource") + proto.RegisterType((*ScaleIOVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOVolumeSource") + proto.RegisterType((*ScopeSelector)(nil), "k8s.io.api.core.v1.ScopeSelector") + proto.RegisterType((*ScopedResourceSelectorRequirement)(nil), "k8s.io.api.core.v1.ScopedResourceSelectorRequirement") + proto.RegisterType((*Secret)(nil), "k8s.io.api.core.v1.Secret") + proto.RegisterMapType((map[string][]byte)(nil), "k8s.io.api.core.v1.Secret.DataEntry") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.Secret.StringDataEntry") + proto.RegisterType((*SecretEnvSource)(nil), "k8s.io.api.core.v1.SecretEnvSource") + proto.RegisterType((*SecretKeySelector)(nil), "k8s.io.api.core.v1.SecretKeySelector") + proto.RegisterType((*SecretList)(nil), "k8s.io.api.core.v1.SecretList") + proto.RegisterType((*SecretProjection)(nil), "k8s.io.api.core.v1.SecretProjection") + proto.RegisterType((*SecretReference)(nil), "k8s.io.api.core.v1.SecretReference") + proto.RegisterType((*SecretVolumeSource)(nil), "k8s.io.api.core.v1.SecretVolumeSource") + proto.RegisterType((*SecurityContext)(nil), "k8s.io.api.core.v1.SecurityContext") + proto.RegisterType((*SerializedReference)(nil), "k8s.io.api.core.v1.SerializedReference") + proto.RegisterType((*Service)(nil), "k8s.io.api.core.v1.Service") + proto.RegisterType((*ServiceAccount)(nil), "k8s.io.api.core.v1.ServiceAccount") + proto.RegisterType((*ServiceAccountList)(nil), "k8s.io.api.core.v1.ServiceAccountList") + proto.RegisterType((*ServiceAccountTokenProjection)(nil), "k8s.io.api.core.v1.ServiceAccountTokenProjection") + proto.RegisterType((*ServiceList)(nil), "k8s.io.api.core.v1.ServiceList") + proto.RegisterType((*ServicePort)(nil), "k8s.io.api.core.v1.ServicePort") + proto.RegisterType((*ServiceProxyOptions)(nil), "k8s.io.api.core.v1.ServiceProxyOptions") + proto.RegisterType((*ServiceSpec)(nil), "k8s.io.api.core.v1.ServiceSpec") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.core.v1.ServiceSpec.SelectorEntry") + proto.RegisterType((*ServiceStatus)(nil), "k8s.io.api.core.v1.ServiceStatus") + proto.RegisterType((*SessionAffinityConfig)(nil), "k8s.io.api.core.v1.SessionAffinityConfig") + proto.RegisterType((*StorageOSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.StorageOSPersistentVolumeSource") + proto.RegisterType((*StorageOSVolumeSource)(nil), "k8s.io.api.core.v1.StorageOSVolumeSource") + proto.RegisterType((*Sysctl)(nil), "k8s.io.api.core.v1.Sysctl") + proto.RegisterType((*TCPSocketAction)(nil), "k8s.io.api.core.v1.TCPSocketAction") + proto.RegisterType((*Taint)(nil), "k8s.io.api.core.v1.Taint") + proto.RegisterType((*Toleration)(nil), "k8s.io.api.core.v1.Toleration") + proto.RegisterType((*TopologySelectorLabelRequirement)(nil), "k8s.io.api.core.v1.TopologySelectorLabelRequirement") + proto.RegisterType((*TopologySelectorTerm)(nil), "k8s.io.api.core.v1.TopologySelectorTerm") + proto.RegisterType((*TopologySpreadConstraint)(nil), "k8s.io.api.core.v1.TopologySpreadConstraint") + proto.RegisterType((*TypedLocalObjectReference)(nil), "k8s.io.api.core.v1.TypedLocalObjectReference") + proto.RegisterType((*Volume)(nil), "k8s.io.api.core.v1.Volume") + proto.RegisterType((*VolumeDevice)(nil), "k8s.io.api.core.v1.VolumeDevice") + proto.RegisterType((*VolumeMount)(nil), "k8s.io.api.core.v1.VolumeMount") + proto.RegisterType((*VolumeNodeAffinity)(nil), "k8s.io.api.core.v1.VolumeNodeAffinity") + proto.RegisterType((*VolumeProjection)(nil), "k8s.io.api.core.v1.VolumeProjection") + proto.RegisterType((*VolumeSource)(nil), "k8s.io.api.core.v1.VolumeSource") + proto.RegisterType((*VsphereVirtualDiskVolumeSource)(nil), "k8s.io.api.core.v1.VsphereVirtualDiskVolumeSource") + proto.RegisterType((*WeightedPodAffinityTerm)(nil), "k8s.io.api.core.v1.WeightedPodAffinityTerm") + proto.RegisterType((*WindowsSecurityContextOptions)(nil), "k8s.io.api.core.v1.WindowsSecurityContextOptions") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/core/v1/generated.proto", fileDescriptor_83c10c24ec417dc9) +} + +var fileDescriptor_83c10c24ec417dc9 = []byte{ + // 13567 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x70, 0x24, 0x49, + 0x5a, 0x18, 0x7e, 0xd5, 0xad, 0x47, 0xf7, 0xa7, 0x77, 0xce, 0x63, 0x35, 0xda, 0x9d, 0xd1, 0x6c, + 0xed, 0xdd, 0xec, 0xec, 0xed, 0xae, 0xe6, 0xf6, 0x75, 0xbb, 0xdc, 0xde, 0x2d, 0x48, 0x6a, 0x69, + 0xa6, 0x77, 0x46, 0x9a, 0xde, 0x6c, 0xcd, 0xcc, 0xdd, 0xb2, 0x77, 0x5c, 0xa9, 0x2b, 0x25, 0xd5, + 0xaa, 0xbb, 0xaa, 0xb7, 0xaa, 0x5a, 0x33, 0xda, 0x1f, 0xc4, 0x0f, 0x1f, 0xcf, 0x33, 0xe0, 0xb8, + 0xb0, 0x09, 0x3f, 0x80, 0xc0, 0x11, 0x18, 0x07, 0x60, 0xb0, 0xc3, 0x18, 0x0c, 0x98, 0xc3, 0x36, + 0x06, 0xdb, 0x81, 0xfd, 0x07, 0xc6, 0x0e, 0xdb, 0x47, 0x04, 0x61, 0x19, 0x06, 0x87, 0x89, 0xfb, + 0xc3, 0x40, 0x18, 0xfc, 0x87, 0x65, 0xc2, 0x38, 0xf2, 0x59, 0x99, 0xd5, 0x55, 0xdd, 0xad, 0x59, + 0x8d, 0x6e, 0xb9, 0xd8, 0xff, 0xba, 0xf3, 0xfb, 0xf2, 0xcb, 0xac, 0x7c, 0x7e, 0xf9, 0x3d, 0xe1, + 0xd5, 0xdd, 0x57, 0xa2, 0x05, 0x2f, 0xb8, 0xb2, 0xdb, 0xd9, 0x24, 0xa1, 0x4f, 0x62, 0x12, 0x5d, + 0xd9, 0x23, 0xbe, 0x1b, 0x84, 0x57, 0x04, 0xc0, 0x69, 0x7b, 0x57, 0x1a, 0x41, 0x48, 0xae, 0xec, + 0x3d, 0x77, 0x65, 0x9b, 0xf8, 0x24, 0x74, 0x62, 0xe2, 0x2e, 0xb4, 0xc3, 0x20, 0x0e, 0x10, 0xe2, + 0x38, 0x0b, 0x4e, 0xdb, 0x5b, 0xa0, 0x38, 0x0b, 0x7b, 0xcf, 0xcd, 0x3d, 0xbb, 0xed, 0xc5, 0x3b, + 0x9d, 0xcd, 0x85, 0x46, 0xd0, 0xba, 0xb2, 0x1d, 0x6c, 0x07, 0x57, 0x18, 0xea, 0x66, 0x67, 0x8b, + 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0x4e, 0x62, 0xee, 0xc5, 0xa4, 0x99, 0x96, 0xd3, 0xd8, 0xf1, 0x7c, + 0x12, 0xee, 0x5f, 0x69, 0xef, 0x6e, 0xb3, 0x76, 0x43, 0x12, 0x05, 0x9d, 0xb0, 0x41, 0xd2, 0x0d, + 0xf7, 0xac, 0x15, 0x5d, 0x69, 0x91, 0xd8, 0xc9, 0xe8, 0xee, 0xdc, 0x95, 0xbc, 0x5a, 0x61, 0xc7, + 0x8f, 0xbd, 0x56, 0x77, 0x33, 0x1f, 0xef, 0x57, 0x21, 0x6a, 0xec, 0x90, 0x96, 0xd3, 0x55, 0xef, + 0x85, 0xbc, 0x7a, 0x9d, 0xd8, 0x6b, 0x5e, 0xf1, 0xfc, 0x38, 0x8a, 0xc3, 0x74, 0x25, 0xfb, 0x2b, + 0x16, 0x5c, 0x5c, 0xbc, 0x53, 0x5f, 0x69, 0x3a, 0x51, 0xec, 0x35, 0x96, 0x9a, 0x41, 0x63, 0xb7, + 0x1e, 0x07, 0x21, 0xb9, 0x1d, 0x34, 0x3b, 0x2d, 0x52, 0x67, 0x03, 0x81, 0x9e, 0x81, 0xd2, 0x1e, + 0xfb, 0x5f, 0xad, 0xcc, 0x5a, 0x17, 0xad, 0xcb, 0xe5, 0xa5, 0xe9, 0xdf, 0x38, 0x98, 0xff, 0xd0, + 0xfd, 0x83, 0xf9, 0xd2, 0x6d, 0x51, 0x8e, 0x15, 0x06, 0xba, 0x04, 0x23, 0x5b, 0xd1, 0xc6, 0x7e, + 0x9b, 0xcc, 0x16, 0x18, 0xee, 0xa4, 0xc0, 0x1d, 0x59, 0xad, 0xd3, 0x52, 0x2c, 0xa0, 0xe8, 0x0a, + 0x94, 0xdb, 0x4e, 0x18, 0x7b, 0xb1, 0x17, 0xf8, 0xb3, 0xc5, 0x8b, 0xd6, 0xe5, 0xe1, 0xa5, 0x19, + 0x81, 0x5a, 0xae, 0x49, 0x00, 0x4e, 0x70, 0x68, 0x37, 0x42, 0xe2, 0xb8, 0x37, 0xfd, 0xe6, 0xfe, + 0xec, 0xd0, 0x45, 0xeb, 0x72, 0x29, 0xe9, 0x06, 0x16, 0xe5, 0x58, 0x61, 0xd8, 0x3f, 0x54, 0x80, + 0xd2, 0xe2, 0xd6, 0x96, 0xe7, 0x7b, 0xf1, 0x3e, 0xba, 0x0d, 0xe3, 0x7e, 0xe0, 0x12, 0xf9, 0x9f, + 0x7d, 0xc5, 0xd8, 0xf3, 0x17, 0x17, 0xba, 0x97, 0xd2, 0xc2, 0xba, 0x86, 0xb7, 0x34, 0x7d, 0xff, + 0x60, 0x7e, 0x5c, 0x2f, 0xc1, 0x06, 0x1d, 0x84, 0x61, 0xac, 0x1d, 0xb8, 0x8a, 0x6c, 0x81, 0x91, + 0x9d, 0xcf, 0x22, 0x5b, 0x4b, 0xd0, 0x96, 0xa6, 0xee, 0x1f, 0xcc, 0x8f, 0x69, 0x05, 0x58, 0x27, + 0x82, 0x36, 0x61, 0x8a, 0xfe, 0xf5, 0x63, 0x4f, 0xd1, 0x2d, 0x32, 0xba, 0x4f, 0xe4, 0xd1, 0xd5, + 0x50, 0x97, 0x4e, 0xdd, 0x3f, 0x98, 0x9f, 0x4a, 0x15, 0xe2, 0x34, 0x41, 0xfb, 0x5d, 0x98, 0x5c, + 0x8c, 0x63, 0xa7, 0xb1, 0x43, 0x5c, 0x3e, 0x83, 0xe8, 0x45, 0x18, 0xf2, 0x9d, 0x16, 0x11, 0xf3, + 0x7b, 0x51, 0x0c, 0xec, 0xd0, 0xba, 0xd3, 0x22, 0x87, 0x07, 0xf3, 0xd3, 0xb7, 0x7c, 0xef, 0x9d, + 0x8e, 0x58, 0x15, 0xb4, 0x0c, 0x33, 0x6c, 0xf4, 0x3c, 0x80, 0x4b, 0xf6, 0xbc, 0x06, 0xa9, 0x39, + 0xf1, 0x8e, 0x98, 0x6f, 0x24, 0xea, 0x42, 0x45, 0x41, 0xb0, 0x86, 0x65, 0xdf, 0x83, 0xf2, 0xe2, + 0x5e, 0xe0, 0xb9, 0xb5, 0xc0, 0x8d, 0xd0, 0x2e, 0x4c, 0xb5, 0x43, 0xb2, 0x45, 0x42, 0x55, 0x34, + 0x6b, 0x5d, 0x2c, 0x5e, 0x1e, 0x7b, 0xfe, 0x72, 0xe6, 0xc7, 0x9a, 0xa8, 0x2b, 0x7e, 0x1c, 0xee, + 0x2f, 0x3d, 0x22, 0xda, 0x9b, 0x4a, 0x41, 0x71, 0x9a, 0xb2, 0xfd, 0x2f, 0x0b, 0x70, 0x66, 0xf1, + 0xdd, 0x4e, 0x48, 0x2a, 0x5e, 0xb4, 0x9b, 0x5e, 0xe1, 0xae, 0x17, 0xed, 0xae, 0x27, 0x23, 0xa0, + 0x96, 0x56, 0x45, 0x94, 0x63, 0x85, 0x81, 0x9e, 0x85, 0x51, 0xfa, 0xfb, 0x16, 0xae, 0x8a, 0x4f, + 0x3e, 0x25, 0x90, 0xc7, 0x2a, 0x4e, 0xec, 0x54, 0x38, 0x08, 0x4b, 0x1c, 0xb4, 0x06, 0x63, 0x0d, + 0xb6, 0x21, 0xb7, 0xd7, 0x02, 0x97, 0xb0, 0xc9, 0x2c, 0x2f, 0x3d, 0x4d, 0xd1, 0x97, 0x93, 0xe2, + 0xc3, 0x83, 0xf9, 0x59, 0xde, 0x37, 0x41, 0x42, 0x83, 0x61, 0xbd, 0x3e, 0xb2, 0xd5, 0xfe, 0x1a, + 0x62, 0x94, 0x20, 0x63, 0x6f, 0x5d, 0xd6, 0xb6, 0xca, 0x30, 0xdb, 0x2a, 0xe3, 0xd9, 0xdb, 0x04, + 0x3d, 0x07, 0x43, 0xbb, 0x9e, 0xef, 0xce, 0x8e, 0x30, 0x5a, 0xe7, 0xe9, 0x9c, 0x5f, 0xf7, 0x7c, + 0xf7, 0xf0, 0x60, 0x7e, 0xc6, 0xe8, 0x0e, 0x2d, 0xc4, 0x0c, 0xd5, 0xfe, 0x13, 0x0b, 0xe6, 0x19, + 0x6c, 0xd5, 0x6b, 0x92, 0x1a, 0x09, 0x23, 0x2f, 0x8a, 0x89, 0x1f, 0x1b, 0x03, 0xfa, 0x3c, 0x40, + 0x44, 0x1a, 0x21, 0x89, 0xb5, 0x21, 0x55, 0x0b, 0xa3, 0xae, 0x20, 0x58, 0xc3, 0xa2, 0x07, 0x42, + 0xb4, 0xe3, 0x84, 0x6c, 0x7d, 0x89, 0x81, 0x55, 0x07, 0x42, 0x5d, 0x02, 0x70, 0x82, 0x63, 0x1c, + 0x08, 0xc5, 0x7e, 0x07, 0x02, 0xfa, 0x14, 0x4c, 0x25, 0x8d, 0x45, 0x6d, 0xa7, 0x21, 0x07, 0x90, + 0x6d, 0x99, 0xba, 0x09, 0xc2, 0x69, 0x5c, 0xfb, 0xef, 0x59, 0x62, 0xf1, 0xd0, 0xaf, 0x7e, 0x9f, + 0x7f, 0xab, 0xfd, 0x4b, 0x16, 0x8c, 0x2e, 0x79, 0xbe, 0xeb, 0xf9, 0xdb, 0xe8, 0xf3, 0x50, 0xa2, + 0x77, 0x93, 0xeb, 0xc4, 0x8e, 0x38, 0xf7, 0x3e, 0xa6, 0xed, 0x2d, 0x75, 0x55, 0x2c, 0xb4, 0x77, + 0xb7, 0x69, 0x41, 0xb4, 0x40, 0xb1, 0xe9, 0x6e, 0xbb, 0xb9, 0xf9, 0x36, 0x69, 0xc4, 0x6b, 0x24, + 0x76, 0x92, 0xcf, 0x49, 0xca, 0xb0, 0xa2, 0x8a, 0xae, 0xc3, 0x48, 0xec, 0x84, 0xdb, 0x24, 0x16, + 0x07, 0x60, 0xe6, 0x41, 0xc5, 0x6b, 0x62, 0xba, 0x23, 0x89, 0xdf, 0x20, 0xc9, 0xb5, 0xb0, 0xc1, + 0xaa, 0x62, 0x41, 0xc2, 0xfe, 0x81, 0x51, 0x38, 0xb7, 0x5c, 0xaf, 0xe6, 0xac, 0xab, 0x4b, 0x30, + 0xe2, 0x86, 0xde, 0x1e, 0x09, 0xc5, 0x38, 0x2b, 0x2a, 0x15, 0x56, 0x8a, 0x05, 0x14, 0xbd, 0x02, + 0xe3, 0xfc, 0x42, 0xba, 0xe6, 0xf8, 0x6e, 0x53, 0x0e, 0xf1, 0x69, 0x81, 0x3d, 0x7e, 0x5b, 0x83, + 0x61, 0x03, 0xf3, 0x88, 0x8b, 0xea, 0x52, 0x6a, 0x33, 0xe6, 0x5d, 0x76, 0x5f, 0xb4, 0x60, 0x9a, + 0x37, 0xb3, 0x18, 0xc7, 0xa1, 0xb7, 0xd9, 0x89, 0x49, 0x34, 0x3b, 0xcc, 0x4e, 0xba, 0xe5, 0xac, + 0xd1, 0xca, 0x1d, 0x81, 0x85, 0xdb, 0x29, 0x2a, 0xfc, 0x10, 0x9c, 0x15, 0xed, 0x4e, 0xa7, 0xc1, + 0xb8, 0xab, 0x59, 0xf4, 0x1d, 0x16, 0xcc, 0x35, 0x02, 0x3f, 0x0e, 0x83, 0x66, 0x93, 0x84, 0xb5, + 0xce, 0x66, 0xd3, 0x8b, 0x76, 0xf8, 0x3a, 0xc5, 0x64, 0x8b, 0x9d, 0x04, 0x39, 0x73, 0xa8, 0x90, + 0xc4, 0x1c, 0x5e, 0xb8, 0x7f, 0x30, 0x3f, 0xb7, 0x9c, 0x4b, 0x0a, 0xf7, 0x68, 0x06, 0xed, 0x02, + 0xa2, 0x57, 0x69, 0x3d, 0x76, 0xb6, 0x49, 0xd2, 0xf8, 0xe8, 0xe0, 0x8d, 0x9f, 0xbd, 0x7f, 0x30, + 0x8f, 0xd6, 0xbb, 0x48, 0xe0, 0x0c, 0xb2, 0xe8, 0x1d, 0x38, 0x4d, 0x4b, 0xbb, 0xbe, 0xb5, 0x34, + 0x78, 0x73, 0xb3, 0xf7, 0x0f, 0xe6, 0x4f, 0xaf, 0x67, 0x10, 0xc1, 0x99, 0xa4, 0xd1, 0xb7, 0x5b, + 0x70, 0x2e, 0xf9, 0xfc, 0x95, 0x7b, 0x6d, 0xc7, 0x77, 0x93, 0x86, 0xcb, 0x83, 0x37, 0x4c, 0xcf, + 0xe4, 0x73, 0xcb, 0x79, 0x94, 0x70, 0x7e, 0x23, 0x73, 0xcb, 0x70, 0x26, 0x73, 0xb5, 0xa0, 0x69, + 0x28, 0xee, 0x12, 0xce, 0x05, 0x95, 0x31, 0xfd, 0x89, 0x4e, 0xc3, 0xf0, 0x9e, 0xd3, 0xec, 0x88, + 0x8d, 0x82, 0xf9, 0x9f, 0x4f, 0x14, 0x5e, 0xb1, 0xec, 0x7f, 0x55, 0x84, 0xa9, 0xe5, 0x7a, 0xf5, + 0x81, 0x76, 0xa1, 0x7e, 0x0d, 0x15, 0x7a, 0x5e, 0x43, 0xc9, 0xa5, 0x56, 0xcc, 0xbd, 0xd4, 0xfe, + 0xff, 0x8c, 0x2d, 0x34, 0xc4, 0xb6, 0xd0, 0x37, 0xe4, 0x6c, 0xa1, 0x63, 0xde, 0x38, 0x7b, 0x39, + 0xab, 0x68, 0x98, 0x4d, 0x66, 0x26, 0xc7, 0x72, 0x23, 0x68, 0x38, 0xcd, 0xf4, 0xd1, 0x77, 0xc4, + 0xa5, 0x74, 0x3c, 0xf3, 0xd8, 0x80, 0xf1, 0x65, 0xa7, 0xed, 0x6c, 0x7a, 0x4d, 0x2f, 0xf6, 0x48, + 0x84, 0x9e, 0x84, 0xa2, 0xe3, 0xba, 0x8c, 0xdb, 0x2a, 0x2f, 0x9d, 0xb9, 0x7f, 0x30, 0x5f, 0x5c, + 0x74, 0xe9, 0xb5, 0x0f, 0x0a, 0x6b, 0x1f, 0x53, 0x0c, 0xf4, 0x51, 0x18, 0x72, 0xc3, 0xa0, 0x3d, + 0x5b, 0x60, 0x98, 0x74, 0xd7, 0x0d, 0x55, 0xc2, 0xa0, 0x9d, 0x42, 0x65, 0x38, 0xf6, 0xaf, 0x16, + 0xe0, 0xb1, 0x65, 0xd2, 0xde, 0x59, 0xad, 0xe7, 0x9c, 0xdf, 0x97, 0xa1, 0xd4, 0x0a, 0x7c, 0x2f, + 0x0e, 0xc2, 0x48, 0x34, 0xcd, 0x56, 0xc4, 0x9a, 0x28, 0xc3, 0x0a, 0x8a, 0x2e, 0xc2, 0x50, 0x3b, + 0x61, 0x2a, 0xc7, 0x25, 0x43, 0xca, 0xd8, 0x49, 0x06, 0xa1, 0x18, 0x9d, 0x88, 0x84, 0x62, 0xc5, + 0x28, 0x8c, 0x5b, 0x11, 0x09, 0x31, 0x83, 0x24, 0x37, 0x33, 0xbd, 0xb3, 0xc5, 0x09, 0x9d, 0xba, + 0x99, 0x29, 0x04, 0x6b, 0x58, 0xa8, 0x06, 0xe5, 0x28, 0x35, 0xb3, 0x03, 0x6d, 0xd3, 0x09, 0x76, + 0x75, 0xab, 0x99, 0x4c, 0x88, 0x18, 0x37, 0xca, 0x48, 0xdf, 0xab, 0xfb, 0xcb, 0x05, 0x40, 0x7c, + 0x08, 0xff, 0x82, 0x0d, 0xdc, 0xad, 0xee, 0x81, 0x1b, 0x7c, 0x4b, 0x1c, 0xd7, 0xe8, 0xfd, 0xa9, + 0x05, 0x8f, 0x2d, 0x7b, 0xbe, 0x4b, 0xc2, 0x9c, 0x05, 0xf8, 0x70, 0xde, 0xb2, 0x47, 0x63, 0x1a, + 0x8c, 0x25, 0x36, 0x74, 0x0c, 0x4b, 0xcc, 0xfe, 0x23, 0x0b, 0x10, 0xff, 0xec, 0xf7, 0xdd, 0xc7, + 0xde, 0xea, 0xfe, 0xd8, 0x63, 0x58, 0x16, 0xf6, 0x0d, 0x98, 0x5c, 0x6e, 0x7a, 0xc4, 0x8f, 0xab, + 0xb5, 0xe5, 0xc0, 0xdf, 0xf2, 0xb6, 0xd1, 0x27, 0x60, 0x32, 0xf6, 0x5a, 0x24, 0xe8, 0xc4, 0x75, + 0xd2, 0x08, 0x7c, 0xf6, 0x92, 0xb4, 0x2e, 0x0f, 0x2f, 0xa1, 0xfb, 0x07, 0xf3, 0x93, 0x1b, 0x06, + 0x04, 0xa7, 0x30, 0xed, 0xdf, 0xa1, 0xe3, 0x17, 0xb4, 0xda, 0x81, 0x4f, 0xfc, 0x78, 0x39, 0xf0, + 0x5d, 0x2e, 0x71, 0xf8, 0x04, 0x0c, 0xc5, 0x74, 0x3c, 0xf8, 0xd8, 0x5d, 0x92, 0x1b, 0x85, 0x8e, + 0xc2, 0xe1, 0xc1, 0xfc, 0xd9, 0xee, 0x1a, 0x6c, 0x9c, 0x58, 0x1d, 0xf4, 0x0d, 0x30, 0x12, 0xc5, + 0x4e, 0xdc, 0x89, 0xc4, 0x68, 0x3e, 0x2e, 0x47, 0xb3, 0xce, 0x4a, 0x0f, 0x0f, 0xe6, 0xa7, 0x54, + 0x35, 0x5e, 0x84, 0x45, 0x05, 0xf4, 0x14, 0x8c, 0xb6, 0x48, 0x14, 0x39, 0xdb, 0xf2, 0x36, 0x9c, + 0x12, 0x75, 0x47, 0xd7, 0x78, 0x31, 0x96, 0x70, 0xf4, 0x04, 0x0c, 0x93, 0x30, 0x0c, 0x42, 0xb1, + 0x47, 0x27, 0x04, 0xe2, 0xf0, 0x0a, 0x2d, 0xc4, 0x1c, 0x66, 0xff, 0x3b, 0x0b, 0xa6, 0x54, 0x5f, + 0x79, 0x5b, 0x27, 0xf0, 0x2a, 0x78, 0x13, 0xa0, 0x21, 0x3f, 0x30, 0x62, 0xb7, 0xc7, 0xd8, 0xf3, + 0x97, 0x32, 0x2f, 0xea, 0xae, 0x61, 0x4c, 0x28, 0xab, 0xa2, 0x08, 0x6b, 0xd4, 0xec, 0x7f, 0x6a, + 0xc1, 0xa9, 0xd4, 0x17, 0xdd, 0xf0, 0xa2, 0x18, 0xbd, 0xd5, 0xf5, 0x55, 0x0b, 0x83, 0x7d, 0x15, + 0xad, 0xcd, 0xbe, 0x49, 0x2d, 0x65, 0x59, 0xa2, 0x7d, 0xd1, 0x35, 0x18, 0xf6, 0x62, 0xd2, 0x92, + 0x1f, 0xf3, 0x44, 0xcf, 0x8f, 0xe1, 0xbd, 0x4a, 0x66, 0xa4, 0x4a, 0x6b, 0x62, 0x4e, 0xc0, 0xfe, + 0x6b, 0x45, 0x28, 0xf3, 0x65, 0xbb, 0xe6, 0xb4, 0x4f, 0x60, 0x2e, 0xaa, 0x30, 0xc4, 0xa8, 0xf3, + 0x8e, 0x3f, 0x99, 0xdd, 0x71, 0xd1, 0x9d, 0x05, 0xfa, 0xe4, 0xe7, 0xcc, 0x91, 0xba, 0x1a, 0x68, + 0x11, 0x66, 0x24, 0x90, 0x03, 0xb0, 0xe9, 0xf9, 0x4e, 0xb8, 0x4f, 0xcb, 0x66, 0x8b, 0x8c, 0xe0, + 0xb3, 0xbd, 0x09, 0x2e, 0x29, 0x7c, 0x4e, 0x56, 0xf5, 0x35, 0x01, 0x60, 0x8d, 0xe8, 0xdc, 0xcb, + 0x50, 0x56, 0xc8, 0x47, 0xe1, 0x71, 0xe6, 0x3e, 0x05, 0x53, 0xa9, 0xb6, 0xfa, 0x55, 0x1f, 0xd7, + 0x59, 0xa4, 0x5f, 0x66, 0xa7, 0x80, 0xe8, 0xf5, 0x8a, 0xbf, 0x27, 0x4e, 0xd1, 0x77, 0xe1, 0x74, + 0x33, 0xe3, 0x70, 0x12, 0x53, 0x35, 0xf8, 0x61, 0xf6, 0x98, 0xf8, 0xec, 0xd3, 0x59, 0x50, 0x9c, + 0xd9, 0x06, 0xbd, 0xf6, 0x83, 0x36, 0x5d, 0xf3, 0x4e, 0x53, 0xe7, 0xa0, 0x6f, 0x8a, 0x32, 0xac, + 0xa0, 0xf4, 0x08, 0x3b, 0xad, 0x3a, 0x7f, 0x9d, 0xec, 0xd7, 0x49, 0x93, 0x34, 0xe2, 0x20, 0xfc, + 0x9a, 0x76, 0xff, 0x3c, 0x1f, 0x7d, 0x7e, 0x02, 0x8e, 0x09, 0x02, 0xc5, 0xeb, 0x64, 0x9f, 0x4f, + 0x85, 0xfe, 0x75, 0xc5, 0x9e, 0x5f, 0xf7, 0xb3, 0x16, 0x4c, 0xa8, 0xaf, 0x3b, 0x81, 0xad, 0xbe, + 0x64, 0x6e, 0xf5, 0xf3, 0x3d, 0x17, 0x78, 0xce, 0x26, 0xff, 0x72, 0x01, 0xce, 0x29, 0x1c, 0xca, + 0xee, 0xf3, 0x3f, 0x62, 0x55, 0x5d, 0x81, 0xb2, 0xaf, 0x04, 0x51, 0x96, 0x29, 0x01, 0x4a, 0xc4, + 0x50, 0x09, 0x0e, 0xe5, 0xda, 0xfc, 0x44, 0x5a, 0x34, 0xae, 0x4b, 0x68, 0x85, 0x34, 0x76, 0x09, + 0x8a, 0x1d, 0xcf, 0x15, 0x77, 0xc6, 0xc7, 0xe4, 0x68, 0xdf, 0xaa, 0x56, 0x0e, 0x0f, 0xe6, 0x1f, + 0xcf, 0xd3, 0x0e, 0xd0, 0xcb, 0x2a, 0x5a, 0xb8, 0x55, 0xad, 0x60, 0x5a, 0x19, 0x2d, 0xc2, 0x94, + 0x54, 0x80, 0xdc, 0xa6, 0x1c, 0x54, 0xe0, 0x8b, 0xab, 0x45, 0x89, 0x59, 0xb1, 0x09, 0xc6, 0x69, + 0x7c, 0x54, 0x81, 0xe9, 0xdd, 0xce, 0x26, 0x69, 0x92, 0x98, 0x7f, 0xf0, 0x75, 0xc2, 0x85, 0x90, + 0xe5, 0xe4, 0xb1, 0x75, 0x3d, 0x05, 0xc7, 0x5d, 0x35, 0xec, 0x3f, 0x67, 0x47, 0xbc, 0x18, 0xbd, + 0x5a, 0x18, 0xd0, 0x85, 0x45, 0xa9, 0x7f, 0x2d, 0x97, 0xf3, 0x20, 0xab, 0xe2, 0x3a, 0xd9, 0xdf, + 0x08, 0x28, 0xb3, 0x9d, 0xbd, 0x2a, 0x8c, 0x35, 0x3f, 0xd4, 0x73, 0xcd, 0xff, 0x7c, 0x01, 0xce, + 0xa8, 0x11, 0x30, 0xf8, 0xba, 0xbf, 0xe8, 0x63, 0xf0, 0x1c, 0x8c, 0xb9, 0x64, 0xcb, 0xe9, 0x34, + 0x63, 0x25, 0x11, 0x1f, 0xe6, 0x5a, 0x91, 0x4a, 0x52, 0x8c, 0x75, 0x9c, 0x23, 0x0c, 0xdb, 0xff, + 0x1a, 0x63, 0x77, 0x6b, 0xec, 0xd0, 0x35, 0xae, 0x76, 0x8d, 0x95, 0xbb, 0x6b, 0x9e, 0x80, 0x61, + 0xaf, 0x45, 0x79, 0xad, 0x82, 0xc9, 0x42, 0x55, 0x69, 0x21, 0xe6, 0x30, 0xf4, 0x11, 0x18, 0x6d, + 0x04, 0xad, 0x96, 0xe3, 0xbb, 0xec, 0xca, 0x2b, 0x2f, 0x8d, 0x51, 0x76, 0x6c, 0x99, 0x17, 0x61, + 0x09, 0x43, 0x8f, 0xc1, 0x90, 0x13, 0x6e, 0x73, 0xb1, 0x44, 0x79, 0xa9, 0x44, 0x5b, 0x5a, 0x0c, + 0xb7, 0x23, 0xcc, 0x4a, 0xe9, 0xab, 0xea, 0x6e, 0x10, 0xee, 0x7a, 0xfe, 0x76, 0xc5, 0x0b, 0xc5, + 0x96, 0x50, 0x77, 0xe1, 0x1d, 0x05, 0xc1, 0x1a, 0x16, 0x5a, 0x85, 0xe1, 0x76, 0x10, 0xc6, 0xd1, + 0xec, 0x08, 0x1b, 0xee, 0xc7, 0x73, 0x0e, 0x22, 0xfe, 0xb5, 0xb5, 0x20, 0x8c, 0x93, 0x0f, 0xa0, + 0xff, 0x22, 0xcc, 0xab, 0xa3, 0x1b, 0x30, 0x4a, 0xfc, 0xbd, 0xd5, 0x30, 0x68, 0xcd, 0x9e, 0xca, + 0xa7, 0xb4, 0xc2, 0x51, 0xf8, 0x32, 0x4b, 0xd8, 0x4e, 0x51, 0x8c, 0x25, 0x09, 0xf4, 0x0d, 0x50, + 0x24, 0xfe, 0xde, 0xec, 0x28, 0xa3, 0x34, 0x97, 0x43, 0xe9, 0xb6, 0x13, 0x26, 0x67, 0xfe, 0x8a, + 0xbf, 0x87, 0x69, 0x1d, 0xf4, 0x19, 0x28, 0xcb, 0x03, 0x23, 0x12, 0xf2, 0xb7, 0xcc, 0x05, 0x2b, + 0x8f, 0x19, 0x4c, 0xde, 0xe9, 0x78, 0x21, 0x69, 0x11, 0x3f, 0x8e, 0x92, 0x13, 0x52, 0x42, 0x23, + 0x9c, 0x50, 0x43, 0x9f, 0x91, 0x42, 0xdf, 0xb5, 0xa0, 0xe3, 0xc7, 0xd1, 0x6c, 0x99, 0x75, 0x2f, + 0x53, 0x1d, 0x77, 0x3b, 0xc1, 0x4b, 0x4b, 0x85, 0x79, 0x65, 0x6c, 0x90, 0x42, 0x9f, 0x85, 0x09, + 0xfe, 0x9f, 0x2b, 0xb5, 0xa2, 0xd9, 0x33, 0x8c, 0xf6, 0xc5, 0x7c, 0xda, 0x1c, 0x71, 0xe9, 0x8c, + 0x20, 0x3e, 0xa1, 0x97, 0x46, 0xd8, 0xa4, 0x86, 0x30, 0x4c, 0x34, 0xbd, 0x3d, 0xe2, 0x93, 0x28, + 0xaa, 0x85, 0xc1, 0x26, 0x99, 0x05, 0x36, 0x30, 0xe7, 0xb2, 0x95, 0x60, 0xc1, 0x26, 0x59, 0x9a, + 0xa1, 0x34, 0x6f, 0xe8, 0x75, 0xb0, 0x49, 0x02, 0xdd, 0x82, 0x49, 0xfa, 0x08, 0xf3, 0x12, 0xa2, + 0x63, 0xfd, 0x88, 0xb2, 0xa7, 0x12, 0x36, 0x2a, 0xe1, 0x14, 0x11, 0x74, 0x13, 0xc6, 0xa3, 0xd8, + 0x09, 0xe3, 0x4e, 0x9b, 0x13, 0x3d, 0xdb, 0x8f, 0x28, 0xd3, 0xa1, 0xd6, 0xb5, 0x2a, 0xd8, 0x20, + 0x80, 0x5e, 0x87, 0x72, 0xd3, 0xdb, 0x22, 0x8d, 0xfd, 0x46, 0x93, 0xcc, 0x8e, 0x33, 0x6a, 0x99, + 0x87, 0xca, 0x0d, 0x89, 0xc4, 0x5f, 0x85, 0xea, 0x2f, 0x4e, 0xaa, 0xa3, 0xdb, 0x70, 0x36, 0x26, + 0x61, 0xcb, 0xf3, 0x1d, 0x7a, 0x18, 0x88, 0xd7, 0x12, 0xd3, 0x4d, 0x4e, 0xb0, 0xdd, 0x76, 0x41, + 0xcc, 0xc6, 0xd9, 0x8d, 0x4c, 0x2c, 0x9c, 0x53, 0x1b, 0xdd, 0x83, 0xd9, 0x0c, 0x48, 0xd0, 0xf4, + 0x1a, 0xfb, 0xb3, 0xa7, 0x19, 0xe5, 0x4f, 0x0a, 0xca, 0xb3, 0x1b, 0x39, 0x78, 0x87, 0x3d, 0x60, + 0x38, 0x97, 0x3a, 0xba, 0x09, 0x53, 0xec, 0x04, 0xaa, 0x75, 0x9a, 0x4d, 0xd1, 0xe0, 0x24, 0x6b, + 0xf0, 0x23, 0xf2, 0x3e, 0xae, 0x9a, 0xe0, 0xc3, 0x83, 0x79, 0x48, 0xfe, 0xe1, 0x74, 0x6d, 0xb4, + 0xc9, 0xd4, 0x60, 0x9d, 0xd0, 0x8b, 0xf7, 0xe9, 0xb9, 0x41, 0xee, 0xc5, 0xb3, 0x53, 0x3d, 0x45, + 0x10, 0x3a, 0xaa, 0xd2, 0x95, 0xe9, 0x85, 0x38, 0x4d, 0x90, 0x1e, 0xa9, 0x51, 0xec, 0x7a, 0xfe, + 0xec, 0x34, 0x3b, 0xa9, 0xd5, 0x89, 0x54, 0xa7, 0x85, 0x98, 0xc3, 0x98, 0x0a, 0x8c, 0xfe, 0xb8, + 0x49, 0x6f, 0xae, 0x19, 0x86, 0x98, 0xa8, 0xc0, 0x24, 0x00, 0x27, 0x38, 0x94, 0x99, 0x8c, 0xe3, + 0xfd, 0x59, 0xc4, 0x50, 0xd5, 0xc1, 0xb2, 0xb1, 0xf1, 0x19, 0x4c, 0xcb, 0xed, 0x4d, 0x98, 0x54, + 0x07, 0x21, 0x1b, 0x13, 0x34, 0x0f, 0xc3, 0x8c, 0x7d, 0x12, 0x02, 0xb3, 0x32, 0xed, 0x02, 0x63, + 0xad, 0x30, 0x2f, 0x67, 0x5d, 0xf0, 0xde, 0x25, 0x4b, 0xfb, 0x31, 0xe1, 0xcf, 0xf4, 0xa2, 0xd6, + 0x05, 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0x7f, 0x39, 0x1b, 0x9a, 0x9c, 0xb6, 0x03, 0xdc, 0x2f, 0xcf, + 0x40, 0x69, 0x27, 0x88, 0x62, 0x8a, 0xcd, 0xda, 0x18, 0x4e, 0x18, 0xcf, 0x6b, 0xa2, 0x1c, 0x2b, + 0x0c, 0xf4, 0x2a, 0x4c, 0x34, 0xf4, 0x06, 0xc4, 0xe5, 0xa8, 0x8e, 0x11, 0xa3, 0x75, 0x6c, 0xe2, + 0xa2, 0x57, 0xa0, 0xc4, 0xcc, 0x3a, 0x1a, 0x41, 0x53, 0x70, 0x6d, 0xf2, 0x86, 0x2f, 0xd5, 0x44, + 0xf9, 0xa1, 0xf6, 0x1b, 0x2b, 0x6c, 0x74, 0x09, 0x46, 0x68, 0x17, 0xaa, 0x35, 0x71, 0x2d, 0x29, + 0xd9, 0xcf, 0x35, 0x56, 0x8a, 0x05, 0xd4, 0xfe, 0xab, 0x05, 0x6d, 0x94, 0xe9, 0x13, 0x97, 0xa0, + 0x1a, 0x8c, 0xde, 0x75, 0xbc, 0xd8, 0xf3, 0xb7, 0x05, 0xff, 0xf1, 0x54, 0xcf, 0x3b, 0x8a, 0x55, + 0xba, 0xc3, 0x2b, 0xf0, 0x5b, 0x54, 0xfc, 0xc1, 0x92, 0x0c, 0xa5, 0x18, 0x76, 0x7c, 0x9f, 0x52, + 0x2c, 0x0c, 0x4a, 0x11, 0xf3, 0x0a, 0x9c, 0xa2, 0xf8, 0x83, 0x25, 0x19, 0xf4, 0x16, 0x80, 0xdc, + 0x61, 0xc4, 0x15, 0xe6, 0x14, 0xcf, 0xf4, 0x27, 0xba, 0xa1, 0xea, 0x2c, 0x4d, 0xd2, 0x3b, 0x3a, + 0xf9, 0x8f, 0x35, 0x7a, 0x76, 0xcc, 0xf8, 0xb4, 0xee, 0xce, 0xa0, 0x6f, 0xa6, 0x4b, 0xdc, 0x09, + 0x63, 0xe2, 0x2e, 0xc6, 0x62, 0x70, 0x3e, 0x3a, 0xd8, 0x23, 0x65, 0xc3, 0x6b, 0x11, 0x7d, 0x3b, + 0x08, 0x22, 0x38, 0xa1, 0x67, 0xff, 0x62, 0x11, 0x66, 0xf3, 0xba, 0x4b, 0x17, 0x1d, 0xb9, 0xe7, + 0xc5, 0xcb, 0x94, 0xbd, 0xb2, 0xcc, 0x45, 0xb7, 0x22, 0xca, 0xb1, 0xc2, 0xa0, 0xb3, 0x1f, 0x79, + 0xdb, 0xf2, 0x8d, 0x39, 0x9c, 0xcc, 0x7e, 0x9d, 0x95, 0x62, 0x01, 0xa5, 0x78, 0x21, 0x71, 0x22, + 0x61, 0xaf, 0xa3, 0xad, 0x12, 0xcc, 0x4a, 0xb1, 0x80, 0xea, 0x02, 0xac, 0xa1, 0x3e, 0x02, 0x2c, + 0x63, 0x88, 0x86, 0x8f, 0x77, 0x88, 0xd0, 0xe7, 0x00, 0xb6, 0x3c, 0xdf, 0x8b, 0x76, 0x18, 0xf5, + 0x91, 0x23, 0x53, 0x57, 0xcc, 0xd9, 0xaa, 0xa2, 0x82, 0x35, 0x8a, 0xe8, 0x25, 0x18, 0x53, 0x1b, + 0xb0, 0x5a, 0x61, 0xca, 0x4b, 0xcd, 0x18, 0x24, 0x39, 0x8d, 0x2a, 0x58, 0xc7, 0xb3, 0xdf, 0x4e, + 0xaf, 0x17, 0xb1, 0x03, 0xb4, 0xf1, 0xb5, 0x06, 0x1d, 0xdf, 0x42, 0xef, 0xf1, 0xb5, 0xbf, 0x5a, + 0x84, 0x29, 0xa3, 0xb1, 0x4e, 0x34, 0xc0, 0x99, 0x75, 0x95, 0x1e, 0xe0, 0x4e, 0x4c, 0xc4, 0xfe, + 0xb3, 0xfb, 0x6f, 0x15, 0xfd, 0x90, 0xa7, 0x3b, 0x80, 0xd7, 0x47, 0x9f, 0x83, 0x72, 0xd3, 0x89, + 0x98, 0x30, 0x8c, 0x88, 0x7d, 0x37, 0x08, 0xb1, 0xe4, 0x61, 0xe2, 0x44, 0xb1, 0x76, 0x6b, 0x72, + 0xda, 0x09, 0x49, 0x7a, 0xd3, 0x50, 0xfe, 0x44, 0x1a, 0x84, 0xa9, 0x4e, 0x50, 0x26, 0x66, 0x1f, + 0x73, 0x18, 0x7a, 0x05, 0xc6, 0x43, 0xc2, 0x56, 0xc5, 0x32, 0xe5, 0xe6, 0xd8, 0x32, 0x1b, 0x4e, + 0xd8, 0x3e, 0xac, 0xc1, 0xb0, 0x81, 0x99, 0xbc, 0x0d, 0x46, 0x7a, 0xbc, 0x0d, 0x9e, 0x82, 0x51, + 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0x55, 0x5e, 0x8c, 0x25, 0x3c, 0xbd, 0x60, 0x4a, 0x83, 0x2d, + 0x18, 0xfa, 0xfa, 0x10, 0x8b, 0x9a, 0x29, 0x8e, 0x4b, 0xfc, 0x94, 0x13, 0x4b, 0x1e, 0x4b, 0x98, + 0xfd, 0x51, 0x98, 0xac, 0x38, 0xa4, 0x15, 0xf8, 0x2b, 0xbe, 0xdb, 0x0e, 0x3c, 0x3f, 0x46, 0xb3, + 0x30, 0xc4, 0x2e, 0x11, 0x7e, 0x04, 0x0c, 0xd1, 0x86, 0xf0, 0x10, 0x7d, 0x10, 0xd8, 0xdb, 0x70, + 0xa6, 0x12, 0xdc, 0xf5, 0xef, 0x3a, 0xa1, 0xbb, 0x58, 0xab, 0x6a, 0xef, 0xeb, 0x75, 0xf9, 0xbe, + 0xe3, 0x76, 0x58, 0x99, 0x47, 0xaf, 0x56, 0x93, 0xb3, 0xb5, 0xab, 0x5e, 0x93, 0xe4, 0x48, 0x41, + 0xfe, 0x46, 0xc1, 0x68, 0x29, 0xc1, 0x57, 0x8a, 0x2a, 0x2b, 0x57, 0x51, 0xf5, 0x06, 0x94, 0xb6, + 0x3c, 0xd2, 0x74, 0x31, 0xd9, 0x12, 0x2b, 0xf1, 0xc9, 0x7c, 0xd3, 0x92, 0x55, 0x8a, 0x29, 0xa5, + 0x5e, 0xfc, 0x75, 0xb8, 0x2a, 0x2a, 0x63, 0x45, 0x06, 0xed, 0xc2, 0xb4, 0x7c, 0x30, 0x48, 0xa8, + 0x58, 0x97, 0x4f, 0xf5, 0x7a, 0x85, 0x98, 0xc4, 0x4f, 0xdf, 0x3f, 0x98, 0x9f, 0xc6, 0x29, 0x32, + 0xb8, 0x8b, 0x30, 0x7d, 0x0e, 0xb6, 0xe8, 0x09, 0x3c, 0xc4, 0x86, 0x9f, 0x3d, 0x07, 0xd9, 0xcb, + 0x96, 0x95, 0xda, 0x3f, 0x62, 0xc1, 0x23, 0x5d, 0x23, 0x23, 0x5e, 0xf8, 0xc7, 0x3c, 0x0b, 0xe9, + 0x17, 0x77, 0xa1, 0xff, 0x8b, 0xdb, 0xfe, 0x19, 0x0b, 0x4e, 0xaf, 0xb4, 0xda, 0xf1, 0x7e, 0xc5, + 0x33, 0xb5, 0x4a, 0x2f, 0xc3, 0x48, 0x8b, 0xb8, 0x5e, 0xa7, 0x25, 0x66, 0x6e, 0x5e, 0x9e, 0x52, + 0x6b, 0xac, 0xf4, 0xf0, 0x60, 0x7e, 0xa2, 0x1e, 0x07, 0xa1, 0xb3, 0x4d, 0x78, 0x01, 0x16, 0xe8, + 0xec, 0xac, 0xf7, 0xde, 0x25, 0x37, 0xbc, 0x96, 0x27, 0x4d, 0x85, 0x7a, 0xca, 0xec, 0x16, 0xe4, + 0x80, 0x2e, 0xbc, 0xd1, 0x71, 0xfc, 0xd8, 0x8b, 0xf7, 0x85, 0x42, 0x48, 0x12, 0xc1, 0x09, 0x3d, + 0xfb, 0x2b, 0x16, 0x4c, 0xc9, 0x75, 0xbf, 0xe8, 0xba, 0x21, 0x89, 0x22, 0x34, 0x07, 0x05, 0xaf, + 0x2d, 0x7a, 0x09, 0xa2, 0x97, 0x85, 0x6a, 0x0d, 0x17, 0xbc, 0xb6, 0x64, 0xcb, 0xd8, 0x41, 0x58, + 0x34, 0x75, 0x63, 0xd7, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x32, 0x94, 0xfc, 0xc0, 0xe5, 0xe6, 0x5a, + 0xfc, 0x4a, 0x63, 0x0b, 0x6c, 0x5d, 0x94, 0x61, 0x05, 0x45, 0x35, 0x28, 0x73, 0x4b, 0xa6, 0x64, + 0xd1, 0x0e, 0x64, 0x0f, 0xc5, 0xbe, 0x6c, 0x43, 0xd6, 0xc4, 0x09, 0x11, 0xfb, 0xfb, 0x2d, 0x18, + 0x97, 0x5f, 0x36, 0x20, 0xcf, 0x49, 0xb7, 0x56, 0xc2, 0x6f, 0x26, 0x5b, 0x8b, 0xf2, 0x8c, 0x0c, + 0x62, 0xb0, 0x8a, 0xc5, 0xa3, 0xb0, 0x8a, 0xf6, 0x0f, 0x17, 0x60, 0x52, 0x76, 0xa7, 0xde, 0xd9, + 0x8c, 0x48, 0x8c, 0x36, 0xa0, 0xec, 0xf0, 0x21, 0x27, 0x72, 0xc5, 0x3e, 0x91, 0x2d, 0x14, 0x30, + 0xe6, 0x27, 0xb9, 0xbd, 0x17, 0x65, 0x6d, 0x9c, 0x10, 0x42, 0x4d, 0x98, 0xf1, 0x83, 0x98, 0x9d, + 0xe4, 0x0a, 0xde, 0x4b, 0xf5, 0x92, 0xa6, 0x7e, 0x4e, 0x50, 0x9f, 0x59, 0x4f, 0x53, 0xc1, 0xdd, + 0x84, 0xd1, 0x8a, 0x14, 0xb4, 0x14, 0xf3, 0x5f, 0xf6, 0xfa, 0x2c, 0x64, 0xcb, 0x59, 0xec, 0x5f, + 0xb1, 0xa0, 0x2c, 0xd1, 0x4e, 0x42, 0xcb, 0xb6, 0x06, 0xa3, 0x11, 0x9b, 0x04, 0x39, 0x34, 0x76, + 0xaf, 0x8e, 0xf3, 0xf9, 0x4a, 0x2e, 0x28, 0xfe, 0x3f, 0xc2, 0x92, 0x06, 0x93, 0xb3, 0xab, 0xee, + 0xbf, 0x4f, 0xe4, 0xec, 0xaa, 0x3f, 0x39, 0x37, 0xcc, 0x1f, 0xb0, 0x3e, 0x6b, 0x82, 0x2b, 0xca, + 0x47, 0xb5, 0x43, 0xb2, 0xe5, 0xdd, 0x4b, 0xf3, 0x51, 0x35, 0x56, 0x8a, 0x05, 0x14, 0xbd, 0x05, + 0xe3, 0x0d, 0x29, 0x60, 0x4d, 0xb6, 0xeb, 0xa5, 0x9e, 0xc2, 0x7e, 0xa5, 0x17, 0xe2, 0x82, 0x8d, + 0x65, 0xad, 0x3e, 0x36, 0xa8, 0x99, 0x6a, 0xfe, 0x62, 0x3f, 0x35, 0x7f, 0x42, 0x37, 0x5f, 0xe9, + 0xfd, 0xa3, 0x16, 0x8c, 0x70, 0xc1, 0xda, 0x60, 0x72, 0x4d, 0x4d, 0x4d, 0x96, 0x8c, 0xdd, 0x6d, + 0x5a, 0x28, 0xd4, 0x5e, 0x68, 0x0d, 0xca, 0xec, 0x07, 0x13, 0x0c, 0x16, 0xf3, 0xad, 0xe2, 0x79, + 0xab, 0x7a, 0x07, 0x6f, 0xcb, 0x6a, 0x38, 0xa1, 0x60, 0xff, 0x60, 0x91, 0x1e, 0x55, 0x09, 0xaa, + 0x71, 0x83, 0x5b, 0x0f, 0xef, 0x06, 0x2f, 0x3c, 0xac, 0x1b, 0x7c, 0x1b, 0xa6, 0x1a, 0x9a, 0x52, + 0x2d, 0x99, 0xc9, 0xcb, 0x3d, 0x17, 0x89, 0xa6, 0x7f, 0xe3, 0x22, 0x93, 0x65, 0x93, 0x08, 0x4e, + 0x53, 0x45, 0xdf, 0x0c, 0xe3, 0x7c, 0x9e, 0x45, 0x2b, 0xdc, 0x52, 0xe2, 0x23, 0xf9, 0xeb, 0x45, + 0x6f, 0x82, 0x8b, 0xd8, 0xb4, 0xea, 0xd8, 0x20, 0x66, 0xff, 0xb1, 0x05, 0x68, 0xa5, 0xbd, 0x43, + 0x5a, 0x24, 0x74, 0x9a, 0x89, 0x6c, 0xfc, 0x2f, 0x5b, 0x30, 0x4b, 0xba, 0x8a, 0x97, 0x83, 0x56, + 0x4b, 0xbc, 0x40, 0x72, 0x1e, 0xc9, 0x2b, 0x39, 0x75, 0x94, 0xdb, 0xc0, 0x6c, 0x1e, 0x06, 0xce, + 0x6d, 0x0f, 0xad, 0xc1, 0x29, 0x7e, 0xe5, 0x29, 0x80, 0x66, 0x1b, 0xfd, 0xa8, 0x20, 0x7c, 0x6a, + 0xa3, 0x1b, 0x05, 0x67, 0xd5, 0xb3, 0xbf, 0x73, 0x1c, 0x72, 0x7b, 0xf1, 0x81, 0x52, 0xe0, 0x03, + 0xa5, 0xc0, 0x07, 0x4a, 0x81, 0x0f, 0x94, 0x02, 0x1f, 0x28, 0x05, 0xbe, 0xee, 0x95, 0x02, 0x7f, + 0x68, 0xc1, 0xa9, 0xee, 0x6b, 0xe0, 0x24, 0x18, 0xf3, 0x0e, 0x9c, 0xea, 0xbe, 0xeb, 0x7a, 0xda, + 0xc1, 0x75, 0xf7, 0x33, 0xb9, 0xf7, 0x32, 0xbe, 0x01, 0x67, 0xd1, 0xb7, 0x7f, 0xb1, 0x04, 0xc3, + 0x2b, 0x7b, 0xc4, 0x8f, 0x4f, 0xe0, 0x13, 0x1b, 0x30, 0xe9, 0xf9, 0x7b, 0x41, 0x73, 0x8f, 0xb8, + 0x1c, 0x7e, 0x94, 0xf7, 0xee, 0x59, 0x41, 0x7a, 0xb2, 0x6a, 0x90, 0xc0, 0x29, 0x92, 0x0f, 0x43, + 0xe6, 0x7c, 0x15, 0x46, 0xf8, 0xed, 0x20, 0x04, 0xce, 0x99, 0x97, 0x01, 0x1b, 0x44, 0x71, 0xe7, + 0x25, 0xf2, 0x70, 0x7e, 0xfb, 0x88, 0xea, 0xe8, 0x6d, 0x98, 0xdc, 0xf2, 0xc2, 0x28, 0xde, 0xf0, + 0x5a, 0x24, 0x8a, 0x9d, 0x56, 0xfb, 0x01, 0x64, 0xcc, 0x6a, 0x1c, 0x56, 0x0d, 0x4a, 0x38, 0x45, + 0x19, 0x6d, 0xc3, 0x44, 0xd3, 0xd1, 0x9b, 0x1a, 0x3d, 0x72, 0x53, 0xea, 0xda, 0xb9, 0xa1, 0x13, + 0xc2, 0x26, 0x5d, 0xba, 0x4f, 0x1b, 0x4c, 0x4c, 0x5a, 0x62, 0xc2, 0x03, 0xb5, 0x4f, 0xb9, 0x7c, + 0x94, 0xc3, 0x28, 0x07, 0xc5, 0x2c, 0x63, 0xcb, 0x26, 0x07, 0xa5, 0xd9, 0xbf, 0x7e, 0x1e, 0xca, + 0x84, 0x0e, 0x21, 0x25, 0x2c, 0x6e, 0xae, 0x2b, 0x83, 0xf5, 0x75, 0xcd, 0x6b, 0x84, 0x81, 0x29, + 0xdd, 0x5f, 0x91, 0x94, 0x70, 0x42, 0x14, 0x2d, 0xc3, 0x48, 0x44, 0x42, 0x8f, 0x44, 0xe2, 0x0e, + 0xeb, 0x31, 0x8d, 0x0c, 0x8d, 0x3b, 0x95, 0xf0, 0xdf, 0x58, 0x54, 0xa5, 0xcb, 0xcb, 0x61, 0x82, + 0x4f, 0x76, 0xcb, 0x68, 0xcb, 0x6b, 0x91, 0x95, 0x62, 0x01, 0x45, 0xaf, 0xc3, 0x68, 0x48, 0x9a, + 0x4c, 0x7d, 0x34, 0x31, 0xf8, 0x22, 0xe7, 0xda, 0x28, 0x5e, 0x0f, 0x4b, 0x02, 0xe8, 0x3a, 0xa0, + 0x90, 0x50, 0x0e, 0xcc, 0xf3, 0xb7, 0x95, 0xbd, 0xa8, 0x38, 0xc1, 0xd5, 0x8e, 0xc7, 0x09, 0x86, + 0xf4, 0xef, 0xc1, 0x19, 0xd5, 0xd0, 0x55, 0x98, 0x51, 0xa5, 0x55, 0x3f, 0x8a, 0x1d, 0x7a, 0x72, + 0x4e, 0x31, 0x5a, 0x4a, 0x00, 0x82, 0xd3, 0x08, 0xb8, 0xbb, 0x8e, 0xfd, 0x53, 0x16, 0xf0, 0x71, + 0x3e, 0x81, 0x67, 0xff, 0x6b, 0xe6, 0xb3, 0xff, 0x5c, 0xee, 0xcc, 0xe5, 0x3c, 0xf9, 0xef, 0x5b, + 0x30, 0xa6, 0xcd, 0x6c, 0xb2, 0x66, 0xad, 0x1e, 0x6b, 0xb6, 0x03, 0xd3, 0x74, 0xa5, 0xdf, 0xdc, + 0x8c, 0x48, 0xb8, 0x47, 0x5c, 0xb6, 0x30, 0x0b, 0x0f, 0xb6, 0x30, 0x95, 0x21, 0xdb, 0x8d, 0x14, + 0x41, 0xdc, 0xd5, 0x04, 0x7a, 0x59, 0xea, 0x52, 0x8a, 0x86, 0x1d, 0x38, 0xd7, 0x93, 0x1c, 0x1e, + 0xcc, 0x4f, 0x6b, 0x1f, 0xa2, 0xeb, 0x4e, 0xec, 0xcf, 0xcb, 0x6f, 0x54, 0x06, 0x83, 0x0d, 0xb5, + 0x58, 0x52, 0x06, 0x83, 0x6a, 0x39, 0xe0, 0x04, 0x87, 0xee, 0xd1, 0x9d, 0x20, 0x8a, 0xd3, 0x06, + 0x83, 0xd7, 0x82, 0x28, 0xc6, 0x0c, 0x62, 0xbf, 0x00, 0xb0, 0x72, 0x8f, 0x34, 0xf8, 0x52, 0xd7, + 0x9f, 0x33, 0x56, 0xfe, 0x73, 0xc6, 0xfe, 0x0f, 0x16, 0x4c, 0xae, 0x2e, 0x1b, 0x12, 0xe1, 0x05, + 0x00, 0xfe, 0x06, 0xbb, 0x73, 0x67, 0x5d, 0x6a, 0xdb, 0xb9, 0xc2, 0x54, 0x95, 0x62, 0x0d, 0x03, + 0x9d, 0x83, 0x62, 0xb3, 0xe3, 0x0b, 0xe9, 0xe4, 0x28, 0xbd, 0xb0, 0x6f, 0x74, 0x7c, 0x4c, 0xcb, + 0x34, 0x27, 0x84, 0xe2, 0xc0, 0x4e, 0x08, 0x7d, 0x83, 0x01, 0xa0, 0x79, 0x18, 0xbe, 0x7b, 0xd7, + 0x73, 0xb9, 0xcb, 0xa5, 0xb0, 0x04, 0xb8, 0x73, 0xa7, 0x5a, 0x89, 0x30, 0x2f, 0xb7, 0xbf, 0x54, + 0x84, 0xb9, 0xd5, 0x26, 0xb9, 0xf7, 0x1e, 0xdd, 0x4e, 0x07, 0x75, 0xa1, 0x38, 0x9a, 0x68, 0xe8, + 0xa8, 0x6e, 0x32, 0xfd, 0xc7, 0x63, 0x0b, 0x46, 0xb9, 0xbd, 0x9c, 0x74, 0x42, 0x7d, 0x35, 0xab, + 0xf5, 0xfc, 0x01, 0x59, 0xe0, 0x76, 0x77, 0xc2, 0x87, 0x4e, 0xdd, 0xb4, 0xa2, 0x14, 0x4b, 0xe2, + 0x73, 0x9f, 0x80, 0x71, 0x1d, 0xf3, 0x48, 0x0e, 0x6b, 0x7f, 0xa9, 0x08, 0xd3, 0xb4, 0x07, 0x0f, + 0x75, 0x22, 0x6e, 0x75, 0x4f, 0xc4, 0x71, 0x3b, 0x2d, 0xf5, 0x9f, 0x8d, 0xb7, 0xd2, 0xb3, 0xf1, + 0x5c, 0xde, 0x6c, 0x9c, 0xf4, 0x1c, 0x7c, 0x87, 0x05, 0xa7, 0x56, 0x9b, 0x41, 0x63, 0x37, 0xe5, + 0x58, 0xf4, 0x12, 0x8c, 0xd1, 0x73, 0x3c, 0x32, 0x7c, 0xde, 0x8d, 0x28, 0x08, 0x02, 0x84, 0x75, + 0x3c, 0xad, 0xda, 0xad, 0x5b, 0xd5, 0x4a, 0x56, 0xf0, 0x04, 0x01, 0xc2, 0x3a, 0x9e, 0xfd, 0x9b, + 0x16, 0x9c, 0xbf, 0xba, 0xbc, 0x92, 0x2c, 0xc5, 0xae, 0xf8, 0x0d, 0x97, 0x60, 0xa4, 0xed, 0x6a, + 0x5d, 0x49, 0x04, 0xbe, 0x15, 0xd6, 0x0b, 0x01, 0x7d, 0xbf, 0xc4, 0x26, 0xf9, 0x49, 0x0b, 0x4e, + 0x5d, 0xf5, 0x62, 0x7a, 0x2d, 0xa7, 0x23, 0x09, 0xd0, 0x7b, 0x39, 0xf2, 0xe2, 0x20, 0xdc, 0x4f, + 0x47, 0x12, 0xc0, 0x0a, 0x82, 0x35, 0x2c, 0xde, 0xf2, 0x9e, 0xc7, 0x2c, 0xb5, 0x0b, 0xa6, 0x1e, + 0x0b, 0x8b, 0x72, 0xac, 0x30, 0xe8, 0x87, 0xb9, 0x5e, 0xc8, 0xa4, 0x86, 0xfb, 0xe2, 0x84, 0x55, + 0x1f, 0x56, 0x91, 0x00, 0x9c, 0xe0, 0xd0, 0x07, 0xd4, 0xfc, 0xd5, 0x66, 0x27, 0x8a, 0x49, 0xb8, + 0x15, 0xe5, 0x9c, 0x8e, 0x2f, 0x40, 0x99, 0x48, 0x19, 0xbd, 0xe8, 0xb5, 0x62, 0x35, 0x95, 0xf0, + 0x9e, 0x07, 0x34, 0x50, 0x78, 0x03, 0xb8, 0x29, 0x1e, 0xcd, 0xcf, 0x6c, 0x15, 0x10, 0xd1, 0xdb, + 0xd2, 0x23, 0x3c, 0x30, 0x57, 0xf1, 0x95, 0x2e, 0x28, 0xce, 0xa8, 0x61, 0xff, 0x88, 0x05, 0x67, + 0xd4, 0x07, 0xbf, 0xef, 0x3e, 0xd3, 0xfe, 0xb9, 0x02, 0x4c, 0x5c, 0xdb, 0xd8, 0xa8, 0x5d, 0x25, + 0xb1, 0xb8, 0xb6, 0xfb, 0xab, 0xd1, 0xb1, 0xa6, 0x0d, 0xec, 0xf5, 0x0a, 0xec, 0xc4, 0x5e, 0x73, + 0x81, 0x07, 0x0a, 0x5a, 0xa8, 0xfa, 0xf1, 0xcd, 0xb0, 0x1e, 0x87, 0x9e, 0xbf, 0x9d, 0xa9, 0x3f, + 0x94, 0xcc, 0x45, 0x31, 0x8f, 0xb9, 0x40, 0x2f, 0xc0, 0x08, 0x8b, 0x54, 0x24, 0x27, 0xe1, 0x51, + 0xf5, 0x88, 0x62, 0xa5, 0x87, 0x07, 0xf3, 0xe5, 0x5b, 0xb8, 0xca, 0xff, 0x60, 0x81, 0x8a, 0x6e, + 0xc1, 0xd8, 0x4e, 0x1c, 0xb7, 0xaf, 0x11, 0xc7, 0xa5, 0xaf, 0x65, 0x7e, 0x1c, 0x5e, 0xc8, 0x3a, + 0x0e, 0xe9, 0x20, 0x70, 0xb4, 0xe4, 0x04, 0x49, 0xca, 0x22, 0xac, 0xd3, 0xb1, 0xeb, 0x00, 0x09, + 0xec, 0x98, 0x74, 0x27, 0xf6, 0xef, 0x5b, 0x30, 0xca, 0x83, 0x46, 0x84, 0xe8, 0x93, 0x30, 0x44, + 0xee, 0x91, 0x86, 0x60, 0x95, 0x33, 0x3b, 0x9c, 0x70, 0x5a, 0x5c, 0x06, 0x4c, 0xff, 0x63, 0x56, + 0x0b, 0x5d, 0x83, 0x51, 0xda, 0xdb, 0xab, 0x2a, 0x82, 0xc6, 0xe3, 0x79, 0x5f, 0xac, 0xa6, 0x9d, + 0x33, 0x67, 0xa2, 0x08, 0xcb, 0xea, 0x4c, 0xfb, 0xdc, 0x68, 0xd7, 0xe9, 0x89, 0x1d, 0xf7, 0x62, + 0x2c, 0x36, 0x96, 0x6b, 0x1c, 0x49, 0x50, 0xe3, 0xda, 0x67, 0x59, 0x88, 0x13, 0x22, 0xf6, 0x06, + 0x94, 0xe9, 0xa4, 0x2e, 0x36, 0x3d, 0xa7, 0xb7, 0x42, 0xfd, 0x69, 0x28, 0x4b, 0x75, 0x79, 0x24, + 0x9c, 0xc5, 0x19, 0x55, 0xa9, 0x4d, 0x8f, 0x70, 0x02, 0xb7, 0xb7, 0xe0, 0x34, 0x33, 0x7e, 0x74, + 0xe2, 0x1d, 0x63, 0x8f, 0xf5, 0x5f, 0xcc, 0xcf, 0x88, 0x97, 0x27, 0x9f, 0x99, 0x59, 0xcd, 0x1f, + 0x73, 0x5c, 0x52, 0x4c, 0x5e, 0xa1, 0xf6, 0x57, 0x87, 0xe0, 0xd1, 0x6a, 0x3d, 0x3f, 0x9e, 0xc8, + 0x2b, 0x30, 0xce, 0xf9, 0x52, 0xba, 0xb4, 0x9d, 0xa6, 0x68, 0x57, 0x09, 0x7f, 0x37, 0x34, 0x18, + 0x36, 0x30, 0xd1, 0x79, 0x28, 0x7a, 0xef, 0xf8, 0x69, 0xd7, 0xa6, 0xea, 0x1b, 0xeb, 0x98, 0x96, + 0x53, 0x30, 0x65, 0x71, 0xf9, 0xdd, 0xa1, 0xc0, 0x8a, 0xcd, 0x7d, 0x0d, 0x26, 0xbd, 0xa8, 0x11, + 0x79, 0x55, 0x9f, 0x9e, 0x33, 0xda, 0x49, 0xa5, 0xa4, 0x22, 0xb4, 0xd3, 0x0a, 0x8a, 0x53, 0xd8, + 0xda, 0x45, 0x36, 0x3c, 0x30, 0x9b, 0xdc, 0xd7, 0x7b, 0x9a, 0xbe, 0x00, 0xda, 0xec, 0xeb, 0x22, + 0x26, 0xc5, 0x17, 0x2f, 0x00, 0xfe, 0xc1, 0x11, 0x96, 0x30, 0xfa, 0xe4, 0x6c, 0xec, 0x38, 0xed, + 0xc5, 0x4e, 0xbc, 0x53, 0xf1, 0xa2, 0x46, 0xb0, 0x47, 0xc2, 0x7d, 0x26, 0x2d, 0x28, 0x25, 0x4f, + 0x4e, 0x05, 0x58, 0xbe, 0xb6, 0x58, 0xa3, 0x98, 0xb8, 0xbb, 0x0e, 0x5a, 0x84, 0x29, 0x59, 0x58, + 0x27, 0x11, 0xbb, 0xc2, 0xc6, 0x18, 0x19, 0xe5, 0x6c, 0x24, 0x8a, 0x15, 0x91, 0x34, 0xbe, 0xc9, + 0x49, 0xc3, 0x71, 0x70, 0xd2, 0x2f, 0xc3, 0x84, 0xe7, 0x7b, 0xb1, 0xe7, 0xc4, 0x01, 0x57, 0x41, + 0x71, 0xc1, 0x00, 0x93, 0xad, 0x57, 0x75, 0x00, 0x36, 0xf1, 0xec, 0xff, 0x36, 0x04, 0x33, 0x6c, + 0xda, 0x3e, 0x58, 0x61, 0x5f, 0x4f, 0x2b, 0xec, 0x56, 0xf7, 0x0a, 0x3b, 0x8e, 0x27, 0xc2, 0x03, + 0x2f, 0xb3, 0xb7, 0xa1, 0xac, 0xfc, 0xab, 0xa4, 0x83, 0xa5, 0x95, 0xe3, 0x60, 0xd9, 0x9f, 0xfb, + 0x90, 0x26, 0x6a, 0xc5, 0x4c, 0x13, 0xb5, 0xbf, 0x65, 0x41, 0xa2, 0x53, 0x41, 0xd7, 0xa0, 0xdc, + 0x0e, 0x98, 0xe5, 0x65, 0x28, 0xcd, 0x99, 0x1f, 0xcd, 0xbc, 0xa8, 0xf8, 0xa5, 0xc8, 0x3f, 0xbe, + 0x26, 0x6b, 0xe0, 0xa4, 0x32, 0x5a, 0x82, 0xd1, 0x76, 0x48, 0xea, 0x31, 0x0b, 0x2b, 0xd2, 0x97, + 0x0e, 0x5f, 0x23, 0x1c, 0x1f, 0xcb, 0x8a, 0xf6, 0xcf, 0x5b, 0x00, 0xdc, 0x0a, 0xcc, 0xf1, 0xb7, + 0xc9, 0x09, 0x88, 0xbb, 0x2b, 0x30, 0x14, 0xb5, 0x49, 0xa3, 0x97, 0x4d, 0x6c, 0xd2, 0x9f, 0x7a, + 0x9b, 0x34, 0x92, 0x01, 0xa7, 0xff, 0x30, 0xab, 0x6d, 0x7f, 0x17, 0xc0, 0x64, 0x82, 0x56, 0x8d, + 0x49, 0x0b, 0x3d, 0x6b, 0x84, 0x19, 0x38, 0x97, 0x0a, 0x33, 0x50, 0x66, 0xd8, 0x9a, 0x64, 0xf5, + 0x6d, 0x28, 0xb6, 0x9c, 0x7b, 0x42, 0x74, 0xf6, 0x74, 0xef, 0x6e, 0x50, 0xfa, 0x0b, 0x6b, 0xce, + 0x3d, 0xfe, 0x48, 0x7c, 0x5a, 0x2e, 0x90, 0x35, 0xe7, 0xde, 0x21, 0xb7, 0x7c, 0x65, 0x87, 0xd4, + 0x0d, 0x2f, 0x8a, 0xbf, 0xf0, 0x5f, 0x93, 0xff, 0x6c, 0xd9, 0xd1, 0x46, 0x58, 0x5b, 0x9e, 0x2f, + 0x6c, 0xa2, 0x06, 0x6a, 0xcb, 0xf3, 0xd3, 0x6d, 0x79, 0xfe, 0x00, 0x6d, 0x79, 0x3e, 0x7a, 0x17, + 0x46, 0x85, 0xfd, 0xa1, 0x08, 0xeb, 0x73, 0x65, 0x80, 0xf6, 0x84, 0xf9, 0x22, 0x6f, 0xf3, 0x8a, + 0x7c, 0x04, 0x8b, 0xd2, 0xbe, 0xed, 0xca, 0x06, 0xd1, 0x5f, 0xb7, 0x60, 0x52, 0xfc, 0xc6, 0xe4, + 0x9d, 0x0e, 0x89, 0x62, 0xc1, 0x7b, 0x7e, 0x7c, 0xf0, 0x3e, 0x88, 0x8a, 0xbc, 0x2b, 0x1f, 0x97, + 0xc7, 0xac, 0x09, 0xec, 0xdb, 0xa3, 0x54, 0x2f, 0xd0, 0x3f, 0xb0, 0xe0, 0x74, 0xcb, 0xb9, 0xc7, + 0x5b, 0xe4, 0x65, 0xd8, 0x89, 0xbd, 0x40, 0xa8, 0xfe, 0x3f, 0x39, 0xd8, 0xf4, 0x77, 0x55, 0xe7, + 0x9d, 0x94, 0xfa, 0xc9, 0xd3, 0x59, 0x28, 0x7d, 0xbb, 0x9a, 0xd9, 0xaf, 0xb9, 0x2d, 0x28, 0xc9, + 0xf5, 0x96, 0x21, 0x6a, 0xa8, 0xe8, 0x8c, 0xf5, 0x91, 0xcd, 0x3f, 0x75, 0x5f, 0x7f, 0xda, 0x8e, + 0x58, 0x6b, 0x0f, 0xb5, 0x9d, 0xb7, 0x61, 0x5c, 0x5f, 0x63, 0x0f, 0xb5, 0xad, 0x77, 0xe0, 0x54, + 0xc6, 0x5a, 0x7a, 0xa8, 0x4d, 0xde, 0x85, 0x73, 0xb9, 0xeb, 0xe3, 0x61, 0x36, 0x6c, 0xff, 0x9c, + 0xa5, 0x9f, 0x83, 0x27, 0xa0, 0x73, 0x58, 0x36, 0x75, 0x0e, 0x17, 0x7a, 0xef, 0x9c, 0x1c, 0xc5, + 0xc3, 0x5b, 0x7a, 0xa7, 0xe9, 0xa9, 0x8e, 0x5e, 0x87, 0x91, 0x26, 0x2d, 0x91, 0x86, 0xaf, 0x76, + 0xff, 0x1d, 0x99, 0xf0, 0x52, 0xac, 0x3c, 0xc2, 0x82, 0x82, 0xfd, 0x4b, 0x16, 0x0c, 0x9d, 0xc0, + 0x48, 0x60, 0x73, 0x24, 0x9e, 0xcd, 0x25, 0x2d, 0x22, 0x0e, 0x2f, 0x60, 0xe7, 0xee, 0xca, 0xbd, + 0x98, 0xf8, 0x11, 0x7b, 0x2a, 0x66, 0x0e, 0xcc, 0xb7, 0xc0, 0xa9, 0x1b, 0x81, 0xe3, 0x2e, 0x39, + 0x4d, 0xc7, 0x6f, 0x90, 0xb0, 0xea, 0x6f, 0x1f, 0xc9, 0x02, 0xbb, 0xd0, 0xcf, 0x02, 0xdb, 0xde, + 0x01, 0xa4, 0x37, 0x20, 0x5c, 0x59, 0x30, 0x8c, 0x7a, 0xbc, 0x29, 0x31, 0xfc, 0x4f, 0x66, 0xb3, + 0x66, 0x5d, 0x3d, 0xd3, 0x9c, 0x34, 0x78, 0x01, 0x96, 0x84, 0xec, 0x57, 0x20, 0xd3, 0x1f, 0xbe, + 0xbf, 0xd8, 0xc0, 0xfe, 0x0c, 0xcc, 0xb0, 0x9a, 0x47, 0x7c, 0xd2, 0xda, 0x29, 0xa9, 0x64, 0x46, + 0xf0, 0x3b, 0xfb, 0x8b, 0x16, 0x4c, 0xad, 0xa7, 0x62, 0x82, 0x5d, 0x62, 0x0a, 0xd0, 0x0c, 0x61, + 0x78, 0x9d, 0x95, 0x62, 0x01, 0x3d, 0x76, 0x19, 0xd4, 0x9f, 0x5b, 0x90, 0x84, 0xa8, 0x38, 0x01, + 0xc6, 0x6b, 0xd9, 0x60, 0xbc, 0x32, 0x65, 0x23, 0xaa, 0x3b, 0x79, 0x7c, 0x17, 0xba, 0xae, 0xe2, + 0x31, 0xf5, 0x10, 0x8b, 0x24, 0x64, 0x78, 0xf4, 0x9e, 0x49, 0x33, 0x68, 0x93, 0x8c, 0xd0, 0x64, + 0xff, 0xe7, 0x02, 0x20, 0x85, 0x3b, 0x70, 0xbc, 0xa8, 0xee, 0x1a, 0xc7, 0x13, 0x2f, 0x6a, 0x0f, + 0x10, 0x53, 0xe1, 0x87, 0x8e, 0x1f, 0x71, 0xb2, 0x9e, 0x90, 0xba, 0x1d, 0xcd, 0x3e, 0x60, 0x4e, + 0x34, 0x89, 0x6e, 0x74, 0x51, 0xc3, 0x19, 0x2d, 0x68, 0xa6, 0x19, 0xc3, 0x83, 0x9a, 0x66, 0x8c, + 0xf4, 0x71, 0x57, 0xfb, 0x59, 0x0b, 0x26, 0xd4, 0x30, 0xbd, 0x4f, 0xec, 0xcf, 0x55, 0x7f, 0x72, + 0x8e, 0xbe, 0x9a, 0xd6, 0x65, 0x76, 0x25, 0x7c, 0x23, 0x73, 0x3b, 0x74, 0x9a, 0xde, 0xbb, 0x44, + 0x45, 0xeb, 0x9b, 0x17, 0x6e, 0x84, 0xa2, 0xf4, 0xf0, 0x60, 0x7e, 0x42, 0xfd, 0xe3, 0xd1, 0x81, + 0x93, 0x2a, 0xf6, 0x8f, 0xd3, 0xcd, 0x6e, 0x2e, 0x45, 0xf4, 0x12, 0x0c, 0xb7, 0x77, 0x9c, 0x88, + 0xa4, 0x9c, 0x6e, 0x86, 0x6b, 0xb4, 0xf0, 0xf0, 0x60, 0x7e, 0x52, 0x55, 0x60, 0x25, 0x98, 0x63, + 0x0f, 0x1e, 0x85, 0xab, 0x7b, 0x71, 0xf6, 0x8d, 0xc2, 0xf5, 0xc7, 0x16, 0x0c, 0xad, 0x07, 0xee, + 0x49, 0x1c, 0x01, 0xaf, 0x19, 0x47, 0xc0, 0x63, 0x79, 0x81, 0xdb, 0x73, 0x77, 0xff, 0x6a, 0x6a, + 0xf7, 0x5f, 0xc8, 0xa5, 0xd0, 0x7b, 0xe3, 0xb7, 0x60, 0x8c, 0x85, 0x83, 0x17, 0x0e, 0x46, 0x2f, + 0x18, 0x1b, 0x7e, 0x3e, 0xb5, 0xe1, 0xa7, 0x34, 0x54, 0x6d, 0xa7, 0x3f, 0x05, 0xa3, 0xc2, 0xc9, + 0x25, 0xed, 0xbd, 0x29, 0x70, 0xb1, 0x84, 0xdb, 0x3f, 0x5a, 0x04, 0x23, 0xfc, 0x3c, 0xfa, 0x15, + 0x0b, 0x16, 0x42, 0x6e, 0xfc, 0xea, 0x56, 0x3a, 0xa1, 0xe7, 0x6f, 0xd7, 0x1b, 0x3b, 0xc4, 0xed, + 0x34, 0x3d, 0x7f, 0xbb, 0xba, 0xed, 0x07, 0xaa, 0x78, 0xe5, 0x1e, 0x69, 0x74, 0x98, 0xfa, 0xaa, + 0x4f, 0xac, 0x7b, 0x65, 0x44, 0xfe, 0xfc, 0xfd, 0x83, 0xf9, 0x05, 0x7c, 0x24, 0xda, 0xf8, 0x88, + 0x7d, 0x41, 0xbf, 0x69, 0xc1, 0x15, 0x1e, 0x95, 0x7d, 0xf0, 0xfe, 0xf7, 0x78, 0xe7, 0xd6, 0x24, + 0xa9, 0x84, 0xc8, 0x06, 0x09, 0x5b, 0x4b, 0x2f, 0x8b, 0x01, 0xbd, 0x52, 0x3b, 0x5a, 0x5b, 0xf8, + 0xa8, 0x9d, 0xb3, 0xff, 0x45, 0x11, 0x26, 0x44, 0x68, 0x27, 0x71, 0x07, 0xbc, 0x64, 0x2c, 0x89, + 0xc7, 0x53, 0x4b, 0x62, 0xc6, 0x40, 0x3e, 0x9e, 0xe3, 0x3f, 0x82, 0x19, 0x7a, 0x38, 0x5f, 0x23, + 0x4e, 0x18, 0x6f, 0x12, 0x87, 0x5b, 0x5c, 0x15, 0x8f, 0x7c, 0xfa, 0x2b, 0xc1, 0xda, 0x8d, 0x34, + 0x31, 0xdc, 0x4d, 0xff, 0xeb, 0xe9, 0xce, 0xf1, 0x61, 0xba, 0x2b, 0x3a, 0xd7, 0x9b, 0x50, 0x56, + 0x1e, 0x1a, 0xe2, 0xd0, 0xe9, 0x1d, 0xe4, 0x2e, 0x4d, 0x81, 0x0b, 0xbf, 0x12, 0xef, 0xa0, 0x84, + 0x9c, 0xfd, 0x0f, 0x0b, 0x46, 0x83, 0x7c, 0x12, 0xd7, 0xa1, 0xe4, 0x44, 0x91, 0xb7, 0xed, 0x13, + 0x57, 0xec, 0xd8, 0x0f, 0xe7, 0xed, 0x58, 0xa3, 0x19, 0xe6, 0x25, 0xb3, 0x28, 0x6a, 0x62, 0x45, + 0x03, 0x5d, 0xe3, 0x76, 0x6d, 0x7b, 0xf2, 0xa5, 0x36, 0x18, 0x35, 0x90, 0x96, 0x6f, 0x7b, 0x04, + 0x8b, 0xfa, 0xe8, 0xb3, 0xdc, 0xf0, 0xf0, 0xba, 0x1f, 0xdc, 0xf5, 0xaf, 0x06, 0x81, 0x0c, 0x9f, + 0x30, 0x18, 0xc1, 0x19, 0x69, 0x6e, 0xa8, 0xaa, 0x63, 0x93, 0xda, 0x60, 0x11, 0x2c, 0xbf, 0x15, + 0x4e, 0x51, 0xd2, 0xa6, 0x77, 0x73, 0x84, 0x08, 0x4c, 0x89, 0xb8, 0x61, 0xb2, 0x4c, 0x8c, 0x5d, + 0xe6, 0x23, 0xcc, 0xac, 0x9d, 0x48, 0x80, 0xaf, 0x9b, 0x24, 0x70, 0x9a, 0xa6, 0xfd, 0x13, 0x16, + 0x30, 0x4f, 0xcf, 0x13, 0xe0, 0x47, 0x3e, 0x65, 0xf2, 0x23, 0xb3, 0x79, 0x83, 0x9c, 0xc3, 0x8a, + 0xbc, 0xc8, 0x57, 0x56, 0x2d, 0x0c, 0xee, 0xed, 0x0b, 0xa3, 0x8f, 0xfe, 0xef, 0x0f, 0xfb, 0xff, + 0x58, 0xfc, 0x10, 0x53, 0xfe, 0x13, 0xe8, 0xdb, 0xa0, 0xd4, 0x70, 0xda, 0x4e, 0x83, 0xe7, 0x4a, + 0xc9, 0x95, 0xc5, 0x19, 0x95, 0x16, 0x96, 0x45, 0x0d, 0x2e, 0x5b, 0x92, 0xf1, 0xe7, 0x4a, 0xb2, + 0xb8, 0xaf, 0x3c, 0x49, 0x35, 0x39, 0xb7, 0x0b, 0x13, 0x06, 0xb1, 0x87, 0x2a, 0x88, 0xf8, 0x36, + 0x7e, 0xc5, 0xaa, 0x78, 0x89, 0x2d, 0x98, 0xf1, 0xb5, 0xff, 0xf4, 0x42, 0x91, 0x8f, 0xcb, 0x0f, + 0xf7, 0xbb, 0x44, 0xd9, 0xed, 0xa3, 0xf9, 0x9d, 0xa6, 0xc8, 0xe0, 0x6e, 0xca, 0xf6, 0x8f, 0x59, + 0xf0, 0x88, 0x8e, 0xa8, 0xb9, 0xb6, 0xf4, 0x93, 0xee, 0x57, 0xa0, 0x14, 0xb4, 0x49, 0xe8, 0xc4, + 0x41, 0x28, 0x6e, 0x8d, 0xcb, 0x72, 0xd0, 0x6f, 0x8a, 0xf2, 0x43, 0x11, 0x69, 0x5c, 0x52, 0x97, + 0xe5, 0x58, 0xd5, 0xa4, 0xaf, 0x4f, 0x36, 0x18, 0x91, 0x70, 0x62, 0x62, 0x67, 0x00, 0x53, 0x74, + 0x47, 0x58, 0x40, 0xec, 0xaf, 0x5a, 0x7c, 0x61, 0xe9, 0x5d, 0x47, 0xef, 0xc0, 0x74, 0xcb, 0x89, + 0x1b, 0x3b, 0x2b, 0xf7, 0xda, 0x21, 0xd7, 0x95, 0xc8, 0x71, 0x7a, 0xba, 0xdf, 0x38, 0x69, 0x1f, + 0x99, 0xd8, 0x52, 0xae, 0xa5, 0x88, 0xe1, 0x2e, 0xf2, 0x68, 0x13, 0xc6, 0x58, 0x19, 0xf3, 0xcf, + 0x8b, 0x7a, 0xb1, 0x06, 0x79, 0xad, 0x29, 0x5b, 0x81, 0xb5, 0x84, 0x0e, 0xd6, 0x89, 0xda, 0x3f, + 0x53, 0xe4, 0xbb, 0x9d, 0xb1, 0xf2, 0x4f, 0xc1, 0x68, 0x3b, 0x70, 0x97, 0xab, 0x15, 0x2c, 0x66, + 0x41, 0x5d, 0x23, 0x35, 0x5e, 0x8c, 0x25, 0x1c, 0x5d, 0x86, 0x92, 0xf8, 0x29, 0x75, 0x5b, 0xec, + 0x6c, 0x16, 0x78, 0x11, 0x56, 0x50, 0xf4, 0x3c, 0x40, 0x3b, 0x0c, 0xf6, 0x3c, 0x97, 0x05, 0x81, + 0x28, 0x9a, 0x66, 0x3e, 0x35, 0x05, 0xc1, 0x1a, 0x16, 0x7a, 0x15, 0x26, 0x3a, 0x7e, 0xc4, 0xd9, + 0x11, 0x67, 0x53, 0x04, 0xe5, 0x2e, 0x25, 0x06, 0x28, 0xb7, 0x74, 0x20, 0x36, 0x71, 0xd1, 0x22, + 0x8c, 0xc4, 0x0e, 0x33, 0x5b, 0x19, 0xce, 0xb7, 0xb7, 0xdd, 0xa0, 0x18, 0x7a, 0x5a, 0x0e, 0x5a, + 0x01, 0x8b, 0x8a, 0xe8, 0x4d, 0xe9, 0x2a, 0xcb, 0x0f, 0x76, 0x61, 0xe8, 0x3e, 0xd8, 0x25, 0xa0, + 0x39, 0xca, 0x0a, 0x03, 0x7a, 0x83, 0x16, 0x7a, 0x15, 0x80, 0xdc, 0x8b, 0x49, 0xe8, 0x3b, 0x4d, + 0x65, 0x15, 0xa6, 0xec, 0xa0, 0x2b, 0xc1, 0x7a, 0x10, 0xdf, 0x8a, 0xc8, 0xb7, 0xac, 0x28, 0x14, + 0xac, 0xa1, 0xdb, 0xbf, 0x59, 0x06, 0x48, 0x18, 0x77, 0xf4, 0x6e, 0xd7, 0xc9, 0xf5, 0x4c, 0x6f, + 0x56, 0xff, 0xf8, 0x8e, 0x2d, 0xf4, 0xdd, 0x16, 0x8c, 0x39, 0xcd, 0x66, 0xd0, 0x70, 0x62, 0x36, + 0x45, 0x85, 0xde, 0x27, 0xa7, 0x68, 0x7f, 0x31, 0xa9, 0xc1, 0xbb, 0xf0, 0x82, 0x5c, 0xa2, 0x1a, + 0xa4, 0x6f, 0x2f, 0xf4, 0x86, 0xd1, 0xc7, 0xe4, 0x5b, 0x91, 0xaf, 0xad, 0xb9, 0xf4, 0x5b, 0xb1, + 0xcc, 0x2e, 0x09, 0xfd, 0x99, 0x78, 0xcb, 0x78, 0x26, 0x0e, 0xe5, 0x3b, 0x03, 0x1a, 0xfc, 0x6b, + 0xbf, 0x17, 0x22, 0xaa, 0xe9, 0x81, 0x01, 0x86, 0xf3, 0x3d, 0xef, 0xb4, 0x87, 0x52, 0x9f, 0xa0, + 0x00, 0x6f, 0xc3, 0x94, 0x6b, 0x72, 0x01, 0x62, 0x29, 0x3e, 0x99, 0x47, 0x37, 0xc5, 0x34, 0x24, + 0xf7, 0x7e, 0x0a, 0x80, 0xd3, 0x84, 0x51, 0x8d, 0x07, 0x7d, 0xa8, 0xfa, 0x5b, 0x81, 0xf0, 0xb6, + 0xb0, 0x73, 0xe7, 0x72, 0x3f, 0x8a, 0x49, 0x8b, 0x62, 0x26, 0xd7, 0xfb, 0xba, 0xa8, 0x8b, 0x15, + 0x15, 0xf4, 0x3a, 0x8c, 0x30, 0xd7, 0xab, 0x68, 0xb6, 0x94, 0x2f, 0x2c, 0x36, 0xa3, 0x98, 0x25, + 0x3b, 0x92, 0xfd, 0x8d, 0xb0, 0xa0, 0x80, 0xae, 0x49, 0xc7, 0xc6, 0xa8, 0xea, 0xdf, 0x8a, 0x08, + 0x73, 0x6c, 0x2c, 0x2f, 0x7d, 0x38, 0xf1, 0x59, 0xe4, 0xe5, 0x99, 0xd9, 0xbb, 0x8c, 0x9a, 0x94, + 0x8d, 0x12, 0xff, 0x65, 0x52, 0xb0, 0x59, 0xc8, 0xef, 0x9e, 0x99, 0x38, 0x2c, 0x19, 0xce, 0xdb, + 0x26, 0x09, 0x9c, 0xa6, 0x49, 0x59, 0x52, 0xbe, 0xed, 0x85, 0xbf, 0x46, 0xbf, 0xc3, 0x83, 0xbf, + 0xc4, 0xd9, 0x75, 0xc4, 0x4b, 0xb0, 0xa8, 0x7f, 0xa2, 0xfc, 0xc1, 0x9c, 0x0f, 0xd3, 0xe9, 0x2d, + 0xfa, 0x50, 0xf9, 0x91, 0xdf, 0x1f, 0x82, 0x49, 0x73, 0x49, 0xa1, 0x2b, 0x50, 0x16, 0x44, 0x54, + 0x20, 0x7f, 0xb5, 0x4b, 0xd6, 0x24, 0x00, 0x27, 0x38, 0x2c, 0x7f, 0x03, 0xab, 0xae, 0xd9, 0xd9, + 0x26, 0xf9, 0x1b, 0x14, 0x04, 0x6b, 0x58, 0xf4, 0x65, 0xb5, 0x19, 0x04, 0xb1, 0xba, 0x91, 0xd4, + 0xba, 0x5b, 0x62, 0xa5, 0x58, 0x40, 0xe9, 0x4d, 0xb4, 0x4b, 0x42, 0x9f, 0x34, 0xcd, 0xf8, 0xc0, + 0xea, 0x26, 0xba, 0xae, 0x03, 0xb1, 0x89, 0x4b, 0xef, 0xd3, 0x20, 0x62, 0x0b, 0x59, 0xbc, 0xdf, + 0x12, 0xbb, 0xe5, 0x3a, 0xf7, 0xad, 0x96, 0x70, 0xf4, 0x19, 0x78, 0x44, 0xc5, 0x40, 0xc2, 0x5c, + 0x11, 0x21, 0x5b, 0x1c, 0x31, 0xc4, 0x2d, 0x8f, 0x2c, 0x67, 0xa3, 0xe1, 0xbc, 0xfa, 0xe8, 0x35, + 0x98, 0x14, 0x3c, 0xbe, 0xa4, 0x38, 0x6a, 0xda, 0xc6, 0x5c, 0x37, 0xa0, 0x38, 0x85, 0x2d, 0x23, + 0x1c, 0x33, 0x36, 0x5b, 0x52, 0x28, 0x75, 0x47, 0x38, 0xd6, 0xe1, 0xb8, 0xab, 0x06, 0x5a, 0x84, + 0x29, 0xce, 0x84, 0x79, 0xfe, 0x36, 0x9f, 0x13, 0xe1, 0x4e, 0xa5, 0xb6, 0xd4, 0x4d, 0x13, 0x8c, + 0xd3, 0xf8, 0xe8, 0x15, 0x18, 0x77, 0xc2, 0xc6, 0x8e, 0x17, 0x93, 0x46, 0xdc, 0x09, 0xb9, 0x9f, + 0x95, 0x66, 0x5c, 0xb4, 0xa8, 0xc1, 0xb0, 0x81, 0x69, 0xbf, 0x0b, 0xa7, 0x32, 0x82, 0x2e, 0xd0, + 0x85, 0xe3, 0xb4, 0x3d, 0xf9, 0x4d, 0x29, 0x0b, 0xe4, 0xc5, 0x5a, 0x55, 0x7e, 0x8d, 0x86, 0x45, + 0x57, 0x27, 0x0b, 0xce, 0xa0, 0xe5, 0x00, 0x54, 0xab, 0x73, 0x55, 0x02, 0x70, 0x82, 0x63, 0xff, + 0xcf, 0x02, 0x4c, 0x65, 0x28, 0x57, 0x58, 0x1e, 0xba, 0xd4, 0x2b, 0x25, 0x49, 0x3b, 0x67, 0x06, + 0xcc, 0x2e, 0x1c, 0x21, 0x60, 0x76, 0xb1, 0x5f, 0xc0, 0xec, 0xa1, 0xf7, 0x12, 0x30, 0xdb, 0x1c, + 0xb1, 0xe1, 0x81, 0x46, 0x2c, 0x23, 0xc8, 0xf6, 0xc8, 0x11, 0x83, 0x6c, 0x1b, 0x83, 0x3e, 0x3a, + 0xc0, 0xa0, 0xff, 0x60, 0x01, 0xa6, 0xd3, 0x46, 0x90, 0x27, 0x20, 0xb8, 0x7d, 0xdd, 0x10, 0xdc, + 0x66, 0x67, 0x75, 0x4c, 0x9b, 0x66, 0xe6, 0x09, 0x71, 0x71, 0x4a, 0x88, 0xfb, 0xd1, 0x81, 0xa8, + 0xf5, 0x16, 0xe8, 0xfe, 0x9d, 0x02, 0x9c, 0x49, 0x57, 0x59, 0x6e, 0x3a, 0x5e, 0xeb, 0x04, 0xc6, + 0xe6, 0xa6, 0x31, 0x36, 0xcf, 0x0e, 0xf2, 0x35, 0xac, 0x6b, 0xb9, 0x03, 0x74, 0x27, 0x35, 0x40, + 0x57, 0x06, 0x27, 0xd9, 0x7b, 0x94, 0xbe, 0x52, 0x84, 0x0b, 0x99, 0xf5, 0x12, 0xb9, 0xe7, 0xaa, + 0x21, 0xf7, 0x7c, 0x3e, 0x25, 0xf7, 0xb4, 0x7b, 0xd7, 0x3e, 0x1e, 0x41, 0xa8, 0x70, 0x91, 0x65, + 0x11, 0x04, 0x1e, 0x50, 0x08, 0x6a, 0xb8, 0xc8, 0x2a, 0x42, 0xd8, 0xa4, 0xfb, 0xf5, 0x24, 0xfc, + 0xfc, 0x37, 0x16, 0x9c, 0xcb, 0x9c, 0x9b, 0x13, 0x10, 0x76, 0xad, 0x9b, 0xc2, 0xae, 0xa7, 0x06, + 0x5e, 0xad, 0x39, 0xd2, 0xaf, 0x5f, 0x1f, 0xca, 0xf9, 0x16, 0xf6, 0x94, 0xbf, 0x09, 0x63, 0x4e, + 0xa3, 0x41, 0xa2, 0x68, 0x2d, 0x70, 0x55, 0x4c, 0xe0, 0x67, 0xd9, 0x3b, 0x2b, 0x29, 0x3e, 0x3c, + 0x98, 0x9f, 0x4b, 0x93, 0x48, 0xc0, 0x58, 0xa7, 0x80, 0x3e, 0x0b, 0xa5, 0x48, 0xdc, 0x9b, 0x62, + 0xee, 0x5f, 0x18, 0x70, 0x70, 0x9c, 0x4d, 0xd2, 0x34, 0xe3, 0x1c, 0x29, 0x51, 0x85, 0x22, 0x69, + 0xc6, 0x44, 0x29, 0x1c, 0x6b, 0x4c, 0x94, 0xe7, 0x01, 0xf6, 0xd4, 0x63, 0x20, 0x2d, 0x80, 0xd0, + 0x9e, 0x09, 0x1a, 0x16, 0xfa, 0x26, 0x98, 0x8e, 0x78, 0x54, 0xbf, 0xe5, 0xa6, 0x13, 0x31, 0x3f, + 0x17, 0xb1, 0x0a, 0x59, 0x2c, 0xa5, 0x7a, 0x0a, 0x86, 0xbb, 0xb0, 0xd1, 0xaa, 0x6c, 0x95, 0x85, + 0x20, 0xe4, 0x0b, 0xf3, 0x52, 0xd2, 0xa2, 0xc8, 0x82, 0x7b, 0x3a, 0x3d, 0xfc, 0x6c, 0xe0, 0xb5, + 0x9a, 0xe8, 0xb3, 0x00, 0x74, 0xf9, 0x08, 0x41, 0xc4, 0x68, 0xfe, 0xe1, 0x49, 0x4f, 0x15, 0x37, + 0xd3, 0x2c, 0x97, 0x39, 0xa7, 0x56, 0x14, 0x11, 0xac, 0x11, 0xb4, 0x7f, 0x70, 0x08, 0x1e, 0xed, + 0x71, 0x46, 0xa2, 0x45, 0x53, 0x11, 0xfb, 0x74, 0xfa, 0x71, 0x3d, 0x97, 0x59, 0xd9, 0x78, 0x6d, + 0xa7, 0x96, 0x62, 0xe1, 0x3d, 0x2f, 0xc5, 0xef, 0xb3, 0x34, 0xb1, 0x07, 0x37, 0xd6, 0xfc, 0xd4, + 0x11, 0xcf, 0xfe, 0x63, 0x94, 0x83, 0x6c, 0x65, 0x08, 0x13, 0x9e, 0x1f, 0xb8, 0x3b, 0x03, 0x4b, + 0x17, 0x4e, 0x56, 0x4c, 0xfc, 0x05, 0x0b, 0x1e, 0xcf, 0xec, 0xaf, 0x61, 0x92, 0x73, 0x05, 0xca, + 0x0d, 0x5a, 0xa8, 0xf9, 0x22, 0x26, 0x4e, 0xda, 0x12, 0x80, 0x13, 0x1c, 0xc3, 0xf2, 0xa6, 0xd0, + 0xd7, 0xf2, 0xe6, 0x9f, 0x5b, 0xd0, 0xb5, 0x3f, 0x4e, 0xe0, 0xa0, 0xae, 0x9a, 0x07, 0xf5, 0x87, + 0x07, 0x99, 0xcb, 0x9c, 0x33, 0xfa, 0x8f, 0xa6, 0xe0, 0x6c, 0x8e, 0x2f, 0xce, 0x1e, 0xcc, 0x6c, + 0x37, 0x88, 0xe9, 0xe5, 0x29, 0x3e, 0x26, 0xd3, 0x21, 0xb6, 0xa7, 0x4b, 0x28, 0x4b, 0x69, 0x39, + 0xd3, 0x85, 0x82, 0xbb, 0x9b, 0x40, 0x5f, 0xb0, 0xe0, 0xb4, 0x73, 0x37, 0xea, 0xca, 0x81, 0x2f, + 0xd6, 0xcc, 0x8b, 0x99, 0x42, 0x90, 0x3e, 0x39, 0xf3, 0x79, 0x8e, 0xcf, 0x2c, 0x2c, 0x9c, 0xd9, + 0x16, 0xc2, 0x22, 0x4a, 0x3c, 0x65, 0xe7, 0x7b, 0xf8, 0x21, 0x67, 0x39, 0x4d, 0xf1, 0x1b, 0x44, + 0x42, 0xb0, 0xa2, 0x83, 0x3e, 0x0f, 0xe5, 0x6d, 0xe9, 0xc9, 0x98, 0x71, 0x43, 0x25, 0x03, 0xd9, + 0xdb, 0xbf, 0x93, 0xab, 0x32, 0x15, 0x12, 0x4e, 0x88, 0xa2, 0xd7, 0xa0, 0xe8, 0x6f, 0x45, 0xbd, + 0xd2, 0x64, 0xa6, 0x6c, 0xd6, 0xb8, 0xb7, 0xff, 0xfa, 0x6a, 0x1d, 0xd3, 0x8a, 0xe8, 0x1a, 0x14, + 0xc3, 0x4d, 0x57, 0x48, 0xf0, 0x32, 0xcf, 0x70, 0xbc, 0x54, 0xc9, 0xe9, 0x15, 0xa3, 0x84, 0x97, + 0x2a, 0x98, 0x92, 0x40, 0x35, 0x18, 0x66, 0x0e, 0x2c, 0xe2, 0x3e, 0xc8, 0xe4, 0x7c, 0x7b, 0x38, + 0x82, 0xf1, 0x90, 0x00, 0x0c, 0x01, 0x73, 0x42, 0x68, 0x03, 0x46, 0x1a, 0x2c, 0xa5, 0xa2, 0x08, + 0x48, 0xf6, 0xb1, 0x4c, 0x59, 0x5d, 0x8f, 0x5c, 0x93, 0x42, 0x74, 0xc5, 0x30, 0xb0, 0xa0, 0xc5, + 0xa8, 0x92, 0xf6, 0xce, 0x56, 0x24, 0x52, 0x00, 0x67, 0x53, 0xed, 0x91, 0x42, 0x55, 0x50, 0x65, + 0x18, 0x58, 0xd0, 0x42, 0x9f, 0x80, 0xc2, 0x56, 0x43, 0x38, 0xa7, 0x64, 0x0a, 0xed, 0xcc, 0x80, + 0x0d, 0x4b, 0x23, 0xf7, 0x0f, 0xe6, 0x0b, 0xab, 0xcb, 0xb8, 0xb0, 0xd5, 0x40, 0xeb, 0x30, 0xba, + 0xc5, 0x5d, 0xbc, 0x85, 0x5c, 0xee, 0xc9, 0x6c, 0xef, 0xf3, 0x2e, 0x2f, 0x70, 0xee, 0x97, 0x21, + 0x00, 0x58, 0x12, 0x61, 0x41, 0xd7, 0x95, 0xab, 0xba, 0x88, 0xdd, 0xb5, 0x70, 0xb4, 0xf0, 0x02, + 0xfc, 0x7e, 0x4e, 0x1c, 0xde, 0xb1, 0x46, 0x91, 0xae, 0x6a, 0x47, 0xe6, 0x61, 0x17, 0xb1, 0x58, + 0x32, 0x57, 0x75, 0x9f, 0x14, 0xf5, 0x7c, 0x55, 0x2b, 0x24, 0x9c, 0x10, 0x45, 0xbb, 0x30, 0xb1, + 0x17, 0xb5, 0x77, 0x88, 0xdc, 0xd2, 0x2c, 0x34, 0x4b, 0xce, 0x15, 0x76, 0x5b, 0x20, 0x7a, 0x61, + 0xdc, 0x71, 0x9a, 0x5d, 0xa7, 0x10, 0xd3, 0x7f, 0xdf, 0xd6, 0x89, 0x61, 0x93, 0x36, 0x1d, 0xfe, + 0x77, 0x3a, 0xc1, 0xe6, 0x7e, 0x4c, 0x44, 0xc8, 0xad, 0xcc, 0xe1, 0x7f, 0x83, 0xa3, 0x74, 0x0f, + 0xbf, 0x00, 0x60, 0x49, 0x04, 0xdd, 0x16, 0xc3, 0xc3, 0x4e, 0xcf, 0xe9, 0xfc, 0xb8, 0x98, 0x8b, + 0x12, 0x29, 0x67, 0x50, 0xd8, 0x69, 0x99, 0x90, 0x62, 0xa7, 0x64, 0x7b, 0x27, 0x88, 0x03, 0x3f, + 0x75, 0x42, 0xcf, 0xe4, 0x9f, 0x92, 0xb5, 0x0c, 0xfc, 0xee, 0x53, 0x32, 0x0b, 0x0b, 0x67, 0xb6, + 0x85, 0x5c, 0x98, 0x6c, 0x07, 0x61, 0x7c, 0x37, 0x08, 0xe5, 0xfa, 0x42, 0x3d, 0xe4, 0x0a, 0x06, + 0xa6, 0x68, 0x91, 0x45, 0xb3, 0x33, 0x21, 0x38, 0x45, 0x13, 0x7d, 0x1a, 0x46, 0xa3, 0x86, 0xd3, + 0x24, 0xd5, 0x9b, 0xb3, 0xa7, 0xf2, 0xaf, 0x9f, 0x3a, 0x47, 0xc9, 0x59, 0x5d, 0x3c, 0x42, 0x3b, + 0x47, 0xc1, 0x92, 0x1c, 0x5a, 0x85, 0x61, 0x96, 0x54, 0x8b, 0xc5, 0x87, 0xcb, 0x09, 0xef, 0xd9, + 0x65, 0x41, 0xcc, 0xcf, 0x26, 0x56, 0x8c, 0x79, 0x75, 0xba, 0x07, 0x04, 0x7b, 0x1d, 0x44, 0xb3, + 0x67, 0xf2, 0xf7, 0x80, 0xe0, 0xca, 0x6f, 0xd6, 0x7b, 0xed, 0x01, 0x85, 0x84, 0x13, 0xa2, 0xf4, + 0x64, 0xa6, 0xa7, 0xe9, 0xd9, 0x1e, 0xa6, 0x2f, 0xb9, 0x67, 0x29, 0x3b, 0x99, 0xe9, 0x49, 0x4a, + 0x49, 0xd8, 0xbf, 0x3b, 0xda, 0xcd, 0xb3, 0xb0, 0x07, 0xd9, 0x77, 0x5a, 0x5d, 0xba, 0xba, 0x8f, + 0x0f, 0x2a, 0x1f, 0x3a, 0x46, 0x6e, 0xf5, 0x0b, 0x16, 0x9c, 0x6d, 0x67, 0x7e, 0x88, 0x60, 0x00, + 0x06, 0x13, 0x33, 0xf1, 0x4f, 0x57, 0xb1, 0x04, 0xb3, 0xe1, 0x38, 0xa7, 0xa5, 0xf4, 0x8b, 0xa0, + 0xf8, 0x9e, 0x5f, 0x04, 0x6b, 0x50, 0x62, 0x4c, 0x66, 0x9f, 0x14, 0xc3, 0xe9, 0x87, 0x11, 0x63, + 0x25, 0x96, 0x45, 0x45, 0xac, 0x48, 0xa0, 0xef, 0xb7, 0xe0, 0x7c, 0xba, 0xeb, 0x98, 0x30, 0xb0, + 0x08, 0x40, 0xc8, 0xdf, 0x82, 0xab, 0xe2, 0xfb, 0xcf, 0xd7, 0x7a, 0x21, 0x1f, 0xf6, 0x43, 0xc0, + 0xbd, 0x1b, 0x43, 0x95, 0x8c, 0xc7, 0xe8, 0x88, 0x29, 0x80, 0x1f, 0xe0, 0x41, 0xfa, 0x22, 0x8c, + 0xb7, 0x82, 0x8e, 0x1f, 0x0b, 0x4b, 0x19, 0xa1, 0xb5, 0x67, 0xda, 0xea, 0x35, 0xad, 0x1c, 0x1b, + 0x58, 0xa9, 0x67, 0x6c, 0xe9, 0x81, 0x9f, 0xb1, 0x6f, 0xc1, 0xb8, 0xaf, 0x99, 0x76, 0x0a, 0x7e, + 0xe0, 0x52, 0x7e, 0xf0, 0x50, 0xdd, 0x10, 0x94, 0xf7, 0x52, 0x2f, 0xc1, 0x06, 0xb5, 0x93, 0x7d, + 0x1b, 0xfd, 0x94, 0x95, 0xc1, 0xd4, 0xf3, 0xd7, 0xf2, 0x27, 0xcd, 0xd7, 0xf2, 0xa5, 0xf4, 0x6b, + 0xb9, 0x4b, 0xf8, 0x6a, 0x3c, 0x94, 0x07, 0x4f, 0x74, 0x32, 0x68, 0x9c, 0x40, 0xbb, 0x09, 0x17, + 0xfb, 0x5d, 0x4b, 0xcc, 0x64, 0xca, 0x55, 0xaa, 0xb6, 0xc4, 0x64, 0xca, 0xad, 0x56, 0x30, 0x83, + 0x0c, 0x1a, 0x48, 0xc6, 0xfe, 0x1f, 0x16, 0x14, 0x6b, 0x81, 0x7b, 0x02, 0xc2, 0xe4, 0x4f, 0x19, + 0xc2, 0xe4, 0x47, 0xb3, 0x2f, 0x44, 0x37, 0x57, 0x74, 0xbc, 0x92, 0x12, 0x1d, 0x9f, 0xcf, 0x23, + 0xd0, 0x5b, 0x50, 0xfc, 0xe3, 0x45, 0x18, 0xab, 0x05, 0xae, 0xb2, 0x57, 0xfe, 0xf5, 0x07, 0xb1, + 0x57, 0xce, 0x8d, 0xf0, 0xaf, 0x51, 0x66, 0x96, 0x56, 0xd2, 0xc9, 0xf2, 0x2f, 0x98, 0xd9, 0xf2, + 0x1d, 0xe2, 0x6d, 0xef, 0xc4, 0xc4, 0x4d, 0x7f, 0xce, 0xc9, 0x99, 0x2d, 0xff, 0x77, 0x0b, 0xa6, + 0x52, 0xad, 0xa3, 0x26, 0x4c, 0x34, 0x75, 0xc1, 0xa4, 0x58, 0xa7, 0x0f, 0x24, 0xd3, 0x14, 0x66, + 0x9f, 0x5a, 0x11, 0x36, 0x89, 0xa3, 0x05, 0x00, 0xa5, 0xa9, 0x93, 0x12, 0x30, 0xc6, 0xf5, 0x2b, + 0x55, 0x5e, 0x84, 0x35, 0x0c, 0xf4, 0x12, 0x8c, 0xc5, 0x41, 0x3b, 0x68, 0x06, 0xdb, 0xfb, 0xd7, + 0x89, 0x0c, 0x5d, 0xa4, 0x8c, 0xb9, 0x36, 0x12, 0x10, 0xd6, 0xf1, 0xec, 0x9f, 0x2c, 0xf2, 0x0f, + 0xf5, 0x63, 0xef, 0x83, 0x35, 0xf9, 0xfe, 0x5e, 0x93, 0x5f, 0xb1, 0x60, 0x9a, 0xb6, 0xce, 0xcc, + 0x45, 0xe4, 0x65, 0xab, 0x82, 0x06, 0x5b, 0x3d, 0x82, 0x06, 0x5f, 0xa2, 0x67, 0x97, 0x1b, 0x74, + 0x62, 0x21, 0x41, 0xd3, 0x0e, 0x27, 0x5a, 0x8a, 0x05, 0x54, 0xe0, 0x91, 0x30, 0x14, 0x3e, 0x6e, + 0x3a, 0x1e, 0x09, 0x43, 0x2c, 0xa0, 0x32, 0xa6, 0xf0, 0x50, 0x76, 0x4c, 0x61, 0x1e, 0x88, 0x51, + 0x18, 0x16, 0x08, 0xb6, 0x47, 0x0b, 0xc4, 0x28, 0x2d, 0x0e, 0x12, 0x1c, 0xfb, 0xe7, 0x8a, 0x30, + 0x5e, 0x0b, 0xdc, 0x44, 0x57, 0xf6, 0xa2, 0xa1, 0x2b, 0xbb, 0x98, 0xd2, 0x95, 0x4d, 0xeb, 0xb8, + 0x1f, 0x68, 0xc6, 0xbe, 0x56, 0x9a, 0xb1, 0x7f, 0x66, 0xb1, 0x59, 0xab, 0xac, 0xd7, 0xb9, 0xf5, + 0x11, 0x7a, 0x0e, 0xc6, 0xd8, 0x81, 0xc4, 0x9c, 0x2a, 0xa5, 0x02, 0x89, 0xe5, 0x50, 0x5a, 0x4f, + 0x8a, 0xb1, 0x8e, 0x83, 0x2e, 0x43, 0x29, 0x22, 0x4e, 0xd8, 0xd8, 0x51, 0x67, 0x9c, 0xd0, 0xf6, + 0xf0, 0x32, 0xac, 0xa0, 0xe8, 0x8d, 0x24, 0x06, 0x60, 0x31, 0xdf, 0x49, 0x4b, 0xef, 0x0f, 0xdf, + 0x22, 0xf9, 0x81, 0xff, 0xec, 0x3b, 0x80, 0xba, 0xf1, 0x07, 0x08, 0x7e, 0x35, 0x6f, 0x06, 0xbf, + 0x2a, 0x77, 0x05, 0xbe, 0xfa, 0x33, 0x0b, 0x26, 0x6b, 0x81, 0x4b, 0xb7, 0xee, 0xd7, 0xd3, 0x3e, + 0xd5, 0x03, 0xa0, 0x8e, 0xf4, 0x08, 0x80, 0xfa, 0x04, 0x0c, 0xd7, 0x02, 0xb7, 0x5a, 0xeb, 0xe5, + 0xdc, 0x6c, 0xff, 0x5d, 0x0b, 0x46, 0x6b, 0x81, 0x7b, 0x02, 0xc2, 0xf9, 0x4f, 0x9a, 0xc2, 0xf9, + 0x47, 0x72, 0xd6, 0x4d, 0x8e, 0x3c, 0xfe, 0x17, 0x8a, 0x30, 0x41, 0xfb, 0x19, 0x6c, 0xcb, 0xa9, + 0x34, 0x86, 0xcd, 0x1a, 0x60, 0xd8, 0x28, 0x2f, 0x1c, 0x34, 0x9b, 0xc1, 0xdd, 0xf4, 0xb4, 0xae, + 0xb2, 0x52, 0x2c, 0xa0, 0xe8, 0x19, 0x28, 0xb5, 0x43, 0xb2, 0xe7, 0x05, 0x82, 0xc9, 0xd4, 0x54, + 0x1d, 0x35, 0x51, 0x8e, 0x15, 0x06, 0x7d, 0x9c, 0x45, 0x9e, 0xdf, 0x20, 0x75, 0xd2, 0x08, 0x7c, + 0x97, 0xcb, 0xaf, 0x8b, 0x22, 0x6f, 0x80, 0x56, 0x8e, 0x0d, 0x2c, 0x74, 0x07, 0xca, 0xec, 0x3f, + 0x3b, 0x76, 0x8e, 0x9e, 0x4e, 0x52, 0xa4, 0x17, 0x13, 0x04, 0x70, 0x42, 0x0b, 0x3d, 0x0f, 0x10, + 0xcb, 0x10, 0xd9, 0x91, 0x08, 0x74, 0xa4, 0x18, 0x72, 0x15, 0x3c, 0x3b, 0xc2, 0x1a, 0x16, 0x7a, + 0x1a, 0xca, 0xb1, 0xe3, 0x35, 0x6f, 0x78, 0x3e, 0x89, 0x98, 0x5c, 0xba, 0x28, 0xb3, 0x7c, 0x89, + 0x42, 0x9c, 0xc0, 0x29, 0x43, 0xc4, 0xa2, 0x00, 0xf0, 0x64, 0xb4, 0x25, 0x86, 0xcd, 0x18, 0xa2, + 0x1b, 0xaa, 0x14, 0x6b, 0x18, 0xf6, 0x2b, 0x70, 0xa6, 0x16, 0xb8, 0xb5, 0x20, 0x8c, 0x57, 0x83, + 0xf0, 0xae, 0x13, 0xba, 0x72, 0xfe, 0xe6, 0x65, 0x72, 0x10, 0x7a, 0x40, 0x0d, 0xf3, 0xed, 0x6b, + 0xa4, 0xa8, 0x7a, 0x81, 0xb1, 0x44, 0x47, 0xf4, 0x11, 0x69, 0xb0, 0xcb, 0x59, 0xa5, 0x81, 0xb8, + 0xea, 0xc4, 0x04, 0xdd, 0x64, 0xb9, 0x6a, 0x93, 0x7b, 0x4a, 0x54, 0x7f, 0x4a, 0xcb, 0x55, 0x9b, + 0x00, 0x33, 0x2f, 0x36, 0xb3, 0xbe, 0xfd, 0x33, 0x43, 0xec, 0xc8, 0x4a, 0xa5, 0x12, 0x40, 0x9f, + 0x83, 0xc9, 0x88, 0xdc, 0xf0, 0xfc, 0xce, 0x3d, 0xf9, 0x52, 0xef, 0xe1, 0xe5, 0x53, 0x5f, 0xd1, + 0x31, 0xb9, 0xbc, 0xcf, 0x2c, 0xc3, 0x29, 0x6a, 0xa8, 0x05, 0x93, 0x77, 0x3d, 0xdf, 0x0d, 0xee, + 0x46, 0x92, 0x7e, 0x29, 0x5f, 0xec, 0x77, 0x87, 0x63, 0xa6, 0xfa, 0x68, 0x34, 0x77, 0xc7, 0x20, + 0x86, 0x53, 0xc4, 0xe9, 0xb2, 0x08, 0x3b, 0xfe, 0x62, 0x74, 0x2b, 0x22, 0xa1, 0xc8, 0x3a, 0xcc, + 0x96, 0x05, 0x96, 0x85, 0x38, 0x81, 0xd3, 0x65, 0xc1, 0xfe, 0x5c, 0x0d, 0x83, 0x0e, 0x0f, 0x2f, + 0x2f, 0x96, 0x05, 0x56, 0xa5, 0x58, 0xc3, 0xa0, 0xdb, 0x86, 0xfd, 0x5b, 0x0f, 0x7c, 0x1c, 0x04, + 0xb1, 0xdc, 0x68, 0x2c, 0xcf, 0xa5, 0x56, 0x8e, 0x0d, 0x2c, 0xb4, 0x0a, 0x28, 0xea, 0xb4, 0xdb, + 0x4d, 0x66, 0x3d, 0xe0, 0x34, 0x19, 0x29, 0xae, 0xb9, 0x2d, 0xf2, 0xe0, 0x99, 0xf5, 0x2e, 0x28, + 0xce, 0xa8, 0x41, 0x4f, 0xd0, 0x2d, 0xd1, 0xd5, 0x61, 0xd6, 0x55, 0xae, 0x22, 0xa8, 0xf3, 0x7e, + 0x4a, 0x18, 0x5a, 0x81, 0xd1, 0x68, 0x3f, 0x6a, 0xc4, 0x22, 0x0a, 0x58, 0x4e, 0xb6, 0x98, 0x3a, + 0x43, 0xd1, 0x92, 0x95, 0xf1, 0x2a, 0x58, 0xd6, 0xb5, 0xbf, 0x8d, 0x5d, 0xd0, 0x2c, 0x47, 0x6d, + 0xdc, 0x09, 0x09, 0x6a, 0xc1, 0x44, 0x9b, 0xad, 0x30, 0x11, 0x2f, 0x5d, 0x2c, 0x93, 0x17, 0x07, + 0x7c, 0x69, 0xdf, 0xa5, 0xe7, 0x9a, 0x92, 0x84, 0xb1, 0x27, 0x4c, 0x4d, 0x27, 0x87, 0x4d, 0xea, + 0xf6, 0x57, 0xce, 0xb2, 0x23, 0xbe, 0xce, 0x9f, 0xcf, 0xa3, 0xc2, 0xdc, 0x59, 0xbc, 0x15, 0xe6, + 0xf2, 0xe5, 0x38, 0xc9, 0x17, 0x09, 0x93, 0x69, 0x2c, 0xeb, 0xa2, 0xcf, 0xc2, 0x24, 0x65, 0xbd, + 0xb5, 0x7c, 0x11, 0xa7, 0xf3, 0xfd, 0xd2, 0x93, 0x34, 0x11, 0x5a, 0x2e, 0x05, 0xbd, 0x32, 0x4e, + 0x11, 0x43, 0x6f, 0x30, 0xc5, 0xbc, 0x99, 0x8a, 0xa2, 0x0f, 0x69, 0x5d, 0x07, 0x2f, 0xc9, 0x6a, + 0x44, 0xf2, 0xd2, 0x5c, 0xd8, 0x0f, 0x37, 0xcd, 0x05, 0xba, 0x01, 0x13, 0x22, 0x51, 0xab, 0x10, + 0x3f, 0x16, 0x0d, 0xf1, 0xd2, 0x04, 0xd6, 0x81, 0x87, 0xe9, 0x02, 0x6c, 0x56, 0x46, 0xdb, 0x70, + 0x5e, 0xcb, 0xb5, 0x72, 0x35, 0x74, 0x98, 0x8e, 0xd8, 0x63, 0x27, 0x91, 0x76, 0xf9, 0x3c, 0x7e, + 0xff, 0x60, 0xfe, 0xfc, 0x46, 0x2f, 0x44, 0xdc, 0x9b, 0x0e, 0xba, 0x09, 0x67, 0xb8, 0x57, 0x65, + 0x85, 0x38, 0x6e, 0xd3, 0xf3, 0xd5, 0xed, 0xc6, 0x77, 0xcb, 0xb9, 0xfb, 0x07, 0xf3, 0x67, 0x16, + 0xb3, 0x10, 0x70, 0x76, 0x3d, 0xf4, 0x49, 0x28, 0xbb, 0x7e, 0x24, 0xc6, 0x60, 0xc4, 0x48, 0x67, + 0x53, 0xae, 0xac, 0xd7, 0xd5, 0xf7, 0x27, 0x7f, 0x70, 0x52, 0x01, 0x6d, 0x73, 0x11, 0xa4, 0x7a, + 0xf1, 0x8f, 0x76, 0xc5, 0x83, 0x49, 0xcb, 0x8e, 0x0c, 0xbf, 0x2a, 0x2e, 0x7b, 0x57, 0xd6, 0xc6, + 0x86, 0xcb, 0x95, 0x41, 0x18, 0xbd, 0x0e, 0x88, 0xb2, 0xc4, 0x5e, 0x83, 0x2c, 0x36, 0x58, 0x30, + 0x7e, 0x26, 0xb1, 0x2d, 0x19, 0xde, 0x29, 0xa8, 0xde, 0x85, 0x81, 0x33, 0x6a, 0xa1, 0x6b, 0xf4, + 0x36, 0xd0, 0x4b, 0x85, 0xd5, 0xb4, 0x4a, 0x3e, 0x56, 0x21, 0xed, 0x90, 0x34, 0x9c, 0x98, 0xb8, + 0x26, 0x45, 0x9c, 0xaa, 0x87, 0x5c, 0x78, 0xcc, 0xe9, 0xc4, 0x01, 0x93, 0xee, 0x9a, 0xa8, 0x1b, + 0xc1, 0x2e, 0xf1, 0x99, 0x62, 0xa5, 0xb4, 0x74, 0xf1, 0xfe, 0xc1, 0xfc, 0x63, 0x8b, 0x3d, 0xf0, + 0x70, 0x4f, 0x2a, 0x94, 0xed, 0x51, 0xa9, 0x43, 0xc1, 0x0c, 0x73, 0x93, 0x91, 0x3e, 0xf4, 0x25, + 0x18, 0xdb, 0x09, 0xa2, 0x78, 0x9d, 0xc4, 0x77, 0x83, 0x70, 0x57, 0x04, 0x2b, 0x4c, 0x02, 0xdc, + 0x26, 0x20, 0xac, 0xe3, 0xd1, 0x77, 0x0d, 0x53, 0xfb, 0x57, 0x2b, 0x4c, 0xe3, 0x5a, 0x4a, 0xce, + 0x98, 0x6b, 0xbc, 0x18, 0x4b, 0xb8, 0x44, 0xad, 0xd6, 0x96, 0x99, 0xf6, 0x34, 0x85, 0x5a, 0xad, + 0x2d, 0x63, 0x09, 0xa7, 0xcb, 0x35, 0xda, 0x71, 0x42, 0x52, 0x0b, 0x83, 0x06, 0x89, 0xb4, 0xb0, + 0xca, 0x8f, 0xf2, 0x50, 0x8c, 0x74, 0xb9, 0xd6, 0xb3, 0x10, 0x70, 0x76, 0x3d, 0x44, 0xba, 0xf3, + 0x0c, 0x4d, 0xe6, 0x8b, 0xbd, 0xbb, 0x59, 0x81, 0x01, 0x53, 0x0d, 0xf9, 0x30, 0xad, 0x32, 0x1c, + 0xf1, 0xe0, 0x8b, 0xd1, 0xec, 0x14, 0x5b, 0xdb, 0x83, 0x47, 0x6e, 0x54, 0x8a, 0x84, 0x6a, 0x8a, + 0x12, 0xee, 0xa2, 0x6d, 0x44, 0x32, 0x9a, 0xee, 0x9b, 0x4b, 0xf6, 0x0a, 0x94, 0xa3, 0xce, 0xa6, + 0x1b, 0xb4, 0x1c, 0xcf, 0x67, 0xda, 0x53, 0x8d, 0xc1, 0xae, 0x4b, 0x00, 0x4e, 0x70, 0xd0, 0x2a, + 0x94, 0x1c, 0xa9, 0x25, 0x40, 0xf9, 0x01, 0x30, 0x94, 0x6e, 0x80, 0xfb, 0x84, 0x4b, 0xbd, 0x80, + 0xaa, 0x8b, 0x5e, 0x85, 0x09, 0xe1, 0x15, 0x28, 0x92, 0xeb, 0x9d, 0x32, 0x3d, 0x37, 0xea, 0x3a, + 0x10, 0x9b, 0xb8, 0xe8, 0x16, 0x8c, 0xc5, 0x41, 0x93, 0xb9, 0x1f, 0x50, 0x0e, 0xe9, 0x6c, 0x7e, + 0x10, 0xad, 0x0d, 0x85, 0xa6, 0x0b, 0xe8, 0x54, 0x55, 0xac, 0xd3, 0x41, 0x1b, 0x7c, 0xbd, 0xb3, + 0xf0, 0xc2, 0x24, 0x9a, 0x7d, 0x24, 0xff, 0x4e, 0x52, 0x51, 0x88, 0xcd, 0xed, 0x20, 0x6a, 0x62, + 0x9d, 0x0c, 0xba, 0x0a, 0x33, 0xed, 0xd0, 0x0b, 0xd8, 0x9a, 0x50, 0x0a, 0xa2, 0x59, 0x33, 0x29, + 0x4a, 0x2d, 0x8d, 0x80, 0xbb, 0xeb, 0x30, 0xa7, 0x4e, 0x51, 0x38, 0x7b, 0x8e, 0x27, 0xd3, 0xe5, + 0xef, 0x15, 0x5e, 0x86, 0x15, 0x14, 0xad, 0xb1, 0x93, 0x98, 0x3f, 0xb5, 0x67, 0xe7, 0xf2, 0x63, + 0x6e, 0xe8, 0x4f, 0x72, 0xce, 0xf7, 0xa9, 0xbf, 0x38, 0xa1, 0x80, 0x5c, 0x2d, 0x51, 0x1b, 0x65, + 0xb6, 0xa3, 0xd9, 0xc7, 0x7a, 0xd8, 0x5e, 0xa5, 0x38, 0xf3, 0x84, 0x21, 0x30, 0x8a, 0x23, 0x9c, + 0xa2, 0x89, 0xbe, 0x09, 0xa6, 0x45, 0x8c, 0xaf, 0x64, 0x98, 0xce, 0x27, 0x46, 0x9d, 0x38, 0x05, + 0xc3, 0x5d, 0xd8, 0x3c, 0xec, 0xba, 0xb3, 0xd9, 0x24, 0xe2, 0xe8, 0xbb, 0xe1, 0xf9, 0xbb, 0xd1, + 0xec, 0x05, 0x76, 0x3e, 0x88, 0xb0, 0xeb, 0x69, 0x28, 0xce, 0xa8, 0x81, 0x36, 0x60, 0xba, 0x1d, + 0x12, 0xd2, 0x62, 0x3c, 0xb2, 0xb8, 0xcf, 0xe6, 0xb9, 0x4f, 0x33, 0xed, 0x49, 0x2d, 0x05, 0x3b, + 0xcc, 0x28, 0xc3, 0x5d, 0x14, 0xd0, 0x5d, 0x28, 0x05, 0x7b, 0x24, 0xdc, 0x21, 0x8e, 0x3b, 0x7b, + 0xb1, 0x87, 0x91, 0xb1, 0xb8, 0xdc, 0x6e, 0x0a, 0xdc, 0x94, 0x52, 0x59, 0x16, 0xf7, 0x57, 0x2a, + 0xcb, 0xc6, 0xd0, 0x0f, 0x58, 0x70, 0x4e, 0xca, 0xa1, 0xeb, 0x6d, 0x3a, 0xea, 0xcb, 0x81, 0x1f, + 0xc5, 0x21, 0xf7, 0xc2, 0x7d, 0x3c, 0xdf, 0x31, 0x75, 0x23, 0xa7, 0x92, 0x92, 0xf6, 0x9d, 0xcb, + 0xc3, 0x88, 0x70, 0x7e, 0x8b, 0x73, 0xdf, 0x08, 0x33, 0x5d, 0x37, 0xf7, 0x51, 0x32, 0x41, 0xcc, + 0xed, 0xc2, 0x84, 0x31, 0x3a, 0x0f, 0x55, 0x9f, 0xf8, 0xaf, 0x47, 0xa1, 0xac, 0x74, 0x4d, 0xe8, + 0x8a, 0xa9, 0x42, 0x3c, 0x97, 0x56, 0x21, 0x96, 0xe8, 0x6b, 0x56, 0xd7, 0x1a, 0x6e, 0x64, 0xc4, + 0x3c, 0xca, 0xdb, 0x8b, 0x83, 0xfb, 0xb2, 0x6a, 0xa2, 0xc3, 0xe2, 0xc0, 0xba, 0xc8, 0xa1, 0x9e, + 0xd2, 0xc8, 0xab, 0x30, 0xe3, 0x07, 0x8c, 0x5d, 0x24, 0xae, 0xe4, 0x05, 0xd8, 0x95, 0x5f, 0xd6, + 0x83, 0x08, 0xa4, 0x10, 0x70, 0x77, 0x1d, 0xda, 0x20, 0xbf, 0xb3, 0xd3, 0xe2, 0x4f, 0x7e, 0xa5, + 0x63, 0x01, 0x45, 0x4f, 0xc0, 0x70, 0x3b, 0x70, 0xab, 0x35, 0xc1, 0x2a, 0x6a, 0x59, 0x41, 0xdd, + 0x6a, 0x0d, 0x73, 0x18, 0x5a, 0x84, 0x11, 0xf6, 0x23, 0x9a, 0x1d, 0xcf, 0xf7, 0x16, 0x67, 0x35, + 0xb4, 0x3c, 0x1b, 0xac, 0x02, 0x16, 0x15, 0x99, 0x18, 0x86, 0xf2, 0xd7, 0x4c, 0x0c, 0x33, 0xfa, + 0x80, 0x62, 0x18, 0x49, 0x00, 0x27, 0xb4, 0xd0, 0x3d, 0x38, 0x63, 0xbc, 0x69, 0xf8, 0x12, 0x21, + 0x91, 0x70, 0x58, 0x7d, 0xa2, 0xe7, 0x63, 0x46, 0xe8, 0x2e, 0xcf, 0x8b, 0x4e, 0x9f, 0xa9, 0x66, + 0x51, 0xc2, 0xd9, 0x0d, 0xa0, 0x26, 0xcc, 0x34, 0xba, 0x5a, 0x2d, 0x0d, 0xde, 0xaa, 0x9a, 0xd0, + 0xee, 0x16, 0xbb, 0x09, 0xa3, 0x57, 0xa1, 0xf4, 0x4e, 0x10, 0xb1, 0x63, 0x56, 0xb0, 0xb7, 0xd2, + 0xdb, 0xb1, 0xf4, 0xc6, 0xcd, 0x3a, 0x2b, 0x3f, 0x3c, 0x98, 0x1f, 0xab, 0x05, 0xae, 0xfc, 0x8b, + 0x55, 0x05, 0xf4, 0x3d, 0x16, 0xcc, 0x75, 0x3f, 0x9a, 0x54, 0xa7, 0x27, 0x06, 0xef, 0xb4, 0x2d, + 0x1a, 0x9d, 0x5b, 0xc9, 0x25, 0x87, 0x7b, 0x34, 0x65, 0xff, 0x32, 0xd7, 0x33, 0x0a, 0x6d, 0x04, + 0x89, 0x3a, 0xcd, 0x93, 0xc8, 0x4b, 0xb8, 0x62, 0x28, 0x4a, 0x1e, 0x58, 0x97, 0xfd, 0x6b, 0x16, + 0xd3, 0x65, 0x6f, 0x90, 0x56, 0xbb, 0xe9, 0xc4, 0x27, 0xe1, 0x2c, 0xf7, 0x06, 0x94, 0x62, 0xd1, + 0x5a, 0xaf, 0x54, 0x8a, 0x5a, 0xa7, 0x98, 0x3e, 0x5f, 0x31, 0x9b, 0xb2, 0x14, 0x2b, 0x32, 0xf6, + 0x3f, 0xe6, 0x33, 0x20, 0x21, 0x27, 0x20, 0x8f, 0xae, 0x98, 0xf2, 0xe8, 0xf9, 0x3e, 0x5f, 0x90, + 0x23, 0x97, 0xfe, 0x47, 0x66, 0xbf, 0x99, 0x90, 0xe5, 0xfd, 0x6e, 0x44, 0x61, 0xff, 0x90, 0x05, + 0xa7, 0xb3, 0xac, 0x0e, 0xe9, 0x03, 0x81, 0x8b, 0x78, 0x94, 0x51, 0x89, 0x1a, 0xc1, 0xdb, 0xa2, + 0x1c, 0x2b, 0x8c, 0x81, 0xb3, 0x14, 0x1d, 0x2d, 0x6a, 0xe7, 0x4d, 0x98, 0xa8, 0x85, 0x44, 0xbb, + 0xd0, 0x5e, 0xe3, 0xde, 0xaf, 0xbc, 0x3f, 0xcf, 0x1c, 0xd9, 0xf3, 0xd5, 0xfe, 0xe9, 0x02, 0x9c, + 0xe6, 0x5a, 0xe1, 0xc5, 0xbd, 0xc0, 0x73, 0x6b, 0x81, 0x2b, 0x32, 0x4c, 0xbd, 0x09, 0xe3, 0x6d, + 0x4d, 0x2e, 0xd7, 0x2b, 0x02, 0x9d, 0x2e, 0xbf, 0x4b, 0x24, 0x09, 0x7a, 0x29, 0x36, 0x68, 0x21, + 0x17, 0xc6, 0xc9, 0x9e, 0xd7, 0x50, 0xaa, 0xc5, 0xc2, 0x91, 0x2f, 0x17, 0xd5, 0xca, 0x8a, 0x46, + 0x07, 0x1b, 0x54, 0x1f, 0x42, 0xd2, 0x51, 0xfb, 0x87, 0x2d, 0x78, 0x24, 0x27, 0x5e, 0x1d, 0x6d, + 0xee, 0x2e, 0xd3, 0xbf, 0x8b, 0xfc, 0x85, 0xaa, 0x39, 0xae, 0x95, 0xc7, 0x02, 0x8a, 0x3e, 0x0d, + 0xc0, 0xb5, 0xea, 0xf4, 0x85, 0xda, 0x2f, 0xb0, 0x97, 0x11, 0x93, 0x48, 0x0b, 0x2f, 0x23, 0xeb, + 0x63, 0x8d, 0x96, 0xfd, 0x13, 0x45, 0x18, 0xe6, 0x99, 0x97, 0x57, 0x61, 0x74, 0x87, 0xc7, 0xdd, + 0x1f, 0x24, 0xc4, 0x7f, 0x22, 0x3b, 0xe0, 0x05, 0x58, 0x56, 0x46, 0x6b, 0x70, 0x8a, 0xe7, 0x2d, + 0x68, 0x56, 0x48, 0xd3, 0xd9, 0x97, 0x82, 0x2e, 0x9e, 0xf3, 0x4f, 0x09, 0xfc, 0xaa, 0xdd, 0x28, + 0x38, 0xab, 0x1e, 0x7a, 0x0d, 0x26, 0xe9, 0xc3, 0x23, 0xe8, 0xc4, 0x92, 0x12, 0xcf, 0x58, 0xa0, + 0x5e, 0x3a, 0x1b, 0x06, 0x14, 0xa7, 0xb0, 0xe9, 0xdb, 0xb7, 0xdd, 0x25, 0xd2, 0x1b, 0x4e, 0xde, + 0xbe, 0xa6, 0x18, 0xcf, 0xc4, 0x65, 0xe6, 0x86, 0x1d, 0x66, 0x5c, 0xb9, 0xb1, 0x13, 0x92, 0x68, + 0x27, 0x68, 0xba, 0x8c, 0xd1, 0x1a, 0xd6, 0xcc, 0x0d, 0x53, 0x70, 0xdc, 0x55, 0x83, 0x52, 0xd9, + 0x72, 0xbc, 0x66, 0x27, 0x24, 0x09, 0x95, 0x11, 0x93, 0xca, 0x6a, 0x0a, 0x8e, 0xbb, 0x6a, 0xd0, + 0x75, 0x74, 0xa6, 0x16, 0x06, 0xf4, 0xf0, 0x92, 0x31, 0x38, 0x94, 0x0d, 0xe9, 0xa8, 0x74, 0x17, + 0xec, 0x11, 0xae, 0x4a, 0x58, 0xd9, 0x71, 0x0a, 0x86, 0x02, 0xb9, 0x2e, 0x1c, 0x05, 0x25, 0x15, + 0xf4, 0x1c, 0x8c, 0x89, 0x68, 0xf4, 0xcc, 0xd4, 0x91, 0x4f, 0x1d, 0x53, 0x78, 0x57, 0x92, 0x62, + 0xac, 0xe3, 0xd8, 0xdf, 0x5b, 0x80, 0x53, 0x19, 0xb6, 0xea, 0xfc, 0xa8, 0xda, 0xf6, 0xa2, 0x58, + 0xe5, 0x35, 0xd3, 0x8e, 0x2a, 0x5e, 0x8e, 0x15, 0x06, 0xdd, 0x0f, 0xfc, 0x30, 0x4c, 0x1f, 0x80, + 0xc2, 0x16, 0x54, 0x40, 0x8f, 0x98, 0x21, 0xec, 0x22, 0x0c, 0x75, 0x22, 0x22, 0x03, 0xcd, 0xa9, + 0xf3, 0x9b, 0x69, 0x5c, 0x18, 0x84, 0xb2, 0xc7, 0xdb, 0x4a, 0x79, 0xa1, 0xb1, 0xc7, 0x5c, 0x7d, + 0xc1, 0x61, 0xb4, 0x73, 0x31, 0xf1, 0x1d, 0x3f, 0x16, 0x4c, 0x74, 0x12, 0x31, 0x89, 0x95, 0x62, + 0x01, 0xb5, 0xbf, 0x54, 0x84, 0x73, 0xb9, 0xde, 0x2b, 0xb4, 0xeb, 0xad, 0xc0, 0xf7, 0xe2, 0x40, + 0x59, 0x12, 0xf0, 0x28, 0x49, 0xa4, 0xbd, 0xb3, 0x26, 0xca, 0xb1, 0xc2, 0x40, 0x97, 0x60, 0x98, + 0x09, 0x9d, 0xba, 0x32, 0xbc, 0x2d, 0x55, 0x78, 0xd4, 0x0c, 0x0e, 0x1e, 0x38, 0x7b, 0xe6, 0x13, + 0x30, 0xd4, 0x0e, 0x82, 0x66, 0xfa, 0xd0, 0xa2, 0xdd, 0x0d, 0x82, 0x26, 0x66, 0x40, 0xf4, 0x11, + 0x31, 0x5e, 0x29, 0xd5, 0x39, 0x76, 0xdc, 0x20, 0xd2, 0x06, 0xed, 0x29, 0x18, 0xdd, 0x25, 0xfb, + 0xa1, 0xe7, 0x6f, 0xa7, 0x4d, 0x2a, 0xae, 0xf3, 0x62, 0x2c, 0xe1, 0x66, 0xb2, 0x9e, 0xd1, 0xe3, + 0x4e, 0x7b, 0x59, 0xea, 0x7b, 0x05, 0x7e, 0x5f, 0x11, 0xa6, 0xf0, 0x52, 0xe5, 0x83, 0x89, 0xb8, + 0xd5, 0x3d, 0x11, 0xc7, 0x9d, 0xf6, 0xb2, 0xff, 0x6c, 0xfc, 0x82, 0x05, 0x53, 0x2c, 0x26, 0xbe, + 0x08, 0xaf, 0xe3, 0x05, 0xfe, 0x09, 0xb0, 0x78, 0x4f, 0xc0, 0x70, 0x48, 0x1b, 0x4d, 0xa7, 0x76, + 0x63, 0x3d, 0xc1, 0x1c, 0x86, 0x1e, 0x83, 0x21, 0xd6, 0x05, 0x3a, 0x79, 0xe3, 0x3c, 0x2b, 0x4e, + 0xc5, 0x89, 0x1d, 0xcc, 0x4a, 0x59, 0xcc, 0x08, 0x4c, 0xda, 0x4d, 0x8f, 0x77, 0x3a, 0x51, 0x09, + 0xbe, 0x3f, 0x62, 0x46, 0x64, 0x76, 0xed, 0xbd, 0xc5, 0x8c, 0xc8, 0x26, 0xd9, 0xfb, 0xf9, 0xf4, + 0x87, 0x05, 0xb8, 0x90, 0x59, 0x6f, 0xe0, 0x98, 0x11, 0xbd, 0x6b, 0x3f, 0xcc, 0xd8, 0xe9, 0xc5, + 0x13, 0x34, 0x58, 0x1b, 0x1a, 0x94, 0xc3, 0x1c, 0x1e, 0x20, 0x94, 0x43, 0xe6, 0x90, 0xbd, 0x4f, + 0x42, 0x39, 0x64, 0xf6, 0x2d, 0xe7, 0xf9, 0xf7, 0xe7, 0x85, 0x9c, 0x6f, 0x61, 0x0f, 0xc1, 0xcb, + 0xf4, 0x9c, 0x61, 0xc0, 0x48, 0x70, 0xcc, 0xe3, 0xfc, 0x8c, 0xe1, 0x65, 0x58, 0x41, 0xd1, 0x22, + 0x4c, 0xb5, 0x3c, 0x9f, 0x1e, 0x3e, 0xfb, 0x26, 0xe3, 0xa7, 0x22, 0xed, 0xac, 0x99, 0x60, 0x9c, + 0xc6, 0x47, 0x9e, 0x16, 0xe6, 0xa1, 0x90, 0x9f, 0x2c, 0x39, 0xb7, 0xb7, 0x0b, 0xa6, 0xba, 0x54, + 0x8d, 0x62, 0x46, 0xc8, 0x87, 0x35, 0xed, 0xfd, 0x5f, 0x1c, 0xfc, 0xfd, 0x3f, 0x9e, 0xfd, 0xf6, + 0x9f, 0x7b, 0x15, 0x26, 0x1e, 0x58, 0xe0, 0x6b, 0x7f, 0xa5, 0x08, 0x8f, 0xf6, 0xd8, 0xf6, 0xfc, + 0xac, 0x37, 0xe6, 0x40, 0x3b, 0xeb, 0xbb, 0xe6, 0xa1, 0x06, 0xa7, 0xb7, 0x3a, 0xcd, 0xe6, 0x3e, + 0xb3, 0x09, 0x27, 0xae, 0xc4, 0x10, 0x3c, 0xe5, 0x63, 0x32, 0x0f, 0xd1, 0x6a, 0x06, 0x0e, 0xce, + 0xac, 0x49, 0x19, 0x7a, 0x7a, 0x93, 0xec, 0x2b, 0x52, 0x29, 0x86, 0x1e, 0xeb, 0x40, 0x6c, 0xe2, + 0xa2, 0xab, 0x30, 0xe3, 0xec, 0x39, 0x1e, 0x0f, 0x96, 0x29, 0x09, 0x70, 0x8e, 0x5e, 0xc9, 0xe9, + 0x16, 0xd3, 0x08, 0xb8, 0xbb, 0x0e, 0x7a, 0x1d, 0x50, 0x20, 0x92, 0xbd, 0x5f, 0x25, 0xbe, 0xd0, + 0x6a, 0xb1, 0xb9, 0x2b, 0x26, 0x47, 0xc2, 0xcd, 0x2e, 0x0c, 0x9c, 0x51, 0x2b, 0x15, 0x36, 0x61, + 0x24, 0x3f, 0x6c, 0x42, 0xef, 0x73, 0xb1, 0x6f, 0xd8, 0xfe, 0xff, 0x62, 0xd1, 0xeb, 0x8b, 0x33, + 0xf9, 0x66, 0xf4, 0xaf, 0x57, 0x99, 0x41, 0x17, 0x97, 0xe1, 0x69, 0x11, 0x0c, 0xce, 0x68, 0x06, + 0x5d, 0x09, 0x10, 0x9b, 0xb8, 0x7c, 0x41, 0x44, 0x89, 0xe3, 0x9c, 0xc1, 0xe2, 0x8b, 0x10, 0x25, + 0x0a, 0x03, 0x7d, 0x06, 0x46, 0x5d, 0x6f, 0xcf, 0x8b, 0x82, 0x50, 0xac, 0xf4, 0x23, 0xaa, 0x0b, + 0x92, 0x73, 0xb0, 0xc2, 0xc9, 0x60, 0x49, 0xcf, 0xfe, 0xbe, 0x02, 0x4c, 0xc8, 0x16, 0xdf, 0xe8, + 0x04, 0xb1, 0x73, 0x02, 0xd7, 0xf2, 0x55, 0xe3, 0x5a, 0xfe, 0x48, 0xaf, 0x38, 0x2d, 0xac, 0x4b, + 0xb9, 0xd7, 0xf1, 0xcd, 0xd4, 0x75, 0xfc, 0x64, 0x7f, 0x52, 0xbd, 0xaf, 0xe1, 0x7f, 0x62, 0xc1, + 0x8c, 0x81, 0x7f, 0x02, 0xb7, 0xc1, 0xaa, 0x79, 0x1b, 0x3c, 0xde, 0xf7, 0x1b, 0x72, 0x6e, 0x81, + 0xef, 0x2a, 0xa6, 0xfa, 0xce, 0x4e, 0xff, 0x77, 0x60, 0x68, 0xc7, 0x09, 0xdd, 0x5e, 0x81, 0xa9, + 0xbb, 0x2a, 0x2d, 0x5c, 0x73, 0x42, 0xa1, 0xd6, 0x7b, 0x46, 0xe5, 0x2a, 0x76, 0xc2, 0xfe, 0x2a, + 0x3d, 0xd6, 0x14, 0x7a, 0x05, 0x46, 0xa2, 0x46, 0xd0, 0x56, 0x56, 0xdc, 0x17, 0x79, 0x1e, 0x63, + 0x5a, 0x72, 0x78, 0x30, 0x8f, 0xcc, 0xe6, 0x68, 0x31, 0x16, 0xf8, 0xe8, 0x4d, 0x98, 0x60, 0xbf, + 0x94, 0x8d, 0x4d, 0x31, 0x3f, 0x89, 0x4d, 0x5d, 0x47, 0xe4, 0x06, 0x68, 0x46, 0x11, 0x36, 0x49, + 0xcd, 0x6d, 0x43, 0x59, 0x7d, 0xd6, 0x43, 0xd5, 0xc7, 0xfd, 0xfb, 0x22, 0x9c, 0xca, 0x58, 0x73, + 0x28, 0x32, 0x66, 0xe2, 0xb9, 0x01, 0x97, 0xea, 0x7b, 0x9c, 0x8b, 0x88, 0xbd, 0x86, 0x5c, 0xb1, + 0xb6, 0x06, 0x6e, 0xf4, 0x56, 0x44, 0xd2, 0x8d, 0xd2, 0xa2, 0xfe, 0x8d, 0xd2, 0xc6, 0x4e, 0x6c, + 0xa8, 0x69, 0x43, 0xaa, 0xa7, 0x0f, 0x75, 0x4e, 0xff, 0xa4, 0x08, 0xa7, 0xb3, 0x42, 0x47, 0xa1, + 0x6f, 0x4d, 0x25, 0x34, 0x7b, 0x71, 0xd0, 0xa0, 0x53, 0x3c, 0xcb, 0x19, 0x97, 0x01, 0x2f, 0x2d, + 0x98, 0x29, 0xce, 0xfa, 0x0e, 0xb3, 0x68, 0x93, 0x39, 0x85, 0x87, 0x3c, 0x11, 0x9d, 0x3c, 0x3e, + 0x3e, 0x3e, 0x70, 0x07, 0x44, 0x06, 0xbb, 0x28, 0xa5, 0xbf, 0x97, 0xc5, 0xfd, 0xf5, 0xf7, 0xb2, + 0xe5, 0x39, 0x0f, 0xc6, 0xb4, 0xaf, 0x79, 0xa8, 0x33, 0xbe, 0x4b, 0x6f, 0x2b, 0xad, 0xdf, 0x0f, + 0x75, 0xd6, 0x7f, 0xd8, 0x82, 0x94, 0x35, 0xb4, 0x12, 0x8b, 0x59, 0xb9, 0x62, 0xb1, 0x8b, 0x30, + 0x14, 0x06, 0x4d, 0x92, 0xce, 0x1f, 0x86, 0x83, 0x26, 0xc1, 0x0c, 0x42, 0x31, 0xe2, 0x44, 0xd8, + 0x31, 0xae, 0x3f, 0xe4, 0xc4, 0x13, 0xed, 0x09, 0x18, 0x6e, 0x92, 0x3d, 0xd2, 0x4c, 0xa7, 0x79, + 0xb8, 0x41, 0x0b, 0x31, 0x87, 0xd9, 0xbf, 0x30, 0x04, 0xe7, 0x7b, 0x86, 0x55, 0xa0, 0xcf, 0xa1, + 0x6d, 0x27, 0x26, 0x77, 0x9d, 0xfd, 0x74, 0x3c, 0xf6, 0xab, 0xbc, 0x18, 0x4b, 0x38, 0xf3, 0x22, + 0xe1, 0x51, 0x55, 0x53, 0x42, 0x44, 0x11, 0x4c, 0x55, 0x40, 0x4d, 0xa1, 0x54, 0xf1, 0x38, 0x84, + 0x52, 0xcf, 0x03, 0x44, 0x51, 0x93, 0x1b, 0xbe, 0xb8, 0xc2, 0x3d, 0x25, 0x89, 0xbe, 0x5b, 0xbf, + 0x21, 0x20, 0x58, 0xc3, 0x42, 0x15, 0x98, 0x6e, 0x87, 0x41, 0xcc, 0x65, 0xb2, 0x15, 0x6e, 0x1b, + 0x36, 0x6c, 0x7a, 0xb4, 0xd7, 0x52, 0x70, 0xdc, 0x55, 0x03, 0xbd, 0x04, 0x63, 0xc2, 0xcb, 0xbd, + 0x16, 0x04, 0x4d, 0x21, 0x06, 0x52, 0xe6, 0x52, 0xf5, 0x04, 0x84, 0x75, 0x3c, 0xad, 0x1a, 0x13, + 0xf4, 0x8e, 0x66, 0x56, 0xe3, 0xc2, 0x5e, 0x0d, 0x2f, 0x15, 0x46, 0xae, 0x34, 0x50, 0x18, 0xb9, + 0x44, 0x30, 0x56, 0x1e, 0x58, 0xb7, 0x05, 0x7d, 0x45, 0x49, 0x3f, 0x3b, 0x04, 0xa7, 0xc4, 0xc2, + 0x79, 0xd8, 0xcb, 0xe5, 0x56, 0xf7, 0x72, 0x39, 0x0e, 0xd1, 0xd9, 0x07, 0x6b, 0xe6, 0xa4, 0xd7, + 0xcc, 0xf7, 0x5b, 0x60, 0xb2, 0x57, 0xe8, 0xff, 0xcb, 0x4d, 0x68, 0xf1, 0x52, 0x2e, 0xbb, 0xe6, + 0xca, 0x0b, 0xe4, 0x3d, 0xa6, 0xb6, 0xb0, 0xff, 0x93, 0x05, 0x8f, 0xf7, 0xa5, 0x88, 0x56, 0xa0, + 0xcc, 0x78, 0x40, 0xed, 0x75, 0xf6, 0xa4, 0xb2, 0x1d, 0x95, 0x80, 0x1c, 0x96, 0x34, 0xa9, 0x89, + 0x56, 0xba, 0x32, 0x87, 0x3c, 0x95, 0x91, 0x39, 0xe4, 0x8c, 0x31, 0x3c, 0x0f, 0x98, 0x3a, 0xe4, + 0x97, 0x8b, 0x30, 0xc2, 0x57, 0xfc, 0x09, 0x3c, 0xc3, 0x56, 0x85, 0xdc, 0xb6, 0x47, 0x9c, 0x3a, + 0xde, 0x97, 0x85, 0x8a, 0x13, 0x3b, 0x9c, 0x4d, 0x50, 0xb7, 0x55, 0x22, 0xe1, 0x45, 0x9f, 0x03, + 0x88, 0xe2, 0xd0, 0xf3, 0xb7, 0x69, 0x99, 0x88, 0x60, 0xf8, 0xd1, 0x1e, 0xd4, 0xea, 0x0a, 0x99, + 0xd3, 0x4c, 0x76, 0xae, 0x02, 0x60, 0x8d, 0x22, 0x5a, 0x30, 0xee, 0xcb, 0xb9, 0x94, 0xe0, 0x13, + 0x38, 0xd5, 0xe4, 0xf6, 0x9c, 0x7b, 0x19, 0xca, 0x8a, 0x78, 0x3f, 0x29, 0xce, 0xb8, 0xce, 0x5c, + 0x7c, 0x0a, 0xa6, 0x52, 0x7d, 0x3b, 0x92, 0x10, 0xe8, 0x17, 0x2d, 0x98, 0xe2, 0x9d, 0x59, 0xf1, + 0xf7, 0xc4, 0x99, 0xfa, 0x2e, 0x9c, 0x6e, 0x66, 0x9c, 0x6d, 0x62, 0x46, 0x07, 0x3f, 0x0b, 0x95, + 0xd0, 0x27, 0x0b, 0x8a, 0x33, 0xdb, 0x40, 0x97, 0xe9, 0xba, 0xa5, 0x67, 0x97, 0xd3, 0x14, 0xce, + 0x86, 0xe3, 0x7c, 0xcd, 0xf2, 0x32, 0xac, 0xa0, 0xf6, 0x6f, 0x5b, 0x30, 0xc3, 0x7b, 0x7e, 0x9d, + 0xec, 0xab, 0x1d, 0xfe, 0xb5, 0xec, 0xbb, 0x48, 0xe6, 0x53, 0xc8, 0x49, 0xe6, 0xa3, 0x7f, 0x5a, + 0xb1, 0xe7, 0xa7, 0xfd, 0xb4, 0x05, 0x62, 0x85, 0x9c, 0xc0, 0x53, 0xfe, 0x1b, 0xcd, 0xa7, 0xfc, + 0x5c, 0xfe, 0x26, 0xc8, 0x79, 0xc3, 0xff, 0x99, 0x05, 0xd3, 0x1c, 0x21, 0xd1, 0x39, 0x7f, 0x4d, + 0xe7, 0x61, 0x90, 0x94, 0x9f, 0xd7, 0xc9, 0xfe, 0x46, 0x50, 0x73, 0xe2, 0x9d, 0xec, 0x8f, 0x32, + 0x26, 0x6b, 0xa8, 0xe7, 0x64, 0xb9, 0x72, 0x03, 0x1d, 0x21, 0x8f, 0xf0, 0x91, 0x43, 0xdd, 0xdb, + 0x5f, 0xb5, 0x00, 0xf1, 0x66, 0x0c, 0xf6, 0x87, 0x32, 0x15, 0xac, 0x54, 0xbb, 0x2e, 0x92, 0xa3, + 0x49, 0x41, 0xb0, 0x86, 0x75, 0x2c, 0xc3, 0x93, 0x32, 0x1c, 0x28, 0xf6, 0x37, 0x1c, 0x38, 0xc2, + 0x88, 0xfe, 0xc1, 0x30, 0xa4, 0x3d, 0x40, 0xd0, 0x6d, 0x18, 0x6f, 0x38, 0x6d, 0x67, 0xd3, 0x6b, + 0x7a, 0xb1, 0x47, 0xa2, 0x5e, 0x16, 0x47, 0xcb, 0x1a, 0x9e, 0x50, 0xf5, 0x6a, 0x25, 0xd8, 0xa0, + 0x83, 0x16, 0x00, 0xda, 0xa1, 0xb7, 0xe7, 0x35, 0xc9, 0x36, 0x93, 0x38, 0x30, 0xf7, 0x66, 0x6e, + 0x46, 0x23, 0x4b, 0xb1, 0x86, 0x91, 0xe1, 0xa9, 0x5a, 0x7c, 0xc8, 0x9e, 0xaa, 0x70, 0x62, 0x9e, + 0xaa, 0x43, 0x47, 0xf2, 0x54, 0x2d, 0x1d, 0xd9, 0x53, 0x75, 0x78, 0x20, 0x4f, 0x55, 0x0c, 0x67, + 0x25, 0x07, 0x47, 0xff, 0xaf, 0x7a, 0x4d, 0x22, 0xd8, 0x76, 0xee, 0x93, 0x3d, 0x77, 0xff, 0x60, + 0xfe, 0x2c, 0xce, 0xc4, 0xc0, 0x39, 0x35, 0xd1, 0xa7, 0x61, 0xd6, 0x69, 0x36, 0x83, 0xbb, 0x6a, + 0x52, 0x57, 0xa2, 0x86, 0xd3, 0xe4, 0xa2, 0xfc, 0x51, 0x46, 0xf5, 0xb1, 0xfb, 0x07, 0xf3, 0xb3, + 0x8b, 0x39, 0x38, 0x38, 0xb7, 0x36, 0xfa, 0x24, 0x94, 0xdb, 0x61, 0xd0, 0x58, 0xd3, 0xdc, 0xd4, + 0x2e, 0xd0, 0x01, 0xac, 0xc9, 0xc2, 0xc3, 0x83, 0xf9, 0x09, 0xf5, 0x87, 0x5d, 0xf8, 0x49, 0x05, + 0x7b, 0x17, 0x4e, 0xd5, 0x49, 0xe8, 0xb1, 0xac, 0xc0, 0x6e, 0x72, 0x7e, 0x6c, 0x40, 0x39, 0x4c, + 0x9d, 0x98, 0x03, 0xc5, 0x76, 0xd3, 0x62, 0x82, 0xcb, 0x13, 0x32, 0x21, 0x64, 0xff, 0x6f, 0x0b, + 0x46, 0x85, 0x47, 0xc6, 0x09, 0x30, 0x6a, 0x8b, 0x86, 0xbc, 0x7c, 0x3e, 0xfb, 0x56, 0x61, 0x9d, + 0xc9, 0x95, 0x94, 0x57, 0x53, 0x92, 0xf2, 0xc7, 0x7b, 0x11, 0xe9, 0x2d, 0x23, 0xff, 0x9b, 0x45, + 0x98, 0x34, 0x5d, 0xf7, 0x4e, 0x60, 0x08, 0xd6, 0x61, 0x34, 0x12, 0xbe, 0x69, 0x85, 0x7c, 0x8b, + 0xec, 0xf4, 0x24, 0x26, 0xd6, 0x5a, 0xc2, 0x1b, 0x4d, 0x12, 0xc9, 0x74, 0x7a, 0x2b, 0x3e, 0x44, + 0xa7, 0xb7, 0x7e, 0xde, 0x93, 0x43, 0xc7, 0xe1, 0x3d, 0x69, 0x7f, 0x99, 0xdd, 0x6c, 0x7a, 0xf9, + 0x09, 0x30, 0x3d, 0x57, 0xcd, 0x3b, 0xd0, 0xee, 0xb1, 0xb2, 0x44, 0xa7, 0x72, 0x98, 0x9f, 0x9f, + 0xb7, 0xe0, 0x7c, 0xc6, 0x57, 0x69, 0x9c, 0xd0, 0x33, 0x50, 0x72, 0x3a, 0xae, 0xa7, 0xf6, 0xb2, + 0xa6, 0x35, 0x5b, 0x14, 0xe5, 0x58, 0x61, 0xa0, 0x65, 0x98, 0x21, 0xf7, 0xda, 0x1e, 0x57, 0x18, + 0xea, 0x26, 0x95, 0x45, 0x1e, 0xef, 0x7a, 0x25, 0x0d, 0xc4, 0xdd, 0xf8, 0x2a, 0xd8, 0x43, 0x31, + 0x37, 0xd8, 0xc3, 0xdf, 0xb7, 0x60, 0x4c, 0x79, 0x67, 0x3d, 0xf4, 0xd1, 0xfe, 0x26, 0x73, 0xb4, + 0x1f, 0xed, 0x31, 0xda, 0x39, 0xc3, 0xfc, 0xb7, 0x0b, 0xaa, 0xbf, 0xb5, 0x20, 0x8c, 0x07, 0xe0, + 0xb0, 0x5e, 0x81, 0x52, 0x3b, 0x0c, 0xe2, 0xa0, 0x11, 0x34, 0x05, 0x83, 0xf5, 0x58, 0x12, 0x8b, + 0x84, 0x97, 0x1f, 0x6a, 0xbf, 0xb1, 0xc2, 0x66, 0xa3, 0x17, 0x84, 0xb1, 0x60, 0x6a, 0x92, 0xd1, + 0x0b, 0xc2, 0x18, 0x33, 0x08, 0x72, 0x01, 0x62, 0x27, 0xdc, 0x26, 0x31, 0x2d, 0x13, 0xb1, 0x8f, + 0xf2, 0x0f, 0x8f, 0x4e, 0xec, 0x35, 0x17, 0x3c, 0x3f, 0x8e, 0xe2, 0x70, 0xa1, 0xea, 0xc7, 0x37, + 0x43, 0xfe, 0x5e, 0xd3, 0x82, 0x8b, 0x28, 0x5a, 0x58, 0xa3, 0x2b, 0xdd, 0x8a, 0x59, 0x1b, 0xc3, + 0xa6, 0xfe, 0x7d, 0x5d, 0x94, 0x63, 0x85, 0x61, 0xbf, 0xcc, 0xae, 0x12, 0x36, 0x40, 0x47, 0x8b, + 0xfb, 0xf1, 0x9d, 0x65, 0x35, 0xb4, 0x4c, 0xf9, 0x56, 0xd1, 0xa3, 0x8b, 0xf4, 0x3e, 0xb9, 0x69, + 0xc3, 0xba, 0x8b, 0x51, 0x12, 0x82, 0x04, 0x7d, 0x73, 0x97, 0x4d, 0xc5, 0xb3, 0x7d, 0xae, 0x80, + 0x23, 0x58, 0x51, 0xb0, 0x18, 0xfc, 0x2c, 0x42, 0x79, 0xb5, 0x26, 0x16, 0xb9, 0x16, 0x83, 0x5f, + 0x00, 0x70, 0x82, 0x83, 0xae, 0x88, 0xd7, 0xf8, 0x90, 0x91, 0x79, 0x52, 0xbe, 0xc6, 0xe5, 0xe7, + 0x6b, 0xc2, 0xec, 0xe7, 0x60, 0x4c, 0x65, 0xa0, 0xac, 0xf1, 0xc4, 0x86, 0x22, 0x12, 0xd4, 0x4a, + 0x52, 0x8c, 0x75, 0x1c, 0xb4, 0x01, 0x53, 0x11, 0x17, 0xf5, 0xa8, 0x80, 0x9f, 0x5c, 0x64, 0xf6, + 0x51, 0x69, 0x88, 0x52, 0x37, 0xc1, 0x87, 0xac, 0x88, 0x1f, 0x1d, 0xd2, 0x95, 0x37, 0x4d, 0x02, + 0xbd, 0x06, 0x93, 0xcd, 0xc0, 0x71, 0x97, 0x9c, 0xa6, 0xe3, 0x37, 0xd8, 0xf7, 0x96, 0xcc, 0x44, + 0x66, 0x37, 0x0c, 0x28, 0x4e, 0x61, 0x53, 0xce, 0x47, 0x2f, 0x11, 0x41, 0x6a, 0x1d, 0x7f, 0x9b, + 0x44, 0x22, 0x9f, 0x20, 0xe3, 0x7c, 0x6e, 0xe4, 0xe0, 0xe0, 0xdc, 0xda, 0xe8, 0x15, 0x18, 0x97, + 0x9f, 0xaf, 0x79, 0xbe, 0x27, 0xb6, 0xf7, 0x1a, 0x0c, 0x1b, 0x98, 0xe8, 0x2e, 0x9c, 0x91, 0xff, + 0x37, 0x42, 0x67, 0x6b, 0xcb, 0x6b, 0x08, 0x77, 0x50, 0xee, 0x18, 0xb7, 0x28, 0xbd, 0xb7, 0x56, + 0xb2, 0x90, 0x0e, 0x0f, 0xe6, 0x2f, 0x8a, 0x51, 0xcb, 0x84, 0xb3, 0x49, 0xcc, 0xa6, 0x8f, 0xd6, + 0xe0, 0xd4, 0x0e, 0x71, 0x9a, 0xf1, 0xce, 0xf2, 0x0e, 0x69, 0xec, 0xca, 0x4d, 0xc4, 0xfc, 0xe9, + 0x35, 0x8b, 0xf5, 0x6b, 0xdd, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x0b, 0x66, 0xdb, 0x9d, 0xcd, 0xa6, + 0x17, 0xed, 0xac, 0x07, 0x31, 0xb3, 0x46, 0x51, 0x09, 0x2d, 0x85, 0xe3, 0xbd, 0x8a, 0x58, 0x50, + 0xcb, 0xc1, 0xc3, 0xb9, 0x14, 0xd0, 0xbb, 0x70, 0x26, 0xb5, 0x18, 0x84, 0xeb, 0xf1, 0x64, 0x7e, + 0xc8, 0xef, 0x7a, 0x56, 0x05, 0xe1, 0xc5, 0x9f, 0x05, 0xc2, 0xd9, 0x4d, 0xa0, 0x17, 0xa1, 0xe4, + 0xb5, 0x57, 0x9d, 0x96, 0xd7, 0xdc, 0x67, 0x31, 0xcb, 0xcb, 0x2c, 0x8e, 0x77, 0xa9, 0x5a, 0xe3, + 0x65, 0x87, 0xda, 0x6f, 0xac, 0x30, 0xdf, 0x9b, 0x35, 0xd2, 0x3b, 0xb4, 0xb2, 0xc6, 0xca, 0xa1, + 0xcf, 0xc3, 0xb8, 0xbe, 0xf6, 0xc4, 0xb5, 0x74, 0x29, 0x9b, 0xd3, 0xd1, 0xd6, 0x28, 0x67, 0x04, + 0xd5, 0x3a, 0xd4, 0x61, 0xd8, 0xa0, 0x68, 0x13, 0xc8, 0x1e, 0x15, 0x74, 0x03, 0x4a, 0x8d, 0xa6, + 0x47, 0xfc, 0xb8, 0x5a, 0xeb, 0x15, 0x88, 0x68, 0x59, 0xe0, 0x88, 0x61, 0x16, 0x91, 0x95, 0x79, + 0x19, 0x56, 0x14, 0xec, 0x5f, 0x2d, 0xc0, 0x7c, 0x9f, 0x30, 0xdd, 0x29, 0xa1, 0xb9, 0x35, 0x90, + 0xd0, 0x7c, 0x51, 0x26, 0xf5, 0x5c, 0x4f, 0x49, 0x12, 0x52, 0x09, 0x3b, 0x13, 0x79, 0x42, 0x1a, + 0x7f, 0x60, 0x23, 0x66, 0x5d, 0xee, 0x3e, 0xd4, 0xd7, 0x0c, 0xdf, 0xd0, 0xb7, 0x0d, 0x0f, 0xfe, + 0x7c, 0xc9, 0xd5, 0x9d, 0xd8, 0x5f, 0x2e, 0xc0, 0x19, 0x35, 0x84, 0x5f, 0xbf, 0x03, 0x77, 0xab, + 0x7b, 0xe0, 0x8e, 0x41, 0xf3, 0x64, 0xdf, 0x84, 0x11, 0x1e, 0x59, 0x69, 0x00, 0xb6, 0xe9, 0x09, + 0x33, 0x34, 0xa0, 0xba, 0xdc, 0x8d, 0xf0, 0x80, 0xdf, 0x63, 0xc1, 0xd4, 0xc6, 0x72, 0xad, 0x1e, + 0x34, 0x76, 0x49, 0xbc, 0xc8, 0xd9, 0x5c, 0x2c, 0xb8, 0x26, 0xeb, 0x01, 0xb9, 0xa1, 0x2c, 0x3e, + 0xeb, 0x22, 0x0c, 0xed, 0x04, 0x51, 0x9c, 0x56, 0x4b, 0x5f, 0x0b, 0xa2, 0x18, 0x33, 0x88, 0xfd, + 0x3b, 0x16, 0x0c, 0xb3, 0x3c, 0xd6, 0xfd, 0x32, 0xa9, 0x0f, 0xf2, 0x5d, 0xe8, 0x25, 0x18, 0x21, + 0x5b, 0x5b, 0xa4, 0x11, 0x8b, 0x59, 0x95, 0x7e, 0xc4, 0x23, 0x2b, 0xac, 0x94, 0xb2, 0x0a, 0xac, + 0x31, 0xfe, 0x17, 0x0b, 0x64, 0x74, 0x07, 0xca, 0xb1, 0xd7, 0x22, 0x8b, 0xae, 0x2b, 0x14, 0x7b, + 0x0f, 0xe0, 0x0b, 0xbd, 0x21, 0x09, 0xe0, 0x84, 0x96, 0xfd, 0xa5, 0x02, 0x40, 0x12, 0x57, 0xa3, + 0xdf, 0x27, 0x2e, 0x75, 0xa9, 0x7c, 0x2e, 0x65, 0xa8, 0x7c, 0x50, 0x42, 0x30, 0x43, 0xdf, 0xa3, + 0x86, 0xa9, 0x38, 0xd0, 0x30, 0x0d, 0x1d, 0x65, 0x98, 0x96, 0x61, 0x26, 0x89, 0x0b, 0x62, 0x86, + 0x45, 0x62, 0x4f, 0x9b, 0x8d, 0x34, 0x10, 0x77, 0xe3, 0xdb, 0x04, 0x2e, 0xaa, 0xf0, 0x08, 0xe2, + 0xae, 0x61, 0x76, 0xa3, 0x47, 0x48, 0xaa, 0x9f, 0xe8, 0xb4, 0x0a, 0xb9, 0x3a, 0xad, 0x1f, 0xb3, + 0xe0, 0x74, 0xba, 0x1d, 0xe6, 0xc8, 0xf7, 0x45, 0x0b, 0xce, 0x30, 0xcd, 0x1e, 0x6b, 0xb5, 0x5b, + 0x8f, 0xf8, 0x62, 0xcf, 0x90, 0x0f, 0x39, 0x3d, 0x4e, 0x1c, 0xd6, 0xd7, 0xb2, 0x48, 0xe3, 0xec, + 0x16, 0xed, 0xff, 0x58, 0x80, 0xd9, 0xbc, 0x58, 0x11, 0xcc, 0xac, 0xdc, 0xb9, 0x57, 0xdf, 0x25, + 0x77, 0x85, 0xf1, 0x6e, 0x62, 0x56, 0xce, 0x8b, 0xb1, 0x84, 0xa7, 0x23, 0x2f, 0x17, 0x06, 0x8b, + 0xbc, 0x8c, 0x76, 0x60, 0xe6, 0xee, 0x0e, 0xf1, 0x6f, 0xf9, 0x91, 0x13, 0x7b, 0xd1, 0x96, 0xc7, + 0x32, 0xa2, 0xf3, 0x75, 0xf3, 0x09, 0x69, 0x62, 0x7b, 0x27, 0x8d, 0x70, 0x78, 0x30, 0x7f, 0xde, + 0x28, 0x48, 0xba, 0xcc, 0x0f, 0x12, 0xdc, 0x4d, 0xb4, 0x3b, 0x70, 0xf5, 0xd0, 0x43, 0x0c, 0x5c, + 0x6d, 0x7f, 0xd1, 0x82, 0x73, 0xb9, 0x89, 0xe5, 0xd0, 0x65, 0x28, 0x39, 0x6d, 0x8f, 0x8b, 0x40, + 0xc5, 0x31, 0xca, 0x9e, 0xf2, 0xb5, 0x2a, 0x17, 0x80, 0x2a, 0xa8, 0x4a, 0x78, 0x5b, 0xc8, 0x4d, + 0x78, 0xdb, 0x37, 0x7f, 0xad, 0xfd, 0xdd, 0x16, 0x08, 0x97, 0xb8, 0x01, 0xce, 0xee, 0x37, 0x65, + 0xbe, 0x70, 0x23, 0xb9, 0xc5, 0xc5, 0x7c, 0x1f, 0x41, 0x91, 0xd2, 0x42, 0xf1, 0x4a, 0x46, 0x22, + 0x0b, 0x83, 0x96, 0xed, 0x82, 0x80, 0x56, 0x08, 0x13, 0x20, 0xf6, 0xef, 0xcd, 0xf3, 0x00, 0x2e, + 0xc3, 0xd5, 0xb2, 0x06, 0xab, 0x9b, 0xb9, 0xa2, 0x20, 0x58, 0xc3, 0xb2, 0xff, 0x6d, 0x01, 0xc6, + 0x64, 0x32, 0x85, 0x8e, 0x3f, 0xc8, 0x33, 0xff, 0x48, 0xd9, 0xd5, 0x58, 0x9a, 0x6d, 0x4a, 0xb8, + 0x96, 0x48, 0x47, 0x92, 0x34, 0xdb, 0x12, 0x80, 0x13, 0x1c, 0xba, 0x8b, 0xa2, 0xce, 0x26, 0x43, + 0x4f, 0x39, 0x70, 0xd5, 0x79, 0x31, 0x96, 0x70, 0xf4, 0x69, 0x98, 0xe6, 0xf5, 0xc2, 0xa0, 0xed, + 0x6c, 0x73, 0xd9, 0xf2, 0xb0, 0xf2, 0xbc, 0x9e, 0x5e, 0x4b, 0xc1, 0x0e, 0x0f, 0xe6, 0x4f, 0xa7, + 0xcb, 0x98, 0xd2, 0xa4, 0x8b, 0x0a, 0x33, 0xc4, 0xe0, 0x8d, 0xd0, 0xdd, 0xdf, 0x65, 0xbf, 0x91, + 0x80, 0xb0, 0x8e, 0x67, 0x7f, 0x1e, 0x50, 0x77, 0x5a, 0x09, 0xf4, 0x3a, 0xb7, 0xbe, 0xf3, 0x42, + 0xe2, 0xf6, 0x52, 0xa2, 0xe8, 0xfe, 0xc5, 0xd2, 0xf7, 0x82, 0xd7, 0xc2, 0xaa, 0xbe, 0xfd, 0x57, + 0x8a, 0x30, 0x9d, 0xf6, 0x36, 0x45, 0xd7, 0x60, 0x84, 0xb3, 0x1e, 0x82, 0x7c, 0x0f, 0x1d, 0xbd, + 0xe6, 0xa3, 0xca, 0x0e, 0x61, 0xc1, 0xbd, 0x88, 0xfa, 0xe8, 0x2d, 0x18, 0x73, 0x83, 0xbb, 0xfe, + 0x5d, 0x27, 0x74, 0x17, 0x6b, 0x55, 0xb1, 0x9c, 0x33, 0xdf, 0x3d, 0x95, 0x04, 0x4d, 0xf7, 0x7b, + 0x65, 0xfa, 0xa8, 0x04, 0x84, 0x75, 0x72, 0x68, 0x83, 0x45, 0xc1, 0xdd, 0xf2, 0xb6, 0xd7, 0x9c, + 0x76, 0x2f, 0x53, 0xec, 0x65, 0x89, 0xa4, 0x51, 0x9e, 0x10, 0xa1, 0x72, 0x39, 0x00, 0x27, 0x84, + 0xd0, 0xb7, 0xc2, 0xa9, 0x28, 0x47, 0x54, 0x9a, 0x97, 0x65, 0xa8, 0x97, 0xf4, 0x70, 0xe9, 0x11, + 0xfa, 0x22, 0xcd, 0x12, 0xaa, 0x66, 0x35, 0x63, 0xff, 0xda, 0x29, 0x30, 0x36, 0xb1, 0x91, 0x74, + 0xce, 0x3a, 0xa6, 0xa4, 0x73, 0x18, 0x4a, 0xa4, 0xd5, 0x8e, 0xf7, 0x2b, 0x5e, 0xd8, 0x2b, 0x6b, + 0xe9, 0x8a, 0xc0, 0xe9, 0xa6, 0x29, 0x21, 0x58, 0xd1, 0xc9, 0xce, 0x0c, 0x58, 0xfc, 0x1a, 0x66, + 0x06, 0x1c, 0x3a, 0xc1, 0xcc, 0x80, 0xeb, 0x30, 0xba, 0xed, 0xc5, 0x98, 0xb4, 0x03, 0xc1, 0xf4, + 0x67, 0xae, 0xc3, 0xab, 0x1c, 0xa5, 0x3b, 0x07, 0x95, 0x00, 0x60, 0x49, 0x04, 0xbd, 0xae, 0x76, + 0xe0, 0x48, 0xfe, 0x9b, 0xb9, 0x5b, 0x99, 0x9c, 0xb9, 0x07, 0x45, 0xfe, 0xbf, 0xd1, 0x07, 0xcd, + 0xff, 0xb7, 0x2a, 0xb3, 0xf6, 0x95, 0xf2, 0xfd, 0x26, 0x58, 0x52, 0xbe, 0x3e, 0xb9, 0xfa, 0x6e, + 0xeb, 0x99, 0x0e, 0xcb, 0xf9, 0x27, 0x81, 0x4a, 0x62, 0x38, 0x60, 0x7e, 0xc3, 0xef, 0xb6, 0xe0, + 0x4c, 0x3b, 0x2b, 0xe9, 0xa7, 0xd0, 0xbb, 0xbe, 0x34, 0x70, 0x56, 0x53, 0xa3, 0x41, 0x26, 0x72, + 0xc9, 0x44, 0xc3, 0xd9, 0xcd, 0xd1, 0x81, 0x0e, 0x37, 0x5d, 0x91, 0xa0, 0xef, 0x89, 0x9c, 0x44, + 0x89, 0x3d, 0xd2, 0x23, 0x6e, 0x64, 0x24, 0xe5, 0xfb, 0x70, 0x5e, 0x52, 0xbe, 0x81, 0x53, 0xf1, + 0xbd, 0xae, 0x52, 0x24, 0x4e, 0xe4, 0x2f, 0x25, 0x9e, 0x00, 0xb1, 0x6f, 0x62, 0xc4, 0xd7, 0x55, + 0x62, 0xc4, 0x1e, 0x11, 0x21, 0x79, 0xda, 0xc3, 0xbe, 0xe9, 0x10, 0xb5, 0x94, 0x86, 0x53, 0xc7, + 0x93, 0xd2, 0xd0, 0xb8, 0x6a, 0x78, 0x56, 0xbd, 0xa7, 0xfb, 0x5c, 0x35, 0x06, 0xdd, 0xde, 0x97, + 0x0d, 0x4f, 0xdf, 0x38, 0xf3, 0x40, 0xe9, 0x1b, 0x6f, 0xeb, 0xe9, 0x10, 0x51, 0x9f, 0x7c, 0x7f, + 0x14, 0x69, 0xc0, 0x24, 0x88, 0xb7, 0xf5, 0x0b, 0xf0, 0x54, 0x3e, 0x5d, 0x75, 0xcf, 0x75, 0xd3, + 0xcd, 0xbc, 0x02, 0xbb, 0x92, 0x2b, 0x9e, 0x3e, 0x99, 0xe4, 0x8a, 0x67, 0x8e, 0x3d, 0xb9, 0xe2, + 0xd9, 0x13, 0x48, 0xae, 0xf8, 0xc8, 0x09, 0x26, 0x57, 0xbc, 0xcd, 0x8c, 0x15, 0x78, 0x60, 0x11, + 0x11, 0xc1, 0x32, 0x3b, 0x5a, 0x62, 0x56, 0xf4, 0x11, 0xfe, 0x71, 0x0a, 0x84, 0x13, 0x52, 0x19, + 0x49, 0x1b, 0x67, 0x1f, 0x42, 0xd2, 0xc6, 0xf5, 0x24, 0x69, 0xe3, 0xb9, 0xfc, 0xa9, 0xce, 0x30, + 0x12, 0xcf, 0x49, 0xd5, 0x78, 0x5b, 0x4f, 0xb1, 0xf8, 0x68, 0x0f, 0xa1, 0x7a, 0x96, 0xe0, 0xb1, + 0x47, 0x62, 0xc5, 0xd7, 0x78, 0x62, 0xc5, 0xc7, 0xf2, 0x4f, 0xf2, 0xf4, 0x75, 0x67, 0xa6, 0x53, + 0xfc, 0xde, 0x02, 0x5c, 0xe8, 0xbd, 0x2f, 0x12, 0xa9, 0x67, 0x2d, 0xd1, 0xed, 0xa5, 0xa4, 0x9e, + 0xfc, 0x6d, 0x95, 0x60, 0x0d, 0x1c, 0x73, 0xea, 0x2a, 0xcc, 0x28, 0x2b, 0xf0, 0xa6, 0xd7, 0xd8, + 0xd7, 0x32, 0xc8, 0x2b, 0xcf, 0xd9, 0x7a, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x8b, 0x30, 0x65, 0x14, + 0x56, 0x2b, 0xe2, 0x0d, 0xa5, 0xc4, 0xac, 0x75, 0x13, 0x8c, 0xd3, 0xf8, 0xf6, 0x4f, 0x59, 0xf0, + 0x48, 0x4e, 0xde, 0xa2, 0x81, 0x43, 0x2a, 0x6d, 0xc1, 0x54, 0xdb, 0xac, 0xda, 0x27, 0xf2, 0x9a, + 0x91, 0x1d, 0x49, 0xf5, 0x35, 0x05, 0xc0, 0x69, 0xa2, 0xf6, 0x9f, 0x5a, 0x70, 0xbe, 0xa7, 0x41, + 0x16, 0xc2, 0x70, 0x76, 0xbb, 0x15, 0x39, 0xcb, 0x21, 0x71, 0x89, 0x1f, 0x7b, 0x4e, 0xb3, 0xde, + 0x26, 0x0d, 0x4d, 0x6e, 0xcd, 0x2c, 0x9b, 0xae, 0xae, 0xd5, 0x17, 0xbb, 0x31, 0x70, 0x4e, 0x4d, + 0xb4, 0x0a, 0xa8, 0x1b, 0x22, 0x66, 0x98, 0x45, 0x67, 0xed, 0xa6, 0x87, 0x33, 0x6a, 0xa0, 0x97, + 0x61, 0x42, 0x19, 0x7a, 0x69, 0x33, 0xce, 0x0e, 0x60, 0xac, 0x03, 0xb0, 0x89, 0xb7, 0x74, 0xf9, + 0x37, 0x7e, 0xef, 0xc2, 0x87, 0x7e, 0xeb, 0xf7, 0x2e, 0x7c, 0xe8, 0xb7, 0x7f, 0xef, 0xc2, 0x87, + 0xbe, 0xfd, 0xfe, 0x05, 0xeb, 0x37, 0xee, 0x5f, 0xb0, 0x7e, 0xeb, 0xfe, 0x05, 0xeb, 0xb7, 0xef, + 0x5f, 0xb0, 0x7e, 0xf7, 0xfe, 0x05, 0xeb, 0x4b, 0xbf, 0x7f, 0xe1, 0x43, 0x6f, 0x16, 0xf6, 0x9e, + 0xfb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x11, 0xe2, 0x4d, 0x14, 0xfc, 0x00, 0x00, +} + +func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GlusterfsVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AWSElasticBlockStoreVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AWSElasticBlockStoreVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.EndpointsName))) - i += copy(dAtA[i:], m.EndpointsName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x18 - i++ + i-- if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - return i, nil + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.Partition)) + i-- + dAtA[i] = 0x18 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumeID) + copy(dAtA[i:], m.VolumeID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *HTTPGetAction) Marshal() (dAtA []byte, err error) { +func (m *Affinity) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *HTTPGetAction) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Affinity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Affinity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n59, err := m.Port.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.PodAntiAffinity != nil { + { + size, err := m.PodAntiAffinity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i += n59 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) - i += copy(dAtA[i:], m.Host) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scheme))) - i += copy(dAtA[i:], m.Scheme) - if len(m.HTTPHeaders) > 0 { - for _, msg := range m.HTTPHeaders { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.PodAffinity != nil { + { + size, err := m.PodAffinity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.NodeAffinity != nil { + { + size, err := m.NodeAffinity.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func (m *HTTPHeader) Marshal() (dAtA []byte, err error) { +func (m *AttachedVolume) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *HTTPHeader) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AttachedVolume) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AttachedVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) + i -= len(m.DevicePath) + copy(dAtA[i:], m.DevicePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DevicePath))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Handler) Marshal() (dAtA []byte, err error) { +func (m *AvoidPods) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Handler) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AvoidPods) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AvoidPods) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Exec != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Exec.Size())) - n60, err := m.Exec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n60 - } - if m.HTTPGet != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HTTPGet.Size())) - n61, err := m.HTTPGet.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.PreferAvoidPods) > 0 { + for iNdEx := len(m.PreferAvoidPods) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PreferAvoidPods[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i += n61 } - if m.TCPSocket != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TCPSocket.Size())) - n62, err := m.TCPSocket.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n62 - } - return i, nil + return len(dAtA) - i, nil } -func (m *HostAlias) Marshal() (dAtA []byte, err error) { +func (m *AzureDiskVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *HostAlias) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AzureDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AzureDiskVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) - i += copy(dAtA[i:], m.IP) - if len(m.Hostnames) > 0 { - for _, s := range m.Hostnames { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.Kind != nil { + i -= len(*m.Kind) + copy(dAtA[i:], *m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Kind))) + i-- + dAtA[i] = 0x32 + } + if m.ReadOnly != nil { + i-- + if *m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x28 + } + if m.FSType != nil { + i -= len(*m.FSType) + copy(dAtA[i:], *m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FSType))) + i-- + dAtA[i] = 0x22 + } + if m.CachingMode != nil { + i -= len(*m.CachingMode) + copy(dAtA[i:], *m.CachingMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.CachingMode))) + i-- + dAtA[i] = 0x1a } - return i, nil + i -= len(m.DataDiskURI) + copy(dAtA[i:], m.DataDiskURI) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DataDiskURI))) + i-- + dAtA[i] = 0x12 + i -= len(m.DiskName) + copy(dAtA[i:], m.DiskName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DiskName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *HostPathVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *AzureFilePersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *HostPathVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - if m.Type != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Type))) - i += copy(dAtA[i:], *m.Type) - } - return i, nil -} - -func (m *ISCSIPersistentVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *AzureFilePersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ISCSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AzureFilePersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetPortal))) - i += copy(dAtA[i:], m.TargetPortal) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IQN))) - i += copy(dAtA[i:], m.IQN) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Lun)) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ISCSIInterface))) - i += copy(dAtA[i:], m.ISCSIInterface) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x30 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if len(m.Portals) > 0 { - for _, s := range m.Portals { - dAtA[i] = 0x3a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x40 - i++ - if m.DiscoveryCHAPAuth { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SecretRef != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n63, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n63 + if m.SecretNamespace != nil { + i -= len(*m.SecretNamespace) + copy(dAtA[i:], *m.SecretNamespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.SecretNamespace))) + i-- + dAtA[i] = 0x22 } - dAtA[i] = 0x58 - i++ - if m.SessionCHAPAuth { + i-- + if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if m.InitiatorName != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.InitiatorName))) - i += copy(dAtA[i:], *m.InitiatorName) - } - return i, nil + i-- + dAtA[i] = 0x18 + i -= len(m.ShareName) + copy(dAtA[i:], m.ShareName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShareName))) + i-- + dAtA[i] = 0x12 + i -= len(m.SecretName) + copy(dAtA[i:], m.SecretName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ISCSIVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *AzureFileVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ISCSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AzureFileVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AzureFileVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetPortal))) - i += copy(dAtA[i:], m.TargetPortal) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IQN))) - i += copy(dAtA[i:], m.IQN) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Lun)) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ISCSIInterface))) - i += copy(dAtA[i:], m.ISCSIInterface) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x30 - i++ + i-- if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if len(m.Portals) > 0 { - for _, s := range m.Portals { - dAtA[i] = 0x3a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x40 - i++ - if m.DiscoveryCHAPAuth { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SecretRef != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n64, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n64 - } - dAtA[i] = 0x58 - i++ - if m.SessionCHAPAuth { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.InitiatorName != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.InitiatorName))) - i += copy(dAtA[i:], *m.InitiatorName) - } - return i, nil + i-- + dAtA[i] = 0x18 + i -= len(m.ShareName) + copy(dAtA[i:], m.ShareName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShareName))) + i-- + dAtA[i] = 0x12 + i -= len(m.SecretName) + copy(dAtA[i:], m.SecretName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *KeyToPath) Marshal() (dAtA []byte, err error) { +func (m *Binding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *KeyToPath) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - if m.Mode != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Mode)) - } - return i, nil -} - -func (m *Lifecycle) Marshal() (dAtA []byte, err error) { +func (m *Binding) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Lifecycle) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Binding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.PostStart != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PostStart.Size())) - n65, err := m.PostStart.MarshalTo(dAtA[i:]) + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n65 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.PreStop != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PreStop.Size())) - n66, err := m.PreStop.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n66 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *LimitRange) Marshal() (dAtA []byte, err error) { +func (m *CSIPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LimitRange) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n67, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n67 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n68, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n68 - return i, nil -} - -func (m *LimitRangeItem) Marshal() (dAtA []byte, err error) { +func (m *CSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CSIPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if len(m.Max) > 0 { - keysForMax := make([]string, 0, len(m.Max)) - for k := range m.Max { - keysForMax = append(keysForMax, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForMax) - for _, k := range keysForMax { - dAtA[i] = 0x12 - i++ - v := m.Max[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n69, err := (&v).MarshalTo(dAtA[i:]) + if m.ControllerExpandSecretRef != nil { + { + size, err := m.ControllerExpandSecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n69 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x4a } - if len(m.Min) > 0 { - keysForMin := make([]string, 0, len(m.Min)) - for k := range m.Min { - keysForMin = append(keysForMin, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForMin) - for _, k := range keysForMin { - dAtA[i] = 0x1a - i++ - v := m.Min[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n70, err := (&v).MarshalTo(dAtA[i:]) + if m.NodePublishSecretRef != nil { + { + size, err := m.NodePublishSecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n70 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x42 } - if len(m.Default) > 0 { - keysForDefault := make([]string, 0, len(m.Default)) - for k := range m.Default { - keysForDefault = append(keysForDefault, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) - for _, k := range keysForDefault { - dAtA[i] = 0x22 - i++ - v := m.Default[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n71, err := (&v).MarshalTo(dAtA[i:]) + if m.NodeStageSecretRef != nil { + { + size, err := m.NodeStageSecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n71 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x3a } - if len(m.DefaultRequest) > 0 { - keysForDefaultRequest := make([]string, 0, len(m.DefaultRequest)) - for k := range m.DefaultRequest { - keysForDefaultRequest = append(keysForDefaultRequest, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) - for _, k := range keysForDefaultRequest { - dAtA[i] = 0x2a - i++ - v := m.DefaultRequest[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n72, err := (&v).MarshalTo(dAtA[i:]) + if m.ControllerPublishSecretRef != nil { + { + size, err := m.ControllerPublishSecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n72 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x32 } - if len(m.MaxLimitRequestRatio) > 0 { - keysForMaxLimitRequestRatio := make([]string, 0, len(m.MaxLimitRequestRatio)) - for k := range m.MaxLimitRequestRatio { - keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) + if len(m.VolumeAttributes) > 0 { + keysForVolumeAttributes := make([]string, 0, len(m.VolumeAttributes)) + for k := range m.VolumeAttributes { + keysForVolumeAttributes = append(keysForVolumeAttributes, string(k)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) - for _, k := range keysForMaxLimitRequestRatio { - dAtA[i] = 0x32 - i++ - v := m.MaxLimitRequestRatio[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) + for iNdEx := len(keysForVolumeAttributes) - 1; iNdEx >= 0; iNdEx-- { + v := m.VolumeAttributes[string(keysForVolumeAttributes[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n73, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n73 + i -= len(keysForVolumeAttributes[iNdEx]) + copy(dAtA[i:], keysForVolumeAttributes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForVolumeAttributes[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a } } - return i, nil + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x22 + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.VolumeHandle) + copy(dAtA[i:], m.VolumeHandle) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeHandle))) + i-- + dAtA[i] = 0x12 + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *LimitRangeList) Marshal() (dAtA []byte, err error) { +func (m *CSIVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LimitRangeList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CSIVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n74, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n74 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.NodePublishSecretRef != nil { + { + size, err := m.NodePublishSecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.VolumeAttributes) > 0 { + keysForVolumeAttributes := make([]string, 0, len(m.VolumeAttributes)) + for k := range m.VolumeAttributes { + keysForVolumeAttributes = append(keysForVolumeAttributes, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) + for iNdEx := len(keysForVolumeAttributes) - 1; iNdEx >= 0; iNdEx-- { + v := m.VolumeAttributes[string(keysForVolumeAttributes[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForVolumeAttributes[iNdEx]) + copy(dAtA[i:], keysForVolumeAttributes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForVolumeAttributes[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } + } + if m.FSType != nil { + i -= len(*m.FSType) + copy(dAtA[i:], *m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FSType))) + i-- + dAtA[i] = 0x1a + } + if m.ReadOnly != nil { + i-- + if *m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x10 } - return i, nil + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *LimitRangeSpec) Marshal() (dAtA []byte, err error) { +func (m *Capabilities) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LimitRangeSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Capabilities) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Capabilities) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Limits) > 0 { - for _, msg := range m.Limits { + if len(m.Drop) > 0 { + for iNdEx := len(m.Drop) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Drop[iNdEx]) + copy(dAtA[i:], m.Drop[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Drop[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Add) > 0 { + for iNdEx := len(m.Add) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Add[iNdEx]) + copy(dAtA[i:], m.Add[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Add[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n } } - return i, nil + return len(dAtA) - i, nil } -func (m *List) Marshal() (dAtA []byte, err error) { +func (m *CephFSPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *List) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CephFSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CephFSPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n75, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - i += n75 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x30 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + i -= len(m.SecretFile) + copy(dAtA[i:], m.SecretFile) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretFile))) + i-- + dAtA[i] = 0x22 + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x1a + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + if len(m.Monitors) > 0 { + for iNdEx := len(m.Monitors) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Monitors[iNdEx]) + copy(dAtA[i:], m.Monitors[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Monitors[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } -func (m *LoadBalancerIngress) Marshal() (dAtA []byte, err error) { +func (m *CephFSVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LoadBalancerIngress) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) - i += copy(dAtA[i:], m.IP) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) - i += copy(dAtA[i:], m.Hostname) - return i, nil -} - -func (m *LoadBalancerStatus) Marshal() (dAtA []byte, err error) { +func (m *CephFSVolumeSource) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *LoadBalancerStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CephFSVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ingress) > 0 { - for _, msg := range m.Ingress { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + i -= len(m.SecretFile) + copy(dAtA[i:], m.SecretFile) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretFile))) + i-- + dAtA[i] = 0x22 + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x1a + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + if len(m.Monitors) > 0 { + for iNdEx := len(m.Monitors) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Monitors[iNdEx]) + copy(dAtA[i:], m.Monitors[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Monitors[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } -func (m *LocalObjectReference) Marshal() (dAtA []byte, err error) { +func (m *CinderPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LocalObjectReference) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CinderPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CinderPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumeID) + copy(dAtA[i:], m.VolumeID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + return len(dAtA) - i, nil } -func (m *LocalVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *CinderVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LocalVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CinderVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CinderVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumeID) + copy(dAtA[i:], m.VolumeID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil + return len(dAtA) - i, nil } -func (m *NFSVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *ClientIPConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NFSVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ClientIPConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClientIPConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Server))) - i += copy(dAtA[i:], m.Server) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x8 } - i++ - return i, nil + return len(dAtA) - i, nil } -func (m *Namespace) Marshal() (dAtA []byte, err error) { +func (m *ComponentCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Namespace) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ComponentCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ComponentCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n76, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n76 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n77, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n77 + i -= len(m.Error) + copy(dAtA[i:], m.Error) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) + i-- + dAtA[i] = 0x22 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n78, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n78 - return i, nil + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NamespaceList) Marshal() (dAtA []byte, err error) { +func (m *ComponentStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NamespaceList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ComponentStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ComponentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n79, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n79 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NamespaceSpec) Marshal() (dAtA []byte, err error) { +func (m *ComponentStatusList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NamespaceSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ComponentStatusList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ComponentStatusList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Finalizers) > 0 { - for _, s := range m.Finalizers { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NamespaceStatus) Marshal() (dAtA []byte, err error) { +func (m *ConfigMap) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NamespaceStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMap) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMap) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.BinaryData) > 0 { + keysForBinaryData := make([]string, 0, len(m.BinaryData)) + for k := range m.BinaryData { + keysForBinaryData = append(keysForBinaryData, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForBinaryData) + for iNdEx := len(keysForBinaryData) - 1; iNdEx >= 0; iNdEx-- { + v := m.BinaryData[string(keysForBinaryData[iNdEx])] + baseI := i + if v != nil { + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + } + i -= len(keysForBinaryData[iNdEx]) + copy(dAtA[i:], keysForBinaryData[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForBinaryData[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } + } + if len(m.Data) > 0 { + keysForData := make([]string, 0, len(m.Data)) + for k := range m.Data { + keysForData = append(keysForData, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + for iNdEx := len(keysForData) - 1; iNdEx >= 0; iNdEx-- { + v := m.Data[string(keysForData[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForData[iNdEx]) + copy(dAtA[i:], keysForData[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForData[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i += copy(dAtA[i:], m.Phase) - return i, nil + return len(dAtA) - i, nil } -func (m *Node) Marshal() (dAtA []byte, err error) { +func (m *ConfigMapEnvSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Node) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMapEnvSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapEnvSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n80, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n80 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n81, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 } - i += n81 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n82, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n82 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeAddress) Marshal() (dAtA []byte, err error) { +func (m *ConfigMapKeySelector) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeAddress) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMapKeySelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapKeySelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Address))) - i += copy(dAtA[i:], m.Address) - return i, nil + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeAffinity) Marshal() (dAtA []byte, err error) { +func (m *ConfigMapList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeAffinity) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMapList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RequiredDuringSchedulingIgnoredDuringExecution.Size())) - n83, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n83 } - if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeCondition) Marshal() (dAtA []byte, err error) { +func (m *ConfigMapNodeConfigSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeCondition) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMapNodeConfigSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapNodeConfigSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastHeartbeatTime.Size())) - n84, err := m.LastHeartbeatTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n84 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n85, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n85 + i -= len(m.KubeletConfigKey) + copy(dAtA[i:], m.KubeletConfigKey) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeletConfigKey))) + i-- dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i -= len(m.ResourceVersion) + copy(dAtA[i:], m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i-- + dAtA[i] = 0x22 + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x1a + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeConfigSource) Marshal() (dAtA []byte, err error) { +func (m *ConfigMapProjection) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeConfigSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMapProjection) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapProjection) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ConfigMap != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n86, err := m.ConfigMap.MarshalTo(dAtA[i:]) + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n86 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeConfigStatus) Marshal() (dAtA []byte, err error) { +func (m *ConfigMapVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeConfigStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ConfigMapVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Assigned != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Assigned.Size())) - n87, err := m.Assigned.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - i += n87 + i-- + dAtA[i] = 0x20 } - if m.Active != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Active.Size())) - n88, err := m.Active.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.DefaultMode != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x18 + } + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n88 } - if m.LastKnownGood != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastKnownGood.Size())) - n89, err := m.LastKnownGood.MarshalTo(dAtA[i:]) + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n89 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) - i += copy(dAtA[i:], m.Error) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeDaemonEndpoints) Marshal() (dAtA []byte, err error) { +func (m *Container) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeDaemonEndpoints) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Container) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Container) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.KubeletEndpoint.Size())) - n90, err := m.KubeletEndpoint.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.StartupProbe != nil { + { + size, err := m.StartupProbe.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + if len(m.VolumeDevices) > 0 { + for iNdEx := len(m.VolumeDevices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeDevices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } + } + i -= len(m.TerminationMessagePolicy) + copy(dAtA[i:], m.TerminationMessagePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePolicy))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + if len(m.EnvFrom) > 0 { + for iNdEx := len(m.EnvFrom) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EnvFrom[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + } + i-- + if m.TTY { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x90 + i-- + if m.StdinOnce { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x88 + i-- + if m.Stdin { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + if m.SecurityContext != nil { + { + size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + } + i -= len(m.ImagePullPolicy) + copy(dAtA[i:], m.ImagePullPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImagePullPolicy))) + i-- + dAtA[i] = 0x72 + i -= len(m.TerminationMessagePath) + copy(dAtA[i:], m.TerminationMessagePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePath))) + i-- + dAtA[i] = 0x6a + if m.Lifecycle != nil { + { + size, err := m.Lifecycle.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + if m.ReadinessProbe != nil { + { + size, err := m.ReadinessProbe.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + if m.LivenessProbe != nil { + { + size, err := m.LivenessProbe.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if len(m.VolumeMounts) > 0 { + for iNdEx := len(m.VolumeMounts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeMounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } + { + size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + i -= len(m.WorkingDir) + copy(dAtA[i:], m.WorkingDir) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WorkingDir))) + i-- + dAtA[i] = 0x2a + if len(m.Args) > 0 { + for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Args[iNdEx]) + copy(dAtA[i:], m.Args[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Args[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- + dAtA[i] = 0x1a + } } - i += n90 - return i, nil + i -= len(m.Image) + copy(dAtA[i:], m.Image) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeList) Marshal() (dAtA []byte, err error) { +func (m *ContainerImage) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerImage) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerImage) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n91, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n91 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i = encodeVarintGenerated(dAtA, i, uint64(m.SizeBytes)) + i-- + dAtA[i] = 0x10 + if len(m.Names) > 0 { + for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Names[iNdEx]) + copy(dAtA[i:], m.Names[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Names[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } -func (m *NodeProxyOptions) Marshal() (dAtA []byte, err error) { +func (m *ContainerPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeProxyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerPort) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.HostIP) + copy(dAtA[i:], m.HostIP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.HostIP))) + i-- + dAtA[i] = 0x2a + i -= len(m.Protocol) + copy(dAtA[i:], m.Protocol) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Protocol))) + i-- + dAtA[i] = 0x22 + i = encodeVarintGenerated(dAtA, i, uint64(m.ContainerPort)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.HostPort)) + i-- + dAtA[i] = 0x10 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil + return len(dAtA) - i, nil } -func (m *NodeResources) Marshal() (dAtA []byte, err error) { +func (m *ContainerState) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeResources) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Capacity) > 0 { - keysForCapacity := make([]string, 0, len(m.Capacity)) - for k := range m.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) + if m.Terminated != nil { + { + size, err := m.Terminated.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - for _, k := range keysForCapacity { - dAtA[i] = 0xa - i++ - v := m.Capacity[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + i-- + dAtA[i] = 0x1a + } + if m.Running != nil { + { + size, err := m.Running.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n92, err := (&v).MarshalTo(dAtA[i:]) + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Waiting != nil { + { + size, err := m.Waiting.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n92 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func (m *NodeSelector) Marshal() (dAtA []byte, err error) { +func (m *ContainerStateRunning) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeSelector) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerStateRunning) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerStateRunning) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.NodeSelectorTerms) > 0 { - for _, msg := range m.NodeSelectorTerms { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + { + size, err := m.StartedAt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeSelectorRequirement) Marshal() (dAtA []byte, err error) { +func (m *ContainerStateTerminated) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeSelectorRequirement) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerStateTerminated) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerStateTerminated) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) - i += copy(dAtA[i:], m.Operator) - if len(m.Values) > 0 { - for _, s := range m.Values { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i -= len(m.ContainerID) + copy(dAtA[i:], m.ContainerID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerID))) + i-- + dAtA[i] = 0x3a + { + size, err := m.FinishedAt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size, err := m.StartedAt.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + i = encodeVarintGenerated(dAtA, i, uint64(m.Signal)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ExitCode)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *NodeSelectorTerm) Marshal() (dAtA []byte, err error) { +func (m *ContainerStateWaiting) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeSelectorTerm) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerStateWaiting) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerStateWaiting) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.MatchExpressions) > 0 { - for _, msg := range m.MatchExpressions { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.MatchFields) > 0 { - for _, msg := range m.MatchFields { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeSpec) Marshal() (dAtA []byte, err error) { +func (m *ContainerStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ContainerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodCIDR))) - i += copy(dAtA[i:], m.PodCIDR) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DoNotUse_ExternalID))) - i += copy(dAtA[i:], m.DoNotUse_ExternalID) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProviderID))) - i += copy(dAtA[i:], m.ProviderID) - dAtA[i] = 0x20 - i++ - if m.Unschedulable { + if m.Started != nil { + i-- + if *m.Started { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + } + i -= len(m.ContainerID) + copy(dAtA[i:], m.ContainerID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerID))) + i-- + dAtA[i] = 0x42 + i -= len(m.ImageID) + copy(dAtA[i:], m.ImageID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImageID))) + i-- + dAtA[i] = 0x3a + i -= len(m.Image) + copy(dAtA[i:], m.Image) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) + i-- + dAtA[i] = 0x32 + i = encodeVarintGenerated(dAtA, i, uint64(m.RestartCount)) + i-- + dAtA[i] = 0x28 + i-- + if m.Ready { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if len(m.Taints) > 0 { - for _, msg := range m.Taints { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i-- + dAtA[i] = 0x20 + { + size, err := m.LastTerminationState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.ConfigSource != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigSource.Size())) - n93, err := m.ConfigSource.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x1a + { + size, err := m.State.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n93 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeStatus) Marshal() (dAtA []byte, err error) { +func (m *DaemonEndpoint) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *DaemonEndpoint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonEndpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Capacity) > 0 { - keysForCapacity := make([]string, 0, len(m.Capacity)) - for k := range m.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - for _, k := range keysForCapacity { - dAtA[i] = 0xa - i++ - v := m.Capacity[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n94, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n94 - } + i = encodeVarintGenerated(dAtA, i, uint64(m.Port)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *DownwardAPIProjection) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if len(m.Allocatable) > 0 { - keysForAllocatable := make([]string, 0, len(m.Allocatable)) - for k := range m.Allocatable { - keysForAllocatable = append(keysForAllocatable, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) - for _, k := range keysForAllocatable { - dAtA[i] = 0x12 - i++ - v := m.Allocatable[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + return dAtA[:n], nil +} + +func (m *DownwardAPIProjection) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DownwardAPIProjection) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n95, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n95 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i += copy(dAtA[i:], m.Phase) - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + return len(dAtA) - i, nil +} + +func (m *DownwardAPIVolumeFile) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DownwardAPIVolumeFile) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DownwardAPIVolumeFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Mode != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Mode)) + i-- + dAtA[i] = 0x20 + } + if m.ResourceFieldRef != nil { + { + size, err := m.ResourceFieldRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } - if len(m.Addresses) > 0 { - for _, msg := range m.Addresses { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.FieldRef != nil { + { + size, err := m.FieldRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DaemonEndpoints.Size())) - n96, err := m.DaemonEndpoints.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n96 - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodeInfo.Size())) - n97, err := m.NodeInfo.MarshalTo(dAtA[i:]) + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DownwardAPIVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err - } - i += n97 - if len(m.Images) > 0 { - for _, msg := range m.Images { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - if len(m.VolumesInUse) > 0 { - for _, s := range m.VolumesInUse { - dAtA[i] = 0x4a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + return dAtA[:n], nil +} + +func (m *DownwardAPIVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DownwardAPIVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DefaultMode != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x10 } - if len(m.VolumesAttached) > 0 { - for _, msg := range m.VolumesAttached { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n - } - } - if m.Config != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Config.Size())) - n98, err := m.Config.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0xa } - i += n98 } - return i, nil + return len(dAtA) - i, nil } -func (m *NodeSystemInfo) Marshal() (dAtA []byte, err error) { +func (m *EmptyDirVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *NodeSystemInfo) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EmptyDirVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EmptyDirVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.SizeLimit != nil { + { + size, err := m.SizeLimit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Medium) + copy(dAtA[i:], m.Medium) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Medium))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MachineID))) - i += copy(dAtA[i:], m.MachineID) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SystemUUID))) - i += copy(dAtA[i:], m.SystemUUID) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.BootID))) - i += copy(dAtA[i:], m.BootID) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.KernelVersion))) - i += copy(dAtA[i:], m.KernelVersion) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.OSImage))) - i += copy(dAtA[i:], m.OSImage) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerRuntimeVersion))) - i += copy(dAtA[i:], m.ContainerRuntimeVersion) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeletVersion))) - i += copy(dAtA[i:], m.KubeletVersion) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeProxyVersion))) - i += copy(dAtA[i:], m.KubeProxyVersion) - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.OperatingSystem))) - i += copy(dAtA[i:], m.OperatingSystem) - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Architecture))) - i += copy(dAtA[i:], m.Architecture) - return i, nil + return len(dAtA) - i, nil } -func (m *ObjectFieldSelector) Marshal() (dAtA []byte, err error) { +func (m *EndpointAddress) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ObjectFieldSelector) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EndpointAddress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.NodeName != nil { + i -= len(*m.NodeName) + copy(dAtA[i:], *m.NodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.NodeName))) + i-- + dAtA[i] = 0x22 + } + i -= len(m.Hostname) + copy(dAtA[i:], m.Hostname) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) + i-- + dAtA[i] = 0x1a + if m.TargetRef != nil { + { + size, err := m.TargetRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.IP) + copy(dAtA[i:], m.IP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldPath))) - i += copy(dAtA[i:], m.FieldPath) - return i, nil + return len(dAtA) - i, nil } -func (m *ObjectReference) Marshal() (dAtA []byte, err error) { +func (m *EndpointPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ObjectReference) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EndpointPort) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) + i -= len(m.Protocol) + copy(dAtA[i:], m.Protocol) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Protocol))) + i-- dAtA[i] = 0x1a - i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Port)) + i-- + dAtA[i] = 0x10 + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) - i += copy(dAtA[i:], m.ResourceVersion) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldPath))) - i += copy(dAtA[i:], m.FieldPath) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolume) Marshal() (dAtA []byte, err error) { +func (m *EndpointSubset) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolume) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EndpointSubset) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointSubset) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n99, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } } - i += n99 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n100, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.NotReadyAddresses) > 0 { + for iNdEx := len(m.NotReadyAddresses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NotReadyAddresses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n100 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n101, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Addresses) > 0 { + for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Addresses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - i += n101 - return i, nil + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaim) Marshal() (dAtA []byte, err error) { +func (m *Endpoints) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeClaim) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Endpoints) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Endpoints) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n102, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n102 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n103, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Subsets) > 0 { + for iNdEx := len(m.Subsets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subsets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n103 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n104, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n104 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaimCondition) Marshal() (dAtA []byte, err error) { +func (m *EndpointsList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeClaimCondition) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EndpointsList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointsList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n105, err := m.LastProbeTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n105 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n106, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n106 - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaimList) Marshal() (dAtA []byte, err error) { +func (m *EnvFromSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeClaimList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EnvFromSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EnvFromSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n107, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i += n107 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.ConfigMapRef != nil { + { + size, err := m.ConfigMapRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Prefix) + copy(dAtA[i:], m.Prefix) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Prefix))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaimSpec) Marshal() (dAtA []byte, err error) { +func (m *EnvVar) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EnvVar) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EnvVar) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.AccessModes) > 0 { - for _, s := range m.AccessModes { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ + if m.ValueFrom != nil { + { + size, err := m.ValueFrom.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size())) - n108, err := m.Resources.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n108 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) - i += copy(dAtA[i:], m.VolumeName) - if m.Selector != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n109, err := m.Selector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n109 - } - if m.StorageClassName != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.StorageClassName))) - i += copy(dAtA[i:], *m.StorageClassName) - } - if m.VolumeMode != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeMode))) - i += copy(dAtA[i:], *m.VolumeMode) - } - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaimStatus) Marshal() (dAtA []byte, err error) { +func (m *EnvVarSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeClaimStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EnvVarSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EnvVarSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i += copy(dAtA[i:], m.Phase) - if len(m.AccessModes) > 0 { - for _, s := range m.AccessModes { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.SecretKeyRef != nil { + { + size, err := m.SecretKeyRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } - if len(m.Capacity) > 0 { - keysForCapacity := make([]string, 0, len(m.Capacity)) - for k := range m.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - for _, k := range keysForCapacity { - dAtA[i] = 0x1a - i++ - v := m.Capacity[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + if m.ConfigMapKeyRef != nil { + { + size, err := m.ConfigMapKeyRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n110, err := (&v).MarshalTo(dAtA[i:]) + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.ResourceFieldRef != nil { + { + size, err := m.ResourceFieldRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n110 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.FieldRef != nil { + { + size, err := m.FieldRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaimVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *EphemeralContainer) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeClaimVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClaimName))) - i += copy(dAtA[i:], m.ClaimName) - dAtA[i] = 0x10 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil -} - -func (m *PersistentVolumeList) Marshal() (dAtA []byte, err error) { +func (m *EphemeralContainer) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PersistentVolumeList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EphemeralContainer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n111, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n111 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i -= len(m.TargetContainerName) + copy(dAtA[i:], m.TargetContainerName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetContainerName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.EphemeralContainerCommon.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *EphemeralContainerCommon) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EphemeralContainerCommon) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EphemeralContainerCommon) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.GCEPersistentDisk != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n112, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n112 - } - if m.AWSElasticBlockStore != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n113, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.StartupProbe != nil { + { + size, err := m.StartupProbe.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n113 + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 } - if m.HostPath != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n114, err := m.HostPath.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.VolumeDevices) > 0 { + for iNdEx := len(m.VolumeDevices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeDevices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa } - i += n114 } - if m.Glusterfs != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n115, err := m.Glusterfs.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.TerminationMessagePolicy) + copy(dAtA[i:], m.TerminationMessagePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePolicy))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + if len(m.EnvFrom) > 0 { + for iNdEx := len(m.EnvFrom) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EnvFrom[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a } - i += n115 } - if m.NFS != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n116, err := m.NFS.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n116 + i-- + if m.TTY { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if m.RBD != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n117, err := m.RBD.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n117 + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x90 + i-- + if m.StdinOnce { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if m.ISCSI != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n118, err := m.ISCSI.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n118 + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x88 + i-- + if m.Stdin { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if m.Cinder != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n119, err := m.Cinder.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + if m.SecurityContext != nil { + { + size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n119 + i-- + dAtA[i] = 0x7a } - if m.CephFS != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n120, err := m.CephFS.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.ImagePullPolicy) + copy(dAtA[i:], m.ImagePullPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImagePullPolicy))) + i-- + dAtA[i] = 0x72 + i -= len(m.TerminationMessagePath) + copy(dAtA[i:], m.TerminationMessagePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TerminationMessagePath))) + i-- + dAtA[i] = 0x6a + if m.Lifecycle != nil { + { + size, err := m.Lifecycle.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n120 + i-- + dAtA[i] = 0x62 } - if m.FC != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n121, err := m.FC.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.ReadinessProbe != nil { + { + size, err := m.ReadinessProbe.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n121 - } - if m.Flocker != nil { + i-- dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n122, err := m.Flocker.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n122 - } - if m.FlexVolume != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n123, err := m.FlexVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n123 } - if m.AzureFile != nil { - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n124, err := m.AzureFile.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.LivenessProbe != nil { + { + size, err := m.LivenessProbe.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n124 + i-- + dAtA[i] = 0x52 } - if m.VsphereVolume != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n125, err := m.VsphereVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.VolumeMounts) > 0 { + for iNdEx := len(m.VolumeMounts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeMounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a } - i += n125 } - if m.Quobyte != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n126, err := m.Quobyte.MarshalTo(dAtA[i:]) + { + size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n126 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.AzureDisk != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n127, err := m.AzureDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x42 + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a } - i += n127 } - if m.PhotonPersistentDisk != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n128, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 } - i += n128 } - if m.PortworxVolume != nil { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n129, err := m.PortworxVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.WorkingDir) + copy(dAtA[i:], m.WorkingDir) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WorkingDir))) + i-- + dAtA[i] = 0x2a + if len(m.Args) > 0 { + for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Args[iNdEx]) + copy(dAtA[i:], m.Args[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Args[iNdEx]))) + i-- + dAtA[i] = 0x22 } - i += n129 } - if m.ScaleIO != nil { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n130, err := m.ScaleIO.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- + dAtA[i] = 0x1a } - i += n130 } - if m.Local != nil { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Local.Size())) - n131, err := m.Local.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n131 + i -= len(m.Image) + copy(dAtA[i:], m.Image) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EphemeralContainers) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if m.StorageOS != nil { - dAtA[i] = 0xaa - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n132, err := m.StorageOS.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + return dAtA[:n], nil +} + +func (m *EphemeralContainers) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EphemeralContainers) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EphemeralContainers) > 0 { + for iNdEx := len(m.EphemeralContainers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EphemeralContainers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n132 } - if m.CSI != nil { - dAtA[i] = 0xb2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CSI.Size())) - n133, err := m.CSI.MarshalTo(dAtA[i:]) + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n133 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeSpec) Marshal() (dAtA []byte, err error) { +func (m *Event) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Event) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Capacity) > 0 { - keysForCapacity := make([]string, 0, len(m.Capacity)) - for k := range m.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - for _, k := range keysForCapacity { - dAtA[i] = 0xa - i++ - v := m.Capacity[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + i -= len(m.ReportingInstance) + copy(dAtA[i:], m.ReportingInstance) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingInstance))) + i-- + dAtA[i] = 0x7a + i -= len(m.ReportingController) + copy(dAtA[i:], m.ReportingController) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingController))) + i-- + dAtA[i] = 0x72 + if m.Related != nil { + { + size, err := m.Related.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n134, err := (&v).MarshalTo(dAtA[i:]) + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + i -= len(m.Action) + copy(dAtA[i:], m.Action) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Action))) + i-- + dAtA[i] = 0x62 + if m.Series != nil { + { + size, err := m.Series.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n134 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x5a } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeSource.Size())) - n135, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.EventTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n135 - if len(m.AccessModes) > 0 { - for _, s := range m.AccessModes { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x52 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0x4a + i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x40 + { + size, err := m.LastTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.ClaimRef != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ClaimRef.Size())) - n136, err := m.ClaimRef.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x3a + { + size, err := m.FirstTimestamp.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n136 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PersistentVolumeReclaimPolicy))) - i += copy(dAtA[i:], m.PersistentVolumeReclaimPolicy) + i-- dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageClassName))) - i += copy(dAtA[i:], m.StorageClassName) - if len(m.MountOptions) > 0 { - for _, s := range m.MountOptions { - dAtA[i] = 0x3a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + { + size, err := m.Source.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.VolumeMode != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeMode))) - i += copy(dAtA[i:], *m.VolumeMode) + i-- + dAtA[i] = 0x2a + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + { + size, err := m.InvolvedObject.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.NodeAffinity != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodeAffinity.Size())) - n137, err := m.NodeAffinity.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n137 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeStatus) Marshal() (dAtA []byte, err error) { +func (m *EventList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PersistentVolumeStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EventList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i += copy(dAtA[i:], m.Phase) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - return i, nil + return len(dAtA) - i, nil } -func (m *PhotonPersistentDiskVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *EventSeries) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PhotonPersistentDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EventSeries) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventSeries) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PdID))) - i += copy(dAtA[i:], m.PdID) + i -= len(m.State) + copy(dAtA[i:], m.State) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) + i-- + dAtA[i] = 0x1a + { + size, err := m.LastObservedTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *Pod) Marshal() (dAtA []byte, err error) { +func (m *EventSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Pod) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *EventSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n138, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n138 + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n139, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n139 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n140, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n140 - return i, nil + i -= len(m.Component) + copy(dAtA[i:], m.Component) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Component))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodAffinity) Marshal() (dAtA []byte, err error) { +func (m *ExecAction) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodAffinity) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ExecAction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExecAction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, msg := range m.RequiredDuringSchedulingIgnoredDuringExecution { + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n } } - return i, nil + return len(dAtA) - i, nil } -func (m *PodAffinityTerm) Marshal() (dAtA []byte, err error) { +func (m *FCVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *FCVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FCVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.LabelSelector != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LabelSelector.Size())) - n141, err := m.LabelSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.WWIDs) > 0 { + for iNdEx := len(m.WWIDs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.WWIDs[iNdEx]) + copy(dAtA[i:], m.WWIDs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WWIDs[iNdEx]))) + i-- + dAtA[i] = 0x2a } - i += n141 } - if len(m.Namespaces) > 0 { - for _, s := range m.Namespaces { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x20 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TopologyKey))) - i += copy(dAtA[i:], m.TopologyKey) - return i, nil + if m.Lun != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Lun)) + i-- + dAtA[i] = 0x10 + } + if len(m.TargetWWNs) > 0 { + for iNdEx := len(m.TargetWWNs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TargetWWNs[iNdEx]) + copy(dAtA[i:], m.TargetWWNs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetWWNs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *PodAntiAffinity) Marshal() (dAtA []byte, err error) { +func (m *FlexPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodAntiAffinity) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *FlexPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FlexPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, msg := range m.RequiredDuringSchedulingIgnoredDuringExecution { + if len(m.Options) > 0 { + keysForOptions := make([]string, 0, len(m.Options)) + for k := range m.Options { + keysForOptions = append(keysForOptions, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) + for iNdEx := len(keysForOptions) - 1; iNdEx >= 0; iNdEx-- { + v := m.Options[string(keysForOptions[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForOptions[iNdEx]) + copy(dAtA[i:], keysForOptions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForOptions[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a } } - if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } - return i, nil + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodAttachOptions) Marshal() (dAtA []byte, err error) { +func (m *FlexVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodAttachOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *FlexVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FlexVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Stdin { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x10 - i++ - if m.Stdout { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.Options) > 0 { + keysForOptions := make([]string, 0, len(m.Options)) + for k := range m.Options { + keysForOptions = append(keysForOptions, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) + for iNdEx := len(keysForOptions) - 1; iNdEx >= 0; iNdEx-- { + v := m.Options[string(keysForOptions[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForOptions[iNdEx]) + copy(dAtA[i:], keysForOptions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForOptions[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } } - i++ - dAtA[i] = 0x18 - i++ - if m.Stderr { + i-- + if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ + i-- dAtA[i] = 0x20 - i++ - if m.TTY { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i++ - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) - i += copy(dAtA[i:], m.Container) - return i, nil + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodCondition) Marshal() (dAtA []byte, err error) { +func (m *FlockerVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodCondition) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *FlockerVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FlockerVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) + i -= len(m.DatasetUUID) + copy(dAtA[i:], m.DatasetUUID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DatasetUUID))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n142, err := m.LastProbeTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n142 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n143, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n143 - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i -= len(m.DatasetName) + copy(dAtA[i:], m.DatasetName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DatasetName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodDNSConfig) Marshal() (dAtA []byte, err error) { +func (m *GCEPersistentDiskVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodDNSConfig) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Nameservers) > 0 { - for _, s := range m.Nameservers { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Searches) > 0 { - for _, s := range m.Searches { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.Options) > 0 { - for _, msg := range m.Options { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *PodDNSConfigOption) Marshal() (dAtA []byte, err error) { +func (m *GCEPersistentDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PodDNSConfigOption) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GCEPersistentDiskVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if m.Value != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Value))) - i += copy(dAtA[i:], *m.Value) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.Partition)) + i-- + dAtA[i] = 0x18 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.PDName) + copy(dAtA[i:], m.PDName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PDName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodExecOptions) Marshal() (dAtA []byte, err error) { +func (m *GitRepoVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodExecOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GitRepoVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitRepoVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Stdin { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x10 - i++ - if m.Stdout { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x18 - i++ - if m.Stderr { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x20 - i++ - if m.TTY { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) - i += copy(dAtA[i:], m.Container) - if len(m.Command) > 0 { - for _, s := range m.Command { - dAtA[i] = 0x32 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil + i -= len(m.Directory) + copy(dAtA[i:], m.Directory) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Directory))) + i-- + dAtA[i] = 0x1a + i -= len(m.Revision) + copy(dAtA[i:], m.Revision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Revision))) + i-- + dAtA[i] = 0x12 + i -= len(m.Repository) + copy(dAtA[i:], m.Repository) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Repository))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodList) Marshal() (dAtA []byte, err error) { +func (m *GlusterfsPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GlusterfsPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GlusterfsPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n144, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.EndpointsNamespace != nil { + i -= len(*m.EndpointsNamespace) + copy(dAtA[i:], *m.EndpointsNamespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.EndpointsNamespace))) + i-- + dAtA[i] = 0x22 } - i += n144 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x18 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + i -= len(m.EndpointsName) + copy(dAtA[i:], m.EndpointsName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EndpointsName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodLogOptions) Marshal() (dAtA []byte, err error) { +func (m *GlusterfsVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodLogOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GlusterfsVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GlusterfsVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) - i += copy(dAtA[i:], m.Container) - dAtA[i] = 0x10 - i++ - if m.Follow { + i-- + if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ + i-- dAtA[i] = 0x18 - i++ - if m.Previous { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SinceSeconds != nil { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.SinceSeconds)) - } - if m.SinceTime != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SinceTime.Size())) - n145, err := m.SinceTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n145 - } - dAtA[i] = 0x30 - i++ - if m.Timestamps { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.TailLines != nil { - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TailLines)) - } - if m.LimitBytes != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.LimitBytes)) - } - return i, nil + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + i -= len(m.EndpointsName) + copy(dAtA[i:], m.EndpointsName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EndpointsName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodPortForwardOptions) Marshal() (dAtA []byte, err error) { +func (m *HTTPGetAction) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodPortForwardOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *HTTPGetAction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HTTPGetAction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, num := range m.Ports { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(num)) + if len(m.HTTPHeaders) > 0 { + for iNdEx := len(m.HTTPHeaders) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HTTPHeaders[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } } - return i, nil + i -= len(m.Scheme) + copy(dAtA[i:], m.Scheme) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scheme))) + i-- + dAtA[i] = 0x22 + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0x1a + { + size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodProxyOptions) Marshal() (dAtA []byte, err error) { +func (m *HTTPHeader) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodProxyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *HTTPHeader) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HTTPHeader) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil + return len(dAtA) - i, nil } -func (m *PodReadinessGate) Marshal() (dAtA []byte, err error) { +func (m *Handler) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodReadinessGate) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Handler) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Handler) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConditionType))) - i += copy(dAtA[i:], m.ConditionType) - return i, nil + if m.TCPSocket != nil { + { + size, err := m.TCPSocket.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.HTTPGet != nil { + { + size, err := m.HTTPGet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Exec != nil { + { + size, err := m.Exec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *PodSecurityContext) Marshal() (dAtA []byte, err error) { +func (m *HostAlias) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *HostAlias) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostAlias) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.SELinuxOptions != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n146, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n146 - } - if m.RunAsUser != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsUser)) - } - if m.RunAsNonRoot != nil { - dAtA[i] = 0x18 - i++ - if *m.RunAsNonRoot { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if len(m.SupplementalGroups) > 0 { - for _, num := range m.SupplementalGroups { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(num)) - } - } - if m.FSGroup != nil { - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.FSGroup)) - } - if m.RunAsGroup != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsGroup)) - } - if len(m.Sysctls) > 0 { - for _, msg := range m.Sysctls { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.Hostnames) > 0 { + for iNdEx := len(m.Hostnames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Hostnames[iNdEx]) + copy(dAtA[i:], m.Hostnames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostnames[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.IP) + copy(dAtA[i:], m.IP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodSignature) Marshal() (dAtA []byte, err error) { +func (m *HostPathVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodSignature) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *HostPathVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostPathVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.PodController != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodController.Size())) - n147, err := m.PodController.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n147 + if m.Type != nil { + i -= len(*m.Type) + copy(dAtA[i:], *m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Type))) + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodSpec) Marshal() (dAtA []byte, err error) { +func (m *ISCSIPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ISCSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ISCSIPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Volumes) > 0 { - for _, msg := range m.Volumes { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + if m.InitiatorName != nil { + i -= len(*m.InitiatorName) + copy(dAtA[i:], *m.InitiatorName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.InitiatorName))) + i-- + dAtA[i] = 0x62 } - if len(m.Containers) > 0 { - for _, msg := range m.Containers { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i-- + if m.SessionCHAPAuth { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x52 } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RestartPolicy))) - i += copy(dAtA[i:], m.RestartPolicy) - if m.TerminationGracePeriodSeconds != nil { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TerminationGracePeriodSeconds)) - } - if m.ActiveDeadlineSeconds != nil { - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) + i-- + if m.DiscoveryCHAPAuth { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DNSPolicy))) - i += copy(dAtA[i:], m.DNSPolicy) - if len(m.NodeSelector) > 0 { - keysForNodeSelector := make([]string, 0, len(m.NodeSelector)) - for k := range m.NodeSelector { - keysForNodeSelector = append(keysForNodeSelector, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) - for _, k := range keysForNodeSelector { + i-- + dAtA[i] = 0x40 + if len(m.Portals) > 0 { + for iNdEx := len(m.Portals) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Portals[iNdEx]) + copy(dAtA[i:], m.Portals[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Portals[iNdEx]))) + i-- dAtA[i] = 0x3a - i++ - v := m.NodeSelector[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) } } - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccountName))) - i += copy(dAtA[i:], m.ServiceAccountName) - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DeprecatedServiceAccount))) - i += copy(dAtA[i:], m.DeprecatedServiceAccount) - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) - i += copy(dAtA[i:], m.NodeName) - dAtA[i] = 0x58 - i++ - if m.HostNetwork { + i-- + if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x60 - i++ - if m.HostPID { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x30 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x2a + i -= len(m.ISCSIInterface) + copy(dAtA[i:], m.ISCSIInterface) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ISCSIInterface))) + i-- + dAtA[i] = 0x22 + i = encodeVarintGenerated(dAtA, i, uint64(m.Lun)) + i-- + dAtA[i] = 0x18 + i -= len(m.IQN) + copy(dAtA[i:], m.IQN) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IQN))) + i-- + dAtA[i] = 0x12 + i -= len(m.TargetPortal) + copy(dAtA[i:], m.TargetPortal) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetPortal))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ISCSIVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - i++ - dAtA[i] = 0x68 - i++ - if m.HostIPC { + return dAtA[:n], nil +} + +func (m *ISCSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ISCSIVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.InitiatorName != nil { + i -= len(*m.InitiatorName) + copy(dAtA[i:], *m.InitiatorName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.InitiatorName))) + i-- + dAtA[i] = 0x62 + } + i-- + if m.SessionCHAPAuth { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if m.SecurityContext != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size())) - n148, err := m.SecurityContext.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n148 - } - if len(m.ImagePullSecrets) > 0 { - for _, msg := range m.ImagePullSecrets { - dAtA[i] = 0x7a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x58 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x52 } - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) - i += copy(dAtA[i:], m.Hostname) - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subdomain))) - i += copy(dAtA[i:], m.Subdomain) - if m.Affinity != nil { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Affinity.Size())) - n149, err := m.Affinity.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n149 + i-- + if m.DiscoveryCHAPAuth { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SchedulerName))) - i += copy(dAtA[i:], m.SchedulerName) - if len(m.InitContainers) > 0 { - for _, msg := range m.InitContainers { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i-- + dAtA[i] = 0x40 + if len(m.Portals) > 0 { + for iNdEx := len(m.Portals) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Portals[iNdEx]) + copy(dAtA[i:], m.Portals[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Portals[iNdEx]))) + i-- + dAtA[i] = 0x3a } } - if m.AutomountServiceAccountToken != nil { - dAtA[i] = 0xa8 - i++ - dAtA[i] = 0x1 - i++ - if *m.AutomountServiceAccountToken { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if len(m.Tolerations) > 0 { - for _, msg := range m.Tolerations { - dAtA[i] = 0xb2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i-- + dAtA[i] = 0x30 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x2a + i -= len(m.ISCSIInterface) + copy(dAtA[i:], m.ISCSIInterface) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ISCSIInterface))) + i-- + dAtA[i] = 0x22 + i = encodeVarintGenerated(dAtA, i, uint64(m.Lun)) + i-- + dAtA[i] = 0x18 + i -= len(m.IQN) + copy(dAtA[i:], m.IQN) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IQN))) + i-- + dAtA[i] = 0x12 + i -= len(m.TargetPortal) + copy(dAtA[i:], m.TargetPortal) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetPortal))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *KeyToPath) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if len(m.HostAliases) > 0 { - for _, msg := range m.HostAliases { - dAtA[i] = 0xba - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + return dAtA[:n], nil +} + +func (m *KeyToPath) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KeyToPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Mode != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Mode)) + i-- + dAtA[i] = 0x18 + } + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Lifecycle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Lifecycle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Lifecycle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PreStop != nil { + { + size, err := m.PreStop.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n - } - } - dAtA[i] = 0xc2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PriorityClassName))) - i += copy(dAtA[i:], m.PriorityClassName) - if m.Priority != nil { - dAtA[i] = 0xc8 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Priority)) - } - if m.DNSConfig != nil { - dAtA[i] = 0xd2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DNSConfig.Size())) - n150, err := m.DNSConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n150 - } - if m.ShareProcessNamespace != nil { - dAtA[i] = 0xd8 - i++ - dAtA[i] = 0x1 - i++ - if *m.ShareProcessNamespace { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i++ + i-- + dAtA[i] = 0x12 } - if len(m.ReadinessGates) > 0 { - for _, msg := range m.ReadinessGates { - dAtA[i] = 0xe2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.PostStart != nil { + { + size, err := m.PostStart.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func (m *PodStatus) Marshal() (dAtA []byte, err error) { +func (m *LimitRange) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i += copy(dAtA[i:], m.Phase) - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.HostIP))) - i += copy(dAtA[i:], m.HostIP) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodIP))) - i += copy(dAtA[i:], m.PodIP) - if m.StartTime != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size())) - n151, err := m.StartTime.MarshalTo(dAtA[i:]) +func (m *LimitRange) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LimitRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n151 - } - if len(m.ContainerStatuses) > 0 { - for _, msg := range m.ContainerStatuses { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.QOSClass))) - i += copy(dAtA[i:], m.QOSClass) - if len(m.InitContainerStatuses) > 0 { - for _, msg := range m.InitContainerStatuses { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.NominatedNodeName))) - i += copy(dAtA[i:], m.NominatedNodeName) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodStatusResult) Marshal() (dAtA []byte, err error) { +func (m *LimitRangeItem) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LimitRangeItem) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n152, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.MaxLimitRequestRatio) > 0 { + keysForMaxLimitRequestRatio := make([]string, 0, len(m.MaxLimitRequestRatio)) + for k := range m.MaxLimitRequestRatio { + keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) + for iNdEx := len(keysForMaxLimitRequestRatio) - 1; iNdEx >= 0; iNdEx-- { + v := m.MaxLimitRequestRatio[ResourceName(keysForMaxLimitRequestRatio[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForMaxLimitRequestRatio[iNdEx]) + copy(dAtA[i:], keysForMaxLimitRequestRatio[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMaxLimitRequestRatio[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x32 + } } - i += n152 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n153, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.DefaultRequest) > 0 { + keysForDefaultRequest := make([]string, 0, len(m.DefaultRequest)) + for k := range m.DefaultRequest { + keysForDefaultRequest = append(keysForDefaultRequest, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) + for iNdEx := len(keysForDefaultRequest) - 1; iNdEx >= 0; iNdEx-- { + v := m.DefaultRequest[ResourceName(keysForDefaultRequest[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForDefaultRequest[iNdEx]) + copy(dAtA[i:], keysForDefaultRequest[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForDefaultRequest[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Default) > 0 { + keysForDefault := make([]string, 0, len(m.Default)) + for k := range m.Default { + keysForDefault = append(keysForDefault, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) + for iNdEx := len(keysForDefault) - 1; iNdEx >= 0; iNdEx-- { + v := m.Default[ResourceName(keysForDefault[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForDefault[iNdEx]) + copy(dAtA[i:], keysForDefault[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForDefault[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } + } + if len(m.Min) > 0 { + keysForMin := make([]string, 0, len(m.Min)) + for k := range m.Min { + keysForMin = append(keysForMin, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMin) + for iNdEx := len(keysForMin) - 1; iNdEx >= 0; iNdEx-- { + v := m.Min[ResourceName(keysForMin[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForMin[iNdEx]) + copy(dAtA[i:], keysForMin[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMin[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } + } + if len(m.Max) > 0 { + keysForMax := make([]string, 0, len(m.Max)) + for k := range m.Max { + keysForMax = append(keysForMax, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMax) + for iNdEx := len(keysForMax) - 1; iNdEx >= 0; iNdEx-- { + v := m.Max[ResourceName(keysForMax[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForMax[iNdEx]) + copy(dAtA[i:], keysForMax[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMax[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } } - i += n153 - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodTemplate) Marshal() (dAtA []byte, err error) { +func (m *LimitRangeList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LimitRangeList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LimitRangeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n154, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n154 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n155, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n155 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodTemplateList) Marshal() (dAtA []byte, err error) { +func (m *LimitRangeSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LimitRangeSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LimitRangeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n156, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n156 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Limits) > 0 { + for iNdEx := len(m.Limits) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Limits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } -func (m *PodTemplateSpec) Marshal() (dAtA []byte, err error) { +func (m *List) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *List) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *List) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n157, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n157 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n158, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n158 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PortworxVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *LoadBalancerIngress) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PortworxVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LoadBalancerIngress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LoadBalancerIngress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) - i += copy(dAtA[i:], m.VolumeID) + i -= len(m.Hostname) + copy(dAtA[i:], m.Hostname) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil + i -= len(m.IP) + copy(dAtA[i:], m.IP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Preconditions) Marshal() (dAtA []byte, err error) { +func (m *LoadBalancerStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Preconditions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LoadBalancerStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LoadBalancerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.UID != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.UID))) - i += copy(dAtA[i:], *m.UID) + if len(m.Ingress) > 0 { + for iNdEx := len(m.Ingress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ingress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - return i, nil + return len(dAtA) - i, nil } -func (m *PreferAvoidPodsEntry) Marshal() (dAtA []byte, err error) { +func (m *LocalObjectReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LocalObjectReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LocalObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodSignature.Size())) - n159, err := m.PodSignature.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n159 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size())) - n160, err := m.EvictionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n160 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + return len(dAtA) - i, nil } -func (m *PreferredSchedulingTerm) Marshal() (dAtA []byte, err error) { +func (m *LocalVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LocalVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LocalVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Weight)) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Preference.Size())) - n161, err := m.Preference.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.FSType != nil { + i -= len(*m.FSType) + copy(dAtA[i:], *m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FSType))) + i-- + dAtA[i] = 0x12 } - i += n161 - return i, nil + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Probe) Marshal() (dAtA []byte, err error) { +func (m *NFSVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Probe) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NFSVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NFSVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Handler.Size())) - n162, err := m.Handler.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - i += n162 - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds)) + i-- dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TimeoutSeconds)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PeriodSeconds)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SuccessThreshold)) - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FailureThreshold)) - return i, nil + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + i -= len(m.Server) + copy(dAtA[i:], m.Server) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Server))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ProjectedVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *Namespace) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ProjectedVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Namespace) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Namespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Sources) > 0 { - for _, msg := range m.Sources { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.DefaultMode != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *QuobyteVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *NamespaceCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *QuobyteVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NamespaceCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespaceCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Registry))) - i += copy(dAtA[i:], m.Registry) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volume))) - i += copy(dAtA[i:], m.Volume) - dAtA[i] = 0x18 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i++ + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - return i, nil + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *RBDPersistentVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *NamespaceList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NamespaceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespaceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.CephMonitors) > 0 { - for _, s := range m.CephMonitors { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDImage))) - i += copy(dAtA[i:], m.RBDImage) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDPool))) - i += copy(dAtA[i:], m.RBDPool) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RadosUser))) - i += copy(dAtA[i:], m.RadosUser) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Keyring))) - i += copy(dAtA[i:], m.Keyring) - if m.SecretRef != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n163, err := m.SecretRef.MarshalTo(dAtA[i:]) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n163 - } - dAtA[i] = 0x40 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i++ - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *RBDVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *NamespaceSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NamespaceSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespaceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.CephMonitors) > 0 { - for _, s := range m.CephMonitors { + if len(m.Finalizers) > 0 { + for iNdEx := len(m.Finalizers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Finalizers[iNdEx]) + copy(dAtA[i:], m.Finalizers[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Finalizers[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDImage))) - i += copy(dAtA[i:], m.RBDImage) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDPool))) - i += copy(dAtA[i:], m.RBDPool) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.RadosUser))) - i += copy(dAtA[i:], m.RadosUser) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Keyring))) - i += copy(dAtA[i:], m.Keyring) - if m.SecretRef != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n164, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err } - i += n164 } - dAtA[i] = 0x40 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil + return len(dAtA) - i, nil } -func (m *RangeAllocation) Marshal() (dAtA []byte, err error) { +func (m *NamespaceStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NamespaceStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamespaceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n165, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n165 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) - i += copy(dAtA[i:], m.Range) - if m.Data != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Data))) - i += copy(dAtA[i:], m.Data) + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - return i, nil + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ReplicationController) Marshal() (dAtA []byte, err error) { +func (m *Node) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Node) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Node) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n166, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n166 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n167, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n167 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n168, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n168 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ReplicationControllerCondition) Marshal() (dAtA []byte, err error) { +func (m *NodeAddress) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeAddress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Address))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n169, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n169 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ReplicationControllerList) Marshal() (dAtA []byte, err error) { +func (m *NodeAffinity) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeAffinity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeAffinity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n170, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n170 - if len(m.Items) > 0 { - for _, msg := range m.Items { + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for iNdEx := len(m.PreferredDuringSchedulingIgnoredDuringExecution) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PreferredDuringSchedulingIgnoredDuringExecution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + } + } + if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { + { + size, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func (m *ReplicationControllerSpec) Marshal() (dAtA []byte, err error) { +func (m *NodeCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) - } - if len(m.Selector) > 0 { - keysForSelector := make([]string, 0, len(m.Selector)) - for k := range m.Selector { - keysForSelector = append(keysForSelector, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - for _, k := range keysForSelector { - dAtA[i] = 0x12 - i++ - v := m.Selector[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Template != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n171, err := m.Template.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastHeartbeatTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n171 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ReplicationControllerStatus) Marshal() (dAtA []byte, err error) { +func (m *NodeConfigSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ReplicationControllerStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeConfigSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeConfigSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) - if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.ConfigMap != nil { + { + size, err := m.ConfigMap.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - return i, nil + return len(dAtA) - i, nil } -func (m *ResourceFieldSelector) Marshal() (dAtA []byte, err error) { +func (m *NodeConfigStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeConfigStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeConfigStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerName))) - i += copy(dAtA[i:], m.ContainerName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) - i += copy(dAtA[i:], m.Resource) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size())) - n172, err := m.Divisor.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.Error) + copy(dAtA[i:], m.Error) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Error))) + i-- + dAtA[i] = 0x22 + if m.LastKnownGood != nil { + { + size, err := m.LastKnownGood.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Active != nil { + { + size, err := m.Active.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Assigned != nil { + { + size, err := m.Assigned.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - i += n172 - return i, nil + return len(dAtA) - i, nil } -func (m *ResourceQuota) Marshal() (dAtA []byte, err error) { +func (m *NodeDaemonEndpoints) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeDaemonEndpoints) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeDaemonEndpoints) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n173, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n173 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n174, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n174 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n175, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.KubeletEndpoint.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n175 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ResourceQuotaList) Marshal() (dAtA []byte, err error) { +func (m *NodeList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n176, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n176 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ResourceQuotaSpec) Marshal() (dAtA []byte, err error) { +func (m *NodeProxyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeProxyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeProxyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Hard) > 0 { - keysForHard := make([]string, 0, len(m.Hard)) - for k := range m.Hard { - keysForHard = append(keysForHard, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForHard) - for _, k := range keysForHard { - dAtA[i] = 0xa - i++ - v := m.Hard[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n177, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n177 - } - } - if len(m.Scopes) > 0 { - for _, s := range m.Scopes { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.ScopeSelector != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ScopeSelector.Size())) - n178, err := m.ScopeSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n178 - } - return i, nil + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ResourceQuotaStatus) Marshal() (dAtA []byte, err error) { +func (m *NodeResources) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeResources) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeResources) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Hard) > 0 { - keysForHard := make([]string, 0, len(m.Hard)) - for k := range m.Hard { - keysForHard = append(keysForHard, string(k)) + if len(m.Capacity) > 0 { + keysForCapacity := make([]string, 0, len(m.Capacity)) + for k := range m.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForHard) - for _, k := range keysForHard { - dAtA[i] = 0xa - i++ - v := m.Hard[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n179, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + for iNdEx := len(keysForCapacity) - 1; iNdEx >= 0; iNdEx-- { + v := m.Capacity[ResourceName(keysForCapacity[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n179 - } - } - if len(m.Used) > 0 { - keysForUsed := make([]string, 0, len(m.Used)) - for k := range m.Used { - keysForUsed = append(keysForUsed, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) - for _, k := range keysForUsed { + i-- dAtA[i] = 0x12 - i++ - v := m.Used[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForCapacity[iNdEx]) + copy(dAtA[i:], keysForCapacity[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCapacity[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n180, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n180 } } - return i, nil + return len(dAtA) - i, nil } -func (m *ResourceRequirements) Marshal() (dAtA []byte, err error) { +func (m *NodeSelector) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Limits) > 0 { - keysForLimits := make([]string, 0, len(m.Limits)) - for k := range m.Limits { - keysForLimits = append(keysForLimits, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) - for _, k := range keysForLimits { - dAtA[i] = 0xa - i++ - v := m.Limits[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n181, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n181 - } - } - if len(m.Requests) > 0 { - keysForRequests := make([]string, 0, len(m.Requests)) - for k := range m.Requests { - keysForRequests = append(keysForRequests, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) - for _, k := range keysForRequests { - dAtA[i] = 0x12 - i++ - v := m.Requests[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + if len(m.NodeSelectorTerms) > 0 { + for iNdEx := len(m.NodeSelectorTerms) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NodeSelectorTerms[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n182, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n182 } } - return i, nil + return len(dAtA) - i, nil } -func (m *SELinuxOptions) Marshal() (dAtA []byte, err error) { +func (m *NodeSelectorRequirement) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *SELinuxOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeSelectorRequirement) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeSelectorRequirement) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) + if len(m.Values) > 0 { + for iNdEx := len(m.Values) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Values[iNdEx]) + copy(dAtA[i:], m.Values[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Level))) - i += copy(dAtA[i:], m.Level) - return i, nil + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ScaleIOPersistentVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *NodeSelectorTerm) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeSelectorTerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeSelectorTerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Gateway))) - i += copy(dAtA[i:], m.Gateway) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.System))) - i += copy(dAtA[i:], m.System) - if m.SecretRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n183, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.MatchFields) > 0 { + for iNdEx := len(m.MatchFields) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchFields[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n183 } - dAtA[i] = 0x20 - i++ - if m.SSLEnabled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProtectionDomain))) - i += copy(dAtA[i:], m.ProtectionDomain) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePool))) - i += copy(dAtA[i:], m.StoragePool) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageMode))) - i += copy(dAtA[i:], m.StorageMode) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) - i += copy(dAtA[i:], m.VolumeName) - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x50 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.MatchExpressions) > 0 { + for iNdEx := len(m.MatchExpressions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchExpressions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - i++ - return i, nil + return len(dAtA) - i, nil } -func (m *ScaleIOVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *NodeSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Gateway))) - i += copy(dAtA[i:], m.Gateway) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.System))) - i += copy(dAtA[i:], m.System) - if m.SecretRef != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n184, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.PodCIDRs) > 0 { + for iNdEx := len(m.PodCIDRs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.PodCIDRs[iNdEx]) + copy(dAtA[i:], m.PodCIDRs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodCIDRs[iNdEx]))) + i-- + dAtA[i] = 0x3a } - i += n184 } - dAtA[i] = 0x20 - i++ - if m.SSLEnabled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.ConfigSource != nil { + { + size, err := m.ConfigSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 } - i++ - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProtectionDomain))) - i += copy(dAtA[i:], m.ProtectionDomain) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePool))) - i += copy(dAtA[i:], m.StoragePool) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageMode))) - i += copy(dAtA[i:], m.StorageMode) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) - i += copy(dAtA[i:], m.VolumeName) - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x50 - i++ - if m.ReadOnly { + if len(m.Taints) > 0 { + for iNdEx := len(m.Taints) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Taints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + i-- + if m.Unschedulable { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - return i, nil + i-- + dAtA[i] = 0x20 + i -= len(m.ProviderID) + copy(dAtA[i:], m.ProviderID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProviderID))) + i-- + dAtA[i] = 0x1a + i -= len(m.DoNotUse_ExternalID) + copy(dAtA[i:], m.DoNotUse_ExternalID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DoNotUse_ExternalID))) + i-- + dAtA[i] = 0x12 + i -= len(m.PodCIDR) + copy(dAtA[i:], m.PodCIDR) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodCIDR))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ScopeSelector) Marshal() (dAtA []byte, err error) { +func (m *NodeStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ScopeSelector) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.MatchExpressions) > 0 { - for _, msg := range m.MatchExpressions { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.Config != nil { + { + size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + if len(m.VolumesAttached) > 0 { + for iNdEx := len(m.VolumesAttached) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumesAttached[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + } + if len(m.VolumesInUse) > 0 { + for iNdEx := len(m.VolumesInUse) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.VolumesInUse[iNdEx]) + copy(dAtA[i:], m.VolumesInUse[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumesInUse[iNdEx]))) + i-- + dAtA[i] = 0x4a + } + } + if len(m.Images) > 0 { + for iNdEx := len(m.Images) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Images[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + { + size, err := m.NodeInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.DaemonEndpoints.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.Addresses) > 0 { + for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Addresses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0x1a + if len(m.Allocatable) > 0 { + keysForAllocatable := make([]string, 0, len(m.Allocatable)) + for k := range m.Allocatable { + keysForAllocatable = append(keysForAllocatable, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) + for iNdEx := len(keysForAllocatable) - 1; iNdEx >= 0; iNdEx-- { + v := m.Allocatable[ResourceName(keysForAllocatable[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForAllocatable[iNdEx]) + copy(dAtA[i:], keysForAllocatable[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAllocatable[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Capacity) > 0 { + keysForCapacity := make([]string, 0, len(m.Capacity)) + for k := range m.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + for iNdEx := len(keysForCapacity) - 1; iNdEx >= 0; iNdEx-- { + v := m.Capacity[ResourceName(keysForCapacity[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCapacity[iNdEx]) + copy(dAtA[i:], keysForCapacity[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCapacity[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } -func (m *ScopedResourceSelectorRequirement) Marshal() (dAtA []byte, err error) { +func (m *NodeSystemInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ScopedResourceSelectorRequirement) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *NodeSystemInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NodeSystemInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ScopeName))) - i += copy(dAtA[i:], m.ScopeName) + i -= len(m.Architecture) + copy(dAtA[i:], m.Architecture) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Architecture))) + i-- + dAtA[i] = 0x52 + i -= len(m.OperatingSystem) + copy(dAtA[i:], m.OperatingSystem) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.OperatingSystem))) + i-- + dAtA[i] = 0x4a + i -= len(m.KubeProxyVersion) + copy(dAtA[i:], m.KubeProxyVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeProxyVersion))) + i-- + dAtA[i] = 0x42 + i -= len(m.KubeletVersion) + copy(dAtA[i:], m.KubeletVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeletVersion))) + i-- + dAtA[i] = 0x3a + i -= len(m.ContainerRuntimeVersion) + copy(dAtA[i:], m.ContainerRuntimeVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerRuntimeVersion))) + i-- + dAtA[i] = 0x32 + i -= len(m.OSImage) + copy(dAtA[i:], m.OSImage) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.OSImage))) + i-- + dAtA[i] = 0x2a + i -= len(m.KernelVersion) + copy(dAtA[i:], m.KernelVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.KernelVersion))) + i-- + dAtA[i] = 0x22 + i -= len(m.BootID) + copy(dAtA[i:], m.BootID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.BootID))) + i-- + dAtA[i] = 0x1a + i -= len(m.SystemUUID) + copy(dAtA[i:], m.SystemUUID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SystemUUID))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) - i += copy(dAtA[i:], m.Operator) - if len(m.Values) > 0 { - for _, s := range m.Values { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - return i, nil + i -= len(m.MachineID) + copy(dAtA[i:], m.MachineID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MachineID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Secret) Marshal() (dAtA []byte, err error) { +func (m *ObjectFieldSelector) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Secret) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ObjectFieldSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectFieldSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.FieldPath) + copy(dAtA[i:], m.FieldPath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldPath))) + i-- + dAtA[i] = 0x12 + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n185, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + return len(dAtA) - i, nil +} + +func (m *ObjectReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err - } - i += n185 - if len(m.Data) > 0 { - keysForData := make([]string, 0, len(m.Data)) - for k := range m.Data { - keysForData = append(keysForData, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForData) - for _, k := range keysForData { - dAtA[i] = 0x12 - i++ - v := m.Data[string(k)] - byteSize := 0 - if v != nil { - byteSize = 1 + len(v) + sovGenerated(uint64(len(v))) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + byteSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - if v != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if len(m.StringData) > 0 { - keysForStringData := make([]string, 0, len(m.StringData)) - for k := range m.StringData { - keysForStringData = append(keysForStringData, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) - for _, k := range keysForStringData { - dAtA[i] = 0x22 - i++ - v := m.StringData[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - return i, nil -} - -func (m *SecretEnvSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + return nil, err } return dAtA[:n], nil } -func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n186, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n186 - if m.Optional != nil { - dAtA[i] = 0x10 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil -} - -func (m *SecretKeySelector) Marshal() (dAtA []byte, err error) { +func (m *ObjectReference) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n187, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n187 + i -= len(m.FieldPath) + copy(dAtA[i:], m.FieldPath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldPath))) + i-- + dAtA[i] = 0x3a + i -= len(m.ResourceVersion) + copy(dAtA[i:], m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i-- + dAtA[i] = 0x32 + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x2a + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - if m.Optional != nil { - dAtA[i] = 0x18 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - return i, nil + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *SecretList) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolume) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *SecretList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n188, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n188 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *SecretProjection) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolume) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n189, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n189 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Optional != nil { - dAtA[i] = 0x20 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i++ + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *SecretReference) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaim) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - return i, nil -} - -func (m *SecretVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaim) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *SecretVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeClaim) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) - i += copy(dAtA[i:], m.SecretName) - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.DefaultMode != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Optional != nil { - dAtA[i] = 0x20 - i++ - if *m.Optional { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i++ + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *SecurityContext) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaimCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeClaimCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeClaimCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Capabilities != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size())) - n190, err := m.Capabilities.MarshalTo(dAtA[i:]) + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n190 - } - if m.Privileged != nil { - dAtA[i] = 0x10 - i++ - if *m.Privileged { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.SELinuxOptions != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n191, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastProbeTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n191 - } - if m.RunAsUser != nil { - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsUser)) - } - if m.RunAsNonRoot != nil { - dAtA[i] = 0x28 - i++ - if *m.RunAsNonRoot { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.ReadOnlyRootFilesystem != nil { - dAtA[i] = 0x30 - i++ - if *m.ReadOnlyRootFilesystem { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.AllowPrivilegeEscalation != nil { - dAtA[i] = 0x38 - i++ - if *m.AllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.RunAsGroup != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsGroup)) + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *SerializedReference) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaimList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size())) - n192, err := m.Reference.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n192 - return i, nil -} - -func (m *Service) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaimList) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Service) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeClaimList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n193, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n193 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n194, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n194 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n195, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n195 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ServiceAccount) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaimSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeClaimSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n196, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n196 - if len(m.Secrets) > 0 { - for _, msg := range m.Secrets { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.DataSource != nil { + { + size, err := m.DataSource.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x3a } - if len(m.ImagePullSecrets) > 0 { - for _, msg := range m.ImagePullSecrets { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.VolumeMode != nil { + i -= len(*m.VolumeMode) + copy(dAtA[i:], *m.VolumeMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeMode))) + i-- + dAtA[i] = 0x32 + } + if m.StorageClassName != nil { + i -= len(*m.StorageClassName) + copy(dAtA[i:], *m.StorageClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.StorageClassName))) + i-- + dAtA[i] = 0x2a + } + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } - if m.AutomountServiceAccountToken != nil { - dAtA[i] = 0x20 - i++ - if *m.AutomountServiceAccountToken { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i -= len(m.VolumeName) + copy(dAtA[i:], m.VolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) + i-- + dAtA[i] = 0x1a + { + size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.AccessModes) > 0 { + for iNdEx := len(m.AccessModes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AccessModes[iNdEx]) + copy(dAtA[i:], m.AccessModes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AccessModes[iNdEx]))) + i-- + dAtA[i] = 0xa } - i++ } - return i, nil + return len(dAtA) - i, nil } -func (m *ServiceAccountList) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaimStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeClaimStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeClaimStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n197, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } } - i += n197 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Capacity) > 0 { + keysForCapacity := make([]string, 0, len(m.Capacity)) + for k := range m.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + for iNdEx := len(keysForCapacity) - 1; iNdEx >= 0; iNdEx-- { + v := m.Capacity[ResourceName(keysForCapacity[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + i -= len(keysForCapacity[iNdEx]) + copy(dAtA[i:], keysForCapacity[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCapacity[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } + } + if len(m.AccessModes) > 0 { + for iNdEx := len(m.AccessModes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AccessModes[iNdEx]) + copy(dAtA[i:], m.AccessModes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AccessModes[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ServiceAccountTokenProjection) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeClaimVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ServiceAccountTokenProjection) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeClaimVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeClaimVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audience))) - i += copy(dAtA[i:], m.Audience) - if m.ExpirationSeconds != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ExpirationSeconds)) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil + i-- + dAtA[i] = 0x10 + i -= len(m.ClaimName) + copy(dAtA[i:], m.ClaimName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClaimName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ServiceList) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n198, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n198 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil -} - -func (m *ServicePort) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return dAtA[:n], nil -} - -func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Protocol))) - i += copy(dAtA[i:], m.Protocol) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port)) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size())) - n199, err := m.TargetPort.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n199 - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort)) - return i, nil + return len(dAtA) - i, nil } -func (m *ServiceProxyOptions) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ServiceProxyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - return i, nil -} - -func (m *ServiceSpec) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.CSI != nil { + { + size, err := m.CSI.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 } - if len(m.Selector) > 0 { - keysForSelector := make([]string, 0, len(m.Selector)) - for k := range m.Selector { - keysForSelector = append(keysForSelector, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - for _, k := range keysForSelector { - dAtA[i] = 0x12 - i++ - v := m.Selector[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) + if m.StorageOS != nil { + { + size, err := m.StorageOS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClusterIP))) - i += copy(dAtA[i:], m.ClusterIP) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - if len(m.ExternalIPs) > 0 { - for _, s := range m.ExternalIPs { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.Local != nil { + { + size, err := m.Local.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 } - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SessionAffinity))) - i += copy(dAtA[i:], m.SessionAffinity) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.LoadBalancerIP))) - i += copy(dAtA[i:], m.LoadBalancerIP) - if len(m.LoadBalancerSourceRanges) > 0 { - for _, s := range m.LoadBalancerSourceRanges { - dAtA[i] = 0x4a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.ScaleIO != nil { + { + size, err := m.ScaleIO.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a } - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExternalName))) - i += copy(dAtA[i:], m.ExternalName) - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExternalTrafficPolicy))) - i += copy(dAtA[i:], m.ExternalTrafficPolicy) - dAtA[i] = 0x60 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HealthCheckNodePort)) - dAtA[i] = 0x68 - i++ - if m.PublishNotReadyAddresses { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.PortworxVolume != nil { + { + size, err := m.PortworxVolume.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 } - i++ - if m.SessionAffinityConfig != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size())) - n200, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.PhotonPersistentDisk != nil { + { + size, err := m.PhotonPersistentDisk.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n200 + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a } - return i, nil -} + if m.AzureDisk != nil { + { + size, err := m.AzureDisk.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if m.Quobyte != nil { + { + size, err := m.Quobyte.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + } + if m.VsphereVolume != nil { + { + size, err := m.VsphereVolume.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + } + if m.AzureFile != nil { + { + size, err := m.AzureFile.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + if m.FlexVolume != nil { + { + size, err := m.FlexVolume.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + if m.Flocker != nil { + { + size, err := m.Flocker.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + if m.FC != nil { + { + size, err := m.FC.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if m.CephFS != nil { + { + size, err := m.CephFS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if m.Cinder != nil { + { + size, err := m.Cinder.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.ISCSI != nil { + { + size, err := m.ISCSI.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.RBD != nil { + { + size, err := m.RBD.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.NFS != nil { + { + size, err := m.NFS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Glusterfs != nil { + { + size, err := m.Glusterfs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.HostPath != nil { + { + size, err := m.HostPath.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.AWSElasticBlockStore != nil { + { + size, err := m.AWSElasticBlockStore.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.GCEPersistentDisk != nil { + { + size, err := m.GCEPersistentDisk.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} -func (m *ServiceStatus) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) - n201, err := m.LoadBalancer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.NodeAffinity != nil { + { + size, err := m.NodeAffinity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if m.VolumeMode != nil { + i -= len(*m.VolumeMode) + copy(dAtA[i:], *m.VolumeMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeMode))) + i-- + dAtA[i] = 0x42 + } + if len(m.MountOptions) > 0 { + for iNdEx := len(m.MountOptions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.MountOptions[iNdEx]) + copy(dAtA[i:], m.MountOptions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MountOptions[iNdEx]))) + i-- + dAtA[i] = 0x3a + } + } + i -= len(m.StorageClassName) + copy(dAtA[i:], m.StorageClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageClassName))) + i-- + dAtA[i] = 0x32 + i -= len(m.PersistentVolumeReclaimPolicy) + copy(dAtA[i:], m.PersistentVolumeReclaimPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PersistentVolumeReclaimPolicy))) + i-- + dAtA[i] = 0x2a + if m.ClaimRef != nil { + { + size, err := m.ClaimRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.AccessModes) > 0 { + for iNdEx := len(m.AccessModes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AccessModes[iNdEx]) + copy(dAtA[i:], m.AccessModes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AccessModes[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.PersistentVolumeSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Capacity) > 0 { + keysForCapacity := make([]string, 0, len(m.Capacity)) + for k := range m.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + for iNdEx := len(keysForCapacity) - 1; iNdEx >= 0; iNdEx-- { + v := m.Capacity[ResourceName(keysForCapacity[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCapacity[iNdEx]) + copy(dAtA[i:], keysForCapacity[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCapacity[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } } - i += n201 - return i, nil + return len(dAtA) - i, nil } -func (m *SessionAffinityConfig) Marshal() (dAtA []byte, err error) { +func (m *PersistentVolumeStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PersistentVolumeStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PersistentVolumeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.ClientIP != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size())) - n202, err := m.ClientIP.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n202 - } - return i, nil + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *StorageOSPersistentVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *PhotonPersistentDiskVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PhotonPersistentDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PhotonPersistentDiskVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) - i += copy(dAtA[i:], m.VolumeName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeNamespace))) - i += copy(dAtA[i:], m.VolumeNamespace) - dAtA[i] = 0x1a - i++ + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if m.SecretRef != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n203, err := m.SecretRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n203 - } - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.PdID) + copy(dAtA[i:], m.PdID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PdID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *StorageOSVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *Pod) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Pod) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Pod) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) - i += copy(dAtA[i:], m.VolumeName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeNamespace))) - i += copy(dAtA[i:], m.VolumeNamespace) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x20 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i++ - if m.SecretRef != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n204, err := m.SecretRef.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n204 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Sysctl) Marshal() (dAtA []byte, err error) { +func (m *PodAffinity) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Sysctl) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - return i, nil -} - -func (m *TCPSocketAction) Marshal() (dAtA []byte, err error) { +func (m *PodAffinity) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodAffinity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n205, err := m.Port.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for iNdEx := len(m.PreferredDuringSchedulingIgnoredDuringExecution) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PreferredDuringSchedulingIgnoredDuringExecution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - i += n205 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) - i += copy(dAtA[i:], m.Host) - return i, nil + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for iNdEx := len(m.RequiredDuringSchedulingIgnoredDuringExecution) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RequiredDuringSchedulingIgnoredDuringExecution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *Taint) Marshal() (dAtA []byte, err error) { +func (m *PodAffinityTerm) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Taint) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodAffinityTerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) + i -= len(m.TopologyKey) + copy(dAtA[i:], m.TopologyKey) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TopologyKey))) + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Effect))) - i += copy(dAtA[i:], m.Effect) - if m.TimeAdded != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size())) - n206, err := m.TimeAdded.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Namespaces) > 0 { + for iNdEx := len(m.Namespaces) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Namespaces[iNdEx]) + copy(dAtA[i:], m.Namespaces[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespaces[iNdEx]))) + i-- + dAtA[i] = 0x12 } - i += n206 } - return i, nil + if m.LabelSelector != nil { + { + size, err := m.LabelSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *Toleration) Marshal() (dAtA []byte, err error) { +func (m *PodAntiAffinity) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Toleration) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodAntiAffinity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodAntiAffinity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) - i += copy(dAtA[i:], m.Operator) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Effect))) - i += copy(dAtA[i:], m.Effect) - if m.TolerationSeconds != nil { - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TolerationSeconds)) + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for iNdEx := len(m.PreferredDuringSchedulingIgnoredDuringExecution) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PreferredDuringSchedulingIgnoredDuringExecution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - return i, nil + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for iNdEx := len(m.RequiredDuringSchedulingIgnoredDuringExecution) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.RequiredDuringSchedulingIgnoredDuringExecution[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *TopologySelectorLabelRequirement) Marshal() (dAtA []byte, err error) { +func (m *PodAttachOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *TopologySelectorLabelRequirement) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodAttachOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodAttachOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - if len(m.Values) > 0 { - for _, s := range m.Values { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + i -= len(m.Container) + copy(dAtA[i:], m.Container) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) + i-- + dAtA[i] = 0x2a + i-- + if m.TTY { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + i-- + if m.Stderr { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i-- + if m.Stdout { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i-- + if m.Stdin { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *TopologySelectorTerm) Marshal() (dAtA []byte, err error) { +func (m *PodCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *TopologySelectorTerm) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.MatchLabelExpressions) > 0 { - for _, msg := range m.MatchLabelExpressions { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.LastProbeTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Volume) Marshal() (dAtA []byte, err error) { +func (m *PodDNSConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Volume) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodDNSConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDNSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size())) - n207, err := m.VolumeSource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Options) > 0 { + for iNdEx := len(m.Options) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Options[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Searches) > 0 { + for iNdEx := len(m.Searches) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Searches[iNdEx]) + copy(dAtA[i:], m.Searches[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Searches[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Nameservers) > 0 { + for iNdEx := len(m.Nameservers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Nameservers[iNdEx]) + copy(dAtA[i:], m.Nameservers[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Nameservers[iNdEx]))) + i-- + dAtA[i] = 0xa + } } - i += n207 - return i, nil + return len(dAtA) - i, nil } -func (m *VolumeDevice) Marshal() (dAtA []byte, err error) { +func (m *PodDNSConfigOption) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VolumeDevice) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodDNSConfigOption) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDNSConfigOption) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + if m.Value != nil { + i -= len(*m.Value) + copy(dAtA[i:], *m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Value))) + i-- + dAtA[i] = 0x12 + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.DevicePath))) - i += copy(dAtA[i:], m.DevicePath) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *VolumeMount) Marshal() (dAtA []byte, err error) { +func (m *PodExecOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VolumeMount) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodExecOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodExecOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x10 - i++ - if m.ReadOnly { + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + i -= len(m.Container) + copy(dAtA[i:], m.Container) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) + i-- + dAtA[i] = 0x2a + i-- + if m.TTY { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MountPath))) - i += copy(dAtA[i:], m.MountPath) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SubPath))) - i += copy(dAtA[i:], m.SubPath) - if m.MountPropagation != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MountPropagation))) - i += copy(dAtA[i:], *m.MountPropagation) + i-- + dAtA[i] = 0x20 + i-- + if m.Stderr { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i-- + if m.Stdout { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i-- + if m.Stdin { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *VolumeNodeAffinity) Marshal() (dAtA []byte, err error) { +func (m *PodIP) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VolumeNodeAffinity) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodIP) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodIP) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Required != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Required.Size())) - n208, err := m.Required.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n208 - } - return i, nil + i -= len(m.IP) + copy(dAtA[i:], m.IP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *VolumeProjection) Marshal() (dAtA []byte, err error) { +func (m *PodList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Secret != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n209, err := m.Secret.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n209 - } - if m.DownwardAPI != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n210, err := m.DownwardAPI.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n210 - } - if m.ConfigMap != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n211, err := m.ConfigMap.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n211 } - if m.ServiceAccountToken != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ServiceAccountToken.Size())) - n212, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n212 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *VolumeSource) Marshal() (dAtA []byte, err error) { +func (m *PodLogOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodLogOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodLogOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.HostPath != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n213, err := m.HostPath.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n213 + if m.LimitBytes != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LimitBytes)) + i-- + dAtA[i] = 0x40 } - if m.EmptyDir != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) - n214, err := m.EmptyDir.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n214 + if m.TailLines != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TailLines)) + i-- + dAtA[i] = 0x38 } - if m.GCEPersistentDisk != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n215, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n215 + i-- + if m.Timestamps { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if m.AWSElasticBlockStore != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n216, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x30 + if m.SinceTime != nil { + { + size, err := m.SinceTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n216 - } - if m.GitRepo != nil { + i-- dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) - n217, err := m.GitRepo.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n217 - } - if m.Secret != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n218, err := m.Secret.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n218 - } - if m.NFS != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n219, err := m.NFS.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n219 - } - if m.ISCSI != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n220, err := m.ISCSI.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n220 - } - if m.Glusterfs != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n221, err := m.Glusterfs.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n221 - } - if m.PersistentVolumeClaim != nil { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) - n222, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n222 - } - if m.RBD != nil { - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n223, err := m.RBD.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n223 - } - if m.FlexVolume != nil { - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n224, err := m.FlexVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n224 - } - if m.Cinder != nil { - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n225, err := m.Cinder.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n225 - } - if m.CephFS != nil { - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n226, err := m.CephFS.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n226 - } - if m.Flocker != nil { - dAtA[i] = 0x7a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n227, err := m.Flocker.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n227 - } - if m.DownwardAPI != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n228, err := m.DownwardAPI.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n228 - } - if m.FC != nil { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n229, err := m.FC.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n229 - } - if m.AzureFile != nil { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n230, err := m.AzureFile.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n230 - } - if m.ConfigMap != nil { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n231, err := m.ConfigMap.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n231 - } - if m.VsphereVolume != nil { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n232, err := m.VsphereVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n232 - } - if m.Quobyte != nil { - dAtA[i] = 0xaa - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n233, err := m.Quobyte.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n233 - } - if m.AzureDisk != nil { - dAtA[i] = 0xb2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n234, err := m.AzureDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n234 - } - if m.PhotonPersistentDisk != nil { - dAtA[i] = 0xba - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n235, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n235 - } - if m.PortworxVolume != nil { - dAtA[i] = 0xc2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n236, err := m.PortworxVolume.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n236 } - if m.ScaleIO != nil { - dAtA[i] = 0xca - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n237, err := m.ScaleIO.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n237 + if m.SinceSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SinceSeconds)) + i-- + dAtA[i] = 0x20 } - if m.Projected != nil { - dAtA[i] = 0xd2 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size())) - n238, err := m.Projected.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n238 + i-- + if m.Previous { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if m.StorageOS != nil { - dAtA[i] = 0xda - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n239, err := m.StorageOS.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n239 + i-- + dAtA[i] = 0x18 + i-- + if m.Follow { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x10 + i -= len(m.Container) + copy(dAtA[i:], m.Container) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *VsphereVirtualDiskVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *PodPortForwardOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VsphereVirtualDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodPortForwardOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodPortForwardOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumePath))) - i += copy(dAtA[i:], m.VolumePath) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) - i += copy(dAtA[i:], m.FSType) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePolicyName))) - i += copy(dAtA[i:], m.StoragePolicyName) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePolicyID))) - i += copy(dAtA[i:], m.StoragePolicyID) - return i, nil + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + i = encodeVarintGenerated(dAtA, i, uint64(m.Ports[iNdEx])) + i-- + dAtA[i] = 0x8 + } + } + return len(dAtA) - i, nil } -func (m *WeightedPodAffinityTerm) Marshal() (dAtA []byte, err error) { +func (m *PodProxyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PodProxyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodProxyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Weight)) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size())) - n240, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodReadinessGate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err + return nil, err } - i += n240 - return i, nil + return dAtA[:n], nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 +func (m *PodReadinessGate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AWSElasticBlockStoreVolumeSource) Size() (n int) { + +func (m *PodReadinessGate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.VolumeID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Partition)) - n += 2 - return n + i -= len(m.ConditionType) + copy(dAtA[i:], m.ConditionType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ConditionType))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Affinity) Size() (n int) { - var l int - _ = l - if m.NodeAffinity != nil { - l = m.NodeAffinity.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.PodAffinity != nil { - l = m.PodAffinity.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.PodAntiAffinity != nil { - l = m.PodAntiAffinity.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *PodSecurityContext) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *AttachedVolume) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.DevicePath) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AvoidPods) Size() (n int) { +func (m *PodSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.PreferAvoidPods) > 0 { - for _, e := range m.PreferAvoidPods { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.WindowsOptions != nil { + { + size, err := m.WindowsOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x42 } - return n -} - -func (m *AzureDiskVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.DiskName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.DataDiskURI) - n += 1 + l + sovGenerated(uint64(l)) - if m.CachingMode != nil { - l = len(*m.CachingMode) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Sysctls) > 0 { + for iNdEx := len(m.Sysctls) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Sysctls[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } } - if m.FSType != nil { - l = len(*m.FSType) - n += 1 + l + sovGenerated(uint64(l)) + if m.RunAsGroup != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsGroup)) + i-- + dAtA[i] = 0x30 } - if m.ReadOnly != nil { - n += 2 + if m.FSGroup != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FSGroup)) + i-- + dAtA[i] = 0x28 } - if m.Kind != nil { - l = len(*m.Kind) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.SupplementalGroups) > 0 { + for iNdEx := len(m.SupplementalGroups) - 1; iNdEx >= 0; iNdEx-- { + i = encodeVarintGenerated(dAtA, i, uint64(m.SupplementalGroups[iNdEx])) + i-- + dAtA[i] = 0x20 + } } - return n -} - -func (m *AzureFilePersistentVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.SecretName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ShareName) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if m.SecretNamespace != nil { - l = len(*m.SecretNamespace) - n += 1 + l + sovGenerated(uint64(l)) + if m.RunAsNonRoot != nil { + i-- + if *m.RunAsNonRoot { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 } - return n + if m.RunAsUser != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsUser)) + i-- + dAtA[i] = 0x10 + } + if m.SELinuxOptions != nil { + { + size, err := m.SELinuxOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *AzureFileVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.SecretName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ShareName) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n +func (m *PodSignature) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *Binding) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Target.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PodSignature) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *CSIPersistentVolumeSource) Size() (n int) { +func (m *PodSignature) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Driver) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.VolumeHandle) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.VolumeAttributes) > 0 { - for k, v := range m.VolumeAttributes { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if m.PodController != nil { + { + size, err := m.PodController.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - if m.ControllerPublishSecretRef != nil { - l = m.ControllerPublishSecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.NodeStageSecretRef != nil { - l = m.NodeStageSecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.NodePublishSecretRef != nil { - l = m.NodePublishSecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + return len(dAtA) - i, nil +} + +func (m *PodSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *Capabilities) Size() (n int) { +func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Add) > 0 { - for _, s := range m.Add { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.EphemeralContainers) > 0 { + for iNdEx := len(m.EphemeralContainers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EphemeralContainers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x92 } } - if len(m.Drop) > 0 { - for _, s := range m.Drop { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.TopologySpreadConstraints) > 0 { + for iNdEx := len(m.TopologySpreadConstraints) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TopologySpreadConstraints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x8a + } + } + if len(m.Overhead) > 0 { + keysForOverhead := make([]string, 0, len(m.Overhead)) + for k := range m.Overhead { + keysForOverhead = append(keysForOverhead, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOverhead) + for iNdEx := len(keysForOverhead) - 1; iNdEx >= 0; iNdEx-- { + v := m.Overhead[ResourceName(keysForOverhead[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForOverhead[iNdEx]) + copy(dAtA[i:], keysForOverhead[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForOverhead[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x82 } } - return n -} - -func (m *CephFSPersistentVolumeSource) Size() (n int) { - var l int - _ = l - if len(m.Monitors) > 0 { - for _, s := range m.Monitors { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } + if m.PreemptionPolicy != nil { + i -= len(*m.PreemptionPolicy) + copy(dAtA[i:], *m.PreemptionPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PreemptionPolicy))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa } - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.User) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.SecretFile) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.EnableServiceLinks != nil { + i-- + if *m.EnableServiceLinks { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf0 } - n += 2 - return n -} - -func (m *CephFSVolumeSource) Size() (n int) { - var l int - _ = l - if len(m.Monitors) > 0 { - for _, s := range m.Monitors { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.RuntimeClassName != nil { + i -= len(*m.RuntimeClassName) + copy(dAtA[i:], *m.RuntimeClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.RuntimeClassName))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xea + } + if len(m.ReadinessGates) > 0 { + for iNdEx := len(m.ReadinessGates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ReadinessGates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xe2 } } - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.User) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.SecretFile) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.ShareProcessNamespace != nil { + i-- + if *m.ShareProcessNamespace { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd8 } - n += 2 - return n -} - -func (m *CinderPersistentVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.VolumeID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.DNSConfig != nil { + { + size, err := m.DNSConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 } - return n -} - -func (m *CinderVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.VolumeID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Priority != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Priority)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc8 } - return n + i -= len(m.PriorityClassName) + copy(dAtA[i:], m.PriorityClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PriorityClassName))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + if len(m.HostAliases) > 0 { + for iNdEx := len(m.HostAliases) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostAliases[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } + } + if len(m.Tolerations) > 0 { + for iNdEx := len(m.Tolerations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tolerations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + } + if m.AutomountServiceAccountToken != nil { + i-- + if *m.AutomountServiceAccountToken { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa8 + } + if len(m.InitContainers) > 0 { + for iNdEx := len(m.InitContainers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.InitContainers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + } + i -= len(m.SchedulerName) + copy(dAtA[i:], m.SchedulerName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SchedulerName))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + if m.Affinity != nil { + { + size, err := m.Affinity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + i -= len(m.Subdomain) + copy(dAtA[i:], m.Subdomain) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subdomain))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + i -= len(m.Hostname) + copy(dAtA[i:], m.Hostname) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hostname))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + if len(m.ImagePullSecrets) > 0 { + for iNdEx := len(m.ImagePullSecrets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ImagePullSecrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + } + } + if m.SecurityContext != nil { + { + size, err := m.SecurityContext.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + } + i-- + if m.HostIPC { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x68 + i-- + if m.HostPID { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + i-- + if m.HostNetwork { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + i -= len(m.NodeName) + copy(dAtA[i:], m.NodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) + i-- + dAtA[i] = 0x52 + i -= len(m.DeprecatedServiceAccount) + copy(dAtA[i:], m.DeprecatedServiceAccount) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DeprecatedServiceAccount))) + i-- + dAtA[i] = 0x4a + i -= len(m.ServiceAccountName) + copy(dAtA[i:], m.ServiceAccountName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccountName))) + i-- + dAtA[i] = 0x42 + if len(m.NodeSelector) > 0 { + keysForNodeSelector := make([]string, 0, len(m.NodeSelector)) + for k := range m.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + for iNdEx := len(keysForNodeSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.NodeSelector[string(keysForNodeSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForNodeSelector[iNdEx]) + copy(dAtA[i:], keysForNodeSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForNodeSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x3a + } + } + i -= len(m.DNSPolicy) + copy(dAtA[i:], m.DNSPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DNSPolicy))) + i-- + dAtA[i] = 0x32 + if m.ActiveDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) + i-- + dAtA[i] = 0x28 + } + if m.TerminationGracePeriodSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TerminationGracePeriodSeconds)) + i-- + dAtA[i] = 0x20 + } + i -= len(m.RestartPolicy) + copy(dAtA[i:], m.RestartPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RestartPolicy))) + i-- + dAtA[i] = 0x1a + if len(m.Containers) > 0 { + for iNdEx := len(m.Containers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Containers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Volumes) > 0 { + for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Volumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *ClientIPConfig) Size() (n int) { - var l int - _ = l - if m.TimeoutSeconds != nil { - n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) +func (m *PodStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ComponentCondition) Size() (n int) { - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Error) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ComponentStatus) Size() (n int) { +func (m *PodStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.EphemeralContainerStatuses) > 0 { + for iNdEx := len(m.EphemeralContainerStatuses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EphemeralContainerStatuses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + } + if len(m.PodIPs) > 0 { + for iNdEx := len(m.PodIPs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PodIPs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + } + i -= len(m.NominatedNodeName) + copy(dAtA[i:], m.NominatedNodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NominatedNodeName))) + i-- + dAtA[i] = 0x5a + if len(m.InitContainerStatuses) > 0 { + for iNdEx := len(m.InitContainerStatuses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.InitContainerStatuses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + } + i -= len(m.QOSClass) + copy(dAtA[i:], m.QOSClass) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.QOSClass))) + i-- + dAtA[i] = 0x4a + if len(m.ContainerStatuses) > 0 { + for iNdEx := len(m.ContainerStatuses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ContainerStatuses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.StartTime != nil { + { + size, err := m.StartTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + i -= len(m.PodIP) + copy(dAtA[i:], m.PodIP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PodIP))) + i-- + dAtA[i] = 0x32 + i -= len(m.HostIP) + copy(dAtA[i:], m.HostIP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.HostIP))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x1a if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - return n + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ComponentStatusList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *PodStatusResult) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ConfigMap) Size() (n int) { +func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodStatusResult) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Data) > 0 { - for k, v := range m.Data { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if len(m.BinaryData) > 0 { - for k, v := range m.BinaryData { - _ = k - _ = v - l = 0 - if v != nil { - l = 1 + len(v) + sovGenerated(uint64(len(v))) - } - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + l - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ConfigMapEnvSource) Size() (n int) { - var l int - _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.Optional != nil { - n += 2 +func (m *PodTemplate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ConfigMapKeySelector) Size() (n int) { - var l int - _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Key) - n += 1 + l + sovGenerated(uint64(l)) - if m.Optional != nil { - n += 2 - } - return n +func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ConfigMapList) Size() (n int) { +func (m *PodTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ConfigMapNodeConfigSource) Size() (n int) { - var l int - _ = l - l = len(m.Namespace) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.UID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ResourceVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.KubeletConfigKey) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PodTemplateList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *ConfigMapProjection) Size() (n int) { +func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodTemplateList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - if m.Optional != nil { - n += 2 + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ConfigMapVolumeSource) Size() (n int) { +func (m *PodTemplateSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodTemplateSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.DefaultMode != nil { - n += 1 + sovGenerated(uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Optional != nil { - n += 2 + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PortworxVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *Container) Size() (n int) { +func (m *PortworxVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PortworxVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Image) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Command) > 0 { - for _, s := range m.Command { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if len(m.Args) > 0 { - for _, s := range m.Args { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - l = len(m.WorkingDir) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Ports) > 0 { - for _, e := range m.Ports { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.Env) > 0 { - for _, e := range m.Env { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - l = m.Resources.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.VolumeMounts) > 0 { - for _, e := range m.VolumeMounts { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.LivenessProbe != nil { - l = m.LivenessProbe.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ReadinessProbe != nil { - l = m.ReadinessProbe.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Lifecycle != nil { - l = m.Lifecycle.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - l = len(m.TerminationMessagePath) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ImagePullPolicy) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecurityContext != nil { - l = m.SecurityContext.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 3 - n += 3 - n += 3 - if len(m.EnvFrom) > 0 { - for _, e := range m.EnvFrom { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - l = len(m.TerminationMessagePolicy) - n += 2 + l + sovGenerated(uint64(l)) - if len(m.VolumeDevices) > 0 { - for _, e := range m.VolumeDevices { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } + i-- + dAtA[i] = 0x18 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumeID) + copy(dAtA[i:], m.VolumeID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Preconditions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ContainerImage) Size() (n int) { +func (m *Preconditions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Preconditions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Names) > 0 { - for _, s := range m.Names { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } + if m.UID != nil { + i -= len(*m.UID) + copy(dAtA[i:], *m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.UID))) + i-- + dAtA[i] = 0xa } - n += 1 + sovGenerated(uint64(m.SizeBytes)) - return n + return len(dAtA) - i, nil } -func (m *ContainerPort) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.HostPort)) - n += 1 + sovGenerated(uint64(m.ContainerPort)) - l = len(m.Protocol) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.HostIP) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PreferAvoidPodsEntry) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *ContainerState) Size() (n int) { +func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PreferAvoidPodsEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Waiting != nil { - l = m.Waiting.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Running != nil { - l = m.Running.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + { + size, err := m.EvictionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Terminated != nil { - l = m.Terminated.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x12 + { + size, err := m.PodSignature.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ContainerStateRunning) Size() (n int) { - var l int - _ = l - l = m.StartedAt.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PreferredSchedulingTerm) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *ContainerStateTerminated) Size() (n int) { - var l int - _ = l - n += 1 + sovGenerated(uint64(m.ExitCode)) - n += 1 + sovGenerated(uint64(m.Signal)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - l = m.StartedAt.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.FinishedAt.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ContainerID) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ContainerStateWaiting) Size() (n int) { +func (m *PreferredSchedulingTerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n + { + size, err := m.Preference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i = encodeVarintGenerated(dAtA, i, uint64(m.Weight)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *ContainerStatus) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = m.State.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTerminationState.Size() - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - n += 1 + sovGenerated(uint64(m.RestartCount)) - l = len(m.Image) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ImageID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ContainerID) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Probe) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *DaemonEndpoint) Size() (n int) { - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Port)) - return n +func (m *Probe) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *DownwardAPIProjection) Size() (n int) { +func (m *Probe) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i = encodeVarintGenerated(dAtA, i, uint64(m.FailureThreshold)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.SuccessThreshold)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.PeriodSeconds)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.TimeoutSeconds)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds)) + i-- + dAtA[i] = 0x10 + { + size, err := m.Handler.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *DownwardAPIVolumeFile) Size() (n int) { - var l int - _ = l - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - if m.FieldRef != nil { - l = m.FieldRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ResourceFieldRef != nil { - l = m.ResourceFieldRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Mode != nil { - n += 1 + sovGenerated(uint64(*m.Mode)) +func (m *ProjectedVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *DownwardAPIVolumeSource) Size() (n int) { +func (m *ProjectedVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProjectedVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } if m.DefaultMode != nil { - n += 1 + sovGenerated(uint64(*m.DefaultMode)) + i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x10 } - return n + if len(m.Sources) > 0 { + for iNdEx := len(m.Sources) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Sources[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *EmptyDirVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.Medium) - n += 1 + l + sovGenerated(uint64(l)) - if m.SizeLimit != nil { - l = m.SizeLimit.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *QuobyteVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *EndpointAddress) Size() (n int) { +func (m *QuobyteVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuobyteVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.IP) - n += 1 + l + sovGenerated(uint64(l)) - if m.TargetRef != nil { - l = m.TargetRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Tenant) + copy(dAtA[i:], m.Tenant) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Tenant))) + i-- + dAtA[i] = 0x32 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x2a + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x22 + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - l = len(m.Hostname) - n += 1 + l + sovGenerated(uint64(l)) - if m.NodeName != nil { - l = len(*m.NodeName) - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x18 + i -= len(m.Volume) + copy(dAtA[i:], m.Volume) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volume))) + i-- + dAtA[i] = 0x12 + i -= len(m.Registry) + copy(dAtA[i:], m.Registry) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Registry))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RBDPersistentVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *EndpointPort) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Port)) - l = len(m.Protocol) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *EndpointSubset) Size() (n int) { +func (m *RBDPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Addresses) > 0 { - for _, e := range m.Addresses { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if len(m.NotReadyAddresses) > 0 { - for _, e := range m.NotReadyAddresses { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x40 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x3a } - if len(m.Ports) > 0 { - for _, e := range m.Ports { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Keyring) + copy(dAtA[i:], m.Keyring) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Keyring))) + i-- + dAtA[i] = 0x32 + i -= len(m.RadosUser) + copy(dAtA[i:], m.RadosUser) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RadosUser))) + i-- + dAtA[i] = 0x2a + i -= len(m.RBDPool) + copy(dAtA[i:], m.RBDPool) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDPool))) + i-- + dAtA[i] = 0x22 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x1a + i -= len(m.RBDImage) + copy(dAtA[i:], m.RBDImage) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDImage))) + i-- + dAtA[i] = 0x12 + if len(m.CephMonitors) > 0 { + for iNdEx := len(m.CephMonitors) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.CephMonitors[iNdEx]) + copy(dAtA[i:], m.CephMonitors[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CephMonitors[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return n + return len(dAtA) - i, nil } -func (m *Endpoints) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Subsets) > 0 { - for _, e := range m.Subsets { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *RBDVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *EndpointsList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n +func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *EnvFromSource) Size() (n int) { +func (m *RBDVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Prefix) - n += 1 + l + sovGenerated(uint64(l)) - if m.ConfigMapRef != nil { - l = m.ConfigMapRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x40 if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a } - return n + i -= len(m.Keyring) + copy(dAtA[i:], m.Keyring) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Keyring))) + i-- + dAtA[i] = 0x32 + i -= len(m.RadosUser) + copy(dAtA[i:], m.RadosUser) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RadosUser))) + i-- + dAtA[i] = 0x2a + i -= len(m.RBDPool) + copy(dAtA[i:], m.RBDPool) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDPool))) + i-- + dAtA[i] = 0x22 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x1a + i -= len(m.RBDImage) + copy(dAtA[i:], m.RBDImage) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDImage))) + i-- + dAtA[i] = 0x12 + if len(m.CephMonitors) > 0 { + for iNdEx := len(m.CephMonitors) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.CephMonitors[iNdEx]) + copy(dAtA[i:], m.CephMonitors[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CephMonitors[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *EnvVar) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Value) - n += 1 + l + sovGenerated(uint64(l)) - if m.ValueFrom != nil { - l = m.ValueFrom.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *RangeAllocation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *EnvVarSource) Size() (n int) { +func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RangeAllocation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.FieldRef != nil { - l = m.FieldRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ResourceFieldRef != nil { - l = m.ResourceFieldRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Data != nil { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x1a } - if m.ConfigMapKeyRef != nil { - l = m.ConfigMapKeyRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Range) + copy(dAtA[i:], m.Range) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.SecretKeyRef != nil { - l = m.SecretKeyRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ReplicationController) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *Event) Size() (n int) { +func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicationController) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.InvolvedObject.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - l = m.Source.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.FirstTimestamp.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTimestamp.Size() - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Count)) - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = m.EventTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.Series != nil { - l = m.Series.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - l = len(m.Action) - n += 1 + l + sovGenerated(uint64(l)) - if m.Related != nil { - l = m.Related.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - l = len(m.ReportingController) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ReportingInstance) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *EventList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *EventSeries) Size() (n int) { - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Count)) - l = m.LastObservedTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.State) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ReplicationControllerCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *EventSource) Size() (n int) { - var l int - _ = l - l = len(m.Component) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Host) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ExecAction) Size() (n int) { +func (m *ReplicationControllerCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Command) > 0 { - for _, s := range m.Command { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *FCVolumeSource) Size() (n int) { +func (m *ReplicationControllerList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicationControllerList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.TargetWWNs) > 0 { - for _, s := range m.TargetWWNs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - if m.Lun != nil { - n += 1 + sovGenerated(uint64(*m.Lun)) - } - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if len(m.WWIDs) > 0 { - for _, s := range m.WWIDs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *FlexPersistentVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.Driver) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 2 - if len(m.Options) > 0 { - for k, v := range m.Options { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } +func (m *ReplicationControllerSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *FlexVolumeSource) Size() (n int) { +func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicationControllerSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Driver) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + if m.Template != nil { + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - n += 2 - if len(m.Options) > 0 { - for k, v := range m.Options { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if len(m.Selector) > 0 { + keysForSelector := make([]string, 0, len(m.Selector)) + for k := range m.Selector { + keysForSelector = append(keysForSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + for iNdEx := len(keysForSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.Selector[string(keysForSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForSelector[iNdEx]) + copy(dAtA[i:], keysForSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 } } - return n + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } -func (m *FlockerVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.DatasetName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.DatasetUUID) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ReplicationControllerStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *GCEPersistentDiskVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.PDName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Partition)) - n += 2 - return n +func (m *ReplicationControllerStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *GitRepoVolumeSource) Size() (n int) { +func (m *ReplicationControllerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Repository) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Revision) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Directory) - n += 1 + l + sovGenerated(uint64(l)) - return n + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *GlusterfsVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.EndpointsName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n +func (m *ResourceFieldSelector) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *HTTPGetAction) Size() (n int) { +func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceFieldSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - l = m.Port.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Host) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Scheme) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.HTTPHeaders) > 0 { - for _, e := range m.HTTPHeaders { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Divisor.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0x1a + i -= len(m.Resource) + copy(dAtA[i:], m.Resource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) + i-- + dAtA[i] = 0x12 + i -= len(m.ContainerName) + copy(dAtA[i:], m.ContainerName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *HTTPHeader) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Value) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ResourceQuota) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *Handler) Size() (n int) { +func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceQuota) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Exec != nil { - l = m.Exec.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.HTTPGet != nil { - l = m.HTTPGet.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.TCPSocket != nil { - l = m.TCPSocket.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *HostAlias) Size() (n int) { - var l int - _ = l - l = len(m.IP) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Hostnames) > 0 { - for _, s := range m.Hostnames { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *ResourceQuotaList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *HostPathVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - if m.Type != nil { - l = len(*m.Type) - n += 1 + l + sovGenerated(uint64(l)) - } - return n +func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ISCSIPersistentVolumeSource) Size() (n int) { +func (m *ResourceQuotaList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.TargetPortal) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.IQN) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Lun)) - l = len(m.ISCSIInterface) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if len(m.Portals) > 0 { - for _, s := range m.Portals { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - n += 2 - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - n += 2 - if m.InitiatorName != nil { - l = len(*m.InitiatorName) - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ResourceQuotaSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ISCSIVolumeSource) Size() (n int) { +func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceQuotaSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.TargetPortal) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.IQN) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Lun)) - l = len(m.ISCSIInterface) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if len(m.Portals) > 0 { - for _, s := range m.Portals { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.ScopeSelector != nil { + { + size, err := m.ScopeSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } - n += 2 - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 2 - if m.InitiatorName != nil { - l = len(*m.InitiatorName) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Scopes) > 0 { + for iNdEx := len(m.Scopes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Scopes[iNdEx]) + copy(dAtA[i:], m.Scopes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scopes[iNdEx]))) + i-- + dAtA[i] = 0x12 + } } - return n -} - -func (m *KeyToPath) Size() (n int) { - var l int - _ = l - l = len(m.Key) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - if m.Mode != nil { - n += 1 + sovGenerated(uint64(*m.Mode)) + if len(m.Hard) > 0 { + keysForHard := make([]string, 0, len(m.Hard)) + for k := range m.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + for iNdEx := len(keysForHard) - 1; iNdEx >= 0; iNdEx-- { + v := m.Hard[ResourceName(keysForHard[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForHard[iNdEx]) + copy(dAtA[i:], keysForHard[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForHard[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } } - return n + return len(dAtA) - i, nil } -func (m *Lifecycle) Size() (n int) { - var l int - _ = l - if m.PostStart != nil { - l = m.PostStart.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.PreStop != nil { - l = m.PreStop.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *ResourceQuotaStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *LimitRange) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *LimitRangeItem) Size() (n int) { +func (m *ResourceQuotaStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Max) > 0 { - for k, v := range m.Max { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - if len(m.Min) > 0 { - for k, v := range m.Min { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if len(m.Used) > 0 { + keysForUsed := make([]string, 0, len(m.Used)) + for k := range m.Used { + keysForUsed = append(keysForUsed, string(k)) } - } - if len(m.Default) > 0 { - for k, v := range m.Default { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) + for iNdEx := len(keysForUsed) - 1; iNdEx >= 0; iNdEx-- { + v := m.Used[ResourceName(keysForUsed[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForUsed[iNdEx]) + copy(dAtA[i:], keysForUsed[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForUsed[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 } } - if len(m.DefaultRequest) > 0 { - for k, v := range m.DefaultRequest { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if len(m.Hard) > 0 { + keysForHard := make([]string, 0, len(m.Hard)) + for k := range m.Hard { + keysForHard = append(keysForHard, string(k)) } - } - if len(m.MaxLimitRequestRatio) > 0 { - for k, v := range m.MaxLimitRequestRatio { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + for iNdEx := len(keysForHard) - 1; iNdEx >= 0; iNdEx-- { + v := m.Hard[ResourceName(keysForHard[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForHard[iNdEx]) + copy(dAtA[i:], keysForHard[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForHard[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa } } - return n + return len(dAtA) - i, nil } -func (m *LimitRangeList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *ResourceRequirements) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *LimitRangeSpec) Size() (n int) { +func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceRequirements) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l + if len(m.Requests) > 0 { + keysForRequests := make([]string, 0, len(m.Requests)) + for k := range m.Requests { + keysForRequests = append(keysForRequests, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) + for iNdEx := len(keysForRequests) - 1; iNdEx >= 0; iNdEx-- { + v := m.Requests[ResourceName(keysForRequests[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForRequests[iNdEx]) + copy(dAtA[i:], keysForRequests[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForRequests[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } if len(m.Limits) > 0 { - for _, e := range m.Limits { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + keysForLimits := make([]string, 0, len(m.Limits)) + for k := range m.Limits { + keysForLimits = append(keysForLimits, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) + for iNdEx := len(keysForLimits) - 1; iNdEx >= 0; iNdEx-- { + v := m.Limits[ResourceName(keysForLimits[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForLimits[iNdEx]) + copy(dAtA[i:], keysForLimits[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForLimits[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa } } - return n + return len(dAtA) - i, nil } -func (m *List) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *SELinuxOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *LoadBalancerIngress) Size() (n int) { - var l int - _ = l - l = len(m.IP) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Hostname) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *SELinuxOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *LoadBalancerStatus) Size() (n int) { +func (m *SELinuxOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Ingress) > 0 { - for _, e := range m.Ingress { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + i -= len(m.Level) + copy(dAtA[i:], m.Level) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Level))) + i-- + dAtA[i] = 0x22 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0x1a + i -= len(m.Role) + copy(dAtA[i:], m.Role) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Role))) + i-- + dAtA[i] = 0x12 + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ScaleIOPersistentVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *LocalObjectReference) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *LocalVolumeSource) Size() (n int) { +func (m *ScaleIOPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - return n + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x4a + i -= len(m.VolumeName) + copy(dAtA[i:], m.VolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) + i-- + dAtA[i] = 0x42 + i -= len(m.StorageMode) + copy(dAtA[i:], m.StorageMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageMode))) + i-- + dAtA[i] = 0x3a + i -= len(m.StoragePool) + copy(dAtA[i:], m.StoragePool) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePool))) + i-- + dAtA[i] = 0x32 + i -= len(m.ProtectionDomain) + copy(dAtA[i:], m.ProtectionDomain) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProtectionDomain))) + i-- + dAtA[i] = 0x2a + i-- + if m.SSLEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + i -= len(m.System) + copy(dAtA[i:], m.System) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.System))) + i-- + dAtA[i] = 0x12 + i -= len(m.Gateway) + copy(dAtA[i:], m.Gateway) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Gateway))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NFSVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.Server) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n +func (m *ScaleIOVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *Namespace) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *NamespaceList) Size() (n int) { +func (m *ScaleIOVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x4a + i -= len(m.VolumeName) + copy(dAtA[i:], m.VolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) + i-- + dAtA[i] = 0x42 + i -= len(m.StorageMode) + copy(dAtA[i:], m.StorageMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageMode))) + i-- + dAtA[i] = 0x3a + i -= len(m.StoragePool) + copy(dAtA[i:], m.StoragePool) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePool))) + i-- + dAtA[i] = 0x32 + i -= len(m.ProtectionDomain) + copy(dAtA[i:], m.ProtectionDomain) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProtectionDomain))) + i-- + dAtA[i] = 0x2a + i-- + if m.SSLEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } - return n + i -= len(m.System) + copy(dAtA[i:], m.System) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.System))) + i-- + dAtA[i] = 0x12 + i -= len(m.Gateway) + copy(dAtA[i:], m.Gateway) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Gateway))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NamespaceSpec) Size() (n int) { - var l int - _ = l - if len(m.Finalizers) > 0 { - for _, s := range m.Finalizers { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *ScopeSelector) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *NamespaceStatus) Size() (n int) { - var l int - _ = l - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ScopeSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Node) Size() (n int) { +func (m *ScopeSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + if len(m.MatchExpressions) > 0 { + for iNdEx := len(m.MatchExpressions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchExpressions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *NodeAddress) Size() (n int) { - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Address) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ScopedResourceSelectorRequirement) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *NodeAffinity) Size() (n int) { +func (m *ScopedResourceSelectorRequirement) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScopedResourceSelectorRequirement) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { - l = m.RequiredDuringSchedulingIgnoredDuringExecution.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for iNdEx := len(m.Values) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Values[iNdEx]) + copy(dAtA[i:], m.Values[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values[iNdEx]))) + i-- + dAtA[i] = 0x1a } } - return n + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0x12 + i -= len(m.ScopeName) + copy(dAtA[i:], m.ScopeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ScopeName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeCondition) Size() (n int) { - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastHeartbeatTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Secret) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *NodeConfigSource) Size() (n int) { - var l int - _ = l - if m.ConfigMap != nil { - l = m.ConfigMap.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n +func (m *Secret) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *NodeConfigStatus) Size() (n int) { +func (m *Secret) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Assigned != nil { - l = m.Assigned.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.StringData) > 0 { + keysForStringData := make([]string, 0, len(m.StringData)) + for k := range m.StringData { + keysForStringData = append(keysForStringData, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) + for iNdEx := len(keysForStringData) - 1; iNdEx >= 0; iNdEx-- { + v := m.StringData[string(keysForStringData[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForStringData[iNdEx]) + copy(dAtA[i:], keysForStringData[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForStringData[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } } - if m.Active != nil { - l = m.Active.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0x1a + if len(m.Data) > 0 { + keysForData := make([]string, 0, len(m.Data)) + for k := range m.Data { + keysForData = append(keysForData, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + for iNdEx := len(keysForData) - 1; iNdEx >= 0; iNdEx-- { + v := m.Data[string(keysForData[iNdEx])] + baseI := i + if v != nil { + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + } + i -= len(keysForData[iNdEx]) + copy(dAtA[i:], keysForData[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForData[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } } - if m.LastKnownGood != nil { - l = m.LastKnownGood.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - l = len(m.Error) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *NodeDaemonEndpoints) Size() (n int) { - var l int - _ = l - l = m.KubeletEndpoint.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *SecretEnvSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *NodeProxyOptions) Size() (n int) { - var l int - _ = l - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *NodeResources) Size() (n int) { +func (m *SecretEnvSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Capacity) > 0 { - for k, v := range m.Capacity { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x10 } - return n + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeSelector) Size() (n int) { - var l int - _ = l - if len(m.NodeSelectorTerms) > 0 { - for _, e := range m.NodeSelectorTerms { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *SecretKeySelector) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *NodeSelectorRequirement) Size() (n int) { +func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretKeySelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Key) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Operator) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Values) > 0 { - for _, s := range m.Values { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x18 } - return n + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0x12 + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeSelectorTerm) Size() (n int) { +func (m *SecretList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.MatchExpressions) > 0 { - for _, e := range m.MatchExpressions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - if len(m.MatchFields) > 0 { - for _, e := range m.MatchFields { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeSpec) Size() (n int) { +func (m *SecretProjection) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretProjection) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.PodCIDR) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.DoNotUse_ExternalID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ProviderID) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - if len(m.Taints) > 0 { - for _, e := range m.Taints { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x20 } - if m.ConfigSource != nil { - l = m.ConfigSource.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - return n + { + size, err := m.LocalObjectReference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *NodeStatus) Size() (n int) { +func (m *SecretReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Capacity) > 0 { - for k, v := range m.Capacity { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SecretVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Optional != nil { + i-- + if *m.Optional { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x20 } - if len(m.Allocatable) > 0 { - for k, v := range m.Allocatable { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if m.DefaultMode != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.DefaultMode)) + i-- + dAtA[i] = 0x18 + } + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.SecretName) + copy(dAtA[i:], m.SecretName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SecurityContext) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.WindowsOptions != nil { + { + size, err := m.WindowsOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x52 } - if len(m.Addresses) > 0 { - for _, e := range m.Addresses { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.ProcMount != nil { + i -= len(*m.ProcMount) + copy(dAtA[i:], *m.ProcMount) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ProcMount))) + i-- + dAtA[i] = 0x4a + } + if m.RunAsGroup != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsGroup)) + i-- + dAtA[i] = 0x40 + } + if m.AllowPrivilegeEscalation != nil { + i-- + if *m.AllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x38 } - l = m.DaemonEndpoints.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.NodeInfo.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Images) > 0 { - for _, e := range m.Images { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.ReadOnlyRootFilesystem != nil { + i-- + if *m.ReadOnlyRootFilesystem { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x30 } - if len(m.VolumesInUse) > 0 { - for _, s := range m.VolumesInUse { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.RunAsNonRoot != nil { + i-- + if *m.RunAsNonRoot { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x28 } - if len(m.VolumesAttached) > 0 { - for _, e := range m.VolumesAttached { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.RunAsUser != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsUser)) + i-- + dAtA[i] = 0x20 + } + if m.SELinuxOptions != nil { + { + size, err := m.SELinuxOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } - if m.Config != nil { - l = m.Config.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Privileged != nil { + i-- + if *m.Privileged { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 } - return n -} - -func (m *NodeSystemInfo) Size() (n int) { - var l int - _ = l - l = len(m.MachineID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.SystemUUID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.BootID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.KernelVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.OSImage) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ContainerRuntimeVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.KubeletVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.KubeProxyVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.OperatingSystem) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Architecture) - n += 1 + l + sovGenerated(uint64(l)) - return n + if m.Capabilities != nil { + { + size, err := m.Capabilities.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *ObjectFieldSelector) Size() (n int) { - var l int - _ = l - l = len(m.APIVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FieldPath) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *SerializedReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *ObjectReference) Size() (n int) { - var l int - _ = l - l = len(m.Kind) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Namespace) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.UID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.APIVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ResourceVersion) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FieldPath) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PersistentVolume) Size() (n int) { +func (m *SerializedReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + { + size, err := m.Reference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaim) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Service) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *PersistentVolumeClaimCondition) Size() (n int) { - var l int - _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastProbeTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Service) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PersistentVolumeClaimList) Size() (n int) { +func (m *Service) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n -} - -func (m *PersistentVolumeClaimSpec) Size() (n int) { - var l int - _ = l - if len(m.AccessModes) > 0 { - for _, s := range m.AccessModes { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - l = m.Resources.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.VolumeName) - n += 1 + l + sovGenerated(uint64(l)) - if m.Selector != nil { - l = m.Selector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.StorageClassName != nil { - l = len(*m.StorageClassName) - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.VolumeMode != nil { - l = len(*m.VolumeMode) - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ServiceAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *PersistentVolumeClaimStatus) Size() (n int) { +func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.AccessModes) > 0 { - for _, s := range m.AccessModes { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.AutomountServiceAccountToken != nil { + i-- + if *m.AutomountServiceAccountToken { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x20 } - if len(m.Capacity) > 0 { - for k, v := range m.Capacity { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if len(m.ImagePullSecrets) > 0 { + for iNdEx := len(m.ImagePullSecrets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ImagePullSecrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } } - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Secrets) > 0 { + for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - return n + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeClaimVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.ClaimName) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n +func (m *ServiceAccountList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *PersistentVolumeList) Size() (n int) { +func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceAccountList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - return n -} - -func (m *PersistentVolumeSource) Size() (n int) { - var l int - _ = l - if m.GCEPersistentDisk != nil { - l = m.GCEPersistentDisk.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.AWSElasticBlockStore != nil { - l = m.AWSElasticBlockStore.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.HostPath != nil { - l = m.HostPath.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Glusterfs != nil { - l = m.Glusterfs.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.NFS != nil { - l = m.NFS.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.RBD != nil { - l = m.RBD.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.ISCSI != nil { - l = m.ISCSI.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Cinder != nil { - l = m.Cinder.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.CephFS != nil { - l = m.CephFS.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.FC != nil { - l = m.FC.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Flocker != nil { - l = m.Flocker.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.FlexVolume != nil { - l = m.FlexVolume.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.AzureFile != nil { - l = m.AzureFile.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.VsphereVolume != nil { - l = m.VsphereVolume.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Quobyte != nil { - l = m.Quobyte.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.AzureDisk != nil { - l = m.AzureDisk.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.PhotonPersistentDisk != nil { - l = m.PhotonPersistentDisk.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.PortworxVolume != nil { - l = m.PortworxVolume.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.ScaleIO != nil { - l = m.ScaleIO.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.Local != nil { - l = m.Local.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.StorageOS != nil { - l = m.StorageOS.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.CSI != nil { - l = m.CSI.Size() - n += 2 + l + sovGenerated(uint64(l)) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PersistentVolumeSpec) Size() (n int) { - var l int - _ = l - if len(m.Capacity) > 0 { - for k, v := range m.Capacity { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - l = m.PersistentVolumeSource.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.AccessModes) > 0 { - for _, s := range m.AccessModes { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.ClaimRef != nil { - l = m.ClaimRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - l = len(m.PersistentVolumeReclaimPolicy) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StorageClassName) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.MountOptions) > 0 { - for _, s := range m.MountOptions { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.VolumeMode != nil { - l = len(*m.VolumeMode) - n += 1 + l + sovGenerated(uint64(l)) - } - if m.NodeAffinity != nil { - l = m.NodeAffinity.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *ServiceAccountTokenProjection) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *PersistentVolumeStatus) Size() (n int) { - var l int - _ = l - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ServiceAccountTokenProjection) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PhotonPersistentDiskVolumeSource) Size() (n int) { +func (m *ServiceAccountTokenProjection) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.PdID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - return n + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x1a + if m.ExpirationSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ExpirationSeconds)) + i-- + dAtA[i] = 0x10 + } + i -= len(m.Audience) + copy(dAtA[i:], m.Audience) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Audience))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Pod) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ServiceList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *PodAffinity) Size() (n int) { +func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, e := range m.RequiredDuringSchedulingIgnoredDuringExecution { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } } - if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodAffinityTerm) Size() (n int) { - var l int - _ = l - if m.LabelSelector != nil { - l = m.LabelSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.Namespaces) > 0 { - for _, s := range m.Namespaces { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *ServicePort) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - l = len(m.TopologyKey) - n += 1 + l + sovGenerated(uint64(l)) - return n + return dAtA[:n], nil } -func (m *PodAntiAffinity) Size() (n int) { +func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServicePort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, e := range m.RequiredDuringSchedulingIgnoredDuringExecution { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort)) + i-- + dAtA[i] = 0x28 + { + size, err := m.TargetPort.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { - for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + i-- + dAtA[i] = 0x22 + i = encodeVarintGenerated(dAtA, i, uint64(m.Port)) + i-- + dAtA[i] = 0x18 + i -= len(m.Protocol) + copy(dAtA[i:], m.Protocol) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Protocol))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ServiceProxyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *PodAttachOptions) Size() (n int) { - var l int - _ = l - n += 2 - n += 2 - n += 2 - n += 2 - l = len(m.Container) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *ServiceProxyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PodCondition) Size() (n int) { +func (m *ServiceProxyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastProbeTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodDNSConfig) Size() (n int) { +func (m *ServiceSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Nameservers) > 0 { - for _, s := range m.Nameservers { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.IPFamily != nil { + i -= len(*m.IPFamily) + copy(dAtA[i:], *m.IPFamily) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.IPFamily))) + i-- + dAtA[i] = 0x7a + } + if m.SessionAffinityConfig != nil { + { + size, err := m.SessionAffinityConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x72 } - if len(m.Searches) > 0 { - for _, s := range m.Searches { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + i-- + if m.PublishNotReadyAddresses { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x68 + i = encodeVarintGenerated(dAtA, i, uint64(m.HealthCheckNodePort)) + i-- + dAtA[i] = 0x60 + i -= len(m.ExternalTrafficPolicy) + copy(dAtA[i:], m.ExternalTrafficPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExternalTrafficPolicy))) + i-- + dAtA[i] = 0x5a + i -= len(m.ExternalName) + copy(dAtA[i:], m.ExternalName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExternalName))) + i-- + dAtA[i] = 0x52 + if len(m.LoadBalancerSourceRanges) > 0 { + for iNdEx := len(m.LoadBalancerSourceRanges) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.LoadBalancerSourceRanges[iNdEx]) + copy(dAtA[i:], m.LoadBalancerSourceRanges[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.LoadBalancerSourceRanges[iNdEx]))) + i-- + dAtA[i] = 0x4a } } - if len(m.Options) > 0 { - for _, e := range m.Options { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.LoadBalancerIP) + copy(dAtA[i:], m.LoadBalancerIP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.LoadBalancerIP))) + i-- + dAtA[i] = 0x42 + i -= len(m.SessionAffinity) + copy(dAtA[i:], m.SessionAffinity) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SessionAffinity))) + i-- + dAtA[i] = 0x3a + if len(m.ExternalIPs) > 0 { + for iNdEx := len(m.ExternalIPs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ExternalIPs[iNdEx]) + copy(dAtA[i:], m.ExternalIPs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExternalIPs[iNdEx]))) + i-- + dAtA[i] = 0x2a } } - return n + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0x22 + i -= len(m.ClusterIP) + copy(dAtA[i:], m.ClusterIP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClusterIP))) + i-- + dAtA[i] = 0x1a + if len(m.Selector) > 0 { + keysForSelector := make([]string, 0, len(m.Selector)) + for k := range m.Selector { + keysForSelector = append(keysForSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + for iNdEx := len(keysForSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.Selector[string(keysForSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForSelector[iNdEx]) + copy(dAtA[i:], keysForSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *PodDNSConfigOption) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - if m.Value != nil { - l = len(*m.Value) - n += 1 + l + sovGenerated(uint64(l)) +func (m *ServiceStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *PodExecOptions) Size() (n int) { - var l int - _ = l - n += 2 - n += 2 - n += 2 - n += 2 - l = len(m.Container) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Command) > 0 { - for _, s := range m.Command { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n +func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PodList) Size() (n int) { +func (m *ServiceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.LoadBalancer.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodLogOptions) Size() (n int) { - var l int - _ = l - l = len(m.Container) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - n += 2 - if m.SinceSeconds != nil { - n += 1 + sovGenerated(uint64(*m.SinceSeconds)) - } - if m.SinceTime != nil { - l = m.SinceTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 2 - if m.TailLines != nil { - n += 1 + sovGenerated(uint64(*m.TailLines)) - } - if m.LimitBytes != nil { - n += 1 + sovGenerated(uint64(*m.LimitBytes)) +func (m *SessionAffinityConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *PodPortForwardOptions) Size() (n int) { +func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SessionAffinityConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, e := range m.Ports { - n += 1 + sovGenerated(uint64(e)) + if m.ClientIP != nil { + { + size, err := m.ClientIP.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *PodProxyOptions) Size() (n int) { - var l int - _ = l - l = len(m.Path) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *StorageOSPersistentVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *PodReadinessGate) Size() (n int) { - var l int - _ = l - l = len(m.ConditionType) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PodSecurityContext) Size() (n int) { +func (m *StorageOSPersistentVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.SELinuxOptions != nil { - l = m.SELinuxOptions.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.RunAsUser != nil { - n += 1 + sovGenerated(uint64(*m.RunAsUser)) - } - if m.RunAsNonRoot != nil { - n += 2 - } - if len(m.SupplementalGroups) > 0 { - for _, e := range m.SupplementalGroups { - n += 1 + sovGenerated(uint64(e)) + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x2a } - if m.FSGroup != nil { - n += 1 + sovGenerated(uint64(*m.FSGroup)) - } - if m.RunAsGroup != nil { - n += 1 + sovGenerated(uint64(*m.RunAsGroup)) + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if len(m.Sysctls) > 0 { - for _, e := range m.Sysctls { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n + i-- + dAtA[i] = 0x20 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x1a + i -= len(m.VolumeNamespace) + copy(dAtA[i:], m.VolumeNamespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeNamespace))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumeName) + copy(dAtA[i:], m.VolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodSignature) Size() (n int) { - var l int - _ = l - if m.PodController != nil { - l = m.PodController.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *StorageOSVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *PodSpec) Size() (n int) { - var l int - _ = l - if len(m.Volumes) > 0 { - for _, e := range m.Volumes { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.Containers) > 0 { - for _, e := range m.Containers { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - l = len(m.RestartPolicy) - n += 1 + l + sovGenerated(uint64(l)) - if m.TerminationGracePeriodSeconds != nil { - n += 1 + sovGenerated(uint64(*m.TerminationGracePeriodSeconds)) - } - if m.ActiveDeadlineSeconds != nil { - n += 1 + sovGenerated(uint64(*m.ActiveDeadlineSeconds)) - } - l = len(m.DNSPolicy) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.NodeSelector) > 0 { - for k, v := range m.NodeSelector { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - l = len(m.ServiceAccountName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.DeprecatedServiceAccount) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.NodeName) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - n += 2 - n += 2 - if m.SecurityContext != nil { - l = m.SecurityContext.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.ImagePullSecrets) > 0 { - for _, e := range m.ImagePullSecrets { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - l = len(m.Hostname) - n += 2 + l + sovGenerated(uint64(l)) - l = len(m.Subdomain) - n += 2 + l + sovGenerated(uint64(l)) - if m.Affinity != nil { - l = m.Affinity.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - l = len(m.SchedulerName) - n += 2 + l + sovGenerated(uint64(l)) - if len(m.InitContainers) > 0 { - for _, e := range m.InitContainers { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - if m.AutomountServiceAccountToken != nil { - n += 3 - } - if len(m.Tolerations) > 0 { - for _, e := range m.Tolerations { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - if len(m.HostAliases) > 0 { - for _, e := range m.HostAliases { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - l = len(m.PriorityClassName) - n += 2 + l + sovGenerated(uint64(l)) - if m.Priority != nil { - n += 2 + sovGenerated(uint64(*m.Priority)) - } - if m.DNSConfig != nil { - l = m.DNSConfig.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.ShareProcessNamespace != nil { - n += 3 - } - if len(m.ReadinessGates) > 0 { - for _, e := range m.ReadinessGates { - l = e.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - } - return n +func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PodStatus) Size() (n int) { +func (m *StorageOSVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x2a } - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.HostIP) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.PodIP) - n += 1 + l + sovGenerated(uint64(l)) - if m.StartTime != nil { - l = m.StartTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.ContainerStatuses) > 0 { - for _, e := range m.ContainerStatuses { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - l = len(m.QOSClass) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.InitContainerStatuses) > 0 { - for _, e := range m.InitContainerStatuses { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + i-- + dAtA[i] = 0x20 + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x1a + i -= len(m.VolumeNamespace) + copy(dAtA[i:], m.VolumeNamespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeNamespace))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumeName) + copy(dAtA[i:], m.VolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Sysctl) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - l = len(m.NominatedNodeName) - n += 1 + l + sovGenerated(uint64(l)) - return n + return dAtA[:n], nil } -func (m *PodStatusResult) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Sysctl) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PodTemplate) Size() (n int) { +func (m *Sysctl) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Template.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodTemplateList) Size() (n int) { +func (m *TCPSocketAction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TCPSocketAction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PodTemplateSpec) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Taint) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *PortworxVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.VolumeID) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n +func (m *Taint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Preconditions) Size() (n int) { +func (m *Taint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.UID != nil { - l = len(*m.UID) - n += 1 + l + sovGenerated(uint64(l)) + if m.TimeAdded != nil { + { + size, err := m.TimeAdded.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - return n + i -= len(m.Effect) + copy(dAtA[i:], m.Effect) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Effect))) + i-- + dAtA[i] = 0x1a + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *PreferAvoidPodsEntry) Size() (n int) { - var l int - _ = l - l = m.PodSignature.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.EvictionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Toleration) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } -func (m *PreferredSchedulingTerm) Size() (n int) { - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Weight)) - l = m.Preference.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *Toleration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Probe) Size() (n int) { +func (m *Toleration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.Handler.Size() - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.InitialDelaySeconds)) - n += 1 + sovGenerated(uint64(m.TimeoutSeconds)) - n += 1 + sovGenerated(uint64(m.PeriodSeconds)) - n += 1 + sovGenerated(uint64(m.SuccessThreshold)) - n += 1 + sovGenerated(uint64(m.FailureThreshold)) - return n + if m.TolerationSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TolerationSeconds)) + i-- + dAtA[i] = 0x28 + } + i -= len(m.Effect) + copy(dAtA[i:], m.Effect) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Effect))) + i-- + dAtA[i] = 0x22 + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x1a + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0x12 + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ProjectedVolumeSource) Size() (n int) { +func (m *TopologySelectorLabelRequirement) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TopologySelectorLabelRequirement) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TopologySelectorLabelRequirement) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Sources) > 0 { - for _, e := range m.Sources { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for iNdEx := len(m.Values) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Values[iNdEx]) + copy(dAtA[i:], m.Values[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - if m.DefaultMode != nil { - n += 1 + sovGenerated(uint64(*m.DefaultMode)) + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TopologySelectorTerm) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *QuobyteVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.Registry) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Volume) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - l = len(m.User) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Group) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *TopologySelectorTerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *RBDPersistentVolumeSource) Size() (n int) { +func (m *TopologySelectorTerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.CephMonitors) > 0 { - for _, s := range m.CephMonitors { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if len(m.MatchLabelExpressions) > 0 { + for iNdEx := len(m.MatchLabelExpressions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchLabelExpressions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } } - l = len(m.RBDImage) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.RBDPool) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.RadosUser) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Keyring) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + return len(dAtA) - i, nil +} + +func (m *TopologySpreadConstraint) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - n += 2 - return n + return dAtA[:n], nil } -func (m *RBDVolumeSource) Size() (n int) { +func (m *TopologySpreadConstraint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TopologySpreadConstraint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.CephMonitors) > 0 { - for _, s := range m.CephMonitors { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.LabelSelector != nil { + { + size, err := m.LabelSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } - l = len(m.RBDImage) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.RBDPool) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.RadosUser) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Keyring) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 2 - return n + i -= len(m.WhenUnsatisfiable) + copy(dAtA[i:], m.WhenUnsatisfiable) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WhenUnsatisfiable))) + i-- + dAtA[i] = 0x1a + i -= len(m.TopologyKey) + copy(dAtA[i:], m.TopologyKey) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TopologyKey))) + i-- + dAtA[i] = 0x12 + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxSkew)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *RangeAllocation) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Range) - n += 1 + l + sovGenerated(uint64(l)) - if m.Data != nil { - l = len(m.Data) - n += 1 + l + sovGenerated(uint64(l)) +func (m *TypedLocalObjectReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ReplicationController) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *TypedLocalObjectReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ReplicationControllerCondition) Size() (n int) { +func (m *TypedLocalObjectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Status) - n += 1 + l + sovGenerated(uint64(l)) - l = m.LastTransitionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Reason) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + if m.APIGroup != nil { + i -= len(*m.APIGroup) + copy(dAtA[i:], *m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.APIGroup))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *ReplicationControllerList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *Volume) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ReplicationControllerSpec) Size() (n int) { +func (m *Volume) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Volume) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if m.Replicas != nil { - n += 1 + sovGenerated(uint64(*m.Replicas)) - } - if len(m.Selector) > 0 { - for k, v := range m.Selector { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + { + size, err := m.VolumeSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.Template != nil { - l = m.Template.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 1 + sovGenerated(uint64(m.MinReadySeconds)) - return n + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ReplicationControllerStatus) Size() (n int) { - var l int - _ = l - n += 1 + sovGenerated(uint64(m.Replicas)) - n += 1 + sovGenerated(uint64(m.FullyLabeledReplicas)) - n += 1 + sovGenerated(uint64(m.ObservedGeneration)) - n += 1 + sovGenerated(uint64(m.ReadyReplicas)) - n += 1 + sovGenerated(uint64(m.AvailableReplicas)) - if len(m.Conditions) > 0 { - for _, e := range m.Conditions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *VolumeDevice) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ResourceFieldSelector) Size() (n int) { - var l int - _ = l - l = len(m.ContainerName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Resource) - n += 1 + l + sovGenerated(uint64(l)) - l = m.Divisor.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *VolumeDevice) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ResourceQuota) Size() (n int) { +func (m *VolumeDevice) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + i -= len(m.DevicePath) + copy(dAtA[i:], m.DevicePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DevicePath))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ResourceQuotaList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *VolumeMount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *ResourceQuotaSpec) Size() (n int) { - var l int - _ = l - if len(m.Hard) > 0 { - for k, v := range m.Hard { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - if len(m.Scopes) > 0 { - for _, s := range m.Scopes { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.ScopeSelector != nil { - l = m.ScopeSelector.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n +func (m *VolumeMount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ResourceQuotaStatus) Size() (n int) { +func (m *VolumeMount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - if len(m.Hard) > 0 { - for k, v := range m.Hard { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } + i -= len(m.SubPathExpr) + copy(dAtA[i:], m.SubPathExpr) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SubPathExpr))) + i-- + dAtA[i] = 0x32 + if m.MountPropagation != nil { + i -= len(*m.MountPropagation) + copy(dAtA[i:], *m.MountPropagation) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.MountPropagation))) + i-- + dAtA[i] = 0x2a } - if len(m.Used) > 0 { - for k, v := range m.Used { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } + i -= len(m.SubPath) + copy(dAtA[i:], m.SubPath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SubPath))) + i-- + dAtA[i] = 0x22 + i -= len(m.MountPath) + copy(dAtA[i:], m.MountPath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MountPath))) + i-- + dAtA[i] = 0x1a + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return n + i-- + dAtA[i] = 0x10 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ResourceRequirements) Size() (n int) { - var l int - _ = l - if len(m.Limits) > 0 { - for k, v := range m.Limits { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - if len(m.Requests) > 0 { - for k, v := range m.Requests { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } +func (m *VolumeNodeAffinity) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *SELinuxOptions) Size() (n int) { - var l int - _ = l - l = len(m.User) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Role) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Level) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *VolumeNodeAffinity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ScaleIOPersistentVolumeSource) Size() (n int) { +func (m *VolumeNodeAffinity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Gateway) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.System) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Required != nil { + { + size, err := m.Required.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - n += 2 - l = len(m.ProtectionDomain) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StoragePool) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StorageMode) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.VolumeName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n + return len(dAtA) - i, nil } -func (m *ScaleIOVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.Gateway) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.System) - n += 1 + l + sovGenerated(uint64(l)) - if m.SecretRef != nil { - l = m.SecretRef.Size() - n += 1 + l + sovGenerated(uint64(l)) +func (m *VolumeProjection) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - n += 2 - l = len(m.ProtectionDomain) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StoragePool) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StorageMode) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.VolumeName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n + return dAtA[:n], nil } -func (m *ScopeSelector) Size() (n int) { - var l int - _ = l - if len(m.MatchExpressions) > 0 { - for _, e := range m.MatchExpressions { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n +func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ScopedResourceSelectorRequirement) Size() (n int) { +func (m *VolumeProjection) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.ScopeName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Operator) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Values) > 0 { - for _, s := range m.Values { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.ServiceAccountToken != nil { + { + size, err := m.ServiceAccountToken.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } - return n -} - -func (m *Secret) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Data) > 0 { - for k, v := range m.Data { - _ = k - _ = v - l = 0 - if v != nil { - l = 1 + len(v) + sovGenerated(uint64(len(v))) + if m.ConfigMap != nil { + { + size, err := m.ConfigMap.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + l - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.StringData) > 0 { - for k, v := range m.StringData { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if m.DownwardAPI != nil { + { + size, err := m.DownwardAPI.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - return n + if m.Secret != nil { + { + size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *SecretEnvSource) Size() (n int) { - var l int - _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) - if m.Optional != nil { - n += 2 +func (m *VolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *SecretKeySelector) Size() (n int) { - var l int - _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Key) - n += 1 + l + sovGenerated(uint64(l)) - if m.Optional != nil { - n += 2 - } - return n +func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *SecretList) Size() (n int) { +func (m *VolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.CSI != nil { + { + size, err := m.CSI.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xe2 } - return n -} - -func (m *SecretProjection) Size() (n int) { - var l int - _ = l - l = m.LocalObjectReference.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.StorageOS != nil { + { + size, err := m.StorageOS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xda } - if m.Optional != nil { - n += 2 + if m.Projected != nil { + { + size, err := m.Projected.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 } - return n -} - -func (m *SecretReference) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Namespace) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *SecretVolumeSource) Size() (n int) { - var l int - _ = l - l = len(m.SecretName) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.ScaleIO != nil { + { + size, err := m.ScaleIO.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca } - if m.DefaultMode != nil { - n += 1 + sovGenerated(uint64(*m.DefaultMode)) + if m.PortworxVolume != nil { + { + size, err := m.PortworxVolume.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 } - if m.Optional != nil { - n += 2 + if m.PhotonPersistentDisk != nil { + { + size, err := m.PhotonPersistentDisk.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba } - return n -} - -func (m *SecurityContext) Size() (n int) { - var l int - _ = l - if m.Capabilities != nil { - l = m.Capabilities.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.AzureDisk != nil { + { + size, err := m.AzureDisk.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 } - if m.Privileged != nil { - n += 2 + if m.Quobyte != nil { + { + size, err := m.Quobyte.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa } - if m.SELinuxOptions != nil { - l = m.SELinuxOptions.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.VsphereVolume != nil { + { + size, err := m.VsphereVolume.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 } - if m.RunAsUser != nil { - n += 1 + sovGenerated(uint64(*m.RunAsUser)) + if m.ConfigMap != nil { + { + size, err := m.ConfigMap.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a } - if m.RunAsNonRoot != nil { - n += 2 + if m.AzureFile != nil { + { + size, err := m.AzureFile.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 } - if m.ReadOnlyRootFilesystem != nil { - n += 2 + if m.FC != nil { + { + size, err := m.FC.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a } - if m.AllowPrivilegeEscalation != nil { - n += 2 + if m.DownwardAPI != nil { + { + size, err := m.DownwardAPI.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 } - if m.RunAsGroup != nil { - n += 1 + sovGenerated(uint64(*m.RunAsGroup)) + if m.Flocker != nil { + { + size, err := m.Flocker.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a } - return n -} - -func (m *SerializedReference) Size() (n int) { - var l int - _ = l - l = m.Reference.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n + if m.CephFS != nil { + { + size, err := m.CephFS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + } + if m.Cinder != nil { + { + size, err := m.Cinder.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + if m.FlexVolume != nil { + { + size, err := m.FlexVolume.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + if m.RBD != nil { + { + size, err := m.RBD.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + if m.PersistentVolumeClaim != nil { + { + size, err := m.PersistentVolumeClaim.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if m.Glusterfs != nil { + { + size, err := m.Glusterfs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if m.ISCSI != nil { + { + size, err := m.ISCSI.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.NFS != nil { + { + size, err := m.NFS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.Secret != nil { + { + size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.GitRepo != nil { + { + size, err := m.GitRepo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.AWSElasticBlockStore != nil { + { + size, err := m.AWSElasticBlockStore.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.GCEPersistentDisk != nil { + { + size, err := m.GCEPersistentDisk.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.EmptyDir != nil { + { + size, err := m.EmptyDir.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.HostPath != nil { + { + size, err := m.HostPath.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } -func (m *Service) Size() (n int) { +func (m *VsphereVirtualDiskVolumeSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VsphereVirtualDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VsphereVirtualDiskVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() + i -= len(m.StoragePolicyID) + copy(dAtA[i:], m.StoragePolicyID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePolicyID))) + i-- + dAtA[i] = 0x22 + i -= len(m.StoragePolicyName) + copy(dAtA[i:], m.StoragePolicyName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePolicyName))) + i-- + dAtA[i] = 0x1a + i -= len(m.FSType) + copy(dAtA[i:], m.FSType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i-- + dAtA[i] = 0x12 + i -= len(m.VolumePath) + copy(dAtA[i:], m.VolumePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumePath))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *WeightedPodAffinityTerm) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WeightedPodAffinityTerm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PodAffinityTerm.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i = encodeVarintGenerated(dAtA, i, uint64(m.Weight)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *WindowsSecurityContextOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WindowsSecurityContextOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WindowsSecurityContextOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.RunAsUserName != nil { + i -= len(*m.RunAsUserName) + copy(dAtA[i:], *m.RunAsUserName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.RunAsUserName))) + i-- + dAtA[i] = 0x1a + } + if m.GMSACredentialSpec != nil { + i -= len(*m.GMSACredentialSpec) + copy(dAtA[i:], *m.GMSACredentialSpec) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.GMSACredentialSpec))) + i-- + dAtA[i] = 0x12 + } + if m.GMSACredentialSpecName != nil { + i -= len(*m.GMSACredentialSpecName) + copy(dAtA[i:], *m.GMSACredentialSpecName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.GMSACredentialSpecName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AWSElasticBlockStoreVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.VolumeID) n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() + l = len(m.FSType) n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Partition)) + n += 2 return n } -func (m *ServiceAccount) Size() (n int) { +func (m *Affinity) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Secrets) > 0 { - for _, e := range m.Secrets { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + if m.NodeAffinity != nil { + l = m.NodeAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if len(m.ImagePullSecrets) > 0 { - for _, e := range m.ImagePullSecrets { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + if m.PodAffinity != nil { + l = m.PodAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if m.AutomountServiceAccountToken != nil { - n += 2 + if m.PodAntiAffinity != nil { + l = m.PodAntiAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) } return n } -func (m *ServiceAccountList) Size() (n int) { +func (m *AttachedVolume) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.ListMeta.Size() + l = len(m.Name) n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { + l = len(m.DevicePath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *AvoidPods) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PreferAvoidPods) > 0 { + for _, e := range m.PreferAvoidPods { l = e.Size() n += 1 + l + sovGenerated(uint64(l)) } @@ -13967,229 +19092,314 @@ return n } -func (m *ServiceAccountTokenProjection) Size() (n int) { +func (m *AzureDiskVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Audience) + l = len(m.DiskName) n += 1 + l + sovGenerated(uint64(l)) - if m.ExpirationSeconds != nil { - n += 1 + sovGenerated(uint64(*m.ExpirationSeconds)) - } - l = len(m.Path) + l = len(m.DataDiskURI) n += 1 + l + sovGenerated(uint64(l)) + if m.CachingMode != nil { + l = len(*m.CachingMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FSType != nil { + l = len(*m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReadOnly != nil { + n += 2 + } + if m.Kind != nil { + l = len(*m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + } return n } -func (m *ServiceList) Size() (n int) { +func (m *AzureFilePersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.ListMeta.Size() + l = len(m.SecretName) n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + l = len(m.ShareName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.SecretNamespace != nil { + l = len(*m.SecretNamespace) + n += 1 + l + sovGenerated(uint64(l)) } return n } -func (m *ServicePort) Size() (n int) { +func (m *AzureFileVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Protocol) + l = len(m.SecretName) n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.Port)) - l = m.TargetPort.Size() + l = len(m.ShareName) n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.NodePort)) + n += 2 return n } -func (m *ServiceProxyOptions) Size() (n int) { +func (m *Binding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Path) + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Target.Size() n += 1 + l + sovGenerated(uint64(l)) return n } -func (m *ServiceSpec) Size() (n int) { +func (m *CSIPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if len(m.Ports) > 0 { - for _, e := range m.Ports { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if len(m.Selector) > 0 { - for k, v := range m.Selector { + l = len(m.Driver) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeHandle) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.VolumeAttributes) > 0 { + for k, v := range m.VolumeAttributes { _ = k _ = v mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) } } - l = len(m.ClusterIP) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Type) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.ExternalIPs) > 0 { - for _, s := range m.ExternalIPs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } + if m.ControllerPublishSecretRef != nil { + l = m.ControllerPublishSecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - l = len(m.SessionAffinity) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.LoadBalancerIP) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.LoadBalancerSourceRanges) > 0 { - for _, s := range m.LoadBalancerSourceRanges { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } + if m.NodeStageSecretRef != nil { + l = m.NodeStageSecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - l = len(m.ExternalName) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.ExternalTrafficPolicy) - n += 1 + l + sovGenerated(uint64(l)) - n += 1 + sovGenerated(uint64(m.HealthCheckNodePort)) - n += 2 - if m.SessionAffinityConfig != nil { - l = m.SessionAffinityConfig.Size() + if m.NodePublishSecretRef != nil { + l = m.NodePublishSecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ControllerExpandSecretRef != nil { + l = m.ControllerExpandSecretRef.Size() n += 1 + l + sovGenerated(uint64(l)) } return n } -func (m *ServiceStatus) Size() (n int) { +func (m *CSIVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.LoadBalancer.Size() + l = len(m.Driver) n += 1 + l + sovGenerated(uint64(l)) + if m.ReadOnly != nil { + n += 2 + } + if m.FSType != nil { + l = len(*m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.VolumeAttributes) > 0 { + for k, v := range m.VolumeAttributes { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.NodePublishSecretRef != nil { + l = m.NodePublishSecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } -func (m *SessionAffinityConfig) Size() (n int) { +func (m *Capabilities) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.ClientIP != nil { - l = m.ClientIP.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Add) > 0 { + for _, s := range m.Add { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Drop) > 0 { + for _, s := range m.Drop { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } return n } -func (m *StorageOSPersistentVolumeSource) Size() (n int) { +func (m *CephFSPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.VolumeName) + if len(m.Monitors) > 0 { + for _, s := range m.Monitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Path) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.VolumeNamespace) + l = len(m.User) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) + l = len(m.SecretFile) n += 1 + l + sovGenerated(uint64(l)) - n += 2 if m.SecretRef != nil { l = m.SecretRef.Size() n += 1 + l + sovGenerated(uint64(l)) } + n += 2 return n } -func (m *StorageOSVolumeSource) Size() (n int) { +func (m *CephFSVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.VolumeName) + if len(m.Monitors) > 0 { + for _, s := range m.Monitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Path) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.VolumeNamespace) + l = len(m.User) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) + l = len(m.SecretFile) n += 1 + l + sovGenerated(uint64(l)) - n += 2 if m.SecretRef != nil { l = m.SecretRef.Size() n += 1 + l + sovGenerated(uint64(l)) } + n += 2 return n } -func (m *Sysctl) Size() (n int) { +func (m *CinderPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Name) + l = len(m.VolumeID) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Value) + l = len(m.FSType) n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } -func (m *TCPSocketAction) Size() (n int) { +func (m *CinderVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = m.Port.Size() + l = len(m.VolumeID) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Host) + l = len(m.FSType) n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } -func (m *Taint) Size() (n int) { +func (m *ClientIPConfig) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Key) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Value) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Effect) - n += 1 + l + sovGenerated(uint64(l)) - if m.TimeAdded != nil { - l = m.TimeAdded.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) } return n } -func (m *Toleration) Size() (n int) { +func (m *ComponentCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Key) + l = len(m.Type) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Operator) + l = len(m.Status) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Value) + l = len(m.Message) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Effect) + l = len(m.Error) n += 1 + l + sovGenerated(uint64(l)) - if m.TolerationSeconds != nil { - n += 1 + sovGenerated(uint64(*m.TolerationSeconds)) - } return n } -func (m *TopologySelectorLabelRequirement) Size() (n int) { +func (m *ComponentStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Key) + l = m.ObjectMeta.Size() n += 1 + l + sovGenerated(uint64(l)) - if len(m.Values) > 0 { - for _, s := range m.Values { - l = len(s) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() n += 1 + l + sovGenerated(uint64(l)) } } return n } -func (m *TopologySelectorTerm) Size() (n int) { +func (m *ComponentStatusList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if len(m.MatchLabelExpressions) > 0 { - for _, e := range m.MatchLabelExpressions { + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { l = e.Size() n += 1 + l + sovGenerated(uint64(l)) } @@ -14197,2989 +19407,10108 @@ return n } -func (m *Volume) Size() (n int) { +func (m *ConfigMap) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = m.VolumeSource.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *VolumeDevice) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.DevicePath) + l = m.ObjectMeta.Size() n += 1 + l + sovGenerated(uint64(l)) + if len(m.Data) > 0 { + for k, v := range m.Data { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.BinaryData) > 0 { + for k, v := range m.BinaryData { + _ = k + _ = v + l = 0 + if v != nil { + l = 1 + len(v) + sovGenerated(uint64(len(v))) + } + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + l + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } return n } -func (m *VolumeMount) Size() (n int) { +func (m *ConfigMapEnvSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.Name) + l = m.LocalObjectReference.Size() n += 1 + l + sovGenerated(uint64(l)) - n += 2 - l = len(m.MountPath) + if m.Optional != nil { + n += 2 + } + return n +} + +func (m *ConfigMapKeySelector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LocalObjectReference.Size() n += 1 + l + sovGenerated(uint64(l)) - l = len(m.SubPath) + l = len(m.Key) n += 1 + l + sovGenerated(uint64(l)) - if m.MountPropagation != nil { - l = len(*m.MountPropagation) - n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 } return n } -func (m *VolumeNodeAffinity) Size() (n int) { +func (m *ConfigMapList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Required != nil { - l = m.Required.Size() - n += 1 + l + sovGenerated(uint64(l)) + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } return n } -func (m *VolumeProjection) Size() (n int) { +func (m *ConfigMapNodeConfigSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.DownwardAPI != nil { - l = m.DownwardAPI.Size() - n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KubeletConfigKey) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ConfigMapProjection) Size() (n int) { + if m == nil { + return 0 } - if m.ConfigMap != nil { - l = m.ConfigMap.Size() - n += 1 + l + sovGenerated(uint64(l)) + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.ServiceAccountToken != nil { - l = m.ServiceAccountToken.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 } return n } -func (m *VolumeSource) Size() (n int) { +func (m *ConfigMapVolumeSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.HostPath != nil { - l = m.HostPath.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.EmptyDir != nil { - l = m.EmptyDir.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.GCEPersistentDisk != nil { - l = m.GCEPersistentDisk.Size() - n += 1 + l + sovGenerated(uint64(l)) + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.AWSElasticBlockStore != nil { - l = m.AWSElasticBlockStore.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) } - if m.GitRepo != nil { - l = m.GitRepo.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 } - if m.Secret != nil { - l = m.Secret.Size() - n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Container) Size() (n int) { + if m == nil { + return 0 } - if m.NFS != nil { - l = m.NFS.Size() - n += 1 + l + sovGenerated(uint64(l)) + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.ISCSI != nil { - l = m.ISCSI.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Args) > 0 { + for _, s := range m.Args { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.Glusterfs != nil { - l = m.Glusterfs.Size() - n += 1 + l + sovGenerated(uint64(l)) + l = len(m.WorkingDir) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.PersistentVolumeClaim != nil { - l = m.PersistentVolumeClaim.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.RBD != nil { - l = m.RBD.Size() - n += 1 + l + sovGenerated(uint64(l)) + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.VolumeMounts) > 0 { + for _, e := range m.VolumeMounts { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.FlexVolume != nil { - l = m.FlexVolume.Size() + if m.LivenessProbe != nil { + l = m.LivenessProbe.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.Cinder != nil { - l = m.Cinder.Size() + if m.ReadinessProbe != nil { + l = m.ReadinessProbe.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.CephFS != nil { - l = m.CephFS.Size() + if m.Lifecycle != nil { + l = m.Lifecycle.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.Flocker != nil { - l = m.Flocker.Size() + l = len(m.TerminationMessagePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ImagePullPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecurityContext != nil { + l = m.SecurityContext.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.DownwardAPI != nil { - l = m.DownwardAPI.Size() - n += 2 + l + sovGenerated(uint64(l)) - } - if m.FC != nil { - l = m.FC.Size() - n += 2 + l + sovGenerated(uint64(l)) + n += 3 + n += 3 + n += 3 + if len(m.EnvFrom) > 0 { + for _, e := range m.EnvFrom { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } } - if m.AzureFile != nil { - l = m.AzureFile.Size() - n += 2 + l + sovGenerated(uint64(l)) + l = len(m.TerminationMessagePolicy) + n += 2 + l + sovGenerated(uint64(l)) + if len(m.VolumeDevices) > 0 { + for _, e := range m.VolumeDevices { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } } - if m.ConfigMap != nil { - l = m.ConfigMap.Size() + if m.StartupProbe != nil { + l = m.StartupProbe.Size() n += 2 + l + sovGenerated(uint64(l)) } - if m.VsphereVolume != nil { - l = m.VsphereVolume.Size() - n += 2 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerImage) Size() (n int) { + if m == nil { + return 0 } - if m.Quobyte != nil { - l = m.Quobyte.Size() - n += 2 + l + sovGenerated(uint64(l)) + var l int + _ = l + if len(m.Names) > 0 { + for _, s := range m.Names { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - if m.AzureDisk != nil { - l = m.AzureDisk.Size() - n += 2 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.SizeBytes)) + return n +} + +func (m *ContainerPort) Size() (n int) { + if m == nil { + return 0 } - if m.PhotonPersistentDisk != nil { - l = m.PhotonPersistentDisk.Size() - n += 2 + l + sovGenerated(uint64(l)) + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.HostPort)) + n += 1 + sovGenerated(uint64(m.ContainerPort)) + l = len(m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.HostIP) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerState) Size() (n int) { + if m == nil { + return 0 } - if m.PortworxVolume != nil { - l = m.PortworxVolume.Size() - n += 2 + l + sovGenerated(uint64(l)) + var l int + _ = l + if m.Waiting != nil { + l = m.Waiting.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if m.ScaleIO != nil { - l = m.ScaleIO.Size() - n += 2 + l + sovGenerated(uint64(l)) + if m.Running != nil { + l = m.Running.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if m.Projected != nil { - l = m.Projected.Size() - n += 2 + l + sovGenerated(uint64(l)) + if m.Terminated != nil { + l = m.Terminated.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if m.StorageOS != nil { - l = m.StorageOS.Size() - n += 2 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerStateRunning) Size() (n int) { + if m == nil { + return 0 } + var l int + _ = l + l = m.StartedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) return n } -func (m *VsphereVirtualDiskVolumeSource) Size() (n int) { +func (m *ContainerStateTerminated) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - l = len(m.VolumePath) + n += 1 + sovGenerated(uint64(m.ExitCode)) + n += 1 + sovGenerated(uint64(m.Signal)) + l = len(m.Reason) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.FSType) + l = len(m.Message) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StoragePolicyName) + l = m.StartedAt.Size() n += 1 + l + sovGenerated(uint64(l)) - l = len(m.StoragePolicyID) + l = m.FinishedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContainerID) n += 1 + l + sovGenerated(uint64(l)) return n } -func (m *WeightedPodAffinityTerm) Size() (n int) { +func (m *ContainerStateWaiting) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - n += 1 + sovGenerated(uint64(m.Weight)) - l = m.PodAffinityTerm.Size() + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) n += 1 + l + sovGenerated(uint64(l)) return n } -func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } +func (m *ContainerStatus) Size() (n int) { + if m == nil { + return 0 } - return n -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *AWSElasticBlockStoreVolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.State.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTerminationState.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 1 + sovGenerated(uint64(m.RestartCount)) + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ImageID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContainerID) + n += 1 + l + sovGenerated(uint64(l)) + if m.Started != nil { + n += 2 } - s := strings.Join([]string{`&AWSElasticBlockStoreVolumeSource{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s + return n } -func (this *Affinity) String() string { - if this == nil { - return "nil" + +func (m *DaemonEndpoint) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&Affinity{`, - `NodeAffinity:` + strings.Replace(fmt.Sprintf("%v", this.NodeAffinity), "NodeAffinity", "NodeAffinity", 1) + `,`, - `PodAffinity:` + strings.Replace(fmt.Sprintf("%v", this.PodAffinity), "PodAffinity", "PodAffinity", 1) + `,`, - `PodAntiAffinity:` + strings.Replace(fmt.Sprintf("%v", this.PodAntiAffinity), "PodAntiAffinity", "PodAntiAffinity", 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Port)) + return n } -func (this *AttachedVolume) String() string { - if this == nil { - return "nil" + +func (m *DownwardAPIProjection) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&AttachedVolume{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `DevicePath:` + fmt.Sprintf("%v", this.DevicePath) + `,`, - `}`, - }, "") - return s -} -func (this *AvoidPods) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&AvoidPods{`, - `PreferAvoidPods:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferAvoidPods), "PreferAvoidPodsEntry", "PreferAvoidPodsEntry", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *AzureDiskVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *DownwardAPIVolumeFile) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&AzureDiskVolumeSource{`, - `DiskName:` + fmt.Sprintf("%v", this.DiskName) + `,`, - `DataDiskURI:` + fmt.Sprintf("%v", this.DataDiskURI) + `,`, - `CachingMode:` + valueToStringGenerated(this.CachingMode) + `,`, - `FSType:` + valueToStringGenerated(this.FSType) + `,`, - `ReadOnly:` + valueToStringGenerated(this.ReadOnly) + `,`, - `Kind:` + valueToStringGenerated(this.Kind) + `,`, - `}`, - }, "") - return s -} -func (this *AzureFilePersistentVolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + if m.FieldRef != nil { + l = m.FieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&AzureFilePersistentVolumeSource{`, - `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, - `ShareName:` + fmt.Sprintf("%v", this.ShareName) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `SecretNamespace:` + valueToStringGenerated(this.SecretNamespace) + `,`, - `}`, - }, "") - return s -} -func (this *AzureFileVolumeSource) String() string { - if this == nil { - return "nil" + if m.ResourceFieldRef != nil { + l = m.ResourceFieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&AzureFileVolumeSource{`, - `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, - `ShareName:` + fmt.Sprintf("%v", this.ShareName) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *Binding) String() string { - if this == nil { - return "nil" + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) } - s := strings.Join([]string{`&Binding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Target:` + strings.Replace(strings.Replace(this.Target.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *CSIPersistentVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *DownwardAPIVolumeSource) Size() (n int) { + if m == nil { + return 0 } - keysForVolumeAttributes := make([]string, 0, len(this.VolumeAttributes)) - for k := range this.VolumeAttributes { - keysForVolumeAttributes = append(keysForVolumeAttributes, k) + var l int + _ = l + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) - mapStringForVolumeAttributes := "map[string]string{" - for _, k := range keysForVolumeAttributes { - mapStringForVolumeAttributes += fmt.Sprintf("%v: %v,", k, this.VolumeAttributes[k]) + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) } - mapStringForVolumeAttributes += "}" - s := strings.Join([]string{`&CSIPersistentVolumeSource{`, - `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, - `VolumeHandle:` + fmt.Sprintf("%v", this.VolumeHandle) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `VolumeAttributes:` + mapStringForVolumeAttributes + `,`, - `ControllerPublishSecretRef:` + strings.Replace(fmt.Sprintf("%v", this.ControllerPublishSecretRef), "SecretReference", "SecretReference", 1) + `,`, - `NodeStageSecretRef:` + strings.Replace(fmt.Sprintf("%v", this.NodeStageSecretRef), "SecretReference", "SecretReference", 1) + `,`, - `NodePublishSecretRef:` + strings.Replace(fmt.Sprintf("%v", this.NodePublishSecretRef), "SecretReference", "SecretReference", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *Capabilities) String() string { - if this == nil { - return "nil" + +func (m *EmptyDirVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&Capabilities{`, - `Add:` + fmt.Sprintf("%v", this.Add) + `,`, - `Drop:` + fmt.Sprintf("%v", this.Drop) + `,`, - `}`, - }, "") - return s -} -func (this *CephFSPersistentVolumeSource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CephFSPersistentVolumeSource{`, - `Monitors:` + fmt.Sprintf("%v", this.Monitors) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `SecretFile:` + fmt.Sprintf("%v", this.SecretFile) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *CephFSVolumeSource) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CephFSVolumeSource{`, - `Monitors:` + fmt.Sprintf("%v", this.Monitors) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `SecretFile:` + fmt.Sprintf("%v", this.SecretFile) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *CinderPersistentVolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Medium) + n += 1 + l + sovGenerated(uint64(l)) + if m.SizeLimit != nil { + l = m.SizeLimit.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&CinderPersistentVolumeSource{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *CinderVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *EndpointAddress) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&CinderVolumeSource{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ClientIPConfig) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.IP) + n += 1 + l + sovGenerated(uint64(l)) + if m.TargetRef != nil { + l = m.TargetRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ClientIPConfig{`, - `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, - `}`, - }, "") - return s -} -func (this *ComponentCondition) String() string { - if this == nil { - return "nil" + l = len(m.Hostname) + n += 1 + l + sovGenerated(uint64(l)) + if m.NodeName != nil { + l = len(*m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ComponentCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `Error:` + fmt.Sprintf("%v", this.Error) + `,`, - `}`, - }, "") - return s + return n } -func (this *ComponentStatus) String() string { - if this == nil { - return "nil" + +func (m *EndpointPort) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ComponentStatus{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ComponentCondition", "ComponentCondition", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Port)) + l = len(m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ComponentStatusList) String() string { - if this == nil { - return "nil" + +func (m *EndpointSubset) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ComponentStatusList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ComponentStatus", "ComponentStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigMap) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Addresses) > 0 { + for _, e := range m.Addresses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - keysForData := make([]string, 0, len(this.Data)) - for k := range this.Data { - keysForData = append(keysForData, k) + if len(m.NotReadyAddresses) > 0 { + for _, e := range m.NotReadyAddresses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForData) - mapStringForData := "map[string]string{" - for _, k := range keysForData { - mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForData += "}" - keysForBinaryData := make([]string, 0, len(this.BinaryData)) - for k := range this.BinaryData { - keysForBinaryData = append(keysForBinaryData, k) + return n +} + +func (m *Endpoints) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForBinaryData) - mapStringForBinaryData := "map[string][]byte{" - for _, k := range keysForBinaryData { - mapStringForBinaryData += fmt.Sprintf("%v: %v,", k, this.BinaryData[k]) + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Subsets) > 0 { + for _, e := range m.Subsets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForBinaryData += "}" - s := strings.Join([]string{`&ConfigMap{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Data:` + mapStringForData + `,`, - `BinaryData:` + mapStringForBinaryData + `,`, - `}`, - }, "") - return s + return n } -func (this *ConfigMapEnvSource) String() string { - if this == nil { - return "nil" + +func (m *EndpointsList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ConfigMapEnvSource{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigMapKeySelector) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&ConfigMapKeySelector{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s + return n } -func (this *ConfigMapList) String() string { - if this == nil { - return "nil" + +func (m *EnvFromSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ConfigMapList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ConfigMap", "ConfigMap", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigMapNodeConfigSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Prefix) + n += 1 + l + sovGenerated(uint64(l)) + if m.ConfigMapRef != nil { + l = m.ConfigMapRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ConfigMapNodeConfigSource{`, - `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `UID:` + fmt.Sprintf("%v", this.UID) + `,`, - `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, - `KubeletConfigKey:` + fmt.Sprintf("%v", this.KubeletConfigKey) + `,`, - `}`, - }, "") - return s -} -func (this *ConfigMapProjection) String() string { - if this == nil { - return "nil" + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ConfigMapProjection{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s + return n } -func (this *ConfigMapVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *EnvVar) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ConfigMapVolumeSource{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, - `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s -} -func (this *Container) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + if m.ValueFrom != nil { + l = m.ValueFrom.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&Container{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Image:` + fmt.Sprintf("%v", this.Image) + `,`, - `Command:` + fmt.Sprintf("%v", this.Command) + `,`, - `Args:` + fmt.Sprintf("%v", this.Args) + `,`, - `WorkingDir:` + fmt.Sprintf("%v", this.WorkingDir) + `,`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "ContainerPort", "ContainerPort", 1), `&`, ``, 1) + `,`, - `Env:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Env), "EnvVar", "EnvVar", 1), `&`, ``, 1) + `,`, - `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, - `VolumeMounts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeMounts), "VolumeMount", "VolumeMount", 1), `&`, ``, 1) + `,`, - `LivenessProbe:` + strings.Replace(fmt.Sprintf("%v", this.LivenessProbe), "Probe", "Probe", 1) + `,`, - `ReadinessProbe:` + strings.Replace(fmt.Sprintf("%v", this.ReadinessProbe), "Probe", "Probe", 1) + `,`, - `Lifecycle:` + strings.Replace(fmt.Sprintf("%v", this.Lifecycle), "Lifecycle", "Lifecycle", 1) + `,`, - `TerminationMessagePath:` + fmt.Sprintf("%v", this.TerminationMessagePath) + `,`, - `ImagePullPolicy:` + fmt.Sprintf("%v", this.ImagePullPolicy) + `,`, - `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "SecurityContext", "SecurityContext", 1) + `,`, - `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, - `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, - `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, - `EnvFrom:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EnvFrom), "EnvFromSource", "EnvFromSource", 1), `&`, ``, 1) + `,`, - `TerminationMessagePolicy:` + fmt.Sprintf("%v", this.TerminationMessagePolicy) + `,`, - `VolumeDevices:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeDevices), "VolumeDevice", "VolumeDevice", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *ContainerImage) String() string { - if this == nil { - return "nil" + +func (m *EnvVarSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ContainerImage{`, - `Names:` + fmt.Sprintf("%v", this.Names) + `,`, - `SizeBytes:` + fmt.Sprintf("%v", this.SizeBytes) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerPort) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.FieldRef != nil { + l = m.FieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ContainerPort{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `HostPort:` + fmt.Sprintf("%v", this.HostPort) + `,`, - `ContainerPort:` + fmt.Sprintf("%v", this.ContainerPort) + `,`, - `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, - `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerState) String() string { - if this == nil { - return "nil" + if m.ResourceFieldRef != nil { + l = m.ResourceFieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ContainerState{`, - `Waiting:` + strings.Replace(fmt.Sprintf("%v", this.Waiting), "ContainerStateWaiting", "ContainerStateWaiting", 1) + `,`, - `Running:` + strings.Replace(fmt.Sprintf("%v", this.Running), "ContainerStateRunning", "ContainerStateRunning", 1) + `,`, - `Terminated:` + strings.Replace(fmt.Sprintf("%v", this.Terminated), "ContainerStateTerminated", "ContainerStateTerminated", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerStateRunning) String() string { - if this == nil { - return "nil" + if m.ConfigMapKeyRef != nil { + l = m.ConfigMapKeyRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ContainerStateRunning{`, - `StartedAt:` + strings.Replace(strings.Replace(this.StartedAt.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ContainerStateTerminated) String() string { - if this == nil { - return "nil" + if m.SecretKeyRef != nil { + l = m.SecretKeyRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ContainerStateTerminated{`, - `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, - `Signal:` + fmt.Sprintf("%v", this.Signal) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `StartedAt:` + strings.Replace(strings.Replace(this.StartedAt.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `FinishedAt:` + strings.Replace(strings.Replace(this.FinishedAt.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, - `}`, - }, "") - return s + return n } -func (this *ContainerStateWaiting) String() string { - if this == nil { - return "nil" + +func (m *EphemeralContainer) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ContainerStateWaiting{`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.EphemeralContainerCommon.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.TargetContainerName) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ContainerStatus) String() string { - if this == nil { - return "nil" + +func (m *EphemeralContainerCommon) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ContainerStatus{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `State:` + strings.Replace(strings.Replace(this.State.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, - `LastTerminationState:` + strings.Replace(strings.Replace(this.LastTerminationState.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, - `Ready:` + fmt.Sprintf("%v", this.Ready) + `,`, - `RestartCount:` + fmt.Sprintf("%v", this.RestartCount) + `,`, - `Image:` + fmt.Sprintf("%v", this.Image) + `,`, - `ImageID:` + fmt.Sprintf("%v", this.ImageID) + `,`, - `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, - `}`, - }, "") - return s -} -func (this *DaemonEndpoint) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&DaemonEndpoint{`, - `Port:` + fmt.Sprintf("%v", this.Port) + `,`, - `}`, - }, "") - return s -} -func (this *DownwardAPIProjection) String() string { - if this == nil { - return "nil" + if len(m.Args) > 0 { + for _, s := range m.Args { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&DownwardAPIProjection{`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DownwardAPIVolumeFile", "DownwardAPIVolumeFile", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *DownwardAPIVolumeFile) String() string { - if this == nil { - return "nil" + l = len(m.WorkingDir) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&DownwardAPIVolumeFile{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, - `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, - `Mode:` + valueToStringGenerated(this.Mode) + `,`, - `}`, - }, "") - return s -} -func (this *DownwardAPIVolumeSource) String() string { - if this == nil { - return "nil" + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&DownwardAPIVolumeSource{`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DownwardAPIVolumeFile", "DownwardAPIVolumeFile", 1), `&`, ``, 1) + `,`, - `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, - `}`, - }, "") - return s -} -func (this *EmptyDirVolumeSource) String() string { - if this == nil { - return "nil" + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.VolumeMounts) > 0 { + for _, e := range m.VolumeMounts { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&EmptyDirVolumeSource{`, - `Medium:` + fmt.Sprintf("%v", this.Medium) + `,`, - `SizeLimit:` + strings.Replace(fmt.Sprintf("%v", this.SizeLimit), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, - `}`, - }, "") - return s -} -func (this *EndpointAddress) String() string { - if this == nil { - return "nil" + if m.LivenessProbe != nil { + l = m.LivenessProbe.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&EndpointAddress{`, - `IP:` + fmt.Sprintf("%v", this.IP) + `,`, - `TargetRef:` + strings.Replace(fmt.Sprintf("%v", this.TargetRef), "ObjectReference", "ObjectReference", 1) + `,`, - `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, - `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, - `}`, - }, "") - return s -} -func (this *EndpointPort) String() string { - if this == nil { - return "nil" + if m.ReadinessProbe != nil { + l = m.ReadinessProbe.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&EndpointPort{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Port:` + fmt.Sprintf("%v", this.Port) + `,`, - `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, - `}`, - }, "") - return s -} -func (this *EndpointSubset) String() string { - if this == nil { - return "nil" + if m.Lifecycle != nil { + l = m.Lifecycle.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&EndpointSubset{`, - `Addresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Addresses), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + `,`, - `NotReadyAddresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NotReadyAddresses), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + `,`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "EndpointPort", "EndpointPort", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *Endpoints) String() string { - if this == nil { - return "nil" + l = len(m.TerminationMessagePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ImagePullPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecurityContext != nil { + l = m.SecurityContext.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&Endpoints{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subsets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subsets), "EndpointSubset", "EndpointSubset", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *EndpointsList) String() string { - if this == nil { - return "nil" + n += 3 + n += 3 + n += 3 + if len(m.EnvFrom) > 0 { + for _, e := range m.EnvFrom { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&EndpointsList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Endpoints", "Endpoints", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *EnvFromSource) String() string { - if this == nil { - return "nil" + l = len(m.TerminationMessagePolicy) + n += 2 + l + sovGenerated(uint64(l)) + if len(m.VolumeDevices) > 0 { + for _, e := range m.VolumeDevices { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&EnvFromSource{`, - `Prefix:` + fmt.Sprintf("%v", this.Prefix) + `,`, - `ConfigMapRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapRef), "ConfigMapEnvSource", "ConfigMapEnvSource", 1) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretEnvSource", "SecretEnvSource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *EnvVar) String() string { - if this == nil { - return "nil" + if m.StartupProbe != nil { + l = m.StartupProbe.Size() + n += 2 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&EnvVar{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `ValueFrom:` + strings.Replace(fmt.Sprintf("%v", this.ValueFrom), "EnvVarSource", "EnvVarSource", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *EnvVarSource) String() string { - if this == nil { - return "nil" + +func (m *EphemeralContainers) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&EnvVarSource{`, - `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, - `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, - `ConfigMapKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapKeyRef), "ConfigMapKeySelector", "ConfigMapKeySelector", 1) + `,`, - `SecretKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretKeyRef), "SecretKeySelector", "SecretKeySelector", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Event) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.EphemeralContainers) > 0 { + for _, e := range m.EphemeralContainers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&Event{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `InvolvedObject:` + strings.Replace(strings.Replace(this.InvolvedObject.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `Source:` + strings.Replace(strings.Replace(this.Source.String(), "EventSource", "EventSource", 1), `&`, ``, 1) + `,`, - `FirstTimestamp:` + strings.Replace(strings.Replace(this.FirstTimestamp.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTimestamp:` + strings.Replace(strings.Replace(this.LastTimestamp.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Count:` + fmt.Sprintf("%v", this.Count) + `,`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `EventTime:` + strings.Replace(strings.Replace(this.EventTime.String(), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1), `&`, ``, 1) + `,`, - `Series:` + strings.Replace(fmt.Sprintf("%v", this.Series), "EventSeries", "EventSeries", 1) + `,`, - `Action:` + fmt.Sprintf("%v", this.Action) + `,`, - `Related:` + strings.Replace(fmt.Sprintf("%v", this.Related), "ObjectReference", "ObjectReference", 1) + `,`, - `ReportingController:` + fmt.Sprintf("%v", this.ReportingController) + `,`, - `ReportingInstance:` + fmt.Sprintf("%v", this.ReportingInstance) + `,`, - `}`, - }, "") - return s + return n } -func (this *EventList) String() string { - if this == nil { - return "nil" + +func (m *Event) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&EventList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Event", "Event", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.InvolvedObject.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Source.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.FirstTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Count)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = m.EventTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Series != nil { + l = m.Series.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Action) + n += 1 + l + sovGenerated(uint64(l)) + if m.Related != nil { + l = m.Related.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.ReportingController) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ReportingInstance) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *EventSeries) String() string { - if this == nil { - return "nil" + +func (m *EventList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&EventSeries{`, - `Count:` + fmt.Sprintf("%v", this.Count) + `,`, - `LastObservedTime:` + strings.Replace(strings.Replace(this.LastObservedTime.String(), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1), `&`, ``, 1) + `,`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *EventSource) String() string { - if this == nil { - return "nil" + +func (m *EventSeries) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&EventSource{`, - `Component:` + fmt.Sprintf("%v", this.Component) + `,`, - `Host:` + fmt.Sprintf("%v", this.Host) + `,`, - `}`, - }, "") - return s + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Count)) + l = m.LastObservedTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.State) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ExecAction) String() string { - if this == nil { - return "nil" + +func (m *EventSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ExecAction{`, - `Command:` + fmt.Sprintf("%v", this.Command) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Component) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *FCVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *ExecAction) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&FCVolumeSource{`, - `TargetWWNs:` + fmt.Sprintf("%v", this.TargetWWNs) + `,`, - `Lun:` + valueToStringGenerated(this.Lun) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `WWIDs:` + fmt.Sprintf("%v", this.WWIDs) + `,`, - `}`, - }, "") - return s + var l int + _ = l + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *FlexPersistentVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *FCVolumeSource) Size() (n int) { + if m == nil { + return 0 } - keysForOptions := make([]string, 0, len(this.Options)) - for k := range this.Options { - keysForOptions = append(keysForOptions, k) + var l int + _ = l + if len(m.TargetWWNs) > 0 { + for _, s := range m.TargetWWNs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) - mapStringForOptions := "map[string]string{" - for _, k := range keysForOptions { - mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) + if m.Lun != nil { + n += 1 + sovGenerated(uint64(*m.Lun)) } - mapStringForOptions += "}" - s := strings.Join([]string{`&FlexPersistentVolumeSource{`, - `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `Options:` + mapStringForOptions + `,`, - `}`, - }, "") - return s + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if len(m.WWIDs) > 0 { + for _, s := range m.WWIDs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *FlexVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *FlexPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 } - keysForOptions := make([]string, 0, len(this.Options)) - for k := range this.Options { - keysForOptions = append(keysForOptions, k) + var l int + _ = l + l = len(m.Driver) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) - mapStringForOptions := "map[string]string{" - for _, k := range keysForOptions { - mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) + n += 2 + if len(m.Options) > 0 { + for k, v := range m.Options { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - mapStringForOptions += "}" - s := strings.Join([]string{`&FlexVolumeSource{`, - `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `Options:` + mapStringForOptions + `,`, - `}`, - }, "") - return s + return n } -func (this *FlockerVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *FlexVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&FlockerVolumeSource{`, - `DatasetName:` + fmt.Sprintf("%v", this.DatasetName) + `,`, - `DatasetUUID:` + fmt.Sprintf("%v", this.DatasetUUID) + `,`, - `}`, - }, "") - return s -} -func (this *GCEPersistentDiskVolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Driver) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&GCEPersistentDiskVolumeSource{`, - `PDName:` + fmt.Sprintf("%v", this.PDName) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *GitRepoVolumeSource) String() string { - if this == nil { - return "nil" + n += 2 + if len(m.Options) > 0 { + for k, v := range m.Options { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&GitRepoVolumeSource{`, - `Repository:` + fmt.Sprintf("%v", this.Repository) + `,`, - `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, - `Directory:` + fmt.Sprintf("%v", this.Directory) + `,`, - `}`, - }, "") - return s + return n } -func (this *GlusterfsVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *FlockerVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&GlusterfsVolumeSource{`, - `EndpointsName:` + fmt.Sprintf("%v", this.EndpointsName) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.DatasetName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DatasetUUID) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *HTTPGetAction) String() string { - if this == nil { - return "nil" + +func (m *GCEPersistentDiskVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&HTTPGetAction{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `Port:` + strings.Replace(strings.Replace(this.Port.String(), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, - `Host:` + fmt.Sprintf("%v", this.Host) + `,`, - `Scheme:` + fmt.Sprintf("%v", this.Scheme) + `,`, - `HTTPHeaders:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HTTPHeaders), "HTTPHeader", "HTTPHeader", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.PDName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Partition)) + n += 2 + return n } -func (this *HTTPHeader) String() string { - if this == nil { - return "nil" + +func (m *GitRepoVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&HTTPHeader{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Repository) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Revision) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Directory) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *Handler) String() string { - if this == nil { - return "nil" + +func (m *GlusterfsPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&Handler{`, - `Exec:` + strings.Replace(fmt.Sprintf("%v", this.Exec), "ExecAction", "ExecAction", 1) + `,`, - `HTTPGet:` + strings.Replace(fmt.Sprintf("%v", this.HTTPGet), "HTTPGetAction", "HTTPGetAction", 1) + `,`, - `TCPSocket:` + strings.Replace(fmt.Sprintf("%v", this.TCPSocket), "TCPSocketAction", "TCPSocketAction", 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.EndpointsName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.EndpointsNamespace != nil { + l = len(*m.EndpointsNamespace) + n += 1 + l + sovGenerated(uint64(l)) + } + return n } -func (this *HostAlias) String() string { - if this == nil { - return "nil" + +func (m *GlusterfsVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&HostAlias{`, - `IP:` + fmt.Sprintf("%v", this.IP) + `,`, - `Hostnames:` + fmt.Sprintf("%v", this.Hostnames) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.EndpointsName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n } -func (this *HostPathVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *HTTPGetAction) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&HostPathVolumeSource{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `Type:` + valueToStringGenerated(this.Type) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Port.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Scheme) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.HTTPHeaders) > 0 { + for _, e := range m.HTTPHeaders { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *ISCSIPersistentVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *HTTPHeader) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ISCSIPersistentVolumeSource{`, - `TargetPortal:` + fmt.Sprintf("%v", this.TargetPortal) + `,`, - `IQN:` + fmt.Sprintf("%v", this.IQN) + `,`, - `Lun:` + fmt.Sprintf("%v", this.Lun) + `,`, - `ISCSIInterface:` + fmt.Sprintf("%v", this.ISCSIInterface) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `Portals:` + fmt.Sprintf("%v", this.Portals) + `,`, - `DiscoveryCHAPAuth:` + fmt.Sprintf("%v", this.DiscoveryCHAPAuth) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, - `SessionCHAPAuth:` + fmt.Sprintf("%v", this.SessionCHAPAuth) + `,`, - `InitiatorName:` + valueToStringGenerated(this.InitiatorName) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ISCSIVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *Handler) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ISCSIVolumeSource{`, - `TargetPortal:` + fmt.Sprintf("%v", this.TargetPortal) + `,`, - `IQN:` + fmt.Sprintf("%v", this.IQN) + `,`, - `Lun:` + fmt.Sprintf("%v", this.Lun) + `,`, - `ISCSIInterface:` + fmt.Sprintf("%v", this.ISCSIInterface) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `Portals:` + fmt.Sprintf("%v", this.Portals) + `,`, - `DiscoveryCHAPAuth:` + fmt.Sprintf("%v", this.DiscoveryCHAPAuth) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `SessionCHAPAuth:` + fmt.Sprintf("%v", this.SessionCHAPAuth) + `,`, - `InitiatorName:` + valueToStringGenerated(this.InitiatorName) + `,`, - `}`, - }, "") - return s -} -func (this *KeyToPath) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.Exec != nil { + l = m.Exec.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&KeyToPath{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `Mode:` + valueToStringGenerated(this.Mode) + `,`, - `}`, - }, "") - return s -} -func (this *Lifecycle) String() string { - if this == nil { - return "nil" + if m.HTTPGet != nil { + l = m.HTTPGet.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&Lifecycle{`, - `PostStart:` + strings.Replace(fmt.Sprintf("%v", this.PostStart), "Handler", "Handler", 1) + `,`, - `PreStop:` + strings.Replace(fmt.Sprintf("%v", this.PreStop), "Handler", "Handler", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LimitRange) String() string { - if this == nil { - return "nil" + if m.TCPSocket != nil { + l = m.TCPSocket.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&LimitRange{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LimitRangeSpec", "LimitRangeSpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *LimitRangeItem) String() string { - if this == nil { - return "nil" + +func (m *HostAlias) Size() (n int) { + if m == nil { + return 0 } - keysForMax := make([]string, 0, len(this.Max)) - for k := range this.Max { - keysForMax = append(keysForMax, string(k)) + var l int + _ = l + l = len(m.IP) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Hostnames) > 0 { + for _, s := range m.Hostnames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForMax) - mapStringForMax := "ResourceList{" - for _, k := range keysForMax { - mapStringForMax += fmt.Sprintf("%v: %v,", k, this.Max[ResourceName(k)]) + return n +} + +func (m *HostPathVolumeSource) Size() (n int) { + if m == nil { + return 0 } - mapStringForMax += "}" - keysForMin := make([]string, 0, len(this.Min)) - for k := range this.Min { - keysForMin = append(keysForMin, string(k)) + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + if m.Type != nil { + l = len(*m.Type) + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForMin) - mapStringForMin := "ResourceList{" - for _, k := range keysForMin { - mapStringForMin += fmt.Sprintf("%v: %v,", k, this.Min[ResourceName(k)]) + return n +} + +func (m *ISCSIPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 } - mapStringForMin += "}" - keysForDefault := make([]string, 0, len(this.Default)) - for k := range this.Default { - keysForDefault = append(keysForDefault, string(k)) + var l int + _ = l + l = len(m.TargetPortal) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.IQN) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Lun)) + l = len(m.ISCSIInterface) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if len(m.Portals) > 0 { + for _, s := range m.Portals { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) - mapStringForDefault := "ResourceList{" - for _, k := range keysForDefault { - mapStringForDefault += fmt.Sprintf("%v: %v,", k, this.Default[ResourceName(k)]) + n += 2 + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForDefault += "}" - keysForDefaultRequest := make([]string, 0, len(this.DefaultRequest)) - for k := range this.DefaultRequest { - keysForDefaultRequest = append(keysForDefaultRequest, string(k)) + n += 2 + if m.InitiatorName != nil { + l = len(*m.InitiatorName) + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) - mapStringForDefaultRequest := "ResourceList{" - for _, k := range keysForDefaultRequest { - mapStringForDefaultRequest += fmt.Sprintf("%v: %v,", k, this.DefaultRequest[ResourceName(k)]) + return n +} + +func (m *ISCSIVolumeSource) Size() (n int) { + if m == nil { + return 0 } - mapStringForDefaultRequest += "}" - keysForMaxLimitRequestRatio := make([]string, 0, len(this.MaxLimitRequestRatio)) - for k := range this.MaxLimitRequestRatio { - keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) + var l int + _ = l + l = len(m.TargetPortal) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.IQN) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Lun)) + l = len(m.ISCSIInterface) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if len(m.Portals) > 0 { + for _, s := range m.Portals { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) - mapStringForMaxLimitRequestRatio := "ResourceList{" - for _, k := range keysForMaxLimitRequestRatio { - mapStringForMaxLimitRequestRatio += fmt.Sprintf("%v: %v,", k, this.MaxLimitRequestRatio[ResourceName(k)]) + n += 2 + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForMaxLimitRequestRatio += "}" - s := strings.Join([]string{`&LimitRangeItem{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Max:` + mapStringForMax + `,`, - `Min:` + mapStringForMin + `,`, - `Default:` + mapStringForDefault + `,`, - `DefaultRequest:` + mapStringForDefaultRequest + `,`, - `MaxLimitRequestRatio:` + mapStringForMaxLimitRequestRatio + `,`, - `}`, - }, "") - return s -} -func (this *LimitRangeList) String() string { - if this == nil { - return "nil" + n += 2 + if m.InitiatorName != nil { + l = len(*m.InitiatorName) + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&LimitRangeList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "LimitRange", "LimitRange", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *LimitRangeSpec) String() string { - if this == nil { - return "nil" + +func (m *KeyToPath) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&LimitRangeSpec{`, - `Limits:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Limits), "LimitRangeItem", "LimitRangeItem", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *List) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) } - s := strings.Join([]string{`&List{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *LoadBalancerIngress) String() string { - if this == nil { - return "nil" + +func (m *Lifecycle) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&LoadBalancerIngress{`, - `IP:` + fmt.Sprintf("%v", this.IP) + `,`, - `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, - `}`, - }, "") - return s -} -func (this *LoadBalancerStatus) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.PostStart != nil { + l = m.PostStart.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&LoadBalancerStatus{`, - `Ingress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ingress), "LoadBalancerIngress", "LoadBalancerIngress", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *LocalObjectReference) String() string { - if this == nil { - return "nil" + if m.PreStop != nil { + l = m.PreStop.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&LocalObjectReference{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `}`, - }, "") - return s + return n } -func (this *LocalVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *LimitRange) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&LocalVolumeSource{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *NFSVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *LimitRangeItem) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NFSVolumeSource{`, - `Server:` + fmt.Sprintf("%v", this.Server) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *Namespace) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Max) > 0 { + for k, v := range m.Max { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&Namespace{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NamespaceSpec", "NamespaceSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NamespaceStatus", "NamespaceStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *NamespaceList) String() string { - if this == nil { - return "nil" + if len(m.Min) > 0 { + for k, v := range m.Min { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&NamespaceList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Namespace", "Namespace", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *NamespaceSpec) String() string { - if this == nil { - return "nil" + if len(m.Default) > 0 { + for k, v := range m.Default { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&NamespaceSpec{`, - `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, - `}`, - }, "") - return s -} -func (this *NamespaceStatus) String() string { - if this == nil { - return "nil" + if len(m.DefaultRequest) > 0 { + for k, v := range m.DefaultRequest { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&NamespaceStatus{`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `}`, - }, "") - return s -} -func (this *Node) String() string { - if this == nil { - return "nil" + if len(m.MaxLimitRequestRatio) > 0 { + for k, v := range m.MaxLimitRequestRatio { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&Node{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NodeSpec", "NodeSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NodeStatus", "NodeStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *NodeAddress) String() string { - if this == nil { - return "nil" + +func (m *LimitRangeList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeAddress{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Address:` + fmt.Sprintf("%v", this.Address) + `,`, - `}`, - }, "") - return s -} -func (this *NodeAffinity) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&NodeAffinity{`, - `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "NodeSelector", "NodeSelector", 1) + `,`, - `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "PreferredSchedulingTerm", "PreferredSchedulingTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *NodeCondition) String() string { - if this == nil { - return "nil" + +func (m *LimitRangeSpec) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastHeartbeatTime:` + strings.Replace(strings.Replace(this.LastHeartbeatTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *NodeConfigSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Limits) > 0 { + for _, e := range m.Limits { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&NodeConfigSource{`, - `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapNodeConfigSource", "ConfigMapNodeConfigSource", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *NodeConfigStatus) String() string { - if this == nil { - return "nil" + +func (m *List) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeConfigStatus{`, - `Assigned:` + strings.Replace(fmt.Sprintf("%v", this.Assigned), "NodeConfigSource", "NodeConfigSource", 1) + `,`, - `Active:` + strings.Replace(fmt.Sprintf("%v", this.Active), "NodeConfigSource", "NodeConfigSource", 1) + `,`, - `LastKnownGood:` + strings.Replace(fmt.Sprintf("%v", this.LastKnownGood), "NodeConfigSource", "NodeConfigSource", 1) + `,`, - `Error:` + fmt.Sprintf("%v", this.Error) + `,`, - `}`, - }, "") - return s -} -func (this *NodeDaemonEndpoints) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&NodeDaemonEndpoints{`, - `KubeletEndpoint:` + strings.Replace(strings.Replace(this.KubeletEndpoint.String(), "DaemonEndpoint", "DaemonEndpoint", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *NodeList) String() string { - if this == nil { - return "nil" + +func (m *LoadBalancerIngress) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Node", "Node", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.IP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Hostname) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *NodeProxyOptions) String() string { - if this == nil { - return "nil" + +func (m *LoadBalancerStatus) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeProxyOptions{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `}`, - }, "") - return s + var l int + _ = l + if len(m.Ingress) > 0 { + for _, e := range m.Ingress { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *NodeResources) String() string { - if this == nil { - return "nil" + +func (m *LocalObjectReference) Size() (n int) { + if m == nil { + return 0 } - keysForCapacity := make([]string, 0, len(this.Capacity)) - for k := range this.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LocalVolumeSource) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - mapStringForCapacity := "ResourceList{" - for _, k := range keysForCapacity { - mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + if m.FSType != nil { + l = len(*m.FSType) + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForCapacity += "}" - s := strings.Join([]string{`&NodeResources{`, - `Capacity:` + mapStringForCapacity + `,`, - `}`, - }, "") - return s + return n } -func (this *NodeSelector) String() string { - if this == nil { - return "nil" + +func (m *NFSVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeSelector{`, - `NodeSelectorTerms:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NodeSelectorTerms), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Server) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n } -func (this *NodeSelectorRequirement) String() string { - if this == nil { - return "nil" + +func (m *Namespace) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeSelectorRequirement{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, - `Values:` + fmt.Sprintf("%v", this.Values) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *NodeSelectorTerm) String() string { - if this == nil { - return "nil" + +func (m *NamespaceCondition) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeSelectorTerm{`, - `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "NodeSelectorRequirement", "NodeSelectorRequirement", 1), `&`, ``, 1) + `,`, - `MatchFields:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchFields), "NodeSelectorRequirement", "NodeSelectorRequirement", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *NodeSpec) String() string { - if this == nil { - return "nil" + +func (m *NamespaceList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeSpec{`, - `PodCIDR:` + fmt.Sprintf("%v", this.PodCIDR) + `,`, - `DoNotUse_ExternalID:` + fmt.Sprintf("%v", this.DoNotUse_ExternalID) + `,`, - `ProviderID:` + fmt.Sprintf("%v", this.ProviderID) + `,`, - `Unschedulable:` + fmt.Sprintf("%v", this.Unschedulable) + `,`, - `Taints:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Taints), "Taint", "Taint", 1), `&`, ``, 1) + `,`, - `ConfigSource:` + strings.Replace(fmt.Sprintf("%v", this.ConfigSource), "NodeConfigSource", "NodeConfigSource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *NodeStatus) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - keysForCapacity := make([]string, 0, len(this.Capacity)) - for k := range this.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) + return n +} + +func (m *NamespaceSpec) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - mapStringForCapacity := "ResourceList{" - for _, k := range keysForCapacity { - mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + var l int + _ = l + if len(m.Finalizers) > 0 { + for _, s := range m.Finalizers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForCapacity += "}" - keysForAllocatable := make([]string, 0, len(this.Allocatable)) - for k := range this.Allocatable { - keysForAllocatable = append(keysForAllocatable, string(k)) + return n +} + +func (m *NamespaceStatus) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) - mapStringForAllocatable := "ResourceList{" - for _, k := range keysForAllocatable { - mapStringForAllocatable += fmt.Sprintf("%v: %v,", k, this.Allocatable[ResourceName(k)]) + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForAllocatable += "}" - s := strings.Join([]string{`&NodeStatus{`, - `Capacity:` + mapStringForCapacity + `,`, - `Allocatable:` + mapStringForAllocatable + `,`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "NodeCondition", "NodeCondition", 1), `&`, ``, 1) + `,`, - `Addresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Addresses), "NodeAddress", "NodeAddress", 1), `&`, ``, 1) + `,`, - `DaemonEndpoints:` + strings.Replace(strings.Replace(this.DaemonEndpoints.String(), "NodeDaemonEndpoints", "NodeDaemonEndpoints", 1), `&`, ``, 1) + `,`, - `NodeInfo:` + strings.Replace(strings.Replace(this.NodeInfo.String(), "NodeSystemInfo", "NodeSystemInfo", 1), `&`, ``, 1) + `,`, - `Images:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Images), "ContainerImage", "ContainerImage", 1), `&`, ``, 1) + `,`, - `VolumesInUse:` + fmt.Sprintf("%v", this.VolumesInUse) + `,`, - `VolumesAttached:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumesAttached), "AttachedVolume", "AttachedVolume", 1), `&`, ``, 1) + `,`, - `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "NodeConfigStatus", "NodeConfigStatus", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *NodeSystemInfo) String() string { - if this == nil { - return "nil" + +func (m *Node) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&NodeSystemInfo{`, - `MachineID:` + fmt.Sprintf("%v", this.MachineID) + `,`, - `SystemUUID:` + fmt.Sprintf("%v", this.SystemUUID) + `,`, - `BootID:` + fmt.Sprintf("%v", this.BootID) + `,`, - `KernelVersion:` + fmt.Sprintf("%v", this.KernelVersion) + `,`, - `OSImage:` + fmt.Sprintf("%v", this.OSImage) + `,`, - `ContainerRuntimeVersion:` + fmt.Sprintf("%v", this.ContainerRuntimeVersion) + `,`, - `KubeletVersion:` + fmt.Sprintf("%v", this.KubeletVersion) + `,`, - `KubeProxyVersion:` + fmt.Sprintf("%v", this.KubeProxyVersion) + `,`, - `OperatingSystem:` + fmt.Sprintf("%v", this.OperatingSystem) + `,`, - `Architecture:` + fmt.Sprintf("%v", this.Architecture) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ObjectFieldSelector) String() string { - if this == nil { - return "nil" + +func (m *NodeAddress) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ObjectFieldSelector{`, - `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, - `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Address) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ObjectReference) String() string { - if this == nil { - return "nil" + +func (m *NodeAffinity) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ObjectReference{`, - `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `UID:` + fmt.Sprintf("%v", this.UID) + `,`, - `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, - `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, - `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, - `}`, - }, "") - return s -} -func (this *PersistentVolume) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { + l = m.RequiredDuringSchedulingIgnoredDuringExecution.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&PersistentVolume{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeSpec", "PersistentVolumeSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeStatus", "PersistentVolumeStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PersistentVolumeClaim) String() string { - if this == nil { - return "nil" + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PersistentVolumeClaim{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeClaimSpec", "PersistentVolumeClaimSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeClaimStatus", "PersistentVolumeClaimStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *PersistentVolumeClaimCondition) String() string { - if this == nil { - return "nil" + +func (m *NodeCondition) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PersistentVolumeClaimCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastHeartbeatTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PersistentVolumeClaimList) String() string { - if this == nil { - return "nil" + +func (m *NodeConfigSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PersistentVolumeClaimList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PersistentVolumeClaim", "PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PersistentVolumeClaimSpec) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.ConfigMap != nil { + l = m.ConfigMap.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&PersistentVolumeClaimSpec{`, - `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, - `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, - `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `StorageClassName:` + valueToStringGenerated(this.StorageClassName) + `,`, - `VolumeMode:` + valueToStringGenerated(this.VolumeMode) + `,`, - `}`, - }, "") - return s + return n } -func (this *PersistentVolumeClaimStatus) String() string { - if this == nil { - return "nil" - } - keysForCapacity := make([]string, 0, len(this.Capacity)) - for k := range this.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) + +func (m *NodeConfigStatus) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - mapStringForCapacity := "ResourceList{" - for _, k := range keysForCapacity { - mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + var l int + _ = l + if m.Assigned != nil { + l = m.Assigned.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForCapacity += "}" - s := strings.Join([]string{`&PersistentVolumeClaimStatus{`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, - `Capacity:` + mapStringForCapacity + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "PersistentVolumeClaimCondition", "PersistentVolumeClaimCondition", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PersistentVolumeClaimVolumeSource) String() string { - if this == nil { - return "nil" + if m.Active != nil { + l = m.Active.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&PersistentVolumeClaimVolumeSource{`, - `ClaimName:` + fmt.Sprintf("%v", this.ClaimName) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *PersistentVolumeList) String() string { - if this == nil { - return "nil" + if m.LastKnownGood != nil { + l = m.LastKnownGood.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&PersistentVolumeList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PersistentVolume", "PersistentVolume", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + l = len(m.Error) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PersistentVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *NodeDaemonEndpoints) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PersistentVolumeSource{`, - `GCEPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.GCEPersistentDisk), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, - `AWSElasticBlockStore:` + strings.Replace(fmt.Sprintf("%v", this.AWSElasticBlockStore), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, - `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, - `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, - `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, - `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDPersistentVolumeSource", "RBDPersistentVolumeSource", 1) + `,`, - `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIPersistentVolumeSource", "ISCSIPersistentVolumeSource", 1) + `,`, - `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderPersistentVolumeSource", "CinderPersistentVolumeSource", 1) + `,`, - `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSPersistentVolumeSource", "CephFSPersistentVolumeSource", 1) + `,`, - `FC:` + strings.Replace(fmt.Sprintf("%v", this.FC), "FCVolumeSource", "FCVolumeSource", 1) + `,`, - `Flocker:` + strings.Replace(fmt.Sprintf("%v", this.Flocker), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, - `FlexVolume:` + strings.Replace(fmt.Sprintf("%v", this.FlexVolume), "FlexPersistentVolumeSource", "FlexPersistentVolumeSource", 1) + `,`, - `AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFilePersistentVolumeSource", "AzureFilePersistentVolumeSource", 1) + `,`, - `VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, - `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, - `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, - `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, - `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, - `ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOPersistentVolumeSource", "ScaleIOPersistentVolumeSource", 1) + `,`, - `Local:` + strings.Replace(fmt.Sprintf("%v", this.Local), "LocalVolumeSource", "LocalVolumeSource", 1) + `,`, - `StorageOS:` + strings.Replace(fmt.Sprintf("%v", this.StorageOS), "StorageOSPersistentVolumeSource", "StorageOSPersistentVolumeSource", 1) + `,`, - `CSI:` + strings.Replace(fmt.Sprintf("%v", this.CSI), "CSIPersistentVolumeSource", "CSIPersistentVolumeSource", 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.KubeletEndpoint.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PersistentVolumeSpec) String() string { - if this == nil { - return "nil" - } - keysForCapacity := make([]string, 0, len(this.Capacity)) - for k := range this.Capacity { - keysForCapacity = append(keysForCapacity, string(k)) + +func (m *NodeList) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) - mapStringForCapacity := "ResourceList{" - for _, k := range keysForCapacity { - mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForCapacity += "}" - s := strings.Join([]string{`&PersistentVolumeSpec{`, - `Capacity:` + mapStringForCapacity + `,`, - `PersistentVolumeSource:` + strings.Replace(strings.Replace(this.PersistentVolumeSource.String(), "PersistentVolumeSource", "PersistentVolumeSource", 1), `&`, ``, 1) + `,`, - `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, - `ClaimRef:` + strings.Replace(fmt.Sprintf("%v", this.ClaimRef), "ObjectReference", "ObjectReference", 1) + `,`, - `PersistentVolumeReclaimPolicy:` + fmt.Sprintf("%v", this.PersistentVolumeReclaimPolicy) + `,`, - `StorageClassName:` + fmt.Sprintf("%v", this.StorageClassName) + `,`, - `MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`, - `VolumeMode:` + valueToStringGenerated(this.VolumeMode) + `,`, - `NodeAffinity:` + strings.Replace(fmt.Sprintf("%v", this.NodeAffinity), "VolumeNodeAffinity", "VolumeNodeAffinity", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *PersistentVolumeStatus) String() string { - if this == nil { - return "nil" + +func (m *NodeProxyOptions) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PersistentVolumeStatus{`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PhotonPersistentDiskVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *NodeResources) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PhotonPersistentDiskVolumeSource{`, - `PdID:` + fmt.Sprintf("%v", this.PdID) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `}`, - }, "") - return s -} -func (this *Pod) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&Pod{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *PodAffinity) String() string { - if this == nil { - return "nil" + +func (m *NodeSelector) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodAffinity{`, - `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, - `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodAffinityTerm) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.NodeSelectorTerms) > 0 { + for _, e := range m.NodeSelectorTerms { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodAffinityTerm{`, - `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, - `TopologyKey:` + fmt.Sprintf("%v", this.TopologyKey) + `,`, - `}`, - }, "") - return s + return n } -func (this *PodAntiAffinity) String() string { - if this == nil { - return "nil" + +func (m *NodeSelectorRequirement) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodAntiAffinity{`, - `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, - `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for _, s := range m.Values { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *PodAttachOptions) String() string { - if this == nil { - return "nil" + +func (m *NodeSelectorTerm) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodAttachOptions{`, - `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, - `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, - `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, - `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, - `Container:` + fmt.Sprintf("%v", this.Container) + `,`, - `}`, - }, "") - return s -} -func (this *PodCondition) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.MatchExpressions) > 0 { + for _, e := range m.MatchExpressions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *PodDNSConfig) String() string { - if this == nil { - return "nil" + if len(m.MatchFields) > 0 { + for _, e := range m.MatchFields { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodDNSConfig{`, - `Nameservers:` + fmt.Sprintf("%v", this.Nameservers) + `,`, - `Searches:` + fmt.Sprintf("%v", this.Searches) + `,`, - `Options:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Options), "PodDNSConfigOption", "PodDNSConfigOption", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *PodDNSConfigOption) String() string { - if this == nil { - return "nil" + +func (m *NodeSpec) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodDNSConfigOption{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Value:` + valueToStringGenerated(this.Value) + `,`, - `}`, - }, "") - return s -} -func (this *PodExecOptions) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.PodCIDR) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DoNotUse_ExternalID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ProviderID) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if len(m.Taints) > 0 { + for _, e := range m.Taints { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodExecOptions{`, - `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, - `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, - `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, - `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, - `Container:` + fmt.Sprintf("%v", this.Container) + `,`, - `Command:` + fmt.Sprintf("%v", this.Command) + `,`, - `}`, - }, "") - return s -} -func (this *PodList) String() string { - if this == nil { - return "nil" + if m.ConfigSource != nil { + l = m.ConfigSource.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&PodList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Pod", "Pod", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodLogOptions) String() string { - if this == nil { - return "nil" + if len(m.PodCIDRs) > 0 { + for _, s := range m.PodCIDRs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodLogOptions{`, - `Container:` + fmt.Sprintf("%v", this.Container) + `,`, - `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, - `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, - `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, - `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, - `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, - `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, - `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, - `}`, - }, "") - return s + return n } -func (this *PodPortForwardOptions) String() string { - if this == nil { - return "nil" + +func (m *NodeStatus) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodPortForwardOptions{`, - `Ports:` + fmt.Sprintf("%v", this.Ports) + `,`, - `}`, - }, "") - return s -} -func (this *PodProxyOptions) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&PodProxyOptions{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `}`, - }, "") - return s -} -func (this *PodReadinessGate) String() string { - if this == nil { - return "nil" + if len(m.Allocatable) > 0 { + for k, v := range m.Allocatable { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&PodReadinessGate{`, - `ConditionType:` + fmt.Sprintf("%v", this.ConditionType) + `,`, - `}`, - }, "") - return s -} -func (this *PodSecurityContext) String() string { - if this == nil { - return "nil" + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodSecurityContext{`, - `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, - `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, - `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, - `SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`, - `FSGroup:` + valueToStringGenerated(this.FSGroup) + `,`, - `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`, - `Sysctls:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Sysctls), "Sysctl", "Sysctl", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodSignature) String() string { - if this == nil { - return "nil" + if len(m.Addresses) > 0 { + for _, e := range m.Addresses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PodSignature{`, - `PodController:` + strings.Replace(fmt.Sprintf("%v", this.PodController), "OwnerReference", "k8s_io_apimachinery_pkg_apis_meta_v1.OwnerReference", 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodSpec) String() string { - if this == nil { - return "nil" + l = m.DaemonEndpoints.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.NodeInfo.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Images) > 0 { + for _, e := range m.Images { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) - for k := range this.NodeSelector { - keysForNodeSelector = append(keysForNodeSelector, k) + if len(m.VolumesInUse) > 0 { + for _, s := range m.VolumesInUse { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) - mapStringForNodeSelector := "map[string]string{" - for _, k := range keysForNodeSelector { - mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + if len(m.VolumesAttached) > 0 { + for _, e := range m.VolumesAttached { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForNodeSelector += "}" - s := strings.Join([]string{`&PodSpec{`, - `Volumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Volumes), "Volume", "Volume", 1), `&`, ``, 1) + `,`, - `Containers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Containers), "Container", "Container", 1), `&`, ``, 1) + `,`, - `RestartPolicy:` + fmt.Sprintf("%v", this.RestartPolicy) + `,`, - `TerminationGracePeriodSeconds:` + valueToStringGenerated(this.TerminationGracePeriodSeconds) + `,`, - `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, - `DNSPolicy:` + fmt.Sprintf("%v", this.DNSPolicy) + `,`, - `NodeSelector:` + mapStringForNodeSelector + `,`, - `ServiceAccountName:` + fmt.Sprintf("%v", this.ServiceAccountName) + `,`, - `DeprecatedServiceAccount:` + fmt.Sprintf("%v", this.DeprecatedServiceAccount) + `,`, - `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, - `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, - `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, - `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, - `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "PodSecurityContext", "PodSecurityContext", 1) + `,`, - `ImagePullSecrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ImagePullSecrets), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, - `Subdomain:` + fmt.Sprintf("%v", this.Subdomain) + `,`, - `Affinity:` + strings.Replace(fmt.Sprintf("%v", this.Affinity), "Affinity", "Affinity", 1) + `,`, - `SchedulerName:` + fmt.Sprintf("%v", this.SchedulerName) + `,`, - `InitContainers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.InitContainers), "Container", "Container", 1), `&`, ``, 1) + `,`, - `AutomountServiceAccountToken:` + valueToStringGenerated(this.AutomountServiceAccountToken) + `,`, - `Tolerations:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Tolerations), "Toleration", "Toleration", 1), `&`, ``, 1) + `,`, - `HostAliases:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HostAliases), "HostAlias", "HostAlias", 1), `&`, ``, 1) + `,`, - `PriorityClassName:` + fmt.Sprintf("%v", this.PriorityClassName) + `,`, - `Priority:` + valueToStringGenerated(this.Priority) + `,`, - `DNSConfig:` + strings.Replace(fmt.Sprintf("%v", this.DNSConfig), "PodDNSConfig", "PodDNSConfig", 1) + `,`, - `ShareProcessNamespace:` + valueToStringGenerated(this.ShareProcessNamespace) + `,`, - `ReadinessGates:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ReadinessGates), "PodReadinessGate", "PodReadinessGate", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PodStatus) String() string { - if this == nil { - return "nil" + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&PodStatus{`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "PodCondition", "PodCondition", 1), `&`, ``, 1) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, - `PodIP:` + fmt.Sprintf("%v", this.PodIP) + `,`, - `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, - `ContainerStatuses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ContainerStatuses), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + `,`, - `QOSClass:` + fmt.Sprintf("%v", this.QOSClass) + `,`, - `InitContainerStatuses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.InitContainerStatuses), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + `,`, - `NominatedNodeName:` + fmt.Sprintf("%v", this.NominatedNodeName) + `,`, - `}`, - }, "") - return s + return n } -func (this *PodStatusResult) String() string { - if this == nil { - return "nil" + +func (m *NodeSystemInfo) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodStatusResult{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.MachineID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SystemUUID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.BootID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KernelVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.OSImage) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContainerRuntimeVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KubeletVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KubeProxyVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.OperatingSystem) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Architecture) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PodTemplate) String() string { - if this == nil { - return "nil" + +func (m *ObjectFieldSelector) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodTemplate{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "PodTemplateSpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FieldPath) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PodTemplateList) String() string { - if this == nil { - return "nil" + +func (m *ObjectReference) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodTemplateList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodTemplate", "PodTemplate", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FieldPath) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PodTemplateSpec) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolume) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PodTemplateSpec{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PortworxVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeClaim) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PortworxVolumeSource{`, - `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *Preconditions) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeClaimCondition) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&Preconditions{`, - `UID:` + valueToStringGenerated(this.UID) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastProbeTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *PreferAvoidPodsEntry) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeClaimList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&PreferAvoidPodsEntry{`, - `PodSignature:` + strings.Replace(strings.Replace(this.PodSignature.String(), "PodSignature", "PodSignature", 1), `&`, ``, 1) + `,`, - `EvictionTime:` + strings.Replace(strings.Replace(this.EvictionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func (this *PreferredSchedulingTerm) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&PreferredSchedulingTerm{`, - `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, - `Preference:` + strings.Replace(strings.Replace(this.Preference.String(), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *Probe) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeClaimSpec) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&Probe{`, - `Handler:` + strings.Replace(strings.Replace(this.Handler.String(), "Handler", "Handler", 1), `&`, ``, 1) + `,`, - `InitialDelaySeconds:` + fmt.Sprintf("%v", this.InitialDelaySeconds) + `,`, - `TimeoutSeconds:` + fmt.Sprintf("%v", this.TimeoutSeconds) + `,`, - `PeriodSeconds:` + fmt.Sprintf("%v", this.PeriodSeconds) + `,`, - `SuccessThreshold:` + fmt.Sprintf("%v", this.SuccessThreshold) + `,`, - `FailureThreshold:` + fmt.Sprintf("%v", this.FailureThreshold) + `,`, - `}`, - }, "") - return s -} -func (this *ProjectedVolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&ProjectedVolumeSource{`, - `Sources:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Sources), "VolumeProjection", "VolumeProjection", 1), `&`, ``, 1) + `,`, - `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, - `}`, - }, "") - return s -} -func (this *QuobyteVolumeSource) String() string { - if this == nil { - return "nil" + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&QuobyteVolumeSource{`, - `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, - `Volume:` + fmt.Sprintf("%v", this.Volume) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `Group:` + fmt.Sprintf("%v", this.Group) + `,`, - `}`, - }, "") - return s -} -func (this *RBDPersistentVolumeSource) String() string { - if this == nil { - return "nil" + if m.StorageClassName != nil { + l = len(*m.StorageClassName) + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&RBDPersistentVolumeSource{`, - `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, - `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, - `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, - `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s + if m.VolumeMode != nil { + l = len(*m.VolumeMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DataSource != nil { + l = m.DataSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n } -func (this *RBDVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeClaimStatus) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&RBDVolumeSource{`, - `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, - `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, - `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, - `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *RangeAllocation) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&RangeAllocation{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Range:` + fmt.Sprintf("%v", this.Range) + `,`, - `Data:` + valueToStringGenerated(this.Data) + `,`, - `}`, - }, "") - return s -} -func (this *ReplicationController) String() string { - if this == nil { - return "nil" + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&ReplicationController{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicationControllerSpec", "ReplicationControllerSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicationControllerStatus", "ReplicationControllerStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *ReplicationControllerCondition) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeClaimVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ReplicationControllerCondition{`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.ClaimName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n } -func (this *ReplicationControllerList) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ReplicationControllerList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicationController", "ReplicationController", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *ReplicationControllerSpec) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 } - keysForSelector := make([]string, 0, len(this.Selector)) - for k := range this.Selector { - keysForSelector = append(keysForSelector, k) + var l int + _ = l + if m.GCEPersistentDisk != nil { + l = m.GCEPersistentDisk.Size() + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - mapStringForSelector := "map[string]string{" - for _, k := range keysForSelector { - mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + if m.AWSElasticBlockStore != nil { + l = m.AWSElasticBlockStore.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForSelector += "}" - s := strings.Join([]string{`&ReplicationControllerSpec{`, - `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + mapStringForSelector + `,`, - `Template:` + strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "PodTemplateSpec", 1) + `,`, - `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, - `}`, - }, "") - return s -} -func (this *ReplicationControllerStatus) String() string { - if this == nil { - return "nil" + if m.HostPath != nil { + l = m.HostPath.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ReplicationControllerStatus{`, - `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, - `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, - `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, - `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, - `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ReplicationControllerCondition", "ReplicationControllerCondition", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ResourceFieldSelector) String() string { - if this == nil { - return "nil" + if m.Glusterfs != nil { + l = m.Glusterfs.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ResourceFieldSelector{`, - `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, - `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, - `Divisor:` + strings.Replace(strings.Replace(this.Divisor.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ResourceQuota) String() string { - if this == nil { - return "nil" + if m.NFS != nil { + l = m.NFS.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ResourceQuota{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ResourceQuotaSpec", "ResourceQuotaSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ResourceQuotaStatus", "ResourceQuotaStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ResourceQuotaList) String() string { - if this == nil { - return "nil" + if m.RBD != nil { + l = m.RBD.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ResourceQuotaList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ResourceQuota", "ResourceQuota", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ResourceQuotaSpec) String() string { - if this == nil { - return "nil" + if m.ISCSI != nil { + l = m.ISCSI.Size() + n += 1 + l + sovGenerated(uint64(l)) } - keysForHard := make([]string, 0, len(this.Hard)) - for k := range this.Hard { - keysForHard = append(keysForHard, string(k)) + if m.Cinder != nil { + l = m.Cinder.Size() + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForHard) - mapStringForHard := "ResourceList{" - for _, k := range keysForHard { - mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + if m.CephFS != nil { + l = m.CephFS.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForHard += "}" - s := strings.Join([]string{`&ResourceQuotaSpec{`, - `Hard:` + mapStringForHard + `,`, - `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, - `ScopeSelector:` + strings.Replace(fmt.Sprintf("%v", this.ScopeSelector), "ScopeSelector", "ScopeSelector", 1) + `,`, - `}`, - }, "") - return s -} -func (this *ResourceQuotaStatus) String() string { - if this == nil { - return "nil" + if m.FC != nil { + l = m.FC.Size() + n += 1 + l + sovGenerated(uint64(l)) } - keysForHard := make([]string, 0, len(this.Hard)) - for k := range this.Hard { - keysForHard = append(keysForHard, string(k)) + if m.Flocker != nil { + l = m.Flocker.Size() + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForHard) - mapStringForHard := "ResourceList{" - for _, k := range keysForHard { - mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + if m.FlexVolume != nil { + l = m.FlexVolume.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForHard += "}" - keysForUsed := make([]string, 0, len(this.Used)) - for k := range this.Used { - keysForUsed = append(keysForUsed, string(k)) + if m.AzureFile != nil { + l = m.AzureFile.Size() + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) - mapStringForUsed := "ResourceList{" - for _, k := range keysForUsed { - mapStringForUsed += fmt.Sprintf("%v: %v,", k, this.Used[ResourceName(k)]) + if m.VsphereVolume != nil { + l = m.VsphereVolume.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForUsed += "}" - s := strings.Join([]string{`&ResourceQuotaStatus{`, - `Hard:` + mapStringForHard + `,`, - `Used:` + mapStringForUsed + `,`, - `}`, - }, "") - return s -} -func (this *ResourceRequirements) String() string { - if this == nil { - return "nil" + if m.Quobyte != nil { + l = m.Quobyte.Size() + n += 1 + l + sovGenerated(uint64(l)) } - keysForLimits := make([]string, 0, len(this.Limits)) - for k := range this.Limits { - keysForLimits = append(keysForLimits, string(k)) + if m.AzureDisk != nil { + l = m.AzureDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) - mapStringForLimits := "ResourceList{" - for _, k := range keysForLimits { - mapStringForLimits += fmt.Sprintf("%v: %v,", k, this.Limits[ResourceName(k)]) + if m.PhotonPersistentDisk != nil { + l = m.PhotonPersistentDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) } - mapStringForLimits += "}" - keysForRequests := make([]string, 0, len(this.Requests)) - for k := range this.Requests { - keysForRequests = append(keysForRequests, string(k)) + if m.PortworxVolume != nil { + l = m.PortworxVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) - mapStringForRequests := "ResourceList{" - for _, k := range keysForRequests { - mapStringForRequests += fmt.Sprintf("%v: %v,", k, this.Requests[ResourceName(k)]) + if m.ScaleIO != nil { + l = m.ScaleIO.Size() + n += 2 + l + sovGenerated(uint64(l)) } - mapStringForRequests += "}" - s := strings.Join([]string{`&ResourceRequirements{`, - `Limits:` + mapStringForLimits + `,`, - `Requests:` + mapStringForRequests + `,`, - `}`, - }, "") - return s -} -func (this *SELinuxOptions) String() string { - if this == nil { - return "nil" + if m.Local != nil { + l = m.Local.Size() + n += 2 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&SELinuxOptions{`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `Role:` + fmt.Sprintf("%v", this.Role) + `,`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Level:` + fmt.Sprintf("%v", this.Level) + `,`, - `}`, - }, "") - return s -} -func (this *ScaleIOPersistentVolumeSource) String() string { - if this == nil { - return "nil" + if m.StorageOS != nil { + l = m.StorageOS.Size() + n += 2 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ScaleIOPersistentVolumeSource{`, - `Gateway:` + fmt.Sprintf("%v", this.Gateway) + `,`, - `System:` + fmt.Sprintf("%v", this.System) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, - `SSLEnabled:` + fmt.Sprintf("%v", this.SSLEnabled) + `,`, - `ProtectionDomain:` + fmt.Sprintf("%v", this.ProtectionDomain) + `,`, - `StoragePool:` + fmt.Sprintf("%v", this.StoragePool) + `,`, - `StorageMode:` + fmt.Sprintf("%v", this.StorageMode) + `,`, - `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *ScaleIOVolumeSource) String() string { - if this == nil { - return "nil" + if m.CSI != nil { + l = m.CSI.Size() + n += 2 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&ScaleIOVolumeSource{`, - `Gateway:` + fmt.Sprintf("%v", this.Gateway) + `,`, - `System:` + fmt.Sprintf("%v", this.System) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `SSLEnabled:` + fmt.Sprintf("%v", this.SSLEnabled) + `,`, - `ProtectionDomain:` + fmt.Sprintf("%v", this.ProtectionDomain) + `,`, - `StoragePool:` + fmt.Sprintf("%v", this.StoragePool) + `,`, - `StorageMode:` + fmt.Sprintf("%v", this.StorageMode) + `,`, - `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s + return n } -func (this *ScopeSelector) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeSpec) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ScopeSelector{`, - `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "ScopedResourceSelectorRequirement", "ScopedResourceSelectorRequirement", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ScopedResourceSelectorRequirement) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } } - s := strings.Join([]string{`&ScopedResourceSelectorRequirement{`, - `ScopeName:` + fmt.Sprintf("%v", this.ScopeName) + `,`, - `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, - `Values:` + fmt.Sprintf("%v", this.Values) + `,`, - `}`, - }, "") - return s -} -func (this *Secret) String() string { - if this == nil { - return "nil" + l = m.PersistentVolumeSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - keysForData := make([]string, 0, len(this.Data)) - for k := range this.Data { - keysForData = append(keysForData, k) + if m.ClaimRef != nil { + l = m.ClaimRef.Size() + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForData) - mapStringForData := "map[string][]byte{" - for _, k := range keysForData { - mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + l = len(m.PersistentVolumeReclaimPolicy) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StorageClassName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.MountOptions) > 0 { + for _, s := range m.MountOptions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - mapStringForData += "}" - keysForStringData := make([]string, 0, len(this.StringData)) - for k := range this.StringData { - keysForStringData = append(keysForStringData, k) + if m.VolumeMode != nil { + l = len(*m.VolumeMode) + n += 1 + l + sovGenerated(uint64(l)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) - mapStringForStringData := "map[string]string{" - for _, k := range keysForStringData { - mapStringForStringData += fmt.Sprintf("%v: %v,", k, this.StringData[k]) + if m.NodeAffinity != nil { + l = m.NodeAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForStringData += "}" - s := strings.Join([]string{`&Secret{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Data:` + mapStringForData + `,`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `StringData:` + mapStringForStringData + `,`, - `}`, - }, "") - return s + return n } -func (this *SecretEnvSource) String() string { - if this == nil { - return "nil" + +func (m *PersistentVolumeStatus) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&SecretEnvSource{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *SecretKeySelector) String() string { - if this == nil { - return "nil" + +func (m *PhotonPersistentDiskVolumeSource) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&SecretKeySelector{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.PdID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *SecretList) String() string { - if this == nil { - return "nil" + +func (m *Pod) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&SecretList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Secret", "Secret", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *SecretProjection) String() string { - if this == nil { - return "nil" + +func (m *PodAffinity) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&SecretProjection{`, - `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s + var l int + _ = l + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.RequiredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n } -func (this *SecretReference) String() string { - if this == nil { - return "nil" + +func (m *PodAffinityTerm) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&SecretReference{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, - `}`, - }, "") - return s -} -func (this *SecretVolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.LabelSelector != nil { + l = m.LabelSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&SecretVolumeSource{`, - `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, - `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, - `Optional:` + valueToStringGenerated(this.Optional) + `,`, - `}`, - }, "") - return s -} -func (this *SecurityContext) String() string { - if this == nil { - return "nil" + if len(m.Namespaces) > 0 { + for _, s := range m.Namespaces { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&SecurityContext{`, - `Capabilities:` + strings.Replace(fmt.Sprintf("%v", this.Capabilities), "Capabilities", "Capabilities", 1) + `,`, - `Privileged:` + valueToStringGenerated(this.Privileged) + `,`, - `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, - `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, - `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, - `ReadOnlyRootFilesystem:` + valueToStringGenerated(this.ReadOnlyRootFilesystem) + `,`, - `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, - `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`, - `}`, - }, "") - return s + l = len(m.TopologyKey) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *SerializedReference) String() string { - if this == nil { - return "nil" + +func (m *PodAntiAffinity) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&SerializedReference{`, - `Reference:` + strings.Replace(strings.Replace(this.Reference.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *Service) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.RequiredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&Service{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ServiceSpec", "ServiceSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ServiceStatus", "ServiceStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceAccount) String() string { - if this == nil { - return "nil" + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&ServiceAccount{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Secrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Secrets), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, - `ImagePullSecrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ImagePullSecrets), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, - `AutomountServiceAccountToken:` + valueToStringGenerated(this.AutomountServiceAccountToken) + `,`, - `}`, - }, "") - return s + return n } -func (this *ServiceAccountList) String() string { - if this == nil { - return "nil" + +func (m *PodAttachOptions) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ServiceAccountList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ServiceAccount", "ServiceAccount", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + n += 2 + n += 2 + n += 2 + n += 2 + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ServiceAccountTokenProjection) String() string { - if this == nil { - return "nil" + +func (m *PodCondition) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ServiceAccountTokenProjection{`, - `Audience:` + fmt.Sprintf("%v", this.Audience) + `,`, - `ExpirationSeconds:` + valueToStringGenerated(this.ExpirationSeconds) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastProbeTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *ServiceList) String() string { - if this == nil { - return "nil" + +func (m *PodDNSConfig) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ServiceList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Service", "Service", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *ServicePort) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Nameservers) > 0 { + for _, s := range m.Nameservers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&ServicePort{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, - `Port:` + fmt.Sprintf("%v", this.Port) + `,`, - `TargetPort:` + strings.Replace(strings.Replace(this.TargetPort.String(), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, - `NodePort:` + fmt.Sprintf("%v", this.NodePort) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceProxyOptions) String() string { - if this == nil { - return "nil" + if len(m.Searches) > 0 { + for _, s := range m.Searches { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&ServiceProxyOptions{`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `}`, - }, "") - return s -} -func (this *ServiceSpec) String() string { - if this == nil { - return "nil" + if len(m.Options) > 0 { + for _, e := range m.Options { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - keysForSelector := make([]string, 0, len(this.Selector)) - for k := range this.Selector { - keysForSelector = append(keysForSelector, k) + return n +} + +func (m *PodDNSConfigOption) Size() (n int) { + if m == nil { + return 0 } - github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - mapStringForSelector := "map[string]string{" - for _, k := range keysForSelector { - mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Value != nil { + l = len(*m.Value) + n += 1 + l + sovGenerated(uint64(l)) } - mapStringForSelector += "}" - s := strings.Join([]string{`&ServiceSpec{`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "ServicePort", "ServicePort", 1), `&`, ``, 1) + `,`, - `Selector:` + mapStringForSelector + `,`, - `ClusterIP:` + fmt.Sprintf("%v", this.ClusterIP) + `,`, - `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `ExternalIPs:` + fmt.Sprintf("%v", this.ExternalIPs) + `,`, - `SessionAffinity:` + fmt.Sprintf("%v", this.SessionAffinity) + `,`, - `LoadBalancerIP:` + fmt.Sprintf("%v", this.LoadBalancerIP) + `,`, - `LoadBalancerSourceRanges:` + fmt.Sprintf("%v", this.LoadBalancerSourceRanges) + `,`, - `ExternalName:` + fmt.Sprintf("%v", this.ExternalName) + `,`, - `ExternalTrafficPolicy:` + fmt.Sprintf("%v", this.ExternalTrafficPolicy) + `,`, - `HealthCheckNodePort:` + fmt.Sprintf("%v", this.HealthCheckNodePort) + `,`, - `PublishNotReadyAddresses:` + fmt.Sprintf("%v", this.PublishNotReadyAddresses) + `,`, - `SessionAffinityConfig:` + strings.Replace(fmt.Sprintf("%v", this.SessionAffinityConfig), "SessionAffinityConfig", "SessionAffinityConfig", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *ServiceStatus) String() string { - if this == nil { - return "nil" + +func (m *PodExecOptions) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&ServiceStatus{`, - `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "LoadBalancerStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *SessionAffinityConfig) String() string { - if this == nil { - return "nil" + var l int + _ = l + n += 2 + n += 2 + n += 2 + n += 2 + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&SessionAffinityConfig{`, - `ClientIP:` + strings.Replace(fmt.Sprintf("%v", this.ClientIP), "ClientIPConfig", "ClientIPConfig", 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *StorageOSPersistentVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *PodIP) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&StorageOSPersistentVolumeSource{`, - `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, - `VolumeNamespace:` + fmt.Sprintf("%v", this.VolumeNamespace) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "ObjectReference", "ObjectReference", 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.IP) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *StorageOSVolumeSource) String() string { - if this == nil { - return "nil" + +func (m *PodList) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&StorageOSVolumeSource{`, - `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, - `VolumeNamespace:` + fmt.Sprintf("%v", this.VolumeNamespace) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Sysctl) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } } - s := strings.Join([]string{`&Sysctl{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `}`, - }, "") - return s + return n } -func (this *TCPSocketAction) String() string { - if this == nil { - return "nil" + +func (m *PodLogOptions) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&TCPSocketAction{`, - `Port:` + strings.Replace(strings.Replace(this.Port.String(), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, - `Host:` + fmt.Sprintf("%v", this.Host) + `,`, - `}`, - }, "") - return s -} -func (this *Taint) String() string { - if this == nil { - return "nil" + var l int + _ = l + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + if m.SinceSeconds != nil { + n += 1 + sovGenerated(uint64(*m.SinceSeconds)) } - s := strings.Join([]string{`&Taint{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, - `TimeAdded:` + strings.Replace(fmt.Sprintf("%v", this.TimeAdded), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, - `}`, - }, "") - return s -} -func (this *Toleration) String() string { - if this == nil { - return "nil" + if m.SinceTime != nil { + l = m.SinceTime.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&Toleration{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, - `Value:` + fmt.Sprintf("%v", this.Value) + `,`, - `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, - `TolerationSeconds:` + valueToStringGenerated(this.TolerationSeconds) + `,`, - `}`, - }, "") - return s -} -func (this *TopologySelectorLabelRequirement) String() string { - if this == nil { - return "nil" + n += 2 + if m.TailLines != nil { + n += 1 + sovGenerated(uint64(*m.TailLines)) } - s := strings.Join([]string{`&TopologySelectorLabelRequirement{`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `Values:` + fmt.Sprintf("%v", this.Values) + `,`, - `}`, - }, "") - return s -} -func (this *TopologySelectorTerm) String() string { - if this == nil { - return "nil" + if m.LimitBytes != nil { + n += 1 + sovGenerated(uint64(*m.LimitBytes)) } - s := strings.Join([]string{`&TopologySelectorTerm{`, - `MatchLabelExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchLabelExpressions), "TopologySelectorLabelRequirement", "TopologySelectorLabelRequirement", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return n } -func (this *Volume) String() string { - if this == nil { - return "nil" + +func (m *PodPortForwardOptions) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&Volume{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `VolumeSource:` + strings.Replace(strings.Replace(this.VolumeSource.String(), "VolumeSource", "VolumeSource", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeDevice) String() string { - if this == nil { - return "nil" + var l int + _ = l + if len(m.Ports) > 0 { + for _, e := range m.Ports { + n += 1 + sovGenerated(uint64(e)) + } } - s := strings.Join([]string{`&VolumeDevice{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `DevicePath:` + fmt.Sprintf("%v", this.DevicePath) + `,`, - `}`, - }, "") - return s + return n } -func (this *VolumeMount) String() string { - if this == nil { - return "nil" + +func (m *PodProxyOptions) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&VolumeMount{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `MountPath:` + fmt.Sprintf("%v", this.MountPath) + `,`, - `SubPath:` + fmt.Sprintf("%v", this.SubPath) + `,`, - `MountPropagation:` + valueToStringGenerated(this.MountPropagation) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *VolumeNodeAffinity) String() string { - if this == nil { - return "nil" + +func (m *PodReadinessGate) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&VolumeNodeAffinity{`, - `Required:` + strings.Replace(fmt.Sprintf("%v", this.Required), "NodeSelector", "NodeSelector", 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + l = len(m.ConditionType) + n += 1 + l + sovGenerated(uint64(l)) + return n } -func (this *VolumeProjection) String() string { - if this == nil { - return "nil" + +func (m *PodSecurityContext) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&VolumeProjection{`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "SecretProjection", "SecretProjection", 1) + `,`, - `DownwardAPI:` + strings.Replace(fmt.Sprintf("%v", this.DownwardAPI), "DownwardAPIProjection", "DownwardAPIProjection", 1) + `,`, - `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapProjection", "ConfigMapProjection", 1) + `,`, - `ServiceAccountToken:` + strings.Replace(fmt.Sprintf("%v", this.ServiceAccountToken), "ServiceAccountTokenProjection", "ServiceAccountTokenProjection", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VolumeSource) String() string { - if this == nil { - return "nil" + var l int + _ = l + if m.SELinuxOptions != nil { + l = m.SELinuxOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) } - s := strings.Join([]string{`&VolumeSource{`, - `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, - `EmptyDir:` + strings.Replace(fmt.Sprintf("%v", this.EmptyDir), "EmptyDirVolumeSource", "EmptyDirVolumeSource", 1) + `,`, - `GCEPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.GCEPersistentDisk), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, - `AWSElasticBlockStore:` + strings.Replace(fmt.Sprintf("%v", this.AWSElasticBlockStore), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, - `GitRepo:` + strings.Replace(fmt.Sprintf("%v", this.GitRepo), "GitRepoVolumeSource", "GitRepoVolumeSource", 1) + `,`, - `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "SecretVolumeSource", "SecretVolumeSource", 1) + `,`, - `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, - `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, - `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, - `PersistentVolumeClaim:` + strings.Replace(fmt.Sprintf("%v", this.PersistentVolumeClaim), "PersistentVolumeClaimVolumeSource", "PersistentVolumeClaimVolumeSource", 1) + `,`, - `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, - `FlexVolume:` + strings.Replace(fmt.Sprintf("%v", this.FlexVolume), "FlexVolumeSource", "FlexVolumeSource", 1) + `,`, - `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, - `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSVolumeSource", "CephFSVolumeSource", 1) + `,`, - `Flocker:` + strings.Replace(fmt.Sprintf("%v", this.Flocker), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, - `DownwardAPI:` + strings.Replace(fmt.Sprintf("%v", this.DownwardAPI), "DownwardAPIVolumeSource", "DownwardAPIVolumeSource", 1) + `,`, - `FC:` + strings.Replace(fmt.Sprintf("%v", this.FC), "FCVolumeSource", "FCVolumeSource", 1) + `,`, - `AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFileVolumeSource", "AzureFileVolumeSource", 1) + `,`, - `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapVolumeSource", "ConfigMapVolumeSource", 1) + `,`, - `VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, - `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, - `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, - `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, - `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, - `ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOVolumeSource", "ScaleIOVolumeSource", 1) + `,`, - `Projected:` + strings.Replace(fmt.Sprintf("%v", this.Projected), "ProjectedVolumeSource", "ProjectedVolumeSource", 1) + `,`, - `StorageOS:` + strings.Replace(fmt.Sprintf("%v", this.StorageOS), "StorageOSVolumeSource", "StorageOSVolumeSource", 1) + `,`, - `}`, - }, "") - return s -} -func (this *VsphereVirtualDiskVolumeSource) String() string { - if this == nil { - return "nil" + if m.RunAsUser != nil { + n += 1 + sovGenerated(uint64(*m.RunAsUser)) } - s := strings.Join([]string{`&VsphereVirtualDiskVolumeSource{`, - `VolumePath:` + fmt.Sprintf("%v", this.VolumePath) + `,`, - `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, - `StoragePolicyName:` + fmt.Sprintf("%v", this.StoragePolicyName) + `,`, - `StoragePolicyID:` + fmt.Sprintf("%v", this.StoragePolicyID) + `,`, - `}`, - }, "") - return s + if m.RunAsNonRoot != nil { + n += 2 + } + if len(m.SupplementalGroups) > 0 { + for _, e := range m.SupplementalGroups { + n += 1 + sovGenerated(uint64(e)) + } + } + if m.FSGroup != nil { + n += 1 + sovGenerated(uint64(*m.FSGroup)) + } + if m.RunAsGroup != nil { + n += 1 + sovGenerated(uint64(*m.RunAsGroup)) + } + if len(m.Sysctls) > 0 { + for _, e := range m.Sysctls { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.WindowsOptions != nil { + l = m.WindowsOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n } -func (this *WeightedPodAffinityTerm) String() string { - if this == nil { - return "nil" + +func (m *PodSignature) Size() (n int) { + if m == nil { + return 0 } - s := strings.Join([]string{`&WeightedPodAffinityTerm{`, - `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, - `PodAffinityTerm:` + strings.Replace(strings.Replace(this.PodAffinityTerm.String(), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + var l int + _ = l + if m.PodController != nil { + l = m.PodController.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n } -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" + +func (m *PodSpec) Size() (n int) { + if m == nil { + return 0 } - pv := reflect.Indirect(rv).Interface() + var l int + _ = l + if len(m.Volumes) > 0 { + for _, e := range m.Volumes { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Containers) > 0 { + for _, e := range m.Containers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RestartPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.TerminationGracePeriodSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TerminationGracePeriodSeconds)) + } + if m.ActiveDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.ActiveDeadlineSeconds)) + } + l = len(m.DNSPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.NodeSelector) > 0 { + for k, v := range m.NodeSelector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.ServiceAccountName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DeprecatedServiceAccount) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + n += 2 + if m.SecurityContext != nil { + l = m.SecurityContext.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ImagePullSecrets) > 0 { + for _, e := range m.ImagePullSecrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Hostname) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.Subdomain) + n += 2 + l + sovGenerated(uint64(l)) + if m.Affinity != nil { + l = m.Affinity.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + l = len(m.SchedulerName) + n += 2 + l + sovGenerated(uint64(l)) + if len(m.InitContainers) > 0 { + for _, e := range m.InitContainers { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.AutomountServiceAccountToken != nil { + n += 3 + } + if len(m.Tolerations) > 0 { + for _, e := range m.Tolerations { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if len(m.HostAliases) > 0 { + for _, e := range m.HostAliases { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + l = len(m.PriorityClassName) + n += 2 + l + sovGenerated(uint64(l)) + if m.Priority != nil { + n += 2 + sovGenerated(uint64(*m.Priority)) + } + if m.DNSConfig != nil { + l = m.DNSConfig.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.ShareProcessNamespace != nil { + n += 3 + } + if len(m.ReadinessGates) > 0 { + for _, e := range m.ReadinessGates { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.RuntimeClassName != nil { + l = len(*m.RuntimeClassName) + n += 2 + l + sovGenerated(uint64(l)) + } + if m.EnableServiceLinks != nil { + n += 3 + } + if m.PreemptionPolicy != nil { + l = len(*m.PreemptionPolicy) + n += 2 + l + sovGenerated(uint64(l)) + } + if len(m.Overhead) > 0 { + for k, v := range m.Overhead { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.TopologySpreadConstraints) > 0 { + for _, e := range m.TopologySpreadConstraints { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if len(m.EphemeralContainers) > 0 { + for _, e := range m.EphemeralContainers { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.HostIP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.PodIP) + n += 1 + l + sovGenerated(uint64(l)) + if m.StartTime != nil { + l = m.StartTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ContainerStatuses) > 0 { + for _, e := range m.ContainerStatuses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.QOSClass) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.InitContainerStatuses) > 0 { + for _, e := range m.InitContainerStatuses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.NominatedNodeName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.PodIPs) > 0 { + for _, e := range m.PodIPs { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.EphemeralContainerStatuses) > 0 { + for _, e := range m.EphemeralContainerStatuses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodStatusResult) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodTemplate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodTemplateList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodTemplateSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PortworxVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.VolumeID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *Preconditions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.UID != nil { + l = len(*m.UID) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PreferAvoidPodsEntry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PodSignature.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.EvictionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PreferredSchedulingTerm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Weight)) + l = m.Preference.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Probe) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Handler.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.InitialDelaySeconds)) + n += 1 + sovGenerated(uint64(m.TimeoutSeconds)) + n += 1 + sovGenerated(uint64(m.PeriodSeconds)) + n += 1 + sovGenerated(uint64(m.SuccessThreshold)) + n += 1 + sovGenerated(uint64(m.FailureThreshold)) + return n +} + +func (m *ProjectedVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Sources) > 0 { + for _, e := range m.Sources { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } + return n +} + +func (m *QuobyteVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Registry) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Volume) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Tenant) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RBDPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.CephMonitors) > 0 { + for _, s := range m.CephMonitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RBDImage) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RBDPool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RadosUser) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Keyring) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + +func (m *RBDVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.CephMonitors) > 0 { + for _, s := range m.CephMonitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RBDImage) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RBDPool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RadosUser) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Keyring) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + +func (m *RangeAllocation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Range) + n += 1 + l + sovGenerated(uint64(l)) + if m.Data != nil { + l = len(m.Data) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ReplicationController) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ReplicationControllerCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ReplicationControllerList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ReplicationControllerSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Replicas != nil { + n += 1 + sovGenerated(uint64(*m.Replicas)) + } + if len(m.Selector) > 0 { + for k, v := range m.Selector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.Template != nil { + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.MinReadySeconds)) + return n +} + +func (m *ReplicationControllerStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Replicas)) + n += 1 + sovGenerated(uint64(m.FullyLabeledReplicas)) + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + n += 1 + sovGenerated(uint64(m.AvailableReplicas)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ResourceFieldSelector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContainerName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Resource) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Divisor.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceQuota) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceQuotaList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ResourceQuotaSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Hard) > 0 { + for k, v := range m.Hard { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Scopes) > 0 { + for _, s := range m.Scopes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.ScopeSelector != nil { + l = m.ScopeSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ResourceQuotaStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Hard) > 0 { + for k, v := range m.Hard { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Used) > 0 { + for k, v := range m.Used { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ResourceRequirements) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Limits) > 0 { + for k, v := range m.Limits { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Requests) > 0 { + for k, v := range m.Requests { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *SELinuxOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Role) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Level) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ScaleIOPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Gateway) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.System) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + l = len(m.ProtectionDomain) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StoragePool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StorageMode) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *ScaleIOVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Gateway) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.System) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + l = len(m.ProtectionDomain) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StoragePool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StorageMode) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *ScopeSelector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.MatchExpressions) > 0 { + for _, e := range m.MatchExpressions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ScopedResourceSelectorRequirement) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ScopeName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for _, s := range m.Values { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Secret) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Data) > 0 { + for k, v := range m.Data { + _ = k + _ = v + l = 0 + if v != nil { + l = 1 + len(v) + sovGenerated(uint64(len(v))) + } + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + l + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.StringData) > 0 { + for k, v := range m.StringData { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *SecretEnvSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 + } + return n +} + +func (m *SecretKeySelector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 + } + return n +} + +func (m *SecretList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *SecretProjection) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Optional != nil { + n += 2 + } + return n +} + +func (m *SecretReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SecretVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SecretName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } + if m.Optional != nil { + n += 2 + } + return n +} + +func (m *SecurityContext) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Capabilities != nil { + l = m.Capabilities.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Privileged != nil { + n += 2 + } + if m.SELinuxOptions != nil { + l = m.SELinuxOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RunAsUser != nil { + n += 1 + sovGenerated(uint64(*m.RunAsUser)) + } + if m.RunAsNonRoot != nil { + n += 2 + } + if m.ReadOnlyRootFilesystem != nil { + n += 2 + } + if m.AllowPrivilegeEscalation != nil { + n += 2 + } + if m.RunAsGroup != nil { + n += 1 + sovGenerated(uint64(*m.RunAsGroup)) + } + if m.ProcMount != nil { + l = len(*m.ProcMount) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.WindowsOptions != nil { + l = m.WindowsOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SerializedReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Reference.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Service) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Secrets) > 0 { + for _, e := range m.Secrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ImagePullSecrets) > 0 { + for _, e := range m.ImagePullSecrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.AutomountServiceAccountToken != nil { + n += 2 + } + return n +} + +func (m *ServiceAccountList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServiceAccountTokenProjection) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Audience) + n += 1 + l + sovGenerated(uint64(l)) + if m.ExpirationSeconds != nil { + n += 1 + sovGenerated(uint64(*m.ExpirationSeconds)) + } + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServicePort) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Port)) + l = m.TargetPort.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.NodePort)) + return n +} + +func (m *ServiceProxyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Selector) > 0 { + for k, v := range m.Selector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.ClusterIP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ExternalIPs) > 0 { + for _, s := range m.ExternalIPs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.SessionAffinity) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.LoadBalancerIP) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.LoadBalancerSourceRanges) > 0 { + for _, s := range m.LoadBalancerSourceRanges { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ExternalName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ExternalTrafficPolicy) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.HealthCheckNodePort)) + n += 2 + if m.SessionAffinityConfig != nil { + l = m.SessionAffinityConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.IPFamily != nil { + l = len(*m.IPFamily) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ServiceStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LoadBalancer.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SessionAffinityConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ClientIP != nil { + l = m.ClientIP.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *StorageOSPersistentVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeNamespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *StorageOSVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeNamespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *Sysctl) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TCPSocketAction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Port.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Taint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Effect) + n += 1 + l + sovGenerated(uint64(l)) + if m.TimeAdded != nil { + l = m.TimeAdded.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *Toleration) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Effect) + n += 1 + l + sovGenerated(uint64(l)) + if m.TolerationSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TolerationSeconds)) + } + return n +} + +func (m *TopologySelectorLabelRequirement) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for _, s := range m.Values { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *TopologySelectorTerm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.MatchLabelExpressions) > 0 { + for _, e := range m.MatchLabelExpressions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *TopologySpreadConstraint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.MaxSkew)) + l = len(m.TopologyKey) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.WhenUnsatisfiable) + n += 1 + l + sovGenerated(uint64(l)) + if m.LabelSelector != nil { + l = m.LabelSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *TypedLocalObjectReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.APIGroup != nil { + l = len(*m.APIGroup) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Volume) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.VolumeSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeDevice) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DevicePath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeMount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.MountPath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SubPath) + n += 1 + l + sovGenerated(uint64(l)) + if m.MountPropagation != nil { + l = len(*m.MountPropagation) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.SubPathExpr) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeNodeAffinity) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Required != nil { + l = m.Required.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VolumeProjection) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Secret != nil { + l = m.Secret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DownwardAPI != nil { + l = m.DownwardAPI.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ConfigMap != nil { + l = m.ConfigMap.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ServiceAccountToken != nil { + l = m.ServiceAccountToken.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.HostPath != nil { + l = m.HostPath.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.EmptyDir != nil { + l = m.EmptyDir.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GCEPersistentDisk != nil { + l = m.GCEPersistentDisk.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AWSElasticBlockStore != nil { + l = m.AWSElasticBlockStore.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GitRepo != nil { + l = m.GitRepo.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Secret != nil { + l = m.Secret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NFS != nil { + l = m.NFS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ISCSI != nil { + l = m.ISCSI.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Glusterfs != nil { + l = m.Glusterfs.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PersistentVolumeClaim != nil { + l = m.PersistentVolumeClaim.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RBD != nil { + l = m.RBD.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FlexVolume != nil { + l = m.FlexVolume.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Cinder != nil { + l = m.Cinder.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CephFS != nil { + l = m.CephFS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Flocker != nil { + l = m.Flocker.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DownwardAPI != nil { + l = m.DownwardAPI.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.FC != nil { + l = m.FC.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.AzureFile != nil { + l = m.AzureFile.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.ConfigMap != nil { + l = m.ConfigMap.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.VsphereVolume != nil { + l = m.VsphereVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.Quobyte != nil { + l = m.Quobyte.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.AzureDisk != nil { + l = m.AzureDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.PhotonPersistentDisk != nil { + l = m.PhotonPersistentDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.PortworxVolume != nil { + l = m.PortworxVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.ScaleIO != nil { + l = m.ScaleIO.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.Projected != nil { + l = m.Projected.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.StorageOS != nil { + l = m.StorageOS.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.CSI != nil { + l = m.CSI.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VsphereVirtualDiskVolumeSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.VolumePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StoragePolicyName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StoragePolicyID) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *WeightedPodAffinityTerm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Weight)) + l = m.PodAffinityTerm.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *WindowsSecurityContextOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.GMSACredentialSpecName != nil { + l = len(*m.GMSACredentialSpecName) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GMSACredentialSpec != nil { + l = len(*m.GMSACredentialSpec) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RunAsUserName != nil { + l = len(*m.RunAsUserName) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *AWSElasticBlockStoreVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AWSElasticBlockStoreVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Affinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Affinity{`, + `NodeAffinity:` + strings.Replace(this.NodeAffinity.String(), "NodeAffinity", "NodeAffinity", 1) + `,`, + `PodAffinity:` + strings.Replace(this.PodAffinity.String(), "PodAffinity", "PodAffinity", 1) + `,`, + `PodAntiAffinity:` + strings.Replace(this.PodAntiAffinity.String(), "PodAntiAffinity", "PodAntiAffinity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *AttachedVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AttachedVolume{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DevicePath:` + fmt.Sprintf("%v", this.DevicePath) + `,`, + `}`, + }, "") + return s +} +func (this *AvoidPods) String() string { + if this == nil { + return "nil" + } + repeatedStringForPreferAvoidPods := "[]PreferAvoidPodsEntry{" + for _, f := range this.PreferAvoidPods { + repeatedStringForPreferAvoidPods += strings.Replace(strings.Replace(f.String(), "PreferAvoidPodsEntry", "PreferAvoidPodsEntry", 1), `&`, ``, 1) + "," + } + repeatedStringForPreferAvoidPods += "}" + s := strings.Join([]string{`&AvoidPods{`, + `PreferAvoidPods:` + repeatedStringForPreferAvoidPods + `,`, + `}`, + }, "") + return s +} +func (this *AzureDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureDiskVolumeSource{`, + `DiskName:` + fmt.Sprintf("%v", this.DiskName) + `,`, + `DataDiskURI:` + fmt.Sprintf("%v", this.DataDiskURI) + `,`, + `CachingMode:` + valueToStringGenerated(this.CachingMode) + `,`, + `FSType:` + valueToStringGenerated(this.FSType) + `,`, + `ReadOnly:` + valueToStringGenerated(this.ReadOnly) + `,`, + `Kind:` + valueToStringGenerated(this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *AzureFilePersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureFilePersistentVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `ShareName:` + fmt.Sprintf("%v", this.ShareName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `SecretNamespace:` + valueToStringGenerated(this.SecretNamespace) + `,`, + `}`, + }, "") + return s +} +func (this *AzureFileVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureFileVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `ShareName:` + fmt.Sprintf("%v", this.ShareName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Binding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Binding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSIPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForVolumeAttributes := make([]string, 0, len(this.VolumeAttributes)) + for k := range this.VolumeAttributes { + keysForVolumeAttributes = append(keysForVolumeAttributes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) + mapStringForVolumeAttributes := "map[string]string{" + for _, k := range keysForVolumeAttributes { + mapStringForVolumeAttributes += fmt.Sprintf("%v: %v,", k, this.VolumeAttributes[k]) + } + mapStringForVolumeAttributes += "}" + s := strings.Join([]string{`&CSIPersistentVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `VolumeHandle:` + fmt.Sprintf("%v", this.VolumeHandle) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `VolumeAttributes:` + mapStringForVolumeAttributes + `,`, + `ControllerPublishSecretRef:` + strings.Replace(this.ControllerPublishSecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `NodeStageSecretRef:` + strings.Replace(this.NodeStageSecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `NodePublishSecretRef:` + strings.Replace(this.NodePublishSecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `ControllerExpandSecretRef:` + strings.Replace(this.ControllerExpandSecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSIVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForVolumeAttributes := make([]string, 0, len(this.VolumeAttributes)) + for k := range this.VolumeAttributes { + keysForVolumeAttributes = append(keysForVolumeAttributes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) + mapStringForVolumeAttributes := "map[string]string{" + for _, k := range keysForVolumeAttributes { + mapStringForVolumeAttributes += fmt.Sprintf("%v: %v,", k, this.VolumeAttributes[k]) + } + mapStringForVolumeAttributes += "}" + s := strings.Join([]string{`&CSIVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `ReadOnly:` + valueToStringGenerated(this.ReadOnly) + `,`, + `FSType:` + valueToStringGenerated(this.FSType) + `,`, + `VolumeAttributes:` + mapStringForVolumeAttributes + `,`, + `NodePublishSecretRef:` + strings.Replace(this.NodePublishSecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Capabilities) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Capabilities{`, + `Add:` + fmt.Sprintf("%v", this.Add) + `,`, + `Drop:` + fmt.Sprintf("%v", this.Drop) + `,`, + `}`, + }, "") + return s +} +func (this *CephFSPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CephFSPersistentVolumeSource{`, + `Monitors:` + fmt.Sprintf("%v", this.Monitors) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `SecretFile:` + fmt.Sprintf("%v", this.SecretFile) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *CephFSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CephFSVolumeSource{`, + `Monitors:` + fmt.Sprintf("%v", this.Monitors) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `SecretFile:` + fmt.Sprintf("%v", this.SecretFile) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *CinderPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CinderPersistentVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CinderVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CinderVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClientIPConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClientIPConfig{`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]ComponentCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "ComponentCondition", "ComponentCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&ComponentStatus{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *ComponentStatusList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ComponentStatus{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ComponentStatus", "ComponentStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ComponentStatusList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMap) String() string { + if this == nil { + return "nil" + } + keysForData := make([]string, 0, len(this.Data)) + for k := range this.Data { + keysForData = append(keysForData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + mapStringForData := "map[string]string{" + for _, k := range keysForData { + mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + } + mapStringForData += "}" + keysForBinaryData := make([]string, 0, len(this.BinaryData)) + for k := range this.BinaryData { + keysForBinaryData = append(keysForBinaryData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForBinaryData) + mapStringForBinaryData := "map[string][]byte{" + for _, k := range keysForBinaryData { + mapStringForBinaryData += fmt.Sprintf("%v: %v,", k, this.BinaryData[k]) + } + mapStringForBinaryData += "}" + s := strings.Join([]string{`&ConfigMap{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + mapStringForData + `,`, + `BinaryData:` + mapStringForBinaryData + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapEnvSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapEnvSource{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapKeySelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapKeySelector{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ConfigMap{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ConfigMap", "ConfigMap", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ConfigMapList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapNodeConfigSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapNodeConfigSource{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `KubeletConfigKey:` + fmt.Sprintf("%v", this.KubeletConfigKey) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapProjection) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]KeyToPath{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ConfigMapProjection{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapVolumeSource) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]KeyToPath{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ConfigMapVolumeSource{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *Container) String() string { + if this == nil { + return "nil" + } + repeatedStringForPorts := "[]ContainerPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "ContainerPort", "ContainerPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += strings.Replace(strings.Replace(f.String(), "EnvVar", "EnvVar", 1), `&`, ``, 1) + "," + } + repeatedStringForEnv += "}" + repeatedStringForVolumeMounts := "[]VolumeMount{" + for _, f := range this.VolumeMounts { + repeatedStringForVolumeMounts += strings.Replace(strings.Replace(f.String(), "VolumeMount", "VolumeMount", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumeMounts += "}" + repeatedStringForEnvFrom := "[]EnvFromSource{" + for _, f := range this.EnvFrom { + repeatedStringForEnvFrom += strings.Replace(strings.Replace(f.String(), "EnvFromSource", "EnvFromSource", 1), `&`, ``, 1) + "," + } + repeatedStringForEnvFrom += "}" + repeatedStringForVolumeDevices := "[]VolumeDevice{" + for _, f := range this.VolumeDevices { + repeatedStringForVolumeDevices += strings.Replace(strings.Replace(f.String(), "VolumeDevice", "VolumeDevice", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumeDevices += "}" + s := strings.Join([]string{`&Container{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Args:` + fmt.Sprintf("%v", this.Args) + `,`, + `WorkingDir:` + fmt.Sprintf("%v", this.WorkingDir) + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `Env:` + repeatedStringForEnv + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeMounts:` + repeatedStringForVolumeMounts + `,`, + `LivenessProbe:` + strings.Replace(this.LivenessProbe.String(), "Probe", "Probe", 1) + `,`, + `ReadinessProbe:` + strings.Replace(this.ReadinessProbe.String(), "Probe", "Probe", 1) + `,`, + `Lifecycle:` + strings.Replace(this.Lifecycle.String(), "Lifecycle", "Lifecycle", 1) + `,`, + `TerminationMessagePath:` + fmt.Sprintf("%v", this.TerminationMessagePath) + `,`, + `ImagePullPolicy:` + fmt.Sprintf("%v", this.ImagePullPolicy) + `,`, + `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "SecurityContext", "SecurityContext", 1) + `,`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `EnvFrom:` + repeatedStringForEnvFrom + `,`, + `TerminationMessagePolicy:` + fmt.Sprintf("%v", this.TerminationMessagePolicy) + `,`, + `VolumeDevices:` + repeatedStringForVolumeDevices + `,`, + `StartupProbe:` + strings.Replace(this.StartupProbe.String(), "Probe", "Probe", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerImage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerImage{`, + `Names:` + fmt.Sprintf("%v", this.Names) + `,`, + `SizeBytes:` + fmt.Sprintf("%v", this.SizeBytes) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerPort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `HostPort:` + fmt.Sprintf("%v", this.HostPort) + `,`, + `ContainerPort:` + fmt.Sprintf("%v", this.ContainerPort) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerState) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerState{`, + `Waiting:` + strings.Replace(this.Waiting.String(), "ContainerStateWaiting", "ContainerStateWaiting", 1) + `,`, + `Running:` + strings.Replace(this.Running.String(), "ContainerStateRunning", "ContainerStateRunning", 1) + `,`, + `Terminated:` + strings.Replace(this.Terminated.String(), "ContainerStateTerminated", "ContainerStateTerminated", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateRunning) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateRunning{`, + `StartedAt:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.StartedAt), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateTerminated) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateTerminated{`, + `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, + `Signal:` + fmt.Sprintf("%v", this.Signal) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `StartedAt:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.StartedAt), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `FinishedAt:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.FinishedAt), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateWaiting) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateWaiting{`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `State:` + strings.Replace(strings.Replace(this.State.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, + `LastTerminationState:` + strings.Replace(strings.Replace(this.LastTerminationState.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, + `Ready:` + fmt.Sprintf("%v", this.Ready) + `,`, + `RestartCount:` + fmt.Sprintf("%v", this.RestartCount) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `ImageID:` + fmt.Sprintf("%v", this.ImageID) + `,`, + `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, + `Started:` + valueToStringGenerated(this.Started) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonEndpoint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonEndpoint{`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIProjection) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]DownwardAPIVolumeFile{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "DownwardAPIVolumeFile", "DownwardAPIVolumeFile", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&DownwardAPIProjection{`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIVolumeFile) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DownwardAPIVolumeFile{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `FieldRef:` + strings.Replace(this.FieldRef.String(), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(this.ResourceFieldRef.String(), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIVolumeSource) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]DownwardAPIVolumeFile{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "DownwardAPIVolumeFile", "DownwardAPIVolumeFile", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&DownwardAPIVolumeSource{`, + `Items:` + repeatedStringForItems + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *EmptyDirVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EmptyDirVolumeSource{`, + `Medium:` + fmt.Sprintf("%v", this.Medium) + `,`, + `SizeLimit:` + strings.Replace(fmt.Sprintf("%v", this.SizeLimit), "Quantity", "resource.Quantity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointAddress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointAddress{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `TargetRef:` + strings.Replace(this.TargetRef.String(), "ObjectReference", "ObjectReference", 1) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointPort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointSubset) String() string { + if this == nil { + return "nil" + } + repeatedStringForAddresses := "[]EndpointAddress{" + for _, f := range this.Addresses { + repeatedStringForAddresses += strings.Replace(strings.Replace(f.String(), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + "," + } + repeatedStringForAddresses += "}" + repeatedStringForNotReadyAddresses := "[]EndpointAddress{" + for _, f := range this.NotReadyAddresses { + repeatedStringForNotReadyAddresses += strings.Replace(strings.Replace(f.String(), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + "," + } + repeatedStringForNotReadyAddresses += "}" + repeatedStringForPorts := "[]EndpointPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "EndpointPort", "EndpointPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + s := strings.Join([]string{`&EndpointSubset{`, + `Addresses:` + repeatedStringForAddresses + `,`, + `NotReadyAddresses:` + repeatedStringForNotReadyAddresses + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `}`, + }, "") + return s +} +func (this *Endpoints) String() string { + if this == nil { + return "nil" + } + repeatedStringForSubsets := "[]EndpointSubset{" + for _, f := range this.Subsets { + repeatedStringForSubsets += strings.Replace(strings.Replace(f.String(), "EndpointSubset", "EndpointSubset", 1), `&`, ``, 1) + "," + } + repeatedStringForSubsets += "}" + s := strings.Join([]string{`&Endpoints{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subsets:` + repeatedStringForSubsets + `,`, + `}`, + }, "") + return s +} +func (this *EndpointsList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Endpoints{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Endpoints", "Endpoints", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&EndpointsList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *EnvFromSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvFromSource{`, + `Prefix:` + fmt.Sprintf("%v", this.Prefix) + `,`, + `ConfigMapRef:` + strings.Replace(this.ConfigMapRef.String(), "ConfigMapEnvSource", "ConfigMapEnvSource", 1) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretEnvSource", "SecretEnvSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EnvVar) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvVar{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `ValueFrom:` + strings.Replace(this.ValueFrom.String(), "EnvVarSource", "EnvVarSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EnvVarSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvVarSource{`, + `FieldRef:` + strings.Replace(this.FieldRef.String(), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(this.ResourceFieldRef.String(), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `ConfigMapKeyRef:` + strings.Replace(this.ConfigMapKeyRef.String(), "ConfigMapKeySelector", "ConfigMapKeySelector", 1) + `,`, + `SecretKeyRef:` + strings.Replace(this.SecretKeyRef.String(), "SecretKeySelector", "SecretKeySelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EphemeralContainer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EphemeralContainer{`, + `EphemeralContainerCommon:` + strings.Replace(strings.Replace(this.EphemeralContainerCommon.String(), "EphemeralContainerCommon", "EphemeralContainerCommon", 1), `&`, ``, 1) + `,`, + `TargetContainerName:` + fmt.Sprintf("%v", this.TargetContainerName) + `,`, + `}`, + }, "") + return s +} +func (this *EphemeralContainerCommon) String() string { + if this == nil { + return "nil" + } + repeatedStringForPorts := "[]ContainerPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "ContainerPort", "ContainerPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += strings.Replace(strings.Replace(f.String(), "EnvVar", "EnvVar", 1), `&`, ``, 1) + "," + } + repeatedStringForEnv += "}" + repeatedStringForVolumeMounts := "[]VolumeMount{" + for _, f := range this.VolumeMounts { + repeatedStringForVolumeMounts += strings.Replace(strings.Replace(f.String(), "VolumeMount", "VolumeMount", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumeMounts += "}" + repeatedStringForEnvFrom := "[]EnvFromSource{" + for _, f := range this.EnvFrom { + repeatedStringForEnvFrom += strings.Replace(strings.Replace(f.String(), "EnvFromSource", "EnvFromSource", 1), `&`, ``, 1) + "," + } + repeatedStringForEnvFrom += "}" + repeatedStringForVolumeDevices := "[]VolumeDevice{" + for _, f := range this.VolumeDevices { + repeatedStringForVolumeDevices += strings.Replace(strings.Replace(f.String(), "VolumeDevice", "VolumeDevice", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumeDevices += "}" + s := strings.Join([]string{`&EphemeralContainerCommon{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Args:` + fmt.Sprintf("%v", this.Args) + `,`, + `WorkingDir:` + fmt.Sprintf("%v", this.WorkingDir) + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `Env:` + repeatedStringForEnv + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeMounts:` + repeatedStringForVolumeMounts + `,`, + `LivenessProbe:` + strings.Replace(this.LivenessProbe.String(), "Probe", "Probe", 1) + `,`, + `ReadinessProbe:` + strings.Replace(this.ReadinessProbe.String(), "Probe", "Probe", 1) + `,`, + `Lifecycle:` + strings.Replace(this.Lifecycle.String(), "Lifecycle", "Lifecycle", 1) + `,`, + `TerminationMessagePath:` + fmt.Sprintf("%v", this.TerminationMessagePath) + `,`, + `ImagePullPolicy:` + fmt.Sprintf("%v", this.ImagePullPolicy) + `,`, + `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "SecurityContext", "SecurityContext", 1) + `,`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `EnvFrom:` + repeatedStringForEnvFrom + `,`, + `TerminationMessagePolicy:` + fmt.Sprintf("%v", this.TerminationMessagePolicy) + `,`, + `VolumeDevices:` + repeatedStringForVolumeDevices + `,`, + `StartupProbe:` + strings.Replace(this.StartupProbe.String(), "Probe", "Probe", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EphemeralContainers) String() string { + if this == nil { + return "nil" + } + repeatedStringForEphemeralContainers := "[]EphemeralContainer{" + for _, f := range this.EphemeralContainers { + repeatedStringForEphemeralContainers += strings.Replace(strings.Replace(f.String(), "EphemeralContainer", "EphemeralContainer", 1), `&`, ``, 1) + "," + } + repeatedStringForEphemeralContainers += "}" + s := strings.Join([]string{`&EphemeralContainers{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `EphemeralContainers:` + repeatedStringForEphemeralContainers + `,`, + `}`, + }, "") + return s +} +func (this *Event) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Event{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `InvolvedObject:` + strings.Replace(strings.Replace(this.InvolvedObject.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Source:` + strings.Replace(strings.Replace(this.Source.String(), "EventSource", "EventSource", 1), `&`, ``, 1) + `,`, + `FirstTimestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.FirstTimestamp), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTimestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTimestamp), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Count:` + fmt.Sprintf("%v", this.Count) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `EventTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EventTime), "MicroTime", "v1.MicroTime", 1), `&`, ``, 1) + `,`, + `Series:` + strings.Replace(this.Series.String(), "EventSeries", "EventSeries", 1) + `,`, + `Action:` + fmt.Sprintf("%v", this.Action) + `,`, + `Related:` + strings.Replace(this.Related.String(), "ObjectReference", "ObjectReference", 1) + `,`, + `ReportingController:` + fmt.Sprintf("%v", this.ReportingController) + `,`, + `ReportingInstance:` + fmt.Sprintf("%v", this.ReportingInstance) + `,`, + `}`, + }, "") + return s +} +func (this *EventList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Event{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Event", "Event", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&EventList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *EventSeries) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EventSeries{`, + `Count:` + fmt.Sprintf("%v", this.Count) + `,`, + `LastObservedTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastObservedTime), "MicroTime", "v1.MicroTime", 1), `&`, ``, 1) + `,`, + `State:` + fmt.Sprintf("%v", this.State) + `,`, + `}`, + }, "") + return s +} +func (this *EventSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EventSource{`, + `Component:` + fmt.Sprintf("%v", this.Component) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `}`, + }, "") + return s +} +func (this *ExecAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExecAction{`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *FCVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FCVolumeSource{`, + `TargetWWNs:` + fmt.Sprintf("%v", this.TargetWWNs) + `,`, + `Lun:` + valueToStringGenerated(this.Lun) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `WWIDs:` + fmt.Sprintf("%v", this.WWIDs) + `,`, + `}`, + }, "") + return s +} +func (this *FlexPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForOptions := make([]string, 0, len(this.Options)) + for k := range this.Options { + keysForOptions = append(keysForOptions, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) + mapStringForOptions := "map[string]string{" + for _, k := range keysForOptions { + mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) + } + mapStringForOptions += "}" + s := strings.Join([]string{`&FlexPersistentVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `Options:` + mapStringForOptions + `,`, + `}`, + }, "") + return s +} +func (this *FlexVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForOptions := make([]string, 0, len(this.Options)) + for k := range this.Options { + keysForOptions = append(keysForOptions, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) + mapStringForOptions := "map[string]string{" + for _, k := range keysForOptions { + mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) + } + mapStringForOptions += "}" + s := strings.Join([]string{`&FlexVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `Options:` + mapStringForOptions + `,`, + `}`, + }, "") + return s +} +func (this *FlockerVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FlockerVolumeSource{`, + `DatasetName:` + fmt.Sprintf("%v", this.DatasetName) + `,`, + `DatasetUUID:` + fmt.Sprintf("%v", this.DatasetUUID) + `,`, + `}`, + }, "") + return s +} +func (this *GCEPersistentDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GCEPersistentDiskVolumeSource{`, + `PDName:` + fmt.Sprintf("%v", this.PDName) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *GitRepoVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitRepoVolumeSource{`, + `Repository:` + fmt.Sprintf("%v", this.Repository) + `,`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `Directory:` + fmt.Sprintf("%v", this.Directory) + `,`, + `}`, + }, "") + return s +} +func (this *GlusterfsPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GlusterfsPersistentVolumeSource{`, + `EndpointsName:` + fmt.Sprintf("%v", this.EndpointsName) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `EndpointsNamespace:` + valueToStringGenerated(this.EndpointsNamespace) + `,`, + `}`, + }, "") + return s +} +func (this *GlusterfsVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GlusterfsVolumeSource{`, + `EndpointsName:` + fmt.Sprintf("%v", this.EndpointsName) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPGetAction) String() string { + if this == nil { + return "nil" + } + repeatedStringForHTTPHeaders := "[]HTTPHeader{" + for _, f := range this.HTTPHeaders { + repeatedStringForHTTPHeaders += strings.Replace(strings.Replace(f.String(), "HTTPHeader", "HTTPHeader", 1), `&`, ``, 1) + "," + } + repeatedStringForHTTPHeaders += "}" + s := strings.Join([]string{`&HTTPGetAction{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Port:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `Scheme:` + fmt.Sprintf("%v", this.Scheme) + `,`, + `HTTPHeaders:` + repeatedStringForHTTPHeaders + `,`, + `}`, + }, "") + return s +} +func (this *HTTPHeader) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPHeader{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `}`, + }, "") + return s +} +func (this *Handler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Handler{`, + `Exec:` + strings.Replace(this.Exec.String(), "ExecAction", "ExecAction", 1) + `,`, + `HTTPGet:` + strings.Replace(this.HTTPGet.String(), "HTTPGetAction", "HTTPGetAction", 1) + `,`, + `TCPSocket:` + strings.Replace(this.TCPSocket.String(), "TCPSocketAction", "TCPSocketAction", 1) + `,`, + `}`, + }, "") + return s +} +func (this *HostAlias) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HostAlias{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `Hostnames:` + fmt.Sprintf("%v", this.Hostnames) + `,`, + `}`, + }, "") + return s +} +func (this *HostPathVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HostPathVolumeSource{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Type:` + valueToStringGenerated(this.Type) + `,`, + `}`, + }, "") + return s +} +func (this *ISCSIPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ISCSIPersistentVolumeSource{`, + `TargetPortal:` + fmt.Sprintf("%v", this.TargetPortal) + `,`, + `IQN:` + fmt.Sprintf("%v", this.IQN) + `,`, + `Lun:` + fmt.Sprintf("%v", this.Lun) + `,`, + `ISCSIInterface:` + fmt.Sprintf("%v", this.ISCSIInterface) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `Portals:` + fmt.Sprintf("%v", this.Portals) + `,`, + `DiscoveryCHAPAuth:` + fmt.Sprintf("%v", this.DiscoveryCHAPAuth) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `SessionCHAPAuth:` + fmt.Sprintf("%v", this.SessionCHAPAuth) + `,`, + `InitiatorName:` + valueToStringGenerated(this.InitiatorName) + `,`, + `}`, + }, "") + return s +} +func (this *ISCSIVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ISCSIVolumeSource{`, + `TargetPortal:` + fmt.Sprintf("%v", this.TargetPortal) + `,`, + `IQN:` + fmt.Sprintf("%v", this.IQN) + `,`, + `Lun:` + fmt.Sprintf("%v", this.Lun) + `,`, + `ISCSIInterface:` + fmt.Sprintf("%v", this.ISCSIInterface) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `Portals:` + fmt.Sprintf("%v", this.Portals) + `,`, + `DiscoveryCHAPAuth:` + fmt.Sprintf("%v", this.DiscoveryCHAPAuth) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `SessionCHAPAuth:` + fmt.Sprintf("%v", this.SessionCHAPAuth) + `,`, + `InitiatorName:` + valueToStringGenerated(this.InitiatorName) + `,`, + `}`, + }, "") + return s +} +func (this *KeyToPath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KeyToPath{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *Lifecycle) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lifecycle{`, + `PostStart:` + strings.Replace(this.PostStart.String(), "Handler", "Handler", 1) + `,`, + `PreStop:` + strings.Replace(this.PreStop.String(), "Handler", "Handler", 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRange{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LimitRangeSpec", "LimitRangeSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeItem) String() string { + if this == nil { + return "nil" + } + keysForMax := make([]string, 0, len(this.Max)) + for k := range this.Max { + keysForMax = append(keysForMax, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMax) + mapStringForMax := "ResourceList{" + for _, k := range keysForMax { + mapStringForMax += fmt.Sprintf("%v: %v,", k, this.Max[ResourceName(k)]) + } + mapStringForMax += "}" + keysForMin := make([]string, 0, len(this.Min)) + for k := range this.Min { + keysForMin = append(keysForMin, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMin) + mapStringForMin := "ResourceList{" + for _, k := range keysForMin { + mapStringForMin += fmt.Sprintf("%v: %v,", k, this.Min[ResourceName(k)]) + } + mapStringForMin += "}" + keysForDefault := make([]string, 0, len(this.Default)) + for k := range this.Default { + keysForDefault = append(keysForDefault, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) + mapStringForDefault := "ResourceList{" + for _, k := range keysForDefault { + mapStringForDefault += fmt.Sprintf("%v: %v,", k, this.Default[ResourceName(k)]) + } + mapStringForDefault += "}" + keysForDefaultRequest := make([]string, 0, len(this.DefaultRequest)) + for k := range this.DefaultRequest { + keysForDefaultRequest = append(keysForDefaultRequest, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) + mapStringForDefaultRequest := "ResourceList{" + for _, k := range keysForDefaultRequest { + mapStringForDefaultRequest += fmt.Sprintf("%v: %v,", k, this.DefaultRequest[ResourceName(k)]) + } + mapStringForDefaultRequest += "}" + keysForMaxLimitRequestRatio := make([]string, 0, len(this.MaxLimitRequestRatio)) + for k := range this.MaxLimitRequestRatio { + keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) + mapStringForMaxLimitRequestRatio := "ResourceList{" + for _, k := range keysForMaxLimitRequestRatio { + mapStringForMaxLimitRequestRatio += fmt.Sprintf("%v: %v,", k, this.MaxLimitRequestRatio[ResourceName(k)]) + } + mapStringForMaxLimitRequestRatio += "}" + s := strings.Join([]string{`&LimitRangeItem{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Max:` + mapStringForMax + `,`, + `Min:` + mapStringForMin + `,`, + `Default:` + mapStringForDefault + `,`, + `DefaultRequest:` + mapStringForDefaultRequest + `,`, + `MaxLimitRequestRatio:` + mapStringForMaxLimitRequestRatio + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]LimitRange{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "LimitRange", "LimitRange", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&LimitRangeList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForLimits := "[]LimitRangeItem{" + for _, f := range this.Limits { + repeatedStringForLimits += strings.Replace(strings.Replace(f.String(), "LimitRangeItem", "LimitRangeItem", 1), `&`, ``, 1) + "," + } + repeatedStringForLimits += "}" + s := strings.Join([]string{`&LimitRangeSpec{`, + `Limits:` + repeatedStringForLimits + `,`, + `}`, + }, "") + return s +} +func (this *List) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]RawExtension{" + for _, f := range this.Items { + repeatedStringForItems += fmt.Sprintf("%v", f) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&List{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *LoadBalancerIngress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LoadBalancerIngress{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `}`, + }, "") + return s +} +func (this *LoadBalancerStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForIngress := "[]LoadBalancerIngress{" + for _, f := range this.Ingress { + repeatedStringForIngress += strings.Replace(strings.Replace(f.String(), "LoadBalancerIngress", "LoadBalancerIngress", 1), `&`, ``, 1) + "," + } + repeatedStringForIngress += "}" + s := strings.Join([]string{`&LoadBalancerStatus{`, + `Ingress:` + repeatedStringForIngress + `,`, + `}`, + }, "") + return s +} +func (this *LocalObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalObjectReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *LocalVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalVolumeSource{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `FSType:` + valueToStringGenerated(this.FSType) + `,`, + `}`, + }, "") + return s +} +func (this *NFSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NFSVolumeSource{`, + `Server:` + fmt.Sprintf("%v", this.Server) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Namespace) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Namespace{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NamespaceSpec", "NamespaceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NamespaceStatus", "NamespaceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Namespace{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Namespace", "Namespace", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&NamespaceList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceSpec{`, + `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]NamespaceCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "NamespaceCondition", "NamespaceCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&NamespaceStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *Node) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Node{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NodeSpec", "NodeSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NodeStatus", "NodeStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeAddress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeAddress{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Address:` + fmt.Sprintf("%v", this.Address) + `,`, + `}`, + }, "") + return s +} +func (this *NodeAffinity) String() string { + if this == nil { + return "nil" + } + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution := "[]PreferredSchedulingTerm{" + for _, f := range this.PreferredDuringSchedulingIgnoredDuringExecution { + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution += strings.Replace(strings.Replace(f.String(), "PreferredSchedulingTerm", "PreferredSchedulingTerm", 1), `&`, ``, 1) + "," + } + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution += "}" + s := strings.Join([]string{`&NodeAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(this.RequiredDuringSchedulingIgnoredDuringExecution.String(), "NodeSelector", "NodeSelector", 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution + `,`, + `}`, + }, "") + return s +} +func (this *NodeCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastHeartbeatTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastHeartbeatTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *NodeConfigSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeConfigSource{`, + `ConfigMap:` + strings.Replace(this.ConfigMap.String(), "ConfigMapNodeConfigSource", "ConfigMapNodeConfigSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeConfigStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeConfigStatus{`, + `Assigned:` + strings.Replace(this.Assigned.String(), "NodeConfigSource", "NodeConfigSource", 1) + `,`, + `Active:` + strings.Replace(this.Active.String(), "NodeConfigSource", "NodeConfigSource", 1) + `,`, + `LastKnownGood:` + strings.Replace(this.LastKnownGood.String(), "NodeConfigSource", "NodeConfigSource", 1) + `,`, + `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `}`, + }, "") + return s +} +func (this *NodeDaemonEndpoints) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeDaemonEndpoints{`, + `KubeletEndpoint:` + strings.Replace(strings.Replace(this.KubeletEndpoint.String(), "DaemonEndpoint", "DaemonEndpoint", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Node{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Node", "Node", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&NodeList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *NodeProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *NodeResources) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&NodeResources{`, + `Capacity:` + mapStringForCapacity + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelector) String() string { + if this == nil { + return "nil" + } + repeatedStringForNodeSelectorTerms := "[]NodeSelectorTerm{" + for _, f := range this.NodeSelectorTerms { + repeatedStringForNodeSelectorTerms += strings.Replace(strings.Replace(f.String(), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + "," + } + repeatedStringForNodeSelectorTerms += "}" + s := strings.Join([]string{`&NodeSelector{`, + `NodeSelectorTerms:` + repeatedStringForNodeSelectorTerms + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelectorTerm) String() string { + if this == nil { + return "nil" + } + repeatedStringForMatchExpressions := "[]NodeSelectorRequirement{" + for _, f := range this.MatchExpressions { + repeatedStringForMatchExpressions += strings.Replace(strings.Replace(f.String(), "NodeSelectorRequirement", "NodeSelectorRequirement", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchExpressions += "}" + repeatedStringForMatchFields := "[]NodeSelectorRequirement{" + for _, f := range this.MatchFields { + repeatedStringForMatchFields += strings.Replace(strings.Replace(f.String(), "NodeSelectorRequirement", "NodeSelectorRequirement", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchFields += "}" + s := strings.Join([]string{`&NodeSelectorTerm{`, + `MatchExpressions:` + repeatedStringForMatchExpressions + `,`, + `MatchFields:` + repeatedStringForMatchFields + `,`, + `}`, + }, "") + return s +} +func (this *NodeSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForTaints := "[]Taint{" + for _, f := range this.Taints { + repeatedStringForTaints += strings.Replace(strings.Replace(f.String(), "Taint", "Taint", 1), `&`, ``, 1) + "," + } + repeatedStringForTaints += "}" + s := strings.Join([]string{`&NodeSpec{`, + `PodCIDR:` + fmt.Sprintf("%v", this.PodCIDR) + `,`, + `DoNotUse_ExternalID:` + fmt.Sprintf("%v", this.DoNotUse_ExternalID) + `,`, + `ProviderID:` + fmt.Sprintf("%v", this.ProviderID) + `,`, + `Unschedulable:` + fmt.Sprintf("%v", this.Unschedulable) + `,`, + `Taints:` + repeatedStringForTaints + `,`, + `ConfigSource:` + strings.Replace(this.ConfigSource.String(), "NodeConfigSource", "NodeConfigSource", 1) + `,`, + `PodCIDRs:` + fmt.Sprintf("%v", this.PodCIDRs) + `,`, + `}`, + }, "") + return s +} +func (this *NodeStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]NodeCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "NodeCondition", "NodeCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + repeatedStringForAddresses := "[]NodeAddress{" + for _, f := range this.Addresses { + repeatedStringForAddresses += strings.Replace(strings.Replace(f.String(), "NodeAddress", "NodeAddress", 1), `&`, ``, 1) + "," + } + repeatedStringForAddresses += "}" + repeatedStringForImages := "[]ContainerImage{" + for _, f := range this.Images { + repeatedStringForImages += strings.Replace(strings.Replace(f.String(), "ContainerImage", "ContainerImage", 1), `&`, ``, 1) + "," + } + repeatedStringForImages += "}" + repeatedStringForVolumesAttached := "[]AttachedVolume{" + for _, f := range this.VolumesAttached { + repeatedStringForVolumesAttached += strings.Replace(strings.Replace(f.String(), "AttachedVolume", "AttachedVolume", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumesAttached += "}" + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + keysForAllocatable := make([]string, 0, len(this.Allocatable)) + for k := range this.Allocatable { + keysForAllocatable = append(keysForAllocatable, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) + mapStringForAllocatable := "ResourceList{" + for _, k := range keysForAllocatable { + mapStringForAllocatable += fmt.Sprintf("%v: %v,", k, this.Allocatable[ResourceName(k)]) + } + mapStringForAllocatable += "}" + s := strings.Join([]string{`&NodeStatus{`, + `Capacity:` + mapStringForCapacity + `,`, + `Allocatable:` + mapStringForAllocatable + `,`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `Addresses:` + repeatedStringForAddresses + `,`, + `DaemonEndpoints:` + strings.Replace(strings.Replace(this.DaemonEndpoints.String(), "NodeDaemonEndpoints", "NodeDaemonEndpoints", 1), `&`, ``, 1) + `,`, + `NodeInfo:` + strings.Replace(strings.Replace(this.NodeInfo.String(), "NodeSystemInfo", "NodeSystemInfo", 1), `&`, ``, 1) + `,`, + `Images:` + repeatedStringForImages + `,`, + `VolumesInUse:` + fmt.Sprintf("%v", this.VolumesInUse) + `,`, + `VolumesAttached:` + repeatedStringForVolumesAttached + `,`, + `Config:` + strings.Replace(this.Config.String(), "NodeConfigStatus", "NodeConfigStatus", 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSystemInfo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSystemInfo{`, + `MachineID:` + fmt.Sprintf("%v", this.MachineID) + `,`, + `SystemUUID:` + fmt.Sprintf("%v", this.SystemUUID) + `,`, + `BootID:` + fmt.Sprintf("%v", this.BootID) + `,`, + `KernelVersion:` + fmt.Sprintf("%v", this.KernelVersion) + `,`, + `OSImage:` + fmt.Sprintf("%v", this.OSImage) + `,`, + `ContainerRuntimeVersion:` + fmt.Sprintf("%v", this.ContainerRuntimeVersion) + `,`, + `KubeletVersion:` + fmt.Sprintf("%v", this.KubeletVersion) + `,`, + `KubeProxyVersion:` + fmt.Sprintf("%v", this.KubeProxyVersion) + `,`, + `OperatingSystem:` + fmt.Sprintf("%v", this.OperatingSystem) + `,`, + `Architecture:` + fmt.Sprintf("%v", this.Architecture) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectFieldSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectFieldSelector{`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolume{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeSpec", "PersistentVolumeSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeStatus", "PersistentVolumeStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaim) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaim{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeClaimSpec", "PersistentVolumeClaimSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeClaimStatus", "PersistentVolumeClaimStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastProbeTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PersistentVolumeClaim{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PersistentVolumeClaim", "PersistentVolumeClaim", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PersistentVolumeClaimList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimSpec{`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `StorageClassName:` + valueToStringGenerated(this.StorageClassName) + `,`, + `VolumeMode:` + valueToStringGenerated(this.VolumeMode) + `,`, + `DataSource:` + strings.Replace(this.DataSource.String(), "TypedLocalObjectReference", "TypedLocalObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]PersistentVolumeClaimCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "PersistentVolumeClaimCondition", "PersistentVolumeClaimCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&PersistentVolumeClaimStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `Capacity:` + mapStringForCapacity + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimVolumeSource{`, + `ClaimName:` + fmt.Sprintf("%v", this.ClaimName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PersistentVolume{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PersistentVolume", "PersistentVolume", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PersistentVolumeList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeSource{`, + `GCEPersistentDisk:` + strings.Replace(this.GCEPersistentDisk.String(), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, + `AWSElasticBlockStore:` + strings.Replace(this.AWSElasticBlockStore.String(), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, + `HostPath:` + strings.Replace(this.HostPath.String(), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, + `Glusterfs:` + strings.Replace(this.Glusterfs.String(), "GlusterfsPersistentVolumeSource", "GlusterfsPersistentVolumeSource", 1) + `,`, + `NFS:` + strings.Replace(this.NFS.String(), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(this.RBD.String(), "RBDPersistentVolumeSource", "RBDPersistentVolumeSource", 1) + `,`, + `ISCSI:` + strings.Replace(this.ISCSI.String(), "ISCSIPersistentVolumeSource", "ISCSIPersistentVolumeSource", 1) + `,`, + `Cinder:` + strings.Replace(this.Cinder.String(), "CinderPersistentVolumeSource", "CinderPersistentVolumeSource", 1) + `,`, + `CephFS:` + strings.Replace(this.CephFS.String(), "CephFSPersistentVolumeSource", "CephFSPersistentVolumeSource", 1) + `,`, + `FC:` + strings.Replace(this.FC.String(), "FCVolumeSource", "FCVolumeSource", 1) + `,`, + `Flocker:` + strings.Replace(this.Flocker.String(), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, + `FlexVolume:` + strings.Replace(this.FlexVolume.String(), "FlexPersistentVolumeSource", "FlexPersistentVolumeSource", 1) + `,`, + `AzureFile:` + strings.Replace(this.AzureFile.String(), "AzureFilePersistentVolumeSource", "AzureFilePersistentVolumeSource", 1) + `,`, + `VsphereVolume:` + strings.Replace(this.VsphereVolume.String(), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, + `Quobyte:` + strings.Replace(this.Quobyte.String(), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, + `AzureDisk:` + strings.Replace(this.AzureDisk.String(), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, + `PhotonPersistentDisk:` + strings.Replace(this.PhotonPersistentDisk.String(), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, + `PortworxVolume:` + strings.Replace(this.PortworxVolume.String(), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, + `ScaleIO:` + strings.Replace(this.ScaleIO.String(), "ScaleIOPersistentVolumeSource", "ScaleIOPersistentVolumeSource", 1) + `,`, + `Local:` + strings.Replace(this.Local.String(), "LocalVolumeSource", "LocalVolumeSource", 1) + `,`, + `StorageOS:` + strings.Replace(this.StorageOS.String(), "StorageOSPersistentVolumeSource", "StorageOSPersistentVolumeSource", 1) + `,`, + `CSI:` + strings.Replace(this.CSI.String(), "CSIPersistentVolumeSource", "CSIPersistentVolumeSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeSpec) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&PersistentVolumeSpec{`, + `Capacity:` + mapStringForCapacity + `,`, + `PersistentVolumeSource:` + strings.Replace(strings.Replace(this.PersistentVolumeSource.String(), "PersistentVolumeSource", "PersistentVolumeSource", 1), `&`, ``, 1) + `,`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `ClaimRef:` + strings.Replace(this.ClaimRef.String(), "ObjectReference", "ObjectReference", 1) + `,`, + `PersistentVolumeReclaimPolicy:` + fmt.Sprintf("%v", this.PersistentVolumeReclaimPolicy) + `,`, + `StorageClassName:` + fmt.Sprintf("%v", this.StorageClassName) + `,`, + `MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`, + `VolumeMode:` + valueToStringGenerated(this.VolumeMode) + `,`, + `NodeAffinity:` + strings.Replace(this.NodeAffinity.String(), "VolumeNodeAffinity", "VolumeNodeAffinity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `}`, + }, "") + return s +} +func (this *PhotonPersistentDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PhotonPersistentDiskVolumeSource{`, + `PdID:` + fmt.Sprintf("%v", this.PdID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `}`, + }, "") + return s +} +func (this *Pod) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Pod{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAffinity) String() string { + if this == nil { + return "nil" + } + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution := "[]PodAffinityTerm{" + for _, f := range this.RequiredDuringSchedulingIgnoredDuringExecution { + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution += strings.Replace(strings.Replace(f.String(), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + "," + } + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution += "}" + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution := "[]WeightedPodAffinityTerm{" + for _, f := range this.PreferredDuringSchedulingIgnoredDuringExecution { + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution += strings.Replace(strings.Replace(f.String(), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + "," + } + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution += "}" + s := strings.Join([]string{`&PodAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution + `,`, + `}`, + }, "") + return s +} +func (this *PodAffinityTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAffinityTerm{`, + `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, + `TopologyKey:` + fmt.Sprintf("%v", this.TopologyKey) + `,`, + `}`, + }, "") + return s +} +func (this *PodAntiAffinity) String() string { + if this == nil { + return "nil" + } + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution := "[]PodAffinityTerm{" + for _, f := range this.RequiredDuringSchedulingIgnoredDuringExecution { + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution += strings.Replace(strings.Replace(f.String(), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + "," + } + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution += "}" + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution := "[]WeightedPodAffinityTerm{" + for _, f := range this.PreferredDuringSchedulingIgnoredDuringExecution { + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution += strings.Replace(strings.Replace(f.String(), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + "," + } + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution += "}" + s := strings.Join([]string{`&PodAntiAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + repeatedStringForRequiredDuringSchedulingIgnoredDuringExecution + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + repeatedStringForPreferredDuringSchedulingIgnoredDuringExecution + `,`, + `}`, + }, "") + return s +} +func (this *PodAttachOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAttachOptions{`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `}`, + }, "") + return s +} +func (this *PodCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastProbeTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PodDNSConfig) String() string { + if this == nil { + return "nil" + } + repeatedStringForOptions := "[]PodDNSConfigOption{" + for _, f := range this.Options { + repeatedStringForOptions += strings.Replace(strings.Replace(f.String(), "PodDNSConfigOption", "PodDNSConfigOption", 1), `&`, ``, 1) + "," + } + repeatedStringForOptions += "}" + s := strings.Join([]string{`&PodDNSConfig{`, + `Nameservers:` + fmt.Sprintf("%v", this.Nameservers) + `,`, + `Searches:` + fmt.Sprintf("%v", this.Searches) + `,`, + `Options:` + repeatedStringForOptions + `,`, + `}`, + }, "") + return s +} +func (this *PodDNSConfigOption) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDNSConfigOption{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + valueToStringGenerated(this.Value) + `,`, + `}`, + }, "") + return s +} +func (this *PodExecOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodExecOptions{`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *PodIP) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodIP{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `}`, + }, "") + return s +} +func (this *PodList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Pod{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Pod", "Pod", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PodList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PodLogOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodLogOptions{`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, + `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, + `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, + `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "v1.Time", 1) + `,`, + `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, + `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, + `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, + `}`, + }, "") + return s +} +func (this *PodPortForwardOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodPortForwardOptions{`, + `Ports:` + fmt.Sprintf("%v", this.Ports) + `,`, + `}`, + }, "") + return s +} +func (this *PodProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *PodReadinessGate) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodReadinessGate{`, + `ConditionType:` + fmt.Sprintf("%v", this.ConditionType) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityContext) String() string { + if this == nil { + return "nil" + } + repeatedStringForSysctls := "[]Sysctl{" + for _, f := range this.Sysctls { + repeatedStringForSysctls += strings.Replace(strings.Replace(f.String(), "Sysctl", "Sysctl", 1), `&`, ``, 1) + "," + } + repeatedStringForSysctls += "}" + s := strings.Join([]string{`&PodSecurityContext{`, + `SELinuxOptions:` + strings.Replace(this.SELinuxOptions.String(), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, + `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, + `SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`, + `FSGroup:` + valueToStringGenerated(this.FSGroup) + `,`, + `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`, + `Sysctls:` + repeatedStringForSysctls + `,`, + `WindowsOptions:` + strings.Replace(this.WindowsOptions.String(), "WindowsSecurityContextOptions", "WindowsSecurityContextOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSignature) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSignature{`, + `PodController:` + strings.Replace(fmt.Sprintf("%v", this.PodController), "OwnerReference", "v1.OwnerReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForVolumes := "[]Volume{" + for _, f := range this.Volumes { + repeatedStringForVolumes += strings.Replace(strings.Replace(f.String(), "Volume", "Volume", 1), `&`, ``, 1) + "," + } + repeatedStringForVolumes += "}" + repeatedStringForContainers := "[]Container{" + for _, f := range this.Containers { + repeatedStringForContainers += strings.Replace(strings.Replace(f.String(), "Container", "Container", 1), `&`, ``, 1) + "," + } + repeatedStringForContainers += "}" + repeatedStringForImagePullSecrets := "[]LocalObjectReference{" + for _, f := range this.ImagePullSecrets { + repeatedStringForImagePullSecrets += strings.Replace(strings.Replace(f.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + "," + } + repeatedStringForImagePullSecrets += "}" + repeatedStringForInitContainers := "[]Container{" + for _, f := range this.InitContainers { + repeatedStringForInitContainers += strings.Replace(strings.Replace(f.String(), "Container", "Container", 1), `&`, ``, 1) + "," + } + repeatedStringForInitContainers += "}" + repeatedStringForTolerations := "[]Toleration{" + for _, f := range this.Tolerations { + repeatedStringForTolerations += strings.Replace(strings.Replace(f.String(), "Toleration", "Toleration", 1), `&`, ``, 1) + "," + } + repeatedStringForTolerations += "}" + repeatedStringForHostAliases := "[]HostAlias{" + for _, f := range this.HostAliases { + repeatedStringForHostAliases += strings.Replace(strings.Replace(f.String(), "HostAlias", "HostAlias", 1), `&`, ``, 1) + "," + } + repeatedStringForHostAliases += "}" + repeatedStringForReadinessGates := "[]PodReadinessGate{" + for _, f := range this.ReadinessGates { + repeatedStringForReadinessGates += strings.Replace(strings.Replace(f.String(), "PodReadinessGate", "PodReadinessGate", 1), `&`, ``, 1) + "," + } + repeatedStringForReadinessGates += "}" + repeatedStringForTopologySpreadConstraints := "[]TopologySpreadConstraint{" + for _, f := range this.TopologySpreadConstraints { + repeatedStringForTopologySpreadConstraints += strings.Replace(strings.Replace(f.String(), "TopologySpreadConstraint", "TopologySpreadConstraint", 1), `&`, ``, 1) + "," + } + repeatedStringForTopologySpreadConstraints += "}" + repeatedStringForEphemeralContainers := "[]EphemeralContainer{" + for _, f := range this.EphemeralContainers { + repeatedStringForEphemeralContainers += strings.Replace(strings.Replace(f.String(), "EphemeralContainer", "EphemeralContainer", 1), `&`, ``, 1) + "," + } + repeatedStringForEphemeralContainers += "}" + keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) + for k := range this.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + mapStringForNodeSelector := "map[string]string{" + for _, k := range keysForNodeSelector { + mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + } + mapStringForNodeSelector += "}" + keysForOverhead := make([]string, 0, len(this.Overhead)) + for k := range this.Overhead { + keysForOverhead = append(keysForOverhead, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOverhead) + mapStringForOverhead := "ResourceList{" + for _, k := range keysForOverhead { + mapStringForOverhead += fmt.Sprintf("%v: %v,", k, this.Overhead[ResourceName(k)]) + } + mapStringForOverhead += "}" + s := strings.Join([]string{`&PodSpec{`, + `Volumes:` + repeatedStringForVolumes + `,`, + `Containers:` + repeatedStringForContainers + `,`, + `RestartPolicy:` + fmt.Sprintf("%v", this.RestartPolicy) + `,`, + `TerminationGracePeriodSeconds:` + valueToStringGenerated(this.TerminationGracePeriodSeconds) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `DNSPolicy:` + fmt.Sprintf("%v", this.DNSPolicy) + `,`, + `NodeSelector:` + mapStringForNodeSelector + `,`, + `ServiceAccountName:` + fmt.Sprintf("%v", this.ServiceAccountName) + `,`, + `DeprecatedServiceAccount:` + fmt.Sprintf("%v", this.DeprecatedServiceAccount) + `,`, + `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, + `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, + `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, + `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, + `SecurityContext:` + strings.Replace(this.SecurityContext.String(), "PodSecurityContext", "PodSecurityContext", 1) + `,`, + `ImagePullSecrets:` + repeatedStringForImagePullSecrets + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `Subdomain:` + fmt.Sprintf("%v", this.Subdomain) + `,`, + `Affinity:` + strings.Replace(this.Affinity.String(), "Affinity", "Affinity", 1) + `,`, + `SchedulerName:` + fmt.Sprintf("%v", this.SchedulerName) + `,`, + `InitContainers:` + repeatedStringForInitContainers + `,`, + `AutomountServiceAccountToken:` + valueToStringGenerated(this.AutomountServiceAccountToken) + `,`, + `Tolerations:` + repeatedStringForTolerations + `,`, + `HostAliases:` + repeatedStringForHostAliases + `,`, + `PriorityClassName:` + fmt.Sprintf("%v", this.PriorityClassName) + `,`, + `Priority:` + valueToStringGenerated(this.Priority) + `,`, + `DNSConfig:` + strings.Replace(this.DNSConfig.String(), "PodDNSConfig", "PodDNSConfig", 1) + `,`, + `ShareProcessNamespace:` + valueToStringGenerated(this.ShareProcessNamespace) + `,`, + `ReadinessGates:` + repeatedStringForReadinessGates + `,`, + `RuntimeClassName:` + valueToStringGenerated(this.RuntimeClassName) + `,`, + `EnableServiceLinks:` + valueToStringGenerated(this.EnableServiceLinks) + `,`, + `PreemptionPolicy:` + valueToStringGenerated(this.PreemptionPolicy) + `,`, + `Overhead:` + mapStringForOverhead + `,`, + `TopologySpreadConstraints:` + repeatedStringForTopologySpreadConstraints + `,`, + `EphemeralContainers:` + repeatedStringForEphemeralContainers + `,`, + `}`, + }, "") + return s +} +func (this *PodStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]PodCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "PodCondition", "PodCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + repeatedStringForContainerStatuses := "[]ContainerStatus{" + for _, f := range this.ContainerStatuses { + repeatedStringForContainerStatuses += strings.Replace(strings.Replace(f.String(), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForContainerStatuses += "}" + repeatedStringForInitContainerStatuses := "[]ContainerStatus{" + for _, f := range this.InitContainerStatuses { + repeatedStringForInitContainerStatuses += strings.Replace(strings.Replace(f.String(), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForInitContainerStatuses += "}" + repeatedStringForPodIPs := "[]PodIP{" + for _, f := range this.PodIPs { + repeatedStringForPodIPs += strings.Replace(strings.Replace(f.String(), "PodIP", "PodIP", 1), `&`, ``, 1) + "," + } + repeatedStringForPodIPs += "}" + repeatedStringForEphemeralContainerStatuses := "[]ContainerStatus{" + for _, f := range this.EphemeralContainerStatuses { + repeatedStringForEphemeralContainerStatuses += strings.Replace(strings.Replace(f.String(), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForEphemeralContainerStatuses += "}" + s := strings.Join([]string{`&PodStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `PodIP:` + fmt.Sprintf("%v", this.PodIP) + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "v1.Time", 1) + `,`, + `ContainerStatuses:` + repeatedStringForContainerStatuses + `,`, + `QOSClass:` + fmt.Sprintf("%v", this.QOSClass) + `,`, + `InitContainerStatuses:` + repeatedStringForInitContainerStatuses + `,`, + `NominatedNodeName:` + fmt.Sprintf("%v", this.NominatedNodeName) + `,`, + `PodIPs:` + repeatedStringForPodIPs + `,`, + `EphemeralContainerStatuses:` + repeatedStringForEphemeralContainerStatuses + `,`, + `}`, + }, "") + return s +} +func (this *PodStatusResult) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodStatusResult{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplate) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplate{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplateList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PodTemplate{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodTemplate", "PodTemplate", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PodTemplateList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplateSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplateSpec{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PortworxVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PortworxVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Preconditions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Preconditions{`, + `UID:` + valueToStringGenerated(this.UID) + `,`, + `}`, + }, "") + return s +} +func (this *PreferAvoidPodsEntry) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PreferAvoidPodsEntry{`, + `PodSignature:` + strings.Replace(strings.Replace(this.PodSignature.String(), "PodSignature", "PodSignature", 1), `&`, ``, 1) + `,`, + `EvictionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EvictionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PreferredSchedulingTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PreferredSchedulingTerm{`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `Preference:` + strings.Replace(strings.Replace(this.Preference.String(), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Probe) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Probe{`, + `Handler:` + strings.Replace(strings.Replace(this.Handler.String(), "Handler", "Handler", 1), `&`, ``, 1) + `,`, + `InitialDelaySeconds:` + fmt.Sprintf("%v", this.InitialDelaySeconds) + `,`, + `TimeoutSeconds:` + fmt.Sprintf("%v", this.TimeoutSeconds) + `,`, + `PeriodSeconds:` + fmt.Sprintf("%v", this.PeriodSeconds) + `,`, + `SuccessThreshold:` + fmt.Sprintf("%v", this.SuccessThreshold) + `,`, + `FailureThreshold:` + fmt.Sprintf("%v", this.FailureThreshold) + `,`, + `}`, + }, "") + return s +} +func (this *ProjectedVolumeSource) String() string { + if this == nil { + return "nil" + } + repeatedStringForSources := "[]VolumeProjection{" + for _, f := range this.Sources { + repeatedStringForSources += strings.Replace(strings.Replace(f.String(), "VolumeProjection", "VolumeProjection", 1), `&`, ``, 1) + "," + } + repeatedStringForSources += "}" + s := strings.Join([]string{`&ProjectedVolumeSource{`, + `Sources:` + repeatedStringForSources + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *QuobyteVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&QuobyteVolumeSource{`, + `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, + `Volume:` + fmt.Sprintf("%v", this.Volume) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Tenant:` + fmt.Sprintf("%v", this.Tenant) + `,`, + `}`, + }, "") + return s +} +func (this *RBDPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RBDPersistentVolumeSource{`, + `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, + `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, + `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, + `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *RBDVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RBDVolumeSource{`, + `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, + `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, + `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, + `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *RangeAllocation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RangeAllocation{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Range:` + fmt.Sprintf("%v", this.Range) + `,`, + `Data:` + valueToStringGenerated(this.Data) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationController) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationController{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicationControllerSpec", "ReplicationControllerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicationControllerStatus", "ReplicationControllerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationControllerCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ReplicationController{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ReplicationController", "ReplicationController", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ReplicationControllerList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ReplicationControllerSpec{`, + `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, + `Selector:` + mapStringForSelector + `,`, + `Template:` + strings.Replace(this.Template.String(), "PodTemplateSpec", "PodTemplateSpec", 1) + `,`, + `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]ReplicationControllerCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "ReplicationControllerCondition", "ReplicationControllerCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&ReplicationControllerStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *ResourceFieldSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceFieldSelector{`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, + `Divisor:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Divisor), "Quantity", "resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuota) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceQuota{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ResourceQuotaSpec", "ResourceQuotaSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ResourceQuotaStatus", "ResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ResourceQuota{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ResourceQuota", "ResourceQuota", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ResourceQuotaList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaSpec) String() string { + if this == nil { + return "nil" + } + keysForHard := make([]string, 0, len(this.Hard)) + for k := range this.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + mapStringForHard := "ResourceList{" + for _, k := range keysForHard { + mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + } + mapStringForHard += "}" + s := strings.Join([]string{`&ResourceQuotaSpec{`, + `Hard:` + mapStringForHard + `,`, + `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, + `ScopeSelector:` + strings.Replace(this.ScopeSelector.String(), "ScopeSelector", "ScopeSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaStatus) String() string { + if this == nil { + return "nil" + } + keysForHard := make([]string, 0, len(this.Hard)) + for k := range this.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + mapStringForHard := "ResourceList{" + for _, k := range keysForHard { + mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + } + mapStringForHard += "}" + keysForUsed := make([]string, 0, len(this.Used)) + for k := range this.Used { + keysForUsed = append(keysForUsed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) + mapStringForUsed := "ResourceList{" + for _, k := range keysForUsed { + mapStringForUsed += fmt.Sprintf("%v: %v,", k, this.Used[ResourceName(k)]) + } + mapStringForUsed += "}" + s := strings.Join([]string{`&ResourceQuotaStatus{`, + `Hard:` + mapStringForHard + `,`, + `Used:` + mapStringForUsed + `,`, + `}`, + }, "") + return s +} +func (this *ResourceRequirements) String() string { + if this == nil { + return "nil" + } + keysForLimits := make([]string, 0, len(this.Limits)) + for k := range this.Limits { + keysForLimits = append(keysForLimits, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) + mapStringForLimits := "ResourceList{" + for _, k := range keysForLimits { + mapStringForLimits += fmt.Sprintf("%v: %v,", k, this.Limits[ResourceName(k)]) + } + mapStringForLimits += "}" + keysForRequests := make([]string, 0, len(this.Requests)) + for k := range this.Requests { + keysForRequests = append(keysForRequests, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) + mapStringForRequests := "ResourceList{" + for _, k := range keysForRequests { + mapStringForRequests += fmt.Sprintf("%v: %v,", k, this.Requests[ResourceName(k)]) + } + mapStringForRequests += "}" + s := strings.Join([]string{`&ResourceRequirements{`, + `Limits:` + mapStringForLimits + `,`, + `Requests:` + mapStringForRequests + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SELinuxOptions{`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Role:` + fmt.Sprintf("%v", this.Role) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Level:` + fmt.Sprintf("%v", this.Level) + `,`, + `}`, + }, "") + return s +} +func (this *ScaleIOPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScaleIOPersistentVolumeSource{`, + `Gateway:` + fmt.Sprintf("%v", this.Gateway) + `,`, + `System:` + fmt.Sprintf("%v", this.System) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "SecretReference", "SecretReference", 1) + `,`, + `SSLEnabled:` + fmt.Sprintf("%v", this.SSLEnabled) + `,`, + `ProtectionDomain:` + fmt.Sprintf("%v", this.ProtectionDomain) + `,`, + `StoragePool:` + fmt.Sprintf("%v", this.StoragePool) + `,`, + `StorageMode:` + fmt.Sprintf("%v", this.StorageMode) + `,`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *ScaleIOVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScaleIOVolumeSource{`, + `Gateway:` + fmt.Sprintf("%v", this.Gateway) + `,`, + `System:` + fmt.Sprintf("%v", this.System) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `SSLEnabled:` + fmt.Sprintf("%v", this.SSLEnabled) + `,`, + `ProtectionDomain:` + fmt.Sprintf("%v", this.ProtectionDomain) + `,`, + `StoragePool:` + fmt.Sprintf("%v", this.StoragePool) + `,`, + `StorageMode:` + fmt.Sprintf("%v", this.StorageMode) + `,`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *ScopeSelector) String() string { + if this == nil { + return "nil" + } + repeatedStringForMatchExpressions := "[]ScopedResourceSelectorRequirement{" + for _, f := range this.MatchExpressions { + repeatedStringForMatchExpressions += strings.Replace(strings.Replace(f.String(), "ScopedResourceSelectorRequirement", "ScopedResourceSelectorRequirement", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchExpressions += "}" + s := strings.Join([]string{`&ScopeSelector{`, + `MatchExpressions:` + repeatedStringForMatchExpressions + `,`, + `}`, + }, "") + return s +} +func (this *ScopedResourceSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScopedResourceSelectorRequirement{`, + `ScopeName:` + fmt.Sprintf("%v", this.ScopeName) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *Secret) String() string { + if this == nil { + return "nil" + } + keysForData := make([]string, 0, len(this.Data)) + for k := range this.Data { + keysForData = append(keysForData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + mapStringForData := "map[string][]byte{" + for _, k := range keysForData { + mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + } + mapStringForData += "}" + keysForStringData := make([]string, 0, len(this.StringData)) + for k := range this.StringData { + keysForStringData = append(keysForStringData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) + mapStringForStringData := "map[string]string{" + for _, k := range keysForStringData { + mapStringForStringData += fmt.Sprintf("%v: %v,", k, this.StringData[k]) + } + mapStringForStringData += "}" + s := strings.Join([]string{`&Secret{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + mapStringForData + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `StringData:` + mapStringForStringData + `,`, + `}`, + }, "") + return s +} +func (this *SecretEnvSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretEnvSource{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *SecretKeySelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretKeySelector{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *SecretList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Secret{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Secret", "Secret", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&SecretList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *SecretProjection) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]KeyToPath{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&SecretProjection{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *SecretReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `}`, + }, "") + return s +} +func (this *SecretVolumeSource) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]KeyToPath{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&SecretVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `Items:` + repeatedStringForItems + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContext) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecurityContext{`, + `Capabilities:` + strings.Replace(this.Capabilities.String(), "Capabilities", "Capabilities", 1) + `,`, + `Privileged:` + valueToStringGenerated(this.Privileged) + `,`, + `SELinuxOptions:` + strings.Replace(this.SELinuxOptions.String(), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, + `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, + `ReadOnlyRootFilesystem:` + valueToStringGenerated(this.ReadOnlyRootFilesystem) + `,`, + `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, + `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`, + `ProcMount:` + valueToStringGenerated(this.ProcMount) + `,`, + `WindowsOptions:` + strings.Replace(this.WindowsOptions.String(), "WindowsSecurityContextOptions", "WindowsSecurityContextOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SerializedReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SerializedReference{`, + `Reference:` + strings.Replace(strings.Replace(this.Reference.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Service) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Service{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ServiceSpec", "ServiceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ServiceStatus", "ServiceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccount) String() string { + if this == nil { + return "nil" + } + repeatedStringForSecrets := "[]ObjectReference{" + for _, f := range this.Secrets { + repeatedStringForSecrets += strings.Replace(strings.Replace(f.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + "," + } + repeatedStringForSecrets += "}" + repeatedStringForImagePullSecrets := "[]LocalObjectReference{" + for _, f := range this.ImagePullSecrets { + repeatedStringForImagePullSecrets += strings.Replace(strings.Replace(f.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + "," + } + repeatedStringForImagePullSecrets += "}" + s := strings.Join([]string{`&ServiceAccount{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Secrets:` + repeatedStringForSecrets + `,`, + `ImagePullSecrets:` + repeatedStringForImagePullSecrets + `,`, + `AutomountServiceAccountToken:` + valueToStringGenerated(this.AutomountServiceAccountToken) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ServiceAccount{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ServiceAccount", "ServiceAccount", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ServiceAccountList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountTokenProjection) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccountTokenProjection{`, + `Audience:` + fmt.Sprintf("%v", this.Audience) + `,`, + `ExpirationSeconds:` + valueToStringGenerated(this.ExpirationSeconds) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Service{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Service", "Service", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ServiceList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ServicePort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServicePort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `TargetPort:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TargetPort), "IntOrString", "intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `NodePort:` + fmt.Sprintf("%v", this.NodePort) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForPorts := "[]ServicePort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "ServicePort", "ServicePort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ServiceSpec{`, + `Ports:` + repeatedStringForPorts + `,`, + `Selector:` + mapStringForSelector + `,`, + `ClusterIP:` + fmt.Sprintf("%v", this.ClusterIP) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ExternalIPs:` + fmt.Sprintf("%v", this.ExternalIPs) + `,`, + `SessionAffinity:` + fmt.Sprintf("%v", this.SessionAffinity) + `,`, + `LoadBalancerIP:` + fmt.Sprintf("%v", this.LoadBalancerIP) + `,`, + `LoadBalancerSourceRanges:` + fmt.Sprintf("%v", this.LoadBalancerSourceRanges) + `,`, + `ExternalName:` + fmt.Sprintf("%v", this.ExternalName) + `,`, + `ExternalTrafficPolicy:` + fmt.Sprintf("%v", this.ExternalTrafficPolicy) + `,`, + `HealthCheckNodePort:` + fmt.Sprintf("%v", this.HealthCheckNodePort) + `,`, + `PublishNotReadyAddresses:` + fmt.Sprintf("%v", this.PublishNotReadyAddresses) + `,`, + `SessionAffinityConfig:` + strings.Replace(this.SessionAffinityConfig.String(), "SessionAffinityConfig", "SessionAffinityConfig", 1) + `,`, + `IPFamily:` + valueToStringGenerated(this.IPFamily) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceStatus{`, + `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SessionAffinityConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SessionAffinityConfig{`, + `ClientIP:` + strings.Replace(this.ClientIP.String(), "ClientIPConfig", "ClientIPConfig", 1) + `,`, + `}`, + }, "") + return s +} +func (this *StorageOSPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StorageOSPersistentVolumeSource{`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `VolumeNamespace:` + fmt.Sprintf("%v", this.VolumeNamespace) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "ObjectReference", "ObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *StorageOSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StorageOSVolumeSource{`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `VolumeNamespace:` + fmt.Sprintf("%v", this.VolumeNamespace) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `SecretRef:` + strings.Replace(this.SecretRef.String(), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Sysctl) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Sysctl{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `}`, + }, "") + return s +} +func (this *TCPSocketAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TCPSocketAction{`, + `Port:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `}`, + }, "") + return s +} +func (this *Taint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Taint{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, + `TimeAdded:` + strings.Replace(fmt.Sprintf("%v", this.TimeAdded), "Time", "v1.Time", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Toleration) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Toleration{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, + `TolerationSeconds:` + valueToStringGenerated(this.TolerationSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *TopologySelectorLabelRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TopologySelectorLabelRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *TopologySelectorTerm) String() string { + if this == nil { + return "nil" + } + repeatedStringForMatchLabelExpressions := "[]TopologySelectorLabelRequirement{" + for _, f := range this.MatchLabelExpressions { + repeatedStringForMatchLabelExpressions += strings.Replace(strings.Replace(f.String(), "TopologySelectorLabelRequirement", "TopologySelectorLabelRequirement", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchLabelExpressions += "}" + s := strings.Join([]string{`&TopologySelectorTerm{`, + `MatchLabelExpressions:` + repeatedStringForMatchLabelExpressions + `,`, + `}`, + }, "") + return s +} +func (this *TopologySpreadConstraint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TopologySpreadConstraint{`, + `MaxSkew:` + fmt.Sprintf("%v", this.MaxSkew) + `,`, + `TopologyKey:` + fmt.Sprintf("%v", this.TopologyKey) + `,`, + `WhenUnsatisfiable:` + fmt.Sprintf("%v", this.WhenUnsatisfiable) + `,`, + `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *TypedLocalObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TypedLocalObjectReference{`, + `APIGroup:` + valueToStringGenerated(this.APIGroup) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *Volume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Volume{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `VolumeSource:` + strings.Replace(strings.Replace(this.VolumeSource.String(), "VolumeSource", "VolumeSource", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeDevice) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeDevice{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DevicePath:` + fmt.Sprintf("%v", this.DevicePath) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeMount) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeMount{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `MountPath:` + fmt.Sprintf("%v", this.MountPath) + `,`, + `SubPath:` + fmt.Sprintf("%v", this.SubPath) + `,`, + `MountPropagation:` + valueToStringGenerated(this.MountPropagation) + `,`, + `SubPathExpr:` + fmt.Sprintf("%v", this.SubPathExpr) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeNodeAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeNodeAffinity{`, + `Required:` + strings.Replace(this.Required.String(), "NodeSelector", "NodeSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeProjection) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeProjection{`, + `Secret:` + strings.Replace(this.Secret.String(), "SecretProjection", "SecretProjection", 1) + `,`, + `DownwardAPI:` + strings.Replace(this.DownwardAPI.String(), "DownwardAPIProjection", "DownwardAPIProjection", 1) + `,`, + `ConfigMap:` + strings.Replace(this.ConfigMap.String(), "ConfigMapProjection", "ConfigMapProjection", 1) + `,`, + `ServiceAccountToken:` + strings.Replace(this.ServiceAccountToken.String(), "ServiceAccountTokenProjection", "ServiceAccountTokenProjection", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeSource{`, + `HostPath:` + strings.Replace(this.HostPath.String(), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, + `EmptyDir:` + strings.Replace(this.EmptyDir.String(), "EmptyDirVolumeSource", "EmptyDirVolumeSource", 1) + `,`, + `GCEPersistentDisk:` + strings.Replace(this.GCEPersistentDisk.String(), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, + `AWSElasticBlockStore:` + strings.Replace(this.AWSElasticBlockStore.String(), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, + `GitRepo:` + strings.Replace(this.GitRepo.String(), "GitRepoVolumeSource", "GitRepoVolumeSource", 1) + `,`, + `Secret:` + strings.Replace(this.Secret.String(), "SecretVolumeSource", "SecretVolumeSource", 1) + `,`, + `NFS:` + strings.Replace(this.NFS.String(), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, + `ISCSI:` + strings.Replace(this.ISCSI.String(), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, + `Glusterfs:` + strings.Replace(this.Glusterfs.String(), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, + `PersistentVolumeClaim:` + strings.Replace(this.PersistentVolumeClaim.String(), "PersistentVolumeClaimVolumeSource", "PersistentVolumeClaimVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(this.RBD.String(), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, + `FlexVolume:` + strings.Replace(this.FlexVolume.String(), "FlexVolumeSource", "FlexVolumeSource", 1) + `,`, + `Cinder:` + strings.Replace(this.Cinder.String(), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, + `CephFS:` + strings.Replace(this.CephFS.String(), "CephFSVolumeSource", "CephFSVolumeSource", 1) + `,`, + `Flocker:` + strings.Replace(this.Flocker.String(), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, + `DownwardAPI:` + strings.Replace(this.DownwardAPI.String(), "DownwardAPIVolumeSource", "DownwardAPIVolumeSource", 1) + `,`, + `FC:` + strings.Replace(this.FC.String(), "FCVolumeSource", "FCVolumeSource", 1) + `,`, + `AzureFile:` + strings.Replace(this.AzureFile.String(), "AzureFileVolumeSource", "AzureFileVolumeSource", 1) + `,`, + `ConfigMap:` + strings.Replace(this.ConfigMap.String(), "ConfigMapVolumeSource", "ConfigMapVolumeSource", 1) + `,`, + `VsphereVolume:` + strings.Replace(this.VsphereVolume.String(), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, + `Quobyte:` + strings.Replace(this.Quobyte.String(), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, + `AzureDisk:` + strings.Replace(this.AzureDisk.String(), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, + `PhotonPersistentDisk:` + strings.Replace(this.PhotonPersistentDisk.String(), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, + `PortworxVolume:` + strings.Replace(this.PortworxVolume.String(), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, + `ScaleIO:` + strings.Replace(this.ScaleIO.String(), "ScaleIOVolumeSource", "ScaleIOVolumeSource", 1) + `,`, + `Projected:` + strings.Replace(this.Projected.String(), "ProjectedVolumeSource", "ProjectedVolumeSource", 1) + `,`, + `StorageOS:` + strings.Replace(this.StorageOS.String(), "StorageOSVolumeSource", "StorageOSVolumeSource", 1) + `,`, + `CSI:` + strings.Replace(this.CSI.String(), "CSIVolumeSource", "CSIVolumeSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VsphereVirtualDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VsphereVirtualDiskVolumeSource{`, + `VolumePath:` + fmt.Sprintf("%v", this.VolumePath) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `StoragePolicyName:` + fmt.Sprintf("%v", this.StoragePolicyName) + `,`, + `StoragePolicyID:` + fmt.Sprintf("%v", this.StoragePolicyID) + `,`, + `}`, + }, "") + return s +} +func (this *WeightedPodAffinityTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WeightedPodAffinityTerm{`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `PodAffinityTerm:` + strings.Replace(strings.Replace(this.PodAffinityTerm.String(), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *WindowsSecurityContextOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WindowsSecurityContextOptions{`, + `GMSACredentialSpecName:` + valueToStringGenerated(this.GMSACredentialSpecName) + `,`, + `GMSACredentialSpec:` + valueToStringGenerated(this.GMSACredentialSpec) + `,`, + `RunAsUserName:` + valueToStringGenerated(this.RunAsUserName) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } -func (m *AWSElasticBlockStoreVolumeSource) Unmarshal(dAtA []byte) error { +func (m *AWSElasticBlockStoreVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AWSElasticBlockStoreVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AWSElasticBlockStoreVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Partition", wireType) + } + m.Partition = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Partition |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Affinity) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Affinity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Affinity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeAffinity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeAffinity == nil { + m.NodeAffinity = &NodeAffinity{} + } + if err := m.NodeAffinity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodAffinity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodAffinity == nil { + m.PodAffinity = &PodAffinity{} + } + if err := m.PodAffinity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodAntiAffinity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodAntiAffinity == nil { + m.PodAntiAffinity = &PodAntiAffinity{} + } + if err := m.PodAntiAffinity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AttachedVolume) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AttachedVolume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AttachedVolume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = UniqueVolumeName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DevicePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DevicePath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AvoidPods) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AvoidPods: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AvoidPods: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferAvoidPods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreferAvoidPods = append(m.PreferAvoidPods, PreferAvoidPodsEntry{}) + if err := m.PreferAvoidPods[len(m.PreferAvoidPods)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AzureDiskVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureDiskVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DiskName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DiskName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DataDiskURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DataDiskURI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CachingMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := AzureDataDiskCachingMode(dAtA[iNdEx:postIndex]) + m.CachingMode = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.FSType = &s + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ReadOnly = &b + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := AzureDataDiskKind(dAtA[iNdEx:postIndex]) + m.Kind = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AzureFilePersistentVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureFilePersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureFilePersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ShareName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretNamespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.SecretNamespace = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AzureFileVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureFileVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureFileVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ShareName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Binding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Binding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Binding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIPersistentVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIPersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Driver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeHandle", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeHandle = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.VolumeAttributes == nil { + m.VolumeAttributes = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.VolumeAttributes[mapkey] = mapvalue + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ControllerPublishSecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ControllerPublishSecretRef == nil { + m.ControllerPublishSecretRef = &SecretReference{} + } + if err := m.ControllerPublishSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeStageSecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeStageSecretRef == nil { + m.NodeStageSecretRef = &SecretReference{} + } + if err := m.NodeStageSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodePublishSecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodePublishSecretRef == nil { + m.NodePublishSecretRef = &SecretReference{} + } + if err := m.NodePublishSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ControllerExpandSecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ControllerExpandSecretRef == nil { + m.ControllerExpandSecretRef = &SecretReference{} + } + if err := m.ControllerExpandSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Driver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ReadOnly = &b + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.FSType = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.VolumeAttributes == nil { + m.VolumeAttributes = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.VolumeAttributes[mapkey] = mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodePublishSecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodePublishSecretRef == nil { + m.NodePublishSecretRef = &LocalObjectReference{} + } + if err := m.NodePublishSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Capabilities) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Capabilities: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Capabilities: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Add", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Add = append(m.Add, Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Drop", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Drop = append(m.Drop, Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CephFSPersistentVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CephFSPersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CephFSPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Monitors", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Monitors = append(m.Monitors, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &SecretReference{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CephFSVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CephFSVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CephFSVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Monitors", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Monitors = append(m.Monitors, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &LocalObjectReference{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CinderPersistentVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CinderPersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CinderPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &SecretReference{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CinderVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -17194,7 +29523,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17202,10 +29531,10 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AWSElasticBlockStoreVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: CinderVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AWSElasticBlockStoreVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CinderVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -17222,7 +29551,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17232,6 +29561,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -17251,7 +29583,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17261,6 +29593,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -17268,9 +29603,9 @@ iNdEx = postIndex case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Partition", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) } - m.Partition = 0 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17280,16 +29615,106 @@ } b := dAtA[iNdEx] iNdEx++ - m.Partition |= (int32(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } + m.ReadOnly = bool(v != 0) case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &LocalObjectReference{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClientIPConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClientIPConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClientIPConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) } - var v int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17299,12 +29724,12 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) + m.TimeoutSeconds = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -17314,6 +29739,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -17326,7 +29754,7 @@ } return nil } -func (m *Affinity) Unmarshal(dAtA []byte) error { +func (m *ComponentCondition) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -17341,7 +29769,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17349,17 +29777,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Affinity: wiretype end group for non-group") + return fmt.Errorf("proto: ComponentCondition: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Affinity: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ComponentCondition: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeAffinity", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17369,30 +29797,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.NodeAffinity == nil { - m.NodeAffinity = &NodeAffinity{} - } - if err := m.NodeAffinity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Type = ComponentConditionType(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodAffinity", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17402,30 +29829,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.PodAffinity == nil { - m.PodAffinity = &PodAffinity{} - } - if err := m.PodAffinity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Status = ConditionStatus(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodAntiAffinity", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17435,24 +29861,55 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.PodAntiAffinity == nil { - m.PodAntiAffinity = &PodAntiAffinity{} + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) } - if err := m.PodAntiAffinity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF } + m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -17463,6 +29920,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -17475,7 +29935,7 @@ } return nil } -func (m *AttachedVolume) Unmarshal(dAtA []byte) error { +func (m *ComponentStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -17490,7 +29950,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17498,17 +29958,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AttachedVolume: wiretype end group for non-group") + return fmt.Errorf("proto: ComponentStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AttachedVolume: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ComponentStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17518,26 +29978,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = UniqueVolumeName(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DevicePath", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17547,20 +30011,25 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.DevicePath = string(dAtA[iNdEx:postIndex]) + m.Conditions = append(m.Conditions, ComponentCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -17571,6 +30040,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -17583,7 +30055,7 @@ } return nil } -func (m *AvoidPods) Unmarshal(dAtA []byte) error { +func (m *ComponentStatusList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -17598,7 +30070,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17606,15 +30078,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AvoidPods: wiretype end group for non-group") + return fmt.Errorf("proto: ComponentStatusList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AvoidPods: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ComponentStatusList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PreferAvoidPods", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -17626,7 +30098,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -17635,11 +30107,47 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.PreferAvoidPods = append(m.PreferAvoidPods, PreferAvoidPodsEntry{}) - if err := m.PreferAvoidPods[len(m.PreferAvoidPods)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ComponentStatus{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -17652,6 +30160,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -17664,7 +30175,7 @@ } return nil } -func (m *AzureDiskVolumeSource) Unmarshal(dAtA []byte) error { +func (m *ConfigMap) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -17679,7 +30190,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17687,17 +30198,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AzureDiskVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMap: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AzureDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMap: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DiskName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17707,26 +30218,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.DiskName = string(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DataDiskURI", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17736,56 +30251,124 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.DataDiskURI = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CachingMode", wireType) + if m.Data == nil { + m.Data = make(map[string]string) } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := AzureDataDiskCachingMode(dAtA[iNdEx:postIndex]) - m.CachingMode = &s + m.Data[mapkey] = mapvalue iNdEx = postIndex - case 4: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BinaryData", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17795,72 +30378,119 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.FSType = &s - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.ReadOnly = &b - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + if m.BinaryData == nil { + m.BinaryData = make(map[string][]byte) } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var mapkey string + mapvalue := []byte{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapbyteLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapbyteLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intMapbyteLen := int(mapbyteLen) + if intMapbyteLen < 0 { + return ErrInvalidLengthGenerated + } + postbytesIndex := iNdEx + intMapbyteLen + if postbytesIndex < 0 { + return ErrInvalidLengthGenerated + } + if postbytesIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = make([]byte, mapbyteLen) + copy(mapvalue, dAtA[iNdEx:postbytesIndex]) + iNdEx = postbytesIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := AzureDataDiskKind(dAtA[iNdEx:postIndex]) - m.Kind = &s + m.BinaryData[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -17871,6 +30501,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -17883,7 +30516,7 @@ } return nil } -func (m *AzureFilePersistentVolumeSource) Unmarshal(dAtA []byte) error { +func (m *ConfigMapEnvSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -17898,7 +30531,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -17906,17 +30539,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AzureFilePersistentVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMapEnvSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AzureFilePersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMapEnvSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -17926,53 +30559,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SecretName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareName", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ShareName = string(dAtA[iNdEx:postIndex]) + if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -17984,42 +30592,13 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretNamespace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(dAtA[iNdEx:postIndex]) - m.SecretNamespace = &s - iNdEx = postIndex + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -18029,6 +30608,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -18041,7 +30623,7 @@ } return nil } -func (m *AzureFileVolumeSource) Unmarshal(dAtA []byte) error { +func (m *ConfigMapKeySelector) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18056,7 +30638,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18064,17 +30646,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AzureFileVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMapKeySelector: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AzureFileVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMapKeySelector: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18084,24 +30666,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.SecretName = string(dAtA[iNdEx:postIndex]) + if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -18113,7 +30699,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18123,14 +30709,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ShareName = string(dAtA[iNdEx:postIndex]) + m.Key = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -18142,12 +30731,13 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -18157,6 +30747,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -18169,7 +30762,7 @@ } return nil } -func (m *Binding) Unmarshal(dAtA []byte) error { +func (m *ConfigMapList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18184,7 +30777,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18192,15 +30785,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Binding: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMapList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Binding: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMapList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -18212,7 +30805,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -18221,16 +30814,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -18242,7 +30838,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -18251,10 +30847,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, ConfigMap{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -18267,6 +30867,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -18279,7 +30882,7 @@ } return nil } -func (m *CSIPersistentVolumeSource) Unmarshal(dAtA []byte) error { +func (m *ConfigMapNodeConfigSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18294,7 +30897,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18302,15 +30905,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CSIPersistentVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMapNodeConfigSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CSIPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMapNodeConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -18322,7 +30925,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18332,14 +30935,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Driver = string(dAtA[iNdEx:postIndex]) + m.Namespace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeHandle", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -18351,7 +30957,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18361,34 +30967,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeHandle = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) - case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -18400,7 +30989,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18410,132 +30999,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FSType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeAttributes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.VolumeAttributes == nil { - m.VolumeAttributes = make(map[string]string) - } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.VolumeAttributes[mapkey] = mapvalue - } else { - var mapvalue string - m.VolumeAttributes[mapkey] = mapvalue - } + m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ControllerPublishSecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18545,63 +31021,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ControllerPublishSecretRef == nil { - m.ControllerPublishSecretRef = &SecretReference{} - } - if err := m.ControllerPublishSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeStageSecretRef", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.NodeStageSecretRef == nil { - m.NodeStageSecretRef = &SecretReference{} - } - if err := m.NodeStageSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ResourceVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 8: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodePublishSecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field KubeletConfigKey", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18611,24 +31053,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.NodePublishSecretRef == nil { - m.NodePublishSecretRef = &SecretReference{} - } - if err := m.NodePublishSecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.KubeletConfigKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -18639,6 +31080,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -18651,7 +31095,7 @@ } return nil } -func (m *Capabilities) Unmarshal(dAtA []byte) error { +func (m *ConfigMapProjection) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18666,7 +31110,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18674,17 +31118,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Capabilities: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMapProjection: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Capabilities: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMapProjection: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Add", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18694,26 +31138,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Add = append(m.Add, Capability(dAtA[iNdEx:postIndex])) + if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Drop", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18723,21 +31171,47 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Drop = append(m.Drop, Capability(dAtA[iNdEx:postIndex])) + m.Items = append(m.Items, KeyToPath{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -18747,6 +31221,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -18759,7 +31236,7 @@ } return nil } -func (m *CephFSPersistentVolumeSource) Unmarshal(dAtA []byte) error { +func (m *ConfigMapVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18774,7 +31251,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -18782,17 +31259,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CephFSPersistentVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: ConfigMapVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CephFSPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConfigMapVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Monitors", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18802,55 +31279,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Monitors = append(m.Monitors, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Path = string(dAtA[iNdEx:postIndex]) + if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18860,55 +31312,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.User = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretFile", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.SecretFile = string(dAtA[iNdEx:postIndex]) + m.Items = append(m.Items, KeyToPath{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) } - var msglen int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18917,29 +31345,16 @@ return io.ErrUnexpectedEOF } b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SecretRef == nil { - m.SecretRef = &SecretReference{} - } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - iNdEx = postIndex - case 6: + m.DefaultMode = &v + case 4: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -18951,12 +31366,13 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -18966,6 +31382,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -18978,7 +31397,7 @@ } return nil } -func (m *CephFSVolumeSource) Unmarshal(dAtA []byte) error { +func (m *Container) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18993,7 +31412,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19001,15 +31420,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CephFSVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: Container: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CephFSVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Container: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Monitors", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19021,7 +31440,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19031,14 +31450,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Monitors = append(m.Monitors, string(dAtA[iNdEx:postIndex])) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19050,7 +31472,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19060,14 +31482,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Path = string(dAtA[iNdEx:postIndex]) + m.Image = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19079,7 +31504,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19089,14 +31514,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.User = string(dAtA[iNdEx:postIndex]) + m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretFile", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19108,7 +31536,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19118,16 +31546,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.SecretFile = string(dAtA[iNdEx:postIndex]) + m.Args = append(m.Args, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WorkingDir", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19137,30 +31568,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.SecretRef == nil { - m.SecretRef = &LocalObjectReference{} - } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.WorkingDir = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19170,67 +31600,31 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CinderPersistentVolumeSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + m.Ports = append(m.Ports, ContainerPort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CinderPersistentVolumeSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CinderPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19240,26 +31634,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeID = string(dAtA[iNdEx:postIndex]) + m.Env = append(m.Env, EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 2: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19269,26 +31668,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.FSType = string(dAtA[iNdEx:postIndex]) + if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeMounts", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19298,15 +31701,29 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) - case 4: + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeMounts = append(m.VolumeMounts, VolumeMount{}) + if err := m.VolumeMounts[len(m.VolumeMounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LivenessProbe", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19318,7 +31735,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -19327,71 +31744,60 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.SecretRef == nil { - m.SecretRef = &SecretReference{} + if m.LivenessProbe == nil { + m.LivenessProbe = &Probe{} } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LivenessProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadinessProbe", wireType) } - if skippy < 0 { - return ErrInvalidLengthGenerated + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + if msglen < 0 { + return ErrInvalidLengthGenerated } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CinderVolumeSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if m.ReadinessProbe == nil { + m.ReadinessProbe = &Probe{} } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CinderVolumeSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CinderVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + if err := m.ReadinessProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19401,24 +31807,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeID = string(dAtA[iNdEx:postIndex]) + if m.Lifecycle == nil { + m.Lifecycle = &Lifecycle{} + } + if err := m.Lifecycle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 2: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePath", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19430,7 +31843,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19440,16 +31853,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.FSType = string(dAtA[iNdEx:postIndex]) + m.TerminationMessagePath = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImagePullPolicy", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19459,15 +31875,27 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) - case 4: + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImagePullPolicy = PullPolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 15: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19479,7 +31907,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -19488,71 +31916,24 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.SecretRef == nil { - m.SecretRef = &LocalObjectReference{} + if m.SecurityContext == nil { + m.SecurityContext = &SecurityContext{} } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ClientIPConfig) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ClientIPConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ClientIPConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 16: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) } - var v int32 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19562,67 +31943,17 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - m.TimeoutSeconds = &v - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ComponentCondition) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ComponentCondition: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ComponentCondition: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + m.Stdin = bool(v != 0) + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StdinOnce", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19632,26 +31963,17 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = ComponentConditionType(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + m.StdinOnce = bool(v != 0) + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19661,26 +31983,17 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Status = ConditionStatus(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: + m.TTY = bool(v != 0) + case 19: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EnvFrom", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19690,24 +32003,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Message = string(dAtA[iNdEx:postIndex]) + m.EnvFrom = append(m.EnvFrom, EnvFromSource{}) + if err := m.EnvFrom[len(m.EnvFrom)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 4: + case 20: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePolicy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19719,74 +32037,27 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ComponentStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ComponentStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ComponentStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.TerminationMessagePolicy = TerminationMessagePolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 21: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VolumeDevices", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19798,7 +32069,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -19807,16 +32078,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.VolumeDevices = append(m.VolumeDevices, VolumeDevice{}) + if err := m.VolumeDevices[len(m.VolumeDevices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StartupProbe", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19828,7 +32103,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -19837,11 +32112,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Conditions = append(m.Conditions, ComponentCondition{}) - if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.StartupProbe == nil { + m.StartupProbe = &Probe{} + } + if err := m.StartupProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -19854,6 +32134,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -19866,7 +32149,7 @@ } return nil } -func (m *ComponentStatusList) Unmarshal(dAtA []byte) error { +func (m *ContainerImage) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -19881,7 +32164,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -19889,17 +32172,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ComponentStatusList: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerImage: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ComponentStatusList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerImage: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19909,27 +32192,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SizeBytes", wireType) } - var msglen int + m.SizeBytes = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19939,23 +32224,11 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + m.SizeBytes |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, ComponentStatus{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -19965,6 +32238,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -19977,7 +32253,7 @@ } return nil } -func (m *ConfigMap) Unmarshal(dAtA []byte) error { +func (m *ContainerPort) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -19992,7 +32268,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20000,17 +32276,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConfigMap: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerPort: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMap: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerPort: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20020,27 +32296,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostPort", wireType) } - var msglen int + m.HostPort = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20050,19 +32328,16 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + m.HostPort |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerPort", wireType) } - var keykey uint64 + m.ContainerPort = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20072,12 +32347,16 @@ } b := dAtA[iNdEx] iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift + m.ContainerPort |= int32(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapkey uint64 + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20087,76 +32366,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.Data == nil { - m.Data = make(map[string]string) + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Data[mapkey] = mapvalue - } else { - var mapvalue string - m.Data[mapkey] = mapvalue + if postIndex > l { + return io.ErrUnexpectedEOF } + m.Protocol = Protocol(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BinaryData", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostIP", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20166,108 +32398,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.BinaryData == nil { - m.BinaryData = make(map[string][]byte) - } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapbyteLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapbyteLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intMapbyteLen := int(mapbyteLen) - if intMapbyteLen < 0 { - return ErrInvalidLengthGenerated - } - postbytesIndex := iNdEx + intMapbyteLen - if postbytesIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := make([]byte, mapbyteLen) - copy(mapvalue, dAtA[iNdEx:postbytesIndex]) - iNdEx = postbytesIndex - m.BinaryData[mapkey] = mapvalue - } else { - var mapvalue []byte - m.BinaryData[mapkey] = mapvalue - } + m.HostIP = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -20278,6 +32425,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -20290,7 +32440,7 @@ } return nil } -func (m *ConfigMapEnvSource) Unmarshal(dAtA []byte) error { +func (m *ContainerState) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20305,7 +32455,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20313,15 +32463,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConfigMapEnvSource: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerState: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMapEnvSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerState: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Waiting", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20333,7 +32483,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -20342,87 +32492,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Waiting == nil { + m.Waiting = &ContainerStateWaiting{} + } + if err := m.Waiting.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.Optional = &b - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfigMapKeySelector) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ConfigMapKeySelector: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMapKeySelector: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Running", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20434,7 +32519,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -20443,18 +32528,24 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Running == nil { + m.Running = &ContainerStateRunning{} + } + if err := m.Running.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Terminated", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20464,42 +32555,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + if m.Terminated == nil { + m.Terminated = &ContainerStateTerminated{} } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if err := m.Terminated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - b := bool(v != 0) - m.Optional = &b + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -20509,6 +32586,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -20521,7 +32601,7 @@ } return nil } -func (m *ConfigMapList) Unmarshal(dAtA []byte) error { +func (m *ContainerStateRunning) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20536,7 +32616,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20544,15 +32624,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConfigMapList: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerStateRunning: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMapList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerStateRunning: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20564,7 +32644,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -20573,41 +32653,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, ConfigMap{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -20620,6 +32672,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -20632,7 +32687,7 @@ } return nil } -func (m *ConfigMapNodeConfigSource) Unmarshal(dAtA []byte) error { +func (m *ContainerStateTerminated) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20647,7 +32702,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20655,17 +32710,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConfigMapNodeConfigSource: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerStateTerminated: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMapNodeConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerStateTerminated: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) } - var stringLen uint64 + m.ExitCode = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20675,55 +32730,16 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.ExitCode |= int32(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Namespace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Signal", wireType) } - var stringLen uint64 + m.Signal = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20733,24 +32749,14 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.Signal |= int32(b&0x7F) << shift if b < 0x80 { break } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + } + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20762,7 +32768,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20772,14 +32778,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + m.Reason = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubeletConfigKey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20791,7 +32800,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20801,64 +32810,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.KubeletConfigKey = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ConfigMapProjection) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ConfigMapProjection: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMapProjection: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20870,7 +32832,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -20879,16 +32841,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20900,7 +32865,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -20909,19 +32874,21 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, KeyToPath{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20931,13 +32898,24 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - b := bool(v != 0) - m.Optional = &b + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -20947,6 +32925,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -20959,7 +32940,7 @@ } return nil } -func (m *ConfigMapVolumeSource) Unmarshal(dAtA []byte) error { +func (m *ContainerStateWaiting) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20974,7 +32955,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -20982,17 +32963,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ConfigMapVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerStateWaiting: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ConfigMapVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerStateWaiting: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21002,27 +32983,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.LocalObjectReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Reason = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21032,64 +33015,24 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, KeyToPath{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Message = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.DefaultMode = &v - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -21099,6 +33042,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -21111,7 +33057,7 @@ } return nil } -func (m *Container) Unmarshal(dAtA []byte) error { +func (m *ContainerStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21126,7 +33072,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -21134,10 +33080,10 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Container: wiretype end group for non-group") + return fmt.Errorf("proto: ContainerStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Container: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ContainerStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -21154,7 +33100,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -21164,6 +33110,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -21171,9 +33120,9 @@ iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21183,26 +33132,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Image = string(dAtA[iNdEx:postIndex]) + if err := m.State.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastTerminationState", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21212,26 +33165,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) + if err := m.LastTerminationState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Ready", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21241,26 +33198,17 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Args = append(m.Args, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex + m.Ready = bool(v != 0) case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WorkingDir", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RestartCount", wireType) } - var stringLen uint64 + m.RestartCount = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21270,26 +33218,16 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.RestartCount |= int32(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.WorkingDir = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21299,28 +33237,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Ports = append(m.Ports, ContainerPort{}) - if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Image = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ImageID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21330,28 +33269,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Env = append(m.Env, EnvVar{}) - if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ImageID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21361,27 +33301,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ContainerID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeMounts", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Started", wireType) } - var msglen int + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21391,94 +33333,71 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeMounts = append(m.VolumeMounts, VolumeMount{}) - if err := m.VolumeMounts[len(m.VolumeMounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + b := bool(v != 0) + m.Started = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LivenessProbe", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - if msglen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if m.LivenessProbe == nil { - m.LivenessProbe = &Probe{} - } - if err := m.LivenessProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadinessProbe", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DaemonEndpoint) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - postIndex := iNdEx + msglen - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - if m.ReadinessProbe == nil { - m.ReadinessProbe = &Probe{} - } - if err := m.ReadinessProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DaemonEndpoint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonEndpoint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) } - var msglen int + m.Port = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21488,86 +33407,67 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + m.Port |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Lifecycle == nil { - m.Lifecycle = &Lifecycle{} - } - if err := m.Lifecycle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex - case 13: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.TerminationMessagePath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ImagePullPolicy", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DownwardAPIProjection) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.ImagePullPolicy = PullPolicy(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 15: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DownwardAPIProjection: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DownwardAPIProjection: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21579,7 +33479,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -21588,61 +33488,75 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.SecurityContext == nil { - m.SecurityContext = &SecurityContext{} - } - if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, DownwardAPIVolumeFile{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 16: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - m.Stdin = bool(v != 0) - case 17: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StdinOnce", wireType) + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - m.StdinOnce = bool(v != 0) - case 18: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DownwardAPIVolumeFile) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - var v int + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DownwardAPIVolumeFile: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DownwardAPIVolumeFile: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21652,15 +33566,27 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.TTY = bool(v != 0) - case 19: + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EnvFrom", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FieldRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21672,7 +33598,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -21681,19 +33607,24 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.EnvFrom = append(m.EnvFrom, EnvFromSource{}) - if err := m.EnvFrom[len(m.EnvFrom)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.FieldRef == nil { + m.FieldRef = &ObjectFieldSelector{} + } + if err := m.FieldRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 20: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceFieldRef", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21703,26 +33634,33 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.TerminationMessagePolicy = TerminationMessagePolicy(dAtA[iNdEx:postIndex]) + if m.ResourceFieldRef == nil { + m.ResourceFieldRef = &ResourceFieldSelector{} + } + if err := m.ResourceFieldRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 21: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeDevices", wireType) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) } - var msglen int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21732,23 +33670,12 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.VolumeDevices = append(m.VolumeDevices, VolumeDevice{}) - if err := m.VolumeDevices[len(m.VolumeDevices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex + m.Mode = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -21758,6 +33685,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -21770,7 +33700,7 @@ } return nil } -func (m *ContainerImage) Unmarshal(dAtA []byte) error { +func (m *DownwardAPIVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21785,7 +33715,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -21793,17 +33723,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContainerImage: wiretype end group for non-group") + return fmt.Errorf("proto: DownwardAPIVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerImage: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: DownwardAPIVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21813,26 +33743,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Names = append(m.Names, string(dAtA[iNdEx:postIndex])) + m.Items = append(m.Items, DownwardAPIVolumeFile{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SizeBytes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) } - m.SizeBytes = 0 + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21842,11 +33777,12 @@ } b := dAtA[iNdEx] iNdEx++ - m.SizeBytes |= (int64(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } + m.DefaultMode = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -21856,6 +33792,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -21868,7 +33807,7 @@ } return nil } -func (m *ContainerPort) Unmarshal(dAtA []byte) error { +func (m *EmptyDirVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21883,7 +33822,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -21891,15 +33830,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContainerPort: wiretype end group for non-group") + return fmt.Errorf("proto: EmptyDirVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerPort: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EmptyDirVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Medium", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -21911,7 +33850,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -21921,54 +33860,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.Medium = StorageMedium(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostPort", wireType) - } - m.HostPort = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HostPort |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerPort", wireType) - } - m.ContainerPort = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ContainerPort |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SizeLimit", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21978,49 +33882,27 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Protocol = Protocol(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HostIP", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.HostIP = string(dAtA[iNdEx:postIndex]) + if m.SizeLimit == nil { + m.SizeLimit = &resource.Quantity{} + } + if err := m.SizeLimit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -22031,6 +33913,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -22043,7 +33928,7 @@ } return nil } -func (m *ContainerState) Unmarshal(dAtA []byte) error { +func (m *EndpointAddress) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22058,7 +33943,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22066,17 +33951,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContainerState: wiretype end group for non-group") + return fmt.Errorf("proto: EndpointAddress: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerState: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EndpointAddress: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Waiting", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IP", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22086,28 +33971,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.Waiting == nil { - m.Waiting = &ContainerStateWaiting{} - } - if err := m.Waiting.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.IP = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Running", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TargetRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22119,7 +34003,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -22128,21 +34012,24 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Running == nil { - m.Running = &ContainerStateRunning{} + if m.TargetRef == nil { + m.TargetRef = &ObjectReference{} } - if err := m.Running.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.TargetRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Terminated", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22152,80 +34039,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Terminated == nil { - m.Terminated = &ContainerStateTerminated{} - } - if err := m.Terminated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ContainerStateRunning) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ContainerStateRunning: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerStateRunning: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Hostname = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22235,21 +34071,24 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.NodeName = &s iNdEx = postIndex default: iNdEx = preIndex @@ -22260,6 +34099,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -22272,7 +34114,7 @@ } return nil } -func (m *ContainerStateTerminated) Unmarshal(dAtA []byte) error { +func (m *EndpointPort) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22287,7 +34129,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22295,17 +34137,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContainerStateTerminated: wiretype end group for non-group") + return fmt.Errorf("proto: EndpointPort: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerStateTerminated: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EndpointPort: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - m.ExitCode = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22315,16 +34157,29 @@ } b := dAtA[iNdEx] iNdEx++ - m.ExitCode |= (int32(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Signal", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) } - m.Signal = 0 + m.Port = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22334,14 +34189,14 @@ } b := dAtA[iNdEx] iNdEx++ - m.Signal |= (int32(b) & 0x7F) << shift + m.Port |= int32(b&0x7F) << shift if b < 0x80 { break } } case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -22353,7 +34208,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22363,43 +34218,70 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Reason = string(dAtA[iNdEx:postIndex]) + m.Protocol = Protocol(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointSubset) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointSubset: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointSubset: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22411,7 +34293,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -22420,16 +34302,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Addresses = append(m.Addresses, EndpointAddress{}) + if err := m.Addresses[len(m.Addresses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 6: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NotReadyAddresses", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22441,7 +34327,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -22450,18 +34336,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.NotReadyAddresses = append(m.NotReadyAddresses, EndpointAddress{}) + if err := m.NotReadyAddresses[len(m.NotReadyAddresses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22471,20 +34361,25 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ContainerID = string(dAtA[iNdEx:postIndex]) + m.Ports = append(m.Ports, EndpointPort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -22495,6 +34390,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -22507,7 +34405,7 @@ } return nil } -func (m *ContainerStateWaiting) Unmarshal(dAtA []byte) error { +func (m *Endpoints) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22522,7 +34420,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22530,17 +34428,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContainerStateWaiting: wiretype end group for non-group") + return fmt.Errorf("proto: Endpoints: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerStateWaiting: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Endpoints: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22550,26 +34448,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Reason = string(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Subsets", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22579,20 +34481,25 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Message = string(dAtA[iNdEx:postIndex]) + m.Subsets = append(m.Subsets, EndpointSubset{}) + if err := m.Subsets[len(m.Subsets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -22603,6 +34510,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -22615,7 +34525,7 @@ } return nil } -func (m *ContainerStatus) Unmarshal(dAtA []byte) error { +func (m *EndpointsList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22630,7 +34540,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22638,17 +34548,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ContainerStatus: wiretype end group for non-group") + return fmt.Errorf("proto: EndpointsList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ContainerStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EndpointsList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22658,24 +34568,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22687,7 +34601,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -22696,85 +34610,73 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.State.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, Endpoints{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastTerminationState", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - if msglen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if err := m.LastTerminationState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Ready", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EnvFromSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - m.Ready = bool(v != 0) - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RestartCount", wireType) + if iNdEx >= l { + return io.ErrUnexpectedEOF } - m.RestartCount = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.RestartCount |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - case 6: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EnvFromSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EnvFromSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prefix", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -22786,7 +34688,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22796,16 +34698,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Image = string(dAtA[iNdEx:postIndex]) + m.Prefix = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ImageID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapRef", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22815,26 +34720,33 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ImageID = string(dAtA[iNdEx:postIndex]) + if m.ConfigMapRef == nil { + m.ConfigMapRef = &ConfigMapEnvSource{} + } + if err := m.ConfigMapRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 8: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22844,20 +34756,27 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ContainerID = string(dAtA[iNdEx:postIndex]) + if m.SecretRef == nil { + m.SecretRef = &SecretEnvSource{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -22868,6 +34787,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -22880,7 +34802,7 @@ } return nil } -func (m *DaemonEndpoint) Unmarshal(dAtA []byte) error { +func (m *EnvVar) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22895,7 +34817,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -22903,17 +34825,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: DaemonEndpoint: wiretype end group for non-group") + return fmt.Errorf("proto: EnvVar: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: DaemonEndpoint: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EnvVar: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - m.Port = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22923,64 +34845,59 @@ } b := dAtA[iNdEx] iNdEx++ - m.Port |= (int32(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - if skippy < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DownwardAPIProjection) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) } - if iNdEx >= l { - return io.ErrUnexpectedEOF + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DownwardAPIProjection: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DownwardAPIProjection: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValueFrom", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22992,7 +34909,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23001,11 +34918,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, DownwardAPIVolumeFile{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ValueFrom == nil { + m.ValueFrom = &EnvVarSource{} + } + if err := m.ValueFrom.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -23018,6 +34940,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -23030,7 +34955,7 @@ } return nil } -func (m *DownwardAPIVolumeFile) Unmarshal(dAtA []byte) error { +func (m *EnvVarSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -23045,7 +34970,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23053,43 +34978,14 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: DownwardAPIVolumeFile: wiretype end group for non-group") + return fmt.Errorf("proto: EnvVarSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: DownwardAPIVolumeFile: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EnvVarSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Path = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field FieldRef", wireType) } var msglen int @@ -23102,7 +34998,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23111,6 +35007,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -23121,7 +35020,7 @@ return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ResourceFieldRef", wireType) } @@ -23135,7 +35034,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23144,6 +35043,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -23154,11 +35056,11 @@ return err } iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapKeyRef", wireType) } - var v int32 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23168,65 +35070,31 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.Mode = &v - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + if msglen < 0 { + return ErrInvalidLengthGenerated } - if skippy < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *DownwardAPIVolumeSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.ConfigMapKeyRef == nil { + m.ConfigMapKeyRef = &ConfigMapKeySelector{} } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if err := m.ConfigMapKeyRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: DownwardAPIVolumeSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: DownwardAPIVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecretKeyRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23238,7 +35106,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23247,34 +35115,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, DownwardAPIVolumeFile{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.SecretKeyRef == nil { + m.SecretKeyRef = &SecretKeySelector{} + } + if err := m.SecretKeyRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.DefaultMode = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -23284,6 +35137,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -23296,7 +35152,7 @@ } return nil } -func (m *EmptyDirVolumeSource) Unmarshal(dAtA []byte) error { +func (m *EphemeralContainer) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -23311,7 +35167,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23319,17 +35175,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: EmptyDirVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: EphemeralContainer: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: EmptyDirVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EphemeralContainer: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Medium", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EphemeralContainerCommon", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23339,26 +35195,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Medium = StorageMedium(dAtA[iNdEx:postIndex]) + if err := m.EphemeralContainerCommon.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SizeLimit", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TargetContainerName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23368,24 +35228,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.SizeLimit == nil { - m.SizeLimit = &k8s_io_apimachinery_pkg_api_resource.Quantity{} - } - if err := m.SizeLimit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TargetContainerName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -23396,6 +35255,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -23408,7 +35270,7 @@ } return nil } -func (m *EndpointAddress) Unmarshal(dAtA []byte) error { +func (m *EphemeralContainerCommon) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -23423,7 +35285,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23431,15 +35293,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: EndpointAddress: wiretype end group for non-group") + return fmt.Errorf("proto: EphemeralContainerCommon: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointAddress: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EphemeralContainerCommon: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IP", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23451,7 +35313,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23461,16 +35323,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.IP = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23480,28 +35345,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.TargetRef == nil { - m.TargetRef = &ObjectReference{} - } - if err := m.TargetRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Image = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23513,7 +35377,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23523,14 +35387,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Hostname = string(dAtA[iNdEx:postIndex]) + m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23542,7 +35409,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23552,65 +35419,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(dAtA[iNdEx:postIndex]) - m.NodeName = &s - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointPort) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EndpointPort: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointPort: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Args = append(m.Args, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WorkingDir", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23622,7 +35441,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -23632,16 +35451,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.WorkingDir = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) } - m.Port = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23651,16 +35473,31 @@ } b := dAtA[iNdEx] iNdEx++ - m.Port |= (int32(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - case 3: + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ports = append(m.Ports, ContainerPort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23670,74 +35507,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Protocol = Protocol(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointSubset) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + m.Env = append(m.Env, EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EndpointSubset: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointSubset: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23749,7 +35541,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23758,17 +35550,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Addresses = append(m.Addresses, EndpointAddress{}) - if err := m.Addresses[len(m.Addresses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field NotReadyAddresses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VolumeMounts", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23780,7 +35574,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23789,17 +35583,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.NotReadyAddresses = append(m.NotReadyAddresses, EndpointAddress{}) - if err := m.NotReadyAddresses[len(m.NotReadyAddresses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.VolumeMounts = append(m.VolumeMounts, VolumeMount{}) + if err := m.VolumeMounts[len(m.VolumeMounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LivenessProbe", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23811,7 +35608,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23820,67 +35617,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Ports = append(m.Ports, EndpointPort{}) - if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Endpoints) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.LivenessProbe == nil { + m.LivenessProbe = &Probe{} } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if err := m.LivenessProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Endpoints: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Endpoints: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ReadinessProbe", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23892,7 +35644,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23901,16 +35653,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ReadinessProbe == nil { + m.ReadinessProbe = &Probe{} + } + if err := m.ReadinessProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subsets", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23922,7 +35680,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -23931,69 +35689,56 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Subsets = append(m.Subsets, EndpointSubset{}) - if err := m.Subsets[len(m.Subsets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Lifecycle == nil { + m.Lifecycle = &Lifecycle{} + } + if err := m.Lifecycle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePath", wireType) } - if skippy < 0 { - return ErrInvalidLengthGenerated + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EndpointsList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EndpointsList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EndpointsList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.TerminationMessagePath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 14: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ImagePullPolicy", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24003,25 +35748,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ImagePullPolicy = PullPolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 15: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24033,7 +35780,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24042,69 +35789,24 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, Endpoints{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EnvFromSource) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.SecurityContext == nil { + m.SecurityContext = &SecurityContext{} } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if err := m.SecurityContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EnvFromSource: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EnvFromSource: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Prefix", wireType) + iNdEx = postIndex + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24114,26 +35816,37 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated + m.Stdin = bool(v != 0) + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StdinOnce", wireType) } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } } - m.Prefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapRef", wireType) + m.StdinOnce = bool(v != 0) + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) } - var msglen int + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24143,28 +35856,15 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConfigMapRef == nil { - m.ConfigMapRef = &ConfigMapEnvSource{} - } - if err := m.ConfigMapRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: + m.TTY = bool(v != 0) + case 19: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EnvFrom", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24176,7 +35876,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24185,69 +35885,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.SecretRef == nil { - m.SecretRef = &SecretEnvSource{} - } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.EnvFrom = append(m.EnvFrom, EnvFromSource{}) + if err := m.EnvFrom[len(m.EnvFrom)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EnvVar) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EnvVar: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EnvVar: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 20: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePolicy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -24259,7 +35910,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24269,16 +35920,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.TerminationMessagePolicy = TerminationMessagePolicy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 21: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VolumeDevices", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24288,24 +35942,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Value = string(dAtA[iNdEx:postIndex]) + m.VolumeDevices = append(m.VolumeDevices, VolumeDevice{}) + if err := m.VolumeDevices[len(m.VolumeDevices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ValueFrom", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StartupProbe", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24317,7 +35976,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24326,13 +35985,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.ValueFrom == nil { - m.ValueFrom = &EnvVarSource{} + if m.StartupProbe == nil { + m.StartupProbe = &Probe{} } - if err := m.ValueFrom.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.StartupProbe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -24345,6 +36007,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -24357,7 +36022,7 @@ } return nil } -func (m *EnvVarSource) Unmarshal(dAtA []byte) error { +func (m *EphemeralContainers) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24372,7 +36037,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24380,15 +36045,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: EnvVarSource: wiretype end group for non-group") + return fmt.Errorf("proto: EphemeralContainers: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: EnvVarSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: EphemeralContainers: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FieldRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24400,7 +36065,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24409,52 +36074,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.FieldRef == nil { - m.FieldRef = &ObjectFieldSelector{} - } - if err := m.FieldRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceFieldRef", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.ResourceFieldRef == nil { - m.ResourceFieldRef = &ResourceFieldSelector{} - } - if err := m.ResourceFieldRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapKeyRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EphemeralContainers", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24466,7 +36098,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24475,46 +36107,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConfigMapKeyRef == nil { - m.ConfigMapKeyRef = &ConfigMapKeySelector{} - } - if err := m.ConfigMapKeyRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretKeyRef", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.SecretKeyRef == nil { - m.SecretKeyRef = &SecretKeySelector{} - } - if err := m.SecretKeyRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.EphemeralContainers = append(m.EphemeralContainers, EphemeralContainer{}) + if err := m.EphemeralContainers[len(m.EphemeralContainers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -24527,6 +36127,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -24554,7 +36157,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24582,7 +36185,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24591,6 +36194,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24612,7 +36218,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24621,6 +36227,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24642,7 +36251,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24652,6 +36261,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24671,7 +36283,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24681,6 +36293,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24700,7 +36315,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24709,6 +36324,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24730,7 +36348,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24739,6 +36357,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24760,7 +36381,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24769,6 +36390,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24790,7 +36414,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Count |= (int32(b) & 0x7F) << shift + m.Count |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -24809,7 +36433,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24819,6 +36443,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24838,7 +36465,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24847,6 +36474,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24868,7 +36498,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24877,6 +36507,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24901,7 +36534,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24911,6 +36544,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24930,7 +36566,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -24939,6 +36575,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24963,7 +36602,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -24973,6 +36612,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -24992,7 +36634,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25002,6 +36644,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25016,6 +36661,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25043,7 +36691,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25071,7 +36719,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25080,6 +36728,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25101,7 +36752,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25110,6 +36761,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25127,6 +36781,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25154,7 +36811,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25182,7 +36839,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Count |= (int32(b) & 0x7F) << shift + m.Count |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -25201,7 +36858,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25210,6 +36867,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25231,7 +36891,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25241,6 +36901,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25255,6 +36918,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25282,7 +36948,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25310,7 +36976,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25320,6 +36986,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25339,7 +37008,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25349,6 +37018,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25363,6 +37035,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25390,7 +37065,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25418,7 +37093,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25428,6 +37103,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25442,6 +37120,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25469,7 +37150,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25497,7 +37178,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25507,6 +37188,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25526,7 +37210,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -25546,7 +37230,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25556,6 +37240,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25575,7 +37262,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25595,7 +37282,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25605,6 +37292,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25619,6 +37309,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25646,7 +37339,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25674,7 +37367,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25684,6 +37377,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25703,7 +37399,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25713,6 +37409,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25732,7 +37431,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25741,6 +37440,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25765,7 +37467,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25785,7 +37487,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -25794,54 +37496,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Options == nil { m.Options = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -25851,41 +37519,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Options[mapkey] = mapvalue - } else { - var mapvalue string - m.Options[mapkey] = mapvalue } + m.Options[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -25896,6 +37609,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -25923,7 +37639,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25951,7 +37667,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25961,6 +37677,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -25980,7 +37699,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -25990,6 +37709,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26009,7 +37731,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -26018,6 +37740,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26042,7 +37767,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -26062,7 +37787,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -26071,54 +37796,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Options == nil { m.Options = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -26128,41 +37819,203 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated + } + m.Options[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FlockerVolumeSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FlockerVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FlockerVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DatasetName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DatasetName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DatasetUUID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Options[mapkey] = mapvalue - } else { - var mapvalue string - m.Options[mapkey] = mapvalue + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF } + m.DatasetUUID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -26173,6 +38026,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -26185,7 +38041,7 @@ } return nil } -func (m *FlockerVolumeSource) Unmarshal(dAtA []byte) error { +func (m *GCEPersistentDiskVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -26200,7 +38056,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26208,15 +38064,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: FlockerVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: GCEPersistentDiskVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: FlockerVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GCEPersistentDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DatasetName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PDName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26228,7 +38084,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26238,14 +38094,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.DatasetName = string(dAtA[iNdEx:postIndex]) + m.PDName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DatasetUUID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26257,7 +38116,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26267,11 +38126,53 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.DatasetUUID = string(dAtA[iNdEx:postIndex]) + m.FSType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Partition", wireType) + } + m.Partition = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Partition |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -26281,6 +38182,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -26293,7 +38197,7 @@ } return nil } -func (m *GCEPersistentDiskVolumeSource) Unmarshal(dAtA []byte) error { +func (m *GitRepoVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -26308,7 +38212,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26316,15 +38220,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GCEPersistentDiskVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: GitRepoVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GCEPersistentDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GitRepoVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PDName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Repository", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26336,7 +38240,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26346,14 +38250,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.PDName = string(dAtA[iNdEx:postIndex]) + m.Repository = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26365,7 +38272,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26375,16 +38282,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.FSType = string(dAtA[iNdEx:postIndex]) + m.Revision = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Partition", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Directory", wireType) } - m.Partition = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -26394,31 +38304,24 @@ } b := dAtA[iNdEx] iNdEx++ - m.Partition |= (int32(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - m.ReadOnly = bool(v != 0) + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Directory = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -26428,6 +38331,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -26440,7 +38346,7 @@ } return nil } -func (m *GitRepoVolumeSource) Unmarshal(dAtA []byte) error { +func (m *GlusterfsPersistentVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -26455,7 +38361,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26463,15 +38369,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GitRepoVolumeSource: wiretype end group for non-group") + return fmt.Errorf("proto: GlusterfsPersistentVolumeSource: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GitRepoVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GlusterfsPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Repository", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EndpointsName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26483,7 +38389,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26493,14 +38399,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Repository = string(dAtA[iNdEx:postIndex]) + m.EndpointsName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26512,7 +38421,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26522,14 +38431,37 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Revision = string(dAtA[iNdEx:postIndex]) + m.Path = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Directory", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EndpointsNamespace", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -26541,7 +38473,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26551,10 +38483,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Directory = string(dAtA[iNdEx:postIndex]) + s := string(dAtA[iNdEx:postIndex]) + m.EndpointsNamespace = &s iNdEx = postIndex default: iNdEx = preIndex @@ -26565,6 +38501,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -26592,7 +38531,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26620,7 +38559,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26630,6 +38569,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26649,7 +38591,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26659,6 +38601,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26678,7 +38623,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -26693,6 +38638,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -26720,7 +38668,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26748,7 +38696,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26758,6 +38706,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26777,7 +38728,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -26786,6 +38737,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26807,7 +38761,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26817,6 +38771,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26836,7 +38793,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26846,6 +38803,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26865,7 +38825,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -26874,6 +38834,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26891,6 +38854,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -26918,7 +38884,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26946,7 +38912,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26956,6 +38922,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26975,7 +38944,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -26985,6 +38954,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -26999,6 +38971,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -27026,7 +39001,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27054,7 +39029,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27063,6 +39038,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27087,7 +39065,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27096,6 +39074,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27120,7 +39101,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27129,6 +39110,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27148,6 +39132,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -27175,7 +39162,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27203,7 +39190,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27213,6 +39200,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27232,7 +39222,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27242,6 +39232,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27256,6 +39249,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -27283,7 +39279,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27311,7 +39307,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27321,6 +39317,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27340,7 +39339,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27350,6 +39349,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27365,6 +39367,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -27392,7 +39397,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27420,7 +39425,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27430,6 +39435,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27449,7 +39457,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27459,6 +39467,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27478,7 +39489,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Lun |= (int32(b) & 0x7F) << shift + m.Lun |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -27497,7 +39508,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27507,6 +39518,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27526,7 +39540,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27536,6 +39550,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27555,7 +39572,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27575,7 +39592,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27585,6 +39602,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27604,7 +39624,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27624,7 +39644,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27633,6 +39653,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27657,7 +39680,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27677,7 +39700,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27687,6 +39710,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27702,6 +39728,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -27729,7 +39758,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27757,7 +39786,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27767,6 +39796,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27786,7 +39818,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27796,6 +39828,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27815,7 +39850,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Lun |= (int32(b) & 0x7F) << shift + m.Lun |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -27834,7 +39869,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27844,6 +39879,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27863,7 +39901,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27873,6 +39911,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27892,7 +39933,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27912,7 +39953,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -27922,6 +39963,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27941,7 +39985,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27961,7 +40005,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -27970,6 +40014,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -27994,7 +40041,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28014,7 +40061,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28024,6 +40071,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28039,6 +40089,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -28066,7 +40119,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28094,7 +40147,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28104,6 +40157,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28123,7 +40179,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28133,6 +40189,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28152,7 +40211,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -28167,6 +40226,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -28194,7 +40256,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28222,7 +40284,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28231,6 +40293,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28255,7 +40320,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28264,6 +40329,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28283,6 +40351,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -28310,7 +40381,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28338,7 +40409,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28347,6 +40418,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28368,7 +40442,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28377,6 +40451,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28393,6 +40470,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -28420,7 +40500,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28448,7 +40528,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -28458,6 +40538,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -28477,7 +40560,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28486,54 +40569,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Max == nil { m.Max = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -28543,46 +40592,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Max[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Max[ResourceName(mapkey)] = mapvalue } + m.Max[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -28598,7 +40689,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28607,54 +40698,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Min == nil { m.Min = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -28664,46 +40721,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Min[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Min[ResourceName(mapkey)] = mapvalue } + m.Min[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 4: if wireType != 2 { @@ -28719,7 +40818,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28728,54 +40827,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Default == nil { m.Default = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -28785,46 +40850,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Default[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Default[ResourceName(mapkey)] = mapvalue } + m.Default[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 5: if wireType != 2 { @@ -28840,7 +40947,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28849,54 +40956,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.DefaultRequest == nil { m.DefaultRequest = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -28906,46 +40979,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.DefaultRequest[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.DefaultRequest[ResourceName(mapkey)] = mapvalue } + m.DefaultRequest[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 6: if wireType != 2 { @@ -28961,7 +41076,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -28970,54 +41085,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.MaxLimitRequestRatio == nil { m.MaxLimitRequestRatio = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -29027,46 +41108,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.MaxLimitRequestRatio[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.MaxLimitRequestRatio[ResourceName(mapkey)] = mapvalue } + m.MaxLimitRequestRatio[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -29077,6 +41200,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29104,7 +41230,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29132,7 +41258,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29141,6 +41267,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29162,7 +41291,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29171,6 +41300,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29188,6 +41320,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29215,7 +41350,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29243,7 +41378,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29252,6 +41387,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29269,6 +41407,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29296,7 +41437,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29324,7 +41465,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29333,6 +41474,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29354,7 +41498,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29363,10 +41507,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, k8s_io_apimachinery_pkg_runtime.RawExtension{}) + m.Items = append(m.Items, runtime.RawExtension{}) if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -29380,6 +41527,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29407,7 +41557,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29435,7 +41585,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29445,6 +41595,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29464,7 +41617,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29474,6 +41627,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29488,6 +41644,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29515,7 +41674,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29543,7 +41702,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29552,6 +41711,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29569,6 +41731,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29596,7 +41761,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29624,7 +41789,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29634,6 +41799,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29648,6 +41816,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29675,7 +41846,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29703,7 +41874,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29713,11 +41884,47 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Path = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.FSType = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -29727,6 +41934,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29754,7 +41964,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29782,7 +41992,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29792,6 +42002,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29811,7 +42024,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29821,6 +42034,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29840,7 +42056,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29855,6 +42071,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -29882,7 +42101,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -29910,7 +42129,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29919,6 +42138,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29940,7 +42162,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29949,6 +42171,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29970,7 +42195,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -29979,6 +42204,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -29995,6 +42223,223 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespaceCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespaceCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamespaceCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = NamespaceConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30022,7 +42467,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30050,7 +42495,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30059,6 +42504,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30080,7 +42528,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30089,6 +42537,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30106,6 +42557,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30133,7 +42587,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30161,7 +42615,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30171,6 +42625,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30185,6 +42642,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30212,7 +42672,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30240,7 +42700,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30250,11 +42710,48 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Phase = NamespacePhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, NamespaceCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -30264,6 +42761,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30291,7 +42791,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30319,7 +42819,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30328,6 +42828,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30349,7 +42852,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30358,6 +42861,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30379,7 +42885,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30388,6 +42894,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30401,7 +42910,10 @@ if err != nil { return err } - if skippy < 0 { + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -30431,7 +42943,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30459,7 +42971,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30469,6 +42981,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30488,7 +43003,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30498,6 +43013,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30512,6 +43030,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30539,7 +43060,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30567,7 +43088,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30576,6 +43097,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30600,7 +43124,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30609,6 +43133,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30626,6 +43153,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30653,7 +43183,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30681,7 +43211,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30691,6 +43221,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30710,7 +43243,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30720,6 +43253,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30739,7 +43275,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30748,6 +43284,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30769,7 +43308,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30778,6 +43317,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30799,7 +43341,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30809,6 +43351,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30828,7 +43373,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30838,6 +43383,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30852,6 +43400,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30879,7 +43430,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30907,7 +43458,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30916,6 +43467,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -30935,6 +43489,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -30962,7 +43519,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -30990,7 +43547,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -30999,6 +43556,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31023,7 +43583,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31032,6 +43592,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31056,7 +43619,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31065,6 +43628,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31089,7 +43655,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31099,6 +43665,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31113,6 +43682,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31140,7 +43712,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31168,7 +43740,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31177,6 +43749,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31193,6 +43768,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31220,7 +43798,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31248,7 +43826,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31257,6 +43835,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31278,7 +43859,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31287,6 +43868,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31304,6 +43888,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31331,7 +43918,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31359,7 +43946,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31369,6 +43956,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31383,6 +43973,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31410,7 +44003,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31438,7 +44031,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31447,54 +44040,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Capacity == nil { m.Capacity = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -31504,46 +44063,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Capacity[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Capacity[ResourceName(mapkey)] = mapvalue } + m.Capacity[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -31554,6 +44155,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31581,7 +44185,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31609,7 +44213,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31618,6 +44222,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31635,6 +44242,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31662,7 +44272,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31690,7 +44300,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31700,6 +44310,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31719,7 +44332,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31729,6 +44342,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31748,7 +44364,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31758,6 +44374,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31772,6 +44391,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31799,7 +44421,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31827,7 +44449,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31836,6 +44458,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31858,7 +44483,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -31867,6 +44492,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31884,6 +44512,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -31911,7 +44542,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31939,7 +44570,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31949,6 +44580,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31968,7 +44602,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -31978,6 +44612,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -31997,7 +44634,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32007,6 +44644,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32026,7 +44666,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32046,7 +44686,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32055,6 +44695,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32077,7 +44720,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32086,6 +44729,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32096,6 +44742,38 @@ return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodCIDRs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PodCIDRs = append(m.PodCIDRs, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -32105,6 +44783,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -32132,7 +44813,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32160,7 +44841,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32169,54 +44850,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Capacity == nil { m.Capacity = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32226,46 +44873,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Capacity[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Capacity[ResourceName(mapkey)] = mapvalue } + m.Capacity[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -32281,7 +44970,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32290,54 +44979,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Allocatable == nil { m.Allocatable = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32347,46 +45002,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Allocatable[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Allocatable[ResourceName(mapkey)] = mapvalue } + m.Allocatable[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -32402,7 +45099,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32412,6 +45109,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32431,7 +45131,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32440,6 +45140,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32462,7 +45165,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32471,6 +45174,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32493,7 +45199,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32502,6 +45208,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32523,7 +45232,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32532,6 +45241,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32553,7 +45265,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32562,6 +45274,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32584,7 +45299,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32594,6 +45309,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32613,7 +45331,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32622,6 +45340,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32644,7 +45365,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -32653,6 +45374,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32672,6 +45396,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -32699,7 +45426,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32727,7 +45454,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32737,6 +45464,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32756,7 +45486,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32766,6 +45496,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32785,7 +45518,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32795,6 +45528,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32814,7 +45550,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32824,6 +45560,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32843,7 +45582,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32853,6 +45592,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32872,7 +45614,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32882,6 +45624,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32901,7 +45646,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32911,6 +45656,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32930,7 +45678,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32940,6 +45688,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32959,7 +45710,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32969,6 +45720,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -32988,7 +45742,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -32998,6 +45752,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33012,6 +45769,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -33039,7 +45799,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33067,7 +45827,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33077,6 +45837,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33096,7 +45859,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33106,6 +45869,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33120,6 +45886,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -33147,7 +45916,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33175,7 +45944,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33185,6 +45954,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33204,7 +45976,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33214,6 +45986,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33233,7 +46008,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33243,6 +46018,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33262,7 +46040,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33272,6 +46050,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33291,7 +46072,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33301,6 +46082,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33320,7 +46104,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33330,6 +46114,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33349,7 +46136,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33359,6 +46146,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33373,6 +46163,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -33400,7 +46193,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33428,7 +46221,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33437,6 +46230,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33458,7 +46254,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33467,6 +46263,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33488,7 +46287,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33497,6 +46296,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33513,6 +46315,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -33540,7 +46345,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33568,7 +46373,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33577,6 +46382,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33598,7 +46406,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33607,6 +46415,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33628,7 +46439,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33637,6 +46448,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33653,6 +46467,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -33680,7 +46497,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33708,7 +46525,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33718,6 +46535,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33737,7 +46557,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33747,6 +46567,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33766,7 +46589,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33775,6 +46598,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33796,7 +46622,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33805,6 +46631,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33826,7 +46655,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33836,6 +46665,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33855,7 +46687,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33865,6 +46697,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33879,6 +46714,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -33906,7 +46744,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -33934,7 +46772,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33943,6 +46781,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33964,7 +46805,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -33973,6 +46814,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -33990,6 +46834,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -34017,7 +46864,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34045,7 +46892,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34055,6 +46902,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34074,7 +46924,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34083,6 +46933,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34104,7 +46957,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34114,6 +46967,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34133,7 +46989,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34142,11 +46998,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -34166,7 +47025,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34176,17 +47035,53 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } s := string(dAtA[iNdEx:postIndex]) m.StorageClassName = &s iNdEx = postIndex - case 6: + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := PersistentVolumeMode(dAtA[iNdEx:postIndex]) + m.VolumeMode = &s + iNdEx = postIndex + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeMode", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DataSource", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -34196,21 +47091,27 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - s := PersistentVolumeMode(dAtA[iNdEx:postIndex]) - m.VolumeMode = &s + if m.DataSource == nil { + m.DataSource = &TypedLocalObjectReference{} + } + if err := m.DataSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -34221,6 +47122,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -34248,7 +47152,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34276,7 +47180,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34286,6 +47190,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34305,7 +47212,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34315,6 +47222,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34334,7 +47244,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34343,54 +47253,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Capacity == nil { m.Capacity = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -34400,46 +47276,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Capacity[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Capacity[ResourceName(mapkey)] = mapvalue } + m.Capacity[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 4: if wireType != 2 { @@ -34455,7 +47373,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34464,6 +47382,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34481,6 +47402,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -34508,7 +47432,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34536,7 +47460,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34546,6 +47470,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34565,7 +47492,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34580,6 +47507,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -34607,7 +47537,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34635,7 +47565,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34644,6 +47574,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34665,7 +47598,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34674,6 +47607,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34691,6 +47627,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -34718,7 +47657,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -34746,7 +47685,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34755,6 +47694,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34779,7 +47721,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34788,6 +47730,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34812,7 +47757,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34821,6 +47766,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34845,7 +47793,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34854,11 +47802,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Glusterfs == nil { - m.Glusterfs = &GlusterfsVolumeSource{} + m.Glusterfs = &GlusterfsPersistentVolumeSource{} } if err := m.Glusterfs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -34878,7 +47829,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34887,6 +47838,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34911,7 +47865,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34920,6 +47874,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34944,7 +47901,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34953,6 +47910,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -34977,7 +47937,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -34986,6 +47946,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35010,7 +47973,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35019,6 +47982,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35043,7 +48009,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35052,6 +48018,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35076,7 +48045,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35085,6 +48054,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35109,7 +48081,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35118,6 +48090,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35142,7 +48117,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35151,6 +48126,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35175,7 +48153,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35184,6 +48162,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35208,7 +48189,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35217,6 +48198,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35241,7 +48225,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35250,6 +48234,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35274,7 +48261,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35283,6 +48270,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35307,7 +48297,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35316,6 +48306,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35340,7 +48333,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35349,6 +48342,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35373,7 +48369,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35382,6 +48378,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35406,7 +48405,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35415,6 +48414,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35439,7 +48441,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35448,6 +48450,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35467,6 +48472,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -35494,7 +48502,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35522,7 +48530,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35531,54 +48539,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Capacity == nil { m.Capacity = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -35588,46 +48562,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Capacity[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Capacity[ResourceName(mapkey)] = mapvalue } + m.Capacity[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -35643,7 +48659,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35652,6 +48668,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35673,7 +48692,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35683,6 +48702,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35702,7 +48724,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35711,6 +48733,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35735,7 +48760,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35745,6 +48770,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35764,7 +48792,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35774,6 +48802,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35793,7 +48824,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35803,6 +48834,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35822,7 +48856,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35832,6 +48866,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35852,7 +48889,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -35861,6 +48898,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35880,6 +48920,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -35907,7 +48950,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35935,7 +48978,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35945,6 +48988,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35964,7 +49010,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -35974,6 +49020,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -35993,7 +49042,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36003,6 +49052,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36017,6 +49069,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36044,7 +49099,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36072,7 +49127,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36082,6 +49137,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36101,7 +49159,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36111,6 +49169,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36125,6 +49186,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36152,7 +49216,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36180,7 +49244,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36189,6 +49253,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36210,7 +49277,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36219,6 +49286,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36240,7 +49310,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36249,6 +49319,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36265,6 +49338,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36292,7 +49368,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36320,7 +49396,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36329,6 +49405,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36351,7 +49430,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36360,6 +49439,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36377,6 +49459,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36404,7 +49489,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36432,7 +49517,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36441,11 +49526,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.LabelSelector == nil { - m.LabelSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.LabelSelector = &v1.LabelSelector{} } if err := m.LabelSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -36465,7 +49553,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36475,6 +49563,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36494,7 +49585,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36504,6 +49595,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36518,6 +49612,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36545,7 +49642,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36573,7 +49670,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36582,6 +49679,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36604,7 +49704,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36613,6 +49713,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36630,6 +49733,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36657,7 +49763,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36685,7 +49791,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36705,7 +49811,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36725,7 +49831,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36745,7 +49851,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36765,7 +49871,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36775,6 +49881,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36789,6 +49898,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -36816,7 +49928,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36844,7 +49956,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36854,6 +49966,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36873,7 +49988,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36883,6 +49998,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36902,7 +50020,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36911,6 +50029,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36932,7 +50053,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -36941,6 +50062,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36962,7 +50086,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -36972,6 +50096,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -36991,7 +50118,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37001,6 +50128,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37015,6 +50145,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37042,7 +50175,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37070,7 +50203,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37080,6 +50213,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37099,7 +50235,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37109,6 +50245,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37128,7 +50267,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37137,6 +50276,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37154,6 +50296,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37181,7 +50326,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37209,7 +50354,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37219,6 +50364,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37238,7 +50386,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37248,6 +50396,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37263,6 +50414,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37290,7 +50444,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37318,7 +50472,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37338,7 +50492,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37358,7 +50512,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37378,7 +50532,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37398,7 +50552,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37408,6 +50562,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37427,7 +50584,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37437,6 +50594,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37451,6 +50611,94 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodIP) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodIP: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodIP: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IP = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37478,7 +50726,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37506,7 +50754,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37515,6 +50763,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37536,7 +50787,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37545,6 +50796,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37562,6 +50816,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37589,7 +50846,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37617,7 +50874,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37627,6 +50884,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37646,7 +50906,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37666,7 +50926,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37686,7 +50946,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -37706,7 +50966,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37715,11 +50975,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.SinceTime == nil { - m.SinceTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.SinceTime = &v1.Time{} } if err := m.SinceTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -37739,7 +51002,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37759,7 +51022,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -37779,7 +51042,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -37794,6 +51057,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37821,7 +51087,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37847,7 +51113,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -37864,7 +51130,7 @@ } b := dAtA[iNdEx] iNdEx++ - packedLen |= (int(b) & 0x7F) << shift + packedLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -37873,9 +51139,23 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.Ports) == 0 { + m.Ports = make([]int32, 0, elementCount) + } for iNdEx < postIndex { var v int32 for shift := uint(0); ; shift += 7 { @@ -37887,7 +51167,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -37906,6 +51186,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -37933,7 +51216,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37961,7 +51244,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -37971,6 +51254,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -37985,6 +51271,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -38012,7 +51301,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38040,7 +51329,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38050,6 +51339,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38064,6 +51356,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -38091,7 +51386,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38119,7 +51414,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38128,6 +51423,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38152,7 +51450,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38172,7 +51470,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38191,7 +51489,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38208,7 +51506,7 @@ } b := dAtA[iNdEx] iNdEx++ - packedLen |= (int(b) & 0x7F) << shift + packedLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38217,9 +51515,23 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.SupplementalGroups) == 0 { + m.SupplementalGroups = make([]int64, 0, elementCount) + } for iNdEx < postIndex { var v int64 for shift := uint(0); ; shift += 7 { @@ -38231,7 +51543,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38255,7 +51567,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38275,7 +51587,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38295,7 +51607,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38304,6 +51616,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38312,13 +51627,52 @@ return err } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowsOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.WindowsOptions == nil { + m.WindowsOptions = &WindowsSecurityContextOptions{} + } + if err := m.WindowsOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -38348,7 +51702,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38376,7 +51730,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38385,11 +51739,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.PodController == nil { - m.PodController = &k8s_io_apimachinery_pkg_apis_meta_v1.OwnerReference{} + m.PodController = &v1.OwnerReference{} } if err := m.PodController.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -38404,6 +51761,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -38431,7 +51791,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38459,7 +51819,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38468,6 +51828,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38490,7 +51853,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38499,6 +51862,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38521,7 +51887,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38531,6 +51897,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38550,7 +51919,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38570,7 +51939,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -38590,7 +51959,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38600,6 +51969,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38619,7 +51991,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38628,54 +52000,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.NodeSelector == nil { m.NodeSelector = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -38685,41 +52023,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.NodeSelector[mapkey] = mapvalue - } else { - var mapvalue string - m.NodeSelector[mapkey] = mapvalue } + m.NodeSelector[mapkey] = mapvalue iNdEx = postIndex case 8: if wireType != 2 { @@ -38735,7 +52118,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38745,6 +52128,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38764,7 +52150,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38774,6 +52160,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38793,7 +52182,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38803,6 +52192,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38822,7 +52214,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38842,7 +52234,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38862,7 +52254,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38882,7 +52274,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38891,6 +52283,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38915,7 +52310,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -38924,6 +52319,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38946,7 +52344,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38956,6 +52354,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -38975,7 +52376,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -38985,6 +52386,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39004,7 +52408,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39013,6 +52417,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39037,7 +52444,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39047,6 +52454,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39066,7 +52476,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39075,6 +52485,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39097,7 +52510,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39118,7 +52531,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39127,6 +52540,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39149,7 +52565,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39158,6 +52574,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39180,7 +52599,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39190,6 +52609,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39209,7 +52631,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -39229,7 +52651,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39238,6 +52660,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39262,7 +52687,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39283,7 +52708,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39292,6 +52717,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39300,6 +52728,290 @@ return err } iNdEx = postIndex + case 29: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeClassName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.RuntimeClassName = &s + iNdEx = postIndex + case 30: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EnableServiceLinks", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.EnableServiceLinks = &b + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreemptionPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := PreemptionPolicy(dAtA[iNdEx:postIndex]) + m.PreemptionPolicy = &s + iNdEx = postIndex + case 32: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Overhead", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Overhead == nil { + m.Overhead = make(ResourceList) + } + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Overhead[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 33: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TopologySpreadConstraints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TopologySpreadConstraints = append(m.TopologySpreadConstraints, TopologySpreadConstraint{}) + if err := m.TopologySpreadConstraints[len(m.TopologySpreadConstraints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 34: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EphemeralContainers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EphemeralContainers = append(m.EphemeralContainers, EphemeralContainer{}) + if err := m.EphemeralContainers[len(m.EphemeralContainers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -39309,6 +53021,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -39336,7 +53051,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39364,7 +53079,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39374,6 +53089,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39393,7 +53111,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39402,6 +53120,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39424,7 +53145,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39434,6 +53155,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39453,7 +53177,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39463,6 +53187,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39482,7 +53209,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39492,6 +53219,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39511,7 +53241,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39521,6 +53251,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39540,7 +53273,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39549,11 +53282,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.StartTime == nil { - m.StartTime = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + m.StartTime = &v1.Time{} } if err := m.StartTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -39573,7 +53309,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39582,6 +53318,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39604,7 +53343,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39614,6 +53353,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39633,7 +53375,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39642,6 +53384,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39664,7 +53409,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39674,11 +53419,82 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.NominatedNodeName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodIPs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PodIPs = append(m.PodIPs, PodIP{}) + if err := m.PodIPs[len(m.PodIPs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EphemeralContainerStatuses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EphemeralContainerStatuses = append(m.EphemeralContainerStatuses, ContainerStatus{}) + if err := m.EphemeralContainerStatuses[len(m.EphemeralContainerStatuses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -39688,6 +53504,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -39715,7 +53534,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39743,7 +53562,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39752,6 +53571,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39773,7 +53595,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39782,6 +53604,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39798,6 +53623,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -39825,7 +53653,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39853,7 +53681,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39862,6 +53690,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39883,7 +53714,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39892,6 +53723,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39908,6 +53742,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -39935,7 +53772,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -39963,7 +53800,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -39972,6 +53809,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -39993,7 +53833,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40002,6 +53842,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40019,6 +53862,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40046,7 +53892,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40074,7 +53920,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40083,6 +53929,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40104,7 +53953,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40113,6 +53962,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40129,6 +53981,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40156,7 +54011,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40184,7 +54039,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40194,6 +54049,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40213,7 +54071,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40223,6 +54081,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40242,7 +54103,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40257,6 +54118,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40284,7 +54148,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40312,7 +54176,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40322,6 +54186,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40337,6 +54204,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40364,7 +54234,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40392,7 +54262,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40401,6 +54271,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40422,7 +54295,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40431,6 +54304,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40452,7 +54328,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40462,6 +54338,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40481,7 +54360,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40491,6 +54370,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40505,6 +54387,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40532,7 +54417,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40560,7 +54445,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Weight |= (int32(b) & 0x7F) << shift + m.Weight |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40579,7 +54464,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40588,6 +54473,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40604,6 +54492,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40631,7 +54522,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40659,7 +54550,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40668,6 +54559,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40689,7 +54583,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.InitialDelaySeconds |= (int32(b) & 0x7F) << shift + m.InitialDelaySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40708,7 +54602,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.TimeoutSeconds |= (int32(b) & 0x7F) << shift + m.TimeoutSeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40727,7 +54621,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.PeriodSeconds |= (int32(b) & 0x7F) << shift + m.PeriodSeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40746,7 +54640,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.SuccessThreshold |= (int32(b) & 0x7F) << shift + m.SuccessThreshold |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40765,7 +54659,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.FailureThreshold |= (int32(b) & 0x7F) << shift + m.FailureThreshold |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40779,6 +54673,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40806,7 +54703,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40834,7 +54731,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -40843,6 +54740,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40865,7 +54765,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -40880,6 +54780,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -40907,7 +54810,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40935,7 +54838,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40945,6 +54848,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40964,7 +54870,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -40974,6 +54880,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -40993,7 +54902,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41001,7 +54910,39 @@ m.ReadOnly = bool(v != 0) case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -41013,7 +54954,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41023,14 +54964,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.User = string(dAtA[iNdEx:postIndex]) + m.Group = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Tenant", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -41042,7 +54986,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41052,10 +54996,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Group = string(dAtA[iNdEx:postIndex]) + m.Tenant = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -41066,6 +55013,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -41093,7 +55043,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41121,7 +55071,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41131,6 +55081,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41150,7 +55103,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41160,6 +55113,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41179,7 +55135,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41189,6 +55145,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41208,7 +55167,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41218,6 +55177,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41237,7 +55199,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41247,6 +55209,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41266,7 +55231,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41276,6 +55241,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41295,7 +55263,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41304,6 +55272,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41328,7 +55299,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41343,6 +55314,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -41370,7 +55344,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41398,7 +55372,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41408,6 +55382,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41427,7 +55404,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41437,6 +55414,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41456,7 +55436,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41466,6 +55446,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41485,7 +55468,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41495,6 +55478,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41514,7 +55500,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41524,6 +55510,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41543,7 +55532,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41553,6 +55542,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41572,7 +55564,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41581,6 +55573,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41605,7 +55600,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41620,6 +55615,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -41647,7 +55645,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41675,7 +55673,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41684,6 +55682,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41705,7 +55706,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41715,6 +55716,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41734,7 +55738,7 @@ } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41743,6 +55747,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41760,6 +55767,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -41787,7 +55797,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41815,7 +55825,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41824,6 +55834,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41845,7 +55858,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41854,6 +55867,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41875,7 +55891,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -41884,6 +55900,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41900,6 +55919,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -41927,7 +55949,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41955,7 +55977,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41965,6 +55987,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -41984,7 +56009,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -41994,6 +56019,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42013,7 +56041,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42022,6 +56050,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42043,7 +56074,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42053,6 +56084,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42072,7 +56106,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42082,6 +56116,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42096,6 +56133,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -42123,7 +56163,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42151,7 +56191,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42160,6 +56200,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42181,7 +56224,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42190,6 +56233,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42207,6 +56253,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -42234,7 +56283,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42262,7 +56311,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -42282,7 +56331,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42291,54 +56340,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Selector == nil { m.Selector = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -42348,41 +56363,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Selector[mapkey] = mapvalue - } else { - var mapvalue string - m.Selector[mapkey] = mapvalue } + m.Selector[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -42398,7 +56458,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42407,6 +56467,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42431,7 +56494,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -42445,6 +56508,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -42472,7 +56538,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42500,7 +56566,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -42519,7 +56585,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.FullyLabeledReplicas |= (int32(b) & 0x7F) << shift + m.FullyLabeledReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -42538,7 +56604,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -42557,7 +56623,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -42576,7 +56642,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -42595,7 +56661,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42604,6 +56670,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42621,6 +56690,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -42648,7 +56720,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42676,7 +56748,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42686,6 +56758,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42705,7 +56780,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42715,6 +56790,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42734,7 +56812,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42743,6 +56821,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42759,6 +56840,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -42786,7 +56870,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42814,7 +56898,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42823,6 +56907,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42844,7 +56931,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42853,6 +56940,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42874,7 +56964,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42883,6 +56973,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42899,6 +56992,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -42926,7 +57022,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -42954,7 +57050,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42963,6 +57059,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -42984,7 +57083,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -42993,6 +57092,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43010,6 +57112,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -43037,7 +57142,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43065,7 +57170,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -43074,54 +57179,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Hard == nil { m.Hard = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -43131,46 +57202,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Hard[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Hard[ResourceName(mapkey)] = mapvalue } + m.Hard[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -43186,7 +57299,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43196,6 +57309,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43215,7 +57331,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -43224,6 +57340,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43243,6 +57362,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -43270,7 +57392,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43298,7 +57420,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -43307,54 +57429,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Hard == nil { m.Hard = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -43364,46 +57452,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Hard[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Hard[ResourceName(mapkey)] = mapvalue } + m.Hard[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -43419,7 +57549,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -43428,54 +57558,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Used == nil { m.Used = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -43485,46 +57581,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Used[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Used[ResourceName(mapkey)] = mapvalue } + m.Used[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -43535,6 +57673,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -43562,7 +57703,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43590,7 +57731,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -43599,54 +57740,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Limits == nil { m.Limits = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -43656,46 +57763,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated + iNdEx += skippy } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Limits[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Limits[ResourceName(mapkey)] = mapvalue } + m.Limits[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -43711,7 +57860,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -43720,54 +57869,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Requests == nil { m.Requests = make(ResourceList) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -43777,46 +57892,88 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Requests[ResourceName(mapkey)] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_api_resource.Quantity - m.Requests[ResourceName(mapkey)] = mapvalue } + m.Requests[ResourceName(mapkey)] = *mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -43827,6 +57984,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -43854,7 +58014,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43882,7 +58042,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43892,6 +58052,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43911,7 +58074,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43921,6 +58084,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43940,7 +58106,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43950,6 +58116,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43969,7 +58138,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -43979,6 +58148,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -43993,6 +58165,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -44020,7 +58195,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44048,7 +58223,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44058,6 +58233,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44077,7 +58255,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44087,6 +58265,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44106,7 +58287,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44115,6 +58296,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44139,7 +58323,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44159,7 +58343,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44169,6 +58353,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44188,7 +58375,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44198,6 +58385,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44217,7 +58407,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44227,6 +58417,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44246,7 +58439,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44256,6 +58449,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44275,7 +58471,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44285,6 +58481,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44304,7 +58503,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44319,6 +58518,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -44346,7 +58548,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44374,7 +58576,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44384,6 +58586,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44403,7 +58608,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44413,6 +58618,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44432,7 +58640,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44441,6 +58649,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44465,7 +58676,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44485,7 +58696,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44495,6 +58706,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44514,7 +58728,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44524,6 +58738,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44543,7 +58760,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44553,6 +58770,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44572,7 +58792,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44582,6 +58802,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44601,7 +58824,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44611,6 +58834,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44630,7 +58856,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44645,6 +58871,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -44672,7 +58901,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44700,7 +58929,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44709,6 +58938,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44726,6 +58958,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -44753,7 +58988,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44781,7 +59016,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44791,6 +59026,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44810,7 +59048,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44820,6 +59058,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44839,7 +59080,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44849,6 +59090,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44863,6 +59107,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -44890,7 +59137,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -44918,7 +59165,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44927,6 +59174,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -44948,7 +59198,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -44957,54 +59207,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Data == nil { m.Data = make(map[string][]byte) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := []byte{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -45014,42 +59230,87 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapbyteLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapbyteLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapbyteLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapbyteLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intMapbyteLen := int(mapbyteLen) + if intMapbyteLen < 0 { + return ErrInvalidLengthGenerated + } + postbytesIndex := iNdEx + intMapbyteLen + if postbytesIndex < 0 { + return ErrInvalidLengthGenerated + } + if postbytesIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = make([]byte, mapbyteLen) + copy(mapvalue, dAtA[iNdEx:postbytesIndex]) + iNdEx = postbytesIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intMapbyteLen := int(mapbyteLen) - if intMapbyteLen < 0 { - return ErrInvalidLengthGenerated - } - postbytesIndex := iNdEx + intMapbyteLen - if postbytesIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := make([]byte, mapbyteLen) - copy(mapvalue, dAtA[iNdEx:postbytesIndex]) - iNdEx = postbytesIndex - m.Data[mapkey] = mapvalue - } else { - var mapvalue []byte - m.Data[mapkey] = mapvalue } + m.Data[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -45065,7 +59326,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45075,6 +59336,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45094,7 +59358,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45103,54 +59367,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.StringData == nil { m.StringData = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -45160,41 +59390,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.StringData[mapkey] = mapvalue - } else { - var mapvalue string - m.StringData[mapkey] = mapvalue } + m.StringData[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -45205,6 +59480,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45232,7 +59510,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45260,7 +59538,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45269,6 +59547,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45290,7 +59571,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45306,6 +59587,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45333,7 +59617,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45361,7 +59645,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45370,6 +59654,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45391,7 +59678,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45401,6 +59688,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45420,7 +59710,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45436,6 +59726,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45463,7 +59756,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45491,7 +59784,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45500,6 +59793,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45521,7 +59817,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45530,6 +59826,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45547,6 +59846,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45574,7 +59876,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45602,7 +59904,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45611,6 +59913,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45632,7 +59937,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45641,6 +59946,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45663,7 +59971,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45679,6 +59987,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45706,7 +60017,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45734,7 +60045,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45744,6 +60055,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45763,7 +60077,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45773,6 +60087,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45787,6 +60104,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45814,7 +60134,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45842,7 +60162,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45852,6 +60172,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45871,7 +60194,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45880,6 +60203,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -45902,7 +60228,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -45922,7 +60248,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -45938,6 +60264,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -45965,7 +60294,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -45993,7 +60322,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46002,6 +60331,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46026,7 +60358,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46047,7 +60379,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46056,6 +60388,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46080,7 +60415,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -46100,7 +60435,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46121,7 +60456,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46142,7 +60477,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46163,12 +60498,81 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } } m.RunAsGroup = &v + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProcMount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ProcMountType(dAtA[iNdEx:postIndex]) + m.ProcMount = &s + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WindowsOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.WindowsOptions == nil { + m.WindowsOptions = &WindowsSecurityContextOptions{} + } + if err := m.WindowsOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -46178,6 +60582,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46205,7 +60612,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46233,7 +60640,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46242,6 +60649,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46258,6 +60668,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46285,7 +60698,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46313,7 +60726,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46322,6 +60735,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46343,7 +60759,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46352,6 +60768,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46373,7 +60792,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46382,6 +60801,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46398,6 +60820,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46425,7 +60850,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46453,7 +60878,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46462,6 +60887,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46483,7 +60911,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46492,6 +60920,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46514,7 +60945,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46523,6 +60954,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46545,7 +60979,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46561,6 +60995,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46588,7 +61025,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46616,7 +61053,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46625,6 +61062,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46646,7 +61086,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46655,6 +61095,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46672,6 +61115,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46699,7 +61145,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46727,7 +61173,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46737,6 +61183,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46756,7 +61205,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -46776,7 +61225,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46786,6 +61235,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46800,6 +61252,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46827,7 +61282,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46855,7 +61310,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46864,6 +61319,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46885,7 +61343,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -46894,6 +61352,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46911,6 +61372,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -46938,7 +61402,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46966,7 +61430,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -46976,6 +61440,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -46995,7 +61462,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47005,6 +61472,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47024,7 +61494,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Port |= (int32(b) & 0x7F) << shift + m.Port |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -47043,7 +61513,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47052,6 +61522,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47073,7 +61546,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NodePort |= (int32(b) & 0x7F) << shift + m.NodePort |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -47087,6 +61560,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -47114,7 +61590,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47142,7 +61618,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47152,6 +61628,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47166,6 +61645,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -47193,7 +61675,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47221,7 +61703,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47230,6 +61712,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47252,63 +61737,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + return ErrInvalidLengthGenerated } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Selector == nil { m.Selector = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -47318,41 +61769,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Selector[mapkey] = mapvalue - } else { - var mapvalue string - m.Selector[mapkey] = mapvalue } + m.Selector[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -47368,7 +61864,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47378,6 +61874,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47397,7 +61896,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47407,6 +61906,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47426,7 +61928,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47436,6 +61938,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47455,7 +61960,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47465,6 +61970,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47484,7 +61992,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47494,6 +62002,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47513,7 +62024,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47523,6 +62034,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47542,7 +62056,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47552,6 +62066,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47571,7 +62088,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47581,6 +62098,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47600,7 +62120,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.HealthCheckNodePort |= (int32(b) & 0x7F) << shift + m.HealthCheckNodePort |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -47619,7 +62139,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47639,7 +62159,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47648,6 +62168,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47658,6 +62181,39 @@ return err } iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IPFamily", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := IPFamily(dAtA[iNdEx:postIndex]) + m.IPFamily = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -47667,6 +62223,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -47694,7 +62253,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47722,7 +62281,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47731,6 +62290,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47747,6 +62309,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -47774,7 +62339,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47802,7 +62367,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47811,6 +62376,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47830,6 +62398,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -47857,7 +62428,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47885,7 +62456,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47895,6 +62466,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47914,7 +62488,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47924,6 +62498,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47943,7 +62520,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -47953,6 +62530,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -47972,7 +62552,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -47992,7 +62572,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -48001,6 +62581,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48020,6 +62603,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48047,7 +62633,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48075,7 +62661,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48085,6 +62671,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48104,7 +62693,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48114,6 +62703,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48133,7 +62725,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48143,6 +62735,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48162,7 +62757,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -48182,7 +62777,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -48191,6 +62786,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48210,6 +62808,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48237,7 +62838,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48265,7 +62866,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48275,6 +62876,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48294,7 +62898,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48304,6 +62908,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48318,6 +62925,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48345,7 +62955,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48373,7 +62983,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -48382,6 +62992,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48403,7 +63016,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48413,6 +63026,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48427,6 +63043,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48454,7 +63073,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48482,7 +63101,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48492,6 +63111,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48511,7 +63133,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48521,6 +63143,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -48540,7 +63165,361 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Effect = TaintEffect(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeAdded", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TimeAdded == nil { + m.TimeAdded = &v1.Time{} + } + if err := m.TimeAdded.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Toleration) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Toleration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Toleration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = TolerationOperator(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Effect", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Effect = TaintEffect(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TolerationSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TolerationSeconds = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TopologySelectorLabelRequirement) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TopologySelectorLabelRequirement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TopologySelectorLabelRequirement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48549,15 +63528,71 @@ if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Values = append(m.Values, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TopologySelectorTerm) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Effect = TaintEffect(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TopologySelectorTerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TopologySelectorTerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeAdded", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchLabelExpressions", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -48569,7 +63604,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -48578,13 +63613,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.TimeAdded == nil { - m.TimeAdded = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} - } - if err := m.TimeAdded.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.MatchLabelExpressions = append(m.MatchLabelExpressions, TopologySelectorLabelRequirement{}) + if err := m.MatchLabelExpressions[len(m.MatchLabelExpressions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -48597,6 +63633,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48609,7 +63648,7 @@ } return nil } -func (m *Toleration) Unmarshal(dAtA []byte) error { +func (m *TopologySpreadConstraint) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -48624,7 +63663,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48632,17 +63671,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Toleration: wiretype end group for non-group") + return fmt.Errorf("proto: TopologySpreadConstraint: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Toleration: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: TopologySpreadConstraint: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSkew", wireType) } - var stringLen uint64 + m.MaxSkew = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -48652,24 +63691,14 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.MaxSkew |= int32(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TopologyKey", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -48681,7 +63710,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48691,14 +63720,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Operator = TolerationOperator(dAtA[iNdEx:postIndex]) + m.TopologyKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WhenUnsatisfiable", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -48710,7 +63742,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48720,16 +63752,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Value = string(dAtA[iNdEx:postIndex]) + m.WhenUnsatisfiable = UnsatisfiableConstraintAction(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Effect", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -48739,41 +63774,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Effect = TaintEffect(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TolerationSeconds", wireType) + if m.LabelSelector == nil { + m.LabelSelector = &v1.LabelSelector{} } - var v int64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int64(b) & 0x7F) << shift - if b < 0x80 { - break - } + if err := m.LabelSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.TolerationSeconds = &v + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -48783,6 +63805,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48795,7 +63820,7 @@ } return nil } -func (m *TopologySelectorLabelRequirement) Unmarshal(dAtA []byte) error { +func (m *TypedLocalObjectReference) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -48810,7 +63835,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48818,15 +63843,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: TopologySelectorLabelRequirement: wiretype end group for non-group") + return fmt.Errorf("proto: TypedLocalObjectReference: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: TopologySelectorLabelRequirement: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: TypedLocalObjectReference: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field APIGroup", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -48838,7 +63863,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48848,14 +63873,18 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Key = string(dAtA[iNdEx:postIndex]) + s := string(dAtA[iNdEx:postIndex]) + m.APIGroup = &s iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -48867,7 +63896,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -48877,66 +63906,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Values = append(m.Values, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TopologySelectorTerm) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TopologySelectorTerm: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TopologySelectorTerm: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchLabelExpressions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -48946,22 +63928,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.MatchLabelExpressions = append(m.MatchLabelExpressions, TopologySelectorLabelRequirement{}) - if err := m.MatchLabelExpressions[len(m.MatchLabelExpressions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -48972,6 +63955,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -48999,7 +63985,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49027,7 +64013,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49037,6 +64023,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49056,7 +64045,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49065,6 +64054,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49081,6 +64073,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -49108,7 +64103,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49136,7 +64131,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49146,6 +64141,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49165,7 +64163,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49175,6 +64173,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49189,6 +64190,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -49216,7 +64220,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49244,7 +64248,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49254,6 +64258,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49273,7 +64280,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49293,7 +64300,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49303,6 +64310,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49322,7 +64332,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49332,6 +64342,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49351,7 +64364,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49361,12 +64374,47 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } s := MountPropagationMode(dAtA[iNdEx:postIndex]) m.MountPropagation = &s iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubPathExpr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubPathExpr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -49376,6 +64424,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -49403,7 +64454,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49431,7 +64482,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49440,6 +64491,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49459,6 +64513,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -49486,7 +64543,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49514,7 +64571,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49523,6 +64580,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49547,7 +64607,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49556,6 +64616,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49580,7 +64643,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49589,6 +64652,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49613,7 +64679,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49622,6 +64688,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49641,6 +64710,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -49668,7 +64740,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -49696,7 +64768,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49705,6 +64777,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49729,7 +64804,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49738,6 +64813,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49762,7 +64840,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49771,6 +64849,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49795,7 +64876,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49804,6 +64885,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49828,7 +64912,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49837,6 +64921,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49861,7 +64948,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49870,6 +64957,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49894,7 +64984,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49903,6 +64993,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49927,7 +65020,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49936,6 +65029,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49960,7 +65056,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -49969,6 +65065,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -49993,7 +65092,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50002,6 +65101,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50026,7 +65128,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50035,6 +65137,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50059,7 +65164,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50068,6 +65173,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50092,7 +65200,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50101,6 +65209,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50125,7 +65236,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50134,6 +65245,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50158,7 +65272,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50167,6 +65281,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50191,7 +65308,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50200,6 +65317,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50224,7 +65344,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50233,6 +65353,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50257,7 +65380,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50266,6 +65389,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50290,7 +65416,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50299,6 +65425,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50323,7 +65452,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50332,6 +65461,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50356,7 +65488,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50365,6 +65497,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50389,7 +65524,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50398,6 +65533,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50422,7 +65560,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50431,6 +65569,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50455,7 +65596,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50464,6 +65605,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50488,7 +65632,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50497,6 +65641,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50521,7 +65668,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50530,6 +65677,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50554,7 +65704,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50563,6 +65713,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50573,6 +65726,42 @@ return err } iNdEx = postIndex + case 28: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CSI", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CSI == nil { + m.CSI = &CSIVolumeSource{} + } + if err := m.CSI.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -50582,6 +65771,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -50609,7 +65801,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -50637,7 +65829,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -50647,6 +65839,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50666,7 +65861,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -50676,6 +65871,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50695,7 +65893,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -50705,6 +65903,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50724,7 +65925,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -50734,6 +65935,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50748,6 +65952,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -50775,7 +65982,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -50803,7 +66010,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Weight |= (int32(b) & 0x7F) << shift + m.Weight |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -50822,7 +66029,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -50831,6 +66038,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -50847,6 +66057,161 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WindowsSecurityContextOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WindowsSecurityContextOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WindowsSecurityContextOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GMSACredentialSpecName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.GMSACredentialSpecName = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GMSACredentialSpec", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.GMSACredentialSpec = &s + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsUserName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.RunAsUserName = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -50913,10 +66278,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -50945,6 +66313,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -50963,803 +66334,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/core/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 12669 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x6c, 0x24, 0x57, - 0x76, 0x18, 0xbc, 0xd5, 0xdd, 0x7c, 0xf4, 0xe1, 0xfb, 0xce, 0x43, 0x1c, 0x4a, 0x33, 0x3d, 0x2a, - 0xed, 0x8e, 0x46, 0x2b, 0x89, 0xb3, 0x1a, 0x49, 0x2b, 0x79, 0xb5, 0x2b, 0x9b, 0x64, 0x93, 0x33, - 0xd4, 0x0c, 0x39, 0xad, 0xdb, 0x9c, 0xd1, 0xae, 0xac, 0x5d, 0x6f, 0xb1, 0xfb, 0xb2, 0x59, 0x62, - 0xb1, 0xaa, 0x55, 0x55, 0xcd, 0x19, 0xea, 0xb3, 0x81, 0x2f, 0xeb, 0xd8, 0x89, 0x1f, 0x08, 0x16, - 0xb1, 0x91, 0x87, 0x6d, 0x38, 0x80, 0xe3, 0xc0, 0x76, 0x9c, 0x04, 0x71, 0xec, 0xd8, 0xce, 0xae, - 0x9d, 0x38, 0x4e, 0x7e, 0x38, 0x7f, 0x36, 0x4e, 0x80, 0x60, 0x0d, 0x18, 0x61, 0x6c, 0xda, 0x49, - 0xe0, 0x1f, 0x79, 0x20, 0xce, 0x1f, 0x33, 0x46, 0x1c, 0xdc, 0x67, 0xdd, 0x5b, 0x5d, 0xd5, 0xdd, - 0x1c, 0x71, 0x28, 0xd9, 0xd8, 0x7f, 0xdd, 0xf7, 0x9c, 0x7b, 0xee, 0xad, 0xfb, 0x3c, 0xe7, 0xdc, - 0xf3, 0x80, 0xd7, 0x76, 0x5e, 0x8d, 0xe6, 0xdd, 0xe0, 0xda, 0x4e, 0x67, 0x93, 0x84, 0x3e, 0x89, - 0x49, 0x74, 0x6d, 0x8f, 0xf8, 0xcd, 0x20, 0xbc, 0x26, 0x00, 0x4e, 0xdb, 0xbd, 0xd6, 0x08, 0x42, - 0x72, 0x6d, 0xef, 0x85, 0x6b, 0x2d, 0xe2, 0x93, 0xd0, 0x89, 0x49, 0x73, 0xbe, 0x1d, 0x06, 0x71, - 0x80, 0x10, 0xc7, 0x99, 0x77, 0xda, 0xee, 0x3c, 0xc5, 0x99, 0xdf, 0x7b, 0x61, 0xee, 0xf9, 0x96, - 0x1b, 0x6f, 0x77, 0x36, 0xe7, 0x1b, 0xc1, 0xee, 0xb5, 0x56, 0xd0, 0x0a, 0xae, 0x31, 0xd4, 0xcd, - 0xce, 0x16, 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x9c, 0xc4, 0xdc, 0x4b, 0x49, 0x33, 0xbb, 0x4e, 0x63, - 0xdb, 0xf5, 0x49, 0xb8, 0x7f, 0xad, 0xbd, 0xd3, 0x62, 0xed, 0x86, 0x24, 0x0a, 0x3a, 0x61, 0x83, - 0xa4, 0x1b, 0xee, 0x59, 0x2b, 0xba, 0xb6, 0x4b, 0x62, 0x27, 0xa3, 0xbb, 0x73, 0xd7, 0xf2, 0x6a, - 0x85, 0x1d, 0x3f, 0x76, 0x77, 0xbb, 0x9b, 0xf9, 0x74, 0xbf, 0x0a, 0x51, 0x63, 0x9b, 0xec, 0x3a, - 0x5d, 0xf5, 0x5e, 0xcc, 0xab, 0xd7, 0x89, 0x5d, 0xef, 0x9a, 0xeb, 0xc7, 0x51, 0x1c, 0xa6, 0x2b, - 0xd9, 0xdf, 0xb4, 0xe0, 0xf2, 0xc2, 0x5b, 0xf5, 0x65, 0xcf, 0x89, 0x62, 0xb7, 0xb1, 0xe8, 0x05, - 0x8d, 0x9d, 0x7a, 0x1c, 0x84, 0xe4, 0x5e, 0xe0, 0x75, 0x76, 0x49, 0x9d, 0x0d, 0x04, 0x7a, 0x0e, - 0x46, 0xf7, 0xd8, 0xff, 0xd5, 0xea, 0xac, 0x75, 0xd9, 0xba, 0x5a, 0x5e, 0x9c, 0xfe, 0xad, 0x83, - 0xca, 0xc7, 0x0e, 0x0f, 0x2a, 0xa3, 0xf7, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x0a, 0x0c, 0x6f, 0x45, - 0x1b, 0xfb, 0x6d, 0x32, 0x5b, 0x60, 0xb8, 0x93, 0x02, 0x77, 0x78, 0xa5, 0x4e, 0x4b, 0xb1, 0x80, - 0xa2, 0x6b, 0x50, 0x6e, 0x3b, 0x61, 0xec, 0xc6, 0x6e, 0xe0, 0xcf, 0x16, 0x2f, 0x5b, 0x57, 0x87, - 0x16, 0x67, 0x04, 0x6a, 0xb9, 0x26, 0x01, 0x38, 0xc1, 0xa1, 0xdd, 0x08, 0x89, 0xd3, 0xbc, 0xe3, - 0x7b, 0xfb, 0xb3, 0xa5, 0xcb, 0xd6, 0xd5, 0xd1, 0xa4, 0x1b, 0x58, 0x94, 0x63, 0x85, 0x61, 0xff, - 0x58, 0x01, 0x46, 0x17, 0xb6, 0xb6, 0x5c, 0xdf, 0x8d, 0xf7, 0xd1, 0x3d, 0x18, 0xf7, 0x83, 0x26, - 0x91, 0xff, 0xd9, 0x57, 0x8c, 0x5d, 0xbf, 0x3c, 0xdf, 0xbd, 0x94, 0xe6, 0xd7, 0x35, 0xbc, 0xc5, - 0xe9, 0xc3, 0x83, 0xca, 0xb8, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x58, 0x3b, 0x68, 0x2a, 0xb2, - 0x05, 0x46, 0xb6, 0x92, 0x45, 0xb6, 0x96, 0xa0, 0x2d, 0x4e, 0x1d, 0x1e, 0x54, 0xc6, 0xb4, 0x02, - 0xac, 0x13, 0x41, 0x9b, 0x30, 0x45, 0xff, 0xfa, 0xb1, 0xab, 0xe8, 0x16, 0x19, 0xdd, 0xa7, 0xf2, - 0xe8, 0x6a, 0xa8, 0x8b, 0x67, 0x0e, 0x0f, 0x2a, 0x53, 0xa9, 0x42, 0x9c, 0x26, 0x68, 0xbf, 0x0f, - 0x93, 0x0b, 0x71, 0xec, 0x34, 0xb6, 0x49, 0x93, 0xcf, 0x20, 0x7a, 0x09, 0x4a, 0xbe, 0xb3, 0x4b, - 0xc4, 0xfc, 0x5e, 0x16, 0x03, 0x5b, 0x5a, 0x77, 0x76, 0xc9, 0xd1, 0x41, 0x65, 0xfa, 0xae, 0xef, - 0xbe, 0xd7, 0x11, 0xab, 0x82, 0x96, 0x61, 0x86, 0x8d, 0xae, 0x03, 0x34, 0xc9, 0x9e, 0xdb, 0x20, - 0x35, 0x27, 0xde, 0x16, 0xf3, 0x8d, 0x44, 0x5d, 0xa8, 0x2a, 0x08, 0xd6, 0xb0, 0xec, 0x07, 0x50, - 0x5e, 0xd8, 0x0b, 0xdc, 0x66, 0x2d, 0x68, 0x46, 0x68, 0x07, 0xa6, 0xda, 0x21, 0xd9, 0x22, 0xa1, - 0x2a, 0x9a, 0xb5, 0x2e, 0x17, 0xaf, 0x8e, 0x5d, 0xbf, 0x9a, 0xf9, 0xb1, 0x26, 0xea, 0xb2, 0x1f, - 0x87, 0xfb, 0x8b, 0x8f, 0x89, 0xf6, 0xa6, 0x52, 0x50, 0x9c, 0xa6, 0x6c, 0xff, 0xeb, 0x02, 0x9c, - 0x5b, 0x78, 0xbf, 0x13, 0x92, 0xaa, 0x1b, 0xed, 0xa4, 0x57, 0x78, 0xd3, 0x8d, 0x76, 0xd6, 0x93, - 0x11, 0x50, 0x4b, 0xab, 0x2a, 0xca, 0xb1, 0xc2, 0x40, 0xcf, 0xc3, 0x08, 0xfd, 0x7d, 0x17, 0xaf, - 0x8a, 0x4f, 0x3e, 0x23, 0x90, 0xc7, 0xaa, 0x4e, 0xec, 0x54, 0x39, 0x08, 0x4b, 0x1c, 0xb4, 0x06, - 0x63, 0x0d, 0xb6, 0x21, 0x5b, 0x6b, 0x41, 0x93, 0xb0, 0xc9, 0x2c, 0x2f, 0x3e, 0x4b, 0xd1, 0x97, - 0x92, 0xe2, 0xa3, 0x83, 0xca, 0x2c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, - 0x7f, 0x95, 0x18, 0x25, 0xc8, 0xd8, 0x5b, 0x57, 0xb5, 0xad, 0x32, 0xc4, 0xb6, 0xca, 0x78, 0xf6, - 0x36, 0x41, 0x2f, 0x40, 0x69, 0xc7, 0xf5, 0x9b, 0xb3, 0xc3, 0x8c, 0xd6, 0x45, 0x3a, 0xe7, 0xb7, - 0x5c, 0xbf, 0x79, 0x74, 0x50, 0x99, 0x31, 0xba, 0x43, 0x0b, 0x31, 0x43, 0xb5, 0xff, 0xd8, 0x82, - 0x0a, 0x83, 0xad, 0xb8, 0x1e, 0xa9, 0x91, 0x30, 0x72, 0xa3, 0x98, 0xf8, 0xb1, 0x31, 0xa0, 0xd7, - 0x01, 0x22, 0xd2, 0x08, 0x49, 0xac, 0x0d, 0xa9, 0x5a, 0x18, 0x75, 0x05, 0xc1, 0x1a, 0x16, 0x3d, - 0x10, 0xa2, 0x6d, 0x27, 0x64, 0xeb, 0x4b, 0x0c, 0xac, 0x3a, 0x10, 0xea, 0x12, 0x80, 0x13, 0x1c, - 0xe3, 0x40, 0x28, 0xf6, 0x3b, 0x10, 0xd0, 0xe7, 0x60, 0x2a, 0x69, 0x2c, 0x6a, 0x3b, 0x0d, 0x39, - 0x80, 0x6c, 0xcb, 0xd4, 0x4d, 0x10, 0x4e, 0xe3, 0xda, 0x7f, 0xdf, 0x12, 0x8b, 0x87, 0x7e, 0xf5, - 0x47, 0xfc, 0x5b, 0xed, 0x5f, 0xb5, 0x60, 0x64, 0xd1, 0xf5, 0x9b, 0xae, 0xdf, 0x42, 0x5f, 0x86, - 0x51, 0x7a, 0x37, 0x35, 0x9d, 0xd8, 0x11, 0xe7, 0xde, 0xa7, 0xb4, 0xbd, 0xa5, 0xae, 0x8a, 0xf9, - 0xf6, 0x4e, 0x8b, 0x16, 0x44, 0xf3, 0x14, 0x9b, 0xee, 0xb6, 0x3b, 0x9b, 0xef, 0x92, 0x46, 0xbc, - 0x46, 0x62, 0x27, 0xf9, 0x9c, 0xa4, 0x0c, 0x2b, 0xaa, 0xe8, 0x16, 0x0c, 0xc7, 0x4e, 0xd8, 0x22, - 0xb1, 0x38, 0x00, 0x33, 0x0f, 0x2a, 0x5e, 0x13, 0xd3, 0x1d, 0x49, 0xfc, 0x06, 0x49, 0xae, 0x85, - 0x0d, 0x56, 0x15, 0x0b, 0x12, 0xf6, 0x0f, 0x0e, 0xc3, 0x85, 0xa5, 0xfa, 0x6a, 0xce, 0xba, 0xba, - 0x02, 0xc3, 0xcd, 0xd0, 0xdd, 0x23, 0xa1, 0x18, 0x67, 0x45, 0xa5, 0xca, 0x4a, 0xb1, 0x80, 0xa2, - 0x57, 0x61, 0x9c, 0x5f, 0x48, 0x37, 0x1d, 0xbf, 0xe9, 0xc9, 0x21, 0x3e, 0x2b, 0xb0, 0xc7, 0xef, - 0x69, 0x30, 0x6c, 0x60, 0x1e, 0x73, 0x51, 0x5d, 0x49, 0x6d, 0xc6, 0xbc, 0xcb, 0xee, 0x07, 0x2c, - 0x98, 0xe6, 0xcd, 0x2c, 0xc4, 0x71, 0xe8, 0x6e, 0x76, 0x62, 0x12, 0xcd, 0x0e, 0xb1, 0x93, 0x6e, - 0x29, 0x6b, 0xb4, 0x72, 0x47, 0x60, 0xfe, 0x5e, 0x8a, 0x0a, 0x3f, 0x04, 0x67, 0x45, 0xbb, 0xd3, - 0x69, 0x30, 0xee, 0x6a, 0x16, 0x7d, 0xaf, 0x05, 0x73, 0x8d, 0xc0, 0x8f, 0xc3, 0xc0, 0xf3, 0x48, - 0x58, 0xeb, 0x6c, 0x7a, 0x6e, 0xb4, 0xcd, 0xd7, 0x29, 0x26, 0x5b, 0xec, 0x24, 0xc8, 0x99, 0x43, - 0x85, 0x24, 0xe6, 0xf0, 0xd2, 0xe1, 0x41, 0x65, 0x6e, 0x29, 0x97, 0x14, 0xee, 0xd1, 0x0c, 0xda, - 0x01, 0x44, 0xaf, 0xd2, 0x7a, 0xec, 0xb4, 0x48, 0xd2, 0xf8, 0xc8, 0xe0, 0x8d, 0x9f, 0x3f, 0x3c, - 0xa8, 0xa0, 0xf5, 0x2e, 0x12, 0x38, 0x83, 0x2c, 0x7a, 0x0f, 0xce, 0xd2, 0xd2, 0xae, 0x6f, 0x1d, - 0x1d, 0xbc, 0xb9, 0xd9, 0xc3, 0x83, 0xca, 0xd9, 0xf5, 0x0c, 0x22, 0x38, 0x93, 0xf4, 0xdc, 0x12, - 0x9c, 0xcb, 0x9c, 0x2a, 0x34, 0x0d, 0xc5, 0x1d, 0xc2, 0x59, 0x90, 0x32, 0xa6, 0x3f, 0xd1, 0x59, - 0x18, 0xda, 0x73, 0xbc, 0x8e, 0x58, 0xa5, 0x98, 0xff, 0xf9, 0x4c, 0xe1, 0x55, 0xcb, 0x6e, 0xc0, - 0xf8, 0x92, 0xd3, 0x76, 0x36, 0x5d, 0xcf, 0x8d, 0x5d, 0x12, 0xa1, 0xa7, 0xa1, 0xe8, 0x34, 0x9b, - 0xec, 0x8a, 0x2c, 0x2f, 0x9e, 0x3b, 0x3c, 0xa8, 0x14, 0x17, 0x9a, 0xf4, 0xac, 0x06, 0x85, 0xb5, - 0x8f, 0x29, 0x06, 0xfa, 0x24, 0x94, 0x9a, 0x61, 0xd0, 0x9e, 0x2d, 0x30, 0x4c, 0x3a, 0x54, 0xa5, - 0x6a, 0x18, 0xb4, 0x53, 0xa8, 0x0c, 0xc7, 0xfe, 0x8d, 0x02, 0x3c, 0xb1, 0x44, 0xda, 0xdb, 0x2b, - 0xf5, 0x9c, 0x4d, 0x77, 0x15, 0x46, 0x77, 0x03, 0xdf, 0x8d, 0x83, 0x30, 0x12, 0x4d, 0xb3, 0xdb, - 0x64, 0x4d, 0x94, 0x61, 0x05, 0x45, 0x97, 0xa1, 0xd4, 0x4e, 0x38, 0x81, 0x71, 0xc9, 0x45, 0x30, - 0x1e, 0x80, 0x41, 0x28, 0x46, 0x27, 0x22, 0xa1, 0xb8, 0x05, 0x15, 0xc6, 0xdd, 0x88, 0x84, 0x98, - 0x41, 0x92, 0xe3, 0x94, 0x1e, 0xb4, 0x62, 0x5b, 0xa5, 0x8e, 0x53, 0x0a, 0xc1, 0x1a, 0x16, 0xaa, - 0x41, 0x39, 0x52, 0x93, 0x3a, 0x34, 0xf8, 0xa4, 0x4e, 0xb0, 0xf3, 0x56, 0xcd, 0x64, 0x42, 0xc4, - 0x38, 0x06, 0x86, 0xfb, 0x9e, 0xb7, 0x5f, 0x2f, 0x00, 0xe2, 0x43, 0xf8, 0xe7, 0x6c, 0xe0, 0xee, - 0x76, 0x0f, 0x5c, 0x26, 0xe7, 0x75, 0x3b, 0x68, 0x38, 0x5e, 0xfa, 0x08, 0x3f, 0xa9, 0xd1, 0xfb, - 0xdf, 0x16, 0x3c, 0xb1, 0xe4, 0xfa, 0x4d, 0x12, 0xe6, 0x2c, 0xc0, 0x47, 0x23, 0x80, 0x1c, 0xef, - 0xa4, 0x37, 0x96, 0x58, 0xe9, 0x04, 0x96, 0x98, 0xfd, 0x3f, 0x2c, 0x40, 0xfc, 0xb3, 0x3f, 0x72, - 0x1f, 0x7b, 0xb7, 0xfb, 0x63, 0x4f, 0x60, 0x59, 0xd8, 0xb7, 0x61, 0x72, 0xc9, 0x73, 0x89, 0x1f, - 0xaf, 0xd6, 0x96, 0x02, 0x7f, 0xcb, 0x6d, 0xa1, 0xcf, 0xc0, 0x24, 0x95, 0x69, 0x83, 0x4e, 0x5c, - 0x27, 0x8d, 0xc0, 0x67, 0xec, 0x3f, 0x95, 0x04, 0xd1, 0xe1, 0x41, 0x65, 0x72, 0xc3, 0x80, 0xe0, - 0x14, 0xa6, 0xfd, 0xbb, 0x74, 0xfc, 0x82, 0xdd, 0x76, 0xe0, 0x13, 0x3f, 0x5e, 0x0a, 0xfc, 0x26, - 0x17, 0x13, 0x3f, 0x03, 0xa5, 0x98, 0x8e, 0x07, 0x1f, 0xbb, 0x2b, 0x72, 0xa3, 0xd0, 0x51, 0x38, - 0x3a, 0xa8, 0x9c, 0xef, 0xae, 0xc1, 0xc6, 0x89, 0xd5, 0x41, 0xdf, 0x06, 0xc3, 0x51, 0xec, 0xc4, - 0x9d, 0x48, 0x8c, 0xe6, 0x93, 0x72, 0x34, 0xeb, 0xac, 0xf4, 0xe8, 0xa0, 0x32, 0xa5, 0xaa, 0xf1, - 0x22, 0x2c, 0x2a, 0xa0, 0x67, 0x60, 0x64, 0x97, 0x44, 0x91, 0xd3, 0x92, 0x1c, 0xfe, 0x94, 0xa8, - 0x3b, 0xb2, 0xc6, 0x8b, 0xb1, 0x84, 0xa3, 0xa7, 0x60, 0x88, 0x84, 0x61, 0x10, 0x8a, 0x3d, 0x3a, - 0x21, 0x10, 0x87, 0x96, 0x69, 0x21, 0xe6, 0x30, 0xfb, 0xdf, 0x5a, 0x30, 0xa5, 0xfa, 0xca, 0xdb, - 0x3a, 0x05, 0x56, 0xee, 0x6d, 0x80, 0x86, 0xfc, 0xc0, 0x88, 0xdd, 0x1e, 0x63, 0xd7, 0xaf, 0x64, - 0x32, 0x28, 0x5d, 0xc3, 0x98, 0x50, 0x56, 0x45, 0x11, 0xd6, 0xa8, 0xd9, 0xbf, 0x6e, 0xc1, 0x99, - 0xd4, 0x17, 0xdd, 0x76, 0xa3, 0x18, 0xbd, 0xd3, 0xf5, 0x55, 0xf3, 0x83, 0x7d, 0x15, 0xad, 0xcd, - 0xbe, 0x49, 0x2d, 0x65, 0x59, 0xa2, 0x7d, 0xd1, 0x4d, 0x18, 0x72, 0x63, 0xb2, 0x2b, 0x3f, 0xe6, - 0xa9, 0x9e, 0x1f, 0xc3, 0x7b, 0x95, 0xcc, 0xc8, 0x2a, 0xad, 0x89, 0x39, 0x01, 0xfb, 0x47, 0x8a, - 0x50, 0xe6, 0xcb, 0x76, 0xcd, 0x69, 0x9f, 0xc2, 0x5c, 0xac, 0x42, 0x89, 0x51, 0xe7, 0x1d, 0x7f, - 0x3a, 0xbb, 0xe3, 0xa2, 0x3b, 0xf3, 0x54, 0x4e, 0xe3, 0xac, 0xa0, 0xba, 0x1a, 0x68, 0x11, 0x66, - 0x24, 0x90, 0x03, 0xb0, 0xe9, 0xfa, 0x4e, 0xb8, 0x4f, 0xcb, 0x66, 0x8b, 0x8c, 0xe0, 0xf3, 0xbd, - 0x09, 0x2e, 0x2a, 0x7c, 0x4e, 0x56, 0xf5, 0x35, 0x01, 0x60, 0x8d, 0xe8, 0xdc, 0x2b, 0x50, 0x56, - 0xc8, 0xc7, 0xe1, 0x71, 0xe6, 0x3e, 0x07, 0x53, 0xa9, 0xb6, 0xfa, 0x55, 0x1f, 0xd7, 0x59, 0xa4, - 0xaf, 0xb1, 0x53, 0x40, 0xf4, 0x7a, 0xd9, 0xdf, 0x13, 0xa7, 0xe8, 0xfb, 0x70, 0xd6, 0xcb, 0x38, - 0x9c, 0xc4, 0x54, 0x0d, 0x7e, 0x98, 0x3d, 0x21, 0x3e, 0xfb, 0x6c, 0x16, 0x14, 0x67, 0xb6, 0x41, - 0xaf, 0xfd, 0xa0, 0x4d, 0xd7, 0xbc, 0xe3, 0xb1, 0xfe, 0x0a, 0xe9, 0xfb, 0x8e, 0x28, 0xc3, 0x0a, - 0x4a, 0x8f, 0xb0, 0xb3, 0xaa, 0xf3, 0xb7, 0xc8, 0x7e, 0x9d, 0x78, 0xa4, 0x11, 0x07, 0xe1, 0x87, - 0xda, 0xfd, 0x8b, 0x7c, 0xf4, 0xf9, 0x09, 0x38, 0x26, 0x08, 0x14, 0x6f, 0x91, 0x7d, 0x3e, 0x15, - 0xfa, 0xd7, 0x15, 0x7b, 0x7e, 0xdd, 0x2f, 0x58, 0x30, 0xa1, 0xbe, 0xee, 0x14, 0xb6, 0xfa, 0xa2, - 0xb9, 0xd5, 0x2f, 0xf6, 0x5c, 0xe0, 0x39, 0x9b, 0xfc, 0xeb, 0x05, 0xb8, 0xa0, 0x70, 0x28, 0xbb, - 0xcf, 0xff, 0x88, 0x55, 0x75, 0x0d, 0xca, 0xbe, 0xd2, 0x1e, 0x58, 0xa6, 0xd8, 0x9e, 0xe8, 0x0e, - 0x12, 0x1c, 0xca, 0xb5, 0xf9, 0x89, 0x88, 0x3f, 0xae, 0xab, 0xd5, 0x84, 0x0a, 0x6d, 0x11, 0x8a, - 0x1d, 0xb7, 0x29, 0xee, 0x8c, 0x4f, 0xc9, 0xd1, 0xbe, 0xbb, 0x5a, 0x3d, 0x3a, 0xa8, 0x3c, 0x99, - 0xa7, 0xd2, 0xa5, 0x97, 0x55, 0x34, 0x7f, 0x77, 0xb5, 0x8a, 0x69, 0x65, 0xb4, 0x00, 0x53, 0x52, - 0x6b, 0x7d, 0x8f, 0x72, 0x50, 0x81, 0x2f, 0xae, 0x16, 0xa5, 0x1b, 0xc3, 0x26, 0x18, 0xa7, 0xf1, - 0x51, 0x15, 0xa6, 0x77, 0x3a, 0x9b, 0xc4, 0x23, 0x31, 0xff, 0xe0, 0x5b, 0x84, 0x6b, 0x8e, 0xca, - 0x89, 0x68, 0x79, 0x2b, 0x05, 0xc7, 0x5d, 0x35, 0xec, 0x3f, 0x63, 0x47, 0xbc, 0x18, 0xbd, 0x5a, - 0x18, 0xd0, 0x85, 0x45, 0xa9, 0x7f, 0x98, 0xcb, 0x79, 0x90, 0x55, 0x71, 0x8b, 0xec, 0x6f, 0x04, - 0x94, 0xd9, 0xce, 0x5e, 0x15, 0xc6, 0x9a, 0x2f, 0xf5, 0x5c, 0xf3, 0xbf, 0x54, 0x80, 0x73, 0x6a, - 0x04, 0x0c, 0xbe, 0xee, 0xcf, 0xfb, 0x18, 0xbc, 0x00, 0x63, 0x4d, 0xb2, 0xe5, 0x74, 0xbc, 0x58, - 0xa9, 0x31, 0x87, 0xb8, 0x2a, 0xbb, 0x9a, 0x14, 0x63, 0x1d, 0xe7, 0x18, 0xc3, 0xf6, 0xd3, 0x63, - 0xec, 0x6e, 0x8d, 0x1d, 0xba, 0xc6, 0xd5, 0xae, 0xb1, 0x72, 0x77, 0xcd, 0x53, 0x30, 0xe4, 0xee, - 0x52, 0x5e, 0xab, 0x60, 0xb2, 0x50, 0xab, 0xb4, 0x10, 0x73, 0x18, 0xfa, 0x04, 0x8c, 0x34, 0x82, - 0xdd, 0x5d, 0xc7, 0x6f, 0xb2, 0x2b, 0xaf, 0xbc, 0x38, 0x46, 0xd9, 0xb1, 0x25, 0x5e, 0x84, 0x25, - 0x0c, 0x3d, 0x01, 0x25, 0x27, 0x6c, 0x45, 0xb3, 0x25, 0x86, 0x33, 0x4a, 0x5b, 0x5a, 0x08, 0x5b, - 0x11, 0x66, 0xa5, 0x54, 0xaa, 0xba, 0x1f, 0x84, 0x3b, 0xae, 0xdf, 0xaa, 0xba, 0xa1, 0xd8, 0x12, - 0xea, 0x2e, 0x7c, 0x4b, 0x41, 0xb0, 0x86, 0x85, 0x56, 0x60, 0xa8, 0x1d, 0x84, 0x71, 0x34, 0x3b, - 0xcc, 0x86, 0xfb, 0xc9, 0x9c, 0x83, 0x88, 0x7f, 0x6d, 0x2d, 0x08, 0xe3, 0xe4, 0x03, 0xe8, 0xbf, - 0x08, 0xf3, 0xea, 0xe8, 0xdb, 0xa0, 0x48, 0xfc, 0xbd, 0xd9, 0x11, 0x46, 0x65, 0x2e, 0x8b, 0xca, - 0xb2, 0xbf, 0x77, 0xcf, 0x09, 0x93, 0x53, 0x7a, 0xd9, 0xdf, 0xc3, 0xb4, 0x0e, 0xfa, 0x02, 0x94, - 0xe5, 0x16, 0x8f, 0x84, 0x9a, 0x23, 0x73, 0x89, 0xc9, 0x83, 0x01, 0x93, 0xf7, 0x3a, 0x6e, 0x48, - 0x76, 0x89, 0x1f, 0x47, 0xc9, 0x99, 0x26, 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0x2f, 0x48, 0xdd, 0xda, - 0x5a, 0xd0, 0xf1, 0xe3, 0x68, 0xb6, 0xcc, 0xba, 0x97, 0xf9, 0xea, 0x71, 0x2f, 0xc1, 0x4b, 0x2b, - 0xdf, 0x78, 0x65, 0x6c, 0x90, 0x42, 0x18, 0x26, 0x3c, 0x77, 0x8f, 0xf8, 0x24, 0x8a, 0x6a, 0x61, - 0xb0, 0x49, 0x66, 0x81, 0xf5, 0xfc, 0x42, 0xf6, 0x63, 0x40, 0xb0, 0x49, 0x16, 0x67, 0x0e, 0x0f, - 0x2a, 0x13, 0xb7, 0xf5, 0x3a, 0xd8, 0x24, 0x81, 0xee, 0xc2, 0x24, 0x95, 0x6b, 0xdc, 0x84, 0xe8, - 0x58, 0x3f, 0xa2, 0x4c, 0xfa, 0xc0, 0x46, 0x25, 0x9c, 0x22, 0x82, 0xde, 0x80, 0xb2, 0xe7, 0x6e, - 0x91, 0xc6, 0x7e, 0xc3, 0x23, 0xb3, 0xe3, 0x8c, 0x62, 0xe6, 0xb6, 0xba, 0x2d, 0x91, 0xb8, 0x5c, - 0xa4, 0xfe, 0xe2, 0xa4, 0x3a, 0xba, 0x07, 0xe7, 0x63, 0x12, 0xee, 0xba, 0xbe, 0x43, 0xb7, 0x83, - 0x90, 0x17, 0xd8, 0x93, 0xca, 0x04, 0x5b, 0x6f, 0x97, 0xc4, 0xd0, 0x9d, 0xdf, 0xc8, 0xc4, 0xc2, - 0x39, 0xb5, 0xd1, 0x1d, 0x98, 0x62, 0x3b, 0xa1, 0xd6, 0xf1, 0xbc, 0x5a, 0xe0, 0xb9, 0x8d, 0xfd, - 0xd9, 0x49, 0x46, 0xf0, 0x13, 0xf2, 0x5e, 0x58, 0x35, 0xc1, 0x47, 0x07, 0x15, 0x48, 0xfe, 0xe1, - 0x74, 0x6d, 0xb4, 0xc9, 0x74, 0xe8, 0x9d, 0xd0, 0x8d, 0xf7, 0xe9, 0xfa, 0x25, 0x0f, 0xe2, 0xd9, - 0xa9, 0x9e, 0xa2, 0xb0, 0x8e, 0xaa, 0x14, 0xed, 0x7a, 0x21, 0x4e, 0x13, 0xa4, 0x5b, 0x3b, 0x8a, - 0x9b, 0xae, 0x3f, 0x3b, 0xcd, 0x4e, 0x0c, 0xb5, 0x33, 0xea, 0xb4, 0x10, 0x73, 0x18, 0xd3, 0x9f, - 0xd3, 0x1f, 0x77, 0xe8, 0x09, 0x3a, 0xc3, 0x10, 0x13, 0xfd, 0xb9, 0x04, 0xe0, 0x04, 0x87, 0x32, - 0x35, 0x71, 0xbc, 0x3f, 0x8b, 0x18, 0xaa, 0xda, 0x2e, 0x1b, 0x1b, 0x5f, 0xc0, 0xb4, 0x1c, 0xdd, - 0x86, 0x11, 0xe2, 0xef, 0xad, 0x84, 0xc1, 0xee, 0xec, 0x99, 0xfc, 0x3d, 0xbb, 0xcc, 0x51, 0xf8, - 0x81, 0x9e, 0x08, 0x78, 0xa2, 0x18, 0x4b, 0x12, 0xe8, 0x01, 0xcc, 0x66, 0xcc, 0x08, 0x9f, 0x80, - 0xb3, 0x6c, 0x02, 0x3e, 0x2b, 0xea, 0xce, 0x6e, 0xe4, 0xe0, 0x1d, 0xf5, 0x80, 0xe1, 0x5c, 0xea, - 0xe8, 0x8b, 0x30, 0xc1, 0x37, 0x14, 0x7f, 0x7c, 0x8b, 0x66, 0xcf, 0xb1, 0xaf, 0xb9, 0x9c, 0xbf, - 0x39, 0x39, 0xe2, 0xe2, 0x39, 0xd1, 0xa1, 0x09, 0xbd, 0x34, 0xc2, 0x26, 0x35, 0x7b, 0x13, 0x26, - 0xd5, 0xb9, 0xc5, 0x96, 0x0e, 0xaa, 0xc0, 0x10, 0xe3, 0x76, 0x84, 0x7e, 0xab, 0x4c, 0x67, 0x8a, - 0x71, 0x42, 0x98, 0x97, 0xb3, 0x99, 0x72, 0xdf, 0x27, 0x8b, 0xfb, 0x31, 0xe1, 0x52, 0x75, 0x51, - 0x9b, 0x29, 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0x7f, 0x39, 0xd7, 0x98, 0x1c, 0x8e, 0x03, 0x5c, 0x07, - 0xcf, 0xc1, 0xe8, 0x76, 0x10, 0xc5, 0x14, 0x9b, 0xb5, 0x31, 0x94, 0xf0, 0x89, 0x37, 0x45, 0x39, - 0x56, 0x18, 0xe8, 0x35, 0x98, 0x68, 0xe8, 0x0d, 0x88, 0xbb, 0x4c, 0x0d, 0x81, 0xd1, 0x3a, 0x36, - 0x71, 0xd1, 0xab, 0x30, 0xca, 0x9e, 0xce, 0x1b, 0x81, 0x27, 0x98, 0x2c, 0x79, 0x21, 0x8f, 0xd6, - 0x44, 0xf9, 0x91, 0xf6, 0x1b, 0x2b, 0x6c, 0x74, 0x05, 0x86, 0x69, 0x17, 0x56, 0x6b, 0xe2, 0x16, - 0x51, 0xaa, 0x9a, 0x9b, 0xac, 0x14, 0x0b, 0xa8, 0xfd, 0xd7, 0x0b, 0xda, 0x28, 0x53, 0x89, 0x94, - 0xa0, 0x1a, 0x8c, 0xdc, 0x77, 0xdc, 0xd8, 0xf5, 0x5b, 0x82, 0x5d, 0x78, 0xa6, 0xe7, 0x95, 0xc2, - 0x2a, 0xbd, 0xc5, 0x2b, 0xf0, 0x4b, 0x4f, 0xfc, 0xc1, 0x92, 0x0c, 0xa5, 0x18, 0x76, 0x7c, 0x9f, - 0x52, 0x2c, 0x0c, 0x4a, 0x11, 0xf3, 0x0a, 0x9c, 0xa2, 0xf8, 0x83, 0x25, 0x19, 0xf4, 0x0e, 0x80, - 0x5c, 0x96, 0xa4, 0x29, 0x9e, 0xac, 0x9f, 0xeb, 0x4f, 0x74, 0x43, 0xd5, 0x59, 0x9c, 0xa4, 0x57, - 0x6a, 0xf2, 0x1f, 0x6b, 0xf4, 0xec, 0x98, 0xb1, 0x55, 0xdd, 0x9d, 0x41, 0xdf, 0x49, 0x4f, 0x02, - 0x27, 0x8c, 0x49, 0x73, 0x21, 0x16, 0x83, 0xf3, 0xc9, 0xc1, 0x64, 0x8a, 0x0d, 0x77, 0x97, 0xe8, - 0xa7, 0x86, 0x20, 0x82, 0x13, 0x7a, 0xf6, 0xaf, 0x14, 0x61, 0x36, 0xaf, 0xbb, 0x74, 0xd1, 0x91, - 0x07, 0x6e, 0xbc, 0x44, 0xb9, 0x21, 0xcb, 0x5c, 0x74, 0xcb, 0xa2, 0x1c, 0x2b, 0x0c, 0x3a, 0xfb, - 0x91, 0xdb, 0x92, 0x22, 0xe1, 0x50, 0x32, 0xfb, 0x75, 0x56, 0x8a, 0x05, 0x94, 0xe2, 0x85, 0xc4, - 0x89, 0x84, 0x4d, 0x84, 0xb6, 0x4a, 0x30, 0x2b, 0xc5, 0x02, 0xaa, 0xeb, 0x9b, 0x4a, 0x7d, 0xf4, - 0x4d, 0xc6, 0x10, 0x0d, 0x9d, 0xec, 0x10, 0xa1, 0x2f, 0x01, 0x6c, 0xb9, 0xbe, 0x1b, 0x6d, 0x33, - 0xea, 0xc3, 0xc7, 0xa6, 0xae, 0x78, 0xa9, 0x15, 0x45, 0x05, 0x6b, 0x14, 0xd1, 0xcb, 0x30, 0xa6, - 0x36, 0xe0, 0x6a, 0x95, 0x3d, 0x10, 0x69, 0x0f, 0xee, 0xc9, 0x69, 0x54, 0xc5, 0x3a, 0x9e, 0xfd, - 0x6e, 0x7a, 0xbd, 0x88, 0x1d, 0xa0, 0x8d, 0xaf, 0x35, 0xe8, 0xf8, 0x16, 0x7a, 0x8f, 0xaf, 0xfd, - 0x9b, 0x45, 0x98, 0x32, 0x1a, 0xeb, 0x44, 0x03, 0x9c, 0x59, 0x37, 0xe8, 0x3d, 0xe7, 0xc4, 0x44, - 0xec, 0x3f, 0xbb, 0xff, 0x56, 0xd1, 0xef, 0x42, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x25, 0x28, 0x7b, - 0x4e, 0xc4, 0x74, 0x57, 0x44, 0xec, 0xbb, 0x41, 0x88, 0x25, 0x72, 0x84, 0x13, 0xc5, 0xda, 0x55, - 0xc3, 0x69, 0x27, 0x24, 0xe9, 0x85, 0x4c, 0x79, 0x1f, 0x69, 0x74, 0xa3, 0x3a, 0x41, 0x19, 0xa4, - 0x7d, 0xcc, 0x61, 0xe8, 0x55, 0x18, 0x0f, 0x09, 0x5b, 0x15, 0x4b, 0x94, 0x95, 0x63, 0xcb, 0x6c, - 0x28, 0xe1, 0xf9, 0xb0, 0x06, 0xc3, 0x06, 0x66, 0xc2, 0xca, 0x0f, 0xf7, 0x60, 0xe5, 0x9f, 0x81, - 0x11, 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0xab, 0xbc, 0x18, 0x4b, 0x78, 0x7a, 0xc1, 0x8c, 0x0e, - 0xb8, 0x60, 0x3e, 0x09, 0x93, 0x55, 0x87, 0xec, 0x06, 0xfe, 0xb2, 0xdf, 0x6c, 0x07, 0xae, 0x1f, - 0xa3, 0x59, 0x28, 0xb1, 0xdb, 0x81, 0xef, 0xed, 0x12, 0xa5, 0x80, 0x4b, 0x94, 0x31, 0xb7, 0x5b, - 0x70, 0xae, 0x1a, 0xdc, 0xf7, 0xef, 0x3b, 0x61, 0x73, 0xa1, 0xb6, 0xaa, 0xc9, 0xb9, 0xeb, 0x52, - 0xce, 0xe2, 0x46, 0x2c, 0x99, 0x67, 0xaa, 0x56, 0x93, 0xdf, 0xb5, 0x2b, 0xae, 0x47, 0x72, 0xb4, - 0x11, 0x7f, 0xb3, 0x60, 0xb4, 0x94, 0xe0, 0xab, 0x07, 0x23, 0x2b, 0xf7, 0xc1, 0xe8, 0x4d, 0x18, - 0xdd, 0x72, 0x89, 0xd7, 0xc4, 0x64, 0x4b, 0x2c, 0xb1, 0xa7, 0xf3, 0xdf, 0xe5, 0x57, 0x28, 0xa6, - 0xd4, 0x3e, 0x71, 0x29, 0x6d, 0x45, 0x54, 0xc6, 0x8a, 0x0c, 0xda, 0x81, 0x69, 0x29, 0x06, 0x48, - 0xa8, 0x58, 0x70, 0xcf, 0xf4, 0x92, 0x2d, 0x4c, 0xe2, 0x67, 0x0f, 0x0f, 0x2a, 0xd3, 0x38, 0x45, - 0x06, 0x77, 0x11, 0xa6, 0x62, 0xd9, 0x2e, 0x3d, 0x5a, 0x4b, 0x6c, 0xf8, 0x99, 0x58, 0xc6, 0x24, - 0x4c, 0x56, 0x6a, 0xff, 0x84, 0x05, 0x8f, 0x75, 0x8d, 0x8c, 0x90, 0xb4, 0x4f, 0x78, 0x16, 0xd2, - 0x92, 0x6f, 0xa1, 0xbf, 0xe4, 0x6b, 0xff, 0x03, 0x0b, 0xce, 0x2e, 0xef, 0xb6, 0xe3, 0xfd, 0xaa, - 0x6b, 0xbe, 0xee, 0xbc, 0x02, 0xc3, 0xbb, 0xa4, 0xe9, 0x76, 0x76, 0xc5, 0xcc, 0x55, 0xe4, 0xf1, - 0xb3, 0xc6, 0x4a, 0x8f, 0x0e, 0x2a, 0x13, 0xf5, 0x38, 0x08, 0x9d, 0x16, 0xe1, 0x05, 0x58, 0xa0, - 0xb3, 0x43, 0xdc, 0x7d, 0x9f, 0xdc, 0x76, 0x77, 0x5d, 0x69, 0x67, 0xd1, 0x53, 0x77, 0x36, 0x2f, - 0x07, 0x74, 0xfe, 0xcd, 0x8e, 0xe3, 0xc7, 0x6e, 0xbc, 0x2f, 0x1e, 0x66, 0x24, 0x11, 0x9c, 0xd0, - 0xb3, 0xbf, 0x69, 0xc1, 0x94, 0x5c, 0xf7, 0x0b, 0xcd, 0x66, 0x48, 0xa2, 0x08, 0xcd, 0x41, 0xc1, - 0x6d, 0x8b, 0x5e, 0x82, 0xe8, 0x65, 0x61, 0xb5, 0x86, 0x0b, 0x6e, 0x1b, 0xd5, 0xa0, 0xcc, 0xcd, - 0x35, 0x92, 0xc5, 0x35, 0x90, 0xd1, 0x07, 0xeb, 0xc1, 0x86, 0xac, 0x89, 0x13, 0x22, 0x92, 0x83, - 0x63, 0x67, 0x66, 0xd1, 0x7c, 0xf5, 0xba, 0x29, 0xca, 0xb1, 0xc2, 0x40, 0x57, 0x61, 0xd4, 0x0f, - 0x9a, 0xdc, 0x7a, 0x86, 0xdf, 0x7e, 0x6c, 0xc9, 0xae, 0x8b, 0x32, 0xac, 0xa0, 0xf6, 0x0f, 0x5b, - 0x30, 0x2e, 0xbf, 0x6c, 0x40, 0x66, 0x92, 0x6e, 0xad, 0x84, 0x91, 0x4c, 0xb6, 0x16, 0x65, 0x06, - 0x19, 0xc4, 0xe0, 0x01, 0x8b, 0xc7, 0xe1, 0x01, 0xed, 0x1f, 0x2f, 0xc0, 0xa4, 0xec, 0x4e, 0xbd, - 0xb3, 0x19, 0x91, 0x18, 0x6d, 0x40, 0xd9, 0xe1, 0x43, 0x4e, 0xe4, 0x8a, 0x7d, 0x2a, 0x5b, 0xf8, - 0x30, 0xe6, 0x27, 0xb9, 0x96, 0x17, 0x64, 0x6d, 0x9c, 0x10, 0x42, 0x1e, 0xcc, 0xf8, 0x41, 0xcc, - 0x8e, 0x68, 0x05, 0xef, 0xf5, 0x04, 0x92, 0xa6, 0x7e, 0x41, 0x50, 0x9f, 0x59, 0x4f, 0x53, 0xc1, - 0xdd, 0x84, 0xd1, 0xb2, 0x54, 0x78, 0x14, 0xf3, 0xc5, 0x0d, 0x7d, 0x16, 0xb2, 0xf5, 0x1d, 0xf6, - 0xaf, 0x59, 0x50, 0x96, 0x68, 0xa7, 0xf1, 0xda, 0xb5, 0x06, 0x23, 0x11, 0x9b, 0x04, 0x39, 0x34, - 0x76, 0xaf, 0x8e, 0xf3, 0xf9, 0x4a, 0x6e, 0x1e, 0xfe, 0x3f, 0xc2, 0x92, 0x06, 0xd3, 0x77, 0xab, - 0xee, 0x7f, 0x44, 0xf4, 0xdd, 0xaa, 0x3f, 0x39, 0x37, 0xcc, 0x7f, 0x65, 0x7d, 0xd6, 0xc4, 0x5a, - 0xca, 0x20, 0xb5, 0x43, 0xb2, 0xe5, 0x3e, 0x48, 0x33, 0x48, 0x35, 0x56, 0x8a, 0x05, 0x14, 0xbd, - 0x03, 0xe3, 0x0d, 0xa9, 0xe8, 0x4c, 0x8e, 0x81, 0x2b, 0x3d, 0x95, 0xee, 0xea, 0x7d, 0x86, 0x5b, - 0xd6, 0x2e, 0x69, 0xf5, 0xb1, 0x41, 0xcd, 0x7c, 0x6e, 0x2f, 0xf6, 0x7b, 0x6e, 0x4f, 0xe8, 0xe6, - 0x3f, 0x3e, 0xff, 0xa4, 0x05, 0xc3, 0x5c, 0x5d, 0x36, 0x98, 0x7e, 0x51, 0x7b, 0xae, 0x4a, 0xc6, - 0xee, 0x1e, 0x2d, 0x14, 0xcf, 0x4f, 0x68, 0x0d, 0xca, 0xec, 0x07, 0x53, 0x1b, 0x14, 0xf3, 0x4d, - 0x8a, 0x79, 0xab, 0x7a, 0x07, 0xef, 0xc9, 0x6a, 0x38, 0xa1, 0x60, 0xff, 0x68, 0x91, 0x1e, 0x55, - 0x09, 0xaa, 0x71, 0x83, 0x5b, 0x8f, 0xee, 0x06, 0x2f, 0x3c, 0xaa, 0x1b, 0xbc, 0x05, 0x53, 0x0d, - 0xed, 0x71, 0x2b, 0x99, 0xc9, 0xab, 0x3d, 0x17, 0x89, 0xf6, 0x0e, 0xc6, 0x55, 0x46, 0x4b, 0x26, - 0x11, 0x9c, 0xa6, 0x8a, 0xbe, 0x13, 0xc6, 0xf9, 0x3c, 0x8b, 0x56, 0xb8, 0xc5, 0xc2, 0x27, 0xf2, - 0xd7, 0x8b, 0xde, 0x04, 0x5b, 0x89, 0x75, 0xad, 0x3a, 0x36, 0x88, 0xd9, 0xbf, 0x32, 0x0a, 0x43, - 0xcb, 0x7b, 0xc4, 0x8f, 0x4f, 0xe1, 0x40, 0x6a, 0xc0, 0xa4, 0xeb, 0xef, 0x05, 0xde, 0x1e, 0x69, - 0x72, 0xf8, 0x71, 0x2e, 0xd7, 0xf3, 0x82, 0xf4, 0xe4, 0xaa, 0x41, 0x02, 0xa7, 0x48, 0x3e, 0x0a, - 0x09, 0xf3, 0x06, 0x0c, 0xf3, 0xb9, 0x17, 0xe2, 0x65, 0xa6, 0x32, 0x98, 0x0d, 0xa2, 0xd8, 0x05, - 0x89, 0xf4, 0xcb, 0xb5, 0xcf, 0xa2, 0x3a, 0x7a, 0x17, 0x26, 0xb7, 0xdc, 0x30, 0x8a, 0xa9, 0x68, - 0x18, 0xc5, 0xce, 0x6e, 0xfb, 0x21, 0x24, 0x4a, 0x35, 0x0e, 0x2b, 0x06, 0x25, 0x9c, 0xa2, 0x8c, - 0x5a, 0x30, 0x41, 0x85, 0x9c, 0xa4, 0xa9, 0x91, 0x63, 0x37, 0xa5, 0x54, 0x46, 0xb7, 0x75, 0x42, - 0xd8, 0xa4, 0x4b, 0x0f, 0x93, 0x06, 0x13, 0x8a, 0x46, 0x19, 0x47, 0xa1, 0x0e, 0x13, 0x2e, 0x0d, - 0x71, 0x18, 0x3d, 0x93, 0x98, 0xd9, 0x4a, 0xd9, 0x3c, 0x93, 0x34, 0xe3, 0x94, 0x2f, 0x43, 0x99, - 0xd0, 0x21, 0xa4, 0x84, 0x85, 0x62, 0xfc, 0xda, 0x60, 0x7d, 0x5d, 0x73, 0x1b, 0x61, 0x60, 0xca, - 0xf2, 0xcb, 0x92, 0x12, 0x4e, 0x88, 0xa2, 0x25, 0x18, 0x8e, 0x48, 0xe8, 0x92, 0x48, 0xa8, 0xc8, - 0x7b, 0x4c, 0x23, 0x43, 0xe3, 0xb6, 0xe7, 0xfc, 0x37, 0x16, 0x55, 0xe9, 0xf2, 0x72, 0x98, 0x34, - 0xc4, 0xb4, 0xe2, 0xda, 0xf2, 0x5a, 0x60, 0xa5, 0x58, 0x40, 0xd1, 0x1b, 0x30, 0x12, 0x12, 0x8f, - 0x29, 0x8b, 0x26, 0x06, 0x5f, 0xe4, 0x5c, 0xf7, 0xc4, 0xeb, 0x61, 0x49, 0x00, 0xdd, 0x02, 0x14, - 0x12, 0xca, 0x43, 0xb8, 0x7e, 0x4b, 0x19, 0x73, 0x08, 0x5d, 0xf7, 0xe3, 0xa2, 0xfd, 0x33, 0x38, - 0xc1, 0x90, 0x56, 0xa9, 0x38, 0xa3, 0x1a, 0xba, 0x01, 0x33, 0xaa, 0x74, 0xd5, 0x8f, 0x62, 0xc7, - 0x6f, 0x10, 0xa6, 0xe6, 0x2e, 0x27, 0x5c, 0x11, 0x4e, 0x23, 0xe0, 0xee, 0x3a, 0xf6, 0xcf, 0x51, - 0x76, 0x86, 0x8e, 0xd6, 0x29, 0xf0, 0x02, 0xaf, 0x9b, 0xbc, 0xc0, 0x85, 0xdc, 0x99, 0xcb, 0xe1, - 0x03, 0x0e, 0x2d, 0x18, 0xd3, 0x66, 0x36, 0x59, 0xb3, 0x56, 0x8f, 0x35, 0xdb, 0x81, 0x69, 0xba, - 0xd2, 0xef, 0x6c, 0x46, 0x24, 0xdc, 0x23, 0x4d, 0xb6, 0x30, 0x0b, 0x0f, 0xb7, 0x30, 0xd5, 0x2b, - 0xf3, 0xed, 0x14, 0x41, 0xdc, 0xd5, 0x04, 0x7a, 0x45, 0x6a, 0x4e, 0x8a, 0x86, 0x91, 0x16, 0xd7, - 0x8a, 0x1c, 0x1d, 0x54, 0xa6, 0xb5, 0x0f, 0xd1, 0x35, 0x25, 0xf6, 0x97, 0xe5, 0x37, 0xaa, 0xd7, - 0xfc, 0x86, 0x5a, 0x2c, 0xa9, 0xd7, 0x7c, 0xb5, 0x1c, 0x70, 0x82, 0x43, 0xf7, 0x28, 0x15, 0x41, - 0xd2, 0xaf, 0xf9, 0x54, 0x40, 0xc1, 0x0c, 0x62, 0xbf, 0x08, 0xb0, 0xfc, 0x80, 0x34, 0xf8, 0x52, - 0xd7, 0x1f, 0x20, 0xad, 0xfc, 0x07, 0x48, 0xfb, 0xdf, 0x5b, 0x30, 0xb9, 0xb2, 0x64, 0x88, 0x89, - 0xf3, 0x00, 0x5c, 0x36, 0x7a, 0xeb, 0xad, 0x75, 0xa9, 0x5b, 0xe7, 0xea, 0x51, 0x55, 0x8a, 0x35, - 0x0c, 0x74, 0x01, 0x8a, 0x5e, 0xc7, 0x17, 0x22, 0xcb, 0xc8, 0xe1, 0x41, 0xa5, 0x78, 0xbb, 0xe3, - 0x63, 0x5a, 0xa6, 0x59, 0x08, 0x16, 0x07, 0xb6, 0x10, 0xec, 0xeb, 0x5e, 0x85, 0x2a, 0x30, 0x74, - 0xff, 0xbe, 0xdb, 0xe4, 0x46, 0xec, 0x42, 0xef, 0xff, 0xd6, 0x5b, 0xab, 0xd5, 0x08, 0xf3, 0x72, - 0xfb, 0xab, 0x45, 0x98, 0x5b, 0xf1, 0xc8, 0x83, 0x0f, 0x68, 0xc8, 0x3f, 0xa8, 0x7d, 0xe3, 0xf1, - 0xf8, 0xc5, 0xe3, 0xda, 0xb0, 0xf6, 0x1f, 0x8f, 0x2d, 0x18, 0xe1, 0x8f, 0xd9, 0xd2, 0xac, 0xff, - 0xb5, 0xac, 0xd6, 0xf3, 0x07, 0x64, 0x9e, 0x3f, 0x8a, 0x0b, 0x73, 0x7e, 0x75, 0xd3, 0x8a, 0x52, - 0x2c, 0x89, 0xcf, 0x7d, 0x06, 0xc6, 0x75, 0xcc, 0x63, 0x59, 0x93, 0xff, 0xa5, 0x22, 0x4c, 0xd3, - 0x1e, 0x3c, 0xd2, 0x89, 0xb8, 0xdb, 0x3d, 0x11, 0x27, 0x6d, 0x51, 0xdc, 0x7f, 0x36, 0xde, 0x49, - 0xcf, 0xc6, 0x0b, 0x79, 0xb3, 0x71, 0xda, 0x73, 0xf0, 0xbd, 0x16, 0x9c, 0x59, 0xf1, 0x82, 0xc6, - 0x4e, 0xca, 0xea, 0xf7, 0x65, 0x18, 0xa3, 0xe7, 0x78, 0x64, 0x78, 0x11, 0x19, 0x7e, 0x65, 0x02, - 0x84, 0x75, 0x3c, 0xad, 0xda, 0xdd, 0xbb, 0xab, 0xd5, 0x2c, 0x77, 0x34, 0x01, 0xc2, 0x3a, 0x9e, - 0xfd, 0x0d, 0x0b, 0x2e, 0xde, 0x58, 0x5a, 0x4e, 0x96, 0x62, 0x97, 0x47, 0x1c, 0x95, 0x02, 0x9b, - 0x5a, 0x57, 0x12, 0x29, 0xb0, 0xca, 0x7a, 0x21, 0xa0, 0x1f, 0x15, 0x6f, 0xcf, 0x9f, 0xb5, 0xe0, - 0xcc, 0x0d, 0x37, 0xa6, 0xd7, 0x72, 0xda, 0x37, 0x8b, 0xde, 0xcb, 0x91, 0x1b, 0x07, 0xe1, 0x7e, - 0xda, 0x37, 0x0b, 0x2b, 0x08, 0xd6, 0xb0, 0x78, 0xcb, 0x7b, 0x2e, 0x33, 0xa3, 0x2a, 0x98, 0xaa, - 0x28, 0x2c, 0xca, 0xb1, 0xc2, 0xa0, 0x1f, 0xd6, 0x74, 0x43, 0x26, 0x4a, 0xec, 0x8b, 0x13, 0x56, - 0x7d, 0x58, 0x55, 0x02, 0x70, 0x82, 0x63, 0xff, 0x84, 0x05, 0xe7, 0x6e, 0x78, 0x9d, 0x28, 0x26, - 0xe1, 0x56, 0x64, 0x74, 0xf6, 0x45, 0x28, 0x13, 0x29, 0xae, 0x8b, 0xbe, 0x2a, 0x06, 0x53, 0xc9, - 0xf1, 0xdc, 0x31, 0x4c, 0xe1, 0x0d, 0xe0, 0x39, 0x70, 0x3c, 0xd7, 0xb1, 0x5f, 0x2c, 0xc0, 0xc4, - 0xcd, 0x8d, 0x8d, 0xda, 0x0d, 0x12, 0x8b, 0x5b, 0xac, 0xbf, 0xaa, 0x19, 0x6b, 0x1a, 0xb3, 0x5e, - 0x42, 0x51, 0x27, 0x76, 0xbd, 0x79, 0xee, 0x89, 0x3c, 0xbf, 0xea, 0xc7, 0x77, 0xc2, 0x7a, 0x1c, - 0xba, 0x7e, 0x2b, 0x53, 0xc7, 0x26, 0xef, 0xda, 0x62, 0xde, 0x5d, 0x8b, 0x5e, 0x84, 0x61, 0xe6, - 0x0a, 0x2d, 0xc5, 0x93, 0xc7, 0x95, 0x4c, 0xc1, 0x4a, 0x8f, 0x0e, 0x2a, 0xe5, 0xbb, 0x78, 0x95, - 0xff, 0xc1, 0x02, 0x15, 0xdd, 0x85, 0xb1, 0xed, 0x38, 0x6e, 0xdf, 0x24, 0x4e, 0x93, 0x84, 0xf2, - 0x74, 0xb8, 0x94, 0x75, 0x3a, 0xd0, 0x41, 0xe0, 0x68, 0xc9, 0x86, 0x4a, 0xca, 0x22, 0xac, 0xd3, - 0xb1, 0xeb, 0x00, 0x09, 0xec, 0x84, 0xf4, 0x0b, 0xf6, 0x1f, 0x58, 0x30, 0xc2, 0xbd, 0xd2, 0x42, - 0xf4, 0x59, 0x28, 0x91, 0x07, 0xa4, 0x21, 0x38, 0xc7, 0xcc, 0x0e, 0x27, 0x8c, 0x07, 0xd7, 0x96, - 0xd3, 0xff, 0x98, 0xd5, 0x42, 0x37, 0x61, 0x84, 0xf6, 0xf6, 0x86, 0x72, 0xd1, 0x7b, 0x32, 0xef, - 0x8b, 0xd5, 0xb4, 0x73, 0x5e, 0x45, 0x14, 0x61, 0x59, 0x9d, 0x69, 0x7e, 0x1b, 0xed, 0x3a, 0x3d, - 0xc0, 0xe2, 0x5e, 0xf7, 0xec, 0xc6, 0x52, 0x8d, 0x23, 0x09, 0x6a, 0x5c, 0xf3, 0x2b, 0x0b, 0x71, - 0x42, 0xc4, 0xde, 0x80, 0x32, 0x9d, 0xd4, 0x05, 0xcf, 0x75, 0x7a, 0x2b, 0x9d, 0x9f, 0x85, 0xb2, - 0x54, 0x00, 0x47, 0xc2, 0xb1, 0x89, 0x51, 0x95, 0xfa, 0xe1, 0x08, 0x27, 0x70, 0x7b, 0x0b, 0xce, - 0xb2, 0x97, 0x7f, 0x27, 0xde, 0x36, 0xf6, 0x58, 0xff, 0xc5, 0xfc, 0x9c, 0x10, 0xc4, 0xf8, 0xcc, - 0xcc, 0x6a, 0xbe, 0x03, 0xe3, 0x92, 0x62, 0x22, 0x94, 0xd9, 0x7f, 0x54, 0x82, 0xc7, 0x57, 0xeb, - 0xf9, 0x0e, 0x8b, 0xaf, 0xc2, 0x38, 0x67, 0xd3, 0xe8, 0xd2, 0x76, 0x3c, 0xd1, 0xae, 0x7a, 0x17, - 0xdb, 0xd0, 0x60, 0xd8, 0xc0, 0x44, 0x17, 0xa1, 0xe8, 0xbe, 0xe7, 0xa7, 0xcd, 0x70, 0x57, 0xdf, - 0x5c, 0xc7, 0xb4, 0x9c, 0x82, 0x29, 0xc7, 0xc7, 0x8f, 0x52, 0x05, 0x56, 0x5c, 0xdf, 0xeb, 0x30, - 0xe9, 0x46, 0x8d, 0xc8, 0x5d, 0xf5, 0xe9, 0x39, 0x93, 0x38, 0xbb, 0x26, 0x4a, 0x02, 0xda, 0x69, - 0x05, 0xc5, 0x29, 0x6c, 0xed, 0x5c, 0x1f, 0x1a, 0x98, 0x6b, 0xec, 0xeb, 0xe9, 0x43, 0x19, 0xe2, - 0x36, 0xfb, 0xba, 0x88, 0x19, 0xb5, 0x09, 0x86, 0x98, 0x7f, 0x70, 0x84, 0x25, 0x8c, 0x4a, 0x60, - 0x8d, 0x6d, 0xa7, 0xbd, 0xd0, 0x89, 0xb7, 0xab, 0x6e, 0xd4, 0x08, 0xf6, 0x48, 0xb8, 0xcf, 0x84, - 0xe7, 0xd1, 0x44, 0x02, 0x53, 0x80, 0xa5, 0x9b, 0x0b, 0x35, 0x8a, 0x89, 0xbb, 0xeb, 0x98, 0x5c, - 0x21, 0x9c, 0x04, 0x57, 0xb8, 0x00, 0x53, 0xb2, 0x99, 0x3a, 0x89, 0xd8, 0x1d, 0x31, 0xc6, 0x3a, - 0xa6, 0x4c, 0x6d, 0x45, 0xb1, 0xea, 0x56, 0x1a, 0x1f, 0xbd, 0x02, 0x13, 0xae, 0xef, 0xc6, 0xae, - 0x13, 0x07, 0x21, 0xbb, 0x61, 0xb9, 0x9c, 0xcc, 0x2c, 0xd9, 0x56, 0x75, 0x00, 0x36, 0xf1, 0xec, - 0x3f, 0x2c, 0xc1, 0x0c, 0x9b, 0xb6, 0x6f, 0xad, 0xb0, 0x8f, 0xcc, 0x0a, 0xbb, 0xdb, 0xbd, 0xc2, - 0x4e, 0x82, 0xdd, 0xfd, 0x30, 0x97, 0xd9, 0xbb, 0x50, 0x56, 0xb6, 0xc0, 0xd2, 0x19, 0xc0, 0xca, - 0x71, 0x06, 0xe8, 0xcf, 0x7d, 0xc8, 0x67, 0xdc, 0x62, 0xe6, 0x33, 0xee, 0xdf, 0xb6, 0x20, 0x31, - 0x89, 0x44, 0x37, 0xa1, 0xdc, 0x0e, 0x98, 0xd9, 0x41, 0x28, 0x6d, 0x79, 0x1e, 0xcf, 0xbc, 0xa8, - 0xf8, 0xa5, 0xc8, 0xc7, 0xaf, 0x26, 0x6b, 0xe0, 0xa4, 0x32, 0x5a, 0x84, 0x91, 0x76, 0x48, 0xea, - 0x31, 0x73, 0x81, 0xed, 0x4b, 0x87, 0xaf, 0x11, 0x8e, 0x8f, 0x65, 0x45, 0xfb, 0x97, 0x2c, 0x00, - 0xfe, 0x52, 0xea, 0xf8, 0x2d, 0x72, 0x0a, 0xda, 0xdf, 0x2a, 0x94, 0xa2, 0x36, 0x69, 0xf4, 0x32, - 0x08, 0x49, 0xfa, 0x53, 0x6f, 0x93, 0x46, 0x32, 0xe0, 0xf4, 0x1f, 0x66, 0xb5, 0xed, 0xef, 0x03, - 0x98, 0x4c, 0xd0, 0x56, 0x63, 0xb2, 0x8b, 0x9e, 0x37, 0x5c, 0xe2, 0x2e, 0xa4, 0x5c, 0xe2, 0xca, - 0x0c, 0x5b, 0x53, 0x34, 0xbe, 0x0b, 0xc5, 0x5d, 0xe7, 0x81, 0xd0, 0x24, 0x3d, 0xdb, 0xbb, 0x1b, - 0x94, 0xfe, 0xfc, 0x9a, 0xf3, 0x80, 0xcb, 0x4c, 0xcf, 0xca, 0x05, 0xb2, 0xe6, 0x3c, 0x38, 0xe2, - 0x66, 0x1f, 0xec, 0x90, 0xba, 0xed, 0x46, 0xf1, 0x57, 0xfe, 0x53, 0xf2, 0x9f, 0x2d, 0x3b, 0xda, - 0x08, 0x6b, 0xcb, 0xf5, 0xc5, 0xbb, 0xe1, 0x40, 0x6d, 0xb9, 0x7e, 0xba, 0x2d, 0xd7, 0x1f, 0xa0, - 0x2d, 0xd7, 0x47, 0xef, 0xc3, 0x88, 0x78, 0xa3, 0x67, 0xb6, 0xde, 0xa6, 0x96, 0x2a, 0xaf, 0x3d, - 0xf1, 0xc4, 0xcf, 0xdb, 0xbc, 0x26, 0x65, 0x42, 0x51, 0xda, 0xb7, 0x5d, 0xd9, 0x20, 0xfa, 0x1b, - 0x16, 0x4c, 0x8a, 0xdf, 0x98, 0xbc, 0xd7, 0x21, 0x51, 0x2c, 0x78, 0xcf, 0x4f, 0x0f, 0xde, 0x07, - 0x51, 0x91, 0x77, 0xe5, 0xd3, 0xf2, 0x98, 0x35, 0x81, 0x7d, 0x7b, 0x94, 0xea, 0x05, 0xfa, 0x47, - 0x16, 0x9c, 0xdd, 0x75, 0x1e, 0xf0, 0x16, 0x79, 0x19, 0x76, 0x62, 0x37, 0x10, 0xb6, 0xeb, 0x9f, - 0x1d, 0x6c, 0xfa, 0xbb, 0xaa, 0xf3, 0x4e, 0x4a, 0x33, 0xd7, 0xb3, 0x59, 0x28, 0x7d, 0xbb, 0x9a, - 0xd9, 0xaf, 0xb9, 0x2d, 0x18, 0x95, 0xeb, 0x2d, 0x43, 0xf2, 0xae, 0xea, 0x8c, 0xf5, 0xb1, 0x4d, - 0x24, 0x74, 0xbf, 0x34, 0xda, 0x8e, 0x58, 0x6b, 0x8f, 0xb4, 0x9d, 0x77, 0x61, 0x5c, 0x5f, 0x63, - 0x8f, 0xb4, 0xad, 0xf7, 0xe0, 0x4c, 0xc6, 0x5a, 0x7a, 0xa4, 0x4d, 0xde, 0x87, 0x0b, 0xb9, 0xeb, - 0xe3, 0x51, 0x36, 0x6c, 0xff, 0xa2, 0xa5, 0x9f, 0x83, 0xa7, 0xa0, 0x82, 0x5f, 0x32, 0x55, 0xf0, - 0x97, 0x7a, 0xef, 0x9c, 0x1c, 0x3d, 0xfc, 0x3b, 0x7a, 0xa7, 0xe9, 0xa9, 0x8e, 0xde, 0x80, 0x61, - 0x8f, 0x96, 0x48, 0xe3, 0x10, 0xbb, 0xff, 0x8e, 0x4c, 0x78, 0x29, 0x56, 0x1e, 0x61, 0x41, 0xc1, - 0xfe, 0x55, 0x0b, 0x4a, 0xa7, 0x30, 0x12, 0xd8, 0x1c, 0x89, 0xe7, 0x73, 0x49, 0x8b, 0x90, 0x66, - 0xf3, 0xd8, 0xb9, 0xbf, 0xfc, 0x20, 0x26, 0x7e, 0xc4, 0x44, 0xc5, 0xcc, 0x81, 0xf9, 0x2e, 0x38, - 0x73, 0x3b, 0x70, 0x9a, 0x8b, 0x8e, 0xe7, 0xf8, 0x0d, 0x12, 0xae, 0xfa, 0xad, 0xbe, 0x56, 0x4a, - 0xba, 0x4d, 0x51, 0xa1, 0x9f, 0x4d, 0x91, 0xbd, 0x0d, 0x48, 0x6f, 0x40, 0xd8, 0x71, 0x62, 0x18, - 0x71, 0x79, 0x53, 0x62, 0xf8, 0x9f, 0xce, 0xe6, 0xee, 0xba, 0x7a, 0xa6, 0x59, 0x28, 0xf2, 0x02, - 0x2c, 0x09, 0xd9, 0xaf, 0x42, 0xa6, 0xef, 0x56, 0x7f, 0xb5, 0x81, 0xfd, 0x32, 0xcc, 0xb0, 0x9a, - 0xc7, 0x13, 0x69, 0xed, 0x1f, 0xb0, 0x60, 0x6a, 0x3d, 0x15, 0x9b, 0xe2, 0x0a, 0x7b, 0xeb, 0xcb, - 0xd0, 0xfb, 0xd6, 0x59, 0x29, 0x16, 0xd0, 0x13, 0xd7, 0x2f, 0xfd, 0x99, 0x05, 0x89, 0xab, 0xe4, - 0x29, 0x30, 0x55, 0x4b, 0x06, 0x53, 0x95, 0xa9, 0xf7, 0x50, 0xdd, 0xc9, 0xe3, 0xa9, 0xd0, 0x2d, - 0x15, 0x17, 0xa0, 0x87, 0xca, 0x23, 0x21, 0xc3, 0xbd, 0xc8, 0x27, 0xcd, 0xe0, 0x01, 0x32, 0x52, - 0x00, 0x33, 0x13, 0x52, 0xb8, 0x1f, 0x11, 0x33, 0x21, 0xd5, 0x9f, 0x9c, 0xdd, 0x57, 0xd3, 0xba, - 0xcc, 0x4e, 0xa5, 0x6f, 0x67, 0x66, 0xdf, 0x8e, 0xe7, 0xbe, 0x4f, 0x54, 0x70, 0x93, 0x8a, 0x30, - 0xe3, 0x16, 0xa5, 0x47, 0x07, 0x95, 0x09, 0xf5, 0x8f, 0x47, 0xc0, 0x4a, 0xaa, 0xd8, 0x37, 0x61, - 0x2a, 0x35, 0x60, 0xe8, 0x65, 0x18, 0x6a, 0x6f, 0x3b, 0x11, 0x49, 0x99, 0x46, 0x0e, 0xd5, 0x68, - 0xe1, 0xd1, 0x41, 0x65, 0x52, 0x55, 0x60, 0x25, 0x98, 0x63, 0xdb, 0xff, 0xd3, 0x82, 0xd2, 0x7a, - 0xd0, 0x3c, 0x8d, 0xc5, 0xf4, 0xba, 0xb1, 0x98, 0x9e, 0xc8, 0x8b, 0x1f, 0x98, 0xbb, 0x8e, 0x56, - 0x52, 0xeb, 0xe8, 0x52, 0x2e, 0x85, 0xde, 0x4b, 0x68, 0x17, 0xc6, 0x58, 0x54, 0x42, 0x61, 0xaa, - 0xf9, 0xa2, 0xc1, 0xdf, 0x57, 0x52, 0xfc, 0xfd, 0x94, 0x86, 0xaa, 0x71, 0xf9, 0xcf, 0xc0, 0x88, - 0x30, 0x17, 0x4c, 0x1b, 0xb8, 0x0b, 0x5c, 0x2c, 0xe1, 0xf6, 0x4f, 0x16, 0xc1, 0x88, 0x82, 0x88, - 0x7e, 0xcd, 0x82, 0xf9, 0x90, 0x7b, 0x0c, 0x36, 0xab, 0x9d, 0xd0, 0xf5, 0x5b, 0xf5, 0xc6, 0x36, - 0x69, 0x76, 0x3c, 0xd7, 0x6f, 0xad, 0xb6, 0xfc, 0x40, 0x15, 0x2f, 0x3f, 0x20, 0x8d, 0x0e, 0xd3, - 0xf9, 0xf7, 0x09, 0xb9, 0xa8, 0xcc, 0x71, 0xae, 0x1f, 0x1e, 0x54, 0xe6, 0xf1, 0xb1, 0x68, 0xe3, - 0x63, 0xf6, 0x05, 0x7d, 0xc3, 0x82, 0x6b, 0x3c, 0x38, 0xe0, 0xe0, 0xfd, 0xef, 0x21, 0x0d, 0xd5, - 0x24, 0xa9, 0x84, 0xc8, 0x06, 0x09, 0x77, 0x17, 0x5f, 0x11, 0x03, 0x7a, 0xad, 0x76, 0xbc, 0xb6, - 0xf0, 0x71, 0x3b, 0x67, 0xff, 0xcb, 0x22, 0x4c, 0x08, 0x67, 0x75, 0x11, 0x05, 0xe5, 0x65, 0x63, - 0x49, 0x3c, 0x99, 0x5a, 0x12, 0x33, 0x06, 0xf2, 0xc9, 0x04, 0x40, 0x89, 0x60, 0xc6, 0x73, 0xa2, - 0xf8, 0x26, 0x71, 0xc2, 0x78, 0x93, 0x38, 0xdc, 0x4c, 0xa5, 0x78, 0x6c, 0x93, 0x1a, 0xa5, 0x7e, - 0xb9, 0x9d, 0x26, 0x86, 0xbb, 0xe9, 0xa3, 0x3d, 0x40, 0xcc, 0xd6, 0x26, 0x74, 0xfc, 0x88, 0x7f, - 0x8b, 0x2b, 0xde, 0x03, 0x8e, 0xd7, 0xea, 0x9c, 0x68, 0x15, 0xdd, 0xee, 0xa2, 0x86, 0x33, 0x5a, - 0xd0, 0x6c, 0xa8, 0x86, 0x06, 0xb5, 0xa1, 0x1a, 0xee, 0xe3, 0x45, 0xe2, 0xc3, 0x74, 0x57, 0xbc, - 0x81, 0xb7, 0xa1, 0xac, 0x6c, 0xdd, 0xc4, 0xa1, 0xd3, 0x3b, 0x6c, 0x47, 0x9a, 0x02, 0x57, 0x91, - 0x24, 0x76, 0x96, 0x09, 0x39, 0xfb, 0x1f, 0x17, 0x8c, 0x06, 0xf9, 0x24, 0xae, 0xc3, 0xa8, 0x13, - 0x45, 0x6e, 0xcb, 0x27, 0x4d, 0xb1, 0x63, 0x3f, 0x9e, 0xb7, 0x63, 0x8d, 0x66, 0x98, 0xbd, 0xe1, - 0x82, 0xa8, 0x89, 0x15, 0x0d, 0x74, 0x93, 0x1b, 0x03, 0xed, 0x49, 0x7e, 0x7e, 0x30, 0x6a, 0x20, - 0xcd, 0x85, 0xf6, 0x08, 0x16, 0xf5, 0xd1, 0x17, 0xb9, 0xb5, 0xd6, 0x2d, 0x3f, 0xb8, 0xef, 0xdf, - 0x08, 0x02, 0xe9, 0x61, 0x36, 0x18, 0xc1, 0x19, 0x69, 0xa3, 0xa5, 0xaa, 0x63, 0x93, 0xda, 0x60, - 0x31, 0x79, 0xbe, 0x1b, 0xce, 0x50, 0xd2, 0xa6, 0x9f, 0x48, 0x84, 0x08, 0x4c, 0x89, 0x48, 0x08, - 0xb2, 0x4c, 0x8c, 0x5d, 0x26, 0xab, 0x6e, 0xd6, 0x4e, 0x14, 0x7a, 0xb7, 0x4c, 0x12, 0x38, 0x4d, - 0xd3, 0xfe, 0x19, 0x0b, 0x98, 0x85, 0xfb, 0x29, 0xb0, 0x0c, 0x9f, 0x33, 0x59, 0x86, 0xd9, 0xbc, - 0x41, 0xce, 0xe1, 0x16, 0x5e, 0xe2, 0x2b, 0xab, 0x16, 0x06, 0x0f, 0xf6, 0xc5, 0x4b, 0xf9, 0x00, - 0x5c, 0xea, 0xff, 0xb1, 0xf8, 0x21, 0xa6, 0x9c, 0xce, 0xd1, 0xf7, 0xc0, 0x68, 0xc3, 0x69, 0x3b, - 0x0d, 0x1e, 0xb2, 0x37, 0x57, 0x63, 0x63, 0x54, 0x9a, 0x5f, 0x12, 0x35, 0xb8, 0x06, 0x42, 0x46, - 0xd4, 0x18, 0x95, 0xc5, 0x7d, 0xb5, 0x0e, 0xaa, 0xc9, 0xb9, 0x1d, 0x98, 0x30, 0x88, 0x3d, 0x52, - 0x71, 0xf5, 0x7b, 0xf8, 0x15, 0xab, 0x22, 0xc0, 0xec, 0xc2, 0x8c, 0xaf, 0xfd, 0xa7, 0x17, 0x8a, - 0x14, 0x41, 0x3e, 0xde, 0xef, 0x12, 0x65, 0xb7, 0x8f, 0x66, 0xc1, 0x9f, 0x22, 0x83, 0xbb, 0x29, - 0xdb, 0x3f, 0x65, 0xc1, 0x63, 0x3a, 0xa2, 0x16, 0x0f, 0xa0, 0x9f, 0x0e, 0xb8, 0x0a, 0xa3, 0x41, - 0x9b, 0x84, 0x4e, 0x1c, 0x84, 0xe2, 0xd6, 0xb8, 0x2a, 0x07, 0xfd, 0x8e, 0x28, 0x3f, 0x12, 0xb1, - 0x13, 0x25, 0x75, 0x59, 0x8e, 0x55, 0x4d, 0x64, 0xc3, 0x30, 0x1b, 0x8c, 0x48, 0xc4, 0x6a, 0x60, - 0x67, 0x00, 0x7b, 0x0e, 0x8d, 0xb0, 0x80, 0xd8, 0x7f, 0x64, 0xf1, 0x85, 0xa5, 0x77, 0x1d, 0xbd, - 0x07, 0xd3, 0xbb, 0x4e, 0xdc, 0xd8, 0x5e, 0x7e, 0xd0, 0x0e, 0xb9, 0xea, 0x5b, 0x8e, 0xd3, 0xb3, - 0xfd, 0xc6, 0x49, 0xfb, 0xc8, 0xc4, 0x00, 0x6d, 0x2d, 0x45, 0x0c, 0x77, 0x91, 0x47, 0x9b, 0x30, - 0xc6, 0xca, 0x98, 0xa5, 0x73, 0xd4, 0x8b, 0x35, 0xc8, 0x6b, 0x4d, 0xbd, 0x28, 0xaf, 0x25, 0x74, - 0xb0, 0x4e, 0xd4, 0xfe, 0x4a, 0x91, 0xef, 0x76, 0xc6, 0x6d, 0x3f, 0x03, 0x23, 0xed, 0xa0, 0xb9, - 0xb4, 0x5a, 0xc5, 0x62, 0x16, 0xd4, 0x35, 0x52, 0xe3, 0xc5, 0x58, 0xc2, 0xd1, 0x6b, 0x00, 0xe4, - 0x41, 0x4c, 0x42, 0xdf, 0xf1, 0x94, 0x41, 0x88, 0x32, 0x81, 0xac, 0x06, 0xeb, 0x41, 0x7c, 0x37, - 0x22, 0xdf, 0xb5, 0xac, 0x50, 0xb0, 0x86, 0x8e, 0xae, 0x03, 0xb4, 0xc3, 0x60, 0xcf, 0x6d, 0x32, - 0xd7, 0xb9, 0xa2, 0x69, 0x2e, 0x51, 0x53, 0x10, 0xac, 0x61, 0xa1, 0xd7, 0x60, 0xa2, 0xe3, 0x47, - 0x9c, 0x43, 0x71, 0x36, 0x45, 0xe4, 0xc1, 0xd1, 0xc4, 0x72, 0xe1, 0xae, 0x0e, 0xc4, 0x26, 0x2e, - 0x5a, 0x80, 0xe1, 0xd8, 0x61, 0xf6, 0x0e, 0x43, 0xf9, 0x76, 0x8b, 0x1b, 0x14, 0x43, 0x0f, 0x18, - 0x4b, 0x2b, 0x60, 0x51, 0x11, 0xbd, 0x2d, 0xfd, 0x10, 0xf8, 0x59, 0x2f, 0x0c, 0x86, 0x07, 0xbb, - 0x17, 0x34, 0x2f, 0x04, 0x61, 0x88, 0x6c, 0xd0, 0xb2, 0xbf, 0x51, 0x06, 0x48, 0xd8, 0x71, 0xf4, - 0x7e, 0xd7, 0x79, 0xf4, 0x5c, 0x6f, 0x06, 0xfe, 0xe4, 0x0e, 0x23, 0xf4, 0xfd, 0x16, 0x8c, 0x39, - 0x9e, 0x17, 0x34, 0x9c, 0x98, 0x8d, 0x72, 0xa1, 0xf7, 0x79, 0x28, 0xda, 0x5f, 0x48, 0x6a, 0xf0, - 0x2e, 0xbc, 0x28, 0x17, 0x9e, 0x06, 0xe9, 0xdb, 0x0b, 0xbd, 0x61, 0xf4, 0x29, 0x29, 0xa5, 0xf1, - 0xe5, 0x31, 0x97, 0x96, 0xd2, 0xca, 0xec, 0xe8, 0xd7, 0x04, 0x34, 0x74, 0xd7, 0x08, 0x2a, 0x57, - 0xca, 0x8f, 0xaf, 0x60, 0x70, 0xa5, 0xfd, 0xe2, 0xc9, 0xa1, 0x9a, 0xee, 0x38, 0x35, 0x94, 0x1f, - 0x84, 0x44, 0x13, 0x7f, 0xfa, 0x38, 0x4d, 0xbd, 0x0b, 0x53, 0x4d, 0xf3, 0x6e, 0x17, 0xab, 0xe9, - 0xe9, 0x3c, 0xba, 0x29, 0x56, 0x20, 0xb9, 0xcd, 0x53, 0x00, 0x9c, 0x26, 0x8c, 0x6a, 0xdc, 0x85, - 0x6d, 0xd5, 0xdf, 0x0a, 0x84, 0xe1, 0xb9, 0x9d, 0x3b, 0x97, 0xfb, 0x51, 0x4c, 0x76, 0x29, 0x66, - 0x72, 0x69, 0xaf, 0x8b, 0xba, 0x58, 0x51, 0x41, 0x6f, 0xc0, 0x30, 0xf3, 0x81, 0x8d, 0x66, 0x47, - 0xf3, 0x15, 0x85, 0x66, 0xf8, 0x86, 0x64, 0x53, 0xb1, 0xbf, 0x11, 0x16, 0x14, 0xd0, 0x4d, 0x19, - 0xe3, 0x25, 0x5a, 0xf5, 0xef, 0x46, 0x84, 0xc5, 0x78, 0x29, 0x2f, 0x7e, 0x3c, 0x09, 0xdf, 0xc2, - 0xcb, 0x33, 0x43, 0xc3, 0x1b, 0x35, 0x29, 0x73, 0x24, 0xfe, 0xcb, 0x88, 0xf3, 0xb3, 0x90, 0xdf, - 0x3d, 0x33, 0x2a, 0x7d, 0x32, 0x9c, 0xf7, 0x4c, 0x12, 0x38, 0x4d, 0x93, 0x32, 0x9a, 0x7c, 0xe7, - 0x0a, 0xd3, 0xf5, 0x7e, 0xfb, 0x9f, 0xcb, 0xd7, 0xec, 0x92, 0xe1, 0x25, 0x58, 0xd4, 0x3f, 0xd5, - 0x5b, 0x7f, 0xce, 0x87, 0xe9, 0xf4, 0x16, 0x7d, 0xa4, 0x5c, 0xc6, 0x1f, 0x94, 0x60, 0xd2, 0x5c, - 0x52, 0xe8, 0x1a, 0x94, 0x05, 0x11, 0x15, 0x70, 0x54, 0xed, 0x92, 0x35, 0x09, 0xc0, 0x09, 0x0e, - 0x8b, 0x33, 0xcb, 0xaa, 0x6b, 0x26, 0x87, 0x49, 0x9c, 0x59, 0x05, 0xc1, 0x1a, 0x16, 0x95, 0x97, - 0x36, 0x83, 0x20, 0x56, 0x97, 0x8a, 0x5a, 0x77, 0x8b, 0xac, 0x14, 0x0b, 0x28, 0xbd, 0x4c, 0x76, - 0x48, 0xe8, 0x13, 0xcf, 0x8c, 0x63, 0xa6, 0x2e, 0x93, 0x5b, 0x3a, 0x10, 0x9b, 0xb8, 0xf4, 0x96, - 0x0c, 0x22, 0xb6, 0x90, 0x85, 0x54, 0x96, 0x98, 0x70, 0xd6, 0xb9, 0x37, 0xb9, 0x84, 0xa3, 0x2f, - 0xc0, 0x63, 0xca, 0xf9, 0x1b, 0x73, 0x25, 0xb4, 0x6c, 0x71, 0xd8, 0x50, 0xa2, 0x3c, 0xb6, 0x94, - 0x8d, 0x86, 0xf3, 0xea, 0xa3, 0xd7, 0x61, 0x52, 0x70, 0xee, 0x92, 0xe2, 0x88, 0x69, 0x17, 0x71, - 0xcb, 0x80, 0xe2, 0x14, 0xb6, 0x8c, 0xc4, 0xc6, 0x98, 0x67, 0x49, 0x61, 0xb4, 0x3b, 0x12, 0x9b, - 0x0e, 0xc7, 0x5d, 0x35, 0xd0, 0x02, 0x4c, 0x71, 0xd6, 0xca, 0xf5, 0x5b, 0x7c, 0x4e, 0x84, 0x67, - 0x89, 0xda, 0x52, 0x77, 0x4c, 0x30, 0x4e, 0xe3, 0xa3, 0x57, 0x61, 0xdc, 0x09, 0x1b, 0xdb, 0x6e, - 0x4c, 0x1a, 0x71, 0x27, 0xe4, 0x2e, 0x27, 0x9a, 0x61, 0xc9, 0x82, 0x06, 0xc3, 0x06, 0xa6, 0xfd, - 0x3e, 0x9c, 0xc9, 0x70, 0x4a, 0xa3, 0x0b, 0xc7, 0x69, 0xbb, 0xf2, 0x9b, 0x52, 0xc6, 0x98, 0x0b, - 0xb5, 0x55, 0xf9, 0x35, 0x1a, 0x16, 0x5d, 0x9d, 0xcc, 0x79, 0x4d, 0x4b, 0x30, 0xa1, 0x56, 0xe7, - 0x8a, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x5f, 0x05, 0x98, 0xca, 0x50, 0xac, 0xb3, 0x24, 0x07, 0x29, - 0xd9, 0x23, 0xc9, 0x69, 0x60, 0x06, 0xf6, 0x2b, 0x1c, 0x23, 0xb0, 0x5f, 0xb1, 0x5f, 0x60, 0xbf, - 0xd2, 0x07, 0x09, 0xec, 0x67, 0x8e, 0xd8, 0xd0, 0x40, 0x23, 0x96, 0x11, 0x0c, 0x70, 0xf8, 0x98, - 0xc1, 0x00, 0x8d, 0x41, 0x1f, 0x19, 0x60, 0xd0, 0x7f, 0xb4, 0x00, 0xd3, 0x69, 0x03, 0xb8, 0x53, - 0x50, 0xc7, 0xbe, 0x61, 0xa8, 0x63, 0xb3, 0x53, 0x86, 0xa4, 0xcd, 0xf2, 0xf2, 0x54, 0xb3, 0x38, - 0xa5, 0x9a, 0xfd, 0xe4, 0x40, 0xd4, 0x7a, 0xab, 0x69, 0xff, 0x6e, 0x01, 0xce, 0xa5, 0xab, 0x2c, - 0x79, 0x8e, 0xbb, 0x7b, 0x0a, 0x63, 0x73, 0xc7, 0x18, 0x9b, 0xe7, 0x07, 0xf9, 0x1a, 0xd6, 0xb5, - 0xdc, 0x01, 0x7a, 0x2b, 0x35, 0x40, 0xd7, 0x06, 0x27, 0xd9, 0x7b, 0x94, 0xbe, 0x59, 0x84, 0x4b, - 0x99, 0xf5, 0x12, 0x6d, 0xe6, 0x8a, 0xa1, 0xcd, 0xbc, 0x9e, 0xd2, 0x66, 0xda, 0xbd, 0x6b, 0x9f, - 0x8c, 0x7a, 0x53, 0x78, 0x0b, 0xb2, 0xe0, 0x6f, 0x0f, 0xa9, 0xda, 0x34, 0xbc, 0x05, 0x15, 0x21, - 0x6c, 0xd2, 0xfd, 0x8b, 0xa4, 0xd2, 0xfc, 0x37, 0x16, 0x5c, 0xc8, 0x9c, 0x9b, 0x53, 0x50, 0x61, - 0xad, 0x9b, 0x2a, 0xac, 0x67, 0x06, 0x5e, 0xad, 0x39, 0x3a, 0xad, 0x3f, 0x2c, 0xe6, 0x7c, 0x0b, - 0x13, 0xd0, 0xef, 0xc0, 0x98, 0xd3, 0x68, 0x90, 0x28, 0x5a, 0x0b, 0x9a, 0x2a, 0x18, 0xda, 0xf3, - 0x4c, 0xce, 0x4a, 0x8a, 0x8f, 0x0e, 0x2a, 0x73, 0x69, 0x12, 0x09, 0x18, 0xeb, 0x14, 0xcc, 0xf8, - 0x8d, 0x85, 0x13, 0x8d, 0xdf, 0x78, 0x1d, 0x60, 0x4f, 0x71, 0xeb, 0x69, 0x21, 0x5f, 0xe3, 0xe3, - 0x35, 0x2c, 0xf4, 0x45, 0x18, 0x8d, 0xc4, 0x35, 0x2e, 0x96, 0xe2, 0x8b, 0x03, 0xce, 0x95, 0xb3, - 0x49, 0x3c, 0xd3, 0x2d, 0x5d, 0xe9, 0x43, 0x14, 0x49, 0xf4, 0x1d, 0x30, 0x1d, 0xf1, 0xa8, 0x27, - 0x4b, 0x9e, 0x13, 0x31, 0x1f, 0x07, 0xb1, 0x0a, 0x99, 0xaf, 0x79, 0x3d, 0x05, 0xc3, 0x5d, 0xd8, - 0x68, 0x45, 0x7e, 0x14, 0x0b, 0xd1, 0xc2, 0x17, 0xe6, 0x95, 0xe4, 0x83, 0x44, 0x8a, 0xa5, 0xb3, - 0xe9, 0xe1, 0x67, 0x03, 0xaf, 0xd5, 0xb4, 0x7f, 0xb4, 0x04, 0x8f, 0xf7, 0x38, 0xc4, 0xd0, 0x82, - 0xf9, 0x46, 0xf9, 0x6c, 0x5a, 0xfa, 0x9d, 0xcb, 0xac, 0x6c, 0x88, 0xc3, 0xa9, 0xb5, 0x52, 0xf8, - 0xc0, 0x6b, 0xe5, 0x87, 0x2c, 0x4d, 0x2f, 0xc1, 0x2d, 0xe9, 0x3e, 0x77, 0xcc, 0xc3, 0xf9, 0x04, - 0x15, 0x15, 0x5b, 0x19, 0xd2, 0xfe, 0xf5, 0x81, 0xbb, 0x33, 0xb0, 0xf8, 0x7f, 0xba, 0xda, 0xd9, - 0xaf, 0x58, 0xf0, 0x64, 0x66, 0x7f, 0x0d, 0x9b, 0x8a, 0x6b, 0x50, 0x6e, 0xd0, 0x42, 0xcd, 0x6f, - 0x2a, 0x71, 0x28, 0x95, 0x00, 0x9c, 0xe0, 0x18, 0xa6, 0x13, 0x85, 0xbe, 0xa6, 0x13, 0xff, 0xc2, - 0x82, 0xae, 0x05, 0x7c, 0x0a, 0x27, 0xe9, 0xaa, 0x79, 0x92, 0x7e, 0x7c, 0x90, 0xb9, 0xcc, 0x39, - 0x44, 0xff, 0xf3, 0x14, 0x9c, 0xcf, 0x71, 0x94, 0xd8, 0x83, 0x99, 0x56, 0x83, 0x98, 0x1e, 0x69, - 0xe2, 0x63, 0x32, 0x9d, 0xf7, 0x7a, 0xba, 0xaf, 0xb1, 0xdc, 0x38, 0x33, 0x5d, 0x28, 0xb8, 0xbb, - 0x09, 0xf4, 0x15, 0x0b, 0xce, 0x3a, 0xf7, 0xa3, 0xae, 0x0c, 0x88, 0x62, 0xcd, 0xbc, 0x94, 0xa9, - 0xa5, 0xe8, 0x93, 0x31, 0x91, 0x27, 0x0b, 0xca, 0xc2, 0xc2, 0x99, 0x6d, 0x21, 0x2c, 0xe2, 0x57, - 0x52, 0x7e, 0xbb, 0x87, 0xcf, 0x64, 0x96, 0x47, 0x0b, 0x3f, 0x53, 0x25, 0x04, 0x2b, 0x3a, 0xe8, - 0x1e, 0x94, 0x5b, 0xd2, 0xcd, 0x4c, 0x9c, 0xd9, 0x99, 0x97, 0x60, 0xa6, 0x2f, 0x1a, 0x7f, 0x37, - 0x54, 0x20, 0x9c, 0x90, 0x42, 0xaf, 0x43, 0xd1, 0xdf, 0x8a, 0x7a, 0x65, 0xd9, 0x49, 0x99, 0x1a, - 0x71, 0x7f, 0xe4, 0xf5, 0x95, 0x3a, 0xa6, 0x15, 0xd1, 0x4d, 0x28, 0x86, 0x9b, 0x4d, 0xa1, 0x58, - 0xcb, 0xe4, 0x4b, 0xf1, 0x62, 0x35, 0x7b, 0x91, 0x70, 0x4a, 0x78, 0xb1, 0x8a, 0x29, 0x09, 0x54, - 0x83, 0x21, 0xe6, 0x53, 0x20, 0xf4, 0x67, 0x99, 0x0c, 0x69, 0x0f, 0xdf, 0x1c, 0xee, 0xb4, 0xcc, - 0x10, 0x30, 0x27, 0x84, 0x36, 0x60, 0xb8, 0xc1, 0x32, 0xb2, 0x88, 0x90, 0xc9, 0x9f, 0xca, 0x54, - 0xa1, 0xf5, 0x48, 0x55, 0x23, 0x34, 0x4a, 0x0c, 0x03, 0x0b, 0x5a, 0x8c, 0x2a, 0x69, 0x6f, 0x6f, - 0x45, 0x4c, 0x04, 0xcf, 0xa3, 0xda, 0x23, 0x03, 0x93, 0xa0, 0xca, 0x30, 0xb0, 0xa0, 0x85, 0x3e, - 0x03, 0x85, 0xad, 0x86, 0x70, 0x39, 0xc8, 0xd4, 0xa5, 0x99, 0x2e, 0xe5, 0x8b, 0xc3, 0x87, 0x07, - 0x95, 0xc2, 0xca, 0x12, 0x2e, 0x6c, 0x35, 0xd0, 0x3a, 0x8c, 0x6c, 0x71, 0x27, 0x54, 0xa1, 0x2e, - 0x7b, 0x3a, 0xdb, 0x3f, 0xb6, 0xcb, 0x4f, 0x95, 0x9b, 0xca, 0x0b, 0x00, 0x96, 0x44, 0x58, 0x10, - 0x48, 0xe5, 0x4c, 0x2b, 0xa2, 0x21, 0xcf, 0x1f, 0xcf, 0x01, 0x9a, 0xbb, 0xb7, 0x27, 0x2e, 0xb9, - 0x58, 0xa3, 0x88, 0xbe, 0x0c, 0x65, 0x47, 0xe6, 0xde, 0x13, 0xd1, 0x22, 0x5e, 0xcc, 0xdc, 0x98, - 0xbd, 0xd3, 0x12, 0xf2, 0x55, 0xad, 0x90, 0x70, 0x42, 0x14, 0xed, 0xc0, 0xc4, 0x5e, 0xd4, 0xde, - 0x26, 0x72, 0x23, 0xb3, 0xe0, 0x11, 0x39, 0x17, 0xd7, 0x3d, 0x81, 0xe8, 0x86, 0x71, 0xc7, 0xf1, - 0xba, 0xce, 0x1e, 0xf6, 0xd8, 0x7c, 0x4f, 0x27, 0x86, 0x4d, 0xda, 0x74, 0xf8, 0xdf, 0xeb, 0x04, - 0x9b, 0xfb, 0x31, 0x11, 0xe1, 0x93, 0x33, 0x87, 0xff, 0x4d, 0x8e, 0xd2, 0x3d, 0xfc, 0x02, 0x80, - 0x25, 0x11, 0xba, 0xd5, 0x1d, 0x99, 0xd7, 0x92, 0x85, 0x4d, 0xce, 0xd9, 0xea, 0x99, 0xc9, 0x2f, - 0xb5, 0x41, 0x61, 0x67, 0x64, 0x42, 0x8a, 0x9d, 0x8d, 0xed, 0xed, 0x20, 0x0e, 0xfc, 0xd4, 0xb9, - 0x3c, 0x93, 0x7f, 0x36, 0xd6, 0x32, 0xf0, 0xbb, 0xcf, 0xc6, 0x2c, 0x2c, 0x9c, 0xd9, 0x16, 0x6a, - 0xc2, 0x64, 0x3b, 0x08, 0xe3, 0xfb, 0x41, 0x28, 0xd7, 0x17, 0xea, 0x21, 0xee, 0x1b, 0x98, 0xa2, - 0x45, 0x16, 0xce, 0xdb, 0x84, 0xe0, 0x14, 0x4d, 0xf4, 0x79, 0x18, 0x89, 0x1a, 0x8e, 0x47, 0x56, - 0xef, 0xcc, 0x9e, 0xc9, 0xbf, 0x74, 0xea, 0x1c, 0x25, 0x67, 0x75, 0xb1, 0xc9, 0x11, 0x28, 0x58, - 0x92, 0x43, 0x2b, 0x30, 0xc4, 0x62, 0xf2, 0xb3, 0xc8, 0xcf, 0x39, 0x51, 0x89, 0xba, 0x8c, 0x3a, - 0xf9, 0xd9, 0xc4, 0x8a, 0x31, 0xaf, 0x4e, 0xf7, 0x80, 0xe0, 0x7a, 0x83, 0x68, 0xf6, 0x5c, 0xfe, - 0x1e, 0x10, 0xcc, 0xf2, 0x9d, 0x7a, 0xaf, 0x3d, 0xa0, 0x90, 0x70, 0x42, 0x94, 0x9e, 0xcc, 0xf4, - 0x34, 0x3d, 0xdf, 0xc3, 0xce, 0x24, 0xf7, 0x2c, 0x65, 0x27, 0x33, 0x3d, 0x49, 0x29, 0x09, 0xfb, - 0xf7, 0x46, 0xba, 0x39, 0x15, 0x26, 0x27, 0xfd, 0x65, 0xab, 0xeb, 0x09, 0xed, 0xd3, 0x83, 0xaa, - 0x6d, 0x4e, 0x90, 0x47, 0xfd, 0x8a, 0x05, 0xe7, 0xdb, 0x99, 0x1f, 0x22, 0xae, 0xfd, 0xc1, 0xb4, - 0x3f, 0xfc, 0xd3, 0x55, 0x74, 0xf6, 0x6c, 0x38, 0xce, 0x69, 0x29, 0x2d, 0x07, 0x14, 0x3f, 0xb0, - 0x1c, 0xb0, 0x06, 0xa3, 0x8c, 0xb5, 0xec, 0x93, 0xa1, 0x2c, 0xed, 0x85, 0xc6, 0x18, 0x88, 0x25, - 0x51, 0x11, 0x2b, 0x12, 0xe8, 0x87, 0x2d, 0xb8, 0x98, 0xee, 0x3a, 0x26, 0x0c, 0x2c, 0x62, 0x99, - 0x73, 0x11, 0x6d, 0x45, 0x7c, 0xff, 0xc5, 0x5a, 0x2f, 0xe4, 0xa3, 0x7e, 0x08, 0xb8, 0x77, 0x63, - 0xa8, 0x9a, 0x21, 0x23, 0x0e, 0x9b, 0x7a, 0xf1, 0x01, 0xe4, 0xc4, 0x97, 0x60, 0x7c, 0x37, 0xe8, - 0xf8, 0xb1, 0x30, 0x4b, 0x11, 0x4e, 0x82, 0xec, 0x1d, 0x78, 0x4d, 0x2b, 0xc7, 0x06, 0x56, 0x4a, - 0xba, 0x1c, 0x7d, 0x58, 0xe9, 0x12, 0xbd, 0x93, 0xca, 0x43, 0x5d, 0xce, 0x8f, 0x99, 0x27, 0x04, - 0xf1, 0x63, 0x64, 0xa3, 0x3e, 0x5d, 0x89, 0xe8, 0xe7, 0xac, 0x0c, 0x56, 0x9e, 0xcb, 0xc8, 0x9f, - 0x35, 0x65, 0xe4, 0x2b, 0x69, 0x19, 0xb9, 0x4b, 0x27, 0x6a, 0x88, 0xc7, 0x83, 0x07, 0x5e, 0x1e, - 0x34, 0x92, 0x99, 0xed, 0xc1, 0xe5, 0x7e, 0xd7, 0x12, 0xb3, 0x4f, 0x6a, 0xaa, 0x17, 0xb0, 0xc4, - 0x3e, 0xa9, 0xb9, 0x5a, 0xc5, 0x0c, 0x32, 0x68, 0xa8, 0x0b, 0xfb, 0xbf, 0x59, 0x50, 0xac, 0x05, - 0xcd, 0x53, 0xd0, 0xf1, 0x7e, 0xce, 0xd0, 0xf1, 0x3e, 0x9e, 0x93, 0x1f, 0x3c, 0x57, 0xa3, 0xbb, - 0x9c, 0xd2, 0xe8, 0x5e, 0xcc, 0x23, 0xd0, 0x5b, 0x7f, 0xfb, 0xd3, 0x45, 0xd0, 0xb3, 0x99, 0xa3, - 0x7f, 0xf5, 0x30, 0xc6, 0xc1, 0xc5, 0x5e, 0x09, 0xce, 0x05, 0x65, 0x66, 0xd6, 0x24, 0xfd, 0xde, - 0xfe, 0x9c, 0xd9, 0x08, 0xbf, 0x45, 0xdc, 0xd6, 0x76, 0x4c, 0x9a, 0xe9, 0xcf, 0x39, 0x3d, 0x1b, - 0xe1, 0xff, 0x62, 0xc1, 0x54, 0xaa, 0x75, 0xe4, 0xc1, 0x84, 0xa7, 0x2b, 0xe8, 0xc4, 0x3a, 0x7d, - 0x28, 0xdd, 0x9e, 0xb0, 0xb1, 0xd4, 0x8a, 0xb0, 0x49, 0x1c, 0xcd, 0x03, 0xa8, 0x07, 0x34, 0xa9, - 0xf7, 0x62, 0x5c, 0xbf, 0x7a, 0x61, 0x8b, 0xb0, 0x86, 0x81, 0x5e, 0x86, 0xb1, 0x38, 0x68, 0x07, - 0x5e, 0xd0, 0xda, 0xbf, 0x45, 0x64, 0x70, 0x15, 0x65, 0x39, 0xb5, 0x91, 0x80, 0xb0, 0x8e, 0x67, - 0xff, 0x6c, 0x11, 0xd2, 0x19, 0xf0, 0xbf, 0xb5, 0x26, 0x3f, 0x9a, 0x6b, 0xf2, 0x9b, 0x16, 0x4c, - 0xd3, 0xd6, 0x99, 0x15, 0x87, 0xbc, 0x6c, 0x55, 0x02, 0x18, 0xab, 0x47, 0x02, 0x98, 0x2b, 0xf4, - 0xec, 0x6a, 0x06, 0x9d, 0x58, 0xe8, 0xcd, 0xb4, 0xc3, 0x89, 0x96, 0x62, 0x01, 0x15, 0x78, 0x24, - 0x0c, 0x85, 0x6b, 0x92, 0x8e, 0x47, 0xc2, 0x10, 0x0b, 0xa8, 0xcc, 0x0f, 0x53, 0xca, 0xc9, 0x0f, - 0xc3, 0x42, 0xc5, 0x89, 0xf7, 0x7e, 0xc1, 0xf6, 0x68, 0xa1, 0xe2, 0xa4, 0x21, 0x40, 0x82, 0x63, - 0xff, 0x62, 0x11, 0xc6, 0x6b, 0x41, 0x33, 0x79, 0xc2, 0x7a, 0xc9, 0x78, 0xc2, 0xba, 0x9c, 0x7a, - 0xc2, 0x9a, 0xd6, 0x71, 0xbf, 0xf5, 0x60, 0xf5, 0x61, 0x3d, 0x58, 0xfd, 0x73, 0x8b, 0xcd, 0x5a, - 0x75, 0xbd, 0x2e, 0xf2, 0xd3, 0xbe, 0x00, 0x63, 0xec, 0x40, 0x62, 0xbe, 0x70, 0xf2, 0x5d, 0x87, - 0x85, 0x7e, 0x5f, 0x4f, 0x8a, 0xb1, 0x8e, 0x83, 0xae, 0xc2, 0x68, 0x44, 0x9c, 0xb0, 0xb1, 0xad, - 0xce, 0x38, 0xf1, 0xea, 0xc1, 0xcb, 0xb0, 0x82, 0xa2, 0x37, 0x93, 0x28, 0x65, 0xc5, 0xfc, 0x4c, - 0xab, 0x7a, 0x7f, 0xf8, 0x16, 0xc9, 0x0f, 0x4d, 0x66, 0xbf, 0x05, 0xa8, 0x1b, 0x7f, 0x80, 0x78, - 0x44, 0x15, 0x33, 0x1e, 0x51, 0xb9, 0x2b, 0x16, 0xd1, 0x9f, 0x5a, 0x30, 0x59, 0x0b, 0x9a, 0x74, - 0xeb, 0xfe, 0x45, 0xda, 0xa7, 0x7a, 0x88, 0xc6, 0xe1, 0x1e, 0x21, 0x1a, 0xff, 0x9e, 0x05, 0x23, - 0xb5, 0xa0, 0x79, 0x0a, 0xda, 0xf6, 0xcf, 0x9a, 0xda, 0xf6, 0xc7, 0x72, 0x96, 0x44, 0x8e, 0x82, - 0xfd, 0x97, 0x8b, 0x30, 0x41, 0xfb, 0x19, 0xb4, 0xe4, 0x2c, 0x19, 0x23, 0x62, 0x0d, 0x30, 0x22, - 0x94, 0xcd, 0x0d, 0x3c, 0x2f, 0xb8, 0x9f, 0x9e, 0xb1, 0x15, 0x56, 0x8a, 0x05, 0x14, 0x3d, 0x07, - 0xa3, 0xed, 0x90, 0xec, 0xb9, 0x81, 0xe0, 0x1f, 0xb5, 0xb7, 0x8b, 0x9a, 0x28, 0xc7, 0x0a, 0x83, - 0xca, 0x5d, 0x91, 0xeb, 0x37, 0x88, 0x4c, 0xf3, 0x5c, 0x62, 0x99, 0xa0, 0x78, 0xec, 0x65, 0xad, - 0x1c, 0x1b, 0x58, 0xe8, 0x2d, 0x28, 0xb3, 0xff, 0xec, 0x44, 0x39, 0x7e, 0xe6, 0x1a, 0x91, 0xf0, - 0x40, 0x10, 0xc0, 0x09, 0x2d, 0x74, 0x1d, 0x20, 0x96, 0xf1, 0x79, 0x23, 0x11, 0x56, 0x46, 0xf1, - 0xda, 0x2a, 0x72, 0x6f, 0x84, 0x35, 0x2c, 0xf4, 0x2c, 0x94, 0x63, 0xc7, 0xf5, 0x6e, 0xbb, 0x3e, - 0x89, 0x98, 0xca, 0xb9, 0x28, 0xf3, 0x19, 0x88, 0x42, 0x9c, 0xc0, 0x29, 0xaf, 0xc3, 0x7c, 0xae, - 0x79, 0xde, 0xab, 0x51, 0x86, 0xcd, 0x78, 0x9d, 0xdb, 0xaa, 0x14, 0x6b, 0x18, 0xf6, 0xab, 0x70, - 0xae, 0x16, 0x34, 0x6b, 0x41, 0x18, 0xaf, 0x04, 0xe1, 0x7d, 0x27, 0x6c, 0xca, 0xf9, 0xab, 0xc8, - 0xd0, 0xfa, 0xf4, 0xec, 0x19, 0xe2, 0x3b, 0xd3, 0x08, 0x9a, 0xff, 0x22, 0xe3, 0x76, 0x8e, 0xe9, - 0x6b, 0xd1, 0x60, 0xf7, 0xae, 0x4a, 0x71, 0x77, 0xc3, 0x89, 0x09, 0xba, 0xc3, 0xd2, 0x62, 0x25, - 0x57, 0x90, 0xa8, 0xfe, 0x8c, 0x96, 0x16, 0x2b, 0x01, 0x66, 0xde, 0x59, 0x66, 0x7d, 0xfb, 0xd7, - 0x8b, 0xec, 0x34, 0x4a, 0x65, 0x7c, 0x43, 0x5f, 0x82, 0xc9, 0x88, 0xdc, 0x76, 0xfd, 0xce, 0x03, - 0x29, 0x84, 0xf7, 0xf0, 0x96, 0xa9, 0x2f, 0xeb, 0x98, 0x5c, 0x95, 0x67, 0x96, 0xe1, 0x14, 0x35, - 0x3a, 0x4f, 0x61, 0xc7, 0x5f, 0x88, 0xee, 0x46, 0x24, 0x14, 0x19, 0xc7, 0xd8, 0x3c, 0x61, 0x59, - 0x88, 0x13, 0x38, 0x5d, 0x97, 0xec, 0xcf, 0x7a, 0xe0, 0xe3, 0x20, 0x88, 0xe5, 0x4a, 0x66, 0x39, - 0x6b, 0xb4, 0x72, 0x6c, 0x60, 0xa1, 0x15, 0x40, 0x51, 0xa7, 0xdd, 0xf6, 0xd8, 0x7b, 0xbb, 0xe3, - 0xdd, 0x08, 0x83, 0x4e, 0x9b, 0xbf, 0x75, 0x16, 0x17, 0xcf, 0xd3, 0x2b, 0xac, 0xde, 0x05, 0xc5, - 0x19, 0x35, 0xe8, 0xe9, 0xb3, 0x15, 0xb1, 0xdf, 0x6c, 0x75, 0x17, 0x85, 0x7a, 0xbd, 0xce, 0x8a, - 0xb0, 0x84, 0xd1, 0xc5, 0xc4, 0x9a, 0xe7, 0x98, 0xc3, 0xc9, 0x62, 0xc2, 0xaa, 0x14, 0x6b, 0x18, - 0x68, 0x19, 0x46, 0xa2, 0xfd, 0xa8, 0x11, 0x8b, 0x20, 0x48, 0x39, 0xb9, 0x23, 0xeb, 0x0c, 0x45, - 0xcb, 0x67, 0xc0, 0xab, 0x60, 0x59, 0xd7, 0xfe, 0x1e, 0x76, 0x19, 0xb2, 0xfc, 0x54, 0x71, 0x27, - 0x24, 0x68, 0x17, 0x26, 0xda, 0x6c, 0xca, 0x45, 0xf4, 0x64, 0x31, 0x6f, 0x2f, 0x0d, 0x28, 0xd5, - 0xde, 0xa7, 0x07, 0x8d, 0xd2, 0x3a, 0x31, 0x71, 0xa1, 0xa6, 0x93, 0xc3, 0x26, 0x75, 0xfb, 0x07, - 0x67, 0xd8, 0x99, 0x5b, 0xe7, 0xa2, 0xea, 0x88, 0xb0, 0xf8, 0x15, 0x7c, 0xf9, 0x5c, 0xbe, 0xce, - 0x24, 0xf9, 0x22, 0x61, 0x35, 0x8c, 0x65, 0x5d, 0xf4, 0x26, 0x7b, 0x9b, 0xe6, 0x07, 0x5d, 0xbf, - 0x34, 0xc1, 0x1c, 0xcb, 0x78, 0x86, 0x16, 0x15, 0xb1, 0x46, 0x04, 0xdd, 0x86, 0x09, 0x91, 0xce, - 0x48, 0x28, 0xc5, 0x8a, 0x86, 0xd2, 0x63, 0x02, 0xeb, 0xc0, 0xa3, 0x74, 0x01, 0x36, 0x2b, 0xa3, - 0x16, 0x5c, 0xd4, 0x72, 0xfb, 0xdd, 0x08, 0x1d, 0xf6, 0x5e, 0xe9, 0xb2, 0x4d, 0xa4, 0x9d, 0x9b, - 0x4f, 0x1e, 0x1e, 0x54, 0x2e, 0x6e, 0xf4, 0x42, 0xc4, 0xbd, 0xe9, 0xa0, 0x3b, 0x70, 0x8e, 0x3b, - 0xd6, 0x55, 0x89, 0xd3, 0xf4, 0x5c, 0x5f, 0x1d, 0xcc, 0x7c, 0x1d, 0x5e, 0x38, 0x3c, 0xa8, 0x9c, - 0x5b, 0xc8, 0x42, 0xc0, 0xd9, 0xf5, 0xd0, 0x67, 0xa1, 0xdc, 0xf4, 0x23, 0x31, 0x06, 0xc3, 0x46, - 0xda, 0xca, 0x72, 0x75, 0xbd, 0xae, 0xbe, 0x3f, 0xf9, 0x83, 0x93, 0x0a, 0xa8, 0xc5, 0x15, 0x63, - 0x4a, 0x0e, 0x1d, 0xc9, 0x4f, 0x51, 0x2e, 0x96, 0x84, 0xe1, 0x5a, 0xc3, 0x35, 0xc2, 0xca, 0x34, - 0xd5, 0xf0, 0xba, 0x31, 0x08, 0xa3, 0x37, 0x00, 0x51, 0x46, 0xcd, 0x6d, 0x90, 0x85, 0x06, 0x0b, - 0x62, 0xcd, 0xf4, 0x88, 0xa3, 0x86, 0x2b, 0x03, 0xaa, 0x77, 0x61, 0xe0, 0x8c, 0x5a, 0xe8, 0x26, - 0x3d, 0xc8, 0xf4, 0x52, 0x61, 0x62, 0x2b, 0x99, 0xfb, 0xd9, 0x2a, 0x69, 0x87, 0xa4, 0xe1, 0xc4, - 0xa4, 0x69, 0x52, 0xc4, 0xa9, 0x7a, 0xf4, 0x2e, 0x55, 0xf9, 0x6c, 0xc0, 0x8c, 0x54, 0xd1, 0x9d, - 0xd3, 0x86, 0xca, 0xc5, 0xdb, 0x41, 0x14, 0xaf, 0x93, 0xf8, 0x7e, 0x10, 0xee, 0x88, 0xc0, 0x60, - 0x49, 0x8c, 0xca, 0x04, 0x84, 0x75, 0x3c, 0xca, 0x07, 0xb3, 0xc7, 0xe1, 0xd5, 0x2a, 0x7b, 0xa1, - 0x1b, 0x4d, 0xf6, 0xc9, 0x4d, 0x5e, 0x8c, 0x25, 0x5c, 0xa2, 0xae, 0xd6, 0x96, 0xd8, 0x6b, 0x5b, - 0x0a, 0x75, 0xb5, 0xb6, 0x84, 0x25, 0x1c, 0x91, 0xee, 0x94, 0xa0, 0x93, 0xf9, 0x5a, 0xcd, 0xee, - 0xeb, 0x60, 0xc0, 0xac, 0xa0, 0x3e, 0x4c, 0xab, 0x64, 0xa4, 0x3c, 0x62, 0x5a, 0x34, 0x3b, 0xc5, - 0x16, 0xc9, 0xe0, 0xe1, 0xd6, 0x94, 0x9e, 0x78, 0x35, 0x45, 0x09, 0x77, 0xd1, 0x36, 0x62, 0x87, - 0x4c, 0xf7, 0xcd, 0x47, 0x74, 0x0d, 0xca, 0x51, 0x67, 0xb3, 0x19, 0xec, 0x3a, 0xae, 0xcf, 0x1e, - 0xc7, 0x34, 0x26, 0xab, 0x2e, 0x01, 0x38, 0xc1, 0x41, 0x2b, 0x30, 0xea, 0x48, 0x25, 0x30, 0xca, - 0x0f, 0x26, 0xa0, 0x54, 0xbf, 0xdc, 0xbf, 0x56, 0xaa, 0x7d, 0x55, 0x5d, 0xf4, 0x1a, 0x4c, 0x08, - 0x77, 0x2a, 0x1e, 0x62, 0x81, 0x3d, 0x5e, 0x69, 0xf6, 0xf2, 0x75, 0x1d, 0x88, 0x4d, 0x5c, 0xf4, - 0x45, 0x98, 0xa4, 0x54, 0x92, 0x83, 0x6d, 0xf6, 0xec, 0x20, 0x27, 0xa2, 0x96, 0x67, 0x42, 0xaf, - 0x8c, 0x53, 0xc4, 0x50, 0x13, 0x9e, 0x70, 0x3a, 0x71, 0xc0, 0x14, 0xe9, 0xe6, 0xfa, 0xdf, 0x08, - 0x76, 0x88, 0xcf, 0xde, 0xb0, 0x46, 0x17, 0x2f, 0x1f, 0x1e, 0x54, 0x9e, 0x58, 0xe8, 0x81, 0x87, - 0x7b, 0x52, 0x41, 0x77, 0x61, 0x2c, 0x0e, 0x3c, 0x66, 0xb9, 0x4e, 0x59, 0x89, 0xf3, 0xf9, 0xb1, - 0x77, 0x36, 0x14, 0x9a, 0xae, 0x44, 0x52, 0x55, 0xb1, 0x4e, 0x07, 0x6d, 0xf0, 0x3d, 0xc6, 0xa2, - 0x92, 0x92, 0x68, 0xf6, 0xb1, 0xfc, 0x81, 0x51, 0xc1, 0x4b, 0xcd, 0x2d, 0x28, 0x6a, 0x62, 0x9d, - 0x0c, 0xba, 0x01, 0x33, 0xed, 0xd0, 0x0d, 0xd8, 0xc2, 0x56, 0x8f, 0x18, 0xb3, 0x66, 0x6a, 0x81, - 0x5a, 0x1a, 0x01, 0x77, 0xd7, 0xa1, 0x42, 0xa6, 0x2c, 0x9c, 0xbd, 0xc0, 0xf3, 0x54, 0x71, 0xc6, - 0x9b, 0x97, 0x61, 0x05, 0x45, 0x6b, 0xec, 0x5c, 0xe6, 0xe2, 0xe0, 0xec, 0x5c, 0x7e, 0x10, 0x06, - 0x5d, 0x6c, 0xe4, 0xfc, 0x92, 0xfa, 0x8b, 0x13, 0x0a, 0xf4, 0xde, 0x88, 0xb6, 0x9d, 0x90, 0xd4, - 0xc2, 0xa0, 0x41, 0x78, 0x67, 0xb8, 0xd1, 0xfc, 0xe3, 0x3c, 0x78, 0x22, 0xbd, 0x37, 0xea, 0x59, - 0x08, 0x38, 0xbb, 0x1e, 0x6a, 0x6a, 0xe9, 0x99, 0x29, 0x1b, 0x1a, 0xcd, 0x3e, 0xd1, 0xc3, 0xcc, - 0x28, 0xc5, 0xb3, 0x26, 0x6b, 0xd1, 0x28, 0x8e, 0x70, 0x8a, 0xe6, 0xdc, 0xb7, 0xc3, 0x4c, 0xd7, - 0x7d, 0x71, 0xac, 0xb8, 0xdd, 0x7f, 0x32, 0x04, 0x65, 0xa5, 0x0a, 0x47, 0xd7, 0xcc, 0x17, 0x8e, - 0x0b, 0xe9, 0x17, 0x8e, 0x51, 0xca, 0x91, 0xeb, 0x8f, 0x1a, 0x1b, 0x86, 0x51, 0x5c, 0x21, 0x3f, - 0x4b, 0x96, 0xce, 0x53, 0xf7, 0xf5, 0x80, 0xd3, 0x34, 0x1b, 0xc5, 0x81, 0x9f, 0x4a, 0x4a, 0x3d, - 0x95, 0x25, 0x03, 0x26, 0xa9, 0xa5, 0xc2, 0x7f, 0x3b, 0x68, 0xae, 0xd6, 0xd2, 0x59, 0x1b, 0x6b, - 0xb4, 0x10, 0x73, 0x18, 0x13, 0xdf, 0x28, 0x73, 0xc3, 0xc4, 0xb7, 0x91, 0x87, 0x14, 0xdf, 0x24, - 0x01, 0x9c, 0xd0, 0x42, 0x1e, 0xcc, 0x34, 0xcc, 0x84, 0x9b, 0xca, 0xeb, 0xed, 0xa9, 0xbe, 0xa9, - 0x2f, 0x3b, 0x5a, 0x76, 0xb3, 0xa5, 0x34, 0x15, 0xdc, 0x4d, 0x18, 0xbd, 0x06, 0xa3, 0xef, 0x05, - 0x11, 0xdb, 0x7c, 0xe2, 0x86, 0x97, 0xde, 0x41, 0xa3, 0x6f, 0xde, 0xa9, 0xb3, 0xf2, 0xa3, 0x83, - 0xca, 0x58, 0x2d, 0x68, 0xca, 0xbf, 0x58, 0x55, 0x40, 0x0f, 0xe0, 0x9c, 0x71, 0x2e, 0xaa, 0xee, - 0xc2, 0xe0, 0xdd, 0xbd, 0x28, 0x9a, 0x3b, 0xb7, 0x9a, 0x45, 0x09, 0x67, 0x37, 0x40, 0x0f, 0x1b, - 0x3f, 0x10, 0xc9, 0x6a, 0x25, 0x17, 0xc1, 0x98, 0x85, 0xb2, 0xee, 0x1b, 0x9e, 0x42, 0xc0, 0xdd, - 0x75, 0xec, 0xaf, 0xf1, 0x97, 0x03, 0xa1, 0x5f, 0x24, 0x51, 0xc7, 0x3b, 0x8d, 0x5c, 0x48, 0xcb, - 0x86, 0xea, 0xf3, 0xa1, 0x5f, 0xa7, 0x7e, 0xd3, 0x62, 0xaf, 0x53, 0x1b, 0x64, 0xb7, 0xed, 0x51, - 0x29, 0xf7, 0xd1, 0x77, 0xfc, 0x4d, 0x18, 0x8d, 0x45, 0x6b, 0xbd, 0xd2, 0x37, 0x69, 0x9d, 0x62, - 0x2f, 0x74, 0x8a, 0xbf, 0x90, 0xa5, 0x58, 0x91, 0xb1, 0xff, 0x29, 0x9f, 0x01, 0x09, 0x39, 0x05, - 0x35, 0x54, 0xd5, 0x54, 0x43, 0x55, 0xfa, 0x7c, 0x41, 0x8e, 0x3a, 0xea, 0x9f, 0x98, 0xfd, 0x66, - 0xa2, 0xdc, 0x47, 0xfd, 0x59, 0xd4, 0xfe, 0x31, 0x0b, 0xce, 0x66, 0xd9, 0x11, 0x51, 0x9e, 0x90, - 0x0b, 0x92, 0xea, 0x99, 0x58, 0x8d, 0xe0, 0x3d, 0x51, 0x8e, 0x15, 0xc6, 0xc0, 0x99, 0x11, 0x8e, - 0x17, 0x3e, 0xed, 0x0e, 0x4c, 0xd4, 0x42, 0xa2, 0xdd, 0x01, 0xaf, 0x73, 0x37, 0x33, 0xde, 0x9f, - 0xe7, 0x8e, 0xed, 0x62, 0x66, 0xff, 0x7c, 0x01, 0xce, 0xf2, 0x77, 0x9e, 0x85, 0xbd, 0xc0, 0x6d, - 0xd6, 0x82, 0xa6, 0xc8, 0x6a, 0xf1, 0x36, 0x8c, 0xb7, 0x35, 0xe9, 0xbf, 0x57, 0x00, 0x27, 0x5d, - 0x4b, 0x90, 0x48, 0x61, 0x7a, 0x29, 0x36, 0x68, 0xa1, 0x26, 0x8c, 0x93, 0x3d, 0xb7, 0xa1, 0x1e, - 0x0b, 0x0a, 0xc7, 0xbe, 0x1b, 0x54, 0x2b, 0xcb, 0x1a, 0x1d, 0x6c, 0x50, 0x7d, 0x04, 0x89, 0xce, - 0xec, 0x1f, 0xb7, 0xe0, 0xb1, 0x9c, 0x70, 0x4f, 0xb4, 0xb9, 0xfb, 0xec, 0x45, 0x4d, 0xe4, 0x4c, - 0x52, 0xcd, 0xf1, 0x77, 0x36, 0x2c, 0xa0, 0xe8, 0xf3, 0x00, 0xfc, 0x9d, 0x8c, 0x0a, 0x25, 0xfd, - 0xe2, 0xe2, 0x18, 0x21, 0x3d, 0xb4, 0x50, 0x0c, 0xb2, 0x3e, 0xd6, 0x68, 0xd9, 0x3f, 0x53, 0x84, - 0x21, 0xf6, 0x2e, 0x83, 0x56, 0x60, 0x64, 0x9b, 0x07, 0x37, 0x1e, 0x24, 0x8e, 0x72, 0x22, 0xdd, - 0xf1, 0x02, 0x2c, 0x2b, 0xa3, 0x35, 0x38, 0xc3, 0x83, 0x43, 0x7b, 0x55, 0xe2, 0x39, 0xfb, 0x52, - 0x49, 0xc0, 0xf3, 0x0c, 0xa9, 0xb0, 0x12, 0xab, 0xdd, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x1d, 0x26, - 0x63, 0x77, 0x97, 0x04, 0x9d, 0x58, 0x52, 0xe2, 0x61, 0xa1, 0x15, 0x1b, 0xb7, 0x61, 0x40, 0x71, - 0x0a, 0x9b, 0x8a, 0x3b, 0xed, 0x2e, 0x75, 0x88, 0x96, 0xb9, 0xdf, 0x54, 0x81, 0x98, 0xb8, 0xcc, - 0x80, 0xa8, 0xc3, 0xcc, 0xa5, 0x36, 0xb6, 0x43, 0x12, 0x6d, 0x07, 0x5e, 0x53, 0xa4, 0xa9, 0x4e, - 0x0c, 0x88, 0x52, 0x70, 0xdc, 0x55, 0x83, 0x52, 0xd9, 0x72, 0x5c, 0xaf, 0x13, 0x92, 0x84, 0xca, - 0xb0, 0x49, 0x65, 0x25, 0x05, 0xc7, 0x5d, 0x35, 0xe8, 0x3a, 0x3a, 0x27, 0xf2, 0x46, 0x4b, 0x67, - 0x77, 0x65, 0x15, 0x36, 0x22, 0xdd, 0x7e, 0x7a, 0x44, 0x7b, 0x11, 0x76, 0x33, 0x2a, 0xf3, 0xb4, - 0xa6, 0xc5, 0x13, 0x0e, 0x3f, 0x92, 0xca, 0xc3, 0x64, 0x2f, 0xfe, 0x3d, 0x0b, 0xce, 0x64, 0x58, - 0x9f, 0xf2, 0xa3, 0xaa, 0xe5, 0x46, 0xb1, 0xca, 0xa5, 0xa2, 0x1d, 0x55, 0xbc, 0x1c, 0x2b, 0x0c, - 0xba, 0x1f, 0xf8, 0x61, 0x98, 0x3e, 0x00, 0x85, 0x75, 0x97, 0x80, 0x1e, 0xef, 0x00, 0x44, 0x97, - 0xa1, 0xd4, 0x89, 0x88, 0x8c, 0xd3, 0xa4, 0xce, 0x6f, 0xa6, 0xd7, 0x65, 0x10, 0xca, 0x9a, 0xb6, - 0x94, 0x4a, 0x55, 0x63, 0x4d, 0xb9, 0x9e, 0x94, 0xc3, 0xec, 0xaf, 0x16, 0xe1, 0x42, 0xae, 0x9d, - 0x39, 0xed, 0xd2, 0x6e, 0xe0, 0xbb, 0x71, 0xa0, 0xde, 0xfc, 0x78, 0xa4, 0x10, 0xd2, 0xde, 0x5e, - 0x13, 0xe5, 0x58, 0x61, 0xa0, 0x2b, 0x32, 0x83, 0x79, 0x3a, 0x5b, 0xcc, 0x62, 0xd5, 0x48, 0x62, - 0x3e, 0x68, 0x26, 0xae, 0xa7, 0xa0, 0xd4, 0x0e, 0x02, 0x2f, 0x7d, 0x18, 0xd1, 0xee, 0x06, 0x81, - 0x87, 0x19, 0x10, 0x7d, 0x42, 0x8c, 0x43, 0xea, 0x91, 0x0b, 0x3b, 0xcd, 0x20, 0xd2, 0x06, 0xe3, - 0x19, 0x18, 0xd9, 0x21, 0xfb, 0xa1, 0xeb, 0xb7, 0xd2, 0x8f, 0x9f, 0xb7, 0x78, 0x31, 0x96, 0x70, - 0x33, 0x59, 0xc2, 0xc8, 0x49, 0xa7, 0xd0, 0x1a, 0xed, 0x7b, 0xb5, 0xfd, 0x50, 0x11, 0xa6, 0xf0, - 0x62, 0xf5, 0x5b, 0x13, 0x71, 0xb7, 0x7b, 0x22, 0x4e, 0x3a, 0x85, 0x56, 0xff, 0xd9, 0xf8, 0x65, - 0x0b, 0xa6, 0x58, 0x40, 0x61, 0x11, 0x9f, 0xc2, 0x0d, 0xfc, 0x53, 0x60, 0xdd, 0x9e, 0x82, 0xa1, - 0x90, 0x36, 0x9a, 0xce, 0x8b, 0xc3, 0x7a, 0x82, 0x39, 0x0c, 0x3d, 0x01, 0x25, 0xd6, 0x05, 0x3a, - 0x79, 0xe3, 0x3c, 0xa5, 0x40, 0xd5, 0x89, 0x1d, 0xcc, 0x4a, 0x99, 0xd3, 0x35, 0x26, 0x6d, 0xcf, - 0xe5, 0x9d, 0x4e, 0x1e, 0x14, 0x3e, 0x1a, 0x4e, 0xd7, 0x99, 0x5d, 0xfb, 0x60, 0x4e, 0xd7, 0xd9, - 0x24, 0x7b, 0x8b, 0x45, 0xff, 0xbd, 0x00, 0x97, 0x32, 0xeb, 0x0d, 0xec, 0x74, 0xdd, 0xbb, 0xf6, - 0xc9, 0xd8, 0xb0, 0x64, 0x9b, 0x96, 0x14, 0x4f, 0xd1, 0xb4, 0xa4, 0x34, 0x28, 0xe7, 0x38, 0x34, - 0x80, 0x2f, 0x74, 0xe6, 0x90, 0x7d, 0x44, 0x7c, 0xa1, 0x33, 0xfb, 0x96, 0x23, 0xd6, 0xfd, 0x59, - 0x21, 0xe7, 0x5b, 0x98, 0x80, 0x77, 0x95, 0x9e, 0x33, 0x0c, 0x18, 0x09, 0x4e, 0x78, 0x9c, 0x9f, - 0x31, 0xbc, 0x0c, 0x2b, 0x28, 0x72, 0x35, 0xaf, 0xe2, 0x42, 0x7e, 0xd6, 0xc4, 0xdc, 0xa6, 0xe6, - 0xcd, 0xf7, 0x1f, 0x35, 0x04, 0x19, 0x1e, 0xc6, 0x6b, 0x9a, 0x50, 0x5e, 0x1c, 0x5c, 0x28, 0x1f, - 0xcf, 0x16, 0xc8, 0xd1, 0x02, 0x4c, 0xed, 0xba, 0x3e, 0xcb, 0x82, 0x6f, 0xb2, 0xa2, 0x2a, 0xc8, - 0xc6, 0x9a, 0x09, 0xc6, 0x69, 0xfc, 0xb9, 0xd7, 0x60, 0xe2, 0xe1, 0xd5, 0x91, 0xdf, 0x2c, 0xc2, - 0xe3, 0x3d, 0xb6, 0x3d, 0x3f, 0xeb, 0x8d, 0x39, 0xd0, 0xce, 0xfa, 0xae, 0x79, 0xa8, 0xc1, 0xd9, - 0xad, 0x8e, 0xe7, 0xed, 0x33, 0xeb, 0x4d, 0xd2, 0x94, 0x18, 0x82, 0x57, 0x7c, 0x42, 0x26, 0x71, - 0x58, 0xc9, 0xc0, 0xc1, 0x99, 0x35, 0xd1, 0x1b, 0x80, 0x02, 0x91, 0xb2, 0xf5, 0x06, 0xf1, 0x85, - 0x56, 0x9d, 0x0d, 0x7c, 0x31, 0xd9, 0x8c, 0x77, 0xba, 0x30, 0x70, 0x46, 0x2d, 0xca, 0xf4, 0xd3, - 0x5b, 0x69, 0x5f, 0x75, 0x2b, 0xc5, 0xf4, 0x63, 0x1d, 0x88, 0x4d, 0x5c, 0x74, 0x03, 0x66, 0x9c, - 0x3d, 0xc7, 0xe5, 0xc1, 0xe7, 0x24, 0x01, 0xce, 0xf5, 0x2b, 0x25, 0xd8, 0x42, 0x1a, 0x01, 0x77, - 0xd7, 0x49, 0xb9, 0x35, 0x0f, 0xe7, 0xbb, 0x35, 0xf7, 0x3e, 0x17, 0xfb, 0xe9, 0x74, 0xed, 0xff, - 0x68, 0xd1, 0xeb, 0x2b, 0x23, 0xed, 0x3a, 0x1d, 0x07, 0xa5, 0x9b, 0xd4, 0x3c, 0x8c, 0xcf, 0x69, - 0xf6, 0x19, 0x09, 0x10, 0x9b, 0xb8, 0x7c, 0x41, 0x44, 0x89, 0x8b, 0x8b, 0xc1, 0xba, 0x8b, 0x10, - 0x02, 0x0a, 0x03, 0x7d, 0x01, 0x46, 0x9a, 0xee, 0x9e, 0x1b, 0x05, 0xa1, 0xd8, 0x2c, 0xc7, 0x74, - 0x14, 0x48, 0xce, 0xc1, 0x2a, 0x27, 0x83, 0x25, 0x3d, 0xfb, 0x87, 0x0a, 0x30, 0x21, 0x5b, 0x7c, - 0xb3, 0x13, 0xc4, 0xce, 0x29, 0x5c, 0xcb, 0x37, 0x8c, 0x6b, 0xf9, 0x13, 0xbd, 0xe2, 0x28, 0xb0, - 0x2e, 0xe5, 0x5e, 0xc7, 0x77, 0x52, 0xd7, 0xf1, 0xd3, 0xfd, 0x49, 0xf5, 0xbe, 0x86, 0xff, 0x99, - 0x05, 0x33, 0x06, 0xfe, 0x29, 0xdc, 0x06, 0x2b, 0xe6, 0x6d, 0xf0, 0x64, 0xdf, 0x6f, 0xc8, 0xb9, - 0x05, 0xbe, 0xaf, 0x98, 0xea, 0x3b, 0x3b, 0xfd, 0xdf, 0x83, 0xd2, 0xb6, 0x13, 0x36, 0x7b, 0xc5, - 0x6b, 0xed, 0xaa, 0x34, 0x7f, 0xd3, 0x09, 0x9b, 0xfc, 0x0c, 0x7f, 0x4e, 0x25, 0x7a, 0x74, 0xc2, - 0x66, 0x5f, 0x8f, 0x2e, 0xd6, 0x14, 0x7a, 0x15, 0x86, 0xa3, 0x46, 0xd0, 0x56, 0xf6, 0x96, 0x97, - 0x79, 0x12, 0x48, 0x5a, 0x72, 0x74, 0x50, 0x41, 0x66, 0x73, 0xb4, 0x18, 0x0b, 0x7c, 0xf4, 0x36, - 0x4c, 0xb0, 0x5f, 0xca, 0xee, 0xa0, 0x98, 0x9f, 0x25, 0xa0, 0xae, 0x23, 0x72, 0xf3, 0x15, 0xa3, - 0x08, 0x9b, 0xa4, 0xe6, 0x5a, 0x50, 0x56, 0x9f, 0xf5, 0x48, 0x3d, 0x71, 0xfe, 0x5d, 0x11, 0xce, - 0x64, 0xac, 0x39, 0x14, 0x19, 0x33, 0xf1, 0xc2, 0x80, 0x4b, 0xf5, 0x03, 0xce, 0x45, 0xc4, 0xa4, - 0xa1, 0xa6, 0x58, 0x5b, 0x03, 0x37, 0x7a, 0x37, 0x22, 0xe9, 0x46, 0x69, 0x51, 0xff, 0x46, 0x69, - 0x63, 0xa7, 0x36, 0xd4, 0xb4, 0x21, 0xd5, 0xd3, 0x47, 0x3a, 0xa7, 0x7f, 0x5c, 0x84, 0xb3, 0x59, - 0xa1, 0x5d, 0xd0, 0x77, 0xa7, 0xb2, 0xc1, 0xbc, 0x34, 0x68, 0x50, 0x18, 0x9e, 0x22, 0x46, 0xe4, - 0x36, 0x9e, 0x37, 0xf3, 0xc3, 0xf4, 0x1d, 0x66, 0xd1, 0x26, 0x73, 0xdf, 0x0c, 0x79, 0x16, 0x1f, - 0x79, 0x7c, 0x7c, 0x7a, 0xe0, 0x0e, 0x88, 0xf4, 0x3f, 0x51, 0xca, 0x7d, 0x53, 0x16, 0xf7, 0x77, - 0xdf, 0x94, 0x2d, 0xcf, 0xb9, 0x30, 0xa6, 0x7d, 0xcd, 0x23, 0x9d, 0xf1, 0x1d, 0x7a, 0x5b, 0x69, - 0xfd, 0x7e, 0xa4, 0xb3, 0xfe, 0xe3, 0x16, 0xa4, 0x8c, 0x1b, 0x95, 0xba, 0xcb, 0xca, 0x55, 0x77, - 0x5d, 0x86, 0x52, 0x18, 0x78, 0x24, 0x9d, 0xa0, 0x05, 0x07, 0x1e, 0xc1, 0x0c, 0x42, 0x31, 0xe2, - 0x44, 0xd9, 0x31, 0xae, 0x0b, 0x72, 0x42, 0x44, 0x7b, 0x0a, 0x86, 0x3c, 0xb2, 0x47, 0xbc, 0x74, - 0xf4, 0xf3, 0xdb, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0xcb, 0x25, 0xb8, 0xd8, 0xd3, 0x01, 0x9a, 0x8a, - 0x43, 0x2d, 0x27, 0x26, 0xf7, 0x9d, 0xfd, 0x74, 0x98, 0xe2, 0x1b, 0xbc, 0x18, 0x4b, 0x38, 0xb3, - 0xf7, 0xe6, 0x61, 0x09, 0x53, 0xca, 0x41, 0x11, 0x8d, 0x50, 0x40, 0x1f, 0x41, 0x5e, 0xf7, 0xeb, - 0x00, 0x51, 0xe4, 0x2d, 0xfb, 0x94, 0xbb, 0x6b, 0x0a, 0x43, 0xf2, 0x24, 0x7c, 0x65, 0xfd, 0xb6, - 0x80, 0x60, 0x0d, 0x0b, 0x55, 0x61, 0xba, 0x1d, 0x06, 0x31, 0xd7, 0xb5, 0x56, 0xb9, 0x99, 0xcf, - 0x90, 0xe9, 0x7b, 0x5a, 0x4b, 0xc1, 0x71, 0x57, 0x0d, 0xf4, 0x32, 0x8c, 0x09, 0x7f, 0xd4, 0x5a, - 0x10, 0x78, 0x42, 0x0d, 0xa4, 0x8c, 0x46, 0xea, 0x09, 0x08, 0xeb, 0x78, 0x5a, 0x35, 0xa6, 0xc0, - 0x1d, 0xc9, 0xac, 0xc6, 0x95, 0xb8, 0x1a, 0x5e, 0x2a, 0xcc, 0xd3, 0xe8, 0x40, 0x61, 0x9e, 0x12, - 0xc5, 0x58, 0x79, 0xe0, 0x37, 0x2b, 0xe8, 0xab, 0x4a, 0xfa, 0x85, 0x12, 0x9c, 0x11, 0x0b, 0xe7, - 0x51, 0x2f, 0x97, 0x47, 0x94, 0x7d, 0xfe, 0x5b, 0x6b, 0xe6, 0xb4, 0xd7, 0xcc, 0x0f, 0x5b, 0x60, - 0xb2, 0x57, 0xe8, 0xff, 0xcb, 0x8d, 0xf3, 0xfe, 0x72, 0x2e, 0xbb, 0xd6, 0x94, 0x17, 0xc8, 0x07, - 0x8c, 0xf8, 0x6e, 0xff, 0x07, 0x0b, 0x9e, 0xec, 0x4b, 0x11, 0x2d, 0x43, 0x99, 0xf1, 0x80, 0x9a, - 0x74, 0xf6, 0xb4, 0x32, 0x03, 0x94, 0x80, 0x1c, 0x96, 0x34, 0xa9, 0x89, 0x96, 0xbb, 0x02, 0xea, - 0x3f, 0x93, 0x11, 0x50, 0xff, 0x9c, 0x31, 0x3c, 0x0f, 0x19, 0x51, 0xff, 0x6b, 0x45, 0x18, 0xe6, - 0x2b, 0xfe, 0x14, 0xc4, 0xb0, 0x15, 0xa1, 0xb7, 0xed, 0x11, 0x47, 0x8a, 0xf7, 0x65, 0xbe, 0xea, - 0xc4, 0x0e, 0x67, 0x13, 0xd4, 0x6d, 0x95, 0x68, 0x78, 0xd1, 0xbc, 0x71, 0x9f, 0xcd, 0xa5, 0x14, - 0x93, 0xc0, 0x69, 0x68, 0xb7, 0xdb, 0x97, 0x00, 0x22, 0x96, 0x68, 0x9e, 0xd2, 0x10, 0x11, 0xc9, - 0x3e, 0xd9, 0xa3, 0xf5, 0xba, 0x42, 0xe6, 0x7d, 0x48, 0x76, 0xba, 0x02, 0x60, 0x8d, 0xe2, 0xdc, - 0x2b, 0x50, 0x56, 0xc8, 0xfd, 0xb4, 0x38, 0xe3, 0x3a, 0x73, 0xf1, 0x39, 0x98, 0x4a, 0xb5, 0x75, - 0x2c, 0x25, 0xd0, 0xaf, 0x58, 0x30, 0xc5, 0xbb, 0xbc, 0xec, 0xef, 0x89, 0x33, 0xf5, 0x7d, 0x38, - 0xeb, 0x65, 0x9c, 0x6d, 0x62, 0x46, 0x07, 0x3f, 0x0b, 0x95, 0xd2, 0x27, 0x0b, 0x8a, 0x33, 0xdb, - 0x40, 0x57, 0xe9, 0xba, 0xa5, 0x67, 0x97, 0xe3, 0x09, 0xdf, 0xa1, 0x71, 0xbe, 0x66, 0x79, 0x19, - 0x56, 0x50, 0xfb, 0x77, 0x2c, 0x98, 0xe1, 0x3d, 0xbf, 0x45, 0xf6, 0xd5, 0x0e, 0xff, 0x30, 0xfb, - 0x2e, 0x72, 0x5c, 0x14, 0x72, 0x72, 0x5c, 0xe8, 0x9f, 0x56, 0xec, 0xf9, 0x69, 0x3f, 0x6f, 0x81, - 0x58, 0x81, 0xa7, 0x20, 0xca, 0x7f, 0xbb, 0x29, 0xca, 0xcf, 0xe5, 0x2f, 0xea, 0x1c, 0x19, 0xfe, - 0x4f, 0x2d, 0x98, 0xe6, 0x08, 0xc9, 0x5b, 0xf2, 0x87, 0x3a, 0x0f, 0x83, 0x24, 0xab, 0x53, 0xd9, - 0xa9, 0xb3, 0x3f, 0xca, 0x98, 0xac, 0x52, 0xcf, 0xc9, 0x6a, 0xca, 0x0d, 0x74, 0x8c, 0x24, 0x8c, - 0xc7, 0x8e, 0x15, 0x6d, 0xff, 0x91, 0x05, 0x88, 0x37, 0x63, 0xb0, 0x3f, 0x94, 0xa9, 0x60, 0xa5, - 0xda, 0x75, 0x91, 0x1c, 0x35, 0x0a, 0x82, 0x35, 0xac, 0x13, 0x19, 0x9e, 0x94, 0x41, 0x40, 0xb1, - 0xbf, 0x41, 0xc0, 0x31, 0x46, 0xf4, 0x6b, 0x25, 0x48, 0x1b, 0xf3, 0xa3, 0x7b, 0x30, 0xde, 0x70, - 0xda, 0xce, 0xa6, 0xeb, 0xb9, 0xb1, 0x4b, 0xa2, 0x5e, 0x96, 0x44, 0x4b, 0x1a, 0x9e, 0x78, 0xea, - 0xd5, 0x4a, 0xb0, 0x41, 0x07, 0xcd, 0x03, 0xb4, 0x43, 0x77, 0xcf, 0xf5, 0x48, 0x8b, 0x69, 0x1c, - 0x98, 0xb7, 0x22, 0x37, 0x8f, 0x91, 0xa5, 0x58, 0xc3, 0xc8, 0x70, 0x3c, 0x2b, 0x3e, 0x3a, 0xc7, - 0xb3, 0xd2, 0x31, 0x1d, 0xcf, 0x86, 0x06, 0x72, 0x3c, 0xc3, 0x70, 0x5e, 0xb2, 0x48, 0xf4, 0xff, - 0x8a, 0xeb, 0x11, 0xc1, 0x17, 0x73, 0x1f, 0xc6, 0xb9, 0xc3, 0x83, 0xca, 0x79, 0x9c, 0x89, 0x81, - 0x73, 0x6a, 0xa2, 0xcf, 0xc3, 0xac, 0xe3, 0x79, 0xc1, 0x7d, 0x35, 0x6a, 0xcb, 0x51, 0xc3, 0xf1, - 0xb8, 0xc6, 0x7e, 0x84, 0x51, 0x7d, 0xe2, 0xf0, 0xa0, 0x32, 0xbb, 0x90, 0x83, 0x83, 0x73, 0x6b, - 0xa7, 0xfc, 0xd6, 0x46, 0xfb, 0xf9, 0xad, 0xd9, 0x3b, 0x70, 0xa6, 0x4e, 0x42, 0x97, 0xa5, 0x88, - 0x6c, 0x26, 0x5b, 0x72, 0x03, 0xca, 0x61, 0xea, 0x10, 0x1a, 0x28, 0xb0, 0x91, 0x16, 0x06, 0x57, - 0x1e, 0x3a, 0x09, 0x21, 0xfb, 0x4f, 0x2c, 0x18, 0x11, 0x0e, 0x05, 0xa7, 0xc0, 0xfb, 0x2c, 0x18, - 0x2a, 0xe8, 0x4a, 0xf6, 0x41, 0xcd, 0x3a, 0x93, 0xab, 0x7c, 0x5e, 0x4d, 0x29, 0x9f, 0x9f, 0xec, - 0x45, 0xa4, 0xb7, 0xda, 0xf9, 0x6f, 0x15, 0x61, 0xd2, 0x74, 0xa6, 0x38, 0x85, 0x21, 0x58, 0x87, - 0x91, 0x48, 0x78, 0xee, 0x14, 0xf2, 0x6d, 0x9f, 0xd3, 0x93, 0x98, 0x18, 0x36, 0x09, 0x5f, 0x1d, - 0x49, 0x24, 0xd3, 0x25, 0xa8, 0xf8, 0x08, 0x5d, 0x82, 0xfa, 0xf9, 0xb3, 0x94, 0x4e, 0xc2, 0x9f, - 0xc5, 0xfe, 0x3a, 0xbb, 0x2c, 0xf4, 0xf2, 0x53, 0xe0, 0x23, 0x6e, 0x98, 0xd7, 0x8a, 0xdd, 0x63, - 0x65, 0x89, 0x4e, 0xe5, 0xf0, 0x13, 0xbf, 0x64, 0xc1, 0xc5, 0x8c, 0xaf, 0xd2, 0x98, 0x8b, 0xe7, - 0x60, 0xd4, 0xe9, 0x34, 0x5d, 0xb5, 0x97, 0xb5, 0x87, 0xa8, 0x05, 0x51, 0x8e, 0x15, 0x06, 0x5a, - 0x82, 0x19, 0xf2, 0xa0, 0xed, 0xf2, 0x97, 0x40, 0xdd, 0xfa, 0xb0, 0xc8, 0x43, 0xbc, 0x2e, 0xa7, - 0x81, 0xb8, 0x1b, 0x5f, 0xb9, 0x43, 0x17, 0x73, 0xdd, 0xa1, 0xff, 0xa1, 0x05, 0x63, 0xa2, 0xdb, - 0xa7, 0x30, 0xda, 0xdf, 0x61, 0x8e, 0xf6, 0xe3, 0x3d, 0x46, 0x3b, 0x67, 0x98, 0xff, 0x4e, 0x41, - 0xf5, 0xb7, 0x16, 0x84, 0xf1, 0x00, 0x4c, 0xcb, 0xab, 0x30, 0xda, 0x0e, 0x83, 0x38, 0x68, 0x04, - 0x9e, 0xe0, 0x59, 0x9e, 0x48, 0xbc, 0xf5, 0x79, 0xf9, 0x91, 0xf6, 0x1b, 0x2b, 0x6c, 0x36, 0x7a, - 0x41, 0x18, 0x0b, 0x3e, 0x21, 0x19, 0xbd, 0x20, 0x8c, 0x31, 0x83, 0xa0, 0x26, 0x40, 0xec, 0x84, - 0x2d, 0x12, 0xd3, 0x32, 0x11, 0xf8, 0x23, 0xff, 0xf0, 0xe8, 0xc4, 0xae, 0x37, 0xef, 0xfa, 0x71, - 0x14, 0x87, 0xf3, 0xab, 0x7e, 0x7c, 0x27, 0xe4, 0x22, 0x90, 0xe6, 0x7e, 0xaf, 0x68, 0x61, 0x8d, - 0xae, 0xf4, 0x91, 0x64, 0x6d, 0x0c, 0x99, 0x4f, 0xda, 0xeb, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x15, - 0x76, 0x95, 0xb0, 0x01, 0x3a, 0x9e, 0x67, 0xfc, 0x37, 0x46, 0xd5, 0xd0, 0xb2, 0xf7, 0xac, 0xaa, - 0xee, 0x7f, 0xdf, 0xfb, 0xe4, 0xa6, 0x0d, 0xeb, 0x9e, 0x30, 0x89, 0x93, 0x3e, 0xfa, 0xce, 0x2e, - 0x4b, 0x87, 0xe7, 0xfb, 0x5c, 0x01, 0xc7, 0xb0, 0x6d, 0x60, 0x61, 0xa7, 0x59, 0x78, 0xde, 0xd5, - 0x9a, 0x58, 0xe4, 0x5a, 0xd8, 0x69, 0x01, 0xc0, 0x09, 0x0e, 0xba, 0x26, 0x04, 0xe8, 0x92, 0x91, - 0x1d, 0x4e, 0x0a, 0xd0, 0xf2, 0xf3, 0x35, 0x09, 0xfa, 0x05, 0x18, 0x53, 0x59, 0xe2, 0x6a, 0x3c, - 0xd9, 0x96, 0x08, 0x83, 0xb2, 0x9c, 0x14, 0x63, 0x1d, 0x07, 0x6d, 0xc0, 0x54, 0xc4, 0xb5, 0x27, - 0x2a, 0xda, 0x1d, 0xd7, 0x42, 0x7d, 0x52, 0x5a, 0x48, 0xd4, 0x4d, 0xf0, 0x11, 0x2b, 0xe2, 0x47, - 0x87, 0x74, 0x74, 0x4c, 0x93, 0x40, 0xaf, 0xc3, 0xa4, 0xa7, 0xe7, 0x5a, 0xaf, 0x09, 0x25, 0x95, - 0x32, 0x20, 0x36, 0x32, 0xb1, 0xd7, 0x70, 0x0a, 0x9b, 0xf2, 0x3a, 0x7a, 0x89, 0x88, 0xd0, 0xe8, - 0xf8, 0x2d, 0x12, 0x89, 0x1c, 0x57, 0x8c, 0xd7, 0xb9, 0x9d, 0x83, 0x83, 0x73, 0x6b, 0xa3, 0x57, - 0x61, 0x5c, 0x7e, 0xbe, 0xe6, 0xc6, 0x9b, 0x98, 0xa9, 0x6b, 0x30, 0x6c, 0x60, 0xa2, 0xfb, 0x70, - 0x4e, 0xfe, 0xdf, 0x08, 0x9d, 0xad, 0x2d, 0xb7, 0x21, 0xbc, 0xa8, 0xb9, 0xaf, 0xce, 0x82, 0x74, - 0xfe, 0x59, 0xce, 0x42, 0x3a, 0x3a, 0xa8, 0x5c, 0x16, 0xa3, 0x96, 0x09, 0x67, 0x93, 0x98, 0x4d, - 0x1f, 0xad, 0xc1, 0x99, 0x6d, 0xe2, 0x78, 0xf1, 0xf6, 0xd2, 0x36, 0x69, 0xec, 0xc8, 0x4d, 0xc4, - 0x9c, 0x83, 0x35, 0xe3, 0xee, 0x9b, 0xdd, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x07, 0x66, 0xdb, 0x9d, - 0x4d, 0xcf, 0x8d, 0xb6, 0xd7, 0x83, 0x98, 0x19, 0x65, 0xa8, 0x24, 0x6b, 0xc2, 0x8b, 0x58, 0x39, - 0x46, 0xd7, 0x72, 0xf0, 0x70, 0x2e, 0x05, 0xf4, 0x3e, 0x9c, 0x4b, 0x2d, 0x06, 0xe1, 0xd3, 0x38, - 0x99, 0x1f, 0xef, 0xb6, 0x9e, 0x55, 0x41, 0xf8, 0x28, 0x66, 0x81, 0x70, 0x76, 0x13, 0x1f, 0xcc, - 0x54, 0xe7, 0x3d, 0x5a, 0x59, 0x63, 0xca, 0xd0, 0x97, 0x61, 0x5c, 0x5f, 0x45, 0xe2, 0x82, 0xb9, - 0x92, 0xcd, 0xb3, 0x68, 0xab, 0x8d, 0xb3, 0x74, 0x6a, 0x45, 0xe9, 0x30, 0x6c, 0x50, 0xb4, 0x09, - 0x64, 0x7f, 0x1f, 0xba, 0x0d, 0xa3, 0x0d, 0xcf, 0x25, 0x7e, 0xbc, 0x5a, 0xeb, 0x15, 0x74, 0x63, - 0x49, 0xe0, 0x88, 0x01, 0x13, 0x01, 0x42, 0x79, 0x19, 0x56, 0x14, 0xec, 0xdf, 0x28, 0x40, 0xa5, - 0x4f, 0xb4, 0xd9, 0x94, 0x46, 0xd9, 0x1a, 0x48, 0xa3, 0xbc, 0x20, 0x53, 0xc6, 0xad, 0xa7, 0xc4, - 0xec, 0x54, 0x3a, 0xb8, 0x44, 0xd8, 0x4e, 0xe3, 0x0f, 0x6c, 0xe1, 0xab, 0x2b, 0xa5, 0x4b, 0x7d, - 0x6d, 0xcf, 0x8d, 0xc7, 0xa8, 0xa1, 0xc1, 0x05, 0x91, 0xdc, 0x87, 0x05, 0xfb, 0xeb, 0x05, 0x38, - 0xa7, 0x86, 0xf0, 0x2f, 0xee, 0xc0, 0xdd, 0xed, 0x1e, 0xb8, 0x13, 0x78, 0x96, 0xb1, 0xef, 0xc0, - 0x30, 0x0f, 0x5a, 0x32, 0x00, 0x03, 0xf4, 0x94, 0x19, 0xe1, 0x4a, 0x5d, 0xd3, 0x46, 0x94, 0xab, - 0xbf, 0x62, 0xc1, 0xd4, 0xc6, 0x52, 0xad, 0x1e, 0x34, 0x76, 0x48, 0xbc, 0xc0, 0x19, 0x56, 0x2c, - 0xf8, 0x1f, 0xeb, 0x21, 0xf9, 0x9a, 0x2c, 0x8e, 0xe9, 0x32, 0x94, 0xb6, 0x83, 0x28, 0x4e, 0xbf, - 0xd9, 0xde, 0x0c, 0xa2, 0x18, 0x33, 0x88, 0xfd, 0xbb, 0x16, 0x0c, 0xb1, 0x44, 0xa7, 0xfd, 0xb2, - 0xef, 0x0e, 0xf2, 0x5d, 0xe8, 0x65, 0x18, 0x26, 0x5b, 0x5b, 0xa4, 0x11, 0x8b, 0x59, 0x95, 0x0e, - 0xa5, 0xc3, 0xcb, 0xac, 0x94, 0x5e, 0xfa, 0xac, 0x31, 0xfe, 0x17, 0x0b, 0x64, 0xf4, 0x16, 0x94, - 0x63, 0x77, 0x97, 0x2c, 0x34, 0x9b, 0xe2, 0xd5, 0xeb, 0x21, 0xfc, 0x77, 0x37, 0x24, 0x01, 0x9c, - 0xd0, 0xb2, 0xbf, 0x5a, 0x00, 0x48, 0x5c, 0xef, 0xfb, 0x7d, 0xe2, 0x62, 0xd7, 0x7b, 0xc8, 0x95, - 0x8c, 0xf7, 0x10, 0x94, 0x10, 0xcc, 0x78, 0x0c, 0x51, 0xc3, 0x54, 0x1c, 0x68, 0x98, 0x4a, 0xc7, - 0x19, 0xa6, 0x25, 0x98, 0x49, 0x42, 0x07, 0x98, 0x71, 0x54, 0x98, 0x90, 0xb2, 0x91, 0x06, 0xe2, - 0x6e, 0x7c, 0x9b, 0xc0, 0x65, 0x19, 0xd1, 0x52, 0xde, 0x35, 0xcc, 0xa8, 0xf2, 0x18, 0x89, 0x98, - 0x93, 0x07, 0x9f, 0x42, 0xee, 0x83, 0xcf, 0x4f, 0x59, 0x70, 0x36, 0xdd, 0x0e, 0xf3, 0x5e, 0xfb, - 0x01, 0x0b, 0xce, 0xb1, 0x67, 0x2f, 0xd6, 0x6a, 0xf7, 0x23, 0xdb, 0x4b, 0xd9, 0x21, 0x15, 0x7a, - 0xf7, 0x38, 0xf1, 0x5c, 0x5e, 0xcb, 0x22, 0x8d, 0xb3, 0x5b, 0xb4, 0xbf, 0xdf, 0x02, 0xe1, 0x24, - 0x34, 0xc0, 0xc6, 0x7e, 0x5b, 0xa6, 0x2a, 0x35, 0x02, 0x78, 0x5f, 0xce, 0xf7, 0x9a, 0x12, 0x61, - 0xbb, 0xd5, 0x45, 0x6a, 0x04, 0xeb, 0x36, 0x68, 0xd9, 0x4d, 0x10, 0xd0, 0x2a, 0x61, 0x7a, 0xa2, - 0xfe, 0xbd, 0xb9, 0x0e, 0xd0, 0x64, 0xb8, 0x5a, 0xc2, 0x42, 0x75, 0x6c, 0x57, 0x15, 0x04, 0x6b, - 0x58, 0xf6, 0x8f, 0x14, 0x60, 0x4c, 0x06, 0x8c, 0xee, 0xf8, 0x83, 0x48, 0x73, 0xc7, 0xca, 0x1b, - 0xc3, 0x32, 0x7c, 0x52, 0xc2, 0xb5, 0x44, 0x08, 0x4e, 0x32, 0x7c, 0x4a, 0x00, 0x4e, 0x70, 0xd0, - 0x33, 0x30, 0x12, 0x75, 0x36, 0x19, 0x7a, 0xca, 0xf5, 0xa5, 0xce, 0x8b, 0xb1, 0x84, 0xa3, 0xcf, - 0xc3, 0x34, 0xaf, 0x17, 0x06, 0x6d, 0xa7, 0xc5, 0x95, 0x86, 0x43, 0xca, 0x17, 0x75, 0x7a, 0x2d, - 0x05, 0x3b, 0x3a, 0xa8, 0x9c, 0x4d, 0x97, 0x31, 0x75, 0x73, 0x17, 0x15, 0xfb, 0xcb, 0x80, 0xba, - 0x63, 0x60, 0xa3, 0x37, 0xb8, 0x01, 0x92, 0x1b, 0x92, 0x66, 0x2f, 0x3d, 0xb2, 0xee, 0x3a, 0x29, - 0xcd, 0xcf, 0x79, 0x2d, 0xac, 0xea, 0xdb, 0x7f, 0xad, 0x08, 0xd3, 0x69, 0x47, 0x3a, 0x74, 0x13, - 0x86, 0xf9, 0x05, 0x23, 0xc8, 0xf7, 0x78, 0xa6, 0xd4, 0xdc, 0xef, 0xd8, 0x56, 0x13, 0x77, 0x94, - 0xa8, 0x8f, 0xde, 0x81, 0xb1, 0x66, 0x70, 0xdf, 0xbf, 0xef, 0x84, 0xcd, 0x85, 0xda, 0xaa, 0x58, - 0x97, 0x99, 0x7c, 0x6a, 0x35, 0x41, 0xd3, 0x5d, 0xfa, 0x98, 0x4a, 0x3e, 0x01, 0x61, 0x9d, 0x1c, - 0xda, 0x60, 0x71, 0xfd, 0xb6, 0xdc, 0xd6, 0x9a, 0xd3, 0xee, 0x65, 0x8d, 0xba, 0x24, 0x91, 0x34, - 0xca, 0x13, 0x22, 0xf8, 0x1f, 0x07, 0xe0, 0x84, 0x10, 0xfa, 0x6e, 0x38, 0x13, 0xe5, 0xa8, 0xb6, - 0xf2, 0x52, 0x22, 0xf4, 0xd2, 0xf6, 0x2c, 0x3e, 0x46, 0x25, 0x88, 0x2c, 0x25, 0x58, 0x56, 0x33, - 0xf6, 0x57, 0xce, 0x80, 0xb1, 0x1b, 0x8d, 0xbc, 0x38, 0xd6, 0x09, 0xe5, 0xc5, 0xc1, 0x30, 0x4a, - 0x76, 0xdb, 0xf1, 0x7e, 0xd5, 0x0d, 0x7b, 0x25, 0x56, 0x5b, 0x16, 0x38, 0xdd, 0x34, 0x25, 0x04, - 0x2b, 0x3a, 0xd9, 0xc9, 0x8b, 0x8a, 0x1f, 0x62, 0xf2, 0xa2, 0xd2, 0x29, 0x26, 0x2f, 0x5a, 0x87, - 0x91, 0x96, 0x1b, 0x63, 0xd2, 0x0e, 0x04, 0x6b, 0x97, 0xb9, 0x0e, 0x6f, 0x70, 0x94, 0xee, 0x84, - 0x19, 0x02, 0x80, 0x25, 0x11, 0xf4, 0x86, 0xda, 0x81, 0xc3, 0xf9, 0x92, 0x51, 0xf7, 0x7b, 0x5a, - 0xe6, 0x1e, 0x14, 0xc9, 0x8a, 0x46, 0x1e, 0x36, 0x59, 0xd1, 0x8a, 0x4c, 0x31, 0x34, 0x9a, 0x6f, - 0x3a, 0xce, 0x32, 0x08, 0xf5, 0x49, 0x2c, 0x64, 0x24, 0x63, 0x2a, 0x9f, 0x5c, 0x32, 0xa6, 0xef, - 0xb7, 0xe0, 0x5c, 0x3b, 0x2b, 0x2f, 0x99, 0x48, 0x0c, 0xf4, 0xf2, 0xc0, 0x89, 0xd7, 0x8c, 0x06, - 0x99, 0x88, 0x9c, 0x89, 0x86, 0xb3, 0x9b, 0xa3, 0x03, 0x1d, 0x6e, 0x36, 0x45, 0x36, 0xa1, 0xa7, - 0x72, 0xb2, 0x3a, 0xf5, 0xc8, 0xe5, 0xb4, 0x91, 0x91, 0x41, 0xe8, 0xe3, 0x79, 0x19, 0x84, 0x06, - 0xce, 0x1b, 0xf4, 0x86, 0xca, 0xe7, 0x34, 0x91, 0xbf, 0x94, 0x78, 0xb6, 0xa6, 0xbe, 0x59, 0x9c, - 0xde, 0x50, 0x59, 0x9c, 0x7a, 0xc4, 0x37, 0xe3, 0x39, 0x9a, 0xfa, 0xe6, 0x6e, 0xd2, 0xf2, 0x2f, - 0x4d, 0x9d, 0x4c, 0xfe, 0x25, 0xe3, 0xaa, 0xe1, 0x29, 0x80, 0x9e, 0xed, 0x73, 0xd5, 0x18, 0x74, - 0x7b, 0x5f, 0x36, 0x3c, 0xd7, 0xd4, 0xcc, 0x43, 0xe5, 0x9a, 0xba, 0xa7, 0xe7, 0x6e, 0x42, 0x7d, - 0x92, 0x13, 0x51, 0xa4, 0x01, 0x33, 0x36, 0xdd, 0xd3, 0x2f, 0xc0, 0x33, 0xf9, 0x74, 0xd5, 0x3d, - 0xd7, 0x4d, 0x37, 0xf3, 0x0a, 0xec, 0xca, 0x04, 0x75, 0xf6, 0x74, 0x32, 0x41, 0x9d, 0x3b, 0xf1, - 0x4c, 0x50, 0xe7, 0x4f, 0x21, 0x13, 0xd4, 0x63, 0x1f, 0x6a, 0x26, 0xa8, 0xd9, 0x47, 0x90, 0x09, - 0x6a, 0x3d, 0xc9, 0x04, 0x75, 0x21, 0x7f, 0x4a, 0x32, 0xec, 0x59, 0x73, 0xf2, 0x3f, 0xdd, 0x83, - 0x72, 0x5b, 0x46, 0x7a, 0x10, 0x01, 0xd8, 0xb2, 0x93, 0xd1, 0x66, 0x85, 0x83, 0xe0, 0x53, 0xa2, - 0x40, 0x38, 0x21, 0x45, 0xe9, 0x26, 0xf9, 0xa0, 0x1e, 0xef, 0xa1, 0x04, 0xcd, 0x52, 0x2f, 0xe5, - 0x67, 0x81, 0xb2, 0xff, 0x6a, 0x01, 0x2e, 0xf5, 0x5e, 0xd7, 0x89, 0x6e, 0xaa, 0x96, 0xbc, 0xa5, - 0xa4, 0x74, 0x53, 0x5c, 0xc8, 0x49, 0xb0, 0x06, 0x0e, 0x87, 0x73, 0x03, 0x66, 0x94, 0x21, 0xab, - 0xe7, 0x36, 0xf6, 0xb5, 0x24, 0xb5, 0xca, 0x61, 0xaf, 0x9e, 0x46, 0xc0, 0xdd, 0x75, 0xd0, 0x02, - 0x4c, 0x19, 0x85, 0xab, 0x55, 0x21, 0xcc, 0x28, 0x65, 0x58, 0xdd, 0x04, 0xe3, 0x34, 0xbe, 0xfd, - 0x73, 0x16, 0x3c, 0x96, 0x93, 0x24, 0x61, 0xe0, 0x68, 0x2f, 0x5b, 0x30, 0xd5, 0x36, 0xab, 0xf6, - 0x09, 0x0a, 0x65, 0xa4, 0x62, 0x50, 0x7d, 0x4d, 0x01, 0x70, 0x9a, 0xe8, 0xe2, 0xd5, 0xdf, 0xfa, - 0xfd, 0x4b, 0x1f, 0xfb, 0xed, 0xdf, 0xbf, 0xf4, 0xb1, 0xdf, 0xf9, 0xfd, 0x4b, 0x1f, 0xfb, 0xff, - 0x0f, 0x2f, 0x59, 0xbf, 0x75, 0x78, 0xc9, 0xfa, 0xed, 0xc3, 0x4b, 0xd6, 0xef, 0x1c, 0x5e, 0xb2, - 0x7e, 0xef, 0xf0, 0x92, 0xf5, 0xd5, 0x3f, 0xb8, 0xf4, 0xb1, 0xb7, 0x0b, 0x7b, 0x2f, 0xfc, 0xbf, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x41, 0x99, 0x07, 0x31, 0x7e, 0xe5, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ option go_package = "v1"; // Represents a Persistent Disk resource in AWS. -// +// // An AWS EBS disk must exist before mounting to a container. The disk // must also be in the same AWS zone as the kubelet. An AWS EBS disk // can only be mounted as read/write once. AWS EBS volumes support @@ -161,7 +161,7 @@ // Deprecated in 1.7, please use the bindings subresource of pods instead. message Binding { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -198,7 +198,7 @@ // ControllerPublishSecretRef is a reference to the secret object containing // sensitive information to pass to the CSI driver to complete the CSI // ControllerPublishVolume and ControllerUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the + // This field is optional, and may be empty if no secret is required. If the // secret object contains more than one secret, all secrets are passed. // +optional optional SecretReference controllerPublishSecretRef = 6; @@ -206,7 +206,7 @@ // NodeStageSecretRef is a reference to the secret object containing sensitive // information to pass to the CSI driver to complete the CSI NodeStageVolume // and NodeStageVolume and NodeUnstageVolume calls. - // This field is optional, and may be empty if no secret is required. If the + // This field is optional, and may be empty if no secret is required. If the // secret object contains more than one secret, all secrets are passed. // +optional optional SecretReference nodeStageSecretRef = 7; @@ -214,10 +214,50 @@ // NodePublishSecretRef is a reference to the secret object containing // sensitive information to pass to the CSI driver to complete the CSI // NodePublishVolume and NodeUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the + // This field is optional, and may be empty if no secret is required. If the // secret object contains more than one secret, all secrets are passed. // +optional optional SecretReference nodePublishSecretRef = 8; + + // ControllerExpandSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // ControllerExpandVolume call. + // This is an alpha field and requires enabling ExpandCSIVolumes feature gate. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secrets are passed. + // +optional + optional SecretReference controllerExpandSecretRef = 9; +} + +// Represents a source location of a volume to mount, managed by an external CSI driver +message CSIVolumeSource { + // Driver is the name of the CSI driver that handles this volume. + // Consult with your admin for the correct name as registered in the cluster. + optional string driver = 1; + + // Specifies a read-only configuration for the volume. + // Defaults to false (read/write). + // +optional + optional bool readOnly = 2; + + // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". + // If not provided, the empty value is passed to the associated CSI driver + // which will determine the default filesystem to apply. + // +optional + optional string fsType = 3; + + // VolumeAttributes stores driver-specific properties that are passed to the CSI + // driver. Consult your driver's documentation for supported values. + // +optional + map volumeAttributes = 4; + + // NodePublishSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // NodePublishVolume and NodeUnpublishVolume calls. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secret references are passed. + // +optional + optional LocalObjectReference nodePublishSecretRef = 5; } // Adds and removes POSIX capabilities from running containers. @@ -235,7 +275,7 @@ // Cephfs volumes do not support ownership management or SELinux relabeling. message CephFSPersistentVolumeSource { // Required: Monitors is a collection of Ceph monitors - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it repeated string monitors = 1; // Optional: Used as the mounted root, rather than the full Ceph tree, default is / @@ -243,23 +283,23 @@ optional string path = 2; // Optional: User is the rados user name, default is admin - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional string user = 3; // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional string secretFile = 4; // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional SecretReference secretRef = 5; // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional bool readOnly = 6; } @@ -268,7 +308,7 @@ // Cephfs volumes do not support ownership management or SELinux relabeling. message CephFSVolumeSource { // Required: Monitors is a collection of Ceph monitors - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it repeated string monitors = 1; // Optional: Used as the mounted root, rather than the full Ceph tree, default is / @@ -276,23 +316,23 @@ optional string path = 2; // Optional: User is the rados user name, default is admin - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional string user = 3; // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional string secretFile = 4; // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional LocalObjectReference secretRef = 5; // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional optional bool readOnly = 6; } @@ -302,20 +342,20 @@ // The volume must also be in the same region as the kubelet. // Cinder volumes support ownership management and SELinux relabeling. message CinderPersistentVolumeSource { - // volume id used to identify the volume in cinder - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // volume id used to identify the volume in cinder. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md optional string volumeID = 1; // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional optional string fsType = 2; // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional optional bool readOnly = 3; @@ -330,20 +370,20 @@ // The volume must also be in the same region as the kubelet. // Cinder volumes support ownership management and SELinux relabeling. message CinderVolumeSource { - // volume id used to identify the volume in cinder - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // volume id used to identify the volume in cinder. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md optional string volumeID = 1; // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional optional string fsType = 2; // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional optional bool readOnly = 3; @@ -386,7 +426,7 @@ // ComponentStatus (and ComponentStatusList) holds the cluster validation info. message ComponentStatus { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -400,7 +440,7 @@ // Status of all the conditions for the component as a list of ComponentStatus objects. message ComponentStatusList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -411,7 +451,7 @@ // ConfigMap holds configuration data for pods to consume. message ConfigMap { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -436,7 +476,7 @@ // ConfigMapEnvSource selects a ConfigMap to populate the environment // variables with. -// +// // The contents of the target ConfigMap's Data field will represent the // key-value pairs as environment variables. message ConfigMapEnvSource { @@ -456,14 +496,14 @@ // The key to select. optional string key = 2; - // Specify whether the ConfigMap or it's key must be defined + // Specify whether the ConfigMap or its key must be defined // +optional optional bool optional = 3; } // ConfigMapList is a resource containing a list of ConfigMap objects. message ConfigMapList { - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -497,7 +537,7 @@ } // Adapts a ConfigMap into a projected volume. -// +// // The contents of the target ConfigMap's Data field will be presented in a // projected volume as files using the keys in the Data field as the file names, // unless the items element is populated with specific mappings of keys to paths. @@ -516,13 +556,13 @@ // +optional repeated KeyToPath items = 2; - // Specify whether the ConfigMap or it's keys must be defined + // Specify whether the ConfigMap or its keys must be defined // +optional optional bool optional = 4; } // Adapts a ConfigMap into a volume. -// +// // The contents of the target ConfigMap's Data field will be presented in a // volume as files using the keys in the Data field as the file names, unless // the items element is populated with specific mappings of keys to paths. @@ -548,7 +588,7 @@ // +optional optional int32 defaultMode = 3; - // Specify whether the ConfigMap or it's keys must be defined + // Specify whether the ConfigMap or its keys must be defined // +optional optional bool optional = 4; } @@ -606,6 +646,9 @@ // +optional // +patchMergeKey=containerPort // +patchStrategy=merge + // +listType=map + // +listMapKey=containerPort + // +listMapKey=protocol repeated ContainerPort ports = 6; // List of sources to populate environment variables in the container. @@ -626,7 +669,7 @@ // Compute Resources required by this container. // Cannot be updated. - // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources + // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ // +optional optional ResourceRequirements resources = 8; @@ -638,7 +681,7 @@ repeated VolumeMount volumeMounts = 9; // volumeDevices is the list of block devices to be used by the container. - // This is an alpha feature and may change in the future. + // This is a beta feature. // +patchMergeKey=devicePath // +patchStrategy=merge // +optional @@ -658,6 +701,17 @@ // +optional optional Probe readinessProbe = 11; + // StartupProbe indicates that the Pod has successfully initialized. + // If specified, no other probes are executed until this completes successfully. + // If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. + // This can be used to provide different probe parameters at the beginning of a Pod's lifecycle, + // when it might take a long time to load data or warm a cache, than during steady-state operation. + // This cannot be updated. + // This is an alpha feature enabled by the StartupProbe feature flag. + // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + // +optional + optional Probe startupProbe = 22; + // Actions that the management system should take in response to container lifecycle events. // Cannot be updated. // +optional @@ -749,7 +803,7 @@ // This must be a valid port number, 0 < x < 65536. optional int32 containerPort = 3; - // Protocol for port. Must be UDP or TCP. + // Protocol for port. Must be UDP, TCP, or SCTP. // Defaults to "TCP". // +optional optional string protocol = 4; @@ -858,6 +912,13 @@ // Container's ID in the format 'docker://'. // +optional optional string containerID = 8; + + // Specifies whether the container has passed its startup probe. + // Initialized as false, becomes true after startupProbe is considered successful. + // Resets to false when the container is restarted, or if kubelet loses state temporarily. + // Is always true when no startupProbe is defined. + // +optional + optional bool started = 9; } // DaemonEndpoint contains information about a single Daemon endpoint. @@ -958,7 +1019,8 @@ // EndpointPort is a tuple that describes a single port. message EndpointPort { - // The name of this port (corresponds to ServicePort.Name). + // The name of this port. This must match the 'name' field in the + // corresponding ServicePort. // Must be a DNS_LABEL. // Optional only if one port is defined. // +optional @@ -968,7 +1030,7 @@ optional int32 port = 2; // The IP protocol for this port. - // Must be UDP or TCP. + // Must be UDP, TCP, or SCTP. // Default is TCP. // +optional optional string protocol = 3; @@ -1015,7 +1077,7 @@ // ] message Endpoints { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -1033,7 +1095,7 @@ // EndpointsList is a list of endpoints. message EndpointsList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1098,10 +1160,197 @@ optional SecretKeySelector secretKeyRef = 4; } +// An EphemeralContainer is a container that may be added temporarily to an existing pod for +// user-initiated activities such as debugging. Ephemeral containers have no resource or +// scheduling guarantees, and they will not be restarted when they exit or when a pod is +// removed or restarted. If an ephemeral container causes a pod to exceed its resource +// allocation, the pod may be evicted. +// Ephemeral containers may not be added by directly updating the pod spec. They must be added +// via the pod's ephemeralcontainers subresource, and they will appear in the pod spec +// once added. +// This is an alpha feature enabled by the EphemeralContainers feature flag. +message EphemeralContainer { + // Ephemeral containers have all of the fields of Container, plus additional fields + // specific to ephemeral containers. Fields in common with Container are in the + // following inlined struct so than an EphemeralContainer may easily be converted + // to a Container. + optional EphemeralContainerCommon ephemeralContainerCommon = 1; + + // If set, the name of the container from PodSpec that this ephemeral container targets. + // The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. + // If not set then the ephemeral container is run in whatever namespaces are shared + // for the pod. Note that the container runtime must support this feature. + // +optional + optional string targetContainerName = 2; +} + +// EphemeralContainerCommon is a copy of all fields in Container to be inlined in +// EphemeralContainer. This separate type allows easy conversion from EphemeralContainer +// to Container and allows separate documentation for the fields of EphemeralContainer. +// When a new field is added to Container it must be added here as well. +message EphemeralContainerCommon { + // Name of the ephemeral container specified as a DNS_LABEL. + // This name must be unique among all containers, init containers and ephemeral containers. + optional string name = 1; + + // Docker image name. + // More info: https://kubernetes.io/docs/concepts/containers/images + optional string image = 2; + + // Entrypoint array. Not executed within a shell. + // The docker image's ENTRYPOINT is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell + // +optional + repeated string command = 3; + + // Arguments to the entrypoint. + // The docker image's CMD is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell + // +optional + repeated string args = 4; + + // Container's working directory. + // If not specified, the container runtime's default will be used, which + // might be configured in the container image. + // Cannot be updated. + // +optional + optional string workingDir = 5; + + // Ports are not allowed for ephemeral containers. + repeated ContainerPort ports = 6; + + // List of sources to populate environment variables in the container. + // The keys defined within a source must be a C_IDENTIFIER. All invalid keys + // will be reported as an event when the container is starting. When a key exists in multiple + // sources, the value associated with the last source will take precedence. + // Values defined by an Env with a duplicate key will take precedence. + // Cannot be updated. + // +optional + repeated EnvFromSource envFrom = 19; + + // List of environment variables to set in the container. + // Cannot be updated. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + repeated EnvVar env = 7; + + // Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources + // already allocated to the pod. + // +optional + optional ResourceRequirements resources = 8; + + // Pod volumes to mount into the container's filesystem. + // Cannot be updated. + // +optional + // +patchMergeKey=mountPath + // +patchStrategy=merge + repeated VolumeMount volumeMounts = 9; + + // volumeDevices is the list of block devices to be used by the container. + // This is a beta feature. + // +patchMergeKey=devicePath + // +patchStrategy=merge + // +optional + repeated VolumeDevice volumeDevices = 21; + + // Probes are not allowed for ephemeral containers. + // +optional + optional Probe livenessProbe = 10; + + // Probes are not allowed for ephemeral containers. + // +optional + optional Probe readinessProbe = 11; + + // Probes are not allowed for ephemeral containers. + // +optional + optional Probe startupProbe = 22; + + // Lifecycle is not allowed for ephemeral containers. + // +optional + optional Lifecycle lifecycle = 12; + + // Optional: Path at which the file to which the container's termination message + // will be written is mounted into the container's filesystem. + // Message written is intended to be brief final status, such as an assertion failure message. + // Will be truncated by the node if greater than 4096 bytes. The total message length across + // all containers will be limited to 12kb. + // Defaults to /dev/termination-log. + // Cannot be updated. + // +optional + optional string terminationMessagePath = 13; + + // Indicate how the termination message should be populated. File will use the contents of + // terminationMessagePath to populate the container status message on both success and failure. + // FallbackToLogsOnError will use the last chunk of container log output if the termination + // message file is empty and the container exited with an error. + // The log output is limited to 2048 bytes or 80 lines, whichever is smaller. + // Defaults to File. + // Cannot be updated. + // +optional + optional string terminationMessagePolicy = 20; + + // Image pull policy. + // One of Always, Never, IfNotPresent. + // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. + // Cannot be updated. + // More info: https://kubernetes.io/docs/concepts/containers/images#updating-images + // +optional + optional string imagePullPolicy = 14; + + // SecurityContext is not allowed for ephemeral containers. + // +optional + optional SecurityContext securityContext = 15; + + // Whether this container should allocate a buffer for stdin in the container runtime. If this + // is not set, reads from stdin in the container will always result in EOF. + // Default is false. + // +optional + optional bool stdin = 16; + + // Whether the container runtime should close the stdin channel after it has been opened by + // a single attach. When stdin is true the stdin stream will remain open across multiple attach + // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the + // first client attaches to stdin, and then remains open and accepts data until the client disconnects, + // at which time stdin is closed and remains closed until the container is restarted. If this + // flag is false, a container processes that reads from stdin will never receive an EOF. + // Default is false + // +optional + optional bool stdinOnce = 17; + + // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. + // Default is false. + // +optional + optional bool tty = 18; +} + +// A list of ephemeral containers used with the Pod ephemeralcontainers subresource. +message EphemeralContainers { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // A list of ephemeral containers associated with this pod. New ephemeral containers + // may be appended to this list, but existing ephemeral containers may not be removed + // or modified. + // +patchMergeKey=name + // +patchStrategy=merge + repeated EphemeralContainer ephemeralContainers = 2; +} + // Event is a report of an event somewhere in the cluster. message Event { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // The object that this event is about. @@ -1166,7 +1415,7 @@ // EventList is a list of events. message EventList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1184,6 +1433,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastObservedTime = 2; // State of this Series: Ongoing or Finished + // Deprecated. Planned removal for 1.18 optional string state = 3; } @@ -1314,7 +1564,7 @@ } // Represents a Persistent Disk resource in Google Compute Engine. -// +// // A GCE PD must exist before mounting to a container. The disk must // also be in the same GCE project and zone as the kubelet. A GCE PD // can only be mounted as read/write once or read-only many times. GCE @@ -1350,7 +1600,7 @@ // Represents a volume that is populated with the contents of a git repository. // Git repo volumes do not support ownership management. // Git repo volumes support SELinux relabeling. -// +// // DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an // EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir // into the Pod's container. @@ -1372,18 +1622,42 @@ // Represents a Glusterfs mount that lasts the lifetime of a pod. // Glusterfs volumes do not support ownership management or SELinux relabeling. +message GlusterfsPersistentVolumeSource { + // EndpointsName is the endpoint name that details Glusterfs topology. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + optional string endpoints = 1; + + // Path is the Glusterfs volume path. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + optional string path = 2; + + // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. + // Defaults to false. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + // +optional + optional bool readOnly = 3; + + // EndpointsNamespace is the namespace that contains Glusterfs endpoint. + // If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + // +optional + optional string endpointsNamespace = 4; +} + +// Represents a Glusterfs mount that lasts the lifetime of a pod. +// Glusterfs volumes do not support ownership management or SELinux relabeling. message GlusterfsVolumeSource { // EndpointsName is the endpoint name that details Glusterfs topology. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod optional string endpoints = 1; // Path is the Glusterfs volume path. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod optional string path = 2; // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. // Defaults to false. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod // +optional optional bool readOnly = 3; } @@ -1609,11 +1883,15 @@ // +optional optional Handler postStart = 1; - // PreStop is called immediately before a container is terminated. - // The container is terminated after the handler completes. - // The reason for termination is passed to the handler. - // Regardless of the outcome of the handler, the container is eventually terminated. - // Other management of the container blocks until the hook completes. + // PreStop is called immediately before a container is terminated due to an + // API request or management event such as liveness/startup probe failure, + // preemption, resource contention, etc. The handler is not called if the + // container crashes or exits. The reason for termination is passed to the + // handler. The Pod's termination grace period countdown begins before the + // PreStop hooked is executed. Regardless of the outcome of the handler, the + // container will eventually terminate within the Pod's termination grace + // period. Other management of the container blocks until the hook completes + // or until the termination grace period is reached. // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks // +optional optional Handler preStop = 2; @@ -1622,12 +1900,12 @@ // LimitRange sets resource usage limits for each kind of resource in a Namespace. message LimitRange { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the limits enforced. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional LimitRangeSpec spec = 2; } @@ -1662,7 +1940,7 @@ // LimitRangeList is a list of LimitRange items. message LimitRangeList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1680,7 +1958,7 @@ // List holds a list of objects, which may not be known by the server. message List { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1724,10 +2002,14 @@ message LocalVolumeSource { // The full path to the volume on the node. // It can be either a directory or block device (disk, partition, ...). - // Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. - // Block devices can be represented only by VolumeMode=Block, which also requires the - // BlockVolume alpha feature gate to be enabled. optional string path = 1; + + // Filesystem type to mount. + // It applies only when the Path is a block device. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified. + // +optional + optional string fsType = 2; } // Represents an NFS mount that lasts the lifetime of a pod. @@ -1753,25 +2035,43 @@ // Use of multiple namespaces is optional. message Namespace { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the behavior of the Namespace. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional NamespaceSpec spec = 2; // Status describes the current status of a Namespace. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional NamespaceStatus status = 3; } +// NamespaceCondition contains details about state of namespace. +message NamespaceCondition { + // Type of namespace controller condition. + optional string type = 1; + + // Status of the condition, one of True, False, Unknown. + optional string status = 2; + + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4; + + // +optional + optional string reason = 5; + + // +optional + optional string message = 6; +} + // NamespaceList is a list of Namespaces. message NamespaceList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1794,25 +2094,31 @@ // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/ // +optional optional string phase = 1; + + // Represents the latest available observations of a namespace's current state. + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + repeated NamespaceCondition conditions = 2; } // Node is a worker node in Kubernetes. // Each node will have a unique identifier in the cache (i.e. in etcd). message Node { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the behavior of a node. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional NodeSpec spec = 2; // Most recently observed status of the node. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional NodeStatus status = 3; } @@ -1940,7 +2246,7 @@ // NodeList is the whole list of all Nodes which have been registered with master. message NodeList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -2008,6 +2314,13 @@ // +optional optional string podCIDR = 1; + // podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this + // field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for + // each of IPv4 and IPv6. + // +optional + // +patchStrategy=merge + repeated string podCIDRs = 7; + // ID of the node assigned by the cloud provider in the format: :// // +optional optional string providerID = 3; @@ -2060,6 +2373,9 @@ // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses + // Note: This field is declared as mergeable, but the merge key is not sufficiently + // unique, which can cause data corruption when it is merged. Callers should instead + // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge @@ -2142,7 +2458,7 @@ // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object message ObjectReference { // Kind of the referent. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional string kind = 1; @@ -2166,7 +2482,7 @@ optional string apiVersion = 5; // Specific resourceVersion to which this reference is made, if any. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency // +optional optional string resourceVersion = 6; @@ -2187,7 +2503,7 @@ // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes message PersistentVolume { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -2208,7 +2524,7 @@ // PersistentVolumeClaim is a user's request for and claim to a persistent volume message PersistentVolumeClaim { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -2252,7 +2568,7 @@ // PersistentVolumeClaimList is a list of PersistentVolumeClaim items. message PersistentVolumeClaimList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -2289,9 +2605,20 @@ // volumeMode defines what type of volume is required by the claim. // Value of Filesystem is implied when not included in claim spec. - // This is an alpha feature and may change in the future. + // This is a beta feature. // +optional optional string volumeMode = 6; + + // This field requires the VolumeSnapshotDataSource alpha feature gate to be + // enabled and currently VolumeSnapshot is the only supported data source. + // If the provisioner can support VolumeSnapshot data source, it will create + // a new volume and data will be restored to the volume at the same time. + // If the provisioner does not support VolumeSnapshot data source, volume will + // not be created and the failure will be reported as an event. + // In the future, we plan to support more data source types and the behavior + // of the provisioner may change. + // +optional + optional TypedLocalObjectReference dataSource = 7; } // PersistentVolumeClaimStatus is the current status of a persistent volume claim. @@ -2335,7 +2662,7 @@ // PersistentVolumeList is a list of PersistentVolume items. message PersistentVolumeList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -2369,9 +2696,9 @@ // Glusterfs represents a Glusterfs volume that is attached to a host and // exposed to the pod. Provisioned by an admin. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md + // More info: https://examples.k8s.io/volumes/glusterfs/README.md // +optional - optional GlusterfsVolumeSource glusterfs = 4; + optional GlusterfsPersistentVolumeSource glusterfs = 4; // NFS represents an NFS mount on the host. Provisioned by an admin. // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs @@ -2379,7 +2706,7 @@ optional NFSVolumeSource nfs = 5; // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md + // More info: https://examples.k8s.io/volumes/rbd/README.md // +optional optional RBDPersistentVolumeSource rbd = 6; @@ -2388,8 +2715,8 @@ // +optional optional ISCSIPersistentVolumeSource iscsi = 7; - // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // Cinder represents a cinder volume attached and mounted on kubelets host machine. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional optional CinderPersistentVolumeSource cinder = 8; @@ -2442,11 +2769,11 @@ optional LocalVolumeSource local = 20; // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod - // More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md + // More info: https://examples.k8s.io/volumes/storageos/README.md // +optional optional StorageOSPersistentVolumeSource storageos = 21; - // CSI represents storage that handled by an external CSI driver (Beta feature). + // CSI represents storage that is handled by an external CSI driver (Beta feature). // +optional optional CSIPersistentVolumeSource csi = 22; } @@ -2494,7 +2821,7 @@ // volumeMode defines if a volume is intended to be used with a formatted filesystem // or to remain in raw block state. Value of Filesystem is implied when not included in spec. - // This is an alpha feature and may change in the future. + // This is a beta feature. // +optional optional string volumeMode = 8; @@ -2536,12 +2863,12 @@ // by clients and scheduled onto hosts. message Pod { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of the pod. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional PodSpec spec = 2; @@ -2549,7 +2876,7 @@ // This data may not be up to date. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional PodStatus status = 3; } @@ -2755,15 +3082,23 @@ repeated string command = 6; } +// IP address information for entries in the (plural) PodIPs field. +// Each entry includes: +// IP: An IP address allocated to the pod. Routable at least within the cluster. +message PodIP { + // ip is an IP address (IPv4 or IPv6) assigned to the pod + optional string ip = 1; +} + // PodList is a list of Pods. message PodList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; // List of pods. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md repeated Pod items = 2; } @@ -2850,6 +3185,12 @@ // +optional optional SELinuxOptions seLinuxOptions = 1; + // The Windows specific settings applied to all containers. + // If unspecified, the options within a container's SecurityContext will be used. + // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + // +optional + optional WindowsSecurityContextOptions windowsOptions = 8; + // The UID to run the entrypoint of the container process. // Defaults to user specified in image metadata if unspecified. // May also be set in SecurityContext. If set in both SecurityContext and @@ -2884,11 +3225,11 @@ // A special supplemental group that applies to all containers in a pod. // Some volume types allow the Kubelet to change the ownership of that volume // to be owned by the pod: - // + // // 1. The owning GID will be the FSGroup // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) // 3. The permission bits are OR'd with rw-rw---- - // + // // If unset, the Kubelet will not modify the ownership and permissions of any volume. // +optional optional int64 fsGroup = 5; @@ -2921,7 +3262,7 @@ // init container fails, the pod is considered to have failed and is handled according // to its restartPolicy. The name for an init container or normal container must be // unique among all containers. - // Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. + // Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. // The resourceRequirements of an init container are taken into account during scheduling // by finding the highest request/limit for each resource type, and then using the max of // of that value or the sum of the normal containers. Limits are applied to init containers @@ -2941,6 +3282,16 @@ // +patchStrategy=merge repeated Container containers = 2; + // List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing + // pod to perform user-initiated actions such as debugging. This list cannot be specified when + // creating a pod, and it cannot be modified by updating the pod spec. In order to add an + // ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. + // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + repeated EphemeralContainer ephemeralContainers = 34; + // Restart policy for all containers within the pod. // One of Always, OnFailure, Never. // Default to Always. @@ -3024,7 +3375,7 @@ // in the same pod, and the first process in each container will not be assigned PID 1. // HostPID and ShareProcessNamespace cannot both be set. // Optional: Default to false. - // This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature. + // This field is beta-level and may be disabled with the PodShareProcessNamespace feature. // +k8s:conversion-gen=false // +optional optional bool shareProcessNamespace = 27; @@ -3099,9 +3450,55 @@ // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md + // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional repeated PodReadinessGate readinessGates = 28; + + // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used + // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. + // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an + // empty definition that uses the default runtime handler. + // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md + // This is a beta feature as of Kubernetes v1.14. + // +optional + optional string runtimeClassName = 29; + + // EnableServiceLinks indicates whether information about services should be injected into pod's + // environment variables, matching the syntax of Docker links. + // Optional: Defaults to true. + // +optional + optional bool enableServiceLinks = 30; + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + optional string preemptionPolicy = 31; + + // Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. + // This field will be autopopulated at admission time by the RuntimeClass admission controller. If + // the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. + // The RuntimeClass admission controller will reject Pod create requests which have the overhead already + // set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value + // defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. + // More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md + // This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature. + // +optional + map overhead = 32; + + // TopologySpreadConstraints describes how a group of pods ought to spread across topology + // domains. Scheduler will schedule pods in a way which abides by the constraints. + // This field is alpha-level and is only honored by clusters that enables the EvenPodsSpread + // feature. + // All topologySpreadConstraints are ANDed. + // +optional + // +patchMergeKey=topologyKey + // +patchStrategy=merge + // +listType=map + // +listMapKey=topologyKey + // +listMapKey=whenUnsatisfiable + repeated TopologySpreadConstraint topologySpreadConstraints = 33; } // PodStatus represents information about the status of a pod. Status may trail the actual @@ -3112,7 +3509,7 @@ // The conditions array, the reason and message fields, and the individual container status // arrays contain more detail about the pod's status. // There are five possible phase values: - // + // // Pending: The pod has been accepted by the Kubernetes system, but one or more of the // container images has not been created. This includes time before being scheduled as // well as time spent downloading images over the network, which could take a while. @@ -3124,7 +3521,7 @@ // by the system. // Unknown: For some reason the state of the pod could not be obtained, typically due to an // error in communicating with the host of the pod. - // + // // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase // +optional optional string phase = 1; @@ -3164,6 +3561,14 @@ // +optional optional string podIP = 6; + // podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must + // match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list + // is empty if no IPs have been allocated yet. + // +optional + // +patchStrategy=merge + // +patchMergeKey=ip + repeated PodIP podIPs = 12; + // RFC 3339 date and time at which the object was acknowledged by the Kubelet. // This is before the Kubelet pulled the container image(s) for the pod. // +optional @@ -3186,12 +3591,17 @@ // More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md // +optional optional string qosClass = 9; + + // Status for any ephemeral containers that have run in this pod. + // This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature. + // +optional + repeated ContainerStatus ephemeralContainerStatuses = 13; } // PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded message PodStatusResult { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -3199,7 +3609,7 @@ // This data may not be up to date. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional PodStatus status = 2; } @@ -3207,12 +3617,12 @@ // PodTemplate describes a template for creating copies of a predefined pod. message PodTemplate { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Template defines the pods that will be created from this pod template. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional PodTemplateSpec template = 2; } @@ -3220,7 +3630,7 @@ // PodTemplateList is a list of PodTemplates. message PodTemplateList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -3231,12 +3641,12 @@ // PodTemplateSpec describes the data a pod should have when created from a template message PodTemplateSpec { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of the pod. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional PodSpec spec = 2; } @@ -3316,7 +3726,7 @@ optional int32 periodSeconds = 4; // Minimum consecutive successes for the probe to be considered successful after having failed. - // Defaults to 1. Must be 1 for liveness. Minimum value is 1. + // Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. // +optional optional int32 successThreshold = 5; @@ -3365,17 +3775,22 @@ // Default is no group // +optional optional string group = 5; + + // Tenant owning the given Quobyte volume in the Backend + // Used with dynamically provisioned Quobyte volumes, value is set by the plugin + // +optional + optional string tenant = 6; } // Represents a Rados Block Device mount that lasts the lifetime of a pod. // RBD volumes support ownership management and SELinux relabeling. message RBDPersistentVolumeSource { // A collection of Ceph monitors. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it repeated string monitors = 1; // The rados image name. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it optional string image = 2; // Filesystem type of the volume that you want to mount. @@ -3388,32 +3803,32 @@ // The rados pool name. // Default is rbd. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional string pool = 4; // The rados user name. // Default is admin. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional string user = 5; // Keyring is the path to key ring for RBDUser. // Default is /etc/ceph/keyring. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional string keyring = 6; // SecretRef is name of the authentication secret for RBDUser. If provided // overrides keyring. // Default is nil. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional SecretReference secretRef = 7; // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional bool readOnly = 8; } @@ -3422,11 +3837,11 @@ // RBD volumes support ownership management and SELinux relabeling. message RBDVolumeSource { // A collection of Ceph monitors. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it repeated string monitors = 1; // The rados image name. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it optional string image = 2; // Filesystem type of the volume that you want to mount. @@ -3439,32 +3854,32 @@ // The rados pool name. // Default is rbd. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional string pool = 4; // The rados user name. // Default is admin. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional string user = 5; // Keyring is the path to key ring for RBDUser. // Default is /etc/ceph/keyring. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional string keyring = 6; // SecretRef is name of the authentication secret for RBDUser. If provided // overrides keyring. // Default is nil. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional LocalObjectReference secretRef = 7; // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional optional bool readOnly = 8; } @@ -3472,7 +3887,7 @@ // RangeAllocation is not a public type. message RangeAllocation { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -3487,12 +3902,12 @@ message ReplicationController { // If the Labels of a ReplicationController are empty, they are defaulted to // be the same as the Pod(s) that the replication controller manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the replication controller. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicationControllerSpec spec = 2; @@ -3500,7 +3915,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicationControllerStatus status = 3; } @@ -3529,7 +3944,7 @@ // ReplicationControllerList is a collection of replication controllers. message ReplicationControllerList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -3615,17 +4030,17 @@ // ResourceQuota sets aggregate quota restrictions enforced per namespace message ResourceQuota { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the desired quota. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ResourceQuotaSpec spec = 2; // Status defines the actual enforced quota and its current usage. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ResourceQuotaStatus status = 3; } @@ -3633,7 +4048,7 @@ // ResourceQuotaList is a list of ResourceQuota items. message ResourceQuotaList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -3732,6 +4147,7 @@ optional string storagePool = 6; // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // Default is ThinProvisioned. // +optional optional string storageMode = 7; @@ -3741,7 +4157,8 @@ // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // Ex. "ext4", "xfs", "ntfs". + // Default is "xfs" // +optional optional string fsType = 9; @@ -3776,6 +4193,7 @@ optional string storagePool = 6; // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // Default is ThinProvisioned. // +optional optional string storageMode = 7; @@ -3785,7 +4203,8 @@ // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // Ex. "ext4", "xfs", "ntfs". + // Default is "xfs". // +optional optional string fsType = 9; @@ -3825,7 +4244,7 @@ // the Data field must be less than MaxSecretSize bytes. message Secret { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -3851,7 +4270,7 @@ // SecretEnvSource selects a Secret to populate the environment // variables with. -// +// // The contents of the target Secret's Data field will represent the // key-value pairs as environment variables. message SecretEnvSource { @@ -3871,7 +4290,7 @@ // The key of the secret to select from. Must be a valid secret key. optional string key = 2; - // Specify whether the Secret or it's key must be defined + // Specify whether the Secret or its key must be defined // +optional optional bool optional = 3; } @@ -3879,7 +4298,7 @@ // SecretList is a list of Secret. message SecretList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -3889,7 +4308,7 @@ } // Adapts a secret into a projected volume. -// +// // The contents of the target Secret's Data field will be presented in a // projected volume as files using the keys in the Data field as the file names. // Note that this is identical to a secret volume source without the default @@ -3925,7 +4344,7 @@ } // Adapts a Secret into a volume. -// +// // The contents of the target Secret's Data field will be presented in a volume // as files using the keys in the Data field as the file names. // Secret volumes support ownership management and SELinux relabeling. @@ -3953,7 +4372,7 @@ // +optional optional int32 defaultMode = 3; - // Specify whether the Secret or it's keys must be defined + // Specify whether the Secret or its keys must be defined // +optional optional bool optional = 4; } @@ -3980,6 +4399,12 @@ // +optional optional SELinuxOptions seLinuxOptions = 3; + // The Windows specific settings applied to all containers. + // If unspecified, the options from the PodSecurityContext will be used. + // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + // +optional + optional WindowsSecurityContextOptions windowsOptions = 10; + // The UID to run the entrypoint of the container process. // Defaults to user specified in image metadata if unspecified. // May also be set in PodSecurityContext. If set in both SecurityContext and @@ -4016,6 +4441,13 @@ // 2) has CAP_SYS_ADMIN // +optional optional bool allowPrivilegeEscalation = 7; + + // procMount denotes the type of proc mount to use for the containers. + // The default is DefaultProcMount which uses the container runtime defaults for + // readonly paths and masked paths. + // This requires the ProcMountType feature flag to be enabled. + // +optional + optional string procMount = 9; } // SerializedReference is a reference to serialized object. @@ -4030,19 +4462,19 @@ // will answer requests sent through the proxy. message Service { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the behavior of a service. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ServiceSpec spec = 2; // Most recently observed status of the service. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ServiceStatus status = 3; } @@ -4053,7 +4485,7 @@ // * a set of secrets message ServiceAccount { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -4080,7 +4512,7 @@ // ServiceAccountList is a list of ServiceAccount objects message ServiceAccountList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -4118,7 +4550,7 @@ // ServiceList holds a list of services. message ServiceList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -4129,13 +4561,14 @@ // ServicePort contains information on service's port. message ServicePort { // The name of this port within the service. This must be a DNS_LABEL. - // All ports within a ServiceSpec must have unique names. This maps to - // the 'Name' field in EndpointPort objects. + // All ports within a ServiceSpec must have unique names. When considering + // the endpoints for a Service, this must match the 'name' field in the + // EndpointPort. // Optional if only one ServicePort is defined on this service. // +optional optional string name = 1; - // The IP protocol for this port. Supports "TCP" and "UDP". + // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". // Default is TCP. // +optional optional string protocol = 2; @@ -4180,6 +4613,9 @@ // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies // +patchMergeKey=port // +patchStrategy=merge + // +listType=map + // +listMapKey=port + // +listMapKey=protocol repeated ServicePort ports = 1; // Route service traffic to pods with label keys and values matching this @@ -4216,7 +4652,7 @@ // "LoadBalancer" builds on NodePort and creates an // external load-balancer (if supported in the current cloud) which routes // to the clusterIP. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types + // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types // +optional optional string type = 4; @@ -4287,6 +4723,16 @@ // sessionAffinityConfig contains the configurations of session affinity. // +optional optional SessionAffinityConfig sessionAffinityConfig = 14; + + // ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs. + // IPv6). If a specific IP family is requested, the clusterIP field will be allocated from that family, if it is + // available in the cluster. If no IP family is requested, the cluster's primary IP family will be used. + // Other IP fields (loadBalancerIP, loadBalancerSourceRanges, externalIPs) and controllers which + // allocate external load-balancers should use the same IP family. Endpoints for this Service will be of + // this family. This field is immutable after creation. Assigning a ServiceIPFamily not available in the + // cluster (e.g. IPv6 in IPv4 only cluster) is an error condition and will fail during clusterIP assignment. + // +optional + optional string ipFamily = 15; } // ServiceStatus represents the current status of a service. @@ -4465,6 +4911,75 @@ repeated TopologySelectorLabelRequirement matchLabelExpressions = 1; } +// TopologySpreadConstraint specifies how to spread matching pods among the given topology. +message TopologySpreadConstraint { + // MaxSkew describes the degree to which pods may be unevenly distributed. + // It's the maximum permitted difference between the number of matching pods in + // any two topology domains of a given topology type. + // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same + // labelSelector spread as 1/1/0: + // +-------+-------+-------+ + // | zone1 | zone2 | zone3 | + // +-------+-------+-------+ + // | P | P | | + // +-------+-------+-------+ + // - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; + // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) + // violate MaxSkew(1). + // - if MaxSkew is 2, incoming pod can be scheduled onto any zone. + // It's a required field. Default value is 1 and 0 is not allowed. + optional int32 maxSkew = 1; + + // TopologyKey is the key of node labels. Nodes that have a label with this key + // and identical values are considered to be in the same topology. + // We consider each as a "bucket", and try to put balanced number + // of pods into each bucket. + // It's a required field. + optional string topologyKey = 2; + + // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy + // the spread constraint. + // - DoNotSchedule (default) tells the scheduler not to schedule it + // - ScheduleAnyway tells the scheduler to still schedule it + // It's considered as "Unsatisfiable" if and only if placing incoming pod on any + // topology violates "MaxSkew". + // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same + // labelSelector spread as 3/1/1: + // +-------+-------+-------+ + // | zone1 | zone2 | zone3 | + // +-------+-------+-------+ + // | P P P | P | P | + // +-------+-------+-------+ + // If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled + // to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies + // MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler + // won't make it *more* imbalanced. + // It's a required field. + optional string whenUnsatisfiable = 3; + + // LabelSelector is used to find matching pods. + // Pods that match this label selector are counted to determine the number of pods + // in their corresponding topology domain. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 4; +} + +// TypedLocalObjectReference contains enough information to let you locate the +// typed referenced object inside the same namespace. +message TypedLocalObjectReference { + // APIGroup is the group for the resource being referenced. + // If APIGroup is not specified, the specified Kind must be in the core API group. + // For any other third-party types, APIGroup is required. + // +optional + optional string apiGroup = 1; + + // Kind is the type of resource being referenced + optional string kind = 2; + + // Name is the name of resource being referenced + optional string name = 3; +} + // Volume represents a named volume in a pod that may be accessed by any container in the pod. message Volume { // Volume's name. @@ -4512,6 +5027,14 @@ // This field is beta in 1.10. // +optional optional string mountPropagation = 5; + + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + // This field is beta in 1.15. + // +optional + optional string subPathExpr = 6; } // VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from. @@ -4589,12 +5112,12 @@ // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md + // More info: https://examples.k8s.io/volumes/iscsi/README.md // +optional optional ISCSIVolumeSource iscsi = 8; // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md + // More info: https://examples.k8s.io/volumes/glusterfs/README.md // +optional optional GlusterfsVolumeSource glusterfs = 9; @@ -4605,7 +5128,7 @@ optional PersistentVolumeClaimVolumeSource persistentVolumeClaim = 10; // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md + // More info: https://examples.k8s.io/volumes/rbd/README.md // +optional optional RBDVolumeSource rbd = 11; @@ -4614,8 +5137,8 @@ // +optional optional FlexVolumeSource flexVolume = 12; - // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // Cinder represents a cinder volume attached and mounted on kubelets host machine. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional optional CinderVolumeSource cinder = 13; @@ -4672,6 +5195,10 @@ // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. // +optional optional StorageOSVolumeSource storageos = 27; + + // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). + // +optional + optional CSIVolumeSource csi = 28; } // Represents a vSphere volume resource. @@ -4704,3 +5231,26 @@ optional PodAffinityTerm podAffinityTerm = 2; } +// WindowsSecurityContextOptions contain Windows-specific options and credentials. +message WindowsSecurityContextOptions { + // GMSACredentialSpecName is the name of the GMSA credential spec to use. + // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. + // +optional + optional string gmsaCredentialSpecName = 1; + + // GMSACredentialSpec is where the GMSA admission webhook + // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the + // GMSA credential spec named by the GMSACredentialSpecName field. + // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. + // +optional + optional string gmsaCredentialSpec = 2; + + // The UserName in Windows to run the entrypoint of the container process. + // Defaults to the user specified in image metadata if unspecified. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + // This field is alpha-level and it is only honored by servers that enable the WindowsRunAsUserName feature flag. + // +optional + optional string runAsUserName = 3; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -88,6 +88,7 @@ &RangeAllocation{}, &ConfigMap{}, &ConfigMapList{}, + &EphemeralContainers{}, ) // Add common types diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/taint.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/taint.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/taint.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/taint.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,8 +24,14 @@ return t.Key == taintToMatch.Key && t.Effect == taintToMatch.Effect } -// taint.ToString() converts taint struct to string in format key=value:effect or key:effect. +// taint.ToString() converts taint struct to string in format '=:', '=:', ':', or ''. func (t *Taint) ToString() string { + if len(t.Effect) == 0 { + if len(t.Value) == 0 { + return fmt.Sprintf("%v", t.Key) + } + return fmt.Sprintf("%v=%v:", t.Key, t.Value) + } if len(t.Value) == 0 { return fmt.Sprintf("%v:%v", t.Key, t.Effect) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,6 +28,8 @@ NamespaceDefault string = "default" // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces NamespaceAll string = "" + // NamespaceNodeLease is the namespace where we place node lease objects (used for node heartbeats) + NamespaceNodeLease string = "kube-node-lease" ) // Volume represents a named volume in a pod that may be accessed by any container in the pod. @@ -85,11 +87,11 @@ NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,7,opt,name=nfs"` // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md + // More info: https://examples.k8s.io/volumes/iscsi/README.md // +optional ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty" protobuf:"bytes,8,opt,name=iscsi"` // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md + // More info: https://examples.k8s.io/volumes/glusterfs/README.md // +optional Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,9,opt,name=glusterfs"` // PersistentVolumeClaimVolumeSource represents a reference to a @@ -98,15 +100,15 @@ // +optional PersistentVolumeClaim *PersistentVolumeClaimVolumeSource `json:"persistentVolumeClaim,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaim"` // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md + // More info: https://examples.k8s.io/volumes/rbd/README.md // +optional RBD *RBDVolumeSource `json:"rbd,omitempty" protobuf:"bytes,11,opt,name=rbd"` // FlexVolume represents a generic volume resource that is // provisioned/attached using an exec based plugin. // +optional FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty" protobuf:"bytes,12,opt,name=flexVolume"` - // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // Cinder represents a cinder volume attached and mounted on kubelets host machine. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional Cinder *CinderVolumeSource `json:"cinder,omitempty" protobuf:"bytes,13,opt,name=cinder"` // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime @@ -149,6 +151,9 @@ // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. // +optional StorageOS *StorageOSVolumeSource `json:"storageos,omitempty" protobuf:"bytes,27,opt,name=storageos"` + // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). + // +optional + CSI *CSIVolumeSource `json:"csi,omitempty" protobuf:"bytes,28,opt,name=csi"` } // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. @@ -187,23 +192,23 @@ HostPath *HostPathVolumeSource `json:"hostPath,omitempty" protobuf:"bytes,3,opt,name=hostPath"` // Glusterfs represents a Glusterfs volume that is attached to a host and // exposed to the pod. Provisioned by an admin. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md + // More info: https://examples.k8s.io/volumes/glusterfs/README.md // +optional - Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,4,opt,name=glusterfs"` + Glusterfs *GlusterfsPersistentVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,4,opt,name=glusterfs"` // NFS represents an NFS mount on the host. Provisioned by an admin. // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs // +optional NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,5,opt,name=nfs"` // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md + // More info: https://examples.k8s.io/volumes/rbd/README.md // +optional RBD *RBDPersistentVolumeSource `json:"rbd,omitempty" protobuf:"bytes,6,opt,name=rbd"` // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. Provisioned by an admin. // +optional ISCSI *ISCSIPersistentVolumeSource `json:"iscsi,omitempty" protobuf:"bytes,7,opt,name=iscsi"` - // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // Cinder represents a cinder volume attached and mounted on kubelets host machine. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional Cinder *CinderPersistentVolumeSource `json:"cinder,omitempty" protobuf:"bytes,8,opt,name=cinder"` // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime @@ -243,10 +248,10 @@ // +optional Local *LocalVolumeSource `json:"local,omitempty" protobuf:"bytes,20,opt,name=local"` // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod - // More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md + // More info: https://examples.k8s.io/volumes/storageos/README.md // +optional StorageOS *StorageOSPersistentVolumeSource `json:"storageos,omitempty" protobuf:"bytes,21,opt,name=storageos"` - // CSI represents storage that handled by an external CSI driver (Beta feature). + // CSI represents storage that is handled by an external CSI driver (Beta feature). // +optional CSI *CSIPersistentVolumeSource `json:"csi,omitempty" protobuf:"bytes,22,opt,name=csi"` } @@ -270,7 +275,7 @@ type PersistentVolume struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -324,7 +329,7 @@ MountOptions []string `json:"mountOptions,omitempty" protobuf:"bytes,7,opt,name=mountOptions"` // volumeMode defines if a volume is intended to be used with a formatted filesystem // or to remain in raw block state. Value of Filesystem is implied when not included in spec. - // This is an alpha feature and may change in the future. + // This is a beta feature. // +optional VolumeMode *PersistentVolumeMode `json:"volumeMode,omitempty" protobuf:"bytes,8,opt,name=volumeMode,casttype=PersistentVolumeMode"` // NodeAffinity defines constraints that limit what nodes this volume can be accessed from. @@ -385,7 +390,7 @@ type PersistentVolumeList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of persistent volumes. @@ -400,7 +405,7 @@ type PersistentVolumeClaim struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -422,7 +427,7 @@ type PersistentVolumeClaimList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // A list of persistent volume claims. @@ -453,9 +458,19 @@ StorageClassName *string `json:"storageClassName,omitempty" protobuf:"bytes,5,opt,name=storageClassName"` // volumeMode defines what type of volume is required by the claim. // Value of Filesystem is implied when not included in claim spec. - // This is an alpha feature and may change in the future. + // This is a beta feature. // +optional VolumeMode *PersistentVolumeMode `json:"volumeMode,omitempty" protobuf:"bytes,6,opt,name=volumeMode,casttype=PersistentVolumeMode"` + // This field requires the VolumeSnapshotDataSource alpha feature gate to be + // enabled and currently VolumeSnapshot is the only supported data source. + // If the provisioner can support VolumeSnapshot data source, it will create + // a new volume and data will be restored to the volume at the same time. + // If the provisioner does not support VolumeSnapshot data source, volume will + // not be created and the failure will be reported as an event. + // In the future, we plan to support more data source types and the behavior + // of the provisioner may change. + // +optional + DataSource *TypedLocalObjectReference `json:"dataSource,omitempty" protobuf:"bytes,7,opt,name=dataSource"` } // PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type @@ -511,7 +526,7 @@ type PersistentVolumeAccessMode string const ( - // can be mounted read/write mode to exactly 1 host + // can be mounted in read/write mode to exactly 1 host ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce" // can be mounted in read-only mode to many hosts ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany" @@ -610,28 +625,52 @@ // Glusterfs volumes do not support ownership management or SELinux relabeling. type GlusterfsVolumeSource struct { // EndpointsName is the endpoint name that details Glusterfs topology. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod EndpointsName string `json:"endpoints" protobuf:"bytes,1,opt,name=endpoints"` // Path is the Glusterfs volume path. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod Path string `json:"path" protobuf:"bytes,2,opt,name=path"` // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. // Defaults to false. - // More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` } +// Represents a Glusterfs mount that lasts the lifetime of a pod. +// Glusterfs volumes do not support ownership management or SELinux relabeling. +type GlusterfsPersistentVolumeSource struct { + // EndpointsName is the endpoint name that details Glusterfs topology. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + EndpointsName string `json:"endpoints" protobuf:"bytes,1,opt,name=endpoints"` + + // Path is the Glusterfs volume path. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + Path string `json:"path" protobuf:"bytes,2,opt,name=path"` + + // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. + // Defaults to false. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + // +optional + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` + + // EndpointsNamespace is the namespace that contains Glusterfs endpoint. + // If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. + // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod + // +optional + EndpointsNamespace *string `json:"endpointsNamespace,omitempty" protobuf:"bytes,4,opt,name=endpointsNamespace"` +} + // Represents a Rados Block Device mount that lasts the lifetime of a pod. // RBD volumes support ownership management and SELinux relabeling. type RBDVolumeSource struct { // A collection of Ceph monitors. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it CephMonitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` // The rados image name. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it RBDImage string `json:"image" protobuf:"bytes,2,opt,name=image"` // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. @@ -642,28 +681,28 @@ FSType string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` // The rados pool name. // Default is rbd. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional RBDPool string `json:"pool,omitempty" protobuf:"bytes,4,opt,name=pool"` // The rados user name. // Default is admin. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional RadosUser string `json:"user,omitempty" protobuf:"bytes,5,opt,name=user"` // Keyring is the path to key ring for RBDUser. // Default is /etc/ceph/keyring. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional Keyring string `json:"keyring,omitempty" protobuf:"bytes,6,opt,name=keyring"` // SecretRef is name of the authentication secret for RBDUser. If provided // overrides keyring. // Default is nil. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,7,opt,name=secretRef"` // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,8,opt,name=readOnly"` } @@ -672,10 +711,10 @@ // RBD volumes support ownership management and SELinux relabeling. type RBDPersistentVolumeSource struct { // A collection of Ceph monitors. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it CephMonitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` // The rados image name. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it RBDImage string `json:"image" protobuf:"bytes,2,opt,name=image"` // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. @@ -686,28 +725,28 @@ FSType string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` // The rados pool name. // Default is rbd. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional RBDPool string `json:"pool,omitempty" protobuf:"bytes,4,opt,name=pool"` // The rados user name. // Default is admin. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional RadosUser string `json:"user,omitempty" protobuf:"bytes,5,opt,name=user"` // Keyring is the path to key ring for RBDUser. // Default is /etc/ceph/keyring. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional Keyring string `json:"keyring,omitempty" protobuf:"bytes,6,opt,name=keyring"` // SecretRef is name of the authentication secret for RBDUser. If provided // overrides keyring. // Default is nil. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional SecretRef *SecretReference `json:"secretRef,omitempty" protobuf:"bytes,7,opt,name=secretRef"` // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,8,opt,name=readOnly"` } @@ -717,18 +756,18 @@ // The volume must also be in the same region as the kubelet. // Cinder volumes support ownership management and SELinux relabeling. type CinderVolumeSource struct { - // volume id used to identify the volume in cinder - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // volume id used to identify the volume in cinder. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` // Optional: points to a secret object containing parameters used to connect @@ -742,18 +781,18 @@ // The volume must also be in the same region as the kubelet. // Cinder volumes support ownership management and SELinux relabeling. type CinderPersistentVolumeSource struct { - // volume id used to identify the volume in cinder - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // volume id used to identify the volume in cinder. + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md + // More info: https://examples.k8s.io/mysql-cinder-pd/README.md // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` // Optional: points to a secret object containing parameters used to connect @@ -766,26 +805,26 @@ // Cephfs volumes do not support ownership management or SELinux relabeling. type CephFSVolumeSource struct { // Required: Monitors is a collection of Ceph monitors - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it Monitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` // Optional: Used as the mounted root, rather than the full Ceph tree, default is / // +optional Path string `json:"path,omitempty" protobuf:"bytes,2,opt,name=path"` // Optional: User is the rados user name, default is admin - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional User string `json:"user,omitempty" protobuf:"bytes,3,opt,name=user"` // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional SecretFile string `json:"secretFile,omitempty" protobuf:"bytes,4,opt,name=secretFile"` // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,5,opt,name=secretRef"` // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,6,opt,name=readOnly"` } @@ -805,26 +844,26 @@ // Cephfs volumes do not support ownership management or SELinux relabeling. type CephFSPersistentVolumeSource struct { // Required: Monitors is a collection of Ceph monitors - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it Monitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` // Optional: Used as the mounted root, rather than the full Ceph tree, default is / // +optional Path string `json:"path,omitempty" protobuf:"bytes,2,opt,name=path"` // Optional: User is the rados user name, default is admin - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional User string `json:"user,omitempty" protobuf:"bytes,3,opt,name=user"` // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional SecretFile string `json:"secretFile,omitempty" protobuf:"bytes,4,opt,name=secretFile"` // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional SecretRef *SecretReference `json:"secretRef,omitempty" protobuf:"bytes,5,opt,name=secretRef"` // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it + // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it // +optional ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,6,opt,name=readOnly"` } @@ -859,6 +898,8 @@ ProtocolTCP Protocol = "TCP" // ProtocolUDP is the UDP protocol. ProtocolUDP Protocol = "UDP" + // ProtocolSCTP is the SCTP protocol. + ProtocolSCTP Protocol = "SCTP" ) // Represents a Persistent Disk resource in Google Compute Engine. @@ -917,6 +958,11 @@ // Default is no group // +optional Group string `json:"group,omitempty" protobuf:"bytes,5,opt,name=group"` + + // Tenant owning the given Quobyte volume in the Backend + // Used with dynamically provisioned Quobyte volumes, value is set by the plugin + // +optional + Tenant string `json:"tenant,omitempty" protobuf:"bytes,6,opt,name=tenant"` } // FlexPersistentVolumeSource represents a generic persistent volume resource that is @@ -1048,7 +1094,7 @@ // mode, like fsGroup, and the result can be other mode bits set. // +optional DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"bytes,3,opt,name=defaultMode"` - // Specify whether the Secret or it's keys must be defined + // Specify whether the Secret or its keys must be defined // +optional Optional *bool `json:"optional,omitempty" protobuf:"varint,4,opt,name=optional"` } @@ -1339,6 +1385,7 @@ // +optional StoragePool string `json:"storagePool,omitempty" protobuf:"bytes,6,opt,name=storagePool"` // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // Default is ThinProvisioned. // +optional StorageMode string `json:"storageMode,omitempty" protobuf:"bytes,7,opt,name=storageMode"` // The name of a volume already created in the ScaleIO system @@ -1346,7 +1393,8 @@ VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,8,opt,name=volumeName"` // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // Ex. "ext4", "xfs", "ntfs". + // Default is "xfs". // +optional FSType string `json:"fsType,omitempty" protobuf:"bytes,9,opt,name=fsType"` // Defaults to false (read/write). ReadOnly here will force @@ -1374,6 +1422,7 @@ // +optional StoragePool string `json:"storagePool,omitempty" protobuf:"bytes,6,opt,name=storagePool"` // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // Default is ThinProvisioned. // +optional StorageMode string `json:"storageMode,omitempty" protobuf:"bytes,7,opt,name=storageMode"` // The name of a volume already created in the ScaleIO system @@ -1381,7 +1430,8 @@ VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,8,opt,name=volumeName"` // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // Ex. "ext4", "xfs", "ntfs". + // Default is "xfs" // +optional FSType string `json:"fsType,omitempty" protobuf:"bytes,9,opt,name=fsType"` // Defaults to false (read/write). ReadOnly here will force @@ -1470,7 +1520,7 @@ // mode, like fsGroup, and the result can be other mode bits set. // +optional DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,3,opt,name=defaultMode"` - // Specify whether the ConfigMap or it's keys must be defined + // Specify whether the ConfigMap or its keys must be defined // +optional Optional *bool `json:"optional,omitempty" protobuf:"varint,4,opt,name=optional"` } @@ -1497,7 +1547,7 @@ // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` - // Specify whether the ConfigMap or it's keys must be defined + // Specify whether the ConfigMap or its keys must be defined // +optional Optional *bool `json:"optional,omitempty" protobuf:"varint,4,opt,name=optional"` } @@ -1583,10 +1633,14 @@ type LocalVolumeSource struct { // The full path to the volume on the node. // It can be either a directory or block device (disk, partition, ...). - // Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. - // Block devices can be represented only by VolumeMode=Block, which also requires the - // BlockVolume alpha feature gate to be enabled. Path string `json:"path" protobuf:"bytes,1,opt,name=path"` + + // Filesystem type to mount. + // It applies only when the Path is a block device. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified. + // +optional + FSType *string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` } // Represents storage that is managed by an external CSI volume driver (Beta feature) @@ -1618,7 +1672,7 @@ // ControllerPublishSecretRef is a reference to the secret object containing // sensitive information to pass to the CSI driver to complete the CSI // ControllerPublishVolume and ControllerUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the + // This field is optional, and may be empty if no secret is required. If the // secret object contains more than one secret, all secrets are passed. // +optional ControllerPublishSecretRef *SecretReference `json:"controllerPublishSecretRef,omitempty" protobuf:"bytes,6,opt,name=controllerPublishSecretRef"` @@ -1626,7 +1680,7 @@ // NodeStageSecretRef is a reference to the secret object containing sensitive // information to pass to the CSI driver to complete the CSI NodeStageVolume // and NodeStageVolume and NodeUnstageVolume calls. - // This field is optional, and may be empty if no secret is required. If the + // This field is optional, and may be empty if no secret is required. If the // secret object contains more than one secret, all secrets are passed. // +optional NodeStageSecretRef *SecretReference `json:"nodeStageSecretRef,omitempty" protobuf:"bytes,7,opt,name=nodeStageSecretRef"` @@ -1634,10 +1688,50 @@ // NodePublishSecretRef is a reference to the secret object containing // sensitive information to pass to the CSI driver to complete the CSI // NodePublishVolume and NodeUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the + // This field is optional, and may be empty if no secret is required. If the // secret object contains more than one secret, all secrets are passed. // +optional NodePublishSecretRef *SecretReference `json:"nodePublishSecretRef,omitempty" protobuf:"bytes,8,opt,name=nodePublishSecretRef"` + + // ControllerExpandSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // ControllerExpandVolume call. + // This is an alpha field and requires enabling ExpandCSIVolumes feature gate. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secrets are passed. + // +optional + ControllerExpandSecretRef *SecretReference `json:"controllerExpandSecretRef,omitempty" protobuf:"bytes,9,opt,name=controllerExpandSecretRef"` +} + +// Represents a source location of a volume to mount, managed by an external CSI driver +type CSIVolumeSource struct { + // Driver is the name of the CSI driver that handles this volume. + // Consult with your admin for the correct name as registered in the cluster. + Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` + + // Specifies a read-only configuration for the volume. + // Defaults to false (read/write). + // +optional + ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + + // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". + // If not provided, the empty value is passed to the associated CSI driver + // which will determine the default filesystem to apply. + // +optional + FSType *string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` + + // VolumeAttributes stores driver-specific properties that are passed to the CSI + // driver. Consult your driver's documentation for supported values. + // +optional + VolumeAttributes map[string]string `json:"volumeAttributes,omitempty" protobuf:"bytes,4,rep,name=volumeAttributes"` + + // NodePublishSecretRef is a reference to the secret object containing + // sensitive information to pass to the CSI driver to complete the CSI + // NodePublishVolume and NodeUnpublishVolume calls. + // This field is optional, and may be empty if no secret is required. If the + // secret object contains more than one secret, all secret references are passed. + // +optional + NodePublishSecretRef *LocalObjectReference `json:"nodePublishSecretRef,omitempty" protobuf:"bytes,5,opt,name=nodePublishSecretRef"` } // ContainerPort represents a network port in a single container. @@ -1656,7 +1750,7 @@ // Number of port to expose on the pod's IP address. // This must be a valid port number, 0 < x < 65536. ContainerPort int32 `json:"containerPort" protobuf:"varint,3,opt,name=containerPort"` - // Protocol for port. Must be UDP or TCP. + // Protocol for port. Must be UDP, TCP, or SCTP. // Defaults to "TCP". // +optional Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,4,opt,name=protocol,casttype=Protocol"` @@ -1686,6 +1780,13 @@ // This field is beta in 1.10. // +optional MountPropagation *MountPropagationMode `json:"mountPropagation,omitempty" protobuf:"bytes,5,opt,name=mountPropagation,casttype=MountPropagationMode"` + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + // This field is beta in 1.15. + // +optional + SubPathExpr string `json:"subPathExpr,omitempty" protobuf:"bytes,6,opt,name=subPathExpr"` } // MountPropagationMode describes mount propagation. @@ -1788,7 +1889,7 @@ LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` // The key to select. Key string `json:"key" protobuf:"bytes,2,opt,name=key"` - // Specify whether the ConfigMap or it's key must be defined + // Specify whether the ConfigMap or its key must be defined // +optional Optional *bool `json:"optional,omitempty" protobuf:"varint,3,opt,name=optional"` } @@ -1799,7 +1900,7 @@ LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` // The key of the secret to select from. Must be a valid secret key. Key string `json:"key" protobuf:"bytes,2,opt,name=key"` - // Specify whether the Secret or it's key must be defined + // Specify whether the Secret or its key must be defined // +optional Optional *bool `json:"optional,omitempty" protobuf:"varint,3,opt,name=optional"` } @@ -1924,7 +2025,7 @@ // +optional PeriodSeconds int32 `json:"periodSeconds,omitempty" protobuf:"varint,4,opt,name=periodSeconds"` // Minimum consecutive successes for the probe to be considered successful after having failed. - // Defaults to 1. Must be 1 for liveness. Minimum value is 1. + // Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. // +optional SuccessThreshold int32 `json:"successThreshold,omitempty" protobuf:"varint,5,opt,name=successThreshold"` // Minimum consecutive failures for the probe to be considered failed after having succeeded. @@ -1945,6 +2046,16 @@ PullIfNotPresent PullPolicy = "IfNotPresent" ) +// PreemptionPolicy describes a policy for if/when to preempt a pod. +type PreemptionPolicy string + +const ( + // PreemptLowerPriority means that pod can preempt other pods with lower priority. + PreemptLowerPriority PreemptionPolicy = "PreemptLowerPriority" + // PreemptNever means that pod never preempts other pods with lower priority. + PreemptNever PreemptionPolicy = "Never" +) + // TerminationMessagePolicy describes how termination messages are retrieved from a container. type TerminationMessagePolicy string @@ -2038,6 +2149,9 @@ // +optional // +patchMergeKey=containerPort // +patchStrategy=merge + // +listType=map + // +listMapKey=containerPort + // +listMapKey=protocol Ports []ContainerPort `json:"ports,omitempty" patchStrategy:"merge" patchMergeKey:"containerPort" protobuf:"bytes,6,rep,name=ports"` // List of sources to populate environment variables in the container. // The keys defined within a source must be a C_IDENTIFIER. All invalid keys @@ -2055,7 +2169,7 @@ Env []EnvVar `json:"env,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=env"` // Compute Resources required by this container. // Cannot be updated. - // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources + // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ // +optional Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,8,opt,name=resources"` // Pod volumes to mount into the container's filesystem. @@ -2065,7 +2179,7 @@ // +patchStrategy=merge VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" patchStrategy:"merge" patchMergeKey:"mountPath" protobuf:"bytes,9,rep,name=volumeMounts"` // volumeDevices is the list of block devices to be used by the container. - // This is an alpha feature and may change in the future. + // This is a beta feature. // +patchMergeKey=devicePath // +patchStrategy=merge // +optional @@ -2082,6 +2196,16 @@ // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes // +optional ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"` + // StartupProbe indicates that the Pod has successfully initialized. + // If specified, no other probes are executed until this completes successfully. + // If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. + // This can be used to provide different probe parameters at the beginning of a Pod's lifecycle, + // when it might take a long time to load data or warm a cache, than during steady-state operation. + // This cannot be updated. + // This is an alpha feature enabled by the StartupProbe feature flag. + // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + // +optional + StartupProbe *Probe `json:"startupProbe,omitempty" protobuf:"bytes,22,opt,name=startupProbe"` // Actions that the management system should take in response to container lifecycle events. // Cannot be updated. // +optional @@ -2167,11 +2291,15 @@ // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks // +optional PostStart *Handler `json:"postStart,omitempty" protobuf:"bytes,1,opt,name=postStart"` - // PreStop is called immediately before a container is terminated. - // The container is terminated after the handler completes. - // The reason for termination is passed to the handler. - // Regardless of the outcome of the handler, the container is eventually terminated. - // Other management of the container blocks until the hook completes. + // PreStop is called immediately before a container is terminated due to an + // API request or management event such as liveness/startup probe failure, + // preemption, resource contention, etc. The handler is not called if the + // container crashes or exits. The reason for termination is passed to the + // handler. The Pod's termination grace period countdown begins before the + // PreStop hooked is executed. Regardless of the outcome of the handler, the + // container will eventually terminate within the Pod's termination grace + // period. Other management of the container blocks until the hook completes + // or until the termination grace period is reached. // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks // +optional PreStop *Handler `json:"preStop,omitempty" protobuf:"bytes,2,opt,name=preStop"` @@ -2272,6 +2400,12 @@ // Container's ID in the format 'docker://'. // +optional ContainerID string `json:"containerID,omitempty" protobuf:"bytes,8,opt,name=containerID"` + // Specifies whether the container has passed its startup probe. + // Initialized as false, becomes true after startupProbe is considered successful. + // Resets to false when the container is restarted, or if kubelet loses state temporarily. + // Is always true when no startupProbe is defined. + // +optional + Started *bool `json:"started,omitempty" protobuf:"varint,9,opt,name=started"` } // PodPhase is a label for the condition of a pod at the current time. @@ -2302,18 +2436,22 @@ // These are valid conditions of pod. const ( - // PodScheduled represents status of the scheduling process for this pod. - PodScheduled PodConditionType = "PodScheduled" + // ContainersReady indicates whether all containers in the pod are ready. + ContainersReady PodConditionType = "ContainersReady" + // PodInitialized means that all init containers in the pod have started successfully. + PodInitialized PodConditionType = "Initialized" // PodReady means the pod is able to service requests and should be added to the // load balancing pools of all matching services. PodReady PodConditionType = "Ready" - // PodInitialized means that all init containers in the pod have started successfully. - PodInitialized PodConditionType = "Initialized" + // PodScheduled represents status of the scheduling process for this pod. + PodScheduled PodConditionType = "PodScheduled" +) + +// These are reasons for a pod's transition to a condition. +const ( // PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler // can't schedule the pod right now, for example due to insufficient resources in the cluster. PodReasonUnschedulable = "Unschedulable" - // ContainersReady indicates whether all containers in the pod are ready. - ContainersReady PodConditionType = "ContainersReady" ) // PodCondition contains details for the current condition of this pod. @@ -2703,7 +2841,7 @@ // init container fails, the pod is considered to have failed and is handled according // to its restartPolicy. The name for an init container or normal container must be // unique among all containers. - // Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. + // Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. // The resourceRequirements of an init container are taken into account during scheduling // by finding the highest request/limit for each resource type, and then using the max of // of that value or the sum of the normal containers. Limits are applied to init containers @@ -2721,6 +2859,15 @@ // +patchMergeKey=name // +patchStrategy=merge Containers []Container `json:"containers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=containers"` + // List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing + // pod to perform user-initiated actions such as debugging. This list cannot be specified when + // creating a pod, and it cannot be modified by updating the pod spec. In order to add an + // ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. + // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + EphemeralContainers []EphemeralContainer `json:"ephemeralContainers,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,34,rep,name=ephemeralContainers"` // Restart policy for all containers within the pod. // One of Always, OnFailure, Never. // Default to Always. @@ -2794,7 +2941,7 @@ // in the same pod, and the first process in each container will not be assigned PID 1. // HostPID and ShareProcessNamespace cannot both be set. // Optional: Default to false. - // This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature. + // This field is beta-level and may be disabled with the PodShareProcessNamespace feature. // +k8s:conversion-gen=false // +optional ShareProcessNamespace *bool `json:"shareProcessNamespace,omitempty" protobuf:"varint,27,opt,name=shareProcessNamespace"` @@ -2854,15 +3001,121 @@ // configuration based on DNSPolicy. // +optional DNSConfig *PodDNSConfig `json:"dnsConfig,omitempty" protobuf:"bytes,26,opt,name=dnsConfig"` - // If specified, all readiness gates will be evaluated for pod readiness. // A pod is ready when all its containers are ready AND // all conditions specified in the readiness gates have status equal to "True" - // More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md + // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md // +optional ReadinessGates []PodReadinessGate `json:"readinessGates,omitempty" protobuf:"bytes,28,opt,name=readinessGates"` + // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used + // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. + // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an + // empty definition that uses the default runtime handler. + // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md + // This is a beta feature as of Kubernetes v1.14. + // +optional + RuntimeClassName *string `json:"runtimeClassName,omitempty" protobuf:"bytes,29,opt,name=runtimeClassName"` + // EnableServiceLinks indicates whether information about services should be injected into pod's + // environment variables, matching the syntax of Docker links. + // Optional: Defaults to true. + // +optional + EnableServiceLinks *bool `json:"enableServiceLinks,omitempty" protobuf:"varint,30,opt,name=enableServiceLinks"` + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + PreemptionPolicy *PreemptionPolicy `json:"preemptionPolicy,omitempty" protobuf:"bytes,31,opt,name=preemptionPolicy"` + // Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. + // This field will be autopopulated at admission time by the RuntimeClass admission controller. If + // the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. + // The RuntimeClass admission controller will reject Pod create requests which have the overhead already + // set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value + // defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. + // More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md + // This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature. + // +optional + Overhead ResourceList `json:"overhead,omitempty" protobuf:"bytes,32,opt,name=overhead"` + // TopologySpreadConstraints describes how a group of pods ought to spread across topology + // domains. Scheduler will schedule pods in a way which abides by the constraints. + // This field is alpha-level and is only honored by clusters that enables the EvenPodsSpread + // feature. + // All topologySpreadConstraints are ANDed. + // +optional + // +patchMergeKey=topologyKey + // +patchStrategy=merge + // +listType=map + // +listMapKey=topologyKey + // +listMapKey=whenUnsatisfiable + TopologySpreadConstraints []TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty" patchStrategy:"merge" patchMergeKey:"topologyKey" protobuf:"bytes,33,opt,name=topologySpreadConstraints"` +} + +type UnsatisfiableConstraintAction string + +const ( + // DoNotSchedule instructs the scheduler not to schedule the pod + // when constraints are not satisfied. + DoNotSchedule UnsatisfiableConstraintAction = "DoNotSchedule" + // ScheduleAnyway instructs the scheduler to schedule the pod + // even if constraints are not satisfied. + ScheduleAnyway UnsatisfiableConstraintAction = "ScheduleAnyway" +) + +// TopologySpreadConstraint specifies how to spread matching pods among the given topology. +type TopologySpreadConstraint struct { + // MaxSkew describes the degree to which pods may be unevenly distributed. + // It's the maximum permitted difference between the number of matching pods in + // any two topology domains of a given topology type. + // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same + // labelSelector spread as 1/1/0: + // +-------+-------+-------+ + // | zone1 | zone2 | zone3 | + // +-------+-------+-------+ + // | P | P | | + // +-------+-------+-------+ + // - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; + // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) + // violate MaxSkew(1). + // - if MaxSkew is 2, incoming pod can be scheduled onto any zone. + // It's a required field. Default value is 1 and 0 is not allowed. + MaxSkew int32 `json:"maxSkew" protobuf:"varint,1,opt,name=maxSkew"` + // TopologyKey is the key of node labels. Nodes that have a label with this key + // and identical values are considered to be in the same topology. + // We consider each as a "bucket", and try to put balanced number + // of pods into each bucket. + // It's a required field. + TopologyKey string `json:"topologyKey" protobuf:"bytes,2,opt,name=topologyKey"` + // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy + // the spread constraint. + // - DoNotSchedule (default) tells the scheduler not to schedule it + // - ScheduleAnyway tells the scheduler to still schedule it + // It's considered as "Unsatisfiable" if and only if placing incoming pod on any + // topology violates "MaxSkew". + // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same + // labelSelector spread as 3/1/1: + // +-------+-------+-------+ + // | zone1 | zone2 | zone3 | + // +-------+-------+-------+ + // | P P P | P | P | + // +-------+-------+-------+ + // If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled + // to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies + // MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler + // won't make it *more* imbalanced. + // It's a required field. + WhenUnsatisfiable UnsatisfiableConstraintAction `json:"whenUnsatisfiable" protobuf:"bytes,3,opt,name=whenUnsatisfiable,casttype=UnsatisfiableConstraintAction"` + // LabelSelector is used to find matching pods. + // Pods that match this label selector are counted to determine the number of pods + // in their corresponding topology domain. + // +optional + LabelSelector *metav1.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,4,opt,name=labelSelector"` } +const ( + // The default value for enableServiceLinks attribute. + DefaultEnableServiceLinks = true +) + // HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the // pod's hosts file. type HostAlias struct { @@ -2883,6 +3136,11 @@ // takes precedence for that container. // +optional SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,1,opt,name=seLinuxOptions"` + // The Windows specific settings applied to all containers. + // If unspecified, the options within a container's SecurityContext will be used. + // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + // +optional + WindowsOptions *WindowsSecurityContextOptions `json:"windowsOptions,omitempty" protobuf:"bytes,8,opt,name=windowsOptions"` // The UID to run the entrypoint of the container process. // Defaults to user specified in image metadata if unspecified. // May also be set in SecurityContext. If set in both SecurityContext and @@ -2968,6 +3226,175 @@ Value *string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` } +// IP address information for entries in the (plural) PodIPs field. +// Each entry includes: +// IP: An IP address allocated to the pod. Routable at least within the cluster. +type PodIP struct { + // ip is an IP address (IPv4 or IPv6) assigned to the pod + IP string `json:"ip,omitempty" protobuf:"bytes,1,opt,name=ip"` +} + +// EphemeralContainerCommon is a copy of all fields in Container to be inlined in +// EphemeralContainer. This separate type allows easy conversion from EphemeralContainer +// to Container and allows separate documentation for the fields of EphemeralContainer. +// When a new field is added to Container it must be added here as well. +type EphemeralContainerCommon struct { + // Name of the ephemeral container specified as a DNS_LABEL. + // This name must be unique among all containers, init containers and ephemeral containers. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Docker image name. + // More info: https://kubernetes.io/docs/concepts/containers/images + Image string `json:"image,omitempty" protobuf:"bytes,2,opt,name=image"` + // Entrypoint array. Not executed within a shell. + // The docker image's ENTRYPOINT is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell + // +optional + Command []string `json:"command,omitempty" protobuf:"bytes,3,rep,name=command"` + // Arguments to the entrypoint. + // The docker image's CMD is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell + // +optional + Args []string `json:"args,omitempty" protobuf:"bytes,4,rep,name=args"` + // Container's working directory. + // If not specified, the container runtime's default will be used, which + // might be configured in the container image. + // Cannot be updated. + // +optional + WorkingDir string `json:"workingDir,omitempty" protobuf:"bytes,5,opt,name=workingDir"` + // Ports are not allowed for ephemeral containers. + Ports []ContainerPort `json:"ports,omitempty" protobuf:"bytes,6,rep,name=ports"` + // List of sources to populate environment variables in the container. + // The keys defined within a source must be a C_IDENTIFIER. All invalid keys + // will be reported as an event when the container is starting. When a key exists in multiple + // sources, the value associated with the last source will take precedence. + // Values defined by an Env with a duplicate key will take precedence. + // Cannot be updated. + // +optional + EnvFrom []EnvFromSource `json:"envFrom,omitempty" protobuf:"bytes,19,rep,name=envFrom"` + // List of environment variables to set in the container. + // Cannot be updated. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + Env []EnvVar `json:"env,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=env"` + // Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources + // already allocated to the pod. + // +optional + Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,8,opt,name=resources"` + // Pod volumes to mount into the container's filesystem. + // Cannot be updated. + // +optional + // +patchMergeKey=mountPath + // +patchStrategy=merge + VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" patchStrategy:"merge" patchMergeKey:"mountPath" protobuf:"bytes,9,rep,name=volumeMounts"` + // volumeDevices is the list of block devices to be used by the container. + // This is a beta feature. + // +patchMergeKey=devicePath + // +patchStrategy=merge + // +optional + VolumeDevices []VolumeDevice `json:"volumeDevices,omitempty" patchStrategy:"merge" patchMergeKey:"devicePath" protobuf:"bytes,21,rep,name=volumeDevices"` + // Probes are not allowed for ephemeral containers. + // +optional + LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,10,opt,name=livenessProbe"` + // Probes are not allowed for ephemeral containers. + // +optional + ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"` + // Probes are not allowed for ephemeral containers. + // +optional + StartupProbe *Probe `json:"startupProbe,omitempty" protobuf:"bytes,22,opt,name=startupProbe"` + // Lifecycle is not allowed for ephemeral containers. + // +optional + Lifecycle *Lifecycle `json:"lifecycle,omitempty" protobuf:"bytes,12,opt,name=lifecycle"` + // Optional: Path at which the file to which the container's termination message + // will be written is mounted into the container's filesystem. + // Message written is intended to be brief final status, such as an assertion failure message. + // Will be truncated by the node if greater than 4096 bytes. The total message length across + // all containers will be limited to 12kb. + // Defaults to /dev/termination-log. + // Cannot be updated. + // +optional + TerminationMessagePath string `json:"terminationMessagePath,omitempty" protobuf:"bytes,13,opt,name=terminationMessagePath"` + // Indicate how the termination message should be populated. File will use the contents of + // terminationMessagePath to populate the container status message on both success and failure. + // FallbackToLogsOnError will use the last chunk of container log output if the termination + // message file is empty and the container exited with an error. + // The log output is limited to 2048 bytes or 80 lines, whichever is smaller. + // Defaults to File. + // Cannot be updated. + // +optional + TerminationMessagePolicy TerminationMessagePolicy `json:"terminationMessagePolicy,omitempty" protobuf:"bytes,20,opt,name=terminationMessagePolicy,casttype=TerminationMessagePolicy"` + // Image pull policy. + // One of Always, Never, IfNotPresent. + // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. + // Cannot be updated. + // More info: https://kubernetes.io/docs/concepts/containers/images#updating-images + // +optional + ImagePullPolicy PullPolicy `json:"imagePullPolicy,omitempty" protobuf:"bytes,14,opt,name=imagePullPolicy,casttype=PullPolicy"` + // SecurityContext is not allowed for ephemeral containers. + // +optional + SecurityContext *SecurityContext `json:"securityContext,omitempty" protobuf:"bytes,15,opt,name=securityContext"` + + // Variables for interactive containers, these have very specialized use-cases (e.g. debugging) + // and shouldn't be used for general purpose containers. + + // Whether this container should allocate a buffer for stdin in the container runtime. If this + // is not set, reads from stdin in the container will always result in EOF. + // Default is false. + // +optional + Stdin bool `json:"stdin,omitempty" protobuf:"varint,16,opt,name=stdin"` + // Whether the container runtime should close the stdin channel after it has been opened by + // a single attach. When stdin is true the stdin stream will remain open across multiple attach + // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the + // first client attaches to stdin, and then remains open and accepts data until the client disconnects, + // at which time stdin is closed and remains closed until the container is restarted. If this + // flag is false, a container processes that reads from stdin will never receive an EOF. + // Default is false + // +optional + StdinOnce bool `json:"stdinOnce,omitempty" protobuf:"varint,17,opt,name=stdinOnce"` + // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. + // Default is false. + // +optional + TTY bool `json:"tty,omitempty" protobuf:"varint,18,opt,name=tty"` +} + +// EphemeralContainerCommon converts to Container. All fields must be kept in sync between +// these two types. +var _ = Container(EphemeralContainerCommon{}) + +// An EphemeralContainer is a container that may be added temporarily to an existing pod for +// user-initiated activities such as debugging. Ephemeral containers have no resource or +// scheduling guarantees, and they will not be restarted when they exit or when a pod is +// removed or restarted. If an ephemeral container causes a pod to exceed its resource +// allocation, the pod may be evicted. +// Ephemeral containers may not be added by directly updating the pod spec. They must be added +// via the pod's ephemeralcontainers subresource, and they will appear in the pod spec +// once added. +// This is an alpha feature enabled by the EphemeralContainers feature flag. +type EphemeralContainer struct { + // Ephemeral containers have all of the fields of Container, plus additional fields + // specific to ephemeral containers. Fields in common with Container are in the + // following inlined struct so than an EphemeralContainer may easily be converted + // to a Container. + EphemeralContainerCommon `json:",inline" protobuf:"bytes,1,req"` + + // If set, the name of the container from PodSpec that this ephemeral container targets. + // The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. + // If not set then the ephemeral container is run in whatever namespaces are shared + // for the pod. Note that the container runtime must support this feature. + // +optional + TargetContainerName string `json:"targetContainerName,omitempty" protobuf:"bytes,2,opt,name=targetContainerName"` +} + // PodStatus represents information about the status of a pod. Status may trail the actual // state of a system, especially if the node that hosts the pod cannot contact the control // plane. @@ -3023,6 +3450,14 @@ // +optional PodIP string `json:"podIP,omitempty" protobuf:"bytes,6,opt,name=podIP"` + // podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must + // match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list + // is empty if no IPs have been allocated yet. + // +optional + // +patchStrategy=merge + // +patchMergeKey=ip + PodIPs []PodIP `json:"podIPs,omitempty" protobuf:"bytes,12,rep,name=podIPs" patchStrategy:"merge" patchMergeKey:"ip"` + // RFC 3339 date and time at which the object was acknowledged by the Kubelet. // This is before the Kubelet pulled the container image(s) for the pod. // +optional @@ -3044,6 +3479,10 @@ // More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md // +optional QOSClass PodQOSClass `json:"qosClass,omitempty" protobuf:"bytes,9,rep,name=qosClass"` + // Status for any ephemeral containers that have run in this pod. + // This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature. + // +optional + EphemeralContainerStatuses []ContainerStatus `json:"ephemeralContainerStatuses,omitempty" protobuf:"bytes,13,rep,name=ephemeralContainerStatuses"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -3052,19 +3491,21 @@ type PodStatusResult struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Most recently observed status of the pod. // This data may not be up to date. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status PodStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` } // +genclient +// +genclient:method=GetEphemeralContainers,verb=get,subresource=ephemeralcontainers,result=EphemeralContainers +// +genclient:method=UpdateEphemeralContainers,verb=update,subresource=ephemeralcontainers,input=EphemeralContainers,result=EphemeralContainers // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // Pod is a collection of containers that can run on a host. This resource is created @@ -3072,12 +3513,12 @@ type Pod struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the pod. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -3085,7 +3526,7 @@ // This data may not be up to date. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status PodStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -3096,24 +3537,24 @@ type PodList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of pods. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md Items []Pod `json:"items" protobuf:"bytes,2,rep,name=items"` } // PodTemplateSpec describes the data a pod should have when created from a template type PodTemplateSpec struct { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the pod. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -3125,12 +3566,12 @@ type PodTemplate struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Template defines the pods that will be created from this pod template. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Template PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` } @@ -3141,7 +3582,7 @@ type PodTemplateList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3243,8 +3684,8 @@ } // +genclient -// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/extensions/v1beta1.Scale -// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/extensions/v1beta1.Scale,result=k8s.io/api/extensions/v1beta1.Scale +// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/autoscaling/v1.Scale +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/autoscaling/v1.Scale,result=k8s.io/api/autoscaling/v1.Scale // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ReplicationController represents the configuration of a replication controller. @@ -3253,12 +3694,12 @@ // If the Labels of a ReplicationController are empty, they are defaulted to // be the same as the Pod(s) that the replication controller manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the replication controller. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ReplicationControllerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -3266,7 +3707,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ReplicationControllerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -3277,7 +3718,7 @@ type ReplicationControllerList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3378,12 +3819,26 @@ Hostname string `json:"hostname,omitempty" protobuf:"bytes,2,opt,name=hostname"` } +// IPFamily represents the IP Family (IPv4 or IPv6). This type is used +// to express the family of an IP expressed by a type (i.e. service.Spec.IPFamily) +type IPFamily string + +const ( + // IPv4Protocol indicates that this IP is IPv4 protocol + IPv4Protocol IPFamily = "IPv4" + // IPv6Protocol indicates that this IP is IPv6 protocol + IPv6Protocol IPFamily = "IPv6" +) + // ServiceSpec describes the attributes that a user creates on a service. type ServiceSpec struct { // The list of ports that are exposed by this service. // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies // +patchMergeKey=port // +patchStrategy=merge + // +listType=map + // +listMapKey=port + // +listMapKey=protocol Ports []ServicePort `json:"ports,omitempty" patchStrategy:"merge" patchMergeKey:"port" protobuf:"bytes,1,rep,name=ports"` // Route service traffic to pods with label keys and values matching this @@ -3420,7 +3875,7 @@ // "LoadBalancer" builds on NodePort and creates an // external load-balancer (if supported in the current cloud) which routes // to the clusterIP. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types + // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types // +optional Type ServiceType `json:"type,omitempty" protobuf:"bytes,4,opt,name=type,casttype=ServiceType"` @@ -3490,18 +3945,29 @@ // sessionAffinityConfig contains the configurations of session affinity. // +optional SessionAffinityConfig *SessionAffinityConfig `json:"sessionAffinityConfig,omitempty" protobuf:"bytes,14,opt,name=sessionAffinityConfig"` + + // ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs. + // IPv6). If a specific IP family is requested, the clusterIP field will be allocated from that family, if it is + // available in the cluster. If no IP family is requested, the cluster's primary IP family will be used. + // Other IP fields (loadBalancerIP, loadBalancerSourceRanges, externalIPs) and controllers which + // allocate external load-balancers should use the same IP family. Endpoints for this Service will be of + // this family. This field is immutable after creation. Assigning a ServiceIPFamily not available in the + // cluster (e.g. IPv6 in IPv4 only cluster) is an error condition and will fail during clusterIP assignment. + // +optional + IPFamily *IPFamily `json:"ipFamily,omitempty" protobuf:"bytes,15,opt,name=ipFamily,Configcasttype=IPFamily"` } // ServicePort contains information on service's port. type ServicePort struct { // The name of this port within the service. This must be a DNS_LABEL. - // All ports within a ServiceSpec must have unique names. This maps to - // the 'Name' field in EndpointPort objects. + // All ports within a ServiceSpec must have unique names. When considering + // the endpoints for a Service, this must match the 'name' field in the + // EndpointPort. // Optional if only one ServicePort is defined on this service. // +optional Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` - // The IP protocol for this port. Supports "TCP" and "UDP". + // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". // Default is TCP. // +optional Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,2,opt,name=protocol,casttype=Protocol"` @@ -3539,19 +4005,19 @@ type Service struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the behavior of a service. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ServiceSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the service. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ServiceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -3568,7 +4034,7 @@ type ServiceList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3586,7 +4052,7 @@ type ServiceAccount struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3616,7 +4082,7 @@ type ServiceAccountList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3643,7 +4109,7 @@ type Endpoints struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3705,7 +4171,8 @@ // EndpointPort is a tuple that describes a single port. type EndpointPort struct { - // The name of this port (corresponds to ServicePort.Name). + // The name of this port. This must match the 'name' field in the + // corresponding ServicePort. // Must be a DNS_LABEL. // Optional only if one port is defined. // +optional @@ -3715,7 +4182,7 @@ Port int32 `json:"port" protobuf:"varint,2,opt,name=port"` // The IP protocol for this port. - // Must be UDP or TCP. + // Must be UDP, TCP, or SCTP. // Default is TCP. // +optional Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,3,opt,name=protocol,casttype=Protocol"` @@ -3727,7 +4194,7 @@ type EndpointsList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -3740,6 +4207,14 @@ // PodCIDR represents the pod IP range assigned to the node. // +optional PodCIDR string `json:"podCIDR,omitempty" protobuf:"bytes,1,opt,name=podCIDR"` + + // podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this + // field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for + // each of IPv4 and IPv6. + // +optional + // +patchStrategy=merge + PodCIDRs []string `json:"podCIDRs,omitempty" protobuf:"bytes,7,opt,name=podCIDRs" patchStrategy:"merge"` + // ID of the node assigned by the cloud provider in the format: :// // +optional ProviderID string `json:"providerID,omitempty" protobuf:"bytes,3,opt,name=providerID"` @@ -3921,6 +4396,9 @@ // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses + // Note: This field is declared as mergeable, but the merge key is not sufficiently + // unique, which can cause data corruption when it is merged. Callers should instead + // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge @@ -4020,9 +4498,6 @@ const ( // NodeReady means kubelet is healthy and ready to accept pods. NodeReady NodeConditionType = "Ready" - // NodeOutOfDisk means the kubelet will not accept new pods due to insufficient free disk - // space on the node. - NodeOutOfDisk NodeConditionType = "OutOfDisk" // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. NodeMemoryPressure NodeConditionType = "MemoryPressure" // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. @@ -4113,19 +4588,19 @@ type Node struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the behavior of a node. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec NodeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the node. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status NodeStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -4136,7 +4611,7 @@ type NodeList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4167,6 +4642,12 @@ // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/ // +optional Phase NamespacePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=NamespacePhase"` + + // Represents the latest available observations of a namespace's current state. + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + Conditions []NamespaceCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"` } type NamespacePhase string @@ -4179,6 +4660,32 @@ NamespaceTerminating NamespacePhase = "Terminating" ) +type NamespaceConditionType string + +// These are valid conditions of a namespace. +const ( + // NamespaceDeletionDiscoveryFailure contains information about namespace deleter errors during resource discovery. + NamespaceDeletionDiscoveryFailure NamespaceConditionType = "NamespaceDeletionDiscoveryFailure" + // NamespaceDeletionContentFailure contains information about namespace deleter errors during deletion of resources. + NamespaceDeletionContentFailure NamespaceConditionType = "NamespaceDeletionContentFailure" + // NamespaceDeletionGVParsingFailure contains information about namespace deleter errors parsing GV for legacy types. + NamespaceDeletionGVParsingFailure NamespaceConditionType = "NamespaceDeletionGroupVersionParsingFailure" +) + +// NamespaceCondition contains details about state of namespace. +type NamespaceCondition struct { + // Type of namespace controller condition. + Type NamespaceConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=NamespaceConditionType"` + // Status of the condition, one of True, False, Unknown. + Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` + // +optional + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"` + // +optional + Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"` + // +optional + Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` +} + // +genclient // +genclient:nonNamespaced // +genclient:skipVerbs=deleteCollection @@ -4189,17 +4696,17 @@ type Namespace struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the behavior of the Namespace. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec NamespaceSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status describes the current status of a Namespace. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status NamespaceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -4210,7 +4717,7 @@ type NamespaceList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4226,7 +4733,7 @@ type Binding struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4234,6 +4741,22 @@ Target ObjectReference `json:"target" protobuf:"bytes,2,opt,name=target"` } +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// A list of ephemeral containers used with the Pod ephemeralcontainers subresource. +type EphemeralContainers struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // A list of ephemeral containers associated with this pod. New ephemeral containers + // may be appended to this list, but existing ephemeral containers may not be removed + // or modified. + // +patchMergeKey=name + // +patchStrategy=merge + EphemeralContainers []EphemeralContainer `json:"ephemeralContainers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=ephemeralContainers"` +} + // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. // +k8s:openapi-gen=false type Preconditions struct { @@ -4417,7 +4940,7 @@ // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type ObjectReference struct { // Kind of the referent. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` // Namespace of the referent. @@ -4436,7 +4959,7 @@ // +optional APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,5,opt,name=apiVersion"` // Specific resourceVersion to which this reference is made, if any. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency // +optional ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"` @@ -4462,6 +4985,20 @@ Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` } +// TypedLocalObjectReference contains enough information to let you locate the +// typed referenced object inside the same namespace. +type TypedLocalObjectReference struct { + // APIGroup is the group for the resource being referenced. + // If APIGroup is not specified, the specified Kind must be in the core API group. + // For any other third-party types, APIGroup is required. + // +optional + APIGroup *string `json:"apiGroup" protobuf:"bytes,1,opt,name=apiGroup"` + // Kind is the type of resource being referenced + Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"` + // Name is the name of resource being referenced + Name string `json:"name" protobuf:"bytes,3,opt,name=name"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // SerializedReference is a reference to serialized object. @@ -4497,7 +5034,7 @@ type Event struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata metav1.ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` // The object that this event is about. @@ -4567,6 +5104,7 @@ // Time of the last occurrence observed LastObservedTime metav1.MicroTime `json:"lastObservedTime,omitempty" protobuf:"bytes,2,name=lastObservedTime"` // State of this Series: Ongoing or Finished + // Deprecated. Planned removal for 1.18 State EventSeriesState `json:"state,omitempty" protobuf:"bytes,3,name=state"` } @@ -4584,7 +5122,7 @@ type EventList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4644,12 +5182,12 @@ type LimitRange struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the limits enforced. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec LimitRangeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -4660,7 +5198,7 @@ type LimitRangeList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4800,17 +5338,17 @@ type ResourceQuota struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the desired quota. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ResourceQuotaSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status defines the actual enforced quota and its current usage. - // https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ResourceQuotaStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -4821,7 +5359,7 @@ type ResourceQuotaList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4838,7 +5376,7 @@ type Secret struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4943,6 +5481,10 @@ TLSCertKey = "tls.crt" // TLSPrivateKeyKey is the key for the private key field in a TLS secret. TLSPrivateKeyKey = "tls.key" + // SecretTypeBootstrapToken is used during the automated bootstrap process (first + // implemented by kubeadm). It stores tokens that are used to sign well known + // ConfigMaps. They are used for authn. + SecretTypeBootstrapToken SecretType = "bootstrap.kubernetes.io/token" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -4951,7 +5493,7 @@ type SecretList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4967,7 +5509,7 @@ type ConfigMap struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -4996,7 +5538,7 @@ type ConfigMapList struct { metav1.TypeMeta `json:",inline"` - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -5038,7 +5580,7 @@ type ComponentStatus struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -5055,7 +5597,7 @@ type ComponentStatusList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -5129,6 +5671,11 @@ // PodSecurityContext, the value specified in SecurityContext takes precedence. // +optional SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,3,opt,name=seLinuxOptions"` + // The Windows specific settings applied to all containers. + // If unspecified, the options from the PodSecurityContext will be used. + // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + // +optional + WindowsOptions *WindowsSecurityContextOptions `json:"windowsOptions,omitempty" protobuf:"bytes,10,opt,name=windowsOptions"` // The UID to run the entrypoint of the container process. // Defaults to user specified in image metadata if unspecified. // May also be set in PodSecurityContext. If set in both SecurityContext and @@ -5161,8 +5708,28 @@ // 2) has CAP_SYS_ADMIN // +optional AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty" protobuf:"varint,7,opt,name=allowPrivilegeEscalation"` + // procMount denotes the type of proc mount to use for the containers. + // The default is DefaultProcMount which uses the container runtime defaults for + // readonly paths and masked paths. + // This requires the ProcMountType feature flag to be enabled. + // +optional + ProcMount *ProcMountType `json:"procMount,omitempty" protobuf:"bytes,9,opt,name=procMount"` } +type ProcMountType string + +const ( + // DefaultProcMount uses the container runtime defaults for readonly and masked + // paths for /proc. Most container runtimes mask certain paths in /proc to avoid + // accidental security exposure of special devices or information. + DefaultProcMount ProcMountType = "Default" + + // UnmaskedProcMount bypasses the default masking behavior of the container + // runtime and ensures the newly created /proc the container stays in tact with + // no modifications. + UnmaskedProcMount ProcMountType = "Unmasked" +) + // SELinuxOptions are the labels to be applied to the container type SELinuxOptions struct { // User is a SELinux user label that applies to the container. @@ -5179,13 +5746,36 @@ Level string `json:"level,omitempty" protobuf:"bytes,4,opt,name=level"` } +// WindowsSecurityContextOptions contain Windows-specific options and credentials. +type WindowsSecurityContextOptions struct { + // GMSACredentialSpecName is the name of the GMSA credential spec to use. + // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. + // +optional + GMSACredentialSpecName *string `json:"gmsaCredentialSpecName,omitempty" protobuf:"bytes,1,opt,name=gmsaCredentialSpecName"` + + // GMSACredentialSpec is where the GMSA admission webhook + // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the + // GMSA credential spec named by the GMSACredentialSpecName field. + // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. + // +optional + GMSACredentialSpec *string `json:"gmsaCredentialSpec,omitempty" protobuf:"bytes,2,opt,name=gmsaCredentialSpec"` + + // The UserName in Windows to run the entrypoint of the container process. + // Defaults to the user specified in image metadata if unspecified. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + // This field is alpha-level and it is only honored by servers that enable the WindowsRunAsUserName feature flag. + // +optional + RunAsUserName *string `json:"runAsUserName,omitempty" protobuf:"bytes,3,opt,name=runAsUserName"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // RangeAllocation is not a public type. type RangeAllocation struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -108,7 +108,7 @@ var map_Binding = map[string]string{ "": "Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "target": "The target object that you want to bind to the standard object.", } @@ -123,15 +123,29 @@ "readOnly": "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).", "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".", "volumeAttributes": "Attributes of the volume to publish.", - "controllerPublishSecretRef": "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - "nodeStageSecretRef": "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - "nodePublishSecretRef": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + "controllerPublishSecretRef": "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + "nodeStageSecretRef": "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + "nodePublishSecretRef": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + "controllerExpandSecretRef": "ControllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This is an alpha field and requires enabling ExpandCSIVolumes feature gate. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", } func (CSIPersistentVolumeSource) SwaggerDoc() map[string]string { return map_CSIPersistentVolumeSource } +var map_CSIVolumeSource = map[string]string{ + "": "Represents a source location of a volume to mount, managed by an external CSI driver", + "driver": "Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.", + "readOnly": "Specifies a read-only configuration for the volume. Defaults to false (read/write).", + "fsType": "Filesystem type to mount. Ex. \"ext4\", \"xfs\", \"ntfs\". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.", + "volumeAttributes": "VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.", + "nodePublishSecretRef": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed.", +} + +func (CSIVolumeSource) SwaggerDoc() map[string]string { + return map_CSIVolumeSource +} + var map_Capabilities = map[string]string{ "": "Adds and removes POSIX capabilities from running containers.", "add": "Added capabilities", @@ -144,12 +158,12 @@ var map_CephFSPersistentVolumeSource = map[string]string{ "": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - "monitors": "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", + "monitors": "Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", "path": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - "user": "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", + "user": "Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", } func (CephFSPersistentVolumeSource) SwaggerDoc() map[string]string { @@ -158,12 +172,12 @@ var map_CephFSVolumeSource = map[string]string{ "": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - "monitors": "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", + "monitors": "Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", "path": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - "user": "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", + "user": "Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", } func (CephFSVolumeSource) SwaggerDoc() map[string]string { @@ -172,9 +186,9 @@ var map_CinderPersistentVolumeSource = map[string]string{ "": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - "volumeID": "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", + "volumeID": "volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", "secretRef": "Optional: points to a secret object containing parameters used to connect to OpenStack.", } @@ -184,9 +198,9 @@ var map_CinderVolumeSource = map[string]string{ "": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - "volumeID": "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", + "volumeID": "volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", "secretRef": "Optional: points to a secret object containing parameters used to connect to OpenStack.", } @@ -217,7 +231,7 @@ var map_ComponentStatus = map[string]string{ "": "ComponentStatus (and ComponentStatusList) holds the cluster validation info.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "conditions": "List of component conditions observed", } @@ -227,7 +241,7 @@ var map_ComponentStatusList = map[string]string{ "": "Status of all the conditions for the component as a list of ComponentStatus objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of ComponentStatus objects.", } @@ -237,7 +251,7 @@ var map_ConfigMap = map[string]string{ "": "ConfigMap holds configuration data for pods to consume.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "data": "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.", "binaryData": "BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.", } @@ -258,7 +272,7 @@ var map_ConfigMapKeySelector = map[string]string{ "": "Selects a key from a ConfigMap.", "key": "The key to select.", - "optional": "Specify whether the ConfigMap or it's key must be defined", + "optional": "Specify whether the ConfigMap or its key must be defined", } func (ConfigMapKeySelector) SwaggerDoc() map[string]string { @@ -267,7 +281,7 @@ var map_ConfigMapList = map[string]string{ "": "ConfigMapList is a resource containing a list of ConfigMap objects.", - "metadata": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of ConfigMaps.", } @@ -291,7 +305,7 @@ var map_ConfigMapProjection = map[string]string{ "": "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.", "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "optional": "Specify whether the ConfigMap or it's keys must be defined", + "optional": "Specify whether the ConfigMap or its keys must be defined", } func (ConfigMapProjection) SwaggerDoc() map[string]string { @@ -302,7 +316,7 @@ "": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "optional": "Specify whether the ConfigMap or it's keys must be defined", + "optional": "Specify whether the ConfigMap or its keys must be defined", } func (ConfigMapVolumeSource) SwaggerDoc() map[string]string { @@ -319,11 +333,12 @@ "ports": "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", "envFrom": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", "env": "List of environment variables to set in the container. Cannot be updated.", - "resources": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", + "resources": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", - "volumeDevices": "volumeDevices is the list of block devices to be used by the container. This is an alpha feature and may change in the future.", + "volumeDevices": "volumeDevices is the list of block devices to be used by the container. This is a beta feature.", "livenessProbe": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", "readinessProbe": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "startupProbe": "StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. This can be used to provide different probe parameters at the beginning of a Pod's lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This cannot be updated. This is an alpha feature enabled by the StartupProbe feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", "lifecycle": "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", "terminationMessagePath": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", "terminationMessagePolicy": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", @@ -353,7 +368,7 @@ "name": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", "hostPort": "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", "containerPort": "Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.", - "protocol": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "protocol": "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".", "hostIP": "What host IP to bind the external port to.", } @@ -416,6 +431,7 @@ "image": "The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images", "imageID": "ImageID of the container's image.", "containerID": "Container's ID in the format 'docker://'.", + "started": "Specifies whether the container has passed its startup probe. Initialized as false, becomes true after startupProbe is considered successful. Resets to false when the container is restarted, or if kubelet loses state temporarily. Is always true when no startupProbe is defined.", } func (ContainerStatus) SwaggerDoc() map[string]string { @@ -486,9 +502,9 @@ var map_EndpointPort = map[string]string{ "": "EndpointPort is a tuple that describes a single port.", - "name": "The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.", + "name": "The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined.", "port": "The port number of the endpoint.", - "protocol": "The IP protocol for this port. Must be UDP or TCP. Default is TCP.", + "protocol": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", } func (EndpointPort) SwaggerDoc() map[string]string { @@ -508,7 +524,7 @@ var map_Endpoints = map[string]string{ "": "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "subsets": "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", } @@ -518,7 +534,7 @@ var map_EndpointsList = map[string]string{ "": "EndpointsList is a list of endpoints.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of endpoints.", } @@ -560,9 +576,57 @@ return map_EnvVarSource } +var map_EphemeralContainer = map[string]string{ + "": "An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.", + "targetContainerName": "If set, the name of the container from PodSpec that this ephemeral container targets. The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. If not set then the ephemeral container is run in whatever namespaces are shared for the pod. Note that the container runtime must support this feature.", +} + +func (EphemeralContainer) SwaggerDoc() map[string]string { + return map_EphemeralContainer +} + +var map_EphemeralContainerCommon = map[string]string{ + "": "EphemeralContainerCommon is a copy of all fields in Container to be inlined in EphemeralContainer. This separate type allows easy conversion from EphemeralContainer to Container and allows separate documentation for the fields of EphemeralContainer. When a new field is added to Container it must be added here as well.", + "name": "Name of the ephemeral container specified as a DNS_LABEL. This name must be unique among all containers, init containers and ephemeral containers.", + "image": "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images", + "command": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + "args": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + "workingDir": "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", + "ports": "Ports are not allowed for ephemeral containers.", + "envFrom": "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", + "env": "List of environment variables to set in the container. Cannot be updated.", + "resources": "Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod.", + "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", + "volumeDevices": "volumeDevices is the list of block devices to be used by the container. This is a beta feature.", + "livenessProbe": "Probes are not allowed for ephemeral containers.", + "readinessProbe": "Probes are not allowed for ephemeral containers.", + "startupProbe": "Probes are not allowed for ephemeral containers.", + "lifecycle": "Lifecycle is not allowed for ephemeral containers.", + "terminationMessagePath": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", + "terminationMessagePolicy": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", + "imagePullPolicy": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "securityContext": "SecurityContext is not allowed for ephemeral containers.", + "stdin": "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", + "stdinOnce": "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", + "tty": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", +} + +func (EphemeralContainerCommon) SwaggerDoc() map[string]string { + return map_EphemeralContainerCommon +} + +var map_EphemeralContainers = map[string]string{ + "": "A list of ephemeral containers used with the Pod ephemeralcontainers subresource.", + "ephemeralContainers": "A list of ephemeral containers associated with this pod. New ephemeral containers may be appended to this list, but existing ephemeral containers may not be removed or modified.", +} + +func (EphemeralContainers) SwaggerDoc() map[string]string { + return map_EphemeralContainers +} + var map_Event = map[string]string{ "": "Event is a report of an event somewhere in the cluster.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "involvedObject": "The object that this event is about.", "reason": "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", "message": "A human-readable description of the status of this operation.", @@ -585,7 +649,7 @@ var map_EventList = map[string]string{ "": "EventList is a list of events.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of events", } @@ -597,7 +661,7 @@ "": "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", "count": "Number of occurrences in this series up to the last heartbeat time", "lastObservedTime": "Time of the last occurrence observed", - "state": "State of this Series: Ongoing or Finished", + "state": "State of this Series: Ongoing or Finished Deprecated. Planned removal for 1.18", } func (EventSeries) SwaggerDoc() map[string]string { @@ -695,11 +759,23 @@ return map_GitRepoVolumeSource } +var map_GlusterfsPersistentVolumeSource = map[string]string{ + "": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", + "endpoints": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + "path": "Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + "readOnly": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + "endpointsNamespace": "EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", +} + +func (GlusterfsPersistentVolumeSource) SwaggerDoc() map[string]string { + return map_GlusterfsPersistentVolumeSource +} + var map_GlusterfsVolumeSource = map[string]string{ "": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - "endpoints": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "path": "Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - "readOnly": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", + "endpoints": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + "path": "Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + "readOnly": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", } func (GlusterfsVolumeSource) SwaggerDoc() map[string]string { @@ -812,7 +888,7 @@ var map_Lifecycle = map[string]string{ "": "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", "postStart": "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - "preStop": "PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", + "preStop": "PreStop is called immediately before a container is terminated due to an API request or management event such as liveness/startup probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod's termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", } func (Lifecycle) SwaggerDoc() map[string]string { @@ -821,8 +897,8 @@ var map_LimitRange = map[string]string{ "": "LimitRange sets resource usage limits for each kind of resource in a Namespace.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (LimitRange) SwaggerDoc() map[string]string { @@ -845,7 +921,7 @@ var map_LimitRangeList = map[string]string{ "": "LimitRangeList is a list of LimitRange items.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", } @@ -891,8 +967,9 @@ } var map_LocalVolumeSource = map[string]string{ - "": "Local represents directly-attached storage with node affinity (Beta feature)", - "path": "The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...). Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. Block devices can be represented only by VolumeMode=Block, which also requires the BlockVolume alpha feature gate to be enabled.", + "": "Local represents directly-attached storage with node affinity (Beta feature)", + "path": "The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).", + "fsType": "Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a fileystem if unspecified.", } func (LocalVolumeSource) SwaggerDoc() map[string]string { @@ -912,18 +989,28 @@ var map_Namespace = map[string]string{ "": "Namespace provides a scope for Names. Use of multiple namespaces is optional.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (Namespace) SwaggerDoc() map[string]string { return map_Namespace } +var map_NamespaceCondition = map[string]string{ + "": "NamespaceCondition contains details about state of namespace.", + "type": "Type of namespace controller condition.", + "status": "Status of the condition, one of True, False, Unknown.", +} + +func (NamespaceCondition) SwaggerDoc() map[string]string { + return map_NamespaceCondition +} + var map_NamespaceList = map[string]string{ "": "NamespaceList is a list of Namespaces.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", } @@ -941,8 +1028,9 @@ } var map_NamespaceStatus = map[string]string{ - "": "NamespaceStatus is information about the current status of a Namespace.", - "phase": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", + "": "NamespaceStatus is information about the current status of a Namespace.", + "phase": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", + "conditions": "Represents the latest available observations of a namespace's current state.", } func (NamespaceStatus) SwaggerDoc() map[string]string { @@ -951,9 +1039,9 @@ var map_Node = map[string]string{ "": "Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (Node) SwaggerDoc() map[string]string { @@ -1026,7 +1114,7 @@ var map_NodeList = map[string]string{ "": "NodeList is the whole list of all Nodes which have been registered with master.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of nodes", } @@ -1085,6 +1173,7 @@ var map_NodeSpec = map[string]string{ "": "NodeSpec describes the attributes that a node is created with.", "podCIDR": "PodCIDR represents the pod IP range assigned to the node.", + "podCIDRs": "podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for each of IPv4 and IPv6.", "providerID": "ID of the node assigned by the cloud provider in the format: ://", "unschedulable": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration", "taints": "If specified, the node's taints.", @@ -1102,7 +1191,7 @@ "allocatable": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", "conditions": "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", + "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", "daemonEndpoints": "Endpoints of daemons running on the Node.", "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", "images": "List of container images on this node", @@ -1145,12 +1234,12 @@ var map_ObjectReference = map[string]string{ "": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "kind": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "kind": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "namespace": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", "name": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "uid": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "apiVersion": "API version of the referent.", - "resourceVersion": "Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", + "resourceVersion": "Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", "fieldPath": "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", } @@ -1160,7 +1249,7 @@ var map_PersistentVolume = map[string]string{ "": "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", "status": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", } @@ -1171,7 +1260,7 @@ var map_PersistentVolumeClaim = map[string]string{ "": "PersistentVolumeClaim is a user's request for and claim to a persistent volume", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", "status": "Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", } @@ -1194,7 +1283,7 @@ var map_PersistentVolumeClaimList = map[string]string{ "": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", } @@ -1209,7 +1298,8 @@ "resources": "Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", "volumeName": "VolumeName is the binding reference to the PersistentVolume backing this claim.", "storageClassName": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", - "volumeMode": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is an alpha feature and may change in the future.", + "volumeMode": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.", + "dataSource": "This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.", } func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string { @@ -1240,7 +1330,7 @@ var map_PersistentVolumeList = map[string]string{ "": "PersistentVolumeList is a list of PersistentVolume items.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", } @@ -1253,11 +1343,11 @@ "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", "hostPath": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - "glusterfs": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", + "glusterfs": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md", "nfs": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", + "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md", "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", - "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", + "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", "fc": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", @@ -1270,8 +1360,8 @@ "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", "scaleIO": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", "local": "Local represents directly-attached storage with node affinity", - "storageos": "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md", - "csi": "CSI represents storage that handled by an external CSI driver (Beta feature).", + "storageos": "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md", + "csi": "CSI represents storage that is handled by an external CSI driver (Beta feature).", } func (PersistentVolumeSource) SwaggerDoc() map[string]string { @@ -1286,7 +1376,7 @@ "persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming", "storageClassName": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.", "mountOptions": "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options", - "volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is an alpha feature and may change in the future.", + "volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.", "nodeAffinity": "NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.", } @@ -1317,9 +1407,9 @@ var map_Pod = map[string]string{ "": "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (Pod) SwaggerDoc() map[string]string { @@ -1418,10 +1508,19 @@ return map_PodExecOptions } +var map_PodIP = map[string]string{ + "": "IP address information for entries in the (plural) PodIPs field. Each entry includes:\n IP: An IP address allocated to the pod. Routable at least within the cluster.", + "ip": "ip is an IP address (IPv4 or IPv6) assigned to the pod", +} + +func (PodIP) SwaggerDoc() map[string]string { + return map_PodIP +} + var map_PodList = map[string]string{ "": "PodList is a list of Pods.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "items": "List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "items": "List of pods. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md", } func (PodList) SwaggerDoc() map[string]string { @@ -1474,6 +1573,7 @@ var map_PodSecurityContext = map[string]string{ "": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", "seLinuxOptions": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + "windowsOptions": "The Windows specific settings applied to all containers. If unspecified, the options within a container's SecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", "runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", "runAsGroup": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", "runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", @@ -1498,8 +1598,9 @@ var map_PodSpec = map[string]string{ "": "PodSpec is a description of a pod.", "volumes": "List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes", - "initContainers": "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/", + "initContainers": "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/", "containers": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.", + "ephemeralContainers": "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing pod to perform user-initiated actions such as debugging. This list cannot be specified when creating a pod, and it cannot be modified by updating the pod spec. In order to add an ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature.", "restartPolicy": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy", "terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", "activeDeadlineSeconds": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", @@ -1512,7 +1613,7 @@ "hostNetwork": "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", "hostPID": "Use the host's pid namespace. Optional: Default to false.", "hostIPC": "Use the host's ipc namespace. Optional: Default to false.", - "shareProcessNamespace": "Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.", + "shareProcessNamespace": "Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is beta-level and may be disabled with the PodShareProcessNamespace feature.", "securityContext": "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", "imagePullSecrets": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod", "hostname": "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", @@ -1524,7 +1625,12 @@ "priorityClassName": "If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.", "priority": "The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.", "dnsConfig": "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.", - "readinessGates": "If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md", + "readinessGates": "If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md", + "runtimeClassName": "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md This is a beta feature as of Kubernetes v1.14.", + "enableServiceLinks": "EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.", + "preemptionPolicy": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.", + "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.", + "topologySpreadConstraints": "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. This field is alpha-level and is only honored by clusters that enables the EvenPodsSpread feature. All topologySpreadConstraints are ANDed.", } func (PodSpec) SwaggerDoc() map[string]string { @@ -1532,18 +1638,20 @@ } var map_PodStatus = map[string]string{ - "": "PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.", - "phase": "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase", - "conditions": "Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - "message": "A human readable message indicating details about why the pod is in this condition.", - "reason": "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'", - "nominatedNodeName": "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.", - "hostIP": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", - "podIP": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", - "startTime": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", - "initContainerStatuses": "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - "containerStatuses": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - "qosClass": "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", + "": "PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.", + "phase": "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase", + "conditions": "Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", + "message": "A human readable message indicating details about why the pod is in this condition.", + "reason": "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'", + "nominatedNodeName": "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.", + "hostIP": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", + "podIP": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", + "podIPs": "podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list is empty if no IPs have been allocated yet.", + "startTime": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", + "initContainerStatuses": "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", + "containerStatuses": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", + "qosClass": "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", + "ephemeralContainerStatuses": "Status for any ephemeral containers that have run in this pod. This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature.", } func (PodStatus) SwaggerDoc() map[string]string { @@ -1552,8 +1660,8 @@ var map_PodStatusResult = map[string]string{ "": "PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (PodStatusResult) SwaggerDoc() map[string]string { @@ -1562,8 +1670,8 @@ var map_PodTemplate = map[string]string{ "": "PodTemplate describes a template for creating copies of a predefined pod.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "template": "Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "template": "Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (PodTemplate) SwaggerDoc() map[string]string { @@ -1572,7 +1680,7 @@ var map_PodTemplateList = map[string]string{ "": "PodTemplateList is a list of PodTemplates.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of pod templates", } @@ -1582,8 +1690,8 @@ var map_PodTemplateSpec = map[string]string{ "": "PodTemplateSpec describes the data a pod should have when created from a template", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (PodTemplateSpec) SwaggerDoc() map[string]string { @@ -1633,11 +1741,11 @@ } var map_Probe = map[string]string{ - "": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", + "": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", "initialDelaySeconds": "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", "timeoutSeconds": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", "periodSeconds": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", - "successThreshold": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "successThreshold": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.", "failureThreshold": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", } @@ -1662,6 +1770,7 @@ "readOnly": "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", "user": "User to map volume access to Defaults to serivceaccount user", "group": "Group to map volume access to Default is no group", + "tenant": "Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin", } func (QuobyteVolumeSource) SwaggerDoc() map[string]string { @@ -1670,14 +1779,14 @@ var map_RBDPersistentVolumeSource = map[string]string{ "": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - "monitors": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "image": "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "monitors": "A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "image": "The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - "pool": "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "user": "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "pool": "The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "user": "The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", } func (RBDPersistentVolumeSource) SwaggerDoc() map[string]string { @@ -1686,14 +1795,14 @@ var map_RBDVolumeSource = map[string]string{ "": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - "monitors": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "image": "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "monitors": "A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "image": "The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - "pool": "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "user": "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "pool": "The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "user": "The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", } func (RBDVolumeSource) SwaggerDoc() map[string]string { @@ -1702,7 +1811,7 @@ var map_RangeAllocation = map[string]string{ "": "RangeAllocation is not a public type.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "range": "Range is string that identifies the range represented by 'data'.", "data": "Data is a bit array containing all allocated addresses in the previous segment.", } @@ -1713,9 +1822,9 @@ var map_ReplicationController = map[string]string{ "": "ReplicationController represents the configuration of a replication controller.", - "metadata": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (ReplicationController) SwaggerDoc() map[string]string { @@ -1737,7 +1846,7 @@ var map_ReplicationControllerList = map[string]string{ "": "ReplicationControllerList is a collection of replication controllers.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", } @@ -1784,9 +1893,9 @@ var map_ResourceQuota = map[string]string{ "": "ResourceQuota sets aggregate quota restrictions enforced per namespace", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (ResourceQuota) SwaggerDoc() map[string]string { @@ -1795,7 +1904,7 @@ var map_ResourceQuotaList = map[string]string{ "": "ResourceQuotaList is a list of ResourceQuota items.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", } @@ -1854,9 +1963,9 @@ "sslEnabled": "Flag to enable/disable SSL communication with Gateway, default false", "protectionDomain": "The name of the ScaleIO Protection Domain for the configured storage.", "storagePool": "The ScaleIO Storage Pool associated with the protection domain.", - "storageMode": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.", + "storageMode": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", "volumeName": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"", "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", } @@ -1872,9 +1981,9 @@ "sslEnabled": "Flag to enable/disable SSL communication with Gateway, default false", "protectionDomain": "The name of the ScaleIO Protection Domain for the configured storage.", "storagePool": "The ScaleIO Storage Pool associated with the protection domain.", - "storageMode": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.", + "storageMode": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", "volumeName": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".", "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", } @@ -1904,7 +2013,7 @@ var map_Secret = map[string]string{ "": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "data": "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", "stringData": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", "type": "Used to facilitate programmatic handling of secret data.", @@ -1926,7 +2035,7 @@ var map_SecretKeySelector = map[string]string{ "": "SecretKeySelector selects a key of a Secret.", "key": "The key of the secret to select from. Must be a valid secret key.", - "optional": "Specify whether the Secret or it's key must be defined", + "optional": "Specify whether the Secret or its key must be defined", } func (SecretKeySelector) SwaggerDoc() map[string]string { @@ -1935,7 +2044,7 @@ var map_SecretList = map[string]string{ "": "SecretList is a list of Secret.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret", } @@ -1968,7 +2077,7 @@ "secretName": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - "optional": "Specify whether the Secret or it's keys must be defined", + "optional": "Specify whether the Secret or its keys must be defined", } func (SecretVolumeSource) SwaggerDoc() map[string]string { @@ -1980,11 +2089,13 @@ "capabilities": "The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.", "privileged": "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.", "seLinuxOptions": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "windowsOptions": "The Windows specific settings applied to all containers. If unspecified, the options from the PodSecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", "runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", "runAsGroup": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", "runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", "readOnlyRootFilesystem": "Whether this container has a read-only root filesystem. Default is false.", "allowPrivilegeEscalation": "AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN", + "procMount": "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.", } func (SecurityContext) SwaggerDoc() map[string]string { @@ -2002,9 +2113,9 @@ var map_Service = map[string]string{ "": "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (Service) SwaggerDoc() map[string]string { @@ -2013,7 +2124,7 @@ var map_ServiceAccount = map[string]string{ "": "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "secrets": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret", "imagePullSecrets": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod", "automountServiceAccountToken": "AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.", @@ -2025,7 +2136,7 @@ var map_ServiceAccountList = map[string]string{ "": "ServiceAccountList is a list of ServiceAccount objects", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", } @@ -2046,7 +2157,7 @@ var map_ServiceList = map[string]string{ "": "ServiceList holds a list of services.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of services", } @@ -2056,8 +2167,8 @@ var map_ServicePort = map[string]string{ "": "ServicePort contains information on service's port.", - "name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.", - "protocol": "The IP protocol for this port. Supports \"TCP\" and \"UDP\". Default is TCP.", + "name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service.", + "protocol": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.", "port": "The port that will be exposed by this service.", "targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service", "nodePort": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport", @@ -2081,7 +2192,7 @@ "ports": "The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", "selector": "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/", "clusterIP": "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - "type": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services ", + "type": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types", "externalIPs": "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.", "sessionAffinity": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", "loadBalancerIP": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", @@ -2091,6 +2202,7 @@ "healthCheckNodePort": "healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.", "publishNotReadyAddresses": "publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.", "sessionAffinityConfig": "sessionAffinityConfig contains the configurations of session affinity.", + "ipFamily": "ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs. IPv6). If a specific IP family is requested, the clusterIP field will be allocated from that family, if it is available in the cluster. If no IP family is requested, the cluster's primary IP family will be used. Other IP fields (loadBalancerIP, loadBalancerSourceRanges, externalIPs) and controllers which allocate external load-balancers should use the same IP family. Endpoints for this Service will be of this family. This field is immutable after creation. Assigning a ServiceIPFamily not available in the cluster (e.g. IPv6 in IPv4 only cluster) is an error condition and will fail during clusterIP assignment.", } func (ServiceSpec) SwaggerDoc() map[string]string { @@ -2197,7 +2309,7 @@ } var map_TopologySelectorTerm = map[string]string{ - "": "A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.", + "": "A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.", "matchLabelExpressions": "A list of topology selector requirements by labels.", } @@ -2205,6 +2317,29 @@ return map_TopologySelectorTerm } +var map_TopologySpreadConstraint = map[string]string{ + "": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "maxSkew": "MaxSkew describes the degree to which pods may be unevenly distributed. It's the maximum permitted difference between the number of matching pods in any two topology domains of a given topology type. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: ", + "topologyKey": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "whenUnsatisfiable": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it - ScheduleAnyway tells the scheduler to still schedule it It's considered as \"Unsatisfiable\" if and only if placing incoming pod on any topology violates \"MaxSkew\". For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: ", + "labelSelector": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.", +} + +func (TopologySpreadConstraint) SwaggerDoc() map[string]string { + return map_TopologySpreadConstraint +} + +var map_TypedLocalObjectReference = map[string]string{ + "": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "apiGroup": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "kind": "Kind is the type of resource being referenced", + "name": "Name is the name of resource being referenced", +} + +func (TypedLocalObjectReference) SwaggerDoc() map[string]string { + return map_TypedLocalObjectReference +} + var map_Volume = map[string]string{ "": "Volume represents a named volume in a pod that may be accessed by any container in the pod.", "name": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", @@ -2231,6 +2366,7 @@ "mountPath": "Path within the container at which the volume should be mounted. Must not contain ':'.", "subPath": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).", "mountPropagation": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.", + "subPathExpr": "Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to \"\" (volume's root). SubPathExpr and SubPath are mutually exclusive. This field is beta in 1.15.", } func (VolumeMount) SwaggerDoc() map[string]string { @@ -2267,26 +2403,27 @@ "gitRepo": "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", "secret": "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", "nfs": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md", - "glusterfs": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", + "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md", + "glusterfs": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md", "persistentVolumeClaim": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", - "downwardAPI": "DownwardAPI represents downward API about the pod that should populate this volume", - "fc": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - "azureFile": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - "configMap": "ConfigMap represents a configMap that should populate this volume", - "vsphereVolume": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - "photonPersistentDisk": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - "projected": "Items for all in one resources secrets, configmaps, and downward API", - "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - "scaleIO": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - "storageos": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", + "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md", + "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", + "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", + "downwardAPI": "DownwardAPI represents downward API about the pod that should populate this volume", + "fc": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + "azureFile": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + "configMap": "ConfigMap represents a configMap that should populate this volume", + "vsphereVolume": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + "photonPersistentDisk": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + "projected": "Items for all in one resources secrets, configmaps, and downward API", + "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + "scaleIO": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", + "storageos": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", + "csi": "CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature).", } func (VolumeSource) SwaggerDoc() map[string]string { @@ -2315,4 +2452,15 @@ return map_WeightedPodAffinityTerm } +var map_WindowsSecurityContextOptions = map[string]string{ + "": "WindowsSecurityContextOptions contain Windows-specific options and credentials.", + "gmsaCredentialSpecName": "GMSACredentialSpecName is the name of the GMSA credential spec to use. This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag.", + "gmsaCredentialSpec": "GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field. This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag.", + "runAsUserName": "The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. This field is alpha-level and it is only honored by servers that enable the WindowsRunAsUserName feature flag.", +} + +func (WindowsSecurityContextOptions) SwaggerDoc() map[string]string { + return map_WindowsSecurityContextOptions +} + // AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/well_known_labels.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/well_known_labels.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/well_known_labels.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/well_known_labels.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,42 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +const ( + LabelHostname = "kubernetes.io/hostname" + LabelZoneFailureDomain = "failure-domain.beta.kubernetes.io/zone" + LabelZoneRegion = "failure-domain.beta.kubernetes.io/region" + + LabelInstanceType = "beta.kubernetes.io/instance-type" + + LabelOSStable = "kubernetes.io/os" + LabelArchStable = "kubernetes.io/arch" + + // LabelNamespaceSuffixKubelet is an allowed label namespace suffix kubelets can self-set ([*.]kubelet.kubernetes.io/*) + LabelNamespaceSuffixKubelet = "kubelet.kubernetes.io" + // LabelNamespaceSuffixNode is an allowed label namespace suffix kubelets can self-set ([*.]node.kubernetes.io/*) + LabelNamespaceSuffixNode = "node.kubernetes.io" + + // LabelNamespaceNodeRestriction is a forbidden label namespace that kubelets may not self-set when the NodeRestriction admission plugin is enabled + LabelNamespaceNodeRestriction = "node-restriction.kubernetes.io" + + // IsHeadlessService is added by Controller to an Endpoint denoting if its parent + // Service is Headless. The existence of this label can be used further by other + // controllers and kube-proxy to check if the Endpoint objects should be replicated when + // using Headless Services + IsHeadlessService = "service.kubernetes.io/headless" +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1 import ( - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" types "k8s.io/apimachinery/pkg/types" ) @@ -47,30 +47,18 @@ *out = *in if in.NodeAffinity != nil { in, out := &in.NodeAffinity, &out.NodeAffinity - if *in == nil { - *out = nil - } else { - *out = new(NodeAffinity) - (*in).DeepCopyInto(*out) - } + *out = new(NodeAffinity) + (*in).DeepCopyInto(*out) } if in.PodAffinity != nil { in, out := &in.PodAffinity, &out.PodAffinity - if *in == nil { - *out = nil - } else { - *out = new(PodAffinity) - (*in).DeepCopyInto(*out) - } + *out = new(PodAffinity) + (*in).DeepCopyInto(*out) } if in.PodAntiAffinity != nil { in, out := &in.PodAntiAffinity, &out.PodAntiAffinity - if *in == nil { - *out = nil - } else { - *out = new(PodAntiAffinity) - (*in).DeepCopyInto(*out) - } + *out = new(PodAntiAffinity) + (*in).DeepCopyInto(*out) } return } @@ -129,39 +117,23 @@ *out = *in if in.CachingMode != nil { in, out := &in.CachingMode, &out.CachingMode - if *in == nil { - *out = nil - } else { - *out = new(AzureDataDiskCachingMode) - **out = **in - } + *out = new(AzureDataDiskCachingMode) + **out = **in } if in.FSType != nil { in, out := &in.FSType, &out.FSType - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } if in.ReadOnly != nil { in, out := &in.ReadOnly, &out.ReadOnly - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.Kind != nil { in, out := &in.Kind, &out.Kind - if *in == nil { - *out = nil - } else { - *out = new(AzureDataDiskKind) - **out = **in - } + *out = new(AzureDataDiskKind) + **out = **in } return } @@ -181,12 +153,8 @@ *out = *in if in.SecretNamespace != nil { in, out := &in.SecretNamespace, &out.SecretNamespace - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } return } @@ -256,30 +224,23 @@ } if in.ControllerPublishSecretRef != nil { in, out := &in.ControllerPublishSecretRef, &out.ControllerPublishSecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } if in.NodeStageSecretRef != nil { in, out := &in.NodeStageSecretRef, &out.NodeStageSecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } if in.NodePublishSecretRef != nil { in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in + } + if in.ControllerExpandSecretRef != nil { + in, out := &in.ControllerExpandSecretRef, &out.ControllerExpandSecretRef + *out = new(SecretReference) + **out = **in } return } @@ -295,6 +256,44 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIVolumeSource) DeepCopyInto(out *CSIVolumeSource) { + *out = *in + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } + if in.VolumeAttributes != nil { + in, out := &in.VolumeAttributes, &out.VolumeAttributes + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.NodePublishSecretRef != nil { + in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef + *out = new(LocalObjectReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIVolumeSource. +func (in *CSIVolumeSource) DeepCopy() *CSIVolumeSource { + if in == nil { + return nil + } + out := new(CSIVolumeSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Capabilities) DeepCopyInto(out *Capabilities) { *out = *in if in.Add != nil { @@ -330,12 +329,8 @@ } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } return } @@ -360,12 +355,8 @@ } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } return } @@ -385,12 +376,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } return } @@ -410,12 +397,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } return } @@ -435,12 +418,8 @@ *out = *in if in.TimeoutSeconds != nil { in, out := &in.TimeoutSeconds, &out.TimeoutSeconds - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -506,7 +485,7 @@ func (in *ComponentStatusList) DeepCopyInto(out *ComponentStatusList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ComponentStatus, len(*in)) @@ -551,12 +530,15 @@ in, out := &in.BinaryData, &out.BinaryData *out = make(map[string][]byte, len(*in)) for key, val := range *in { + var outVal []byte if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]byte, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make([]byte, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return @@ -586,12 +568,8 @@ out.LocalObjectReference = in.LocalObjectReference if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -612,12 +590,8 @@ out.LocalObjectReference = in.LocalObjectReference if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -636,7 +610,7 @@ func (in *ConfigMapList) DeepCopyInto(out *ConfigMapList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ConfigMap, len(*in)) @@ -694,12 +668,8 @@ } if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -727,21 +697,13 @@ } if in.DefaultMode != nil { in, out := &in.DefaultMode, &out.DefaultMode - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -803,39 +765,28 @@ } if in.LivenessProbe != nil { in, out := &in.LivenessProbe, &out.LivenessProbe - if *in == nil { - *out = nil - } else { - *out = new(Probe) - (*in).DeepCopyInto(*out) - } + *out = new(Probe) + (*in).DeepCopyInto(*out) } if in.ReadinessProbe != nil { in, out := &in.ReadinessProbe, &out.ReadinessProbe - if *in == nil { - *out = nil - } else { - *out = new(Probe) - (*in).DeepCopyInto(*out) - } + *out = new(Probe) + (*in).DeepCopyInto(*out) + } + if in.StartupProbe != nil { + in, out := &in.StartupProbe, &out.StartupProbe + *out = new(Probe) + (*in).DeepCopyInto(*out) } if in.Lifecycle != nil { in, out := &in.Lifecycle, &out.Lifecycle - if *in == nil { - *out = nil - } else { - *out = new(Lifecycle) - (*in).DeepCopyInto(*out) - } + *out = new(Lifecycle) + (*in).DeepCopyInto(*out) } if in.SecurityContext != nil { in, out := &in.SecurityContext, &out.SecurityContext - if *in == nil { - *out = nil - } else { - *out = new(SecurityContext) - (*in).DeepCopyInto(*out) - } + *out = new(SecurityContext) + (*in).DeepCopyInto(*out) } return } @@ -892,30 +843,18 @@ *out = *in if in.Waiting != nil { in, out := &in.Waiting, &out.Waiting - if *in == nil { - *out = nil - } else { - *out = new(ContainerStateWaiting) - **out = **in - } + *out = new(ContainerStateWaiting) + **out = **in } if in.Running != nil { in, out := &in.Running, &out.Running - if *in == nil { - *out = nil - } else { - *out = new(ContainerStateRunning) - (*in).DeepCopyInto(*out) - } + *out = new(ContainerStateRunning) + (*in).DeepCopyInto(*out) } if in.Terminated != nil { in, out := &in.Terminated, &out.Terminated - if *in == nil { - *out = nil - } else { - *out = new(ContainerStateTerminated) - (*in).DeepCopyInto(*out) - } + *out = new(ContainerStateTerminated) + (*in).DeepCopyInto(*out) } return } @@ -986,6 +925,11 @@ *out = *in in.State.DeepCopyInto(&out.State) in.LastTerminationState.DeepCopyInto(&out.LastTerminationState) + if in.Started != nil { + in, out := &in.Started, &out.Started + *out = new(bool) + **out = **in + } return } @@ -1043,30 +987,18 @@ *out = *in if in.FieldRef != nil { in, out := &in.FieldRef, &out.FieldRef - if *in == nil { - *out = nil - } else { - *out = new(ObjectFieldSelector) - **out = **in - } + *out = new(ObjectFieldSelector) + **out = **in } if in.ResourceFieldRef != nil { in, out := &in.ResourceFieldRef, &out.ResourceFieldRef - if *in == nil { - *out = nil - } else { - *out = new(ResourceFieldSelector) - (*in).DeepCopyInto(*out) - } + *out = new(ResourceFieldSelector) + (*in).DeepCopyInto(*out) } if in.Mode != nil { in, out := &in.Mode, &out.Mode - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -1093,12 +1025,8 @@ } if in.DefaultMode != nil { in, out := &in.DefaultMode, &out.DefaultMode - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -1118,12 +1046,8 @@ *out = *in if in.SizeLimit != nil { in, out := &in.SizeLimit, &out.SizeLimit - if *in == nil { - *out = nil - } else { - x := (*in).DeepCopy() - *out = &x - } + x := (*in).DeepCopy() + *out = &x } return } @@ -1143,21 +1067,13 @@ *out = *in if in.NodeName != nil { in, out := &in.NodeName, &out.NodeName - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } if in.TargetRef != nil { in, out := &in.TargetRef, &out.TargetRef - if *in == nil { - *out = nil - } else { - *out = new(ObjectReference) - **out = **in - } + *out = new(ObjectReference) + **out = **in } return } @@ -1260,7 +1176,7 @@ func (in *EndpointsList) DeepCopyInto(out *EndpointsList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Endpoints, len(*in)) @@ -1294,21 +1210,13 @@ *out = *in if in.ConfigMapRef != nil { in, out := &in.ConfigMapRef, &out.ConfigMapRef - if *in == nil { - *out = nil - } else { - *out = new(ConfigMapEnvSource) - (*in).DeepCopyInto(*out) - } + *out = new(ConfigMapEnvSource) + (*in).DeepCopyInto(*out) } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretEnvSource) - (*in).DeepCopyInto(*out) - } + *out = new(SecretEnvSource) + (*in).DeepCopyInto(*out) } return } @@ -1328,12 +1236,8 @@ *out = *in if in.ValueFrom != nil { in, out := &in.ValueFrom, &out.ValueFrom - if *in == nil { - *out = nil - } else { - *out = new(EnvVarSource) - (*in).DeepCopyInto(*out) - } + *out = new(EnvVarSource) + (*in).DeepCopyInto(*out) } return } @@ -1353,39 +1257,23 @@ *out = *in if in.FieldRef != nil { in, out := &in.FieldRef, &out.FieldRef - if *in == nil { - *out = nil - } else { - *out = new(ObjectFieldSelector) - **out = **in - } + *out = new(ObjectFieldSelector) + **out = **in } if in.ResourceFieldRef != nil { in, out := &in.ResourceFieldRef, &out.ResourceFieldRef - if *in == nil { - *out = nil - } else { - *out = new(ResourceFieldSelector) - (*in).DeepCopyInto(*out) - } + *out = new(ResourceFieldSelector) + (*in).DeepCopyInto(*out) } if in.ConfigMapKeyRef != nil { in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef - if *in == nil { - *out = nil - } else { - *out = new(ConfigMapKeySelector) - (*in).DeepCopyInto(*out) - } + *out = new(ConfigMapKeySelector) + (*in).DeepCopyInto(*out) } if in.SecretKeyRef != nil { in, out := &in.SecretKeyRef, &out.SecretKeyRef - if *in == nil { - *out = nil - } else { - *out = new(SecretKeySelector) - (*in).DeepCopyInto(*out) - } + *out = new(SecretKeySelector) + (*in).DeepCopyInto(*out) } return } @@ -1401,6 +1289,139 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EphemeralContainer) DeepCopyInto(out *EphemeralContainer) { + *out = *in + in.EphemeralContainerCommon.DeepCopyInto(&out.EphemeralContainerCommon) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EphemeralContainer. +func (in *EphemeralContainer) DeepCopy() *EphemeralContainer { + if in == nil { + return nil + } + out := new(EphemeralContainer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EphemeralContainerCommon) DeepCopyInto(out *EphemeralContainerCommon) { + *out = *in + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ContainerPort, len(*in)) + copy(*out, *in) + } + if in.EnvFrom != nil { + in, out := &in.EnvFrom, &out.EnvFrom + *out = make([]EnvFromSource, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.Resources.DeepCopyInto(&out.Resources) + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]VolumeMount, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.VolumeDevices != nil { + in, out := &in.VolumeDevices, &out.VolumeDevices + *out = make([]VolumeDevice, len(*in)) + copy(*out, *in) + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(Probe) + (*in).DeepCopyInto(*out) + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(Probe) + (*in).DeepCopyInto(*out) + } + if in.StartupProbe != nil { + in, out := &in.StartupProbe, &out.StartupProbe + *out = new(Probe) + (*in).DeepCopyInto(*out) + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(Lifecycle) + (*in).DeepCopyInto(*out) + } + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(SecurityContext) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EphemeralContainerCommon. +func (in *EphemeralContainerCommon) DeepCopy() *EphemeralContainerCommon { + if in == nil { + return nil + } + out := new(EphemeralContainerCommon) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EphemeralContainers) DeepCopyInto(out *EphemeralContainers) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.EphemeralContainers != nil { + in, out := &in.EphemeralContainers, &out.EphemeralContainers + *out = make([]EphemeralContainer, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EphemeralContainers. +func (in *EphemeralContainers) DeepCopy() *EphemeralContainers { + if in == nil { + return nil + } + out := new(EphemeralContainers) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *EphemeralContainers) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Event) DeepCopyInto(out *Event) { *out = *in out.TypeMeta = in.TypeMeta @@ -1412,21 +1433,13 @@ in.EventTime.DeepCopyInto(&out.EventTime) if in.Series != nil { in, out := &in.Series, &out.Series - if *in == nil { - *out = nil - } else { - *out = new(EventSeries) - (*in).DeepCopyInto(*out) - } + *out = new(EventSeries) + (*in).DeepCopyInto(*out) } if in.Related != nil { in, out := &in.Related, &out.Related - if *in == nil { - *out = nil - } else { - *out = new(ObjectReference) - **out = **in - } + *out = new(ObjectReference) + **out = **in } return } @@ -1453,7 +1466,7 @@ func (in *EventList) DeepCopyInto(out *EventList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Event, len(*in)) @@ -1546,12 +1559,8 @@ } if in.Lun != nil { in, out := &in.Lun, &out.Lun - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.WWIDs != nil { in, out := &in.WWIDs, &out.WWIDs @@ -1576,12 +1585,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } if in.Options != nil { in, out := &in.Options, &out.Options @@ -1608,12 +1613,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } if in.Options != nil { in, out := &in.Options, &out.Options @@ -1684,6 +1685,27 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GlusterfsPersistentVolumeSource) DeepCopyInto(out *GlusterfsPersistentVolumeSource) { + *out = *in + if in.EndpointsNamespace != nil { + in, out := &in.EndpointsNamespace, &out.EndpointsNamespace + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GlusterfsPersistentVolumeSource. +func (in *GlusterfsPersistentVolumeSource) DeepCopy() *GlusterfsPersistentVolumeSource { + if in == nil { + return nil + } + out := new(GlusterfsPersistentVolumeSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GlusterfsVolumeSource) DeepCopyInto(out *GlusterfsVolumeSource) { *out = *in return @@ -1742,30 +1764,18 @@ *out = *in if in.Exec != nil { in, out := &in.Exec, &out.Exec - if *in == nil { - *out = nil - } else { - *out = new(ExecAction) - (*in).DeepCopyInto(*out) - } + *out = new(ExecAction) + (*in).DeepCopyInto(*out) } if in.HTTPGet != nil { in, out := &in.HTTPGet, &out.HTTPGet - if *in == nil { - *out = nil - } else { - *out = new(HTTPGetAction) - (*in).DeepCopyInto(*out) - } + *out = new(HTTPGetAction) + (*in).DeepCopyInto(*out) } if in.TCPSocket != nil { in, out := &in.TCPSocket, &out.TCPSocket - if *in == nil { - *out = nil - } else { - *out = new(TCPSocketAction) - **out = **in - } + *out = new(TCPSocketAction) + **out = **in } return } @@ -1806,12 +1816,8 @@ *out = *in if in.Type != nil { in, out := &in.Type, &out.Type - if *in == nil { - *out = nil - } else { - *out = new(HostPathType) - **out = **in - } + *out = new(HostPathType) + **out = **in } return } @@ -1836,21 +1842,13 @@ } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } if in.InitiatorName != nil { in, out := &in.InitiatorName, &out.InitiatorName - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } return } @@ -1875,21 +1873,13 @@ } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } if in.InitiatorName != nil { in, out := &in.InitiatorName, &out.InitiatorName - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } return } @@ -1909,12 +1899,8 @@ *out = *in if in.Mode != nil { in, out := &in.Mode, &out.Mode - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -1934,21 +1920,13 @@ *out = *in if in.PostStart != nil { in, out := &in.PostStart, &out.PostStart - if *in == nil { - *out = nil - } else { - *out = new(Handler) - (*in).DeepCopyInto(*out) - } + *out = new(Handler) + (*in).DeepCopyInto(*out) } if in.PreStop != nil { in, out := &in.PreStop, &out.PreStop - if *in == nil { - *out = nil - } else { - *out = new(Handler) - (*in).DeepCopyInto(*out) - } + *out = new(Handler) + (*in).DeepCopyInto(*out) } return } @@ -2045,7 +2023,7 @@ func (in *LimitRangeList) DeepCopyInto(out *LimitRangeList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]LimitRange, len(*in)) @@ -2101,7 +2079,7 @@ func (in *List) DeepCopyInto(out *List) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]runtime.RawExtension, len(*in)) @@ -2186,6 +2164,11 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LocalVolumeSource) DeepCopyInto(out *LocalVolumeSource) { *out = *in + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } return } @@ -2221,7 +2204,7 @@ out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) return } @@ -2244,10 +2227,27 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamespaceCondition) DeepCopyInto(out *NamespaceCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceCondition. +func (in *NamespaceCondition) DeepCopy() *NamespaceCondition { + if in == nil { + return nil + } + out := new(NamespaceCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NamespaceList) DeepCopyInto(out *NamespaceList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Namespace, len(*in)) @@ -2300,6 +2300,13 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NamespaceStatus) DeepCopyInto(out *NamespaceStatus) { *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]NamespaceCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -2362,12 +2369,8 @@ *out = *in if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - if *in == nil { - *out = nil - } else { - *out = new(NodeSelector) - (*in).DeepCopyInto(*out) - } + *out = new(NodeSelector) + (*in).DeepCopyInto(*out) } if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution @@ -2412,12 +2415,8 @@ *out = *in if in.ConfigMap != nil { in, out := &in.ConfigMap, &out.ConfigMap - if *in == nil { - *out = nil - } else { - *out = new(ConfigMapNodeConfigSource) - **out = **in - } + *out = new(ConfigMapNodeConfigSource) + **out = **in } return } @@ -2437,30 +2436,18 @@ *out = *in if in.Assigned != nil { in, out := &in.Assigned, &out.Assigned - if *in == nil { - *out = nil - } else { - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } + *out = new(NodeConfigSource) + (*in).DeepCopyInto(*out) } if in.Active != nil { in, out := &in.Active, &out.Active - if *in == nil { - *out = nil - } else { - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } + *out = new(NodeConfigSource) + (*in).DeepCopyInto(*out) } if in.LastKnownGood != nil { in, out := &in.LastKnownGood, &out.LastKnownGood - if *in == nil { - *out = nil - } else { - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } + *out = new(NodeConfigSource) + (*in).DeepCopyInto(*out) } return } @@ -2496,7 +2483,7 @@ func (in *NodeList) DeepCopyInto(out *NodeList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Node, len(*in)) @@ -2650,6 +2637,11 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeSpec) DeepCopyInto(out *NodeSpec) { *out = *in + if in.PodCIDRs != nil { + in, out := &in.PodCIDRs, &out.PodCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } if in.Taints != nil { in, out := &in.Taints, &out.Taints *out = make([]Taint, len(*in)) @@ -2659,12 +2651,8 @@ } if in.ConfigSource != nil { in, out := &in.ConfigSource, &out.ConfigSource - if *in == nil { - *out = nil - } else { - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } + *out = new(NodeConfigSource) + (*in).DeepCopyInto(*out) } return } @@ -2729,12 +2717,8 @@ } if in.Config != nil { in, out := &in.Config, &out.Config - if *in == nil { - *out = nil - } else { - *out = new(NodeConfigStatus) - (*in).DeepCopyInto(*out) - } + *out = new(NodeConfigStatus) + (*in).DeepCopyInto(*out) } return } @@ -2883,7 +2867,7 @@ func (in *PersistentVolumeClaimList) DeepCopyInto(out *PersistentVolumeClaimList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PersistentVolumeClaim, len(*in)) @@ -2922,31 +2906,24 @@ } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Resources.DeepCopyInto(&out.Resources) if in.StorageClassName != nil { in, out := &in.StorageClassName, &out.StorageClassName - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } if in.VolumeMode != nil { in, out := &in.VolumeMode, &out.VolumeMode - if *in == nil { - *out = nil - } else { - *out = new(PersistentVolumeMode) - **out = **in - } + *out = new(PersistentVolumeMode) + **out = **in + } + if in.DataSource != nil { + in, out := &in.DataSource, &out.DataSource + *out = new(TypedLocalObjectReference) + (*in).DeepCopyInto(*out) } return } @@ -3016,7 +2993,7 @@ func (in *PersistentVolumeList) DeepCopyInto(out *PersistentVolumeList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PersistentVolume, len(*in)) @@ -3050,201 +3027,113 @@ *out = *in if in.GCEPersistentDisk != nil { in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk - if *in == nil { - *out = nil - } else { - *out = new(GCEPersistentDiskVolumeSource) - **out = **in - } + *out = new(GCEPersistentDiskVolumeSource) + **out = **in } if in.AWSElasticBlockStore != nil { in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore - if *in == nil { - *out = nil - } else { - *out = new(AWSElasticBlockStoreVolumeSource) - **out = **in - } + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in } if in.HostPath != nil { in, out := &in.HostPath, &out.HostPath - if *in == nil { - *out = nil - } else { - *out = new(HostPathVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(HostPathVolumeSource) + (*in).DeepCopyInto(*out) } if in.Glusterfs != nil { in, out := &in.Glusterfs, &out.Glusterfs - if *in == nil { - *out = nil - } else { - *out = new(GlusterfsVolumeSource) - **out = **in - } + *out = new(GlusterfsPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.NFS != nil { in, out := &in.NFS, &out.NFS - if *in == nil { - *out = nil - } else { - *out = new(NFSVolumeSource) - **out = **in - } + *out = new(NFSVolumeSource) + **out = **in } if in.RBD != nil { in, out := &in.RBD, &out.RBD - if *in == nil { - *out = nil - } else { - *out = new(RBDPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(RBDPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.ISCSI != nil { in, out := &in.ISCSI, &out.ISCSI - if *in == nil { - *out = nil - } else { - *out = new(ISCSIPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(ISCSIPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.Cinder != nil { in, out := &in.Cinder, &out.Cinder - if *in == nil { - *out = nil - } else { - *out = new(CinderPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(CinderPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.CephFS != nil { in, out := &in.CephFS, &out.CephFS - if *in == nil { - *out = nil - } else { - *out = new(CephFSPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(CephFSPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.FC != nil { in, out := &in.FC, &out.FC - if *in == nil { - *out = nil - } else { - *out = new(FCVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(FCVolumeSource) + (*in).DeepCopyInto(*out) } if in.Flocker != nil { in, out := &in.Flocker, &out.Flocker - if *in == nil { - *out = nil - } else { - *out = new(FlockerVolumeSource) - **out = **in - } + *out = new(FlockerVolumeSource) + **out = **in } if in.FlexVolume != nil { in, out := &in.FlexVolume, &out.FlexVolume - if *in == nil { - *out = nil - } else { - *out = new(FlexPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(FlexPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.AzureFile != nil { in, out := &in.AzureFile, &out.AzureFile - if *in == nil { - *out = nil - } else { - *out = new(AzureFilePersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(AzureFilePersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.VsphereVolume != nil { in, out := &in.VsphereVolume, &out.VsphereVolume - if *in == nil { - *out = nil - } else { - *out = new(VsphereVirtualDiskVolumeSource) - **out = **in - } + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in } if in.Quobyte != nil { in, out := &in.Quobyte, &out.Quobyte - if *in == nil { - *out = nil - } else { - *out = new(QuobyteVolumeSource) - **out = **in - } + *out = new(QuobyteVolumeSource) + **out = **in } if in.AzureDisk != nil { in, out := &in.AzureDisk, &out.AzureDisk - if *in == nil { - *out = nil - } else { - *out = new(AzureDiskVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(AzureDiskVolumeSource) + (*in).DeepCopyInto(*out) } if in.PhotonPersistentDisk != nil { in, out := &in.PhotonPersistentDisk, &out.PhotonPersistentDisk - if *in == nil { - *out = nil - } else { - *out = new(PhotonPersistentDiskVolumeSource) - **out = **in - } + *out = new(PhotonPersistentDiskVolumeSource) + **out = **in } if in.PortworxVolume != nil { in, out := &in.PortworxVolume, &out.PortworxVolume - if *in == nil { - *out = nil - } else { - *out = new(PortworxVolumeSource) - **out = **in - } + *out = new(PortworxVolumeSource) + **out = **in } if in.ScaleIO != nil { in, out := &in.ScaleIO, &out.ScaleIO - if *in == nil { - *out = nil - } else { - *out = new(ScaleIOPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(ScaleIOPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.Local != nil { in, out := &in.Local, &out.Local - if *in == nil { - *out = nil - } else { - *out = new(LocalVolumeSource) - **out = **in - } + *out = new(LocalVolumeSource) + (*in).DeepCopyInto(*out) } if in.StorageOS != nil { in, out := &in.StorageOS, &out.StorageOS - if *in == nil { - *out = nil - } else { - *out = new(StorageOSPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(StorageOSPersistentVolumeSource) + (*in).DeepCopyInto(*out) } if in.CSI != nil { in, out := &in.CSI, &out.CSI - if *in == nil { - *out = nil - } else { - *out = new(CSIPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(CSIPersistentVolumeSource) + (*in).DeepCopyInto(*out) } return } @@ -3277,12 +3166,8 @@ } if in.ClaimRef != nil { in, out := &in.ClaimRef, &out.ClaimRef - if *in == nil { - *out = nil - } else { - *out = new(ObjectReference) - **out = **in - } + *out = new(ObjectReference) + **out = **in } if in.MountOptions != nil { in, out := &in.MountOptions, &out.MountOptions @@ -3291,21 +3176,13 @@ } if in.VolumeMode != nil { in, out := &in.VolumeMode, &out.VolumeMode - if *in == nil { - *out = nil - } else { - *out = new(PersistentVolumeMode) - **out = **in - } + *out = new(PersistentVolumeMode) + **out = **in } if in.NodeAffinity != nil { in, out := &in.NodeAffinity, &out.NodeAffinity - if *in == nil { - *out = nil - } else { - *out = new(VolumeNodeAffinity) - (*in).DeepCopyInto(*out) - } + *out = new(VolumeNodeAffinity) + (*in).DeepCopyInto(*out) } return } @@ -3415,12 +3292,8 @@ *out = *in if in.LabelSelector != nil { in, out := &in.LabelSelector, &out.LabelSelector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.Namespaces != nil { in, out := &in.Namespaces, &out.Namespaces @@ -3551,12 +3424,8 @@ *out = *in if in.Value != nil { in, out := &in.Value, &out.Value - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in } return } @@ -3602,10 +3471,26 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodIP) DeepCopyInto(out *PodIP) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodIP. +func (in *PodIP) DeepCopy() *PodIP { + if in == nil { + return nil + } + out := new(PodIP) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodList) DeepCopyInto(out *PodList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Pod, len(*in)) @@ -3640,38 +3525,22 @@ out.TypeMeta = in.TypeMeta if in.SinceSeconds != nil { in, out := &in.SinceSeconds, &out.SinceSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.SinceTime != nil { in, out := &in.SinceTime, &out.SinceTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } if in.TailLines != nil { in, out := &in.TailLines, &out.TailLines - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.LimitBytes != nil { in, out := &in.LimitBytes, &out.LimitBytes - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } return } @@ -3770,39 +3639,28 @@ *out = *in if in.SELinuxOptions != nil { in, out := &in.SELinuxOptions, &out.SELinuxOptions - if *in == nil { - *out = nil - } else { - *out = new(SELinuxOptions) - **out = **in - } + *out = new(SELinuxOptions) + **out = **in + } + if in.WindowsOptions != nil { + in, out := &in.WindowsOptions, &out.WindowsOptions + *out = new(WindowsSecurityContextOptions) + (*in).DeepCopyInto(*out) } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.RunAsGroup != nil { in, out := &in.RunAsGroup, &out.RunAsGroup - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.RunAsNonRoot != nil { in, out := &in.RunAsNonRoot, &out.RunAsNonRoot - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.SupplementalGroups != nil { in, out := &in.SupplementalGroups, &out.SupplementalGroups @@ -3811,12 +3669,8 @@ } if in.FSGroup != nil { in, out := &in.FSGroup, &out.FSGroup - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.Sysctls != nil { in, out := &in.Sysctls, &out.Sysctls @@ -3841,12 +3695,8 @@ *out = *in if in.PodController != nil { in, out := &in.PodController, &out.PodController - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.OwnerReference) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.OwnerReference) + (*in).DeepCopyInto(*out) } return } @@ -3885,23 +3735,22 @@ (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.EphemeralContainers != nil { + in, out := &in.EphemeralContainers, &out.EphemeralContainers + *out = make([]EphemeralContainer, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.TerminationGracePeriodSeconds != nil { in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.ActiveDeadlineSeconds != nil { in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.NodeSelector != nil { in, out := &in.NodeSelector, &out.NodeSelector @@ -3912,30 +3761,18 @@ } if in.AutomountServiceAccountToken != nil { in, out := &in.AutomountServiceAccountToken, &out.AutomountServiceAccountToken - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.ShareProcessNamespace != nil { in, out := &in.ShareProcessNamespace, &out.ShareProcessNamespace - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.SecurityContext != nil { in, out := &in.SecurityContext, &out.SecurityContext - if *in == nil { - *out = nil - } else { - *out = new(PodSecurityContext) - (*in).DeepCopyInto(*out) - } + *out = new(PodSecurityContext) + (*in).DeepCopyInto(*out) } if in.ImagePullSecrets != nil { in, out := &in.ImagePullSecrets, &out.ImagePullSecrets @@ -3944,12 +3781,8 @@ } if in.Affinity != nil { in, out := &in.Affinity, &out.Affinity - if *in == nil { - *out = nil - } else { - *out = new(Affinity) - (*in).DeepCopyInto(*out) - } + *out = new(Affinity) + (*in).DeepCopyInto(*out) } if in.Tolerations != nil { in, out := &in.Tolerations, &out.Tolerations @@ -3967,27 +3800,48 @@ } if in.Priority != nil { in, out := &in.Priority, &out.Priority - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.DNSConfig != nil { in, out := &in.DNSConfig, &out.DNSConfig - if *in == nil { - *out = nil - } else { - *out = new(PodDNSConfig) - (*in).DeepCopyInto(*out) - } + *out = new(PodDNSConfig) + (*in).DeepCopyInto(*out) } if in.ReadinessGates != nil { in, out := &in.ReadinessGates, &out.ReadinessGates *out = make([]PodReadinessGate, len(*in)) copy(*out, *in) } + if in.RuntimeClassName != nil { + in, out := &in.RuntimeClassName, &out.RuntimeClassName + *out = new(string) + **out = **in + } + if in.EnableServiceLinks != nil { + in, out := &in.EnableServiceLinks, &out.EnableServiceLinks + *out = new(bool) + **out = **in + } + if in.PreemptionPolicy != nil { + in, out := &in.PreemptionPolicy, &out.PreemptionPolicy + *out = new(PreemptionPolicy) + **out = **in + } + if in.Overhead != nil { + in, out := &in.Overhead, &out.Overhead + *out = make(ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.TopologySpreadConstraints != nil { + in, out := &in.TopologySpreadConstraints, &out.TopologySpreadConstraints + *out = make([]TopologySpreadConstraint, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -4011,13 +3865,14 @@ (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.PodIPs != nil { + in, out := &in.PodIPs, &out.PodIPs + *out = make([]PodIP, len(*in)) + copy(*out, *in) + } if in.StartTime != nil { in, out := &in.StartTime, &out.StartTime - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } if in.InitContainerStatuses != nil { in, out := &in.InitContainerStatuses, &out.InitContainerStatuses @@ -4033,6 +3888,13 @@ (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.EphemeralContainerStatuses != nil { + in, out := &in.EphemeralContainerStatuses, &out.EphemeralContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -4104,7 +3966,7 @@ func (in *PodTemplateList) DeepCopyInto(out *PodTemplateList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PodTemplate, len(*in)) @@ -4172,12 +4034,8 @@ *out = *in if in.UID != nil { in, out := &in.UID, &out.UID - if *in == nil { - *out = nil - } else { - *out = new(types.UID) - **out = **in - } + *out = new(types.UID) + **out = **in } return } @@ -4256,12 +4114,8 @@ } if in.DefaultMode != nil { in, out := &in.DefaultMode, &out.DefaultMode - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -4302,12 +4156,8 @@ } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } return } @@ -4332,12 +4182,8 @@ } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } return } @@ -4432,7 +4278,7 @@ func (in *ReplicationControllerList) DeepCopyInto(out *ReplicationControllerList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ReplicationController, len(*in)) @@ -4466,12 +4312,8 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector @@ -4482,12 +4324,8 @@ } if in.Template != nil { in, out := &in.Template, &out.Template - if *in == nil { - *out = nil - } else { - *out = new(PodTemplateSpec) - (*in).DeepCopyInto(*out) - } + *out = new(PodTemplateSpec) + (*in).DeepCopyInto(*out) } return } @@ -4596,7 +4434,7 @@ func (in *ResourceQuotaList) DeepCopyInto(out *ResourceQuotaList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ResourceQuota, len(*in)) @@ -4642,12 +4480,8 @@ } if in.ScopeSelector != nil { in, out := &in.ScopeSelector, &out.ScopeSelector - if *in == nil { - *out = nil - } else { - *out = new(ScopeSelector) - (*in).DeepCopyInto(*out) - } + *out = new(ScopeSelector) + (*in).DeepCopyInto(*out) } return } @@ -4743,12 +4577,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(SecretReference) - **out = **in - } + *out = new(SecretReference) + **out = **in } return } @@ -4768,12 +4598,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } return } @@ -4841,12 +4667,15 @@ in, out := &in.Data, &out.Data *out = make(map[string][]byte, len(*in)) for key, val := range *in { + var outVal []byte if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]byte, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make([]byte, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } if in.StringData != nil { @@ -4883,12 +4712,8 @@ out.LocalObjectReference = in.LocalObjectReference if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -4909,12 +4734,8 @@ out.LocalObjectReference = in.LocalObjectReference if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -4933,7 +4754,7 @@ func (in *SecretList) DeepCopyInto(out *SecretList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Secret, len(*in)) @@ -4975,12 +4796,8 @@ } if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -5023,21 +4840,13 @@ } if in.DefaultMode != nil { in, out := &in.DefaultMode, &out.DefaultMode - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Optional != nil { in, out := &in.Optional, &out.Optional - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -5057,75 +4866,53 @@ *out = *in if in.Capabilities != nil { in, out := &in.Capabilities, &out.Capabilities - if *in == nil { - *out = nil - } else { - *out = new(Capabilities) - (*in).DeepCopyInto(*out) - } + *out = new(Capabilities) + (*in).DeepCopyInto(*out) } if in.Privileged != nil { in, out := &in.Privileged, &out.Privileged - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.SELinuxOptions != nil { in, out := &in.SELinuxOptions, &out.SELinuxOptions - if *in == nil { - *out = nil - } else { - *out = new(SELinuxOptions) - **out = **in - } + *out = new(SELinuxOptions) + **out = **in + } + if in.WindowsOptions != nil { + in, out := &in.WindowsOptions, &out.WindowsOptions + *out = new(WindowsSecurityContextOptions) + (*in).DeepCopyInto(*out) } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.RunAsGroup != nil { in, out := &in.RunAsGroup, &out.RunAsGroup - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.RunAsNonRoot != nil { in, out := &in.RunAsNonRoot, &out.RunAsNonRoot - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.ReadOnlyRootFilesystem != nil { in, out := &in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.AllowPrivilegeEscalation != nil { in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in + } + if in.ProcMount != nil { + in, out := &in.ProcMount, &out.ProcMount + *out = new(ProcMountType) + **out = **in } return } @@ -5211,12 +4998,8 @@ } if in.AutomountServiceAccountToken != nil { in, out := &in.AutomountServiceAccountToken, &out.AutomountServiceAccountToken - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -5243,7 +5026,7 @@ func (in *ServiceAccountList) DeepCopyInto(out *ServiceAccountList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ServiceAccount, len(*in)) @@ -5277,12 +5060,8 @@ *out = *in if in.ExpirationSeconds != nil { in, out := &in.ExpirationSeconds, &out.ExpirationSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } return } @@ -5301,7 +5080,7 @@ func (in *ServiceList) DeepCopyInto(out *ServiceList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Service, len(*in)) @@ -5399,12 +5178,13 @@ } if in.SessionAffinityConfig != nil { in, out := &in.SessionAffinityConfig, &out.SessionAffinityConfig - if *in == nil { - *out = nil - } else { - *out = new(SessionAffinityConfig) - (*in).DeepCopyInto(*out) - } + *out = new(SessionAffinityConfig) + (*in).DeepCopyInto(*out) + } + if in.IPFamily != nil { + in, out := &in.IPFamily, &out.IPFamily + *out = new(IPFamily) + **out = **in } return } @@ -5441,12 +5221,8 @@ *out = *in if in.ClientIP != nil { in, out := &in.ClientIP, &out.ClientIP - if *in == nil { - *out = nil - } else { - *out = new(ClientIPConfig) - (*in).DeepCopyInto(*out) - } + *out = new(ClientIPConfig) + (*in).DeepCopyInto(*out) } return } @@ -5466,12 +5242,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(ObjectReference) - **out = **in - } + *out = new(ObjectReference) + **out = **in } return } @@ -5491,12 +5263,8 @@ *out = *in if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef - if *in == nil { - *out = nil - } else { - *out = new(LocalObjectReference) - **out = **in - } + *out = new(LocalObjectReference) + **out = **in } return } @@ -5549,11 +5317,7 @@ *out = *in if in.TimeAdded != nil { in, out := &in.TimeAdded, &out.TimeAdded - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } @@ -5573,12 +5337,8 @@ *out = *in if in.TolerationSeconds != nil { in, out := &in.TolerationSeconds, &out.TolerationSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } return } @@ -5638,6 +5398,48 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TopologySpreadConstraint) DeepCopyInto(out *TopologySpreadConstraint) { + *out = *in + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologySpreadConstraint. +func (in *TopologySpreadConstraint) DeepCopy() *TopologySpreadConstraint { + if in == nil { + return nil + } + out := new(TopologySpreadConstraint) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TypedLocalObjectReference) DeepCopyInto(out *TypedLocalObjectReference) { + *out = *in + if in.APIGroup != nil { + in, out := &in.APIGroup, &out.APIGroup + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TypedLocalObjectReference. +func (in *TypedLocalObjectReference) DeepCopy() *TypedLocalObjectReference { + if in == nil { + return nil + } + out := new(TypedLocalObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Volume) DeepCopyInto(out *Volume) { *out = *in in.VolumeSource.DeepCopyInto(&out.VolumeSource) @@ -5675,12 +5477,8 @@ *out = *in if in.MountPropagation != nil { in, out := &in.MountPropagation, &out.MountPropagation - if *in == nil { - *out = nil - } else { - *out = new(MountPropagationMode) - **out = **in - } + *out = new(MountPropagationMode) + **out = **in } return } @@ -5700,12 +5498,8 @@ *out = *in if in.Required != nil { in, out := &in.Required, &out.Required - if *in == nil { - *out = nil - } else { - *out = new(NodeSelector) - (*in).DeepCopyInto(*out) - } + *out = new(NodeSelector) + (*in).DeepCopyInto(*out) } return } @@ -5725,39 +5519,23 @@ *out = *in if in.Secret != nil { in, out := &in.Secret, &out.Secret - if *in == nil { - *out = nil - } else { - *out = new(SecretProjection) - (*in).DeepCopyInto(*out) - } + *out = new(SecretProjection) + (*in).DeepCopyInto(*out) } if in.DownwardAPI != nil { in, out := &in.DownwardAPI, &out.DownwardAPI - if *in == nil { - *out = nil - } else { - *out = new(DownwardAPIProjection) - (*in).DeepCopyInto(*out) - } + *out = new(DownwardAPIProjection) + (*in).DeepCopyInto(*out) } if in.ConfigMap != nil { in, out := &in.ConfigMap, &out.ConfigMap - if *in == nil { - *out = nil - } else { - *out = new(ConfigMapProjection) - (*in).DeepCopyInto(*out) - } + *out = new(ConfigMapProjection) + (*in).DeepCopyInto(*out) } if in.ServiceAccountToken != nil { in, out := &in.ServiceAccountToken, &out.ServiceAccountToken - if *in == nil { - *out = nil - } else { - *out = new(ServiceAccountTokenProjection) - (*in).DeepCopyInto(*out) - } + *out = new(ServiceAccountTokenProjection) + (*in).DeepCopyInto(*out) } return } @@ -5777,246 +5555,143 @@ *out = *in if in.HostPath != nil { in, out := &in.HostPath, &out.HostPath - if *in == nil { - *out = nil - } else { - *out = new(HostPathVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(HostPathVolumeSource) + (*in).DeepCopyInto(*out) } if in.EmptyDir != nil { in, out := &in.EmptyDir, &out.EmptyDir - if *in == nil { - *out = nil - } else { - *out = new(EmptyDirVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(EmptyDirVolumeSource) + (*in).DeepCopyInto(*out) } if in.GCEPersistentDisk != nil { in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk - if *in == nil { - *out = nil - } else { - *out = new(GCEPersistentDiskVolumeSource) - **out = **in - } + *out = new(GCEPersistentDiskVolumeSource) + **out = **in } if in.AWSElasticBlockStore != nil { in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore - if *in == nil { - *out = nil - } else { - *out = new(AWSElasticBlockStoreVolumeSource) - **out = **in - } + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in } if in.GitRepo != nil { in, out := &in.GitRepo, &out.GitRepo - if *in == nil { - *out = nil - } else { - *out = new(GitRepoVolumeSource) - **out = **in - } + *out = new(GitRepoVolumeSource) + **out = **in } if in.Secret != nil { in, out := &in.Secret, &out.Secret - if *in == nil { - *out = nil - } else { - *out = new(SecretVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(SecretVolumeSource) + (*in).DeepCopyInto(*out) } if in.NFS != nil { in, out := &in.NFS, &out.NFS - if *in == nil { - *out = nil - } else { - *out = new(NFSVolumeSource) - **out = **in - } + *out = new(NFSVolumeSource) + **out = **in } if in.ISCSI != nil { in, out := &in.ISCSI, &out.ISCSI - if *in == nil { - *out = nil - } else { - *out = new(ISCSIVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(ISCSIVolumeSource) + (*in).DeepCopyInto(*out) } if in.Glusterfs != nil { in, out := &in.Glusterfs, &out.Glusterfs - if *in == nil { - *out = nil - } else { - *out = new(GlusterfsVolumeSource) - **out = **in - } + *out = new(GlusterfsVolumeSource) + **out = **in } if in.PersistentVolumeClaim != nil { in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim - if *in == nil { - *out = nil - } else { - *out = new(PersistentVolumeClaimVolumeSource) - **out = **in - } + *out = new(PersistentVolumeClaimVolumeSource) + **out = **in } if in.RBD != nil { in, out := &in.RBD, &out.RBD - if *in == nil { - *out = nil - } else { - *out = new(RBDVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(RBDVolumeSource) + (*in).DeepCopyInto(*out) } if in.FlexVolume != nil { in, out := &in.FlexVolume, &out.FlexVolume - if *in == nil { - *out = nil - } else { - *out = new(FlexVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(FlexVolumeSource) + (*in).DeepCopyInto(*out) } if in.Cinder != nil { in, out := &in.Cinder, &out.Cinder - if *in == nil { - *out = nil - } else { - *out = new(CinderVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(CinderVolumeSource) + (*in).DeepCopyInto(*out) } if in.CephFS != nil { in, out := &in.CephFS, &out.CephFS - if *in == nil { - *out = nil - } else { - *out = new(CephFSVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(CephFSVolumeSource) + (*in).DeepCopyInto(*out) } if in.Flocker != nil { in, out := &in.Flocker, &out.Flocker - if *in == nil { - *out = nil - } else { - *out = new(FlockerVolumeSource) - **out = **in - } + *out = new(FlockerVolumeSource) + **out = **in } if in.DownwardAPI != nil { in, out := &in.DownwardAPI, &out.DownwardAPI - if *in == nil { - *out = nil - } else { - *out = new(DownwardAPIVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(DownwardAPIVolumeSource) + (*in).DeepCopyInto(*out) } if in.FC != nil { in, out := &in.FC, &out.FC - if *in == nil { - *out = nil - } else { - *out = new(FCVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(FCVolumeSource) + (*in).DeepCopyInto(*out) } if in.AzureFile != nil { in, out := &in.AzureFile, &out.AzureFile - if *in == nil { - *out = nil - } else { - *out = new(AzureFileVolumeSource) - **out = **in - } + *out = new(AzureFileVolumeSource) + **out = **in } if in.ConfigMap != nil { in, out := &in.ConfigMap, &out.ConfigMap - if *in == nil { - *out = nil - } else { - *out = new(ConfigMapVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(ConfigMapVolumeSource) + (*in).DeepCopyInto(*out) } if in.VsphereVolume != nil { in, out := &in.VsphereVolume, &out.VsphereVolume - if *in == nil { - *out = nil - } else { - *out = new(VsphereVirtualDiskVolumeSource) - **out = **in - } + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in } if in.Quobyte != nil { in, out := &in.Quobyte, &out.Quobyte - if *in == nil { - *out = nil - } else { - *out = new(QuobyteVolumeSource) - **out = **in - } + *out = new(QuobyteVolumeSource) + **out = **in } if in.AzureDisk != nil { in, out := &in.AzureDisk, &out.AzureDisk - if *in == nil { - *out = nil - } else { - *out = new(AzureDiskVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(AzureDiskVolumeSource) + (*in).DeepCopyInto(*out) } if in.PhotonPersistentDisk != nil { in, out := &in.PhotonPersistentDisk, &out.PhotonPersistentDisk - if *in == nil { - *out = nil - } else { - *out = new(PhotonPersistentDiskVolumeSource) - **out = **in - } + *out = new(PhotonPersistentDiskVolumeSource) + **out = **in } if in.Projected != nil { in, out := &in.Projected, &out.Projected - if *in == nil { - *out = nil - } else { - *out = new(ProjectedVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(ProjectedVolumeSource) + (*in).DeepCopyInto(*out) } if in.PortworxVolume != nil { in, out := &in.PortworxVolume, &out.PortworxVolume - if *in == nil { - *out = nil - } else { - *out = new(PortworxVolumeSource) - **out = **in - } + *out = new(PortworxVolumeSource) + **out = **in } if in.ScaleIO != nil { in, out := &in.ScaleIO, &out.ScaleIO - if *in == nil { - *out = nil - } else { - *out = new(ScaleIOVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(ScaleIOVolumeSource) + (*in).DeepCopyInto(*out) } if in.StorageOS != nil { in, out := &in.StorageOS, &out.StorageOS - if *in == nil { - *out = nil - } else { - *out = new(StorageOSVolumeSource) - (*in).DeepCopyInto(*out) - } + *out = new(StorageOSVolumeSource) + (*in).DeepCopyInto(*out) + } + if in.CSI != nil { + in, out := &in.CSI, &out.CSI + *out = new(CSIVolumeSource) + (*in).DeepCopyInto(*out) } return } @@ -6063,3 +5738,34 @@ in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WindowsSecurityContextOptions) DeepCopyInto(out *WindowsSecurityContextOptions) { + *out = *in + if in.GMSACredentialSpecName != nil { + in, out := &in.GMSACredentialSpecName, &out.GMSACredentialSpecName + *out = new(string) + **out = **in + } + if in.GMSACredentialSpec != nil { + in, out := &in.GMSACredentialSpec, &out.GMSACredentialSpec + *out = new(string) + **out = **in + } + if in.RunAsUserName != nil { + in, out := &in.RunAsUserName, &out.RunAsUserName + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WindowsSecurityContextOptions. +func (in *WindowsSecurityContextOptions) DeepCopy() *WindowsSecurityContextOptions { + if in == nil { + return nil + } + out := new(WindowsSecurityContextOptions) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true +// +groupName=discovery.k8s.io + +package v1alpha1 // import "k8s.io/api/discovery/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1689 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/discovery/v1alpha1/generated.proto + +package v1alpha1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Endpoint) Reset() { *m = Endpoint{} } +func (*Endpoint) ProtoMessage() {} +func (*Endpoint) Descriptor() ([]byte, []int) { + return fileDescriptor_772f83c5b34e07a5, []int{0} +} +func (m *Endpoint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Endpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Endpoint) XXX_Merge(src proto.Message) { + xxx_messageInfo_Endpoint.Merge(m, src) +} +func (m *Endpoint) XXX_Size() int { + return m.Size() +} +func (m *Endpoint) XXX_DiscardUnknown() { + xxx_messageInfo_Endpoint.DiscardUnknown(m) +} + +var xxx_messageInfo_Endpoint proto.InternalMessageInfo + +func (m *EndpointConditions) Reset() { *m = EndpointConditions{} } +func (*EndpointConditions) ProtoMessage() {} +func (*EndpointConditions) Descriptor() ([]byte, []int) { + return fileDescriptor_772f83c5b34e07a5, []int{1} +} +func (m *EndpointConditions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointConditions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointConditions) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointConditions.Merge(m, src) +} +func (m *EndpointConditions) XXX_Size() int { + return m.Size() +} +func (m *EndpointConditions) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointConditions.DiscardUnknown(m) +} + +var xxx_messageInfo_EndpointConditions proto.InternalMessageInfo + +func (m *EndpointPort) Reset() { *m = EndpointPort{} } +func (*EndpointPort) ProtoMessage() {} +func (*EndpointPort) Descriptor() ([]byte, []int) { + return fileDescriptor_772f83c5b34e07a5, []int{2} +} +func (m *EndpointPort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointPort) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointPort.Merge(m, src) +} +func (m *EndpointPort) XXX_Size() int { + return m.Size() +} +func (m *EndpointPort) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointPort.DiscardUnknown(m) +} + +var xxx_messageInfo_EndpointPort proto.InternalMessageInfo + +func (m *EndpointSlice) Reset() { *m = EndpointSlice{} } +func (*EndpointSlice) ProtoMessage() {} +func (*EndpointSlice) Descriptor() ([]byte, []int) { + return fileDescriptor_772f83c5b34e07a5, []int{3} +} +func (m *EndpointSlice) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointSlice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointSlice) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointSlice.Merge(m, src) +} +func (m *EndpointSlice) XXX_Size() int { + return m.Size() +} +func (m *EndpointSlice) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointSlice.DiscardUnknown(m) +} + +var xxx_messageInfo_EndpointSlice proto.InternalMessageInfo + +func (m *EndpointSliceList) Reset() { *m = EndpointSliceList{} } +func (*EndpointSliceList) ProtoMessage() {} +func (*EndpointSliceList) Descriptor() ([]byte, []int) { + return fileDescriptor_772f83c5b34e07a5, []int{4} +} +func (m *EndpointSliceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EndpointSliceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EndpointSliceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndpointSliceList.Merge(m, src) +} +func (m *EndpointSliceList) XXX_Size() int { + return m.Size() +} +func (m *EndpointSliceList) XXX_DiscardUnknown() { + xxx_messageInfo_EndpointSliceList.DiscardUnknown(m) +} + +var xxx_messageInfo_EndpointSliceList proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Endpoint)(nil), "k8s.io.api.discovery.v1alpha1.Endpoint") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.discovery.v1alpha1.Endpoint.TopologyEntry") + proto.RegisterType((*EndpointConditions)(nil), "k8s.io.api.discovery.v1alpha1.EndpointConditions") + proto.RegisterType((*EndpointPort)(nil), "k8s.io.api.discovery.v1alpha1.EndpointPort") + proto.RegisterType((*EndpointSlice)(nil), "k8s.io.api.discovery.v1alpha1.EndpointSlice") + proto.RegisterType((*EndpointSliceList)(nil), "k8s.io.api.discovery.v1alpha1.EndpointSliceList") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/discovery/v1alpha1/generated.proto", fileDescriptor_772f83c5b34e07a5) +} + +var fileDescriptor_772f83c5b34e07a5 = []byte{ + // 728 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4b, 0x6f, 0xd3, 0x4a, + 0x14, 0x8e, 0x9b, 0x5a, 0xb2, 0x27, 0x8d, 0xd4, 0x8e, 0xee, 0x22, 0xca, 0xbd, 0xd7, 0x8e, 0xc2, + 0x82, 0x48, 0x85, 0x31, 0xa9, 0x28, 0xaa, 0x60, 0x43, 0x8d, 0xca, 0x43, 0xe2, 0x11, 0x86, 0x2e, + 0x10, 0x62, 0xc1, 0xc4, 0x9e, 0x3a, 0x26, 0x89, 0xc7, 0xb2, 0x27, 0x91, 0xb2, 0xe3, 0x27, 0x20, + 0xf1, 0x77, 0x58, 0xb2, 0xe8, 0xb2, 0xcb, 0xae, 0x0c, 0x35, 0xff, 0xa2, 0x2b, 0x34, 0xe3, 0x57, + 0x4a, 0x78, 0x64, 0x37, 0xe7, 0x9b, 0xf3, 0x7d, 0xe7, 0x9c, 0x6f, 0xce, 0x80, 0x87, 0xe3, 0x83, + 0x18, 0xf9, 0xcc, 0x1a, 0xcf, 0x86, 0x34, 0x0a, 0x28, 0xa7, 0xb1, 0x35, 0xa7, 0x81, 0xcb, 0x22, + 0x2b, 0xbf, 0x20, 0xa1, 0x6f, 0xb9, 0x7e, 0xec, 0xb0, 0x39, 0x8d, 0x16, 0xd6, 0xbc, 0x4f, 0x26, + 0xe1, 0x88, 0xf4, 0x2d, 0x8f, 0x06, 0x34, 0x22, 0x9c, 0xba, 0x28, 0x8c, 0x18, 0x67, 0xf0, 0xff, + 0x2c, 0x1d, 0x91, 0xd0, 0x47, 0x65, 0x3a, 0x2a, 0xd2, 0xdb, 0x37, 0x3d, 0x9f, 0x8f, 0x66, 0x43, + 0xe4, 0xb0, 0xa9, 0xe5, 0x31, 0x8f, 0x59, 0x92, 0x35, 0x9c, 0x9d, 0xc8, 0x48, 0x06, 0xf2, 0x94, + 0xa9, 0xb5, 0xbb, 0x4b, 0xc5, 0x1d, 0x16, 0x51, 0x6b, 0xbe, 0x52, 0xb1, 0x7d, 0xbb, 0xca, 0x99, + 0x12, 0x67, 0xe4, 0x07, 0xa2, 0xbf, 0x70, 0xec, 0x09, 0x20, 0xb6, 0xa6, 0x94, 0x93, 0x5f, 0xb1, + 0xac, 0xdf, 0xb1, 0xa2, 0x59, 0xc0, 0xfd, 0x29, 0x5d, 0x21, 0xdc, 0xf9, 0x1b, 0x21, 0x76, 0x46, + 0x74, 0x4a, 0x7e, 0xe6, 0x75, 0x3f, 0xd7, 0x81, 0x76, 0x14, 0xb8, 0x21, 0xf3, 0x03, 0x0e, 0x77, + 0x81, 0x4e, 0x5c, 0x37, 0xa2, 0x71, 0x4c, 0xe3, 0x96, 0xd2, 0xa9, 0xf7, 0x74, 0xbb, 0x99, 0x26, + 0xa6, 0x7e, 0x58, 0x80, 0xb8, 0xba, 0x87, 0x14, 0x00, 0x87, 0x05, 0xae, 0xcf, 0x7d, 0x16, 0xc4, + 0xad, 0x8d, 0x8e, 0xd2, 0x6b, 0xec, 0xf5, 0xd1, 0x1f, 0xfd, 0x45, 0x45, 0xa5, 0x07, 0x25, 0xd1, + 0x86, 0xa7, 0x89, 0x59, 0x4b, 0x13, 0x13, 0x54, 0x18, 0x5e, 0x12, 0x86, 0x3d, 0xa0, 0x8d, 0x58, + 0xcc, 0x03, 0x32, 0xa5, 0xad, 0x7a, 0x47, 0xe9, 0xe9, 0xf6, 0x56, 0x9a, 0x98, 0xda, 0xe3, 0x1c, + 0xc3, 0xe5, 0x2d, 0x1c, 0x00, 0x9d, 0x93, 0xc8, 0xa3, 0x1c, 0xd3, 0x93, 0xd6, 0xa6, 0xec, 0xe7, + 0xda, 0x72, 0x3f, 0xe2, 0x85, 0xd0, 0xbc, 0x8f, 0x5e, 0x0c, 0xdf, 0x53, 0x47, 0x24, 0xd1, 0x88, + 0x06, 0x0e, 0xcd, 0x46, 0x3c, 0x2e, 0x98, 0xb8, 0x12, 0x81, 0x0e, 0xd0, 0x38, 0x0b, 0xd9, 0x84, + 0x79, 0x8b, 0x96, 0xda, 0xa9, 0xf7, 0x1a, 0x7b, 0xfb, 0x6b, 0x0e, 0x88, 0x8e, 0x73, 0xde, 0x51, + 0xc0, 0xa3, 0x85, 0xbd, 0x9d, 0x0f, 0xa9, 0x15, 0x30, 0x2e, 0x85, 0xdb, 0xf7, 0x40, 0xf3, 0x4a, + 0x32, 0xdc, 0x06, 0xf5, 0x31, 0x5d, 0xb4, 0x14, 0x31, 0x2c, 0x16, 0x47, 0xf8, 0x0f, 0x50, 0xe7, + 0x64, 0x32, 0xa3, 0xd2, 0x65, 0x1d, 0x67, 0xc1, 0xdd, 0x8d, 0x03, 0xa5, 0xbb, 0x0f, 0xe0, 0xaa, + 0xa7, 0xd0, 0x04, 0x6a, 0x44, 0x89, 0x9b, 0x69, 0x68, 0xb6, 0x9e, 0x26, 0xa6, 0x8a, 0x05, 0x80, + 0x33, 0xbc, 0xfb, 0x49, 0x01, 0x5b, 0x05, 0x6f, 0xc0, 0x22, 0x0e, 0xff, 0x03, 0x9b, 0xd2, 0x61, + 0x59, 0xd4, 0xd6, 0xd2, 0xc4, 0xdc, 0x7c, 0x2e, 0xdc, 0x95, 0x28, 0x7c, 0x04, 0x34, 0xb9, 0x2d, + 0x0e, 0x9b, 0x64, 0x2d, 0xd8, 0xbb, 0x62, 0x98, 0x41, 0x8e, 0x5d, 0x26, 0xe6, 0xbf, 0xab, 0x3f, + 0x01, 0x15, 0xd7, 0xb8, 0x24, 0x8b, 0x32, 0x21, 0x8b, 0xb8, 0x7c, 0x48, 0x35, 0x2b, 0x23, 0xca, + 0x63, 0x89, 0x76, 0xbf, 0x6e, 0x80, 0x66, 0xd1, 0xd5, 0xab, 0x89, 0xef, 0x50, 0xf8, 0x0e, 0x68, + 0xe2, 0x87, 0xb8, 0x84, 0x13, 0xd9, 0x5a, 0x63, 0xef, 0xd6, 0xd2, 0x03, 0x94, 0x8b, 0x8e, 0xc2, + 0xb1, 0x27, 0x80, 0x18, 0x89, 0xec, 0xea, 0x8d, 0x9f, 0x51, 0x4e, 0xaa, 0x05, 0xab, 0x30, 0x5c, + 0xaa, 0xc2, 0xfb, 0xa0, 0x91, 0xaf, 0xf4, 0xf1, 0x22, 0xa4, 0x72, 0x6d, 0x74, 0xdb, 0x48, 0x13, + 0xb3, 0x71, 0x58, 0xc1, 0x97, 0x57, 0x43, 0xbc, 0x4c, 0x81, 0xaf, 0x81, 0x4e, 0xf3, 0xa6, 0xc5, + 0x37, 0x10, 0x5b, 0x72, 0x7d, 0xcd, 0x2d, 0xb1, 0x77, 0xf2, 0xde, 0xf4, 0x02, 0x89, 0x71, 0x25, + 0x06, 0x07, 0x40, 0x15, 0xbe, 0xc4, 0xad, 0xba, 0x54, 0xdd, 0x5d, 0x53, 0x55, 0x38, 0x6a, 0x37, + 0x73, 0x65, 0x55, 0x44, 0x31, 0xce, 0x84, 0xba, 0x5f, 0x14, 0xb0, 0x73, 0xc5, 0xe1, 0xa7, 0x7e, + 0xcc, 0xe1, 0xdb, 0x15, 0x97, 0xd1, 0x7a, 0x2e, 0x0b, 0xb6, 0xf4, 0xb8, 0xdc, 0xef, 0x02, 0x59, + 0x72, 0xf8, 0x25, 0x50, 0x7d, 0x4e, 0xa7, 0x85, 0x37, 0x37, 0xd6, 0x9c, 0x42, 0xb6, 0x57, 0x8d, + 0xf1, 0x44, 0x48, 0xe0, 0x4c, 0xc9, 0x46, 0xa7, 0x17, 0x46, 0xed, 0xec, 0xc2, 0xa8, 0x9d, 0x5f, + 0x18, 0xb5, 0x0f, 0xa9, 0xa1, 0x9c, 0xa6, 0x86, 0x72, 0x96, 0x1a, 0xca, 0x79, 0x6a, 0x28, 0xdf, + 0x52, 0x43, 0xf9, 0xf8, 0xdd, 0xa8, 0xbd, 0xd1, 0x0a, 0xcd, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x04, 0x9d, 0x1a, 0x33, 0x3e, 0x06, 0x00, 0x00, +} + +func (m *Endpoint) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Endpoint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Endpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Topology) > 0 { + keysForTopology := make([]string, 0, len(m.Topology)) + for k := range m.Topology { + keysForTopology = append(keysForTopology, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForTopology) + for iNdEx := len(keysForTopology) - 1; iNdEx >= 0; iNdEx-- { + v := m.Topology[string(keysForTopology[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForTopology[iNdEx]) + copy(dAtA[i:], keysForTopology[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForTopology[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + if m.TargetRef != nil { + { + size, err := m.TargetRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Hostname != nil { + i -= len(*m.Hostname) + copy(dAtA[i:], *m.Hostname) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Hostname))) + i-- + dAtA[i] = 0x1a + } + { + size, err := m.Conditions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Addresses) > 0 { + for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Addresses[iNdEx]) + copy(dAtA[i:], m.Addresses[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Addresses[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *EndpointConditions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EndpointConditions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointConditions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Ready != nil { + i-- + if *m.Ready { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *EndpointPort) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EndpointPort) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Port != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Port)) + i-- + dAtA[i] = 0x18 + } + if m.Protocol != nil { + i -= len(*m.Protocol) + copy(dAtA[i:], *m.Protocol) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Protocol))) + i-- + dAtA[i] = 0x12 + } + if m.Name != nil { + i -= len(*m.Name) + copy(dAtA[i:], *m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EndpointSlice) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EndpointSlice) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointSlice) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AddressType != nil { + i -= len(*m.AddressType) + copy(dAtA[i:], *m.AddressType) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.AddressType))) + i-- + dAtA[i] = 0x22 + } + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Endpoints) > 0 { + for iNdEx := len(m.Endpoints) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Endpoints[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EndpointSliceList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EndpointSliceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EndpointSliceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Endpoint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Addresses) > 0 { + for _, s := range m.Addresses { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.Conditions.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Hostname != nil { + l = len(*m.Hostname) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TargetRef != nil { + l = m.TargetRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Topology) > 0 { + for k, v := range m.Topology { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *EndpointConditions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Ready != nil { + n += 2 + } + return n +} + +func (m *EndpointPort) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Name != nil { + l = len(*m.Name) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Protocol != nil { + l = len(*m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Port != nil { + n += 1 + sovGenerated(uint64(*m.Port)) + } + return n +} + +func (m *EndpointSlice) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Endpoints) > 0 { + for _, e := range m.Endpoints { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.AddressType != nil { + l = len(*m.AddressType) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *EndpointSliceList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Endpoint) String() string { + if this == nil { + return "nil" + } + keysForTopology := make([]string, 0, len(this.Topology)) + for k := range this.Topology { + keysForTopology = append(keysForTopology, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForTopology) + mapStringForTopology := "map[string]string{" + for _, k := range keysForTopology { + mapStringForTopology += fmt.Sprintf("%v: %v,", k, this.Topology[k]) + } + mapStringForTopology += "}" + s := strings.Join([]string{`&Endpoint{`, + `Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`, + `Conditions:` + strings.Replace(strings.Replace(this.Conditions.String(), "EndpointConditions", "EndpointConditions", 1), `&`, ``, 1) + `,`, + `Hostname:` + valueToStringGenerated(this.Hostname) + `,`, + `TargetRef:` + strings.Replace(fmt.Sprintf("%v", this.TargetRef), "ObjectReference", "v1.ObjectReference", 1) + `,`, + `Topology:` + mapStringForTopology + `,`, + `}`, + }, "") + return s +} +func (this *EndpointConditions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointConditions{`, + `Ready:` + valueToStringGenerated(this.Ready) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointPort{`, + `Name:` + valueToStringGenerated(this.Name) + `,`, + `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, + `Port:` + valueToStringGenerated(this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointSlice) String() string { + if this == nil { + return "nil" + } + repeatedStringForEndpoints := "[]Endpoint{" + for _, f := range this.Endpoints { + repeatedStringForEndpoints += strings.Replace(strings.Replace(f.String(), "Endpoint", "Endpoint", 1), `&`, ``, 1) + "," + } + repeatedStringForEndpoints += "}" + repeatedStringForPorts := "[]EndpointPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "EndpointPort", "EndpointPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + s := strings.Join([]string{`&EndpointSlice{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Endpoints:` + repeatedStringForEndpoints + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `AddressType:` + valueToStringGenerated(this.AddressType) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointSliceList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]EndpointSlice{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "EndpointSlice", "EndpointSlice", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&EndpointSliceList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Endpoint) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Endpoint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Endpoint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Conditions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Hostname = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TargetRef == nil { + m.TargetRef = &v1.ObjectReference{} + } + if err := m.TargetRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topology", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Topology == nil { + m.Topology = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Topology[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointConditions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointConditions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointConditions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Ready", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Ready = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointPort) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointPort: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointPort: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Name = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := k8s_io_api_core_v1.Protocol(dAtA[iNdEx:postIndex]) + m.Protocol = &s + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Port = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointSlice) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointSlice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointSlice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Endpoints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Endpoints = append(m.Endpoints, Endpoint{}) + if err := m.Endpoints[len(m.Endpoints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ports = append(m.Ports, EndpointPort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AddressType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := AddressType(dAtA[iNdEx:postIndex]) + m.AddressType = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointSliceList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointSliceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointSliceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, EndpointSlice{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,148 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.discovery.v1alpha1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1alpha1"; + +// Endpoint represents a single logical "backend" implementing a service. +message Endpoint { + // addresses of this endpoint. The contents of this field are interpreted + // according to the corresponding EndpointSlice addressType field. This + // allows for cases like dual-stack (IPv4 and IPv6) networking. Consumers + // (e.g. kube-proxy) must handle different types of addresses in the context + // of their own capabilities. This must contain at least one address but no + // more than 100. + // +listType=set + repeated string addresses = 1; + + // conditions contains information about the current status of the endpoint. + optional EndpointConditions conditions = 2; + + // hostname of this endpoint. This field may be used by consumers of + // endpoints to distinguish endpoints from each other (e.g. in DNS names). + // Multiple endpoints which use the same hostname should be considered + // fungible (e.g. multiple A values in DNS). Must pass DNS Label (RFC 1123) + // validation. + // +optional + optional string hostname = 3; + + // targetRef is a reference to a Kubernetes object that represents this + // endpoint. + // +optional + optional k8s.io.api.core.v1.ObjectReference targetRef = 4; + + // topology contains arbitrary topology information associated with the + // endpoint. These key/value pairs must conform with the label format. + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + // Topology may include a maximum of 16 key/value pairs. This includes, but + // is not limited to the following well known keys: + // * kubernetes.io/hostname: the value indicates the hostname of the node + // where the endpoint is located. This should match the corresponding + // node label. + // * topology.kubernetes.io/zone: the value indicates the zone where the + // endpoint is located. This should match the corresponding node label. + // * topology.kubernetes.io/region: the value indicates the region where the + // endpoint is located. This should match the corresponding node label. + // +optional + map topology = 5; +} + +// EndpointConditions represents the current condition of an endpoint. +message EndpointConditions { + // ready indicates that this endpoint is prepared to receive traffic, + // according to whatever system is managing the endpoint. A nil value + // indicates an unknown state. In most cases consumers should interpret this + // unknown state as ready. + // +optional + optional bool ready = 1; +} + +// EndpointPort represents a Port used by an EndpointSlice +message EndpointPort { + // The name of this port. All ports in an EndpointSlice must have a unique + // name. If the EndpointSlice is dervied from a Kubernetes service, this + // corresponds to the Service.ports[].name. + // Name must either be an empty string or pass IANA_SVC_NAME validation: + // * must be no more than 15 characters long + // * may contain only [-a-z0-9] + // * must contain at least one letter [a-z] + // * it must not start or end with a hyphen, nor contain adjacent hyphens + // Default is empty string. + optional string name = 1; + + // The IP protocol for this port. + // Must be UDP, TCP, or SCTP. + // Default is TCP. + optional string protocol = 2; + + // The port number of the endpoint. + // If this is not specified, ports are not restricted and must be + // interpreted in the context of the specific consumer. + optional int32 port = 3; +} + +// EndpointSlice represents a subset of the endpoints that implement a service. +// For a given service there may be multiple EndpointSlice objects, selected by +// labels, which must be joined to produce the full set of endpoints. +message EndpointSlice { + // Standard object's metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // addressType specifies the type of address carried by this EndpointSlice. + // All addresses in this slice must be the same type. + // Default is IP + // +optional + optional string addressType = 4; + + // endpoints is a list of unique endpoints in this slice. Each slice may + // include a maximum of 1000 endpoints. + // +listType=atomic + repeated Endpoint endpoints = 2; + + // ports specifies the list of network ports exposed by each endpoint in + // this slice. Each port must have a unique name. When ports is empty, it + // indicates that there are no defined ports. When a port is defined with a + // nil port value, it indicates "all ports". Each slice may include a + // maximum of 100 ports. + // +optional + // +listType=atomic + repeated EndpointPort ports = 3; +} + +// EndpointSliceList represents a list of endpoint slices +message EndpointSliceList { + // Standard list metadata. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of endpoint slices + // +listType=set + repeated EndpointSlice items = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name used in this package +const GroupName = "discovery.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &EndpointSlice{}, + &EndpointSliceList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,144 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// EndpointSlice represents a subset of the endpoints that implement a service. +// For a given service there may be multiple EndpointSlice objects, selected by +// labels, which must be joined to produce the full set of endpoints. +type EndpointSlice struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // addressType specifies the type of address carried by this EndpointSlice. + // All addresses in this slice must be the same type. + // Default is IP + // +optional + AddressType *AddressType `json:"addressType" protobuf:"bytes,4,rep,name=addressType"` + // endpoints is a list of unique endpoints in this slice. Each slice may + // include a maximum of 1000 endpoints. + // +listType=atomic + Endpoints []Endpoint `json:"endpoints" protobuf:"bytes,2,rep,name=endpoints"` + // ports specifies the list of network ports exposed by each endpoint in + // this slice. Each port must have a unique name. When ports is empty, it + // indicates that there are no defined ports. When a port is defined with a + // nil port value, it indicates "all ports". Each slice may include a + // maximum of 100 ports. + // +optional + // +listType=atomic + Ports []EndpointPort `json:"ports" protobuf:"bytes,3,rep,name=ports"` +} + +// AddressType represents the type of address referred to by an endpoint. +type AddressType string + +const ( + // AddressTypeIP represents an IP Address. + AddressTypeIP = AddressType("IP") +) + +// Endpoint represents a single logical "backend" implementing a service. +type Endpoint struct { + // addresses of this endpoint. The contents of this field are interpreted + // according to the corresponding EndpointSlice addressType field. This + // allows for cases like dual-stack (IPv4 and IPv6) networking. Consumers + // (e.g. kube-proxy) must handle different types of addresses in the context + // of their own capabilities. This must contain at least one address but no + // more than 100. + // +listType=set + Addresses []string `json:"addresses" protobuf:"bytes,1,rep,name=addresses"` + // conditions contains information about the current status of the endpoint. + Conditions EndpointConditions `json:"conditions,omitempty" protobuf:"bytes,2,opt,name=conditions"` + // hostname of this endpoint. This field may be used by consumers of + // endpoints to distinguish endpoints from each other (e.g. in DNS names). + // Multiple endpoints which use the same hostname should be considered + // fungible (e.g. multiple A values in DNS). Must pass DNS Label (RFC 1123) + // validation. + // +optional + Hostname *string `json:"hostname,omitempty" protobuf:"bytes,3,opt,name=hostname"` + // targetRef is a reference to a Kubernetes object that represents this + // endpoint. + // +optional + TargetRef *v1.ObjectReference `json:"targetRef,omitempty" protobuf:"bytes,4,opt,name=targetRef"` + // topology contains arbitrary topology information associated with the + // endpoint. These key/value pairs must conform with the label format. + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels + // Topology may include a maximum of 16 key/value pairs. This includes, but + // is not limited to the following well known keys: + // * kubernetes.io/hostname: the value indicates the hostname of the node + // where the endpoint is located. This should match the corresponding + // node label. + // * topology.kubernetes.io/zone: the value indicates the zone where the + // endpoint is located. This should match the corresponding node label. + // * topology.kubernetes.io/region: the value indicates the region where the + // endpoint is located. This should match the corresponding node label. + // +optional + Topology map[string]string `json:"topology,omitempty" protobuf:"bytes,5,opt,name=topology"` +} + +// EndpointConditions represents the current condition of an endpoint. +type EndpointConditions struct { + // ready indicates that this endpoint is prepared to receive traffic, + // according to whatever system is managing the endpoint. A nil value + // indicates an unknown state. In most cases consumers should interpret this + // unknown state as ready. + // +optional + Ready *bool `json:"ready,omitempty" protobuf:"bytes,1,name=ready"` +} + +// EndpointPort represents a Port used by an EndpointSlice +type EndpointPort struct { + // The name of this port. All ports in an EndpointSlice must have a unique + // name. If the EndpointSlice is dervied from a Kubernetes service, this + // corresponds to the Service.ports[].name. + // Name must either be an empty string or pass IANA_SVC_NAME validation: + // * must be no more than 15 characters long + // * may contain only [-a-z0-9] + // * must contain at least one letter [a-z] + // * it must not start or end with a hyphen, nor contain adjacent hyphens + // Default is empty string. + Name *string `json:"name,omitempty" protobuf:"bytes,1,name=name"` + // The IP protocol for this port. + // Must be UDP, TCP, or SCTP. + // Default is TCP. + Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,2,name=protocol"` + // The port number of the endpoint. + // If this is not specified, ports are not restricted and must be + // interpreted in the context of the specific consumer. + Port *int32 `json:"port,omitempty" protobuf:"bytes,3,opt,name=port"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// EndpointSliceList represents a list of endpoint slices +type EndpointSliceList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of endpoint slices + // +listType=set + Items []EndpointSlice `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,85 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_Endpoint = map[string]string{ + "": "Endpoint represents a single logical \"backend\" implementing a service.", + "addresses": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. This allows for cases like dual-stack (IPv4 and IPv6) networking. Consumers (e.g. kube-proxy) must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.", + "conditions": "conditions contains information about the current status of the endpoint.", + "hostname": "hostname of this endpoint. This field may be used by consumers of endpoints to distinguish endpoints from each other (e.g. in DNS names). Multiple endpoints which use the same hostname should be considered fungible (e.g. multiple A values in DNS). Must pass DNS Label (RFC 1123) validation.", + "targetRef": "targetRef is a reference to a Kubernetes object that represents this endpoint.", + "topology": "topology contains arbitrary topology information associated with the endpoint. These key/value pairs must conform with the label format. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels Topology may include a maximum of 16 key/value pairs. This includes, but is not limited to the following well known keys: * kubernetes.io/hostname: the value indicates the hostname of the node\n where the endpoint is located. This should match the corresponding\n node label.\n* topology.kubernetes.io/zone: the value indicates the zone where the\n endpoint is located. This should match the corresponding node label.\n* topology.kubernetes.io/region: the value indicates the region where the\n endpoint is located. This should match the corresponding node label.", +} + +func (Endpoint) SwaggerDoc() map[string]string { + return map_Endpoint +} + +var map_EndpointConditions = map[string]string{ + "": "EndpointConditions represents the current condition of an endpoint.", + "ready": "ready indicates that this endpoint is prepared to receive traffic, according to whatever system is managing the endpoint. A nil value indicates an unknown state. In most cases consumers should interpret this unknown state as ready.", +} + +func (EndpointConditions) SwaggerDoc() map[string]string { + return map_EndpointConditions +} + +var map_EndpointPort = map[string]string{ + "": "EndpointPort represents a Port used by an EndpointSlice", + "name": "The name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass IANA_SVC_NAME validation: * must be no more than 15 characters long * may contain only [-a-z0-9] * must contain at least one letter [a-z] * it must not start or end with a hyphen, nor contain adjacent hyphens Default is empty string.", + "protocol": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", + "port": "The port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.", +} + +func (EndpointPort) SwaggerDoc() map[string]string { + return map_EndpointPort +} + +var map_EndpointSlice = map[string]string{ + "": "EndpointSlice represents a subset of the endpoints that implement a service. For a given service there may be multiple EndpointSlice objects, selected by labels, which must be joined to produce the full set of endpoints.", + "metadata": "Standard object's metadata.", + "addressType": "addressType specifies the type of address carried by this EndpointSlice. All addresses in this slice must be the same type. Default is IP", + "endpoints": "endpoints is a list of unique endpoints in this slice. Each slice may include a maximum of 1000 endpoints.", + "ports": "ports specifies the list of network ports exposed by each endpoint in this slice. Each port must have a unique name. When ports is empty, it indicates that there are no defined ports. When a port is defined with a nil port value, it indicates \"all ports\". Each slice may include a maximum of 100 ports.", +} + +func (EndpointSlice) SwaggerDoc() map[string]string { + return map_EndpointSlice +} + +var map_EndpointSliceList = map[string]string{ + "": "EndpointSliceList represents a list of endpoint slices", + "metadata": "Standard list metadata.", + "items": "List of endpoint slices", +} + +func (EndpointSliceList) SwaggerDoc() map[string]string { + return map_EndpointSliceList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/well_known_labels.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +const ( + // LabelServiceName is used to indicate the name of a Kubernetes service. + LabelServiceName = "kubernetes.io/service-name" +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/discovery/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,195 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Endpoint) DeepCopyInto(out *Endpoint) { + *out = *in + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]string, len(*in)) + copy(*out, *in) + } + in.Conditions.DeepCopyInto(&out.Conditions) + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(v1.ObjectReference) + **out = **in + } + if in.Topology != nil { + in, out := &in.Topology, &out.Topology + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Endpoint. +func (in *Endpoint) DeepCopy() *Endpoint { + if in == nil { + return nil + } + out := new(Endpoint) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointConditions) DeepCopyInto(out *EndpointConditions) { + *out = *in + if in.Ready != nil { + in, out := &in.Ready, &out.Ready + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointConditions. +func (in *EndpointConditions) DeepCopy() *EndpointConditions { + if in == nil { + return nil + } + out := new(EndpointConditions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointPort) DeepCopyInto(out *EndpointPort) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(v1.Protocol) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointPort. +func (in *EndpointPort) DeepCopy() *EndpointPort { + if in == nil { + return nil + } + out := new(EndpointPort) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointSlice) DeepCopyInto(out *EndpointSlice) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.AddressType != nil { + in, out := &in.AddressType, &out.AddressType + *out = new(AddressType) + **out = **in + } + if in.Endpoints != nil { + in, out := &in.Endpoints, &out.Endpoints + *out = make([]Endpoint, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]EndpointPort, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointSlice. +func (in *EndpointSlice) DeepCopy() *EndpointSlice { + if in == nil { + return nil + } + out := new(EndpointSlice) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *EndpointSlice) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointSliceList) DeepCopyInto(out *EndpointSliceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]EndpointSlice, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointSliceList. +func (in *EndpointSliceList) DeepCopy() *EndpointSliceList { + if in == nil { + return nil + } + out := new(EndpointSliceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *EndpointSliceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=events.k8s.io + package v1beta1 // import "k8s.io/api/events/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,33 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/events/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/events/v1beta1/generated.proto - - It has these top-level messages: - Event - EventList - EventSeries -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + v11 "k8s.io/api/core/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -53,27 +44,159 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *Event) Reset() { *m = Event{} } -func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *EventList) Reset() { *m = EventList{} } -func (*EventList) ProtoMessage() {} -func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *EventSeries) Reset() { *m = EventSeries{} } -func (*EventSeries) ProtoMessage() {} -func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (m *Event) Reset() { *m = Event{} } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { + return fileDescriptor_4f97f691c32a5ac8, []int{0} +} +func (m *Event) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Event) XXX_Merge(src proto.Message) { + xxx_messageInfo_Event.Merge(m, src) +} +func (m *Event) XXX_Size() int { + return m.Size() +} +func (m *Event) XXX_DiscardUnknown() { + xxx_messageInfo_Event.DiscardUnknown(m) +} + +var xxx_messageInfo_Event proto.InternalMessageInfo + +func (m *EventList) Reset() { *m = EventList{} } +func (*EventList) ProtoMessage() {} +func (*EventList) Descriptor() ([]byte, []int) { + return fileDescriptor_4f97f691c32a5ac8, []int{1} +} +func (m *EventList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EventList) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventList.Merge(m, src) +} +func (m *EventList) XXX_Size() int { + return m.Size() +} +func (m *EventList) XXX_DiscardUnknown() { + xxx_messageInfo_EventList.DiscardUnknown(m) +} + +var xxx_messageInfo_EventList proto.InternalMessageInfo + +func (m *EventSeries) Reset() { *m = EventSeries{} } +func (*EventSeries) ProtoMessage() {} +func (*EventSeries) Descriptor() ([]byte, []int) { + return fileDescriptor_4f97f691c32a5ac8, []int{2} +} +func (m *EventSeries) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSeries) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EventSeries) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSeries.Merge(m, src) +} +func (m *EventSeries) XXX_Size() int { + return m.Size() +} +func (m *EventSeries) XXX_DiscardUnknown() { + xxx_messageInfo_EventSeries.DiscardUnknown(m) +} + +var xxx_messageInfo_EventSeries proto.InternalMessageInfo func init() { proto.RegisterType((*Event)(nil), "k8s.io.api.events.v1beta1.Event") proto.RegisterType((*EventList)(nil), "k8s.io.api.events.v1beta1.EventList") proto.RegisterType((*EventSeries)(nil), "k8s.io.api.events.v1beta1.EventSeries") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/events/v1beta1/generated.proto", fileDescriptor_4f97f691c32a5ac8) +} + +var fileDescriptor_4f97f691c32a5ac8 = []byte{ + // 801 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x16, 0x13, 0x4b, 0xb2, 0x56, 0x49, 0x2c, 0x6f, 0x0e, 0xde, 0xb8, 0x00, 0xa5, 0x2a, 0x40, + 0x20, 0x14, 0x08, 0x59, 0x07, 0x45, 0xdb, 0x6b, 0x18, 0xb9, 0x45, 0x02, 0xbb, 0x01, 0xd6, 0x3e, + 0x15, 0x3d, 0x64, 0x45, 0x4d, 0x68, 0x56, 0xe2, 0x2e, 0xb1, 0xbb, 0x12, 0xe0, 0x5b, 0x2f, 0x05, + 0x7a, 0xec, 0x33, 0xf4, 0x09, 0xfa, 0x18, 0x3e, 0xe6, 0x98, 0x93, 0x50, 0xb3, 0x6f, 0xd1, 0x53, + 0xc1, 0xe5, 0x4a, 0x94, 0xf5, 0x83, 0xa8, 0xe8, 0x4d, 0x9c, 0xf9, 0x7e, 0x66, 0x66, 0x47, 0x83, + 0x82, 0xd1, 0xb7, 0xca, 0x8b, 0x85, 0x3f, 0x9a, 0x0c, 0x40, 0x72, 0xd0, 0xa0, 0xfc, 0x29, 0xf0, + 0xa1, 0x90, 0xbe, 0x4d, 0xb0, 0x34, 0xf6, 0x61, 0x0a, 0x5c, 0x2b, 0x7f, 0x7a, 0x32, 0x00, 0xcd, + 0x4e, 0xfc, 0x08, 0x38, 0x48, 0xa6, 0x61, 0xe8, 0xa5, 0x52, 0x68, 0x81, 0x9f, 0x14, 0x50, 0x8f, + 0xa5, 0xb1, 0x57, 0x40, 0x3d, 0x0b, 0x3d, 0x7e, 0x1e, 0xc5, 0xfa, 0x6a, 0x32, 0xf0, 0x42, 0x91, + 0xf8, 0x91, 0x88, 0x84, 0x6f, 0x18, 0x83, 0xc9, 0x7b, 0xf3, 0x65, 0x3e, 0xcc, 0xaf, 0x42, 0xe9, + 0xb8, 0xbb, 0x64, 0x1a, 0x0a, 0x09, 0xfe, 0x74, 0xcd, 0xed, 0xf8, 0xab, 0x12, 0x93, 0xb0, 0xf0, + 0x2a, 0xe6, 0x20, 0xaf, 0xfd, 0x74, 0x14, 0xe5, 0x01, 0xe5, 0x27, 0xa0, 0xd9, 0x26, 0x96, 0xbf, + 0x8d, 0x25, 0x27, 0x5c, 0xc7, 0x09, 0xac, 0x11, 0xbe, 0xfe, 0x14, 0x41, 0x85, 0x57, 0x90, 0xb0, + 0x55, 0x5e, 0xf7, 0x8f, 0x06, 0xaa, 0x9e, 0xe6, 0x43, 0xc0, 0xef, 0xd0, 0x7e, 0x5e, 0xcd, 0x90, + 0x69, 0x46, 0x9c, 0x8e, 0xd3, 0x6b, 0xbe, 0xf8, 0xd2, 0x2b, 0x27, 0xb5, 0x10, 0xf5, 0xd2, 0x51, + 0x94, 0x07, 0x94, 0x97, 0xa3, 0xbd, 0xe9, 0x89, 0xf7, 0x76, 0xf0, 0x33, 0x84, 0xfa, 0x1c, 0x34, + 0x0b, 0xf0, 0xcd, 0xac, 0x5d, 0xc9, 0x66, 0x6d, 0x54, 0xc6, 0xe8, 0x42, 0x15, 0xbf, 0x43, 0x0d, + 0x33, 0xef, 0xcb, 0x38, 0x01, 0x72, 0xcf, 0x58, 0xf8, 0xbb, 0x59, 0x9c, 0xc7, 0xa1, 0x14, 0x39, + 0x2d, 0x38, 0xb4, 0x0e, 0x8d, 0xd3, 0xb9, 0x12, 0x2d, 0x45, 0xf1, 0x1b, 0x54, 0x53, 0x20, 0x63, + 0x50, 0xe4, 0xbe, 0x91, 0x7f, 0xe6, 0x6d, 0x7d, 0x6b, 0xcf, 0x08, 0x5c, 0x18, 0x74, 0x80, 0xb2, + 0x59, 0xbb, 0x56, 0xfc, 0xa6, 0x56, 0x01, 0x9f, 0xa3, 0xc7, 0x12, 0x52, 0x21, 0x75, 0xcc, 0xa3, + 0x57, 0x82, 0x6b, 0x29, 0xc6, 0x63, 0x90, 0x64, 0xaf, 0xe3, 0xf4, 0x1a, 0xc1, 0x67, 0xb6, 0x8c, + 0xc7, 0x74, 0x1d, 0x42, 0x37, 0xf1, 0xf0, 0xf7, 0xe8, 0x70, 0x11, 0x7e, 0xcd, 0x95, 0x66, 0x3c, + 0x04, 0x52, 0x35, 0x62, 0x4f, 0xac, 0xd8, 0x21, 0x5d, 0x05, 0xd0, 0x75, 0x0e, 0x7e, 0x86, 0x6a, + 0x2c, 0xd4, 0xb1, 0xe0, 0xa4, 0x66, 0xd8, 0x8f, 0x2c, 0xbb, 0xf6, 0xd2, 0x44, 0xa9, 0xcd, 0xe6, + 0x38, 0x09, 0x4c, 0x09, 0x4e, 0xea, 0x77, 0x71, 0xd4, 0x44, 0xa9, 0xcd, 0xe2, 0x4b, 0xd4, 0x90, + 0x10, 0x31, 0x39, 0x8c, 0x79, 0x44, 0xf6, 0xcd, 0xd8, 0x9e, 0x2e, 0x8f, 0x2d, 0x5f, 0xec, 0xf2, + 0x99, 0x29, 0xbc, 0x07, 0x09, 0x3c, 0x5c, 0x7a, 0x09, 0x3a, 0x67, 0xd3, 0x52, 0x08, 0xbf, 0x41, + 0x75, 0x09, 0xe3, 0x7c, 0xd1, 0x48, 0x63, 0x77, 0xcd, 0x66, 0x36, 0x6b, 0xd7, 0x69, 0xc1, 0xa3, + 0x73, 0x01, 0xdc, 0x41, 0x7b, 0x5c, 0x68, 0x20, 0xc8, 0xf4, 0xf1, 0xc0, 0xfa, 0xee, 0xfd, 0x20, + 0x34, 0x50, 0x93, 0xc9, 0x11, 0xfa, 0x3a, 0x05, 0xd2, 0xbc, 0x8b, 0xb8, 0xbc, 0x4e, 0x81, 0x9a, + 0x0c, 0x06, 0xd4, 0x1a, 0x42, 0x2a, 0x21, 0xcc, 0x15, 0x2f, 0xc4, 0x44, 0x86, 0x40, 0x1e, 0x98, + 0xc2, 0xda, 0x9b, 0x0a, 0x2b, 0x96, 0xc3, 0xc0, 0x02, 0x62, 0xe5, 0x5a, 0xfd, 0x15, 0x01, 0xba, + 0x26, 0x89, 0x7f, 0x73, 0x10, 0x29, 0x83, 0xdf, 0xc5, 0x52, 0x99, 0xc5, 0x54, 0x9a, 0x25, 0x29, + 0x79, 0x68, 0xfc, 0xbe, 0xd8, 0x6d, 0xe5, 0xcd, 0xb6, 0x77, 0xac, 0x35, 0xe9, 0x6f, 0xd1, 0xa4, + 0x5b, 0xdd, 0xf0, 0xaf, 0x0e, 0x3a, 0x2a, 0x93, 0x67, 0x6c, 0xb9, 0x92, 0x47, 0xff, 0xb9, 0x92, + 0xb6, 0xad, 0xe4, 0xa8, 0xbf, 0x59, 0x92, 0x6e, 0xf3, 0xc2, 0x2f, 0xd1, 0x41, 0x99, 0x7a, 0x25, + 0x26, 0x5c, 0x93, 0x83, 0x8e, 0xd3, 0xab, 0x06, 0x47, 0x56, 0xf2, 0xa0, 0x7f, 0x37, 0x4d, 0x57, + 0xf1, 0xdd, 0x3f, 0x1d, 0x54, 0xfc, 0xdf, 0xcf, 0x62, 0xa5, 0xf1, 0x4f, 0x6b, 0x87, 0xca, 0xdb, + 0xad, 0x91, 0x9c, 0x6d, 0xce, 0x54, 0xcb, 0x3a, 0xef, 0xcf, 0x23, 0x4b, 0x47, 0xea, 0x14, 0x55, + 0x63, 0x0d, 0x89, 0x22, 0xf7, 0x3a, 0xf7, 0x7b, 0xcd, 0x17, 0x9d, 0x4f, 0x5d, 0x90, 0xe0, 0xa1, + 0x15, 0xab, 0xbe, 0xce, 0x69, 0xb4, 0x60, 0x77, 0x33, 0x07, 0x35, 0x97, 0x2e, 0x0c, 0x7e, 0x8a, + 0xaa, 0xa1, 0xe9, 0xdd, 0x31, 0xbd, 0x2f, 0x48, 0x45, 0xc7, 0x45, 0x0e, 0x4f, 0x50, 0x6b, 0xcc, + 0x94, 0x7e, 0x3b, 0x50, 0x20, 0xa7, 0x30, 0xfc, 0x3f, 0x77, 0x72, 0xb1, 0xb4, 0x67, 0x2b, 0x82, + 0x74, 0xcd, 0x02, 0x7f, 0x83, 0xaa, 0x4a, 0x33, 0x0d, 0xe6, 0x68, 0x36, 0x82, 0xcf, 0xe7, 0xb5, + 0x5d, 0xe4, 0xc1, 0x7f, 0x66, 0xed, 0xd6, 0x52, 0x23, 0x26, 0x46, 0x0b, 0x7c, 0xf0, 0xfc, 0xe6, + 0xd6, 0xad, 0x7c, 0xb8, 0x75, 0x2b, 0x1f, 0x6f, 0xdd, 0xca, 0x2f, 0x99, 0xeb, 0xdc, 0x64, 0xae, + 0xf3, 0x21, 0x73, 0x9d, 0x8f, 0x99, 0xeb, 0xfc, 0x95, 0xb9, 0xce, 0xef, 0x7f, 0xbb, 0x95, 0x1f, + 0xeb, 0x76, 0x5e, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x25, 0x9b, 0x14, 0x4d, 0xbd, 0x07, 0x00, + 0x00, +} + func (m *Event) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -81,112 +204,139 @@ } func (m *Event) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EventTime.Size())) - n2, err := m.EventTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i = encodeVarintGenerated(dAtA, i, uint64(m.DeprecatedCount)) + i-- + dAtA[i] = 0x78 + { + size, err := m.DeprecatedLastTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 - if m.Series != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Series.Size())) - n3, err := m.Series.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x72 + { + size, err := m.DeprecatedFirstTimestamp.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n3 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingController))) - i += copy(dAtA[i:], m.ReportingController) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingInstance))) - i += copy(dAtA[i:], m.ReportingInstance) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Action))) - i += copy(dAtA[i:], m.Action) - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Regarding.Size())) - n4, err := m.Regarding.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x6a + { + size, err := m.DeprecatedSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- + dAtA[i] = 0x62 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0x5a + i -= len(m.Note) + copy(dAtA[i:], m.Note) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Note))) + i-- + dAtA[i] = 0x52 if m.Related != nil { + { + size, err := m.Related.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Related.Size())) - n5, err := m.Related.MarshalTo(dAtA[i:]) + } + { + size, err := m.Regarding.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n5 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Note))) - i += copy(dAtA[i:], m.Note) - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DeprecatedSource.Size())) - n6, err := m.DeprecatedSource.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x42 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x3a + i -= len(m.Action) + copy(dAtA[i:], m.Action) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Action))) + i-- + dAtA[i] = 0x32 + i -= len(m.ReportingInstance) + copy(dAtA[i:], m.ReportingInstance) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingInstance))) + i-- + dAtA[i] = 0x2a + i -= len(m.ReportingController) + copy(dAtA[i:], m.ReportingController) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ReportingController))) + i-- + dAtA[i] = 0x22 + if m.Series != nil { + { + size, err := m.Series.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i += n6 - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DeprecatedFirstTimestamp.Size())) - n7, err := m.DeprecatedFirstTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.EventTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 - dAtA[i] = 0x72 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DeprecatedLastTimestamp.Size())) - n8, err := m.DeprecatedLastTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 - dAtA[i] = 0x78 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DeprecatedCount)) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *EventList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -194,37 +344,46 @@ } func (m *EventList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n9, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *EventSeries) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -232,56 +391,51 @@ } func (m *EventSeries) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventSeries) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastObservedTime.Size())) - n10, err := m.LastObservedTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 - dAtA[i] = 0x1a - i++ + i -= len(m.State) + copy(dAtA[i:], m.State) i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) - i += copy(dAtA[i:], m.State) - return i, nil + i-- + dAtA[i] = 0x1a + { + size, err := m.LastObservedTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *Event) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -321,6 +475,9 @@ } func (m *EventList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -335,6 +492,9 @@ } func (m *EventSeries) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Count)) @@ -346,14 +506,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -363,20 +516,20 @@ return "nil" } s := strings.Join([]string{`&Event{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `EventTime:` + strings.Replace(strings.Replace(this.EventTime.String(), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1), `&`, ``, 1) + `,`, - `Series:` + strings.Replace(fmt.Sprintf("%v", this.Series), "EventSeries", "EventSeries", 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `EventTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EventTime), "MicroTime", "v1.MicroTime", 1), `&`, ``, 1) + `,`, + `Series:` + strings.Replace(this.Series.String(), "EventSeries", "EventSeries", 1) + `,`, `ReportingController:` + fmt.Sprintf("%v", this.ReportingController) + `,`, `ReportingInstance:` + fmt.Sprintf("%v", this.ReportingInstance) + `,`, `Action:` + fmt.Sprintf("%v", this.Action) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Regarding:` + strings.Replace(strings.Replace(this.Regarding.String(), "ObjectReference", "k8s_io_api_core_v1.ObjectReference", 1), `&`, ``, 1) + `,`, - `Related:` + strings.Replace(fmt.Sprintf("%v", this.Related), "ObjectReference", "k8s_io_api_core_v1.ObjectReference", 1) + `,`, + `Regarding:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Regarding), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `Related:` + strings.Replace(fmt.Sprintf("%v", this.Related), "ObjectReference", "v11.ObjectReference", 1) + `,`, `Note:` + fmt.Sprintf("%v", this.Note) + `,`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `DeprecatedSource:` + strings.Replace(strings.Replace(this.DeprecatedSource.String(), "EventSource", "k8s_io_api_core_v1.EventSource", 1), `&`, ``, 1) + `,`, - `DeprecatedFirstTimestamp:` + strings.Replace(strings.Replace(this.DeprecatedFirstTimestamp.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `DeprecatedLastTimestamp:` + strings.Replace(strings.Replace(this.DeprecatedLastTimestamp.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `DeprecatedSource:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.DeprecatedSource), "EventSource", "v11.EventSource", 1), `&`, ``, 1) + `,`, + `DeprecatedFirstTimestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.DeprecatedFirstTimestamp), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `DeprecatedLastTimestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.DeprecatedLastTimestamp), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `DeprecatedCount:` + fmt.Sprintf("%v", this.DeprecatedCount) + `,`, `}`, }, "") @@ -386,9 +539,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Event{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Event", "Event", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&EventList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Event", "Event", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -399,7 +557,7 @@ } s := strings.Join([]string{`&EventSeries{`, `Count:` + fmt.Sprintf("%v", this.Count) + `,`, - `LastObservedTime:` + strings.Replace(strings.Replace(this.LastObservedTime.String(), "MicroTime", "k8s_io_apimachinery_pkg_apis_meta_v1.MicroTime", 1), `&`, ``, 1) + `,`, + `LastObservedTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastObservedTime), "MicroTime", "v1.MicroTime", 1), `&`, ``, 1) + `,`, `State:` + fmt.Sprintf("%v", this.State) + `,`, `}`, }, "") @@ -428,7 +586,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -456,7 +614,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -465,6 +623,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -486,7 +647,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -495,6 +656,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -516,7 +680,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -525,6 +689,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -549,7 +716,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -559,6 +726,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -578,7 +748,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -588,6 +758,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -607,7 +780,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -617,6 +790,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -636,7 +812,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -646,6 +822,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -665,7 +844,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -674,6 +853,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -695,7 +877,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -704,11 +886,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Related == nil { - m.Related = &k8s_io_api_core_v1.ObjectReference{} + m.Related = &v11.ObjectReference{} } if err := m.Related.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -728,7 +913,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -738,6 +923,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -757,7 +945,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -767,6 +955,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -786,7 +977,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -795,6 +986,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -816,7 +1010,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -825,6 +1019,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -846,7 +1043,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -855,6 +1052,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -876,7 +1076,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.DeprecatedCount |= (int32(b) & 0x7F) << shift + m.DeprecatedCount |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -890,6 +1090,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -917,7 +1120,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -945,7 +1148,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -954,6 +1157,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -975,7 +1181,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -984,6 +1190,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1001,6 +1210,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1028,7 +1240,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1056,7 +1268,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Count |= (int32(b) & 0x7F) << shift + m.Count |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -1075,7 +1287,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1084,6 +1296,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1105,7 +1320,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1115,6 +1330,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1129,6 +1347,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1195,10 +1416,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1227,6 +1451,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1245,62 +1472,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/events/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 801 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x16, 0x13, 0x4b, 0xb2, 0x56, 0x49, 0x2c, 0x6f, 0x0e, 0xde, 0xb8, 0x00, 0xa5, 0x2a, 0x40, - 0x20, 0x14, 0x08, 0x59, 0x07, 0x45, 0xdb, 0x6b, 0x18, 0xb9, 0x45, 0x02, 0xbb, 0x01, 0xd6, 0x3e, - 0x15, 0x3d, 0x64, 0x45, 0x4d, 0x68, 0x56, 0xe2, 0x2e, 0xb1, 0xbb, 0x12, 0xe0, 0x5b, 0x2f, 0x05, - 0x7a, 0xec, 0x33, 0xf4, 0x09, 0xfa, 0x18, 0x3e, 0xe6, 0x98, 0x93, 0x50, 0xb3, 0x6f, 0xd1, 0x53, - 0xc1, 0xe5, 0x4a, 0x94, 0xf5, 0x83, 0xa8, 0xe8, 0x4d, 0x9c, 0xf9, 0x7e, 0x66, 0x66, 0x47, 0x83, - 0x82, 0xd1, 0xb7, 0xca, 0x8b, 0x85, 0x3f, 0x9a, 0x0c, 0x40, 0x72, 0xd0, 0xa0, 0xfc, 0x29, 0xf0, - 0xa1, 0x90, 0xbe, 0x4d, 0xb0, 0x34, 0xf6, 0x61, 0x0a, 0x5c, 0x2b, 0x7f, 0x7a, 0x32, 0x00, 0xcd, - 0x4e, 0xfc, 0x08, 0x38, 0x48, 0xa6, 0x61, 0xe8, 0xa5, 0x52, 0x68, 0x81, 0x9f, 0x14, 0x50, 0x8f, - 0xa5, 0xb1, 0x57, 0x40, 0x3d, 0x0b, 0x3d, 0x7e, 0x1e, 0xc5, 0xfa, 0x6a, 0x32, 0xf0, 0x42, 0x91, - 0xf8, 0x91, 0x88, 0x84, 0x6f, 0x18, 0x83, 0xc9, 0x7b, 0xf3, 0x65, 0x3e, 0xcc, 0xaf, 0x42, 0xe9, - 0xb8, 0xbb, 0x64, 0x1a, 0x0a, 0x09, 0xfe, 0x74, 0xcd, 0xed, 0xf8, 0xab, 0x12, 0x93, 0xb0, 0xf0, - 0x2a, 0xe6, 0x20, 0xaf, 0xfd, 0x74, 0x14, 0xe5, 0x01, 0xe5, 0x27, 0xa0, 0xd9, 0x26, 0x96, 0xbf, - 0x8d, 0x25, 0x27, 0x5c, 0xc7, 0x09, 0xac, 0x11, 0xbe, 0xfe, 0x14, 0x41, 0x85, 0x57, 0x90, 0xb0, - 0x55, 0x5e, 0xf7, 0x8f, 0x06, 0xaa, 0x9e, 0xe6, 0x43, 0xc0, 0xef, 0xd0, 0x7e, 0x5e, 0xcd, 0x90, - 0x69, 0x46, 0x9c, 0x8e, 0xd3, 0x6b, 0xbe, 0xf8, 0xd2, 0x2b, 0x27, 0xb5, 0x10, 0xf5, 0xd2, 0x51, - 0x94, 0x07, 0x94, 0x97, 0xa3, 0xbd, 0xe9, 0x89, 0xf7, 0x76, 0xf0, 0x33, 0x84, 0xfa, 0x1c, 0x34, - 0x0b, 0xf0, 0xcd, 0xac, 0x5d, 0xc9, 0x66, 0x6d, 0x54, 0xc6, 0xe8, 0x42, 0x15, 0xbf, 0x43, 0x0d, - 0x33, 0xef, 0xcb, 0x38, 0x01, 0x72, 0xcf, 0x58, 0xf8, 0xbb, 0x59, 0x9c, 0xc7, 0xa1, 0x14, 0x39, - 0x2d, 0x38, 0xb4, 0x0e, 0x8d, 0xd3, 0xb9, 0x12, 0x2d, 0x45, 0xf1, 0x1b, 0x54, 0x53, 0x20, 0x63, - 0x50, 0xe4, 0xbe, 0x91, 0x7f, 0xe6, 0x6d, 0x7d, 0x6b, 0xcf, 0x08, 0x5c, 0x18, 0x74, 0x80, 0xb2, - 0x59, 0xbb, 0x56, 0xfc, 0xa6, 0x56, 0x01, 0x9f, 0xa3, 0xc7, 0x12, 0x52, 0x21, 0x75, 0xcc, 0xa3, - 0x57, 0x82, 0x6b, 0x29, 0xc6, 0x63, 0x90, 0x64, 0xaf, 0xe3, 0xf4, 0x1a, 0xc1, 0x67, 0xb6, 0x8c, - 0xc7, 0x74, 0x1d, 0x42, 0x37, 0xf1, 0xf0, 0xf7, 0xe8, 0x70, 0x11, 0x7e, 0xcd, 0x95, 0x66, 0x3c, - 0x04, 0x52, 0x35, 0x62, 0x4f, 0xac, 0xd8, 0x21, 0x5d, 0x05, 0xd0, 0x75, 0x0e, 0x7e, 0x86, 0x6a, - 0x2c, 0xd4, 0xb1, 0xe0, 0xa4, 0x66, 0xd8, 0x8f, 0x2c, 0xbb, 0xf6, 0xd2, 0x44, 0xa9, 0xcd, 0xe6, - 0x38, 0x09, 0x4c, 0x09, 0x4e, 0xea, 0x77, 0x71, 0xd4, 0x44, 0xa9, 0xcd, 0xe2, 0x4b, 0xd4, 0x90, - 0x10, 0x31, 0x39, 0x8c, 0x79, 0x44, 0xf6, 0xcd, 0xd8, 0x9e, 0x2e, 0x8f, 0x2d, 0x5f, 0xec, 0xf2, - 0x99, 0x29, 0xbc, 0x07, 0x09, 0x3c, 0x5c, 0x7a, 0x09, 0x3a, 0x67, 0xd3, 0x52, 0x08, 0xbf, 0x41, - 0x75, 0x09, 0xe3, 0x7c, 0xd1, 0x48, 0x63, 0x77, 0xcd, 0x66, 0x36, 0x6b, 0xd7, 0x69, 0xc1, 0xa3, - 0x73, 0x01, 0xdc, 0x41, 0x7b, 0x5c, 0x68, 0x20, 0xc8, 0xf4, 0xf1, 0xc0, 0xfa, 0xee, 0xfd, 0x20, - 0x34, 0x50, 0x93, 0xc9, 0x11, 0xfa, 0x3a, 0x05, 0xd2, 0xbc, 0x8b, 0xb8, 0xbc, 0x4e, 0x81, 0x9a, - 0x0c, 0x06, 0xd4, 0x1a, 0x42, 0x2a, 0x21, 0xcc, 0x15, 0x2f, 0xc4, 0x44, 0x86, 0x40, 0x1e, 0x98, - 0xc2, 0xda, 0x9b, 0x0a, 0x2b, 0x96, 0xc3, 0xc0, 0x02, 0x62, 0xe5, 0x5a, 0xfd, 0x15, 0x01, 0xba, - 0x26, 0x89, 0x7f, 0x73, 0x10, 0x29, 0x83, 0xdf, 0xc5, 0x52, 0x99, 0xc5, 0x54, 0x9a, 0x25, 0x29, - 0x79, 0x68, 0xfc, 0xbe, 0xd8, 0x6d, 0xe5, 0xcd, 0xb6, 0x77, 0xac, 0x35, 0xe9, 0x6f, 0xd1, 0xa4, - 0x5b, 0xdd, 0xf0, 0xaf, 0x0e, 0x3a, 0x2a, 0x93, 0x67, 0x6c, 0xb9, 0x92, 0x47, 0xff, 0xb9, 0x92, - 0xb6, 0xad, 0xe4, 0xa8, 0xbf, 0x59, 0x92, 0x6e, 0xf3, 0xc2, 0x2f, 0xd1, 0x41, 0x99, 0x7a, 0x25, - 0x26, 0x5c, 0x93, 0x83, 0x8e, 0xd3, 0xab, 0x06, 0x47, 0x56, 0xf2, 0xa0, 0x7f, 0x37, 0x4d, 0x57, - 0xf1, 0xdd, 0x3f, 0x1d, 0x54, 0xfc, 0xdf, 0xcf, 0x62, 0xa5, 0xf1, 0x4f, 0x6b, 0x87, 0xca, 0xdb, - 0xad, 0x91, 0x9c, 0x6d, 0xce, 0x54, 0xcb, 0x3a, 0xef, 0xcf, 0x23, 0x4b, 0x47, 0xea, 0x14, 0x55, - 0x63, 0x0d, 0x89, 0x22, 0xf7, 0x3a, 0xf7, 0x7b, 0xcd, 0x17, 0x9d, 0x4f, 0x5d, 0x90, 0xe0, 0xa1, - 0x15, 0xab, 0xbe, 0xce, 0x69, 0xb4, 0x60, 0x77, 0x33, 0x07, 0x35, 0x97, 0x2e, 0x0c, 0x7e, 0x8a, - 0xaa, 0xa1, 0xe9, 0xdd, 0x31, 0xbd, 0x2f, 0x48, 0x45, 0xc7, 0x45, 0x0e, 0x4f, 0x50, 0x6b, 0xcc, - 0x94, 0x7e, 0x3b, 0x50, 0x20, 0xa7, 0x30, 0xfc, 0x3f, 0x77, 0x72, 0xb1, 0xb4, 0x67, 0x2b, 0x82, - 0x74, 0xcd, 0x02, 0x7f, 0x83, 0xaa, 0x4a, 0x33, 0x0d, 0xe6, 0x68, 0x36, 0x82, 0xcf, 0xe7, 0xb5, - 0x5d, 0xe4, 0xc1, 0x7f, 0x66, 0xed, 0xd6, 0x52, 0x23, 0x26, 0x46, 0x0b, 0x7c, 0xf0, 0xfc, 0xe6, - 0xd6, 0xad, 0x7c, 0xb8, 0x75, 0x2b, 0x1f, 0x6f, 0xdd, 0xca, 0x2f, 0x99, 0xeb, 0xdc, 0x64, 0xae, - 0xf3, 0x21, 0x73, 0x9d, 0x8f, 0x99, 0xeb, 0xfc, 0x95, 0xb9, 0xce, 0xef, 0x7f, 0xbb, 0x95, 0x1f, - 0xeb, 0x76, 0x5e, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x25, 0x9b, 0x14, 0x4d, 0xbd, 0x07, 0x00, - 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -98,7 +98,7 @@ // EventList is a list of Event objects. message EventList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -116,6 +116,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastObservedTime = 2; // Information whether this series is ongoing or finished. + // Deprecated. Planned removal for 1.18 optional string state = 3; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -43,11 +43,11 @@ // ID of the controller instance, e.g. `kubelet-xyzf`. // +optional - ReportingInstance string `json:"reportingInstance,omitemtpy" protobuf:"bytes,5,opt,name=reportingInstance"` + ReportingInstance string `json:"reportingInstance,omitempty" protobuf:"bytes,5,opt,name=reportingInstance"` // What action was taken/failed regarding to the regarding object. // +optional - Action string `json:"action,omitemtpy" protobuf:"bytes,6,name=action"` + Action string `json:"action,omitempty" protobuf:"bytes,6,name=action"` // Why the action was taken. Reason string `json:"reason,omitempty" protobuf:"bytes,7,name=reason"` @@ -96,6 +96,7 @@ // Time when last Event from the series was seen before last heartbeat. LastObservedTime metav1.MicroTime `json:"lastObservedTime" protobuf:"bytes,2,opt,name=lastObservedTime"` // Information whether this series is ongoing or finished. + // Deprecated. Planned removal for 1.18 State EventSeriesState `json:"state" protobuf:"bytes,3,opt,name=state"` } @@ -113,7 +114,7 @@ type EventList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -51,7 +51,7 @@ var map_EventList = map[string]string{ "": "EventList is a list of Event objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is a list of schema objects.", } @@ -63,7 +63,7 @@ "": "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", "count": "Number of occurrences in this series up to the last heartbeat time", "lastObservedTime": "Time when last Event from the series was seen before last heartbeat.", - "state": "Information whether this series is ongoing or finished.", + "state": "Information whether this series is ongoing or finished. Deprecated. Planned removal for 1.18", } func (EventSeries) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/events/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,22 +33,14 @@ in.EventTime.DeepCopyInto(&out.EventTime) if in.Series != nil { in, out := &in.Series, &out.Series - if *in == nil { - *out = nil - } else { - *out = new(EventSeries) - (*in).DeepCopyInto(*out) - } + *out = new(EventSeries) + (*in).DeepCopyInto(*out) } out.Regarding = in.Regarding if in.Related != nil { in, out := &in.Related, &out.Related - if *in == nil { - *out = nil - } else { - *out = new(v1.ObjectReference) - **out = **in - } + *out = new(v1.ObjectReference) + **out = **in } out.DeprecatedSource = in.DeprecatedSource in.DeprecatedFirstTimestamp.DeepCopyInto(&out.DeprecatedFirstTimestamp) @@ -78,7 +70,7 @@ func (in *EventList) DeepCopyInto(out *EventList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Event, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,7 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/extensions/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,94 +14,29 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/extensions/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/extensions/v1beta1/generated.proto - - It has these top-level messages: - AllowedFlexVolume - AllowedHostPath - CustomMetricCurrentStatus - CustomMetricCurrentStatusList - CustomMetricTarget - CustomMetricTargetList - DaemonSet - DaemonSetCondition - DaemonSetList - DaemonSetSpec - DaemonSetStatus - DaemonSetUpdateStrategy - Deployment - DeploymentCondition - DeploymentList - DeploymentRollback - DeploymentSpec - DeploymentStatus - DeploymentStrategy - FSGroupStrategyOptions - HTTPIngressPath - HTTPIngressRuleValue - HostPortRange - IDRange - IPBlock - Ingress - IngressBackend - IngressList - IngressRule - IngressRuleValue - IngressSpec - IngressStatus - IngressTLS - NetworkPolicy - NetworkPolicyEgressRule - NetworkPolicyIngressRule - NetworkPolicyList - NetworkPolicyPeer - NetworkPolicyPort - NetworkPolicySpec - PodSecurityPolicy - PodSecurityPolicyList - PodSecurityPolicySpec - ReplicaSet - ReplicaSetCondition - ReplicaSetList - ReplicaSetSpec - ReplicaSetStatus - ReplicationControllerDummy - RollbackConfig - RollingUpdateDaemonSet - RollingUpdateDeployment - RunAsUserStrategyOptions - SELinuxStrategyOptions - Scale - ScaleSpec - ScaleStatus - SupplementalGroupsStrategyOptions -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - -import strings "strings" -import reflect "reflect" - -import io "io" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -114,263 +49,1606 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } -func (*AllowedFlexVolume) ProtoMessage() {} -func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (m *AllowedCSIDriver) Reset() { *m = AllowedCSIDriver{} } +func (*AllowedCSIDriver) ProtoMessage() {} +func (*AllowedCSIDriver) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{0} +} +func (m *AllowedCSIDriver) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedCSIDriver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedCSIDriver) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedCSIDriver.Merge(m, src) +} +func (m *AllowedCSIDriver) XXX_Size() int { + return m.Size() +} +func (m *AllowedCSIDriver) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedCSIDriver.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowedCSIDriver proto.InternalMessageInfo + +func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } +func (*AllowedFlexVolume) ProtoMessage() {} +func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{1} +} +func (m *AllowedFlexVolume) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedFlexVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedFlexVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedFlexVolume.Merge(m, src) +} +func (m *AllowedFlexVolume) XXX_Size() int { + return m.Size() +} +func (m *AllowedFlexVolume) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedFlexVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowedFlexVolume proto.InternalMessageInfo -func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } -func (*AllowedHostPath) ProtoMessage() {} -func (*AllowedHostPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } +func (*AllowedHostPath) ProtoMessage() {} +func (*AllowedHostPath) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{2} +} +func (m *AllowedHostPath) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedHostPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedHostPath) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedHostPath.Merge(m, src) +} +func (m *AllowedHostPath) XXX_Size() int { + return m.Size() +} +func (m *AllowedHostPath) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedHostPath.DiscardUnknown(m) +} -func (m *CustomMetricCurrentStatus) Reset() { *m = CustomMetricCurrentStatus{} } -func (*CustomMetricCurrentStatus) ProtoMessage() {} -func (*CustomMetricCurrentStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{2} +var xxx_messageInfo_AllowedHostPath proto.InternalMessageInfo + +func (m *DaemonSet) Reset() { *m = DaemonSet{} } +func (*DaemonSet) ProtoMessage() {} +func (*DaemonSet) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{3} +} +func (m *DaemonSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSet.Merge(m, src) +} +func (m *DaemonSet) XXX_Size() int { + return m.Size() +} +func (m *DaemonSet) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSet.DiscardUnknown(m) } -func (m *CustomMetricCurrentStatusList) Reset() { *m = CustomMetricCurrentStatusList{} } -func (*CustomMetricCurrentStatusList) ProtoMessage() {} -func (*CustomMetricCurrentStatusList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{3} +var xxx_messageInfo_DaemonSet proto.InternalMessageInfo + +func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } +func (*DaemonSetCondition) ProtoMessage() {} +func (*DaemonSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{4} +} +func (m *DaemonSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetCondition.Merge(m, src) +} +func (m *DaemonSetCondition) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetCondition.DiscardUnknown(m) } -func (m *CustomMetricTarget) Reset() { *m = CustomMetricTarget{} } -func (*CustomMetricTarget) ProtoMessage() {} -func (*CustomMetricTarget) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +var xxx_messageInfo_DaemonSetCondition proto.InternalMessageInfo -func (m *CustomMetricTargetList) Reset() { *m = CustomMetricTargetList{} } -func (*CustomMetricTargetList) ProtoMessage() {} -func (*CustomMetricTargetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } +func (*DaemonSetList) ProtoMessage() {} +func (*DaemonSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{5} +} +func (m *DaemonSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetList.Merge(m, src) +} +func (m *DaemonSetList) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetList) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetList.DiscardUnknown(m) +} -func (m *DaemonSet) Reset() { *m = DaemonSet{} } -func (*DaemonSet) ProtoMessage() {} -func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +var xxx_messageInfo_DaemonSetList proto.InternalMessageInfo -func (m *DaemonSetCondition) Reset() { *m = DaemonSetCondition{} } -func (*DaemonSetCondition) ProtoMessage() {} -func (*DaemonSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } +func (*DaemonSetSpec) ProtoMessage() {} +func (*DaemonSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{6} +} +func (m *DaemonSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetSpec.Merge(m, src) +} +func (m *DaemonSetSpec) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetSpec.DiscardUnknown(m) +} -func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } -func (*DaemonSetList) ProtoMessage() {} -func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +var xxx_messageInfo_DaemonSetSpec proto.InternalMessageInfo -func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } -func (*DaemonSetSpec) ProtoMessage() {} -func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } +func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } +func (*DaemonSetStatus) ProtoMessage() {} +func (*DaemonSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{7} +} +func (m *DaemonSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetStatus.Merge(m, src) +} +func (m *DaemonSetStatus) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetStatus.DiscardUnknown(m) +} -func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } -func (*DaemonSetStatus) ProtoMessage() {} -func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +var xxx_messageInfo_DaemonSetStatus proto.InternalMessageInfo func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } func (*DaemonSetUpdateStrategy) ProtoMessage() {} func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{11} + return fileDescriptor_cdc93917efc28165, []int{8} +} +func (m *DaemonSetUpdateStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DaemonSetUpdateStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DaemonSetUpdateStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DaemonSetUpdateStrategy.Merge(m, src) +} +func (m *DaemonSetUpdateStrategy) XXX_Size() int { + return m.Size() +} +func (m *DaemonSetUpdateStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DaemonSetUpdateStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DaemonSetUpdateStrategy proto.InternalMessageInfo + +func (m *Deployment) Reset() { *m = Deployment{} } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{9} +} +func (m *Deployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Deployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Deployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_Deployment.Merge(m, src) +} +func (m *Deployment) XXX_Size() int { + return m.Size() +} +func (m *Deployment) XXX_DiscardUnknown() { + xxx_messageInfo_Deployment.DiscardUnknown(m) +} + +var xxx_messageInfo_Deployment proto.InternalMessageInfo + +func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } +func (*DeploymentCondition) ProtoMessage() {} +func (*DeploymentCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{10} +} +func (m *DeploymentCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCondition.Merge(m, src) +} +func (m *DeploymentCondition) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCondition.DiscardUnknown(m) } -func (m *Deployment) Reset() { *m = Deployment{} } -func (*Deployment) ProtoMessage() {} -func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +var xxx_messageInfo_DeploymentCondition proto.InternalMessageInfo -func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } -func (*DeploymentCondition) ProtoMessage() {} -func (*DeploymentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +func (m *DeploymentList) Reset() { *m = DeploymentList{} } +func (*DeploymentList) ProtoMessage() {} +func (*DeploymentList) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{11} +} +func (m *DeploymentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentList.Merge(m, src) +} +func (m *DeploymentList) XXX_Size() int { + return m.Size() +} +func (m *DeploymentList) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentList.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentList proto.InternalMessageInfo + +func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } +func (*DeploymentRollback) ProtoMessage() {} +func (*DeploymentRollback) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{12} +} +func (m *DeploymentRollback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentRollback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentRollback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentRollback.Merge(m, src) +} +func (m *DeploymentRollback) XXX_Size() int { + return m.Size() +} +func (m *DeploymentRollback) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentRollback.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentRollback proto.InternalMessageInfo + +func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } +func (*DeploymentSpec) ProtoMessage() {} +func (*DeploymentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{13} +} +func (m *DeploymentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentSpec.Merge(m, src) +} +func (m *DeploymentSpec) XXX_Size() int { + return m.Size() +} +func (m *DeploymentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentSpec proto.InternalMessageInfo + +func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } +func (*DeploymentStatus) ProtoMessage() {} +func (*DeploymentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{14} +} +func (m *DeploymentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStatus.Merge(m, src) +} +func (m *DeploymentStatus) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStatus proto.InternalMessageInfo + +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{15} +} +func (m *DeploymentStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStrategy.Merge(m, src) +} +func (m *DeploymentStrategy) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStrategy proto.InternalMessageInfo + +func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } +func (*FSGroupStrategyOptions) ProtoMessage() {} +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{16} +} +func (m *FSGroupStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FSGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FSGroupStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FSGroupStrategyOptions.Merge(m, src) +} +func (m *FSGroupStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *FSGroupStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_FSGroupStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_FSGroupStrategyOptions proto.InternalMessageInfo + +func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } +func (*HTTPIngressPath) ProtoMessage() {} +func (*HTTPIngressPath) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{17} +} +func (m *HTTPIngressPath) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HTTPIngressPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HTTPIngressPath) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTTPIngressPath.Merge(m, src) +} +func (m *HTTPIngressPath) XXX_Size() int { + return m.Size() +} +func (m *HTTPIngressPath) XXX_DiscardUnknown() { + xxx_messageInfo_HTTPIngressPath.DiscardUnknown(m) +} + +var xxx_messageInfo_HTTPIngressPath proto.InternalMessageInfo -func (m *DeploymentList) Reset() { *m = DeploymentList{} } -func (*DeploymentList) ProtoMessage() {} -func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } +func (*HTTPIngressRuleValue) ProtoMessage() {} +func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{18} +} +func (m *HTTPIngressRuleValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HTTPIngressRuleValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HTTPIngressRuleValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTTPIngressRuleValue.Merge(m, src) +} +func (m *HTTPIngressRuleValue) XXX_Size() int { + return m.Size() +} +func (m *HTTPIngressRuleValue) XXX_DiscardUnknown() { + xxx_messageInfo_HTTPIngressRuleValue.DiscardUnknown(m) +} -func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } -func (*DeploymentRollback) ProtoMessage() {} -func (*DeploymentRollback) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +var xxx_messageInfo_HTTPIngressRuleValue proto.InternalMessageInfo -func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } -func (*DeploymentSpec) ProtoMessage() {} -func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +func (m *HostPortRange) Reset() { *m = HostPortRange{} } +func (*HostPortRange) ProtoMessage() {} +func (*HostPortRange) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{19} +} +func (m *HostPortRange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostPortRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HostPortRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostPortRange.Merge(m, src) +} +func (m *HostPortRange) XXX_Size() int { + return m.Size() +} +func (m *HostPortRange) XXX_DiscardUnknown() { + xxx_messageInfo_HostPortRange.DiscardUnknown(m) +} -func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } -func (*DeploymentStatus) ProtoMessage() {} -func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +var xxx_messageInfo_HostPortRange proto.InternalMessageInfo -func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } -func (*DeploymentStrategy) ProtoMessage() {} -func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } +func (m *IDRange) Reset() { *m = IDRange{} } +func (*IDRange) ProtoMessage() {} +func (*IDRange) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{20} +} +func (m *IDRange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IDRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IDRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_IDRange.Merge(m, src) +} +func (m *IDRange) XXX_Size() int { + return m.Size() +} +func (m *IDRange) XXX_DiscardUnknown() { + xxx_messageInfo_IDRange.DiscardUnknown(m) +} -func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } -func (*FSGroupStrategyOptions) ProtoMessage() {} -func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +var xxx_messageInfo_IDRange proto.InternalMessageInfo -func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } -func (*HTTPIngressPath) ProtoMessage() {} -func (*HTTPIngressPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (m *IPBlock) Reset() { *m = IPBlock{} } +func (*IPBlock) ProtoMessage() {} +func (*IPBlock) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{21} +} +func (m *IPBlock) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IPBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IPBlock) XXX_Merge(src proto.Message) { + xxx_messageInfo_IPBlock.Merge(m, src) +} +func (m *IPBlock) XXX_Size() int { + return m.Size() +} +func (m *IPBlock) XXX_DiscardUnknown() { + xxx_messageInfo_IPBlock.DiscardUnknown(m) +} -func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } -func (*HTTPIngressRuleValue) ProtoMessage() {} -func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +var xxx_messageInfo_IPBlock proto.InternalMessageInfo -func (m *HostPortRange) Reset() { *m = HostPortRange{} } -func (*HostPortRange) ProtoMessage() {} -func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +func (m *Ingress) Reset() { *m = Ingress{} } +func (*Ingress) ProtoMessage() {} +func (*Ingress) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{22} +} +func (m *Ingress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Ingress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Ingress) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ingress.Merge(m, src) +} +func (m *Ingress) XXX_Size() int { + return m.Size() +} +func (m *Ingress) XXX_DiscardUnknown() { + xxx_messageInfo_Ingress.DiscardUnknown(m) +} + +var xxx_messageInfo_Ingress proto.InternalMessageInfo + +func (m *IngressBackend) Reset() { *m = IngressBackend{} } +func (*IngressBackend) ProtoMessage() {} +func (*IngressBackend) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{23} +} +func (m *IngressBackend) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressBackend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressBackend) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressBackend.Merge(m, src) +} +func (m *IngressBackend) XXX_Size() int { + return m.Size() +} +func (m *IngressBackend) XXX_DiscardUnknown() { + xxx_messageInfo_IngressBackend.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressBackend proto.InternalMessageInfo + +func (m *IngressList) Reset() { *m = IngressList{} } +func (*IngressList) ProtoMessage() {} +func (*IngressList) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{24} +} +func (m *IngressList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressList) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressList.Merge(m, src) +} +func (m *IngressList) XXX_Size() int { + return m.Size() +} +func (m *IngressList) XXX_DiscardUnknown() { + xxx_messageInfo_IngressList.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressList proto.InternalMessageInfo + +func (m *IngressRule) Reset() { *m = IngressRule{} } +func (*IngressRule) ProtoMessage() {} +func (*IngressRule) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{25} +} +func (m *IngressRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressRule.Merge(m, src) +} +func (m *IngressRule) XXX_Size() int { + return m.Size() +} +func (m *IngressRule) XXX_DiscardUnknown() { + xxx_messageInfo_IngressRule.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressRule proto.InternalMessageInfo + +func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } +func (*IngressRuleValue) ProtoMessage() {} +func (*IngressRuleValue) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{26} +} +func (m *IngressRuleValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressRuleValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressRuleValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressRuleValue.Merge(m, src) +} +func (m *IngressRuleValue) XXX_Size() int { + return m.Size() +} +func (m *IngressRuleValue) XXX_DiscardUnknown() { + xxx_messageInfo_IngressRuleValue.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressRuleValue proto.InternalMessageInfo + +func (m *IngressSpec) Reset() { *m = IngressSpec{} } +func (*IngressSpec) ProtoMessage() {} +func (*IngressSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{27} +} +func (m *IngressSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressSpec.Merge(m, src) +} +func (m *IngressSpec) XXX_Size() int { + return m.Size() +} +func (m *IngressSpec) XXX_DiscardUnknown() { + xxx_messageInfo_IngressSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressSpec proto.InternalMessageInfo + +func (m *IngressStatus) Reset() { *m = IngressStatus{} } +func (*IngressStatus) ProtoMessage() {} +func (*IngressStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{28} +} +func (m *IngressStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressStatus.Merge(m, src) +} +func (m *IngressStatus) XXX_Size() int { + return m.Size() +} +func (m *IngressStatus) XXX_DiscardUnknown() { + xxx_messageInfo_IngressStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressStatus proto.InternalMessageInfo + +func (m *IngressTLS) Reset() { *m = IngressTLS{} } +func (*IngressTLS) ProtoMessage() {} +func (*IngressTLS) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{29} +} +func (m *IngressTLS) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressTLS) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressTLS) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressTLS.Merge(m, src) +} +func (m *IngressTLS) XXX_Size() int { + return m.Size() +} +func (m *IngressTLS) XXX_DiscardUnknown() { + xxx_messageInfo_IngressTLS.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressTLS proto.InternalMessageInfo + +func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } +func (*NetworkPolicy) ProtoMessage() {} +func (*NetworkPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{30} +} +func (m *NetworkPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicy.Merge(m, src) +} +func (m *NetworkPolicy) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicy proto.InternalMessageInfo + +func (m *NetworkPolicyEgressRule) Reset() { *m = NetworkPolicyEgressRule{} } +func (*NetworkPolicyEgressRule) ProtoMessage() {} +func (*NetworkPolicyEgressRule) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{31} +} +func (m *NetworkPolicyEgressRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyEgressRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyEgressRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyEgressRule.Merge(m, src) +} +func (m *NetworkPolicyEgressRule) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyEgressRule) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyEgressRule.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyEgressRule proto.InternalMessageInfo + +func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } +func (*NetworkPolicyIngressRule) ProtoMessage() {} +func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{32} +} +func (m *NetworkPolicyIngressRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyIngressRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyIngressRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyIngressRule.Merge(m, src) +} +func (m *NetworkPolicyIngressRule) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyIngressRule) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyIngressRule.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyIngressRule proto.InternalMessageInfo + +func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } +func (*NetworkPolicyList) ProtoMessage() {} +func (*NetworkPolicyList) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{33} +} +func (m *NetworkPolicyList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyList.Merge(m, src) +} +func (m *NetworkPolicyList) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyList) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyList.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyList proto.InternalMessageInfo + +func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } +func (*NetworkPolicyPeer) ProtoMessage() {} +func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{34} +} +func (m *NetworkPolicyPeer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyPeer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyPeer) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyPeer.Merge(m, src) +} +func (m *NetworkPolicyPeer) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyPeer) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyPeer.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyPeer proto.InternalMessageInfo + +func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } +func (*NetworkPolicyPort) ProtoMessage() {} +func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{35} +} +func (m *NetworkPolicyPort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyPort) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyPort.Merge(m, src) +} +func (m *NetworkPolicyPort) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyPort) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyPort.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyPort proto.InternalMessageInfo + +func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } +func (*NetworkPolicySpec) ProtoMessage() {} +func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{36} +} +func (m *NetworkPolicySpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicySpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicySpec.Merge(m, src) +} +func (m *NetworkPolicySpec) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicySpec) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicySpec.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicySpec proto.InternalMessageInfo + +func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } +func (*PodSecurityPolicy) ProtoMessage() {} +func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{37} +} +func (m *PodSecurityPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicy.Merge(m, src) +} +func (m *PodSecurityPolicy) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicy proto.InternalMessageInfo + +func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } +func (*PodSecurityPolicyList) ProtoMessage() {} +func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{38} +} +func (m *PodSecurityPolicyList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicyList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicyList.Merge(m, src) +} +func (m *PodSecurityPolicyList) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicyList) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicyList.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicyList proto.InternalMessageInfo + +func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } +func (*PodSecurityPolicySpec) ProtoMessage() {} +func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{39} +} +func (m *PodSecurityPolicySpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySpec.Merge(m, src) +} +func (m *PodSecurityPolicySpec) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicySpec proto.InternalMessageInfo + +func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } +func (*ReplicaSet) ProtoMessage() {} +func (*ReplicaSet) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{40} +} +func (m *ReplicaSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSet.Merge(m, src) +} +func (m *ReplicaSet) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSet) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSet.DiscardUnknown(m) +} + +var xxx_messageInfo_ReplicaSet proto.InternalMessageInfo + +func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } +func (*ReplicaSetCondition) ProtoMessage() {} +func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{41} +} +func (m *ReplicaSetCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetCondition.Merge(m, src) +} +func (m *ReplicaSetCondition) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetCondition) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetCondition.DiscardUnknown(m) +} -func (m *IDRange) Reset() { *m = IDRange{} } -func (*IDRange) ProtoMessage() {} -func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +var xxx_messageInfo_ReplicaSetCondition proto.InternalMessageInfo -func (m *IPBlock) Reset() { *m = IPBlock{} } -func (*IPBlock) ProtoMessage() {} -func (*IPBlock) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } +func (*ReplicaSetList) ProtoMessage() {} +func (*ReplicaSetList) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{42} +} +func (m *ReplicaSetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetList.Merge(m, src) +} +func (m *ReplicaSetList) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetList) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetList.DiscardUnknown(m) +} -func (m *Ingress) Reset() { *m = Ingress{} } -func (*Ingress) ProtoMessage() {} -func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +var xxx_messageInfo_ReplicaSetList proto.InternalMessageInfo -func (m *IngressBackend) Reset() { *m = IngressBackend{} } -func (*IngressBackend) ProtoMessage() {} -func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } +func (*ReplicaSetSpec) ProtoMessage() {} +func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{43} +} +func (m *ReplicaSetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetSpec.Merge(m, src) +} +func (m *ReplicaSetSpec) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetSpec.DiscardUnknown(m) +} -func (m *IngressList) Reset() { *m = IngressList{} } -func (*IngressList) ProtoMessage() {} -func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +var xxx_messageInfo_ReplicaSetSpec proto.InternalMessageInfo -func (m *IngressRule) Reset() { *m = IngressRule{} } -func (*IngressRule) ProtoMessage() {} -func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } +func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } +func (*ReplicaSetStatus) ProtoMessage() {} +func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{44} +} +func (m *ReplicaSetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicaSetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicaSetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicaSetStatus.Merge(m, src) +} +func (m *ReplicaSetStatus) XXX_Size() int { + return m.Size() +} +func (m *ReplicaSetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicaSetStatus.DiscardUnknown(m) +} -func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } -func (*IngressRuleValue) ProtoMessage() {} -func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +var xxx_messageInfo_ReplicaSetStatus proto.InternalMessageInfo -func (m *IngressSpec) Reset() { *m = IngressSpec{} } -func (*IngressSpec) ProtoMessage() {} -func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } +func (m *ReplicationControllerDummy) Reset() { *m = ReplicationControllerDummy{} } +func (*ReplicationControllerDummy) ProtoMessage() {} +func (*ReplicationControllerDummy) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{45} +} +func (m *ReplicationControllerDummy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReplicationControllerDummy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ReplicationControllerDummy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReplicationControllerDummy.Merge(m, src) +} +func (m *ReplicationControllerDummy) XXX_Size() int { + return m.Size() +} +func (m *ReplicationControllerDummy) XXX_DiscardUnknown() { + xxx_messageInfo_ReplicationControllerDummy.DiscardUnknown(m) +} -func (m *IngressStatus) Reset() { *m = IngressStatus{} } -func (*IngressStatus) ProtoMessage() {} -func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } +var xxx_messageInfo_ReplicationControllerDummy proto.InternalMessageInfo -func (m *IngressTLS) Reset() { *m = IngressTLS{} } -func (*IngressTLS) ProtoMessage() {} -func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } +func (*RollbackConfig) ProtoMessage() {} +func (*RollbackConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{46} +} +func (m *RollbackConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollbackConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollbackConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollbackConfig.Merge(m, src) +} +func (m *RollbackConfig) XXX_Size() int { + return m.Size() +} +func (m *RollbackConfig) XXX_DiscardUnknown() { + xxx_messageInfo_RollbackConfig.DiscardUnknown(m) +} -func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } -func (*NetworkPolicy) ProtoMessage() {} -func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +var xxx_messageInfo_RollbackConfig proto.InternalMessageInfo -func (m *NetworkPolicyEgressRule) Reset() { *m = NetworkPolicyEgressRule{} } -func (*NetworkPolicyEgressRule) ProtoMessage() {} -func (*NetworkPolicyEgressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{34} +func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } +func (*RollingUpdateDaemonSet) ProtoMessage() {} +func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{47} } - -func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } -func (*NetworkPolicyIngressRule) ProtoMessage() {} -func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{35} +func (m *RollingUpdateDaemonSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateDaemonSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDaemonSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDaemonSet.Merge(m, src) +} +func (m *RollingUpdateDaemonSet) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateDaemonSet) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDaemonSet.DiscardUnknown(m) } -func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } -func (*NetworkPolicyList) ProtoMessage() {} -func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } - -func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } -func (*NetworkPolicyPeer) ProtoMessage() {} -func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +var xxx_messageInfo_RollingUpdateDaemonSet proto.InternalMessageInfo -func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } -func (*NetworkPolicyPort) ProtoMessage() {} -func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } +func (*RollingUpdateDeployment) ProtoMessage() {} +func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{48} +} +func (m *RollingUpdateDeployment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingUpdateDeployment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingUpdateDeployment) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingUpdateDeployment.Merge(m, src) +} +func (m *RollingUpdateDeployment) XXX_Size() int { + return m.Size() +} +func (m *RollingUpdateDeployment) XXX_DiscardUnknown() { + xxx_messageInfo_RollingUpdateDeployment.DiscardUnknown(m) +} -func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } -func (*NetworkPolicySpec) ProtoMessage() {} -func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } +var xxx_messageInfo_RollingUpdateDeployment proto.InternalMessageInfo -func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } -func (*PodSecurityPolicy) ProtoMessage() {} -func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } +func (m *RunAsGroupStrategyOptions) Reset() { *m = RunAsGroupStrategyOptions{} } +func (*RunAsGroupStrategyOptions) ProtoMessage() {} +func (*RunAsGroupStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{49} +} +func (m *RunAsGroupStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RunAsGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RunAsGroupStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RunAsGroupStrategyOptions.Merge(m, src) +} +func (m *RunAsGroupStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RunAsGroupStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RunAsGroupStrategyOptions.DiscardUnknown(m) +} -func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } -func (*PodSecurityPolicyList) ProtoMessage() {} -func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } +var xxx_messageInfo_RunAsGroupStrategyOptions proto.InternalMessageInfo -func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } -func (*PodSecurityPolicySpec) ProtoMessage() {} -func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } +func (*RunAsUserStrategyOptions) ProtoMessage() {} +func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{50} +} +func (m *RunAsUserStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RunAsUserStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RunAsUserStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RunAsUserStrategyOptions.Merge(m, src) +} +func (m *RunAsUserStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RunAsUserStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RunAsUserStrategyOptions.DiscardUnknown(m) +} -func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } -func (*ReplicaSet) ProtoMessage() {} -func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +var xxx_messageInfo_RunAsUserStrategyOptions proto.InternalMessageInfo -func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } -func (*ReplicaSetCondition) ProtoMessage() {} -func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } +func (m *RuntimeClassStrategyOptions) Reset() { *m = RuntimeClassStrategyOptions{} } +func (*RuntimeClassStrategyOptions) ProtoMessage() {} +func (*RuntimeClassStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{51} +} +func (m *RuntimeClassStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClassStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClassStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClassStrategyOptions.Merge(m, src) +} +func (m *RuntimeClassStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClassStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClassStrategyOptions.DiscardUnknown(m) +} -func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } -func (*ReplicaSetList) ProtoMessage() {} -func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } +var xxx_messageInfo_RuntimeClassStrategyOptions proto.InternalMessageInfo -func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } -func (*ReplicaSetSpec) ProtoMessage() {} -func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } +func (*SELinuxStrategyOptions) ProtoMessage() {} +func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{52} +} +func (m *SELinuxStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SELinuxStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SELinuxStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SELinuxStrategyOptions.Merge(m, src) +} +func (m *SELinuxStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *SELinuxStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SELinuxStrategyOptions.DiscardUnknown(m) +} -func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } -func (*ReplicaSetStatus) ProtoMessage() {} -func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } +var xxx_messageInfo_SELinuxStrategyOptions proto.InternalMessageInfo -func (m *ReplicationControllerDummy) Reset() { *m = ReplicationControllerDummy{} } -func (*ReplicationControllerDummy) ProtoMessage() {} -func (*ReplicationControllerDummy) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{48} +func (m *Scale) Reset() { *m = Scale{} } +func (*Scale) ProtoMessage() {} +func (*Scale) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{53} +} +func (m *Scale) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Scale) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Scale) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scale.Merge(m, src) +} +func (m *Scale) XXX_Size() int { + return m.Size() +} +func (m *Scale) XXX_DiscardUnknown() { + xxx_messageInfo_Scale.DiscardUnknown(m) } -func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } -func (*RollbackConfig) ProtoMessage() {} -func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } - -func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } -func (*RollingUpdateDaemonSet) ProtoMessage() {} -func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } +var xxx_messageInfo_Scale proto.InternalMessageInfo -func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } -func (*RollingUpdateDeployment) ProtoMessage() {} -func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{51} +func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } +func (*ScaleSpec) ProtoMessage() {} +func (*ScaleSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{54} } - -func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } -func (*RunAsUserStrategyOptions) ProtoMessage() {} -func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{52} +func (m *ScaleSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleSpec.Merge(m, src) +} +func (m *ScaleSpec) XXX_Size() int { + return m.Size() +} +func (m *ScaleSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleSpec.DiscardUnknown(m) } -func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } -func (*SELinuxStrategyOptions) ProtoMessage() {} -func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } - -func (m *Scale) Reset() { *m = Scale{} } -func (*Scale) ProtoMessage() {} -func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } +var xxx_messageInfo_ScaleSpec proto.InternalMessageInfo -func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } -func (*ScaleSpec) ProtoMessage() {} -func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } +func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } +func (*ScaleStatus) ProtoMessage() {} +func (*ScaleStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{55} +} +func (m *ScaleStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScaleStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScaleStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScaleStatus.Merge(m, src) +} +func (m *ScaleStatus) XXX_Size() int { + return m.Size() +} +func (m *ScaleStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ScaleStatus.DiscardUnknown(m) +} -func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } -func (*ScaleStatus) ProtoMessage() {} -func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } +var xxx_messageInfo_ScaleStatus proto.InternalMessageInfo func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{57} + return fileDescriptor_cdc93917efc28165, []int{56} +} +func (m *SupplementalGroupsStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) } +func (m *SupplementalGroupsStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SupplementalGroupsStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SupplementalGroupsStrategyOptions.Merge(m, src) +} +func (m *SupplementalGroupsStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *SupplementalGroupsStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SupplementalGroupsStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_SupplementalGroupsStrategyOptions proto.InternalMessageInfo func init() { + proto.RegisterType((*AllowedCSIDriver)(nil), "k8s.io.api.extensions.v1beta1.AllowedCSIDriver") proto.RegisterType((*AllowedFlexVolume)(nil), "k8s.io.api.extensions.v1beta1.AllowedFlexVolume") proto.RegisterType((*AllowedHostPath)(nil), "k8s.io.api.extensions.v1beta1.AllowedHostPath") - proto.RegisterType((*CustomMetricCurrentStatus)(nil), "k8s.io.api.extensions.v1beta1.CustomMetricCurrentStatus") - proto.RegisterType((*CustomMetricCurrentStatusList)(nil), "k8s.io.api.extensions.v1beta1.CustomMetricCurrentStatusList") - proto.RegisterType((*CustomMetricTarget)(nil), "k8s.io.api.extensions.v1beta1.CustomMetricTarget") - proto.RegisterType((*CustomMetricTargetList)(nil), "k8s.io.api.extensions.v1beta1.CustomMetricTargetList") proto.RegisterType((*DaemonSet)(nil), "k8s.io.api.extensions.v1beta1.DaemonSet") proto.RegisterType((*DaemonSetCondition)(nil), "k8s.io.api.extensions.v1beta1.DaemonSetCondition") proto.RegisterType((*DaemonSetList)(nil), "k8s.io.api.extensions.v1beta1.DaemonSetList") @@ -381,6 +1659,7 @@ proto.RegisterType((*DeploymentCondition)(nil), "k8s.io.api.extensions.v1beta1.DeploymentCondition") proto.RegisterType((*DeploymentList)(nil), "k8s.io.api.extensions.v1beta1.DeploymentList") proto.RegisterType((*DeploymentRollback)(nil), "k8s.io.api.extensions.v1beta1.DeploymentRollback") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.extensions.v1beta1.DeploymentRollback.UpdatedAnnotationsEntry") proto.RegisterType((*DeploymentSpec)(nil), "k8s.io.api.extensions.v1beta1.DeploymentSpec") proto.RegisterType((*DeploymentStatus)(nil), "k8s.io.api.extensions.v1beta1.DeploymentStatus") proto.RegisterType((*DeploymentStrategy)(nil), "k8s.io.api.extensions.v1beta1.DeploymentStrategy") @@ -417,189 +1696,352 @@ proto.RegisterType((*RollbackConfig)(nil), "k8s.io.api.extensions.v1beta1.RollbackConfig") proto.RegisterType((*RollingUpdateDaemonSet)(nil), "k8s.io.api.extensions.v1beta1.RollingUpdateDaemonSet") proto.RegisterType((*RollingUpdateDeployment)(nil), "k8s.io.api.extensions.v1beta1.RollingUpdateDeployment") + proto.RegisterType((*RunAsGroupStrategyOptions)(nil), "k8s.io.api.extensions.v1beta1.RunAsGroupStrategyOptions") proto.RegisterType((*RunAsUserStrategyOptions)(nil), "k8s.io.api.extensions.v1beta1.RunAsUserStrategyOptions") + proto.RegisterType((*RuntimeClassStrategyOptions)(nil), "k8s.io.api.extensions.v1beta1.RuntimeClassStrategyOptions") proto.RegisterType((*SELinuxStrategyOptions)(nil), "k8s.io.api.extensions.v1beta1.SELinuxStrategyOptions") proto.RegisterType((*Scale)(nil), "k8s.io.api.extensions.v1beta1.Scale") proto.RegisterType((*ScaleSpec)(nil), "k8s.io.api.extensions.v1beta1.ScaleSpec") proto.RegisterType((*ScaleStatus)(nil), "k8s.io.api.extensions.v1beta1.ScaleStatus") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.extensions.v1beta1.ScaleStatus.SelectorEntry") proto.RegisterType((*SupplementalGroupsStrategyOptions)(nil), "k8s.io.api.extensions.v1beta1.SupplementalGroupsStrategyOptions") } -func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} -func (m *AllowedFlexVolume) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) - i += copy(dAtA[i:], m.Driver) - return i, nil +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/extensions/v1beta1/generated.proto", fileDescriptor_cdc93917efc28165) } -func (m *AllowedHostPath) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil +var fileDescriptor_cdc93917efc28165 = []byte{ + // 3684 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4f, 0x6c, 0x1b, 0x47, + 0x77, 0xf7, 0x92, 0x94, 0x48, 0x3d, 0xfd, 0x1f, 0xc9, 0x12, 0x3f, 0x3b, 0x16, 0xfd, 0x6d, 0x00, + 0xd7, 0x49, 0x6d, 0x32, 0x76, 0x6c, 0x7f, 0xae, 0x8d, 0x7e, 0x89, 0x28, 0x59, 0xb6, 0x52, 0xfd, + 0x61, 0x86, 0x92, 0x1b, 0x04, 0x4d, 0x9a, 0x15, 0x39, 0xa2, 0xd6, 0x5a, 0xee, 0x6e, 0x76, 0x87, + 0x8a, 0x08, 0xf4, 0xd0, 0x43, 0x51, 0xa0, 0x40, 0x8b, 0xf6, 0x92, 0xb6, 0xc7, 0x06, 0x05, 0x7a, + 0x6a, 0xd1, 0xde, 0xda, 0x43, 0x10, 0xa0, 0x40, 0x0a, 0x18, 0x45, 0x5a, 0xe4, 0xd6, 0x9c, 0x84, + 0x46, 0x39, 0x15, 0x3d, 0xf5, 0x56, 0xf8, 0x50, 0x14, 0x33, 0x3b, 0xfb, 0x7f, 0x57, 0x5c, 0x29, + 0xb6, 0xd0, 0x00, 0xbd, 0x89, 0xf3, 0xde, 0xfb, 0xbd, 0x37, 0x33, 0x6f, 0xde, 0x7b, 0x33, 0xfb, + 0x04, 0x2b, 0xfb, 0xf7, 0xed, 0xaa, 0x6a, 0xd4, 0xf6, 0x7b, 0x3b, 0xc4, 0xd2, 0x09, 0x25, 0x76, + 0xed, 0x80, 0xe8, 0x6d, 0xc3, 0xaa, 0x09, 0x82, 0x62, 0xaa, 0x35, 0x72, 0x48, 0x89, 0x6e, 0xab, + 0x86, 0x6e, 0xd7, 0x0e, 0x6e, 0xed, 0x10, 0xaa, 0xdc, 0xaa, 0x75, 0x88, 0x4e, 0x2c, 0x85, 0x92, + 0x76, 0xd5, 0xb4, 0x0c, 0x6a, 0xa0, 0x2b, 0x0e, 0x7b, 0x55, 0x31, 0xd5, 0xaa, 0xcf, 0x5e, 0x15, + 0xec, 0x97, 0x6e, 0x76, 0x54, 0xba, 0xd7, 0xdb, 0xa9, 0xb6, 0x8c, 0x6e, 0xad, 0x63, 0x74, 0x8c, + 0x1a, 0x97, 0xda, 0xe9, 0xed, 0xf2, 0x5f, 0xfc, 0x07, 0xff, 0xcb, 0x41, 0xbb, 0x24, 0x07, 0x94, + 0xb7, 0x0c, 0x8b, 0xd4, 0x0e, 0x62, 0x1a, 0x2f, 0xdd, 0xf1, 0x79, 0xba, 0x4a, 0x6b, 0x4f, 0xd5, + 0x89, 0xd5, 0xaf, 0x99, 0xfb, 0x1d, 0x36, 0x60, 0xd7, 0xba, 0x84, 0x2a, 0x49, 0x52, 0xb5, 0x34, + 0x29, 0xab, 0xa7, 0x53, 0xb5, 0x4b, 0x62, 0x02, 0xf7, 0x06, 0x09, 0xd8, 0xad, 0x3d, 0xd2, 0x55, + 0x62, 0x72, 0x6f, 0xa7, 0xc9, 0xf5, 0xa8, 0xaa, 0xd5, 0x54, 0x9d, 0xda, 0xd4, 0x8a, 0x0a, 0xc9, + 0x77, 0x60, 0x6a, 0x51, 0xd3, 0x8c, 0xcf, 0x48, 0x7b, 0xa9, 0xb9, 0xba, 0x6c, 0xa9, 0x07, 0xc4, + 0x42, 0x57, 0xa1, 0xa0, 0x2b, 0x5d, 0x52, 0x96, 0xae, 0x4a, 0xd7, 0x47, 0xea, 0x63, 0xcf, 0x8f, + 0x2a, 0x17, 0x8e, 0x8f, 0x2a, 0x85, 0x0d, 0xa5, 0x4b, 0x30, 0xa7, 0xc8, 0x0f, 0x61, 0x5a, 0x48, + 0xad, 0x68, 0xe4, 0xf0, 0xa9, 0xa1, 0xf5, 0xba, 0x04, 0x5d, 0x83, 0xe1, 0x36, 0x07, 0x10, 0x82, + 0x13, 0x42, 0x70, 0xd8, 0x81, 0xc5, 0x82, 0x2a, 0xdb, 0x30, 0x29, 0x84, 0x9f, 0x18, 0x36, 0x6d, + 0x28, 0x74, 0x0f, 0xdd, 0x06, 0x30, 0x15, 0xba, 0xd7, 0xb0, 0xc8, 0xae, 0x7a, 0x28, 0xc4, 0x91, + 0x10, 0x87, 0x86, 0x47, 0xc1, 0x01, 0x2e, 0x74, 0x03, 0x4a, 0x16, 0x51, 0xda, 0x9b, 0xba, 0xd6, + 0x2f, 0xe7, 0xae, 0x4a, 0xd7, 0x4b, 0xf5, 0x29, 0x21, 0x51, 0xc2, 0x62, 0x1c, 0x7b, 0x1c, 0xf2, + 0xe7, 0x39, 0x18, 0x59, 0x56, 0x48, 0xd7, 0xd0, 0x9b, 0x84, 0xa2, 0x4f, 0xa0, 0xc4, 0xb6, 0xab, + 0xad, 0x50, 0x85, 0x6b, 0x1b, 0xbd, 0xfd, 0x56, 0xd5, 0x77, 0x27, 0x6f, 0xf5, 0xaa, 0xe6, 0x7e, + 0x87, 0x0d, 0xd8, 0x55, 0xc6, 0x5d, 0x3d, 0xb8, 0x55, 0xdd, 0xdc, 0x79, 0x46, 0x5a, 0x74, 0x9d, + 0x50, 0xc5, 0xb7, 0xcf, 0x1f, 0xc3, 0x1e, 0x2a, 0xda, 0x80, 0x82, 0x6d, 0x92, 0x16, 0xb7, 0x6c, + 0xf4, 0xf6, 0x8d, 0xea, 0x89, 0xce, 0x5a, 0xf5, 0x2c, 0x6b, 0x9a, 0xa4, 0xe5, 0xaf, 0x38, 0xfb, + 0x85, 0x39, 0x0e, 0x7a, 0x0a, 0xc3, 0x36, 0x55, 0x68, 0xcf, 0x2e, 0xe7, 0x39, 0x62, 0x35, 0x33, + 0x22, 0x97, 0xf2, 0x37, 0xc3, 0xf9, 0x8d, 0x05, 0x9a, 0xfc, 0x1f, 0x39, 0x40, 0x1e, 0xef, 0x92, + 0xa1, 0xb7, 0x55, 0xaa, 0x1a, 0x3a, 0x7a, 0x00, 0x05, 0xda, 0x37, 0x5d, 0x17, 0xb8, 0xe6, 0x1a, + 0xb4, 0xd5, 0x37, 0xc9, 0x8b, 0xa3, 0xca, 0x5c, 0x5c, 0x82, 0x51, 0x30, 0x97, 0x41, 0x6b, 0x9e, + 0xa9, 0x39, 0x2e, 0x7d, 0x27, 0xac, 0xfa, 0xc5, 0x51, 0x25, 0xe1, 0xb0, 0x55, 0x3d, 0xa4, 0xb0, + 0x81, 0xe8, 0x00, 0x90, 0xa6, 0xd8, 0x74, 0xcb, 0x52, 0x74, 0xdb, 0xd1, 0xa4, 0x76, 0x89, 0x58, + 0x84, 0x37, 0xb3, 0x6d, 0x1a, 0x93, 0xa8, 0x5f, 0x12, 0x56, 0xa0, 0xb5, 0x18, 0x1a, 0x4e, 0xd0, + 0xc0, 0xbc, 0xd9, 0x22, 0x8a, 0x6d, 0xe8, 0xe5, 0x42, 0xd8, 0x9b, 0x31, 0x1f, 0xc5, 0x82, 0x8a, + 0xde, 0x80, 0x62, 0x97, 0xd8, 0xb6, 0xd2, 0x21, 0xe5, 0x21, 0xce, 0x38, 0x29, 0x18, 0x8b, 0xeb, + 0xce, 0x30, 0x76, 0xe9, 0xf2, 0x97, 0x12, 0x8c, 0x7b, 0x2b, 0xb7, 0xa6, 0xda, 0x14, 0xfd, 0x56, + 0xcc, 0x0f, 0xab, 0xd9, 0xa6, 0xc4, 0xa4, 0xb9, 0x17, 0x7a, 0x3e, 0xef, 0x8e, 0x04, 0x7c, 0x70, + 0x1d, 0x86, 0x54, 0x4a, 0xba, 0x6c, 0x1f, 0xf2, 0xd7, 0x47, 0x6f, 0x5f, 0xcf, 0xea, 0x32, 0xf5, + 0x71, 0x01, 0x3a, 0xb4, 0xca, 0xc4, 0xb1, 0x83, 0x22, 0xff, 0x69, 0x21, 0x60, 0x3e, 0x73, 0x4d, + 0xf4, 0x11, 0x94, 0x6c, 0xa2, 0x91, 0x16, 0x35, 0x2c, 0x61, 0xfe, 0xdb, 0x19, 0xcd, 0x57, 0x76, + 0x88, 0xd6, 0x14, 0xa2, 0xf5, 0x31, 0x66, 0xbf, 0xfb, 0x0b, 0x7b, 0x90, 0xe8, 0x7d, 0x28, 0x51, + 0xd2, 0x35, 0x35, 0x85, 0x12, 0x71, 0x8e, 0x5e, 0x0f, 0x4e, 0x81, 0x79, 0x0e, 0x03, 0x6b, 0x18, + 0xed, 0x2d, 0xc1, 0xc6, 0x8f, 0x8f, 0xb7, 0x24, 0xee, 0x28, 0xf6, 0x60, 0xd0, 0x01, 0x4c, 0xf4, + 0xcc, 0x36, 0xe3, 0xa4, 0x2c, 0x0a, 0x76, 0xfa, 0xc2, 0x93, 0xee, 0x65, 0x5d, 0x9b, 0xed, 0x90, + 0x74, 0x7d, 0x4e, 0xe8, 0x9a, 0x08, 0x8f, 0xe3, 0x88, 0x16, 0xb4, 0x08, 0x93, 0x5d, 0x55, 0x67, + 0x71, 0xa9, 0xdf, 0x24, 0x2d, 0x43, 0x6f, 0xdb, 0xdc, 0xad, 0x86, 0xea, 0xf3, 0x02, 0x60, 0x72, + 0x3d, 0x4c, 0xc6, 0x51, 0x7e, 0xf4, 0x1e, 0x20, 0x77, 0x1a, 0x8f, 0x9d, 0x20, 0xae, 0x1a, 0x3a, + 0xf7, 0xb9, 0xbc, 0xef, 0xdc, 0x5b, 0x31, 0x0e, 0x9c, 0x20, 0x85, 0xd6, 0x60, 0xd6, 0x22, 0x07, + 0x2a, 0x9b, 0xe3, 0x13, 0xd5, 0xa6, 0x86, 0xd5, 0x5f, 0x53, 0xbb, 0x2a, 0x2d, 0x0f, 0x73, 0x9b, + 0xca, 0xc7, 0x47, 0x95, 0x59, 0x9c, 0x40, 0xc7, 0x89, 0x52, 0xf2, 0x9f, 0x0d, 0xc3, 0x64, 0x24, + 0xde, 0xa0, 0xa7, 0x30, 0xd7, 0xea, 0x59, 0x16, 0xd1, 0xe9, 0x46, 0xaf, 0xbb, 0x43, 0xac, 0x66, + 0x6b, 0x8f, 0xb4, 0x7b, 0x1a, 0x69, 0x73, 0x47, 0x19, 0xaa, 0x2f, 0x08, 0x8b, 0xe7, 0x96, 0x12, + 0xb9, 0x70, 0x8a, 0x34, 0x5b, 0x05, 0x9d, 0x0f, 0xad, 0xab, 0xb6, 0xed, 0x61, 0xe6, 0x38, 0xa6, + 0xb7, 0x0a, 0x1b, 0x31, 0x0e, 0x9c, 0x20, 0xc5, 0x6c, 0x6c, 0x13, 0x5b, 0xb5, 0x48, 0x3b, 0x6a, + 0x63, 0x3e, 0x6c, 0xe3, 0x72, 0x22, 0x17, 0x4e, 0x91, 0x46, 0x77, 0x61, 0xd4, 0xd1, 0xc6, 0xf7, + 0x4f, 0x6c, 0xf4, 0x8c, 0x00, 0x1b, 0xdd, 0xf0, 0x49, 0x38, 0xc8, 0xc7, 0xa6, 0x66, 0xec, 0xd8, + 0xc4, 0x3a, 0x20, 0xed, 0xf4, 0x0d, 0xde, 0x8c, 0x71, 0xe0, 0x04, 0x29, 0x36, 0x35, 0xc7, 0x03, + 0x63, 0x53, 0x1b, 0x0e, 0x4f, 0x6d, 0x3b, 0x91, 0x0b, 0xa7, 0x48, 0x33, 0x3f, 0x76, 0x4c, 0x5e, + 0x3c, 0x50, 0x54, 0x4d, 0xd9, 0xd1, 0x48, 0xb9, 0x18, 0xf6, 0xe3, 0x8d, 0x30, 0x19, 0x47, 0xf9, + 0xd1, 0x63, 0x98, 0x76, 0x86, 0xb6, 0x75, 0xc5, 0x03, 0x29, 0x71, 0x90, 0x9f, 0x09, 0x90, 0xe9, + 0x8d, 0x28, 0x03, 0x8e, 0xcb, 0xa0, 0x07, 0x30, 0xd1, 0x32, 0x34, 0x8d, 0xfb, 0xe3, 0x92, 0xd1, + 0xd3, 0x69, 0x79, 0x84, 0xa3, 0x20, 0x76, 0x1e, 0x97, 0x42, 0x14, 0x1c, 0xe1, 0x44, 0x04, 0xa0, + 0xe5, 0x26, 0x1c, 0xbb, 0x0c, 0x3c, 0x3e, 0xde, 0xca, 0x1a, 0x03, 0xbc, 0x54, 0xe5, 0xd7, 0x00, + 0xde, 0x90, 0x8d, 0x03, 0xc0, 0xf2, 0x3f, 0x4b, 0x30, 0x9f, 0x12, 0x3a, 0xd0, 0x3b, 0xa1, 0x14, + 0xfb, 0xab, 0x91, 0x14, 0x7b, 0x39, 0x45, 0x2c, 0x90, 0x67, 0x75, 0x18, 0xb7, 0xd8, 0xac, 0xf4, + 0x8e, 0xc3, 0x22, 0x62, 0xe4, 0xdd, 0x01, 0xd3, 0xc0, 0x41, 0x19, 0x3f, 0xe6, 0x4f, 0x1f, 0x1f, + 0x55, 0xc6, 0x43, 0x34, 0x1c, 0x86, 0x97, 0xff, 0x3c, 0x07, 0xb0, 0x4c, 0x4c, 0xcd, 0xe8, 0x77, + 0x89, 0x7e, 0x1e, 0x35, 0xd4, 0x66, 0xa8, 0x86, 0xba, 0x39, 0x68, 0x7b, 0x3c, 0xd3, 0x52, 0x8b, + 0xa8, 0xdf, 0x8c, 0x14, 0x51, 0xb5, 0xec, 0x90, 0x27, 0x57, 0x51, 0xff, 0x96, 0x87, 0x19, 0x9f, + 0xd9, 0x2f, 0xa3, 0x1e, 0x86, 0xf6, 0xf8, 0x57, 0x22, 0x7b, 0x3c, 0x9f, 0x20, 0xf2, 0xca, 0xea, + 0xa8, 0x67, 0x30, 0xc1, 0xaa, 0x1c, 0x67, 0x2f, 0x79, 0x0d, 0x35, 0x7c, 0xea, 0x1a, 0xca, 0xcb, + 0x76, 0x6b, 0x21, 0x24, 0x1c, 0x41, 0x4e, 0xa9, 0xd9, 0x8a, 0x3f, 0xc5, 0x9a, 0xed, 0x2b, 0x09, + 0x26, 0xfc, 0x6d, 0x3a, 0x87, 0xa2, 0x6d, 0x23, 0x5c, 0xb4, 0xbd, 0x91, 0xd9, 0x45, 0x53, 0xaa, + 0xb6, 0xff, 0x66, 0x05, 0xbe, 0xc7, 0xc4, 0x0e, 0xf8, 0x8e, 0xd2, 0xda, 0x1f, 0x7c, 0xc7, 0x43, + 0x9f, 0x4b, 0x80, 0x44, 0x16, 0x58, 0xd4, 0x75, 0x83, 0x2a, 0x4e, 0xac, 0x74, 0xcc, 0x5a, 0xcd, + 0x6c, 0x96, 0xab, 0xb1, 0xba, 0x1d, 0xc3, 0x7a, 0xa4, 0x53, 0xab, 0xef, 0x6f, 0x72, 0x9c, 0x01, + 0x27, 0x18, 0x80, 0x14, 0x00, 0x4b, 0x60, 0x6e, 0x19, 0xe2, 0x20, 0xdf, 0xcc, 0x10, 0xf3, 0x98, + 0xc0, 0x92, 0xa1, 0xef, 0xaa, 0x1d, 0x3f, 0xec, 0x60, 0x0f, 0x08, 0x07, 0x40, 0x2f, 0x3d, 0x82, + 0xf9, 0x14, 0x6b, 0xd1, 0x14, 0xe4, 0xf7, 0x49, 0xdf, 0x59, 0x36, 0xcc, 0xfe, 0x44, 0xb3, 0x30, + 0x74, 0xa0, 0x68, 0x3d, 0x27, 0xfc, 0x8e, 0x60, 0xe7, 0xc7, 0x83, 0xdc, 0x7d, 0x49, 0xfe, 0x72, + 0x28, 0xe8, 0x3b, 0xbc, 0x62, 0xbe, 0xce, 0x2e, 0xad, 0xa6, 0xa6, 0xb6, 0x14, 0x5b, 0x14, 0x42, + 0x63, 0xce, 0x85, 0xd5, 0x19, 0xc3, 0x1e, 0x35, 0x54, 0x5b, 0xe7, 0x5e, 0x6d, 0x6d, 0x9d, 0x7f, + 0x39, 0xb5, 0xf5, 0x6f, 0x43, 0xc9, 0x76, 0xab, 0xea, 0x02, 0x87, 0xbc, 0x75, 0x8a, 0xf8, 0x2a, + 0x0a, 0x6a, 0x4f, 0x81, 0x57, 0x4a, 0x7b, 0xa0, 0x49, 0x45, 0xf4, 0xd0, 0x29, 0x8b, 0xe8, 0x97, + 0x5a, 0xf8, 0xb2, 0x78, 0x63, 0x2a, 0x3d, 0x9b, 0xb4, 0x79, 0x6c, 0x2b, 0xf9, 0xf1, 0xa6, 0xc1, + 0x47, 0xb1, 0xa0, 0xa2, 0x8f, 0x42, 0x2e, 0x5b, 0x3a, 0x8b, 0xcb, 0x4e, 0xa4, 0xbb, 0x2b, 0xda, + 0x86, 0x79, 0xd3, 0x32, 0x3a, 0x16, 0xb1, 0xed, 0x65, 0xa2, 0xb4, 0x35, 0x55, 0x27, 0xee, 0xfa, + 0x38, 0x15, 0xd1, 0xe5, 0xe3, 0xa3, 0xca, 0x7c, 0x23, 0x99, 0x05, 0xa7, 0xc9, 0xca, 0xcf, 0x0b, + 0x30, 0x15, 0xcd, 0x80, 0x29, 0x45, 0xaa, 0x74, 0xa6, 0x22, 0xf5, 0x46, 0xe0, 0x30, 0x38, 0x15, + 0x7c, 0xe0, 0x05, 0x27, 0x76, 0x20, 0x16, 0x61, 0x52, 0x44, 0x03, 0x97, 0x28, 0xca, 0x74, 0x6f, + 0xf7, 0xb7, 0xc3, 0x64, 0x1c, 0xe5, 0x47, 0x0f, 0x61, 0xdc, 0xe2, 0x75, 0xb7, 0x0b, 0xe0, 0xd4, + 0xae, 0x17, 0x05, 0xc0, 0x38, 0x0e, 0x12, 0x71, 0x98, 0x97, 0xd5, 0xad, 0x7e, 0x39, 0xea, 0x02, + 0x14, 0xc2, 0x75, 0xeb, 0x62, 0x94, 0x01, 0xc7, 0x65, 0xd0, 0x3a, 0xcc, 0xf4, 0xf4, 0x38, 0x94, + 0xe3, 0xca, 0x97, 0x05, 0xd4, 0xcc, 0x76, 0x9c, 0x05, 0x27, 0xc9, 0xa1, 0xdd, 0x50, 0x29, 0x3b, + 0xcc, 0xc3, 0xf3, 0xed, 0xcc, 0x07, 0x2f, 0x73, 0x2d, 0x9b, 0x50, 0x6e, 0x97, 0xb2, 0x96, 0xdb, + 0xf2, 0x3f, 0x4a, 0xc1, 0x24, 0xe4, 0x95, 0xc0, 0x83, 0x5e, 0x99, 0x62, 0x12, 0x81, 0xea, 0xc8, + 0x48, 0xae, 0x7e, 0xef, 0x9d, 0xaa, 0xfa, 0xf5, 0x93, 0xe7, 0xe0, 0xf2, 0xf7, 0x0b, 0x09, 0xe6, + 0x56, 0x9a, 0x8f, 0x2d, 0xa3, 0x67, 0xba, 0xe6, 0x6c, 0x9a, 0xce, 0xd2, 0xfc, 0x02, 0x0a, 0x56, + 0x4f, 0x73, 0xe7, 0xf1, 0xba, 0x3b, 0x0f, 0xdc, 0xd3, 0xd8, 0x3c, 0x66, 0x22, 0x52, 0xce, 0x24, + 0x98, 0x00, 0xda, 0x80, 0x61, 0x4b, 0xd1, 0x3b, 0xc4, 0x4d, 0xab, 0xd7, 0x06, 0x58, 0xbf, 0xba, + 0x8c, 0x19, 0x7b, 0xa0, 0xb0, 0xe1, 0xd2, 0x58, 0xa0, 0xc8, 0x7f, 0x24, 0xc1, 0xe4, 0x93, 0xad, + 0xad, 0xc6, 0xaa, 0xce, 0x4f, 0x34, 0x7f, 0x5b, 0xbd, 0x0a, 0x05, 0x53, 0xa1, 0x7b, 0xd1, 0x4c, + 0xcf, 0x68, 0x98, 0x53, 0xd0, 0x07, 0x50, 0x64, 0x91, 0x84, 0xe8, 0xed, 0x8c, 0xa5, 0xb6, 0x80, + 0xaf, 0x3b, 0x42, 0x7e, 0xf5, 0x24, 0x06, 0xb0, 0x0b, 0x27, 0xef, 0xc3, 0x6c, 0xc0, 0x1c, 0xb6, + 0x1e, 0x4f, 0x59, 0x76, 0x44, 0x4d, 0x18, 0x62, 0x9a, 0x59, 0x0e, 0xcc, 0x67, 0x78, 0xcc, 0x8c, + 0x4c, 0xc9, 0xaf, 0x74, 0xd8, 0x2f, 0x1b, 0x3b, 0x58, 0xf2, 0x3a, 0x8c, 0xf3, 0x07, 0x65, 0xc3, + 0xa2, 0x7c, 0x59, 0xd0, 0x15, 0xc8, 0x77, 0x55, 0x5d, 0xe4, 0xd9, 0x51, 0x21, 0x93, 0x67, 0x39, + 0x82, 0x8d, 0x73, 0xb2, 0x72, 0x28, 0x22, 0x8f, 0x4f, 0x56, 0x0e, 0x31, 0x1b, 0x97, 0x1f, 0x43, + 0x51, 0x2c, 0x77, 0x10, 0x28, 0x7f, 0x32, 0x50, 0x3e, 0x01, 0x68, 0x13, 0x8a, 0xab, 0x8d, 0xba, + 0x66, 0x38, 0x55, 0x57, 0x4b, 0x6d, 0x5b, 0xd1, 0xbd, 0x58, 0x5a, 0x5d, 0xc6, 0x98, 0x53, 0x90, + 0x0c, 0xc3, 0xe4, 0xb0, 0x45, 0x4c, 0xca, 0x3d, 0x62, 0xa4, 0x0e, 0x6c, 0x97, 0x1f, 0xf1, 0x11, + 0x2c, 0x28, 0xf2, 0x1f, 0xe7, 0xa0, 0x28, 0x96, 0xe3, 0x1c, 0x6e, 0x61, 0x6b, 0xa1, 0x5b, 0xd8, + 0x9b, 0xd9, 0x5c, 0x23, 0xf5, 0x0a, 0xb6, 0x15, 0xb9, 0x82, 0xdd, 0xc8, 0x88, 0x77, 0xf2, 0xfd, + 0xeb, 0xef, 0x24, 0x98, 0x08, 0x3b, 0x25, 0xba, 0x0b, 0xa3, 0x2c, 0xe1, 0xa8, 0x2d, 0xb2, 0xe1, + 0xd7, 0xb9, 0xde, 0x23, 0x4c, 0xd3, 0x27, 0xe1, 0x20, 0x1f, 0xea, 0x78, 0x62, 0xcc, 0x8f, 0xc4, + 0xa4, 0xd3, 0x97, 0xb4, 0x47, 0x55, 0xad, 0xea, 0x7c, 0x5a, 0xa9, 0xae, 0xea, 0x74, 0xd3, 0x6a, + 0x52, 0x4b, 0xd5, 0x3b, 0x31, 0x45, 0xdc, 0x29, 0x83, 0xc8, 0xf2, 0x3f, 0x48, 0x30, 0x2a, 0x4c, + 0x3e, 0x87, 0x5b, 0xc5, 0x6f, 0x84, 0x6f, 0x15, 0xd7, 0x32, 0x1e, 0xf0, 0xe4, 0x2b, 0xc5, 0x5f, + 0xf9, 0xa6, 0xb3, 0x23, 0xcd, 0xbc, 0x7a, 0xcf, 0xb0, 0x69, 0xd4, 0xab, 0xd9, 0x61, 0xc4, 0x9c, + 0x82, 0x7a, 0x30, 0xa5, 0x46, 0x62, 0x80, 0x58, 0xda, 0x5a, 0x36, 0x4b, 0x3c, 0xb1, 0x7a, 0x59, + 0xc0, 0x4f, 0x45, 0x29, 0x38, 0xa6, 0x42, 0x26, 0x10, 0xe3, 0x42, 0xef, 0x43, 0x61, 0x8f, 0x52, + 0x33, 0xe1, 0xbd, 0x7a, 0x40, 0xe4, 0xf1, 0x4d, 0x28, 0xf1, 0xd9, 0x6d, 0x6d, 0x35, 0x30, 0x87, + 0x92, 0xff, 0xc7, 0x5f, 0x8f, 0xa6, 0xe3, 0xe3, 0x5e, 0x3c, 0x95, 0xce, 0x12, 0x4f, 0x47, 0x93, + 0x62, 0x29, 0x7a, 0x02, 0x79, 0xaa, 0x65, 0xbd, 0x16, 0x0a, 0xc4, 0xad, 0xb5, 0xa6, 0x1f, 0x90, + 0xb6, 0xd6, 0x9a, 0x98, 0x41, 0xa0, 0x4d, 0x18, 0x62, 0xd9, 0x87, 0x1d, 0xc1, 0x7c, 0xf6, 0x23, + 0xcd, 0xe6, 0xef, 0x3b, 0x04, 0xfb, 0x65, 0x63, 0x07, 0x47, 0xfe, 0x14, 0xc6, 0x43, 0xe7, 0x14, + 0x7d, 0x02, 0x63, 0x9a, 0xa1, 0xb4, 0xeb, 0x8a, 0xa6, 0xe8, 0x2d, 0xe2, 0x7e, 0x1c, 0xb8, 0x96, + 0x74, 0xc3, 0x58, 0x0b, 0xf0, 0x89, 0x53, 0x3e, 0x2b, 0x94, 0x8c, 0x05, 0x69, 0x38, 0x84, 0x28, + 0x2b, 0x00, 0xfe, 0x1c, 0x51, 0x05, 0x86, 0x98, 0x9f, 0x39, 0xf9, 0x64, 0xa4, 0x3e, 0xc2, 0x2c, + 0x64, 0xee, 0x67, 0x63, 0x67, 0x1c, 0xdd, 0x06, 0xb0, 0x49, 0xcb, 0x22, 0x94, 0x07, 0x83, 0x5c, + 0xf8, 0x03, 0x63, 0xd3, 0xa3, 0xe0, 0x00, 0x97, 0xfc, 0x4f, 0x12, 0x8c, 0x6f, 0x10, 0xfa, 0x99, + 0x61, 0xed, 0x37, 0x0c, 0x4d, 0x6d, 0xf5, 0xcf, 0x21, 0xd8, 0xe2, 0x50, 0xb0, 0x7d, 0x6b, 0xc0, + 0xce, 0x84, 0xac, 0x4b, 0x0b, 0xb9, 0xf2, 0x57, 0x12, 0xcc, 0x87, 0x38, 0x1f, 0xf9, 0x47, 0x77, + 0x1b, 0x86, 0x4c, 0xc3, 0xa2, 0x6e, 0x22, 0x3e, 0x95, 0x42, 0x16, 0xc6, 0x02, 0xa9, 0x98, 0xc1, + 0x60, 0x07, 0x0d, 0xad, 0x41, 0x8e, 0x1a, 0xc2, 0x55, 0x4f, 0x87, 0x49, 0x88, 0x55, 0x07, 0x81, + 0x99, 0xdb, 0x32, 0x70, 0x8e, 0x1a, 0x6c, 0x23, 0xca, 0x21, 0xae, 0x60, 0xf0, 0x79, 0x45, 0x33, + 0xc0, 0x50, 0xd8, 0xb5, 0x8c, 0xee, 0x99, 0xe7, 0xe0, 0x6d, 0xc4, 0x8a, 0x65, 0x74, 0x31, 0xc7, + 0x92, 0xbf, 0x96, 0x60, 0x3a, 0xc4, 0x79, 0x0e, 0x81, 0xff, 0xfd, 0x70, 0xe0, 0xbf, 0x71, 0x9a, + 0x89, 0xa4, 0x84, 0xff, 0xaf, 0x73, 0x91, 0x69, 0xb0, 0x09, 0xa3, 0x5d, 0x18, 0x35, 0x8d, 0x76, + 0xf3, 0x25, 0x7c, 0x0e, 0x9c, 0x64, 0x79, 0xb3, 0xe1, 0x63, 0xe1, 0x20, 0x30, 0x3a, 0x84, 0x69, + 0x5d, 0xe9, 0x12, 0xdb, 0x54, 0x5a, 0xa4, 0xf9, 0x12, 0x1e, 0x48, 0x2e, 0xf2, 0xef, 0x0d, 0x51, + 0x44, 0x1c, 0x57, 0x82, 0xd6, 0xa1, 0xa8, 0x9a, 0xbc, 0x8e, 0x13, 0xb5, 0xcb, 0xc0, 0x2c, 0xea, + 0x54, 0x7d, 0x4e, 0x3c, 0x17, 0x3f, 0xb0, 0x8b, 0x21, 0xff, 0x75, 0xd4, 0x1b, 0x98, 0xff, 0xa1, + 0xc7, 0x50, 0xe2, 0x8d, 0x19, 0x2d, 0x43, 0x73, 0xbf, 0x0c, 0xb0, 0x9d, 0x6d, 0x88, 0xb1, 0x17, + 0x47, 0x95, 0xcb, 0x09, 0x8f, 0xbe, 0x2e, 0x19, 0x7b, 0xc2, 0x68, 0x03, 0x0a, 0xe6, 0x8f, 0xa9, + 0x60, 0x78, 0x92, 0xe3, 0x65, 0x0b, 0xc7, 0x91, 0x7f, 0x2f, 0x1f, 0x31, 0x97, 0xa7, 0xba, 0x67, + 0x2f, 0x6d, 0xd7, 0xbd, 0x8a, 0x29, 0x75, 0xe7, 0x77, 0xa0, 0x28, 0x32, 0xbc, 0x70, 0xe6, 0x5f, + 0x9c, 0xc6, 0x99, 0x83, 0x59, 0xcc, 0xbb, 0xb0, 0xb8, 0x83, 0x2e, 0x30, 0xfa, 0x18, 0x86, 0x89, + 0xa3, 0xc2, 0xc9, 0x8d, 0xf7, 0x4e, 0xa3, 0xc2, 0x8f, 0xab, 0x7e, 0xa1, 0x2a, 0xc6, 0x04, 0x2a, + 0x7a, 0x87, 0xad, 0x17, 0xe3, 0x65, 0x97, 0x40, 0xbb, 0x5c, 0xe0, 0xe9, 0xea, 0x8a, 0x33, 0x6d, + 0x6f, 0xf8, 0xc5, 0x51, 0x05, 0xfc, 0x9f, 0x38, 0x28, 0x21, 0xff, 0x8b, 0x04, 0xd3, 0x7c, 0x85, + 0x5a, 0x3d, 0x4b, 0xa5, 0xfd, 0x73, 0x4b, 0x4c, 0x4f, 0x43, 0x89, 0xe9, 0xce, 0x80, 0x65, 0x89, + 0x59, 0x98, 0x9a, 0x9c, 0xbe, 0x91, 0xe0, 0x62, 0x8c, 0xfb, 0x1c, 0xe2, 0xe2, 0x76, 0x38, 0x2e, + 0xbe, 0x75, 0xda, 0x09, 0xa5, 0xc4, 0xc6, 0xff, 0x9a, 0x4e, 0x98, 0x0e, 0x3f, 0x29, 0xb7, 0x01, + 0x4c, 0x4b, 0x3d, 0x50, 0x35, 0xd2, 0x11, 0x1f, 0xc1, 0x4b, 0x81, 0x16, 0x27, 0x8f, 0x82, 0x03, + 0x5c, 0xc8, 0x86, 0xb9, 0x36, 0xd9, 0x55, 0x7a, 0x1a, 0x5d, 0x6c, 0xb7, 0x97, 0x14, 0x53, 0xd9, + 0x51, 0x35, 0x95, 0xaa, 0xe2, 0xb9, 0x60, 0xa4, 0xfe, 0xd0, 0xf9, 0x38, 0x9d, 0xc4, 0xf1, 0xe2, + 0xa8, 0x72, 0x25, 0xe9, 0xeb, 0x90, 0xcb, 0xd2, 0xc7, 0x29, 0xd0, 0xa8, 0x0f, 0x65, 0x8b, 0x7c, + 0xda, 0x53, 0x2d, 0xd2, 0x5e, 0xb6, 0x0c, 0x33, 0xa4, 0x36, 0xcf, 0xd5, 0xfe, 0xfa, 0xf1, 0x51, + 0xa5, 0x8c, 0x53, 0x78, 0x06, 0x2b, 0x4e, 0x85, 0x47, 0xcf, 0x60, 0x46, 0x11, 0xcd, 0x68, 0x41, + 0xad, 0xce, 0x29, 0xb9, 0x7f, 0x7c, 0x54, 0x99, 0x59, 0x8c, 0x93, 0x07, 0x2b, 0x4c, 0x02, 0x45, + 0x35, 0x28, 0x1e, 0xf0, 0xbe, 0x35, 0xbb, 0x3c, 0xc4, 0xf1, 0x59, 0x22, 0x28, 0x3a, 0xad, 0x6c, + 0x0c, 0x73, 0x78, 0xa5, 0xc9, 0x4f, 0x9f, 0xcb, 0xc5, 0x2e, 0x94, 0xac, 0x96, 0x14, 0x27, 0x9e, + 0xbf, 0x18, 0x97, 0xfc, 0xa8, 0xf5, 0xc4, 0x27, 0xe1, 0x20, 0x1f, 0xfa, 0x08, 0x46, 0xf6, 0xc4, + 0xab, 0x84, 0x5d, 0x2e, 0x66, 0x4a, 0xc2, 0xa1, 0x57, 0x8c, 0xfa, 0xb4, 0x50, 0x31, 0xe2, 0x0e, + 0xdb, 0xd8, 0x47, 0x44, 0x6f, 0x40, 0x91, 0xff, 0x58, 0x5d, 0xe6, 0xcf, 0x71, 0x25, 0x3f, 0xb6, + 0x3d, 0x71, 0x86, 0xb1, 0x4b, 0x77, 0x59, 0x57, 0x1b, 0x4b, 0xfc, 0x59, 0x38, 0xc2, 0xba, 0xda, + 0x58, 0xc2, 0x2e, 0x1d, 0x7d, 0x02, 0x45, 0x9b, 0xac, 0xa9, 0x7a, 0xef, 0xb0, 0x0c, 0x99, 0x3e, + 0x2a, 0x37, 0x1f, 0x71, 0xee, 0xc8, 0xc3, 0x98, 0xaf, 0x41, 0xd0, 0xb1, 0x0b, 0x8b, 0xf6, 0x60, + 0xc4, 0xea, 0xe9, 0x8b, 0xf6, 0xb6, 0x4d, 0xac, 0xf2, 0x28, 0xd7, 0x31, 0x28, 0x9c, 0x63, 0x97, + 0x3f, 0xaa, 0xc5, 0x5b, 0x21, 0x8f, 0x03, 0xfb, 0xe0, 0x68, 0x0f, 0x80, 0xff, 0xe0, 0x6f, 0x70, + 0xe5, 0x39, 0xae, 0xea, 0x7e, 0x16, 0x55, 0x49, 0x4f, 0x7d, 0xe2, 0x1d, 0xde, 0x23, 0xe3, 0x00, + 0x36, 0xfa, 0x43, 0x09, 0x90, 0xdd, 0x33, 0x4d, 0x8d, 0x74, 0x89, 0x4e, 0x15, 0x8d, 0x8f, 0xda, + 0xe5, 0x31, 0xae, 0xf2, 0xdd, 0x41, 0x2b, 0x18, 0x13, 0x8c, 0xaa, 0xf6, 0x9e, 0xd7, 0xe3, 0xac, + 0x38, 0x41, 0x2f, 0xdb, 0xc4, 0x5d, 0x31, 0xeb, 0xf1, 0x4c, 0x9b, 0x98, 0xfc, 0xba, 0xe9, 0x6f, + 0xa2, 0xa0, 0x63, 0x17, 0x16, 0x3d, 0x85, 0x39, 0xb7, 0xc1, 0x12, 0x1b, 0x06, 0x5d, 0x51, 0x35, + 0x62, 0xf7, 0x6d, 0x4a, 0xba, 0xe5, 0x09, 0xee, 0x60, 0x5e, 0x97, 0x09, 0x4e, 0xe4, 0xc2, 0x29, + 0xd2, 0xa8, 0x0b, 0x15, 0x37, 0x38, 0xb1, 0x93, 0xeb, 0x45, 0xc7, 0x47, 0x76, 0x4b, 0xd1, 0x9c, + 0x2f, 0x0e, 0x93, 0x5c, 0xc1, 0xeb, 0xc7, 0x47, 0x95, 0xca, 0xf2, 0xc9, 0xac, 0x78, 0x10, 0x16, + 0xfa, 0x00, 0xca, 0x4a, 0x9a, 0x9e, 0x29, 0xae, 0xe7, 0x35, 0x16, 0xf1, 0x52, 0x15, 0xa4, 0x4a, + 0x23, 0x0a, 0x53, 0x4a, 0xb8, 0xd5, 0xd5, 0x2e, 0x4f, 0x67, 0x7a, 0xf2, 0x8c, 0x74, 0xc8, 0xfa, + 0xcf, 0x1e, 0x11, 0x82, 0x8d, 0x63, 0x1a, 0xd0, 0xef, 0x00, 0x52, 0xa2, 0xdd, 0xb9, 0x76, 0x19, + 0x65, 0x4a, 0x74, 0xb1, 0xb6, 0x5e, 0xdf, 0xed, 0x62, 0x24, 0x1b, 0x27, 0xe8, 0x61, 0x05, 0xba, + 0x12, 0xe9, 0x28, 0xb6, 0xcb, 0xf3, 0x5c, 0x79, 0x2d, 0x9b, 0x72, 0x4f, 0x2e, 0xf0, 0x61, 0x25, + 0x8a, 0x88, 0xe3, 0x4a, 0xd0, 0x1a, 0xcc, 0x8a, 0xc1, 0x6d, 0xdd, 0x56, 0x76, 0x49, 0xb3, 0x6f, + 0xb7, 0xa8, 0x66, 0x97, 0x67, 0x78, 0x7c, 0xe7, 0x1f, 0xf7, 0x16, 0x13, 0xe8, 0x38, 0x51, 0x0a, + 0xbd, 0x0b, 0x53, 0xbb, 0x86, 0xb5, 0xa3, 0xb6, 0xdb, 0x44, 0x77, 0x91, 0x66, 0x39, 0xd2, 0x2c, + 0xdb, 0x87, 0x95, 0x08, 0x0d, 0xc7, 0xb8, 0x91, 0x0d, 0x17, 0x05, 0x72, 0xc3, 0x32, 0x5a, 0xeb, + 0x46, 0x4f, 0xa7, 0x4e, 0xd9, 0x77, 0xd1, 0x4b, 0xa3, 0x17, 0x17, 0x93, 0x18, 0x5e, 0x1c, 0x55, + 0xae, 0x26, 0x57, 0xf9, 0x3e, 0x13, 0x4e, 0xc6, 0x46, 0x26, 0x8c, 0x89, 0x3e, 0xf1, 0x25, 0x4d, + 0xb1, 0xed, 0x72, 0x99, 0x1f, 0xfd, 0x07, 0x83, 0x03, 0x9e, 0x27, 0x12, 0x3d, 0xff, 0x53, 0xc7, + 0x47, 0x95, 0xb1, 0x20, 0x03, 0x0e, 0x69, 0xe0, 0x7d, 0x41, 0xe2, 0x6b, 0xd4, 0xf9, 0xf4, 0x56, + 0x9f, 0xae, 0x2f, 0xc8, 0x37, 0xed, 0xa5, 0xf5, 0x05, 0x05, 0x20, 0x4f, 0x7e, 0x97, 0xfe, 0xcf, + 0x1c, 0xcc, 0xf8, 0xcc, 0x99, 0xfb, 0x82, 0x12, 0x44, 0xfe, 0xbf, 0xbf, 0x3a, 0x5b, 0xaf, 0x8e, + 0xbf, 0x74, 0xff, 0xf7, 0x7a, 0x75, 0x7c, 0xdb, 0x52, 0x6e, 0x0f, 0x7f, 0x9b, 0x0b, 0x4e, 0xe0, + 0x94, 0x0d, 0x23, 0x2f, 0xa1, 0xc5, 0xf8, 0x27, 0xd7, 0x73, 0x22, 0x7f, 0x93, 0x87, 0xa9, 0xe8, + 0x69, 0x0c, 0xf5, 0x15, 0x48, 0x03, 0xfb, 0x0a, 0x1a, 0x30, 0xbb, 0xdb, 0xd3, 0xb4, 0x3e, 0x9f, + 0x43, 0xa0, 0xb9, 0xc0, 0xf9, 0x2e, 0xf8, 0x9a, 0x90, 0x9c, 0x5d, 0x49, 0xe0, 0xc1, 0x89, 0x92, + 0xf1, 0x36, 0x83, 0xc2, 0x8f, 0x6d, 0x33, 0x18, 0x3a, 0x43, 0x9b, 0x41, 0x72, 0xa7, 0x46, 0xfe, + 0x4c, 0x9d, 0x1a, 0x67, 0xe9, 0x31, 0x48, 0x08, 0x62, 0x03, 0xfb, 0x65, 0x5f, 0x83, 0x4b, 0x42, + 0x8c, 0xf2, 0xde, 0x01, 0x9d, 0x5a, 0x86, 0xa6, 0x11, 0x6b, 0xb9, 0xd7, 0xed, 0xf6, 0xe5, 0x5f, + 0xc2, 0x44, 0xb8, 0x2b, 0xc6, 0xd9, 0x69, 0xa7, 0x31, 0x47, 0x7c, 0x9d, 0x0d, 0xec, 0xb4, 0x33, + 0x8e, 0x3d, 0x0e, 0xf9, 0xf7, 0x25, 0x98, 0x4b, 0xee, 0x7e, 0x45, 0x1a, 0x4c, 0x74, 0x95, 0xc3, + 0x60, 0x47, 0xb2, 0x74, 0xc6, 0x77, 0x33, 0xde, 0x0e, 0xb1, 0x1e, 0xc2, 0xc2, 0x11, 0x6c, 0xf9, + 0x07, 0x09, 0xe6, 0x53, 0x1a, 0x11, 0xce, 0xd7, 0x12, 0xf4, 0x21, 0x94, 0xba, 0xca, 0x61, 0xb3, + 0x67, 0x75, 0xc8, 0x99, 0x5f, 0x0a, 0xf9, 0x71, 0x5f, 0x17, 0x28, 0xd8, 0xc3, 0x93, 0xff, 0x52, + 0x82, 0x9f, 0xa5, 0x5e, 0xa4, 0xd0, 0xbd, 0x50, 0xcf, 0x84, 0x1c, 0xe9, 0x99, 0x40, 0x71, 0xc1, + 0x57, 0xd4, 0x32, 0xf1, 0x85, 0x04, 0xe5, 0xb4, 0x9b, 0x25, 0xba, 0x1b, 0x32, 0xf2, 0xe7, 0x11, + 0x23, 0xa7, 0x63, 0x72, 0xaf, 0xc8, 0xc6, 0x7f, 0x95, 0xe0, 0xf2, 0x09, 0x15, 0x9a, 0x77, 0x81, + 0x21, 0xed, 0x20, 0x17, 0x7f, 0xd4, 0x16, 0x5f, 0xc4, 0xfc, 0x0b, 0x4c, 0x02, 0x0f, 0x4e, 0x95, + 0x46, 0xdb, 0x30, 0x2f, 0x6e, 0x4f, 0x51, 0x9a, 0x28, 0x3e, 0x78, 0x6b, 0xd9, 0x72, 0x32, 0x0b, + 0x4e, 0x93, 0x95, 0xff, 0x46, 0x82, 0xb9, 0xe4, 0x27, 0x03, 0xf4, 0x76, 0x68, 0xc9, 0x2b, 0x91, + 0x25, 0x9f, 0x8c, 0x48, 0x89, 0x05, 0xff, 0x18, 0x26, 0xc4, 0xc3, 0x82, 0x80, 0x11, 0xce, 0x2c, + 0x27, 0xe5, 0x17, 0x01, 0xe1, 0x96, 0xb7, 0xfc, 0x98, 0x84, 0xc7, 0x70, 0x04, 0x4d, 0xfe, 0x83, + 0x1c, 0x0c, 0x35, 0x5b, 0x8a, 0x46, 0xce, 0xa1, 0xba, 0x7d, 0x2f, 0x54, 0xdd, 0x0e, 0xfa, 0xa7, + 0x2d, 0x6e, 0x55, 0x6a, 0x61, 0x8b, 0x23, 0x85, 0xed, 0x9b, 0x99, 0xd0, 0x4e, 0xae, 0x69, 0x7f, + 0x0d, 0x46, 0x3c, 0xa5, 0xa7, 0x4b, 0xb5, 0xf2, 0x5f, 0xe4, 0x60, 0x34, 0xa0, 0xe2, 0x94, 0x89, + 0x7a, 0x37, 0x54, 0x9d, 0xe4, 0x33, 0x3c, 0xe3, 0x04, 0x74, 0x55, 0xdd, 0x7a, 0xc4, 0x69, 0x3a, + 0xf6, 0xdb, 0x4c, 0xe3, 0x65, 0xca, 0x2f, 0x61, 0x82, 0x2a, 0x56, 0x87, 0x50, 0xef, 0xb3, 0x46, + 0x9e, 0xfb, 0xa2, 0xd7, 0xfd, 0xbe, 0x15, 0xa2, 0xe2, 0x08, 0xf7, 0xa5, 0x87, 0x30, 0x1e, 0x52, + 0x76, 0xaa, 0x9e, 0xe1, 0xbf, 0x97, 0xe0, 0xe7, 0x03, 0x9f, 0x82, 0x50, 0x3d, 0x74, 0x48, 0xaa, + 0x91, 0x43, 0xb2, 0x90, 0x0e, 0xf0, 0xea, 0x7a, 0xcf, 0xea, 0x37, 0x9f, 0x7f, 0xbf, 0x70, 0xe1, + 0xdb, 0xef, 0x17, 0x2e, 0x7c, 0xf7, 0xfd, 0xc2, 0x85, 0xdf, 0x3d, 0x5e, 0x90, 0x9e, 0x1f, 0x2f, + 0x48, 0xdf, 0x1e, 0x2f, 0x48, 0xdf, 0x1d, 0x2f, 0x48, 0xff, 0x7e, 0xbc, 0x20, 0xfd, 0xc9, 0x0f, + 0x0b, 0x17, 0x3e, 0x2c, 0x0a, 0xb8, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x62, 0xda, 0xf9, + 0x07, 0x3e, 0x00, 0x00, +} + +func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AllowedCSIDriver) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AllowedHostPath) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AllowedCSIDriver) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PathPrefix))) - i += copy(dAtA[i:], m.PathPrefix) - dAtA[i] = 0x10 - i++ - if m.ReadOnly { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil + return len(dAtA) - i, nil } -func (m *CustomMetricCurrentStatus) Marshal() (dAtA []byte, err error) { +func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *CustomMetricCurrentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentValue.Size())) - n1, err := m.CurrentValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - return i, nil -} - -func (m *CustomMetricCurrentStatusList) Marshal() (dAtA []byte, err error) { +func (m *AllowedFlexVolume) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *CustomMetricCurrentStatusList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AllowedFlexVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *CustomMetricTarget) Marshal() (dAtA []byte, err error) { +func (m *AllowedHostPath) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *CustomMetricTarget) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TargetValue.Size())) - n2, err := m.TargetValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - return i, nil -} - -func (m *CustomMetricTargetList) Marshal() (dAtA []byte, err error) { +func (m *AllowedHostPath) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *CustomMetricTargetList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *AllowedHostPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i-- + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x10 + i -= len(m.PathPrefix) + copy(dAtA[i:], m.PathPrefix) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PathPrefix))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -607,41 +2049,52 @@ } func (m *DaemonSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n4, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n5, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -649,41 +2102,52 @@ } func (m *DaemonSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n6, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -691,37 +2155,46 @@ } func (m *DaemonSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n7, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DaemonSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -729,54 +2202,65 @@ } func (m *DaemonSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Selector != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n8, err := m.Selector.MarshalTo(dAtA[i:]) + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.TemplateGeneration)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + { + size, err := m.UpdateStrategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n8 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n9, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) - n10, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n10 - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TemplateGeneration)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x12 + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *DaemonSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -784,58 +2268,65 @@ } func (m *DaemonSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) - if m.CollisionCount != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x52 } } - return i, nil + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x48 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) + i-- + dAtA[i] = 0x40 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) + i-- + dAtA[i] = 0x38 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DaemonSetUpdateStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -843,31 +2334,39 @@ } func (m *DaemonSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DaemonSetUpdateStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n11, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Deployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -875,41 +2374,52 @@ } func (m *Deployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Deployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n12, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n12 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n13, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n13 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n14, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n14 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -917,49 +2427,62 @@ } func (m *DeploymentCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastUpdateTime.Size())) - n15, err := m.LastUpdateTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 + i-- dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n16, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n16 - return i, nil + i-- + dAtA[i] = 0x32 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -967,37 +2490,46 @@ } func (m *DeploymentList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n17, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n17 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentRollback) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1005,51 +2537,61 @@ } func (m *DeploymentRollback) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentRollback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) + { + size, err := m.RollbackTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a if len(m.UpdatedAnnotations) > 0 { keysForUpdatedAnnotations := make([]string, 0, len(m.UpdatedAnnotations)) for k := range m.UpdatedAnnotations { keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) - for _, k := range keysForUpdatedAnnotations { + for iNdEx := len(keysForUpdatedAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.UpdatedAnnotations[string(keysForUpdatedAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - v := m.UpdatedAnnotations[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForUpdatedAnnotations[iNdEx]) + copy(dAtA[i:], keysForUpdatedAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForUpdatedAnnotations[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollbackTo.Size())) - n18, err := m.RollbackTo.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n18 - return i, nil + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *DeploymentSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1057,79 +2599,92 @@ } func (m *DeploymentSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) - } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n19, err := m.Selector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n19 - } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n20, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n20 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Strategy.Size())) - n21, err := m.Strategy.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.ProgressDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + i-- + dAtA[i] = 0x48 } - i += n21 - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - if m.RevisionHistoryLimit != nil { - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + if m.RollbackTo != nil { + { + size, err := m.RollbackTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 } - dAtA[i] = 0x38 - i++ + i-- if m.Paused { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if m.RollbackTo != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollbackTo.Size())) - n22, err := m.RollbackTo.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x38 + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x30 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x28 + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n22 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.ProgressDeadlineSeconds != nil { - dAtA[i] = 0x48 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.ProgressDeadlineSeconds)) + i-- + dAtA[i] = 0x22 + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func (m *DeploymentStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1137,52 +2692,59 @@ } func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + if m.CollisionCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + i-- + dAtA[i] = 0x40 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x38 if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x32 } } - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - if m.CollisionCount != nil { - dAtA[i] = 0x40 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) - } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *DeploymentStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1190,31 +2752,39 @@ } func (m *DeploymentStrategy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) if m.RollingUpdate != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) - n23, err := m.RollingUpdate.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n23 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *FSGroupStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1222,33 +2792,41 @@ } func (m *FSGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FSGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1256,29 +2834,37 @@ } func (m *HTTPIngressPath) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HTTPIngressPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Backend.Size())) - n24, err := m.Backend.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Backend.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n24 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HTTPIngressRuleValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1286,29 +2872,36 @@ } func (m *HTTPIngressRuleValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HTTPIngressRuleValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.Paths) > 0 { - for _, msg := range m.Paths { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Paths) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Paths[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *HostPortRange) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1316,23 +2909,28 @@ } func (m *HostPortRange) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostPortRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) - return i, nil + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *IDRange) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1340,23 +2938,28 @@ } func (m *IDRange) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IDRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) - return i, nil + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *IPBlock) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1364,36 +2967,36 @@ } func (m *IPBlock) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IPBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) - i += copy(dAtA[i:], m.CIDR) if len(m.Except) > 0 { - for _, s := range m.Except { + for iNdEx := len(m.Except) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Except[iNdEx]) + copy(dAtA[i:], m.Except[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Except[iNdEx]))) + i-- dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + i -= len(m.CIDR) + copy(dAtA[i:], m.CIDR) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Ingress) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1401,41 +3004,52 @@ } func (m *Ingress) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Ingress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n25, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n25 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n26, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n26 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n27, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n27 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *IngressBackend) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1443,29 +3057,37 @@ } func (m *IngressBackend) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressBackend) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) - i += copy(dAtA[i:], m.ServiceName) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ServicePort.Size())) - n28, err := m.ServicePort.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ServicePort.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n28 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.ServiceName) + copy(dAtA[i:], m.ServiceName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *IngressList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1473,37 +3095,46 @@ } func (m *IngressList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n29, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n29 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *IngressRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1511,29 +3142,37 @@ } func (m *IngressRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) - i += copy(dAtA[i:], m.Host) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.IngressRuleValue.Size())) - n30, err := m.IngressRuleValue.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.IngressRuleValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n30 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *IngressRuleValue) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1541,27 +3180,34 @@ } func (m *IngressRuleValue) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressRuleValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.HTTP != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.HTTP.Size())) - n31, err := m.HTTP.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.HTTP.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n31 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *IngressSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1569,51 +3215,62 @@ } func (m *IngressSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Backend != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Backend.Size())) - n32, err := m.Backend.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i += n32 } if len(m.TLS) > 0 { - for _, msg := range m.TLS { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.TLS) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TLS[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.Backend != nil { + { + size, err := m.Backend.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *IngressStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1621,25 +3278,32 @@ } func (m *IngressStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) - n33, err := m.LoadBalancer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.LoadBalancer.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n33 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *IngressTLS) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1647,36 +3311,36 @@ } func (m *IngressTLS) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressTLS) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.SecretName) + copy(dAtA[i:], m.SecretName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) + i-- + dAtA[i] = 0x12 if len(m.Hosts) > 0 { - for _, s := range m.Hosts { + for iNdEx := len(m.Hosts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Hosts[iNdEx]) + copy(dAtA[i:], m.Hosts[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hosts[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) - i += copy(dAtA[i:], m.SecretName) - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1684,33 +3348,42 @@ } func (m *NetworkPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n34, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n34 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n35, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n35 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NetworkPolicyEgressRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1718,41 +3391,50 @@ } func (m *NetworkPolicyEgressRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyEgressRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.To) > 0 { + for iNdEx := len(m.To) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.To[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if len(m.To) > 0 { - for _, msg := range m.To { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicyIngressRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1760,41 +3442,50 @@ } func (m *NetworkPolicyIngressRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyIngressRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.From) > 0 { + for iNdEx := len(m.From) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.From[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if len(m.From) > 0 { - for _, msg := range m.From { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicyList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1802,37 +3493,46 @@ } func (m *NetworkPolicyList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n36, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n36 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NetworkPolicyPeer) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1840,47 +3540,58 @@ } func (m *NetworkPolicyPeer) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyPeer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.PodSelector != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodSelector.Size())) - n37, err := m.PodSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.IPBlock != nil { + { + size, err := m.IPBlock.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n37 + i-- + dAtA[i] = 0x1a } if m.NamespaceSelector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NamespaceSelector.Size())) - n38, err := m.NamespaceSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n38 + i-- + dAtA[i] = 0x12 } - if m.IPBlock != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.IPBlock.Size())) - n39, err := m.IPBlock.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.PodSelector != nil { + { + size, err := m.PodSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n39 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicyPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1888,33 +3599,41 @@ } func (m *NetworkPolicyPort) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Protocol != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Protocol))) - i += copy(dAtA[i:], *m.Protocol) - } if m.Port != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n40, err := m.Port.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n40 + i-- + dAtA[i] = 0x12 + } + if m.Protocol != nil { + i -= len(*m.Protocol) + copy(dAtA[i:], *m.Protocol) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Protocol))) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicySpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1922,64 +3641,69 @@ } func (m *NetworkPolicySpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodSelector.Size())) - n41, err := m.PodSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n41 - if len(m.Ingress) > 0 { - for _, msg := range m.Ingress { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.PolicyTypes) > 0 { + for iNdEx := len(m.PolicyTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.PolicyTypes[iNdEx]) + copy(dAtA[i:], m.PolicyTypes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PolicyTypes[iNdEx]))) + i-- + dAtA[i] = 0x22 } } if len(m.Egress) > 0 { - for _, msg := range m.Egress { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Egress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Egress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x1a } } - if len(m.PolicyTypes) > 0 { - for _, s := range m.PolicyTypes { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ + if len(m.Ingress) > 0 { + for iNdEx := len(m.Ingress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ingress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.PodSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodSecurityPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1987,33 +3711,42 @@ } func (m *PodSecurityPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n42, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n42 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n43, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n43 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodSecurityPolicyList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2021,283 +3754,330 @@ } func (m *PodSecurityPolicyList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n44, err := m.ListMeta.MarshalTo(dAtA[i:]) + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicySpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.RuntimeClass != nil { + { + size, err := m.RuntimeClass.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + if len(m.AllowedCSIDrivers) > 0 { + for iNdEx := len(m.AllowedCSIDrivers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedCSIDrivers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } + } + if m.RunAsGroup != nil { + { + size, err := m.RunAsGroup.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + if len(m.AllowedProcMountTypes) > 0 { + for iNdEx := len(m.AllowedProcMountTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedProcMountTypes[iNdEx]) + copy(dAtA[i:], m.AllowedProcMountTypes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedProcMountTypes[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } + } + if len(m.ForbiddenSysctls) > 0 { + for iNdEx := len(m.ForbiddenSysctls) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ForbiddenSysctls[iNdEx]) + copy(dAtA[i:], m.ForbiddenSysctls[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ForbiddenSysctls[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + } + if len(m.AllowedUnsafeSysctls) > 0 { + for iNdEx := len(m.AllowedUnsafeSysctls) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedUnsafeSysctls[iNdEx]) + copy(dAtA[i:], m.AllowedUnsafeSysctls[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedUnsafeSysctls[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + } + if len(m.AllowedFlexVolumes) > 0 { + for iNdEx := len(m.AllowedFlexVolumes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedFlexVolumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } } - i += n44 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.AllowedHostPaths) > 0 { + for iNdEx := len(m.AllowedHostPaths) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedHostPaths[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a } } - return i, nil -} - -func (m *PodSecurityPolicySpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err + if m.AllowPrivilegeEscalation != nil { + i-- + if *m.AllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 } - return dAtA[:n], nil -} - -func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - if m.Privileged { + if m.DefaultAllowPrivilegeEscalation != nil { + i-- + if *m.DefaultAllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x78 + } + i-- + if m.ReadOnlyRootFilesystem { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if len(m.DefaultAddCapabilities) > 0 { - for _, s := range m.DefaultAddCapabilities { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if len(m.RequiredDropCapabilities) > 0 { - for _, s := range m.RequiredDropCapabilities { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x70 + { + size, err := m.FSGroup.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if len(m.AllowedCapabilities) > 0 { - for _, s := range m.AllowedCapabilities { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x6a + { + size, err := m.SupplementalGroups.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if len(m.Volumes) > 0 { - for _, s := range m.Volumes { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x62 + { + size, err := m.RunAsUser.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x30 - i++ - if m.HostNetwork { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if len(m.HostPorts) > 0 { - for _, msg := range m.HostPorts { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + i-- + dAtA[i] = 0x5a + { + size, err := m.SELinux.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x40 - i++ - if m.HostPID { + i-- + dAtA[i] = 0x52 + i-- + if m.HostIPC { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ + i-- dAtA[i] = 0x48 - i++ - if m.HostIPC { + i-- + if m.HostPID { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SELinux.Size())) - n45, err := m.SELinux.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n45 - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RunAsUser.Size())) - n46, err := m.RunAsUser.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n46 - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SupplementalGroups.Size())) - n47, err := m.SupplementalGroups.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n47 - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FSGroup.Size())) - n48, err := m.FSGroup.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x40 + if len(m.HostPorts) > 0 { + for iNdEx := len(m.HostPorts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostPorts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } } - i += n48 - dAtA[i] = 0x70 - i++ - if m.ReadOnlyRootFilesystem { + i-- + if m.HostNetwork { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if m.DefaultAllowPrivilegeEscalation != nil { - dAtA[i] = 0x78 - i++ - if *m.DefaultAllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.AllowPrivilegeEscalation != nil { - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x1 - i++ - if *m.AllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x30 + if len(m.Volumes) > 0 { + for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Volumes[iNdEx]) + copy(dAtA[i:], m.Volumes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volumes[iNdEx]))) + i-- + dAtA[i] = 0x2a } - i++ } - if len(m.AllowedHostPaths) > 0 { - for _, msg := range m.AllowedHostPaths { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.AllowedCapabilities) > 0 { + for iNdEx := len(m.AllowedCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedCapabilities[iNdEx]) + copy(dAtA[i:], m.AllowedCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x22 } } - if len(m.AllowedFlexVolumes) > 0 { - for _, msg := range m.AllowedFlexVolumes { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.RequiredDropCapabilities) > 0 { + for iNdEx := len(m.RequiredDropCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RequiredDropCapabilities[iNdEx]) + copy(dAtA[i:], m.RequiredDropCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RequiredDropCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x1a } } - if len(m.AllowedUnsafeSysctls) > 0 { - for _, s := range m.AllowedUnsafeSysctls { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.DefaultAddCapabilities) > 0 { + for iNdEx := len(m.DefaultAddCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DefaultAddCapabilities[iNdEx]) + copy(dAtA[i:], m.DefaultAddCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DefaultAddCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - if len(m.ForbiddenSysctls) > 0 { - for _, s := range m.ForbiddenSysctls { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + i-- + if m.Privileged { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *ReplicaSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2305,41 +4085,52 @@ } func (m *ReplicaSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n49, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n49 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n50, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n50 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n51, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n51 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2347,41 +4138,52 @@ } func (m *ReplicaSetCondition) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n52, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n52 - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) - dAtA[i] = 0x2a - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2389,37 +4191,46 @@ } func (m *ReplicaSetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n53, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n53 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ReplicaSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2427,43 +4238,52 @@ } func (m *ReplicaSetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Replicas != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) - } - if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n54, err := m.Selector.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x20 + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n54 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n55, err := m.Template.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.Selector != nil { + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Replicas != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Replicas)) + i-- + dAtA[i] = 0x8 } - i += n55 - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) - return i, nil + return len(dAtA) - i, nil } func (m *ReplicaSetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2471,44 +4291,51 @@ } func (m *ReplicaSetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicaSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) if len(m.Conditions) > 0 { - for _, msg := range m.Conditions { - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x32 } } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.FullyLabeledReplicas)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *ReplicationControllerDummy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2516,17 +4343,22 @@ } func (m *ReplicationControllerDummy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReplicationControllerDummy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - return i, nil + return len(dAtA) - i, nil } func (m *RollbackConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2534,20 +4366,25 @@ } func (m *RollbackConfig) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollbackConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *RollingUpdateDaemonSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2555,27 +4392,34 @@ } func (m *RollingUpdateDaemonSet) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDaemonSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n56, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n56 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RollingUpdateDeployment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2583,37 +4427,88 @@ } func (m *RollingUpdateDeployment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingUpdateDeployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.MaxUnavailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n57, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n57 + i-- + dAtA[i] = 0xa } - if m.MaxSurge != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxSurge.Size())) - n58, err := m.MaxSurge.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + return len(dAtA) - i, nil +} + +func (m *RunAsGroupStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RunAsGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RunAsGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Ranges) > 0 { + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i += n58 } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RunAsUserStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2621,33 +4516,80 @@ } func (m *RunAsUserStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RunAsUserStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RuntimeClassStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClassStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DefaultRuntimeClassName != nil { + i -= len(*m.DefaultRuntimeClassName) + copy(dAtA[i:], *m.DefaultRuntimeClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.DefaultRuntimeClassName))) + i-- + dAtA[i] = 0x12 + } + if len(m.AllowedRuntimeClassNames) > 0 { + for iNdEx := len(m.AllowedRuntimeClassNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedRuntimeClassNames[iNdEx]) + copy(dAtA[i:], m.AllowedRuntimeClassNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedRuntimeClassNames[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *SELinuxStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2655,31 +4597,39 @@ } func (m *SELinuxStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SELinuxStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if m.SELinuxOptions != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n59, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.SELinuxOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n59 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Scale) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2687,41 +4637,52 @@ } func (m *Scale) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Scale) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n60, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n60 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n61, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n61 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n62, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n62 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ScaleSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2729,20 +4690,25 @@ } func (m *ScaleSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *ScaleStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2750,46 +4716,54 @@ } func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScaleStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i -= len(m.TargetSelector) + copy(dAtA[i:], m.TargetSelector) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetSelector))) + i-- + dAtA[i] = 0x1a if len(m.Selector) > 0 { keysForSelector := make([]string, 0, len(m.Selector)) for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) - for _, k := range keysForSelector { + for iNdEx := len(keysForSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.Selector[string(keysForSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - v := m.Selector[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForSelector[iNdEx]) + copy(dAtA[i:], keysForSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSelector[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TargetSelector))) - i += copy(dAtA[i:], m.TargetSelector) - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *SupplementalGroupsStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -2797,118 +4771,86 @@ } func (m *SupplementalGroupsStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SupplementalGroupsStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *AllowedFlexVolume) Size() (n int) { - var l int - _ = l - l = len(m.Driver) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *AllowedHostPath) Size() (n int) { - var l int - _ = l - l = len(m.PathPrefix) - n += 1 + l + sovGenerated(uint64(l)) - n += 2 - return n + return base } - -func (m *CustomMetricCurrentStatus) Size() (n int) { +func (m *AllowedCSIDriver) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) n += 1 + l + sovGenerated(uint64(l)) - l = m.CurrentValue.Size() - n += 1 + l + sovGenerated(uint64(l)) return n } -func (m *CustomMetricCurrentStatusList) Size() (n int) { - var l int - _ = l - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *AllowedFlexVolume) Size() (n int) { + if m == nil { + return 0 } - return n -} - -func (m *CustomMetricTarget) Size() (n int) { var l int _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - l = m.TargetValue.Size() + l = len(m.Driver) n += 1 + l + sovGenerated(uint64(l)) return n } -func (m *CustomMetricTargetList) Size() (n int) { +func (m *AllowedHostPath) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } + l = len(m.PathPrefix) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 return n } func (m *DaemonSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -2921,6 +4863,9 @@ } func (m *DaemonSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -2937,6 +4882,9 @@ } func (m *DaemonSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -2951,6 +4899,9 @@ } func (m *DaemonSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Selector != nil { @@ -2970,6 +4921,9 @@ } func (m *DaemonSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.CurrentNumberScheduled)) @@ -2993,6 +4947,9 @@ } func (m *DaemonSetUpdateStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -3005,6 +4962,9 @@ } func (m *Deployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -3017,6 +4977,9 @@ } func (m *DeploymentCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -3035,6 +4998,9 @@ } func (m *DeploymentList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -3049,6 +5015,9 @@ } func (m *DeploymentRollback) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -3067,6 +5036,9 @@ } func (m *DeploymentSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -3096,6 +5068,9 @@ } func (m *DeploymentStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -3117,6 +5092,9 @@ } func (m *DeploymentStrategy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -3129,6 +5107,9 @@ } func (m *FSGroupStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -3143,6 +5124,9 @@ } func (m *HTTPIngressPath) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Path) @@ -3153,6 +5137,9 @@ } func (m *HTTPIngressRuleValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Paths) > 0 { @@ -3165,6 +5152,9 @@ } func (m *HostPortRange) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Min)) @@ -3173,6 +5163,9 @@ } func (m *IDRange) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Min)) @@ -3181,6 +5174,9 @@ } func (m *IPBlock) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.CIDR) @@ -3195,6 +5191,9 @@ } func (m *Ingress) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -3207,6 +5206,9 @@ } func (m *IngressBackend) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.ServiceName) @@ -3217,6 +5219,9 @@ } func (m *IngressList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -3231,6 +5236,9 @@ } func (m *IngressRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Host) @@ -3241,6 +5249,9 @@ } func (m *IngressRuleValue) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.HTTP != nil { @@ -3251,6 +5262,9 @@ } func (m *IngressSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Backend != nil { @@ -3273,6 +5287,9 @@ } func (m *IngressStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.LoadBalancer.Size() @@ -3281,6 +5298,9 @@ } func (m *IngressTLS) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Hosts) > 0 { @@ -3295,6 +5315,9 @@ } func (m *NetworkPolicy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -3305,6 +5328,9 @@ } func (m *NetworkPolicyEgressRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Ports) > 0 { @@ -3323,6 +5349,9 @@ } func (m *NetworkPolicyIngressRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Ports) > 0 { @@ -3341,6 +5370,9 @@ } func (m *NetworkPolicyList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -3355,6 +5387,9 @@ } func (m *NetworkPolicyPeer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.PodSelector != nil { @@ -3373,6 +5408,9 @@ } func (m *NetworkPolicyPort) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Protocol != nil { @@ -3387,6 +5425,9 @@ } func (m *NetworkPolicySpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.PodSelector.Size() @@ -3413,6 +5454,9 @@ } func (m *PodSecurityPolicy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -3423,6 +5467,9 @@ } func (m *PodSecurityPolicyList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -3437,6 +5484,9 @@ } func (m *PodSecurityPolicySpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -3512,10 +5562,33 @@ n += 2 + l + sovGenerated(uint64(l)) } } + if len(m.AllowedProcMountTypes) > 0 { + for _, s := range m.AllowedProcMountTypes { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.RunAsGroup != nil { + l = m.RunAsGroup.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if len(m.AllowedCSIDrivers) > 0 { + for _, e := range m.AllowedCSIDrivers { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.RuntimeClass != nil { + l = m.RuntimeClass.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } func (m *ReplicaSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -3528,6 +5601,9 @@ } func (m *ReplicaSetCondition) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -3544,6 +5620,9 @@ } func (m *ReplicaSetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -3558,6 +5637,9 @@ } func (m *ReplicaSetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Replicas != nil { @@ -3574,6 +5656,9 @@ } func (m *ReplicaSetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -3591,12 +5676,18 @@ } func (m *ReplicationControllerDummy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l return n } func (m *RollbackConfig) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Revision)) @@ -3604,6 +5695,9 @@ } func (m *RollingUpdateDaemonSet) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -3614,6 +5708,9 @@ } func (m *RollingUpdateDeployment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MaxUnavailable != nil { @@ -3627,7 +5724,27 @@ return n } +func (m *RunAsGroupStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Rule) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ranges) > 0 { + for _, e := range m.Ranges { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *RunAsUserStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -3641,7 +5758,29 @@ return n } +func (m *RuntimeClassStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.AllowedRuntimeClassNames) > 0 { + for _, s := range m.AllowedRuntimeClassNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultRuntimeClassName != nil { + l = len(*m.DefaultRuntimeClassName) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *SELinuxStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -3654,6 +5793,9 @@ } func (m *Scale) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -3666,6 +5808,9 @@ } func (m *ScaleSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -3673,6 +5818,9 @@ } func (m *ScaleStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Replicas)) @@ -3690,6 +5838,9 @@ } func (m *SupplementalGroupsStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -3704,77 +5855,38 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (this *AllowedFlexVolume) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AllowedFlexVolume{`, - `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, - `}`, - }, "") - return s -} -func (this *AllowedHostPath) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&AllowedHostPath{`, - `PathPrefix:` + fmt.Sprintf("%v", this.PathPrefix) + `,`, - `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, - `}`, - }, "") - return s -} -func (this *CustomMetricCurrentStatus) String() string { +func (this *AllowedCSIDriver) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&CustomMetricCurrentStatus{`, + s := strings.Join([]string{`&AllowedCSIDriver{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *CustomMetricCurrentStatusList) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&CustomMetricCurrentStatusList{`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CustomMetricCurrentStatus", "CustomMetricCurrentStatus", 1), `&`, ``, 1) + `,`, `}`, }, "") return s } -func (this *CustomMetricTarget) String() string { +func (this *AllowedFlexVolume) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&CustomMetricTarget{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `TargetValue:` + strings.Replace(strings.Replace(this.TargetValue.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + s := strings.Join([]string{`&AllowedFlexVolume{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, `}`, }, "") return s } -func (this *CustomMetricTargetList) String() string { +func (this *AllowedHostPath) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&CustomMetricTargetList{`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CustomMetricTarget", "CustomMetricTarget", 1), `&`, ``, 1) + `,`, + s := strings.Join([]string{`&AllowedHostPath{`, + `PathPrefix:` + fmt.Sprintf("%v", this.PathPrefix) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, `}`, }, "") return s @@ -3784,7 +5896,7 @@ return "nil" } s := strings.Join([]string{`&DaemonSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DaemonSetSpec", "DaemonSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DaemonSetStatus", "DaemonSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -3798,7 +5910,7 @@ s := strings.Join([]string{`&DaemonSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -3809,9 +5921,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]DaemonSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DaemonSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -3821,8 +5938,8 @@ return "nil" } s := strings.Join([]string{`&DaemonSetSpec{`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "DaemonSetUpdateStrategy", "DaemonSetUpdateStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `TemplateGeneration:` + fmt.Sprintf("%v", this.TemplateGeneration) + `,`, @@ -3835,6 +5952,11 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DaemonSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DaemonSetCondition", "DaemonSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DaemonSetStatus{`, `CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`, `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, @@ -3845,7 +5967,7 @@ `NumberAvailable:` + fmt.Sprintf("%v", this.NumberAvailable) + `,`, `NumberUnavailable:` + fmt.Sprintf("%v", this.NumberUnavailable) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DaemonSetCondition", "DaemonSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -3856,7 +5978,7 @@ } s := strings.Join([]string{`&DaemonSetUpdateStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, `}`, }, "") return s @@ -3866,7 +5988,7 @@ return "nil" } s := strings.Join([]string{`&Deployment{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentSpec", "DeploymentSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentStatus", "DeploymentStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -3882,8 +6004,8 @@ `Status:` + fmt.Sprintf("%v", this.Status) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `LastUpdateTime:` + strings.Replace(strings.Replace(this.LastUpdateTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -3892,9 +6014,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Deployment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Deployment", "Deployment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&DeploymentList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Deployment", "Deployment", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -3927,13 +6054,13 @@ } s := strings.Join([]string{`&DeploymentSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, - `RollbackTo:` + strings.Replace(fmt.Sprintf("%v", this.RollbackTo), "RollbackConfig", "RollbackConfig", 1) + `,`, + `RollbackTo:` + strings.Replace(this.RollbackTo.String(), "RollbackConfig", "RollbackConfig", 1) + `,`, `ProgressDeadlineSeconds:` + valueToStringGenerated(this.ProgressDeadlineSeconds) + `,`, `}`, }, "") @@ -3943,13 +6070,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]DeploymentCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&DeploymentStatus{`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, @@ -3962,7 +6094,7 @@ } s := strings.Join([]string{`&DeploymentStrategy{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, `}`, }, "") return s @@ -3971,9 +6103,14 @@ if this == nil { return "nil" } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" s := strings.Join([]string{`&FSGroupStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, `}`, }, "") return s @@ -3993,8 +6130,13 @@ if this == nil { return "nil" } + repeatedStringForPaths := "[]HTTPIngressPath{" + for _, f := range this.Paths { + repeatedStringForPaths += strings.Replace(strings.Replace(f.String(), "HTTPIngressPath", "HTTPIngressPath", 1), `&`, ``, 1) + "," + } + repeatedStringForPaths += "}" s := strings.Join([]string{`&HTTPIngressRuleValue{`, - `Paths:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Paths), "HTTPIngressPath", "HTTPIngressPath", 1), `&`, ``, 1) + `,`, + `Paths:` + repeatedStringForPaths + `,`, `}`, }, "") return s @@ -4037,7 +6179,7 @@ return "nil" } s := strings.Join([]string{`&Ingress{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "IngressSpec", "IngressSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "IngressStatus", "IngressStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -4050,7 +6192,7 @@ } s := strings.Join([]string{`&IngressBackend{`, `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, - `ServicePort:` + strings.Replace(strings.Replace(this.ServicePort.String(), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `ServicePort:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServicePort), "IntOrString", "intstr.IntOrString", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -4059,9 +6201,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Ingress{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Ingress", "Ingress", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&IngressList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Ingress", "Ingress", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -4082,7 +6229,7 @@ return "nil" } s := strings.Join([]string{`&IngressRuleValue{`, - `HTTP:` + strings.Replace(fmt.Sprintf("%v", this.HTTP), "HTTPIngressRuleValue", "HTTPIngressRuleValue", 1) + `,`, + `HTTP:` + strings.Replace(this.HTTP.String(), "HTTPIngressRuleValue", "HTTPIngressRuleValue", 1) + `,`, `}`, }, "") return s @@ -4091,10 +6238,20 @@ if this == nil { return "nil" } + repeatedStringForTLS := "[]IngressTLS{" + for _, f := range this.TLS { + repeatedStringForTLS += strings.Replace(strings.Replace(f.String(), "IngressTLS", "IngressTLS", 1), `&`, ``, 1) + "," + } + repeatedStringForTLS += "}" + repeatedStringForRules := "[]IngressRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "IngressRule", "IngressRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&IngressSpec{`, - `Backend:` + strings.Replace(fmt.Sprintf("%v", this.Backend), "IngressBackend", "IngressBackend", 1) + `,`, - `TLS:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TLS), "IngressTLS", "IngressTLS", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "IngressRule", "IngressRule", 1), `&`, ``, 1) + `,`, + `Backend:` + strings.Replace(this.Backend.String(), "IngressBackend", "IngressBackend", 1) + `,`, + `TLS:` + repeatedStringForTLS + `,`, + `Rules:` + repeatedStringForRules + `,`, `}`, }, "") return s @@ -4104,7 +6261,7 @@ return "nil" } s := strings.Join([]string{`&IngressStatus{`, - `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "k8s_io_api_core_v1.LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `LoadBalancer:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LoadBalancer), "LoadBalancerStatus", "v11.LoadBalancerStatus", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -4125,7 +6282,7 @@ return "nil" } s := strings.Join([]string{`&NetworkPolicy{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NetworkPolicySpec", "NetworkPolicySpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -4135,9 +6292,19 @@ if this == nil { return "nil" } + repeatedStringForPorts := "[]NetworkPolicyPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + repeatedStringForTo := "[]NetworkPolicyPeer{" + for _, f := range this.To { + repeatedStringForTo += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + "," + } + repeatedStringForTo += "}" s := strings.Join([]string{`&NetworkPolicyEgressRule{`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + `,`, - `To:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.To), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `To:` + repeatedStringForTo + `,`, `}`, }, "") return s @@ -4146,9 +6313,19 @@ if this == nil { return "nil" } + repeatedStringForPorts := "[]NetworkPolicyPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + repeatedStringForFrom := "[]NetworkPolicyPeer{" + for _, f := range this.From { + repeatedStringForFrom += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + "," + } + repeatedStringForFrom += "}" s := strings.Join([]string{`&NetworkPolicyIngressRule{`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + `,`, - `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `From:` + repeatedStringForFrom + `,`, `}`, }, "") return s @@ -4157,9 +6334,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]NetworkPolicy{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "NetworkPolicy", "NetworkPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&NetworkPolicyList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "NetworkPolicy", "NetworkPolicy", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -4169,9 +6351,9 @@ return "nil" } s := strings.Join([]string{`&NetworkPolicyPeer{`, - `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `IPBlock:` + strings.Replace(fmt.Sprintf("%v", this.IPBlock), "IPBlock", "IPBlock", 1) + `,`, + `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `IPBlock:` + strings.Replace(this.IPBlock.String(), "IPBlock", "IPBlock", 1) + `,`, `}`, }, "") return s @@ -4182,7 +6364,7 @@ } s := strings.Join([]string{`&NetworkPolicyPort{`, `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, - `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -4191,10 +6373,20 @@ if this == nil { return "nil" } + repeatedStringForIngress := "[]NetworkPolicyIngressRule{" + for _, f := range this.Ingress { + repeatedStringForIngress += strings.Replace(strings.Replace(f.String(), "NetworkPolicyIngressRule", "NetworkPolicyIngressRule", 1), `&`, ``, 1) + "," + } + repeatedStringForIngress += "}" + repeatedStringForEgress := "[]NetworkPolicyEgressRule{" + for _, f := range this.Egress { + repeatedStringForEgress += strings.Replace(strings.Replace(f.String(), "NetworkPolicyEgressRule", "NetworkPolicyEgressRule", 1), `&`, ``, 1) + "," + } + repeatedStringForEgress += "}" s := strings.Join([]string{`&NetworkPolicySpec{`, - `PodSelector:` + strings.Replace(strings.Replace(this.PodSelector.String(), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1), `&`, ``, 1) + `,`, - `Ingress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ingress), "NetworkPolicyIngressRule", "NetworkPolicyIngressRule", 1), `&`, ``, 1) + `,`, - `Egress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Egress), "NetworkPolicyEgressRule", "NetworkPolicyEgressRule", 1), `&`, ``, 1) + `,`, + `PodSelector:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "v1.LabelSelector", 1), `&`, ``, 1) + `,`, + `Ingress:` + repeatedStringForIngress + `,`, + `Egress:` + repeatedStringForEgress + `,`, `PolicyTypes:` + fmt.Sprintf("%v", this.PolicyTypes) + `,`, `}`, }, "") @@ -4205,7 +6397,7 @@ return "nil" } s := strings.Join([]string{`&PodSecurityPolicy{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicySpec", "PodSecurityPolicySpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -4215,9 +6407,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]PodSecurityPolicy{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodSecurityPolicy", "PodSecurityPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&PodSecurityPolicyList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodSecurityPolicy", "PodSecurityPolicy", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -4226,6 +6423,26 @@ if this == nil { return "nil" } + repeatedStringForHostPorts := "[]HostPortRange{" + for _, f := range this.HostPorts { + repeatedStringForHostPorts += strings.Replace(strings.Replace(f.String(), "HostPortRange", "HostPortRange", 1), `&`, ``, 1) + "," + } + repeatedStringForHostPorts += "}" + repeatedStringForAllowedHostPaths := "[]AllowedHostPath{" + for _, f := range this.AllowedHostPaths { + repeatedStringForAllowedHostPaths += strings.Replace(strings.Replace(f.String(), "AllowedHostPath", "AllowedHostPath", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedHostPaths += "}" + repeatedStringForAllowedFlexVolumes := "[]AllowedFlexVolume{" + for _, f := range this.AllowedFlexVolumes { + repeatedStringForAllowedFlexVolumes += strings.Replace(strings.Replace(f.String(), "AllowedFlexVolume", "AllowedFlexVolume", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedFlexVolumes += "}" + repeatedStringForAllowedCSIDrivers := "[]AllowedCSIDriver{" + for _, f := range this.AllowedCSIDrivers { + repeatedStringForAllowedCSIDrivers += strings.Replace(strings.Replace(f.String(), "AllowedCSIDriver", "AllowedCSIDriver", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedCSIDrivers += "}" s := strings.Join([]string{`&PodSecurityPolicySpec{`, `Privileged:` + fmt.Sprintf("%v", this.Privileged) + `,`, `DefaultAddCapabilities:` + fmt.Sprintf("%v", this.DefaultAddCapabilities) + `,`, @@ -4233,7 +6450,7 @@ `AllowedCapabilities:` + fmt.Sprintf("%v", this.AllowedCapabilities) + `,`, `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, - `HostPorts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HostPorts), "HostPortRange", "HostPortRange", 1), `&`, ``, 1) + `,`, + `HostPorts:` + repeatedStringForHostPorts + `,`, `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, `SELinux:` + strings.Replace(strings.Replace(this.SELinux.String(), "SELinuxStrategyOptions", "SELinuxStrategyOptions", 1), `&`, ``, 1) + `,`, @@ -4243,10 +6460,14 @@ `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, `DefaultAllowPrivilegeEscalation:` + valueToStringGenerated(this.DefaultAllowPrivilegeEscalation) + `,`, `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, - `AllowedHostPaths:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedHostPaths), "AllowedHostPath", "AllowedHostPath", 1), `&`, ``, 1) + `,`, - `AllowedFlexVolumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedFlexVolumes), "AllowedFlexVolume", "AllowedFlexVolume", 1), `&`, ``, 1) + `,`, + `AllowedHostPaths:` + repeatedStringForAllowedHostPaths + `,`, + `AllowedFlexVolumes:` + repeatedStringForAllowedFlexVolumes + `,`, `AllowedUnsafeSysctls:` + fmt.Sprintf("%v", this.AllowedUnsafeSysctls) + `,`, `ForbiddenSysctls:` + fmt.Sprintf("%v", this.ForbiddenSysctls) + `,`, + `AllowedProcMountTypes:` + fmt.Sprintf("%v", this.AllowedProcMountTypes) + `,`, + `RunAsGroup:` + strings.Replace(this.RunAsGroup.String(), "RunAsGroupStrategyOptions", "RunAsGroupStrategyOptions", 1) + `,`, + `AllowedCSIDrivers:` + repeatedStringForAllowedCSIDrivers + `,`, + `RuntimeClass:` + strings.Replace(this.RuntimeClass.String(), "RuntimeClassStrategyOptions", "RuntimeClassStrategyOptions", 1) + `,`, `}`, }, "") return s @@ -4256,7 +6477,7 @@ return "nil" } s := strings.Join([]string{`&ReplicaSet{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicaSetSpec", "ReplicaSetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicaSetStatus", "ReplicaSetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -4270,7 +6491,7 @@ s := strings.Join([]string{`&ReplicaSetCondition{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Status:` + fmt.Sprintf("%v", this.Status) + `,`, - `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, @@ -4281,9 +6502,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ReplicaSet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ReplicaSetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -4294,8 +6520,8 @@ } s := strings.Join([]string{`&ReplicaSetSpec{`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v11.PodTemplateSpec", 1), `&`, ``, 1) + `,`, `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, `}`, }, "") @@ -4305,13 +6531,18 @@ if this == nil { return "nil" } + repeatedStringForConditions := "[]ReplicaSetCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "ReplicaSetCondition", "ReplicaSetCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" s := strings.Join([]string{`&ReplicaSetStatus{`, `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, - `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ReplicaSetCondition", "ReplicaSetCondition", 1), `&`, ``, 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, `}`, }, "") return s @@ -4340,7 +6571,7 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDaemonSet{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -4350,8 +6581,24 @@ return "nil" } s := strings.Join([]string{`&RollingUpdateDeployment{`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, - `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RunAsGroupStrategyOptions) String() string { + if this == nil { + return "nil" + } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" + s := strings.Join([]string{`&RunAsGroupStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, `}`, }, "") return s @@ -4360,9 +6607,25 @@ if this == nil { return "nil" } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" s := strings.Join([]string{`&RunAsUserStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClassStrategyOptions{`, + `AllowedRuntimeClassNames:` + fmt.Sprintf("%v", this.AllowedRuntimeClassNames) + `,`, + `DefaultRuntimeClassName:` + valueToStringGenerated(this.DefaultRuntimeClassName) + `,`, `}`, }, "") return s @@ -4373,7 +6636,7 @@ } s := strings.Join([]string{`&SELinuxStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "k8s_io_api_core_v1.SELinuxOptions", 1) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "v11.SELinuxOptions", 1) + `,`, `}`, }, "") return s @@ -4383,7 +6646,7 @@ return "nil" } s := strings.Join([]string{`&Scale{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScaleSpec", "ScaleSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScaleStatus", "ScaleStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -4410,216 +6673,43 @@ } github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) mapStringForSelector := "map[string]string{" - for _, k := range keysForSelector { - mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) - } - mapStringForSelector += "}" - s := strings.Join([]string{`&ScaleStatus{`, - `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, - `Selector:` + mapStringForSelector + `,`, - `TargetSelector:` + fmt.Sprintf("%v", this.TargetSelector) + `,`, - `}`, - }, "") - return s -} -func (this *SupplementalGroupsStrategyOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, - `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllowedFlexVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedFlexVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Driver = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) } - return nil + mapStringForSelector += "}" + s := strings.Join([]string{`&ScaleStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `Selector:` + mapStringForSelector + `,`, + `TargetSelector:` + fmt.Sprintf("%v", this.TargetSelector) + `,`, + `}`, + }, "") + return s } -func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AllowedHostPath: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedHostPath: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PathPrefix", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.ReadOnly = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } +func (this *SupplementalGroupsStrategyOptions) String() string { + if this == nil { + return "nil" } - - if iNdEx > l { - return io.ErrUnexpectedEOF + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," } - return nil + repeatedStringForRanges += "}" + s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) } -func (m *CustomMetricCurrentStatus) Unmarshal(dAtA []byte) error { +func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4634,7 +6724,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4642,10 +6732,10 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CustomMetricCurrentStatus: wiretype end group for non-group") + return fmt.Errorf("proto: AllowedCSIDriver: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CustomMetricCurrentStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AllowedCSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4662,7 +6752,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4672,40 +6762,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CurrentValue", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.CurrentValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -4716,85 +6779,7 @@ if skippy < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CustomMetricCurrentStatusList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CustomMetricCurrentStatusList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CustomMetricCurrentStatusList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, CustomMetricCurrentStatus{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -4809,7 +6794,7 @@ } return nil } -func (m *CustomMetricTarget) Unmarshal(dAtA []byte) error { +func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4824,7 +6809,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4832,46 +6817,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CustomMetricTarget: wiretype end group for non-group") + return fmt.Errorf("proto: AllowedFlexVolume: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CustomMetricTarget: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AllowedFlexVolume: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetValue", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4881,21 +6837,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.TargetValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Driver = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -4906,6 +6864,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4918,7 +6879,7 @@ } return nil } -func (m *CustomMetricTargetList) Unmarshal(dAtA []byte) error { +func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4933,7 +6894,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4941,17 +6902,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CustomMetricTargetList: wiretype end group for non-group") + return fmt.Errorf("proto: AllowedHostPath: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CustomMetricTargetList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AllowedHostPath: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PathPrefix", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4961,23 +6922,44 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, CustomMetricTarget{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.PathPrefix = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -4987,6 +6969,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5014,7 +6999,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5042,7 +7027,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5051,6 +7036,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5072,7 +7060,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5081,6 +7069,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5102,7 +7093,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5111,6 +7102,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5127,6 +7121,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5154,7 +7151,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5182,7 +7179,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5192,6 +7189,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5211,7 +7211,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5221,6 +7221,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5240,7 +7243,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5249,6 +7252,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5270,7 +7276,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5280,6 +7286,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5299,7 +7308,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5309,6 +7318,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5323,6 +7335,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5350,7 +7365,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5378,7 +7393,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5387,6 +7402,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5408,7 +7426,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5417,6 +7435,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5434,6 +7455,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5461,7 +7485,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5489,7 +7513,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5498,11 +7522,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -5522,7 +7549,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5531,6 +7558,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5552,7 +7582,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5561,6 +7591,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5582,7 +7615,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5601,7 +7634,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.TemplateGeneration |= (int64(b) & 0x7F) << shift + m.TemplateGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -5620,7 +7653,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5635,6 +7668,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5662,7 +7698,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5690,7 +7726,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentNumberScheduled |= (int32(b) & 0x7F) << shift + m.CurrentNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5709,7 +7745,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberMisscheduled |= (int32(b) & 0x7F) << shift + m.NumberMisscheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5728,7 +7764,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.DesiredNumberScheduled |= (int32(b) & 0x7F) << shift + m.DesiredNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5747,7 +7783,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberReady |= (int32(b) & 0x7F) << shift + m.NumberReady |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5766,7 +7802,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -5785,7 +7821,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedNumberScheduled |= (int32(b) & 0x7F) << shift + m.UpdatedNumberScheduled |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5804,7 +7840,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberAvailable |= (int32(b) & 0x7F) << shift + m.NumberAvailable |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5823,7 +7859,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.NumberUnavailable |= (int32(b) & 0x7F) << shift + m.NumberUnavailable |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5842,7 +7878,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -5862,7 +7898,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5871,6 +7907,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5888,6 +7927,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5915,7 +7957,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5943,7 +7985,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5953,6 +7995,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -5972,7 +8017,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5981,6 +8026,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6000,6 +8048,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6027,7 +8078,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6055,7 +8106,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6064,6 +8115,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6085,7 +8139,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6094,6 +8148,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6115,7 +8172,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6124,6 +8181,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6140,6 +8200,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6167,7 +8230,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6195,7 +8258,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6205,6 +8268,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6224,7 +8290,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6234,6 +8300,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6253,7 +8322,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6263,6 +8332,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6282,7 +8354,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6292,6 +8364,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6311,7 +8386,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6320,6 +8395,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6341,7 +8419,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6350,6 +8428,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6366,6 +8447,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6393,7 +8477,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6421,7 +8505,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6430,6 +8514,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6451,7 +8538,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6460,6 +8547,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6477,6 +8567,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6504,7 +8597,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6532,7 +8625,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6542,6 +8635,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6561,7 +8657,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6570,54 +8666,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.UpdatedAnnotations == nil { m.UpdatedAnnotations = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -6627,41 +8689,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.UpdatedAnnotations[mapkey] = mapvalue - } else { - var mapvalue string - m.UpdatedAnnotations[mapkey] = mapvalue } + m.UpdatedAnnotations[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -6677,7 +8784,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6686,6 +8793,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6702,6 +8812,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6729,7 +8842,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6757,7 +8870,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6777,7 +8890,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6786,11 +8899,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -6810,7 +8926,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6819,6 +8935,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6840,7 +8959,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6849,6 +8968,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6870,7 +8992,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6889,7 +9011,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6909,7 +9031,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6929,7 +9051,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6938,6 +9060,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6962,7 +9087,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6977,6 +9102,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7004,7 +9132,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7032,7 +9160,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -7051,7 +9179,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7070,7 +9198,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UpdatedReplicas |= (int32(b) & 0x7F) << shift + m.UpdatedReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7089,7 +9217,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7108,7 +9236,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.UnavailableReplicas |= (int32(b) & 0x7F) << shift + m.UnavailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7127,7 +9255,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7136,6 +9264,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7158,7 +9289,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7177,7 +9308,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7192,6 +9323,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7219,7 +9353,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7247,7 +9381,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7257,6 +9391,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7276,7 +9413,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7285,6 +9422,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7304,6 +9444,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7331,7 +9474,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7359,7 +9502,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7369,6 +9512,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7388,7 +9534,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7397,6 +9543,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7414,6 +9563,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7441,7 +9593,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7469,7 +9621,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7479,6 +9631,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7498,7 +9653,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7507,6 +9662,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7523,6 +9681,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7550,7 +9711,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7578,7 +9739,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7587,6 +9748,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7604,6 +9768,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7631,7 +9798,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7659,7 +9826,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Min |= (int32(b) & 0x7F) << shift + m.Min |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7678,7 +9845,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Max |= (int32(b) & 0x7F) << shift + m.Max |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7692,6 +9859,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7719,7 +9889,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7747,7 +9917,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Min |= (int64(b) & 0x7F) << shift + m.Min |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -7766,7 +9936,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Max |= (int64(b) & 0x7F) << shift + m.Max |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -7780,6 +9950,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7807,7 +9980,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7835,7 +10008,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7845,6 +10018,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7864,7 +10040,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7874,6 +10050,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7888,6 +10067,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7915,7 +10097,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7943,7 +10125,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7952,6 +10134,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7973,7 +10158,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7982,6 +10167,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8003,7 +10191,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8012,6 +10200,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8028,6 +10219,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8055,7 +10249,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8083,7 +10277,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8093,6 +10287,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8112,7 +10309,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8121,6 +10318,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8137,6 +10337,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8164,7 +10367,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8192,7 +10395,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8201,6 +10404,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8222,7 +10428,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8231,6 +10437,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8248,6 +10457,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8275,7 +10487,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8303,7 +10515,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8313,6 +10525,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8332,7 +10547,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8341,6 +10556,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8357,6 +10575,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8384,7 +10605,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8412,7 +10633,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8421,6 +10642,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8440,6 +10664,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8467,7 +10694,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8495,7 +10722,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8504,6 +10731,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8528,7 +10758,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8537,6 +10767,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8559,7 +10792,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8568,6 +10801,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8585,6 +10821,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8612,7 +10851,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8640,7 +10879,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8649,6 +10888,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8665,6 +10907,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8692,7 +10937,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8720,7 +10965,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8730,6 +10975,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8749,7 +10997,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8759,6 +11007,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8773,6 +11024,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8800,7 +11054,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8828,7 +11082,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8837,6 +11091,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8858,7 +11115,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8867,6 +11124,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8883,6 +11143,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -8910,7 +11173,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8938,7 +11201,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8947,6 +11210,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8969,7 +11235,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -8978,6 +11244,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -8995,6 +11264,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9022,7 +11294,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9050,7 +11322,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9059,6 +11331,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9081,7 +11356,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9090,6 +11365,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9107,6 +11385,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9134,7 +11415,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9162,7 +11443,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9171,6 +11452,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9192,7 +11476,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9201,6 +11485,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9218,6 +11505,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9245,7 +11535,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9273,7 +11563,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9282,11 +11572,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.PodSelector == nil { - m.PodSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.PodSelector = &v1.LabelSelector{} } if err := m.PodSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9306,7 +11599,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9315,11 +11608,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.NamespaceSelector == nil { - m.NamespaceSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.NamespaceSelector = &v1.LabelSelector{} } if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9339,7 +11635,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9348,6 +11644,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9367,6 +11666,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9394,7 +11696,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9422,7 +11724,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9432,6 +11734,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9452,7 +11757,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9461,11 +11766,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Port == nil { - m.Port = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.Port = &intstr.IntOrString{} } if err := m.Port.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9480,6 +11788,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9507,7 +11818,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9535,7 +11846,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9544,6 +11855,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9565,7 +11879,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9574,6 +11888,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9596,7 +11913,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9605,6 +11922,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9627,7 +11947,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9637,6 +11957,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9651,6 +11974,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9678,7 +12004,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9706,7 +12032,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9715,6 +12041,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9736,7 +12065,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9745,6 +12074,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9761,6 +12093,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9788,7 +12123,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9816,7 +12151,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9825,6 +12160,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9846,7 +12184,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9855,6 +12193,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9872,6 +12213,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -9899,7 +12243,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9927,7 +12271,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -9947,7 +12291,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9957,6 +12301,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -9976,7 +12323,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -9986,6 +12333,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10005,7 +12355,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10015,6 +12365,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10034,7 +12387,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10044,6 +12397,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10063,7 +12419,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10083,7 +12439,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10092,6 +12448,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10114,7 +12473,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10134,7 +12493,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10154,7 +12513,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10163,6 +12522,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10184,7 +12546,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10193,6 +12555,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10214,7 +12579,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10223,6 +12588,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10244,7 +12612,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10253,6 +12621,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10274,7 +12645,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10294,7 +12665,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10315,18 +12686,150 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AllowPrivilegeEscalation = &b + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedHostPaths", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedHostPaths = append(m.AllowedHostPaths, AllowedHostPath{}) + if err := m.AllowedHostPaths[len(m.AllowedHostPaths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedFlexVolumes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedFlexVolumes = append(m.AllowedFlexVolumes, AllowedFlexVolume{}) + if err := m.AllowedFlexVolumes[len(m.AllowedFlexVolumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedUnsafeSysctls", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedUnsafeSysctls = append(m.AllowedUnsafeSysctls, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForbiddenSysctls", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - b := bool(v != 0) - m.AllowPrivilegeEscalation = &b - case 17: + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForbiddenSysctls = append(m.ForbiddenSysctls, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 21: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedHostPaths", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedProcMountTypes", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -10336,26 +12839,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedHostPaths = append(m.AllowedHostPaths, AllowedHostPath{}) - if err := m.AllowedHostPaths[len(m.AllowedHostPaths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.AllowedProcMountTypes = append(m.AllowedProcMountTypes, k8s_io_api_core_v1.ProcMountType(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 18: + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedFlexVolumes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -10367,7 +12871,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10376,19 +12880,24 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedFlexVolumes = append(m.AllowedFlexVolumes, AllowedFlexVolume{}) - if err := m.AllowedFlexVolumes[len(m.AllowedFlexVolumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.RunAsGroup == nil { + m.RunAsGroup = &RunAsGroupStrategyOptions{} + } + if err := m.RunAsGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 19: + case 23: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedUnsafeSysctls", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedCSIDrivers", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -10398,26 +12907,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedUnsafeSysctls = append(m.AllowedUnsafeSysctls, string(dAtA[iNdEx:postIndex])) + m.AllowedCSIDrivers = append(m.AllowedCSIDrivers, AllowedCSIDriver{}) + if err := m.AllowedCSIDrivers[len(m.AllowedCSIDrivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 20: + case 24: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ForbiddenSysctls", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeClass", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -10427,20 +12941,27 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ForbiddenSysctls = append(m.ForbiddenSysctls, string(dAtA[iNdEx:postIndex])) + if m.RuntimeClass == nil { + m.RuntimeClass = &RuntimeClassStrategyOptions{} + } + if err := m.RuntimeClass.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -10451,6 +12972,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -10478,7 +13002,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10506,7 +13030,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10515,6 +13039,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10536,7 +13063,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10545,6 +13072,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10566,7 +13096,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10575,6 +13105,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10591,6 +13124,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -10618,7 +13154,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10646,7 +13182,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10656,6 +13192,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10675,7 +13214,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10685,6 +13224,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10704,7 +13246,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10713,6 +13255,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10734,7 +13279,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10744,6 +13289,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10763,7 +13311,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10773,6 +13321,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10787,6 +13338,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -10814,7 +13368,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10842,7 +13396,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10851,6 +13405,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10872,7 +13429,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10881,6 +13438,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -10898,6 +13458,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -10925,7 +13488,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -10953,7 +13516,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int32(b) & 0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -10973,7 +13536,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -10982,11 +13545,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.Selector = &v1.LabelSelector{} } if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -11006,7 +13572,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11015,6 +13581,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -11036,7 +13605,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.MinReadySeconds |= (int32(b) & 0x7F) << shift + m.MinReadySeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -11050,6 +13619,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11077,7 +13649,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11105,7 +13677,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -11124,7 +13696,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.FullyLabeledReplicas |= (int32(b) & 0x7F) << shift + m.FullyLabeledReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -11143,7 +13715,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -11162,7 +13734,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.ReadyReplicas |= (int32(b) & 0x7F) << shift + m.ReadyReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -11181,7 +13753,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.AvailableReplicas |= (int32(b) & 0x7F) << shift + m.AvailableReplicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -11200,7 +13772,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11209,6 +13781,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -11226,6 +13801,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11253,7 +13831,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11276,6 +13854,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11303,7 +13884,168 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RollbackConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RollbackConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + m.Revision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Revision |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RollingUpdateDaemonSet) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RollingUpdateDaemonSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RollingUpdateDaemonSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxUnavailable == nil { + m.MaxUnavailable = &intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RollingUpdateDeployment) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11311,17 +14053,53 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RollbackConfig: wiretype end group for non-group") + return fmt.Errorf("proto: RollingUpdateDeployment: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RollbackConfig: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RollingUpdateDeployment: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) } - m.Revision = 0 + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxUnavailable == nil { + m.MaxUnavailable = &intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSurge", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -11331,11 +14109,28 @@ } b := dAtA[iNdEx] iNdEx++ - m.Revision |= (int64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxSurge == nil { + m.MaxSurge = &intstr.IntOrString{} + } + if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -11345,6 +14140,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11357,7 +14155,7 @@ } return nil } -func (m *RollingUpdateDaemonSet) Unmarshal(dAtA []byte) error { +func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -11372,7 +14170,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11380,15 +14178,47 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RollingUpdateDaemonSet: wiretype end group for non-group") + return fmt.Errorf("proto: RunAsGroupStrategyOptions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RollingUpdateDaemonSet: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RunAsGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rule = RunAsGroupStrategy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -11400,7 +14230,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11409,13 +14239,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} - } - if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -11428,6 +14259,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11440,7 +14274,7 @@ } return nil } -func (m *RollingUpdateDeployment) Unmarshal(dAtA []byte) error { +func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -11455,7 +14289,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11463,17 +14297,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RollingUpdateDeployment: wiretype end group for non-group") + return fmt.Errorf("proto: RunAsUserStrategyOptions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RollingUpdateDeployment: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RunAsUserStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -11483,28 +14317,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} - } - if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Rule = RunAsUserStrategy(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxSurge", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -11516,7 +14349,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11525,13 +14358,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.MaxSurge == nil { - m.MaxSurge = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} - } - if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -11544,6 +14378,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11556,7 +14393,7 @@ } return nil } -func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { +func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -11571,7 +14408,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11579,15 +14416,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RunAsUserStrategyOptions: wiretype end group for non-group") + return fmt.Errorf("proto: RuntimeClassStrategyOptions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RunAsUserStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RuntimeClassStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedRuntimeClassNames", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -11599,7 +14436,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11609,16 +14446,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Rule = RunAsUserStrategy(dAtA[iNdEx:postIndex]) + m.AllowedRuntimeClassNames = append(m.AllowedRuntimeClassNames, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultRuntimeClassName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -11628,22 +14468,24 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.DefaultRuntimeClassName = &s iNdEx = postIndex default: iNdEx = preIndex @@ -11654,6 +14496,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11681,7 +14526,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11709,7 +14554,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11719,6 +14564,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -11738,7 +14586,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11747,11 +14595,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.SELinuxOptions == nil { - m.SELinuxOptions = &k8s_io_api_core_v1.SELinuxOptions{} + m.SELinuxOptions = &v11.SELinuxOptions{} } if err := m.SELinuxOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -11766,6 +14617,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11793,7 +14647,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11821,7 +14675,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11830,6 +14684,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -11851,7 +14708,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11860,6 +14717,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -11881,7 +14741,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -11890,6 +14750,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -11906,6 +14769,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -11933,7 +14799,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -11961,7 +14827,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -11975,6 +14841,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -12002,7 +14871,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -12030,7 +14899,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Replicas |= (int32(b) & 0x7F) << shift + m.Replicas |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -12049,7 +14918,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -12058,54 +14927,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Selector == nil { m.Selector = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -12115,41 +14950,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Selector[mapkey] = mapvalue - } else { - var mapvalue string - m.Selector[mapkey] = mapvalue } + m.Selector[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -12165,7 +15045,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -12175,6 +15055,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -12189,6 +15072,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -12216,7 +15102,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -12244,7 +15130,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -12254,6 +15140,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -12273,7 +15162,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -12282,6 +15171,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -12299,6 +15191,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -12365,10 +15260,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -12397,6 +15295,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -12415,238 +15316,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/extensions/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 3627 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x1c, 0xc7, - 0x72, 0xd7, 0xec, 0x2e, 0xb9, 0xcb, 0xa2, 0xf8, 0xd5, 0xa4, 0xc9, 0xb5, 0x64, 0x71, 0xe5, 0x31, - 0xa0, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x96, 0xac, 0x58, 0x88, 0x6d, 0x2e, 0x29, 0x4a, 0x74, 0xf8, - 0xa5, 0x5e, 0x52, 0x71, 0x8c, 0xc8, 0xf1, 0x70, 0xb7, 0xb9, 0x1c, 0x71, 0x76, 0x66, 0x3c, 0xd3, - 0x43, 0x73, 0x81, 0x20, 0xc8, 0x21, 0x08, 0x10, 0x20, 0x41, 0x92, 0x83, 0xf3, 0x71, 0x8b, 0x2f, - 0x39, 0x25, 0x48, 0x6e, 0xc9, 0xc1, 0x30, 0x10, 0xc0, 0x01, 0x84, 0xc0, 0x01, 0x7c, 0x8b, 0x4f, - 0x44, 0x4c, 0x9f, 0x82, 0xfc, 0x03, 0x0f, 0x3a, 0x3c, 0x3c, 0x74, 0x4f, 0xcf, 0xf7, 0x0c, 0x77, - 0x97, 0x96, 0x88, 0x87, 0x87, 0x77, 0xe3, 0x76, 0x55, 0xfd, 0xaa, 0xba, 0xba, 0xba, 0xaa, 0xa6, - 0xbb, 0x09, 0xcb, 0xfb, 0x77, 0xec, 0xaa, 0x6a, 0xd4, 0xf6, 0x9d, 0x1d, 0x62, 0xe9, 0x84, 0x12, - 0xbb, 0x76, 0x40, 0xf4, 0x96, 0x61, 0xd5, 0x04, 0x41, 0x31, 0xd5, 0x1a, 0x39, 0xa4, 0x44, 0xb7, - 0x55, 0x43, 0xb7, 0x6b, 0x07, 0x37, 0x76, 0x08, 0x55, 0x6e, 0xd4, 0xda, 0x44, 0x27, 0x96, 0x42, - 0x49, 0xab, 0x6a, 0x5a, 0x06, 0x35, 0xd0, 0x25, 0x97, 0xbd, 0xaa, 0x98, 0x6a, 0x35, 0x60, 0xaf, - 0x0a, 0xf6, 0x0b, 0xd7, 0xdb, 0x2a, 0xdd, 0x73, 0x76, 0xaa, 0x4d, 0xa3, 0x53, 0x6b, 0x1b, 0x6d, - 0xa3, 0xc6, 0xa5, 0x76, 0x9c, 0x5d, 0xfe, 0x8b, 0xff, 0xe0, 0x7f, 0xb9, 0x68, 0x17, 0xe4, 0x90, - 0xf2, 0xa6, 0x61, 0x91, 0xda, 0x41, 0x42, 0xe3, 0x85, 0xb7, 0x03, 0x9e, 0x8e, 0xd2, 0xdc, 0x53, - 0x75, 0x62, 0x75, 0x6b, 0xe6, 0x7e, 0x9b, 0x0b, 0x59, 0xc4, 0x36, 0x1c, 0xab, 0x49, 0x06, 0x92, - 0xb2, 0x6b, 0x1d, 0x42, 0x95, 0x34, 0x5d, 0xb5, 0x2c, 0x29, 0xcb, 0xd1, 0xa9, 0xda, 0x49, 0xaa, - 0xb9, 0xdd, 0x4b, 0xc0, 0x6e, 0xee, 0x91, 0x8e, 0x92, 0x90, 0x7b, 0x2b, 0x4b, 0xce, 0xa1, 0xaa, - 0x56, 0x53, 0x75, 0x6a, 0x53, 0x2b, 0x2e, 0x24, 0xdf, 0x85, 0xa9, 0x05, 0x4d, 0x33, 0x3e, 0x27, - 0xad, 0x65, 0x8d, 0x1c, 0x3e, 0x32, 0x34, 0xa7, 0x43, 0xd0, 0x15, 0x18, 0x6e, 0x59, 0xea, 0x01, - 0xb1, 0xca, 0xd2, 0x65, 0xe9, 0xea, 0x48, 0x7d, 0xfc, 0xe9, 0x51, 0xe5, 0xdc, 0xf1, 0x51, 0x65, - 0x78, 0x89, 0x8f, 0x62, 0x41, 0x95, 0x6d, 0x98, 0x10, 0xc2, 0x0f, 0x0c, 0x9b, 0x6e, 0x2a, 0x74, - 0x0f, 0xdd, 0x04, 0x30, 0x15, 0xba, 0xb7, 0x69, 0x91, 0x5d, 0xf5, 0x50, 0x88, 0x23, 0x21, 0x0e, - 0x9b, 0x3e, 0x05, 0x87, 0xb8, 0xd0, 0x35, 0x28, 0x59, 0x44, 0x69, 0x6d, 0xe8, 0x5a, 0xb7, 0x9c, - 0xbb, 0x2c, 0x5d, 0x2d, 0xd5, 0x27, 0x85, 0x44, 0x09, 0x8b, 0x71, 0xec, 0x73, 0xc8, 0x7f, 0x2f, - 0xc1, 0xcb, 0x8b, 0x8e, 0x4d, 0x8d, 0xce, 0x1a, 0xa1, 0x96, 0xda, 0x5c, 0x74, 0x2c, 0x8b, 0xe8, - 0xb4, 0x41, 0x15, 0xea, 0xd8, 0xe8, 0x32, 0x14, 0x74, 0xa5, 0x43, 0x84, 0xe6, 0xf3, 0x02, 0xa7, - 0xb0, 0xae, 0x74, 0x08, 0xe6, 0x14, 0xf4, 0x31, 0x0c, 0x1d, 0x28, 0x9a, 0x43, 0xb8, 0xaa, 0xd1, - 0x9b, 0xd5, 0x6a, 0x10, 0x7d, 0xbe, 0xdb, 0xaa, 0xe6, 0x7e, 0x9b, 0x87, 0xa3, 0x17, 0x0b, 0xd5, - 0x87, 0x8e, 0xa2, 0x53, 0x95, 0x76, 0xeb, 0x33, 0x02, 0xf2, 0xbc, 0xd0, 0xfb, 0x88, 0x61, 0x61, - 0x17, 0x52, 0xfe, 0x23, 0xb8, 0x94, 0x69, 0xda, 0xaa, 0x6a, 0x53, 0xf4, 0x18, 0x86, 0x54, 0x4a, - 0x3a, 0x76, 0x59, 0xba, 0x9c, 0xbf, 0x3a, 0x7a, 0xf3, 0x4e, 0xf5, 0xc4, 0xd0, 0xaf, 0x66, 0x82, - 0xd5, 0xc7, 0x84, 0x19, 0x43, 0x2b, 0x0c, 0x0e, 0xbb, 0xa8, 0xf2, 0x5f, 0x4b, 0x80, 0xc2, 0x32, - 0x5b, 0x8a, 0xd5, 0x26, 0xb4, 0x0f, 0xa7, 0xfc, 0xde, 0x4f, 0x73, 0xca, 0xb4, 0x80, 0x1c, 0x75, - 0x15, 0x46, 0x7c, 0x62, 0xc2, 0x6c, 0xd2, 0x24, 0xee, 0x8c, 0x47, 0x51, 0x67, 0xdc, 0x18, 0xc0, - 0x19, 0x2e, 0x4a, 0x86, 0x17, 0xbe, 0xc8, 0xc1, 0xc8, 0x92, 0x42, 0x3a, 0x86, 0xde, 0x20, 0x14, - 0x7d, 0x0a, 0x25, 0xb6, 0x35, 0x5b, 0x0a, 0x55, 0xb8, 0x03, 0x46, 0x6f, 0xbe, 0x79, 0xd2, 0xec, - 0xec, 0x2a, 0xe3, 0xae, 0x1e, 0xdc, 0xa8, 0x6e, 0xec, 0x3c, 0x21, 0x4d, 0xba, 0x46, 0xa8, 0x12, - 0x44, 0x70, 0x30, 0x86, 0x7d, 0x54, 0xb4, 0x0e, 0x05, 0xdb, 0x24, 0x4d, 0xe1, 0xbb, 0x6b, 0x3d, - 0xa6, 0xe1, 0x5b, 0xd6, 0x30, 0x49, 0x33, 0x58, 0x0c, 0xf6, 0x0b, 0x73, 0x1c, 0xf4, 0x08, 0x86, - 0x6d, 0xbe, 0xca, 0xe5, 0x7c, 0x62, 0x35, 0x4e, 0x46, 0x74, 0x63, 0xc3, 0xdf, 0xae, 0xee, 0x6f, - 0x2c, 0xd0, 0xe4, 0xff, 0xcb, 0x01, 0xf2, 0x79, 0x17, 0x0d, 0xbd, 0xa5, 0x52, 0xd5, 0xd0, 0xd1, - 0xbb, 0x50, 0xa0, 0x5d, 0xd3, 0x8b, 0x8e, 0x2b, 0x9e, 0x41, 0x5b, 0x5d, 0x93, 0x3c, 0x3b, 0xaa, - 0xcc, 0x26, 0x25, 0x18, 0x05, 0x73, 0x19, 0xb4, 0xea, 0x9b, 0x9a, 0xe3, 0xd2, 0x6f, 0x47, 0x55, - 0x3f, 0x3b, 0xaa, 0xa4, 0xa4, 0xe3, 0xaa, 0x8f, 0x14, 0x35, 0x10, 0x1d, 0x00, 0xd2, 0x14, 0x9b, - 0x6e, 0x59, 0x8a, 0x6e, 0xbb, 0x9a, 0xd4, 0x0e, 0x11, 0x4e, 0x78, 0xa3, 0xbf, 0x45, 0x63, 0x12, - 0xf5, 0x0b, 0xc2, 0x0a, 0xb4, 0x9a, 0x40, 0xc3, 0x29, 0x1a, 0x58, 0xbe, 0xb3, 0x88, 0x62, 0x1b, - 0x7a, 0xb9, 0x10, 0xcd, 0x77, 0x98, 0x8f, 0x62, 0x41, 0x45, 0xaf, 0x43, 0xb1, 0x43, 0x6c, 0x5b, - 0x69, 0x93, 0xf2, 0x10, 0x67, 0x9c, 0x10, 0x8c, 0xc5, 0x35, 0x77, 0x18, 0x7b, 0x74, 0xf9, 0x2b, - 0x09, 0xc6, 0x7c, 0xcf, 0xf1, 0x68, 0xff, 0xfd, 0x44, 0x1c, 0x56, 0xfb, 0x9b, 0x12, 0x93, 0xe6, - 0x51, 0xe8, 0x67, 0x45, 0x6f, 0x24, 0x14, 0x83, 0x6b, 0xde, 0x5e, 0xca, 0xf1, 0xbd, 0x74, 0xb5, - 0xdf, 0x90, 0xc9, 0xd8, 0x42, 0x7f, 0x53, 0x08, 0x99, 0xcf, 0x42, 0x13, 0x3d, 0x86, 0x92, 0x4d, - 0x34, 0xd2, 0xa4, 0x86, 0x25, 0xcc, 0x7f, 0xab, 0x4f, 0xf3, 0x95, 0x1d, 0xa2, 0x35, 0x84, 0x68, - 0xfd, 0x3c, 0xb3, 0xdf, 0xfb, 0x85, 0x7d, 0x48, 0xf4, 0x10, 0x4a, 0x94, 0x74, 0x4c, 0x4d, 0xa1, - 0x5e, 0x0e, 0x7a, 0x2d, 0x3c, 0x05, 0x16, 0x39, 0x0c, 0x6c, 0xd3, 0x68, 0x6d, 0x09, 0x36, 0xbe, - 0x7d, 0x7c, 0x97, 0x78, 0xa3, 0xd8, 0x87, 0x41, 0x07, 0x30, 0xee, 0x98, 0x2d, 0xc6, 0x49, 0x59, - 0xc5, 0x6b, 0x77, 0x45, 0x24, 0xdd, 0xee, 0xd7, 0x37, 0xdb, 0x11, 0xe9, 0xfa, 0xac, 0xd0, 0x35, - 0x1e, 0x1d, 0xc7, 0x31, 0x2d, 0x68, 0x01, 0x26, 0x3a, 0xaa, 0xce, 0x2a, 0x57, 0xb7, 0x41, 0x9a, - 0x86, 0xde, 0xb2, 0x79, 0x58, 0x0d, 0xd5, 0xe7, 0x04, 0xc0, 0xc4, 0x5a, 0x94, 0x8c, 0xe3, 0xfc, - 0xe8, 0x43, 0x40, 0xde, 0x34, 0xee, 0xbb, 0x05, 0x5b, 0x35, 0x74, 0x1e, 0x73, 0xf9, 0x20, 0xb8, - 0xb7, 0x12, 0x1c, 0x38, 0x45, 0x0a, 0xad, 0xc2, 0x8c, 0x45, 0x0e, 0x54, 0x36, 0xc7, 0x07, 0xaa, - 0x4d, 0x0d, 0xab, 0xbb, 0xaa, 0x76, 0x54, 0x5a, 0x1e, 0xe6, 0x36, 0x95, 0x8f, 0x8f, 0x2a, 0x33, - 0x38, 0x85, 0x8e, 0x53, 0xa5, 0xe4, 0xbf, 0x1d, 0x86, 0x89, 0x58, 0xbe, 0x41, 0x8f, 0x60, 0xb6, - 0xe9, 0x16, 0xa7, 0x75, 0xa7, 0xb3, 0x43, 0xac, 0x46, 0x73, 0x8f, 0xb4, 0x1c, 0x8d, 0xb4, 0x78, - 0xa0, 0x0c, 0xd5, 0xe7, 0x85, 0xc5, 0xb3, 0x8b, 0xa9, 0x5c, 0x38, 0x43, 0x9a, 0x79, 0x41, 0xe7, - 0x43, 0x6b, 0xaa, 0x6d, 0xfb, 0x98, 0x39, 0x8e, 0xe9, 0x7b, 0x61, 0x3d, 0xc1, 0x81, 0x53, 0xa4, - 0x98, 0x8d, 0x2d, 0x62, 0xab, 0x16, 0x69, 0xc5, 0x6d, 0xcc, 0x47, 0x6d, 0x5c, 0x4a, 0xe5, 0xc2, - 0x19, 0xd2, 0xe8, 0x16, 0x8c, 0xba, 0xda, 0xf8, 0xfa, 0x89, 0x85, 0xf6, 0xcb, 0xe1, 0x7a, 0x40, - 0xc2, 0x61, 0x3e, 0x36, 0x35, 0x63, 0xc7, 0x26, 0xd6, 0x01, 0x69, 0x65, 0x2f, 0xf0, 0x46, 0x82, - 0x03, 0xa7, 0x48, 0xb1, 0xa9, 0xb9, 0x11, 0x98, 0x98, 0xda, 0x70, 0x74, 0x6a, 0xdb, 0xa9, 0x5c, - 0x38, 0x43, 0x9a, 0xc5, 0xb1, 0x6b, 0xf2, 0xc2, 0x81, 0xa2, 0x6a, 0xca, 0x8e, 0x46, 0xca, 0xc5, - 0x68, 0x1c, 0xaf, 0x47, 0xc9, 0x38, 0xce, 0x8f, 0xee, 0xc3, 0x94, 0x3b, 0xb4, 0xad, 0x2b, 0x3e, - 0x48, 0x89, 0x83, 0xbc, 0x2c, 0x40, 0xa6, 0xd6, 0xe3, 0x0c, 0x38, 0x29, 0x83, 0xde, 0x85, 0xf1, - 0xa6, 0xa1, 0x69, 0x3c, 0x1e, 0x17, 0x0d, 0x47, 0xa7, 0xe5, 0x11, 0x8e, 0x82, 0xd8, 0x7e, 0x5c, - 0x8c, 0x50, 0x70, 0x8c, 0x13, 0x11, 0x80, 0xa6, 0x57, 0x70, 0xec, 0x32, 0xf4, 0xd5, 0x6b, 0x24, - 0x8b, 0x5e, 0xd0, 0x03, 0xf8, 0x43, 0x36, 0x0e, 0x01, 0xcb, 0xff, 0x25, 0xc1, 0x5c, 0x46, 0xea, - 0x40, 0xef, 0x47, 0x4a, 0xec, 0x6f, 0xc6, 0x4a, 0xec, 0xc5, 0x0c, 0xb1, 0x50, 0x9d, 0xd5, 0x61, - 0xcc, 0x62, 0xb3, 0xd2, 0xdb, 0x2e, 0x8b, 0xc8, 0x91, 0xb7, 0x7a, 0x4c, 0x03, 0x87, 0x65, 0x82, - 0x9c, 0x3f, 0x75, 0x7c, 0x54, 0x19, 0x8b, 0xd0, 0x70, 0x14, 0x5e, 0xfe, 0xbb, 0x1c, 0xc0, 0x12, - 0x31, 0x35, 0xa3, 0xdb, 0x21, 0xfa, 0x59, 0xf4, 0x50, 0x1b, 0x91, 0x1e, 0xea, 0x7a, 0xaf, 0xe5, - 0xf1, 0x4d, 0xcb, 0x6c, 0xa2, 0x7e, 0x37, 0xd6, 0x44, 0xd5, 0xfa, 0x87, 0x3c, 0xb9, 0x8b, 0xfa, - 0x9f, 0x3c, 0x4c, 0x07, 0xcc, 0x41, 0x1b, 0x75, 0x37, 0xb2, 0xc6, 0xbf, 0x11, 0x5b, 0xe3, 0xb9, - 0x14, 0x91, 0x17, 0xd6, 0x47, 0x3d, 0xff, 0x7e, 0x06, 0x3d, 0x81, 0x71, 0xd6, 0x38, 0xb9, 0xe1, - 0xc1, 0xdb, 0xb2, 0xe1, 0x81, 0xdb, 0x32, 0xbf, 0x80, 0xae, 0x46, 0x90, 0x70, 0x0c, 0x39, 0xa3, - 0x0d, 0x2c, 0xbe, 0xe8, 0x36, 0x50, 0xfe, 0x5a, 0x82, 0xf1, 0x60, 0x99, 0xce, 0xa0, 0x69, 0x5b, - 0x8f, 0x36, 0x6d, 0xaf, 0xf7, 0x1d, 0xa2, 0x19, 0x5d, 0xdb, 0xcf, 0x58, 0x83, 0xef, 0x33, 0xb1, - 0x0d, 0xbe, 0xa3, 0x34, 0xf7, 0xfb, 0xf8, 0xfc, 0xfb, 0x42, 0x02, 0x24, 0xaa, 0xc0, 0x82, 0xae, - 0x1b, 0x54, 0x71, 0x73, 0xa5, 0x6b, 0xd6, 0x4a, 0xdf, 0x66, 0x79, 0x1a, 0xab, 0xdb, 0x09, 0xac, - 0x7b, 0x3a, 0xb5, 0xba, 0xc1, 0x8a, 0x24, 0x19, 0x70, 0x8a, 0x01, 0x48, 0x01, 0xb0, 0x04, 0xe6, - 0x96, 0x21, 0x36, 0xf2, 0xf5, 0x3e, 0x72, 0x1e, 0x13, 0x58, 0x34, 0xf4, 0x5d, 0xb5, 0x1d, 0xa4, - 0x1d, 0xec, 0x03, 0xe1, 0x10, 0xe8, 0x85, 0x7b, 0x30, 0x97, 0x61, 0x2d, 0x9a, 0x84, 0xfc, 0x3e, - 0xe9, 0xba, 0x6e, 0xc3, 0xec, 0x4f, 0x34, 0x13, 0xfe, 0x4c, 0x1e, 0x11, 0x5f, 0xb8, 0xef, 0xe6, - 0xee, 0x48, 0xf2, 0x57, 0x43, 0xe1, 0xd8, 0xe1, 0x1d, 0xf3, 0x55, 0x28, 0x59, 0xc4, 0xd4, 0xd4, - 0xa6, 0x62, 0x8b, 0x46, 0xe8, 0xbc, 0x7b, 0xa4, 0xe1, 0x8e, 0x61, 0x9f, 0x1a, 0xe9, 0xad, 0x73, - 0x2f, 0xb6, 0xb7, 0xce, 0x3f, 0x9f, 0xde, 0xfa, 0x0f, 0xa0, 0x64, 0x7b, 0x5d, 0x75, 0x81, 0x43, - 0xde, 0x18, 0x20, 0xbf, 0x8a, 0x86, 0xda, 0x57, 0xe0, 0xb7, 0xd2, 0x3e, 0x68, 0x5a, 0x13, 0x3d, - 0x34, 0x60, 0x13, 0xfd, 0x5c, 0x1b, 0x5f, 0x96, 0x53, 0x4d, 0xc5, 0xb1, 0x49, 0x8b, 0x27, 0xa2, - 0x52, 0x90, 0x53, 0x37, 0xf9, 0x28, 0x16, 0x54, 0xf4, 0x38, 0x12, 0xb2, 0xa5, 0xd3, 0x84, 0xec, - 0x78, 0x76, 0xb8, 0xa2, 0x6d, 0x98, 0x33, 0x2d, 0xa3, 0x6d, 0x11, 0xdb, 0x5e, 0x22, 0x4a, 0x4b, - 0x53, 0x75, 0xe2, 0xf9, 0xc7, 0xed, 0x88, 0x2e, 0x1e, 0x1f, 0x55, 0xe6, 0x36, 0xd3, 0x59, 0x70, - 0x96, 0xac, 0xfc, 0xb4, 0x00, 0x93, 0xf1, 0x0a, 0x98, 0xd1, 0xa4, 0x4a, 0xa7, 0x6a, 0x52, 0xaf, - 0x85, 0x36, 0x83, 0xdb, 0xc1, 0x87, 0xce, 0xf8, 0x12, 0x1b, 0x62, 0x01, 0x26, 0x44, 0x36, 0xf0, - 0x88, 0xa2, 0x4d, 0xf7, 0x57, 0x7f, 0x3b, 0x4a, 0xc6, 0x71, 0x7e, 0xd6, 0x7a, 0x06, 0x1d, 0xa5, - 0x07, 0x52, 0x88, 0xb6, 0x9e, 0x0b, 0x71, 0x06, 0x9c, 0x94, 0x41, 0x6b, 0x30, 0xed, 0xe8, 0x49, - 0x28, 0x37, 0x1a, 0x2f, 0x0a, 0xa8, 0xe9, 0xed, 0x24, 0x0b, 0x4e, 0x93, 0x43, 0xbb, 0x91, 0x6e, - 0x74, 0x98, 0x67, 0xd8, 0x9b, 0x7d, 0xef, 0x9d, 0xbe, 0xdb, 0x51, 0x74, 0x17, 0xc6, 0x2c, 0xfe, - 0xdd, 0xe1, 0x19, 0xec, 0xf6, 0xee, 0x2f, 0x09, 0xb1, 0x31, 0x1c, 0x26, 0xe2, 0x28, 0x6f, 0x4a, - 0xbb, 0x5d, 0xea, 0xb7, 0xdd, 0x96, 0xff, 0x43, 0x0a, 0x17, 0x21, 0xbf, 0x05, 0xee, 0x75, 0xca, - 0x94, 0x90, 0x08, 0x75, 0x47, 0x46, 0x7a, 0xf7, 0x7b, 0x7b, 0xa0, 0xee, 0x37, 0x28, 0x9e, 0xbd, - 0xdb, 0xdf, 0x2f, 0x25, 0x98, 0x5d, 0x6e, 0xdc, 0xb7, 0x0c, 0xc7, 0xf4, 0xcc, 0xd9, 0x30, 0x5d, - 0xbf, 0xbe, 0x03, 0x05, 0xcb, 0xd1, 0xbc, 0x79, 0xbc, 0xe6, 0xcd, 0x03, 0x3b, 0x1a, 0x9b, 0xc7, - 0x74, 0x4c, 0xca, 0x9d, 0x04, 0x13, 0x40, 0xeb, 0x30, 0x6c, 0x29, 0x7a, 0x9b, 0x78, 0x65, 0xf5, - 0x4a, 0x0f, 0xeb, 0x57, 0x96, 0x30, 0x63, 0x0f, 0x35, 0x6f, 0x5c, 0x1a, 0x0b, 0x14, 0xf9, 0x2f, - 0x24, 0x98, 0x78, 0xb0, 0xb5, 0xb5, 0xb9, 0xa2, 0xf3, 0x1d, 0xcd, 0x4f, 0xdf, 0x2f, 0x43, 0xc1, - 0x54, 0xe8, 0x5e, 0xbc, 0xd2, 0x33, 0x1a, 0xe6, 0x14, 0xf4, 0x11, 0x14, 0x59, 0x26, 0x21, 0x7a, - 0xab, 0xcf, 0x56, 0x5b, 0xc0, 0xd7, 0x5d, 0xa1, 0xa0, 0x43, 0x14, 0x03, 0xd8, 0x83, 0x93, 0xf7, - 0x61, 0x26, 0x64, 0x0e, 0xf3, 0x07, 0x3f, 0x06, 0x46, 0x0d, 0x18, 0x62, 0x9a, 0xbd, 0x53, 0xde, - 0x5e, 0x87, 0x99, 0xb1, 0x29, 0x05, 0x9d, 0x0e, 0xfb, 0x65, 0x63, 0x17, 0x4b, 0x5e, 0x83, 0x31, - 0x7e, 0xe5, 0x60, 0x58, 0x94, 0xbb, 0x05, 0x5d, 0x82, 0x7c, 0x47, 0xd5, 0x45, 0x9d, 0x1d, 0x15, - 0x32, 0x79, 0x56, 0x23, 0xd8, 0x38, 0x27, 0x2b, 0x87, 0x22, 0xf3, 0x04, 0x64, 0xe5, 0x10, 0xb3, - 0x71, 0xf9, 0x3e, 0x14, 0x85, 0xbb, 0xc3, 0x40, 0xf9, 0x93, 0x81, 0xf2, 0x29, 0x40, 0x1b, 0x50, - 0x5c, 0xd9, 0xac, 0x6b, 0x86, 0xdb, 0x75, 0x35, 0xd5, 0x96, 0x15, 0x5f, 0x8b, 0xc5, 0x95, 0x25, - 0x8c, 0x39, 0x05, 0xc9, 0x30, 0x4c, 0x0e, 0x9b, 0xc4, 0xa4, 0x3c, 0x22, 0x46, 0xea, 0xc0, 0x56, - 0xf9, 0x1e, 0x1f, 0xc1, 0x82, 0x22, 0xff, 0x65, 0x0e, 0x8a, 0xc2, 0x1d, 0x67, 0xf0, 0x15, 0xb6, - 0x1a, 0xf9, 0x0a, 0x7b, 0xa3, 0xbf, 0xd0, 0xc8, 0xfc, 0x04, 0xdb, 0x8a, 0x7d, 0x82, 0x5d, 0xeb, - 0x13, 0xef, 0xe4, 0xef, 0xaf, 0x7f, 0x95, 0x60, 0x3c, 0x1a, 0x94, 0xe8, 0x16, 0x8c, 0xb2, 0x82, - 0xa3, 0x36, 0xc9, 0x7a, 0xd0, 0xe7, 0xfa, 0x87, 0x30, 0x8d, 0x80, 0x84, 0xc3, 0x7c, 0xa8, 0xed, - 0x8b, 0xb1, 0x38, 0x12, 0x93, 0xce, 0x76, 0xa9, 0x43, 0x55, 0xad, 0xea, 0x5e, 0xa3, 0x55, 0x57, - 0x74, 0xba, 0x61, 0x35, 0xa8, 0xa5, 0xea, 0xed, 0x84, 0x22, 0x1e, 0x94, 0x61, 0x64, 0xf9, 0xdf, - 0x25, 0x18, 0x15, 0x26, 0x9f, 0xc1, 0x57, 0xc5, 0xef, 0x44, 0xbf, 0x2a, 0xae, 0xf4, 0xb9, 0xc1, - 0xd3, 0x3f, 0x29, 0xfe, 0x31, 0x30, 0x9d, 0x6d, 0x69, 0x16, 0xd5, 0x7b, 0x86, 0x4d, 0xe3, 0x51, - 0xcd, 0x36, 0x23, 0xe6, 0x14, 0xe4, 0xc0, 0xa4, 0x1a, 0xcb, 0x01, 0xc2, 0xb5, 0xb5, 0xfe, 0x2c, - 0xf1, 0xc5, 0xea, 0x65, 0x01, 0x3f, 0x19, 0xa7, 0xe0, 0x84, 0x0a, 0x99, 0x40, 0x82, 0x0b, 0x3d, - 0x84, 0xc2, 0x1e, 0xa5, 0x66, 0xca, 0x79, 0x75, 0x8f, 0xcc, 0x13, 0x98, 0x50, 0xe2, 0xb3, 0xdb, - 0xda, 0xda, 0xc4, 0x1c, 0x4a, 0xfe, 0x79, 0xe0, 0x8f, 0x86, 0x1b, 0xe3, 0x7e, 0x3e, 0x95, 0x4e, - 0x93, 0x4f, 0x47, 0xd3, 0x72, 0x29, 0x7a, 0x00, 0x79, 0xaa, 0xf5, 0xfb, 0x59, 0x28, 0x10, 0xb7, - 0x56, 0x1b, 0x41, 0x42, 0xda, 0x5a, 0x6d, 0x60, 0x06, 0x81, 0x36, 0x60, 0x88, 0x55, 0x1f, 0xb6, - 0x05, 0xf3, 0xfd, 0x6f, 0x69, 0x36, 0xff, 0x20, 0x20, 0xd8, 0x2f, 0x1b, 0xbb, 0x38, 0xf2, 0x67, - 0x30, 0x16, 0xd9, 0xa7, 0xe8, 0x53, 0x38, 0xaf, 0x19, 0x4a, 0xab, 0xae, 0x68, 0x8a, 0xde, 0x24, - 0xde, 0xe5, 0xc0, 0x95, 0xb4, 0x2f, 0x8c, 0xd5, 0x10, 0x9f, 0xd8, 0xe5, 0xfe, 0x75, 0x6a, 0x98, - 0x86, 0x23, 0x88, 0xb2, 0x02, 0x10, 0xcc, 0x11, 0x55, 0x60, 0x88, 0xc5, 0x99, 0x5b, 0x4f, 0x46, - 0xea, 0x23, 0xcc, 0x42, 0x16, 0x7e, 0x36, 0x76, 0xc7, 0xd1, 0x4d, 0x00, 0x9b, 0x34, 0x2d, 0x42, - 0x79, 0x32, 0xc8, 0x45, 0xaf, 0xa0, 0x1b, 0x3e, 0x05, 0x87, 0xb8, 0xe4, 0xff, 0x94, 0x60, 0x6c, - 0x9d, 0xd0, 0xcf, 0x0d, 0x6b, 0x7f, 0xd3, 0xd0, 0xd4, 0x66, 0xf7, 0x0c, 0x92, 0x2d, 0x8e, 0x24, - 0xdb, 0x37, 0x7b, 0xac, 0x4c, 0xc4, 0xba, 0xac, 0x94, 0x2b, 0x7f, 0x2d, 0xc1, 0x5c, 0x84, 0xf3, - 0x5e, 0xb0, 0x75, 0xb7, 0x61, 0xc8, 0x34, 0x2c, 0xea, 0x15, 0xe2, 0x81, 0x14, 0xb2, 0x34, 0x16, - 0x2a, 0xc5, 0x0c, 0x06, 0xbb, 0x68, 0x68, 0x15, 0x72, 0xd4, 0x10, 0xa1, 0x3a, 0x18, 0x26, 0x21, - 0x56, 0x1d, 0x04, 0x66, 0x6e, 0xcb, 0xc0, 0x39, 0x6a, 0xb0, 0x85, 0x28, 0x47, 0xb8, 0xc2, 0xc9, - 0xe7, 0x05, 0xcd, 0x00, 0x43, 0x61, 0xd7, 0x32, 0x3a, 0xa7, 0x9e, 0x83, 0xbf, 0x10, 0xcb, 0x96, - 0xd1, 0xc1, 0x1c, 0x4b, 0xfe, 0x46, 0x82, 0xa9, 0x08, 0xe7, 0x19, 0x24, 0xfe, 0x87, 0xd1, 0xc4, - 0x7f, 0x6d, 0x90, 0x89, 0x64, 0xa4, 0xff, 0x6f, 0x72, 0xb1, 0x69, 0xb0, 0x09, 0xa3, 0x5d, 0x18, - 0x35, 0x8d, 0x56, 0xe3, 0x39, 0x5c, 0x07, 0x4e, 0xb0, 0xba, 0xb9, 0x19, 0x60, 0xe1, 0x30, 0x30, - 0x3a, 0x84, 0x29, 0x5d, 0xe9, 0x10, 0xdb, 0x54, 0x9a, 0xa4, 0xf1, 0x1c, 0x0e, 0x48, 0x5e, 0xe2, - 0xf7, 0x0d, 0x71, 0x44, 0x9c, 0x54, 0x82, 0xd6, 0xa0, 0xa8, 0x9a, 0xbc, 0x8f, 0x13, 0xbd, 0x4b, - 0xcf, 0x2a, 0xea, 0x76, 0x7d, 0x6e, 0x3e, 0x17, 0x3f, 0xb0, 0x87, 0x21, 0xff, 0x53, 0x3c, 0x1a, - 0x58, 0xfc, 0xa1, 0xfb, 0x50, 0xe2, 0x8f, 0x70, 0x9a, 0x86, 0xe6, 0xdd, 0x0c, 0xb0, 0x95, 0xdd, - 0x14, 0x63, 0xcf, 0x8e, 0x2a, 0x17, 0x53, 0x0e, 0x7d, 0x3d, 0x32, 0xf6, 0x85, 0xd1, 0x3a, 0x14, - 0xcc, 0x9f, 0xd2, 0xc1, 0xf0, 0x22, 0xc7, 0xdb, 0x16, 0x8e, 0x23, 0xff, 0x49, 0x3e, 0x66, 0x2e, - 0x2f, 0x75, 0x4f, 0x9e, 0xdb, 0xaa, 0xfb, 0x1d, 0x53, 0xe6, 0xca, 0xef, 0x40, 0x51, 0x54, 0x78, - 0x11, 0xcc, 0xef, 0x0c, 0x12, 0xcc, 0xe1, 0x2a, 0xe6, 0x7f, 0xb0, 0x78, 0x83, 0x1e, 0x30, 0xfa, - 0x04, 0x86, 0x89, 0xab, 0xc2, 0xad, 0x8d, 0xb7, 0x07, 0x51, 0x11, 0xe4, 0xd5, 0xa0, 0x51, 0x15, - 0x63, 0x02, 0x15, 0xbd, 0xcf, 0xfc, 0xc5, 0x78, 0xd9, 0x47, 0xa0, 0x5d, 0x2e, 0xf0, 0x72, 0x75, - 0xc9, 0x9d, 0xb6, 0x3f, 0xfc, 0xec, 0xa8, 0x02, 0xc1, 0x4f, 0x1c, 0x96, 0x90, 0xff, 0x5b, 0x82, - 0x29, 0xee, 0xa1, 0xa6, 0x63, 0xa9, 0xb4, 0x7b, 0x66, 0x85, 0xe9, 0x51, 0xa4, 0x30, 0xbd, 0xdd, - 0xc3, 0x2d, 0x09, 0x0b, 0x33, 0x8b, 0xd3, 0xb7, 0x12, 0xbc, 0x94, 0xe0, 0x3e, 0x83, 0xbc, 0xb8, - 0x1d, 0xcd, 0x8b, 0x6f, 0x0e, 0x3a, 0xa1, 0xac, 0xd6, 0x78, 0x3c, 0x65, 0x3a, 0x7c, 0xa7, 0xdc, - 0x04, 0x30, 0x2d, 0xf5, 0x40, 0xd5, 0x48, 0x5b, 0x5c, 0x82, 0x97, 0x42, 0x8f, 0xe0, 0x7c, 0x0a, - 0x0e, 0x71, 0x21, 0x1b, 0x66, 0x5b, 0x64, 0x57, 0x71, 0x34, 0xba, 0xd0, 0x6a, 0x2d, 0x2a, 0xa6, - 0xb2, 0xa3, 0x6a, 0x2a, 0x55, 0xc5, 0x71, 0xc1, 0x48, 0xfd, 0xae, 0x7b, 0x39, 0x9d, 0xc6, 0xf1, - 0xec, 0xa8, 0x72, 0x29, 0xed, 0x76, 0xc8, 0x63, 0xe9, 0xe2, 0x0c, 0x68, 0xd4, 0x85, 0xb2, 0x45, - 0x3e, 0x73, 0x54, 0x8b, 0xb4, 0x96, 0x2c, 0xc3, 0x8c, 0xa8, 0xcd, 0x73, 0xb5, 0xbf, 0x7d, 0x7c, - 0x54, 0x29, 0xe3, 0x0c, 0x9e, 0xde, 0x8a, 0x33, 0xe1, 0xd1, 0x13, 0x98, 0x56, 0xdc, 0xb7, 0x83, - 0x11, 0xad, 0xee, 0x2e, 0xb9, 0x73, 0x7c, 0x54, 0x99, 0x5e, 0x48, 0x92, 0x7b, 0x2b, 0x4c, 0x03, - 0x45, 0x35, 0x28, 0x1e, 0xf0, 0x97, 0x8d, 0x76, 0x79, 0x88, 0xe3, 0xb3, 0x42, 0x50, 0x74, 0x1f, - 0x3b, 0x32, 0xcc, 0xe1, 0xe5, 0x06, 0xdf, 0x7d, 0x1e, 0x17, 0xfb, 0xa0, 0x64, 0xbd, 0xa4, 0xd8, - 0xf1, 0xfc, 0xc4, 0xb8, 0x14, 0x64, 0xad, 0x07, 0x01, 0x09, 0x87, 0xf9, 0xd0, 0x63, 0x18, 0xd9, - 0x13, 0xa7, 0x12, 0x76, 0xb9, 0xd8, 0x57, 0x11, 0x8e, 0x9c, 0x62, 0xd4, 0xa7, 0x84, 0x8a, 0x11, - 0x6f, 0xd8, 0xc6, 0x01, 0x22, 0x7a, 0x1d, 0x8a, 0xfc, 0xc7, 0xca, 0x12, 0x3f, 0x8e, 0x2b, 0x05, - 0xb9, 0xed, 0x81, 0x3b, 0x8c, 0x3d, 0xba, 0xc7, 0xba, 0xb2, 0xb9, 0xc8, 0x8f, 0x85, 0x63, 0xac, - 0x2b, 0x9b, 0x8b, 0xd8, 0xa3, 0xa3, 0x4f, 0xa1, 0x68, 0x93, 0x55, 0x55, 0x77, 0x0e, 0xcb, 0xd0, - 0xd7, 0xa5, 0x72, 0xe3, 0x1e, 0xe7, 0x8e, 0x1d, 0x8c, 0x05, 0x1a, 0x04, 0x1d, 0x7b, 0xb0, 0x68, - 0x0f, 0x46, 0x2c, 0x47, 0x5f, 0xb0, 0xb7, 0x6d, 0x62, 0x95, 0x47, 0xb9, 0x8e, 0x5e, 0xe9, 0x1c, - 0x7b, 0xfc, 0x71, 0x2d, 0xbe, 0x87, 0x7c, 0x0e, 0x1c, 0x80, 0xa3, 0x3f, 0x97, 0x00, 0xd9, 0x8e, - 0x69, 0x6a, 0xa4, 0x43, 0x74, 0xaa, 0x68, 0xfc, 0x2c, 0xce, 0x2e, 0x9f, 0xe7, 0x3a, 0x3f, 0xe8, - 0x35, 0xaf, 0x84, 0x60, 0x5c, 0xb9, 0x7f, 0xe8, 0x9d, 0x64, 0xc5, 0x29, 0x7a, 0x99, 0x6b, 0x77, - 0x6d, 0xfe, 0x77, 0x79, 0xac, 0x2f, 0xd7, 0xa6, 0x9f, 0x39, 0x06, 0xae, 0x15, 0x74, 0xec, 0xc1, - 0xa2, 0x47, 0x30, 0xeb, 0x3d, 0x8c, 0xc5, 0x86, 0x41, 0x97, 0x55, 0x8d, 0xd8, 0x5d, 0x9b, 0x92, - 0x4e, 0x79, 0x9c, 0x2f, 0xbb, 0xff, 0xf6, 0x03, 0xa7, 0x72, 0xe1, 0x0c, 0x69, 0xd4, 0x81, 0x8a, - 0x97, 0x32, 0xd8, 0x7e, 0xf2, 0x73, 0xd6, 0x3d, 0xbb, 0xa9, 0x68, 0xee, 0x3d, 0xc0, 0x04, 0x57, - 0xf0, 0xda, 0xf1, 0x51, 0xa5, 0xb2, 0x74, 0x32, 0x2b, 0xee, 0x85, 0x85, 0x3e, 0x82, 0xb2, 0x92, - 0xa5, 0x67, 0x92, 0xeb, 0x79, 0x85, 0xe5, 0xa1, 0x4c, 0x05, 0x99, 0xd2, 0x88, 0xc2, 0xa4, 0x12, - 0x7d, 0xa2, 0x6c, 0x97, 0xa7, 0xfa, 0x3a, 0x88, 0x8c, 0xbd, 0x6c, 0x0e, 0x0e, 0x23, 0x62, 0x04, - 0x1b, 0x27, 0x34, 0xa0, 0x3f, 0x04, 0xa4, 0xc4, 0x5f, 0x55, 0xdb, 0x65, 0xd4, 0x57, 0xf9, 0x49, - 0x3c, 0xc7, 0x0e, 0xc2, 0x2e, 0x41, 0xb2, 0x71, 0x8a, 0x1e, 0xb4, 0x0a, 0x33, 0x62, 0x74, 0x5b, - 0xb7, 0x95, 0x5d, 0xd2, 0xe8, 0xda, 0x4d, 0xaa, 0xd9, 0xe5, 0x69, 0x9e, 0xfb, 0xf8, 0xc5, 0xd7, - 0x42, 0x0a, 0x1d, 0xa7, 0x4a, 0xa1, 0x0f, 0x60, 0x72, 0xd7, 0xb0, 0x76, 0xd4, 0x56, 0x8b, 0xe8, - 0x1e, 0xd2, 0x0c, 0x47, 0x9a, 0x61, 0xde, 0x58, 0x8e, 0xd1, 0x70, 0x82, 0x9b, 0x3f, 0x26, 0x11, - 0x57, 0x0b, 0x67, 0xf3, 0x20, 0x77, 0xb0, 0xc7, 0x24, 0x81, 0x69, 0xcf, 0xed, 0x31, 0x49, 0x08, - 0xf2, 0xe4, 0xc3, 0xcc, 0xff, 0xcf, 0xc1, 0x74, 0xc0, 0xdc, 0xf7, 0x63, 0x92, 0x14, 0x91, 0x5f, - 0x3f, 0xca, 0xed, 0xfd, 0x28, 0xf7, 0x6b, 0x09, 0xc6, 0x03, 0xd7, 0xfd, 0xf2, 0x3d, 0xf0, 0x08, - 0x6c, 0xcb, 0x68, 0x39, 0xff, 0x25, 0x17, 0x9e, 0xc0, 0xaf, 0xfc, 0x2b, 0x83, 0x9f, 0xfe, 0x92, - 0x56, 0xfe, 0x36, 0x0f, 0x93, 0xf1, 0xdd, 0x18, 0xb9, 0x8c, 0x96, 0x7a, 0x5e, 0x46, 0x6f, 0xc2, - 0xcc, 0xae, 0xa3, 0x69, 0x5d, 0xee, 0x86, 0xd0, 0x8d, 0xb4, 0x7b, 0x99, 0xf4, 0x8a, 0x90, 0x9c, - 0x59, 0x4e, 0xe1, 0xc1, 0xa9, 0x92, 0x19, 0x17, 0xeb, 0xf9, 0x53, 0x5d, 0xac, 0x27, 0xee, 0x79, - 0x0b, 0x03, 0xdc, 0xf3, 0xa6, 0x5e, 0x92, 0x0f, 0x9d, 0xe2, 0x92, 0xfc, 0x34, 0xb7, 0xda, 0x29, - 0x49, 0xac, 0xe7, 0x23, 0xcb, 0x57, 0xe0, 0x82, 0x10, 0xa3, 0xfc, 0xc2, 0x59, 0xa7, 0x96, 0xa1, - 0x69, 0xc4, 0x5a, 0x72, 0x3a, 0x9d, 0xae, 0xfc, 0x1e, 0x8c, 0x47, 0x9f, 0x52, 0xb8, 0x2b, 0xed, - 0xbe, 0xe6, 0x10, 0x57, 0x7a, 0xa1, 0x95, 0x76, 0xc7, 0xb1, 0xcf, 0x21, 0xff, 0xa9, 0x04, 0xb3, - 0xe9, 0x4f, 0x26, 0x91, 0x06, 0xe3, 0x1d, 0xe5, 0x30, 0xfc, 0x8c, 0x55, 0x3a, 0xe5, 0x61, 0x0b, - 0xbf, 0x43, 0x5f, 0x8b, 0x60, 0xe1, 0x18, 0xb6, 0xfc, 0xa3, 0x04, 0x73, 0x19, 0xb7, 0xd7, 0x67, - 0x6b, 0x09, 0xfa, 0x18, 0x4a, 0x1d, 0xe5, 0xb0, 0xe1, 0x58, 0x6d, 0x72, 0xea, 0xe3, 0x25, 0x9e, - 0x31, 0xd6, 0x04, 0x0a, 0xf6, 0xf1, 0xe4, 0x2f, 0x25, 0x28, 0x67, 0x35, 0xfa, 0xe8, 0x56, 0xe4, - 0x9e, 0xfd, 0xd5, 0xd8, 0x3d, 0xfb, 0x54, 0x42, 0xee, 0x05, 0xdd, 0xb2, 0xff, 0xb3, 0x04, 0xb3, - 0xe9, 0x1f, 0x3c, 0xe8, 0xad, 0x88, 0x85, 0x95, 0x98, 0x85, 0x13, 0x31, 0x29, 0x61, 0xdf, 0x27, - 0x30, 0x2e, 0x3e, 0x8b, 0x04, 0x8c, 0xf0, 0xaa, 0x9c, 0x96, 0x2b, 0x05, 0x84, 0xf7, 0x19, 0xc0, - 0xd7, 0x2b, 0x3a, 0x86, 0x63, 0x68, 0xf2, 0x9f, 0xe5, 0x60, 0xa8, 0xd1, 0x54, 0x34, 0x72, 0x06, - 0x6d, 0xd6, 0x87, 0x91, 0x36, 0xab, 0xd7, 0xbf, 0x9c, 0x70, 0xab, 0x32, 0x3b, 0x2c, 0x1c, 0xeb, - 0xb0, 0xde, 0xe8, 0x0b, 0xed, 0xe4, 0xe6, 0xea, 0xb7, 0x60, 0xc4, 0x57, 0x3a, 0x58, 0xce, 0x97, - 0xff, 0x21, 0x07, 0xa3, 0x21, 0x15, 0x03, 0x56, 0x8c, 0xdd, 0x48, 0xa5, 0xed, 0xe7, 0x1f, 0xfd, - 0x42, 0xba, 0xaa, 0x5e, 0x6d, 0x75, 0x9f, 0x4c, 0x06, 0x8f, 0xe4, 0x92, 0x25, 0xf7, 0x3d, 0x18, - 0xa7, 0xfc, 0x1f, 0xe1, 0xfc, 0x43, 0xd9, 0x3c, 0x8f, 0x45, 0xff, 0xa1, 0xed, 0x56, 0x84, 0x8a, - 0x63, 0xdc, 0x17, 0xee, 0xc2, 0x58, 0x44, 0xd9, 0x40, 0x2f, 0x1e, 0xff, 0x4d, 0x82, 0x57, 0x7b, - 0x7e, 0x32, 0xa3, 0x7a, 0x64, 0x93, 0x54, 0x63, 0x9b, 0x64, 0x3e, 0x1b, 0xe0, 0xc5, 0xbd, 0x9c, - 0xa9, 0x5f, 0x7f, 0xfa, 0xc3, 0xfc, 0xb9, 0xef, 0x7e, 0x98, 0x3f, 0xf7, 0xfd, 0x0f, 0xf3, 0xe7, - 0xfe, 0xf8, 0x78, 0x5e, 0x7a, 0x7a, 0x3c, 0x2f, 0x7d, 0x77, 0x3c, 0x2f, 0x7d, 0x7f, 0x3c, 0x2f, - 0xfd, 0xef, 0xf1, 0xbc, 0xf4, 0x57, 0x3f, 0xce, 0x9f, 0xfb, 0xb8, 0x28, 0xe0, 0x7e, 0x11, 0x00, - 0x00, 0xff, 0xff, 0x26, 0xef, 0x73, 0xa6, 0xe7, 0x3c, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,6 @@ package k8s.io.api.extensions.v1beta1; import "k8s.io/api/core/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -31,6 +30,12 @@ // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +message AllowedCSIDriver { + // Name is the registered name of the CSI driver + optional string name = 1; +} + // AllowedFlexVolume represents a single Flexvolume that is allowed to be used. // Deprecated: use AllowedFlexVolume from policy API Group instead. message AllowedFlexVolume { @@ -45,7 +50,7 @@ // pathPrefix is the path prefix that the host volume must match. // It does not support `*`. // Trailing slashes are trimmed when validating the path prefix with a host path. - // + // // Examples: // `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would not allow `/food` or `/etc/foo` @@ -56,42 +61,17 @@ optional bool readOnly = 2; } -message CustomMetricCurrentStatus { - // Custom Metric name. - optional string name = 1; - - // Custom Metric value (average). - optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 2; -} - -message CustomMetricCurrentStatusList { - repeated CustomMetricCurrentStatus items = 1; -} - -// Alpha-level support for Custom Metrics in HPA (as annotations). -message CustomMetricTarget { - // Custom Metric name. - optional string name = 1; - - // Custom Metric value (average). - optional k8s.io.apimachinery.pkg.api.resource.Quantity value = 2; -} - -message CustomMetricTargetList { - repeated CustomMetricTarget items = 1; -} - // DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for // more information. // DaemonSet represents the configuration of a daemon set. message DaemonSet { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetSpec spec = 2; @@ -99,7 +79,7 @@ // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional DaemonSetStatus status = 3; } @@ -128,7 +108,7 @@ // DaemonSetList is a collection of daemon sets. message DaemonSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -335,6 +315,8 @@ // The number of old ReplicaSets to retain to allow rollback. // This is a pointer to distinguish between explicit zero and not specified. + // This is set to the max value of int32 (i.e. 2147483647) by default, which + // means "retaining all old RelicaSets". // +optional optional int32 revisionHistoryLimit = 6; @@ -495,19 +477,20 @@ // endpoints defined by a backend. An Ingress can be configured to give services // externally-reachable urls, load balance traffic, terminate SSL, offer name // based virtual hosting etc. +// DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information. message Ingress { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec is the desired state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional IngressSpec spec = 2; // Status is the current state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional IngressStatus status = 3; } @@ -524,7 +507,7 @@ // IngressList is a collection of Ingress. message IngressList { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -621,7 +604,7 @@ // NetworkPolicy describes what network traffic is allowed for a set of Pods message NetworkPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -666,7 +649,7 @@ // List of sources which should be able to access the pods selected for this rule. // Items in this list are combined using a logical OR operation. // If this field is empty or missing, this rule matches all sources (traffic not restricted by source). - // If this field is present and contains at least on item, this rule allows traffic only if the + // If this field is present and contains at least one item, this rule allows traffic only if the // traffic matches at least one item in the from list. // +optional repeated NetworkPolicyPeer from = 2; @@ -676,7 +659,7 @@ // Network Policy List is a list of NetworkPolicy objects. message NetworkPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -688,7 +671,7 @@ message NetworkPolicyPeer { // This is a label selector which selects Pods. This field follows standard label // selector semantics; if present but empty, it selects all pods. - // + // // If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects // the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. // Otherwise it selects the Pods matching PodSelector in the policy's own Namespace. @@ -697,7 +680,7 @@ // Selects Namespaces using cluster-scoped labels. This field follows standard label // selector semantics; if present but empty, it selects all namespaces. - // + // // If PodSelector is also set, then the NetworkPolicyPeer as a whole selects // the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. // Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector. @@ -712,7 +695,7 @@ // DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort. message NetworkPolicyPort { - // Optional. The protocol (TCP or UDP) which traffic must match. + // Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. // If not specified, this field defaults to TCP. // +optional optional string protocol = 1; @@ -756,7 +739,7 @@ repeated NetworkPolicyEgressRule egress = 3; // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -774,7 +757,7 @@ // Deprecated: use PodSecurityPolicy from policy API Group instead. message PodSecurityPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -787,7 +770,7 @@ // Deprecated: use PodSecurityPolicyList from policy API Group instead. message PodSecurityPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -847,6 +830,12 @@ // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. optional RunAsUserStrategyOptions runAsUser = 11; + // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. + // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the + // RunAsGroup feature gate to be enabled. + // +optional + optional RunAsGroupStrategyOptions runAsGroup = 22; + // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. optional SupplementalGroupsStrategyOptions supplementalGroups = 12; @@ -882,11 +871,16 @@ // +optional repeated AllowedFlexVolume allowedFlexVolumes = 18; + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. + // +optional + repeated AllowedCSIDriver allowedCSIDrivers = 23; + // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. // Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. - // + // // Examples: // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. @@ -896,12 +890,24 @@ // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - // + // // Examples: // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. // +optional repeated string forbiddenSysctls = 20; + + // AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. + // Empty or nil indicates that only the DefaultProcMountType may be used. + // This requires the ProcMountType feature flag to be enabled. + // +optional + repeated string allowedProcMountTypes = 21; + + // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. + // If this field is omitted, the pod's runtimeClassName field is unrestricted. + // Enforcement of this field depends on the RuntimeClass feature gate being enabled. + // +optional + optional RuntimeClassStrategyOptions runtimeClass = 24; } // DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for @@ -910,12 +916,12 @@ message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetSpec spec = 2; @@ -923,7 +929,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional ReplicaSetStatus status = 3; } @@ -952,7 +958,7 @@ // ReplicaSetList is a collection of ReplicaSets. message ReplicaSetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -1075,11 +1081,23 @@ // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new RC can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 2; } +// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. +// Deprecated: use RunAsGroupStrategyOptions from policy API Group instead. +message RunAsGroupStrategyOptions { + // rule is the strategy that will dictate the allowable RunAsGroup values that may be set. + optional string rule = 1; + + // ranges are the allowed ranges of gids that may be used. If you would like to force a single gid + // then supply a single range with the same start and end. Required for MustRunAs. + // +optional + repeated IDRange ranges = 2; +} + // RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. // Deprecated: use RunAsUserStrategyOptions from policy API Group instead. message RunAsUserStrategyOptions { @@ -1092,6 +1110,21 @@ repeated IDRange ranges = 2; } +// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses +// for a pod. +message RuntimeClassStrategyOptions { + // allowedRuntimeClassNames is a whitelist of RuntimeClass names that may be specified on a pod. + // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the + // list. An empty list requires the RuntimeClassName field to be unset. + repeated string allowedRuntimeClassNames = 1; + + // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. + // The default MUST be allowed by the allowedRuntimeClassNames list. + // A value of nil does not mutate the Pod. + // +optional + optional string defaultRuntimeClassName = 2; +} + // SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. // Deprecated: use SELinuxStrategyOptions from policy API Group instead. message SELinuxStrategyOptions { @@ -1106,15 +1139,15 @@ // represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional optional ScaleSpec spec = 2; - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional optional ScaleStatus status = 3; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,8 +18,7 @@ import ( appsv1beta1 "k8s.io/api/apps/v1beta1" - "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -50,22 +49,20 @@ TargetSelector string `json:"targetSelector,omitempty" protobuf:"bytes,3,opt,name=targetSelector"` } -// +genclient -// +genclient:noVerbs // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // represents a scaling request for a resource. type Scale struct { metav1.TypeMeta `json:",inline"` - // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata. + // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. // +optional Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only. // +optional Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -77,29 +74,6 @@ metav1.TypeMeta `json:",inline"` } -// Alpha-level support for Custom Metrics in HPA (as annotations). -type CustomMetricTarget struct { - // Custom Metric name. - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` - // Custom Metric value (average). - TargetValue resource.Quantity `json:"value" protobuf:"bytes,2,opt,name=value"` -} - -type CustomMetricTargetList struct { - Items []CustomMetricTarget `json:"items" protobuf:"bytes,1,rep,name=items"` -} - -type CustomMetricCurrentStatus struct { - // Custom Metric name. - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` - // Custom Metric value (average). - CurrentValue resource.Quantity `json:"value" protobuf:"bytes,2,opt,name=value"` -} - -type CustomMetricCurrentStatusList struct { - Items []CustomMetricCurrentStatus `json:"items" protobuf:"bytes,1,rep,name=items"` -} - // +genclient // +genclient:method=GetScale,verb=get,subresource=scale,result=Scale // +genclient:method=UpdateScale,verb=update,subresource=scale,input=Scale,result=Scale @@ -151,6 +125,8 @@ // The number of old ReplicaSets to retain to allow rollback. // This is a pointer to distinguish between explicit zero and not specified. + // This is set to the max value of int32 (i.e. 2147483647) by default, which + // means "retaining all old RelicaSets". // +optional RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,6,opt,name=revisionHistoryLimit"` @@ -253,7 +229,7 @@ // the rolling update starts, such that the total number of old and new pods do not exceed // 130% of desired pods. Once old pods have been killed, // new RC can be scaled up further, ensuring that total number of pods running - // at any time during the update is atmost 130% of desired pods. + // at any time during the update is at most 130% of desired pods. // +optional MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"` } @@ -513,12 +489,12 @@ type DaemonSet struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The desired behavior of this daemon set. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -526,7 +502,7 @@ // out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -550,7 +526,7 @@ type DaemonSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -565,20 +541,21 @@ // endpoints defined by a backend. An Ingress can be configured to give services // externally-reachable urls, load balance traffic, terminate SSL, offer name // based virtual hosting etc. +// DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information. type Ingress struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is the desired state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec IngressSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the current state of the Ingress. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status IngressStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -589,7 +566,7 @@ type IngressList struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -740,12 +717,12 @@ // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Spec ReplicaSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` @@ -753,7 +730,7 @@ // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status ReplicaSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -764,7 +741,7 @@ type ReplicaSetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -868,7 +845,7 @@ type PodSecurityPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -918,6 +895,11 @@ SELinux SELinuxStrategyOptions `json:"seLinux" protobuf:"bytes,10,opt,name=seLinux"` // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. RunAsUser RunAsUserStrategyOptions `json:"runAsUser" protobuf:"bytes,11,opt,name=runAsUser"` + // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. + // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the + // RunAsGroup feature gate to be enabled. + // +optional + RunAsGroup *RunAsGroupStrategyOptions `json:"runAsGroup,omitempty" protobuf:"bytes,22,opt,name=runAsGroup"` // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups" protobuf:"bytes,12,opt,name=supplementalGroups"` // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext. @@ -946,6 +928,10 @@ // is allowed in the "volumes" field. // +optional AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,18,rep,name=allowedFlexVolumes"` + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. + // +optional + AllowedCSIDrivers []AllowedCSIDriver `json:"allowedCSIDrivers,omitempty" protobuf:"bytes,23,rep,name=allowedCSIDrivers"` // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. @@ -965,6 +951,16 @@ // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. // +optional ForbiddenSysctls []string `json:"forbiddenSysctls,omitempty" protobuf:"bytes,20,rep,name=forbiddenSysctls"` + // AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. + // Empty or nil indicates that only the DefaultProcMountType may be used. + // This requires the ProcMountType feature flag to be enabled. + // +optional + AllowedProcMountTypes []v1.ProcMountType `json:"allowedProcMountTypes,omitempty" protobuf:"bytes,21,opt,name=allowedProcMountTypes"` + // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. + // If this field is omitted, the pod's runtimeClassName field is unrestricted. + // Enforcement of this field depends on the RuntimeClass feature gate being enabled. + // +optional + RuntimeClass *RuntimeClassStrategyOptions `json:"runtimeClass,omitempty" protobuf:"bytes,24,opt,name=runtimeClass"` } // AllowedHostPath defines the host volume conditions that will be enabled by a policy @@ -1011,6 +1007,7 @@ ConfigMap FSType = "configMap" Quobyte FSType = "quobyte" AzureDisk FSType = "azureDisk" + CSI FSType = "csi" All FSType = "*" ) @@ -1021,6 +1018,12 @@ Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` } +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +type AllowedCSIDriver struct { + // Name is the registered name of the CSI driver + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` +} + // HostPortRange defines a range of host ports that will be enabled by a policy // for pods to use. It requires both the start and end to be defined. // Deprecated: use HostPortRange from policy API Group instead. @@ -1067,6 +1070,17 @@ Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` } +// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. +// Deprecated: use RunAsGroupStrategyOptions from policy API Group instead. +type RunAsGroupStrategyOptions struct { + // rule is the strategy that will dictate the allowable RunAsGroup values that may be set. + Rule RunAsGroupStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=RunAsGroupStrategy"` + // ranges are the allowed ranges of gids that may be used. If you would like to force a single gid + // then supply a single range with the same start and end. Required for MustRunAs. + // +optional + Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` +} + // IDRange provides a min/max of an allowed range of IDs. // Deprecated: use IDRange from policy API Group instead. type IDRange struct { @@ -1093,6 +1107,23 @@ RunAsUserStrategyRunAsAny RunAsUserStrategy = "RunAsAny" ) +// RunAsGroupStrategy denotes strategy types for generating RunAsGroup values for a +// Security Context. +// Deprecated: use RunAsGroupStrategy from policy API Group instead. +type RunAsGroupStrategy string + +const ( + // RunAsGroupStrategyMayRunAs means that container does not need to run with a particular gid. + // However, when RunAsGroup are specified, they have to fall in the defined range. + RunAsGroupStrategyMayRunAs RunAsGroupStrategy = "MayRunAs" + // RunAsGroupStrategyMustRunAs means that container must run as a particular gid. + // Deprecated: use RunAsGroupStrategyMustRunAs from policy API Group instead. + RunAsGroupStrategyMustRunAs RunAsGroupStrategy = "MustRunAs" + // RunAsGroupStrategyRunAsAny means that container may make requests for any gid. + // Deprecated: use RunAsGroupStrategyRunAsAny from policy API Group instead. + RunAsGroupStrategyRunAsAny RunAsGroupStrategy = "RunAsAny" +) + // FSGroupStrategyOptions defines the strategy type and options used to create the strategy. // Deprecated: use FSGroupStrategyOptions from policy API Group instead. type FSGroupStrategyOptions struct { @@ -1145,6 +1176,25 @@ SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny" ) +// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses +// for a pod. +type RuntimeClassStrategyOptions struct { + // allowedRuntimeClassNames is a whitelist of RuntimeClass names that may be specified on a pod. + // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the + // list. An empty list requires the RuntimeClassName field to be unset. + AllowedRuntimeClassNames []string `json:"allowedRuntimeClassNames" protobuf:"bytes,1,rep,name=allowedRuntimeClassNames"` + // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. + // The default MUST be allowed by the allowedRuntimeClassNames list. + // A value of nil does not mutate the Pod. + // +optional + DefaultRuntimeClassName *string `json:"defaultRuntimeClassName,omitempty" protobuf:"bytes,2,opt,name=defaultRuntimeClassName"` +} + +// AllowAllRuntimeClassNames can be used as a value for the +// RuntimeClassStrategyOptions.AllowedRuntimeClassNames field and means that any RuntimeClassName is +// allowed. +const AllowAllRuntimeClassNames = "*" + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // PodSecurityPolicyList is a list of PodSecurityPolicy objects. @@ -1152,7 +1202,7 @@ type PodSecurityPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -1160,6 +1210,7 @@ Items []PodSecurityPolicy `json:"items" protobuf:"bytes,2,rep,name=items"` } +// +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. @@ -1167,7 +1218,7 @@ type NetworkPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -1218,7 +1269,7 @@ Egress []NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"` // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -1245,7 +1296,7 @@ // List of sources which should be able to access the pods selected for this rule. // Items in this list are combined using a logical OR operation. // If this field is empty or missing, this rule matches all sources (traffic not restricted by source). - // If this field is present and contains at least on item, this rule allows traffic only if the + // If this field is present and contains at least one item, this rule allows traffic only if the // traffic matches at least one item in the from list. // +optional From []NetworkPolicyPeer `json:"from,omitempty" protobuf:"bytes,2,rep,name=from"` @@ -1275,7 +1326,7 @@ // DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort. type NetworkPolicyPort struct { - // Optional. The protocol (TCP or UDP) which traffic must match. + // Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. // If not specified, this field defaults to TCP. // +optional Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"` @@ -1337,7 +1388,7 @@ type NetworkPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,6 +27,15 @@ // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_AllowedCSIDriver = map[string]string{ + "": "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", + "name": "Name is the registered name of the CSI driver", +} + +func (AllowedCSIDriver) SwaggerDoc() map[string]string { + return map_AllowedCSIDriver +} + var map_AllowedFlexVolume = map[string]string{ "": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.", "driver": "driver is the name of the Flexvolume driver.", @@ -46,30 +55,11 @@ return map_AllowedHostPath } -var map_CustomMetricCurrentStatus = map[string]string{ - "name": "Custom Metric name.", - "value": "Custom Metric value (average).", -} - -func (CustomMetricCurrentStatus) SwaggerDoc() map[string]string { - return map_CustomMetricCurrentStatus -} - -var map_CustomMetricTarget = map[string]string{ - "": "Alpha-level support for Custom Metrics in HPA (as annotations).", - "name": "Custom Metric name.", - "value": "Custom Metric value (average).", -} - -func (CustomMetricTarget) SwaggerDoc() map[string]string { - return map_CustomMetricTarget -} - var map_DaemonSet = map[string]string{ "": "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (DaemonSet) SwaggerDoc() map[string]string { @@ -91,7 +81,7 @@ var map_DaemonSetList = map[string]string{ "": "DaemonSetList is a collection of daemon sets.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "A list of daemon sets.", } @@ -114,7 +104,7 @@ } var map_DaemonSetStatus = map[string]string{ - "": "DaemonSetStatus represents the current status of a daemon set.", + "": "DaemonSetStatus represents the current status of a daemon set.", "currentNumberScheduled": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", "numberMisscheduled": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", "desiredNumberScheduled": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", @@ -193,7 +183,7 @@ "template": "Template describes the pods that will be created.", "strategy": "The deployment strategy to use to replace existing pods with new ones.", "minReadySeconds": "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "revisionHistoryLimit": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.", + "revisionHistoryLimit": "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"retaining all old RelicaSets\".", "paused": "Indicates that the deployment is paused and will not be processed by the deployment controller.", "rollbackTo": "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", "progressDeadlineSeconds": "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"no deadline\".", @@ -289,10 +279,10 @@ } var map_Ingress = map[string]string{ - "": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (Ingress) SwaggerDoc() map[string]string { @@ -311,7 +301,7 @@ var map_IngressList = map[string]string{ "": "IngressList is a collection of Ingress.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of Ingress.", } @@ -368,7 +358,7 @@ var map_NetworkPolicy = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Specification of the desired behavior for this NetworkPolicy.", } @@ -389,7 +379,7 @@ var map_NetworkPolicyIngressRule = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.", "ports": "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "from": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", + "from": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the from list.", } func (NetworkPolicyIngressRule) SwaggerDoc() map[string]string { @@ -398,7 +388,7 @@ var map_NetworkPolicyList = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is a list of schema objects.", } @@ -419,7 +409,7 @@ var map_NetworkPolicyPort = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.", - "protocol": "Optional. The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.", + "protocol": "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", "port": "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", } @@ -432,7 +422,7 @@ "podSelector": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", "ingress": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).", "egress": "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", + "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", } func (NetworkPolicySpec) SwaggerDoc() map[string]string { @@ -441,7 +431,7 @@ var map_PodSecurityPolicy = map[string]string{ "": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "spec defines the policy enforced.", } @@ -451,7 +441,7 @@ var map_PodSecurityPolicyList = map[string]string{ "": "PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is a list of schema objects.", } @@ -472,6 +462,7 @@ "hostIPC": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", "seLinux": "seLinux is the strategy that will dictate the allowable labels that may be set.", "runAsUser": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", + "runAsGroup": "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", "supplementalGroups": "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", "fsGroup": "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", "readOnlyRootFilesystem": "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", @@ -479,8 +470,11 @@ "allowPrivilegeEscalation": "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", "allowedHostPaths": "allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.", "allowedFlexVolumes": "allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", + "allowedCSIDrivers": "AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value indicates that any CSI driver can be used for inline ephemeral volumes.", "allowedUnsafeSysctls": "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", "forbiddenSysctls": "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", + "allowedProcMountTypes": "AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", + "runtimeClass": "runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. If this field is omitted, the pod's runtimeClassName field is unrestricted. Enforcement of this field depends on the RuntimeClass feature gate being enabled.", } func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { @@ -489,9 +483,9 @@ var map_ReplicaSet = map[string]string{ "": "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (ReplicaSet) SwaggerDoc() map[string]string { @@ -513,7 +507,7 @@ var map_ReplicaSetList = map[string]string{ "": "ReplicaSetList is a collection of ReplicaSets.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", } @@ -576,13 +570,23 @@ var map_RollingUpdateDeployment = map[string]string{ "": "Spec to control the desired behavior of rolling update.", "maxUnavailable": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - "maxSurge": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.", + "maxSurge": "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", } func (RollingUpdateDeployment) SwaggerDoc() map[string]string { return map_RollingUpdateDeployment } +var map_RunAsGroupStrategyOptions = map[string]string{ + "": "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsGroupStrategyOptions from policy API Group instead.", + "rule": "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", + "ranges": "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", +} + +func (RunAsGroupStrategyOptions) SwaggerDoc() map[string]string { + return map_RunAsGroupStrategyOptions +} + var map_RunAsUserStrategyOptions = map[string]string{ "": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.", "rule": "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", @@ -593,6 +597,16 @@ return map_RunAsUserStrategyOptions } +var map_RuntimeClassStrategyOptions = map[string]string{ + "": "RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses for a pod.", + "allowedRuntimeClassNames": "allowedRuntimeClassNames is a whitelist of RuntimeClass names that may be specified on a pod. A value of \"*\" means that any RuntimeClass name is allowed, and must be the only item in the list. An empty list requires the RuntimeClassName field to be unset.", + "defaultRuntimeClassName": "defaultRuntimeClassName is the default RuntimeClassName to set on the pod. The default MUST be allowed by the allowedRuntimeClassNames list. A value of nil does not mutate the Pod.", +} + +func (RuntimeClassStrategyOptions) SwaggerDoc() map[string]string { + return map_RuntimeClassStrategyOptions +} + var map_SELinuxStrategyOptions = map[string]string{ "": "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.", "rule": "rule is the strategy that will dictate the allowable labels that may be set.", @@ -605,9 +619,9 @@ var map_Scale = map[string]string{ "": "represents a scaling request for a resource.", - "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", + "metadata": "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + "spec": "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + "status": "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", } func (Scale) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,120 +21,56 @@ package v1beta1 import ( - core_v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { +func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { *out = *in return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedFlexVolume. -func (in *AllowedFlexVolume) DeepCopy() *AllowedFlexVolume { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. +func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { if in == nil { return nil } - out := new(AllowedFlexVolume) + out := new(AllowedCSIDriver) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AllowedHostPath) DeepCopyInto(out *AllowedHostPath) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedHostPath. -func (in *AllowedHostPath) DeepCopy() *AllowedHostPath { - if in == nil { - return nil - } - out := new(AllowedHostPath) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CustomMetricCurrentStatus) DeepCopyInto(out *CustomMetricCurrentStatus) { - *out = *in - out.CurrentValue = in.CurrentValue.DeepCopy() - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomMetricCurrentStatus. -func (in *CustomMetricCurrentStatus) DeepCopy() *CustomMetricCurrentStatus { - if in == nil { - return nil - } - out := new(CustomMetricCurrentStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CustomMetricCurrentStatusList) DeepCopyInto(out *CustomMetricCurrentStatusList) { - *out = *in - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]CustomMetricCurrentStatus, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomMetricCurrentStatusList. -func (in *CustomMetricCurrentStatusList) DeepCopy() *CustomMetricCurrentStatusList { - if in == nil { - return nil - } - out := new(CustomMetricCurrentStatusList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CustomMetricTarget) DeepCopyInto(out *CustomMetricTarget) { +func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { *out = *in - out.TargetValue = in.TargetValue.DeepCopy() return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomMetricTarget. -func (in *CustomMetricTarget) DeepCopy() *CustomMetricTarget { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedFlexVolume. +func (in *AllowedFlexVolume) DeepCopy() *AllowedFlexVolume { if in == nil { return nil } - out := new(CustomMetricTarget) + out := new(AllowedFlexVolume) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CustomMetricTargetList) DeepCopyInto(out *CustomMetricTargetList) { +func (in *AllowedHostPath) DeepCopyInto(out *AllowedHostPath) { *out = *in - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]CustomMetricTarget, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomMetricTargetList. -func (in *CustomMetricTargetList) DeepCopy() *CustomMetricTargetList { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedHostPath. +func (in *AllowedHostPath) DeepCopy() *AllowedHostPath { if in == nil { return nil } - out := new(CustomMetricTargetList) + out := new(AllowedHostPath) in.DeepCopyInto(out) return out } @@ -188,7 +124,7 @@ func (in *DaemonSetList) DeepCopyInto(out *DaemonSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]DaemonSet, len(*in)) @@ -222,23 +158,15 @@ *out = *in if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -258,12 +186,8 @@ *out = *in if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions @@ -290,12 +214,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDaemonSet) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDaemonSet) + (*in).DeepCopyInto(*out) } return } @@ -360,7 +280,7 @@ func (in *DeploymentList) DeepCopyInto(out *DeploymentList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Deployment, len(*in)) @@ -427,50 +347,30 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) in.Strategy.DeepCopyInto(&out.Strategy) if in.RevisionHistoryLimit != nil { in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.RollbackTo != nil { in, out := &in.RollbackTo, &out.RollbackTo - if *in == nil { - *out = nil - } else { - *out = new(RollbackConfig) - **out = **in - } + *out = new(RollbackConfig) + **out = **in } if in.ProgressDeadlineSeconds != nil { in, out := &in.ProgressDeadlineSeconds, &out.ProgressDeadlineSeconds - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -497,12 +397,8 @@ } if in.CollisionCount != nil { in, out := &in.CollisionCount, &out.CollisionCount - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } return } @@ -522,12 +418,8 @@ *out = *in if in.RollingUpdate != nil { in, out := &in.RollingUpdate, &out.RollingUpdate - if *in == nil { - *out = nil - } else { - *out = new(RollingUpdateDeployment) - (*in).DeepCopyInto(*out) - } + *out = new(RollingUpdateDeployment) + (*in).DeepCopyInto(*out) } return } @@ -703,7 +595,7 @@ func (in *IngressList) DeepCopyInto(out *IngressList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Ingress, len(*in)) @@ -754,12 +646,8 @@ *out = *in if in.HTTP != nil { in, out := &in.HTTP, &out.HTTP - if *in == nil { - *out = nil - } else { - *out = new(HTTPIngressRuleValue) - (*in).DeepCopyInto(*out) - } + *out = new(HTTPIngressRuleValue) + (*in).DeepCopyInto(*out) } return } @@ -779,12 +667,8 @@ *out = *in if in.Backend != nil { in, out := &in.Backend, &out.Backend - if *in == nil { - *out = nil - } else { - *out = new(IngressBackend) - **out = **in - } + *out = new(IngressBackend) + **out = **in } if in.TLS != nil { in, out := &in.TLS, &out.TLS @@ -942,7 +826,7 @@ func (in *NetworkPolicyList) DeepCopyInto(out *NetworkPolicyList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]NetworkPolicy, len(*in)) @@ -976,30 +860,18 @@ *out = *in if in.PodSelector != nil { in, out := &in.PodSelector, &out.PodSelector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.NamespaceSelector != nil { in, out := &in.NamespaceSelector, &out.NamespaceSelector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.IPBlock != nil { in, out := &in.IPBlock, &out.IPBlock - if *in == nil { - *out = nil - } else { - *out = new(IPBlock) - (*in).DeepCopyInto(*out) - } + *out = new(IPBlock) + (*in).DeepCopyInto(*out) } return } @@ -1019,21 +891,13 @@ *out = *in if in.Protocol != nil { in, out := &in.Protocol, &out.Protocol - if *in == nil { - *out = nil - } else { - *out = new(core_v1.Protocol) - **out = **in - } + *out = new(corev1.Protocol) + **out = **in } if in.Port != nil { in, out := &in.Port, &out.Port - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -1115,7 +979,7 @@ func (in *PodSecurityPolicyList) DeepCopyInto(out *PodSecurityPolicyList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PodSecurityPolicy, len(*in)) @@ -1149,17 +1013,17 @@ *out = *in if in.DefaultAddCapabilities != nil { in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]core_v1.Capability, len(*in)) + *out = make([]corev1.Capability, len(*in)) copy(*out, *in) } if in.RequiredDropCapabilities != nil { in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]core_v1.Capability, len(*in)) + *out = make([]corev1.Capability, len(*in)) copy(*out, *in) } if in.AllowedCapabilities != nil { in, out := &in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]core_v1.Capability, len(*in)) + *out = make([]corev1.Capability, len(*in)) copy(*out, *in) } if in.Volumes != nil { @@ -1174,25 +1038,22 @@ } in.SELinux.DeepCopyInto(&out.SELinux) in.RunAsUser.DeepCopyInto(&out.RunAsUser) + if in.RunAsGroup != nil { + in, out := &in.RunAsGroup, &out.RunAsGroup + *out = new(RunAsGroupStrategyOptions) + (*in).DeepCopyInto(*out) + } in.SupplementalGroups.DeepCopyInto(&out.SupplementalGroups) in.FSGroup.DeepCopyInto(&out.FSGroup) if in.DefaultAllowPrivilegeEscalation != nil { in, out := &in.DefaultAllowPrivilegeEscalation, &out.DefaultAllowPrivilegeEscalation - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.AllowPrivilegeEscalation != nil { in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.AllowedHostPaths != nil { in, out := &in.AllowedHostPaths, &out.AllowedHostPaths @@ -1204,6 +1065,11 @@ *out = make([]AllowedFlexVolume, len(*in)) copy(*out, *in) } + if in.AllowedCSIDrivers != nil { + in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers + *out = make([]AllowedCSIDriver, len(*in)) + copy(*out, *in) + } if in.AllowedUnsafeSysctls != nil { in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls *out = make([]string, len(*in)) @@ -1214,6 +1080,16 @@ *out = make([]string, len(*in)) copy(*out, *in) } + if in.AllowedProcMountTypes != nil { + in, out := &in.AllowedProcMountTypes, &out.AllowedProcMountTypes + *out = make([]corev1.ProcMountType, len(*in)) + copy(*out, *in) + } + if in.RuntimeClass != nil { + in, out := &in.RuntimeClass, &out.RuntimeClass + *out = new(RuntimeClassStrategyOptions) + (*in).DeepCopyInto(*out) + } return } @@ -1276,7 +1152,7 @@ func (in *ReplicaSetList) DeepCopyInto(out *ReplicaSetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ReplicaSet, len(*in)) @@ -1310,21 +1186,13 @@ *out = *in if in.Replicas != nil { in, out := &in.Replicas, &out.Replicas - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } + *out = new(int32) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } in.Template.DeepCopyInto(&out.Template) return @@ -1409,12 +1277,8 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -1434,21 +1298,13 @@ *out = *in if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } if in.MaxSurge != nil { in, out := &in.MaxSurge, &out.MaxSurge - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -1464,6 +1320,27 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RunAsGroupStrategyOptions) DeepCopyInto(out *RunAsGroupStrategyOptions) { + *out = *in + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsGroupStrategyOptions. +func (in *RunAsGroupStrategyOptions) DeepCopy() *RunAsGroupStrategyOptions { + if in == nil { + return nil + } + out := new(RunAsGroupStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RunAsUserStrategyOptions) DeepCopyInto(out *RunAsUserStrategyOptions) { *out = *in if in.Ranges != nil { @@ -1485,16 +1362,38 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassStrategyOptions) DeepCopyInto(out *RuntimeClassStrategyOptions) { + *out = *in + if in.AllowedRuntimeClassNames != nil { + in, out := &in.AllowedRuntimeClassNames, &out.AllowedRuntimeClassNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.DefaultRuntimeClassName != nil { + in, out := &in.DefaultRuntimeClassName, &out.DefaultRuntimeClassName + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassStrategyOptions. +func (in *RuntimeClassStrategyOptions) DeepCopy() *RuntimeClassStrategyOptions { + if in == nil { + return nil + } + out := new(RuntimeClassStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SELinuxStrategyOptions) DeepCopyInto(out *SELinuxStrategyOptions) { *out = *in if in.SELinuxOptions != nil { in, out := &in.SELinuxOptions, &out.SELinuxOptions - if *in == nil { - *out = nil - } else { - *out = new(core_v1.SELinuxOptions) - **out = **in - } + *out = new(corev1.SELinuxOptions) + **out = **in } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,8 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=networking.k8s.io + package v1 // import "k8s.io/api/networking/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,42 +14,28 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/networking/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/networking/v1/generated.proto - - It has these top-level messages: - IPBlock - NetworkPolicy - NetworkPolicyEgressRule - NetworkPolicyIngressRule - NetworkPolicyList - NetworkPolicyPeer - NetworkPolicyPort - NetworkPolicySpec -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" + proto "github.com/gogo/protobuf/proto" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import strings "strings" -import reflect "reflect" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import io "io" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -62,39 +48,229 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *IPBlock) Reset() { *m = IPBlock{} } -func (*IPBlock) ProtoMessage() {} -func (*IPBlock) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } -func (*NetworkPolicy) ProtoMessage() {} -func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *NetworkPolicyEgressRule) Reset() { *m = NetworkPolicyEgressRule{} } -func (*NetworkPolicyEgressRule) ProtoMessage() {} -func (*NetworkPolicyEgressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (m *IPBlock) Reset() { *m = IPBlock{} } +func (*IPBlock) ProtoMessage() {} +func (*IPBlock) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{0} +} +func (m *IPBlock) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IPBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IPBlock) XXX_Merge(src proto.Message) { + xxx_messageInfo_IPBlock.Merge(m, src) +} +func (m *IPBlock) XXX_Size() int { + return m.Size() +} +func (m *IPBlock) XXX_DiscardUnknown() { + xxx_messageInfo_IPBlock.DiscardUnknown(m) +} + +var xxx_messageInfo_IPBlock proto.InternalMessageInfo + +func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } +func (*NetworkPolicy) ProtoMessage() {} +func (*NetworkPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{1} +} +func (m *NetworkPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicy.Merge(m, src) +} +func (m *NetworkPolicy) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicy proto.InternalMessageInfo + +func (m *NetworkPolicyEgressRule) Reset() { *m = NetworkPolicyEgressRule{} } +func (*NetworkPolicyEgressRule) ProtoMessage() {} +func (*NetworkPolicyEgressRule) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{2} +} +func (m *NetworkPolicyEgressRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyEgressRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyEgressRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyEgressRule.Merge(m, src) +} +func (m *NetworkPolicyEgressRule) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyEgressRule) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyEgressRule.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyEgressRule proto.InternalMessageInfo func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } func (*NetworkPolicyIngressRule) ProtoMessage() {} func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{3} + return fileDescriptor_1c72867a70a7cc90, []int{3} +} +func (m *NetworkPolicyIngressRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyIngressRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyIngressRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyIngressRule.Merge(m, src) +} +func (m *NetworkPolicyIngressRule) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyIngressRule) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyIngressRule.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyIngressRule proto.InternalMessageInfo + +func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } +func (*NetworkPolicyList) ProtoMessage() {} +func (*NetworkPolicyList) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{4} +} +func (m *NetworkPolicyList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyList.Merge(m, src) +} +func (m *NetworkPolicyList) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyList) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyList.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyList proto.InternalMessageInfo + +func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } +func (*NetworkPolicyPeer) ProtoMessage() {} +func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{5} } +func (m *NetworkPolicyPeer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyPeer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyPeer) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyPeer.Merge(m, src) +} +func (m *NetworkPolicyPeer) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyPeer) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyPeer.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyPeer proto.InternalMessageInfo -func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } -func (*NetworkPolicyList) ProtoMessage() {} -func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } +func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } +func (*NetworkPolicyPort) ProtoMessage() {} +func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{6} +} +func (m *NetworkPolicyPort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicyPort) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyPort.Merge(m, src) +} +func (m *NetworkPolicyPort) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyPort) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyPort.DiscardUnknown(m) +} -func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } -func (*NetworkPolicyPeer) ProtoMessage() {} -func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +var xxx_messageInfo_NetworkPolicyPort proto.InternalMessageInfo -func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } -func (*NetworkPolicyPort) ProtoMessage() {} -func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } +func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } +func (*NetworkPolicySpec) ProtoMessage() {} +func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{7} +} +func (m *NetworkPolicySpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetworkPolicySpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicySpec.Merge(m, src) +} +func (m *NetworkPolicySpec) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicySpec) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicySpec.DiscardUnknown(m) +} -func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } -func (*NetworkPolicySpec) ProtoMessage() {} -func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +var xxx_messageInfo_NetworkPolicySpec proto.InternalMessageInfo func init() { proto.RegisterType((*IPBlock)(nil), "k8s.io.api.networking.v1.IPBlock") @@ -106,10 +282,70 @@ proto.RegisterType((*NetworkPolicyPort)(nil), "k8s.io.api.networking.v1.NetworkPolicyPort") proto.RegisterType((*NetworkPolicySpec)(nil), "k8s.io.api.networking.v1.NetworkPolicySpec") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/networking/v1/generated.proto", fileDescriptor_1c72867a70a7cc90) +} + +var fileDescriptor_1c72867a70a7cc90 = []byte{ + // 804 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcf, 0x8f, 0xdb, 0x44, + 0x14, 0x8e, 0x9d, 0x6c, 0x92, 0x4e, 0x28, 0x65, 0x07, 0x21, 0xac, 0x45, 0xd8, 0xc1, 0x17, 0x56, + 0xaa, 0x18, 0x93, 0x16, 0x21, 0x6e, 0x08, 0x43, 0x29, 0x91, 0xba, 0xbb, 0xd1, 0x6c, 0x2f, 0x20, + 0x90, 0x70, 0x9c, 0x59, 0xef, 0x34, 0xb1, 0xc7, 0x1a, 0x4f, 0x42, 0xf7, 0xc6, 0x9f, 0xc0, 0x1f, + 0xc2, 0x91, 0x1b, 0x87, 0x72, 0xdc, 0x63, 0x8f, 0x3d, 0x59, 0xac, 0xf9, 0x2f, 0xf6, 0x84, 0x66, + 0x3c, 0x89, 0xf3, 0xa3, 0x11, 0xd9, 0x15, 0xbd, 0x65, 0xde, 0xbc, 0xef, 0x7b, 0xf3, 0xde, 0xfb, + 0xf2, 0x19, 0x7c, 0x35, 0xfe, 0x22, 0x43, 0x94, 0x79, 0xe3, 0xe9, 0x90, 0xf0, 0x84, 0x08, 0x92, + 0x79, 0x33, 0x92, 0x8c, 0x18, 0xf7, 0xf4, 0x45, 0x90, 0x52, 0x2f, 0x21, 0xe2, 0x17, 0xc6, 0xc7, + 0x34, 0x89, 0xbc, 0x59, 0xcf, 0x8b, 0x48, 0x42, 0x78, 0x20, 0xc8, 0x08, 0xa5, 0x9c, 0x09, 0x06, + 0xad, 0x32, 0x13, 0x05, 0x29, 0x45, 0x55, 0x26, 0x9a, 0xf5, 0x0e, 0x3e, 0x89, 0xa8, 0x38, 0x9f, + 0x0e, 0x51, 0xc8, 0x62, 0x2f, 0x62, 0x11, 0xf3, 0x14, 0x60, 0x38, 0x3d, 0x53, 0x27, 0x75, 0x50, + 0xbf, 0x4a, 0xa2, 0x03, 0x77, 0xa9, 0x64, 0xc8, 0x38, 0x79, 0x4d, 0xb1, 0x83, 0xcf, 0xaa, 0x9c, + 0x38, 0x08, 0xcf, 0x69, 0x42, 0xf8, 0x85, 0x97, 0x8e, 0x23, 0x19, 0xc8, 0xbc, 0x98, 0x88, 0xe0, + 0x75, 0x28, 0x6f, 0x1b, 0x8a, 0x4f, 0x13, 0x41, 0x63, 0xb2, 0x01, 0xf8, 0xfc, 0xbf, 0x00, 0x59, + 0x78, 0x4e, 0xe2, 0x60, 0x03, 0xf7, 0x70, 0x1b, 0x6e, 0x2a, 0xe8, 0xc4, 0xa3, 0x89, 0xc8, 0x04, + 0x5f, 0x07, 0xb9, 0x27, 0xa0, 0xd5, 0x1f, 0xf8, 0x13, 0x16, 0x8e, 0x61, 0x17, 0x34, 0x42, 0x3a, + 0xe2, 0x96, 0xd1, 0x35, 0x0e, 0xef, 0xf8, 0x6f, 0x5d, 0xe6, 0x4e, 0xad, 0xc8, 0x9d, 0xc6, 0xd7, + 0xfd, 0x6f, 0x30, 0x56, 0x37, 0xd0, 0x05, 0x4d, 0xf2, 0x3c, 0x24, 0xa9, 0xb0, 0xcc, 0x6e, 0xfd, + 0xf0, 0x8e, 0x0f, 0x8a, 0xdc, 0x69, 0x3e, 0x52, 0x11, 0xac, 0x6f, 0xdc, 0xbf, 0x0c, 0x70, 0xf7, + 0xb8, 0xdc, 0xc4, 0x80, 0x4d, 0x68, 0x78, 0x01, 0x7f, 0x06, 0x6d, 0x39, 0x9b, 0x51, 0x20, 0x02, + 0xc5, 0xdd, 0x79, 0xf0, 0x29, 0xaa, 0xd6, 0xb6, 0x78, 0x2a, 0x4a, 0xc7, 0x91, 0x0c, 0x64, 0x48, + 0x66, 0xa3, 0x59, 0x0f, 0x9d, 0x0c, 0x9f, 0x91, 0x50, 0x1c, 0x11, 0x11, 0xf8, 0x50, 0xbf, 0x06, + 0x54, 0x31, 0xbc, 0x60, 0x85, 0x47, 0xa0, 0x91, 0xa5, 0x24, 0xb4, 0x4c, 0xc5, 0x7e, 0x1f, 0x6d, + 0x13, 0x05, 0x5a, 0x79, 0xd8, 0x69, 0x4a, 0xc2, 0xaa, 0x4d, 0x79, 0xc2, 0x8a, 0xc6, 0xfd, 0xc3, + 0x00, 0xef, 0xaf, 0x64, 0x3e, 0x8a, 0x38, 0xc9, 0x32, 0x3c, 0x9d, 0x10, 0x38, 0x00, 0x7b, 0x29, + 0xe3, 0x22, 0xb3, 0x8c, 0x6e, 0xfd, 0x06, 0xb5, 0x06, 0x8c, 0x0b, 0xff, 0xae, 0xae, 0xb5, 0x27, + 0x4f, 0x19, 0x2e, 0x89, 0xe0, 0x63, 0x60, 0x0a, 0xa6, 0x06, 0x7a, 0x03, 0x3a, 0x42, 0xb8, 0x0f, + 0x34, 0x9d, 0xf9, 0x94, 0x61, 0x53, 0x30, 0xf7, 0x4f, 0x03, 0x58, 0x2b, 0x59, 0xfd, 0xe4, 0x4d, + 0xbe, 0xfb, 0x08, 0x34, 0xce, 0x38, 0x8b, 0x6f, 0xf3, 0xf2, 0xc5, 0xd0, 0xbf, 0xe5, 0x2c, 0xc6, + 0x8a, 0xc6, 0x7d, 0x61, 0x80, 0xfd, 0x95, 0xcc, 0x27, 0x34, 0x13, 0xf0, 0xc7, 0x0d, 0xed, 0xa0, + 0xdd, 0xb4, 0x23, 0xd1, 0x4a, 0x39, 0xef, 0xe8, 0x5a, 0xed, 0x79, 0x64, 0x49, 0x37, 0x4f, 0xc0, + 0x1e, 0x15, 0x24, 0xce, 0x74, 0x0f, 0x1f, 0xef, 0xd8, 0x43, 0x35, 0x90, 0xbe, 0x44, 0xe3, 0x92, + 0xc4, 0x7d, 0x61, 0xae, 0x75, 0x20, 0x7b, 0x85, 0x67, 0xa0, 0x93, 0xb2, 0xd1, 0x29, 0x99, 0x90, + 0x50, 0x30, 0xae, 0x9b, 0x78, 0xb8, 0x63, 0x13, 0xc1, 0x90, 0x4c, 0xe6, 0x50, 0xff, 0x5e, 0x91, + 0x3b, 0x9d, 0x41, 0xc5, 0x85, 0x97, 0x89, 0xe1, 0x73, 0xb0, 0x9f, 0x04, 0x31, 0xc9, 0xd2, 0x20, + 0x24, 0x8b, 0x6a, 0xe6, 0xed, 0xab, 0xbd, 0x57, 0xe4, 0xce, 0xfe, 0xf1, 0x3a, 0x23, 0xde, 0x2c, + 0x02, 0xbf, 0x03, 0x2d, 0x9a, 0x2a, 0x0b, 0xb1, 0xea, 0xaa, 0xde, 0x47, 0xdb, 0xe7, 0xa8, 0xbd, + 0xc6, 0xef, 0x14, 0xb9, 0x33, 0x37, 0x1e, 0x3c, 0x87, 0xbb, 0xbf, 0xaf, 0x6b, 0x40, 0x0a, 0x0e, + 0x3e, 0x06, 0x6d, 0xe5, 0x55, 0x21, 0x9b, 0x68, 0x6f, 0xba, 0x2f, 0xf7, 0x39, 0xd0, 0xb1, 0xeb, + 0xdc, 0xf9, 0x60, 0xd3, 0xbc, 0xd1, 0xfc, 0x1a, 0x2f, 0xc0, 0xf0, 0x18, 0x34, 0xa4, 0x74, 0xf5, + 0x54, 0xb6, 0x9b, 0x90, 0xf4, 0x4b, 0x54, 0xfa, 0x25, 0xea, 0x27, 0xe2, 0x84, 0x9f, 0x0a, 0x4e, + 0x93, 0xc8, 0x6f, 0x4b, 0xc9, 0xca, 0x27, 0x61, 0xc5, 0xe3, 0x5e, 0xaf, 0x2f, 0x5c, 0x7a, 0x08, + 0x7c, 0xf6, 0xbf, 0x2d, 0xfc, 0x5d, 0x2d, 0xb3, 0xed, 0x4b, 0xff, 0x09, 0xb4, 0x68, 0xf9, 0x27, + 0xd7, 0x12, 0x7e, 0xb0, 0xa3, 0x84, 0x97, 0xac, 0xc1, 0xbf, 0xa7, 0xcb, 0xb4, 0xe6, 0xc1, 0x39, + 0x27, 0xfc, 0x1e, 0x34, 0x49, 0xc9, 0x5e, 0x57, 0xec, 0xbd, 0x1d, 0xd9, 0x2b, 0xbf, 0xf4, 0xdf, + 0xd6, 0xe4, 0x4d, 0x1d, 0xd3, 0x84, 0xf0, 0x4b, 0x39, 0x25, 0x99, 0xfb, 0xf4, 0x22, 0x25, 0x99, + 0xd5, 0x50, 0xdf, 0x93, 0x0f, 0xcb, 0x66, 0x17, 0xe1, 0xeb, 0xdc, 0x01, 0xd5, 0x11, 0x2f, 0x23, + 0xfc, 0xc3, 0xcb, 0x2b, 0xbb, 0xf6, 0xf2, 0xca, 0xae, 0xbd, 0xba, 0xb2, 0x6b, 0xbf, 0x16, 0xb6, + 0x71, 0x59, 0xd8, 0xc6, 0xcb, 0xc2, 0x36, 0x5e, 0x15, 0xb6, 0xf1, 0x77, 0x61, 0x1b, 0xbf, 0xfd, + 0x63, 0xd7, 0x7e, 0x30, 0x67, 0xbd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x7b, 0xc9, 0x59, + 0x67, 0x08, 0x00, 0x00, +} + func (m *IPBlock) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -117,36 +353,36 @@ } func (m *IPBlock) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IPBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) - i += copy(dAtA[i:], m.CIDR) if len(m.Except) > 0 { - for _, s := range m.Except { + for iNdEx := len(m.Except) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Except[iNdEx]) + copy(dAtA[i:], m.Except[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Except[iNdEx]))) + i-- dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + i -= len(m.CIDR) + copy(dAtA[i:], m.CIDR) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NetworkPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -154,33 +390,42 @@ } func (m *NetworkPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NetworkPolicyEgressRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -188,41 +433,50 @@ } func (m *NetworkPolicyEgressRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyEgressRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.To) > 0 { + for iNdEx := len(m.To) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.To[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if len(m.To) > 0 { - for _, msg := range m.To { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicyIngressRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -230,41 +484,50 @@ } func (m *NetworkPolicyIngressRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyIngressRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Ports) > 0 { - for _, msg := range m.Ports { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.From) > 0 { + for iNdEx := len(m.From) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.From[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if len(m.From) > 0 { - for _, msg := range m.From { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Ports) > 0 { + for iNdEx := len(m.Ports) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicyList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -272,37 +535,46 @@ } func (m *NetworkPolicyList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n3, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *NetworkPolicyPeer) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -310,47 +582,58 @@ } func (m *NetworkPolicyPeer) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyPeer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.PodSelector != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodSelector.Size())) - n4, err := m.PodSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.IPBlock != nil { + { + size, err := m.IPBlock.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- + dAtA[i] = 0x1a } if m.NamespaceSelector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NamespaceSelector.Size())) - n5, err := m.NamespaceSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.NamespaceSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 + i-- + dAtA[i] = 0x12 } - if m.IPBlock != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.IPBlock.Size())) - n6, err := m.IPBlock.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.PodSelector != nil { + { + size, err := m.PodSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n6 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *NetworkPolicyPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -358,33 +641,41 @@ } func (m *NetworkPolicyPort) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Protocol != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Protocol))) - i += copy(dAtA[i:], *m.Protocol) - } if m.Port != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n7, err := m.Port.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 + i-- + dAtA[i] = 0x12 } - return i, nil + if m.Protocol != nil { + i -= len(*m.Protocol) + copy(dAtA[i:], *m.Protocol) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Protocol))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *NetworkPolicySpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -392,88 +683,80 @@ } func (m *NetworkPolicySpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodSelector.Size())) - n8, err := m.PodSelector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - if len(m.Ingress) > 0 { - for _, msg := range m.Ingress { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.PolicyTypes) > 0 { + for iNdEx := len(m.PolicyTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.PolicyTypes[iNdEx]) + copy(dAtA[i:], m.PolicyTypes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PolicyTypes[iNdEx]))) + i-- + dAtA[i] = 0x22 } } if len(m.Egress) > 0 { - for _, msg := range m.Egress { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Egress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Egress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x1a } } - if len(m.PolicyTypes) > 0 { - for _, s := range m.PolicyTypes { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ + if len(m.Ingress) > 0 { + for iNdEx := len(m.Ingress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ingress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.PodSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *IPBlock) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.CIDR) @@ -488,6 +771,9 @@ } func (m *NetworkPolicy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -498,6 +784,9 @@ } func (m *NetworkPolicyEgressRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Ports) > 0 { @@ -516,6 +805,9 @@ } func (m *NetworkPolicyIngressRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Ports) > 0 { @@ -534,6 +826,9 @@ } func (m *NetworkPolicyList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -548,6 +843,9 @@ } func (m *NetworkPolicyPeer) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.PodSelector != nil { @@ -566,6 +864,9 @@ } func (m *NetworkPolicyPort) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Protocol != nil { @@ -580,6 +881,9 @@ } func (m *NetworkPolicySpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.PodSelector.Size() @@ -606,14 +910,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -634,7 +931,7 @@ return "nil" } s := strings.Join([]string{`&NetworkPolicy{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NetworkPolicySpec", "NetworkPolicySpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -644,9 +941,19 @@ if this == nil { return "nil" } + repeatedStringForPorts := "[]NetworkPolicyPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + repeatedStringForTo := "[]NetworkPolicyPeer{" + for _, f := range this.To { + repeatedStringForTo += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + "," + } + repeatedStringForTo += "}" s := strings.Join([]string{`&NetworkPolicyEgressRule{`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + `,`, - `To:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.To), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `To:` + repeatedStringForTo + `,`, `}`, }, "") return s @@ -655,9 +962,19 @@ if this == nil { return "nil" } + repeatedStringForPorts := "[]NetworkPolicyPort{" + for _, f := range this.Ports { + repeatedStringForPorts += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + "," + } + repeatedStringForPorts += "}" + repeatedStringForFrom := "[]NetworkPolicyPeer{" + for _, f := range this.From { + repeatedStringForFrom += strings.Replace(strings.Replace(f.String(), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + "," + } + repeatedStringForFrom += "}" s := strings.Join([]string{`&NetworkPolicyIngressRule{`, - `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + `,`, - `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + `,`, + `Ports:` + repeatedStringForPorts + `,`, + `From:` + repeatedStringForFrom + `,`, `}`, }, "") return s @@ -666,9 +983,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]NetworkPolicy{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "NetworkPolicy", "NetworkPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&NetworkPolicyList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "NetworkPolicy", "NetworkPolicy", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -678,9 +1000,9 @@ return "nil" } s := strings.Join([]string{`&NetworkPolicyPeer{`, - `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `IPBlock:` + strings.Replace(fmt.Sprintf("%v", this.IPBlock), "IPBlock", "IPBlock", 1) + `,`, + `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `IPBlock:` + strings.Replace(this.IPBlock.String(), "IPBlock", "IPBlock", 1) + `,`, `}`, }, "") return s @@ -691,7 +1013,7 @@ } s := strings.Join([]string{`&NetworkPolicyPort{`, `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, - `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -700,10 +1022,20 @@ if this == nil { return "nil" } + repeatedStringForIngress := "[]NetworkPolicyIngressRule{" + for _, f := range this.Ingress { + repeatedStringForIngress += strings.Replace(strings.Replace(f.String(), "NetworkPolicyIngressRule", "NetworkPolicyIngressRule", 1), `&`, ``, 1) + "," + } + repeatedStringForIngress += "}" + repeatedStringForEgress := "[]NetworkPolicyEgressRule{" + for _, f := range this.Egress { + repeatedStringForEgress += strings.Replace(strings.Replace(f.String(), "NetworkPolicyEgressRule", "NetworkPolicyEgressRule", 1), `&`, ``, 1) + "," + } + repeatedStringForEgress += "}" s := strings.Join([]string{`&NetworkPolicySpec{`, - `PodSelector:` + strings.Replace(strings.Replace(this.PodSelector.String(), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1), `&`, ``, 1) + `,`, - `Ingress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ingress), "NetworkPolicyIngressRule", "NetworkPolicyIngressRule", 1), `&`, ``, 1) + `,`, - `Egress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Egress), "NetworkPolicyEgressRule", "NetworkPolicyEgressRule", 1), `&`, ``, 1) + `,`, + `PodSelector:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "v1.LabelSelector", 1), `&`, ``, 1) + `,`, + `Ingress:` + repeatedStringForIngress + `,`, + `Egress:` + repeatedStringForEgress + `,`, `PolicyTypes:` + fmt.Sprintf("%v", this.PolicyTypes) + `,`, `}`, }, "") @@ -732,7 +1064,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -760,7 +1092,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -770,6 +1102,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -789,7 +1124,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -799,6 +1134,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -813,6 +1151,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -840,7 +1181,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -868,7 +1209,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -877,6 +1218,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -898,7 +1242,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -907,6 +1251,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -923,6 +1270,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -950,7 +1300,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -978,7 +1328,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -987,6 +1337,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1009,7 +1362,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1018,6 +1371,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1035,6 +1391,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1062,7 +1421,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1090,7 +1449,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1099,6 +1458,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1121,7 +1483,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1130,6 +1492,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1147,6 +1512,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1174,7 +1542,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1202,7 +1570,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1211,6 +1579,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1232,7 +1603,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1241,6 +1612,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1258,6 +1632,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1285,7 +1662,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1313,7 +1690,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1322,11 +1699,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.PodSelector == nil { - m.PodSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.PodSelector = &v1.LabelSelector{} } if err := m.PodSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1346,7 +1726,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1355,11 +1735,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.NamespaceSelector == nil { - m.NamespaceSelector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + m.NamespaceSelector = &v1.LabelSelector{} } if err := m.NamespaceSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1379,7 +1762,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1388,6 +1771,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1407,6 +1793,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1434,7 +1823,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1462,7 +1851,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1472,6 +1861,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1492,7 +1884,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1501,11 +1893,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.Port == nil { - m.Port = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + m.Port = &intstr.IntOrString{} } if err := m.Port.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1520,6 +1915,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1547,7 +1945,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1575,7 +1973,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1584,6 +1982,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1605,7 +2006,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1614,6 +2015,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1636,7 +2040,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1645,6 +2049,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1667,7 +2074,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1677,6 +2084,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1691,6 +2101,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1757,10 +2170,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1789,6 +2205,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1807,62 +2226,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/networking/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 804 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcf, 0x8f, 0xdb, 0x44, - 0x14, 0x8e, 0x9d, 0x6c, 0x92, 0x4e, 0x28, 0x65, 0x07, 0x21, 0xac, 0x45, 0xd8, 0xc1, 0x17, 0x56, - 0xaa, 0x18, 0x93, 0x16, 0x21, 0x6e, 0x08, 0x43, 0x29, 0x91, 0xba, 0xbb, 0xd1, 0x6c, 0x2f, 0x20, - 0x90, 0x70, 0x9c, 0x59, 0xef, 0x34, 0xb1, 0xc7, 0x1a, 0x4f, 0x42, 0xf7, 0xc6, 0x9f, 0xc0, 0x1f, - 0xc2, 0x91, 0x1b, 0x87, 0x72, 0xdc, 0x63, 0x8f, 0x3d, 0x59, 0xac, 0xf9, 0x2f, 0xf6, 0x84, 0x66, - 0x3c, 0x89, 0xf3, 0xa3, 0x11, 0xd9, 0x15, 0xbd, 0x65, 0xde, 0xbc, 0xef, 0x7b, 0xf3, 0xde, 0xfb, - 0xf2, 0x19, 0x7c, 0x35, 0xfe, 0x22, 0x43, 0x94, 0x79, 0xe3, 0xe9, 0x90, 0xf0, 0x84, 0x08, 0x92, - 0x79, 0x33, 0x92, 0x8c, 0x18, 0xf7, 0xf4, 0x45, 0x90, 0x52, 0x2f, 0x21, 0xe2, 0x17, 0xc6, 0xc7, - 0x34, 0x89, 0xbc, 0x59, 0xcf, 0x8b, 0x48, 0x42, 0x78, 0x20, 0xc8, 0x08, 0xa5, 0x9c, 0x09, 0x06, - 0xad, 0x32, 0x13, 0x05, 0x29, 0x45, 0x55, 0x26, 0x9a, 0xf5, 0x0e, 0x3e, 0x89, 0xa8, 0x38, 0x9f, - 0x0e, 0x51, 0xc8, 0x62, 0x2f, 0x62, 0x11, 0xf3, 0x14, 0x60, 0x38, 0x3d, 0x53, 0x27, 0x75, 0x50, - 0xbf, 0x4a, 0xa2, 0x03, 0x77, 0xa9, 0x64, 0xc8, 0x38, 0x79, 0x4d, 0xb1, 0x83, 0xcf, 0xaa, 0x9c, - 0x38, 0x08, 0xcf, 0x69, 0x42, 0xf8, 0x85, 0x97, 0x8e, 0x23, 0x19, 0xc8, 0xbc, 0x98, 0x88, 0xe0, - 0x75, 0x28, 0x6f, 0x1b, 0x8a, 0x4f, 0x13, 0x41, 0x63, 0xb2, 0x01, 0xf8, 0xfc, 0xbf, 0x00, 0x59, - 0x78, 0x4e, 0xe2, 0x60, 0x03, 0xf7, 0x70, 0x1b, 0x6e, 0x2a, 0xe8, 0xc4, 0xa3, 0x89, 0xc8, 0x04, - 0x5f, 0x07, 0xb9, 0x27, 0xa0, 0xd5, 0x1f, 0xf8, 0x13, 0x16, 0x8e, 0x61, 0x17, 0x34, 0x42, 0x3a, - 0xe2, 0x96, 0xd1, 0x35, 0x0e, 0xef, 0xf8, 0x6f, 0x5d, 0xe6, 0x4e, 0xad, 0xc8, 0x9d, 0xc6, 0xd7, - 0xfd, 0x6f, 0x30, 0x56, 0x37, 0xd0, 0x05, 0x4d, 0xf2, 0x3c, 0x24, 0xa9, 0xb0, 0xcc, 0x6e, 0xfd, - 0xf0, 0x8e, 0x0f, 0x8a, 0xdc, 0x69, 0x3e, 0x52, 0x11, 0xac, 0x6f, 0xdc, 0xbf, 0x0c, 0x70, 0xf7, - 0xb8, 0xdc, 0xc4, 0x80, 0x4d, 0x68, 0x78, 0x01, 0x7f, 0x06, 0x6d, 0x39, 0x9b, 0x51, 0x20, 0x02, - 0xc5, 0xdd, 0x79, 0xf0, 0x29, 0xaa, 0xd6, 0xb6, 0x78, 0x2a, 0x4a, 0xc7, 0x91, 0x0c, 0x64, 0x48, - 0x66, 0xa3, 0x59, 0x0f, 0x9d, 0x0c, 0x9f, 0x91, 0x50, 0x1c, 0x11, 0x11, 0xf8, 0x50, 0xbf, 0x06, - 0x54, 0x31, 0xbc, 0x60, 0x85, 0x47, 0xa0, 0x91, 0xa5, 0x24, 0xb4, 0x4c, 0xc5, 0x7e, 0x1f, 0x6d, - 0x13, 0x05, 0x5a, 0x79, 0xd8, 0x69, 0x4a, 0xc2, 0xaa, 0x4d, 0x79, 0xc2, 0x8a, 0xc6, 0xfd, 0xc3, - 0x00, 0xef, 0xaf, 0x64, 0x3e, 0x8a, 0x38, 0xc9, 0x32, 0x3c, 0x9d, 0x10, 0x38, 0x00, 0x7b, 0x29, - 0xe3, 0x22, 0xb3, 0x8c, 0x6e, 0xfd, 0x06, 0xb5, 0x06, 0x8c, 0x0b, 0xff, 0xae, 0xae, 0xb5, 0x27, - 0x4f, 0x19, 0x2e, 0x89, 0xe0, 0x63, 0x60, 0x0a, 0xa6, 0x06, 0x7a, 0x03, 0x3a, 0x42, 0xb8, 0x0f, - 0x34, 0x9d, 0xf9, 0x94, 0x61, 0x53, 0x30, 0xf7, 0x4f, 0x03, 0x58, 0x2b, 0x59, 0xfd, 0xe4, 0x4d, - 0xbe, 0xfb, 0x08, 0x34, 0xce, 0x38, 0x8b, 0x6f, 0xf3, 0xf2, 0xc5, 0xd0, 0xbf, 0xe5, 0x2c, 0xc6, - 0x8a, 0xc6, 0x7d, 0x61, 0x80, 0xfd, 0x95, 0xcc, 0x27, 0x34, 0x13, 0xf0, 0xc7, 0x0d, 0xed, 0xa0, - 0xdd, 0xb4, 0x23, 0xd1, 0x4a, 0x39, 0xef, 0xe8, 0x5a, 0xed, 0x79, 0x64, 0x49, 0x37, 0x4f, 0xc0, - 0x1e, 0x15, 0x24, 0xce, 0x74, 0x0f, 0x1f, 0xef, 0xd8, 0x43, 0x35, 0x90, 0xbe, 0x44, 0xe3, 0x92, - 0xc4, 0x7d, 0x61, 0xae, 0x75, 0x20, 0x7b, 0x85, 0x67, 0xa0, 0x93, 0xb2, 0xd1, 0x29, 0x99, 0x90, - 0x50, 0x30, 0xae, 0x9b, 0x78, 0xb8, 0x63, 0x13, 0xc1, 0x90, 0x4c, 0xe6, 0x50, 0xff, 0x5e, 0x91, - 0x3b, 0x9d, 0x41, 0xc5, 0x85, 0x97, 0x89, 0xe1, 0x73, 0xb0, 0x9f, 0x04, 0x31, 0xc9, 0xd2, 0x20, - 0x24, 0x8b, 0x6a, 0xe6, 0xed, 0xab, 0xbd, 0x57, 0xe4, 0xce, 0xfe, 0xf1, 0x3a, 0x23, 0xde, 0x2c, - 0x02, 0xbf, 0x03, 0x2d, 0x9a, 0x2a, 0x0b, 0xb1, 0xea, 0xaa, 0xde, 0x47, 0xdb, 0xe7, 0xa8, 0xbd, - 0xc6, 0xef, 0x14, 0xb9, 0x33, 0x37, 0x1e, 0x3c, 0x87, 0xbb, 0xbf, 0xaf, 0x6b, 0x40, 0x0a, 0x0e, - 0x3e, 0x06, 0x6d, 0xe5, 0x55, 0x21, 0x9b, 0x68, 0x6f, 0xba, 0x2f, 0xf7, 0x39, 0xd0, 0xb1, 0xeb, - 0xdc, 0xf9, 0x60, 0xd3, 0xbc, 0xd1, 0xfc, 0x1a, 0x2f, 0xc0, 0xf0, 0x18, 0x34, 0xa4, 0x74, 0xf5, - 0x54, 0xb6, 0x9b, 0x90, 0xf4, 0x4b, 0x54, 0xfa, 0x25, 0xea, 0x27, 0xe2, 0x84, 0x9f, 0x0a, 0x4e, - 0x93, 0xc8, 0x6f, 0x4b, 0xc9, 0xca, 0x27, 0x61, 0xc5, 0xe3, 0x5e, 0xaf, 0x2f, 0x5c, 0x7a, 0x08, - 0x7c, 0xf6, 0xbf, 0x2d, 0xfc, 0x5d, 0x2d, 0xb3, 0xed, 0x4b, 0xff, 0x09, 0xb4, 0x68, 0xf9, 0x27, - 0xd7, 0x12, 0x7e, 0xb0, 0xa3, 0x84, 0x97, 0xac, 0xc1, 0xbf, 0xa7, 0xcb, 0xb4, 0xe6, 0xc1, 0x39, - 0x27, 0xfc, 0x1e, 0x34, 0x49, 0xc9, 0x5e, 0x57, 0xec, 0xbd, 0x1d, 0xd9, 0x2b, 0xbf, 0xf4, 0xdf, - 0xd6, 0xe4, 0x4d, 0x1d, 0xd3, 0x84, 0xf0, 0x4b, 0x39, 0x25, 0x99, 0xfb, 0xf4, 0x22, 0x25, 0x99, - 0xd5, 0x50, 0xdf, 0x93, 0x0f, 0xcb, 0x66, 0x17, 0xe1, 0xeb, 0xdc, 0x01, 0xd5, 0x11, 0x2f, 0x23, - 0xfc, 0xc3, 0xcb, 0x2b, 0xbb, 0xf6, 0xf2, 0xca, 0xae, 0xbd, 0xba, 0xb2, 0x6b, 0xbf, 0x16, 0xb6, - 0x71, 0x59, 0xd8, 0xc6, 0xcb, 0xc2, 0x36, 0x5e, 0x15, 0xb6, 0xf1, 0x77, 0x61, 0x1b, 0xbf, 0xfd, - 0x63, 0xd7, 0x7e, 0x30, 0x67, 0xbd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x7b, 0xc9, 0x59, - 0x67, 0x08, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -48,7 +48,7 @@ // NetworkPolicy describes what network traffic is allowed for a set of Pods message NetworkPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -92,7 +92,7 @@ // List of sources which should be able to access the pods selected for this rule. // Items in this list are combined using a logical OR operation. If this field is // empty or missing, this rule matches all sources (traffic not restricted by - // source). If this field is present and contains at least on item, this rule + // source). If this field is present and contains at least one item, this rule // allows traffic only if the traffic matches at least one item in the from list. // +optional repeated NetworkPolicyPeer from = 2; @@ -101,7 +101,7 @@ // NetworkPolicyList is a list of NetworkPolicy objects. message NetworkPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -114,7 +114,7 @@ message NetworkPolicyPeer { // This is a label selector which selects Pods. This field follows standard label // selector semantics; if present but empty, it selects all pods. - // + // // If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects // the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. // Otherwise it selects the Pods matching PodSelector in the policy's own Namespace. @@ -123,7 +123,7 @@ // Selects Namespaces using cluster-scoped labels. This field follows standard label // selector semantics; if present but empty, it selects all namespaces. - // + // // If PodSelector is also set, then the NetworkPolicyPeer as a whole selects // the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. // Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector. @@ -138,7 +138,7 @@ // NetworkPolicyPort describes a port to allow traffic on message NetworkPolicyPort { - // The protocol (TCP or UDP) which traffic must match. If not specified, this + // The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this // field defaults to TCP. // +optional optional string protocol = 1; @@ -180,7 +180,7 @@ repeated NetworkPolicyEgressRule egress = 3; // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ type NetworkPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -80,7 +80,7 @@ Egress []NetworkPolicyEgressRule `json:"egress,omitempty" protobuf:"bytes,3,rep,name=egress"` // List of rule types that the NetworkPolicy relates to. - // Valid options are Ingress, Egress, or Ingress,Egress. + // Valid options are "Ingress", "Egress", or "Ingress,Egress". // If this field is not specified, it will default based on the existence of Ingress or Egress rules; // policies that contain an Egress section are assumed to affect Egress, and all policies // (whether or not they contain an Ingress section) are assumed to affect Ingress. @@ -107,7 +107,7 @@ // List of sources which should be able to access the pods selected for this rule. // Items in this list are combined using a logical OR operation. If this field is // empty or missing, this rule matches all sources (traffic not restricted by - // source). If this field is present and contains at least on item, this rule + // source). If this field is present and contains at least one item, this rule // allows traffic only if the traffic matches at least one item in the from list. // +optional From []NetworkPolicyPeer `json:"from,omitempty" protobuf:"bytes,2,rep,name=from"` @@ -136,7 +136,7 @@ // NetworkPolicyPort describes a port to allow traffic on type NetworkPolicyPort struct { - // The protocol (TCP or UDP) which traffic must match. If not specified, this + // The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this // field defaults to TCP. // +optional Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"` @@ -194,7 +194,7 @@ type NetworkPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -39,7 +39,7 @@ var map_NetworkPolicy = map[string]string{ "": "NetworkPolicy describes what network traffic is allowed for a set of Pods", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Specification of the desired behavior for this NetworkPolicy.", } @@ -60,7 +60,7 @@ var map_NetworkPolicyIngressRule = map[string]string{ "": "NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.", "ports": "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - "from": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", + "from": "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the from list.", } func (NetworkPolicyIngressRule) SwaggerDoc() map[string]string { @@ -69,7 +69,7 @@ var map_NetworkPolicyList = map[string]string{ "": "NetworkPolicyList is a list of NetworkPolicy objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is a list of schema objects.", } @@ -90,7 +90,7 @@ var map_NetworkPolicyPort = map[string]string{ "": "NetworkPolicyPort describes a port to allow traffic on", - "protocol": "The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.", + "protocol": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", } @@ -103,7 +103,7 @@ "podSelector": "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", "ingress": "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)", "egress": "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", + "policyTypes": "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", } func (NetworkPolicySpec) SwaggerDoc() map[string]string { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,8 +21,8 @@ package v1 import ( - core_v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" ) @@ -139,7 +139,7 @@ func (in *NetworkPolicyList) DeepCopyInto(out *NetworkPolicyList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]NetworkPolicy, len(*in)) @@ -173,30 +173,18 @@ *out = *in if in.PodSelector != nil { in, out := &in.PodSelector, &out.PodSelector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.NamespaceSelector != nil { in, out := &in.NamespaceSelector, &out.NamespaceSelector - if *in == nil { - *out = nil - } else { - *out = new(meta_v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.IPBlock != nil { in, out := &in.IPBlock, &out.IPBlock - if *in == nil { - *out = nil - } else { - *out = new(IPBlock) - (*in).DeepCopyInto(*out) - } + *out = new(IPBlock) + (*in).DeepCopyInto(*out) } return } @@ -216,21 +204,13 @@ *out = *in if in.Protocol != nil { in, out := &in.Protocol, &out.Protocol - if *in == nil { - *out = nil - } else { - *out = new(core_v1.Protocol) - **out = **in - } + *out = new(corev1.Protocol) + **out = **in } if in.Port != nil { in, out := &in.Port, &out.Port - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true +// +groupName=networking.k8s.io + +package v1beta1 // import "k8s.io/api/networking/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2394 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/networking/v1beta1/generated.proto + +package v1beta1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } +func (*HTTPIngressPath) ProtoMessage() {} +func (*HTTPIngressPath) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{0} +} +func (m *HTTPIngressPath) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HTTPIngressPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HTTPIngressPath) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTTPIngressPath.Merge(m, src) +} +func (m *HTTPIngressPath) XXX_Size() int { + return m.Size() +} +func (m *HTTPIngressPath) XXX_DiscardUnknown() { + xxx_messageInfo_HTTPIngressPath.DiscardUnknown(m) +} + +var xxx_messageInfo_HTTPIngressPath proto.InternalMessageInfo + +func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } +func (*HTTPIngressRuleValue) ProtoMessage() {} +func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{1} +} +func (m *HTTPIngressRuleValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HTTPIngressRuleValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HTTPIngressRuleValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_HTTPIngressRuleValue.Merge(m, src) +} +func (m *HTTPIngressRuleValue) XXX_Size() int { + return m.Size() +} +func (m *HTTPIngressRuleValue) XXX_DiscardUnknown() { + xxx_messageInfo_HTTPIngressRuleValue.DiscardUnknown(m) +} + +var xxx_messageInfo_HTTPIngressRuleValue proto.InternalMessageInfo + +func (m *Ingress) Reset() { *m = Ingress{} } +func (*Ingress) ProtoMessage() {} +func (*Ingress) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{2} +} +func (m *Ingress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Ingress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Ingress) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ingress.Merge(m, src) +} +func (m *Ingress) XXX_Size() int { + return m.Size() +} +func (m *Ingress) XXX_DiscardUnknown() { + xxx_messageInfo_Ingress.DiscardUnknown(m) +} + +var xxx_messageInfo_Ingress proto.InternalMessageInfo + +func (m *IngressBackend) Reset() { *m = IngressBackend{} } +func (*IngressBackend) ProtoMessage() {} +func (*IngressBackend) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{3} +} +func (m *IngressBackend) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressBackend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressBackend) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressBackend.Merge(m, src) +} +func (m *IngressBackend) XXX_Size() int { + return m.Size() +} +func (m *IngressBackend) XXX_DiscardUnknown() { + xxx_messageInfo_IngressBackend.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressBackend proto.InternalMessageInfo + +func (m *IngressList) Reset() { *m = IngressList{} } +func (*IngressList) ProtoMessage() {} +func (*IngressList) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{4} +} +func (m *IngressList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressList) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressList.Merge(m, src) +} +func (m *IngressList) XXX_Size() int { + return m.Size() +} +func (m *IngressList) XXX_DiscardUnknown() { + xxx_messageInfo_IngressList.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressList proto.InternalMessageInfo + +func (m *IngressRule) Reset() { *m = IngressRule{} } +func (*IngressRule) ProtoMessage() {} +func (*IngressRule) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{5} +} +func (m *IngressRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressRule.Merge(m, src) +} +func (m *IngressRule) XXX_Size() int { + return m.Size() +} +func (m *IngressRule) XXX_DiscardUnknown() { + xxx_messageInfo_IngressRule.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressRule proto.InternalMessageInfo + +func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } +func (*IngressRuleValue) ProtoMessage() {} +func (*IngressRuleValue) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{6} +} +func (m *IngressRuleValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressRuleValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressRuleValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressRuleValue.Merge(m, src) +} +func (m *IngressRuleValue) XXX_Size() int { + return m.Size() +} +func (m *IngressRuleValue) XXX_DiscardUnknown() { + xxx_messageInfo_IngressRuleValue.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressRuleValue proto.InternalMessageInfo + +func (m *IngressSpec) Reset() { *m = IngressSpec{} } +func (*IngressSpec) ProtoMessage() {} +func (*IngressSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{7} +} +func (m *IngressSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressSpec.Merge(m, src) +} +func (m *IngressSpec) XXX_Size() int { + return m.Size() +} +func (m *IngressSpec) XXX_DiscardUnknown() { + xxx_messageInfo_IngressSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressSpec proto.InternalMessageInfo + +func (m *IngressStatus) Reset() { *m = IngressStatus{} } +func (*IngressStatus) ProtoMessage() {} +func (*IngressStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{8} +} +func (m *IngressStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressStatus.Merge(m, src) +} +func (m *IngressStatus) XXX_Size() int { + return m.Size() +} +func (m *IngressStatus) XXX_DiscardUnknown() { + xxx_messageInfo_IngressStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressStatus proto.InternalMessageInfo + +func (m *IngressTLS) Reset() { *m = IngressTLS{} } +func (*IngressTLS) ProtoMessage() {} +func (*IngressTLS) Descriptor() ([]byte, []int) { + return fileDescriptor_5bea11de0ceb8f53, []int{9} +} +func (m *IngressTLS) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressTLS) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IngressTLS) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressTLS.Merge(m, src) +} +func (m *IngressTLS) XXX_Size() int { + return m.Size() +} +func (m *IngressTLS) XXX_DiscardUnknown() { + xxx_messageInfo_IngressTLS.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressTLS proto.InternalMessageInfo + +func init() { + proto.RegisterType((*HTTPIngressPath)(nil), "k8s.io.api.networking.v1beta1.HTTPIngressPath") + proto.RegisterType((*HTTPIngressRuleValue)(nil), "k8s.io.api.networking.v1beta1.HTTPIngressRuleValue") + proto.RegisterType((*Ingress)(nil), "k8s.io.api.networking.v1beta1.Ingress") + proto.RegisterType((*IngressBackend)(nil), "k8s.io.api.networking.v1beta1.IngressBackend") + proto.RegisterType((*IngressList)(nil), "k8s.io.api.networking.v1beta1.IngressList") + proto.RegisterType((*IngressRule)(nil), "k8s.io.api.networking.v1beta1.IngressRule") + proto.RegisterType((*IngressRuleValue)(nil), "k8s.io.api.networking.v1beta1.IngressRuleValue") + proto.RegisterType((*IngressSpec)(nil), "k8s.io.api.networking.v1beta1.IngressSpec") + proto.RegisterType((*IngressStatus)(nil), "k8s.io.api.networking.v1beta1.IngressStatus") + proto.RegisterType((*IngressTLS)(nil), "k8s.io.api.networking.v1beta1.IngressTLS") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/networking/v1beta1/generated.proto", fileDescriptor_5bea11de0ceb8f53) +} + +var fileDescriptor_5bea11de0ceb8f53 = []byte{ + // 812 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcf, 0x6e, 0xfb, 0x44, + 0x10, 0x8e, 0xf3, 0xa7, 0x69, 0xd7, 0xfd, 0xa7, 0xa5, 0x87, 0xa8, 0x12, 0x6e, 0xe4, 0x03, 0x2a, + 0x88, 0xae, 0x69, 0x0a, 0x88, 0xb3, 0x0f, 0xa8, 0x15, 0x81, 0x86, 0x75, 0x84, 0x10, 0xe2, 0xd0, + 0x8d, 0xb3, 0x38, 0x26, 0x89, 0x6d, 0x76, 0xd7, 0x41, 0xdc, 0x78, 0x01, 0x04, 0x4f, 0xc1, 0x99, + 0x23, 0x8f, 0xd0, 0x63, 0x8f, 0x3d, 0x55, 0x34, 0xbc, 0x07, 0x42, 0xbb, 0xde, 0xda, 0x4e, 0xd2, + 0xfe, 0x6a, 0xfd, 0x6e, 0xde, 0x9d, 0xf9, 0xbe, 0xd9, 0x99, 0xf9, 0x66, 0x0c, 0x3e, 0x9f, 0x7e, + 0xc6, 0x51, 0x18, 0x3b, 0xd3, 0x74, 0x44, 0x59, 0x44, 0x05, 0xe5, 0xce, 0x82, 0x46, 0xe3, 0x98, + 0x39, 0xda, 0x40, 0x92, 0xd0, 0x89, 0xa8, 0xf8, 0x39, 0x66, 0xd3, 0x30, 0x0a, 0x9c, 0xc5, 0xf9, + 0x88, 0x0a, 0x72, 0xee, 0x04, 0x34, 0xa2, 0x8c, 0x08, 0x3a, 0x46, 0x09, 0x8b, 0x45, 0x0c, 0xdf, + 0xcd, 0xdc, 0x11, 0x49, 0x42, 0x54, 0xb8, 0x23, 0xed, 0x7e, 0x7c, 0x16, 0x84, 0x62, 0x92, 0x8e, + 0x90, 0x1f, 0xcf, 0x9d, 0x20, 0x0e, 0x62, 0x47, 0xa1, 0x46, 0xe9, 0x0f, 0xea, 0xa4, 0x0e, 0xea, + 0x2b, 0x63, 0x3b, 0xb6, 0x4b, 0xc1, 0xfd, 0x98, 0x51, 0x67, 0xb1, 0x11, 0xf1, 0xf8, 0xe3, 0xc2, + 0x67, 0x4e, 0xfc, 0x49, 0x18, 0x51, 0xf6, 0x8b, 0x93, 0x4c, 0x03, 0x79, 0xc1, 0x9d, 0x39, 0x15, + 0xe4, 0x39, 0x94, 0xf3, 0x12, 0x8a, 0xa5, 0x91, 0x08, 0xe7, 0x74, 0x03, 0xf0, 0xe9, 0x6b, 0x00, + 0xee, 0x4f, 0xe8, 0x9c, 0x6c, 0xe0, 0x2e, 0x5e, 0xc2, 0xa5, 0x22, 0x9c, 0x39, 0x61, 0x24, 0xb8, + 0x60, 0xeb, 0x20, 0xfb, 0x37, 0x03, 0x1c, 0x5c, 0x0e, 0x87, 0x83, 0xab, 0x28, 0x60, 0x94, 0xf3, + 0x01, 0x11, 0x13, 0xd8, 0x05, 0xcd, 0x84, 0x88, 0x49, 0xc7, 0xe8, 0x1a, 0xa7, 0x3b, 0xee, 0xee, + 0xed, 0xc3, 0x49, 0x6d, 0xf9, 0x70, 0xd2, 0x94, 0x36, 0xac, 0x2c, 0xf0, 0x5b, 0xd0, 0x1e, 0x11, + 0x7f, 0x4a, 0xa3, 0x71, 0xa7, 0xde, 0x35, 0x4e, 0xcd, 0xde, 0x19, 0x7a, 0x63, 0x37, 0x90, 0xa6, + 0x77, 0x33, 0x90, 0x7b, 0xa0, 0x39, 0xdb, 0xfa, 0x02, 0x3f, 0xd1, 0xd9, 0x53, 0x70, 0x54, 0x7a, + 0x0e, 0x4e, 0x67, 0xf4, 0x1b, 0x32, 0x4b, 0x29, 0xf4, 0x40, 0x4b, 0x46, 0xe6, 0x1d, 0xa3, 0xdb, + 0x38, 0x35, 0x7b, 0xe8, 0x95, 0x78, 0x6b, 0x29, 0xb9, 0x7b, 0x3a, 0x60, 0x4b, 0x9e, 0x38, 0xce, + 0xb8, 0xec, 0xdf, 0xeb, 0xa0, 0xad, 0xbd, 0xe0, 0x0d, 0xd8, 0x96, 0x1d, 0x1c, 0x13, 0x41, 0x54, + 0xe2, 0x66, 0xef, 0xa3, 0x52, 0x8c, 0xbc, 0xa0, 0x28, 0x99, 0x06, 0xf2, 0x82, 0x23, 0xe9, 0x8d, + 0x16, 0xe7, 0xe8, 0x7a, 0xf4, 0x23, 0xf5, 0xc5, 0x97, 0x54, 0x10, 0x17, 0xea, 0x28, 0xa0, 0xb8, + 0xc3, 0x39, 0x2b, 0xec, 0x83, 0x26, 0x4f, 0xa8, 0xaf, 0x2b, 0xf6, 0x41, 0xb5, 0x8a, 0x79, 0x09, + 0xf5, 0x8b, 0x16, 0xc8, 0x13, 0x56, 0x2c, 0x70, 0x08, 0xb6, 0xb8, 0x20, 0x22, 0xe5, 0x9d, 0x86, + 0xe2, 0xfb, 0xb0, 0x22, 0x9f, 0xc2, 0xb8, 0xfb, 0x9a, 0x71, 0x2b, 0x3b, 0x63, 0xcd, 0x65, 0xff, + 0x65, 0x80, 0xfd, 0xd5, 0x5e, 0xc1, 0x4f, 0x80, 0xc9, 0x29, 0x5b, 0x84, 0x3e, 0xfd, 0x8a, 0xcc, + 0xa9, 0x16, 0xc5, 0x3b, 0x1a, 0x6f, 0x7a, 0x85, 0x09, 0x97, 0xfd, 0x60, 0x90, 0xc3, 0x06, 0x31, + 0x13, 0x3a, 0xe9, 0x97, 0x4b, 0x2a, 0x35, 0x8a, 0x32, 0x8d, 0xa2, 0xab, 0x48, 0x5c, 0x33, 0x4f, + 0xb0, 0x30, 0x0a, 0x36, 0x02, 0x49, 0x32, 0x5c, 0x66, 0xb6, 0xff, 0x36, 0x80, 0xa9, 0x9f, 0xdc, + 0x0f, 0xb9, 0x80, 0xdf, 0x6f, 0x34, 0x12, 0x55, 0x6b, 0xa4, 0x44, 0xab, 0x36, 0x1e, 0xea, 0x98, + 0xdb, 0x4f, 0x37, 0xa5, 0x26, 0x7e, 0x01, 0x5a, 0xa1, 0xa0, 0x73, 0xde, 0xa9, 0x2b, 0x1d, 0xbe, + 0x57, 0x51, 0xf7, 0xb9, 0xfe, 0xae, 0x24, 0x18, 0x67, 0x1c, 0xf6, 0x9f, 0xc5, 0xd3, 0xa5, 0xd2, + 0xe5, 0xe0, 0x4d, 0x62, 0x2e, 0xd6, 0x07, 0xef, 0x32, 0xe6, 0x02, 0x2b, 0x0b, 0x4c, 0xc1, 0x61, + 0xb8, 0x36, 0x1a, 0xba, 0xb4, 0x4e, 0xb5, 0x97, 0xe4, 0x30, 0xb7, 0xa3, 0xe9, 0x0f, 0xd7, 0x2d, + 0x78, 0x23, 0x84, 0x4d, 0xc1, 0x86, 0x17, 0xfc, 0x1a, 0x34, 0x27, 0x42, 0x24, 0xba, 0xc6, 0x17, + 0xd5, 0x07, 0xb2, 0x78, 0xc2, 0xb6, 0xca, 0x6e, 0x38, 0x1c, 0x60, 0x45, 0x65, 0xff, 0x57, 0xd4, + 0xc3, 0xcb, 0x34, 0x9e, 0xaf, 0x19, 0xe3, 0x6d, 0xd6, 0x8c, 0xf9, 0xdc, 0x8a, 0x81, 0x97, 0xa0, + 0x21, 0x66, 0x4f, 0x0d, 0x7c, 0xbf, 0x1a, 0xe3, 0xb0, 0xef, 0xb9, 0xa6, 0x2e, 0x58, 0x63, 0xd8, + 0xf7, 0xb0, 0xa4, 0x80, 0xd7, 0xa0, 0xc5, 0xd2, 0x19, 0x95, 0x23, 0xd8, 0xa8, 0x3e, 0xd2, 0x32, + 0xff, 0x42, 0x10, 0xf2, 0xc4, 0x71, 0xc6, 0x63, 0xff, 0x04, 0xf6, 0x56, 0xe6, 0x14, 0xde, 0x80, + 0xdd, 0x59, 0x4c, 0xc6, 0x2e, 0x99, 0x91, 0xc8, 0xa7, 0x4c, 0x97, 0x61, 0x45, 0x75, 0xf2, 0x6f, + 0xa5, 0xe4, 0x5b, 0xf2, 0xd3, 0x53, 0x7e, 0xa4, 0x83, 0xec, 0x96, 0x6d, 0x78, 0x85, 0xd1, 0x26, + 0x00, 0x14, 0x39, 0xc2, 0x13, 0xd0, 0x92, 0x3a, 0xcb, 0xd6, 0xec, 0x8e, 0xbb, 0x23, 0x5f, 0x28, + 0xe5, 0xc7, 0x71, 0x76, 0x0f, 0x7b, 0x00, 0x70, 0xea, 0x33, 0x2a, 0xd4, 0x32, 0xa8, 0x2b, 0xa1, + 0xe6, 0x6b, 0xcf, 0xcb, 0x2d, 0xb8, 0xe4, 0xe5, 0x9e, 0xdd, 0x3e, 0x5a, 0xb5, 0xbb, 0x47, 0xab, + 0x76, 0xff, 0x68, 0xd5, 0x7e, 0x5d, 0x5a, 0xc6, 0xed, 0xd2, 0x32, 0xee, 0x96, 0x96, 0x71, 0xbf, + 0xb4, 0x8c, 0x7f, 0x96, 0x96, 0xf1, 0xc7, 0xbf, 0x56, 0xed, 0xbb, 0xb6, 0x2e, 0xd3, 0xff, 0x01, + 0x00, 0x00, 0xff, 0xff, 0xdb, 0x8a, 0xe4, 0xd8, 0x21, 0x08, 0x00, 0x00, +} + +func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HTTPIngressPath) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HTTPIngressPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Backend.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HTTPIngressRuleValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HTTPIngressRuleValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HTTPIngressRuleValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Paths) > 0 { + for iNdEx := len(m.Paths) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Paths[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *Ingress) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Ingress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Ingress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressBackend) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressBackend) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressBackend) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ServicePort.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.ServiceName) + copy(dAtA[i:], m.ServiceName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressRule) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressRule) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.IngressRuleValue.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressRuleValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressRuleValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressRuleValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.HTTP != nil { + { + size, err := m.HTTP.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *IngressSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.TLS) > 0 { + for iNdEx := len(m.TLS) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TLS[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.Backend != nil { + { + size, err := m.Backend.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *IngressStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LoadBalancer.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressTLS) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IngressTLS) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressTLS) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.SecretName) + copy(dAtA[i:], m.SecretName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SecretName))) + i-- + dAtA[i] = 0x12 + if len(m.Hosts) > 0 { + for iNdEx := len(m.Hosts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Hosts[iNdEx]) + copy(dAtA[i:], m.Hosts[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Hosts[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *HTTPIngressPath) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Backend.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *HTTPIngressRuleValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Paths) > 0 { + for _, e := range m.Paths { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Ingress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressBackend) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ServiceName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ServicePort.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *IngressRule) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = m.IngressRuleValue.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressRuleValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.HTTP != nil { + l = m.HTTP.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *IngressSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Backend != nil { + l = m.Backend.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.TLS) > 0 { + for _, e := range m.TLS { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *IngressStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.LoadBalancer.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressTLS) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Hosts) > 0 { + for _, s := range m.Hosts { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.SecretName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *HTTPIngressPath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPIngressPath{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Backend:` + strings.Replace(strings.Replace(this.Backend.String(), "IngressBackend", "IngressBackend", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPIngressRuleValue) String() string { + if this == nil { + return "nil" + } + repeatedStringForPaths := "[]HTTPIngressPath{" + for _, f := range this.Paths { + repeatedStringForPaths += strings.Replace(strings.Replace(f.String(), "HTTPIngressPath", "HTTPIngressPath", 1), `&`, ``, 1) + "," + } + repeatedStringForPaths += "}" + s := strings.Join([]string{`&HTTPIngressRuleValue{`, + `Paths:` + repeatedStringForPaths + `,`, + `}`, + }, "") + return s +} +func (this *Ingress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ingress{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "IngressSpec", "IngressSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "IngressStatus", "IngressStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressBackend) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressBackend{`, + `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, + `ServicePort:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServicePort), "IntOrString", "intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Ingress{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Ingress", "Ingress", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&IngressList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *IngressRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressRule{`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `IngressRuleValue:` + strings.Replace(strings.Replace(this.IngressRuleValue.String(), "IngressRuleValue", "IngressRuleValue", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressRuleValue) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressRuleValue{`, + `HTTP:` + strings.Replace(this.HTTP.String(), "HTTPIngressRuleValue", "HTTPIngressRuleValue", 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForTLS := "[]IngressTLS{" + for _, f := range this.TLS { + repeatedStringForTLS += strings.Replace(strings.Replace(f.String(), "IngressTLS", "IngressTLS", 1), `&`, ``, 1) + "," + } + repeatedStringForTLS += "}" + repeatedStringForRules := "[]IngressRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "IngressRule", "IngressRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&IngressSpec{`, + `Backend:` + strings.Replace(this.Backend.String(), "IngressBackend", "IngressBackend", 1) + `,`, + `TLS:` + repeatedStringForTLS + `,`, + `Rules:` + repeatedStringForRules + `,`, + `}`, + }, "") + return s +} +func (this *IngressStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressStatus{`, + `LoadBalancer:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LoadBalancer), "LoadBalancerStatus", "v11.LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressTLS) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressTLS{`, + `Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *HTTPIngressPath) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HTTPIngressPath: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HTTPIngressPath: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Backend", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Backend.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HTTPIngressRuleValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HTTPIngressRuleValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HTTPIngressRuleValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Paths", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Paths = append(m.Paths, HTTPIngressPath{}) + if err := m.Paths[len(m.Paths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Ingress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Ingress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Ingress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressBackend) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressBackend: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressBackend: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServicePort", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ServicePort.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Ingress{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressRule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressRule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressRule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IngressRuleValue", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.IngressRuleValue.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressRuleValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressRuleValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressRuleValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTP", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HTTP == nil { + m.HTTP = &HTTPIngressRuleValue{} + } + if err := m.HTTP.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Backend", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Backend == nil { + m.Backend = &IngressBackend{} + } + if err := m.Backend.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TLS = append(m.TLS, IngressTLS{}) + if err := m.TLS[len(m.TLS)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, IngressRule{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LoadBalancer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressTLS) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IngressTLS: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressTLS: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hosts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hosts = append(m.Hosts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,186 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.networking.v1beta1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// HTTPIngressPath associates a path regex with a backend. Incoming urls matching +// the path are forwarded to the backend. +message HTTPIngressPath { + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, + // (i.e this follows the egrep/unix syntax, not the perl syntax) + // matched against the path of an incoming request. Currently it can + // contain characters disallowed from the conventional "path" + // part of a URL as defined by RFC 3986. Paths must begin with + // a '/'. If unspecified, the path defaults to a catch all sending + // traffic to the backend. + // +optional + optional string path = 1; + + // Backend defines the referenced service endpoint to which the traffic + // will be forwarded to. + optional IngressBackend backend = 2; +} + +// HTTPIngressRuleValue is a list of http selectors pointing to backends. +// In the example: http:///? -> backend where +// where parts of the url correspond to RFC 3986, this resource will be used +// to match against everything after the last '/' and before the first '?' +// or '#'. +message HTTPIngressRuleValue { + // A collection of paths that map requests to backends. + repeated HTTPIngressPath paths = 1; +} + +// Ingress is a collection of rules that allow inbound connections to reach the +// endpoints defined by a backend. An Ingress can be configured to give services +// externally-reachable urls, load balance traffic, terminate SSL, offer name +// based virtual hosting etc. +message Ingress { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec is the desired state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional IngressSpec spec = 2; + + // Status is the current state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional IngressStatus status = 3; +} + +// IngressBackend describes all endpoints for a given service and port. +message IngressBackend { + // Specifies the name of the referenced service. + optional string serviceName = 1; + + // Specifies the port of the referenced service. + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString servicePort = 2; +} + +// IngressList is a collection of Ingress. +message IngressList { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of Ingress. + repeated Ingress items = 2; +} + +// IngressRule represents the rules mapping the paths under a specified host to +// the related backend services. Incoming requests are first evaluated for a host +// match, then routed to the backend associated with the matching IngressRuleValue. +message IngressRule { + // Host is the fully qualified domain name of a network host, as defined + // by RFC 3986. Note the following deviations from the "host" part of the + // URI as defined in the RFC: + // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + // IP in the Spec of the parent Ingress. + // 2. The `:` delimiter is not respected because ports are not allowed. + // Currently the port of an Ingress is implicitly :80 for http and + // :443 for https. + // Both these may change in the future. + // Incoming requests are matched against the host before the IngressRuleValue. + // If the host is unspecified, the Ingress routes all traffic based on the + // specified IngressRuleValue. + // +optional + optional string host = 1; + + // IngressRuleValue represents a rule to route requests for this IngressRule. + // If unspecified, the rule defaults to a http catch-all. Whether that sends + // just traffic matching the host to the default backend or all traffic to the + // default backend, is left to the controller fulfilling the Ingress. Http is + // currently the only supported IngressRuleValue. + // +optional + optional IngressRuleValue ingressRuleValue = 2; +} + +// IngressRuleValue represents a rule to apply against incoming requests. If the +// rule is satisfied, the request is routed to the specified backend. Currently +// mixing different types of rules in a single Ingress is disallowed, so exactly +// one of the following must be set. +message IngressRuleValue { + // +optional + optional HTTPIngressRuleValue http = 1; +} + +// IngressSpec describes the Ingress the user wishes to exist. +message IngressSpec { + // A default backend capable of servicing requests that don't match any + // rule. At least one of 'backend' or 'rules' must be specified. This field + // is optional to allow the loadbalancer controller or defaulting logic to + // specify a global default. + // +optional + optional IngressBackend backend = 1; + + // TLS configuration. Currently the Ingress only supports a single TLS + // port, 443. If multiple members of this list specify different hosts, they + // will be multiplexed on the same port according to the hostname specified + // through the SNI TLS extension, if the ingress controller fulfilling the + // ingress supports SNI. + // +optional + repeated IngressTLS tls = 2; + + // A list of host rules used to configure the Ingress. If unspecified, or + // no rule matches, all traffic is sent to the default backend. + // +optional + repeated IngressRule rules = 3; +} + +// IngressStatus describe the current state of the Ingress. +message IngressStatus { + // LoadBalancer contains the current status of the load-balancer. + // +optional + optional k8s.io.api.core.v1.LoadBalancerStatus loadBalancer = 1; +} + +// IngressTLS describes the transport layer security associated with an Ingress. +message IngressTLS { + // Hosts are a list of hosts included in the TLS certificate. The values in + // this list must match the name/s used in the tlsSecret. Defaults to the + // wildcard host setting for the loadbalancer controller fulfilling this + // Ingress, if left unspecified. + // +optional + repeated string hosts = 1; + + // SecretName is the name of the secret used to terminate SSL traffic on 443. + // Field is left optional to allow SSL routing based on SNI hostname alone. + // If the SNI host in a listener conflicts with the "Host" header field used + // by an IngressRule, the SNI host is used for termination and value of the + // Host header is used for routing. + // +optional + optional string secretName = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,56 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "networking.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder holds functions that add things to a scheme + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + + // AddToScheme adds the types of this group into the given scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Ingress{}, + &IngressList{}, + ) + // Add the watch version that applies + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,192 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Ingress is a collection of rules that allow inbound connections to reach the +// endpoints defined by a backend. An Ingress can be configured to give services +// externally-reachable urls, load balance traffic, terminate SSL, offer name +// based virtual hosting etc. +type Ingress struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec is the desired state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Spec IngressSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status is the current state of the Ingress. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Status IngressStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IngressList is a collection of Ingress. +type IngressList struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of Ingress. + Items []Ingress `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// IngressSpec describes the Ingress the user wishes to exist. +type IngressSpec struct { + // A default backend capable of servicing requests that don't match any + // rule. At least one of 'backend' or 'rules' must be specified. This field + // is optional to allow the loadbalancer controller or defaulting logic to + // specify a global default. + // +optional + Backend *IngressBackend `json:"backend,omitempty" protobuf:"bytes,1,opt,name=backend"` + + // TLS configuration. Currently the Ingress only supports a single TLS + // port, 443. If multiple members of this list specify different hosts, they + // will be multiplexed on the same port according to the hostname specified + // through the SNI TLS extension, if the ingress controller fulfilling the + // ingress supports SNI. + // +optional + TLS []IngressTLS `json:"tls,omitempty" protobuf:"bytes,2,rep,name=tls"` + + // A list of host rules used to configure the Ingress. If unspecified, or + // no rule matches, all traffic is sent to the default backend. + // +optional + Rules []IngressRule `json:"rules,omitempty" protobuf:"bytes,3,rep,name=rules"` + // TODO: Add the ability to specify load-balancer IP through claims +} + +// IngressTLS describes the transport layer security associated with an Ingress. +type IngressTLS struct { + // Hosts are a list of hosts included in the TLS certificate. The values in + // this list must match the name/s used in the tlsSecret. Defaults to the + // wildcard host setting for the loadbalancer controller fulfilling this + // Ingress, if left unspecified. + // +optional + Hosts []string `json:"hosts,omitempty" protobuf:"bytes,1,rep,name=hosts"` + // SecretName is the name of the secret used to terminate SSL traffic on 443. + // Field is left optional to allow SSL routing based on SNI hostname alone. + // If the SNI host in a listener conflicts with the "Host" header field used + // by an IngressRule, the SNI host is used for termination and value of the + // Host header is used for routing. + // +optional + SecretName string `json:"secretName,omitempty" protobuf:"bytes,2,opt,name=secretName"` + // TODO: Consider specifying different modes of termination, protocols etc. +} + +// IngressStatus describe the current state of the Ingress. +type IngressStatus struct { + // LoadBalancer contains the current status of the load-balancer. + // +optional + LoadBalancer v1.LoadBalancerStatus `json:"loadBalancer,omitempty" protobuf:"bytes,1,opt,name=loadBalancer"` +} + +// IngressRule represents the rules mapping the paths under a specified host to +// the related backend services. Incoming requests are first evaluated for a host +// match, then routed to the backend associated with the matching IngressRuleValue. +type IngressRule struct { + // Host is the fully qualified domain name of a network host, as defined + // by RFC 3986. Note the following deviations from the "host" part of the + // URI as defined in the RFC: + // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + // IP in the Spec of the parent Ingress. + // 2. The `:` delimiter is not respected because ports are not allowed. + // Currently the port of an Ingress is implicitly :80 for http and + // :443 for https. + // Both these may change in the future. + // Incoming requests are matched against the host before the IngressRuleValue. + // If the host is unspecified, the Ingress routes all traffic based on the + // specified IngressRuleValue. + // +optional + Host string `json:"host,omitempty" protobuf:"bytes,1,opt,name=host"` + // IngressRuleValue represents a rule to route requests for this IngressRule. + // If unspecified, the rule defaults to a http catch-all. Whether that sends + // just traffic matching the host to the default backend or all traffic to the + // default backend, is left to the controller fulfilling the Ingress. Http is + // currently the only supported IngressRuleValue. + // +optional + IngressRuleValue `json:",inline,omitempty" protobuf:"bytes,2,opt,name=ingressRuleValue"` +} + +// IngressRuleValue represents a rule to apply against incoming requests. If the +// rule is satisfied, the request is routed to the specified backend. Currently +// mixing different types of rules in a single Ingress is disallowed, so exactly +// one of the following must be set. +type IngressRuleValue struct { + //TODO: + // 1. Consider renaming this resource and the associated rules so they + // aren't tied to Ingress. They can be used to route intra-cluster traffic. + // 2. Consider adding fields for ingress-type specific global options + // usable by a loadbalancer, like http keep-alive. + + // +optional + HTTP *HTTPIngressRuleValue `json:"http,omitempty" protobuf:"bytes,1,opt,name=http"` +} + +// HTTPIngressRuleValue is a list of http selectors pointing to backends. +// In the example: http:///? -> backend where +// where parts of the url correspond to RFC 3986, this resource will be used +// to match against everything after the last '/' and before the first '?' +// or '#'. +type HTTPIngressRuleValue struct { + // A collection of paths that map requests to backends. + Paths []HTTPIngressPath `json:"paths" protobuf:"bytes,1,rep,name=paths"` + // TODO: Consider adding fields for ingress-type specific global + // options usable by a loadbalancer, like http keep-alive. +} + +// HTTPIngressPath associates a path regex with a backend. Incoming urls matching +// the path are forwarded to the backend. +type HTTPIngressPath struct { + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, + // (i.e this follows the egrep/unix syntax, not the perl syntax) + // matched against the path of an incoming request. Currently it can + // contain characters disallowed from the conventional "path" + // part of a URL as defined by RFC 3986. Paths must begin with + // a '/'. If unspecified, the path defaults to a catch all sending + // traffic to the backend. + // +optional + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` + + // Backend defines the referenced service endpoint to which the traffic + // will be forwarded to. + Backend IngressBackend `json:"backend" protobuf:"bytes,2,opt,name=backend"` +} + +// IngressBackend describes all endpoints for a given service and port. +type IngressBackend struct { + // Specifies the name of the referenced service. + ServiceName string `json:"serviceName" protobuf:"bytes,1,opt,name=serviceName"` + + // Specifies the port of the referenced service. + ServicePort intstr.IntOrString `json:"servicePort" protobuf:"bytes,2,opt,name=servicePort"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,127 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_HTTPIngressPath = map[string]string{ + "": "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.", + "path": "Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", + "backend": "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", +} + +func (HTTPIngressPath) SwaggerDoc() map[string]string { + return map_HTTPIngressPath +} + +var map_HTTPIngressRuleValue = map[string]string{ + "": "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", + "paths": "A collection of paths that map requests to backends.", +} + +func (HTTPIngressRuleValue) SwaggerDoc() map[string]string { + return map_HTTPIngressRuleValue +} + +var map_Ingress = map[string]string{ + "": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + "status": "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", +} + +func (Ingress) SwaggerDoc() map[string]string { + return map_Ingress +} + +var map_IngressBackend = map[string]string{ + "": "IngressBackend describes all endpoints for a given service and port.", + "serviceName": "Specifies the name of the referenced service.", + "servicePort": "Specifies the port of the referenced service.", +} + +func (IngressBackend) SwaggerDoc() map[string]string { + return map_IngressBackend +} + +var map_IngressList = map[string]string{ + "": "IngressList is a collection of Ingress.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is the list of Ingress.", +} + +func (IngressList) SwaggerDoc() map[string]string { + return map_IngressList +} + +var map_IngressRule = map[string]string{ + "": "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", + "host": "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.", +} + +func (IngressRule) SwaggerDoc() map[string]string { + return map_IngressRule +} + +var map_IngressRuleValue = map[string]string{ + "": "IngressRuleValue represents a rule to apply against incoming requests. If the rule is satisfied, the request is routed to the specified backend. Currently mixing different types of rules in a single Ingress is disallowed, so exactly one of the following must be set.", +} + +func (IngressRuleValue) SwaggerDoc() map[string]string { + return map_IngressRuleValue +} + +var map_IngressSpec = map[string]string{ + "": "IngressSpec describes the Ingress the user wishes to exist.", + "backend": "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", + "tls": "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", + "rules": "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", +} + +func (IngressSpec) SwaggerDoc() map[string]string { + return map_IngressSpec +} + +var map_IngressStatus = map[string]string{ + "": "IngressStatus describe the current state of the Ingress.", + "loadBalancer": "LoadBalancer contains the current status of the load-balancer.", +} + +func (IngressStatus) SwaggerDoc() map[string]string { + return map_IngressStatus +} + +var map_IngressTLS = map[string]string{ + "": "IngressTLS describes the transport layer security associated with an Ingress.", + "hosts": "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", + "secretName": "SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", +} + +func (IngressTLS) SwaggerDoc() map[string]string { + return map_IngressTLS +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/networking/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,252 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTTPIngressPath) DeepCopyInto(out *HTTPIngressPath) { + *out = *in + out.Backend = in.Backend + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressPath. +func (in *HTTPIngressPath) DeepCopy() *HTTPIngressPath { + if in == nil { + return nil + } + out := new(HTTPIngressPath) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTTPIngressRuleValue) DeepCopyInto(out *HTTPIngressRuleValue) { + *out = *in + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]HTTPIngressPath, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPIngressRuleValue. +func (in *HTTPIngressRuleValue) DeepCopy() *HTTPIngressRuleValue { + if in == nil { + return nil + } + out := new(HTTPIngressRuleValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ingress) DeepCopyInto(out *Ingress) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { + if in == nil { + return nil + } + out := new(Ingress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Ingress) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressBackend) DeepCopyInto(out *IngressBackend) { + *out = *in + out.ServicePort = in.ServicePort + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressBackend. +func (in *IngressBackend) DeepCopy() *IngressBackend { + if in == nil { + return nil + } + out := new(IngressBackend) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressList) DeepCopyInto(out *IngressList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ingress, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressList. +func (in *IngressList) DeepCopy() *IngressList { + if in == nil { + return nil + } + out := new(IngressList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressRule) DeepCopyInto(out *IngressRule) { + *out = *in + in.IngressRuleValue.DeepCopyInto(&out.IngressRuleValue) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRule. +func (in *IngressRule) DeepCopy() *IngressRule { + if in == nil { + return nil + } + out := new(IngressRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressRuleValue) DeepCopyInto(out *IngressRuleValue) { + *out = *in + if in.HTTP != nil { + in, out := &in.HTTP, &out.HTTP + *out = new(HTTPIngressRuleValue) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressRuleValue. +func (in *IngressRuleValue) DeepCopy() *IngressRuleValue { + if in == nil { + return nil + } + out := new(IngressRuleValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressSpec) DeepCopyInto(out *IngressSpec) { + *out = *in + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(IngressBackend) + **out = **in + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = make([]IngressTLS, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]IngressRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressSpec. +func (in *IngressSpec) DeepCopy() *IngressSpec { + if in == nil { + return nil + } + out := new(IngressSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressStatus) DeepCopyInto(out *IngressStatus) { + *out = *in + in.LoadBalancer.DeepCopyInto(&out.LoadBalancer) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressStatus. +func (in *IngressStatus) DeepCopy() *IngressStatus { + if in == nil { + return nil + } + out := new(IngressStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressTLS) DeepCopyInto(out *IngressTLS) { + *out = *in + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressTLS. +func (in *IngressTLS) DeepCopy() *IngressTLS { + if in == nil { + return nil + } + out := new(IngressTLS) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=node.k8s.io + +package v1alpha1 // import "k8s.io/api/node/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1609 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1/generated.proto + +package v1alpha1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" + resource "k8s.io/apimachinery/pkg/api/resource" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Overhead) Reset() { *m = Overhead{} } +func (*Overhead) ProtoMessage() {} +func (*Overhead) Descriptor() ([]byte, []int) { + return fileDescriptor_82a78945ab308218, []int{0} +} +func (m *Overhead) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Overhead) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Overhead) XXX_Merge(src proto.Message) { + xxx_messageInfo_Overhead.Merge(m, src) +} +func (m *Overhead) XXX_Size() int { + return m.Size() +} +func (m *Overhead) XXX_DiscardUnknown() { + xxx_messageInfo_Overhead.DiscardUnknown(m) +} + +var xxx_messageInfo_Overhead proto.InternalMessageInfo + +func (m *RuntimeClass) Reset() { *m = RuntimeClass{} } +func (*RuntimeClass) ProtoMessage() {} +func (*RuntimeClass) Descriptor() ([]byte, []int) { + return fileDescriptor_82a78945ab308218, []int{1} +} +func (m *RuntimeClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClass.Merge(m, src) +} +func (m *RuntimeClass) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClass) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClass.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeClass proto.InternalMessageInfo + +func (m *RuntimeClassList) Reset() { *m = RuntimeClassList{} } +func (*RuntimeClassList) ProtoMessage() {} +func (*RuntimeClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_82a78945ab308218, []int{2} +} +func (m *RuntimeClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClassList.Merge(m, src) +} +func (m *RuntimeClassList) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClassList) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClassList.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeClassList proto.InternalMessageInfo + +func (m *RuntimeClassSpec) Reset() { *m = RuntimeClassSpec{} } +func (*RuntimeClassSpec) ProtoMessage() {} +func (*RuntimeClassSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_82a78945ab308218, []int{3} +} +func (m *RuntimeClassSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClassSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClassSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClassSpec.Merge(m, src) +} +func (m *RuntimeClassSpec) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClassSpec) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClassSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeClassSpec proto.InternalMessageInfo + +func (m *Scheduling) Reset() { *m = Scheduling{} } +func (*Scheduling) ProtoMessage() {} +func (*Scheduling) Descriptor() ([]byte, []int) { + return fileDescriptor_82a78945ab308218, []int{4} +} +func (m *Scheduling) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Scheduling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Scheduling) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scheduling.Merge(m, src) +} +func (m *Scheduling) XXX_Size() int { + return m.Size() +} +func (m *Scheduling) XXX_DiscardUnknown() { + xxx_messageInfo_Scheduling.DiscardUnknown(m) +} + +var xxx_messageInfo_Scheduling proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Overhead)(nil), "k8s.io.api.node.v1alpha1.Overhead") + proto.RegisterMapType((k8s_io_api_core_v1.ResourceList)(nil), "k8s.io.api.node.v1alpha1.Overhead.PodFixedEntry") + proto.RegisterType((*RuntimeClass)(nil), "k8s.io.api.node.v1alpha1.RuntimeClass") + proto.RegisterType((*RuntimeClassList)(nil), "k8s.io.api.node.v1alpha1.RuntimeClassList") + proto.RegisterType((*RuntimeClassSpec)(nil), "k8s.io.api.node.v1alpha1.RuntimeClassSpec") + proto.RegisterType((*Scheduling)(nil), "k8s.io.api.node.v1alpha1.Scheduling") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.node.v1alpha1.Scheduling.NodeSelectorEntry") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1/generated.proto", fileDescriptor_82a78945ab308218) +} + +var fileDescriptor_82a78945ab308218 = []byte{ + // 698 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xbf, 0x6f, 0xd3, 0x4e, + 0x14, 0xcf, 0xa5, 0xad, 0x94, 0x5e, 0xd2, 0xaa, 0x5f, 0x7f, 0x2b, 0x14, 0x65, 0x70, 0x2a, 0x0b, + 0xa1, 0x0a, 0xa9, 0x67, 0x5a, 0xa1, 0xaa, 0x62, 0x00, 0x61, 0x7e, 0x08, 0x44, 0x69, 0xc1, 0x2d, + 0x0b, 0x62, 0xe0, 0x62, 0x3f, 0x1c, 0x13, 0xdb, 0x67, 0xd9, 0xe7, 0x88, 0x6c, 0x88, 0x05, 0x89, + 0x89, 0x89, 0xff, 0x06, 0xe6, 0x8e, 0x9d, 0x50, 0xa7, 0x96, 0x86, 0xff, 0x81, 0x81, 0x09, 0x9d, + 0x7d, 0x4e, 0x9c, 0xa4, 0xa1, 0x61, 0xf3, 0xdd, 0x7d, 0x7e, 0xdc, 0xfb, 0xbc, 0x7b, 0xc6, 0x77, + 0x3b, 0x3b, 0x31, 0x71, 0x99, 0xde, 0x49, 0x5a, 0x10, 0x05, 0xc0, 0x21, 0xd6, 0xbb, 0x10, 0xd8, + 0x2c, 0xd2, 0xe5, 0x01, 0x0d, 0x5d, 0x3d, 0x60, 0x36, 0xe8, 0xdd, 0x4d, 0xea, 0x85, 0x6d, 0xba, + 0xa9, 0x3b, 0x10, 0x40, 0x44, 0x39, 0xd8, 0x24, 0x8c, 0x18, 0x67, 0x4a, 0x3d, 0x43, 0x12, 0x1a, + 0xba, 0x44, 0x20, 0x49, 0x8e, 0x6c, 0x6c, 0x38, 0x2e, 0x6f, 0x27, 0x2d, 0x62, 0x31, 0x5f, 0x77, + 0x98, 0xc3, 0xf4, 0x94, 0xd0, 0x4a, 0xde, 0xa4, 0xab, 0x74, 0x91, 0x7e, 0x65, 0x42, 0x0d, 0xad, + 0x60, 0x69, 0xb1, 0x48, 0x58, 0x8e, 0x9b, 0x35, 0x6e, 0x0e, 0x31, 0x3e, 0xb5, 0xda, 0x6e, 0x00, + 0x51, 0x4f, 0x0f, 0x3b, 0x4e, 0x4a, 0x8a, 0x20, 0x66, 0x49, 0x64, 0xc1, 0x3f, 0xb1, 0x62, 0xdd, + 0x07, 0x4e, 0x2f, 0xf2, 0xd2, 0xa7, 0xb1, 0xa2, 0x24, 0xe0, 0xae, 0x3f, 0x69, 0xb3, 0x7d, 0x19, + 0x21, 0xb6, 0xda, 0xe0, 0xd3, 0x71, 0x9e, 0x76, 0x5c, 0xc6, 0x95, 0xfd, 0x2e, 0x44, 0x6d, 0xa0, + 0xb6, 0xf2, 0x1d, 0xe1, 0x4a, 0xc8, 0xec, 0x87, 0xee, 0x3b, 0xb0, 0xeb, 0x68, 0x6d, 0x6e, 0xbd, + 0xba, 0x75, 0x83, 0x4c, 0x8b, 0x98, 0xe4, 0x34, 0xf2, 0x4c, 0x52, 0x1e, 0x04, 0x3c, 0xea, 0x19, + 0x1f, 0xd1, 0xd1, 0x69, 0xb3, 0xd4, 0x3f, 0x6d, 0x56, 0xf2, 0xfd, 0xdf, 0xa7, 0xcd, 0xe6, 0x64, + 0xbe, 0xc4, 0x94, 0x91, 0xed, 0xba, 0x31, 0xff, 0x70, 0xf6, 0x57, 0xc8, 0x1e, 0xf5, 0xe1, 0xd3, + 0x59, 0x73, 0x63, 0x96, 0x0e, 0x90, 0xe7, 0x09, 0x0d, 0xb8, 0xcb, 0x7b, 0xe6, 0xa0, 0x96, 0x46, + 0x07, 0x2f, 0x8d, 0x5c, 0x52, 0x59, 0xc1, 0x73, 0x1d, 0xe8, 0xd5, 0xd1, 0x1a, 0x5a, 0x5f, 0x34, + 0xc5, 0xa7, 0x72, 0x1f, 0x2f, 0x74, 0xa9, 0x97, 0x40, 0xbd, 0xbc, 0x86, 0xd6, 0xab, 0x5b, 0xa4, + 0x50, 0xf7, 0xc0, 0x8b, 0x84, 0x1d, 0x27, 0x0d, 0x62, 0xd2, 0x2b, 0x23, 0xdf, 0x2a, 0xef, 0x20, + 0xed, 0x1b, 0xc2, 0x35, 0x33, 0x4b, 0xfd, 0x9e, 0x47, 0xe3, 0x58, 0x79, 0x8d, 0x2b, 0xa2, 0xcf, + 0x36, 0xe5, 0x34, 0x75, 0x1c, 0x4d, 0x75, 0x42, 0x3d, 0x26, 0x02, 0x4d, 0xba, 0x9b, 0x64, 0xbf, + 0xf5, 0x16, 0x2c, 0xfe, 0x14, 0x38, 0x35, 0x14, 0x19, 0x2a, 0x1e, 0xee, 0x99, 0x03, 0x55, 0x65, + 0x17, 0xcf, 0xc7, 0x21, 0x58, 0xf2, 0xee, 0xd7, 0xa7, 0xf7, 0xac, 0x78, 0xaf, 0x83, 0x10, 0x2c, + 0xa3, 0x26, 0x75, 0xe7, 0xc5, 0xca, 0x4c, 0x55, 0xb4, 0xaf, 0x08, 0xaf, 0x14, 0x81, 0xa2, 0x41, + 0xca, 0xab, 0x89, 0x22, 0xc8, 0x6c, 0x45, 0x08, 0x76, 0x5a, 0xc2, 0x4a, 0xfe, 0x2e, 0xf2, 0x9d, + 0x42, 0x01, 0x4f, 0xf0, 0x82, 0xcb, 0xc1, 0x8f, 0xeb, 0xe5, 0xf4, 0xd5, 0x5d, 0x9b, 0xad, 0x02, + 0x63, 0x49, 0x4a, 0x2e, 0x3c, 0x16, 0x64, 0x33, 0xd3, 0xd0, 0x7e, 0x8d, 0xdd, 0x5f, 0x94, 0xa6, + 0xdc, 0xc6, 0xcb, 0x72, 0x14, 0x1e, 0xd1, 0xc0, 0xf6, 0x20, 0xca, 0x9a, 0x6f, 0x5c, 0x91, 0x12, + 0xcb, 0xe6, 0xc8, 0xa9, 0x39, 0x86, 0x56, 0x76, 0x71, 0x85, 0xc9, 0x07, 0x2f, 0x63, 0xd6, 0x2e, + 0x1f, 0x0d, 0xa3, 0x26, 0xea, 0xcd, 0x57, 0xe6, 0x40, 0x41, 0x39, 0xc4, 0x58, 0x0c, 0xa4, 0x9d, + 0x78, 0x6e, 0xe0, 0xd4, 0xe7, 0x52, 0xbd, 0xab, 0xd3, 0xf5, 0x0e, 0x06, 0x58, 0x63, 0x59, 0x3c, + 0x82, 0xe1, 0xda, 0x2c, 0xe8, 0x68, 0x5f, 0xca, 0xb8, 0x70, 0xa4, 0x84, 0xb8, 0x26, 0x64, 0x0e, + 0xc0, 0x03, 0x8b, 0xb3, 0x48, 0x4e, 0xf4, 0xf6, 0x2c, 0x36, 0x64, 0xaf, 0x40, 0xcc, 0xe6, 0x7a, + 0x55, 0x06, 0x55, 0x2b, 0x1e, 0x99, 0x23, 0x0e, 0xca, 0x0b, 0x5c, 0xe5, 0xcc, 0x13, 0x3f, 0x18, + 0x97, 0x05, 0x79, 0x33, 0xd5, 0xa2, 0xa1, 0x98, 0x6c, 0xf1, 0x2a, 0x0e, 0x07, 0x30, 0xe3, 0x7f, + 0x29, 0x5c, 0x1d, 0xee, 0xc5, 0x66, 0x51, 0xa7, 0x71, 0x07, 0xff, 0x37, 0x71, 0x9f, 0x0b, 0x46, + 0x78, 0xb5, 0x38, 0xc2, 0x8b, 0x85, 0x91, 0x34, 0xc8, 0xd1, 0xb9, 0x5a, 0x3a, 0x3e, 0x57, 0x4b, + 0x27, 0xe7, 0x6a, 0xe9, 0x7d, 0x5f, 0x45, 0x47, 0x7d, 0x15, 0x1d, 0xf7, 0x55, 0x74, 0xd2, 0x57, + 0xd1, 0x8f, 0xbe, 0x8a, 0x3e, 0xff, 0x54, 0x4b, 0x2f, 0x2b, 0x79, 0x10, 0x7f, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xa8, 0x77, 0xef, 0x80, 0x9b, 0x06, 0x00, 0x00, +} + +func (m *Overhead) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Overhead) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Overhead) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PodFixed) > 0 { + keysForPodFixed := make([]string, 0, len(m.PodFixed)) + for k := range m.PodFixed { + keysForPodFixed = append(keysForPodFixed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForPodFixed) + for iNdEx := len(keysForPodFixed) - 1; iNdEx >= 0; iNdEx-- { + v := m.PodFixed[k8s_io_api_core_v1.ResourceName(keysForPodFixed[iNdEx])] + baseI := i + { + size, err := ((*resource.Quantity)(&v)).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForPodFixed[iNdEx]) + copy(dAtA[i:], keysForPodFixed[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForPodFixed[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *RuntimeClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClass) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RuntimeClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RuntimeClassSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClassSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scheduling != nil { + { + size, err := m.Scheduling.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Overhead != nil { + { + size, err := m.Overhead.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.RuntimeHandler) + copy(dAtA[i:], m.RuntimeHandler) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeHandler))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Scheduling) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Scheduling) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Scheduling) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Tolerations) > 0 { + for iNdEx := len(m.Tolerations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tolerations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.NodeSelector) > 0 { + keysForNodeSelector := make([]string, 0, len(m.NodeSelector)) + for k := range m.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + for iNdEx := len(keysForNodeSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.NodeSelector[string(keysForNodeSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForNodeSelector[iNdEx]) + copy(dAtA[i:], keysForNodeSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForNodeSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Overhead) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PodFixed) > 0 { + for k, v := range m.PodFixed { + _ = k + _ = v + l = ((*resource.Quantity)(&v)).Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *RuntimeClass) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RuntimeClassList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RuntimeClassSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RuntimeHandler) + n += 1 + l + sovGenerated(uint64(l)) + if m.Overhead != nil { + l = m.Overhead.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Scheduling != nil { + l = m.Scheduling.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *Scheduling) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NodeSelector) > 0 { + for k, v := range m.NodeSelector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Tolerations) > 0 { + for _, e := range m.Tolerations { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Overhead) String() string { + if this == nil { + return "nil" + } + keysForPodFixed := make([]string, 0, len(this.PodFixed)) + for k := range this.PodFixed { + keysForPodFixed = append(keysForPodFixed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForPodFixed) + mapStringForPodFixed := "k8s_io_api_core_v1.ResourceList{" + for _, k := range keysForPodFixed { + mapStringForPodFixed += fmt.Sprintf("%v: %v,", k, this.PodFixed[k8s_io_api_core_v1.ResourceName(k)]) + } + mapStringForPodFixed += "}" + s := strings.Join([]string{`&Overhead{`, + `PodFixed:` + mapStringForPodFixed + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClass) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "RuntimeClassSpec", "RuntimeClassSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]RuntimeClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RuntimeClass", "RuntimeClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RuntimeClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClassSpec{`, + `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, + `Overhead:` + strings.Replace(this.Overhead.String(), "Overhead", "Overhead", 1) + `,`, + `Scheduling:` + strings.Replace(this.Scheduling.String(), "Scheduling", "Scheduling", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Scheduling) String() string { + if this == nil { + return "nil" + } + repeatedStringForTolerations := "[]Toleration{" + for _, f := range this.Tolerations { + repeatedStringForTolerations += fmt.Sprintf("%v", f) + "," + } + repeatedStringForTolerations += "}" + keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) + for k := range this.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + mapStringForNodeSelector := "map[string]string{" + for _, k := range keysForNodeSelector { + mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + } + mapStringForNodeSelector += "}" + s := strings.Join([]string{`&Scheduling{`, + `NodeSelector:` + mapStringForNodeSelector + `,`, + `Tolerations:` + repeatedStringForTolerations + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Overhead) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Overhead: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Overhead: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodFixed", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodFixed == nil { + m.PodFixed = make(k8s_io_api_core_v1.ResourceList) + } + var mapkey k8s_io_api_core_v1.ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.PodFixed[k8s_io_api_core_v1.ResourceName(mapkey)] = ((k8s_io_apimachinery_pkg_api_resource.Quantity)(*mapvalue)) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RuntimeClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClassSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClassSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClassSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeHandler", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Overhead", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Overhead == nil { + m.Overhead = &Overhead{} + } + if err := m.Overhead.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scheduling", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Scheduling == nil { + m.Scheduling = &Scheduling{} + } + if err := m.Scheduling.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Scheduling) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Scheduling: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Scheduling: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeSelector == nil { + m.NodeSelector = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NodeSelector[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tolerations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tolerations = append(m.Tolerations, v11.Toleration{}) + if err := m.Tolerations[len(m.Tolerations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,118 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.node.v1alpha1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1alpha1"; + +// Overhead structure represents the resource overhead associated with running a pod. +message Overhead { + // PodFixed represents the fixed resource overhead associated with running a pod. + // +optional + map podFixed = 1; +} + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +message RuntimeClass { + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the RuntimeClass + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + optional RuntimeClassSpec spec = 2; +} + +// RuntimeClassList is a list of RuntimeClass objects. +message RuntimeClassList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated RuntimeClass items = 2; +} + +// RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters +// that are required to describe the RuntimeClass to the Container Runtime +// Interface (CRI) implementation, as well as any other components that need to +// understand how the pod will be run. The RuntimeClassSpec is immutable. +message RuntimeClassSpec { + // RuntimeHandler specifies the underlying runtime and configuration that the + // CRI implementation will use to handle pods of this class. The possible + // values are specific to the node & CRI configuration. It is assumed that + // all handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements + // and is immutable. + optional string runtimeHandler = 1; + + // Overhead represents the resource overhead associated with running a pod for a + // given RuntimeClass. For more details, see + // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md + // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. + // +optional + optional Overhead overhead = 2; + + // Scheduling holds the scheduling constraints to ensure that pods running + // with this RuntimeClass are scheduled to nodes that support it. + // If scheduling is nil, this RuntimeClass is assumed to be supported by all + // nodes. + // +optional + optional Scheduling scheduling = 3; +} + +// Scheduling specifies the scheduling constraints for nodes supporting a +// RuntimeClass. +message Scheduling { + // nodeSelector lists labels that must be present on nodes that support this + // RuntimeClass. Pods using this RuntimeClass can only be scheduled to a + // node matched by this selector. The RuntimeClass nodeSelector is merged + // with a pod's existing nodeSelector. Any conflicts will cause the pod to + // be rejected in admission. + // +optional + map nodeSelector = 1; + + // tolerations are appended (excluding duplicates) to pods running with this + // RuntimeClass during admission, effectively unioning the set of nodes + // tolerated by the pod and the RuntimeClass. + // +optional + // +listType=atomic + repeated k8s.io.api.core.v1.Toleration tolerations = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "node.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = SchemeBuilder.AddToScheme +) + +// addKnownTypes adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &RuntimeClass{}, + &RuntimeClassList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,116 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +type RuntimeClass struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the RuntimeClass + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + Spec RuntimeClassSpec `json:"spec" protobuf:"bytes,2,name=spec"` +} + +// RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters +// that are required to describe the RuntimeClass to the Container Runtime +// Interface (CRI) implementation, as well as any other components that need to +// understand how the pod will be run. The RuntimeClassSpec is immutable. +type RuntimeClassSpec struct { + // RuntimeHandler specifies the underlying runtime and configuration that the + // CRI implementation will use to handle pods of this class. The possible + // values are specific to the node & CRI configuration. It is assumed that + // all handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements + // and is immutable. + RuntimeHandler string `json:"runtimeHandler" protobuf:"bytes,1,opt,name=runtimeHandler"` + + // Overhead represents the resource overhead associated with running a pod for a + // given RuntimeClass. For more details, see + // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md + // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. + // +optional + Overhead *Overhead `json:"overhead,omitempty" protobuf:"bytes,2,opt,name=overhead"` + + // Scheduling holds the scheduling constraints to ensure that pods running + // with this RuntimeClass are scheduled to nodes that support it. + // If scheduling is nil, this RuntimeClass is assumed to be supported by all + // nodes. + // +optional + Scheduling *Scheduling `json:"scheduling,omitempty" protobuf:"bytes,3,opt,name=scheduling"` +} + +// Overhead structure represents the resource overhead associated with running a pod. +type Overhead struct { + // PodFixed represents the fixed resource overhead associated with running a pod. + // +optional + PodFixed corev1.ResourceList `json:"podFixed,omitempty" protobuf:"bytes,1,opt,name=podFixed,casttype=k8s.io/api/core/v1.ResourceList,castkey=k8s.io/api/core/v1.ResourceName,castvalue=k8s.io/apimachinery/pkg/api/resource.Quantity"` +} + +// Scheduling specifies the scheduling constraints for nodes supporting a +// RuntimeClass. +type Scheduling struct { + // nodeSelector lists labels that must be present on nodes that support this + // RuntimeClass. Pods using this RuntimeClass can only be scheduled to a + // node matched by this selector. The RuntimeClass nodeSelector is merged + // with a pod's existing nodeSelector. Any conflicts will cause the pod to + // be rejected in admission. + // +optional + NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,1,opt,name=nodeSelector"` + + // tolerations are appended (excluding duplicates) to pods running with this + // RuntimeClass during admission, effectively unioning the set of nodes + // tolerated by the pod and the RuntimeClass. + // +optional + // +listType=atomic + Tolerations []corev1.Toleration `json:"tolerations,omitempty" protobuf:"bytes,2,rep,name=tolerations"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClassList is a list of RuntimeClass objects. +type RuntimeClassList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []RuntimeClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,80 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_Overhead = map[string]string{ + "": "Overhead structure represents the resource overhead associated with running a pod.", + "podFixed": "PodFixed represents the fixed resource overhead associated with running a pod.", +} + +func (Overhead) SwaggerDoc() map[string]string { + return map_Overhead +} + +var map_RuntimeClass = map[string]string{ + "": "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the RuntimeClass More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", +} + +func (RuntimeClass) SwaggerDoc() map[string]string { + return map_RuntimeClass +} + +var map_RuntimeClassList = map[string]string{ + "": "RuntimeClassList is a list of RuntimeClass objects.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is a list of schema objects.", +} + +func (RuntimeClassList) SwaggerDoc() map[string]string { + return map_RuntimeClassList +} + +var map_RuntimeClassSpec = map[string]string{ + "": "RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters that are required to describe the RuntimeClass to the Container Runtime Interface (CRI) implementation, as well as any other components that need to understand how the pod will be run. The RuntimeClassSpec is immutable.", + "runtimeHandler": "RuntimeHandler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements and is immutable.", + "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.", + "scheduling": "Scheduling holds the scheduling constraints to ensure that pods running with this RuntimeClass are scheduled to nodes that support it. If scheduling is nil, this RuntimeClass is assumed to be supported by all nodes.", +} + +func (RuntimeClassSpec) SwaggerDoc() map[string]string { + return map_RuntimeClassSpec +} + +var map_Scheduling = map[string]string{ + "": "Scheduling specifies the scheduling constraints for nodes supporting a RuntimeClass.", + "nodeSelector": "nodeSelector lists labels that must be present on nodes that support this RuntimeClass. Pods using this RuntimeClass can only be scheduled to a node matched by this selector. The RuntimeClass nodeSelector is merged with a pod's existing nodeSelector. Any conflicts will cause the pod to be rejected in admission.", + "tolerations": "tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, effectively unioning the set of nodes tolerated by the pod and the RuntimeClass.", +} + +func (Scheduling) SwaggerDoc() map[string]string { + return map_Scheduling +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,165 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Overhead) DeepCopyInto(out *Overhead) { + *out = *in + if in.PodFixed != nil { + in, out := &in.PodFixed, &out.PodFixed + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Overhead. +func (in *Overhead) DeepCopy() *Overhead { + if in == nil { + return nil + } + out := new(Overhead) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClass. +func (in *RuntimeClass) DeepCopy() *RuntimeClass { + if in == nil { + return nil + } + out := new(RuntimeClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassList) DeepCopyInto(out *RuntimeClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RuntimeClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassList. +func (in *RuntimeClassList) DeepCopy() *RuntimeClassList { + if in == nil { + return nil + } + out := new(RuntimeClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassSpec) DeepCopyInto(out *RuntimeClassSpec) { + *out = *in + if in.Overhead != nil { + in, out := &in.Overhead, &out.Overhead + *out = new(Overhead) + (*in).DeepCopyInto(*out) + } + if in.Scheduling != nil { + in, out := &in.Scheduling, &out.Scheduling + *out = new(Scheduling) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassSpec. +func (in *RuntimeClassSpec) DeepCopy() *RuntimeClassSpec { + if in == nil { + return nil + } + out := new(RuntimeClassSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Scheduling) DeepCopyInto(out *Scheduling) { + *out = *in + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]v1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Scheduling. +func (in *Scheduling) DeepCopy() *Scheduling { + if in == nil { + return nil + } + out := new(Scheduling) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=node.k8s.io + +package v1beta1 // import "k8s.io/api/node/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1438 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1/generated.proto + +package v1beta1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" + resource "k8s.io/apimachinery/pkg/api/resource" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *Overhead) Reset() { *m = Overhead{} } +func (*Overhead) ProtoMessage() {} +func (*Overhead) Descriptor() ([]byte, []int) { + return fileDescriptor_f977b0dddc93b4ec, []int{0} +} +func (m *Overhead) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Overhead) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Overhead) XXX_Merge(src proto.Message) { + xxx_messageInfo_Overhead.Merge(m, src) +} +func (m *Overhead) XXX_Size() int { + return m.Size() +} +func (m *Overhead) XXX_DiscardUnknown() { + xxx_messageInfo_Overhead.DiscardUnknown(m) +} + +var xxx_messageInfo_Overhead proto.InternalMessageInfo + +func (m *RuntimeClass) Reset() { *m = RuntimeClass{} } +func (*RuntimeClass) ProtoMessage() {} +func (*RuntimeClass) Descriptor() ([]byte, []int) { + return fileDescriptor_f977b0dddc93b4ec, []int{1} +} +func (m *RuntimeClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClass.Merge(m, src) +} +func (m *RuntimeClass) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClass) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClass.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeClass proto.InternalMessageInfo + +func (m *RuntimeClassList) Reset() { *m = RuntimeClassList{} } +func (*RuntimeClassList) ProtoMessage() {} +func (*RuntimeClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_f977b0dddc93b4ec, []int{2} +} +func (m *RuntimeClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClassList.Merge(m, src) +} +func (m *RuntimeClassList) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClassList) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClassList.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeClassList proto.InternalMessageInfo + +func (m *Scheduling) Reset() { *m = Scheduling{} } +func (*Scheduling) ProtoMessage() {} +func (*Scheduling) Descriptor() ([]byte, []int) { + return fileDescriptor_f977b0dddc93b4ec, []int{3} +} +func (m *Scheduling) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Scheduling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Scheduling) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scheduling.Merge(m, src) +} +func (m *Scheduling) XXX_Size() int { + return m.Size() +} +func (m *Scheduling) XXX_DiscardUnknown() { + xxx_messageInfo_Scheduling.DiscardUnknown(m) +} + +var xxx_messageInfo_Scheduling proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Overhead)(nil), "k8s.io.api.node.v1beta1.Overhead") + proto.RegisterMapType((k8s_io_api_core_v1.ResourceList)(nil), "k8s.io.api.node.v1beta1.Overhead.PodFixedEntry") + proto.RegisterType((*RuntimeClass)(nil), "k8s.io.api.node.v1beta1.RuntimeClass") + proto.RegisterType((*RuntimeClassList)(nil), "k8s.io.api.node.v1beta1.RuntimeClassList") + proto.RegisterType((*Scheduling)(nil), "k8s.io.api.node.v1beta1.Scheduling") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.node.v1beta1.Scheduling.NodeSelectorEntry") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1/generated.proto", fileDescriptor_f977b0dddc93b4ec) +} + +var fileDescriptor_f977b0dddc93b4ec = []byte{ + // 666 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0xbd, 0x6f, 0xd3, 0x40, + 0x14, 0xcf, 0xa5, 0x54, 0x4d, 0x2f, 0x29, 0x14, 0x53, 0x89, 0x28, 0x83, 0x53, 0x82, 0x90, 0xca, + 0xd0, 0x33, 0xad, 0x00, 0x55, 0x2c, 0x20, 0xf3, 0x21, 0x3e, 0x5b, 0x70, 0x61, 0x41, 0x0c, 0x5c, + 0xec, 0x87, 0x63, 0x12, 0xfb, 0xa2, 0xf3, 0x39, 0x22, 0x1b, 0x62, 0x41, 0x62, 0x62, 0xe1, 0xbf, + 0x81, 0xbd, 0x1b, 0x5d, 0x90, 0x3a, 0xb5, 0x34, 0xfc, 0x17, 0x4c, 0xe8, 0xec, 0x73, 0x72, 0x6d, + 0x9a, 0xb6, 0x6c, 0xbe, 0xf3, 0xef, 0xe3, 0xbd, 0xdf, 0xbb, 0x87, 0xef, 0xb4, 0xd7, 0x62, 0x12, + 0x30, 0xab, 0x9d, 0x34, 0x81, 0x47, 0x20, 0x20, 0xb6, 0x7a, 0x10, 0x79, 0x8c, 0x5b, 0xea, 0x07, + 0xed, 0x06, 0x56, 0xc4, 0x3c, 0xb0, 0x7a, 0x2b, 0x4d, 0x10, 0x74, 0xc5, 0xf2, 0x21, 0x02, 0x4e, + 0x05, 0x78, 0xa4, 0xcb, 0x99, 0x60, 0xc6, 0xc5, 0x0c, 0x48, 0x68, 0x37, 0x20, 0x12, 0x48, 0x14, + 0xb0, 0xb6, 0xec, 0x07, 0xa2, 0x95, 0x34, 0x89, 0xcb, 0x42, 0xcb, 0x67, 0x3e, 0xb3, 0x52, 0x7c, + 0x33, 0x79, 0x97, 0x9e, 0xd2, 0x43, 0xfa, 0x95, 0xe9, 0xd4, 0x1a, 0x9a, 0xa1, 0xcb, 0xb8, 0x34, + 0x3c, 0xec, 0x55, 0xbb, 0x3e, 0xc2, 0x84, 0xd4, 0x6d, 0x05, 0x11, 0xf0, 0xbe, 0xd5, 0x6d, 0xfb, + 0x29, 0x89, 0x43, 0xcc, 0x12, 0xee, 0xc2, 0x7f, 0xb1, 0x62, 0x2b, 0x04, 0x41, 0x8f, 0xf2, 0xb2, + 0x26, 0xb1, 0x78, 0x12, 0x89, 0x20, 0x1c, 0xb7, 0xb9, 0x79, 0x12, 0x21, 0x76, 0x5b, 0x10, 0xd2, + 0xc3, 0xbc, 0xc6, 0xcf, 0x22, 0x2e, 0x6d, 0xf4, 0x80, 0xb7, 0x80, 0x7a, 0xc6, 0x2f, 0x84, 0x4b, + 0x5d, 0xe6, 0x3d, 0x08, 0x3e, 0x80, 0x57, 0x45, 0x8b, 0x53, 0x4b, 0xe5, 0x55, 0x8b, 0x4c, 0x48, + 0x98, 0xe4, 0x2c, 0xf2, 0x5c, 0x31, 0xee, 0x47, 0x82, 0xf7, 0xed, 0xcf, 0x68, 0x6b, 0xb7, 0x5e, + 0x18, 0xec, 0xd6, 0x4b, 0xf9, 0xfd, 0xdf, 0xdd, 0x7a, 0x7d, 0x3c, 0x5e, 0xe2, 0xa8, 0xc4, 0x9e, + 0x06, 0xb1, 0xf8, 0xb4, 0x77, 0x2c, 0x64, 0x9d, 0x86, 0xf0, 0x65, 0xaf, 0xbe, 0x7c, 0x9a, 0x01, + 0x90, 0x17, 0x09, 0x8d, 0x44, 0x20, 0xfa, 0xce, 0xb0, 0x95, 0x5a, 0x1b, 0xcf, 0x1d, 0x28, 0xd2, + 0x98, 0xc7, 0x53, 0x6d, 0xe8, 0x57, 0xd1, 0x22, 0x5a, 0x9a, 0x75, 0xe4, 0xa7, 0x71, 0x0f, 0x4f, + 0xf7, 0x68, 0x27, 0x81, 0x6a, 0x71, 0x11, 0x2d, 0x95, 0x57, 0x89, 0xd6, 0xf6, 0xd0, 0x8b, 0x74, + 0xdb, 0x7e, 0x9a, 0xc3, 0xb8, 0x57, 0x46, 0xbe, 0x55, 0x5c, 0x43, 0x8d, 0x1f, 0x45, 0x5c, 0x71, + 0xb2, 0xd0, 0xef, 0x76, 0x68, 0x1c, 0x1b, 0x6f, 0x71, 0x49, 0x8e, 0xd9, 0xa3, 0x82, 0xa6, 0x8e, + 0xe5, 0xd5, 0x6b, 0xc7, 0xa9, 0xc7, 0x44, 0xa2, 0x49, 0x6f, 0x85, 0x6c, 0x34, 0xdf, 0x83, 0x2b, + 0x9e, 0x81, 0xa0, 0xb6, 0xa1, 0x42, 0xc5, 0xa3, 0x3b, 0x67, 0xa8, 0x6a, 0x5c, 0xc5, 0x33, 0x2d, + 0x1a, 0x79, 0x1d, 0xe0, 0x69, 0xf9, 0xb3, 0xf6, 0x39, 0x05, 0x9f, 0x79, 0x98, 0x5d, 0x3b, 0xf9, + 0x7f, 0xe3, 0x09, 0x2e, 0x31, 0x35, 0xb8, 0xea, 0x54, 0x5a, 0xcc, 0xa5, 0x13, 0x27, 0x6c, 0x57, + 0xe4, 0x38, 0xf3, 0x93, 0x33, 0x14, 0x30, 0x36, 0x31, 0x96, 0xcf, 0xca, 0x4b, 0x3a, 0x41, 0xe4, + 0x57, 0xcf, 0xa4, 0x72, 0x97, 0x27, 0xca, 0x6d, 0x0e, 0xa1, 0xf6, 0x59, 0xd9, 0xca, 0xe8, 0xec, + 0x68, 0x32, 0x8d, 0xef, 0x08, 0xcf, 0xeb, 0xf9, 0xc9, 0xf7, 0x61, 0xbc, 0x19, 0xcb, 0x90, 0x9c, + 0x2e, 0x43, 0xc9, 0x4e, 0x13, 0x9c, 0xcf, 0x9f, 0x65, 0x7e, 0xa3, 0xe5, 0xf7, 0x18, 0x4f, 0x07, + 0x02, 0xc2, 0xb8, 0x5a, 0x4c, 0xdf, 0xfc, 0x95, 0x89, 0x2d, 0xe8, 0x75, 0xd9, 0x73, 0x4a, 0x71, + 0xfa, 0x91, 0xe4, 0x3a, 0x99, 0x44, 0xe3, 0x5b, 0x11, 0x6b, 0x9d, 0x19, 0x0c, 0x57, 0xa4, 0xc2, + 0x26, 0x74, 0xc0, 0x15, 0x8c, 0xab, 0xad, 0xba, 0x71, 0x8a, 0x90, 0xc8, 0xba, 0xc6, 0xcb, 0x76, + 0x6b, 0x41, 0x39, 0x56, 0xf4, 0x5f, 0xce, 0x01, 0x03, 0xe3, 0x15, 0x2e, 0x0b, 0xd6, 0x91, 0x3b, + 0x1e, 0xb0, 0x28, 0xef, 0xc8, 0xd4, 0xfd, 0xe4, 0x76, 0xc9, 0x68, 0x5e, 0x0e, 0x61, 0xf6, 0x05, + 0x25, 0x5c, 0x1e, 0xdd, 0xc5, 0x8e, 0xae, 0x53, 0xbb, 0x8d, 0xcf, 0x8f, 0xd5, 0x73, 0xc4, 0x1a, + 0x2d, 0xe8, 0x6b, 0x34, 0xab, 0xad, 0x85, 0xbd, 0xbc, 0xb5, 0x6f, 0x16, 0xb6, 0xf7, 0xcd, 0xc2, + 0xce, 0xbe, 0x59, 0xf8, 0x38, 0x30, 0xd1, 0xd6, 0xc0, 0x44, 0xdb, 0x03, 0x13, 0xed, 0x0c, 0x4c, + 0xf4, 0x7b, 0x60, 0xa2, 0xaf, 0x7f, 0xcc, 0xc2, 0xeb, 0x19, 0x95, 0xc3, 0xbf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x5b, 0xcf, 0x13, 0x0c, 0x1b, 0x06, 0x00, 0x00, +} + +func (m *Overhead) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Overhead) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Overhead) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PodFixed) > 0 { + keysForPodFixed := make([]string, 0, len(m.PodFixed)) + for k := range m.PodFixed { + keysForPodFixed = append(keysForPodFixed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForPodFixed) + for iNdEx := len(keysForPodFixed) - 1; iNdEx >= 0; iNdEx-- { + v := m.PodFixed[k8s_io_api_core_v1.ResourceName(keysForPodFixed[iNdEx])] + baseI := i + { + size, err := ((*resource.Quantity)(&v)).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForPodFixed[iNdEx]) + copy(dAtA[i:], keysForPodFixed[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForPodFixed[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *RuntimeClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClass) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scheduling != nil { + { + size, err := m.Scheduling.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Overhead != nil { + { + size, err := m.Overhead.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + i -= len(m.Handler) + copy(dAtA[i:], m.Handler) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Handler))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RuntimeClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Scheduling) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Scheduling) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Scheduling) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Tolerations) > 0 { + for iNdEx := len(m.Tolerations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tolerations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.NodeSelector) > 0 { + keysForNodeSelector := make([]string, 0, len(m.NodeSelector)) + for k := range m.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + for iNdEx := len(keysForNodeSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.NodeSelector[string(keysForNodeSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForNodeSelector[iNdEx]) + copy(dAtA[i:], keysForNodeSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForNodeSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Overhead) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PodFixed) > 0 { + for k, v := range m.PodFixed { + _ = k + _ = v + l = ((*resource.Quantity)(&v)).Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *RuntimeClass) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Handler) + n += 1 + l + sovGenerated(uint64(l)) + if m.Overhead != nil { + l = m.Overhead.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Scheduling != nil { + l = m.Scheduling.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RuntimeClassList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Scheduling) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NodeSelector) > 0 { + for k, v := range m.NodeSelector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Tolerations) > 0 { + for _, e := range m.Tolerations { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Overhead) String() string { + if this == nil { + return "nil" + } + keysForPodFixed := make([]string, 0, len(this.PodFixed)) + for k := range this.PodFixed { + keysForPodFixed = append(keysForPodFixed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForPodFixed) + mapStringForPodFixed := "k8s_io_api_core_v1.ResourceList{" + for _, k := range keysForPodFixed { + mapStringForPodFixed += fmt.Sprintf("%v: %v,", k, this.PodFixed[k8s_io_api_core_v1.ResourceName(k)]) + } + mapStringForPodFixed += "}" + s := strings.Join([]string{`&Overhead{`, + `PodFixed:` + mapStringForPodFixed + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClass) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Handler:` + fmt.Sprintf("%v", this.Handler) + `,`, + `Overhead:` + strings.Replace(this.Overhead.String(), "Overhead", "Overhead", 1) + `,`, + `Scheduling:` + strings.Replace(this.Scheduling.String(), "Scheduling", "Scheduling", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]RuntimeClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RuntimeClass", "RuntimeClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RuntimeClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *Scheduling) String() string { + if this == nil { + return "nil" + } + repeatedStringForTolerations := "[]Toleration{" + for _, f := range this.Tolerations { + repeatedStringForTolerations += fmt.Sprintf("%v", f) + "," + } + repeatedStringForTolerations += "}" + keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) + for k := range this.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + mapStringForNodeSelector := "map[string]string{" + for _, k := range keysForNodeSelector { + mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + } + mapStringForNodeSelector += "}" + s := strings.Join([]string{`&Scheduling{`, + `NodeSelector:` + mapStringForNodeSelector + `,`, + `Tolerations:` + repeatedStringForTolerations + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Overhead) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Overhead: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Overhead: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodFixed", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodFixed == nil { + m.PodFixed = make(k8s_io_api_core_v1.ResourceList) + } + var mapkey k8s_io_api_core_v1.ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.PodFixed[k8s_io_api_core_v1.ResourceName(mapkey)] = ((k8s_io_apimachinery_pkg_api_resource.Quantity)(*mapvalue)) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Handler", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Handler = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Overhead", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Overhead == nil { + m.Overhead = &Overhead{} + } + if err := m.Overhead.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scheduling", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Scheduling == nil { + m.Scheduling = &Scheduling{} + } + if err := m.Scheduling.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RuntimeClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RuntimeClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Scheduling) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Scheduling: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Scheduling: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeSelector == nil { + m.NodeSelector = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.NodeSelector[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tolerations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tolerations = append(m.Tolerations, v11.Toleration{}) + if err := m.Tolerations[len(m.Tolerations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,108 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.node.v1beta1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// Overhead structure represents the resource overhead associated with running a pod. +message Overhead { + // PodFixed represents the fixed resource overhead associated with running a pod. + // +optional + map podFixed = 1; +} + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +message RuntimeClass { + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Handler specifies the underlying runtime and configuration that the CRI + // implementation will use to handle pods of this class. The possible values + // are specific to the node & CRI configuration. It is assumed that all + // handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The Handler must conform to the DNS Label (RFC 1123) requirements, and is + // immutable. + optional string handler = 2; + + // Overhead represents the resource overhead associated with running a pod for a + // given RuntimeClass. For more details, see + // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md + // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. + // +optional + optional Overhead overhead = 3; + + // Scheduling holds the scheduling constraints to ensure that pods running + // with this RuntimeClass are scheduled to nodes that support it. + // If scheduling is nil, this RuntimeClass is assumed to be supported by all + // nodes. + // +optional + optional Scheduling scheduling = 4; +} + +// RuntimeClassList is a list of RuntimeClass objects. +message RuntimeClassList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of schema objects. + repeated RuntimeClass items = 2; +} + +// Scheduling specifies the scheduling constraints for nodes supporting a +// RuntimeClass. +message Scheduling { + // nodeSelector lists labels that must be present on nodes that support this + // RuntimeClass. Pods using this RuntimeClass can only be scheduled to a + // node matched by this selector. The RuntimeClass nodeSelector is merged + // with a pod's existing nodeSelector. Any conflicts will cause the pod to + // be rejected in admission. + // +optional + map nodeSelector = 1; + + // tolerations are appended (excluding duplicates) to pods running with this + // RuntimeClass during admission, effectively unioning the set of nodes + // tolerated by the pod and the RuntimeClass. + // +optional + // +listType=atomic + repeated k8s.io.api.core.v1.Toleration tolerations = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "node.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder is the scheme builder with scheme init functions to run for this API package + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a common registration function for mapping packaged scoped group & version keys to a scheme + AddToScheme = SchemeBuilder.AddToScheme +) + +// addKnownTypes adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &RuntimeClass{}, + &RuntimeClassList{}, + ) + + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,106 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClass defines a class of container runtime supported in the cluster. +// The RuntimeClass is used to determine which container runtime is used to run +// all containers in a pod. RuntimeClasses are (currently) manually defined by a +// user or cluster provisioner, and referenced in the PodSpec. The Kubelet is +// responsible for resolving the RuntimeClassName reference before running the +// pod. For more details, see +// https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md +type RuntimeClass struct { + metav1.TypeMeta `json:",inline"` + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Handler specifies the underlying runtime and configuration that the CRI + // implementation will use to handle pods of this class. The possible values + // are specific to the node & CRI configuration. It is assumed that all + // handlers are available on every node, and handlers of the same name are + // equivalent on every node. + // For example, a handler called "runc" might specify that the runc OCI + // runtime (using native Linux containers) will be used to run the containers + // in a pod. + // The Handler must conform to the DNS Label (RFC 1123) requirements, and is + // immutable. + Handler string `json:"handler" protobuf:"bytes,2,opt,name=handler"` + + // Overhead represents the resource overhead associated with running a pod for a + // given RuntimeClass. For more details, see + // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md + // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. + // +optional + Overhead *Overhead `json:"overhead,omitempty" protobuf:"bytes,3,opt,name=overhead"` + + // Scheduling holds the scheduling constraints to ensure that pods running + // with this RuntimeClass are scheduled to nodes that support it. + // If scheduling is nil, this RuntimeClass is assumed to be supported by all + // nodes. + // +optional + Scheduling *Scheduling `json:"scheduling,omitempty" protobuf:"bytes,4,opt,name=scheduling"` +} + +// Overhead structure represents the resource overhead associated with running a pod. +type Overhead struct { + // PodFixed represents the fixed resource overhead associated with running a pod. + // +optional + PodFixed corev1.ResourceList `json:"podFixed,omitempty" protobuf:"bytes,1,opt,name=podFixed,casttype=k8s.io/api/core/v1.ResourceList,castkey=k8s.io/api/core/v1.ResourceName,castvalue=k8s.io/apimachinery/pkg/api/resource.Quantity"` +} + +// Scheduling specifies the scheduling constraints for nodes supporting a +// RuntimeClass. +type Scheduling struct { + // nodeSelector lists labels that must be present on nodes that support this + // RuntimeClass. Pods using this RuntimeClass can only be scheduled to a + // node matched by this selector. The RuntimeClass nodeSelector is merged + // with a pod's existing nodeSelector. Any conflicts will cause the pod to + // be rejected in admission. + // +optional + NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,1,opt,name=nodeSelector"` + + // tolerations are appended (excluding duplicates) to pods running with this + // RuntimeClass during admission, effectively unioning the set of nodes + // tolerated by the pod and the RuntimeClass. + // +optional + // +listType=atomic + Tolerations []corev1.Toleration `json:"tolerations,omitempty" protobuf:"bytes,2,rep,name=tolerations"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RuntimeClassList is a list of RuntimeClass objects. +type RuntimeClassList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of schema objects. + Items []RuntimeClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,71 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_Overhead = map[string]string{ + "": "Overhead structure represents the resource overhead associated with running a pod.", + "podFixed": "PodFixed represents the fixed resource overhead associated with running a pod.", +} + +func (Overhead) SwaggerDoc() map[string]string { + return map_Overhead +} + +var map_RuntimeClass = map[string]string{ + "": "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", + "metadata": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "handler": "Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.", + "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.", + "scheduling": "Scheduling holds the scheduling constraints to ensure that pods running with this RuntimeClass are scheduled to nodes that support it. If scheduling is nil, this RuntimeClass is assumed to be supported by all nodes.", +} + +func (RuntimeClass) SwaggerDoc() map[string]string { + return map_RuntimeClass +} + +var map_RuntimeClassList = map[string]string{ + "": "RuntimeClassList is a list of RuntimeClass objects.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is a list of schema objects.", +} + +func (RuntimeClassList) SwaggerDoc() map[string]string { + return map_RuntimeClassList +} + +var map_Scheduling = map[string]string{ + "": "Scheduling specifies the scheduling constraints for nodes supporting a RuntimeClass.", + "nodeSelector": "nodeSelector lists labels that must be present on nodes that support this RuntimeClass. Pods using this RuntimeClass can only be scheduled to a node matched by this selector. The RuntimeClass nodeSelector is merged with a pod's existing nodeSelector. Any conflicts will cause the pod to be rejected in admission.", + "tolerations": "tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, effectively unioning the set of nodes tolerated by the pod and the RuntimeClass.", +} + +func (Scheduling) SwaggerDoc() map[string]string { + return map_Scheduling +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,148 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Overhead) DeepCopyInto(out *Overhead) { + *out = *in + if in.PodFixed != nil { + in, out := &in.PodFixed, &out.PodFixed + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Overhead. +func (in *Overhead) DeepCopy() *Overhead { + if in == nil { + return nil + } + out := new(Overhead) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Overhead != nil { + in, out := &in.Overhead, &out.Overhead + *out = new(Overhead) + (*in).DeepCopyInto(*out) + } + if in.Scheduling != nil { + in, out := &in.Scheduling, &out.Scheduling + *out = new(Scheduling) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClass. +func (in *RuntimeClass) DeepCopy() *RuntimeClass { + if in == nil { + return nil + } + out := new(RuntimeClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassList) DeepCopyInto(out *RuntimeClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RuntimeClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassList. +func (in *RuntimeClassList) DeepCopy() *RuntimeClassList { + if in == nil { + return nil + } + out := new(RuntimeClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RuntimeClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Scheduling) DeepCopyInto(out *Scheduling) { + *out = *in + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]v1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Scheduling. +func (in *Scheduling) DeepCopy() *Scheduling { + if in == nil { + return nil + } + out := new(Scheduling) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,9 +15,10 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true // Package policy is for any kind of policy object. Suitable examples, even if // they aren't all here, are PodDisruptionBudget, PodSecurityPolicy, // NetworkPolicy, etc. -// +k8s:openapi-gen=true package v1beta1 // import "k8s.io/api/policy/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,51 +14,29 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/policy/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/policy/v1beta1/generated.proto - - It has these top-level messages: - AllowedFlexVolume - AllowedHostPath - Eviction - FSGroupStrategyOptions - HostPortRange - IDRange - PodDisruptionBudget - PodDisruptionBudgetList - PodDisruptionBudgetSpec - PodDisruptionBudgetStatus - PodSecurityPolicy - PodSecurityPolicyList - PodSecurityPolicySpec - RunAsUserStrategyOptions - SELinuxStrategyOptions - SupplementalGroupsStrategyOptions -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" + io "io" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import strings "strings" -import reflect "reflect" - -import io "io" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -71,77 +49,540 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } -func (*AllowedFlexVolume) ProtoMessage() {} -func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } -func (*AllowedHostPath) ProtoMessage() {} -func (*AllowedHostPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *Eviction) Reset() { *m = Eviction{} } -func (*Eviction) ProtoMessage() {} -func (*Eviction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } -func (*FSGroupStrategyOptions) ProtoMessage() {} -func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *HostPortRange) Reset() { *m = HostPortRange{} } -func (*HostPortRange) ProtoMessage() {} -func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *IDRange) Reset() { *m = IDRange{} } -func (*IDRange) ProtoMessage() {} -func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } -func (*PodDisruptionBudget) ProtoMessage() {} -func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } -func (*PodDisruptionBudgetList) ProtoMessage() {} -func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } -func (*PodDisruptionBudgetSpec) ProtoMessage() {} -func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } +func (m *AllowedCSIDriver) Reset() { *m = AllowedCSIDriver{} } +func (*AllowedCSIDriver) ProtoMessage() {} +func (*AllowedCSIDriver) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{0} +} +func (m *AllowedCSIDriver) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedCSIDriver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedCSIDriver) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedCSIDriver.Merge(m, src) +} +func (m *AllowedCSIDriver) XXX_Size() int { + return m.Size() +} +func (m *AllowedCSIDriver) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedCSIDriver.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowedCSIDriver proto.InternalMessageInfo + +func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } +func (*AllowedFlexVolume) ProtoMessage() {} +func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{1} +} +func (m *AllowedFlexVolume) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedFlexVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedFlexVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedFlexVolume.Merge(m, src) +} +func (m *AllowedFlexVolume) XXX_Size() int { + return m.Size() +} +func (m *AllowedFlexVolume) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedFlexVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowedFlexVolume proto.InternalMessageInfo + +func (m *AllowedHostPath) Reset() { *m = AllowedHostPath{} } +func (*AllowedHostPath) ProtoMessage() {} +func (*AllowedHostPath) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{2} +} +func (m *AllowedHostPath) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedHostPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedHostPath) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedHostPath.Merge(m, src) +} +func (m *AllowedHostPath) XXX_Size() int { + return m.Size() +} +func (m *AllowedHostPath) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedHostPath.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowedHostPath proto.InternalMessageInfo + +func (m *Eviction) Reset() { *m = Eviction{} } +func (*Eviction) ProtoMessage() {} +func (*Eviction) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{3} +} +func (m *Eviction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Eviction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Eviction) XXX_Merge(src proto.Message) { + xxx_messageInfo_Eviction.Merge(m, src) +} +func (m *Eviction) XXX_Size() int { + return m.Size() +} +func (m *Eviction) XXX_DiscardUnknown() { + xxx_messageInfo_Eviction.DiscardUnknown(m) +} + +var xxx_messageInfo_Eviction proto.InternalMessageInfo + +func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } +func (*FSGroupStrategyOptions) ProtoMessage() {} +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{4} +} +func (m *FSGroupStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FSGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FSGroupStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FSGroupStrategyOptions.Merge(m, src) +} +func (m *FSGroupStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *FSGroupStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_FSGroupStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_FSGroupStrategyOptions proto.InternalMessageInfo + +func (m *HostPortRange) Reset() { *m = HostPortRange{} } +func (*HostPortRange) ProtoMessage() {} +func (*HostPortRange) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{5} +} +func (m *HostPortRange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostPortRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HostPortRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostPortRange.Merge(m, src) +} +func (m *HostPortRange) XXX_Size() int { + return m.Size() +} +func (m *HostPortRange) XXX_DiscardUnknown() { + xxx_messageInfo_HostPortRange.DiscardUnknown(m) +} + +var xxx_messageInfo_HostPortRange proto.InternalMessageInfo + +func (m *IDRange) Reset() { *m = IDRange{} } +func (*IDRange) ProtoMessage() {} +func (*IDRange) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{6} +} +func (m *IDRange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IDRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IDRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_IDRange.Merge(m, src) +} +func (m *IDRange) XXX_Size() int { + return m.Size() +} +func (m *IDRange) XXX_DiscardUnknown() { + xxx_messageInfo_IDRange.DiscardUnknown(m) +} + +var xxx_messageInfo_IDRange proto.InternalMessageInfo + +func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } +func (*PodDisruptionBudget) ProtoMessage() {} +func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{7} +} +func (m *PodDisruptionBudget) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudget) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudget) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudget.Merge(m, src) +} +func (m *PodDisruptionBudget) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudget) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudget.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudget proto.InternalMessageInfo + +func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } +func (*PodDisruptionBudgetList) ProtoMessage() {} +func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{8} +} +func (m *PodDisruptionBudgetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudgetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudgetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudgetList.Merge(m, src) +} +func (m *PodDisruptionBudgetList) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudgetList) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudgetList.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudgetList proto.InternalMessageInfo + +func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } +func (*PodDisruptionBudgetSpec) ProtoMessage() {} +func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{9} +} +func (m *PodDisruptionBudgetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudgetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudgetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudgetSpec.Merge(m, src) +} +func (m *PodDisruptionBudgetSpec) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudgetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudgetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudgetSpec proto.InternalMessageInfo func (m *PodDisruptionBudgetStatus) Reset() { *m = PodDisruptionBudgetStatus{} } func (*PodDisruptionBudgetStatus) ProtoMessage() {} func (*PodDisruptionBudgetStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{9} + return fileDescriptor_014060e454a820dc, []int{10} +} +func (m *PodDisruptionBudgetStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodDisruptionBudgetStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodDisruptionBudgetStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodDisruptionBudgetStatus.Merge(m, src) +} +func (m *PodDisruptionBudgetStatus) XXX_Size() int { + return m.Size() +} +func (m *PodDisruptionBudgetStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodDisruptionBudgetStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodDisruptionBudgetStatus proto.InternalMessageInfo + +func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } +func (*PodSecurityPolicy) ProtoMessage() {} +func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{11} +} +func (m *PodSecurityPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicy.Merge(m, src) +} +func (m *PodSecurityPolicy) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicy proto.InternalMessageInfo + +func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } +func (*PodSecurityPolicyList) ProtoMessage() {} +func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{12} +} +func (m *PodSecurityPolicyList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicyList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicyList.Merge(m, src) +} +func (m *PodSecurityPolicyList) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicyList) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicyList.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicyList proto.InternalMessageInfo + +func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } +func (*PodSecurityPolicySpec) ProtoMessage() {} +func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{13} +} +func (m *PodSecurityPolicySpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySpec.Merge(m, src) +} +func (m *PodSecurityPolicySpec) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySpec.DiscardUnknown(m) } -func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } -func (*PodSecurityPolicy) ProtoMessage() {} -func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } +var xxx_messageInfo_PodSecurityPolicySpec proto.InternalMessageInfo -func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } -func (*PodSecurityPolicyList) ProtoMessage() {} -func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *RunAsGroupStrategyOptions) Reset() { *m = RunAsGroupStrategyOptions{} } +func (*RunAsGroupStrategyOptions) ProtoMessage() {} +func (*RunAsGroupStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{14} +} +func (m *RunAsGroupStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RunAsGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RunAsGroupStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RunAsGroupStrategyOptions.Merge(m, src) +} +func (m *RunAsGroupStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RunAsGroupStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RunAsGroupStrategyOptions.DiscardUnknown(m) +} -func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } -func (*PodSecurityPolicySpec) ProtoMessage() {} -func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } +var xxx_messageInfo_RunAsGroupStrategyOptions proto.InternalMessageInfo func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } func (*RunAsUserStrategyOptions) ProtoMessage() {} func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{13} + return fileDescriptor_014060e454a820dc, []int{15} +} +func (m *RunAsUserStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RunAsUserStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RunAsUserStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RunAsUserStrategyOptions.Merge(m, src) +} +func (m *RunAsUserStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RunAsUserStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RunAsUserStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_RunAsUserStrategyOptions proto.InternalMessageInfo + +func (m *RuntimeClassStrategyOptions) Reset() { *m = RuntimeClassStrategyOptions{} } +func (*RuntimeClassStrategyOptions) ProtoMessage() {} +func (*RuntimeClassStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{16} +} +func (m *RuntimeClassStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeClassStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RuntimeClassStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeClassStrategyOptions.Merge(m, src) +} +func (m *RuntimeClassStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RuntimeClassStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeClassStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeClassStrategyOptions proto.InternalMessageInfo + +func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } +func (*SELinuxStrategyOptions) ProtoMessage() {} +func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_014060e454a820dc, []int{17} +} +func (m *SELinuxStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SELinuxStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SELinuxStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SELinuxStrategyOptions.Merge(m, src) +} +func (m *SELinuxStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *SELinuxStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SELinuxStrategyOptions.DiscardUnknown(m) } -func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } -func (*SELinuxStrategyOptions) ProtoMessage() {} -func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +var xxx_messageInfo_SELinuxStrategyOptions proto.InternalMessageInfo func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{15} + return fileDescriptor_014060e454a820dc, []int{18} +} +func (m *SupplementalGroupsStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SupplementalGroupsStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SupplementalGroupsStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SupplementalGroupsStrategyOptions.Merge(m, src) +} +func (m *SupplementalGroupsStrategyOptions) XXX_Size() int { + return m.Size() } +func (m *SupplementalGroupsStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SupplementalGroupsStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_SupplementalGroupsStrategyOptions proto.InternalMessageInfo func init() { + proto.RegisterType((*AllowedCSIDriver)(nil), "k8s.io.api.policy.v1beta1.AllowedCSIDriver") proto.RegisterType((*AllowedFlexVolume)(nil), "k8s.io.api.policy.v1beta1.AllowedFlexVolume") proto.RegisterType((*AllowedHostPath)(nil), "k8s.io.api.policy.v1beta1.AllowedHostPath") proto.RegisterType((*Eviction)(nil), "k8s.io.api.policy.v1beta1.Eviction") @@ -152,17 +593,175 @@ proto.RegisterType((*PodDisruptionBudgetList)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetList") proto.RegisterType((*PodDisruptionBudgetSpec)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetSpec") proto.RegisterType((*PodDisruptionBudgetStatus)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetStatus") + proto.RegisterMapType((map[string]v1.Time)(nil), "k8s.io.api.policy.v1beta1.PodDisruptionBudgetStatus.DisruptedPodsEntry") proto.RegisterType((*PodSecurityPolicy)(nil), "k8s.io.api.policy.v1beta1.PodSecurityPolicy") proto.RegisterType((*PodSecurityPolicyList)(nil), "k8s.io.api.policy.v1beta1.PodSecurityPolicyList") proto.RegisterType((*PodSecurityPolicySpec)(nil), "k8s.io.api.policy.v1beta1.PodSecurityPolicySpec") + proto.RegisterType((*RunAsGroupStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.RunAsGroupStrategyOptions") proto.RegisterType((*RunAsUserStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.RunAsUserStrategyOptions") + proto.RegisterType((*RuntimeClassStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.RuntimeClassStrategyOptions") proto.RegisterType((*SELinuxStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.SELinuxStrategyOptions") proto.RegisterType((*SupplementalGroupsStrategyOptions)(nil), "k8s.io.api.policy.v1beta1.SupplementalGroupsStrategyOptions") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/policy/v1beta1/generated.proto", fileDescriptor_014060e454a820dc) +} + +var fileDescriptor_014060e454a820dc = []byte{ + // 1883 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x6e, 0x1b, 0xc7, + 0x15, 0xd6, 0x9a, 0xfa, 0xa1, 0x46, 0x3f, 0x16, 0x47, 0x3f, 0x5e, 0x2b, 0x35, 0xd7, 0xd9, 0x00, + 0x85, 0x9b, 0x26, 0xcb, 0x58, 0x76, 0x5c, 0xa3, 0x69, 0x8b, 0x68, 0x45, 0xc9, 0x56, 0x60, 0x59, + 0xec, 0xd0, 0x0e, 0xda, 0xc2, 0x2d, 0x3a, 0xe4, 0x8e, 0xa8, 0x8d, 0x96, 0xbb, 0xdb, 0x99, 0x59, + 0x46, 0xbc, 0xeb, 0x45, 0x2f, 0x7a, 0xd9, 0x17, 0x08, 0xfa, 0x00, 0x45, 0xaf, 0xfa, 0x12, 0x0e, + 0x50, 0x04, 0xb9, 0x0c, 0x7a, 0x41, 0xd4, 0x2c, 0xfa, 0x12, 0xbe, 0x0a, 0x76, 0x38, 0xbb, 0xe4, + 0xfe, 0x91, 0x76, 0x00, 0xfb, 0x8e, 0x3b, 0xe7, 0xfb, 0xbe, 0x33, 0x73, 0xe6, 0xcc, 0x99, 0xc3, + 0x01, 0xe6, 0xc5, 0x7d, 0x66, 0xd8, 0x5e, 0xed, 0x22, 0x68, 0x11, 0xea, 0x12, 0x4e, 0x58, 0xad, + 0x47, 0x5c, 0xcb, 0xa3, 0x35, 0x69, 0xc0, 0xbe, 0x5d, 0xf3, 0x3d, 0xc7, 0x6e, 0xf7, 0x6b, 0xbd, + 0xdb, 0x2d, 0xc2, 0xf1, 0xed, 0x5a, 0x87, 0xb8, 0x84, 0x62, 0x4e, 0x2c, 0xc3, 0xa7, 0x1e, 0xf7, + 0xe0, 0xf5, 0x11, 0xd4, 0xc0, 0xbe, 0x6d, 0x8c, 0xa0, 0x86, 0x84, 0xee, 0x7e, 0xd8, 0xb1, 0xf9, + 0x79, 0xd0, 0x32, 0xda, 0x5e, 0xb7, 0xd6, 0xf1, 0x3a, 0x5e, 0x4d, 0x30, 0x5a, 0xc1, 0x99, 0xf8, + 0x12, 0x1f, 0xe2, 0xd7, 0x48, 0x69, 0x57, 0x9f, 0x70, 0xda, 0xf6, 0x28, 0xa9, 0xf5, 0x32, 0xde, + 0x76, 0xef, 0x8e, 0x31, 0x5d, 0xdc, 0x3e, 0xb7, 0x5d, 0x42, 0xfb, 0x35, 0xff, 0xa2, 0x13, 0x0e, + 0xb0, 0x5a, 0x97, 0x70, 0x9c, 0xc7, 0xaa, 0x15, 0xb1, 0x68, 0xe0, 0x72, 0xbb, 0x4b, 0x32, 0x84, + 0x7b, 0xb3, 0x08, 0xac, 0x7d, 0x4e, 0xba, 0x38, 0xc3, 0xbb, 0x53, 0xc4, 0x0b, 0xb8, 0xed, 0xd4, + 0x6c, 0x97, 0x33, 0x4e, 0xd3, 0x24, 0xfd, 0x2e, 0xd8, 0xd8, 0x77, 0x1c, 0xef, 0x4b, 0x62, 0x1d, + 0x34, 0x8f, 0xeb, 0xd4, 0xee, 0x11, 0x0a, 0x6f, 0x82, 0x79, 0x17, 0x77, 0x89, 0xaa, 0xdc, 0x54, + 0x6e, 0x2d, 0x9b, 0xab, 0xcf, 0x07, 0xda, 0xdc, 0x70, 0xa0, 0xcd, 0x3f, 0xc6, 0x5d, 0x82, 0x84, + 0x45, 0xff, 0x04, 0x54, 0x24, 0xeb, 0xc8, 0x21, 0x97, 0x9f, 0x7b, 0x4e, 0xd0, 0x25, 0xf0, 0xc7, + 0x60, 0xd1, 0x12, 0x02, 0x92, 0xb8, 0x2e, 0x89, 0x8b, 0x23, 0x59, 0x24, 0xad, 0x3a, 0x03, 0x57, + 0x25, 0xf9, 0xa1, 0xc7, 0x78, 0x03, 0xf3, 0x73, 0xb8, 0x07, 0x80, 0x8f, 0xf9, 0x79, 0x83, 0x92, + 0x33, 0xfb, 0x52, 0xd2, 0xa1, 0xa4, 0x83, 0x46, 0x6c, 0x41, 0x13, 0x28, 0xf8, 0x01, 0x28, 0x53, + 0x82, 0xad, 0x53, 0xd7, 0xe9, 0xab, 0x57, 0x6e, 0x2a, 0xb7, 0xca, 0xe6, 0x86, 0x64, 0x94, 0x91, + 0x1c, 0x47, 0x31, 0x42, 0xff, 0x8f, 0x02, 0xca, 0x87, 0x3d, 0xbb, 0xcd, 0x6d, 0xcf, 0x85, 0x7f, + 0x04, 0xe5, 0x70, 0xb7, 0x2c, 0xcc, 0xb1, 0x70, 0xb6, 0xb2, 0xf7, 0x91, 0x31, 0xce, 0xa4, 0x38, + 0x78, 0x86, 0x7f, 0xd1, 0x09, 0x07, 0x98, 0x11, 0xa2, 0x8d, 0xde, 0x6d, 0xe3, 0xb4, 0xf5, 0x05, + 0x69, 0xf3, 0x13, 0xc2, 0xf1, 0x78, 0x7a, 0xe3, 0x31, 0x14, 0xab, 0x42, 0x07, 0xac, 0x59, 0xc4, + 0x21, 0x9c, 0x9c, 0xfa, 0xa1, 0x47, 0x26, 0x66, 0xb8, 0xb2, 0x77, 0xe7, 0xd5, 0xdc, 0xd4, 0x27, + 0xa9, 0x66, 0x65, 0x38, 0xd0, 0xd6, 0x12, 0x43, 0x28, 0x29, 0xae, 0x7f, 0xa5, 0x80, 0x9d, 0xa3, + 0xe6, 0x03, 0xea, 0x05, 0x7e, 0x93, 0x87, 0xbb, 0xdb, 0xe9, 0x4b, 0x13, 0xfc, 0x19, 0x98, 0xa7, + 0x81, 0x13, 0xed, 0xe5, 0x7b, 0xd1, 0x5e, 0xa2, 0xc0, 0x21, 0x2f, 0x07, 0xda, 0x66, 0x8a, 0xf5, + 0xa4, 0xef, 0x13, 0x24, 0x08, 0xf0, 0x33, 0xb0, 0x48, 0xb1, 0xdb, 0x21, 0xe1, 0xd4, 0x4b, 0xb7, + 0x56, 0xf6, 0x74, 0xa3, 0xf0, 0xac, 0x19, 0xc7, 0x75, 0x14, 0x42, 0xc7, 0x3b, 0x2e, 0x3e, 0x19, + 0x92, 0x0a, 0xfa, 0x09, 0x58, 0x13, 0x5b, 0xed, 0x51, 0x2e, 0x2c, 0xf0, 0x06, 0x28, 0x75, 0x6d, + 0x57, 0x4c, 0x6a, 0xc1, 0x5c, 0x91, 0xac, 0xd2, 0x89, 0xed, 0xa2, 0x70, 0x5c, 0x98, 0xf1, 0xa5, + 0x88, 0xd9, 0xa4, 0x19, 0x5f, 0xa2, 0x70, 0x5c, 0x7f, 0x00, 0x96, 0xa4, 0xc7, 0x49, 0xa1, 0xd2, + 0x74, 0xa1, 0x52, 0x8e, 0xd0, 0x3f, 0xae, 0x80, 0xcd, 0x86, 0x67, 0xd5, 0x6d, 0x46, 0x03, 0x11, + 0x2f, 0x33, 0xb0, 0x3a, 0x84, 0xbf, 0x85, 0xfc, 0x78, 0x02, 0xe6, 0x99, 0x4f, 0xda, 0x32, 0x2d, + 0xf6, 0xa6, 0xc4, 0x36, 0x67, 0x7e, 0x4d, 0x9f, 0xb4, 0xc7, 0xc7, 0x32, 0xfc, 0x42, 0x42, 0x0d, + 0x3e, 0x03, 0x8b, 0x8c, 0x63, 0x1e, 0x30, 0xb5, 0x24, 0x74, 0xef, 0xbe, 0xa6, 0xae, 0xe0, 0x8e, + 0x77, 0x71, 0xf4, 0x8d, 0xa4, 0xa6, 0xfe, 0x6f, 0x05, 0x5c, 0xcb, 0x61, 0x3d, 0xb2, 0x19, 0x87, + 0xcf, 0x32, 0x11, 0x33, 0x5e, 0x2d, 0x62, 0x21, 0x5b, 0xc4, 0x2b, 0x3e, 0xbc, 0xd1, 0xc8, 0x44, + 0xb4, 0x9a, 0x60, 0xc1, 0xe6, 0xa4, 0x1b, 0xa5, 0xa2, 0xf1, 0x7a, 0xcb, 0x32, 0xd7, 0xa4, 0xf4, + 0xc2, 0x71, 0x28, 0x82, 0x46, 0x5a, 0xfa, 0x37, 0x57, 0x72, 0x97, 0x13, 0x86, 0x13, 0x9e, 0x81, + 0xd5, 0xae, 0xed, 0xee, 0xf7, 0xb0, 0xed, 0xe0, 0x96, 0x3c, 0x3d, 0xd3, 0x92, 0x20, 0xac, 0xb0, + 0xc6, 0xa8, 0xc2, 0x1a, 0xc7, 0x2e, 0x3f, 0xa5, 0x4d, 0x4e, 0x6d, 0xb7, 0x63, 0x6e, 0x0c, 0x07, + 0xda, 0xea, 0xc9, 0x84, 0x12, 0x4a, 0xe8, 0xc2, 0xdf, 0x83, 0x32, 0x23, 0x0e, 0x69, 0x73, 0x8f, + 0xbe, 0x5e, 0x85, 0x78, 0x84, 0x5b, 0xc4, 0x69, 0x4a, 0xaa, 0xb9, 0x1a, 0xc6, 0x2d, 0xfa, 0x42, + 0xb1, 0x24, 0x74, 0xc0, 0x7a, 0x17, 0x5f, 0x3e, 0x75, 0x71, 0xbc, 0x90, 0xd2, 0x0f, 0x5c, 0x08, + 0x1c, 0x0e, 0xb4, 0xf5, 0x93, 0x84, 0x16, 0x4a, 0x69, 0xeb, 0xff, 0x9f, 0x07, 0xd7, 0x0b, 0xb3, + 0x0a, 0x7e, 0x06, 0xa0, 0xd7, 0x62, 0x84, 0xf6, 0x88, 0xf5, 0x60, 0x74, 0x07, 0xd9, 0x5e, 0x74, + 0x70, 0x77, 0xe5, 0x06, 0xc1, 0xd3, 0x0c, 0x02, 0xe5, 0xb0, 0xe0, 0x5f, 0x14, 0xb0, 0x66, 0x8d, + 0xdc, 0x10, 0xab, 0xe1, 0x59, 0x51, 0x62, 0x3c, 0xf8, 0x21, 0xf9, 0x6e, 0xd4, 0x27, 0x95, 0x0e, + 0x5d, 0x4e, 0xfb, 0xe6, 0xb6, 0x9c, 0xd0, 0x5a, 0xc2, 0x86, 0x92, 0x4e, 0xe1, 0x09, 0x80, 0x56, + 0x2c, 0xc9, 0xe4, 0x9d, 0x26, 0x42, 0xbc, 0x60, 0xde, 0x90, 0x0a, 0xdb, 0x09, 0xbf, 0x11, 0x08, + 0xe5, 0x10, 0xe1, 0xaf, 0xc0, 0x7a, 0x3b, 0xa0, 0x94, 0xb8, 0xfc, 0x21, 0xc1, 0x0e, 0x3f, 0xef, + 0xab, 0xf3, 0x42, 0x6a, 0x47, 0x4a, 0xad, 0x1f, 0x24, 0xac, 0x28, 0x85, 0x0e, 0xf9, 0x16, 0x61, + 0x36, 0x25, 0x56, 0xc4, 0x5f, 0x48, 0xf2, 0xeb, 0x09, 0x2b, 0x4a, 0xa1, 0xe1, 0x7d, 0xb0, 0x4a, + 0x2e, 0x7d, 0xd2, 0x8e, 0x62, 0xba, 0x28, 0xd8, 0x5b, 0x92, 0xbd, 0x7a, 0x38, 0x61, 0x43, 0x09, + 0xe4, 0xae, 0x03, 0x60, 0x36, 0x88, 0x70, 0x03, 0x94, 0x2e, 0x48, 0x7f, 0x74, 0xf3, 0xa0, 0xf0, + 0x27, 0xfc, 0x14, 0x2c, 0xf4, 0xb0, 0x13, 0x10, 0x99, 0xeb, 0xef, 0xbf, 0x5a, 0xae, 0x3f, 0xb1, + 0xbb, 0x04, 0x8d, 0x88, 0x3f, 0xbf, 0x72, 0x5f, 0xd1, 0xbf, 0x56, 0x40, 0xa5, 0xe1, 0x59, 0x4d, + 0xd2, 0x0e, 0xa8, 0xcd, 0xfb, 0x0d, 0xb1, 0xcf, 0x6f, 0xa1, 0x66, 0xa3, 0x44, 0xcd, 0xfe, 0x68, + 0x7a, 0xae, 0x25, 0x67, 0x57, 0x54, 0xb1, 0xf5, 0xe7, 0x0a, 0xd8, 0xce, 0xa0, 0xdf, 0x42, 0x45, + 0xfd, 0x75, 0xb2, 0xa2, 0x7e, 0xf0, 0x3a, 0x8b, 0x29, 0xa8, 0xa7, 0x5f, 0x57, 0x72, 0x96, 0x22, + 0xaa, 0x69, 0xd8, 0xdd, 0x51, 0xbb, 0x67, 0x3b, 0xa4, 0x43, 0x2c, 0xb1, 0x98, 0xf2, 0x44, 0x77, + 0x17, 0x5b, 0xd0, 0x04, 0x0a, 0x32, 0xb0, 0x63, 0x91, 0x33, 0x1c, 0x38, 0x7c, 0xdf, 0xb2, 0x0e, + 0xb0, 0x8f, 0x5b, 0xb6, 0x63, 0x73, 0x5b, 0xb6, 0x23, 0xcb, 0xe6, 0x27, 0xc3, 0x81, 0xb6, 0x53, + 0xcf, 0x45, 0xbc, 0x1c, 0x68, 0x37, 0xb2, 0xdd, 0xbc, 0x11, 0x43, 0xfa, 0xa8, 0x40, 0x1a, 0xf6, + 0x81, 0x4a, 0xc9, 0x9f, 0x82, 0xf0, 0x50, 0xd4, 0xa9, 0xe7, 0x27, 0xdc, 0x96, 0x84, 0xdb, 0x5f, + 0x0e, 0x07, 0x9a, 0x8a, 0x0a, 0x30, 0xb3, 0x1d, 0x17, 0xca, 0xc3, 0x2f, 0xc0, 0x26, 0x96, 0x7d, + 0xf8, 0xa4, 0xd7, 0x79, 0xe1, 0xf5, 0xfe, 0x70, 0xa0, 0x6d, 0xee, 0x67, 0xcd, 0xb3, 0x1d, 0xe6, + 0x89, 0xc2, 0x1a, 0x58, 0xea, 0x89, 0x96, 0x9d, 0xa9, 0x0b, 0x42, 0x7f, 0x7b, 0x38, 0xd0, 0x96, + 0x46, 0x5d, 0x7c, 0xa8, 0xb9, 0x78, 0xd4, 0x14, 0x8d, 0x60, 0x84, 0x82, 0x1f, 0x83, 0x95, 0x73, + 0x8f, 0xf1, 0xc7, 0x84, 0x7f, 0xe9, 0xd1, 0x0b, 0x51, 0x18, 0xca, 0xe6, 0xa6, 0xdc, 0xc1, 0x95, + 0x87, 0x63, 0x13, 0x9a, 0xc4, 0xc1, 0xdf, 0x82, 0xe5, 0x73, 0xd9, 0xf6, 0x31, 0x75, 0x49, 0x24, + 0xda, 0xad, 0x29, 0x89, 0x96, 0x68, 0x11, 0xcd, 0x8a, 0x94, 0x5f, 0x8e, 0x86, 0x19, 0x1a, 0xab, + 0xc1, 0x9f, 0x80, 0x25, 0xf1, 0x71, 0x5c, 0x57, 0xcb, 0x62, 0x36, 0x57, 0x25, 0x7c, 0xe9, 0xe1, + 0x68, 0x18, 0x45, 0xf6, 0x08, 0x7a, 0xdc, 0x38, 0x50, 0x97, 0xb3, 0xd0, 0xe3, 0xc6, 0x01, 0x8a, + 0xec, 0xf0, 0x19, 0x58, 0x62, 0xe4, 0x91, 0xed, 0x06, 0x97, 0x2a, 0x10, 0x47, 0xee, 0xf6, 0x94, + 0xe9, 0x36, 0x0f, 0x05, 0x32, 0xd5, 0x70, 0x8f, 0xd5, 0xa5, 0x1d, 0x45, 0x92, 0xd0, 0x02, 0xcb, + 0x34, 0x70, 0xf7, 0xd9, 0x53, 0x46, 0xa8, 0xba, 0x92, 0xb9, 0xed, 0xd3, 0xfa, 0x28, 0xc2, 0xa6, + 0x3d, 0xc4, 0x91, 0x89, 0x11, 0x68, 0x2c, 0x0c, 0x2d, 0x00, 0xc4, 0x87, 0xe8, 0xeb, 0xd5, 0x9d, + 0x99, 0x7d, 0x20, 0x8a, 0xc1, 0x69, 0x3f, 0xeb, 0xe1, 0xf1, 0x1c, 0x9b, 0xd1, 0x84, 0x2e, 0xfc, + 0xab, 0x02, 0x20, 0x0b, 0x7c, 0xdf, 0x21, 0x5d, 0xe2, 0x72, 0xec, 0x88, 0x51, 0xa6, 0xae, 0x0a, + 0x77, 0xbf, 0x98, 0x16, 0xb5, 0x0c, 0x29, 0xed, 0x36, 0x6e, 0x06, 0xb2, 0x50, 0x94, 0xe3, 0x33, + 0xdc, 0xb4, 0x33, 0xb9, 0xda, 0xb5, 0x99, 0x9b, 0x96, 0xff, 0x2f, 0x69, 0xbc, 0x69, 0xd2, 0x8e, + 0x22, 0x49, 0xf8, 0x39, 0xd8, 0x89, 0xfe, 0x43, 0x22, 0xcf, 0xe3, 0x47, 0xb6, 0x43, 0x58, 0x9f, + 0x71, 0xd2, 0x55, 0xd7, 0x45, 0x32, 0x55, 0x25, 0x73, 0x07, 0xe5, 0xa2, 0x50, 0x01, 0x1b, 0x76, + 0x81, 0x16, 0x15, 0xa1, 0xf0, 0x84, 0xc6, 0x55, 0xf0, 0x90, 0xb5, 0xb1, 0x33, 0xea, 0x8d, 0xae, + 0x0a, 0x07, 0xef, 0x0d, 0x07, 0x9a, 0x56, 0x9f, 0x0e, 0x45, 0xb3, 0xb4, 0xe0, 0x6f, 0x80, 0x8a, + 0x8b, 0xfc, 0x6c, 0x08, 0x3f, 0x3f, 0x0a, 0x2b, 0x5b, 0xa1, 0x83, 0x42, 0x36, 0xf4, 0xc1, 0x06, + 0x4e, 0xfe, 0x9b, 0x67, 0x6a, 0x45, 0x9c, 0xf5, 0xf7, 0xa7, 0xec, 0x43, 0xea, 0x01, 0xc0, 0x54, + 0x65, 0x18, 0x37, 0x52, 0x06, 0x86, 0x32, 0xea, 0xf0, 0x12, 0x40, 0x9c, 0x7e, 0x7c, 0x60, 0x2a, + 0x9c, 0x79, 0x91, 0x65, 0x5e, 0x2c, 0xc6, 0xa9, 0x96, 0x31, 0x31, 0x94, 0xe3, 0x03, 0x72, 0x50, + 0xc1, 0xa9, 0xc7, 0x12, 0xa6, 0x5e, 0x13, 0x8e, 0x7f, 0x3a, 0xdb, 0x71, 0xcc, 0x31, 0xaf, 0x4b, + 0xbf, 0x95, 0xb4, 0x85, 0xa1, 0xac, 0x03, 0xf8, 0x08, 0x6c, 0xc9, 0xc1, 0xa7, 0x2e, 0xc3, 0x67, + 0xa4, 0xd9, 0x67, 0x6d, 0xee, 0x30, 0x75, 0x53, 0xd4, 0x6e, 0x75, 0x38, 0xd0, 0xb6, 0xf6, 0x73, + 0xec, 0x28, 0x97, 0x05, 0x3f, 0x05, 0x1b, 0x67, 0x1e, 0x6d, 0xd9, 0x96, 0x45, 0xdc, 0x48, 0x69, + 0x4b, 0x28, 0x6d, 0x85, 0xf1, 0x3f, 0x4a, 0xd9, 0x50, 0x06, 0x0d, 0x19, 0xd8, 0x96, 0xca, 0x0d, + 0xea, 0xb5, 0x4f, 0xbc, 0xc0, 0xe5, 0xe1, 0x75, 0xc1, 0xd4, 0xed, 0xf8, 0x8a, 0xdc, 0xde, 0xcf, + 0x03, 0xbc, 0x1c, 0x68, 0x37, 0x73, 0xae, 0xab, 0x04, 0x08, 0xe5, 0x6b, 0x43, 0x07, 0xac, 0xca, + 0xe7, 0xaf, 0x03, 0x07, 0x33, 0xa6, 0xaa, 0xe2, 0xa8, 0xdf, 0x9b, 0x5e, 0xd8, 0x62, 0x78, 0xfa, + 0xbc, 0x8b, 0xff, 0x65, 0x93, 0x00, 0x94, 0x50, 0xd7, 0xff, 0xae, 0x80, 0xeb, 0x85, 0x85, 0x11, + 0xde, 0x4b, 0xbc, 0xa9, 0xe8, 0xa9, 0x37, 0x15, 0x98, 0x25, 0xbe, 0x81, 0x27, 0x95, 0xaf, 0x14, + 0xa0, 0x16, 0xdd, 0x10, 0xf0, 0xe3, 0xc4, 0x04, 0xdf, 0x4d, 0x4d, 0xb0, 0x92, 0xe1, 0xbd, 0x81, + 0xf9, 0x7d, 0xa3, 0x80, 0x77, 0xa6, 0xec, 0x40, 0x5c, 0x90, 0x88, 0x35, 0x89, 0x7a, 0x8c, 0xc3, + 0xa3, 0xac, 0x88, 0x3c, 0x1a, 0x17, 0xa4, 0x1c, 0x0c, 0x2a, 0x64, 0xc3, 0xa7, 0xe0, 0x9a, 0xac, + 0x86, 0x69, 0x9b, 0xe8, 0xdc, 0x97, 0xcd, 0x77, 0x86, 0x03, 0xed, 0x5a, 0x3d, 0x1f, 0x82, 0x8a, + 0xb8, 0xfa, 0x3f, 0x15, 0xb0, 0x93, 0x7f, 0xe5, 0xc3, 0x3b, 0x89, 0x70, 0x6b, 0xa9, 0x70, 0x5f, + 0x4d, 0xb1, 0x64, 0xb0, 0xff, 0x00, 0xd6, 0x65, 0x63, 0x90, 0x7c, 0x22, 0x4c, 0x04, 0x3d, 0x3c, + 0x22, 0x61, 0x4f, 0x2f, 0x25, 0xa2, 0xf4, 0x15, 0xff, 0xc6, 0x93, 0x63, 0x28, 0xa5, 0xa6, 0xff, + 0x4b, 0x01, 0xef, 0xce, 0xbc, 0x6c, 0xa1, 0x99, 0x98, 0xba, 0x91, 0x9a, 0x7a, 0xb5, 0x58, 0xe0, + 0xcd, 0xbc, 0x14, 0x9a, 0x1f, 0x3e, 0x7f, 0x51, 0x9d, 0xfb, 0xf6, 0x45, 0x75, 0xee, 0xbb, 0x17, + 0xd5, 0xb9, 0x3f, 0x0f, 0xab, 0xca, 0xf3, 0x61, 0x55, 0xf9, 0x76, 0x58, 0x55, 0xbe, 0x1b, 0x56, + 0x95, 0xff, 0x0e, 0xab, 0xca, 0xdf, 0xfe, 0x57, 0x9d, 0xfb, 0xdd, 0x92, 0x94, 0xfb, 0x3e, 0x00, + 0x00, 0xff, 0xff, 0x48, 0x23, 0x7b, 0x0e, 0x44, 0x18, 0x00, 0x00, +} + +func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AllowedCSIDriver) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllowedCSIDriver) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -170,21 +769,27 @@ } func (m *AllowedFlexVolume) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllowedFlexVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) - i += copy(dAtA[i:], m.Driver) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *AllowedHostPath) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -192,29 +797,35 @@ } func (m *AllowedHostPath) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllowedHostPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.PathPrefix))) - i += copy(dAtA[i:], m.PathPrefix) - dAtA[i] = 0x10 - i++ + i-- if m.ReadOnly { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - return i, nil + i-- + dAtA[i] = 0x10 + i -= len(m.PathPrefix) + copy(dAtA[i:], m.PathPrefix) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PathPrefix))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Eviction) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -222,35 +833,44 @@ } func (m *Eviction) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Eviction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 if m.DeleteOptions != nil { + { + size, err := m.DeleteOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DeleteOptions.Size())) - n2, err := m.DeleteOptions.MarshalTo(dAtA[i:]) + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n2 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *FSGroupStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -258,33 +878,41 @@ } func (m *FSGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FSGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *HostPortRange) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -292,23 +920,28 @@ } func (m *HostPortRange) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostPortRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) - return i, nil + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *IDRange) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -316,23 +949,28 @@ } func (m *IDRange) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IDRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) - return i, nil + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *PodDisruptionBudget) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -340,41 +978,52 @@ } func (m *PodDisruptionBudget) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudget) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n4, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n5, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n5 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodDisruptionBudgetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -382,37 +1031,46 @@ } func (m *PodDisruptionBudgetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudgetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodDisruptionBudgetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -420,47 +1078,58 @@ } func (m *PodDisruptionBudgetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudgetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.MinAvailable != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MinAvailable.Size())) - n7, err := m.MinAvailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.MaxUnavailable != nil { + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n7 + i-- + dAtA[i] = 0x1a } if m.Selector != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n8, err := m.Selector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- + dAtA[i] = 0x12 } - if m.MaxUnavailable != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) - n9, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.MinAvailable != nil { + { + size, err := m.MinAvailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *PodDisruptionBudgetStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -468,63 +1137,66 @@ } func (m *PodDisruptionBudgetStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodDisruptionBudgetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i = encodeVarintGenerated(dAtA, i, uint64(m.ExpectedPods)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredHealthy)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentHealthy)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.PodDisruptionsAllowed)) + i-- + dAtA[i] = 0x18 if len(m.DisruptedPods) > 0 { keysForDisruptedPods := make([]string, 0, len(m.DisruptedPods)) for k := range m.DisruptedPods { keysForDisruptedPods = append(keysForDisruptedPods, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) - for _, k := range keysForDisruptedPods { - dAtA[i] = 0x12 - i++ - v := m.DisruptedPods[string(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) + for iNdEx := len(keysForDisruptedPods) - 1; iNdEx >= 0; iNdEx-- { + v := m.DisruptedPods[string(keysForDisruptedPods[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i-- + dAtA[i] = 0x12 + i -= len(keysForDisruptedPods[iNdEx]) + copy(dAtA[i:], keysForDisruptedPods[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForDisruptedPods[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n10, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 } } - dAtA[i] = 0x18 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PodDisruptionsAllowed)) - dAtA[i] = 0x20 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentHealthy)) - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredHealthy)) - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ExpectedPods)) - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *PodSecurityPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -532,33 +1204,42 @@ } func (m *PodSecurityPolicy) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n11, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n12, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n12 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodSecurityPolicyList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -566,37 +1247,46 @@ } func (m *PodSecurityPolicyList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n13, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n13 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodSecurityPolicySpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -604,245 +1294,325 @@ } func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Privileged { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.RuntimeClass != nil { + { + size, err := m.RuntimeClass.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 } - i++ - if len(m.DefaultAddCapabilities) > 0 { - for _, s := range m.DefaultAddCapabilities { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.AllowedCSIDrivers) > 0 { + for iNdEx := len(m.AllowedCSIDrivers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedCSIDrivers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba } } - if len(m.RequiredDropCapabilities) > 0 { - for _, s := range m.RequiredDropCapabilities { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.RunAsGroup != nil { + { + size, err := m.RunAsGroup.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 } - if len(m.AllowedCapabilities) > 0 { - for _, s := range m.AllowedCapabilities { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.AllowedProcMountTypes) > 0 { + for iNdEx := len(m.AllowedProcMountTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedProcMountTypes[iNdEx]) + copy(dAtA[i:], m.AllowedProcMountTypes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedProcMountTypes[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa } } - if len(m.Volumes) > 0 { - for _, s := range m.Volumes { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.ForbiddenSysctls) > 0 { + for iNdEx := len(m.ForbiddenSysctls) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ForbiddenSysctls[iNdEx]) + copy(dAtA[i:], m.ForbiddenSysctls[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ForbiddenSysctls[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 } } - dAtA[i] = 0x30 - i++ - if m.HostNetwork { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.AllowedUnsafeSysctls) > 0 { + for iNdEx := len(m.AllowedUnsafeSysctls) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedUnsafeSysctls[iNdEx]) + copy(dAtA[i:], m.AllowedUnsafeSysctls[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedUnsafeSysctls[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } } - i++ - if len(m.HostPorts) > 0 { - for _, msg := range m.HostPorts { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.AllowedFlexVolumes) > 0 { + for iNdEx := len(m.AllowedFlexVolumes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedFlexVolumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 } } - dAtA[i] = 0x40 - i++ - if m.HostPID { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.AllowedHostPaths) > 0 { + for iNdEx := len(m.AllowedHostPaths) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedHostPaths[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } } - i++ - dAtA[i] = 0x48 - i++ - if m.HostIPC { + if m.AllowPrivilegeEscalation != nil { + i-- + if *m.AllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } + if m.DefaultAllowPrivilegeEscalation != nil { + i-- + if *m.DefaultAllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x78 + } + i-- + if m.ReadOnlyRootFilesystem { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x52 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SELinux.Size())) - n14, err := m.SELinux.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x70 + { + size, err := m.FSGroup.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n14 - dAtA[i] = 0x5a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RunAsUser.Size())) - n15, err := m.RunAsUser.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x6a + { + size, err := m.SupplementalGroups.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n15 + i-- dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SupplementalGroups.Size())) - n16, err := m.SupplementalGroups.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RunAsUser.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n16 - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FSGroup.Size())) - n17, err := m.FSGroup.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i-- + dAtA[i] = 0x5a + { + size, err := m.SELinux.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n17 - dAtA[i] = 0x70 - i++ - if m.ReadOnlyRootFilesystem { + i-- + dAtA[i] = 0x52 + i-- + if m.HostIPC { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - if m.DefaultAllowPrivilegeEscalation != nil { - dAtA[i] = 0x78 - i++ - if *m.DefaultAllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + dAtA[i] = 0x48 + i-- + if m.HostPID { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + if len(m.HostPorts) > 0 { + for iNdEx := len(m.HostPorts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostPorts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a } - i++ } - if m.AllowPrivilegeEscalation != nil { - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x1 - i++ - if *m.AllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i-- + if m.HostNetwork { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + if len(m.Volumes) > 0 { + for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Volumes[iNdEx]) + copy(dAtA[i:], m.Volumes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volumes[iNdEx]))) + i-- + dAtA[i] = 0x2a } - i++ } - if len(m.AllowedHostPaths) > 0 { - for _, msg := range m.AllowedHostPaths { - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.AllowedCapabilities) > 0 { + for iNdEx := len(m.AllowedCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedCapabilities[iNdEx]) + copy(dAtA[i:], m.AllowedCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x22 } } - if len(m.AllowedFlexVolumes) > 0 { - for _, msg := range m.AllowedFlexVolumes { - dAtA[i] = 0x92 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.RequiredDropCapabilities) > 0 { + for iNdEx := len(m.RequiredDropCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RequiredDropCapabilities[iNdEx]) + copy(dAtA[i:], m.RequiredDropCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RequiredDropCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x1a } } - if len(m.AllowedUnsafeSysctls) > 0 { - for _, s := range m.AllowedUnsafeSysctls { - dAtA[i] = 0x9a - i++ - dAtA[i] = 0x1 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.DefaultAddCapabilities) > 0 { + for iNdEx := len(m.DefaultAddCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DefaultAddCapabilities[iNdEx]) + copy(dAtA[i:], m.DefaultAddCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DefaultAddCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - if len(m.ForbiddenSysctls) > 0 { - for _, s := range m.ForbiddenSysctls { - dAtA[i] = 0xa2 - i++ - dAtA[i] = 0x1 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ + i-- + if m.Privileged { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *RunAsGroupStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RunAsGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RunAsGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Ranges) > 0 { + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RunAsUserStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -850,33 +1620,80 @@ } func (m *RunAsUserStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RunAsUserStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RuntimeClassStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RuntimeClassStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeClassStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DefaultRuntimeClassName != nil { + i -= len(*m.DefaultRuntimeClassName) + copy(dAtA[i:], *m.DefaultRuntimeClassName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.DefaultRuntimeClassName))) + i-- + dAtA[i] = 0x12 + } + if len(m.AllowedRuntimeClassNames) > 0 { + for iNdEx := len(m.AllowedRuntimeClassNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedRuntimeClassNames[iNdEx]) + copy(dAtA[i:], m.AllowedRuntimeClassNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedRuntimeClassNames[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *SELinuxStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -884,31 +1701,39 @@ } func (m *SELinuxStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SELinuxStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if m.SELinuxOptions != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n18, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.SELinuxOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n18 + i-- + dAtA[i] = 0x12 } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *SupplementalGroupsStrategyOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -916,57 +1741,63 @@ } func (m *SupplementalGroupsStrategyOptions) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SupplementalGroupsStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) - i += copy(dAtA[i:], m.Rule) if len(m.Ranges) > 0 { - for _, msg := range m.Ranges { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + i -= len(m.Rule) + copy(dAtA[i:], m.Rule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Rule))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base +} +func (m *AllowedCSIDriver) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n } + func (m *AllowedFlexVolume) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Driver) @@ -975,6 +1806,9 @@ } func (m *AllowedHostPath) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.PathPrefix) @@ -984,6 +1818,9 @@ } func (m *Eviction) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -996,6 +1833,9 @@ } func (m *FSGroupStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -1010,6 +1850,9 @@ } func (m *HostPortRange) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Min)) @@ -1018,6 +1861,9 @@ } func (m *IDRange) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Min)) @@ -1026,6 +1872,9 @@ } func (m *PodDisruptionBudget) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1038,6 +1887,9 @@ } func (m *PodDisruptionBudgetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1052,6 +1904,9 @@ } func (m *PodDisruptionBudgetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.MinAvailable != nil { @@ -1070,6 +1925,9 @@ } func (m *PodDisruptionBudgetStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.ObservedGeneration)) @@ -1090,6 +1948,9 @@ } func (m *PodSecurityPolicy) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -1100,6 +1961,9 @@ } func (m *PodSecurityPolicyList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1114,6 +1978,9 @@ } func (m *PodSecurityPolicySpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -1189,10 +2056,50 @@ n += 2 + l + sovGenerated(uint64(l)) } } + if len(m.AllowedProcMountTypes) > 0 { + for _, s := range m.AllowedProcMountTypes { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.RunAsGroup != nil { + l = m.RunAsGroup.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if len(m.AllowedCSIDrivers) > 0 { + for _, e := range m.AllowedCSIDrivers { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.RuntimeClass != nil { + l = m.RuntimeClass.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RunAsGroupStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Rule) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ranges) > 0 { + for _, e := range m.Ranges { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } func (m *RunAsUserStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -1206,7 +2113,29 @@ return n } +func (m *RuntimeClassStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.AllowedRuntimeClassNames) > 0 { + for _, s := range m.AllowedRuntimeClassNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultRuntimeClassName != nil { + l = len(*m.DefaultRuntimeClassName) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *SELinuxStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -1219,6 +2148,9 @@ } func (m *SupplementalGroupsStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Rule) @@ -1233,18 +2165,21 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *AllowedCSIDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AllowedCSIDriver{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func (this *AllowedFlexVolume) String() string { if this == nil { return "nil" @@ -1271,8 +2206,8 @@ return "nil" } s := strings.Join([]string{`&Eviction{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `DeleteOptions:` + strings.Replace(fmt.Sprintf("%v", this.DeleteOptions), "DeleteOptions", "k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions", 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `DeleteOptions:` + strings.Replace(fmt.Sprintf("%v", this.DeleteOptions), "DeleteOptions", "v1.DeleteOptions", 1) + `,`, `}`, }, "") return s @@ -1281,9 +2216,14 @@ if this == nil { return "nil" } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" s := strings.Join([]string{`&FSGroupStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, `}`, }, "") return s @@ -1315,7 +2255,7 @@ return "nil" } s := strings.Join([]string{`&PodDisruptionBudget{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodDisruptionBudgetSpec", "PodDisruptionBudgetSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodDisruptionBudgetStatus", "PodDisruptionBudgetStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -1326,9 +2266,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]PodDisruptionBudget{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodDisruptionBudget", "PodDisruptionBudget", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&PodDisruptionBudgetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodDisruptionBudget", "PodDisruptionBudget", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1338,9 +2283,9 @@ return "nil" } s := strings.Join([]string{`&PodDisruptionBudgetSpec{`, - `MinAvailable:` + strings.Replace(fmt.Sprintf("%v", this.MinAvailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, - `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, - `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `MinAvailable:` + strings.Replace(fmt.Sprintf("%v", this.MinAvailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, `}`, }, "") return s @@ -1354,7 +2299,7 @@ keysForDisruptedPods = append(keysForDisruptedPods, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) - mapStringForDisruptedPods := "map[string]k8s_io_apimachinery_pkg_apis_meta_v1.Time{" + mapStringForDisruptedPods := "map[string]v1.Time{" for _, k := range keysForDisruptedPods { mapStringForDisruptedPods += fmt.Sprintf("%v: %v,", k, this.DisruptedPods[k]) } @@ -1375,7 +2320,7 @@ return "nil" } s := strings.Join([]string{`&PodSecurityPolicy{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicySpec", "PodSecurityPolicySpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -1385,9 +2330,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]PodSecurityPolicy{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodSecurityPolicy", "PodSecurityPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&PodSecurityPolicyList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodSecurityPolicy", "PodSecurityPolicy", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1396,6 +2346,26 @@ if this == nil { return "nil" } + repeatedStringForHostPorts := "[]HostPortRange{" + for _, f := range this.HostPorts { + repeatedStringForHostPorts += strings.Replace(strings.Replace(f.String(), "HostPortRange", "HostPortRange", 1), `&`, ``, 1) + "," + } + repeatedStringForHostPorts += "}" + repeatedStringForAllowedHostPaths := "[]AllowedHostPath{" + for _, f := range this.AllowedHostPaths { + repeatedStringForAllowedHostPaths += strings.Replace(strings.Replace(f.String(), "AllowedHostPath", "AllowedHostPath", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedHostPaths += "}" + repeatedStringForAllowedFlexVolumes := "[]AllowedFlexVolume{" + for _, f := range this.AllowedFlexVolumes { + repeatedStringForAllowedFlexVolumes += strings.Replace(strings.Replace(f.String(), "AllowedFlexVolume", "AllowedFlexVolume", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedFlexVolumes += "}" + repeatedStringForAllowedCSIDrivers := "[]AllowedCSIDriver{" + for _, f := range this.AllowedCSIDrivers { + repeatedStringForAllowedCSIDrivers += strings.Replace(strings.Replace(f.String(), "AllowedCSIDriver", "AllowedCSIDriver", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedCSIDrivers += "}" s := strings.Join([]string{`&PodSecurityPolicySpec{`, `Privileged:` + fmt.Sprintf("%v", this.Privileged) + `,`, `DefaultAddCapabilities:` + fmt.Sprintf("%v", this.DefaultAddCapabilities) + `,`, @@ -1403,7 +2373,7 @@ `AllowedCapabilities:` + fmt.Sprintf("%v", this.AllowedCapabilities) + `,`, `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, - `HostPorts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HostPorts), "HostPortRange", "HostPortRange", 1), `&`, ``, 1) + `,`, + `HostPorts:` + repeatedStringForHostPorts + `,`, `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, `SELinux:` + strings.Replace(strings.Replace(this.SELinux.String(), "SELinuxStrategyOptions", "SELinuxStrategyOptions", 1), `&`, ``, 1) + `,`, @@ -1413,32 +2383,68 @@ `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, `DefaultAllowPrivilegeEscalation:` + valueToStringGenerated(this.DefaultAllowPrivilegeEscalation) + `,`, `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, - `AllowedHostPaths:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedHostPaths), "AllowedHostPath", "AllowedHostPath", 1), `&`, ``, 1) + `,`, - `AllowedFlexVolumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedFlexVolumes), "AllowedFlexVolume", "AllowedFlexVolume", 1), `&`, ``, 1) + `,`, + `AllowedHostPaths:` + repeatedStringForAllowedHostPaths + `,`, + `AllowedFlexVolumes:` + repeatedStringForAllowedFlexVolumes + `,`, `AllowedUnsafeSysctls:` + fmt.Sprintf("%v", this.AllowedUnsafeSysctls) + `,`, `ForbiddenSysctls:` + fmt.Sprintf("%v", this.ForbiddenSysctls) + `,`, + `AllowedProcMountTypes:` + fmt.Sprintf("%v", this.AllowedProcMountTypes) + `,`, + `RunAsGroup:` + strings.Replace(this.RunAsGroup.String(), "RunAsGroupStrategyOptions", "RunAsGroupStrategyOptions", 1) + `,`, + `AllowedCSIDrivers:` + repeatedStringForAllowedCSIDrivers + `,`, + `RuntimeClass:` + strings.Replace(this.RuntimeClass.String(), "RuntimeClassStrategyOptions", "RuntimeClassStrategyOptions", 1) + `,`, `}`, }, "") return s } -func (this *RunAsUserStrategyOptions) String() string { +func (this *RunAsGroupStrategyOptions) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&RunAsUserStrategyOptions{`, + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" + s := strings.Join([]string{`&RunAsGroupStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, `}`, }, "") return s } -func (this *SELinuxStrategyOptions) String() string { +func (this *RunAsUserStrategyOptions) String() string { + if this == nil { + return "nil" + } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" + s := strings.Join([]string{`&RunAsUserStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, + `}`, + }, "") + return s +} +func (this *RuntimeClassStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeClassStrategyOptions{`, + `AllowedRuntimeClassNames:` + fmt.Sprintf("%v", this.AllowedRuntimeClassNames) + `,`, + `DefaultRuntimeClassName:` + valueToStringGenerated(this.DefaultRuntimeClassName) + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxStrategyOptions) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&SELinuxStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "k8s_io_api_core_v1.SELinuxOptions", 1) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "v11.SELinuxOptions", 1) + `,`, `}`, }, "") return s @@ -1447,9 +2453,14 @@ if this == nil { return "nil" } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, - `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, `}`, }, "") return s @@ -1462,7 +2473,523 @@ pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } -func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { +func (m *AllowedCSIDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowedCSIDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowedCSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowedFlexVolume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowedFlexVolume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Driver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowedHostPath: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowedHostPath: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PathPrefix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PathPrefix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Eviction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Eviction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Eviction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeleteOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DeleteOptions == nil { + m.DeleteOptions = &v1.DeleteOptions{} + } + if err := m.DeleteOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FSGroupStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FSGroupStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FSGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rule = FSGroupStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostPortRange) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1477,7 +3004,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1485,17 +3012,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AllowedFlexVolume: wiretype end group for non-group") + return fmt.Errorf("proto: HostPortRange: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedFlexVolume: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: HostPortRange: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) } - var stringLen uint64 + m.Min = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1505,21 +3032,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.Min |= int32(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF + m.Max = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Max |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - m.Driver = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1529,6 +3065,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1541,7 +3080,7 @@ } return nil } -func (m *AllowedHostPath) Unmarshal(dAtA []byte) error { +func (m *IDRange) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1556,7 +3095,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1564,17 +3103,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AllowedHostPath: wiretype end group for non-group") + return fmt.Errorf("proto: IDRange: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AllowedHostPath: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: IDRange: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PathPrefix", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) } - var stringLen uint64 + m.Min = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1584,26 +3123,16 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.Min |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PathPrefix = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) } - var v int + m.Max = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1613,12 +3142,11 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + m.Max |= int64(b&0x7F) << shift if b < 0x80 { break } } - m.ReadOnly = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1628,6 +3156,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1640,7 +3171,7 @@ } return nil } -func (m *Eviction) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudget) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1655,7 +3186,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1663,10 +3194,10 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Eviction: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudget: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Eviction: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudget: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1683,7 +3214,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1692,6 +3223,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1701,7 +3235,7 @@ iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeleteOptions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1713,7 +3247,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1722,13 +3256,46 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.DeleteOptions == nil { - m.DeleteOptions = &k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions{} + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.DeleteOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1741,6 +3308,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1753,7 +3323,7 @@ } return nil } -func (m *FSGroupStrategyOptions) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudgetList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1768,7 +3338,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1776,17 +3346,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: FSGroupStrategyOptions: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudgetList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: FSGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudgetList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1796,24 +3366,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Rule = FSGroupStrategyType(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1825,7 +3399,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1834,11 +3408,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, PodDisruptionBudget{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1851,6 +3428,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1863,7 +3443,7 @@ } return nil } -func (m *HostPortRange) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudgetSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1878,7 +3458,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1886,36 +3466,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: HostPortRange: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudgetSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: HostPortRange: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudgetSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) - } - m.Min = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Min |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinAvailable", wireType) } - m.Max = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1925,66 +3486,33 @@ } b := dAtA[iNdEx] iNdEx++ - m.Max |= (int32(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + if msglen < 0 { + return ErrInvalidLengthGenerated } - if skippy < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *IDRange) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + if m.MinAvailable == nil { + m.MinAvailable = &intstr.IntOrString{} } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + if err := m.MinAvailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: IDRange: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IDRange: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) } - m.Min = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1994,16 +3522,33 @@ } b := dAtA[iNdEx] iNdEx++ - m.Min |= (int64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Max = 0 + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2013,11 +3558,28 @@ } b := dAtA[iNdEx] iNdEx++ - m.Max |= (int64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxUnavailable == nil { + m.MaxUnavailable = &intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -2027,6 +3589,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2039,7 +3604,7 @@ } return nil } -func (m *PodDisruptionBudget) Unmarshal(dAtA []byte) error { +func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2054,7 +3619,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2062,17 +3627,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudget: wiretype end group for non-group") + return fmt.Errorf("proto: PodDisruptionBudgetStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudget: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodDisruptionBudgetStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) } - var msglen int + m.ObservedGeneration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2082,25 +3647,14 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + m.ObservedGeneration |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DisruptedPods", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2112,7 +3666,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2121,18 +3675,117 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.DisruptedPods == nil { + m.DisruptedPods = make(map[string]v1.Time) + } + var mapkey string + mapvalue := &v1.Time{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &v1.Time{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.DisruptedPods[mapkey] = *mapvalue iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PodDisruptionsAllowed", wireType) } - var msglen int + m.PodDisruptionsAllowed = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2142,22 +3795,68 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + m.PodDisruptionsAllowed |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentHealthy", wireType) } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF + m.CurrentHealthy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentHealthy |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredHealthy", wireType) + } + m.DesiredHealthy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DesiredHealthy |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPods", wireType) + } + m.ExpectedPods = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpectedPods |= int32(b&0x7F) << shift + if b < 0x80 { + break + } } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -2167,6 +3866,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2179,7 +3881,7 @@ } return nil } -func (m *PodDisruptionBudgetList) Unmarshal(dAtA []byte) error { +func (m *PodSecurityPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2194,7 +3896,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2202,15 +3904,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudgetList: wiretype end group for non-group") + return fmt.Errorf("proto: PodSecurityPolicy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudgetList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodSecurityPolicy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2222,7 +3924,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2231,16 +3933,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2252,7 +3957,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2261,11 +3966,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, PodDisruptionBudget{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2278,6 +3985,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2290,7 +4000,7 @@ } return nil } -func (m *PodDisruptionBudgetSpec) Unmarshal(dAtA []byte) error { +func (m *PodSecurityPolicyList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2305,7 +4015,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2313,15 +4023,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudgetSpec: wiretype end group for non-group") + return fmt.Errorf("proto: PodSecurityPolicyList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudgetSpec: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodSecurityPolicyList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinAvailable", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2333,7 +4043,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2342,19 +4052,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.MinAvailable == nil { - m.MinAvailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} - } - if err := m.MinAvailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2366,7 +4076,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2375,46 +4085,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Selector == nil { - m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} - } - if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.MaxUnavailable == nil { - m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} - } - if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, PodSecurityPolicy{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2427,6 +4105,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2439,7 +4120,7 @@ } return nil } -func (m *PodDisruptionBudgetStatus) Unmarshal(dAtA []byte) error { +func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2454,7 +4135,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2462,17 +4143,37 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PodDisruptionBudgetStatus: wiretype end group for non-group") + return fmt.Errorf("proto: PodSecurityPolicySpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PodDisruptionBudgetStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PodSecurityPolicySpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Privileged", wireType) } - m.ObservedGeneration = 0 + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Privileged = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultAddCapabilities", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2482,16 +4183,29 @@ } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= (int64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - case 2: + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DefaultAddCapabilities = append(m.DefaultAddCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DisruptedPods", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RequiredDropCapabilities", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2501,19 +4215,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 + m.RequiredDropCapabilities = append(m.RequiredDropCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedCapabilities", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2523,12 +4247,29 @@ } b := dAtA[iNdEx] iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapkey uint64 + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedCapabilities = append(m.AllowedCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2538,81 +4279,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.DisruptedPods == nil { - m.DisruptedPods = make(map[string]k8s_io_apimachinery_pkg_apis_meta_v1.Time) + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.DisruptedPods[mapkey] = *mapvalue - } else { - var mapvalue k8s_io_apimachinery_pkg_apis_meta_v1.Time - m.DisruptedPods[mapkey] = mapvalue + if postIndex > l { + return io.ErrUnexpectedEOF } + m.Volumes = append(m.Volumes, FSType(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 3: + case 6: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PodDisruptionsAllowed", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostNetwork", wireType) } - m.PodDisruptionsAllowed = 0 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2622,16 +4311,17 @@ } b := dAtA[iNdEx] iNdEx++ - m.PodDisruptionsAllowed |= (int32(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CurrentHealthy", wireType) + m.HostNetwork = bool(v != 0) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostPorts", wireType) } - m.CurrentHealthy = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2641,16 +4331,31 @@ } b := dAtA[iNdEx] iNdEx++ - m.CurrentHealthy |= (int32(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - case 5: + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostPorts = append(m.HostPorts, HostPortRange{}) + if err := m.HostPorts[len(m.HostPorts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredHealthy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostPID", wireType) } - m.DesiredHealthy = 0 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2660,16 +4365,17 @@ } b := dAtA[iNdEx] iNdEx++ - m.DesiredHealthy |= (int32(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - case 6: + m.HostPID = bool(v != 0) + case 9: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpectedPods", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HostIPC", wireType) } - m.ExpectedPods = 0 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2679,64 +4385,15 @@ } b := dAtA[iNdEx] iNdEx++ - m.ExpectedPods |= (int32(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodSecurityPolicy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodSecurityPolicy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodSecurityPolicy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.HostIPC = bool(v != 0) + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SELinux", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2748,7 +4405,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2757,16 +4414,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SELinux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2778,75 +4438,28 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodSecurityPolicyList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodSecurityPolicyList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodSecurityPolicyList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RunAsUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2858,7 +4471,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2867,16 +4480,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SupplementalGroups.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2888,7 +4504,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2897,67 +4513,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, PodSecurityPolicy{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.FSGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PodSecurityPolicySpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodSecurityPolicySpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 14: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Privileged", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyRootFilesystem", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -2969,17 +4537,17 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - m.Privileged = bool(v != 0) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultAddCapabilities", wireType) + m.ReadOnlyRootFilesystem = bool(v != 0) + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultAllowPrivilegeEscalation", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -2989,26 +4557,18 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DefaultAddCapabilities = append(m.DefaultAddCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequiredDropCapabilities", wireType) + b := bool(v != 0) + m.DefaultAllowPrivilegeEscalation = &b + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowPrivilegeEscalation", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3018,26 +4578,18 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RequiredDropCapabilities = append(m.RequiredDropCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 4: + b := bool(v != 0) + m.AllowPrivilegeEscalation = &b + case 17: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedCapabilities", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedHostPaths", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3047,26 +4599,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedCapabilities = append(m.AllowedCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + m.AllowedHostPaths = append(m.AllowedHostPaths, AllowedHostPath{}) + if err := m.AllowedHostPaths[len(m.AllowedHostPaths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: + case 18: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedFlexVolumes", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3076,46 +4633,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Volumes = append(m.Volumes, FSType(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostNetwork", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.AllowedFlexVolumes = append(m.AllowedFlexVolumes, AllowedFlexVolume{}) + if err := m.AllowedFlexVolumes[len(m.AllowedFlexVolumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.HostNetwork = bool(v != 0) - case 7: + iNdEx = postIndex + case 19: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HostPorts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedUnsafeSysctls", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3125,28 +4667,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.HostPorts = append(m.HostPorts, HostPortRange{}) - if err := m.HostPorts[len(m.HostPorts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.AllowedUnsafeSysctls = append(m.AllowedUnsafeSysctls, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostPID", wireType) + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForbiddenSysctls", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3156,37 +4699,29 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.HostPID = bool(v != 0) - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HostIPC", wireType) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - m.HostIPC = bool(v != 0) - case 10: + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForbiddenSysctls = append(m.ForbiddenSysctls, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 21: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SELinux", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedProcMountTypes", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3196,25 +4731,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SELinux.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.AllowedProcMountTypes = append(m.AllowedProcMountTypes, k8s_io_api_core_v1.ProcMountType(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 11: + case 22: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3226,7 +4763,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3235,16 +4772,22 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.RunAsUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.RunAsGroup == nil { + m.RunAsGroup = &RunAsGroupStrategyOptions{} + } + if err := m.RunAsGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 12: + case 23: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedCSIDrivers", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3256,7 +4799,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3265,16 +4808,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SupplementalGroups.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.AllowedCSIDrivers = append(m.AllowedCSIDrivers, AllowedCSIDriver{}) + if err := m.AllowedCSIDrivers[len(m.AllowedCSIDrivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 13: + case 24: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeClass", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3286,7 +4833,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3295,80 +4842,77 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.FSGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.RuntimeClass == nil { + m.RuntimeClass = &RuntimeClassStrategyOptions{} + } + if err := m.RuntimeClass.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyRootFilesystem", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - m.ReadOnlyRootFilesystem = bool(v != 0) - case 15: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultAllowPrivilegeEscalation", wireType) + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - b := bool(v != 0) - m.DefaultAllowPrivilegeEscalation = &b - case 16: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowPrivilegeEscalation", wireType) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RunAsGroupStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if iNdEx >= l { + return io.ErrUnexpectedEOF } - b := bool(v != 0) - m.AllowPrivilegeEscalation = &b - case 17: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RunAsGroupStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RunAsGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedHostPaths", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3378,26 +4922,27 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedHostPaths = append(m.AllowedHostPaths, AllowedHostPath{}) - if err := m.AllowedHostPaths[len(m.AllowedHostPaths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Rule = RunAsGroupStrategy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 18: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedFlexVolumes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3409,7 +4954,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3418,17 +4963,73 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedFlexVolumes = append(m.AllowedFlexVolumes, AllowedFlexVolume{}) - if err := m.AllowedFlexVolumes[len(m.AllowedFlexVolumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 19: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RunAsUserStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RunAsUserStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedUnsafeSysctls", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3440,7 +5041,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3450,16 +5051,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedUnsafeSysctls = append(m.AllowedUnsafeSysctls, string(dAtA[iNdEx:postIndex])) + m.Rule = RunAsUserStrategy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 20: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ForbiddenSysctls", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3469,20 +5073,25 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ForbiddenSysctls = append(m.ForbiddenSysctls, string(dAtA[iNdEx:postIndex])) + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -3493,6 +5102,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3505,7 +5117,7 @@ } return nil } -func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { +func (m *RuntimeClassStrategyOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3520,7 +5132,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3528,15 +5140,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: RunAsUserStrategyOptions: wiretype end group for non-group") + return fmt.Errorf("proto: RuntimeClassStrategyOptions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: RunAsUserStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: RuntimeClassStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowedRuntimeClassNames", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3548,7 +5160,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3558,16 +5170,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Rule = RunAsUserStrategy(dAtA[iNdEx:postIndex]) + m.AllowedRuntimeClassNames = append(m.AllowedRuntimeClassNames, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DefaultRuntimeClassName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3577,22 +5192,24 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Ranges = append(m.Ranges, IDRange{}) - if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.DefaultRuntimeClassName = &s iNdEx = postIndex default: iNdEx = preIndex @@ -3603,6 +5220,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3630,7 +5250,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3658,7 +5278,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3668,6 +5288,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3687,7 +5310,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3696,11 +5319,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } if m.SELinuxOptions == nil { - m.SELinuxOptions = &k8s_io_api_core_v1.SELinuxOptions{} + m.SELinuxOptions = &v11.SELinuxOptions{} } if err := m.SELinuxOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -3715,6 +5341,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3742,7 +5371,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3770,7 +5399,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3780,6 +5409,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3799,7 +5431,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3808,6 +5440,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3825,6 +5460,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3891,10 +5529,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -3923,6 +5564,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -3941,116 +5585,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/policy/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 1679 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0x23, 0xb7, - 0x15, 0xf7, 0xac, 0x6c, 0x4b, 0xa6, 0x6d, 0xad, 0x4d, 0x7b, 0xdd, 0x89, 0xd1, 0xd5, 0x24, 0x0a, - 0x50, 0x6c, 0x83, 0x64, 0x14, 0x7b, 0x93, 0xd6, 0x68, 0xda, 0x22, 0x1e, 0xcb, 0xff, 0x02, 0xbb, - 0x56, 0xa9, 0xdd, 0xa0, 0x2d, 0xb6, 0x45, 0x29, 0x0d, 0x2d, 0x31, 0x1e, 0xcd, 0x4c, 0x49, 0x8e, - 0x22, 0xdd, 0x7a, 0xe8, 0xa1, 0xe8, 0xa9, 0x5f, 0xa0, 0x9f, 0xa0, 0xe8, 0xa9, 0x5f, 0xc2, 0x05, - 0x8a, 0x22, 0xc7, 0xa0, 0x07, 0xa1, 0xab, 0xa2, 0x5f, 0x22, 0xa7, 0x62, 0x28, 0x8e, 0xa4, 0xf9, - 0x23, 0x79, 0x1d, 0x60, 0xf7, 0xa6, 0xe1, 0xfb, 0xfd, 0x7e, 0xef, 0xf1, 0xf1, 0xf1, 0x91, 0x14, - 0xb0, 0x6e, 0x0e, 0xb8, 0x49, 0xbd, 0xca, 0x4d, 0xd0, 0x20, 0xcc, 0x25, 0x82, 0xf0, 0x4a, 0x97, - 0xb8, 0xb6, 0xc7, 0x2a, 0xca, 0x80, 0x7d, 0x5a, 0xf1, 0x3d, 0x87, 0x36, 0xfb, 0x95, 0xee, 0x5e, - 0x83, 0x08, 0xbc, 0x57, 0x69, 0x11, 0x97, 0x30, 0x2c, 0x88, 0x6d, 0xfa, 0xcc, 0x13, 0x1e, 0x7c, - 0x6b, 0x04, 0x35, 0xb1, 0x4f, 0xcd, 0x11, 0xd4, 0x54, 0xd0, 0xdd, 0x0f, 0x5a, 0x54, 0xb4, 0x83, - 0x86, 0xd9, 0xf4, 0x3a, 0x95, 0x96, 0xd7, 0xf2, 0x2a, 0x92, 0xd1, 0x08, 0xae, 0xe5, 0x97, 0xfc, - 0x90, 0xbf, 0x46, 0x4a, 0xbb, 0xe5, 0x29, 0xa7, 0x4d, 0x8f, 0x91, 0x4a, 0x37, 0xe5, 0x6d, 0xf7, - 0xa3, 0x09, 0xa6, 0x83, 0x9b, 0x6d, 0xea, 0x12, 0xd6, 0xaf, 0xf8, 0x37, 0xad, 0x70, 0x80, 0x57, - 0x3a, 0x44, 0xe0, 0x2c, 0x56, 0x65, 0x16, 0x8b, 0x05, 0xae, 0xa0, 0x1d, 0x92, 0x22, 0xfc, 0xe0, - 0x2e, 0x02, 0x6f, 0xb6, 0x49, 0x07, 0xa7, 0x78, 0x4f, 0x67, 0xf1, 0x02, 0x41, 0x9d, 0x0a, 0x75, - 0x05, 0x17, 0x2c, 0x49, 0x2a, 0x7f, 0x02, 0x36, 0x0f, 0x1d, 0xc7, 0xfb, 0x92, 0xd8, 0x27, 0x0e, - 0xe9, 0x7d, 0xee, 0x39, 0x41, 0x87, 0xc0, 0xef, 0x81, 0x65, 0x9b, 0xd1, 0x2e, 0x61, 0xba, 0xf6, - 0xb6, 0xf6, 0x64, 0xc5, 0x2a, 0xde, 0x0e, 0x8c, 0x85, 0xe1, 0xc0, 0x58, 0xae, 0xca, 0x51, 0xa4, - 0xac, 0x65, 0x0e, 0x1e, 0x2a, 0xf2, 0x99, 0xc7, 0x45, 0x0d, 0x8b, 0x36, 0xdc, 0x07, 0xc0, 0xc7, - 0xa2, 0x5d, 0x63, 0xe4, 0x9a, 0xf6, 0x14, 0x1d, 0x2a, 0x3a, 0xa8, 0x8d, 0x2d, 0x68, 0x0a, 0x05, - 0xdf, 0x07, 0x05, 0x46, 0xb0, 0x7d, 0xe5, 0x3a, 0x7d, 0xfd, 0xc1, 0xdb, 0xda, 0x93, 0x82, 0xb5, - 0xa1, 0x18, 0x05, 0xa4, 0xc6, 0xd1, 0x18, 0x51, 0xfe, 0xb7, 0x06, 0x0a, 0xc7, 0x5d, 0xda, 0x14, - 0xd4, 0x73, 0xe1, 0x6f, 0x41, 0x21, 0xcc, 0xbb, 0x8d, 0x05, 0x96, 0xce, 0x56, 0xf7, 0x3f, 0x34, - 0x27, 0x35, 0x31, 0x4e, 0x83, 0xe9, 0xdf, 0xb4, 0xc2, 0x01, 0x6e, 0x86, 0x68, 0xb3, 0xbb, 0x67, - 0x5e, 0x35, 0xbe, 0x20, 0x4d, 0x71, 0x49, 0x04, 0x9e, 0x84, 0x37, 0x19, 0x43, 0x63, 0x55, 0xe8, - 0x80, 0x75, 0x9b, 0x38, 0x44, 0x90, 0x2b, 0x3f, 0xf4, 0xc8, 0x65, 0x84, 0xab, 0xfb, 0x4f, 0x5f, - 0xcd, 0x4d, 0x75, 0x9a, 0x6a, 0x6d, 0x0e, 0x07, 0xc6, 0x7a, 0x6c, 0x08, 0xc5, 0xc5, 0xcb, 0x7f, - 0xd1, 0xc0, 0xce, 0x49, 0xfd, 0x94, 0x79, 0x81, 0x5f, 0x17, 0xe1, 0x3a, 0xb5, 0xfa, 0xca, 0x04, - 0x7f, 0x08, 0x16, 0x59, 0xe0, 0x10, 0x95, 0xd3, 0x77, 0x55, 0xd0, 0x8b, 0x28, 0x70, 0xc8, 0x37, - 0x03, 0x63, 0x2b, 0xc1, 0x7a, 0xd6, 0xf7, 0x09, 0x92, 0x04, 0xf8, 0x19, 0x58, 0x66, 0xd8, 0x6d, - 0x91, 0x30, 0xf4, 0xdc, 0x93, 0xd5, 0xfd, 0xb2, 0x39, 0x73, 0xd7, 0x98, 0xe7, 0x55, 0x14, 0x42, - 0x27, 0x2b, 0x2e, 0x3f, 0x39, 0x52, 0x0a, 0xe5, 0x4b, 0xb0, 0x2e, 0x97, 0xda, 0x63, 0x42, 0x5a, - 0xe0, 0x63, 0x90, 0xeb, 0x50, 0x57, 0x06, 0xb5, 0x64, 0xad, 0x2a, 0x56, 0xee, 0x92, 0xba, 0x28, - 0x1c, 0x97, 0x66, 0xdc, 0x93, 0x39, 0x9b, 0x36, 0xe3, 0x1e, 0x0a, 0xc7, 0xcb, 0xa7, 0x20, 0xaf, - 0x3c, 0x4e, 0x0b, 0xe5, 0xe6, 0x0b, 0xe5, 0x32, 0x84, 0xfe, 0xfa, 0x00, 0x6c, 0xd5, 0x3c, 0xbb, - 0x4a, 0x39, 0x0b, 0x64, 0xbe, 0xac, 0xc0, 0x6e, 0x11, 0xf1, 0x06, 0xea, 0xe3, 0x19, 0x58, 0xe4, - 0x3e, 0x69, 0xaa, 0xb2, 0xd8, 0x9f, 0x93, 0xdb, 0x8c, 0xf8, 0xea, 0x3e, 0x69, 0x5a, 0x6b, 0xd1, - 0x52, 0x86, 0x5f, 0x48, 0xaa, 0xc1, 0x17, 0x60, 0x99, 0x0b, 0x2c, 0x02, 0xae, 0xe7, 0xa4, 0xee, - 0x47, 0xf7, 0xd4, 0x95, 0xdc, 0xc9, 0x2a, 0x8e, 0xbe, 0x91, 0xd2, 0x2c, 0xff, 0x53, 0x03, 0xdf, - 0xc9, 0x60, 0x5d, 0x50, 0x2e, 0xe0, 0x8b, 0x54, 0xc6, 0xcc, 0x57, 0xcb, 0x58, 0xc8, 0x96, 0xf9, - 0x1a, 0x6f, 0xde, 0x68, 0x64, 0x2a, 0x5b, 0x75, 0xb0, 0x44, 0x05, 0xe9, 0x44, 0xa5, 0x68, 0xde, - 0x6f, 0x5a, 0xd6, 0xba, 0x92, 0x5e, 0x3a, 0x0f, 0x45, 0xd0, 0x48, 0xab, 0xfc, 0xaf, 0x07, 0x99, - 0xd3, 0x09, 0xd3, 0x09, 0xaf, 0xc1, 0x5a, 0x87, 0xba, 0x87, 0x5d, 0x4c, 0x1d, 0xdc, 0x50, 0xbb, - 0x67, 0x5e, 0x11, 0x84, 0xbd, 0xd2, 0x1c, 0xf5, 0x4a, 0xf3, 0xdc, 0x15, 0x57, 0xac, 0x2e, 0x18, - 0x75, 0x5b, 0xd6, 0xc6, 0x70, 0x60, 0xac, 0x5d, 0x4e, 0x29, 0xa1, 0x98, 0x2e, 0xfc, 0x35, 0x28, - 0x70, 0xe2, 0x90, 0xa6, 0xf0, 0xd8, 0xfd, 0x3a, 0xc4, 0x05, 0x6e, 0x10, 0xa7, 0xae, 0xa8, 0xd6, - 0x5a, 0x98, 0xb7, 0xe8, 0x0b, 0x8d, 0x25, 0xa1, 0x03, 0x8a, 0x1d, 0xdc, 0x7b, 0xee, 0xe2, 0xf1, - 0x44, 0x72, 0xdf, 0x72, 0x22, 0x70, 0x38, 0x30, 0x8a, 0x97, 0x31, 0x2d, 0x94, 0xd0, 0x2e, 0xff, - 0x6f, 0x11, 0xbc, 0x35, 0xb3, 0xaa, 0xe0, 0x67, 0x00, 0x7a, 0x0d, 0x4e, 0x58, 0x97, 0xd8, 0xa7, - 0xa3, 0xd3, 0x84, 0x7a, 0xd1, 0xc6, 0xdd, 0x55, 0x0b, 0x04, 0xaf, 0x52, 0x08, 0x94, 0xc1, 0x82, - 0x7f, 0xd0, 0xc0, 0xba, 0x3d, 0x72, 0x43, 0xec, 0x9a, 0x67, 0x47, 0x85, 0x71, 0xfa, 0x6d, 0xea, - 0xdd, 0xac, 0x4e, 0x2b, 0x1d, 0xbb, 0x82, 0xf5, 0xad, 0x47, 0x2a, 0xa0, 0xf5, 0x98, 0x0d, 0xc5, - 0x9d, 0xc2, 0x4b, 0x00, 0xed, 0xb1, 0x24, 0x57, 0x67, 0x9a, 0x4c, 0xf1, 0x92, 0xf5, 0x58, 0x29, - 0x3c, 0x8a, 0xf9, 0x8d, 0x40, 0x28, 0x83, 0x08, 0x7f, 0x0a, 0x8a, 0xcd, 0x80, 0x31, 0xe2, 0x8a, - 0x33, 0x82, 0x1d, 0xd1, 0xee, 0xeb, 0x8b, 0x52, 0x6a, 0x47, 0x49, 0x15, 0x8f, 0x62, 0x56, 0x94, - 0x40, 0x87, 0x7c, 0x9b, 0x70, 0xca, 0x88, 0x1d, 0xf1, 0x97, 0xe2, 0xfc, 0x6a, 0xcc, 0x8a, 0x12, - 0x68, 0x78, 0x00, 0xd6, 0x48, 0xcf, 0x27, 0xcd, 0x28, 0xa7, 0xcb, 0x92, 0xbd, 0xad, 0xd8, 0x6b, - 0xc7, 0x53, 0x36, 0x14, 0x43, 0xee, 0x3a, 0x00, 0xa6, 0x93, 0x08, 0x37, 0x40, 0xee, 0x86, 0xf4, - 0x47, 0x27, 0x0f, 0x0a, 0x7f, 0xc2, 0x4f, 0xc1, 0x52, 0x17, 0x3b, 0x01, 0x51, 0xb5, 0xfe, 0xde, - 0xab, 0xd5, 0xfa, 0x33, 0xda, 0x21, 0x68, 0x44, 0xfc, 0xd1, 0x83, 0x03, 0xad, 0xfc, 0x0f, 0x0d, - 0x6c, 0xd6, 0x3c, 0xbb, 0x4e, 0x9a, 0x01, 0xa3, 0xa2, 0x5f, 0x93, 0xeb, 0xfc, 0x06, 0x7a, 0x36, - 0x8a, 0xf5, 0xec, 0x0f, 0xe7, 0xd7, 0x5a, 0x3c, 0xba, 0x59, 0x1d, 0xbb, 0x7c, 0xab, 0x81, 0x47, - 0x29, 0xf4, 0x1b, 0xe8, 0xa8, 0x3f, 0x8f, 0x77, 0xd4, 0xf7, 0xef, 0x33, 0x99, 0x19, 0xfd, 0xf4, - 0x4f, 0xc5, 0x8c, 0xa9, 0xc8, 0x6e, 0x1a, 0xde, 0xee, 0x18, 0xed, 0x52, 0x87, 0xb4, 0x88, 0x2d, - 0x27, 0x53, 0x98, 0xba, 0xdd, 0x8d, 0x2d, 0x68, 0x0a, 0x05, 0x39, 0xd8, 0xb1, 0xc9, 0x35, 0x0e, - 0x1c, 0x71, 0x68, 0xdb, 0x47, 0xd8, 0xc7, 0x0d, 0xea, 0x50, 0x41, 0xd5, 0x75, 0x64, 0xc5, 0xfa, - 0x64, 0x38, 0x30, 0x76, 0xaa, 0x99, 0x88, 0x6f, 0x06, 0xc6, 0xe3, 0xf4, 0xbd, 0xdc, 0x1c, 0x43, - 0xfa, 0x68, 0x86, 0x34, 0xec, 0x03, 0x9d, 0x91, 0xdf, 0x05, 0xe1, 0xa6, 0xa8, 0x32, 0xcf, 0x8f, - 0xb9, 0xcd, 0x49, 0xb7, 0x3f, 0x19, 0x0e, 0x0c, 0x1d, 0xcd, 0xc0, 0xdc, 0xed, 0x78, 0xa6, 0x3c, - 0xfc, 0x02, 0x6c, 0xe1, 0x51, 0x1f, 0x88, 0x79, 0x5d, 0x94, 0x5e, 0x0f, 0x86, 0x03, 0x63, 0xeb, - 0x30, 0x6d, 0xbe, 0xdb, 0x61, 0x96, 0x28, 0xac, 0x80, 0x7c, 0x57, 0x5e, 0xd9, 0xb9, 0xbe, 0x24, - 0xf5, 0x1f, 0x0d, 0x07, 0x46, 0x7e, 0x74, 0x8b, 0x0f, 0x35, 0x97, 0x4f, 0xea, 0xf2, 0x22, 0x18, - 0xa1, 0xe0, 0xc7, 0x60, 0xb5, 0xed, 0x71, 0xf1, 0x33, 0x22, 0xbe, 0xf4, 0xd8, 0x8d, 0x6c, 0x0c, - 0x05, 0x6b, 0x4b, 0xad, 0xe0, 0xea, 0xd9, 0xc4, 0x84, 0xa6, 0x71, 0xf0, 0x97, 0x60, 0xa5, 0xad, - 0xae, 0x7d, 0x5c, 0xcf, 0xcb, 0x42, 0x7b, 0x32, 0xa7, 0xd0, 0x62, 0x57, 0x44, 0x6b, 0x53, 0xc9, - 0xaf, 0x44, 0xc3, 0x1c, 0x4d, 0xd4, 0xe0, 0xf7, 0x41, 0x5e, 0x7e, 0x9c, 0x57, 0xf5, 0x82, 0x8c, - 0xe6, 0xa1, 0x82, 0xe7, 0xcf, 0x46, 0xc3, 0x28, 0xb2, 0x47, 0xd0, 0xf3, 0xda, 0x91, 0xbe, 0x92, - 0x86, 0x9e, 0xd7, 0x8e, 0x50, 0x64, 0x87, 0x2f, 0x40, 0x9e, 0x93, 0x0b, 0xea, 0x06, 0x3d, 0x1d, - 0xc8, 0x2d, 0xb7, 0x37, 0x27, 0xdc, 0xfa, 0xb1, 0x44, 0x26, 0x2e, 0xdc, 0x13, 0x75, 0x65, 0x47, - 0x91, 0x24, 0xb4, 0xc1, 0x0a, 0x0b, 0xdc, 0x43, 0xfe, 0x9c, 0x13, 0xa6, 0xaf, 0xa6, 0x4e, 0xfb, - 0xa4, 0x3e, 0x8a, 0xb0, 0x49, 0x0f, 0xe3, 0xcc, 0x8c, 0x11, 0x68, 0x22, 0x0c, 0xff, 0xa8, 0x01, - 0xc8, 0x03, 0xdf, 0x77, 0x48, 0x87, 0xb8, 0x02, 0x3b, 0xf2, 0x7e, 0xcf, 0xf5, 0x35, 0xe9, 0xef, - 0xc7, 0xf3, 0xe6, 0x93, 0x22, 0x25, 0x1d, 0x8f, 0x8f, 0xe9, 0x34, 0x14, 0x65, 0xf8, 0x0c, 0xd3, - 0x79, 0xcd, 0xe5, 0x6f, 0x7d, 0xfd, 0xce, 0x74, 0x66, 0xbf, 0x5f, 0x26, 0xe9, 0x54, 0x76, 0x14, - 0x49, 0xc2, 0xcf, 0xc1, 0x4e, 0xf4, 0xba, 0x43, 0x9e, 0x27, 0x4e, 0xa8, 0x43, 0x78, 0x9f, 0x0b, - 0xd2, 0xd1, 0x8b, 0x72, 0x99, 0x4b, 0x8a, 0xb9, 0x83, 0x32, 0x51, 0x68, 0x06, 0x1b, 0x76, 0x80, - 0x11, 0xb5, 0x87, 0x70, 0xef, 0x8c, 0xfb, 0xd3, 0x31, 0x6f, 0x62, 0x67, 0x74, 0x6b, 0x79, 0x28, - 0x1d, 0xbc, 0x3b, 0x1c, 0x18, 0x46, 0x75, 0x3e, 0x14, 0xdd, 0xa5, 0x05, 0x7f, 0x01, 0x74, 0x3c, - 0xcb, 0xcf, 0x86, 0xf4, 0xf3, 0xdd, 0xb0, 0xe7, 0xcc, 0x74, 0x30, 0x93, 0x0d, 0x7d, 0xb0, 0x81, - 0xe3, 0xef, 0x6c, 0xae, 0x6f, 0xca, 0x5d, 0xf8, 0xde, 0x9c, 0x75, 0x48, 0x3c, 0xcd, 0x2d, 0x5d, - 0xa5, 0x71, 0x23, 0x61, 0xe0, 0x28, 0xa5, 0x0e, 0x7b, 0x00, 0xe2, 0xe4, 0xdf, 0x02, 0x5c, 0x87, - 0x77, 0x1e, 0x31, 0xa9, 0xff, 0x12, 0x26, 0xa5, 0x96, 0x32, 0x71, 0x94, 0xe1, 0x03, 0x5e, 0x80, - 0x6d, 0x35, 0xfa, 0xdc, 0xe5, 0xf8, 0x9a, 0xd4, 0xfb, 0xbc, 0x29, 0x1c, 0xae, 0x6f, 0xc9, 0xfe, - 0xa6, 0x0f, 0x07, 0xc6, 0xf6, 0x61, 0x86, 0x1d, 0x65, 0xb2, 0xe0, 0xa7, 0x60, 0xe3, 0xda, 0x63, - 0x0d, 0x6a, 0xdb, 0xc4, 0x8d, 0x94, 0xb6, 0xa5, 0xd2, 0x76, 0x98, 0x89, 0x93, 0x84, 0x0d, 0xa5, - 0xd0, 0xe1, 0x8b, 0x5c, 0x9f, 0xb5, 0x81, 0xe1, 0xc7, 0xb1, 0x37, 0xf9, 0x3b, 0x89, 0x37, 0xf9, - 0x66, 0x8a, 0xf7, 0x1a, 0x5e, 0xe4, 0x7f, 0xd3, 0xc0, 0x4e, 0x76, 0x03, 0x83, 0x4f, 0x63, 0xd1, - 0x19, 0x89, 0xe8, 0x1e, 0x26, 0x58, 0x2a, 0xb6, 0xdf, 0x80, 0xa2, 0x6a, 0x73, 0xf1, 0x3f, 0x3c, - 0x62, 0x31, 0x86, 0xe7, 0x53, 0x78, 0x43, 0x51, 0x12, 0xd1, 0x16, 0x97, 0x6f, 0x8b, 0xf8, 0x18, - 0x4a, 0xa8, 0x95, 0xff, 0xae, 0x81, 0x77, 0xee, 0x6c, 0x50, 0xd0, 0x8a, 0x85, 0x6e, 0x26, 0x42, - 0x2f, 0xcd, 0x16, 0x78, 0x3d, 0xff, 0x7b, 0x58, 0x1f, 0xdc, 0xbe, 0x2c, 0x2d, 0x7c, 0xf5, 0xb2, - 0xb4, 0xf0, 0xf5, 0xcb, 0xd2, 0xc2, 0xef, 0x87, 0x25, 0xed, 0x76, 0x58, 0xd2, 0xbe, 0x1a, 0x96, - 0xb4, 0xaf, 0x87, 0x25, 0xed, 0x3f, 0xc3, 0x92, 0xf6, 0xe7, 0xff, 0x96, 0x16, 0x7e, 0x95, 0x57, - 0x72, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x91, 0xe5, 0x7f, 0xdc, 0x14, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -30,6 +30,12 @@ // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +message AllowedCSIDriver { + // Name is the registered name of the CSI driver + optional string name = 1; +} + // AllowedFlexVolume represents a single Flexvolume that is allowed to be used. message AllowedFlexVolume { // driver is the name of the Flexvolume driver. @@ -42,7 +48,7 @@ // pathPrefix is the path prefix that the host volume must match. // It does not support `*`. // Trailing slashes are trimmed when validating the path prefix with a host path. - // + // // Examples: // `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would not allow `/food` or `/etc/foo` @@ -58,9 +64,11 @@ // created by POSTing to .../pods//evictions. message Eviction { // ObjectMeta describes the pod that is being evicted. + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // DeleteOptions may be provided + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions deleteOptions = 2; } @@ -97,17 +105,21 @@ // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods message PodDisruptionBudget { + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of the PodDisruptionBudget. + // +optional optional PodDisruptionBudgetSpec spec = 2; // Most recently observed status of the PodDisruptionBudget. + // +optional optional PodDisruptionBudgetStatus status = 3; } // PodDisruptionBudgetList is a collection of PodDisruptionBudgets. message PodDisruptionBudgetList { + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; repeated PodDisruptionBudget items = 2; @@ -119,16 +131,19 @@ // "selector" will still be available after the eviction, i.e. even in the // absence of the evicted pod. So for example you can prevent all voluntary // evictions by specifying "100%". + // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString minAvailable = 1; // Label query over pods whose evictions are managed by the disruption // budget. + // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2; // An eviction is allowed if at most "maxUnavailable" pods selected by // "selector" are unavailable after the eviction, i.e. even in absence of // the evicted pod. For example, one can prevent all voluntary evictions // by specifying 0. This is a mutually exclusive setting with "minAvailable". + // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 3; } @@ -151,6 +166,7 @@ // the list automatically by PodDisruptionBudget controller after some time. // If everything goes smooth this map should be empty for the most of the time. // Large number of entries in the map may indicate problems with pod deletions. + // +optional map disruptedPods = 2; // Number of pod disruptions that are currently allowed. @@ -170,7 +186,7 @@ // that will be applied to a pod and container. message PodSecurityPolicy { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -182,7 +198,7 @@ // PodSecurityPolicyList is a list of PodSecurityPolicy objects. message PodSecurityPolicyList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -241,6 +257,12 @@ // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. optional RunAsUserStrategyOptions runAsUser = 11; + // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. + // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the + // RunAsGroup feature gate to be enabled. + // +optional + optional RunAsGroupStrategyOptions runAsGroup = 22; + // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. optional SupplementalGroupsStrategyOptions supplementalGroups = 12; @@ -276,11 +298,17 @@ // +optional repeated AllowedFlexVolume allowedFlexVolumes = 18; + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. + // This is an alpha field, and is only honored if the API server enables the CSIInlineVolume feature gate. + // +optional + repeated AllowedCSIDriver allowedCSIDrivers = 23; + // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. // Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. - // + // // Examples: // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. @@ -290,12 +318,35 @@ // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. - // + // // Examples: // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. // +optional repeated string forbiddenSysctls = 20; + + // AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. + // Empty or nil indicates that only the DefaultProcMountType may be used. + // This requires the ProcMountType feature flag to be enabled. + // +optional + repeated string allowedProcMountTypes = 21; + + // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. + // If this field is omitted, the pod's runtimeClassName field is unrestricted. + // Enforcement of this field depends on the RuntimeClass feature gate being enabled. + // +optional + optional RuntimeClassStrategyOptions runtimeClass = 24; +} + +// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. +message RunAsGroupStrategyOptions { + // rule is the strategy that will dictate the allowable RunAsGroup values that may be set. + optional string rule = 1; + + // ranges are the allowed ranges of gids that may be used. If you would like to force a single gid + // then supply a single range with the same start and end. Required for MustRunAs. + // +optional + repeated IDRange ranges = 2; } // RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. @@ -309,6 +360,21 @@ repeated IDRange ranges = 2; } +// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses +// for a pod. +message RuntimeClassStrategyOptions { + // allowedRuntimeClassNames is a whitelist of RuntimeClass names that may be specified on a pod. + // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the + // list. An empty list requires the RuntimeClassName field to be unset. + repeated string allowedRuntimeClassNames = 1; + + // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. + // The default MUST be allowed by the allowedRuntimeClassNames list. + // A value of nil does not mutate the Pod. + // +optional + optional string defaultRuntimeClassName = 2; +} + // SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. message SELinuxStrategyOptions { // rule is the strategy that will dictate the allowable labels that may be set. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ package v1beta1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -28,16 +28,19 @@ // "selector" will still be available after the eviction, i.e. even in the // absence of the evicted pod. So for example you can prevent all voluntary // evictions by specifying "100%". + // +optional MinAvailable *intstr.IntOrString `json:"minAvailable,omitempty" protobuf:"bytes,1,opt,name=minAvailable"` // Label query over pods whose evictions are managed by the disruption // budget. + // +optional Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` // An eviction is allowed if at most "maxUnavailable" pods selected by // "selector" are unavailable after the eviction, i.e. even in absence of // the evicted pod. For example, one can prevent all voluntary evictions // by specifying 0. This is a mutually exclusive setting with "minAvailable". + // +optional MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,3,opt,name=maxUnavailable"` } @@ -60,7 +63,8 @@ // the list automatically by PodDisruptionBudget controller after some time. // If everything goes smooth this map should be empty for the most of the time. // Large number of entries in the map may indicate problems with pod deletions. - DisruptedPods map[string]metav1.Time `json:"disruptedPods" protobuf:"bytes,2,rep,name=disruptedPods"` + // +optional + DisruptedPods map[string]metav1.Time `json:"disruptedPods,omitempty" protobuf:"bytes,2,rep,name=disruptedPods"` // Number of pod disruptions that are currently allowed. PodDisruptionsAllowed int32 `json:"disruptionsAllowed" protobuf:"varint,3,opt,name=disruptionsAllowed"` @@ -80,12 +84,15 @@ // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods type PodDisruptionBudget struct { - metav1.TypeMeta `json:",inline"` + metav1.TypeMeta `json:",inline"` + // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the PodDisruptionBudget. + // +optional Spec PodDisruptionBudgetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the PodDisruptionBudget. + // +optional Status PodDisruptionBudgetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -94,6 +101,7 @@ // PodDisruptionBudgetList is a collection of PodDisruptionBudgets. type PodDisruptionBudgetList struct { metav1.TypeMeta `json:",inline"` + // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` Items []PodDisruptionBudget `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -109,9 +117,11 @@ metav1.TypeMeta `json:",inline"` // ObjectMeta describes the pod that is being evicted. + // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // DeleteOptions may be provided + // +optional DeleteOptions *metav1.DeleteOptions `json:"deleteOptions,omitempty" protobuf:"bytes,2,opt,name=deleteOptions"` } @@ -124,7 +134,7 @@ type PodSecurityPolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -173,6 +183,11 @@ SELinux SELinuxStrategyOptions `json:"seLinux" protobuf:"bytes,10,opt,name=seLinux"` // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. RunAsUser RunAsUserStrategyOptions `json:"runAsUser" protobuf:"bytes,11,opt,name=runAsUser"` + // RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. + // If this field is omitted, the pod's RunAsGroup can take any value. This field requires the + // RunAsGroup feature gate to be enabled. + // +optional + RunAsGroup *RunAsGroupStrategyOptions `json:"runAsGroup,omitempty" protobuf:"bytes,22,opt,name=runAsGroup"` // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups" protobuf:"bytes,12,opt,name=supplementalGroups"` // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext. @@ -201,6 +216,11 @@ // is allowed in the "volumes" field. // +optional AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,18,rep,name=allowedFlexVolumes"` + // AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. + // An empty value indicates that any CSI driver can be used for inline ephemeral volumes. + // This is an alpha field, and is only honored if the API server enables the CSIInlineVolume feature gate. + // +optional + AllowedCSIDrivers []AllowedCSIDriver `json:"allowedCSIDrivers,omitempty" protobuf:"bytes,23,rep,name=allowedCSIDrivers"` // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. // Each entry is either a plain sysctl name or ends in "*" in which case it is considered // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. @@ -220,6 +240,16 @@ // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. // +optional ForbiddenSysctls []string `json:"forbiddenSysctls,omitempty" protobuf:"bytes,20,rep,name=forbiddenSysctls"` + // AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. + // Empty or nil indicates that only the DefaultProcMountType may be used. + // This requires the ProcMountType feature flag to be enabled. + // +optional + AllowedProcMountTypes []v1.ProcMountType `json:"allowedProcMountTypes,omitempty" protobuf:"bytes,21,opt,name=allowedProcMountTypes"` + // runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. + // If this field is omitted, the pod's runtimeClassName field is unrestricted. + // Enforcement of this field depends on the RuntimeClass feature gate being enabled. + // +optional + RuntimeClass *RuntimeClassStrategyOptions `json:"runtimeClass,omitempty" protobuf:"bytes,24,opt,name=runtimeClass"` } // AllowedHostPath defines the host volume conditions that will be enabled by a policy @@ -239,6 +269,10 @@ ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` } +// AllowAllCapabilities can be used as a value for the PodSecurityPolicy.AllowAllCapabilities +// field and means that any capabilities are allowed to be requested. +var AllowAllCapabilities v1.Capability = "*" + // FSType gives strong typing to different file systems that are used by volumes. type FSType string @@ -262,8 +296,15 @@ DownwardAPI FSType = "downwardAPI" FC FSType = "fc" ConfigMap FSType = "configMap" + VsphereVolume FSType = "vsphereVolume" Quobyte FSType = "quobyte" AzureDisk FSType = "azureDisk" + PhotonPersistentDisk FSType = "photonPersistentDisk" + StorageOS FSType = "storageos" + Projected FSType = "projected" + PortworxVolume FSType = "portworxVolume" + ScaleIO FSType = "scaleIO" + CSI FSType = "csi" All FSType = "*" ) @@ -273,6 +314,12 @@ Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` } +// AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used. +type AllowedCSIDriver struct { + // Name is the registered name of the CSI driver + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` +} + // HostPortRange defines a range of host ports that will be enabled by a policy // for pods to use. It requires both the start and end to be defined. type HostPortRange struct { @@ -313,6 +360,16 @@ Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` } +// RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. +type RunAsGroupStrategyOptions struct { + // rule is the strategy that will dictate the allowable RunAsGroup values that may be set. + Rule RunAsGroupStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=RunAsGroupStrategy"` + // ranges are the allowed ranges of gids that may be used. If you would like to force a single gid + // then supply a single range with the same start and end. Required for MustRunAs. + // +optional + Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` +} + // IDRange provides a min/max of an allowed range of IDs. type IDRange struct { // min is the start of the range, inclusive. @@ -334,6 +391,20 @@ RunAsUserStrategyRunAsAny RunAsUserStrategy = "RunAsAny" ) +// RunAsGroupStrategy denotes strategy types for generating RunAsGroup values for a +// Security Context. +type RunAsGroupStrategy string + +const ( + // RunAsGroupStrategyMayRunAs means that container does not need to run with a particular gid. + // However, when RunAsGroup are specified, they have to fall in the defined range. + RunAsGroupStrategyMayRunAs RunAsGroupStrategy = "MayRunAs" + // RunAsGroupStrategyMustRunAs means that container must run as a particular gid. + RunAsGroupStrategyMustRunAs RunAsGroupStrategy = "MustRunAs" + // RunAsUserStrategyRunAsAny means that container may make requests for any gid. + RunAsGroupStrategyRunAsAny RunAsGroupStrategy = "RunAsAny" +) + // FSGroupStrategyOptions defines the strategy type and options used to create the strategy. type FSGroupStrategyOptions struct { // rule is the strategy that will dictate what FSGroup is used in the SecurityContext. @@ -350,6 +421,9 @@ type FSGroupStrategyType string const ( + // FSGroupStrategyMayRunAs means that container does not need to have FSGroup of X applied. + // However, when FSGroups are specified, they have to fall in the defined range. + FSGroupStrategyMayRunAs FSGroupStrategyType = "MayRunAs" // FSGroupStrategyMustRunAs meant that container must have FSGroup of X applied. FSGroupStrategyMustRunAs FSGroupStrategyType = "MustRunAs" // FSGroupStrategyRunAsAny means that container may make requests for any FSGroup labels. @@ -372,19 +446,41 @@ type SupplementalGroupsStrategyType string const ( + // SupplementalGroupsStrategyMayRunAs means that container does not need to run with a particular gid. + // However, when gids are specified, they have to fall in the defined range. + SupplementalGroupsStrategyMayRunAs SupplementalGroupsStrategyType = "MayRunAs" // SupplementalGroupsStrategyMustRunAs means that container must run as a particular gid. SupplementalGroupsStrategyMustRunAs SupplementalGroupsStrategyType = "MustRunAs" // SupplementalGroupsStrategyRunAsAny means that container may make requests for any gid. SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny" ) +// RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses +// for a pod. +type RuntimeClassStrategyOptions struct { + // allowedRuntimeClassNames is a whitelist of RuntimeClass names that may be specified on a pod. + // A value of "*" means that any RuntimeClass name is allowed, and must be the only item in the + // list. An empty list requires the RuntimeClassName field to be unset. + AllowedRuntimeClassNames []string `json:"allowedRuntimeClassNames" protobuf:"bytes,1,rep,name=allowedRuntimeClassNames"` + // defaultRuntimeClassName is the default RuntimeClassName to set on the pod. + // The default MUST be allowed by the allowedRuntimeClassNames list. + // A value of nil does not mutate the Pod. + // +optional + DefaultRuntimeClassName *string `json:"defaultRuntimeClassName,omitempty" protobuf:"bytes,2,opt,name=defaultRuntimeClassName"` +} + +// AllowAllRuntimeClassNames can be used as a value for the +// RuntimeClassStrategyOptions.AllowedRuntimeClassNames field and means that any RuntimeClassName is +// allowed. +const AllowAllRuntimeClassNames = "*" + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // PodSecurityPolicyList is a list of PodSecurityPolicy objects. type PodSecurityPolicyList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,6 +27,15 @@ // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_AllowedCSIDriver = map[string]string{ + "": "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", + "name": "Name is the registered name of the CSI driver", +} + +func (AllowedCSIDriver) SwaggerDoc() map[string]string { + return map_AllowedCSIDriver +} + var map_AllowedFlexVolume = map[string]string{ "": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.", "driver": "driver is the name of the Flexvolume driver.", @@ -131,7 +140,7 @@ var map_PodSecurityPolicy = map[string]string{ "": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "spec defines the policy enforced.", } @@ -141,7 +150,7 @@ var map_PodSecurityPolicyList = map[string]string{ "": "PodSecurityPolicyList is a list of PodSecurityPolicy objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is a list of schema objects.", } @@ -162,6 +171,7 @@ "hostIPC": "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", "seLinux": "seLinux is the strategy that will dictate the allowable labels that may be set.", "runAsUser": "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", + "runAsGroup": "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", "supplementalGroups": "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", "fsGroup": "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", "readOnlyRootFilesystem": "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", @@ -169,14 +179,27 @@ "allowPrivilegeEscalation": "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", "allowedHostPaths": "allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.", "allowedFlexVolumes": "allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", + "allowedCSIDrivers": "AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value indicates that any CSI driver can be used for inline ephemeral volumes. This is an alpha field, and is only honored if the API server enables the CSIInlineVolume feature gate.", "allowedUnsafeSysctls": "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", "forbiddenSysctls": "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", + "allowedProcMountTypes": "AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", + "runtimeClass": "runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. If this field is omitted, the pod's runtimeClassName field is unrestricted. Enforcement of this field depends on the RuntimeClass feature gate being enabled.", } func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { return map_PodSecurityPolicySpec } +var map_RunAsGroupStrategyOptions = map[string]string{ + "": "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.", + "rule": "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", + "ranges": "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", +} + +func (RunAsGroupStrategyOptions) SwaggerDoc() map[string]string { + return map_RunAsGroupStrategyOptions +} + var map_RunAsUserStrategyOptions = map[string]string{ "": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.", "rule": "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", @@ -187,6 +210,16 @@ return map_RunAsUserStrategyOptions } +var map_RuntimeClassStrategyOptions = map[string]string{ + "": "RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses for a pod.", + "allowedRuntimeClassNames": "allowedRuntimeClassNames is a whitelist of RuntimeClass names that may be specified on a pod. A value of \"*\" means that any RuntimeClass name is allowed, and must be the only item in the list. An empty list requires the RuntimeClassName field to be unset.", + "defaultRuntimeClassName": "defaultRuntimeClassName is the default RuntimeClassName to set on the pod. The default MUST be allowed by the allowedRuntimeClassNames list. A value of nil does not mutate the Pod.", +} + +func (RuntimeClassStrategyOptions) SwaggerDoc() map[string]string { + return map_RuntimeClassStrategyOptions +} + var map_SELinuxStrategyOptions = map[string]string{ "": "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.", "rule": "rule is the strategy that will dictate the allowable labels that may be set.", diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/policy/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,13 +21,29 @@ package v1beta1 import ( - core_v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AllowedCSIDriver) DeepCopyInto(out *AllowedCSIDriver) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedCSIDriver. +func (in *AllowedCSIDriver) DeepCopy() *AllowedCSIDriver { + if in == nil { + return nil + } + out := new(AllowedCSIDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { *out = *in return @@ -66,12 +82,8 @@ in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) if in.DeleteOptions != nil { in, out := &in.DeleteOptions, &out.DeleteOptions - if *in == nil { - *out = nil - } else { - *out = new(v1.DeleteOptions) - (*in).DeepCopyInto(*out) - } + *out = new(v1.DeleteOptions) + (*in).DeepCopyInto(*out) } return } @@ -179,7 +191,7 @@ func (in *PodDisruptionBudgetList) DeepCopyInto(out *PodDisruptionBudgetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PodDisruptionBudget, len(*in)) @@ -213,30 +225,18 @@ *out = *in if in.MinAvailable != nil { in, out := &in.MinAvailable, &out.MinAvailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } if in.Selector != nil { in, out := &in.Selector, &out.Selector - if *in == nil { - *out = nil - } else { - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) } if in.MaxUnavailable != nil { in, out := &in.MaxUnavailable, &out.MaxUnavailable - if *in == nil { - *out = nil - } else { - *out = new(intstr.IntOrString) - **out = **in - } + *out = new(intstr.IntOrString) + **out = **in } return } @@ -305,7 +305,7 @@ func (in *PodSecurityPolicyList) DeepCopyInto(out *PodSecurityPolicyList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PodSecurityPolicy, len(*in)) @@ -339,17 +339,17 @@ *out = *in if in.DefaultAddCapabilities != nil { in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]core_v1.Capability, len(*in)) + *out = make([]corev1.Capability, len(*in)) copy(*out, *in) } if in.RequiredDropCapabilities != nil { in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]core_v1.Capability, len(*in)) + *out = make([]corev1.Capability, len(*in)) copy(*out, *in) } if in.AllowedCapabilities != nil { in, out := &in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]core_v1.Capability, len(*in)) + *out = make([]corev1.Capability, len(*in)) copy(*out, *in) } if in.Volumes != nil { @@ -364,25 +364,22 @@ } in.SELinux.DeepCopyInto(&out.SELinux) in.RunAsUser.DeepCopyInto(&out.RunAsUser) + if in.RunAsGroup != nil { + in, out := &in.RunAsGroup, &out.RunAsGroup + *out = new(RunAsGroupStrategyOptions) + (*in).DeepCopyInto(*out) + } in.SupplementalGroups.DeepCopyInto(&out.SupplementalGroups) in.FSGroup.DeepCopyInto(&out.FSGroup) if in.DefaultAllowPrivilegeEscalation != nil { in, out := &in.DefaultAllowPrivilegeEscalation, &out.DefaultAllowPrivilegeEscalation - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.AllowPrivilegeEscalation != nil { in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.AllowedHostPaths != nil { in, out := &in.AllowedHostPaths, &out.AllowedHostPaths @@ -394,6 +391,11 @@ *out = make([]AllowedFlexVolume, len(*in)) copy(*out, *in) } + if in.AllowedCSIDrivers != nil { + in, out := &in.AllowedCSIDrivers, &out.AllowedCSIDrivers + *out = make([]AllowedCSIDriver, len(*in)) + copy(*out, *in) + } if in.AllowedUnsafeSysctls != nil { in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls *out = make([]string, len(*in)) @@ -404,6 +406,16 @@ *out = make([]string, len(*in)) copy(*out, *in) } + if in.AllowedProcMountTypes != nil { + in, out := &in.AllowedProcMountTypes, &out.AllowedProcMountTypes + *out = make([]corev1.ProcMountType, len(*in)) + copy(*out, *in) + } + if in.RuntimeClass != nil { + in, out := &in.RuntimeClass, &out.RuntimeClass + *out = new(RuntimeClassStrategyOptions) + (*in).DeepCopyInto(*out) + } return } @@ -418,6 +430,27 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RunAsGroupStrategyOptions) DeepCopyInto(out *RunAsGroupStrategyOptions) { + *out = *in + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsGroupStrategyOptions. +func (in *RunAsGroupStrategyOptions) DeepCopy() *RunAsGroupStrategyOptions { + if in == nil { + return nil + } + out := new(RunAsGroupStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RunAsUserStrategyOptions) DeepCopyInto(out *RunAsUserStrategyOptions) { *out = *in if in.Ranges != nil { @@ -439,16 +472,38 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeClassStrategyOptions) DeepCopyInto(out *RuntimeClassStrategyOptions) { + *out = *in + if in.AllowedRuntimeClassNames != nil { + in, out := &in.AllowedRuntimeClassNames, &out.AllowedRuntimeClassNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.DefaultRuntimeClassName != nil { + in, out := &in.DefaultRuntimeClassName, &out.DefaultRuntimeClassName + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeClassStrategyOptions. +func (in *RuntimeClassStrategyOptions) DeepCopy() *RuntimeClassStrategyOptions { + if in == nil { + return nil + } + out := new(RuntimeClassStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SELinuxStrategyOptions) DeepCopyInto(out *SELinuxStrategyOptions) { *out = *in if in.SELinuxOptions != nil { in, out := &in.SELinuxOptions, &out.SELinuxOptions - if *in == nil { - *out = nil - } else { - *out = new(core_v1.SELinuxOptions) - **out = **in - } + *out = new(corev1.SELinuxOptions) + **out = **in } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=rbac.authorization.k8s.io + package v1 // import "k8s.io/api/rbac/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,42 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1/generated.proto - - It has these top-level messages: - AggregationRule - ClusterRole - ClusterRoleBinding - ClusterRoleBindingList - ClusterRoleList - PolicyRule - Role - RoleBinding - RoleBindingList - RoleList - RoleRef - Subject -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -62,53 +44,341 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *AggregationRule) Reset() { *m = AggregationRule{} } -func (*AggregationRule) ProtoMessage() {} -func (*AggregationRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ClusterRole) Reset() { *m = ClusterRole{} } -func (*ClusterRole) ProtoMessage() {} -func (*ClusterRole) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } -func (*ClusterRoleBinding) ProtoMessage() {} -func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } -func (*ClusterRoleBindingList) ProtoMessage() {} -func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } -func (*ClusterRoleList) ProtoMessage() {} -func (*ClusterRoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *PolicyRule) Reset() { *m = PolicyRule{} } -func (*PolicyRule) ProtoMessage() {} -func (*PolicyRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *Role) Reset() { *m = Role{} } -func (*Role) ProtoMessage() {} -func (*Role) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *RoleBinding) Reset() { *m = RoleBinding{} } -func (*RoleBinding) ProtoMessage() {} -func (*RoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } -func (*RoleBindingList) ProtoMessage() {} -func (*RoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *RoleList) Reset() { *m = RoleList{} } -func (*RoleList) ProtoMessage() {} -func (*RoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } - -func (m *RoleRef) Reset() { *m = RoleRef{} } -func (*RoleRef) ProtoMessage() {} -func (*RoleRef) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } - -func (m *Subject) Reset() { *m = Subject{} } -func (*Subject) ProtoMessage() {} -func (*Subject) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *AggregationRule) Reset() { *m = AggregationRule{} } +func (*AggregationRule) ProtoMessage() {} +func (*AggregationRule) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{0} +} +func (m *AggregationRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AggregationRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AggregationRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_AggregationRule.Merge(m, src) +} +func (m *AggregationRule) XXX_Size() int { + return m.Size() +} +func (m *AggregationRule) XXX_DiscardUnknown() { + xxx_messageInfo_AggregationRule.DiscardUnknown(m) +} + +var xxx_messageInfo_AggregationRule proto.InternalMessageInfo + +func (m *ClusterRole) Reset() { *m = ClusterRole{} } +func (*ClusterRole) ProtoMessage() {} +func (*ClusterRole) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{1} +} +func (m *ClusterRole) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRole.Merge(m, src) +} +func (m *ClusterRole) XXX_Size() int { + return m.Size() +} +func (m *ClusterRole) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRole.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRole proto.InternalMessageInfo + +func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } +func (*ClusterRoleBinding) ProtoMessage() {} +func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{2} +} +func (m *ClusterRoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBinding.Merge(m, src) +} +func (m *ClusterRoleBinding) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBinding proto.InternalMessageInfo + +func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } +func (*ClusterRoleBindingList) ProtoMessage() {} +func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{3} +} +func (m *ClusterRoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBindingList.Merge(m, src) +} +func (m *ClusterRoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBindingList proto.InternalMessageInfo + +func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } +func (*ClusterRoleList) ProtoMessage() {} +func (*ClusterRoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{4} +} +func (m *ClusterRoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleList.Merge(m, src) +} +func (m *ClusterRoleList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleList proto.InternalMessageInfo + +func (m *PolicyRule) Reset() { *m = PolicyRule{} } +func (*PolicyRule) ProtoMessage() {} +func (*PolicyRule) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{5} +} +func (m *PolicyRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PolicyRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_PolicyRule.Merge(m, src) +} +func (m *PolicyRule) XXX_Size() int { + return m.Size() +} +func (m *PolicyRule) XXX_DiscardUnknown() { + xxx_messageInfo_PolicyRule.DiscardUnknown(m) +} + +var xxx_messageInfo_PolicyRule proto.InternalMessageInfo + +func (m *Role) Reset() { *m = Role{} } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{6} +} +func (m *Role) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Role) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Role) XXX_Merge(src proto.Message) { + xxx_messageInfo_Role.Merge(m, src) +} +func (m *Role) XXX_Size() int { + return m.Size() +} +func (m *Role) XXX_DiscardUnknown() { + xxx_messageInfo_Role.DiscardUnknown(m) +} + +var xxx_messageInfo_Role proto.InternalMessageInfo + +func (m *RoleBinding) Reset() { *m = RoleBinding{} } +func (*RoleBinding) ProtoMessage() {} +func (*RoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{7} +} +func (m *RoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBinding.Merge(m, src) +} +func (m *RoleBinding) XXX_Size() int { + return m.Size() +} +func (m *RoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBinding proto.InternalMessageInfo + +func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } +func (*RoleBindingList) ProtoMessage() {} +func (*RoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{8} +} +func (m *RoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingList.Merge(m, src) +} +func (m *RoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingList proto.InternalMessageInfo + +func (m *RoleList) Reset() { *m = RoleList{} } +func (*RoleList) ProtoMessage() {} +func (*RoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{9} +} +func (m *RoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleList.Merge(m, src) +} +func (m *RoleList) XXX_Size() int { + return m.Size() +} +func (m *RoleList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleList proto.InternalMessageInfo + +func (m *RoleRef) Reset() { *m = RoleRef{} } +func (*RoleRef) ProtoMessage() {} +func (*RoleRef) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{10} +} +func (m *RoleRef) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleRef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleRef) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleRef.Merge(m, src) +} +func (m *RoleRef) XXX_Size() int { + return m.Size() +} +func (m *RoleRef) XXX_DiscardUnknown() { + xxx_messageInfo_RoleRef.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleRef proto.InternalMessageInfo + +func (m *Subject) Reset() { *m = Subject{} } +func (*Subject) ProtoMessage() {} +func (*Subject) Descriptor() ([]byte, []int) { + return fileDescriptor_979ffd7b30c07419, []int{11} +} +func (m *Subject) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Subject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Subject) XXX_Merge(src proto.Message) { + xxx_messageInfo_Subject.Merge(m, src) +} +func (m *Subject) XXX_Size() int { + return m.Size() +} +func (m *Subject) XXX_DiscardUnknown() { + xxx_messageInfo_Subject.DiscardUnknown(m) +} + +var xxx_messageInfo_Subject proto.InternalMessageInfo func init() { proto.RegisterType((*AggregationRule)(nil), "k8s.io.api.rbac.v1.AggregationRule") @@ -124,10 +394,70 @@ proto.RegisterType((*RoleRef)(nil), "k8s.io.api.rbac.v1.RoleRef") proto.RegisterType((*Subject)(nil), "k8s.io.api.rbac.v1.Subject") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1/generated.proto", fileDescriptor_979ffd7b30c07419) +} + +var fileDescriptor_979ffd7b30c07419 = []byte{ + // 807 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x55, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xce, 0xa4, 0x89, 0x1a, 0x4f, 0x88, 0x42, 0x87, 0x0a, 0x59, 0x05, 0x39, 0x95, 0x91, 0x50, + 0x25, 0xc0, 0x26, 0x05, 0x01, 0x12, 0xea, 0xa1, 0x2e, 0x02, 0x55, 0x2d, 0xa5, 0x9a, 0x0a, 0x0e, + 0x88, 0x03, 0x63, 0x67, 0xea, 0x0e, 0xf1, 0x2f, 0xcd, 0xd8, 0x91, 0x2a, 0x2e, 0x08, 0x89, 0x03, + 0xb7, 0x3d, 0xee, 0xfe, 0x05, 0x7b, 0xd9, 0x3d, 0xee, 0x5f, 0xb0, 0x97, 0x1e, 0x7b, 0xec, 0x29, + 0xda, 0x7a, 0xff, 0x90, 0x5d, 0xf9, 0x57, 0x9c, 0x1f, 0xee, 0x36, 0xa7, 0x48, 0xab, 0x3d, 0xb5, + 0xf3, 0xde, 0xf7, 0xbe, 0xf7, 0xcd, 0xe7, 0x79, 0x2f, 0xf0, 0xfb, 0xe1, 0x77, 0x42, 0x63, 0xbe, + 0x3e, 0x8c, 0x4c, 0xca, 0x3d, 0x1a, 0x52, 0xa1, 0x8f, 0xa8, 0x37, 0xf0, 0xb9, 0x9e, 0x27, 0x48, + 0xc0, 0x74, 0x6e, 0x12, 0x4b, 0x1f, 0xf5, 0x75, 0x9b, 0x7a, 0x94, 0x93, 0x90, 0x0e, 0xb4, 0x80, + 0xfb, 0xa1, 0x8f, 0x50, 0x86, 0xd1, 0x48, 0xc0, 0xb4, 0x04, 0xa3, 0x8d, 0xfa, 0x5b, 0x5f, 0xd8, + 0x2c, 0xbc, 0x88, 0x4c, 0xcd, 0xf2, 0x5d, 0xdd, 0xf6, 0x6d, 0x5f, 0x4f, 0xa1, 0x66, 0x74, 0x9e, + 0x9e, 0xd2, 0x43, 0xfa, 0x5f, 0x46, 0xb1, 0xf5, 0x75, 0xd9, 0xc6, 0x25, 0xd6, 0x05, 0xf3, 0x28, + 0xbf, 0xd4, 0x83, 0xa1, 0x9d, 0x04, 0x84, 0xee, 0xd2, 0x90, 0x54, 0x34, 0xde, 0xd2, 0xef, 0xaa, + 0xe2, 0x91, 0x17, 0x32, 0x97, 0x2e, 0x14, 0x7c, 0x73, 0x5f, 0x81, 0xb0, 0x2e, 0xa8, 0x4b, 0xe6, + 0xeb, 0xd4, 0x47, 0x00, 0x76, 0xf7, 0x6d, 0x9b, 0x53, 0x9b, 0x84, 0xcc, 0xf7, 0x70, 0xe4, 0x50, + 0xf4, 0x1f, 0x80, 0x9b, 0x96, 0x13, 0x89, 0x90, 0x72, 0xec, 0x3b, 0xf4, 0x8c, 0x3a, 0xd4, 0x0a, + 0x7d, 0x2e, 0x64, 0xb0, 0xbd, 0xb6, 0xd3, 0xde, 0xfd, 0x4a, 0x2b, 0x5d, 0x99, 0xf4, 0xd2, 0x82, + 0xa1, 0x9d, 0x04, 0x84, 0x96, 0x5c, 0x49, 0x1b, 0xf5, 0xb5, 0x63, 0x62, 0x52, 0xa7, 0xa8, 0x35, + 0x3e, 0xbe, 0x1a, 0xf7, 0x6a, 0xf1, 0xb8, 0xb7, 0x79, 0x50, 0x41, 0x8c, 0x2b, 0xdb, 0xa9, 0x0f, + 0xeb, 0xb0, 0x3d, 0x05, 0x47, 0x7f, 0xc2, 0x56, 0x42, 0x3e, 0x20, 0x21, 0x91, 0xc1, 0x36, 0xd8, + 0x69, 0xef, 0x7e, 0xb9, 0x9c, 0x94, 0x5f, 0xcc, 0xbf, 0xa8, 0x15, 0xfe, 0x4c, 0x43, 0x62, 0xa0, + 0x5c, 0x07, 0x2c, 0x63, 0x78, 0xc2, 0x8a, 0x0e, 0x60, 0x93, 0x47, 0x0e, 0x15, 0x72, 0x3d, 0xbd, + 0xa9, 0xa2, 0x2d, 0x7e, 0x7f, 0xed, 0xd4, 0x77, 0x98, 0x75, 0x99, 0x18, 0x65, 0x74, 0x72, 0xb2, + 0x66, 0x72, 0x12, 0x38, 0xab, 0x45, 0x26, 0xec, 0x92, 0x59, 0x47, 0xe5, 0xb5, 0x54, 0xed, 0x27, + 0x55, 0x74, 0x73, 0xe6, 0x1b, 0x1f, 0xc4, 0xe3, 0xde, 0xfc, 0x17, 0xc1, 0xf3, 0x84, 0xea, 0xff, + 0x75, 0x88, 0xa6, 0xac, 0x31, 0x98, 0x37, 0x60, 0x9e, 0xbd, 0x02, 0x87, 0x0e, 0x61, 0x4b, 0x44, + 0x69, 0xa2, 0x30, 0xe9, 0xa3, 0xaa, 0x5b, 0x9d, 0x65, 0x18, 0xe3, 0xfd, 0x9c, 0xac, 0x95, 0x07, + 0x04, 0x9e, 0x94, 0xa3, 0x1f, 0xe1, 0x3a, 0xf7, 0x1d, 0x8a, 0xe9, 0x79, 0xee, 0x4f, 0x25, 0x13, + 0xce, 0x20, 0x46, 0x37, 0x67, 0x5a, 0xcf, 0x03, 0xb8, 0x28, 0x56, 0x9f, 0x03, 0xf8, 0xe1, 0xa2, + 0x17, 0xc7, 0x4c, 0x84, 0xe8, 0x8f, 0x05, 0x3f, 0xb4, 0x25, 0x1f, 0x2f, 0x13, 0x99, 0x1b, 0x93, + 0x0b, 0x14, 0x91, 0x29, 0x2f, 0x8e, 0x60, 0x93, 0x85, 0xd4, 0x2d, 0x8c, 0xf8, 0xb4, 0x4a, 0xfe, + 0xa2, 0xb0, 0xf2, 0xd5, 0x1c, 0x26, 0xc5, 0x38, 0xe3, 0x50, 0x9f, 0x01, 0xd8, 0x9d, 0x02, 0xaf, + 0x40, 0xfe, 0x0f, 0xb3, 0xf2, 0x7b, 0xf7, 0xc9, 0xaf, 0xd6, 0xfd, 0x0a, 0x40, 0x58, 0x8e, 0x04, + 0xea, 0xc1, 0xe6, 0x88, 0x72, 0x33, 0xdb, 0x15, 0x92, 0x21, 0x25, 0xf8, 0xdf, 0x92, 0x00, 0xce, + 0xe2, 0xe8, 0x33, 0x28, 0x91, 0x80, 0xfd, 0xc4, 0xfd, 0x28, 0xc8, 0x3a, 0x4b, 0x46, 0x27, 0x1e, + 0xf7, 0xa4, 0xfd, 0xd3, 0xc3, 0x2c, 0x88, 0xcb, 0x7c, 0x02, 0xe6, 0x54, 0xf8, 0x11, 0xb7, 0xa8, + 0x90, 0xd7, 0x4a, 0x30, 0x2e, 0x82, 0xb8, 0xcc, 0xa3, 0x6f, 0x61, 0xa7, 0x38, 0x9c, 0x10, 0x97, + 0x0a, 0xb9, 0x91, 0x16, 0x6c, 0xc4, 0xe3, 0x5e, 0x07, 0x4f, 0x27, 0xf0, 0x2c, 0x0e, 0xed, 0xc1, + 0xae, 0xe7, 0x7b, 0x05, 0xe4, 0x57, 0x7c, 0x2c, 0xe4, 0x66, 0x5a, 0x9a, 0xce, 0xe2, 0xc9, 0x6c, + 0x0a, 0xcf, 0x63, 0xd5, 0xa7, 0x00, 0x36, 0xde, 0xa2, 0xfd, 0xa4, 0xfe, 0x5b, 0x87, 0xed, 0x77, + 0x7e, 0x69, 0x24, 0xe3, 0xb6, 0xda, 0x6d, 0xb1, 0xcc, 0xb8, 0xdd, 0xbf, 0x26, 0x1e, 0x03, 0xd8, + 0x5a, 0xd1, 0x7e, 0xd8, 0x9b, 0x15, 0x2c, 0xdf, 0x29, 0xb8, 0x5a, 0xe9, 0xdf, 0xb0, 0x70, 0x1d, + 0x7d, 0x0e, 0x5b, 0xc5, 0x4c, 0xa7, 0x3a, 0xa5, 0xb2, 0x6f, 0x31, 0xf6, 0x78, 0x82, 0x40, 0xdb, + 0xb0, 0x31, 0x64, 0xde, 0x40, 0xae, 0xa7, 0xc8, 0xf7, 0x72, 0x64, 0xe3, 0x88, 0x79, 0x03, 0x9c, + 0x66, 0x12, 0x84, 0x47, 0xdc, 0xec, 0x67, 0x75, 0x0a, 0x91, 0x4c, 0x33, 0x4e, 0x33, 0xea, 0x13, + 0x00, 0xd7, 0xf3, 0xd7, 0x33, 0xe1, 0x03, 0x77, 0xf2, 0x4d, 0xeb, 0xab, 0x2f, 0xa3, 0xef, 0xcd, + 0xdd, 0x91, 0x0e, 0xa5, 0xe4, 0xaf, 0x08, 0x88, 0x45, 0xe5, 0x46, 0x0a, 0xdb, 0xc8, 0x61, 0xd2, + 0x49, 0x91, 0xc0, 0x25, 0xc6, 0xd8, 0xb9, 0xba, 0x55, 0x6a, 0xd7, 0xb7, 0x4a, 0xed, 0xe6, 0x56, + 0xa9, 0xfd, 0x13, 0x2b, 0xe0, 0x2a, 0x56, 0xc0, 0x75, 0xac, 0x80, 0x9b, 0x58, 0x01, 0x2f, 0x62, + 0x05, 0x3c, 0x78, 0xa9, 0xd4, 0x7e, 0xaf, 0x8f, 0xfa, 0xaf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x24, + 0xa1, 0x47, 0x98, 0xcf, 0x0a, 0x00, 0x00, +} + func (m *AggregationRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -135,29 +465,36 @@ } func (m *AggregationRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AggregationRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.ClusterRoleSelectors) > 0 { - for _, msg := range m.ClusterRoleSelectors { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.ClusterRoleSelectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClusterRoleSelectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *ClusterRole) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -165,47 +502,58 @@ } func (m *ClusterRole) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.AggregationRule != nil { + { + size, err := m.AggregationRule.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - } - if m.AggregationRule != nil { + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AggregationRule.Size())) - n2, err := m.AggregationRule.MarshalTo(dAtA[i:]) + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n2 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -213,45 +561,56 @@ } func (m *ClusterRoleBinding) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 + i-- + dAtA[i] = 0x1a if len(m.Subjects) > 0 { - for _, msg := range m.Subjects { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RoleRef.Size())) - n4, err := m.RoleRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -259,37 +618,46 @@ } func (m *ClusterRoleBindingList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -297,37 +665,46 @@ } func (m *ClusterRoleList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PolicyRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -335,92 +712,67 @@ } func (m *PolicyRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.NonResourceURLs) > 0 { + for iNdEx := len(m.NonResourceURLs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NonResourceURLs[iNdEx]) + copy(dAtA[i:], m.NonResourceURLs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLs[iNdEx]))) + i-- + dAtA[i] = 0x2a } } - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0x22 } } if len(m.Resources) > 0 { - for _, s := range m.Resources { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - if len(m.NonResourceURLs) > 0 { - for _, s := range m.NonResourceURLs { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *Role) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -428,37 +780,46 @@ } func (m *Role) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Role) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -466,45 +827,56 @@ } func (m *RoleBinding) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n8, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- + dAtA[i] = 0x1a if len(m.Subjects) > 0 { - for _, msg := range m.Subjects { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RoleRef.Size())) - n9, err := m.RoleRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -512,37 +884,46 @@ } func (m *RoleBindingList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n10, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -550,37 +931,46 @@ } func (m *RoleList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n11, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleRef) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -588,29 +978,37 @@ } func (m *RoleRef) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) - i += copy(dAtA[i:], m.APIGroup) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x1a - i++ + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + i -= len(m.APIGroup) + copy(dAtA[i:], m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Subject) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -618,57 +1016,53 @@ } func (m *Subject) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Subject) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) - i += copy(dAtA[i:], m.APIGroup) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x22 - i++ + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - return i, nil + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.APIGroup) + copy(dAtA[i:], m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *AggregationRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.ClusterRoleSelectors) > 0 { @@ -681,6 +1075,9 @@ } func (m *ClusterRole) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -699,6 +1096,9 @@ } func (m *ClusterRoleBinding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -715,6 +1115,9 @@ } func (m *ClusterRoleBindingList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -729,6 +1132,9 @@ } func (m *ClusterRoleList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -743,6 +1149,9 @@ } func (m *PolicyRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -779,6 +1188,9 @@ } func (m *Role) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -793,6 +1205,9 @@ } func (m *RoleBinding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -809,6 +1224,9 @@ } func (m *RoleBindingList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -823,6 +1241,9 @@ } func (m *RoleList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -837,6 +1258,9 @@ } func (m *RoleRef) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.APIGroup) @@ -849,6 +1273,9 @@ } func (m *Subject) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -863,14 +1290,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -879,8 +1299,13 @@ if this == nil { return "nil" } + repeatedStringForClusterRoleSelectors := "[]LabelSelector{" + for _, f := range this.ClusterRoleSelectors { + repeatedStringForClusterRoleSelectors += fmt.Sprintf("%v", f) + "," + } + repeatedStringForClusterRoleSelectors += "}" s := strings.Join([]string{`&AggregationRule{`, - `ClusterRoleSelectors:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ClusterRoleSelectors), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1), `&`, ``, 1) + `,`, + `ClusterRoleSelectors:` + repeatedStringForClusterRoleSelectors + `,`, `}`, }, "") return s @@ -889,10 +1314,15 @@ if this == nil { return "nil" } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&ClusterRole{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, - `AggregationRule:` + strings.Replace(fmt.Sprintf("%v", this.AggregationRule), "AggregationRule", "AggregationRule", 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `AggregationRule:` + strings.Replace(this.AggregationRule.String(), "AggregationRule", "AggregationRule", 1) + `,`, `}`, }, "") return s @@ -901,9 +1331,14 @@ if this == nil { return "nil" } + repeatedStringForSubjects := "[]Subject{" + for _, f := range this.Subjects { + repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," + } + repeatedStringForSubjects += "}" s := strings.Join([]string{`&ClusterRoleBinding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "RoleRef", "RoleRef", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -913,9 +1348,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ClusterRoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ClusterRoleBindingList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -924,9 +1364,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ClusterRole{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ClusterRoleList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -949,9 +1394,14 @@ if this == nil { return "nil" } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&Role{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, `}`, }, "") return s @@ -960,9 +1410,14 @@ if this == nil { return "nil" } + repeatedStringForSubjects := "[]Subject{" + for _, f := range this.Subjects { + repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," + } + repeatedStringForSubjects += "}" s := strings.Join([]string{`&RoleBinding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "RoleRef", "RoleRef", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -972,9 +1427,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]RoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&RoleBindingList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -983,9 +1443,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Role{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Role", "Role", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&RoleList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Role", "Role", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1038,7 +1503,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1066,7 +1531,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1075,10 +1540,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ClusterRoleSelectors = append(m.ClusterRoleSelectors, k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{}) + m.ClusterRoleSelectors = append(m.ClusterRoleSelectors, v1.LabelSelector{}) if err := m.ClusterRoleSelectors[len(m.ClusterRoleSelectors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1092,6 +1560,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1119,7 +1590,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1147,7 +1618,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1156,6 +1627,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1177,7 +1651,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1186,6 +1660,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1208,7 +1685,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1217,6 +1694,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1236,6 +1716,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1263,7 +1746,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1291,7 +1774,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1300,6 +1783,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1321,7 +1807,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1330,6 +1816,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1352,7 +1841,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1361,6 +1850,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1377,6 +1869,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1404,7 +1899,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1432,7 +1927,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1441,6 +1936,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1462,7 +1960,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1471,6 +1969,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1488,6 +1989,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1515,7 +2019,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1543,7 +2047,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1552,6 +2056,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1573,7 +2080,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1582,6 +2089,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1599,6 +2109,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1626,7 +2139,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1654,7 +2167,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1664,6 +2177,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1683,7 +2199,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1693,6 +2209,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1712,7 +2231,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1722,6 +2241,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1741,7 +2263,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1751,6 +2273,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1770,7 +2295,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1780,6 +2305,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1794,6 +2322,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1821,7 +2352,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1849,7 +2380,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1858,6 +2389,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1879,7 +2413,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1888,6 +2422,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1905,6 +2442,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1932,7 +2472,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1960,7 +2500,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1969,6 +2509,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1990,7 +2533,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1999,6 +2542,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2021,7 +2567,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2030,6 +2576,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2046,6 +2595,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2073,7 +2625,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2101,7 +2653,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2110,6 +2662,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2131,7 +2686,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2140,6 +2695,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2157,6 +2715,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2184,7 +2745,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2212,7 +2773,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2221,6 +2782,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2242,7 +2806,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2251,6 +2815,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2268,6 +2835,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2295,7 +2865,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2323,7 +2893,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2333,6 +2903,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2352,7 +2925,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2362,6 +2935,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2381,7 +2957,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2391,6 +2967,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2405,6 +2984,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2432,7 +3014,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2460,7 +3042,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2470,6 +3052,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2489,7 +3074,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2499,6 +3084,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2518,7 +3106,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2528,6 +3116,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2547,7 +3138,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2557,6 +3148,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2571,6 +3165,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2637,10 +3234,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -2669,6 +3269,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -2687,62 +3290,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 807 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x55, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0xce, 0xa4, 0x89, 0x1a, 0x4f, 0x88, 0x42, 0x87, 0x0a, 0x59, 0x05, 0x39, 0x95, 0x91, 0x50, - 0x25, 0xc0, 0x26, 0x05, 0x01, 0x12, 0xea, 0xa1, 0x2e, 0x02, 0x55, 0x2d, 0xa5, 0x9a, 0x0a, 0x0e, - 0x88, 0x03, 0x63, 0x67, 0xea, 0x0e, 0xf1, 0x2f, 0xcd, 0xd8, 0x91, 0x2a, 0x2e, 0x08, 0x89, 0x03, - 0xb7, 0x3d, 0xee, 0xfe, 0x05, 0x7b, 0xd9, 0x3d, 0xee, 0x5f, 0xb0, 0x97, 0x1e, 0x7b, 0xec, 0x29, - 0xda, 0x7a, 0xff, 0x90, 0x5d, 0xf9, 0x57, 0x9c, 0x1f, 0xee, 0x36, 0xa7, 0x48, 0xab, 0x3d, 0xb5, - 0xf3, 0xde, 0xf7, 0xbe, 0xf7, 0xcd, 0xe7, 0x79, 0x2f, 0xf0, 0xfb, 0xe1, 0x77, 0x42, 0x63, 0xbe, - 0x3e, 0x8c, 0x4c, 0xca, 0x3d, 0x1a, 0x52, 0xa1, 0x8f, 0xa8, 0x37, 0xf0, 0xb9, 0x9e, 0x27, 0x48, - 0xc0, 0x74, 0x6e, 0x12, 0x4b, 0x1f, 0xf5, 0x75, 0x9b, 0x7a, 0x94, 0x93, 0x90, 0x0e, 0xb4, 0x80, - 0xfb, 0xa1, 0x8f, 0x50, 0x86, 0xd1, 0x48, 0xc0, 0xb4, 0x04, 0xa3, 0x8d, 0xfa, 0x5b, 0x5f, 0xd8, - 0x2c, 0xbc, 0x88, 0x4c, 0xcd, 0xf2, 0x5d, 0xdd, 0xf6, 0x6d, 0x5f, 0x4f, 0xa1, 0x66, 0x74, 0x9e, - 0x9e, 0xd2, 0x43, 0xfa, 0x5f, 0x46, 0xb1, 0xf5, 0x75, 0xd9, 0xc6, 0x25, 0xd6, 0x05, 0xf3, 0x28, - 0xbf, 0xd4, 0x83, 0xa1, 0x9d, 0x04, 0x84, 0xee, 0xd2, 0x90, 0x54, 0x34, 0xde, 0xd2, 0xef, 0xaa, - 0xe2, 0x91, 0x17, 0x32, 0x97, 0x2e, 0x14, 0x7c, 0x73, 0x5f, 0x81, 0xb0, 0x2e, 0xa8, 0x4b, 0xe6, - 0xeb, 0xd4, 0x47, 0x00, 0x76, 0xf7, 0x6d, 0x9b, 0x53, 0x9b, 0x84, 0xcc, 0xf7, 0x70, 0xe4, 0x50, - 0xf4, 0x1f, 0x80, 0x9b, 0x96, 0x13, 0x89, 0x90, 0x72, 0xec, 0x3b, 0xf4, 0x8c, 0x3a, 0xd4, 0x0a, - 0x7d, 0x2e, 0x64, 0xb0, 0xbd, 0xb6, 0xd3, 0xde, 0xfd, 0x4a, 0x2b, 0x5d, 0x99, 0xf4, 0xd2, 0x82, - 0xa1, 0x9d, 0x04, 0x84, 0x96, 0x5c, 0x49, 0x1b, 0xf5, 0xb5, 0x63, 0x62, 0x52, 0xa7, 0xa8, 0x35, - 0x3e, 0xbe, 0x1a, 0xf7, 0x6a, 0xf1, 0xb8, 0xb7, 0x79, 0x50, 0x41, 0x8c, 0x2b, 0xdb, 0xa9, 0x0f, - 0xeb, 0xb0, 0x3d, 0x05, 0x47, 0x7f, 0xc2, 0x56, 0x42, 0x3e, 0x20, 0x21, 0x91, 0xc1, 0x36, 0xd8, - 0x69, 0xef, 0x7e, 0xb9, 0x9c, 0x94, 0x5f, 0xcc, 0xbf, 0xa8, 0x15, 0xfe, 0x4c, 0x43, 0x62, 0xa0, - 0x5c, 0x07, 0x2c, 0x63, 0x78, 0xc2, 0x8a, 0x0e, 0x60, 0x93, 0x47, 0x0e, 0x15, 0x72, 0x3d, 0xbd, - 0xa9, 0xa2, 0x2d, 0x7e, 0x7f, 0xed, 0xd4, 0x77, 0x98, 0x75, 0x99, 0x18, 0x65, 0x74, 0x72, 0xb2, - 0x66, 0x72, 0x12, 0x38, 0xab, 0x45, 0x26, 0xec, 0x92, 0x59, 0x47, 0xe5, 0xb5, 0x54, 0xed, 0x27, - 0x55, 0x74, 0x73, 0xe6, 0x1b, 0x1f, 0xc4, 0xe3, 0xde, 0xfc, 0x17, 0xc1, 0xf3, 0x84, 0xea, 0xff, - 0x75, 0x88, 0xa6, 0xac, 0x31, 0x98, 0x37, 0x60, 0x9e, 0xbd, 0x02, 0x87, 0x0e, 0x61, 0x4b, 0x44, - 0x69, 0xa2, 0x30, 0xe9, 0xa3, 0xaa, 0x5b, 0x9d, 0x65, 0x18, 0xe3, 0xfd, 0x9c, 0xac, 0x95, 0x07, - 0x04, 0x9e, 0x94, 0xa3, 0x1f, 0xe1, 0x3a, 0xf7, 0x1d, 0x8a, 0xe9, 0x79, 0xee, 0x4f, 0x25, 0x13, - 0xce, 0x20, 0x46, 0x37, 0x67, 0x5a, 0xcf, 0x03, 0xb8, 0x28, 0x56, 0x9f, 0x03, 0xf8, 0xe1, 0xa2, - 0x17, 0xc7, 0x4c, 0x84, 0xe8, 0x8f, 0x05, 0x3f, 0xb4, 0x25, 0x1f, 0x2f, 0x13, 0x99, 0x1b, 0x93, - 0x0b, 0x14, 0x91, 0x29, 0x2f, 0x8e, 0x60, 0x93, 0x85, 0xd4, 0x2d, 0x8c, 0xf8, 0xb4, 0x4a, 0xfe, - 0xa2, 0xb0, 0xf2, 0xd5, 0x1c, 0x26, 0xc5, 0x38, 0xe3, 0x50, 0x9f, 0x01, 0xd8, 0x9d, 0x02, 0xaf, - 0x40, 0xfe, 0x0f, 0xb3, 0xf2, 0x7b, 0xf7, 0xc9, 0xaf, 0xd6, 0xfd, 0x0a, 0x40, 0x58, 0x8e, 0x04, - 0xea, 0xc1, 0xe6, 0x88, 0x72, 0x33, 0xdb, 0x15, 0x92, 0x21, 0x25, 0xf8, 0xdf, 0x92, 0x00, 0xce, - 0xe2, 0xe8, 0x33, 0x28, 0x91, 0x80, 0xfd, 0xc4, 0xfd, 0x28, 0xc8, 0x3a, 0x4b, 0x46, 0x27, 0x1e, - 0xf7, 0xa4, 0xfd, 0xd3, 0xc3, 0x2c, 0x88, 0xcb, 0x7c, 0x02, 0xe6, 0x54, 0xf8, 0x11, 0xb7, 0xa8, - 0x90, 0xd7, 0x4a, 0x30, 0x2e, 0x82, 0xb8, 0xcc, 0xa3, 0x6f, 0x61, 0xa7, 0x38, 0x9c, 0x10, 0x97, - 0x0a, 0xb9, 0x91, 0x16, 0x6c, 0xc4, 0xe3, 0x5e, 0x07, 0x4f, 0x27, 0xf0, 0x2c, 0x0e, 0xed, 0xc1, - 0xae, 0xe7, 0x7b, 0x05, 0xe4, 0x57, 0x7c, 0x2c, 0xe4, 0x66, 0x5a, 0x9a, 0xce, 0xe2, 0xc9, 0x6c, - 0x0a, 0xcf, 0x63, 0xd5, 0xa7, 0x00, 0x36, 0xde, 0xa2, 0xfd, 0xa4, 0xfe, 0x5b, 0x87, 0xed, 0x77, - 0x7e, 0x69, 0x24, 0xe3, 0xb6, 0xda, 0x6d, 0xb1, 0xcc, 0xb8, 0xdd, 0xbf, 0x26, 0x1e, 0x03, 0xd8, - 0x5a, 0xd1, 0x7e, 0xd8, 0x9b, 0x15, 0x2c, 0xdf, 0x29, 0xb8, 0x5a, 0xe9, 0xdf, 0xb0, 0x70, 0x1d, - 0x7d, 0x0e, 0x5b, 0xc5, 0x4c, 0xa7, 0x3a, 0xa5, 0xb2, 0x6f, 0x31, 0xf6, 0x78, 0x82, 0x40, 0xdb, - 0xb0, 0x31, 0x64, 0xde, 0x40, 0xae, 0xa7, 0xc8, 0xf7, 0x72, 0x64, 0xe3, 0x88, 0x79, 0x03, 0x9c, - 0x66, 0x12, 0x84, 0x47, 0xdc, 0xec, 0x67, 0x75, 0x0a, 0x91, 0x4c, 0x33, 0x4e, 0x33, 0xea, 0x13, - 0x00, 0xd7, 0xf3, 0xd7, 0x33, 0xe1, 0x03, 0x77, 0xf2, 0x4d, 0xeb, 0xab, 0x2f, 0xa3, 0xef, 0xcd, - 0xdd, 0x91, 0x0e, 0xa5, 0xe4, 0xaf, 0x08, 0x88, 0x45, 0xe5, 0x46, 0x0a, 0xdb, 0xc8, 0x61, 0xd2, - 0x49, 0x91, 0xc0, 0x25, 0xc6, 0xd8, 0xb9, 0xba, 0x55, 0x6a, 0xd7, 0xb7, 0x4a, 0xed, 0xe6, 0x56, - 0xa9, 0xfd, 0x13, 0x2b, 0xe0, 0x2a, 0x56, 0xc0, 0x75, 0xac, 0x80, 0x9b, 0x58, 0x01, 0x2f, 0x62, - 0x05, 0x3c, 0x78, 0xa9, 0xd4, 0x7e, 0xaf, 0x8f, 0xfa, 0xaf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x24, - 0xa1, 0x47, 0x98, 0xcf, 0x0a, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -43,6 +43,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this ClusterRole + // +optional repeated PolicyRule rules = 2; // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. @@ -121,6 +122,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this Role + // +optional repeated PolicyRule rules = 2; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -108,6 +108,7 @@ metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this Role + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` } @@ -170,6 +171,7 @@ metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this ClusterRole + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_AggregationRule = map[string]string{ - "": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", + "": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", "clusterRoleSelectors": "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1 import ( - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -30,7 +30,7 @@ *out = *in if in.ClusterRoleSelectors != nil { in, out := &in.ClusterRoleSelectors, &out.ClusterRoleSelectors - *out = make([]meta_v1.LabelSelector, len(*in)) + *out = make([]metav1.LabelSelector, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -62,12 +62,8 @@ } if in.AggregationRule != nil { in, out := &in.AggregationRule, &out.AggregationRule - if *in == nil { - *out = nil - } else { - *out = new(AggregationRule) - (*in).DeepCopyInto(*out) - } + *out = new(AggregationRule) + (*in).DeepCopyInto(*out) } return } @@ -126,7 +122,7 @@ func (in *ClusterRoleBindingList) DeepCopyInto(out *ClusterRoleBindingList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ClusterRoleBinding, len(*in)) @@ -159,7 +155,7 @@ func (in *ClusterRoleList) DeepCopyInto(out *ClusterRoleList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ClusterRole, len(*in)) @@ -298,7 +294,7 @@ func (in *RoleBindingList) DeepCopyInto(out *RoleBindingList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]RoleBinding, len(*in)) @@ -331,7 +327,7 @@ func (in *RoleList) DeepCopyInto(out *RoleList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Role, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=rbac.authorization.k8s.io + package v1alpha1 // import "k8s.io/api/rbac/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,42 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1alpha1/generated.proto -// DO NOT EDIT! -/* - Package v1alpha1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1alpha1/generated.proto - - It has these top-level messages: - AggregationRule - ClusterRole - ClusterRoleBinding - ClusterRoleBindingList - ClusterRoleList - PolicyRule - Role - RoleBinding - RoleBindingList - RoleList - RoleRef - Subject -*/ package v1alpha1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -62,53 +44,341 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *AggregationRule) Reset() { *m = AggregationRule{} } -func (*AggregationRule) ProtoMessage() {} -func (*AggregationRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ClusterRole) Reset() { *m = ClusterRole{} } -func (*ClusterRole) ProtoMessage() {} -func (*ClusterRole) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } -func (*ClusterRoleBinding) ProtoMessage() {} -func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } -func (*ClusterRoleBindingList) ProtoMessage() {} -func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } -func (*ClusterRoleList) ProtoMessage() {} -func (*ClusterRoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *PolicyRule) Reset() { *m = PolicyRule{} } -func (*PolicyRule) ProtoMessage() {} -func (*PolicyRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *Role) Reset() { *m = Role{} } -func (*Role) ProtoMessage() {} -func (*Role) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *RoleBinding) Reset() { *m = RoleBinding{} } -func (*RoleBinding) ProtoMessage() {} -func (*RoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } -func (*RoleBindingList) ProtoMessage() {} -func (*RoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *RoleList) Reset() { *m = RoleList{} } -func (*RoleList) ProtoMessage() {} -func (*RoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } - -func (m *RoleRef) Reset() { *m = RoleRef{} } -func (*RoleRef) ProtoMessage() {} -func (*RoleRef) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } - -func (m *Subject) Reset() { *m = Subject{} } -func (*Subject) ProtoMessage() {} -func (*Subject) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *AggregationRule) Reset() { *m = AggregationRule{} } +func (*AggregationRule) ProtoMessage() {} +func (*AggregationRule) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{0} +} +func (m *AggregationRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AggregationRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AggregationRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_AggregationRule.Merge(m, src) +} +func (m *AggregationRule) XXX_Size() int { + return m.Size() +} +func (m *AggregationRule) XXX_DiscardUnknown() { + xxx_messageInfo_AggregationRule.DiscardUnknown(m) +} + +var xxx_messageInfo_AggregationRule proto.InternalMessageInfo + +func (m *ClusterRole) Reset() { *m = ClusterRole{} } +func (*ClusterRole) ProtoMessage() {} +func (*ClusterRole) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{1} +} +func (m *ClusterRole) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRole.Merge(m, src) +} +func (m *ClusterRole) XXX_Size() int { + return m.Size() +} +func (m *ClusterRole) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRole.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRole proto.InternalMessageInfo + +func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } +func (*ClusterRoleBinding) ProtoMessage() {} +func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{2} +} +func (m *ClusterRoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBinding.Merge(m, src) +} +func (m *ClusterRoleBinding) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBinding proto.InternalMessageInfo + +func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } +func (*ClusterRoleBindingList) ProtoMessage() {} +func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{3} +} +func (m *ClusterRoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBindingList.Merge(m, src) +} +func (m *ClusterRoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBindingList proto.InternalMessageInfo + +func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } +func (*ClusterRoleList) ProtoMessage() {} +func (*ClusterRoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{4} +} +func (m *ClusterRoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleList.Merge(m, src) +} +func (m *ClusterRoleList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleList proto.InternalMessageInfo + +func (m *PolicyRule) Reset() { *m = PolicyRule{} } +func (*PolicyRule) ProtoMessage() {} +func (*PolicyRule) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{5} +} +func (m *PolicyRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PolicyRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_PolicyRule.Merge(m, src) +} +func (m *PolicyRule) XXX_Size() int { + return m.Size() +} +func (m *PolicyRule) XXX_DiscardUnknown() { + xxx_messageInfo_PolicyRule.DiscardUnknown(m) +} + +var xxx_messageInfo_PolicyRule proto.InternalMessageInfo + +func (m *Role) Reset() { *m = Role{} } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{6} +} +func (m *Role) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Role) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Role) XXX_Merge(src proto.Message) { + xxx_messageInfo_Role.Merge(m, src) +} +func (m *Role) XXX_Size() int { + return m.Size() +} +func (m *Role) XXX_DiscardUnknown() { + xxx_messageInfo_Role.DiscardUnknown(m) +} + +var xxx_messageInfo_Role proto.InternalMessageInfo + +func (m *RoleBinding) Reset() { *m = RoleBinding{} } +func (*RoleBinding) ProtoMessage() {} +func (*RoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{7} +} +func (m *RoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBinding.Merge(m, src) +} +func (m *RoleBinding) XXX_Size() int { + return m.Size() +} +func (m *RoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBinding proto.InternalMessageInfo + +func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } +func (*RoleBindingList) ProtoMessage() {} +func (*RoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{8} +} +func (m *RoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingList.Merge(m, src) +} +func (m *RoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingList proto.InternalMessageInfo + +func (m *RoleList) Reset() { *m = RoleList{} } +func (*RoleList) ProtoMessage() {} +func (*RoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{9} +} +func (m *RoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleList.Merge(m, src) +} +func (m *RoleList) XXX_Size() int { + return m.Size() +} +func (m *RoleList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleList proto.InternalMessageInfo + +func (m *RoleRef) Reset() { *m = RoleRef{} } +func (*RoleRef) ProtoMessage() {} +func (*RoleRef) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{10} +} +func (m *RoleRef) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleRef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleRef) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleRef.Merge(m, src) +} +func (m *RoleRef) XXX_Size() int { + return m.Size() +} +func (m *RoleRef) XXX_DiscardUnknown() { + xxx_messageInfo_RoleRef.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleRef proto.InternalMessageInfo + +func (m *Subject) Reset() { *m = Subject{} } +func (*Subject) ProtoMessage() {} +func (*Subject) Descriptor() ([]byte, []int) { + return fileDescriptor_b59b0bd5e7cb9590, []int{11} +} +func (m *Subject) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Subject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Subject) XXX_Merge(src proto.Message) { + xxx_messageInfo_Subject.Merge(m, src) +} +func (m *Subject) XXX_Size() int { + return m.Size() +} +func (m *Subject) XXX_DiscardUnknown() { + xxx_messageInfo_Subject.DiscardUnknown(m) +} + +var xxx_messageInfo_Subject proto.InternalMessageInfo func init() { proto.RegisterType((*AggregationRule)(nil), "k8s.io.api.rbac.v1alpha1.AggregationRule") @@ -124,10 +394,71 @@ proto.RegisterType((*RoleRef)(nil), "k8s.io.api.rbac.v1alpha1.RoleRef") proto.RegisterType((*Subject)(nil), "k8s.io.api.rbac.v1alpha1.Subject") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1alpha1/generated.proto", fileDescriptor_b59b0bd5e7cb9590) +} + +var fileDescriptor_b59b0bd5e7cb9590 = []byte{ + // 830 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xbf, 0x8f, 0xe3, 0x44, + 0x14, 0xce, 0x64, 0x13, 0x36, 0x99, 0x25, 0x0a, 0x37, 0x9c, 0x90, 0xb5, 0x42, 0xce, 0x62, 0x81, + 0x74, 0x88, 0xc3, 0x66, 0x17, 0x04, 0x34, 0x14, 0xf1, 0x15, 0x28, 0x10, 0xf6, 0x96, 0x39, 0x71, + 0x05, 0xa2, 0x60, 0xe2, 0xcc, 0x39, 0x43, 0x6c, 0x8f, 0x35, 0x63, 0x47, 0x3a, 0xd1, 0xd0, 0xd0, + 0x22, 0x1a, 0x0a, 0x7a, 0x5a, 0x1a, 0x28, 0xf9, 0x07, 0x96, 0xee, 0xca, 0xad, 0x22, 0xd6, 0xfc, + 0x21, 0x20, 0x8f, 0xed, 0xd8, 0xf9, 0x45, 0x52, 0x45, 0x42, 0xba, 0x2a, 0x99, 0xf7, 0xbe, 0xf7, + 0xbd, 0xf7, 0xbe, 0x99, 0xf7, 0x0c, 0xfb, 0xd3, 0x0f, 0xa5, 0xc9, 0xb8, 0x35, 0x8d, 0x47, 0x54, + 0x04, 0x34, 0xa2, 0xd2, 0x9a, 0xd1, 0x60, 0xcc, 0x85, 0x95, 0x3b, 0x48, 0xc8, 0x2c, 0x31, 0x22, + 0x8e, 0x35, 0x3b, 0x27, 0x5e, 0x38, 0x21, 0xe7, 0x96, 0x4b, 0x03, 0x2a, 0x48, 0x44, 0xc7, 0x66, + 0x28, 0x78, 0xc4, 0x91, 0x96, 0x21, 0x4d, 0x12, 0x32, 0x33, 0x45, 0x9a, 0x05, 0xf2, 0xf4, 0x6d, + 0x97, 0x45, 0x93, 0x78, 0x64, 0x3a, 0xdc, 0xb7, 0x5c, 0xee, 0x72, 0x4b, 0x05, 0x8c, 0xe2, 0x27, + 0xea, 0xa4, 0x0e, 0xea, 0x5f, 0x46, 0x74, 0xfa, 0x5e, 0x99, 0xd2, 0x27, 0xce, 0x84, 0x05, 0x54, + 0x3c, 0xb5, 0xc2, 0xa9, 0x9b, 0x1a, 0xa4, 0xe5, 0xd3, 0x88, 0x58, 0xb3, 0xb5, 0xf4, 0xa7, 0xd6, + 0xb6, 0x28, 0x11, 0x07, 0x11, 0xf3, 0xe9, 0x5a, 0xc0, 0xfb, 0xbb, 0x02, 0xa4, 0x33, 0xa1, 0x3e, + 0x59, 0x8d, 0x33, 0x7e, 0x06, 0xb0, 0xdb, 0x77, 0x5d, 0x41, 0x5d, 0x12, 0x31, 0x1e, 0xe0, 0xd8, + 0xa3, 0xe8, 0x7b, 0x00, 0xef, 0x3a, 0x5e, 0x2c, 0x23, 0x2a, 0x30, 0xf7, 0xe8, 0x23, 0xea, 0x51, + 0x27, 0xe2, 0x42, 0x6a, 0xe0, 0xec, 0xe8, 0xde, 0xc9, 0xc5, 0xbb, 0x66, 0xa9, 0xcd, 0x22, 0x97, + 0x19, 0x4e, 0xdd, 0xd4, 0x20, 0xcd, 0xb4, 0x25, 0x73, 0x76, 0x6e, 0x0e, 0xc9, 0x88, 0x7a, 0x45, + 0xac, 0xfd, 0xea, 0xf5, 0xbc, 0x57, 0x4b, 0xe6, 0xbd, 0xbb, 0x0f, 0x36, 0x10, 0xe3, 0x8d, 0xe9, + 0x8c, 0x5f, 0xea, 0xf0, 0xa4, 0x02, 0x47, 0x5f, 0xc3, 0x56, 0x4a, 0x3e, 0x26, 0x11, 0xd1, 0xc0, + 0x19, 0xb8, 0x77, 0x72, 0xf1, 0xce, 0x7e, 0xa5, 0x3c, 0x1c, 0x7d, 0x43, 0x9d, 0xe8, 0x33, 0x1a, + 0x11, 0x1b, 0xe5, 0x75, 0xc0, 0xd2, 0x86, 0x17, 0xac, 0x68, 0x00, 0x9b, 0x22, 0xf6, 0xa8, 0xd4, + 0xea, 0xaa, 0xd3, 0xd7, 0xcd, 0x6d, 0xaf, 0xc0, 0xbc, 0xe2, 0x1e, 0x73, 0x9e, 0xa6, 0x72, 0xd9, + 0x9d, 0x9c, 0xb2, 0x99, 0x9e, 0x24, 0xce, 0x18, 0xd0, 0x04, 0x76, 0xc9, 0xb2, 0xae, 0xda, 0x91, + 0xaa, 0xf9, 0xcd, 0xed, 0xa4, 0x2b, 0x17, 0x61, 0xbf, 0x9c, 0xcc, 0x7b, 0xab, 0xb7, 0x83, 0x57, + 0x69, 0x8d, 0x9f, 0xea, 0x10, 0x55, 0x64, 0xb2, 0x59, 0x30, 0x66, 0x81, 0x7b, 0x00, 0xb5, 0x1e, + 0xc2, 0x96, 0x8c, 0x95, 0xa3, 0x10, 0xec, 0xb5, 0xed, 0xbd, 0x3d, 0xca, 0x90, 0xf6, 0x4b, 0x39, + 0x65, 0x2b, 0x37, 0x48, 0xbc, 0x20, 0x41, 0x43, 0x78, 0x2c, 0xb8, 0x47, 0x31, 0x7d, 0x92, 0x6b, + 0xf5, 0x1f, 0x7c, 0x38, 0x03, 0xda, 0xdd, 0x9c, 0xef, 0x38, 0x37, 0xe0, 0x82, 0xc2, 0xf8, 0x13, + 0xc0, 0x57, 0xd6, 0x75, 0x19, 0x32, 0x19, 0xa1, 0xaf, 0xd6, 0xb4, 0x31, 0xf7, 0x7c, 0xd4, 0x4c, + 0x66, 0xca, 0x2c, 0xda, 0x28, 0x2c, 0x15, 0x5d, 0x3e, 0x87, 0x4d, 0x16, 0x51, 0xbf, 0x10, 0xe5, + 0xfe, 0xf6, 0x26, 0xd6, 0xcb, 0x2b, 0x5f, 0xd3, 0x20, 0xa5, 0xc0, 0x19, 0x93, 0xf1, 0x07, 0x80, + 0xdd, 0x0a, 0xf8, 0x00, 0x4d, 0x7c, 0xb2, 0xdc, 0xc4, 0x1b, 0xfb, 0x35, 0xb1, 0xb9, 0xfa, 0x7f, + 0x00, 0x84, 0xe5, 0xc0, 0xa0, 0x1e, 0x6c, 0xce, 0xa8, 0x18, 0x65, 0xfb, 0xa4, 0x6d, 0xb7, 0x53, + 0xfc, 0xe3, 0xd4, 0x80, 0x33, 0x3b, 0x7a, 0x0b, 0xb6, 0x49, 0xc8, 0x3e, 0x16, 0x3c, 0x0e, 0xa5, + 0x76, 0xa4, 0x40, 0x9d, 0x64, 0xde, 0x6b, 0xf7, 0xaf, 0x06, 0x99, 0x11, 0x97, 0xfe, 0x14, 0x2c, + 0xa8, 0xe4, 0xb1, 0x70, 0xa8, 0xd4, 0x1a, 0x25, 0x18, 0x17, 0x46, 0x5c, 0xfa, 0xd1, 0x07, 0xb0, + 0x53, 0x1c, 0x2e, 0x89, 0x4f, 0xa5, 0xd6, 0x54, 0x01, 0x77, 0x92, 0x79, 0xaf, 0x83, 0xab, 0x0e, + 0xbc, 0x8c, 0x43, 0x1f, 0xc1, 0x6e, 0xc0, 0x83, 0x02, 0xf2, 0x05, 0x1e, 0x4a, 0xed, 0x05, 0x15, + 0xaa, 0x66, 0xf4, 0x72, 0xd9, 0x85, 0x57, 0xb1, 0xc6, 0xef, 0x00, 0x36, 0xfe, 0x77, 0x3b, 0xcc, + 0xf8, 0xa1, 0x0e, 0x4f, 0x9e, 0xaf, 0x94, 0xca, 0x4a, 0x49, 0xc7, 0xf0, 0xb0, 0xbb, 0x64, 0xff, + 0x31, 0xdc, 0xbd, 0x44, 0x7e, 0x05, 0xb0, 0x75, 0xa0, 0xed, 0xf1, 0x60, 0xb9, 0x6c, 0x7d, 0x47, + 0xd9, 0x9b, 0xeb, 0xfd, 0x16, 0x16, 0x37, 0x80, 0xee, 0xc3, 0x56, 0x31, 0xf1, 0xaa, 0xda, 0x76, + 0x99, 0xbd, 0x58, 0x0a, 0x78, 0x81, 0x40, 0x67, 0xb0, 0x31, 0x65, 0xc1, 0x58, 0xab, 0x2b, 0xe4, + 0x8b, 0x39, 0xb2, 0xf1, 0x29, 0x0b, 0xc6, 0x58, 0x79, 0x52, 0x44, 0x40, 0xfc, 0xec, 0x93, 0x5c, + 0x41, 0xa4, 0xb3, 0x8e, 0x95, 0xc7, 0xf8, 0x0d, 0xc0, 0xe3, 0xfc, 0x3d, 0x2d, 0xf8, 0xc0, 0x56, + 0xbe, 0x0b, 0x08, 0x49, 0xc8, 0x1e, 0x53, 0x21, 0x19, 0x0f, 0xf2, 0xbc, 0x8b, 0x97, 0xde, 0xbf, + 0x1a, 0xe4, 0x1e, 0x5c, 0x41, 0xed, 0xae, 0x01, 0x59, 0xb0, 0x9d, 0xfe, 0xca, 0x90, 0x38, 0x54, + 0x6b, 0x28, 0xd8, 0x9d, 0x1c, 0xd6, 0xbe, 0x2c, 0x1c, 0xb8, 0xc4, 0xd8, 0xe6, 0xf5, 0xad, 0x5e, + 0x7b, 0x76, 0xab, 0xd7, 0x6e, 0x6e, 0xf5, 0xda, 0x77, 0x89, 0x0e, 0xae, 0x13, 0x1d, 0x3c, 0x4b, + 0x74, 0x70, 0x93, 0xe8, 0xe0, 0xaf, 0x44, 0x07, 0x3f, 0xfe, 0xad, 0xd7, 0xbe, 0x6c, 0x15, 0xe2, + 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x73, 0x15, 0x10, 0x29, 0x0b, 0x00, 0x00, +} + func (m *AggregationRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -135,29 +466,36 @@ } func (m *AggregationRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AggregationRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.ClusterRoleSelectors) > 0 { - for _, msg := range m.ClusterRoleSelectors { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.ClusterRoleSelectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClusterRoleSelectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *ClusterRole) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -165,47 +503,58 @@ } func (m *ClusterRole) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.AggregationRule != nil { + { + size, err := m.AggregationRule.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - } - if m.AggregationRule != nil { + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AggregationRule.Size())) - n2, err := m.AggregationRule.MarshalTo(dAtA[i:]) + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n2 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -213,45 +562,56 @@ } func (m *ClusterRoleBinding) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 + i-- + dAtA[i] = 0x1a if len(m.Subjects) > 0 { - for _, msg := range m.Subjects { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RoleRef.Size())) - n4, err := m.RoleRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -259,37 +619,46 @@ } func (m *ClusterRoleBindingList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -297,37 +666,46 @@ } func (m *ClusterRoleList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PolicyRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -335,92 +713,67 @@ } func (m *PolicyRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.NonResourceURLs) > 0 { + for iNdEx := len(m.NonResourceURLs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NonResourceURLs[iNdEx]) + copy(dAtA[i:], m.NonResourceURLs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLs[iNdEx]))) + i-- + dAtA[i] = 0x32 } } - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0x2a } } if len(m.Resources) > 0 { - for _, s := range m.Resources { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0x1a } } - if len(m.NonResourceURLs) > 0 { - for _, s := range m.NonResourceURLs { - dAtA[i] = 0x32 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *Role) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -428,37 +781,46 @@ } func (m *Role) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Role) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -466,83 +828,103 @@ } func (m *RoleBinding) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n8, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- + dAtA[i] = 0x1a if len(m.Subjects) > 0 { - for _, msg := range m.Subjects { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RoleRef.Size())) - n9, err := m.RoleRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *RoleBindingList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *RoleBindingList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n10, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -550,37 +932,46 @@ } func (m *RoleList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n11, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleRef) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -588,29 +979,37 @@ } func (m *RoleRef) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) - i += copy(dAtA[i:], m.APIGroup) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x1a - i++ + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + i -= len(m.APIGroup) + copy(dAtA[i:], m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Subject) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -618,57 +1017,53 @@ } func (m *Subject) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Subject) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x22 - i++ + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - return i, nil + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *AggregationRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.ClusterRoleSelectors) > 0 { @@ -681,6 +1076,9 @@ } func (m *ClusterRole) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -699,6 +1097,9 @@ } func (m *ClusterRoleBinding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -715,6 +1116,9 @@ } func (m *ClusterRoleBindingList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -729,6 +1133,9 @@ } func (m *ClusterRoleList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -743,6 +1150,9 @@ } func (m *PolicyRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -779,6 +1189,9 @@ } func (m *Role) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -793,6 +1206,9 @@ } func (m *RoleBinding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -809,6 +1225,9 @@ } func (m *RoleBindingList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -823,6 +1242,9 @@ } func (m *RoleList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -837,6 +1259,9 @@ } func (m *RoleRef) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.APIGroup) @@ -849,6 +1274,9 @@ } func (m *Subject) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -863,14 +1291,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -879,8 +1300,13 @@ if this == nil { return "nil" } + repeatedStringForClusterRoleSelectors := "[]LabelSelector{" + for _, f := range this.ClusterRoleSelectors { + repeatedStringForClusterRoleSelectors += fmt.Sprintf("%v", f) + "," + } + repeatedStringForClusterRoleSelectors += "}" s := strings.Join([]string{`&AggregationRule{`, - `ClusterRoleSelectors:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ClusterRoleSelectors), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1), `&`, ``, 1) + `,`, + `ClusterRoleSelectors:` + repeatedStringForClusterRoleSelectors + `,`, `}`, }, "") return s @@ -889,10 +1315,15 @@ if this == nil { return "nil" } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&ClusterRole{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, - `AggregationRule:` + strings.Replace(fmt.Sprintf("%v", this.AggregationRule), "AggregationRule", "AggregationRule", 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `AggregationRule:` + strings.Replace(this.AggregationRule.String(), "AggregationRule", "AggregationRule", 1) + `,`, `}`, }, "") return s @@ -901,9 +1332,14 @@ if this == nil { return "nil" } + repeatedStringForSubjects := "[]Subject{" + for _, f := range this.Subjects { + repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," + } + repeatedStringForSubjects += "}" s := strings.Join([]string{`&ClusterRoleBinding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "RoleRef", "RoleRef", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -913,9 +1349,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ClusterRoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ClusterRoleBindingList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -924,9 +1365,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ClusterRole{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ClusterRoleList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -949,9 +1395,14 @@ if this == nil { return "nil" } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&Role{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, `}`, }, "") return s @@ -960,9 +1411,14 @@ if this == nil { return "nil" } + repeatedStringForSubjects := "[]Subject{" + for _, f := range this.Subjects { + repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," + } + repeatedStringForSubjects += "}" s := strings.Join([]string{`&RoleBinding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "RoleRef", "RoleRef", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -972,9 +1428,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]RoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&RoleBindingList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -983,9 +1444,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Role{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Role", "Role", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&RoleList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Role", "Role", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1038,7 +1504,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1066,7 +1532,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1075,10 +1541,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ClusterRoleSelectors = append(m.ClusterRoleSelectors, k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{}) + m.ClusterRoleSelectors = append(m.ClusterRoleSelectors, v1.LabelSelector{}) if err := m.ClusterRoleSelectors[len(m.ClusterRoleSelectors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1092,6 +1561,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1119,7 +1591,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1147,7 +1619,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1156,6 +1628,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1177,7 +1652,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1186,6 +1661,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1208,7 +1686,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1217,6 +1695,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1236,6 +1717,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1263,7 +1747,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1291,7 +1775,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1300,6 +1784,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1321,7 +1808,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1330,6 +1817,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1352,7 +1842,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1361,6 +1851,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1377,6 +1870,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1404,7 +1900,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1432,7 +1928,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1441,6 +1937,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1462,7 +1961,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1471,6 +1970,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1488,6 +1990,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1515,7 +2020,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1543,7 +2048,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1552,6 +2057,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1573,7 +2081,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1582,6 +2090,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1599,6 +2110,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1626,7 +2140,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1654,7 +2168,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1664,6 +2178,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1683,7 +2200,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1693,6 +2210,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1712,7 +2232,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1722,6 +2242,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1741,7 +2264,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1751,6 +2274,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1770,7 +2296,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1780,6 +2306,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1794,6 +2323,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1821,7 +2353,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1849,7 +2381,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1858,6 +2390,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1879,7 +2414,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1888,6 +2423,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1905,6 +2443,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1932,7 +2473,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1960,7 +2501,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1969,6 +2510,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1990,7 +2534,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1999,6 +2543,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2021,7 +2568,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2030,6 +2577,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2046,6 +2596,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2073,7 +2626,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2101,7 +2654,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2110,6 +2663,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2131,7 +2687,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2140,6 +2696,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2157,6 +2716,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2184,7 +2746,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2212,7 +2774,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2221,6 +2783,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2242,7 +2807,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2251,6 +2816,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2268,6 +2836,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2295,7 +2866,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2323,7 +2894,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2333,6 +2904,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2352,7 +2926,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2362,6 +2936,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2381,7 +2958,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2391,6 +2968,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2405,6 +2985,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2432,7 +3015,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2460,7 +3043,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2470,6 +3053,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2489,7 +3075,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2499,6 +3085,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2518,7 +3107,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2528,6 +3117,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2547,7 +3139,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2557,6 +3149,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2571,6 +3166,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2637,10 +3235,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -2669,6 +3270,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -2687,63 +3291,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1alpha1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 830 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xbf, 0x8f, 0xe3, 0x44, - 0x14, 0xce, 0x64, 0x13, 0x36, 0x99, 0x25, 0x0a, 0x37, 0x9c, 0x90, 0xb5, 0x42, 0xce, 0x62, 0x81, - 0x74, 0x88, 0xc3, 0x66, 0x17, 0x04, 0x34, 0x14, 0xf1, 0x15, 0x28, 0x10, 0xf6, 0x96, 0x39, 0x71, - 0x05, 0xa2, 0x60, 0xe2, 0xcc, 0x39, 0x43, 0x6c, 0x8f, 0x35, 0x63, 0x47, 0x3a, 0xd1, 0xd0, 0xd0, - 0x22, 0x1a, 0x0a, 0x7a, 0x5a, 0x1a, 0x28, 0xf9, 0x07, 0x96, 0xee, 0xca, 0xad, 0x22, 0xd6, 0xfc, - 0x21, 0x20, 0x8f, 0xed, 0xd8, 0xf9, 0x45, 0x52, 0x45, 0x42, 0xba, 0x2a, 0x99, 0xf7, 0xbe, 0xf7, - 0xbd, 0xf7, 0xbe, 0x99, 0xf7, 0x0c, 0xfb, 0xd3, 0x0f, 0xa5, 0xc9, 0xb8, 0x35, 0x8d, 0x47, 0x54, - 0x04, 0x34, 0xa2, 0xd2, 0x9a, 0xd1, 0x60, 0xcc, 0x85, 0x95, 0x3b, 0x48, 0xc8, 0x2c, 0x31, 0x22, - 0x8e, 0x35, 0x3b, 0x27, 0x5e, 0x38, 0x21, 0xe7, 0x96, 0x4b, 0x03, 0x2a, 0x48, 0x44, 0xc7, 0x66, - 0x28, 0x78, 0xc4, 0x91, 0x96, 0x21, 0x4d, 0x12, 0x32, 0x33, 0x45, 0x9a, 0x05, 0xf2, 0xf4, 0x6d, - 0x97, 0x45, 0x93, 0x78, 0x64, 0x3a, 0xdc, 0xb7, 0x5c, 0xee, 0x72, 0x4b, 0x05, 0x8c, 0xe2, 0x27, - 0xea, 0xa4, 0x0e, 0xea, 0x5f, 0x46, 0x74, 0xfa, 0x5e, 0x99, 0xd2, 0x27, 0xce, 0x84, 0x05, 0x54, - 0x3c, 0xb5, 0xc2, 0xa9, 0x9b, 0x1a, 0xa4, 0xe5, 0xd3, 0x88, 0x58, 0xb3, 0xb5, 0xf4, 0xa7, 0xd6, - 0xb6, 0x28, 0x11, 0x07, 0x11, 0xf3, 0xe9, 0x5a, 0xc0, 0xfb, 0xbb, 0x02, 0xa4, 0x33, 0xa1, 0x3e, - 0x59, 0x8d, 0x33, 0x7e, 0x06, 0xb0, 0xdb, 0x77, 0x5d, 0x41, 0x5d, 0x12, 0x31, 0x1e, 0xe0, 0xd8, - 0xa3, 0xe8, 0x7b, 0x00, 0xef, 0x3a, 0x5e, 0x2c, 0x23, 0x2a, 0x30, 0xf7, 0xe8, 0x23, 0xea, 0x51, - 0x27, 0xe2, 0x42, 0x6a, 0xe0, 0xec, 0xe8, 0xde, 0xc9, 0xc5, 0xbb, 0x66, 0xa9, 0xcd, 0x22, 0x97, - 0x19, 0x4e, 0xdd, 0xd4, 0x20, 0xcd, 0xb4, 0x25, 0x73, 0x76, 0x6e, 0x0e, 0xc9, 0x88, 0x7a, 0x45, - 0xac, 0xfd, 0xea, 0xf5, 0xbc, 0x57, 0x4b, 0xe6, 0xbd, 0xbb, 0x0f, 0x36, 0x10, 0xe3, 0x8d, 0xe9, - 0x8c, 0x5f, 0xea, 0xf0, 0xa4, 0x02, 0x47, 0x5f, 0xc3, 0x56, 0x4a, 0x3e, 0x26, 0x11, 0xd1, 0xc0, - 0x19, 0xb8, 0x77, 0x72, 0xf1, 0xce, 0x7e, 0xa5, 0x3c, 0x1c, 0x7d, 0x43, 0x9d, 0xe8, 0x33, 0x1a, - 0x11, 0x1b, 0xe5, 0x75, 0xc0, 0xd2, 0x86, 0x17, 0xac, 0x68, 0x00, 0x9b, 0x22, 0xf6, 0xa8, 0xd4, - 0xea, 0xaa, 0xd3, 0xd7, 0xcd, 0x6d, 0xaf, 0xc0, 0xbc, 0xe2, 0x1e, 0x73, 0x9e, 0xa6, 0x72, 0xd9, - 0x9d, 0x9c, 0xb2, 0x99, 0x9e, 0x24, 0xce, 0x18, 0xd0, 0x04, 0x76, 0xc9, 0xb2, 0xae, 0xda, 0x91, - 0xaa, 0xf9, 0xcd, 0xed, 0xa4, 0x2b, 0x17, 0x61, 0xbf, 0x9c, 0xcc, 0x7b, 0xab, 0xb7, 0x83, 0x57, - 0x69, 0x8d, 0x9f, 0xea, 0x10, 0x55, 0x64, 0xb2, 0x59, 0x30, 0x66, 0x81, 0x7b, 0x00, 0xb5, 0x1e, - 0xc2, 0x96, 0x8c, 0x95, 0xa3, 0x10, 0xec, 0xb5, 0xed, 0xbd, 0x3d, 0xca, 0x90, 0xf6, 0x4b, 0x39, - 0x65, 0x2b, 0x37, 0x48, 0xbc, 0x20, 0x41, 0x43, 0x78, 0x2c, 0xb8, 0x47, 0x31, 0x7d, 0x92, 0x6b, - 0xf5, 0x1f, 0x7c, 0x38, 0x03, 0xda, 0xdd, 0x9c, 0xef, 0x38, 0x37, 0xe0, 0x82, 0xc2, 0xf8, 0x13, - 0xc0, 0x57, 0xd6, 0x75, 0x19, 0x32, 0x19, 0xa1, 0xaf, 0xd6, 0xb4, 0x31, 0xf7, 0x7c, 0xd4, 0x4c, - 0x66, 0xca, 0x2c, 0xda, 0x28, 0x2c, 0x15, 0x5d, 0x3e, 0x87, 0x4d, 0x16, 0x51, 0xbf, 0x10, 0xe5, - 0xfe, 0xf6, 0x26, 0xd6, 0xcb, 0x2b, 0x5f, 0xd3, 0x20, 0xa5, 0xc0, 0x19, 0x93, 0xf1, 0x07, 0x80, - 0xdd, 0x0a, 0xf8, 0x00, 0x4d, 0x7c, 0xb2, 0xdc, 0xc4, 0x1b, 0xfb, 0x35, 0xb1, 0xb9, 0xfa, 0x7f, - 0x00, 0x84, 0xe5, 0xc0, 0xa0, 0x1e, 0x6c, 0xce, 0xa8, 0x18, 0x65, 0xfb, 0xa4, 0x6d, 0xb7, 0x53, - 0xfc, 0xe3, 0xd4, 0x80, 0x33, 0x3b, 0x7a, 0x0b, 0xb6, 0x49, 0xc8, 0x3e, 0x16, 0x3c, 0x0e, 0xa5, - 0x76, 0xa4, 0x40, 0x9d, 0x64, 0xde, 0x6b, 0xf7, 0xaf, 0x06, 0x99, 0x11, 0x97, 0xfe, 0x14, 0x2c, - 0xa8, 0xe4, 0xb1, 0x70, 0xa8, 0xd4, 0x1a, 0x25, 0x18, 0x17, 0x46, 0x5c, 0xfa, 0xd1, 0x07, 0xb0, - 0x53, 0x1c, 0x2e, 0x89, 0x4f, 0xa5, 0xd6, 0x54, 0x01, 0x77, 0x92, 0x79, 0xaf, 0x83, 0xab, 0x0e, - 0xbc, 0x8c, 0x43, 0x1f, 0xc1, 0x6e, 0xc0, 0x83, 0x02, 0xf2, 0x05, 0x1e, 0x4a, 0xed, 0x05, 0x15, - 0xaa, 0x66, 0xf4, 0x72, 0xd9, 0x85, 0x57, 0xb1, 0xc6, 0xef, 0x00, 0x36, 0xfe, 0x77, 0x3b, 0xcc, - 0xf8, 0xa1, 0x0e, 0x4f, 0x9e, 0xaf, 0x94, 0xca, 0x4a, 0x49, 0xc7, 0xf0, 0xb0, 0xbb, 0x64, 0xff, - 0x31, 0xdc, 0xbd, 0x44, 0x7e, 0x05, 0xb0, 0x75, 0xa0, 0xed, 0xf1, 0x60, 0xb9, 0x6c, 0x7d, 0x47, - 0xd9, 0x9b, 0xeb, 0xfd, 0x16, 0x16, 0x37, 0x80, 0xee, 0xc3, 0x56, 0x31, 0xf1, 0xaa, 0xda, 0x76, - 0x99, 0xbd, 0x58, 0x0a, 0x78, 0x81, 0x40, 0x67, 0xb0, 0x31, 0x65, 0xc1, 0x58, 0xab, 0x2b, 0xe4, - 0x8b, 0x39, 0xb2, 0xf1, 0x29, 0x0b, 0xc6, 0x58, 0x79, 0x52, 0x44, 0x40, 0xfc, 0xec, 0x93, 0x5c, - 0x41, 0xa4, 0xb3, 0x8e, 0x95, 0xc7, 0xf8, 0x0d, 0xc0, 0xe3, 0xfc, 0x3d, 0x2d, 0xf8, 0xc0, 0x56, - 0xbe, 0x0b, 0x08, 0x49, 0xc8, 0x1e, 0x53, 0x21, 0x19, 0x0f, 0xf2, 0xbc, 0x8b, 0x97, 0xde, 0xbf, - 0x1a, 0xe4, 0x1e, 0x5c, 0x41, 0xed, 0xae, 0x01, 0x59, 0xb0, 0x9d, 0xfe, 0xca, 0x90, 0x38, 0x54, - 0x6b, 0x28, 0xd8, 0x9d, 0x1c, 0xd6, 0xbe, 0x2c, 0x1c, 0xb8, 0xc4, 0xd8, 0xe6, 0xf5, 0xad, 0x5e, - 0x7b, 0x76, 0xab, 0xd7, 0x6e, 0x6e, 0xf5, 0xda, 0x77, 0x89, 0x0e, 0xae, 0x13, 0x1d, 0x3c, 0x4b, - 0x74, 0x70, 0x93, 0xe8, 0xe0, 0xaf, 0x44, 0x07, 0x3f, 0xfe, 0xad, 0xd7, 0xbe, 0x6c, 0x15, 0xe2, - 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x73, 0x15, 0x10, 0x29, 0x0b, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -43,6 +43,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this ClusterRole + // +optional repeated PolicyRule rules = 2; // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. @@ -122,6 +123,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this Role + // +optional repeated PolicyRule rules = 2; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -110,6 +110,7 @@ metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this Role + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` } @@ -172,6 +173,7 @@ metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this ClusterRole + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_AggregationRule = map[string]string{ - "": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", + "": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", "clusterRoleSelectors": "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -62,12 +62,8 @@ } if in.AggregationRule != nil { in, out := &in.AggregationRule, &out.AggregationRule - if *in == nil { - *out = nil - } else { - *out = new(AggregationRule) - (*in).DeepCopyInto(*out) - } + *out = new(AggregationRule) + (*in).DeepCopyInto(*out) } return } @@ -126,7 +122,7 @@ func (in *ClusterRoleBindingList) DeepCopyInto(out *ClusterRoleBindingList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ClusterRoleBinding, len(*in)) @@ -159,7 +155,7 @@ func (in *ClusterRoleList) DeepCopyInto(out *ClusterRoleList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ClusterRole, len(*in)) @@ -298,7 +294,7 @@ func (in *RoleBindingList) DeepCopyInto(out *RoleBindingList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]RoleBinding, len(*in)) @@ -331,7 +327,7 @@ func (in *RoleList) DeepCopyInto(out *RoleList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Role, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=rbac.authorization.k8s.io + package v1beta1 // import "k8s.io/api/rbac/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,42 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1beta1/generated.proto - - It has these top-level messages: - AggregationRule - ClusterRole - ClusterRoleBinding - ClusterRoleBindingList - ClusterRoleList - PolicyRule - Role - RoleBinding - RoleBindingList - RoleList - RoleRef - Subject -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -62,53 +44,341 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *AggregationRule) Reset() { *m = AggregationRule{} } -func (*AggregationRule) ProtoMessage() {} -func (*AggregationRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *ClusterRole) Reset() { *m = ClusterRole{} } -func (*ClusterRole) ProtoMessage() {} -func (*ClusterRole) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } -func (*ClusterRoleBinding) ProtoMessage() {} -func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } -func (*ClusterRoleBindingList) ProtoMessage() {} -func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } -func (*ClusterRoleList) ProtoMessage() {} -func (*ClusterRoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *PolicyRule) Reset() { *m = PolicyRule{} } -func (*PolicyRule) ProtoMessage() {} -func (*PolicyRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *Role) Reset() { *m = Role{} } -func (*Role) ProtoMessage() {} -func (*Role) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *RoleBinding) Reset() { *m = RoleBinding{} } -func (*RoleBinding) ProtoMessage() {} -func (*RoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } -func (*RoleBindingList) ProtoMessage() {} -func (*RoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *RoleList) Reset() { *m = RoleList{} } -func (*RoleList) ProtoMessage() {} -func (*RoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } - -func (m *RoleRef) Reset() { *m = RoleRef{} } -func (*RoleRef) ProtoMessage() {} -func (*RoleRef) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } - -func (m *Subject) Reset() { *m = Subject{} } -func (*Subject) ProtoMessage() {} -func (*Subject) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *AggregationRule) Reset() { *m = AggregationRule{} } +func (*AggregationRule) ProtoMessage() {} +func (*AggregationRule) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{0} +} +func (m *AggregationRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AggregationRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AggregationRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_AggregationRule.Merge(m, src) +} +func (m *AggregationRule) XXX_Size() int { + return m.Size() +} +func (m *AggregationRule) XXX_DiscardUnknown() { + xxx_messageInfo_AggregationRule.DiscardUnknown(m) +} + +var xxx_messageInfo_AggregationRule proto.InternalMessageInfo + +func (m *ClusterRole) Reset() { *m = ClusterRole{} } +func (*ClusterRole) ProtoMessage() {} +func (*ClusterRole) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{1} +} +func (m *ClusterRole) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRole.Merge(m, src) +} +func (m *ClusterRole) XXX_Size() int { + return m.Size() +} +func (m *ClusterRole) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRole.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRole proto.InternalMessageInfo + +func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } +func (*ClusterRoleBinding) ProtoMessage() {} +func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{2} +} +func (m *ClusterRoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBinding.Merge(m, src) +} +func (m *ClusterRoleBinding) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBinding proto.InternalMessageInfo + +func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } +func (*ClusterRoleBindingList) ProtoMessage() {} +func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{3} +} +func (m *ClusterRoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBindingList.Merge(m, src) +} +func (m *ClusterRoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBindingList proto.InternalMessageInfo + +func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } +func (*ClusterRoleList) ProtoMessage() {} +func (*ClusterRoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{4} +} +func (m *ClusterRoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleList.Merge(m, src) +} +func (m *ClusterRoleList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleList proto.InternalMessageInfo + +func (m *PolicyRule) Reset() { *m = PolicyRule{} } +func (*PolicyRule) ProtoMessage() {} +func (*PolicyRule) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{5} +} +func (m *PolicyRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PolicyRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_PolicyRule.Merge(m, src) +} +func (m *PolicyRule) XXX_Size() int { + return m.Size() +} +func (m *PolicyRule) XXX_DiscardUnknown() { + xxx_messageInfo_PolicyRule.DiscardUnknown(m) +} + +var xxx_messageInfo_PolicyRule proto.InternalMessageInfo + +func (m *Role) Reset() { *m = Role{} } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{6} +} +func (m *Role) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Role) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Role) XXX_Merge(src proto.Message) { + xxx_messageInfo_Role.Merge(m, src) +} +func (m *Role) XXX_Size() int { + return m.Size() +} +func (m *Role) XXX_DiscardUnknown() { + xxx_messageInfo_Role.DiscardUnknown(m) +} + +var xxx_messageInfo_Role proto.InternalMessageInfo + +func (m *RoleBinding) Reset() { *m = RoleBinding{} } +func (*RoleBinding) ProtoMessage() {} +func (*RoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{7} +} +func (m *RoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBinding.Merge(m, src) +} +func (m *RoleBinding) XXX_Size() int { + return m.Size() +} +func (m *RoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBinding proto.InternalMessageInfo + +func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } +func (*RoleBindingList) ProtoMessage() {} +func (*RoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{8} +} +func (m *RoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingList.Merge(m, src) +} +func (m *RoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingList proto.InternalMessageInfo + +func (m *RoleList) Reset() { *m = RoleList{} } +func (*RoleList) ProtoMessage() {} +func (*RoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{9} +} +func (m *RoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleList.Merge(m, src) +} +func (m *RoleList) XXX_Size() int { + return m.Size() +} +func (m *RoleList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleList proto.InternalMessageInfo + +func (m *RoleRef) Reset() { *m = RoleRef{} } +func (*RoleRef) ProtoMessage() {} +func (*RoleRef) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{10} +} +func (m *RoleRef) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleRef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleRef) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleRef.Merge(m, src) +} +func (m *RoleRef) XXX_Size() int { + return m.Size() +} +func (m *RoleRef) XXX_DiscardUnknown() { + xxx_messageInfo_RoleRef.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleRef proto.InternalMessageInfo + +func (m *Subject) Reset() { *m = Subject{} } +func (*Subject) ProtoMessage() {} +func (*Subject) Descriptor() ([]byte, []int) { + return fileDescriptor_99f6bec96facc83d, []int{11} +} +func (m *Subject) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Subject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Subject) XXX_Merge(src proto.Message) { + xxx_messageInfo_Subject.Merge(m, src) +} +func (m *Subject) XXX_Size() int { + return m.Size() +} +func (m *Subject) XXX_DiscardUnknown() { + xxx_messageInfo_Subject.DiscardUnknown(m) +} + +var xxx_messageInfo_Subject proto.InternalMessageInfo func init() { proto.RegisterType((*AggregationRule)(nil), "k8s.io.api.rbac.v1beta1.AggregationRule") @@ -124,10 +394,70 @@ proto.RegisterType((*RoleRef)(nil), "k8s.io.api.rbac.v1beta1.RoleRef") proto.RegisterType((*Subject)(nil), "k8s.io.api.rbac.v1beta1.Subject") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1beta1/generated.proto", fileDescriptor_99f6bec96facc83d) +} + +var fileDescriptor_99f6bec96facc83d = []byte{ + // 808 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xbd, 0x6f, 0xfb, 0x44, + 0x18, 0xce, 0xa5, 0x89, 0x12, 0x5f, 0x88, 0xc2, 0xef, 0xa8, 0xc0, 0xaa, 0xc0, 0x89, 0x02, 0x43, + 0xa5, 0x52, 0x9b, 0x16, 0x04, 0x2c, 0x48, 0xd4, 0x0c, 0x50, 0xb5, 0x84, 0xea, 0x2a, 0x18, 0x10, + 0x03, 0x67, 0xe7, 0xea, 0x1e, 0xf1, 0x97, 0xee, 0xec, 0x48, 0x15, 0x0b, 0x0b, 0x1b, 0x03, 0x12, + 0x13, 0x2b, 0x33, 0x13, 0x23, 0x7f, 0x41, 0xc6, 0x8e, 0x9d, 0x22, 0x6a, 0xfe, 0x10, 0xd0, 0xf9, + 0x23, 0xce, 0x67, 0x9b, 0x29, 0x12, 0x12, 0x53, 0x7b, 0xef, 0xfb, 0xbc, 0xcf, 0xfb, 0xbc, 0x8f, + 0xef, 0xde, 0xc0, 0x8f, 0x47, 0x1f, 0x0a, 0x9d, 0x05, 0xc6, 0x28, 0xb6, 0x28, 0xf7, 0x69, 0x44, + 0x85, 0x31, 0xa6, 0xfe, 0x30, 0xe0, 0x46, 0x9e, 0x20, 0x21, 0x33, 0xb8, 0x45, 0x6c, 0x63, 0x7c, + 0x62, 0xd1, 0x88, 0x9c, 0x18, 0x0e, 0xf5, 0x29, 0x27, 0x11, 0x1d, 0xea, 0x21, 0x0f, 0xa2, 0x00, + 0xbd, 0x96, 0x01, 0x75, 0x12, 0x32, 0x5d, 0x02, 0xf5, 0x1c, 0x78, 0x70, 0xec, 0xb0, 0xe8, 0x36, + 0xb6, 0x74, 0x3b, 0xf0, 0x0c, 0x27, 0x70, 0x02, 0x23, 0xc5, 0x5b, 0xf1, 0x4d, 0x7a, 0x4a, 0x0f, + 0xe9, 0x7f, 0x19, 0xcf, 0xc1, 0x7b, 0x65, 0x43, 0x8f, 0xd8, 0xb7, 0xcc, 0xa7, 0xfc, 0xce, 0x08, + 0x47, 0x8e, 0x0c, 0x08, 0xc3, 0xa3, 0x11, 0x31, 0xc6, 0x2b, 0xdd, 0x0f, 0x8c, 0x4d, 0x55, 0x3c, + 0xf6, 0x23, 0xe6, 0xd1, 0x95, 0x82, 0xf7, 0x9f, 0x2b, 0x10, 0xf6, 0x2d, 0xf5, 0xc8, 0x72, 0x5d, + 0xff, 0x57, 0x00, 0x3b, 0x67, 0x8e, 0xc3, 0xa9, 0x43, 0x22, 0x16, 0xf8, 0x38, 0x76, 0x29, 0xfa, + 0x11, 0xc0, 0x7d, 0xdb, 0x8d, 0x45, 0x44, 0x39, 0x0e, 0x5c, 0x7a, 0x4d, 0x5d, 0x6a, 0x47, 0x01, + 0x17, 0x2a, 0xe8, 0xed, 0x1d, 0xb6, 0x4e, 0xdf, 0xd5, 0x4b, 0x6b, 0x66, 0xbd, 0xf4, 0x70, 0xe4, + 0xc8, 0x80, 0xd0, 0xe5, 0x48, 0xfa, 0xf8, 0x44, 0xbf, 0x24, 0x16, 0x75, 0x8b, 0x5a, 0xf3, 0xf5, + 0xc9, 0xb4, 0x5b, 0x49, 0xa6, 0xdd, 0xfd, 0x4f, 0xd6, 0x10, 0xe3, 0xb5, 0xed, 0xfa, 0xbf, 0x55, + 0x61, 0x6b, 0x0e, 0x8e, 0xbe, 0x85, 0x4d, 0x49, 0x3e, 0x24, 0x11, 0x51, 0x41, 0x0f, 0x1c, 0xb6, + 0x4e, 0xdf, 0xd9, 0x4e, 0xca, 0x17, 0xd6, 0x77, 0xd4, 0x8e, 0x3e, 0xa7, 0x11, 0x31, 0x51, 0xae, + 0x03, 0x96, 0x31, 0x3c, 0x63, 0x45, 0x9f, 0xc1, 0x3a, 0x8f, 0x5d, 0x2a, 0xd4, 0x6a, 0x3a, 0xe9, + 0x9b, 0xfa, 0x86, 0x4b, 0xa0, 0x5f, 0x05, 0x2e, 0xb3, 0xef, 0xa4, 0x5b, 0x66, 0x3b, 0x67, 0xac, + 0xcb, 0x93, 0xc0, 0x19, 0x01, 0x72, 0x60, 0x87, 0x2c, 0xda, 0xaa, 0xee, 0xa5, 0x92, 0x0f, 0x37, + 0x72, 0x2e, 0x7d, 0x06, 0xf3, 0x95, 0x64, 0xda, 0x5d, 0xfe, 0x36, 0x78, 0x99, 0xb5, 0xff, 0x4b, + 0x15, 0xa2, 0x39, 0x93, 0x4c, 0xe6, 0x0f, 0x99, 0xef, 0xec, 0xc0, 0xab, 0x01, 0x6c, 0x8a, 0x38, + 0x4d, 0x14, 0x76, 0xf5, 0x36, 0x8e, 0x76, 0x9d, 0x01, 0xcd, 0x97, 0x73, 0xc6, 0x66, 0x1e, 0x10, + 0x78, 0xc6, 0x81, 0x2e, 0x60, 0x83, 0x07, 0x2e, 0xc5, 0xf4, 0x26, 0x77, 0x6a, 0x33, 0x1d, 0xce, + 0x70, 0x66, 0x27, 0xa7, 0x6b, 0xe4, 0x01, 0x5c, 0x30, 0xf4, 0x27, 0x00, 0xbe, 0xba, 0xea, 0xca, + 0x25, 0x13, 0x11, 0xfa, 0x66, 0xc5, 0x19, 0x7d, 0xcb, 0x0b, 0xcd, 0x44, 0xe6, 0xcb, 0x6c, 0x8a, + 0x22, 0x32, 0xe7, 0xca, 0x15, 0xac, 0xb3, 0x88, 0x7a, 0x85, 0x25, 0x47, 0x1b, 0x67, 0x58, 0x55, + 0x57, 0xde, 0xa4, 0x73, 0xc9, 0x80, 0x33, 0xa2, 0xfe, 0x9f, 0x00, 0x76, 0xe6, 0xc0, 0x3b, 0x98, + 0xe1, 0x7c, 0x71, 0x86, 0xb7, 0xb6, 0x9a, 0x61, 0xbd, 0xf8, 0x7f, 0x00, 0x84, 0xe5, 0x5b, 0x41, + 0x5d, 0x58, 0x1f, 0x53, 0x6e, 0x65, 0x9b, 0x44, 0x31, 0x15, 0x89, 0xff, 0x4a, 0x06, 0x70, 0x16, + 0x47, 0x47, 0x50, 0x21, 0x21, 0xfb, 0x94, 0x07, 0x71, 0x98, 0xb5, 0x57, 0xcc, 0x76, 0x32, 0xed, + 0x2a, 0x67, 0x57, 0xe7, 0x59, 0x10, 0x97, 0x79, 0x09, 0xe6, 0x54, 0x04, 0x31, 0xb7, 0xa9, 0x50, + 0xf7, 0x4a, 0x30, 0x2e, 0x82, 0xb8, 0xcc, 0xa3, 0x0f, 0x60, 0xbb, 0x38, 0x0c, 0x88, 0x47, 0x85, + 0x5a, 0x4b, 0x0b, 0x5e, 0x24, 0xd3, 0x6e, 0x1b, 0xcf, 0x27, 0xf0, 0x22, 0x0e, 0x7d, 0x04, 0x3b, + 0x7e, 0xe0, 0x17, 0x90, 0x2f, 0xf1, 0xa5, 0x50, 0xeb, 0x69, 0x69, 0xfa, 0x3e, 0x07, 0x8b, 0x29, + 0xbc, 0x8c, 0xed, 0xff, 0x01, 0x60, 0xed, 0xbf, 0xb6, 0xbd, 0xfa, 0x3f, 0x55, 0x61, 0xeb, 0xff, + 0x6d, 0x32, 0xdb, 0x26, 0xf2, 0x09, 0xee, 0x76, 0x8d, 0x6c, 0xfd, 0x04, 0x9f, 0xdf, 0x1f, 0xbf, + 0x03, 0xd8, 0xdc, 0xd1, 0xe2, 0x30, 0x17, 0x55, 0xbf, 0xf1, 0xb4, 0xea, 0xf5, 0x72, 0xbf, 0x87, + 0x85, 0xff, 0xe8, 0x6d, 0xd8, 0x2c, 0x1e, 0x7b, 0x2a, 0x56, 0x29, 0x9b, 0x17, 0xfb, 0x00, 0xcf, + 0x10, 0xa8, 0x07, 0x6b, 0x23, 0xe6, 0x0f, 0xd5, 0x6a, 0x8a, 0x7c, 0x29, 0x47, 0xd6, 0x2e, 0x98, + 0x3f, 0xc4, 0x69, 0x46, 0x22, 0x7c, 0xe2, 0x65, 0x3f, 0xc4, 0x73, 0x08, 0xf9, 0xcc, 0x71, 0x9a, + 0x91, 0x5e, 0x35, 0xf2, 0xcb, 0x34, 0xe3, 0x03, 0x1b, 0xf9, 0xe6, 0xf5, 0x55, 0xb7, 0xd1, 0xf7, + 0x74, 0x77, 0x64, 0x40, 0x45, 0xfe, 0x15, 0x21, 0xb1, 0xa9, 0x5a, 0x4b, 0x61, 0x2f, 0x72, 0x98, + 0x32, 0x28, 0x12, 0xb8, 0xc4, 0x98, 0xc7, 0x93, 0x47, 0xad, 0x72, 0xff, 0xa8, 0x55, 0x1e, 0x1e, + 0xb5, 0xca, 0x0f, 0x89, 0x06, 0x26, 0x89, 0x06, 0xee, 0x13, 0x0d, 0x3c, 0x24, 0x1a, 0xf8, 0x2b, + 0xd1, 0xc0, 0xcf, 0x7f, 0x6b, 0x95, 0xaf, 0x1b, 0xb9, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, + 0x37, 0x8f, 0x77, 0xcd, 0x15, 0x0b, 0x00, 0x00, +} + func (m *AggregationRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -135,29 +465,36 @@ } func (m *AggregationRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AggregationRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.ClusterRoleSelectors) > 0 { - for _, msg := range m.ClusterRoleSelectors { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.ClusterRoleSelectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClusterRoleSelectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *ClusterRole) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -165,47 +502,58 @@ } func (m *ClusterRole) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.AggregationRule != nil { + { + size, err := m.AggregationRule.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - } - if m.AggregationRule != nil { + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AggregationRule.Size())) - n2, err := m.AggregationRule.MarshalTo(dAtA[i:]) + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n2 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -213,45 +561,56 @@ } func (m *ClusterRoleBinding) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 + i-- + dAtA[i] = 0x1a if len(m.Subjects) > 0 { - for _, msg := range m.Subjects { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RoleRef.Size())) - n4, err := m.RoleRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -259,37 +618,46 @@ } func (m *ClusterRoleBindingList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ClusterRoleList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -297,37 +665,46 @@ } func (m *ClusterRoleList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PolicyRule) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -335,92 +712,67 @@ } func (m *PolicyRule) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Verbs) > 0 { - for _, s := range m.Verbs { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.NonResourceURLs) > 0 { + for iNdEx := len(m.NonResourceURLs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NonResourceURLs[iNdEx]) + copy(dAtA[i:], m.NonResourceURLs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLs[iNdEx]))) + i-- + dAtA[i] = 0x2a } } - if len(m.APIGroups) > 0 { - for _, s := range m.APIGroups { - dAtA[i] = 0x12 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0x22 } } if len(m.Resources) > 0 { - for _, s := range m.Resources { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if len(m.ResourceNames) > 0 { - for _, s := range m.ResourceNames { - dAtA[i] = 0x22 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0x12 } } - if len(m.NonResourceURLs) > 0 { - for _, s := range m.NonResourceURLs { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *Role) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -428,37 +780,46 @@ } func (m *Role) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Role) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 if len(m.Rules) > 0 { - for _, msg := range m.Rules { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleBinding) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -466,45 +827,56 @@ } func (m *RoleBinding) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n8, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n8 + i-- + dAtA[i] = 0x1a if len(m.Subjects) > 0 { - for _, msg := range m.Subjects { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RoleRef.Size())) - n9, err := m.RoleRef.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n9 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleBindingList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -512,37 +884,46 @@ } func (m *RoleBindingList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n10, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n10 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -550,37 +931,46 @@ } func (m *RoleList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n11, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n11 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *RoleRef) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -588,29 +978,37 @@ } func (m *RoleRef) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) - i += copy(dAtA[i:], m.APIGroup) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x1a - i++ + i -= len(m.Name) + copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + i -= len(m.APIGroup) + copy(dAtA[i:], m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Subject) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -618,57 +1016,53 @@ } func (m *Subject) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Subject) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) - i += copy(dAtA[i:], m.APIGroup) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x22 - i++ + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - return i, nil + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.APIGroup) + copy(dAtA[i:], m.APIGroup) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroup))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *AggregationRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.ClusterRoleSelectors) > 0 { @@ -681,6 +1075,9 @@ } func (m *ClusterRole) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -699,6 +1096,9 @@ } func (m *ClusterRoleBinding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -715,6 +1115,9 @@ } func (m *ClusterRoleBindingList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -729,6 +1132,9 @@ } func (m *ClusterRoleList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -743,6 +1149,9 @@ } func (m *PolicyRule) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Verbs) > 0 { @@ -779,6 +1188,9 @@ } func (m *Role) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -793,6 +1205,9 @@ } func (m *RoleBinding) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -809,6 +1224,9 @@ } func (m *RoleBindingList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -823,6 +1241,9 @@ } func (m *RoleList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -837,6 +1258,9 @@ } func (m *RoleRef) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.APIGroup) @@ -849,6 +1273,9 @@ } func (m *Subject) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -863,14 +1290,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -879,8 +1299,13 @@ if this == nil { return "nil" } + repeatedStringForClusterRoleSelectors := "[]LabelSelector{" + for _, f := range this.ClusterRoleSelectors { + repeatedStringForClusterRoleSelectors += fmt.Sprintf("%v", f) + "," + } + repeatedStringForClusterRoleSelectors += "}" s := strings.Join([]string{`&AggregationRule{`, - `ClusterRoleSelectors:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ClusterRoleSelectors), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1), `&`, ``, 1) + `,`, + `ClusterRoleSelectors:` + repeatedStringForClusterRoleSelectors + `,`, `}`, }, "") return s @@ -889,10 +1314,15 @@ if this == nil { return "nil" } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&ClusterRole{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, - `AggregationRule:` + strings.Replace(fmt.Sprintf("%v", this.AggregationRule), "AggregationRule", "AggregationRule", 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `AggregationRule:` + strings.Replace(this.AggregationRule.String(), "AggregationRule", "AggregationRule", 1) + `,`, `}`, }, "") return s @@ -901,9 +1331,14 @@ if this == nil { return "nil" } + repeatedStringForSubjects := "[]Subject{" + for _, f := range this.Subjects { + repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," + } + repeatedStringForSubjects += "}" s := strings.Join([]string{`&ClusterRoleBinding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "RoleRef", "RoleRef", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -913,9 +1348,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ClusterRoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ClusterRoleBindingList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -924,9 +1364,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]ClusterRole{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&ClusterRoleList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -949,9 +1394,14 @@ if this == nil { return "nil" } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" s := strings.Join([]string{`&Role{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, `}`, }, "") return s @@ -960,9 +1410,14 @@ if this == nil { return "nil" } + repeatedStringForSubjects := "[]Subject{" + for _, f := range this.Subjects { + repeatedStringForSubjects += strings.Replace(strings.Replace(f.String(), "Subject", "Subject", 1), `&`, ``, 1) + "," + } + repeatedStringForSubjects += "}" s := strings.Join([]string{`&RoleBinding{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "RoleRef", "RoleRef", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -972,9 +1427,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]RoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&RoleBindingList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -983,9 +1443,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]Role{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Role", "Role", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&RoleList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Role", "Role", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -1038,7 +1503,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1066,7 +1531,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1075,10 +1540,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ClusterRoleSelectors = append(m.ClusterRoleSelectors, k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{}) + m.ClusterRoleSelectors = append(m.ClusterRoleSelectors, v1.LabelSelector{}) if err := m.ClusterRoleSelectors[len(m.ClusterRoleSelectors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1092,6 +1560,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1119,7 +1590,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1147,7 +1618,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1156,6 +1627,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1177,7 +1651,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1186,6 +1660,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1208,7 +1685,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1217,6 +1694,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1236,6 +1716,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1263,7 +1746,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1291,7 +1774,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1300,6 +1783,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1321,7 +1807,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1330,6 +1816,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1352,7 +1841,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1361,6 +1850,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1377,6 +1869,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1404,7 +1899,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1432,7 +1927,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1441,6 +1936,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1462,7 +1960,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1471,6 +1969,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1488,6 +1989,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1515,7 +2019,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1543,7 +2047,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1552,6 +2056,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1573,7 +2080,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1582,6 +2089,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1599,6 +2109,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1626,7 +2139,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1654,7 +2167,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1664,6 +2177,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1683,7 +2199,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1693,6 +2209,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1712,7 +2231,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1722,6 +2241,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1741,7 +2263,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1751,6 +2273,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1770,7 +2295,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1780,6 +2305,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1794,6 +2322,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1821,7 +2352,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1849,7 +2380,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1858,6 +2389,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1879,7 +2413,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1888,6 +2422,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1905,6 +2442,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1932,7 +2472,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1960,7 +2500,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1969,6 +2509,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1990,7 +2533,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1999,6 +2542,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2021,7 +2567,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2030,6 +2576,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2046,6 +2595,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2073,7 +2625,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2101,7 +2653,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2110,6 +2662,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2131,7 +2686,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2140,6 +2695,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2157,6 +2715,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2184,7 +2745,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2212,7 +2773,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2221,6 +2782,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2242,7 +2806,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2251,6 +2815,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2268,6 +2835,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2295,7 +2865,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2323,7 +2893,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2333,6 +2903,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2352,7 +2925,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2362,6 +2935,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2381,7 +2957,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2391,6 +2967,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2405,6 +2984,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2432,7 +3014,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2460,7 +3042,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2470,6 +3052,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2489,7 +3074,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2499,6 +3084,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2518,7 +3106,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2528,6 +3116,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2547,7 +3138,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2557,6 +3148,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2571,6 +3165,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2637,10 +3234,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -2669,6 +3269,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -2687,62 +3290,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/rbac/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 808 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xbd, 0x6f, 0xfb, 0x44, - 0x18, 0xce, 0xa5, 0x89, 0x12, 0x5f, 0x88, 0xc2, 0xef, 0xa8, 0xc0, 0xaa, 0xc0, 0x89, 0x02, 0x43, - 0xa5, 0x52, 0x9b, 0x16, 0x04, 0x2c, 0x48, 0xd4, 0x0c, 0x50, 0xb5, 0x84, 0xea, 0x2a, 0x18, 0x10, - 0x03, 0x67, 0xe7, 0xea, 0x1e, 0xf1, 0x97, 0xee, 0xec, 0x48, 0x15, 0x0b, 0x0b, 0x1b, 0x03, 0x12, - 0x13, 0x2b, 0x33, 0x13, 0x23, 0x7f, 0x41, 0xc6, 0x8e, 0x9d, 0x22, 0x6a, 0xfe, 0x10, 0xd0, 0xf9, - 0x23, 0xce, 0x67, 0x9b, 0x29, 0x12, 0x12, 0x53, 0x7b, 0xef, 0xfb, 0xbc, 0xcf, 0xfb, 0xbc, 0x8f, - 0xef, 0xde, 0xc0, 0x8f, 0x47, 0x1f, 0x0a, 0x9d, 0x05, 0xc6, 0x28, 0xb6, 0x28, 0xf7, 0x69, 0x44, - 0x85, 0x31, 0xa6, 0xfe, 0x30, 0xe0, 0x46, 0x9e, 0x20, 0x21, 0x33, 0xb8, 0x45, 0x6c, 0x63, 0x7c, - 0x62, 0xd1, 0x88, 0x9c, 0x18, 0x0e, 0xf5, 0x29, 0x27, 0x11, 0x1d, 0xea, 0x21, 0x0f, 0xa2, 0x00, - 0xbd, 0x96, 0x01, 0x75, 0x12, 0x32, 0x5d, 0x02, 0xf5, 0x1c, 0x78, 0x70, 0xec, 0xb0, 0xe8, 0x36, - 0xb6, 0x74, 0x3b, 0xf0, 0x0c, 0x27, 0x70, 0x02, 0x23, 0xc5, 0x5b, 0xf1, 0x4d, 0x7a, 0x4a, 0x0f, - 0xe9, 0x7f, 0x19, 0xcf, 0xc1, 0x7b, 0x65, 0x43, 0x8f, 0xd8, 0xb7, 0xcc, 0xa7, 0xfc, 0xce, 0x08, - 0x47, 0x8e, 0x0c, 0x08, 0xc3, 0xa3, 0x11, 0x31, 0xc6, 0x2b, 0xdd, 0x0f, 0x8c, 0x4d, 0x55, 0x3c, - 0xf6, 0x23, 0xe6, 0xd1, 0x95, 0x82, 0xf7, 0x9f, 0x2b, 0x10, 0xf6, 0x2d, 0xf5, 0xc8, 0x72, 0x5d, - 0xff, 0x57, 0x00, 0x3b, 0x67, 0x8e, 0xc3, 0xa9, 0x43, 0x22, 0x16, 0xf8, 0x38, 0x76, 0x29, 0xfa, - 0x11, 0xc0, 0x7d, 0xdb, 0x8d, 0x45, 0x44, 0x39, 0x0e, 0x5c, 0x7a, 0x4d, 0x5d, 0x6a, 0x47, 0x01, - 0x17, 0x2a, 0xe8, 0xed, 0x1d, 0xb6, 0x4e, 0xdf, 0xd5, 0x4b, 0x6b, 0x66, 0xbd, 0xf4, 0x70, 0xe4, - 0xc8, 0x80, 0xd0, 0xe5, 0x48, 0xfa, 0xf8, 0x44, 0xbf, 0x24, 0x16, 0x75, 0x8b, 0x5a, 0xf3, 0xf5, - 0xc9, 0xb4, 0x5b, 0x49, 0xa6, 0xdd, 0xfd, 0x4f, 0xd6, 0x10, 0xe3, 0xb5, 0xed, 0xfa, 0xbf, 0x55, - 0x61, 0x6b, 0x0e, 0x8e, 0xbe, 0x85, 0x4d, 0x49, 0x3e, 0x24, 0x11, 0x51, 0x41, 0x0f, 0x1c, 0xb6, - 0x4e, 0xdf, 0xd9, 0x4e, 0xca, 0x17, 0xd6, 0x77, 0xd4, 0x8e, 0x3e, 0xa7, 0x11, 0x31, 0x51, 0xae, - 0x03, 0x96, 0x31, 0x3c, 0x63, 0x45, 0x9f, 0xc1, 0x3a, 0x8f, 0x5d, 0x2a, 0xd4, 0x6a, 0x3a, 0xe9, - 0x9b, 0xfa, 0x86, 0x4b, 0xa0, 0x5f, 0x05, 0x2e, 0xb3, 0xef, 0xa4, 0x5b, 0x66, 0x3b, 0x67, 0xac, - 0xcb, 0x93, 0xc0, 0x19, 0x01, 0x72, 0x60, 0x87, 0x2c, 0xda, 0xaa, 0xee, 0xa5, 0x92, 0x0f, 0x37, - 0x72, 0x2e, 0x7d, 0x06, 0xf3, 0x95, 0x64, 0xda, 0x5d, 0xfe, 0x36, 0x78, 0x99, 0xb5, 0xff, 0x4b, - 0x15, 0xa2, 0x39, 0x93, 0x4c, 0xe6, 0x0f, 0x99, 0xef, 0xec, 0xc0, 0xab, 0x01, 0x6c, 0x8a, 0x38, - 0x4d, 0x14, 0x76, 0xf5, 0x36, 0x8e, 0x76, 0x9d, 0x01, 0xcd, 0x97, 0x73, 0xc6, 0x66, 0x1e, 0x10, - 0x78, 0xc6, 0x81, 0x2e, 0x60, 0x83, 0x07, 0x2e, 0xc5, 0xf4, 0x26, 0x77, 0x6a, 0x33, 0x1d, 0xce, - 0x70, 0x66, 0x27, 0xa7, 0x6b, 0xe4, 0x01, 0x5c, 0x30, 0xf4, 0x27, 0x00, 0xbe, 0xba, 0xea, 0xca, - 0x25, 0x13, 0x11, 0xfa, 0x66, 0xc5, 0x19, 0x7d, 0xcb, 0x0b, 0xcd, 0x44, 0xe6, 0xcb, 0x6c, 0x8a, - 0x22, 0x32, 0xe7, 0xca, 0x15, 0xac, 0xb3, 0x88, 0x7a, 0x85, 0x25, 0x47, 0x1b, 0x67, 0x58, 0x55, - 0x57, 0xde, 0xa4, 0x73, 0xc9, 0x80, 0x33, 0xa2, 0xfe, 0x9f, 0x00, 0x76, 0xe6, 0xc0, 0x3b, 0x98, - 0xe1, 0x7c, 0x71, 0x86, 0xb7, 0xb6, 0x9a, 0x61, 0xbd, 0xf8, 0x7f, 0x00, 0x84, 0xe5, 0x5b, 0x41, - 0x5d, 0x58, 0x1f, 0x53, 0x6e, 0x65, 0x9b, 0x44, 0x31, 0x15, 0x89, 0xff, 0x4a, 0x06, 0x70, 0x16, - 0x47, 0x47, 0x50, 0x21, 0x21, 0xfb, 0x94, 0x07, 0x71, 0x98, 0xb5, 0x57, 0xcc, 0x76, 0x32, 0xed, - 0x2a, 0x67, 0x57, 0xe7, 0x59, 0x10, 0x97, 0x79, 0x09, 0xe6, 0x54, 0x04, 0x31, 0xb7, 0xa9, 0x50, - 0xf7, 0x4a, 0x30, 0x2e, 0x82, 0xb8, 0xcc, 0xa3, 0x0f, 0x60, 0xbb, 0x38, 0x0c, 0x88, 0x47, 0x85, - 0x5a, 0x4b, 0x0b, 0x5e, 0x24, 0xd3, 0x6e, 0x1b, 0xcf, 0x27, 0xf0, 0x22, 0x0e, 0x7d, 0x04, 0x3b, - 0x7e, 0xe0, 0x17, 0x90, 0x2f, 0xf1, 0xa5, 0x50, 0xeb, 0x69, 0x69, 0xfa, 0x3e, 0x07, 0x8b, 0x29, - 0xbc, 0x8c, 0xed, 0xff, 0x01, 0x60, 0xed, 0xbf, 0xb6, 0xbd, 0xfa, 0x3f, 0x55, 0x61, 0xeb, 0xff, - 0x6d, 0x32, 0xdb, 0x26, 0xf2, 0x09, 0xee, 0x76, 0x8d, 0x6c, 0xfd, 0x04, 0x9f, 0xdf, 0x1f, 0xbf, - 0x03, 0xd8, 0xdc, 0xd1, 0xe2, 0x30, 0x17, 0x55, 0xbf, 0xf1, 0xb4, 0xea, 0xf5, 0x72, 0xbf, 0x87, - 0x85, 0xff, 0xe8, 0x6d, 0xd8, 0x2c, 0x1e, 0x7b, 0x2a, 0x56, 0x29, 0x9b, 0x17, 0xfb, 0x00, 0xcf, - 0x10, 0xa8, 0x07, 0x6b, 0x23, 0xe6, 0x0f, 0xd5, 0x6a, 0x8a, 0x7c, 0x29, 0x47, 0xd6, 0x2e, 0x98, - 0x3f, 0xc4, 0x69, 0x46, 0x22, 0x7c, 0xe2, 0x65, 0x3f, 0xc4, 0x73, 0x08, 0xf9, 0xcc, 0x71, 0x9a, - 0x91, 0x5e, 0x35, 0xf2, 0xcb, 0x34, 0xe3, 0x03, 0x1b, 0xf9, 0xe6, 0xf5, 0x55, 0xb7, 0xd1, 0xf7, - 0x74, 0x77, 0x64, 0x40, 0x45, 0xfe, 0x15, 0x21, 0xb1, 0xa9, 0x5a, 0x4b, 0x61, 0x2f, 0x72, 0x98, - 0x32, 0x28, 0x12, 0xb8, 0xc4, 0x98, 0xc7, 0x93, 0x47, 0xad, 0x72, 0xff, 0xa8, 0x55, 0x1e, 0x1e, - 0xb5, 0xca, 0x0f, 0x89, 0x06, 0x26, 0x89, 0x06, 0xee, 0x13, 0x0d, 0x3c, 0x24, 0x1a, 0xf8, 0x2b, - 0xd1, 0xc0, 0xcf, 0x7f, 0x6b, 0x95, 0xaf, 0x1b, 0xb9, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, - 0x37, 0x8f, 0x77, 0xcd, 0x15, 0x0b, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -43,6 +43,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this ClusterRole + // +optional repeated PolicyRule rules = 2; // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. @@ -122,6 +123,7 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; // Rules holds all the PolicyRules for this Role + // +optional repeated PolicyRule rules = 2; } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -109,6 +109,7 @@ metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this Role + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` } @@ -171,6 +172,7 @@ metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Rules holds all the PolicyRules for this ClusterRole + // +optional Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. // If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,7 +28,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_AggregationRule = map[string]string{ - "": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", + "": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", "clusterRoleSelectors": "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/rbac/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -62,12 +62,8 @@ } if in.AggregationRule != nil { in, out := &in.AggregationRule, &out.AggregationRule - if *in == nil { - *out = nil - } else { - *out = new(AggregationRule) - (*in).DeepCopyInto(*out) - } + *out = new(AggregationRule) + (*in).DeepCopyInto(*out) } return } @@ -126,7 +122,7 @@ func (in *ClusterRoleBindingList) DeepCopyInto(out *ClusterRoleBindingList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ClusterRoleBinding, len(*in)) @@ -159,7 +155,7 @@ func (in *ClusterRoleList) DeepCopyInto(out *ClusterRoleList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]ClusterRole, len(*in)) @@ -298,7 +294,7 @@ func (in *RoleBindingList) DeepCopyInto(out *RoleBindingList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]RoleBinding, len(*in)) @@ -331,7 +327,7 @@ func (in *RoleList) DeepCopyInto(out *RoleList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]Role, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package +// +k8s:openapi-gen=true + +// +groupName=scheduling.k8s.io + +package v1 // import "k8s.io/api/scheduling/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,761 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + k8s_io_api_core_v1 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *PriorityClass) Reset() { *m = PriorityClass{} } +func (*PriorityClass) ProtoMessage() {} +func (*PriorityClass) Descriptor() ([]byte, []int) { + return fileDescriptor_277b2f43b72fffd5, []int{0} +} +func (m *PriorityClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PriorityClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PriorityClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_PriorityClass.Merge(m, src) +} +func (m *PriorityClass) XXX_Size() int { + return m.Size() +} +func (m *PriorityClass) XXX_DiscardUnknown() { + xxx_messageInfo_PriorityClass.DiscardUnknown(m) +} + +var xxx_messageInfo_PriorityClass proto.InternalMessageInfo + +func (m *PriorityClassList) Reset() { *m = PriorityClassList{} } +func (*PriorityClassList) ProtoMessage() {} +func (*PriorityClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_277b2f43b72fffd5, []int{1} +} +func (m *PriorityClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PriorityClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PriorityClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PriorityClassList.Merge(m, src) +} +func (m *PriorityClassList) XXX_Size() int { + return m.Size() +} +func (m *PriorityClassList) XXX_DiscardUnknown() { + xxx_messageInfo_PriorityClassList.DiscardUnknown(m) +} + +var xxx_messageInfo_PriorityClassList proto.InternalMessageInfo + +func init() { + proto.RegisterType((*PriorityClass)(nil), "k8s.io.api.scheduling.v1.PriorityClass") + proto.RegisterType((*PriorityClassList)(nil), "k8s.io.api.scheduling.v1.PriorityClassList") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1/generated.proto", fileDescriptor_277b2f43b72fffd5) +} + +var fileDescriptor_277b2f43b72fffd5 = []byte{ + // 488 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x3f, 0x8f, 0xd3, 0x30, + 0x18, 0xc6, 0xeb, 0x1e, 0x95, 0x0e, 0x57, 0x95, 0x4a, 0x10, 0x52, 0xd4, 0x21, 0xad, 0x7a, 0x03, + 0x59, 0xb0, 0xe9, 0x09, 0x10, 0xd2, 0x4d, 0x84, 0x93, 0x10, 0xd2, 0x21, 0xaa, 0x0c, 0x0c, 0x88, + 0x01, 0x27, 0x79, 0x2f, 0x35, 0x4d, 0xe2, 0xc8, 0x76, 0x22, 0x75, 0xe3, 0x23, 0xf0, 0x8d, 0x58, + 0x3b, 0xde, 0x78, 0x53, 0x45, 0xc3, 0x47, 0x60, 0x63, 0x42, 0x49, 0xc3, 0xa5, 0x7f, 0xee, 0x04, + 0x5b, 0xfc, 0x3e, 0xcf, 0xef, 0xb1, 0xfd, 0x24, 0xc1, 0xaf, 0xe6, 0x2f, 0x15, 0xe1, 0x82, 0xce, + 0x33, 0x0f, 0x64, 0x02, 0x1a, 0x14, 0xcd, 0x21, 0x09, 0x84, 0xa4, 0xb5, 0xc0, 0x52, 0x4e, 0x95, + 0x3f, 0x83, 0x20, 0x8b, 0x78, 0x12, 0xd2, 0x7c, 0x42, 0x43, 0x48, 0x40, 0x32, 0x0d, 0x01, 0x49, + 0xa5, 0xd0, 0xc2, 0x30, 0x37, 0x4e, 0xc2, 0x52, 0x4e, 0x1a, 0x27, 0xc9, 0x27, 0x83, 0x27, 0x21, + 0xd7, 0xb3, 0xcc, 0x23, 0xbe, 0x88, 0x69, 0x28, 0x42, 0x41, 0x2b, 0xc0, 0xcb, 0x2e, 0xab, 0x55, + 0xb5, 0xa8, 0x9e, 0x36, 0x41, 0x83, 0xf1, 0xd6, 0x96, 0xbe, 0x90, 0x70, 0xcb, 0x66, 0x83, 0x67, + 0x8d, 0x27, 0x66, 0xfe, 0x8c, 0x27, 0x20, 0x17, 0x34, 0x9d, 0x87, 0xe5, 0x40, 0xd1, 0x18, 0x34, + 0xbb, 0x8d, 0xa2, 0x77, 0x51, 0x32, 0x4b, 0x34, 0x8f, 0xe1, 0x00, 0x78, 0xf1, 0x2f, 0xa0, 0xbc, + 0x68, 0xcc, 0xf6, 0xb9, 0xf1, 0xaf, 0x36, 0xee, 0x4d, 0x25, 0x17, 0x92, 0xeb, 0xc5, 0xeb, 0x88, + 0x29, 0x65, 0x7c, 0xc6, 0xc7, 0xe5, 0xa9, 0x02, 0xa6, 0x99, 0x89, 0x46, 0xc8, 0xee, 0x9e, 0x3e, + 0x25, 0x4d, 0x61, 0x37, 0xe1, 0x24, 0x9d, 0x87, 0xe5, 0x40, 0x91, 0xd2, 0x4d, 0xf2, 0x09, 0x79, + 0xef, 0x7d, 0x01, 0x5f, 0xbf, 0x03, 0xcd, 0x1c, 0x63, 0xb9, 0x1a, 0xb6, 0x8a, 0xd5, 0x10, 0x37, + 0x33, 0xf7, 0x26, 0xd5, 0x38, 0xc1, 0x9d, 0x9c, 0x45, 0x19, 0x98, 0xed, 0x11, 0xb2, 0x3b, 0x4e, + 0xaf, 0x36, 0x77, 0x3e, 0x94, 0x43, 0x77, 0xa3, 0x19, 0x67, 0xb8, 0x17, 0x46, 0xc2, 0x63, 0xd1, + 0x39, 0x5c, 0xb2, 0x2c, 0xd2, 0xe6, 0xd1, 0x08, 0xd9, 0xc7, 0xce, 0xa3, 0xda, 0xdc, 0x7b, 0xb3, + 0x2d, 0xba, 0xbb, 0x5e, 0xe3, 0x39, 0xee, 0x06, 0xa0, 0x7c, 0xc9, 0x53, 0xcd, 0x45, 0x62, 0xde, + 0x1b, 0x21, 0xfb, 0xbe, 0xf3, 0xb0, 0x46, 0xbb, 0xe7, 0x8d, 0xe4, 0x6e, 0xfb, 0x8c, 0x10, 0xf7, + 0x53, 0x09, 0x10, 0x57, 0xab, 0xa9, 0x88, 0xb8, 0xbf, 0x30, 0x3b, 0x15, 0x7b, 0x56, 0xac, 0x86, + 0xfd, 0xe9, 0x9e, 0xf6, 0x7b, 0x35, 0x3c, 0x39, 0xfc, 0x02, 0xc8, 0xbe, 0xcd, 0x3d, 0x08, 0x1d, + 0x7f, 0x47, 0xf8, 0xc1, 0x4e, 0xeb, 0x17, 0x5c, 0x69, 0xe3, 0xd3, 0x41, 0xf3, 0xe4, 0xff, 0x9a, + 0x2f, 0xe9, 0xaa, 0xf7, 0x7e, 0x7d, 0xc5, 0xe3, 0xbf, 0x93, 0xad, 0xd6, 0x2f, 0x70, 0x87, 0x6b, + 0x88, 0x95, 0xd9, 0x1e, 0x1d, 0xd9, 0xdd, 0xd3, 0xc7, 0xe4, 0xae, 0xbf, 0x80, 0xec, 0x9c, 0xac, + 0x79, 0x3d, 0x6f, 0x4b, 0xda, 0xdd, 0x84, 0x38, 0xf6, 0x72, 0x6d, 0xb5, 0xae, 0xd6, 0x56, 0xeb, + 0x7a, 0x6d, 0xb5, 0xbe, 0x16, 0x16, 0x5a, 0x16, 0x16, 0xba, 0x2a, 0x2c, 0x74, 0x5d, 0x58, 0xe8, + 0x47, 0x61, 0xa1, 0x6f, 0x3f, 0xad, 0xd6, 0xc7, 0x76, 0x3e, 0xf9, 0x13, 0x00, 0x00, 0xff, 0xff, + 0x53, 0xd9, 0x28, 0x30, 0xb1, 0x03, 0x00, 0x00, +} + +func (m *PriorityClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PriorityClass) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PriorityClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PreemptionPolicy != nil { + i -= len(*m.PreemptionPolicy) + copy(dAtA[i:], *m.PreemptionPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PreemptionPolicy))) + i-- + dAtA[i] = 0x2a + } + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x22 + i-- + if m.GlobalDefault { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Value)) + i-- + dAtA[i] = 0x10 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PriorityClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PriorityClassList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PriorityClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *PriorityClass) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Value)) + n += 2 + l = len(m.Description) + n += 1 + l + sovGenerated(uint64(l)) + if m.PreemptionPolicy != nil { + l = len(*m.PreemptionPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PriorityClassList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *PriorityClass) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PriorityClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `GlobalDefault:` + fmt.Sprintf("%v", this.GlobalDefault) + `,`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `PreemptionPolicy:` + valueToStringGenerated(this.PreemptionPolicy) + `,`, + `}`, + }, "") + return s +} +func (this *PriorityClassList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PriorityClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PriorityClass", "PriorityClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PriorityClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *PriorityClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PriorityClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PriorityClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + m.Value = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Value |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GlobalDefault", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.GlobalDefault = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreemptionPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := k8s_io_api_core_v1.PreemptionPolicy(dAtA[iNdEx:postIndex]) + m.PreemptionPolicy = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PriorityClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PriorityClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PriorityClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, PriorityClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.proto 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,75 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.scheduling.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// PriorityClass defines mapping from a priority class name to the priority +// integer value. The value can be any valid integer. +message PriorityClass { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // The value of this priority class. This is the actual priority that pods + // receive when they have the name of this class in their pod spec. + optional int32 value = 2; + + // globalDefault specifies whether this PriorityClass should be considered as + // the default priority for pods that do not have any priority class. + // Only one PriorityClass can be marked as `globalDefault`. However, if more than + // one PriorityClasses exists with their `globalDefault` field set to true, + // the smallest value of such global default PriorityClasses will be used as the default priority. + // +optional + optional bool globalDefault = 3; + + // description is an arbitrary string that usually provides guidelines on + // when this priority class should be used. + // +optional + optional string description = 4; + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + optional string preemptionPolicy = 5; +} + +// PriorityClassList is a collection of priority classes. +message PriorityClassList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of PriorityClasses + repeated PriorityClass items = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/register.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,55 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "scheduling.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + + // SchemeBuilder is a collection of functions that add things to a scheme. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + // AddToScheme applies all the stored functions to the scheme. + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to the given scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &PriorityClass{}, + &PriorityClassList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/types.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,74 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PriorityClass defines mapping from a priority class name to the priority +// integer value. The value can be any valid integer. +type PriorityClass struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The value of this priority class. This is the actual priority that pods + // receive when they have the name of this class in their pod spec. + Value int32 `json:"value" protobuf:"bytes,2,opt,name=value"` + + // globalDefault specifies whether this PriorityClass should be considered as + // the default priority for pods that do not have any priority class. + // Only one PriorityClass can be marked as `globalDefault`. However, if more than + // one PriorityClasses exists with their `globalDefault` field set to true, + // the smallest value of such global default PriorityClasses will be used as the default priority. + // +optional + GlobalDefault bool `json:"globalDefault,omitempty" protobuf:"bytes,3,opt,name=globalDefault"` + + // description is an arbitrary string that usually provides guidelines on + // when this priority class should be used. + // +optional + Description string `json:"description,omitempty" protobuf:"bytes,4,opt,name=description"` + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + PreemptionPolicy *apiv1.PreemptionPolicy `json:"preemptionPolicy,omitempty" protobuf:"bytes,5,opt,name=preemptionPolicy"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PriorityClassList is a collection of priority classes. +type PriorityClassList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of PriorityClasses + Items []PriorityClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,53 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_PriorityClass = map[string]string{ + "": "PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "value": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + "globalDefault": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + "preemptionPolicy": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.", +} + +func (PriorityClass) SwaggerDoc() map[string]string { + return map_PriorityClass +} + +var map_PriorityClassList = map[string]string{ + "": "PriorityClassList is a collection of priority classes.", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "items is the list of PriorityClasses", +} + +func (PriorityClassList) SwaggerDoc() map[string]string { + return map_PriorityClassList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,90 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PriorityClass) DeepCopyInto(out *PriorityClass) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.PreemptionPolicy != nil { + in, out := &in.PreemptionPolicy, &out.PreemptionPolicy + *out = new(corev1.PreemptionPolicy) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityClass. +func (in *PriorityClass) DeepCopy() *PriorityClass { + if in == nil { + return nil + } + out := new(PriorityClass) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PriorityClass) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PriorityClassList) DeepCopyInto(out *PriorityClassList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PriorityClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PriorityClassList. +func (in *PriorityClassList) DeepCopy() *PriorityClassList { + if in == nil { + return nil + } + out := new(PriorityClassList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PriorityClassList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=scheduling.k8s.io + package v1alpha1 // import "k8s.io/api/scheduling/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,30 +14,25 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto -// DO NOT EDIT! -/* - Package v1alpha1 is a generated protocol buffer package. +package v1alpha1 - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto +import ( + fmt "fmt" - It has these top-level messages: - PriorityClass - PriorityClassList -*/ -package v1alpha1 + io "io" -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" + proto "github.com/gogo/protobuf/proto" -import strings "strings" -import reflect "reflect" + k8s_io_api_core_v1 "k8s.io/api/core/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -50,22 +45,110 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *PriorityClass) Reset() { *m = PriorityClass{} } -func (*PriorityClass) ProtoMessage() {} -func (*PriorityClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *PriorityClassList) Reset() { *m = PriorityClassList{} } -func (*PriorityClassList) ProtoMessage() {} -func (*PriorityClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (m *PriorityClass) Reset() { *m = PriorityClass{} } +func (*PriorityClass) ProtoMessage() {} +func (*PriorityClass) Descriptor() ([]byte, []int) { + return fileDescriptor_f033641dd0b95dce, []int{0} +} +func (m *PriorityClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PriorityClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PriorityClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_PriorityClass.Merge(m, src) +} +func (m *PriorityClass) XXX_Size() int { + return m.Size() +} +func (m *PriorityClass) XXX_DiscardUnknown() { + xxx_messageInfo_PriorityClass.DiscardUnknown(m) +} + +var xxx_messageInfo_PriorityClass proto.InternalMessageInfo + +func (m *PriorityClassList) Reset() { *m = PriorityClassList{} } +func (*PriorityClassList) ProtoMessage() {} +func (*PriorityClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_f033641dd0b95dce, []int{1} +} +func (m *PriorityClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PriorityClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PriorityClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PriorityClassList.Merge(m, src) +} +func (m *PriorityClassList) XXX_Size() int { + return m.Size() +} +func (m *PriorityClassList) XXX_DiscardUnknown() { + xxx_messageInfo_PriorityClassList.DiscardUnknown(m) +} + +var xxx_messageInfo_PriorityClassList proto.InternalMessageInfo func init() { proto.RegisterType((*PriorityClass)(nil), "k8s.io.api.scheduling.v1alpha1.PriorityClass") proto.RegisterType((*PriorityClassList)(nil), "k8s.io.api.scheduling.v1alpha1.PriorityClassList") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto", fileDescriptor_f033641dd0b95dce) +} + +var fileDescriptor_f033641dd0b95dce = []byte{ + // 494 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x3b, 0x5d, 0x0b, 0x75, 0x4a, 0xa1, 0x46, 0x84, 0xd0, 0xc3, 0xb4, 0x74, 0x2f, 0xbd, + 0xec, 0x8c, 0x5d, 0x54, 0x84, 0xbd, 0xd5, 0x85, 0x45, 0x50, 0x2c, 0x39, 0x78, 0x10, 0x0f, 0x4e, + 0xd3, 0x77, 0xd3, 0xb1, 0x49, 0x26, 0xcc, 0x4c, 0x02, 0xbd, 0xf9, 0x11, 0xfc, 0x52, 0x42, 0x8f, + 0x7b, 0xdc, 0x53, 0xb1, 0xf1, 0x23, 0x78, 0xf3, 0x24, 0x49, 0xd3, 0x4d, 0xdb, 0xf8, 0x67, 0x6f, + 0x99, 0xf7, 0xf9, 0x3d, 0xcf, 0xcc, 0x3c, 0x49, 0xf0, 0xd5, 0xe2, 0xa5, 0xa6, 0x42, 0xb2, 0x45, + 0x3c, 0x05, 0x15, 0x82, 0x01, 0xcd, 0x12, 0x08, 0x67, 0x52, 0xb1, 0x42, 0xe0, 0x91, 0x60, 0xda, + 0x9d, 0xc3, 0x2c, 0xf6, 0x45, 0xe8, 0xb1, 0x64, 0xc4, 0xfd, 0x68, 0xce, 0x47, 0xcc, 0x83, 0x10, + 0x14, 0x37, 0x30, 0xa3, 0x91, 0x92, 0x46, 0x5a, 0x64, 0xcb, 0x53, 0x1e, 0x09, 0x5a, 0xf2, 0x74, + 0xc7, 0x77, 0xcf, 0x3c, 0x61, 0xe6, 0xf1, 0x94, 0xba, 0x32, 0x60, 0x9e, 0xf4, 0x24, 0xcb, 0x6d, + 0xd3, 0xf8, 0x3a, 0x5f, 0xe5, 0x8b, 0xfc, 0x69, 0x1b, 0xd7, 0x1d, 0xec, 0x6d, 0xef, 0x4a, 0x05, + 0x2c, 0xa9, 0x6c, 0xd9, 0x7d, 0x56, 0x32, 0x01, 0x77, 0xe7, 0x22, 0x04, 0xb5, 0x64, 0xd1, 0xc2, + 0xcb, 0x06, 0x9a, 0x05, 0x60, 0xf8, 0x9f, 0x5c, 0xec, 0x6f, 0x2e, 0x15, 0x87, 0x46, 0x04, 0x50, + 0x31, 0xbc, 0xf8, 0x9f, 0x21, 0xbb, 0x6e, 0xc0, 0x8f, 0x7d, 0x83, 0x9f, 0x75, 0xdc, 0x9e, 0x28, + 0x21, 0x95, 0x30, 0xcb, 0x57, 0x3e, 0xd7, 0xda, 0xfa, 0x84, 0x9b, 0xd9, 0xa9, 0x66, 0xdc, 0x70, + 0x1b, 0xf5, 0xd1, 0xb0, 0x75, 0xfe, 0x94, 0x96, 0xb5, 0xdd, 0x85, 0xd3, 0x68, 0xe1, 0x65, 0x03, + 0x4d, 0x33, 0x9a, 0x26, 0x23, 0xfa, 0x6e, 0xfa, 0x19, 0x5c, 0xf3, 0x16, 0x0c, 0x1f, 0x5b, 0xab, + 0x75, 0xaf, 0x96, 0xae, 0x7b, 0xb8, 0x9c, 0x39, 0x77, 0xa9, 0xd6, 0x29, 0x6e, 0x24, 0xdc, 0x8f, + 0xc1, 0xae, 0xf7, 0xd1, 0xb0, 0x31, 0x6e, 0x17, 0x70, 0xe3, 0x7d, 0x36, 0x74, 0xb6, 0x9a, 0x75, + 0x81, 0xdb, 0x9e, 0x2f, 0xa7, 0xdc, 0xbf, 0x84, 0x6b, 0x1e, 0xfb, 0xc6, 0x3e, 0xe9, 0xa3, 0x61, + 0x73, 0xfc, 0xa4, 0x80, 0xdb, 0x57, 0xfb, 0xa2, 0x73, 0xc8, 0x5a, 0xcf, 0x71, 0x6b, 0x06, 0xda, + 0x55, 0x22, 0x32, 0x42, 0x86, 0xf6, 0x83, 0x3e, 0x1a, 0x3e, 0x1c, 0x3f, 0x2e, 0xac, 0xad, 0xcb, + 0x52, 0x72, 0xf6, 0x39, 0xcb, 0xc3, 0x9d, 0x48, 0x01, 0x04, 0xf9, 0x6a, 0x22, 0x7d, 0xe1, 0x2e, + 0xed, 0x46, 0xee, 0xbd, 0x48, 0xd7, 0xbd, 0xce, 0xe4, 0x48, 0xfb, 0xb5, 0xee, 0x9d, 0x56, 0xbf, + 0x00, 0x7a, 0x8c, 0x39, 0x95, 0xd0, 0xc1, 0x37, 0x84, 0x1f, 0x1d, 0xb4, 0xfe, 0x46, 0x68, 0x63, + 0x7d, 0xac, 0x34, 0x4f, 0xef, 0xd7, 0x7c, 0xe6, 0xce, 0x7b, 0xef, 0x14, 0x57, 0x6c, 0xee, 0x26, + 0x7b, 0xad, 0x3b, 0xb8, 0x21, 0x0c, 0x04, 0xda, 0xae, 0xf7, 0x4f, 0x86, 0xad, 0xf3, 0x33, 0xfa, + 0xef, 0x7f, 0x81, 0x1e, 0x9c, 0xaf, 0x7c, 0x49, 0xaf, 0xb3, 0x0c, 0x67, 0x1b, 0x35, 0xa6, 0xab, + 0x0d, 0xa9, 0xdd, 0x6c, 0x48, 0xed, 0x76, 0x43, 0x6a, 0x5f, 0x52, 0x82, 0x56, 0x29, 0x41, 0x37, + 0x29, 0x41, 0xb7, 0x29, 0x41, 0xdf, 0x53, 0x82, 0xbe, 0xfe, 0x20, 0xb5, 0x0f, 0xcd, 0x5d, 0xe6, + 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x55, 0x5c, 0x1a, 0x39, 0xc9, 0x03, 0x00, 0x00, +} + func (m *PriorityClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -73,40 +156,55 @@ } func (m *PriorityClass) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PriorityClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.PreemptionPolicy != nil { + i -= len(*m.PreemptionPolicy) + copy(dAtA[i:], *m.PreemptionPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PreemptionPolicy))) + i-- + dAtA[i] = 0x2a } - i += n1 - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Value)) - dAtA[i] = 0x18 - i++ + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x22 + i-- if m.GlobalDefault { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) - i += copy(dAtA[i:], m.Description) - return i, nil + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Value)) + i-- + dAtA[i] = 0x10 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PriorityClassList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -114,61 +212,57 @@ } func (m *PriorityClassList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PriorityClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *PriorityClass) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -177,10 +271,17 @@ n += 2 l = len(m.Description) n += 1 + l + sovGenerated(uint64(l)) + if m.PreemptionPolicy != nil { + l = len(*m.PreemptionPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *PriorityClassList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -195,14 +296,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -212,10 +306,11 @@ return "nil" } s := strings.Join([]string{`&PriorityClass{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Value:` + fmt.Sprintf("%v", this.Value) + `,`, `GlobalDefault:` + fmt.Sprintf("%v", this.GlobalDefault) + `,`, `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `PreemptionPolicy:` + valueToStringGenerated(this.PreemptionPolicy) + `,`, `}`, }, "") return s @@ -224,9 +319,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]PriorityClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PriorityClass", "PriorityClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&PriorityClassList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PriorityClass", "PriorityClass", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -254,7 +354,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -282,7 +382,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -291,6 +391,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -312,7 +415,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Value |= (int32(b) & 0x7F) << shift + m.Value |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -331,7 +434,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -351,7 +454,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -361,11 +464,47 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreemptionPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := k8s_io_api_core_v1.PreemptionPolicy(dAtA[iNdEx:postIndex]) + m.PreemptionPolicy = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -375,6 +514,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -402,7 +544,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -430,7 +572,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -439,6 +581,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -460,7 +605,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -469,6 +614,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -486,6 +634,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -552,10 +703,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -584,6 +738,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -602,39 +759,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 447 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x8b, 0xd3, 0x40, - 0x18, 0xc6, 0x33, 0x5d, 0x0b, 0x75, 0x4a, 0x41, 0x23, 0x42, 0xe8, 0x61, 0x36, 0xac, 0x97, 0x5c, - 0x76, 0xc6, 0x2e, 0x2a, 0x82, 0xb7, 0xb8, 0xb0, 0x08, 0x8a, 0x92, 0x83, 0x07, 0xf1, 0xe0, 0x24, - 0x79, 0x37, 0x1d, 0x9b, 0x64, 0xc2, 0xcc, 0x24, 0xb0, 0x37, 0xcf, 0x9e, 0xfc, 0x52, 0x42, 0x8f, - 0x7b, 0xdc, 0xd3, 0x62, 0xe3, 0x17, 0x91, 0xa4, 0x69, 0xd3, 0x5a, 0xfc, 0x73, 0xcb, 0x3c, 0xef, - 0xef, 0x79, 0xe6, 0xcd, 0xc3, 0xe0, 0x8b, 0xc5, 0x73, 0x4d, 0x85, 0x64, 0x8b, 0x32, 0x04, 0x95, - 0x83, 0x01, 0xcd, 0x2a, 0xc8, 0x63, 0xa9, 0x58, 0x37, 0xe0, 0x85, 0x60, 0x3a, 0x9a, 0x43, 0x5c, - 0xa6, 0x22, 0x4f, 0x58, 0x35, 0xe3, 0x69, 0x31, 0xe7, 0x33, 0x96, 0x40, 0x0e, 0x8a, 0x1b, 0x88, - 0x69, 0xa1, 0xa4, 0x91, 0x36, 0x59, 0xf3, 0x94, 0x17, 0x82, 0xf6, 0x3c, 0xdd, 0xf0, 0xd3, 0xd3, - 0x44, 0x98, 0x79, 0x19, 0xd2, 0x48, 0x66, 0x2c, 0x91, 0x89, 0x64, 0xad, 0x2d, 0x2c, 0x2f, 0xdb, - 0x53, 0x7b, 0x68, 0xbf, 0xd6, 0x71, 0xd3, 0x27, 0xfd, 0xf5, 0x19, 0x8f, 0xe6, 0x22, 0x07, 0x75, - 0xc5, 0x8a, 0x45, 0xd2, 0x08, 0x9a, 0x65, 0x60, 0x38, 0xab, 0x0e, 0x96, 0x98, 0xb2, 0x3f, 0xb9, - 0x54, 0x99, 0x1b, 0x91, 0xc1, 0x81, 0xe1, 0xd9, 0xbf, 0x0c, 0xcd, 0xaf, 0x64, 0xfc, 0x77, 0xdf, - 0xc9, 0xd7, 0x01, 0x9e, 0xbc, 0x53, 0x42, 0x2a, 0x61, 0xae, 0x5e, 0xa6, 0x5c, 0x6b, 0xfb, 0x13, - 0x1e, 0x35, 0x5b, 0xc5, 0xdc, 0x70, 0x07, 0xb9, 0xc8, 0x1b, 0x9f, 0x3d, 0xa6, 0x7d, 0x25, 0xdb, - 0x70, 0x5a, 0x2c, 0x92, 0x46, 0xd0, 0xb4, 0xa1, 0x69, 0x35, 0xa3, 0x6f, 0xc3, 0xcf, 0x10, 0x99, - 0x37, 0x60, 0xb8, 0x6f, 0x2f, 0x6f, 0x8f, 0xad, 0xfa, 0xf6, 0x18, 0xf7, 0x5a, 0xb0, 0x4d, 0xb5, - 0x1f, 0xe1, 0x61, 0xc5, 0xd3, 0x12, 0x9c, 0x81, 0x8b, 0xbc, 0xa1, 0x3f, 0xe9, 0xe0, 0xe1, 0xfb, - 0x46, 0x0c, 0xd6, 0x33, 0xfb, 0x05, 0x9e, 0x24, 0xa9, 0x0c, 0x79, 0x7a, 0x0e, 0x97, 0xbc, 0x4c, - 0x8d, 0x73, 0xe4, 0x22, 0x6f, 0xe4, 0x3f, 0xec, 0xe0, 0xc9, 0xc5, 0xee, 0x30, 0xd8, 0x67, 0xed, - 0xa7, 0x78, 0x1c, 0x83, 0x8e, 0x94, 0x28, 0x8c, 0x90, 0xb9, 0x73, 0xc7, 0x45, 0xde, 0x5d, 0xff, - 0x41, 0x67, 0x1d, 0x9f, 0xf7, 0xa3, 0x60, 0x97, 0x3b, 0xf9, 0x8e, 0xf0, 0xfd, 0xbd, 0x32, 0x5e, - 0x0b, 0x6d, 0xec, 0x8f, 0x07, 0x85, 0xd0, 0xff, 0x2b, 0xa4, 0x71, 0xb7, 0x75, 0xdc, 0xeb, 0x6e, - 0x1e, 0x6d, 0x94, 0x9d, 0x32, 0x02, 0x3c, 0x14, 0x06, 0x32, 0xed, 0x0c, 0xdc, 0x23, 0x6f, 0x7c, - 0x76, 0x4a, 0xff, 0xfe, 0xfc, 0xe8, 0xde, 0x7e, 0x7d, 0x77, 0xaf, 0x9a, 0x8c, 0x60, 0x1d, 0xe5, - 0xd3, 0xe5, 0x8a, 0x58, 0xd7, 0x2b, 0x62, 0xdd, 0xac, 0x88, 0xf5, 0xa5, 0x26, 0x68, 0x59, 0x13, - 0x74, 0x5d, 0x13, 0x74, 0x53, 0x13, 0xf4, 0xa3, 0x26, 0xe8, 0xdb, 0x4f, 0x62, 0x7d, 0x18, 0x6d, - 0x32, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xab, 0x20, 0x12, 0x63, 0x3c, 0x03, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ package k8s.io.api.scheduling.v1alpha1; +import "k8s.io/api/core/v1/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -28,11 +29,12 @@ // Package-wide variables from generator "generated". option go_package = "v1alpha1"; +// DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. // PriorityClass defines mapping from a priority class name to the priority // integer value. The value can be any valid integer. message PriorityClass { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -52,12 +54,19 @@ // when this priority class should be used. // +optional optional string description = 4; + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + optional string preemptionPolicy = 5; } // PriorityClassList is a collection of priority classes. message PriorityClassList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,7 @@ package v1alpha1 import ( + apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -24,12 +25,13 @@ // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. // PriorityClass defines mapping from a priority class name to the priority // integer value. The value can be any valid integer. type PriorityClass struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -49,6 +51,13 @@ // when this priority class should be used. // +optional Description string `json:"description,omitempty" protobuf:"bytes,4,opt,name=description"` + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + PreemptionPolicy *apiv1.PreemptionPolicy `json:"preemptionPolicy,omitempty" protobuf:"bytes,5,opt,name=preemptionPolicy"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -57,7 +66,7 @@ type PriorityClassList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,11 +28,12 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_PriorityClass = map[string]string{ - "": "PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "value": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", - "globalDefault": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", - "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + "": "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "value": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + "globalDefault": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + "preemptionPolicy": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.", } func (PriorityClass) SwaggerDoc() map[string]string { @@ -41,7 +42,7 @@ var map_PriorityClassList = map[string]string{ "": "PriorityClassList is a collection of priority classes.", - "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is the list of PriorityClasses", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ package v1alpha1 import ( + v1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -29,6 +30,11 @@ *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.PreemptionPolicy != nil { + in, out := &in.PreemptionPolicy, &out.PreemptionPolicy + *out = new(v1.PreemptionPolicy) + **out = **in + } return } @@ -54,7 +60,7 @@ func (in *PriorityClassList) DeepCopyInto(out *PriorityClassList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PriorityClass, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=scheduling.k8s.io + package v1beta1 // import "k8s.io/api/scheduling/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,30 +14,25 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. +package v1beta1 - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1beta1/generated.proto +import ( + fmt "fmt" - It has these top-level messages: - PriorityClass - PriorityClassList -*/ -package v1beta1 + io "io" -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" + proto "github.com/gogo/protobuf/proto" -import strings "strings" -import reflect "reflect" + k8s_io_api_core_v1 "k8s.io/api/core/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -50,22 +45,110 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *PriorityClass) Reset() { *m = PriorityClass{} } -func (*PriorityClass) ProtoMessage() {} -func (*PriorityClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *PriorityClassList) Reset() { *m = PriorityClassList{} } -func (*PriorityClassList) ProtoMessage() {} -func (*PriorityClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (m *PriorityClass) Reset() { *m = PriorityClass{} } +func (*PriorityClass) ProtoMessage() {} +func (*PriorityClass) Descriptor() ([]byte, []int) { + return fileDescriptor_6cd406dede2d3f42, []int{0} +} +func (m *PriorityClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PriorityClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PriorityClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_PriorityClass.Merge(m, src) +} +func (m *PriorityClass) XXX_Size() int { + return m.Size() +} +func (m *PriorityClass) XXX_DiscardUnknown() { + xxx_messageInfo_PriorityClass.DiscardUnknown(m) +} + +var xxx_messageInfo_PriorityClass proto.InternalMessageInfo + +func (m *PriorityClassList) Reset() { *m = PriorityClassList{} } +func (*PriorityClassList) ProtoMessage() {} +func (*PriorityClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_6cd406dede2d3f42, []int{1} +} +func (m *PriorityClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PriorityClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PriorityClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PriorityClassList.Merge(m, src) +} +func (m *PriorityClassList) XXX_Size() int { + return m.Size() +} +func (m *PriorityClassList) XXX_DiscardUnknown() { + xxx_messageInfo_PriorityClassList.DiscardUnknown(m) +} + +var xxx_messageInfo_PriorityClassList proto.InternalMessageInfo func init() { proto.RegisterType((*PriorityClass)(nil), "k8s.io.api.scheduling.v1beta1.PriorityClass") proto.RegisterType((*PriorityClassList)(nil), "k8s.io.api.scheduling.v1beta1.PriorityClassList") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1beta1/generated.proto", fileDescriptor_6cd406dede2d3f42) +} + +var fileDescriptor_6cd406dede2d3f42 = []byte{ + // 494 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x3f, 0x8f, 0xd3, 0x30, + 0x18, 0xc6, 0xeb, 0x1e, 0x15, 0xc5, 0x55, 0xa5, 0x12, 0x84, 0x14, 0x55, 0x22, 0xad, 0x7a, 0x4b, + 0x07, 0xce, 0xa6, 0x27, 0x40, 0x48, 0xb7, 0x95, 0x13, 0x08, 0x09, 0x44, 0xc9, 0xc0, 0x80, 0x18, + 0x70, 0x92, 0xf7, 0x52, 0xd3, 0x24, 0x8e, 0x6c, 0x27, 0x52, 0x37, 0x3e, 0x02, 0x1f, 0x8a, 0xa1, + 0xe3, 0x8d, 0x37, 0x55, 0x34, 0x7c, 0x04, 0x36, 0x26, 0x94, 0x34, 0x5c, 0xda, 0x86, 0x7f, 0x5b, + 0xfc, 0x3e, 0xbf, 0xe7, 0xb1, 0xfd, 0x24, 0xc1, 0xcf, 0x16, 0x4f, 0x14, 0xe1, 0x82, 0x2e, 0x12, + 0x07, 0x64, 0x04, 0x1a, 0x14, 0x4d, 0x21, 0xf2, 0x84, 0xa4, 0xa5, 0xc0, 0x62, 0x4e, 0x95, 0x3b, + 0x07, 0x2f, 0x09, 0x78, 0xe4, 0xd3, 0x74, 0xe2, 0x80, 0x66, 0x13, 0xea, 0x43, 0x04, 0x92, 0x69, + 0xf0, 0x48, 0x2c, 0x85, 0x16, 0xc6, 0xbd, 0x2d, 0x4e, 0x58, 0xcc, 0x49, 0x85, 0x93, 0x12, 0xef, + 0x9f, 0xf8, 0x5c, 0xcf, 0x13, 0x87, 0xb8, 0x22, 0xa4, 0xbe, 0xf0, 0x05, 0x2d, 0x5c, 0x4e, 0x72, + 0x51, 0xac, 0x8a, 0x45, 0xf1, 0xb4, 0x4d, 0xeb, 0x8f, 0x76, 0x36, 0x77, 0x85, 0x04, 0x9a, 0xd6, + 0x76, 0xec, 0x3f, 0xac, 0x98, 0x90, 0xb9, 0x73, 0x1e, 0x81, 0x5c, 0xd2, 0x78, 0xe1, 0xe7, 0x03, + 0x45, 0x43, 0xd0, 0xec, 0x77, 0x2e, 0xfa, 0x27, 0x97, 0x4c, 0x22, 0xcd, 0x43, 0xa8, 0x19, 0x1e, + 0xff, 0xcb, 0x90, 0xdf, 0x36, 0x64, 0x87, 0xbe, 0xd1, 0xf7, 0x26, 0xee, 0xce, 0x24, 0x17, 0x92, + 0xeb, 0xe5, 0xd3, 0x80, 0x29, 0x65, 0x7c, 0xc0, 0xed, 0xfc, 0x54, 0x1e, 0xd3, 0xcc, 0x44, 0x43, + 0x34, 0xee, 0x9c, 0x3e, 0x20, 0x55, 0x6b, 0xd7, 0xe1, 0x24, 0x5e, 0xf8, 0xf9, 0x40, 0x91, 0x9c, + 0x26, 0xe9, 0x84, 0xbc, 0x76, 0x3e, 0x82, 0xab, 0x5f, 0x81, 0x66, 0x53, 0x63, 0xb5, 0x1e, 0x34, + 0xb2, 0xf5, 0x00, 0x57, 0x33, 0xfb, 0x3a, 0xd5, 0x38, 0xc6, 0xad, 0x94, 0x05, 0x09, 0x98, 0xcd, + 0x21, 0x1a, 0xb7, 0xa6, 0xdd, 0x12, 0x6e, 0xbd, 0xcd, 0x87, 0xf6, 0x56, 0x33, 0xce, 0x70, 0xd7, + 0x0f, 0x84, 0xc3, 0x82, 0x73, 0xb8, 0x60, 0x49, 0xa0, 0xcd, 0xa3, 0x21, 0x1a, 0xb7, 0xa7, 0x77, + 0x4b, 0xb8, 0xfb, 0x7c, 0x57, 0xb4, 0xf7, 0x59, 0xe3, 0x11, 0xee, 0x78, 0xa0, 0x5c, 0xc9, 0x63, + 0xcd, 0x45, 0x64, 0xde, 0x18, 0xa2, 0xf1, 0xad, 0xe9, 0x9d, 0xd2, 0xda, 0x39, 0xaf, 0x24, 0x7b, + 0x97, 0x33, 0x7c, 0xdc, 0x8b, 0x25, 0x40, 0x58, 0xac, 0x66, 0x22, 0xe0, 0xee, 0xd2, 0x6c, 0x15, + 0xde, 0xb3, 0x6c, 0x3d, 0xe8, 0xcd, 0x0e, 0xb4, 0x1f, 0xeb, 0xc1, 0x71, 0xfd, 0x0b, 0x20, 0x87, + 0x98, 0x5d, 0x0b, 0x1d, 0x7d, 0x41, 0xf8, 0xf6, 0x5e, 0xeb, 0x2f, 0xb9, 0xd2, 0xc6, 0xfb, 0x5a, + 0xf3, 0xe4, 0xff, 0x9a, 0xcf, 0xdd, 0x45, 0xef, 0xbd, 0xf2, 0x8a, 0xed, 0x5f, 0x93, 0x9d, 0xd6, + 0xdf, 0xe0, 0x16, 0xd7, 0x10, 0x2a, 0xb3, 0x39, 0x3c, 0x1a, 0x77, 0x4e, 0xef, 0x93, 0xbf, 0xfe, + 0x0a, 0x64, 0xef, 0x78, 0xd5, 0x3b, 0x7a, 0x91, 0x47, 0xd8, 0xdb, 0xa4, 0xe9, 0xc9, 0x6a, 0x63, + 0x35, 0x2e, 0x37, 0x56, 0xe3, 0x6a, 0x63, 0x35, 0x3e, 0x65, 0x16, 0x5a, 0x65, 0x16, 0xba, 0xcc, + 0x2c, 0x74, 0x95, 0x59, 0xe8, 0x6b, 0x66, 0xa1, 0xcf, 0xdf, 0xac, 0xc6, 0xbb, 0x9b, 0x65, 0xe4, + 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xc2, 0xc0, 0x1f, 0xc5, 0x03, 0x00, 0x00, +} + func (m *PriorityClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -73,40 +156,55 @@ } func (m *PriorityClass) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PriorityClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.PreemptionPolicy != nil { + i -= len(*m.PreemptionPolicy) + copy(dAtA[i:], *m.PreemptionPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PreemptionPolicy))) + i-- + dAtA[i] = 0x2a } - i += n1 - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Value)) - dAtA[i] = 0x18 - i++ + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x22 + i-- if m.GlobalDefault { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) - i += copy(dAtA[i:], m.Description) - return i, nil + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Value)) + i-- + dAtA[i] = 0x10 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PriorityClassList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -114,61 +212,57 @@ } func (m *PriorityClassList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PriorityClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *PriorityClass) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -177,10 +271,17 @@ n += 2 l = len(m.Description) n += 1 + l + sovGenerated(uint64(l)) + if m.PreemptionPolicy != nil { + l = len(*m.PreemptionPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *PriorityClassList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -195,14 +296,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -212,10 +306,11 @@ return "nil" } s := strings.Join([]string{`&PriorityClass{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Value:` + fmt.Sprintf("%v", this.Value) + `,`, `GlobalDefault:` + fmt.Sprintf("%v", this.GlobalDefault) + `,`, `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `PreemptionPolicy:` + valueToStringGenerated(this.PreemptionPolicy) + `,`, `}`, }, "") return s @@ -224,9 +319,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]PriorityClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PriorityClass", "PriorityClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&PriorityClassList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PriorityClass", "PriorityClass", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -254,7 +354,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -282,7 +382,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -291,6 +391,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -312,7 +415,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Value |= (int32(b) & 0x7F) << shift + m.Value |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -331,7 +434,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -351,7 +454,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -361,11 +464,47 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } m.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreemptionPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := k8s_io_api_core_v1.PreemptionPolicy(dAtA[iNdEx:postIndex]) + m.PreemptionPolicy = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -375,6 +514,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -402,7 +544,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -430,7 +572,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -439,6 +581,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -460,7 +605,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -469,6 +614,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -486,6 +634,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -552,10 +703,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -584,6 +738,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -602,39 +759,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/scheduling/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 448 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x8b, 0xd3, 0x40, - 0x18, 0xc5, 0x33, 0x5d, 0x8b, 0x75, 0x4a, 0x41, 0x23, 0x42, 0x28, 0x38, 0x1b, 0xd6, 0x4b, 0x0e, - 0xee, 0x8c, 0x5d, 0x54, 0x04, 0x6f, 0x71, 0x51, 0x04, 0x45, 0xcd, 0xc1, 0x83, 0x78, 0x70, 0x92, - 0x7c, 0x9b, 0x8e, 0x4d, 0x32, 0x61, 0x66, 0x12, 0xd8, 0x9b, 0x67, 0x4f, 0xfe, 0x51, 0x1e, 0x7a, - 0xdc, 0xe3, 0x9e, 0x16, 0x1b, 0xff, 0x11, 0x49, 0x1a, 0x37, 0xad, 0x45, 0xdd, 0x5b, 0xe6, 0x7d, - 0xbf, 0xf7, 0xe6, 0xcb, 0x63, 0xf0, 0xf3, 0xc5, 0x13, 0x4d, 0x85, 0x64, 0x8b, 0x32, 0x04, 0x95, - 0x83, 0x01, 0xcd, 0x2a, 0xc8, 0x63, 0xa9, 0x58, 0x37, 0xe0, 0x85, 0x60, 0x3a, 0x9a, 0x43, 0x5c, - 0xa6, 0x22, 0x4f, 0x58, 0x35, 0x0b, 0xc1, 0xf0, 0x19, 0x4b, 0x20, 0x07, 0xc5, 0x0d, 0xc4, 0xb4, - 0x50, 0xd2, 0x48, 0xfb, 0xee, 0x1a, 0xa7, 0xbc, 0x10, 0xb4, 0xc7, 0x69, 0x87, 0x4f, 0x0f, 0x13, - 0x61, 0xe6, 0x65, 0x48, 0x23, 0x99, 0xb1, 0x44, 0x26, 0x92, 0xb5, 0xae, 0xb0, 0x3c, 0x69, 0x4f, - 0xed, 0xa1, 0xfd, 0x5a, 0xa7, 0x4d, 0x1f, 0xf6, 0x97, 0x67, 0x3c, 0x9a, 0x8b, 0x1c, 0xd4, 0x29, - 0x2b, 0x16, 0x49, 0x23, 0x68, 0x96, 0x81, 0xe1, 0xac, 0xda, 0xd9, 0x61, 0xca, 0xfe, 0xe6, 0x52, - 0x65, 0x6e, 0x44, 0x06, 0x3b, 0x86, 0xc7, 0xff, 0x33, 0x34, 0x7f, 0x92, 0xf1, 0x3f, 0x7d, 0x07, - 0x5f, 0x07, 0x78, 0xf2, 0x56, 0x09, 0xa9, 0x84, 0x39, 0x7d, 0x96, 0x72, 0xad, 0xed, 0x4f, 0x78, - 0xd4, 0x6c, 0x15, 0x73, 0xc3, 0x1d, 0xe4, 0x22, 0x6f, 0x7c, 0xf4, 0x80, 0xf6, 0x8d, 0x5c, 0x86, - 0xd3, 0x62, 0x91, 0x34, 0x82, 0xa6, 0x0d, 0x4d, 0xab, 0x19, 0x7d, 0x13, 0x7e, 0x86, 0xc8, 0xbc, - 0x06, 0xc3, 0x7d, 0x7b, 0x79, 0xb1, 0x6f, 0xd5, 0x17, 0xfb, 0xb8, 0xd7, 0x82, 0xcb, 0x54, 0xfb, - 0x1e, 0x1e, 0x56, 0x3c, 0x2d, 0xc1, 0x19, 0xb8, 0xc8, 0x1b, 0xfa, 0x93, 0x0e, 0x1e, 0xbe, 0x6f, - 0xc4, 0x60, 0x3d, 0xb3, 0x9f, 0xe2, 0x49, 0x92, 0xca, 0x90, 0xa7, 0xc7, 0x70, 0xc2, 0xcb, 0xd4, - 0x38, 0x7b, 0x2e, 0xf2, 0x46, 0xfe, 0x9d, 0x0e, 0x9e, 0xbc, 0xd8, 0x1c, 0x06, 0xdb, 0xac, 0xfd, - 0x08, 0x8f, 0x63, 0xd0, 0x91, 0x12, 0x85, 0x11, 0x32, 0x77, 0xae, 0xb9, 0xc8, 0xbb, 0xe1, 0xdf, - 0xee, 0xac, 0xe3, 0xe3, 0x7e, 0x14, 0x6c, 0x72, 0x07, 0xdf, 0x11, 0xbe, 0xb5, 0x55, 0xc6, 0x2b, - 0xa1, 0x8d, 0xfd, 0x71, 0xa7, 0x10, 0x7a, 0xb5, 0x42, 0x1a, 0x77, 0x5b, 0xc7, 0xcd, 0xee, 0xe6, - 0xd1, 0x6f, 0x65, 0xa3, 0x8c, 0x77, 0x78, 0x28, 0x0c, 0x64, 0xda, 0x19, 0xb8, 0x7b, 0xde, 0xf8, - 0xe8, 0x3e, 0xfd, 0xe7, 0xeb, 0xa3, 0x5b, 0xeb, 0xf5, 0xd5, 0xbd, 0x6c, 0x22, 0x82, 0x75, 0x92, - 0x7f, 0xb8, 0x5c, 0x11, 0xeb, 0x6c, 0x45, 0xac, 0xf3, 0x15, 0xb1, 0xbe, 0xd4, 0x04, 0x2d, 0x6b, - 0x82, 0xce, 0x6a, 0x82, 0xce, 0x6b, 0x82, 0x7e, 0xd4, 0x04, 0x7d, 0xfb, 0x49, 0xac, 0x0f, 0xd7, - 0xbb, 0xc8, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x41, 0x74, 0x8a, 0x60, 0x38, 0x03, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ package k8s.io.api.scheduling.v1beta1; +import "k8s.io/api/core/v1/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -28,11 +29,12 @@ // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. // PriorityClass defines mapping from a priority class name to the priority // integer value. The value can be any valid integer. message PriorityClass { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -52,12 +54,19 @@ // when this priority class should be used. // +optional optional string description = 4; + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + optional string preemptionPolicy = 5; } // PriorityClassList is a collection of priority classes. message PriorityClassList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,7 @@ package v1beta1 import ( + apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -24,12 +25,13 @@ // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. // PriorityClass defines mapping from a priority class name to the priority // integer value. The value can be any valid integer. type PriorityClass struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -49,6 +51,13 @@ // when this priority class should be used. // +optional Description string `json:"description,omitempty" protobuf:"bytes,4,opt,name=description"` + + // PreemptionPolicy is the Policy for preempting pods with lower priority. + // One of Never, PreemptLowerPriority. + // Defaults to PreemptLowerPriority if unset. + // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. + // +optional + PreemptionPolicy *apiv1.PreemptionPolicy `json:"preemptionPolicy,omitempty" protobuf:"bytes,5,opt,name=preemptionPolicy"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -57,7 +66,7 @@ type PriorityClassList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,11 +28,12 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_PriorityClass = map[string]string{ - "": "PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "value": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", - "globalDefault": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", - "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + "": "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "value": "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + "globalDefault": "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + "description": "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + "preemptionPolicy": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.", } func (PriorityClass) SwaggerDoc() map[string]string { @@ -41,7 +42,7 @@ var map_PriorityClassList = map[string]string{ "": "PriorityClassList is a collection of priority classes.", - "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "items is the list of PriorityClasses", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/scheduling/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ package v1beta1 import ( + v1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -29,6 +30,11 @@ *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.PreemptionPolicy != nil { + in, out := &in.PreemptionPolicy, &out.PreemptionPolicy + *out = new(v1.PreemptionPolicy) + **out = **in + } return } @@ -54,7 +60,7 @@ func (in *PriorityClassList) DeepCopyInto(out *PriorityClassList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PriorityClass, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,7 +15,9 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +k8s:openapi-gen=true // +groupName=settings.k8s.io + package v1alpha1 // import "k8s.io/api/settings/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,33 +14,24 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/settings/v1alpha1/generated.proto -// DO NOT EDIT! -/* - Package v1alpha1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/settings/v1alpha1/generated.proto - - It has these top-level messages: - PodPreset - PodPresetList - PodPresetSpec -*/ package v1alpha1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_api_core_v1 "k8s.io/api/core/v1" + io "io" -import strings "strings" -import reflect "reflect" + proto "github.com/gogo/protobuf/proto" + v11 "k8s.io/api/core/v1" -import io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -53,27 +44,142 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *PodPreset) Reset() { *m = PodPreset{} } -func (*PodPreset) ProtoMessage() {} -func (*PodPreset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *PodPresetList) Reset() { *m = PodPresetList{} } -func (*PodPresetList) ProtoMessage() {} -func (*PodPresetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *PodPresetSpec) Reset() { *m = PodPresetSpec{} } -func (*PodPresetSpec) ProtoMessage() {} -func (*PodPresetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (m *PodPreset) Reset() { *m = PodPreset{} } +func (*PodPreset) ProtoMessage() {} +func (*PodPreset) Descriptor() ([]byte, []int) { + return fileDescriptor_48fab0a6ea4b79ce, []int{0} +} +func (m *PodPreset) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodPreset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodPreset) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodPreset.Merge(m, src) +} +func (m *PodPreset) XXX_Size() int { + return m.Size() +} +func (m *PodPreset) XXX_DiscardUnknown() { + xxx_messageInfo_PodPreset.DiscardUnknown(m) +} + +var xxx_messageInfo_PodPreset proto.InternalMessageInfo + +func (m *PodPresetList) Reset() { *m = PodPresetList{} } +func (*PodPresetList) ProtoMessage() {} +func (*PodPresetList) Descriptor() ([]byte, []int) { + return fileDescriptor_48fab0a6ea4b79ce, []int{1} +} +func (m *PodPresetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodPresetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodPresetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodPresetList.Merge(m, src) +} +func (m *PodPresetList) XXX_Size() int { + return m.Size() +} +func (m *PodPresetList) XXX_DiscardUnknown() { + xxx_messageInfo_PodPresetList.DiscardUnknown(m) +} + +var xxx_messageInfo_PodPresetList proto.InternalMessageInfo + +func (m *PodPresetSpec) Reset() { *m = PodPresetSpec{} } +func (*PodPresetSpec) ProtoMessage() {} +func (*PodPresetSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_48fab0a6ea4b79ce, []int{2} +} +func (m *PodPresetSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodPresetSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodPresetSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodPresetSpec.Merge(m, src) +} +func (m *PodPresetSpec) XXX_Size() int { + return m.Size() +} +func (m *PodPresetSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodPresetSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodPresetSpec proto.InternalMessageInfo func init() { proto.RegisterType((*PodPreset)(nil), "k8s.io.api.settings.v1alpha1.PodPreset") proto.RegisterType((*PodPresetList)(nil), "k8s.io.api.settings.v1alpha1.PodPresetList") proto.RegisterType((*PodPresetSpec)(nil), "k8s.io.api.settings.v1alpha1.PodPresetSpec") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/settings/v1alpha1/generated.proto", fileDescriptor_48fab0a6ea4b79ce) +} + +var fileDescriptor_48fab0a6ea4b79ce = []byte{ + // 542 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x8e, 0xd2, 0x40, + 0x1c, 0xc6, 0xe9, 0xb2, 0x04, 0x1c, 0xd8, 0x68, 0x1a, 0x0f, 0x0d, 0x31, 0x65, 0xe5, 0xe2, 0x26, + 0xc6, 0x19, 0x59, 0x8d, 0xd1, 0x6b, 0x13, 0x4c, 0x4c, 0x20, 0x6e, 0x4a, 0xb2, 0x89, 0xc6, 0x83, + 0x43, 0xf9, 0x5b, 0x2a, 0xb4, 0xd3, 0xcc, 0x4c, 0x9b, 0x78, 0xf3, 0x11, 0x7c, 0x01, 0x9f, 0x44, + 0x1f, 0x80, 0xe3, 0x1e, 0xf7, 0xb4, 0x91, 0xfa, 0x22, 0x66, 0x86, 0x29, 0xa0, 0x88, 0x72, 0x9b, + 0xff, 0x9f, 0xef, 0xfb, 0xcd, 0xf7, 0x31, 0x45, 0xfd, 0xd9, 0x73, 0x81, 0x23, 0x46, 0x66, 0xd9, + 0x18, 0x78, 0x02, 0x12, 0x04, 0xc9, 0x21, 0x99, 0x30, 0x4e, 0xcc, 0x0f, 0x34, 0x8d, 0x88, 0x00, + 0x29, 0xa3, 0x24, 0x14, 0x24, 0xef, 0xd1, 0x79, 0x3a, 0xa5, 0x3d, 0x12, 0x42, 0x02, 0x9c, 0x4a, + 0x98, 0xe0, 0x94, 0x33, 0xc9, 0xec, 0x7b, 0x2b, 0x35, 0xa6, 0x69, 0x84, 0x4b, 0x35, 0x2e, 0xd5, + 0xed, 0x47, 0x61, 0x24, 0xa7, 0xd9, 0x18, 0x07, 0x2c, 0x26, 0x21, 0x0b, 0x19, 0xd1, 0xa6, 0x71, + 0xf6, 0x41, 0x4f, 0x7a, 0xd0, 0xa7, 0x15, 0xac, 0xdd, 0xdd, 0xba, 0x3a, 0x60, 0x1c, 0x48, 0xbe, + 0x73, 0x61, 0xfb, 0xe9, 0x46, 0x13, 0xd3, 0x60, 0x1a, 0x25, 0xc0, 0x3f, 0x91, 0x74, 0x16, 0xaa, + 0x85, 0x20, 0x31, 0x48, 0xfa, 0x37, 0x17, 0xd9, 0xe7, 0xe2, 0x59, 0x22, 0xa3, 0x18, 0x76, 0x0c, + 0xcf, 0xfe, 0x67, 0x10, 0xc1, 0x14, 0x62, 0xfa, 0xa7, 0xaf, 0xfb, 0xdd, 0x42, 0xb7, 0x2e, 0xd8, + 0xe4, 0x82, 0x83, 0x00, 0x69, 0xbf, 0x47, 0x0d, 0x95, 0x68, 0x42, 0x25, 0x75, 0xac, 0x53, 0xeb, + 0xac, 0x79, 0xfe, 0x18, 0x6f, 0xfe, 0xb0, 0x35, 0x18, 0xa7, 0xb3, 0x50, 0x2d, 0x04, 0x56, 0x6a, + 0x9c, 0xf7, 0xf0, 0xeb, 0xf1, 0x47, 0x08, 0xe4, 0x10, 0x24, 0xf5, 0xec, 0xc5, 0x4d, 0xa7, 0x52, + 0xdc, 0x74, 0xd0, 0x66, 0xe7, 0xaf, 0xa9, 0xf6, 0x10, 0x1d, 0x8b, 0x14, 0x02, 0xe7, 0x48, 0xd3, + 0x1f, 0xe2, 0x7f, 0x3d, 0x07, 0x5e, 0x07, 0x1b, 0xa5, 0x10, 0x78, 0x2d, 0x03, 0x3e, 0x56, 0x93, + 0xaf, 0x31, 0xdd, 0x6f, 0x16, 0x3a, 0x59, 0xab, 0x06, 0x91, 0x90, 0xf6, 0xbb, 0x9d, 0x0a, 0xf8, + 0xb0, 0x0a, 0xca, 0xad, 0x0b, 0xdc, 0x31, 0xf7, 0x34, 0xca, 0xcd, 0x56, 0xfc, 0x01, 0xaa, 0x45, + 0x12, 0x62, 0xe1, 0x1c, 0x9d, 0x56, 0xcf, 0x9a, 0xe7, 0x0f, 0x0e, 0xcc, 0xef, 0x9d, 0x18, 0x66, + 0xed, 0x95, 0x72, 0xfb, 0x2b, 0x48, 0xf7, 0x6b, 0x75, 0x2b, 0xbd, 0x6a, 0x65, 0x53, 0xd4, 0x10, + 0x30, 0x87, 0x40, 0x32, 0x6e, 0xd2, 0x3f, 0x39, 0x30, 0x3d, 0x1d, 0xc3, 0x7c, 0x64, 0xac, 0x9b, + 0x0a, 0xe5, 0xc6, 0x5f, 0x63, 0xed, 0x17, 0xa8, 0x0a, 0x49, 0x6e, 0x0a, 0xb4, 0xb7, 0x0b, 0xa8, + 0x4f, 0x58, 0xb1, 0xfa, 0x49, 0x7e, 0x49, 0xb9, 0xd7, 0x34, 0x90, 0x6a, 0x3f, 0xc9, 0x7d, 0xe5, + 0xb1, 0x07, 0xa8, 0x0e, 0x49, 0xfe, 0x92, 0xb3, 0xd8, 0xa9, 0x6a, 0xfb, 0xfd, 0x3d, 0x76, 0x25, + 0x19, 0xb1, 0x8c, 0x07, 0xe0, 0xdd, 0x36, 0x94, 0xba, 0x59, 0xfb, 0x25, 0xc2, 0xee, 0xa3, 0x7a, + 0xce, 0xe6, 0x59, 0x0c, 0xc2, 0x39, 0xde, 0x1f, 0xe6, 0x52, 0x4b, 0x36, 0x98, 0xd5, 0x2c, 0xfc, + 0xd2, 0x6b, 0xbf, 0x41, 0xad, 0xd5, 0x71, 0xc8, 0xb2, 0x44, 0x0a, 0xa7, 0xa6, 0x59, 0x9d, 0xfd, + 0x2c, 0xad, 0xf3, 0xee, 0x1a, 0x60, 0x6b, 0x6b, 0x29, 0xfc, 0xdf, 0x50, 0x1e, 0x5e, 0x2c, 0xdd, + 0xca, 0xd5, 0xd2, 0xad, 0x5c, 0x2f, 0xdd, 0xca, 0xe7, 0xc2, 0xb5, 0x16, 0x85, 0x6b, 0x5d, 0x15, + 0xae, 0x75, 0x5d, 0xb8, 0xd6, 0x8f, 0xc2, 0xb5, 0xbe, 0xfc, 0x74, 0x2b, 0x6f, 0x1b, 0xe5, 0x7b, + 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x46, 0x15, 0xf2, 0x97, 0xa4, 0x04, 0x00, 0x00, +} + func (m *PodPreset) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -81,33 +187,42 @@ } func (m *PodPreset) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodPreset) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n1 + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodPresetList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -115,37 +230,46 @@ } func (m *PodPresetList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodPresetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n3, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *PodPresetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -153,97 +277,99 @@ } func (m *PodPresetSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodPresetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n4, err := m.Selector.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.VolumeMounts) > 0 { + for iNdEx := len(m.VolumeMounts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VolumeMounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } } - i += n4 - if len(m.Env) > 0 { - for _, msg := range m.Env { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Volumes) > 0 { + for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Volumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x22 } } if len(m.EnvFrom) > 0 { - for _, msg := range m.EnvFrom { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.EnvFrom) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EnvFrom[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x1a } } - if len(m.Volumes) > 0 { - for _, msg := range m.Volumes { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - if len(m.VolumeMounts) > 0 { - for _, msg := range m.VolumeMounts { - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *PodPreset) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -254,6 +380,9 @@ } func (m *PodPresetList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -268,6 +397,9 @@ } func (m *PodPresetSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Selector.Size() @@ -300,14 +432,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -317,7 +442,7 @@ return "nil" } s := strings.Join([]string{`&PodPreset{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodPresetSpec", "PodPresetSpec", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -327,9 +452,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]PodPreset{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PodPreset", "PodPreset", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&PodPresetList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodPreset", "PodPreset", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -338,12 +468,32 @@ if this == nil { return "nil" } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + repeatedStringForEnvFrom := "[]EnvFromSource{" + for _, f := range this.EnvFrom { + repeatedStringForEnvFrom += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnvFrom += "}" + repeatedStringForVolumes := "[]Volume{" + for _, f := range this.Volumes { + repeatedStringForVolumes += fmt.Sprintf("%v", f) + "," + } + repeatedStringForVolumes += "}" + repeatedStringForVolumeMounts := "[]VolumeMount{" + for _, f := range this.VolumeMounts { + repeatedStringForVolumeMounts += fmt.Sprintf("%v", f) + "," + } + repeatedStringForVolumeMounts += "}" s := strings.Join([]string{`&PodPresetSpec{`, - `Selector:` + strings.Replace(strings.Replace(this.Selector.String(), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1), `&`, ``, 1) + `,`, - `Env:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Env), "EnvVar", "k8s_io_api_core_v1.EnvVar", 1), `&`, ``, 1) + `,`, - `EnvFrom:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.EnvFrom), "EnvFromSource", "k8s_io_api_core_v1.EnvFromSource", 1), `&`, ``, 1) + `,`, - `Volumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Volumes), "Volume", "k8s_io_api_core_v1.Volume", 1), `&`, ``, 1) + `,`, - `VolumeMounts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeMounts), "VolumeMount", "k8s_io_api_core_v1.VolumeMount", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1), `&`, ``, 1) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `EnvFrom:` + repeatedStringForEnvFrom + `,`, + `Volumes:` + repeatedStringForVolumes + `,`, + `VolumeMounts:` + repeatedStringForVolumeMounts + `,`, `}`, }, "") return s @@ -371,7 +521,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -399,7 +549,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -408,6 +558,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -429,7 +582,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -438,6 +591,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -454,6 +610,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -481,7 +640,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -509,7 +668,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -518,6 +677,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -539,7 +701,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -548,6 +710,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -565,6 +730,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -592,7 +760,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -620,7 +788,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -629,6 +797,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -650,7 +821,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -659,10 +830,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Env = append(m.Env, k8s_io_api_core_v1.EnvVar{}) + m.Env = append(m.Env, v11.EnvVar{}) if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -681,7 +855,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -690,10 +864,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.EnvFrom = append(m.EnvFrom, k8s_io_api_core_v1.EnvFromSource{}) + m.EnvFrom = append(m.EnvFrom, v11.EnvFromSource{}) if err := m.EnvFrom[len(m.EnvFrom)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -712,7 +889,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -721,10 +898,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Volumes = append(m.Volumes, k8s_io_api_core_v1.Volume{}) + m.Volumes = append(m.Volumes, v11.Volume{}) if err := m.Volumes[len(m.Volumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -743,7 +923,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -752,10 +932,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.VolumeMounts = append(m.VolumeMounts, k8s_io_api_core_v1.VolumeMount{}) + m.VolumeMounts = append(m.VolumeMounts, v11.VolumeMount{}) if err := m.VolumeMounts[len(m.VolumeMounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -769,6 +952,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -835,10 +1021,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -867,6 +1056,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -885,45 +1077,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/settings/v1alpha1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 542 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x8e, 0xd2, 0x40, - 0x1c, 0xc6, 0xe9, 0xb2, 0x04, 0x1c, 0xd8, 0x68, 0x1a, 0x0f, 0x0d, 0x31, 0x65, 0xe5, 0xe2, 0x26, - 0xc6, 0x19, 0x59, 0x8d, 0xd1, 0x6b, 0x13, 0x4c, 0x4c, 0x20, 0x6e, 0x4a, 0xb2, 0x89, 0xc6, 0x83, - 0x43, 0xf9, 0x5b, 0x2a, 0xb4, 0xd3, 0xcc, 0x4c, 0x9b, 0x78, 0xf3, 0x11, 0x7c, 0x01, 0x9f, 0x44, - 0x1f, 0x80, 0xe3, 0x1e, 0xf7, 0xb4, 0x91, 0xfa, 0x22, 0x66, 0x86, 0x29, 0xa0, 0x88, 0x72, 0x9b, - 0xff, 0x9f, 0xef, 0xfb, 0xcd, 0xf7, 0x31, 0x45, 0xfd, 0xd9, 0x73, 0x81, 0x23, 0x46, 0x66, 0xd9, - 0x18, 0x78, 0x02, 0x12, 0x04, 0xc9, 0x21, 0x99, 0x30, 0x4e, 0xcc, 0x0f, 0x34, 0x8d, 0x88, 0x00, - 0x29, 0xa3, 0x24, 0x14, 0x24, 0xef, 0xd1, 0x79, 0x3a, 0xa5, 0x3d, 0x12, 0x42, 0x02, 0x9c, 0x4a, - 0x98, 0xe0, 0x94, 0x33, 0xc9, 0xec, 0x7b, 0x2b, 0x35, 0xa6, 0x69, 0x84, 0x4b, 0x35, 0x2e, 0xd5, - 0xed, 0x47, 0x61, 0x24, 0xa7, 0xd9, 0x18, 0x07, 0x2c, 0x26, 0x21, 0x0b, 0x19, 0xd1, 0xa6, 0x71, - 0xf6, 0x41, 0x4f, 0x7a, 0xd0, 0xa7, 0x15, 0xac, 0xdd, 0xdd, 0xba, 0x3a, 0x60, 0x1c, 0x48, 0xbe, - 0x73, 0x61, 0xfb, 0xe9, 0x46, 0x13, 0xd3, 0x60, 0x1a, 0x25, 0xc0, 0x3f, 0x91, 0x74, 0x16, 0xaa, - 0x85, 0x20, 0x31, 0x48, 0xfa, 0x37, 0x17, 0xd9, 0xe7, 0xe2, 0x59, 0x22, 0xa3, 0x18, 0x76, 0x0c, - 0xcf, 0xfe, 0x67, 0x10, 0xc1, 0x14, 0x62, 0xfa, 0xa7, 0xaf, 0xfb, 0xdd, 0x42, 0xb7, 0x2e, 0xd8, - 0xe4, 0x82, 0x83, 0x00, 0x69, 0xbf, 0x47, 0x0d, 0x95, 0x68, 0x42, 0x25, 0x75, 0xac, 0x53, 0xeb, - 0xac, 0x79, 0xfe, 0x18, 0x6f, 0xfe, 0xb0, 0x35, 0x18, 0xa7, 0xb3, 0x50, 0x2d, 0x04, 0x56, 0x6a, - 0x9c, 0xf7, 0xf0, 0xeb, 0xf1, 0x47, 0x08, 0xe4, 0x10, 0x24, 0xf5, 0xec, 0xc5, 0x4d, 0xa7, 0x52, - 0xdc, 0x74, 0xd0, 0x66, 0xe7, 0xaf, 0xa9, 0xf6, 0x10, 0x1d, 0x8b, 0x14, 0x02, 0xe7, 0x48, 0xd3, - 0x1f, 0xe2, 0x7f, 0x3d, 0x07, 0x5e, 0x07, 0x1b, 0xa5, 0x10, 0x78, 0x2d, 0x03, 0x3e, 0x56, 0x93, - 0xaf, 0x31, 0xdd, 0x6f, 0x16, 0x3a, 0x59, 0xab, 0x06, 0x91, 0x90, 0xf6, 0xbb, 0x9d, 0x0a, 0xf8, - 0xb0, 0x0a, 0xca, 0xad, 0x0b, 0xdc, 0x31, 0xf7, 0x34, 0xca, 0xcd, 0x56, 0xfc, 0x01, 0xaa, 0x45, - 0x12, 0x62, 0xe1, 0x1c, 0x9d, 0x56, 0xcf, 0x9a, 0xe7, 0x0f, 0x0e, 0xcc, 0xef, 0x9d, 0x18, 0x66, - 0xed, 0x95, 0x72, 0xfb, 0x2b, 0x48, 0xf7, 0x6b, 0x75, 0x2b, 0xbd, 0x6a, 0x65, 0x53, 0xd4, 0x10, - 0x30, 0x87, 0x40, 0x32, 0x6e, 0xd2, 0x3f, 0x39, 0x30, 0x3d, 0x1d, 0xc3, 0x7c, 0x64, 0xac, 0x9b, - 0x0a, 0xe5, 0xc6, 0x5f, 0x63, 0xed, 0x17, 0xa8, 0x0a, 0x49, 0x6e, 0x0a, 0xb4, 0xb7, 0x0b, 0xa8, - 0x4f, 0x58, 0xb1, 0xfa, 0x49, 0x7e, 0x49, 0xb9, 0xd7, 0x34, 0x90, 0x6a, 0x3f, 0xc9, 0x7d, 0xe5, - 0xb1, 0x07, 0xa8, 0x0e, 0x49, 0xfe, 0x92, 0xb3, 0xd8, 0xa9, 0x6a, 0xfb, 0xfd, 0x3d, 0x76, 0x25, - 0x19, 0xb1, 0x8c, 0x07, 0xe0, 0xdd, 0x36, 0x94, 0xba, 0x59, 0xfb, 0x25, 0xc2, 0xee, 0xa3, 0x7a, - 0xce, 0xe6, 0x59, 0x0c, 0xc2, 0x39, 0xde, 0x1f, 0xe6, 0x52, 0x4b, 0x36, 0x98, 0xd5, 0x2c, 0xfc, - 0xd2, 0x6b, 0xbf, 0x41, 0xad, 0xd5, 0x71, 0xc8, 0xb2, 0x44, 0x0a, 0xa7, 0xa6, 0x59, 0x9d, 0xfd, - 0x2c, 0xad, 0xf3, 0xee, 0x1a, 0x60, 0x6b, 0x6b, 0x29, 0xfc, 0xdf, 0x50, 0x1e, 0x5e, 0x2c, 0xdd, - 0xca, 0xd5, 0xd2, 0xad, 0x5c, 0x2f, 0xdd, 0xca, 0xe7, 0xc2, 0xb5, 0x16, 0x85, 0x6b, 0x5d, 0x15, - 0xae, 0x75, 0x5d, 0xb8, 0xd6, 0x8f, 0xc2, 0xb5, 0xbe, 0xfc, 0x74, 0x2b, 0x6f, 0x1b, 0xe5, 0x7b, - 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x46, 0x15, 0xf2, 0x97, 0xa4, 0x04, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -42,7 +42,7 @@ // PodPresetList is a list of PodPreset objects. message PodPresetList { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -61,7 +61,7 @@ type PodPresetList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -37,7 +37,7 @@ var map_PodPresetList = map[string]string{ "": "PodPresetList is a list of PodPreset objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is a list of schema objects.", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/settings/v1alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/settings/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -56,7 +56,7 @@ func (in *PodPresetList) DeepCopyInto(out *PodPresetList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]PodPreset, len(*in)) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,8 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=storage.k8s.io // +k8s:openapi-gen=true -package v1 + +package v1 // import "k8s.io/api/storage/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,34 +14,26 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/storage/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/storage/v1/generated.proto - - It has these top-level messages: - StorageClass - StorageClassList -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" - -import io "io" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -54,22 +46,319 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *StorageClass) Reset() { *m = StorageClass{} } -func (*StorageClass) ProtoMessage() {} -func (*StorageClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *StorageClassList) Reset() { *m = StorageClassList{} } -func (*StorageClassList) ProtoMessage() {} -func (*StorageClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (m *StorageClass) Reset() { *m = StorageClass{} } +func (*StorageClass) ProtoMessage() {} +func (*StorageClass) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{0} +} +func (m *StorageClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StorageClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageClass.Merge(m, src) +} +func (m *StorageClass) XXX_Size() int { + return m.Size() +} +func (m *StorageClass) XXX_DiscardUnknown() { + xxx_messageInfo_StorageClass.DiscardUnknown(m) +} + +var xxx_messageInfo_StorageClass proto.InternalMessageInfo + +func (m *StorageClassList) Reset() { *m = StorageClassList{} } +func (*StorageClassList) ProtoMessage() {} +func (*StorageClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{1} +} +func (m *StorageClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StorageClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageClassList.Merge(m, src) +} +func (m *StorageClassList) XXX_Size() int { + return m.Size() +} +func (m *StorageClassList) XXX_DiscardUnknown() { + xxx_messageInfo_StorageClassList.DiscardUnknown(m) +} + +var xxx_messageInfo_StorageClassList proto.InternalMessageInfo + +func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } +func (*VolumeAttachment) ProtoMessage() {} +func (*VolumeAttachment) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{2} +} +func (m *VolumeAttachment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachment) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachment.Merge(m, src) +} +func (m *VolumeAttachment) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachment) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachment.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachment proto.InternalMessageInfo + +func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } +func (*VolumeAttachmentList) ProtoMessage() {} +func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{3} +} +func (m *VolumeAttachmentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentList.Merge(m, src) +} +func (m *VolumeAttachmentList) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentList) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentList.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentList proto.InternalMessageInfo + +func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } +func (*VolumeAttachmentSource) ProtoMessage() {} +func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{4} +} +func (m *VolumeAttachmentSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentSource.Merge(m, src) +} +func (m *VolumeAttachmentSource) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentSource proto.InternalMessageInfo + +func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } +func (*VolumeAttachmentSpec) ProtoMessage() {} +func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{5} +} +func (m *VolumeAttachmentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentSpec.Merge(m, src) +} +func (m *VolumeAttachmentSpec) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentSpec proto.InternalMessageInfo + +func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } +func (*VolumeAttachmentStatus) ProtoMessage() {} +func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{6} +} +func (m *VolumeAttachmentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentStatus.Merge(m, src) +} +func (m *VolumeAttachmentStatus) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentStatus proto.InternalMessageInfo + +func (m *VolumeError) Reset() { *m = VolumeError{} } +func (*VolumeError) ProtoMessage() {} +func (*VolumeError) Descriptor() ([]byte, []int) { + return fileDescriptor_3b530c1983504d8d, []int{7} +} +func (m *VolumeError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeError) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeError.Merge(m, src) +} +func (m *VolumeError) XXX_Size() int { + return m.Size() +} +func (m *VolumeError) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeError.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeError proto.InternalMessageInfo func init() { proto.RegisterType((*StorageClass)(nil), "k8s.io.api.storage.v1.StorageClass") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1.StorageClass.ParametersEntry") proto.RegisterType((*StorageClassList)(nil), "k8s.io.api.storage.v1.StorageClassList") + proto.RegisterType((*VolumeAttachment)(nil), "k8s.io.api.storage.v1.VolumeAttachment") + proto.RegisterType((*VolumeAttachmentList)(nil), "k8s.io.api.storage.v1.VolumeAttachmentList") + proto.RegisterType((*VolumeAttachmentSource)(nil), "k8s.io.api.storage.v1.VolumeAttachmentSource") + proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1.VolumeAttachmentSpec") + proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1.VolumeAttachmentStatus") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1.VolumeAttachmentStatus.AttachmentMetadataEntry") + proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1.VolumeError") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/storage/v1/generated.proto", fileDescriptor_3b530c1983504d8d) } + +var fileDescriptor_3b530c1983504d8d = []byte{ + // 1018 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x3d, 0x6f, 0x23, 0xc5, + 0x1b, 0xcf, 0xc6, 0x79, 0x71, 0xc6, 0xc9, 0xff, 0x9c, 0xf9, 0x07, 0x30, 0x2e, 0xec, 0xc8, 0x14, + 0x98, 0x83, 0xdb, 0xbd, 0x84, 0x03, 0x9d, 0x90, 0x40, 0xf2, 0x82, 0x25, 0x4e, 0x8a, 0xef, 0xa2, + 0x49, 0x38, 0x21, 0x44, 0xc1, 0x64, 0xf7, 0x61, 0xb3, 0x67, 0xef, 0xce, 0x32, 0x33, 0x36, 0xa4, + 0xa3, 0xa2, 0x43, 0x82, 0x96, 0x8f, 0x42, 0x49, 0x15, 0xba, 0x13, 0xd5, 0x55, 0x16, 0x59, 0x6a, + 0xbe, 0x40, 0x2a, 0x34, 0xb3, 0x13, 0x7b, 0x63, 0x6f, 0xc0, 0x69, 0xae, 0xf3, 0xf3, 0xf2, 0xfb, + 0x3d, 0xef, 0xb3, 0x46, 0x1f, 0xf5, 0x1f, 0x0a, 0x3b, 0x64, 0x4e, 0x7f, 0x78, 0x02, 0x3c, 0x06, + 0x09, 0xc2, 0x19, 0x41, 0xec, 0x33, 0xee, 0x18, 0x03, 0x4d, 0x42, 0x47, 0x48, 0xc6, 0x69, 0x00, + 0xce, 0x68, 0xcf, 0x09, 0x20, 0x06, 0x4e, 0x25, 0xf8, 0x76, 0xc2, 0x99, 0x64, 0xf8, 0x95, 0xcc, + 0xcd, 0xa6, 0x49, 0x68, 0x1b, 0x37, 0x7b, 0xb4, 0x57, 0xbf, 0x17, 0x84, 0xf2, 0x74, 0x78, 0x62, + 0x7b, 0x2c, 0x72, 0x02, 0x16, 0x30, 0x47, 0x7b, 0x9f, 0x0c, 0xbf, 0xd6, 0x92, 0x16, 0xf4, 0xaf, + 0x8c, 0xa5, 0xde, 0xca, 0x05, 0xf3, 0x18, 0x2f, 0x8a, 0x54, 0x7f, 0x30, 0xf5, 0x89, 0xa8, 0x77, + 0x1a, 0xc6, 0xc0, 0xcf, 0x9c, 0xa4, 0x1f, 0x28, 0x85, 0x70, 0x22, 0x90, 0xb4, 0x08, 0xe5, 0xdc, + 0x84, 0xe2, 0xc3, 0x58, 0x86, 0x11, 0xcc, 0x01, 0xde, 0xff, 0x2f, 0x80, 0xf0, 0x4e, 0x21, 0xa2, + 0xb3, 0xb8, 0xd6, 0x8f, 0x6b, 0x68, 0xf3, 0x28, 0x6b, 0xc0, 0xc7, 0x03, 0x2a, 0x04, 0xfe, 0x0a, + 0x95, 0x55, 0x52, 0x3e, 0x95, 0xb4, 0x66, 0xed, 0x5a, 0xed, 0xca, 0xfe, 0x7d, 0x7b, 0xda, 0xac, + 0x09, 0xb7, 0x9d, 0xf4, 0x03, 0xa5, 0x10, 0xb6, 0xf2, 0xb6, 0x47, 0x7b, 0xf6, 0x93, 0x93, 0x67, + 0xe0, 0xc9, 0x1e, 0x48, 0xea, 0xe2, 0xf3, 0x71, 0x73, 0x29, 0x1d, 0x37, 0xd1, 0x54, 0x47, 0x26, + 0xac, 0xf8, 0x3d, 0x54, 0x49, 0x38, 0x1b, 0x85, 0x22, 0x64, 0x31, 0xf0, 0xda, 0xf2, 0xae, 0xd5, + 0xde, 0x70, 0xff, 0x6f, 0x20, 0x95, 0xc3, 0xa9, 0x89, 0xe4, 0xfd, 0x70, 0x80, 0x50, 0x42, 0x39, + 0x8d, 0x40, 0x02, 0x17, 0xb5, 0xd2, 0x6e, 0xa9, 0x5d, 0xd9, 0x7f, 0xd7, 0x2e, 0x9c, 0xa3, 0x9d, + 0xaf, 0xc8, 0x3e, 0x9c, 0xa0, 0xba, 0xb1, 0xe4, 0x67, 0xd3, 0xec, 0xa6, 0x06, 0x92, 0xa3, 0xc6, + 0x7d, 0xb4, 0xc5, 0xc1, 0x1b, 0xd0, 0x30, 0x3a, 0x64, 0x83, 0xd0, 0x3b, 0xab, 0xad, 0xe8, 0x0c, + 0xbb, 0xe9, 0xb8, 0xb9, 0x45, 0xf2, 0x86, 0xcb, 0x71, 0xf3, 0xfe, 0xfc, 0x06, 0xd8, 0x87, 0xc0, + 0x45, 0x28, 0x24, 0xc4, 0xf2, 0x29, 0x1b, 0x0c, 0x23, 0xb8, 0x86, 0x21, 0xd7, 0xb9, 0xf1, 0x03, + 0xb4, 0x19, 0xb1, 0x61, 0x2c, 0x9f, 0x24, 0x32, 0x64, 0xb1, 0xa8, 0xad, 0xee, 0x96, 0xda, 0x1b, + 0x6e, 0x35, 0x1d, 0x37, 0x37, 0x7b, 0x39, 0x3d, 0xb9, 0xe6, 0x85, 0x0f, 0xd0, 0x0e, 0x1d, 0x0c, + 0xd8, 0xb7, 0x59, 0x80, 0xee, 0x77, 0x09, 0x8d, 0x55, 0x97, 0x6a, 0x6b, 0xbb, 0x56, 0xbb, 0xec, + 0xd6, 0xd2, 0x71, 0x73, 0xa7, 0x53, 0x60, 0x27, 0x85, 0x28, 0xfc, 0x39, 0xda, 0x1e, 0x69, 0x95, + 0x1b, 0xc6, 0x7e, 0x18, 0x07, 0x3d, 0xe6, 0x43, 0x6d, 0x5d, 0x17, 0x7d, 0x37, 0x1d, 0x37, 0xb7, + 0x9f, 0xce, 0x1a, 0x2f, 0x8b, 0x94, 0x64, 0x9e, 0x04, 0x7f, 0x83, 0xb6, 0x75, 0x44, 0xf0, 0x8f, + 0x59, 0xc2, 0x06, 0x2c, 0x08, 0x41, 0xd4, 0xca, 0x7a, 0x74, 0xed, 0xfc, 0xe8, 0x54, 0xeb, 0xd4, + 0xdc, 0x8c, 0xd7, 0xd9, 0x11, 0x0c, 0xc0, 0x93, 0x8c, 0x1f, 0x03, 0x8f, 0xdc, 0xd7, 0xcd, 0xbc, + 0xb6, 0x3b, 0xb3, 0x54, 0x64, 0x9e, 0xbd, 0xfe, 0x21, 0xba, 0x33, 0x33, 0x70, 0x5c, 0x45, 0xa5, + 0x3e, 0x9c, 0xe9, 0x6d, 0xde, 0x20, 0xea, 0x27, 0xde, 0x41, 0xab, 0x23, 0x3a, 0x18, 0x42, 0xb6, + 0x7c, 0x24, 0x13, 0x3e, 0x58, 0x7e, 0x68, 0xb5, 0x7e, 0xb5, 0x50, 0x35, 0xbf, 0x3d, 0x07, 0xa1, + 0x90, 0xf8, 0xcb, 0xb9, 0x9b, 0xb0, 0x17, 0xbb, 0x09, 0x85, 0xd6, 0x17, 0x51, 0x35, 0x35, 0x94, + 0xaf, 0x34, 0xb9, 0x7b, 0xf8, 0x14, 0xad, 0x86, 0x12, 0x22, 0x51, 0x5b, 0xd6, 0x8d, 0x79, 0x63, + 0x81, 0x9d, 0x76, 0xb7, 0x0c, 0xdf, 0xea, 0x23, 0x85, 0x24, 0x19, 0x41, 0xeb, 0x97, 0x65, 0x54, + 0xcd, 0xe6, 0xd2, 0x91, 0x92, 0x7a, 0xa7, 0x11, 0xc4, 0xf2, 0x25, 0x1c, 0x74, 0x0f, 0xad, 0x88, + 0x04, 0x3c, 0xdd, 0xcc, 0xca, 0xfe, 0xdb, 0x37, 0xe4, 0x3f, 0x9b, 0xd8, 0x51, 0x02, 0x9e, 0xbb, + 0x69, 0x88, 0x57, 0x94, 0x44, 0x34, 0x0d, 0xfe, 0x0c, 0xad, 0x09, 0x49, 0xe5, 0x50, 0x1d, 0xb9, + 0x22, 0xbc, 0xb7, 0x28, 0xa1, 0x06, 0xb9, 0xff, 0x33, 0x94, 0x6b, 0x99, 0x4c, 0x0c, 0x59, 0xeb, + 0x37, 0x0b, 0xed, 0xcc, 0x42, 0x5e, 0xc2, 0x74, 0x0f, 0xae, 0x4f, 0xf7, 0xcd, 0x05, 0x8b, 0xb9, + 0x61, 0xc2, 0x7f, 0x58, 0xe8, 0xd5, 0xb9, 0xba, 0xd9, 0x90, 0x7b, 0xa0, 0xde, 0x84, 0x64, 0xe6, + 0xe5, 0x79, 0x4c, 0x23, 0xc8, 0xd6, 0x3e, 0x7b, 0x13, 0x0e, 0x0b, 0xec, 0xa4, 0x10, 0x85, 0x9f, + 0xa1, 0x6a, 0x18, 0x0f, 0xc2, 0x18, 0x32, 0xdd, 0xd1, 0x74, 0xbe, 0x85, 0x87, 0x3b, 0xcb, 0xac, + 0x87, 0xbb, 0x93, 0x8e, 0x9b, 0xd5, 0x47, 0x33, 0x2c, 0x64, 0x8e, 0xb7, 0xf5, 0x7b, 0xc1, 0x64, + 0x94, 0x01, 0xbf, 0x83, 0xca, 0x54, 0x6b, 0x80, 0x9b, 0x32, 0x26, 0x9d, 0xee, 0x18, 0x3d, 0x99, + 0x78, 0xe8, 0xbd, 0xd1, 0xad, 0x30, 0x89, 0x2e, 0xbc, 0x37, 0x1a, 0x94, 0xdb, 0x1b, 0x2d, 0x13, + 0x43, 0xa6, 0x92, 0x88, 0x99, 0x9f, 0xf5, 0xb2, 0x74, 0x3d, 0x89, 0xc7, 0x46, 0x4f, 0x26, 0x1e, + 0xad, 0xbf, 0x4b, 0x05, 0x03, 0xd2, 0x0b, 0x98, 0xab, 0xc6, 0xd7, 0xd5, 0x94, 0xe7, 0xaa, 0xf1, + 0x27, 0xd5, 0xf8, 0xf8, 0x67, 0x0b, 0x61, 0x3a, 0xa1, 0xe8, 0x5d, 0x2d, 0x68, 0xb6, 0x45, 0xdd, + 0x5b, 0x9d, 0x84, 0xdd, 0x99, 0xe3, 0xc9, 0xbe, 0x84, 0x75, 0x13, 0x1f, 0xcf, 0x3b, 0x90, 0x82, + 0xe0, 0xd8, 0x47, 0x95, 0x4c, 0xdb, 0xe5, 0x9c, 0x71, 0x73, 0x9e, 0xad, 0x7f, 0xcd, 0x45, 0x7b, + 0xba, 0x0d, 0xf5, 0x65, 0xef, 0x4c, 0xa1, 0x97, 0xe3, 0x66, 0x25, 0x67, 0x27, 0x79, 0x5a, 0x15, + 0xc5, 0x87, 0x69, 0x94, 0x95, 0xdb, 0x45, 0xf9, 0x04, 0x6e, 0x8e, 0x92, 0xa3, 0xad, 0x77, 0xd1, + 0x6b, 0x37, 0xb4, 0xe5, 0x56, 0xdf, 0x8b, 0x1f, 0x2c, 0x94, 0x8f, 0x81, 0x0f, 0xd0, 0x8a, 0xfa, + 0xbb, 0x65, 0x1e, 0x92, 0xbb, 0x8b, 0x3d, 0x24, 0xc7, 0x61, 0x04, 0xd3, 0xa7, 0x50, 0x49, 0x44, + 0xb3, 0xe0, 0xb7, 0xd0, 0x7a, 0x04, 0x42, 0xd0, 0xc0, 0x44, 0x76, 0xef, 0x18, 0xa7, 0xf5, 0x5e, + 0xa6, 0x26, 0x57, 0x76, 0xb7, 0x7d, 0x7e, 0xd1, 0x58, 0x7a, 0x7e, 0xd1, 0x58, 0x7a, 0x71, 0xd1, + 0x58, 0xfa, 0x3e, 0x6d, 0x58, 0xe7, 0x69, 0xc3, 0x7a, 0x9e, 0x36, 0xac, 0x17, 0x69, 0xc3, 0xfa, + 0x33, 0x6d, 0x58, 0x3f, 0xfd, 0xd5, 0x58, 0xfa, 0x62, 0x79, 0xb4, 0xf7, 0x4f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xe2, 0xd4, 0x42, 0x3d, 0x3c, 0x0b, 0x00, 0x00, +} + func (m *StorageClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -77,100 +366,108 @@ } func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StorageClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Provisioner))) - i += copy(dAtA[i:], m.Provisioner) - if len(m.Parameters) > 0 { - keysForParameters := make([]string, 0, len(m.Parameters)) - for k := range m.Parameters { - keysForParameters = append(keysForParameters, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) - for _, k := range keysForParameters { - dAtA[i] = 0x1a - i++ - v := m.Parameters[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) + if len(m.AllowedTopologies) > 0 { + for iNdEx := len(m.AllowedTopologies) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedTopologies[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 } } - if m.ReclaimPolicy != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReclaimPolicy))) - i += copy(dAtA[i:], *m.ReclaimPolicy) - } - if len(m.MountOptions) > 0 { - for _, s := range m.MountOptions { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + if m.VolumeBindingMode != nil { + i -= len(*m.VolumeBindingMode) + copy(dAtA[i:], *m.VolumeBindingMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeBindingMode))) + i-- + dAtA[i] = 0x3a } if m.AllowVolumeExpansion != nil { - dAtA[i] = 0x30 - i++ + i-- if *m.AllowVolumeExpansion { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ + i-- + dAtA[i] = 0x30 } - if m.VolumeBindingMode != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeBindingMode))) - i += copy(dAtA[i:], *m.VolumeBindingMode) + if len(m.MountOptions) > 0 { + for iNdEx := len(m.MountOptions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.MountOptions[iNdEx]) + copy(dAtA[i:], m.MountOptions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MountOptions[iNdEx]))) + i-- + dAtA[i] = 0x2a + } } - if len(m.AllowedTopologies) > 0 { - for _, msg := range m.AllowedTopologies { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if m.ReclaimPolicy != nil { + i -= len(*m.ReclaimPolicy) + copy(dAtA[i:], *m.ReclaimPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReclaimPolicy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Parameters) > 0 { + keysForParameters := make([]string, 0, len(m.Parameters)) + for k := range m.Parameters { + keysForParameters = append(keysForParameters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) + for iNdEx := len(keysForParameters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Parameters[string(keysForParameters[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForParameters[iNdEx]) + copy(dAtA[i:], keysForParameters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForParameters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Provisioner) + copy(dAtA[i:], m.Provisioner) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Provisioner))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StorageClassList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -178,125 +475,522 @@ } func (m *StorageClassList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StorageClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *VolumeAttachment) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return offset + 1 + return dAtA[:n], nil } -func (m *StorageClass) Size() (n int) { + +func (m *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Provisioner) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Parameters) > 0 { - for k, v := range m.Parameters { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.ReclaimPolicy != nil { - l = len(*m.ReclaimPolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.MountOptions) > 0 { - for _, s := range m.MountOptions { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.AllowVolumeExpansion != nil { - n += 2 - } - if m.VolumeBindingMode != nil { - l = len(*m.VolumeBindingMode) - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.AllowedTopologies) > 0 { - for _, e := range m.AllowedTopologies { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *StorageClassList) Size() (n int) { +func (m *VolumeAttachmentList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeAttachmentSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.InlineVolumeSpec != nil { + { + size, err := m.InlineVolumeSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.PersistentVolumeName != nil { + i -= len(*m.PersistentVolumeName) + copy(dAtA[i:], *m.PersistentVolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PersistentVolumeName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.NodeName) + copy(dAtA[i:], m.NodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) + i-- + dAtA[i] = 0x1a + { + size, err := m.Source.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Attacher) + copy(dAtA[i:], m.Attacher) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Attacher))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DetachError != nil { + { + size, err := m.DetachError.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.AttachError != nil { + { + size, err := m.AttachError.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.AttachmentMetadata) > 0 { + keysForAttachmentMetadata := make([]string, 0, len(m.AttachmentMetadata)) + for k := range m.AttachmentMetadata { + keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) + for iNdEx := len(keysForAttachmentMetadata) - 1; iNdEx >= 0; iNdEx-- { + v := m.AttachmentMetadata[string(keysForAttachmentMetadata[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForAttachmentMetadata[iNdEx]) + copy(dAtA[i:], keysForAttachmentMetadata[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAttachmentMetadata[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i-- + if m.Attached { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *VolumeError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Time.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *StorageClass) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Provisioner) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Parameters) > 0 { + for k, v := range m.Parameters { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.ReclaimPolicy != nil { + l = len(*m.ReclaimPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.MountOptions) > 0 { + for _, s := range m.MountOptions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.AllowVolumeExpansion != nil { + n += 2 + } + if m.VolumeBindingMode != nil { + l = len(*m.VolumeBindingMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.AllowedTopologies) > 0 { + for _, e := range m.AllowedTopologies { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } -func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break +func (m *StorageClassList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *VolumeAttachment) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeAttachmentList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *VolumeAttachmentSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PersistentVolumeName != nil { + l = len(*m.PersistentVolumeName) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.InlineVolumeSpec != nil { + l = m.InlineVolumeSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VolumeAttachmentSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Attacher) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Source.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeAttachmentStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + if len(m.AttachmentMetadata) > 0 { + for k, v := range m.AttachmentMetadata { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) } } + if m.AttachError != nil { + l = m.AttachError.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DetachError != nil { + l = m.DetachError.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } + +func (m *VolumeError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Time.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } @@ -304,6 +998,11 @@ if this == nil { return "nil" } + repeatedStringForAllowedTopologies := "[]TopologySelectorTerm{" + for _, f := range this.AllowedTopologies { + repeatedStringForAllowedTopologies += fmt.Sprintf("%v", f) + "," + } + repeatedStringForAllowedTopologies += "}" keysForParameters := make([]string, 0, len(this.Parameters)) for k := range this.Parameters { keysForParameters = append(keysForParameters, k) @@ -315,14 +1014,14 @@ } mapStringForParameters += "}" s := strings.Join([]string{`&StorageClass{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Provisioner:` + fmt.Sprintf("%v", this.Provisioner) + `,`, `Parameters:` + mapStringForParameters + `,`, `ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`, `MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`, `AllowVolumeExpansion:` + valueToStringGenerated(this.AllowVolumeExpansion) + `,`, `VolumeBindingMode:` + valueToStringGenerated(this.VolumeBindingMode) + `,`, - `AllowedTopologies:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedTopologies), "TopologySelectorTerm", "k8s_io_api_core_v1.TopologySelectorTerm", 1), `&`, ``, 1) + `,`, + `AllowedTopologies:` + repeatedStringForAllowedTopologies + `,`, `}`, }, "") return s @@ -331,22 +1030,1024 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]StorageClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "StorageClass", "StorageClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&StorageClassList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "StorageClass", "StorageClass", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s } -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { +func (this *VolumeAttachment) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeAttachment{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "VolumeAttachmentSpec", "VolumeAttachmentSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "VolumeAttachmentStatus", "VolumeAttachmentStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentList) String() string { + if this == nil { return "nil" } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) + repeatedStringForItems := "[]VolumeAttachment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "VolumeAttachment", "VolumeAttachment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&VolumeAttachmentList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeAttachmentSource{`, + `PersistentVolumeName:` + valueToStringGenerated(this.PersistentVolumeName) + `,`, + `InlineVolumeSpec:` + strings.Replace(fmt.Sprintf("%v", this.InlineVolumeSpec), "PersistentVolumeSpec", "v11.PersistentVolumeSpec", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeAttachmentSpec{`, + `Attacher:` + fmt.Sprintf("%v", this.Attacher) + `,`, + `Source:` + strings.Replace(strings.Replace(this.Source.String(), "VolumeAttachmentSource", "VolumeAttachmentSource", 1), `&`, ``, 1) + `,`, + `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentStatus) String() string { + if this == nil { + return "nil" + } + keysForAttachmentMetadata := make([]string, 0, len(this.AttachmentMetadata)) + for k := range this.AttachmentMetadata { + keysForAttachmentMetadata = append(keysForAttachmentMetadata, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) + mapStringForAttachmentMetadata := "map[string]string{" + for _, k := range keysForAttachmentMetadata { + mapStringForAttachmentMetadata += fmt.Sprintf("%v: %v,", k, this.AttachmentMetadata[k]) + } + mapStringForAttachmentMetadata += "}" + s := strings.Join([]string{`&VolumeAttachmentStatus{`, + `Attached:` + fmt.Sprintf("%v", this.Attached) + `,`, + `AttachmentMetadata:` + mapStringForAttachmentMetadata + `,`, + `AttachError:` + strings.Replace(this.AttachError.String(), "VolumeError", "VolumeError", 1) + `,`, + `DetachError:` + strings.Replace(this.DetachError.String(), "VolumeError", "VolumeError", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeError) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeError{`, + `Time:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Time), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *StorageClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Provisioner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Parameters == nil { + m.Parameters = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Parameters[mapkey] = mapvalue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReclaimPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := k8s_io_api_core_v1.PersistentVolumeReclaimPolicy(dAtA[iNdEx:postIndex]) + m.ReclaimPolicy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MountOptions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MountOptions = append(m.MountOptions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowVolumeExpansion", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AllowVolumeExpansion = &b + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeBindingMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := VolumeBindingMode(dAtA[iNdEx:postIndex]) + m.VolumeBindingMode = &s + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedTopologies", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedTopologies = append(m.AllowedTopologies, v11.TopologySelectorTerm{}) + if err := m.AllowedTopologies[len(m.AllowedTopologies)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StorageClassList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StorageClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, StorageClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeAttachment) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeAttachment: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeAttachment: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeAttachmentList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeAttachmentList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeAttachmentList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, VolumeAttachment{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeAttachmentSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeAttachmentSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeAttachmentSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PersistentVolumeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.PersistentVolumeName = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InlineVolumeSpec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.InlineVolumeSpec == nil { + m.InlineVolumeSpec = &v11.PersistentVolumeSpec{} + } + if err := m.InlineVolumeSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } -func (m *StorageClass) Unmarshal(dAtA []byte) error { +func (m *VolumeAttachmentSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -361,7 +2062,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -369,17 +2070,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + return fmt.Errorf("proto: VolumeAttachmentSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: VolumeAttachmentSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Attacher", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -389,27 +2090,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Attacher = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -419,26 +2122,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Provisioner = string(dAtA[iNdEx:postIndex]) + if err := m.Source.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -448,19 +2155,82 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 + m.NodeName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeAttachmentStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeAttachmentStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeAttachmentStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Attached", wireType) + } + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -470,12 +2240,17 @@ } b := dAtA[iNdEx] iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapkey uint64 + m.Attached = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AttachmentMetadata", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -485,26 +2260,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.Parameters == nil { - m.Parameters = make(map[string]string) + if m.AttachmentMetadata == nil { + m.AttachmentMetadata = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -514,47 +2292,92 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Parameters[mapkey] = mapvalue - } else { - var mapvalue string - m.Parameters[mapkey] = mapvalue } + m.AttachmentMetadata[mapkey] = mapvalue iNdEx = postIndex - case 4: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ReclaimPolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AttachError", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -564,105 +2387,31 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := k8s_io_api_core_v1.PersistentVolumeReclaimPolicy(dAtA[iNdEx:postIndex]) - m.ReclaimPolicy = &s - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MountOptions", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.MountOptions = append(m.MountOptions, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowVolumeExpansion", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.AllowVolumeExpansion = &b - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field VolumeBindingMode", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated + if m.AttachError == nil { + m.AttachError = &VolumeError{} } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF + if err := m.AttachError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - s := VolumeBindingMode(dAtA[iNdEx:postIndex]) - m.VolumeBindingMode = &s iNdEx = postIndex - case 8: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowedTopologies", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DetachError", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -674,7 +2423,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -683,11 +2432,16 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedTopologies = append(m.AllowedTopologies, k8s_io_api_core_v1.TopologySelectorTerm{}) - if err := m.AllowedTopologies[len(m.AllowedTopologies)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.DetachError == nil { + m.DetachError = &VolumeError{} + } + if err := m.DetachError.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -700,6 +2454,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -712,7 +2469,7 @@ } return nil } -func (m *StorageClassList) Unmarshal(dAtA []byte) error { +func (m *VolumeError) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -727,7 +2484,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -735,15 +2492,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: StorageClassList: wiretype end group for non-group") + return fmt.Errorf("proto: VolumeError: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: StorageClassList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: VolumeError: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -755,7 +2512,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -764,18 +2521,21 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Time.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -785,22 +2545,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, StorageClass{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Message = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -811,6 +2572,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -877,10 +2641,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -909,6 +2676,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -927,52 +2697,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/storage/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 656 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xcd, 0x6e, 0xd3, 0x4a, - 0x14, 0x8e, 0x93, 0x9b, 0xde, 0x74, 0xd2, 0xea, 0x26, 0xbe, 0xbd, 0x92, 0x6f, 0x16, 0x4e, 0x54, - 0x36, 0x11, 0x12, 0xe3, 0xa6, 0x14, 0x54, 0x21, 0x81, 0x54, 0xa3, 0x4a, 0x20, 0xb5, 0x6a, 0xe4, - 0x56, 0x15, 0x42, 0x2c, 0x98, 0x38, 0x07, 0x77, 0x88, 0xed, 0x31, 0x33, 0x63, 0x43, 0x76, 0xbc, - 0x00, 0x12, 0xcf, 0xc3, 0x13, 0x74, 0xd9, 0x65, 0x57, 0x16, 0x35, 0x6f, 0xd1, 0x15, 0xf2, 0x0f, - 0x8d, 0x9b, 0x04, 0xd1, 0xdd, 0xcc, 0x77, 0xbe, 0xef, 0x3b, 0x33, 0xe7, 0x07, 0x3d, 0x9b, 0xec, - 0x0a, 0x4c, 0x99, 0x31, 0x09, 0x47, 0xc0, 0x7d, 0x90, 0x20, 0x8c, 0x08, 0xfc, 0x31, 0xe3, 0x46, - 0x11, 0x20, 0x01, 0x35, 0x84, 0x64, 0x9c, 0x38, 0x60, 0x44, 0x03, 0xc3, 0x01, 0x1f, 0x38, 0x91, - 0x30, 0xc6, 0x01, 0x67, 0x92, 0xa9, 0xff, 0xe5, 0x34, 0x4c, 0x02, 0x8a, 0x0b, 0x1a, 0x8e, 0x06, - 0x9d, 0x07, 0x0e, 0x95, 0x67, 0xe1, 0x08, 0xdb, 0xcc, 0x33, 0x1c, 0xe6, 0x30, 0x23, 0x63, 0x8f, - 0xc2, 0x77, 0xd9, 0x2d, 0xbb, 0x64, 0xa7, 0xdc, 0xa5, 0xb3, 0x59, 0x4a, 0x66, 0x33, 0xbe, 0x2c, - 0x53, 0x67, 0x67, 0xc6, 0xf1, 0x88, 0x7d, 0x46, 0x7d, 0xe0, 0x53, 0x23, 0x98, 0x38, 0x29, 0x20, - 0x0c, 0x0f, 0x24, 0x59, 0xa6, 0x32, 0x7e, 0xa7, 0xe2, 0xa1, 0x2f, 0xa9, 0x07, 0x0b, 0x82, 0xc7, - 0x7f, 0x12, 0x08, 0xfb, 0x0c, 0x3c, 0x32, 0xaf, 0xdb, 0xfc, 0xb2, 0x82, 0xd6, 0x8e, 0xf3, 0x02, - 0x3c, 0x77, 0x89, 0x10, 0xea, 0x5b, 0xd4, 0x48, 0x1f, 0x35, 0x26, 0x92, 0x68, 0x4a, 0x4f, 0xe9, - 0x37, 0xb7, 0xb7, 0xf0, 0xac, 0x58, 0x37, 0xde, 0x38, 0x98, 0x38, 0x29, 0x20, 0x70, 0xca, 0xc6, - 0xd1, 0x00, 0x1f, 0x8d, 0xde, 0x83, 0x2d, 0x0f, 0x41, 0x12, 0x53, 0x3d, 0x8f, 0xbb, 0x95, 0x24, - 0xee, 0xa2, 0x19, 0x66, 0xdd, 0xb8, 0xaa, 0x8f, 0x50, 0x33, 0xe0, 0x2c, 0xa2, 0x82, 0x32, 0x1f, - 0xb8, 0x56, 0xed, 0x29, 0xfd, 0x55, 0xf3, 0xdf, 0x42, 0xd2, 0x1c, 0xce, 0x42, 0x56, 0x99, 0xa7, - 0x3a, 0x08, 0x05, 0x84, 0x13, 0x0f, 0x24, 0x70, 0xa1, 0xd5, 0x7a, 0xb5, 0x7e, 0x73, 0xfb, 0x21, - 0x5e, 0xda, 0x47, 0x5c, 0xfe, 0x11, 0x1e, 0xde, 0xa8, 0xf6, 0x7d, 0xc9, 0xa7, 0xb3, 0xd7, 0xcd, - 0x02, 0x56, 0xc9, 0x5a, 0x9d, 0xa0, 0x75, 0x0e, 0xb6, 0x4b, 0xa8, 0x37, 0x64, 0x2e, 0xb5, 0xa7, - 0xda, 0x5f, 0xd9, 0x0b, 0xf7, 0x93, 0xb8, 0xbb, 0x6e, 0x95, 0x03, 0xd7, 0x71, 0x77, 0x6b, 0x71, - 0x02, 0xf0, 0x10, 0xb8, 0xa0, 0x42, 0x82, 0x2f, 0x4f, 0x99, 0x1b, 0x7a, 0x70, 0x4b, 0x63, 0xdd, - 0xf6, 0x56, 0x77, 0xd0, 0x9a, 0xc7, 0x42, 0x5f, 0x1e, 0x05, 0x92, 0x32, 0x5f, 0x68, 0xf5, 0x5e, - 0xad, 0xbf, 0x6a, 0xb6, 0x92, 0xb8, 0xbb, 0x76, 0x58, 0xc2, 0xad, 0x5b, 0x2c, 0xf5, 0x00, 0x6d, - 0x10, 0xd7, 0x65, 0x1f, 0xf3, 0x04, 0xfb, 0x9f, 0x02, 0xe2, 0xa7, 0x55, 0xd2, 0x56, 0x7a, 0x4a, - 0xbf, 0x61, 0x6a, 0x49, 0xdc, 0xdd, 0xd8, 0x5b, 0x12, 0xb7, 0x96, 0xaa, 0xd4, 0x57, 0xa8, 0x1d, - 0x65, 0x90, 0x49, 0xfd, 0x31, 0xf5, 0x9d, 0x43, 0x36, 0x06, 0xed, 0xef, 0xec, 0xd3, 0xf7, 0x93, - 0xb8, 0xdb, 0x3e, 0x9d, 0x0f, 0x5e, 0x2f, 0x03, 0xad, 0x45, 0x13, 0xf5, 0x03, 0x6a, 0x67, 0x19, - 0x61, 0x7c, 0xc2, 0x02, 0xe6, 0x32, 0x87, 0x82, 0xd0, 0x1a, 0x59, 0xeb, 0xfa, 0xe5, 0xd6, 0xa5, - 0xa5, 0x4b, 0xfb, 0x56, 0xb0, 0xa6, 0xc7, 0xe0, 0x82, 0x2d, 0x19, 0x3f, 0x01, 0xee, 0x99, 0xff, - 0x17, 0xfd, 0x6a, 0xef, 0xcd, 0x5b, 0x59, 0x8b, 0xee, 0x9d, 0xa7, 0xe8, 0x9f, 0xb9, 0x86, 0xab, - 0x2d, 0x54, 0x9b, 0xc0, 0x34, 0x9b, 0xe6, 0x55, 0x2b, 0x3d, 0xaa, 0x1b, 0xa8, 0x1e, 0x11, 0x37, - 0x84, 0x7c, 0xf8, 0xac, 0xfc, 0xf2, 0xa4, 0xba, 0xab, 0x6c, 0x7e, 0x53, 0x50, 0xab, 0x3c, 0x3d, - 0x07, 0x54, 0x48, 0xf5, 0xcd, 0xc2, 0x4e, 0xe0, 0xbb, 0xed, 0x44, 0xaa, 0xce, 0x36, 0xa2, 0x55, - 0xfc, 0xa1, 0xf1, 0x0b, 0x29, 0xed, 0xc3, 0x0b, 0x54, 0xa7, 0x12, 0x3c, 0xa1, 0x55, 0xb3, 0xc2, - 0xdc, 0xbb, 0xc3, 0x4c, 0x9b, 0xeb, 0x85, 0x5f, 0xfd, 0x65, 0xaa, 0xb4, 0x72, 0x03, 0xb3, 0x7f, - 0x7e, 0xa5, 0x57, 0x2e, 0xae, 0xf4, 0xca, 0xe5, 0x95, 0x5e, 0xf9, 0x9c, 0xe8, 0xca, 0x79, 0xa2, - 0x2b, 0x17, 0x89, 0xae, 0x5c, 0x26, 0xba, 0xf2, 0x3d, 0xd1, 0x95, 0xaf, 0x3f, 0xf4, 0xca, 0xeb, - 0x6a, 0x34, 0xf8, 0x19, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x64, 0x41, 0x83, 0x40, 0x05, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -31,12 +31,12 @@ // StorageClass describes the parameters for a class of storage for // which PersistentVolumes can be dynamically provisioned. -// +// // StorageClasses are non-namespaced; the name of the storage class // according to etcd is in ObjectMeta.Name. message StorageClass { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -65,16 +65,14 @@ // VolumeBindingMode indicates how PersistentVolumeClaims should be // provisioned and bound. When unset, VolumeBindingImmediate is used. - // This field is alpha-level and is only honored by servers that enable - // the VolumeScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional optional string volumeBindingMode = 7; // Restrict the node topologies where volumes can be dynamically provisioned. // Each volume plugin defines its own supported topology specifications. // An empty TopologySelectorTerm list means there is no topology restriction. - // This field is alpha-level and is only honored by servers that enable - // the DynamicProvisioningScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional repeated k8s.io.api.core.v1.TopologySelectorTerm allowedTopologies = 8; } @@ -82,7 +80,7 @@ // StorageClassList is a collection of storage classes. message StorageClassList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -90,3 +88,108 @@ repeated StorageClass items = 2; } +// VolumeAttachment captures the intent to attach or detach the specified volume +// to/from the specified node. +// +// VolumeAttachment objects are non-namespaced. +message VolumeAttachment { + // Standard object metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the desired attach/detach volume behavior. + // Populated by the Kubernetes system. + optional VolumeAttachmentSpec spec = 2; + + // Status of the VolumeAttachment request. + // Populated by the entity completing the attach or detach + // operation, i.e. the external-attacher. + // +optional + optional VolumeAttachmentStatus status = 3; +} + +// VolumeAttachmentList is a collection of VolumeAttachment objects. +message VolumeAttachmentList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of VolumeAttachments + repeated VolumeAttachment items = 2; +} + +// VolumeAttachmentSource represents a volume that should be attached. +// Right now only PersistenVolumes can be attached via external attacher, +// in future we may allow also inline volumes in pods. +// Exactly one member can be set. +message VolumeAttachmentSource { + // Name of the persistent volume to attach. + // +optional + optional string persistentVolumeName = 1; + + // inlineVolumeSpec contains all the information necessary to attach + // a persistent volume defined by a pod's inline VolumeSource. This field + // is populated only for the CSIMigration feature. It contains + // translated fields from a pod's inline VolumeSource to a + // PersistentVolumeSpec. This field is alpha-level and is only + // honored by servers that enabled the CSIMigration feature. + // +optional + optional k8s.io.api.core.v1.PersistentVolumeSpec inlineVolumeSpec = 2; +} + +// VolumeAttachmentSpec is the specification of a VolumeAttachment request. +message VolumeAttachmentSpec { + // Attacher indicates the name of the volume driver that MUST handle this + // request. This is the name returned by GetPluginName(). + optional string attacher = 1; + + // Source represents the volume that should be attached. + optional VolumeAttachmentSource source = 2; + + // The node that the volume should be attached to. + optional string nodeName = 3; +} + +// VolumeAttachmentStatus is the status of a VolumeAttachment request. +message VolumeAttachmentStatus { + // Indicates the volume is successfully attached. + // This field must only be set by the entity completing the attach + // operation, i.e. the external-attacher. + optional bool attached = 1; + + // Upon successful attach, this field is populated with any + // information returned by the attach operation that must be passed + // into subsequent WaitForAttach or Mount calls. + // This field must only be set by the entity completing the attach + // operation, i.e. the external-attacher. + // +optional + map attachmentMetadata = 2; + + // The last error encountered during attach operation, if any. + // This field must only be set by the entity completing the attach + // operation, i.e. the external-attacher. + // +optional + optional VolumeError attachError = 3; + + // The last error encountered during detach operation, if any. + // This field must only be set by the entity completing the detach + // operation, i.e. the external-attacher. + // +optional + optional VolumeError detachError = 4; +} + +// VolumeError captures an error encountered during a volume operation. +message VolumeError { + // Time the error was encountered. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time time = 1; + + // String detailing the error encountered during Attach or Detach operation. + // This string may be logged, so it should not contain sensitive + // information. + // +optional + optional string message = 2; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,6 +46,9 @@ scheme.AddKnownTypes(SchemeGroupVersion, &StorageClass{}, &StorageClassList{}, + + &VolumeAttachment{}, + &VolumeAttachmentList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ type StorageClass struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -62,16 +62,14 @@ // VolumeBindingMode indicates how PersistentVolumeClaims should be // provisioned and bound. When unset, VolumeBindingImmediate is used. - // This field is alpha-level and is only honored by servers that enable - // the VolumeScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional VolumeBindingMode *VolumeBindingMode `json:"volumeBindingMode,omitempty" protobuf:"bytes,7,opt,name=volumeBindingMode"` // Restrict the node topologies where volumes can be dynamically provisioned. // Each volume plugin defines its own supported topology specifications. // An empty TopologySelectorTerm list means there is no topology restriction. - // This field is alpha-level and is only honored by servers that enable - // the DynamicProvisioningScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional AllowedTopologies []v1.TopologySelectorTerm `json:"allowedTopologies,omitempty" protobuf:"bytes,8,rep,name=allowedTopologies"` } @@ -82,7 +80,7 @@ type StorageClassList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -104,3 +102,117 @@ // binding will occur during Pod scheduing. VolumeBindingWaitForFirstConsumer VolumeBindingMode = "WaitForFirstConsumer" ) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeAttachment captures the intent to attach or detach the specified volume +// to/from the specified node. +// +// VolumeAttachment objects are non-namespaced. +type VolumeAttachment struct { + metav1.TypeMeta `json:",inline"` + + // Standard object metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the desired attach/detach volume behavior. + // Populated by the Kubernetes system. + Spec VolumeAttachmentSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + + // Status of the VolumeAttachment request. + // Populated by the entity completing the attach or detach + // operation, i.e. the external-attacher. + // +optional + Status VolumeAttachmentStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// VolumeAttachmentList is a collection of VolumeAttachment objects. +type VolumeAttachmentList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of VolumeAttachments + Items []VolumeAttachment `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// VolumeAttachmentSpec is the specification of a VolumeAttachment request. +type VolumeAttachmentSpec struct { + // Attacher indicates the name of the volume driver that MUST handle this + // request. This is the name returned by GetPluginName(). + Attacher string `json:"attacher" protobuf:"bytes,1,opt,name=attacher"` + + // Source represents the volume that should be attached. + Source VolumeAttachmentSource `json:"source" protobuf:"bytes,2,opt,name=source"` + + // The node that the volume should be attached to. + NodeName string `json:"nodeName" protobuf:"bytes,3,opt,name=nodeName"` +} + +// VolumeAttachmentSource represents a volume that should be attached. +// Right now only PersistenVolumes can be attached via external attacher, +// in future we may allow also inline volumes in pods. +// Exactly one member can be set. +type VolumeAttachmentSource struct { + // Name of the persistent volume to attach. + // +optional + PersistentVolumeName *string `json:"persistentVolumeName,omitempty" protobuf:"bytes,1,opt,name=persistentVolumeName"` + + // inlineVolumeSpec contains all the information necessary to attach + // a persistent volume defined by a pod's inline VolumeSource. This field + // is populated only for the CSIMigration feature. It contains + // translated fields from a pod's inline VolumeSource to a + // PersistentVolumeSpec. This field is alpha-level and is only + // honored by servers that enabled the CSIMigration feature. + // +optional + InlineVolumeSpec *v1.PersistentVolumeSpec `json:"inlineVolumeSpec,omitempty" protobuf:"bytes,2,opt,name=inlineVolumeSpec"` +} + +// VolumeAttachmentStatus is the status of a VolumeAttachment request. +type VolumeAttachmentStatus struct { + // Indicates the volume is successfully attached. + // This field must only be set by the entity completing the attach + // operation, i.e. the external-attacher. + Attached bool `json:"attached" protobuf:"varint,1,opt,name=attached"` + + // Upon successful attach, this field is populated with any + // information returned by the attach operation that must be passed + // into subsequent WaitForAttach or Mount calls. + // This field must only be set by the entity completing the attach + // operation, i.e. the external-attacher. + // +optional + AttachmentMetadata map[string]string `json:"attachmentMetadata,omitempty" protobuf:"bytes,2,rep,name=attachmentMetadata"` + + // The last error encountered during attach operation, if any. + // This field must only be set by the entity completing the attach + // operation, i.e. the external-attacher. + // +optional + AttachError *VolumeError `json:"attachError,omitempty" protobuf:"bytes,3,opt,name=attachError,casttype=VolumeError"` + + // The last error encountered during detach operation, if any. + // This field must only be set by the entity completing the detach + // operation, i.e. the external-attacher. + // +optional + DetachError *VolumeError `json:"detachError,omitempty" protobuf:"bytes,4,opt,name=detachError,casttype=VolumeError"` +} + +// VolumeError captures an error encountered during a volume operation. +type VolumeError struct { + // Time the error was encountered. + // +optional + Time metav1.Time `json:"time,omitempty" protobuf:"bytes,1,opt,name=time"` + + // String detailing the error encountered during Attach or Detach operation. + // This string may be logged, so it should not contain sensitive + // information. + // +optional + Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,14 +29,14 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_StorageClass = map[string]string{ "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "provisioner": "Provisioner indicates the type of the provisioner.", "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", "reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", "mountOptions": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", "allowVolumeExpansion": "AllowVolumeExpansion shows whether the storage class allow volume expand", - "volumeBindingMode": "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is alpha-level and is only honored by servers that enable the VolumeScheduling feature.", - "allowedTopologies": "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.", + "volumeBindingMode": "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", + "allowedTopologies": "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", } func (StorageClass) SwaggerDoc() map[string]string { @@ -45,7 +45,7 @@ var map_StorageClassList = map[string]string{ "": "StorageClassList is a collection of storage classes.", - "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of StorageClasses", } @@ -53,4 +53,67 @@ return map_StorageClassList } +var map_VolumeAttachment = map[string]string{ + "": "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", + "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", + "status": "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", +} + +func (VolumeAttachment) SwaggerDoc() map[string]string { + return map_VolumeAttachment +} + +var map_VolumeAttachmentList = map[string]string{ + "": "VolumeAttachmentList is a collection of VolumeAttachment objects.", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "Items is the list of VolumeAttachments", +} + +func (VolumeAttachmentList) SwaggerDoc() map[string]string { + return map_VolumeAttachmentList +} + +var map_VolumeAttachmentSource = map[string]string{ + "": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", + "persistentVolumeName": "Name of the persistent volume to attach.", +} + +func (VolumeAttachmentSource) SwaggerDoc() map[string]string { + return map_VolumeAttachmentSource +} + +var map_VolumeAttachmentSpec = map[string]string{ + "": "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", + "attacher": "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", + "source": "Source represents the volume that should be attached.", + "nodeName": "The node that the volume should be attached to.", +} + +func (VolumeAttachmentSpec) SwaggerDoc() map[string]string { + return map_VolumeAttachmentSpec +} + +var map_VolumeAttachmentStatus = map[string]string{ + "": "VolumeAttachmentStatus is the status of a VolumeAttachment request.", + "attached": "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + "attachmentMetadata": "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + "attachError": "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + "detachError": "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", +} + +func (VolumeAttachmentStatus) SwaggerDoc() map[string]string { + return map_VolumeAttachmentStatus +} + +var map_VolumeError = map[string]string{ + "": "VolumeError captures an error encountered during a volume operation.", + "time": "Time the error was encountered.", + "message": "String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.", +} + +func (VolumeError) SwaggerDoc() map[string]string { + return map_VolumeError +} + // AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ package v1 import ( - core_v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -39,12 +39,8 @@ } if in.ReclaimPolicy != nil { in, out := &in.ReclaimPolicy, &out.ReclaimPolicy - if *in == nil { - *out = nil - } else { - *out = new(core_v1.PersistentVolumeReclaimPolicy) - **out = **in - } + *out = new(corev1.PersistentVolumeReclaimPolicy) + **out = **in } if in.MountOptions != nil { in, out := &in.MountOptions, &out.MountOptions @@ -53,25 +49,17 @@ } if in.AllowVolumeExpansion != nil { in, out := &in.AllowVolumeExpansion, &out.AllowVolumeExpansion - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.VolumeBindingMode != nil { in, out := &in.VolumeBindingMode, &out.VolumeBindingMode - if *in == nil { - *out = nil - } else { - *out = new(VolumeBindingMode) - **out = **in - } + *out = new(VolumeBindingMode) + **out = **in } if in.AllowedTopologies != nil { in, out := &in.AllowedTopologies, &out.AllowedTopologies - *out = make([]core_v1.TopologySelectorTerm, len(*in)) + *out = make([]corev1.TopologySelectorTerm, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -101,7 +89,7 @@ func (in *StorageClassList) DeepCopyInto(out *StorageClassList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]StorageClass, len(*in)) @@ -129,3 +117,157 @@ } return nil } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeAttachment) DeepCopyInto(out *VolumeAttachment) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttachment. +func (in *VolumeAttachment) DeepCopy() *VolumeAttachment { + if in == nil { + return nil + } + out := new(VolumeAttachment) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VolumeAttachment) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeAttachmentList) DeepCopyInto(out *VolumeAttachmentList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]VolumeAttachment, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttachmentList. +func (in *VolumeAttachmentList) DeepCopy() *VolumeAttachmentList { + if in == nil { + return nil + } + out := new(VolumeAttachmentList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VolumeAttachmentList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeAttachmentSource) DeepCopyInto(out *VolumeAttachmentSource) { + *out = *in + if in.PersistentVolumeName != nil { + in, out := &in.PersistentVolumeName, &out.PersistentVolumeName + *out = new(string) + **out = **in + } + if in.InlineVolumeSpec != nil { + in, out := &in.InlineVolumeSpec, &out.InlineVolumeSpec + *out = new(corev1.PersistentVolumeSpec) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttachmentSource. +func (in *VolumeAttachmentSource) DeepCopy() *VolumeAttachmentSource { + if in == nil { + return nil + } + out := new(VolumeAttachmentSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeAttachmentSpec) DeepCopyInto(out *VolumeAttachmentSpec) { + *out = *in + in.Source.DeepCopyInto(&out.Source) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttachmentSpec. +func (in *VolumeAttachmentSpec) DeepCopy() *VolumeAttachmentSpec { + if in == nil { + return nil + } + out := new(VolumeAttachmentSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeAttachmentStatus) DeepCopyInto(out *VolumeAttachmentStatus) { + *out = *in + if in.AttachmentMetadata != nil { + in, out := &in.AttachmentMetadata, &out.AttachmentMetadata + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.AttachError != nil { + in, out := &in.AttachError, &out.AttachError + *out = new(VolumeError) + (*in).DeepCopyInto(*out) + } + if in.DetachError != nil { + in, out := &in.DetachError, &out.DetachError + *out = new(VolumeError) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeAttachmentStatus. +func (in *VolumeAttachmentStatus) DeepCopy() *VolumeAttachmentStatus { + if in == nil { + return nil + } + out := new(VolumeAttachmentStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeError) DeepCopyInto(out *VolumeError) { + *out = *in + in.Time.DeepCopyInto(&out.Time) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeError. +func (in *VolumeError) DeepCopy() *VolumeError { + if in == nil { + return nil + } + out := new(VolumeError) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,7 +14,9 @@ limitations under the License. */ -// +k8s:deepcopy-gen=package,register +// +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=storage.k8s.io // +k8s:openapi-gen=true + package v1alpha1 // import "k8s.io/api/storage/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,36 +14,25 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/storage/v1alpha1/generated.proto -// DO NOT EDIT! -/* - Package v1alpha1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/storage/v1alpha1/generated.proto - - It has these top-level messages: - VolumeAttachment - VolumeAttachmentList - VolumeAttachmentSource - VolumeAttachmentSpec - VolumeAttachmentStatus - VolumeError -*/ package v1alpha1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" - -import io "io" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + v11 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -56,29 +45,173 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } -func (*VolumeAttachment) ProtoMessage() {} -func (*VolumeAttachment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } -func (*VolumeAttachmentList) ProtoMessage() {} -func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } -func (*VolumeAttachmentSource) ProtoMessage() {} -func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } -func (*VolumeAttachmentSpec) ProtoMessage() {} -func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } -func (*VolumeAttachmentStatus) ProtoMessage() {} -func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *VolumeError) Reset() { *m = VolumeError{} } -func (*VolumeError) ProtoMessage() {} -func (*VolumeError) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } +func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } +func (*VolumeAttachment) ProtoMessage() {} +func (*VolumeAttachment) Descriptor() ([]byte, []int) { + return fileDescriptor_10f856db1e670dc4, []int{0} +} +func (m *VolumeAttachment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachment) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachment.Merge(m, src) +} +func (m *VolumeAttachment) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachment) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachment.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachment proto.InternalMessageInfo + +func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } +func (*VolumeAttachmentList) ProtoMessage() {} +func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { + return fileDescriptor_10f856db1e670dc4, []int{1} +} +func (m *VolumeAttachmentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentList.Merge(m, src) +} +func (m *VolumeAttachmentList) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentList) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentList.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentList proto.InternalMessageInfo + +func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } +func (*VolumeAttachmentSource) ProtoMessage() {} +func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { + return fileDescriptor_10f856db1e670dc4, []int{2} +} +func (m *VolumeAttachmentSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentSource.Merge(m, src) +} +func (m *VolumeAttachmentSource) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentSource.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentSource proto.InternalMessageInfo + +func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } +func (*VolumeAttachmentSpec) ProtoMessage() {} +func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_10f856db1e670dc4, []int{3} +} +func (m *VolumeAttachmentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentSpec.Merge(m, src) +} +func (m *VolumeAttachmentSpec) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentSpec proto.InternalMessageInfo + +func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } +func (*VolumeAttachmentStatus) ProtoMessage() {} +func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_10f856db1e670dc4, []int{4} +} +func (m *VolumeAttachmentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeAttachmentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentStatus.Merge(m, src) +} +func (m *VolumeAttachmentStatus) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeAttachmentStatus proto.InternalMessageInfo + +func (m *VolumeError) Reset() { *m = VolumeError{} } +func (*VolumeError) ProtoMessage() {} +func (*VolumeError) Descriptor() ([]byte, []int) { + return fileDescriptor_10f856db1e670dc4, []int{5} +} +func (m *VolumeError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *VolumeError) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeError.Merge(m, src) +} +func (m *VolumeError) XXX_Size() int { + return m.Size() +} +func (m *VolumeError) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeError.DiscardUnknown(m) +} + +var xxx_messageInfo_VolumeError proto.InternalMessageInfo func init() { proto.RegisterType((*VolumeAttachment)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachment") @@ -86,12 +219,69 @@ proto.RegisterType((*VolumeAttachmentSource)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentSource") proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentSpec") proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentStatus") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1alpha1.VolumeAttachmentStatus.AttachmentMetadataEntry") proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1alpha1.VolumeError") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/storage/v1alpha1/generated.proto", fileDescriptor_10f856db1e670dc4) +} + +var fileDescriptor_10f856db1e670dc4 = []byte{ + // 745 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xe3, 0x24, 0x6d, 0xd3, 0x0d, 0x1f, 0xd1, 0x2a, 0x82, 0x28, 0x48, 0x4e, 0x95, 0x53, + 0x40, 0x74, 0x4d, 0x0a, 0x42, 0x15, 0xb7, 0x58, 0xed, 0xa1, 0xa2, 0x2d, 0x68, 0x8b, 0x38, 0x00, + 0x07, 0x36, 0xf6, 0xe2, 0xb8, 0x89, 0x3f, 0xe4, 0x5d, 0x47, 0xea, 0x8d, 0x13, 0x67, 0x6e, 0xbc, + 0x01, 0xcf, 0x92, 0x1b, 0x15, 0xa7, 0x9e, 0x22, 0x6a, 0xde, 0x82, 0x0b, 0x68, 0xd7, 0x9b, 0xc4, + 0x24, 0x29, 0xb4, 0xbd, 0x79, 0x66, 0x67, 0x7e, 0x33, 0xf3, 0xdf, 0xf1, 0x82, 0x9d, 0xfe, 0x36, + 0x43, 0x6e, 0x60, 0xf4, 0xe3, 0x2e, 0x8d, 0x7c, 0xca, 0x29, 0x33, 0x86, 0xd4, 0xb7, 0x83, 0xc8, + 0x50, 0x07, 0x24, 0x74, 0x0d, 0xc6, 0x83, 0x88, 0x38, 0xd4, 0x18, 0xb6, 0xc9, 0x20, 0xec, 0x91, + 0xb6, 0xe1, 0x50, 0x9f, 0x46, 0x84, 0x53, 0x1b, 0x85, 0x51, 0xc0, 0x03, 0x78, 0x2f, 0x0d, 0x46, + 0x24, 0x74, 0x91, 0x0a, 0x46, 0x93, 0xe0, 0xfa, 0xa6, 0xe3, 0xf2, 0x5e, 0xdc, 0x45, 0x56, 0xe0, + 0x19, 0x4e, 0xe0, 0x04, 0x86, 0xcc, 0xe9, 0xc6, 0x1f, 0xa4, 0x25, 0x0d, 0xf9, 0x95, 0xb2, 0xea, + 0xcd, 0x4c, 0x61, 0x2b, 0x88, 0x44, 0xd5, 0xf9, 0x7a, 0xf5, 0x27, 0xb3, 0x18, 0x8f, 0x58, 0x3d, + 0xd7, 0xa7, 0xd1, 0x89, 0x11, 0xf6, 0x1d, 0xe1, 0x60, 0x86, 0x47, 0x39, 0x59, 0x96, 0x65, 0x5c, + 0x94, 0x15, 0xc5, 0x3e, 0x77, 0x3d, 0xba, 0x90, 0xf0, 0xf4, 0x7f, 0x09, 0xcc, 0xea, 0x51, 0x8f, + 0xcc, 0xe7, 0x35, 0xbf, 0xe6, 0x41, 0xe5, 0x75, 0x30, 0x88, 0x3d, 0xda, 0xe1, 0x9c, 0x58, 0x3d, + 0x8f, 0xfa, 0x1c, 0xbe, 0x07, 0x25, 0xd1, 0x98, 0x4d, 0x38, 0xa9, 0x69, 0x1b, 0x5a, 0xab, 0xbc, + 0xf5, 0x08, 0xcd, 0x64, 0x9b, 0xf2, 0x51, 0xd8, 0x77, 0x84, 0x83, 0x21, 0x11, 0x8d, 0x86, 0x6d, + 0xf4, 0xa2, 0x7b, 0x4c, 0x2d, 0x7e, 0x40, 0x39, 0x31, 0xe1, 0x68, 0xdc, 0xc8, 0x25, 0xe3, 0x06, + 0x98, 0xf9, 0xf0, 0x94, 0x0a, 0x8f, 0x40, 0x91, 0x85, 0xd4, 0xaa, 0xe5, 0x25, 0xbd, 0x8d, 0xfe, + 0x71, 0x29, 0x68, 0xbe, 0xbd, 0xa3, 0x90, 0x5a, 0xe6, 0x0d, 0x85, 0x2f, 0x0a, 0x0b, 0x4b, 0x18, + 0x7c, 0x0b, 0x56, 0x19, 0x27, 0x3c, 0x66, 0xb5, 0x82, 0xc4, 0x3e, 0xbe, 0x1a, 0x56, 0xa6, 0x9a, + 0xb7, 0x14, 0x78, 0x35, 0xb5, 0xb1, 0x42, 0x36, 0x47, 0x1a, 0xa8, 0xce, 0xa7, 0xec, 0xbb, 0x8c, + 0xc3, 0x77, 0x0b, 0x62, 0xa1, 0xcb, 0x89, 0x25, 0xb2, 0xa5, 0x54, 0x15, 0x55, 0xb2, 0x34, 0xf1, + 0x64, 0x84, 0xc2, 0x60, 0xc5, 0xe5, 0xd4, 0x63, 0xb5, 0xfc, 0x46, 0xa1, 0x55, 0xde, 0xda, 0xbc, + 0xd2, 0x48, 0xe6, 0x4d, 0x45, 0x5e, 0xd9, 0x13, 0x0c, 0x9c, 0xa2, 0x9a, 0xdf, 0x35, 0x70, 0x67, + 0x61, 0xfa, 0x20, 0x8e, 0x2c, 0x0a, 0xf7, 0x41, 0x35, 0xa4, 0x11, 0x73, 0x19, 0xa7, 0x3e, 0x4f, + 0x63, 0x0e, 0x89, 0x47, 0xe5, 0x60, 0xeb, 0x66, 0x2d, 0x19, 0x37, 0xaa, 0x2f, 0x97, 0x9c, 0xe3, + 0xa5, 0x59, 0xf0, 0x18, 0x54, 0x5c, 0x7f, 0xe0, 0xfa, 0x34, 0xf5, 0x1d, 0xcd, 0x6e, 0xbc, 0x95, + 0x9d, 0x43, 0xfc, 0x3a, 0x42, 0x90, 0x79, 0xb2, 0xbc, 0xe8, 0x6a, 0x32, 0x6e, 0x54, 0xf6, 0xe6, + 0x28, 0x78, 0x81, 0xdb, 0xfc, 0xb6, 0xe4, 0x7e, 0xc4, 0x01, 0x7c, 0x08, 0x4a, 0x44, 0x7a, 0x68, + 0xa4, 0xc6, 0x98, 0xea, 0xdd, 0x51, 0x7e, 0x3c, 0x8d, 0x90, 0x3b, 0x24, 0xa5, 0x50, 0x8d, 0x5e, + 0x71, 0x87, 0x64, 0x6a, 0x66, 0x87, 0xa4, 0x8d, 0x15, 0x52, 0xb4, 0xe2, 0x07, 0x76, 0xaa, 0x68, + 0xe1, 0xef, 0x56, 0x0e, 0x95, 0x1f, 0x4f, 0x23, 0x9a, 0xbf, 0x0b, 0x4b, 0xae, 0x49, 0x2e, 0x63, + 0x66, 0x26, 0x5b, 0xce, 0x54, 0x5a, 0x98, 0xc9, 0x9e, 0xce, 0x64, 0xc3, 0x2f, 0x1a, 0x80, 0x64, + 0x8a, 0x38, 0x98, 0x2c, 0x6b, 0xba, 0x51, 0xcf, 0xaf, 0xf1, 0x93, 0xa0, 0xce, 0x02, 0x6d, 0xd7, + 0xe7, 0xd1, 0x89, 0x59, 0x57, 0x5d, 0xc0, 0xc5, 0x00, 0xbc, 0xa4, 0x05, 0x78, 0x0c, 0xca, 0xa9, + 0x77, 0x37, 0x8a, 0x82, 0x48, 0xfd, 0xb6, 0xad, 0x4b, 0x74, 0x24, 0xe3, 0x4d, 0x3d, 0x19, 0x37, + 0xca, 0x9d, 0x19, 0xe0, 0xd7, 0xb8, 0x51, 0xce, 0x9c, 0xe3, 0x2c, 0x5c, 0xd4, 0xb2, 0xe9, 0xac, + 0x56, 0xf1, 0x3a, 0xb5, 0x76, 0xe8, 0xc5, 0xb5, 0x32, 0xf0, 0xfa, 0x2e, 0xb8, 0x7b, 0x81, 0x44, + 0xb0, 0x02, 0x0a, 0x7d, 0x7a, 0x92, 0x6e, 0x22, 0x16, 0x9f, 0xb0, 0x0a, 0x56, 0x86, 0x64, 0x10, + 0xa7, 0x1b, 0xb7, 0x8e, 0x53, 0xe3, 0x59, 0x7e, 0x5b, 0x6b, 0x7e, 0xd2, 0x40, 0xb6, 0x06, 0xdc, + 0x07, 0x45, 0xf1, 0x96, 0xab, 0x67, 0xe6, 0xc1, 0xe5, 0x9e, 0x99, 0x57, 0xae, 0x47, 0x67, 0xcf, + 0xa5, 0xb0, 0xb0, 0xa4, 0xc0, 0xfb, 0x60, 0xcd, 0xa3, 0x8c, 0x11, 0x47, 0x55, 0x36, 0x6f, 0xab, + 0xa0, 0xb5, 0x83, 0xd4, 0x8d, 0x27, 0xe7, 0x26, 0x1a, 0x9d, 0xeb, 0xb9, 0xd3, 0x73, 0x3d, 0x77, + 0x76, 0xae, 0xe7, 0x3e, 0x26, 0xba, 0x36, 0x4a, 0x74, 0xed, 0x34, 0xd1, 0xb5, 0xb3, 0x44, 0xd7, + 0x7e, 0x24, 0xba, 0xf6, 0xf9, 0xa7, 0x9e, 0x7b, 0x53, 0x9a, 0x08, 0xf7, 0x27, 0x00, 0x00, 0xff, + 0xff, 0xe8, 0x45, 0xe3, 0xba, 0xab, 0x07, 0x00, 0x00, +} + func (m *VolumeAttachment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -99,41 +289,52 @@ } func (m *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n2 + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n3 - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *VolumeAttachmentList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -141,37 +342,46 @@ } func (m *VolumeAttachmentList) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n4, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *VolumeAttachmentSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -179,23 +389,41 @@ } func (m *VolumeAttachmentSource) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.InlineVolumeSpec != nil { + { + size, err := m.InlineVolumeSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if m.PersistentVolumeName != nil { - dAtA[i] = 0xa - i++ + i -= len(*m.PersistentVolumeName) + copy(dAtA[i:], *m.PersistentVolumeName) i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PersistentVolumeName))) - i += copy(dAtA[i:], *m.PersistentVolumeName) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *VolumeAttachmentSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -203,33 +431,42 @@ } func (m *VolumeAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Attacher))) - i += copy(dAtA[i:], m.Attacher) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n5, err := m.Source.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - dAtA[i] = 0x1a - i++ + i -= len(m.NodeName) + copy(dAtA[i:], m.NodeName) i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) - i += copy(dAtA[i:], m.NodeName) - return i, nil + i-- + dAtA[i] = 0x1a + { + size, err := m.Source.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Attacher) + copy(dAtA[i:], m.Attacher) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Attacher))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *VolumeAttachmentStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -237,67 +474,78 @@ } func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Attached { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.DetachError != nil { + { + size, err := m.DetachError.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.AttachError != nil { + { + size, err := m.AttachError.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a } - i++ if len(m.AttachmentMetadata) > 0 { keysForAttachmentMetadata := make([]string, 0, len(m.AttachmentMetadata)) for k := range m.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) } github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) - for _, k := range keysForAttachmentMetadata { + for iNdEx := len(keysForAttachmentMetadata) - 1; iNdEx >= 0; iNdEx-- { + v := m.AttachmentMetadata[string(keysForAttachmentMetadata[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - v := m.AttachmentMetadata[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) + i -= len(keysForAttachmentMetadata[iNdEx]) + copy(dAtA[i:], keysForAttachmentMetadata[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAttachmentMetadata[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if m.AttachError != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AttachError.Size())) - n6, err := m.AttachError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err } - i += n6 } - if m.DetachError != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DetachError.Size())) - n7, err := m.DetachError.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 + i-- + if m.Attached { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *VolumeError) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -305,53 +553,48 @@ } func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Time.Size())) - n8, err := m.Time.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - dAtA[i] = 0x12 - i++ + i -= len(m.Message) + copy(dAtA[i:], m.Message) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + i-- + dAtA[i] = 0x12 + { + size, err := m.Time.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *VolumeAttachment) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ObjectMeta.Size() @@ -364,6 +607,9 @@ } func (m *VolumeAttachmentList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -378,16 +624,26 @@ } func (m *VolumeAttachmentSource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.PersistentVolumeName != nil { l = len(*m.PersistentVolumeName) n += 1 + l + sovGenerated(uint64(l)) } + if m.InlineVolumeSpec != nil { + l = m.InlineVolumeSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *VolumeAttachmentSpec) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Attacher) @@ -400,6 +656,9 @@ } func (m *VolumeAttachmentStatus) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -423,6 +682,9 @@ } func (m *VolumeError) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.Time.Size() @@ -433,14 +695,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -450,7 +705,7 @@ return "nil" } s := strings.Join([]string{`&VolumeAttachment{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "VolumeAttachmentSpec", "VolumeAttachmentSpec", 1), `&`, ``, 1) + `,`, `Status:` + strings.Replace(strings.Replace(this.Status.String(), "VolumeAttachmentStatus", "VolumeAttachmentStatus", 1), `&`, ``, 1) + `,`, `}`, @@ -461,9 +716,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]VolumeAttachment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "VolumeAttachment", "VolumeAttachment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&VolumeAttachmentList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "VolumeAttachment", "VolumeAttachment", 1), `&`, ``, 1) + `,`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -474,6 +734,7 @@ } s := strings.Join([]string{`&VolumeAttachmentSource{`, `PersistentVolumeName:` + valueToStringGenerated(this.PersistentVolumeName) + `,`, + `InlineVolumeSpec:` + strings.Replace(fmt.Sprintf("%v", this.InlineVolumeSpec), "PersistentVolumeSpec", "v11.PersistentVolumeSpec", 1) + `,`, `}`, }, "") return s @@ -507,8 +768,8 @@ s := strings.Join([]string{`&VolumeAttachmentStatus{`, `Attached:` + fmt.Sprintf("%v", this.Attached) + `,`, `AttachmentMetadata:` + mapStringForAttachmentMetadata + `,`, - `AttachError:` + strings.Replace(fmt.Sprintf("%v", this.AttachError), "VolumeError", "VolumeError", 1) + `,`, - `DetachError:` + strings.Replace(fmt.Sprintf("%v", this.DetachError), "VolumeError", "VolumeError", 1) + `,`, + `AttachError:` + strings.Replace(this.AttachError.String(), "VolumeError", "VolumeError", 1) + `,`, + `DetachError:` + strings.Replace(this.DetachError.String(), "VolumeError", "VolumeError", 1) + `,`, `}`, }, "") return s @@ -518,7 +779,7 @@ return "nil" } s := strings.Join([]string{`&VolumeError{`, - `Time:` + strings.Replace(strings.Replace(this.Time.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `Time:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Time), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `}`, }, "") @@ -547,7 +808,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -575,7 +836,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -584,6 +845,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -605,7 +869,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -614,6 +878,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -635,7 +902,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -644,6 +911,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -660,6 +930,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -687,7 +960,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -715,7 +988,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -724,6 +997,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -745,7 +1021,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -754,6 +1030,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -771,6 +1050,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -798,7 +1080,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -826,7 +1108,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -836,12 +1118,51 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } s := string(dAtA[iNdEx:postIndex]) m.PersistentVolumeName = &s iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InlineVolumeSpec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.InlineVolumeSpec == nil { + m.InlineVolumeSpec = &v11.PersistentVolumeSpec{} + } + if err := m.InlineVolumeSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -851,6 +1172,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -878,7 +1202,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -906,7 +1230,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -916,6 +1240,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -935,7 +1262,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -944,6 +1271,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -965,7 +1295,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -975,6 +1305,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -989,6 +1322,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1016,7 +1352,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1044,7 +1380,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1064,7 +1400,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1073,54 +1409,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.AttachmentMetadata == nil { m.AttachmentMetadata = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1130,41 +1432,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.AttachmentMetadata[mapkey] = mapvalue - } else { - var mapvalue string - m.AttachmentMetadata[mapkey] = mapvalue } + m.AttachmentMetadata[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -1180,7 +1527,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1189,6 +1536,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1213,7 +1563,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1222,6 +1572,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1241,6 +1594,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1268,7 +1624,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1296,7 +1652,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1305,6 +1661,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1326,7 +1685,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1336,6 +1695,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1350,6 +1712,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1416,10 +1781,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -1448,6 +1816,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -1466,55 +1837,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/storage/v1alpha1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 704 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4d, 0x6f, 0xd3, 0x4c, - 0x10, 0xc7, 0xe3, 0x24, 0x6d, 0xd3, 0xcd, 0xf3, 0x52, 0xad, 0xa2, 0xe7, 0x89, 0x82, 0xe4, 0x54, - 0x39, 0x15, 0x44, 0xd7, 0xa4, 0x20, 0x54, 0x71, 0x8b, 0xd5, 0x1e, 0x10, 0x6d, 0x41, 0x5b, 0xc4, - 0x01, 0x38, 0xb0, 0xb1, 0xa7, 0x8e, 0x9b, 0xfa, 0x45, 0xbb, 0xeb, 0x48, 0xbd, 0x71, 0xe2, 0xcc, - 0x8d, 0x6f, 0xc0, 0x67, 0xc9, 0x8d, 0x1e, 0x7b, 0x8a, 0xa8, 0xf9, 0x16, 0x5c, 0x40, 0x5e, 0x6f, - 0x5e, 0x68, 0x52, 0x68, 0x7b, 0xf3, 0xcc, 0xce, 0xfc, 0x66, 0xe6, 0xbf, 0xb3, 0x46, 0x3b, 0xfd, - 0x6d, 0x41, 0xfc, 0xc8, 0xea, 0x27, 0x5d, 0xe0, 0x21, 0x48, 0x10, 0xd6, 0x00, 0x42, 0x37, 0xe2, - 0x96, 0x3e, 0x60, 0xb1, 0x6f, 0x09, 0x19, 0x71, 0xe6, 0x81, 0x35, 0x68, 0xb3, 0x93, 0xb8, 0xc7, - 0xda, 0x96, 0x07, 0x21, 0x70, 0x26, 0xc1, 0x25, 0x31, 0x8f, 0x64, 0x84, 0xef, 0xe4, 0xc1, 0x84, - 0xc5, 0x3e, 0xd1, 0xc1, 0x64, 0x1c, 0xdc, 0xd8, 0xf4, 0x7c, 0xd9, 0x4b, 0xba, 0xc4, 0x89, 0x02, - 0xcb, 0x8b, 0xbc, 0xc8, 0x52, 0x39, 0xdd, 0xe4, 0x48, 0x59, 0xca, 0x50, 0x5f, 0x39, 0xab, 0xf1, - 0x68, 0x5a, 0x38, 0x60, 0x4e, 0xcf, 0x0f, 0x81, 0x9f, 0x5a, 0x71, 0xdf, 0xcb, 0x1c, 0xc2, 0x0a, - 0x40, 0x32, 0x6b, 0x30, 0xd7, 0x41, 0xc3, 0xba, 0x2a, 0x8b, 0x27, 0xa1, 0xf4, 0x03, 0x98, 0x4b, - 0x78, 0xfc, 0xa7, 0x04, 0xe1, 0xf4, 0x20, 0x60, 0x97, 0xf3, 0x5a, 0x9f, 0x8b, 0x68, 0xed, 0x55, - 0x74, 0x92, 0x04, 0xd0, 0x91, 0x92, 0x39, 0xbd, 0x00, 0x42, 0x89, 0xdf, 0xa1, 0x4a, 0xd6, 0x98, - 0xcb, 0x24, 0xab, 0x1b, 0xeb, 0xc6, 0x46, 0x75, 0xeb, 0x01, 0x99, 0x4a, 0x32, 0xe1, 0x93, 0xb8, - 0xef, 0x65, 0x0e, 0x41, 0xb2, 0x68, 0x32, 0x68, 0x93, 0xe7, 0xdd, 0x63, 0x70, 0xe4, 0x3e, 0x48, - 0x66, 0xe3, 0xe1, 0xa8, 0x59, 0x48, 0x47, 0x4d, 0x34, 0xf5, 0xd1, 0x09, 0x15, 0x1f, 0xa2, 0xb2, - 0x88, 0xc1, 0xa9, 0x17, 0x15, 0xbd, 0x4d, 0x7e, 0x23, 0x38, 0xb9, 0xdc, 0xde, 0x61, 0x0c, 0x8e, - 0xfd, 0x97, 0xc6, 0x97, 0x33, 0x8b, 0x2a, 0x18, 0x7e, 0x83, 0x96, 0x85, 0x64, 0x32, 0x11, 0xf5, - 0x92, 0xc2, 0x3e, 0xbc, 0x19, 0x56, 0xa5, 0xda, 0xff, 0x68, 0xf0, 0x72, 0x6e, 0x53, 0x8d, 0x6c, - 0x0d, 0x0d, 0x54, 0xbb, 0x9c, 0xb2, 0xe7, 0x0b, 0x89, 0xdf, 0xce, 0x89, 0x45, 0xae, 0x27, 0x56, - 0x96, 0xad, 0xa4, 0x5a, 0xd3, 0x25, 0x2b, 0x63, 0xcf, 0x8c, 0x50, 0x14, 0x2d, 0xf9, 0x12, 0x02, - 0x51, 0x2f, 0xae, 0x97, 0x36, 0xaa, 0x5b, 0x9b, 0x37, 0x1a, 0xc9, 0xfe, 0x5b, 0x93, 0x97, 0x9e, - 0x66, 0x0c, 0x9a, 0xa3, 0x5a, 0x47, 0xe8, 0xbf, 0xb9, 0xe1, 0xa3, 0x84, 0x3b, 0x80, 0xf7, 0x50, - 0x2d, 0x06, 0x2e, 0x7c, 0x21, 0x21, 0x94, 0x79, 0xcc, 0x01, 0x0b, 0x40, 0xcd, 0xb5, 0x6a, 0xd7, - 0xd3, 0x51, 0xb3, 0xf6, 0x62, 0xc1, 0x39, 0x5d, 0x98, 0xd5, 0xfa, 0xb2, 0x40, 0xb2, 0xec, 0xba, - 0xf0, 0x7d, 0x54, 0x61, 0xca, 0x03, 0x5c, 0xa3, 0x27, 0x12, 0x74, 0xb4, 0x9f, 0x4e, 0x22, 0xd4, - 0xb5, 0xaa, 0xf6, 0xf4, 0xb6, 0xdc, 0xf0, 0x5a, 0x55, 0xea, 0xcc, 0xb5, 0x2a, 0x9b, 0x6a, 0x64, - 0xd6, 0x4a, 0x18, 0xb9, 0xf9, 0x94, 0xa5, 0x5f, 0x5b, 0x39, 0xd0, 0x7e, 0x3a, 0x89, 0x68, 0xfd, - 0x28, 0x2d, 0x90, 0x4e, 0xed, 0xc7, 0xcc, 0x4c, 0xae, 0x9a, 0xa9, 0x32, 0x37, 0x93, 0x3b, 0x99, - 0xc9, 0xc5, 0x9f, 0x0c, 0x84, 0xd9, 0x04, 0xb1, 0x3f, 0xde, 0x9f, 0xfc, 0x92, 0x9f, 0xdd, 0x62, - 0x6f, 0x49, 0x67, 0x8e, 0xb6, 0x1b, 0x4a, 0x7e, 0x6a, 0x37, 0x74, 0x17, 0x78, 0x3e, 0x80, 0x2e, - 0x68, 0x01, 0x1f, 0xa3, 0x6a, 0xee, 0xdd, 0xe5, 0x3c, 0xe2, 0xfa, 0x25, 0x6d, 0x5c, 0xa3, 0x23, - 0x15, 0x6f, 0x9b, 0xe9, 0xa8, 0x59, 0xed, 0x4c, 0x01, 0xdf, 0x47, 0xcd, 0xea, 0xcc, 0x39, 0x9d, - 0x85, 0x67, 0xb5, 0x5c, 0x98, 0xd6, 0x2a, 0xdf, 0xa6, 0xd6, 0x0e, 0x5c, 0x5d, 0x6b, 0x06, 0xde, - 0xd8, 0x45, 0xff, 0x5f, 0x21, 0x11, 0x5e, 0x43, 0xa5, 0x3e, 0x9c, 0xe6, 0x9b, 0x48, 0xb3, 0x4f, - 0x5c, 0x43, 0x4b, 0x03, 0x76, 0x92, 0xe4, 0x1b, 0xb7, 0x4a, 0x73, 0xe3, 0x49, 0x71, 0xdb, 0x68, - 0x7d, 0x30, 0xd0, 0x6c, 0x0d, 0xbc, 0x87, 0xca, 0xd9, 0xef, 0x55, 0xbf, 0xfc, 0x7b, 0xd7, 0x7b, - 0xf9, 0x2f, 0xfd, 0x00, 0xa6, 0x7f, 0xb0, 0xcc, 0xa2, 0x8a, 0x82, 0xef, 0xa2, 0x95, 0x00, 0x84, - 0x60, 0x9e, 0xae, 0x6c, 0xff, 0xab, 0x83, 0x56, 0xf6, 0x73, 0x37, 0x1d, 0x9f, 0xdb, 0x64, 0x78, - 0x61, 0x16, 0xce, 0x2e, 0xcc, 0xc2, 0xf9, 0x85, 0x59, 0x78, 0x9f, 0x9a, 0xc6, 0x30, 0x35, 0x8d, - 0xb3, 0xd4, 0x34, 0xce, 0x53, 0xd3, 0xf8, 0x9a, 0x9a, 0xc6, 0xc7, 0x6f, 0x66, 0xe1, 0x75, 0x65, - 0x2c, 0xdc, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x42, 0xba, 0xdb, 0x12, 0x1a, 0x07, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ package k8s.io.api.storage.v1alpha1; +import "k8s.io/api/core/v1/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -30,11 +31,11 @@ // VolumeAttachment captures the intent to attach or detach the specified volume // to/from the specified node. -// +// // VolumeAttachment objects are non-namespaced. message VolumeAttachment { // Standard object metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -52,7 +53,7 @@ // VolumeAttachmentList is a collection of VolumeAttachment objects. message VolumeAttachmentList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -68,6 +69,15 @@ // Name of the persistent volume to attach. // +optional optional string persistentVolumeName = 1; + + // inlineVolumeSpec contains all the information necessary to attach + // a persistent volume defined by a pod's inline VolumeSource. This field + // is populated only for the CSIMigration feature. It contains + // translated fields from a pod's inline VolumeSource to a + // PersistentVolumeSpec. This field is alpha-level and is only + // honored by servers that enabled the CSIMigration feature. + // +optional + optional k8s.io.api.core.v1.PersistentVolumeSpec inlineVolumeSpec = 2; } // VolumeAttachmentSpec is the specification of a VolumeAttachment request. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,7 +16,10 @@ package v1alpha1 -import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +import ( + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) // +genclient // +genclient:nonNamespaced @@ -30,7 +33,7 @@ metav1.TypeMeta `json:",inline"` // Standard object metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -51,7 +54,7 @@ type VolumeAttachmentList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -81,7 +84,14 @@ // +optional PersistentVolumeName *string `json:"persistentVolumeName,omitempty" protobuf:"bytes,1,opt,name=persistentVolumeName"` - // Placeholder for *VolumeSource to accommodate inline volumes in pods. + // inlineVolumeSpec contains all the information necessary to attach + // a persistent volume defined by a pod's inline VolumeSource. This field + // is populated only for the CSIMigration feature. It contains + // translated fields from a pod's inline VolumeSource to a + // PersistentVolumeSpec. This field is alpha-level and is only + // honored by servers that enabled the CSIMigration feature. + // +optional + InlineVolumeSpec *v1.PersistentVolumeSpec `json:"inlineVolumeSpec,omitempty" protobuf:"bytes,2,opt,name=inlineVolumeSpec"` } // VolumeAttachmentStatus is the status of a VolumeAttachment request. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. var map_VolumeAttachment = map[string]string{ "": "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", "status": "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", } @@ -40,7 +40,7 @@ var map_VolumeAttachmentList = map[string]string{ "": "VolumeAttachmentList is a collection of VolumeAttachment objects.", - "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of VolumeAttachments", } @@ -49,7 +49,7 @@ } var map_VolumeAttachmentSource = map[string]string{ - "": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", + "": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", "persistentVolumeName": "Name of the persistent volume to attach.", } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ package v1alpha1 import ( + v1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -56,7 +57,7 @@ func (in *VolumeAttachmentList) DeepCopyInto(out *VolumeAttachmentList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]VolumeAttachment, len(*in)) @@ -90,12 +91,13 @@ *out = *in if in.PersistentVolumeName != nil { in, out := &in.PersistentVolumeName, &out.PersistentVolumeName - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in + } + if in.InlineVolumeSpec != nil { + in, out := &in.InlineVolumeSpec, &out.InlineVolumeSpec + *out = new(v1.PersistentVolumeSpec) + (*in).DeepCopyInto(*out) } return } @@ -139,21 +141,13 @@ } if in.AttachError != nil { in, out := &in.AttachError, &out.AttachError - if *in == nil { - *out = nil - } else { - *out = new(VolumeError) - (*in).DeepCopyInto(*out) - } + *out = new(VolumeError) + (*in).DeepCopyInto(*out) } if in.DetachError != nil { in, out := &in.DetachError, &out.DetachError - if *in == nil { - *out = nil - } else { - *out = new(VolumeError) - (*in).DeepCopyInto(*out) - } + *out = new(VolumeError) + (*in).DeepCopyInto(*out) } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,6 +15,8 @@ */ // +k8s:deepcopy-gen=package +// +k8s:protobuf-gen=package // +groupName=storage.k8s.io // +k8s:openapi-gen=true + package v1beta1 // import "k8s.io/api/storage/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,40 +14,26 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/api/storage/v1beta1/generated.proto -// DO NOT EDIT! -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/api/storage/v1beta1/generated.proto - - It has these top-level messages: - StorageClass - StorageClassList - VolumeAttachment - VolumeAttachmentList - VolumeAttachmentSource - VolumeAttachmentSpec - VolumeAttachmentStatus - VolumeError -*/ package v1beta1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" +import ( + fmt "fmt" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + io "io" -import strings "strings" -import reflect "reflect" - -import io "io" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -60,725 +46,2604 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *StorageClass) Reset() { *m = StorageClass{} } -func (*StorageClass) ProtoMessage() {} -func (*StorageClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *StorageClassList) Reset() { *m = StorageClassList{} } -func (*StorageClassList) ProtoMessage() {} -func (*StorageClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } -func (*VolumeAttachment) ProtoMessage() {} -func (*VolumeAttachment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } -func (*VolumeAttachmentList) ProtoMessage() {} -func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } -func (*VolumeAttachmentSource) ProtoMessage() {} -func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } -func (*VolumeAttachmentSpec) ProtoMessage() {} -func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } -func (*VolumeAttachmentStatus) ProtoMessage() {} -func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *VolumeError) Reset() { *m = VolumeError{} } -func (*VolumeError) ProtoMessage() {} -func (*VolumeError) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } +func (m *CSIDriver) Reset() { *m = CSIDriver{} } +func (*CSIDriver) ProtoMessage() {} +func (*CSIDriver) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{0} +} +func (m *CSIDriver) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIDriver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CSIDriver) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIDriver.Merge(m, src) +} +func (m *CSIDriver) XXX_Size() int { + return m.Size() +} +func (m *CSIDriver) XXX_DiscardUnknown() { + xxx_messageInfo_CSIDriver.DiscardUnknown(m) +} -func init() { - proto.RegisterType((*StorageClass)(nil), "k8s.io.api.storage.v1beta1.StorageClass") - proto.RegisterType((*StorageClassList)(nil), "k8s.io.api.storage.v1beta1.StorageClassList") - proto.RegisterType((*VolumeAttachment)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachment") - proto.RegisterType((*VolumeAttachmentList)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentList") - proto.RegisterType((*VolumeAttachmentSource)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentSource") - proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentSpec") - proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentStatus") - proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1beta1.VolumeError") +var xxx_messageInfo_CSIDriver proto.InternalMessageInfo + +func (m *CSIDriverList) Reset() { *m = CSIDriverList{} } +func (*CSIDriverList) ProtoMessage() {} +func (*CSIDriverList) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{1} } -func (m *StorageClass) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +func (m *CSIDriverList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIDriverList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *CSIDriverList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIDriverList.Merge(m, src) +} +func (m *CSIDriverList) XXX_Size() int { + return m.Size() +} +func (m *CSIDriverList) XXX_DiscardUnknown() { + xxx_messageInfo_CSIDriverList.DiscardUnknown(m) } -func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_CSIDriverList proto.InternalMessageInfo + +func (m *CSIDriverSpec) Reset() { *m = CSIDriverSpec{} } +func (*CSIDriverSpec) ProtoMessage() {} +func (*CSIDriverSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{2} +} +func (m *CSIDriverSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSIDriverSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n1 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Provisioner))) - i += copy(dAtA[i:], m.Provisioner) - if len(m.Parameters) > 0 { - keysForParameters := make([]string, 0, len(m.Parameters)) - for k := range m.Parameters { - keysForParameters = append(keysForParameters, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) - for _, k := range keysForParameters { - dAtA[i] = 0x1a - i++ - v := m.Parameters[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if m.ReclaimPolicy != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReclaimPolicy))) - i += copy(dAtA[i:], *m.ReclaimPolicy) - } - if len(m.MountOptions) > 0 { - for _, s := range m.MountOptions { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - if m.AllowVolumeExpansion != nil { - dAtA[i] = 0x30 - i++ - if *m.AllowVolumeExpansion { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.VolumeBindingMode != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeBindingMode))) - i += copy(dAtA[i:], *m.VolumeBindingMode) - } - if len(m.AllowedTopologies) > 0 { - for _, msg := range m.AllowedTopologies { - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *CSIDriverSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSIDriverSpec.Merge(m, src) +} +func (m *CSIDriverSpec) XXX_Size() int { + return m.Size() +} +func (m *CSIDriverSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CSIDriverSpec.DiscardUnknown(m) } -func (m *StorageClassList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_CSIDriverSpec proto.InternalMessageInfo + +func (m *CSINode) Reset() { *m = CSINode{} } +func (*CSINode) ProtoMessage() {} +func (*CSINode) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{3} +} +func (m *CSINode) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSINode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *CSINode) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSINode.Merge(m, src) +} +func (m *CSINode) XXX_Size() int { + return m.Size() +} +func (m *CSINode) XXX_DiscardUnknown() { + xxx_messageInfo_CSINode.DiscardUnknown(m) } -func (m *StorageClassList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n2, err := m.ListMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_CSINode proto.InternalMessageInfo + +func (m *CSINodeDriver) Reset() { *m = CSINodeDriver{} } +func (*CSINodeDriver) ProtoMessage() {} +func (*CSINodeDriver) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{4} +} +func (m *CSINodeDriver) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSINodeDriver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n2 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *CSINodeDriver) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSINodeDriver.Merge(m, src) +} +func (m *CSINodeDriver) XXX_Size() int { + return m.Size() +} +func (m *CSINodeDriver) XXX_DiscardUnknown() { + xxx_messageInfo_CSINodeDriver.DiscardUnknown(m) } -func (m *VolumeAttachment) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_CSINodeDriver proto.InternalMessageInfo + +func (m *CSINodeList) Reset() { *m = CSINodeList{} } +func (*CSINodeList) ProtoMessage() {} +func (*CSINodeList) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{5} +} +func (m *CSINodeList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSINodeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *CSINodeList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSINodeList.Merge(m, src) +} +func (m *CSINodeList) XXX_Size() int { + return m.Size() +} +func (m *CSINodeList) XXX_DiscardUnknown() { + xxx_messageInfo_CSINodeList.DiscardUnknown(m) } -func (m *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n3, err := m.ObjectMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_CSINodeList proto.InternalMessageInfo + +func (m *CSINodeSpec) Reset() { *m = CSINodeSpec{} } +func (*CSINodeSpec) ProtoMessage() {} +func (*CSINodeSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{6} +} +func (m *CSINodeSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CSINodeSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n3 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n4, err := m.Spec.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *CSINodeSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CSINodeSpec.Merge(m, src) +} +func (m *CSINodeSpec) XXX_Size() int { + return m.Size() +} +func (m *CSINodeSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CSINodeSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CSINodeSpec proto.InternalMessageInfo + +func (m *StorageClass) Reset() { *m = StorageClass{} } +func (*StorageClass) ProtoMessage() {} +func (*StorageClass) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{7} +} +func (m *StorageClass) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n4 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n5, err := m.Status.MarshalTo(dAtA[i:]) + return b[:n], nil +} +func (m *StorageClass) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageClass.Merge(m, src) +} +func (m *StorageClass) XXX_Size() int { + return m.Size() +} +func (m *StorageClass) XXX_DiscardUnknown() { + xxx_messageInfo_StorageClass.DiscardUnknown(m) +} + +var xxx_messageInfo_StorageClass proto.InternalMessageInfo + +func (m *StorageClassList) Reset() { *m = StorageClassList{} } +func (*StorageClassList) ProtoMessage() {} +func (*StorageClassList) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{8} +} +func (m *StorageClassList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StorageClassList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n5 - return i, nil + return b[:n], nil +} +func (m *StorageClassList) XXX_Merge(src proto.Message) { + xxx_messageInfo_StorageClassList.Merge(m, src) +} +func (m *StorageClassList) XXX_Size() int { + return m.Size() +} +func (m *StorageClassList) XXX_DiscardUnknown() { + xxx_messageInfo_StorageClassList.DiscardUnknown(m) } -func (m *VolumeAttachmentList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_StorageClassList proto.InternalMessageInfo + +func (m *VolumeAttachment) Reset() { *m = VolumeAttachment{} } +func (*VolumeAttachment) ProtoMessage() {} +func (*VolumeAttachment) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{9} +} +func (m *VolumeAttachment) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *VolumeAttachment) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachment.Merge(m, src) +} +func (m *VolumeAttachment) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachment) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachment.DiscardUnknown(m) } -func (m *VolumeAttachmentList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n6, err := m.ListMeta.MarshalTo(dAtA[i:]) +var xxx_messageInfo_VolumeAttachment proto.InternalMessageInfo + +func (m *VolumeAttachmentList) Reset() { *m = VolumeAttachmentList{} } +func (*VolumeAttachmentList) ProtoMessage() {} +func (*VolumeAttachmentList) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{10} +} +func (m *VolumeAttachmentList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err - } - i += n6 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + return nil, err } - return i, nil + return b[:n], nil +} +func (m *VolumeAttachmentList) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentList.Merge(m, src) +} +func (m *VolumeAttachmentList) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentList) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentList.DiscardUnknown(m) } -func (m *VolumeAttachmentSource) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_VolumeAttachmentList proto.InternalMessageInfo + +func (m *VolumeAttachmentSource) Reset() { *m = VolumeAttachmentSource{} } +func (*VolumeAttachmentSource) ProtoMessage() {} +func (*VolumeAttachmentSource) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{11} +} +func (m *VolumeAttachmentSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *VolumeAttachmentSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentSource.Merge(m, src) +} +func (m *VolumeAttachmentSource) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentSource) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentSource.DiscardUnknown(m) } -func (m *VolumeAttachmentSource) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.PersistentVolumeName != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PersistentVolumeName))) - i += copy(dAtA[i:], *m.PersistentVolumeName) +var xxx_messageInfo_VolumeAttachmentSource proto.InternalMessageInfo + +func (m *VolumeAttachmentSpec) Reset() { *m = VolumeAttachmentSpec{} } +func (*VolumeAttachmentSpec) ProtoMessage() {} +func (*VolumeAttachmentSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{12} +} +func (m *VolumeAttachmentSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } - return i, nil + return b[:n], nil +} +func (m *VolumeAttachmentSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentSpec.Merge(m, src) +} +func (m *VolumeAttachmentSpec) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentSpec) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentSpec.DiscardUnknown(m) } -func (m *VolumeAttachmentSpec) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_VolumeAttachmentSpec proto.InternalMessageInfo + +func (m *VolumeAttachmentStatus) Reset() { *m = VolumeAttachmentStatus{} } +func (*VolumeAttachmentStatus) ProtoMessage() {} +func (*VolumeAttachmentStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{13} +} +func (m *VolumeAttachmentStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeAttachmentStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *VolumeAttachmentStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeAttachmentStatus.Merge(m, src) +} +func (m *VolumeAttachmentStatus) XXX_Size() int { + return m.Size() +} +func (m *VolumeAttachmentStatus) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeAttachmentStatus.DiscardUnknown(m) } -func (m *VolumeAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Attacher))) - i += copy(dAtA[i:], m.Attacher) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n7, err := m.Source.MarshalTo(dAtA[i:]) +var xxx_messageInfo_VolumeAttachmentStatus proto.InternalMessageInfo + +func (m *VolumeError) Reset() { *m = VolumeError{} } +func (*VolumeError) ProtoMessage() {} +func (*VolumeError) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{14} +} +func (m *VolumeError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { - return 0, err + return nil, err } - i += n7 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) - i += copy(dAtA[i:], m.NodeName) - return i, nil + return b[:n], nil +} +func (m *VolumeError) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeError.Merge(m, src) +} +func (m *VolumeError) XXX_Size() int { + return m.Size() +} +func (m *VolumeError) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeError.DiscardUnknown(m) } -func (m *VolumeAttachmentStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) +var xxx_messageInfo_VolumeError proto.InternalMessageInfo + +func (m *VolumeNodeResources) Reset() { *m = VolumeNodeResources{} } +func (*VolumeNodeResources) ProtoMessage() {} +func (*VolumeNodeResources) Descriptor() ([]byte, []int) { + return fileDescriptor_7d2980599fd0de80, []int{15} +} +func (m *VolumeNodeResources) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VolumeNodeResources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } - return dAtA[:n], nil + return b[:n], nil +} +func (m *VolumeNodeResources) XXX_Merge(src proto.Message) { + xxx_messageInfo_VolumeNodeResources.Merge(m, src) +} +func (m *VolumeNodeResources) XXX_Size() int { + return m.Size() +} +func (m *VolumeNodeResources) XXX_DiscardUnknown() { + xxx_messageInfo_VolumeNodeResources.DiscardUnknown(m) } -func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0x8 - i++ - if m.Attached { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - if len(m.AttachmentMetadata) > 0 { - keysForAttachmentMetadata := make([]string, 0, len(m.AttachmentMetadata)) - for k := range m.AttachmentMetadata { - keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) - for _, k := range keysForAttachmentMetadata { - dAtA[i] = 0x12 - i++ - v := m.AttachmentMetadata[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } +var xxx_messageInfo_VolumeNodeResources proto.InternalMessageInfo + +func init() { + proto.RegisterType((*CSIDriver)(nil), "k8s.io.api.storage.v1beta1.CSIDriver") + proto.RegisterType((*CSIDriverList)(nil), "k8s.io.api.storage.v1beta1.CSIDriverList") + proto.RegisterType((*CSIDriverSpec)(nil), "k8s.io.api.storage.v1beta1.CSIDriverSpec") + proto.RegisterType((*CSINode)(nil), "k8s.io.api.storage.v1beta1.CSINode") + proto.RegisterType((*CSINodeDriver)(nil), "k8s.io.api.storage.v1beta1.CSINodeDriver") + proto.RegisterType((*CSINodeList)(nil), "k8s.io.api.storage.v1beta1.CSINodeList") + proto.RegisterType((*CSINodeSpec)(nil), "k8s.io.api.storage.v1beta1.CSINodeSpec") + proto.RegisterType((*StorageClass)(nil), "k8s.io.api.storage.v1beta1.StorageClass") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1beta1.StorageClass.ParametersEntry") + proto.RegisterType((*StorageClassList)(nil), "k8s.io.api.storage.v1beta1.StorageClassList") + proto.RegisterType((*VolumeAttachment)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachment") + proto.RegisterType((*VolumeAttachmentList)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentList") + proto.RegisterType((*VolumeAttachmentSource)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentSource") + proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentSpec") + proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentStatus") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentStatus.AttachmentMetadataEntry") + proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1beta1.VolumeError") + proto.RegisterType((*VolumeNodeResources)(nil), "k8s.io.api.storage.v1beta1.VolumeNodeResources") +} + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/storage/v1beta1/generated.proto", fileDescriptor_7d2980599fd0de80) +} + +var fileDescriptor_7d2980599fd0de80 = []byte{ + // 1344 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xbd, 0x6f, 0xdb, 0x46, + 0x1b, 0x37, 0x2d, 0x7f, 0x9e, 0xec, 0x44, 0xbe, 0x18, 0xef, 0xab, 0x57, 0x83, 0x64, 0xe8, 0x45, + 0x1b, 0x27, 0x48, 0xc8, 0x24, 0x48, 0x83, 0x20, 0x40, 0x07, 0xd3, 0x31, 0x50, 0x25, 0x96, 0xe3, + 0x9e, 0x8d, 0xa0, 0x08, 0x3a, 0xf4, 0x44, 0x3e, 0x91, 0x19, 0x93, 0x3c, 0x86, 0x3c, 0xa9, 0xd5, + 0xd6, 0xa9, 0x73, 0xd1, 0xa1, 0x7f, 0x41, 0xff, 0x85, 0x16, 0x68, 0x97, 0x8e, 0xcd, 0x54, 0x04, + 0x9d, 0x32, 0x09, 0x0d, 0xbb, 0x76, 0xeb, 0x66, 0x74, 0x28, 0xee, 0x78, 0x12, 0x29, 0x89, 0x8a, + 0xed, 0x0e, 0xde, 0x78, 0xcf, 0xc7, 0xef, 0xf9, 0x7e, 0xee, 0x88, 0xb6, 0x8f, 0xef, 0x47, 0xba, + 0xc3, 0x8c, 0xe3, 0x4e, 0x0b, 0x42, 0x1f, 0x38, 0x44, 0x46, 0x17, 0x7c, 0x9b, 0x85, 0x86, 0x62, + 0xd0, 0xc0, 0x31, 0x22, 0xce, 0x42, 0xda, 0x06, 0xa3, 0x7b, 0xbb, 0x05, 0x9c, 0xde, 0x36, 0xda, + 0xe0, 0x43, 0x48, 0x39, 0xd8, 0x7a, 0x10, 0x32, 0xce, 0x70, 0x25, 0x91, 0xd5, 0x69, 0xe0, 0xe8, + 0x4a, 0x56, 0x57, 0xb2, 0x95, 0x9b, 0x6d, 0x87, 0x1f, 0x75, 0x5a, 0xba, 0xc5, 0x3c, 0xa3, 0xcd, + 0xda, 0xcc, 0x90, 0x2a, 0xad, 0xce, 0x73, 0x79, 0x92, 0x07, 0xf9, 0x95, 0x40, 0x55, 0xea, 0x19, + 0xb3, 0x16, 0x0b, 0x85, 0xcd, 0x71, 0x73, 0x95, 0xbb, 0xa9, 0x8c, 0x47, 0xad, 0x23, 0xc7, 0x87, + 0xb0, 0x67, 0x04, 0xc7, 0x6d, 0x41, 0x88, 0x0c, 0x0f, 0x38, 0xcd, 0xd3, 0x32, 0xa6, 0x69, 0x85, + 0x1d, 0x9f, 0x3b, 0x1e, 0x4c, 0x28, 0xdc, 0x3b, 0x4d, 0x21, 0xb2, 0x8e, 0xc0, 0xa3, 0xe3, 0x7a, + 0xf5, 0x9f, 0x34, 0xb4, 0xbc, 0x7d, 0xd0, 0x78, 0x18, 0x3a, 0x5d, 0x08, 0xf1, 0x67, 0x68, 0x49, + 0x78, 0x64, 0x53, 0x4e, 0xcb, 0xda, 0x86, 0xb6, 0x59, 0xbc, 0x73, 0x4b, 0x4f, 0xd3, 0x35, 0x04, + 0xd6, 0x83, 0xe3, 0xb6, 0x20, 0x44, 0xba, 0x90, 0xd6, 0xbb, 0xb7, 0xf5, 0x27, 0xad, 0x17, 0x60, + 0xf1, 0x26, 0x70, 0x6a, 0xe2, 0x57, 0xfd, 0xda, 0x4c, 0xdc, 0xaf, 0xa1, 0x94, 0x46, 0x86, 0xa8, + 0xf8, 0x31, 0x9a, 0x8b, 0x02, 0xb0, 0xca, 0xb3, 0x12, 0xfd, 0x9a, 0x3e, 0xbd, 0x18, 0xfa, 0xd0, + 0xad, 0x83, 0x00, 0x2c, 0x73, 0x45, 0xc1, 0xce, 0x89, 0x13, 0x91, 0x20, 0xf5, 0x1f, 0x35, 0xb4, + 0x3a, 0x94, 0xda, 0x75, 0x22, 0x8e, 0x3f, 0x9d, 0x08, 0x40, 0x3f, 0x5b, 0x00, 0x42, 0x5b, 0xba, + 0x5f, 0x52, 0x76, 0x96, 0x06, 0x94, 0x8c, 0xf3, 0x8f, 0xd0, 0xbc, 0xc3, 0xc1, 0x8b, 0xca, 0xb3, + 0x1b, 0x85, 0xcd, 0xe2, 0x9d, 0xf7, 0xce, 0xe4, 0xbd, 0xb9, 0xaa, 0x10, 0xe7, 0x1b, 0x42, 0x97, + 0x24, 0x10, 0xf5, 0x3f, 0xb3, 0xbe, 0x8b, 0x98, 0xf0, 0x03, 0x74, 0x89, 0x72, 0x4e, 0xad, 0x23, + 0x02, 0x2f, 0x3b, 0x4e, 0x08, 0xb6, 0x8c, 0x60, 0xc9, 0xc4, 0x71, 0xbf, 0x76, 0x69, 0x6b, 0x84, + 0x43, 0xc6, 0x24, 0x85, 0x6e, 0xc0, 0xec, 0x86, 0xff, 0x9c, 0x3d, 0xf1, 0x9b, 0xac, 0xe3, 0x73, + 0x99, 0x60, 0xa5, 0xbb, 0x3f, 0xc2, 0x21, 0x63, 0x92, 0xd8, 0x42, 0xeb, 0x5d, 0xe6, 0x76, 0x3c, + 0xd8, 0x75, 0x9e, 0x83, 0xd5, 0xb3, 0x5c, 0x68, 0x32, 0x1b, 0xa2, 0x72, 0x61, 0xa3, 0xb0, 0xb9, + 0x6c, 0x1a, 0x71, 0xbf, 0xb6, 0xfe, 0x34, 0x87, 0x7f, 0xd2, 0xaf, 0x5d, 0xc9, 0xa1, 0x93, 0x5c, + 0xb0, 0xfa, 0x0f, 0x1a, 0x5a, 0xdc, 0x3e, 0x68, 0xec, 0x31, 0x1b, 0x2e, 0xa0, 0xcb, 0x1a, 0x23, + 0x5d, 0x76, 0xf5, 0x94, 0x3a, 0x09, 0xa7, 0xa6, 0xf6, 0xd8, 0x5f, 0x49, 0x9d, 0x84, 0x8c, 0x1a, + 0x92, 0x0d, 0x34, 0xe7, 0x53, 0x0f, 0xa4, 0xeb, 0xcb, 0xa9, 0xce, 0x1e, 0xf5, 0x80, 0x48, 0x0e, + 0x7e, 0x1f, 0x2d, 0xf8, 0xcc, 0x86, 0xc6, 0x43, 0xe9, 0xc0, 0xb2, 0x79, 0x49, 0xc9, 0x2c, 0xec, + 0x49, 0x2a, 0x51, 0x5c, 0x7c, 0x17, 0xad, 0x70, 0x16, 0x30, 0x97, 0xb5, 0x7b, 0x8f, 0xa1, 0x37, + 0xc8, 0x78, 0x29, 0xee, 0xd7, 0x56, 0x0e, 0x33, 0x74, 0x32, 0x22, 0x85, 0x5b, 0xa8, 0x48, 0x5d, + 0x97, 0x59, 0x94, 0xd3, 0x96, 0x0b, 0xe5, 0x39, 0x19, 0xa3, 0xf1, 0xae, 0x18, 0x93, 0x32, 0x09, + 0xe3, 0x04, 0x22, 0xd6, 0x09, 0x2d, 0x88, 0xcc, 0xcb, 0x71, 0xbf, 0x56, 0xdc, 0x4a, 0x71, 0x48, + 0x16, 0xb4, 0xfe, 0xbd, 0x86, 0x8a, 0x2a, 0xea, 0x0b, 0x98, 0xab, 0x8f, 0x46, 0xe7, 0xea, 0xff, + 0x67, 0xa8, 0xd7, 0x94, 0xa9, 0xb2, 0x86, 0x6e, 0xcb, 0x91, 0x3a, 0x44, 0x8b, 0xb6, 0x2c, 0x5a, + 0x54, 0xd6, 0x24, 0xf4, 0xb5, 0x33, 0x40, 0xab, 0xb1, 0xbd, 0xac, 0x0c, 0x2c, 0x26, 0xe7, 0x88, + 0x0c, 0xa0, 0xea, 0xdf, 0x2c, 0xa0, 0x95, 0x83, 0x44, 0x77, 0xdb, 0xa5, 0x51, 0x74, 0x01, 0x0d, + 0xfd, 0x01, 0x2a, 0x06, 0x21, 0xeb, 0x3a, 0x91, 0xc3, 0x7c, 0x08, 0x55, 0x5b, 0x5d, 0x51, 0x2a, + 0xc5, 0xfd, 0x94, 0x45, 0xb2, 0x72, 0xd8, 0x45, 0x28, 0xa0, 0x21, 0xf5, 0x80, 0x8b, 0x14, 0x14, + 0x64, 0x0a, 0xee, 0xbf, 0x2b, 0x05, 0xd9, 0xb0, 0xf4, 0xfd, 0xa1, 0xea, 0x8e, 0xcf, 0xc3, 0x5e, + 0xea, 0x62, 0xca, 0x20, 0x19, 0x7c, 0x7c, 0x8c, 0x56, 0x43, 0xb0, 0x5c, 0xea, 0x78, 0xfb, 0xcc, + 0x75, 0xac, 0x9e, 0x6c, 0xcd, 0x65, 0x73, 0x27, 0xee, 0xd7, 0x56, 0x49, 0x96, 0x71, 0xd2, 0xaf, + 0xdd, 0x9a, 0xbc, 0x3a, 0xf5, 0x7d, 0x08, 0x23, 0x27, 0xe2, 0xe0, 0xf3, 0xa4, 0x61, 0x47, 0x74, + 0xc8, 0x28, 0xb6, 0x98, 0x1d, 0x4f, 0xac, 0xaf, 0x27, 0x01, 0x77, 0x98, 0x1f, 0x95, 0xe7, 0xd3, + 0xd9, 0x69, 0x66, 0xe8, 0x64, 0x44, 0x0a, 0xef, 0xa2, 0x75, 0xd1, 0xe6, 0x9f, 0x27, 0x06, 0x76, + 0xbe, 0x08, 0xa8, 0x2f, 0x52, 0x55, 0x5e, 0x90, 0xdb, 0xb2, 0x2c, 0x76, 0xdd, 0x56, 0x0e, 0x9f, + 0xe4, 0x6a, 0xe1, 0x4f, 0xd0, 0x5a, 0xb2, 0xec, 0x4c, 0xc7, 0xb7, 0x1d, 0xbf, 0x2d, 0x56, 0x5d, + 0x79, 0x51, 0x06, 0x7d, 0x3d, 0xee, 0xd7, 0xd6, 0x9e, 0x8e, 0x33, 0x4f, 0xf2, 0x88, 0x64, 0x12, + 0x04, 0xbf, 0x44, 0x6b, 0xd2, 0x22, 0xd8, 0x6a, 0x11, 0x38, 0x10, 0x95, 0x97, 0x64, 0xfd, 0x36, + 0xb3, 0xf5, 0x13, 0xa9, 0x13, 0x8d, 0x34, 0x58, 0x17, 0x07, 0xe0, 0x82, 0xc5, 0x59, 0x78, 0x08, + 0xa1, 0x67, 0xfe, 0x4f, 0xd5, 0x6b, 0x6d, 0x6b, 0x1c, 0x8a, 0x4c, 0xa2, 0x57, 0x3e, 0x44, 0x97, + 0xc7, 0x0a, 0x8e, 0x4b, 0xa8, 0x70, 0x0c, 0xbd, 0x64, 0xd1, 0x11, 0xf1, 0x89, 0xd7, 0xd1, 0x7c, + 0x97, 0xba, 0x1d, 0x48, 0x3a, 0x90, 0x24, 0x87, 0x07, 0xb3, 0xf7, 0xb5, 0xfa, 0xcf, 0x1a, 0x2a, + 0x65, 0xbb, 0xe7, 0x02, 0xd6, 0x46, 0x73, 0x74, 0x6d, 0x6c, 0x9e, 0xb5, 0xb1, 0xa7, 0xec, 0x8e, + 0xef, 0x66, 0x51, 0x29, 0x29, 0x4e, 0x72, 0xd9, 0x7a, 0xe0, 0xf3, 0x0b, 0x18, 0x6d, 0x32, 0x72, + 0x57, 0xdd, 0x3a, 0x7d, 0x8f, 0xa7, 0xde, 0x4d, 0xbb, 0xb4, 0xf0, 0x33, 0xb4, 0x10, 0x71, 0xca, + 0x3b, 0x62, 0xe6, 0x05, 0xea, 0x9d, 0x73, 0xa1, 0x4a, 0xcd, 0xf4, 0xd2, 0x4a, 0xce, 0x44, 0x21, + 0xd6, 0x7f, 0xd1, 0xd0, 0xfa, 0xb8, 0xca, 0x05, 0x14, 0xfb, 0xe3, 0xd1, 0x62, 0xdf, 0x38, 0x4f, + 0x44, 0x53, 0x0a, 0xfe, 0x9b, 0x86, 0xfe, 0x33, 0x11, 0xbc, 0xbc, 0x1e, 0xc5, 0x9e, 0x08, 0xc6, + 0xb6, 0xd1, 0x5e, 0x7a, 0xe7, 0xcb, 0x3d, 0xb1, 0x9f, 0xc3, 0x27, 0xb9, 0x5a, 0xf8, 0x05, 0x2a, + 0x39, 0xbe, 0xeb, 0xf8, 0x90, 0xd0, 0x0e, 0xd2, 0x72, 0xe7, 0x0e, 0xf3, 0x38, 0xb2, 0x2c, 0xf3, + 0x7a, 0xdc, 0xaf, 0x95, 0x1a, 0x63, 0x28, 0x64, 0x02, 0xb7, 0xfe, 0x6b, 0x4e, 0x79, 0xe4, 0x5d, + 0x78, 0x03, 0x2d, 0x25, 0x8f, 0x46, 0x08, 0x55, 0x18, 0xc3, 0x74, 0x6f, 0x29, 0x3a, 0x19, 0x4a, + 0xc8, 0x0e, 0x92, 0xa9, 0x50, 0x8e, 0x9e, 0xaf, 0x83, 0xa4, 0x66, 0xa6, 0x83, 0xe4, 0x99, 0x28, + 0x44, 0xe1, 0x89, 0x78, 0x00, 0xc9, 0x84, 0x16, 0x46, 0x3d, 0xd9, 0x53, 0x74, 0x32, 0x94, 0xa8, + 0xff, 0x5d, 0xc8, 0xa9, 0x92, 0x6c, 0xc5, 0x4c, 0x48, 0x83, 0xb7, 0xf2, 0x78, 0x48, 0xf6, 0x30, + 0x24, 0x1b, 0x7f, 0xab, 0x21, 0x4c, 0x87, 0x10, 0xcd, 0x41, 0xab, 0x26, 0xfd, 0xf4, 0xe8, 0xfc, + 0x13, 0xa2, 0x6f, 0x4d, 0x80, 0x25, 0xf7, 0x64, 0x45, 0x39, 0x81, 0x27, 0x05, 0x48, 0x8e, 0x07, + 0xd8, 0x41, 0xc5, 0x84, 0xba, 0x13, 0x86, 0x2c, 0x54, 0x23, 0x7b, 0xf5, 0x74, 0x87, 0xa4, 0xb8, + 0x59, 0x95, 0x0f, 0xb9, 0x54, 0xff, 0xa4, 0x5f, 0x2b, 0x66, 0xf8, 0x24, 0x8b, 0x2d, 0x4c, 0xd9, + 0x90, 0x9a, 0x9a, 0xfb, 0x17, 0xa6, 0x1e, 0xc2, 0x74, 0x53, 0x19, 0xec, 0xca, 0x0e, 0xfa, 0xef, + 0x94, 0x04, 0x9d, 0xeb, 0x5e, 0xf9, 0x4a, 0x43, 0x59, 0x1b, 0x78, 0x17, 0xcd, 0x89, 0xff, 0x59, + 0xb5, 0x61, 0xae, 0x9f, 0x6d, 0xc3, 0x1c, 0x3a, 0x1e, 0xa4, 0x8b, 0x52, 0x9c, 0x88, 0x44, 0xc1, + 0xd7, 0xd0, 0xa2, 0x07, 0x51, 0x44, 0xdb, 0xca, 0x72, 0xfa, 0xea, 0x6b, 0x26, 0x64, 0x32, 0xe0, + 0xd7, 0xef, 0xa1, 0x2b, 0x39, 0xef, 0x68, 0x5c, 0x43, 0xf3, 0x96, 0xfc, 0xe1, 0x12, 0x0e, 0xcd, + 0x9b, 0xcb, 0x62, 0xcb, 0x6c, 0xcb, 0xff, 0xac, 0x84, 0x6e, 0xde, 0x7c, 0xf5, 0xb6, 0x3a, 0xf3, + 0xfa, 0x6d, 0x75, 0xe6, 0xcd, 0xdb, 0xea, 0xcc, 0x97, 0x71, 0x55, 0x7b, 0x15, 0x57, 0xb5, 0xd7, + 0x71, 0x55, 0x7b, 0x13, 0x57, 0xb5, 0xdf, 0xe3, 0xaa, 0xf6, 0xf5, 0x1f, 0xd5, 0x99, 0x67, 0x8b, + 0x2a, 0xdf, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x72, 0xff, 0xde, 0x2e, 0xe4, 0x10, 0x00, 0x00, +} + +func (m *CSIDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if m.AttachError != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AttachError.Size())) - n8, err := m.AttachError.MarshalTo(dAtA[i:]) + return dAtA[:n], nil +} + +func (m *CSIDriver) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CSIDriver) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n8 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - if m.DetachError != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DetachError.Size())) - n9, err := m.DetachError.MarshalTo(dAtA[i:]) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n9 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *VolumeError) Marshal() (dAtA []byte, err error) { +func (m *CSIDriverList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CSIDriverList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CSIDriverList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Time.Size())) - n10, err := m.Time.MarshalTo(dAtA[i:]) + return len(dAtA) - i, nil +} + +func (m *CSIDriverSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { - return 0, err + return nil, err } - i += n10 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - return i, nil + return dAtA[:n], nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 +func (m *CSIDriverSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *StorageClass) Size() (n int) { + +func (m *CSIDriverSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Provisioner) - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Parameters) > 0 { - for k, v := range m.Parameters { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if len(m.VolumeLifecycleModes) > 0 { + for iNdEx := len(m.VolumeLifecycleModes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.VolumeLifecycleModes[iNdEx]) + copy(dAtA[i:], m.VolumeLifecycleModes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeLifecycleModes[iNdEx]))) + i-- + dAtA[i] = 0x1a } } - if m.ReclaimPolicy != nil { - l = len(*m.ReclaimPolicy) - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.MountOptions) > 0 { - for _, s := range m.MountOptions { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) + if m.PodInfoOnMount != nil { + i-- + if *m.PodInfoOnMount { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x10 } - if m.AllowVolumeExpansion != nil { - n += 2 - } - if m.VolumeBindingMode != nil { - l = len(*m.VolumeBindingMode) - n += 1 + l + sovGenerated(uint64(l)) - } - if len(m.AllowedTopologies) > 0 { - for _, e := range m.AllowedTopologies { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.AttachRequired != nil { + i-- + if *m.AttachRequired { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x8 } - return n + return len(dAtA) - i, nil } -func (m *StorageClassList) Size() (n int) { - var l int - _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } +func (m *CSINode) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *VolumeAttachment) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Spec.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = m.Status.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *CSINode) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *VolumeAttachmentList) Size() (n int) { +func (m *CSINode) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return n + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *VolumeAttachmentSource) Size() (n int) { - var l int - _ = l - if m.PersistentVolumeName != nil { - l = len(*m.PersistentVolumeName) - n += 1 + l + sovGenerated(uint64(l)) +func (m *CSINodeDriver) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *VolumeAttachmentSpec) Size() (n int) { - var l int - _ = l - l = len(m.Attacher) - n += 1 + l + sovGenerated(uint64(l)) - l = m.Source.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.NodeName) - n += 1 + l + sovGenerated(uint64(l)) - return n +func (m *CSINodeDriver) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *VolumeAttachmentStatus) Size() (n int) { +func (m *CSINodeDriver) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - n += 2 - if len(m.AttachmentMetadata) > 0 { - for k, v := range m.AttachmentMetadata { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + if m.Allocatable != nil { + { + size, err := m.Allocatable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } - if m.AttachError != nil { - l = m.AttachError.Size() - n += 1 + l + sovGenerated(uint64(l)) + if len(m.TopologyKeys) > 0 { + for iNdEx := len(m.TopologyKeys) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.TopologyKeys[iNdEx]) + copy(dAtA[i:], m.TopologyKeys[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TopologyKeys[iNdEx]))) + i-- + dAtA[i] = 0x1a + } } - if m.DetachError != nil { - l = m.DetachError.Size() - n += 1 + l + sovGenerated(uint64(l)) + i -= len(m.NodeID) + copy(dAtA[i:], m.NodeID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeID))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CSINodeList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func (m *VolumeError) Size() (n int) { +func (m *CSINodeList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CSINodeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = m.Time.Size() - n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Message) - n += 1 + l + sovGenerated(uint64(l)) - return n + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } +func (m *CSINodeSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - return n + return dAtA[:n], nil } -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + +func (m *CSINodeSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (this *StorageClass) String() string { - if this == nil { - return "nil" + +func (m *CSINodeSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Drivers) > 0 { + for iNdEx := len(m.Drivers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Drivers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - keysForParameters := make([]string, 0, len(this.Parameters)) - for k := range this.Parameters { - keysForParameters = append(keysForParameters, k) + return len(dAtA) - i, nil +} + +func (m *StorageClass) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) - mapStringForParameters := "map[string]string{" - for _, k := range keysForParameters { - mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k]) + return dAtA[:n], nil +} + +func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StorageClass) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AllowedTopologies) > 0 { + for iNdEx := len(m.AllowedTopologies) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedTopologies[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } } - mapStringForParameters += "}" - s := strings.Join([]string{`&StorageClass{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Provisioner:` + fmt.Sprintf("%v", this.Provisioner) + `,`, - `Parameters:` + mapStringForParameters + `,`, - `ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`, - `MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`, - `AllowVolumeExpansion:` + valueToStringGenerated(this.AllowVolumeExpansion) + `,`, - `VolumeBindingMode:` + valueToStringGenerated(this.VolumeBindingMode) + `,`, - `AllowedTopologies:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedTopologies), "TopologySelectorTerm", "k8s_io_api_core_v1.TopologySelectorTerm", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + if m.VolumeBindingMode != nil { + i -= len(*m.VolumeBindingMode) + copy(dAtA[i:], *m.VolumeBindingMode) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.VolumeBindingMode))) + i-- + dAtA[i] = 0x3a + } + if m.AllowVolumeExpansion != nil { + i-- + if *m.AllowVolumeExpansion { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if len(m.MountOptions) > 0 { + for iNdEx := len(m.MountOptions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.MountOptions[iNdEx]) + copy(dAtA[i:], m.MountOptions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MountOptions[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if m.ReclaimPolicy != nil { + i -= len(*m.ReclaimPolicy) + copy(dAtA[i:], *m.ReclaimPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ReclaimPolicy))) + i-- + dAtA[i] = 0x22 + } + if len(m.Parameters) > 0 { + keysForParameters := make([]string, 0, len(m.Parameters)) + for k := range m.Parameters { + keysForParameters = append(keysForParameters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) + for iNdEx := len(keysForParameters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Parameters[string(keysForParameters[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForParameters[iNdEx]) + copy(dAtA[i:], keysForParameters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForParameters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Provisioner) + copy(dAtA[i:], m.Provisioner) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Provisioner))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (this *StorageClassList) String() string { - if this == nil { - return "nil" + +func (m *StorageClassList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - s := strings.Join([]string{`&StorageClassList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "StorageClass", "StorageClass", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return dAtA[:n], nil } -func (this *VolumeAttachment) String() string { - if this == nil { - return "nil" + +func (m *StorageClassList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StorageClassList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - s := strings.Join([]string{`&VolumeAttachment{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "VolumeAttachmentSpec", "VolumeAttachmentSpec", 1), `&`, ``, 1) + `,`, - `Status:` + strings.Replace(strings.Replace(this.Status.String(), "VolumeAttachmentStatus", "VolumeAttachmentStatus", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (this *VolumeAttachmentList) String() string { - if this == nil { - return "nil" + +func (m *VolumeAttachment) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - s := strings.Join([]string{`&VolumeAttachmentList{`, - `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "VolumeAttachment", "VolumeAttachment", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s + return dAtA[:n], nil } -func (this *VolumeAttachmentSource) String() string { - if this == nil { - return "nil" + +func (m *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachment) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - s := strings.Join([]string{`&VolumeAttachmentSource{`, - `PersistentVolumeName:` + valueToStringGenerated(this.PersistentVolumeName) + `,`, - `}`, - }, "") - return s + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (this *VolumeAttachmentSpec) String() string { - if this == nil { - return "nil" + +func (m *VolumeAttachmentList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - s := strings.Join([]string{`&VolumeAttachmentSpec{`, - `Attacher:` + fmt.Sprintf("%v", this.Attacher) + `,`, - `Source:` + strings.Replace(strings.Replace(this.Source.String(), "VolumeAttachmentSource", "VolumeAttachmentSource", 1), `&`, ``, 1) + `,`, - `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, - `}`, - }, "") - return s + return dAtA[:n], nil } -func (this *VolumeAttachmentStatus) String() string { - if this == nil { - return "nil" + +func (m *VolumeAttachmentList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - keysForAttachmentMetadata := make([]string, 0, len(this.AttachmentMetadata)) - for k := range this.AttachmentMetadata { - keysForAttachmentMetadata = append(keysForAttachmentMetadata, k) + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) - mapStringForAttachmentMetadata := "map[string]string{" - for _, k := range keysForAttachmentMetadata { - mapStringForAttachmentMetadata += fmt.Sprintf("%v: %v,", k, this.AttachmentMetadata[k]) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - mapStringForAttachmentMetadata += "}" - s := strings.Join([]string{`&VolumeAttachmentStatus{`, - `Attached:` + fmt.Sprintf("%v", this.Attached) + `,`, - `AttachmentMetadata:` + mapStringForAttachmentMetadata + `,`, - `AttachError:` + strings.Replace(fmt.Sprintf("%v", this.AttachError), "VolumeError", "VolumeError", 1) + `,`, - `DetachError:` + strings.Replace(fmt.Sprintf("%v", this.DetachError), "VolumeError", "VolumeError", 1) + `,`, - `}`, - }, "") - return s + return dAtA[:n], nil } -func (this *VolumeError) String() string { - if this == nil { - return "nil" + +func (m *VolumeAttachmentSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.InlineVolumeSpec != nil { + { + size, err := m.InlineVolumeSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.PersistentVolumeName != nil { + i -= len(*m.PersistentVolumeName) + copy(dAtA[i:], *m.PersistentVolumeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PersistentVolumeName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.NodeName) + copy(dAtA[i:], m.NodeName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) + i-- + dAtA[i] = 0x1a + { + size, err := m.Source.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Attacher) + copy(dAtA[i:], m.Attacher) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Attacher))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *VolumeAttachmentStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeAttachmentStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DetachError != nil { + { + size, err := m.DetachError.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.AttachError != nil { + { + size, err := m.AttachError.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.AttachmentMetadata) > 0 { + keysForAttachmentMetadata := make([]string, 0, len(m.AttachmentMetadata)) + for k := range m.AttachmentMetadata { + keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) + for iNdEx := len(keysForAttachmentMetadata) - 1; iNdEx >= 0; iNdEx-- { + v := m.AttachmentMetadata[string(keysForAttachmentMetadata[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForAttachmentMetadata[iNdEx]) + copy(dAtA[i:], keysForAttachmentMetadata[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAttachmentMetadata[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i-- + if m.Attached { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *VolumeError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Time.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *VolumeNodeResources) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VolumeNodeResources) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VolumeNodeResources) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Count != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Count)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CSIDriver) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CSIDriverList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CSIDriverSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AttachRequired != nil { + n += 2 + } + if m.PodInfoOnMount != nil { + n += 2 + } + if len(m.VolumeLifecycleModes) > 0 { + for _, s := range m.VolumeLifecycleModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CSINode) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CSINodeDriver) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NodeID) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.TopologyKeys) > 0 { + for _, s := range m.TopologyKeys { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Allocatable != nil { + l = m.Allocatable.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *CSINodeList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CSINodeSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Drivers) > 0 { + for _, e := range m.Drivers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *StorageClass) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Provisioner) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Parameters) > 0 { + for k, v := range m.Parameters { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.ReclaimPolicy != nil { + l = len(*m.ReclaimPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.MountOptions) > 0 { + for _, s := range m.MountOptions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.AllowVolumeExpansion != nil { + n += 2 + } + if m.VolumeBindingMode != nil { + l = len(*m.VolumeBindingMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.AllowedTopologies) > 0 { + for _, e := range m.AllowedTopologies { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *StorageClassList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *VolumeAttachment) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeAttachmentList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *VolumeAttachmentSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PersistentVolumeName != nil { + l = len(*m.PersistentVolumeName) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.InlineVolumeSpec != nil { + l = m.InlineVolumeSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VolumeAttachmentSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Attacher) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Source.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeAttachmentStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + if len(m.AttachmentMetadata) > 0 { + for k, v := range m.AttachmentMetadata { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.AttachError != nil { + l = m.AttachError.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DetachError != nil { + l = m.DetachError.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VolumeError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Time.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeNodeResources) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Count != nil { + n += 1 + sovGenerated(uint64(*m.Count)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CSIDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSIDriver{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CSIDriverSpec", "CSIDriverSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSIDriverList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]CSIDriver{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CSIDriver", "CSIDriver", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CSIDriverList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *CSIDriverSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSIDriverSpec{`, + `AttachRequired:` + valueToStringGenerated(this.AttachRequired) + `,`, + `PodInfoOnMount:` + valueToStringGenerated(this.PodInfoOnMount) + `,`, + `VolumeLifecycleModes:` + fmt.Sprintf("%v", this.VolumeLifecycleModes) + `,`, + `}`, + }, "") + return s +} +func (this *CSINode) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSINode{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CSINodeSpec", "CSINodeSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSINodeDriver) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CSINodeDriver{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, + `TopologyKeys:` + fmt.Sprintf("%v", this.TopologyKeys) + `,`, + `Allocatable:` + strings.Replace(this.Allocatable.String(), "VolumeNodeResources", "VolumeNodeResources", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CSINodeList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]CSINode{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CSINode", "CSINode", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CSINodeList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *CSINodeSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForDrivers := "[]CSINodeDriver{" + for _, f := range this.Drivers { + repeatedStringForDrivers += strings.Replace(strings.Replace(f.String(), "CSINodeDriver", "CSINodeDriver", 1), `&`, ``, 1) + "," + } + repeatedStringForDrivers += "}" + s := strings.Join([]string{`&CSINodeSpec{`, + `Drivers:` + repeatedStringForDrivers + `,`, + `}`, + }, "") + return s +} +func (this *StorageClass) String() string { + if this == nil { + return "nil" + } + repeatedStringForAllowedTopologies := "[]TopologySelectorTerm{" + for _, f := range this.AllowedTopologies { + repeatedStringForAllowedTopologies += fmt.Sprintf("%v", f) + "," + } + repeatedStringForAllowedTopologies += "}" + keysForParameters := make([]string, 0, len(this.Parameters)) + for k := range this.Parameters { + keysForParameters = append(keysForParameters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) + mapStringForParameters := "map[string]string{" + for _, k := range keysForParameters { + mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k]) + } + mapStringForParameters += "}" + s := strings.Join([]string{`&StorageClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Provisioner:` + fmt.Sprintf("%v", this.Provisioner) + `,`, + `Parameters:` + mapStringForParameters + `,`, + `ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`, + `MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`, + `AllowVolumeExpansion:` + valueToStringGenerated(this.AllowVolumeExpansion) + `,`, + `VolumeBindingMode:` + valueToStringGenerated(this.VolumeBindingMode) + `,`, + `AllowedTopologies:` + repeatedStringForAllowedTopologies + `,`, + `}`, + }, "") + return s +} +func (this *StorageClassList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]StorageClass{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "StorageClass", "StorageClass", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&StorageClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachment) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeAttachment{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "VolumeAttachmentSpec", "VolumeAttachmentSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "VolumeAttachmentStatus", "VolumeAttachmentStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]VolumeAttachment{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "VolumeAttachment", "VolumeAttachment", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&VolumeAttachmentList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeAttachmentSource{`, + `PersistentVolumeName:` + valueToStringGenerated(this.PersistentVolumeName) + `,`, + `InlineVolumeSpec:` + strings.Replace(fmt.Sprintf("%v", this.InlineVolumeSpec), "PersistentVolumeSpec", "v11.PersistentVolumeSpec", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeAttachmentSpec{`, + `Attacher:` + fmt.Sprintf("%v", this.Attacher) + `,`, + `Source:` + strings.Replace(strings.Replace(this.Source.String(), "VolumeAttachmentSource", "VolumeAttachmentSource", 1), `&`, ``, 1) + `,`, + `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeAttachmentStatus) String() string { + if this == nil { + return "nil" + } + keysForAttachmentMetadata := make([]string, 0, len(this.AttachmentMetadata)) + for k := range this.AttachmentMetadata { + keysForAttachmentMetadata = append(keysForAttachmentMetadata, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) + mapStringForAttachmentMetadata := "map[string]string{" + for _, k := range keysForAttachmentMetadata { + mapStringForAttachmentMetadata += fmt.Sprintf("%v: %v,", k, this.AttachmentMetadata[k]) + } + mapStringForAttachmentMetadata += "}" + s := strings.Join([]string{`&VolumeAttachmentStatus{`, + `Attached:` + fmt.Sprintf("%v", this.Attached) + `,`, + `AttachmentMetadata:` + mapStringForAttachmentMetadata + `,`, + `AttachError:` + strings.Replace(this.AttachError.String(), "VolumeError", "VolumeError", 1) + `,`, + `DetachError:` + strings.Replace(this.DetachError.String(), "VolumeError", "VolumeError", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeError) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeError{`, + `Time:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Time), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeNodeResources) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeNodeResources{`, + `Count:` + valueToStringGenerated(this.Count) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CSIDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIDriverList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIDriverList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIDriverList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CSIDriver{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSIDriverSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSIDriverSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSIDriverSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AttachRequired", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AttachRequired = &b + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PodInfoOnMount", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.PodInfoOnMount = &b + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeLifecycleModes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeLifecycleModes = append(m.VolumeLifecycleModes, VolumeLifecycleMode(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINode) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINode: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINode: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINodeDriver) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINodeDriver: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINodeDriver: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NodeID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TopologyKeys", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TopologyKeys = append(m.TopologyKeys, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Allocatable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Allocatable == nil { + m.Allocatable = &VolumeNodeResources{} + } + if err := m.Allocatable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } - s := strings.Join([]string{`&VolumeError{`, - `Time:` + strings.Replace(strings.Replace(this.Time.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, - `Message:` + fmt.Sprintf("%v", this.Message) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" + + if iNdEx > l { + return io.ErrUnexpectedEOF } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) + return nil } -func (m *StorageClass) Unmarshal(dAtA []byte) error { +func (m *CSINodeList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -793,7 +2658,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -801,15 +2666,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + return fmt.Errorf("proto: CSINodeList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CSINodeList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -821,7 +2686,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -830,18 +2695,21 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -851,24 +2719,169 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Provisioner = string(dAtA[iNdEx:postIndex]) + m.Items = append(m.Items, CSINode{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CSINodeSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CSINodeSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CSINodeSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Drivers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Drivers = append(m.Drivers, CSINodeDriver{}) + if err := m.Drivers[len(m.Drivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StorageClass) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -880,7 +2893,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -889,10 +2902,53 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 + m.Provisioner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -902,41 +2958,29 @@ } b := dAtA[iNdEx] iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + if msglen < 0 { + return ErrInvalidLengthGenerated } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Parameters == nil { m.Parameters = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -946,41 +2990,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Parameters[mapkey] = mapvalue - } else { - var mapvalue string - m.Parameters[mapkey] = mapvalue } + m.Parameters[mapkey] = mapvalue iNdEx = postIndex case 4: if wireType != 2 { @@ -996,7 +3085,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1006,6 +3095,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1026,7 +3118,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1036,6 +3128,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1055,7 +3150,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1076,7 +3171,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1086,6 +3181,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1106,7 +3204,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1115,10 +3213,13 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowedTopologies = append(m.AllowedTopologies, k8s_io_api_core_v1.TopologySelectorTerm{}) + m.AllowedTopologies = append(m.AllowedTopologies, v11.TopologySelectorTerm{}) if err := m.AllowedTopologies[len(m.AllowedTopologies)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1132,6 +3233,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1159,7 +3263,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1187,7 +3291,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1196,6 +3300,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1217,7 +3324,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1226,6 +3333,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1243,6 +3353,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1270,7 +3383,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1298,7 +3411,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1307,6 +3420,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1328,7 +3444,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1337,6 +3453,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1358,7 +3477,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1367,6 +3486,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1383,6 +3505,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1410,7 +3535,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1438,7 +3563,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1447,6 +3572,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1468,7 +3596,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1477,6 +3605,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1494,6 +3625,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1521,7 +3655,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1549,7 +3683,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1559,12 +3693,51 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } s := string(dAtA[iNdEx:postIndex]) m.PersistentVolumeName = &s iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InlineVolumeSpec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.InlineVolumeSpec == nil { + m.InlineVolumeSpec = &v11.PersistentVolumeSpec{} + } + if err := m.InlineVolumeSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1574,6 +3747,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1601,7 +3777,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1629,7 +3805,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1639,6 +3815,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1658,7 +3837,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1667,6 +3846,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1688,7 +3870,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1698,6 +3880,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1712,6 +3897,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1739,7 +3927,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1767,7 +3955,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1787,7 +3975,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1796,54 +3984,20 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.AttachmentMetadata == nil { m.AttachmentMetadata = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -1853,41 +4007,86 @@ } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.AttachmentMetadata[mapkey] = mapvalue - } else { - var mapvalue string - m.AttachmentMetadata[mapkey] = mapvalue } + m.AttachmentMetadata[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -1903,7 +4102,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1912,6 +4111,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1936,7 +4138,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1945,6 +4147,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1964,6 +4169,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1991,7 +4199,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2019,7 +4227,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2028,6 +4236,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2049,7 +4260,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2059,6 +4270,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2073,6 +4287,82 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeNodeResources) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeNodeResources: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeNodeResources: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Count = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2139,10 +4429,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -2171,6 +4464,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -2189,73 +4485,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/storage/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 988 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xc6, 0xf9, 0x70, 0xc6, 0x09, 0x4d, 0x86, 0x08, 0x8c, 0x0f, 0x76, 0xe4, 0x0b, 0xa6, - 0x6a, 0x77, 0x9b, 0xa8, 0xa0, 0x08, 0x89, 0x83, 0xb7, 0xe4, 0x00, 0x8a, 0xdb, 0x30, 0x89, 0x2a, - 0x54, 0x71, 0x60, 0xb2, 0xfb, 0x76, 0xb3, 0x78, 0x77, 0x67, 0x99, 0x19, 0x1b, 0x72, 0xe3, 0xc4, - 0x19, 0x71, 0xe0, 0x17, 0xf0, 0x3f, 0x38, 0x92, 0x13, 0xea, 0xb1, 0x27, 0x8b, 0x2c, 0xff, 0x22, - 0xe2, 0x80, 0x66, 0x76, 0x62, 0xaf, 0xbd, 0x0e, 0x6d, 0x7a, 0xe8, 0xcd, 0xef, 0xc7, 0xf3, 0xbc, - 0xdf, 0xb3, 0x46, 0x8f, 0xfa, 0xfb, 0xc2, 0x0e, 0x99, 0xd3, 0x1f, 0x9c, 0x02, 0x4f, 0x40, 0x82, - 0x70, 0x86, 0x90, 0xf8, 0x8c, 0x3b, 0xc6, 0x40, 0xd3, 0xd0, 0x11, 0x92, 0x71, 0x1a, 0x80, 0x33, - 0xdc, 0x3d, 0x05, 0x49, 0x77, 0x9d, 0x00, 0x12, 0xe0, 0x54, 0x82, 0x6f, 0xa7, 0x9c, 0x49, 0x86, - 0x1b, 0xb9, 0xaf, 0x4d, 0xd3, 0xd0, 0x36, 0xbe, 0xb6, 0xf1, 0x6d, 0xdc, 0x0f, 0x42, 0x79, 0x36, - 0x38, 0xb5, 0x3d, 0x16, 0x3b, 0x01, 0x0b, 0x98, 0xa3, 0x21, 0xa7, 0x83, 0xe7, 0x5a, 0xd2, 0x82, - 0xfe, 0x95, 0x53, 0x35, 0xda, 0x85, 0xb0, 0x1e, 0xe3, 0x2a, 0xe6, 0x6c, 0xb8, 0xc6, 0xc3, 0x89, - 0x4f, 0x4c, 0xbd, 0xb3, 0x30, 0x01, 0x7e, 0xee, 0xa4, 0xfd, 0x40, 0x29, 0x84, 0x13, 0x83, 0xa4, - 0xf3, 0x50, 0xce, 0x4d, 0x28, 0x3e, 0x48, 0x64, 0x18, 0x43, 0x09, 0xf0, 0xc9, 0xab, 0x00, 0xc2, - 0x3b, 0x83, 0x98, 0xce, 0xe2, 0xda, 0xbf, 0xae, 0xa0, 0xf5, 0xe3, 0xbc, 0x0b, 0x8f, 0x22, 0x2a, - 0x04, 0xfe, 0x16, 0x55, 0x55, 0x52, 0x3e, 0x95, 0xb4, 0x6e, 0xed, 0x58, 0x9d, 0xda, 0xde, 0x03, - 0x7b, 0xd2, 0xb1, 0x31, 0xb7, 0x9d, 0xf6, 0x03, 0xa5, 0x10, 0xb6, 0xf2, 0xb6, 0x87, 0xbb, 0xf6, - 0x93, 0xd3, 0xef, 0xc0, 0x93, 0x3d, 0x90, 0xd4, 0xc5, 0x17, 0xa3, 0xd6, 0x42, 0x36, 0x6a, 0xa1, - 0x89, 0x8e, 0x8c, 0x59, 0xf1, 0xc7, 0xa8, 0x96, 0x72, 0x36, 0x0c, 0x45, 0xc8, 0x12, 0xe0, 0xf5, - 0xc5, 0x1d, 0xab, 0xb3, 0xe6, 0xbe, 0x6b, 0x20, 0xb5, 0xa3, 0x89, 0x89, 0x14, 0xfd, 0x70, 0x84, - 0x50, 0x4a, 0x39, 0x8d, 0x41, 0x02, 0x17, 0xf5, 0xca, 0x4e, 0xa5, 0x53, 0xdb, 0xdb, 0xb7, 0x6f, - 0x1e, 0xa6, 0x5d, 0x2c, 0xcb, 0x3e, 0x1a, 0x43, 0x0f, 0x12, 0xc9, 0xcf, 0x27, 0x29, 0x4e, 0x0c, - 0xa4, 0xc0, 0x8f, 0xfb, 0x68, 0x83, 0x83, 0x17, 0xd1, 0x30, 0x3e, 0x62, 0x51, 0xe8, 0x9d, 0xd7, - 0x97, 0x74, 0x9a, 0x07, 0xd9, 0xa8, 0xb5, 0x41, 0x8a, 0x86, 0xab, 0x51, 0xeb, 0x41, 0x79, 0x0d, - 0xec, 0x23, 0xe0, 0x22, 0x14, 0x12, 0x12, 0xf9, 0x94, 0x45, 0x83, 0x18, 0xa6, 0x30, 0x64, 0x9a, - 0x1b, 0x3f, 0x44, 0xeb, 0x31, 0x1b, 0x24, 0xf2, 0x49, 0x2a, 0x43, 0x96, 0x88, 0xfa, 0xf2, 0x4e, - 0xa5, 0xb3, 0xe6, 0x6e, 0x66, 0xa3, 0xd6, 0x7a, 0xaf, 0xa0, 0x27, 0x53, 0x5e, 0xf8, 0x10, 0x6d, - 0xd3, 0x28, 0x62, 0x3f, 0xe4, 0x01, 0x0e, 0x7e, 0x4c, 0x69, 0xa2, 0x5a, 0x55, 0x5f, 0xd9, 0xb1, - 0x3a, 0x55, 0xb7, 0x9e, 0x8d, 0x5a, 0xdb, 0xdd, 0x39, 0x76, 0x32, 0x17, 0x85, 0xbf, 0x46, 0x5b, - 0x43, 0xad, 0x72, 0xc3, 0xc4, 0x0f, 0x93, 0xa0, 0xc7, 0x7c, 0xa8, 0xaf, 0xea, 0xa2, 0xef, 0x66, - 0xa3, 0xd6, 0xd6, 0xd3, 0x59, 0xe3, 0xd5, 0x3c, 0x25, 0x29, 0x93, 0xe0, 0xef, 0xd1, 0x96, 0x8e, - 0x08, 0xfe, 0x09, 0x4b, 0x59, 0xc4, 0x82, 0x10, 0x44, 0xbd, 0xaa, 0xe7, 0xd7, 0x29, 0xce, 0x4f, - 0xb5, 0x4e, 0x2d, 0x92, 0xf1, 0x3a, 0x3f, 0x86, 0x08, 0x3c, 0xc9, 0xf8, 0x09, 0xf0, 0xd8, 0xfd, - 0xc0, 0xcc, 0x6b, 0xab, 0x3b, 0x4b, 0x45, 0xca, 0xec, 0x8d, 0xcf, 0xd0, 0x9d, 0x99, 0x81, 0xe3, - 0x4d, 0x54, 0xe9, 0xc3, 0xb9, 0x5e, 0xe9, 0x35, 0xa2, 0x7e, 0xe2, 0x6d, 0xb4, 0x3c, 0xa4, 0xd1, - 0x00, 0xf2, 0x0d, 0x24, 0xb9, 0xf0, 0xe9, 0xe2, 0xbe, 0xd5, 0xfe, 0xc3, 0x42, 0x9b, 0xc5, 0xed, - 0x39, 0x0c, 0x85, 0xc4, 0xdf, 0x94, 0x0e, 0xc3, 0x7e, 0xbd, 0xc3, 0x50, 0x68, 0x7d, 0x16, 0x9b, - 0xa6, 0x86, 0xea, 0xb5, 0xa6, 0x70, 0x14, 0x3d, 0xb4, 0x1c, 0x4a, 0x88, 0x45, 0x7d, 0xb1, 0xdc, - 0x98, 0xff, 0x5b, 0x6c, 0x77, 0xc3, 0x90, 0x2e, 0x7f, 0xa1, 0xe0, 0x24, 0x67, 0x69, 0xff, 0xbe, - 0x88, 0x36, 0xf3, 0xe1, 0x74, 0xa5, 0xa4, 0xde, 0x59, 0x0c, 0x89, 0x7c, 0x0b, 0xa7, 0x4d, 0xd0, - 0x92, 0x48, 0xc1, 0xd3, 0x1d, 0x9d, 0x66, 0x2f, 0x15, 0x31, 0x9b, 0xdd, 0x71, 0x0a, 0x9e, 0xbb, - 0x6e, 0xd8, 0x97, 0x94, 0x44, 0x34, 0x17, 0x7e, 0x86, 0x56, 0x84, 0xa4, 0x72, 0xa0, 0x6e, 0x5e, - 0xb1, 0xee, 0xdd, 0x8a, 0x55, 0x23, 0xdd, 0x77, 0x0c, 0xef, 0x4a, 0x2e, 0x13, 0xc3, 0xd8, 0xfe, - 0xd3, 0x42, 0xdb, 0xb3, 0x90, 0xb7, 0x30, 0xec, 0xaf, 0xa6, 0x87, 0x7d, 0xef, 0x36, 0x15, 0xdd, - 0x30, 0xf0, 0xe7, 0xe8, 0xbd, 0x52, 0xed, 0x6c, 0xc0, 0x3d, 0x50, 0xcf, 0x44, 0x3a, 0xf3, 0x18, - 0x3d, 0xa6, 0x31, 0xe4, 0x97, 0x90, 0x3f, 0x13, 0x47, 0x73, 0xec, 0x64, 0x2e, 0xaa, 0xfd, 0xd7, - 0x9c, 0x8e, 0xa9, 0x61, 0xe1, 0x7b, 0xa8, 0x4a, 0xb5, 0x06, 0xb8, 0xa1, 0x1e, 0x77, 0xa0, 0x6b, - 0xf4, 0x64, 0xec, 0xa1, 0x87, 0xaa, 0xd3, 0x33, 0xab, 0x72, 0xbb, 0xa1, 0x6a, 0x64, 0x61, 0xa8, - 0x5a, 0x26, 0x86, 0x51, 0x65, 0x92, 0x30, 0x3f, 0x2f, 0xb2, 0x32, 0x9d, 0xc9, 0x63, 0xa3, 0x27, - 0x63, 0x8f, 0xf6, 0xbf, 0x95, 0x39, 0x9d, 0xd3, 0xdb, 0x51, 0x28, 0xc9, 0xd7, 0x25, 0x55, 0x4b, - 0x25, 0xf9, 0xe3, 0x92, 0x7c, 0xfc, 0x9b, 0x85, 0x30, 0x1d, 0x53, 0xf4, 0xae, 0xb7, 0x27, 0x1f, - 0xf1, 0x97, 0xb7, 0x5f, 0x5a, 0xbb, 0x5b, 0x22, 0xcb, 0x3f, 0x5d, 0x0d, 0x93, 0x04, 0x2e, 0x3b, - 0x90, 0x39, 0x19, 0xe0, 0x10, 0xd5, 0x72, 0xed, 0x01, 0xe7, 0x8c, 0x9b, 0x2b, 0xfa, 0xf0, 0xd5, - 0x09, 0x69, 0x77, 0xb7, 0xa9, 0x3e, 0xca, 0xdd, 0x09, 0xfe, 0x6a, 0xd4, 0xaa, 0x15, 0xec, 0xa4, - 0xc8, 0xad, 0x42, 0xf9, 0x30, 0x09, 0xb5, 0xf4, 0x06, 0xa1, 0x3e, 0x87, 0x9b, 0x43, 0x15, 0xb8, - 0x1b, 0x07, 0xe8, 0xfd, 0x1b, 0x1a, 0x74, 0xab, 0xa7, 0xfe, 0x67, 0x0b, 0x15, 0x63, 0xe0, 0x43, - 0xb4, 0xa4, 0xfe, 0x2e, 0x99, 0xa3, 0xbf, 0xfb, 0x7a, 0x47, 0x7f, 0x12, 0xc6, 0x30, 0x79, 0xbb, - 0x94, 0x44, 0x34, 0x0b, 0xfe, 0x08, 0xad, 0xc6, 0x20, 0x04, 0x0d, 0x4c, 0x64, 0xf7, 0x8e, 0x71, - 0x5a, 0xed, 0xe5, 0x6a, 0x72, 0x6d, 0x77, 0xef, 0x5f, 0x5c, 0x36, 0x17, 0x5e, 0x5c, 0x36, 0x17, - 0x5e, 0x5e, 0x36, 0x17, 0x7e, 0xca, 0x9a, 0xd6, 0x45, 0xd6, 0xb4, 0x5e, 0x64, 0x4d, 0xeb, 0x65, - 0xd6, 0xb4, 0xfe, 0xce, 0x9a, 0xd6, 0x2f, 0xff, 0x34, 0x17, 0x9e, 0xad, 0x9a, 0xbe, 0xfd, 0x17, - 0x00, 0x00, 0xff, 0xff, 0xb4, 0x63, 0x7e, 0xa7, 0x0b, 0x0b, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -29,14 +29,179 @@ // Package-wide variables from generator "generated". option go_package = "v1beta1"; +// CSIDriver captures information about a Container Storage Interface (CSI) +// volume driver deployed on the cluster. +// CSI drivers do not need to create the CSIDriver object directly. Instead they may use the +// cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically +// creates a CSIDriver object representing the driver. +// Kubernetes attach detach controller uses this object to determine whether attach is required. +// Kubelet uses this object to determine whether pod information needs to be passed on mount. +// CSIDriver objects are non-namespaced. +message CSIDriver { + // Standard object metadata. + // metadata.Name indicates the name of the CSI driver that this object + // refers to; it MUST be the same name returned by the CSI GetPluginName() + // call for that driver. + // The driver name must be 63 characters or less, beginning and ending with + // an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Specification of the CSI Driver. + optional CSIDriverSpec spec = 2; +} + +// CSIDriverList is a collection of CSIDriver objects. +message CSIDriverList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of CSIDriver + repeated CSIDriver items = 2; +} + +// CSIDriverSpec is the specification of a CSIDriver. +message CSIDriverSpec { + // attachRequired indicates this CSI volume driver requires an attach + // operation (because it implements the CSI ControllerPublishVolume() + // method), and that the Kubernetes attach detach controller should call + // the attach volume interface which checks the volumeattachment status + // and waits until the volume is attached before proceeding to mounting. + // The CSI external-attacher coordinates with CSI volume driver and updates + // the volumeattachment status when the attach operation is complete. + // If the CSIDriverRegistry feature gate is enabled and the value is + // specified to false, the attach operation will be skipped. + // Otherwise the attach operation will be called. + // +optional + optional bool attachRequired = 1; + + // If set to true, podInfoOnMount indicates this CSI volume driver + // requires additional pod information (like podName, podUID, etc.) during + // mount operations. + // If set to false, pod information will not be passed on mount. + // Default is false. + // The CSI driver specifies podInfoOnMount as part of driver deployment. + // If true, Kubelet will pass pod information as VolumeContext in the CSI + // NodePublishVolume() calls. + // The CSI driver is responsible for parsing and validating the information + // passed in as VolumeContext. + // The following VolumeConext will be passed if podInfoOnMount is set to true. + // This list might grow, but the prefix will be used. + // "csi.storage.k8s.io/pod.name": pod.Name + // "csi.storage.k8s.io/pod.namespace": pod.Namespace + // "csi.storage.k8s.io/pod.uid": string(pod.UID) + // "csi.storage.k8s.io/ephemeral": "true" iff the volume is an ephemeral inline volume + // defined by a CSIVolumeSource, otherwise "false" + // + // "csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is only + // required for drivers which support both the "Persistent" and "Ephemeral" VolumeLifecycleMode. + // Other drivers can leave pod info disabled and/or ignore this field. + // As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when + // deployed on such a cluster and the deployment determines which mode that is, for example + // via a command line parameter of the driver. + // +optional + optional bool podInfoOnMount = 2; + + // VolumeLifecycleModes defines what kind of volumes this CSI volume driver supports. + // The default if the list is empty is "Persistent", which is the usage + // defined by the CSI specification and implemented in Kubernetes via the usual + // PV/PVC mechanism. + // The other mode is "Ephemeral". In this mode, volumes are defined inline + // inside the pod spec with CSIVolumeSource and their lifecycle is tied to + // the lifecycle of that pod. A driver has to be aware of this + // because it is only going to get a NodePublishVolume call for such a volume. + // For more information about implementing this mode, see + // https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html + // A driver can support one or more of these modes and + // more modes may be added in the future. + // +optional + repeated string volumeLifecycleModes = 3; +} + +// CSINode holds information about all CSI drivers installed on a node. +// CSI drivers do not need to create the CSINode object directly. As long as +// they use the node-driver-registrar sidecar container, the kubelet will +// automatically populate the CSINode object for the CSI driver as part of +// kubelet plugin registration. +// CSINode has the same name as a node. If the object is missing, it means either +// there are no CSI Drivers available on the node, or the Kubelet version is low +// enough that it doesn't create this object. +// CSINode has an OwnerReference that points to the corresponding node object. +message CSINode { + // metadata.name must be the Kubernetes node name. + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the specification of CSINode + optional CSINodeSpec spec = 2; +} + +// CSINodeDriver holds information about the specification of one CSI driver installed on a node +message CSINodeDriver { + // This is the name of the CSI driver that this object refers to. + // This MUST be the same name returned by the CSI GetPluginName() call for + // that driver. + optional string name = 1; + + // nodeID of the node from the driver point of view. + // This field enables Kubernetes to communicate with storage systems that do + // not share the same nomenclature for nodes. For example, Kubernetes may + // refer to a given node as "node1", but the storage system may refer to + // the same node as "nodeA". When Kubernetes issues a command to the storage + // system to attach a volume to a specific node, it can use this field to + // refer to the node name using the ID that the storage system will + // understand, e.g. "nodeA" instead of "node1". This field is required. + optional string nodeID = 2; + + // topologyKeys is the list of keys supported by the driver. + // When a driver is initialized on a cluster, it provides a set of topology + // keys that it understands (e.g. "company.com/zone", "company.com/region"). + // When a driver is initialized on a node, it provides the same topology keys + // along with values. Kubelet will expose these topology keys as labels + // on its own node object. + // When Kubernetes does topology aware provisioning, it can use this list to + // determine which labels it should retrieve from the node object and pass + // back to the driver. + // It is possible for different nodes to use different topology keys. + // This can be empty if driver does not support topology. + // +optional + repeated string topologyKeys = 3; + + // allocatable represents the volume resources of a node that are available for scheduling. + // +optional + optional VolumeNodeResources allocatable = 4; +} + +// CSINodeList is a collection of CSINode objects. +message CSINodeList { + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of CSINode + repeated CSINode items = 2; +} + +// CSINodeSpec holds information about the specification of all CSI drivers installed on a node +message CSINodeSpec { + // drivers is a list of information of all CSI Drivers existing on a node. + // If all drivers in the list are uninstalled, this can become empty. + // +patchMergeKey=name + // +patchStrategy=merge + repeated CSINodeDriver drivers = 1; +} + // StorageClass describes the parameters for a class of storage for // which PersistentVolumes can be dynamically provisioned. -// +// // StorageClasses are non-namespaced; the name of the storage class // according to etcd is in ObjectMeta.Name. message StorageClass { // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -65,16 +230,14 @@ // VolumeBindingMode indicates how PersistentVolumeClaims should be // provisioned and bound. When unset, VolumeBindingImmediate is used. - // This field is alpha-level and is only honored by servers that enable - // the VolumeScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional optional string volumeBindingMode = 7; // Restrict the node topologies where volumes can be dynamically provisioned. // Each volume plugin defines its own supported topology specifications. // An empty TopologySelectorTerm list means there is no topology restriction. - // This field is alpha-level and is only honored by servers that enable - // the DynamicProvisioningScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional repeated k8s.io.api.core.v1.TopologySelectorTerm allowedTopologies = 8; } @@ -82,7 +245,7 @@ // StorageClassList is a collection of storage classes. message StorageClassList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -92,11 +255,11 @@ // VolumeAttachment captures the intent to attach or detach the specified volume // to/from the specified node. -// +// // VolumeAttachment objects are non-namespaced. message VolumeAttachment { // Standard object metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -114,7 +277,7 @@ // VolumeAttachmentList is a collection of VolumeAttachment objects. message VolumeAttachmentList { // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; @@ -130,6 +293,15 @@ // Name of the persistent volume to attach. // +optional optional string persistentVolumeName = 1; + + // inlineVolumeSpec contains all the information necessary to attach + // a persistent volume defined by a pod's inline VolumeSource. This field + // is populated only for the CSIMigration feature. It contains + // translated fields from a pod's inline VolumeSource to a + // PersistentVolumeSpec. This field is alpha-level and is only + // honored by servers that enabled the CSIMigration feature. + // +optional + optional k8s.io.api.core.v1.PersistentVolumeSpec inlineVolumeSpec = 2; } // VolumeAttachmentSpec is the specification of a VolumeAttachment request. @@ -180,9 +352,19 @@ optional k8s.io.apimachinery.pkg.apis.meta.v1.Time time = 1; // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional optional string message = 2; } +// VolumeNodeResources is a set of resource limits for scheduling of volumes. +message VolumeNodeResources { + // Maximum number of unique volumes managed by the CSI driver that can be used on a node. + // A volume that is both attached and mounted on a node is considered to be used once, not twice. + // The same rule applies for a unique volume that is shared among multiple pods on the same node. + // If this field is nil, then the supported number of volumes on this node is unbounded. + // +optional + optional int32 count = 1; +} + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -49,6 +49,12 @@ &VolumeAttachment{}, &VolumeAttachmentList{}, + + &CSIDriver{}, + &CSIDriverList{}, + + &CSINode{}, + &CSINodeList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,7 +17,7 @@ package v1beta1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -33,7 +33,7 @@ type StorageClass struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -62,16 +62,14 @@ // VolumeBindingMode indicates how PersistentVolumeClaims should be // provisioned and bound. When unset, VolumeBindingImmediate is used. - // This field is alpha-level and is only honored by servers that enable - // the VolumeScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional VolumeBindingMode *VolumeBindingMode `json:"volumeBindingMode,omitempty" protobuf:"bytes,7,opt,name=volumeBindingMode"` // Restrict the node topologies where volumes can be dynamically provisioned. // Each volume plugin defines its own supported topology specifications. // An empty TopologySelectorTerm list means there is no topology restriction. - // This field is alpha-level and is only honored by servers that enable - // the DynamicProvisioningScheduling feature. + // This field is only honored by servers that enable the VolumeScheduling feature. // +optional AllowedTopologies []v1.TopologySelectorTerm `json:"allowedTopologies,omitempty" protobuf:"bytes,8,rep,name=allowedTopologies"` } @@ -82,7 +80,7 @@ type StorageClassList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -117,7 +115,7 @@ metav1.TypeMeta `json:",inline"` // Standard object metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -138,7 +136,7 @@ type VolumeAttachmentList struct { metav1.TypeMeta `json:",inline"` // Standard list metadata - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -168,7 +166,14 @@ // +optional PersistentVolumeName *string `json:"persistentVolumeName,omitempty" protobuf:"bytes,1,opt,name=persistentVolumeName"` - // Placeholder for *VolumeSource to accommodate inline volumes in pods. + // inlineVolumeSpec contains all the information necessary to attach + // a persistent volume defined by a pod's inline VolumeSource. This field + // is populated only for the CSIMigration feature. It contains + // translated fields from a pod's inline VolumeSource to a + // PersistentVolumeSpec. This field is alpha-level and is only + // honored by servers that enabled the CSIMigration feature. + // +optional + InlineVolumeSpec *v1.PersistentVolumeSpec `json:"inlineVolumeSpec,omitempty" protobuf:"bytes,2,opt,name=inlineVolumeSpec"` } // VolumeAttachmentStatus is the status of a VolumeAttachment request. @@ -206,8 +211,228 @@ Time metav1.Time `json:"time,omitempty" protobuf:"bytes,1,opt,name=time"` // String detailing the error encountered during Attach or Detach operation. - // This string maybe logged, so it should not contain sensitive + // This string may be logged, so it should not contain sensitive // information. // +optional Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` } + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSIDriver captures information about a Container Storage Interface (CSI) +// volume driver deployed on the cluster. +// CSI drivers do not need to create the CSIDriver object directly. Instead they may use the +// cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically +// creates a CSIDriver object representing the driver. +// Kubernetes attach detach controller uses this object to determine whether attach is required. +// Kubelet uses this object to determine whether pod information needs to be passed on mount. +// CSIDriver objects are non-namespaced. +type CSIDriver struct { + metav1.TypeMeta `json:",inline"` + + // Standard object metadata. + // metadata.Name indicates the name of the CSI driver that this object + // refers to; it MUST be the same name returned by the CSI GetPluginName() + // call for that driver. + // The driver name must be 63 characters or less, beginning and ending with + // an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and + // alphanumerics between. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the CSI Driver. + Spec CSIDriverSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSIDriverList is a collection of CSIDriver objects. +type CSIDriverList struct { + metav1.TypeMeta `json:",inline"` + + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of CSIDriver + Items []CSIDriver `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// CSIDriverSpec is the specification of a CSIDriver. +type CSIDriverSpec struct { + // attachRequired indicates this CSI volume driver requires an attach + // operation (because it implements the CSI ControllerPublishVolume() + // method), and that the Kubernetes attach detach controller should call + // the attach volume interface which checks the volumeattachment status + // and waits until the volume is attached before proceeding to mounting. + // The CSI external-attacher coordinates with CSI volume driver and updates + // the volumeattachment status when the attach operation is complete. + // If the CSIDriverRegistry feature gate is enabled and the value is + // specified to false, the attach operation will be skipped. + // Otherwise the attach operation will be called. + // +optional + AttachRequired *bool `json:"attachRequired,omitempty" protobuf:"varint,1,opt,name=attachRequired"` + + // If set to true, podInfoOnMount indicates this CSI volume driver + // requires additional pod information (like podName, podUID, etc.) during + // mount operations. + // If set to false, pod information will not be passed on mount. + // Default is false. + // The CSI driver specifies podInfoOnMount as part of driver deployment. + // If true, Kubelet will pass pod information as VolumeContext in the CSI + // NodePublishVolume() calls. + // The CSI driver is responsible for parsing and validating the information + // passed in as VolumeContext. + // The following VolumeConext will be passed if podInfoOnMount is set to true. + // This list might grow, but the prefix will be used. + // "csi.storage.k8s.io/pod.name": pod.Name + // "csi.storage.k8s.io/pod.namespace": pod.Namespace + // "csi.storage.k8s.io/pod.uid": string(pod.UID) + // "csi.storage.k8s.io/ephemeral": "true" iff the volume is an ephemeral inline volume + // defined by a CSIVolumeSource, otherwise "false" + // + // "csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is only + // required for drivers which support both the "Persistent" and "Ephemeral" VolumeLifecycleMode. + // Other drivers can leave pod info disabled and/or ignore this field. + // As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when + // deployed on such a cluster and the deployment determines which mode that is, for example + // via a command line parameter of the driver. + // +optional + PodInfoOnMount *bool `json:"podInfoOnMount,omitempty" protobuf:"bytes,2,opt,name=podInfoOnMount"` + + // VolumeLifecycleModes defines what kind of volumes this CSI volume driver supports. + // The default if the list is empty is "Persistent", which is the usage + // defined by the CSI specification and implemented in Kubernetes via the usual + // PV/PVC mechanism. + // The other mode is "Ephemeral". In this mode, volumes are defined inline + // inside the pod spec with CSIVolumeSource and their lifecycle is tied to + // the lifecycle of that pod. A driver has to be aware of this + // because it is only going to get a NodePublishVolume call for such a volume. + // For more information about implementing this mode, see + // https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html + // A driver can support one or more of these modes and + // more modes may be added in the future. + // +optional + VolumeLifecycleModes []VolumeLifecycleMode `json:"volumeLifecycleModes,omitempty" protobuf:"bytes,3,opt,name=volumeLifecycleModes"` +} + +// VolumeLifecycleMode is an enumeration of possible usage modes for a volume +// provided by a CSI driver. More modes may be added in the future. +type VolumeLifecycleMode string + +const ( + // VolumeLifecyclePersistent explicitly confirms that the driver implements + // the full CSI spec. It is the default when CSIDriverSpec.VolumeLifecycleModes is not + // set. Such volumes are managed in Kubernetes via the persistent volume + // claim mechanism and have a lifecycle that is independent of the pods which + // use them. + VolumeLifecyclePersistent VolumeLifecycleMode = "Persistent" + + // VolumeLifecycleEphemeral indicates that the driver can be used for + // ephemeral inline volumes. Such volumes are specified inside the pod + // spec with a CSIVolumeSource and, as far as Kubernetes is concerned, have + // a lifecycle that is tied to the lifecycle of the pod. For example, such + // a volume might contain data that gets created specifically for that pod, + // like secrets. + // But how the volume actually gets created and managed is entirely up to + // the driver. It might also use reference counting to share the same volume + // instance among different pods if the CSIVolumeSource of those pods is + // identical. + VolumeLifecycleEphemeral VolumeLifecycleMode = "Ephemeral" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSINode holds information about all CSI drivers installed on a node. +// CSI drivers do not need to create the CSINode object directly. As long as +// they use the node-driver-registrar sidecar container, the kubelet will +// automatically populate the CSINode object for the CSI driver as part of +// kubelet plugin registration. +// CSINode has the same name as a node. If the object is missing, it means either +// there are no CSI Drivers available on the node, or the Kubelet version is low +// enough that it doesn't create this object. +// CSINode has an OwnerReference that points to the corresponding node object. +type CSINode struct { + metav1.TypeMeta `json:",inline"` + + // metadata.name must be the Kubernetes node name. + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the specification of CSINode + Spec CSINodeSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// CSINodeSpec holds information about the specification of all CSI drivers installed on a node +type CSINodeSpec struct { + // drivers is a list of information of all CSI Drivers existing on a node. + // If all drivers in the list are uninstalled, this can become empty. + // +patchMergeKey=name + // +patchStrategy=merge + Drivers []CSINodeDriver `json:"drivers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,1,rep,name=drivers"` +} + +// CSINodeDriver holds information about the specification of one CSI driver installed on a node +type CSINodeDriver struct { + // This is the name of the CSI driver that this object refers to. + // This MUST be the same name returned by the CSI GetPluginName() call for + // that driver. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // nodeID of the node from the driver point of view. + // This field enables Kubernetes to communicate with storage systems that do + // not share the same nomenclature for nodes. For example, Kubernetes may + // refer to a given node as "node1", but the storage system may refer to + // the same node as "nodeA". When Kubernetes issues a command to the storage + // system to attach a volume to a specific node, it can use this field to + // refer to the node name using the ID that the storage system will + // understand, e.g. "nodeA" instead of "node1". This field is required. + NodeID string `json:"nodeID" protobuf:"bytes,2,opt,name=nodeID"` + + // topologyKeys is the list of keys supported by the driver. + // When a driver is initialized on a cluster, it provides a set of topology + // keys that it understands (e.g. "company.com/zone", "company.com/region"). + // When a driver is initialized on a node, it provides the same topology keys + // along with values. Kubelet will expose these topology keys as labels + // on its own node object. + // When Kubernetes does topology aware provisioning, it can use this list to + // determine which labels it should retrieve from the node object and pass + // back to the driver. + // It is possible for different nodes to use different topology keys. + // This can be empty if driver does not support topology. + // +optional + TopologyKeys []string `json:"topologyKeys" protobuf:"bytes,3,rep,name=topologyKeys"` + + // allocatable represents the volume resources of a node that are available for scheduling. + // +optional + Allocatable *VolumeNodeResources `json:"allocatable,omitempty" protobuf:"bytes,4,opt,name=allocatable"` +} + +// VolumeNodeResources is a set of resource limits for scheduling of volumes. +type VolumeNodeResources struct { + // Maximum number of unique volumes managed by the CSI driver that can be used on a node. + // A volume that is both attached and mounted on a node is considered to be used once, not twice. + // The same rule applies for a unique volume that is shared among multiple pods on the same node. + // If this field is nil, then the supported number of volumes on this node is unbounded. + // +optional + Count *int32 `json:"count,omitempty" protobuf:"varint,1,opt,name=count"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CSINodeList is a collection of CSINode objects. +type CSINodeList struct { + metav1.TypeMeta `json:",inline"` + + // Standard list metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of CSINode + Items []CSINode `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,16 +27,88 @@ // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. +var map_CSIDriver = map[string]string{ + "": "CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. CSI drivers do not need to create the CSIDriver object directly. Instead they may use the cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically creates a CSIDriver object representing the driver. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced.", + "metadata": "Standard object metadata. metadata.Name indicates the name of the CSI driver that this object refers to; it MUST be the same name returned by the CSI GetPluginName() call for that driver. The driver name must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and alphanumerics between. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "spec": "Specification of the CSI Driver.", +} + +func (CSIDriver) SwaggerDoc() map[string]string { + return map_CSIDriver +} + +var map_CSIDriverList = map[string]string{ + "": "CSIDriverList is a collection of CSIDriver objects.", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "items is the list of CSIDriver", +} + +func (CSIDriverList) SwaggerDoc() map[string]string { + return map_CSIDriverList +} + +var map_CSIDriverSpec = map[string]string{ + "": "CSIDriverSpec is the specification of a CSIDriver.", + "attachRequired": "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.", + "podInfoOnMount": "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" iff the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.", + "volumeLifecycleModes": "VolumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.", +} + +func (CSIDriverSpec) SwaggerDoc() map[string]string { + return map_CSIDriverSpec +} + +var map_CSINode = map[string]string{ + "": "CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.", + "metadata": "metadata.name must be the Kubernetes node name.", + "spec": "spec is the specification of CSINode", +} + +func (CSINode) SwaggerDoc() map[string]string { + return map_CSINode +} + +var map_CSINodeDriver = map[string]string{ + "": "CSINodeDriver holds information about the specification of one CSI driver installed on a node", + "name": "This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", + "nodeID": "nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\". This field is required.", + "topologyKeys": "topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.", + "allocatable": "allocatable represents the volume resources of a node that are available for scheduling.", +} + +func (CSINodeDriver) SwaggerDoc() map[string]string { + return map_CSINodeDriver +} + +var map_CSINodeList = map[string]string{ + "": "CSINodeList is a collection of CSINode objects.", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "items": "items is the list of CSINode", +} + +func (CSINodeList) SwaggerDoc() map[string]string { + return map_CSINodeList +} + +var map_CSINodeSpec = map[string]string{ + "": "CSINodeSpec holds information about the specification of all CSI drivers installed on a node", + "drivers": "drivers is a list of information of all CSI Drivers existing on a node. If all drivers in the list are uninstalled, this can become empty.", +} + +func (CSINodeSpec) SwaggerDoc() map[string]string { + return map_CSINodeSpec +} + var map_StorageClass = map[string]string{ "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "provisioner": "Provisioner indicates the type of the provisioner.", "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", "reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", "mountOptions": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", "allowVolumeExpansion": "AllowVolumeExpansion shows whether the storage class allow volume expand", - "volumeBindingMode": "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is alpha-level and is only honored by servers that enable the VolumeScheduling feature.", - "allowedTopologies": "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.", + "volumeBindingMode": "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", + "allowedTopologies": "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", } func (StorageClass) SwaggerDoc() map[string]string { @@ -45,7 +117,7 @@ var map_StorageClassList = map[string]string{ "": "StorageClassList is a collection of storage classes.", - "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of StorageClasses", } @@ -55,7 +127,7 @@ var map_VolumeAttachment = map[string]string{ "": "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", "status": "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", } @@ -66,7 +138,7 @@ var map_VolumeAttachmentList = map[string]string{ "": "VolumeAttachmentList is a collection of VolumeAttachment objects.", - "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "items": "Items is the list of VolumeAttachments", } @@ -75,7 +147,7 @@ } var map_VolumeAttachmentSource = map[string]string{ - "": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", + "": "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", "persistentVolumeName": "Name of the persistent volume to attach.", } @@ -109,11 +181,20 @@ var map_VolumeError = map[string]string{ "": "VolumeError captures an error encountered during a volume operation.", "time": "Time the error was encountered.", - "message": "String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.", + "message": "String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.", } func (VolumeError) SwaggerDoc() map[string]string { return map_VolumeError } +var map_VolumeNodeResources = map[string]string{ + "": "VolumeNodeResources is a set of resource limits for scheduling of volumes.", + "count": "Maximum number of unique volumes managed by the CSI driver that can be used on a node. A volume that is both attached and mounted on a node is considered to be used once, not twice. The same rule applies for a unique volume that is shared among multiple pods on the same node. If this field is nil, then the supported number of volumes on this node is unbounded.", +} + +func (VolumeNodeResources) SwaggerDoc() map[string]string { + return map_VolumeNodeResources +} + // AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,6 +26,206 @@ ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriver) DeepCopyInto(out *CSIDriver) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriver. +func (in *CSIDriver) DeepCopy() *CSIDriver { + if in == nil { + return nil + } + out := new(CSIDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIDriver) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriverList) DeepCopyInto(out *CSIDriverList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSIDriver, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverList. +func (in *CSIDriverList) DeepCopy() *CSIDriverList { + if in == nil { + return nil + } + out := new(CSIDriverList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSIDriverList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSIDriverSpec) DeepCopyInto(out *CSIDriverSpec) { + *out = *in + if in.AttachRequired != nil { + in, out := &in.AttachRequired, &out.AttachRequired + *out = new(bool) + **out = **in + } + if in.PodInfoOnMount != nil { + in, out := &in.PodInfoOnMount, &out.PodInfoOnMount + *out = new(bool) + **out = **in + } + if in.VolumeLifecycleModes != nil { + in, out := &in.VolumeLifecycleModes, &out.VolumeLifecycleModes + *out = make([]VolumeLifecycleMode, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIDriverSpec. +func (in *CSIDriverSpec) DeepCopy() *CSIDriverSpec { + if in == nil { + return nil + } + out := new(CSIDriverSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINode) DeepCopyInto(out *CSINode) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINode. +func (in *CSINode) DeepCopy() *CSINode { + if in == nil { + return nil + } + out := new(CSINode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSINode) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeDriver) DeepCopyInto(out *CSINodeDriver) { + *out = *in + if in.TopologyKeys != nil { + in, out := &in.TopologyKeys, &out.TopologyKeys + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = new(VolumeNodeResources) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeDriver. +func (in *CSINodeDriver) DeepCopy() *CSINodeDriver { + if in == nil { + return nil + } + out := new(CSINodeDriver) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeList) DeepCopyInto(out *CSINodeList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CSINode, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeList. +func (in *CSINodeList) DeepCopy() *CSINodeList { + if in == nil { + return nil + } + out := new(CSINodeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CSINodeList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CSINodeSpec) DeepCopyInto(out *CSINodeSpec) { + *out = *in + if in.Drivers != nil { + in, out := &in.Drivers, &out.Drivers + *out = make([]CSINodeDriver, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSINodeSpec. +func (in *CSINodeSpec) DeepCopy() *CSINodeSpec { + if in == nil { + return nil + } + out := new(CSINodeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StorageClass) DeepCopyInto(out *StorageClass) { *out = *in out.TypeMeta = in.TypeMeta @@ -39,12 +239,8 @@ } if in.ReclaimPolicy != nil { in, out := &in.ReclaimPolicy, &out.ReclaimPolicy - if *in == nil { - *out = nil - } else { - *out = new(v1.PersistentVolumeReclaimPolicy) - **out = **in - } + *out = new(v1.PersistentVolumeReclaimPolicy) + **out = **in } if in.MountOptions != nil { in, out := &in.MountOptions, &out.MountOptions @@ -53,21 +249,13 @@ } if in.AllowVolumeExpansion != nil { in, out := &in.AllowVolumeExpansion, &out.AllowVolumeExpansion - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.VolumeBindingMode != nil { in, out := &in.VolumeBindingMode, &out.VolumeBindingMode - if *in == nil { - *out = nil - } else { - *out = new(VolumeBindingMode) - **out = **in - } + *out = new(VolumeBindingMode) + **out = **in } if in.AllowedTopologies != nil { in, out := &in.AllowedTopologies, &out.AllowedTopologies @@ -101,7 +289,7 @@ func (in *StorageClassList) DeepCopyInto(out *StorageClassList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]StorageClass, len(*in)) @@ -162,7 +350,7 @@ func (in *VolumeAttachmentList) DeepCopyInto(out *VolumeAttachmentList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]VolumeAttachment, len(*in)) @@ -196,12 +384,13 @@ *out = *in if in.PersistentVolumeName != nil { in, out := &in.PersistentVolumeName, &out.PersistentVolumeName - if *in == nil { - *out = nil - } else { - *out = new(string) - **out = **in - } + *out = new(string) + **out = **in + } + if in.InlineVolumeSpec != nil { + in, out := &in.InlineVolumeSpec, &out.InlineVolumeSpec + *out = new(v1.PersistentVolumeSpec) + (*in).DeepCopyInto(*out) } return } @@ -245,21 +434,13 @@ } if in.AttachError != nil { in, out := &in.AttachError, &out.AttachError - if *in == nil { - *out = nil - } else { - *out = new(VolumeError) - (*in).DeepCopyInto(*out) - } + *out = new(VolumeError) + (*in).DeepCopyInto(*out) } if in.DetachError != nil { in, out := &in.DetachError, &out.DetachError - if *in == nil { - *out = nil - } else { - *out = new(VolumeError) - (*in).DeepCopyInto(*out) - } + *out = new(VolumeError) + (*in).DeepCopyInto(*out) } return } @@ -290,3 +471,24 @@ in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeNodeResources) DeepCopyInto(out *VolumeNodeResources) { + *out = *in + if in.Count != nil { + in, out := &in.Count, &out.Count + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeNodeResources. +func (in *VolumeNodeResources) DeepCopy() *VolumeNodeResources { + if in == nil { + return nil + } + out := new(VolumeNodeResources) + in.DeepCopyInto(out) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,6 +20,7 @@ "encoding/json" "fmt" "net/http" + "reflect" "strings" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -31,7 +32,9 @@ const ( // StatusTooManyRequests means the server experienced too many requests within a // given window and that the client must wait to perform the action again. - StatusTooManyRequests = 429 + // DEPRECATED: please use http.StatusTooManyRequests, this will be removed in + // the future version. + StatusTooManyRequests = http.StatusTooManyRequests ) // StatusError is an error intended for consumption by a REST API server; it can also be @@ -82,7 +85,20 @@ func FromObject(obj runtime.Object) error { switch t := obj.(type) { case *metav1.Status: - return &StatusError{*t} + return &StatusError{ErrStatus: *t} + case runtime.Unstructured: + var status metav1.Status + obj := t.UnstructuredContent() + if !reflect.DeepEqual(obj["kind"], "Status") { + break + } + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(t.UnstructuredContent(), &status); err != nil { + return err + } + if status.APIVersion != "v1" && status.APIVersion != "meta.k8s.io/v1" { + break + } + return &StatusError{ErrStatus: status} } return &UnexpectedObjectError{obj} } @@ -170,6 +186,20 @@ }} } +// NewApplyConflict returns an error including details on the requests apply conflicts +func NewApplyConflict(causes []metav1.StatusCause, message string) *StatusError { + return &StatusError{ErrStatus: metav1.Status{ + Status: metav1.StatusFailure, + Code: http.StatusConflict, + Reason: metav1.StatusReasonConflict, + Details: &metav1.StatusDetails{ + // TODO: Get obj details here? + Causes: causes, + }, + Message: message, + }} +} + // NewGone returns an error indicating the item no longer available at the server and no forwarding address is known. func NewGone(message string) *StatusError { return &StatusError{metav1.Status{ @@ -321,7 +351,7 @@ func NewTooManyRequestsError(message string) *StatusError { return &StatusError{metav1.Status{ Status: metav1.StatusFailure, - Code: StatusTooManyRequests, + Code: http.StatusTooManyRequests, Reason: metav1.StatusReasonTooManyRequests, Message: fmt.Sprintf("Too many requests: %s", message), }} @@ -366,7 +396,11 @@ case http.StatusNotAcceptable: reason = metav1.StatusReasonNotAcceptable // the server message has details about what types are acceptable - message = serverMessage + if len(serverMessage) == 0 || serverMessage == "unknown" { + message = "the server was unable to respond with a content type that the client supports" + } else { + message = serverMessage + } case http.StatusUnsupportedMediaType: reason = metav1.StatusReasonUnsupportedMediaType // the server message has details about what types are acceptable @@ -589,3 +623,46 @@ } return metav1.StatusReasonUnknown } + +// ErrorReporter converts generic errors into runtime.Object errors without +// requiring the caller to take a dependency on meta/v1 (where Status lives). +// This prevents circular dependencies in core watch code. +type ErrorReporter struct { + code int + verb string + reason string +} + +// NewClientErrorReporter will respond with valid v1.Status objects that report +// unexpected server responses. Primarily used by watch to report errors when +// we attempt to decode a response from the server and it is not in the form +// we expect. Because watch is a dependency of the core api, we can't return +// meta/v1.Status in that package and so much inject this interface to convert a +// generic error as appropriate. The reason is passed as a unique status cause +// on the returned status, otherwise the generic "ClientError" is returned. +func NewClientErrorReporter(code int, verb string, reason string) *ErrorReporter { + return &ErrorReporter{ + code: code, + verb: verb, + reason: reason, + } +} + +// AsObject returns a valid error runtime.Object (a v1.Status) for the given +// error, using the code and verb of the reporter type. The error is set to +// indicate that this was an unexpected server response. +func (r *ErrorReporter) AsObject(err error) runtime.Object { + status := NewGenericServerResponse(r.code, r.verb, schema.GroupResource{}, "", err.Error(), 0, true) + if status.ErrStatus.Details == nil { + status.ErrStatus.Details = &metav1.StatusDetails{} + } + reason := r.reason + if len(reason) == 0 { + reason = "ClientError" + } + status.ErrStatus.Details.Causes = append(status.ErrStatus.Details.Causes, metav1.StatusCause{ + Type: metav1.CauseType(reason), + Message: err.Error(), + }) + return &status.ErrStatus +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/errors/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/help.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/help.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/help.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/help.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,30 +17,76 @@ package meta import ( + "errors" "fmt" "reflect" + "sync" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" ) -// IsListType returns true if the provided Object has a slice called Items +var ( + // isListCache maintains a cache of types that are checked for lists + // which is used by IsListType. + // TODO: remove and replace with an interface check + isListCache = struct { + lock sync.RWMutex + byType map[reflect.Type]bool + }{ + byType: make(map[reflect.Type]bool, 1024), + } +) + +// IsListType returns true if the provided Object has a slice called Items. +// TODO: Replace the code in this check with an interface comparison by +// creating and enforcing that lists implement a list accessor. func IsListType(obj runtime.Object) bool { - // if we're a runtime.Unstructured, check whether this is a list. - // TODO: refactor GetItemsPtr to use an interface that returns []runtime.Object - if unstructured, ok := obj.(runtime.Unstructured); ok { - return unstructured.IsList() + switch t := obj.(type) { + case runtime.Unstructured: + return t.IsList() + } + t := reflect.TypeOf(obj) + + isListCache.lock.RLock() + ok, exists := isListCache.byType[t] + isListCache.lock.RUnlock() + + if !exists { + _, err := getItemsPtr(obj) + ok = err == nil + + // cache only the first 1024 types + isListCache.lock.Lock() + if len(isListCache.byType) < 1024 { + isListCache.byType[t] = ok + } + isListCache.lock.Unlock() } - _, err := GetItemsPtr(obj) - return err == nil + return ok } +var ( + errExpectFieldItems = errors.New("no Items field in this object") + errExpectSliceItems = errors.New("Items field must be a slice of objects") +) + // GetItemsPtr returns a pointer to the list object's Items member. // If 'list' doesn't have an Items member, it's not really a list type // and an error will be returned. // This function will either return a pointer to a slice, or an error, but not both. +// TODO: this will be replaced with an interface in the future func GetItemsPtr(list runtime.Object) (interface{}, error) { + obj, err := getItemsPtr(list) + if err != nil { + return nil, fmt.Errorf("%T is not a list: %v", list, err) + } + return obj, nil +} + +// getItemsPtr returns a pointer to the list object's Items member or an error. +func getItemsPtr(list runtime.Object) (interface{}, error) { v, err := conversion.EnforcePtr(list) if err != nil { return nil, err @@ -48,19 +94,19 @@ items := v.FieldByName("Items") if !items.IsValid() { - return nil, fmt.Errorf("no Items field in %#v", list) + return nil, errExpectFieldItems } switch items.Kind() { case reflect.Interface, reflect.Ptr: target := reflect.TypeOf(items.Interface()).Elem() if target.Kind() != reflect.Slice { - return nil, fmt.Errorf("items: Expected slice, got %s", target.Kind()) + return nil, errExpectSliceItems } return items.Interface(), nil case reflect.Slice: return items.Addr().Interface(), nil default: - return nil, fmt.Errorf("items: Expected slice, got %s", items.Kind()) + return nil, errExpectSliceItems } } @@ -158,6 +204,19 @@ // objectSliceType is the type of a slice of Objects var objectSliceType = reflect.TypeOf([]runtime.Object{}) +// LenList returns the length of this list or 0 if it is not a list. +func LenList(list runtime.Object) int { + itemsPtr, err := GetItemsPtr(list) + if err != nil { + return 0 + } + items, err := conversion.EnforcePtr(itemsPtr) + if err != nil { + return 0 + } + return items.Len() +} + // SetList sets the given list object's Items member have the elements given in // objects. // Returns an error if list is not a List type (does not have an Items member), diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/meta.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,14 +20,12 @@ "fmt" "reflect" - "github.com/golang/glog" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" + "k8s.io/klog" ) // errNotList is returned when an object implements the Object style interfaces but not the List style @@ -115,12 +113,12 @@ // AsPartialObjectMetadata takes the metav1 interface and returns a partial object. // TODO: consider making this solely a conversion action. -func AsPartialObjectMetadata(m metav1.Object) *metav1beta1.PartialObjectMetadata { +func AsPartialObjectMetadata(m metav1.Object) *metav1.PartialObjectMetadata { switch t := m.(type) { case *metav1.ObjectMeta: - return &metav1beta1.PartialObjectMetadata{ObjectMeta: *t} + return &metav1.PartialObjectMetadata{ObjectMeta: *t} default: - return &metav1beta1.PartialObjectMetadata{ + return &metav1.PartialObjectMetadata{ ObjectMeta: metav1.ObjectMeta{ Name: m.GetName(), GenerateName: m.GetGenerateName(), @@ -132,12 +130,12 @@ CreationTimestamp: m.GetCreationTimestamp(), DeletionTimestamp: m.GetDeletionTimestamp(), DeletionGracePeriodSeconds: m.GetDeletionGracePeriodSeconds(), - Labels: m.GetLabels(), - Annotations: m.GetAnnotations(), - OwnerReferences: m.GetOwnerReferences(), - Finalizers: m.GetFinalizers(), - ClusterName: m.GetClusterName(), - Initializers: m.GetInitializers(), + Labels: m.GetLabels(), + Annotations: m.GetAnnotations(), + OwnerReferences: m.GetOwnerReferences(), + Finalizers: m.GetFinalizers(), + ClusterName: m.GetClusterName(), + ManagedFields: m.GetManagedFields(), }, } } @@ -607,7 +605,7 @@ var ret []metav1.OwnerReference s := a.ownerReferences if s.Kind() != reflect.Ptr || s.Elem().Kind() != reflect.Slice { - glog.Errorf("expect %v to be a pointer to slice", s) + klog.Errorf("expect %v to be a pointer to slice", s) return ret } s = s.Elem() @@ -615,7 +613,7 @@ ret = make([]metav1.OwnerReference, s.Len(), s.Len()+1) for i := 0; i < s.Len(); i++ { if err := extractFromOwnerReference(s.Index(i), &ret[i]); err != nil { - glog.Errorf("extractFromOwnerReference failed: %v", err) + klog.Errorf("extractFromOwnerReference failed: %v", err) return ret } } @@ -625,13 +623,13 @@ func (a genericAccessor) SetOwnerReferences(references []metav1.OwnerReference) { s := a.ownerReferences if s.Kind() != reflect.Ptr || s.Elem().Kind() != reflect.Slice { - glog.Errorf("expect %v to be a pointer to slice", s) + klog.Errorf("expect %v to be a pointer to slice", s) } s = s.Elem() newReferences := reflect.MakeSlice(s.Type(), len(references), len(references)) for i := 0; i < len(references); i++ { if err := setOwnerReference(newReferences.Index(i), &references[i]); err != nil { - glog.Errorf("setOwnerReference failed: %v", err) + klog.Errorf("setOwnerReference failed: %v", err) return } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/meta/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,24 +14,18 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto -// DO NOT EDIT! -/* -Package resource is a generated protocol buffer package. +package resource -It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto +import ( + fmt "fmt" -It has these top-level messages: - Quantity -*/ -package resource + math "math" -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" + proto "github.com/gogo/protobuf/proto" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -44,19 +38,38 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *Quantity) Reset() { *m = Quantity{} } -func (*Quantity) ProtoMessage() {} -func (*Quantity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (m *Quantity) Reset() { *m = Quantity{} } +func (*Quantity) ProtoMessage() {} +func (*Quantity) Descriptor() ([]byte, []int) { + return fileDescriptor_612bba87bd70906c, []int{0} +} +func (m *Quantity) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Quantity.Unmarshal(m, b) +} +func (m *Quantity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Quantity.Marshal(b, m, deterministic) +} +func (m *Quantity) XXX_Merge(src proto.Message) { + xxx_messageInfo_Quantity.Merge(m, src) +} +func (m *Quantity) XXX_Size() int { + return xxx_messageInfo_Quantity.Size(m) +} +func (m *Quantity) XXX_DiscardUnknown() { + xxx_messageInfo_Quantity.DiscardUnknown(m) +} + +var xxx_messageInfo_Quantity proto.InternalMessageInfo func init() { proto.RegisterType((*Quantity)(nil), "k8s.io.apimachinery.pkg.api.resource.Quantity") } func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto", fileDescriptorGenerated) + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto", fileDescriptor_612bba87bd70906c) } -var fileDescriptorGenerated = []byte{ +var fileDescriptor_612bba87bd70906c = []byte{ // 237 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x8e, 0xb1, 0x4e, 0xc3, 0x30, 0x10, 0x40, 0xcf, 0x0b, 0x2a, 0x19, 0x2b, 0x84, 0x10, 0xc3, 0xa5, 0x42, 0x0c, 0x2c, 0xd8, 0x6b, diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -26,10 +26,10 @@ // Quantity is a fixed-point representation of a number. // It provides convenient marshaling/unmarshaling in JSON and YAML, -// in addition to String() and Int64() accessors. -// +// in addition to String() and AsInt64() accessors. +// // The serialization format is: -// +// // ::= // (Note that may be empty, from the "" case in .) // ::= 0 | 1 | ... | 9 @@ -43,16 +43,16 @@ // ::= m | "" | k | M | G | T | P | E // (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.) // ::= "e" | "E" -// +// // No matter which of the three exponent forms is used, no quantity may represent // a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal // places. Numbers larger or more precise will be capped or rounded up. // (E.g.: 0.1m will rounded up to 1m.) // This may be extended in the future if we require larger or smaller quantities. -// +// // When a Quantity is parsed from a string, it will remember the type of suffix // it had, and will use the same type again when it is serialized. -// +// // Before serializing, Quantity will be put in "canonical form". // This means that Exponent/suffix will be adjusted up or down (with a // corresponding increase or decrease in Mantissa) such that: @@ -60,27 +60,22 @@ // b. No fractional digits will be emitted // c. The exponent (or suffix) is as large as possible. // The sign will be omitted unless the number is negative. -// +// // Examples: // 1.5 will be serialized as "1500m" // 1.5Gi will be serialized as "1536Mi" -// -// NOTE: We reserve the right to amend this canonical format, perhaps to -// allow 1.5 to be canonical. -// TODO: Remove above disclaimer after all bikeshedding about format is over, -// or after March 2015. -// +// // Note that the quantity will NEVER be internally represented by a // floating point number. That is the whole point of this exercise. -// +// // Non-canonical values will still parse as long as they are well formed, // but will be re-emitted in their canonical form. (So always use canonical // form, or don't diff.) -// +// // This format is intended to make it difficult to use these numbers without // writing some sort of special handling code in the hopes that that will // cause implementors to also use a fixed point implementation. -// +// // +protobuf=true // +protobuf.embed=string // +protobuf.options.marshal=false diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/math.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/math.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/math.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/math.go 2020-12-10 21:46:52.000000000 +0000 @@ -194,9 +194,9 @@ } if fraction { if base > 0 { - value += 1 + value++ } else { - value += -1 + value-- } } return value, !fraction diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - lavalamp diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,6 @@ "errors" "fmt" "math/big" - "regexp" "strconv" "strings" @@ -30,7 +29,7 @@ // Quantity is a fixed-point representation of a number. // It provides convenient marshaling/unmarshaling in JSON and YAML, -// in addition to String() and Int64() accessors. +// in addition to String() and AsInt64() accessors. // // The serialization format is: // @@ -69,11 +68,6 @@ // 1.5 will be serialized as "1500m" // 1.5Gi will be serialized as "1536Mi" // -// NOTE: We reserve the right to amend this canonical format, perhaps to -// allow 1.5 to be canonical. -// TODO: Remove above disclaimer after all bikeshedding about format is over, -// or after March 2015. -// // Note that the quantity will NEVER be internally represented by a // floating point number. That is the whole point of this exercise. // @@ -142,9 +136,6 @@ ) var ( - // splitRE is used to get the various parts of a number. - splitRE = regexp.MustCompile(splitREString) - // Errors that could happen while parsing a string. ErrFormatWrong = errors.New("quantities must match the regular expression '" + splitREString + "'") ErrNumeric = errors.New("unable to parse numeric part of quantity") @@ -506,7 +497,7 @@ return q.i.Sign() } -// AsScaled returns the current value, rounded up to the provided scale, and returns +// AsScale returns the current value, rounded up to the provided scale, and returns // false if the scale resulted in a loss of precision. func (q *Quantity) AsScale(scale Scale) (CanonicalValue, bool) { if q.d.Dec != nil { @@ -593,6 +584,12 @@ q.d.Dec.Neg(q.d.Dec) } +// Equal checks equality of two Quantities. This is useful for testing with +// cmp.Equal. +func (q Quantity) Equal(v Quantity) bool { + return q.Cmp(v) == 0 +} + // int64QuantityExpectedBytes is the expected width in bytes of the canonical string representation // of most Quantity values. const int64QuantityExpectedBytes = 18 @@ -689,7 +686,7 @@ } } -// Value returns the value of q; any fractional part will be lost. +// Value returns the unscaled value of q rounded up to the nearest integer away from 0. func (q *Quantity) Value() int64 { return q.ScaledValue(0) } @@ -700,7 +697,9 @@ return q.ScaledValue(Milli) } -// ScaledValue returns the value of ceil(q * 10^scale); this could overflow an int64. +// ScaledValue returns the value of ceil(q / 10^scale). +// For example, NewQuantity(1, DecimalSI).ScaledValue(Milli) returns 1000. +// This could overflow an int64. // To detect overflow, call Value() first and verify the expected magnitude. func (q *Quantity) ScaledValue(scale Scale) int64 { if q.d.Dec == nil { @@ -727,21 +726,3 @@ q.d.Dec = nil q.i = int64Amount{value: value, scale: scale} } - -// Copy is a convenience function that makes a deep copy for you. Non-deep -// copies of quantities share pointers and you will regret that. -func (q *Quantity) Copy() *Quantity { - if q.d.Dec == nil { - return &Quantity{ - s: q.s, - i: q.i, - Format: q.Format, - } - } - tmp := &inf.Dec{} - return &Quantity{ - s: q.s, - d: infDecAmount{tmp.Set(q.d.Dec)}, - Format: q.Format, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/api/resource/quantity_proto.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,7 @@ import ( "fmt" "io" + "math/bits" "github.com/gogo/protobuf/proto" ) @@ -28,7 +29,7 @@ func (m *Quantity) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) - n, err := m.MarshalTo(data) + n, err := m.MarshalToSizedBuffer(data[:size]) if err != nil { return nil, err } @@ -38,30 +39,40 @@ // MarshalTo is a customized version of the generated Protobuf unmarshaler for a struct // with a single string field. func (m *Quantity) MarshalTo(data []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(data[:size]) +} + +// MarshalToSizedBuffer is a customized version of the generated +// Protobuf unmarshaler for a struct with a single string field. +func (m *Quantity) MarshalToSizedBuffer(data []byte) (int, error) { + i := len(data) _ = i var l int _ = l - data[i] = 0xa - i++ // BEGIN CUSTOM MARSHAL out := m.String() + i -= len(out) + copy(data[i:], out) i = encodeVarintGenerated(data, i, uint64(len(out))) - i += copy(data[i:], out) // END CUSTOM MARSHAL + i-- + data[i] = 0xa - return i, nil + return len(data) - i, nil } func encodeVarintGenerated(data []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { data[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } data[offset] = uint8(v) - return offset + 1 + return base } func (m *Quantity) Size() (n int) { @@ -77,14 +88,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (bits.Len64(x|1) + 6) / 7 } // Unmarshal is a customized version of the generated Protobuf unmarshaler for a struct diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,17 +33,17 @@ return scheme.AddConversionFuncs( Convert_v1_TypeMeta_To_v1_TypeMeta, - Convert_unversioned_ListMeta_To_unversioned_ListMeta, + Convert_v1_ListMeta_To_v1_ListMeta, Convert_intstr_IntOrString_To_intstr_IntOrString, - Convert_unversioned_Time_To_unversioned_Time, - Convert_unversioned_MicroTime_To_unversioned_MicroTime, - Convert_Pointer_v1_Duration_To_v1_Duration, Convert_v1_Duration_To_Pointer_v1_Duration, - Convert_Slice_string_To_unversioned_Time, + Convert_Slice_string_To_v1_Time, + + Convert_v1_Time_To_v1_Time, + Convert_v1_MicroTime_To_v1_MicroTime, Convert_resource_Quantity_To_resource_Quantity, @@ -71,12 +71,14 @@ Convert_Pointer_float64_To_float64, Convert_float64_To_Pointer_float64, - Convert_map_to_unversioned_LabelSelector, - Convert_unversioned_LabelSelector_to_map, + Convert_Map_string_To_string_To_v1_LabelSelector, + Convert_v1_LabelSelector_To_Map_string_To_string, Convert_Slice_string_To_Slice_int32, Convert_Slice_string_To_v1_DeletionPropagation, + + Convert_Slice_string_To_v1_IncludeObjectPolicy, ) } @@ -187,7 +189,7 @@ } // +k8s:conversion-fn=copy-only -func Convert_unversioned_ListMeta_To_unversioned_ListMeta(in, out *ListMeta, s conversion.Scope) error { +func Convert_v1_ListMeta_To_v1_ListMeta(in, out *ListMeta, s conversion.Scope) error { *out = *in return nil } @@ -199,7 +201,14 @@ } // +k8s:conversion-fn=copy-only -func Convert_unversioned_Time_To_unversioned_Time(in *Time, out *Time, s conversion.Scope) error { +func Convert_v1_Time_To_v1_Time(in *Time, out *Time, s conversion.Scope) error { + // Cannot deep copy these, because time.Time has unexported fields. + *out = *in + return nil +} + +// +k8s:conversion-fn=copy-only +func Convert_v1_MicroTime_To_v1_MicroTime(in *MicroTime, out *MicroTime, s conversion.Scope) error { // Cannot deep copy these, because time.Time has unexported fields. *out = *in return nil @@ -220,14 +229,8 @@ return nil } -func Convert_unversioned_MicroTime_To_unversioned_MicroTime(in *MicroTime, out *MicroTime, s conversion.Scope) error { - // Cannot deep copy these, because time.Time has unexported fields. - *out = *in - return nil -} - -// Convert_Slice_string_To_unversioned_Time allows converting a URL query parameter value -func Convert_Slice_string_To_unversioned_Time(input *[]string, out *Time, s conversion.Scope) error { +// Convert_Slice_string_To_v1_Time allows converting a URL query parameter value +func Convert_Slice_string_To_v1_Time(input *[]string, out *Time, s conversion.Scope) error { str := "" if len(*input) > 0 { str = (*input)[0] @@ -275,7 +278,7 @@ return nil } -func Convert_map_to_unversioned_LabelSelector(in *map[string]string, out *LabelSelector, s conversion.Scope) error { +func Convert_Map_string_To_string_To_v1_LabelSelector(in *map[string]string, out *LabelSelector, s conversion.Scope) error { if in == nil { return nil } @@ -285,7 +288,7 @@ return nil } -func Convert_unversioned_LabelSelector_to_map(in *LabelSelector, out *map[string]string, s conversion.Scope) error { +func Convert_v1_LabelSelector_To_Map_string_To_string(in *LabelSelector, out *map[string]string, s conversion.Scope) error { var err error *out, err = LabelSelectorAsMap(in) return err @@ -316,3 +319,11 @@ } return nil } + +// Convert_Slice_string_To_v1_IncludeObjectPolicy allows converting a URL query parameter value +func Convert_Slice_string_To_v1_IncludeObjectPolicy(input *[]string, out *IncludeObjectPolicy, s conversion.Scope) error { + if len(*input) > 0 { + *out = IncludeObjectPolicy((*input)[0]) + } + return nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,46 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" +) + +func (in *TableRow) DeepCopy() *TableRow { + if in == nil { + return nil + } + + out := new(TableRow) + + if in.Cells != nil { + out.Cells = make([]interface{}, len(in.Cells)) + for i := range in.Cells { + out.Cells[i] = runtime.DeepCopyJSONValue(in.Cells[i]) + } + } + + if in.Conditions != nil { + out.Conditions = make([]TableRowCondition, len(in.Conditions)) + for i := range in.Conditions { + in.Conditions[i].DeepCopyInto(&out.Conditions[i]) + } + } + + in.Object.DeepCopyInto(&out.Object) + return out +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,4 +19,5 @@ // +k8s:defaulter-gen=TypeMeta // +groupName=meta.k8s.io + package v1 // import "k8s.io/apimachinery/pkg/apis/meta/v1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/duration.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,3 +48,13 @@ func (d Duration) MarshalJSON() ([]byte, error) { return json.Marshal(d.Duration.String()) } + +// OpenAPISchemaType is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// +// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators +func (_ Duration) OpenAPISchemaType() []string { return []string{"string"} } + +// OpenAPISchemaFormat is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +func (_ Duration) OpenAPISchemaFormat() string { return "" } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,72 +14,28 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto -// DO NOT EDIT! -/* - Package v1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto - - It has these top-level messages: - APIGroup - APIGroupList - APIResource - APIResourceList - APIVersions - DeleteOptions - Duration - ExportOptions - GetOptions - GroupKind - GroupResource - GroupVersion - GroupVersionForDiscovery - GroupVersionKind - GroupVersionResource - Initializer - Initializers - LabelSelector - LabelSelectorRequirement - List - ListMeta - ListOptions - MicroTime - ObjectMeta - OwnerReference - Patch - Preconditions - RootPaths - ServerAddressByClientCIDR - Status - StatusCause - StatusDetails - Time - Timestamp - TypeMeta - Verbs - WatchEvent -*/ package v1 -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import k8s_io_apimachinery_pkg_runtime "k8s.io/apimachinery/pkg/runtime" + io "io" -import time "time" -import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + runtime "k8s.io/apimachinery/pkg/runtime" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" + time "time" -import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - -import strings "strings" -import reflect "reflect" - -import io "io" + k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -93,159 +49,1199 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *APIGroup) Reset() { *m = APIGroup{} } -func (*APIGroup) ProtoMessage() {} -func (*APIGroup) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *APIGroupList) Reset() { *m = APIGroupList{} } -func (*APIGroupList) ProtoMessage() {} -func (*APIGroupList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *APIResource) Reset() { *m = APIResource{} } -func (*APIResource) ProtoMessage() {} -func (*APIResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func (m *APIResourceList) Reset() { *m = APIResourceList{} } -func (*APIResourceList) ProtoMessage() {} -func (*APIResourceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } - -func (m *APIVersions) Reset() { *m = APIVersions{} } -func (*APIVersions) ProtoMessage() {} -func (*APIVersions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } - -func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } -func (*DeleteOptions) ProtoMessage() {} -func (*DeleteOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } - -func (m *Duration) Reset() { *m = Duration{} } -func (*Duration) ProtoMessage() {} -func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } - -func (m *ExportOptions) Reset() { *m = ExportOptions{} } -func (*ExportOptions) ProtoMessage() {} -func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } - -func (m *GetOptions) Reset() { *m = GetOptions{} } -func (*GetOptions) ProtoMessage() {} -func (*GetOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } - -func (m *GroupKind) Reset() { *m = GroupKind{} } -func (*GroupKind) ProtoMessage() {} -func (*GroupKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } - -func (m *GroupResource) Reset() { *m = GroupResource{} } -func (*GroupResource) ProtoMessage() {} -func (*GroupResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } - -func (m *GroupVersion) Reset() { *m = GroupVersion{} } -func (*GroupVersion) ProtoMessage() {} -func (*GroupVersion) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } +func (m *APIGroup) Reset() { *m = APIGroup{} } +func (*APIGroup) ProtoMessage() {} +func (*APIGroup) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{0} +} +func (m *APIGroup) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *APIGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *APIGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_APIGroup.Merge(m, src) +} +func (m *APIGroup) XXX_Size() int { + return m.Size() +} +func (m *APIGroup) XXX_DiscardUnknown() { + xxx_messageInfo_APIGroup.DiscardUnknown(m) +} + +var xxx_messageInfo_APIGroup proto.InternalMessageInfo + +func (m *APIGroupList) Reset() { *m = APIGroupList{} } +func (*APIGroupList) ProtoMessage() {} +func (*APIGroupList) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{1} +} +func (m *APIGroupList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *APIGroupList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *APIGroupList) XXX_Merge(src proto.Message) { + xxx_messageInfo_APIGroupList.Merge(m, src) +} +func (m *APIGroupList) XXX_Size() int { + return m.Size() +} +func (m *APIGroupList) XXX_DiscardUnknown() { + xxx_messageInfo_APIGroupList.DiscardUnknown(m) +} + +var xxx_messageInfo_APIGroupList proto.InternalMessageInfo + +func (m *APIResource) Reset() { *m = APIResource{} } +func (*APIResource) ProtoMessage() {} +func (*APIResource) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{2} +} +func (m *APIResource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *APIResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *APIResource) XXX_Merge(src proto.Message) { + xxx_messageInfo_APIResource.Merge(m, src) +} +func (m *APIResource) XXX_Size() int { + return m.Size() +} +func (m *APIResource) XXX_DiscardUnknown() { + xxx_messageInfo_APIResource.DiscardUnknown(m) +} + +var xxx_messageInfo_APIResource proto.InternalMessageInfo + +func (m *APIResourceList) Reset() { *m = APIResourceList{} } +func (*APIResourceList) ProtoMessage() {} +func (*APIResourceList) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{3} +} +func (m *APIResourceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *APIResourceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *APIResourceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_APIResourceList.Merge(m, src) +} +func (m *APIResourceList) XXX_Size() int { + return m.Size() +} +func (m *APIResourceList) XXX_DiscardUnknown() { + xxx_messageInfo_APIResourceList.DiscardUnknown(m) +} + +var xxx_messageInfo_APIResourceList proto.InternalMessageInfo + +func (m *APIVersions) Reset() { *m = APIVersions{} } +func (*APIVersions) ProtoMessage() {} +func (*APIVersions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{4} +} +func (m *APIVersions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *APIVersions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *APIVersions) XXX_Merge(src proto.Message) { + xxx_messageInfo_APIVersions.Merge(m, src) +} +func (m *APIVersions) XXX_Size() int { + return m.Size() +} +func (m *APIVersions) XXX_DiscardUnknown() { + xxx_messageInfo_APIVersions.DiscardUnknown(m) +} + +var xxx_messageInfo_APIVersions proto.InternalMessageInfo + +func (m *CreateOptions) Reset() { *m = CreateOptions{} } +func (*CreateOptions) ProtoMessage() {} +func (*CreateOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{5} +} +func (m *CreateOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CreateOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CreateOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateOptions.Merge(m, src) +} +func (m *CreateOptions) XXX_Size() int { + return m.Size() +} +func (m *CreateOptions) XXX_DiscardUnknown() { + xxx_messageInfo_CreateOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateOptions proto.InternalMessageInfo + +func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } +func (*DeleteOptions) ProtoMessage() {} +func (*DeleteOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{6} +} +func (m *DeleteOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeleteOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeleteOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteOptions.Merge(m, src) +} +func (m *DeleteOptions) XXX_Size() int { + return m.Size() +} +func (m *DeleteOptions) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteOptions proto.InternalMessageInfo + +func (m *Duration) Reset() { *m = Duration{} } +func (*Duration) ProtoMessage() {} +func (*Duration) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{7} +} +func (m *Duration) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Duration) XXX_Merge(src proto.Message) { + xxx_messageInfo_Duration.Merge(m, src) +} +func (m *Duration) XXX_Size() int { + return m.Size() +} +func (m *Duration) XXX_DiscardUnknown() { + xxx_messageInfo_Duration.DiscardUnknown(m) +} + +var xxx_messageInfo_Duration proto.InternalMessageInfo + +func (m *ExportOptions) Reset() { *m = ExportOptions{} } +func (*ExportOptions) ProtoMessage() {} +func (*ExportOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{8} +} +func (m *ExportOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExportOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExportOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExportOptions.Merge(m, src) +} +func (m *ExportOptions) XXX_Size() int { + return m.Size() +} +func (m *ExportOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ExportOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ExportOptions proto.InternalMessageInfo + +func (m *FieldsV1) Reset() { *m = FieldsV1{} } +func (*FieldsV1) ProtoMessage() {} +func (*FieldsV1) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{9} +} +func (m *FieldsV1) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FieldsV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FieldsV1) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldsV1.Merge(m, src) +} +func (m *FieldsV1) XXX_Size() int { + return m.Size() +} +func (m *FieldsV1) XXX_DiscardUnknown() { + xxx_messageInfo_FieldsV1.DiscardUnknown(m) +} + +var xxx_messageInfo_FieldsV1 proto.InternalMessageInfo + +func (m *GetOptions) Reset() { *m = GetOptions{} } +func (*GetOptions) ProtoMessage() {} +func (*GetOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{10} +} +func (m *GetOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GetOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetOptions.Merge(m, src) +} +func (m *GetOptions) XXX_Size() int { + return m.Size() +} +func (m *GetOptions) XXX_DiscardUnknown() { + xxx_messageInfo_GetOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_GetOptions proto.InternalMessageInfo + +func (m *GroupKind) Reset() { *m = GroupKind{} } +func (*GroupKind) ProtoMessage() {} +func (*GroupKind) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{11} +} +func (m *GroupKind) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupKind) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupKind) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupKind.Merge(m, src) +} +func (m *GroupKind) XXX_Size() int { + return m.Size() +} +func (m *GroupKind) XXX_DiscardUnknown() { + xxx_messageInfo_GroupKind.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupKind proto.InternalMessageInfo + +func (m *GroupResource) Reset() { *m = GroupResource{} } +func (*GroupResource) ProtoMessage() {} +func (*GroupResource) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{12} +} +func (m *GroupResource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupResource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupResource.Merge(m, src) +} +func (m *GroupResource) XXX_Size() int { + return m.Size() +} +func (m *GroupResource) XXX_DiscardUnknown() { + xxx_messageInfo_GroupResource.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupResource proto.InternalMessageInfo + +func (m *GroupVersion) Reset() { *m = GroupVersion{} } +func (*GroupVersion) ProtoMessage() {} +func (*GroupVersion) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{13} +} +func (m *GroupVersion) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupVersion) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupVersion.Merge(m, src) +} +func (m *GroupVersion) XXX_Size() int { + return m.Size() +} +func (m *GroupVersion) XXX_DiscardUnknown() { + xxx_messageInfo_GroupVersion.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupVersion proto.InternalMessageInfo func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } func (*GroupVersionForDiscovery) ProtoMessage() {} func (*GroupVersionForDiscovery) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{12} + return fileDescriptor_cf52fa777ced5367, []int{14} +} +func (m *GroupVersionForDiscovery) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupVersionForDiscovery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupVersionForDiscovery) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupVersionForDiscovery.Merge(m, src) +} +func (m *GroupVersionForDiscovery) XXX_Size() int { + return m.Size() +} +func (m *GroupVersionForDiscovery) XXX_DiscardUnknown() { + xxx_messageInfo_GroupVersionForDiscovery.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupVersionForDiscovery proto.InternalMessageInfo + +func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } +func (*GroupVersionKind) ProtoMessage() {} +func (*GroupVersionKind) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{15} +} +func (m *GroupVersionKind) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupVersionKind) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupVersionKind) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupVersionKind.Merge(m, src) +} +func (m *GroupVersionKind) XXX_Size() int { + return m.Size() +} +func (m *GroupVersionKind) XXX_DiscardUnknown() { + xxx_messageInfo_GroupVersionKind.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupVersionKind proto.InternalMessageInfo + +func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } +func (*GroupVersionResource) ProtoMessage() {} +func (*GroupVersionResource) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{16} +} +func (m *GroupVersionResource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupVersionResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupVersionResource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupVersionResource.Merge(m, src) +} +func (m *GroupVersionResource) XXX_Size() int { + return m.Size() +} +func (m *GroupVersionResource) XXX_DiscardUnknown() { + xxx_messageInfo_GroupVersionResource.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupVersionResource proto.InternalMessageInfo + +func (m *LabelSelector) Reset() { *m = LabelSelector{} } +func (*LabelSelector) ProtoMessage() {} +func (*LabelSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{17} +} +func (m *LabelSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LabelSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LabelSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_LabelSelector.Merge(m, src) +} +func (m *LabelSelector) XXX_Size() int { + return m.Size() +} +func (m *LabelSelector) XXX_DiscardUnknown() { + xxx_messageInfo_LabelSelector.DiscardUnknown(m) +} + +var xxx_messageInfo_LabelSelector proto.InternalMessageInfo + +func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } +func (*LabelSelectorRequirement) ProtoMessage() {} +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{18} +} +func (m *LabelSelectorRequirement) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LabelSelectorRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LabelSelectorRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_LabelSelectorRequirement.Merge(m, src) +} +func (m *LabelSelectorRequirement) XXX_Size() int { + return m.Size() +} +func (m *LabelSelectorRequirement) XXX_DiscardUnknown() { + xxx_messageInfo_LabelSelectorRequirement.DiscardUnknown(m) +} + +var xxx_messageInfo_LabelSelectorRequirement proto.InternalMessageInfo + +func (m *List) Reset() { *m = List{} } +func (*List) ProtoMessage() {} +func (*List) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{19} +} +func (m *List) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *List) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *List) XXX_Merge(src proto.Message) { + xxx_messageInfo_List.Merge(m, src) +} +func (m *List) XXX_Size() int { + return m.Size() +} +func (m *List) XXX_DiscardUnknown() { + xxx_messageInfo_List.DiscardUnknown(m) +} + +var xxx_messageInfo_List proto.InternalMessageInfo + +func (m *ListMeta) Reset() { *m = ListMeta{} } +func (*ListMeta) ProtoMessage() {} +func (*ListMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{20} +} +func (m *ListMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ListMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ListMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListMeta.Merge(m, src) +} +func (m *ListMeta) XXX_Size() int { + return m.Size() +} +func (m *ListMeta) XXX_DiscardUnknown() { + xxx_messageInfo_ListMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_ListMeta proto.InternalMessageInfo + +func (m *ListOptions) Reset() { *m = ListOptions{} } +func (*ListOptions) ProtoMessage() {} +func (*ListOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{21} +} +func (m *ListOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ListOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ListOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListOptions.Merge(m, src) +} +func (m *ListOptions) XXX_Size() int { + return m.Size() +} +func (m *ListOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ListOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ListOptions proto.InternalMessageInfo + +func (m *ManagedFieldsEntry) Reset() { *m = ManagedFieldsEntry{} } +func (*ManagedFieldsEntry) ProtoMessage() {} +func (*ManagedFieldsEntry) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{22} +} +func (m *ManagedFieldsEntry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ManagedFieldsEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ManagedFieldsEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ManagedFieldsEntry.Merge(m, src) +} +func (m *ManagedFieldsEntry) XXX_Size() int { + return m.Size() +} +func (m *ManagedFieldsEntry) XXX_DiscardUnknown() { + xxx_messageInfo_ManagedFieldsEntry.DiscardUnknown(m) +} + +var xxx_messageInfo_ManagedFieldsEntry proto.InternalMessageInfo + +func (m *MicroTime) Reset() { *m = MicroTime{} } +func (*MicroTime) ProtoMessage() {} +func (*MicroTime) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{23} +} +func (m *MicroTime) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MicroTime.Unmarshal(m, b) +} +func (m *MicroTime) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MicroTime.Marshal(b, m, deterministic) +} +func (m *MicroTime) XXX_Merge(src proto.Message) { + xxx_messageInfo_MicroTime.Merge(m, src) +} +func (m *MicroTime) XXX_Size() int { + return xxx_messageInfo_MicroTime.Size(m) +} +func (m *MicroTime) XXX_DiscardUnknown() { + xxx_messageInfo_MicroTime.DiscardUnknown(m) +} + +var xxx_messageInfo_MicroTime proto.InternalMessageInfo + +func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } +func (*ObjectMeta) ProtoMessage() {} +func (*ObjectMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{24} +} +func (m *ObjectMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ObjectMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ObjectMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_ObjectMeta.Merge(m, src) +} +func (m *ObjectMeta) XXX_Size() int { + return m.Size() +} +func (m *ObjectMeta) XXX_DiscardUnknown() { + xxx_messageInfo_ObjectMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_ObjectMeta proto.InternalMessageInfo + +func (m *OwnerReference) Reset() { *m = OwnerReference{} } +func (*OwnerReference) ProtoMessage() {} +func (*OwnerReference) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{25} +} +func (m *OwnerReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OwnerReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OwnerReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_OwnerReference.Merge(m, src) +} +func (m *OwnerReference) XXX_Size() int { + return m.Size() +} +func (m *OwnerReference) XXX_DiscardUnknown() { + xxx_messageInfo_OwnerReference.DiscardUnknown(m) +} + +var xxx_messageInfo_OwnerReference proto.InternalMessageInfo + +func (m *PartialObjectMetadata) Reset() { *m = PartialObjectMetadata{} } +func (*PartialObjectMetadata) ProtoMessage() {} +func (*PartialObjectMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{26} +} +func (m *PartialObjectMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PartialObjectMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PartialObjectMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_PartialObjectMetadata.Merge(m, src) +} +func (m *PartialObjectMetadata) XXX_Size() int { + return m.Size() +} +func (m *PartialObjectMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_PartialObjectMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_PartialObjectMetadata proto.InternalMessageInfo + +func (m *PartialObjectMetadataList) Reset() { *m = PartialObjectMetadataList{} } +func (*PartialObjectMetadataList) ProtoMessage() {} +func (*PartialObjectMetadataList) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{27} +} +func (m *PartialObjectMetadataList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PartialObjectMetadataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PartialObjectMetadataList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PartialObjectMetadataList.Merge(m, src) +} +func (m *PartialObjectMetadataList) XXX_Size() int { + return m.Size() +} +func (m *PartialObjectMetadataList) XXX_DiscardUnknown() { + xxx_messageInfo_PartialObjectMetadataList.DiscardUnknown(m) +} + +var xxx_messageInfo_PartialObjectMetadataList proto.InternalMessageInfo + +func (m *Patch) Reset() { *m = Patch{} } +func (*Patch) ProtoMessage() {} +func (*Patch) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{28} +} +func (m *Patch) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Patch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Patch) XXX_Merge(src proto.Message) { + xxx_messageInfo_Patch.Merge(m, src) +} +func (m *Patch) XXX_Size() int { + return m.Size() +} +func (m *Patch) XXX_DiscardUnknown() { + xxx_messageInfo_Patch.DiscardUnknown(m) +} + +var xxx_messageInfo_Patch proto.InternalMessageInfo + +func (m *PatchOptions) Reset() { *m = PatchOptions{} } +func (*PatchOptions) ProtoMessage() {} +func (*PatchOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{29} +} +func (m *PatchOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PatchOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PatchOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_PatchOptions.Merge(m, src) +} +func (m *PatchOptions) XXX_Size() int { + return m.Size() +} +func (m *PatchOptions) XXX_DiscardUnknown() { + xxx_messageInfo_PatchOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_PatchOptions proto.InternalMessageInfo + +func (m *Preconditions) Reset() { *m = Preconditions{} } +func (*Preconditions) ProtoMessage() {} +func (*Preconditions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{30} +} +func (m *Preconditions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Preconditions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Preconditions) XXX_Merge(src proto.Message) { + xxx_messageInfo_Preconditions.Merge(m, src) +} +func (m *Preconditions) XXX_Size() int { + return m.Size() +} +func (m *Preconditions) XXX_DiscardUnknown() { + xxx_messageInfo_Preconditions.DiscardUnknown(m) } -func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } -func (*GroupVersionKind) ProtoMessage() {} -func (*GroupVersionKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } +var xxx_messageInfo_Preconditions proto.InternalMessageInfo -func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } -func (*GroupVersionResource) ProtoMessage() {} -func (*GroupVersionResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } +func (m *RootPaths) Reset() { *m = RootPaths{} } +func (*RootPaths) ProtoMessage() {} +func (*RootPaths) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{31} +} +func (m *RootPaths) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RootPaths) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RootPaths) XXX_Merge(src proto.Message) { + xxx_messageInfo_RootPaths.Merge(m, src) +} +func (m *RootPaths) XXX_Size() int { + return m.Size() +} +func (m *RootPaths) XXX_DiscardUnknown() { + xxx_messageInfo_RootPaths.DiscardUnknown(m) +} -func (m *Initializer) Reset() { *m = Initializer{} } -func (*Initializer) ProtoMessage() {} -func (*Initializer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } +var xxx_messageInfo_RootPaths proto.InternalMessageInfo -func (m *Initializers) Reset() { *m = Initializers{} } -func (*Initializers) ProtoMessage() {} -func (*Initializers) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } +func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } +func (*ServerAddressByClientCIDR) ProtoMessage() {} +func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{32} +} +func (m *ServerAddressByClientCIDR) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServerAddressByClientCIDR) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServerAddressByClientCIDR) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServerAddressByClientCIDR.Merge(m, src) +} +func (m *ServerAddressByClientCIDR) XXX_Size() int { + return m.Size() +} +func (m *ServerAddressByClientCIDR) XXX_DiscardUnknown() { + xxx_messageInfo_ServerAddressByClientCIDR.DiscardUnknown(m) +} -func (m *LabelSelector) Reset() { *m = LabelSelector{} } -func (*LabelSelector) ProtoMessage() {} -func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } +var xxx_messageInfo_ServerAddressByClientCIDR proto.InternalMessageInfo -func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } -func (*LabelSelectorRequirement) ProtoMessage() {} -func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{18} +func (m *Status) Reset() { *m = Status{} } +func (*Status) ProtoMessage() {} +func (*Status) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{33} +} +func (m *Status) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Status) XXX_Merge(src proto.Message) { + xxx_messageInfo_Status.Merge(m, src) +} +func (m *Status) XXX_Size() int { + return m.Size() +} +func (m *Status) XXX_DiscardUnknown() { + xxx_messageInfo_Status.DiscardUnknown(m) } -func (m *List) Reset() { *m = List{} } -func (*List) ProtoMessage() {} -func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } +var xxx_messageInfo_Status proto.InternalMessageInfo -func (m *ListMeta) Reset() { *m = ListMeta{} } -func (*ListMeta) ProtoMessage() {} -func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (m *StatusCause) Reset() { *m = StatusCause{} } +func (*StatusCause) ProtoMessage() {} +func (*StatusCause) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{34} +} +func (m *StatusCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatusCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatusCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatusCause.Merge(m, src) +} +func (m *StatusCause) XXX_Size() int { + return m.Size() +} +func (m *StatusCause) XXX_DiscardUnknown() { + xxx_messageInfo_StatusCause.DiscardUnknown(m) +} -func (m *ListOptions) Reset() { *m = ListOptions{} } -func (*ListOptions) ProtoMessage() {} -func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +var xxx_messageInfo_StatusCause proto.InternalMessageInfo -func (m *MicroTime) Reset() { *m = MicroTime{} } -func (*MicroTime) ProtoMessage() {} -func (*MicroTime) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +func (m *StatusDetails) Reset() { *m = StatusDetails{} } +func (*StatusDetails) ProtoMessage() {} +func (*StatusDetails) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{35} +} +func (m *StatusDetails) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StatusDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StatusDetails) XXX_Merge(src proto.Message) { + xxx_messageInfo_StatusDetails.Merge(m, src) +} +func (m *StatusDetails) XXX_Size() int { + return m.Size() +} +func (m *StatusDetails) XXX_DiscardUnknown() { + xxx_messageInfo_StatusDetails.DiscardUnknown(m) +} -func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } -func (*ObjectMeta) ProtoMessage() {} -func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +var xxx_messageInfo_StatusDetails proto.InternalMessageInfo -func (m *OwnerReference) Reset() { *m = OwnerReference{} } -func (*OwnerReference) ProtoMessage() {} -func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (m *TableOptions) Reset() { *m = TableOptions{} } +func (*TableOptions) ProtoMessage() {} +func (*TableOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{36} +} +func (m *TableOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TableOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TableOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_TableOptions.Merge(m, src) +} +func (m *TableOptions) XXX_Size() int { + return m.Size() +} +func (m *TableOptions) XXX_DiscardUnknown() { + xxx_messageInfo_TableOptions.DiscardUnknown(m) +} -func (m *Patch) Reset() { *m = Patch{} } -func (*Patch) ProtoMessage() {} -func (*Patch) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +var xxx_messageInfo_TableOptions proto.InternalMessageInfo -func (m *Preconditions) Reset() { *m = Preconditions{} } -func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (m *Time) Reset() { *m = Time{} } +func (*Time) ProtoMessage() {} +func (*Time) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{37} +} +func (m *Time) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Time.Unmarshal(m, b) +} +func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Time.Marshal(b, m, deterministic) +} +func (m *Time) XXX_Merge(src proto.Message) { + xxx_messageInfo_Time.Merge(m, src) +} +func (m *Time) XXX_Size() int { + return xxx_messageInfo_Time.Size(m) +} +func (m *Time) XXX_DiscardUnknown() { + xxx_messageInfo_Time.DiscardUnknown(m) +} -func (m *RootPaths) Reset() { *m = RootPaths{} } -func (*RootPaths) ProtoMessage() {} -func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +var xxx_messageInfo_Time proto.InternalMessageInfo -func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } -func (*ServerAddressByClientCIDR) ProtoMessage() {} -func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{28} +func (m *Timestamp) Reset() { *m = Timestamp{} } +func (*Timestamp) ProtoMessage() {} +func (*Timestamp) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{38} +} +func (m *Timestamp) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Timestamp) XXX_Merge(src proto.Message) { + xxx_messageInfo_Timestamp.Merge(m, src) +} +func (m *Timestamp) XXX_Size() int { + return m.Size() } +func (m *Timestamp) XXX_DiscardUnknown() { + xxx_messageInfo_Timestamp.DiscardUnknown(m) +} + +var xxx_messageInfo_Timestamp proto.InternalMessageInfo -func (m *Status) Reset() { *m = Status{} } -func (*Status) ProtoMessage() {} -func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +func (m *TypeMeta) Reset() { *m = TypeMeta{} } +func (*TypeMeta) ProtoMessage() {} +func (*TypeMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{39} +} +func (m *TypeMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TypeMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TypeMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TypeMeta.Merge(m, src) +} +func (m *TypeMeta) XXX_Size() int { + return m.Size() +} +func (m *TypeMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TypeMeta.DiscardUnknown(m) +} -func (m *StatusCause) Reset() { *m = StatusCause{} } -func (*StatusCause) ProtoMessage() {} -func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } +var xxx_messageInfo_TypeMeta proto.InternalMessageInfo -func (m *StatusDetails) Reset() { *m = StatusDetails{} } -func (*StatusDetails) ProtoMessage() {} -func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } +func (m *UpdateOptions) Reset() { *m = UpdateOptions{} } +func (*UpdateOptions) ProtoMessage() {} +func (*UpdateOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{40} +} +func (m *UpdateOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UpdateOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *UpdateOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateOptions.Merge(m, src) +} +func (m *UpdateOptions) XXX_Size() int { + return m.Size() +} +func (m *UpdateOptions) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateOptions.DiscardUnknown(m) +} -func (m *Time) Reset() { *m = Time{} } -func (*Time) ProtoMessage() {} -func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +var xxx_messageInfo_UpdateOptions proto.InternalMessageInfo -func (m *Timestamp) Reset() { *m = Timestamp{} } -func (*Timestamp) ProtoMessage() {} -func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +func (m *Verbs) Reset() { *m = Verbs{} } +func (*Verbs) ProtoMessage() {} +func (*Verbs) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{41} +} +func (m *Verbs) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Verbs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Verbs) XXX_Merge(src proto.Message) { + xxx_messageInfo_Verbs.Merge(m, src) +} +func (m *Verbs) XXX_Size() int { + return m.Size() +} +func (m *Verbs) XXX_DiscardUnknown() { + xxx_messageInfo_Verbs.DiscardUnknown(m) +} -func (m *TypeMeta) Reset() { *m = TypeMeta{} } -func (*TypeMeta) ProtoMessage() {} -func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } +var xxx_messageInfo_Verbs proto.InternalMessageInfo -func (m *Verbs) Reset() { *m = Verbs{} } -func (*Verbs) ProtoMessage() {} -func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +func (m *WatchEvent) Reset() { *m = WatchEvent{} } +func (*WatchEvent) ProtoMessage() {} +func (*WatchEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{42} +} +func (m *WatchEvent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WatchEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WatchEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_WatchEvent.Merge(m, src) +} +func (m *WatchEvent) XXX_Size() int { + return m.Size() +} +func (m *WatchEvent) XXX_DiscardUnknown() { + xxx_messageInfo_WatchEvent.DiscardUnknown(m) +} -func (m *WatchEvent) Reset() { *m = WatchEvent{} } -func (*WatchEvent) ProtoMessage() {} -func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } +var xxx_messageInfo_WatchEvent proto.InternalMessageInfo func init() { proto.RegisterType((*APIGroup)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIGroup") @@ -253,9 +1249,11 @@ proto.RegisterType((*APIResource)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIResource") proto.RegisterType((*APIResourceList)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIResourceList") proto.RegisterType((*APIVersions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIVersions") + proto.RegisterType((*CreateOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.CreateOptions") proto.RegisterType((*DeleteOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions") proto.RegisterType((*Duration)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Duration") proto.RegisterType((*ExportOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ExportOptions") + proto.RegisterType((*FieldsV1)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.FieldsV1") proto.RegisterType((*GetOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GetOptions") proto.RegisterType((*GroupKind)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupKind") proto.RegisterType((*GroupResource)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupResource") @@ -263,1112 +1261,1687 @@ proto.RegisterType((*GroupVersionForDiscovery)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery") proto.RegisterType((*GroupVersionKind)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupVersionKind") proto.RegisterType((*GroupVersionResource)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupVersionResource") - proto.RegisterType((*Initializer)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Initializer") - proto.RegisterType((*Initializers)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Initializers") proto.RegisterType((*LabelSelector)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector.MatchLabelsEntry") proto.RegisterType((*LabelSelectorRequirement)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement") proto.RegisterType((*List)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.List") proto.RegisterType((*ListMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta") proto.RegisterType((*ListOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListOptions") + proto.RegisterType((*ManagedFieldsEntry)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry") proto.RegisterType((*MicroTime)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime") proto.RegisterType((*ObjectMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta.AnnotationsEntry") + proto.RegisterMapType((map[string]string)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta.LabelsEntry") proto.RegisterType((*OwnerReference)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference") + proto.RegisterType((*PartialObjectMetadata)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.PartialObjectMetadata") + proto.RegisterType((*PartialObjectMetadataList)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.PartialObjectMetadataList") proto.RegisterType((*Patch)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Patch") + proto.RegisterType((*PatchOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.PatchOptions") proto.RegisterType((*Preconditions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Preconditions") proto.RegisterType((*RootPaths)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.RootPaths") proto.RegisterType((*ServerAddressByClientCIDR)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR") proto.RegisterType((*Status)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Status") proto.RegisterType((*StatusCause)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.StatusCause") proto.RegisterType((*StatusDetails)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.StatusDetails") + proto.RegisterType((*TableOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.TableOptions") proto.RegisterType((*Time)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Time") proto.RegisterType((*Timestamp)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Timestamp") proto.RegisterType((*TypeMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.TypeMeta") + proto.RegisterType((*UpdateOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.UpdateOptions") proto.RegisterType((*Verbs)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Verbs") proto.RegisterType((*WatchEvent)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.WatchEvent") } -func (m *APIGroup) Marshal() (dAtA []byte, err error) { + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto", fileDescriptor_cf52fa777ced5367) +} + +var fileDescriptor_cf52fa777ced5367 = []byte{ + // 2713 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x19, 0xcd, 0x6f, 0x1b, 0x59, + 0x3d, 0x63, 0xc7, 0x8e, 0xfd, 0x73, 0x9c, 0x8f, 0x97, 0x16, 0xdc, 0x00, 0x71, 0x76, 0x16, 0xad, + 0x52, 0xe8, 0x3a, 0x9b, 0x02, 0xab, 0xd2, 0x65, 0x0b, 0x71, 0x9c, 0x74, 0xc3, 0x36, 0x4d, 0xf4, + 0xd2, 0x16, 0x28, 0x15, 0xea, 0x64, 0xe6, 0xc5, 0x19, 0x32, 0x9e, 0xf1, 0xbe, 0x19, 0x27, 0x35, + 0x1c, 0xd8, 0x03, 0x08, 0x90, 0x60, 0xd5, 0x23, 0xe2, 0x80, 0xb6, 0x82, 0xbf, 0x80, 0x13, 0x7f, + 0x00, 0x12, 0xbd, 0x20, 0xad, 0xc4, 0x65, 0x25, 0x90, 0xb5, 0x0d, 0x07, 0x8e, 0x88, 0x6b, 0x4e, + 0xe8, 0x7d, 0xcd, 0x87, 0x1d, 0x37, 0x63, 0xba, 0xac, 0xf6, 0xe6, 0xf9, 0x7d, 0xff, 0xde, 0xfb, + 0xbd, 0xdf, 0x97, 0x61, 0xeb, 0xf0, 0x9a, 0x5f, 0xb3, 0xbd, 0xe5, 0xc3, 0xce, 0x1e, 0xa1, 0x2e, + 0x09, 0x88, 0xbf, 0x7c, 0x44, 0x5c, 0xcb, 0xa3, 0xcb, 0x12, 0x61, 0xb4, 0xed, 0x96, 0x61, 0x1e, + 0xd8, 0x2e, 0xa1, 0xdd, 0xe5, 0xf6, 0x61, 0x93, 0x01, 0xfc, 0xe5, 0x16, 0x09, 0x8c, 0xe5, 0xa3, + 0x95, 0xe5, 0x26, 0x71, 0x09, 0x35, 0x02, 0x62, 0xd5, 0xda, 0xd4, 0x0b, 0x3c, 0xf4, 0x45, 0xc1, + 0x55, 0x8b, 0x73, 0xd5, 0xda, 0x87, 0x4d, 0x06, 0xf0, 0x6b, 0x8c, 0xab, 0x76, 0xb4, 0x32, 0xff, + 0x6a, 0xd3, 0x0e, 0x0e, 0x3a, 0x7b, 0x35, 0xd3, 0x6b, 0x2d, 0x37, 0xbd, 0xa6, 0xb7, 0xcc, 0x99, + 0xf7, 0x3a, 0xfb, 0xfc, 0x8b, 0x7f, 0xf0, 0x5f, 0x42, 0xe8, 0xfc, 0x50, 0x53, 0x68, 0xc7, 0x0d, + 0xec, 0x16, 0xe9, 0xb7, 0x62, 0xfe, 0xf5, 0xf3, 0x18, 0x7c, 0xf3, 0x80, 0xb4, 0x8c, 0x7e, 0x3e, + 0xfd, 0x2f, 0x59, 0x28, 0xac, 0xee, 0x6c, 0xde, 0xa4, 0x5e, 0xa7, 0x8d, 0x16, 0x61, 0xdc, 0x35, + 0x5a, 0xa4, 0xa2, 0x2d, 0x6a, 0x4b, 0xc5, 0xfa, 0xe4, 0xd3, 0x5e, 0x75, 0xec, 0xa4, 0x57, 0x1d, + 0xbf, 0x6d, 0xb4, 0x08, 0xe6, 0x18, 0xe4, 0x40, 0xe1, 0x88, 0x50, 0xdf, 0xf6, 0x5c, 0xbf, 0x92, + 0x59, 0xcc, 0x2e, 0x95, 0xae, 0xde, 0xa8, 0xa5, 0xf1, 0xbf, 0xc6, 0x15, 0xdc, 0x13, 0xac, 0x1b, + 0x1e, 0x6d, 0xd8, 0xbe, 0xe9, 0x1d, 0x11, 0xda, 0xad, 0xcf, 0x48, 0x2d, 0x05, 0x89, 0xf4, 0x71, + 0xa8, 0x01, 0xfd, 0x54, 0x83, 0x99, 0x36, 0x25, 0xfb, 0x84, 0x52, 0x62, 0x49, 0x7c, 0x25, 0xbb, + 0xa8, 0x7d, 0x0c, 0x6a, 0x2b, 0x52, 0xed, 0xcc, 0x4e, 0x9f, 0x7c, 0x3c, 0xa0, 0x11, 0xfd, 0x5e, + 0x83, 0x79, 0x9f, 0xd0, 0x23, 0x42, 0x57, 0x2d, 0x8b, 0x12, 0xdf, 0xaf, 0x77, 0xd7, 0x1c, 0x9b, + 0xb8, 0xc1, 0xda, 0x66, 0x03, 0xfb, 0x95, 0x71, 0x7e, 0x0e, 0xdf, 0x4c, 0x67, 0xd0, 0xee, 0x30, + 0x39, 0x75, 0x5d, 0x5a, 0x34, 0x3f, 0x94, 0xc4, 0xc7, 0xcf, 0x31, 0x43, 0xdf, 0x87, 0x49, 0x75, + 0x91, 0xb7, 0x6c, 0x3f, 0x40, 0xf7, 0x20, 0xdf, 0x64, 0x1f, 0x7e, 0x45, 0xe3, 0x06, 0xd6, 0xd2, + 0x19, 0xa8, 0x64, 0xd4, 0xa7, 0xa4, 0x3d, 0x79, 0xfe, 0xe9, 0x63, 0x29, 0x4d, 0xff, 0xe5, 0x38, + 0x94, 0x56, 0x77, 0x36, 0x31, 0xf1, 0xbd, 0x0e, 0x35, 0x49, 0x8a, 0xa0, 0xb9, 0x06, 0x93, 0xbe, + 0xed, 0x36, 0x3b, 0x8e, 0x41, 0x19, 0xb4, 0x92, 0xe7, 0x94, 0x17, 0x24, 0xe5, 0xe4, 0x6e, 0x0c, + 0x87, 0x13, 0x94, 0xe8, 0x2a, 0x00, 0x93, 0xe0, 0xb7, 0x0d, 0x93, 0x58, 0x95, 0xcc, 0xa2, 0xb6, + 0x54, 0xa8, 0x23, 0xc9, 0x07, 0xb7, 0x43, 0x0c, 0x8e, 0x51, 0xa1, 0x97, 0x21, 0xc7, 0x2d, 0xad, + 0x14, 0xb8, 0x9a, 0xb2, 0x24, 0xcf, 0x71, 0x37, 0xb0, 0xc0, 0xa1, 0xcb, 0x30, 0x21, 0xa3, 0xac, + 0x52, 0xe4, 0x64, 0xd3, 0x92, 0x6c, 0x42, 0x85, 0x81, 0xc2, 0x33, 0xff, 0x0e, 0x6d, 0xd7, 0xe2, + 0x71, 0x17, 0xf3, 0xef, 0x6d, 0xdb, 0xb5, 0x30, 0xc7, 0xa0, 0x5b, 0x90, 0x3b, 0x22, 0x74, 0x8f, + 0x45, 0x02, 0x0b, 0xcd, 0x2f, 0xa7, 0x3b, 0xe8, 0x7b, 0x8c, 0xa5, 0x5e, 0x64, 0xa6, 0xf1, 0x9f, + 0x58, 0x08, 0x41, 0x35, 0x00, 0xff, 0xc0, 0xa3, 0x01, 0x77, 0xaf, 0x92, 0x5b, 0xcc, 0x2e, 0x15, + 0xeb, 0x53, 0xcc, 0xdf, 0xdd, 0x10, 0x8a, 0x63, 0x14, 0x8c, 0xde, 0x34, 0x02, 0xd2, 0xf4, 0xa8, + 0x4d, 0xfc, 0xca, 0x44, 0x44, 0xbf, 0x16, 0x42, 0x71, 0x8c, 0x02, 0x7d, 0x1b, 0x90, 0x1f, 0x78, + 0xd4, 0x68, 0x12, 0xe9, 0xea, 0x5b, 0x86, 0x7f, 0x50, 0x01, 0xee, 0xdd, 0xbc, 0xf4, 0x0e, 0xed, + 0x0e, 0x50, 0xe0, 0x33, 0xb8, 0xf4, 0x3f, 0x6a, 0x30, 0x1d, 0x8b, 0x05, 0x1e, 0x77, 0xd7, 0x60, + 0xb2, 0x19, 0x7b, 0x75, 0x32, 0x2e, 0xc2, 0xdb, 0x8e, 0xbf, 0x48, 0x9c, 0xa0, 0x44, 0x04, 0x8a, + 0x54, 0x4a, 0x52, 0xd9, 0x65, 0x25, 0x75, 0xd0, 0x2a, 0x1b, 0x22, 0x4d, 0x31, 0xa0, 0x8f, 0x23, + 0xc9, 0xfa, 0xbf, 0x34, 0x1e, 0xc0, 0x2a, 0xdf, 0xa0, 0xa5, 0x58, 0x4e, 0xd3, 0xf8, 0xf1, 0x4d, + 0x0e, 0xc9, 0x47, 0xe7, 0x24, 0x82, 0xcc, 0xa7, 0x22, 0x11, 0x5c, 0x2f, 0xfc, 0xe6, 0xfd, 0xea, + 0xd8, 0xbb, 0xff, 0x58, 0x1c, 0xd3, 0x5b, 0x50, 0x5e, 0xa3, 0xc4, 0x08, 0xc8, 0x76, 0x3b, 0xe0, + 0x0e, 0xe8, 0x90, 0xb7, 0x68, 0x17, 0x77, 0x5c, 0xe9, 0x28, 0xb0, 0xf7, 0xdd, 0xe0, 0x10, 0x2c, + 0x31, 0xec, 0xfe, 0xf6, 0x6d, 0xe2, 0x58, 0x5b, 0x86, 0x6b, 0x34, 0x09, 0x95, 0x71, 0x1f, 0x9e, + 0xea, 0x46, 0x0c, 0x87, 0x13, 0x94, 0xfa, 0xcf, 0xb3, 0x50, 0x6e, 0x10, 0x87, 0x44, 0xfa, 0x36, + 0x00, 0x35, 0xa9, 0x61, 0x92, 0x1d, 0x42, 0x6d, 0xcf, 0xda, 0x25, 0xa6, 0xe7, 0x5a, 0x3e, 0x8f, + 0x88, 0x6c, 0xfd, 0x33, 0x2c, 0xce, 0x6e, 0x0e, 0x60, 0xf1, 0x19, 0x1c, 0xc8, 0x81, 0x72, 0x9b, + 0xf2, 0xdf, 0x76, 0x20, 0x6b, 0x0f, 0x7b, 0x69, 0x5f, 0x49, 0x77, 0xd4, 0x3b, 0x71, 0xd6, 0xfa, + 0xec, 0x49, 0xaf, 0x5a, 0x4e, 0x80, 0x70, 0x52, 0x38, 0xfa, 0x16, 0xcc, 0x78, 0xb4, 0x7d, 0x60, + 0xb8, 0x0d, 0xd2, 0x26, 0xae, 0x45, 0xdc, 0xc0, 0xe7, 0xa7, 0x50, 0xa8, 0x5f, 0x60, 0x15, 0x63, + 0xbb, 0x0f, 0x87, 0x07, 0xa8, 0xd1, 0x7d, 0x98, 0x6d, 0x53, 0xaf, 0x6d, 0x34, 0x0d, 0x26, 0x71, + 0xc7, 0x73, 0x6c, 0xb3, 0xcb, 0xb3, 0x43, 0xb1, 0x7e, 0xe5, 0xa4, 0x57, 0x9d, 0xdd, 0xe9, 0x47, + 0x9e, 0xf6, 0xaa, 0x73, 0xfc, 0xe8, 0x18, 0x24, 0x42, 0xe2, 0x41, 0x31, 0xb1, 0x3b, 0xcc, 0x0d, + 0xbb, 0x43, 0x7d, 0x13, 0x0a, 0x8d, 0x0e, 0xe5, 0x5c, 0xe8, 0x4d, 0x28, 0x58, 0xf2, 0xb7, 0x3c, + 0xf9, 0x97, 0x54, 0xc9, 0x55, 0x34, 0xa7, 0xbd, 0x6a, 0x99, 0x35, 0x09, 0x35, 0x05, 0xc0, 0x21, + 0x8b, 0xfe, 0x00, 0xca, 0xeb, 0x8f, 0xda, 0x1e, 0x0d, 0xd4, 0x9d, 0xbe, 0x02, 0x79, 0xc2, 0x01, + 0x5c, 0x5a, 0x21, 0xaa, 0x13, 0x82, 0x0c, 0x4b, 0x2c, 0xcb, 0xc3, 0xe4, 0x91, 0x61, 0x06, 0x32, + 0x6d, 0x87, 0x79, 0x78, 0x9d, 0x01, 0xb1, 0xc0, 0xe9, 0x9f, 0x87, 0x02, 0x0f, 0x28, 0xff, 0xde, + 0x0a, 0x9a, 0x81, 0x2c, 0x36, 0x8e, 0xb9, 0xd4, 0x49, 0x9c, 0xa5, 0xc6, 0xb1, 0xbe, 0x0d, 0x70, + 0x93, 0x84, 0x8a, 0x57, 0x61, 0x5a, 0x3d, 0xe2, 0x64, 0x6e, 0xf9, 0xac, 0x14, 0x3d, 0x8d, 0x93, + 0x68, 0xdc, 0x4f, 0xaf, 0x3f, 0x80, 0x22, 0xcf, 0x3f, 0x2c, 0x79, 0x47, 0x85, 0x42, 0x7b, 0x4e, + 0xa1, 0x50, 0xd9, 0x3f, 0x33, 0x2c, 0xfb, 0xc7, 0x9e, 0x9b, 0x03, 0x65, 0xc1, 0xab, 0x4a, 0x63, + 0x2a, 0x0d, 0x57, 0xa0, 0xa0, 0xcc, 0x94, 0x5a, 0xc2, 0x96, 0x48, 0x09, 0xc2, 0x21, 0x45, 0x4c, + 0xdb, 0x01, 0x24, 0x72, 0x69, 0x3a, 0x65, 0xb1, 0xba, 0x97, 0x79, 0x7e, 0xdd, 0x8b, 0x69, 0xfa, + 0x09, 0x54, 0x86, 0xf5, 0x51, 0x2f, 0x90, 0xed, 0xd3, 0x9b, 0xa2, 0xbf, 0xa7, 0xc1, 0x4c, 0x5c, + 0x52, 0xfa, 0xeb, 0x4b, 0xaf, 0xe4, 0xfc, 0x3a, 0x1f, 0x3b, 0x91, 0xdf, 0x69, 0x70, 0x21, 0xe1, + 0xda, 0x48, 0x37, 0x3e, 0x82, 0x51, 0xf1, 0xe0, 0xc8, 0x8e, 0x10, 0x1c, 0x7f, 0xcb, 0x40, 0xf9, + 0x96, 0xb1, 0x47, 0x9c, 0x5d, 0xe2, 0x10, 0x33, 0xf0, 0x28, 0xfa, 0x31, 0x94, 0x5a, 0x46, 0x60, + 0x1e, 0x70, 0xa8, 0xea, 0x09, 0x1b, 0xe9, 0x12, 0x68, 0x42, 0x52, 0x6d, 0x2b, 0x12, 0xb3, 0xee, + 0x06, 0xb4, 0x5b, 0x9f, 0x93, 0x26, 0x95, 0x62, 0x18, 0x1c, 0xd7, 0xc6, 0x1b, 0x79, 0xfe, 0xbd, + 0xfe, 0xa8, 0xcd, 0x0a, 0xd6, 0xe8, 0xf3, 0x43, 0xc2, 0x04, 0x4c, 0xde, 0xe9, 0xd8, 0x94, 0xb4, + 0x88, 0x1b, 0x44, 0x8d, 0xfc, 0x56, 0x9f, 0x7c, 0x3c, 0xa0, 0x71, 0xfe, 0x06, 0xcc, 0xf4, 0x1b, + 0xcf, 0xb2, 0xce, 0x21, 0xe9, 0x8a, 0xfb, 0xc2, 0xec, 0x27, 0xba, 0x00, 0xb9, 0x23, 0xc3, 0xe9, + 0xc8, 0xd7, 0x88, 0xc5, 0xc7, 0xf5, 0xcc, 0x35, 0x4d, 0xff, 0x83, 0x06, 0x95, 0x61, 0x86, 0xa0, + 0x2f, 0xc4, 0x04, 0xd5, 0x4b, 0xd2, 0xaa, 0xec, 0xdb, 0xa4, 0x2b, 0xa4, 0xae, 0x43, 0xc1, 0x6b, + 0xb3, 0xd1, 0xcb, 0xa3, 0xf2, 0xd6, 0x2f, 0xab, 0x9b, 0xdc, 0x96, 0xf0, 0xd3, 0x5e, 0xf5, 0x62, + 0x42, 0xbc, 0x42, 0xe0, 0x90, 0x95, 0x65, 0x7f, 0x6e, 0x0f, 0xab, 0x48, 0x61, 0xf6, 0xbf, 0xc7, + 0x21, 0x58, 0x62, 0xf4, 0x3f, 0x69, 0x30, 0xce, 0x5b, 0xb1, 0x07, 0x50, 0x60, 0xe7, 0x67, 0x19, + 0x81, 0xc1, 0xed, 0x4a, 0x3d, 0x04, 0x30, 0xee, 0x2d, 0x12, 0x18, 0x51, 0xb4, 0x29, 0x08, 0x0e, + 0x25, 0x22, 0x0c, 0x39, 0x3b, 0x20, 0x2d, 0x75, 0x91, 0xaf, 0x0e, 0x15, 0x2d, 0x47, 0xd0, 0x1a, + 0x36, 0x8e, 0xd7, 0x1f, 0x05, 0xc4, 0x65, 0x97, 0x11, 0x3d, 0x8d, 0x4d, 0x26, 0x03, 0x0b, 0x51, + 0xfa, 0x7f, 0x34, 0x08, 0x55, 0xb1, 0xe0, 0xf7, 0x89, 0xb3, 0x7f, 0xcb, 0x76, 0x0f, 0xe5, 0xb1, + 0x86, 0xe6, 0xec, 0x4a, 0x38, 0x0e, 0x29, 0xce, 0x2a, 0x0f, 0x99, 0xd1, 0xca, 0x03, 0x53, 0x68, + 0x7a, 0x6e, 0x60, 0xbb, 0x9d, 0x81, 0xd7, 0xb6, 0x26, 0xe1, 0x38, 0xa4, 0x60, 0xcd, 0x0d, 0x25, + 0x2d, 0xc3, 0x76, 0x6d, 0xb7, 0xc9, 0x9c, 0x58, 0xf3, 0x3a, 0x6e, 0xc0, 0xab, 0xbc, 0x6c, 0x6e, + 0xf0, 0x00, 0x16, 0x9f, 0xc1, 0xa1, 0xff, 0x35, 0x0b, 0x25, 0xe6, 0xb3, 0xaa, 0x73, 0x6f, 0x40, + 0xd9, 0x89, 0x47, 0x81, 0xf4, 0xfd, 0xa2, 0x34, 0x25, 0xf9, 0xae, 0x71, 0x92, 0x96, 0x31, 0xf3, + 0x9e, 0x2c, 0x64, 0xce, 0x24, 0x99, 0x37, 0xe2, 0x48, 0x9c, 0xa4, 0x65, 0xd9, 0xeb, 0x98, 0xbd, + 0x0f, 0xd9, 0xed, 0x84, 0x57, 0xf4, 0x1d, 0x06, 0xc4, 0x02, 0x87, 0xb6, 0x60, 0xce, 0x70, 0x1c, + 0xef, 0x98, 0x03, 0xeb, 0x9e, 0x77, 0xd8, 0x32, 0xe8, 0xa1, 0xcf, 0xc7, 0xa8, 0x42, 0xfd, 0x73, + 0x92, 0x65, 0x6e, 0x75, 0x90, 0x04, 0x9f, 0xc5, 0x77, 0xd6, 0xb5, 0x8d, 0x8f, 0x78, 0x6d, 0xd7, + 0x61, 0x8a, 0xc5, 0x97, 0xd7, 0x09, 0x54, 0x87, 0x99, 0xe3, 0x97, 0x80, 0x4e, 0x7a, 0xd5, 0xa9, + 0x3b, 0x09, 0x0c, 0xee, 0xa3, 0x64, 0x2e, 0x3b, 0x76, 0xcb, 0x0e, 0x2a, 0x13, 0x9c, 0x25, 0x74, + 0xf9, 0x16, 0x03, 0x62, 0x81, 0x4b, 0xc4, 0x45, 0xe1, 0xbc, 0xb8, 0xd0, 0x7f, 0x9b, 0x05, 0x24, + 0x5a, 0x62, 0x4b, 0xf4, 0x36, 0x22, 0xd1, 0x5c, 0x86, 0x89, 0x96, 0x6c, 0xa9, 0xb5, 0x64, 0xd6, + 0x57, 0xdd, 0xb4, 0xc2, 0xa3, 0x2d, 0x28, 0x8a, 0x07, 0x1f, 0x05, 0xf1, 0xb2, 0x24, 0x2e, 0x6e, + 0x2b, 0xc4, 0x69, 0xaf, 0x3a, 0x9f, 0x50, 0x13, 0x62, 0xee, 0x74, 0xdb, 0x04, 0x47, 0x12, 0xd8, + 0x14, 0x6d, 0xb4, 0xed, 0xf8, 0xfe, 0xa4, 0x18, 0x4d, 0xd1, 0xd1, 0x24, 0x84, 0x63, 0x54, 0xe8, + 0x2d, 0x18, 0x67, 0x27, 0x25, 0x47, 0xda, 0x2f, 0xa5, 0x4b, 0x1b, 0xec, 0xac, 0xeb, 0x05, 0x56, + 0x35, 0xd9, 0x2f, 0xcc, 0x25, 0x30, 0xed, 0x3c, 0xca, 0x7c, 0x66, 0x96, 0x9c, 0xfd, 0x43, 0xed, + 0x1b, 0x21, 0x06, 0xc7, 0xa8, 0xd0, 0x77, 0xa1, 0xb0, 0x2f, 0xdb, 0x42, 0x7e, 0x31, 0xa9, 0x13, + 0x97, 0x6a, 0x26, 0xc5, 0x08, 0xa7, 0xbe, 0x70, 0x28, 0x4d, 0x7f, 0x07, 0x8a, 0x5b, 0xb6, 0x49, + 0x3d, 0x66, 0x20, 0xbb, 0x12, 0x3f, 0x31, 0x93, 0x84, 0x57, 0xa2, 0xc2, 0x45, 0xe1, 0x59, 0x9c, + 0xb8, 0x86, 0xeb, 0x89, 0xc9, 0x23, 0x17, 0xc5, 0xc9, 0x6d, 0x06, 0xc4, 0x02, 0x77, 0xfd, 0x02, + 0xab, 0xbf, 0xbf, 0x78, 0x52, 0x1d, 0x7b, 0xfc, 0xa4, 0x3a, 0xf6, 0xfe, 0x13, 0x59, 0x8b, 0x4f, + 0x01, 0x60, 0x7b, 0xef, 0x87, 0xc4, 0x14, 0x59, 0x2d, 0xd5, 0xbe, 0x44, 0xad, 0xe9, 0xf8, 0xbe, + 0x24, 0xd3, 0xd7, 0x53, 0xc5, 0x70, 0x38, 0x41, 0x89, 0x96, 0xa1, 0x18, 0x6e, 0x42, 0xe4, 0x45, + 0xcf, 0xaa, 0xc0, 0x09, 0xd7, 0x25, 0x38, 0xa2, 0x49, 0xa4, 0xd8, 0xf1, 0x73, 0x53, 0x6c, 0x1d, + 0xb2, 0x1d, 0xdb, 0xe2, 0xaf, 0xab, 0x58, 0x7f, 0x4d, 0x95, 0xb8, 0xbb, 0x9b, 0x8d, 0xd3, 0x5e, + 0xf5, 0xa5, 0x61, 0x0b, 0xc8, 0xa0, 0xdb, 0x26, 0x7e, 0xed, 0xee, 0x66, 0x03, 0x33, 0xe6, 0xb3, + 0xde, 0x7b, 0x7e, 0xc4, 0xf7, 0x7e, 0x15, 0x40, 0x7a, 0xcd, 0xb8, 0xc5, 0xc3, 0x0d, 0x23, 0xea, + 0x66, 0x88, 0xc1, 0x31, 0x2a, 0xe4, 0xc3, 0xac, 0xc9, 0x46, 0x61, 0xf6, 0x3c, 0xec, 0x16, 0xf1, + 0x03, 0xa3, 0x25, 0x36, 0x44, 0xa3, 0x05, 0xf7, 0x25, 0xa9, 0x66, 0x76, 0xad, 0x5f, 0x18, 0x1e, + 0x94, 0x8f, 0x3c, 0x98, 0xb5, 0xe4, 0x50, 0x17, 0x29, 0x2d, 0x8e, 0xac, 0xf4, 0x22, 0x53, 0xd8, + 0xe8, 0x17, 0x84, 0x07, 0x65, 0xa3, 0x1f, 0xc0, 0xbc, 0x02, 0x0e, 0x4e, 0xd6, 0x7c, 0xc7, 0x93, + 0xad, 0x2f, 0x9c, 0xf4, 0xaa, 0xf3, 0x8d, 0xa1, 0x54, 0xf8, 0x39, 0x12, 0x90, 0x05, 0x79, 0x47, + 0xf4, 0x8f, 0x25, 0x5e, 0xf3, 0xbf, 0x91, 0xce, 0x8b, 0x28, 0xfa, 0x6b, 0xf1, 0xbe, 0x31, 0x9c, + 0x1c, 0x65, 0xcb, 0x28, 0x65, 0xa3, 0x47, 0x50, 0x32, 0x5c, 0xd7, 0x0b, 0x0c, 0x31, 0xeb, 0x4f, + 0x72, 0x55, 0xab, 0x23, 0xab, 0x5a, 0x8d, 0x64, 0xf4, 0xf5, 0xa9, 0x31, 0x0c, 0x8e, 0xab, 0x42, + 0xc7, 0x30, 0xed, 0x1d, 0xbb, 0x84, 0x62, 0xb2, 0x4f, 0x28, 0x71, 0x4d, 0xe2, 0x57, 0xca, 0x5c, + 0xfb, 0x57, 0x53, 0x6a, 0x4f, 0x30, 0x47, 0x21, 0x9d, 0x84, 0xfb, 0xb8, 0x5f, 0x0b, 0xaa, 0xb1, + 0x24, 0xe9, 0x1a, 0x8e, 0xfd, 0x23, 0x42, 0xfd, 0xca, 0x54, 0xb4, 0xc4, 0xdb, 0x08, 0xa1, 0x38, + 0x46, 0x81, 0xbe, 0x06, 0x25, 0xd3, 0xe9, 0xf8, 0x01, 0x11, 0x1b, 0xd5, 0x69, 0xfe, 0x82, 0x42, + 0xff, 0xd6, 0x22, 0x14, 0x8e, 0xd3, 0xa1, 0x0e, 0x94, 0x5b, 0xf1, 0x92, 0x51, 0x99, 0xe5, 0xde, + 0x5d, 0x4b, 0xe7, 0xdd, 0x60, 0x51, 0x8b, 0xfa, 0x8a, 0x04, 0x0e, 0x27, 0xb5, 0xcc, 0x7f, 0x1d, + 0x4a, 0xff, 0x63, 0xcb, 0xcd, 0x5a, 0xf6, 0xfe, 0x7b, 0x1c, 0xa9, 0x65, 0xff, 0x73, 0x06, 0xa6, + 0x92, 0xa7, 0xdf, 0x57, 0x0e, 0x73, 0xa9, 0xca, 0xa1, 0x1a, 0x0e, 0xb5, 0xa1, 0x4b, 0x60, 0x95, + 0xd6, 0xb3, 0x43, 0xd3, 0xba, 0xcc, 0x9e, 0xe3, 0x2f, 0x92, 0x3d, 0x6b, 0x00, 0xac, 0xcf, 0xa0, + 0x9e, 0xe3, 0x10, 0xca, 0x13, 0x67, 0x41, 0x2e, 0x7b, 0x43, 0x28, 0x8e, 0x51, 0xb0, 0x1e, 0x75, + 0xcf, 0xf1, 0xcc, 0x43, 0x7e, 0x04, 0xea, 0xd1, 0xf3, 0x94, 0x59, 0x10, 0x3d, 0x6a, 0x7d, 0x00, + 0x8b, 0xcf, 0xe0, 0xd0, 0xbb, 0x70, 0x71, 0xc7, 0xa0, 0x81, 0x6d, 0x38, 0xd1, 0x03, 0xe3, 0x43, + 0xc0, 0xc3, 0x81, 0x11, 0xe3, 0xb5, 0x51, 0x1f, 0x6a, 0x74, 0xf8, 0x11, 0x2c, 0x1a, 0x33, 0xf4, + 0xbf, 0x6b, 0x70, 0xe9, 0x4c, 0xdd, 0x9f, 0xc0, 0x88, 0xf3, 0x30, 0x39, 0xe2, 0xbc, 0x91, 0x72, + 0xdf, 0x78, 0x96, 0xb5, 0x43, 0x06, 0x9e, 0x09, 0xc8, 0xed, 0xb0, 0x86, 0x58, 0xff, 0xb5, 0x06, + 0x93, 0xfc, 0xd7, 0x28, 0xbb, 0xda, 0x2a, 0xe4, 0xf6, 0x3d, 0xb5, 0x38, 0x2a, 0x88, 0x3f, 0x13, + 0x36, 0x18, 0x00, 0x0b, 0xf8, 0x0b, 0x2c, 0x73, 0xdf, 0xd3, 0x20, 0xb9, 0x25, 0x45, 0x37, 0x44, + 0xfc, 0x6a, 0xe1, 0x1a, 0x73, 0xc4, 0xd8, 0x7d, 0x73, 0xd8, 0x80, 0x36, 0x97, 0x6a, 0x77, 0x77, + 0x05, 0x8a, 0xd8, 0xf3, 0x82, 0x1d, 0x23, 0x38, 0xf0, 0x99, 0xe3, 0x6d, 0xf6, 0x43, 0x9e, 0x0d, + 0x77, 0x9c, 0x63, 0xb0, 0x80, 0xeb, 0xbf, 0xd2, 0xe0, 0xd2, 0xd0, 0xfd, 0x39, 0x4b, 0x01, 0x66, + 0xf8, 0x25, 0x3d, 0x0a, 0xa3, 0x30, 0xa2, 0xc3, 0x31, 0x2a, 0x36, 0x59, 0x25, 0x96, 0xee, 0xfd, + 0x93, 0x55, 0x42, 0x1b, 0x4e, 0xd2, 0xea, 0xff, 0xce, 0x40, 0x7e, 0x37, 0x30, 0x82, 0x8e, 0xff, + 0x7f, 0x8e, 0xd8, 0x57, 0x20, 0xef, 0x73, 0x3d, 0xd2, 0xbc, 0xb0, 0xc6, 0x0a, 0xed, 0x58, 0x62, + 0xf9, 0x34, 0x42, 0x7c, 0xdf, 0x68, 0xaa, 0x8c, 0x15, 0x4d, 0x23, 0x02, 0x8c, 0x15, 0x1e, 0xbd, + 0x0e, 0x79, 0x4a, 0x0c, 0x3f, 0x1c, 0xcc, 0x16, 0x94, 0x48, 0xcc, 0xa1, 0xa7, 0xbd, 0xea, 0xa4, + 0x14, 0xce, 0xbf, 0xb1, 0xa4, 0x46, 0xf7, 0x61, 0xc2, 0x22, 0x81, 0x61, 0x3b, 0x62, 0x1e, 0x4b, + 0xbd, 0xae, 0x17, 0xc2, 0x1a, 0x82, 0xb5, 0x5e, 0x62, 0x36, 0xc9, 0x0f, 0xac, 0x04, 0xb2, 0x6c, + 0x6b, 0x7a, 0x96, 0x18, 0x27, 0x72, 0x51, 0xb6, 0x5d, 0xf3, 0x2c, 0x82, 0x39, 0x46, 0x7f, 0xac, + 0x41, 0x49, 0x48, 0x5a, 0x33, 0x3a, 0x3e, 0x41, 0x2b, 0xa1, 0x17, 0xe2, 0xba, 0x55, 0x27, 0x37, + 0xce, 0x06, 0x8e, 0xd3, 0x5e, 0xb5, 0xc8, 0xc9, 0xf8, 0x24, 0xa2, 0x1c, 0x88, 0x9d, 0x51, 0xe6, + 0x9c, 0x33, 0x7a, 0x19, 0x72, 0xfc, 0xf5, 0xc8, 0xc3, 0x0c, 0xdf, 0x3a, 0x7f, 0x60, 0x58, 0xe0, + 0xf4, 0x8f, 0x32, 0x50, 0x4e, 0x38, 0x97, 0x62, 0x16, 0x08, 0x17, 0x8a, 0x99, 0x14, 0x4b, 0xea, + 0xe1, 0x7f, 0x51, 0xca, 0xda, 0x93, 0x7f, 0x91, 0xda, 0xf3, 0x3d, 0xc8, 0x9b, 0xec, 0x8c, 0xd4, + 0x3f, 0xde, 0x2b, 0xa3, 0x5c, 0x27, 0x3f, 0xdd, 0x28, 0x1a, 0xf9, 0xa7, 0x8f, 0xa5, 0x40, 0x74, + 0x13, 0x66, 0x29, 0x09, 0x68, 0x77, 0x75, 0x3f, 0x20, 0x34, 0x3e, 0xc4, 0xe7, 0xa2, 0x8e, 0x1b, + 0xf7, 0x13, 0xe0, 0x41, 0x1e, 0x7d, 0x0f, 0x26, 0xef, 0x18, 0x7b, 0x4e, 0xf8, 0x07, 0x14, 0x86, + 0xb2, 0xed, 0x9a, 0x4e, 0xc7, 0x22, 0x22, 0x1b, 0xab, 0xec, 0xa5, 0x1e, 0xed, 0x66, 0x1c, 0x79, + 0xda, 0xab, 0xce, 0x25, 0x00, 0xe2, 0x1f, 0x17, 0x9c, 0x14, 0xa1, 0x3b, 0x30, 0xfe, 0x09, 0x4e, + 0x8f, 0xdf, 0x87, 0x62, 0xd4, 0xdf, 0x7f, 0xcc, 0x2a, 0xf5, 0x87, 0x50, 0x60, 0x11, 0xaf, 0xe6, + 0xd2, 0x73, 0x5a, 0x9c, 0x64, 0xe3, 0x94, 0x49, 0xd3, 0x38, 0xe9, 0x2d, 0x28, 0xdf, 0x6d, 0x5b, + 0x2f, 0xf8, 0x17, 0x64, 0x26, 0x75, 0xd5, 0xba, 0x0a, 0xe2, 0xcf, 0x74, 0x56, 0x20, 0x44, 0xe5, + 0x8e, 0x15, 0x88, 0x78, 0xe1, 0x8d, 0xed, 0xca, 0x7f, 0xa6, 0x01, 0xf0, 0xa5, 0xd4, 0xfa, 0x11, + 0x71, 0x03, 0x76, 0x0e, 0x2c, 0xf0, 0xfb, 0xcf, 0x81, 0x67, 0x06, 0x8e, 0x41, 0x77, 0x21, 0xef, + 0x89, 0x68, 0x12, 0x7f, 0x43, 0x8e, 0xb8, 0xf9, 0x0c, 0x1f, 0x81, 0x88, 0x27, 0x2c, 0x85, 0xd5, + 0x97, 0x9e, 0x3e, 0x5b, 0x18, 0xfb, 0xe0, 0xd9, 0xc2, 0xd8, 0x87, 0xcf, 0x16, 0xc6, 0xde, 0x3d, + 0x59, 0xd0, 0x9e, 0x9e, 0x2c, 0x68, 0x1f, 0x9c, 0x2c, 0x68, 0x1f, 0x9e, 0x2c, 0x68, 0x1f, 0x9d, + 0x2c, 0x68, 0x8f, 0xff, 0xb9, 0x30, 0x76, 0x3f, 0x73, 0xb4, 0xf2, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x61, 0xb7, 0xc5, 0x7c, 0xc2, 0x24, 0x00, 0x00, +} + +func (m *APIGroup) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *APIGroup) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *APIGroup) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ServerAddressByClientCIDRs) > 0 { + for iNdEx := len(m.ServerAddressByClientCIDRs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ServerAddressByClientCIDRs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + { + size, err := m.PreferredVersion.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Versions) > 0 { + for iNdEx := len(m.Versions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Versions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *APIGroupList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *APIGroupList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *APIGroupList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Groups[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *APIResource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *APIResource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *APIResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.StorageVersionHash) + copy(dAtA[i:], m.StorageVersionHash) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageVersionHash))) + i-- + dAtA[i] = 0x52 + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x4a + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x42 + if len(m.Categories) > 0 { + for iNdEx := len(m.Categories) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Categories[iNdEx]) + copy(dAtA[i:], m.Categories[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Categories[iNdEx]))) + i-- + dAtA[i] = 0x3a + } + } + i -= len(m.SingularName) + copy(dAtA[i:], m.SingularName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SingularName))) + i-- + dAtA[i] = 0x32 + if len(m.ShortNames) > 0 { + for iNdEx := len(m.ShortNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ShortNames[iNdEx]) + copy(dAtA[i:], m.ShortNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShortNames[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if m.Verbs != nil { + { + size, err := m.Verbs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x1a + i-- + if m.Namespaced { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *APIResourceList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *APIResourceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *APIResourceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.APIResources) > 0 { + for iNdEx := len(m.APIResources) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.APIResources[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.GroupVersion) + copy(dAtA[i:], m.GroupVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupVersion))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *APIVersions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *APIGroup) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *APIVersions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *APIVersions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - if len(m.Versions) > 0 { - for _, msg := range m.Versions { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if len(m.ServerAddressByClientCIDRs) > 0 { + for iNdEx := len(m.ServerAddressByClientCIDRs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ServerAddressByClientCIDRs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PreferredVersion.Size())) - n1, err := m.PreferredVersion.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - if len(m.ServerAddressByClientCIDRs) > 0 { - for _, msg := range m.ServerAddressByClientCIDRs { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if len(m.Versions) > 0 { + for iNdEx := len(m.Versions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Versions[iNdEx]) + copy(dAtA[i:], m.Versions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Versions[iNdEx]))) + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } -func (m *APIGroupList) Marshal() (dAtA []byte, err error) { +func (m *CreateOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *APIGroupList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *CreateOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CreateOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Groups) > 0 { - for _, msg := range m.Groups { + i -= len(m.FieldManager) + copy(dAtA[i:], m.FieldManager) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i-- + dAtA[i] = 0x1a + if len(m.DryRun) > 0 { + for iNdEx := len(m.DryRun) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DryRun[iNdEx]) + copy(dAtA[i:], m.DryRun[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DryRun[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n } } - return i, nil + return len(dAtA) - i, nil } -func (m *APIResource) Marshal() (dAtA []byte, err error) { +func (m *DeleteOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *APIResource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *DeleteOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeleteOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x10 - i++ - if m.Namespaced { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.DryRun) > 0 { + for iNdEx := len(m.DryRun) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DryRun[iNdEx]) + copy(dAtA[i:], m.DryRun[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DryRun[iNdEx]))) + i-- + dAtA[i] = 0x2a + } } - i++ - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - if m.Verbs != nil { + if m.PropagationPolicy != nil { + i -= len(*m.PropagationPolicy) + copy(dAtA[i:], *m.PropagationPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PropagationPolicy))) + i-- dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Verbs.Size())) - n2, err := m.Verbs.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 } - if len(m.ShortNames) > 0 { - for _, s := range m.ShortNames { - dAtA[i] = 0x2a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.OrphanDependents != nil { + i-- + if *m.OrphanDependents { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x18 } - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SingularName))) - i += copy(dAtA[i:], m.SingularName) - if len(m.Categories) > 0 { - for _, s := range m.Categories { - dAtA[i] = 0x3a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + if m.Preconditions != nil { + { + size, err := m.Preconditions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - return i, nil + if m.GracePeriodSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.GracePeriodSeconds)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } -func (m *APIResourceList) Marshal() (dAtA []byte, err error) { +func (m *Duration) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *APIResourceList) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Duration) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Duration) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupVersion))) - i += copy(dAtA[i:], m.GroupVersion) - if len(m.APIResources) > 0 { - for _, msg := range m.APIResources { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil + i = encodeVarintGenerated(dAtA, i, uint64(m.Duration)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *APIVersions) Marshal() (dAtA []byte, err error) { +func (m *ExportOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *APIVersions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ExportOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExportOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Versions) > 0 { - for _, s := range m.Versions { - dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } + i-- + if m.Exact { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - if len(m.ServerAddressByClientCIDRs) > 0 { - for _, msg := range m.ServerAddressByClientCIDRs { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } + i-- + dAtA[i] = 0x10 + i-- + if m.Export { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } - return i, nil + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func (m *DeleteOptions) Marshal() (dAtA []byte, err error) { +func (m *FieldsV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *DeleteOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *FieldsV1) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FieldsV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.GracePeriodSeconds != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.GracePeriodSeconds)) - } - if m.Preconditions != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Preconditions.Size())) - n3, err := m.Preconditions.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.OrphanDependents != nil { - dAtA[i] = 0x18 - i++ - if *m.OrphanDependents { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } - if m.PropagationPolicy != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PropagationPolicy))) - i += copy(dAtA[i:], *m.PropagationPolicy) + if m.Raw != nil { + i -= len(m.Raw) + copy(dAtA[i:], m.Raw) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Raw))) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } -func (m *Duration) Marshal() (dAtA []byte, err error) { +func (m *GetOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Duration) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GetOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Duration)) - return i, nil + i -= len(m.ResourceVersion) + copy(dAtA[i:], m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ExportOptions) Marshal() (dAtA []byte, err error) { +func (m *GroupKind) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ExportOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GroupKind) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupKind) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - if m.Export { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GroupResource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - i++ - dAtA[i] = 0x10 - i++ - if m.Exact { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + return dAtA[:n], nil +} + +func (m *GroupResource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Resource) + copy(dAtA[i:], m.Resource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) + i-- + dAtA[i] = 0x12 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GroupVersion) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - i++ - return i, nil + return dAtA[:n], nil } -func (m *GetOptions) Marshal() (dAtA []byte, err error) { +func (m *GroupVersion) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupVersion) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GroupVersionForDiscovery) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GetOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GroupVersionForDiscovery) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupVersionForDiscovery) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + i -= len(m.GroupVersion) + copy(dAtA[i:], m.GroupVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupVersion))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) - i += copy(dAtA[i:], m.ResourceVersion) - dAtA[i] = 0x10 - i++ - if m.IncludeUninitialized { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - return i, nil + return len(dAtA) - i, nil } -func (m *GroupKind) Marshal() (dAtA []byte, err error) { +func (m *GroupVersionKind) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GroupKind) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GroupVersionKind) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupVersionKind) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x12 - i++ + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *GroupResource) Marshal() (dAtA []byte, err error) { +func (m *GroupVersionResource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GroupResource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *GroupVersionResource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupVersionResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x12 - i++ + i -= len(m.Resource) + copy(dAtA[i:], m.Resource) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) - i += copy(dAtA[i:], m.Resource) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *GroupVersion) Marshal() (dAtA []byte, err error) { +func (m *LabelSelector) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GroupVersion) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LabelSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LabelSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - return i, nil + if len(m.MatchExpressions) > 0 { + for iNdEx := len(m.MatchExpressions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchExpressions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.MatchLabels) > 0 { + keysForMatchLabels := make([]string, 0, len(m.MatchLabels)) + for k := range m.MatchLabels { + keysForMatchLabels = append(keysForMatchLabels, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) + for iNdEx := len(keysForMatchLabels) - 1; iNdEx >= 0; iNdEx-- { + v := m.MatchLabels[string(keysForMatchLabels[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForMatchLabels[iNdEx]) + copy(dAtA[i:], keysForMatchLabels[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMatchLabels[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } -func (m *GroupVersionForDiscovery) Marshal() (dAtA []byte, err error) { +func (m *LabelSelectorRequirement) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GroupVersionForDiscovery) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *LabelSelectorRequirement) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LabelSelectorRequirement) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupVersion))) - i += copy(dAtA[i:], m.GroupVersion) + if len(m.Values) > 0 { + for iNdEx := len(m.Values) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Values[iNdEx]) + copy(dAtA[i:], m.Values[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - return i, nil + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *GroupVersionKind) Marshal() (dAtA []byte, err error) { +func (m *List) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GroupVersionKind) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *List) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *List) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - return i, nil + return len(dAtA) - i, nil } -func (m *GroupVersionResource) Marshal() (dAtA []byte, err error) { +func (m *ListMeta) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *GroupVersionResource) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ListMeta) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ListMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) - i += copy(dAtA[i:], m.Version) + if m.RemainingItemCount != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RemainingItemCount)) + i-- + dAtA[i] = 0x20 + } + i -= len(m.Continue) + copy(dAtA[i:], m.Continue) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Continue))) + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) - i += copy(dAtA[i:], m.Resource) - return i, nil + i -= len(m.ResourceVersion) + copy(dAtA[i:], m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i-- + dAtA[i] = 0x12 + i -= len(m.SelfLink) + copy(dAtA[i:], m.SelfLink) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SelfLink))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *Initializer) Marshal() (dAtA []byte, err error) { +func (m *ListOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Initializer) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ListOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ListOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + i-- + if m.AllowWatchBookmarks { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + i -= len(m.Continue) + copy(dAtA[i:], m.Continue) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Continue))) + i-- + dAtA[i] = 0x42 + i = encodeVarintGenerated(dAtA, i, uint64(m.Limit)) + i-- + dAtA[i] = 0x38 + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x28 + } + i -= len(m.ResourceVersion) + copy(dAtA[i:], m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i-- + dAtA[i] = 0x22 + i-- + if m.Watch { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.FieldSelector) + copy(dAtA[i:], m.FieldSelector) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldSelector))) + i-- + dAtA[i] = 0x12 + i -= len(m.LabelSelector) + copy(dAtA[i:], m.LabelSelector) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.LabelSelector))) + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - return i, nil + return len(dAtA) - i, nil } -func (m *Initializers) Marshal() (dAtA []byte, err error) { +func (m *ManagedFieldsEntry) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Initializers) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ManagedFieldsEntry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ManagedFieldsEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Pending) > 0 { - for _, msg := range m.Pending { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + if m.FieldsV1 != nil { + { + size, err := m.FieldsV1.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x3a } - if m.Result != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Result.Size())) - n4, err := m.Result.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + i -= len(m.FieldsType) + copy(dAtA[i:], m.FieldsType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldsType))) + i-- + dAtA[i] = 0x32 + if m.Time != nil { + { + size, err := m.Time.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n4 + i-- + dAtA[i] = 0x22 } - return i, nil + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x1a + i -= len(m.Operation) + copy(dAtA[i:], m.Operation) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operation))) + i-- + dAtA[i] = 0x12 + i -= len(m.Manager) + copy(dAtA[i:], m.Manager) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Manager))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *LabelSelector) Marshal() (dAtA []byte, err error) { +func (m *ObjectMeta) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *LabelSelector) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *ObjectMeta) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ObjectMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.MatchLabels) > 0 { - keysForMatchLabels := make([]string, 0, len(m.MatchLabels)) - for k := range m.MatchLabels { - keysForMatchLabels = append(keysForMatchLabels, string(k)) + if len(m.ManagedFields) > 0 { + for iNdEx := len(m.ManagedFields) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ManagedFields[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a } - github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) - for _, k := range keysForMatchLabels { - dAtA[i] = 0xa - i++ - v := m.MatchLabels[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ + } + i -= len(m.ClusterName) + copy(dAtA[i:], m.ClusterName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClusterName))) + i-- + dAtA[i] = 0x7a + if len(m.Finalizers) > 0 { + for iNdEx := len(m.Finalizers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Finalizers[iNdEx]) + copy(dAtA[i:], m.Finalizers[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Finalizers[iNdEx]))) + i-- + dAtA[i] = 0x72 + } + } + if len(m.OwnerReferences) > 0 { + for iNdEx := len(m.OwnerReferences) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.OwnerReferences[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + } + if len(m.Annotations) > 0 { + keysForAnnotations := make([]string, 0, len(m.Annotations)) + for k := range m.Annotations { + keysForAnnotations = append(keysForAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + for iNdEx := len(keysForAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.Annotations[string(keysForAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) + i-- + dAtA[i] = 0x12 + i -= len(keysForAnnotations[iNdEx]) + copy(dAtA[i:], keysForAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x62 } } - if len(m.MatchExpressions) > 0 { - for _, msg := range m.MatchExpressions { + if len(m.Labels) > 0 { + keysForLabels := make([]string, 0, len(m.Labels)) + for k := range m.Labels { + keysForLabels = append(keysForLabels, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + for iNdEx := len(keysForLabels) - 1; iNdEx >= 0; iNdEx-- { + v := m.Labels[string(keysForLabels[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) + i -= len(keysForLabels[iNdEx]) + copy(dAtA[i:], keysForLabels[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForLabels[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x5a + } + } + if m.DeletionGracePeriodSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.DeletionGracePeriodSeconds)) + i-- + dAtA[i] = 0x50 + } + if m.DeletionTimestamp != nil { + { + size, err := m.DeletionTimestamp.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x4a } - return i, nil -} - -func (m *LabelSelectorRequirement) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *LabelSelectorRequirement) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) - i += copy(dAtA[i:], m.Key) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) - i += copy(dAtA[i:], m.Operator) - if len(m.Values) > 0 { - for _, s := range m.Values { - dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) + { + size, err := m.CreationTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x42 + i = encodeVarintGenerated(dAtA, i, uint64(m.Generation)) + i-- + dAtA[i] = 0x38 + i -= len(m.ResourceVersion) + copy(dAtA[i:], m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i-- + dAtA[i] = 0x32 + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x2a + i -= len(m.SelfLink) + copy(dAtA[i:], m.SelfLink) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SelfLink))) + i-- + dAtA[i] = 0x22 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x1a + i -= len(m.GenerateName) + copy(dAtA[i:], m.GenerateName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GenerateName))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *List) Marshal() (dAtA []byte, err error) { +func (m *OwnerReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *List) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *OwnerReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OwnerReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n5, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.BlockOwnerDeletion != nil { + i-- + if *m.BlockOwnerDeletion { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 } - i += n5 - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n + if m.Controller != nil { + i-- + if *m.Controller { + dAtA[i] = 1 + } else { + dAtA[i] = 0 } + i-- + dAtA[i] = 0x30 } - return i, nil + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x2a + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ListMeta) Marshal() (dAtA []byte, err error) { +func (m *PartialObjectMetadata) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ListMeta) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PartialObjectMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PartialObjectMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SelfLink))) - i += copy(dAtA[i:], m.SelfLink) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) - i += copy(dAtA[i:], m.ResourceVersion) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Continue))) - i += copy(dAtA[i:], m.Continue) - return i, nil + return len(dAtA) - i, nil } -func (m *ListOptions) Marshal() (dAtA []byte, err error) { +func (m *PartialObjectMetadataList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ListOptions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PartialObjectMetadataList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PartialObjectMetadataList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.LabelSelector))) - i += copy(dAtA[i:], m.LabelSelector) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldSelector))) - i += copy(dAtA[i:], m.FieldSelector) - dAtA[i] = 0x18 - i++ - if m.Watch { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) - i += copy(dAtA[i:], m.ResourceVersion) - if m.TimeoutSeconds != nil { - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } - dAtA[i] = 0x30 - i++ - if m.IncludeUninitialized { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i++ - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Limit)) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Continue))) - i += copy(dAtA[i:], m.Continue) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func (m *ObjectMeta) Marshal() (dAtA []byte, err error) { +func (m *Patch) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *ObjectMeta) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Patch) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Patch) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.GenerateName))) - i += copy(dAtA[i:], m.GenerateName) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) - i += copy(dAtA[i:], m.Namespace) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.SelfLink))) - i += copy(dAtA[i:], m.SelfLink) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) - i += copy(dAtA[i:], m.ResourceVersion) - dAtA[i] = 0x38 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Generation)) - dAtA[i] = 0x42 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CreationTimestamp.Size())) - n6, err := m.CreationTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - if m.DeletionTimestamp != nil { - dAtA[i] = 0x4a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.DeletionTimestamp.Size())) - n7, err := m.DeletionTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n7 - } - if m.DeletionGracePeriodSeconds != nil { - dAtA[i] = 0x50 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.DeletionGracePeriodSeconds)) - } - if len(m.Labels) > 0 { - keysForLabels := make([]string, 0, len(m.Labels)) - for k := range m.Labels { - keysForLabels = append(keysForLabels, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - for _, k := range keysForLabels { - dAtA[i] = 0x5a - i++ - v := m.Labels[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if len(m.Annotations) > 0 { - keysForAnnotations := make([]string, 0, len(m.Annotations)) - for k := range m.Annotations { - keysForAnnotations = append(keysForAnnotations, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) - for _, k := range keysForAnnotations { - dAtA[i] = 0x62 - i++ - v := m.Annotations[string(k)] - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i += copy(dAtA[i:], v) - } - } - if len(m.OwnerReferences) > 0 { - for _, msg := range m.OwnerReferences { - dAtA[i] = 0x6a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - if len(m.Finalizers) > 0 { - for _, s := range m.Finalizers { - dAtA[i] = 0x72 - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } - dAtA[i] = 0x7a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClusterName))) - i += copy(dAtA[i:], m.ClusterName) - if m.Initializers != nil { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Initializers.Size())) - n8, err := m.Initializers.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n8 - } - return i, nil + return len(dAtA) - i, nil } -func (m *OwnerReference) Marshal() (dAtA []byte, err error) { +func (m *PatchOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *OwnerReference) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *PatchOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PatchOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) + i -= len(m.FieldManager) + copy(dAtA[i:], m.FieldManager) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - if m.Controller != nil { - dAtA[i] = 0x30 - i++ - if *m.Controller { + if m.Force != nil { + i-- + if *m.Force { dAtA[i] = 1 } else { dAtA[i] = 0 } - i++ + i-- + dAtA[i] = 0x10 } - if m.BlockOwnerDeletion != nil { - dAtA[i] = 0x38 - i++ - if *m.BlockOwnerDeletion { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.DryRun) > 0 { + for iNdEx := len(m.DryRun) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DryRun[iNdEx]) + copy(dAtA[i:], m.DryRun[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DryRun[iNdEx]))) + i-- + dAtA[i] = 0xa } - i++ } - return i, nil + return len(dAtA) - i, nil } -func (m *Patch) Marshal() (dAtA []byte, err error) { +func (m *Preconditions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } -func (m *Patch) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - return i, nil -} - -func (m *Preconditions) Marshal() (dAtA []byte, err error) { +func (m *Preconditions) MarshalTo(dAtA []byte) (int, error) { size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Preconditions) MarshalTo(dAtA []byte) (int, error) { - var i int +func (m *Preconditions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.ResourceVersion != nil { + i -= len(*m.ResourceVersion) + copy(dAtA[i:], *m.ResourceVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ResourceVersion))) + i-- + dAtA[i] = 0x12 + } if m.UID != nil { - dAtA[i] = 0xa - i++ + i -= len(*m.UID) + copy(dAtA[i:], *m.UID) i = encodeVarintGenerated(dAtA, i, uint64(len(*m.UID))) - i += copy(dAtA[i:], *m.UID) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *RootPaths) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1376,32 +2949,31 @@ } func (m *RootPaths) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RootPaths) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.Paths) > 0 { - for _, s := range m.Paths { + for iNdEx := len(m.Paths) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Paths[iNdEx]) + copy(dAtA[i:], m.Paths[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Paths[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } func (m *ServerAddressByClientCIDR) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1409,25 +2981,32 @@ } func (m *ServerAddressByClientCIDR) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServerAddressByClientCIDR) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClientCIDR))) - i += copy(dAtA[i:], m.ClientCIDR) - dAtA[i] = 0x12 - i++ + i -= len(m.ServerAddress) + copy(dAtA[i:], m.ServerAddress) i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServerAddress))) - i += copy(dAtA[i:], m.ServerAddress) - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.ClientCIDR) + copy(dAtA[i:], m.ClientCIDR) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClientCIDR))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Status) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1435,50 +3014,62 @@ } func (m *Status) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Status) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n9, err := m.ListMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n9 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) - i += copy(dAtA[i:], m.Status) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) - i += copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x30 if m.Details != nil { + { + size, err := m.Details.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x2a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Details.Size())) - n10, err := m.Details.MarshalTo(dAtA[i:]) + } + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } - i += n10 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - dAtA[i] = 0x30 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Code)) - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatusCause) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1486,29 +3077,37 @@ } func (m *StatusCause) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatusCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) - dAtA[i] = 0x1a - i++ + i -= len(m.Field) + copy(dAtA[i:], m.Field) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Field))) - i += copy(dAtA[i:], m.Field) - return i, nil + i-- + dAtA[i] = 0x1a + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *StatusDetails) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1516,48 +3115,87 @@ } func (m *StatusDetails) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StatusDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) - i += copy(dAtA[i:], m.Name) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) - i += copy(dAtA[i:], m.Group) - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x32 + i = encodeVarintGenerated(dAtA, i, uint64(m.RetryAfterSeconds)) + i-- + dAtA[i] = 0x28 if len(m.Causes) > 0 { - for _, msg := range m.Causes { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Causes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Causes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x22 } } - dAtA[i] = 0x28 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RetryAfterSeconds)) - dAtA[i] = 0x32 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) - i += copy(dAtA[i:], m.UID) - return i, nil + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x1a + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TableOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TableOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TableOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.IncludeObject) + copy(dAtA[i:], m.IncludeObject) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.IncludeObject))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Timestamp) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1565,23 +3203,28 @@ } func (m *Timestamp) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Timestamp) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Seconds)) - dAtA[i] = 0x10 - i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Nanos)) - return i, nil + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Seconds)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } func (m *TypeMeta) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1589,25 +3232,69 @@ } func (m *TypeMeta) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TypeMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *UpdateOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UpdateOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.FieldManager) + copy(dAtA[i:], m.FieldManager) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - return i, nil + if len(m.DryRun) > 0 { + for iNdEx := len(m.DryRun) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DryRun[iNdEx]) + copy(dAtA[i:], m.DryRun[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DryRun[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil } func (m Verbs) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1615,32 +3302,31 @@ } func (m Verbs) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m Verbs) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m) > 0 { - for _, s := range m { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- dAtA[i] = 0xa - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - return i, nil + return len(dAtA) - i, nil } func (m *WatchEvent) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -1648,53 +3334,48 @@ } func (m *WatchEvent) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WatchEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Object.Size())) - n11, err := m.Object.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Object.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i += n11 - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *APIGroup) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1717,6 +3398,9 @@ } func (m *APIGroupList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Groups) > 0 { @@ -1729,6 +3413,9 @@ } func (m *APIResource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -1758,10 +3445,15 @@ n += 1 + l + sovGenerated(uint64(l)) l = len(m.Version) n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StorageVersionHash) + n += 1 + l + sovGenerated(uint64(l)) return n } func (m *APIResourceList) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.GroupVersion) @@ -1776,6 +3468,9 @@ } func (m *APIVersions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Versions) > 0 { @@ -1793,7 +3488,27 @@ return n } +func (m *CreateOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *DeleteOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.GracePeriodSeconds != nil { @@ -1810,10 +3525,19 @@ l = len(*m.PropagationPolicy) n += 1 + l + sovGenerated(uint64(l)) } + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } func (m *Duration) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Duration)) @@ -1821,6 +3545,9 @@ } func (m *ExportOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 2 @@ -1828,16 +3555,34 @@ return n } +func (m *FieldsV1) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Raw != nil { + l = len(m.Raw) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *GetOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.ResourceVersion) n += 1 + l + sovGenerated(uint64(l)) - n += 2 return n } func (m *GroupKind) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Group) @@ -1848,6 +3593,9 @@ } func (m *GroupResource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Group) @@ -1858,6 +3606,9 @@ } func (m *GroupVersion) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Group) @@ -1868,6 +3619,9 @@ } func (m *GroupVersionForDiscovery) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.GroupVersion) @@ -1878,6 +3632,9 @@ } func (m *GroupVersionKind) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Group) @@ -1890,6 +3647,9 @@ } func (m *GroupVersionResource) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Group) @@ -1901,31 +3661,10 @@ return n } -func (m *Initializer) Size() (n int) { - var l int - _ = l - l = len(m.Name) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *Initializers) Size() (n int) { - var l int - _ = l - if len(m.Pending) > 0 { - for _, e := range m.Pending { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - if m.Result != nil { - l = m.Result.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - func (m *LabelSelector) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.MatchLabels) > 0 { @@ -1946,6 +3685,9 @@ } func (m *LabelSelectorRequirement) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Key) @@ -1962,6 +3704,9 @@ } func (m *List) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -1976,6 +3721,9 @@ } func (m *ListMeta) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.SelfLink) @@ -1984,10 +3732,16 @@ n += 1 + l + sovGenerated(uint64(l)) l = len(m.Continue) n += 1 + l + sovGenerated(uint64(l)) + if m.RemainingItemCount != nil { + n += 1 + sovGenerated(uint64(*m.RemainingItemCount)) + } return n } func (m *ListOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.LabelSelector) @@ -2000,14 +3754,42 @@ if m.TimeoutSeconds != nil { n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) } - n += 2 n += 1 + sovGenerated(uint64(m.Limit)) l = len(m.Continue) n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *ManagedFieldsEntry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Manager) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operation) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + if m.Time != nil { + l = m.Time.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.FieldsType) + n += 1 + l + sovGenerated(uint64(l)) + if m.FieldsV1 != nil { + l = m.FieldsV1.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *ObjectMeta) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -2062,14 +3844,19 @@ } l = len(m.ClusterName) n += 1 + l + sovGenerated(uint64(l)) - if m.Initializers != nil { - l = m.Initializers.Size() - n += 2 + l + sovGenerated(uint64(l)) + if len(m.ManagedFields) > 0 { + for _, e := range m.ManagedFields { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } } return n } func (m *OwnerReference) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -2089,23 +3876,84 @@ return n } +func (m *PartialObjectMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PartialObjectMetadataList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *Patch) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *PatchOptions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Force != nil { + n += 2 + } + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) return n } func (m *Preconditions) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.UID != nil { l = len(*m.UID) n += 1 + l + sovGenerated(uint64(l)) } + if m.ResourceVersion != nil { + l = len(*m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + } return n } func (m *RootPaths) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m.Paths) > 0 { @@ -2118,6 +3966,9 @@ } func (m *ServerAddressByClientCIDR) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.ClientCIDR) @@ -2128,6 +3979,9 @@ } func (m *Status) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.ListMeta.Size() @@ -2147,6 +4001,9 @@ } func (m *StatusCause) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -2159,6 +4016,9 @@ } func (m *StatusDetails) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Name) @@ -2179,7 +4039,21 @@ return n } +func (m *TableOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.IncludeObject) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *Timestamp) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Seconds)) @@ -2188,6 +4062,9 @@ } func (m *TypeMeta) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Kind) @@ -2197,7 +4074,27 @@ return n } +func (m *UpdateOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m Verbs) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if len(m) > 0 { @@ -2210,6 +4107,9 @@ } func (m *WatchEvent) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Type) @@ -2220,14 +4120,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -2236,11 +4129,21 @@ if this == nil { return "nil" } + repeatedStringForVersions := "[]GroupVersionForDiscovery{" + for _, f := range this.Versions { + repeatedStringForVersions += strings.Replace(strings.Replace(f.String(), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + "," + } + repeatedStringForVersions += "}" + repeatedStringForServerAddressByClientCIDRs := "[]ServerAddressByClientCIDR{" + for _, f := range this.ServerAddressByClientCIDRs { + repeatedStringForServerAddressByClientCIDRs += strings.Replace(strings.Replace(f.String(), "ServerAddressByClientCIDR", "ServerAddressByClientCIDR", 1), `&`, ``, 1) + "," + } + repeatedStringForServerAddressByClientCIDRs += "}" s := strings.Join([]string{`&APIGroup{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Versions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Versions), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + `,`, + `Versions:` + repeatedStringForVersions + `,`, `PreferredVersion:` + strings.Replace(strings.Replace(this.PreferredVersion.String(), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + `,`, - `ServerAddressByClientCIDRs:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServerAddressByClientCIDRs), "ServerAddressByClientCIDR", "ServerAddressByClientCIDR", 1), `&`, ``, 1) + `,`, + `ServerAddressByClientCIDRs:` + repeatedStringForServerAddressByClientCIDRs + `,`, `}`, }, "") return s @@ -2249,8 +4152,13 @@ if this == nil { return "nil" } + repeatedStringForGroups := "[]APIGroup{" + for _, f := range this.Groups { + repeatedStringForGroups += strings.Replace(strings.Replace(f.String(), "APIGroup", "APIGroup", 1), `&`, ``, 1) + "," + } + repeatedStringForGroups += "}" s := strings.Join([]string{`&APIGroupList{`, - `Groups:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Groups), "APIGroup", "APIGroup", 1), `&`, ``, 1) + `,`, + `Groups:` + repeatedStringForGroups + `,`, `}`, }, "") return s @@ -2269,6 +4177,7 @@ `Categories:` + fmt.Sprintf("%v", this.Categories) + `,`, `Group:` + fmt.Sprintf("%v", this.Group) + `,`, `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `StorageVersionHash:` + fmt.Sprintf("%v", this.StorageVersionHash) + `,`, `}`, }, "") return s @@ -2277,9 +4186,25 @@ if this == nil { return "nil" } + repeatedStringForAPIResources := "[]APIResource{" + for _, f := range this.APIResources { + repeatedStringForAPIResources += strings.Replace(strings.Replace(f.String(), "APIResource", "APIResource", 1), `&`, ``, 1) + "," + } + repeatedStringForAPIResources += "}" s := strings.Join([]string{`&APIResourceList{`, `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, - `APIResources:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.APIResources), "APIResource", "APIResource", 1), `&`, ``, 1) + `,`, + `APIResources:` + repeatedStringForAPIResources + `,`, + `}`, + }, "") + return s +} +func (this *CreateOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CreateOptions{`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, `}`, }, "") return s @@ -2290,9 +4215,10 @@ } s := strings.Join([]string{`&DeleteOptions{`, `GracePeriodSeconds:` + valueToStringGenerated(this.GracePeriodSeconds) + `,`, - `Preconditions:` + strings.Replace(fmt.Sprintf("%v", this.Preconditions), "Preconditions", "Preconditions", 1) + `,`, + `Preconditions:` + strings.Replace(this.Preconditions.String(), "Preconditions", "Preconditions", 1) + `,`, `OrphanDependents:` + valueToStringGenerated(this.OrphanDependents) + `,`, `PropagationPolicy:` + valueToStringGenerated(this.PropagationPolicy) + `,`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, `}`, }, "") return s @@ -2318,45 +4244,33 @@ }, "") return s } -func (this *GetOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&GetOptions{`, - `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, - `IncludeUninitialized:` + fmt.Sprintf("%v", this.IncludeUninitialized) + `,`, - `}`, - }, "") - return s -} -func (this *GroupVersionForDiscovery) String() string { +func (this *FieldsV1) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&GroupVersionForDiscovery{`, - `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, - `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + s := strings.Join([]string{`&FieldsV1{`, + `Raw:` + valueToStringGenerated(this.Raw) + `,`, `}`, }, "") return s } -func (this *Initializer) String() string { +func (this *GetOptions) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&Initializer{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + s := strings.Join([]string{`&GetOptions{`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, `}`, }, "") return s } -func (this *Initializers) String() string { +func (this *GroupVersionForDiscovery) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&Initializers{`, - `Pending:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Pending), "Initializer", "Initializer", 1), `&`, ``, 1) + `,`, - `Result:` + strings.Replace(fmt.Sprintf("%v", this.Result), "Status", "Status", 1) + `,`, + s := strings.Join([]string{`&GroupVersionForDiscovery{`, + `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, + `Version:` + fmt.Sprintf("%v", this.Version) + `,`, `}`, }, "") return s @@ -2365,6 +4279,11 @@ if this == nil { return "nil" } + repeatedStringForMatchExpressions := "[]LabelSelectorRequirement{" + for _, f := range this.MatchExpressions { + repeatedStringForMatchExpressions += strings.Replace(strings.Replace(f.String(), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchExpressions += "}" keysForMatchLabels := make([]string, 0, len(this.MatchLabels)) for k := range this.MatchLabels { keysForMatchLabels = append(keysForMatchLabels, k) @@ -2377,7 +4296,7 @@ mapStringForMatchLabels += "}" s := strings.Join([]string{`&LabelSelector{`, `MatchLabels:` + mapStringForMatchLabels + `,`, - `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + `,`, + `MatchExpressions:` + repeatedStringForMatchExpressions + `,`, `}`, }, "") return s @@ -2398,9 +4317,14 @@ if this == nil { return "nil" } + repeatedStringForItems := "[]RawExtension{" + for _, f := range this.Items { + repeatedStringForItems += fmt.Sprintf("%v", f) + "," + } + repeatedStringForItems += "}" s := strings.Join([]string{`&List{`, `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "ListMeta", 1), `&`, ``, 1) + `,`, - `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, `}`, }, "") return s @@ -2413,6 +4337,7 @@ `SelfLink:` + fmt.Sprintf("%v", this.SelfLink) + `,`, `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, `Continue:` + fmt.Sprintf("%v", this.Continue) + `,`, + `RemainingItemCount:` + valueToStringGenerated(this.RemainingItemCount) + `,`, `}`, }, "") return s @@ -2427,9 +4352,24 @@ `Watch:` + fmt.Sprintf("%v", this.Watch) + `,`, `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, - `IncludeUninitialized:` + fmt.Sprintf("%v", this.IncludeUninitialized) + `,`, `Limit:` + fmt.Sprintf("%v", this.Limit) + `,`, `Continue:` + fmt.Sprintf("%v", this.Continue) + `,`, + `AllowWatchBookmarks:` + fmt.Sprintf("%v", this.AllowWatchBookmarks) + `,`, + `}`, + }, "") + return s +} +func (this *ManagedFieldsEntry) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ManagedFieldsEntry{`, + `Manager:` + fmt.Sprintf("%v", this.Manager) + `,`, + `Operation:` + fmt.Sprintf("%v", this.Operation) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Time:` + strings.Replace(fmt.Sprintf("%v", this.Time), "Time", "Time", 1) + `,`, + `FieldsType:` + fmt.Sprintf("%v", this.FieldsType) + `,`, + `FieldsV1:` + strings.Replace(this.FieldsV1.String(), "FieldsV1", "FieldsV1", 1) + `,`, `}`, }, "") return s @@ -2438,6 +4378,16 @@ if this == nil { return "nil" } + repeatedStringForOwnerReferences := "[]OwnerReference{" + for _, f := range this.OwnerReferences { + repeatedStringForOwnerReferences += strings.Replace(strings.Replace(f.String(), "OwnerReference", "OwnerReference", 1), `&`, ``, 1) + "," + } + repeatedStringForOwnerReferences += "}" + repeatedStringForManagedFields := "[]ManagedFieldsEntry{" + for _, f := range this.ManagedFields { + repeatedStringForManagedFields += strings.Replace(strings.Replace(f.String(), "ManagedFieldsEntry", "ManagedFieldsEntry", 1), `&`, ``, 1) + "," + } + repeatedStringForManagedFields += "}" keysForLabels := make([]string, 0, len(this.Labels)) for k := range this.Labels { keysForLabels = append(keysForLabels, k) @@ -2466,15 +4416,15 @@ `UID:` + fmt.Sprintf("%v", this.UID) + `,`, `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, - `CreationTimestamp:` + strings.Replace(strings.Replace(this.CreationTimestamp.String(), "Time", "Time", 1), `&`, ``, 1) + `,`, + `CreationTimestamp:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.CreationTimestamp), "Time", "Time", 1), `&`, ``, 1) + `,`, `DeletionTimestamp:` + strings.Replace(fmt.Sprintf("%v", this.DeletionTimestamp), "Time", "Time", 1) + `,`, `DeletionGracePeriodSeconds:` + valueToStringGenerated(this.DeletionGracePeriodSeconds) + `,`, `Labels:` + mapStringForLabels + `,`, `Annotations:` + mapStringForAnnotations + `,`, - `OwnerReferences:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.OwnerReferences), "OwnerReference", "OwnerReference", 1), `&`, ``, 1) + `,`, + `OwnerReferences:` + repeatedStringForOwnerReferences + `,`, `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, `ClusterName:` + fmt.Sprintf("%v", this.ClusterName) + `,`, - `Initializers:` + strings.Replace(fmt.Sprintf("%v", this.Initializers), "Initializers", "Initializers", 1) + `,`, + `ManagedFields:` + repeatedStringForManagedFields + `,`, `}`, }, "") return s @@ -2494,6 +4444,32 @@ }, "") return s } +func (this *PartialObjectMetadata) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PartialObjectMetadata{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PartialObjectMetadataList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PartialObjectMetadata{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PartialObjectMetadata", "PartialObjectMetadata", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PartialObjectMetadataList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} func (this *Patch) String() string { if this == nil { return "nil" @@ -2503,12 +4479,25 @@ }, "") return s } +func (this *PatchOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PatchOptions{`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `Force:` + valueToStringGenerated(this.Force) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, + `}`, + }, "") + return s +} func (this *Preconditions) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&Preconditions{`, `UID:` + valueToStringGenerated(this.UID) + `,`, + `ResourceVersion:` + valueToStringGenerated(this.ResourceVersion) + `,`, `}`, }, "") return s @@ -2543,7 +4532,7 @@ `Status:` + fmt.Sprintf("%v", this.Status) + `,`, `Message:` + fmt.Sprintf("%v", this.Message) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, - `Details:` + strings.Replace(fmt.Sprintf("%v", this.Details), "StatusDetails", "StatusDetails", 1) + `,`, + `Details:` + strings.Replace(this.Details.String(), "StatusDetails", "StatusDetails", 1) + `,`, `Code:` + fmt.Sprintf("%v", this.Code) + `,`, `}`, }, "") @@ -2565,17 +4554,32 @@ if this == nil { return "nil" } + repeatedStringForCauses := "[]StatusCause{" + for _, f := range this.Causes { + repeatedStringForCauses += strings.Replace(strings.Replace(f.String(), "StatusCause", "StatusCause", 1), `&`, ``, 1) + "," + } + repeatedStringForCauses += "}" s := strings.Join([]string{`&StatusDetails{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `Group:` + fmt.Sprintf("%v", this.Group) + `,`, `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, - `Causes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Causes), "StatusCause", "StatusCause", 1), `&`, ``, 1) + `,`, + `Causes:` + repeatedStringForCauses + `,`, `RetryAfterSeconds:` + fmt.Sprintf("%v", this.RetryAfterSeconds) + `,`, `UID:` + fmt.Sprintf("%v", this.UID) + `,`, `}`, }, "") return s } +func (this *TableOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TableOptions{`, + `IncludeObject:` + fmt.Sprintf("%v", this.IncludeObject) + `,`, + `}`, + }, "") + return s +} func (this *Timestamp) String() string { if this == nil { return "nil" @@ -2598,13 +4602,24 @@ }, "") return s } +func (this *UpdateOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&UpdateOptions{`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, + `}`, + }, "") + return s +} func (this *WatchEvent) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&WatchEvent{`, `Type:` + fmt.Sprintf("%v", this.Type) + `,`, - `Object:` + strings.Replace(strings.Replace(this.Object.String(), "RawExtension", "k8s_io_apimachinery_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `Object:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Object), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -2632,7 +4647,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2660,7 +4675,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2670,6 +4685,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2689,7 +4707,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2698,6 +4716,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2720,7 +4741,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2729,6 +4750,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2750,7 +4774,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2759,6 +4783,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2776,6 +4803,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2803,7 +4833,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2831,7 +4861,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2840,6 +4870,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2857,6 +4890,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -2884,7 +4920,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2912,7 +4948,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2922,6 +4958,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2941,7 +4980,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2961,7 +5000,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2971,6 +5010,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2990,7 +5032,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -2999,6 +5041,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3023,7 +5068,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3033,6 +5078,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3052,7 +5100,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3062,6 +5110,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3081,7 +5132,103 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Categories = append(m.Categories, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StorageVersionHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3090,15 +5237,71 @@ if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StorageVersionHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *APIResourceList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Categories = append(m.Categories, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 8: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: APIResourceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: APIResourceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GroupVersion", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3110,7 +5313,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3120,16 +5323,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Group = string(dAtA[iNdEx:postIndex]) + m.GroupVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field APIResources", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3139,20 +5345,25 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Version = string(dAtA[iNdEx:postIndex]) + m.APIResources = append(m.APIResources, APIResource{}) + if err := m.APIResources[len(m.APIResources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -3163,6 +5374,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3175,7 +5389,7 @@ } return nil } -func (m *APIResourceList) Unmarshal(dAtA []byte) error { +func (m *APIVersions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3190,7 +5404,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3198,15 +5412,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: APIResourceList: wiretype end group for non-group") + return fmt.Errorf("proto: APIVersions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: APIResourceList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: APIVersions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GroupVersion", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Versions", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3218,7 +5432,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3228,14 +5442,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.GroupVersion = string(dAtA[iNdEx:postIndex]) + m.Versions = append(m.Versions, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIResources", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerAddressByClientCIDRs", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3247,7 +5464,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3256,11 +5473,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.APIResources = append(m.APIResources, APIResource{}) - if err := m.APIResources[len(m.APIResources)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ServerAddressByClientCIDRs = append(m.ServerAddressByClientCIDRs, ServerAddressByClientCIDR{}) + if err := m.ServerAddressByClientCIDRs[len(m.ServerAddressByClientCIDRs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3273,6 +5493,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3285,7 +5508,7 @@ } return nil } -func (m *APIVersions) Unmarshal(dAtA []byte) error { +func (m *CreateOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3300,7 +5523,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3308,15 +5531,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: APIVersions: wiretype end group for non-group") + return fmt.Errorf("proto: CreateOptions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: APIVersions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CreateOptions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Versions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3328,7 +5551,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3338,16 +5561,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Versions = append(m.Versions, string(dAtA[iNdEx:postIndex])) + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerAddressByClientCIDRs", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3357,22 +5583,23 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.ServerAddressByClientCIDRs = append(m.ServerAddressByClientCIDRs, ServerAddressByClientCIDR{}) - if err := m.ServerAddressByClientCIDRs[len(m.ServerAddressByClientCIDRs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.FieldManager = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3383,6 +5610,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3410,7 +5640,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3438,7 +5668,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -3458,7 +5688,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3467,6 +5697,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3491,7 +5724,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3512,7 +5745,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3522,12 +5755,47 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } s := DeletionPropagation(dAtA[iNdEx:postIndex]) m.PropagationPolicy = &s iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3537,6 +5805,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3564,7 +5835,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3592,7 +5863,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Duration |= (time.Duration(b) & 0x7F) << shift + m.Duration |= time.Duration(b&0x7F) << shift if b < 0x80 { break } @@ -3606,6 +5877,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3633,7 +5907,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3661,7 +5935,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3681,7 +5955,7 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -3696,6 +5970,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3708,7 +5985,7 @@ } return nil } -func (m *GetOptions) Unmarshal(dAtA []byte) error { +func (m *FieldsV1) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3723,7 +6000,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3731,17 +6008,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GetOptions: wiretype end group for non-group") + return fmt.Errorf("proto: FieldsV1: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GetOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: FieldsV1: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Raw", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3751,26 +6028,84 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + m.Raw = append(m.Raw[:0], dAtA[iNdEx:postIndex]...) + if m.Raw == nil { + m.Raw = []byte{} + } iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeUninitialized", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var v int + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -3780,12 +6115,24 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.IncludeUninitialized = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3795,6 +6142,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3822,7 +6172,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3850,7 +6200,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3860,6 +6210,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3879,7 +6232,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3889,6 +6242,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3903,6 +6259,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -3930,7 +6289,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3958,7 +6317,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3968,6 +6327,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -3987,7 +6349,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -3997,6 +6359,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4011,6 +6376,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4038,7 +6406,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4066,7 +6434,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4076,6 +6444,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4095,7 +6466,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4105,6 +6476,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4119,6 +6493,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4146,7 +6523,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4174,7 +6551,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4183,7 +6560,10 @@ if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4203,7 +6583,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4213,6 +6593,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4227,6 +6610,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4254,7 +6640,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4282,7 +6668,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4292,6 +6678,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4311,7 +6700,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4321,6 +6710,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4340,7 +6732,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4350,6 +6742,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4364,6 +6759,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4391,7 +6789,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4419,7 +6817,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4429,6 +6827,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4448,7 +6849,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4458,6 +6859,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4477,7 +6881,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4487,6 +6891,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -4501,6 +6908,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4513,7 +6923,7 @@ } return nil } -func (m *Initializer) Unmarshal(dAtA []byte) error { +func (m *LabelSelector) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4528,7 +6938,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4536,17 +6946,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Initializer: wiretype end group for non-group") + return fmt.Errorf("proto: LabelSelector: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Initializer: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LabelSelector: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchLabels", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4556,20 +6966,152 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if m.MatchLabels == nil { + m.MatchLabels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.MatchLabels[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchExpressions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MatchExpressions = append(m.MatchExpressions, LabelSelectorRequirement{}) + if err := m.MatchExpressions[len(m.MatchExpressions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -4580,6 +7122,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4592,7 +7137,7 @@ } return nil } -func (m *Initializers) Unmarshal(dAtA []byte) error { +func (m *LabelSelectorRequirement) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4607,7 +7152,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4615,17 +7160,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Initializers: wiretype end group for non-group") + return fmt.Errorf("proto: LabelSelectorRequirement: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Initializers: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LabelSelectorRequirement: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pending", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4635,28 +7180,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Pending = append(m.Pending, Initializer{}) - if err := m.Pending[len(m.Pending)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Key = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -4666,24 +7212,55 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if m.Result == nil { - m.Result = &Status{} + m.Operator = LabelSelectorOperator(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) } - if err := m.Result.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF } + m.Values = append(m.Values, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -4694,6 +7271,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4706,7 +7286,7 @@ } return nil } -func (m *LabelSelector) Unmarshal(dAtA []byte) error { +func (m *List) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4721,7 +7301,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4729,131 +7309,48 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: LabelSelector: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LabelSelector: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchLabels", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.MatchLabels == nil { - m.MatchLabels = make(map[string]string) - } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + return fmt.Errorf("proto: List: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: List: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.MatchLabels[mapkey] = mapvalue - } else { - var mapvalue string - m.MatchLabels[mapkey] = mapvalue + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchExpressions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4865,7 +7362,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -4874,11 +7371,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.MatchExpressions = append(m.MatchExpressions, LabelSelectorRequirement{}) - if err := m.MatchExpressions[len(m.MatchExpressions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, runtime.RawExtension{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4891,6 +7391,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -4903,7 +7406,7 @@ } return nil } -func (m *LabelSelectorRequirement) Unmarshal(dAtA []byte) error { +func (m *ListMeta) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4918,7 +7421,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4926,15 +7429,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: LabelSelectorRequirement: wiretype end group for non-group") + return fmt.Errorf("proto: ListMeta: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: LabelSelectorRequirement: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ListMeta: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SelfLink", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4946,7 +7449,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4956,14 +7459,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Key = string(dAtA[iNdEx:postIndex]) + m.SelfLink = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4975,7 +7481,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -4985,14 +7491,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Operator = LabelSelectorOperator(dAtA[iNdEx:postIndex]) + m.ResourceVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Continue", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5004,7 +7513,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5014,11 +7523,34 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Values = append(m.Values, string(dAtA[iNdEx:postIndex])) + m.Continue = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RemainingItemCount", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RemainingItemCount = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -5028,6 +7560,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5040,7 +7575,7 @@ } return nil } -func (m *List) Unmarshal(dAtA []byte) error { +func (m *ListOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5055,7 +7590,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5063,17 +7598,17 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: List: wiretype end group for non-group") + return fmt.Errorf("proto: ListOptions: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: List: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ListOptions: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5083,27 +7618,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.LabelSelector = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FieldSelector", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5113,30 +7650,177 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, k8s_io_apimachinery_pkg_runtime.RawExtension{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.FieldSelector = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Watch", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Watch = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) + } + m.Limit = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Limit |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Continue", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Continue = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowWatchBookmarks", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowWatchBookmarks = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } if (iNdEx + skippy) > l { @@ -5151,7 +7835,7 @@ } return nil } -func (m *ListMeta) Unmarshal(dAtA []byte) error { +func (m *ManagedFieldsEntry) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5166,7 +7850,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5174,15 +7858,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ListMeta: wiretype end group for non-group") + return fmt.Errorf("proto: ManagedFieldsEntry: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ListMeta: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ManagedFieldsEntry: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SelfLink", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Manager", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5194,7 +7878,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5204,14 +7888,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.SelfLink = string(dAtA[iNdEx:postIndex]) + m.Manager = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Operation", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5223,7 +7910,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5233,14 +7920,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + m.Operation = ManagedFieldsOperationType(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Continue", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5252,7 +7942,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5262,10 +7952,117 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Continue = string(dAtA[iNdEx:postIndex]) + m.APIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Time == nil { + m.Time = &Time{} + } + if err := m.Time.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldsType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldsType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldsV1", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FieldsV1 == nil { + m.FieldsV1 = &FieldsV1{} + } + if err := m.FieldsV1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -5276,6 +8073,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -5288,7 +8088,7 @@ } return nil } -func (m *ListOptions) Unmarshal(dAtA []byte) error { +func (m *ObjectMeta) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5303,7 +8103,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5311,15 +8111,15 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ListOptions: wiretype end group for non-group") + return fmt.Errorf("proto: ObjectMeta: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ListOptions: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ObjectMeta: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5331,7 +8131,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5341,14 +8141,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.LabelSelector = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FieldSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field GenerateName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5360,7 +8163,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5370,16 +8173,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.FieldSelector = string(dAtA[iNdEx:postIndex]) + m.GenerateName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Watch", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5389,15 +8195,27 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.Watch = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SelfLink", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5409,7 +8227,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5419,16 +8237,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + m.SelfLink = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) } - var v int64 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5438,17 +8259,29 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.TimeoutSeconds = &v + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeUninitialized", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5458,17 +8291,29 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.IncludeUninitialized = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 7: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) } - m.Limit = 0 + m.Generation = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5478,16 +8323,16 @@ } b := dAtA[iNdEx] iNdEx++ - m.Limit |= (int64(b) & 0x7F) << shift + m.Generation |= int64(b&0x7F) << shift if b < 0x80 { break } } case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Continue", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CreationTimestamp", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5497,76 +8342,30 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Continue = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ObjectMeta) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ObjectMeta: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ObjectMeta: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + } + if err := m.CreationTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DeletionTimestamp", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5576,26 +8375,33 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if m.DeletionTimestamp == nil { + m.DeletionTimestamp = &Time{} + } + if err := m.DeletionTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field GenerateName", wireType) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DeletionGracePeriodSeconds", wireType) } - var stringLen uint64 + var v int64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5605,26 +8411,17 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + v |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.GenerateName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: + m.DeletionGracePeriodSeconds = &v + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5634,26 +8431,124 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.Namespace = string(dAtA[iNdEx:postIndex]) + if m.Labels == nil { + m.Labels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Labels[mapkey] = mapvalue iNdEx = postIndex - case 4: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SelfLink", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5663,26 +8558,124 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.SelfLink = string(dAtA[iNdEx:postIndex]) + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Annotations[mapkey] = mapvalue iNdEx = postIndex - case 5: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OwnerReferences", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5692,24 +8685,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) + m.OwnerReferences = append(m.OwnerReferences, OwnerReference{}) + if err := m.OwnerReferences[len(m.OwnerReferences)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 6: + case 14: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Finalizers", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5721,7 +8719,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -5731,16 +8729,19 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + m.Finalizers = append(m.Finalizers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) } - m.Generation = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5750,14 +8751,27 @@ } b := dAtA[iNdEx] iNdEx++ - m.Generation |= (int64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - case 8: + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 17: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CreationTimestamp", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ManagedFields", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5769,7 +8783,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -5778,51 +8792,75 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.CreationTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ManagedFields = append(m.ManagedFields, ManagedFieldsEntry{}) + if err := m.ManagedFields[len(m.ManagedFields)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeletionTimestamp", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - if msglen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if m.DeletionTimestamp == nil { - m.DeletionTimestamp = &Time{} + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OwnerReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - if err := m.DeletionTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if iNdEx >= l { + return io.ErrUnexpectedEOF } - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DeletionGracePeriodSeconds", wireType) + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OwnerReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OwnerReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var v int64 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5832,17 +8870,29 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.DeletionGracePeriodSeconds = &v - case 11: + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5852,34 +8902,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) } - var stringLenmapkey uint64 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5889,76 +8934,29 @@ } b := dAtA[iNdEx] iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.Labels == nil { - m.Labels = make(map[string]string) + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Labels[mapkey] = mapvalue - } else { - var mapvalue string - m.Labels[mapkey] = mapvalue + if postIndex > l { + return io.ErrUnexpectedEOF } + m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 12: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5968,19 +8966,29 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 + m.APIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Controller", wireType) + } + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -5990,12 +8998,18 @@ } b := dAtA[iNdEx] iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapkey uint64 + b := bool(v != 0) + m.Controller = &b + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockOwnerDeletion", wireType) + } + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -6005,74 +9019,69 @@ } b := dAtA[iNdEx] iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + b := bool(v != 0) + m.BlockOwnerDeletion = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - if m.Annotations == nil { - m.Annotations = make(map[string]string) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PartialObjectMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - if iNdEx < postIndex { - var valuekey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Annotations[mapkey] = mapvalue - } else { - var mapvalue string - m.Annotations[mapkey] = mapvalue + if iNdEx >= l { + return io.ErrUnexpectedEOF } - iNdEx = postIndex - case 13: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PartialObjectMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PartialObjectMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OwnerReferences", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6084,7 +9093,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6093,48 +9102,74 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - m.OwnerReferences = append(m.OwnerReferences, OwnerReference{}) - if err := m.OwnerReferences[len(m.OwnerReferences)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 14: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Finalizers", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.Finalizers = append(m.Finalizers, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 15: + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PartialObjectMetadataList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PartialObjectMetadataList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PartialObjectMetadataList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -6144,24 +9179,28 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.ClusterName = string(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 16: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Initializers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6173,7 +9212,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6182,13 +9221,14 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Initializers == nil { - m.Initializers = &Initializers{} - } - if err := m.Initializers.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, PartialObjectMetadata{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -6201,6 +9241,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6213,7 +9256,7 @@ } return nil } -func (m *OwnerReference) Unmarshal(dAtA []byte) error { +func (m *Patch) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6228,7 +9271,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6236,73 +9279,68 @@ fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: OwnerReference: wiretype end group for non-group") + return fmt.Errorf("proto: Patch: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: OwnerReference: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Patch: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + if skippy < 0 { + return ErrInvalidLengthGenerated } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.Kind = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PatchOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - postIndex := iNdEx + intStringLen - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PatchOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PatchOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6314,7 +9352,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6324,43 +9362,17 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { + if postIndex < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen if postIndex > l { return io.ErrUnexpectedEOF } - m.APIVersion = string(dAtA[iNdEx:postIndex]) + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 6: + case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Controller", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -6372,18 +9384,18 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } b := bool(v != 0) - m.Controller = &b - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BlockOwnerDeletion", wireType) + m.Force = &b + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -6393,63 +9405,24 @@ } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - b := bool(v != 0) - m.BlockOwnerDeletion = &b - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Patch) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Patch: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Patch: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -6459,6 +9432,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6486,7 +9462,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6514,7 +9490,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6524,12 +9500,48 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } s := k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) m.UID = &s iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.ResourceVersion = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -6539,6 +9551,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6566,7 +9581,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6594,7 +9609,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6604,6 +9619,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6618,6 +9636,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6645,7 +9666,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6673,7 +9694,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6683,6 +9704,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6702,7 +9726,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6712,6 +9736,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6726,6 +9753,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6753,7 +9783,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6781,7 +9811,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6790,6 +9820,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6811,7 +9844,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6821,6 +9854,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6840,7 +9876,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6850,6 +9886,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6869,7 +9908,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -6879,6 +9918,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6898,7 +9940,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -6907,6 +9949,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -6931,7 +9976,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Code |= (int32(b) & 0x7F) << shift + m.Code |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -6945,6 +9990,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -6972,7 +10020,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7000,7 +10048,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7010,6 +10058,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7029,7 +10080,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7039,6 +10090,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7058,7 +10112,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7068,6 +10122,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7082,6 +10139,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7109,7 +10169,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7137,7 +10197,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7147,6 +10207,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7166,7 +10229,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7176,6 +10239,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7195,7 +10261,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7205,6 +10271,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7224,7 +10293,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7233,6 +10302,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7255,7 +10327,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.RetryAfterSeconds |= (int32(b) & 0x7F) << shift + m.RetryAfterSeconds |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7274,7 +10346,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7284,6 +10356,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7298,6 +10373,94 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TableOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TableOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TableOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeObject", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IncludeObject = IncludeObjectPolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7325,7 +10488,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7353,7 +10516,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Seconds |= (int64(b) & 0x7F) << shift + m.Seconds |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -7372,7 +10535,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Nanos |= (int32(b) & 0x7F) << shift + m.Nanos |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -7386,6 +10549,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7413,7 +10579,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7441,7 +10607,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7451,6 +10617,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7470,7 +10639,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7480,6 +10649,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7494,6 +10666,126 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7521,7 +10813,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7549,7 +10841,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7559,6 +10851,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7573,6 +10868,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7600,7 +10898,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7628,7 +10926,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -7638,6 +10936,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7657,7 +10958,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -7666,6 +10967,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -7682,6 +10986,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -7748,10 +11055,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -7780,6 +11090,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -7798,163 +11111,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 2422 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x4d, 0x6c, 0x23, 0x49, - 0x15, 0x4e, 0xdb, 0xb1, 0x63, 0x3f, 0xc7, 0xf9, 0xa9, 0xcd, 0x80, 0x37, 0x02, 0x3b, 0xdb, 0x8b, - 0x56, 0x59, 0x98, 0xb5, 0x49, 0x80, 0xd5, 0x30, 0xc0, 0x40, 0x3a, 0xce, 0x8c, 0xa2, 0x9d, 0xcc, - 0x58, 0x95, 0x9d, 0x41, 0x0c, 0x23, 0x44, 0xa7, 0x5d, 0x71, 0x9a, 0xb4, 0xbb, 0xbd, 0x55, 0xed, - 0x4c, 0x02, 0x07, 0xf6, 0x00, 0x12, 0x07, 0x84, 0xe6, 0xc8, 0x09, 0xed, 0x08, 0x2e, 0x5c, 0x39, - 0x71, 0x81, 0x13, 0x12, 0x73, 0x1c, 0x89, 0xcb, 0x1e, 0x90, 0xb5, 0xe3, 0x3d, 0x70, 0x42, 0xdc, - 0x73, 0x42, 0x55, 0x5d, 0xdd, 0x5d, 0x6d, 0xc7, 0x93, 0xf6, 0xce, 0x82, 0xf6, 0x14, 0xf7, 0xfb, - 0xf9, 0xde, 0xab, 0xaa, 0xf7, 0x5e, 0xbd, 0x7a, 0x81, 0xbd, 0xe3, 0x6b, 0xac, 0x6e, 0x7b, 0x8d, - 0xe3, 0xfe, 0x01, 0xa1, 0x2e, 0xf1, 0x09, 0x6b, 0x9c, 0x10, 0xb7, 0xed, 0xd1, 0x86, 0x64, 0x98, - 0x3d, 0xbb, 0x6b, 0x5a, 0x47, 0xb6, 0x4b, 0xe8, 0x59, 0xa3, 0x77, 0xdc, 0xe1, 0x04, 0xd6, 0xe8, - 0x12, 0xdf, 0x6c, 0x9c, 0x6c, 0x34, 0x3a, 0xc4, 0x25, 0xd4, 0xf4, 0x49, 0xbb, 0xde, 0xa3, 0x9e, - 0xef, 0xa1, 0x2f, 0x05, 0x5a, 0x75, 0x55, 0xab, 0xde, 0x3b, 0xee, 0x70, 0x02, 0xab, 0x73, 0xad, - 0xfa, 0xc9, 0xc6, 0xea, 0x5b, 0x1d, 0xdb, 0x3f, 0xea, 0x1f, 0xd4, 0x2d, 0xaf, 0xdb, 0xe8, 0x78, - 0x1d, 0xaf, 0x21, 0x94, 0x0f, 0xfa, 0x87, 0xe2, 0x4b, 0x7c, 0x88, 0x5f, 0x01, 0xe8, 0xea, 0x44, - 0x57, 0x68, 0xdf, 0xf5, 0xed, 0x2e, 0x19, 0xf5, 0x62, 0xf5, 0xed, 0xcb, 0x14, 0x98, 0x75, 0x44, - 0xba, 0xe6, 0xa8, 0x9e, 0xfe, 0xf7, 0x2c, 0x14, 0xb6, 0x5a, 0xbb, 0xb7, 0xa8, 0xd7, 0xef, 0xa1, - 0x35, 0x98, 0x75, 0xcd, 0x2e, 0xa9, 0x68, 0x6b, 0xda, 0x7a, 0xd1, 0x98, 0x7f, 0x3a, 0xa8, 0xcd, - 0x0c, 0x07, 0xb5, 0xd9, 0x3b, 0x66, 0x97, 0x60, 0xc1, 0x41, 0x0e, 0x14, 0x4e, 0x08, 0x65, 0xb6, - 0xe7, 0xb2, 0x4a, 0x66, 0x2d, 0xbb, 0x5e, 0xda, 0xbc, 0x51, 0x4f, 0xb3, 0xfe, 0xba, 0x30, 0x70, - 0x3f, 0x50, 0xbd, 0xe9, 0xd1, 0xa6, 0xcd, 0x2c, 0xef, 0x84, 0xd0, 0x33, 0x63, 0x49, 0x5a, 0x29, - 0x48, 0x26, 0xc3, 0x91, 0x05, 0xf4, 0x0b, 0x0d, 0x96, 0x7a, 0x94, 0x1c, 0x12, 0x4a, 0x49, 0x5b, - 0xf2, 0x2b, 0xd9, 0x35, 0xed, 0x53, 0x30, 0x5b, 0x91, 0x66, 0x97, 0x5a, 0x23, 0xf8, 0x78, 0xcc, - 0x22, 0xfa, 0xbd, 0x06, 0xab, 0x8c, 0xd0, 0x13, 0x42, 0xb7, 0xda, 0x6d, 0x4a, 0x18, 0x33, 0xce, - 0xb6, 0x1d, 0x9b, 0xb8, 0xfe, 0xf6, 0x6e, 0x13, 0xb3, 0xca, 0xac, 0xd8, 0x87, 0xef, 0xa6, 0x73, - 0x68, 0x7f, 0x12, 0x8e, 0xa1, 0x4b, 0x8f, 0x56, 0x27, 0x8a, 0x30, 0xfc, 0x02, 0x37, 0xf4, 0x43, - 0x98, 0x0f, 0x0f, 0xf2, 0xb6, 0xcd, 0x7c, 0x74, 0x1f, 0xf2, 0x1d, 0xfe, 0xc1, 0x2a, 0x9a, 0x70, - 0xb0, 0x9e, 0xce, 0xc1, 0x10, 0xc3, 0x58, 0x90, 0xfe, 0xe4, 0xc5, 0x27, 0xc3, 0x12, 0x4d, 0xff, - 0x4b, 0x16, 0x4a, 0x5b, 0xad, 0x5d, 0x4c, 0x98, 0xd7, 0xa7, 0x16, 0x49, 0x11, 0x34, 0x9b, 0x00, - 0xfc, 0x2f, 0xeb, 0x99, 0x16, 0x69, 0x57, 0x32, 0x6b, 0xda, 0x7a, 0xc1, 0x40, 0x52, 0x0e, 0xee, - 0x44, 0x1c, 0xac, 0x48, 0x71, 0xd4, 0x63, 0xdb, 0x6d, 0x8b, 0xd3, 0x56, 0x50, 0xdf, 0xb1, 0xdd, - 0x36, 0x16, 0x1c, 0x74, 0x1b, 0x72, 0x27, 0x84, 0x1e, 0xf0, 0xfd, 0xe7, 0x01, 0xf1, 0x95, 0x74, - 0xcb, 0xbb, 0xcf, 0x55, 0x8c, 0xe2, 0x70, 0x50, 0xcb, 0x89, 0x9f, 0x38, 0x00, 0x41, 0x75, 0x00, - 0x76, 0xe4, 0x51, 0x5f, 0xb8, 0x53, 0xc9, 0xad, 0x65, 0xd7, 0x8b, 0xc6, 0x02, 0xf7, 0x6f, 0x3f, - 0xa2, 0x62, 0x45, 0x02, 0x5d, 0x83, 0x79, 0x66, 0xbb, 0x9d, 0xbe, 0x63, 0x52, 0x4e, 0xa8, 0xe4, - 0x85, 0x9f, 0x2b, 0xd2, 0xcf, 0xf9, 0x7d, 0x85, 0x87, 0x13, 0x92, 0xdc, 0x92, 0x65, 0xfa, 0xa4, - 0xe3, 0x51, 0x9b, 0xb0, 0xca, 0x5c, 0x6c, 0x69, 0x3b, 0xa2, 0x62, 0x45, 0x02, 0xbd, 0x0e, 0x39, - 0xb1, 0xf3, 0x95, 0x82, 0x30, 0x51, 0x96, 0x26, 0x72, 0xe2, 0x58, 0x70, 0xc0, 0x43, 0x6f, 0xc2, - 0x9c, 0xcc, 0x9a, 0x4a, 0x51, 0x88, 0x2d, 0x4a, 0xb1, 0xb9, 0x30, 0xac, 0x43, 0xbe, 0xfe, 0x27, - 0x0d, 0x16, 0x95, 0xf3, 0x13, 0xb1, 0x72, 0x0d, 0xe6, 0x3b, 0x4a, 0xa6, 0xc8, 0xb3, 0x8c, 0x56, - 0xa3, 0x66, 0x11, 0x4e, 0x48, 0x22, 0x02, 0x45, 0x2a, 0x91, 0xc2, 0x8a, 0xb0, 0x91, 0x3a, 0xd0, - 0x42, 0x1f, 0x62, 0x4b, 0x0a, 0x91, 0xe1, 0x18, 0x59, 0xff, 0x97, 0x26, 0x82, 0x2e, 0xac, 0x11, - 0x68, 0x5d, 0xa9, 0x43, 0x9a, 0xd8, 0xc2, 0xf9, 0x09, 0x35, 0xe4, 0x92, 0xe4, 0xcd, 0x7c, 0x26, - 0x92, 0xf7, 0x7a, 0xe1, 0xb7, 0x1f, 0xd4, 0x66, 0xde, 0xff, 0xe7, 0xda, 0x8c, 0xfe, 0x71, 0x06, - 0xca, 0x4d, 0xe2, 0x10, 0x9f, 0xdc, 0xed, 0xf9, 0x62, 0x05, 0x37, 0x01, 0x75, 0xa8, 0x69, 0x91, - 0x16, 0xa1, 0xb6, 0xd7, 0xde, 0x27, 0x96, 0xe7, 0xb6, 0x99, 0x38, 0xa2, 0xac, 0xf1, 0xb9, 0xe1, - 0xa0, 0x86, 0x6e, 0x8d, 0x71, 0xf1, 0x05, 0x1a, 0xc8, 0x81, 0x72, 0x8f, 0x8a, 0xdf, 0xb6, 0x2f, - 0x0b, 0x38, 0x4f, 0x9c, 0xaf, 0xa5, 0x5b, 0x7b, 0x4b, 0x55, 0x35, 0x96, 0x87, 0x83, 0x5a, 0x39, - 0x41, 0xc2, 0x49, 0x70, 0xf4, 0x3d, 0x58, 0xf2, 0x68, 0xef, 0xc8, 0x74, 0x9b, 0xa4, 0x47, 0xdc, - 0x36, 0x71, 0x7d, 0x26, 0x92, 0xb9, 0x60, 0xac, 0xf0, 0xb2, 0x7b, 0x77, 0x84, 0x87, 0xc7, 0xa4, - 0xd1, 0x03, 0x58, 0xee, 0x51, 0xaf, 0x67, 0x76, 0x4c, 0x8e, 0xd8, 0xf2, 0x1c, 0xdb, 0x3a, 0x13, - 0xc9, 0x5e, 0x34, 0xae, 0x0e, 0x07, 0xb5, 0xe5, 0xd6, 0x28, 0xf3, 0x7c, 0x50, 0x7b, 0x45, 0x6c, - 0x1d, 0xa7, 0xc4, 0x4c, 0x3c, 0x0e, 0xa3, 0xef, 0x42, 0xa1, 0xd9, 0xa7, 0x82, 0x82, 0xbe, 0x03, - 0x85, 0xb6, 0xfc, 0x2d, 0x77, 0xf5, 0xb5, 0xf0, 0x4e, 0x0a, 0x65, 0xce, 0x07, 0xb5, 0x32, 0xbf, - 0x45, 0xeb, 0x21, 0x01, 0x47, 0x2a, 0xfa, 0x43, 0x28, 0xef, 0x9c, 0xf6, 0x3c, 0xea, 0x87, 0xe7, - 0xf5, 0x06, 0xe4, 0x89, 0x20, 0x08, 0xb4, 0x42, 0x5c, 0x48, 0x03, 0x31, 0x2c, 0xb9, 0x3c, 0xb1, - 0xc9, 0xa9, 0x69, 0xf9, 0xb2, 0x22, 0x46, 0x89, 0xbd, 0xc3, 0x89, 0x38, 0xe0, 0xe9, 0x4f, 0x34, - 0x80, 0x5b, 0x24, 0xc2, 0xde, 0x82, 0xc5, 0x30, 0x29, 0x92, 0xb9, 0xfa, 0x79, 0xa9, 0xbd, 0x88, - 0x93, 0x6c, 0x3c, 0x2a, 0x8f, 0x5a, 0xb0, 0x62, 0xbb, 0x96, 0xd3, 0x6f, 0x93, 0x7b, 0xae, 0xed, - 0xda, 0xbe, 0x6d, 0x3a, 0xf6, 0x4f, 0xa3, 0xba, 0xfc, 0x05, 0x89, 0xb3, 0xb2, 0x7b, 0x81, 0x0c, - 0xbe, 0x50, 0x53, 0x7f, 0x08, 0x45, 0x51, 0x21, 0x78, 0x71, 0x8e, 0xcb, 0x95, 0xf6, 0x82, 0x72, - 0x15, 0x56, 0xf7, 0xcc, 0xa4, 0xea, 0xae, 0x24, 0x84, 0x03, 0xe5, 0x40, 0x37, 0xbc, 0x70, 0x52, - 0x59, 0xb8, 0x0a, 0x85, 0x70, 0xe1, 0xd2, 0x4a, 0xd4, 0x68, 0x84, 0x40, 0x38, 0x92, 0x50, 0xac, - 0x1d, 0x41, 0xa2, 0xda, 0xa5, 0x33, 0xa6, 0x54, 0xdf, 0xcc, 0x8b, 0xab, 0xaf, 0x62, 0xe9, 0xe7, - 0x50, 0x99, 0xd4, 0x9d, 0xbc, 0x44, 0x3d, 0x4e, 0xef, 0x8a, 0xfe, 0x1b, 0x0d, 0x96, 0x54, 0xa4, - 0xf4, 0xc7, 0x97, 0xde, 0xc8, 0xe5, 0xf7, 0xb8, 0xb2, 0x23, 0xbf, 0xd3, 0x60, 0x25, 0xb1, 0xb4, - 0xa9, 0x4e, 0x7c, 0x0a, 0xa7, 0xd4, 0xe0, 0xc8, 0x4e, 0x11, 0x1c, 0x0d, 0x28, 0xed, 0x46, 0x71, - 0x4f, 0x2f, 0xef, 0x7c, 0xf4, 0xbf, 0x6a, 0x30, 0xaf, 0x68, 0x30, 0xf4, 0x10, 0xe6, 0x78, 0x7d, - 0xb3, 0xdd, 0x8e, 0xec, 0xca, 0x52, 0x5e, 0x96, 0x0a, 0x48, 0xbc, 0xae, 0x56, 0x80, 0x84, 0x43, - 0x48, 0xd4, 0x82, 0x3c, 0x25, 0xac, 0xef, 0xf8, 0xb2, 0xb4, 0x5f, 0x4d, 0x79, 0xad, 0xf9, 0xa6, - 0xdf, 0x67, 0x06, 0xf0, 0x1a, 0x85, 0x85, 0x3e, 0x96, 0x38, 0xfa, 0x3f, 0x32, 0x50, 0xbe, 0x6d, - 0x1e, 0x10, 0x67, 0x9f, 0x38, 0xc4, 0xf2, 0x3d, 0x8a, 0x7e, 0x06, 0xa5, 0xae, 0xe9, 0x5b, 0x47, - 0x82, 0x1a, 0xf6, 0x96, 0xcd, 0x74, 0x86, 0x12, 0x48, 0xf5, 0xbd, 0x18, 0x66, 0xc7, 0xf5, 0xe9, - 0x99, 0xf1, 0x8a, 0x5c, 0x58, 0x49, 0xe1, 0x60, 0xd5, 0x9a, 0x78, 0x10, 0x88, 0xef, 0x9d, 0xd3, - 0x1e, 0xbf, 0x44, 0xa7, 0x7f, 0x87, 0x24, 0x5c, 0xc0, 0xe4, 0xbd, 0xbe, 0x4d, 0x49, 0x97, 0xb8, - 0x7e, 0xfc, 0x20, 0xd8, 0x1b, 0xc1, 0xc7, 0x63, 0x16, 0x57, 0x6f, 0xc0, 0xd2, 0xa8, 0xf3, 0x68, - 0x09, 0xb2, 0xc7, 0xe4, 0x2c, 0x88, 0x05, 0xcc, 0x7f, 0xa2, 0x15, 0xc8, 0x9d, 0x98, 0x4e, 0x5f, - 0xd6, 0x1f, 0x1c, 0x7c, 0x5c, 0xcf, 0x5c, 0xd3, 0xf4, 0x3f, 0x68, 0x50, 0x99, 0xe4, 0x08, 0xfa, - 0xa2, 0x02, 0x64, 0x94, 0xa4, 0x57, 0xd9, 0x77, 0xc8, 0x59, 0x80, 0xba, 0x03, 0x05, 0xaf, 0xc7, - 0x9f, 0x70, 0x1e, 0x95, 0x71, 0xfe, 0x66, 0x18, 0xbb, 0x77, 0x25, 0xfd, 0x7c, 0x50, 0xbb, 0x92, - 0x80, 0x0f, 0x19, 0x38, 0x52, 0x45, 0x3a, 0xe4, 0x85, 0x3f, 0xfc, 0x52, 0xe6, 0xed, 0x93, 0x38, - 0xfc, 0xfb, 0x82, 0x82, 0x25, 0x47, 0xff, 0xb3, 0x06, 0xb3, 0xa2, 0x3d, 0x7c, 0x08, 0x05, 0xbe, - 0x7f, 0x6d, 0xd3, 0x37, 0x85, 0x5f, 0xa9, 0x1f, 0x13, 0x5c, 0x7b, 0x8f, 0xf8, 0x66, 0x9c, 0x5f, - 0x21, 0x05, 0x47, 0x88, 0x08, 0x43, 0xce, 0xf6, 0x49, 0x37, 0x3c, 0xc8, 0xb7, 0x26, 0x42, 0xcb, - 0xa7, 0x6c, 0x1d, 0x9b, 0x8f, 0x76, 0x4e, 0x7d, 0xe2, 0xf2, 0xc3, 0x88, 0x8b, 0xc1, 0x2e, 0xc7, - 0xc0, 0x01, 0x94, 0xfe, 0x47, 0x0d, 0x22, 0x53, 0x3c, 0xdd, 0x19, 0x71, 0x0e, 0x6f, 0xdb, 0xee, - 0xb1, 0xdc, 0xd6, 0xc8, 0x9d, 0x7d, 0x49, 0xc7, 0x91, 0xc4, 0x45, 0x57, 0x6c, 0x66, 0xca, 0x2b, - 0xf6, 0x2a, 0x14, 0x2c, 0xcf, 0xf5, 0x6d, 0xb7, 0x3f, 0x56, 0x5f, 0xb6, 0x25, 0x1d, 0x47, 0x12, - 0xfa, 0xb3, 0x2c, 0x94, 0xb8, 0xaf, 0xe1, 0x1d, 0xff, 0x2d, 0x28, 0x3b, 0xea, 0xe9, 0x49, 0x9f, - 0xaf, 0x48, 0x88, 0x64, 0x3e, 0xe2, 0xa4, 0x2c, 0x57, 0x3e, 0xb4, 0x89, 0xd3, 0x8e, 0x94, 0x33, - 0x49, 0xe5, 0x9b, 0x2a, 0x13, 0x27, 0x65, 0x79, 0x9d, 0x7d, 0xc4, 0xe3, 0x5a, 0x36, 0x6a, 0xd1, - 0xd6, 0x7e, 0x9f, 0x13, 0x71, 0xc0, 0xbb, 0x68, 0x7f, 0x66, 0xa7, 0xdc, 0x9f, 0xeb, 0xb0, 0xc0, - 0x0f, 0xd2, 0xeb, 0xfb, 0x61, 0x37, 0x9b, 0x13, 0x7d, 0x17, 0x1a, 0x0e, 0x6a, 0x0b, 0xef, 0x26, - 0x38, 0x78, 0x44, 0x72, 0x62, 0xfb, 0x92, 0xff, 0xa4, 0xed, 0x0b, 0x5f, 0xb5, 0x63, 0x77, 0x6d, - 0xbf, 0x32, 0x27, 0x9c, 0x88, 0x56, 0x7d, 0x9b, 0x13, 0x71, 0xc0, 0x4b, 0x1c, 0x69, 0xe1, 0xd2, - 0x23, 0x7d, 0x0f, 0x8a, 0x7b, 0xb6, 0x45, 0x3d, 0xbe, 0x16, 0x7e, 0x31, 0xb1, 0x44, 0xd3, 0x1e, - 0x15, 0xf0, 0x70, 0x8d, 0x21, 0x9f, 0xbb, 0xe2, 0x9a, 0xae, 0x17, 0xb4, 0xe6, 0xb9, 0xd8, 0x95, - 0x3b, 0x9c, 0x88, 0x03, 0xde, 0xf5, 0x15, 0x7e, 0x1f, 0xfd, 0xea, 0x49, 0x6d, 0xe6, 0xf1, 0x93, - 0xda, 0xcc, 0x07, 0x4f, 0xe4, 0xdd, 0xf4, 0x6f, 0x00, 0xb8, 0x7b, 0xf0, 0x13, 0x62, 0x05, 0x31, - 0x7f, 0xf9, 0xab, 0x9c, 0xf7, 0x18, 0x72, 0x18, 0x24, 0x5e, 0xb0, 0x99, 0x91, 0x1e, 0x43, 0xe1, - 0xe1, 0x84, 0x24, 0x6a, 0x40, 0x31, 0x7a, 0xa9, 0xcb, 0xf8, 0x5e, 0x96, 0x6a, 0xc5, 0xe8, 0x39, - 0x8f, 0x63, 0x99, 0x44, 0x02, 0xce, 0x5e, 0x9a, 0x80, 0x06, 0x64, 0xfb, 0x76, 0x5b, 0x84, 0x44, - 0xd1, 0xf8, 0x6a, 0x58, 0x00, 0xef, 0xed, 0x36, 0xcf, 0x07, 0xb5, 0xd7, 0x26, 0x8d, 0xb9, 0xfc, - 0xb3, 0x1e, 0x61, 0xf5, 0x7b, 0xbb, 0x4d, 0xcc, 0x95, 0x2f, 0x0a, 0xd2, 0xfc, 0x94, 0x41, 0xba, - 0x09, 0x20, 0x57, 0xcd, 0xb5, 0x83, 0xd8, 0x88, 0xa6, 0x16, 0xb7, 0x22, 0x0e, 0x56, 0xa4, 0x10, - 0x83, 0x65, 0x8b, 0x12, 0xf1, 0x9b, 0x1f, 0x3d, 0xf3, 0xcd, 0x6e, 0xf0, 0x6e, 0x2f, 0x6d, 0x7e, - 0x39, 0x5d, 0xc5, 0xe4, 0x6a, 0xc6, 0xab, 0xd2, 0xcc, 0xf2, 0xf6, 0x28, 0x18, 0x1e, 0xc7, 0x47, - 0x1e, 0x2c, 0xb7, 0xe5, 0xab, 0x27, 0x36, 0x5a, 0x9c, 0xda, 0xe8, 0x15, 0x6e, 0xb0, 0x39, 0x0a, - 0x84, 0xc7, 0xb1, 0xd1, 0x8f, 0x60, 0x35, 0x24, 0x8e, 0x3f, 0x3d, 0x2b, 0x20, 0x76, 0xaa, 0xca, - 0x1f, 0xc3, 0xcd, 0x89, 0x52, 0xf8, 0x05, 0x08, 0xa8, 0x0d, 0x79, 0x27, 0xe8, 0x2e, 0x4a, 0xe2, - 0x46, 0xf8, 0x76, 0xba, 0x55, 0xc4, 0xd1, 0x5f, 0x57, 0xbb, 0x8a, 0xe8, 0xf9, 0x25, 0x1b, 0x0a, - 0x89, 0x8d, 0x4e, 0xa1, 0x64, 0xba, 0xae, 0xe7, 0x9b, 0xc1, 0x63, 0x78, 0x5e, 0x98, 0xda, 0x9a, - 0xda, 0xd4, 0x56, 0x8c, 0x31, 0xd2, 0xc5, 0x28, 0x1c, 0xac, 0x9a, 0x42, 0x8f, 0x60, 0xd1, 0x7b, - 0xe4, 0x12, 0x8a, 0xc9, 0x21, 0xa1, 0xc4, 0xb5, 0x08, 0xab, 0x94, 0x85, 0xf5, 0xaf, 0xa7, 0xb4, - 0x9e, 0x50, 0x8e, 0x43, 0x3a, 0x49, 0x67, 0x78, 0xd4, 0x0a, 0xaa, 0x03, 0x1c, 0xda, 0xae, 0xec, - 0x45, 0x2b, 0x0b, 0xf1, 0xe8, 0xe9, 0x66, 0x44, 0xc5, 0x8a, 0x04, 0xfa, 0x06, 0x94, 0x2c, 0xa7, - 0xcf, 0x7c, 0x12, 0xcc, 0xb8, 0x16, 0x45, 0x06, 0x45, 0xeb, 0xdb, 0x8e, 0x59, 0x58, 0x95, 0x43, - 0x47, 0x30, 0x6f, 0x2b, 0x4d, 0x6f, 0x65, 0x49, 0xc4, 0xe2, 0xe6, 0xd4, 0x9d, 0x2e, 0x33, 0x96, - 0x78, 0x25, 0x52, 0x29, 0x38, 0x81, 0xbc, 0xfa, 0x4d, 0x28, 0x7d, 0xc2, 0x1e, 0x8c, 0xf7, 0x70, - 0xa3, 0x47, 0x37, 0x55, 0x0f, 0xf7, 0xb7, 0x0c, 0x2c, 0x24, 0x37, 0x3c, 0x7a, 0xeb, 0x68, 0x13, - 0x67, 0x96, 0x61, 0x55, 0xce, 0x4e, 0xac, 0xca, 0xb2, 0xf8, 0xcd, 0xbe, 0x4c, 0xf1, 0xdb, 0x04, - 0x30, 0x7b, 0x76, 0x58, 0xf7, 0x82, 0x3a, 0x1a, 0x55, 0xae, 0x78, 0x8a, 0x86, 0x15, 0x29, 0x31, - 0x95, 0xf4, 0x5c, 0x9f, 0x7a, 0x8e, 0x43, 0xa8, 0xbc, 0x4c, 0x83, 0xa9, 0x64, 0x44, 0xc5, 0x8a, - 0x04, 0xba, 0x09, 0xe8, 0xc0, 0xf1, 0xac, 0x63, 0xb1, 0x05, 0x61, 0x9e, 0x8b, 0x2a, 0x59, 0x08, - 0x86, 0x52, 0xc6, 0x18, 0x17, 0x5f, 0xa0, 0xa1, 0xcf, 0x41, 0xae, 0xc5, 0xdb, 0x0a, 0xfd, 0x2e, - 0x24, 0xe7, 0x49, 0xe8, 0x46, 0xb0, 0x13, 0x5a, 0x34, 0xf0, 0x99, 0x6e, 0x17, 0xf4, 0xab, 0x50, - 0xc4, 0x9e, 0xe7, 0xb7, 0x4c, 0xff, 0x88, 0xa1, 0x1a, 0xe4, 0x7a, 0xfc, 0x87, 0x1c, 0x16, 0x8a, - 0xf9, 0xaf, 0xe0, 0xe0, 0x80, 0xae, 0xff, 0x5a, 0x83, 0x57, 0x27, 0xce, 0xee, 0xf8, 0x8e, 0x5a, - 0xd1, 0x97, 0x74, 0x29, 0xda, 0xd1, 0x58, 0x0e, 0x2b, 0x52, 0xbc, 0x13, 0x4b, 0x0c, 0xfc, 0x46, - 0x3b, 0xb1, 0x84, 0x35, 0x9c, 0x94, 0xd5, 0xff, 0x93, 0x81, 0x7c, 0xf0, 0x2c, 0xfb, 0x1f, 0x37, - 0xdf, 0x6f, 0x40, 0x9e, 0x09, 0x3b, 0xd2, 0xbd, 0xa8, 0x5a, 0x06, 0xd6, 0xb1, 0xe4, 0xf2, 0x26, - 0xa6, 0x4b, 0x18, 0x33, 0x3b, 0x61, 0xf0, 0x46, 0x4d, 0xcc, 0x5e, 0x40, 0xc6, 0x21, 0x1f, 0xbd, - 0xcd, 0x5f, 0xa1, 0x26, 0x8b, 0xfa, 0xc2, 0x6a, 0x08, 0x89, 0x05, 0xf5, 0x7c, 0x50, 0x9b, 0x97, - 0xe0, 0xe2, 0x1b, 0x4b, 0x69, 0xf4, 0x00, 0xe6, 0xda, 0xc4, 0x37, 0x6d, 0x27, 0x68, 0x07, 0x53, - 0x4f, 0x26, 0x03, 0xb0, 0x66, 0xa0, 0x6a, 0x94, 0xb8, 0x4f, 0xf2, 0x03, 0x87, 0x80, 0x3c, 0xf1, - 0x2c, 0xaf, 0x1d, 0x8c, 0xe9, 0x73, 0x71, 0xe2, 0x6d, 0x7b, 0x6d, 0x82, 0x05, 0x47, 0x7f, 0xac, - 0x41, 0x29, 0x40, 0xda, 0x36, 0xfb, 0x8c, 0xa0, 0x8d, 0x68, 0x15, 0xc1, 0x71, 0x87, 0x77, 0xf2, - 0xec, 0xbb, 0x67, 0x3d, 0x72, 0x3e, 0xa8, 0x15, 0x85, 0x18, 0xff, 0x88, 0x16, 0xa0, 0xec, 0x51, - 0xe6, 0x92, 0x3d, 0x7a, 0x1d, 0x72, 0xa2, 0xf5, 0x96, 0x9b, 0x19, 0x35, 0x7a, 0xa2, 0x3d, 0xc7, - 0x01, 0x4f, 0xff, 0x28, 0x03, 0xe5, 0xc4, 0xe2, 0x52, 0x74, 0x75, 0xd1, 0xa8, 0x24, 0x93, 0x62, - 0xfc, 0x36, 0xf9, 0x9f, 0x2b, 0x3f, 0x80, 0xbc, 0xc5, 0xd7, 0x17, 0xfe, 0x77, 0x6b, 0x63, 0x9a, - 0xa3, 0x10, 0x3b, 0x13, 0x47, 0x92, 0xf8, 0x64, 0x58, 0x02, 0xa2, 0x5b, 0xb0, 0x4c, 0x89, 0x4f, - 0xcf, 0xb6, 0x0e, 0x7d, 0x42, 0xd5, 0xfe, 0x3f, 0x17, 0xf7, 0x3d, 0x78, 0x54, 0x00, 0x8f, 0xeb, - 0x84, 0xa5, 0x32, 0xff, 0x12, 0xa5, 0x52, 0x77, 0x60, 0xf6, 0xff, 0xd8, 0xa3, 0xff, 0x10, 0x8a, - 0x71, 0x17, 0xf5, 0x29, 0x9b, 0xd4, 0x7f, 0x0c, 0x05, 0x1e, 0x8d, 0x61, 0xf7, 0x7f, 0xc9, 0x4d, - 0x94, 0xbc, 0x23, 0x32, 0x69, 0xee, 0x08, 0x7d, 0x13, 0x82, 0xff, 0x99, 0xf1, 0x6a, 0x1a, 0xbc, - 0xd8, 0x95, 0x6a, 0xaa, 0x3e, 0xbf, 0x95, 0x91, 0xd9, 0x2f, 0x35, 0x00, 0xf1, 0x7c, 0xdc, 0x39, - 0x21, 0xae, 0xcf, 0x1d, 0xe3, 0x27, 0x30, 0xea, 0x98, 0x48, 0x23, 0xc1, 0x41, 0xf7, 0x20, 0xef, - 0x89, 0xee, 0x4a, 0xce, 0xb0, 0xa6, 0x1c, 0x07, 0x44, 0x51, 0x17, 0xb4, 0x68, 0x58, 0x82, 0x19, - 0xeb, 0x4f, 0x9f, 0x57, 0x67, 0x9e, 0x3d, 0xaf, 0xce, 0x7c, 0xf8, 0xbc, 0x3a, 0xf3, 0xfe, 0xb0, - 0xaa, 0x3d, 0x1d, 0x56, 0xb5, 0x67, 0xc3, 0xaa, 0xf6, 0xe1, 0xb0, 0xaa, 0x7d, 0x34, 0xac, 0x6a, - 0x8f, 0x3f, 0xae, 0xce, 0x3c, 0xc8, 0x9c, 0x6c, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0x0e, 0xc8, - 0x1d, 0xca, 0x1f, 0x20, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -92,6 +92,16 @@ // categories is a list of the grouped resources this resource belongs to (e.g. 'all') repeated string categories = 7; + + // The hash value of the storage version, the version this resource is + // converted to when written to the data store. Value must be treated + // as opaque by clients. Only equality comparison on the value is valid. + // This is an alpha feature and may change or be removed in the future. + // The field is populated by the apiserver only if the + // StorageVersionHash feature gate is enabled. + // This field will remain optional even if it graduates. + // +optional + optional string storageVersionHash = 10; } // APIResourceList is a list of APIResource, it is used to expose the name of the @@ -107,7 +117,7 @@ // APIVersions lists the versions that are available, to allow clients to // discover the API at /api, which is the root path of the legacy v1 API. -// +// // +protobuf.options.(gogoproto.goproto_stringer)=false // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object message APIVersions { @@ -124,6 +134,24 @@ repeated ServerAddressByClientCIDR serverAddressByClientCIDRs = 2; } +// CreateOptions may be provided when creating an API object. +message CreateOptions { + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 1; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + optional string fieldManager = 3; +} + // DeleteOptions may be provided when deleting an API object. message DeleteOptions { // The duration in seconds before the object should be deleted. Value must be non-negative integer. @@ -155,6 +183,14 @@ // foreground. // +optional optional string propagationPolicy = 4; + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 5; } // Duration is a wrapper around time.Duration which supports correct @@ -165,14 +201,33 @@ } // ExportOptions is the query options to the standard REST get call. +// Deprecated. Planned for removal in 1.18. message ExportOptions { // Should this value be exported. Export strips fields that a user can not specify. + // Deprecated. Planned for removal in 1.18. optional bool export = 1; // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. + // Deprecated. Planned for removal in 1.18. optional bool exact = 2; } +// FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format. +// +// Each key is either a '.' representing the field itself, and will always map to an empty set, +// or a string representing a sub-field or item. The string will follow one of these four formats: +// 'f:', where is the name of a field in a struct, or key in a map +// 'v:', where is the exact json formatted value of a list item +// 'i:', where is position of a item in a list +// 'k:', where is a map of a list item's key fields to their unique values +// If a key maps to an empty Fields value, the field that key represents is part of the set. +// +// The exact format is defined in sigs.k8s.io/structured-merge-diff +message FieldsV1 { + // Raw is the underlying serialization of this object. + optional bytes Raw = 1; +} + // GetOptions is the standard query options to the standard REST get call. message GetOptions { // When specified: @@ -180,15 +235,11 @@ // - if it's 0, then we simply return what we currently have in cache, no guarantee; // - if set to non zero, then the result is at least as fresh as given rv. optional string resourceVersion = 1; - - // If true, partially initialized resources are included in the response. - // +optional - optional bool includeUninitialized = 2; } // GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying // concepts during lookup stages without having partially valid types -// +// // +protobuf.options.(gogoproto.goproto_stringer)=false message GroupKind { optional string group = 1; @@ -198,7 +249,7 @@ // GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying // concepts during lookup stages without having partially valid types -// +// // +protobuf.options.(gogoproto.goproto_stringer)=false message GroupResource { optional string group = 1; @@ -207,7 +258,7 @@ } // GroupVersion contains the "group" and the "version", which uniquely identifies the API. -// +// // +protobuf.options.(gogoproto.goproto_stringer)=false message GroupVersion { optional string group = 1; @@ -228,7 +279,7 @@ // GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion // to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling -// +// // +protobuf.options.(gogoproto.goproto_stringer)=false message GroupVersionKind { optional string group = 1; @@ -240,7 +291,7 @@ // GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion // to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling -// +// // +protobuf.options.(gogoproto.goproto_stringer)=false message GroupVersionResource { optional string group = 1; @@ -250,27 +301,6 @@ optional string resource = 3; } -// Initializer is information about an initializer that has not yet completed. -message Initializer { - // name of the process that is responsible for initializing this object. - optional string name = 1; -} - -// Initializers tracks the progress of initialization. -message Initializers { - // Pending is a list of initializers that must execute in order before this object is visible. - // When the last pending initializer is removed, and no failing result is set, the initializers - // struct will be set to nil and the object is considered as initialized and visible to all - // clients. - // +patchMergeKey=name - // +patchStrategy=merge - repeated Initializer pending = 1; - - // If result is set with the Failure field, the object will be persisted to storage and then deleted, - // ensuring that other clients can observe the deletion. - optional Status result = 2; -} - // A label selector is a label query over a set of resources. The result of matchLabels and // matchExpressions are ANDed. An empty label selector matches all objects. A null // label selector matches no objects. @@ -309,7 +339,7 @@ // List holds a list of objects, which may not be known by the server. message List { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional ListMeta metadata = 1; @@ -323,6 +353,10 @@ // selfLink is a URL representing this object. // Populated by the system. // Read-only. + // + // DEPRECATED + // Kubernetes will stop propagating this field in 1.20 release and the field is planned + // to be removed in 1.21 release. // +optional optional string selfLink = 1; @@ -331,17 +365,30 @@ // Value must be treated as opaque by clients and passed unmodified back to the server. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency // +optional optional string resourceVersion = 2; // continue may be set if the user set a limit on the number of items returned, and indicates that // the server has more data available. The value is opaque and may be used to issue another request // to the endpoint that served this list to retrieve the next set of available objects. Continuing a - // list may not be possible if the server configuration has changed or more than a few minutes have - // passed. The resourceVersion field returned when using this continue value will be identical to - // the value in the first response. + // consistent list may not be possible if the server configuration has changed or more than a few + // minutes have passed. The resourceVersion field returned when using this continue value will be + // identical to the value in the first response, unless you have received this token from an error + // message. optional string continue = 3; + + // remainingItemCount is the number of subsequent items in the list which are not included in this + // list response. If the list request contained label or field selectors, then the number of + // remaining items is unknown and the field will be left unset and omitted during serialization. + // If the list is complete (either because it is not chunking or because this is the last chunk), + // then there are no more remaining items and this field will be left unset and omitted during + // serialization. + // Servers older than v1.15 do not set this field. + // The intended use of the remainingItemCount is *estimating* the size of a collection. Clients + // should not rely on the remainingItemCount to be set or to be exact. + // +optional + optional int64 remainingItemCount = 4; } // ListOptions is the query options to a standard REST list call. @@ -356,15 +403,25 @@ // +optional optional string fieldSelector = 2; - // If true, partially initialized resources are included in the response. - // +optional - optional bool includeUninitialized = 6; - // Watch for changes to the described resources and return them as a stream of // add, update, and remove notifications. Specify resourceVersion. // +optional optional bool watch = 3; + // allowWatchBookmarks requests watch events with type "BOOKMARK". + // Servers that do not implement bookmarks may ignore this flag and + // bookmarks are sent at the server's discretion. Clients should not + // assume bookmarks are returned at any specific interval, nor may they + // assume the server will send any BOOKMARK event during a session. + // If this is not a watch, this field is ignored. + // If the feature gate WatchBookmarks is not enabled in apiserver, + // this field is ignored. + // + // This field is beta. + // + // +optional + optional bool allowWatchBookmarks = 9; + // When specified with a watch call, shows changes that occur after that particular version of a resource. // Defaults to changes from the beginning of history. // When specified for list: @@ -387,7 +444,7 @@ // more results are available. Servers may choose not to support the limit argument and will return // all of the available results. If limit is specified and the continue field is empty, clients may // assume that no more results are available. This field is not supported if watch is true. - // + // // The server guarantees that the objects returned when using continue will be identical to issuing // a single list call without a limit - that is, no objects created, modified, or deleted after the // first request is issued will be included in any subsequent continued requests. This is sometimes @@ -397,19 +454,54 @@ // result was calculated is returned. optional int64 limit = 7; - // The continue option should be set when retrieving more results from the server. Since this value - // is server defined, clients may only use the continue value from a previous query result with - // identical query parameters (except for the value of continue) and the server may reject a continue - // value it does not recognize. If the specified continue value is no longer valid whether due to - // expiration (generally five to fifteen minutes) or a configuration change on the server the server - // will respond with a 410 ResourceExpired error indicating the client must restart their list without - // the continue field. This field is not supported when watch is true. Clients may start a watch from - // the last resourceVersion value returned by the server and not miss any modifications. + // The continue option should be set when retrieving more results from the server. Since this value is + // server defined, clients may only use the continue value from a previous query result with identical + // query parameters (except for the value of continue) and the server may reject a continue value it + // does not recognize. If the specified continue value is no longer valid whether due to expiration + // (generally five to fifteen minutes) or a configuration change on the server, the server will + // respond with a 410 ResourceExpired error together with a continue token. If the client needs a + // consistent list, it must restart their list without the continue field. Otherwise, the client may + // send another list request with the token received with the 410 error, the server will respond with + // a list starting from the next key, but from the latest snapshot, which is inconsistent from the + // previous list results - objects that are created, modified, or deleted after the first list request + // will be included in the response, as long as their keys are after the "next key". + // + // This field is not supported when watch is true. Clients may start a watch from the last + // resourceVersion value returned by the server and not miss any modifications. optional string continue = 8; } +// ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource +// that the fieldset applies to. +message ManagedFieldsEntry { + // Manager is an identifier of the workflow managing these fields. + optional string manager = 1; + + // Operation is the type of operation which lead to this ManagedFieldsEntry being created. + // The only valid values for this field are 'Apply' and 'Update'. + optional string operation = 2; + + // APIVersion defines the version of this resource that this field set + // applies to. The format is "group/version" just like the top-level + // APIVersion field. It is necessary to track the version of a field + // set because it cannot be automatically converted. + optional string apiVersion = 3; + + // Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply' + // +optional + optional Time time = 4; + + // FieldsType is the discriminator for the different fields format and version. + // There is currently only one possible value: "FieldsV1" + optional string fieldsType = 6; + + // FieldsV1 holds the first JSON version format as described in the "FieldsV1" type. + // +optional + optional FieldsV1 fieldsV1 = 7; +} + // MicroTime is version of Time with microsecond level precision. -// +// // +protobuf.options.marshal=false // +protobuf.as=Timestamp // +protobuf.options.(gogoproto.goproto_stringer)=false @@ -445,14 +537,14 @@ // The provided value has the same validation rules as the Name field, // and may be truncated by the length of the suffix required to make the value // unique on the server. - // + // // If this field is specified and the generated name exists, the server will // NOT return a 409 - instead, it will either return 201 Created or 500 with Reason // ServerTimeout indicating a unique name could not be found in the time allotted, and the client // should retry (optionally after the time indicated in the Retry-After header). - // + // // Applied only if Name is not specified. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency // +optional optional string generateName = 2; @@ -460,7 +552,7 @@ // equivalent to the "default" namespace, but "default" is the canonical representation. // Not all objects are required to be scoped to a namespace - the value of this field for // those objects will be empty. - // + // // Must be a DNS_LABEL. // Cannot be updated. // More info: http://kubernetes.io/docs/user-guide/namespaces @@ -470,13 +562,17 @@ // SelfLink is a URL representing this object. // Populated by the system. // Read-only. + // + // DEPRECATED + // Kubernetes will stop propagating this field in 1.20 release and the field is planned + // to be removed in 1.21 release. // +optional optional string selfLink = 4; // UID is the unique in time and space value for this object. It is typically generated by // the server on successful creation of a resource and is not allowed to change on PUT // operations. - // + // // Populated by the system. // Read-only. // More info: http://kubernetes.io/docs/user-guide/identifiers#uids @@ -488,11 +584,11 @@ // concurrency, change detection, and the watch operation on a resource or set of resources. // Clients must treat these values as opaque and passed unmodified back to the server. // They may only be valid for a particular resource or set of resources. - // + // // Populated by the system. // Read-only. // Value must be treated as opaque by clients and . - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency // +optional optional string resourceVersion = 6; @@ -504,11 +600,11 @@ // CreationTimestamp is a timestamp representing the server time when this object was // created. It is not guaranteed to be set in happens-before order across separate operations. // Clients may not set this value. It is represented in RFC3339 form and is in UTC. - // + // // Populated by the system. // Read-only. // Null for lists. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional Time creationTimestamp = 8; @@ -526,10 +622,10 @@ // exist after this timestamp, until an administrator or automated process can determine the // resource is fully terminated. // If not set, graceful deletion of the object has not been requested. - // + // // Populated by the system when a graceful deletion is requested. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional optional Time deletionTimestamp = 9; @@ -563,17 +659,6 @@ // +patchStrategy=merge repeated OwnerReference ownerReferences = 13; - // An initializer is a controller which enforces some system invariant at object creation time. - // This field is a list of initializers that have not yet acted on this object. If nil or empty, - // this object has been completely initialized. Otherwise, the object is considered uninitialized - // and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to - // observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. - // Only privileged users may set or modify this list. Once it is empty, it may not be modified further - // by any user. - optional Initializers initializers = 16; - // Must be empty before the object is deleted from the registry. Each entry // is an identifier for the responsible component that will remove the entry // from the list. If the deletionTimestamp of the object is non-nil, entries @@ -587,17 +672,28 @@ // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. // +optional optional string clusterName = 15; + + // ManagedFields maps workflow-id and version to the set of fields + // that are managed by that workflow. This is mostly for internal + // housekeeping, and users typically shouldn't need to set or + // understand this field. A workflow can be the user's name, a + // controller's name, or the name of a specific apply path like + // "ci-cd". The set of fields is always in the version that the + // workflow used when modifying the object. + // + // +optional + repeated ManagedFieldsEntry managedFields = 17; } // OwnerReference contains enough information to let you identify an owning -// object. Currently, an owning object must be in the same namespace, so there -// is no namespace field. +// object. An owning object must be in the same namespace as the dependent, or +// be cluster-scoped, so there is no namespace field. message OwnerReference { // API version of the referent. optional string apiVersion = 5; // Kind of the referent. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds optional string kind = 1; // Name of the referent. @@ -622,15 +718,69 @@ optional bool blockOwnerDeletion = 7; } +// PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients +// to get access to a particular ObjectMeta schema without knowing the details of the version. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +message PartialObjectMetadata { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + optional ObjectMeta metadata = 1; +} + +// PartialObjectMetadataList contains a list of objects containing only their metadata +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +message PartialObjectMetadataList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + optional ListMeta metadata = 1; + + // items contains each of the included items. + repeated PartialObjectMetadata items = 2; +} + // Patch is provided to give a concrete name and type to the Kubernetes PATCH request body. message Patch { } +// PatchOptions may be provided when patching an API object. +// PatchOptions is meant to be a superset of UpdateOptions. +message PatchOptions { + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 1; + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. Force + // flag must be unset for non-apply patch requests. + // +optional + optional bool force = 2; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required for apply requests + // (application/apply-patch) but optional for non-apply patch + // types (JsonPatch, MergePatch, StrategicMergePatch). + // +optional + optional string fieldManager = 3; +} + // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. message Preconditions { // Specifies the target UID. // +optional optional string uid = 1; + + // Specifies the target ResourceVersion + // +optional + optional string resourceVersion = 2; } // RootPaths lists the paths available at root. @@ -653,13 +803,13 @@ // Status is a return value for calls that don't return other objects. message Status { // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional ListMeta metadata = 1; // Status of the operation. // One of: "Success" or "Failure". - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional optional string status = 2; @@ -704,7 +854,7 @@ // Arrays are zero-indexed. Fields may appear more than once in an array of // causes due to fields having multiple errors. // Optional. - // + // // Examples: // "name" - the field "name" on the current resource // "items[0].name" - the field "name" on the first array entry in "items" @@ -730,7 +880,7 @@ // The kind attribute of the resource associated with the status StatusReason. // On some operations may differ from the requested resource Kind. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional string kind = 3; @@ -752,10 +902,20 @@ optional int32 retryAfterSeconds = 5; } +// TableOptions are used when a Table is requested by the caller. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +message TableOptions { + // includeObject decides whether to include each object along with its columnar information. + // Specifying "None" will return no object, specifying "Object" will return the full object contents, and + // specifying "Metadata" (the default) will return the object's metadata in the PartialObjectMetadata kind + // in version v1beta1 of the meta.k8s.io API group. + optional string includeObject = 1; +} + // Time is a wrapper around time.Time which supports correct // marshaling to YAML and JSON. Wrappers are provided for many // of the factory methods that the time package offers. -// +// // +protobuf.options.marshal=false // +protobuf.as=Timestamp // +protobuf.options.(gogoproto.goproto_stringer)=false @@ -791,27 +951,46 @@ // TypeMeta describes an individual object in an API response or request // with strings representing the type of the object and its API schema version. // Structures that are versioned or persisted should inline TypeMeta. -// +// // +k8s:deepcopy-gen=false message TypeMeta { // Kind is a string value representing the REST resource this object represents. // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. // In CamelCase. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional optional string kind = 1; // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources // +optional optional string apiVersion = 2; } +// UpdateOptions may be provided when updating an API object. +// All fields in UpdateOptions should also be present in PatchOptions. +message UpdateOptions { + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 1; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + optional string fieldManager = 2; +} + // Verbs masks the value so protobuf can generate -// +// // +protobuf.nullable=true // +protobuf.options.(gogoproto.goproto_stringer)=false message Verbs { @@ -821,7 +1000,7 @@ } // Event represents a single event to a watched resource. -// +// // +protobuf=true // +k8s:deepcopy-gen=true // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,9 @@ package v1 import ( + "bytes" + "encoding/json" + "errors" "fmt" "k8s.io/apimachinery/pkg/fields" @@ -227,8 +230,51 @@ return &Preconditions{UID: &u} } +// NewRVDeletionPrecondition returns a DeleteOptions with a ResourceVersion precondition set. +func NewRVDeletionPrecondition(rv string) *DeleteOptions { + p := Preconditions{ResourceVersion: &rv} + return &DeleteOptions{Preconditions: &p} +} + // HasObjectMetaSystemFieldValues returns true if fields that are managed by the system on ObjectMeta have values. func HasObjectMetaSystemFieldValues(meta Object) bool { return !meta.GetCreationTimestamp().Time.IsZero() || len(meta.GetUID()) != 0 } + +// ResetObjectMetaForStatus forces the meta fields for a status update to match the meta fields +// for a pre-existing object. This is opt-in for new objects with Status subresource. +func ResetObjectMetaForStatus(meta, existingMeta Object) { + meta.SetDeletionTimestamp(existingMeta.GetDeletionTimestamp()) + meta.SetGeneration(existingMeta.GetGeneration()) + meta.SetSelfLink(existingMeta.GetSelfLink()) + meta.SetLabels(existingMeta.GetLabels()) + meta.SetAnnotations(existingMeta.GetAnnotations()) + meta.SetFinalizers(existingMeta.GetFinalizers()) + meta.SetOwnerReferences(existingMeta.GetOwnerReferences()) + meta.SetManagedFields(existingMeta.GetManagedFields()) +} + +// MarshalJSON implements json.Marshaler +// MarshalJSON may get called on pointers or values, so implement MarshalJSON on value. +// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go +func (f FieldsV1) MarshalJSON() ([]byte, error) { + if f.Raw == nil { + return []byte("null"), nil + } + return f.Raw, nil +} + +// UnmarshalJSON implements json.Unmarshaler +func (f *FieldsV1) UnmarshalJSON(b []byte) error { + if f == nil { + return errors.New("metav1.Fields: UnmarshalJSON on nil pointer") + } + if !bytes.Equal(b, []byte("null")) { + f.Raw = append(f.Raw[0:0], b...) + } + return nil +} + +var _ json.Marshaler = FieldsV1{} +var _ json.Unmarshaler = &FieldsV1{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/meta.go 2020-12-10 21:46:52.000000000 +0000 @@ -55,14 +55,14 @@ SetLabels(labels map[string]string) GetAnnotations() map[string]string SetAnnotations(annotations map[string]string) - GetInitializers() *Initializers - SetInitializers(initializers *Initializers) GetFinalizers() []string SetFinalizers(finalizers []string) GetOwnerReferences() []OwnerReference SetOwnerReferences([]OwnerReference) GetClusterName() string SetClusterName(clusterName string) + GetManagedFields() []ManagedFieldsEntry + SetManagedFields(managedFields []ManagedFieldsEntry) } // ListMetaAccessor retrieves the list interface from an object @@ -92,6 +92,8 @@ SetSelfLink(selfLink string) GetContinue() string SetContinue(c string) + GetRemainingItemCount() *int64 + SetRemainingItemCount(c *int64) } // Type exposes the type and APIVersion of versioned or internal API objects. @@ -103,12 +105,16 @@ SetKind(kind string) } +var _ ListInterface = &ListMeta{} + func (meta *ListMeta) GetResourceVersion() string { return meta.ResourceVersion } func (meta *ListMeta) SetResourceVersion(version string) { meta.ResourceVersion = version } func (meta *ListMeta) GetSelfLink() string { return meta.SelfLink } func (meta *ListMeta) SetSelfLink(selfLink string) { meta.SelfLink = selfLink } func (meta *ListMeta) GetContinue() string { return meta.Continue } func (meta *ListMeta) SetContinue(c string) { meta.Continue = c } +func (meta *ListMeta) GetRemainingItemCount() *int64 { return meta.RemainingItemCount } +func (meta *ListMeta) SetRemainingItemCount(c *int64) { meta.RemainingItemCount = c } func (obj *TypeMeta) GetObjectKind() schema.ObjectKind { return obj } @@ -158,59 +164,15 @@ func (meta *ObjectMeta) SetLabels(labels map[string]string) { meta.Labels = labels } func (meta *ObjectMeta) GetAnnotations() map[string]string { return meta.Annotations } func (meta *ObjectMeta) SetAnnotations(annotations map[string]string) { meta.Annotations = annotations } -func (meta *ObjectMeta) GetInitializers() *Initializers { return meta.Initializers } -func (meta *ObjectMeta) SetInitializers(initializers *Initializers) { meta.Initializers = initializers } func (meta *ObjectMeta) GetFinalizers() []string { return meta.Finalizers } func (meta *ObjectMeta) SetFinalizers(finalizers []string) { meta.Finalizers = finalizers } - -func (meta *ObjectMeta) GetOwnerReferences() []OwnerReference { - if meta.OwnerReferences == nil { - return nil - } - ret := make([]OwnerReference, len(meta.OwnerReferences)) - for i := 0; i < len(meta.OwnerReferences); i++ { - ret[i].Kind = meta.OwnerReferences[i].Kind - ret[i].Name = meta.OwnerReferences[i].Name - ret[i].UID = meta.OwnerReferences[i].UID - ret[i].APIVersion = meta.OwnerReferences[i].APIVersion - if meta.OwnerReferences[i].Controller != nil { - value := *meta.OwnerReferences[i].Controller - ret[i].Controller = &value - } - if meta.OwnerReferences[i].BlockOwnerDeletion != nil { - value := *meta.OwnerReferences[i].BlockOwnerDeletion - ret[i].BlockOwnerDeletion = &value - } - } - return ret -} - +func (meta *ObjectMeta) GetOwnerReferences() []OwnerReference { return meta.OwnerReferences } func (meta *ObjectMeta) SetOwnerReferences(references []OwnerReference) { - if references == nil { - meta.OwnerReferences = nil - return - } - newReferences := make([]OwnerReference, len(references)) - for i := 0; i < len(references); i++ { - newReferences[i].Kind = references[i].Kind - newReferences[i].Name = references[i].Name - newReferences[i].UID = references[i].UID - newReferences[i].APIVersion = references[i].APIVersion - if references[i].Controller != nil { - value := *references[i].Controller - newReferences[i].Controller = &value - } - if references[i].BlockOwnerDeletion != nil { - value := *references[i].BlockOwnerDeletion - newReferences[i].BlockOwnerDeletion = &value - } - } - meta.OwnerReferences = newReferences -} - -func (meta *ObjectMeta) GetClusterName() string { - return meta.ClusterName + meta.OwnerReferences = references } -func (meta *ObjectMeta) SetClusterName(clusterName string) { - meta.ClusterName = clusterName +func (meta *ObjectMeta) GetClusterName() string { return meta.ClusterName } +func (meta *ObjectMeta) SetClusterName(clusterName string) { meta.ClusterName = clusterName } +func (meta *ObjectMeta) GetManagedFields() []ManagedFieldsEntry { return meta.ManagedFields } +func (meta *ObjectMeta) SetManagedFields(managedFields []ManagedFieldsEntry) { + meta.ManagedFields = managedFields } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go 2020-12-10 21:46:52.000000000 +0000 @@ -41,11 +41,6 @@ *out = *t } -// String returns the representation of the time. -func (t MicroTime) String() string { - return t.Time.String() -} - // NewMicroTime returns a wrapped instance of the provided time func NewMicroTime(time time.Time) MicroTime { return MicroTime{time} @@ -72,22 +67,40 @@ // Before reports whether the time instant t is before u. func (t *MicroTime) Before(u *MicroTime) bool { - return t.Time.Before(u.Time) + if t != nil && u != nil { + return t.Time.Before(u.Time) + } + return false } // Equal reports whether the time instant t is equal to u. func (t *MicroTime) Equal(u *MicroTime) bool { - return t.Time.Equal(u.Time) + if t == nil && u == nil { + return true + } + if t != nil && u != nil { + return t.Time.Equal(u.Time) + } + return false } // BeforeTime reports whether the time instant t is before second-lever precision u. func (t *MicroTime) BeforeTime(u *Time) bool { - return t.Time.Before(u.Time) + if t != nil && u != nil { + return t.Time.Before(u.Time) + } + return false } // EqualTime reports whether the time instant t is equal to second-lever precision u. func (t *MicroTime) EqualTime(u *Time) bool { - return t.Time.Equal(u.Time) + if t == nil && u == nil { + return true + } + if t != nil && u != nil { + return t.Time.Equal(u.Time) + } + return false } // UnixMicro returns the local time corresponding to the given Unix time diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_proto.go 2020-12-10 21:46:52.000000000 +0000 @@ -70,3 +70,11 @@ } return m.ProtoMicroTime().MarshalTo(data) } + +// MarshalToSizedBuffer implements the protobuf marshalling interface. +func (m *MicroTime) MarshalToSizedBuffer(data []byte) (int, error) { + if m == nil || m.Time.IsZero() { + return 0, nil + } + return m.ProtoMicroTime().MarshalToSizedBuffer(data) +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" ) // GroupName is the group name for this API. @@ -52,14 +53,16 @@ &ExportOptions{}, &GetOptions{}, &DeleteOptions{}, + &CreateOptions{}, + &UpdateOptions{}, + &PatchOptions{}, ) - scheme.AddConversionFuncs( - Convert_versioned_Event_to_watch_Event, - Convert_versioned_InternalEvent_to_versioned_Event, - Convert_watch_Event_to_versioned_Event, - Convert_versioned_Event_to_versioned_InternalEvent, - ) - + utilruntime.Must(scheme.AddConversionFuncs( + Convert_v1_WatchEvent_To_watch_Event, + Convert_v1_InternalEvent_To_v1_WatchEvent, + Convert_watch_Event_To_v1_WatchEvent, + Convert_v1_WatchEvent_To_v1_InternalEvent, + )) // Register Unversioned types under their own special group scheme.AddUnversionedTypes(Unversioned, &Status{}, @@ -70,8 +73,8 @@ ) // register manually. This usually goes through the SchemeBuilder, which we cannot use here. - AddConversionFuncs(scheme) - RegisterDefaults(scheme) + utilruntime.Must(AddConversionFuncs(scheme)) + utilruntime.Must(RegisterDefaults(scheme)) } // scheme is the registry for the common types that adhere to the meta v1 API spec. @@ -86,8 +89,28 @@ &ExportOptions{}, &GetOptions{}, &DeleteOptions{}, + &CreateOptions{}, + &UpdateOptions{}, + &PatchOptions{}, ) + if err := AddMetaToScheme(scheme); err != nil { + panic(err) + } + // register manually. This usually goes through the SchemeBuilder, which we cannot use here. - RegisterDefaults(scheme) + utilruntime.Must(RegisterDefaults(scheme)) +} + +func AddMetaToScheme(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Table{}, + &TableOptions{}, + &PartialObjectMetadata{}, + &PartialObjectMetadataList{}, + ) + + return scheme.AddConversionFuncs( + Convert_Slice_string_To_v1_IncludeObjectPolicy, + ) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,7 @@ "encoding/json" "time" - "github.com/google/gofuzz" + fuzz "github.com/google/gofuzz" ) // Time is a wrapper around time.Time which supports correct @@ -41,11 +41,6 @@ *out = *t } -// String returns the representation of the time. -func (t Time) String() string { - return t.Time.String() -} - // NewTime returns a wrapped instance of the provided time func NewTime(time time.Time) Time { return Time{time} @@ -72,7 +67,10 @@ // Before reports whether the time instant t is before u. func (t *Time) Before(u *Time) bool { - return t.Time.Before(u.Time) + if t != nil && u != nil { + return t.Time.Before(u.Time) + } + return false } // Equal reports whether the time instant t is equal to u. @@ -147,8 +145,12 @@ // Encode unset/nil objects as JSON's "null". return []byte("null"), nil } - - return json.Marshal(t.UTC().Format(time.RFC3339)) + buf := make([]byte, 0, len(time.RFC3339)+2) + buf = append(buf, '"') + // time cannot contain non escapable JSON characters + buf = t.UTC().AppendFormat(buf, time.RFC3339) + buf = append(buf, '"') + return buf, nil } // OpenAPISchemaType is used by the kube-openapi generator when constructing diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto.go 2020-12-10 21:46:52.000000000 +0000 @@ -75,7 +75,7 @@ return nil } -// Marshal implements the protobuf marshalling interface. +// Marshal implements the protobuf marshaling interface. func (m *Time) Marshal() (data []byte, err error) { if m == nil || m.Time.IsZero() { return nil, nil @@ -83,10 +83,18 @@ return m.ProtoTime().Marshal() } -// MarshalTo implements the protobuf marshalling interface. +// MarshalTo implements the protobuf marshaling interface. func (m *Time) MarshalTo(data []byte) (int, error) { if m == nil || m.Time.IsZero() { return 0, nil } return m.ProtoTime().MarshalTo(data) } + +// MarshalToSizedBuffer implements the protobuf reverse marshaling interface. +func (m *Time) MarshalToSizedBuffer(data []byte) (int, error) { + if m == nil || m.Time.IsZero() { + return 0, nil + } + return m.ProtoTime().MarshalToSizedBuffer(data) +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -43,14 +43,14 @@ // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. // In CamelCase. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources // +optional APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"` } @@ -61,6 +61,10 @@ // selfLink is a URL representing this object. // Populated by the system. // Read-only. + // + // DEPRECATED + // Kubernetes will stop propagating this field in 1.20 release and the field is planned + // to be removed in 1.21 release. // +optional SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,1,opt,name=selfLink"` @@ -69,17 +73,30 @@ // Value must be treated as opaque by clients and passed unmodified back to the server. // Populated by the system. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency // +optional ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,2,opt,name=resourceVersion"` // continue may be set if the user set a limit on the number of items returned, and indicates that // the server has more data available. The value is opaque and may be used to issue another request // to the endpoint that served this list to retrieve the next set of available objects. Continuing a - // list may not be possible if the server configuration has changed or more than a few minutes have - // passed. The resourceVersion field returned when using this continue value will be identical to - // the value in the first response. + // consistent list may not be possible if the server configuration has changed or more than a few + // minutes have passed. The resourceVersion field returned when using this continue value will be + // identical to the value in the first response, unless you have received this token from an error + // message. Continue string `json:"continue,omitempty" protobuf:"bytes,3,opt,name=continue"` + + // remainingItemCount is the number of subsequent items in the list which are not included in this + // list response. If the list request contained label or field selectors, then the number of + // remaining items is unknown and the field will be left unset and omitted during serialization. + // If the list is complete (either because it is not chunking or because this is the last chunk), + // then there are no more remaining items and this field will be left unset and omitted during + // serialization. + // Servers older than v1.15 do not set this field. + // The intended use of the remainingItemCount is *estimating* the size of a collection. Clients + // should not rely on the remainingItemCount to be set or to be exact. + // +optional + RemainingItemCount *int64 `json:"remainingItemCount,omitempty" protobuf:"bytes,4,opt,name=remainingItemCount"` } // These are internal finalizer values for Kubernetes-like APIs, must be qualified name unless defined here @@ -114,7 +131,7 @@ // should retry (optionally after the time indicated in the Retry-After header). // // Applied only if Name is not specified. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency // +optional GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"` @@ -132,6 +149,10 @@ // SelfLink is a URL representing this object. // Populated by the system. // Read-only. + // + // DEPRECATED + // Kubernetes will stop propagating this field in 1.20 release and the field is planned + // to be removed in 1.21 release. // +optional SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"` @@ -154,7 +175,7 @@ // Populated by the system. // Read-only. // Value must be treated as opaque by clients and . - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency // +optional ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"` @@ -170,7 +191,7 @@ // Populated by the system. // Read-only. // Null for lists. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional CreationTimestamp Time `json:"creationTimestamp,omitempty" protobuf:"bytes,8,opt,name=creationTimestamp"` @@ -191,7 +212,7 @@ // // Populated by the system when a graceful deletion is requested. // Read-only. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata // +optional DeletionTimestamp *Time `json:"deletionTimestamp,omitempty" protobuf:"bytes,9,opt,name=deletionTimestamp"` @@ -225,17 +246,6 @@ // +patchStrategy=merge OwnerReferences []OwnerReference `json:"ownerReferences,omitempty" patchStrategy:"merge" patchMergeKey:"uid" protobuf:"bytes,13,rep,name=ownerReferences"` - // An initializer is a controller which enforces some system invariant at object creation time. - // This field is a list of initializers that have not yet acted on this object. If nil or empty, - // this object has been completely initialized. Otherwise, the object is considered uninitialized - // and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to - // observe uninitialized objects. - // - // When an object is created, the system will populate this list with the current set of initializers. - // Only privileged users may set or modify this list. Once it is empty, it may not be modified further - // by any user. - Initializers *Initializers `json:"initializers,omitempty" protobuf:"bytes,16,opt,name=initializers"` - // Must be empty before the object is deleted from the registry. Each entry // is an identifier for the responsible component that will remove the entry // from the list. If the deletionTimestamp of the object is non-nil, entries @@ -249,26 +259,17 @@ // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. // +optional ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"` -} -// Initializers tracks the progress of initialization. -type Initializers struct { - // Pending is a list of initializers that must execute in order before this object is visible. - // When the last pending initializer is removed, and no failing result is set, the initializers - // struct will be set to nil and the object is considered as initialized and visible to all - // clients. - // +patchMergeKey=name - // +patchStrategy=merge - Pending []Initializer `json:"pending" protobuf:"bytes,1,rep,name=pending" patchStrategy:"merge" patchMergeKey:"name"` - // If result is set with the Failure field, the object will be persisted to storage and then deleted, - // ensuring that other clients can observe the deletion. - Result *Status `json:"result,omitempty" protobuf:"bytes,2,opt,name=result"` -} - -// Initializer is information about an initializer that has not yet completed. -type Initializer struct { - // name of the process that is responsible for initializing this object. - Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // ManagedFields maps workflow-id and version to the set of fields + // that are managed by that workflow. This is mostly for internal + // housekeeping, and users typically shouldn't need to set or + // understand this field. A workflow can be the user's name, a + // controller's name, or the name of a specific apply path like + // "ci-cd". The set of fields is always in the version that the + // workflow used when modifying the object. + // + // +optional + ManagedFields []ManagedFieldsEntry `json:"managedFields,omitempty" protobuf:"bytes,17,rep,name=managedFields"` } const ( @@ -285,13 +286,13 @@ ) // OwnerReference contains enough information to let you identify an owning -// object. Currently, an owning object must be in the same namespace, so there -// is no namespace field. +// object. An owning object must be in the same namespace as the dependent, or +// be cluster-scoped, so there is no namespace field. type OwnerReference struct { // API version of the referent. APIVersion string `json:"apiVersion" protobuf:"bytes,5,opt,name=apiVersion"` // Kind of the referent. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` // Name of the referent. // More info: http://kubernetes.io/docs/user-guide/identifiers#names @@ -326,13 +327,27 @@ // Defaults to everything. // +optional FieldSelector string `json:"fieldSelector,omitempty" protobuf:"bytes,2,opt,name=fieldSelector"` - // If true, partially initialized resources are included in the response. - // +optional - IncludeUninitialized bool `json:"includeUninitialized,omitempty" protobuf:"varint,6,opt,name=includeUninitialized"` + + // +k8s:deprecated=includeUninitialized,protobuf=6 + // Watch for changes to the described resources and return them as a stream of // add, update, and remove notifications. Specify resourceVersion. // +optional Watch bool `json:"watch,omitempty" protobuf:"varint,3,opt,name=watch"` + // allowWatchBookmarks requests watch events with type "BOOKMARK". + // Servers that do not implement bookmarks may ignore this flag and + // bookmarks are sent at the server's discretion. Clients should not + // assume bookmarks are returned at any specific interval, nor may they + // assume the server will send any BOOKMARK event during a session. + // If this is not a watch, this field is ignored. + // If the feature gate WatchBookmarks is not enabled in apiserver, + // this field is ignored. + // + // This field is beta. + // + // +optional + AllowWatchBookmarks bool `json:"allowWatchBookmarks,omitempty" protobuf:"varint,9,opt,name=allowWatchBookmarks"` + // When specified with a watch call, shows changes that occur after that particular version of a resource. // Defaults to changes from the beginning of history. // When specified for list: @@ -363,25 +378,34 @@ // updated during a chunked list the version of the object that was present at the time the first list // result was calculated is returned. Limit int64 `json:"limit,omitempty" protobuf:"varint,7,opt,name=limit"` - // The continue option should be set when retrieving more results from the server. Since this value - // is server defined, clients may only use the continue value from a previous query result with - // identical query parameters (except for the value of continue) and the server may reject a continue - // value it does not recognize. If the specified continue value is no longer valid whether due to - // expiration (generally five to fifteen minutes) or a configuration change on the server the server - // will respond with a 410 ResourceExpired error indicating the client must restart their list without - // the continue field. This field is not supported when watch is true. Clients may start a watch from - // the last resourceVersion value returned by the server and not miss any modifications. + // The continue option should be set when retrieving more results from the server. Since this value is + // server defined, clients may only use the continue value from a previous query result with identical + // query parameters (except for the value of continue) and the server may reject a continue value it + // does not recognize. If the specified continue value is no longer valid whether due to expiration + // (generally five to fifteen minutes) or a configuration change on the server, the server will + // respond with a 410 ResourceExpired error together with a continue token. If the client needs a + // consistent list, it must restart their list without the continue field. Otherwise, the client may + // send another list request with the token received with the 410 error, the server will respond with + // a list starting from the next key, but from the latest snapshot, which is inconsistent from the + // previous list results - objects that are created, modified, or deleted after the first list request + // will be included in the response, as long as their keys are after the "next key". + // + // This field is not supported when watch is true. Clients may start a watch from the last + // resourceVersion value returned by the server and not miss any modifications. Continue string `json:"continue,omitempty" protobuf:"bytes,8,opt,name=continue"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ExportOptions is the query options to the standard REST get call. +// Deprecated. Planned for removal in 1.18. type ExportOptions struct { TypeMeta `json:",inline"` // Should this value be exported. Export strips fields that a user can not specify. + // Deprecated. Planned for removal in 1.18. Export bool `json:"export" protobuf:"varint,1,opt,name=export"` // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. + // Deprecated. Planned for removal in 1.18. Exact bool `json:"exact" protobuf:"varint,2,opt,name=exact"` } @@ -395,9 +419,7 @@ // - if it's 0, then we simply return what we currently have in cache, no guarantee; // - if set to non zero, then the result is at least as fresh as given rv. ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,1,opt,name=resourceVersion"` - // If true, partially initialized resources are included in the response. - // +optional - IncludeUninitialized bool `json:"includeUninitialized,omitempty" protobuf:"varint,2,opt,name=includeUninitialized"` + // +k8s:deprecated=includeUninitialized,protobuf=2 } // DeletionPropagation decides if a deletion will propagate to the dependents of @@ -418,6 +440,12 @@ DeletePropagationForeground DeletionPropagation = "Foreground" ) +const ( + // DryRunAll means to complete all processing stages, but don't + // persist changes to storage. + DryRunAll = "All" +) + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // DeleteOptions may be provided when deleting an API object. @@ -453,6 +481,92 @@ // foreground. // +optional PropagationPolicy *DeletionPropagation `json:"propagationPolicy,omitempty" protobuf:"varint,4,opt,name=propagationPolicy"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,5,rep,name=dryRun"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// CreateOptions may be provided when creating an API object. +type CreateOptions struct { + TypeMeta `json:",inline"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + // +k8s:deprecated=includeUninitialized,protobuf=2 + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,3,name=fieldManager"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PatchOptions may be provided when patching an API object. +// PatchOptions is meant to be a superset of UpdateOptions. +type PatchOptions struct { + TypeMeta `json:",inline"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. Force + // flag must be unset for non-apply patch requests. + // +optional + Force *bool `json:"force,omitempty" protobuf:"varint,2,opt,name=force"` + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required for apply requests + // (application/apply-patch) but optional for non-apply patch + // types (JsonPatch, MergePatch, StrategicMergePatch). + // +optional + FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,3,name=fieldManager"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// UpdateOptions may be provided when updating an API object. +// All fields in UpdateOptions should also be present in PatchOptions. +type UpdateOptions struct { + TypeMeta `json:",inline"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. + // +optional + FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,2,name=fieldManager"` } // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. @@ -460,6 +574,9 @@ // Specifies the target UID. // +optional UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"` + // Specifies the target ResourceVersion + // +optional + ResourceVersion *string `json:"resourceVersion,omitempty" protobuf:"bytes,2,opt,name=resourceVersion"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -468,13 +585,13 @@ type Status struct { TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Status of the operation. // One of: "Success" or "Failure". - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status // +optional Status string `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` // A human-readable description of the status of this operation. @@ -513,7 +630,7 @@ Group string `json:"group,omitempty" protobuf:"bytes,2,opt,name=group"` // The kind attribute of the resource associated with the status StatusReason. // On some operations may differ from the requested resource Kind. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional Kind string `json:"kind,omitempty" protobuf:"bytes,3,opt,name=kind"` // UID of the resource. @@ -645,11 +762,13 @@ // doesn't make any sense, for example deleting a read-only object. This is different than // StatusReasonInvalid above which indicates that the API call could possibly succeed, but the // data was invalid. API calls that return BadRequest can never succeed. + // Status code 400 StatusReasonBadRequest StatusReason = "BadRequest" // StatusReasonMethodNotAllowed means that the action the client attempted to perform on the // resource was not supported by the code - for instance, attempting to delete a resource that // can only be created. API calls that return MethodNotAllowed can never succeed. + // Status code 405 StatusReasonMethodNotAllowed StatusReason = "MethodNotAllowed" // StatusReasonNotAcceptable means that the accept types indicated by the client were not acceptable @@ -737,6 +856,9 @@ // without the expected return type. The presence of this cause indicates the error may be // due to an intervening proxy or the server software malfunctioning. CauseTypeUnexpectedServerResponse CauseType = "UnexpectedServerResponse" + // FieldManagerConflict is used to report when another client claims to manage this field, + // It should only be returned for a request using server-side apply. + CauseTypeFieldManagerConflict CauseType = "FieldManagerConflict" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -745,7 +867,7 @@ type List struct { TypeMeta `json:",inline"` // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds // +optional ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` @@ -851,6 +973,15 @@ ShortNames []string `json:"shortNames,omitempty" protobuf:"bytes,5,rep,name=shortNames"` // categories is a list of the grouped resources this resource belongs to (e.g. 'all') Categories []string `json:"categories,omitempty" protobuf:"bytes,7,rep,name=categories"` + // The hash value of the storage version, the version this resource is + // converted to when written to the data store. Value must be treated + // as opaque by clients. Only equality comparison on the value is valid. + // This is an alpha feature and may change or be removed in the future. + // The field is populated by the apiserver only if the + // StorageVersionHash feature gate is enabled. + // This field will remain optional even if it graduates. + // +optional + StorageVersionHash string `json:"storageVersionHash,omitempty" protobuf:"bytes,10,opt,name=storageVersionHash"` } // Verbs masks the value so protobuf can generate @@ -952,3 +1083,216 @@ LabelSelectorOpExists LabelSelectorOperator = "Exists" LabelSelectorOpDoesNotExist LabelSelectorOperator = "DoesNotExist" ) + +// ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource +// that the fieldset applies to. +type ManagedFieldsEntry struct { + // Manager is an identifier of the workflow managing these fields. + Manager string `json:"manager,omitempty" protobuf:"bytes,1,opt,name=manager"` + // Operation is the type of operation which lead to this ManagedFieldsEntry being created. + // The only valid values for this field are 'Apply' and 'Update'. + Operation ManagedFieldsOperationType `json:"operation,omitempty" protobuf:"bytes,2,opt,name=operation,casttype=ManagedFieldsOperationType"` + // APIVersion defines the version of this resource that this field set + // applies to. The format is "group/version" just like the top-level + // APIVersion field. It is necessary to track the version of a field + // set because it cannot be automatically converted. + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` + // Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply' + // +optional + Time *Time `json:"time,omitempty" protobuf:"bytes,4,opt,name=time"` + + // Fields is tombstoned to show why 5 is a reserved protobuf tag. + //Fields *Fields `json:"fields,omitempty" protobuf:"bytes,5,opt,name=fields,casttype=Fields"` + + // FieldsType is the discriminator for the different fields format and version. + // There is currently only one possible value: "FieldsV1" + FieldsType string `json:"fieldsType,omitempty" protobuf:"bytes,6,opt,name=fieldsType"` + // FieldsV1 holds the first JSON version format as described in the "FieldsV1" type. + // +optional + FieldsV1 *FieldsV1 `json:"fieldsV1,omitempty" protobuf:"bytes,7,opt,name=fieldsV1"` +} + +// ManagedFieldsOperationType is the type of operation which lead to a ManagedFieldsEntry being created. +type ManagedFieldsOperationType string + +const ( + ManagedFieldsOperationApply ManagedFieldsOperationType = "Apply" + ManagedFieldsOperationUpdate ManagedFieldsOperationType = "Update" +) + +// FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format. +// +// Each key is either a '.' representing the field itself, and will always map to an empty set, +// or a string representing a sub-field or item. The string will follow one of these four formats: +// 'f:', where is the name of a field in a struct, or key in a map +// 'v:', where is the exact json formatted value of a list item +// 'i:', where is position of a item in a list +// 'k:', where is a map of a list item's key fields to their unique values +// If a key maps to an empty Fields value, the field that key represents is part of the set. +// +// The exact format is defined in sigs.k8s.io/structured-merge-diff +type FieldsV1 struct { + // Raw is the underlying serialization of this object. + Raw []byte `json:"-" protobuf:"bytes,1,opt,name=Raw"` +} + +// TODO: Table does not generate to protobuf because of the interface{} - fix protobuf +// generation to support a meta type that can accept any valid JSON. This can be introduced +// in a v1 because clients a) receive an error if they try to access proto today, and b) +// once introduced they would be able to gracefully switch over to using it. + +// Table is a tabular representation of a set of API resources. The server transforms the +// object into a set of preferred columns for quickly reviewing the objects. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +protobuf=false +type Table struct { + TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + ListMeta `json:"metadata,omitempty"` + + // columnDefinitions describes each column in the returned items array. The number of cells per row + // will always match the number of column definitions. + ColumnDefinitions []TableColumnDefinition `json:"columnDefinitions"` + // rows is the list of items in the table. + Rows []TableRow `json:"rows"` +} + +// TableColumnDefinition contains information about a column returned in the Table. +// +protobuf=false +type TableColumnDefinition struct { + // name is a human readable name for the column. + Name string `json:"name"` + // type is an OpenAPI type definition for this column, such as number, integer, string, or + // array. + // See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more. + Type string `json:"type"` + // format is an optional OpenAPI type modifier for this column. A format modifies the type and + // imposes additional rules, like date or time formatting for a string. The 'name' format is applied + // to the primary identifier column which has type 'string' to assist in clients identifying column + // is the resource name. + // See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more. + Format string `json:"format"` + // description is a human readable description of this column. + Description string `json:"description"` + // priority is an integer defining the relative importance of this column compared to others. Lower + // numbers are considered higher priority. Columns that may be omitted in limited space scenarios + // should be given a higher priority. + Priority int32 `json:"priority"` +} + +// TableRow is an individual row in a table. +// +protobuf=false +type TableRow struct { + // cells will be as wide as the column definitions array and may contain strings, numbers (float64 or + // int64), booleans, simple maps, lists, or null. See the type field of the column definition for a + // more detailed description. + Cells []interface{} `json:"cells"` + // conditions describe additional status of a row that are relevant for a human user. These conditions + // apply to the row, not to the object, and will be specific to table output. The only defined + // condition type is 'Completed', for a row that indicates a resource that has run to completion and + // can be given less visual priority. + // +optional + Conditions []TableRowCondition `json:"conditions,omitempty"` + // This field contains the requested additional information about each object based on the includeObject + // policy when requesting the Table. If "None", this field is empty, if "Object" this will be the + // default serialization of the object for the current API version, and if "Metadata" (the default) will + // contain the object metadata. Check the returned kind and apiVersion of the object before parsing. + // The media type of the object will always match the enclosing list - if this as a JSON table, these + // will be JSON encoded objects. + // +optional + Object runtime.RawExtension `json:"object,omitempty"` +} + +// TableRowCondition allows a row to be marked with additional information. +// +protobuf=false +type TableRowCondition struct { + // Type of row condition. The only defined value is 'Completed' indicating that the + // object this row represents has reached a completed state and may be given less visual + // priority than other rows. Clients are not required to honor any conditions but should + // be consistent where possible about handling the conditions. + Type RowConditionType `json:"type"` + // Status of the condition, one of True, False, Unknown. + Status ConditionStatus `json:"status"` + // (brief) machine readable reason for the condition's last transition. + // +optional + Reason string `json:"reason,omitempty"` + // Human readable message indicating details about last transition. + // +optional + Message string `json:"message,omitempty"` +} + +type RowConditionType string + +// These are valid conditions of a row. This list is not exhaustive and new conditions may be +// included by other resources. +const ( + // RowCompleted means the underlying resource has reached completion and may be given less + // visual priority than other resources. + RowCompleted RowConditionType = "Completed" +) + +type ConditionStatus string + +// These are valid condition statuses. "ConditionTrue" means a resource is in the condition. +// "ConditionFalse" means a resource is not in the condition. "ConditionUnknown" means kubernetes +// can't decide if a resource is in the condition or not. In the future, we could add other +// intermediate conditions, e.g. ConditionDegraded. +const ( + ConditionTrue ConditionStatus = "True" + ConditionFalse ConditionStatus = "False" + ConditionUnknown ConditionStatus = "Unknown" +) + +// IncludeObjectPolicy controls which portion of the object is returned with a Table. +type IncludeObjectPolicy string + +const ( + // IncludeNone returns no object. + IncludeNone IncludeObjectPolicy = "None" + // IncludeMetadata serializes the object containing only its metadata field. + IncludeMetadata IncludeObjectPolicy = "Metadata" + // IncludeObject contains the full object. + IncludeObject IncludeObjectPolicy = "Object" +) + +// TableOptions are used when a Table is requested by the caller. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type TableOptions struct { + TypeMeta `json:",inline"` + + // NoHeaders is only exposed for internal callers. It is not included in our OpenAPI definitions + // and may be removed as a field in a future release. + NoHeaders bool `json:"-"` + + // includeObject decides whether to include each object along with its columnar information. + // Specifying "None" will return no object, specifying "Object" will return the full object contents, and + // specifying "Metadata" (the default) will return the object's metadata in the PartialObjectMetadata kind + // in version v1beta1 of the meta.k8s.io API group. + IncludeObject IncludeObjectPolicy `json:"includeObject,omitempty" protobuf:"bytes,1,opt,name=includeObject,casttype=IncludeObjectPolicy"` +} + +// PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients +// to get access to a particular ObjectMeta schema without knowing the details of the version. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type PartialObjectMetadata struct { + TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata + // +optional + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` +} + +// PartialObjectMetadataList contains a list of objects containing only their metadata +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type PartialObjectMetadataList struct { + TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + // +optional + ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items contains each of the included items. + Items []PartialObjectMetadata `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go 2020-12-10 21:46:52.000000000 +0000 @@ -49,16 +49,17 @@ } var map_APIResource = map[string]string{ - "": "APIResource specifies the name of a resource and whether it is namespaced.", - "name": "name is the plural name of the resource.", - "singularName": "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", - "namespaced": "namespaced indicates if a resource is namespaced or not.", - "group": "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", - "version": "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", - "kind": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", - "verbs": "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", - "shortNames": "shortNames is a list of suggested short names of the resource.", - "categories": "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", + "": "APIResource specifies the name of a resource and whether it is namespaced.", + "name": "name is the plural name of the resource.", + "singularName": "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", + "namespaced": "namespaced indicates if a resource is namespaced or not.", + "group": "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", + "version": "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", + "kind": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", + "verbs": "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", + "shortNames": "shortNames is a list of suggested short names of the resource.", + "categories": "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", + "storageVersionHash": "The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates.", } func (APIResource) SwaggerDoc() map[string]string { @@ -85,12 +86,23 @@ return map_APIVersions } +var map_CreateOptions = map[string]string{ + "": "CreateOptions may be provided when creating an API object.", + "dryRun": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "fieldManager": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", +} + +func (CreateOptions) SwaggerDoc() map[string]string { + return map_CreateOptions +} + var map_DeleteOptions = map[string]string{ "": "DeleteOptions may be provided when deleting an API object.", "gracePeriodSeconds": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", "preconditions": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", "orphanDependents": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", "propagationPolicy": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", + "dryRun": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", } func (DeleteOptions) SwaggerDoc() map[string]string { @@ -98,19 +110,26 @@ } var map_ExportOptions = map[string]string{ - "": "ExportOptions is the query options to the standard REST get call.", - "export": "Should this value be exported. Export strips fields that a user can not specify.", - "exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", + "": "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", + "export": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", + "exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", } func (ExportOptions) SwaggerDoc() map[string]string { return map_ExportOptions } +var map_FieldsV1 = map[string]string{ + "": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:', where is the name of a field in a struct, or key in a map 'v:', where is the exact json formatted value of a list item 'i:', where is position of a item in a list 'k:', where is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", +} + +func (FieldsV1) SwaggerDoc() map[string]string { + return map_FieldsV1 +} + var map_GetOptions = map[string]string{ - "": "GetOptions is the standard query options to the standard REST get call.", - "resourceVersion": "When specified: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "includeUninitialized": "If true, partially initialized resources are included in the response.", + "": "GetOptions is the standard query options to the standard REST get call.", + "resourceVersion": "When specified: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", } func (GetOptions) SwaggerDoc() map[string]string { @@ -127,25 +146,6 @@ return map_GroupVersionForDiscovery } -var map_Initializer = map[string]string{ - "": "Initializer is information about an initializer that has not yet completed.", - "name": "name of the process that is responsible for initializing this object.", -} - -func (Initializer) SwaggerDoc() map[string]string { - return map_Initializer -} - -var map_Initializers = map[string]string{ - "": "Initializers tracks the progress of initialization.", - "pending": "Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.", - "result": "If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.", -} - -func (Initializers) SwaggerDoc() map[string]string { - return map_Initializers -} - var map_LabelSelector = map[string]string{ "": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", "matchLabels": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", @@ -169,7 +169,7 @@ var map_List = map[string]string{ "": "List holds a list of objects, which may not be known by the server.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "items": "List of objects", } @@ -178,10 +178,11 @@ } var map_ListMeta = map[string]string{ - "": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", - "selfLink": "selfLink is a URL representing this object. Populated by the system. Read-only.", - "resourceVersion": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - "continue": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.", + "": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "selfLink": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "resourceVersion": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", + "continue": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "remainingItemCount": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", } func (ListMeta) SwaggerDoc() map[string]string { @@ -189,39 +190,53 @@ } var map_ListOptions = map[string]string{ - "": "ListOptions is the query options to a standard REST list call.", - "labelSelector": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "fieldSelector": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "includeUninitialized": "If true, partially initialized resources are included in the response.", - "watch": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "resourceVersion": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "timeoutSeconds": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "limit": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "continue": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "": "ListOptions is the query options to a standard REST list call.", + "labelSelector": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "fieldSelector": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "watch": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "allowWatchBookmarks": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is beta.", + "resourceVersion": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "timeoutSeconds": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "limit": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "continue": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", } func (ListOptions) SwaggerDoc() map[string]string { return map_ListOptions } +var map_ManagedFieldsEntry = map[string]string{ + "": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "manager": "Manager is an identifier of the workflow managing these fields.", + "operation": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "apiVersion": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "time": "Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'", + "fieldsType": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "fieldsV1": "FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type.", +} + +func (ManagedFieldsEntry) SwaggerDoc() map[string]string { + return map_ManagedFieldsEntry +} + var map_ObjectMeta = map[string]string{ "": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "name": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - "generateName": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency", + "generateName": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency", "namespace": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", - "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.", + "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", "uid": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - "resourceVersion": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", + "resourceVersion": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", "generation": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", - "creationTimestamp": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - "deletionTimestamp": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "creationTimestamp": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "deletionTimestamp": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "deletionGracePeriodSeconds": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", "labels": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "annotations": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "ownerReferences": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", - "initializers": "An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.", "finalizers": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", "clusterName": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "managedFields": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", } func (ObjectMeta) SwaggerDoc() map[string]string { @@ -229,9 +244,9 @@ } var map_OwnerReference = map[string]string{ - "": "OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.", + "": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", "apiVersion": "API version of the referent.", - "kind": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "kind": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "name": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "uid": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "controller": "If true, this reference points to the managing controller.", @@ -242,6 +257,25 @@ return map_OwnerReference } +var map_PartialObjectMetadata = map[string]string{ + "": "PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients to get access to a particular ObjectMeta schema without knowing the details of the version.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", +} + +func (PartialObjectMetadata) SwaggerDoc() map[string]string { + return map_PartialObjectMetadata +} + +var map_PartialObjectMetadataList = map[string]string{ + "": "PartialObjectMetadataList contains a list of objects containing only their metadata", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "items": "items contains each of the included items.", +} + +func (PartialObjectMetadataList) SwaggerDoc() map[string]string { + return map_PartialObjectMetadataList +} + var map_Patch = map[string]string{ "": "Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.", } @@ -250,9 +284,21 @@ return map_Patch } +var map_PatchOptions = map[string]string{ + "": "PatchOptions may be provided when patching an API object. PatchOptions is meant to be a superset of UpdateOptions.", + "dryRun": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "force": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.", + "fieldManager": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).", +} + +func (PatchOptions) SwaggerDoc() map[string]string { + return map_PatchOptions +} + var map_Preconditions = map[string]string{ - "": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", - "uid": "Specifies the target UID.", + "": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", + "uid": "Specifies the target UID.", + "resourceVersion": "Specifies the target ResourceVersion", } func (Preconditions) SwaggerDoc() map[string]string { @@ -280,8 +326,8 @@ var map_Status = map[string]string{ "": "Status is a return value for calls that don't return other objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "status": "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "status": "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", "message": "A human-readable description of the status of this operation.", "reason": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", "details": "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", @@ -307,7 +353,7 @@ "": "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", "name": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", "group": "The group attribute of the resource associated with the status StatusReason.", - "kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "uid": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "causes": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", "retryAfterSeconds": "If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.", @@ -317,14 +363,80 @@ return map_StatusDetails } +var map_Table = map[string]string{ + "": "Table is a tabular representation of a set of API resources. The server transforms the object into a set of preferred columns for quickly reviewing the objects.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "columnDefinitions": "columnDefinitions describes each column in the returned items array. The number of cells per row will always match the number of column definitions.", + "rows": "rows is the list of items in the table.", +} + +func (Table) SwaggerDoc() map[string]string { + return map_Table +} + +var map_TableColumnDefinition = map[string]string{ + "": "TableColumnDefinition contains information about a column returned in the Table.", + "name": "name is a human readable name for the column.", + "type": "type is an OpenAPI type definition for this column, such as number, integer, string, or array. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", + "format": "format is an optional OpenAPI type modifier for this column. A format modifies the type and imposes additional rules, like date or time formatting for a string. The 'name' format is applied to the primary identifier column which has type 'string' to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", + "description": "description is a human readable description of this column.", + "priority": "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.", +} + +func (TableColumnDefinition) SwaggerDoc() map[string]string { + return map_TableColumnDefinition +} + +var map_TableOptions = map[string]string{ + "": "TableOptions are used when a Table is requested by the caller.", + "includeObject": "includeObject decides whether to include each object along with its columnar information. Specifying \"None\" will return no object, specifying \"Object\" will return the full object contents, and specifying \"Metadata\" (the default) will return the object's metadata in the PartialObjectMetadata kind in version v1beta1 of the meta.k8s.io API group.", +} + +func (TableOptions) SwaggerDoc() map[string]string { + return map_TableOptions +} + +var map_TableRow = map[string]string{ + "": "TableRow is an individual row in a table.", + "cells": "cells will be as wide as the column definitions array and may contain strings, numbers (float64 or int64), booleans, simple maps, lists, or null. See the type field of the column definition for a more detailed description.", + "conditions": "conditions describe additional status of a row that are relevant for a human user. These conditions apply to the row, not to the object, and will be specific to table output. The only defined condition type is 'Completed', for a row that indicates a resource that has run to completion and can be given less visual priority.", + "object": "This field contains the requested additional information about each object based on the includeObject policy when requesting the Table. If \"None\", this field is empty, if \"Object\" this will be the default serialization of the object for the current API version, and if \"Metadata\" (the default) will contain the object metadata. Check the returned kind and apiVersion of the object before parsing. The media type of the object will always match the enclosing list - if this as a JSON table, these will be JSON encoded objects.", +} + +func (TableRow) SwaggerDoc() map[string]string { + return map_TableRow +} + +var map_TableRowCondition = map[string]string{ + "": "TableRowCondition allows a row to be marked with additional information.", + "type": "Type of row condition. The only defined value is 'Completed' indicating that the object this row represents has reached a completed state and may be given less visual priority than other rows. Clients are not required to honor any conditions but should be consistent where possible about handling the conditions.", + "status": "Status of the condition, one of True, False, Unknown.", + "reason": "(brief) machine readable reason for the condition's last transition.", + "message": "Human readable message indicating details about last transition.", +} + +func (TableRowCondition) SwaggerDoc() map[string]string { + return map_TableRowCondition +} + var map_TypeMeta = map[string]string{ "": "TypeMeta describes an individual object in an API response or request with strings representing the type of the object and its API schema version. Structures that are versioned or persisted should inline TypeMeta.", - "kind": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "apiVersion": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + "kind": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "apiVersion": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", } func (TypeMeta) SwaggerDoc() map[string]string { return map_TypeMeta } +var map_UpdateOptions = map[string]string{ + "": "UpdateOptions may be provided when updating an API object. All fields in UpdateOptions should also be present in PatchOptions.", + "dryRun": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "fieldManager": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", +} + +func (UpdateOptions) SwaggerDoc() map[string]string { + return map_UpdateOptions +} + // AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,6 +32,9 @@ // NestedFieldCopy returns a deep copy of the value of a nested field. // Returns false if the value is missing. // No error is returned for a nil field. +// +// Note: fields passed to this function are treated as keys within the passed +// object; no array/slice syntax is supported. func NestedFieldCopy(obj map[string]interface{}, fields ...string) (interface{}, bool, error) { val, found, err := NestedFieldNoCopy(obj, fields...) if !found || err != nil { @@ -43,10 +46,16 @@ // NestedFieldNoCopy returns a reference to a nested field. // Returns false if value is not found and an error if unable // to traverse obj. +// +// Note: fields passed to this function are treated as keys within the passed +// object; no array/slice syntax is supported. func NestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{}, bool, error) { var val interface{} = obj for i, field := range fields { + if val == nil { + return nil, false, nil + } if m, ok := val.(map[string]interface{}); ok { val, ok = m[field] if !ok { @@ -272,6 +281,22 @@ return val } +func getNestedInt64(obj map[string]interface{}, fields ...string) int64 { + val, found, err := NestedInt64(obj, fields...) + if !found || err != nil { + return 0 + } + return val +} + +func getNestedInt64Pointer(obj map[string]interface{}, fields ...string) *int64 { + val, found, err := NestedInt64(obj, fields...) + if !found || err != nil { + return nil + } + return &val +} + func jsonPath(fields []string) string { return "." + strings.Join(fields, ".") } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go 2020-12-10 21:46:52.000000000 +0000 @@ -47,6 +47,7 @@ var _ metav1.Object = &Unstructured{} var _ runtime.Unstructured = &Unstructured{} +var _ metav1.ListInterface = &Unstructured{} func (obj *Unstructured) GetObjectKind() schema.ObjectKind { return obj } @@ -126,6 +127,16 @@ return err } +// NewEmptyInstance returns a new instance of the concrete type containing only kind/apiVersion and no other data. +// This should be called instead of reflect.New() for unstructured types because the go type alone does not preserve kind/apiVersion info. +func (in *Unstructured) NewEmptyInstance() runtime.Unstructured { + out := new(Unstructured) + if in != nil { + out.GetObjectKind().SetGroupVersionKind(in.GetObjectKind().GroupVersionKind()) + } + return out +} + func (in *Unstructured) DeepCopy() *Unstructured { if in == nil { return nil @@ -143,13 +154,20 @@ SetNestedField(u.Object, value, fields...) } -func (u *Unstructured) setNestedSlice(value []string, fields ...string) { +func (u *Unstructured) setNestedStringSlice(value []string, fields ...string) { if u.Object == nil { u.Object = make(map[string]interface{}) } SetNestedStringSlice(u.Object, value, fields...) } +func (u *Unstructured) setNestedSlice(value []interface{}, fields ...string) { + if u.Object == nil { + u.Object = make(map[string]interface{}) + } + SetNestedSlice(u.Object, value, fields...) +} + func (u *Unstructured) setNestedMap(value map[string]string, fields ...string) { if u.Object == nil { u.Object = make(map[string]interface{}) @@ -179,6 +197,11 @@ } func (u *Unstructured) SetOwnerReferences(references []metav1.OwnerReference) { + if references == nil { + RemoveNestedField(u.Object, "metadata", "ownerReferences") + return + } + newReferences := make([]interface{}, 0, len(references)) for _, reference := range references { out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&reference) @@ -212,6 +235,10 @@ } func (u *Unstructured) SetNamespace(namespace string) { + if len(namespace) == 0 { + RemoveNestedField(u.Object, "metadata", "namespace") + return + } u.setNestedField(namespace, "metadata", "namespace") } @@ -220,6 +247,10 @@ } func (u *Unstructured) SetName(name string) { + if len(name) == 0 { + RemoveNestedField(u.Object, "metadata", "name") + return + } u.setNestedField(name, "metadata", "name") } @@ -227,8 +258,12 @@ return getNestedString(u.Object, "metadata", "generateName") } -func (u *Unstructured) SetGenerateName(name string) { - u.setNestedField(name, "metadata", "generateName") +func (u *Unstructured) SetGenerateName(generateName string) { + if len(generateName) == 0 { + RemoveNestedField(u.Object, "metadata", "generateName") + return + } + u.setNestedField(generateName, "metadata", "generateName") } func (u *Unstructured) GetUID() types.UID { @@ -236,6 +271,10 @@ } func (u *Unstructured) SetUID(uid types.UID) { + if len(string(uid)) == 0 { + RemoveNestedField(u.Object, "metadata", "uid") + return + } u.setNestedField(string(uid), "metadata", "uid") } @@ -243,8 +282,12 @@ return getNestedString(u.Object, "metadata", "resourceVersion") } -func (u *Unstructured) SetResourceVersion(version string) { - u.setNestedField(version, "metadata", "resourceVersion") +func (u *Unstructured) SetResourceVersion(resourceVersion string) { + if len(resourceVersion) == 0 { + RemoveNestedField(u.Object, "metadata", "resourceVersion") + return + } + u.setNestedField(resourceVersion, "metadata", "resourceVersion") } func (u *Unstructured) GetGeneration() int64 { @@ -256,6 +299,10 @@ } func (u *Unstructured) SetGeneration(generation int64) { + if generation == 0 { + RemoveNestedField(u.Object, "metadata", "generation") + return + } u.setNestedField(generation, "metadata", "generation") } @@ -264,6 +311,10 @@ } func (u *Unstructured) SetSelfLink(selfLink string) { + if len(selfLink) == 0 { + RemoveNestedField(u.Object, "metadata", "selfLink") + return + } u.setNestedField(selfLink, "metadata", "selfLink") } @@ -272,9 +323,25 @@ } func (u *Unstructured) SetContinue(c string) { + if len(c) == 0 { + RemoveNestedField(u.Object, "metadata", "continue") + return + } u.setNestedField(c, "metadata", "continue") } +func (u *Unstructured) GetRemainingItemCount() *int64 { + return getNestedInt64Pointer(u.Object, "metadata", "remainingItemCount") +} + +func (u *Unstructured) SetRemainingItemCount(c *int64) { + if c == nil { + RemoveNestedField(u.Object, "metadata", "remainingItemCount") + } else { + u.setNestedField(*c, "metadata", "remainingItemCount") + } +} + func (u *Unstructured) GetCreationTimestamp() metav1.Time { var timestamp metav1.Time timestamp.UnmarshalQueryParameter(getNestedString(u.Object, "metadata", "creationTimestamp")) @@ -330,6 +397,10 @@ } func (u *Unstructured) SetLabels(labels map[string]string) { + if labels == nil { + RemoveNestedField(u.Object, "metadata", "labels") + return + } u.setNestedMap(labels, "metadata", "labels") } @@ -339,6 +410,10 @@ } func (u *Unstructured) SetAnnotations(annotations map[string]string) { + if annotations == nil { + RemoveNestedField(u.Object, "metadata", "annotations") + return + } u.setNestedMap(annotations, "metadata", "annotations") } @@ -356,38 +431,17 @@ return gvk } -func (u *Unstructured) GetInitializers() *metav1.Initializers { - m, found, err := nestedMapNoCopy(u.Object, "metadata", "initializers") - if !found || err != nil { - return nil - } - out := &metav1.Initializers{} - if err := runtime.DefaultUnstructuredConverter.FromUnstructured(m, out); err != nil { - utilruntime.HandleError(fmt.Errorf("unable to retrieve initializers for object: %v", err)) - return nil - } - return out -} - -func (u *Unstructured) SetInitializers(initializers *metav1.Initializers) { - if initializers == nil { - RemoveNestedField(u.Object, "metadata", "initializers") - return - } - out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(initializers) - if err != nil { - utilruntime.HandleError(fmt.Errorf("unable to retrieve initializers for object: %v", err)) - } - u.setNestedField(out, "metadata", "initializers") -} - func (u *Unstructured) GetFinalizers() []string { val, _, _ := NestedStringSlice(u.Object, "metadata", "finalizers") return val } func (u *Unstructured) SetFinalizers(finalizers []string) { - u.setNestedSlice(finalizers, "metadata", "finalizers") + if finalizers == nil { + RemoveNestedField(u.Object, "metadata", "finalizers") + return + } + u.setNestedStringSlice(finalizers, "metadata", "finalizers") } func (u *Unstructured) GetClusterName() string { @@ -395,5 +449,48 @@ } func (u *Unstructured) SetClusterName(clusterName string) { + if len(clusterName) == 0 { + RemoveNestedField(u.Object, "metadata", "clusterName") + return + } u.setNestedField(clusterName, "metadata", "clusterName") } + +func (u *Unstructured) GetManagedFields() []metav1.ManagedFieldsEntry { + items, found, err := NestedSlice(u.Object, "metadata", "managedFields") + if !found || err != nil { + return nil + } + managedFields := []metav1.ManagedFieldsEntry{} + for _, item := range items { + m, ok := item.(map[string]interface{}) + if !ok { + utilruntime.HandleError(fmt.Errorf("unable to retrieve managedFields for object, item %v is not a map", item)) + return nil + } + out := metav1.ManagedFieldsEntry{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(m, &out); err != nil { + utilruntime.HandleError(fmt.Errorf("unable to retrieve managedFields for object: %v", err)) + return nil + } + managedFields = append(managedFields, out) + } + return managedFields +} + +func (u *Unstructured) SetManagedFields(managedFields []metav1.ManagedFieldsEntry) { + if managedFields == nil { + RemoveNestedField(u.Object, "metadata", "managedFields") + return + } + items := []interface{}{} + for _, managedFieldsEntry := range managedFields { + out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&managedFieldsEntry) + if err != nil { + utilruntime.HandleError(fmt.Errorf("unable to set managedFields for object: %v", err)) + return + } + items = append(items, out) + } + u.setNestedSlice(items, "metadata", "managedFields") +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go 2020-12-10 21:46:52.000000000 +0000 @@ -52,6 +52,16 @@ return nil } +// NewEmptyInstance returns a new instance of the concrete type containing only kind/apiVersion and no other data. +// This should be called instead of reflect.New() for unstructured types because the go type alone does not preserve kind/apiVersion info. +func (u *UnstructuredList) NewEmptyInstance() runtime.Unstructured { + out := new(UnstructuredList) + if u != nil { + out.SetGroupVersionKind(u.GroupVersionKind()) + } + return out +} + // UnstructuredContent returns a map contain an overlay of the Items field onto // the Object field. Items always overwrites overlay. func (u *UnstructuredList) UnstructuredContent() map[string]interface{} { @@ -166,6 +176,18 @@ u.setNestedField(c, "metadata", "continue") } +func (u *UnstructuredList) GetRemainingItemCount() *int64 { + return getNestedInt64Pointer(u.Object, "metadata", "remainingItemCount") +} + +func (u *UnstructuredList) SetRemainingItemCount(c *int64) { + if c == nil { + RemoveNestedField(u.Object, "metadata", "remainingItemCount") + } else { + u.setNestedField(*c, "metadata", "remainingItemCount") + } +} + func (u *UnstructuredList) SetGroupVersionKind(gvk schema.GroupVersionKind) { u.SetAPIVersion(gvk.GroupVersion().String()) u.SetKind(gvk.Kind) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/watch.go 2020-12-10 21:46:52.000000000 +0000 @@ -39,7 +39,7 @@ Object runtime.RawExtension `json:"object" protobuf:"bytes,2,opt,name=object"` } -func Convert_watch_Event_to_versioned_Event(in *watch.Event, out *WatchEvent, s conversion.Scope) error { +func Convert_watch_Event_To_v1_WatchEvent(in *watch.Event, out *WatchEvent, s conversion.Scope) error { out.Type = string(in.Type) switch t := in.Object.(type) { case *runtime.Unknown: @@ -52,11 +52,11 @@ return nil } -func Convert_versioned_InternalEvent_to_versioned_Event(in *InternalEvent, out *WatchEvent, s conversion.Scope) error { - return Convert_watch_Event_to_versioned_Event((*watch.Event)(in), out, s) +func Convert_v1_InternalEvent_To_v1_WatchEvent(in *InternalEvent, out *WatchEvent, s conversion.Scope) error { + return Convert_watch_Event_To_v1_WatchEvent((*watch.Event)(in), out, s) } -func Convert_versioned_Event_to_watch_Event(in *WatchEvent, out *watch.Event, s conversion.Scope) error { +func Convert_v1_WatchEvent_To_watch_Event(in *WatchEvent, out *watch.Event, s conversion.Scope) error { out.Type = watch.EventType(in.Type) if in.Object.Object != nil { out.Object = in.Object.Object @@ -70,8 +70,8 @@ return nil } -func Convert_versioned_Event_to_versioned_InternalEvent(in *WatchEvent, out *InternalEvent, s conversion.Scope) error { - return Convert_versioned_Event_to_watch_Event(in, (*watch.Event)(out), s) +func Convert_v1_WatchEvent_To_v1_InternalEvent(in *WatchEvent, out *InternalEvent, s conversion.Scope) error { + return Convert_v1_WatchEvent_To_watch_Event(in, (*watch.Event)(out), s) } // InternalEvent makes watch.Event versioned diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -192,44 +192,63 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CreateOptions) DeepCopyInto(out *CreateOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CreateOptions. +func (in *CreateOptions) DeepCopy() *CreateOptions { + if in == nil { + return nil + } + out := new(CreateOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CreateOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeleteOptions) DeepCopyInto(out *DeleteOptions) { *out = *in out.TypeMeta = in.TypeMeta if in.GracePeriodSeconds != nil { in, out := &in.GracePeriodSeconds, &out.GracePeriodSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.Preconditions != nil { in, out := &in.Preconditions, &out.Preconditions - if *in == nil { - *out = nil - } else { - *out = new(Preconditions) - (*in).DeepCopyInto(*out) - } + *out = new(Preconditions) + (*in).DeepCopyInto(*out) } if in.OrphanDependents != nil { in, out := &in.OrphanDependents, &out.OrphanDependents - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.PropagationPolicy != nil { in, out := &in.PropagationPolicy, &out.PropagationPolicy - if *in == nil { - *out = nil - } else { - *out = new(DeletionPropagation) - **out = **in - } + *out = new(DeletionPropagation) + **out = **in + } + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) } return } @@ -294,6 +313,27 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FieldsV1) DeepCopyInto(out *FieldsV1) { + *out = *in + if in.Raw != nil { + in, out := &in.Raw, &out.Raw + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FieldsV1. +func (in *FieldsV1) DeepCopy() *FieldsV1 { + if in == nil { + return nil + } + out := new(FieldsV1) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GetOptions) DeepCopyInto(out *GetOptions) { *out = *in out.TypeMeta = in.TypeMeta @@ -415,57 +455,9 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Initializer) DeepCopyInto(out *Initializer) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Initializer. -func (in *Initializer) DeepCopy() *Initializer { - if in == nil { - return nil - } - out := new(Initializer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Initializers) DeepCopyInto(out *Initializers) { - *out = *in - if in.Pending != nil { - in, out := &in.Pending, &out.Pending - *out = make([]Initializer, len(*in)) - copy(*out, *in) - } - if in.Result != nil { - in, out := &in.Result, &out.Result - if *in == nil { - *out = nil - } else { - *out = new(Status) - (*in).DeepCopyInto(*out) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Initializers. -func (in *Initializers) DeepCopy() *Initializers { - if in == nil { - return nil - } - out := new(Initializers) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InternalEvent) DeepCopyInto(out *InternalEvent) { *out = *in - if in.Object == nil { - out.Object = nil - } else { + if in.Object != nil { out.Object = in.Object.DeepCopyObject() } return @@ -536,7 +528,7 @@ func (in *List) DeepCopyInto(out *List) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]runtime.RawExtension, len(*in)) @@ -568,6 +560,11 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ListMeta) DeepCopyInto(out *ListMeta) { *out = *in + if in.RemainingItemCount != nil { + in, out := &in.RemainingItemCount, &out.RemainingItemCount + *out = new(int64) + **out = **in + } return } @@ -587,12 +584,8 @@ out.TypeMeta = in.TypeMeta if in.TimeoutSeconds != nil { in, out := &in.TimeoutSeconds, &out.TimeoutSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } return } @@ -615,6 +608,31 @@ return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ManagedFieldsEntry) DeepCopyInto(out *ManagedFieldsEntry) { + *out = *in + if in.Time != nil { + in, out := &in.Time, &out.Time + *out = (*in).DeepCopy() + } + if in.FieldsV1 != nil { + in, out := &in.FieldsV1, &out.FieldsV1 + *out = new(FieldsV1) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedFieldsEntry. +func (in *ManagedFieldsEntry) DeepCopy() *ManagedFieldsEntry { + if in == nil { + return nil + } + out := new(ManagedFieldsEntry) + in.DeepCopyInto(out) + return out +} + // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MicroTime. func (in *MicroTime) DeepCopy() *MicroTime { if in == nil { @@ -631,20 +649,12 @@ in.CreationTimestamp.DeepCopyInto(&out.CreationTimestamp) if in.DeletionTimestamp != nil { in, out := &in.DeletionTimestamp, &out.DeletionTimestamp - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } if in.DeletionGracePeriodSeconds != nil { in, out := &in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds - if *in == nil { - *out = nil - } else { - *out = new(int64) - **out = **in - } + *out = new(int64) + **out = **in } if in.Labels != nil { in, out := &in.Labels, &out.Labels @@ -667,20 +677,18 @@ (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.Initializers != nil { - in, out := &in.Initializers, &out.Initializers - if *in == nil { - *out = nil - } else { - *out = new(Initializers) - (*in).DeepCopyInto(*out) - } - } if in.Finalizers != nil { in, out := &in.Finalizers, &out.Finalizers *out = make([]string, len(*in)) copy(*out, *in) } + if in.ManagedFields != nil { + in, out := &in.ManagedFields, &out.ManagedFields + *out = make([]ManagedFieldsEntry, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -699,21 +707,13 @@ *out = *in if in.Controller != nil { in, out := &in.Controller, &out.Controller - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } if in.BlockOwnerDeletion != nil { in, out := &in.BlockOwnerDeletion, &out.BlockOwnerDeletion - if *in == nil { - *out = nil - } else { - *out = new(bool) - **out = **in - } + *out = new(bool) + **out = **in } return } @@ -729,6 +729,65 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PartialObjectMetadata) DeepCopyInto(out *PartialObjectMetadata) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartialObjectMetadata. +func (in *PartialObjectMetadata) DeepCopy() *PartialObjectMetadata { + if in == nil { + return nil + } + out := new(PartialObjectMetadata) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PartialObjectMetadata) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PartialObjectMetadataList) DeepCopyInto(out *PartialObjectMetadataList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PartialObjectMetadata, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartialObjectMetadataList. +func (in *PartialObjectMetadataList) DeepCopy() *PartialObjectMetadataList { + if in == nil { + return nil + } + out := new(PartialObjectMetadataList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PartialObjectMetadataList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Patch) DeepCopyInto(out *Patch) { *out = *in return @@ -745,16 +804,52 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PatchOptions) DeepCopyInto(out *PatchOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Force != nil { + in, out := &in.Force, &out.Force + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatchOptions. +func (in *PatchOptions) DeepCopy() *PatchOptions { + if in == nil { + return nil + } + out := new(PatchOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PatchOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Preconditions) DeepCopyInto(out *Preconditions) { *out = *in if in.UID != nil { in, out := &in.UID, &out.UID - if *in == nil { - *out = nil - } else { - *out = new(types.UID) - **out = **in - } + *out = new(types.UID) + **out = **in + } + if in.ResourceVersion != nil { + in, out := &in.ResourceVersion, &out.ResourceVersion + *out = new(string) + **out = **in } return } @@ -810,15 +905,11 @@ func (in *Status) DeepCopyInto(out *Status) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Details != nil { in, out := &in.Details, &out.Details - if *in == nil { - *out = nil - } else { - *out = new(StatusDetails) - (*in).DeepCopyInto(*out) - } + *out = new(StatusDetails) + (*in).DeepCopyInto(*out) } return } @@ -878,6 +969,108 @@ return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Table) DeepCopyInto(out *Table) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.ColumnDefinitions != nil { + in, out := &in.ColumnDefinitions, &out.ColumnDefinitions + *out = make([]TableColumnDefinition, len(*in)) + copy(*out, *in) + } + if in.Rows != nil { + in, out := &in.Rows, &out.Rows + *out = make([]TableRow, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Table. +func (in *Table) DeepCopy() *Table { + if in == nil { + return nil + } + out := new(Table) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Table) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TableColumnDefinition) DeepCopyInto(out *TableColumnDefinition) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TableColumnDefinition. +func (in *TableColumnDefinition) DeepCopy() *TableColumnDefinition { + if in == nil { + return nil + } + out := new(TableColumnDefinition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TableOptions) DeepCopyInto(out *TableOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TableOptions. +func (in *TableOptions) DeepCopy() *TableOptions { + if in == nil { + return nil + } + out := new(TableOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TableOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TableRow) DeepCopyInto(out *TableRow) { + clone := in.DeepCopy() + *out = *clone + return +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TableRowCondition) DeepCopyInto(out *TableRowCondition) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TableRowCondition. +func (in *TableRowCondition) DeepCopy() *TableRowCondition { + if in == nil { + return nil + } + out := new(TableRowCondition) + in.DeepCopyInto(out) + return out +} + // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Time. func (in *Time) DeepCopy() *Time { if in == nil { @@ -905,6 +1098,36 @@ } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateOptions) DeepCopyInto(out *UpdateOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateOptions. +func (in *UpdateOptions) DeepCopy() *UpdateOptions { + if in == nil { + return nil + } + out := new(UpdateOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UpdateOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in Verbs) DeepCopyInto(out *Verbs) { { in := &in diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import "k8s.io/apimachinery/pkg/conversion" - -// Convert_Slice_string_To_v1beta1_IncludeObjectPolicy allows converting a URL query parameter value -func Convert_Slice_string_To_v1beta1_IncludeObjectPolicy(input *[]string, out *IncludeObjectPolicy, s conversion.Scope) error { - if len(*input) > 0 { - *out = IncludeObjectPolicy((*input)[0]) - } - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import "k8s.io/apimachinery/pkg/runtime" - -func (in *TableRow) DeepCopy() *TableRow { - if in == nil { - return nil - } - - out := new(TableRow) - - if in.Cells != nil { - out.Cells = make([]interface{}, len(in.Cells)) - for i := range in.Cells { - out.Cells[i] = runtime.DeepCopyJSONValue(in.Cells[i]) - } - } - - if in.Conditions != nil { - out.Conditions = make([]TableRowCondition, len(in.Conditions)) - for i := range in.Conditions { - in.Conditions[i].DeepCopyInto(&out.Conditions[i]) - } - } - - in.Object.DeepCopyInto(&out.Object) - return out -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:openapi-gen=true -// +k8s:defaulter-gen=TypeMeta - -// +groupName=meta.k8s.io -package v1beta1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,632 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by protoc-gen-gogo. -// source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto -// DO NOT EDIT! - -/* - Package v1beta1 is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto - - It has these top-level messages: - PartialObjectMetadata - PartialObjectMetadataList - TableOptions -*/ -package v1beta1 - -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import strings "strings" -import reflect "reflect" - -import io "io" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package - -func (m *PartialObjectMetadata) Reset() { *m = PartialObjectMetadata{} } -func (*PartialObjectMetadata) ProtoMessage() {} -func (*PartialObjectMetadata) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *PartialObjectMetadataList) Reset() { *m = PartialObjectMetadataList{} } -func (*PartialObjectMetadataList) ProtoMessage() {} -func (*PartialObjectMetadataList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{1} -} - -func (m *TableOptions) Reset() { *m = TableOptions{} } -func (*TableOptions) ProtoMessage() {} -func (*TableOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } - -func init() { - proto.RegisterType((*PartialObjectMetadata)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1beta1.PartialObjectMetadata") - proto.RegisterType((*PartialObjectMetadataList)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1beta1.PartialObjectMetadataList") - proto.RegisterType((*TableOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1beta1.TableOptions") -} -func (m *PartialObjectMetadata) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PartialObjectMetadata) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - return i, nil -} - -func (m *PartialObjectMetadataList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PartialObjectMetadataList) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.Items) > 0 { - for _, msg := range m.Items { - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } - return i, nil -} - -func (m *TableOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TableOptions) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IncludeObject))) - i += copy(dAtA[i:], m.IncludeObject) - return i, nil -} - -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return offset + 1 -} -func (m *PartialObjectMetadata) Size() (n int) { - var l int - _ = l - l = m.ObjectMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func (m *PartialObjectMetadataList) Size() (n int) { - var l int - _ = l - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - return n -} - -func (m *TableOptions) Size() (n int) { - var l int - _ = l - l = len(m.IncludeObject) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *PartialObjectMetadata) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PartialObjectMetadata{`, - `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, - `}`, - }, "") - return s -} -func (this *PartialObjectMetadataList) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PartialObjectMetadataList{`, - `Items:` + strings.Replace(fmt.Sprintf("%v", this.Items), "PartialObjectMetadata", "PartialObjectMetadata", 1) + `,`, - `}`, - }, "") - return s -} -func (this *TableOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&TableOptions{`, - `IncludeObject:` + fmt.Sprintf("%v", this.IncludeObject) + `,`, - `}`, - }, "") - return s -} -func valueToStringGenerated(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} -func (m *PartialObjectMetadata) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PartialObjectMetadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PartialObjectMetadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PartialObjectMetadataList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PartialObjectMetadataList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PartialObjectMetadataList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, &PartialObjectMetadata{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TableOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TableOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TableOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludeObject", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IncludeObject = IncludeObjectPolicy(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenerated(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - return iNdEx, nil - case 1: - iNdEx += 8 - return iNdEx, nil - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - iNdEx += length - if length < 0 { - return 0, ErrInvalidLengthGenerated - } - return iNdEx, nil - case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowGenerated - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipGenerated(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil - case 4: - return iNdEx, nil - case 5: - iNdEx += 4 - return iNdEx, nil - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - } - panic("unreachable") -} - -var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") -) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 375 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xcd, 0x0a, 0xd3, 0x40, - 0x10, 0xc7, 0xb3, 0x48, 0xd1, 0x6e, 0xed, 0x25, 0x22, 0xd4, 0x1e, 0x36, 0xa5, 0xa7, 0x0a, 0x76, - 0xd7, 0x16, 0x11, 0x8f, 0x92, 0x5b, 0x41, 0x69, 0x09, 0x9e, 0x3c, 0xb9, 0x49, 0xc6, 0x74, 0xcd, - 0xc7, 0x86, 0xec, 0xa6, 0xd0, 0x8b, 0xf8, 0x08, 0x3e, 0x56, 0x8f, 0x3d, 0xf6, 0x14, 0x6c, 0x7c, - 0x0b, 0x4f, 0x92, 0x0f, 0xec, 0x87, 0x15, 0x7b, 0x9b, 0xf9, 0x0f, 0xbf, 0x5f, 0x66, 0xb2, 0xd8, - 0x09, 0xdf, 0x28, 0x2a, 0x24, 0x0b, 0x73, 0x17, 0xb2, 0x04, 0x34, 0x28, 0xb6, 0x81, 0xc4, 0x97, - 0x19, 0x6b, 0x07, 0x3c, 0x15, 0x31, 0xf7, 0xd6, 0x22, 0x81, 0x6c, 0xcb, 0xd2, 0x30, 0xa8, 0x02, - 0xc5, 0x62, 0xd0, 0x9c, 0x6d, 0x66, 0x2e, 0x68, 0x3e, 0x63, 0x01, 0x24, 0x90, 0x71, 0x0d, 0x3e, - 0x4d, 0x33, 0xa9, 0xa5, 0xf9, 0xbc, 0x41, 0xe9, 0x39, 0x4a, 0xd3, 0x30, 0xa8, 0x02, 0x45, 0x2b, - 0x94, 0xb6, 0xe8, 0x70, 0x1a, 0x08, 0xbd, 0xce, 0x5d, 0xea, 0xc9, 0x98, 0x05, 0x32, 0x90, 0xac, - 0x36, 0xb8, 0xf9, 0xe7, 0xba, 0xab, 0x9b, 0xba, 0x6a, 0xcc, 0xc3, 0x57, 0xf7, 0x2c, 0x75, 0xbd, - 0xcf, 0xf0, 0x9f, 0xa7, 0x64, 0x79, 0xa2, 0x45, 0x0c, 0x7f, 0x01, 0xaf, 0xff, 0x07, 0x28, 0x6f, - 0x0d, 0x31, 0xbf, 0xe6, 0xc6, 0x5b, 0xfc, 0x74, 0xc5, 0x33, 0x2d, 0x78, 0xb4, 0x74, 0xbf, 0x80, - 0xa7, 0xdf, 0x83, 0xe6, 0x3e, 0xd7, 0xdc, 0xfc, 0x84, 0x1f, 0xc5, 0x6d, 0x3d, 0x40, 0x23, 0x34, - 0xe9, 0xcd, 0x5f, 0xd2, 0x7b, 0x7e, 0x12, 0x3d, 0x79, 0x6c, 0x73, 0x57, 0x58, 0x46, 0x59, 0x58, - 0xf8, 0x94, 0x39, 0x7f, 0xac, 0xe3, 0xaf, 0xf8, 0xd9, 0xcd, 0x4f, 0xbf, 0x13, 0x4a, 0x9b, 0x1c, - 0x77, 0x84, 0x86, 0x58, 0x0d, 0xd0, 0xe8, 0xc1, 0xa4, 0x37, 0x7f, 0x4b, 0xef, 0x7e, 0x20, 0x7a, - 0x53, 0x6a, 0x77, 0xcb, 0xc2, 0xea, 0x2c, 0x2a, 0xa5, 0xd3, 0x98, 0xc7, 0x2e, 0x7e, 0xfc, 0x81, - 0xbb, 0x11, 0x2c, 0x53, 0x2d, 0x64, 0xa2, 0x4c, 0x07, 0xf7, 0x45, 0xe2, 0x45, 0xb9, 0x0f, 0x0d, - 0x5a, 0x9f, 0xdd, 0xb5, 0x5f, 0xb4, 0x47, 0xf4, 0x17, 0xe7, 0xc3, 0x5f, 0x85, 0xf5, 0xe4, 0x22, - 0x58, 0xc9, 0x48, 0x78, 0x5b, 0xe7, 0x52, 0x61, 0x4f, 0x77, 0x47, 0x62, 0xec, 0x8f, 0xc4, 0x38, - 0x1c, 0x89, 0xf1, 0xad, 0x24, 0x68, 0x57, 0x12, 0xb4, 0x2f, 0x09, 0x3a, 0x94, 0x04, 0xfd, 0x28, - 0x09, 0xfa, 0xfe, 0x93, 0x18, 0x1f, 0x1f, 0xb6, 0xab, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xf3, - 0xe1, 0xde, 0x86, 0xdb, 0x02, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - -// This file was autogenerated by go-to-protobuf. Do not edit it manually! - -syntax = 'proto2'; - -package k8s.io.apimachinery.pkg.apis.meta.v1beta1; - -import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; - -// Package-wide variables from generator "generated". -option go_package = "v1beta1"; - -// PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients -// to get access to a particular ObjectMeta schema without knowing the details of the version. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -message PartialObjectMetadata { - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; -} - -// PartialObjectMetadataList contains a list of objects containing only their metadata -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -message PartialObjectMetadataList { - // items contains each of the included items. - repeated PartialObjectMetadata items = 1; -} - -// TableOptions are used when a Table is requested by the caller. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -message TableOptions { - // includeObject decides whether to include each object along with its columnar information. - // Specifying "None" will return no object, specifying "Object" will return the full object contents, and - // specifying "Metadata" (the default) will return the object's metadata in the PartialObjectMetadata kind - // in version v1beta1 of the meta.k8s.io API group. - optional string includeObject = 1; -} - diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// GroupName is the group name for this API. -const GroupName = "meta.k8s.io" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} - -// Kind takes an unqualified kind and returns a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return SchemeGroupVersion.WithKind(kind).GroupKind() -} - -// scheme is the registry for the common types that adhere to the meta v1beta1 API spec. -var scheme = runtime.NewScheme() - -// ParameterCodec knows about query parameters used with the meta v1beta1 API spec. -var ParameterCodec = runtime.NewParameterCodec(scheme) - -func init() { - scheme.AddKnownTypes(SchemeGroupVersion, - &Table{}, - &TableOptions{}, - &PartialObjectMetadata{}, - &PartialObjectMetadataList{}, - ) - - if err := scheme.AddConversionFuncs( - Convert_Slice_string_To_v1beta1_IncludeObjectPolicy, - ); err != nil { - panic(err) - } - - // register manually. This usually goes through the SchemeBuilder, which we cannot use here. - //scheme.AddGeneratedDeepCopyFuncs(GetGeneratedDeepCopyFuncs()...) -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,161 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// package v1beta1 is alpha objects from meta that will be introduced. -package v1beta1 - -import ( - "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" -) - -// TODO: Table does not generate to protobuf because of the interface{} - fix protobuf -// generation to support a meta type that can accept any valid JSON. - -// Table is a tabular representation of a set of API resources. The server transforms the -// object into a set of preferred columns for quickly reviewing the objects. -// +protobuf=false -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type Table struct { - v1.TypeMeta `json:",inline"` - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - // +optional - v1.ListMeta `json:"metadata,omitempty"` - - // columnDefinitions describes each column in the returned items array. The number of cells per row - // will always match the number of column definitions. - ColumnDefinitions []TableColumnDefinition `json:"columnDefinitions"` - // rows is the list of items in the table. - Rows []TableRow `json:"rows"` -} - -// TableColumnDefinition contains information about a column returned in the Table. -// +protobuf=false -type TableColumnDefinition struct { - // name is a human readable name for the column. - Name string `json:"name"` - // type is an OpenAPI type definition for this column. - // See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more. - Type string `json:"type"` - // format is an optional OpenAPI type definition for this column. The 'name' format is applied - // to the primary identifier column to assist in clients identifying column is the resource name. - // See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more. - Format string `json:"format"` - // description is a human readable description of this column. - Description string `json:"description"` - // priority is an integer defining the relative importance of this column compared to others. Lower - // numbers are considered higher priority. Columns that may be omitted in limited space scenarios - // should be given a higher priority. - Priority int32 `json:"priority"` -} - -// TableRow is an individual row in a table. -// +protobuf=false -type TableRow struct { - // cells will be as wide as headers and may contain strings, numbers (float64 or int64), booleans, simple - // maps, or lists, or null. See the type field of the column definition for a more detailed description. - Cells []interface{} `json:"cells"` - // conditions describe additional status of a row that are relevant for a human user. - // +optional - Conditions []TableRowCondition `json:"conditions,omitempty"` - // This field contains the requested additional information about each object based on the includeObject - // policy when requesting the Table. If "None", this field is empty, if "Object" this will be the - // default serialization of the object for the current API version, and if "Metadata" (the default) will - // contain the object metadata. Check the returned kind and apiVersion of the object before parsing. - // +optional - Object runtime.RawExtension `json:"object,omitempty"` -} - -// TableRowCondition allows a row to be marked with additional information. -// +protobuf=false -type TableRowCondition struct { - // Type of row condition. - Type RowConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status ConditionStatus `json:"status"` - // (brief) machine readable reason for the condition's last transition. - // +optional - Reason string `json:"reason,omitempty"` - // Human readable message indicating details about last transition. - // +optional - Message string `json:"message,omitempty"` -} - -type RowConditionType string - -// These are valid conditions of a row. This list is not exhaustive and new conditions may be -// included by other resources. -const ( - // RowCompleted means the underlying resource has reached completion and may be given less - // visual priority than other resources. - RowCompleted RowConditionType = "Completed" -) - -type ConditionStatus string - -// These are valid condition statuses. "ConditionTrue" means a resource is in the condition. -// "ConditionFalse" means a resource is not in the condition. "ConditionUnknown" means kubernetes -// can't decide if a resource is in the condition or not. In the future, we could add other -// intermediate conditions, e.g. ConditionDegraded. -const ( - ConditionTrue ConditionStatus = "True" - ConditionFalse ConditionStatus = "False" - ConditionUnknown ConditionStatus = "Unknown" -) - -// IncludeObjectPolicy controls which portion of the object is returned with a Table. -type IncludeObjectPolicy string - -const ( - // IncludeNone returns no object. - IncludeNone IncludeObjectPolicy = "None" - // IncludeMetadata serializes the object containing only its metadata field. - IncludeMetadata IncludeObjectPolicy = "Metadata" - // IncludeObject contains the full object. - IncludeObject IncludeObjectPolicy = "Object" -) - -// TableOptions are used when a Table is requested by the caller. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type TableOptions struct { - v1.TypeMeta `json:",inline"` - // includeObject decides whether to include each object along with its columnar information. - // Specifying "None" will return no object, specifying "Object" will return the full object contents, and - // specifying "Metadata" (the default) will return the object's metadata in the PartialObjectMetadata kind - // in version v1beta1 of the meta.k8s.io API group. - IncludeObject IncludeObjectPolicy `json:"includeObject,omitempty" protobuf:"bytes,1,opt,name=includeObject,casttype=IncludeObjectPolicy"` -} - -// PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients -// to get access to a particular ObjectMeta schema without knowing the details of the version. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type PartialObjectMetadata struct { - v1.TypeMeta `json:",inline"` - // Standard object's metadata. - // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - // +optional - v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` -} - -// PartialObjectMetadataList contains a list of objects containing only their metadata -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type PartialObjectMetadataList struct { - v1.TypeMeta `json:",inline"` - - // items contains each of the included items. - Items []*PartialObjectMetadata `json:"items" protobuf:"bytes,1,rep,name=items"` -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -// This file contains a collection of methods that can be used from go-restful to -// generate Swagger API documentation for its models. Please read this PR for more -// information on the implementation: https://github.com/emicklei/go-restful/pull/215 -// -// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if -// they are on one line! For multiple line or blocks that you want to ignore use ---. -// Any context after a --- is ignored. -// -// Those methods can be generated by using hack/update-generated-swagger-docs.sh - -// AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_PartialObjectMetadata = map[string]string{ - "": "PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients to get access to a particular ObjectMeta schema without knowing the details of the version.", - "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", -} - -func (PartialObjectMetadata) SwaggerDoc() map[string]string { - return map_PartialObjectMetadata -} - -var map_PartialObjectMetadataList = map[string]string{ - "": "PartialObjectMetadataList contains a list of objects containing only their metadata", - "items": "items contains each of the included items.", -} - -func (PartialObjectMetadataList) SwaggerDoc() map[string]string { - return map_PartialObjectMetadataList -} - -var map_Table = map[string]string{ - "": "Table is a tabular representation of a set of API resources. The server transforms the object into a set of preferred columns for quickly reviewing the objects.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "columnDefinitions": "columnDefinitions describes each column in the returned items array. The number of cells per row will always match the number of column definitions.", - "rows": "rows is the list of items in the table.", -} - -func (Table) SwaggerDoc() map[string]string { - return map_Table -} - -var map_TableColumnDefinition = map[string]string{ - "": "TableColumnDefinition contains information about a column returned in the Table.", - "name": "name is a human readable name for the column.", - "type": "type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - "format": "format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - "description": "description is a human readable description of this column.", - "priority": "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.", -} - -func (TableColumnDefinition) SwaggerDoc() map[string]string { - return map_TableColumnDefinition -} - -var map_TableOptions = map[string]string{ - "": "TableOptions are used when a Table is requested by the caller.", - "includeObject": "includeObject decides whether to include each object along with its columnar information. Specifying \"None\" will return no object, specifying \"Object\" will return the full object contents, and specifying \"Metadata\" (the default) will return the object's metadata in the PartialObjectMetadata kind in version v1beta1 of the meta.k8s.io API group.", -} - -func (TableOptions) SwaggerDoc() map[string]string { - return map_TableOptions -} - -var map_TableRow = map[string]string{ - "": "TableRow is an individual row in a table.", - "cells": "cells will be as wide as headers and may contain strings, numbers (float64 or int64), booleans, simple maps, or lists, or null. See the type field of the column definition for a more detailed description.", - "conditions": "conditions describe additional status of a row that are relevant for a human user.", - "object": "This field contains the requested additional information about each object based on the includeObject policy when requesting the Table. If \"None\", this field is empty, if \"Object\" this will be the default serialization of the object for the current API version, and if \"Metadata\" (the default) will contain the object metadata. Check the returned kind and apiVersion of the object before parsing.", -} - -func (TableRow) SwaggerDoc() map[string]string { - return map_TableRow -} - -var map_TableRowCondition = map[string]string{ - "": "TableRowCondition allows a row to be marked with additional information.", - "type": "Type of row condition.", - "status": "Status of the condition, one of True, False, Unknown.", - "reason": "(brief) machine readable reason for the condition's last transition.", - "message": "Human readable message indicating details about last transition.", -} - -func (TableRowCondition) SwaggerDoc() map[string]string { - return map_TableRowCondition -} - -// AUTO-GENERATED FUNCTIONS END HERE diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,190 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1beta1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PartialObjectMetadata) DeepCopyInto(out *PartialObjectMetadata) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartialObjectMetadata. -func (in *PartialObjectMetadata) DeepCopy() *PartialObjectMetadata { - if in == nil { - return nil - } - out := new(PartialObjectMetadata) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PartialObjectMetadata) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PartialObjectMetadataList) DeepCopyInto(out *PartialObjectMetadataList) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]*PartialObjectMetadata, len(*in)) - for i := range *in { - if (*in)[i] == nil { - (*out)[i] = nil - } else { - (*out)[i] = new(PartialObjectMetadata) - (*in)[i].DeepCopyInto((*out)[i]) - } - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartialObjectMetadataList. -func (in *PartialObjectMetadataList) DeepCopy() *PartialObjectMetadataList { - if in == nil { - return nil - } - out := new(PartialObjectMetadataList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PartialObjectMetadataList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Table) DeepCopyInto(out *Table) { - *out = *in - out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta - if in.ColumnDefinitions != nil { - in, out := &in.ColumnDefinitions, &out.ColumnDefinitions - *out = make([]TableColumnDefinition, len(*in)) - copy(*out, *in) - } - if in.Rows != nil { - in, out := &in.Rows, &out.Rows - *out = make([]TableRow, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Table. -func (in *Table) DeepCopy() *Table { - if in == nil { - return nil - } - out := new(Table) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Table) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TableColumnDefinition) DeepCopyInto(out *TableColumnDefinition) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TableColumnDefinition. -func (in *TableColumnDefinition) DeepCopy() *TableColumnDefinition { - if in == nil { - return nil - } - out := new(TableColumnDefinition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TableOptions) DeepCopyInto(out *TableOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TableOptions. -func (in *TableOptions) DeepCopy() *TableOptions { - if in == nil { - return nil - } - out := new(TableOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *TableOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TableRow) DeepCopyInto(out *TableRow) { - clone := in.DeepCopy() - *out = *clone - return -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TableRowCondition) DeepCopyInto(out *TableRowCondition) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TableRowCondition. -func (in *TableRowCondition) DeepCopy() *TableRowCondition { - if in == nil { - return nil - } - out := new(TableRowCondition) - in.DeepCopyInto(out) - return out -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by defaulter-gen. DO NOT EDIT. - -package v1beta1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// RegisterDefaults adds defaulters functions to the given scheme. -// Public to allow building arbitrary schemes. -// All generated defaulters are covering - they call all nested defaulters. -func RegisterDefaults(scheme *runtime.Scheme) error { - return nil -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/converter.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/converter.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/converter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/converter.go 2020-12-10 21:46:52.000000000 +0000 @@ -40,7 +40,11 @@ var DefaultNameFunc = func(t reflect.Type) string { return t.Name() } -type GenericConversionFunc func(a, b interface{}, scope Scope) (bool, error) +// ConversionFunc converts the object a into the object b, reusing arrays or objects +// or pointers if necessary. It should return an error if the object cannot be converted +// or if some data is invalid. If you do not wish a and b to share fields or nested +// objects, you must copy a before calling this function. +type ConversionFunc func(a, b interface{}, scope Scope) error // Converter knows how to convert one type to another. type Converter struct { @@ -49,11 +53,6 @@ conversionFuncs ConversionFuncs generatedConversionFuncs ConversionFuncs - // genericConversions are called during normal conversion to offer a "fast-path" - // that avoids all reflection. These methods are not called outside of the .Convert() - // method. - genericConversions []GenericConversionFunc - // Set of conversions that should be treated as a no-op ignoredConversions map[typePair]struct{} @@ -98,14 +97,6 @@ return c } -// AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern -// (for two conversion types) to the converter. These functions are checked first during -// a normal conversion, but are otherwise not called. Use AddConversionFuncs when registering -// typed conversions. -func (c *Converter) AddGenericConversionFunc(fn GenericConversionFunc) { - c.genericConversions = append(c.genericConversions, fn) -} - // WithConversions returns a Converter that is a copy of c but with the additional // fns merged on top. func (c *Converter) WithConversions(fns ConversionFuncs) *Converter { @@ -161,11 +152,15 @@ type FieldMappingFunc func(key string, sourceTag, destTag reflect.StructTag) (source string, dest string) func NewConversionFuncs() ConversionFuncs { - return ConversionFuncs{fns: make(map[typePair]reflect.Value)} + return ConversionFuncs{ + fns: make(map[typePair]reflect.Value), + untyped: make(map[typePair]ConversionFunc), + } } type ConversionFuncs struct { - fns map[typePair]reflect.Value + fns map[typePair]reflect.Value + untyped map[typePair]ConversionFunc } // Add adds the provided conversion functions to the lookup table - they must have the signature @@ -183,6 +178,21 @@ return nil } +// AddUntyped adds the provided conversion function to the lookup table for the types that are +// supplied as a and b. a and b must be pointers or an error is returned. This method overwrites +// previously defined functions. +func (c ConversionFuncs) AddUntyped(a, b interface{}, fn ConversionFunc) error { + tA, tB := reflect.TypeOf(a), reflect.TypeOf(b) + if tA.Kind() != reflect.Ptr { + return fmt.Errorf("the type %T must be a pointer to register as an untyped conversion", a) + } + if tB.Kind() != reflect.Ptr { + return fmt.Errorf("the type %T must be a pointer to register as an untyped conversion", b) + } + c.untyped[typePair{tA, tB}] = fn + return nil +} + // Merge returns a new ConversionFuncs that contains all conversions from // both other and c, with other conversions taking precedence. func (c ConversionFuncs) Merge(other ConversionFuncs) ConversionFuncs { @@ -193,6 +203,12 @@ for k, v := range other.fns { merged.fns[k] = v } + for k, v := range c.untyped { + merged.untyped[k] = v + } + for k, v := range other.untyped { + merged.untyped[k] = v + } return merged } @@ -355,16 +371,32 @@ // // conversion logic... // return nil // }) +// DEPRECATED: Will be removed in favor of RegisterUntypedConversionFunc func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error { return c.conversionFuncs.Add(conversionFunc) } // Similar to RegisterConversionFunc, but registers conversion function that were // automatically generated. +// DEPRECATED: Will be removed in favor of RegisterGeneratedUntypedConversionFunc func (c *Converter) RegisterGeneratedConversionFunc(conversionFunc interface{}) error { return c.generatedConversionFuncs.Add(conversionFunc) } +// RegisterUntypedConversionFunc registers a function that converts between a and b by passing objects of those +// types to the provided function. The function *must* accept objects of a and b - this machinery will not enforce +// any other guarantee. +func (c *Converter) RegisterUntypedConversionFunc(a, b interface{}, fn ConversionFunc) error { + return c.conversionFuncs.AddUntyped(a, b, fn) +} + +// RegisterGeneratedUntypedConversionFunc registers a function that converts between a and b by passing objects of those +// types to the provided function. The function *must* accept objects of a and b - this machinery will not enforce +// any other guarantee. +func (c *Converter) RegisterGeneratedUntypedConversionFunc(a, b interface{}, fn ConversionFunc) error { + return c.generatedConversionFuncs.AddUntyped(a, b, fn) +} + // RegisterIgnoredConversion registers a "no-op" for conversion, where any requested // conversion between from and to is ignored. func (c *Converter) RegisterIgnoredConversion(from, to interface{}) error { @@ -380,39 +412,6 @@ return nil } -// IsConversionIgnored returns true if the specified objects should be dropped during -// conversion. -func (c *Converter) IsConversionIgnored(inType, outType reflect.Type) bool { - _, found := c.ignoredConversions[typePair{inType, outType}] - return found -} - -func (c *Converter) HasConversionFunc(inType, outType reflect.Type) bool { - _, found := c.conversionFuncs.fns[typePair{inType, outType}] - return found -} - -func (c *Converter) ConversionFuncValue(inType, outType reflect.Type) (reflect.Value, bool) { - value, found := c.conversionFuncs.fns[typePair{inType, outType}] - return value, found -} - -// SetStructFieldCopy registers a correspondence. Whenever a struct field is encountered -// which has a type and name matching srcFieldType and srcFieldName, it wil be copied -// into the field in the destination struct matching destFieldType & Name, if such a -// field exists. -// May be called multiple times, even for the same source field & type--all applicable -// copies will be performed. -func (c *Converter) SetStructFieldCopy(srcFieldType interface{}, srcFieldName string, destFieldType interface{}, destFieldName string) error { - st := reflect.TypeOf(srcFieldType) - dt := reflect.TypeOf(destFieldType) - srcKey := typeNamePair{st, srcFieldName} - destKey := typeNamePair{dt, destFieldName} - c.structFieldDests[srcKey] = append(c.structFieldDests[srcKey], destKey) - c.structFieldSources[destKey] = append(c.structFieldSources[destKey], srcKey) - return nil -} - // RegisterInputDefaults registers a field name mapping function, used when converting // from maps to structs. Inputs to the conversion methods are checked for this type and a mapping // applied automatically if the input matches in. A set of default flags for the input conversion @@ -468,15 +467,6 @@ // it is not used by Convert() other than storing it in the scope. // Not safe for objects with cyclic references! func (c *Converter) Convert(src, dest interface{}, flags FieldMatchingFlags, meta *Meta) error { - if len(c.genericConversions) > 0 { - // TODO: avoid scope allocation - s := &scope{converter: c, flags: flags, meta: meta} - for _, fn := range c.genericConversions { - if ok, err := fn(src, dest, s); ok { - return err - } - } - } return c.doConversion(src, dest, flags, meta, c.convert) } @@ -495,6 +485,21 @@ type conversionFunc func(sv, dv reflect.Value, scope *scope) error func (c *Converter) doConversion(src, dest interface{}, flags FieldMatchingFlags, meta *Meta, f conversionFunc) error { + pair := typePair{reflect.TypeOf(src), reflect.TypeOf(dest)} + scope := &scope{ + converter: c, + flags: flags, + meta: meta, + } + if fn, ok := c.conversionFuncs.untyped[pair]; ok { + return fn(src, dest, scope) + } + if fn, ok := c.generatedConversionFuncs.untyped[pair]; ok { + return fn(src, dest, scope) + } + // TODO: consider everything past this point deprecated - we want to support only point to point top level + // conversions + dv, err := EnforcePtr(dest) if err != nil { return err @@ -506,15 +511,10 @@ if err != nil { return err } - s := &scope{ - converter: c, - flags: flags, - meta: meta, - } // Leave something on the stack, so that calls to struct tag getters never fail. - s.srcStack.push(scopeStackElem{}) - s.destStack.push(scopeStackElem{}) - return f(sv, dv, s) + scope.srcStack.push(scopeStackElem{}) + scope.destStack.push(scopeStackElem{}) + return f(sv, dv, scope) } // callCustom calls 'custom' with sv & dv. custom must be a conversion function. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go 2020-12-10 21:46:52.000000000 +0000 @@ -54,10 +54,6 @@ return tag, omitempty } -func formatValue(value interface{}) string { - return fmt.Sprintf("%v", value) -} - func isPointerKind(kind reflect.Kind) bool { return kind == reflect.Ptr } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/labels.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/labels.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/labels.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/labels.go 2020-12-10 21:46:52.000000000 +0000 @@ -172,7 +172,7 @@ return labelsMap, err } value := strings.TrimSpace(l[1]) - if err := validateLabelValue(value); err != nil { + if err := validateLabelValue(key, value); err != nil { return labelsMap, err } labelsMap[key] = value diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/selector.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/selector.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/selector.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/labels/selector.go 2020-12-10 21:46:52.000000000 +0000 @@ -23,10 +23,10 @@ "strconv" "strings" - "github.com/golang/glog" "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" + "k8s.io/klog" ) // Requirements is AND of all requirements. @@ -162,7 +162,7 @@ } for i := range vals { - if err := validateLabelValue(vals[i]); err != nil { + if err := validateLabelValue(key, vals[i]); err != nil { return nil, err } } @@ -211,13 +211,13 @@ } lsValue, err := strconv.ParseInt(ls.Get(r.key), 10, 64) if err != nil { - glog.V(10).Infof("ParseInt failed for value %+v in label %+v, %+v", ls.Get(r.key), ls, err) + klog.V(10).Infof("ParseInt failed for value %+v in label %+v, %+v", ls.Get(r.key), ls, err) return false } // There should be only one strValue in r.strValues, and can be converted to a integer. if len(r.strValues) != 1 { - glog.V(10).Infof("Invalid values count %+v of requirement %#v, for 'Gt', 'Lt' operators, exactly one value is required", len(r.strValues), r) + klog.V(10).Infof("Invalid values count %+v of requirement %#v, for 'Gt', 'Lt' operators, exactly one value is required", len(r.strValues), r) return false } @@ -225,7 +225,7 @@ for i := range r.strValues { rValue, err = strconv.ParseInt(r.strValues[i], 10, 64) if err != nil { - glog.V(10).Infof("ParseInt failed for value %+v in requirement %#v, for 'Gt', 'Lt' operators, the value must be an integer", r.strValues[i], r) + klog.V(10).Infof("ParseInt failed for value %+v in requirement %#v, for 'Gt', 'Lt' operators, the value must be an integer", r.strValues[i], r) return false } } @@ -837,9 +837,9 @@ return nil } -func validateLabelValue(v string) error { +func validateLabelValue(k, v string) error { if errs := validation.IsValidLabelValue(v); len(errs) != 0 { - return fmt.Errorf("invalid label value: %q: %s", v, strings.Join(errs, "; ")) + return fmt.Errorf("invalid label value: %q: at key: %q: %s", v, k, strings.Join(errs, "; ")) } return nil } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/codec.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/codec.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/codec.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/codec.go 2020-12-10 21:46:52.000000000 +0000 @@ -76,24 +76,6 @@ return string(bytes) } -// DefaultingSerializer invokes defaulting after decoding. -type DefaultingSerializer struct { - Defaulter ObjectDefaulter - Decoder Decoder - // Encoder is optional to allow this type to be used as both a Decoder and an Encoder - Encoder -} - -// Decode performs a decode and then allows the defaulter to act on the provided object. -func (d DefaultingSerializer) Decode(data []byte, defaultGVK *schema.GroupVersionKind, into Object) (Object, *schema.GroupVersionKind, error) { - obj, gvk, err := d.Decoder.Decode(data, defaultGVK, into) - if err != nil { - return obj, gvk, err - } - d.Defaulter.Default(obj) - return obj, gvk, nil -} - // UseOrCreateObject returns obj if the canonical ObjectKind returned by the provided typer matches gvk, or // invokes the ObjectCreator to instantiate a new gvk. Returns an error if the typer cannot find the object. func UseOrCreateObject(t ObjectTyper, c ObjectCreater, gvk schema.GroupVersionKind, obj Object) (Object, error) { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/conversion.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,7 +14,7 @@ limitations under the License. */ -// Defines conversions between generic types and structs to map query strings +// Package runtime defines conversions between generic types and structs to map query strings // to struct objects. package runtime @@ -27,7 +27,7 @@ "k8s.io/apimachinery/pkg/conversion" ) -// DefaultFieldSelectorConversion auto-accepts metav1 values for name and namespace. +// DefaultMetaV1FieldSelectorConversion auto-accepts metav1 values for name and namespace. // A cluster scoped resource specifying namespace empty works fine and specifying a particular // namespace will return no results, as expected. func DefaultMetaV1FieldSelectorConversion(label, value string) (string, string, error) { @@ -82,7 +82,7 @@ return nil } -// Conver_Slice_string_To_bool will convert a string parameter to boolean. +// Convert_Slice_string_To_bool will convert a string parameter to boolean. // Only the absence of a value, a value of "false", or a value of "0" resolve to false. // Any other value (including empty string) resolves to true. func Convert_Slice_string_To_bool(input *[]string, out *bool, s conversion.Scope) error { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/converter.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/converter.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/converter.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/converter.go 2020-12-10 21:46:52.000000000 +0000 @@ -33,7 +33,7 @@ "k8s.io/apimachinery/pkg/util/json" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "github.com/golang/glog" + "k8s.io/klog" ) // UnstructuredConverter is an interface for converting between interface{} @@ -94,7 +94,7 @@ } value, err := strconv.ParseBool(key) if err != nil { - utilruntime.HandleError(fmt.Errorf("Couldn't parse '%s' as bool for unstructured mismatch detection", key)) + utilruntime.HandleError(fmt.Errorf("couldn't parse '%s' as bool for unstructured mismatch detection", key)) } return value } @@ -133,10 +133,10 @@ newObj := reflect.New(t.Elem()).Interface() newErr := fromUnstructuredViaJSON(u, newObj) if (err != nil) != (newErr != nil) { - glog.Fatalf("FromUnstructured unexpected error for %v: error: %v", u, err) + klog.Fatalf("FromUnstructured unexpected error for %v: error: %v", u, err) } if err == nil && !c.comparison.DeepEqual(obj, newObj) { - glog.Fatalf("FromUnstructured mismatch\nobj1: %#v\nobj2: %#v", obj, newObj) + klog.Fatalf("FromUnstructured mismatch\nobj1: %#v\nobj2: %#v", obj, newObj) } } return err @@ -424,10 +424,10 @@ newUnstr := map[string]interface{}{} newErr := toUnstructuredViaJSON(obj, &newUnstr) if (err != nil) != (newErr != nil) { - glog.Fatalf("ToUnstructured unexpected error for %v: error: %v; newErr: %v", obj, err, newErr) + klog.Fatalf("ToUnstructured unexpected error for %v: error: %v; newErr: %v", obj, err, newErr) } if err == nil && !c.comparison.DeepEqual(u, newUnstr) { - glog.Fatalf("ToUnstructured mismatch\nobj1: %#v\nobj2: %#v", u, newUnstr) + klog.Fatalf("ToUnstructured mismatch\nobj1: %#v\nobj2: %#v", u, newUnstr) } } if err != nil { @@ -746,7 +746,7 @@ func structToUnstructured(sv, dv reflect.Value) error { st, dt := sv.Type(), dv.Type() if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 { - dv.Set(reflect.MakeMap(mapStringInterfaceType)) + dv.Set(reflect.MakeMapWithSize(mapStringInterfaceType, st.NumField())) dv = dv.Elem() dt = dv.Type() } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,20 +18,27 @@ // that follow the kubernetes API object conventions, which are: // // 0. Your API objects have a common metadata struct member, TypeMeta. +// // 1. Your code refers to an internal set of API objects. +// // 2. In a separate package, you have an external set of API objects. +// // 3. The external set is considered to be versioned, and no breaking -// changes are ever made to it (fields may be added but not changed -// or removed). +// changes are ever made to it (fields may be added but not changed +// or removed). +// // 4. As your api evolves, you'll make an additional versioned package -// with every major change. +// with every major change. +// // 5. Versioned packages have conversion functions which convert to -// and from the internal version. +// and from the internal version. +// // 6. You'll continue to support older versions according to your -// deprecation policy, and you can easily provide a program/library -// to update old versions into new versions because of 5. +// deprecation policy, and you can easily provide a program/library +// to update old versions into new versions because of 5. +// // 7. All of your serializations and deserializations are handled in a -// centralized place. +// centralized place. // // Package runtime provides a conversion helper to make 5 easy, and the // Encode/Decode/DecodeInto trio to accomplish 7. You can also register @@ -41,5 +48,4 @@ // // As a bonus, a few common types useful from all api objects and versions // are provided in types.go. - package runtime // import "k8s.io/apimachinery/pkg/runtime" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/embedded.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,7 +31,7 @@ func (e encodable) GetObjectKind() schema.ObjectKind { return e.obj.GetObjectKind() } func (e encodable) DeepCopyObject() Object { - var out encodable = e + out := e out.obj = e.obj.DeepCopyObject() copy(out.versions, e.versions) return out @@ -46,14 +46,14 @@ return encodable{e, obj, versions} } -func (re encodable) UnmarshalJSON(in []byte) error { +func (e encodable) UnmarshalJSON(in []byte) error { return errors.New("runtime.encodable cannot be unmarshalled from JSON") } // Marshal may get called on pointers or values, so implement MarshalJSON on value. // http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go -func (re encodable) MarshalJSON() ([]byte, error) { - return Encode(re.E, re.obj) +func (e encodable) MarshalJSON() ([]byte, error) { + return Encode(e.E, e.obj) } // NewEncodableList creates an object that will be encoded with the provided codec on demand. @@ -70,28 +70,28 @@ return out } -func (re *Unknown) UnmarshalJSON(in []byte) error { - if re == nil { +func (e *Unknown) UnmarshalJSON(in []byte) error { + if e == nil { return errors.New("runtime.Unknown: UnmarshalJSON on nil pointer") } - re.TypeMeta = TypeMeta{} - re.Raw = append(re.Raw[0:0], in...) - re.ContentEncoding = "" - re.ContentType = ContentTypeJSON + e.TypeMeta = TypeMeta{} + e.Raw = append(e.Raw[0:0], in...) + e.ContentEncoding = "" + e.ContentType = ContentTypeJSON return nil } // Marshal may get called on pointers or values, so implement MarshalJSON on value. // http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go -func (re Unknown) MarshalJSON() ([]byte, error) { +func (e Unknown) MarshalJSON() ([]byte, error) { // If ContentType is unset, we assume this is JSON. - if re.ContentType != "" && re.ContentType != ContentTypeJSON { + if e.ContentType != "" && e.ContentType != ContentTypeJSON { return nil, errors.New("runtime.Unknown: MarshalJSON on non-json data") } - if re.Raw == nil { + if e.Raw == nil { return []byte("null"), nil } - return re.Raw, nil + return e.Raw, nil } func Convert_runtime_Object_To_runtime_RawExtension(in *Object, out *RawExtension, s conversion.Scope) error { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/error.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/error.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/error.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/error.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,46 +24,47 @@ ) type notRegisteredErr struct { - gvk schema.GroupVersionKind - target GroupVersioner - t reflect.Type + schemeName string + gvk schema.GroupVersionKind + target GroupVersioner + t reflect.Type } -func NewNotRegisteredErrForKind(gvk schema.GroupVersionKind) error { - return ¬RegisteredErr{gvk: gvk} +func NewNotRegisteredErrForKind(schemeName string, gvk schema.GroupVersionKind) error { + return ¬RegisteredErr{schemeName: schemeName, gvk: gvk} } -func NewNotRegisteredErrForType(t reflect.Type) error { - return ¬RegisteredErr{t: t} +func NewNotRegisteredErrForType(schemeName string, t reflect.Type) error { + return ¬RegisteredErr{schemeName: schemeName, t: t} } -func NewNotRegisteredErrForTarget(t reflect.Type, target GroupVersioner) error { - return ¬RegisteredErr{t: t, target: target} +func NewNotRegisteredErrForTarget(schemeName string, t reflect.Type, target GroupVersioner) error { + return ¬RegisteredErr{schemeName: schemeName, t: t, target: target} } -func NewNotRegisteredGVKErrForTarget(gvk schema.GroupVersionKind, target GroupVersioner) error { - return ¬RegisteredErr{gvk: gvk, target: target} +func NewNotRegisteredGVKErrForTarget(schemeName string, gvk schema.GroupVersionKind, target GroupVersioner) error { + return ¬RegisteredErr{schemeName: schemeName, gvk: gvk, target: target} } func (k *notRegisteredErr) Error() string { if k.t != nil && k.target != nil { - return fmt.Sprintf("%v is not suitable for converting to %q", k.t, k.target) + return fmt.Sprintf("%v is not suitable for converting to %q in scheme %q", k.t, k.target, k.schemeName) } nullGVK := schema.GroupVersionKind{} if k.gvk != nullGVK && k.target != nil { - return fmt.Sprintf("%q is not suitable for converting to %q", k.gvk.GroupVersion(), k.target) + return fmt.Sprintf("%q is not suitable for converting to %q in scheme %q", k.gvk.GroupVersion(), k.target, k.schemeName) } if k.t != nil { - return fmt.Sprintf("no kind is registered for the type %v", k.t) + return fmt.Sprintf("no kind is registered for the type %v in scheme %q", k.t, k.schemeName) } if len(k.gvk.Kind) == 0 { - return fmt.Sprintf("no version %q has been registered", k.gvk.GroupVersion()) + return fmt.Sprintf("no version %q has been registered in scheme %q", k.gvk.GroupVersion(), k.schemeName) } if k.gvk.Version == APIVersionInternal { - return fmt.Sprintf("no kind %q is registered for the internal version of group %q", k.gvk.Kind, k.gvk.Group) + return fmt.Sprintf("no kind %q is registered for the internal version of group %q in scheme %q", k.gvk.Kind, k.gvk.Group, k.schemeName) } - return fmt.Sprintf("no kind %q is registered for version %q", k.gvk.Kind, k.gvk.GroupVersion()) + return fmt.Sprintf("no kind %q is registered for version %q in scheme %q", k.gvk.Kind, k.gvk.GroupVersion(), k.schemeName) } // IsNotRegisteredError returns true if the error indicates the provided @@ -119,3 +120,32 @@ _, ok := err.(*missingVersionErr) return ok } + +// strictDecodingError is a base error type that is returned by a strict Decoder such +// as UniversalStrictDecoder. +type strictDecodingError struct { + message string + data string +} + +// NewStrictDecodingError creates a new strictDecodingError object. +func NewStrictDecodingError(message string, data string) error { + return &strictDecodingError{ + message: message, + data: data, + } +} + +func (e *strictDecodingError) Error() string { + return fmt.Sprintf("strict decoder error for %s: %s", e.data, e.message) +} + +// IsStrictDecodingError returns true if the error indicates that the provided object +// strictness violations. +func IsStrictDecodingError(err error) bool { + if err == nil { + return false + } + _, ok := err.(*strictDecodingError) + return ok +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/extension.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/extension.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/extension.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/extension.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,7 @@ return nil } -// Marshal may get called on pointers or values, so implement MarshalJSON on value. +// MarshalJSON may get called on pointers or values, so implement MarshalJSON on value. // http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go func (re RawExtension) MarshalJSON() ([]byte, error) { if re.Raw == nil { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,31 +14,22 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto -// DO NOT EDIT! -/* - Package runtime is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto - - It has these top-level messages: - RawExtension - TypeMeta - Unknown -*/ package runtime -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import strings "strings" -import reflect "reflect" + io "io" + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" -import io "io" + proto "github.com/gogo/protobuf/proto" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -51,27 +42,132 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *RawExtension) Reset() { *m = RawExtension{} } -func (*RawExtension) ProtoMessage() {} -func (*RawExtension) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - -func (m *TypeMeta) Reset() { *m = TypeMeta{} } -func (*TypeMeta) ProtoMessage() {} -func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } - -func (m *Unknown) Reset() { *m = Unknown{} } -func (*Unknown) ProtoMessage() {} -func (*Unknown) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (m *RawExtension) Reset() { *m = RawExtension{} } +func (*RawExtension) ProtoMessage() {} +func (*RawExtension) Descriptor() ([]byte, []int) { + return fileDescriptor_9d3c45d7f546725c, []int{0} +} +func (m *RawExtension) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RawExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RawExtension) XXX_Merge(src proto.Message) { + xxx_messageInfo_RawExtension.Merge(m, src) +} +func (m *RawExtension) XXX_Size() int { + return m.Size() +} +func (m *RawExtension) XXX_DiscardUnknown() { + xxx_messageInfo_RawExtension.DiscardUnknown(m) +} + +var xxx_messageInfo_RawExtension proto.InternalMessageInfo + +func (m *TypeMeta) Reset() { *m = TypeMeta{} } +func (*TypeMeta) ProtoMessage() {} +func (*TypeMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_9d3c45d7f546725c, []int{1} +} +func (m *TypeMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TypeMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TypeMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TypeMeta.Merge(m, src) +} +func (m *TypeMeta) XXX_Size() int { + return m.Size() +} +func (m *TypeMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TypeMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TypeMeta proto.InternalMessageInfo + +func (m *Unknown) Reset() { *m = Unknown{} } +func (*Unknown) ProtoMessage() {} +func (*Unknown) Descriptor() ([]byte, []int) { + return fileDescriptor_9d3c45d7f546725c, []int{2} +} +func (m *Unknown) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Unknown) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Unknown) XXX_Merge(src proto.Message) { + xxx_messageInfo_Unknown.Merge(m, src) +} +func (m *Unknown) XXX_Size() int { + return m.Size() +} +func (m *Unknown) XXX_DiscardUnknown() { + xxx_messageInfo_Unknown.DiscardUnknown(m) +} + +var xxx_messageInfo_Unknown proto.InternalMessageInfo func init() { proto.RegisterType((*RawExtension)(nil), "k8s.io.apimachinery.pkg.runtime.RawExtension") proto.RegisterType((*TypeMeta)(nil), "k8s.io.apimachinery.pkg.runtime.TypeMeta") proto.RegisterType((*Unknown)(nil), "k8s.io.apimachinery.pkg.runtime.Unknown") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto", fileDescriptor_9d3c45d7f546725c) +} + +var fileDescriptor_9d3c45d7f546725c = []byte{ + // 378 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x8f, 0x4f, 0xab, 0x13, 0x31, + 0x14, 0xc5, 0x27, 0xaf, 0x85, 0x3e, 0xd3, 0xc2, 0x93, 0xb8, 0x70, 0x74, 0x91, 0x79, 0x74, 0xe5, + 0x5b, 0xbc, 0x04, 0x1e, 0x08, 0x6e, 0x3b, 0xa5, 0xa0, 0x88, 0x20, 0xc1, 0x3f, 0xe0, 0xca, 0x74, + 0x26, 0x4e, 0xc3, 0xd0, 0x9b, 0x21, 0xcd, 0x38, 0x76, 0xe7, 0x47, 0xf0, 0x63, 0x75, 0xd9, 0x65, + 0x57, 0xc5, 0x8e, 0x1f, 0xc2, 0xad, 0x34, 0x4d, 0x6b, 0xd5, 0x85, 0xbb, 0xe4, 0x9e, 0xf3, 0x3b, + 0xf7, 0x1e, 0xfc, 0xbc, 0x7c, 0xb6, 0x60, 0xda, 0xf0, 0xb2, 0x9e, 0x2a, 0x0b, 0xca, 0xa9, 0x05, + 0xff, 0xac, 0x20, 0x37, 0x96, 0x07, 0x41, 0x56, 0x7a, 0x2e, 0xb3, 0x99, 0x06, 0x65, 0x97, 0xbc, + 0x2a, 0x0b, 0x6e, 0x6b, 0x70, 0x7a, 0xae, 0x78, 0xa1, 0x40, 0x59, 0xe9, 0x54, 0xce, 0x2a, 0x6b, + 0x9c, 0x21, 0xc9, 0x01, 0x60, 0xe7, 0x00, 0xab, 0xca, 0x82, 0x05, 0xe0, 0xf1, 0x6d, 0xa1, 0xdd, + 0xac, 0x9e, 0xb2, 0xcc, 0xcc, 0x79, 0x61, 0x0a, 0xc3, 0x3d, 0x37, 0xad, 0x3f, 0xf9, 0x9f, 0xff, + 0xf8, 0xd7, 0x21, 0x6f, 0x78, 0x83, 0x07, 0x42, 0x36, 0x93, 0x2f, 0x4e, 0xc1, 0x42, 0x1b, 0x20, + 0x8f, 0x70, 0xc7, 0xca, 0x26, 0x46, 0xd7, 0xe8, 0xc9, 0x20, 0xed, 0xb5, 0xdb, 0xa4, 0x23, 0x64, + 0x23, 0xf6, 0xb3, 0xe1, 0x47, 0x7c, 0xf9, 0x66, 0x59, 0xa9, 0x57, 0xca, 0x49, 0x72, 0x87, 0xb1, + 0xac, 0xf4, 0x3b, 0x65, 0xf7, 0x90, 0x77, 0xdf, 0x4b, 0xc9, 0x6a, 0x9b, 0x44, 0xed, 0x36, 0xc1, + 0xa3, 0xd7, 0x2f, 0x82, 0x22, 0xce, 0x5c, 0xe4, 0x1a, 0x77, 0x4b, 0x0d, 0x79, 0x7c, 0xe1, 0xdd, + 0x83, 0xe0, 0xee, 0xbe, 0xd4, 0x90, 0x0b, 0xaf, 0x0c, 0x7f, 0x22, 0xdc, 0x7b, 0x0b, 0x25, 0x98, + 0x06, 0xc8, 0x7b, 0x7c, 0xe9, 0xc2, 0x36, 0x9f, 0xdf, 0xbf, 0xbb, 0x61, 0xff, 0xe9, 0xce, 0x8e, + 0xe7, 0xa5, 0xf7, 0x43, 0xf8, 0xe9, 0x60, 0x71, 0x0a, 0x3b, 0x36, 0xbc, 0xf8, 0xb7, 0x21, 0x19, + 0xe1, 0xab, 0xcc, 0x80, 0x53, 0xe0, 0x26, 0x90, 0x99, 0x5c, 0x43, 0x11, 0x77, 0xfc, 0xb1, 0x0f, + 0x43, 0xde, 0xd5, 0xf8, 0x4f, 0x59, 0xfc, 0xed, 0x27, 0x4f, 0x71, 0x3f, 0x8c, 0xf6, 0xab, 0xe3, + 0xae, 0xc7, 0x1f, 0x04, 0xbc, 0x3f, 0xfe, 0x2d, 0x89, 0x73, 0x5f, 0x7a, 0xbb, 0xda, 0xd1, 0x68, + 0xbd, 0xa3, 0xd1, 0x66, 0x47, 0xa3, 0xaf, 0x2d, 0x45, 0xab, 0x96, 0xa2, 0x75, 0x4b, 0xd1, 0xa6, + 0xa5, 0xe8, 0x7b, 0x4b, 0xd1, 0xb7, 0x1f, 0x34, 0xfa, 0xd0, 0x0b, 0x45, 0x7f, 0x05, 0x00, 0x00, + 0xff, 0xff, 0xe3, 0x33, 0x18, 0x0b, 0x50, 0x02, 0x00, 0x00, +} + func (m *RawExtension) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -79,23 +175,29 @@ } func (m *RawExtension) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RawExtension) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Raw != nil { - dAtA[i] = 0xa - i++ + i -= len(m.Raw) + copy(dAtA[i:], m.Raw) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Raw))) - i += copy(dAtA[i:], m.Raw) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *TypeMeta) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -103,25 +205,32 @@ } func (m *TypeMeta) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TypeMeta) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) - i += copy(dAtA[i:], m.APIVersion) - dAtA[i] = 0x12 - i++ + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) - i += copy(dAtA[i:], m.Kind) - return i, nil + i-- + dAtA[i] = 0x12 + i -= len(m.APIVersion) + copy(dAtA[i:], m.APIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIVersion))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *Unknown) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -129,63 +238,60 @@ } func (m *Unknown) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Unknown) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TypeMeta.Size())) - n1, err := m.TypeMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 + i -= len(m.ContentType) + copy(dAtA[i:], m.ContentType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContentType))) + i-- + dAtA[i] = 0x22 + i -= len(m.ContentEncoding) + copy(dAtA[i:], m.ContentEncoding) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContentEncoding))) + i-- + dAtA[i] = 0x1a if m.Raw != nil { - dAtA[i] = 0x12 - i++ + i -= len(m.Raw) + copy(dAtA[i:], m.Raw) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Raw))) - i += copy(dAtA[i:], m.Raw) + i-- + dAtA[i] = 0x12 } - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContentEncoding))) - i += copy(dAtA[i:], m.ContentEncoding) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContentType))) - i += copy(dAtA[i:], m.ContentType) - return i, nil + { + size, err := m.TypeMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *RawExtension) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Raw != nil { @@ -196,6 +302,9 @@ } func (m *TypeMeta) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.APIVersion) @@ -206,6 +315,9 @@ } func (m *Unknown) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = m.TypeMeta.Size() @@ -222,14 +334,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -291,7 +396,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -319,7 +424,7 @@ } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -328,6 +433,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -345,6 +453,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -372,7 +483,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -400,7 +511,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -410,6 +521,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -429,7 +543,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -439,6 +553,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -453,6 +570,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -480,7 +600,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -508,7 +628,7 @@ } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -517,6 +637,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -538,7 +661,7 @@ } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -547,6 +670,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -569,7 +695,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -579,6 +705,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -598,7 +727,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -608,6 +737,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -622,6 +754,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -688,10 +823,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -720,6 +858,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -738,35 +879,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 378 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x8f, 0x4f, 0xab, 0x13, 0x31, - 0x14, 0xc5, 0x27, 0xaf, 0x85, 0x3e, 0xd3, 0xc2, 0x93, 0xb8, 0x70, 0x74, 0x91, 0x79, 0x74, 0xe5, - 0x5b, 0xbc, 0x04, 0x1e, 0x08, 0x6e, 0x3b, 0xa5, 0xa0, 0x88, 0x20, 0xc1, 0x3f, 0xe0, 0xca, 0x74, - 0x26, 0x4e, 0xc3, 0xd0, 0x9b, 0x21, 0xcd, 0x38, 0x76, 0xe7, 0x47, 0xf0, 0x63, 0x75, 0xd9, 0x65, - 0x57, 0xc5, 0x8e, 0x1f, 0xc2, 0xad, 0x34, 0x4d, 0x6b, 0xd5, 0x85, 0xbb, 0xe4, 0x9e, 0xf3, 0x3b, - 0xf7, 0x1e, 0xfc, 0xbc, 0x7c, 0xb6, 0x60, 0xda, 0xf0, 0xb2, 0x9e, 0x2a, 0x0b, 0xca, 0xa9, 0x05, - 0xff, 0xac, 0x20, 0x37, 0x96, 0x07, 0x41, 0x56, 0x7a, 0x2e, 0xb3, 0x99, 0x06, 0x65, 0x97, 0xbc, - 0x2a, 0x0b, 0x6e, 0x6b, 0x70, 0x7a, 0xae, 0x78, 0xa1, 0x40, 0x59, 0xe9, 0x54, 0xce, 0x2a, 0x6b, - 0x9c, 0x21, 0xc9, 0x01, 0x60, 0xe7, 0x00, 0xab, 0xca, 0x82, 0x05, 0xe0, 0xf1, 0x6d, 0xa1, 0xdd, - 0xac, 0x9e, 0xb2, 0xcc, 0xcc, 0x79, 0x61, 0x0a, 0xc3, 0x3d, 0x37, 0xad, 0x3f, 0xf9, 0x9f, 0xff, - 0xf8, 0xd7, 0x21, 0x6f, 0x78, 0x83, 0x07, 0x42, 0x36, 0x93, 0x2f, 0x4e, 0xc1, 0x42, 0x1b, 0x20, - 0x8f, 0x70, 0xc7, 0xca, 0x26, 0x46, 0xd7, 0xe8, 0xc9, 0x20, 0xed, 0xb5, 0xdb, 0xa4, 0x23, 0x64, - 0x23, 0xf6, 0xb3, 0xe1, 0x47, 0x7c, 0xf9, 0x66, 0x59, 0xa9, 0x57, 0xca, 0x49, 0x72, 0x87, 0xb1, - 0xac, 0xf4, 0x3b, 0x65, 0xf7, 0x90, 0x77, 0xdf, 0x4b, 0xc9, 0x6a, 0x9b, 0x44, 0xed, 0x36, 0xc1, - 0xa3, 0xd7, 0x2f, 0x82, 0x22, 0xce, 0x5c, 0xe4, 0x1a, 0x77, 0x4b, 0x0d, 0x79, 0x7c, 0xe1, 0xdd, - 0x83, 0xe0, 0xee, 0xbe, 0xd4, 0x90, 0x0b, 0xaf, 0x0c, 0x7f, 0x22, 0xdc, 0x7b, 0x0b, 0x25, 0x98, - 0x06, 0xc8, 0x7b, 0x7c, 0xe9, 0xc2, 0x36, 0x9f, 0xdf, 0xbf, 0xbb, 0x61, 0xff, 0xe9, 0xce, 0x8e, - 0xe7, 0xa5, 0xf7, 0x43, 0xf8, 0xe9, 0x60, 0x71, 0x0a, 0x3b, 0x36, 0xbc, 0xf8, 0xb7, 0x21, 0x19, - 0xe1, 0xab, 0xcc, 0x80, 0x53, 0xe0, 0x26, 0x90, 0x99, 0x5c, 0x43, 0x11, 0x77, 0xfc, 0xb1, 0x0f, - 0x43, 0xde, 0xd5, 0xf8, 0x4f, 0x59, 0xfc, 0xed, 0x27, 0x4f, 0x71, 0x3f, 0x8c, 0xf6, 0xab, 0xe3, - 0xae, 0xc7, 0x1f, 0x04, 0xbc, 0x3f, 0xfe, 0x2d, 0x89, 0x73, 0x5f, 0x7a, 0xbb, 0xda, 0xd1, 0x68, - 0xbd, 0xa3, 0xd1, 0x66, 0x47, 0xa3, 0xaf, 0x2d, 0x45, 0xab, 0x96, 0xa2, 0x75, 0x4b, 0xd1, 0xa6, - 0xa5, 0xe8, 0x7b, 0x4b, 0xd1, 0xb7, 0x1f, 0x34, 0xfa, 0xd0, 0x0b, 0x45, 0x7f, 0x05, 0x00, 0x00, - 0xff, 0xff, 0xe3, 0x33, 0x18, 0x0b, 0x50, 0x02, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -25,11 +25,11 @@ option go_package = "runtime"; // RawExtension is used to hold extensions in external versions. -// +// // To use this, make a field which has RawExtension as its type in your external, versioned // struct, and Object in your internal struct. You also need to register your // various plugin types. -// +// // // Internal package: // type MyAPIObject struct { // runtime.TypeMeta `json:",inline"` @@ -38,7 +38,7 @@ // type PluginA struct { // AOption string `json:"aOption"` // } -// +// // // External package: // type MyAPIObject struct { // runtime.TypeMeta `json:",inline"` @@ -47,7 +47,7 @@ // type PluginA struct { // AOption string `json:"aOption"` // } -// +// // // On the wire, the JSON will look something like this: // { // "kind":"MyAPIObject", @@ -57,7 +57,7 @@ // "aOption":"foo", // }, // } -// +// // So what happens? Decode first uses json or yaml to unmarshal the serialized data into // your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. // The next step is to copy (using pkg/conversion) into the internal struct. The runtime @@ -65,13 +65,13 @@ // JSON stored in RawExtension, turning it into the correct object type, and storing it // in the Object. (TODO: In the case where the object is of an unknown type, a // runtime.Unknown object will be created and stored.) -// +// // +k8s:deepcopy-gen=true // +protobuf=true // +k8s:openapi-gen=true message RawExtension { // Raw is the underlying serialization of this object. - // + // // TODO: Determine how to detect ContentType and ContentEncoding of 'Raw' data. optional bytes raw = 1; } @@ -83,10 +83,10 @@ // ... // other fields // } // func (obj *MyAwesomeAPIObject) SetGroupVersionKind(gvk *metav1.GroupVersionKind) { metav1.UpdateTypeMeta(obj,gvk) }; GroupVersionKind() *GroupVersionKind -// +// // TypeMeta is provided here for convenience. You may use it directly from this package or define // your own with the same fields. -// +// // +k8s:deepcopy-gen=false // +protobuf=true // +k8s:openapi-gen=true @@ -103,7 +103,7 @@ // TypeMeta features-- kind, version, etc. // TODO: Make this object have easy access to field based accessors and settors for // metadata and field mutatation. -// +// // +k8s:deepcopy-gen=true // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +protobuf=true diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/helper.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/helper.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/helper.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/helper.go 2020-12-10 21:46:52.000000000 +0000 @@ -51,7 +51,7 @@ func SetField(src interface{}, v reflect.Value, fieldName string) error { field := v.FieldByName(fieldName) if !field.IsValid() { - return fmt.Errorf("couldn't find %v field in %#v", fieldName, v.Interface()) + return fmt.Errorf("couldn't find %v field in %T", fieldName, v.Interface()) } srcValue := reflect.ValueOf(src) if srcValue.Type().AssignableTo(field.Type()) { @@ -70,7 +70,7 @@ func Field(v reflect.Value, fieldName string, dest interface{}) error { field := v.FieldByName(fieldName) if !field.IsValid() { - return fmt.Errorf("couldn't find %v field in %#v", fieldName, v.Interface()) + return fmt.Errorf("couldn't find %v field in %T", fieldName, v.Interface()) } destValue, err := conversion.EnforcePtr(dest) if err != nil { @@ -87,13 +87,13 @@ return fmt.Errorf("couldn't assign/convert %v to %v", field.Type(), destValue.Type()) } -// fieldPtr puts the address of fieldName, which must be a member of v, +// FieldPtr puts the address of fieldName, which must be a member of v, // into dest, which must be an address of a variable to which this field's // address can be assigned. func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error { field := v.FieldByName(fieldName) if !field.IsValid() { - return fmt.Errorf("couldn't find %v field in %#v", fieldName, v.Interface()) + return fmt.Errorf("couldn't find %v field in %T", fieldName, v.Interface()) } v, err := conversion.EnforcePtr(dest) if err != nil { @@ -210,3 +210,50 @@ func (defaultFramer) NewFrameReader(r io.ReadCloser) io.ReadCloser { return r } func (defaultFramer) NewFrameWriter(w io.Writer) io.Writer { return w } + +// WithVersionEncoder serializes an object and ensures the GVK is set. +type WithVersionEncoder struct { + Version GroupVersioner + Encoder + ObjectTyper +} + +// Encode does not do conversion. It sets the gvk during serialization. +func (e WithVersionEncoder) Encode(obj Object, stream io.Writer) error { + gvks, _, err := e.ObjectTyper.ObjectKinds(obj) + if err != nil { + if IsNotRegisteredError(err) { + return e.Encoder.Encode(obj, stream) + } + return err + } + kind := obj.GetObjectKind() + oldGVK := kind.GroupVersionKind() + gvk := gvks[0] + if e.Version != nil { + preferredGVK, ok := e.Version.KindForGroupVersionKinds(gvks) + if ok { + gvk = preferredGVK + } + } + kind.SetGroupVersionKind(gvk) + err = e.Encoder.Encode(obj, stream) + kind.SetGroupVersionKind(oldGVK) + return err +} + +// WithoutVersionDecoder clears the group version kind of a deserialized object. +type WithoutVersionDecoder struct { + Decoder +} + +// Decode does not do conversion. It removes the gvk during deserialization. +func (d WithoutVersionDecoder) Decode(data []byte, defaults *schema.GroupVersionKind, into Object) (Object, *schema.GroupVersionKind, error) { + obj, gvk, err := d.Decoder.Decode(data, defaults, into) + if obj != nil { + kind := obj.GetObjectKind() + // clearing the gvk is just a convention of a codec + kind.SetGroupVersionKind(schema.GroupVersionKind{}) + } + return obj, gvk, err +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go 2020-12-10 21:46:52.000000000 +0000 @@ -39,14 +39,14 @@ KindForGroupVersionKinds(kinds []schema.GroupVersionKind) (target schema.GroupVersionKind, ok bool) } -// Encoders write objects to a serialized form +// Encoder writes objects to a serialized form type Encoder interface { // Encode writes an object to a stream. Implementations may return errors if the versions are // incompatible, or if no conversion is defined. Encode(obj Object, w io.Writer) error } -// Decoders attempt to load an object from data. +// Decoder attempts to load an object from data. type Decoder interface { // Decode attempts to deserialize the provided data using either the innate typing of the scheme or the // default kind, group, and version provided. It returns a decoded object as well as the kind, group, and @@ -91,6 +91,10 @@ type SerializerInfo struct { // MediaType is the value that represents this serializer over the wire. MediaType string + // MediaTypeType is the first part of the MediaType ("application" in "application/json"). + MediaTypeType string + // MediaTypeSubType is the second part of the MediaType ("json" in "application/json"). + MediaTypeSubType string // EncodesAsText indicates this serializer can be encoded to UTF-8 safely. EncodesAsText bool // Serializer is the individual object serializer for this media type. @@ -185,7 +189,7 @@ // This method is similar to Convert() but handles specific details of choosing the correct // output version. ConvertToVersion(in Object, gv GroupVersioner) (out Object, err error) - ConvertFieldLabel(version, kind, label, value string) (string, string, error) + ConvertFieldLabel(gvk schema.GroupVersionKind, label, value string) (string, string, error) } // ObjectTyper contains methods for extracting the APIVersion and Kind @@ -206,6 +210,25 @@ New(kind schema.GroupVersionKind) (out Object, err error) } +// EquivalentResourceMapper provides information about resources that address the same underlying data as a specified resource +type EquivalentResourceMapper interface { + // EquivalentResourcesFor returns a list of resources that address the same underlying data as resource. + // If subresource is specified, only equivalent resources which also have the same subresource are included. + // The specified resource can be included in the returned list. + EquivalentResourcesFor(resource schema.GroupVersionResource, subresource string) []schema.GroupVersionResource + // KindFor returns the kind expected by the specified resource[/subresource]. + // A zero value is returned if the kind is unknown. + KindFor(resource schema.GroupVersionResource, subresource string) schema.GroupVersionKind +} + +// EquivalentResourceRegistry provides an EquivalentResourceMapper interface, +// and allows registering known resource[/subresource] -> kind +type EquivalentResourceRegistry interface { + EquivalentResourceMapper + // RegisterKindFor registers the existence of the specified resource[/subresource] along with its expected kind. + RegisterKindFor(resource schema.GroupVersionResource, subresource string, kind schema.GroupVersionKind) +} + // ResourceVersioner provides methods for setting and retrieving // the resource version from an API object. type ResourceVersioner interface { @@ -224,7 +247,7 @@ Namespace(obj Object) (string, error) } -// All API types registered with Scheme must support the Object interface. Since objects in a scheme are +// Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are // expected to be serialized to the wire, the interface an Object must provide to the Scheme allows // serializers to set the kind, version, and group the object is represented as. An Object may choose // to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized. @@ -237,6 +260,9 @@ // to JSON allowed. type Unstructured interface { Object + // NewEmptyInstance returns a new instance of the concrete type containing only kind/apiVersion and no other data. + // This should be called instead of reflect.New() for unstructured types because the go type alone does not preserve kind/apiVersion info. + NewEmptyInstance() Unstructured // UnstructuredContent returns a non-nil map with this object's contents. Values may be // []interface{}, map[string]interface{}, or any primitive type. Contents are typically serialized to // and from JSON. SetUnstructuredContent should be used to mutate the contents. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/mapper.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/mapper.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/mapper.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/mapper.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,98 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "sync" + + "k8s.io/apimachinery/pkg/runtime/schema" +) + +type equivalentResourceRegistry struct { + // keyFunc computes a key for the specified resource (this allows honoring colocated resources across API groups). + // if null, or if "" is returned, resource.String() is used as the key + keyFunc func(resource schema.GroupResource) string + // resources maps key -> subresource -> equivalent resources (subresource is not included in the returned resources). + // main resources are stored with subresource="". + resources map[string]map[string][]schema.GroupVersionResource + // kinds maps resource -> subresource -> kind + kinds map[schema.GroupVersionResource]map[string]schema.GroupVersionKind + // keys caches the computed key for each GroupResource + keys map[schema.GroupResource]string + + mutex sync.RWMutex +} + +var _ EquivalentResourceMapper = (*equivalentResourceRegistry)(nil) +var _ EquivalentResourceRegistry = (*equivalentResourceRegistry)(nil) + +// NewEquivalentResourceRegistry creates a resource registry that considers all versions of a GroupResource to be equivalent. +func NewEquivalentResourceRegistry() EquivalentResourceRegistry { + return &equivalentResourceRegistry{} +} + +// NewEquivalentResourceRegistryWithIdentity creates a resource mapper with a custom identity function. +// If "" is returned by the function, GroupResource#String is used as the identity. +// GroupResources with the same identity string are considered equivalent. +func NewEquivalentResourceRegistryWithIdentity(keyFunc func(schema.GroupResource) string) EquivalentResourceRegistry { + return &equivalentResourceRegistry{keyFunc: keyFunc} +} + +func (r *equivalentResourceRegistry) EquivalentResourcesFor(resource schema.GroupVersionResource, subresource string) []schema.GroupVersionResource { + r.mutex.RLock() + defer r.mutex.RUnlock() + return r.resources[r.keys[resource.GroupResource()]][subresource] +} +func (r *equivalentResourceRegistry) KindFor(resource schema.GroupVersionResource, subresource string) schema.GroupVersionKind { + r.mutex.RLock() + defer r.mutex.RUnlock() + return r.kinds[resource][subresource] +} +func (r *equivalentResourceRegistry) RegisterKindFor(resource schema.GroupVersionResource, subresource string, kind schema.GroupVersionKind) { + r.mutex.Lock() + defer r.mutex.Unlock() + if r.kinds == nil { + r.kinds = map[schema.GroupVersionResource]map[string]schema.GroupVersionKind{} + } + if r.kinds[resource] == nil { + r.kinds[resource] = map[string]schema.GroupVersionKind{} + } + r.kinds[resource][subresource] = kind + + // get the shared key of the parent resource + key := "" + gr := resource.GroupResource() + if r.keyFunc != nil { + key = r.keyFunc(gr) + } + if key == "" { + key = gr.String() + } + + if r.keys == nil { + r.keys = map[schema.GroupResource]string{} + } + r.keys[gr] = key + + if r.resources == nil { + r.resources = map[string]map[string][]schema.GroupVersionResource{} + } + if r.resources[key] == nil { + r.resources[key] = map[string][]schema.GroupVersionResource{} + } + r.resources[key][subresource] = append(r.resources[key][subresource], resource) +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,23 +14,18 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto -// DO NOT EDIT! -/* -Package schema is a generated protocol buffer package. +package schema -It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto +import ( + fmt "fmt" -It has these top-level messages: -*/ -package schema + math "math" -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" + proto "github.com/gogo/protobuf/proto" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -44,10 +39,10 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto", fileDescriptorGenerated) + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto", fileDescriptor_0462724132518e0d) } -var fileDescriptorGenerated = []byte{ +var fileDescriptor_0462724132518e0d = []byte{ // 185 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0xcc, 0xaf, 0x6e, 0xc3, 0x30, 0x10, 0xc7, 0x71, 0x9b, 0x0c, 0x0c, 0x0e, 0x0e, 0x1c, 0x1c, 0xda, 0x7c, 0x74, 0xb8, 0x2f, 0x50, diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go 2020-12-10 21:46:52.000000000 +0000 @@ -66,7 +66,7 @@ return len(gr.Group) == 0 && len(gr.Resource) == 0 } -func (gr *GroupResource) String() string { +func (gr GroupResource) String() string { if len(gr.Group) == 0 { return gr.Resource } @@ -85,11 +85,10 @@ // ParseGroupResource turns "resource.group" string into a GroupResource struct. Empty strings are allowed // for each field. func ParseGroupResource(gr string) GroupResource { - if i := strings.Index(gr, "."); i == -1 { - return GroupResource{Resource: gr} - } else { + if i := strings.Index(gr, "."); i >= 0 { return GroupResource{Group: gr[i+1:], Resource: gr[:i]} } + return GroupResource{Resource: gr} } // GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion @@ -112,7 +111,7 @@ return GroupVersion{Group: gvr.Group, Version: gvr.Version} } -func (gvr *GroupVersionResource) String() string { +func (gvr GroupVersionResource) String() string { return strings.Join([]string{gvr.Group, "/", gvr.Version, ", Resource=", gvr.Resource}, "") } @@ -131,7 +130,7 @@ return GroupVersionKind{Group: gk.Group, Version: version, Kind: gk.Kind} } -func (gk *GroupKind) String() string { +func (gk GroupKind) String() string { if len(gk.Group) == 0 { return gk.Kind } @@ -282,8 +281,8 @@ // ToAPIVersionAndKind is a convenience method for satisfying runtime.Object on types that // do not use TypeMeta. -func (gvk *GroupVersionKind) ToAPIVersionAndKind() (string, string) { - if gvk == nil { +func (gvk GroupVersionKind) ToAPIVersionAndKind() (string, string) { + if gvk.Empty() { return "", "" } return gvk.GroupVersion().String(), gvk.Kind diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,11 +20,12 @@ "fmt" "net/url" "reflect" - "strings" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/naming" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" ) @@ -62,14 +63,14 @@ // Map from version and resource to the corresponding func to convert // resource field labels in that version to internal version. - fieldLabelConversionFuncs map[string]map[string]FieldLabelConversionFunc + fieldLabelConversionFuncs map[schema.GroupVersionKind]FieldLabelConversionFunc // defaulterFuncs is an array of interfaces to be called with an object to provide defaulting // the provided object must be a pointer. defaulterFuncs map[reflect.Type]func(interface{}) // converter stores all registered conversion functions. It also has - // default coverting behavior. + // default converting behavior. converter *conversion.Converter // versionPriority is a map of groups to ordered lists of versions for those groups indicating the @@ -78,9 +79,13 @@ // observedVersions keeps track of the order we've seen versions during type registration observedVersions []schema.GroupVersion + + // schemeName is the name of this scheme. If you don't specify a name, the stack of the NewScheme caller will be used. + // This is useful for error reporting to indicate the origin of the scheme. + schemeName string } -// Function to convert a field selector to internal representation. +// FieldLabelConversionFunc converts a field selector to internal representation. type FieldLabelConversionFunc func(label, value string) (internalLabel, internalValue string, err error) // NewScheme creates a new Scheme. This scheme is pluggable by default. @@ -90,24 +95,19 @@ typeToGVK: map[reflect.Type][]schema.GroupVersionKind{}, unversionedTypes: map[reflect.Type]schema.GroupVersionKind{}, unversionedKinds: map[string]reflect.Type{}, - fieldLabelConversionFuncs: map[string]map[string]FieldLabelConversionFunc{}, + fieldLabelConversionFuncs: map[schema.GroupVersionKind]FieldLabelConversionFunc{}, defaulterFuncs: map[reflect.Type]func(interface{}){}, versionPriority: map[string][]string{}, + schemeName: naming.GetNameFromCallsite(internalPackages...), } s.converter = conversion.NewConverter(s.nameFunc) - s.AddConversionFuncs(DefaultEmbeddedConversions()...) + utilruntime.Must(s.AddConversionFuncs(DefaultEmbeddedConversions()...)) // Enable map[string][]string conversions by default - if err := s.AddConversionFuncs(DefaultStringConversions...); err != nil { - panic(err) - } - if err := s.RegisterInputDefaults(&map[string][]string{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields); err != nil { - panic(err) - } - if err := s.RegisterInputDefaults(&url.Values{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields); err != nil { - panic(err) - } + utilruntime.Must(s.AddConversionFuncs(DefaultStringConversions...)) + utilruntime.Must(s.RegisterInputDefaults(&map[string][]string{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields)) + utilruntime.Must(s.RegisterInputDefaults(&url.Values{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields)) return s } @@ -159,7 +159,7 @@ gvk := version.WithKind(t.Name()) s.unversionedTypes[t] = gvk if old, ok := s.unversionedKinds[gvk.Kind]; ok && t != old { - panic(fmt.Sprintf("%v.%v has already been registered as unversioned kind %q - kind name must be unique", old.PkgPath(), old.Name(), gvk)) + panic(fmt.Sprintf("%v.%v has already been registered as unversioned kind %q - kind name must be unique in scheme %q", old.PkgPath(), old.Name(), gvk, s.schemeName)) } s.unversionedKinds[gvk.Kind] = t } @@ -200,7 +200,7 @@ } if oldT, found := s.gvkToType[gvk]; found && oldT != t { - panic(fmt.Sprintf("Double registration of different types for %v: old=%v.%v, new=%v.%v", gvk, oldT.PkgPath(), oldT.Name(), t.PkgPath(), t.Name())) + panic(fmt.Sprintf("Double registration of different types for %v: old=%v.%v, new=%v.%v in scheme %q", gvk, oldT.PkgPath(), oldT.Name(), t.PkgPath(), t.Name(), s.schemeName)) } s.gvkToType[gvk] = t @@ -255,7 +255,7 @@ gvks, ok := s.typeToGVK[t] if !ok { - return nil, false, NewNotRegisteredErrForType(t) + return nil, false, NewNotRegisteredErrForType(s.schemeName, t) } _, unversionedType := s.unversionedTypes[t] @@ -293,15 +293,7 @@ if t, exists := s.unversionedKinds[kind.Kind]; exists { return reflect.New(t).Interface().(Object), nil } - return nil, NewNotRegisteredErrForKind(kind) -} - -// AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern -// (for two conversion types) to the converter. These functions are checked first during -// a normal conversion, but are otherwise not called. Use AddConversionFuncs when registering -// typed conversions. -func (s *Scheme) AddGenericConversionFunc(fn conversion.GenericConversionFunc) { - s.converter.AddGenericConversionFunc(fn) + return nil, NewNotRegisteredErrForKind(s.schemeName, kind) } // Log sets a logger on the scheme. For test purposes only @@ -355,36 +347,27 @@ return nil } -// AddGeneratedConversionFuncs registers conversion functions that were -// automatically generated. -func (s *Scheme) AddGeneratedConversionFuncs(conversionFuncs ...interface{}) error { - for _, f := range conversionFuncs { - if err := s.converter.RegisterGeneratedConversionFunc(f); err != nil { - return err - } - } - return nil +// AddConversionFunc registers a function that converts between a and b by passing objects of those +// types to the provided function. The function *must* accept objects of a and b - this machinery will not enforce +// any other guarantee. +func (s *Scheme) AddConversionFunc(a, b interface{}, fn conversion.ConversionFunc) error { + return s.converter.RegisterUntypedConversionFunc(a, b, fn) +} + +// AddGeneratedConversionFunc registers a function that converts between a and b by passing objects of those +// types to the provided function. The function *must* accept objects of a and b - this machinery will not enforce +// any other guarantee. +func (s *Scheme) AddGeneratedConversionFunc(a, b interface{}, fn conversion.ConversionFunc) error { + return s.converter.RegisterGeneratedUntypedConversionFunc(a, b, fn) } // AddFieldLabelConversionFunc adds a conversion function to convert field selectors // of the given kind from the given version to internal version representation. -func (s *Scheme) AddFieldLabelConversionFunc(version, kind string, conversionFunc FieldLabelConversionFunc) error { - if s.fieldLabelConversionFuncs[version] == nil { - s.fieldLabelConversionFuncs[version] = map[string]FieldLabelConversionFunc{} - } - - s.fieldLabelConversionFuncs[version][kind] = conversionFunc +func (s *Scheme) AddFieldLabelConversionFunc(gvk schema.GroupVersionKind, conversionFunc FieldLabelConversionFunc) error { + s.fieldLabelConversionFuncs[gvk] = conversionFunc return nil } -// AddStructFieldConversion allows you to specify a mechanical copy for a moved -// or renamed struct field without writing an entire conversion function. See -// the comment in conversion.Converter.SetStructFieldCopy for parameter details. -// Call as many times as needed, even on the same fields. -func (s *Scheme) AddStructFieldConversion(srcFieldType interface{}, srcFieldName string, destFieldType interface{}, destFieldName string) error { - return s.converter.SetStructFieldCopy(srcFieldType, srcFieldName, destFieldType, destFieldName) -} - // RegisterInputDefaults sets the provided field mapping function and field matching // as the defaults for the provided input type. The fn may be nil, in which case no // mapping will happen by default. Use this method to register a mechanism for handling @@ -393,7 +376,7 @@ return s.converter.RegisterInputDefaults(in, fn, defaultFlags) } -// AddTypeDefaultingFuncs registers a function that is passed a pointer to an +// AddTypeDefaultingFunc registers a function that is passed a pointer to an // object and can default fields on the object. These functions will be invoked // when Default() is called. The function will never be called unless the // defaulted object matches srcType. If this function is invoked twice with the @@ -486,11 +469,8 @@ // ConvertFieldLabel alters the given field label and value for an kind field selector from // versioned representation to an unversioned one or returns an error. -func (s *Scheme) ConvertFieldLabel(version, kind, label, value string) (string, string, error) { - if s.fieldLabelConversionFuncs[version] == nil { - return DefaultMetaV1FieldSelectorConversion(label, value) - } - conversionFunc, ok := s.fieldLabelConversionFuncs[version][kind] +func (s *Scheme) ConvertFieldLabel(gvk schema.GroupVersionKind, label, value string) (string, string, error) { + conversionFunc, ok := s.fieldLabelConversionFuncs[gvk] if !ok { return DefaultMetaV1FieldSelectorConversion(label, value) } @@ -541,7 +521,7 @@ kinds, ok := s.typeToGVK[t] if !ok || len(kinds) == 0 { - return nil, NewNotRegisteredErrForType(t) + return nil, NewNotRegisteredErrForType(s.schemeName, t) } gvk, ok := target.KindForGroupVersionKinds(kinds) @@ -554,7 +534,7 @@ } return copyAndSetTargetKind(copy, in, unversionedKind) } - return nil, NewNotRegisteredErrForTarget(t, target) + return nil, NewNotRegisteredErrForTarget(s.schemeName, t, target) } // target wants to use the existing type, set kind and return (no conversion necessary) @@ -764,3 +744,11 @@ s.observedVersions = append(s.observedVersions, version) } + +func (s *Scheme) Name() string { + return s.schemeName +} + +// internalPackages are packages that ignored when creating a default reflector name. These packages are in the common +// call chains to NewReflector, so they'd be low entropy names for reflectors +var internalPackages = []string{"k8s.io/apimachinery/pkg/runtime/scheme.go"} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,9 +17,13 @@ package serializer import ( + "mime" + "strings" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/json" + "k8s.io/apimachinery/pkg/runtime/serializer/protobuf" "k8s.io/apimachinery/pkg/runtime/serializer/recognizer" "k8s.io/apimachinery/pkg/runtime/serializer/versioning" ) @@ -44,30 +48,53 @@ StreamSerializer runtime.Serializer } -func newSerializersForScheme(scheme *runtime.Scheme, mf json.MetaFactory) []serializerType { - jsonSerializer := json.NewSerializer(mf, scheme, scheme, false) - jsonPrettySerializer := json.NewSerializer(mf, scheme, scheme, true) - yamlSerializer := json.NewYAMLSerializer(mf, scheme, scheme) +func newSerializersForScheme(scheme *runtime.Scheme, mf json.MetaFactory, options CodecFactoryOptions) []serializerType { + jsonSerializer := json.NewSerializerWithOptions( + mf, scheme, scheme, + json.SerializerOptions{Yaml: false, Pretty: false, Strict: options.Strict}, + ) + jsonSerializerType := serializerType{ + AcceptContentTypes: []string{runtime.ContentTypeJSON}, + ContentType: runtime.ContentTypeJSON, + FileExtensions: []string{"json"}, + EncodesAsText: true, + Serializer: jsonSerializer, - serializers := []serializerType{ - { - AcceptContentTypes: []string{"application/json"}, - ContentType: "application/json", - FileExtensions: []string{"json"}, - EncodesAsText: true, - Serializer: jsonSerializer, - PrettySerializer: jsonPrettySerializer, + Framer: json.Framer, + StreamSerializer: jsonSerializer, + } + if options.Pretty { + jsonSerializerType.PrettySerializer = json.NewSerializerWithOptions( + mf, scheme, scheme, + json.SerializerOptions{Yaml: false, Pretty: true, Strict: options.Strict}, + ) + } - Framer: json.Framer, - StreamSerializer: jsonSerializer, - }, + yamlSerializer := json.NewSerializerWithOptions( + mf, scheme, scheme, + json.SerializerOptions{Yaml: true, Pretty: false, Strict: options.Strict}, + ) + protoSerializer := protobuf.NewSerializer(scheme, scheme) + protoRawSerializer := protobuf.NewRawSerializer(scheme, scheme) + + serializers := []serializerType{ + jsonSerializerType, { - AcceptContentTypes: []string{"application/yaml"}, - ContentType: "application/yaml", + AcceptContentTypes: []string{runtime.ContentTypeYAML}, + ContentType: runtime.ContentTypeYAML, FileExtensions: []string{"yaml"}, EncodesAsText: true, Serializer: yamlSerializer, }, + { + AcceptContentTypes: []string{runtime.ContentTypeProtobuf}, + ContentType: runtime.ContentTypeProtobuf, + FileExtensions: []string{"pb"}, + Serializer: protoSerializer, + + Framer: protobuf.LengthDelimitedFramer, + StreamSerializer: protoRawSerializer, + }, } for _, fn := range serializerExtensions { @@ -89,14 +116,56 @@ legacySerializer runtime.Serializer } +// CodecFactoryOptions holds the options for configuring CodecFactory behavior +type CodecFactoryOptions struct { + // Strict configures all serializers in strict mode + Strict bool + // Pretty includes a pretty serializer along with the non-pretty one + Pretty bool +} + +// CodecFactoryOptionsMutator takes a pointer to an options struct and then modifies it. +// Functions implementing this type can be passed to the NewCodecFactory() constructor. +type CodecFactoryOptionsMutator func(*CodecFactoryOptions) + +// EnablePretty enables including a pretty serializer along with the non-pretty one +func EnablePretty(options *CodecFactoryOptions) { + options.Pretty = true +} + +// DisablePretty disables including a pretty serializer along with the non-pretty one +func DisablePretty(options *CodecFactoryOptions) { + options.Pretty = false +} + +// EnableStrict enables configuring all serializers in strict mode +func EnableStrict(options *CodecFactoryOptions) { + options.Strict = true +} + +// DisableStrict disables configuring all serializers in strict mode +func DisableStrict(options *CodecFactoryOptions) { + options.Strict = false +} + // NewCodecFactory provides methods for retrieving serializers for the supported wire formats // and conversion wrappers to define preferred internal and external versions. In the future, // as the internal version is used less, callers may instead use a defaulting serializer and // only convert objects which are shared internally (Status, common API machinery). +// +// Mutators can be passed to change the CodecFactoryOptions before construction of the factory. +// It is recommended to explicitly pass mutators instead of relying on defaults. +// By default, Pretty is enabled -- this is conformant with previously supported behavior. +// // TODO: allow other codecs to be compiled in? // TODO: accept a scheme interface -func NewCodecFactory(scheme *runtime.Scheme) CodecFactory { - serializers := newSerializersForScheme(scheme, json.DefaultMetaFactory) +func NewCodecFactory(scheme *runtime.Scheme, mutators ...CodecFactoryOptionsMutator) CodecFactory { + options := CodecFactoryOptions{Pretty: true} + for _, fn := range mutators { + fn(&options) + } + + serializers := newSerializersForScheme(scheme, json.DefaultMetaFactory, options) return newCodecFactory(scheme, serializers) } @@ -120,6 +189,15 @@ Serializer: d.Serializer, PrettySerializer: d.PrettySerializer, } + + mediaType, _, err := mime.ParseMediaType(info.MediaType) + if err != nil { + panic(err) + } + parts := strings.SplitN(mediaType, "/", 2) + info.MediaTypeType = parts[0] + info.MediaTypeSubType = parts[1] + if d.StreamSerializer != nil { info.StreamSerializer = &runtime.StreamSerializerInfo{ Serializer: d.StreamSerializer, @@ -148,6 +226,12 @@ } } +// WithoutConversion returns a NegotiatedSerializer that performs no conversion, even if the +// caller requests it. +func (f CodecFactory) WithoutConversion() runtime.NegotiatedSerializer { + return WithoutConversionCodecFactory{f} +} + // SupportedMediaTypes returns the RFC2046 media types that this factory has serializers for. func (f CodecFactory) SupportedMediaTypes() []runtime.SerializerInfo { return f.accepts @@ -215,23 +299,26 @@ return f.CodecForVersions(encoder, nil, gv, nil) } -// DirectCodecFactory provides methods for retrieving "DirectCodec"s, which do not do conversion. -type DirectCodecFactory struct { +// WithoutConversionCodecFactory is a CodecFactory that will explicitly ignore requests to perform conversion. +// This wrapper is used while code migrates away from using conversion (such as external clients) and in the future +// will be unnecessary when we change the signature of NegotiatedSerializer. +type WithoutConversionCodecFactory struct { CodecFactory } -// EncoderForVersion returns an encoder that does not do conversion. -func (f DirectCodecFactory) EncoderForVersion(serializer runtime.Encoder, version runtime.GroupVersioner) runtime.Encoder { - return versioning.DirectEncoder{ +// EncoderForVersion returns an encoder that does not do conversion, but does set the group version kind of the object +// when serialized. +func (f WithoutConversionCodecFactory) EncoderForVersion(serializer runtime.Encoder, version runtime.GroupVersioner) runtime.Encoder { + return runtime.WithVersionEncoder{ Version: version, Encoder: serializer, ObjectTyper: f.CodecFactory.scheme, } } -// DecoderToVersion returns an decoder that does not do conversion. gv is ignored. -func (f DirectCodecFactory) DecoderToVersion(serializer runtime.Decoder, _ runtime.GroupVersioner) runtime.Decoder { - return versioning.DirectDecoder{ +// DecoderToVersion returns an decoder that does not do conversion. +func (f WithoutConversionCodecFactory) DecoderToVersion(serializer runtime.Decoder, _ runtime.GroupVersioner) runtime.Decoder { + return runtime.WithoutVersionDecoder{ Decoder: serializer, } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,8 +22,9 @@ "strconv" "unsafe" - "github.com/ghodss/yaml" jsoniter "github.com/json-iterator/go" + "github.com/modern-go/reflect2" + "sigs.k8s.io/yaml" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -34,78 +35,154 @@ // NewSerializer creates a JSON serializer that handles encoding versioned objects into the proper JSON form. If typer // is not nil, the object has the group, version, and kind fields set. +// Deprecated: use NewSerializerWithOptions instead. func NewSerializer(meta MetaFactory, creater runtime.ObjectCreater, typer runtime.ObjectTyper, pretty bool) *Serializer { - return &Serializer{ - meta: meta, - creater: creater, - typer: typer, - yaml: false, - pretty: pretty, - } + return NewSerializerWithOptions(meta, creater, typer, SerializerOptions{false, pretty, false}) } // NewYAMLSerializer creates a YAML serializer that handles encoding versioned objects into the proper YAML form. If typer // is not nil, the object has the group, version, and kind fields set. This serializer supports only the subset of YAML that // matches JSON, and will error if constructs are used that do not serialize to JSON. +// Deprecated: use NewSerializerWithOptions instead. func NewYAMLSerializer(meta MetaFactory, creater runtime.ObjectCreater, typer runtime.ObjectTyper) *Serializer { + return NewSerializerWithOptions(meta, creater, typer, SerializerOptions{true, false, false}) +} + +// NewSerializerWithOptions creates a JSON/YAML serializer that handles encoding versioned objects into the proper JSON/YAML +// form. If typer is not nil, the object has the group, version, and kind fields set. Options are copied into the Serializer +// and are immutable. +func NewSerializerWithOptions(meta MetaFactory, creater runtime.ObjectCreater, typer runtime.ObjectTyper, options SerializerOptions) *Serializer { return &Serializer{ meta: meta, creater: creater, typer: typer, - yaml: true, + options: options, } } +// SerializerOptions holds the options which are used to configure a JSON/YAML serializer. +// example: +// (1) To configure a JSON serializer, set `Yaml` to `false`. +// (2) To configure a YAML serializer, set `Yaml` to `true`. +// (3) To configure a strict serializer that can return strictDecodingError, set `Strict` to `true`. +type SerializerOptions struct { + // Yaml: configures the Serializer to work with JSON(false) or YAML(true). + // When `Yaml` is enabled, this serializer only supports the subset of YAML that + // matches JSON, and will error if constructs are used that do not serialize to JSON. + Yaml bool + + // Pretty: configures a JSON enabled Serializer(`Yaml: false`) to produce human-readable output. + // This option is silently ignored when `Yaml` is `true`. + Pretty bool + + // Strict: configures the Serializer to return strictDecodingError's when duplicate fields are present decoding JSON or YAML. + // Note that enabling this option is not as performant as the non-strict variant, and should not be used in fast paths. + Strict bool +} + type Serializer struct { meta MetaFactory + options SerializerOptions creater runtime.ObjectCreater typer runtime.ObjectTyper - yaml bool - pretty bool } // Serializer implements Serializer var _ runtime.Serializer = &Serializer{} var _ recognizer.RecognizingDecoder = &Serializer{} -func init() { - // Force jsoniter to decode number to interface{} via ints, if possible. - decodeNumberAsInt64IfPossible := func(ptr unsafe.Pointer, iter *jsoniter.Iterator) { - switch iter.WhatIsNext() { - case jsoniter.NumberValue: - var number json.Number - iter.ReadVal(&number) - i64, err := strconv.ParseInt(string(number), 10, 64) - if err == nil { - *(*interface{})(ptr) = i64 - return - } - f64, err := strconv.ParseFloat(string(number), 64) - if err == nil { - *(*interface{})(ptr) = f64 +type customNumberExtension struct { + jsoniter.DummyExtension +} + +func (cne *customNumberExtension) CreateDecoder(typ reflect2.Type) jsoniter.ValDecoder { + if typ.String() == "interface {}" { + return customNumberDecoder{} + } + return nil +} + +type customNumberDecoder struct { +} + +func (customNumberDecoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) { + switch iter.WhatIsNext() { + case jsoniter.NumberValue: + var number jsoniter.Number + iter.ReadVal(&number) + i64, err := strconv.ParseInt(string(number), 10, 64) + if err == nil { + *(*interface{})(ptr) = i64 + return + } + f64, err := strconv.ParseFloat(string(number), 64) + if err == nil { + *(*interface{})(ptr) = f64 + return + } + iter.ReportError("DecodeNumber", err.Error()) + default: + // init depth, if needed + if iter.Attachment == nil { + iter.Attachment = int(1) + } + + // remember current depth + originalAttachment := iter.Attachment + + // increment depth before descending + if i, ok := iter.Attachment.(int); ok { + iter.Attachment = i + 1 + if i > 10000 { + iter.ReportError("parse", "exceeded max depth") return } - // Not much we can do here. - default: - *(*interface{})(ptr) = iter.Read() } + + *(*interface{})(ptr) = iter.Read() + + // restore current depth + iter.Attachment = originalAttachment } - jsoniter.RegisterTypeDecoderFunc("interface {}", decodeNumberAsInt64IfPossible) } // CaseSensitiveJsonIterator returns a jsoniterator API that's configured to be // case-sensitive when unmarshalling, and otherwise compatible with // the encoding/json standard library. func CaseSensitiveJsonIterator() jsoniter.API { - return jsoniter.Config{ + config := jsoniter.Config{ + EscapeHTML: true, + SortMapKeys: true, + ValidateJsonRawMessage: true, + CaseSensitive: true, + }.Froze() + // Force jsoniter to decode number to interface{} via int64/float64, if possible. + config.RegisterExtension(&customNumberExtension{}) + return config +} + +// StrictCaseSensitiveJsonIterator returns a jsoniterator API that's configured to be +// case-sensitive, but also disallows unknown fields when unmarshalling. It is compatible with +// the encoding/json standard library. +func StrictCaseSensitiveJsonIterator() jsoniter.API { + config := jsoniter.Config{ EscapeHTML: true, SortMapKeys: true, ValidateJsonRawMessage: true, CaseSensitive: true, + DisallowUnknownFields: true, }.Froze() + // Force jsoniter to decode number to interface{} via int64/float64, if possible. + config.RegisterExtension(&customNumberExtension{}) + return config } +// Private copies of jsoniter to try to shield against possible mutations +// from outside. Still does not protect from package level jsoniter.Register*() functions - someone calling them +// in some other library will mess with every usage of the jsoniter library in the whole program. +// See https://github.com/json-iterator/go/issues/265 var caseSensitiveJsonIterator = CaseSensitiveJsonIterator() +var strictCaseSensitiveJsonIterator = StrictCaseSensitiveJsonIterator() // gvkWithDefaults returns group kind and version defaulting from provided default func gvkWithDefaults(actual, defaultGVK schema.GroupVersionKind) schema.GroupVersionKind { @@ -142,7 +219,7 @@ } data := originalData - if s.yaml { + if s.options.Yaml { altered, err := yaml.YAMLToJSON(data) if err != nil { return nil, nil, err @@ -198,12 +275,38 @@ if err := caseSensitiveJsonIterator.Unmarshal(data, obj); err != nil { return nil, actual, err } + + // If the deserializer is non-strict, return successfully here. + if !s.options.Strict { + return obj, actual, nil + } + + // In strict mode pass the data trough the YAMLToJSONStrict converter. + // This is done to catch duplicate fields regardless of encoding (JSON or YAML). For JSON data, + // the output would equal the input, unless there is a parsing error such as duplicate fields. + // As we know this was successful in the non-strict case, the only error that may be returned here + // is because of the newly-added strictness. hence we know we can return the typed strictDecoderError + // the actual error is that the object contains duplicate fields. + altered, err := yaml.YAMLToJSONStrict(originalData) + if err != nil { + return nil, actual, runtime.NewStrictDecodingError(err.Error(), string(originalData)) + } + // As performance is not an issue for now for the strict deserializer (one has regardless to do + // the unmarshal twice), we take the sanitized, altered data that is guaranteed to have no duplicated + // fields, and unmarshal this into a copy of the already-populated obj. Any error that occurs here is + // due to that a matching field doesn't exist in the object. hence we can return a typed strictDecoderError, + // the actual error is that the object contains unknown field. + strictObj := obj.DeepCopyObject() + if err := strictCaseSensitiveJsonIterator.Unmarshal(altered, strictObj); err != nil { + return nil, actual, runtime.NewStrictDecodingError(err.Error(), string(originalData)) + } + // Always return the same object as the non-strict serializer to avoid any deviations. return obj, actual, nil } // Encode serializes the provided object to the given writer. func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error { - if s.yaml { + if s.options.Yaml { json, err := caseSensitiveJsonIterator.Marshal(obj) if err != nil { return err @@ -216,7 +319,7 @@ return err } - if s.pretty { + if s.options.Pretty { data, err := caseSensitiveJsonIterator.MarshalIndent(obj, "", " ") if err != nil { return err @@ -230,7 +333,7 @@ // RecognizesData implements the RecognizingDecoder interface. func (s *Serializer) RecognizesData(peek io.Reader) (ok, unknown bool, err error) { - if s.yaml { + if s.options.Yaml { // we could potentially look for '---' return false, true, nil } @@ -255,7 +358,7 @@ return framer.NewJSONFramedReader(r) } -// Framer is the default JSON framing behavior, with newlines delimiting individual objects. +// YAMLFramer is the default JSON framing behavior, with newlines delimiting individual objects. var YAMLFramer = yamlFramer{} type yamlFramer struct{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,10 +20,12 @@ "bytes" "fmt" "io" + "net/http" "reflect" "github.com/gogo/protobuf/proto" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/recognizer" @@ -50,6 +52,15 @@ return fmt.Sprintf("object %v does not implement the protobuf marshalling interface and cannot be encoded to a protobuf message", e.t) } +func (e errNotMarshalable) Status() metav1.Status { + return metav1.Status{ + Status: metav1.StatusFailure, + Code: http.StatusNotAcceptable, + Reason: metav1.StatusReason("NotAcceptable"), + Message: e.Error(), + } +} + func IsNotMarshalable(err error) bool { _, ok := err.(errNotMarshalable) return err != nil && ok @@ -58,22 +69,18 @@ // NewSerializer creates a Protobuf serializer that handles encoding versioned objects into the proper wire form. If a typer // is passed, the encoded object will have group, version, and kind fields set. If typer is nil, the objects will be written // as-is (any type info passed with the object will be used). -// -// This encoding scheme is experimental, and is subject to change at any time. -func NewSerializer(creater runtime.ObjectCreater, typer runtime.ObjectTyper, defaultContentType string) *Serializer { +func NewSerializer(creater runtime.ObjectCreater, typer runtime.ObjectTyper) *Serializer { return &Serializer{ - prefix: protoEncodingPrefix, - creater: creater, - typer: typer, - contentType: defaultContentType, + prefix: protoEncodingPrefix, + creater: creater, + typer: typer, } } type Serializer struct { - prefix []byte - creater runtime.ObjectCreater - typer runtime.ObjectTyper - contentType string + prefix []byte + creater runtime.ObjectCreater + typer runtime.ObjectTyper } var _ runtime.Serializer = &Serializer{} @@ -127,7 +134,7 @@ if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { *intoUnknown = unk if ok, _, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok { - intoUnknown.ContentType = s.contentType + intoUnknown.ContentType = runtime.ContentTypeProtobuf } return intoUnknown, &actual, nil } @@ -196,7 +203,7 @@ switch t := obj.(type) { case bufferedMarshaller: // this path performs a single allocation during write but requires the caller to implement - // the more efficient Size and MarshalTo methods + // the more efficient Size and MarshalToSizedBuffer methods encodedSize := uint64(t.Size()) estimatedSize := prefixSize + estimateUnknownSize(&unk, encodedSize) data := make([]byte, estimatedSize) @@ -276,6 +283,12 @@ runtime.ProtobufMarshaller } +// Like bufferedMarshaller, but is able to marshal backwards, which is more efficient since it doesn't call Size() as frequently. +type bufferedReverseMarshaller interface { + proto.Sizer + runtime.ProtobufReverseMarshaller +} + // estimateUnknownSize returns the expected bytes consumed by a given runtime.Unknown // object with a nil RawJSON struct and the expected size of the provided buffer. The // returned size will not be correct if RawJSOn is set on unk. @@ -292,20 +305,18 @@ // encoded object, and thus is not self describing (callers must know what type is being described in order to decode). // // This encoding scheme is experimental, and is subject to change at any time. -func NewRawSerializer(creater runtime.ObjectCreater, typer runtime.ObjectTyper, defaultContentType string) *RawSerializer { +func NewRawSerializer(creater runtime.ObjectCreater, typer runtime.ObjectTyper) *RawSerializer { return &RawSerializer{ - creater: creater, - typer: typer, - contentType: defaultContentType, + creater: creater, + typer: typer, } } // RawSerializer encodes and decodes objects without adding a runtime.Unknown wrapper (objects are encoded without identifying // type). type RawSerializer struct { - creater runtime.ObjectCreater - typer runtime.ObjectTyper - contentType string + creater runtime.ObjectCreater + typer runtime.ObjectTyper } var _ runtime.Serializer = &RawSerializer{} @@ -347,7 +358,7 @@ if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { intoUnknown.Raw = data intoUnknown.ContentEncoding = "" - intoUnknown.ContentType = s.contentType + intoUnknown.ContentType = runtime.ContentTypeProtobuf intoUnknown.SetGroupVersionKind(*actual) return intoUnknown, actual, nil } @@ -400,12 +411,28 @@ if err := proto.Unmarshal(data, pb); err != nil { return nil, actual, err } + if actual != nil { + obj.GetObjectKind().SetGroupVersionKind(*actual) + } return obj, actual, nil } // Encode serializes the provided object to the given writer. Overrides is ignored. func (s *RawSerializer) Encode(obj runtime.Object, w io.Writer) error { switch t := obj.(type) { + case bufferedReverseMarshaller: + // this path performs a single allocation during write but requires the caller to implement + // the more efficient Size and MarshalToSizedBuffer methods + encodedSize := uint64(t.Size()) + data := make([]byte, encodedSize) + + n, err := t.MarshalToSizedBuffer(data) + if err != nil { + return err + } + _, err = w.Write(data[:n]) + return err + case bufferedMarshaller: // this path performs a single allocation during write but requires the caller to implement // the more efficient Size and MarshalTo methods diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf_extension.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf_extension.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf_extension.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/protobuf_extension.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package serializer - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer/protobuf" -) - -const ( - // contentTypeProtobuf is the protobuf type exposed for Kubernetes. It is private to prevent others from - // depending on it unintentionally. - // TODO: potentially move to pkg/api (since it's part of the Kube public API) and pass it in to the - // CodecFactory on initialization. - contentTypeProtobuf = "application/vnd.kubernetes.protobuf" -) - -func protobufSerializer(scheme *runtime.Scheme) (serializerType, bool) { - serializer := protobuf.NewSerializer(scheme, scheme, contentTypeProtobuf) - raw := protobuf.NewRawSerializer(scheme, scheme, contentTypeProtobuf) - return serializerType{ - AcceptContentTypes: []string{contentTypeProtobuf}, - ContentType: contentTypeProtobuf, - FileExtensions: []string{"pb"}, - Serializer: serializer, - - Framer: protobuf.LengthDelimitedFramer, - StreamSerializer: raw, - }, true -} - -func init() { - serializerExtensions = append(serializerExtensions, protobufSerializer) -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,24 +18,13 @@ import ( "io" + "reflect" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) -// NewCodecForScheme is a convenience method for callers that are using a scheme. -func NewCodecForScheme( - // TODO: I should be a scheme interface? - scheme *runtime.Scheme, - encoder runtime.Encoder, - decoder runtime.Decoder, - encodeVersion runtime.GroupVersioner, - decodeVersion runtime.GroupVersioner, -) runtime.Codec { - return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, nil, encodeVersion, decodeVersion) -} - // NewDefaultingCodecForScheme is a convenience method for callers that are using a scheme. func NewDefaultingCodecForScheme( // TODO: I should be a scheme interface? @@ -45,7 +34,7 @@ encodeVersion runtime.GroupVersioner, decodeVersion runtime.GroupVersioner, ) runtime.Codec { - return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, encodeVersion, decodeVersion) + return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, encodeVersion, decodeVersion, scheme.Name()) } // NewCodec takes objects in their internal versions and converts them to external versions before @@ -60,6 +49,7 @@ defaulter runtime.ObjectDefaulter, encodeVersion runtime.GroupVersioner, decodeVersion runtime.GroupVersioner, + originalSchemeName string, ) runtime.Codec { internal := &codec{ encoder: encoder, @@ -71,6 +61,8 @@ encodeVersion: encodeVersion, decodeVersion: decodeVersion, + + originalSchemeName: originalSchemeName, } return internal } @@ -85,6 +77,9 @@ encodeVersion runtime.GroupVersioner decodeVersion runtime.GroupVersioner + + // originalSchemeName is optional, but when filled in it holds the name of the scheme from which this codec originates + originalSchemeName string } // Decode attempts a decode of the object, then tries to convert it to the internal version. If into is provided and the decoding is @@ -96,26 +91,28 @@ into = versioned.Last() } - obj, gvk, err := c.decoder.Decode(data, defaultGVK, into) + // If the into object is unstructured and expresses an opinion about its group/version, + // create a new instance of the type so we always exercise the conversion path (skips short-circuiting on `into == obj`) + decodeInto := into + if into != nil { + if _, ok := into.(runtime.Unstructured); ok && !into.GetObjectKind().GroupVersionKind().GroupVersion().Empty() { + decodeInto = reflect.New(reflect.TypeOf(into).Elem()).Interface().(runtime.Object) + } + } + + obj, gvk, err := c.decoder.Decode(data, defaultGVK, decodeInto) if err != nil { return nil, gvk, err } if d, ok := obj.(runtime.NestedObjectDecoder); ok { - if err := d.DecodeNestedObjects(DirectDecoder{c.decoder}); err != nil { + if err := d.DecodeNestedObjects(runtime.WithoutVersionDecoder{c.decoder}); err != nil { return nil, gvk, err } } // if we specify a target, use generic conversion. if into != nil { - if into == obj { - if isVersioned { - return versioned, gvk, nil - } - return into, gvk, nil - } - // perform defaulting if requested if c.defaulter != nil { // create a copy to ensure defaulting is not applied to the original versioned objects @@ -129,6 +126,14 @@ } } + // Short-circuit conversion if the into object is same object + if into == obj { + if isVersioned { + return versioned, gvk, nil + } + return into, gvk, nil + } + if err := c.convertor.Convert(obj, into, c.decodeVersion); err != nil { return nil, gvk, err } @@ -182,7 +187,7 @@ } targetGVK, ok := c.encodeVersion.KindForGroupVersionKinds([]schema.GroupVersionKind{objGVK}) if !ok { - return runtime.NewNotRegisteredGVKErrForTarget(objGVK, c.encodeVersion) + return runtime.NewNotRegisteredGVKErrForTarget(c.originalSchemeName, objGVK, c.encodeVersion) } if targetGVK == objGVK { return c.encoder.Encode(obj, w) @@ -195,84 +200,33 @@ return err } + objectKind := obj.GetObjectKind() + old := objectKind.GroupVersionKind() + // restore the old GVK after encoding + defer objectKind.SetGroupVersionKind(old) + if c.encodeVersion == nil || isUnversioned { if e, ok := obj.(runtime.NestedObjectEncoder); ok { - if err := e.EncodeNestedObjects(DirectEncoder{Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { + if err := e.EncodeNestedObjects(runtime.WithVersionEncoder{Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { return err } } - objectKind := obj.GetObjectKind() - old := objectKind.GroupVersionKind() objectKind.SetGroupVersionKind(gvks[0]) - err = c.encoder.Encode(obj, w) - objectKind.SetGroupVersionKind(old) - return err + return c.encoder.Encode(obj, w) } // Perform a conversion if necessary - objectKind := obj.GetObjectKind() - old := objectKind.GroupVersionKind() out, err := c.convertor.ConvertToVersion(obj, c.encodeVersion) if err != nil { return err } if e, ok := out.(runtime.NestedObjectEncoder); ok { - if err := e.EncodeNestedObjects(DirectEncoder{Version: c.encodeVersion, Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { + if err := e.EncodeNestedObjects(runtime.WithVersionEncoder{Version: c.encodeVersion, Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { return err } } // Conversion is responsible for setting the proper group, version, and kind onto the outgoing object - err = c.encoder.Encode(out, w) - // restore the old GVK, in case conversion returned the same object - objectKind.SetGroupVersionKind(old) - return err -} - -// DirectEncoder serializes an object and ensures the GVK is set. -type DirectEncoder struct { - Version runtime.GroupVersioner - runtime.Encoder - runtime.ObjectTyper -} - -// Encode does not do conversion. It sets the gvk during serialization. -func (e DirectEncoder) Encode(obj runtime.Object, stream io.Writer) error { - gvks, _, err := e.ObjectTyper.ObjectKinds(obj) - if err != nil { - if runtime.IsNotRegisteredError(err) { - return e.Encoder.Encode(obj, stream) - } - return err - } - kind := obj.GetObjectKind() - oldGVK := kind.GroupVersionKind() - gvk := gvks[0] - if e.Version != nil { - preferredGVK, ok := e.Version.KindForGroupVersionKinds(gvks) - if ok { - gvk = preferredGVK - } - } - kind.SetGroupVersionKind(gvk) - err = e.Encoder.Encode(obj, stream) - kind.SetGroupVersionKind(oldGVK) - return err -} - -// DirectDecoder clears the group version kind of a deserialized object. -type DirectDecoder struct { - runtime.Decoder -} - -// Decode does not do conversion. It removes the gvk during deserialization. -func (d DirectDecoder) Decode(data []byte, defaults *schema.GroupVersionKind, into runtime.Object) (runtime.Object, *schema.GroupVersionKind, error) { - obj, gvk, err := d.Decoder.Decode(data, defaults, into) - if obj != nil { - kind := obj.GetObjectKind() - // clearing the gvk is just a convention of a codec - kind.SetGroupVersionKind(schema.GroupVersionKind{}) - } - return obj, gvk, err + return c.encoder.Encode(out, w) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -41,7 +41,9 @@ } const ( - ContentTypeJSON string = "application/json" + ContentTypeJSON string = "application/json" + ContentTypeYAML string = "application/yaml" + ContentTypeProtobuf string = "application/vnd.kubernetes.protobuf" ) // RawExtension is used to hold extensions in external versions. @@ -93,7 +95,7 @@ // Raw is the underlying serialization of this object. // // TODO: Determine how to detect ContentType and ContentEncoding of 'Raw' data. - Raw []byte `protobuf:"bytes,1,opt,name=raw"` + Raw []byte `json:"-" protobuf:"bytes,1,opt,name=raw"` // Object can hold a representation of this extension - useful for working with versioned // structs. Object Object `json:"-"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/types_proto.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,46 +24,66 @@ MarshalTo(data []byte) (int, error) } +type ProtobufReverseMarshaller interface { + MarshalToSizedBuffer(data []byte) (int, error) +} + // NestedMarshalTo allows a caller to avoid extra allocations during serialization of an Unknown -// that will contain an object that implements ProtobufMarshaller. +// that will contain an object that implements ProtobufMarshaller or ProtobufReverseMarshaller. func (m *Unknown) NestedMarshalTo(data []byte, b ProtobufMarshaller, size uint64) (int, error) { - var i int - _ = i - var l int - _ = l - data[i] = 0xa - i++ - i = encodeVarintGenerated(data, i, uint64(m.TypeMeta.Size())) - n1, err := m.TypeMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err + // Calculate the full size of the message. + msgSize := m.Size() + if b != nil { + msgSize += int(size) + sovGenerated(size) + 1 } - i += n1 + // Reverse marshal the fields of m. + i := msgSize + i -= len(m.ContentType) + copy(data[i:], m.ContentType) + i = encodeVarintGenerated(data, i, uint64(len(m.ContentType))) + i-- + data[i] = 0x22 + i -= len(m.ContentEncoding) + copy(data[i:], m.ContentEncoding) + i = encodeVarintGenerated(data, i, uint64(len(m.ContentEncoding))) + i-- + data[i] = 0x1a if b != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, size) - n2, err := b.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - if uint64(n2) != size { - // programmer error: the Size() method for protobuf does not match the results of MarshalTo, which means the proto - // struct returned would be wrong. - return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n2) + if r, ok := b.(ProtobufReverseMarshaller); ok { + n1, err := r.MarshalToSizedBuffer(data[:i]) + if err != nil { + return 0, err + } + i -= int(size) + if uint64(n1) != size { + // programmer error: the Size() method for protobuf does not match the results of LashramOt, which means the proto + // struct returned would be wrong. + return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n1) + } + } else { + i -= int(size) + n1, err := b.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + if uint64(n1) != size { + // programmer error: the Size() method for protobuf does not match the results of MarshalTo, which means the proto + // struct returned would be wrong. + return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n1) + } } - i += n2 + i = encodeVarintGenerated(data, i, size) + i-- + data[i] = 0x12 } - - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(len(m.ContentEncoding))) - i += copy(data[i:], m.ContentEncoding) - - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(len(m.ContentType))) - i += copy(data[i:], m.ContentType) - return i, nil + n2, err := m.TypeMeta.MarshalToSizedBuffer(data[:i]) + if err != nil { + return 0, err + } + i -= n2 + i = encodeVarintGenerated(data, i, uint64(n2)) + i-- + data[i] = 0xa + return msgSize - i, nil } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,9 +28,7 @@ *out = make([]byte, len(*in)) copy(*out, *in) } - if in.Object == nil { - out.Object = nil - } else { + if in.Object != nil { out.Object = in.Object.DeepCopyObject() } return @@ -83,9 +81,7 @@ in, out := &in.Objects, &out.Objects *out = make([]Object, len(*in)) for i := range *in { - if (*in)[i] == nil { - (*out)[i] = nil - } else { + if (*in)[i] != nil { (*out)[i] = (*in)[i].DeepCopyObject() } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/types/patch.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/types/patch.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/types/patch.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/types/patch.go 2020-12-10 21:46:52.000000000 +0000 @@ -25,4 +25,5 @@ JSONPatchType PatchType = "application/json-patch+json" MergePatchType PatchType = "application/merge-patch+json" StrategicMergePatchType PatchType = "application/strategic-merge-patch+json" + ApplyPatchType PatchType = "application/apply-patch+yaml" ) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,11 +21,18 @@ "time" ) +// PassiveClock allows for injecting fake or real clocks into code +// that needs to read the current time but does not support scheduling +// activity in the future. +type PassiveClock interface { + Now() time.Time + Since(time.Time) time.Duration +} + // Clock allows for injecting fake or real clocks into code that // needs to do arbitrary things based on time. type Clock interface { - Now() time.Time - Since(time.Time) time.Duration + PassiveClock After(time.Duration) <-chan time.Time NewTimer(time.Duration) Timer Sleep(time.Duration) @@ -66,10 +73,15 @@ time.Sleep(d) } -// FakeClock implements Clock, but returns an arbitrary time. -type FakeClock struct { +// FakePassiveClock implements PassiveClock, but returns an arbitrary time. +type FakePassiveClock struct { lock sync.RWMutex time time.Time +} + +// FakeClock implements Clock, but returns an arbitrary time. +type FakeClock struct { + FakePassiveClock // waiters are waiting for the fake time to pass their specified time waiters []fakeClockWaiter @@ -80,29 +92,41 @@ stepInterval time.Duration skipIfBlocked bool destChan chan time.Time - fired bool +} + +func NewFakePassiveClock(t time.Time) *FakePassiveClock { + return &FakePassiveClock{ + time: t, + } } func NewFakeClock(t time.Time) *FakeClock { return &FakeClock{ - time: t, + FakePassiveClock: *NewFakePassiveClock(t), } } // Now returns f's time. -func (f *FakeClock) Now() time.Time { +func (f *FakePassiveClock) Now() time.Time { f.lock.RLock() defer f.lock.RUnlock() return f.time } // Since returns time since the time in f. -func (f *FakeClock) Since(ts time.Time) time.Duration { +func (f *FakePassiveClock) Since(ts time.Time) time.Duration { f.lock.RLock() defer f.lock.RUnlock() return f.time.Sub(ts) } +// Sets the time. +func (f *FakePassiveClock) SetTime(t time.Time) { + f.lock.Lock() + defer f.lock.Unlock() + f.time = t +} + // Fake version of time.After(d). func (f *FakeClock) After(d time.Duration) <-chan time.Time { f.lock.Lock() @@ -175,12 +199,10 @@ if w.skipIfBlocked { select { case w.destChan <- t: - w.fired = true default: } } else { w.destChan <- t - w.fired = true } if w.stepInterval > 0 { @@ -287,36 +309,50 @@ return f.waiter.destChan } -// Stop stops the timer and returns true if the timer has not yet fired, or false otherwise. +// Stop conditionally stops the timer. If the timer has neither fired +// nor been stopped then this call stops the timer and returns true, +// otherwise this call returns false. This is like time.Timer::Stop. func (f *fakeTimer) Stop() bool { f.fakeClock.lock.Lock() defer f.fakeClock.lock.Unlock() - - newWaiters := make([]fakeClockWaiter, 0, len(f.fakeClock.waiters)) - for i := range f.fakeClock.waiters { - w := &f.fakeClock.waiters[i] - if w != &f.waiter { - newWaiters = append(newWaiters, *w) + // The timer has already fired or been stopped, unless it is found + // among the clock's waiters. + stopped := false + oldWaiters := f.fakeClock.waiters + newWaiters := make([]fakeClockWaiter, 0, len(oldWaiters)) + seekChan := f.waiter.destChan + for i := range oldWaiters { + // Identify the timer's fakeClockWaiter by the identity of the + // destination channel, nothing else is necessarily unique and + // constant since the timer's creation. + if oldWaiters[i].destChan == seekChan { + stopped = true + } else { + newWaiters = append(newWaiters, oldWaiters[i]) } } f.fakeClock.waiters = newWaiters - return !f.waiter.fired + return stopped } -// Reset resets the timer to the fake clock's "now" + d. It returns true if the timer has not yet -// fired, or false otherwise. +// Reset conditionally updates the firing time of the timer. If the +// timer has neither fired nor been stopped then this call resets the +// timer to the fake clock's "now" + d and returns true, otherwise +// this call returns false. This is like time.Timer::Reset. func (f *fakeTimer) Reset(d time.Duration) bool { f.fakeClock.lock.Lock() defer f.fakeClock.lock.Unlock() - - active := !f.waiter.fired - - f.waiter.fired = false - f.waiter.targetTime = f.fakeClock.time.Add(d) - - return active + waiters := f.fakeClock.waiters + seekChan := f.waiter.destChan + for i := range waiters { + if waiters[i].destChan == seekChan { + waiters[i].targetTime = f.fakeClock.time.Add(d) + return true + } + } + return false } type Ticker interface { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ import ( "errors" "fmt" + + "k8s.io/apimachinery/pkg/util/sets" ) // MessageCountMap contains occurrence for each error message. @@ -67,12 +69,38 @@ if len(agg) == 1 { return agg[0].Error() } - result := fmt.Sprintf("[%s", agg[0].Error()) - for i := 1; i < len(agg); i++ { - result += fmt.Sprintf(", %s", agg[i].Error()) + seenerrs := sets.NewString() + result := "" + agg.visit(func(err error) { + msg := err.Error() + if seenerrs.Has(msg) { + return + } + seenerrs.Insert(msg) + if len(seenerrs) > 1 { + result += ", " + } + result += msg + }) + if len(seenerrs) == 1 { + return result + } + return "[" + result + "]" +} + +func (agg aggregate) visit(f func(err error)) { + for _, err := range agg { + switch err := err.(type) { + case aggregate: + err.visit(f) + case Aggregate: + for _, nestedErr := range err.Errors() { + f(nestedErr) + } + default: + f(err) + } } - result += "]" - return result } // Errors is part of the Aggregate interface. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.pb.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,26 +14,20 @@ limitations under the License. */ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto -// DO NOT EDIT! -/* - Package intstr is a generated protocol buffer package. - - It is generated from these files: - k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto - - It has these top-level messages: - IntOrString -*/ package intstr -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" -import io "io" + io "io" + math "math" + math_bits "math/bits" + + proto "github.com/gogo/protobuf/proto" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -46,17 +40,69 @@ // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *IntOrString) Reset() { *m = IntOrString{} } -func (*IntOrString) ProtoMessage() {} -func (*IntOrString) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } +func (m *IntOrString) Reset() { *m = IntOrString{} } +func (*IntOrString) ProtoMessage() {} +func (*IntOrString) Descriptor() ([]byte, []int) { + return fileDescriptor_94e046ae3ce6121c, []int{0} +} +func (m *IntOrString) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IntOrString) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IntOrString) XXX_Merge(src proto.Message) { + xxx_messageInfo_IntOrString.Merge(m, src) +} +func (m *IntOrString) XXX_Size() int { + return m.Size() +} +func (m *IntOrString) XXX_DiscardUnknown() { + xxx_messageInfo_IntOrString.DiscardUnknown(m) +} + +var xxx_messageInfo_IntOrString proto.InternalMessageInfo func init() { proto.RegisterType((*IntOrString)(nil), "k8s.io.apimachinery.pkg.util.intstr.IntOrString") } + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto", fileDescriptor_94e046ae3ce6121c) +} + +var fileDescriptor_94e046ae3ce6121c = []byte{ + // 292 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x8f, 0x31, 0x4b, 0x33, 0x31, + 0x1c, 0xc6, 0x93, 0xb7, 0x7d, 0x8b, 0x9e, 0xe0, 0x50, 0x1c, 0x8a, 0x43, 0x7a, 0x28, 0xc8, 0x0d, + 0x9a, 0xac, 0xe2, 0xd8, 0xad, 0x20, 0x08, 0x57, 0x71, 0x70, 0xbb, 0x6b, 0x63, 0x1a, 0xae, 0x4d, + 0x42, 0xee, 0x7f, 0xc2, 0x6d, 0xfd, 0x08, 0xba, 0x39, 0xfa, 0x71, 0x6e, 0xec, 0xd8, 0x41, 0x8a, + 0x17, 0xbf, 0x85, 0x93, 0x5c, 0xee, 0x40, 0xa7, 0xe4, 0x79, 0x9e, 0xdf, 0x2f, 0x90, 0xe0, 0x36, + 0xbb, 0xce, 0xa9, 0xd4, 0x2c, 0x2b, 0x52, 0x6e, 0x15, 0x07, 0x9e, 0xb3, 0x67, 0xae, 0x16, 0xda, + 0xb2, 0x6e, 0x48, 0x8c, 0x5c, 0x27, 0xf3, 0xa5, 0x54, 0xdc, 0x96, 0xcc, 0x64, 0x82, 0x15, 0x20, + 0x57, 0x4c, 0x2a, 0xc8, 0xc1, 0x32, 0xc1, 0x15, 0xb7, 0x09, 0xf0, 0x05, 0x35, 0x56, 0x83, 0x1e, + 0x9e, 0xb7, 0x12, 0xfd, 0x2b, 0x51, 0x93, 0x09, 0xda, 0x48, 0xb4, 0x95, 0x4e, 0xaf, 0x84, 0x84, + 0x65, 0x91, 0xd2, 0xb9, 0x5e, 0x33, 0xa1, 0x85, 0x66, 0xde, 0x4d, 0x8b, 0x27, 0x9f, 0x7c, 0xf0, + 0xb7, 0xf6, 0xcd, 0xb3, 0x57, 0x1c, 0x1c, 0x4d, 0x15, 0xdc, 0xd9, 0x19, 0x58, 0xa9, 0xc4, 0x30, + 0x0a, 0xfa, 0x50, 0x1a, 0x3e, 0xc2, 0x21, 0x8e, 0x7a, 0x93, 0x93, 0x6a, 0x3f, 0x46, 0x6e, 0x3f, + 0xee, 0xdf, 0x97, 0x86, 0x7f, 0x77, 0x67, 0xec, 0x89, 0xe1, 0x45, 0x30, 0x90, 0x0a, 0x1e, 0x92, + 0xd5, 0xe8, 0x5f, 0x88, 0xa3, 0xff, 0x93, 0xe3, 0x8e, 0x1d, 0x4c, 0x7d, 0x1b, 0x77, 0x6b, 0xc3, + 0xe5, 0x60, 0x1b, 0xae, 0x17, 0xe2, 0xe8, 0xf0, 0x97, 0x9b, 0xf9, 0x36, 0xee, 0xd6, 0x9b, 0x83, + 0xb7, 0xf7, 0x31, 0xda, 0x7c, 0x84, 0x68, 0x72, 0x59, 0xd5, 0x04, 0x6d, 0x6b, 0x82, 0x76, 0x35, + 0x41, 0x1b, 0x47, 0x70, 0xe5, 0x08, 0xde, 0x3a, 0x82, 0x77, 0x8e, 0xe0, 0x4f, 0x47, 0xf0, 0xcb, + 0x17, 0x41, 0x8f, 0x83, 0xf6, 0xc3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x52, 0xa0, 0xb5, 0xc9, + 0x64, 0x01, 0x00, 0x00, +} + func (m *IntOrString) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -64,51 +110,44 @@ } func (m *IntOrString) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IntOrString) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Type)) - dAtA[i] = 0x10 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.IntVal)) - dAtA[i] = 0x1a - i++ + i -= len(m.StrVal) + copy(dAtA[i:], m.StrVal) i = encodeVarintGenerated(dAtA, i, uint64(len(m.StrVal))) - i += copy(dAtA[i:], m.StrVal) - return i, nil + i-- + dAtA[i] = 0x1a + i = encodeVarintGenerated(dAtA, i, uint64(m.IntVal)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Type)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil } -func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *IntOrString) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l n += 1 + sovGenerated(uint64(m.Type)) @@ -119,14 +158,7 @@ } func sovGenerated(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -146,7 +178,7 @@ } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -174,7 +206,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.Type |= (Type(b) & 0x7F) << shift + m.Type |= Type(b&0x7F) << shift if b < 0x80 { break } @@ -193,7 +225,7 @@ } b := dAtA[iNdEx] iNdEx++ - m.IntVal |= (int32(b) & 0x7F) << shift + m.IntVal |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -212,7 +244,7 @@ } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -222,6 +254,9 @@ return ErrInvalidLengthGenerated } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -236,6 +271,9 @@ if skippy < 0 { return ErrInvalidLengthGenerated } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -302,10 +340,13 @@ break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthGenerated } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } return iNdEx, nil case 3: for { @@ -334,6 +375,9 @@ return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } } return iNdEx, nil case 4: @@ -352,30 +396,3 @@ ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto", fileDescriptorGenerated) -} - -var fileDescriptorGenerated = []byte{ - // 292 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x8f, 0x31, 0x4b, 0x33, 0x31, - 0x1c, 0xc6, 0x93, 0xb7, 0x7d, 0x8b, 0x9e, 0xe0, 0x50, 0x1c, 0x8a, 0x43, 0x7a, 0x28, 0xc8, 0x0d, - 0x9a, 0xac, 0xe2, 0xd8, 0xad, 0x20, 0x08, 0x57, 0x71, 0x70, 0xbb, 0x6b, 0x63, 0x1a, 0xae, 0x4d, - 0x42, 0xee, 0x7f, 0xc2, 0x6d, 0xfd, 0x08, 0xba, 0x39, 0xfa, 0x71, 0x6e, 0xec, 0xd8, 0x41, 0x8a, - 0x17, 0xbf, 0x85, 0x93, 0x5c, 0xee, 0x40, 0xa7, 0xe4, 0x79, 0x9e, 0xdf, 0x2f, 0x90, 0xe0, 0x36, - 0xbb, 0xce, 0xa9, 0xd4, 0x2c, 0x2b, 0x52, 0x6e, 0x15, 0x07, 0x9e, 0xb3, 0x67, 0xae, 0x16, 0xda, - 0xb2, 0x6e, 0x48, 0x8c, 0x5c, 0x27, 0xf3, 0xa5, 0x54, 0xdc, 0x96, 0xcc, 0x64, 0x82, 0x15, 0x20, - 0x57, 0x4c, 0x2a, 0xc8, 0xc1, 0x32, 0xc1, 0x15, 0xb7, 0x09, 0xf0, 0x05, 0x35, 0x56, 0x83, 0x1e, - 0x9e, 0xb7, 0x12, 0xfd, 0x2b, 0x51, 0x93, 0x09, 0xda, 0x48, 0xb4, 0x95, 0x4e, 0xaf, 0x84, 0x84, - 0x65, 0x91, 0xd2, 0xb9, 0x5e, 0x33, 0xa1, 0x85, 0x66, 0xde, 0x4d, 0x8b, 0x27, 0x9f, 0x7c, 0xf0, - 0xb7, 0xf6, 0xcd, 0xb3, 0x57, 0x1c, 0x1c, 0x4d, 0x15, 0xdc, 0xd9, 0x19, 0x58, 0xa9, 0xc4, 0x30, - 0x0a, 0xfa, 0x50, 0x1a, 0x3e, 0xc2, 0x21, 0x8e, 0x7a, 0x93, 0x93, 0x6a, 0x3f, 0x46, 0x6e, 0x3f, - 0xee, 0xdf, 0x97, 0x86, 0x7f, 0x77, 0x67, 0xec, 0x89, 0xe1, 0x45, 0x30, 0x90, 0x0a, 0x1e, 0x92, - 0xd5, 0xe8, 0x5f, 0x88, 0xa3, 0xff, 0x93, 0xe3, 0x8e, 0x1d, 0x4c, 0x7d, 0x1b, 0x77, 0x6b, 0xc3, - 0xe5, 0x60, 0x1b, 0xae, 0x17, 0xe2, 0xe8, 0xf0, 0x97, 0x9b, 0xf9, 0x36, 0xee, 0xd6, 0x9b, 0x83, - 0xb7, 0xf7, 0x31, 0xda, 0x7c, 0x84, 0x68, 0x72, 0x59, 0xd5, 0x04, 0x6d, 0x6b, 0x82, 0x76, 0x35, - 0x41, 0x1b, 0x47, 0x70, 0xe5, 0x08, 0xde, 0x3a, 0x82, 0x77, 0x8e, 0xe0, 0x4f, 0x47, 0xf0, 0xcb, - 0x17, 0x41, 0x8f, 0x83, 0xf6, 0xc3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x52, 0xa0, 0xb5, 0xc9, - 0x64, 0x01, 0x00, 0x00, -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/generated.proto 2020-12-10 21:46:52.000000000 +0000 @@ -29,7 +29,7 @@ // inner type. This allows you to have, for example, a JSON field that can // accept a name or number. // TODO: Rename to Int32OrString -// +// // +protobuf=true // +protobuf.options.(gogoproto.goproto_stringer)=false // +k8s:openapi-gen=true diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,14 +18,15 @@ import ( "encoding/json" + "errors" "fmt" "math" "runtime/debug" "strconv" "strings" - "github.com/golang/glog" "github.com/google/gofuzz" + "k8s.io/klog" ) // IntOrString is a type that can hold an int32 or a string. When used in @@ -44,7 +45,7 @@ } // Type represents the stored type of IntOrString. -type Type int +type Type int64 const ( Int Type = iota // The IntOrString holds an int. @@ -57,7 +58,7 @@ // TODO: convert to (val int32) func FromInt(val int) IntOrString { if val > math.MaxInt32 || val < math.MinInt32 { - glog.Errorf("value: %d overflows int32\n%s\n", val, debug.Stack()) + klog.Errorf("value: %d overflows int32\n%s\n", val, debug.Stack()) } return IntOrString{Type: Int, IntVal: int32(val)} } @@ -121,11 +122,11 @@ // the OpenAPI spec of this type. // // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators -func (_ IntOrString) OpenAPISchemaType() []string { return []string{"string"} } +func (IntOrString) OpenAPISchemaType() []string { return []string{"string"} } // OpenAPISchemaFormat is used by the kube-openapi generator when constructing // the OpenAPI spec of this type. -func (_ IntOrString) OpenAPISchemaFormat() string { return "int-or-string" } +func (IntOrString) OpenAPISchemaFormat() string { return "int-or-string" } func (intstr *IntOrString) Fuzz(c fuzz.Continue) { if intstr == nil { @@ -142,7 +143,17 @@ } } +func ValueOrDefault(intOrPercent *IntOrString, defaultValue IntOrString) *IntOrString { + if intOrPercent == nil { + return &defaultValue + } + return intOrPercent +} + func GetValueFromIntOrPercent(intOrPercent *IntOrString, total int, roundUp bool) (int, error) { + if intOrPercent == nil { + return 0, errors.New("nil value for IntOrString") + } value, isPercent, err := getIntOrPercentValue(intOrPercent) if err != nil { return 0, fmt.Errorf("invalid value for IntOrString: %v", err) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/json/json.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/json/json.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/json/json.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/json/json.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,7 @@ import ( "bytes" "encoding/json" + "fmt" "io" ) @@ -34,6 +35,9 @@ return json.Marshal(v) } +// limit recursive depth to prevent stack overflow errors +const maxDepth = 10000 + // Unmarshal unmarshals the given data // If v is a *map[string]interface{}, numbers are converted to int64 or float64 func Unmarshal(data []byte, v interface{}) error { @@ -48,7 +52,7 @@ return err } // If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64 - return convertMapNumbers(*v) + return convertMapNumbers(*v, 0) case *[]interface{}: // Build a decoder from the given data @@ -60,7 +64,7 @@ return err } // If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64 - return convertSliceNumbers(*v) + return convertSliceNumbers(*v, 0) default: return json.Unmarshal(data, v) @@ -69,16 +73,20 @@ // convertMapNumbers traverses the map, converting any json.Number values to int64 or float64. // values which are map[string]interface{} or []interface{} are recursively visited -func convertMapNumbers(m map[string]interface{}) error { +func convertMapNumbers(m map[string]interface{}, depth int) error { + if depth > maxDepth { + return fmt.Errorf("exceeded max depth of %d", maxDepth) + } + var err error for k, v := range m { switch v := v.(type) { case json.Number: m[k], err = convertNumber(v) case map[string]interface{}: - err = convertMapNumbers(v) + err = convertMapNumbers(v, depth+1) case []interface{}: - err = convertSliceNumbers(v) + err = convertSliceNumbers(v, depth+1) } if err != nil { return err @@ -89,16 +97,20 @@ // convertSliceNumbers traverses the slice, converting any json.Number values to int64 or float64. // values which are map[string]interface{} or []interface{} are recursively visited -func convertSliceNumbers(s []interface{}) error { +func convertSliceNumbers(s []interface{}, depth int) error { + if depth > maxDepth { + return fmt.Errorf("exceeded max depth of %d", maxDepth) + } + var err error for i, v := range s { switch v := v.(type) { case json.Number: s[i], err = convertNumber(v) case map[string]interface{}: - err = convertMapNumbers(v) + err = convertMapNumbers(v, depth+1) case []interface{}: - err = convertSliceNumbers(v) + err = convertSliceNumbers(v, depth+1) } if err != nil { return err diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/naming/from_stack.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,93 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package naming + +import ( + "fmt" + "regexp" + goruntime "runtime" + "runtime/debug" + "strconv" + "strings" +) + +// GetNameFromCallsite walks back through the call stack until we find a caller from outside of the ignoredPackages +// it returns back a shortpath/filename:line to aid in identification of this reflector when it starts logging +func GetNameFromCallsite(ignoredPackages ...string) string { + name := "????" + const maxStack = 10 + for i := 1; i < maxStack; i++ { + _, file, line, ok := goruntime.Caller(i) + if !ok { + file, line, ok = extractStackCreator() + if !ok { + break + } + i += maxStack + } + if hasPackage(file, append(ignoredPackages, "/runtime/asm_")) { + continue + } + + file = trimPackagePrefix(file) + name = fmt.Sprintf("%s:%d", file, line) + break + } + return name +} + +// hasPackage returns true if the file is in one of the ignored packages. +func hasPackage(file string, ignoredPackages []string) bool { + for _, ignoredPackage := range ignoredPackages { + if strings.Contains(file, ignoredPackage) { + return true + } + } + return false +} + +// trimPackagePrefix reduces duplicate values off the front of a package name. +func trimPackagePrefix(file string) string { + if l := strings.LastIndex(file, "/vendor/"); l >= 0 { + return file[l+len("/vendor/"):] + } + if l := strings.LastIndex(file, "/src/"); l >= 0 { + return file[l+5:] + } + if l := strings.LastIndex(file, "/pkg/"); l >= 0 { + return file[l+1:] + } + return file +} + +var stackCreator = regexp.MustCompile(`(?m)^created by (.*)\n\s+(.*):(\d+) \+0x[[:xdigit:]]+$`) + +// extractStackCreator retrieves the goroutine file and line that launched this stack. Returns false +// if the creator cannot be located. +// TODO: Go does not expose this via runtime https://github.com/golang/go/issues/11440 +func extractStackCreator() (string, int, bool) { + stack := debug.Stack() + matches := stackCreator.FindStringSubmatch(string(stack)) + if matches == nil || len(matches) != 4 { + return "", 0, false + } + line, err := strconv.Atoi(matches[3]) + if err != nil { + return "", 0, false + } + return matches[2], line, true +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/http.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/http.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/http.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/http.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,8 +31,8 @@ "strconv" "strings" - "github.com/golang/glog" "golang.org/x/net/http2" + "k8s.io/klog" ) // JoinPreservingTrailingSlash does a path.Join of the specified elements, @@ -55,6 +55,12 @@ return result } +// IsTimeout returns true if the given error is a network timeout error +func IsTimeout(err error) bool { + neterr, ok := err.(net.Error) + return ok && neterr != nil && neterr.Timeout() +} + // IsProbableEOF returns true if the given error resembles a connection termination // scenario that would justify assuming that the watch is empty. // These errors are what the Go http stack returns back to us which are general @@ -68,14 +74,17 @@ if uerr, ok := err.(*url.Error); ok { err = uerr.Err } + msg := err.Error() switch { case err == io.EOF: return true - case err.Error() == "http: can't write HTTP request on broken connection": + case msg == "http: can't write HTTP request on broken connection": return true - case strings.Contains(err.Error(), "connection reset by peer"): + case strings.Contains(msg, "http2: server sent GOAWAY and closed the connection"): return true - case strings.Contains(strings.ToLower(err.Error()), "use of closed network connection"): + case strings.Contains(msg, "connection reset by peer"): + return true + case strings.Contains(strings.ToLower(msg), "use of closed network connection"): return true } return false @@ -91,12 +100,16 @@ // ProxierWithNoProxyCIDR allows CIDR rules in NO_PROXY t.Proxy = NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) } - if t.DialContext == nil { + // If no custom dialer is set, use the default context dialer + if t.DialContext == nil && t.Dial == nil { t.DialContext = defaultTransport.DialContext } if t.TLSHandshakeTimeout == 0 { t.TLSHandshakeTimeout = defaultTransport.TLSHandshakeTimeout } + if t.IdleConnTimeout == 0 { + t.IdleConnTimeout = defaultTransport.IdleConnTimeout + } return t } @@ -106,15 +119,30 @@ t = SetOldTransportDefaults(t) // Allow clients to disable http2 if needed. if s := os.Getenv("DISABLE_HTTP2"); len(s) > 0 { - glog.Infof("HTTP2 has been explicitly disabled") - } else { + klog.Infof("HTTP2 has been explicitly disabled") + } else if allowsHTTP2(t) { if err := http2.ConfigureTransport(t); err != nil { - glog.Warningf("Transport failed http2 configuration: %v", err) + klog.Warningf("Transport failed http2 configuration: %v", err) } } return t } +func allowsHTTP2(t *http.Transport) bool { + if t.TLSClientConfig == nil || len(t.TLSClientConfig.NextProtos) == 0 { + // the transport expressed no NextProto preference, allow + return true + } + for _, p := range t.TLSClientConfig.NextProtos { + if p == http2.NextProtoTLS { + // the transport explicitly allowed http/2 + return true + } + } + // the transport explicitly set NextProtos and excluded http/2 + return false +} + type RoundTripperWrapper interface { http.RoundTripper WrappedRoundTripper() http.RoundTripper @@ -129,7 +157,18 @@ switch transport := transport.(type) { case *http.Transport: - return transport.DialContext, nil + // transport.DialContext takes precedence over transport.Dial + if transport.DialContext != nil { + return transport.DialContext, nil + } + // adapt transport.Dial to the DialWithContext signature + if transport.Dial != nil { + return func(ctx context.Context, net, addr string) (net.Conn, error) { + return transport.Dial(net, addr) + }, nil + } + // otherwise return nil + return nil, nil case RoundTripperWrapper: return DialerFor(transport.WrappedRoundTripper()) default: @@ -167,10 +206,8 @@ } func GetHTTPClient(req *http.Request) string { - if userAgent, ok := req.Header["User-Agent"]; ok { - if len(userAgent) > 0 { - return userAgent[0] - } + if ua := req.UserAgent(); len(ua) != 0 { + return ua } return "unknown" } @@ -311,9 +348,10 @@ // ConnectWithRedirects uses dialer to send req, following up to 10 redirects (relative to // originalLocation). It returns the opened net.Conn and the raw response bytes. -func ConnectWithRedirects(originalMethod string, originalLocation *url.URL, header http.Header, originalBody io.Reader, dialer Dialer) (net.Conn, []byte, error) { +// If requireSameHostRedirects is true, only redirects to the same host are permitted. +func ConnectWithRedirects(originalMethod string, originalLocation *url.URL, header http.Header, originalBody io.Reader, dialer Dialer, requireSameHostRedirects bool) (net.Conn, []byte, error) { const ( - maxRedirects = 10 + maxRedirects = 9 // Fail on the 10th redirect maxResponseSize = 16384 // play it safe to allow the potential for lots of / large headers ) @@ -357,7 +395,7 @@ resp, err := http.ReadResponse(respReader, nil) if err != nil { // Unable to read the backend response; let the client handle it. - glog.Warningf("Error reading backend response: %v", err) + klog.Warningf("Error reading backend response: %v", err) break redirectLoop } @@ -377,10 +415,6 @@ resp.Body.Close() // not used - // Reset the connection. - intermediateConn.Close() - intermediateConn = nil - // Prepare to follow the redirect. redirectStr := resp.Header.Get("Location") if redirectStr == "" { @@ -394,6 +428,15 @@ if err != nil { return nil, nil, fmt.Errorf("malformed Location header: %v", err) } + + // Only follow redirects to the same host. Otherwise, propagate the redirect response back. + if requireSameHostRedirects && location.Hostname() != originalLocation.Hostname() { + break redirectLoop + } + + // Reset the connection. + intermediateConn.Close() + intermediateConn = nil } connToReturn := intermediateConn diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/interface.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/interface.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/interface.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/interface.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,7 +26,7 @@ "strings" - "github.com/golang/glog" + "k8s.io/klog" ) type AddressFamily uint @@ -53,6 +53,28 @@ parse func(input io.Reader) ([]Route, error) } +// noRoutesError can be returned by ChooseBindAddress() in case of no routes +type noRoutesError struct { + message string +} + +func (e noRoutesError) Error() string { + return e.message +} + +// IsNoRoutesError checks if an error is of type noRoutesError +func IsNoRoutesError(err error) bool { + if err == nil { + return false + } + switch err.(type) { + case noRoutesError: + return true + default: + return false + } +} + var ( v4File = RouteFile{name: ipv4RouteFile, parse: getIPv4DefaultRoutes} v6File = RouteFile{name: ipv6RouteFile, parse: getIPv6DefaultRoutes} @@ -171,7 +193,7 @@ return false } if intf.Flags&net.FlagUp != 0 { - glog.V(4).Infof("Interface %v is up", intf.Name) + klog.V(4).Infof("Interface %v is up", intf.Name) return true } return false @@ -186,20 +208,20 @@ func getMatchingGlobalIP(addrs []net.Addr, family AddressFamily) (net.IP, error) { if len(addrs) > 0 { for i := range addrs { - glog.V(4).Infof("Checking addr %s.", addrs[i].String()) + klog.V(4).Infof("Checking addr %s.", addrs[i].String()) ip, _, err := net.ParseCIDR(addrs[i].String()) if err != nil { return nil, err } if memberOf(ip, family) { if ip.IsGlobalUnicast() { - glog.V(4).Infof("IP found %v", ip) + klog.V(4).Infof("IP found %v", ip) return ip, nil } else { - glog.V(4).Infof("Non-global unicast address found %v", ip) + klog.V(4).Infof("Non-global unicast address found %v", ip) } } else { - glog.V(4).Infof("%v is not an IPv%d address", ip, int(family)) + klog.V(4).Infof("%v is not an IPv%d address", ip, int(family)) } } @@ -219,13 +241,13 @@ if err != nil { return nil, err } - glog.V(4).Infof("Interface %q has %d addresses :%v.", intfName, len(addrs), addrs) + klog.V(4).Infof("Interface %q has %d addresses :%v.", intfName, len(addrs), addrs) matchingIP, err := getMatchingGlobalIP(addrs, forFamily) if err != nil { return nil, err } if matchingIP != nil { - glog.V(4).Infof("Found valid IPv%d address %v for interface %q.", int(forFamily), matchingIP, intfName) + klog.V(4).Infof("Found valid IPv%d address %v for interface %q.", int(forFamily), matchingIP, intfName) return matchingIP, nil } } @@ -253,14 +275,14 @@ return nil, fmt.Errorf("no interfaces found on host.") } for _, family := range []AddressFamily{familyIPv4, familyIPv6} { - glog.V(4).Infof("Looking for system interface with a global IPv%d address", uint(family)) + klog.V(4).Infof("Looking for system interface with a global IPv%d address", uint(family)) for _, intf := range intfs { if !isInterfaceUp(&intf) { - glog.V(4).Infof("Skipping: down interface %q", intf.Name) + klog.V(4).Infof("Skipping: down interface %q", intf.Name) continue } if isLoopbackOrPointToPoint(&intf) { - glog.V(4).Infof("Skipping: LB or P2P interface %q", intf.Name) + klog.V(4).Infof("Skipping: LB or P2P interface %q", intf.Name) continue } addrs, err := nw.Addrs(&intf) @@ -268,7 +290,7 @@ return nil, err } if len(addrs) == 0 { - glog.V(4).Infof("Skipping: no addresses on interface %q", intf.Name) + klog.V(4).Infof("Skipping: no addresses on interface %q", intf.Name) continue } for _, addr := range addrs { @@ -277,15 +299,15 @@ return nil, fmt.Errorf("Unable to parse CIDR for interface %q: %s", intf.Name, err) } if !memberOf(ip, family) { - glog.V(4).Infof("Skipping: no address family match for %q on interface %q.", ip, intf.Name) + klog.V(4).Infof("Skipping: no address family match for %q on interface %q.", ip, intf.Name) continue } // TODO: Decide if should open up to allow IPv6 LLAs in future. if !ip.IsGlobalUnicast() { - glog.V(4).Infof("Skipping: non-global address %q on interface %q.", ip, intf.Name) + klog.V(4).Infof("Skipping: non-global address %q on interface %q.", ip, intf.Name) continue } - glog.V(4).Infof("Found global unicast address %q on interface %q.", ip, intf.Name) + klog.V(4).Infof("Found global unicast address %q on interface %q.", ip, intf.Name) return ip, nil } } @@ -347,7 +369,9 @@ v6Routes, _ := v6File.extract() routes = append(routes, v6Routes...) if len(routes) == 0 { - return nil, fmt.Errorf("No default routes.") + return nil, noRoutesError{ + message: fmt.Sprintf("no default routes found in %q or %q", v4File.name, v6File.name), + } } return routes, nil } @@ -357,23 +381,23 @@ // an IPv4 IP, and then will look at each IPv6 route for an IPv6 IP. func chooseHostInterfaceFromRoute(routes []Route, nw networkInterfacer) (net.IP, error) { for _, family := range []AddressFamily{familyIPv4, familyIPv6} { - glog.V(4).Infof("Looking for default routes with IPv%d addresses", uint(family)) + klog.V(4).Infof("Looking for default routes with IPv%d addresses", uint(family)) for _, route := range routes { if route.Family != family { continue } - glog.V(4).Infof("Default route transits interface %q", route.Interface) + klog.V(4).Infof("Default route transits interface %q", route.Interface) finalIP, err := getIPFromInterface(route.Interface, family, nw) if err != nil { return nil, err } if finalIP != nil { - glog.V(4).Infof("Found active IP %v ", finalIP) + klog.V(4).Infof("Found active IP %v ", finalIP) return finalIP, nil } } } - glog.V(4).Infof("No active IP found by looking at default routes") + klog.V(4).Infof("No active IP found by looking at default routes") return nil, fmt.Errorf("unable to select an IP from default routes.") } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/util.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/util.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/util.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/net/util.go 2020-12-10 21:46:52.000000000 +0000 @@ -54,3 +54,20 @@ } return false } + +// Returns if the given err is "connection refused" error +func IsConnectionRefused(err error) bool { + if urlErr, ok := err.(*url.Error); ok { + err = urlErr.Err + } + if opErr, ok := err.(*net.OpError); ok { + err = opErr.Err + } + if osErr, ok := err.(*os.SyscallError); ok { + err = osErr.Err + } + if errno, ok := err.(syscall.Errno); ok && errno == syscall.ECONNREFUSED { + return true + } + return false +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,11 +18,12 @@ import ( "fmt" + "net/http" "runtime" "sync" "time" - "github.com/golang/glog" + "k8s.io/klog" ) var ( @@ -40,11 +41,7 @@ // called in case of panic. HandleCrash actually crashes, after calling the // handlers and logging the panic message. // -// TODO: remove this function. We are switching to a world where it's safe for -// apiserver to panic, since it will be restarted by kubelet. At the beginning -// of the Kubernetes project, nothing was going to restart apiserver and so -// catching panics was important. But it's actually much simpler for monitoring -// software if we just exit when an unexpected panic happens. +// E.g., you can provide one or more additional handlers for something like shutting down go routines gracefully. func HandleCrash(additionalHandlers ...func(interface{})) { if r := recover(); r != nil { for _, fn := range PanicHandlers { @@ -60,27 +57,26 @@ } } -// logPanic logs the caller tree when a panic occurs. +// logPanic logs the caller tree when a panic occurs (except in the special case of http.ErrAbortHandler). func logPanic(r interface{}) { - callers := getCallers(r) - if _, ok := r.(string); ok { - glog.Errorf("Observed a panic: %s\n%v", r, callers) - } else { - glog.Errorf("Observed a panic: %#v (%v)\n%v", r, r, callers) + if r == http.ErrAbortHandler { + // honor the http.ErrAbortHandler sentinel panic value: + // ErrAbortHandler is a sentinel panic value to abort a handler. + // While any panic from ServeHTTP aborts the response to the client, + // panicking with ErrAbortHandler also suppresses logging of a stack trace to the server's error log. + return } -} -func getCallers(r interface{}) string { - callers := "" - for i := 0; true; i++ { - _, file, line, ok := runtime.Caller(i) - if !ok { - break - } - callers = callers + fmt.Sprintf("%v:%v\n", file, line) + // Same as stdlib http server code. Manually allocate stack trace buffer size + // to prevent excessively large logs + const size = 64 << 10 + stacktrace := make([]byte, size) + stacktrace = stacktrace[:runtime.Stack(stacktrace, false)] + if _, ok := r.(string); ok { + klog.Errorf("Observed a panic: %s\n%s", r, stacktrace) + } else { + klog.Errorf("Observed a panic: %#v (%v)\n%s", r, r, stacktrace) } - - return callers } // ErrorHandlers is a list of functions which will be invoked when an unreturnable @@ -115,7 +111,7 @@ // logError prints an error with the call stack of the location it was reported func logError(err error) { - glog.ErrorDepth(2, err) + klog.ErrorDepth(2, err) } type rudimentaryErrorBackoff struct { @@ -155,13 +151,17 @@ // handlers to handle errors and panics the same way. func RecoverFromPanic(err *error) { if r := recover(); r != nil { - callers := getCallers(r) + // Same as stdlib http server code. Manually allocate stack trace buffer size + // to prevent excessively large logs + const size = 64 << 10 + stacktrace := make([]byte, size) + stacktrace = stacktrace[:runtime.Stack(stacktrace, false)] *err = fmt.Errorf( - "recovered from panic %q. (err=%v) Call stack:\n%v", + "recovered from panic %q. (err=%v) Call stack:\n%s", r, *err, - callers) + stacktrace) } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/byte.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/byte.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/byte.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/byte.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,17 +46,19 @@ } // Insert adds items to the set. -func (s Byte) Insert(items ...byte) { +func (s Byte) Insert(items ...byte) Byte { for _, item := range items { s[item] = Empty{} } + return s } // Delete removes all items from the set. -func (s Byte) Delete(items ...byte) { +func (s Byte) Delete(items ...byte) Byte { for _, item := range items { delete(s, item) } + return s } // Has returns true if and only if item is contained in the set. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int32.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int32.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int32.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int32.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,205 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by set-gen. DO NOT EDIT. + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Int32 is a set of int32s, implemented via map[int32]struct{} for minimal memory consumption. +type Int32 map[int32]Empty + +// NewInt32 creates a Int32 from a list of values. +func NewInt32(items ...int32) Int32 { + ss := Int32{} + ss.Insert(items...) + return ss +} + +// Int32KeySet creates a Int32 from a keys of a map[int32](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func Int32KeySet(theMap interface{}) Int32 { + v := reflect.ValueOf(theMap) + ret := Int32{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(int32)) + } + return ret +} + +// Insert adds items to the set. +func (s Int32) Insert(items ...int32) Int32 { + for _, item := range items { + s[item] = Empty{} + } + return s +} + +// Delete removes all items from the set. +func (s Int32) Delete(items ...int32) Int32 { + for _, item := range items { + delete(s, item) + } + return s +} + +// Has returns true if and only if item is contained in the set. +func (s Int32) Has(item int32) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Int32) HasAll(items ...int32) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Int32) HasAny(items ...int32) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s Int32) Difference(s2 Int32) Int32 { + result := NewInt32() + for key := range s { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Int32) Union(s2 Int32) Int32 { + result := NewInt32() + for key := range s1 { + result.Insert(key) + } + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Int32) Intersection(s2 Int32) Int32 { + var walk, other Int32 + result := NewInt32() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Int32) IsSuperset(s2 Int32) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Int32) Equal(s2 Int32) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfInt32 []int32 + +func (s sortableSliceOfInt32) Len() int { return len(s) } +func (s sortableSliceOfInt32) Less(i, j int) bool { return lessInt32(s[i], s[j]) } +func (s sortableSliceOfInt32) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted int32 slice. +func (s Int32) List() []int32 { + res := make(sortableSliceOfInt32, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []int32(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Int32) UnsortedList() []int32 { + res := make([]int32, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Int32) PopAny() (int32, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue int32 + return zeroValue, false +} + +// Len returns the size of the set. +func (s Int32) Len() int { + return len(s) +} + +func lessInt32(lhs, rhs int32) bool { + return lhs < rhs +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int64.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int64.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int64.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int64.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,17 +46,19 @@ } // Insert adds items to the set. -func (s Int64) Insert(items ...int64) { +func (s Int64) Insert(items ...int64) Int64 { for _, item := range items { s[item] = Empty{} } + return s } // Delete removes all items from the set. -func (s Int64) Delete(items ...int64) { +func (s Int64) Delete(items ...int64) Int64 { for _, item := range items { delete(s, item) } + return s } // Has returns true if and only if item is contained in the set. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/int.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,17 +46,19 @@ } // Insert adds items to the set. -func (s Int) Insert(items ...int) { +func (s Int) Insert(items ...int) Int { for _, item := range items { s[item] = Empty{} } + return s } // Delete removes all items from the set. -func (s Int) Delete(items ...int) { +func (s Int) Delete(items ...int) Int { for _, item := range items { delete(s, item) } + return s } // Has returns true if and only if item is contained in the set. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/string.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/string.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/string.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/sets/string.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,17 +46,19 @@ } // Insert adds items to the set. -func (s String) Insert(items ...string) { +func (s String) Insert(items ...string) String { for _, item := range items { s[item] = Empty{} } + return s } // Delete removes all items from the set. -func (s String) Delete(items ...string) { +func (s String) Delete(items ...string) String { for _, item := range items { delete(s, item) } + return s } // Has returns true if and only if item is contained in the set. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go 2020-12-10 21:46:52.000000000 +0000 @@ -48,7 +48,7 @@ var s string switch v.Type { case ErrorTypeRequired, ErrorTypeForbidden, ErrorTypeTooLong, ErrorTypeInternal: - s = fmt.Sprintf("%s", v.Type) + s = v.Type.String() default: value := v.BadValue valueType := reflect.TypeOf(value) @@ -116,6 +116,10 @@ // This is similar to ErrorTypeInvalid, but the error will not include the // too-long value. See TooLong(). ErrorTypeTooLong ErrorType = "FieldValueTooLong" + // ErrorTypeTooMany is used to report "too many". This is used to + // report that a given list has too many items. This is similar to FieldValueTooLong, + // but the error indicates quantity instead of length. + ErrorTypeTooMany ErrorType = "FieldValueTooMany" // ErrorTypeInternal is used to report other errors that are not related // to user input. See InternalError(). ErrorTypeInternal ErrorType = "InternalError" @@ -138,6 +142,8 @@ return "Forbidden" case ErrorTypeTooLong: return "Too long" + case ErrorTypeTooMany: + return "Too many" case ErrorTypeInternal: return "Internal error" default: @@ -201,6 +207,13 @@ return &Error{ErrorTypeTooLong, field.String(), value, fmt.Sprintf("must have at most %d characters", maxLength)} } +// TooMany returns a *Error indicating "too many". This is used to +// report that a given list has too many items. This is similar to TooLong, +// but the returned error indicates quantity instead of length. +func TooMany(field *Path, actualQuantity, maxQuantity int) *Error { + return &Error{ErrorTypeTooMany, field.String(), actualQuantity, fmt.Sprintf("must have at most %d items", maxQuantity)} +} + // InternalError returns a *Error indicating "internal error". This is used // to signal that an error was found that was not directly related to user // input. The err argument must be non-nil. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ "math" "net" "regexp" + "strconv" "strings" "k8s.io/apimachinery/pkg/util/validation/field" @@ -86,6 +87,8 @@ const labelValueFmt string = "(" + qualifiedNameFmt + ")?" const labelValueErrMsg string = "a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character" + +// LabelValueMaxLength is a label's max length const LabelValueMaxLength int = 63 var labelValueRegexp = regexp.MustCompile("^" + labelValueFmt + "$") @@ -106,6 +109,8 @@ const dns1123LabelFmt string = "[a-z0-9]([-a-z0-9]*[a-z0-9])?" const dns1123LabelErrMsg string = "a DNS-1123 label must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character" + +// DNS1123LabelMaxLength is a label's max length in DNS (RFC 1123) const DNS1123LabelMaxLength int = 63 var dns1123LabelRegexp = regexp.MustCompile("^" + dns1123LabelFmt + "$") @@ -125,6 +130,8 @@ const dns1123SubdomainFmt string = dns1123LabelFmt + "(\\." + dns1123LabelFmt + ")*" const dns1123SubdomainErrorMsg string = "a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character" + +// DNS1123SubdomainMaxLength is a subdomain's max length in DNS (RFC 1123) const DNS1123SubdomainMaxLength int = 253 var dns1123SubdomainRegexp = regexp.MustCompile("^" + dns1123SubdomainFmt + "$") @@ -144,6 +151,8 @@ const dns1035LabelFmt string = "[a-z]([-a-z0-9]*[a-z0-9])?" const dns1035LabelErrMsg string = "a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character" + +// DNS1035LabelMaxLength is a label's max length in DNS (RFC 1035) const DNS1035LabelMaxLength int = 63 var dns1035LabelRegexp = regexp.MustCompile("^" + dns1035LabelFmt + "$") @@ -281,6 +290,7 @@ var percentRegexp = regexp.MustCompile("^" + percentFmt + "$") +// IsValidPercent checks that string is in the form of a percentage func IsValidPercent(percent string) []string { if !percentRegexp.MatchString(percent) { return []string{RegexError(percentErrMsg, percentFmt, "1%", "93%")} @@ -389,3 +399,18 @@ } return errs } + +// IsValidSocketAddr checks that string represents a valid socket address +// as defined in RFC 789. (e.g 0.0.0.0:10254 or [::]:10254)) +func IsValidSocketAddr(value string) []string { + var errs []string + ip, port, err := net.SplitHostPort(value) + if err != nil { + errs = append(errs, "must be a valid socket address format, (e.g. 0.0.0.0:10254 or [::]:10254)") + return errs + } + portInt, _ := strconv.Atoi(port) + errs = append(errs, IsValidPortNum(portInt)...) + errs = append(errs, IsValidIP(ip)...) + return errs +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package wait provides tools for polling or listening for changes -// to a condition. -package wait // import "k8s.io/apimachinery/pkg/util/wait" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,405 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package wait - -import ( - "context" - "errors" - "math/rand" - "sync" - "time" - - "k8s.io/apimachinery/pkg/util/runtime" -) - -// For any test of the style: -// ... -// <- time.After(timeout): -// t.Errorf("Timed out") -// The value for timeout should effectively be "forever." Obviously we don't want our tests to truly lock up forever, but 30s -// is long enough that it is effectively forever for the things that can slow down a run on a heavily contended machine -// (GC, seeks, etc), but not so long as to make a developer ctrl-c a test run if they do happen to break that test. -var ForeverTestTimeout = time.Second * 30 - -// NeverStop may be passed to Until to make it never stop. -var NeverStop <-chan struct{} = make(chan struct{}) - -// Group allows to start a group of goroutines and wait for their completion. -type Group struct { - wg sync.WaitGroup -} - -func (g *Group) Wait() { - g.wg.Wait() -} - -// StartWithChannel starts f in a new goroutine in the group. -// stopCh is passed to f as an argument. f should stop when stopCh is available. -func (g *Group) StartWithChannel(stopCh <-chan struct{}, f func(stopCh <-chan struct{})) { - g.Start(func() { - f(stopCh) - }) -} - -// StartWithContext starts f in a new goroutine in the group. -// ctx is passed to f as an argument. f should stop when ctx.Done() is available. -func (g *Group) StartWithContext(ctx context.Context, f func(context.Context)) { - g.Start(func() { - f(ctx) - }) -} - -// Start starts f in a new goroutine in the group. -func (g *Group) Start(f func()) { - g.wg.Add(1) - go func() { - defer g.wg.Done() - f() - }() -} - -// Forever calls f every period for ever. -// -// Forever is syntactic sugar on top of Until. -func Forever(f func(), period time.Duration) { - Until(f, period, NeverStop) -} - -// Until loops until stop channel is closed, running f every period. -// -// Until is syntactic sugar on top of JitterUntil with zero jitter factor and -// with sliding = true (which means the timer for period starts after the f -// completes). -func Until(f func(), period time.Duration, stopCh <-chan struct{}) { - JitterUntil(f, period, 0.0, true, stopCh) -} - -// NonSlidingUntil loops until stop channel is closed, running f every -// period. -// -// NonSlidingUntil is syntactic sugar on top of JitterUntil with zero jitter -// factor, with sliding = false (meaning the timer for period starts at the same -// time as the function starts). -func NonSlidingUntil(f func(), period time.Duration, stopCh <-chan struct{}) { - JitterUntil(f, period, 0.0, false, stopCh) -} - -// JitterUntil loops until stop channel is closed, running f every period. -// -// If jitterFactor is positive, the period is jittered before every run of f. -// If jitterFactor is not positive, the period is unchanged and not jittered. -// -// If sliding is true, the period is computed after f runs. If it is false then -// period includes the runtime for f. -// -// Close stopCh to stop. f may not be invoked if stop channel is already -// closed. Pass NeverStop to if you don't want it stop. -func JitterUntil(f func(), period time.Duration, jitterFactor float64, sliding bool, stopCh <-chan struct{}) { - var t *time.Timer - var sawTimeout bool - - for { - select { - case <-stopCh: - return - default: - } - - jitteredPeriod := period - if jitterFactor > 0.0 { - jitteredPeriod = Jitter(period, jitterFactor) - } - - if !sliding { - t = resetOrReuseTimer(t, jitteredPeriod, sawTimeout) - } - - func() { - defer runtime.HandleCrash() - f() - }() - - if sliding { - t = resetOrReuseTimer(t, jitteredPeriod, sawTimeout) - } - - // NOTE: b/c there is no priority selection in golang - // it is possible for this to race, meaning we could - // trigger t.C and stopCh, and t.C select falls through. - // In order to mitigate we re-check stopCh at the beginning - // of every loop to prevent extra executions of f(). - select { - case <-stopCh: - return - case <-t.C: - sawTimeout = true - } - } -} - -// Jitter returns a time.Duration between duration and duration + maxFactor * -// duration. -// -// This allows clients to avoid converging on periodic behavior. If maxFactor -// is 0.0, a suggested default value will be chosen. -func Jitter(duration time.Duration, maxFactor float64) time.Duration { - if maxFactor <= 0.0 { - maxFactor = 1.0 - } - wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration)) - return wait -} - -// ErrWaitTimeout is returned when the condition exited without success. -var ErrWaitTimeout = errors.New("timed out waiting for the condition") - -// ConditionFunc returns true if the condition is satisfied, or an error -// if the loop should be aborted. -type ConditionFunc func() (done bool, err error) - -// Backoff holds parameters applied to a Backoff function. -type Backoff struct { - Duration time.Duration // the base duration - Factor float64 // Duration is multiplied by factor each iteration - Jitter float64 // The amount of jitter applied each iteration - Steps int // Exit with error after this many steps -} - -// ExponentialBackoff repeats a condition check with exponential backoff. -// -// It checks the condition up to Steps times, increasing the wait by multiplying -// the previous duration by Factor. -// -// If Jitter is greater than zero, a random amount of each duration is added -// (between duration and duration*(1+jitter)). -// -// If the condition never returns true, ErrWaitTimeout is returned. All other -// errors terminate immediately. -func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error { - duration := backoff.Duration - for i := 0; i < backoff.Steps; i++ { - if i != 0 { - adjusted := duration - if backoff.Jitter > 0.0 { - adjusted = Jitter(duration, backoff.Jitter) - } - time.Sleep(adjusted) - duration = time.Duration(float64(duration) * backoff.Factor) - } - if ok, err := condition(); err != nil || ok { - return err - } - } - return ErrWaitTimeout -} - -// Poll tries a condition func until it returns true, an error, or the timeout -// is reached. -// -// Poll always waits the interval before the run of 'condition'. -// 'condition' will always be invoked at least once. -// -// Some intervals may be missed if the condition takes too long or the time -// window is too short. -// -// If you want to Poll something forever, see PollInfinite. -func Poll(interval, timeout time.Duration, condition ConditionFunc) error { - return pollInternal(poller(interval, timeout), condition) -} - -func pollInternal(wait WaitFunc, condition ConditionFunc) error { - done := make(chan struct{}) - defer close(done) - return WaitFor(wait, condition, done) -} - -// PollImmediate tries a condition func until it returns true, an error, or the timeout -// is reached. -// -// Poll always checks 'condition' before waiting for the interval. 'condition' -// will always be invoked at least once. -// -// Some intervals may be missed if the condition takes too long or the time -// window is too short. -// -// If you want to Poll something forever, see PollInfinite. -func PollImmediate(interval, timeout time.Duration, condition ConditionFunc) error { - return pollImmediateInternal(poller(interval, timeout), condition) -} - -func pollImmediateInternal(wait WaitFunc, condition ConditionFunc) error { - done, err := condition() - if err != nil { - return err - } - if done { - return nil - } - return pollInternal(wait, condition) -} - -// PollInfinite tries a condition func until it returns true or an error -// -// PollInfinite always waits the interval before the run of 'condition'. -// -// Some intervals may be missed if the condition takes too long or the time -// window is too short. -func PollInfinite(interval time.Duration, condition ConditionFunc) error { - done := make(chan struct{}) - defer close(done) - return PollUntil(interval, condition, done) -} - -// PollImmediateInfinite tries a condition func until it returns true or an error -// -// PollImmediateInfinite runs the 'condition' before waiting for the interval. -// -// Some intervals may be missed if the condition takes too long or the time -// window is too short. -func PollImmediateInfinite(interval time.Duration, condition ConditionFunc) error { - done, err := condition() - if err != nil { - return err - } - if done { - return nil - } - return PollInfinite(interval, condition) -} - -// PollUntil tries a condition func until it returns true, an error or stopCh is -// closed. -// -// PollUntil always waits interval before the first run of 'condition'. -// 'condition' will always be invoked at least once. -func PollUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { - return WaitFor(poller(interval, 0), condition, stopCh) -} - -// PollImmediateUntil tries a condition func until it returns true, an error or stopCh is closed. -// -// PollImmediateUntil runs the 'condition' before waiting for the interval. -// 'condition' will always be invoked at least once. -func PollImmediateUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { - done, err := condition() - if err != nil { - return err - } - if done { - return nil - } - select { - case <-stopCh: - return ErrWaitTimeout - default: - return PollUntil(interval, condition, stopCh) - } -} - -// WaitFunc creates a channel that receives an item every time a test -// should be executed and is closed when the last test should be invoked. -type WaitFunc func(done <-chan struct{}) <-chan struct{} - -// WaitFor continually checks 'fn' as driven by 'wait'. -// -// WaitFor gets a channel from 'wait()'', and then invokes 'fn' once for every value -// placed on the channel and once more when the channel is closed. -// -// If 'fn' returns an error the loop ends and that error is returned, and if -// 'fn' returns true the loop ends and nil is returned. -// -// ErrWaitTimeout will be returned if the channel is closed without fn ever -// returning true. -func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { - c := wait(done) - for { - _, open := <-c - ok, err := fn() - if err != nil { - return err - } - if ok { - return nil - } - if !open { - break - } - } - return ErrWaitTimeout -} - -// poller returns a WaitFunc that will send to the channel every interval until -// timeout has elapsed and then closes the channel. -// -// Over very short intervals you may receive no ticks before the channel is -// closed. A timeout of 0 is interpreted as an infinity. -// -// Output ticks are not buffered. If the channel is not ready to receive an -// item, the tick is skipped. -func poller(interval, timeout time.Duration) WaitFunc { - return WaitFunc(func(done <-chan struct{}) <-chan struct{} { - ch := make(chan struct{}) - - go func() { - defer close(ch) - - tick := time.NewTicker(interval) - defer tick.Stop() - - var after <-chan time.Time - if timeout != 0 { - // time.After is more convenient, but it - // potentially leaves timers around much longer - // than necessary if we exit early. - timer := time.NewTimer(timeout) - after = timer.C - defer timer.Stop() - } - - for { - select { - case <-tick.C: - // If the consumer isn't ready for this signal drop it and - // check the other channels. - select { - case ch <- struct{}{}: - default: - } - case <-after: - return - case <-done: - return - } - } - }() - - return ch - }) -} - -// resetOrReuseTimer avoids allocating a new timer if one is already in use. -// Not safe for multiple threads. -func resetOrReuseTimer(t *time.Timer, d time.Duration, sawTimeout bool) *time.Timer { - if t == nil { - return time.NewTimer(d) - } - if !t.Stop() && !sawTimeout { - <-t.C - } - t.Reset(d) - return t -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,8 +26,8 @@ "strings" "unicode" - "github.com/ghodss/yaml" - "github.com/golang/glog" + "k8s.io/klog" + "sigs.k8s.io/yaml" ) // ToJSON converts a single YAML document into a JSON document @@ -217,11 +217,9 @@ if d.decoder == nil { buffer, origData, isJSON := GuessJSONStream(d.r, d.bufferSize) if isJSON { - glog.V(4).Infof("decoding stream as JSON") d.decoder = json.NewDecoder(buffer) d.rawData = origData } else { - glog.V(4).Infof("decoding stream as YAML") d.decoder = NewYAMLToJSONDecoder(buffer) } } @@ -230,7 +228,7 @@ if syntax, ok := err.(*json.SyntaxError); ok { data, readErr := ioutil.ReadAll(jsonDecoder.Buffered()) if readErr != nil { - glog.V(4).Infof("reading stream failed: %v", readErr) + klog.V(4).Infof("reading stream failed: %v", readErr) } js := string(data) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/version/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/version/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/version/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/version/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,6 +14,7 @@ limitations under the License. */ -// Package version supplies the type for version information collected at build time. // +k8s:openapi-gen=true + +// Package version supplies the type for version information collected at build time. package version // import "k8s.io/apimachinery/pkg/version" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,10 +17,12 @@ package watch import ( + "fmt" "io" "sync" - "github.com/golang/glog" + "k8s.io/klog" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/net" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -39,19 +41,28 @@ Close() } +// Reporter hides the details of how an error is turned into a runtime.Object for +// reporting on a watch stream since this package may not import a higher level report. +type Reporter interface { + // AsObject must convert err into a valid runtime.Object for the watch stream. + AsObject(err error) runtime.Object +} + // StreamWatcher turns any stream for which you can write a Decoder interface // into a watch.Interface. type StreamWatcher struct { sync.Mutex - source Decoder - result chan Event - stopped bool + source Decoder + reporter Reporter + result chan Event + stopped bool } // NewStreamWatcher creates a StreamWatcher from the given decoder. -func NewStreamWatcher(d Decoder) *StreamWatcher { +func NewStreamWatcher(d Decoder, r Reporter) *StreamWatcher { sw := &StreamWatcher{ - source: d, + source: d, + reporter: r, // It's easy for a consumer to add buffering via an extra // goroutine/channel, but impossible for them to remove it, // so nonbuffered is better. @@ -100,13 +111,15 @@ case io.EOF: // watch closed normally case io.ErrUnexpectedEOF: - glog.V(1).Infof("Unexpected EOF during watch stream event decoding: %v", err) + klog.V(1).Infof("Unexpected EOF during watch stream event decoding: %v", err) default: - msg := "Unable to decode an event from the watch stream: %v" - if net.IsProbableEOF(err) { - glog.V(5).Infof(msg, err) + if net.IsProbableEOF(err) || net.IsTimeout(err) { + klog.V(5).Infof("Unable to decode an event from the watch stream: %v", err) } else { - glog.Errorf(msg, err) + sw.result <- Event{ + Type: Error, + Object: sw.reporter.AsObject(fmt.Errorf("unable to decode an event from the watch stream: %v", err)), + } } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/until.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/until.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/until.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/until.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package watch - -import ( - "errors" - "time" - - "k8s.io/apimachinery/pkg/util/wait" -) - -// ConditionFunc returns true if the condition has been reached, false if it has not been reached yet, -// or an error if the condition cannot be checked and should terminate. In general, it is better to define -// level driven conditions over edge driven conditions (pod has ready=true, vs pod modified and ready changed -// from false to true). -type ConditionFunc func(event Event) (bool, error) - -// ErrWatchClosed is returned when the watch channel is closed before timeout in Until. -var ErrWatchClosed = errors.New("watch closed before Until timeout") - -// Until reads items from the watch until each provided condition succeeds, and then returns the last watch -// encountered. The first condition that returns an error terminates the watch (and the event is also returned). -// If no event has been received, the returned event will be nil. -// Conditions are satisfied sequentially so as to provide a useful primitive for higher level composition. -// A zero timeout means to wait forever. -func Until(timeout time.Duration, watcher Interface, conditions ...ConditionFunc) (*Event, error) { - ch := watcher.ResultChan() - defer watcher.Stop() - var after <-chan time.Time - if timeout > 0 { - after = time.After(timeout) - } else { - ch := make(chan time.Time) - defer close(ch) - after = ch - } - var lastEvent *Event - for _, condition := range conditions { - // check the next condition against the previous event and short circuit waiting for the next watch - if lastEvent != nil { - done, err := condition(*lastEvent) - if err != nil { - return lastEvent, err - } - if done { - continue - } - } - ConditionSucceeded: - for { - select { - case event, ok := <-ch: - if !ok { - return lastEvent, ErrWatchClosed - } - lastEvent = &event - - // TODO: check for watch expired error and retry watch from latest point? - done, err := condition(event) - if err != nil { - return lastEvent, err - } - if done { - break ConditionSucceeded - } - - case <-after: - return lastEvent, wait.ErrWaitTimeout - } - } - } - return lastEvent, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/watch.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/watch.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/watch.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/watch.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,7 @@ "fmt" "sync" - "github.com/golang/glog" + "k8s.io/klog" "k8s.io/apimachinery/pkg/runtime" ) @@ -44,6 +44,7 @@ Added EventType = "ADDED" Modified EventType = "MODIFIED" Deleted EventType = "DELETED" + Bookmark EventType = "BOOKMARK" Error EventType = "ERROR" DefaultChanSize int32 = 100 @@ -57,6 +58,10 @@ // Object is: // * If Type is Added or Modified: the new state of the object. // * If Type is Deleted: the state of the object immediately before deletion. + // * If Type is Bookmark: the object (instance of a type being watched) where + // only ResourceVersion field is set. On successful restart of watch from a + // bookmark resourceVersion, client is guaranteed to not get repeat event + // nor miss any events. // * If Type is Error: *api.Status is recommended; other types may make sense // depending on context. Object runtime.Object @@ -106,7 +111,7 @@ f.Lock() defer f.Unlock() if !f.Stopped { - glog.V(4).Infof("Stopping fake watcher.") + klog.V(4).Infof("Stopping fake watcher.") close(f.result) f.Stopped = true } @@ -173,7 +178,7 @@ f.Lock() defer f.Unlock() if !f.Stopped { - glog.V(4).Infof("Stopping fake watcher.") + klog.V(4).Infof("Stopping fake watcher.") close(f.result) f.Stopped = true } @@ -268,3 +273,50 @@ } } } + +// ProxyWatcher lets you wrap your channel in watch Interface. Threadsafe. +type ProxyWatcher struct { + result chan Event + stopCh chan struct{} + + mutex sync.Mutex + stopped bool +} + +var _ Interface = &ProxyWatcher{} + +// NewProxyWatcher creates new ProxyWatcher by wrapping a channel +func NewProxyWatcher(ch chan Event) *ProxyWatcher { + return &ProxyWatcher{ + result: ch, + stopCh: make(chan struct{}), + stopped: false, + } +} + +// Stop implements Interface +func (pw *ProxyWatcher) Stop() { + pw.mutex.Lock() + defer pw.mutex.Unlock() + if !pw.stopped { + pw.stopped = true + close(pw.stopCh) + } +} + +// Stopping returns true if Stop() has been called +func (pw *ProxyWatcher) Stopping() bool { + pw.mutex.Lock() + defer pw.mutex.Unlock() + return pw.stopped +} + +// ResultChan implements Interface +func (pw *ProxyWatcher) ResultChan() <-chan Event { + return pw.result +} + +// StopChan returns stop channel +func (pw *ProxyWatcher) StopChan() <-chan struct{} { + return pw.stopCh +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -23,9 +23,7 @@ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Event) DeepCopyInto(out *Event) { *out = *in - if in.Object == nil { - out.Object = nil - } else { + if in.Object != nil { out.Object = in.Object.DeepCopyObject() } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/cached_discovery.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/cached_discovery.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/cached_discovery.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/cached_discovery.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,282 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package discovery - -import ( - "errors" - "io/ioutil" - "net/http" - "os" - "path/filepath" - "sync" - "time" - - "github.com/golang/glog" - "github.com/googleapis/gnostic/OpenAPIv2" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/version" - "k8s.io/client-go/kubernetes/scheme" - restclient "k8s.io/client-go/rest" -) - -// CachedDiscoveryClient implements the functions that discovery server-supported API groups, -// versions and resources. -type CachedDiscoveryClient struct { - delegate DiscoveryInterface - - // cacheDirectory is the directory where discovery docs are held. It must be unique per host:port combination to work well. - cacheDirectory string - - // ttl is how long the cache should be considered valid - ttl time.Duration - - // mutex protects the variables below - mutex sync.Mutex - - // ourFiles are all filenames of cache files created by this process - ourFiles map[string]struct{} - // invalidated is true if all cache files should be ignored that are not ours (e.g. after Invalidate() was called) - invalidated bool - // fresh is true if all used cache files were ours - fresh bool -} - -var _ CachedDiscoveryInterface = &CachedDiscoveryClient{} - -// ServerResourcesForGroupVersion returns the supported resources for a group and version. -func (d *CachedDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { - filename := filepath.Join(d.cacheDirectory, groupVersion, "serverresources.json") - cachedBytes, err := d.getCachedFile(filename) - // don't fail on errors, we either don't have a file or won't be able to run the cached check. Either way we can fallback. - if err == nil { - cachedResources := &metav1.APIResourceList{} - if err := runtime.DecodeInto(scheme.Codecs.UniversalDecoder(), cachedBytes, cachedResources); err == nil { - glog.V(10).Infof("returning cached discovery info from %v", filename) - return cachedResources, nil - } - } - - liveResources, err := d.delegate.ServerResourcesForGroupVersion(groupVersion) - if err != nil { - glog.V(3).Infof("skipped caching discovery info due to %v", err) - return liveResources, err - } - if liveResources == nil || len(liveResources.APIResources) == 0 { - glog.V(3).Infof("skipped caching discovery info, no resources found") - return liveResources, err - } - - if err := d.writeCachedFile(filename, liveResources); err != nil { - glog.V(3).Infof("failed to write cache to %v due to %v", filename, err) - } - - return liveResources, nil -} - -// ServerResources returns the supported resources for all groups and versions. -func (d *CachedDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) { - return ServerResources(d) -} - -func (d *CachedDiscoveryClient) ServerGroups() (*metav1.APIGroupList, error) { - filename := filepath.Join(d.cacheDirectory, "servergroups.json") - cachedBytes, err := d.getCachedFile(filename) - // don't fail on errors, we either don't have a file or won't be able to run the cached check. Either way we can fallback. - if err == nil { - cachedGroups := &metav1.APIGroupList{} - if err := runtime.DecodeInto(scheme.Codecs.UniversalDecoder(), cachedBytes, cachedGroups); err == nil { - glog.V(10).Infof("returning cached discovery info from %v", filename) - return cachedGroups, nil - } - } - - liveGroups, err := d.delegate.ServerGroups() - if err != nil { - glog.V(3).Infof("skipped caching discovery info due to %v", err) - return liveGroups, err - } - if liveGroups == nil || len(liveGroups.Groups) == 0 { - glog.V(3).Infof("skipped caching discovery info, no groups found") - return liveGroups, err - } - - if err := d.writeCachedFile(filename, liveGroups); err != nil { - glog.V(3).Infof("failed to write cache to %v due to %v", filename, err) - } - - return liveGroups, nil -} - -func (d *CachedDiscoveryClient) getCachedFile(filename string) ([]byte, error) { - // after invalidation ignore cache files not created by this process - d.mutex.Lock() - _, ourFile := d.ourFiles[filename] - if d.invalidated && !ourFile { - d.mutex.Unlock() - return nil, errors.New("cache invalidated") - } - d.mutex.Unlock() - - file, err := os.Open(filename) - if err != nil { - return nil, err - } - defer file.Close() - - fileInfo, err := file.Stat() - if err != nil { - return nil, err - } - - if time.Now().After(fileInfo.ModTime().Add(d.ttl)) { - return nil, errors.New("cache expired") - } - - // the cache is present and its valid. Try to read and use it. - cachedBytes, err := ioutil.ReadAll(file) - if err != nil { - return nil, err - } - - d.mutex.Lock() - defer d.mutex.Unlock() - d.fresh = d.fresh && ourFile - - return cachedBytes, nil -} - -func (d *CachedDiscoveryClient) writeCachedFile(filename string, obj runtime.Object) error { - if err := os.MkdirAll(filepath.Dir(filename), 0755); err != nil { - return err - } - - bytes, err := runtime.Encode(scheme.Codecs.LegacyCodec(), obj) - if err != nil { - return err - } - - f, err := ioutil.TempFile(filepath.Dir(filename), filepath.Base(filename)+".") - if err != nil { - return err - } - defer os.Remove(f.Name()) - _, err = f.Write(bytes) - if err != nil { - return err - } - - err = os.Chmod(f.Name(), 0755) - if err != nil { - return err - } - - name := f.Name() - err = f.Close() - if err != nil { - return err - } - - // atomic rename - d.mutex.Lock() - defer d.mutex.Unlock() - err = os.Rename(name, filename) - if err == nil { - d.ourFiles[filename] = struct{}{} - } - return err -} - -func (d *CachedDiscoveryClient) RESTClient() restclient.Interface { - return d.delegate.RESTClient() -} - -func (d *CachedDiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) { - return ServerPreferredResources(d) -} - -func (d *CachedDiscoveryClient) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) { - return ServerPreferredNamespacedResources(d) -} - -func (d *CachedDiscoveryClient) ServerVersion() (*version.Info, error) { - return d.delegate.ServerVersion() -} - -func (d *CachedDiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { - return d.delegate.OpenAPISchema() -} - -func (d *CachedDiscoveryClient) Fresh() bool { - d.mutex.Lock() - defer d.mutex.Unlock() - - return d.fresh -} - -func (d *CachedDiscoveryClient) Invalidate() { - d.mutex.Lock() - defer d.mutex.Unlock() - - d.ourFiles = map[string]struct{}{} - d.fresh = true - d.invalidated = true -} - -// NewCachedDiscoveryClientForConfig creates a new DiscoveryClient for the given config, and wraps -// the created client in a CachedDiscoveryClient. The provided configuration is updated with a -// custom transport that understands cache responses. -// We receive two distinct cache directories for now, in order to preserve old behavior -// which makes use of the --cache-dir flag value for storing cache data from the CacheRoundTripper, -// and makes use of the hardcoded destination (~/.kube/cache/discovery/...) for storing -// CachedDiscoveryClient cache data. If httpCacheDir is empty, the restconfig's transport will not -// be updated with a roundtripper that understands cache responses. -// If discoveryCacheDir is empty, cached server resource data will be looked up in the current directory. -// TODO(juanvallejo): the value of "--cache-dir" should be honored. Consolidate discoveryCacheDir with httpCacheDir -// so that server resources and http-cache data are stored in the same location, provided via config flags. -func NewCachedDiscoveryClientForConfig(config *restclient.Config, discoveryCacheDir, httpCacheDir string, ttl time.Duration) (*CachedDiscoveryClient, error) { - if len(httpCacheDir) > 0 { - // update the given restconfig with a custom roundtripper that - // understands how to handle cache responses. - wt := config.WrapTransport - config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { - if wt != nil { - rt = wt(rt) - } - return newCacheRoundTripper(httpCacheDir, rt) - } - } - - discoveryClient, err := NewDiscoveryClientForConfig(config) - if err != nil { - return nil, err - } - - return newCachedDiscoveryClient(discoveryClient, discoveryCacheDir, ttl), nil -} - -// NewCachedDiscoveryClient creates a new DiscoveryClient. cacheDirectory is the directory where discovery docs are held. It must be unique per host:port combination to work well. -func newCachedDiscoveryClient(delegate DiscoveryInterface, cacheDirectory string, ttl time.Duration) *CachedDiscoveryClient { - return &CachedDiscoveryClient{ - delegate: delegate, - cacheDirectory: cacheDirectory, - ttl: ttl, - ourFiles: map[string]struct{}{}, - fresh: true, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/discovery_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/discovery_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/discovery_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/discovery_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,7 +26,7 @@ "time" "github.com/golang/protobuf/proto" - "github.com/googleapis/gnostic/OpenAPIv2" + openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -60,6 +60,9 @@ } // CachedDiscoveryInterface is a DiscoveryInterface with cache invalidation and freshness. +// Note that If the ServerResourcesForGroupVersion method returns a cache miss +// error, the user needs to explicitly call Invalidate to clear the cache, +// otherwise the same cache miss error will be returned next time. type CachedDiscoveryInterface interface { DiscoveryInterface // Fresh is supposed to tell the caller whether or not to retry if the cache @@ -68,7 +71,8 @@ // TODO: this needs to be revisited, this interface can't be locked properly // and doesn't make a lot of sense. Fresh() bool - // Invalidate enforces that no cached data is used in the future that is older than the current time. + // Invalidate enforces that no cached data that is older than the current time + // is used. Invalidate() } @@ -84,12 +88,28 @@ // ServerResourcesForGroupVersion returns the supported resources for a group and version. ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) // ServerResources returns the supported resources for all groups and versions. + // + // The returned resource list might be non-nil with partial results even in the case of + // non-nil error. + // + // Deprecated: use ServerGroupsAndResources instead. ServerResources() ([]*metav1.APIResourceList, error) + // ServerResources returns the supported groups and resources for all groups and versions. + // + // The returned group and resource lists might be non-nil with partial results even in the + // case of non-nil error. + ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) // ServerPreferredResources returns the supported resources with the version preferred by the // server. + // + // The returned group and resource lists might be non-nil with partial results even in the + // case of non-nil error. ServerPreferredResources() ([]*metav1.APIResourceList, error) // ServerPreferredNamespacedResources returns the supported namespaced resources with the // version preferred by the server. + // + // The returned resource list might be non-nil with partial results even in the case of + // non-nil error. ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) } @@ -187,14 +207,18 @@ return resources, nil } -// serverResources returns the supported resources for all groups and versions. -func (d *DiscoveryClient) serverResources() ([]*metav1.APIResourceList, error) { - return ServerResources(d) -} - // ServerResources returns the supported resources for all groups and versions. +// Deprecated: use ServerGroupsAndResources instead. func (d *DiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) { - return withRetries(defaultRetries, d.serverResources) + _, rs, err := d.ServerGroupsAndResources() + return rs, err +} + +// ServerGroupsAndResources returns the supported resources for all groups and versions. +func (d *DiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + return withRetries(defaultRetries, func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + return ServerGroupsAndResources(d) + }) } // ErrGroupDiscoveryFailed is returned if one or more API groups fail to load. @@ -220,23 +244,28 @@ return err != nil && ok } -// serverPreferredResources returns the supported resources with the version preferred by the server. -func (d *DiscoveryClient) serverPreferredResources() ([]*metav1.APIResourceList, error) { - return ServerPreferredResources(d) -} - // ServerResources uses the provided discovery interface to look up supported resources for all groups and versions. +// Deprecated: use ServerGroupsAndResources instead. func ServerResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) { - apiGroups, err := d.ServerGroups() - if err != nil { - return nil, err + _, rs, err := ServerGroupsAndResources(d) + return rs, err +} + +func ServerGroupsAndResources(d DiscoveryInterface) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + sgs, err := d.ServerGroups() + if sgs == nil { + return nil, nil, err + } + resultGroups := []*metav1.APIGroup{} + for i := range sgs.Groups { + resultGroups = append(resultGroups, &sgs.Groups[i]) } - groupVersionResources, failedGroups := fetchGroupVersionResources(d, apiGroups) + groupVersionResources, failedGroups := fetchGroupVersionResources(d, sgs) // order results by group/version discovery order result := []*metav1.APIResourceList{} - for _, apiGroup := range apiGroups.Groups { + for _, apiGroup := range sgs.Groups { for _, version := range apiGroup.Versions { gv := schema.GroupVersion{Group: apiGroup.Name, Version: version.Version} if resources, ok := groupVersionResources[gv]; ok { @@ -246,10 +275,10 @@ } if len(failedGroups) == 0 { - return result, nil + return resultGroups, result, nil } - return result, &ErrGroupDiscoveryFailed{Groups: failedGroups} + return resultGroups, result, &ErrGroupDiscoveryFailed{Groups: failedGroups} } // ServerPreferredResources uses the provided discovery interface to look up preferred resources @@ -263,8 +292,8 @@ result := []*metav1.APIResourceList{} grVersions := map[schema.GroupResource]string{} // selected version of a GroupResource - grApiResources := map[schema.GroupResource]*metav1.APIResource{} // selected APIResource for a GroupResource - gvApiResourceLists := map[schema.GroupVersion]*metav1.APIResourceList{} // blueprint for a APIResourceList for later grouping + grAPIResources := map[schema.GroupResource]*metav1.APIResource{} // selected APIResource for a GroupResource + gvAPIResourceLists := map[schema.GroupVersion]*metav1.APIResourceList{} // blueprint for a APIResourceList for later grouping for _, apiGroup := range serverGroupList.Groups { for _, version := range apiGroup.Versions { @@ -276,11 +305,11 @@ } // create empty list which is filled later in another loop - emptyApiResourceList := metav1.APIResourceList{ + emptyAPIResourceList := metav1.APIResourceList{ GroupVersion: version.GroupVersion, } - gvApiResourceLists[groupVersion] = &emptyApiResourceList - result = append(result, &emptyApiResourceList) + gvAPIResourceLists[groupVersion] = &emptyAPIResourceList + result = append(result, &emptyAPIResourceList) for i := range apiResourceList.APIResources { apiResource := &apiResourceList.APIResources[i] @@ -288,21 +317,21 @@ continue } gv := schema.GroupResource{Group: apiGroup.Name, Resource: apiResource.Name} - if _, ok := grApiResources[gv]; ok && version.Version != apiGroup.PreferredVersion.Version { + if _, ok := grAPIResources[gv]; ok && version.Version != apiGroup.PreferredVersion.Version { // only override with preferred version continue } grVersions[gv] = version.Version - grApiResources[gv] = apiResource + grAPIResources[gv] = apiResource } } } // group selected APIResources according to GroupVersion into APIResourceLists - for groupResource, apiResource := range grApiResources { + for groupResource, apiResource := range grAPIResources { version := grVersions[groupResource] groupVersion := schema.GroupVersion{Group: groupResource.Group, Version: version} - apiResourceList := gvApiResourceLists[groupVersion] + apiResourceList := gvAPIResourceLists[groupVersion] apiResourceList.APIResources = append(apiResourceList.APIResources, *apiResource) } @@ -313,7 +342,7 @@ return result, &ErrGroupDiscoveryFailed{Groups: failedGroups} } -// fetchServerResourcesForGroupVersions uses the discovery client to fetch the resources for the specified groups in parallel +// fetchServerResourcesForGroupVersions uses the discovery client to fetch the resources for the specified groups in parallel. func fetchGroupVersionResources(d DiscoveryInterface, apiGroups *metav1.APIGroupList) (map[schema.GroupVersion]*metav1.APIResourceList, map[schema.GroupVersion]error) { groupVersionResources := make(map[schema.GroupVersion]*metav1.APIResourceList) failedGroups := make(map[schema.GroupVersion]error) @@ -337,7 +366,9 @@ if err != nil { // TODO: maybe restrict this to NotFound errors failedGroups[groupVersion] = err - } else { + } + if apiResourceList != nil { + // even in case of error, some fallback might have been returned groupVersionResources[groupVersion] = apiResourceList } }() @@ -351,7 +382,11 @@ // ServerPreferredResources returns the supported resources with the version preferred by the // server. func (d *DiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) { - return withRetries(defaultRetries, d.serverPreferredResources) + _, rs, err := withRetries(defaultRetries, func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { + rs, err := ServerPreferredResources(d) + return nil, rs, err + }) + return rs, err } // ServerPreferredNamespacedResources returns the supported namespaced resources with the @@ -377,7 +412,7 @@ var info version.Info err = json.Unmarshal(body, &info) if err != nil { - return nil, fmt.Errorf("got '%s': %v", string(body), err) + return nil, fmt.Errorf("unable to parse the server version: %v", err) } return &info, nil } @@ -388,7 +423,7 @@ if err != nil { if errors.IsForbidden(err) || errors.IsNotFound(err) || errors.IsNotAcceptable(err) { // single endpoint not found/registered in old server, try to fetch old endpoint - // TODO(roycaihw): remove this in 1.11 + // TODO: remove this when kubectl/client-go don't work with 1.9 server data, err = d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw() if err != nil { return nil, err @@ -406,19 +441,20 @@ } // withRetries retries the given recovery function in case the groups supported by the server change after ServerGroup() returns. -func withRetries(maxRetries int, f func() ([]*metav1.APIResourceList, error)) ([]*metav1.APIResourceList, error) { +func withRetries(maxRetries int, f func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error)) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) { var result []*metav1.APIResourceList + var resultGroups []*metav1.APIGroup var err error for i := 0; i < maxRetries; i++ { - result, err = f() + resultGroups, result, err = f() if err == nil { - return result, nil + return resultGroups, result, nil } if _, ok := err.(*ErrGroupDiscoveryFailed); !ok { - return nil, err + return nil, nil, err } } - return result, err + return resultGroups, result, err } func setDiscoveryDefaults(config *restclient.Config) error { @@ -464,9 +500,9 @@ // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *DiscoveryClient) RESTClient() restclient.Interface { - if c == nil { +func (d *DiscoveryClient) RESTClient() restclient.Interface { + if d == nil { return nil } - return c.restClient + return d.restClient } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package discovery provides ways to discover server-supported +// API groups, versions and resources. +package discovery // import "k8s.io/client-go/discovery" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/helper.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/helper.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/helper.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/helper.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,11 +31,11 @@ func MatchesServerVersion(clientVersion apimachineryversion.Info, client DiscoveryInterface) error { sVer, err := client.ServerVersion() if err != nil { - return fmt.Errorf("couldn't read version from server: %v\n", err) + return fmt.Errorf("couldn't read version from server: %v", err) } // GitVersion includes GitCommit and GitTreeState, but best to be safe? if clientVersion.GitVersion != sVer.GitVersion || clientVersion.GitCommit != sVer.GitCommit || clientVersion.GitTreeState != sVer.GitTreeState { - return fmt.Errorf("server version (%#v) differs from client version (%#v)!\n", sVer, clientVersion) + return fmt.Errorf("server version (%#v) differs from client version (%#v)", sVer, clientVersion) } return nil @@ -101,12 +101,15 @@ return result } +// ResourcePredicate has a method to check if a resource matches a given condition. type ResourcePredicate interface { Match(groupVersion string, r *metav1.APIResource) bool } +// ResourcePredicateFunc returns true if it matches a resource based on a custom condition. type ResourcePredicateFunc func(groupVersion string, r *metav1.APIResource) bool +// Match is a wrapper around ResourcePredicateFunc. func (fn ResourcePredicateFunc) Match(groupVersion string, r *metav1.APIResource) bool { return fn(groupVersion, r) } @@ -116,6 +119,7 @@ Verbs []string } +// Match checks if a resource contains all the given verbs. func (p SupportsAllVerbs) Match(groupVersion string, r *metav1.APIResource) bool { return sets.NewString([]string(r.Verbs)...).HasAll(p.Verbs...) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/round_tripper.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/round_tripper.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/round_tripper.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/round_tripper.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package transport provides a round tripper capable of caching HTTP responses. -package discovery - -import ( - "net/http" - "path/filepath" - - "github.com/gregjones/httpcache" - "github.com/gregjones/httpcache/diskcache" - "github.com/peterbourgon/diskv" -) - -type cacheRoundTripper struct { - rt *httpcache.Transport -} - -// newCacheRoundTripper creates a roundtripper that reads the ETag on -// response headers and send the If-None-Match header on subsequent -// corresponding requests. -func newCacheRoundTripper(cacheDir string, rt http.RoundTripper) http.RoundTripper { - d := diskv.New(diskv.Options{ - BasePath: cacheDir, - TempDir: filepath.Join(cacheDir, ".diskv-temp"), - }) - t := httpcache.NewTransport(diskcache.NewWithDiskv(d)) - t.Transport = rt - - return &cacheRoundTripper{rt: t} -} - -func (rt *cacheRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { - return rt.rt.RoundTrip(req) -} - -func (rt *cacheRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt.Transport } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/unstructured.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/unstructured.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/discovery/unstructured.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/discovery/unstructured.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package discovery - -import ( - "reflect" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// UnstructuredObjectTyper provides a runtime.ObjectTyper implementation for -// runtime.Unstructured object based on discovery information. -type UnstructuredObjectTyper struct { - typers []runtime.ObjectTyper -} - -// NewUnstructuredObjectTyper returns a runtime.ObjectTyper for -// unstructured objects based on discovery information. It accepts a list of fallback typers -// for handling objects that are not runtime.Unstructured. It does not delegate the Recognizes -// check, only ObjectKinds. -// TODO this only works for the apiextensions server and doesn't recognize any types. Move to point of use. -func NewUnstructuredObjectTyper(typers ...runtime.ObjectTyper) *UnstructuredObjectTyper { - dot := &UnstructuredObjectTyper{ - typers: typers, - } - return dot -} - -// ObjectKinds returns a slice of one element with the group,version,kind of the -// provided object, or an error if the object is not runtime.Unstructured or -// has no group,version,kind information. unversionedType will always be false -// because runtime.Unstructured object should always have group,version,kind -// information set. -func (d *UnstructuredObjectTyper) ObjectKinds(obj runtime.Object) (gvks []schema.GroupVersionKind, unversionedType bool, err error) { - if _, ok := obj.(runtime.Unstructured); ok { - gvk := obj.GetObjectKind().GroupVersionKind() - if len(gvk.Kind) == 0 { - return nil, false, runtime.NewMissingKindErr("object has no kind field ") - } - if len(gvk.Version) == 0 { - return nil, false, runtime.NewMissingVersionErr("object has no apiVersion field") - } - return []schema.GroupVersionKind{gvk}, false, nil - } - var lastErr error - for _, typer := range d.typers { - gvks, unversioned, err := typer.ObjectKinds(obj) - if err != nil { - lastErr = err - continue - } - return gvks, unversioned, nil - } - if lastErr == nil { - lastErr = runtime.NewNotRegisteredErrForType(reflect.TypeOf(obj)) - } - return nil, false, lastErr -} - -// Recognizes returns true if the provided group,version,kind was in the -// discovery information. -func (d *UnstructuredObjectTyper) Recognizes(gvk schema.GroupVersionKind) bool { - return false -} - -var _ runtime.ObjectTyper = &UnstructuredObjectTyper{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/clientset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/clientset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/clientset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/clientset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,30 +19,41 @@ package kubernetes import ( + "fmt" + discovery "k8s.io/client-go/discovery" - admissionregistrationv1alpha1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1" + admissionregistrationv1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1" admissionregistrationv1beta1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1" appsv1 "k8s.io/client-go/kubernetes/typed/apps/v1" appsv1beta1 "k8s.io/client-go/kubernetes/typed/apps/v1beta1" appsv1beta2 "k8s.io/client-go/kubernetes/typed/apps/v1beta2" + auditregistrationv1alpha1 "k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1" authenticationv1 "k8s.io/client-go/kubernetes/typed/authentication/v1" authenticationv1beta1 "k8s.io/client-go/kubernetes/typed/authentication/v1beta1" authorizationv1 "k8s.io/client-go/kubernetes/typed/authorization/v1" authorizationv1beta1 "k8s.io/client-go/kubernetes/typed/authorization/v1beta1" autoscalingv1 "k8s.io/client-go/kubernetes/typed/autoscaling/v1" autoscalingv2beta1 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1" + autoscalingv2beta2 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2" batchv1 "k8s.io/client-go/kubernetes/typed/batch/v1" batchv1beta1 "k8s.io/client-go/kubernetes/typed/batch/v1beta1" batchv2alpha1 "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" certificatesv1beta1 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" + coordinationv1 "k8s.io/client-go/kubernetes/typed/coordination/v1" + coordinationv1beta1 "k8s.io/client-go/kubernetes/typed/coordination/v1beta1" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" + discoveryv1alpha1 "k8s.io/client-go/kubernetes/typed/discovery/v1alpha1" eventsv1beta1 "k8s.io/client-go/kubernetes/typed/events/v1beta1" extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" networkingv1 "k8s.io/client-go/kubernetes/typed/networking/v1" + networkingv1beta1 "k8s.io/client-go/kubernetes/typed/networking/v1beta1" + nodev1alpha1 "k8s.io/client-go/kubernetes/typed/node/v1alpha1" + nodev1beta1 "k8s.io/client-go/kubernetes/typed/node/v1beta1" policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" rbacv1 "k8s.io/client-go/kubernetes/typed/rbac/v1" rbacv1alpha1 "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1" rbacv1beta1 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1" + schedulingv1 "k8s.io/client-go/kubernetes/typed/scheduling/v1" schedulingv1alpha1 "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1" schedulingv1beta1 "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1" settingsv1alpha1 "k8s.io/client-go/kubernetes/typed/settings/v1alpha1" @@ -55,66 +66,43 @@ type Interface interface { Discovery() discovery.DiscoveryInterface - AdmissionregistrationV1alpha1() admissionregistrationv1alpha1.AdmissionregistrationV1alpha1Interface + AdmissionregistrationV1() admissionregistrationv1.AdmissionregistrationV1Interface AdmissionregistrationV1beta1() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Admissionregistration() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface + AppsV1() appsv1.AppsV1Interface AppsV1beta1() appsv1beta1.AppsV1beta1Interface AppsV1beta2() appsv1beta2.AppsV1beta2Interface - AppsV1() appsv1.AppsV1Interface - // Deprecated: please explicitly pick a version if possible. - Apps() appsv1.AppsV1Interface + AuditregistrationV1alpha1() auditregistrationv1alpha1.AuditregistrationV1alpha1Interface AuthenticationV1() authenticationv1.AuthenticationV1Interface - // Deprecated: please explicitly pick a version if possible. - Authentication() authenticationv1.AuthenticationV1Interface AuthenticationV1beta1() authenticationv1beta1.AuthenticationV1beta1Interface AuthorizationV1() authorizationv1.AuthorizationV1Interface - // Deprecated: please explicitly pick a version if possible. - Authorization() authorizationv1.AuthorizationV1Interface AuthorizationV1beta1() authorizationv1beta1.AuthorizationV1beta1Interface AutoscalingV1() autoscalingv1.AutoscalingV1Interface - // Deprecated: please explicitly pick a version if possible. - Autoscaling() autoscalingv1.AutoscalingV1Interface AutoscalingV2beta1() autoscalingv2beta1.AutoscalingV2beta1Interface + AutoscalingV2beta2() autoscalingv2beta2.AutoscalingV2beta2Interface BatchV1() batchv1.BatchV1Interface - // Deprecated: please explicitly pick a version if possible. - Batch() batchv1.BatchV1Interface BatchV1beta1() batchv1beta1.BatchV1beta1Interface BatchV2alpha1() batchv2alpha1.BatchV2alpha1Interface CertificatesV1beta1() certificatesv1beta1.CertificatesV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Certificates() certificatesv1beta1.CertificatesV1beta1Interface + CoordinationV1beta1() coordinationv1beta1.CoordinationV1beta1Interface + CoordinationV1() coordinationv1.CoordinationV1Interface CoreV1() corev1.CoreV1Interface - // Deprecated: please explicitly pick a version if possible. - Core() corev1.CoreV1Interface + DiscoveryV1alpha1() discoveryv1alpha1.DiscoveryV1alpha1Interface EventsV1beta1() eventsv1beta1.EventsV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Events() eventsv1beta1.EventsV1beta1Interface ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Extensions() extensionsv1beta1.ExtensionsV1beta1Interface NetworkingV1() networkingv1.NetworkingV1Interface - // Deprecated: please explicitly pick a version if possible. - Networking() networkingv1.NetworkingV1Interface + NetworkingV1beta1() networkingv1beta1.NetworkingV1beta1Interface + NodeV1alpha1() nodev1alpha1.NodeV1alpha1Interface + NodeV1beta1() nodev1beta1.NodeV1beta1Interface PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Policy() policyv1beta1.PolicyV1beta1Interface RbacV1() rbacv1.RbacV1Interface - // Deprecated: please explicitly pick a version if possible. - Rbac() rbacv1.RbacV1Interface RbacV1beta1() rbacv1beta1.RbacV1beta1Interface RbacV1alpha1() rbacv1alpha1.RbacV1alpha1Interface SchedulingV1alpha1() schedulingv1alpha1.SchedulingV1alpha1Interface SchedulingV1beta1() schedulingv1beta1.SchedulingV1beta1Interface - // Deprecated: please explicitly pick a version if possible. - Scheduling() schedulingv1beta1.SchedulingV1beta1Interface + SchedulingV1() schedulingv1.SchedulingV1Interface SettingsV1alpha1() settingsv1alpha1.SettingsV1alpha1Interface - // Deprecated: please explicitly pick a version if possible. - Settings() settingsv1alpha1.SettingsV1alpha1Interface StorageV1beta1() storagev1beta1.StorageV1beta1Interface StorageV1() storagev1.StorageV1Interface - // Deprecated: please explicitly pick a version if possible. - Storage() storagev1.StorageV1Interface StorageV1alpha1() storagev1alpha1.StorageV1alpha1Interface } @@ -122,40 +110,49 @@ // version included in a Clientset. type Clientset struct { *discovery.DiscoveryClient - admissionregistrationV1alpha1 *admissionregistrationv1alpha1.AdmissionregistrationV1alpha1Client - admissionregistrationV1beta1 *admissionregistrationv1beta1.AdmissionregistrationV1beta1Client - appsV1beta1 *appsv1beta1.AppsV1beta1Client - appsV1beta2 *appsv1beta2.AppsV1beta2Client - appsV1 *appsv1.AppsV1Client - authenticationV1 *authenticationv1.AuthenticationV1Client - authenticationV1beta1 *authenticationv1beta1.AuthenticationV1beta1Client - authorizationV1 *authorizationv1.AuthorizationV1Client - authorizationV1beta1 *authorizationv1beta1.AuthorizationV1beta1Client - autoscalingV1 *autoscalingv1.AutoscalingV1Client - autoscalingV2beta1 *autoscalingv2beta1.AutoscalingV2beta1Client - batchV1 *batchv1.BatchV1Client - batchV1beta1 *batchv1beta1.BatchV1beta1Client - batchV2alpha1 *batchv2alpha1.BatchV2alpha1Client - certificatesV1beta1 *certificatesv1beta1.CertificatesV1beta1Client - coreV1 *corev1.CoreV1Client - eventsV1beta1 *eventsv1beta1.EventsV1beta1Client - extensionsV1beta1 *extensionsv1beta1.ExtensionsV1beta1Client - networkingV1 *networkingv1.NetworkingV1Client - policyV1beta1 *policyv1beta1.PolicyV1beta1Client - rbacV1 *rbacv1.RbacV1Client - rbacV1beta1 *rbacv1beta1.RbacV1beta1Client - rbacV1alpha1 *rbacv1alpha1.RbacV1alpha1Client - schedulingV1alpha1 *schedulingv1alpha1.SchedulingV1alpha1Client - schedulingV1beta1 *schedulingv1beta1.SchedulingV1beta1Client - settingsV1alpha1 *settingsv1alpha1.SettingsV1alpha1Client - storageV1beta1 *storagev1beta1.StorageV1beta1Client - storageV1 *storagev1.StorageV1Client - storageV1alpha1 *storagev1alpha1.StorageV1alpha1Client -} - -// AdmissionregistrationV1alpha1 retrieves the AdmissionregistrationV1alpha1Client -func (c *Clientset) AdmissionregistrationV1alpha1() admissionregistrationv1alpha1.AdmissionregistrationV1alpha1Interface { - return c.admissionregistrationV1alpha1 + admissionregistrationV1 *admissionregistrationv1.AdmissionregistrationV1Client + admissionregistrationV1beta1 *admissionregistrationv1beta1.AdmissionregistrationV1beta1Client + appsV1 *appsv1.AppsV1Client + appsV1beta1 *appsv1beta1.AppsV1beta1Client + appsV1beta2 *appsv1beta2.AppsV1beta2Client + auditregistrationV1alpha1 *auditregistrationv1alpha1.AuditregistrationV1alpha1Client + authenticationV1 *authenticationv1.AuthenticationV1Client + authenticationV1beta1 *authenticationv1beta1.AuthenticationV1beta1Client + authorizationV1 *authorizationv1.AuthorizationV1Client + authorizationV1beta1 *authorizationv1beta1.AuthorizationV1beta1Client + autoscalingV1 *autoscalingv1.AutoscalingV1Client + autoscalingV2beta1 *autoscalingv2beta1.AutoscalingV2beta1Client + autoscalingV2beta2 *autoscalingv2beta2.AutoscalingV2beta2Client + batchV1 *batchv1.BatchV1Client + batchV1beta1 *batchv1beta1.BatchV1beta1Client + batchV2alpha1 *batchv2alpha1.BatchV2alpha1Client + certificatesV1beta1 *certificatesv1beta1.CertificatesV1beta1Client + coordinationV1beta1 *coordinationv1beta1.CoordinationV1beta1Client + coordinationV1 *coordinationv1.CoordinationV1Client + coreV1 *corev1.CoreV1Client + discoveryV1alpha1 *discoveryv1alpha1.DiscoveryV1alpha1Client + eventsV1beta1 *eventsv1beta1.EventsV1beta1Client + extensionsV1beta1 *extensionsv1beta1.ExtensionsV1beta1Client + networkingV1 *networkingv1.NetworkingV1Client + networkingV1beta1 *networkingv1beta1.NetworkingV1beta1Client + nodeV1alpha1 *nodev1alpha1.NodeV1alpha1Client + nodeV1beta1 *nodev1beta1.NodeV1beta1Client + policyV1beta1 *policyv1beta1.PolicyV1beta1Client + rbacV1 *rbacv1.RbacV1Client + rbacV1beta1 *rbacv1beta1.RbacV1beta1Client + rbacV1alpha1 *rbacv1alpha1.RbacV1alpha1Client + schedulingV1alpha1 *schedulingv1alpha1.SchedulingV1alpha1Client + schedulingV1beta1 *schedulingv1beta1.SchedulingV1beta1Client + schedulingV1 *schedulingv1.SchedulingV1Client + settingsV1alpha1 *settingsv1alpha1.SettingsV1alpha1Client + storageV1beta1 *storagev1beta1.StorageV1beta1Client + storageV1 *storagev1.StorageV1Client + storageV1alpha1 *storagev1alpha1.StorageV1alpha1Client +} + +// AdmissionregistrationV1 retrieves the AdmissionregistrationV1Client +func (c *Clientset) AdmissionregistrationV1() admissionregistrationv1.AdmissionregistrationV1Interface { + return c.admissionregistrationV1 } // AdmissionregistrationV1beta1 retrieves the AdmissionregistrationV1beta1Client @@ -163,10 +160,9 @@ return c.admissionregistrationV1beta1 } -// Deprecated: Admissionregistration retrieves the default version of AdmissionregistrationClient. -// Please explicitly pick a version. -func (c *Clientset) Admissionregistration() admissionregistrationv1beta1.AdmissionregistrationV1beta1Interface { - return c.admissionregistrationV1beta1 +// AppsV1 retrieves the AppsV1Client +func (c *Clientset) AppsV1() appsv1.AppsV1Interface { + return c.appsV1 } // AppsV1beta1 retrieves the AppsV1beta1Client @@ -179,15 +175,9 @@ return c.appsV1beta2 } -// AppsV1 retrieves the AppsV1Client -func (c *Clientset) AppsV1() appsv1.AppsV1Interface { - return c.appsV1 -} - -// Deprecated: Apps retrieves the default version of AppsClient. -// Please explicitly pick a version. -func (c *Clientset) Apps() appsv1.AppsV1Interface { - return c.appsV1 +// AuditregistrationV1alpha1 retrieves the AuditregistrationV1alpha1Client +func (c *Clientset) AuditregistrationV1alpha1() auditregistrationv1alpha1.AuditregistrationV1alpha1Interface { + return c.auditregistrationV1alpha1 } // AuthenticationV1 retrieves the AuthenticationV1Client @@ -195,12 +185,6 @@ return c.authenticationV1 } -// Deprecated: Authentication retrieves the default version of AuthenticationClient. -// Please explicitly pick a version. -func (c *Clientset) Authentication() authenticationv1.AuthenticationV1Interface { - return c.authenticationV1 -} - // AuthenticationV1beta1 retrieves the AuthenticationV1beta1Client func (c *Clientset) AuthenticationV1beta1() authenticationv1beta1.AuthenticationV1beta1Interface { return c.authenticationV1beta1 @@ -211,12 +195,6 @@ return c.authorizationV1 } -// Deprecated: Authorization retrieves the default version of AuthorizationClient. -// Please explicitly pick a version. -func (c *Clientset) Authorization() authorizationv1.AuthorizationV1Interface { - return c.authorizationV1 -} - // AuthorizationV1beta1 retrieves the AuthorizationV1beta1Client func (c *Clientset) AuthorizationV1beta1() authorizationv1beta1.AuthorizationV1beta1Interface { return c.authorizationV1beta1 @@ -227,25 +205,18 @@ return c.autoscalingV1 } -// Deprecated: Autoscaling retrieves the default version of AutoscalingClient. -// Please explicitly pick a version. -func (c *Clientset) Autoscaling() autoscalingv1.AutoscalingV1Interface { - return c.autoscalingV1 -} - // AutoscalingV2beta1 retrieves the AutoscalingV2beta1Client func (c *Clientset) AutoscalingV2beta1() autoscalingv2beta1.AutoscalingV2beta1Interface { return c.autoscalingV2beta1 } -// BatchV1 retrieves the BatchV1Client -func (c *Clientset) BatchV1() batchv1.BatchV1Interface { - return c.batchV1 +// AutoscalingV2beta2 retrieves the AutoscalingV2beta2Client +func (c *Clientset) AutoscalingV2beta2() autoscalingv2beta2.AutoscalingV2beta2Interface { + return c.autoscalingV2beta2 } -// Deprecated: Batch retrieves the default version of BatchClient. -// Please explicitly pick a version. -func (c *Clientset) Batch() batchv1.BatchV1Interface { +// BatchV1 retrieves the BatchV1Client +func (c *Clientset) BatchV1() batchv1.BatchV1Interface { return c.batchV1 } @@ -264,10 +235,14 @@ return c.certificatesV1beta1 } -// Deprecated: Certificates retrieves the default version of CertificatesClient. -// Please explicitly pick a version. -func (c *Clientset) Certificates() certificatesv1beta1.CertificatesV1beta1Interface { - return c.certificatesV1beta1 +// CoordinationV1beta1 retrieves the CoordinationV1beta1Client +func (c *Clientset) CoordinationV1beta1() coordinationv1beta1.CoordinationV1beta1Interface { + return c.coordinationV1beta1 +} + +// CoordinationV1 retrieves the CoordinationV1Client +func (c *Clientset) CoordinationV1() coordinationv1.CoordinationV1Interface { + return c.coordinationV1 } // CoreV1 retrieves the CoreV1Client @@ -275,10 +250,9 @@ return c.coreV1 } -// Deprecated: Core retrieves the default version of CoreClient. -// Please explicitly pick a version. -func (c *Clientset) Core() corev1.CoreV1Interface { - return c.coreV1 +// DiscoveryV1alpha1 retrieves the DiscoveryV1alpha1Client +func (c *Clientset) DiscoveryV1alpha1() discoveryv1alpha1.DiscoveryV1alpha1Interface { + return c.discoveryV1alpha1 } // EventsV1beta1 retrieves the EventsV1beta1Client @@ -286,42 +260,33 @@ return c.eventsV1beta1 } -// Deprecated: Events retrieves the default version of EventsClient. -// Please explicitly pick a version. -func (c *Clientset) Events() eventsv1beta1.EventsV1beta1Interface { - return c.eventsV1beta1 -} - // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface { return c.extensionsV1beta1 } -// Deprecated: Extensions retrieves the default version of ExtensionsClient. -// Please explicitly pick a version. -func (c *Clientset) Extensions() extensionsv1beta1.ExtensionsV1beta1Interface { - return c.extensionsV1beta1 -} - // NetworkingV1 retrieves the NetworkingV1Client func (c *Clientset) NetworkingV1() networkingv1.NetworkingV1Interface { return c.networkingV1 } -// Deprecated: Networking retrieves the default version of NetworkingClient. -// Please explicitly pick a version. -func (c *Clientset) Networking() networkingv1.NetworkingV1Interface { - return c.networkingV1 +// NetworkingV1beta1 retrieves the NetworkingV1beta1Client +func (c *Clientset) NetworkingV1beta1() networkingv1beta1.NetworkingV1beta1Interface { + return c.networkingV1beta1 } -// PolicyV1beta1 retrieves the PolicyV1beta1Client -func (c *Clientset) PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface { - return c.policyV1beta1 +// NodeV1alpha1 retrieves the NodeV1alpha1Client +func (c *Clientset) NodeV1alpha1() nodev1alpha1.NodeV1alpha1Interface { + return c.nodeV1alpha1 } -// Deprecated: Policy retrieves the default version of PolicyClient. -// Please explicitly pick a version. -func (c *Clientset) Policy() policyv1beta1.PolicyV1beta1Interface { +// NodeV1beta1 retrieves the NodeV1beta1Client +func (c *Clientset) NodeV1beta1() nodev1beta1.NodeV1beta1Interface { + return c.nodeV1beta1 +} + +// PolicyV1beta1 retrieves the PolicyV1beta1Client +func (c *Clientset) PolicyV1beta1() policyv1beta1.PolicyV1beta1Interface { return c.policyV1beta1 } @@ -330,12 +295,6 @@ return c.rbacV1 } -// Deprecated: Rbac retrieves the default version of RbacClient. -// Please explicitly pick a version. -func (c *Clientset) Rbac() rbacv1.RbacV1Interface { - return c.rbacV1 -} - // RbacV1beta1 retrieves the RbacV1beta1Client func (c *Clientset) RbacV1beta1() rbacv1beta1.RbacV1beta1Interface { return c.rbacV1beta1 @@ -356,10 +315,9 @@ return c.schedulingV1beta1 } -// Deprecated: Scheduling retrieves the default version of SchedulingClient. -// Please explicitly pick a version. -func (c *Clientset) Scheduling() schedulingv1beta1.SchedulingV1beta1Interface { - return c.schedulingV1beta1 +// SchedulingV1 retrieves the SchedulingV1Client +func (c *Clientset) SchedulingV1() schedulingv1.SchedulingV1Interface { + return c.schedulingV1 } // SettingsV1alpha1 retrieves the SettingsV1alpha1Client @@ -367,12 +325,6 @@ return c.settingsV1alpha1 } -// Deprecated: Settings retrieves the default version of SettingsClient. -// Please explicitly pick a version. -func (c *Clientset) Settings() settingsv1alpha1.SettingsV1alpha1Interface { - return c.settingsV1alpha1 -} - // StorageV1beta1 retrieves the StorageV1beta1Client func (c *Clientset) StorageV1beta1() storagev1beta1.StorageV1beta1Interface { return c.storageV1beta1 @@ -383,12 +335,6 @@ return c.storageV1 } -// Deprecated: Storage retrieves the default version of StorageClient. -// Please explicitly pick a version. -func (c *Clientset) Storage() storagev1.StorageV1Interface { - return c.storageV1 -} - // StorageV1alpha1 retrieves the StorageV1alpha1Client func (c *Clientset) StorageV1alpha1() storagev1alpha1.StorageV1alpha1Interface { return c.storageV1alpha1 @@ -403,14 +349,19 @@ } // NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("Burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) } var cs Clientset var err error - cs.admissionregistrationV1alpha1, err = admissionregistrationv1alpha1.NewForConfig(&configShallowCopy) + cs.admissionregistrationV1, err = admissionregistrationv1.NewForConfig(&configShallowCopy) if err != nil { return nil, err } @@ -418,6 +369,10 @@ if err != nil { return nil, err } + cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.appsV1beta1, err = appsv1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -426,7 +381,7 @@ if err != nil { return nil, err } - cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) + cs.auditregistrationV1alpha1, err = auditregistrationv1alpha1.NewForConfig(&configShallowCopy) if err != nil { return nil, err } @@ -454,6 +409,10 @@ if err != nil { return nil, err } + cs.autoscalingV2beta2, err = autoscalingv2beta2.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.batchV1, err = batchv1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -470,10 +429,22 @@ if err != nil { return nil, err } + cs.coordinationV1beta1, err = coordinationv1beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + cs.coordinationV1, err = coordinationv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.coreV1, err = corev1.NewForConfig(&configShallowCopy) if err != nil { return nil, err } + cs.discoveryV1alpha1, err = discoveryv1alpha1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.eventsV1beta1, err = eventsv1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -486,6 +457,18 @@ if err != nil { return nil, err } + cs.networkingV1beta1, err = networkingv1beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + cs.nodeV1alpha1, err = nodev1alpha1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + cs.nodeV1beta1, err = nodev1beta1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.policyV1beta1, err = policyv1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -510,6 +493,10 @@ if err != nil { return nil, err } + cs.schedulingV1, err = schedulingv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.settingsV1alpha1, err = settingsv1alpha1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -538,31 +525,40 @@ // panics if there is an error in the config. func NewForConfigOrDie(c *rest.Config) *Clientset { var cs Clientset - cs.admissionregistrationV1alpha1 = admissionregistrationv1alpha1.NewForConfigOrDie(c) + cs.admissionregistrationV1 = admissionregistrationv1.NewForConfigOrDie(c) cs.admissionregistrationV1beta1 = admissionregistrationv1beta1.NewForConfigOrDie(c) + cs.appsV1 = appsv1.NewForConfigOrDie(c) cs.appsV1beta1 = appsv1beta1.NewForConfigOrDie(c) cs.appsV1beta2 = appsv1beta2.NewForConfigOrDie(c) - cs.appsV1 = appsv1.NewForConfigOrDie(c) + cs.auditregistrationV1alpha1 = auditregistrationv1alpha1.NewForConfigOrDie(c) cs.authenticationV1 = authenticationv1.NewForConfigOrDie(c) cs.authenticationV1beta1 = authenticationv1beta1.NewForConfigOrDie(c) cs.authorizationV1 = authorizationv1.NewForConfigOrDie(c) cs.authorizationV1beta1 = authorizationv1beta1.NewForConfigOrDie(c) cs.autoscalingV1 = autoscalingv1.NewForConfigOrDie(c) cs.autoscalingV2beta1 = autoscalingv2beta1.NewForConfigOrDie(c) + cs.autoscalingV2beta2 = autoscalingv2beta2.NewForConfigOrDie(c) cs.batchV1 = batchv1.NewForConfigOrDie(c) cs.batchV1beta1 = batchv1beta1.NewForConfigOrDie(c) cs.batchV2alpha1 = batchv2alpha1.NewForConfigOrDie(c) cs.certificatesV1beta1 = certificatesv1beta1.NewForConfigOrDie(c) + cs.coordinationV1beta1 = coordinationv1beta1.NewForConfigOrDie(c) + cs.coordinationV1 = coordinationv1.NewForConfigOrDie(c) cs.coreV1 = corev1.NewForConfigOrDie(c) + cs.discoveryV1alpha1 = discoveryv1alpha1.NewForConfigOrDie(c) cs.eventsV1beta1 = eventsv1beta1.NewForConfigOrDie(c) cs.extensionsV1beta1 = extensionsv1beta1.NewForConfigOrDie(c) cs.networkingV1 = networkingv1.NewForConfigOrDie(c) + cs.networkingV1beta1 = networkingv1beta1.NewForConfigOrDie(c) + cs.nodeV1alpha1 = nodev1alpha1.NewForConfigOrDie(c) + cs.nodeV1beta1 = nodev1beta1.NewForConfigOrDie(c) cs.policyV1beta1 = policyv1beta1.NewForConfigOrDie(c) cs.rbacV1 = rbacv1.NewForConfigOrDie(c) cs.rbacV1beta1 = rbacv1beta1.NewForConfigOrDie(c) cs.rbacV1alpha1 = rbacv1alpha1.NewForConfigOrDie(c) cs.schedulingV1alpha1 = schedulingv1alpha1.NewForConfigOrDie(c) cs.schedulingV1beta1 = schedulingv1beta1.NewForConfigOrDie(c) + cs.schedulingV1 = schedulingv1.NewForConfigOrDie(c) cs.settingsV1alpha1 = settingsv1alpha1.NewForConfigOrDie(c) cs.storageV1beta1 = storagev1beta1.NewForConfigOrDie(c) cs.storageV1 = storagev1.NewForConfigOrDie(c) @@ -575,31 +571,40 @@ // New creates a new Clientset for the given RESTClient. func New(c rest.Interface) *Clientset { var cs Clientset - cs.admissionregistrationV1alpha1 = admissionregistrationv1alpha1.New(c) + cs.admissionregistrationV1 = admissionregistrationv1.New(c) cs.admissionregistrationV1beta1 = admissionregistrationv1beta1.New(c) + cs.appsV1 = appsv1.New(c) cs.appsV1beta1 = appsv1beta1.New(c) cs.appsV1beta2 = appsv1beta2.New(c) - cs.appsV1 = appsv1.New(c) + cs.auditregistrationV1alpha1 = auditregistrationv1alpha1.New(c) cs.authenticationV1 = authenticationv1.New(c) cs.authenticationV1beta1 = authenticationv1beta1.New(c) cs.authorizationV1 = authorizationv1.New(c) cs.authorizationV1beta1 = authorizationv1beta1.New(c) cs.autoscalingV1 = autoscalingv1.New(c) cs.autoscalingV2beta1 = autoscalingv2beta1.New(c) + cs.autoscalingV2beta2 = autoscalingv2beta2.New(c) cs.batchV1 = batchv1.New(c) cs.batchV1beta1 = batchv1beta1.New(c) cs.batchV2alpha1 = batchv2alpha1.New(c) cs.certificatesV1beta1 = certificatesv1beta1.New(c) + cs.coordinationV1beta1 = coordinationv1beta1.New(c) + cs.coordinationV1 = coordinationv1.New(c) cs.coreV1 = corev1.New(c) + cs.discoveryV1alpha1 = discoveryv1alpha1.New(c) cs.eventsV1beta1 = eventsv1beta1.New(c) cs.extensionsV1beta1 = extensionsv1beta1.New(c) cs.networkingV1 = networkingv1.New(c) + cs.networkingV1beta1 = networkingv1beta1.New(c) + cs.nodeV1alpha1 = nodev1alpha1.New(c) + cs.nodeV1beta1 = nodev1beta1.New(c) cs.policyV1beta1 = policyv1beta1.New(c) cs.rbacV1 = rbacv1.New(c) cs.rbacV1beta1 = rbacv1beta1.New(c) cs.rbacV1alpha1 = rbacv1alpha1.New(c) cs.schedulingV1alpha1 = schedulingv1alpha1.New(c) cs.schedulingV1beta1 = schedulingv1beta1.New(c) + cs.schedulingV1 = schedulingv1.New(c) cs.settingsV1alpha1 = settingsv1alpha1.New(c) cs.storageV1beta1 = storagev1beta1.New(c) cs.storageV1 = storagev1.New(c) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/scheme/register.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/scheme/register.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/scheme/register.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/scheme/register.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,29 +19,38 @@ package scheme import ( - admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta2 "k8s.io/api/apps/v1beta2" + auditregistrationv1alpha1 "k8s.io/api/auditregistration/v1alpha1" authenticationv1 "k8s.io/api/authentication/v1" authenticationv1beta1 "k8s.io/api/authentication/v1beta1" authorizationv1 "k8s.io/api/authorization/v1" authorizationv1beta1 "k8s.io/api/authorization/v1beta1" autoscalingv1 "k8s.io/api/autoscaling/v1" autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1" + autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" batchv1 "k8s.io/api/batch/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" batchv2alpha1 "k8s.io/api/batch/v2alpha1" certificatesv1beta1 "k8s.io/api/certificates/v1beta1" + coordinationv1 "k8s.io/api/coordination/v1" + coordinationv1beta1 "k8s.io/api/coordination/v1beta1" corev1 "k8s.io/api/core/v1" + discoveryv1alpha1 "k8s.io/api/discovery/v1alpha1" eventsv1beta1 "k8s.io/api/events/v1beta1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" networkingv1 "k8s.io/api/networking/v1" + networkingv1beta1 "k8s.io/api/networking/v1beta1" + nodev1alpha1 "k8s.io/api/node/v1alpha1" + nodev1beta1 "k8s.io/api/node/v1beta1" policyv1beta1 "k8s.io/api/policy/v1beta1" rbacv1 "k8s.io/api/rbac/v1" rbacv1alpha1 "k8s.io/api/rbac/v1alpha1" rbacv1beta1 "k8s.io/api/rbac/v1beta1" + schedulingv1 "k8s.io/api/scheduling/v1" schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1" schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" settingsv1alpha1 "k8s.io/api/settings/v1alpha1" @@ -52,15 +61,51 @@ runtime "k8s.io/apimachinery/pkg/runtime" schema "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" ) var Scheme = runtime.NewScheme() var Codecs = serializer.NewCodecFactory(Scheme) var ParameterCodec = runtime.NewParameterCodec(Scheme) - -func init() { - v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) - AddToScheme(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + admissionregistrationv1.AddToScheme, + admissionregistrationv1beta1.AddToScheme, + appsv1.AddToScheme, + appsv1beta1.AddToScheme, + appsv1beta2.AddToScheme, + auditregistrationv1alpha1.AddToScheme, + authenticationv1.AddToScheme, + authenticationv1beta1.AddToScheme, + authorizationv1.AddToScheme, + authorizationv1beta1.AddToScheme, + autoscalingv1.AddToScheme, + autoscalingv2beta1.AddToScheme, + autoscalingv2beta2.AddToScheme, + batchv1.AddToScheme, + batchv1beta1.AddToScheme, + batchv2alpha1.AddToScheme, + certificatesv1beta1.AddToScheme, + coordinationv1beta1.AddToScheme, + coordinationv1.AddToScheme, + corev1.AddToScheme, + discoveryv1alpha1.AddToScheme, + eventsv1beta1.AddToScheme, + extensionsv1beta1.AddToScheme, + networkingv1.AddToScheme, + networkingv1beta1.AddToScheme, + nodev1alpha1.AddToScheme, + nodev1beta1.AddToScheme, + policyv1beta1.AddToScheme, + rbacv1.AddToScheme, + rbacv1beta1.AddToScheme, + rbacv1alpha1.AddToScheme, + schedulingv1alpha1.AddToScheme, + schedulingv1beta1.AddToScheme, + schedulingv1.AddToScheme, + settingsv1alpha1.AddToScheme, + storagev1beta1.AddToScheme, + storagev1.AddToScheme, + storagev1alpha1.AddToScheme, } // AddToScheme adds all types of this clientset into the given scheme. This allows composition @@ -73,38 +118,13 @@ // ) // // kclientset, _ := kubernetes.NewForConfig(c) -// aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. -func AddToScheme(scheme *runtime.Scheme) { - admissionregistrationv1alpha1.AddToScheme(scheme) - admissionregistrationv1beta1.AddToScheme(scheme) - appsv1beta1.AddToScheme(scheme) - appsv1beta2.AddToScheme(scheme) - appsv1.AddToScheme(scheme) - authenticationv1.AddToScheme(scheme) - authenticationv1beta1.AddToScheme(scheme) - authorizationv1.AddToScheme(scheme) - authorizationv1beta1.AddToScheme(scheme) - autoscalingv1.AddToScheme(scheme) - autoscalingv2beta1.AddToScheme(scheme) - batchv1.AddToScheme(scheme) - batchv1beta1.AddToScheme(scheme) - batchv2alpha1.AddToScheme(scheme) - certificatesv1beta1.AddToScheme(scheme) - corev1.AddToScheme(scheme) - eventsv1beta1.AddToScheme(scheme) - extensionsv1beta1.AddToScheme(scheme) - networkingv1.AddToScheme(scheme) - policyv1beta1.AddToScheme(scheme) - rbacv1.AddToScheme(scheme) - rbacv1beta1.AddToScheme(scheme) - rbacv1alpha1.AddToScheme(scheme) - schedulingv1alpha1.AddToScheme(scheme) - schedulingv1beta1.AddToScheme(scheme) - settingsv1alpha1.AddToScheme(scheme) - storagev1beta1.AddToScheme(scheme) - storagev1.AddToScheme(scheme) - storagev1alpha1.AddToScheme(scheme) +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,94 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/admissionregistration/v1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type AdmissionregistrationV1Interface interface { + RESTClient() rest.Interface + MutatingWebhookConfigurationsGetter + ValidatingWebhookConfigurationsGetter +} + +// AdmissionregistrationV1Client is used to interact with features provided by the admissionregistration.k8s.io group. +type AdmissionregistrationV1Client struct { + restClient rest.Interface +} + +func (c *AdmissionregistrationV1Client) MutatingWebhookConfigurations() MutatingWebhookConfigurationInterface { + return newMutatingWebhookConfigurations(c) +} + +func (c *AdmissionregistrationV1Client) ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInterface { + return newValidatingWebhookConfigurations(c) +} + +// NewForConfig creates a new AdmissionregistrationV1Client for the given config. +func NewForConfig(c *rest.Config) (*AdmissionregistrationV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AdmissionregistrationV1Client{client}, nil +} + +// NewForConfigOrDie creates a new AdmissionregistrationV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AdmissionregistrationV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AdmissionregistrationV1Client for the given RESTClient. +func New(c rest.Interface) *AdmissionregistrationV1Client { + return &AdmissionregistrationV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AdmissionregistrationV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type MutatingWebhookConfigurationExpansion interface{} + +type ValidatingWebhookConfigurationExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/mutatingwebhookconfiguration.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/admissionregistration/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// MutatingWebhookConfigurationsGetter has a method to return a MutatingWebhookConfigurationInterface. +// A group's client should implement this interface. +type MutatingWebhookConfigurationsGetter interface { + MutatingWebhookConfigurations() MutatingWebhookConfigurationInterface +} + +// MutatingWebhookConfigurationInterface has methods to work with MutatingWebhookConfiguration resources. +type MutatingWebhookConfigurationInterface interface { + Create(*v1.MutatingWebhookConfiguration) (*v1.MutatingWebhookConfiguration, error) + Update(*v1.MutatingWebhookConfiguration) (*v1.MutatingWebhookConfiguration, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.MutatingWebhookConfiguration, error) + List(opts metav1.ListOptions) (*v1.MutatingWebhookConfigurationList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.MutatingWebhookConfiguration, err error) + MutatingWebhookConfigurationExpansion +} + +// mutatingWebhookConfigurations implements MutatingWebhookConfigurationInterface +type mutatingWebhookConfigurations struct { + client rest.Interface +} + +// newMutatingWebhookConfigurations returns a MutatingWebhookConfigurations +func newMutatingWebhookConfigurations(c *AdmissionregistrationV1Client) *mutatingWebhookConfigurations { + return &mutatingWebhookConfigurations{ + client: c.RESTClient(), + } +} + +// Get takes name of the mutatingWebhookConfiguration, and returns the corresponding mutatingWebhookConfiguration object, and an error if there is any. +func (c *mutatingWebhookConfigurations) Get(name string, options metav1.GetOptions) (result *v1.MutatingWebhookConfiguration, err error) { + result = &v1.MutatingWebhookConfiguration{} + err = c.client.Get(). + Resource("mutatingwebhookconfigurations"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of MutatingWebhookConfigurations that match those selectors. +func (c *mutatingWebhookConfigurations) List(opts metav1.ListOptions) (result *v1.MutatingWebhookConfigurationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.MutatingWebhookConfigurationList{} + err = c.client.Get(). + Resource("mutatingwebhookconfigurations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested mutatingWebhookConfigurations. +func (c *mutatingWebhookConfigurations) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("mutatingwebhookconfigurations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a mutatingWebhookConfiguration and creates it. Returns the server's representation of the mutatingWebhookConfiguration, and an error, if there is any. +func (c *mutatingWebhookConfigurations) Create(mutatingWebhookConfiguration *v1.MutatingWebhookConfiguration) (result *v1.MutatingWebhookConfiguration, err error) { + result = &v1.MutatingWebhookConfiguration{} + err = c.client.Post(). + Resource("mutatingwebhookconfigurations"). + Body(mutatingWebhookConfiguration). + Do(). + Into(result) + return +} + +// Update takes the representation of a mutatingWebhookConfiguration and updates it. Returns the server's representation of the mutatingWebhookConfiguration, and an error, if there is any. +func (c *mutatingWebhookConfigurations) Update(mutatingWebhookConfiguration *v1.MutatingWebhookConfiguration) (result *v1.MutatingWebhookConfiguration, err error) { + result = &v1.MutatingWebhookConfiguration{} + err = c.client.Put(). + Resource("mutatingwebhookconfigurations"). + Name(mutatingWebhookConfiguration.Name). + Body(mutatingWebhookConfiguration). + Do(). + Into(result) + return +} + +// Delete takes name of the mutatingWebhookConfiguration and deletes it. Returns an error if one occurs. +func (c *mutatingWebhookConfigurations) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("mutatingwebhookconfigurations"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *mutatingWebhookConfigurations) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("mutatingwebhookconfigurations"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched mutatingWebhookConfiguration. +func (c *mutatingWebhookConfigurations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.MutatingWebhookConfiguration, err error) { + result = &v1.MutatingWebhookConfiguration{} + err = c.client.Patch(pt). + Resource("mutatingwebhookconfigurations"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/validatingwebhookconfiguration.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/admissionregistration/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// ValidatingWebhookConfigurationsGetter has a method to return a ValidatingWebhookConfigurationInterface. +// A group's client should implement this interface. +type ValidatingWebhookConfigurationsGetter interface { + ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInterface +} + +// ValidatingWebhookConfigurationInterface has methods to work with ValidatingWebhookConfiguration resources. +type ValidatingWebhookConfigurationInterface interface { + Create(*v1.ValidatingWebhookConfiguration) (*v1.ValidatingWebhookConfiguration, error) + Update(*v1.ValidatingWebhookConfiguration) (*v1.ValidatingWebhookConfiguration, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ValidatingWebhookConfiguration, error) + List(opts metav1.ListOptions) (*v1.ValidatingWebhookConfigurationList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ValidatingWebhookConfiguration, err error) + ValidatingWebhookConfigurationExpansion +} + +// validatingWebhookConfigurations implements ValidatingWebhookConfigurationInterface +type validatingWebhookConfigurations struct { + client rest.Interface +} + +// newValidatingWebhookConfigurations returns a ValidatingWebhookConfigurations +func newValidatingWebhookConfigurations(c *AdmissionregistrationV1Client) *validatingWebhookConfigurations { + return &validatingWebhookConfigurations{ + client: c.RESTClient(), + } +} + +// Get takes name of the validatingWebhookConfiguration, and returns the corresponding validatingWebhookConfiguration object, and an error if there is any. +func (c *validatingWebhookConfigurations) Get(name string, options metav1.GetOptions) (result *v1.ValidatingWebhookConfiguration, err error) { + result = &v1.ValidatingWebhookConfiguration{} + err = c.client.Get(). + Resource("validatingwebhookconfigurations"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ValidatingWebhookConfigurations that match those selectors. +func (c *validatingWebhookConfigurations) List(opts metav1.ListOptions) (result *v1.ValidatingWebhookConfigurationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ValidatingWebhookConfigurationList{} + err = c.client.Get(). + Resource("validatingwebhookconfigurations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested validatingWebhookConfigurations. +func (c *validatingWebhookConfigurations) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("validatingwebhookconfigurations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a validatingWebhookConfiguration and creates it. Returns the server's representation of the validatingWebhookConfiguration, and an error, if there is any. +func (c *validatingWebhookConfigurations) Create(validatingWebhookConfiguration *v1.ValidatingWebhookConfiguration) (result *v1.ValidatingWebhookConfiguration, err error) { + result = &v1.ValidatingWebhookConfiguration{} + err = c.client.Post(). + Resource("validatingwebhookconfigurations"). + Body(validatingWebhookConfiguration). + Do(). + Into(result) + return +} + +// Update takes the representation of a validatingWebhookConfiguration and updates it. Returns the server's representation of the validatingWebhookConfiguration, and an error, if there is any. +func (c *validatingWebhookConfigurations) Update(validatingWebhookConfiguration *v1.ValidatingWebhookConfiguration) (result *v1.ValidatingWebhookConfiguration, err error) { + result = &v1.ValidatingWebhookConfiguration{} + err = c.client.Put(). + Resource("validatingwebhookconfigurations"). + Name(validatingWebhookConfiguration.Name). + Body(validatingWebhookConfiguration). + Do(). + Into(result) + return +} + +// Delete takes name of the validatingWebhookConfiguration and deletes it. Returns an error if one occurs. +func (c *validatingWebhookConfigurations) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("validatingwebhookconfigurations"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *validatingWebhookConfigurations) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("validatingwebhookconfigurations"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched validatingWebhookConfiguration. +func (c *validatingWebhookConfigurations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ValidatingWebhookConfiguration, err error) { + result = &v1.ValidatingWebhookConfiguration{} + err = c.client.Patch(pt). + Resource("validatingwebhookconfigurations"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/admissionregistration/v1alpha1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -type AdmissionregistrationV1alpha1Interface interface { - RESTClient() rest.Interface - InitializerConfigurationsGetter -} - -// AdmissionregistrationV1alpha1Client is used to interact with features provided by the admissionregistration.k8s.io group. -type AdmissionregistrationV1alpha1Client struct { - restClient rest.Interface -} - -func (c *AdmissionregistrationV1alpha1Client) InitializerConfigurations() InitializerConfigurationInterface { - return newInitializerConfigurations(c) -} - -// NewForConfig creates a new AdmissionregistrationV1alpha1Client for the given config. -func NewForConfig(c *rest.Config) (*AdmissionregistrationV1alpha1Client, error) { - config := *c - if err := setConfigDefaults(&config); err != nil { - return nil, err - } - client, err := rest.RESTClientFor(&config) - if err != nil { - return nil, err - } - return &AdmissionregistrationV1alpha1Client{client}, nil -} - -// NewForConfigOrDie creates a new AdmissionregistrationV1alpha1Client for the given config and -// panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *AdmissionregistrationV1alpha1Client { - client, err := NewForConfig(c) - if err != nil { - panic(err) - } - return client -} - -// New creates a new AdmissionregistrationV1alpha1Client for the given RESTClient. -func New(c rest.Interface) *AdmissionregistrationV1alpha1Client { - return &AdmissionregistrationV1alpha1Client{c} -} - -func setConfigDefaults(config *rest.Config) error { - gv := v1alpha1.SchemeGroupVersion - config.GroupVersion = &gv - config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} - - if config.UserAgent == "" { - config.UserAgent = rest.DefaultKubernetesUserAgent() - } - - return nil -} - -// RESTClient returns a RESTClient that is used to communicate -// with API server by this client implementation. -func (c *AdmissionregistrationV1alpha1Client) RESTClient() rest.Interface { - if c == nil { - return nil - } - return c.restClient -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -// This package has the automatically generated typed clients. -package v1alpha1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -type InitializerConfigurationExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/initializerconfiguration.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - v1alpha1 "k8s.io/api/admissionregistration/v1alpha1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - scheme "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -// InitializerConfigurationsGetter has a method to return a InitializerConfigurationInterface. -// A group's client should implement this interface. -type InitializerConfigurationsGetter interface { - InitializerConfigurations() InitializerConfigurationInterface -} - -// InitializerConfigurationInterface has methods to work with InitializerConfiguration resources. -type InitializerConfigurationInterface interface { - Create(*v1alpha1.InitializerConfiguration) (*v1alpha1.InitializerConfiguration, error) - Update(*v1alpha1.InitializerConfiguration) (*v1alpha1.InitializerConfiguration, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*v1alpha1.InitializerConfiguration, error) - List(opts v1.ListOptions) (*v1alpha1.InitializerConfigurationList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.InitializerConfiguration, err error) - InitializerConfigurationExpansion -} - -// initializerConfigurations implements InitializerConfigurationInterface -type initializerConfigurations struct { - client rest.Interface -} - -// newInitializerConfigurations returns a InitializerConfigurations -func newInitializerConfigurations(c *AdmissionregistrationV1alpha1Client) *initializerConfigurations { - return &initializerConfigurations{ - client: c.RESTClient(), - } -} - -// Get takes name of the initializerConfiguration, and returns the corresponding initializerConfiguration object, and an error if there is any. -func (c *initializerConfigurations) Get(name string, options v1.GetOptions) (result *v1alpha1.InitializerConfiguration, err error) { - result = &v1alpha1.InitializerConfiguration{} - err = c.client.Get(). - Resource("initializerconfigurations"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of InitializerConfigurations that match those selectors. -func (c *initializerConfigurations) List(opts v1.ListOptions) (result *v1alpha1.InitializerConfigurationList, err error) { - result = &v1alpha1.InitializerConfigurationList{} - err = c.client.Get(). - Resource("initializerconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested initializerConfigurations. -func (c *initializerConfigurations) Watch(opts v1.ListOptions) (watch.Interface, error) { - opts.Watch = true - return c.client.Get(). - Resource("initializerconfigurations"). - VersionedParams(&opts, scheme.ParameterCodec). - Watch() -} - -// Create takes the representation of a initializerConfiguration and creates it. Returns the server's representation of the initializerConfiguration, and an error, if there is any. -func (c *initializerConfigurations) Create(initializerConfiguration *v1alpha1.InitializerConfiguration) (result *v1alpha1.InitializerConfiguration, err error) { - result = &v1alpha1.InitializerConfiguration{} - err = c.client.Post(). - Resource("initializerconfigurations"). - Body(initializerConfiguration). - Do(). - Into(result) - return -} - -// Update takes the representation of a initializerConfiguration and updates it. Returns the server's representation of the initializerConfiguration, and an error, if there is any. -func (c *initializerConfigurations) Update(initializerConfiguration *v1alpha1.InitializerConfiguration) (result *v1alpha1.InitializerConfiguration, err error) { - result = &v1alpha1.InitializerConfiguration{} - err = c.client.Put(). - Resource("initializerconfigurations"). - Name(initializerConfiguration.Name). - Body(initializerConfiguration). - Do(). - Into(result) - return -} - -// Delete takes name of the initializerConfiguration and deletes it. Returns an error if one occurs. -func (c *initializerConfigurations) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Resource("initializerconfigurations"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *initializerConfigurations) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - return c.client.Delete(). - Resource("initializerconfigurations"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched initializerConfiguration. -func (c *initializerConfigurations) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.InitializerConfiguration, err error) { - result = &v1alpha1.InitializerConfiguration{} - err = c.client.Patch(pt). - Resource("initializerconfigurations"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/admissionregistration/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -76,7 +75,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/mutatingwebhookconfiguration.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of MutatingWebhookConfigurations that match those selectors. func (c *mutatingWebhookConfigurations) List(opts v1.ListOptions) (result *v1beta1.MutatingWebhookConfigurationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.MutatingWebhookConfigurationList{} err = c.client.Get(). Resource("mutatingwebhookconfigurations"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested mutatingWebhookConfigurations. func (c *mutatingWebhookConfigurations) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("mutatingwebhookconfigurations"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *mutatingWebhookConfigurations) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("mutatingwebhookconfigurations"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/validatingwebhookconfiguration.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of ValidatingWebhookConfigurations that match those selectors. func (c *validatingWebhookConfigurations) List(opts v1.ListOptions) (result *v1beta1.ValidatingWebhookConfigurationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.ValidatingWebhookConfigurationList{} err = c.client.Get(). Resource("validatingwebhookconfigurations"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested validatingWebhookConfigurations. func (c *validatingWebhookConfigurations) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("validatingwebhookconfigurations"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *validatingWebhookConfigurations) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("validatingwebhookconfigurations"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/apps/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -91,7 +90,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/controllerrevision.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/apps/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type ControllerRevisionInterface interface { Create(*v1.ControllerRevision) (*v1.ControllerRevision, error) Update(*v1.ControllerRevision) (*v1.ControllerRevision, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ControllerRevision, error) - List(opts meta_v1.ListOptions) (*v1.ControllerRevisionList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ControllerRevision, error) + List(opts metav1.ListOptions) (*v1.ControllerRevisionList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ControllerRevision, err error) ControllerRevisionExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the controllerRevision, and returns the corresponding controllerRevision object, and an error if there is any. -func (c *controllerRevisions) Get(name string, options meta_v1.GetOptions) (result *v1.ControllerRevision, err error) { +func (c *controllerRevisions) Get(name string, options metav1.GetOptions) (result *v1.ControllerRevision, err error) { result = &v1.ControllerRevision{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of ControllerRevisions that match those selectors. -func (c *controllerRevisions) List(opts meta_v1.ListOptions) (result *v1.ControllerRevisionList, err error) { +func (c *controllerRevisions) List(opts metav1.ListOptions) (result *v1.ControllerRevisionList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ControllerRevisionList{} err = c.client.Get(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested controllerRevisions. -func (c *controllerRevisions) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *controllerRevisions) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the controllerRevision and deletes it. Returns an error if one occurs. -func (c *controllerRevisions) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *controllerRevisions) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("controllerrevisions"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *controllerRevisions) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *controllerRevisions) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/apps/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.DaemonSet) (*v1.DaemonSet, error) Update(*v1.DaemonSet) (*v1.DaemonSet, error) UpdateStatus(*v1.DaemonSet) (*v1.DaemonSet, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.DaemonSet, error) - List(opts meta_v1.ListOptions) (*v1.DaemonSetList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.DaemonSet, error) + List(opts metav1.ListOptions) (*v1.DaemonSetList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DaemonSet, err error) DaemonSetExpansion } @@ -62,7 +64,7 @@ } // Get takes name of the daemonSet, and returns the corresponding daemonSet object, and an error if there is any. -func (c *daemonSets) Get(name string, options meta_v1.GetOptions) (result *v1.DaemonSet, err error) { +func (c *daemonSets) Get(name string, options metav1.GetOptions) (result *v1.DaemonSet, err error) { result = &v1.DaemonSet{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +77,34 @@ } // List takes label and field selectors, and returns the list of DaemonSets that match those selectors. -func (c *daemonSets) List(opts meta_v1.ListOptions) (result *v1.DaemonSetList, err error) { +func (c *daemonSets) List(opts metav1.ListOptions) (result *v1.DaemonSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.DaemonSetList{} err = c.client.Get(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested daemonSets. -func (c *daemonSets) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *daemonSets) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +150,7 @@ } // Delete takes name of the daemonSet and deletes it. Returns an error if one occurs. -func (c *daemonSets) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *daemonSets) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("daemonsets"). @@ -149,11 +161,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *daemonSets) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *daemonSets) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/deployment.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,11 @@ package v1 import ( + "time" + v1 "k8s.io/api/apps/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,12 +41,15 @@ Create(*v1.Deployment) (*v1.Deployment, error) Update(*v1.Deployment) (*v1.Deployment, error) UpdateStatus(*v1.Deployment) (*v1.Deployment, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Deployment, error) - List(opts meta_v1.ListOptions) (*v1.DeploymentList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Deployment, error) + List(opts metav1.ListOptions) (*v1.DeploymentList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Deployment, err error) + GetScale(deploymentName string, options metav1.GetOptions) (*autoscalingv1.Scale, error) + UpdateScale(deploymentName string, scale *autoscalingv1.Scale) (*autoscalingv1.Scale, error) + DeploymentExpansion } @@ -62,7 +68,7 @@ } // Get takes name of the deployment, and returns the corresponding deployment object, and an error if there is any. -func (c *deployments) Get(name string, options meta_v1.GetOptions) (result *v1.Deployment, err error) { +func (c *deployments) Get(name string, options metav1.GetOptions) (result *v1.Deployment, err error) { result = &v1.Deployment{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +81,34 @@ } // List takes label and field selectors, and returns the list of Deployments that match those selectors. -func (c *deployments) List(opts meta_v1.ListOptions) (result *v1.DeploymentList, err error) { +func (c *deployments) List(opts metav1.ListOptions) (result *v1.DeploymentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.DeploymentList{} err = c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested deployments. -func (c *deployments) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *deployments) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +154,7 @@ } // Delete takes name of the deployment and deletes it. Returns an error if one occurs. -func (c *deployments) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *deployments) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("deployments"). @@ -149,11 +165,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *deployments) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *deployments) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("deployments"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() @@ -171,4 +192,32 @@ Do(). Into(result) return +} + +// GetScale takes name of the deployment, and returns the corresponding autoscalingv1.Scale object, and an error if there is any. +func (c *deployments) GetScale(deploymentName string, options metav1.GetOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Get(). + Namespace(c.ns). + Resource("deployments"). + Name(deploymentName). + SubResource("scale"). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. +func (c *deployments) UpdateScale(deploymentName string, scale *autoscalingv1.Scale) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Put(). + Namespace(c.ns). + Resource("deployments"). + Name(deploymentName). + SubResource("scale"). + Body(scale). + Do(). + Into(result) + return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/replicaset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,11 @@ package v1 import ( + "time" + v1 "k8s.io/api/apps/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,12 +41,15 @@ Create(*v1.ReplicaSet) (*v1.ReplicaSet, error) Update(*v1.ReplicaSet) (*v1.ReplicaSet, error) UpdateStatus(*v1.ReplicaSet) (*v1.ReplicaSet, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ReplicaSet, error) - List(opts meta_v1.ListOptions) (*v1.ReplicaSetList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ReplicaSet, error) + List(opts metav1.ListOptions) (*v1.ReplicaSetList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ReplicaSet, err error) + GetScale(replicaSetName string, options metav1.GetOptions) (*autoscalingv1.Scale, error) + UpdateScale(replicaSetName string, scale *autoscalingv1.Scale) (*autoscalingv1.Scale, error) + ReplicaSetExpansion } @@ -62,7 +68,7 @@ } // Get takes name of the replicaSet, and returns the corresponding replicaSet object, and an error if there is any. -func (c *replicaSets) Get(name string, options meta_v1.GetOptions) (result *v1.ReplicaSet, err error) { +func (c *replicaSets) Get(name string, options metav1.GetOptions) (result *v1.ReplicaSet, err error) { result = &v1.ReplicaSet{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +81,34 @@ } // List takes label and field selectors, and returns the list of ReplicaSets that match those selectors. -func (c *replicaSets) List(opts meta_v1.ListOptions) (result *v1.ReplicaSetList, err error) { +func (c *replicaSets) List(opts metav1.ListOptions) (result *v1.ReplicaSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ReplicaSetList{} err = c.client.Get(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested replicaSets. -func (c *replicaSets) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *replicaSets) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +154,7 @@ } // Delete takes name of the replicaSet and deletes it. Returns an error if one occurs. -func (c *replicaSets) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *replicaSets) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("replicasets"). @@ -149,11 +165,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *replicaSets) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *replicaSets) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() @@ -171,4 +192,32 @@ Do(). Into(result) return +} + +// GetScale takes name of the replicaSet, and returns the corresponding autoscalingv1.Scale object, and an error if there is any. +func (c *replicaSets) GetScale(replicaSetName string, options metav1.GetOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Get(). + Namespace(c.ns). + Resource("replicasets"). + Name(replicaSetName). + SubResource("scale"). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. +func (c *replicaSets) UpdateScale(replicaSetName string, scale *autoscalingv1.Scale) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Put(). + Namespace(c.ns). + Resource("replicasets"). + Name(replicaSetName). + SubResource("scale"). + Body(scale). + Do(). + Into(result) + return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/statefulset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,11 @@ package v1 import ( + "time" + v1 "k8s.io/api/apps/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,12 +41,15 @@ Create(*v1.StatefulSet) (*v1.StatefulSet, error) Update(*v1.StatefulSet) (*v1.StatefulSet, error) UpdateStatus(*v1.StatefulSet) (*v1.StatefulSet, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.StatefulSet, error) - List(opts meta_v1.ListOptions) (*v1.StatefulSetList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.StatefulSet, error) + List(opts metav1.ListOptions) (*v1.StatefulSetList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.StatefulSet, err error) + GetScale(statefulSetName string, options metav1.GetOptions) (*autoscalingv1.Scale, error) + UpdateScale(statefulSetName string, scale *autoscalingv1.Scale) (*autoscalingv1.Scale, error) + StatefulSetExpansion } @@ -62,7 +68,7 @@ } // Get takes name of the statefulSet, and returns the corresponding statefulSet object, and an error if there is any. -func (c *statefulSets) Get(name string, options meta_v1.GetOptions) (result *v1.StatefulSet, err error) { +func (c *statefulSets) Get(name string, options metav1.GetOptions) (result *v1.StatefulSet, err error) { result = &v1.StatefulSet{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +81,34 @@ } // List takes label and field selectors, and returns the list of StatefulSets that match those selectors. -func (c *statefulSets) List(opts meta_v1.ListOptions) (result *v1.StatefulSetList, err error) { +func (c *statefulSets) List(opts metav1.ListOptions) (result *v1.StatefulSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.StatefulSetList{} err = c.client.Get(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested statefulSets. -func (c *statefulSets) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *statefulSets) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +154,7 @@ } // Delete takes name of the statefulSet and deletes it. Returns an error if one occurs. -func (c *statefulSets) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *statefulSets) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("statefulsets"). @@ -149,11 +165,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *statefulSets) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *statefulSets) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() @@ -171,4 +192,32 @@ Do(). Into(result) return +} + +// GetScale takes name of the statefulSet, and returns the corresponding autoscalingv1.Scale object, and an error if there is any. +func (c *statefulSets) GetScale(statefulSetName string, options metav1.GetOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Get(). + Namespace(c.ns). + Resource("statefulsets"). + Name(statefulSetName). + SubResource("scale"). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. +func (c *statefulSets) UpdateScale(statefulSetName string, scale *autoscalingv1.Scale) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Put(). + Namespace(c.ns). + Resource("statefulsets"). + Name(statefulSetName). + SubResource("scale"). + Body(scale). + Do(). + Into(result) + return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/apps/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -29,7 +28,6 @@ RESTClient() rest.Interface ControllerRevisionsGetter DeploymentsGetter - ScalesGetter StatefulSetsGetter } @@ -46,10 +44,6 @@ return newDeployments(c, namespace) } -func (c *AppsV1beta1Client) Scales(namespace string) ScaleInterface { - return newScales(c, namespace) -} - func (c *AppsV1beta1Client) StatefulSets(namespace string) StatefulSetInterface { return newStatefulSets(c, namespace) } @@ -86,7 +80,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/controllerrevision.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/apps/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of ControllerRevisions that match those selectors. func (c *controllerRevisions) List(opts v1.ListOptions) (result *v1beta1.ControllerRevisionList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.ControllerRevisionList{} err = c.client.Get(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested controllerRevisions. func (c *controllerRevisions) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *controllerRevisions) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/deployment.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/apps/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of Deployments that match those selectors. func (c *deployments) List(opts v1.ListOptions) (result *v1beta1.DeploymentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.DeploymentList{} err = c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested deployments. func (c *deployments) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *deployments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("deployments"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,6 +22,4 @@ type DeploymentExpansion interface{} -type ScaleExpansion interface{} - type StatefulSetExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/scale.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta1 - -import ( - rest "k8s.io/client-go/rest" -) - -// ScalesGetter has a method to return a ScaleInterface. -// A group's client should implement this interface. -type ScalesGetter interface { - Scales(namespace string) ScaleInterface -} - -// ScaleInterface has methods to work with Scale resources. -type ScaleInterface interface { - ScaleExpansion -} - -// scales implements ScaleInterface -type scales struct { - client rest.Interface - ns string -} - -// newScales returns a Scales -func newScales(c *AppsV1beta1Client, namespace string) *scales { - return &scales{ - client: c.RESTClient(), - ns: namespace, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/statefulset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/apps/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of StatefulSets that match those selectors. func (c *statefulSets) List(opts v1.ListOptions) (result *v1beta1.StatefulSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.StatefulSetList{} err = c.client.Get(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested statefulSets. func (c *statefulSets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *statefulSets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta2 "k8s.io/api/apps/v1beta2" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -31,7 +30,6 @@ DaemonSetsGetter DeploymentsGetter ReplicaSetsGetter - ScalesGetter StatefulSetsGetter } @@ -56,10 +54,6 @@ return newReplicaSets(c, namespace) } -func (c *AppsV1beta2Client) Scales(namespace string) ScaleInterface { - return newScales(c, namespace) -} - func (c *AppsV1beta2Client) StatefulSets(namespace string) StatefulSetInterface { return newStatefulSets(c, namespace) } @@ -96,7 +90,7 @@ gv := v1beta2.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/controllerrevision.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta2 import ( + "time" + v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of ControllerRevisions that match those selectors. func (c *controllerRevisions) List(opts v1.ListOptions) (result *v1beta2.ControllerRevisionList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta2.ControllerRevisionList{} err = c.client.Get(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested controllerRevisions. func (c *controllerRevisions) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *controllerRevisions) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("controllerrevisions"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/daemonset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta2 import ( + "time" + v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of DaemonSets that match those selectors. func (c *daemonSets) List(opts v1.ListOptions) (result *v1beta2.DaemonSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta2.DaemonSetList{} err = c.client.Get(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested daemonSets. func (c *daemonSets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *daemonSets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/deployment.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta2 import ( + "time" + v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of Deployments that match those selectors. func (c *deployments) List(opts v1.ListOptions) (result *v1beta2.DeploymentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta2.DeploymentList{} err = c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested deployments. func (c *deployments) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *deployments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("deployments"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -26,6 +26,4 @@ type ReplicaSetExpansion interface{} -type ScaleExpansion interface{} - type StatefulSetExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/replicaset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta2 import ( + "time" + v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of ReplicaSets that match those selectors. func (c *replicaSets) List(opts v1.ListOptions) (result *v1beta2.ReplicaSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta2.ReplicaSetList{} err = c.client.Get(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested replicaSets. func (c *replicaSets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *replicaSets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/scale.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta2 - -import ( - rest "k8s.io/client-go/rest" -) - -// ScalesGetter has a method to return a ScaleInterface. -// A group's client should implement this interface. -type ScalesGetter interface { - Scales(namespace string) ScaleInterface -} - -// ScaleInterface has methods to work with Scale resources. -type ScaleInterface interface { - ScaleExpansion -} - -// scales implements ScaleInterface -type scales struct { - client rest.Interface - ns string -} - -// newScales returns a Scales -func newScales(c *AppsV1beta2Client, namespace string) *scales { - return &scales{ - client: c.RESTClient(), - ns: namespace, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/statefulset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta2 import ( + "time" + v1beta2 "k8s.io/api/apps/v1beta2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -79,11 +81,16 @@ // List takes label and field selectors, and returns the list of StatefulSets that match those selectors. func (c *statefulSets) List(opts v1.ListOptions) (result *v1beta2.StatefulSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta2.StatefulSetList{} err = c.client.Get(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -91,11 +98,16 @@ // Watch returns a watch.Interface that watches the requested statefulSets. func (c *statefulSets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -153,10 +165,15 @@ // DeleteCollection deletes a collection of objects. func (c *statefulSets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("statefulsets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditregistration_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditregistration_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditregistration_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditregistration_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "k8s.io/api/auditregistration/v1alpha1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type AuditregistrationV1alpha1Interface interface { + RESTClient() rest.Interface + AuditSinksGetter +} + +// AuditregistrationV1alpha1Client is used to interact with features provided by the auditregistration.k8s.io group. +type AuditregistrationV1alpha1Client struct { + restClient rest.Interface +} + +func (c *AuditregistrationV1alpha1Client) AuditSinks() AuditSinkInterface { + return newAuditSinks(c) +} + +// NewForConfig creates a new AuditregistrationV1alpha1Client for the given config. +func NewForConfig(c *rest.Config) (*AuditregistrationV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AuditregistrationV1alpha1Client{client}, nil +} + +// NewForConfigOrDie creates a new AuditregistrationV1alpha1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AuditregistrationV1alpha1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AuditregistrationV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *AuditregistrationV1alpha1Client { + return &AuditregistrationV1alpha1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1alpha1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AuditregistrationV1alpha1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "time" + + v1alpha1 "k8s.io/api/auditregistration/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// AuditSinksGetter has a method to return a AuditSinkInterface. +// A group's client should implement this interface. +type AuditSinksGetter interface { + AuditSinks() AuditSinkInterface +} + +// AuditSinkInterface has methods to work with AuditSink resources. +type AuditSinkInterface interface { + Create(*v1alpha1.AuditSink) (*v1alpha1.AuditSink, error) + Update(*v1alpha1.AuditSink) (*v1alpha1.AuditSink, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1alpha1.AuditSink, error) + List(opts v1.ListOptions) (*v1alpha1.AuditSinkList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.AuditSink, err error) + AuditSinkExpansion +} + +// auditSinks implements AuditSinkInterface +type auditSinks struct { + client rest.Interface +} + +// newAuditSinks returns a AuditSinks +func newAuditSinks(c *AuditregistrationV1alpha1Client) *auditSinks { + return &auditSinks{ + client: c.RESTClient(), + } +} + +// Get takes name of the auditSink, and returns the corresponding auditSink object, and an error if there is any. +func (c *auditSinks) Get(name string, options v1.GetOptions) (result *v1alpha1.AuditSink, err error) { + result = &v1alpha1.AuditSink{} + err = c.client.Get(). + Resource("auditsinks"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of AuditSinks that match those selectors. +func (c *auditSinks) List(opts v1.ListOptions) (result *v1alpha1.AuditSinkList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.AuditSinkList{} + err = c.client.Get(). + Resource("auditsinks"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested auditSinks. +func (c *auditSinks) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("auditsinks"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a auditSink and creates it. Returns the server's representation of the auditSink, and an error, if there is any. +func (c *auditSinks) Create(auditSink *v1alpha1.AuditSink) (result *v1alpha1.AuditSink, err error) { + result = &v1alpha1.AuditSink{} + err = c.client.Post(). + Resource("auditsinks"). + Body(auditSink). + Do(). + Into(result) + return +} + +// Update takes the representation of a auditSink and updates it. Returns the server's representation of the auditSink, and an error, if there is any. +func (c *auditSinks) Update(auditSink *v1alpha1.AuditSink) (result *v1alpha1.AuditSink, err error) { + result = &v1alpha1.AuditSink{} + err = c.client.Put(). + Resource("auditsinks"). + Name(auditSink.Name). + Body(auditSink). + Do(). + Into(result) + return +} + +// Delete takes name of the auditSink and deletes it. Returns an error if one occurs. +func (c *auditSinks) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("auditsinks"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *auditSinks) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("auditsinks"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched auditSink. +func (c *auditSinks) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.AuditSink, err error) { + result = &v1alpha1.AuditSink{} + err = c.client.Patch(pt). + Resource("auditsinks"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1alpha1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +type AuditSinkExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/authentication/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/authentication/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/authorization/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -86,7 +85,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/authorization/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -86,7 +85,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/autoscaling/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/horizontalpodautoscaler.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/autoscaling/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.HorizontalPodAutoscaler) (*v1.HorizontalPodAutoscaler, error) Update(*v1.HorizontalPodAutoscaler) (*v1.HorizontalPodAutoscaler, error) UpdateStatus(*v1.HorizontalPodAutoscaler) (*v1.HorizontalPodAutoscaler, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.HorizontalPodAutoscaler, error) - List(opts meta_v1.ListOptions) (*v1.HorizontalPodAutoscalerList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.HorizontalPodAutoscaler, error) + List(opts metav1.ListOptions) (*v1.HorizontalPodAutoscalerList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.HorizontalPodAutoscaler, err error) HorizontalPodAutoscalerExpansion } @@ -62,7 +64,7 @@ } // Get takes name of the horizontalPodAutoscaler, and returns the corresponding horizontalPodAutoscaler object, and an error if there is any. -func (c *horizontalPodAutoscalers) Get(name string, options meta_v1.GetOptions) (result *v1.HorizontalPodAutoscaler, err error) { +func (c *horizontalPodAutoscalers) Get(name string, options metav1.GetOptions) (result *v1.HorizontalPodAutoscaler, err error) { result = &v1.HorizontalPodAutoscaler{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +77,34 @@ } // List takes label and field selectors, and returns the list of HorizontalPodAutoscalers that match those selectors. -func (c *horizontalPodAutoscalers) List(opts meta_v1.ListOptions) (result *v1.HorizontalPodAutoscalerList, err error) { +func (c *horizontalPodAutoscalers) List(opts metav1.ListOptions) (result *v1.HorizontalPodAutoscalerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.HorizontalPodAutoscalerList{} err = c.client.Get(). Namespace(c.ns). Resource("horizontalpodautoscalers"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested horizontalPodAutoscalers. -func (c *horizontalPodAutoscalers) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *horizontalPodAutoscalers) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("horizontalpodautoscalers"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +150,7 @@ } // Delete takes name of the horizontalPodAutoscaler and deletes it. Returns an error if one occurs. -func (c *horizontalPodAutoscalers) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *horizontalPodAutoscalers) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("horizontalpodautoscalers"). @@ -149,11 +161,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *horizontalPodAutoscalers) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *horizontalPodAutoscalers) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("horizontalpodautoscalers"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v2beta1 "k8s.io/api/autoscaling/v2beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v2beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/horizontalpodautoscaler.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v2beta1 import ( + "time" + v2beta1 "k8s.io/api/autoscaling/v2beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of HorizontalPodAutoscalers that match those selectors. func (c *horizontalPodAutoscalers) List(opts v1.ListOptions) (result *v2beta1.HorizontalPodAutoscalerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v2beta1.HorizontalPodAutoscalerList{} err = c.client.Get(). Namespace(c.ns). Resource("horizontalpodautoscalers"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested horizontalPodAutoscalers. func (c *horizontalPodAutoscalers) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("horizontalpodautoscalers"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *horizontalPodAutoscalers) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("horizontalpodautoscalers"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v2beta2 + +import ( + v2beta2 "k8s.io/api/autoscaling/v2beta2" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type AutoscalingV2beta2Interface interface { + RESTClient() rest.Interface + HorizontalPodAutoscalersGetter +} + +// AutoscalingV2beta2Client is used to interact with features provided by the autoscaling group. +type AutoscalingV2beta2Client struct { + restClient rest.Interface +} + +func (c *AutoscalingV2beta2Client) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface { + return newHorizontalPodAutoscalers(c, namespace) +} + +// NewForConfig creates a new AutoscalingV2beta2Client for the given config. +func NewForConfig(c *rest.Config) (*AutoscalingV2beta2Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AutoscalingV2beta2Client{client}, nil +} + +// NewForConfigOrDie creates a new AutoscalingV2beta2Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AutoscalingV2beta2Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AutoscalingV2beta2Client for the given RESTClient. +func New(c rest.Interface) *AutoscalingV2beta2Client { + return &AutoscalingV2beta2Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v2beta2.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AutoscalingV2beta2Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v2beta2 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v2beta2 + +type HorizontalPodAutoscalerExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/horizontalpodautoscaler.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,191 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v2beta2 + +import ( + "time" + + v2beta2 "k8s.io/api/autoscaling/v2beta2" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// HorizontalPodAutoscalersGetter has a method to return a HorizontalPodAutoscalerInterface. +// A group's client should implement this interface. +type HorizontalPodAutoscalersGetter interface { + HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface +} + +// HorizontalPodAutoscalerInterface has methods to work with HorizontalPodAutoscaler resources. +type HorizontalPodAutoscalerInterface interface { + Create(*v2beta2.HorizontalPodAutoscaler) (*v2beta2.HorizontalPodAutoscaler, error) + Update(*v2beta2.HorizontalPodAutoscaler) (*v2beta2.HorizontalPodAutoscaler, error) + UpdateStatus(*v2beta2.HorizontalPodAutoscaler) (*v2beta2.HorizontalPodAutoscaler, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v2beta2.HorizontalPodAutoscaler, error) + List(opts v1.ListOptions) (*v2beta2.HorizontalPodAutoscalerList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2beta2.HorizontalPodAutoscaler, err error) + HorizontalPodAutoscalerExpansion +} + +// horizontalPodAutoscalers implements HorizontalPodAutoscalerInterface +type horizontalPodAutoscalers struct { + client rest.Interface + ns string +} + +// newHorizontalPodAutoscalers returns a HorizontalPodAutoscalers +func newHorizontalPodAutoscalers(c *AutoscalingV2beta2Client, namespace string) *horizontalPodAutoscalers { + return &horizontalPodAutoscalers{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the horizontalPodAutoscaler, and returns the corresponding horizontalPodAutoscaler object, and an error if there is any. +func (c *horizontalPodAutoscalers) Get(name string, options v1.GetOptions) (result *v2beta2.HorizontalPodAutoscaler, err error) { + result = &v2beta2.HorizontalPodAutoscaler{} + err = c.client.Get(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of HorizontalPodAutoscalers that match those selectors. +func (c *horizontalPodAutoscalers) List(opts v1.ListOptions) (result *v2beta2.HorizontalPodAutoscalerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v2beta2.HorizontalPodAutoscalerList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested horizontalPodAutoscalers. +func (c *horizontalPodAutoscalers) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a horizontalPodAutoscaler and creates it. Returns the server's representation of the horizontalPodAutoscaler, and an error, if there is any. +func (c *horizontalPodAutoscalers) Create(horizontalPodAutoscaler *v2beta2.HorizontalPodAutoscaler) (result *v2beta2.HorizontalPodAutoscaler, err error) { + result = &v2beta2.HorizontalPodAutoscaler{} + err = c.client.Post(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Body(horizontalPodAutoscaler). + Do(). + Into(result) + return +} + +// Update takes the representation of a horizontalPodAutoscaler and updates it. Returns the server's representation of the horizontalPodAutoscaler, and an error, if there is any. +func (c *horizontalPodAutoscalers) Update(horizontalPodAutoscaler *v2beta2.HorizontalPodAutoscaler) (result *v2beta2.HorizontalPodAutoscaler, err error) { + result = &v2beta2.HorizontalPodAutoscaler{} + err = c.client.Put(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(horizontalPodAutoscaler.Name). + Body(horizontalPodAutoscaler). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *horizontalPodAutoscalers) UpdateStatus(horizontalPodAutoscaler *v2beta2.HorizontalPodAutoscaler) (result *v2beta2.HorizontalPodAutoscaler, err error) { + result = &v2beta2.HorizontalPodAutoscaler{} + err = c.client.Put(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(horizontalPodAutoscaler.Name). + SubResource("status"). + Body(horizontalPodAutoscaler). + Do(). + Into(result) + return +} + +// Delete takes name of the horizontalPodAutoscaler and deletes it. Returns an error if one occurs. +func (c *horizontalPodAutoscalers) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *horizontalPodAutoscalers) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched horizontalPodAutoscaler. +func (c *horizontalPodAutoscalers) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v2beta2.HorizontalPodAutoscaler, err error) { + result = &v2beta2.HorizontalPodAutoscaler{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/batch/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/job.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/batch/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.Job) (*v1.Job, error) Update(*v1.Job) (*v1.Job, error) UpdateStatus(*v1.Job) (*v1.Job, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Job, error) - List(opts meta_v1.ListOptions) (*v1.JobList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Job, error) + List(opts metav1.ListOptions) (*v1.JobList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Job, err error) JobExpansion } @@ -62,7 +64,7 @@ } // Get takes name of the job, and returns the corresponding job object, and an error if there is any. -func (c *jobs) Get(name string, options meta_v1.GetOptions) (result *v1.Job, err error) { +func (c *jobs) Get(name string, options metav1.GetOptions) (result *v1.Job, err error) { result = &v1.Job{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +77,34 @@ } // List takes label and field selectors, and returns the list of Jobs that match those selectors. -func (c *jobs) List(opts meta_v1.ListOptions) (result *v1.JobList, err error) { +func (c *jobs) List(opts metav1.ListOptions) (result *v1.JobList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.JobList{} err = c.client.Get(). Namespace(c.ns). Resource("jobs"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested jobs. -func (c *jobs) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *jobs) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("jobs"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +150,7 @@ } // Delete takes name of the job and deletes it. Returns an error if one occurs. -func (c *jobs) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *jobs) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("jobs"). @@ -149,11 +161,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *jobs) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *jobs) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("jobs"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/batch/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/cronjob.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/batch/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of CronJobs that match those selectors. func (c *cronJobs) List(opts v1.ListOptions) (result *v1beta1.CronJobList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.CronJobList{} err = c.client.Get(). Namespace(c.ns). Resource("cronjobs"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested cronJobs. func (c *cronJobs) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("cronjobs"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *cronJobs) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("cronjobs"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/batch_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v2alpha1 "k8s.io/api/batch/v2alpha1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v2alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/cronjob.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v2alpha1 import ( + "time" + v2alpha1 "k8s.io/api/batch/v2alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of CronJobs that match those selectors. func (c *cronJobs) List(opts v1.ListOptions) (result *v2alpha1.CronJobList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v2alpha1.CronJobList{} err = c.client.Get(). Namespace(c.ns). Resource("cronjobs"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested cronJobs. func (c *cronJobs) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("cronjobs"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *cronJobs) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("cronjobs"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/certificates/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/certificates/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -73,10 +75,15 @@ // List takes label and field selectors, and returns the list of CertificateSigningRequests that match those selectors. func (c *certificateSigningRequests) List(opts v1.ListOptions) (result *v1beta1.CertificateSigningRequestList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.CertificateSigningRequestList{} err = c.client.Get(). Resource("certificatesigningrequests"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -84,10 +91,15 @@ // Watch returns a watch.Interface that watches the requested certificateSigningRequests. func (c *certificateSigningRequests) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("certificatesigningrequests"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -141,9 +153,14 @@ // DeleteCollection deletes a collection of objects. func (c *certificateSigningRequests) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("certificatesigningrequests"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/coordination/v1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type CoordinationV1Interface interface { + RESTClient() rest.Interface + LeasesGetter +} + +// CoordinationV1Client is used to interact with features provided by the coordination.k8s.io group. +type CoordinationV1Client struct { + restClient rest.Interface +} + +func (c *CoordinationV1Client) Leases(namespace string) LeaseInterface { + return newLeases(c, namespace) +} + +// NewForConfig creates a new CoordinationV1Client for the given config. +func NewForConfig(c *rest.Config) (*CoordinationV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CoordinationV1Client{client}, nil +} + +// NewForConfigOrDie creates a new CoordinationV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *CoordinationV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new CoordinationV1Client for the given RESTClient. +func New(c rest.Interface) *CoordinationV1Client { + return &CoordinationV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *CoordinationV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type LeaseExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1/lease.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/coordination/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// LeasesGetter has a method to return a LeaseInterface. +// A group's client should implement this interface. +type LeasesGetter interface { + Leases(namespace string) LeaseInterface +} + +// LeaseInterface has methods to work with Lease resources. +type LeaseInterface interface { + Create(*v1.Lease) (*v1.Lease, error) + Update(*v1.Lease) (*v1.Lease, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Lease, error) + List(opts metav1.ListOptions) (*v1.LeaseList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Lease, err error) + LeaseExpansion +} + +// leases implements LeaseInterface +type leases struct { + client rest.Interface + ns string +} + +// newLeases returns a Leases +func newLeases(c *CoordinationV1Client, namespace string) *leases { + return &leases{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the lease, and returns the corresponding lease object, and an error if there is any. +func (c *leases) Get(name string, options metav1.GetOptions) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Leases that match those selectors. +func (c *leases) List(opts metav1.ListOptions) (result *v1.LeaseList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.LeaseList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested leases. +func (c *leases) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a lease and creates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Create(lease *v1.Lease) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Post(). + Namespace(c.ns). + Resource("leases"). + Body(lease). + Do(). + Into(result) + return +} + +// Update takes the representation of a lease and updates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Update(lease *v1.Lease) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Put(). + Namespace(c.ns). + Resource("leases"). + Name(lease.Name). + Body(lease). + Do(). + Into(result) + return +} + +// Delete takes name of the lease and deletes it. Returns an error if one occurs. +func (c *leases) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *leases) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched lease. +func (c *leases) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Lease, err error) { + result = &v1.Lease{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("leases"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/coordination/v1beta1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type CoordinationV1beta1Interface interface { + RESTClient() rest.Interface + LeasesGetter +} + +// CoordinationV1beta1Client is used to interact with features provided by the coordination.k8s.io group. +type CoordinationV1beta1Client struct { + restClient rest.Interface +} + +func (c *CoordinationV1beta1Client) Leases(namespace string) LeaseInterface { + return newLeases(c, namespace) +} + +// NewForConfig creates a new CoordinationV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*CoordinationV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CoordinationV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new CoordinationV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *CoordinationV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new CoordinationV1beta1Client for the given RESTClient. +func New(c rest.Interface) *CoordinationV1beta1Client { + return &CoordinationV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *CoordinationV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type LeaseExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/lease.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/coordination/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// LeasesGetter has a method to return a LeaseInterface. +// A group's client should implement this interface. +type LeasesGetter interface { + Leases(namespace string) LeaseInterface +} + +// LeaseInterface has methods to work with Lease resources. +type LeaseInterface interface { + Create(*v1beta1.Lease) (*v1beta1.Lease, error) + Update(*v1beta1.Lease) (*v1beta1.Lease, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.Lease, error) + List(opts v1.ListOptions) (*v1beta1.LeaseList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Lease, err error) + LeaseExpansion +} + +// leases implements LeaseInterface +type leases struct { + client rest.Interface + ns string +} + +// newLeases returns a Leases +func newLeases(c *CoordinationV1beta1Client, namespace string) *leases { + return &leases{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the lease, and returns the corresponding lease object, and an error if there is any. +func (c *leases) Get(name string, options v1.GetOptions) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Leases that match those selectors. +func (c *leases) List(opts v1.ListOptions) (result *v1beta1.LeaseList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.LeaseList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested leases. +func (c *leases) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a lease and creates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Create(lease *v1beta1.Lease) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Post(). + Namespace(c.ns). + Resource("leases"). + Body(lease). + Do(). + Into(result) + return +} + +// Update takes the representation of a lease and updates it. Returns the server's representation of the lease, and an error, if there is any. +func (c *leases) Update(lease *v1beta1.Lease) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Put(). + Namespace(c.ns). + Resource("leases"). + Name(lease.Name). + Body(lease). + Do(). + Into(result) + return +} + +// Delete takes name of the lease and deletes it. Returns an error if one occurs. +func (c *leases) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *leases) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("leases"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched lease. +func (c *leases) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Lease, err error) { + result = &v1beta1.Lease{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("leases"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/componentstatus.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type ComponentStatusInterface interface { Create(*v1.ComponentStatus) (*v1.ComponentStatus, error) Update(*v1.ComponentStatus) (*v1.ComponentStatus, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ComponentStatus, error) - List(opts meta_v1.ListOptions) (*v1.ComponentStatusList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ComponentStatus, error) + List(opts metav1.ListOptions) (*v1.ComponentStatusList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ComponentStatus, err error) ComponentStatusExpansion } @@ -59,7 +61,7 @@ } // Get takes name of the componentStatus, and returns the corresponding componentStatus object, and an error if there is any. -func (c *componentStatuses) Get(name string, options meta_v1.GetOptions) (result *v1.ComponentStatus, err error) { +func (c *componentStatuses) Get(name string, options metav1.GetOptions) (result *v1.ComponentStatus, err error) { result = &v1.ComponentStatus{} err = c.client.Get(). Resource("componentstatuses"). @@ -71,22 +73,32 @@ } // List takes label and field selectors, and returns the list of ComponentStatuses that match those selectors. -func (c *componentStatuses) List(opts meta_v1.ListOptions) (result *v1.ComponentStatusList, err error) { +func (c *componentStatuses) List(opts metav1.ListOptions) (result *v1.ComponentStatusList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ComponentStatusList{} err = c.client.Get(). Resource("componentstatuses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested componentStatuses. -func (c *componentStatuses) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *componentStatuses) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("componentstatuses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -114,7 +126,7 @@ } // Delete takes name of the componentStatus and deletes it. Returns an error if one occurs. -func (c *componentStatuses) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *componentStatuses) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("componentstatuses"). Name(name). @@ -124,10 +136,15 @@ } // DeleteCollection deletes a collection of objects. -func (c *componentStatuses) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *componentStatuses) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("componentstatuses"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/configmap.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type ConfigMapInterface interface { Create(*v1.ConfigMap) (*v1.ConfigMap, error) Update(*v1.ConfigMap) (*v1.ConfigMap, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ConfigMap, error) - List(opts meta_v1.ListOptions) (*v1.ConfigMapList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ConfigMap, error) + List(opts metav1.ListOptions) (*v1.ConfigMapList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ConfigMap, err error) ConfigMapExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the configMap, and returns the corresponding configMap object, and an error if there is any. -func (c *configMaps) Get(name string, options meta_v1.GetOptions) (result *v1.ConfigMap, err error) { +func (c *configMaps) Get(name string, options metav1.GetOptions) (result *v1.ConfigMap, err error) { result = &v1.ConfigMap{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of ConfigMaps that match those selectors. -func (c *configMaps) List(opts meta_v1.ListOptions) (result *v1.ConfigMapList, err error) { +func (c *configMaps) List(opts metav1.ListOptions) (result *v1.ConfigMapList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ConfigMapList{} err = c.client.Get(). Namespace(c.ns). Resource("configmaps"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested configMaps. -func (c *configMaps) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *configMaps) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("configmaps"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the configMap and deletes it. Returns an error if one occurs. -func (c *configMaps) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *configMaps) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("configmaps"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *configMaps) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *configMaps) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("configmaps"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/core/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -146,7 +145,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/api" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/endpoints.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type EndpointsInterface interface { Create(*v1.Endpoints) (*v1.Endpoints, error) Update(*v1.Endpoints) (*v1.Endpoints, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Endpoints, error) - List(opts meta_v1.ListOptions) (*v1.EndpointsList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Endpoints, error) + List(opts metav1.ListOptions) (*v1.EndpointsList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Endpoints, err error) EndpointsExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the endpoints, and returns the corresponding endpoints object, and an error if there is any. -func (c *endpoints) Get(name string, options meta_v1.GetOptions) (result *v1.Endpoints, err error) { +func (c *endpoints) Get(name string, options metav1.GetOptions) (result *v1.Endpoints, err error) { result = &v1.Endpoints{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of Endpoints that match those selectors. -func (c *endpoints) List(opts meta_v1.ListOptions) (result *v1.EndpointsList, err error) { +func (c *endpoints) List(opts metav1.ListOptions) (result *v1.EndpointsList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.EndpointsList{} err = c.client.Get(). Namespace(c.ns). Resource("endpoints"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested endpoints. -func (c *endpoints) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *endpoints) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("endpoints"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the endpoints and deletes it. Returns an error if one occurs. -func (c *endpoints) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *endpoints) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("endpoints"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *endpoints) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *endpoints) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("endpoints"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/event.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type EventInterface interface { Create(*v1.Event) (*v1.Event, error) Update(*v1.Event) (*v1.Event, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Event, error) - List(opts meta_v1.ListOptions) (*v1.EventList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Event, error) + List(opts metav1.ListOptions) (*v1.EventList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Event, err error) EventExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the event, and returns the corresponding event object, and an error if there is any. -func (c *events) Get(name string, options meta_v1.GetOptions) (result *v1.Event, err error) { +func (c *events) Get(name string, options metav1.GetOptions) (result *v1.Event, err error) { result = &v1.Event{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of Events that match those selectors. -func (c *events) List(opts meta_v1.ListOptions) (result *v1.EventList, err error) { +func (c *events) List(opts metav1.ListOptions) (result *v1.EventList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.EventList{} err = c.client.Get(). Namespace(c.ns). Resource("events"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested events. -func (c *events) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *events) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("events"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the event and deletes it. Returns an error if one occurs. -func (c *events) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *events) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("events"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *events) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *events) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("events"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/limitrange.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type LimitRangeInterface interface { Create(*v1.LimitRange) (*v1.LimitRange, error) Update(*v1.LimitRange) (*v1.LimitRange, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.LimitRange, error) - List(opts meta_v1.ListOptions) (*v1.LimitRangeList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.LimitRange, error) + List(opts metav1.ListOptions) (*v1.LimitRangeList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.LimitRange, err error) LimitRangeExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the limitRange, and returns the corresponding limitRange object, and an error if there is any. -func (c *limitRanges) Get(name string, options meta_v1.GetOptions) (result *v1.LimitRange, err error) { +func (c *limitRanges) Get(name string, options metav1.GetOptions) (result *v1.LimitRange, err error) { result = &v1.LimitRange{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of LimitRanges that match those selectors. -func (c *limitRanges) List(opts meta_v1.ListOptions) (result *v1.LimitRangeList, err error) { +func (c *limitRanges) List(opts metav1.ListOptions) (result *v1.LimitRangeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.LimitRangeList{} err = c.client.Get(). Namespace(c.ns). Resource("limitranges"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested limitRanges. -func (c *limitRanges) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *limitRanges) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("limitranges"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the limitRange and deletes it. Returns an error if one occurs. -func (c *limitRanges) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *limitRanges) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("limitranges"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *limitRanges) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *limitRanges) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("limitranges"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,10 +40,10 @@ Create(*v1.Namespace) (*v1.Namespace, error) Update(*v1.Namespace) (*v1.Namespace, error) UpdateStatus(*v1.Namespace) (*v1.Namespace, error) - Delete(name string, options *meta_v1.DeleteOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Namespace, error) - List(opts meta_v1.ListOptions) (*v1.NamespaceList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + Get(name string, options metav1.GetOptions) (*v1.Namespace, error) + List(opts metav1.ListOptions) (*v1.NamespaceList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Namespace, err error) NamespaceExpansion } @@ -59,7 +61,7 @@ } // Get takes name of the namespace, and returns the corresponding namespace object, and an error if there is any. -func (c *namespaces) Get(name string, options meta_v1.GetOptions) (result *v1.Namespace, err error) { +func (c *namespaces) Get(name string, options metav1.GetOptions) (result *v1.Namespace, err error) { result = &v1.Namespace{} err = c.client.Get(). Resource("namespaces"). @@ -71,22 +73,32 @@ } // List takes label and field selectors, and returns the list of Namespaces that match those selectors. -func (c *namespaces) List(opts meta_v1.ListOptions) (result *v1.NamespaceList, err error) { +func (c *namespaces) List(opts metav1.ListOptions) (result *v1.NamespaceList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.NamespaceList{} err = c.client.Get(). Resource("namespaces"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested namespaces. -func (c *namespaces) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *namespaces) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("namespaces"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -129,7 +141,7 @@ } // Delete takes name of the namespace and deletes it. Returns an error if one occurs. -func (c *namespaces) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *namespaces) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("namespaces"). Name(name). diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/node.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.Node) (*v1.Node, error) Update(*v1.Node) (*v1.Node, error) UpdateStatus(*v1.Node) (*v1.Node, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Node, error) - List(opts meta_v1.ListOptions) (*v1.NodeList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Node, error) + List(opts metav1.ListOptions) (*v1.NodeList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Node, err error) NodeExpansion } @@ -60,7 +62,7 @@ } // Get takes name of the node, and returns the corresponding node object, and an error if there is any. -func (c *nodes) Get(name string, options meta_v1.GetOptions) (result *v1.Node, err error) { +func (c *nodes) Get(name string, options metav1.GetOptions) (result *v1.Node, err error) { result = &v1.Node{} err = c.client.Get(). Resource("nodes"). @@ -72,22 +74,32 @@ } // List takes label and field selectors, and returns the list of Nodes that match those selectors. -func (c *nodes) List(opts meta_v1.ListOptions) (result *v1.NodeList, err error) { +func (c *nodes) List(opts metav1.ListOptions) (result *v1.NodeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.NodeList{} err = c.client.Get(). Resource("nodes"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested nodes. -func (c *nodes) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *nodes) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("nodes"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -130,7 +142,7 @@ } // Delete takes name of the node and deletes it. Returns an error if one occurs. -func (c *nodes) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *nodes) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("nodes"). Name(name). @@ -140,10 +152,15 @@ } // DeleteCollection deletes a collection of objects. -func (c *nodes) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *nodes) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("nodes"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolumeclaim.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.PersistentVolumeClaim) (*v1.PersistentVolumeClaim, error) Update(*v1.PersistentVolumeClaim) (*v1.PersistentVolumeClaim, error) UpdateStatus(*v1.PersistentVolumeClaim) (*v1.PersistentVolumeClaim, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.PersistentVolumeClaim, error) - List(opts meta_v1.ListOptions) (*v1.PersistentVolumeClaimList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.PersistentVolumeClaim, error) + List(opts metav1.ListOptions) (*v1.PersistentVolumeClaimList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PersistentVolumeClaim, err error) PersistentVolumeClaimExpansion } @@ -62,7 +64,7 @@ } // Get takes name of the persistentVolumeClaim, and returns the corresponding persistentVolumeClaim object, and an error if there is any. -func (c *persistentVolumeClaims) Get(name string, options meta_v1.GetOptions) (result *v1.PersistentVolumeClaim, err error) { +func (c *persistentVolumeClaims) Get(name string, options metav1.GetOptions) (result *v1.PersistentVolumeClaim, err error) { result = &v1.PersistentVolumeClaim{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +77,34 @@ } // List takes label and field selectors, and returns the list of PersistentVolumeClaims that match those selectors. -func (c *persistentVolumeClaims) List(opts meta_v1.ListOptions) (result *v1.PersistentVolumeClaimList, err error) { +func (c *persistentVolumeClaims) List(opts metav1.ListOptions) (result *v1.PersistentVolumeClaimList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.PersistentVolumeClaimList{} err = c.client.Get(). Namespace(c.ns). Resource("persistentvolumeclaims"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested persistentVolumeClaims. -func (c *persistentVolumeClaims) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *persistentVolumeClaims) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("persistentvolumeclaims"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +150,7 @@ } // Delete takes name of the persistentVolumeClaim and deletes it. Returns an error if one occurs. -func (c *persistentVolumeClaims) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *persistentVolumeClaims) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("persistentvolumeclaims"). @@ -149,11 +161,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *persistentVolumeClaims) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *persistentVolumeClaims) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("persistentvolumeclaims"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/persistentvolume.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.PersistentVolume) (*v1.PersistentVolume, error) Update(*v1.PersistentVolume) (*v1.PersistentVolume, error) UpdateStatus(*v1.PersistentVolume) (*v1.PersistentVolume, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.PersistentVolume, error) - List(opts meta_v1.ListOptions) (*v1.PersistentVolumeList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.PersistentVolume, error) + List(opts metav1.ListOptions) (*v1.PersistentVolumeList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PersistentVolume, err error) PersistentVolumeExpansion } @@ -60,7 +62,7 @@ } // Get takes name of the persistentVolume, and returns the corresponding persistentVolume object, and an error if there is any. -func (c *persistentVolumes) Get(name string, options meta_v1.GetOptions) (result *v1.PersistentVolume, err error) { +func (c *persistentVolumes) Get(name string, options metav1.GetOptions) (result *v1.PersistentVolume, err error) { result = &v1.PersistentVolume{} err = c.client.Get(). Resource("persistentvolumes"). @@ -72,22 +74,32 @@ } // List takes label and field selectors, and returns the list of PersistentVolumes that match those selectors. -func (c *persistentVolumes) List(opts meta_v1.ListOptions) (result *v1.PersistentVolumeList, err error) { +func (c *persistentVolumes) List(opts metav1.ListOptions) (result *v1.PersistentVolumeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.PersistentVolumeList{} err = c.client.Get(). Resource("persistentvolumes"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested persistentVolumes. -func (c *persistentVolumes) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *persistentVolumes) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("persistentvolumes"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -130,7 +142,7 @@ } // Delete takes name of the persistentVolume and deletes it. Returns an error if one occurs. -func (c *persistentVolumes) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *persistentVolumes) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("persistentvolumes"). Name(name). @@ -140,10 +152,15 @@ } // DeleteCollection deletes a collection of objects. -func (c *persistentVolumes) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *persistentVolumes) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("persistentvolumes"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/pod.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,12 +40,15 @@ Create(*v1.Pod) (*v1.Pod, error) Update(*v1.Pod) (*v1.Pod, error) UpdateStatus(*v1.Pod) (*v1.Pod, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Pod, error) - List(opts meta_v1.ListOptions) (*v1.PodList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Pod, error) + List(opts metav1.ListOptions) (*v1.PodList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Pod, err error) + GetEphemeralContainers(podName string, options metav1.GetOptions) (*v1.EphemeralContainers, error) + UpdateEphemeralContainers(podName string, ephemeralContainers *v1.EphemeralContainers) (*v1.EphemeralContainers, error) + PodExpansion } @@ -62,7 +67,7 @@ } // Get takes name of the pod, and returns the corresponding pod object, and an error if there is any. -func (c *pods) Get(name string, options meta_v1.GetOptions) (result *v1.Pod, err error) { +func (c *pods) Get(name string, options metav1.GetOptions) (result *v1.Pod, err error) { result = &v1.Pod{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +80,34 @@ } // List takes label and field selectors, and returns the list of Pods that match those selectors. -func (c *pods) List(opts meta_v1.ListOptions) (result *v1.PodList, err error) { +func (c *pods) List(opts metav1.ListOptions) (result *v1.PodList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.PodList{} err = c.client.Get(). Namespace(c.ns). Resource("pods"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested pods. -func (c *pods) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *pods) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("pods"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +153,7 @@ } // Delete takes name of the pod and deletes it. Returns an error if one occurs. -func (c *pods) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *pods) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("pods"). @@ -149,11 +164,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *pods) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *pods) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("pods"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() @@ -171,4 +191,32 @@ Do(). Into(result) return +} + +// GetEphemeralContainers takes name of the pod, and returns the corresponding v1.EphemeralContainers object, and an error if there is any. +func (c *pods) GetEphemeralContainers(podName string, options metav1.GetOptions) (result *v1.EphemeralContainers, err error) { + result = &v1.EphemeralContainers{} + err = c.client.Get(). + Namespace(c.ns). + Resource("pods"). + Name(podName). + SubResource("ephemeralcontainers"). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// UpdateEphemeralContainers takes the top resource name and the representation of a ephemeralContainers and updates it. Returns the server's representation of the ephemeralContainers, and an error, if there is any. +func (c *pods) UpdateEphemeralContainers(podName string, ephemeralContainers *v1.EphemeralContainers) (result *v1.EphemeralContainers, err error) { + result = &v1.EphemeralContainers{} + err = c.client.Put(). + Namespace(c.ns). + Resource("pods"). + Name(podName). + SubResource("ephemeralcontainers"). + Body(ephemeralContainers). + Do(). + Into(result) + return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/podtemplate.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type PodTemplateInterface interface { Create(*v1.PodTemplate) (*v1.PodTemplate, error) Update(*v1.PodTemplate) (*v1.PodTemplate, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.PodTemplate, error) - List(opts meta_v1.ListOptions) (*v1.PodTemplateList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.PodTemplate, error) + List(opts metav1.ListOptions) (*v1.PodTemplateList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PodTemplate, err error) PodTemplateExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the podTemplate, and returns the corresponding podTemplate object, and an error if there is any. -func (c *podTemplates) Get(name string, options meta_v1.GetOptions) (result *v1.PodTemplate, err error) { +func (c *podTemplates) Get(name string, options metav1.GetOptions) (result *v1.PodTemplate, err error) { result = &v1.PodTemplate{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of PodTemplates that match those selectors. -func (c *podTemplates) List(opts meta_v1.ListOptions) (result *v1.PodTemplateList, err error) { +func (c *podTemplates) List(opts metav1.ListOptions) (result *v1.PodTemplateList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.PodTemplateList{} err = c.client.Get(). Namespace(c.ns). Resource("podtemplates"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested podTemplates. -func (c *podTemplates) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *podTemplates) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("podtemplates"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the podTemplate and deletes it. Returns an error if one occurs. -func (c *podTemplates) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *podTemplates) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("podtemplates"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *podTemplates) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *podTemplates) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("podtemplates"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/replicationcontroller.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,9 +19,11 @@ package v1 import ( + "time" + + autoscalingv1 "k8s.io/api/autoscaling/v1" v1 "k8s.io/api/core/v1" - v1beta1 "k8s.io/api/extensions/v1beta1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -39,14 +41,14 @@ Create(*v1.ReplicationController) (*v1.ReplicationController, error) Update(*v1.ReplicationController) (*v1.ReplicationController, error) UpdateStatus(*v1.ReplicationController) (*v1.ReplicationController, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ReplicationController, error) - List(opts meta_v1.ListOptions) (*v1.ReplicationControllerList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ReplicationController, error) + List(opts metav1.ListOptions) (*v1.ReplicationControllerList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ReplicationController, err error) - GetScale(replicationControllerName string, options meta_v1.GetOptions) (*v1beta1.Scale, error) - UpdateScale(replicationControllerName string, scale *v1beta1.Scale) (*v1beta1.Scale, error) + GetScale(replicationControllerName string, options metav1.GetOptions) (*autoscalingv1.Scale, error) + UpdateScale(replicationControllerName string, scale *autoscalingv1.Scale) (*autoscalingv1.Scale, error) ReplicationControllerExpansion } @@ -66,7 +68,7 @@ } // Get takes name of the replicationController, and returns the corresponding replicationController object, and an error if there is any. -func (c *replicationControllers) Get(name string, options meta_v1.GetOptions) (result *v1.ReplicationController, err error) { +func (c *replicationControllers) Get(name string, options metav1.GetOptions) (result *v1.ReplicationController, err error) { result = &v1.ReplicationController{} err = c.client.Get(). Namespace(c.ns). @@ -79,24 +81,34 @@ } // List takes label and field selectors, and returns the list of ReplicationControllers that match those selectors. -func (c *replicationControllers) List(opts meta_v1.ListOptions) (result *v1.ReplicationControllerList, err error) { +func (c *replicationControllers) List(opts metav1.ListOptions) (result *v1.ReplicationControllerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ReplicationControllerList{} err = c.client.Get(). Namespace(c.ns). Resource("replicationcontrollers"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested replicationControllers. -func (c *replicationControllers) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *replicationControllers) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("replicationcontrollers"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -142,7 +154,7 @@ } // Delete takes name of the replicationController and deletes it. Returns an error if one occurs. -func (c *replicationControllers) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *replicationControllers) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("replicationcontrollers"). @@ -153,11 +165,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *replicationControllers) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *replicationControllers) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("replicationcontrollers"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() @@ -177,9 +194,9 @@ return } -// GetScale takes name of the replicationController, and returns the corresponding v1beta1.Scale object, and an error if there is any. -func (c *replicationControllers) GetScale(replicationControllerName string, options meta_v1.GetOptions) (result *v1beta1.Scale, err error) { - result = &v1beta1.Scale{} +// GetScale takes name of the replicationController, and returns the corresponding autoscalingv1.Scale object, and an error if there is any. +func (c *replicationControllers) GetScale(replicationControllerName string, options metav1.GetOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} err = c.client.Get(). Namespace(c.ns). Resource("replicationcontrollers"). @@ -192,8 +209,8 @@ } // UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. -func (c *replicationControllers) UpdateScale(replicationControllerName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) { - result = &v1beta1.Scale{} +func (c *replicationControllers) UpdateScale(replicationControllerName string, scale *autoscalingv1.Scale) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} err = c.client.Put(). Namespace(c.ns). Resource("replicationcontrollers"). diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/resourcequota.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,11 +40,11 @@ Create(*v1.ResourceQuota) (*v1.ResourceQuota, error) Update(*v1.ResourceQuota) (*v1.ResourceQuota, error) UpdateStatus(*v1.ResourceQuota) (*v1.ResourceQuota, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ResourceQuota, error) - List(opts meta_v1.ListOptions) (*v1.ResourceQuotaList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ResourceQuota, error) + List(opts metav1.ListOptions) (*v1.ResourceQuotaList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ResourceQuota, err error) ResourceQuotaExpansion } @@ -62,7 +64,7 @@ } // Get takes name of the resourceQuota, and returns the corresponding resourceQuota object, and an error if there is any. -func (c *resourceQuotas) Get(name string, options meta_v1.GetOptions) (result *v1.ResourceQuota, err error) { +func (c *resourceQuotas) Get(name string, options metav1.GetOptions) (result *v1.ResourceQuota, err error) { result = &v1.ResourceQuota{} err = c.client.Get(). Namespace(c.ns). @@ -75,24 +77,34 @@ } // List takes label and field selectors, and returns the list of ResourceQuotas that match those selectors. -func (c *resourceQuotas) List(opts meta_v1.ListOptions) (result *v1.ResourceQuotaList, err error) { +func (c *resourceQuotas) List(opts metav1.ListOptions) (result *v1.ResourceQuotaList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ResourceQuotaList{} err = c.client.Get(). Namespace(c.ns). Resource("resourcequotas"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested resourceQuotas. -func (c *resourceQuotas) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *resourceQuotas) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("resourcequotas"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -138,7 +150,7 @@ } // Delete takes name of the resourceQuota and deletes it. Returns an error if one occurs. -func (c *resourceQuotas) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *resourceQuotas) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("resourcequotas"). @@ -149,11 +161,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *resourceQuotas) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *resourceQuotas) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("resourcequotas"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/secret.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type SecretInterface interface { Create(*v1.Secret) (*v1.Secret, error) Update(*v1.Secret) (*v1.Secret, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Secret, error) - List(opts meta_v1.ListOptions) (*v1.SecretList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Secret, error) + List(opts metav1.ListOptions) (*v1.SecretList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Secret, err error) SecretExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the secret, and returns the corresponding secret object, and an error if there is any. -func (c *secrets) Get(name string, options meta_v1.GetOptions) (result *v1.Secret, err error) { +func (c *secrets) Get(name string, options metav1.GetOptions) (result *v1.Secret, err error) { result = &v1.Secret{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of Secrets that match those selectors. -func (c *secrets) List(opts meta_v1.ListOptions) (result *v1.SecretList, err error) { +func (c *secrets) List(opts metav1.ListOptions) (result *v1.SecretList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.SecretList{} err = c.client.Get(). Namespace(c.ns). Resource("secrets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested secrets. -func (c *secrets) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *secrets) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("secrets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the secret and deletes it. Returns an error if one occurs. -func (c *secrets) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *secrets) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("secrets"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *secrets) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *secrets) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("secrets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/serviceaccount.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type ServiceAccountInterface interface { Create(*v1.ServiceAccount) (*v1.ServiceAccount, error) Update(*v1.ServiceAccount) (*v1.ServiceAccount, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ServiceAccount, error) - List(opts meta_v1.ListOptions) (*v1.ServiceAccountList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ServiceAccount, error) + List(opts metav1.ListOptions) (*v1.ServiceAccountList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ServiceAccount, err error) ServiceAccountExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the serviceAccount, and returns the corresponding serviceAccount object, and an error if there is any. -func (c *serviceAccounts) Get(name string, options meta_v1.GetOptions) (result *v1.ServiceAccount, err error) { +func (c *serviceAccounts) Get(name string, options metav1.GetOptions) (result *v1.ServiceAccount, err error) { result = &v1.ServiceAccount{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of ServiceAccounts that match those selectors. -func (c *serviceAccounts) List(opts meta_v1.ListOptions) (result *v1.ServiceAccountList, err error) { +func (c *serviceAccounts) List(opts metav1.ListOptions) (result *v1.ServiceAccountList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ServiceAccountList{} err = c.client.Get(). Namespace(c.ns). Resource("serviceaccounts"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested serviceAccounts. -func (c *serviceAccounts) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *serviceAccounts) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("serviceaccounts"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the serviceAccount and deletes it. Returns an error if one occurs. -func (c *serviceAccounts) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *serviceAccounts) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("serviceaccounts"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *serviceAccounts) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *serviceAccounts) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("serviceaccounts"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/core/v1/service.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/core/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -38,10 +40,10 @@ Create(*v1.Service) (*v1.Service, error) Update(*v1.Service) (*v1.Service, error) UpdateStatus(*v1.Service) (*v1.Service, error) - Delete(name string, options *meta_v1.DeleteOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Service, error) - List(opts meta_v1.ListOptions) (*v1.ServiceList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + Get(name string, options metav1.GetOptions) (*v1.Service, error) + List(opts metav1.ListOptions) (*v1.ServiceList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Service, err error) ServiceExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the service, and returns the corresponding service object, and an error if there is any. -func (c *services) Get(name string, options meta_v1.GetOptions) (result *v1.Service, err error) { +func (c *services) Get(name string, options metav1.GetOptions) (result *v1.Service, err error) { result = &v1.Service{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of Services that match those selectors. -func (c *services) List(opts meta_v1.ListOptions) (result *v1.ServiceList, err error) { +func (c *services) List(opts metav1.ListOptions) (result *v1.ServiceList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ServiceList{} err = c.client.Get(). Namespace(c.ns). Resource("services"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested services. -func (c *services) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *services) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("services"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -137,7 +149,7 @@ } // Delete takes name of the service and deletes it. Returns an error if one occurs. -func (c *services) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *services) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("services"). diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/discovery_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "k8s.io/api/discovery/v1alpha1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type DiscoveryV1alpha1Interface interface { + RESTClient() rest.Interface + EndpointSlicesGetter +} + +// DiscoveryV1alpha1Client is used to interact with features provided by the discovery.k8s.io group. +type DiscoveryV1alpha1Client struct { + restClient rest.Interface +} + +func (c *DiscoveryV1alpha1Client) EndpointSlices(namespace string) EndpointSliceInterface { + return newEndpointSlices(c, namespace) +} + +// NewForConfig creates a new DiscoveryV1alpha1Client for the given config. +func NewForConfig(c *rest.Config) (*DiscoveryV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &DiscoveryV1alpha1Client{client}, nil +} + +// NewForConfigOrDie creates a new DiscoveryV1alpha1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *DiscoveryV1alpha1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new DiscoveryV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *DiscoveryV1alpha1Client { + return &DiscoveryV1alpha1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1alpha1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *DiscoveryV1alpha1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1alpha1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/endpointslice.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "time" + + v1alpha1 "k8s.io/api/discovery/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// EndpointSlicesGetter has a method to return a EndpointSliceInterface. +// A group's client should implement this interface. +type EndpointSlicesGetter interface { + EndpointSlices(namespace string) EndpointSliceInterface +} + +// EndpointSliceInterface has methods to work with EndpointSlice resources. +type EndpointSliceInterface interface { + Create(*v1alpha1.EndpointSlice) (*v1alpha1.EndpointSlice, error) + Update(*v1alpha1.EndpointSlice) (*v1alpha1.EndpointSlice, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1alpha1.EndpointSlice, error) + List(opts v1.ListOptions) (*v1alpha1.EndpointSliceList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.EndpointSlice, err error) + EndpointSliceExpansion +} + +// endpointSlices implements EndpointSliceInterface +type endpointSlices struct { + client rest.Interface + ns string +} + +// newEndpointSlices returns a EndpointSlices +func newEndpointSlices(c *DiscoveryV1alpha1Client, namespace string) *endpointSlices { + return &endpointSlices{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the endpointSlice, and returns the corresponding endpointSlice object, and an error if there is any. +func (c *endpointSlices) Get(name string, options v1.GetOptions) (result *v1alpha1.EndpointSlice, err error) { + result = &v1alpha1.EndpointSlice{} + err = c.client.Get(). + Namespace(c.ns). + Resource("endpointslices"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of EndpointSlices that match those selectors. +func (c *endpointSlices) List(opts v1.ListOptions) (result *v1alpha1.EndpointSliceList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.EndpointSliceList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("endpointslices"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested endpointSlices. +func (c *endpointSlices) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("endpointslices"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a endpointSlice and creates it. Returns the server's representation of the endpointSlice, and an error, if there is any. +func (c *endpointSlices) Create(endpointSlice *v1alpha1.EndpointSlice) (result *v1alpha1.EndpointSlice, err error) { + result = &v1alpha1.EndpointSlice{} + err = c.client.Post(). + Namespace(c.ns). + Resource("endpointslices"). + Body(endpointSlice). + Do(). + Into(result) + return +} + +// Update takes the representation of a endpointSlice and updates it. Returns the server's representation of the endpointSlice, and an error, if there is any. +func (c *endpointSlices) Update(endpointSlice *v1alpha1.EndpointSlice) (result *v1alpha1.EndpointSlice, err error) { + result = &v1alpha1.EndpointSlice{} + err = c.client.Put(). + Namespace(c.ns). + Resource("endpointslices"). + Name(endpointSlice.Name). + Body(endpointSlice). + Do(). + Into(result) + return +} + +// Delete takes name of the endpointSlice and deletes it. Returns an error if one occurs. +func (c *endpointSlices) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("endpointslices"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *endpointSlices) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("endpointslices"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched endpointSlice. +func (c *endpointSlices) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.EndpointSlice, err error) { + result = &v1alpha1.EndpointSlice{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("endpointslices"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/discovery/v1alpha1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +type EndpointSliceExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,98 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "fmt" + + "k8s.io/api/events/v1beta1" + "k8s.io/apimachinery/pkg/types" +) + +// The EventExpansion interface allows manually adding extra methods to the EventInterface. +// TODO: Add querying functions to the event expansion +type EventExpansion interface { + // CreateWithEventNamespace is the same as a Create + // except that it sends the request to the event.Namespace. + CreateWithEventNamespace(event *v1beta1.Event) (*v1beta1.Event, error) + // UpdateWithEventNamespace is the same as a Update + // except that it sends the request to the event.Namespace. + UpdateWithEventNamespace(event *v1beta1.Event) (*v1beta1.Event, error) + // PatchWithEventNamespace is the same as an Update + // except that it sends the request to the event.Namespace. + PatchWithEventNamespace(event *v1beta1.Event, data []byte) (*v1beta1.Event, error) +} + +// CreateWithEventNamespace makes a new event. +// Returns the copy of the event the server returns, or an error. +// The namespace to create the event within is deduced from the event. +// it must either match this event client's namespace, or this event client must +// have been created with the "" namespace. +func (e *events) CreateWithEventNamespace(event *v1beta1.Event) (*v1beta1.Event, error) { + if e.ns != "" && event.Namespace != e.ns { + return nil, fmt.Errorf("can't create an event with namespace '%v' in namespace '%v'", event.Namespace, e.ns) + } + result := &v1beta1.Event{} + err := e.client.Post(). + NamespaceIfScoped(event.Namespace, len(event.Namespace) > 0). + Resource("events"). + Body(event). + Do(). + Into(result) + return result, err +} + +// UpdateWithEventNamespace modifies an existing event. +// It returns the copy of the event that the server returns, or an error. +// The namespace and key to update the event within is deduced from the event. +// The namespace must either match this event client's namespace, or this event client must have been +// created with the "" namespace. +// Update also requires the ResourceVersion to be set in the event object. +func (e *events) UpdateWithEventNamespace(event *v1beta1.Event) (*v1beta1.Event, error) { + if e.ns != "" && event.Namespace != e.ns { + return nil, fmt.Errorf("can't update an event with namespace '%v' in namespace '%v'", event.Namespace, e.ns) + } + result := &v1beta1.Event{} + err := e.client.Put(). + NamespaceIfScoped(event.Namespace, len(event.Namespace) > 0). + Resource("events"). + Name(event.Name). + Body(event). + Do(). + Into(result) + return result, err +} + +// PatchWithEventNamespace modifies an existing event. +// It returns the copy of the event that the server returns, or an error. +// The namespace and name of the target event is deduced from the event. +// The namespace must either match this event client's namespace, or this event client must +// have been created with the "" namespace. +func (e *events) PatchWithEventNamespace(event *v1beta1.Event, data []byte) (*v1beta1.Event, error) { + if e.ns != "" && event.Namespace != e.ns { + return nil, fmt.Errorf("can't patch an event with namespace '%v' in namespace '%v'", event.Namespace, e.ns) + } + result := &v1beta1.Event{} + err := e.client.Patch(types.StrategicMergePatchType). + NamespaceIfScoped(event.Namespace, len(event.Namespace) > 0). + Resource("events"). + Name(event.Name). + Body(data). + Do(). + Into(result) + return result, err +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/event.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/events/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of Events that match those selectors. func (c *events) List(opts v1.ListOptions) (result *v1beta1.EventList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.EventList{} err = c.client.Get(). Namespace(c.ns). Resource("events"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested events. func (c *events) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("events"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *events) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("events"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/events/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/events/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,5 +17,3 @@ // Code generated by client-gen. DO NOT EDIT. package v1beta1 - -type EventExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/daemonset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of DaemonSets that match those selectors. func (c *daemonSets) List(opts v1.ListOptions) (result *v1beta1.DaemonSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.DaemonSetList{} err = c.client.Get(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested daemonSets. func (c *daemonSets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *daemonSets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("daemonsets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -79,11 +81,16 @@ // List takes label and field selectors, and returns the list of Deployments that match those selectors. func (c *deployments) List(opts v1.ListOptions) (result *v1beta1.DeploymentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.DeploymentList{} err = c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -91,11 +98,16 @@ // Watch returns a watch.Interface that watches the requested deployments. func (c *deployments) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("deployments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -153,10 +165,15 @@ // DeleteCollection deletes a collection of objects. func (c *deployments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("deployments"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/extensions/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -30,9 +29,9 @@ DaemonSetsGetter DeploymentsGetter IngressesGetter + NetworkPoliciesGetter PodSecurityPoliciesGetter ReplicaSetsGetter - ScalesGetter } // ExtensionsV1beta1Client is used to interact with features provided by the extensions group. @@ -52,6 +51,10 @@ return newIngresses(c, namespace) } +func (c *ExtensionsV1beta1Client) NetworkPolicies(namespace string) NetworkPolicyInterface { + return newNetworkPolicies(c, namespace) +} + func (c *ExtensionsV1beta1Client) PodSecurityPolicies() PodSecurityPolicyInterface { return newPodSecurityPolicies(c) } @@ -60,10 +63,6 @@ return newReplicaSets(c, namespace) } -func (c *ExtensionsV1beta1Client) Scales(namespace string) ScaleInterface { - return newScales(c, namespace) -} - // NewForConfig creates a new ExtensionsV1beta1Client for the given config. func NewForConfig(c *rest.Config) (*ExtensionsV1beta1Client, error) { config := *c @@ -96,7 +95,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,6 +22,8 @@ type IngressExpansion interface{} +type NetworkPolicyExpansion interface{} + type PodSecurityPolicyExpansion interface{} type ReplicaSetExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/ingress.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of Ingresses that match those selectors. func (c *ingresses) List(opts v1.ListOptions) (result *v1beta1.IngressList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.IngressList{} err = c.client.Get(). Namespace(c.ns). Resource("ingresses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested ingresses. func (c *ingresses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("ingresses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *ingresses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("ingresses"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,174 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/extensions/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// NetworkPoliciesGetter has a method to return a NetworkPolicyInterface. +// A group's client should implement this interface. +type NetworkPoliciesGetter interface { + NetworkPolicies(namespace string) NetworkPolicyInterface +} + +// NetworkPolicyInterface has methods to work with NetworkPolicy resources. +type NetworkPolicyInterface interface { + Create(*v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) + Update(*v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.NetworkPolicy, error) + List(opts v1.ListOptions) (*v1beta1.NetworkPolicyList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) + NetworkPolicyExpansion +} + +// networkPolicies implements NetworkPolicyInterface +type networkPolicies struct { + client rest.Interface + ns string +} + +// newNetworkPolicies returns a NetworkPolicies +func newNetworkPolicies(c *ExtensionsV1beta1Client, namespace string) *networkPolicies { + return &networkPolicies{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the networkPolicy, and returns the corresponding networkPolicy object, and an error if there is any. +func (c *networkPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.NetworkPolicy, err error) { + result = &v1beta1.NetworkPolicy{} + err = c.client.Get(). + Namespace(c.ns). + Resource("networkpolicies"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of NetworkPolicies that match those selectors. +func (c *networkPolicies) List(opts v1.ListOptions) (result *v1beta1.NetworkPolicyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.NetworkPolicyList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("networkpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested networkPolicies. +func (c *networkPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("networkpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a networkPolicy and creates it. Returns the server's representation of the networkPolicy, and an error, if there is any. +func (c *networkPolicies) Create(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { + result = &v1beta1.NetworkPolicy{} + err = c.client.Post(). + Namespace(c.ns). + Resource("networkpolicies"). + Body(networkPolicy). + Do(). + Into(result) + return +} + +// Update takes the representation of a networkPolicy and updates it. Returns the server's representation of the networkPolicy, and an error, if there is any. +func (c *networkPolicies) Update(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { + result = &v1beta1.NetworkPolicy{} + err = c.client.Put(). + Namespace(c.ns). + Resource("networkpolicies"). + Name(networkPolicy.Name). + Body(networkPolicy). + Do(). + Into(result) + return +} + +// Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. +func (c *networkPolicies) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("networkpolicies"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *networkPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("networkpolicies"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched networkPolicy. +func (c *networkPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) { + result = &v1beta1.NetworkPolicy{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("networkpolicies"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/podsecuritypolicy.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of PodSecurityPolicies that match those selectors. func (c *podSecurityPolicies) List(opts v1.ListOptions) (result *v1beta1.PodSecurityPolicyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.PodSecurityPolicyList{} err = c.client.Get(). Resource("podsecuritypolicies"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested podSecurityPolicies. func (c *podSecurityPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("podsecuritypolicies"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *podSecurityPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("podsecuritypolicies"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/replicaset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/extensions/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -79,11 +81,16 @@ // List takes label and field selectors, and returns the list of ReplicaSets that match those selectors. func (c *replicaSets) List(opts v1.ListOptions) (result *v1beta1.ReplicaSetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.ReplicaSetList{} err = c.client.Get(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -91,11 +98,16 @@ // Watch returns a watch.Interface that watches the requested replicaSets. func (c *replicaSets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -153,10 +165,15 @@ // DeleteCollection deletes a collection of objects. func (c *replicaSets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("replicasets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale_expansion.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "k8s.io/api/extensions/v1beta1" - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// The ScaleExpansion interface allows manually adding extra methods to the ScaleInterface. -type ScaleExpansion interface { - Get(kind string, name string) (*v1beta1.Scale, error) - Update(kind string, scale *v1beta1.Scale) (*v1beta1.Scale, error) -} - -// Get takes the reference to scale subresource and returns the subresource or error, if one occurs. -func (c *scales) Get(kind string, name string) (result *v1beta1.Scale, err error) { - result = &v1beta1.Scale{} - - // TODO this method needs to take a proper unambiguous kind - fullyQualifiedKind := schema.GroupVersionKind{Kind: kind} - resource, _ := meta.UnsafeGuessKindToResource(fullyQualifiedKind) - - err = c.client.Get(). - Namespace(c.ns). - Resource(resource.Resource). - Name(name). - SubResource("scale"). - Do(). - Into(result) - return -} - -func (c *scales) Update(kind string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) { - result = &v1beta1.Scale{} - - // TODO this method needs to take a proper unambiguous kind - fullyQualifiedKind := schema.GroupVersionKind{Kind: kind} - resource, _ := meta.UnsafeGuessKindToResource(fullyQualifiedKind) - - err = c.client.Put(). - Namespace(scale.Namespace). - Resource(resource.Resource). - Name(scale.Name). - SubResource("scale"). - Body(scale). - Do(). - Into(result) - return -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/scale.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta1 - -import ( - rest "k8s.io/client-go/rest" -) - -// ScalesGetter has a method to return a ScaleInterface. -// A group's client should implement this interface. -type ScalesGetter interface { - Scales(namespace string) ScaleInterface -} - -// ScaleInterface has methods to work with Scale resources. -type ScaleInterface interface { - ScaleExpansion -} - -// scales implements ScaleInterface -type scales struct { - client rest.Interface - ns string -} - -// newScales returns a Scales -func newScales(c *ExtensionsV1beta1Client, namespace string) *scales { - return &scales{ - client: c.RESTClient(), - ns: namespace, - } -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/networking/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/networking/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type NetworkPolicyInterface interface { Create(*v1.NetworkPolicy) (*v1.NetworkPolicy, error) Update(*v1.NetworkPolicy) (*v1.NetworkPolicy, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.NetworkPolicy, error) - List(opts meta_v1.ListOptions) (*v1.NetworkPolicyList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.NetworkPolicy, error) + List(opts metav1.ListOptions) (*v1.NetworkPolicyList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.NetworkPolicy, err error) NetworkPolicyExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the networkPolicy, and returns the corresponding networkPolicy object, and an error if there is any. -func (c *networkPolicies) Get(name string, options meta_v1.GetOptions) (result *v1.NetworkPolicy, err error) { +func (c *networkPolicies) Get(name string, options metav1.GetOptions) (result *v1.NetworkPolicy, err error) { result = &v1.NetworkPolicy{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of NetworkPolicies that match those selectors. -func (c *networkPolicies) List(opts meta_v1.ListOptions) (result *v1.NetworkPolicyList, err error) { +func (c *networkPolicies) List(opts metav1.ListOptions) (result *v1.NetworkPolicyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.NetworkPolicyList{} err = c.client.Get(). Namespace(c.ns). Resource("networkpolicies"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested networkPolicies. -func (c *networkPolicies) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *networkPolicies) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("networkpolicies"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. -func (c *networkPolicies) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *networkPolicies) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("networkpolicies"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *networkPolicies) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *networkPolicies) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("networkpolicies"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type IngressExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/ingress.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,191 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/networking/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// IngressesGetter has a method to return a IngressInterface. +// A group's client should implement this interface. +type IngressesGetter interface { + Ingresses(namespace string) IngressInterface +} + +// IngressInterface has methods to work with Ingress resources. +type IngressInterface interface { + Create(*v1beta1.Ingress) (*v1beta1.Ingress, error) + Update(*v1beta1.Ingress) (*v1beta1.Ingress, error) + UpdateStatus(*v1beta1.Ingress) (*v1beta1.Ingress, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.Ingress, error) + List(opts v1.ListOptions) (*v1beta1.IngressList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Ingress, err error) + IngressExpansion +} + +// ingresses implements IngressInterface +type ingresses struct { + client rest.Interface + ns string +} + +// newIngresses returns a Ingresses +func newIngresses(c *NetworkingV1beta1Client, namespace string) *ingresses { + return &ingresses{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the ingress, and returns the corresponding ingress object, and an error if there is any. +func (c *ingresses) Get(name string, options v1.GetOptions) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Ingresses that match those selectors. +func (c *ingresses) List(opts v1.ListOptions) (result *v1beta1.IngressList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.IngressList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested ingresses. +func (c *ingresses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a ingress and creates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Create(ingress *v1beta1.Ingress) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Post(). + Namespace(c.ns). + Resource("ingresses"). + Body(ingress). + Do(). + Into(result) + return +} + +// Update takes the representation of a ingress and updates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Update(ingress *v1beta1.Ingress) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Put(). + Namespace(c.ns). + Resource("ingresses"). + Name(ingress.Name). + Body(ingress). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *ingresses) UpdateStatus(ingress *v1beta1.Ingress) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Put(). + Namespace(c.ns). + Resource("ingresses"). + Name(ingress.Name). + SubResource("status"). + Body(ingress). + Do(). + Into(result) + return +} + +// Delete takes name of the ingress and deletes it. Returns an error if one occurs. +func (c *ingresses) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("ingresses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *ingresses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched ingress. +func (c *ingresses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Ingress, err error) { + result = &v1beta1.Ingress{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("ingresses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/networking/v1beta1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type NetworkingV1beta1Interface interface { + RESTClient() rest.Interface + IngressesGetter +} + +// NetworkingV1beta1Client is used to interact with features provided by the networking.k8s.io group. +type NetworkingV1beta1Client struct { + restClient rest.Interface +} + +func (c *NetworkingV1beta1Client) Ingresses(namespace string) IngressInterface { + return newIngresses(c, namespace) +} + +// NewForConfig creates a new NetworkingV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*NetworkingV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NetworkingV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new NetworkingV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NetworkingV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NetworkingV1beta1Client for the given RESTClient. +func New(c rest.Interface) *NetworkingV1beta1Client { + return &NetworkingV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NetworkingV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1alpha1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +type RuntimeClassExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "k8s.io/api/node/v1alpha1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type NodeV1alpha1Interface interface { + RESTClient() rest.Interface + RuntimeClassesGetter +} + +// NodeV1alpha1Client is used to interact with features provided by the node.k8s.io group. +type NodeV1alpha1Client struct { + restClient rest.Interface +} + +func (c *NodeV1alpha1Client) RuntimeClasses() RuntimeClassInterface { + return newRuntimeClasses(c) +} + +// NewForConfig creates a new NodeV1alpha1Client for the given config. +func NewForConfig(c *rest.Config) (*NodeV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NodeV1alpha1Client{client}, nil +} + +// NewForConfigOrDie creates a new NodeV1alpha1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NodeV1alpha1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NodeV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *NodeV1alpha1Client { + return &NodeV1alpha1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1alpha1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NodeV1alpha1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1alpha1/runtimeclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "time" + + v1alpha1 "k8s.io/api/node/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// RuntimeClassesGetter has a method to return a RuntimeClassInterface. +// A group's client should implement this interface. +type RuntimeClassesGetter interface { + RuntimeClasses() RuntimeClassInterface +} + +// RuntimeClassInterface has methods to work with RuntimeClass resources. +type RuntimeClassInterface interface { + Create(*v1alpha1.RuntimeClass) (*v1alpha1.RuntimeClass, error) + Update(*v1alpha1.RuntimeClass) (*v1alpha1.RuntimeClass, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1alpha1.RuntimeClass, error) + List(opts v1.ListOptions) (*v1alpha1.RuntimeClassList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.RuntimeClass, err error) + RuntimeClassExpansion +} + +// runtimeClasses implements RuntimeClassInterface +type runtimeClasses struct { + client rest.Interface +} + +// newRuntimeClasses returns a RuntimeClasses +func newRuntimeClasses(c *NodeV1alpha1Client) *runtimeClasses { + return &runtimeClasses{ + client: c.RESTClient(), + } +} + +// Get takes name of the runtimeClass, and returns the corresponding runtimeClass object, and an error if there is any. +func (c *runtimeClasses) Get(name string, options v1.GetOptions) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Get(). + Resource("runtimeclasses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RuntimeClasses that match those selectors. +func (c *runtimeClasses) List(opts v1.ListOptions) (result *v1alpha1.RuntimeClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.RuntimeClassList{} + err = c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested runtimeClasses. +func (c *runtimeClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a runtimeClass and creates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Create(runtimeClass *v1alpha1.RuntimeClass) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Post(). + Resource("runtimeclasses"). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a runtimeClass and updates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Update(runtimeClass *v1alpha1.RuntimeClass) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Put(). + Resource("runtimeclasses"). + Name(runtimeClass.Name). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Delete takes name of the runtimeClass and deletes it. Returns an error if one occurs. +func (c *runtimeClasses) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("runtimeclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *runtimeClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("runtimeclasses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched runtimeClass. +func (c *runtimeClasses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.RuntimeClass, err error) { + result = &v1alpha1.RuntimeClass{} + err = c.client.Patch(pt). + Resource("runtimeclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1beta1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +type RuntimeClassExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "k8s.io/api/node/v1beta1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type NodeV1beta1Interface interface { + RESTClient() rest.Interface + RuntimeClassesGetter +} + +// NodeV1beta1Client is used to interact with features provided by the node.k8s.io group. +type NodeV1beta1Client struct { + restClient rest.Interface +} + +func (c *NodeV1beta1Client) RuntimeClasses() RuntimeClassInterface { + return newRuntimeClasses(c) +} + +// NewForConfig creates a new NodeV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*NodeV1beta1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NodeV1beta1Client{client}, nil +} + +// NewForConfigOrDie creates a new NodeV1beta1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NodeV1beta1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NodeV1beta1Client for the given RESTClient. +func New(c rest.Interface) *NodeV1beta1Client { + return &NodeV1beta1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1beta1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NodeV1beta1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/node/v1beta1/runtimeclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/node/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// RuntimeClassesGetter has a method to return a RuntimeClassInterface. +// A group's client should implement this interface. +type RuntimeClassesGetter interface { + RuntimeClasses() RuntimeClassInterface +} + +// RuntimeClassInterface has methods to work with RuntimeClass resources. +type RuntimeClassInterface interface { + Create(*v1beta1.RuntimeClass) (*v1beta1.RuntimeClass, error) + Update(*v1beta1.RuntimeClass) (*v1beta1.RuntimeClass, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.RuntimeClass, error) + List(opts v1.ListOptions) (*v1beta1.RuntimeClassList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.RuntimeClass, err error) + RuntimeClassExpansion +} + +// runtimeClasses implements RuntimeClassInterface +type runtimeClasses struct { + client rest.Interface +} + +// newRuntimeClasses returns a RuntimeClasses +func newRuntimeClasses(c *NodeV1beta1Client) *runtimeClasses { + return &runtimeClasses{ + client: c.RESTClient(), + } +} + +// Get takes name of the runtimeClass, and returns the corresponding runtimeClass object, and an error if there is any. +func (c *runtimeClasses) Get(name string, options v1.GetOptions) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Get(). + Resource("runtimeclasses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RuntimeClasses that match those selectors. +func (c *runtimeClasses) List(opts v1.ListOptions) (result *v1beta1.RuntimeClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.RuntimeClassList{} + err = c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested runtimeClasses. +func (c *runtimeClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("runtimeclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a runtimeClass and creates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Create(runtimeClass *v1beta1.RuntimeClass) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Post(). + Resource("runtimeclasses"). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a runtimeClass and updates it. Returns the server's representation of the runtimeClass, and an error, if there is any. +func (c *runtimeClasses) Update(runtimeClass *v1beta1.RuntimeClass) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Put(). + Resource("runtimeclasses"). + Name(runtimeClass.Name). + Body(runtimeClass). + Do(). + Into(result) + return +} + +// Delete takes name of the runtimeClass and deletes it. Returns an error if one occurs. +func (c *runtimeClasses) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("runtimeclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *runtimeClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("runtimeclasses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched runtimeClass. +func (c *runtimeClasses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.RuntimeClass, err error) { + result = &v1beta1.RuntimeClass{} + err = c.client.Patch(pt). + Resource("runtimeclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/poddisruptionbudget.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/policy/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -76,11 +78,16 @@ // List takes label and field selectors, and returns the list of PodDisruptionBudgets that match those selectors. func (c *podDisruptionBudgets) List(opts v1.ListOptions) (result *v1beta1.PodDisruptionBudgetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.PodDisruptionBudgetList{} err = c.client.Get(). Namespace(c.ns). Resource("poddisruptionbudgets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -88,11 +95,16 @@ // Watch returns a watch.Interface that watches the requested podDisruptionBudgets. func (c *podDisruptionBudgets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("poddisruptionbudgets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -150,10 +162,15 @@ // DeleteCollection deletes a collection of objects. func (c *podDisruptionBudgets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("poddisruptionbudgets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/podsecuritypolicy.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/policy/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of PodSecurityPolicies that match those selectors. func (c *podSecurityPolicies) List(opts v1.ListOptions) (result *v1beta1.PodSecurityPolicyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.PodSecurityPolicyList{} err = c.client.Get(). Resource("podsecuritypolicies"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested podSecurityPolicies. func (c *podSecurityPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("podsecuritypolicies"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *podSecurityPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("podsecuritypolicies"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/policy/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -81,7 +80,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrolebinding.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/rbac/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type ClusterRoleBindingInterface interface { Create(*v1.ClusterRoleBinding) (*v1.ClusterRoleBinding, error) Update(*v1.ClusterRoleBinding) (*v1.ClusterRoleBinding, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ClusterRoleBinding, error) - List(opts meta_v1.ListOptions) (*v1.ClusterRoleBindingList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ClusterRoleBinding, error) + List(opts metav1.ListOptions) (*v1.ClusterRoleBindingList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ClusterRoleBinding, err error) ClusterRoleBindingExpansion } @@ -59,7 +61,7 @@ } // Get takes name of the clusterRoleBinding, and returns the corresponding clusterRoleBinding object, and an error if there is any. -func (c *clusterRoleBindings) Get(name string, options meta_v1.GetOptions) (result *v1.ClusterRoleBinding, err error) { +func (c *clusterRoleBindings) Get(name string, options metav1.GetOptions) (result *v1.ClusterRoleBinding, err error) { result = &v1.ClusterRoleBinding{} err = c.client.Get(). Resource("clusterrolebindings"). @@ -71,22 +73,32 @@ } // List takes label and field selectors, and returns the list of ClusterRoleBindings that match those selectors. -func (c *clusterRoleBindings) List(opts meta_v1.ListOptions) (result *v1.ClusterRoleBindingList, err error) { +func (c *clusterRoleBindings) List(opts metav1.ListOptions) (result *v1.ClusterRoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ClusterRoleBindingList{} err = c.client.Get(). Resource("clusterrolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested clusterRoleBindings. -func (c *clusterRoleBindings) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *clusterRoleBindings) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("clusterrolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -114,7 +126,7 @@ } // Delete takes name of the clusterRoleBinding and deletes it. Returns an error if one occurs. -func (c *clusterRoleBindings) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *clusterRoleBindings) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("clusterrolebindings"). Name(name). @@ -124,10 +136,15 @@ } // DeleteCollection deletes a collection of objects. -func (c *clusterRoleBindings) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *clusterRoleBindings) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("clusterrolebindings"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/clusterrole.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/rbac/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type ClusterRoleInterface interface { Create(*v1.ClusterRole) (*v1.ClusterRole, error) Update(*v1.ClusterRole) (*v1.ClusterRole, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.ClusterRole, error) - List(opts meta_v1.ListOptions) (*v1.ClusterRoleList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.ClusterRole, error) + List(opts metav1.ListOptions) (*v1.ClusterRoleList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ClusterRole, err error) ClusterRoleExpansion } @@ -59,7 +61,7 @@ } // Get takes name of the clusterRole, and returns the corresponding clusterRole object, and an error if there is any. -func (c *clusterRoles) Get(name string, options meta_v1.GetOptions) (result *v1.ClusterRole, err error) { +func (c *clusterRoles) Get(name string, options metav1.GetOptions) (result *v1.ClusterRole, err error) { result = &v1.ClusterRole{} err = c.client.Get(). Resource("clusterroles"). @@ -71,22 +73,32 @@ } // List takes label and field selectors, and returns the list of ClusterRoles that match those selectors. -func (c *clusterRoles) List(opts meta_v1.ListOptions) (result *v1.ClusterRoleList, err error) { +func (c *clusterRoles) List(opts metav1.ListOptions) (result *v1.ClusterRoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.ClusterRoleList{} err = c.client.Get(). Resource("clusterroles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested clusterRoles. -func (c *clusterRoles) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *clusterRoles) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("clusterroles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -114,7 +126,7 @@ } // Delete takes name of the clusterRole and deletes it. Returns an error if one occurs. -func (c *clusterRoles) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *clusterRoles) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("clusterroles"). Name(name). @@ -124,10 +136,15 @@ } // DeleteCollection deletes a collection of objects. -func (c *clusterRoles) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *clusterRoles) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("clusterroles"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/rbac/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -86,7 +85,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/rolebinding.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/rbac/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type RoleBindingInterface interface { Create(*v1.RoleBinding) (*v1.RoleBinding, error) Update(*v1.RoleBinding) (*v1.RoleBinding, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.RoleBinding, error) - List(opts meta_v1.ListOptions) (*v1.RoleBindingList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.RoleBinding, error) + List(opts metav1.ListOptions) (*v1.RoleBindingList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.RoleBinding, err error) RoleBindingExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the roleBinding, and returns the corresponding roleBinding object, and an error if there is any. -func (c *roleBindings) Get(name string, options meta_v1.GetOptions) (result *v1.RoleBinding, err error) { +func (c *roleBindings) Get(name string, options metav1.GetOptions) (result *v1.RoleBinding, err error) { result = &v1.RoleBinding{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of RoleBindings that match those selectors. -func (c *roleBindings) List(opts meta_v1.ListOptions) (result *v1.RoleBindingList, err error) { +func (c *roleBindings) List(opts metav1.ListOptions) (result *v1.RoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.RoleBindingList{} err = c.client.Get(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested roleBindings. -func (c *roleBindings) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *roleBindings) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the roleBinding and deletes it. Returns an error if one occurs. -func (c *roleBindings) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *roleBindings) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("rolebindings"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *roleBindings) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *roleBindings) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/role.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/rbac/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type RoleInterface interface { Create(*v1.Role) (*v1.Role, error) Update(*v1.Role) (*v1.Role, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.Role, error) - List(opts meta_v1.ListOptions) (*v1.RoleList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.Role, error) + List(opts metav1.ListOptions) (*v1.RoleList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Role, err error) RoleExpansion } @@ -61,7 +63,7 @@ } // Get takes name of the role, and returns the corresponding role object, and an error if there is any. -func (c *roles) Get(name string, options meta_v1.GetOptions) (result *v1.Role, err error) { +func (c *roles) Get(name string, options metav1.GetOptions) (result *v1.Role, err error) { result = &v1.Role{} err = c.client.Get(). Namespace(c.ns). @@ -74,24 +76,34 @@ } // List takes label and field selectors, and returns the list of Roles that match those selectors. -func (c *roles) List(opts meta_v1.ListOptions) (result *v1.RoleList, err error) { +func (c *roles) List(opts metav1.ListOptions) (result *v1.RoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.RoleList{} err = c.client.Get(). Namespace(c.ns). Resource("roles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested roles. -func (c *roles) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *roles) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("roles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -121,7 +133,7 @@ } // Delete takes name of the role and deletes it. Returns an error if one occurs. -func (c *roles) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *roles) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Namespace(c.ns). Resource("roles"). @@ -132,11 +144,16 @@ } // DeleteCollection deletes a collection of objects. -func (c *roles) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *roles) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("roles"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrolebinding.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of ClusterRoleBindings that match those selectors. func (c *clusterRoleBindings) List(opts v1.ListOptions) (result *v1alpha1.ClusterRoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.ClusterRoleBindingList{} err = c.client.Get(). Resource("clusterrolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested clusterRoleBindings. func (c *clusterRoleBindings) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("clusterrolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *clusterRoleBindings) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("clusterrolebindings"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/clusterrole.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of ClusterRoles that match those selectors. func (c *clusterRoles) List(opts v1.ListOptions) (result *v1alpha1.ClusterRoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.ClusterRoleList{} err = c.client.Get(). Resource("clusterroles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested clusterRoles. func (c *clusterRoles) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("clusterroles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *clusterRoles) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("clusterroles"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1alpha1 "k8s.io/api/rbac/v1alpha1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -86,7 +85,7 @@ gv := v1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rolebinding.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of RoleBindings that match those selectors. func (c *roleBindings) List(opts v1.ListOptions) (result *v1alpha1.RoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.RoleBindingList{} err = c.client.Get(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested roleBindings. func (c *roleBindings) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *roleBindings) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/role.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/rbac/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of Roles that match those selectors. func (c *roles) List(opts v1.ListOptions) (result *v1alpha1.RoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.RoleList{} err = c.client.Get(). Namespace(c.ns). Resource("roles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested roles. func (c *roles) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("roles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *roles) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("roles"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrolebinding.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of ClusterRoleBindings that match those selectors. func (c *clusterRoleBindings) List(opts v1.ListOptions) (result *v1beta1.ClusterRoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.ClusterRoleBindingList{} err = c.client.Get(). Resource("clusterrolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested clusterRoleBindings. func (c *clusterRoleBindings) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("clusterrolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *clusterRoleBindings) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("clusterrolebindings"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/clusterrole.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of ClusterRoles that match those selectors. func (c *clusterRoles) List(opts v1.ListOptions) (result *v1beta1.ClusterRoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.ClusterRoleList{} err = c.client.Get(). Resource("clusterroles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested clusterRoles. func (c *clusterRoles) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("clusterroles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *clusterRoles) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("clusterroles"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/rbac/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -86,7 +85,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rolebinding.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of RoleBindings that match those selectors. func (c *roleBindings) List(opts v1.ListOptions) (result *v1beta1.RoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.RoleBindingList{} err = c.client.Get(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested roleBindings. func (c *roleBindings) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *roleBindings) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("rolebindings"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/role.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/rbac/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of Roles that match those selectors. func (c *roles) List(opts v1.ListOptions) (result *v1beta1.RoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.RoleList{} err = c.client.Get(). Namespace(c.ns). Resource("roles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested roles. func (c *roles) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("roles"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *roles) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("roles"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,21 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type PriorityClassExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/priorityclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/scheduling/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// PriorityClassesGetter has a method to return a PriorityClassInterface. +// A group's client should implement this interface. +type PriorityClassesGetter interface { + PriorityClasses() PriorityClassInterface +} + +// PriorityClassInterface has methods to work with PriorityClass resources. +type PriorityClassInterface interface { + Create(*v1.PriorityClass) (*v1.PriorityClass, error) + Update(*v1.PriorityClass) (*v1.PriorityClass, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.PriorityClass, error) + List(opts metav1.ListOptions) (*v1.PriorityClassList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PriorityClass, err error) + PriorityClassExpansion +} + +// priorityClasses implements PriorityClassInterface +type priorityClasses struct { + client rest.Interface +} + +// newPriorityClasses returns a PriorityClasses +func newPriorityClasses(c *SchedulingV1Client) *priorityClasses { + return &priorityClasses{ + client: c.RESTClient(), + } +} + +// Get takes name of the priorityClass, and returns the corresponding priorityClass object, and an error if there is any. +func (c *priorityClasses) Get(name string, options metav1.GetOptions) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Get(). + Resource("priorityclasses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of PriorityClasses that match those selectors. +func (c *priorityClasses) List(opts metav1.ListOptions) (result *v1.PriorityClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.PriorityClassList{} + err = c.client.Get(). + Resource("priorityclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested priorityClasses. +func (c *priorityClasses) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("priorityclasses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a priorityClass and creates it. Returns the server's representation of the priorityClass, and an error, if there is any. +func (c *priorityClasses) Create(priorityClass *v1.PriorityClass) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Post(). + Resource("priorityclasses"). + Body(priorityClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a priorityClass and updates it. Returns the server's representation of the priorityClass, and an error, if there is any. +func (c *priorityClasses) Update(priorityClass *v1.PriorityClass) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Put(). + Resource("priorityclasses"). + Name(priorityClass.Name). + Body(priorityClass). + Do(). + Into(result) + return +} + +// Delete takes name of the priorityClass and deletes it. Returns an error if one occurs. +func (c *priorityClasses) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("priorityclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *priorityClasses) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("priorityclasses"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched priorityClass. +func (c *priorityClasses) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.PriorityClass, err error) { + result = &v1.PriorityClass{} + err = c.client.Patch(pt). + Resource("priorityclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,89 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/scheduling/v1" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type SchedulingV1Interface interface { + RESTClient() rest.Interface + PriorityClassesGetter +} + +// SchedulingV1Client is used to interact with features provided by the scheduling.k8s.io group. +type SchedulingV1Client struct { + restClient rest.Interface +} + +func (c *SchedulingV1Client) PriorityClasses() PriorityClassInterface { + return newPriorityClasses(c) +} + +// NewForConfig creates a new SchedulingV1Client for the given config. +func NewForConfig(c *rest.Config) (*SchedulingV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &SchedulingV1Client{client}, nil +} + +// NewForConfigOrDie creates a new SchedulingV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *SchedulingV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new SchedulingV1Client for the given RESTClient. +func New(c rest.Interface) *SchedulingV1Client { + return &SchedulingV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *SchedulingV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/priorityclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/scheduling/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of PriorityClasses that match those selectors. func (c *priorityClasses) List(opts v1.ListOptions) (result *v1alpha1.PriorityClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.PriorityClassList{} err = c.client.Get(). Resource("priorityclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested priorityClasses. func (c *priorityClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("priorityclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *priorityClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("priorityclasses"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1alpha1 "k8s.io/api/scheduling/v1alpha1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/priorityclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/scheduling/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of PriorityClasses that match those selectors. func (c *priorityClasses) List(opts v1.ListOptions) (result *v1beta1.PriorityClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.PriorityClassList{} err = c.client.Get(). Resource("priorityclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested priorityClasses. func (c *priorityClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("priorityclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *priorityClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("priorityclasses"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1beta1 "k8s.io/api/scheduling/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/podpreset.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/settings/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -75,11 +77,16 @@ // List takes label and field selectors, and returns the list of PodPresets that match those selectors. func (c *podPresets) List(opts v1.ListOptions) (result *v1alpha1.PodPresetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.PodPresetList{} err = c.client.Get(). Namespace(c.ns). Resource("podpresets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -87,11 +94,16 @@ // Watch returns a watch.Interface that watches the requested podPresets. func (c *podPresets) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Namespace(c.ns). Resource("podpresets"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -133,10 +145,15 @@ // DeleteCollection deletes a collection of objects. func (c *podPresets) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Namespace(c.ns). Resource("podpresets"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/settings_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1alpha1 "k8s.io/api/settings/v1alpha1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,3 +19,5 @@ package v1 type StorageClassExpansion interface{} + +type VolumeAttachmentExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storageclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,10 @@ package v1 import ( + "time" + v1 "k8s.io/api/storage/v1" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" scheme "k8s.io/client-go/kubernetes/scheme" @@ -37,11 +39,11 @@ type StorageClassInterface interface { Create(*v1.StorageClass) (*v1.StorageClass, error) Update(*v1.StorageClass) (*v1.StorageClass, error) - Delete(name string, options *meta_v1.DeleteOptions) error - DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1.StorageClass, error) - List(opts meta_v1.ListOptions) (*v1.StorageClassList, error) - Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.StorageClass, error) + List(opts metav1.ListOptions) (*v1.StorageClassList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.StorageClass, err error) StorageClassExpansion } @@ -59,7 +61,7 @@ } // Get takes name of the storageClass, and returns the corresponding storageClass object, and an error if there is any. -func (c *storageClasses) Get(name string, options meta_v1.GetOptions) (result *v1.StorageClass, err error) { +func (c *storageClasses) Get(name string, options metav1.GetOptions) (result *v1.StorageClass, err error) { result = &v1.StorageClass{} err = c.client.Get(). Resource("storageclasses"). @@ -71,22 +73,32 @@ } // List takes label and field selectors, and returns the list of StorageClasses that match those selectors. -func (c *storageClasses) List(opts meta_v1.ListOptions) (result *v1.StorageClassList, err error) { +func (c *storageClasses) List(opts metav1.ListOptions) (result *v1.StorageClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1.StorageClassList{} err = c.client.Get(). Resource("storageclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return } // Watch returns a watch.Interface that watches the requested storageClasses. -func (c *storageClasses) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { +func (c *storageClasses) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("storageclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -114,7 +126,7 @@ } // Delete takes name of the storageClass and deletes it. Returns an error if one occurs. -func (c *storageClasses) Delete(name string, options *meta_v1.DeleteOptions) error { +func (c *storageClasses) Delete(name string, options *metav1.DeleteOptions) error { return c.client.Delete(). Resource("storageclasses"). Name(name). @@ -124,10 +136,15 @@ } // DeleteCollection deletes a collection of objects. -func (c *storageClasses) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { +func (c *storageClasses) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("storageclasses"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1 "k8s.io/api/storage/v1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -28,6 +27,7 @@ type StorageV1Interface interface { RESTClient() rest.Interface StorageClassesGetter + VolumeAttachmentsGetter } // StorageV1Client is used to interact with features provided by the storage.k8s.io group. @@ -39,6 +39,10 @@ return newStorageClasses(c) } +func (c *StorageV1Client) VolumeAttachments() VolumeAttachmentInterface { + return newVolumeAttachments(c) +} + // NewForConfig creates a new StorageV1Client for the given config. func NewForConfig(c *rest.Config) (*StorageV1Client, error) { config := *c @@ -71,7 +75,7 @@ gv := v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/volumeattachment.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,180 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/storage/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// VolumeAttachmentsGetter has a method to return a VolumeAttachmentInterface. +// A group's client should implement this interface. +type VolumeAttachmentsGetter interface { + VolumeAttachments() VolumeAttachmentInterface +} + +// VolumeAttachmentInterface has methods to work with VolumeAttachment resources. +type VolumeAttachmentInterface interface { + Create(*v1.VolumeAttachment) (*v1.VolumeAttachment, error) + Update(*v1.VolumeAttachment) (*v1.VolumeAttachment, error) + UpdateStatus(*v1.VolumeAttachment) (*v1.VolumeAttachment, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.VolumeAttachment, error) + List(opts metav1.ListOptions) (*v1.VolumeAttachmentList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.VolumeAttachment, err error) + VolumeAttachmentExpansion +} + +// volumeAttachments implements VolumeAttachmentInterface +type volumeAttachments struct { + client rest.Interface +} + +// newVolumeAttachments returns a VolumeAttachments +func newVolumeAttachments(c *StorageV1Client) *volumeAttachments { + return &volumeAttachments{ + client: c.RESTClient(), + } +} + +// Get takes name of the volumeAttachment, and returns the corresponding volumeAttachment object, and an error if there is any. +func (c *volumeAttachments) Get(name string, options metav1.GetOptions) (result *v1.VolumeAttachment, err error) { + result = &v1.VolumeAttachment{} + err = c.client.Get(). + Resource("volumeattachments"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of VolumeAttachments that match those selectors. +func (c *volumeAttachments) List(opts metav1.ListOptions) (result *v1.VolumeAttachmentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.VolumeAttachmentList{} + err = c.client.Get(). + Resource("volumeattachments"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested volumeAttachments. +func (c *volumeAttachments) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("volumeattachments"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a volumeAttachment and creates it. Returns the server's representation of the volumeAttachment, and an error, if there is any. +func (c *volumeAttachments) Create(volumeAttachment *v1.VolumeAttachment) (result *v1.VolumeAttachment, err error) { + result = &v1.VolumeAttachment{} + err = c.client.Post(). + Resource("volumeattachments"). + Body(volumeAttachment). + Do(). + Into(result) + return +} + +// Update takes the representation of a volumeAttachment and updates it. Returns the server's representation of the volumeAttachment, and an error, if there is any. +func (c *volumeAttachments) Update(volumeAttachment *v1.VolumeAttachment) (result *v1.VolumeAttachment, err error) { + result = &v1.VolumeAttachment{} + err = c.client.Put(). + Resource("volumeattachments"). + Name(volumeAttachment.Name). + Body(volumeAttachment). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *volumeAttachments) UpdateStatus(volumeAttachment *v1.VolumeAttachment) (result *v1.VolumeAttachment, err error) { + result = &v1.VolumeAttachment{} + err = c.client.Put(). + Resource("volumeattachments"). + Name(volumeAttachment.Name). + SubResource("status"). + Body(volumeAttachment). + Do(). + Into(result) + return +} + +// Delete takes name of the volumeAttachment and deletes it. Returns an error if one occurs. +func (c *volumeAttachments) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("volumeattachments"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *volumeAttachments) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("volumeattachments"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched volumeAttachment. +func (c *volumeAttachments) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.VolumeAttachment, err error) { + result = &v1.VolumeAttachment{} + err = c.client.Patch(pt). + Resource("volumeattachments"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,6 @@ import ( v1alpha1 "k8s.io/api/storage/v1alpha1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) @@ -71,7 +70,7 @@ gv := v1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/volumeattachment.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1alpha1 import ( + "time" + v1alpha1 "k8s.io/api/storage/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -73,10 +75,15 @@ // List takes label and field selectors, and returns the list of VolumeAttachments that match those selectors. func (c *volumeAttachments) List(opts v1.ListOptions) (result *v1alpha1.VolumeAttachmentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1alpha1.VolumeAttachmentList{} err = c.client.Get(). Resource("volumeattachments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -84,10 +91,15 @@ // Watch returns a watch.Interface that watches the requested volumeAttachments. func (c *volumeAttachments) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("volumeattachments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -141,9 +153,14 @@ // DeleteCollection deletes a collection of objects. func (c *volumeAttachments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("volumeattachments"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csidriver.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// CSIDriversGetter has a method to return a CSIDriverInterface. +// A group's client should implement this interface. +type CSIDriversGetter interface { + CSIDrivers() CSIDriverInterface +} + +// CSIDriverInterface has methods to work with CSIDriver resources. +type CSIDriverInterface interface { + Create(*v1beta1.CSIDriver) (*v1beta1.CSIDriver, error) + Update(*v1beta1.CSIDriver) (*v1beta1.CSIDriver, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.CSIDriver, error) + List(opts v1.ListOptions) (*v1beta1.CSIDriverList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSIDriver, err error) + CSIDriverExpansion +} + +// cSIDrivers implements CSIDriverInterface +type cSIDrivers struct { + client rest.Interface +} + +// newCSIDrivers returns a CSIDrivers +func newCSIDrivers(c *StorageV1beta1Client) *cSIDrivers { + return &cSIDrivers{ + client: c.RESTClient(), + } +} + +// Get takes name of the cSIDriver, and returns the corresponding cSIDriver object, and an error if there is any. +func (c *cSIDrivers) Get(name string, options v1.GetOptions) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} + err = c.client.Get(). + Resource("csidrivers"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CSIDrivers that match those selectors. +func (c *cSIDrivers) List(opts v1.ListOptions) (result *v1beta1.CSIDriverList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.CSIDriverList{} + err = c.client.Get(). + Resource("csidrivers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested cSIDrivers. +func (c *cSIDrivers) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("csidrivers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a cSIDriver and creates it. Returns the server's representation of the cSIDriver, and an error, if there is any. +func (c *cSIDrivers) Create(cSIDriver *v1beta1.CSIDriver) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} + err = c.client.Post(). + Resource("csidrivers"). + Body(cSIDriver). + Do(). + Into(result) + return +} + +// Update takes the representation of a cSIDriver and updates it. Returns the server's representation of the cSIDriver, and an error, if there is any. +func (c *cSIDrivers) Update(cSIDriver *v1beta1.CSIDriver) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} + err = c.client.Put(). + Resource("csidrivers"). + Name(cSIDriver.Name). + Body(cSIDriver). + Do(). + Into(result) + return +} + +// Delete takes name of the cSIDriver and deletes it. Returns an error if one occurs. +func (c *cSIDrivers) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("csidrivers"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *cSIDrivers) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("csidrivers"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched cSIDriver. +func (c *cSIDrivers) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSIDriver, err error) { + result = &v1beta1.CSIDriver{} + err = c.client.Patch(pt). + Resource("csidrivers"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/csinode.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,164 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "time" + + v1beta1 "k8s.io/api/storage/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// CSINodesGetter has a method to return a CSINodeInterface. +// A group's client should implement this interface. +type CSINodesGetter interface { + CSINodes() CSINodeInterface +} + +// CSINodeInterface has methods to work with CSINode resources. +type CSINodeInterface interface { + Create(*v1beta1.CSINode) (*v1beta1.CSINode, error) + Update(*v1beta1.CSINode) (*v1beta1.CSINode, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.CSINode, error) + List(opts v1.ListOptions) (*v1beta1.CSINodeList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSINode, err error) + CSINodeExpansion +} + +// cSINodes implements CSINodeInterface +type cSINodes struct { + client rest.Interface +} + +// newCSINodes returns a CSINodes +func newCSINodes(c *StorageV1beta1Client) *cSINodes { + return &cSINodes{ + client: c.RESTClient(), + } +} + +// Get takes name of the cSINode, and returns the corresponding cSINode object, and an error if there is any. +func (c *cSINodes) Get(name string, options v1.GetOptions) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Get(). + Resource("csinodes"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CSINodes that match those selectors. +func (c *cSINodes) List(opts v1.ListOptions) (result *v1beta1.CSINodeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1beta1.CSINodeList{} + err = c.client.Get(). + Resource("csinodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested cSINodes. +func (c *cSINodes) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("csinodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() +} + +// Create takes the representation of a cSINode and creates it. Returns the server's representation of the cSINode, and an error, if there is any. +func (c *cSINodes) Create(cSINode *v1beta1.CSINode) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Post(). + Resource("csinodes"). + Body(cSINode). + Do(). + Into(result) + return +} + +// Update takes the representation of a cSINode and updates it. Returns the server's representation of the cSINode, and an error, if there is any. +func (c *cSINodes) Update(cSINode *v1beta1.CSINode) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Put(). + Resource("csinodes"). + Name(cSINode.Name). + Body(cSINode). + Do(). + Into(result) + return +} + +// Delete takes name of the cSINode and deletes it. Returns an error if one occurs. +func (c *cSINodes) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Resource("csinodes"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *cSINodes) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("csinodes"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched cSINode. +func (c *cSINodes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CSINode, err error) { + result = &v1beta1.CSINode{} + err = c.client.Patch(pt). + Resource("csinodes"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/generated_expansion.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,6 +18,10 @@ package v1beta1 +type CSIDriverExpansion interface{} + +type CSINodeExpansion interface{} + type StorageClassExpansion interface{} type VolumeAttachmentExpansion interface{} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storageclass.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/storage/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -72,10 +74,15 @@ // List takes label and field selectors, and returns the list of StorageClasses that match those selectors. func (c *storageClasses) List(opts v1.ListOptions) (result *v1beta1.StorageClassList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.StorageClassList{} err = c.client.Get(). Resource("storageclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -83,10 +90,15 @@ // Watch returns a watch.Interface that watches the requested storageClasses. func (c *storageClasses) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("storageclasses"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -125,9 +137,14 @@ // DeleteCollection deletes a collection of objects. func (c *storageClasses) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("storageclasses"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,13 +20,14 @@ import ( v1beta1 "k8s.io/api/storage/v1beta1" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/kubernetes/scheme" rest "k8s.io/client-go/rest" ) type StorageV1beta1Interface interface { RESTClient() rest.Interface + CSIDriversGetter + CSINodesGetter StorageClassesGetter VolumeAttachmentsGetter } @@ -36,6 +37,14 @@ restClient rest.Interface } +func (c *StorageV1beta1Client) CSIDrivers() CSIDriverInterface { + return newCSIDrivers(c) +} + +func (c *StorageV1beta1Client) CSINodes() CSINodeInterface { + return newCSINodes(c) +} + func (c *StorageV1beta1Client) StorageClasses() StorageClassInterface { return newStorageClasses(c) } @@ -76,7 +85,7 @@ gv := v1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/volumeattachment.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,6 +19,8 @@ package v1beta1 import ( + "time" + v1beta1 "k8s.io/api/storage/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" @@ -73,10 +75,15 @@ // List takes label and field selectors, and returns the list of VolumeAttachments that match those selectors. func (c *volumeAttachments) List(opts v1.ListOptions) (result *v1beta1.VolumeAttachmentList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } result = &v1beta1.VolumeAttachmentList{} err = c.client.Get(). Resource("volumeattachments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Do(). Into(result) return @@ -84,10 +91,15 @@ // Watch returns a watch.Interface that watches the requested volumeAttachments. func (c *volumeAttachments) Watch(opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } opts.Watch = true return c.client.Get(). Resource("volumeattachments"). VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). Watch() } @@ -141,9 +153,14 @@ // DeleteCollection deletes a collection of objects. func (c *volumeAttachments) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } return c.client.Delete(). Resource("volumeattachments"). VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). Body(options). Do(). Error() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -16,4 +16,5 @@ // +k8s:deepcopy-gen=package // +groupName=client.authentication.k8s.io + package clientauthentication // import "k8s.io/client-go/pkg/apis/clientauthentication" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# approval on api packages bubbles to api-approvers +reviewers: +- sig-auth-authenticators-approvers +- sig-auth-authenticators-reviewers +labels: +- sig/auth + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,4 +20,5 @@ // +k8s:defaulter-gen=TypeMeta // +groupName=client.authentication.k8s.io + package v1alpha1 // import "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,7 @@ // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// ExecCredentials is used by exec-based plugins to communicate credentials to +// ExecCredential is used by exec-based plugins to communicate credentials to // HTTP transports. type ExecCredential struct { metav1.TypeMeta `json:",inline"` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go 2020-12-10 21:46:52.000000000 +0000 @@ -35,17 +35,48 @@ // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. -func RegisterConversions(scheme *runtime.Scheme) error { - return scheme.AddGeneratedConversionFuncs( - Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential, - Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential, - Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec, - Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec, - Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus, - Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus, - Convert_v1alpha1_Response_To_clientauthentication_Response, - Convert_clientauthentication_Response_To_v1alpha1_Response, - ) +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*ExecCredential)(nil), (*clientauthentication.ExecCredential)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(a.(*ExecCredential), b.(*clientauthentication.ExecCredential), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.ExecCredential)(nil), (*ExecCredential)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(a.(*clientauthentication.ExecCredential), b.(*ExecCredential), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ExecCredentialSpec)(nil), (*clientauthentication.ExecCredentialSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(a.(*ExecCredentialSpec), b.(*clientauthentication.ExecCredentialSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.ExecCredentialSpec)(nil), (*ExecCredentialSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(a.(*clientauthentication.ExecCredentialSpec), b.(*ExecCredentialSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ExecCredentialStatus)(nil), (*clientauthentication.ExecCredentialStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(a.(*ExecCredentialStatus), b.(*clientauthentication.ExecCredentialStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.ExecCredentialStatus)(nil), (*ExecCredentialStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(a.(*clientauthentication.ExecCredentialStatus), b.(*ExecCredentialStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*Response)(nil), (*clientauthentication.Response)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_Response_To_clientauthentication_Response(a.(*Response), b.(*clientauthentication.Response), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.Response)(nil), (*Response)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_Response_To_v1alpha1_Response(a.(*clientauthentication.Response), b.(*Response), scope) + }); err != nil { + return err + } + return nil } func autoConvert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in *ExecCredential, out *clientauthentication.ExecCredential, s conversion.Scope) error { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,12 +31,8 @@ in.Spec.DeepCopyInto(&out.Spec) if in.Status != nil { in, out := &in.Status, &out.Status - if *in == nil { - *out = nil - } else { - *out = new(ExecCredentialStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ExecCredentialStatus) + (*in).DeepCopyInto(*out) } return } @@ -64,12 +60,8 @@ *out = *in if in.Response != nil { in, out := &in.Response, &out.Response - if *in == nil { - *out = nil - } else { - *out = new(Response) - (*in).DeepCopyInto(*out) - } + *out = new(Response) + (*in).DeepCopyInto(*out) } return } @@ -89,11 +81,7 @@ *out = *in if in.ExpirationTimestamp != nil { in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } @@ -115,12 +103,15 @@ in, out := &in.Header, &out.Header *out = make(map[string][]string, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,4 +20,5 @@ // +k8s:defaulter-gen=TypeMeta // +groupName=client.authentication.k8s.io + package v1beta1 // import "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.conversion.go 2020-12-10 21:46:52.000000000 +0000 @@ -35,15 +35,43 @@ // RegisterConversions adds conversion functions to the given scheme. // Public to allow building arbitrary schemes. -func RegisterConversions(scheme *runtime.Scheme) error { - return scheme.AddGeneratedConversionFuncs( - Convert_v1beta1_ExecCredential_To_clientauthentication_ExecCredential, - Convert_clientauthentication_ExecCredential_To_v1beta1_ExecCredential, - Convert_v1beta1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec, - Convert_clientauthentication_ExecCredentialSpec_To_v1beta1_ExecCredentialSpec, - Convert_v1beta1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus, - Convert_clientauthentication_ExecCredentialStatus_To_v1beta1_ExecCredentialStatus, - ) +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*ExecCredential)(nil), (*clientauthentication.ExecCredential)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ExecCredential_To_clientauthentication_ExecCredential(a.(*ExecCredential), b.(*clientauthentication.ExecCredential), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.ExecCredential)(nil), (*ExecCredential)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredential_To_v1beta1_ExecCredential(a.(*clientauthentication.ExecCredential), b.(*ExecCredential), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ExecCredentialSpec)(nil), (*clientauthentication.ExecCredentialSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(a.(*ExecCredentialSpec), b.(*clientauthentication.ExecCredentialSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.ExecCredentialSpec)(nil), (*ExecCredentialSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredentialSpec_To_v1beta1_ExecCredentialSpec(a.(*clientauthentication.ExecCredentialSpec), b.(*ExecCredentialSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ExecCredentialStatus)(nil), (*clientauthentication.ExecCredentialStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(a.(*ExecCredentialStatus), b.(*clientauthentication.ExecCredentialStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clientauthentication.ExecCredentialStatus)(nil), (*ExecCredentialStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredentialStatus_To_v1beta1_ExecCredentialStatus(a.(*clientauthentication.ExecCredentialStatus), b.(*ExecCredentialStatus), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*clientauthentication.ExecCredentialSpec)(nil), (*ExecCredentialSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clientauthentication_ExecCredentialSpec_To_v1beta1_ExecCredentialSpec(a.(*clientauthentication.ExecCredentialSpec), b.(*ExecCredentialSpec), scope) + }); err != nil { + return err + } + return nil } func autoConvert_v1beta1_ExecCredential_To_clientauthentication_ExecCredential(in *ExecCredential, out *clientauthentication.ExecCredential, s conversion.Scope) error { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1beta1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,12 +31,8 @@ out.Spec = in.Spec if in.Status != nil { in, out := &in.Status, &out.Status - if *in == nil { - *out = nil - } else { - *out = new(ExecCredentialStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ExecCredentialStatus) + (*in).DeepCopyInto(*out) } return } @@ -80,11 +76,7 @@ *out = *in if in.ExpirationTimestamp != nil { in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -31,12 +31,8 @@ in.Spec.DeepCopyInto(&out.Spec) if in.Status != nil { in, out := &in.Status, &out.Status - if *in == nil { - *out = nil - } else { - *out = new(ExecCredentialStatus) - (*in).DeepCopyInto(*out) - } + *out = new(ExecCredentialStatus) + (*in).DeepCopyInto(*out) } return } @@ -64,12 +60,8 @@ *out = *in if in.Response != nil { in, out := &in.Response, &out.Response - if *in == nil { - *out = nil - } else { - *out = new(Response) - (*in).DeepCopyInto(*out) - } + *out = new(Response) + (*in).DeepCopyInto(*out) } return } @@ -89,11 +81,7 @@ *out = *in if in.ExpirationTimestamp != nil { in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp - if *in == nil { - *out = nil - } else { - *out = (*in).DeepCopy() - } + *out = (*in).DeepCopy() } return } @@ -115,12 +103,15 @@ in, out := &in.Header, &out.Header *out = make(map[string][]string, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } return diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/version/base.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/version/base.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/version/base.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/version/base.go 2020-12-10 21:46:52.000000000 +0000 @@ -55,8 +55,8 @@ // NOTE: The $Format strings are replaced during 'git archive' thanks to the // companion .gitattributes file containing 'export-subst' in this same // directory. See also https://git-scm.com/docs/gitattributes - gitVersion string = "v0.0.0-master+d149d7e9f2" - gitCommit string = "d149d7e9f2d5e4f609fca95fc1d797275c407e8a" // sha1 from git, output of $(git rev-parse HEAD) + gitVersion string = "v0.0.0-master+cbe8f01e9a" + gitCommit string = "cbe8f01e9a2c20dce289d538a1123aa972e33e77" // sha1 from git, output of $(git rev-parse HEAD) gitTreeState string = "" // state of git tree, either "clean" or "dirty" buildDate string = "1970-01-01T00:00:00Z" // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ') diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/version/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/version/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/pkg/version/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/pkg/version/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -14,7 +14,8 @@ limitations under the License. */ +// +k8s:openapi-gen=true + // Package version supplies version information collected at build time to // kubernetes components. -// +k8s:openapi-gen=true package version // import "k8s.io/client-go/pkg/version" diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/azure.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/azure.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/azure.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/azure.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,7 @@ package azure import ( + "encoding/json" "errors" "fmt" "net/http" @@ -26,7 +27,7 @@ "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/adal" "github.com/Azure/go-autorest/autorest/azure" - "github.com/golang/glog" + "k8s.io/klog" "k8s.io/apimachinery/pkg/util/net" restclient "k8s.io/client-go/rest" @@ -49,7 +50,7 @@ func init() { if err := restclient.RegisterAuthProviderPlugin("azure", newAzureAuthProvider); err != nil { - glog.Fatalf("Failed to register azure auth plugin: %v", err) + klog.Fatalf("Failed to register azure auth plugin: %v", err) } } @@ -123,7 +124,7 @@ token, err := r.tokenSource.Token() if err != nil { - glog.Errorf("Failed to acquire a token: %v", err) + klog.Errorf("Failed to acquire a token: %v", err) return nil, fmt.Errorf("acquiring a token for authorization header: %v", err) } @@ -144,6 +145,7 @@ type azureToken struct { token adal.Token + environment string clientID string tenantID string apiserverID string @@ -218,6 +220,10 @@ if refreshToken == "" { return nil, fmt.Errorf("no refresh token in cfg: %s", cfgRefreshToken) } + environment := ts.cfg[cfgEnvironment] + if environment == "" { + return nil, fmt.Errorf("no environment in cfg: %s", cfgEnvironment) + } clientID := ts.cfg[cfgClientID] if clientID == "" { return nil, fmt.Errorf("no client ID in cfg: %s", cfgClientID) @@ -243,12 +249,13 @@ token: adal.Token{ AccessToken: accessToken, RefreshToken: refreshToken, - ExpiresIn: expiresIn, - ExpiresOn: expiresOn, - NotBefore: expiresOn, + ExpiresIn: json.Number(expiresIn), + ExpiresOn: json.Number(expiresOn), + NotBefore: json.Number(expiresOn), Resource: fmt.Sprintf("spn:%s", apiserverID), Type: tokenType, }, + environment: environment, clientID: clientID, tenantID: tenantID, apiserverID: apiserverID, @@ -259,11 +266,12 @@ newCfg := make(map[string]string) newCfg[cfgAccessToken] = token.token.AccessToken newCfg[cfgRefreshToken] = token.token.RefreshToken + newCfg[cfgEnvironment] = token.environment newCfg[cfgClientID] = token.clientID newCfg[cfgTenantID] = token.tenantID newCfg[cfgApiserverID] = token.apiserverID - newCfg[cfgExpiresIn] = token.token.ExpiresIn - newCfg[cfgExpiresOn] = token.token.ExpiresOn + newCfg[cfgExpiresIn] = string(token.token.ExpiresIn) + newCfg[cfgExpiresOn] = string(token.token.ExpiresOn) err := ts.persister.Persist(newCfg) if err != nil { @@ -274,7 +282,12 @@ } func (ts *azureTokenSource) refreshToken(token *azureToken) (*azureToken, error) { - oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, token.tenantID) + env, err := azure.EnvironmentFromName(token.environment) + if err != nil { + return nil, err + } + + oauthConfig, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, token.tenantID) if err != nil { return nil, fmt.Errorf("building the OAuth configuration for token refresh: %v", err) } @@ -298,6 +311,7 @@ return &azureToken{ token: spt.Token(), + environment: token.environment, clientID: token.clientID, tenantID: token.tenantID, apiserverID: token.apiserverID, @@ -352,6 +366,7 @@ return &azureToken{ token: *token, + environment: ts.environment.Name, clientID: ts.clientID, tenantID: ts.tenantID, apiserverID: ts.apiserverID, diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/README.md consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/README.md --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/README.md 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/azure/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,7 @@ * Replace `TENANT_ID` with your tenant ID.   * For a list of alternative username claims that are supported by the OIDC issuer check the JSON response at `https://sts.windows.net/TENANT_ID/.well-known/openid-configuration`. -5. Configure `kubectl` to use the `azure` authentication provider +5. Configure `kubectl` to use the `azure` authentication provider ``` kubectl config set-credentials "USER_NAME" --auth-provider=azure \ diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,6 +20,7 @@ "bytes" "context" "crypto/tls" + "errors" "fmt" "io" "net" @@ -30,18 +31,20 @@ "sync" "time" - "github.com/golang/glog" + "github.com/davecgh/go-spew/spew" "golang.org/x/crypto/ssh/terminal" - "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/pkg/apis/clientauthentication" "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1" "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1" "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/transport" "k8s.io/client-go/util/connrotation" + "k8s.io/klog" ) const execInfoEnv = "KUBERNETES_EXEC_INFO" @@ -51,9 +54,9 @@ func init() { v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) - v1alpha1.AddToScheme(scheme) - v1beta1.AddToScheme(scheme) - clientauthentication.AddToScheme(scheme) + utilruntime.Must(v1alpha1.AddToScheme(scheme)) + utilruntime.Must(v1beta1.AddToScheme(scheme)) + utilruntime.Must(clientauthentication.AddToScheme(scheme)) } var ( @@ -71,8 +74,10 @@ return &cache{m: make(map[string]*Authenticator)} } +var spewConfig = &spew.ConfigState{DisableMethods: true, Indent: " "} + func cacheKey(c *api.ExecConfig) string { - return fmt.Sprintf("%#v", c) + return spewConfig.Sprint(c) } type cache struct { @@ -170,29 +175,14 @@ // UpdateTransportConfig updates the transport.Config to use credentials // returned by the plugin. func (a *Authenticator) UpdateTransportConfig(c *transport.Config) error { - wt := c.WrapTransport - c.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { - if wt != nil { - rt = wt(rt) - } + c.Wrap(func(rt http.RoundTripper) http.RoundTripper { return &roundTripper{a, rt} - } + }) - getCert := c.TLS.GetCert - c.TLS.GetCert = func() (*tls.Certificate, error) { - // If previous GetCert is present and returns a valid non-nil - // certificate, use that. Otherwise use cert from exec plugin. - if getCert != nil { - cert, err := getCert() - if err != nil { - return nil, err - } - if cert != nil { - return cert, nil - } - } - return a.cert() + if c.TLS.GetCert != nil { + return errors.New("can't add TLS certificate callback: transport.Config.TLS.GetCert already set") } + c.TLS.GetCert = a.cert var dial func(ctx context.Context, network, addr string) (net.Conn, error) if c.Dial != nil { @@ -237,7 +227,7 @@ Code: int32(res.StatusCode), } if err := r.a.maybeRefreshCreds(creds, resp); err != nil { - glog.Errorf("refreshing credentials: %v", err) + klog.Errorf("refreshing credentials: %v", err) } } return res, nil diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/gcp.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,18 +27,18 @@ "sync" "time" - "github.com/golang/glog" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/yaml" restclient "k8s.io/client-go/rest" "k8s.io/client-go/util/jsonpath" + "k8s.io/klog" ) func init() { if err := restclient.RegisterAuthProviderPlugin("gcp", newGCPAuthProvider); err != nil { - glog.Fatalf("Failed to register gcp auth plugin: %v", err) + klog.Fatalf("Failed to register gcp auth plugin: %v", err) } } @@ -174,7 +174,13 @@ } func (g *gcpAuthProvider) WrapTransport(rt http.RoundTripper) http.RoundTripper { - return &conditionalTransport{&oauth2.Transport{Source: g.tokenSource, Base: rt}, g.persister} + var resetCache map[string]string + if cts, ok := g.tokenSource.(*cachedTokenSource); ok { + resetCache = cts.baseCache() + } else { + resetCache = make(map[string]string) + } + return &conditionalTransport{&oauth2.Transport{Source: g.tokenSource, Base: rt}, g.persister, resetCache} } func (g *gcpAuthProvider) Login() error { return nil } @@ -217,7 +223,7 @@ cache := t.update(tok) if t.persister != nil { if err := t.persister.Persist(cache); err != nil { - glog.V(4).Infof("Failed to persist token: %v", err) + klog.V(4).Infof("Failed to persist token: %v", err) } } return tok, nil @@ -247,6 +253,19 @@ return ret } +// baseCache is the base configuration value for this TokenSource, without any cached ephemeral tokens. +func (t *cachedTokenSource) baseCache() map[string]string { + t.lk.Lock() + defer t.lk.Unlock() + ret := map[string]string{} + for k, v := range t.cache { + ret[k] = v + } + delete(ret, "access-token") + delete(ret, "expiry") + return ret +} + type commandTokenSource struct { cmd string args []string @@ -310,7 +329,7 @@ } var expiry time.Time if t, err := time.Parse(c.timeFmt, expiryStr); err != nil { - glog.V(4).Infof("Failed to parse token expiry from %s (fmt=%s): %v", expiryStr, c.timeFmt, err) + klog.V(4).Infof("Failed to parse token expiry from %s (fmt=%s): %v", expiryStr, c.timeFmt, err) } else { expiry = t } @@ -337,6 +356,7 @@ type conditionalTransport struct { oauthTransport *oauth2.Transport persister restclient.AuthProviderConfigPersister + resetCache map[string]string } var _ net.RoundTripperWrapper = &conditionalTransport{} @@ -353,9 +373,8 @@ } if res.StatusCode == 401 { - glog.V(4).Infof("The credentials that were supplied are invalid for the target cluster") - emptyCache := make(map[string]string) - t.persister.Persist(emptyCache) + klog.V(4).Infof("The credentials that were supplied are invalid for the target cluster") + t.persister.Persist(t.resetCache) } return res, nil diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/gcp/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - cjcullen - jlowdermilk diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc.go 2020-12-10 21:46:52.000000000 +0000 @@ -28,10 +28,10 @@ "sync" "time" - "github.com/golang/glog" "golang.org/x/oauth2" "k8s.io/apimachinery/pkg/util/net" restclient "k8s.io/client-go/rest" + "k8s.io/klog" ) const ( @@ -49,7 +49,7 @@ func init() { if err := restclient.RegisterAuthProviderPlugin("oidc", newOIDCAuthProvider); err != nil { - glog.Fatalf("Failed to register oidc auth plugin: %v", err) + klog.Fatalf("Failed to register oidc auth plugin: %v", err) } } @@ -124,7 +124,7 @@ } if len(cfg[cfgExtraScopes]) > 0 { - glog.V(2).Infof("%s auth provider field depricated, refresh request don't send scopes", + klog.V(2).Infof("%s auth provider field depricated, refresh request don't send scopes", cfgExtraScopes) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/oidc/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + approvers: - ericchiang reviewers: diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/openstack.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/openstack.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/openstack.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/openstack/openstack.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,9 +22,9 @@ "sync" "time" - "github.com/golang/glog" "github.com/gophercloud/gophercloud" "github.com/gophercloud/gophercloud/openstack" + "k8s.io/klog" "k8s.io/apimachinery/pkg/util/net" restclient "k8s.io/client-go/rest" @@ -32,7 +32,7 @@ func init() { if err := restclient.RegisterAuthProviderPlugin("openstack", newOpenstackAuthProvider); err != nil { - glog.Fatalf("Failed to register openstack auth plugin: %s", err) + klog.Fatalf("Failed to register openstack auth plugin: %s", err) } } @@ -62,7 +62,7 @@ var err error if t.authOpt == nil { // reads the config from the environment - glog.V(4).Info("reading openstack config from the environment variables") + klog.V(4).Info("reading openstack config from the environment variables") options, err = openstack.AuthOptionsFromEnv() if err != nil { return "", fmt.Errorf("failed to read openstack env vars: %s", err) @@ -126,7 +126,7 @@ if err == nil { req.Header.Set("Authorization", "Bearer "+token) } else { - glog.V(4).Infof("failed to get token: %s", err) + klog.V(4).Infof("failed to get token: %s", err) } return t.RoundTripper.RoundTrip(req) @@ -140,7 +140,7 @@ var ttlDuration time.Duration var err error - glog.Warningf("WARNING: in-tree openstack auth plugin is now deprecated. please use the \"client-keystone-auth\" kubectl/client-go credential plugin instead") + klog.Warningf("WARNING: in-tree openstack auth plugin is now deprecated. please use the \"client-keystone-auth\" kubectl/client-go credential plugin instead") ttl, found := config["ttl"] if !found { ttlDuration = DefaultTTLDuration diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/OWNERS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/plugin/pkg/client/auth/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- sig-auth-authenticators-approvers +reviewers: +- sig-auth-authenticators-reviewers +labels: +- sig/auth + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/config.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/config.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,6 +18,7 @@ import ( "context" + "errors" "fmt" "io/ioutil" "net" @@ -28,15 +29,15 @@ "strings" "time" - "github.com/golang/glog" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/pkg/version" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + "k8s.io/client-go/transport" certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/flowcontrol" + "k8s.io/klog" ) const ( @@ -44,6 +45,8 @@ DefaultBurst int = 10 ) +var ErrNotInCluster = errors.New("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") + // Config holds the common attributes that can be passed to a Kubernetes client on // initialization. type Config struct { @@ -68,6 +71,11 @@ // TODO: demonstrate an OAuth2 compatible client. BearerToken string + // Path to a file containing a BearerToken. + // If set, the contents are periodically read. + // The last successfully read value takes precedence over BearerToken. + BearerTokenFile string + // Impersonate is the configuration that RESTClient will use for impersonation. Impersonate ImpersonationConfig @@ -86,15 +94,22 @@ // UserAgent is an optional field that specifies the caller of this request. UserAgent string + // DisableCompression bypasses automatic GZip compression requests to the + // server. + DisableCompression bool + // Transport may be used for custom HTTP behavior. This attribute may not // be specified with the TLS client certificate options. Use WrapTransport - // for most client level operations. + // to provide additional per-server middleware behavior. Transport http.RoundTripper // WrapTransport will be invoked for custom HTTP behavior after the underlying // transport is initialized (either the transport created from TLSClientConfig, // Transport, or http.DefaultTransport). The config may layer other RoundTrippers // on top of the returned RoundTripper. - WrapTransport func(rt http.RoundTripper) http.RoundTripper + // + // A future release will change this field to an array. Use config.Wrap() + // instead of setting this value directly. + WrapTransport transport.WrapperFunc // QPS indicates the maximum QPS to the master from this client. // If it's zero, the created RESTClient will use DefaultQPS: 5 @@ -118,6 +133,47 @@ // Version string } +var _ fmt.Stringer = new(Config) +var _ fmt.GoStringer = new(Config) + +type sanitizedConfig *Config + +type sanitizedAuthConfigPersister struct{ AuthProviderConfigPersister } + +func (sanitizedAuthConfigPersister) GoString() string { + return "rest.AuthProviderConfigPersister(--- REDACTED ---)" +} +func (sanitizedAuthConfigPersister) String() string { + return "rest.AuthProviderConfigPersister(--- REDACTED ---)" +} + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of Config +// to prevent accidental leaking via logs. +func (c *Config) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of Config to +// prevent accidental leaking via logs. +func (c *Config) String() string { + if c == nil { + return "" + } + cc := sanitizedConfig(CopyConfig(c)) + // Explicitly mark non-empty credential fields as redacted. + if cc.Password != "" { + cc.Password = "--- REDACTED ---" + } + if cc.BearerToken != "" { + cc.BearerToken = "--- REDACTED ---" + } + if cc.AuthConfigPersister != nil { + cc.AuthConfigPersister = sanitizedAuthConfigPersister{cc.AuthConfigPersister} + } + + return fmt.Sprintf("%#v", cc) +} + // ImpersonationConfig has all the available impersonation options type ImpersonationConfig struct { // UserName is the username to impersonate on each request. @@ -155,6 +211,47 @@ // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). // CAData takes precedence over CAFile CAData []byte + + // NextProtos is a list of supported application level protocols, in order of preference. + // Used to populate tls.Config.NextProtos. + // To indicate to the server http/1.1 is preferred over http/2, set to ["http/1.1", "h2"] (though the server is free to ignore that preference). + // To use only http/1.1, set to ["http/1.1"]. + NextProtos []string +} + +var _ fmt.Stringer = TLSClientConfig{} +var _ fmt.GoStringer = TLSClientConfig{} + +type sanitizedTLSClientConfig TLSClientConfig + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of +// TLSClientConfig to prevent accidental leaking via logs. +func (c TLSClientConfig) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of +// TLSClientConfig to prevent accidental leaking via logs. +func (c TLSClientConfig) String() string { + cc := sanitizedTLSClientConfig{ + Insecure: c.Insecure, + ServerName: c.ServerName, + CertFile: c.CertFile, + KeyFile: c.KeyFile, + CAFile: c.CAFile, + CertData: c.CertData, + KeyData: c.KeyData, + CAData: c.CAData, + NextProtos: c.NextProtos, + } + // Explicitly mark non-empty credential fields as redacted. + if len(cc.CertData) != 0 { + cc.CertData = []byte("--- TRUNCATED ---") + } + if len(cc.KeyData) != 0 { + cc.KeyData = []byte("--- REDACTED ---") + } + return fmt.Sprintf("%#v", cc) } type ContentConfig struct { @@ -220,7 +317,7 @@ // the config.Version to be empty. func UnversionedRESTClientFor(config *Config) (*RESTClient, error) { if config.NegotiatedSerializer == nil { - return nil, fmt.Errorf("NeogitatedSerializer is required when initializing a RESTClient") + return nil, fmt.Errorf("NegotiatedSerializer is required when initializing a RESTClient") } baseURL, versionedAPIPath, err := defaultServerUrlFor(config) @@ -308,22 +405,27 @@ // InClusterConfig returns a config object which uses the service account // kubernetes gives to pods. It's intended for clients that expect to be -// running inside a pod running on kubernetes. It will return an error if -// called from a process not running in a kubernetes environment. +// running inside a pod running on kubernetes. It will return ErrNotInCluster +// if called from a process not running in a kubernetes environment. func InClusterConfig() (*Config, error) { + const ( + tokenFile = "/var/run/secrets/kubernetes.io/serviceaccount/token" + rootCAFile = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" + ) host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT") if len(host) == 0 || len(port) == 0 { - return nil, fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") + return nil, ErrNotInCluster } - token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token") + token, err := ioutil.ReadFile(tokenFile) if err != nil { return nil, err } + tlsClientConfig := TLSClientConfig{} - rootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" + if _, err := certutil.NewPool(rootCAFile); err != nil { - glog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err) + klog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err) } else { tlsClientConfig.CAFile = rootCAFile } @@ -331,8 +433,9 @@ return &Config{ // TODO: switch to using cluster DNS. Host: "https://" + net.JoinHostPort(host, port), - BearerToken: string(token), TLSClientConfig: tlsClientConfig, + BearerToken: string(token), + BearerTokenFile: tokenFile, }, nil } @@ -395,7 +498,7 @@ return config } -// AnonymousClientConfig returns a copy of the given config with all user credentials (cert/key, bearer token, and username/password) removed +// AnonymousClientConfig returns a copy of the given config with all user credentials (cert/key, bearer token, and username/password) and custom transports (WrapTransport, Transport) removed func AnonymousClientConfig(config *Config) *Config { // copy only known safe fields return &Config{ @@ -407,27 +510,28 @@ ServerName: config.ServerName, CAFile: config.TLSClientConfig.CAFile, CAData: config.TLSClientConfig.CAData, + NextProtos: config.TLSClientConfig.NextProtos, }, - RateLimiter: config.RateLimiter, - UserAgent: config.UserAgent, - Transport: config.Transport, - WrapTransport: config.WrapTransport, - QPS: config.QPS, - Burst: config.Burst, - Timeout: config.Timeout, - Dial: config.Dial, + RateLimiter: config.RateLimiter, + UserAgent: config.UserAgent, + DisableCompression: config.DisableCompression, + QPS: config.QPS, + Burst: config.Burst, + Timeout: config.Timeout, + Dial: config.Dial, } } // CopyConfig returns a copy of the given config func CopyConfig(config *Config) *Config { return &Config{ - Host: config.Host, - APIPath: config.APIPath, - ContentConfig: config.ContentConfig, - Username: config.Username, - Password: config.Password, - BearerToken: config.BearerToken, + Host: config.Host, + APIPath: config.APIPath, + ContentConfig: config.ContentConfig, + Username: config.Username, + Password: config.Password, + BearerToken: config.BearerToken, + BearerTokenFile: config.BearerTokenFile, Impersonate: ImpersonationConfig{ Groups: config.Impersonate.Groups, Extra: config.Impersonate.Extra, @@ -445,14 +549,16 @@ CertData: config.TLSClientConfig.CertData, KeyData: config.TLSClientConfig.KeyData, CAData: config.TLSClientConfig.CAData, + NextProtos: config.TLSClientConfig.NextProtos, }, - UserAgent: config.UserAgent, - Transport: config.Transport, - WrapTransport: config.WrapTransport, - QPS: config.QPS, - Burst: config.Burst, - RateLimiter: config.RateLimiter, - Timeout: config.Timeout, - Dial: config.Dial, + UserAgent: config.UserAgent, + DisableCompression: config.DisableCompression, + Transport: config.Transport, + WrapTransport: config.WrapTransport, + QPS: config.QPS, + Burst: config.Burst, + RateLimiter: config.RateLimiter, + Timeout: config.Timeout, + Dial: config.Dial, } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - thockin - smarterclayton diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/plugin.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/plugin.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/plugin.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/plugin.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ "net/http" "sync" - "github.com/golang/glog" + "k8s.io/klog" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) @@ -55,9 +55,9 @@ pluginsLock.Lock() defer pluginsLock.Unlock() if _, found := plugins[name]; found { - return fmt.Errorf("Auth Provider Plugin %q was registered twice", name) + return fmt.Errorf("auth Provider Plugin %q was registered twice", name) } - glog.V(4).Infof("Registered Auth Provider Plugin %q", name) + klog.V(4).Infof("Registered Auth Provider Plugin %q", name) plugins[name] = plugin return nil } @@ -67,7 +67,7 @@ defer pluginsLock.Unlock() p, ok := plugins[apc.Name] if !ok { - return nil, fmt.Errorf("No Auth Provider found for name %q", apc.Name) + return nil, fmt.Errorf("no Auth Provider found for name %q", apc.Name) } return p(clusterAddress, apc.Config, persister) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/request.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/request.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/request.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/request.go 2020-12-10 21:46:52.000000000 +0000 @@ -32,7 +32,6 @@ "strings" "time" - "github.com/golang/glog" "golang.org/x/net/http2" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -44,6 +43,7 @@ restclientwatch "k8s.io/client-go/rest/watch" "k8s.io/client-go/tools/metrics" "k8s.io/client-go/util/flowcontrol" + "k8s.io/klog" ) var ( @@ -114,7 +114,7 @@ // NewRequest creates a new request helper object for accessing runtime.Objects on a server. func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPath string, content ContentConfig, serializers Serializers, backoff BackoffManager, throttle flowcontrol.RateLimiter, timeout time.Duration) *Request { if backoff == nil { - glog.V(2).Infof("Not implementing request backoff strategy.") + klog.V(2).Infof("Not implementing request backoff strategy.") backoff = &NoBackoff{} } @@ -198,7 +198,7 @@ return r } -// SubResource sets a sub-resource path which can be multiple segments segment after the resource +// SubResource sets a sub-resource path which can be multiple segments after the resource // name but before the suffix. func (r *Request) SubResource(subresources ...string) *Request { if r.err != nil { @@ -455,17 +455,9 @@ // finalURLTemplate is similar to URL(), but will make all specific parameter values equal // - instead of name or namespace, "{name}" and "{namespace}" will be used, and all query -// parameters will be reset. This creates a copy of the request so as not to change the -// underlying object. This means some useful request info (like the types of field -// selectors in use) will be lost. -// TODO: preserve field selector keys +// parameters will be reset. This creates a copy of the url so as not to change the +// underlying object. func (r Request) finalURLTemplate() url.URL { - if len(r.resourceName) != 0 { - r.resourceName = "{name}" - } - if r.namespaceSet && len(r.namespace) != 0 { - r.namespace = "{namespace}" - } newParams := url.Values{} v := []string{"{value}"} for k := range r.params { @@ -473,17 +465,80 @@ } r.params = newParams url := r.URL() + segments := strings.Split(r.URL().Path, "/") + groupIndex := 0 + index := 0 + if r.URL() != nil && r.baseURL != nil && strings.Contains(r.URL().Path, r.baseURL.Path) { + groupIndex += len(strings.Split(r.baseURL.Path, "/")) + } + if groupIndex >= len(segments) { + return *url + } + + const CoreGroupPrefix = "api" + const NamedGroupPrefix = "apis" + isCoreGroup := segments[groupIndex] == CoreGroupPrefix + isNamedGroup := segments[groupIndex] == NamedGroupPrefix + if isCoreGroup { + // checking the case of core group with /api/v1/... format + index = groupIndex + 2 + } else if isNamedGroup { + // checking the case of named group with /apis/apps/v1/... format + index = groupIndex + 3 + } else { + // this should not happen that the only two possibilities are /api... and /apis..., just want to put an + // outlet here in case more API groups are added in future if ever possible: + // https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-groups + // if a wrong API groups name is encountered, return the {prefix} for url.Path + url.Path = "/{prefix}" + url.RawQuery = "" + return *url + } + //switch segLength := len(segments) - index; segLength { + switch { + // case len(segments) - index == 1: + // resource (with no name) do nothing + case len(segments)-index == 2: + // /$RESOURCE/$NAME: replace $NAME with {name} + segments[index+1] = "{name}" + case len(segments)-index == 3: + if segments[index+2] == "finalize" || segments[index+2] == "status" { + // /$RESOURCE/$NAME/$SUBRESOURCE: replace $NAME with {name} + segments[index+1] = "{name}" + } else { + // /namespace/$NAMESPACE/$RESOURCE: replace $NAMESPACE with {namespace} + segments[index+1] = "{namespace}" + } + case len(segments)-index >= 4: + segments[index+1] = "{namespace}" + // /namespace/$NAMESPACE/$RESOURCE/$NAME: replace $NAMESPACE with {namespace}, $NAME with {name} + if segments[index+3] != "finalize" && segments[index+3] != "status" { + // /$RESOURCE/$NAME/$SUBRESOURCE: replace $NAME with {name} + segments[index+3] = "{name}" + } + } + url.Path = path.Join(segments...) return *url } -func (r *Request) tryThrottle() { +func (r *Request) tryThrottle() error { + if r.throttle == nil { + return nil + } + now := time.Now() - if r.throttle != nil { + var err error + if r.ctx != nil { + err = r.throttle.Wait(r.ctx) + } else { r.throttle.Accept() } + if latency := time.Since(now); latency > longThrottleLatency { - glog.V(4).Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) + klog.V(4).Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) } + + return err } // Watch attempts to begin watching the requested location. @@ -537,7 +592,7 @@ if err != nil { // The watch stream mechanism handles many common partial data errors, so closed // connections can be retried in many cases. - if net.IsProbableEOF(err) { + if net.IsProbableEOF(err) || net.IsTimeout(err) { return watch.NewEmptyWatch(), nil } return nil, err @@ -547,10 +602,15 @@ if result := r.transformResponse(resp, req); result.err != nil { return nil, result.err } - return nil, fmt.Errorf("for request '%+v', got status: %v", url, resp.StatusCode) + return nil, fmt.Errorf("for request %s, got status: %v", url, resp.StatusCode) } wrapperDecoder := wrapperDecoderFn(resp.Body) - return watch.NewStreamWatcher(restclientwatch.NewDecoder(wrapperDecoder, embeddedDecoder)), nil + return watch.NewStreamWatcher( + restclientwatch.NewDecoder(wrapperDecoder, embeddedDecoder), + // use 500 to indicate that the cause of the error is unknown - other error codes + // are more specific to HTTP interactions, and set a reason + errors.NewClientErrorReporter(http.StatusInternalServerError, r.verb, "ClientWatchDecoding"), + ), nil } // updateURLMetrics is a convenience function for pushing metrics. @@ -580,13 +640,18 @@ return nil, r.err } - r.tryThrottle() + if err := r.tryThrottle(); err != nil { + return nil, err + } url := r.URL().String() req, err := http.NewRequest(r.verb, url, nil) if err != nil { return nil, err } + if r.body != nil { + req.Body = ioutil.NopCloser(r.body) + } if r.ctx != nil { req = req.WithContext(r.ctx) } @@ -638,7 +703,7 @@ }() if r.err != nil { - glog.V(4).Infof("Error in request: %v", r.err) + klog.V(4).Infof("Error in request: %v", r.err) return r.err } @@ -682,7 +747,9 @@ // We are retrying the request that we already send to apiserver // at least once before. // This request should also be throttled with the client-internal throttler. - r.tryThrottle() + if err := r.tryThrottle(); err != nil { + return err + } } resp, err := client.Do(req) updateURLMetrics(r, resp, err) @@ -725,13 +792,13 @@ if seeker, ok := r.body.(io.Seeker); ok && r.body != nil { _, err := seeker.Seek(0, 0) if err != nil { - glog.V(4).Infof("Could not retry request, can't Seek() back to beginning of body for %T", r.body) + klog.V(4).Infof("Could not retry request, can't Seek() back to beginning of body for %T", r.body) fn(req, resp) return true } } - glog.V(4).Infof("Got a Retry-After %s response for attempt %d to %v", seconds, retries, url) + klog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v", seconds, retries, url) r.backoffMgr.Sleep(time.Duration(seconds) * time.Second) return false } @@ -753,7 +820,9 @@ // * If the server responds with a status: *errors.StatusError or *errors.UnexpectedObjectError // * http.Client.Do errors are returned directly. func (r *Request) Do() Result { - r.tryThrottle() + if err := r.tryThrottle(); err != nil { + return Result{err: err} + } var result Result err := r.request(func(req *http.Request, resp *http.Response) { @@ -767,7 +836,9 @@ // DoRaw executes the request but does not process the response body. func (r *Request) DoRaw() ([]byte, error) { - r.tryThrottle() + if err := r.tryThrottle(); err != nil { + return nil, err + } var result Result err := r.request(func(req *http.Request, resp *http.Response) { @@ -799,14 +870,14 @@ // 2. Apiserver sends back the headers and then part of the body // 3. Apiserver closes connection. // 4. client-go should catch this and return an error. - glog.V(2).Infof("Stream error %#v when reading response body, may be caused by closed connection.", err) - streamErr := fmt.Errorf("Stream error %#v when reading response body, may be caused by closed connection. Please retry.", err) + klog.V(2).Infof("Stream error %#v when reading response body, may be caused by closed connection.", err) + streamErr := fmt.Errorf("stream error when reading response body, may be caused by closed connection. Please retry. Original error: %v", err) return Result{ err: streamErr, } default: - glog.Errorf("Unexpected error when reading response body: %#v", err) - unexpectedErr := fmt.Errorf("Unexpected error %#v when reading response body. Please retry.", err) + klog.Errorf("Unexpected error when reading response body: %v", err) + unexpectedErr := fmt.Errorf("unexpected error when reading response body. Please retry. Original error: %v", err) return Result{ err: unexpectedErr, } @@ -869,11 +940,11 @@ func truncateBody(body string) string { max := 0 switch { - case bool(glog.V(10)): + case bool(klog.V(10)): return body - case bool(glog.V(9)): + case bool(klog.V(9)): max = 10240 - case bool(glog.V(8)): + case bool(klog.V(8)): max = 1024 } @@ -888,13 +959,13 @@ // allocating a new string for the body output unless necessary. Uses a simple heuristic to determine // whether the body is printable. func glogBody(prefix string, body []byte) { - if glog.V(8) { + if klog.V(8) { if bytes.IndexFunc(body, func(r rune) bool { return r < 0x0a }) != -1 { - glog.Infof("%s:\n%s", prefix, truncateBody(hex.Dump(body))) + klog.Infof("%s:\n%s", prefix, truncateBody(hex.Dump(body))) } else { - glog.Infof("%s: %s", prefix, truncateBody(string(body))) + klog.Infof("%s: %s", prefix, truncateBody(string(body))) } } } @@ -1055,7 +1126,8 @@ return fmt.Errorf("serializer for %s doesn't exist", r.contentType) } if len(r.body) == 0 { - return fmt.Errorf("0-length response") + return fmt.Errorf("0-length response with status code: %d and content type: %s", + r.statusCode, r.contentType) } out, _, err := r.decoder.Decode(r.body, nil, obj) @@ -1096,7 +1168,7 @@ // to be backwards compatible with old servers that do not return a version, default to "v1" out, _, err := r.decoder.Decode(r.body, &schema.GroupVersionKind{Version: "v1"}, nil) if err != nil { - glog.V(5).Infof("body was not decodable (unable to check for Status): %v", err) + klog.V(5).Infof("body was not decodable (unable to check for Status): %v", err) return r.err } switch t := out.(type) { @@ -1150,7 +1222,6 @@ func ValidatePathSegmentName(name string, prefix bool) []string { if prefix { return IsValidPathSegmentPrefix(name) - } else { - return IsValidPathSegmentName(name) } + return IsValidPathSegmentName(name) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/transport.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/transport.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/transport.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/transport.go 2020-12-10 21:46:52.000000000 +0000 @@ -61,9 +61,10 @@ // TransportConfig converts a client config to an appropriate transport config. func (c *Config) TransportConfig() (*transport.Config, error) { conf := &transport.Config{ - UserAgent: c.UserAgent, - Transport: c.Transport, - WrapTransport: c.WrapTransport, + UserAgent: c.UserAgent, + Transport: c.Transport, + WrapTransport: c.WrapTransport, + DisableCompression: c.DisableCompression, TLS: transport.TLSConfig{ Insecure: c.Insecure, ServerName: c.ServerName, @@ -73,10 +74,12 @@ CertData: c.CertData, KeyFile: c.KeyFile, KeyData: c.KeyData, + NextProtos: c.NextProtos, }, - Username: c.Username, - Password: c.Password, - BearerToken: c.BearerToken, + Username: c.Username, + Password: c.Password, + BearerToken: c.BearerToken, + BearerTokenFile: c.BearerTokenFile, Impersonate: transport.ImpersonationConfig{ UserName: c.Impersonate.UserName, Groups: c.Impersonate.Groups, @@ -103,14 +106,15 @@ if err != nil { return nil, err } - wt := conf.WrapTransport - if wt != nil { - conf.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { - return provider.WrapTransport(wt(rt)) - } - } else { - conf.WrapTransport = provider.WrapTransport - } + conf.Wrap(provider.WrapTransport) } return conf, nil } + +// Wrap adds a transport middleware function that will give the caller +// an opportunity to wrap the underlying http.RoundTripper prior to the +// first API call being made. The provided function is invoked after any +// existing transport wrappers are invoked. +func (c *Config) Wrap(fn transport.WrapperFunc) { + c.WrapTransport = transport.Wrappers(c.WrapTransport, fn) +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/urlbackoff.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/urlbackoff.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/urlbackoff.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/urlbackoff.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,9 +20,9 @@ "net/url" "time" - "github.com/golang/glog" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/util/flowcontrol" + "k8s.io/klog" ) // Set of resp. Codes that we backoff for. @@ -64,7 +64,7 @@ // Disable makes the backoff trivial, i.e., sets it to zero. This might be used // by tests which want to run 1000s of mock requests without slowing down. func (b *URLBackoff) Disable() { - glog.V(4).Infof("Disabling backoff strategy") + klog.V(4).Infof("Disabling backoff strategy") b.Backoff = flowcontrol.NewBackOff(0*time.Second, 0*time.Second) } @@ -76,7 +76,7 @@ // in the future. host, err := url.Parse(rawurl.String()) if err != nil { - glog.V(4).Infof("Error extracting url: %v", rawurl) + klog.V(4).Infof("Error extracting url: %v", rawurl) panic("bad url!") } return host.Host @@ -89,7 +89,7 @@ b.Backoff.Next(b.baseUrlKey(actualUrl), b.Backoff.Clock.Now()) return } else if responseCode >= 300 || err != nil { - glog.V(4).Infof("Client is returning errors: code %v, error %v", responseCode, err) + klog.V(4).Infof("Client is returning errors: code %v, error %v", responseCode, err) } //If we got this far, there is no backoff required for this URL anymore. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/watch/decoder.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/watch/decoder.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/watch/decoder.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/watch/decoder.go 2020-12-10 21:46:52.000000000 +0000 @@ -54,7 +54,7 @@ return "", nil, fmt.Errorf("unable to decode to metav1.Event") } switch got.Type { - case string(watch.Added), string(watch.Modified), string(watch.Deleted), string(watch.Error): + case string(watch.Added), string(watch.Modified), string(watch.Deleted), string(watch.Error), string(watch.Bookmark): default: return "", nil, fmt.Errorf("got invalid watch event type: %v", got.Type) } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -38,6 +38,11 @@ *out = make([]byte, len(*in)) copy(*out, *in) } + if in.NextProtos != nil { + in, out := &in.NextProtos, &out.NextProtos + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/auth/clientauth.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/auth/clientauth.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/auth/clientauth.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/auth/clientauth.go 2020-12-10 21:46:52.000000000 +0000 @@ -105,7 +105,7 @@ // The fields of client.Config with a corresponding field in the Info are set // with the value from the Info. func (info Info) MergeWithConfig(c restclient.Config) (restclient.Config, error) { - var config restclient.Config = c + var config = c config.Username = info.User config.Password = info.Password config.CAFile = info.CAFile @@ -118,6 +118,7 @@ return config, nil } +// Complete returns true if the Kubernetes API authorization info is complete. func (info Info) Complete() bool { return len(info.User) > 0 || len(info.CertFile) > 0 || diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/auth/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/auth/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/auth/OWNERS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/auth/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- sig-auth-authenticators-approvers +reviewers: +- sig-auth-authenticators-reviewers +labels: +- sig/auth + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,4 +15,5 @@ */ // +k8s:deepcopy-gen=package + package api diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go 2020-12-10 21:46:52.000000000 +0000 @@ -29,6 +29,8 @@ func init() { sDec, _ := base64.StdEncoding.DecodeString("REDACTED+") redactedBytes = []byte(string(sDec)) + sDec, _ = base64.StdEncoding.DecodeString("DATA+OMITTED") + dataOmittedBytes = []byte(string(sDec)) } // IsConfigEmpty returns true if the config is empty. @@ -79,7 +81,10 @@ return nil } -var redactedBytes []byte +var ( + redactedBytes []byte + dataOmittedBytes []byte +) // Flatten redacts raw data entries from the config object for a human-readable view. func ShortenConfig(config *Config) { @@ -97,7 +102,7 @@ } for key, cluster := range config.Clusters { if len(cluster.CertificateAuthorityData) > 0 { - cluster.CertificateAuthorityData = redactedBytes + cluster.CertificateAuthorityData = dataOmittedBytes } config.Clusters[key] = cluster } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/latest/latest.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/latest/latest.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/latest/latest.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/latest/latest.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,6 +21,7 @@ "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/json" "k8s.io/apimachinery/pkg/runtime/serializer/versioning" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/tools/clientcmd/api/v1" ) @@ -47,14 +48,8 @@ func init() { Scheme = runtime.NewScheme() - if err := api.AddToScheme(Scheme); err != nil { - // Programmer error, detect immediately - panic(err) - } - if err := v1.AddToScheme(Scheme); err != nil { - // Programmer error, detect immediately - panic(err) - } + utilruntime.Must(api.AddToScheme(Scheme)) + utilruntime.Must(v1.AddToScheme(Scheme)) yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, Scheme, Scheme) Codec = versioning.NewDefaultingCodecForScheme( Scheme, diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/types.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/types.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/types.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/types.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,8 @@ package api import ( + "fmt" + "k8s.io/apimachinery/pkg/runtime" ) @@ -150,6 +152,25 @@ Config map[string]string `json:"config,omitempty"` } +var _ fmt.Stringer = new(AuthProviderConfig) +var _ fmt.GoStringer = new(AuthProviderConfig) + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of +// AuthProviderConfig to prevent accidental leaking via logs. +func (c AuthProviderConfig) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of +// AuthProviderConfig to prevent accidental leaking via logs. +func (c AuthProviderConfig) String() string { + cfg := "" + if c.Config != nil { + cfg = "--- REDACTED ---" + } + return fmt.Sprintf("api.AuthProviderConfig{Name: %q, Config: map[string]string{%s}}", c.Name, cfg) +} + // ExecConfig specifies a command to provide client credentials. The command is exec'd // and outputs structured stdout holding credentials. // @@ -172,6 +193,29 @@ APIVersion string `json:"apiVersion,omitempty"` } +var _ fmt.Stringer = new(ExecConfig) +var _ fmt.GoStringer = new(ExecConfig) + +// GoString implements fmt.GoStringer and sanitizes sensitive fields of +// ExecConfig to prevent accidental leaking via logs. +func (c ExecConfig) GoString() string { + return c.String() +} + +// String implements fmt.Stringer and sanitizes sensitive fields of ExecConfig +// to prevent accidental leaking via logs. +func (c ExecConfig) String() string { + var args []string + if len(c.Args) > 0 { + args = []string{"--- REDACTED ---"} + } + env := "[]ExecEnvVar(nil)" + if len(c.Env) > 0 { + env = "[]ExecEnvVar{--- REDACTED ---}" + } + return fmt.Sprintf("api.AuthProviderConfig{Command: %q, Args: %#v, Env: %s, APIVersion: %q}", c.Command, args, env, c.APIVersion) +} + // ExecEnvVar is used for setting environment variables when executing an exec-based // credential plugin. type ExecEnvVar struct { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/doc.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/doc.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/doc.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/doc.go 2020-12-10 21:46:52.000000000 +0000 @@ -15,4 +15,5 @@ */ // +k8s:deepcopy-gen=package + package v1 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/v1/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,31 +46,26 @@ in, out := &in.ImpersonateUserExtra, &out.ImpersonateUserExtra *out = make(map[string][]string, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } if in.AuthProvider != nil { in, out := &in.AuthProvider, &out.AuthProvider - if *in == nil { - *out = nil - } else { - *out = new(AuthProviderConfig) - (*in).DeepCopyInto(*out) - } + *out = new(AuthProviderConfig) + (*in).DeepCopyInto(*out) } if in.Exec != nil { in, out := &in.Exec, &out.Exec - if *in == nil { - *out = nil - } else { - *out = new(ExecConfig) - (*in).DeepCopyInto(*out) - } + *out = new(ExecConfig) + (*in).DeepCopyInto(*out) } if in.Extensions != nil { in, out := &in.Extensions, &out.Extensions diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go 2020-12-10 21:46:52.000000000 +0000 @@ -46,31 +46,26 @@ in, out := &in.ImpersonateUserExtra, &out.ImpersonateUserExtra *out = make(map[string][]string, len(*in)) for key, val := range *in { + var outVal []string if val == nil { (*out)[key] = nil } else { - (*out)[key] = make([]string, len(val)) - copy((*out)[key], val) + in, out := &val, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) } + (*out)[key] = outVal } } if in.AuthProvider != nil { in, out := &in.AuthProvider, &out.AuthProvider - if *in == nil { - *out = nil - } else { - *out = new(AuthProviderConfig) - (*in).DeepCopyInto(*out) - } + *out = new(AuthProviderConfig) + (*in).DeepCopyInto(*out) } if in.Exec != nil { in, out := &in.Exec, &out.Exec - if *in == nil { - *out = nil - } else { - *out = new(ExecConfig) - (*in).DeepCopyInto(*out) - } + *out = new(ExecConfig) + (*in).DeepCopyInto(*out) } if in.Extensions != nil { in, out := &in.Extensions, &out.Extensions @@ -159,36 +154,45 @@ in, out := &in.Clusters, &out.Clusters *out = make(map[string]*Cluster, len(*in)) for key, val := range *in { + var outVal *Cluster if val == nil { (*out)[key] = nil } else { - (*out)[key] = new(Cluster) - val.DeepCopyInto((*out)[key]) + in, out := &val, &outVal + *out = new(Cluster) + (*in).DeepCopyInto(*out) } + (*out)[key] = outVal } } if in.AuthInfos != nil { in, out := &in.AuthInfos, &out.AuthInfos *out = make(map[string]*AuthInfo, len(*in)) for key, val := range *in { + var outVal *AuthInfo if val == nil { (*out)[key] = nil } else { - (*out)[key] = new(AuthInfo) - val.DeepCopyInto((*out)[key]) + in, out := &val, &outVal + *out = new(AuthInfo) + (*in).DeepCopyInto(*out) } + (*out)[key] = outVal } } if in.Contexts != nil { in, out := &in.Contexts, &out.Contexts *out = make(map[string]*Context, len(*in)) for key, val := range *in { + var outVal *Context if val == nil { (*out)[key] = nil } else { - (*out)[key] = new(Context) - val.DeepCopyInto((*out)[key]) + in, out := &val, &outVal + *out = new(Context) + (*in).DeepCopyInto(*out) } + (*out)[key] = outVal } } if in.Extensions != nil { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/client_config.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/client_config.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/client_config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/client_config.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,8 +24,8 @@ "os" "strings" - "github.com/golang/glog" "github.com/imdario/mergo" + "k8s.io/klog" restclient "k8s.io/client-go/rest" clientauth "k8s.io/client-go/tools/auth" @@ -175,10 +175,6 @@ // only try to read the auth information if we are secure if restclient.IsConfigTransportTLS(*clientConfig) { var err error - - // mergo is a first write wins for map value and a last writing wins for interface values - // NOTE: This behavior changed with https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a. - // Our mergo.Merge version is older than this change. var persister restclient.AuthProviderConfigPersister if config.configAccess != nil { authInfoName, _ := config.getAuthInfoName() @@ -188,13 +184,13 @@ if err != nil { return nil, err } - mergo.Merge(clientConfig, userAuthPartialConfig) + mergo.MergeWithOverwrite(clientConfig, userAuthPartialConfig) serverAuthPartialConfig, err := getServerIdentificationPartialConfig(configAuthInfo, configClusterInfo) if err != nil { return nil, err } - mergo.Merge(clientConfig, serverAuthPartialConfig) + mergo.MergeWithOverwrite(clientConfig, serverAuthPartialConfig) } return clientConfig, nil @@ -214,7 +210,7 @@ configClientConfig.CAFile = configClusterInfo.CertificateAuthority configClientConfig.CAData = configClusterInfo.CertificateAuthorityData configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify - mergo.Merge(mergedConfig, configClientConfig) + mergo.MergeWithOverwrite(mergedConfig, configClientConfig) return mergedConfig, nil } @@ -232,12 +228,14 @@ // blindly overwrite existing values based on precedence if len(configAuthInfo.Token) > 0 { mergedConfig.BearerToken = configAuthInfo.Token + mergedConfig.BearerTokenFile = configAuthInfo.TokenFile } else if len(configAuthInfo.TokenFile) > 0 { tokenBytes, err := ioutil.ReadFile(configAuthInfo.TokenFile) if err != nil { return nil, err } mergedConfig.BearerToken = string(tokenBytes) + mergedConfig.BearerTokenFile = configAuthInfo.TokenFile } if len(configAuthInfo.Impersonate) > 0 { mergedConfig.Impersonate = restclient.ImpersonationConfig{ @@ -279,8 +277,8 @@ promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo) previouslyMergedConfig := mergedConfig mergedConfig = &restclient.Config{} - mergo.Merge(mergedConfig, promptedConfig) - mergo.Merge(mergedConfig, previouslyMergedConfig) + mergo.MergeWithOverwrite(mergedConfig, promptedConfig) + mergo.MergeWithOverwrite(mergedConfig, previouslyMergedConfig) config.promptedCredentials.username = mergedConfig.Username config.promptedCredentials.password = mergedConfig.Password } @@ -299,16 +297,6 @@ return config } -// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information -func makeServerIdentificationConfig(info clientauth.Info) restclient.Config { - config := restclient.Config{} - config.CAFile = info.CAFile - if info.Insecure != nil { - config.Insecure = *info.Insecure - } - return config -} - func canIdentifyUser(config restclient.Config) bool { return len(config.Username) > 0 || (len(config.CertFile) > 0 || len(config.CertData) > 0) || @@ -423,11 +411,11 @@ mergedContext := clientcmdapi.NewContext() if configContext, exists := contexts[contextName]; exists { - mergo.Merge(mergedContext, configContext) + mergo.MergeWithOverwrite(mergedContext, configContext) } else if required { return clientcmdapi.Context{}, fmt.Errorf("context %q does not exist", contextName) } - mergo.Merge(mergedContext, config.overrides.Context) + mergo.MergeWithOverwrite(mergedContext, config.overrides.Context) return *mergedContext, nil } @@ -439,11 +427,11 @@ mergedAuthInfo := clientcmdapi.NewAuthInfo() if configAuthInfo, exists := authInfos[authInfoName]; exists { - mergo.Merge(mergedAuthInfo, configAuthInfo) + mergo.MergeWithOverwrite(mergedAuthInfo, configAuthInfo) } else if required { return clientcmdapi.AuthInfo{}, fmt.Errorf("auth info %q does not exist", authInfoName) } - mergo.Merge(mergedAuthInfo, config.overrides.AuthInfo) + mergo.MergeWithOverwrite(mergedAuthInfo, config.overrides.AuthInfo) return *mergedAuthInfo, nil } @@ -454,13 +442,13 @@ clusterInfoName, required := config.getClusterName() mergedClusterInfo := clientcmdapi.NewCluster() - mergo.Merge(mergedClusterInfo, config.overrides.ClusterDefaults) + mergo.MergeWithOverwrite(mergedClusterInfo, config.overrides.ClusterDefaults) if configClusterInfo, exists := clusterInfos[clusterInfoName]; exists { - mergo.Merge(mergedClusterInfo, configClusterInfo) + mergo.MergeWithOverwrite(mergedClusterInfo, configClusterInfo) } else if required { return clientcmdapi.Cluster{}, fmt.Errorf("cluster %q does not exist", clusterInfoName) } - mergo.Merge(mergedClusterInfo, config.overrides.ClusterInfo) + mergo.MergeWithOverwrite(mergedClusterInfo, config.overrides.ClusterInfo) // An override of --insecure-skip-tls-verify=true and no accompanying CA/CA data should clear already-set CA/CA data // otherwise, a kubeconfig containing a CA reference would return an error that "CA and insecure-skip-tls-verify couldn't both be set" caLen := len(config.overrides.ClusterInfo.CertificateAuthority) @@ -502,8 +490,9 @@ if server := config.overrides.ClusterInfo.Server; len(server) > 0 { icc.Host = server } - if token := config.overrides.AuthInfo.Token; len(token) > 0 { - icc.BearerToken = token + if len(config.overrides.AuthInfo.Token) > 0 || len(config.overrides.AuthInfo.TokenFile) > 0 { + icc.BearerToken = config.overrides.AuthInfo.Token + icc.BearerTokenFile = config.overrides.AuthInfo.TokenFile } if certificateAuthorityFile := config.overrides.ClusterInfo.CertificateAuthority; len(certificateAuthorityFile) > 0 { icc.TLSClientConfig.CAFile = certificateAuthorityFile @@ -549,12 +538,12 @@ // to the default config. func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*restclient.Config, error) { if kubeconfigPath == "" && masterUrl == "" { - glog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.") + klog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.") kubeconfig, err := restclient.InClusterConfig() if err == nil { return kubeconfig, nil } - glog.Warning("error creating inClusterConfig, falling back to default config: ", err) + klog.Warning("error creating inClusterConfig, falling back to default config: ", err) } return NewNonInteractiveDeferredLoadingClientConfig( &ClientConfigLoadingRules{ExplicitPath: kubeconfigPath}, diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/config.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/config.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -24,7 +24,7 @@ "reflect" "sort" - "github.com/golang/glog" + "k8s.io/klog" restclient "k8s.io/client-go/rest" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -220,6 +220,9 @@ } } + // seenConfigs stores a map of config source filenames to computed config objects + seenConfigs := map[string]*clientcmdapi.Config{} + for key, context := range newConfig.Contexts { startingContext, exists := startingConfig.Contexts[key] if !reflect.DeepEqual(context, startingContext) || !exists { @@ -228,15 +231,28 @@ destinationFile = configAccess.GetDefaultFilename() } - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err + // we only obtain a fresh config object from its source file + // if we have not seen it already - this prevents us from + // reading and writing to the same number of files repeatedly + // when multiple / all contexts share the same destination file. + configToWrite, seen := seenConfigs[destinationFile] + if !seen { + var err error + configToWrite, err = getConfigFromFile(destinationFile) + if err != nil { + return err + } + seenConfigs[destinationFile] = configToWrite } + configToWrite.Contexts[key] = context + } + } - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } + // actually persist config object changes + for destinationFile, configToWrite := range seenConfigs { + if err := WriteToFile(*configToWrite, destinationFile); err != nil { + return err } } @@ -467,7 +483,7 @@ func GetConfigFromFileOrDie(filename string) *clientcmdapi.Config { config, err := getConfigFromFile(filename) if err != nil { - glog.FatalDepth(1, err) + klog.FatalDepth(1, err) } return config diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/loader.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/loader.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/loader.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/loader.go 2020-12-10 21:46:52.000000000 +0000 @@ -27,8 +27,8 @@ goruntime "runtime" "strings" - "github.com/golang/glog" "github.com/imdario/mergo" + "k8s.io/klog" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -127,6 +127,10 @@ // DefaultClientConfig is an optional field indicating what rules to use to calculate a default configuration. // This should match the overrides passed in to ClientConfig loader. DefaultClientConfig ClientConfig + + // WarnIfAllMissing indicates whether the configuration files pointed by KUBECONFIG environment variable are present or not. + // In case of missing files, it warns the user about the missing files. + WarnIfAllMissing bool } // ClientConfigLoadingRules implements the ClientConfigLoader interface. @@ -136,20 +140,23 @@ // use this constructor func NewDefaultClientConfigLoadingRules() *ClientConfigLoadingRules { chain := []string{} + warnIfAllMissing := false envVarFiles := os.Getenv(RecommendedConfigPathEnvVar) if len(envVarFiles) != 0 { fileList := filepath.SplitList(envVarFiles) // prevent the same path load multiple times chain = append(chain, deduplicate(fileList)...) + warnIfAllMissing = true } else { chain = append(chain, RecommendedHomeFile) } return &ClientConfigLoadingRules{ - Precedence: chain, - MigrationRules: currentMigrationRules(), + Precedence: chain, + MigrationRules: currentMigrationRules(), + WarnIfAllMissing: warnIfAllMissing, } } @@ -172,6 +179,7 @@ } errlist := []error{} + missingList := []string{} kubeConfigFiles := []string{} @@ -195,23 +203,31 @@ } config, err := LoadFromFile(filename) + if os.IsNotExist(err) { // skip missing files + // Add to the missing list to produce a warning + missingList = append(missingList, filename) continue } + if err != nil { - errlist = append(errlist, fmt.Errorf("Error loading config file \"%s\": %v", filename, err)) + errlist = append(errlist, fmt.Errorf("error loading config file \"%s\": %v", filename, err)) continue } kubeconfigs = append(kubeconfigs, config) } + if rules.WarnIfAllMissing && len(missingList) > 0 && len(kubeconfigs) == 0 { + klog.Warningf("Config not found: %s", strings.Join(missingList, ", ")) + } + // first merge all of our maps mapConfig := clientcmdapi.NewConfig() for _, kubeconfig := range kubeconfigs { - mergo.Merge(mapConfig, kubeconfig) + mergo.MergeWithOverwrite(mapConfig, kubeconfig) } // merge all of the struct values in the reverse order so that priority is given correctly @@ -219,14 +235,14 @@ nonMapConfig := clientcmdapi.NewConfig() for i := len(kubeconfigs) - 1; i >= 0; i-- { kubeconfig := kubeconfigs[i] - mergo.Merge(nonMapConfig, kubeconfig) + mergo.MergeWithOverwrite(nonMapConfig, kubeconfig) } // since values are overwritten, but maps values are not, we can merge the non-map config on top of the map config and // get the values we expect. config := clientcmdapi.NewConfig() - mergo.Merge(config, mapConfig) - mergo.Merge(config, nonMapConfig) + mergo.MergeWithOverwrite(config, mapConfig) + mergo.MergeWithOverwrite(config, nonMapConfig) if rules.ResolvePaths() { if err := ResolveLocalPaths(config); err != nil { @@ -356,7 +372,7 @@ if err != nil { return nil, err } - glog.V(6).Infoln("Config loaded from file", filename) + klog.V(6).Infoln("Config loaded from file: ", filename) // set LocationOfOrigin on every Cluster, User, and Context for key, obj := range config.AuthInfos { @@ -467,7 +483,7 @@ } base, err := filepath.Abs(filepath.Dir(cluster.LocationOfOrigin)) if err != nil { - return fmt.Errorf("Could not determine the absolute path of config file %s: %v", cluster.LocationOfOrigin, err) + return fmt.Errorf("could not determine the absolute path of config file %s: %v", cluster.LocationOfOrigin, err) } if err := ResolvePaths(GetClusterFileReferences(cluster), base); err != nil { @@ -480,7 +496,7 @@ } base, err := filepath.Abs(filepath.Dir(authInfo.LocationOfOrigin)) if err != nil { - return fmt.Errorf("Could not determine the absolute path of config file %s: %v", authInfo.LocationOfOrigin, err) + return fmt.Errorf("could not determine the absolute path of config file %s: %v", authInfo.LocationOfOrigin, err) } if err := ResolvePaths(GetAuthInfoFileReferences(authInfo), base); err != nil { diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/merged_client_builder.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,7 +20,7 @@ "io" "sync" - "github.com/golang/glog" + "k8s.io/klog" restclient "k8s.io/client-go/rest" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -119,7 +119,7 @@ // check for in-cluster configuration and use it if config.icc.Possible() { - glog.V(4).Infof("Using in-cluster configuration") + klog.V(4).Infof("Using in-cluster configuration") return config.icc.ClientConfig() } @@ -150,13 +150,18 @@ // if we got a default namespace, determine whether it was explicit or implicit if raw, err := mergedKubeConfig.RawConfig(); err == nil { - if context := raw.Contexts[raw.CurrentContext]; context != nil && len(context.Namespace) > 0 { + // determine the current context + currentContext := raw.CurrentContext + if config.overrides != nil && len(config.overrides.CurrentContext) > 0 { + currentContext = config.overrides.CurrentContext + } + if context := raw.Contexts[currentContext]; context != nil && len(context.Namespace) > 0 { return ns, false, nil } } } - glog.V(4).Infof("Using in-cluster namespace") + klog.V(4).Infof("Using in-cluster namespace") // allow the namespace from the service account token directory to be used. return config.icc.Namespace() diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/validation.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/validation.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/validation.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/clientcmd/validation.go 2020-12-10 21:46:52.000000000 +0000 @@ -185,9 +185,10 @@ } if len(clusterInfo.CertificateAuthority) != 0 { clientCertCA, err := os.Open(clusterInfo.CertificateAuthority) - defer clientCertCA.Close() if err != nil { validationErrors = append(validationErrors, fmt.Errorf("unable to read certificate-authority %v for %v due to %v", clusterInfo.CertificateAuthority, clusterName, err)) + } else { + defer clientCertCA.Close() } } @@ -223,16 +224,18 @@ if len(authInfo.ClientCertificate) != 0 { clientCertFile, err := os.Open(authInfo.ClientCertificate) - defer clientCertFile.Close() if err != nil { validationErrors = append(validationErrors, fmt.Errorf("unable to read client-cert %v for %v due to %v", authInfo.ClientCertificate, authInfoName, err)) + } else { + defer clientCertFile.Close() } } if len(authInfo.ClientKey) != 0 { clientKeyFile, err := os.Open(authInfo.ClientKey) - defer clientKeyFile.Close() if err != nil { validationErrors = append(validationErrors, fmt.Errorf("unable to read client-key %v for %v due to %v", authInfo.ClientKey, authInfoName, err)) + } else { + defer clientKeyFile.Close() } } } @@ -250,8 +253,6 @@ for _, v := range authInfo.Exec.Env { if len(v.Name) == 0 { validationErrors = append(validationErrors, fmt.Errorf("env variable name must be specified for %v to use exec authentication plugin", authInfoName)) - } else if len(v.Value) == 0 { - validationErrors = append(validationErrors, fmt.Errorf("env variable %s value must be specified for %v to use exec authentication plugin", v.Name, authInfoName)) } } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/metrics/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/metrics/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/metrics/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/metrics/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - wojtek-t - eparis diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/reference/ref.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/reference/ref.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/tools/reference/ref.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/tools/reference/ref.go 2020-12-10 21:46:52.000000000 +0000 @@ -19,8 +19,6 @@ import ( "errors" "fmt" - "net/url" - "strings" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" @@ -30,8 +28,7 @@ var ( // Errors that could be returned by GetReference. - ErrNilObject = errors.New("can't reference a nil object") - ErrNoSelfLink = errors.New("selfLink was empty, can't make reference") + ErrNilObject = errors.New("can't reference a nil object") ) // GetReference returns an ObjectReference which refers to the given @@ -47,20 +44,6 @@ return ref, nil } - gvk := obj.GetObjectKind().GroupVersionKind() - - // if the object referenced is actually persisted, we can just get kind from meta - // if we are building an object reference to something not yet persisted, we should fallback to scheme - kind := gvk.Kind - if len(kind) == 0 { - // TODO: this is wrong - gvks, _, err := scheme.ObjectKinds(obj) - if err != nil { - return nil, err - } - kind = gvks[0].Kind - } - // An object that implements only List has enough metadata to build a reference var listMeta metav1.Common objectMeta, err := meta.Accessor(obj) @@ -73,29 +56,29 @@ listMeta = objectMeta } - // if the object referenced is actually persisted, we can also get version from meta - version := gvk.GroupVersion().String() - if len(version) == 0 { - selfLink := listMeta.GetSelfLink() - if len(selfLink) == 0 { - return nil, ErrNoSelfLink - } - selfLinkUrl, err := url.Parse(selfLink) + gvk := obj.GetObjectKind().GroupVersionKind() + + // If object meta doesn't contain data about kind and/or version, + // we are falling back to scheme. + // + // TODO: This doesn't work for CRDs, which are not registered in scheme. + if gvk.Empty() { + gvks, _, err := scheme.ObjectKinds(obj) if err != nil { return nil, err } - // example paths: ///* - parts := strings.Split(selfLinkUrl.Path, "/") - if len(parts) < 4 { - return nil, fmt.Errorf("unexpected self link format: '%v'; got version '%v'", selfLink, version) - } - if parts[1] == "api" { - version = parts[2] - } else { - version = parts[2] + "/" + parts[3] + if len(gvks) == 0 || gvks[0].Empty() { + return nil, fmt.Errorf("unexpected gvks registered for object %T: %v", obj, gvks) } + // TODO: The same object can be registered for multiple group versions + // (although in practise this doesn't seem to be used). + // In such case, the version set may not be correct. + gvk = gvks[0] } + kind := gvk.Kind + version := gvk.GroupVersion().String() + // only has list metadata if objectMeta == nil { return &v1.ObjectReference{ diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/cache.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/cache.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/cache.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/cache.go 2020-12-10 21:46:52.000000000 +0000 @@ -20,6 +20,7 @@ "fmt" "net" "net/http" + "strings" "sync" "time" @@ -39,13 +40,15 @@ var tlsCache = &tlsTransportCache{transports: make(map[tlsCacheKey]*http.Transport)} type tlsCacheKey struct { - insecure bool - caData string - certData string - keyData string - getCert string - serverName string - dial string + insecure bool + caData string + certData string + keyData string + getCert string + serverName string + nextProtos string + dial string + disableCompression bool } func (t tlsCacheKey) String() string { @@ -53,7 +56,7 @@ if len(t.keyData) > 0 { keyText = "" } - return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, getCert: %s, serverName:%s, dial:%s", t.insecure, t.caData, t.certData, keyText, t.getCert, t.serverName, t.dial) + return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, getCert: %s, serverName:%s, dial:%s disableCompression:%t", t.insecure, t.caData, t.certData, keyText, t.getCert, t.serverName, t.dial, t.disableCompression) } func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { @@ -95,6 +98,7 @@ TLSClientConfig: tlsConfig, MaxIdleConnsPerHost: idleConnsPerHost, DialContext: dial, + DisableCompression: config.DisableCompression, }) return c.transports[key], nil } @@ -106,12 +110,14 @@ return tlsCacheKey{}, err } return tlsCacheKey{ - insecure: c.TLS.Insecure, - caData: string(c.TLS.CAData), - certData: string(c.TLS.CertData), - keyData: string(c.TLS.KeyData), - getCert: fmt.Sprintf("%p", c.TLS.GetCert), - serverName: c.TLS.ServerName, - dial: fmt.Sprintf("%p", c.Dial), + insecure: c.TLS.Insecure, + caData: string(c.TLS.CAData), + certData: string(c.TLS.CertData), + keyData: string(c.TLS.KeyData), + getCert: fmt.Sprintf("%p", c.TLS.GetCert), + serverName: c.TLS.ServerName, + nextProtos: strings.Join(c.TLS.NextProtos, ","), + dial: fmt.Sprintf("%p", c.Dial), + disableCompression: c.DisableCompression, }, nil } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/config.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/config.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/config.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/config.go 2020-12-10 21:46:52.000000000 +0000 @@ -39,9 +39,18 @@ // Bearer token for authentication BearerToken string + // Path to a file containing a BearerToken. + // If set, the contents are periodically read. + // The last successfully read value takes precedence over BearerToken. + BearerTokenFile string + // Impersonate is the config that this Config will impersonate using Impersonate ImpersonationConfig + // DisableCompression bypasses automatic GZip compression requests to the + // server. + DisableCompression bool + // Transport may be used for custom HTTP behavior. This attribute may // not be specified with the TLS client certificate options. Use // WrapTransport for most client level operations. @@ -52,7 +61,10 @@ // from TLSClientConfig, Transport, or http.DefaultTransport). The // config may layer other RoundTrippers on top of the returned // RoundTripper. - WrapTransport func(rt http.RoundTripper) http.RoundTripper + // + // A future release will change this field to an array. Use config.Wrap() + // instead of setting this value directly. + WrapTransport WrapperFunc // Dial specifies the dial function for creating unencrypted TCP connections. Dial func(ctx context.Context, network, address string) (net.Conn, error) @@ -80,7 +92,7 @@ // HasTokenAuth returns whether the configuration has token authentication or not. func (c *Config) HasTokenAuth() bool { - return len(c.BearerToken) != 0 + return len(c.BearerToken) != 0 || len(c.BearerTokenFile) != 0 } // HasCertAuth returns whether the configuration has certificate authentication or not. @@ -93,6 +105,14 @@ return c.TLS.GetCert != nil } +// Wrap adds a transport middleware function that will give the caller +// an opportunity to wrap the underlying http.RoundTripper prior to the +// first API call being made. The provided function is invoked after any +// existing transport wrappers are invoked. +func (c *Config) Wrap(fn WrapperFunc) { + c.WrapTransport = Wrappers(c.WrapTransport, fn) +} + // TLSConfig holds the information needed to set up a TLS transport. type TLSConfig struct { CAFile string // Path of the PEM-encoded server trusted root certificates. @@ -106,5 +126,11 @@ CertData []byte // Bytes of the PEM-encoded client certificate. Supercedes CertFile. KeyData []byte // Bytes of the PEM-encoded client key. Supercedes KeyFile. + // NextProtos is a list of supported application level protocols, in order of preference. + // Used to populate tls.Config.NextProtos. + // To indicate to the server http/1.1 is preferred over http/2, set to ["http/1.1", "h2"] (though the server is free to ignore that preference). + // To use only http/1.1, set to ["http/1.1"]. + NextProtos []string + GetCert func() (*tls.Certificate, error) // Callback that returns a TLS client certificate. CertData, CertFile, KeyData and KeyFile supercede this field. } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/OWNERS 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -1,3 +1,5 @@ +# See the OWNERS docs at https://go.k8s.io/owners + reviewers: - smarterclayton - wojtek-t diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/round_trippers.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/round_trippers.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/round_trippers.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/round_trippers.go 2020-12-10 21:46:52.000000000 +0000 @@ -22,7 +22,8 @@ "strings" "time" - "github.com/golang/glog" + "golang.org/x/oauth2" + "k8s.io/klog" utilnet "k8s.io/apimachinery/pkg/util/net" ) @@ -44,7 +45,11 @@ case config.HasBasicAuth() && config.HasTokenAuth(): return nil, fmt.Errorf("username/password or bearer token may be set, but not both") case config.HasTokenAuth(): - rt = NewBearerAuthRoundTripper(config.BearerToken, rt) + var err error + rt, err = NewBearerAuthWithRefreshRoundTripper(config.BearerToken, config.BearerTokenFile, rt) + if err != nil { + return nil, err + } case config.HasBasicAuth(): rt = NewBasicAuthRoundTripper(config.Username, config.Password, rt) } @@ -62,23 +67,19 @@ // DebugWrappers wraps a round tripper and logs based on the current log level. func DebugWrappers(rt http.RoundTripper) http.RoundTripper { switch { - case bool(glog.V(9)): + case bool(klog.V(9)): rt = newDebuggingRoundTripper(rt, debugCurlCommand, debugURLTiming, debugResponseHeaders) - case bool(glog.V(8)): + case bool(klog.V(8)): rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus, debugResponseHeaders) - case bool(glog.V(7)): + case bool(klog.V(7)): rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus) - case bool(glog.V(6)): + case bool(klog.V(6)): rt = newDebuggingRoundTripper(rt, debugURLTiming) } return rt } -type requestCanceler interface { - CancelRequest(*http.Request) -} - type authProxyRoundTripper struct { username string groups []string @@ -129,17 +130,13 @@ } for key, values := range extra { for _, value := range values { - req.Header.Add("X-Remote-Extra-"+key, value) + req.Header.Add("X-Remote-Extra-"+headerKeyEscape(key), value) } } } func (rt *authProxyRoundTripper) CancelRequest(req *http.Request) { - if canceler, ok := rt.rt.(requestCanceler); ok { - canceler.CancelRequest(req) - } else { - glog.Errorf("CancelRequest not implemented") - } + tryCancelRequest(rt.WrappedRoundTripper(), req) } func (rt *authProxyRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } @@ -163,11 +160,7 @@ } func (rt *userAgentRoundTripper) CancelRequest(req *http.Request) { - if canceler, ok := rt.rt.(requestCanceler); ok { - canceler.CancelRequest(req) - } else { - glog.Errorf("CancelRequest not implemented") - } + tryCancelRequest(rt.WrappedRoundTripper(), req) } func (rt *userAgentRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } @@ -194,11 +187,7 @@ } func (rt *basicAuthRoundTripper) CancelRequest(req *http.Request) { - if canceler, ok := rt.rt.(requestCanceler); ok { - canceler.CancelRequest(req) - } else { - glog.Errorf("CancelRequest not implemented") - } + tryCancelRequest(rt.WrappedRoundTripper(), req) } func (rt *basicAuthRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } @@ -246,7 +235,7 @@ } for k, vv := range rt.impersonate.Extra { for _, v := range vv { - req.Header.Add(ImpersonateUserExtraHeaderPrefix+k, v) + req.Header.Add(ImpersonateUserExtraHeaderPrefix+headerKeyEscape(k), v) } } @@ -254,24 +243,42 @@ } func (rt *impersonatingRoundTripper) CancelRequest(req *http.Request) { - if canceler, ok := rt.delegate.(requestCanceler); ok { - canceler.CancelRequest(req) - } else { - glog.Errorf("CancelRequest not implemented") - } + tryCancelRequest(rt.WrappedRoundTripper(), req) } func (rt *impersonatingRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.delegate } type bearerAuthRoundTripper struct { bearer string + source oauth2.TokenSource rt http.RoundTripper } // NewBearerAuthRoundTripper adds the provided bearer token to a request // unless the authorization header has already been set. func NewBearerAuthRoundTripper(bearer string, rt http.RoundTripper) http.RoundTripper { - return &bearerAuthRoundTripper{bearer, rt} + return &bearerAuthRoundTripper{bearer, nil, rt} +} + +// NewBearerAuthRoundTripper adds the provided bearer token to a request +// unless the authorization header has already been set. +// If tokenFile is non-empty, it is periodically read, +// and the last successfully read content is used as the bearer token. +// If tokenFile is non-empty and bearer is empty, the tokenFile is read +// immediately to populate the initial bearer token. +func NewBearerAuthWithRefreshRoundTripper(bearer string, tokenFile string, rt http.RoundTripper) (http.RoundTripper, error) { + if len(tokenFile) == 0 { + return &bearerAuthRoundTripper{bearer, nil, rt}, nil + } + source := NewCachedFileTokenSource(tokenFile) + if len(bearer) == 0 { + token, err := source.Token() + if err != nil { + return nil, err + } + bearer = token.AccessToken + } + return &bearerAuthRoundTripper{bearer, source, rt}, nil } func (rt *bearerAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { @@ -280,16 +287,18 @@ } req = utilnet.CloneRequest(req) - req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rt.bearer)) + token := rt.bearer + if rt.source != nil { + if refreshedToken, err := rt.source.Token(); err == nil { + token = refreshedToken.AccessToken + } + } + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) return rt.rt.RoundTrip(req) } func (rt *bearerAuthRoundTripper) CancelRequest(req *http.Request) { - if canceler, ok := rt.rt.(requestCanceler); ok { - canceler.CancelRequest(req) - } else { - glog.Errorf("CancelRequest not implemented") - } + tryCancelRequest(rt.WrappedRoundTripper(), req) } func (rt *bearerAuthRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } @@ -369,28 +378,57 @@ } func (rt *debuggingRoundTripper) CancelRequest(req *http.Request) { - if canceler, ok := rt.delegatedRoundTripper.(requestCanceler); ok { - canceler.CancelRequest(req) + tryCancelRequest(rt.WrappedRoundTripper(), req) +} + +var knownAuthTypes = map[string]bool{ + "bearer": true, + "basic": true, + "negotiate": true, +} + +// maskValue masks credential content from authorization headers +// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization +func maskValue(key string, value string) string { + if !strings.EqualFold(key, "Authorization") { + return value + } + if len(value) == 0 { + return "" + } + var authType string + if i := strings.Index(value, " "); i > 0 { + authType = value[0:i] } else { - glog.Errorf("CancelRequest not implemented") + authType = value } + if !knownAuthTypes[strings.ToLower(authType)] { + return "" + } + if len(value) > len(authType)+1 { + value = authType + " " + } else { + value = authType + } + return value } func (rt *debuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { reqInfo := newRequestInfo(req) if rt.levels[debugJustURL] { - glog.Infof("%s %s", reqInfo.RequestVerb, reqInfo.RequestURL) + klog.Infof("%s %s", reqInfo.RequestVerb, reqInfo.RequestURL) } if rt.levels[debugCurlCommand] { - glog.Infof("%s", reqInfo.toCurl()) + klog.Infof("%s", reqInfo.toCurl()) } if rt.levels[debugRequestHeaders] { - glog.Infof("Request Headers:") + klog.Infof("Request Headers:") for key, values := range reqInfo.RequestHeaders { for _, value := range values { - glog.Infof(" %s: %s", key, value) + value = maskValue(key, value) + klog.Infof(" %s: %s", key, value) } } } @@ -402,16 +440,16 @@ reqInfo.complete(response, err) if rt.levels[debugURLTiming] { - glog.Infof("%s %s %s in %d milliseconds", reqInfo.RequestVerb, reqInfo.RequestURL, reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) + klog.Infof("%s %s %s in %d milliseconds", reqInfo.RequestVerb, reqInfo.RequestURL, reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) } if rt.levels[debugResponseStatus] { - glog.Infof("Response Status: %s in %d milliseconds", reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) + klog.Infof("Response Status: %s in %d milliseconds", reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) } if rt.levels[debugResponseHeaders] { - glog.Infof("Response Headers:") + klog.Infof("Response Headers:") for key, values := range reqInfo.ResponseHeaders { for _, value := range values { - glog.Infof(" %s: %s", key, value) + klog.Infof(" %s: %s", key, value) } } } @@ -422,3 +460,110 @@ func (rt *debuggingRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.delegatedRoundTripper } + +func legalHeaderByte(b byte) bool { + return int(b) < len(legalHeaderKeyBytes) && legalHeaderKeyBytes[b] +} + +func shouldEscape(b byte) bool { + // url.PathUnescape() returns an error if any '%' is not followed by two + // hexadecimal digits, so we'll intentionally encode it. + return !legalHeaderByte(b) || b == '%' +} + +func headerKeyEscape(key string) string { + buf := strings.Builder{} + for i := 0; i < len(key); i++ { + b := key[i] + if shouldEscape(b) { + // %-encode bytes that should be escaped: + // https://tools.ietf.org/html/rfc3986#section-2.1 + fmt.Fprintf(&buf, "%%%02X", b) + continue + } + buf.WriteByte(b) + } + return buf.String() +} + +// legalHeaderKeyBytes was copied from net/http/lex.go's isTokenTable. +// See https://httpwg.github.io/specs/rfc7230.html#rule.token.separators +var legalHeaderKeyBytes = [127]bool{ + '%': true, + '!': true, + '#': true, + '$': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/token_source.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/token_source.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/token_source.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/token_source.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,158 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package transport + +import ( + "fmt" + "io/ioutil" + "net/http" + "strings" + "sync" + "time" + + "golang.org/x/oauth2" + + "k8s.io/klog" +) + +// TokenSourceWrapTransport returns a WrapTransport that injects bearer tokens +// authentication from an oauth2.TokenSource. +func TokenSourceWrapTransport(ts oauth2.TokenSource) func(http.RoundTripper) http.RoundTripper { + return func(rt http.RoundTripper) http.RoundTripper { + return &tokenSourceTransport{ + base: rt, + ort: &oauth2.Transport{ + Source: ts, + Base: rt, + }, + } + } +} + +// NewCachedFileTokenSource returns a oauth2.TokenSource reads a token from a +// file at a specified path and periodically reloads it. +func NewCachedFileTokenSource(path string) oauth2.TokenSource { + return &cachingTokenSource{ + now: time.Now, + leeway: 10 * time.Second, + base: &fileTokenSource{ + path: path, + // This period was picked because it is half of the duration between when the kubelet + // refreshes a projected service account token and when the original token expires. + // Default token lifetime is 10 minutes, and the kubelet starts refreshing at 80% of lifetime. + // This should induce re-reading at a frequency that works with the token volume source. + period: time.Minute, + }, + } +} + +// NewCachedTokenSource returns a oauth2.TokenSource reads a token from a +// designed TokenSource. The ts would provide the source of token. +func NewCachedTokenSource(ts oauth2.TokenSource) oauth2.TokenSource { + return &cachingTokenSource{ + now: time.Now, + base: ts, + } +} + +type tokenSourceTransport struct { + base http.RoundTripper + ort http.RoundTripper +} + +func (tst *tokenSourceTransport) RoundTrip(req *http.Request) (*http.Response, error) { + // This is to allow --token to override other bearer token providers. + if req.Header.Get("Authorization") != "" { + return tst.base.RoundTrip(req) + } + return tst.ort.RoundTrip(req) +} + +func (tst *tokenSourceTransport) CancelRequest(req *http.Request) { + if req.Header.Get("Authorization") != "" { + tryCancelRequest(tst.base, req) + return + } + tryCancelRequest(tst.ort, req) +} + +type fileTokenSource struct { + path string + period time.Duration +} + +var _ = oauth2.TokenSource(&fileTokenSource{}) + +func (ts *fileTokenSource) Token() (*oauth2.Token, error) { + tokb, err := ioutil.ReadFile(ts.path) + if err != nil { + return nil, fmt.Errorf("failed to read token file %q: %v", ts.path, err) + } + tok := strings.TrimSpace(string(tokb)) + if len(tok) == 0 { + return nil, fmt.Errorf("read empty token from file %q", ts.path) + } + + return &oauth2.Token{ + AccessToken: tok, + Expiry: time.Now().Add(ts.period), + }, nil +} + +type cachingTokenSource struct { + base oauth2.TokenSource + leeway time.Duration + + sync.RWMutex + tok *oauth2.Token + + // for testing + now func() time.Time +} + +var _ = oauth2.TokenSource(&cachingTokenSource{}) + +func (ts *cachingTokenSource) Token() (*oauth2.Token, error) { + now := ts.now() + // fast path + ts.RLock() + tok := ts.tok + ts.RUnlock() + + if tok != nil && tok.Expiry.Add(-1*ts.leeway).After(now) { + return tok, nil + } + + // slow path + ts.Lock() + defer ts.Unlock() + if tok := ts.tok; tok != nil && tok.Expiry.Add(-1*ts.leeway).After(now) { + return tok, nil + } + + tok, err := ts.base.Token() + if err != nil { + if ts.tok == nil { + return nil, err + } + klog.Errorf("Unable to rotate token: %v", err) + return ts.tok, nil + } + + ts.tok = tok + return tok, nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/transport.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/transport.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/transport/transport.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/transport/transport.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,11 +17,15 @@ package transport import ( + "context" "crypto/tls" "crypto/x509" "fmt" "io/ioutil" "net/http" + + utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/klog" ) // New returns an http.RoundTripper that will provide the authentication @@ -52,7 +56,7 @@ // TLSConfigFor returns a tls.Config that will provide the transport level security defined // by the provided Config. Will return nil if no transport level security is requested. func TLSConfigFor(c *Config) (*tls.Config, error) { - if !(c.HasCA() || c.HasCertAuth() || c.HasCertCallback() || c.TLS.Insecure || len(c.TLS.ServerName) > 0) { + if !(c.HasCA() || c.HasCertAuth() || c.HasCertCallback() || c.TLS.Insecure || len(c.TLS.ServerName) > 0 || len(c.TLS.NextProtos) > 0) { return nil, nil } if c.HasCA() && c.TLS.Insecure { @@ -69,6 +73,7 @@ MinVersion: tls.VersionTLS12, InsecureSkipVerify: c.TLS.Insecure, ServerName: c.TLS.ServerName, + NextProtos: c.TLS.NextProtos, } if c.HasCA() { @@ -167,3 +172,74 @@ certPool.AppendCertsFromPEM(caData) return certPool } + +// WrapperFunc wraps an http.RoundTripper when a new transport +// is created for a client, allowing per connection behavior +// to be injected. +type WrapperFunc func(rt http.RoundTripper) http.RoundTripper + +// Wrappers accepts any number of wrappers and returns a wrapper +// function that is the equivalent of calling each of them in order. Nil +// values are ignored, which makes this function convenient for incrementally +// wrapping a function. +func Wrappers(fns ...WrapperFunc) WrapperFunc { + if len(fns) == 0 { + return nil + } + // optimize the common case of wrapping a possibly nil transport wrapper + // with an additional wrapper + if len(fns) == 2 && fns[0] == nil { + return fns[1] + } + return func(rt http.RoundTripper) http.RoundTripper { + base := rt + for _, fn := range fns { + if fn != nil { + base = fn(base) + } + } + return base + } +} + +// ContextCanceller prevents new requests after the provided context is finished. +// err is returned when the context is closed, allowing the caller to provide a context +// appropriate error. +func ContextCanceller(ctx context.Context, err error) WrapperFunc { + return func(rt http.RoundTripper) http.RoundTripper { + return &contextCanceller{ + ctx: ctx, + rt: rt, + err: err, + } + } +} + +type contextCanceller struct { + ctx context.Context + rt http.RoundTripper + err error +} + +func (b *contextCanceller) RoundTrip(req *http.Request) (*http.Response, error) { + select { + case <-b.ctx.Done(): + return nil, b.err + default: + return b.rt.RoundTrip(req) + } +} + +func tryCancelRequest(rt http.RoundTripper, req *http.Request) { + type canceler interface { + CancelRequest(*http.Request) + } + switch rt := rt.(type) { + case canceler: + rt.CancelRequest(req) + case utilnet.RoundTripperWrapper: + tryCancelRequest(rt.WrappedRoundTripper(), req) + default: + klog.Warningf("Unable to cancel request for %T", rt) + } +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/cert.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/cert.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/cert.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/cert.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,26 +18,25 @@ import ( "bytes" - "crypto/ecdsa" - "crypto/elliptic" + "crypto" cryptorand "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" - "errors" "fmt" - "math" + "io/ioutil" "math/big" "net" + "path" + "strings" "time" -) -const ( - rsaKeySize = 2048 - duration365d = time.Hour * 24 * 365 + "k8s.io/client-go/util/keyutil" ) +const duration365d = time.Hour * 24 * 365 + // Config contains the basic fields required for creating a certificate type Config struct { CommonName string @@ -54,13 +53,8 @@ IPs []net.IP } -// NewPrivateKey creates an RSA private key -func NewPrivateKey() (*rsa.PrivateKey, error) { - return rsa.GenerateKey(cryptorand.Reader, rsaKeySize) -} - // NewSelfSignedCACert creates a CA certificate -func NewSelfSignedCACert(cfg Config, key *rsa.PrivateKey) (*x509.Certificate, error) { +func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, error) { now := time.Now() tmpl := x509.Certificate{ SerialNumber: new(big.Int).SetInt64(0), @@ -72,7 +66,7 @@ NotAfter: now.Add(duration365d * 10).UTC(), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, BasicConstraintsValid: true, - IsCA: true, + IsCA: true, } certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &tmpl, &tmpl, key.Public(), key) @@ -82,62 +76,40 @@ return x509.ParseCertificate(certDERBytes) } -// NewSignedCert creates a signed certificate using the given CA certificate and key -func NewSignedCert(cfg Config, key *rsa.PrivateKey, caCert *x509.Certificate, caKey *rsa.PrivateKey) (*x509.Certificate, error) { - serial, err := cryptorand.Int(cryptorand.Reader, new(big.Int).SetInt64(math.MaxInt64)) - if err != nil { - return nil, err - } - if len(cfg.CommonName) == 0 { - return nil, errors.New("must specify a CommonName") - } - if len(cfg.Usages) == 0 { - return nil, errors.New("must specify at least one ExtKeyUsage") - } - - certTmpl := x509.Certificate{ - Subject: pkix.Name{ - CommonName: cfg.CommonName, - Organization: cfg.Organization, - }, - DNSNames: cfg.AltNames.DNSNames, - IPAddresses: cfg.AltNames.IPs, - SerialNumber: serial, - NotBefore: caCert.NotBefore, - NotAfter: time.Now().Add(duration365d).UTC(), - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: cfg.Usages, - } - certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &certTmpl, caCert, key.Public(), caKey) - if err != nil { - return nil, err - } - return x509.ParseCertificate(certDERBytes) +// GenerateSelfSignedCertKey creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name +// You may also specify additional subject alt names (either ip or dns names) for the certificate. +func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { + return GenerateSelfSignedCertKeyWithFixtures(host, alternateIPs, alternateDNS, "") } -// MakeEllipticPrivateKeyPEM creates an ECDSA private key -func MakeEllipticPrivateKeyPEM() ([]byte, error) { - privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) - if err != nil { - return nil, err - } - - derBytes, err := x509.MarshalECPrivateKey(privateKey) - if err != nil { - return nil, err - } - - privateKeyPemBlock := &pem.Block{ - Type: ECPrivateKeyBlockType, - Bytes: derBytes, +// GenerateSelfSignedCertKeyWithFixtures creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name. You may also specify additional subject alt names (either ip or dns names) +// for the certificate. +// +// If fixtureDirectory is non-empty, it is a directory path which can contain pre-generated certs. The format is: +// _-_-.crt +// _-_-.key +// Certs/keys not existing in that directory are created. +func GenerateSelfSignedCertKeyWithFixtures(host string, alternateIPs []net.IP, alternateDNS []string, fixtureDirectory string) ([]byte, []byte, error) { + validFrom := time.Now().Add(-time.Hour) // valid an hour earlier to avoid flakes due to clock skew + maxAge := time.Hour * 24 * 365 // one year self-signed certs + + baseName := fmt.Sprintf("%s_%s_%s", host, strings.Join(ipsToStrings(alternateIPs), "-"), strings.Join(alternateDNS, "-")) + certFixturePath := path.Join(fixtureDirectory, baseName+".crt") + keyFixturePath := path.Join(fixtureDirectory, baseName+".key") + if len(fixtureDirectory) > 0 { + cert, err := ioutil.ReadFile(certFixturePath) + if err == nil { + key, err := ioutil.ReadFile(keyFixturePath) + if err == nil { + return cert, key, nil + } + return nil, nil, fmt.Errorf("cert %s can be read, but key %s cannot: %v", certFixturePath, keyFixturePath, err) + } + maxAge = 100 * time.Hour * 24 * 365 // 100 years fixtures } - return pem.EncodeToMemory(privateKeyPemBlock), nil -} -// GenerateSelfSignedCertKey creates a self-signed certificate and key for the given host. -// Host may be an IP or a DNS name -// You may also specify additional subject alt names (either ip or dns names) for the certificate -func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { caKey, err := rsa.GenerateKey(cryptorand.Reader, 2048) if err != nil { return nil, nil, err @@ -148,12 +120,12 @@ Subject: pkix.Name{ CommonName: fmt.Sprintf("%s-ca@%d", host, time.Now().Unix()), }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 365), + NotBefore: validFrom, + NotAfter: validFrom.Add(maxAge), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, BasicConstraintsValid: true, - IsCA: true, + IsCA: true, } caDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &caTemplate, &caTemplate, &caKey.PublicKey, caKey) @@ -176,8 +148,8 @@ Subject: pkix.Name{ CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), }, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour * 24 * 365), + NotBefore: validFrom, + NotAfter: validFrom.Add(maxAge), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, @@ -209,37 +181,26 @@ // Generate key keyBuffer := bytes.Buffer{} - if err := pem.Encode(&keyBuffer, &pem.Block{Type: RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + if err := pem.Encode(&keyBuffer, &pem.Block{Type: keyutil.RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { return nil, nil, err } + if len(fixtureDirectory) > 0 { + if err := ioutil.WriteFile(certFixturePath, certBuffer.Bytes(), 0644); err != nil { + return nil, nil, fmt.Errorf("failed to write cert fixture to %s: %v", certFixturePath, err) + } + if err := ioutil.WriteFile(keyFixturePath, keyBuffer.Bytes(), 0644); err != nil { + return nil, nil, fmt.Errorf("failed to write key fixture to %s: %v", certFixturePath, err) + } + } + return certBuffer.Bytes(), keyBuffer.Bytes(), nil } -// FormatBytesCert receives byte array certificate and formats in human-readable format -func FormatBytesCert(cert []byte) (string, error) { - block, _ := pem.Decode(cert) - c, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return "", fmt.Errorf("failed to parse certificate [%v]", err) - } - return FormatCert(c), nil -} - -// FormatCert receives certificate and formats in human-readable format -func FormatCert(c *x509.Certificate) string { - var ips []string - for _, ip := range c.IPAddresses { - ips = append(ips, ip.String()) - } - altNames := append(ips, c.DNSNames...) - res := fmt.Sprintf( - "Issuer: CN=%s | Subject: CN=%s | CA: %t\n", - c.Issuer.CommonName, c.Subject.CommonName, c.IsCA, - ) - res += fmt.Sprintf("Not before: %s Not After: %s", c.NotBefore, c.NotAfter) - if len(altNames) > 0 { - res += fmt.Sprintf("\nAlternate Names: %v", altNames) +func ipsToStrings(ips []net.IP) []string { + ss := make([]string, 0, len(ips)) + for _, ip := range ips { + ss = append(ss, ip.String()) } - return res + return ss } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/io.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/io.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/io.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/io.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,11 +17,7 @@ package cert import ( - "crypto" - "crypto/ecdsa" - "crypto/rsa" "crypto/x509" - "encoding/pem" "fmt" "io/ioutil" "os" @@ -73,60 +69,6 @@ return ioutil.WriteFile(certPath, data, os.FileMode(0644)) } -// WriteKey writes the pem-encoded key data to keyPath. -// The key file will be created with file mode 0600. -// If the key file already exists, it will be overwritten. -// The parent directory of the keyPath will be created as needed with file mode 0755. -func WriteKey(keyPath string, data []byte) error { - if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { - return err - } - return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) -} - -// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it -// can't find one, it will generate a new key and store it there. -func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { - loadedData, err := ioutil.ReadFile(keyPath) - // Call verifyKeyData to ensure the file wasn't empty/corrupt. - if err == nil && verifyKeyData(loadedData) { - return loadedData, false, err - } - if !os.IsNotExist(err) { - return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) - } - - generatedData, err := MakeEllipticPrivateKeyPEM() - if err != nil { - return nil, false, fmt.Errorf("error generating key: %v", err) - } - if err := WriteKey(keyPath, generatedData); err != nil { - return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) - } - return generatedData, true, nil -} - -// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to -// a PEM encoded block or returns an error. -func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { - switch t := privateKey.(type) { - case *ecdsa.PrivateKey: - derBytes, err := x509.MarshalECPrivateKey(t) - if err != nil { - return nil, err - } - privateKeyPemBlock := &pem.Block{ - Type: ECPrivateKeyBlockType, - Bytes: derBytes, - } - return pem.EncodeToMemory(privateKeyPemBlock), nil - case *rsa.PrivateKey: - return EncodePrivateKeyPEM(t), nil - default: - return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) - } -} - // NewPool returns an x509.CertPool containing the certificates in the given PEM-encoded file. // Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates func NewPool(filename string) (*x509.CertPool, error) { @@ -154,40 +96,3 @@ } return certs, nil } - -// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. -// Returns an error if the file could not be read or if the private key could not be parsed. -func PrivateKeyFromFile(file string) (interface{}, error) { - data, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - key, err := ParsePrivateKeyPEM(data) - if err != nil { - return nil, fmt.Errorf("error reading private key file %s: %v", file, err) - } - return key, nil -} - -// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. -// Reads public keys from both public and private key files. -func PublicKeysFromFile(file string) ([]interface{}, error) { - data, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - keys, err := ParsePublicKeysPEM(data) - if err != nil { - return nil, fmt.Errorf("error reading public key file %s: %v", file, err) - } - return keys, nil -} - -// verifyKeyData returns true if the provided data appears to be a valid private key. -func verifyKeyData(data []byte) bool { - if len(data) == 0 { - return false - } - _, err := ParsePrivateKeyPEM(data) - return err == nil -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/OWNERS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- sig-auth-certificates-approvers +reviewers: +- sig-auth-certificates-reviewers +labels: +- sig/auth + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/pem.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/pem.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/cert/pem.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/cert/pem.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,136 +17,18 @@ package cert import ( - "crypto/ecdsa" - "crypto/rsa" "crypto/x509" "encoding/pem" "errors" - "fmt" ) const ( - // ECPrivateKeyBlockType is a possible value for pem.Block.Type. - ECPrivateKeyBlockType = "EC PRIVATE KEY" - // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. - RSAPrivateKeyBlockType = "RSA PRIVATE KEY" - // PrivateKeyBlockType is a possible value for pem.Block.Type. - PrivateKeyBlockType = "PRIVATE KEY" - // PublicKeyBlockType is a possible value for pem.Block.Type. - PublicKeyBlockType = "PUBLIC KEY" // CertificateBlockType is a possible value for pem.Block.Type. CertificateBlockType = "CERTIFICATE" // CertificateRequestBlockType is a possible value for pem.Block.Type. CertificateRequestBlockType = "CERTIFICATE REQUEST" ) -// EncodePublicKeyPEM returns PEM-encoded public data -func EncodePublicKeyPEM(key *rsa.PublicKey) ([]byte, error) { - der, err := x509.MarshalPKIXPublicKey(key) - if err != nil { - return []byte{}, err - } - block := pem.Block{ - Type: PublicKeyBlockType, - Bytes: der, - } - return pem.EncodeToMemory(&block), nil -} - -// EncodePrivateKeyPEM returns PEM-encoded private key data -func EncodePrivateKeyPEM(key *rsa.PrivateKey) []byte { - block := pem.Block{ - Type: RSAPrivateKeyBlockType, - Bytes: x509.MarshalPKCS1PrivateKey(key), - } - return pem.EncodeToMemory(&block) -} - -// EncodeCertPEM returns PEM-endcoded certificate data -func EncodeCertPEM(cert *x509.Certificate) []byte { - block := pem.Block{ - Type: CertificateBlockType, - Bytes: cert.Raw, - } - return pem.EncodeToMemory(&block) -} - -// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. -// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" -func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { - var privateKeyPemBlock *pem.Block - for { - privateKeyPemBlock, keyData = pem.Decode(keyData) - if privateKeyPemBlock == nil { - break - } - - switch privateKeyPemBlock.Type { - case ECPrivateKeyBlockType: - // ECDSA Private Key in ASN.1 format - if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - case RSAPrivateKeyBlockType: - // RSA Private Key in PKCS#1 format - if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - case PrivateKeyBlockType: - // RSA or ECDSA Private Key in unencrypted PKCS#8 format - if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - } - - // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks - // originally, only the first PEM block was parsed and expected to be a key block - } - - // we read all the PEM blocks and didn't recognize one - return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") -} - -// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. -// Reads public keys from both public and private key files. -func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { - var block *pem.Block - keys := []interface{}{} - for { - // read the next block - block, keyData = pem.Decode(keyData) - if block == nil { - break - } - - // test block against parsing functions - if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { - keys = append(keys, &privateKey.PublicKey) - continue - } - if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { - keys = append(keys, publicKey) - continue - } - if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { - keys = append(keys, &privateKey.PublicKey) - continue - } - if publicKey, err := parseECPublicKey(block.Bytes); err == nil { - keys = append(keys, publicKey) - continue - } - - // tolerate non-key PEM blocks for backwards compatibility - // originally, only the first PEM block was parsed and expected to be a key block - } - - if len(keys) == 0 { - return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") - } - return keys, nil -} - // ParseCertsPEM returns the x509.Certificates contained in the given PEM-encoded byte array // Returns an error if a certificate could not be parsed, or if the data does not contain any certificates func ParseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) { @@ -177,93 +59,3 @@ } return certs, nil } - -// parseRSAPublicKey parses a single RSA public key from the provided data -func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { - if cert, err := x509.ParseCertificate(data); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - // Test if parsed key is an RSA Public Key - var pubKey *rsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") - } - - return pubKey, nil -} - -// parseRSAPrivateKey parses a single RSA private key from the provided data -func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { - if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { - return nil, err - } - } - - // Test if parsed key is an RSA Private Key - var privKey *rsa.PrivateKey - var ok bool - if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") - } - - return privKey, nil -} - -// parseECPublicKey parses a single ECDSA public key from the provided data -func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { - if cert, err := x509.ParseCertificate(data); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - // Test if parsed key is an ECDSA Public Key - var pubKey *ecdsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") - } - - return pubKey, nil -} - -// parseECPrivateKey parses a single ECDSA private key from the provided data -func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { - return nil, err - } - - // Test if parsed key is an ECDSA Private Key - var privKey *ecdsa.PrivateKey - var ok bool - if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") - } - - return privKey, nil -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/connrotation/connrotation.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/connrotation/connrotation.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/connrotation/connrotation.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/connrotation/connrotation.go 2020-12-10 21:46:52.000000000 +0000 @@ -77,11 +77,6 @@ closable := &closableConn{Conn: conn} - // Start tracking the connection - d.mu.Lock() - d.conns[closable] = struct{}{} - d.mu.Unlock() - // When the connection is closed, remove it from the map. This will // be no-op if the connection isn't in the map, e.g. if CloseAll() // is called. @@ -91,6 +86,11 @@ d.mu.Unlock() } + // Start tracking the connection + d.mu.Lock() + d.conns[closable] = struct{}{} + d.mu.Unlock() + return closable, nil } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/backoff.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/backoff.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/backoff.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/backoff.go 2020-12-10 21:46:52.000000000 +0000 @@ -21,7 +21,7 @@ "time" "k8s.io/apimachinery/pkg/util/clock" - "k8s.io/client-go/util/integer" + "k8s.io/utils/integer" ) type backoffEntry struct { @@ -30,7 +30,7 @@ } type Backoff struct { - sync.Mutex + sync.RWMutex Clock clock.Clock defaultDuration time.Duration maxDuration time.Duration @@ -57,8 +57,8 @@ // Get the current backoff Duration func (p *Backoff) Get(id string) time.Duration { - p.Lock() - defer p.Unlock() + p.RLock() + defer p.RUnlock() var delay time.Duration entry, ok := p.perItemBackoff[id] if ok { @@ -90,8 +90,8 @@ // Returns True if the elapsed time since eventTime is smaller than the current backoff window func (p *Backoff) IsInBackOffSince(id string, eventTime time.Time) bool { - p.Lock() - defer p.Unlock() + p.RLock() + defer p.RUnlock() entry, ok := p.perItemBackoff[id] if !ok { return false @@ -99,13 +99,13 @@ if hasExpired(eventTime, entry.lastUpdate, p.maxDuration) { return false } - return p.Clock.Now().Sub(eventTime) < entry.backoff + return p.Clock.Since(eventTime) < entry.backoff } // Returns True if time since lastupdate is less than the current backoff window. func (p *Backoff) IsInBackOffSinceUpdate(id string, eventTime time.Time) bool { - p.Lock() - defer p.Unlock() + p.RLock() + defer p.RUnlock() entry, ok := p.perItemBackoff[id] if !ok { return false diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/throttle.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/throttle.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/throttle.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/flowcontrol/throttle.go 2020-12-10 21:46:52.000000000 +0000 @@ -17,6 +17,8 @@ package flowcontrol import ( + "context" + "errors" "sync" "time" @@ -33,6 +35,8 @@ Stop() // QPS returns QPS of this rate limiter QPS() float32 + // Wait returns nil if a token is taken before the Context is done. + Wait(ctx context.Context) error } type tokenBucketRateLimiter struct { @@ -98,6 +102,10 @@ return t.qps } +func (t *tokenBucketRateLimiter) Wait(ctx context.Context) error { + return t.limiter.Wait(ctx) +} + type fakeAlwaysRateLimiter struct{} func NewFakeAlwaysRateLimiter() RateLimiter { @@ -116,6 +124,10 @@ return 1 } +func (t *fakeAlwaysRateLimiter) Wait(ctx context.Context) error { + return nil +} + type fakeNeverRateLimiter struct { wg sync.WaitGroup } @@ -141,3 +153,7 @@ func (t *fakeNeverRateLimiter) QPS() float32 { return 1 } + +func (t *fakeNeverRateLimiter) Wait(ctx context.Context) error { + return errors.New("can not be accept") +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/homedir/homedir.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/homedir/homedir.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/homedir/homedir.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/homedir/homedir.go 2020-12-10 21:46:52.000000000 +0000 @@ -18,30 +18,75 @@ import ( "os" + "path/filepath" "runtime" ) -// HomeDir returns the home directory for the current user +// HomeDir returns the home directory for the current user. +// On Windows: +// 1. the first of %HOME%, %HOMEDRIVE%%HOMEPATH%, %USERPROFILE% containing a `.kube\config` file is returned. +// 2. if none of those locations contain a `.kube\config` file, the first of %HOME%, %USERPROFILE%, %HOMEDRIVE%%HOMEPATH% that exists and is writeable is returned. +// 3. if none of those locations are writeable, the first of %HOME%, %USERPROFILE%, %HOMEDRIVE%%HOMEPATH% that exists is returned. +// 4. if none of those locations exists, the first of %HOME%, %USERPROFILE%, %HOMEDRIVE%%HOMEPATH% that is set is returned. func HomeDir() string { if runtime.GOOS == "windows" { + home := os.Getenv("HOME") + homeDriveHomePath := "" + if homeDrive, homePath := os.Getenv("HOMEDRIVE"), os.Getenv("HOMEPATH"); len(homeDrive) > 0 && len(homePath) > 0 { + homeDriveHomePath = homeDrive + homePath + } + userProfile := os.Getenv("USERPROFILE") - // First prefer the HOME environmental variable - if home := os.Getenv("HOME"); len(home) > 0 { - if _, err := os.Stat(home); err == nil { - return home + // Return first of %HOME%, %HOMEDRIVE%/%HOMEPATH%, %USERPROFILE% that contains a `.kube\config` file. + // %HOMEDRIVE%/%HOMEPATH% is preferred over %USERPROFILE% for backwards-compatibility. + for _, p := range []string{home, homeDriveHomePath, userProfile} { + if len(p) == 0 { + continue } - } - if homeDrive, homePath := os.Getenv("HOMEDRIVE"), os.Getenv("HOMEPATH"); len(homeDrive) > 0 && len(homePath) > 0 { - homeDir := homeDrive + homePath - if _, err := os.Stat(homeDir); err == nil { - return homeDir + if _, err := os.Stat(filepath.Join(p, ".kube", "config")); err != nil { + continue } + return p } - if userProfile := os.Getenv("USERPROFILE"); len(userProfile) > 0 { - if _, err := os.Stat(userProfile); err == nil { - return userProfile + + firstSetPath := "" + firstExistingPath := "" + + // Prefer %USERPROFILE% over %HOMEDRIVE%/%HOMEPATH% for compatibility with other auth-writing tools + for _, p := range []string{home, userProfile, homeDriveHomePath} { + if len(p) == 0 { + continue + } + if len(firstSetPath) == 0 { + // remember the first path that is set + firstSetPath = p + } + info, err := os.Stat(p) + if err != nil { + continue } + if len(firstExistingPath) == 0 { + // remember the first path that exists + firstExistingPath = p + } + if info.IsDir() && info.Mode().Perm()&(1<<(uint(7))) != 0 { + // return first path that is writeable + return p + } + } + + // If none are writeable, return first location that exists + if len(firstExistingPath) > 0 { + return firstExistingPath } + + // If none exist, return first location that is set + if len(firstSetPath) > 0 { + return firstSetPath + } + + // We've got nothing + return "" } return os.Getenv("HOME") } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/integer/integer.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/integer/integer.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/integer/integer.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/integer/integer.go 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package integer - -func IntMax(a, b int) int { - if b > a { - return b - } - return a -} - -func IntMin(a, b int) int { - if b < a { - return b - } - return a -} - -func Int32Max(a, b int32) int32 { - if b > a { - return b - } - return a -} - -func Int32Min(a, b int32) int32 { - if b < a { - return b - } - return a -} - -func Int64Max(a, b int64) int64 { - if b > a { - return b - } - return a -} - -func Int64Min(a, b int64) int64 { - if b < a { - return b - } - return a -} - -// RoundToInt32 rounds floats into integer numbers. -func RoundToInt32(a float64) int32 { - if a < 0 { - return int32(a - 0.5) - } - return int32(a + 0.5) -} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/jsonpath/jsonpath.go 2020-12-10 21:46:52.000000000 +0000 @@ -93,17 +93,17 @@ // encounter an end node, break the current block if j.endRange > 0 && j.endRange <= j.inRange { - j.endRange -= 1 + j.endRange-- break } // encounter a range node, start a range loop if j.beginRange > 0 { - j.beginRange -= 1 - j.inRange += 1 + j.beginRange-- + j.inRange++ for k, value := range results { j.parser.Root.Nodes = nodes[i+1:] if k == len(results)-1 { - j.inRange -= 1 + j.inRange-- } nextResults, err := j.FindResults(value.Interface()) if err != nil { @@ -213,11 +213,11 @@ switch node.Name { case "range": j.stack = append(j.stack, j.cur) - j.beginRange += 1 + j.beginRange++ results = input case "end": if j.endRange < j.inRange { // inside a loop, break the current block - j.endRange += 1 + j.endRange++ break } // the loop is about to end, pop value and continue the following execution @@ -255,10 +255,9 @@ params[1].Value = value.Len() } - if params[1].Value < 0 { + if params[1].Value < 0 || (params[1].Value == 0 && params[1].Derived) { params[1].Value += value.Len() } - sliceLength := value.Len() if params[1].Value != params[0].Value { // if you're requesting zero elements, allow it through. if params[0].Value >= sliceLength || params[0].Value < 0 { @@ -267,14 +266,23 @@ if params[1].Value > sliceLength || params[1].Value < 0 { return input, fmt.Errorf("array index out of bounds: index %d, length %d", params[1].Value-1, sliceLength) } + if params[0].Value > params[1].Value { + return input, fmt.Errorf("starting index %d is greater than ending index %d", params[0].Value, params[1].Value) + } + } else { + return result, nil } - if !params[2].Known { - value = value.Slice(params[0].Value, params[1].Value) - } else { - value = value.Slice3(params[0].Value, params[1].Value, params[2].Value) + value = value.Slice(params[0].Value, params[1].Value) + + step := 1 + if params[2].Known { + if params[2].Value <= 0 { + return input, fmt.Errorf("step must be > 0") + } + step = params[2].Value } - for i := 0; i < value.Len(); i++ { + for i := 0; i < value.Len(); i += step { result = append(result, value.Index(i)) } } diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/jsonpath/node.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/jsonpath/node.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/jsonpath/node.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/jsonpath/node.go 2020-12-10 21:46:52.000000000 +0000 @@ -80,7 +80,7 @@ } func (l *ListNode) String() string { - return fmt.Sprintf("%s", l.Type()) + return l.Type().String() } // TextNode holds plain text. @@ -130,8 +130,9 @@ // ParamsEntry holds param information for ArrayNode type ParamsEntry struct { - Value int - Known bool // whether the value is known when parse it + Value int + Known bool // whether the value is known when parse it + Derived bool } // ArrayNode holds start, end, step information for array index selection @@ -210,7 +211,7 @@ } func (i *WildcardNode) String() string { - return fmt.Sprintf("%s", i.Type()) + return i.Type().String() } // RecursiveNode means a recursive descent operator @@ -223,7 +224,7 @@ } func (r *RecursiveNode) String() string { - return fmt.Sprintf("%s", r.Type()) + return r.Type().String() } // UnionNode is union of ListNode @@ -237,7 +238,7 @@ } func (u *UnionNode) String() string { - return fmt.Sprintf("%s", u.Type()) + return u.Type().String() } // BoolNode holds bool value diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/jsonpath/parser.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/jsonpath/parser.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/jsonpath/parser.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/jsonpath/parser.go 2020-12-10 21:46:52.000000000 +0000 @@ -37,7 +37,6 @@ Name string Root *ListNode input string - cur *ListNode pos int start int width int @@ -46,7 +45,7 @@ var ( ErrSyntax = errors.New("invalid syntax") dictKeyRex = regexp.MustCompile(`^'([^']*)'$`) - sliceOperatorRex = regexp.MustCompile(`^(-?[\d]*)(:-?[\d]*)?(:[\d]*)?$`) + sliceOperatorRex = regexp.MustCompile(`^(-?[\d]*)(:-?[\d]*)?(:-?[\d]*)?$`) ) // Parse parsed the given text and return a node Parser. @@ -94,7 +93,7 @@ // next returns the next rune in the input. func (p *Parser) next() rune { - if int(p.pos) >= len(p.input) { + if p.pos >= len(p.input) { p.width = 0 return eof } @@ -186,8 +185,7 @@ func (p *Parser) parseRightDelim(cur *ListNode) error { p.pos += len(rightDelim) p.consumeText() - cur = p.Root - return p.parseText(cur) + return p.parseText(p.Root) } // parseIdentifier scans build-in keywords, like "range" "end" @@ -231,7 +229,7 @@ func (p *Parser) parseNumber(cur *ListNode) error { r := p.peek() if r == '+' || r == '-' { - r = p.next() + p.next() } for { r = p.next() @@ -266,7 +264,7 @@ } } text := p.consumeText() - text = string(text[1 : len(text)-1]) + text = text[1 : len(text)-1] if text == "*" { text = ":" } @@ -325,6 +323,7 @@ if i == 1 { params[i].Known = true params[i].Value = params[0].Value + 1 + params[i].Derived = true } else { params[i].Known = false params[i].Value = 0 @@ -373,7 +372,7 @@ } reg := regexp.MustCompile(`^([^!<>=]+)([!<>=]+)(.+?)$`) text := p.consumeText() - text = string(text[:len(text)-2]) + text = text[:len(text)-2] value := reg.FindStringSubmatch(text) if value == nil { parser, err := parseAction("text", text) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/keyutil/key.go consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/keyutil/key.go --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/keyutil/key.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/keyutil/key.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,323 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package keyutil contains utilities for managing public/private key pairs. +package keyutil + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + cryptorand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "fmt" + "io/ioutil" + "os" + "path/filepath" +) + +const ( + // ECPrivateKeyBlockType is a possible value for pem.Block.Type. + ECPrivateKeyBlockType = "EC PRIVATE KEY" + // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. + RSAPrivateKeyBlockType = "RSA PRIVATE KEY" + // PrivateKeyBlockType is a possible value for pem.Block.Type. + PrivateKeyBlockType = "PRIVATE KEY" + // PublicKeyBlockType is a possible value for pem.Block.Type. + PublicKeyBlockType = "PUBLIC KEY" +) + +// MakeEllipticPrivateKeyPEM creates an ECDSA private key +func MakeEllipticPrivateKeyPEM() ([]byte, error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) + if err != nil { + return nil, err + } + + derBytes, err := x509.MarshalECPrivateKey(privateKey) + if err != nil { + return nil, err + } + + privateKeyPemBlock := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(privateKeyPemBlock), nil +} + +// WriteKey writes the pem-encoded key data to keyPath. +// The key file will be created with file mode 0600. +// If the key file already exists, it will be overwritten. +// The parent directory of the keyPath will be created as needed with file mode 0755. +func WriteKey(keyPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { + return err + } + return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) +} + +// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it +// can't find one, it will generate a new key and store it there. +func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { + loadedData, err := ioutil.ReadFile(keyPath) + // Call verifyKeyData to ensure the file wasn't empty/corrupt. + if err == nil && verifyKeyData(loadedData) { + return loadedData, false, err + } + if !os.IsNotExist(err) { + return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) + } + + generatedData, err := MakeEllipticPrivateKeyPEM() + if err != nil { + return nil, false, fmt.Errorf("error generating key: %v", err) + } + if err := WriteKey(keyPath, generatedData); err != nil { + return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) + } + return generatedData, true, nil +} + +// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to +// a PEM encoded block or returns an error. +func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { + switch t := privateKey.(type) { + case *ecdsa.PrivateKey: + derBytes, err := x509.MarshalECPrivateKey(t) + if err != nil { + return nil, err + } + block := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(block), nil + case *rsa.PrivateKey: + block := &pem.Block{ + Type: RSAPrivateKeyBlockType, + Bytes: x509.MarshalPKCS1PrivateKey(t), + } + return pem.EncodeToMemory(block), nil + default: + return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) + } +} + +// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. +// Returns an error if the file could not be read or if the private key could not be parsed. +func PrivateKeyFromFile(file string) (interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + key, err := ParsePrivateKeyPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading private key file %s: %v", file, err) + } + return key, nil +} + +// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. +// Reads public keys from both public and private key files. +func PublicKeysFromFile(file string) ([]interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + keys, err := ParsePublicKeysPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading public key file %s: %v", file, err) + } + return keys, nil +} + +// verifyKeyData returns true if the provided data appears to be a valid private key. +func verifyKeyData(data []byte) bool { + if len(data) == 0 { + return false + } + _, err := ParsePrivateKeyPEM(data) + return err == nil +} + +// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. +// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" +func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { + var privateKeyPemBlock *pem.Block + for { + privateKeyPemBlock, keyData = pem.Decode(keyData) + if privateKeyPemBlock == nil { + break + } + + switch privateKeyPemBlock.Type { + case ECPrivateKeyBlockType: + // ECDSA Private Key in ASN.1 format + if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case RSAPrivateKeyBlockType: + // RSA Private Key in PKCS#1 format + if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case PrivateKeyBlockType: + // RSA or ECDSA Private Key in unencrypted PKCS#8 format + if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + } + + // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks + // originally, only the first PEM block was parsed and expected to be a key block + } + + // we read all the PEM blocks and didn't recognize one + return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") +} + +// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. +// Reads public keys from both public and private key files. +func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { + var block *pem.Block + keys := []interface{}{} + for { + // read the next block + block, keyData = pem.Decode(keyData) + if block == nil { + break + } + + // test block against parsing functions + if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseECPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + + // tolerate non-key PEM blocks for backwards compatibility + // originally, only the first PEM block was parsed and expected to be a key block + } + + if len(keys) == 0 { + return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") + } + return keys, nil +} + +// parseRSAPublicKey parses a single RSA public key from the provided data +func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an RSA Public Key + var pubKey *rsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") + } + + return pubKey, nil +} + +// parseRSAPrivateKey parses a single RSA private key from the provided data +func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { + return nil, err + } + } + + // Test if parsed key is an RSA Private Key + var privKey *rsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") + } + + return privKey, nil +} + +// parseECPublicKey parses a single ECDSA public key from the provided data +func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an ECDSA Public Key + var pubKey *ecdsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") + } + + return pubKey, nil +} + +// parseECPrivateKey parses a single ECDSA private key from the provided data +func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { + return nil, err + } + + // Test if parsed key is an ECDSA Private Key + var privKey *ecdsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") + } + + return privKey, nil +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/keyutil/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/keyutil/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/client-go/util/keyutil/OWNERS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/client-go/util/keyutil/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +approvers: +- sig-auth-certificates-approvers +reviewers: +- sig-auth-certificates-reviewers +labels: +- sig/auth + diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/code-of-conduct.md consul-1.8.7+dfsg1/vendor/k8s.io/klog/code-of-conduct.md --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/code-of-conduct.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/code-of-conduct.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ +# Kubernetes Community Code of Conduct + +Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/CONTRIBUTING.md consul-1.8.7+dfsg1/vendor/k8s.io/klog/CONTRIBUTING.md --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/CONTRIBUTING.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +# Contributing Guidelines + +Welcome to Kubernetes. We are excited about the prospect of you joining our [community](https://github.com/kubernetes/community)! The Kubernetes community abides by the CNCF [code of conduct](code-of-conduct.md). Here is an excerpt: + +_As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities._ + +## Getting Started + +We have full documentation on how to get started contributing here: + +- [Contributor License Agreement](https://git.k8s.io/community/CLA.md) Kubernetes projects require that you sign a Contributor License Agreement (CLA) before we can accept your pull requests +- [Kubernetes Contributor Guide](http://git.k8s.io/community/contributors/guide) - Main contributor documentation, or you can just jump directly to the [contributing section](http://git.k8s.io/community/contributors/guide#contributing) +- [Contributor Cheat Sheet](https://git.k8s.io/community/contributors/guide/contributor-cheatsheet.md) - Common resources for existing developers + +## Mentorship + +- [Mentoring Initiatives](https://git.k8s.io/community/mentoring) - We have a diverse set of mentorship programs available that are always looking for volunteers! + +## Contact Information + +- [Slack](https://kubernetes.slack.com/messages/sig-architecture) +- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/go.mod consul-1.8.7+dfsg1/vendor/k8s.io/klog/go.mod --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/go.mod 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/go.mod 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,5 @@ +module k8s.io/klog + +go 1.12 + +require github.com/go-logr/logr v0.1.0 diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/go.sum consul-1.8.7+dfsg1/vendor/k8s.io/klog/go.sum --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/go.sum 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/go.sum 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,2 @@ +github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/klog_file.go consul-1.8.7+dfsg1/vendor/k8s.io/klog/klog_file.go --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/klog_file.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/klog_file.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,139 @@ +// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ +// +// Copyright 2013 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// File I/O for logs. + +package klog + +import ( + "errors" + "fmt" + "os" + "os/user" + "path/filepath" + "strings" + "sync" + "time" +) + +// MaxSize is the maximum size of a log file in bytes. +var MaxSize uint64 = 1024 * 1024 * 1800 + +// logDirs lists the candidate directories for new log files. +var logDirs []string + +func createLogDirs() { + if logging.logDir != "" { + logDirs = append(logDirs, logging.logDir) + } + logDirs = append(logDirs, os.TempDir()) +} + +var ( + pid = os.Getpid() + program = filepath.Base(os.Args[0]) + host = "unknownhost" + userName = "unknownuser" +) + +func init() { + h, err := os.Hostname() + if err == nil { + host = shortHostname(h) + } + + current, err := user.Current() + if err == nil { + userName = current.Username + } + + // Sanitize userName since it may contain filepath separators on Windows. + userName = strings.Replace(userName, `\`, "_", -1) +} + +// shortHostname returns its argument, truncating at the first period. +// For instance, given "www.google.com" it returns "www". +func shortHostname(hostname string) string { + if i := strings.Index(hostname, "."); i >= 0 { + return hostname[:i] + } + return hostname +} + +// logName returns a new log file name containing tag, with start time t, and +// the name for the symlink for tag. +func logName(tag string, t time.Time) (name, link string) { + name = fmt.Sprintf("%s.%s.%s.log.%s.%04d%02d%02d-%02d%02d%02d.%d", + program, + host, + userName, + tag, + t.Year(), + t.Month(), + t.Day(), + t.Hour(), + t.Minute(), + t.Second(), + pid) + return name, program + "." + tag +} + +var onceLogDirs sync.Once + +// create creates a new log file and returns the file and its filename, which +// contains tag ("INFO", "FATAL", etc.) and t. If the file is created +// successfully, create also attempts to update the symlink for that tag, ignoring +// errors. +// The startup argument indicates whether this is the initial startup of klog. +// If startup is true, existing files are opened for appending instead of truncated. +func create(tag string, t time.Time, startup bool) (f *os.File, filename string, err error) { + if logging.logFile != "" { + f, err := openOrCreate(logging.logFile, startup) + if err == nil { + return f, logging.logFile, nil + } + return nil, "", fmt.Errorf("log: unable to create log: %v", err) + } + onceLogDirs.Do(createLogDirs) + if len(logDirs) == 0 { + return nil, "", errors.New("log: no log dirs") + } + name, link := logName(tag, t) + var lastErr error + for _, dir := range logDirs { + fname := filepath.Join(dir, name) + f, err := openOrCreate(fname, startup) + if err == nil { + symlink := filepath.Join(dir, link) + os.Remove(symlink) // ignore err + os.Symlink(name, symlink) // ignore err + return f, fname, nil + } + lastErr = err + } + return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr) +} + +// The startup argument indicates whether this is the initial startup of klog. +// If startup is true, existing files are opened for appending instead of truncated. +func openOrCreate(name string, startup bool) (*os.File, error) { + if startup { + f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + return f, err + } + f, err := os.Create(name) + return f, err +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/klog.go consul-1.8.7+dfsg1/vendor/k8s.io/klog/klog.go --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/klog.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/klog.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1308 @@ +// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ +// +// Copyright 2013 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package klog implements logging analogous to the Google-internal C++ INFO/ERROR/V setup. +// It provides functions Info, Warning, Error, Fatal, plus formatting variants such as +// Infof. It also provides V-style logging controlled by the -v and -vmodule=file=2 flags. +// +// Basic examples: +// +// klog.Info("Prepare to repel boarders") +// +// klog.Fatalf("Initialization failed: %s", err) +// +// See the documentation for the V function for an explanation of these examples: +// +// if klog.V(2) { +// klog.Info("Starting transaction...") +// } +// +// klog.V(2).Infoln("Processed", nItems, "elements") +// +// Log output is buffered and written periodically using Flush. Programs +// should call Flush before exiting to guarantee all log output is written. +// +// By default, all log statements write to standard error. +// This package provides several flags that modify this behavior. +// As a result, flag.Parse must be called before any logging is done. +// +// -logtostderr=true +// Logs are written to standard error instead of to files. +// -alsologtostderr=false +// Logs are written to standard error as well as to files. +// -stderrthreshold=ERROR +// Log events at or above this severity are logged to standard +// error as well as to files. +// -log_dir="" +// Log files will be written to this directory instead of the +// default temporary directory. +// +// Other flags provide aids to debugging. +// +// -log_backtrace_at="" +// When set to a file and line number holding a logging statement, +// such as +// -log_backtrace_at=gopherflakes.go:234 +// a stack trace will be written to the Info log whenever execution +// hits that statement. (Unlike with -vmodule, the ".go" must be +// present.) +// -v=0 +// Enable V-leveled logging at the specified level. +// -vmodule="" +// The syntax of the argument is a comma-separated list of pattern=N, +// where pattern is a literal file name (minus the ".go" suffix) or +// "glob" pattern and N is a V level. For instance, +// -vmodule=gopher*=3 +// sets the V level to 3 in all Go files whose names begin "gopher". +// +package klog + +import ( + "bufio" + "bytes" + "errors" + "flag" + "fmt" + "io" + stdLog "log" + "math" + "os" + "path/filepath" + "runtime" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" +) + +// severity identifies the sort of log: info, warning etc. It also implements +// the flag.Value interface. The -stderrthreshold flag is of type severity and +// should be modified only through the flag.Value interface. The values match +// the corresponding constants in C++. +type severity int32 // sync/atomic int32 + +// These constants identify the log levels in order of increasing severity. +// A message written to a high-severity log file is also written to each +// lower-severity log file. +const ( + infoLog severity = iota + warningLog + errorLog + fatalLog + numSeverity = 4 +) + +const severityChar = "IWEF" + +var severityName = []string{ + infoLog: "INFO", + warningLog: "WARNING", + errorLog: "ERROR", + fatalLog: "FATAL", +} + +// get returns the value of the severity. +func (s *severity) get() severity { + return severity(atomic.LoadInt32((*int32)(s))) +} + +// set sets the value of the severity. +func (s *severity) set(val severity) { + atomic.StoreInt32((*int32)(s), int32(val)) +} + +// String is part of the flag.Value interface. +func (s *severity) String() string { + return strconv.FormatInt(int64(*s), 10) +} + +// Get is part of the flag.Value interface. +func (s *severity) Get() interface{} { + return *s +} + +// Set is part of the flag.Value interface. +func (s *severity) Set(value string) error { + var threshold severity + // Is it a known name? + if v, ok := severityByName(value); ok { + threshold = v + } else { + v, err := strconv.ParseInt(value, 10, 32) + if err != nil { + return err + } + threshold = severity(v) + } + logging.stderrThreshold.set(threshold) + return nil +} + +func severityByName(s string) (severity, bool) { + s = strings.ToUpper(s) + for i, name := range severityName { + if name == s { + return severity(i), true + } + } + return 0, false +} + +// OutputStats tracks the number of output lines and bytes written. +type OutputStats struct { + lines int64 + bytes int64 +} + +// Lines returns the number of lines written. +func (s *OutputStats) Lines() int64 { + return atomic.LoadInt64(&s.lines) +} + +// Bytes returns the number of bytes written. +func (s *OutputStats) Bytes() int64 { + return atomic.LoadInt64(&s.bytes) +} + +// Stats tracks the number of lines of output and number of bytes +// per severity level. Values must be read with atomic.LoadInt64. +var Stats struct { + Info, Warning, Error OutputStats +} + +var severityStats = [numSeverity]*OutputStats{ + infoLog: &Stats.Info, + warningLog: &Stats.Warning, + errorLog: &Stats.Error, +} + +// Level is exported because it appears in the arguments to V and is +// the type of the v flag, which can be set programmatically. +// It's a distinct type because we want to discriminate it from logType. +// Variables of type level are only changed under logging.mu. +// The -v flag is read only with atomic ops, so the state of the logging +// module is consistent. + +// Level is treated as a sync/atomic int32. + +// Level specifies a level of verbosity for V logs. *Level implements +// flag.Value; the -v flag is of type Level and should be modified +// only through the flag.Value interface. +type Level int32 + +// get returns the value of the Level. +func (l *Level) get() Level { + return Level(atomic.LoadInt32((*int32)(l))) +} + +// set sets the value of the Level. +func (l *Level) set(val Level) { + atomic.StoreInt32((*int32)(l), int32(val)) +} + +// String is part of the flag.Value interface. +func (l *Level) String() string { + return strconv.FormatInt(int64(*l), 10) +} + +// Get is part of the flag.Value interface. +func (l *Level) Get() interface{} { + return *l +} + +// Set is part of the flag.Value interface. +func (l *Level) Set(value string) error { + v, err := strconv.ParseInt(value, 10, 32) + if err != nil { + return err + } + logging.mu.Lock() + defer logging.mu.Unlock() + logging.setVState(Level(v), logging.vmodule.filter, false) + return nil +} + +// moduleSpec represents the setting of the -vmodule flag. +type moduleSpec struct { + filter []modulePat +} + +// modulePat contains a filter for the -vmodule flag. +// It holds a verbosity level and a file pattern to match. +type modulePat struct { + pattern string + literal bool // The pattern is a literal string + level Level +} + +// match reports whether the file matches the pattern. It uses a string +// comparison if the pattern contains no metacharacters. +func (m *modulePat) match(file string) bool { + if m.literal { + return file == m.pattern + } + match, _ := filepath.Match(m.pattern, file) + return match +} + +func (m *moduleSpec) String() string { + // Lock because the type is not atomic. TODO: clean this up. + logging.mu.Lock() + defer logging.mu.Unlock() + var b bytes.Buffer + for i, f := range m.filter { + if i > 0 { + b.WriteRune(',') + } + fmt.Fprintf(&b, "%s=%d", f.pattern, f.level) + } + return b.String() +} + +// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the +// struct is not exported. +func (m *moduleSpec) Get() interface{} { + return nil +} + +var errVmoduleSyntax = errors.New("syntax error: expect comma-separated list of filename=N") + +// Syntax: -vmodule=recordio=2,file=1,gfs*=3 +func (m *moduleSpec) Set(value string) error { + var filter []modulePat + for _, pat := range strings.Split(value, ",") { + if len(pat) == 0 { + // Empty strings such as from a trailing comma can be ignored. + continue + } + patLev := strings.Split(pat, "=") + if len(patLev) != 2 || len(patLev[0]) == 0 || len(patLev[1]) == 0 { + return errVmoduleSyntax + } + pattern := patLev[0] + v, err := strconv.ParseInt(patLev[1], 10, 32) + if err != nil { + return errors.New("syntax error: expect comma-separated list of filename=N") + } + if v < 0 { + return errors.New("negative value for vmodule level") + } + if v == 0 { + continue // Ignore. It's harmless but no point in paying the overhead. + } + // TODO: check syntax of filter? + filter = append(filter, modulePat{pattern, isLiteral(pattern), Level(v)}) + } + logging.mu.Lock() + defer logging.mu.Unlock() + logging.setVState(logging.verbosity, filter, true) + return nil +} + +// isLiteral reports whether the pattern is a literal string, that is, has no metacharacters +// that require filepath.Match to be called to match the pattern. +func isLiteral(pattern string) bool { + return !strings.ContainsAny(pattern, `\*?[]`) +} + +// traceLocation represents the setting of the -log_backtrace_at flag. +type traceLocation struct { + file string + line int +} + +// isSet reports whether the trace location has been specified. +// logging.mu is held. +func (t *traceLocation) isSet() bool { + return t.line > 0 +} + +// match reports whether the specified file and line matches the trace location. +// The argument file name is the full path, not the basename specified in the flag. +// logging.mu is held. +func (t *traceLocation) match(file string, line int) bool { + if t.line != line { + return false + } + if i := strings.LastIndex(file, "/"); i >= 0 { + file = file[i+1:] + } + return t.file == file +} + +func (t *traceLocation) String() string { + // Lock because the type is not atomic. TODO: clean this up. + logging.mu.Lock() + defer logging.mu.Unlock() + return fmt.Sprintf("%s:%d", t.file, t.line) +} + +// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the +// struct is not exported +func (t *traceLocation) Get() interface{} { + return nil +} + +var errTraceSyntax = errors.New("syntax error: expect file.go:234") + +// Syntax: -log_backtrace_at=gopherflakes.go:234 +// Note that unlike vmodule the file extension is included here. +func (t *traceLocation) Set(value string) error { + if value == "" { + // Unset. + t.line = 0 + t.file = "" + } + fields := strings.Split(value, ":") + if len(fields) != 2 { + return errTraceSyntax + } + file, line := fields[0], fields[1] + if !strings.Contains(file, ".") { + return errTraceSyntax + } + v, err := strconv.Atoi(line) + if err != nil { + return errTraceSyntax + } + if v <= 0 { + return errors.New("negative or zero value for level") + } + logging.mu.Lock() + defer logging.mu.Unlock() + t.line = v + t.file = file + return nil +} + +// flushSyncWriter is the interface satisfied by logging destinations. +type flushSyncWriter interface { + Flush() error + Sync() error + io.Writer +} + +// init sets up the defaults and runs flushDaemon. +func init() { + logging.stderrThreshold = errorLog // Default stderrThreshold is ERROR. + logging.setVState(0, nil, false) + logging.logDir = "" + logging.logFile = "" + logging.logFileMaxSizeMB = 1800 + logging.toStderr = true + logging.alsoToStderr = false + logging.skipHeaders = false + logging.addDirHeader = false + logging.skipLogHeaders = false + go logging.flushDaemon() +} + +// InitFlags is for explicitly initializing the flags. +func InitFlags(flagset *flag.FlagSet) { + if flagset == nil { + flagset = flag.CommandLine + } + + flagset.StringVar(&logging.logDir, "log_dir", logging.logDir, "If non-empty, write log files in this directory") + flagset.StringVar(&logging.logFile, "log_file", logging.logFile, "If non-empty, use this log file") + flagset.Uint64Var(&logging.logFileMaxSizeMB, "log_file_max_size", logging.logFileMaxSizeMB, + "Defines the maximum size a log file can grow to. Unit is megabytes. "+ + "If the value is 0, the maximum file size is unlimited.") + flagset.BoolVar(&logging.toStderr, "logtostderr", logging.toStderr, "log to standard error instead of files") + flagset.BoolVar(&logging.alsoToStderr, "alsologtostderr", logging.alsoToStderr, "log to standard error as well as files") + flagset.Var(&logging.verbosity, "v", "number for the log level verbosity") + flagset.BoolVar(&logging.skipHeaders, "add_dir_header", logging.addDirHeader, "If true, adds the file directory to the header") + flagset.BoolVar(&logging.skipHeaders, "skip_headers", logging.skipHeaders, "If true, avoid header prefixes in the log messages") + flagset.BoolVar(&logging.skipLogHeaders, "skip_log_headers", logging.skipLogHeaders, "If true, avoid headers when opening log files") + flagset.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr") + flagset.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging") + flagset.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace") +} + +// Flush flushes all pending log I/O. +func Flush() { + logging.lockAndFlushAll() +} + +// loggingT collects all the global state of the logging setup. +type loggingT struct { + // Boolean flags. Not handled atomically because the flag.Value interface + // does not let us avoid the =true, and that shorthand is necessary for + // compatibility. TODO: does this matter enough to fix? Seems unlikely. + toStderr bool // The -logtostderr flag. + alsoToStderr bool // The -alsologtostderr flag. + + // Level flag. Handled atomically. + stderrThreshold severity // The -stderrthreshold flag. + + // freeList is a list of byte buffers, maintained under freeListMu. + freeList *buffer + // freeListMu maintains the free list. It is separate from the main mutex + // so buffers can be grabbed and printed to without holding the main lock, + // for better parallelization. + freeListMu sync.Mutex + + // mu protects the remaining elements of this structure and is + // used to synchronize logging. + mu sync.Mutex + // file holds writer for each of the log types. + file [numSeverity]flushSyncWriter + // pcs is used in V to avoid an allocation when computing the caller's PC. + pcs [1]uintptr + // vmap is a cache of the V Level for each V() call site, identified by PC. + // It is wiped whenever the vmodule flag changes state. + vmap map[uintptr]Level + // filterLength stores the length of the vmodule filter chain. If greater + // than zero, it means vmodule is enabled. It may be read safely + // using sync.LoadInt32, but is only modified under mu. + filterLength int32 + // traceLocation is the state of the -log_backtrace_at flag. + traceLocation traceLocation + // These flags are modified only under lock, although verbosity may be fetched + // safely using atomic.LoadInt32. + vmodule moduleSpec // The state of the -vmodule flag. + verbosity Level // V logging level, the value of the -v flag/ + + // If non-empty, overrides the choice of directory in which to write logs. + // See createLogDirs for the full list of possible destinations. + logDir string + + // If non-empty, specifies the path of the file to write logs. mutually exclusive + // with the log-dir option. + logFile string + + // When logFile is specified, this limiter makes sure the logFile won't exceeds a certain size. When exceeds, the + // logFile will be cleaned up. If this value is 0, no size limitation will be applied to logFile. + logFileMaxSizeMB uint64 + + // If true, do not add the prefix headers, useful when used with SetOutput + skipHeaders bool + + // If true, do not add the headers to log files + skipLogHeaders bool + + // If true, add the file directory to the header + addDirHeader bool +} + +// buffer holds a byte Buffer for reuse. The zero value is ready for use. +type buffer struct { + bytes.Buffer + tmp [64]byte // temporary byte array for creating headers. + next *buffer +} + +var logging loggingT + +// setVState sets a consistent state for V logging. +// l.mu is held. +func (l *loggingT) setVState(verbosity Level, filter []modulePat, setFilter bool) { + // Turn verbosity off so V will not fire while we are in transition. + logging.verbosity.set(0) + // Ditto for filter length. + atomic.StoreInt32(&logging.filterLength, 0) + + // Set the new filters and wipe the pc->Level map if the filter has changed. + if setFilter { + logging.vmodule.filter = filter + logging.vmap = make(map[uintptr]Level) + } + + // Things are consistent now, so enable filtering and verbosity. + // They are enabled in order opposite to that in V. + atomic.StoreInt32(&logging.filterLength, int32(len(filter))) + logging.verbosity.set(verbosity) +} + +// getBuffer returns a new, ready-to-use buffer. +func (l *loggingT) getBuffer() *buffer { + l.freeListMu.Lock() + b := l.freeList + if b != nil { + l.freeList = b.next + } + l.freeListMu.Unlock() + if b == nil { + b = new(buffer) + } else { + b.next = nil + b.Reset() + } + return b +} + +// putBuffer returns a buffer to the free list. +func (l *loggingT) putBuffer(b *buffer) { + if b.Len() >= 256 { + // Let big buffers die a natural death. + return + } + l.freeListMu.Lock() + b.next = l.freeList + l.freeList = b + l.freeListMu.Unlock() +} + +var timeNow = time.Now // Stubbed out for testing. + +/* +header formats a log header as defined by the C++ implementation. +It returns a buffer containing the formatted header and the user's file and line number. +The depth specifies how many stack frames above lives the source line to be identified in the log message. + +Log lines have this form: + Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... +where the fields are defined as follows: + L A single character, representing the log level (eg 'I' for INFO) + mm The month (zero padded; ie May is '05') + dd The day (zero padded) + hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds + threadid The space-padded thread ID as returned by GetTID() + file The file name + line The line number + msg The user-supplied message +*/ +func (l *loggingT) header(s severity, depth int) (*buffer, string, int) { + _, file, line, ok := runtime.Caller(3 + depth) + if !ok { + file = "???" + line = 1 + } else { + if slash := strings.LastIndex(file, "/"); slash >= 0 { + path := file + file = path[slash+1:] + if l.addDirHeader { + if dirsep := strings.LastIndex(path[:slash], "/"); dirsep >= 0 { + file = path[dirsep+1:] + } + } + } + } + return l.formatHeader(s, file, line), file, line +} + +// formatHeader formats a log header using the provided file name and line number. +func (l *loggingT) formatHeader(s severity, file string, line int) *buffer { + now := timeNow() + if line < 0 { + line = 0 // not a real line number, but acceptable to someDigits + } + if s > fatalLog { + s = infoLog // for safety. + } + buf := l.getBuffer() + if l.skipHeaders { + return buf + } + + // Avoid Fprintf, for speed. The format is so simple that we can do it quickly by hand. + // It's worth about 3X. Fprintf is hard. + _, month, day := now.Date() + hour, minute, second := now.Clock() + // Lmmdd hh:mm:ss.uuuuuu threadid file:line] + buf.tmp[0] = severityChar[s] + buf.twoDigits(1, int(month)) + buf.twoDigits(3, day) + buf.tmp[5] = ' ' + buf.twoDigits(6, hour) + buf.tmp[8] = ':' + buf.twoDigits(9, minute) + buf.tmp[11] = ':' + buf.twoDigits(12, second) + buf.tmp[14] = '.' + buf.nDigits(6, 15, now.Nanosecond()/1000, '0') + buf.tmp[21] = ' ' + buf.nDigits(7, 22, pid, ' ') // TODO: should be TID + buf.tmp[29] = ' ' + buf.Write(buf.tmp[:30]) + buf.WriteString(file) + buf.tmp[0] = ':' + n := buf.someDigits(1, line) + buf.tmp[n+1] = ']' + buf.tmp[n+2] = ' ' + buf.Write(buf.tmp[:n+3]) + return buf +} + +// Some custom tiny helper functions to print the log header efficiently. + +const digits = "0123456789" + +// twoDigits formats a zero-prefixed two-digit integer at buf.tmp[i]. +func (buf *buffer) twoDigits(i, d int) { + buf.tmp[i+1] = digits[d%10] + d /= 10 + buf.tmp[i] = digits[d%10] +} + +// nDigits formats an n-digit integer at buf.tmp[i], +// padding with pad on the left. +// It assumes d >= 0. +func (buf *buffer) nDigits(n, i, d int, pad byte) { + j := n - 1 + for ; j >= 0 && d > 0; j-- { + buf.tmp[i+j] = digits[d%10] + d /= 10 + } + for ; j >= 0; j-- { + buf.tmp[i+j] = pad + } +} + +// someDigits formats a zero-prefixed variable-width integer at buf.tmp[i]. +func (buf *buffer) someDigits(i, d int) int { + // Print into the top, then copy down. We know there's space for at least + // a 10-digit number. + j := len(buf.tmp) + for { + j-- + buf.tmp[j] = digits[d%10] + d /= 10 + if d == 0 { + break + } + } + return copy(buf.tmp[i:], buf.tmp[j:]) +} + +func (l *loggingT) println(s severity, args ...interface{}) { + buf, file, line := l.header(s, 0) + fmt.Fprintln(buf, args...) + l.output(s, buf, file, line, false) +} + +func (l *loggingT) print(s severity, args ...interface{}) { + l.printDepth(s, 1, args...) +} + +func (l *loggingT) printDepth(s severity, depth int, args ...interface{}) { + buf, file, line := l.header(s, depth) + fmt.Fprint(buf, args...) + if buf.Bytes()[buf.Len()-1] != '\n' { + buf.WriteByte('\n') + } + l.output(s, buf, file, line, false) +} + +func (l *loggingT) printf(s severity, format string, args ...interface{}) { + buf, file, line := l.header(s, 0) + fmt.Fprintf(buf, format, args...) + if buf.Bytes()[buf.Len()-1] != '\n' { + buf.WriteByte('\n') + } + l.output(s, buf, file, line, false) +} + +// printWithFileLine behaves like print but uses the provided file and line number. If +// alsoLogToStderr is true, the log message always appears on standard error; it +// will also appear in the log file unless --logtostderr is set. +func (l *loggingT) printWithFileLine(s severity, file string, line int, alsoToStderr bool, args ...interface{}) { + buf := l.formatHeader(s, file, line) + fmt.Fprint(buf, args...) + if buf.Bytes()[buf.Len()-1] != '\n' { + buf.WriteByte('\n') + } + l.output(s, buf, file, line, alsoToStderr) +} + +// redirectBuffer is used to set an alternate destination for the logs +type redirectBuffer struct { + w io.Writer +} + +func (rb *redirectBuffer) Sync() error { + return nil +} + +func (rb *redirectBuffer) Flush() error { + return nil +} + +func (rb *redirectBuffer) Write(bytes []byte) (n int, err error) { + return rb.w.Write(bytes) +} + +// SetOutput sets the output destination for all severities +func SetOutput(w io.Writer) { + logging.mu.Lock() + defer logging.mu.Unlock() + for s := fatalLog; s >= infoLog; s-- { + rb := &redirectBuffer{ + w: w, + } + logging.file[s] = rb + } +} + +// SetOutputBySeverity sets the output destination for specific severity +func SetOutputBySeverity(name string, w io.Writer) { + logging.mu.Lock() + defer logging.mu.Unlock() + sev, ok := severityByName(name) + if !ok { + panic(fmt.Sprintf("SetOutputBySeverity(%q): unrecognized severity name", name)) + } + rb := &redirectBuffer{ + w: w, + } + logging.file[sev] = rb +} + +// output writes the data to the log files and releases the buffer. +func (l *loggingT) output(s severity, buf *buffer, file string, line int, alsoToStderr bool) { + l.mu.Lock() + if l.traceLocation.isSet() { + if l.traceLocation.match(file, line) { + buf.Write(stacks(false)) + } + } + data := buf.Bytes() + if l.toStderr { + os.Stderr.Write(data) + } else { + if alsoToStderr || l.alsoToStderr || s >= l.stderrThreshold.get() { + os.Stderr.Write(data) + } + + if logging.logFile != "" { + // Since we are using a single log file, all of the items in l.file array + // will point to the same file, so just use one of them to write data. + if l.file[infoLog] == nil { + if err := l.createFiles(infoLog); err != nil { + os.Stderr.Write(data) // Make sure the message appears somewhere. + l.exit(err) + } + } + l.file[infoLog].Write(data) + } else { + if l.file[s] == nil { + if err := l.createFiles(s); err != nil { + os.Stderr.Write(data) // Make sure the message appears somewhere. + l.exit(err) + } + } + + switch s { + case fatalLog: + l.file[fatalLog].Write(data) + fallthrough + case errorLog: + l.file[errorLog].Write(data) + fallthrough + case warningLog: + l.file[warningLog].Write(data) + fallthrough + case infoLog: + l.file[infoLog].Write(data) + } + } + } + if s == fatalLog { + // If we got here via Exit rather than Fatal, print no stacks. + if atomic.LoadUint32(&fatalNoStacks) > 0 { + l.mu.Unlock() + timeoutFlush(10 * time.Second) + os.Exit(1) + } + // Dump all goroutine stacks before exiting. + // First, make sure we see the trace for the current goroutine on standard error. + // If -logtostderr has been specified, the loop below will do that anyway + // as the first stack in the full dump. + if !l.toStderr { + os.Stderr.Write(stacks(false)) + } + // Write the stack trace for all goroutines to the files. + trace := stacks(true) + logExitFunc = func(error) {} // If we get a write error, we'll still exit below. + for log := fatalLog; log >= infoLog; log-- { + if f := l.file[log]; f != nil { // Can be nil if -logtostderr is set. + f.Write(trace) + } + } + l.mu.Unlock() + timeoutFlush(10 * time.Second) + os.Exit(255) // C++ uses -1, which is silly because it's anded with 255 anyway. + } + l.putBuffer(buf) + l.mu.Unlock() + if stats := severityStats[s]; stats != nil { + atomic.AddInt64(&stats.lines, 1) + atomic.AddInt64(&stats.bytes, int64(len(data))) + } +} + +// timeoutFlush calls Flush and returns when it completes or after timeout +// elapses, whichever happens first. This is needed because the hooks invoked +// by Flush may deadlock when klog.Fatal is called from a hook that holds +// a lock. +func timeoutFlush(timeout time.Duration) { + done := make(chan bool, 1) + go func() { + Flush() // calls logging.lockAndFlushAll() + done <- true + }() + select { + case <-done: + case <-time.After(timeout): + fmt.Fprintln(os.Stderr, "klog: Flush took longer than", timeout) + } +} + +// stacks is a wrapper for runtime.Stack that attempts to recover the data for all goroutines. +func stacks(all bool) []byte { + // We don't know how big the traces are, so grow a few times if they don't fit. Start large, though. + n := 10000 + if all { + n = 100000 + } + var trace []byte + for i := 0; i < 5; i++ { + trace = make([]byte, n) + nbytes := runtime.Stack(trace, all) + if nbytes < len(trace) { + return trace[:nbytes] + } + n *= 2 + } + return trace +} + +// logExitFunc provides a simple mechanism to override the default behavior +// of exiting on error. Used in testing and to guarantee we reach a required exit +// for fatal logs. Instead, exit could be a function rather than a method but that +// would make its use clumsier. +var logExitFunc func(error) + +// exit is called if there is trouble creating or writing log files. +// It flushes the logs and exits the program; there's no point in hanging around. +// l.mu is held. +func (l *loggingT) exit(err error) { + fmt.Fprintf(os.Stderr, "log: exiting because of error: %s\n", err) + // If logExitFunc is set, we do that instead of exiting. + if logExitFunc != nil { + logExitFunc(err) + return + } + l.flushAll() + os.Exit(2) +} + +// syncBuffer joins a bufio.Writer to its underlying file, providing access to the +// file's Sync method and providing a wrapper for the Write method that provides log +// file rotation. There are conflicting methods, so the file cannot be embedded. +// l.mu is held for all its methods. +type syncBuffer struct { + logger *loggingT + *bufio.Writer + file *os.File + sev severity + nbytes uint64 // The number of bytes written to this file + maxbytes uint64 // The max number of bytes this syncBuffer.file can hold before cleaning up. +} + +func (sb *syncBuffer) Sync() error { + return sb.file.Sync() +} + +// CalculateMaxSize returns the real max size in bytes after considering the default max size and the flag options. +func CalculateMaxSize() uint64 { + if logging.logFile != "" { + if logging.logFileMaxSizeMB == 0 { + // If logFileMaxSizeMB is zero, we don't have limitations on the log size. + return math.MaxUint64 + } + // Flag logFileMaxSizeMB is in MB for user convenience. + return logging.logFileMaxSizeMB * 1024 * 1024 + } + // If "log_file" flag is not specified, the target file (sb.file) will be cleaned up when reaches a fixed size. + return MaxSize +} + +func (sb *syncBuffer) Write(p []byte) (n int, err error) { + if sb.nbytes+uint64(len(p)) >= sb.maxbytes { + if err := sb.rotateFile(time.Now(), false); err != nil { + sb.logger.exit(err) + } + } + n, err = sb.Writer.Write(p) + sb.nbytes += uint64(n) + if err != nil { + sb.logger.exit(err) + } + return +} + +// rotateFile closes the syncBuffer's file and starts a new one. +// The startup argument indicates whether this is the initial startup of klog. +// If startup is true, existing files are opened for appending instead of truncated. +func (sb *syncBuffer) rotateFile(now time.Time, startup bool) error { + if sb.file != nil { + sb.Flush() + sb.file.Close() + } + var err error + sb.file, _, err = create(severityName[sb.sev], now, startup) + sb.nbytes = 0 + if err != nil { + return err + } + + sb.Writer = bufio.NewWriterSize(sb.file, bufferSize) + + if sb.logger.skipLogHeaders { + return nil + } + + // Write header. + var buf bytes.Buffer + fmt.Fprintf(&buf, "Log file created at: %s\n", now.Format("2006/01/02 15:04:05")) + fmt.Fprintf(&buf, "Running on machine: %s\n", host) + fmt.Fprintf(&buf, "Binary: Built with %s %s for %s/%s\n", runtime.Compiler, runtime.Version(), runtime.GOOS, runtime.GOARCH) + fmt.Fprintf(&buf, "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg\n") + n, err := sb.file.Write(buf.Bytes()) + sb.nbytes += uint64(n) + return err +} + +// bufferSize sizes the buffer associated with each log file. It's large +// so that log records can accumulate without the logging thread blocking +// on disk I/O. The flushDaemon will block instead. +const bufferSize = 256 * 1024 + +// createFiles creates all the log files for severity from sev down to infoLog. +// l.mu is held. +func (l *loggingT) createFiles(sev severity) error { + now := time.Now() + // Files are created in decreasing severity order, so as soon as we find one + // has already been created, we can stop. + for s := sev; s >= infoLog && l.file[s] == nil; s-- { + sb := &syncBuffer{ + logger: l, + sev: s, + maxbytes: CalculateMaxSize(), + } + if err := sb.rotateFile(now, true); err != nil { + return err + } + l.file[s] = sb + } + return nil +} + +const flushInterval = 5 * time.Second + +// flushDaemon periodically flushes the log file buffers. +func (l *loggingT) flushDaemon() { + for range time.NewTicker(flushInterval).C { + l.lockAndFlushAll() + } +} + +// lockAndFlushAll is like flushAll but locks l.mu first. +func (l *loggingT) lockAndFlushAll() { + l.mu.Lock() + l.flushAll() + l.mu.Unlock() +} + +// flushAll flushes all the logs and attempts to "sync" their data to disk. +// l.mu is held. +func (l *loggingT) flushAll() { + // Flush from fatal down, in case there's trouble flushing. + for s := fatalLog; s >= infoLog; s-- { + file := l.file[s] + if file != nil { + file.Flush() // ignore error + file.Sync() // ignore error + } + } +} + +// CopyStandardLogTo arranges for messages written to the Go "log" package's +// default logs to also appear in the Google logs for the named and lower +// severities. Subsequent changes to the standard log's default output location +// or format may break this behavior. +// +// Valid names are "INFO", "WARNING", "ERROR", and "FATAL". If the name is not +// recognized, CopyStandardLogTo panics. +func CopyStandardLogTo(name string) { + sev, ok := severityByName(name) + if !ok { + panic(fmt.Sprintf("log.CopyStandardLogTo(%q): unrecognized severity name", name)) + } + // Set a log format that captures the user's file and line: + // d.go:23: message + stdLog.SetFlags(stdLog.Lshortfile) + stdLog.SetOutput(logBridge(sev)) +} + +// logBridge provides the Write method that enables CopyStandardLogTo to connect +// Go's standard logs to the logs provided by this package. +type logBridge severity + +// Write parses the standard logging line and passes its components to the +// logger for severity(lb). +func (lb logBridge) Write(b []byte) (n int, err error) { + var ( + file = "???" + line = 1 + text string + ) + // Split "d.go:23: message" into "d.go", "23", and "message". + if parts := bytes.SplitN(b, []byte{':'}, 3); len(parts) != 3 || len(parts[0]) < 1 || len(parts[2]) < 1 { + text = fmt.Sprintf("bad log format: %s", b) + } else { + file = string(parts[0]) + text = string(parts[2][1:]) // skip leading space + line, err = strconv.Atoi(string(parts[1])) + if err != nil { + text = fmt.Sprintf("bad line number: %s", b) + line = 1 + } + } + // printWithFileLine with alsoToStderr=true, so standard log messages + // always appear on standard error. + logging.printWithFileLine(severity(lb), file, line, true, text) + return len(b), nil +} + +// setV computes and remembers the V level for a given PC +// when vmodule is enabled. +// File pattern matching takes the basename of the file, stripped +// of its .go suffix, and uses filepath.Match, which is a little more +// general than the *? matching used in C++. +// l.mu is held. +func (l *loggingT) setV(pc uintptr) Level { + fn := runtime.FuncForPC(pc) + file, _ := fn.FileLine(pc) + // The file is something like /a/b/c/d.go. We want just the d. + if strings.HasSuffix(file, ".go") { + file = file[:len(file)-3] + } + if slash := strings.LastIndex(file, "/"); slash >= 0 { + file = file[slash+1:] + } + for _, filter := range l.vmodule.filter { + if filter.match(file) { + l.vmap[pc] = filter.level + return filter.level + } + } + l.vmap[pc] = 0 + return 0 +} + +// Verbose is a boolean type that implements Infof (like Printf) etc. +// See the documentation of V for more information. +type Verbose bool + +// V reports whether verbosity at the call site is at least the requested level. +// The returned value is a boolean of type Verbose, which implements Info, Infoln +// and Infof. These methods will write to the Info log if called. +// Thus, one may write either +// if klog.V(2) { klog.Info("log this") } +// or +// klog.V(2).Info("log this") +// The second form is shorter but the first is cheaper if logging is off because it does +// not evaluate its arguments. +// +// Whether an individual call to V generates a log record depends on the setting of +// the -v and --vmodule flags; both are off by default. If the level in the call to +// V is at least the value of -v, or of -vmodule for the source file containing the +// call, the V call will log. +func V(level Level) Verbose { + // This function tries hard to be cheap unless there's work to do. + // The fast path is two atomic loads and compares. + + // Here is a cheap but safe test to see if V logging is enabled globally. + if logging.verbosity.get() >= level { + return Verbose(true) + } + + // It's off globally but it vmodule may still be set. + // Here is another cheap but safe test to see if vmodule is enabled. + if atomic.LoadInt32(&logging.filterLength) > 0 { + // Now we need a proper lock to use the logging structure. The pcs field + // is shared so we must lock before accessing it. This is fairly expensive, + // but if V logging is enabled we're slow anyway. + logging.mu.Lock() + defer logging.mu.Unlock() + if runtime.Callers(2, logging.pcs[:]) == 0 { + return Verbose(false) + } + v, ok := logging.vmap[logging.pcs[0]] + if !ok { + v = logging.setV(logging.pcs[0]) + } + return Verbose(v >= level) + } + return Verbose(false) +} + +// Info is equivalent to the global Info function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Info(args ...interface{}) { + if v { + logging.print(infoLog, args...) + } +} + +// Infoln is equivalent to the global Infoln function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Infoln(args ...interface{}) { + if v { + logging.println(infoLog, args...) + } +} + +// Infof is equivalent to the global Infof function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Infof(format string, args ...interface{}) { + if v { + logging.printf(infoLog, format, args...) + } +} + +// Info logs to the INFO log. +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Info(args ...interface{}) { + logging.print(infoLog, args...) +} + +// InfoDepth acts as Info but uses depth to determine which call frame to log. +// InfoDepth(0, "msg") is the same as Info("msg"). +func InfoDepth(depth int, args ...interface{}) { + logging.printDepth(infoLog, depth, args...) +} + +// Infoln logs to the INFO log. +// Arguments are handled in the manner of fmt.Println; a newline is always appended. +func Infoln(args ...interface{}) { + logging.println(infoLog, args...) +} + +// Infof logs to the INFO log. +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Infof(format string, args ...interface{}) { + logging.printf(infoLog, format, args...) +} + +// Warning logs to the WARNING and INFO logs. +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Warning(args ...interface{}) { + logging.print(warningLog, args...) +} + +// WarningDepth acts as Warning but uses depth to determine which call frame to log. +// WarningDepth(0, "msg") is the same as Warning("msg"). +func WarningDepth(depth int, args ...interface{}) { + logging.printDepth(warningLog, depth, args...) +} + +// Warningln logs to the WARNING and INFO logs. +// Arguments are handled in the manner of fmt.Println; a newline is always appended. +func Warningln(args ...interface{}) { + logging.println(warningLog, args...) +} + +// Warningf logs to the WARNING and INFO logs. +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Warningf(format string, args ...interface{}) { + logging.printf(warningLog, format, args...) +} + +// Error logs to the ERROR, WARNING, and INFO logs. +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Error(args ...interface{}) { + logging.print(errorLog, args...) +} + +// ErrorDepth acts as Error but uses depth to determine which call frame to log. +// ErrorDepth(0, "msg") is the same as Error("msg"). +func ErrorDepth(depth int, args ...interface{}) { + logging.printDepth(errorLog, depth, args...) +} + +// Errorln logs to the ERROR, WARNING, and INFO logs. +// Arguments are handled in the manner of fmt.Println; a newline is always appended. +func Errorln(args ...interface{}) { + logging.println(errorLog, args...) +} + +// Errorf logs to the ERROR, WARNING, and INFO logs. +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Errorf(format string, args ...interface{}) { + logging.printf(errorLog, format, args...) +} + +// Fatal logs to the FATAL, ERROR, WARNING, and INFO logs, +// including a stack trace of all running goroutines, then calls os.Exit(255). +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Fatal(args ...interface{}) { + logging.print(fatalLog, args...) +} + +// FatalDepth acts as Fatal but uses depth to determine which call frame to log. +// FatalDepth(0, "msg") is the same as Fatal("msg"). +func FatalDepth(depth int, args ...interface{}) { + logging.printDepth(fatalLog, depth, args...) +} + +// Fatalln logs to the FATAL, ERROR, WARNING, and INFO logs, +// including a stack trace of all running goroutines, then calls os.Exit(255). +// Arguments are handled in the manner of fmt.Println; a newline is always appended. +func Fatalln(args ...interface{}) { + logging.println(fatalLog, args...) +} + +// Fatalf logs to the FATAL, ERROR, WARNING, and INFO logs, +// including a stack trace of all running goroutines, then calls os.Exit(255). +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Fatalf(format string, args ...interface{}) { + logging.printf(fatalLog, format, args...) +} + +// fatalNoStacks is non-zero if we are to exit without dumping goroutine stacks. +// It allows Exit and relatives to use the Fatal logs. +var fatalNoStacks uint32 + +// Exit logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). +// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. +func Exit(args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.print(fatalLog, args...) +} + +// ExitDepth acts as Exit but uses depth to determine which call frame to log. +// ExitDepth(0, "msg") is the same as Exit("msg"). +func ExitDepth(depth int, args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.printDepth(fatalLog, depth, args...) +} + +// Exitln logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). +func Exitln(args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.println(fatalLog, args...) +} + +// Exitf logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). +// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. +func Exitf(format string, args ...interface{}) { + atomic.StoreUint32(&fatalNoStacks, 1) + logging.printf(fatalLog, format, args...) +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/LICENSE consul-1.8.7+dfsg1/vendor/k8s.io/klog/LICENSE --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/LICENSE 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/OWNERS consul-1.8.7+dfsg1/vendor/k8s.io/klog/OWNERS --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/OWNERS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/OWNERS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,19 @@ +# See the OWNERS docs at https://go.k8s.io/owners +reviewers: + - jayunit100 + - hoegaarden + - andyxning + - neolit123 + - pohly + - yagonobre + - vincepri + - detiber +approvers: + - dims + - thockin + - justinsb + - tallclair + - piosz + - brancz + - DirectXMan12 + - lavalamp diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/README.md consul-1.8.7+dfsg1/vendor/k8s.io/klog/README.md --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/README.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/README.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,97 @@ +klog +==== + +klog is a permanent fork of https://github.com/golang/glog. + +## Why was klog created? + +The decision to create klog was one that wasn't made lightly, but it was necessary due to some +drawbacks that are present in [glog](https://github.com/golang/glog). Ultimately, the fork was created due to glog not being under active development; this can be seen in the glog README: + +> The code in this repo [...] is not itself under development + +This makes us unable to solve many use cases without a fork. The factors that contributed to needing feature development are listed below: + + * `glog` [presents a lot "gotchas"](https://github.com/kubernetes/kubernetes/issues/61006) and introduces challenges in containerized environments, all of which aren't well documented. + * `glog` doesn't provide an easy way to test logs, which detracts from the stability of software using it + * A long term goal is to implement a logging interface that allows us to add context, change output format, etc. + +Historical context is available here: + + * https://github.com/kubernetes/kubernetes/issues/61006 + * https://github.com/kubernetes/kubernetes/issues/70264 + * https://groups.google.com/forum/#!msg/kubernetes-sig-architecture/wCWiWf3Juzs/hXRVBH90CgAJ + * https://groups.google.com/forum/#!msg/kubernetes-dev/7vnijOMhLS0/1oRiNtigBgAJ + +---- + +How to use klog +=============== +- Replace imports for `github.com/golang/glog` with `k8s.io/klog` +- Use `klog.InitFlags(nil)` explicitly for initializing global flags as we no longer use `init()` method to register the flags +- You can now use `log-file` instead of `log-dir` for logging to a single file (See `examples/log_file/usage_log_file.go`) +- If you want to redirect everything logged using klog somewhere else (say syslog!), you can use `klog.SetOutput()` method and supply a `io.Writer`. (See `examples/set_output/usage_set_output.go`) +- For more logging conventions (See [Logging Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)) + +### Coexisting with glog +This package can be used side by side with glog. [This example](examples/coexist_glog/coexist_glog.go) shows how to initialize and syncronize flags from the global `flag.CommandLine` FlagSet. In addition, the example makes use of stderr as combined output by setting `alsologtostderr` (or `logtostderr`) to `true`. + +## Community, discussion, contribution, and support + +Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/). + +You can reach the maintainers of this project at: + +- [Slack](https://kubernetes.slack.com/messages/sig-architecture) +- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) + +### Code of conduct + +Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md). + +---- + +glog +==== + +Leveled execution logs for Go. + +This is an efficient pure Go implementation of leveled logs in the +manner of the open source C++ package + https://github.com/google/glog + +By binding methods to booleans it is possible to use the log package +without paying the expense of evaluating the arguments to the log. +Through the -vmodule flag, the package also provides fine-grained +control over logging at the file level. + +The comment from glog.go introduces the ideas: + + Package glog implements logging analogous to the Google-internal + C++ INFO/ERROR/V setup. It provides functions Info, Warning, + Error, Fatal, plus formatting variants such as Infof. It + also provides V-style logging controlled by the -v and + -vmodule=file=2 flags. + + Basic examples: + + glog.Info("Prepare to repel boarders") + + glog.Fatalf("Initialization failed: %s", err) + + See the documentation for the V function for an explanation + of these examples: + + if glog.V(2) { + glog.Info("Starting transaction...") + } + + glog.V(2).Infoln("Processed", nItems, "elements") + + +The repository contains an open source version of the log package +used inside Google. The master copy of the source lives inside +Google, not here. The code in this repo is for export only and is not itself +under development. Feature requests will be ignored. + +Send bug reports to golang-nuts@googlegroups.com. diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/RELEASE.md consul-1.8.7+dfsg1/vendor/k8s.io/klog/RELEASE.md --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/RELEASE.md 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/RELEASE.md 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +# Release Process + +The `klog` is released on an as-needed basis. The process is as follows: + +1. An issue is proposing a new release with a changelog since the last release +1. All [OWNERS](OWNERS) must LGTM this release +1. An OWNER runs `git tag -s $VERSION` and inserts the changelog and pushes the tag with `git push $VERSION` +1. The release issue is closed +1. An announcement email is sent to `kubernetes-dev@googlegroups.com` with the subject `[ANNOUNCE] kubernetes-template-project $VERSION is released` diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/SECURITY_CONTACTS consul-1.8.7+dfsg1/vendor/k8s.io/klog/SECURITY_CONTACTS --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/SECURITY_CONTACTS 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/SECURITY_CONTACTS 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,20 @@ +# Defined below are the security contacts for this repo. +# +# They are the contact point for the Product Security Committee to reach out +# to for triaging and handling of incoming issues. +# +# The below names agree to abide by the +# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy) +# and will be removed and replaced if they violate that agreement. +# +# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE +# INSTRUCTIONS AT https://kubernetes.io/security/ + +dims +thockin +justinsb +tallclair +piosz +brancz +DirectXMan12 +lavalamp diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/klog/.travis.yml consul-1.8.7+dfsg1/vendor/k8s.io/klog/.travis.yml --- consul-1.7.4+dfsg1/vendor/k8s.io/klog/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/klog/.travis.yml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,16 @@ +language: go +go_import_path: k8s.io/klog +dist: xenial +go: + - 1.9.x + - 1.10.x + - 1.11.x + - 1.12.x +script: + - go get -t -v ./... + - diff -u <(echo -n) <(gofmt -d .) + - diff -u <(echo -n) <(golint $(go list -e ./...)) + - go tool vet . || go vet . + - go test -v -race ./... +install: + - go get golang.org/x/lint/golint diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/utils/integer/integer.go consul-1.8.7+dfsg1/vendor/k8s.io/utils/integer/integer.go --- consul-1.7.4+dfsg1/vendor/k8s.io/utils/integer/integer.go 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/utils/integer/integer.go 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,73 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integer + +// IntMax returns the maximum of the params +func IntMax(a, b int) int { + if b > a { + return b + } + return a +} + +// IntMin returns the minimum of the params +func IntMin(a, b int) int { + if b < a { + return b + } + return a +} + +// Int32Max returns the maximum of the params +func Int32Max(a, b int32) int32 { + if b > a { + return b + } + return a +} + +// Int32Min returns the minimum of the params +func Int32Min(a, b int32) int32 { + if b < a { + return b + } + return a +} + +// Int64Max returns the maximum of the params +func Int64Max(a, b int64) int64 { + if b > a { + return b + } + return a +} + +// Int64Min returns the minimum of the params +func Int64Min(a, b int64) int64 { + if b < a { + return b + } + return a +} + +// RoundToInt32 rounds floats into integer numbers. +func RoundToInt32(a float64) int32 { + if a < 0 { + return int32(a - 0.5) + } + return int32(a + 0.5) +} diff -Nru consul-1.7.4+dfsg1/vendor/k8s.io/utils/LICENSE consul-1.8.7+dfsg1/vendor/k8s.io/utils/LICENSE --- consul-1.7.4+dfsg1/vendor/k8s.io/utils/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/k8s.io/utils/LICENSE 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff -Nru consul-1.7.4+dfsg1/vendor/modules.txt consul-1.8.7+dfsg1/vendor/modules.txt --- consul-1.7.4+dfsg1/vendor/modules.txt 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/vendor/modules.txt 2020-12-10 21:46:52.000000000 +0000 @@ -1,19 +1,28 @@ -# cloud.google.com/go v0.26.0 +# cloud.google.com/go v0.38.0 cloud.google.com/go/compute/metadata -# github.com/Azure/azure-sdk-for-go v16.0.0+incompatible +# github.com/Azure/azure-sdk-for-go v40.3.0+incompatible github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network github.com/Azure/azure-sdk-for-go/version -# github.com/Azure/go-autorest v10.15.3+incompatible +# github.com/Azure/go-autorest/autorest v0.10.0 github.com/Azure/go-autorest/autorest -github.com/Azure/go-autorest/autorest/adal github.com/Azure/go-autorest/autorest/azure +# github.com/Azure/go-autorest/autorest/adal v0.8.2 +github.com/Azure/go-autorest/autorest/adal +# github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 github.com/Azure/go-autorest/autorest/azure/auth +# github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 +github.com/Azure/go-autorest/autorest/azure/cli +# github.com/Azure/go-autorest/autorest/date v0.2.0 github.com/Azure/go-autorest/autorest/date +# github.com/Azure/go-autorest/autorest/to v0.3.0 github.com/Azure/go-autorest/autorest/to +# github.com/Azure/go-autorest/autorest/validation v0.2.0 github.com/Azure/go-autorest/autorest/validation +# github.com/Azure/go-autorest/logger v0.1.0 github.com/Azure/go-autorest/logger -github.com/Azure/go-autorest/version -# github.com/DataDog/datadog-go v2.2.0+incompatible +# github.com/Azure/go-autorest/tracing v0.5.0 +github.com/Azure/go-autorest/tracing +# github.com/DataDog/datadog-go v3.2.0+incompatible github.com/DataDog/datadog-go/statsd # github.com/Microsoft/go-winio v0.4.3 github.com/Microsoft/go-winio @@ -23,7 +32,7 @@ github.com/StackExchange/wmi # github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e github.com/armon/circbuf -# github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 +# github.com/armon/go-metrics v0.3.4 github.com/armon/go-metrics github.com/armon/go-metrics/circonus github.com/armon/go-metrics/datadog @@ -67,12 +76,17 @@ github.com/aws/aws-sdk-go/service/ec2 github.com/aws/aws-sdk-go/service/sts github.com/aws/aws-sdk-go/service/sts/stsiface -# github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 +# github.com/beorn7/perks v1.0.1 github.com/beorn7/perks/quantile # github.com/bgentry/speakeasy v0.1.0 github.com/bgentry/speakeasy # github.com/boltdb/bolt v1.3.1 github.com/boltdb/bolt +# github.com/census-instrumentation/opencensus-proto v0.2.1 +github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1 +github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1 +# github.com/cespare/xxhash/v2 v2.1.1 +github.com/cespare/xxhash/v2 # github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible github.com/circonus-labs/circonus-gometrics github.com/circonus-labs/circonus-gometrics/api @@ -80,8 +94,12 @@ github.com/circonus-labs/circonus-gometrics/checkmgr # github.com/circonus-labs/circonusllhist v0.1.3 github.com/circonus-labs/circonusllhist +# github.com/cncf/udpa/go v0.0.0-20200313221541-5f7e5dd04533 +github.com/cncf/udpa/go/udpa/annotations # github.com/coredns/coredns v1.1.2 github.com/coredns/coredns/plugin/pkg/dnsutil +# github.com/coreos/go-oidc v2.1.0+incompatible +github.com/coreos/go-oidc # github.com/davecgh/go-spew v1.1.1 github.com/davecgh/go-spew/spew # github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661 @@ -98,7 +116,8 @@ github.com/docker/go-connections/sockets # github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0 github.com/elazarl/go-bindata-assetfs -# github.com/envoyproxy/go-control-plane v0.8.0 +# github.com/envoyproxy/go-control-plane v0.9.5 +github.com/envoyproxy/go-control-plane/envoy/annotations github.com/envoyproxy/go-control-plane/envoy/api/v2 github.com/envoyproxy/go-control-plane/envoy/api/v2/auth github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster @@ -110,52 +129,58 @@ github.com/envoyproxy/go-control-plane/envoy/config/filter/network/ext_authz/v2 github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2 github.com/envoyproxy/go-control-plane/envoy/config/filter/network/tcp_proxy/v2 +github.com/envoyproxy/go-control-plane/envoy/config/listener/v2 +github.com/envoyproxy/go-control-plane/envoy/config/trace/v2 github.com/envoyproxy/go-control-plane/envoy/service/auth/v2 github.com/envoyproxy/go-control-plane/envoy/service/auth/v2alpha github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2 github.com/envoyproxy/go-control-plane/envoy/type -github.com/envoyproxy/go-control-plane/pkg/util -# github.com/envoyproxy/protoc-gen-validate v0.0.14 +github.com/envoyproxy/go-control-plane/envoy/type/matcher +github.com/envoyproxy/go-control-plane/envoy/type/metadata/v2 +github.com/envoyproxy/go-control-plane/envoy/type/tracing/v2 +github.com/envoyproxy/go-control-plane/pkg/conversion +github.com/envoyproxy/go-control-plane/pkg/wellknown +# github.com/envoyproxy/protoc-gen-validate v0.1.0 github.com/envoyproxy/protoc-gen-validate/validate # github.com/fatih/color v1.9.0 github.com/fatih/color -# github.com/ghodss/yaml v1.0.0 -github.com/ghodss/yaml # github.com/go-ole/go-ole v1.2.1 github.com/go-ole/go-ole github.com/go-ole/go-ole/oleutil -# github.com/gogo/googleapis v1.1.0 -github.com/gogo/googleapis/google/api -github.com/gogo/googleapis/google/rpc -# github.com/gogo/protobuf v1.2.1 +# github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d github.com/gogo/protobuf/gogoproto -github.com/gogo/protobuf/jsonpb github.com/gogo/protobuf/proto github.com/gogo/protobuf/protoc-gen-gogo/descriptor github.com/gogo/protobuf/sortkeys github.com/gogo/protobuf/types -# github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b -github.com/golang/glog -# github.com/golang/protobuf v1.3.1 +# github.com/golang/protobuf v1.3.2 +github.com/golang/protobuf/jsonpb github.com/golang/protobuf/proto github.com/golang/protobuf/protoc-gen-go/descriptor github.com/golang/protobuf/ptypes github.com/golang/protobuf/ptypes/any github.com/golang/protobuf/ptypes/duration +github.com/golang/protobuf/ptypes/empty +github.com/golang/protobuf/ptypes/struct github.com/golang/protobuf/ptypes/timestamp +github.com/golang/protobuf/ptypes/wrappers # github.com/golang/snappy v0.0.1 github.com/golang/snappy -# github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c +# github.com/google/btree v1.0.0 github.com/google/btree -# github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 +# github.com/google/go-querystring v1.0.0 github.com/google/go-querystring/query -# github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf +# github.com/google/gofuzz v1.0.0 github.com/google/gofuzz +# github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2 +github.com/google/tcpproxy +# github.com/googleapis/gax-go/v2 v2.0.5 +github.com/googleapis/gax-go/v2 # github.com/googleapis/gnostic v0.2.0 github.com/googleapis/gnostic/OpenAPIv2 github.com/googleapis/gnostic/compiler github.com/googleapis/gnostic/extensions -# github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca +# github.com/gophercloud/gophercloud v0.1.0 github.com/gophercloud/gophercloud github.com/gophercloud/gophercloud/openstack github.com/gophercloud/gophercloud/openstack/compute/v2/flavors @@ -166,9 +191,6 @@ github.com/gophercloud/gophercloud/openstack/identity/v3/tokens github.com/gophercloud/gophercloud/openstack/utils github.com/gophercloud/gophercloud/pagination -# github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 -github.com/gregjones/httpcache -github.com/gregjones/httpcache/diskcache # github.com/hashicorp/errwrap v1.0.0 github.com/hashicorp/errwrap # github.com/hashicorp/go-bexpr v0.1.2 @@ -179,7 +201,7 @@ github.com/hashicorp/go-cleanhttp # github.com/hashicorp/go-connlimit v0.2.0 github.com/hashicorp/go-connlimit -# github.com/hashicorp/go-discover v0.0.0-20191202160150-7ec2cfbda7a2 +# github.com/hashicorp/go-discover v0.0.0-20200501174627-ad1e96bde088 github.com/hashicorp/go-discover github.com/hashicorp/go-discover/provider/aliyun github.com/hashicorp/go-discover/provider/aws @@ -198,7 +220,7 @@ github.com/hashicorp/go-discover/provider/vsphere # github.com/hashicorp/go-hclog v0.12.0 github.com/hashicorp/go-hclog -# github.com/hashicorp/go-immutable-radix v1.1.0 +# github.com/hashicorp/go-immutable-radix v1.2.0 github.com/hashicorp/go-immutable-radix # github.com/hashicorp/go-memdb v1.0.3 github.com/hashicorp/go-memdb @@ -209,7 +231,7 @@ # github.com/hashicorp/go-raftchunking v0.6.1 github.com/hashicorp/go-raftchunking github.com/hashicorp/go-raftchunking/types -# github.com/hashicorp/go-retryablehttp v0.5.4 +# github.com/hashicorp/go-retryablehttp v0.6.7 github.com/hashicorp/go-retryablehttp # github.com/hashicorp/go-rootcerts v1.0.2 github.com/hashicorp/go-rootcerts @@ -218,11 +240,11 @@ github.com/hashicorp/go-sockaddr/template # github.com/hashicorp/go-syslog v1.0.0 github.com/hashicorp/go-syslog -# github.com/hashicorp/go-uuid v1.0.1 +# github.com/hashicorp/go-uuid v1.0.2 github.com/hashicorp/go-uuid -# github.com/hashicorp/go-version v1.1.0 +# github.com/hashicorp/go-version v1.2.0 github.com/hashicorp/go-version -# github.com/hashicorp/golang-lru v0.5.1 +# github.com/hashicorp/golang-lru v0.5.4 github.com/hashicorp/golang-lru github.com/hashicorp/golang-lru/simplelru # github.com/hashicorp/hcl v1.0.0 @@ -249,12 +271,12 @@ github.com/hashicorp/raft # github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea github.com/hashicorp/raft-boltdb -# github.com/hashicorp/serf v0.9.2 +# github.com/hashicorp/serf v0.9.4 github.com/hashicorp/serf/coordinate github.com/hashicorp/serf/serf -# github.com/hashicorp/vault/api v1.0.4 +# github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086 github.com/hashicorp/vault/api -# github.com/hashicorp/vault/sdk v0.1.13 +# github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 github.com/hashicorp/vault/sdk/helper/compressutil github.com/hashicorp/vault/sdk/helper/consts github.com/hashicorp/vault/sdk/helper/hclutil @@ -269,14 +291,16 @@ github.com/imdario/mergo # github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af github.com/jmespath/go-jmespath -# github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62 +# github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f github.com/joyent/triton-go github.com/joyent/triton-go/authentication github.com/joyent/triton-go/client github.com/joyent/triton-go/compute github.com/joyent/triton-go/errors -# github.com/json-iterator/go v1.1.5 +# github.com/json-iterator/go v1.1.9 github.com/json-iterator/go +# github.com/konsorten/go-windows-terminal-sequences v1.0.2 +github.com/konsorten/go-windows-terminal-sequences # github.com/kr/text v0.1.0 github.com/kr/text # github.com/linode/linodego v0.7.1 @@ -295,12 +319,14 @@ github.com/mitchellh/copystructure # github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-homedir -# github.com/mitchellh/go-testing-interface v1.0.3 +# github.com/mitchellh/go-testing-interface v1.14.0 github.com/mitchellh/go-testing-interface # github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452 github.com/mitchellh/hashstructure -# github.com/mitchellh/mapstructure v1.2.3 +# github.com/mitchellh/mapstructure v1.3.3 github.com/mitchellh/mapstructure +# github.com/mitchellh/pointerstructure v1.0.0 +github.com/mitchellh/pointerstructure # github.com/mitchellh/reflectwalk v1.0.1 github.com/mitchellh/reflectwalk # github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd @@ -313,9 +339,9 @@ github.com/packethost/packngo # github.com/pascaldekloe/goe v0.1.0 github.com/pascaldekloe/goe/verify -# github.com/peterbourgon/diskv v2.0.1+incompatible -github.com/peterbourgon/diskv -# github.com/pierrec/lz4 v2.0.5+incompatible +# github.com/patrickmn/go-cache v2.1.0+incompatible +github.com/patrickmn/go-cache +# github.com/pierrec/lz4 v2.5.2+incompatible github.com/pierrec/lz4 github.com/pierrec/lz4/internal/xxh32 # github.com/pkg/errors v0.8.1 @@ -326,21 +352,24 @@ github.com/posener/complete github.com/posener/complete/cmd github.com/posener/complete/cmd/install -# github.com/prometheus/client_golang v0.9.2 +# github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 +github.com/pquerna/cachecontrol +github.com/pquerna/cachecontrol/cacheobject +# github.com/prometheus/client_golang v1.4.0 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/internal github.com/prometheus/client_golang/prometheus/promhttp -# github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 +github.com/prometheus/client_golang/prometheus/push +# github.com/prometheus/client_model v0.2.0 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 +# github.com/prometheus/common v0.9.1 github.com/prometheus/common/expfmt github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg github.com/prometheus/common/model -# github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a +# github.com/prometheus/procfs v0.0.8 github.com/prometheus/procfs +github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -github.com/prometheus/procfs/nfs -github.com/prometheus/procfs/xfs # github.com/rboyer/safeio v0.2.1 github.com/rboyer/safeio # github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 @@ -351,7 +380,7 @@ github.com/ryanuber/go-glob # github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 github.com/sean-/seed -# github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880 +# github.com/shirou/gopsutil v2.20.9+incompatible github.com/shirou/gopsutil/cpu github.com/shirou/gopsutil/disk github.com/shirou/gopsutil/host @@ -359,9 +388,7 @@ github.com/shirou/gopsutil/mem github.com/shirou/gopsutil/net github.com/shirou/gopsutil/process -# github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 -github.com/shirou/w32 -# github.com/sirupsen/logrus v1.0.6 +# github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus # github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d github.com/softlayer/softlayer-go/config @@ -370,11 +397,11 @@ github.com/softlayer/softlayer-go/services github.com/softlayer/softlayer-go/session github.com/softlayer/softlayer-go/sl -# github.com/spf13/pflag v1.0.3 +# github.com/spf13/pflag v1.0.5 github.com/spf13/pflag # github.com/stretchr/objx v0.1.1 github.com/stretchr/objx -# github.com/stretchr/testify v1.4.0 +# github.com/stretchr/testify v1.5.1 github.com/stretchr/testify/assert github.com/stretchr/testify/mock github.com/stretchr/testify/require @@ -403,12 +430,33 @@ github.com/vmware/govmomi/vim25/soap github.com/vmware/govmomi/vim25/types github.com/vmware/govmomi/vim25/xml -# golang.org/x/crypto v0.0.0-20191106202628-ed6320f186d4 +# go.opencensus.io v0.22.0 +go.opencensus.io +go.opencensus.io/internal +go.opencensus.io/internal/tagencoding +go.opencensus.io/metric/metricdata +go.opencensus.io/metric/metricproducer +go.opencensus.io/plugin/ochttp +go.opencensus.io/plugin/ochttp/propagation/b3 +go.opencensus.io/resource +go.opencensus.io/stats +go.opencensus.io/stats/internal +go.opencensus.io/stats/view +go.opencensus.io/tag +go.opencensus.io/trace +go.opencensus.io/trace/internal +go.opencensus.io/trace/propagation +go.opencensus.io/trace/tracestate +# go.uber.org/goleak v1.0.0 +go.uber.org/goleak +go.uber.org/goleak/internal/stack +# golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a golang.org/x/crypto/blake2b +golang.org/x/crypto/blowfish +golang.org/x/crypto/chacha20 golang.org/x/crypto/curve25519 golang.org/x/crypto/ed25519 golang.org/x/crypto/ed25519/internal/edwards25519 -golang.org/x/crypto/internal/chacha20 golang.org/x/crypto/internal/subtle golang.org/x/crypto/pbkdf2 golang.org/x/crypto/pkcs12 @@ -416,8 +464,12 @@ golang.org/x/crypto/poly1305 golang.org/x/crypto/ssh golang.org/x/crypto/ssh/agent +golang.org/x/crypto/ssh/internal/bcrypt_pbkdf golang.org/x/crypto/ssh/terminal -# golang.org/x/net v0.0.0-20190923162816-aa69164e4478 +# golang.org/x/lint v0.0.0-20190930215403-16217165b5de +golang.org/x/lint +golang.org/x/lint/golint +# golang.org/x/net v0.0.0-20200904194848-62affa334b73 golang.org/x/net/bpf golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -434,21 +486,22 @@ golang.org/x/net/proxy golang.org/x/net/publicsuffix golang.org/x/net/trace -# golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be +# golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/oauth2 golang.org/x/oauth2/google golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.0.0-20190423024810-112230192c58 +# golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a golang.org/x/sync/errgroup golang.org/x/sync/singleflight -# golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae +# golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf golang.org/x/sys/cpu +golang.org/x/sys/internal/unsafeheader golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/svc -# golang.org/x/text v0.3.2 +# golang.org/x/text v0.3.3 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/internal @@ -457,14 +510,23 @@ golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 +# golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e golang.org/x/time/rate -# google.golang.org/api v0.0.0-20180829000535-087779f1d2c9 +# golang.org/x/tools v0.0.0-20200513154647-78b527d18275 +golang.org/x/tools/go/ast/astutil +golang.org/x/tools/go/gcexportdata +golang.org/x/tools/go/internal/gcimporter +# google.golang.org/api v0.9.0 google.golang.org/api/compute/v1 google.golang.org/api/gensupport google.golang.org/api/googleapi google.golang.org/api/googleapi/internal/uritemplates -# google.golang.org/appengine v1.4.0 +google.golang.org/api/googleapi/transport +google.golang.org/api/internal +google.golang.org/api/option +google.golang.org/api/transport/http +google.golang.org/api/transport/http/internal/propagation +# google.golang.org/appengine v1.6.0 google.golang.org/appengine google.golang.org/appengine/internal google.golang.org/appengine/internal/app_identity @@ -475,10 +537,12 @@ google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107 +# google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 +google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.23.0 +# google.golang.org/grpc v1.25.1 google.golang.org/grpc +google.golang.org/grpc/backoff google.golang.org/grpc/balancer google.golang.org/grpc/balancer/base google.golang.org/grpc/balancer/roundrobin @@ -496,10 +560,13 @@ google.golang.org/grpc/internal/backoff google.golang.org/grpc/internal/balancerload google.golang.org/grpc/internal/binarylog +google.golang.org/grpc/internal/buffer google.golang.org/grpc/internal/channelz google.golang.org/grpc/internal/envconfig google.golang.org/grpc/internal/grpcrand google.golang.org/grpc/internal/grpcsync +google.golang.org/grpc/internal/resolver/dns +google.golang.org/grpc/internal/resolver/passthrough google.golang.org/grpc/internal/syscall google.golang.org/grpc/internal/transport google.golang.org/grpc/keepalive @@ -507,8 +574,6 @@ google.golang.org/grpc/naming google.golang.org/grpc/peer google.golang.org/grpc/resolver -google.golang.org/grpc/resolver/dns -google.golang.org/grpc/resolver/passthrough google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status @@ -517,50 +582,58 @@ gopkg.in/inf.v0 # gopkg.in/resty.v1 v1.12.0 gopkg.in/resty.v1 -# gopkg.in/square/go-jose.v2 v2.3.1 +# gopkg.in/square/go-jose.v2 v2.5.1 gopkg.in/square/go-jose.v2 gopkg.in/square/go-jose.v2/cipher gopkg.in/square/go-jose.v2/json gopkg.in/square/go-jose.v2/jwt # gopkg.in/yaml.v2 v2.2.8 gopkg.in/yaml.v2 -# k8s.io/api v0.0.0-20190325185214-7544f9db76f6 -k8s.io/api/admissionregistration/v1alpha1 +# k8s.io/api v0.16.9 +k8s.io/api/admissionregistration/v1 k8s.io/api/admissionregistration/v1beta1 k8s.io/api/apps/v1 k8s.io/api/apps/v1beta1 k8s.io/api/apps/v1beta2 +k8s.io/api/auditregistration/v1alpha1 k8s.io/api/authentication/v1 k8s.io/api/authentication/v1beta1 k8s.io/api/authorization/v1 k8s.io/api/authorization/v1beta1 k8s.io/api/autoscaling/v1 k8s.io/api/autoscaling/v2beta1 +k8s.io/api/autoscaling/v2beta2 k8s.io/api/batch/v1 k8s.io/api/batch/v1beta1 k8s.io/api/batch/v2alpha1 k8s.io/api/certificates/v1beta1 +k8s.io/api/coordination/v1 +k8s.io/api/coordination/v1beta1 k8s.io/api/core/v1 +k8s.io/api/discovery/v1alpha1 k8s.io/api/events/v1beta1 k8s.io/api/extensions/v1beta1 k8s.io/api/networking/v1 +k8s.io/api/networking/v1beta1 +k8s.io/api/node/v1alpha1 +k8s.io/api/node/v1beta1 k8s.io/api/policy/v1beta1 k8s.io/api/rbac/v1 k8s.io/api/rbac/v1alpha1 k8s.io/api/rbac/v1beta1 +k8s.io/api/scheduling/v1 k8s.io/api/scheduling/v1alpha1 k8s.io/api/scheduling/v1beta1 k8s.io/api/settings/v1alpha1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apimachinery v0.0.0-20190223001710-c182ff3b9841 +# k8s.io/apimachinery v0.16.9 k8s.io/apimachinery/pkg/api/errors k8s.io/apimachinery/pkg/api/meta k8s.io/apimachinery/pkg/api/resource k8s.io/apimachinery/pkg/apis/meta/v1 k8s.io/apimachinery/pkg/apis/meta/v1/unstructured -k8s.io/apimachinery/pkg/apis/meta/v1beta1 k8s.io/apimachinery/pkg/conversion k8s.io/apimachinery/pkg/conversion/queryparams k8s.io/apimachinery/pkg/fields @@ -580,43 +653,52 @@ k8s.io/apimachinery/pkg/util/framer k8s.io/apimachinery/pkg/util/intstr k8s.io/apimachinery/pkg/util/json +k8s.io/apimachinery/pkg/util/naming k8s.io/apimachinery/pkg/util/net k8s.io/apimachinery/pkg/util/runtime k8s.io/apimachinery/pkg/util/sets k8s.io/apimachinery/pkg/util/validation k8s.io/apimachinery/pkg/util/validation/field -k8s.io/apimachinery/pkg/util/wait k8s.io/apimachinery/pkg/util/yaml k8s.io/apimachinery/pkg/version k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/client-go v8.0.0+incompatible +# k8s.io/client-go v0.16.9 k8s.io/client-go/discovery k8s.io/client-go/kubernetes k8s.io/client-go/kubernetes/scheme -k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1 +k8s.io/client-go/kubernetes/typed/admissionregistration/v1 k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1 k8s.io/client-go/kubernetes/typed/apps/v1 k8s.io/client-go/kubernetes/typed/apps/v1beta1 k8s.io/client-go/kubernetes/typed/apps/v1beta2 +k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1 k8s.io/client-go/kubernetes/typed/authentication/v1 k8s.io/client-go/kubernetes/typed/authentication/v1beta1 k8s.io/client-go/kubernetes/typed/authorization/v1 k8s.io/client-go/kubernetes/typed/authorization/v1beta1 k8s.io/client-go/kubernetes/typed/autoscaling/v1 k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1 +k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2 k8s.io/client-go/kubernetes/typed/batch/v1 k8s.io/client-go/kubernetes/typed/batch/v1beta1 k8s.io/client-go/kubernetes/typed/batch/v2alpha1 k8s.io/client-go/kubernetes/typed/certificates/v1beta1 +k8s.io/client-go/kubernetes/typed/coordination/v1 +k8s.io/client-go/kubernetes/typed/coordination/v1beta1 k8s.io/client-go/kubernetes/typed/core/v1 +k8s.io/client-go/kubernetes/typed/discovery/v1alpha1 k8s.io/client-go/kubernetes/typed/events/v1beta1 k8s.io/client-go/kubernetes/typed/extensions/v1beta1 k8s.io/client-go/kubernetes/typed/networking/v1 +k8s.io/client-go/kubernetes/typed/networking/v1beta1 +k8s.io/client-go/kubernetes/typed/node/v1alpha1 +k8s.io/client-go/kubernetes/typed/node/v1beta1 k8s.io/client-go/kubernetes/typed/policy/v1beta1 k8s.io/client-go/kubernetes/typed/rbac/v1 k8s.io/client-go/kubernetes/typed/rbac/v1alpha1 k8s.io/client-go/kubernetes/typed/rbac/v1beta1 +k8s.io/client-go/kubernetes/typed/scheduling/v1 k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1 k8s.io/client-go/kubernetes/typed/scheduling/v1beta1 k8s.io/client-go/kubernetes/typed/settings/v1alpha1 @@ -648,5 +730,11 @@ k8s.io/client-go/util/connrotation k8s.io/client-go/util/flowcontrol k8s.io/client-go/util/homedir -k8s.io/client-go/util/integer k8s.io/client-go/util/jsonpath +k8s.io/client-go/util/keyutil +# k8s.io/klog v1.0.0 +k8s.io/klog +# k8s.io/utils v0.0.0-20190801114015-581e00157fb1 +k8s.io/utils/integer +# sigs.k8s.io/yaml v1.1.0 +sigs.k8s.io/yaml diff -Nru consul-1.7.4+dfsg1/version/version.go consul-1.8.7+dfsg1/version/version.go --- consul-1.7.4+dfsg1/version/version.go 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/version/version.go 2020-12-10 21:46:52.000000000 +0000 @@ -8,14 +8,13 @@ var ( // The git commit that was compiled. These will be filled in by the // compiler. - GitCommit string - GitDescribe string + GitCommit string // The main version number that is being run at the moment. // // Version must conform to the format expected by github.com/hashicorp/go-version // for tests to work. - Version = "1.7.4" + Version = "1.8.7" // A pre-release marker for the version. If this is "" (empty string) // then it means that it is a final release. Otherwise, this is a pre-release @@ -27,23 +26,13 @@ // for displaying to humans. func GetHumanVersion() string { version := Version - if GitDescribe != "" { - version = GitDescribe - } - release := VersionPrerelease - if GitDescribe == "" && release == "" { - release = "dev" - } if release != "" { if !strings.HasSuffix(version, "-"+release) { // if we tagged a prerelease version then the release is in the version already version += fmt.Sprintf("-%s", release) } - if GitCommit != "" { - version += fmt.Sprintf(" (%s)", GitCommit) - } } // Strip off any single quotes added by the git information. diff -Nru consul-1.7.4+dfsg1/website/babel.config.js consul-1.8.7+dfsg1/website/babel.config.js --- consul-1.7.4+dfsg1/website/babel.config.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/babel.config.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +module.exports = { + presets: ['next/babel'], + plugins: ['import-glob-array'], +} diff -Nru consul-1.7.4+dfsg1/website/components/basic-hero/img/right-arrow-icon.svg consul-1.8.7+dfsg1/website/components/basic-hero/img/right-arrow-icon.svg --- consul-1.7.4+dfsg1/website/components/basic-hero/img/right-arrow-icon.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/basic-hero/img/right-arrow-icon.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru consul-1.7.4+dfsg1/website/components/basic-hero/index.jsx consul-1.8.7+dfsg1/website/components/basic-hero/index.jsx --- consul-1.7.4+dfsg1/website/components/basic-hero/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/basic-hero/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,59 @@ +import Button from '@hashicorp/react-button' +import InlineSvg from '@hashicorp/react-inline-svg' +import RightArrowIcon from './img/right-arrow-icon.svg?include' + +export default function BasicHero({ + heading, + content, + links, + brand, + backgroundImage, +}) { + return ( +
    +
    +

    {heading}

    + {content &&

    {content}

    } + {links && links.length > 0 && ( + <> +
    + {links.slice(0, 2).map((link, stableIdx) => { + const buttonVariant = stableIdx === 0 ? 'primary' : 'secondary' + const linkType = link.type || 'inbound' + + return ( +
    + {links[2] && ( + + )} + + )} +
    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/basic-hero/style.css consul-1.8.7+dfsg1/website/components/basic-hero/style.css --- consul-1.7.4+dfsg1/website/components/basic-hero/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/basic-hero/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,81 @@ +.g-basic-hero { + padding: 88px 0; + + & .g-type-display-1 { + color: var(--gray-1); + text-align: center; + margin-left: auto; + margin-right: auto; + margin-top: 0; + max-width: 14em; + } + + & .g-type-body-large { + color: var(--gray-3); + margin: 0 auto 0 auto; + text-align: center; + max-width: 40em; + } + + & .links { + display: flex; + flex-wrap: wrap; + justify-content: center; + + /* + * Margins here compensate for extra 8px margin on buttons + * which are needed to center and space properly regardless of whether + * buttons are wrapping to multiple lines or not. + */ + margin-top: calc(32px - 8px); + margin-bottom: -8px; + @media (--large) { + margin-top: calc(40px - 8px); + } + + & .g-btn { + /* + * This ensures 16px between buttons at all times, while maintaining proper centering + * when buttons wrap to multiple lines. + * There will be an extra 8px space on all sides of the button group. + * The top and bottom are accounted for by the -8px adjustment on `.action` margins. + * The left and right excess is left as is - it's needed for proper centering when wrapping. + */ + margin: 8px; + } + } + + & .third-link { + display: flex; + justify-content: center; + margin-top: 32px; + + & a { + display: flex; + align-items: center; + color: var(--gray-4); + + & .icon { + margin-left: 8px; + height: 24px; + } + } + } + + &.has-background { + background-repeat: no-repeat; + background-color: var(--gray-7); + background-image: url(/img/hero/pattern-desktop.svg); + width: 100%; + background-size: cover; + background-position: center; + + @media (max-width: 800px) { + background-image: url(/img/hero/pattern-mobile.svg); + } + + & .g-btn { + background: var(--gray-7); + } + } +} diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/case-study-slide.jsx consul-1.8.7+dfsg1/website/components/case-study-carousel/case-study-slide.jsx --- consul-1.7.4+dfsg1/website/components/case-study-carousel/case-study-slide.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/case-study-slide.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,44 @@ +import InlineSvg from '@hashicorp/react-inline-svg' +import Image from '@hashicorp/react-image' +import Button from '@hashicorp/react-button' +import QuoteMarksIcon from './img/quote.svg?include' + +export default function CaseStudySlide({ + caseStudy: { person, quote, company, caseStudyURL }, +}) { + return ( +
    + +

    {quote}

    +
    +
    + {`${person.firstName} +
    +
    + {person.firstName} {person.lastName} +
    +

    + {person.title}, {company.name} +

    +
    +
    + {company.name} +
    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/img/active-control-dot.svg consul-1.8.7+dfsg1/website/components/case-study-carousel/img/active-control-dot.svg --- consul-1.7.4+dfsg1/website/components/case-study-carousel/img/active-control-dot.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/img/active-control-dot.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/img/inactive-control-dot.svg consul-1.8.7+dfsg1/website/components/case-study-carousel/img/inactive-control-dot.svg --- consul-1.7.4+dfsg1/website/components/case-study-carousel/img/inactive-control-dot.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/img/inactive-control-dot.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/img/left-arrow-control.svg consul-1.8.7+dfsg1/website/components/case-study-carousel/img/left-arrow-control.svg --- consul-1.7.4+dfsg1/website/components/case-study-carousel/img/left-arrow-control.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/img/left-arrow-control.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/img/quote.svg consul-1.8.7+dfsg1/website/components/case-study-carousel/img/quote.svg --- consul-1.7.4+dfsg1/website/components/case-study-carousel/img/quote.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/img/quote.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/img/right-arrow-control.svg consul-1.8.7+dfsg1/website/components/case-study-carousel/img/right-arrow-control.svg --- consul-1.7.4+dfsg1/website/components/case-study-carousel/img/right-arrow-control.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/img/right-arrow-control.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/index.jsx consul-1.8.7+dfsg1/website/components/case-study-carousel/index.jsx --- consul-1.7.4+dfsg1/website/components/case-study-carousel/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,99 @@ +import { useState } from 'react' +import { isIE } from 'react-device-detect' + +import Carousel from 'nuka-carousel' +import CaseSlide from './case-study-slide' +import Image from '@hashicorp/react-image' +import InlineSvg from '@hashicorp/react-inline-svg' +import ActiveControlDot from './img/active-control-dot.svg?include' +import InactiveControlDot from './img/inactive-control-dot.svg?include' +import LeftArrow from './img/left-arrow-control.svg?include' +import RightArrow from './img/right-arrow-control.svg?include' + +export default function CaseStudyCarousel({ + caseStudies, + title, + logoSection = { grayBackground: false, featuredLogos: [] }, +}) { + const [slideIndex, setSlideIndex] = useState(0) + const { grayBackground, featuredLogos } = logoSection + + const caseStudySlides = caseStudies.map((caseStudy) => ( + + )) + const logoRows = featuredLogos && Math.ceil(featuredLogos.length / 3) + + function renderControls() { + return ( +
    + {caseStudies.map((caseStudy, stableIdx) => { + return ( + + ) + })} +
    + ) + } + + function sideControls(icon, direction) { + return ( + + ) + } + + return ( +
    +

    {title}

    + {!isIE ? ( + renderControls()} + renderCenterLeftControls={({ previousSlide }) => { + return sideControls(LeftArrow, previousSlide) + }} + renderCenterRightControls={({ nextSlide }) => { + return sideControls(RightArrow, nextSlide) + }} + afterSlide={(slideIndex) => setSlideIndex(slideIndex)} + > + {caseStudySlides} + + ) : null} +
    + {featuredLogos && featuredLogos.length > 0 && ( +
    + {featuredLogos.map((featuredLogo) => ( + {featuredLogo.companyName} + ))} +
    + )} +
    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/case-study-carousel/style.css consul-1.8.7+dfsg1/website/components/case-study-carousel/style.css --- consul-1.7.4+dfsg1/website/components/case-study-carousel/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/case-study-carousel/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,280 @@ +.g-case-carousel { + display: flex; + flex-direction: column; + align-items: center; + position: relative; + padding-top: 0 !important; + padding-bottom: 0 !important; + + & h2 { + margin-bottom: 30px; + max-width: 600px; + text-align: center; + white-space: pre-wrap; + + @media (max-width: 800px) { + margin-top: 64px; + white-space: initial; + margin-left: 24px; + margin-right: 24px; + } + } + + &::after { + content: ''; + width: 100%; + height: var(--background-height); + position: absolute; + bottom: 0; + z-index: -1; + } + + &.has-background { + &::after { + content: ''; + background: var(--gray-7); + } + + & .background-section { + background: var(--gray-7); + } + } + + & .background-section { + width: 100%; + + & .mono-logos { + align-items: baseline; + display: flex; + justify-content: center; + max-width: 750px; + margin: 0 auto; + margin-top: 70px; + flex-wrap: wrap; + + & > img { + height: 100%; + max-height: 40px; + width: 33.33%; + padding: 0 30px; + margin: 24px 0; + + @media (max-width: 800px) { + padding: 0 20px; + max-height: 28px; + } + } + + & > picture { + max-height: 40px; + width: 33.33%; + padding: 0 30px; + margin: 24px 0; + + @media (max-width: 800px) { + padding: 0 20px; + max-height: 28px; + } + + & > img { + width: 100%; + height: auto; + display: flex; + } + } + } + } + + & .slider-control-bottomcenter { + bottom: -35px !important; + } + + /* Begin `nuka-carousel` styles */ + & .slider { + max-width: 1200px; + + &:focus { + outline: none !important; + } + + @media (max-width: 800px) { + width: calc(100% - 48px) !important; + } + + & .slider-list { + margin-bottom: 50px !important; + + @media (max-width: 800px) { + margin-bottom: 30px !important; + } + } + + & .slider-frame:focus { + outline: none !important; + } + + & .slider-slide:focus { + outline: none !important; + } + } + + /* End `nuka-carousel` styles */ + + & .side-control { + border: none; + background: none; + margin: 20px; + + &:focus { + outline: none; + } + + &:hover:not([disabled]) { + cursor: pointer; + } + + @media (max-width: 991px) { + display: none; + } + + & svg path { + stroke: var(--gray-2); + } + + &:disabled svg path { + stroke: var(--gray-5); + } + } + + & .case-slide { + display: flex; + flex-wrap: wrap; + width: 100%; + background: var(--white); + padding: 64px; + box-shadow: 0 8px 22px #dedede; + + @media (max-width: 800px) { + box-shadow: none; + border: 1px solid var(--gray-6); + padding: 48px; + } + + @media (--medium-up) { + max-width: 750px; + } + + & button { + margin-top: 24px; + } + + & .quotes { + display: flex; + margin-bottom: 24px; + } + + & h4 { + margin: 0; + + &.case { + min-height: 130px; + margin-bottom: 24px; + color: var(--gray-2); + + @media (max-width: 800px) { + min-height: 155px; + font-size: 22px; + } + + @media (max-width: 650px) { + min-height: 190px; + } + + @media (max-width: 550px) { + font-size: 20px; + } + + @media (max-width: 400px) { + font-size: 18px; + line-height: 28px; + } + } + } + + & p { + margin: 0; + } + + & a { + margin-top: 24px; + } + + & .case-content { + display: flex; + justify-content: space-between; + width: 100%; + align-items: center; + } + + & .person-container { + display: flex; + align-items: center; + + & picture { + display: flex; + } + + & .person-photo { + border-radius: 50%; + max-height: 72px; + margin-right: 24px; + } + + & .person-name { + & h5 { + margin: 0; + + @media (max-width: 400px) { + font-size: 16px; + } + } + + @media (max-width: 400px) { + & p { + font-size: 15px; + } + } + } + } + + & .company-logo { + max-height: 40px; + max-width: 180px; + + @media (max-width: 800px) { + display: none; + } + } + + & .case { + color: var(--gray-5); + font-size: 24px; + line-height: 31px; /* Called for within the design, no custom property seemed appropriate */ + } + } + + & .carousel-controls { + width: 100%; + display: flex; + flex-wrap: nowrap; + justify-content: center; + + & .carousel-controls-button { + height: 20px; + background: transparent; + box-shadow: none; + cursor: pointer; + border: none; + } + } +} diff -Nru consul-1.7.4+dfsg1/website/components/cloud-offerings-list/index.jsx consul-1.8.7+dfsg1/website/components/cloud-offerings-list/index.jsx --- consul-1.7.4+dfsg1/website/components/cloud-offerings-list/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/cloud-offerings-list/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +import Button from '@hashicorp/react-button' + +export default function CloudOfferingsList({ offerings }) { + return ( + + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/cloud-offerings-list/style.css consul-1.8.7+dfsg1/website/components/cloud-offerings-list/style.css --- consul-1.7.4+dfsg1/website/components/cloud-offerings-list/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/cloud-offerings-list/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,57 @@ +ul.g-cloud-offerings-list { + list-style: none; + padding: 0; + margin: -16px; + display: flex; + + @media (width < 769px) { + flex-direction: column; + } + + & li { + flex-grow: 1; + margin: 16px; + background: var(--white); + border: 1px solid var(--gray-6); + border-radius: 2px; + text-align: center; + transition: box-shadow 0.25s, transform 0.25s, -webkit-transform 0.25s; + + &:hover { + box-shadow: 0 16px 28px rgba(37, 38, 45, 0.12); + transform: translateY(-4px); + cursor: pointer; + } + + & > a { + display: block; + padding: 32px; + color: inherit; + + & > img { + display: block; + width: 400px; + max-width: 100%; + margin-left: auto; + margin-right: auto; + margin-bottom: 14px; + } + + & > span { + color: var(--gray-4); + } + + & > h4 { + text-decoration: none; + margin-top: 8px; + margin-bottom: 0; + } + + & > p { + font-size: 19px; + margin-top: 8px; + margin-bottom: 24px; + } + } + } +} diff -Nru consul-1.7.4+dfsg1/website/components/enterprise-comparison/consul/img/consul-enterprise.svg consul-1.8.7+dfsg1/website/components/enterprise-comparison/consul/img/consul-enterprise.svg --- consul-1.7.4+dfsg1/website/components/enterprise-comparison/consul/img/consul-enterprise.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/enterprise-comparison/consul/img/consul-enterprise.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru consul-1.7.4+dfsg1/website/components/enterprise-comparison/consul/img/consul-oss.svg consul-1.8.7+dfsg1/website/components/enterprise-comparison/consul/img/consul-oss.svg --- consul-1.7.4+dfsg1/website/components/enterprise-comparison/consul/img/consul-oss.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/enterprise-comparison/consul/img/consul-oss.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/website/components/enterprise-comparison/consul/index.jsx consul-1.8.7+dfsg1/website/components/enterprise-comparison/consul/index.jsx --- consul-1.7.4+dfsg1/website/components/enterprise-comparison/consul/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/enterprise-comparison/consul/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,34 @@ +import EnterpriseComparison from '../../enterprise-comparison' + +export default function ConsulEnterpriseComparison() { + return ( + + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/enterprise-comparison/img/arrow.svg consul-1.8.7+dfsg1/website/components/enterprise-comparison/img/arrow.svg --- consul-1.7.4+dfsg1/website/components/enterprise-comparison/img/arrow.svg 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/enterprise-comparison/img/arrow.svg 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ + + + + Binary files /tmp/tmpk3hrqvbk/I5fz4G3_hy/consul-1.7.4+dfsg1/website/components/enterprise-comparison/img/complexity-advanced.png and /tmp/tmpk3hrqvbk/j1SU0vTKOf/consul-1.8.7+dfsg1/website/components/enterprise-comparison/img/complexity-advanced.png differ Binary files /tmp/tmpk3hrqvbk/I5fz4G3_hy/consul-1.7.4+dfsg1/website/components/enterprise-comparison/img/complexity-basic.png and /tmp/tmpk3hrqvbk/j1SU0vTKOf/consul-1.8.7+dfsg1/website/components/enterprise-comparison/img/complexity-basic.png differ diff -Nru consul-1.7.4+dfsg1/website/components/enterprise-comparison/index.jsx consul-1.8.7+dfsg1/website/components/enterprise-comparison/index.jsx --- consul-1.7.4+dfsg1/website/components/enterprise-comparison/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/enterprise-comparison/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +import Image from '@hashicorp/react-image' +import Button from '@hashicorp/react-button' +import InlineSvg from '@hashicorp/react-inline-svg' +import ArrowIcon from './img/arrow.svg?include' + +export default function EnterpriseComparison({ + title, + itemOne, + itemTwo, + brand, +}) { + return ( +
    +
    +

    {title}

    + +
    +
    + +
    {itemOne.label}
    +

    {itemOne.title}

    + +

    {itemOne.description}

    +
    +
    +
    + +
    +
    + +
    {itemTwo.label}
    +

    {itemTwo.title}

    + +

    {itemTwo.description}

    +
    +
    +
    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/enterprise-comparison/style.css consul-1.8.7+dfsg1/website/components/enterprise-comparison/style.css --- consul-1.7.4+dfsg1/website/components/enterprise-comparison/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/enterprise-comparison/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,92 @@ +.g-enterprise-comparison { + padding-top: 128px; + padding-bottom: 128px; + background: var(--gray-7); + + & h2 { + text-align: center; + } + + @media (max-width: 800px) { + padding-top: 64px; + padding-bottom: 64px; + } + + & .content-container { + display: flex; + justify-content: space-between; + margin: 0 auto 64px auto; + + @media (max-width: 800px) { + flex-wrap: wrap; + } + & .item { + flex-basis: 50%; + justify-content: center; + text-align: center; + margin-top: 64px; + + @media (max-width: 800px) { + margin-top: 64px; + flex-basis: 100%; + } + + & .g-type-label-strong { + margin-top: 64px; + + @media (max-width: 800px) { + margin-top: 32px; + } + } + + & h4 { + white-space: pre; + margin-top: 24px; + margin-bottom: 8px; + + @media (max-width: 800px) { + margin-top: 16px; + } + } + + & picture { + display: inline-block; + } + + & img { + max-width: 160px; + max-height: 98px; + } + & p { + margin-top: 0; + margin-bottom: 24px; + + @media (max-width: 800px) { + max-width: 600px; + margin-right: auto; + margin-left: auto; + } + } + } + + & .spacer { + & .vertical-spacer { + height: 93px; + } + + & .arrow { + display: flex; + align-items: center; + } + + @media (max-width: 800px) { + display: none; + } + } + } + + & .more-features-link { + display: flex; + justify-content: center; + } +} diff -Nru consul-1.7.4+dfsg1/website/components/footer/index.jsx consul-1.8.7+dfsg1/website/components/footer/index.jsx --- consul-1.7.4+dfsg1/website/components/footer/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/footer/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +import Link from 'next/link' + +export default function Footer({ openConsentManager }) { + return ( + + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/footer/style.css consul-1.8.7+dfsg1/website/components/footer/style.css --- consul-1.7.4+dfsg1/website/components/footer/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/footer/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,33 @@ +.g-footer { + padding: 25px 0 17px 0; + flex-shrink: 0; + display: flex; + border-top: 1px solid var(--gray-6); + + & .g-container { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + } + + & a { + color: black; + opacity: 0.5; + transition: opacity 0.25s ease; + cursor: pointer; + display: inline-block; + + &:hover { + opacity: 1; + } + } + + & .left > a { + margin-right: 20px; + margin-bottom: 8px; + + &:last-child { + margin-right: 0; + } + } +} diff -Nru consul-1.7.4+dfsg1/website/components/learn-callout/index.jsx consul-1.8.7+dfsg1/website/components/learn-callout/index.jsx --- consul-1.7.4+dfsg1/website/components/learn-callout/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/learn-callout/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,57 @@ +import Button from '@hashicorp/react-button' + +export default function LearnNomad({ headline, brand, items }) { + return ( +
    +
    +
    + {/* need this wrapper to flex center the .column-content */} +
    +
    +

    {headline}

    +
    +
    + {items.map((item) => { + return ( + +
    +
    +
    {item.time}
    + {item.title} +
    +
    +
    + +

    {item.title}

    +
    +
    +
    +
    + ) + })} +
    +
    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/learn-callout/style.css consul-1.8.7+dfsg1/website/components/learn-callout/style.css --- consul-1.7.4+dfsg1/website/components/learn-callout/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/learn-callout/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,168 @@ +.g-learn-callout { + padding-top: 88px; + padding-bottom: 88px; + + @media (max-width: 768px) { + padding-top: 64px; + padding-bottom: 64px; + } + + & .learn-container { + @media (max-width: 1200px) { + display: flex; + flex-wrap: wrap; + justify-content: center; + } + & .mobile-button { + @media (min-width: 1201px) { + display: none; + } + } + } + + & .column-container { + display: flex; + justify-content: space-between; + margin: 0 36px; + + @media (max-width: 1200px) { + margin: 0 -16px; + flex-wrap: wrap; + } + + & .column-content { + & h2 { + @media (max-width: 1200px) { + margin: 0; + } + } + } + + & .desktop-button { + @media (max-width: 1200px) { + display: none; + } + } + + & > div { + display: flex; + flex-wrap: wrap; + align-items: center; + margin: 0 16px; + width: 33.333%; + overflow: auto; + + @media (max-width: 1200px) { + text-align: center; + display: block; + width: 100%; + margin: 0; + margin-bottom: 48px; + } + } + + & > a { + margin: 0 16px; + width: 33.333%; + transition: box-shadow 0.25s, transform 0.25s, -webkit-transform 0.25s; + display: flex; + cursor: pointer; + + &:hover { + box-shadow: 0 16px 28px rgba(37, 38, 45, 0.12); + transform: translateY(-4px); + } + + @media (max-width: 1200px) { + width: calc(50% - 32px); + margin-bottom: 48px; + } + + @media (max-width: 768px) { + width: 100%; + + &:last-child { + margin-bottom: 48px; + } + } + + & .course { + border: 1px solid var(--gray-6); + display: flex; + flex-direction: column; + width: 100%; + + & > div { + min-height: 200px; + padding: 25px; + } + + & .image { + background: var(--gray-7); + position: relative; + display: flex; + justify-content: center; + align-items: center; + + & img { + max-width: 80px; + max-height: 80px; + width: 100%; + } + } + + & h4 { + color: var(--gray-2); + } + + & .time { + color: var(--gray-4); + position: absolute; + top: 10px; + right: 10px; + } + + & .content { + text-align: center; + background: #fff; + @media (max-width: 768px) { + display: flex; + justify-content: center; + align-items: center; + } + + & h4 { + margin: 24px 0; + } + } + } + } + + &.brand-consul { + & .content label { + color: var(--consul); + } + } + + /* Brand -- Nomad */ + &.brand-nomad { + & .content label { + color: var(--nomad); + } + } + + /* Brand -- Packer */ + &.brand-packer { + & .content label { + color: var(--packer); + } + } + + /* Brand -- Terraform */ + &.brand-terraform { + & .content label { + color: var(--terraform); + } + } + } +} diff -Nru consul-1.7.4+dfsg1/website/components/mini-cta/index.jsx consul-1.8.7+dfsg1/website/components/mini-cta/index.jsx --- consul-1.7.4+dfsg1/website/components/mini-cta/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/mini-cta/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +import Button from '@hashicorp/react-button' + +export default function MiniCTA({ title, description, link }) { + return ( +
    +
    +
    +
    {title}
    + {description &&

    {description}

    } +
    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/mini-cta/style.css consul-1.8.7+dfsg1/website/components/mini-cta/style.css --- consul-1.7.4+dfsg1/website/components/mini-cta/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/mini-cta/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,36 @@ +.g-mini-cta { + background: var(--gray-7); + text-align: center; + padding-bottom: 64px; + padding-top: 48px; + + & hr { + width: 64px; + color: var(--gray-5); + margin: 0 auto 64px auto; + + @media (max-width: 800px) { + margin: 0 auto 24px auto; + } + } + + & h5 { + margin: 0; + margin-bottom: 14px; + } + + & p { + margin: 0; + margin-bottom: 24px; + + @media (max-width: 800px) { + margin-bottom: 16px; + } + } + + & .g-btn { + & span { + font-weight: 500; + } + } +} diff -Nru consul-1.7.4+dfsg1/website/components/prefooter-cta/index.jsx consul-1.8.7+dfsg1/website/components/prefooter-cta/index.jsx --- consul-1.7.4+dfsg1/website/components/prefooter-cta/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/prefooter-cta/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,25 @@ +import CallToAction from '@hashicorp/react-call-to-action' + +export default function PrefooterCTA() { + return ( + + ) +} diff -Nru consul-1.7.4+dfsg1/website/components/search-bar/index.jsx consul-1.8.7+dfsg1/website/components/search-bar/index.jsx --- consul-1.7.4+dfsg1/website/components/search-bar/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/search-bar/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,28 @@ +import Search from '@hashicorp/react-search' + +export default function SearchBar() { + return ( + ( + <> + + + + + + + + )} + resolveHitLink={(hit) => ({ + href: { + pathname: `/${transformIdtoUrl(hit.objectID)}`, + }, + })} + placeholder="Search Consul documentation" + /> + ) +} + +function transformIdtoUrl(id) { + return id.replace(/\/index$/, '') +} diff -Nru consul-1.7.4+dfsg1/website/components/search-bar/style.css consul-1.8.7+dfsg1/website/components/search-bar/style.css --- consul-1.7.4+dfsg1/website/components/search-bar/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/search-bar/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +.g-search { + width: calc(100% - 2rem); + max-width: 600px; +} diff -Nru consul-1.7.4+dfsg1/website/components/subnav/index.jsx consul-1.8.7+dfsg1/website/components/subnav/index.jsx --- consul-1.7.4+dfsg1/website/components/subnav/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/components/subnav/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,23 @@ +import Subnav from '@hashicorp/react-subnav' +import subnavItems from '../../data/subnav' +import { useRouter } from 'next/router' + +export default function ConsulSubnav() { + const router = useRouter() + return ( + + ) +} diff -Nru consul-1.7.4+dfsg1/website/config.rb consul-1.8.7+dfsg1/website/config.rb --- consul-1.7.4+dfsg1/website/config.rb 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/website/config.rb 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -set :base_url, "https://www.consul.io/" - -activate :hashicorp do |h| - h.name = "consul" - h.version = "1.7.4" - h.github_slug = "hashicorp/consul" -end - -# Netlify redirects/headers -proxy '_redirects', 'redirects.txt', ignore: true - -helpers do - # Returns a segment tracking ID such that local development is not - # tracked to production systems. - def segmentId() - if (ENV['ENV'] == 'production') - 'IyzLrqXkox5KJ8XL4fo8vTYNGfiKlTCm' - else - '0EXTgkNx0Ydje2PGXVbRhpKKoe5wtzcE' - end - end - - # Returns the FQDN of the image URL. - # - # @param [String] path - # - # @return [String] - def image_url(path) - File.join(base_url, image_path(path)) - end - - # Get the title for the page. - # - # @param [Middleman::Page] page - # - # @return [String] - def title_for(page) - if page && page.data.page_title - return "#{page.data.page_title} - Consul by HashiCorp" - end - - "Consul by HashiCorp" - end - - # Get the description for the page - # - # @param [Middleman::Page] page - # - # @return [String] - def description_for(page) - description = (page.data.description || "Consul by HashiCorp") - .gsub('"', '') - .gsub(/\n+/, ' ') - .squeeze(' ') - - return escape_html(description) - end - - # This helps by setting the "active" class for sidebar nav elements - # if the YAML frontmatter matches the expected value. - def sidebar_current(expected) - current = current_page.data.sidebar_current || "" - if current.start_with?(expected) - return " class=\"active\"" - else - return "" - end - end - - # Returns the id for this page. - # @return [String] - def body_id_for(page) - if !(name = page.data.sidebar_current).blank? - return "page-#{name.strip}" - end - if page.url == "/" || page.url == "/index.html" - return "page-home" - end - if !(title = page.data.page_title).blank? - return title - .downcase - .gsub('"', '') - .gsub(/[^\w]+/, '-') - .gsub(/_+/, '-') - .squeeze('-') - .squeeze(' ') - end - return "" - end - - # Returns the list of classes for this page. - # @return [String] - def body_classes_for(page) - classes = [] - - if !(layout = page.data.layout).blank? - classes << "layout-#{page.data.layout}" - end - - if !(title = page.data.page_title).blank? - title = title - .downcase - .gsub('"', '') - .gsub(/[^\w]+/, '-') - .gsub(/_+/, '-') - .squeeze('-') - .squeeze(' ') - classes << "page-#{title}" - end - - return classes.join(" ") - end -end diff -Nru consul-1.7.4+dfsg1/website/data/alert-banner.js consul-1.8.7+dfsg1/website/data/alert-banner.js --- consul-1.7.4+dfsg1/website/data/alert-banner.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/alert-banner.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,12 @@ +export const ALERT_BANNER_ACTIVE = true + +// https://github.com/hashicorp/web-components/tree/master/packages/alert-banner +export default { + tag: 'Announcing', + url: 'https://www.hashicorp.com/blog/consul-service-on-azure-production-tier', + text: 'HashiCorp Consul Service on Azure Production SKU', + linkText: 'Learn more', + // Set the `expirationDate prop with a datetime string (e.g. `2020-01-31T12:00:00-07:00`) + // if you'd like the component to stop showing at or after a certain date + expirationDate: null, +} diff -Nru consul-1.7.4+dfsg1/website/data/api-navigation.js consul-1.8.7+dfsg1/website/data/api-navigation.js --- consul-1.7.4+dfsg1/website/data/api-navigation.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/api-navigation.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +// The root folder for this documentation category is `pages/guides` +// +// - A string refers to the name of a file +// - A "category" value refers to the name of a directory +// - All directories must have an "index.mdx" file to serve as +// the landing page for the category, or a "name" property to +// serve as the category title in the sidebar + +export default [ + 'index', + { + category: 'features', + name: 'API Features', + content: ['consistency', 'blocking', 'filtering', 'caching'], + }, + '--------', + { + category: 'acl', + content: [ + 'tokens', + 'legacy', + 'policies', + 'roles', + 'auth-methods', + 'binding-rules', + ], + }, + { + category: 'agent', + content: ['check', 'service', 'connect'], + }, + 'catalog', + 'config', + { category: 'connect', content: ['ca', 'intentions'] }, + 'coordinate', + 'discovery-chain', + 'event', + 'health', + 'kv', + { + category: 'operator', + content: ['area', 'autopilot', 'keyring', 'license', 'raft', 'segment'], + }, + 'namespaces', + 'query', + 'session', + 'snapshot', + 'status', + 'txn', + '-------', + 'libraries-and-sdks', +] diff -Nru consul-1.7.4+dfsg1/website/data/commands-navigation.js consul-1.8.7+dfsg1/website/data/commands-navigation.js --- consul-1.7.4+dfsg1/website/data/commands-navigation.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/commands-navigation.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,78 @@ +export default [ + 'index', + { + category: 'acl', + content: [ + { + category: 'auth-method', + content: ['create', 'delete', 'list', 'read', 'update'], + }, + { + category: 'binding-rule', + content: ['create', 'delete', 'list', 'read', 'update'], + }, + 'bootstrap', + { + category: 'policy', + content: ['create', 'delete', 'list', 'read', 'update'], + }, + { + category: 'role', + content: ['create', 'delete', 'list', 'read', 'update'], + }, + 'set-agent-token', + { + category: 'token', + content: ['clone', 'create', 'delete', 'list', 'read', 'update'], + }, + 'translate-rules', + ], + }, + 'agent', + { category: 'catalog', content: ['datacenters', 'nodes', 'services'] }, + { category: 'config', content: ['delete', 'list', 'read', 'write'] }, + { category: 'connect', content: ['ca', 'proxy', 'envoy', 'expose'] }, + 'debug', + 'event', + 'exec', + 'force-leave', + 'info', + { + category: 'intention', + content: ['check', 'create', 'delete', 'get', 'match'], + }, + 'join', + 'keygen', + 'keyring', + { + category: 'kv', + content: ['delete', 'export', 'get', 'import', 'put'], + }, + 'leave', + 'license', + 'lock', + 'login', + 'logout', + 'maint', + 'members', + 'monitor', + { + category: 'namespace', + content: ['create', 'delete', 'list', 'read', 'update', 'write'], + }, + { + category: 'operator', + content: ['area', 'autopilot', 'raft'], + }, + 'reload', + 'rtt', + { category: 'services', content: ['register', 'deregister'] }, + { + category: 'snapshot', + content: ['agent', 'inspect', 'restore', 'save'], + }, + { category: 'tls', content: ['ca', 'cert'] }, + 'validate', + 'version', + 'watch', +] diff -Nru consul-1.7.4+dfsg1/website/data/docs-navigation.js consul-1.8.7+dfsg1/website/data/docs-navigation.js --- consul-1.7.4+dfsg1/website/data/docs-navigation.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/docs-navigation.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,279 @@ +// The root folder for this documentation category is `pages/docs` +// +// - A string refers to the name of a file +// - A "category" value refers to the name of a directory +// - All directories must have an "index.mdx" file to serve as +// the landing page for the category, or a "name" property to +// serve as the category title in the sidebar + +export default [ + { + category: 'intro', + content: [ + { + category: 'vs', + content: [ + 'zookeeper', + 'chef-puppet', + 'nagios-sensu', + 'skydns', + 'smartstack', + 'serf', + 'eureka', + 'istio', + 'proxies', + 'custom', + ], + }, + ], + }, + + { + category: 'install', + content: [ + { title: 'Consul Agent', href: '/docs/agent' }, + 'glossary', + 'ports', + 'bootstrapping', + 'cloud-auto-join', + 'performance', + { title: 'Kubernetes', href: '/docs/k8s' }, + ], + }, + + { title: 'API', href: '/api-docs' }, + + { title: 'Commands (CLI)', href: '/commands' }, + + { + category: 'discovery', + name: 'Service Discovery', + content: ['services', 'dns', 'checks'], + }, + + { + category: 'connect', + content: [ + 'connect-internals', + 'configuration', + { + category: 'proxies', + content: ['envoy', 'built-in', 'integrate'], + }, + { + category: 'registration', + content: ['service-registration', 'sidecar-service'], + }, + 'intentions', + 'observability', + { + category: 'l7-traffic', + content: ['discovery-chain'], + }, + 'connectivity-tasks', + { + category: 'gateways', + content: [ + { + category: 'mesh-gateway', + content: ['wan-federation-via-mesh-gateways'], + }, + + 'ingress-gateway', + 'terminating-gateway', + ], + }, + 'nomad', + { title: 'Kubernetes', href: '/docs/k8s/connect' }, + { category: 'native', content: ['go'] }, + { + category: 'ca', + content: ['consul', 'vault', 'aws'], + }, + 'dev', + ], + }, + { + category: 'k8s', + content: [ + { + category: 'installation', + name: 'Get Started', + content: [ + 'install', + { + category: 'platforms', + name: 'Platform Guides', + content: [ + { + title: 'Minikube', + href: + 'https://learn.hashicorp.com/tutorials/consul/kubernetes-minikube?utm_source=consul.io&utm_medium=docs&utm_content=k8s&utm_term=mk', + }, + { + title: 'Kind', + href: + 'https://learn.hashicorp.com/tutorials/consul/kubernetes-kind?utm_source=consul.io&utm_medium=docs&utm_content=k8s&utm_term=mk', + }, + { + title: 'AKS (Azure)', + href: + 'https://learn.hashicorp.com/tutorials/consul/kubernetes-aks-azure?utm_source=consul.io&utm_medium=docs&utm_content=k8s&utm_term=aks', + }, + { + title: 'EKS (AWS)', + href: + 'https://learn.hashicorp.com/tutorials/consul/kubernetes-eks-aws?utm_source=consul.io&utm_medium=docs&utm_content=k8s&utm_term=eks', + }, + { + title: 'GKE (Google Cloud)', + href: + 'https://learn.hashicorp.com/tutorials/consul/kubernetes-gke-google?utm_source=consul.io&utm_medium=docs&utm_content=k8s&utm_term=gke', + }, + 'self-hosted-kubernetes', + ], + }, + { + category: 'deployment-configurations', + name: 'Deployment Configurations', + content: [ + 'clients-outside-kubernetes', + 'servers-outside-kubernetes', + 'consul-enterprise', + ], + }, + { + category: 'multi-cluster', + content: ['kubernetes', 'vms-and-kubernetes'], + }, + ], + }, + 'tls-on-existing-cluster', + { + category: 'connect', + content: [ + 'ingress-gateways', + 'terminating-gateways', + 'connect-ca-provider', + 'ambassador', + ], + }, + 'service-sync', + 'dns', + { + category: 'upgrade', + content: ['compatibility'], + }, + 'uninstall', + 'helm', + ], + }, + + { + category: 'nia', + content: [ + { + category: 'installation', + name: 'Get Started', + content: ['install', 'requirements', 'configuration', 'run'], + }, + 'architecture', + 'cli', + 'tasks', + 'network-drivers', + ], + }, + + { + category: 'dynamic-app-config', + name: 'Dynamic App Configuration', + content: ['kv', 'sessions', 'watches'], + }, + { + category: 'agent', + content: [ + 'options', + { + category: 'config-entries', + content: [ + 'ingress-gateway', + 'proxy-defaults', + 'service-defaults', + 'service-resolver', + 'service-router', + 'service-splitter', + 'terminating-gateway', + ], + }, + 'telemetry', + ], + }, + { + category: 'security', + content: [ + { + category: 'acl', + content: [ + 'acl-system', + 'acl-rules', + 'acl-legacy', + 'acl-migrate-tokens', + { category: 'auth-methods', content: ['kubernetes', 'jwt', 'oidc'] }, + ], + }, + 'encryption', + ], + }, + { + category: 'enterprise', + content: [ + 'audit-logging', + 'backups', + 'upgrades', + 'read-scale', + { + title: 'Single sign-on - OIDC', + href: '/docs/security/acl/auth-methods/oidc', + }, + 'redundancy', + 'federation', + 'namespaces', + 'network-segments', + 'sentinel', + ], + }, + { + category: 'architecture', + content: ['anti-entropy', 'consensus', 'gossip', 'jepsen', 'coordinates'], + }, + { + category: 'integrate', + name: 'Integrations', + content: [ + 'partnerships', + 'nia-integration', + { + title: 'Vault Integration', + href: '/docs/connect/ca/vault', + }, + { + title: 'Ambassador Integration', + href: '/docs/k8s/connect/ambassador', + }, + { + title: 'Proxy Integration', + href: '/docs/connect/proxies/integrate', + }, + ], + }, + 'download-tools', + { + category: 'upgrading', + content: ['compatibility', 'upgrade-specific'], + }, + { + category: 'troubleshoot', + name: 'Troubleshoot', + content: ['common-errors', 'faq'], + }, +] diff -Nru consul-1.7.4+dfsg1/website/data/intro-navigation.js consul-1.8.7+dfsg1/website/data/intro-navigation.js --- consul-1.7.4+dfsg1/website/data/intro-navigation.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/intro-navigation.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,9 @@ +// The root folder for this documentation category is `pages/intro` +// +// - A string refers to the name of a file +// - A "category" value refers to the name of a directory +// - All directories must have an "index.mdx" file to serve as +// the landing page for the category, or a "name" property to +// serve as the category title in the sidebar + +export default ['getting-started'] diff -Nru consul-1.7.4+dfsg1/website/data/subnav.js consul-1.8.7+dfsg1/website/data/subnav.js --- consul-1.7.4+dfsg1/website/data/subnav.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/subnav.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +export default [ + { text: 'Overview', url: '/docs/intro' }, + { + text: 'Use Cases', + submenu: [ + { + text: 'Service Discovery and Health Checking', + url: '/use-cases/service-discovery-and-health-checking', + }, + { + text: 'Network Infrastructure Automation', + url: '/use-cases/network-infrastructure-automation', + }, + { + text: 'Multi-Platform Service Mesh', + url: '/use-cases/multi-platform-service-mesh', + }, + ], + }, + { + text: 'Enterprise', + url: + 'https://www.hashicorp.com/products/consul/?utm_source=oss&utm_medium=header-nav&utm_campaign=consul', + type: 'outbound', + }, + 'divider', + { + text: 'Tutorials', + url: 'https://learn.hashicorp.com/consul', + type: 'outbound', + }, + { + text: 'Docs', + url: '/docs', + type: 'inbound', + }, + { + text: 'API', + url: '/api-docs', + type: 'inbound', + }, + { + text: 'CLI', + url: '/commands', + type: 'inbound,' + }, + { + text: 'Community', + url: '/community', + type: 'inbound', + }, +] diff -Nru consul-1.7.4+dfsg1/website/data/version.js consul-1.8.7+dfsg1/website/data/version.js --- consul-1.7.4+dfsg1/website/data/version.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/data/version.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1 @@ +export default '1.8.7' diff -Nru consul-1.7.4+dfsg1/website/Dockerfile consul-1.8.7+dfsg1/website/Dockerfile --- consul-1.7.4+dfsg1/website/Dockerfile 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/Dockerfile 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,7 @@ +FROM docker.mirror.hashicorp.services/node:10.16.3-alpine +RUN apk add --update --no-cache git make g++ automake autoconf libtool nasm libpng-dev + +COPY ./package.json /website/package.json +COPY ./package-lock.json /website/package-lock.json +WORKDIR /website +RUN npm install diff -Nru consul-1.7.4+dfsg1/website/.editorconfig consul-1.8.7+dfsg1/website/.editorconfig --- consul-1.7.4+dfsg1/website/.editorconfig 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/.editorconfig 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[Makefile] +indent_style = tab + +[{*.md,*.json}] +max_line_length = null diff -Nru consul-1.7.4+dfsg1/website/.env consul-1.8.7+dfsg1/website/.env --- consul-1.7.4+dfsg1/website/.env 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/.env 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,6 @@ +NEXT_PUBLIC_SEGMENT_WRITE_KEY='IyzLrqXkox5KJ8XL4fo8vTYNGfiKlTCm' +NEXT_PUBLIC_BUGSNAG_CLIENT_KEY='01625078d856ef022c88f0c78d2364f1' +NEXT_PUBLIC_BUGSNAG_SERVER_KEY='be8ed0d0fc887d547284cce9e98e60e5' +NEXT_PUBLIC_ALGOLIA_APP_ID=YY0FFNI7MF +NEXT_PUBLIC_ALGOLIA_INDEX=product_CONSUL +NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=5037da4824714676226913c65e961ca0 diff -Nru consul-1.7.4+dfsg1/website/.eslintrc.js consul-1.8.7+dfsg1/website/.eslintrc.js --- consul-1.7.4+dfsg1/website/.eslintrc.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/.eslintrc.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,4 @@ +module.exports = { + ...require('@hashicorp/nextjs-scripts/.eslintrc.js'), + ignorePatterns: ['public/'], +} diff -Nru consul-1.7.4+dfsg1/website/Gemfile consul-1.8.7+dfsg1/website/Gemfile --- consul-1.7.4+dfsg1/website/Gemfile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/website/Gemfile 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem "middleman-hashicorp", "0.3.43" diff -Nru consul-1.7.4+dfsg1/website/Gemfile.lock consul-1.8.7+dfsg1/website/Gemfile.lock --- consul-1.7.4+dfsg1/website/Gemfile.lock 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/website/Gemfile.lock 1970-01-01 00:00:00.000000000 +0000 @@ -1,161 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - autoprefixer-rails (9.7.4) - execjs - bootstrap-sass (3.4.1) - autoprefixer-rails (>= 5.2.1) - sassc (>= 2.0.0) - builder (3.2.4) - capybara (2.4.4) - mime-types (>= 1.16) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - xpath (~> 2.0) - chunky_png (1.3.11) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) - compass (1.0.3) - chunky_png (~> 1.2) - compass-core (~> 1.0.2) - compass-import-once (~> 1.0.5) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - sass (>= 3.3.13, < 3.5) - compass-core (1.0.3) - multi_json (~> 1.0) - sass (>= 3.3.0, < 3.5) - compass-import-once (1.0.5) - sass (>= 3.2, < 3.5) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - erubis (2.7.0) - eventmachine (1.2.7) - execjs (2.7.0) - ffi (1.12.2) - haml (5.1.2) - temple (>= 0.8.0) - tilt - hike (1.2.3) - hooks (0.4.1) - uber (~> 0.0.14) - http_parser.rb (0.6.0) - i18n (0.7.0) - json (2.3.0) - kramdown (1.17.0) - listen (3.0.8) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - middleman (3.4.1) - coffee-script (~> 2.2) - compass (>= 1.0.0, < 2.0.0) - compass-import-once (= 1.0.5) - execjs (~> 2.0) - haml (>= 4.0.5) - kramdown (~> 1.2) - middleman-core (= 3.4.1) - middleman-sprockets (>= 3.1.2) - sass (>= 3.4.0, < 4.0) - uglifier (~> 2.5) - middleman-core (3.4.1) - activesupport (~> 4.1) - bundler (~> 1.1) - capybara (~> 2.4.4) - erubis - hooks (~> 0.3) - i18n (~> 0.7.0) - listen (~> 3.0.3) - padrino-helpers (~> 0.12.3) - rack (>= 1.4.5, < 2.0) - thor (>= 0.15.2, < 2.0) - tilt (~> 1.4.1, < 2.0) - middleman-hashicorp (0.3.43) - bootstrap-sass (~> 3.3) - builder (~> 3.2) - middleman (~> 3.4) - middleman-livereload (~> 3.4) - middleman-syntax (~> 3.0) - redcarpet (~> 3.3) - turbolinks (~> 5.0) - middleman-livereload (3.4.6) - em-websocket (~> 0.5.1) - middleman-core (>= 3.3) - rack-livereload (~> 0.3.15) - middleman-sprockets (3.5.0) - middleman-core (>= 3.3) - sprockets (~> 2.12.1) - sprockets-helpers (~> 1.1.0) - sprockets-sass (~> 1.3.0) - middleman-syntax (3.2.0) - middleman-core (>= 3.2) - rouge (~> 3.2) - mime-types (3.3.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mini_portile2 (2.4.0) - minitest (5.14.0) - multi_json (1.14.1) - nokogiri (1.10.7) - mini_portile2 (~> 2.4.0) - padrino-helpers (0.12.9) - i18n (~> 0.6, >= 0.6.7) - padrino-support (= 0.12.9) - tilt (>= 1.4.1, < 3) - padrino-support (0.12.9) - activesupport (>= 3.1) - rack (1.6.12) - rack-livereload (0.3.17) - rack - rack-test (1.1.0) - rack (>= 1.0, < 3) - rb-fsevent (0.10.3) - rb-inotify (0.10.1) - ffi (~> 1.0) - redcarpet (3.5.0) - rouge (3.15.0) - sass (3.4.25) - sassc (2.2.1) - ffi (~> 1.9) - sprockets (2.12.5) - hike (~> 1.2) - multi_json (~> 1.0) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - sprockets-helpers (1.1.0) - sprockets (~> 2.0) - sprockets-sass (1.3.1) - sprockets (~> 2.0) - tilt (~> 1.1) - temple (0.8.2) - thor (1.0.1) - thread_safe (0.3.6) - tilt (1.4.1) - turbolinks (5.2.1) - turbolinks-source (~> 5.2) - turbolinks-source (5.2.0) - tzinfo (1.2.6) - thread_safe (~> 0.1) - uber (0.0.15) - uglifier (2.7.2) - execjs (>= 0.3.0) - json (>= 1.8.0) - xpath (2.1.0) - nokogiri (~> 1.3) - -PLATFORMS - ruby - -DEPENDENCIES - middleman-hashicorp (= 0.3.43) - -BUNDLED WITH - 1.17.3 diff -Nru consul-1.7.4+dfsg1/website/.gitignore consul-1.8.7+dfsg1/website/.gitignore --- consul-1.7.4+dfsg1/website/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/.gitignore 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +node_modules +.DS_Store +.next +out +.mdx-data + +# As per Next.js conventions (https://nextjs.org/docs/basic-features/environment-variables#default-environment-variables) +.env*.local diff -Nru consul-1.7.4+dfsg1/website/layouts/api.jsx consul-1.8.7+dfsg1/website/layouts/api.jsx --- consul-1.7.4+dfsg1/website/layouts/api.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/api.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,50 @@ +import Head from 'next/head' +import Link from 'next/link' +import { createMdxProvider } from '@hashicorp/nextjs-scripts/lib/providers/docs' +import DocsPage from '@hashicorp/react-docs-page' +import { SearchProvider } from '@hashicorp/react-search' +import SearchBar from '../components/search-bar' +import { frontMatter as data } from '../pages/api-docs/**/*.mdx' +import order from '../data/api-navigation.js' + +const MDXProvider = createMdxProvider({ product: 'consul' }) + +function ApiDocsLayoutWrapper(pageMeta) { + function ApiDocsLayout(props) { + const { children, ...propsWithoutChildren } = props + return ( + + + + + {children} + + + + ) + } + + ApiDocsLayout.getInitialProps = ({ asPath }) => ({ path: asPath }) + + return ApiDocsLayout +} + +export default ApiDocsLayoutWrapper diff -Nru consul-1.7.4+dfsg1/website/layouts/commands.jsx consul-1.8.7+dfsg1/website/layouts/commands.jsx --- consul-1.7.4+dfsg1/website/layouts/commands.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/commands.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,41 @@ +import DocsPage from '@hashicorp/react-docs-page' +import order from '../data/commands-navigation.js' +import { frontMatter as data } from '../pages/commands/**/*.mdx' +import Head from 'next/head' +import Link from 'next/link' +import { createMdxProvider } from '@hashicorp/nextjs-scripts/lib/providers/docs' + +const MDXProvider = createMdxProvider({ product: 'consul' }) + +function CommandsLayoutWrapper(pageMeta) { + function CommandsLayout(props) { + return ( + + + + ) + } + + CommandsLayout.getInitialProps = ({ asPath }) => ({ path: asPath }) + + return CommandsLayout +} + +export default CommandsLayoutWrapper diff -Nru consul-1.7.4+dfsg1/website/layouts/docs.jsx consul-1.8.7+dfsg1/website/layouts/docs.jsx --- consul-1.7.4+dfsg1/website/layouts/docs.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/docs.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,50 @@ +import Head from 'next/head' +import Link from 'next/link' +import { createMdxProvider } from '@hashicorp/nextjs-scripts/lib/providers/docs' +import DocsPage from '@hashicorp/react-docs-page' +import { SearchProvider } from '@hashicorp/react-search' +import SearchBar from '../components/search-bar' +import { frontMatter as data } from '../pages/docs/**/*.mdx' +import order from '../data/docs-navigation.js' + +const MDXProvider = createMdxProvider({ product: 'consul' }) + +function DocsLayoutWrapper(pageMeta) { + function DocsLayout(props) { + const { children, ...propsWithoutChildren } = props + return ( + + + + + {children} + + + + ) + } + + DocsLayout.getInitialProps = ({ asPath }) => ({ path: asPath }) + + return DocsLayout +} + +export default DocsLayoutWrapper diff -Nru consul-1.7.4+dfsg1/website/layouts/index.jsx consul-1.8.7+dfsg1/website/layouts/index.jsx --- consul-1.7.4+dfsg1/website/layouts/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,35 @@ +import DocsPage from '@hashicorp/react-docs-page' +import Head from 'next/head' +import Link from 'next/link' + +function DefaultLayoutWrapper(pageMeta) { + function DefaultLayout(props) { + return ( + + ) + } + + DefaultLayout.getInitialProps = ({ asPath }) => ({ path: asPath }) + + return DefaultLayout +} + +export default DefaultLayoutWrapper diff -Nru consul-1.7.4+dfsg1/website/layouts/intro.jsx consul-1.8.7+dfsg1/website/layouts/intro.jsx --- consul-1.7.4+dfsg1/website/layouts/intro.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/intro.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,50 @@ +import Head from 'next/head' +import Link from 'next/link' +import { createMdxProvider } from '@hashicorp/nextjs-scripts/lib/providers/docs' +import DocsPage from '@hashicorp/react-docs-page' +import { SearchProvider } from '@hashicorp/react-search' +import SearchBar from '../components/search-bar' +import { frontMatter as data } from '../pages/intro/**/*.mdx' +import order from '../data/intro-navigation.js' + +const MDXProvider = createMdxProvider({ product: 'consul' }) + +function IntroLayoutWrapper(pageMeta) { + function IntroLayout(props) { + const { children, ...propsWithoutChildren } = props + return ( + + + + + {children} + + + + ) + } + + IntroLayout.getInitialProps = ({ asPath }) => ({ path: asPath }) + + return IntroLayout +} + +export default IntroLayoutWrapper diff -Nru consul-1.7.4+dfsg1/website/layouts/use-cases/index.jsx consul-1.8.7+dfsg1/website/layouts/use-cases/index.jsx --- consul-1.7.4+dfsg1/website/layouts/use-cases/index.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/use-cases/index.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,47 @@ +import BasicHero from '../../components/basic-hero' +import PrefooterCTA from '../../components/prefooter-cta' +import ConsulEnterpriseComparison from '../../components/enterprise-comparison/consul' +import Head from 'next/head' +import HashiHead from '@hashicorp/react-head' + +export default function UseCaseLayout({ + title, + description, + guideLink, + children, +}) { + const pageTitle = `Consul ${title}` + return ( + <> + + + + +
    + +
    +

    Features

    +
    + {children} + + +
    + + ) +} diff -Nru consul-1.7.4+dfsg1/website/layouts/use-cases/style.css consul-1.8.7+dfsg1/website/layouts/use-cases/style.css --- consul-1.7.4+dfsg1/website/layouts/use-cases/style.css 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/layouts/use-cases/style.css 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,40 @@ +#p-use-case { + & .features-header { + text-align: center; + margin-bottom: 0; + } + + /* Overriding the g-text-split component to have + * a header size closer to a h3 than a h2, as within + * the context of this page this text-split is more deeply + * nested within the page than we normally have it. + * */ + & .g-text-split { + & h2 { + font-size: 1.5rem; + letter-spacing: -0.004em; + line-height: 1.375em; + + @media (--medium-up) { + font-size: 1.75rem; + line-height: 1.321em; + } + + @media (--large) { + font-size: 2rem; + letter-spacing: -0.006em; + line-height: 1.313em; + } + } + } + + & .with-border { + & .g-text-split { + & .children { + border-width: 1px; + border-color: rgba(174, 176, 183, 0.45); + border-style: solid; + } + } + } +} diff -Nru consul-1.7.4+dfsg1/website/Makefile consul-1.8.7+dfsg1/website/Makefile --- consul-1.7.4+dfsg1/website/Makefile 2020-06-10 20:03:30.000000000 +0000 +++ consul-1.8.7+dfsg1/website/Makefile 2020-12-10 21:46:52.000000000 +0000 @@ -1,33 +1,54 @@ -VERSION?="0.3.43" - -# The volume mounting steps are a way to exclude all the consul docs from being built -# in the Consul site build process while still including the index.html page that points -# users to learn.hashicorp.com. See PR#5847. +# Default: run this if working on the website locally to run in watch mode. +website: + @echo "==> Downloading latest Docker image..." + @docker pull hashicorp/consul-website + @echo "==> Starting website in Docker..." + @docker run \ + --interactive \ + --rm \ + --tty \ + --workdir "/website" \ + --volume "$(shell pwd):/website" \ + --volume "/website/node_modules" \ + --publish "3000:3000" \ + hashicorp/consul-website \ + npm start +# This command will generate a static version of the website to the "out" folder. build: + @echo "==> Downloading latest Docker image..." + @docker pull hashicorp/consul-website @echo "==> Starting build in Docker..." @docker run \ --interactive \ --rm \ --tty \ + --workdir "/website" \ --volume "$(shell pwd):/website" \ - --volume "/website/source/docs/guides" \ - --volume "$(shell pwd)/source/docs/guides/index.html.md:/website/source/docs/guides/index.html.md" \ - -e "ENV=production" \ - hashicorp/middleman-hashicorp:${VERSION} \ - bundle exec middleman build --verbose --clean + --volume "/website/node_modules" \ + hashicorp/consul-website \ + npm run static -website: +# If you are changing node dependencies locally, run this to generate a new +# local Docker image with the dependency changes included. +build-image: + @echo "==> Building Docker image..." + @docker build -t hashicorp-consul-website-local . + +# Use this if you have run `build-image` to use the locally built image +# rather than our CI-generated image to test dependency changes. +website-local: @echo "==> Starting website in Docker..." @docker run \ --interactive \ --rm \ --tty \ - --publish "4567:4567" \ - --publish "35729:35729" \ + --workdir "/website" \ --volume "$(shell pwd):/website" \ - --volume "/website/source/docs/guides" \ - --volume "$(shell pwd)/source/docs/guides/index.html.md:/website/source/docs/guides/index.html.md" \ - hashicorp/middleman-hashicorp:${VERSION} + --volume "/website/node_modules" \ + --publish "3000:3000" \ + hashicorp-consul-website-local \ + npm start -.PHONY: build website +.DEFAULT_GOAL := website +.PHONY: build build-image website website-local diff -Nru consul-1.7.4+dfsg1/website/netlify.toml consul-1.8.7+dfsg1/website/netlify.toml --- consul-1.7.4+dfsg1/website/netlify.toml 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/netlify.toml 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18 @@ + +# This file sets configuration for Netlify +# ref: https://www.netlify.com/docs/netlify-toml-reference/ + +[build] + publish = "out" + command = "npm run static" + +[context.production] + environment = { HASHI_ENV = "production", NODE_ENV = "production"} + +[context.deploy-preview] + environment = { HASHI_ENV = "staging" } + +[[headers]] + for = "/*" + [headers.values] + X-Frame-Options = "SAMEORIGIN" diff -Nru consul-1.7.4+dfsg1/website/next.config.js consul-1.8.7+dfsg1/website/next.config.js --- consul-1.7.4+dfsg1/website/next.config.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/next.config.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,26 @@ +const withHashicorp = require('@hashicorp/nextjs-scripts') +const path = require('path') + +module.exports = withHashicorp({ + defaultLayout: true, + transpileModules: ['is-absolute-url', '@hashicorp/react-.*'], + mdx: { resolveIncludes: path.join(__dirname, 'pages/partials') }, +})({ + svgo: { plugins: [{ removeViewBox: false }] }, + experimental: { + modern: true, + rewrites: () => [ + { + source: '/api/:path*', + destination: '/api-docs/:path*', + }, + ], + }, + // Note: These are meant to be public, it's not a mistake that they are here + env: { + HASHI_ENV: process.env.HASHI_ENV || 'development', + SEGMENT_WRITE_KEY: 'IyzLrqXkox5KJ8XL4fo8vTYNGfiKlTCm', + BUGSNAG_CLIENT_KEY: '01625078d856ef022c88f0c78d2364f1', + BUGSNAG_SERVER_KEY: 'be8ed0d0fc887d547284cce9e98e60e5', + }, +}) diff -Nru consul-1.7.4+dfsg1/website/.npm-upgrade.json consul-1.8.7+dfsg1/website/.npm-upgrade.json --- consul-1.7.4+dfsg1/website/.npm-upgrade.json 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/.npm-upgrade.json 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,8 @@ +{ + "ignore": { + "marked": { + "versions": "0.8.2", + "reason": "IE breaks" + } + } +} \ No newline at end of file diff -Nru consul-1.7.4+dfsg1/website/package.json consul-1.8.7+dfsg1/website/package.json --- consul-1.7.4+dfsg1/website/package.json 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/package.json 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,65 @@ +{ + "name": "consul-docs", + "description": "Description of your website", + "version": "0.0.1", + "author": "HashiCorp", + "dependencies": { + "@hashicorp/nextjs-scripts": "11.1.1", + "@hashicorp/react-alert": "2.0.3", + "@hashicorp/react-alert-banner": "4.2.0", + "@hashicorp/react-button": "2.2.4", + "@hashicorp/react-call-to-action": "0.2.4", + "@hashicorp/react-case-study-slider": "2.1.4", + "@hashicorp/react-code-block": "1.2.9", + "@hashicorp/react-content": "4.0.2", + "@hashicorp/react-docs-page": "5.0.0", + "@hashicorp/react-featured-slider": "1.1.4", + "@hashicorp/react-global-styles": "4.4.2", + "@hashicorp/react-hashi-stack-menu": "^1.0.3", + "@hashicorp/react-head": "1.1.3", + "@hashicorp/react-image": "2.0.3", + "@hashicorp/react-inline-svg": "1.0.2", + "@hashicorp/react-logo-grid": "2.1.4", + "@hashicorp/react-product-downloader": "4.1.1", + "@hashicorp/react-product-features-list": "1.0.3", + "@hashicorp/react-search": "^2.1.0", + "@hashicorp/react-section-header": "2.0.2", + "@hashicorp/react-subnav": "3.2.6", + "@hashicorp/react-text-and-content": "4.1.4", + "@hashicorp/react-text-split": "0.4.0", + "@hashicorp/react-text-split-with-code": "0.2.0", + "@hashicorp/react-text-split-with-image": "1.4.0", + "@hashicorp/react-text-split-with-logo-grid": "1.3.0", + "@hashicorp/react-use-cases": "1.0.6", + "@hashicorp/react-vertical-text-block-list": "2.0.3", + "babel-plugin-import-glob-array": "0.2.0", + "next": "9.4.4", + "nuka-carousel": "4.7.0", + "react": "16.13.1", + "react-device-detect": "1.13.1", + "react-dom": "16.13.1" + }, + "devDependencies": { + "dart-linkcheck": "2.0.15", + "husky": "4.2.5", + "prettier": "2.0.5" + }, + "husky": { + "hooks": { + "pre-commit": "next-hashicorp precommit" + } + }, + "main": "index.js", + "scripts": { + "build": "node --max-old-space-size=4096 ./node_modules/.bin/next build", + "dynamic": "NODE_ENV=production next build && next start", + "export": "node --max-old-space-size=4096 ./node_modules/.bin/next export", + "format": "next-hashicorp format", + "generate:component": "next-hashicorp generate component", + "generate:readme": "next-hashicorp markdown-blocks README.md", + "lint": "next-hashicorp lint", + "start": "rm -rf .next/cache/next-babel-loader/ && next dev", + "static": "npm run build && npm run export && cp _redirects out/.", + "linkcheck": "linkcheck https://consul.io" + } +} diff -Nru consul-1.7.4+dfsg1/website/package-lock.json consul-1.8.7+dfsg1/website/package-lock.json --- consul-1.7.4+dfsg1/website/package-lock.json 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/package-lock.json 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,18722 @@ +{ + "name": "consul-docs", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.4.0.tgz", + "integrity": "sha512-2AiKgN7DpFypkRCRkpqH7waXXyFdcnsPWzmN8sLHrB/FfXqgmsQb3pGft+9YHZIDQ0vAnfgMxSGgMhMGW+0Qnw==", + "requires": { + "@algolia/cache-common": "4.4.0" + } + }, + "@algolia/cache-common": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.4.0.tgz", + "integrity": "sha512-PrIgoMnXaDWUfwOekahro543pgcJfgRu/nd/ZQS5ffem3+Ow725eZY6HDpPaQ1k3cvLii9JH6V2sNJConjqUKA==" + }, + "@algolia/cache-in-memory": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.4.0.tgz", + "integrity": "sha512-9+XlUB0baDU/Dp9URRHPp6Q37YmTO0QmgPWt9+n+wqZrRL0jR3Jezr4jCT7RemqGMxBiR+YpnqaUv0orpb0ptw==", + "requires": { + "@algolia/cache-common": "4.4.0" + } + }, + "@algolia/client-account": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.4.0.tgz", + "integrity": "sha512-Kynu3cMEs0clTLf674rtrCF+FWR/JwlQxKlIWsPzvLBRmNXdvYej9YBcNaOr4OTQFCCZn9JVE8ib91Z7J4IL1Q==", + "requires": { + "@algolia/client-common": "4.4.0", + "@algolia/client-search": "4.4.0", + "@algolia/transporter": "4.4.0" + } + }, + "@algolia/client-analytics": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.4.0.tgz", + "integrity": "sha512-GQyjQimKAc9sZbafxln9Wk7j4pEYiORv28MZkZ+0Bjt7WNXIeO7OgOOECVpQHm9buyV6hCKpNtJcbb5/syRzdQ==", + "requires": { + "@algolia/client-common": "4.4.0", + "@algolia/client-search": "4.4.0", + "@algolia/requester-common": "4.4.0", + "@algolia/transporter": "4.4.0" + } + }, + "@algolia/client-common": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.4.0.tgz", + "integrity": "sha512-a3yr6UhzjWPHDG/8iGp9UvrDOm1aeHVWJIf0Nj/cIvqX5tNCEIo4IMe59ovApkDgLOIpt/cLsyhn9/FiPXRhJA==", + "requires": { + "@algolia/requester-common": "4.4.0", + "@algolia/transporter": "4.4.0" + } + }, + "@algolia/client-recommendation": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.4.0.tgz", + "integrity": "sha512-sBszbQH46rko6w2fdEG77ma8+fAg0SDkLZGxWhv4trgcnYGUBFl2dcpEPt/6koto9b4XYlf+eh+qi6iGvYqRPg==", + "requires": { + "@algolia/client-common": "4.4.0", + "@algolia/requester-common": "4.4.0", + "@algolia/transporter": "4.4.0" + } + }, + "@algolia/client-search": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.4.0.tgz", + "integrity": "sha512-jqWcxCUyPPHnHreoMb2PnN9iHTP+V/nL62R84XuTRDE3VgTnhm4ZnqyuRdzZQqaz+gNy5znav64TmQ9FN9WW5g==", + "requires": { + "@algolia/client-common": "4.4.0", + "@algolia/requester-common": "4.4.0", + "@algolia/transporter": "4.4.0" + } + }, + "@algolia/logger-common": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.4.0.tgz", + "integrity": "sha512-2vjmSENLaKNuF+ytRDysfWxxgFG95WXCHwHbueThdPMCK3hskkwqJ0Y/pugKfzl+54mZxegb4BYfgcCeuaHVUw==" + }, + "@algolia/logger-console": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.4.0.tgz", + "integrity": "sha512-st/GUWyKvr6YM72OOfF+RmpdVGda3BPXbQ+chpntUq1WyVkyZXGjSmH1IcBVlua27GzxabwOUYON39cF3x10/g==", + "requires": { + "@algolia/logger-common": "4.4.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.4.0.tgz", + "integrity": "sha512-V3a4hXlNch355GnWaT1f5QfXhROpsjT6sd0Znq29gAhwLqfBExhLW6Khdkv5pENC0Qy7ClVhdXFrBL9QCQer1g==", + "requires": { + "@algolia/requester-common": "4.4.0" + } + }, + "@algolia/requester-common": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.4.0.tgz", + "integrity": "sha512-jPinHlFJEFokxQ5b3JWyjQKKn+FMy0hH99PApzOgQAYOSiFRXiPEZp6LeIexDeLLu7Y3eRt/3nHvjPKa6PmRRw==" + }, + "@algolia/requester-node-http": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.4.0.tgz", + "integrity": "sha512-b7HC9C/GHxiV4+0GpCRTtjscvwarPr3dGm4CAhb6AkNjgjRcFUNr1NfsF75w3WVmzmt79/7QZihddztDdVMGjw==", + "requires": { + "@algolia/requester-common": "4.4.0" + } + }, + "@algolia/transporter": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.4.0.tgz", + "integrity": "sha512-Xxzq91DEEeKIzT3DU46n4LEyTGAKZNtSHc2H9wvIY5MYwhZwEribmXXZ6k8W1FvBvzggv3juu0SP+xwGoR7F0w==", + "requires": { + "@algolia/cache-common": "4.4.0", + "@algolia/logger-common": "4.4.0", + "@algolia/requester-common": "4.4.0" + } + }, + "@ampproject/toolbox-core": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-core/-/toolbox-core-2.5.4.tgz", + "integrity": "sha512-KjHyR0XpQyloTu59IaatU2NCGT5zOhWJtVXQ4Uj/NUaRriN6LlJlzHBxtXmPIb0YHETdD63ITtDvqZizZPYFag==", + "requires": { + "cross-fetch": "3.0.5", + "lru-cache": "5.1.1" + }, + "dependencies": { + "cross-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", + "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", + "requires": { + "node-fetch": "2.6.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "@ampproject/toolbox-optimizer": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.4.0.tgz", + "integrity": "sha512-Bmb+eMF9/VB3H0qPdZy0V5yPSkWe5RwuGbXiMxzqYdJgmMat+NL75EtozQnlpa0uBlESnOGe7bMojm/SA1ImrA==", + "requires": { + "@ampproject/toolbox-core": "^2.4.0-alpha.1", + "@ampproject/toolbox-runtime-version": "^2.4.0-alpha.1", + "@ampproject/toolbox-script-csp": "^2.3.0", + "@ampproject/toolbox-validator-rules": "^2.3.0", + "cssnano": "4.1.10", + "domhandler": "3.0.0", + "domutils": "2.1.0", + "htmlparser2": "4.1.0", + "lru-cache": "5.1.1", + "normalize-html-whitespace": "1.0.0", + "postcss-safe-parser": "4.0.2", + "terser": "4.6.13" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + }, + "domutils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", + "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", + "requires": { + "dom-serializer": "^0.2.1", + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "@ampproject/toolbox-runtime-version": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.5.4.tgz", + "integrity": "sha512-7vi/F91Zb+h1CwR8/on/JxZhp3Hhz6xJOOHxRA025aUFEFHV5c35B4QbTdt2MObWZrysogXFOT8M95dgU/hsKw==", + "requires": { + "@ampproject/toolbox-core": "^2.5.4" + } + }, + "@ampproject/toolbox-script-csp": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz", + "integrity": "sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ==" + }, + "@ampproject/toolbox-validator-rules": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.5.4.tgz", + "integrity": "sha512-bS7uF+h0s5aiklc/iRaujiSsiladOsZBLrJ6QImJDXvubCAQtvE7om7ShlGSXixkMAO0OVMDWyuwLlEy8V1Ing==", + "requires": { + "cross-fetch": "3.0.5" + }, + "dependencies": { + "cross-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", + "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", + "requires": { + "node-fetch": "2.6.0" + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + } + } + }, + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", + "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", + "requires": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/core": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", + "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "requires": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", + "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/generator": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "requires": { + "@babel/types": "^7.9.6", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "requires": { + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.4.tgz", + "integrity": "sha512-LyacH/kgQPgLAuaWrvvq1+E7f5bLyT8jXCh7nM67sRsy2cpIGfgWJ+FCnAKQXfY+F0tXUaN6FqLkp4JiCzdK8Q==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "requires": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", + "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", + "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.4", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "requires": { + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "requires": { + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" + }, + "@babel/helper-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", + "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/helper-replace-supers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + }, + "@babel/helper-wrap-function": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/helpers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", + "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", + "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", + "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.9.5" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", + "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", + "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", + "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", + "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", + "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", + "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", + "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", + "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + } + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + } + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + } + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.4.tgz", + "integrity": "sha512-FTK3eQFrPv2aveerUSazFmGygqIdTtvskG50SnGnbEUnRPcGx2ylBhdFIzoVS1ty44hEgcPoCAyw5r3VDEq+Ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz", + "integrity": "sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", + "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", + "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.4.tgz", + "integrity": "sha512-3WpXIKDJl/MHoAN0fNkSr7iHdUMHZoppXjf2HJ9/ed5Xht5wNIsXllJXdityKOxeA3Z8heYRb1D3p2H5rfCdPw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-typescript": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "@babel/preset-env": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz", + "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==", + "requires": { + "@babel/compat-data": "^7.9.6", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.5", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.9.5", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.9.0", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.6", + "@babel/plugin-transform-modules-commonjs": "^7.9.6", + "@babel/plugin-transform-modules-systemjs": "^7.9.6", + "@babel/plugin-transform-modules-umd": "^7.9.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.9.5", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.6", + "browserslist": "^4.11.1", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-react-display-name": "^7.8.3", + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" + } + }, + "@babel/preset-typescript": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", + "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-typescript": "^7.9.0" + } + }, + "@babel/runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", + "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@bugsnag/browser": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.3.0.tgz", + "integrity": "sha512-yRidv41Mw9rYXYvU1LTYQ/FEcdKfLhCtkjLnoxP84rDVnOJ0s2HshkCwGHTTwcLZ5sN6TOkih7jNQBaxG82T1g==", + "requires": { + "@bugsnag/core": "^7.3.0" + } + }, + "@bugsnag/core": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.3.0.tgz", + "integrity": "sha512-Sa24robOiIpj4AmqHwM+oEZM/QN1P+ixwQtvdLZ/Rc0YJYYh2I+eITAaFGlz9uDao/bsWLNUedq8XyNZd1IxRQ==", + "requires": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "@bugsnag/cuid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.0.tgz", + "integrity": "sha512-LOt8aaBI+KvOQGneBtpuCz3YqzyEAehd1f3nC5yr9TIYW1+IzYKa2xWS4EiMz5pPOnRPHkyyS5t/wmSmN51Gjg==" + }, + "@bugsnag/js": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.2.0.tgz", + "integrity": "sha512-tEt0/rHWKdl0VhpnECY/sfjH0SZB7a2EX3oLz6IcSGoTEsm6V228DMa9AEtgk/0cdvBfriYy63zaAG/WUoCLaQ==", + "requires": { + "@bugsnag/browser": "^7.2.0", + "@bugsnag/node": "^7.2.0" + } + }, + "@bugsnag/node": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.3.0.tgz", + "integrity": "sha512-6zkHqHKcJXXq6q6sQUJBmNj2M6NpP2g4v6tOqDTK+nOSuUKXP8uLZbecDVcogdBj3ABGPI6Bq7AtpBlUeKRiSw==", + "requires": { + "@bugsnag/core": "^7.3.0", + "byline": "^5.0.0", + "error-stack-parser": "^2.0.2", + "iserror": "^0.0.2", + "pump": "^3.0.0", + "stack-generator": "^2.0.3" + } + }, + "@bugsnag/plugin-react": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.2.0.tgz", + "integrity": "sha512-JgJArvaEMFh4MzW7rJ/XoOts86JeTi+odIMRf4qk2Lc9uVWFSGAOFceDlk9zfgoYUJWddJLaC6nEp8joQd1v0Q==", + "requires": { + "@bugsnag/core": "^7.2.0" + } + }, + "@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@csstools/normalize.css": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", + "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@hashicorp/js-utils": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@hashicorp/js-utils/-/js-utils-1.0.10.tgz", + "integrity": "sha512-59AS4kK3EURCTU9ibJmk8MVT8i3qc5tEHv985dxECZrWTL4+3kKr45u/13OPpcRlpUSIKeWEsN9FL1f5/ztHww==" + }, + "@hashicorp/mktg-assets": { + "version": "1.0.0-alpha.20", + "resolved": "https://registry.npmjs.org/@hashicorp/mktg-assets/-/mktg-assets-1.0.0-alpha.20.tgz", + "integrity": "sha512-ajCBCcxDpiwfxsh8wMGHu9GuKcNRmuiFyfgUiRXipvLqHFnNLZwZfBwaFxgCT8EK1jxdkfUWJTFkPY3rXmIo2A==" + }, + "@hashicorp/nextjs-scripts": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@hashicorp/nextjs-scripts/-/nextjs-scripts-11.1.1.tgz", + "integrity": "sha512-FL8l2W+WhbpmOHt54sx8endsT5ThxvJtfjXu+8CWV+KNlI5ty0ED4oLnmf9yrT+kDO/FYuyuqJJiK3PSNvLvGA==", + "requires": { + "@bugsnag/js": "7.2.0", + "@bugsnag/plugin-react": "7.2.0", + "@hashicorp/react-consent-manager": "2.1.3", + "@hashicorp/react-enterprise-alert": "^2.1.0", + "@hashicorp/react-tabs": "^0.4.0", + "@hashicorp/remark-plugins": "3.0.0", + "@mapbox/rehype-prism": "0.5.0", + "@mdx-js/react": "^1.6.6", + "@next/bundle-analyzer": "9.4.4", + "@typescript-eslint/eslint-plugin": "3.6.0", + "@typescript-eslint/parser": "3.6.0", + "babel-eslint": "10.1.0", + "chalk": "4.1.0", + "debug": "4.1.1", + "ejs": "3.1.3", + "eslint": "7.4.0", + "eslint-config-prettier": "6.11.0", + "eslint-plugin-jsx-a11y": "6.3.1", + "eslint-plugin-prettier": "3.1.4", + "eslint-plugin-react": "7.20.3", + "fs-extra": "9.0.1", + "globby": "^11.0.1", + "imagemin-mozjpeg": "^9.0.0", + "imagemin-optipng": "^8.0.0", + "imagemin-svgo": "^8.0.0", + "inquirer": "7.3.0", + "lint-staged": "10.2.11", + "next-mdx-enhanced": "3.0.0", + "next-optimized-images": "2.6.1", + "next-transpile-modules": "3.3.0", + "nprogress": "0.2.0", + "open": "7.0.4", + "postcss-flexbugs-fixes": "4.2.1", + "postcss-normalize": "9.0.0", + "postcss-preset-env": "6.7.0", + "readdirp": "3.4.0", + "rehype-katex": "^3.0.0", + "remark-math": "^2.0.1", + "rivet-graphql": "0.2.0", + "signale": "1.4.0", + "stylelint": "^13.6.1", + "stylelint-config-css-modules": "^2.2.0", + "stylelint-config-prettier": "^8.0.2", + "stylelint-config-standard": "^20.0.0", + "stylelint-media-use-custom-media": "^2.0.0", + "stylelint-order": "^4.1.0", + "stylelint-use-nesting": "^3.0.0", + "stylelint-value-no-unknown-custom-properties": "^3.0.0", + "typescript": "3.9.6", + "typewriter": "7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@hashicorp/react-alert": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert/-/react-alert-2.0.3.tgz", + "integrity": "sha512-03qWTvECGrG2Z0cm/w71J/KmSBJrUem1QTdRuGFHLTPGgAdIgI90xWpYWmUjGw7gXrxJ/q1yY2JwbfpHwRrpPg==" + }, + "@hashicorp/react-alert-banner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert-banner/-/react-alert-banner-4.2.0.tgz", + "integrity": "sha512-mLi5caKU41L6ZMqQ/mQN9jrgPESzxIqxoKchmB0TpJqwHnUG46UPokWbQovXgtPnAUrXDyLYU0Sp3gaIsDuI9Q==", + "requires": { + "js-cookie": "2.2.0", + "slugify": "1.3.4" + }, + "dependencies": { + "js-cookie": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz", + "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=" + }, + "slugify": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.4.tgz", + "integrity": "sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw==" + } + } + }, + "@hashicorp/react-button": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.2.4.tgz", + "integrity": "sha512-jEjoN31nAI9K/4FDkUORjRhRHsH8rFIukR15wTmL72x7T0fZiBzNkB4OBAnLh2HQExLPKJzTGv+RaepJgQru/Q==", + "requires": { + "@hashicorp/react-global-styles": "^4.4.2", + "@hashicorp/react-inline-svg": "^1.0.2", + "slugify": "^1.3.6" + } + }, + "@hashicorp/react-call-to-action": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-call-to-action/-/react-call-to-action-0.2.4.tgz", + "integrity": "sha512-CJl/mPvGMvoFrv6DRVR/UTv/+8twaZUrg63pPxKER4A+BFnOnFxj+/5gzqIy8CkPD8QOWRb0id30sJvyFaZo9Q==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-global-styles": "^4.4.2" + } + }, + "@hashicorp/react-case-study-slider": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-case-study-slider/-/react-case-study-slider-2.1.4.tgz", + "integrity": "sha512-a+I7Ruo4xrxT2/rlxUq6EVsvK9STcqPMdSC9mGesrGx9nR6POoyf5d3DkvWI//8irDyI/mv3uJ18jvq4K1OuVA==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-image": "^2.0.3", + "marked": "^0.7.0" + } + }, + "@hashicorp/react-code-block": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-1.2.9.tgz", + "integrity": "sha512-+zrcwEoKxlY8a2HR/wUJMuE9gbblt8mDoWlqjgKLAVYTqYvlsfk7Hfz/XXrJw7Cha1lv4jN4nH78zQlQ2Cfqzg==", + "requires": { + "@tippy.js/react": "^2.1.2", + "highlight.js": "^9.15.6" + }, + "dependencies": { + "@tippy.js/react": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tippy.js/react/-/react-2.2.3.tgz", + "integrity": "sha512-5XYvbQujzDj9r00JYEz/cBtm6DutjOdv2azdco53B+eWF7FDBCQfkLVn87wimfEpmGK0vqRQv/cwFxFcoOP98Q==", + "requires": { + "prop-types": "^15.6.2", + "tippy.js": "^4.3.4" + } + }, + "tippy.js": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-4.3.5.tgz", + "integrity": "sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA==", + "requires": { + "popper.js": "^1.14.7" + } + } + } + }, + "@hashicorp/react-consent-manager": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-consent-manager/-/react-consent-manager-2.1.3.tgz", + "integrity": "sha512-fTexdZn8bgiItSa3mpyMDCB0auIAz/1fxO/XXJcG+lxojGRqzkSYyaEqk6ckNvPDrY72VhYoLEOnM/pZO/dHEA==", + "requires": { + "@hashicorp/react-button": "^2.2.1", + "@hashicorp/react-toggle": "^1.0.1", + "@segment/in-eu": "^0.2.1", + "js-cookie": "^2.2.0", + "object-assign": "^4.1.1", + "unfetch": "^4.1.0" + } + }, + "@hashicorp/react-content": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-4.0.2.tgz", + "integrity": "sha512-wVrjV2yad+Y41drxsXeDGkfRXNbhQiup7T5yt9tqoF94d1mBgSDD005M9+DOOpAaJL+4WdCdwmwGoBCHSSF91g==" + }, + "@hashicorp/react-docs-page": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-5.0.0.tgz", + "integrity": "sha512-ZmPaUPBeFa6fbDj2SHlfVN7WXueu+kTRkhT+b974gvLptuKKB3c9xRe7s7xe4tJw/LJqlIkBGBFzw0hxToRIrA==", + "requires": { + "@hashicorp/react-content": "^4.0.2", + "@hashicorp/react-docs-sidenav": "^4.0.0", + "@hashicorp/react-head": "^1.1.3", + "@hashicorp/react-inline-svg": "^1.0.2" + } + }, + "@hashicorp/react-docs-sidenav": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-4.0.0.tgz", + "integrity": "sha512-tpQXaN0ReDYLDeII7JEThWwWU52D5GhG4EeWHBbf+WzTBfu+lysQvfNPL0RCTGFdoyVDlLCq4s1Yj+LHWwPtCw==", + "requires": { + "@hashicorp/react-link-wrap": "^0.0.3", + "fuzzysearch": "^1.0.3" + } + }, + "@hashicorp/react-enterprise-alert": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-enterprise-alert/-/react-enterprise-alert-2.1.2.tgz", + "integrity": "sha512-3nDFLo0jVyz1u+DKdJUs3tWqCTCS0hdrC9zkEMcx8HB76LvJRia++JjZrPUrO0+G9oHXe/VPw9UsMS0vJfm1Iw==", + "requires": { + "@hashicorp/js-utils": "^1.0.10" + } + }, + "@hashicorp/react-featured-slider": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-featured-slider/-/react-featured-slider-1.1.4.tgz", + "integrity": "sha512-KJKpJEL6EjyibgKRz3pcjD3KlL4HK3WK/OXWO8w/pdYfPtMcbejqbtuVupX9FGdqSVzTVFlsGBkW2y10ZDuCTg==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-image": "^2.0.3", + "marked": "^1.0.0" + }, + "dependencies": { + "marked": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.1.tgz", + "integrity": "sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw==" + } + } + }, + "@hashicorp/react-global-styles": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-global-styles/-/react-global-styles-4.4.2.tgz", + "integrity": "sha512-EprEFwymJJbrbIQmzMCODM6eYwew2OsgVa9EtWNE984/KFk71QWvbjKVjebqNB0vWdpwSt6+127kfOQsx8JolA==" + }, + "@hashicorp/react-hashi-stack-menu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-hashi-stack-menu/-/react-hashi-stack-menu-1.0.3.tgz", + "integrity": "sha512-bzO6fBodh61OrunYIMQKfGSJQUKIq70TQ74dt2trBPjBsgURHMCIkiMmKffjuSdJjhCxx2nb+y0/B/PwxxHxmg==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.2", + "slugify": "1.3.4" + }, + "dependencies": { + "slugify": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.4.tgz", + "integrity": "sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw==" + } + } + }, + "@hashicorp/react-head": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-head/-/react-head-1.1.3.tgz", + "integrity": "sha512-66Iz5cmHLEh7m0mWCbCiG3t+LM6RJaX7M72FQDyWWbUHm24WheDTpII4KYTpLgK9HM+UlaHW2pqFAwBzfAboCA==" + }, + "@hashicorp/react-image": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-2.0.3.tgz", + "integrity": "sha512-au1X6xUVG/Oad2MUAzJzCbzPi/Rcq/uhaVRrcDjaLya2wUaL5gS/aJVDwLRtV26qqjI81BVmz4gH6Lfpc4T1eQ==", + "requires": { + "object-assign": "^4.1.1", + "query-string": "5.1.1" + } + }, + "@hashicorp/react-inline-svg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz", + "integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw==" + }, + "@hashicorp/react-link-wrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-link-wrap/-/react-link-wrap-0.0.3.tgz", + "integrity": "sha512-BLH7SLMJZee8md+YU7seiOh0zpa7y8sEhEATYpK2ieFanXAQEgU58lNSC/V3ZdkSXrfyplftYuOj0E3APtE1pg==", + "requires": { + "is-absolute-url": "^3.0.3" + } + }, + "@hashicorp/react-logo-grid": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-logo-grid/-/react-logo-grid-2.1.4.tgz", + "integrity": "sha512-DR61bzRCKQqtCIzJHRai2HuJgZwct2SNVCEWWtmSEtmxG/ev7C9AfsgMSwDpd/01Id3xZZ3DUMtCy5UqDdUqhA==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-image": "^2.0.3", + "@tippy.js/react": "^2.1.2" + }, + "dependencies": { + "@tippy.js/react": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tippy.js/react/-/react-2.2.3.tgz", + "integrity": "sha512-5XYvbQujzDj9r00JYEz/cBtm6DutjOdv2azdco53B+eWF7FDBCQfkLVn87wimfEpmGK0vqRQv/cwFxFcoOP98Q==", + "requires": { + "prop-types": "^15.6.2", + "tippy.js": "^4.3.4" + } + }, + "tippy.js": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-4.3.5.tgz", + "integrity": "sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA==", + "requires": { + "popper.js": "^1.14.7" + } + } + } + }, + "@hashicorp/react-product-downloader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-product-downloader/-/react-product-downloader-4.1.1.tgz", + "integrity": "sha512-A+7tPSoQJ18nB4TKKHyCZtws2ZZp7svhrsOjHYxiv6uO+M+uPK2tRkFKt4TgcP5vYdN/yQhROS/8m803UDGoiw==", + "requires": { + "@hashicorp/react-button": "^2.2.4" + } + }, + "@hashicorp/react-product-features-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-product-features-list/-/react-product-features-list-1.0.3.tgz", + "integrity": "sha512-THxRGt6KfkAxEpQSkp9Ws7uqgDashw0PEklm7KTVyAKck6z7zHhpCKZ5LGoQ6s70qWKyTarGr7lX15DftaoMPA==", + "requires": { + "@hashicorp/react-image": "^2.0.3" + } + }, + "@hashicorp/react-search": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.1.0.tgz", + "integrity": "sha512-vaTht+2G9ipsVyusK3b3TtUpuy9ccsxj3NMSWXJyGsoT39K1Oovb8aLiIlbUU5Ll72KEi5yq5OS3WAJDdSqW+g==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.2", + "@hashicorp/remark-plugins": "^3.0.0", + "algoliasearch": "^4.4.0", + "dotenv": "^8.2.0", + "glob": "^7.1.6", + "gray-matter": "^4.0.2", + "react-instantsearch-dom": "^6.7.0", + "remark": "^12.0.1", + "search-insights": "^1.6.0", + "unist-util-visit": "^2.0.3" + } + }, + "@hashicorp/react-section-header": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-section-header/-/react-section-header-2.0.2.tgz", + "integrity": "sha512-tGDuRJ37VZS+xoMmGOocVzoBKmohaoEXRW/+jmgH/j1GxXmO9GEKks7NUE9xNlTlUGzyza0rNVJlUY+QtRyQ2g==", + "requires": { + "@hashicorp/js-utils": "^1.0.10", + "marked": "^0.7.0" + } + }, + "@hashicorp/react-subnav": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@hashicorp/react-subnav/-/react-subnav-3.2.6.tgz", + "integrity": "sha512-+kO0jLQ574WZRR6R7yzZcOK/hkvweZG09S46CdMND0EU54W9/5prNeIEgVB3w5w7pQl50M7wTY9S6k+3kAdtIw==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-global-styles": "^4.4.2", + "@hashicorp/react-inline-svg": "^1.0.2", + "@hashicorp/react-link-wrap": "^1.0.2", + "isomorphic-unfetch": "^3.0.0" + }, + "dependencies": { + "@hashicorp/react-link-wrap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-link-wrap/-/react-link-wrap-1.0.2.tgz", + "integrity": "sha512-Eypcd6LkYFb56cltIARJTlcKQPkZDkRXU3sDxLz+vlQDl5kmxFsh5iiPnRn2/JkpOwfC91x92OXpBNUszqHfbA==" + } + } + }, + "@hashicorp/react-tabs": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-0.4.2.tgz", + "integrity": "sha512-sPW1zBdlAbDU7uK57U1/TUKhQbkqcLrxO6mwQLfybuEI1pRmljGK1h9hTXOfHRy9bBxGQeJ1FtmbqcvKspP/Kg==", + "requires": { + "@hashicorp/react-global-styles": "^4.4.2", + "@hashicorp/react-inline-svg": "^1.0.2", + "@tippy.js/react": "^3.1.1" + } + }, + "@hashicorp/react-text-and-content": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-text-and-content/-/react-text-and-content-4.1.4.tgz", + "integrity": "sha512-7AhwpPe5NWEosK/pIqFZ302iMnmb7lEb2ktubDozKTz0VjmCmLuvXB3odrIaprIk9078QbzCmOtU784kAWGcBA==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-code-block": "^1.2.9", + "@hashicorp/react-image": "^2.0.3", + "@hashicorp/react-logo-grid": "^2.1.4", + "marked": "^0.7.0" + } + }, + "@hashicorp/react-text-split": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-text-split/-/react-text-split-0.4.0.tgz", + "integrity": "sha512-FYWlkMO6MxPhjv7G9P0AJcEUchjXfJzMgx7y9Lpdj0zQpTR9UPpEIfyMrJrOCAxfmvP/w6fzKDaGCMU/AdiaiQ==", + "requires": { + "@hashicorp/react-button": "^2.2.4", + "@hashicorp/react-global-styles": "^2.1.11-fonts.0" + }, + "dependencies": { + "@hashicorp/react-global-styles": { + "version": "2.1.11-fonts.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-global-styles/-/react-global-styles-2.1.11-fonts.0.tgz", + "integrity": "sha512-Esy8CYsqTtYsEDWYaS3G8XTOl0HwzvYJZLtmSbcLwxYcK3hntNO4Sfko7y5hLWNNxN8CN0Gm/QujKlMnK7LmnQ==" + } + } + }, + "@hashicorp/react-text-split-with-code": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-text-split-with-code/-/react-text-split-with-code-0.2.0.tgz", + "integrity": "sha512-GF+TJuK9UYL98rjX4G3DQm0yAJItF2mZcdINUKAL26CcnWz+2XwX8GxvwxzNXnkHs+YxYGqVHQH205iBEvxSXg==", + "requires": { + "@hashicorp/react-code-block": "^1.2.9", + "@hashicorp/react-global-styles": "^4.4.2", + "@hashicorp/react-text-split": "^0.4.0" + } + }, + "@hashicorp/react-text-split-with-image": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-text-split-with-image/-/react-text-split-with-image-1.4.0.tgz", + "integrity": "sha512-/ozKEygzSmpo/JioMM2t9kgIEzReQLLAy1fUlktDK8XqKr93pV3Ndavh4CT64Mxxv7wq6iSFsiadufLVlYHq9A==", + "requires": { + "@hashicorp/react-image": "^2.0.3", + "@hashicorp/react-text-split": "^0.4.0" + } + }, + "@hashicorp/react-text-split-with-logo-grid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-text-split-with-logo-grid/-/react-text-split-with-logo-grid-1.3.0.tgz", + "integrity": "sha512-R3fRbObGp0zcByosOdhcaj8SvlL6NIDmhAYThO6QloHULy1MqCTVlRI2uxXFpY5zWrOpExVrThBgR8GJZkfGwQ==", + "requires": { + "@hashicorp/mktg-assets": "^1.0.0-alpha.3", + "@hashicorp/react-global-styles": "^2.1.17-fonts.0", + "@hashicorp/react-image": "^2.0.3", + "@hashicorp/react-text-split": "^0.4.0" + }, + "dependencies": { + "@hashicorp/react-global-styles": { + "version": "2.1.17-fonts.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-global-styles/-/react-global-styles-2.1.17-fonts.0.tgz", + "integrity": "sha512-76CdVVac6yiKUScd55m+AxKx238QZjNhfespn/PpoGkyECYGzaYrdT20GpzIStFTia5Db4/fnGJcECpwcQpCxA==" + } + } + }, + "@hashicorp/react-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-toggle/-/react-toggle-1.0.3.tgz", + "integrity": "sha512-8RImlv34csyEh9hbPPZxFOHKtoHGvZJj8yQshafeggm8AOM8C5BOnx9nz/l6OBUOngn/2wOPulxOVB8AtcvaKA==" + }, + "@hashicorp/react-use-cases": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@hashicorp/react-use-cases/-/react-use-cases-1.0.6.tgz", + "integrity": "sha512-MvX5ZBfXMScOPFloD9N76w0tUcjY2U7yvAeFn41xX9umGhcMk0SRTEHR2DRwipFm9d+8ktmSZEwiAnC/lr1EBA==", + "requires": { + "@hashicorp/react-image": "^2.0.3", + "marked": "^0.7.0" + } + }, + "@hashicorp/react-vertical-text-block-list": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-vertical-text-block-list/-/react-vertical-text-block-list-2.0.3.tgz", + "integrity": "sha512-YMsGw9zTHGcn4TgS4MkSFDQ32j906c/fz7BHSbotrKO9A0duuCObeaeic3hkCfCe+8a7IDlYImMrKgB9Hi1muw==", + "requires": { + "@hashicorp/react-image": "^2.0.3", + "@hashicorp/react-link-wrap": "^0.0.3", + "marked": "^0.7.0" + } + }, + "@hashicorp/remark-plugins": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.0.0.tgz", + "integrity": "sha512-K5gn2kXW8zs2MSduobwnv5hXPANXfuH3bL5Ji42UoExoUmbitbIONtsn5N8ckeUVL+Ykk8dlMsb7gZkFHalLZg==", + "requires": { + "github-slugger": "^1.3.0", + "remark": "^11.0.2", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.2" + }, + "dependencies": { + "remark": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-11.0.2.tgz", + "integrity": "sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w==", + "requires": { + "remark-parse": "^7.0.0", + "remark-stringify": "^7.0.0", + "unified": "^8.2.0" + } + } + } + }, + "@mapbox/rehype-prism": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/rehype-prism/-/rehype-prism-0.5.0.tgz", + "integrity": "sha512-sE5EetmSR6At7AU2s3N2rFUUqm8BpvxUcGcesgfTZgqF7bQoekqsKxLX8gunIDjZs34acZJ6fgPFHepEWnYKCQ==", + "requires": { + "hast-util-to-string": "^1.0.3", + "refractor": "^3.0.0", + "unist-util-visit": "^2.0.2" + } + }, + "@mdx-js/loader": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.16.tgz", + "integrity": "sha512-jYIAav17lXmEvweO6bzbsqY9mRTm49UeXXSZPAB81uCX8j91Pgi50Z0NnEN777yQEgGm2Z5PMtnJdxGFQIAjJQ==", + "requires": { + "@mdx-js/mdx": "1.6.16", + "@mdx-js/react": "1.6.16", + "loader-utils": "2.0.0" + } + }, + "@mdx-js/mdx": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.16.tgz", + "integrity": "sha512-jnYyJ0aCafCIehn3GjYcibIapaLBgs3YkoenNQBPcPFyyuUty7B3B07OE+pMllhJ6YkWeP/R5Ax19x0nqTzgJw==", + "requires": { + "@babel/core": "7.10.5", + "@babel/plugin-syntax-jsx": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.16", + "babel-plugin-apply-mdx-type-prop": "1.6.16", + "babel-plugin-extract-import-names": "1.6.16", + "camelcase-css": "2.0.1", + "detab": "2.0.3", + "hast-util-raw": "6.0.0", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "9.1.0", + "remark-footnotes": "1.0.0", + "remark-mdx": "1.6.16", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.1.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "unified": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", + "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" + } + } + }, + "@mdx-js/react": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.16.tgz", + "integrity": "sha512-+FhuSVOPo7+4fZaRwWuCSRUcZkJOkZu0rfAbBKvoCg1LWb1Td8Vzi0DTLORdSvgWNbU6+EL40HIgwTOs00x2Jw==" + }, + "@mdx-js/util": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.16.tgz", + "integrity": "sha512-SFtLGIGZummuyMDPRL5KdmpgI8U19Ble28UjEWihPjGxF1Lgj8aDjLWY8KiaUy9eqb9CKiVCqEIrK9jbnANfkw==" + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@next/bundle-analyzer": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-9.4.4.tgz", + "integrity": "sha512-MRBk0SYyKvnTet3g6vzMbqTGtcGFIwge7XA+iUpZp45wdePYYPCIdSNz4xv1Dk4iPZRKTEMScLprsUPmtXGXnw==", + "requires": { + "webpack-bundle-analyzer": "3.6.1" + } + }, + "@next/react-dev-overlay": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-9.4.4.tgz", + "integrity": "sha512-UUAa8RbH7BeWDPCkagIkR4sUsyvTPlEdFrPZ9kGjf2+p8HkLHpcVY7y+XRnNvJQs4PsAF0Plh20FBz7t54U2iQ==", + "requires": { + "@babel/code-frame": "7.8.3", + "ally.js": "1.4.1", + "anser": "1.4.9", + "chalk": "4.0.0", + "classnames": "2.2.6", + "data-uri-to-buffer": "3.0.0", + "shell-quote": "1.7.2", + "source-map": "0.8.0-beta.0", + "stacktrace-parser": "0.1.10", + "strip-ansi": "6.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "requires": { + "whatwg-url": "^7.0.0" + } + } + } + }, + "@next/react-refresh-utils": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-9.4.4.tgz", + "integrity": "sha512-9nKENeWRI6kQk44TbeqleIVtNLfcS3klVUepzl/ZCqzR5Bi06uqBCD277hdVvG/wL1pxA+R/pgJQLqnF5E2wPQ==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@segment/in-eu": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@segment/in-eu/-/in-eu-0.2.1.tgz", + "integrity": "sha512-7JKBw/l3S9J0ldo/n6XPfd3sT89f300KOCvmZsd8sryVZOWlE4L2LMKT538I34bjRdaOd1aJ52TsOAZUOLqxiQ==", + "requires": { + "jstz": "^2.0.0" + } + }, + "@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "requires": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", + "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "requires": { + "remark": "^12.0.0", + "unist-util-find-all-after": "^3.0.1" + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tippy.js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@tippy.js/react/-/react-3.1.1.tgz", + "integrity": "sha512-KF45vW/jKh/nBXk/2zzTFslv/T46zOMkIoDJ56ymZ+M00yHttk58J5wZ29oqGqDIUnobWSZD+cFpbR4u/UUvgw==", + "requires": { + "prop-types": "^15.6.2", + "tippy.js": "^5.1.1" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, + "@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", + "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "requires": { + "@types/unist": "*" + } + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "requires": { + "@types/unist": "*" + } + }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=" + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@types/yoga-layout": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", + "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.6.0.tgz", + "integrity": "sha512-ubHlHVt1lsPQB/CZdEov9XuOFhNG9YRC//kuiS1cMQI6Bs1SsqKrEmZnpgRwthGR09/kEDtr9MywlqXyyYd8GA==", + "requires": { + "@typescript-eslint/experimental-utils": "3.6.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.6.0.tgz", + "integrity": "sha512-4Vdf2hvYMUnTdkCNZu+yYlFtL2v+N2R7JOynIOkFbPjf9o9wQvRwRkzUdWlFd2YiiUwJLbuuLnl5civNg5ykOQ==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.6.0", + "@typescript-eslint/typescript-estree": "3.6.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.6.0.tgz", + "integrity": "sha512-taghDxuLhbDAD1U5Fk8vF+MnR0yiFE9Z3v2/bYScFb0N1I9SK8eKHkdJl1DAD48OGFDMFTeOTX0z7g0W6SYUXw==", + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.6.0", + "@typescript-eslint/types": "3.6.0", + "@typescript-eslint/typescript-estree": "3.6.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.6.0.tgz", + "integrity": "sha512-JwVj74ohUSt0ZPG+LZ7hb95fW8DFOqBuR6gE7qzq55KDI3BepqsCtHfBIoa0+Xi1AI7fq5nCu2VQL8z4eYftqg==" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.6.0.tgz", + "integrity": "sha512-G57NDSABHjvob7zVV09ehWyD1K6/YUKjz5+AufObFyjNO4DVmKejj47MHjVHHlZZKgmpJD2yyH9lfCXHrPITFg==", + "requires": { + "@typescript-eslint/types": "3.6.0", + "@typescript-eslint/visitor-keys": "3.6.0", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.6.0.tgz", + "integrity": "sha512-p1izllL2Ubwunite0ITjubuMQRBGgjdVYwyG7lXPX8GbrA6qF0uwSRz9MnXZaHMxID4948gX0Ez8v9tUDi/KfQ==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + } + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "algoliasearch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.4.0.tgz", + "integrity": "sha512-Ag3wxe/nSodNl/1KbHibtkh7TNLptKE300/wnGVtszRjXivaWD6333nUpCumrYObHym/fHMHyLcmQYezXbAIWQ==", + "requires": { + "@algolia/cache-browser-local-storage": "4.4.0", + "@algolia/cache-common": "4.4.0", + "@algolia/cache-in-memory": "4.4.0", + "@algolia/client-account": "4.4.0", + "@algolia/client-analytics": "4.4.0", + "@algolia/client-common": "4.4.0", + "@algolia/client-recommendation": "4.4.0", + "@algolia/client-search": "4.4.0", + "@algolia/logger-common": "4.4.0", + "@algolia/logger-console": "4.4.0", + "@algolia/requester-browser-xhr": "4.4.0", + "@algolia/requester-common": "4.4.0", + "@algolia/requester-node-http": "4.4.0", + "@algolia/transporter": "4.4.0" + } + }, + "algoliasearch-helper": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", + "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", + "requires": { + "events": "^1.1.1" + }, + "dependencies": { + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + } + } + }, + "ally.js": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ally.js/-/ally.js-1.4.1.tgz", + "integrity": "sha1-n7fmuljvrE7pExyymqnuO1QLzx4=", + "requires": { + "css.escape": "^1.5.0", + "platform": "1.3.3" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "analytics-node": { + "version": "3.4.0-beta.1", + "resolved": "https://registry.npmjs.org/analytics-node/-/analytics-node-3.4.0-beta.1.tgz", + "integrity": "sha512-+0F/y4Asc5S2qhWcYss+iCob6TTXQktwbqlIk02gcZaRxpekCbnTbJu/rcaRooVHxqp9WSzUXiWCesJYPJETZQ==", + "requires": { + "@segment/loosely-validate-event": "^2.0.0", + "axios": "^0.18.1", + "axios-retry": "^3.0.2", + "lodash.isstring": "^4.0.1", + "md5": "^2.2.1", + "ms": "^2.0.0", + "remove-trailing-slash": "^0.1.0", + "uuid": "^3.2.1" + } + }, + "anser": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", + "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "arch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", + "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==" + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-rotate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/arr-rotate/-/arr-rotate-1.0.0.tgz", + "integrity": "sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "auto-bind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==" + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001115", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001115.tgz", + "integrity": "sha512-NZrG0439ePYna44lJX8evHX2L7Z3/z3qjVLnHgbBb/duNEnGo348u+BQS5o4HTWcrb++100dHFrU36IesIrC1Q==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==" + }, + "axios": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + } + }, + "axios-retry": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.8.tgz", + "integrity": "sha512-yPw5Y4Bg6Dgmhm35KaJFtlh23s1TecW0HsUerK4/IS1UKl0gtN2aJqdEKtVomiOS/bDo5w4P3sqgki/M10eF8Q==", + "requires": { + "is-retry-allowed": "^1.1.0" + } + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.16.tgz", + "integrity": "sha512-hjUd24Yhnr5NKtHpC2mcRBGjC6RUKGzSzjN9g5SdjT4WpL/JDlpmjyBf7vWsJJSXFvMIbzRyxF4lT9ukwOnj/w==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.16" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.16.tgz", + "integrity": "sha512-Da6Ra0sbA/1Iavli8LdMbTjyrsOPaxMm4lrKl8VJN4sJI5F64qy2EpLj3+5INLvNPfW4ddwpStbfP3Rf3jIgcw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "babel-plugin-import-glob-array": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-import-glob-array/-/babel-plugin-import-glob-array-0.2.0.tgz", + "integrity": "sha512-z7JhHOQ2hq4MBaNL9aAtDsilS12V01QNbhlZzPBIAkTymXmJhvkZVQIDvb6CJrfFN7wy9ScOTpwhv9RsvGSEWg==", + "requires": { + "glob": "^7.1.3", + "is-glob": "^4.0.0" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-transform-define": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-2.0.0.tgz", + "integrity": "sha512-0dv5RNRUlUKxGYIIErl01lpvi8b7W2R04Qcl1mCj70ahwZcgiklfXnFlh4FGnRh6aayCfSZKdhiMryVzcq5Dmg==", + "requires": { + "lodash": "^4.17.11", + "traverse": "0.6.6" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "requires": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "requires": { + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "requires": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "bin-wrapper": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "requires": { + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" + }, + "dependencies": { + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "browserify-sign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", + "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "requires": { + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001062", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz", + "integrity": "sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==" + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "ccount": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==" + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clipboard": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "requires": { + "is-regexp": "^2.0.0" + }, + "dependencies": { + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==" + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha1-ikeQFwAjjk/DIml3EjAibyS0Fak=" + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "requires": { + "arity-n": "^1.0.4" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", + "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", + "requires": { + "node-fetch": "2.6.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "^7.0.5" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + } + }, + "css-loader": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.3.tgz", + "integrity": "sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==", + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.27", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.0.3", + "schema-utils": "^2.6.6", + "semver": "^6.3.0" + }, + "dependencies": { + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "^7.0.5" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==" + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" + }, + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "csstype": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.11.tgz", + "integrity": "sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "d3-ease": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz", + "integrity": "sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ==" + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" + }, + "dart-linkcheck": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/dart-linkcheck/-/dart-linkcheck-2.0.15.tgz", + "integrity": "sha512-ZMvxkAyEpBTvBFk+DPjcK0ObNy8GM4gmrGG1qIu0EXb/zj25vjRWNnhLHKZw4JlOLo02oWlwDeqo98GuBlJcIg==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.0.tgz", + "integrity": "sha512-MJ6mFTZ+nPQO+39ua/ltwNePXrfdF3Ww0wP1Od7EePySXN1cP9XNqRQOG3FxTfipp8jx898LUCgBCEP11Qw/ZQ==", + "requires": { + "buffer-from": "^1.1.1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", + "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", + "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", + "requires": { + "domelementtype": "^2.0.1" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "requires": { + "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + } + } + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz", + "integrity": "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==", + "requires": { + "jake": "^10.6.1" + } + }, + "electron-to-chromium": { + "version": "1.3.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.444.tgz", + "integrity": "sha512-FtEGg/wRKT765QehmpRqMDaUbRam03Y3brE+6nUfoxCr9XgyEl+zAgN4+EraOJeyTGTGh27u7Mdx5Hl9qAhJPQ==" + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", + "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz", + "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz", + "integrity": "sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", + "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", + "requires": { + "@babel/runtime": "^7.10.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^3.5.4", + "axobject-query": "^2.1.2", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1", + "language-tags": "^1.0.5" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "emoji-regex": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.0.0.tgz", + "integrity": "sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w==" + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz", + "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==", + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + }, + "espree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz", + "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==", + "requires": { + "acorn": "^7.3.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "events": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "requires": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "execa": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", + "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + } + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "requires": { + "semver-regex": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "fork-ts-checker-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", + "requires": { + "babel-code-frame": "^6.22.0", + "chalk": "^2.4.1", + "chokidar": "^3.3.0", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==" + }, + "fuzzysearch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fuzzysearch/-/fuzzysearch-1.0.3.tgz", + "integrity": "sha1-3/yA9tawQiPyImqnndGUIxCW0Ag=" + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + } + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=" + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "graphql": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.3.0.tgz", + "integrity": "sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==" + }, + "graphql-request": { + "version": "2.1.0-next.3", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-2.1.0-next.3.tgz", + "integrity": "sha512-eXBvuvJLisrEjv6Roq7cp+X9fjW7pTSTF4M7lFlOtADQoisLbkOb5WXeZYbD4rbHJbOU4U7/JRxG73e16Rz6YQ==", + "requires": { + "cross-fetch": "^3.0.4" + } + }, + "gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "requires": { + "js-yaml": "^3.11.0", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handlebars": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hast-to-hyperscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", + "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", + "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", + "requires": { + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-is-element": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.4.tgz", + "integrity": "sha512-NFR6ljJRvDcyPP5SbV7MyPBgF47X3BsskLnmw1U34yL+X6YC0MoBx9EyMg8Jtx4FzGH95jw8+c1VPLHaRA0wDQ==" + }, + "hast-util-parse-selector": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" + }, + "hast-util-raw": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.0.tgz", + "integrity": "sha512-IQo6tv3bMMKxk53DljswliucCJOQxaZFCuKEJ7X80249dmJ1nA9LtOnnylsLlqTG98NjQ+iGcoLAYo9q5FRhRg==", + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz", + "integrity": "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==" + }, + "hast-util-to-text": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.0.tgz", + "integrity": "sha512-idXqFGmKInLKcFMbLvh0fldmV94o+aOdXL/z5H5XhPhUp/5vzycu7i15c8V9kC6W3XgGHg2uuiIcRJlWtESVfQ==", + "requires": { + "hast-util-is-element": "^1.0.0", + "repeat-string": "^1.0.0", + "unist-util-find-after": "^3.0.0" + } + }, + "hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz", + "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + }, + "domutils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.1.0.tgz", + "integrity": "sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==", + "requires": { + "dom-serializer": "^0.2.1", + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0" + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "husky": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", + "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^6.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "requires": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "imagemin-mozjpeg": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-9.0.0.tgz", + "integrity": "sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==", + "requires": { + "execa": "^4.0.0", + "is-jpg": "^2.0.0", + "mozjpeg": "^7.0.0" + } + }, + "imagemin-optipng": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz", + "integrity": "sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==", + "requires": { + "exec-buffer": "^3.0.0", + "is-png": "^2.0.0", + "optipng-bin": "^7.0.0" + } + }, + "imagemin-svgo": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-8.0.0.tgz", + "integrity": "sha512-++fDnnxsLT+4rpt8babwiIbzapgBzeS2Kgcy+CwgBvgSRFltBFhX2WnpCziMtxhRCzqJcCE9EcHWZP/sj+G3rQ==", + "requires": { + "is-svg": "^4.2.1", + "svgo": "^1.3.2" + } + }, + "img-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz", + "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "ink": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ink/-/ink-2.7.1.tgz", + "integrity": "sha512-s7lJuQDJEdjqtaIWhp3KYHl6WV3J04U9zoQ6wVc+Xoa06XM27SXUY57qC5DO46xkF0CfgXMKkKNcgvSu/SAEpA==", + "requires": { + "ansi-escapes": "^4.2.1", + "arrify": "^2.0.1", + "auto-bind": "^4.0.0", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "is-ci": "^2.0.0", + "lodash.throttle": "^4.1.1", + "log-update": "^3.0.0", + "prop-types": "^15.6.2", + "react-reconciler": "^0.24.0", + "scheduler": "^0.18.0", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "string-length": "^3.1.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "yoga-layout-prebuilt": "^1.9.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "log-update": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", + "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", + "requires": { + "ansi-escapes": "^3.2.0", + "cli-cursor": "^2.1.0", + "wrap-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ink-link": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ink-link/-/ink-link-1.1.0.tgz", + "integrity": "sha512-a716nYz4YDPu8UOA2PwabTZgTvZa3SYB/70yeXVmTOKFAEdMbJyGSVeNuB7P+aM2olzDj9AGVchA7W5QytF9uA==", + "requires": { + "prop-types": "^15.7.2", + "terminal-link": "^2.1.1" + } + }, + "ink-select-input": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/ink-select-input/-/ink-select-input-3.1.2.tgz", + "integrity": "sha512-PaLraGx8A54GhSkTNzZI8bgY0elAoa1jSPPe5Q52B5VutcBoJc4HE3ICDwsEGJ88l1Hw6AWjpeoqrq82a8uQPA==", + "requires": { + "arr-rotate": "^1.0.0", + "figures": "^2.0.0", + "lodash.isequal": "^4.5.0", + "prop-types": "^15.5.10" + }, + "dependencies": { + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "ink-spinner": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-3.1.0.tgz", + "integrity": "sha512-sPqmE4qeJ43vJFk9DGLd0wIqhMBAr3129ZqHPt7b847fVl+YTZ3g96khI82Db+FYE7v/Fc5B3lp4ZNtJfqpRUg==", + "requires": { + "cli-spinners": "^1.0.0", + "prop-types": "^15.5.10" + } + }, + "ink-text-input": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ink-text-input/-/ink-text-input-3.3.0.tgz", + "integrity": "sha512-gO4wrOf2ie3YuEARTIwGlw37lMjFn3Gk6CKIDrMlHb46WFMagZU7DplohjM24zynlqfnXA5UDEIfC2NBcvD8kg==", + "requires": { + "chalk": "^3.0.0", + "prop-types": "^15.5.10" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "inquirer": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.0.tgz", + "integrity": "sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + } + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz", + "integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-jpg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", + "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-png": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", + "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, + "is-svg": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz", + "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==", + "requires": { + "html-comment-regex": "^1.1.2" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-url-superb": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-3.0.0.tgz", + "integrity": "sha512-3faQP+wHCGDQT1qReM5zCPx2mxoal6DzbzquFlCYJLWyy4WPTved33ea2xFbX37z4NoriEwZGIYhFtx8RUB5wQ==", + "requires": { + "url-regex": "^5.0.0" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha1-vVNFH+L2aLnyQCwZZnh6qix8C/U=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-unfetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.0.0.tgz", + "integrity": "sha512-V0tmJSYfkKokZ5mgl0cmfQMTb7MLHsBMngTkbLY0eXvKqiVRRoZP04Ly+KhKrJfKtzC9E6Pp15Jo+bwh7Vi2XQ==", + "requires": { + "node-fetch": "^2.2.0", + "unfetch": "^4.0.0" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU=" + }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jstz": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/jstz/-/jstz-2.1.1.tgz", + "integrity": "sha512-8hfl5RD6P7rEeIbzStBz3h4f+BQHfq/ABtoU6gXKQv5OcZhnmrIpG7e1pYaZ8hS9e0mp+bxUj08fnDUbKctYyA==" + }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } + }, + "kapellmeister": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/kapellmeister/-/kapellmeister-3.0.1.tgz", + "integrity": "sha512-S7+gYcziMREv8RxG46138mb1O4Xf9II/bCxEJPYkhlZ7PgGWTlicgsyNad/DGc5oEAlWGLXE5ExLbTDVvJmgDA==", + "requires": { + "d3-timer": "^1.0.9" + } + }, + "katex": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz", + "integrity": "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==", + "requires": { + "commander": "^2.19.0" + } + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "known-css-properties": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz", + "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==" + }, + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==" + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "requires": { + "leven": "^3.1.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "lint-staged": { + "version": "10.2.11", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.11.tgz", + "integrity": "sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA==", + "requires": { + "chalk": "^4.0.0", + "cli-truncate": "2.1.0", + "commander": "^5.1.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "dedent": "^0.7.0", + "enquirer": "^2.3.5", + "execa": "^4.0.1", + "listr2": "^2.1.0", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + } + } + }, + "listr2": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.0.tgz", + "integrity": "sha512-nwmqTJYQQ+AsKb4fCXH/6/UmLCEDL1jkRAdSn9M6cEUzoRGrs33YD/3N86gAZQnGZ6hxV18XSdlBcJ1GTmetJA==", + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.2", + "through": "^2.3.8" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "requires": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==" + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + } + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "requires": { + "unist-util-visit": "^1.1.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + } + } + }, + "mdast-util-definitions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.0.tgz", + "integrity": "sha512-Akl2Vi9y9cSdr19/Dfu58PVwifPXuFt1IrHe7l+Crme1KvgUT+5z+cHLVcQVGCiNTZZcdqjnuv9vPkGsqWytWA==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.3", + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", + "trim-lines": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + }, + "mini-css-extract-plugin": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + } + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", + "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", + "requires": { + "minipass": "^3.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mozjpeg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.0.0.tgz", + "integrity": "sha512-mH7atSbIusVTO3A4H43sEdmveN3aWn54k6V0edefzCEvOsTrbjg5murY2TsNznaztWnIgaRbWxeLVp4IgKdedQ==", + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "native-url": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.1.tgz", + "integrity": "sha512-VL0XRW8nNBdSpxqZCbLJKrLHmIMn82FZ8pJzriJgyBmErjdEtrUX6eZAJbtHjlkMooEWUV+EtJ0D5tOP3+1Piw==", + "requires": { + "querystring": "^0.2.0" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "next": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/next/-/next-9.4.4.tgz", + "integrity": "sha512-ZT8bU2SAv5jkFQ+y8py+Rl5RJRJ6DnZDS+VUnB1cIscmtmUhDi7LYED7pYm4MCKkYhPbEEM1Lbpo7fnoZJGWNQ==", + "requires": { + "@ampproject/toolbox-optimizer": "2.4.0", + "@babel/code-frame": "7.8.3", + "@babel/core": "7.7.7", + "@babel/plugin-proposal-class-properties": "7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3", + "@babel/plugin-proposal-numeric-separator": "7.8.3", + "@babel/plugin-proposal-object-rest-spread": "7.9.6", + "@babel/plugin-proposal-optional-chaining": "7.9.0", + "@babel/plugin-syntax-bigint": "7.8.3", + "@babel/plugin-syntax-dynamic-import": "7.8.3", + "@babel/plugin-transform-modules-commonjs": "7.9.6", + "@babel/plugin-transform-runtime": "7.9.6", + "@babel/preset-env": "7.9.6", + "@babel/preset-modules": "0.1.3", + "@babel/preset-react": "7.9.4", + "@babel/preset-typescript": "7.9.0", + "@babel/runtime": "7.9.6", + "@babel/types": "7.9.6", + "@next/react-dev-overlay": "9.4.4", + "@next/react-refresh-utils": "9.4.4", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-define": "2.0.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "browserslist": "4.12.0", + "cacache": "13.0.1", + "chokidar": "2.1.8", + "css-loader": "3.5.3", + "find-cache-dir": "3.3.1", + "fork-ts-checker-webpack-plugin": "3.1.1", + "jest-worker": "24.9.0", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "0.8.0", + "mkdirp": "0.5.3", + "native-url": "0.3.1", + "neo-async": "2.6.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "7.0.29", + "prop-types": "15.7.2", + "prop-types-exact": "1.2.0", + "react-is": "16.13.1", + "react-refresh": "0.8.3", + "resolve-url-loader": "3.1.1", + "sass-loader": "8.0.2", + "schema-utils": "2.6.6", + "style-loader": "1.2.1", + "styled-jsx": "3.3.0", + "use-subscription": "1.4.1", + "watchpack": "2.0.0-beta.13", + "web-vitals": "0.2.1", + "webpack": "4.43.0", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.7", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.7", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "mkdirp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "requires": { + "minimist": "^1.2.5" + } + }, + "postcss": { + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.29.tgz", + "integrity": "sha512-ba0ApvR3LxGvRMMiUa9n0WR4HjzcYm7tS+ht4/2Nd0NLtHpPIH77fuB9Xh1/yJVz9O/E/95Y/dn8ygWsyffXtw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "schema-utils": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", + "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "next-mdx-enhanced": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/next-mdx-enhanced/-/next-mdx-enhanced-3.0.0.tgz", + "integrity": "sha512-TBLg7TmfYB8lT+MHK7/AKz2ony4w0URg0N3L2CpHpAQXNwsJvp9ghPpcI5q55SbP+iTF0McMrnn5S7754OcPKQ==", + "requires": { + "@mdx-js/loader": "^1.6.1", + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "gray-matter": "^4.0.2", + "loader-utils": "^2.0.0", + "prebuild-webpack-plugin": "1.1.0", + "stringify-object": "^3.3.0" + } + }, + "next-optimized-images": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/next-optimized-images/-/next-optimized-images-2.6.1.tgz", + "integrity": "sha512-P+vDuXUv9yasf8vVXoJthmSRsV1jhTxZ5mlm9Ga+iVLuM7TwwwttIGbvFBYTm7H9AulukqyI5yuA9wOFytapgw==", + "requires": { + "chalk": "^2.4.2", + "figures": "^3.0.0", + "file-loader": "^3.0.1", + "imagemin": "^6.1.0", + "img-loader": "^3.0.1", + "raw-loader": "^2.0.0", + "url-loader": "^1.1.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "next-transpile-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-3.3.0.tgz", + "integrity": "sha512-QIaBunwtC9oNaluQvfJw5hv1uXSAlTzDCc7/FUxZw5Rnm0yo1HJjW6YodFvA+7Xm9k/2fZV2itF99vMBwTOUjQ==", + "requires": { + "micromatch": "^4.0.2", + "slash": "^3.0.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==" + }, + "node-releases": { + "version": "1.1.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz", + "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==" + }, + "normalize-html-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", + "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=" + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "nuka-carousel": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/nuka-carousel/-/nuka-carousel-4.7.0.tgz", + "integrity": "sha512-5ngBNwFnMqO9TXWsJdxQMUNbasbPFva5ukqB5GpJfdLGBVOP7q3dn7NLithqNVGcXvNgsp3UMXRwQZGZQrRlOw==", + "requires": { + "csstype": "^2.6.6", + "d3-ease": "^1.0.3", + "exenv": "^1.2.0", + "prop-types": "^15.6.0", + "react-move": "^6.1.0", + "wicg-inert": "^3.0.3" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", + "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "dev": true + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "optipng-bin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.0.tgz", + "integrity": "sha512-mesUAwfedu5p9gRQwlYgD6Svw5IH3VUIWDJj/9cNpP3yFNbbEVqkTMWYhrIEn/cxmbGA3LpZrdoV2Yl8OfmnIA==", + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "requires": { + "arch": "^2.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "requires": { + "p-timeout": "^1.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=" + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" + } + }, + "platform": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.3.tgz", + "integrity": "sha1-ZGx3ARiZhwtqCQPnXpl+jlHadGE=" + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz", + "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-browser-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", + "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", + "requires": { + "postcss": "^7" + } + }, + "postcss-calc": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", + "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "requires": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "requires": { + "htmlparser2": "^3.10.0" + }, + "dependencies": { + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-initial": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", + "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "requires": { + "lodash.template": "^4.5.0", + "postcss": "^7.0.2" + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", + "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.16", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.0" + }, + "dependencies": { + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "dependencies": { + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-normalize": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-9.0.0.tgz", + "integrity": "sha512-//kq5O1xkygzN1iCioFIBtzyVTgB6ce9+Hu0mNHuUhPn+FnnFSPybe5kBemnUPPqd7QrHc+kdX6GVECUWdU2uQ==", + "requires": { + "@csstools/normalize.css": "*", + "postcss": "^7.0.27", + "postcss-browser-comments": "^3.0.0", + "sanitize.css": "*" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "requires": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-selector-not": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-sorting": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz", + "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==", + "requires": { + "lodash": "^4.17.14", + "postcss": "^7.0.17" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==" + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prebuild-webpack-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/prebuild-webpack-plugin/-/prebuild-webpack-plugin-1.1.0.tgz", + "integrity": "sha512-/IdXyCP+7Ij/5ndsKsySTTlwsijwx8cafuU8BOisUiVIMsVjsZniJH/PiThBFG1vU1HI+/+pBwgQSIJ/GkZ7kA==", + "requires": { + "debug": "^4.1.1", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prettier": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "requires": { + "fast-diff": "^1.1.2" + } + }, + "prismjs": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", + "integrity": "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==", + "requires": { + "clipboard": "^2.0.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, + "property-information": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.5.0.tgz", + "integrity": "sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-2.0.0.tgz", + "integrity": "sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg==", + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + } + } + }, + "react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-device-detect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-1.13.1.tgz", + "integrity": "sha512-XTPgAMsUVHC5lMNUGiAeO2UfAfhMfjq0CBUM67eHnc9XfO7iESh6h/cffKV8VGgrZBX+dyuqJl23bLLHoav5Ig==", + "requires": { + "ua-parser-js": "^0.7.21" + } + }, + "react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "dependencies": { + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "react-instantsearch-core": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.7.0.tgz", + "integrity": "sha512-wIvSIwkWfqPbaQZcbKsfBK3Gpm1e7ahSwU8Bmx1N5RfUqA/NghqS0Ppv3sz4vCXjoEAdPV06R+Fpn9lT+cE9/Q==", + "requires": { + "@babel/runtime": "^7.1.2", + "algoliasearch-helper": "^3.1.0", + "prop-types": "^15.5.10", + "react-fast-compare": "^3.0.0" + } + }, + "react-instantsearch-dom": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.7.0.tgz", + "integrity": "sha512-J1C9xkHHLLa6rkKLKFDa7szA0TDo6yPFGmDzh2+JLaq4o694RIqivfUpROHus0Ki3BAQu9QmzLtodf6K1NOBWQ==", + "requires": { + "@babel/runtime": "^7.1.2", + "algoliasearch-helper": "^3.1.0", + "classnames": "^2.2.5", + "prop-types": "^15.5.10", + "react-instantsearch-core": "^6.7.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-move": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/react-move/-/react-move-6.4.0.tgz", + "integrity": "sha512-TNyDQESDZ0xsejnxFTQ9CKarJQN6NbgpImrvIEzOVe7+jt8y7uTjJwWxqFTfmvwskIs+RmUbCWdN7PAbGyhrdA==", + "requires": { + "@babel/runtime": "^7.10.3", + "kapellmeister": "^3.0.1", + "prop-types": "^15.7.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", + "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "react-reconciler": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.24.0.tgz", + "integrity": "sha512-gAGnwWkf+NOTig9oOowqid9O0HjTDC+XVGBCAmJYYJ2A2cN/O4gDdIuuUQjv8A4v6GDwVfJkagpBBLW5OW9HSw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.18.0" + } + }, + "react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" + }, + "refractor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.1.0.tgz", + "integrity": "sha512-bN8GvY6hpeXfC4SzWmYNQGLLF2ZakRDNBkgCL0vvl5hnpMrnyURk8Mv61v6pzn4/RBHzSWLp44SzMmVHqMGNww==", + "requires": { + "hastscript": "^5.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.21.0" + }, + "dependencies": { + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + } + } + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "rehype-katex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-3.1.0.tgz", + "integrity": "sha512-ozlAEsy0o0vqQvRACVk8WRHkiZMHG3NBF+KjEfyzpVSKG08V+yskCZ+BtCblGyMqKwe+VYReK8xJ6gN7pvV6WA==", + "requires": { + "hast-util-to-text": "^2.0.0", + "katex": "^0.12.0", + "rehype-parse": "^6.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unified": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", + "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "requires": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + } + } + }, + "remark": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", + "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "requires": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + }, + "dependencies": { + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "requires": { + "repeat-string": "^1.0.0" + } + }, + "mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "stringify-entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.1.tgz", + "integrity": "sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", + "is-hexadecimal": "^1.0.0" + } + }, + "unified": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", + "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" + } + } + }, + "remark-footnotes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-1.0.0.tgz", + "integrity": "sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g==" + }, + "remark-math": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-2.0.1.tgz", + "integrity": "sha512-FokDg5BmlPbKaAdD4IfSVuRgYH6FBPeIn0zxZA6oZ6epc4qOSjoSJPyhsH0H/WKABuaCVMJuF5O2STti6UmBQw==" + }, + "remark-mdx": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.16.tgz", + "integrity": "sha512-xqZhBQ4TonFiSFpVt6SnTLRnxstu7M6pcaOibKZhqzk4zMRVacVenD7iECjfESK+72LkPm/NW+0r5ahJAg7zlQ==", + "requires": { + "@babel/core": "7.10.5", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.10.4", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.16", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.1.0" + }, + "dependencies": { + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", + "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "unified": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", + "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" + } + } + }, + "remark-parse": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz", + "integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==", + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remark-stringify": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-7.0.4.tgz", + "integrity": "sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^2.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "remove-trailing-slash": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.0.tgz", + "integrity": "sha1-FJjl3wmEwn5Jt26/Boh8otARUNI=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "resolve-url-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", + "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rivet-graphql": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rivet-graphql/-/rivet-graphql-0.2.0.tgz", + "integrity": "sha512-TUjTvG3gIBwvbE5KZfMszAlTJhhxAGy7vvMlOihDQQJh7kriMOlyegNEKJo2lWfEi/s1LibpuH53IR85lk8LiQ==", + "requires": { + "graphql": "^15.3.0", + "graphql-request": "^2.1.0-next.1" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize.css": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-11.0.1.tgz", + "integrity": "sha512-Q762QXJGHIyFLayll6zUueGKslmGxNpbEDpSB/sdaZ9Xgz+v6AYlVc5P49sorc9cPR9y47npHBfXswGo1I32tg==" + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "search-insights": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-1.6.2.tgz", + "integrity": "sha512-mpy+57HZVMZH5HsMHYMCLvkf+tUvhy+ycP2tDy1j7wmj+mQsNZ3LC61IcMYomok02NozaMR3GiGyfH6uc+ibdA==" + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "requires": { + "commander": "^2.8.1" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "slugify": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.5.tgz", + "integrity": "sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + } + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "requires": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-generator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", + "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + } + } + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-2.0.0.tgz", + "integrity": "sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", + "is-hexadecimal": "^1.0.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + } + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "style-loader": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", + "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "styled-jsx": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.0.tgz", + "integrity": "sha512-sh8BI5eGKyJlwL4kNXHjb27/a/GJV8wP4ElRIkRXrGW3sHKOsY9Pa1VZRNxyvf3+lisdPwizD9JDkzVO9uGwZw==", + "requires": { + "@babel/types": "7.8.3", + "babel-plugin-syntax-jsx": "6.18.0", + "convert-source-map": "1.7.0", + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "string-hash": "1.1.3", + "stylis": "3.5.4", + "stylis-rule-sheet": "0.0.10" + }, + "dependencies": { + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylelint": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.6.1.tgz", + "integrity": "sha512-XyvKyNE7eyrqkuZ85Citd/Uv3ljGiuYHC6UiztTR6sWS9rza8j3UeQv/eGcQS9NZz/imiC4GKdk1EVL3wst5vw==", + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.1", + "@stylelint/postcss-markdown": "^0.36.1", + "autoprefixer": "^9.8.0", + "balanced-match": "^1.0.0", + "chalk": "^4.1.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "execall": "^2.0.0", + "file-entry-cache": "^5.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.1", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.19.0", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "log-symbols": "^4.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^7.0.1", + "micromatch": "^4.0.2", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.32", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.1", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.4.6", + "v8-compile-cache": "^2.1.1", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==" + }, + "meow": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.0.tgz", + "integrity": "sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==" + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==" + } + } + }, + "stylelint-config-css-modules": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stylelint-config-css-modules/-/stylelint-config-css-modules-2.2.0.tgz", + "integrity": "sha512-+zjcDbot+zbuxy1UA31k4G2lUG+nHUwnLyii3uT2F09B8kT2YrT9LZYNfMtAWlDidrxr7sFd5HX9EqPHGU3WKA==" + }, + "stylelint-config-prettier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-8.0.2.tgz", + "integrity": "sha512-TN1l93iVTXpF9NJstlvP7nOu9zY2k+mN0NSFQ/VEGz15ZIP9ohdDZTtCWHs5LjctAhSAzaILULGbgiM0ItId3A==" + }, + "stylelint-config-recommended": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==" + }, + "stylelint-config-standard": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-20.0.0.tgz", + "integrity": "sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA==", + "requires": { + "stylelint-config-recommended": "^3.0.0" + } + }, + "stylelint-media-use-custom-media": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stylelint-media-use-custom-media/-/stylelint-media-use-custom-media-2.0.0.tgz", + "integrity": "sha512-G7Hwma8HIMFJOChqrX9ie8hAGbtEMUbEjuiaR3olHIXjloDWqYlFHIJKsCyyckigkm+4LtCwtZDQASrVY4pRBg==" + }, + "stylelint-order": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.1.0.tgz", + "integrity": "sha512-sVTikaDvMqg2aJjh4r48jsdfmqLT+nqB1MOsaBnvM3OwLx4S+WXcsxsgk5w18h/OZoxZCxuyXMh61iBHcj9Qiw==", + "requires": { + "lodash": "^4.17.15", + "postcss": "^7.0.31", + "postcss-sorting": "^5.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "stylelint-use-nesting": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-use-nesting/-/stylelint-use-nesting-3.0.0.tgz", + "integrity": "sha512-BMzhXWbK5DdAYtZMQULn7VmWZXpy8Rwlx2PgeNYqKInQrKTJWM/TFKPScc+xvsGUc/6JPiUDeQQij9gFnOo8Kg==" + }, + "stylelint-value-no-unknown-custom-properties": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-value-no-unknown-custom-properties/-/stylelint-value-no-unknown-custom-properties-3.0.0.tgz", + "integrity": "sha512-8WoOnZ4ELTxA1cDbhwolIVOutxHwbjpXmd0lL0Li3Iye078jSnEb1KO6pJ/ig5oDVGRApFeA25Fyy4qqmqwGgg==", + "requires": { + "postcss-values-parser": "^3.2.1" + }, + "dependencies": { + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "postcss-values-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-3.2.1.tgz", + "integrity": "sha512-SQ7/88VE9LhJh9gc27/hqnSU/aZaREVJcRVccXBmajgP2RkjdJzNyH/a9GCVMI5nsRhT0jC5HpUMwfkz81DVVg==", + "requires": { + "color-name": "^1.1.4", + "is-url-superb": "^3.0.0", + "postcss": "^7.0.5", + "url-regex": "^5.0.0" + } + } + } + }, + "stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" + }, + "stylis-rule-sheet": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "requires": { + "postcss": "^7.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", + "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^3.1.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "tippy.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-5.2.1.tgz", + "integrity": "sha512-66UT6JRVn3dXNCORE+0UvUK3JZqV/VhLlU6HTDm3FmrweUUFUxUGvT8tUQ7ycMp+uhuLAwQw6dBabyC+iKf/MA==", + "requires": { + "popper.js": "^1.16.0" + } + }, + "tlds": { + "version": "1.208.0", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.208.0.tgz", + "integrity": "sha512-6kbY7GJpRQXwBddSOAbVUZXjObbCGFXliWWN+kOSEoRWIOyRWLB6zdeKC/Tguwwenl/KsUx016XR50EdHYsxZw==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "to-vfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", + "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", + "requires": { + "is-buffer": "^2.0.0", + "vfile": "^4.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz", + "integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", + "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==" + }, + "typewriter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/typewriter/-/typewriter-7.1.0.tgz", + "integrity": "sha512-sdSqoyAMG/CkFbmL1vIe3VoNMmdmIbDVLmDApudrwjq9JHg+aE123GOFAaRRvJA0TP9esWmGgQCZaej5LWP0IA==", + "requires": { + "@hapi/joi": "^15.1.1", + "analytics-node": "3.4.0-beta.1", + "figures": "^3.0.0", + "fuse.js": "^3.4.5", + "got": "^9.6.0", + "handlebars": "4.5.3", + "ink": "^2.5.0", + "ink-link": "^1.0.0", + "ink-select-input": "^3.1.2", + "ink-spinner": "^3.0.1", + "ink-text-input": "^3.2.1", + "js-yaml": "^3.13.1", + "json-stable-stringify": "^1.0.1", + "latest-version": "^5.1.0", + "lodash": "4.17.12", + "node-machine-id": "^1.1.12", + "prettier": "^1.17.0", + "react": "^16.9.0", + "semver": "^6.3.0", + "sort-keys": "^3.0.0", + "typescript": "^3.4.5", + "yargs": "^13.2.2" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "lodash": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.12.tgz", + "integrity": "sha512-+CiwtLnsJhX03p20mwXuvhoebatoh5B3tt+VvYlrPgZC1g36y+RRbkufX95Xa+X4I59aWEacDFYwnJZiyBh9gA==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "sort-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-3.0.0.tgz", + "integrity": "sha512-77XUKMiZN5LvQXZ9sgWfJza19AvYIDwaDGwGiULM+B5XYru8Z90Oh06JvqDlJczvjjYvssrV0aK1GI6+YXvn5A==", + "requires": { + "is-plain-obj": "^2.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + }, + "uglify-js": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.1.tgz", + "integrity": "sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q==", + "optional": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "unfetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.1.0.tgz", + "integrity": "sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==" + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "unist-util-find-after": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz", + "integrity": "sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-find-all-after": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", + "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-flatmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unist-util-flatmap/-/unist-util-flatmap-1.0.0.tgz", + "integrity": "sha512-IG32jcKJlhARCYT2LsYPJWdoXYkzz3ESAdl1aa2hn9Auh+cgUmU6wgkII4yCc/1GgeWibRdELdCZh/p3QKQ1dQ==" + }, + "unist-util-generated": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", + "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==" + }, + "unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" + }, + "unist-util-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-2.0.1.tgz", + "integrity": "sha512-VdNvk4BQUUU9Rgr8iUOvclHa/iN9O+6Dt66FKij8l9OVezGG37gGWCPU5KSax1R2degqXFvl3kWTkvzL79e9tQ==", + "requires": { + "@types/mdast": "^3.0.0", + "object-assign": "^4.0.0" + } + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + }, + "unist-util-remove": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", + "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "requires": { + "unist-util-visit": "^1.1.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + } + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "dependencies": { + "unist-util-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", + "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "requires": { + "unist-util-is": "^3.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "requires": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-5.0.0.tgz", + "integrity": "sha512-O08GjTiAFNsSlrUWfqF1jH0H1W3m35ZyadHrGv5krdnmPPoxP27oDTqux/579PtaroiSGm5yma6KT1mHFH6Y/g==", + "requires": { + "ip-regex": "^4.1.0", + "tlds": "^1.203.0" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "use-subscription": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.4.1.tgz", + "integrity": "sha512-7+IIwDG/4JICrWHL/Q/ZPK5yozEnvRm6vHImu0LKwQlmWGKeiF7mbAenLlK/cTNXrTtXHU/SFASQHzB6+oSJMQ==", + "requires": { + "object-assign": "^4.1.1" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "vfile": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "watchpack": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0-beta.13.tgz", + "integrity": "sha512-ZEFq2mx/k5qgQwgi6NOm+2ImICb8ngAkA/rZ6oyXZ7SgPn3pncf+nfhYTCrs3lmHwOxnPtGLTOuFLfpSMh1VMA==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "dependencies": { + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "optional": true, + "requires": { + "chokidar": "^2.1.8" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "web-vitals": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.1.tgz", + "integrity": "sha512-2pdRlp6gJpOCg0oMMqwFF0axjk5D9WInc09RSYtqFgPXQ15+YKNQ7YnBBEqAL5jvmfH9WvoXDMb8DHwux7pIew==" + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", + "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.1", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "watchpack": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", + "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", + "requires": { + "chokidar": "^3.4.0", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.1.tgz", + "integrity": "sha512-Nfd8HDwfSx1xBwC+P8QMGvHAOITxNBSvu/J/mCJvOwv+G4VWkU7zir9SSenTtyCi0LnVtmsc7G5SZo1uV+bxRw==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, + "wicg-inert": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.0.3.tgz", + "integrity": "sha512-XwXf8K0NN4cpagjBlZ2/j/5Sjf6dW3HNbfywEy1y6Z8PJKvSHVGiuc5Id/9RZ6EmGq+GQCGTo7B2SK0Misbr6g==" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "requires": { + "microevent.ts": "~0.1.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yoga-layout-prebuilt": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.9.6.tgz", + "integrity": "sha512-Wursw6uqLXLMjBAO4SEShuzj8+EJXhCF71/rJ7YndHTkRAYSU0GY3OghRqfAk9HPUAAFMuqp3U1Wl+01vmGRQQ==", + "requires": { + "@types/yoga-layout": "1.9.2" + } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + } + } +} diff -Nru consul-1.7.4+dfsg1/website/pages/404.jsx consul-1.8.7+dfsg1/website/pages/404.jsx --- consul-1.7.4+dfsg1/website/pages/404.jsx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/404.jsx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,32 @@ +import Link from 'next/link' +import { useEffect } from 'react' + +export default function NotFound() { + useEffect(() => { + if ( + typeof window !== 'undefined' && + typeof window?.analytics?.track === 'function' && + typeof window?.document?.referrer === 'string' && + typeof window?.location?.href === 'string' + ) + window.analytics.track(window.location.href, { + category: '404 Response', + label: window.document.referrer || 'No Referrer', + }) + }, []) + + return ( +
    +

    Page Not Found

    +

    + We‘re sorry but we can‘t find the page you‘re looking + for. +

    +

    + + Back to Home + +

    +
    + ) +} diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/auth-methods.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/auth-methods.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/auth-methods.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/auth-methods.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,426 @@ +--- +layout: api +page_title: ACL Auth Methods - HTTP API +sidebar_title: Auth Methods +description: The /acl/auth-method endpoints manage Consul's ACL Auth Methods. +--- + +# ACL Auth Method HTTP API + +-> **1.5.0+:** The auth method APIs are available in Consul versions 1.5.0 and newer. + +The `/acl/auth-method` endpoints [create](#create-an-auth-method), +[read](#read-an-auth-method), [update](#update-an-auth-method), +[list](#list-auth-methods) and [delete](#delete-an-auth-method) +ACL auth methods in Consul. + +For more information on how to setup ACLs, please check +the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Create an Auth Method + +This endpoint creates a new ACL auth method. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `PUT` | `/acl/auth-method` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Payload Fields + +- `Name` `(string: )` - Specifies a name for the ACL auth method. The + name can contain alphanumeric characters, dashes `-`, and underscores `_`. + This field is immutable and must be unique. + +- `Type` `(string: )` - The type of auth method being configured. + This field is immutable. For allowed values see the [auth method + documentation](/docs/acl/auth-methods). + +- `Description` `(string: "")` - Free form human readable description of the + auth method. + +- `DisplayName` `(string: "")` - An optional name to use instead of the `Name` + field when displaying information about this auth method. Added in Consul 1.8.0. + +- `MaxTokenTTL` `(duration: 0s)` - This specifies the maximum life of any token + created by this auth method. When set it will initialize the + [`ExpirationTime`](/api/acl/tokens#expirationtime) field on all tokens + to a value of `Token.CreateTime + AuthMethod.MaxTokenTTL`. This field is not + persisted beyond its initial use. Can be specified in the form of `"60s"` or + `"5m"` (i.e., 60 seconds or 5 minutes, respectively). This value must be no + smaller than 1 minute and no longer than 24 hours. Added in Consul 1.8.0. + + This must be set to a nonzero value for `type=oidc`. + +- `TokenLocality` `(string: "")` - Defines the kind of token that this auth method + should produce. This can be either `"local"` or `"global"`. If empty the + value of `"local"` is assumed. Added in Consul 1.8.0. + +- `Config` `(map[string]string: )` - The raw configuration to use for + the chosen auth method. Contents will vary depending upon the type chosen. + For more information on configuring specific auth method types, see the [auth + method documentation](/docs/acl/auth-methods). + +- `Namespace` `(string: "")` - Specifies the namespace to + create the auth method within. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +- `NamespaceRules` `(array)` - A set + of rules that can control which namespace tokens created via this auth method + will be created within. Note that assigning namespaces via rules requires the + auth method to reside within the `default` namespace. Unlike binding rules, + the **first** matching namespace rule wins. Added in Consul 1.8.0. + + - `Selector` `(string: "")` - Specifies the expression used to match this + namespace rule against valid identities returned from an auth method + validation. If empty this namespace rule matches all valid identities + returned from the auth method. For example: + + ```text + serviceaccount.namespace==default and serviceaccount.name!=vault + ``` + + - `BindNamespace` `(string: )` - If the namespace rule's `Selector` + matches then this is used to control the namespace where the token is + created. This can either be a plain string or lightly templated + using [HIL syntax](https://github.com/hashicorp/hil) to interpolate the + same values that are usable by the `Selector` syntax. For example: + + ```text + prefixed-${serviceaccount.name} + ``` + +### Sample Payload + +```json +{ + "Name": "minikube", + "Type": "kubernetes", + "Description": "dev minikube cluster", + "Config": { + "Host": "https://192.0.2.42:8443", + "CACert": "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n", + "ServiceAccountJWT": "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..." + } +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/auth-method +``` + +### Sample Response + +```json +{ + "Name": "minikube", + "Type": "kubernetes", + "Description": "dev minikube cluster", + "Config": { + "Host": "https://192.0.2.42:8443", + "CACert": "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n", + "ServiceAccountJWT": "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..." + }, + "CreateIndex": 15, + "ModifyIndex": 15 +} +``` + +## Read an Auth Method + +This endpoint reads an ACL auth method with the given name. If no +auth method exists with the given name, a 404 is returned instead of a +200 response. + +| Method | Path | Produces | +| ------ | ------------------------ | ------------------ | +| `GET` | `/acl/auth-method/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `name` `(string: )` - Specifies the name of the ACL auth method to + read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the auth method within. This value can be specified as the `ns` URL query + parameter or in the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/auth-method/minikube +``` + +### Sample Response + +```json +{ + "Name": "minikube", + "Type": "kubernetes", + "Description": "dev minikube cluster", + "Config": { + "Host": "https://192.0.2.42:8443", + "CACert": "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n", + "ServiceAccountJWT": "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..." + }, + "CreateIndex": 15, + "ModifyIndex": 224 +} +``` + +## Update an Auth Method + +This endpoint updates an existing ACL auth method. + +| Method | Path | Produces | +| ------ | ------------------------ | ------------------ | +| `PUT` | `/acl/auth-method/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `Name` `(string: )` - Specifies the name of the auth method to + update. This is required in the URL path but may also be specified in the + JSON body. If specified in both places then they must match exactly. + +- `Type` `(string: )` - Specifies the type of the auth method being + updated. This field is immutable so if present in the body then it must + match the existing value. If not present then the value will be filled in by + Consul. + +- `Description` `(string: "")` - Free form human readable description of the + auth method. + +- `DisplayName` `(string: "")` - An optional name to use instead of the `Name` + field when displaying information about this auth method. Added in Consul 1.8.0. + +- `MaxTokenTTL` `(duration: 0s)` - This specifies the maximum life of any token + created by this auth method. When set it will initialize the + [`ExpirationTime`](/api/acl/tokens#expirationtime) field on all tokens + to a value of `Token.CreateTime + AuthMethod.MaxTokenTTL`. This field is not + persisted beyond its initial use. Can be specified in the form of `"60s"` or + `"5m"` (i.e., 60 seconds or 5 minutes, respectively). This value must be no + smaller than 1 minute and no longer than 24 hours. Added in Consul 1.8.0. + + This must be set to a nonzero value for `type=oidc`. + +- `TokenLocality` `(string: "")` - Defines the kind of token that this auth method + should produce. This can be either `"local"` or `"global"`. If empty the + value of `"local"` is assumed. Added in Consul 1.8.0. + +- `Config` `(map[string]string: )` - The raw configuration to use for + the chosen auth method. Contents will vary depending upon the type chosen. + For more information on configuring specific auth method types, see the [auth + method documentation](/docs/acl/auth-methods). + +- `Namespace` `(string: "")` - Specifies the namespace of + the auth method to update. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +- `NamespaceRules` `(array)` - A set + of rules that can control which namespace tokens created via this auth method + will be created within. Note that assigning namespaces via rules requires the + auth method to reside within the `default` namespace. Unlike binding rules, + the **first** matching namespace rule wins. Added in Consul 1.8.0. + + - `Selector` `(string: "")` - Specifies the expression used to match this + namespace rule against valid identities returned from an auth method + validation. If empty this namespace rule matches all valid identities + returned from the auth method. For example: + + ```text + serviceaccount.namespace==default and serviceaccount.name!=vault + ``` + + - `BindNamespace` `(string: )` - If the namespace rule's `Selector` + matches then this is used to control the namespace where the token is + created. This can either be a plain string or lightly templated + using [HIL syntax](https://github.com/hashicorp/hil) to interpolate the + same values that are usable by the `Selector` syntax. For example: + + ```text + prefixed-${serviceaccount.name} + ``` + +### Sample Payload + +```json +{ + "Name": "minikube", + "Description": "updated name", + "Config": { + "Host": "https://192.0.2.42:8443", + "CACert": "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n", + "ServiceAccountJWT": "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..." + } +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/auth-method/minikube +``` + +### Sample Response + +```json +{ + "Name": "minikube", + "Description": "updated name", + "Type": "kubernetes", + "Config": { + "Host": "https://192.0.2.42:8443", + "CACert": "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n", + "ServiceAccountJWT": "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..." + }, + "CreateIndex": 15, + "ModifyIndex": 224 +} +``` + +## Delete an Auth Method + +This endpoint deletes an ACL auth method. + +~> Deleting an auth method will also immediately delete all associated +[binding rules](/api/acl/binding-rules) as well as any +outstanding [tokens](/api/acl/tokens) created from this auth method. + +| Method | Path | Produces | +| -------- | ------------------------ | ------------------ | +| `DELETE` | `/acl/auth-method/:name` | `application/json` | + +Even though the return type is application/json, the value is either true or +false indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `name` `(string: )` - Specifies the name of the ACL auth method to + delete. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace of the + Auth Method to delete. This value can be specified as the `ns` URL query + parameter or in the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X DELETE \ + http://127.0.0.1:8500/v1/acl/auth-method/minikube +``` + +### Sample Response + +```json +true +``` + +## List Auth Methods + +This endpoint lists all the ACL auth methods. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/acl/auth-methods` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `ns` `(string: "")` - Specifies the namespace to list + the auth methods for. This value can be specified as the `ns` URL query + parameter or in the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. The namespace may be specified as '\*' and then + results will be returned for all namespaces. Added in Consul 1.7.0. + +## Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/auth-methods +``` + +### Sample Response + +-> **Note** - The contents of the `Config` field are not included in the +listing and must be retrieved by the [auth method reading endpoint](#read-an-auth-method). + +```json +[ + { + "Name": "minikube-1", + "Type": "kubernetes", + "Description": "", + "CreateIndex": 14, + "ModifyIndex": 14 + }, + { + "Name": "minikube-2", + "Type": "kubernetes", + "Description": "", + "CreateIndex": 15, + "ModifyIndex": 15 + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/binding-rules.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/binding-rules.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/binding-rules.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/binding-rules.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,426 @@ +--- +layout: api +page_title: ACL Binding Rules - HTTP API +sidebar_title: Binding Rules +description: The /acl/binding-rule endpoints manage Consul's ACL Binding Rules. +--- + +# ACL Binding Rule HTTP API + +-> **1.5.0+:** The binding rule APIs are available in Consul versions 1.5.0 and newer. + +The `/acl/binding-rule` endpoints [create](#create-a-binding-rule), +[read](#read-a-binding-rule), [update](#update-a-binding-rule), +[list](#list-binding-rules) and [delete](#delete-a-binding-rule) ACL binding +rules in Consul. + +For more information on how to setup ACLs, please check +the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Create a Binding Rule + +This endpoint creates a new ACL binding rule. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `PUT` | `/acl/binding-rule` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `Description` `(string: "")` - Free form human readable description of the binding rule. + +- `AuthMethod` `(string: )` - The name of the auth method that this + rule applies to. This field is immutable. + +- `Selector` `(string: "")` - Specifies the expression used to match this rule + against valid identities returned from an auth method validation. If empty + this binding rule matches all valid identities returned from the auth method. For example: + + ```text + serviceaccount.namespace==default and serviceaccount.name!=vault + ``` + +- `BindType` `(string: )` - Specifies the way the binding rule + affects a token created at login. + + - `BindType=service` - The computed bind name value is used as an + `ACLServiceIdentity.ServiceName` field in the token that is created. + + ```json + { ...other fields... + "ServiceIdentities": [ + { "ServiceName": "" } + ] + } + ``` + + - `BindType=node` - The computed bind name value is used as an + `ACLNodeIdentity.NodeName` field in the token that is created. + + ```json + { ...other fields... + "NodeIdentities": [ + { "NodeName": "", "Datacenter": "" } + ] + } + ``` + + - `BindType=role` - The computed bind name value is used as a `RoleLink.Name` + field in the token that is created. This binding rule will only apply if a + role with the given name exists at login-time. If it does not then this + rule is ignored. + + ```json + { ...other fields... + "Roles": [ + { "Name": "" } + ] + } + ``` + +- `BindName` `(string: )` - The name to bind to a token at + login-time. What it binds to can be adjusted with different values of the + `BindType` field. This can either be a plain string or lightly templated + using [HIL syntax](https://github.com/hashicorp/hil) to interpolate the same + values that are usable by the `Selector` syntax. For example: + + ```text + prefixed-${serviceaccount.name} + ``` + +- `Namespace` `(string: "")` - Specifies the namespace to + create the binding rule. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Description": "example rule", + "AuthMethod": "minikube", + "Selector": "serviceaccount.namespace==default", + "BindType": "service", + "BindName": "{{ serviceaccount.name }}" +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/binding-rule +``` + +### Sample Response + +```json +{ + "ID": "000ed53c-e2d3-e7e6-31a5-c19bc3518a3d", + "Description": "example rule", + "AuthMethod": "minikube", + "Selector": "serviceaccount.namespace==default", + "BindType": "service", + "BindName": "{{ serviceaccount.name }}", + "CreateIndex": 17, + "ModifyIndex": 17 +} +``` + +## Read a Binding Rule + +This endpoint reads an ACL binding rule with the given ID. If no +binding rule exists with the given ID, a 404 is returned instead of a 200 +response. + +| Method | Path | Produces | +| ------ | ----------------------- | ------------------ | +| `GET` | `/acl/binding-rule/:id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `id` `(string: )` - Specifies the UUID of the ACL binding rule + to read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the binding rule. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/binding-rule/000ed53c-e2d3-e7e6-31a5-c19bc3518a3d +``` + +### Sample Response + +```json +{ + "ID": "000ed53c-e2d3-e7e6-31a5-c19bc3518a3d", + "Description": "example rule", + "AuthMethod": "minikube", + "Selector": "serviceaccount.namespace==default", + "BindType": "service", + "BindName": "{{ serviceaccount.name }}", + "CreateIndex": 17, + "ModifyIndex": 17 +} +``` + +## Update a Binding Rule + +This endpoint updates an existing ACL binding rule. + +| Method | Path | Produces | +| ------ | ----------------------- | ------------------ | +| `PUT` | `/acl/binding-rule/:id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `ID` `(string: )` - Specifies the ID of the binding rule to update. + This is required in the URL path but may also be specified in the JSON body. + If specified in both places then they must match exactly. + +- `Description` `(string: "")` - Free form human readable description of the binding rule. + +- `AuthMethod` `(string: )` - Specifies the name of the auth + method that this rule applies to. This field is immutable so if present in + the body then it must match the existing value. If not present then the value + will be filled in by Consul. + +- `Selector` `(string: "")` - Specifies the expression used to match this rule + against valid identities returned from an auth method validation. If empty + this binding rule matches all valid identities returned from the auth method. For example: + + ```text + serviceaccount.namespace==default and serviceaccount.name!=vault + ``` + +- `BindType` `(string: )` - Specifies the way the binding rule + affects a token created at login. + + - `BindType=service` - The computed bind name value is used as an + `ACLServiceIdentity.ServiceName` field in the token that is created. + + ```json + { ...other fields... + "ServiceIdentities": [ + { "ServiceName": "" } + ] + } + ``` + + - `BindType=node` - The computed bind name value is used as an + `ACLNodeIdentity.NodeName` field in the token that is created. + + ```json + { ...other fields... + "NodeIdentities": [ + { "NodeName": "", "Datacenter": "" } + ] + } + ``` + + - `BindType=role` - The computed bind name value is used as a `RoleLink.Name` + field in the token that is created. This binding rule will only apply if a + role with the given name exists at login-time. If it does not then this + rule is ignored. + + ```json + { ...other fields... + "Roles": [ + { "Name": "" } + ] + } + ``` + +- `BindName` `(string: )` - The name to bind to a token at + login-time. What it binds to can be adjusted with different values of the + `BindType` field. This can either be a plain string or lightly templated + using [HIL syntax](https://github.com/hashicorp/hil) to interpolate the same + values that are usable by the `Selector` syntax. For example: + + ```text + prefixed-${serviceaccount.name} + ``` + +- `Namespace` `(string: "")` - Specifies the namespace of + the binding rule to update. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Description": "updated rule", + "Selector": "serviceaccount.namespace=dev", + "BindType": "role", + "BindName": "{{ serviceaccount.name }}" +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/binding-rule/000ed53c-e2d3-e7e6-31a5-c19bc3518a3d +``` + +### Sample Response + +```json +{ + "ID": "000ed53c-e2d3-e7e6-31a5-c19bc3518a3d", + "Description": "updated rule", + "AuthMethod": "minikube", + "Selector": "serviceaccount.namespace=dev", + "BindType": "role", + "BindName": "{{ serviceaccount.name }}", + "CreateIndex": 17, + "ModifyIndex": 18 +} +``` + +## Delete a Binding Rule + +This endpoint deletes an ACL binding rule. + +| Method | Path | Produces | +| -------- | ----------------------- | ------------------ | +| `DELETE` | `/acl/binding-rule/:id` | `application/json` | + +Even though the return type is application/json, the value is either true or +false indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `id` `(string: )` - Specifies the UUID of the ACL binding rule to + delete. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace of the + binding rule to delete. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X DELETE \ + http://127.0.0.1:8500/v1/acl/binding-rule/000ed53c-e2d3-e7e6-31a5-c19bc3518a3d +``` + +### Sample Response + +```json +true +``` + +## List Binding Rules + +This endpoint lists all the ACL binding rules. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `GET` | `/acl/binding-rules` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +## Parameters + +- `authmethod` `(string: "")` - Filters the binding rule list to those binding + rules that are linked with the specific named auth method. + +- `ns` `(string: "")` - Specifies the namespace to list + the binding rules for. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. The namespace may be specified as '\*' and then + results will be returned for all namespaces. Added in Consul 1.7.0. + +## Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/binding-rules +``` + +### Sample Response + +```json +[ + { + "ID": "000ed53c-e2d3-e7e6-31a5-c19bc3518a3d", + "Description": "example 1", + "AuthMethod": "minikube-1", + "BindType": "service", + "BindName": "k8s-{{ serviceaccount.name }}", + "CreateIndex": 17, + "ModifyIndex": 17 + }, + { + "ID": "b4f0a0a3-69f2-7a4f-6bef-326034ace9fa", + "Description": "example 2", + "AuthMethod": "minikube-2", + "BindType": "service", + "Selector": "serviceaccount.namespace==default", + "BindName": "k8s-{{ serviceaccount.name }}", + "CreateIndex": 18, + "ModifyIndex": 18 + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/index.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/index.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/index.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/index.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,570 @@ +--- +layout: api +page_title: ACLs - HTTP API +sidebar_title: ACLs +description: The /acl endpoints manage the Consul's ACL system. +--- + +# ACL HTTP API + +-> **1.4.0+:** This API documentation is for Consul versions 1.4.0 and later. The documentation for the legacy ACL API is [here](/api/acl/legacy) + +The `/acl` endpoints are used to manage ACL tokens and policies in Consul, [bootstrap the ACL system](#bootstrap-acls), [check ACL replication status](#check-acl-replication), and [translate rules](#translate-rules). There are additional pages for managing [tokens](/api/acl/tokens) and [policies](/api/acl/policies) with the `/acl` endpoints. + +For more information on how to setup ACLs, please check +the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Bootstrap ACLs + +This endpoint does a special one-time bootstrap of the ACL system, making the first +management token if the [`acl.tokens.master`](/docs/agent/options#acl_tokens_master) +configuration entry is not specified in the Consul server configuration and if the +cluster has not been bootstrapped previously. This is available in Consul 0.9.1 and later, +and requires all Consul servers to be upgraded in order to operate. + +This provides a mechanism to bootstrap ACLs without having any secrets present in Consul's +configuration files. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `PUT` | `/acl/bootstrap` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/acl/bootstrap +``` + +### Sample Response + +-> **Deprecated** - The `ID` field in the response is for legacy compatibility and is a copy of the `SecretID` field. New +applications should ignore the `ID` field as it may be removed in a future major Consul version. + +```json +{ + "ID": "527347d3-9653-07dc-adc0-598b8f2b0f4d", + "AccessorID": "b5b1a918-50bc-fc46-dec2-d481359da4e3", + "SecretID": "527347d3-9653-07dc-adc0-598b8f2b0f4d", + "Description": "Bootstrap Token (Global Management)", + "Policies": [ + { + "ID": "00000000-0000-0000-0000-000000000001", + "Name": "global-management" + } + ], + "Local": false, + "CreateTime": "2018-10-24T10:34:20.843397-04:00", + "Hash": "oyrov6+GFLjo/KZAfqgxF/X4J/3LX0435DOBy9V22I0=", + "CreateIndex": 12, + "ModifyIndex": 12 +} +``` + +You can detect if something has interfered with the ACL bootstrapping process by +checking the response code. A 200 response means that the bootstrap was a success, and +a 403 means that the cluster has already been bootstrapped, at which point you should +consider the cluster in a potentially compromised state. + +The returned token will have unrestricted privileges to manage all details of the system. +It can then be used to further configure the ACL system. Please check the +[ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production) for more details. + +## Check ACL Replication + +This endpoint returns the status of the ACL replication processes in the +datacenter. This is intended to be used by operators or by automation checking +to discover the health of ACL replication. + +Please check the [ACL Replication tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-replication-multiple-datacenters) +for more details. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `GET` | `/acl/replication` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `consistent` | `none` | `none` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + --request GET \ + http://127.0.0.1:8500/v1/acl/replication +``` + +### Sample Response + +```json +{ + "Enabled": true, + "Running": true, + "SourceDatacenter": "dc1", + "ReplicationType": "tokens", + "ReplicatedIndex": 1976, + "ReplicatedTokenIndex": 2018, + "LastSuccess": "2018-11-03T06:28:58Z", + "LastError": "2016-11-03T06:28:28Z" +} +``` + +- `Enabled` - Reports whether ACL replication is enabled for the datacenter. + +- `Running` - Reports whether the ACL replication process is running. The process + may take approximately 60 seconds to begin running after a leader election + occurs. + +- `SourceDatacenter` - The authoritative ACL datacenter that ACLs are being + replicated from and will match the + [`primary_datacenter`](/docs/agent/options#primary_datacenter) configuration. + +- `ReplicationType` - The type of replication that is currently in use. + + - `legacy` - ACL replication is in legacy mode and is replicating legacy ACL tokens. + + - `policies` - ACL replication is only replicating policies as token replication + is disabled. + + - `tokens` - ACL replication is replicating both policies and tokens. + +- `ReplicatedIndex` - The last index that was successfully replicated. Which data + the replicated index refers to depends on the replication type. For `legacy` + replication this can be compared with the value of the `X-Consul-Index` header + returned by the [`/v1/acl/list`](/api/acl/legacy#list-acls) endpoint to + determine if the replication process has gotten all available ACLs. When in either + `tokens` or `policies` mode, this index can be compared with the value of the + `X-Consul-Index` header returned by the [`/v1/acl/policies`](/api/acl/policies#list-policies) + endpoint to determine if the policy replication process has gotten all available + ACL policies. Note that ACL replication is rate limited so the indexes may lag behind + the primary datacenter. + +- `ReplicatedTokenIndex` - The last token index that was successfully replicated. + This index can be compared with the value of the `X-Consul-Index` header returned + by the [`/v1/acl/tokens`](/api/acl/tokens#list-tokens) endpoint to determine + if the replication process has gotten all available ACL tokens. Note that ACL + replication is rate limited so the indexes may lag behind the primary + datacenter. + +- `LastSuccess` - The UTC time of the last successful sync operation. Since ACL + replication is done with a blocking query, this may not update for up to 5 + minutes if there have been no ACL changes to replicate. A zero value of + "0001-01-01T00:00:00Z" will be present if no sync has been successful. + +- `LastError` - The UTC time of the last error encountered during a sync + operation. If this time is later than `LastSuccess`, you can assume the + replication process is not in a good state. A zero value of + "0001-01-01T00:00:00Z" will be present if no sync has resulted in an error. + +## Translate Rules + +-> **Deprecated** - This endpoint was introduced in Consul 1.4.0 for migration from the previous ACL system. It +will be removed in a future major Consul version when support for legacy ACLs is removed. + +This endpoint translates the legacy rule syntax into the latest syntax. It is intended +to be used by operators managing Consul's ACLs and performing legacy token to new policy +migrations. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------ | +| `POST` | `/acl/rules/translate` | `text/plain` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:read` | + +### Sample Payload + +```text +agent "" { + policy = "read" +} +``` + +### Sample Request + +```shell-session +$ curl -X POST -d @rules.hcl http://127.0.0.1:8500/v1/acl/rules/translate +``` + +### Sample Response + +```text +agent_prefix "" { + policy = "read" +} +``` + +## Translate a Legacy Token's Rules + +-> **Deprecated** - This endpoint was introduced in Consul 1.4.0 for migration from the previous ACL system.. It +will be removed in a future major Consul version when support for legacy ACLs is removed. + +This endpoint translates the legacy rules embedded within a legacy ACL into the latest +syntax. It is intended to be used by operators managing Consul's ACLs and performing +legacy token to new policy migrations. Note that this API requires the auto-generated +Accessor ID of the legacy token. This ID can be retrieved using the +[`/v1/acl/token/self`](/api/acl/tokens#read-self-token) endpoint. + +| Method | Path | Produces | +| ------ | ----------------------------------- | ------------ | +| `GET` | `/acl/rules/translate/:accessor_id` | `text/plain` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:read` | + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/rules/translate/4f48f7e6-9359-4890-8e67-6144a962b0a5 +``` + +### Sample Response + +```text +agent_prefix "" { + policy = "read" +} +``` + +## Login to Auth Method + +This endpoint was added in Consul 1.5.0 and is used to exchange an [auth +method](/docs/acl/auth-methods) bearer token for a newly-created +Consul ACL token. + +| Method | Path | Produces | +| ------ | ------------ | ------------------ | +| `POST` | `/acl/login` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +-> **Note** - To use the login process to create tokens in any connected +secondary datacenter, [ACL +replication](/docs/agent/options#acl_enable_token_replication) must be +enabled. Login requires the ability to create local tokens which is restricted +to the primary datacenter and any secondary datacenters with ACL token +replication enabled. + +### Parameters + +- `AuthMethod` `(string: )` - The name of the auth method to use for login. + +- `BearerToken` `(string: )` - The bearer token to present to the + auth method during login for authentication purposes. For the Kubernetes auth + method this is a [Service Account Token + (JWT)](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#service-account-tokens). + +- `Meta` `(map: nil)` - Specifies arbitrary KV metadata + linked to the token. Can be useful to track origins. + +- `Namespace` `(string: "")` - Specifies the namespace of + the Auth Method to use for Login. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token, or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "AuthMethod": "minikube", + "BearerToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..." +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/login +``` + +### Sample Response + +```json +{ + "AccessorID": "926e2bd2-b344-d91b-0c83-ae89f372cd9b", + "SecretID": "b78d37c7-0ca7-5f4d-99ee-6d9975ce4586", + "Description": "token created via login", + "Roles": [ + { + "ID": "3356c67c-5535-403a-ad79-c1d5f9df8fc7", + "Name": "demo" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "example" + } + ], + "Local": true, + "AuthMethod": "minikube", + "CreateTime": "2019-04-29T10:08:08.404370762-05:00", + "Hash": "nLimyD+7l6miiHEBmN/tvCelAmE/SbIXxcnTzG3pbGY=", + "CreateIndex": 36, + "ModifyIndex": 36 +} +``` + +## Logout from Auth Method + +This endpoint was added in Consul 1.5.0 and is used to destroy a token created +via the [login endpoint](#login-to-auth-method). The token deleted is specified +with the `X-Consul-Token` header or the `token` query parameter. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `POST` | `/acl/logout` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +-> **Note** - This endpoint requires no specific privileges as it is just +deleting a token for which you already must possess its secret. + +### Sample Request + +```shell-session +$ curl \ + -H "X-Consul-Token: b78d37c7-0ca7-5f4d-99ee-6d9975ce4586" \ + --request POST \ + http://127.0.0.1:8500/v1/acl/logout +``` + +## OIDC Authorization URL Request + + + {' '} + This is an enterprise only endpoint. This feature is currently in beta.{' '} + + +This endpoint was added in Consul 1.8.0 and is used to obtain an authorization +URL from Consul to start an [OIDC login flow](/docs/acl/auth-methods/oidc). + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `POST` | `/acl/oidc/auth-url` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +-> **Note** - To use the login process to create tokens in any connected +secondary datacenter, [ACL +replication](/docs/agent/options#acl_enable_token_replication) must be +enabled. Login requires the ability to create local tokens which is restricted +to the primary datacenter and any secondary datacenters with ACL token +replication enabled. + +### Parameters + +- `AuthMethod` `(string: )` - The name of the auth method to use for + login. This must be of type [`oidc`](/docs/acl/auth-methods/oidc). + +- `RedirectURI` `(string: )` - See [Redirect + URIs](/docs/acl/auth-methods/oidc#redirect-uris) for more information. + +- `ClientNonce` `(string: "")` - Optional client-provided nonce that must match + during callback, if present. + +- `Meta` `(map: nil)` - Specifies arbitrary KV metadata + linked to the token. Can be useful to track origins. + +- `Namespace` `(string: "")` - Specifies the namespace of + the Auth Method to use for Login. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token, or will default to the `default` namespace. + + This must match the namespace provided on the [OIDC Callback](#oidc-callback). + +### Sample Payload + +```json +{ + "AuthMethod": "auth0", + "RedirectURI": "http://localhost:8550/oidc/callback" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/oidc/auth-url +``` + +### Sample Response + +```json +{ + "AuthURL": "https://myprovider.com/authorize?client_id=..." +} +``` + +## OIDC Callback + + + {' '} + This is an enterprise only endpoint. This feature is currently in beta.{' '} + + +This endpoint was added in Consul 1.8.0 and is used to exchange an OIDC +authorization code for an OIDC ID Token. The ID token will in turn be exchanged +for a newly-created Consul ACL token. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `POST` | `/acl/oidc/callback` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +-> **Note** - To use the login process to create tokens in any connected +secondary datacenter, [ACL +replication](/docs/agent/options#acl_enable_token_replication) must be +enabled. Login requires the ability to create local tokens which is restricted +to the primary datacenter and any secondary datacenters with ACL token +replication enabled. + +### Parameters + +- `AuthMethod` `(string: )` - The name of the auth method to use for + login. This must be of type [`oidc`](/docs/acl/auth-methods/oidc). + +- `State` `(string: )` - Opaque state ID that is part of the + Authorization URL and will be included in the the redirect following + successful authentication on the provider. + +- `Code` `(string: )` - Provider-generated authorization code that + Consul will exchange for an ID token. + +- `ClientNonce` `(string: "")` - Optional client-provided nonce that must match + the one provided in the auth url request, if present. + +- `Meta` `(map: nil)` - Specifies arbitrary KV metadata + linked to the token. Can be useful to track origins. + +- `Namespace` `(string: "")` - Specifies the namespace of + the Auth Method to use for Login. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token, or will default to the `default` namespace. + + This must match the namespace provided on the [OIDC Callback](#oidc-callback). + +### Sample Payload + +```json +{ + "AuthMethod": "auth0", + "State": "aa3f1903c2f5eac666e6f92e804cf7fc0ff1d15b", + "Code": "dn0u9oM9WegYBEnp" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/oidc/callback +``` + +### Sample Response + +```json +{ + "AccessorID": "926e2bd2-b344-d91b-0c83-ae89f372cd9b", + "SecretID": "b78d37c7-0ca7-5f4d-99ee-6d9975ce4586", + "Description": "token created via OIDC login", + "Roles": [ + { + "ID": "3356c67c-5535-403a-ad79-c1d5f9df8fc7", + "Name": "demo" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "example" + } + ], + "Local": true, + "AuthMethod": "auth0", + "CreateTime": "2019-04-29T10:08:08.404370762-05:00", + "Hash": "nLimyD+7l6miiHEBmN/tvCelAmE/SbIXxcnTzG3pbGY=", + "CreateIndex": 36, + "ModifyIndex": 36 +} +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/legacy.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/legacy.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/legacy.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/legacy.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,300 @@ +--- +layout: api +page_title: Legacy ACLs - HTTP API +sidebar_title: Legacy Tokens +description: >- + The /acl endpoints create, update, destroy, and query Legacy ACL tokens in + Consul. +--- + +# ACL HTTP API + +-> **Consul 1.4.0 deprecates the legacy ACL system completely.** It's _strongly_ +recommended you do not build anything using the legacy system and consider using +the new ACL [Token](/api/acl/tokens) and [Policy](/api/acl/policies) APIs instead. + +The `/acl` endpoints create, update, destroy, and query ACL tokens in Consul. + +For more information about ACLs, please check the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Create ACL Token + +This endpoint makes a new ACL token. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `PUT` | `/acl/create` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `ID` `(string: "")` - Specifies the ID of the ACL. If not provided, a UUID is + generated. + +- `Name` `(string: "")` - Specifies a human-friendly name for the ACL token. + +- `Type` `(string: "client")` - Specifies the type of ACL token. Valid values + are: `client` and `management`. + +- `Rules` `(string: "")` - Specifies rules for this ACL token. The format of the + `Rules` property is detailed in the [ACL Rule documentation](/docs/acl/acl-rules). + +### Sample Payload + +```json +{ + "Name": "my-app-token", + "Type": "client", + "Rules": "" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/create +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +## Update ACL Token + +This endpoint is used to modify the policy for a given ACL token. Instead of +generating a new token ID, the `ID` field must be provided. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `PUT` | `/acl/update` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +The parameters are the same as the _create_ endpoint, except the `ID` field is +required. + +### Sample Payload + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Name": "my-app-token-updated", + "Type": "client", + "Rules": "# New Rules" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/update +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +## Delete ACL Token + +This endpoint deletes an ACL token with the given ID. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `PUT` | `/acl/destroy/:uuid` | `application/json` | + +Even though the return type is application/json, the value is either true or +false, indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the ACL token to + destroy. This is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/acl/destroy/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +true +``` + +## Read ACL Token + +This endpoint reads an ACL token with the given ID. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `GET` | `/acl/info/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `none` | + +Note: No ACL is required because the ACL is specified in the URL path. + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the ACL token to + read. This is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/acl/info/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +[ + { + "CreateIndex": 3, + "ModifyIndex": 3, + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Name": "Client Token", + "Type": "client", + "Rules": "..." + } +] +``` + +## Clone ACL Token + +This endpoint clones an ACL and returns a new token `ID`. This allows a token to +serve as a template for others, making it simple to generate new tokens without +complex rule management. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `PUT` | `/acl/clone/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the ACL token to + be cloned. This is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/acl/clone/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +## List ACLs + +This endpoint lists all the active ACL tokens. + +| Method | Path | Produces | +| ------ | ----------- | ------------------ | +| `GET` | `/acl/list` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `management` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/acl/list +``` + +### Sample Response + +```json +[ + { + "CreateIndex": 3, + "ModifyIndex": 3, + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Name": "Client Token", + "Type": "client", + "Rules": "..." + } +] +``` + +## Check ACL Replication + +The check ACL replication endpoint has not changed between the legacy system and the new system. Review the [latest documentation](/api/acl/acl#check-acl-replication) to learn more about this endpoint. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/policies.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/policies.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/policies.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/policies.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,372 @@ +--- +layout: api +page_title: ACL Policies - HTTP API +sidebar_title: Policies +description: The /acl/policy endpoints manage Consul's ACL policies. +--- + +# ACL Policy HTTP API + +-> **1.4.0+:** The APIs are available in Consul versions 1.4.0 and later. The documentation for the legacy ACL API is [here](/api/acl/legacy) + +The `/acl/policy` endpoints [create](#create-a-policy), [read](#read-a-policy), +[update](#update-a-policy), [list](#list-policies) and +[delete](#delete-a-policy) ACL policies in Consul. + +For more information on how to setup ACLs, please check +the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Create a Policy + +This endpoint creates a new ACL policy. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `PUT` | `/acl/policy` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `Name` `(string: )` - Specifies a name for the ACL policy. The name + can contain alphanumeric characters, dashes `-`, and underscores `_`. + This name must be unique. + +- `Description` `(string: "")` - Free form human readable description of the policy. + +- `Rules` `(string: "")` - Specifies rules for the ACL policy. The format of the + `Rules` property is detailed in the [ACL Rules documentation](/docs/acl/acl-rules). + +- `Datacenters` `(array)` - Specifies the datacenters the policy is valid within. + When no datacenters are provided the policy is valid in all datacenters including + those which do not yet exist but may in the future. + +- `Namespace` `(string: "")` - Specifies the namespace to + create the policy. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Name": "node-read", + "Description": "Grants read access to all node information", + "Rules": "node_prefix \"\" { policy = \"read\"}", + "Datacenters": ["dc1"] +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/policy +``` + +### Sample Response + +```json +{ + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read", + "Description": "Grants read access to all node information", + "Rules": "node_prefix \"\" { policy = \"read\"}", + "Datacenters": ["dc1"], + "Hash": "OtZUUKhInTLEqTPfNSSOYbRiSBKm3c4vI2p6MxZnGWc=", + "CreateIndex": 14, + "ModifyIndex": 14 +} +``` + +## Read a Policy + +This endpoint reads an ACL policy with the given ID. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `GET` | `/acl/policy/:id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `id` `(string: )` - Specifies the UUID of the ACL policy to + read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the policy. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/policy/e359bd81-baca-903e-7e64-1ccd9fdc78f5 +``` + +### Sample Response + +```json +{ + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read", + "Description": "Grants read access to all node information", + "Rules": "node_prefix \"\" { policy = \"read\"}", + "Datacenters": ["dc1"], + "Hash": "OtZUUKhInTLEqTPfNSSOYbRiSBKm3c4vI2p6MxZnGWc=", + "CreateIndex": 14, + "ModifyIndex": 14 +} +``` + +## Read a Policy by Name + +This endpoint reads an ACL policy with the given ID. + +| Method | Path | Produces | +| ------ | ------------------------ | ------------------ | +| `GET` | `/acl/policy/name/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `name` `(string: )` - Specifies the name of the ACL policy to + read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the policy. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/policy/name/node-read +``` + +### Sample Response + +```json +{ + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read", + "Description": "Grants read access to all node information", + "Rules": "node_prefix \"\" { policy = \"read\"}", + "Datacenters": ["dc1"], + "Hash": "OtZUUKhInTLEqTPfNSSOYbRiSBKm3c4vI2p6MxZnGWc=", + "CreateIndex": 14, + "ModifyIndex": 14 +} +``` + +## Update a Policy + +This endpoint updates an existing ACL policy. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `PUT` | `/acl/policy/:id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `ID` `(string: )` - Specifies the UUID of the policy to update. This is + required in the URL path but may also be specified in the JSON body. If specified + in both places then they must match exactly. + +- `Name` `(string: )` - Specifies a name for the ACL policy. The name + can only contain alphanumeric characters as well as `-` and `_` and must be + unique. + +- `Description` `(string: "")` - Free form human readable description of this policy. + +- `Rules` `(string: "")` - Specifies rules for this ACL policy. The format of the + `Rules` property is detailed in the [ACL Rules documentation](/docs/acl/acl-rules). + +- `Datacenters` `(array)` - Specifies the datacenters this policy is valid within. + When no datacenters are provided the policy is valid in all datacenters including + those which do not yet exist but may in the future. + +- `Namespace` `(string: "")` - Specifies the namespace of + the policy to update. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "ID": "c01a1f82-44be-41b0-a686-685fb6e0f485", + "Name": "register-app-service", + "Description": "Grants write permissions necessary to register the 'app' service", + "Rules": "service \"app\" { policy = \"write\"}" +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/policy/c01a1f82-44be-41b0-a686-685fb6e0f485 +``` + +### Sample Response + +```json +{ + "ID": "c01a1f82-44be-41b0-a686-685fb6e0f485", + "Name": "register-app-service", + "Description": "Grants write permissions necessary to register the 'app' service", + "Rules": "service \"app\" { policy = \"write\"}", + "Hash": "OtZUUKhInTLEqTPfNSSOYbRiSBKm3c4vI2p6MxZnGWc=", + "CreateIndex": 14, + "ModifyIndex": 28 +} +``` + +## Delete a Policy + +This endpoint deletes an ACL policy. + +| Method | Path | Produces | +| -------- | ----------------- | ------------------ | +| `DELETE` | `/acl/policy/:id` | `application/json` | + +Even though the return type is application/json, the value is either true or +false indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `id` `(string: )` - Specifies the UUID of the ACL policy to + delete. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace of the + policy to delete. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X DELETE \ + http://127.0.0.1:8500/v1/acl/policy/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +true +``` + +## List Policies + +This endpoint lists all the ACL policies. + +| Method | Path | Produces | +| ------ | --------------- | ------------------ | +| `GET` | `/acl/policies` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `ns` `(string: "")` - Specifies the namespace to list + the Policies for. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. The namespace may be specified as '\*' and then + results will be returned for all namespaces. Added in Consul 1.7.0. + +## Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/policies +``` + +### Sample Response + +-> **Note** - The policies rules are not included in the listing and must be +retrieved by the [policy reading endpoint](#read-a-policy) + +```json +[ + { + "CreateIndex": 4, + "Datacenters": null, + "Description": "Builtin Policy that grants unlimited access", + "Hash": "swIQt6up+s0cV4kePfJ2aRdKCLaQyykF4Hl1Nfdeumk=", + "ID": "00000000-0000-0000-0000-000000000001", + "ModifyIndex": 4, + "Name": "global-management" + }, + { + "CreateIndex": 14, + "Datacenters": ["dc1"], + "Description": "Grants read access to all node information", + "Hash": "OtZUUKhInTLEqTPfNSSOYbRiSBKm3c4vI2p6MxZnGWc=", + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "ModifyIndex": 14, + "Name": "node-read" + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/roles.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/roles.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/roles.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/roles.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,541 @@ +--- +layout: api +page_title: ACL Roles - HTTP API +sidebar_title: Roles +description: The /acl/role endpoints manage Consul's ACL Roles. +--- + +# ACL Role HTTP API + +-> **1.5.0+:** The role APIs are available in Consul versions 1.5.0 and newer. + +The `/acl/role` endpoints [create](#create-a-role), [read](#read-a-role), +[update](#update-a-role), [list](#list-roles) and [delete](#delete-a-role) ACL roles in Consul. + +For more information on how to setup ACLs, please check +the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Create a Role + +This endpoint creates a new ACL role. + +| Method | Path | Produces | +| ------ | ----------- | ------------------ | +| `PUT` | `/acl/role` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `Name` `(string: )` - Specifies a name for the ACL role. The name + can contain alphanumeric characters, dashes `-`, and underscores `_`. + This name must be unique. +- `Description` `(string: "")` - Free form human readable description of the role. + +- `Policies` `(array)` - The list of policies that should be + applied to the role. A PolicyLink is an object with an "ID" and/or "Name" + field to specify a policy. With the PolicyLink, roles can be linked to + policies either by the policy name or by the policy ID. When policies are + linked by name they will be internally resolved to the policy ID. With + linking roles internally by IDs, Consul enables policy renaming without + breaking tokens. + +- `ServiceIdentities` `(array)` - The list of [service + identities](/docs/acl/acl-system#acl-service-identities) that should be + applied to the role. Added in Consul 1.5.0. + + - `ServiceName` `(string: )` - The name of the service. The name + must be no longer than 256 characters, must start and end with a lowercase + alphanumeric character, and can only contain lowercase alphanumeric + characters as well as `-` and `_`. + + - `Datacenters` `(array)` - Specifies the datacenters the effective + policy is valid within. When no datacenters are provided the effective + policy is valid in all datacenters including those which do not yet exist + but may in the future. + +- `NodeIdentities` `(array)` - The list of [node + identities](/docs/acl/acl-system#acl-node-identities) that should be + applied to the role. Added in Consul 1.8.1. + + - `NodeName` `(string: )` - The name of the node. The name + must be no longer than 256 characters, must start and end with a lowercase + alphanumeric character, and can only contain lowercase alphanumeric + characters as well as `-` and `_`. + + - `Datacenter` `(string: )` - Specifies the nodes datacenter. This + will result in effective policy only being valid in that datacenter. + +- `Namespace` `(string: "")` - Specifies the namespace to + create the role. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Name": "example-role", + "Description": "Showcases all input parameters", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765" + }, + { + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "web" + }, + { + "ServiceName": "db", + "Datacenters": ["dc1"] + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ] +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/role +``` + +### Sample Response + +```json +{ + "ID": "aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4", + "Name": "example-role", + "Description": "Showcases all input parameters", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765", + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "web" + }, + { + "ServiceName": "db", + "Datacenters": ["dc1"] + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ], + "Hash": "mBWMIeX9zyUTdDMq8vWB0iYod+mKBArJoAhj6oPz3BI=", + "CreateIndex": 57, + "ModifyIndex": 57 +} +``` + +## Read a Role + +This endpoint reads an ACL role with the given ID. If no role exists with the +given ID, a 404 is returned instead of a 200 response. + +| Method | Path | Produces | +| ------ | --------------- | ------------------ | +| `GET` | `/acl/role/:id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `id` `(string: )` - Specifies the UUID of the ACL role to + read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the role. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/role/aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4 +``` + +### Sample Response + +```json +{ + "ID": "aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4", + "Name": "example-role", + "Description": "Showcases all input parameters", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765", + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "web" + }, + { + "ServiceName": "db", + "Datacenters": ["dc1"] + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ], + "Hash": "mBWMIeX9zyUTdDMq8vWB0iYod+mKBArJoAhj6oPz3BI=", + "CreateIndex": 57, + "ModifyIndex": 57 +} +``` + +## Read a Role by Name + +This endpoint reads an ACL role with the given name. If no role exists with the +given name, a 404 is returned instead of a 200 response. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `GET` | `/acl/role/name/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `name` `(string: )` - Specifies the Name of the ACL role to + read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the role. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/role/name/example-role +``` + +### Sample Response + +```json +{ + "ID": "aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4", + "Name": "example-role", + "Description": "Showcases all input parameters", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765", + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "web" + }, + { + "ServiceName": "db", + "Datacenters": ["dc1"] + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ], + "Hash": "mBWMIeX9zyUTdDMq8vWB0iYod+mKBArJoAhj6oPz3BI=", + "CreateIndex": 57, + "ModifyIndex": 57 +} +``` + +## Update a Role + +This endpoint updates an existing ACL role. + +| Method | Path | Produces | +| ------ | --------------- | ------------------ | +| `PUT` | `/acl/role/:id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `ID` `(string: )` - Specifies the ID of the role to update. This is + required in the URL path but may also be specified in the JSON body. If specified + in both places then they must match exactly. + +- `Name` `(string: )` - Specifies a name for the ACL role. The name + can only contain alphanumeric characters as well as `-` and `_` and must be + unique. +- `Description` `(string: "")` - Free form human readable description of the role. + +- `Policies` `(array)` - The list of policies that should be + applied to the role. A PolicyLink is an object with an "ID" and/or "Name" + field to specify a policy. With the PolicyLink, roles can be linked to + policies either by the policy name or by the policy ID. When policies are + linked by name they will be internally resolved to the policy ID. With + linking roles internally by IDs, Consul enables policy renaming without + breaking tokens. + +- `ServiceIdentities` `(array)` - The list of [service + identities](/docs/acl/acl-system#acl-service-identities) that should be + applied to the role. Added in Consul 1.5.0. + +- `NodeIdentities` `(array)` - The list of [node + identities](/docs/acl/acl-system#acl-node-identities) that should be + applied to the role. Added in Consul 1.8.1. + +- `Namespace` `(string: "")` - Specifies the namespace of + the role to update. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "ID": "8bec74a4-5ced-45ed-9c9d-bca6153490bb", + "Name": "example-two", + "Policies": [ + { + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "db" + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ] +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/role/8bec74a4-5ced-45ed-9c9d-bca6153490bb +``` + +### Sample Response + +```json +{ + "ID": "8bec74a4-5ced-45ed-9c9d-bca6153490bb", + "Name": "example-two", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765", + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "db" + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ], + "Hash": "OtZUUKhInTLEqTPfNSSOYbRiSBKm3c4vI2p6MxZnGWc=", + "CreateIndex": 14, + "ModifyIndex": 28 +} +``` + +## Delete a Role + +This endpoint deletes an ACL role. + +| Method | Path | Produces | +| -------- | --------------- | ------------------ | +| `DELETE` | `/acl/role/:id` | `application/json` | + +Even though the return type is application/json, the value is either true or +false indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `id` `(string: )` - Specifies the UUID of the ACL role to + delete. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace of the + role to delete. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X DELETE \ + http://127.0.0.1:8500/v1/acl/role/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +true +``` + +## List Roles + +This endpoint lists all the ACL roles. + +| Method | Path | Produces | +| ------ | ------------ | ------------------ | +| `GET` | `/acl/roles` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +## Parameters + +- `policy` `(string: "")` - Filters the role list to those roles that are + linked with the specific policy ID. + +### Parameters + +- `ns` `(string: "")` - Specifies the namespace to list + the roles for. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. The namespace may be specified as '\*' and then + results will be returned for all namespaces. Added in Consul 1.7.0. + +## Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/roles +``` + +### Sample Response + +```json +[ + { + "ID": "5e52a099-4c90-c067-5478-980f06be9af5", + "Name": "node-read", + "Description": "", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765", + "Name": "node-read" + } + ], + "Hash": "K6AbfofgiZ1BEaKORBloZf7WPdg45J/PipHxQiBlK1U=", + "CreateIndex": 50, + "ModifyIndex": 50 + }, + { + "ID": "aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4", + "Name": "example-role", + "Description": "Showcases all input parameters", + "Policies": [ + { + "ID": "783beef3-783f-f41f-7422-7087dc272765", + "Name": "node-read" + } + ], + "ServiceIdentities": [ + { + "ServiceName": "web" + }, + { + "ServiceName": "db", + "Datacenters": ["dc1"] + } + ], + "NodeIdentities": [ + { + "NodeName": "node-1", + "Datacenter": "dc2" + } + ], + "Hash": "mBWMIeX9zyUTdDMq8vWB0iYod+mKBArJoAhj6oPz3BI=", + "CreateIndex": 57, + "ModifyIndex": 57 + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl/tokens.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl/tokens.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl/tokens.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl/tokens.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,648 @@ +--- +layout: api +page_title: ACL Tokens - HTTP API +sidebar_title: Tokens +description: The /acl/token endpoints manage Consul's ACL Tokens. +--- + +# ACL Token HTTP API + +-> **1.4.0+:** The APIs are available in Consul versions 1.4.0 and later. The documentation for the legacy ACL API is [here](/api/acl/legacy) + +The `/acl/token` endpoints [create](#create-a-token), [read](#read-a-token), +[update](#update-a-token), [list](#list-tokens), [clone](#clone-a-token) and [delete](#delete-a-token) ACL tokens in Consul. + +For more information on how to setup ACLs, please check +the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Create a Token + +This endpoint creates a new ACL token. + +| Method | Path | Produces | +| ------ | ------------ | ------------------ | +| `PUT` | `/acl/token` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `AccessorID` `(string: "")` - Specifies a UUID to use as the token's Accessor ID. + If not specified a UUID will be generated for this field. Added in v1.5.0. + +- `SecretID` `(string: "")` - Specifies a UUID to use as the token's Secret ID. + If not specified a UUID will be generated for this field. Added in v1.5.0. + **Note**: The SecretID is used to authorize operations against Consul and should + be generated from an appropriate cryptographic source. + +- `Description` `(string: "")` - Free form human readable description of the token. + +- `Policies` `(array)` - The list of policies that should be + applied to the token. A PolicyLink is an object with an "ID" and/or "Name" + field to specify a policy. With the PolicyLink, tokens can be linked to + policies either by the policy name or by the policy ID. When policies are + linked by name they will be internally resolved to the policy ID. With + linking tokens internally by IDs, Consul enables policy renaming without + breaking tokens. + +- `Roles` `(array)` - The list of roles that should be applied to the + token. A RoleLink is an object with an "ID" and/or "Name" field to specify a + role. With the RoleLink, tokens can be linked to roles either by the role + name or by the role ID. When roles are linked by name they will be internally + resolved to the role ID. With linking tokens internally by IDs, Consul + enables role renaming without breaking tokens. Added in Consul 1.5.0. + +- `ServiceIdentities` `(array)` - The list of [service + identities](/docs/acl/acl-system#acl-service-identities) that should be + applied to the token. Added in Consul 1.5.0. + + - `ServiceName` `(string: )` - The name of the service. The name + must be no longer than 256 characters, must start and end with a lowercase + alphanumeric character, and can only contain lowercase alphanumeric + characters as well as `-` and `_`. + + - `Datacenters` `(array)` - Specifies the datacenters the effective + policy is valid within. When no datacenters are provided the effective + policy is valid in all datacenters including those which do not yet exist + but may in the future. + +- `NodeIdentities` `(array)` - The list of [node + identities](/docs/acl/acl-system#acl-node-identities) that should be + applied to the token. Added in Consul 1.8.1. + + - `NodeName` `(string: )` - The name of the node. The name + must be no longer than 256 characters, must start and end with a lowercase + alphanumeric character, and can only contain lowercase alphanumeric + characters as well as `-` and `_`. + + - `Datacenter` `(string: )` - Specifies the nodes datacenter. This + will result in effective policy only being valid in that datacenter. + +- `Local` `(bool: false)` - If true, indicates that the token should not be + replicated globally and instead be local to the current datacenter. + +- `ExpirationTime` `(time: "")`- If set this represents the point after which a + token should be considered revoked and is eligible for destruction. The + default unset value represents NO expiration. This value must be between 1 + minute and 24 hours in the future. Added in Consul 1.5.0. + +- `ExpirationTTL` `(duration: 0s)` - This is a convenience field and if set + will initialize the `ExpirationTime` field to a value of `CreateTime + ExpirationTTL`. This field is not persisted beyond its initial use. Can be + specified in the form of `"60s"` or `"5m"` (i.e., 60 seconds or 5 minutes, + respectively). This value must be no smaller than 1 minute and no longer than + 24 hours. Added in Consul 1.5.0. + +- `Namespace` `(string: "")` - Specifies the namespace to + create the token. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Description": "Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7" + }, + { + "Name": "node-read" + } + ], + "Local": false +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/token +``` + +### Sample Response + +```json +{ + "AccessorID": "6a1253d2-1785-24fd-91c2-f8e78c745511", + "SecretID": "45a3bd52-07c7-47a4-52fd-0745e0cfe967", + "Description": "Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7", + "Name": "node1-write" + }, + { + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read" + } + ], + "Local": false, + "CreateTime": "2018-10-24T12:25:06.921933-04:00", + "Hash": "UuiRkOQPRCvoRZHRtUxxbrmwZ5crYrOdZ0Z1FTFbTbA=", + "CreateIndex": 59, + "ModifyIndex": 59 +} +``` + +## Read a Token + +This endpoint reads an ACL token with the given Accessor ID. + +| Method | Path | Produces | +| ------ | ------------------------ | ------------------ | +| `GET` | `/acl/token/:AccessorID` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +### Parameters + +- `AccessorID` `(string: )` - Specifies the accessor ID of the ACL token to + read. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace to lookup + the token. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/token/6a1253d2-1785-24fd-91c2-f8e78c745511 +``` + +### Sample Response + +-> **Note** If the token used for accessing the API has `acl:write` permissions, +then the `SecretID` will contain the tokens real value. Only when accessed with +a token with only `acl:read` permissions will the `SecretID` be redacted. This +is to prevent privilege escalation whereby having `acl:read` privileges allows +for reading other secrets which given even more permissions. + +```json +{ + "AccessorID": "6a1253d2-1785-24fd-91c2-f8e78c745511", + "SecretID": "", + "Description": "Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7", + "Name": "node1-write" + }, + { + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read" + } + ], + "Local": false, + "CreateTime": "2018-10-24T12:25:06.921933-04:00", + "Hash": "UuiRkOQPRCvoRZHRtUxxbrmwZ5crYrOdZ0Z1FTFbTbA=", + "CreateIndex": 59, + "ModifyIndex": 59 +} +``` + +## Read Self Token + +This endpoint returns the ACL token details that matches the secret ID +specified with the `X-Consul-Token` header or the `token` query parameter. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `GET` | `/acl/token/self` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `none` | + +-> **Note** - This endpoint requires no specific privileges as it is just +retrieving the data for a token that you must already possess its secret. + +### Sample Request + +```shell-session +$ curl -H "X-Consul-Token: 6a1253d2-1785-24fd-91c2-f8e78c745511" \ + http://127.0.0.1:8500/v1/acl/token/self +``` + +### Sample Response + +```json +{ + "AccessorID": "6a1253d2-1785-24fd-91c2-f8e78c745511", + "SecretID": "45a3bd52-07c7-47a4-52fd-0745e0cfe967", + "Description": "Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7", + "Name": "node1-write" + }, + { + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read" + } + ], + "Local": false, + "CreateTime": "2018-10-24T12:25:06.921933-04:00", + "Hash": "UuiRkOQPRCvoRZHRtUxxbrmwZ5crYrOdZ0Z1FTFbTbA=", + "CreateIndex": 59, + "ModifyIndex": 59 +} +``` + +## Update a Token + +This endpoint updates an existing ACL token. + +| Method | Path | Produces | +| ------ | ------------------------ | ------------------ | +| `PUT` | `/acl/token/:AccessorID` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `AccessorID` `(string: "")` - Specifies the accessor ID of the token being updated. This is + required in the URL path but may also be specified in the JSON body. If specified + in both places then they must match exactly. This field is immutable. If not present in + the body and only in the URL then it will be filled in by Consul. + +- `SecretID` `(string: "")` - Specifies the secret ID of the token being updated. This field is + immutable so if present in the body then it must match the existing value. If not present + then the value will be filled in by Consul. + +- `Description` `(string: "")` - Free form human readable description of this token. + +- `Policies` `(array)` - This is the list of policies that should + be applied to this token. A PolicyLink is an object with an "ID" and/or + "Name" field to specify a policy. With the PolicyLink tokens can be linked to policies + either by the policy name or by the policy ID. When policies are linked by + name they will internally be resolved to the policy ID. With linking tokens + internally by IDs, Consul enables policy renaming without breaking tokens. + +- `Roles` `(array)` - The list of roles that should be applied to the + token. A RoleLink is an object with an "ID" and/or "Name" field to specify a + role. With the RoleLink, tokens can be linked to roles either by the role + name or by the role ID. When roles are linked by name they will be internally + resolved to the role ID. With linking tokens internally by IDs, Consul + enables role renaming without breaking tokens. + +- `ServiceIdentities` `(array)` - The list of [service + identities](/docs/acl/acl-system#acl-service-identities) that should be + applied to the token. Added in Consul 1.5.0. + + - `ServiceName` `(string: )` - The name of the service. The name + must be no longer than 256 characters, must start and end with a lowercase + alphanumeric character, and can only contain lowercase alphanumeric + characters as well as `-` and `_`. + + - `Datacenters` `(array)` - Specifies the datacenters the effective + policy is valid within. When no datacenters are provided the effective + policy is valid in all datacenters including those which do not yet exist + but may in the future. + +- `NodeIdentities` `(array)` - The list of [node + identities](/docs/acl/acl-system#acl-node-identities) that should be + applied to the token. Added in Consul 1.8.1. + + - `NodeName` `(string: )` - The name of the node. The name + must be no longer than 256 characters, must start and end with a lowercase + alphanumeric character, and can only contain lowercase alphanumeric + characters as well as `-` and `_`. + + - `Datacenter` `(string: )` - Specifies the nodes datacenter. This + will result in effective policy only being valid in that datacenter. + +- `Local` `(bool: false)` - If true, indicates that this token should not be + replicated globally and instead be local to the current datacenter. This + value must match the existing value or the request will return an error. + +- `AuthMethod` `(string: "")` - Specifies the name of the auth method that + created this token. This field is immutable so if present in the body then it + must match the existing value. If not present then the value will be filled + in by Consul. + +- `ExpirationTime` `(time: "")` - Specifies the expiration time for the token + being updated. This field is immutable so if present in the body then it must + match the existing value. If not present then the value will be filled in by + Consul. + +- `Namespace` `(string: "")` - Specifies the namespace of + the token to update. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Description": "Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7" + }, + { + "Name": "node-read" + }, + { + "Name": "service-read" + } + ], + "Local": false +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/token/6a1253d2-1785-24fd-91c2-f8e78c745511 +``` + +### Sample Response + +```json +{ + "AccessorID": "6a1253d2-1785-24fd-91c2-f8e78c745511", + "SecretID": "45a3bd52-07c7-47a4-52fd-0745e0cfe967", + "Description": "Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7", + "Name": "node1-write" + }, + { + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read" + }, + { + "ID": "93d2226b-2046-4db1-993b-c0581b5d2391", + "Name": "service-read" + } + ], + "Local": false, + "CreateTime": "2018-10-24T12:25:06.921933-04:00", + "Hash": "UuiRkOQPRCvoRZHRtUxxbrmwZ5crYrOdZ0Z1FTFbTbA=", + "CreateIndex": 59, + "ModifyIndex": 100 +} +``` + +## Clone a Token + +This endpoint clones an existing ACL token. + +| Method | Path | Produces | +| ------ | ------------------------------ | ------------------ | +| `PUT` | `/acl/token/:AccessorID/clone` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `AccessorID` `(string: )` - The accessor ID of the token to clone. This is required + in the URL path + +- `Description` `(string: "")` - Free form human readable description for the cloned token. + +- `Namespace` `(string: "")` - Specifies the namespace of + the token to be cloned. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Description": "Clone of Agent token for 'node1'" +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/token/6a1253d2-1785-24fd-91c2-f8e78c745511/clone +``` + +### Sample Response + +```json +{ + "AccessorID": "773efe2a-1f6f-451f-878c-71be10712bae", + "SecretID": "8b1247ef-d172-4f99-b050-4dbe5d3df0cb", + "Description": "Clone of Agent token for 'node1'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7", + "Name": "node1-write" + }, + { + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read" + }, + { + "ID": "93d2226b-2046-4db1-993b-c0581b5d2391", + "Name": "service-read" + } + ], + "Local": false, + "CreateTime": "2018-10-24T12:25:06.921933-04:00", + "Hash": "UuiRkOQPRCvoRZHRtUxxbrmwZ5crYrOdZ0Z1FTFbTbA=", + "CreateIndex": 128, + "ModifyIndex": 128 +} +``` + +## Delete a Token + +This endpoint deletes an ACL token. + +| Method | Path | Produces | +| -------- | ------------------------ | ------------------ | +| `DELETE` | `/acl/token/:AccessorID` | `application/json` | + +Even though the return type is application/json, the value is either true or +false, indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `acl:write` | + +### Parameters + +- `AccessorID` `(string: )` - Specifies the accessor ID of the ACL token to + delete. This is required and is specified as part of the URL path. + +- `ns` `(string: "")` - Specifies the namespace of the + token to delete. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl -X DELETE \ + http://127.0.0.1:8500/v1/acl/token/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +true +``` + +## List Tokens + +This endpoint lists all the ACL tokens. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `GET` | `/acl/tokens` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `acl:read` | + +## Parameters + +- `policy` `(string: "")` - Filters the token list to those tokens that are + linked with the specific policy ID. + +- `role` `(string: "")` - Filters the token list to those tokens that are + linked with the specific role ID. + +- `authmethod` `(string: "")` - Filters the token list to those tokens that are + linked with the specific named auth method. + +- `authmethod-ns` `(string: "")` - Specifics the namespace + of the `authmethod` being used for token lookup. If not provided, the namespace + provided by the `ns` parameter will be used. If neither of those is provided + then the namespace will be inherited from the request's ACL token. Added in + Consul 1.7.0. + +- `ns` `(string: "")` - Specifies the namespace to list + the tokens for. This value can be specified as the `ns` URL query + parameter or the `X-Consul-Namespace` header. If not provided by either, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. The namespace may be specified as '\*' and then + results will be returned for all namespaces. Added in Consul 1.7.0. + +## Sample Request + +```shell-session +$ curl -X GET http://127.0.0.1:8500/v1/acl/tokens +``` + +### Sample Response + +-> **Note** - The token secret IDs are not included in the listing and must be +retrieved by the [token reading endpoint](#read-a-token) + +```json +[ + { + "AccessorID": "6a1253d2-1785-24fd-91c2-f8e78c745511", + "Description": "Agent token for 'my-agent'", + "Policies": [ + { + "ID": "165d4317-e379-f732-ce70-86278c4558f7", + "Name": "node1-write" + }, + { + "ID": "e359bd81-baca-903e-7e64-1ccd9fdc78f5", + "Name": "node-read" + } + ], + "Local": false, + "CreateTime": "2018-10-24T12:25:06.921933-04:00", + "Hash": "UuiRkOQPRCvoRZHRtUxxbrmwZ5crYrOdZ0Z1FTFbTbA=", + "CreateIndex": 59, + "ModifyIndex": 59 + }, + { + "AccessorID": "00000000-0000-0000-0000-000000000002", + "Description": "Anonymous Token", + "Policies": null, + "Local": false, + "CreateTime": "0001-01-01T00:00:00Z", + "Hash": "RNVFSWnfd5DUOuB8vplp+imivlIna3fKQVnkUHh21cA=", + "CreateIndex": 5, + "ModifyIndex": 5 + }, + { + "AccessorID": "3328f9a6-433c-02d0-6649-7d07268dfec7", + "Description": "Bootstrap Token (Global Management)", + "Policies": [ + { + "ID": "00000000-0000-0000-0000-000000000001", + "Name": "global-management" + } + ], + "Local": false, + "CreateTime": "2018-10-24T11:42:02.6427-04:00", + "Hash": "oyrov6+GFLjo/KZAfqgxF/X4J/3LX0435DOBy9V22I0=", + "CreateIndex": 12, + "ModifyIndex": 12 + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/acl-legacy.mdx consul-1.8.7+dfsg1/website/pages/api-docs/acl-legacy.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/acl-legacy.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/acl-legacy.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,421 @@ +--- +layout: api +page_title: Legacy ACLs - HTTP API +description: >- + The /acl endpoints create, update, destroy, and query Legacy ACL tokens in + Consul. +--- + +-> **Consul 1.4.0 deprecates the legacy ACL system completely.** It's _strongly_ +recommended you do not build anything using the legacy system and consider using +the new ACL [Token](/docs/api/acl-token) and [Policy](/docs/api/acl-policy) APIs instead. + +# ACL HTTP API + +These `/acl` endpoints create, update, destroy, and query ACL tokens in Consul. For more information about ACLs, please check the +[ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +## Bootstrap ACLs + +This endpoint does a special one-time bootstrap of the ACL system, making the first +management token if the [`acl_master_token`](/docs/agent/options#acl_master_token) +is not specified in the Consul server configuration, and if the cluster has not been +bootstrapped previously. This is available in Consul 0.9.1 and later, and requires all +Consul servers to be upgraded in order to operate. + +This provides a mechanism to bootstrap ACLs without having any secrets present in Consul's +configuration files. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `PUT` | `/acl/bootstrap` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/acl/bootstrap +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +You can detect if something has interfered with the ACL bootstrapping process by +checking the response code. A 200 response means that the bootstrap was a success, and +a 403 means that the cluster has already been bootstrapped, at which point you should +consider the cluster in a potentially compromised state. + +The returned token will be a management token which can be used to further configure the +ACL system. Please check the +[ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production) for more details. + +## Create ACL Token + +This endpoint makes a new ACL token. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `PUT` | `/acl/create` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `ID` `(string: "")` - Specifies the ID of the ACL. If not provided, a UUID is + generated. + +- `Name` `(string: "")` - Specifies a human-friendly name for the ACL token. + +- `Type` `(string: "client")` - Specifies the type of ACL token. Valid values + are: `client` and `management`. + +- `Rules` `(string: "")` - Specifies rules for this ACL token. The format of the + `Rules` property is documented in the [ACL tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-setup-production). + +### Sample Payload + +```json +{ + "Name": "my-app-token", + "Type": "client", + "Rules": "" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/create +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +## Update ACL Token + +This endpoint is used to modify the policy for a given ACL token. Instead of +generating a new token ID, the `ID` field must be provided. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `PUT` | `/acl/update` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +The parameters are the same as the _create_ endpoint, except the `ID` field is +required. + +### Sample Payload + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Name": "my-app-token-updated", + "Type": "client", + "Rules": "# New Rules" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/acl/update +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +## Delete ACL Token + +This endpoint deletes an ACL token with the given ID. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `PUT` | `/acl/destroy/:uuid` | `application/json` | + +Even though the return type is application/json, the value is either true or false, indicating whether the delete succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the ACL token to + destroy. This is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/acl/destroy/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +true +``` + +## Read ACL Token + +This endpoint reads an ACL token with the given ID. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `GET` | `/acl/info/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `none` | + +Note: No ACL is required because the ACL is specified in the URL path. + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the ACL token to + read. This is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/acl/info/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +[ + { + "CreateIndex": 3, + "ModifyIndex": 3, + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Name": "Client Token", + "Type": "client", + "Rules": "..." + } +] +``` + +## Clone ACL Token + +This endpoint clones an ACL and returns a new token `ID`. This allows a token to +serve as a template for others, making it simple to generate new tokens without +complex rule management. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `PUT` | `/acl/clone/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the ACL token to + be cloned. This is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/acl/clone/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +## List ACLs + +This endpoint lists all the active ACL tokens. + +| Method | Path | Produces | +| ------ | ----------- | ------------------ | +| `GET` | `/acl/list` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `management` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/acl/list +``` + +### Sample Response + +```json +[ + { + "CreateIndex": 3, + "ModifyIndex": 3, + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Name": "Client Token", + "Type": "client", + "Rules": "..." + } +] +``` + +## Check ACL Replication + +This endpoint returns the status of the ACL replication process in the +datacenter. This is intended to be used by operators, or by automation checking +the health of ACL replication. + +Please check the [ACL Replication tutorial](https://learn.hashicorp.com/tutorials/consul/access-control-replication-multiple-datacenters) +for more details. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `GET` | `/acl/replication` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `consistent` | `none` | `none` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/acl/replication +``` + +### Sample Response + +```json +{ + "Enabled": true, + "Running": true, + "SourceDatacenter": "dc1", + "ReplicatedIndex": 1976, + "LastSuccess": "2016-08-05T06:28:58Z", + "LastError": "2016-08-05T06:28:28Z" +} +``` + +- `Enabled` reports whether ACL replication is enabled for the datacenter. + +- `Running` reports whether the ACL replication process is running. The process + may take approximately 60 seconds to begin running after a leader election + occurs. + +- `SourceDatacenter` is the authoritative ACL datacenter that ACLs are being + replicated from, and will match the + [`primary_datacenter`](/docs/agent/options#primary_datacenter) configuration. + +- `ReplicatedIndex` is the last index that was successfully replicated. You can + compare this to the `X-Consul-Index` header returned by the + [`/v1/acl/list`](#list-acls) endpoint to determine if the replication process + has gotten all available ACLs. Replication runs as a background process + approximately every 30 seconds, and that local updates are rate limited to 100 + updates/second, so so it may take several minutes to perform the initial sync + of a large set of ACLs. After the initial sync, replica lag should be on the + order of about 30 seconds. + +- `LastSuccess` is the UTC time of the last successful sync operation. Since ACL + replication is done with a blocking query, this may not update for up to 5 + minutes if there have been no ACL changes to replicate. A zero value of + "0001-01-01T00:00:00Z" will be present if no sync has been successful. + +- `LastError` is the UTC time of the last error encountered during a sync + operation. If this time is later than `LastSuccess`, you can assume the + replication process is not in a good state. A zero value of + "0001-01-01T00:00:00Z" will be present if no sync has resulted in an error. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/agent/check.mdx consul-1.8.7+dfsg1/website/pages/api-docs/agent/check.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/agent/check.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/agent/check.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,430 @@ +--- +layout: api +page_title: Check - Agent - HTTP API +sidebar_title: Checks +description: The /agent/check endpoints interact with checks on the local agent in Consul. +--- + +# Check - Agent HTTP API + +The `/agent/check` endpoints interact with checks on the local agent in Consul. +These should not be confused with checks in the catalog. + +## List Checks + +This endpoint returns all checks that are registered with the local agent. These +checks were either provided through configuration files or added dynamically +using the HTTP API. + +It is important to note that the checks known by the agent may be different from +those reported by the catalog. This is usually due to changes being made while +there is no leader elected. The agent performs active +[anti-entropy](/docs/internals/anti-entropy), so in most situations +everything will be in sync within a few seconds. + +| Method | Path | Produces | +| ------ | --------------- | ------------------ | +| `GET` | `/agent/checks` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------ | +| `NO` | `none` | `none` | `node:read,service:read` | + +### Parameters + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/checks +``` + +### Sample Response + +```json +{ + "service:redis": { + "Node": "foobar", + "CheckID": "service:redis", + "Name": "Service 'redis' check", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "redis", + "ServiceName": "redis", + "ServiceTags": ["primary"] + } +} +``` + +### Filtering + +The filter will be executed against each health check value in the results map with +the following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ------------- | -------------------------------------------------- | +| `CheckID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Name` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Notes` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Output` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceTags` | In, Not In, Is Empty, Is Not Empty | +| `Status` | Equal, Not Equal, In, Not In, Matches, Not Matches | + +## Register Check + +This endpoint adds a new check to the local agent. Checks may be of script, +HTTP, TCP, or TTL type. The agent is responsible for managing the status of the +check and keeping the Catalog in sync. + +| Method | Path | Produces | +| ------ | ----------------------- | ------------------ | +| `PUT` | `/agent/check/register` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `Name` `(string: )` - Specifies the name of the check. + +- `ID` `(string: "")` - Specifies a unique ID for this check on the node. + This defaults to the `"Name"` parameter, but it may be necessary to provide an + ID for uniqueness. + +- `Interval` `(string: "")` - Specifies the frequency at which to run this + check. This is required for HTTP and TCP checks. + +- `Notes` `(string: "")` - Specifies arbitrary information for humans. This is + not used by Consul internally. + +- `DeregisterCriticalServiceAfter` `(string: "")` - Specifies that checks + associated with a service should deregister after this time. This is specified + as a time duration with suffix like "10m". If a check is in the critical state + for more than this configured value, then its associated service (and all of + its associated checks) will automatically be deregistered. The minimum timeout + is 1 minute, and the process that reaps critical services runs every 30 + seconds, so it may take slightly longer than the configured timeout to trigger + the deregistration. This should generally be configured with a timeout that's + much, much longer than any expected recoverable outage for the given service. + +- `Args` `(array)` - Specifies command arguments to run to update the + status of the check. Prior to Consul 1.0, checks used a single `Script` field + to define the command to run, and would always run in a shell. In Consul + 1.0, the `Args` array was added so that checks can be run without a shell. The + `Script` field is deprecated, and you should include the shell in the `Args` to + run under a shell, eg. `"args": ["sh", "-c", "..."]`. + + -> **Note:** Consul 1.0 shipped with an issue where `Args` was erroneously named + `ScriptArgs` in this API. Please use `ScriptArgs` with Consul 1.0 (that will + continue to be accepted in future versions of Consul), and `Args` in Consul + 1.0.1 and later. + +- `AliasNode` `(string: "")` - Specifies the ID of the node for an alias check. + If no service is specified, the check will alias the health of the node. + If a service is specified, the check will alias the specified service on + this particular node. + +- `AliasService` `(string: "")` - Specifies the ID of a service for an + alias check. If the service is not registered with the same agent, + `AliasNode` must also be specified. Note this is the service _ID_ and + not the service _name_ (though they are very often the same). + +- `DockerContainerID` `(string: "")` - Specifies that the check is a Docker + check, and Consul will evaluate the script every `Interval` in the given + container using the specified `Shell`. Note that `Shell` is currently only + supported for Docker checks. + +- `GRPC` `(string: "")` - Specifies a `gRPC` check's endpoint that supports the standard + [gRPC health checking protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + The state of the check will be updated at the given `Interval` by probing the configured + endpoint. Add the service identifier after the `gRPC` check's endpoint in the following format to check for a specific service instead of the whole gRPC server `/:service_identifier`. + +- `GRPCUseTLS` `(bool: false)` - Specifies whether to use TLS for this `gRPC` health check. + If TLS is enabled, then by default, a valid TLS certificate is expected. Certificate + verification can be turned off by setting `TLSSkipVerify` to `true`. + +- `HTTP` `(string: "")` - Specifies an `HTTP` check to perform a `GET` request + against the value of `HTTP` (expected to be a URL) every `Interval`. If the + response is any `2xx` code, the check is `passing`. If the response is `429 Too Many Requests`, the check is `warning`. Otherwise, the check is + `critical`. HTTP checks also support SSL. By default, a valid SSL certificate + is expected. Certificate verification can be controlled using the + `TLSSkipVerify`. + +- `Method` `(string: "")` - Specifies a different HTTP method to be used + for an `HTTP` check. When no value is specified, `GET` is used. + +- `Body` `(string: "")` - Specifies a body that should be sent with `HTTP` checks. + +- `Header` `(map[string][]string: {})` - Specifies a set of headers that should + be set for `HTTP` checks. Each header can have multiple values. + +- `Timeout` `(duration: 10s)` - Specifies a timeout for outgoing connections in the + case of a Script, HTTP, TCP, or gRPC check. Can be specified in the form of "10s" + or "5m" (i.e., 10 seconds or 5 minutes, respectively). + +- `OutputMaxSize` `(positive int: 4096)` - Allow to put a maximum size of text + for the given check. This value must be greater than 0, by default, the value + is 4k. + The value can be further limited for all checks of a given agent using the + `check_output_max_size` flag in the agent. + +- `TLSSkipVerify` `(bool: false)` - Specifies if the certificate for an HTTPS + check should not be verified. + +- `TCP` `(string: "")` - Specifies a `TCP` to connect against the value of `TCP` + (expected to be an IP or hostname plus port combination) every `Interval`. If + the connection attempt is successful, the check is `passing`. If the + connection attempt is unsuccessful, the check is `critical`. In the case of a + hostname that resolves to both IPv4 and IPv6 addresses, an attempt will be + made to both addresses, and the first successful connection attempt will + result in a successful check. + +- `TTL` `(string: "")` - Specifies this is a TTL check, and the TTL endpoint + must be used periodically to update the state of the check. + +- `ServiceID` `(string: "")` - Specifies the ID of a service to associate the + registered check with an existing service provided by the agent. + +- `Status` `(string: "")` - Specifies the initial status of the health check. + +- `SuccessBeforePassing` `(int: 0)` - Specifies the number of consecutive successful + results required before check status transitions to passing. Available for HTTP, + TCP, gRPC, Docker & Monitor checks. + +- `FailuresBeforeCritical` `(int: 0)` - Specifies the number of consecutive unsuccessful + results required before check status transitions to critical. Available for HTTP, + TCP, gRPC, Docker & Monitor checks. + +### Sample Payload + +```json +{ + "ID": "mem", + "Name": "Memory utilization", + "Notes": "Ensure we don't oversubscribe memory", + "DeregisterCriticalServiceAfter": "90m", + "Args": ["/usr/local/bin/check_mem.py"], + "DockerContainerID": "f972c95ebf0e", + "Shell": "/bin/bash", + "HTTP": "https://example.com", + "Method": "POST", + "Header": { "Content-Type": ["application/json"] }, + "Body": "{\"check\":\"mem\"}", + "TCP": "example.com:22", + "Interval": "10s", + "Timeout": "5s", + "TLSSkipVerify": true +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/agent/check/register +``` + +## Deregister Check + +This endpoint remove a check from the local agent. The agent will take care of +deregistering the check from the catalog. If the check with the provided ID does +not exist, no action is taken. + +| Method | Path | Produces | +| ------ | ----------------------------------- | ------------------ | +| `PUT` | `/agent/check/deregister/:check_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `check_id` `(string: "")` - Specifies the unique ID of the check to + deregister. This is specified as part of the URL. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/check/deregister/my-check-id +``` + +## TTL Check Pass + +This endpoint is used with a TTL type check to set the status of the check to +`passing` and to reset the TTL clock. + +| Method | Path | Produces | +| ------ | ----------------------------- | ------------------ | +| `PUT` | `/agent/check/pass/:check_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `check_id` `(string: "")` - Specifies the unique ID of the check to + use. This is specified as part of the URL. + +- `note` `(string: "")` - Specifies a human-readable message. This will be + passed through to the check's `Output` field. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/check/pass/my-check-id +``` + +## TTL Check Warn + +This endpoint is used with a TTL type check to set the status of the check to +`warning` and to reset the TTL clock. + +| Method | Path | Produces | +| ------ | ----------------------------- | ------------------ | +| `PUT` | `/agent/check/warn/:check_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `check_id` `(string: "")` - Specifies the unique ID of the check to + use. This is specified as part of the URL. + +- `note` `(string: "")` - Specifies a human-readable message. This will be + passed through to the check's `Output` field. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/check/warn/my-check-id +``` + +## TTL Check Fail + +This endpoint is used with a TTL type check to set the status of the check to +`critical` and to reset the TTL clock. + +| Method | Path | Produces | +| ------ | ----------------------------- | ------------------ | +| `PUT` | `/agent/check/fail/:check_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `check_id` `(string: "")` - Specifies the unique ID of the check to + use. This is specified as part of the URL. + +- `note` `(string: "")` - Specifies a human-readable message. This will be + passed through to the check's `Output` field. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/check/fail/my-check-id +``` + +## TTL Check Update + +This endpoint is used with a TTL type check to set the status of the check and +to reset the TTL clock. + +| Method | Path | Produces | +| ------ | ------------------------------- | ------------------ | +| `PUT` | `/agent/check/update/:check_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `check_id` `(string: "")` - Specifies the unique ID of the check to + use. This is specified as part of the URL. + +- `Status` `(string: "")` - Specifies the status of the check. Valid values are + `"passing"`, `"warning"`, and `"critical"`. + +- `Output` `(string: "")` - Specifies a human-readable message. This will be + passed through to the check's `Output` field. + +### Sample Payload + +```json +{ + "Status": "passing", + "Output": "curl reported a failure:\n\n..." +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/agent/check/update/my-check-id +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/agent/connect.mdx consul-1.8.7+dfsg1/website/pages/api-docs/agent/connect.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/agent/connect.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/agent/connect.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,229 @@ +--- +layout: api +page_title: Connect - Agent - HTTP API +sidebar_title: Connect +description: >- + The /agent/connect endpoints interact with Connect with agent-local + operations. +--- + +# Connect - Agent HTTP API + +The `/agent/connect` endpoints interact with [Connect](/docs/connect) +with agent-local operations. + +These endpoints may mirror the [non-agent Connect endpoints](/api/connect) +in some cases. Almost all agent-local Connect endpoints perform local caching +to optimize performance of Connect without having to make requests to the server. + +## Authorize + +This endpoint tests whether a connection attempt is authorized between +two services. This is the primary API that must be implemented by +[proxies](/docs/connect/proxies) or +[native integrations](/docs/connect/native) +that wish to integrate with Connect. Prior to calling this API, it is expected +that the client TLS certificate has been properly verified against the +current CA roots. + +The implementation of this API uses locally cached data +and doesn't require any request forwarding to a server. Therefore, the +response typically occurs in microseconds to impose minimal overhead on the +connection attempt. + +| Method | Path | Produces | +| ------ | -------------------------- | ------------------ | +| `POST` | `/agent/connect/authorize` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | -------------------- | --------------- | +| `NO` | `none` | `background refresh` | `service:write` | + +### Parameters + +- `Target` `(string: )` - The name of the service that is being + requested. + +- `ClientCertURI` `(string: )` - The unique identifier for the + requesting client. This is currently the URI SAN from the TLS client + certificate. + +- `ClientCertSerial` `(string: )` - The colon-hex-encoded serial + number for the requesting client cert. This is used to check against + revocation lists. + +- `Namespace` `(string: "")` - Specifies the namespace of + the target service. If not provided in the JSON body, the value of + the `ns` URL query parameter or in the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```json +{ + "Target": "db", + "ClientCertURI": "spiffe://dc1-7e567ac2-551d-463f-8497-f78972856fc1.consul/ns/default/dc/dc1/svc/web", + "ClientCertSerial": "04:00:00:00:00:01:15:4b:5a:c3:94" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/agent/connect/authorize +``` + +### Sample Response + +```json +{ + "Authorized": true, + "Reason": "Matched intention: web => db (allow)" +} +``` + +## Certificate Authority (CA) Roots + +This endpoint returns the trusted certificate authority (CA) root certificates. +This is used by [proxies](/docs/connect/proxies) or +[native integrations](/docs/connect/native) to verify served client +or server certificates are valid. + +This is equivalent to the [non-Agent Connect endpoint](/api/connect), +but the response of this request is cached locally at the agent. This allows +for very fast response times and for fail open behavior if the server is +unavailable. This endpoint should be used by proxies and native integrations. + +| Method | Path | Produces | +| ------ | ------------------------- | ------------------ | +| `GET` | `/agent/connect/ca/roots` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | -------------------- | ------------ | +| `YES` | `all` | `background refresh` | `none` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/connect/ca/roots +``` + +### Sample Response + +```json +{ + "ActiveRootID": "15:bf:3a:7d:ff:ea:c1:8c:46:67:6c:db:b8:81:18:36:ad:e5:d0:c7", + "Roots": [ + { + "ID": "15:bf:3a:7d:ff:ea:c1:8c:46:67:6c:db:b8:81:18:36:ad:e5:d0:c7", + "Name": "Consul CA Root Cert", + "SerialNumber": 7, + "SigningKeyID": "1f:91:ca:41:8f:ac:67:bf:59:c2:fa:4e:75:5c:d8:f0:55:de:be:75:b8:33:31:d5:24:b0:04:b3:e8:97:5b:7e", + "ExternalTrustDomain": "a1499528-fbf6-df7b-05e5-ae81e1873fc4", + "NotBefore": "2018-05-21T16:33:28Z", + "NotAfter": "2028-05-18T16:33:28Z", + "RootCert": "-----BEGIN CERTIFICATE-----\nMIICmDCCAj6gAwIBAgIBBzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtDb25zdWwg\nQ0EgNzAeFw0xODA1MjExNjMzMjhaFw0yODA1MTgxNjMzMjhaMBYxFDASBgNVBAMT\nC0NvbnN1bCBDQSA3MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER0qlxjnRcMEr\niSGlH7G7dYU7lzBEmLUSMZkyBbClmyV8+e8WANemjn+PLnCr40If9cmpr7RnC9Qk\nGTaLnLiF16OCAXswggF3MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/\nMGgGA1UdDgRhBF8xZjo5MTpjYTo0MTo4ZjphYzo2NzpiZjo1OTpjMjpmYTo0ZTo3\nNTo1YzpkODpmMDo1NTpkZTpiZTo3NTpiODozMzozMTpkNToyNDpiMDowNDpiMzpl\nODo5Nzo1Yjo3ZTBqBgNVHSMEYzBhgF8xZjo5MTpjYTo0MTo4ZjphYzo2NzpiZjo1\nOTpjMjpmYTo0ZTo3NTo1YzpkODpmMDo1NTpkZTpiZTo3NTpiODozMzozMTpkNToy\nNDpiMDowNDpiMzplODo5Nzo1Yjo3ZTA/BgNVHREEODA2hjRzcGlmZmU6Ly8xMjRk\nZjVhMC05ODIwLTc2YzMtOWFhOS02ZjYyMTY0YmExYzIuY29uc3VsMD0GA1UdHgEB\n/wQzMDGgLzAtgisxMjRkZjVhMC05ODIwLTc2YzMtOWFhOS02ZjYyMTY0YmExYzIu\nY29uc3VsMAoGCCqGSM49BAMCA0gAMEUCIQDzkkI7R+0U12a+zq2EQhP/n2mHmta+\nfs2hBxWIELGwTAIgLdO7RRw+z9nnxCIA6kNl//mIQb+PGItespiHZKAz74Q=\n-----END CERTIFICATE-----\n", + "IntermediateCerts": null, + "Active": true, + "PrivateKeyType": "ec", + "PrivateKeyBits": 256, + "CreateIndex": 8, + "ModifyIndex": 8 + } + ] +} +``` + +## Service Leaf Certificate + +This endpoint returns the leaf certificate representing a single service. +This certificate is used as a server certificate for accepting inbound +connections and is also used as the client certificate for establishing +outbound connections to other services. + +The agent generates a CSR locally and calls the +[CA sign API](/api/connect/ca) to sign it. The resulting certificate +is cached and returned by this API until it is near expiry or the root +certificates change. + +This API supports blocking queries. The blocking query will block until +a new certificate is necessary because the existing certificate will expire +or the root certificate is being rotated. This blocking behavior allows +clients to efficiently wait for certificate rotations. + +| Method | Path | Produces | +| ------ | --------------------------------- | ------------------ | +| `GET` | `/agent/connect/ca/leaf/:service` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | -------------------- | --------------- | +| `YES` | `all` | `background refresh` | `service:write` | + +### Parameters + +- `Service` `(string: )` - The name of the service for the leaf + certificate. This is specified in the URL. The service does not need to + exist in the catalog, but the proper ACL permissions must be available. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/connect/ca/leaf/web +``` + +### Sample Response + +```json +{ + "SerialNumber": "08", + "CertPEM": "-----BEGIN CERTIFICATE-----\nMIIChjCCAi2gAwIBAgIBCDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtDb25zdWwg\nQ0EgNzAeFw0xODA1MjExNjMzMjhaFw0xODA1MjQxNjMzMjhaMA4xDDAKBgNVBAMT\nA3dlYjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJdLqRKd1SRycFOFceMHOBZK\nQW8HHO8jZ5C8dRswD+IwTd/otJPiaPrVzGOAi4MsaEUgDMemvN1jiywHt3II08mj\nggFyMIIBbjAOBgNVHQ8BAf8EBAMCA7gwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG\nAQUFBwMBMAwGA1UdEwEB/wQCMAAwaAYDVR0OBGEEXzFmOjkxOmNhOjQxOjhmOmFj\nOjY3OmJmOjU5OmMyOmZhOjRlOjc1OjVjOmQ4OmYwOjU1OmRlOmJlOjc1OmI4OjMz\nOjMxOmQ1OjI0OmIwOjA0OmIzOmU4Ojk3OjViOjdlMGoGA1UdIwRjMGGAXzFmOjkx\nOmNhOjQxOjhmOmFjOjY3OmJmOjU5OmMyOmZhOjRlOjc1OjVjOmQ4OmYwOjU1OmRl\nOmJlOjc1OmI4OjMzOjMxOmQ1OjI0OmIwOjA0OmIzOmU4Ojk3OjViOjdlMFkGA1Ud\nEQRSMFCGTnNwaWZmZTovLzExMTExMTExLTIyMjItMzMzMy00NDQ0LTU1NTU1NTU1\nNTU1NS5jb25zdWwvbnMvZGVmYXVsdC9kYy9kYzEvc3ZjL3dlYjAKBggqhkjOPQQD\nAgNHADBEAiBS8kH3UERhBPHM/CQV/jXKLr0kReLqCdq1jZxc8Aq7hQIgFIus/ZX0\nOM/X3Yc1xb/qJiiEVzXcaz3oVFULOzrNAwk=\n-----END CERTIFICATE-----\n", + "PrivateKeyPEM": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIAOGglbwY8HdD3LFX6Bc94co2pzeFTto8ebWoML5E+QfoAoGCCqGSM49\nAwEHoUQDQgAEl0upEp3VJHJwU4Vx4wc4FkpBbwcc7yNnkLx1GzAP4jBN3+i0k+Jo\n+tXMY4CLgyxoRSAMx6a83WOLLAe3cgjTyQ==\n-----END EC PRIVATE KEY-----\n", + "Service": "web", + "ServiceURI": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/web", + "ValidAfter": "2018-05-21T16:33:28Z", + "ValidBefore": "2018-05-24T16:33:28Z", + "CreateIndex": 5, + "ModifyIndex": 5 +} +``` + +- `SerialNumber` `string` - Monotonically increasing 64-bit serial number + representing all certificates issued by this Consul cluster. + +- `CertPEM` `(string)` - The PEM-encoded certificate. + +- `PrivateKeyPEM` `(string)` - The PEM-encoded private key for this certificate. + +- `Service` `(string)` - The name of the service that this certificate identifies. + +- `ServiceURI` `(string)` - The URI SAN for this service. + +- `ValidAfter` `(string)` - The time after which the certificate is valid. + Used with `ValidBefore` this can determine the validity period of the certificate. + +- `ValidBefore` `(string)` - The time before which the certificate is valid. + Used with `ValidAfter` this can determine the validity period of the certificate. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/agent/index.mdx consul-1.8.7+dfsg1/website/pages/api-docs/agent/index.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/agent/index.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/agent/index.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,588 @@ +--- +layout: api +page_title: Agent - HTTP API +sidebar_title: Agent +description: |- + The /agent endpoints interact with the local Consul agent to register + services, checks, list members, and more. +--- + +# Agent HTTP API + +The `/agent` endpoints are used to interact with the local Consul agent. +Usually, services and checks are registered with an agent which then takes on +the burden of keeping that data synchronized with the cluster. For example, the +agent registers services and checks with the Catalog and performs +[anti-entropy](/docs/internals/anti-entropy) to recover from outages. + +In addition to these endpoints, additional endpoints are grouped in the +navigation for `Checks` and `Services`. + +## List Members + +This endpoint returns the members the agent sees in the cluster gossip pool. Due +to the nature of gossip, this is eventually consistent: the results may differ +by agent. The strongly consistent view of nodes is instead provided by +`/v1/catalog/nodes`. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `GET` | `/agent/members` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `node:read` | + +### Parameters + +- `wan` `(bool: false)` - Specifies to list WAN members instead of the LAN + members (which is the default). This is only eligible for agents running in + **server mode**. This is specified as part of the URL as a query parameter. + +- `segment` `(string: "")` - Specifies the segment to list members for. + If left blank, this will query for the default segment when connecting to a server and + the agent's own segment when connecting to a client (clients can only be part of one + network segment). When querying a server, setting this to the special string `_all` + will show members in all segments. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/members +``` + +### Sample Response + +```json +[ + { + "Name": "foobar", + "Addr": "10.1.10.12", + "Port": 8301, + "Tags": { + "bootstrap": "1", + "dc": "dc1", + "port": "8300", + "role": "consul" + }, + "Status": 1, + "ProtocolMin": 1, + "ProtocolMax": 2, + "ProtocolCur": 2, + "DelegateMin": 1, + "DelegateMax": 3, + "DelegateCur": 3 + } +] +``` + +## Read Configuration + +This endpoint returns the configuration and member information of the local +agent. The `Config` element contains a subset of the configuration and its +format will not change in a backwards incompatible way between releases. +`DebugConfig` contains the full runtime configuration but its format is subject +to change without notice or deprecation. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `GET` | `/agent/self` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `agent:read` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/self +``` + +### Sample Response + +```json +{ + "Config": { + "Datacenter": "dc1", + "NodeName": "foobar", + "NodeID": "9d754d17-d864-b1d3-e758-f3fe25a9874f", + "Server": true, + "Revision": "deadbeef", + "Version": "1.0.0" + }, + "DebugConfig": { + ... full runtime configuration ... + ... format subject to change ... + }, + "Coord": { + "Adjustment": 0, + "Error": 1.5, + "Vec": [0,0,0,0,0,0,0,0] + }, + "Member": { + "Name": "foobar", + "Addr": "10.1.10.12", + "Port": 8301, + "Tags": { + "bootstrap": "1", + "dc": "dc1", + "id": "40e4a748-2192-161a-0510-9bf59fe950b5", + "port": "8300", + "role": "consul", + "vsn": "1", + "vsn_max": "1", + "vsn_min": "1" + }, + "Status": 1, + "ProtocolMin": 1, + "ProtocolMax": 2, + "ProtocolCur": 2, + "DelegateMin": 2, + "DelegateMax": 4, + "DelegateCur": 4 + }, + "Meta": { + "instance_type": "i2.xlarge", + "os_version": "ubuntu_16.04" + } +} +``` + +## Reload Agent + +This endpoint instructs the agent to reload its configuration. Any errors +encountered during this process are returned. + +Not all configuration options are reloadable. See the +[Reloadable Configuration](/docs/agent/options#reloadable-configuration) +section on the agent options page for details on which options are supported. + +| Method | Path | Produces | +| ------ | --------------- | ------------------ | +| `PUT` | `/agent/reload` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `agent:write` | + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/reload +``` + +## Enable Maintenance Mode + +This endpoint places the agent into "maintenance mode". During maintenance mode, +the node will be marked as unavailable and will not be present in DNS or API +queries. This API call is idempotent. + +Maintenance mode is persistent and will be automatically restored on agent +restart. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `PUT` | `/agent/maintenance` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `node:write` | + +### Parameters + +- `enable` `(bool: )` - Specifies whether to enable or disable + maintenance mode. This is specified as part of the URL as a query string + parameter. + +- `reason` `(string: "")` - Specifies a text string explaining the reason for + placing the node into maintenance mode. This is simply to aid human operators. + If no reason is provided, a default value will be used instead. This is + specified as part of the URL as a query string parameter, and, as such, must + be URI-encoded. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/maintenance?enable=true&reason=For+API+docs +``` + +## View Metrics + +This endpoint will dump the metrics for the most recent finished interval. +For more information about metrics, see the [telemetry](/docs/agent/telemetry) +page. + +In order to enable [Prometheus](https://prometheus.io/) support, you need to use the +configuration directive +[`prometheus_retention_time`](/docs/agent/options#telemetry-prometheus_retention_time). + +Note: If your metric includes labels that use the same key name multiple times +(i.e. tag=tag2 and tag=tag1), only the sorted last value (tag=tag2) will be visible on +this endpoint due to a display issue. The complete label set is correctly applied and +passed to external metrics providers even though it is not visible through this endpoint. + +| Method | Path | Produces | +| ------ | ---------------------------------- | ------------------------------------------ | +| `GET` | `/agent/metrics` | `application/json` | +| `GET` | `/agent/metrics?format=prometheus` | `text/plain; version=0.0.4; charset=utf-8` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `agent:read` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/metrics +``` + +### Sample Response + +```json +{ + "Timestamp": "2017-08-08 02:55:10 +0000 UTC", + "Gauges": [ + { + "Name": "consul.consul.session_ttl.active", + "Value": 0, + "Labels": {} + }, + { + "Name": "consul.runtime.alloc_bytes", + "Value": 4704344, + "Labels": {} + }, + { + "Name": "consul.runtime.free_count", + "Value": 74063, + "Labels": {} + } + ], + "Points": [], + "Counters": [ + { + "Name": "consul.consul.catalog.service.query", + "Count": 1, + "Sum": 1, + "Min": 1, + "Max": 1, + "Mean": 1, + "Stddev": 0, + "Labels": { + "service": "consul" + } + }, + { + "Name": "consul.raft.apply", + "Count": 1, + "Sum": 1, + "Min": 1, + "Max": 1, + "Mean": 1, + "Stddev": 0, + "Labels": {} + } + ], + "Samples": [ + { + "Name": "consul.consul.http.GET.v1.agent.metrics", + "Count": 1, + "Sum": 0.1817069947719574, + "Min": 0.1817069947719574, + "Max": 0.1817069947719574, + "Mean": 0.1817069947719574, + "Stddev": 0, + "Labels": {} + }, + { + "Name": "consul.consul.http.GET.v1.catalog.service._", + "Count": 1, + "Sum": 0.23342099785804749, + "Min": 0.23342099785804749, + "Max": 0.23342099785804749, + "Mean": 0.23342099785804749, + "Stddev": 0, + "Labels": {} + }, + { + "Name": "consul.serf.queue.Query", + "Count": 20, + "Sum": 0, + "Min": 0, + "Max": 0, + "Mean": 0, + "Stddev": 0, + "Labels": {} + } + ] +} +``` + +- `Timestamp` is the timestamp of the interval for the displayed metrics. Metrics are + aggregated on a ten second interval, so this value (along with the displayed metrics) + will change every ten seconds. + +- `Gauges` is a list of gauges which store one value that is updated as time goes on, + such as the amount of memory allocated. + +- `Points` is a list of point metrics, which each store a series of points under a given name. + +- `Counters` is a list of counters, which store info about a metric that is incremented + over time such as the number of requests to an HTTP endpoint. + +- `Samples` is a list of samples, which store info about the amount of time spent on an + operation, such as the time taken to serve a request to a specific http endpoint. + +## Stream Logs + +This endpoint streams logs from the local agent until the connection is closed. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `GET` | `/agent/monitor` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `agent:read` | + +### Parameters + +- `loglevel` `(string: "info")` - Specifies a text string containing a log level + to filter on, such as `info`. +- `logjson` `(bool: false)` - Specifies whether the logs will be output in JSON + format. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/monitor +``` + +### Sample Response + +```text +YYYY/MM/DD HH:MM:SS [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:127.0.0.1:8300 Address:127.0.0.1:8300}] +YYYY/MM/DD HH:MM:SS [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "") +YYYY/MM/DD HH:MM:SS [INFO] serf: EventMemberJoin: machine-osx 127.0.0.1 +YYYY/MM/DD HH:MM:SS [INFO] consul: Adding LAN server machine-osx (Addr: tcp/127.0.0.1:8300) (DC: dc1) +YYYY/MM/DD HH:MM:SS [INFO] serf: EventMemberJoin: machine-osx.dc1 127.0.0.1 +YYYY/MM/DD HH:MM:SS [INFO] consul: Handled member-join event for server "machine-osx.dc1" in area "wan" +# ... +``` + +## Join Agent + +This endpoint instructs the agent to attempt to connect to a given address. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `PUT` | `/agent/join/:address` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `agent:write` | + +### Parameters + +- `address` `(string: )` - Specifies the address of the other agent to + join. This is specified as part of the URL. + +- `wan` `(bool: false)` - Specifies to try and join over the WAN pool. This is + only optional for agents running in server mode. This is specified as part of + the URL as a query parameter + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/join/1.2.3.4 +``` + +## Graceful Leave and Shutdown + +This endpoint triggers a graceful leave and shutdown of the agent. It is used to +ensure other nodes see the agent as "left" instead of "failed". Nodes that leave +will not attempt to re-join the cluster on restarting with a snapshot. + +For nodes in server mode, the node is removed from the Raft peer set in a +graceful manner. This is critical, as in certain situations a non-graceful leave +can affect cluster availability. + +| Method | Path | Produces | +| ------ | -------------- | ------------------ | +| `PUT` | `/agent/leave` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `agent:write` | + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/leave +``` + +## Force Leave and Shutdown + +This endpoint instructs the agent to force a node into the `left` state. If a +node fails unexpectedly, then it will be in a `failed` state. Once in the +`failed` state, Consul will attempt to reconnect, and the services and checks +belonging to that node will not be cleaned up. Forcing a node into the `left` +state allows its old entries to be removed. + +| Method | Path | Produces | +| ------ | -------------------------- | ------------------ | +| `PUT` | `/agent/force-leave/:node` | `application/json` | + +Additionally, by specifying the `prune` flag, a node can be forcibly removed from +the list of members entirely. + +| Method | Path | Produces | +| ------ | -------------------------------- | ------------------ | +| `PUT` | `/agent/force-leave/:node?prune` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `node` `(string: )` - Specifies the name of the node to be forced into `left` state. This is specified as part of the URL. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/force-leave/agent-one +``` + +## Update ACL Tokens + +This endpoint updates the ACL tokens currently in use by the agent. It can be +used to introduce ACL tokens to the agent for the first time, or to update +tokens that were initially loaded from the agent's configuration. Tokens will be persisted +only if the [`acl.enable_token_persistence`](/docs/agent/options#acl_enable_token_persistence) +configuration is `true`. When not being persisted, they will need to be reset if the agent +is restarted. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `PUT` | `/agent/token/default` | `application/json` | +| `PUT` | `/agent/token/agent` | `application/json` | +| `PUT` | `/agent/token/agent_master` | `application/json` | +| `PUT` | `/agent/token/replication` | `application/json` | + +The paths above correspond to the token names as found in the agent configuration: +[`default`](/docs/agent/options#acl_tokens_default), [`agent`](/docs/agent/options#acl_tokens_agent), +[`agent_master`](/docs/agent/options#acl_tokens_agent_master), and +[`replication`](/docs/agent/options#acl_tokens_replication). + +-> **Deprecation Note:** The following paths were deprecated in version 1.4.3 + +| Method | Path | Produces | +| ------ | ------------------------------------- | ------------------ | +| `PUT` | `/agent/token/acl_token` | `application/json` | +| `PUT` | `/agent/token/acl_agent_token` | `application/json` | +| `PUT` | `/agent/token/acl_agent_master_token` | `application/json` | +| `PUT` | `/agent/token/acl_replication_token` | `application/json` | + +The paths above correspond to the token names as found in the agent configuration: +[`acl_token`](/docs/agent/options#acl_token_legacy), [`acl_agent_token`](/docs/agent/options#acl_agent_token_legacy), +[`acl_agent_master_token`](/docs/agent/options#acl_agent_master_token_legacy), and +[`acl_replication_token`](/docs/agent/options#acl_replication_token_legacy). + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `agent:write` | + +### Parameters + +- `Token` `(string: "")` - Specifies the ACL token to set. + +### Sample Payload + +```json +{ + "Token": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/agent/token/acl_token +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/agent/service.mdx consul-1.8.7+dfsg1/website/pages/api-docs/agent/service.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/agent/service.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/agent/service.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,700 @@ +--- +layout: api +page_title: Service - Agent - HTTP API +sidebar_title: Services +description: |- + The /agent/service endpoints interact with services on the local agent in + Consul. +--- + +# Service - Agent HTTP API + +The `/agent/service` endpoints interact with services on the local agent in +Consul. These should not be confused with services in the catalog. + +## List Services + +This endpoint returns all the services that are registered with +the local agent. These services were either provided through configuration files +or added dynamically using the HTTP API. + +It is important to note that the services known by the agent may be different +from those reported by the catalog. This is usually due to changes being made +while there is no leader elected. The agent performs active +[anti-entropy](/docs/internals/anti-entropy), so in most situations +everything will be in sync within a few seconds. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `GET` | `/agent/services` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `NO` | `none` | `none` | `service:read` | + +### Parameters + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/services +``` + +### Sample Response + +```json +{ + "redis": { + "ID": "redis", + "Service": "redis", + "Tags": [], + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.53", + "port": 80 + } + }, + "Meta": { + "redis_version": "4.0" + }, + "Port": 8000, + "Address": "", + "EnableTagOverride": false, + "Weights": { + "Passing": 10, + "Warning": 1 + } + } +} +``` + +### Filtering + +The filter is executed against each value in the service mapping with the +following selectors and filter operations being supported: + +| Selector | Supported Operations | +| -------------------------------------- | -------------------------------------------------- | +| `Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Connect.Native` | Equal, Not Equal | +| `EnableTagOverride` | Equal, Not Equal | +| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Kind` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Meta` | Is Empty, Is Not Empty, In, Not In | +| `Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Port` | Equal, Not Equal | +| `Proxy.DestinationServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.DestinationServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.LocalServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.LocalServicePort` | Equal, Not Equal | +| `Proxy.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams` | Is Empty, Is Not Empty | +| `Proxy.Upstreams.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationNamespace` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationType` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.LocalBindAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.LocalBindPort` | Equal, Not Equal | +| `Proxy.Upstreams.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `TaggedAddresses..Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses..Port` | Equal, Not Equal | +| `Tags` | In, Not In, Is Empty, Is Not Empty | +| `Weights.Passing` | Equal, Not Equal | +| `Weights.Warning` | Equal, Not Equal | + +## Get Service Configuration + +This endpoint was added in Consul 1.3.0 and returns the full service definition +for a single service instance registered on the local agent. It is used by +[Connect proxies](/docs/connect/proxies) to discover the embedded proxy +configuration that was registered with the instance. + +It is important to note that the services known by the agent may be different +from those reported by the catalog. This is usually due to changes being made +while there is no leader elected. The agent performs active +[anti-entropy](/docs/internals/anti-entropy), so in most situations +everything will be in sync within a few seconds. + +| Method | Path | Produces | +| ------ | ---------------------------- | ------------------ | +| `GET` | `/agent/service/:service_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ----------------- | ----------------- | ------------- | -------------- | +| `YES`1 | `none` | `none` | `service:read` | + +1 Supports hash-based blocking only. + +### Parameters + +- `service_id` `(string: )` - Specifies the ID of the service to + fetch. This is specified as part of the URL. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/agent/service/web-sidecar-proxy +``` + +### Sample Response + +```json +{ + "Kind": "connect-proxy", + "ID": "web-sidecar-proxy", + "Service": "web-sidecar-proxy", + "Tags": null, + "Meta": null, + "Port": 18080, + "Address": "", + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.53", + "port": 80 + } + }, + "Weights": { + "Passing": 1, + "Warning": 1 + }, + "EnableTagOverride": false, + "ContentHash": "4ecd29c7bc647ca8", + "Proxy": { + "DestinationServiceName": "web", + "DestinationServiceID": "web", + "LocalServiceAddress": "127.0.0.1", + "LocalServicePort": 8080, + "Config": { + "foo": "bar" + }, + "Upstreams": [ + { + "DestinationType": "service", + "DestinationName": "db", + "LocalBindPort": 9191 + } + ] + } +} +``` + +The response has the same structure as the [service +definition](/docs/agent/services) with one extra field `ContentHash` which +contains the [hash-based blocking +query](/api/features/blocking#hash-based-blocking-queries) hash for the result. The +same hash is also present in `X-Consul-ContentHash`. + +## Get local service health + +Retrieve an aggregated state of service(s) on the local agent by name. + +This endpoints support JSON format and text/plain formats, JSON being the +default. In order to get the text format, you can append `?format=text` to +the URL or use Mime Content negotiation by specifying a HTTP Header +`Accept` starting with `text/plain`. + +| Method | Path | Produces | +| ------ | ------------------------------------------------------ | ------------------ | +| `GET` | `/agent/health/service/name/:service_name` | `application/json` | +| `GET` | `/agent/health/service/name/:service_name?format=text` | `text/plain` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `NO` | `none` | `none` | `service:read` | + +Those endpoints return the aggregated values of all healthchecks for the +service instance(s) and will return the corresponding HTTP codes: + +| Result | Meaning | +| ------ | --------------------------------------------------------------- | +| `200` | All healthchecks of every matching service instance are passing | +| `400` | Bad parameter (missing service name of id) | +| `404` | No such service id or name | +| `429` | Some healthchecks are passing, at least one is warning | +| `503` | At least one of the healthchecks is critical | + +Those endpoints might be useful for the following use-cases: + +- a load-balancer wants to check IP connectivity with an agent and retrieve + the aggregated status of given service +- create aliases for a given service (thus, the healthcheck of alias uses + http://localhost:8500/v1/agent/service/id/aliased_service_id healthcheck) + +##### Note + +If you know the ID of service you want to target, it is recommended to use +[`/v1/agent/health/service/id/:service_id`](/api/agent/service#get-local-service-health-by-its-id) +so you have the result for the service only. When requesting +`/v1/agent/health/service/name/:service_name`, the caller will receive the +worst state of all services having the given name. + +### Sample Requests + +Given 2 services with name `web`, with web2 critical and web1 passing: + +#### List worst statuses of all instances of web-demo services (HTTP 503) + +##### By Name, Text + +```shell +curl http://localhost:8500/v1/agent/health/service/name/web?format=text +critical +``` + +##### By Name, JSON + +In JSON, the detail of passing/warning/critical services is present in output, +in a array. + +```shell +curl localhost:8500/v1/agent/health/service/name/web +``` + +```json +{ + "critical": [ + { + "ID": "web2", + "Service": "web", + "Tags": ["rails"], + "Address": "", + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.53", + "port": 80 + } + }, + "Meta": null, + "Port": 80, + "EnableTagOverride": false, + "Connect": { + "Native": false, + "Proxy": null + }, + "CreateIndex": 0, + "ModifyIndex": 0 + } + ], + "passing": [ + { + "ID": "web1", + "Service": "web", + "Tags": ["rails"], + "Address": "", + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.53", + "port": 80 + } + }, + "Meta": null, + "Port": 80, + "EnableTagOverride": false, + "Connect": { + "Native": false, + "Proxy": null + }, + "CreateIndex": 0, + "ModifyIndex": 0 + } + ] +} +``` + +#### List status of web2 (HTTP 503) + +##### Failure By ID, Text + +```shell +curl http://localhost:8500/v1/agent/health/service/id/web2?format=text +critical +``` + +##### Failure By ID, JSON + +In JSON, the output per ID is not an array, but only contains the value +of service. + +```shell +curl localhost:8500/v1/agent/health/service/id/web2 +``` + +```json +{ + "critical": { + "ID": "web2", + "Service": "web", + "Tags": ["rails"], + "Address": "", + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.53", + "port": 80 + } + }, + "Meta": null, + "Port": 80, + "EnableTagOverride": false, + "Connect": { + "Native": false, + "Proxy": null + }, + "CreateIndex": 0, + "ModifyIndex": 0 + } +} +``` + +#### List status of web2 (HTTP 200) + +##### Success By ID, Text + +```shell +curl localhost:8500/v1/agent/health/service/id/web1?format=text +passing +``` + +#### Success By ID, JSON + +```shell +curl localhost:8500/v1/agent/health/service/id/web1 +``` + +```json +{ + "passing": { + "ID": "web1", + "Service": "web", + "Tags": ["rails"], + "Address": "", + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.53", + "port": 80 + } + }, + "Meta": null, + "Port": 80, + "EnableTagOverride": false, + "Connect": { + "Native": false, + "Proxy": null + }, + "CreateIndex": 0, + "ModifyIndex": 0 + } +} +``` + +## Get local service health by its ID + +Retrieve an aggregated state of service(s) on the local agent by ID. + +See: + +| Method | Path | Produces | +| ------ | -------------------------------------------------- | ------------------ | +| `GET` | `/agent/health/service/id/:service_id` | `application/json` | +| `GET` | `/agent/health/service/id/:service_id?format=text` | `text/plain` | + +Parameters and response format are the same as +[`/v1/agent/health/service/name/:service_name`](/api/agent/service#get-local-service-health). + +## Register Service + +This endpoint adds a new service, with optional health checks, to the local +agent. + +The agent is responsible for managing the status of its local services, and for +sending updates about its local services to the servers to keep the global +catalog in sync. + +For "connect-proxy" kind services, the `service:write` ACL for the +`Proxy.DestinationServiceName` value is also required to register the service. + +| Method | Path | Produces | +| ------ | ------------------------- | ------------------ | +| `PUT` | `/agent/service/register` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `service:write` | + +### Query string parameters + +- `replace-existing-checks` - Missing healthchecks from the request will be deleted from the agent. Using this parameter allows to idempotently register a service and its checks without having to manually deregister checks. + +### Parameters + +Note that this endpoint, unlike most also [supports `snake_case`](/docs/agent/services#service-definition-parameter-case) +service definition keys for compatibility with the config file format. + +- `Name` `(string: )` - Specifies the logical name of the service. + Many service instances may share the same logical service name. We recommend using + [valid DNS labels](https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames) + for [compatibility with external DNS](/docs/agent/services#service-and-tag-names-with-dns). + +- `ID` `(string: "")` - Specifies a unique ID for this service. This must be + unique per _agent_. This defaults to the `Name` parameter if not provided. + +- `Tags` `(array: nil)` - Specifies a list of tags to assign to the + service. These tags can be used for later filtering and are exposed via the APIs. + We recommend using [valid DNS labels](https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames) + for [compatibility with external DNS](/docs/agent/services#service-and-tag-names-with-dns) + +- `Address` `(string: "")` - Specifies the address of the service. If not + provided, the agent's address is used as the address for the service during + DNS queries. + +- `TaggedAddresses` `(map: nil)` - Specifies a map of explicit LAN + and WAN addresses for the service instance. Both the address and port can be + specified within the map values. + +- `Meta` `(map: nil)` - Specifies arbitrary KV metadata + linked to the service instance. + +- `Port` `(int: 0)` - Specifies the port of the service. + +- `Kind` `(string: "")` - The kind of service. Defaults to "" which is a + typical Consul service. This value may also be "connect-proxy" for + [Connect](/docs/connect) proxies representing another service, + "mesh-gateway" for instances of a [mesh gateway](/docs/connect/mesh-gateway), + "terminating-gateway" for instances of a [terminating gateway](/docs/connect/terminating-gateway), + or "ingress-gateway" for instances of a [ingress gateway](/docs/connect/ingress-gateway). + +- `Proxy` `(Proxy: nil)` - From 1.2.3 on, specifies the configuration for a + Connect service proxy instance. This is only valid if `Kind` defines a proxy or gateway. + See the [Proxy documentation](/docs/connect/registration/service-registration) + for full details. + +- `Connect` `(Connect: nil)` - Specifies the + [configuration for Connect](/docs/connect/configuration). See the + [Connect Structure](#connect-structure) section below for supported fields. + +- `Check` `(Check: nil)` - Specifies a check. Please see the + [check documentation](/api/agent/check) for more information about the + accepted fields. If you don't provide a name or id for the check then they + will be generated. To provide a custom id and/or name set the `CheckID` + and/or `Name` field. + +- `Checks` `(array: nil)` - Specifies a list of checks. Please see the + [check documentation](/api/agent/check) for more information about the + accepted fields. If you don't provide a name or id for the check then they + will be generated. To provide a custom id and/or name set the `CheckID` + and/or `Name` field. The automatically generated `Name` and `CheckID` depend + on the position of the check within the array, so even though the behavior is + deterministic, it is recommended for all checks to either let consul set the + `CheckID` by leaving the field empty/omitting it or to provide a unique value. + +- `EnableTagOverride` `(bool: false)` - Specifies to disable the anti-entropy + feature for this service's tags. If `EnableTagOverride` is set to `true` then + external agents can update this service in the [catalog](/api/catalog) + and modify the tags. Subsequent local sync operations by this agent will + ignore the updated tags. For instance, if an external agent modified both the + tags and the port for this service and `EnableTagOverride` was set to `true` + then after the next sync cycle the service's port would revert to the original + value but the tags would maintain the updated value. As a counter example, if + an external agent modified both the tags and port for this service and + `EnableTagOverride` was set to `false` then after the next sync cycle the + service's port _and_ the tags would revert to the original value and all + modifications would be lost. + +- `Weights` `(Weights: nil)` - Specifies weights for the service. Please see the + [service documentation](/docs/agent/services) for more information about + weights. If this field is not provided weights will default to + `{"Passing": 1, "Warning": 1}`. + + It is important to note that this applies only to the locally registered + service. If you have multiple nodes all registering the same service their + `EnableTagOverride` configuration and all other service configuration items + are independent of one another. Updating the tags for the service registered + on one node is independent of the same service (by name) registered on + another node. If `EnableTagOverride` is not specified the default value is + `false`. See [anti-entropy syncs](/docs/internals/anti-entropy) for + more info. + +#### Connect Structure + +For the `Connect` field, the parameters are: + +- `Native` `(bool: false)` - Specifies whether this service supports + the [Connect](/docs/connect) protocol [natively](/docs/connect/native). + If this is true, then Connect proxies, DNS queries, etc. will be able to + service discover this service. +- `Proxy` `(Proxy: nil)` - + [**Deprecated**](/docs/connect/proxies/managed-deprecated) Specifies that + a managed Connect proxy should be started for this service instance, and + optionally provides configuration for the proxy. The format is as documented + in [Managed Proxy Deprecation](/docs/connect/proxies/managed-deprecated). +- `SidecarService` `(ServiceDefinition: nil)` - Specifies an optional nested + service definition to register. For more information see + [Sidecar Service Registration](/docs/connect/registration/sidecar-service). + +### Sample Payload + +```json +{ + "ID": "redis1", + "Name": "redis", + "Tags": ["primary", "v1"], + "Address": "127.0.0.1", + "Port": 8000, + "Meta": { + "redis_version": "4.0" + }, + "EnableTagOverride": false, + "Check": { + "DeregisterCriticalServiceAfter": "90m", + "Args": ["/usr/local/bin/check_redis.py"], + "Interval": "10s", + "Timeout": "5s" + }, + "Weights": { + "Passing": 10, + "Warning": 1 + } +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/agent/service/register?replace-existing-checks=true +``` + +## Deregister Service + +This endpoint removes a service from the local agent. If the service does not +exist, no action is taken. + +The agent will take care of deregistering the service with the catalog. If there +is an associated check, that is also deregistered. + +| Method | Path | Produces | +| ------ | --------------------------------------- | ------------------ | +| `PUT` | `/agent/service/deregister/:service_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `service:write` | + +### Parameters + +- `service_id` `(string: )` - Specifies the ID of the service to + deregister. This is specified as part of the URL. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/service/deregister/my-service-id +``` + +## Enable Maintenance Mode + +This endpoint places a given service into "maintenance mode". During maintenance +mode, the service will be marked as unavailable and will not be present in DNS +or API queries. This API call is idempotent. Maintenance mode is persistent and +will be automatically restored on agent restart. + +| Method | Path | Produces | +| ------ | ---------------------------------------- | ------------------ | +| `PUT` | `/agent/service/maintenance/:service_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `service:write` | + +### Parameters + +- `service_id` `(string: )` - Specifies the ID of the service to put + in maintenance mode. This is specified as part of the URL. + +- `enable` `(bool: )` - Specifies whether to enable or disable + maintenance mode. This is specified as part of the URL as a query string + parameter. + +- `reason` `(string: "")` - Specifies a text string explaining the reason for + placing the node into maintenance mode. This is simply to aid human operators. + If no reason is provided, a default value will be used instead. This is + specified as part of the URL as a query string parameter, and, as such, must + be URI-encoded. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/agent/service/maintenance/my-service-id?enable=true&reason=For+the+docs +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/catalog.mdx consul-1.8.7+dfsg1/website/pages/api-docs/catalog.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/catalog.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/catalog.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,1046 @@ +--- +layout: api +page_title: Catalog - HTTP API +sidebar_title: Catalog +description: |- + The /catalog endpoints register and deregister nodes, services, and checks in + Consul. +--- + +# Catalog HTTP API + +The `/catalog` endpoints register and deregister nodes, services, and checks in +Consul. The catalog should not be confused with the agent, since some of the +API methods look similar. + +## Register Entity + +This endpoint is a low-level mechanism for registering or updating +entries in the catalog. It is usually preferable to instead use the +[agent endpoints](/api/agent) for registration as they are simpler and +perform [anti-entropy](/docs/internals/anti-entropy). + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `PUT` | `/catalog/register` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +- `ID` `(string: "")` - An optional UUID to assign to the node. This must be a 36-character UUID-formatted string. + +- `Node` `(string: )` - Specifies the node ID to register. + +- `Address` `(string: )` - Specifies the address to register. + +- `Datacenter` `(string: "")` - Specifies the datacenter, which defaults to the + agent's datacenter if not provided. + +- `TaggedAddresses` `(map: nil)` - Specifies the tagged + addresses. + +- `NodeMeta` `(map: nil)` - Specifies arbitrary KV metadata + pairs for filtering purposes. + +- `Service` `(Service: nil)` - Specifies to register a service. If `ID` is not + provided, it will be defaulted to the value of the `Service.Service` property. + Only one service with a given `ID` may be present per node. We recommend using + [valid DNS labels](https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames) + for service definition names for [compatibility with external DNS](/docs/agent/services#service-and-tag-names-with-dns). + The service `Tags`, `Address`, `Meta`, and `Port` fields are all optional. For more + information about these fields and the implications of setting them, + see the [Service - Agent API](/api/agent/service) page + as registering services differs between using this or the Services Agent endpoint. + +- `Check` `(Check: nil)` - Specifies to register a check. The register API + manipulates the health check entry in the Catalog, but it does not setup the + script, TTL, or HTTP check to monitor the node's health. To truly enable a new + health check, the check must either be provided in agent configuration or set + via the [agent endpoint](agent). + + The `CheckID` can be omitted and will default to the value of `Name`. As + with `Service.ID`, the `CheckID` must be unique on this node. `Notes` is an + opaque field that is meant to hold human-readable text. If a `ServiceID` is + provided that matches the `ID` of a service on that node, the check is + treated as a service level health check, instead of a node level health + check. The `Status` must be one of `passing`, `warning`, or `critical`. + + The `Definition` field can be provided with details for a TCP or HTTP health + check. For more information, see the [Health Checks](/docs/agent/checks) page. + + Multiple checks can be provided by replacing `Check` with `Checks` and + sending an array of `Check` objects. + +- `SkipNodeUpdate` `(bool: false)` - Specifies whether to skip updating the + node's information in the registration. This is useful in the case where + only a health check or service entry on a node needs to be updated or when + a register request is intended to update a service entry or health check. + In both use cases, node information will not be overwritten, if the node is + already registered. Note, if the parameter is enabled for a node that doesn't + exist, it will still be created. + +- `ns` `(string: "")` - Specifies the namespace in which the + service and checks will be registered. This value may be provided by either the + `ns` URL query parameter or in the `X-Consul-Namespace` header. Additionally, + the namespace may be provided within the `Service` or `Check` fields but if + present in multiple places, they must all be the same. If not provided at all, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +It is important to note that `Check` does not have to be provided with `Service` +and vice versa. A catalog entry can have either, neither, or both. + +### Sample Payload + +```json +{ + "Datacenter": "dc1", + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "Address": "192.168.10.10", + "TaggedAddresses": { + "lan": "192.168.10.10", + "wan": "10.0.10.10" + }, + "NodeMeta": { + "somekey": "somevalue" + }, + "Service": { + "ID": "redis1", + "Service": "redis", + "Tags": ["primary", "v1"], + "Address": "127.0.0.1", + "TaggedAddresses": { + "lan": { + "address": "127.0.0.1", + "port": 8000 + }, + "wan": { + "address": "198.18.0.1", + "port": 80 + } + }, + "Meta": { + "redis_version": "4.0" + }, + "Port": 8000, + "Namespace": "default" + }, + "Check": { + "Node": "foobar", + "CheckID": "service:redis1", + "Name": "Redis health check", + "Notes": "Script based health check", + "Status": "passing", + "ServiceID": "redis1", + "Definition": { + "TCP": "localhost:8888", + "Interval": "5s", + "Timeout": "1s", + "DeregisterCriticalServiceAfter": "30s" + }, + "Namespace": "default" + }, + "SkipNodeUpdate": false +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + -H "X-Consul-Namespace: team-1" \ + http://127.0.0.1:8500/v1/catalog/register +``` + +## Deregister Entity + +This endpoint is a low-level mechanism for directly removing +entries from the Catalog. It is usually preferable to instead use the +[agent endpoints](/api/agent) for deregistration as they are simpler and +perform [anti-entropy](/docs/internals/anti-entropy). + +| Method | Path | Produces | +| ------ | --------------------- | ------------------ | +| `PUT` | `/catalog/deregister` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `NO` | `none` | `none` | `node:write,service:write` | + +### Parameters + +The behavior of the endpoint depends on what keys are provided. + +- `Node` `(string: )` - Specifies the ID of the node. If no other + values are provided, this node, all its services, and all its checks are + removed. + +- `Datacenter` `(string: "")` - Specifies the datacenter, which defaults to the + agent's datacenter if not provided. + +- `CheckID` `(string: "")` - Specifies the ID of the check to remove. + +- `ServiceID` `(string: "")` - Specifies the ID of the service to remove. The + service and all associated checks will be removed. + +- `Namespace` `(string: "")` - Specifies the namespace in which the + service and checks will be deregistered. If not provided in the JSON body, the value of + the `ns` URL query parameter or the `X-Consul-Namespace` header will be used. + If not provided at all, the namespace will be inherited from the request's ACL + token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payloads + +```json +{ + "Datacenter": "dc1", + "Node": "foobar" +} +``` + +```json +{ + "Datacenter": "dc1", + "Node": "foobar", + "CheckID": "service:redis1", + "Namespace": "team-1" +} +``` + +```json +{ + "Datacenter": "dc1", + "Node": "foobar", + "ServiceID": "redis1", + "Namespace": "team-1" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/catalog/deregister +``` + +## List Datacenters + +This endpoint returns the list of all known datacenters. The datacenters will be +sorted in ascending order based on the estimated median round trip time from the +server to the servers in that datacenter. + +This endpoint does not require a cluster leader and will succeed even during an +availability outage. Therefore, it can be used as a simple check to see if any +Consul servers are routable. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `GET` | `/catalog/datacenters` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/datacenters +``` + +### Sample Response + +```json +["dc1", "dc2"] +``` + +## List Nodes + +This endpoint and returns the nodes registered in a given datacenter. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `GET` | `/catalog/nodes` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `node:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `near` `(string: "")` - Specifies a node name to sort the node list in + ascending order based on the estimated round trip time from that node. Passing + `?near=_agent` will use the agent's node for the sort. This is specified as + part of the URL as a query parameter. + +- `node-meta` `(string: "")` - Specifies a desired node metadata key/value pair + of the form `key:value`. This parameter can be specified multiple times, and + will filter the results to nodes with the specified key/value pairs. This is + specified as part of the URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/nodes +``` + +### Sample Response + +```json +[ + { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "baz", + "Address": "10.1.10.11", + "Datacenter": "dc1", + "TaggedAddresses": { + "lan": "10.1.10.11", + "wan": "10.1.10.11" + }, + "Meta": { + "instance_type": "t2.medium" + } + }, + { + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Node": "foobar", + "Address": "10.1.10.12", + "Datacenter": "dc2", + "TaggedAddresses": { + "lan": "10.1.10.11", + "wan": "10.1.10.12" + }, + "Meta": { + "instance_type": "t2.large" + } + } +] +``` + +### Filtering + +The filter will be executed against each Node in the result list with +the following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ----------------------- | -------------------------------------------------- | +| `Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Meta` | Is Empty, Is Not Empty, In, Not In | +| `Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `TaggedAddresses.` | Equal, Not Equal, In, Not In, Matches, Not Matches | + +## List Services + +This endpoint returns the services registered in a given datacenter. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/catalog/services` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `YES` | `all` | `none` | `service:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `node-meta` `(string: "")` - Specifies a desired node metadata key/value pair + of the form `key:value`. This parameter can be specified multiple times, and + will filter the results to nodes with the specified key/value pairs. This is + specified as part of the URL as a query parameter. + +- `ns` `(string: "")` - Specifies the namespace to list services. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/services?ns=foo +``` + +### Sample Response + +```json +{ + "consul": [], + "redis": [], + "postgresql": ["primary", "secondary"] +} +``` + +The keys are the service names, and the array values provide all known tags for +a given service. + +## List Nodes for Service + +This endpoint returns the nodes providing a service in a given datacenter. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `GET` | `/catalog/service/:service` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | -------------------- | ------------------------ | +| `YES` | `all` | `background refresh` | `node:read,service:read` | + +### Parameters + +- `service` `(string: )` - Specifies the name of the service for which + to list nodes. This is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `tag` `(string: "")` - Specifies the tag to filter on. This is specified as part of + the URL as a query parameter. Can be used multiple times for additional filtering, + returning only the results that include all of the tag values provided. + +- `near` `(string: "")` - Specifies a node name to sort the node list in + ascending order based on the estimated round trip time from that node. Passing + `?near=_agent` will use the agent's node for the sort. This is specified as + part of the URL as a query parameter. + +- `node-meta` `(string: "")` - Specifies a desired node metadata key/value pair + of the form `key:value`. This parameter can be specified multiple times, and + will filter the results to nodes with the specified key/value pairs. This is + specified as part of the URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace to use for the + query. This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/service/my-service?ns=default +``` + +### Sample Response + +```json +[ + { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "Address": "192.168.10.10", + "Datacenter": "dc1", + "TaggedAddresses": { + "lan": "192.168.10.10", + "wan": "10.0.10.10" + }, + "NodeMeta": { + "somekey": "somevalue" + }, + "CreateIndex": 51, + "ModifyIndex": 51, + "ServiceAddress": "172.17.0.3", + "ServiceEnableTagOverride": false, + "ServiceID": "32a2a47f7992:nodea:5000", + "ServiceName": "foobar", + "ServicePort": 5000, + "ServiceMeta": { + "foobar_meta_value": "baz" + }, + "ServiceTaggedAddresses": { + "lan": { + "address": "172.17.0.3", + "port": 5000 + }, + "wan": { + "address": "198.18.0.1", + "port": 512 + } + }, + "ServiceTags": ["tacos"], + "ServiceProxy": { + "DestinationServiceName": "", + "DestinationServiceID": "", + "LocalServiceAddress": "", + "LocalServicePort": 0, + "Config": null, + "Upstreams": null + }, + "ServiceConnect": { + "Native": false, + "Proxy": null + }, + "Namespace": "default" + } +] +``` + +- `Address` is the IP address of the Consul node on which the service is + registered. + +- `Datacenter` is the data center of the Consul node on which the service is + registered. + +- `TaggedAddresses` is the list of explicit LAN and WAN IP addresses for the + agent + +- `NodeMeta` is a list of user-defined metadata key/value pairs for the node + +- `CreateIndex` is an internal index value representing when the service was + created + +- `ModifyIndex` is the last index that modified the service + +- `Node` is the name of the Consul node on which the service is registered + +- `ServiceAddress` is the IP address of the service host — if empty, node + address should be used + +- `ServiceEnableTagOverride` indicates whether service tags can be overridden on + this service + +- `ServiceID` is a unique service instance identifier + +- `ServiceName` is the name of the service + +- `ServiceMeta` is a list of user-defined metadata key/value pairs for the service + +- `ServicePort` is the port number of the service + +- `ServiceTags` is a list of tags for the service + +- `ServiceTaggedAddresses` is the map of explicit LAN and WAN addresses for the + service instance. This includes both the address as well as the port. + +- `ServiceKind` is the kind of service, usually "". See the Agent + [service registration API](/api/agent/service#kind) for more information. + +- `ServiceProxy` is the proxy config as specified in + [Connect Proxies](/docs/connect/proxies). + +- `ServiceConnect` are the [Connect](/docs/connect) settings. The + value of this struct is equivalent to the `Connect` field for service + registration. + +- `Namespace` is the Consul Enterprise namespace of this service instance + +### Filtering + +Filtering is executed against each entry in the top level result list with the +following selectors and filter operations being supported: + +| Selector | Supported Operations | +| --------------------------------------------- | -------------------------------------------------- | +| `Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `NodeMeta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `NodeMeta` | Is Empty, Is Not Empty, In, Not In | +| `ServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceConnect.Native` | Equal, Not Equal | +| `ServiceEnableTagOverride` | Equal, Not Equal | +| `ServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceKind` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceMeta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceMeta` | Is Empty, Is Not Empty, In, Not In | +| `ServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServicePort` | Equal, Not Equal | +| `ServiceProxy.DestinationServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.DestinationServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.LocalServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.LocalServicePort` | Equal, Not Equal | +| `ServiceProxy.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams.DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams.DestinationNamespace` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams.DestinationType` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams.LocalBindAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams.LocalBindPort` | Equal, Not Equal | +| `ServiceProxy.Upstreams.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceProxy.Upstreams` | Is Empty, Is Not Empty | +| `ServiceTaggedAddresses..Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceTaggedAddresses..Port` | Equal, Not Equal | +| `ServiceTaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `ServiceTags` | In, Not In, Is Empty, Is Not Empty | +| `ServiceWeights.Passing` | Equal, Not Equal | +| `ServiceWeights.Warning` | Equal, Not Equal | +| `TaggedAddresses.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | + +## List Nodes for Connect-capable Service + +This endpoint returns the nodes providing a +[Connect-capable](/docs/connect) service in a given datacenter. +This will include both proxies and native integrations. A service may +register both Connect-capable and incapable services at the same time, +so this endpoint may be used to filter only the Connect-capable endpoints. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `GET` | `/catalog/connect/:service` | `application/json` | + +Parameters and response format are the same as +[`/catalog/service/:service`](/api/catalog#list-nodes-for-service). + +## Retrieve Map of Services for a Node + +This endpoint returns the node's registered services. + +| Method | Path | Produces | +| ------ | --------------------- | ------------------ | +| `GET` | `/catalog/node/:node` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------ | +| `YES` | `all` | `none` | `node:read,service:read` | + +### Parameters + +- `node` `(string: )` - Specifies the name of the node for which + to list services. This is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace to list services. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/node/my-node +``` + +### Sample Response + +```json +{ + "Node": { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "Address": "10.1.10.12", + "Datacenter": "dc1", + "TaggedAddresses": { + "lan": "10.1.10.12", + "wan": "10.1.10.12" + }, + "Meta": { + "instance_type": "t2.medium" + } + }, + "Services": { + "consul": { + "ID": "consul", + "Service": "consul", + "Tags": null, + "Meta": {}, + "Port": 8300 + }, + "redis": { + "ID": "redis", + "Service": "redis", + "TaggedAddresses": { + "lan": { + "address": "10.1.10.12", + "port": 8000 + }, + "wan": { + "address": "198.18.1.2", + "port": 80 + } + }, + "Tags": ["v1"], + "Meta": { + "redis_version": "4.0" + }, + "Port": 8000, + "Namespace": "default" + } + } +} +``` + +### Filtering + +The filter will be executed against each value in the `Services` mapping within the +top level Node object. The following selectors and filter operations are supported: + +| Selector | Supported Operations | +| -------------------------------------- | -------------------------------------------------- | +| `Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Connect.Native` | Equal, Not Equal | +| `EnableTagOverride` | Equal, Not Equal | +| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Kind` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Meta` | Is Empty, Is Not Empty, In, Not In | +| `Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Port` | Equal, Not Equal | +| `Proxy.DestinationServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.DestinationServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.LocalServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.LocalServicePort` | Equal, Not Equal | +| `Proxy.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams` | Is Empty, Is Not Empty | +| `Proxy.Upstreams.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationNamespace` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationType` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.LocalBindAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.LocalBindPort` | Equal, Not Equal | +| `Proxy.Upstreams.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `TaggedAddresses..Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses..Port` | Equal, Not Equal | +| `Tags` | In, Not In, Is Empty, Is Not Empty | +| `Weights.Passing` | Equal, Not Equal | +| `Weights.Warning` | Equal, Not Equal | + +## List Services for Node + +This endpoint returns the node's registered services. + +| Method | Path | Produces | +| ------ | ------------------------------ | ------------------ | +| `GET` | `/catalog/node-services/:node` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------ | +| `YES` | `all` | `none` | `node:read,service:read` | + +### Parameters + +- `node` `(string: )` - Specifies the name of the node for which + to list services. This is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace to list services. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. The `*` + wildcard may be used and then services from all namespaces will be returned. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/node-services/my-node +``` + +### Sample Response + +```json +{ + "Node": { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "Address": "10.1.10.12", + "Datacenter": "dc1", + "TaggedAddresses": { + "lan": "10.1.10.12", + "wan": "10.1.10.12" + }, + "Meta": { + "instance_type": "t2.medium" + } + }, + "Services": [ + { + "ID": "consul", + "Service": "consul", + "Tags": null, + "Meta": {}, + "Port": 8300 + }, + { + "ID": "redis", + "Service": "redis", + "TaggedAddresses": { + "lan": { + "address": "10.1.10.12", + "port": 8000, + }, + "wan": { + "address": "198.18.1.2", + "port": 80 + } + }, + "Tags": [ + "v1" + ], + "Meta": { + "redis_version": "4.0" + }, + "Port": 8000, + "Namespace": "default" + } + } +} +``` + +### Filtering + +The filter will be executed against each value in the `Services` list within the +top level object. The following selectors and filter operations are supported: + +| Selector | Supported Operations | +| -------------------------------------- | -------------------------------------------------- | +| `Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Connect.Native` | Equal, Not Equal | +| `EnableTagOverride` | Equal, Not Equal | +| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Kind` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Meta` | Is Empty, Is Not Empty, In, Not In | +| `Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Port` | Equal, Not Equal | +| `Proxy.DestinationServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.DestinationServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.LocalServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.LocalServicePort` | Equal, Not Equal | +| `Proxy.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams` | Is Empty, Is Not Empty | +| `Proxy.Upstreams.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationNamespace` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.DestinationType` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.LocalBindAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Proxy.Upstreams.LocalBindPort` | Equal, Not Equal | +| `Proxy.Upstreams.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `TaggedAddresses..Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `TaggedAddresses..Port` | Equal, Not Equal | +| `Tags` | In, Not In, Is Empty, Is Not Empty | +| `Weights.Passing` | Equal, Not Equal | +| `Weights.Warning` | Equal, Not Equal | + +## List Services for Gateway + +-> **1.8.0+:** This API is available in Consul versions 1.8.0 and later. + +This endpoint returns the services associated with an ingress gateway or terminating gateway. + +| Method | Path | Produces | +| ------ | ------------------------------------ | ------------------ | +| `GET` | `/catalog/gateway-services/:gateway` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `YES` | `all` | `none` | `service:read` | + +### Parameters + +- `gateway` `(string: )` - Specifies the name of the node for which + to list services. This is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `ns` `(string: "")` - Specifies the namespace of the gateway. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. The `*` + wildcard may be used and then services from all namespaces will be returned. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/catalog/gateway-services/my-terminating-gateway +``` + +### Sample Responses + +```json +[ + { + "Gateway": { + "Name": "my-terminating-gateway", + "Namespace": "default" + }, + "Service": { + "Name": "api", + "Namespace": "frontend" + }, + "GatewayKind": "terminating-gateway", + "CAFile": "/etc/certs/ca.pem", + "CertFile": "/etc/certs/api/client.pem", + "KeyFile": "/etc/certs/api/client.key", + "SNI": "api.my-domain", + "CreateIndex": 16, + "ModifyIndex": 16 + }, + { + "Gateway": { + "Name": "my-terminating-gateway", + "Namespace": "default" + }, + "Service": { + "Name": "web", + "Namespace": "frontend" + }, + "GatewayKind": "terminating-gateway", + "CreateIndex": 17, + "ModifyIndex": 17 + } +] +``` + +```json +[ + { + "Gateway": { + "Name": "my-ingress-gateway", + "Namespace": "default" + }, + "Service": { + "Name": "api", + "Namespace": "frontend" + }, + "GatewayKind": "ingress-gateway", + "Port": 8888, + "Protocol": "http", + "Hosts": ["api.mydomain.com"], + "CreateIndex": 15, + "ModifyIndex": 15 + }, + { + "Gateway": { + "Name": "my-ingress-gateway", + "Namespace": "default" + }, + "Service": { + "Name": "redis", + "Namespace": "ops" + }, + "GatewayKind": "ingress-gateway", + "Port": 8443, + "Protocol": "tcp", + "CreateIndex": 16, + "ModifyIndex": 16 + } +] +``` + +- `Gateway.Name` is the name of the gateway service of the request + +- `Gateway.Namespace` is the Consul Enterprise namespace of the gateway + +- `Service.Name` is the name of a service associated with the gateway + +- `Service.Namespace` is the Consul Enterprise namespace of a service associated with the gateway + +- `GatewayKind` is the kind of service, will be one of "ingress-gateway" or "terminating-gateway". See the Agent + [service registration API](/api/agent/service#kind) for more information. + +- `CAFile` is the path to a CA file the gateway will use for TLS origination to the associated service + +- `CertFile` is the path to a client certificate the gateway will use for TLS origination to the associated service + +- `KeyFile` is the path to a key file the gateway will use for TLS origination to the associated service + +- `SNI` is a hostname or domain name the gateway will specify during the TLS handshake with the associated service + +- `Port` is the port the ingress gateway is listening on for the associated service + +- `Protocol` is the protocol of the ingress gateway's listener for the associated service + +- `Hosts` list of hosts that specify what requests will match to this associated service + +- `FromWildcard` determines whether the service was associated with the gateway by providing a wildcard specifier + in the gateway's configuration entry diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/config.mdx consul-1.8.7+dfsg1/website/pages/api-docs/config.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/config.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/config.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,280 @@ +--- +layout: api +page_title: Config - HTTP API +sidebar_title: Config +description: |- + The /config endpoints are for managing centralized configuration + in Consul. +--- + +# Config HTTP Endpoint + +The `/config` endpoints create, update, delete and query central configuration +entries registered with Consul. See the +[agent configuration](/docs/agent/options#enable_central_service_config) +for more information on how to enable this functionality for centrally +configuring services and [configuration entries docs](/docs/agent/config_entries) for a description +of the configuration entries content. + +## Apply Configuration + +This endpoint creates or updates the given config entry. + +| Method | Path | Produces | +| ------ | --------- | ------------------ | +| `PUT` | `/config` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------------------------- | +| `NO` | `none` | `none` | `service:write`
    `operator:write`1 | + +

    + 1 The ACL required depends on the config entry kind being updated: +

    + +| Config Entry Kind | Required ACL | +| ------------------- | ---------------- | +| ingress-gateway | `operator:write` | +| proxy-defaults | `operator:write` | +| service-defaults | `service:write` | +| service-resolver | `service:write` | +| service-router | `service:write` | +| service-splitter | `service:write` | +| terminating-gateway | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `cas` `(int: 0)` - Specifies to use a Check-And-Set operation. If the index is + 0, Consul will only store the entry if it does not already exist. If the index is + non-zero, the entry is only set if the current index matches the `ModifyIndex` + of that entry. + +- `ns` `(string: "")` - Specifies the namespace the config + entry will apply to. This value may be provided by either the `ns` URL query + parameter or in the `X-Consul-Namespace` header. If not provided at all, + the namespace will be inherited from the request's ACL token or will default + to the `default` namespace. Added in Consul 1.7.0. + +### Sample Payload + +```javascript +{ + "Kind": "service-defaults", + "Name": "web", + "Protocol": "http" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload \ + http://127.0.0.1:8500/v1/config +``` + +## Get Configuration + +This endpoint returns a specific config entry. + +| Method | Path | Produces | +| ------ | --------------------- | ------------------ | +| `GET` | `/config/:kind/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `YES` | `all` | `none` | `service:read`1 | + +1 The ACL required depends on the config entry kind being read: + +| Config Entry Kind | Required ACL | +| ------------------- | -------------- | +| ingress-gateway | `service:read` | +| proxy-defaults | `` | +| service-defaults | `service:read` | +| service-resolver | `service:read` | +| service-router | `service:read` | +| service-splitter | `service:read` | +| terminating-gateway | `service:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `kind` `(string: )` - Specifies the kind of the entry to read. This + is specified as part of the URL. + +- `name` `(string: )` - Specifies the name of the entry to read. This + is specified as part of the URL. + +- `ns` `(string: "")` - Specifies the namespace to query. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited from + the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + --request GET \ + http://127.0.0.1:8500/v1/config/service-defaults/web +``` + +### Sample Response + +```json +{ + "Kind": "service-defaults", + "Name": "web", + "Protocol": "http", + "CreateIndex": 15, + "ModifyIndex": 35 +} +``` + +## List Configurations + +This endpoint returns all config entries of the given kind. + +| Method | Path | Produces | +| ------ | --------------- | ------------------ | +| `GET` | `/config/:kind` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------------------- | +| `YES` | `all` | `none` | `service:read`1 | + +1 The ACL required depends on the config entry kind being read: + +| Config Entry Kind | Required ACL | +| ------------------- | -------------- | +| ingress-gateway | `service:read` | +| proxy-defaults | `` | +| service-defaults | `service:read` | +| service-resolver | `service:read` | +| service-router | `service:read` | +| service-splitter | `service:read` | +| terminating-gateway | `service:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `kind` `(string: )` - Specifies the kind of the entry to list. This + is specified as part of the URL. + +- `ns` `(string: "")` - Specifies the namespace to query. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited from + the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + --request GET \ + http://127.0.0.1:8500/v1/config/service-defaults +``` + +### Sample Response + +```json +[ + { + "Kind": "service-defaults", + "Name": "db", + "Protocol": "tcp", + "CreateIndex": 16, + "ModifyIndex": 16 + }, + { + "Kind": "service-defaults", + "Name": "web", + "Protocol": "http", + "CreateIndex": 13, + "ModifyIndex": 13 + } +] +``` + +## Delete Configuration + +This endpoint deletes the given config entry. + +| Method | Path | Produces | +| -------- | --------------------- | ------------------ | +| `DELETE` | `/config/:kind/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------------------------- | +| `NO` | `none` | `none` | `service:write`
    `operator:write`1 | + +1 The ACL required depends on the config entry kind being deleted: + +| Config Entry Kind | Required ACL | +| ------------------- | ---------------- | +| ingress-gateway | `operator:write` | +| proxy-defaults | `operator:write` | +| service-defaults | `service:write` | +| service-resolver | `service:write` | +| service-router | `service:write` | +| service-splitter | `service:write` | +| terminating-gateway | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `kind` `(string: )` - Specifies the kind of the entry to delete. This + is specified as part of the URL. + +- `name` `(string: )` - Specifies the name of the entry to delete. This + is specified as part of the URL. + +- `ns` `(string: "")` - Specifies the namespace to delete from. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/config/service-defaults/web +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/connect/ca.mdx consul-1.8.7+dfsg1/website/pages/api-docs/connect/ca.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/connect/ca.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/connect/ca.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,207 @@ +--- +layout: api +page_title: Certificate Authority - Connect - HTTP API +sidebar_title: Certificate Authority (CA) +description: |- + The /connect/ca endpoints provide tools for interacting with Connect's + Certificate Authority mechanism via Consul's HTTP API. +--- + +# Certificate Authority (CA) - Connect HTTP API + +The `/connect/ca` endpoints provide tools for interacting with Connect's +Certificate Authority mechanism. + +## List CA Root Certificates + +This endpoint returns the current list of trusted CA root certificates in +the cluster. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/connect/ca/roots` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `none` | + +### Parameters + +- `pem` `(boolean: false)` - Specifies that the return body should be a PEM encoded + certificate chain suitable for use by applications needing to trust Connect CA + signed certificates. The Content-Type will be set to `application/pem-certificate-chain` + to indicate the format of the response. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/connect/ca/roots +``` + +### Sample Response + +```json +{ + "ActiveRootID": "c7:bd:55:4b:64:80:14:51:10:a4:b9:b9:d7:e0:75:3f:86:ba:bb:24", + "TrustDomain": "7f42f496-fbc7-8692-05ed-334aa5340c1e.consul", + "Roots": [ + { + "ID": "c7:bd:55:4b:64:80:14:51:10:a4:b9:b9:d7:e0:75:3f:86:ba:bb:24", + "Name": "Consul CA Root Cert", + "SerialNumber": 7, + "SigningKeyID": "2d:09:5d:84:b9:89:4b:dd:e3:88:bb:9c:e2:b2:69:81:1f:4b:a6:fd:4d:df:ee:74:63:f3:74:55:ca:b0:b5:65", + "ExternalTrustDomain": "a1499528-fbf6-df7b-05e5-ae81e1873fc4", + "NotBefore": "2018-05-25T21:39:23Z", + "NotAfter": "2028-05-22T21:39:23Z", + "RootCert": "-----BEGIN CERTIFICATE-----\nMIICmDCCAj6gAwIBAgIBBzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtDb25zdWwg\nQ0EgNzAeFw0xODA1MjUyMTM5MjNaFw0yODA1MjIyMTM5MjNaMBYxFDASBgNVBAMT\nC0NvbnN1bCBDQSA3MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEq4S32Pu0/VL4\nG75gvdyQuAhqMZFsfBRwD3pgvblgZMeJc9KDosxnPR+W34NXtMD/860NNVJIILln\n9lLhIjWPQqOCAXswggF3MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/\nMGgGA1UdDgRhBF8yZDowOTo1ZDo4NDpiOTo4OTo0YjpkZDplMzo4ODpiYjo5Yzpl\nMjpiMjo2OTo4MToxZjo0YjphNjpmZDo0ZDpkZjplZTo3NDo2MzpmMzo3NDo1NTpj\nYTpiMDpiNTo2NTBqBgNVHSMEYzBhgF8yZDowOTo1ZDo4NDpiOTo4OTo0YjpkZDpl\nMzo4ODpiYjo5YzplMjpiMjo2OTo4MToxZjo0YjphNjpmZDo0ZDpkZjplZTo3NDo2\nMzpmMzo3NDo1NTpjYTpiMDpiNTo2NTA/BgNVHREEODA2hjRzcGlmZmU6Ly83ZjQy\nZjQ5Ni1mYmM3LTg2OTItMDVlZC0zMzRhYTUzNDBjMWUuY29uc3VsMD0GA1UdHgEB\n/wQzMDGgLzAtgis3ZjQyZjQ5Ni1mYmM3LTg2OTItMDVlZC0zMzRhYTUzNDBjMWUu\nY29uc3VsMAoGCCqGSM49BAMCA0gAMEUCIBBBDOWXWApx4S6bHJ49AW87Nw8uQ/gJ\nJ6lvm3HzEQw2AiEA4PVqWt+z8fsQht0cACM42kghL97SgDSf8rgCqfLYMng=\n-----END CERTIFICATE-----\n", + "IntermediateCerts": null, + "Active": true, + "PrivateKeyType": "ec", + "PrivateKeyBits": 256, + "CreateIndex": 8, + "ModifyIndex": 8 + } + ] +} +``` + +### Sample PEM Encoded Response + +``` +-----BEGIN CERTIFICATE----- +MIICDzCCAbWgAwIBAgIBCDAKBggqhkjOPQQDAjAxMS8wLQYDVQQDEyZwcmktMWNq +OHphbW0uY29uc3VsLmNhLjA3OTMzYTEzLmNvbnN1bDAeFw0yMDEwMDgxOTQ4MzZa +Fw0zMDEwMDgxOTQ4MzZaMDExLzAtBgNVBAMTJnByaS0xY2o4emFtbS5jb25zdWwu +Y2EuMDc5MzNhMTMuY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDCkT +IIxSDhA3XCKIuDcj4s9IVjf0NQT6QHPAzFBb964/4fTtX/J8x2n6A1lOXowFIWtx +GvAD/IJF74zn5ZA/wqOBvTCBujAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zApBgNVHQ4EIgQguPlAkrIkOnLr9+8DZ4afZWrYZUd2LB6nMJP72jDVxmcw +KwYDVR0jBCQwIoAguPlAkrIkOnLr9+8DZ4afZWrYZUd2LB6nMJP72jDVxmcwPwYD +VR0RBDgwNoY0c3BpZmZlOi8vMDc5MzNhMTMtYTYyYi1iZTkwLTQ0ZjEtZGVkOWE2 +NjczNzZlLmNvbnN1bDAKBggqhkjOPQQDAgNIADBFAiEA0ExkvLESG1I1TMFVronr +2fjoORukgzBgRMbWAEC2DJ0CIACsxeFS6tprHiRv4cEa2Md75h1iIisb2V2U7dvY +Z7Rr +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBCTAKBggqhkjOPQQDAjAxMS8wLQYDVQQDEyZwcmktMWNq +OHphbW0uY29uc3VsLmNhLjA3OTMzYTEzLmNvbnN1bDAeFw0yMDEwMDgxOTQ3Mzda +Fw0yMTEwMDgxOTQ3MzdaMDExLzAtBgNVBAMTJnNlYy0xbmIxMHZ0by5jb25zdWwu +Y2EuMDc5MzNhMTMuY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9zWs +UxEYvLZUySoflz6e+HqLcaXM8heNRRkAiLiGkmn6nan6olnnrVBLyHAfHaHWJQ9W +wI8HwSZf0g4Ms16LWKOBwDCBvTAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgw +BgEB/wIBADApBgNVHQ4EIgQg+csK9Sg6odIfLLk3aiRY2OB4O0DiOa1XRTVdOVDE +t6QwKwYDVR0jBCQwIoAguPlAkrIkOnLr9+8DZ4afZWrYZUd2LB6nMJP72jDVxmcw +PwYDVR0RBDgwNoY0c3BpZmZlOi8vMDc5MzNhMTMtYTYyYi1iZTkwLTQ0ZjEtZGVk +OWE2NjczNzZlLmNvbnN1bDAKBggqhkjOPQQDAgNJADBGAiEAqJ60KJepAP4Xe4Ak +5UYB1huu/B8Lyz5yEYUpUplgdD4CIQCrrkoXoD4SGJ4HaIjy6a5eNf3YkhLpmbXO +6DL6FXVa1Q== +-----END CERTIFICATE----- +``` + +## Get CA Configuration + +This endpoint returns the current CA configuration. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `GET` | `/connect/ca/configuration` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `YES` | `all` | `none` | `operator:write` 1 | + +1 ACL required was operator:read prior to versions 1.8.6, 1.7.10, and 1.6.10. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/connect/ca/configuration +``` + +### Sample Response + +```json +{ + "Provider": "consul", + "Config": { + "LeafCertTTL": "72h", + "RotationPeriod": "2160h", + "IntermediateCertTTL": "8760h" + }, + "CreateIndex": 5, + "ModifyIndex": 5 +} +``` + +## Update CA Configuration + +This endpoint updates the configuration for the CA. If this results in a +new root certificate being used, the [Root Rotation](/docs/connect/ca#root-certificate-rotation) process will be triggered. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `PUT` | `/connect/ca/configuration` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `Provider` `(string: )` - Specifies the CA provider type to use. + +- `Config` `(map[string]string: )` - The raw configuration to use + for the chosen provider. For more information on configuring the Connect CA + providers, see [Provider Config](/docs/connect/ca). + +- `ForceWithoutCrossSigning` `(bool: )` - Indicates that the CA change + should be force to complete even if the current CA doesn't support cross + signing. Changing root without cross-signing may cause temporary connection + failures until the rollout completes. See [Forced Rotation Without + Cross-Signing](/docs/connect/ca#forced-rotation-without-cross-signing) + for more detail. + +### Sample Payload + +```json +{ + "Provider": "consul", + "Config": { + "LeafCertTTL": "72h", + "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----...", + "RootCert": "-----BEGIN CERTIFICATE-----...", + "RotationPeriod": "2160h", + "IntermediateCertTTL": "8760h" + }, + "ForceWithoutCrossSigning": false +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/connect/ca/configuration +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/connect/index.mdx consul-1.8.7+dfsg1/website/pages/api-docs/connect/index.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/connect/index.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/connect/index.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,22 @@ +--- +layout: api +page_title: Connect - HTTP API +sidebar_title: Connect +description: >- + The `/connect` endpoints provide access to Connect-related operations for + intentions and the certificate authority. +--- + +# Connect HTTP Endpoint + +The `/connect` endpoints provide access to +[Connect-related](/docs/connect) operations for +intentions and the certificate authority. + +There are also Connect-related endpoints in the +[Agent](/api/agent) and [Catalog](/api/catalog) APIs. For example, +the API for requesting a TLS certificate for a service is part of the agent +APIs. And the catalog API has an endpoint for finding all Connect-capable +services in the catalog. + +Please choose a sub-section in the navigation for more information. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/connect/intentions.mdx consul-1.8.7+dfsg1/website/pages/api-docs/connect/intentions.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/connect/intentions.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/connect/intentions.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,479 @@ +--- +layout: api +page_title: Intentions - Connect - HTTP API +sidebar_title: Intentions +description: |- + The /connect/intentions endpoint provide tools for managing intentions via + Consul's HTTP API. +--- + +# Intentions - Connect HTTP API + +The `/connect/intentions` endpoint provide tools for managing +[intentions](/docs/connect/intentions). + +## Create Intention + +This endpoint creates a new intention and returns its ID if it was created +successfully. + +The name and destination pair must be unique. If another intention matches +the name and destination, the creation will fail. You must either update the +existing intention or delete it prior to creating a new one. + +| Method | Path | Produces | +| ------ | --------------------- | ------------------ | +| `POST` | `/connect/intentions` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------ | +| `NO` | `none` | `none` | `intentions:write`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `SourceName` `(string: )` - The source of the intention. + For a `SourceType` of `consul` this is the name of a Consul service. The + service doesn't need to be registered. + +- `SourceNS` `(string: "")` - The namespace for the + `SourceName` parameter. + +- `DestinationName` `(string: )` - The destination of the intention. + The intention destination is always a Consul service, unlike the source. + The service doesn't need to be registered. + +- `DestinationNS` `(string: "")` - The namespace for the + `DestinationName` parameter. + +- `SourceType` `(string: )` - The type for the `SourceName` value. + This can be only "consul" today to represent a Consul service. + +- `Action` `(string: )` - This is one of "allow" or "deny" for + the action that should be taken if this intention matches a request. + +- `Description` `(string: "")` - Description for the intention. This is not + used for anything by Consul, but is presented in API responses to assist + tooling. + +- `Meta` `(map: nil)` - Specifies arbitrary KV metadata pairs. + +### Sample Payload + +```json +{ + "SourceName": "web", + "DestinationName": "db", + "SourceType": "consul", + "Action": "allow" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/connect/intentions +``` + +### Sample Response + +```json +{ + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05" +} +``` + +## Read Specific Intention + +This endpoint reads a specific intention. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `GET` | `/connect/intentions/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ----------------------------- | +| `YES` | `all` | `none` | `intentions:read`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the intention to read. This + is specified as part of the URL. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/connect/intentions/e9ebc19f-d481-42b1-4871-4d298d3acd5c +``` + +### Sample Response + +```json +{ + "ID": "e9ebc19f-d481-42b1-4871-4d298d3acd5c", + "Description": "", + "SourceNS": "default", + "SourceName": "web", + "DestinationNS": "default", + "DestinationName": "db", + "SourceType": "consul", + "Action": "allow", + "Meta": {}, + "Precedence": 9, + "CreatedAt": "2018-05-21T16:41:27.977155457Z", + "UpdatedAt": "2018-05-21T16:41:27.977157724Z", + "CreateIndex": 11, + "ModifyIndex": 11 +} +``` + +## List Intentions + +This endpoint lists all intentions. + +| Method | Path | Produces | +| ------ | --------------------- | ------------------ | +| `GET` | `/connect/intentions` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ----------------------------- | +| `YES` | `all` | `none` | `intentions:read`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +### Sample Request + +```shell-session +$ curl \ + 'http://127.0.0.1:8500/v1/connect/intentions?filter=SourceName==web' +``` + +### Sample Response + +```json +[ + { + "ID": "e9ebc19f-d481-42b1-4871-4d298d3acd5c", + "Description": "", + "SourceNS": "default", + "SourceName": "web", + "DestinationNS": "default", + "DestinationName": "db", + "SourceType": "consul", + "Action": "allow", + "Meta": {}, + "Precedence": 9, + "CreatedAt": "2018-05-21T16:41:27.977155457Z", + "UpdatedAt": "2018-05-21T16:41:27.977157724Z", + "CreateIndex": 11, + "ModifyIndex": 11 + } +] +``` + +### Filtering + +The filter will be executed against each Intention in the result list with +the following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ----------------- | -------------------------------------------------- | +| `Action` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Description` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `DestinationNS` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Meta` | Is Empty, Is Not Empty, In, Not In | +| `Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Precedence` | Equal, Not Equal | +| `SourceNS` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `SourceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `SourceType` | Equal, Not Equal, In, Not In, Matches, Not Matches | + +## Update Intention + +This endpoint updates an intention with the given values. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `PUT` | `/connect/intentions/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------ | +| `NO` | `none` | `none` | `intentions:write`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the intention to update. This + is specified as part of the URL. + +- Other parameters are identical to creating an intention. + +### Sample Payload + +```json +{ + "SourceName": "web", + "DestinationName": "other-db", + "SourceType": "consul", + "Action": "allow" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/connect/intentions/e9ebc19f-d481-42b1-4871-4d298d3acd5c +``` + +## Delete Intention + +This endpoint deletes a specific intention. + +| Method | Path | Produces | +| -------- | --------------------------- | ------------------ | +| `DELETE` | `/connect/intentions/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------ | +| `NO` | `none` | `none` | `intentions:write`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the intention to delete. This + is specified as part of the URL. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/connect/intentions/e9ebc19f-d481-42b1-4871-4d298d3acd5c +``` + +## Check Intention Result + +This endpoint evaluates the intentions for a specific source and destination +and returns whether the connection would be authorized or not given the +current Consul configuration and set of intentions. + +This endpoint will work even if the destination service has +`intention = "deny"` specifically set, because the resulting API response +does not contain any information about the intention itself. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `GET` | `/connect/intentions/check` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ----------------------------- | +| `NO` | `none` | `none` | `intentions:read`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `source` `(string: )` - Specifies the source service. This + is specified as part of the URL. + This can take [several forms](/docs/commands/intention#source-and-destination-naming). + +- `destination` `(string: )` - Specifies the destination service. This + is specified as part of the URL. + This can take [several forms](/docs/commands/intention#source-and-destination-naming). + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/connect/intentions/check?source=web&destination=db +``` + +### Sample Response + +```json +{ + "Allowed": true +} +``` + +- `Allowed` is true if the connection would be allowed, false otherwise. + +## List Matching Intentions + +This endpoint lists the intentions that match a given source or destination. +The intentions in the response are in evaluation order. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `GET` | `/connect/intentions/match` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ----------------------------- | +| `NO` | `none` | `none` | `intentions:read`1 | + +

    + 1 Intention ACL rules are specified as part of a `service` rule. + See{' '} + + Intention Management Permissions + {' '} + for more details. +

    + +### Parameters + +- `by` `(string: )` - Specifies whether to match the "name" value + by "source" or "destination". + +- `name` `(string: )` - Specifies a name to match. This parameter + can be repeated for batching multiple matches. + This can take [several forms](/docs/commands/intention#source-and-destination-naming). + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/connect/intentions/match?by=source&name=web +``` + +### Sample Response + +```json +{ + "web": [ + { + "ID": "ed16f6a6-d863-1bec-af45-96bbdcbe02be", + "Description": "", + "SourceNS": "default", + "SourceName": "web", + "DestinationNS": "default", + "DestinationName": "db", + "SourceType": "consul", + "Action": "deny", + "Meta": {}, + "CreatedAt": "2018-05-21T16:41:33.296693825Z", + "UpdatedAt": "2018-05-21T16:41:33.296694288Z", + "CreateIndex": 12, + "ModifyIndex": 12 + }, + { + "ID": "e9ebc19f-d481-42b1-4871-4d298d3acd5c", + "Description": "", + "SourceNS": "default", + "SourceName": "web", + "DestinationNS": "default", + "DestinationName": "*", + "SourceType": "consul", + "Action": "allow", + "Meta": {}, + "CreatedAt": "2018-05-21T16:41:27.977155457Z", + "UpdatedAt": "2018-05-21T16:41:27.977157724Z", + "CreateIndex": 11, + "ModifyIndex": 11 + } + ] +} +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/coordinate.mdx consul-1.8.7+dfsg1/website/pages/api-docs/coordinate.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/coordinate.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/coordinate.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,237 @@ +--- +layout: api +page_title: Coordinate - HTTP API +sidebar_title: Coordinates +description: |- + The /coordinate endpoints query for the network coordinates for nodes in the + local datacenter as well as Consul servers in the local datacenter and remote + datacenters. +--- + +# Coordinate HTTP Endpoint + +The `/coordinate` endpoints query for the network coordinates for nodes in the +local datacenter as well as Consul servers in the local datacenter and remote +datacenters. + +Please see the [Network Coordinates](/docs/internals/coordinates) internals +guide for more information on how these coordinates are computed, and for +details on how to perform calculations with them. + +## Read WAN Coordinates + +This endpoint returns the WAN network coordinates for all Consul servers, +organized by datacenters. It serves data out of the server's local Serf data, so +its results may vary as requests are handled by different servers in the +cluster. + +| Method | Path | Produces | +| ------ | ------------------------- | ------------------ | +| `GET` | `/coordinate/datacenters` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/coordinate/datacenters +``` + +### Sample Response + +```json +[ + { + "Datacenter": "dc1", + "AreaID": "WAN", + "Coordinates": [ + { + "Node": "agent-one", + "Coord": { + "Adjustment": 0, + "Error": 1.5, + "Height": 0, + "Vec": [0, 0, 0, 0, 0, 0, 0, 0] + } + } + ] + } +] +``` + +In **Consul Enterprise**, this will include coordinates for user-added network +areas as well, as indicated by the `AreaID`. Coordinates are only compatible +within the same area. + +## Read LAN Coordinates for all nodes + +This endpoint returns the LAN network coordinates for all nodes in a given +datacenter. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/coordinate/nodes` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `node:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. +- `segment` `(string: "")` - Specifies the segment to list members for. + If left blank, this will query for the default segment when connecting to a server and + the agent's own segment when connecting to a client (clients can only be part of one + network segment). When querying a server, setting this to the special string `_all` + will show members in all segments. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/coordinate/nodes +``` + +### Sample Response + +```json +[ + { + "Node": "agent-one", + "Segment": "", + "Coord": { + "Adjustment": 0, + "Error": 1.5, + "Height": 0, + "Vec": [0, 0, 0, 0, 0, 0, 0, 0] + } + } +] +``` + +In **Consul Enterprise**, this may include multiple coordinates for the same node, +each marked with a different `Segment`. Coordinates are only compatible within the same +segment. + +## Read LAN Coordinates for a node + +This endpoint returns the LAN network coordinates for the given node. + +| Method | Path | Produces | +| ------ | ------------------------ | ------------------ | +| `GET` | `/coordinate/node/:node` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `node:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. +- `segment` `(string: "")` - Specifies the segment to list members for. + If left blank, this will query for the default segment when connecting to a server and + the agent's own segment when connecting to a client (clients can only be part of one + network segment). When querying a server, setting this to the special string `_all` + will show members in all segments. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/coordinate/node/agent-one +``` + +### Sample Response + +```json +[ + { + "Node": "agent-one", + "Segment": "", + "Coord": { + "Adjustment": 0, + "Error": 1.5, + "Height": 0, + "Vec": [0, 0, 0, 0, 0, 0, 0, 0] + } + } +] +``` + +In **Consul Enterprise**, this may include multiple coordinates for the same node, +each marked with a different `Segment`. Coordinates are only compatible within the same +segment. + +## Update LAN Coordinates for a node + +This endpoint updates the LAN network coordinates for a node in a given +datacenter. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `PUT` | `/coordinate/update` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `node:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Payload + +```text +{ + "Node": "agent-one", + "Segment": "", + "Coord": { + "Adjustment": 0, + "Error": 1.5, + "Height": 0, + "Vec": [0, 0, 0, 0, 0, 0, 0, 0] + } +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/coordinate/update +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/discovery-chain.mdx consul-1.8.7+dfsg1/website/pages/api-docs/discovery-chain.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/discovery-chain.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/discovery-chain.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,565 @@ +--- +layout: api +page_title: Discovery Chain - HTTP API +sidebar_title: Discovery Chain +description: The /discovery-chain endpoints are for interacting with the discovery chain. +--- + +-> **1.6.0+:** The discovery chain API is available in Consul versions 1.6.0 and newer. + +# Discovery Chain HTTP Endpoint + +~> This is a low-level API primarily targeted at developers building external +[Connect proxy integrations](/docs/connect/proxies/integrate). Future +high-level proxy integration APIs may obviate the need for this API over time. + +The `/discovery-chain` endpoint returns the compiled [discovery +chain](/docs/internals/discovery-chain) for a service. + +This will fetch all related [configuration +entries](/docs/agent/config_entries) and render them into a form suitable +for use by a [connect proxy](/docs/connect/proxies) implementation. This +is a key component of [L7 Traffic +Management](/docs/connect/l7-traffic-management). + +## Read Compiled Discovery Chain + +If overrides are needed they are passed as the JSON-encoded request body and +the `POST` method must be used, otherwise `GET` is sufficient. + +| Method | Path | Produces | +| ------------------ | --------------------------- | ------------------ | +| `GET` | `/discovery-chain/:service` | `application/json` | +| `POST`1 | `/discovery-chain/:service` | `application/json` | + +

    + 1 Both GET and POST are for read operations. GET + requests do not permit request bodies so a POST is required if override + parameters are needed. +

    + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | -------------------- | -------------- | +| `YES` | `all` | `background refresh` | `service:read` | + +### URL Parameters + +- `service` `(string: )` - Specifies the service to query when + compiling the discovery chain. This is provided as part of the URL. + +- `compile-dc` `(string: "")` - Specifies the datacenter to use as the basis of + compilation. This will default to the datacenter of the agent being queried. + This is specified as part of the URL as a query parameter. + + This value comes from an [upstream + configuration](/docs/connect/registration/service-registration#upstream-configuration-reference) + [`datacenter`](/docs/connect/registration/service-registration#datacenter) + parameter. + +### POST Body Parameters + +- `OverrideConnectTimeout` `(duration: 0s)` - Overrides the final [connect + timeout](/docs/agent/config-entries/service-resolver#connecttimeout) for + any service resolved in the compiled chain. + + This value comes from the `connect_timeout_ms` key in an [upstream + configuration](/docs/connect/registration/service-registration#upstream-configuration-reference) + opaque + [`config`](/docs/connect/registration/service-registration#config-1) + parameter. + +- `OverrideProtocol` `(string: "")` - Overrides the final + [protocol](/docs/agent/config-entries/service-defaults#protocol) used in + the compiled discovery chain. + + If the chain ordinarily would be TCP and an L7 protocol is passed here the + chain will still not include Routers or Splitters. If the chain ordinarily + would be L7 and TCP is passed here the chain will not include Routers or + Splitters. + + This value comes from the `protocol` key in an [upstream + configuration](/docs/connect/registration/service-registration#upstream-configuration-reference) + opaque + [`config`](/docs/connect/registration/service-registration#config-1) + parameter. + +- `OverrideMeshGateway` `(MeshGatewayConfig: )` - Overrides the final + [mesh gateway configuration](/docs/connect/mesh-gateway#connect-proxy-configuration) + for this any service resolved in the compiled chain. + + This value comes from either the [proxy + configuration](/docs/connect/registration/service-registration#complete-configuration-example) + [`mesh_gateway`](/docs/connect/registration/service-registration#mesh_gateway) + parameter or an [upstream + configuration](/docs/connect/registration/service-registration#upstream-configuration-reference) + [`mesh_gateway`](/docs/connect/registration/service-registration#mesh_gateway-1) + parameter. If both are present the value defined on the upstream is used. + + - `Mode` `(string: "")` - One of `none`, `local`, or `remote`. + +### Sample Compilations + +Full documentation for the output fields is found on the [discovery chain +internals](/docs/internals/discovery-chain#compileddiscoverychain) +page. + +#### Multi-Datacenter Failover + +Config entries defined: + +```hcl +kind = "service-resolver" +name = "web" +connect_timeout = "15s" +failover = { + "*" = { + datacenters = ["dc3", "dc4"] + } +} +``` + +Request: + +```shell-session +$ curl http://127.0.0.1:8500/v1/discovery-chain/web +``` + +Response: + +```json +{ + "Chain": { + "ServiceName": "web", + "Namespace": "default", + "Datacenter": "dc1", + "Protocol": "tcp", + "StartNode": "resolver:web.default.dc1", + "Nodes": { + "resolver:web.default.dc1": { + "Type": "resolver", + "Name": "web.default.dc1", + "Resolver": { + "ConnectTimeout": "15s", + "Target": "web.default.dc1", + "Failover": { + "Targets": ["web.default.dc3", "web.default.dc4"] + } + } + } + }, + "Targets": { + "web.default.dc1": { + "ID": "web.default.dc1", + "Service": "web", + "Namespace": "default", + "Datacenter": "dc1", + "MeshGateway": {}, + "Subset": {}, + "SNI": "web.default.dc1.internal.47e25151-6212-ba25-8b7e-81adbbbab461.consul", + "Name": "web.default.dc1.internal.47e25151-6212-ba25-8b7e-81adbbbab461.consul" + }, + "web.default.dc3": { + "ID": "web.default.dc3", + "Service": "web", + "Namespace": "default", + "Datacenter": "dc3", + "MeshGateway": {}, + "Subset": {}, + "SNI": "web.default.dc3.internal.47e25151-6212-ba25-8b7e-81adbbbab461.consul", + "Name": "web.default.dc3.internal.47e25151-6212-ba25-8b7e-81adbbbab461.consul" + }, + "web.default.dc4": { + "ID": "web.default.dc4", + "Service": "web", + "Namespace": "default", + "Datacenter": "dc4", + "MeshGateway": {}, + "Subset": {}, + "SNI": "web.default.dc4.internal.47e25151-6212-ba25-8b7e-81adbbbab461.consul", + "Name": "web.default.dc4.internal.47e25151-6212-ba25-8b7e-81adbbbab461.consul" + } + } + } +} +``` + +#### Datacenter Redirect with Overrides + +Config entries defined: + +```hcl +kind = "service-resolver" +name = "web" +redirect { + datacenter = "dc2" +} +``` + +Request: + +```shell-session +$ curl -X POST \ + -d' +{ + "OverrideConnectTimeout": "7s", + "OverrideProtocol": "grpc", + "OverrideMeshGateway": { + "Mode": "remote" + } +} +' http://127.0.0.1:8500/v1/discovery-chain/web +``` + +Response: + +```json +{ + "Chain": { + "ServiceName": "web", + "Namespace": "default", + "Datacenter": "dc1", + "CustomizationHash": "b94f529a", + "Protocol": "grpc", + "StartNode": "resolver:web.default.dc2", + "Nodes": { + "resolver:web.default.dc2": { + "Type": "resolver", + "Name": "web.default.dc2", + "Resolver": { + "ConnectTimeout": "7s", + "Target": "web.default.dc2" + } + } + }, + "Targets": { + "web.default.dc2": { + "ID": "web.default.dc2", + "Service": "web", + "Namespace": "default", + "Datacenter": "dc2", + "MeshGateway": { + "Mode": "remote" + }, + "Subset": {}, + "SNI": "web.default.dc2.internal.59c17fd4-8dfa-f54a-ae71-855b26faf637.consul", + "Name": "web.default.dc2.internal.59c17fd4-8dfa-f54a-ae71-855b26faf637.consul" + } + } + } +} +``` + +#### Version Split For Alternate Datacenter + +Config entries defined: + +```hcl +kind = "service-resolver" +name = "web" +default_subset = "v1" +subsets = { + "v1" = { + filter = "Service.Meta.version == v1" + } + "v2" = { + filter = "Service.Meta.version == v2" + } +} +# --------------------------- +kind = "service-defaults" +name = "web" +protocol = "http" +# --------------------------- +kind = "service-splitter" +name = "web" +splits = [ + { + weight = 90 + service_subset = "v1" + }, + { + weight = 10 + service_subset = "v2" + }, +] +``` + +Request: + +```shell-session +$ curl http://127.0.0.1:8500/v1/discovery-chain/web?compile-dc=dc2 +``` + +Response: + +```json +{ + "Chain": { + "ServiceName": "web", + "Namespace": "default", + "Datacenter": "dc2", + "Protocol": "http", + "StartNode": "splitter:web", + "Nodes": { + "resolver:v1.web.default.dc2": { + "Type": "resolver", + "Name": "v1.web.default.dc2", + "Resolver": { + "ConnectTimeout": "5s", + "Target": "v1.web.default.dc2" + } + }, + "resolver:v2.web.default.dc2": { + "Type": "resolver", + "Name": "v2.web.default.dc2", + "Resolver": { + "ConnectTimeout": "5s", + "Target": "v2.web.default.dc2" + } + }, + "splitter:web": { + "Type": "splitter", + "Name": "web", + "Splits": [ + { + "Weight": 90, + "NextNode": "resolver:v1.web.default.dc2" + }, + { + "Weight": 10, + "NextNode": "resolver:v2.web.default.dc2" + } + ] + } + }, + "Targets": { + "v1.web.default.dc2": { + "ID": "v1.web.default.dc2", + "Service": "web", + "ServiceSubset": "v1", + "Namespace": "default", + "Datacenter": "dc2", + "MeshGateway": {}, + "Subset": { + "Filter": "Service.Meta.version == v1" + }, + "SNI": "v1.web.default.dc2.internal.6c9594ec-d798-28b9-d084-aa03e81cf078.consul", + "Name": "v1.web.default.dc2.internal.6c9594ec-d798-28b9-d084-aa03e81cf078.consul" + }, + "v2.web.default.dc2": { + "ID": "v2.web.default.dc2", + "Service": "web", + "ServiceSubset": "v2", + "Namespace": "default", + "Datacenter": "dc2", + "MeshGateway": {}, + "Subset": { + "Filter": "Service.Meta.version == v2" + }, + "SNI": "v2.web.default.dc2.internal.6c9594ec-d798-28b9-d084-aa03e81cf078.consul", + "Name": "v2.web.default.dc2.internal.6c9594ec-d798-28b9-d084-aa03e81cf078.consul" + } + } + } +} +``` + +#### HTTP Path Routing + +Config entries defined: + +```hcl +kind = "service-resolver" +name = "web" +subsets = { + "canary" = { + filter = "Service.Meta.flavor == canary" + } +} +# --------------------------- +kind = "proxy-defaults" +name = "web" +config { + protocol = "http" +} +# --------------------------- +kind = "service-router" +name = "web" +routes = [ + { + match { + http { + path_prefix = "/admin" + } + } + destination { + service = "admin" + prefix_rewrite = "/" + request_timeout = "15s" + } + }, + { + match { + http { + header = [ + { + name = "x-debug" + exact = "1" + }, + ] + } + } + destination { + service = "web" + service_subset = "canary" + num_retries = 5 + retry_on_connect_failure = true + retry_on_status_codes = [401, 409] + } + }, +] +``` + +Request: + +```shell-session +$ curl http://127.0.0.1:8500/v1/discovery-chain/web +``` + +Response: + +```json +{ + "Chain": { + "ServiceName": "web", + "Namespace": "default", + "Datacenter": "dc1", + "Protocol": "http", + "StartNode": "router:web", + "Nodes": { + "resolver:admin.default.dc1": { + "Type": "resolver", + "Name": "admin.default.dc1", + "Resolver": { + "ConnectTimeout": "5s", + "Default": true, + "Target": "admin.default.dc1" + } + }, + "resolver:canary.web.default.dc1": { + "Type": "resolver", + "Name": "canary.web.default.dc1", + "Resolver": { + "ConnectTimeout": "5s", + "Target": "canary.web.default.dc1" + } + }, + "resolver:web.default.dc1": { + "Type": "resolver", + "Name": "web.default.dc1", + "Resolver": { + "ConnectTimeout": "5s", + "Target": "web.default.dc1" + } + }, + "router:web": { + "Type": "router", + "Name": "web", + "Routes": [ + { + "Definition": { + "Match": { + "HTTP": { + "PathPrefix": "/admin" + } + }, + "Destination": { + "RequestTimeout": "15s", + "Service": "admin", + "PrefixRewrite": "/" + } + }, + "NextNode": "resolver:admin.default.dc1" + }, + { + "Definition": { + "Match": { + "HTTP": { + "Header": [ + { + "Name": "x-debug", + "Exact": "1" + } + ] + } + }, + "Destination": { + "Service": "web", + "ServiceSubset": "canary", + "NumRetries": 5, + "RetryOnConnectFailure": true, + "RetryOnStatusCodes": [401, 409] + } + }, + "NextNode": "resolver:canary.web.default.dc1" + }, + { + "Definition": { + "Match": { + "HTTP": { + "PathPrefix": "/" + } + }, + "Destination": { + "Service": "web" + } + }, + "NextNode": "resolver:web.default.dc1" + } + ] + } + }, + "Targets": { + "admin.default.dc1": { + "ID": "admin.default.dc1", + "Service": "admin", + "Namespace": "default", + "Datacenter": "dc1", + "MeshGateway": {}, + "Subset": {}, + "SNI": "admin.default.dc1.internal.fce8a058-0981-2c04-d23c-b7375af64ce8.consul", + "Name": "admin.default.dc1.internal.fce8a058-0981-2c04-d23c-b7375af64ce8.consul" + }, + "canary.web.default.dc1": { + "ID": "canary.web.default.dc1", + "Service": "web", + "ServiceSubset": "canary", + "Namespace": "default", + "Datacenter": "dc1", + "MeshGateway": {}, + "Subset": { + "Filter": "Service.Meta.flavor == canary" + }, + "SNI": "canary.web.default.dc1.internal.fce8a058-0981-2c04-d23c-b7375af64ce8.consul", + "Name": "canary.web.default.dc1.internal.fce8a058-0981-2c04-d23c-b7375af64ce8.consul" + }, + "web.default.dc1": { + "ID": "web.default.dc1", + "Service": "web", + "Namespace": "default", + "Datacenter": "dc1", + "MeshGateway": {}, + "Subset": {}, + "SNI": "web.default.dc1.internal.fce8a058-0981-2c04-d23c-b7375af64ce8.consul", + "Name": "web.default.dc1.internal.fce8a058-0981-2c04-d23c-b7375af64ce8.consul" + } + } + } +} +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/event.mdx consul-1.8.7+dfsg1/website/pages/api-docs/event.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/event.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/event.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,158 @@ +--- +layout: api +page_title: Events - HTTP API +sidebar_title: Events +description: |- + The /event endpoints fire new events and to query the available events in + Consul. +--- + +# Event HTTP Endpoint + +The `/event` endpoints fire new events and to query the available events in +Consul. + +## Fire Event + +This endpoint triggers a new user event. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `PUT` | `/event/fire/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `event:write` | + +### Parameters + +- `name` `(string: )` - Specifies the name of the event to fire. This + is specified as part of the URL. This name must not start with an underscore, + since those are reserved for Consul internally. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `node` `(string: "")` - Specifies a regular expression to filter by node name. + This is specified as part of the URL as a query parameter. + +- `service` `(string: "")` - Specifies a regular expression to filter by service + name. This is specified as part of the URL as a query parameter. + +- `tag` `(string: "")` - Specifies a regular expression to filter by tag. This + is specified as part of the URL as a query parameter. + +### Sample Payload + +The body contents are opaque to Consul and become the "payload" that is passed +onto the receiver of the event. + +```text +Lorem ipsum dolor sit amet, consectetur adipisicing elit... +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload \ + http://127.0.0.1:8500/v1/event/fire/my-event +``` + +### Sample Response + +```json +{ + "ID": "b54fe110-7af5-cafc-d1fb-afc8ba432b1c", + "Name": "deploy", + "Payload": null, + "NodeFilter": "", + "ServiceFilter": "", + "TagFilter": "", + "Version": 1, + "LTime": 0 +} +``` + +- `ID` is a unique identifier the newly fired event + +## List Events + +This endpoint returns the most recent events (up to 256) known by the agent. As a +consequence of how the [event command](/docs/commands/event) works, each +agent may have a different view of the events. Events are broadcast using the +[gossip protocol](/docs/internals/gossip), so they have no global ordering +nor do they make a promise of delivery. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `GET` | `/event/list` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `none` | `none` | `event:read` | + +### Parameters + +- `name` `(string: )` - Specifies the name of the event to filter. + This is specified as part of the URL as a query parameter. + +- `node` `(string: "")` - Specifies a regular expression to filter by node name. + This is specified as part of the URL as a query parameter. + +- `service` `(string: "")` - Specifies a regular expression to filter by service + name. This is specified as part of the URL as a query parameter. + +- `tag` `(string: "")` - Specifies a regular expression to filter by tag. This + is specified as part of the URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/event/list +``` + +### Sample Response + +```json +[ + { + "ID": "b54fe110-7af5-cafc-d1fb-afc8ba432b1c", + "Name": "deploy", + "Payload": "MTYwOTAzMA==", + "NodeFilter": "", + "ServiceFilter": "", + "TagFilter": "", + "Version": 1, + "LTime": 19 + } +] +``` + +### Caveat + +The semantics of this endpoint's blocking queries are slightly different. Most +blocking queries provide a monotonic index and block until a newer index is +available. This can be supported as a consequence of the total ordering of the +[consensus protocol](/docs/internals/consensus). With gossip, there is no +ordering, and instead `X-Consul-Index` maps to the newest event that matches the +query. + +In practice, this means the index is only useful when used against a single +agent and has no meaning globally. Because Consul defines the index as being +opaque, clients should not be expecting a natural ordering either. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/features/blocking.mdx consul-1.8.7+dfsg1/website/pages/api-docs/features/blocking.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/features/blocking.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/features/blocking.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,107 @@ +--- +layout: api +page_title: Blocking Queries +sidebar_title: Blocking Queries +description: |- + Many endpoints in Consul support a feature known as "blocking queries". A + blocking query is used to wait for a potential change using long polling. +--- + +# Blocking Queries + +Many endpoints in Consul support a feature known as "blocking queries". A +blocking query is used to wait for a potential change using long polling. Not +all endpoints support blocking, but each endpoint uniquely documents its support +for blocking queries in the documentation. + +Endpoints that support blocking queries return an HTTP header named +`X-Consul-Index`. This is a unique identifier representing the current state of +the requested resource. + +On subsequent requests for this resource, the client can set the `index` query +string parameter to the value of `X-Consul-Index`, indicating that the client +wishes to wait for any changes subsequent to that index. + +When this is provided, the HTTP request will "hang" until a change in the system +occurs, or the maximum timeout is reached. A critical note is that the return of +a blocking request is **no guarantee** of a change. It is possible that the +timeout was reached or that there was an idempotent write that does not affect +the result of the query. + +In addition to `index`, endpoints that support blocking will also honor a `wait` +parameter specifying a maximum duration for the blocking request. This is +limited to 10 minutes. If not set, the wait time defaults to 5 minutes. This +value can be specified in the form of "10s" or "5m" (i.e., 10 seconds or 5 +minutes, respectively). A small random amount of additional wait time is added +to the supplied maximum `wait` time to spread out the wake up time of any +concurrent requests. This adds up to `wait / 16` additional time to the maximum +duration. + +## Implementation Details + +While the mechanism is relatively simple to work with, there are a few edge +cases that must be handled correctly. + +- **Reset the index if it goes backwards**. While indexes in general are + monotonically increasing(i.e. they should only ever increase as time passes), + there are several real-world scenarios in + which they can go backwards for a given query. Implementations must check + to see if a returned index is lower than the previous value, + and if it is, should reset index to `0` - effectively restarting their blocking loop. + Failure to do so may cause the client to miss future updates for an unbounded + time, or to use an invalid index value that causes no blocking and increases + load on the servers. Cases where this can occur include: + + - If a raft snapshot is restored on the servers with older version of the data. + - KV list operations where an item with the highest index is removed. + - A Consul upgrade changes the way watches work to optimize them with more + granular indexes. + +- **Sanity check index is greater than zero**. After the initial request (or a + reset as above) the `X-Consul-Index` returned _should_ always be greater than zero. It + is a bug in Consul if it is not, however this has happened a few times and can + still be triggered on some older Consul versions. It's especially bad because it + causes blocking clients that are not aware to enter a busy loop, using excessive + client CPU and causing high load on servers. It is _always_ safe to use an + index of `1` to wait for updates when the data being requested doesn't exist + yet, so clients _should_ sanity check that their index is at least 1 after + each blocking response is handled to be sure they actually block on the next + request. + +- **Rate limit**. The blocking query mechanism is reasonably efficient when updates + are relatively rare (order of tens of seconds to minutes between updates). In cases + where a result gets updated very fast however - possibly during an outage or incident + with a badly behaved client - blocking query loops degrade into busy loops that + consume excessive client CPU and cause high server load. While it's possible to just add a sleep + to every iteration of the loop, this is **not** recommended since it causes update + delivery to be delayed in the happy case, and it can exacerbate the problem since + it increases the chance that the index has changed on the next request. Clients + _should_ instead rate limit the loop so that in the happy case they proceed without + waiting, but when values start to churn quickly they degrade into polling at a + reasonable rate (say every 15 seconds). Ideally this is done with an algorithm that + allows a couple of quick successive deliveries before it starts to limit rate - a + [token bucket](https://en.wikipedia.org/wiki/Token_bucket) with burst of 2 is a simple + way to achieve this. + +## Hash-based Blocking Queries + +A limited number of agent endpoints also support blocking however because the +state is local to the agent and not managed with a consistent raft index, their +blocking mechanism is different. + +Since there is no monotonically increasing index, each response instead contains +a header `X-Consul-ContentHash` which is an opaque hash digest generated by +hashing over all fields in the response that are relevant. + +Subsequent requests may be sent with a query parameter `hash=` where +`value` is the last hash header value seen, and this will block until the `wait` +timeout is passed or until the local agent's state changes in such a way that +the hash would be different. + +Other than the different header and query parameter names, the biggest +difference is that hash values are opaque and can't be compared to see if one +result is older or newer than another. In general hash-based blocking will not +return too early due to an idempotent update since the hash will remain the same +unless the result actually changes, however as with index-based blocking there +is no strict guarantee that clients will never observe the same result delivered +before the full timeout has elapsed. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/features/caching.mdx consul-1.8.7+dfsg1/website/pages/api-docs/features/caching.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/features/caching.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/features/caching.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,97 @@ +--- +layout: api +page_title: Agent Caching +sidebar_title: Agent Caching +description: |- + Some read endpoints support agent caching. They are clearly marked in the + documentation. +--- + +# Agent Caching + +Some read endpoints support agent caching. They are clearly marked in the +documentation. Agent caching can take two forms, [`simple`](#simple-caching) or +[`background refresh`](#background-refresh-caching) depending on the endpoint's +semantics. The documentation for each endpoint clearly identify which if any +form of caching is supported. The details for each are described below. + +Where supported, caching can be enabled though the `?cached` parameter. +Combining `?cached` with `?consistent` is an error. + +## Simple Caching + +Endpoints supporting simple caching may return a result directly from the local +agent's cache without a round trip to the servers. By default the agent caches +results for a relatively long time (3 days) such that it can still return a +result even if the servers are unavailable for an extended period to enable +"fail static" semantics. + +That means that with no other arguments, `?cached` queries might receive a +response which is days old. To request better freshness, the HTTP +`Cache-Control` header may be set with a directive like `max-age=`. In +this case the agent will attempt to re-fetch the result from the servers if the +cached value is older than the given `max-age`. If the servers can't be reached +a 500 is returned as normal. + +To allow clients to maintain fresh results in normal operation but allow stale +ones if the servers are unavailable, the `stale-if-error=` directive +may be additionally provided in the `Cache-Control` header. This will return the +cached value anyway even it it's older than `max-age` (provided it's not older +than `stale-if-error`) rather than a 500. It must be provided along with a +`max-age` or `must-revalidate`. The `Age` response header, if larger than +`max-age` can be used to determine if the server was unreachable and a cached +version returned instead. + +For example, assuming there is a cached response that is 65 seconds old, and +that the servers are currently unavailable, `Cache-Control: max-age=30` will +result in a 500 error, while `Cache-Control: max-age=30 stale-if-error=259200` +will result in the cached response being returned. + +A request setting either `max-age=0` or `must-revalidate` directives will cause +the agent to always re-fetch the response from servers. Either can be combined +with `stale-if-error=` to ensure fresh results when the servers are +available, but falling back to cached results if the request to the servers +fails. + +Requests that do not use `?cached` currently bypass the cache entirely so the +cached response returned might be more stale than the last uncached response +returned on the same agent. If this causes problems, it is possible to make +requests using `?cached` and setting `Cache-Control: must-revalidate` to have +always-fresh results yet keeping the cache populated with the most recent +result. + +In all cases the HTTP `X-Cache` header is always set in the response to either +`HIT` or `MISS` indicating whether the response was served from cache or not. + +For cache hits, the HTTP `Age` header is always set in the response to indicate +how many seconds since that response was fetched from the servers. + +## Background Refresh Caching + +Endpoints supporting background refresh caching may return a result directly +from the local agent's cache without a round trip to the severs. The first fetch +that is a miss will cause an initial fetch from the servers, but will also +trigger the agent to begin a background blocking query that watches for any +changes to that result and updates the cached value if changes occur. + +Following requests will _always_ be a cache hit until there has been no request +for the resource for the TTL (which is typically 3 days). + +Clients can perform blocking queries against the local agent which will be +served from the cache. This allows multiple clients to watch the same resource +locally while only a single blocking watch for that resource will be made to the +servers from a given client agent. + +HTTP `Cache-Control` headers are ignored in this mode since the cache is being +actively updated and has different semantics to a typical passive cache. + +In all cases the HTTP `X-Cache` header is always set in the response to either +`HIT` or `MISS` indicating whether the response was served from cache or not. + +For cache hits, the HTTP `Age` header is always set in the response to indicate +how many seconds since that response was fetched from the servers. As long as +the local agent has an active connection to the servers, the age will always be +`0` since the value is up-to-date. If the agent gets disconnected, the cached +result is still returned but with an `Age` that indicates how many seconds have +elapsed since the local agent got disconnected from the servers, during which +time updates to the result might have been missed. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/features/consistency.mdx consul-1.8.7+dfsg1/website/pages/api-docs/features/consistency.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/features/consistency.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/features/consistency.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,52 @@ +--- +layout: api +page_title: Consistency Modes +sidebar_title: Consistency Modes +description: >- + Most of the read query endpoints support multiple levels of consistency. Since + no policy will suit all clients' needs, these consistency modes allow the user + to have the ultimate say in how to balance the trade-offs inherent in a + distributed system. +--- + +# Consistency Modes + +Most of the read query endpoints support multiple levels of consistency. Since +no policy will suit all clients' needs, these consistency modes allow the user +to have the ultimate say in how to balance the trade-offs inherent in a +distributed system. + +The three read modes are: + +- `default` - If not specified, the default is strongly consistent in almost all + cases. However, there is a small window in which a new leader may be elected + during which the old leader may service stale values. The trade-off is fast + reads but potentially stale values. The condition resulting in stale reads is + hard to trigger, and most clients should not need to worry about this case. + Also, note that this race condition only applies to reads, not writes. + +- `consistent` - This mode is strongly consistent without caveats. It requires + that a leader verify with a quorum of peers that it is still leader. This + introduces an additional round-trip to all server nodes. The trade-off is + increased latency due to an extra round trip. Most clients should not use this + unless they cannot tolerate a stale read. + +- `stale` - This mode allows any server to service the read regardless of + whether it is the leader. This means reads can be arbitrarily stale; however, + results are generally consistent to within 50 milliseconds of the leader. The + trade-off is very fast and scalable reads with a higher likelihood of stale + values. Since this mode allows reads without a leader, a cluster that is + unavailable will still be able to respond to queries. + +To switch these modes, either the `stale` or `consistent` query parameters +should be provided on requests. It is an error to provide both. + +Note that some endpoints support a `cached` parameter which has some of the same +semantics as `stale` but different trade offs. This behavior is described in +[agent caching feature documentation](/api/features/caching). + +To support bounding the acceptable staleness of data, responses provide the +`X-Consul-LastContact` header containing the time in milliseconds that a server +was last contacted by the leader node. The `X-Consul-KnownLeader` header also +indicates if there is a known leader. These can be used by clients to gauge the +staleness of a result and take appropriate action. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/features/filtering.mdx consul-1.8.7+dfsg1/website/pages/api-docs/features/filtering.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/features/filtering.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/features/filtering.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,436 @@ +--- +layout: api +page_title: Filtering +sidebar_title: Filtering +description: |- + Consul exposes a RESTful HTTP API to control almost every aspect of the + Consul agent. +--- + +# Filtering + +A filter expression is used to refine a data query for some API listing endpoints as notated in the individual API documentation. +Filtering will be executed on the Consul server before data is returned, reducing the network load. To pass a +filter expression to Consul, with a data query, use the `filter` parameter. + +```shell +curl -G --data-urlencode 'filter=' +``` + +To create a filter expression, you will write one or more expressions using matching operators, selectors, and values. + +## Expression Syntax + +Expressions are written in plain text format. Boolean logic and parenthesization are +supported. In general whitespace is ignored, except within literal +strings. + +### Expressions + +There are several methods for connecting expressions, including + +- logical `or` +- logical `and` +- logical `not` +- grouping with parenthesis +- matching expressions + +```text +// Logical Or - evaluates to true if either sub-expression does + or + +// Logical And - evaluates to true if both sub-expressions do + and + +// Logical Not - evaluates to true if the sub-expression does not +not + +// Grouping - Overrides normal precedence rules +( ) + +// Inspects data to check for a match + +``` + +Standard operator precedence can be expected for the various forms. For +example, the following two expressions would be equivalent. + +```text + and not or + +( and (not )) or +``` + +### Matching Operators + +Matching operators are used to create an expression. All matching operators use a selector or value to choose what data should be +matched. Each endpoint that supports filtering accepts a potentially +different list of selectors and is detailed in the API documentation for +those endpoints. + +```text +// Equality & Inequality checks + == + != + +// Emptiness checks + is empty + is not empty + +// Contains checks or Substring Matching + in + not in + contains + not contains + +// Regular Expression Matching + matches + not matches +``` + +### Selectors + +Selectors are used by matching operators to create an expression. They are +defined by a `.` separated list of names. Each name must start with +a an ASCII letter and can contain ASCII letters, numbers, and underscores. When +part of the selector references a map value it may be expressed using the form +`[""]` instead of `.`. This allows the possibility +of using map keys that are not valid selectors in and of themselves. + +```text +// selects the foo key within the ServiceMeta mapping for the +// /catalog/service/:service endpoint +ServiceMeta.foo + +// Also selects the foo key for the same endpoint +ServiceMeta["foo"] +``` + +### Values + +Values are used by matching operators to create an expression. Values can be any valid selector, a number, or a quoted string. For numbers any +base 10 integers and floating point numbers are possible. For quoted strings, +they may either be enclosed in double quotes or backticks. When enclosed in +backticks they are treated as raw strings and escape sequences such as `\n` +will not be expanded. + +## Filter Utilization + +Generally, only the main object is filtered. When filtering for +an item within an array that is not at the top level, the entire array that contains the item +will be returned. This is usually the outermost object of a response, +but in some cases such the [`/catalog/node/:node`](/api/catalog#list-services-for-node) +endpoint the filtering is performed on a object embedded within the results. + +### Performance + +Filters are executed on the servers and therefore will consume some amount +of CPU time on the server. For non-stale queries this means that the filter +is executed on the leader. + +### Filtering Examples + +#### Agent API + +**Command - Unfiltered** + +```shell +curl -X GET localhost:8500/v1/agent/services +``` + +**Response - Unfiltered** + +```json +{ + "redis1": { + "ID": "redis1", + "Service": "redis", + "Tags": ["primary", "production"], + "Meta": { + "env": "production", + "foo": "bar" + }, + "Port": 1234, + "Address": "", + "Weights": { + "Passing": 1, + "Warning": 1 + }, + "EnableTagOverride": false + }, + "redis2": { + "ID": "redis2", + "Service": "redis", + "Tags": ["secondary", "production"], + "Meta": { + "env": "production", + "foo": "bar" + }, + "Port": 1235, + "Address": "", + "Weights": { + "Passing": 1, + "Warning": 1 + }, + "EnableTagOverride": false + }, + "redis3": { + "ID": "redis3", + "Service": "redis", + "Tags": ["primary", "qa"], + "Meta": { + "env": "qa" + }, + "Port": 1234, + "Address": "", + "Weights": { + "Passing": 1, + "Warning": 1 + }, + "EnableTagOverride": false + } +} +``` + +**Command - Filtered** + +```shell +curl -G localhost:8500/v1/agent/services --data-urlencode 'filter=Meta.env == qa' +``` + +**Response - Filtered** + +```json +{ + "redis3": { + "ID": "redis3", + "Service": "redis", + "Tags": ["primary", "qa"], + "Meta": { + "env": "qa" + }, + "Port": 1234, + "Address": "", + "Weights": { + "Passing": 1, + "Warning": 1 + }, + "EnableTagOverride": false + } +} +``` + +#### Catalog API + +**Command - Unfiltered** + +```shell +curl -X GET localhost:8500/v1/catalog/service/api-internal +``` + +**Response - Unfiltered** + +```json +[ + { + "ID": "b4f64e8c-5c7d-11e9-bf68-8c8590bd0966", + "Node": "node-1", + "Address": "198.18.0.1", + "Datacenter": "dc1", + "TaggedAddresses": null, + "NodeMeta": { + "agent": "true", + "arch": "i386", + "os": "darwin" + }, + "ServiceKind": "", + "ServiceID": "api-internal", + "ServiceName": "api-internal", + "ServiceTags": ["tag"], + "ServiceAddress": "", + "ServiceWeights": { + "Passing": 1, + "Warning": 1 + }, + "ServiceMeta": { + "environment": "qa" + }, + "ServicePort": 9090, + "ServiceEnableTagOverride": false, + "ServiceProxy": {}, + "ServiceConnect": {}, + "CreateIndex": 30, + "ModifyIndex": 30 + }, + { + "ID": "b4faf93a-5c7d-11e9-840d-8c8590bd0966", + "Node": "node-2", + "Address": "198.18.0.2", + "Datacenter": "dc1", + "TaggedAddresses": null, + "NodeMeta": { + "arch": "arm", + "os": "linux" + }, + "ServiceKind": "", + "ServiceID": "api-internal", + "ServiceName": "api-internal", + "ServiceTags": ["test", "tag"], + "ServiceAddress": "", + "ServiceWeights": { + "Passing": 1, + "Warning": 1 + }, + "ServiceMeta": { + "environment": "production" + }, + "ServicePort": 9090, + "ServiceEnableTagOverride": false, + "ServiceProxy": {}, + "ServiceConnect": {}, + "CreateIndex": 29, + "ModifyIndex": 29 + }, + { + "ID": "b4fbe7f4-5c7d-11e9-ac82-8c8590bd0966", + "Node": "node-4", + "Address": "198.18.0.4", + "Datacenter": "dc1", + "TaggedAddresses": null, + "NodeMeta": { + "arch": "i386", + "os": "freebsd" + }, + "ServiceKind": "", + "ServiceID": "api-internal", + "ServiceName": "api-internal", + "ServiceTags": [], + "ServiceAddress": "", + "ServiceWeights": { + "Passing": 1, + "Warning": 1 + }, + "ServiceMeta": { + "environment": "qa" + }, + "ServicePort": 9090, + "ServiceEnableTagOverride": false, + "ServiceProxy": {}, + "ServiceConnect": {}, + "CreateIndex": 28, + "ModifyIndex": 28 + } +] +``` + +**Command - Filtered** + +```shell +curl -G localhost:8500/v1/catalog/service/api-internal --data-urlencode 'filter=NodeMeta.os == linux' +``` + +**Response - Filtered** + +```json +[ + { + "ID": "b4faf93a-5c7d-11e9-840d-8c8590bd0966", + "Node": "node-2", + "Address": "198.18.0.2", + "Datacenter": "dc1", + "TaggedAddresses": null, + "NodeMeta": { + "arch": "arm", + "os": "linux" + }, + "ServiceKind": "", + "ServiceID": "api-internal", + "ServiceName": "api-internal", + "ServiceTags": ["test", "tag"], + "ServiceAddress": "", + "ServiceWeights": { + "Passing": 1, + "Warning": 1 + }, + "ServiceMeta": { + "environment": "production" + }, + "ServicePort": 9090, + "ServiceEnableTagOverride": false, + "ServiceProxy": {}, + "ServiceConnect": {}, + "CreateIndex": 29, + "ModifyIndex": 29 + } +] +``` + +#### Health API + +**Command - Unfiltered** + +```shell +curl -X GET localhost:8500/v1/health/node/node-1 +``` + +**Response - Unfiltered** + +```json +[ + { + "Node": "node-1", + "CheckID": "node-health", + "Name": "Node level check", + "Status": "critical", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "", + "ServiceTags": [], + "Definition": {}, + "CreateIndex": 13, + "ModifyIndex": 13 + }, + { + "Node": "node-1", + "CheckID": "svc-web-health", + "Name": "Service level check - web", + "Status": "warning", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "web", + "ServiceTags": [], + "Definition": {}, + "CreateIndex": 18, + "ModifyIndex": 18 + } +] +``` + +**Command - Filtered** + +```shell +curl -G localhost:8500/v1/health/node/node-1 --data-urlencode 'filter=ServiceName != ""' +``` + +**Response - Filtered** + +```json +[ + { + "Node": "node-1", + "CheckID": "svc-web-health", + "Name": "Service level check - web", + "Status": "warning", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "web", + "ServiceTags": [], + "Definition": {}, + "CreateIndex": 18, + "ModifyIndex": 18 + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/health.mdx consul-1.8.7+dfsg1/website/pages/api-docs/health.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/health.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/health.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,519 @@ +--- +layout: api +page_title: Health - HTTP API +sidebar_title: Health +description: |- + The /health endpoints query health-related information for services and checks + in Consul. +--- + +# Health HTTP Endpoint + +The `/health` endpoints query health-related information. They are provided +separately from the `/catalog` endpoints since users may prefer not to use the +optional health checking mechanisms. Additionally, some of the query results +from the health endpoints are filtered while the catalog endpoints provide the +raw entries. + +## List Checks for Node + +This endpoint returns the checks specific to the node provided on the path. + +| Method | Path | Produces | +| ------ | -------------------- | ------------------ | +| `GET` | `/health/node/:node` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------ | +| `YES` | `all` | `none` | `node:read,service:read` | + +### Parameters + +- `node` `(string: )` - Specifies the name or ID of the node to query. + This is specified as part of the URL + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace to list checks. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. To view + checks for multiple namespaces the `*` wildcard namespace may be used. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + -H "X-Consul-Namespace: *" \ + http://127.0.0.1:8500/v1/health/node/my-node +``` + +### Sample Response + +```json +[ + { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "CheckID": "serfHealth", + "Name": "Serf Health Status", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "", + "ServiceTags": [], + "Namespace": "default" + }, + { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "CheckID": "service:redis", + "Name": "Service 'redis' check", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "redis", + "ServiceName": "redis", + "ServiceTags": ["primary"], + "Namespace": "foo" + } +] +``` + +### Filtering + +The filter will be executed against each health check in the results list with +the following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ------------- | -------------------------------------------------- | +| `CheckID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Name` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Notes` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Output` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceTags` | In, Not In, Is Empty, Is Not Empty | +| `Status` | Equal, Not Equal, In, Not In, Matches, Not Matches | + +## List Checks for Service + +This endpoint returns the checks associated with the service provided on the +path. + +| Method | Path | Produces | +| ------ | ------------------------- | ------------------ | +| `GET` | `/health/checks/:service` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------ | +| `YES` | `all` | `none` | `node:read,service:read` | + +### Parameters + +- `service` `(string: )` - Specifies the service to list checks for. + This is provided as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `near` `(string: "")` - Specifies a node name to sort the node list in + ascending order based on the estimated round trip time from that node. Passing + `?near=_agent` will use the agent's node for the sort. This is specified as + part of the URL as a query parameter. + +- `node-meta` `(string: "")` - Specifies a desired node metadata key/value pair + of the form `key:value`. This parameter can be specified multiple times, and + will filter the results to nodes with the specified key/value pairs. This is + specified as part of the URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace of the service. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/health/checks/my-service?ns=default +``` + +### Sample Response + +```json +[ + { + "Node": "foobar", + "CheckID": "service:redis", + "Name": "Service 'redis' check", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "redis", + "ServiceName": "redis", + "ServiceTags": ["primary"], + "Namespace": "default" + } +] +``` + +### Filtering + +The filter will be executed against each health check in the results list with +the following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ------------- | -------------------------------------------------- | +| `CheckID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Name` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Notes` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Output` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceTags` | In, Not In, Is Empty, Is Not Empty | +| `Status` | Equal, Not Equal, In, Not In, Matches, Not Matches | + +## List Nodes for Service + +This endpoint returns the nodes providing the service indicated on the path. +Users can also build in support for dynamic load balancing and other features by +incorporating the use of health checks. + +| Method | Path | Produces | +| ------ | -------------------------- | ------------------ | +| `GET` | `/health/service/:service` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | -------------------- | ------------------------ | +| `YES` | `all` | `background refresh` | `node:read,service:read` | + +### Parameters + +- `service` `(string: )` - Specifies the service to list services for. + This is provided as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `near` `(string: "")` - Specifies a node name to sort the node list in + ascending order based on the estimated round trip time from that node. Passing + `?near=_agent` will use the agent's node for the sort. This is specified as + part of the URL as a query parameter. + +- `tag` `(string: "")` - Specifies the tag to filter the list. This is + specified as part of the URL as a query parameter. Can be used multiple times + for additional filtering, returning only the results that include all of the tag + values provided. + +- `node-meta` `(string: "")` - Specifies a desired node metadata key/value pair + of the form `key:value`. This parameter can be specified multiple times, and + will filter the results to nodes with the specified key/value pairs. This is + specified as part of the URL as a query parameter. + +- `passing` `(bool: false)` - Specifies that the server should return only nodes + with all checks in the `passing` state. This can be used to avoid additional + filtering on the client side. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace of the service. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/health/service/my-service?ns=default +``` + +### Sample Response + +```json +[ + { + "Node": { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "Address": "10.1.10.12", + "Datacenter": "dc1", + "TaggedAddresses": { + "lan": "10.1.10.12", + "wan": "10.1.10.12" + }, + "Meta": { + "instance_type": "t2.medium" + } + }, + "Service": { + "ID": "redis", + "Service": "redis", + "Tags": ["primary"], + "Address": "10.1.10.12", + "TaggedAddresses": { + "lan": { + "address": "10.1.10.12", + "port": 8000 + }, + "wan": { + "address": "198.18.1.2", + "port": 80 + } + }, + "Meta": { + "redis_version": "4.0" + }, + "Port": 8000, + "Weights": { + "Passing": 10, + "Warning": 1 + }, + "Namespace": "default" + }, + "Checks": [ + { + "Node": "foobar", + "CheckID": "service:redis", + "Name": "Service 'redis' check", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "redis", + "ServiceName": "redis", + "ServiceTags": ["primary"], + "Namespace": "default" + }, + { + "Node": "foobar", + "CheckID": "serfHealth", + "Name": "Serf Health Status", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "", + "ServiceTags": [], + "Namespace": "default" + } + ] + } +] +``` + +### Filtering + +The filter will be executed against each entry in the top level results list with the +following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ---------------------------------------------- | -------------------------------------------------- | +| `Checks` | Is Empty, Is Not Empty | +| `Checks.CheckID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.Name` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.Notes` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.Output` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.ServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.ServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Checks.ServiceTags` | In, Not In, Is Empty, Is Not Empty | +| `Checks.Status` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node.Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node.ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node.Meta` | Is Empty, Is Not Empty, In, Not In | +| `Node.Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node.Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node.TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `Node.TaggedAddresses.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Connect.Native` | Equal, Not Equal | +| `Service.EnableTagOverride` | Equal, Not Equal | +| `Service.ID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Kind` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Meta` | Is Empty, Is Not Empty, In, Not In | +| `Service.Meta.` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Port` | Equal, Not Equal | +| `Service.Proxy.DestinationServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.DestinationServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.LocalServiceAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.LocalServicePort` | Equal, Not Equal | +| `Service.Proxy.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.Upstreams` | Is Empty, Is Not Empty | +| `Service.Proxy.Upstreams.Datacenter` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.Upstreams.DestinationName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.Upstreams.DestinationNamespace` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.Upstreams.DestinationType` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.Upstreams.LocalBindAddress` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Proxy.Upstreams.LocalBindPort` | Equal, Not Equal | +| `Service.Proxy.Upstreams.MeshGateway.Mode` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.Service` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.TaggedAddresses` | Is Empty, Is Not Empty, In, Not In | +| `Service.TaggedAddresses..Address` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Service.TaggedAddresses..Port` | Equal, Not Equal | +| `Service.Tags` | In, Not In, Is Empty, Is Not Empty | +| `Service.Weights.Passing` | Equal, Not Equal | +| `Service.Weights.Warning` | Equal, Not Equal | + +## List Nodes for Connect-capable Service + +This endpoint returns the nodes providing a +[Connect-capable](/docs/connect) service in a given datacenter. +This will include both proxies and native integrations. A service may +register both Connect-capable and incapable services at the same time, +so this endpoint may be used to filter only the Connect-capable endpoints. + +| Method | Path | Produces | +| ------ | -------------------------- | ------------------ | +| `GET` | `/health/connect/:service` | `application/json` | + +Parameters and response format are the same as +[`/health/service/:service`](/api/health#list-nodes-for-service). + +## List Nodes for Ingress Gateways Associated to a Service + +-> **1.8.0+:** This API is available in Consul versions 1.8.0 and later. + +This endpoint returns the nodes providing a [ingress +gateway](/docs/connect/ingress-gateway) for a service in a given datacenter. + +| Method | Path | Produces | +| ------ | -------------------------- | ------------------ | +| `GET` | `/health/ingress/:service` | `application/json` | + +Parameters and response format are the same as +[`/health/service/:service`](/api/health#list-nodes-for-service). + +## List Checks in State + +This endpoint returns the checks in the state provided on the path. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `GET` | `/health/state/:state` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------ | +| `YES` | `all` | `none` | `node:read,service:read` | + +### Parameters + +- `state` `(string: )` - Specifies the state to query. Supported states + are `any`, `passing`, `warning`, or `critical`. The `any` state is a wildcard + that can be used to return all checks. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `near` `(string: "")` - Specifies a node name to sort the node list in + ascending order based on the estimated round trip time from that node. Passing + `?near=_agent` will use the agent's node for the sort. This is specified as + part of the URL as a query parameter. + +- `node-meta` `(string: "")` - Specifies a desired node metadata key/value pair + of the form `key:value`. This parameter can be specified multiple times, and + will filter the results to nodes with the specified key/value pairs. This is + specified as part of the URL as a query parameter. + +- `filter` `(string: "")` - Specifies the expression used to filter the + queries results prior to returning the data. + +- `ns` `(string: "")` - Specifies the namespace to query. + This value may be provided by either the `ns` URL query parameter or in the + `X-Consul-Namespace` header. If not provided at all, the namespace will be inherited + from the request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/health/state/passing?ns=default +``` + +### Sample Response + +```json +[ + { + "Node": "foobar", + "CheckID": "serfHealth", + "Name": "Serf Health Status", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "", + "ServiceTags": [], + "Namespace": "default" + }, + { + "Node": "foobar", + "CheckID": "service:redis", + "Name": "Service 'redis' check", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "redis", + "ServiceName": "redis", + "ServiceTags": ["primary"], + "Namespace": "default" + } +] +``` + +### Filtering + +The filter will be executed against each health check in the results list with +the following selectors and filter operations being supported: + +| Selector | Supported Operations | +| ------------- | -------------------------------------------------- | +| `CheckID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Name` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Node` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Notes` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `Output` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceID` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceName` | Equal, Not Equal, In, Not In, Matches, Not Matches | +| `ServiceTags` | In, Not In, Is Empty, Is Not Empty | +| `Status` | Equal, Not Equal, In, Not In, Matches, Not Matches | diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/index.mdx consul-1.8.7+dfsg1/website/pages/api-docs/index.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/index.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/index.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,96 @@ +--- +layout: api +page_title: HTTP API +sidebar_title: API Introduction +description: |- + Consul exposes a RESTful HTTP API to control almost every aspect of the + Consul agent. +--- + +# HTTP API Structure + +The main interface to Consul is a RESTful HTTP API. The API can perform basic +CRUD operations on nodes, services, checks, configuration, and more. + +## Authentication + +When authentication is enabled, a Consul token should be provided to API +requests using the `X-Consul-Token` header or with the +Bearer scheme in the authorization header. +This reduces the probability of the +token accidentally getting logged or exposed. When using authentication, +clients should communicate via TLS. If you don’t provide a token in the request, then the agent default token will be used. + +Below is an example using `curl` with `X-Consul-Token`. + +```shell-session +$ curl \ + --header "X-Consul-Token: " \ + http://127.0.0.1:8500/v1/agent/members +``` + +Below is an example using `curl` with Bearer scheme. + +```shell-session +$ curl \ + --header "Authorization: Bearer " \ + http://127.0.0.1:8500/v1/agent/members +``` + +Previously this was provided via a `?token=` query parameter. This functionality +exists on many endpoints for backwards compatibility, but its use is **highly +discouraged**, since it can show up in access logs as part of the URL. + +To learn more about the ACL system read the [documentation](/docs/acl/acl-system). + +## Version Prefix + +All API routes are prefixed with `/v1/`. This documentation is only for the v1 API. + +## Formatted JSON Output + +By default, the output of all HTTP API requests is minimized JSON. If the client +passes `pretty` on the query string, formatted JSON will be returned. + +## HTTP Methods + +Consul's API aims to be RESTful, although there are some exceptions. The API +responds to the standard HTTP verbs GET, PUT, and DELETE. Each API method will +clearly document the verb(s) it responds to and the generated response. The same +path with different verbs may trigger different behavior. For example: + +```text +PUT /v1/kv/foo +GET /v1/kv/foo +``` + +Even though these share a path, the `PUT` operation creates a new key whereas +the `GET` operation reads an existing key. + +Here is the same example using `curl`: + +```shell-session +$ curl \ + --request PUT \ + --data 'hello consul' \ + http://127.0.0.1:8500/v1/kv/foo +``` + +## Translated Addresses + +Consul 0.7 added the ability to translate addresses in HTTP response based on +the configuration setting for +[`translate_wan_addrs`](/docs/agent/options#translate_wan_addrs). In order +to allow clients to know if address translation is in effect, the +`X-Consul-Translate-Addresses` header will be added if translation is enabled, +and will have a value of `true`. If translation is not enabled then this header +will not be present. + +## UUID Format + +UUID-format identifiers generated by the Consul API use the +[hashicorp/go-uuid](https://github.com/hashicorp/go-uuid) library. + +These UUID-format strings are generated using high quality, purely random bytes. +It is not intended to be RFC compliant, merely to use a well-understood string +representation of a 128-bit value. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/kv.mdx consul-1.8.7+dfsg1/website/pages/api-docs/kv.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/kv.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/kv.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,291 @@ +--- +layout: api +page_title: KV Store - HTTP API +sidebar_title: KV Store +description: |- + The /kv endpoints access Consul's simple key/value store, useful for storing + service configuration or other metadata. +--- + +# KV Store Endpoints + +The `/kv` endpoints access Consul's simple key/value store, useful for storing +service configuration or other metadata. + +It is important to note that each datacenter has its own KV store, and there is +no built-in replication between datacenters. If you are interested in +replication between datacenters, please view the +[Consul Replicate](https://github.com/hashicorp/consul-replicate) project. + +~> Values in the KV store cannot be larger than 512kb. + +For multi-key updates, please consider using [transaction](/api/txn). + +## Read Key + +This endpoint returns the specified key. If no key exists at the given path, a +404 is returned instead of a 200 response. + +For multi-key reads, please consider using [transaction](/api/txn). + +| Method | Path | Produces | +| ------ | ---------- | ------------------ | +| `GET` | `/kv/:key` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `YES` | `all` | `none` | `key:read` | + +### Parameters + +- `key` `(string: "")` - Specifies the path of the key to read. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `recurse` `(bool: false)` - Specifies if the lookup should be recursive and + `key` treated as a prefix instead of a literal match. This is specified as + part of the URL as a query parameter. + +- `raw` `(bool: false)` - Specifies the response is just the raw value of the + key, without any encoding or metadata. This is specified as part of the URL as + a query parameter. + +- `keys` `(bool: false)` - Specifies to return only keys (no values or + metadata). Specifying this implies `recurse`. This is specified as part of the + URL as a query parameter. + +- `separator` `(string: "")` - Specifies the string to use as a separator + for recursive key lookups. This option is only used when paired with the `keys` + parameter to limit the prefix of keys returned, only up to the given separator. + This is specified as part of the URL as a query parameter. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + This is specified as part of the URL as a query parameter. + For recursive lookups, the namespace may be specified as '\*' and then results + will be returned for all namespaces. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/kv/my-key +``` + +### Sample Response + +#### Metadata Response + +```json +[ + { + "CreateIndex": 100, + "ModifyIndex": 200, + "LockIndex": 200, + "Key": "zip", + "Flags": 0, + "Value": "dGVzdA==", + "Session": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" + } +] +``` + +- `CreateIndex` is the internal index value that represents when the entry was + created. + +- `ModifyIndex` is the last index that modified this key. This index corresponds + to the `X-Consul-Index` header value that is returned in responses, and it can + be used to establish blocking queries by setting the `?index` query parameter. + You can even perform blocking queries against entire subtrees of the KV store: + if `?recurse` is provided, the returned `X-Consul-Index` corresponds to the + latest `ModifyIndex` within the prefix, and a blocking query using that + `?index` will wait until any key within that prefix is updated. + +- `LockIndex` is the number of times this key has successfully been acquired in + a lock. If the lock is held, the `Session` key provides the session that owns + the lock. + +- `Key` is simply the full path of the entry. + +- `Flags` is an opaque unsigned integer that can be attached to each entry. + Clients can choose to use this however makes sense for their application. + +- `Value` is a base64-encoded blob of data. + +#### Keys Response + +When using the `?keys` query parameter, the response structure changes to an +array of strings instead of an array of JSON objects. Listing `/web/` with a `/` +separator may return: + +```json +["/web/bar", "/web/foo", "/web/subdir/"] +``` + +Using the key listing method may be suitable when you do not need the values or +flags or want to implement a key-space explorer. + +#### Raw Response + +When using the `?raw` endpoint, the response is not `application/json`, but +rather the content type of the uploaded content. + +``` +)k������z^�-�ɑj�q����#u�-R�r��T�D��٬�Y��l,�ιK��Fm��}�#e�� +``` + +(Yes, that is intentionally a bunch of gibberish characters to showcase the +response) + +## Create/Update Key + +This endpoint updates the value of the specified key. If no key exists at the given +path, the key will be created. + +| Method | Path | Produces | +| ------ | ---------- | ------------------ | +| `PUT` | `/kv/:key` | `application/json` | + +Even though the return type is `application/json`, the value is either `true` or +`false`, indicating whether the create/update succeeded. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `key:write` | + +### Parameters + +- `key` `(string: "")` - Specifies the path of the key. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `flags` `(int: 0)` - Specifies an unsigned value between `0` and `(2^64)-1`. + Clients can choose to use this however makes sense for their application. This + is specified as part of the URL as a query parameter. + +- `cas` `(int: 0)` - Specifies to use a Check-And-Set operation. This is very + useful as a building block for more complex synchronization primitives. If the + index is 0, Consul will only put the key if it does not already exist. If the + index is non-zero, the key is only set if the index matches the `ModifyIndex` + of that key. + +- `acquire` `(string: "")` - Supply a session ID to use in a lock acquisition operation. + This is useful as it allows leader election to be built on top of Consul. If the + lock is not held and the session is valid, this increments the `LockIndex` and + sets the `Session` value of the key in addition to updating the key contents. + A key does not need to exist to be acquired. If the lock is already held by + the given session, then the `LockIndex` is not incremented but the key + contents are updated. This lets the current lock holder update the key + contents without having to give up the lock and reacquire it. **Note that an update + that does not include the acquire parameter will proceed normally even if another + session has locked the key.** + + For an example of how to use the lock feature, check the + [Leader Election tutorial](https://learn.hashicorp.com/tutorials/consul/application-leader-elections). + +- `release` `(string: "")` - Supply a session ID to use in a release operation. This is + useful when paired with `?acquire=` as it allows clients to yield a lock. This + will leave the `LockIndex` unmodified but will clear the associated `Session` + of the key. The key must be held by this session to be unlocked. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter. Added in Consul 1.7.0. + +### Sample Payload + +The payload is arbitrary, and is loaded directly into Consul as supplied. + +### Sample Requests + +```shell-session +$ curl \ + --request PUT \ + --data @contents \ + http://127.0.0.1:8500/v1/kv/my-key + +# or + +$ curl \ + --request PUT \ + --data-binary @contents \ + http://127.0.0.1:8500/v1/kv/my-key +``` + +### Sample Response + +```json +true +``` + +## Delete Key + +This endpoint deletes a single key or all keys sharing a prefix. + +| Method | Path | Produces | +| -------- | ---------- | ------------------ | +| `DELETE` | `/kv/:key` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `key:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter, and gives "No path to datacenter" error when dc is + invalid. + +- `recurse` `(bool: false)` - Specifies to delete all keys which have the + specified prefix. Without this, only a key with an exact match will be + deleted. + +- `cas` `(int: 0)` - Specifies to use a Check-And-Set operation. This is very + useful as a building block for more complex synchronization primitives. Unlike + `PUT`, the index must be greater than 0 for Consul to take any action: a 0 + index will not delete the key. If the index is non-zero, the key is only + deleted if the index matches the `ModifyIndex` of that key. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/kv/my-key +``` + +### Sample Response + +```json +true +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/libraries-and-sdks.mdx consul-1.8.7+dfsg1/website/pages/api-docs/libraries-and-sdks.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/libraries-and-sdks.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/libraries-and-sdks.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,131 @@ +--- +layout: api +page_title: Libraries and SDKs - HTTP API +sidebar_title: Libraries & SDKs +description: |- + There are many third-party libraries for interacting with Consul's HTTP API. + This page lists the HashiCorp and community-maintained Consul HTTP API client + libraries. +--- + +# Client Libraries & SDKs + +The programming libraries listed on this page can be used to consume the API +more conveniently. Some are officially maintained while others are provided by +the community. + +
      +
    • + api - + Official Go client for the Consul HTTP API +
    • +
    • + consulate - Python client for + the Consul HTTP API +
    • +
    • + python-consul - + Python client for the Consul HTTP API +
    • +
    • + python-consul2 - + Python client for the Consul HTTP API +
    • +
    • + consul-kv - Python 3 client + for the Consul KV-store +
    • +
    • + consul-php-sdk - + PHP client for the Consul HTTP API +
    • +
    • + php-consul-api - + GO-like PHP Client for the Consul HTTP API +
    • +
    • + envoy - Consul Clojure + client with watchers and other goodies +
    • +
    • + + clj-consul-catalog + {' '} + - Clojure discovery client for the Consul HTTP API +
    • +
    • + helm - A native Scala client + for interacting with Consul +
    • +
    • + consul-client - Java + client for the Consul HTTP API +
    • +
    • + consul-api - Java client + for the Consul HTTP API +
    • +
    • + + Spring Cloud Consul + {' '} + - Consul integration for{' '} + Spring Boot{' '} + applications (Uses + consul-api internally) +
    • +
    • + + vertx-consul-client + {' '} + - Vert.x client for the Consul HTTP API +
    • +
    • + discovery - Erlang/OTP + client for the Consul HTTP API +
    • +
    • + diplomat - Ruby + library to query Consul's KV-store and services directory +
    • +
    • + node-consul - Node.js + client for the Consul HTTP API +
    • +
    • + Consul.NET - C# client + for the Consul HTTP API +
    • +
    • + Consul - Perl client for the + Consul HTTP API +
    • +
    • + CondenserDotNet - + C# an opinionated API for .NET that provides higher level functionality for + services using the HTTP API +
    • +
    • + ConsulSwift - Swift + client for the Consul HTTP API +
    • +
    • + oatpp-consul - C++ + Consul integration for oatpp applications +
    • +
    • + + consul-env-webpack-plugin + {' '} + - Webpack plugin for converting KV store JSON output to environments + variables. +
    • +
    • + crystal-consul - + Crystal client for the Consul HTTP API +
    • +
    • + consul-dart - + Dart client for the Consul HTTP API +
    • +
    diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/namespaces.mdx consul-1.8.7+dfsg1/website/pages/api-docs/namespaces.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/namespaces.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/namespaces.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,481 @@ +--- +layout: api +page_title: Namespace - HTTP API +sidebar_title: Namespaces +description: The /namespace endpoints allow for managing Consul Enterprise Namespaces. +--- + +# Namespace - HTTP API + + + +The functionality described here is available only in +[Consul Enterprise](https://www.hashicorp.com/products/consul/) version 1.7.0 and later. + +## Create a Namespace + +This endpoint creates a new ACL token. + +| Method | Path | Produces | +| ------ | ------------ | ------------------ | +| `PUT` | `/namespace` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `Name` `(string: )` - The namespaces name. This must be a valid + DNS hostname label. + +- `Description` `(string: "")` - Free form namespaces description. + +- `ACLs` `(object: )` - ACL configurations for this namespace. Rules from + default policies and roles will be used only when there are no rules from directly linked + policies, roles and service identities that are for the target resource and segment. + Therefore if a directly linked policy grants read access to some resource and a + default policy grants write access, the effective access for the token will be read + due to the default policies not being checked. When there is no rule concerning + the resource in either the directly linked policies, roles and service identities + nor in those linked by the defaults, then the agents default policy configuration + will be used for making the enforcement decision. + + - `PolicyDefaults` `(array)` - This is the list of default policies + that should be applied to all tokens created in this namespace. The ACLLink + struct is an object with an "ID" and/or "Name" field to identify a policy. + When a name is used instead of an ID, Consul will resolve the name to an ID + and store that internally. + + - `RoleDefaults` `(array)` - This is the list of default roles + that should be applied to all tokens created in this namespace. The ACLLink + struct is an object with an "ID" and/or "Name" field to identify a policy. + When a name is used instead of an ID, Consul will resolve the name to an ID + and store that internally. + +- `Meta` `(map: )` - Specifies arbitrary KV metadata + to associate with the namespace. + +### Sample Payload + +```json +{ + "Name": "team-1", + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1" + }, + { + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7" + }, + { + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + } +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + -H "X-Consul-Token: 5cdcae6c-0cce-4210-86fe-5dff3b984a6e" \ + --data @payload.json \ + http://127.0.0.1:8500/v1/namespace +``` + +### SampleResponse + +```json +{ + "Name": "team-1", + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1", + "Name": "service-read" + }, + { + "ID": "af937401-9950-fcae-8396-610ce047649a", + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7", + "Name": "service-discovery" + }, + { + "ID": "ae4b3542-d824-eb5f-7799-3fd657847e4e", + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + }, + "CreateIndex": 55, + "ModifyIndex": 55 +} +``` + +## Read a Namespace + +This endpoint reads a Namespace with the given name. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `GET` | `/namespace/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------------------------- | +| `YES` | `all` | `none` | `operator:read` or `namespace:*:read`1 | + +1 Access can be granted to list the Namespace if the token used when making +the request has been granted any access in the namespace (read, list or write). + +### Parameters + +- `name` `(string: )` - Specifies the namespace to read. This + is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl -H "X-Consul-Token: b23b3cad-5ea1-4413-919e-c76884b9ad60" \ + http://127.0.0.1:8500/v1/namespace/team-1 +``` + +### SampleResponse + +```json +{ + "Name": "team-1", + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1", + "Name": "service-read" + }, + { + "ID": "af937401-9950-fcae-8396-610ce047649a", + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7", + "Name": "service-discovery" + }, + { + "ID": "ae4b3542-d824-eb5f-7799-3fd657847e4e", + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + }, + "CreateIndex": 55, + "ModifyIndex": 55 +} +``` + +## Update a Namespace + +This endpoint updates a new ACL token. + +| Method | Path | Produces | +| ------ | ------------------ | ------------------ | +| `PUT` | `/namespace/:name` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `Name` `(string: )` - The namespaces name. This must be a valid + DNS hostname label. If present in the payload it must match what was given + in the URL path. + +- `Description` `(string: "")` - Free form namespaces description. + +- `ACLs` `(object: )` - ACL configurations for this Namespace. Rules from + default policies and roles will be used only when there are no rules from directly linked + policies, roles and service identities that are for the target resource and segment. + Therefore if a directly linked policy grants read access to some resource and a + default policy grants write access, the effective access for the token will be read + due to the default policies not being checked. When there is no rule concerning + the resource in either the directly linked policies, roles and service identities + nor in those linked by the defaults, then the agents default policy configuration + will be used for making the enforcement decision. + + - `PolicyDefaults` `(array)` - This is the list of default policies + that should be applied to all tokens created in this namespace. The ACLLink + struct is an object with an "ID" and/or "Name" field to identify a policy. + When a name is used instead of an ID, Consul will resolve the name to an ID + and store that internally. + + - `RoleDefaults` `(array)` - This is the list of default roles + that should be applied to all tokens created in this namespace. The ACLLink + struct is an object with an "ID" and/or "Name" field to identify a policy. + When a name is used instead of an ID, Consul will resolve the name to an ID + and store that internally. + +- `Meta` `(map: )` - Specifies arbitrary KV metadata + to associate with the namespace. + +### Sample Payload + +```json +{ + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1" + }, + { + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7" + }, + { + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + } +} +``` + +### Sample Request + +```shell-session +$ curl -X PUT \ + -H "X-Consul-Token: 5cdcae6c-0cce-4210-86fe-5dff3b984a6e" \ + --data @payload.json \ + http://127.0.0.1:8500/v1/namespace/team-1 +``` + +### SampleResponse + +```json +{ + "Name": "team-1", + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1", + "Name": "service-read" + }, + { + "ID": "af937401-9950-fcae-8396-610ce047649a", + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7", + "Name": "service-discovery" + }, + { + "ID": "ae4b3542-d824-eb5f-7799-3fd657847e4e", + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + }, + "CreateIndex": 55, + "ModifyIndex": 55 +} +``` + +## Delete a Namespace + +This endpoint marks a Namespace for deletion. Once marked Consul will +deleted all the associated Namespaced data in the background. Only once +all associated data has been deleted will the Namespace actually disappear. +Until then, further reads can be performed on the namespace and a `DeletedAt` +field will now be populated with the timestamp of when the Namespace was +marked for deletion. + +| Method | Path | Produces | +| -------- | ------------------ | -------- | +| `DELETE` | `/namespace/:name` | N/A | + +This endpoint will return no data. Success or failure is indicated by the status +code returned. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `name` `(string: )` - Specifies the namespace to delete. This + is required and is specified as part of the URL path. + +### Sample Request + +```shell-session +$ curl -X DELETE \ + -H "X-Consul-Token: b23b3cad-5ea1-4413-919e-c76884b9ad60" \ + http://127.0.0.1:8500/v1/namespace/team-1 +``` + +### Sample Read Output After Deletion Prior to Removal + +```json +{ + "Name": "team-1", + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1", + "Name": "service-read" + }, + { + "ID": "af937401-9950-fcae-8396-610ce047649a", + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7", + "Name": "service-discovery" + }, + { + "ID": "ae4b3542-d824-eb5f-7799-3fd657847e4e", + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + }, + "DeletedAt": "2019-12-02T23:00:00Z", + "CreateIndex": 55, + "ModifyIndex": 100 +} +``` + +## List all Namespaces + +This endpoint lists all the Namespaces. The output will be filtered based on the +privileges of the ACL token used for the request. + +| Method | Path | Produces | +| ------ | ------------- | ------------------ | +| `GET` | `/namespaces` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------------------------------------------- | +| `YES` | `all` | `none` | `operator:read` or `namespace:*:read`1 | + +1 Access can be granted to list the Namespace if the token used when making +the request has been granted any access in the namespace (read, list or write). + +### Sample Request + +```shell-session +$ curl -H "X-Consul-Token: 0137db51-5895-4c25-b6cd-d9ed992f4a52" \ + http://127.0.0.1:8500/v1/namespaces +``` + +### Sample Response + +```json +[ + { + "Name": "default", + "Description": "Builtin Default Namespace", + "CreateIndex": 6, + "ModifyIndex": 6 + }, + { + "Name": "team-1", + "Description": "Namespace for Team 1", + "ACLs": { + "PolicyDefaults": [ + { + "ID": "77117cf6-d976-79b0-d63b-5a36ac69c8f1", + "Name": "service-read" + }, + { + "ID": "af937401-9950-fcae-8396-610ce047649a", + "Name": "node-read" + } + ], + "RoleDefaults": [ + { + "ID": "69748856-ae69-d620-3ec4-07844b3c6be7", + "Name": "service-discovery" + }, + { + "ID": "ae4b3542-d824-eb5f-7799-3fd657847e4e", + "Name": "ns-team-2-read" + } + ] + }, + "Meta": { + "foo": "bar" + }, + "CreateIndex": 55, + "ModifyIndex": 55 + } +] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/area.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/area.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/area.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/area.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,417 @@ +--- +layout: api +page_title: Network Areas - Operator - HTTP API +sidebar_title: Area +description: |- + The /operator/area endpoints expose the network tomography information via + Consul's HTTP API. +--- + +# Network Areas - Operator HTTP API + + + +The `/operator/area` endpoints provide tools to manage network areas via +Consul's HTTP API. + +The network area functionality described here is available only in +[Consul Enterprise](https://www.hashicorp.com/products/consul/) version 0.8.0 and +later. Network areas are operator-defined relationships between servers in two +different Consul datacenters. + +Unlike Consul's WAN feature, network areas use just the server RPC port for +communication, and relationships can be made between independent pairs of +datacenters, so not all servers need to be fully connected. This allows for +complex topologies among Consul datacenters like hub/spoke and more general +trees. + +Please check the [Network Areas tutorial](https://learn.hashicorp.com/tutorials/consul/federation-network-areas) for more details. + +## Create Network Area + +This endpoint creates a new network area and returns its ID if it is created +successfully. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `POST` | `/operator/area` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +- `PeerDatacenter` `(string: )` - Specifies the name of the Consul + datacenter that will be joined the Consul servers in the current datacenter to + form the area. Only one area is allowed for each possible `PeerDatacenter`, + and a datacenter cannot form an area with itself. + +- `RetryJoin` `(array: nil)`- Specifies a list of Consul servers to + attempt to join. Servers can be given as `IP`, `IP:port`, `hostname`, or + `hostname:port`. Consul will spawn a background task that tries to + periodically join the servers in this list and will run until a join succeeds. + If this list is not supplied, joining can be done with a call to the + [join endpoint](#join-network-area) once the network area is created. + +- `UseTLS` `(bool: )` - Specifies whether gossip over this area should be + encrypted with TLS if possible. + +### Sample Payload + +```json +{ + "PeerDatacenter": "dc2", + "RetryJoin": ["10.1.2.3", "10.1.2.4", "10.1.2.5"], + "UseTLS": false +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/operator/area +``` + +### Sample Response + +```json +{ + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05" +} +``` + +## List Network Areas + +This endpoint lists all network areas. + +| Method | Path | Produces | +| ------ | ---------------- | ------------------ | +| `GET` | `/operator/area` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `YES` | `all` | `none` | `operator:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/area +``` + +### Sample Response + +```json +[ + { + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "PeerDatacenter": "dc2", + "RetryJoin": ["10.1.2.3", "10.1.2.4", "10.1.2.5"] + } +] +``` + +## Update Network Area + +This endpoint updates a network area to the given configuration. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `PUT` | `/operator/area/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +- `UseTLS` `(bool: )` - Specifies whether gossip over this area should be + encrypted with TLS if possible. + +### Sample Payload + +```json +{ + "UseTLS": true +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/operator/area/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +## List Specific Network Area + +This endpoint lists a specific network area. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `GET` | `/operator/area/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `YES` | `all` | `none` | `operator:read` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the area to list. This + is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/area/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +```json +[ + { + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "PeerDatacenter": "dc2", + "RetryJoin": ["10.1.2.3", "10.1.2.4", "10.1.2.5"] + } +] +``` + +## Delete Network Area + +This endpoint deletes a specific network area. + +| Method | Path | Produces | +| -------- | ---------------------- | ------------------ | +| `DELETE` | `/operator/area/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the area to delete. This + is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/operator/area/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +## Join Network Area + +This endpoint attempts to join the given Consul servers into a specific network +area. + +| Method | Path | Produces | +| ------ | --------------------------- | ------------------ | +| `PUT` | `/operator/area/:uuid/join` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the area to join. This + is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +### Sample Payload + +```json +["10.1.2.3", "10.1.2.4", "10.1.2.5"] +``` + +This can be provided as `IP`, `IP:port`, `hostname`, or `hostname:port`. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/operator/area/8f246b77-f3e1-ff88-5b48-8ec93abf3e05/join +``` + +### Sample Response + +```json +[ + { + "Address": "10.1.2.3", + "Joined": true, + "Error": "" + }, + { + "Address": "10.1.2.4", + "Joined": true, + "Error": "" + }, + { + "Address": "10.1.2.5", + "Joined": true, + "Error": "" + } +] +``` + +- `Address` has the address requested to join. + +- `Joined` will be `true` if the Consul server at the given address was + successfully joined into the network area. Otherwise, this will be `false` and + `Error` will have a human-readable message about why the join didn't succeed. + +## List Network Area Members + +This endpoint provides a listing of the Consul servers present in a specific +network area. + +| Method | Path | Produces | +| ------ | ------------------------------ | ------------------ | +| `GET` | `/operator/area/:uuid/members` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `operator:read` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the area to list. This + is specified as part of the URL. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/area/8f246b77-f3e1-ff88-5b48-8ec93abf3e05/members +``` + +### Sample Response + +```json +[ + { + "ID": "afc5d95c-1eee-4b46-b85b-0efe4c76dd48", + "Name": "node-2.dc1", + "Addr": "127.0.0.2", + "Port": 8300, + "Datacenter": "dc1", + "Role": "server", + "Build": "0.8.0", + "Protocol": 2, + "Status": "alive", + "RTT": 256478 + } +] +``` + +- `ID` is the node ID of the server. + +- `Name` is the node name of the server, with its datacenter appended. + +- `Addr` is the IP address of the node. + +- `Port` is the server RPC port of the node. + +- `Datacenter` is the node's Consul datacenter. + +- `Role` is always "server" since only Consul servers can participate in network + areas. + +- `Build` has the Consul version running on the node. + +- `Protocol` is the [protocol version](/docs/upgrading#protocol-versions) + being spoken by the node. + +- `Status` is the current health status of the node, as determined by the + network area distributed failure detector. This will be "alive", "leaving", + "left", or "failed". A "failed" status means that other servers are not able + to probe this server over its server RPC interface. + +- `RTT` is an estimated network round trip time from the server answering the + query to the given server, in nanoseconds. This is computed using [network + coordinates](/docs/internals/coordinates). diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/autopilot.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/autopilot.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/autopilot.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/autopilot.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,253 @@ +--- +layout: api +page_title: Autopilot - Operator - HTTP API +sidebar_title: Autopilot +description: |- + The /operator/autopilot endpoints allow for automatic operator-friendly + management of Consul servers including cleanup of dead servers, monitoring + the state of the Raft cluster, and stable server introduction. +--- + +# Autopilot Operator HTTP API + +The `/operator/autopilot` endpoints allow for automatic operator-friendly +management of Consul servers including cleanup of dead servers, monitoring +the state of the Raft cluster, and stable server introduction. + +Please check the [Autopilot tutorial](https://learn.hashicorp.com/tutorials/consul/autopilot-datacenter-operations) for more details. + +## Read Configuration + +This endpoint retrieves its latest Autopilot configuration. + +| Method | Path | Produces | +| ------ | ----------------------------------- | ------------------ | +| `GET` | `/operator/autopilot/configuration` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `operator:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query string. + +- `stale` `(bool: false)` - If the cluster does not currently have a leader an + error will be returned. You can use the `?stale` query parameter to read the + Raft configuration from any of the Consul servers. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/autopilot/configuration +``` + +### Sample Response + +```json +{ + "CleanupDeadServers": true, + "LastContactThreshold": "200ms", + "MaxTrailingLogs": 250, + "ServerStabilizationTime": "10s", + "RedundancyZoneTag": "", + "DisableUpgradeMigration": false, + "UpgradeVersionTag": "", + "CreateIndex": 4, + "ModifyIndex": 4 +} +``` + +For more information about the Autopilot configuration options, see the +[agent configuration section](/docs/agent/options#autopilot). + +## Update Configuration + +This endpoint updates the Autopilot configuration of the cluster. + +| Method | Path | Produces | +| ------ | ----------------------------------- | ------------------ | +| `PUT` | `/operator/autopilot/configuration` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query string. + +- `cas` `(int: 0)` - Specifies to use a Check-And-Set operation. The update will + only happen if the given index matches the `ModifyIndex` of the configuration + at the time of writing. + +- `CleanupDeadServers` `(bool: true)` - Specifies automatic removal of dead + server nodes periodically and whenever a new server is added to the cluster. + +- `LastContactThreshold` `(string: "200ms")` - Specifies the maximum amount of + time a server can go without contact from the leader before being considered + unhealthy. Must be a duration value such as `10s`. + +- `MaxTrailingLogs` `(int: 250)` specifies the maximum number of log entries + that a server can trail the leader by before being considered unhealthy. + +- `MinQuorum` `(int: 0)` - specifies the minimum number of servers needed before + Autopilot can prune dead servers. + +- `ServerStabilizationTime` `(string: "10s")` - Specifies the minimum amount of + time a server must be stable in the 'healthy' state before being added to the + cluster. Only takes effect if all servers are running Raft protocol version 3 + or higher. Must be a duration value such as `30s`. + +- `RedundancyZoneTag` `(string: "")` - Controls the node-meta key to use when + Autopilot is separating servers into zones for redundancy. Only one server in + each zone can be a voting member at one time. If left blank, this feature will + be disabled. + +- `DisableUpgradeMigration` `(bool: false)` - Disables Autopilot's upgrade + migration strategy in Consul Enterprise of waiting until enough + newer-versioned servers have been added to the cluster before promoting any of + them to voters. + +- `UpgradeVersionTag` `(string: "")` - Controls the node-meta key to use for + version info when performing upgrade migrations. If left blank, the Consul + version will be used. + +### Sample Payload + +```json +{ + "CleanupDeadServers": true, + "LastContactThreshold": "200ms", + "MaxTrailingLogs": 250, + "MinQuorum": 3, + "ServerStabilizationTime": "10s", + "RedundancyZoneTag": "", + "DisableUpgradeMigration": false, + "UpgradeVersionTag": "", + "CreateIndex": 4, + "ModifyIndex": 4 +} +``` + +## Read Health + +This endpoint queries the health of the autopilot status. + +| Method | Path | Produces | +| ------ | ---------------------------- | ------------------ | +| `GET` | `/operator/autopilot/health` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `operator:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query string. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/autopilot/health +``` + +### Sample response + +```json +{ + "Healthy": true, + "FailureTolerance": 0, + "Servers": [ + { + "ID": "e349749b-3303-3ddf-959c-b5885a0e1f6e", + "Name": "node1", + "Address": "127.0.0.1:8300", + "SerfStatus": "alive", + "Version": "0.7.4", + "Leader": true, + "LastContact": "0s", + "LastTerm": 2, + "LastIndex": 46, + "Healthy": true, + "Voter": true, + "StableSince": "2017-03-06T22:07:51Z" + }, + { + "ID": "e36ee410-cc3c-0a0c-c724-63817ab30303", + "Name": "node2", + "Address": "127.0.0.1:8205", + "SerfStatus": "alive", + "Version": "0.7.4", + "Leader": false, + "LastContact": "27.291304ms", + "LastTerm": 2, + "LastIndex": 46, + "Healthy": true, + "Voter": false, + "StableSince": "2017-03-06T22:18:26Z" + } + ] +} +``` + +- `Healthy` is whether all the servers are currently healthy. + +- `FailureTolerance` is the number of redundant healthy servers that could be + fail without causing an outage (this would be 2 in a healthy cluster of 5 + servers). + +- `Servers` holds detailed health information on each server: + + - `ID` is the Raft ID of the server. + + - `Name` is the node name of the server. + + - `Address` is the address of the server. + + - `SerfStatus` is the SerfHealth check status for the server. + + - `Version` is the Consul version of the server. + + - `Leader` is whether this server is currently the leader. + + - `LastContact` is the time elapsed since this server's last contact with the leader. + + - `LastTerm` is the server's last known Raft leader term. + + - `LastIndex` is the index of the server's last committed Raft log entry. + + - `Healthy` is whether the server is healthy according to the current Autopilot configuration. + + - `Voter` is whether the server is a voting member of the Raft cluster. + + - `StableSince` is the time this server has been in its current `Healthy` state. + + The HTTP status code will indicate the health of the cluster. If `Healthy` is true, then a + status of 200 will be returned. If `Healthy` is false, then a status of 429 will be returned. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/index.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/index.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/index.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/index.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,24 @@ +--- +layout: api +page_title: Operator - HTTP API +sidebar_title: Operator +description: |- + The /operator endpoints provide cluster-level tools for Consul operators, + such as interacting with the Raft subsystem. +--- + +# Operator HTTP Endpoint + +The `/operator` endpoints provide cluster-level tools for Consul operators, +such as interacting with the Raft subsystem. For a CLI to perform these +operations manually, please check the documentation for the +[`consul operator`](/docs/commands/operator) command. + +If ACLs are enabled then a token with operator privileges may be required in +order to use this interface. Check the [ACL Rules documentation](/docs/acl/acl-rules#operator-rules) +for more information. + +Check the [Outage Recovery](https://learn.hashicorp.com/tutorials/consul/recovery-outage) tutorial for some examples of +how these capabilities are used. + +Please choose a sub-section in the navigation for more information. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/keyring.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/keyring.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/keyring.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/keyring.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,240 @@ +--- +layout: api +page_title: Keyring - Operator - HTTP API +sidebar_title: Keyring +description: |- + The /operator/keyring endpoints allow for management of the gossip encryption + keyring. +--- + +# Keyring Operator HTTP API + +The `/operator/keyring` endpoints allow for management of the gossip encryption +keyring. Please see the [Gossip Protocol Guide](/docs/internals/gossip) for +more details on the gossip protocol and its use. + +## List Gossip Encryption Keys + +This endpoint lists the gossip encryption keys installed on both the WAN and LAN +rings of every known datacenter, unless otherwise specified with the `local-only` +query parameter (see below). + +If ACLs are enabled, the client will need to supply an ACL Token with `keyring` +read privileges. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/operator/keyring` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `NO` | `none` | `none` | `keyring:read` | + +### Parameters + +- `relay-factor` `(int: 0)` - Specifies the relay factor. Setting this to a + non-zero value will cause nodes to relay their responses through this many + randomly-chosen other nodes in the cluster. The maximum allowed value is `5`. + This is specified as part of the URL as a query parameter. +- `local-only` `(bool: false)` - Setting `local-only` to true will force keyring + list queries to only hit local servers (no WAN traffic). This flag can only be set + for list queries. It is specified as part of the URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/keyring +``` + +### Sample Response + +```json +[ + { + "WAN": true, + "Datacenter": "dc1", + "Segment": "", + "Keys": { + "pUqJrVyVRj5jsiYEkM/tFQYfWyJIv4s3XkvDwy7Cu5s=": 1, + "ZWTL+bgjHyQPhJRKcFe3ccirc2SFHmc/Nw67l8NQfdk=": 1, + "WbL6oaTPom+7RG7Q/INbJWKy09OLar/Hf2SuOAdoQE4=": 1 + }, + "PrimaryKeys": { + "pUqJrVyVRj5jsiYEkM/tFQYfWyJIv4s3XkvDwy7Cu5s=": 1, + }, + "NumNodes": 3 + }, + { + "WAN": false, + "Datacenter": "dc1", + "Segment": "", + "Keys": { + "pUqJrVyVRj5jsiYEkM/tFQYfWyJIv4s3XkvDwy7Cu5s=": 1, + "ZWTL+bgjHyQPhJRKcFe3ccirc2SFHmc/Nw67l8NQfdk=": 1, + "WbL6oaTPom+7RG7Q/INbJWKy09OLar/Hf2SuOAdoQE4=": 1 + }, + "PrimaryKeys": { + "pUqJrVyVRj5jsiYEkM/tFQYfWyJIv4s3XkvDwy7Cu5s=": 1, + }, + "NumNodes": 3 + } +] +``` + +- `WAN` is true if the block refers to the WAN ring of that datacenter (rather + than LAN). + +- `Datacenter` is the datacenter the block refers to. + +- `Segment` is the network segment the block refers to. + +- `Keys` is a map of each gossip key to the number of nodes it's currently + installed on. + +- `PrimaryKeys` is a map of each primary gossip key to the number of nodes it's currently + installed on. + +- `NumNodes` is the total number of nodes in the datacenter. + +## Add New Gossip Encryption Key + +This endpoint installs a new gossip encryption key into the cluster. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `POST` | `/operator/keyring` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `keyring:write` | + +### Parameters + +- `relay-factor` `(int: 0)` - Specifies the relay factor. Setting this to a + non-zero value will cause nodes to relay their responses through this many + randomly-chosen other nodes in the cluster. The maximum allowed value is `5`. + This is specified as part of the URL as a query parameter. + +- `Key` `(string: )` - Specifies the encryption key to install into + the cluster. + +### Sample Payload + +```json +{ + "Key": "pUqJrVyVRj5jsiYEkM/tFQYfWyJIv4s3XkvDwy7Cu5s=" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/operator/keyring +``` + +## Change Primary Gossip Encryption Key + +This endpoint changes the primary gossip encryption key. The key must already be +installed before this operation can succeed. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `PUT` | `/operator/keyring` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `keyring:write` | + +### Parameters + +- `relay-factor` `(int: 0)` - Specifies the relay factor. Setting this to a + non-zero value will cause nodes to relay their responses through this many + randomly-chosen other nodes in the cluster. The maximum allowed value is `5`. + This is specified as part of the URL as a query parameter. + +- `Key` `(string: )` - Specifies the encryption key to begin using as + primary into the cluster. + +### Sample Payload + +```json +{ + "Key": "WbL6oaTPom+7RG7Q/INbJWKy09OLar/Hf2SuOAdoQE4=" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/operator/keyring +``` + +## Delete Gossip Encryption Key + +This endpoint removes a gossip encryption key from the cluster. This operation +may only be performed on keys which are not currently the primary key. + +| Method | Path | Produces | +| -------- | ------------------- | ------------------ | +| `DELETE` | `/operator/keyring` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `keyring:write` | + +### Parameters + +- `relay-factor` `(int: 0)` - Specifies the relay factor. Setting this to a + non-zero value will cause nodes to relay their responses through this many + randomly-chosen other nodes in the cluster. The maximum allowed value is `5`. + This is specified as part of the URL as a query parameter. + +- `Key` `(string: )` - Specifies the encryption key to delete. + +### Sample Payload + +```json +{ + "Key": "WbL6oaTPom+7RG7Q/INbJWKy09OLar/Hf2SuOAdoQE4=" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + --data @payload.json \ + http://127.0.0.1:8500/v1/operator/keyring +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/license.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/license.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/license.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/license.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,206 @@ +--- +layout: api +page_title: License - Operator - HTTP API +sidebar_title: License +description: |- + The /operator/license endpoints allow for setting and retrieving the Consul + Enterprise License. +--- + +# License - Operator HTTP API + + + +The licensing functionality described here is available only in +[Consul Enterprise](https://www.hashicorp.com/products/consul/) version 1.1.0 and later. + +## Getting the Consul License + +This endpoint gets information about the current license. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/operator/license` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `all` | `none` | `none` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter whose license should be retrieved. + This will default to the datacenter of the agent serving the HTTP request. + This is specified as a URL query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/license +``` + +### Sample Response + +```json +{ + "Valid": true, + "License": { + "license_id": "2afbf681-0d1a-0649-cb6c-333ec9f0989c", + "customer_id": "0259271d-8ffc-e85e-0830-c0822c1f5f2b", + "installation_id": "*", + "issue_time": "2018-05-21T20:03:35.911567355Z", + "start_time": "2018-05-21T04:00:00Z", + "expiration_time": "2019-05-22T03:59:59.999Z", + "product": "consul", + "flags": { + "package": "premium" + }, + "features": [ + "Automated Backups", + "Automated Upgrades", + "Enhanced Read Scalability", + "Network Segments", + "Redundancy Zone", + "Advanced Network Federation" + ], + "temporary": false + }, + "Warnings": [] +} +``` + +## Updating the Consul License + +This endpoint updates the Consul license and returns some of the +license contents as well as any warning messages regarding its validity. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `PUT` | `/operator/license` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter whose license should be updated. + This will default to the datacenter of the agent serving the HTTP request. + This is specified as a URL query parameter. + +### Sample Payload + +The payload is the raw license blob. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @consul.license \ + http://127.0.0.1:8500/v1/operator/license +``` + +### Sample Response + +```json +{ + "Valid": true, + "License": { + "license_id": "2afbf681-0d1a-0649-cb6c-333ec9f0989c", + "customer_id": "0259271d-8ffc-e85e-0830-c0822c1f5f2b", + "installation_id": "*", + "issue_time": "2018-05-21T20:03:35.911567355Z", + "start_time": "2018-05-21T04:00:00Z", + "expiration_time": "2019-05-22T03:59:59.999Z", + "product": "consul", + "flags": { + "package": "premium" + }, + "features": [ + "Automated Backups", + "Automated Upgrades", + "Enhanced Read Scalability", + "Network Segments", + "Redundancy Zone", + "Advanced Network Federation" + ], + "temporary": false + }, + "Warnings": [] +} +``` + +## Resetting the Consul License + +This endpoint resets the Consul license to the license included in the Enterprise binary. If the included license is not valid, the replace will fail. + +| Method | Path | Produces | +| -------- | ------------------- | ------------------ | +| `DELETE` | `/operator/license` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter whose license should be updated. + This will default to the datacenter of the agent serving the HTTP request. + This is specified as a URL query parameter. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/operator/license +``` + +### Sample Response + +```json +{ + "Valid": true, + "License": { + "license_id": "2afbf681-0d1a-0649-cb6c-333ec9f0989c", + "customer_id": "0259271d-8ffc-e85e-0830-c0822c1f5f2b", + "installation_id": "*", + "issue_time": "2018-05-21T20:03:35.911567355Z", + "start_time": "2018-05-21T04:00:00Z", + "expiration_time": "2019-05-22T03:59:59.999Z", + "product": "consul", + "flags": { + "package": "premium" + }, + "features": [ + "Automated Backups", + "Automated Upgrades", + "Enhanced Read Scalability", + "Network Segments", + "Redundancy Zone", + "Advanced Network Federation" + ], + "temporary": false + }, + "Warnings": [] +} +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/raft.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/raft.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/raft.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/raft.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,148 @@ +--- +layout: api +page_title: Raft - Operator - HTTP API +sidebar_title: Raft +description: |- + The /operator/raft endpoints provide tools for management of Raft the + consensus subsystem and cluster quorum. +--- + +# Raft Operator HTTP API + +The `/operator/raft` endpoints provide tools for management of Raft the +consensus subsystem and cluster quorum. + +Please see the [Consensus Protocol Guide](/docs/internals/consensus) for +more information about Raft consensus protocol and its use. + +## Read Configuration + +This endpoint reads the current raft configuration. + +| Method | Path | Produces | +| ------ | ------------------------------ | ------------------ | +| `GET` | `/operator/raft/configuration` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | --------------------- | ------------- | --------------- | +| `NO` | `default` and `stale` | `none` | `operator:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query string. + +- `stale` `(bool: false)` - If the cluster does not currently have a leader an + error will be returned. You can use the `?stale` query parameter to read the + Raft configuration from any of the Consul servers. Not setting this will choose + the default consistency mode which will forward the request to the leader for + processing but not re-confirm the server is still the leader before returning + results. See [default consistency](/api/features/consistency#default) for more details. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/raft/configuration +``` + +### Sample Response + +```json +{ + "Servers": [ + { + "ID": "127.0.0.1:8300", + "Node": "alice", + "Address": "127.0.0.1:8300", + "Leader": true, + "Voter": true + }, + { + "ID": "127.0.0.2:8300", + "Node": "bob", + "Address": "127.0.0.2:8300", + "Leader": false, + "Voter": true + }, + { + "ID": "127.0.0.3:8300", + "Node": "carol", + "Address": "127.0.0.3:8300", + "Leader": false, + "Voter": true + } + ], + "Index": 22 +} +``` + +- `Servers` is has information about the servers in the Raft peer configuration: + + - `ID` is the ID of the server. This is the same as the `Address` in Consul + 0.7 but may be upgraded to a GUID in a future version of Consul. + + - `Node` is the node name of the server, as known to Consul, or "(unknown)" if + the node is stale and not known. + + - `Address` is the IP:port for the server. + + - `Leader` is either "true" or "false" depending on the server's role in the + Raft configuration. + + - `Voter` is "true" or "false", indicating if the server has a vote in the + Raft configuration. Future versions of Consul may add support for non-voting + servers. + +- `Index` is the Raft corresponding to this configuration. The latest + configuration may not yet be committed if changes are in flight. + +## Delete Raft Peer + +This endpoint removes the Consul server with given address from the Raft +configuration. + +There are rare cases where a peer may be left behind in the Raft configuration +even though the server is no longer present and known to the cluster. This +endpoint can be used to remove the failed server so that it is no longer affects +the Raft quorum. + +If ACLs are enabled, the client will need to supply an ACL Token with `operator` +write privileges. + +| Method | Path | Produces | +| -------- | --------------------- | ------------------ | +| `DELETE` | `/operator/raft/peer` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------- | +| `NO` | `none` | `none` | `operator:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query string. + +- `id|address` `(string: )` - Specifies the ID or address (IP:port) of the raft peer to remove. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/operator/raft/peer?address=1.2.3.4:5678 +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/operator/segment.mdx consul-1.8.7+dfsg1/website/pages/api-docs/operator/segment.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/operator/segment.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/operator/segment.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,59 @@ +--- +layout: api +page_title: Network Segments - Operator - HTTP API +sidebar_title: Segment +description: |- + The /operator/segment endpoint exposes the network segment information via + Consul's HTTP API. +--- + +# Network Areas - Operator HTTP API + + + +The `/operator/segment` endpoint provides tools to manage network segments via +Consul's HTTP API. + +The network area functionality described here is available only in +[Consul Enterprise](https://www.hashicorp.com/products/consul/) version 0.9.3 and +later. Network segments are operator-defined sections of agents on the LAN, typically +isolated from other segments by network configuration. + +Please check the [Network Segments tutorial](https://learn.hashicorp.com/tutorials/consul/network-partition-datacenters) for more details. + +## List Network Segments + +This endpoint lists all network areas. + +| Method | Path | Produces | +| ------ | ------------------- | ------------------ | +| `GET` | `/operator/segment` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `operator:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as a URL query + parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/operator/segment +``` + +### Sample Response + +```json +["", "alpha", "beta"] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/query.mdx consul-1.8.7+dfsg1/website/pages/api-docs/query.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/query.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/query.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,667 @@ +--- +layout: api +page_title: Prepared Queries - HTTP API +sidebar_title: Prepared Queries +description: The /query endpoints manage and execute prepared queries in Consul. +--- + +# Prepared Query HTTP Endpoint + +The `/query` endpoints create, update, destroy, and execute prepared queries. + +Prepared queries allow you to register a complex service query and then execute +it later via its ID or name to get a set of healthy nodes that provide a given +service. This is particularly useful in combination with Consul's +[DNS Interface](/docs/agent/dns) as it allows for much richer queries than +would be possible given the limited entry points exposed by DNS. + +Check the [Geo Failover tutorial](https://learn.hashicorp.com/tutorials/consul/automate-geo-failover) for details and +examples for using prepared queries to implement geo failover for services. + +Check the [prepared query rules](/docs/agent/acl-rules#prepared-query-rules) +section of the agent ACL documentation for more details about how prepared +queries work with Consul's ACL system. + +### Prepared Query Templates + +Consul 0.6.4 and later support prepared query templates. These are created +similar to static queries, except with some additional fields and features. +Here is an example prepared query template: + +```json +{ + "Template": { + "Type": "name_prefix_match", + "Regexp": "^geo-db-(.*?)-([^\\-]+?)$", + "RemoveEmptyTags": false + } +} +``` + +The `Template` structure configures a prepared query as a template instead of a +static query. It has two fields: + +- `Type` is the query type, which must be `name_prefix_match`. This means that + the template will apply to any query lookup with a name whose prefix matches + the `Name` field of the template. In this example, any query for `geo-db` will + match this query. Query templates are resolved using a longest prefix match, + so it's possible to have high-level templates that are overridden for specific + services. Static queries are always resolved first, so they can also override + templates. + +- `Regexp` is an optional regular expression which is used to extract fields + from the entire name, once this template is selected. In this example, the + regular expression takes the first item after the "-" as the database name and + everything else after as a tag. See the + [RE2](https://github.com/google/re2/wiki/Syntax) reference for syntax of this + regular expression. + +- `RemoveEmptyTags` is optional, and if set to true, will cause the `Tags` list + inside the `Service` structure to be stripped of any empty strings. This defaults + to false, meaning that empty strings will remain in the list. This is useful + when interpolating into tags in a way where the tag is optional, and where + searching for an empty tag would yield no results from the query. + +All other fields of the query have the same meanings as for a static query, +except that several interpolation variables are available to dynamically +populate the query before it is executed. All of the string fields inside the +`Service` structure are interpolated, with the following variables available: + +- `${name.full}` has the entire name that was queried. For example, a DNS lookup + for `geo-db-customer-primary.query.consul` in the example above would set this + variable to `geo-db-customer-primary`. + +- `${name.prefix}` has the prefix that matched. This would always be `geo-db` + for the example above. + +- `${name.suffix}` has the suffix after the prefix. For example, a DNS lookup + for `geo-db-customer-primary.query.consul` in the example above would set this + variable to `-customer-primary`. + +- `${match(N)}` returns the regular expression match at the given index N. The 0 + index will have the entire match, and >0 will have the results of each match + group. For example, a DNS lookup for `geo-db-customer-primary.query.consul` in + the example above with a `Regexp` field set to `^geo-db-(.*?)-([^\-]+?)$` + would return `geo-db-customer-primary` for `${match(0)}`, `customer` for + `${match(1)}`, and `primary` for `${match(2)}`. If the regular expression + doesn't match, or an invalid index is given, then `${match(N)}` will return an + empty string. + +- `${agent.segment}` - the network segment of the agent that + initiated the query. This can be used with the `NodeMeta` field to limit the results + of a query to service instances within its own network segment: + + ```json + { + "Name": "", + "Template": { + "Type": "name_prefix_match" + }, + "Service": { + "Service": "${name.full}", + "NodeMeta": { "consul-network-segment": "${agent.segment}" } + } + } + ``` + + This will map all names of the form `.query.consul` over DNS to a query + that will select an instance of the service in the agent's own network segment. + +Using templates, it is possible to apply prepared query behaviors to many +services with a single template. Here's an example template that matches any +query and applies a failover policy to it: + +```json +{ + "Name": "", + "Template": { + "Type": "name_prefix_match" + }, + "Service": { + "Service": "${name.full}", + "Failover": { + "NearestN": 3 + } + } +} +``` + +This will match any lookup for `*.query.consul` and will attempt to find the +service locally, and otherwise attempt to find that service in the next three +closest datacenters. If ACLs are enabled, a catch-all template like this with +an empty `Name` requires an ACL token that can write to any query prefix. Also, +only a single catch-all template can be registered at any time. + +## Create Prepared Query + +This endpoint creates a new prepared query and returns its ID if it is created +successfully. + +| Method | Path | Produces | +| ------ | -------- | ------------------ | +| `POST` | `/query` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `query:write` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `Name` `(string: "")` - Specifies an optional friendly name that can be used + to execute a query instead of using its ID. + +- `Session` `(string: "")` - Specifies the ID of an existing session. This + provides a way to automatically remove a prepared query when the given session + is invalidated. If not given the prepared query must be manually removed when + no longer needed. + +- `Token` `(string: "")` - Specifies the ACL token to use each time the query is + executed. This allows queries to be executed by clients with lesser or even no + ACL Token, so this should be used with care. The token itself can only be seen + by clients with a management token. If the `Token` field is left blank or + omitted, the client's ACL Token will be used to determine if they have access + to the service being queried. If the client does not supply an ACL Token, the + anonymous token will be used. + +- `Service` `(Service: )` - Specifies the structure to define the query's behavior. + + - `Service` `(string: )` - Specifies the name of the service to + query. + + - `Failover` contains two fields, both of which are optional, and determine + what happens if no healthy nodes are available in the local datacenter when + the query is executed. It allows the use of nodes in other datacenters with + very little configuration. + + - `NearestN` `(int: 0)` - Specifies that the query will be forwarded to up + to `NearestN` other datacenters based on their estimated network round + trip time using [Network Coordinates](/docs/internals/coordinates) + from the WAN gossip pool. The median round trip time from the server + handling the query to the servers in the remote datacenter is used to + determine the priority. + + - `Datacenters` `(array: nil)` - Specifies a fixed list of remote + datacenters to forward the query to if there are no healthy nodes in the + local datacenter. Datacenters are queried in the order given in the + list. If this option is combined with `NearestN`, then the `NearestN` + queries will be performed first, followed by the list given by + `Datacenters`. A given datacenter will only be queried one time during a + failover, even if it is selected by both `NearestN` and is listed in + `Datacenters`. + + - `IgnoreCheckIDs` `(array: nil)` - Specifies a list of check IDs that + should be ignored when filtering unhealthy instances. This is mostly useful + in an emergency or as a temporary measure when a health check is found to be + unreliable. Being able to ignore it in centrally-defined queries can be + simpler than deregistering the check as an interim solution until the check + can be fixed. + + - `OnlyPassing` `(bool: false)` - Specifies the behavior of the query's health + check filtering. If this is set to false, the results will include nodes + with checks in the passing as well as the warning states. If this is set to + true, only nodes with checks in the passing state will be returned. + + - `Near` `(string: "")` - Specifies a node to sort near based on distance + sorting using [Network Coordinates](/docs/internals/coordinates). The + nearest instance to the specified node will be returned first, and subsequent + nodes in the response will be sorted in ascending order of estimated + round-trip times. If the node given does not exist, the nodes in the response + will be shuffled. If unspecified, the response will be shuffled by default. + + - `_agent` - Returns results nearest the agent servicing the request. + - `_ip` - Returns results nearest to the node associated with the source IP + where the query was executed from. For HTTP the source IP is the remote + peer's IP address or the value of the X-Forwarded-For header with the + header taking precedence. For DNS the source IP is the remote peer's IP + address or the value of the EDNS client IP with the EDNS client IP + taking precedence. + +* `Tags` `(array: nil)` - Specifies a list of service tags to filter + the query results. For a service to pass the tag filter it must have _all_ + of the required tags, and _none_ of the excluded tags (prefixed with `!`). + +* `NodeMeta` `(map: nil)` - Specifies a list of user-defined + key/value pairs that will be used for filtering the query results to nodes + with the given metadata values present. + +* `ServiceMeta` `(map: nil)` - Specifies a list of user-defined + key/value pairs that will be used for filtering the query results to services + with the given metadata values present. + +* `Connect` `(bool: false)` - If true, only [Connect-capable](/docs/connect) services + for the specified service name will be returned. This includes both + natively integrated services and proxies. For proxies, the proxy name + may not match `Service`, because the proxy destination will. Any + constrains beyond the service name such as `Near`, `Tags`, and `NodeMeta` + are applied to Connect-capable service. + +* `DNS` `(DNS: nil)` - Specifies DNS configuration + + - `TTL` `(string: "")` - Specifies the TTL duration when query results are + served over DNS. If this is specified, it will take precedence over any + Consul agent-specific configuration. + +### Sample Payload + +```json +{ + "Name": "my-query", + "Session": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Token": "", + "Service": { + "Service": "redis", + "Failover": { + "NearestN": 3, + "Datacenters": ["dc1", "dc2"] + }, + "Near": "node1", + "OnlyPassing": false, + "Tags": ["primary", "!experimental"], + "NodeMeta": { "instance_type": "m3.large" }, + "ServiceMeta": { "environment": "production" } + }, + "DNS": { + "TTL": "10s" + } +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request POST \ + --data @payload.json \ + http://127.0.0.1:8500/v1/query +``` + +### Sample Response + +```json +{ + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05" +} +``` + +## List Prepared Queries + +This endpoint returns a list of all prepared queries. + +| Method | Path | Produces | +| ------ | -------- | ------------------ | +| `GET` | `/query` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `query:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/query +``` + +### Sample Response + +```json +[ + { + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Name": "my-query", + "Session": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Token": "", + "Service": { + "Service": "redis", + "Failover": { + "NearestN": 3, + "Datacenters": ["dc1", "dc2"] + }, + "OnlyPassing": false, + "Tags": ["primary", "!experimental"], + "NodeMeta": { "instance_type": "m3.large" }, + "ServiceMeta": { "environment": "production" } + }, + "DNS": { + "TTL": "10s" + }, + "RaftIndex": { + "CreateIndex": 23, + "ModifyIndex": 42 + } + } +] +``` + +### Update Prepared Query + +This endpoint updates an existing prepared query. If no query exists by the +given ID, an error is returned. + +| Method | Path | Produces | +| ------ | -------------- | ------------------ | +| `PUT` | `/query/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `query:write` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the query to update. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +The body is the same as is used to create a prepared query. Please see above for +more information. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/query/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +## Read Prepared Query + +This endpoint reads an existing prepared query. If no query exists by the +given ID, an error is returned. + +| Method | Path | Produces | +| ------ | -------------- | ------------------ | +| `GET` | `/query/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `query:read` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the query to read. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/query/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +### Sample Response + +The returned response is the same as the list of prepared queries above, only +with a single item present. + +## Delete Prepared Query + +This endpoint deletes an existing prepared query. If no query exists by the +given ID, an error is returned. + +| Method | Path | Produces | +| -------- | -------------- | ------------------ | +| `DELETE` | `/query/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------- | +| `NO` | `none` | `none` | `query:write` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the query to delete. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + --request DELETE \ + http://127.0.0.1:8500/v1/query/8f246b77-f3e1-ff88-5b48-8ec93abf3e05 +``` + +## Execute Prepared Query + +This endpoint executes an existing prepared query. If no query exists by the +given ID, an error is returned. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `GET` | `/query/:uuid/execute` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------------- | +| `NO` | `none` | `simple` | `depends`1 | + +1 If an ACL Token was bound to the query when it was defined then it will +be used when executing the request. Otherwise, the client's supplied ACL Token will +be used. + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the query to execute. + This is required and is specified as part of the URL path. This can also be + the name of an existing prepared query, or a name that matches a prefix name + for a prepared query template. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `near` `(string: "")` - Specifies to sort the resulting list in ascending + order based on the estimated round trip time from that node. Passing + `?near=_agent` will use the agent's node for the sort. Passing `?near=_ip` + will use the source IP of the request or the value of the X-Forwarded-For + header to lookup the node to use for the sort. If this is not present, + the default behavior will shuffle the nodes randomly each time the query is + executed. + +- `limit` `(int: 0)` - Limit the size of the list to the given number of nodes. + This is applied after any sorting or shuffling. + +- `connect` `(bool: false)` - If true, limit results to nodes that are + Connect-capable only. This can also be specified directly on the template + itself to force all executions of a query to be Connect-only. See the + template documentation for more information. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/query/8f246b77-f3e1-ff88-5b48-8ec93abf3e05/execute?near=_agent +``` + +### Sample Response + +```json +{ + "Service": "redis", + "Nodes": [ + { + "Node": { + "ID": "40e4a748-2192-161a-0510-9bf59fe950b5", + "Node": "foobar", + "Address": "10.1.10.12", + "Datacenter": "dc1", + "TaggedAddresses": { + "lan": "10.1.10.12", + "wan": "10.1.10.12" + }, + "NodeMeta": { "instance_type": "m3.large" } + }, + "Service": { + "ID": "redis", + "Service": "redis", + "Tags": null, + "Meta": { "redis_version": "4.0" }, + "Port": 8000 + }, + "Checks": [ + { + "Node": "foobar", + "CheckID": "service:redis", + "Name": "Service 'redis' check", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "redis", + "ServiceName": "redis" + }, + { + "Node": "foobar", + "CheckID": "serfHealth", + "Name": "Serf Health Status", + "Status": "passing", + "Notes": "", + "Output": "", + "ServiceID": "", + "ServiceName": "" + } + ], + "DNS": { + "TTL": "10s" + }, + "Datacenter": "dc3", + "Failovers": 2 + } + ] +} +``` + +- `Nodes` contains the list of healthy nodes providing the given service, as + specified by the constraints of the prepared query. + +- `Service` has the service name that the query was selecting. This is useful + for context in case an empty list of nodes is returned. + +- `DNS` has information used when serving the results over DNS. This is just a + copy of the structure given when the prepared query was created. + +- `Datacenter` has the datacenter that ultimately provided the list of nodes and + `Failovers` has the number of remote datacenters that were queried while + executing the query. This provides some insight into where the data came from. + This will be zero during non-failover operations where there were healthy + nodes found in the local datacenter. + +## Explain Prepared Query + +This endpoint generates a fully-rendered query for a given name, post +interpolation. + +| Method | Path | Produces | +| ------ | ---------------------- | ------------------ | +| `GET` | `/query/:uuid/explain` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `query:read` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the query to explain. + This is required and is specified as part of the URL path. This can also be + the name of an existing prepared query, or a name that matches a prefix name + for a prepared query template. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/query/8f246b77-f3e1-ff88-5b48-8ec93abf3e05/explain +``` + +### Sample Response + +```json +{ + "Query": { + "ID": "8f246b77-f3e1-ff88-5b48-8ec93abf3e05", + "Name": "my-query", + "Session": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Token": "", + "Name": "geo-db", + "Template": { + "Type": "name_prefix_match", + "Regexp": "^geo-db-(.*?)-([^\\-]+?)$" + }, + "Service": { + "Service": "mysql-customer", + "Failover": { + "NearestN": 3, + "Datacenters": ["dc1", "dc2"] + }, + "OnlyPassing": true, + "Tags": ["primary"], + "Meta": { "mysql_version": "5.7.20" }, + "NodeMeta": { "instance_type": "m3.large" } + } + } +} +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/session.mdx consul-1.8.7+dfsg1/website/pages/api-docs/session.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/session.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/session.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,384 @@ +--- +layout: api +page_title: Session - HTTP API +sidebar_title: Sessions +description: 'The /session endpoints create, destroy, and query sessions in Consul.' +--- + +# Session HTTP Endpoint + +The `/session` endpoints create, destroy, and query sessions in Consul. + +## Create Session + +This endpoint initializes a new session. Sessions must be associated with a +node and may be associated with any number of checks. + +| Method | Path | Produces | +| ------ | ----------------- | ------------------ | +| `PUT` | `/session/create` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `session:write` | + +### Parameters + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter. Added in Consul 1.7.0. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. Using this across datacenters is not recommended. + +- `LockDelay` `(string: "15s")` - Specifies the duration for the lock delay. This + must be greater than `0`. + +- `Node` `(string: "")` - Specifies the name of the node. This must refer + to a node that is already registered. + +- `Name` `(string: "")` - Specifies a human-readable name for the session. + +- `Checks` `(array: nil)` - specifies a list of associated health + check IDs (commonly `CheckID` in API responses). It is highly recommended that, + if you override this list, you include the default `serfHealth`. + +- `Behavior` `(string: "release")` - Controls the behavior to take when a + session is invalidated. Valid values are: + + - `release` - causes any locks that are held to be released + - `delete` - causes any locks that are held to be deleted + +- `TTL` `(string: "")` - Specifies the duration of a session (between 10s and + 86400s). If provided, the session is invalidated if it is not renewed before + the TTL expires. The lowest practical TTL should be used to keep the number of + managed sessions low. When locks are forcibly expired, such as when following + the [leader election pattern](https://learn.hashicorp.com/tutorials/consul/application-leader-elections) in an application, + sessions may not be reaped for up to double this TTL, so long TTL + values (> 1 hour) should be avoided. Valid time units include "s", "m" and "h". + +### Sample Payload + +```json +{ + "LockDelay": "15s", + "Name": "my-service-lock", + "Node": "foobar", + "Checks": ["a", "b", "c"], + "Behavior": "release", + "TTL": "30s" +} +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/session/create +``` + +### Sample Response + +```javascript +{ + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e" +} +``` + +- `ID` - the ID of the created session + +## Delete Session + +This endpoint destroys the session with the given name. If the session UUID is +malformed, an error is returned. If the session UUID does not exist or already +expired, a 200 is still returned (the operation is idempotent). + +| Method | Path | Produces | +| :----- | :----------------------- | ------------------ | +| `PUT` | `/session/destroy/:uuid` | `application/json` | + +Even though the Content-Type is `application/json`, the response is +either a literal `true` or `false`, indicating of whether the destroy was +successful. + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `session:write` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the session to destroy. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. Using this across datacenters is not recommended. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/session/destroy/adf4238a-882b-9ddc-4a9d-5b6758e4159e +``` + +### Sample Response + +```json +true +``` + +## Read Session + +This endpoint returns the requested session information. + +| Method | Path | Produces | +| :----- | :-------------------- | ------------------ | +| `GET` | `/session/info/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `YES` | `all` | `none` | `session:read` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the session to read. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. Using this across datacenters is not recommended. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/session/info/adf4238a-882b-9ddc-4a9d-5b6758e4159e +``` + +### Sample Response + +```json +[ + { + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Name": "test-session", + "Node": "raja-laptop-02", + "Checks": ["serfHealth"], + "LockDelay": 1.5e10, + "Behavior": "release", + "TTL": "30s", + "CreateIndex": 1086449, + "ModifyIndex": 1086449 + } +] +``` + +If the session does not exist, an empty JSON list `[]` is returned. + +## List Sessions for Node + +This endpoint returns the active sessions for a given node. + +| Method | Path | Produces | +| :----- | :-------------------- | ------------------ | +| `GET` | `/session/node/:node` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `YES` | `all` | `none` | `session:read` | + +### Parameters + +- `node` `(string: )` - Specifies the name or ID of the node to query. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. Using this across datacenters is not recommended. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter + The namespace may be specified as '\*' and then results will be returned for all namespaces. + Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/session/node/node-abcd1234 +``` + +### Sample Response + +```json +[ + { + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Name": "test-session", + "Node": "raja-laptop-02", + "Checks": ["serfHealth"], + "LockDelay": 1.5e10, + "Behavior": "release", + "TTL": "30s", + "CreateIndex": 1086449, + "ModifyIndex": 1086449 + } +] +``` + +## List Sessions + +This endpoint returns the list of active sessions. + +| Method | Path | Produces | +| :----- | :-------------- | ------------------ | +| `GET` | `/session/list` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | -------------- | +| `YES` | `all` | `none` | `session:read` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. Using this across datacenters is not recommended. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the URL as a query parameter. + The namespace may be specified as '\*' and then results will be returned for all namespaces. + Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + http://127.0.0.1:8500/v1/session/list +``` + +### Sample Response + +```json +[ + { + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Name": "test-session", + "Node": "raja-laptop-02", + "Checks": ["serfHealth"], + "LockDelay": 1.5e10, + "Behavior": "release", + "TTL": "30s", + "CreateIndex": 1086449, + "ModifyIndex": 1086449 + } +] +``` + +## Renew Session + +This endpoint renews the given session. This is used with sessions that have a +TTL, and it extends the expiration by the TTL. + +| Method | Path | Produces | +| :----- | :--------------------- | ------------------ | +| `PUT` | `/session/renew/:uuid` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | --------------- | +| `NO` | `none` | `none` | `session:write` | + +### Parameters + +- `uuid` `(string: )` - Specifies the UUID of the session to renew. + This is required and is specified as part of the URL path. + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. Using this across datacenters is not recommended. + +- `ns` `(string: "")` - Specifies the namespace to query. + If not provided, the namespace will be inferred from the request's ACL token, + or will default to the `default` namespace. This is specified as part of the + URL as a query parameter. Added in Consul 1.7.0. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + http://127.0.0.1:8500/v1/session/renew/adf4238a-882b-9ddc-4a9d-5b6758e4159e +``` + +### Sample Response + +```json +[ + { + "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e", + "Name": "test-session", + "Node": "raja-laptop-02", + "Checks": ["serfHealth"], + "LockDelay": 1.5e10, + "Behavior": "release", + "TTL": "15s", + "CreateIndex": 1086449, + "ModifyIndex": 1086449 + } +] +``` + +-> **Note:** Consul may return a TTL value higher than the one specified during session creation. This indicates the server is under high load and is requesting clients renew less often. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/snapshot.mdx consul-1.8.7+dfsg1/website/pages/api-docs/snapshot.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/snapshot.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/snapshot.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,114 @@ +--- +layout: api +page_title: Snapshot - HTTP API +sidebar_title: Snapshots +description: |- + The /snapshot endpoints save and restore Consul's server state for disaster + recovery. +--- + +# Snapshot HTTP Endpoint + +The `/snapshot` endpoints save and restore the state of the Consul +servers for disaster recovery. Snapshots include all state managed by Consul's +Raft [consensus protocol](/docs/internals/consensus). + +## Generate Snapshot + +This endpoint generates and returns an atomic, point-in-time snapshot of the +Consul server state. + +Snapshots are exposed as gzipped tar archives which internally contain the Raft +metadata required to restore, as well as a binary serialized version of the +Consul server state. The contents are covered internally by SHA-256 hashes. +These hashes are verified during snapshot restore operations. The structure of +the archive is internal to Consul and not intended to be used other than for +restore operations. The archives are not designed to be modified before a +restore. + +| Method | Path | Produces | +| :----- | :---------- | ------------------------ | +| `GET` | `/snapshot` | `200 application/x-gzip` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `default,stale` | `none` | `management` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default + to the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `stale` `(bool: false)` - Specifies that any follower may reply. By default + requests are forwarded to the leader. Followers may be faster to respond, but + may have stale data. To support bounding the acceptable staleness of + snapshots, responses provide the `X-Consul-LastContact` header containing the + time in milliseconds that a server was last contacted by the leader node. The + `X-Consul-KnownLeader` header also indicates if there is a known leader. These + can be used by clients to gauge the staleness of a snapshot and take + appropriate action. The stale mode is particularly useful for taking a + snapshot of a cluster in a failed state with no current leader. + +### Sample Request + +With a custom datacenter: + +```shell-session +$ curl http://127.0.0.1:8500/v1/snapshot?dc=my-datacenter -o snapshot.tgz +``` + +The above example results in a tarball named `snapshot.tgz` in the current working directory. + +In addition to the Consul standard stale-related headers, the `X-Consul-Index` +header will contain the index at which the snapshot took place. + +## Restore Snapshot + +This endpoint restores a point-in-time snapshot of the Consul server state. + +Restores involve a potentially dangerous low-level Raft operation that is not +designed to handle server failures during a restore. This operation is primarily +intended to be used when recovering from a disaster, restoring into a fresh +cluster of Consul servers. + +The body of the request should be a snapshot archive returned from a previous +call to the `GET` method. + +| Method | Path | Produces | +| :----- | :---------- | ----------------------------- | +| `PUT` | `/snapshot` | `200 text/plain (empty body)` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `management` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default + to the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data-binary @snapshot.tgz \ + http://127.0.0.1:8500/v1/snapshot +``` + +~> Some tools default to www/encoded uploads. Consul expects the snapshot to be +in pure binary form. diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/status.mdx consul-1.8.7+dfsg1/website/pages/api-docs/status.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/status.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/status.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,90 @@ +--- +layout: api +page_title: Status - HTTP API +sidebar_title: Status +description: |- + The /status endpoints return information about the status of the Consul + cluster. This information is generally very low level and not often useful for + clients. +--- + +# Status HTTP API + +The `/status` endpoints return information about the status of the Consul +cluster. This information is generally very low level and not often useful for +clients. + +## Get Raft Leader + +This endpoint returns the Raft leader for the datacenter in which the agent is +running. + +| Method | Path | Produces | +| :----- | :--------------- | ------------------ | +| `GET` | `/status/leader` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl http://127.0.0.1:8500/v1/status/leader +``` + +### Sample Response + +```json +"10.1.10.12:8300" +``` + +## List Raft Peers + +This endpoint retrieves the Raft peers for the datacenter in which the the agent +is running. This list of peers is strongly consistent and can be useful in +determining when a given server has successfully joined the cluster. + +| Method | Path | Produces | +| :----- | :-------------- | ------------------ | +| `GET` | `/status/peers` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ------------ | +| `NO` | `none` | `none` | `none` | + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default to + the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +### Sample Request + +```shell-session +$ curl http://127.0.0.1:8500/v1/status/peers +``` + +### Sample Response + +```json +["10.1.10.12:8300", "10.1.10.11:8300", "10.1.10.10:8300"] +``` diff -Nru consul-1.7.4+dfsg1/website/pages/api-docs/txn.mdx consul-1.8.7+dfsg1/website/pages/api-docs/txn.mdx --- consul-1.7.4+dfsg1/website/pages/api-docs/txn.mdx 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/api-docs/txn.mdx 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,316 @@ +--- +layout: api +page_title: Transaction - HTTP API +sidebar_title: Transactions +description: >- + The /txn endpoint manages multiple operations in Consul, including catalog + updates and fetches of multiple KV entries inside a single, atomic + transaction. +--- + +# Transactions HTTP API + +The `/txn` endpoint manages multiple operations in Consul, including catalog +updates and fetches of multiple KV entries inside a single, atomic +transaction. + +## Create Transaction + +This endpoint permits submitting a list of operations to apply to Consul +inside of a transaction. If any operation fails, the transaction is rolled back +and none of the changes are applied. + +If the transaction does not contain any write operations then it will be +fast-pathed internally to an endpoint that works like other reads, except that +blocking queries are not currently supported. In this mode, you may supply the +`?stale` or `?consistent` query parameters with the request to control +consistency. To support bounding the acceptable staleness of data, read-only +transaction responses provide the `X-Consul-LastContact` header containing the +time in milliseconds that a server was last contacted by the leader node. The +`X-Consul-KnownLeader` header also indicates if there is a known leader. These +won't be present if the transaction contains any write operations, and any +consistency query parameters will be ignored, since writes are always managed by +the leader via the Raft consensus protocol. + +| Method | Path | Produces | +| ------ | ------ | ------------------ | +| `PUT` | `/txn` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/features/blocking), +[consistency modes](/api/features/consistency), +[agent caching](/api/features/caching), and +[required ACLs](/api#authentication). + +| Blocking Queries | Consistency Modes | Agent Caching | ACL Required | +| ---------------- | ----------------- | ------------- | ---------------------------------------------------------------------------------------------- | +| `NO` | `all`1 | `none` | `key:read,key:write`
    `node:read,node:write`
    `service:read,service:write`2 | + +

    + 1 For read-only transactions +
    + 2 The ACL required depends on the operations in the transaction. +

    + +### Parameters + +- `dc` `(string: "")` - Specifies the datacenter to query. This will default + to the datacenter of the agent being queried. This is specified as part of the + URL as a query parameter. + +- `KV` operations have the following fields: + + - `Verb` `(string: )` - Specifies the type of operation to perform. + Please see the table below for available verbs. + + - `Key` `(string: )` - Specifies the full path of the entry. + + - `Value` `(string: "")` - Specifies a **base64-encoded** blob of data. Values + cannot be larger than 512kB. + + - `Flags` `(int: 0)` - Specifies an opaque unsigned integer that can be + attached to each entry. Clients can choose to use this however makes sense + for their application. + + - `Index` `(int: 0)` - Specifies an index. See the table below for more + information. + + - `Session` `(string: "")` - Specifies a session. See the table below for more + information. + + - `Namespace` `(string: "")` - Specifies the namespace to + create the KV data If not provided, the namespace will be inherited from the + request's ACL token or will default to the `default` namespace. Added in Consul 1.7.0. + +- `Node` operations have the following fields: + + - `Verb` `(string: )` - Specifies the type of operation to perform. + + - `Node` `(Node: )` - Specifies the node information to use + for the operation. See the [catalog endpoint](/api/catalog#parameters) for the fields in this object. Note the only the node can be specified here, not any services or checks - separate service or check operations must be used for those. + +- `Service` operations have the following fields: + + - `Verb` `(string: )` - Specifies the type of operation to perform. + + - `Node` `(string: )` = Specifies the name of the node to use for + this service operation. + + - `Service` `(Service: )` - Specifies the service instance information to use + for the operation. See the [catalog endpoint](/api/catalog#parameters) for the fields in this object. + +- `Check` operations have the following fields: + + - `Verb` `(string: )` - Specifies the type of operation to perform. + + - `Check` `(Service: )` - Specifies the check to use + for the operation. See the [catalog endpoint](/api/catalog#parameters) for the fields in this object. + + Please see the table below for available verbs. + +### Sample Payload + +The body of the request should be a list of operations to perform inside the +atomic transaction. Up to 64 operations may be present in a single transaction. + +```json +[ + { + "KV": { + "Verb": "", + "Key": "", + "Value": "", + "Flags": , + "Index": , + "Session": "" + } + }, + { + "Node": { + "Verb": "set", + "Node": { + "ID": "67539c9d-b948-ba67-edd4-d07a676d6673", + "Node": "bar", + "Address": "192.168.0.1", + "Datacenter": "dc1", + "Meta": { + "instance_type": "m2.large" + } + } + } + }, + { + "Service": { + "Verb": "delete", + "Node": "foo", + "Service": { + "ID": "db1" + } + } + }, + { + "Check": { + "Verb": "cas", + "Check": { + "Node": "bar", + "CheckID": "service:web1", + "Name": "Web HTTP Check", + "Status": "critical", + "ServiceID": "web1", + "ServiceName": "web", + "ServiceTags": null, + "Definition": { + "HTTP": "http://localhost:8080", + "Interval": "10s" + }, + "ModifyIndex": 22 + } + } + } +] +``` + +### Sample Request + +```shell-session +$ curl \ + --request PUT \ + --data @payload.json \ + http://127.0.0.1:8500/v1/txn +``` + +### Sample Response + +If the transaction can be processed, a status code of 200 will be returned if it +was successfully applied, or a status code of 409 will be returned if it was +rolled back. If either of these status codes are returned, the response will +look like this: + +```json +{ + "Results": [ + { + "KV": { + "LockIndex": , + "Key": "", + "Flags": , + "Value": "", + "CreateIndex": , + "ModifyIndex": + } + }, + { + "Node": { + "ID": "67539c9d-b948-ba67-edd4-d07a676d6673", + "Node": "bar", + "Address": "192.168.0.1", + "Datacenter": "dc1", + "TaggedAddresses": null, + "Meta": { + "instance_type": "m2.large" + }, + "CreateIndex": 32, + "ModifyIndex": 32 + } + }, + { + "Check": { + "Node": "bar", + "CheckID": "service:web1", + "Name": "Web HTTP Check", + "Status": "critical", + "Notes": "", + "Output": "", + "ServiceID": "web1", + "ServiceName": "web", + "ServiceTags": null, + "Definition": { + "HTTP": "http://localhost:8080", + "Interval": "10s" + }, + "CreateIndex": 22, + "ModifyIndex": 35 + } + } + ], + "Errors": [ + { + "OpIndex": , + "What": "" + }, + ... + ] +} +``` + +- `Results` has entries for some operations if the transaction was successful. + To save space, the `Value` for KV results will be `null` for any `Verb` other than "get" or + "get-tree". Like the `/v1/kv/` endpoint, `Value` will be Base64-encoded + if it is present. Also, no result entries will be added for verbs that delete + keys. + +- `Errors` has entries describing which operations failed if the transaction was + rolled back. The `OpIndex` gives the index of the failed operation in the + transaction, and `What` is a string with an error message about why that + operation failed. + +### Tables of Operations + +#### KV Operations + +The following tables summarize the available verbs and the fields that apply to +those operations ("X" means a field is required and "O" means it is optional): + +| Verb | Operation | Key | Value | Flags | Index | Session | +| ------------------ | --------------------------------------- | :-: | :---: | :---: | :---: | :-----: | +| `set` | Sets the `Key` to the given `Value` | `x` | `x` | `o` | | | +| `cas` | Sets, but with CAS semantics | `x` | `x` | `o` | `x` | | +| `lock` | Lock with the given `Session` | `x` | `x` | `o` | | `x` | +| `unlock` | Unlock with the given `Session` | `x` | `x` | `o` | | `x` | +| `get` | Get the key, fails if it does not exist | `x` | | | | | +| `get-tree` | Gets all keys with the prefix | `x` | | | | | +| `check-index` | Fail if modify index != index | `x` | | | `x` | | +| `check-session` | Fail if not locked by session | `x` | | | | `x` | +| `check-not-exists` | Fail if key exists | `x` | | | | | +| `delete` | Delete the key | `x` | | | | | +| `delete-tree` | Delete all keys with a prefix | `x` | | | | | +| `delete-cas` | Delete, but with CAS semantics | `x` | | | `x` | | + +#### Node Operations + +Node operations act on an individual node and require either a Node ID or name, giving precedence +to the ID if both are set. Delete operations will not return a result on success. + +| Verb | Operation | +| ------------ | -------------------------------------------------------- | +| `set` | Sets the node to the given state | +| `cas` | Sets, but with CAS semantics using the given ModifyIndex | +| `get` | Get the node, fails if it does not exist | +| `delete` | Delete the node | +| `delete-cas` | Delete, but with CAS semantics | + +#### Service Operations + +Service operations act on an individual service instance on the given node name. Both a node name +and valid service name are required. Delete operations will not return a result on success. + +| Verb | Operation | +| ------------ | -------------------------------------------------------- | +| `set` | Sets the service to the given state | +| `cas` | Sets, but with CAS semantics using the given ModifyIndex | +| `get` | Get the service, fails if it does not exist | +| `delete` | Delete the service | +| `delete-cas` | Delete, but with CAS semantics | + +#### Check Operations + +Check operations act on an individual health check instance on the given node name. Both a node name +and valid check ID are required. Delete operations will not return a result on success. + +| Verb | Operation | +| ------------ | -------------------------------------------------------- | +| `set` | Sets the health check to the given state | +| `cas` | Sets, but with CAS semantics using the given ModifyIndex | +| `get` | Get the check, fails if it does not exist | +| `delete` | Delete the check | +| `delete-cas` | Delete, but with CAS semantics | diff -Nru consul-1.7.4+dfsg1/website/pages/_app.js consul-1.8.7+dfsg1/website/pages/_app.js --- consul-1.7.4+dfsg1/website/pages/_app.js 1970-01-01 00:00:00.000000000 +0000 +++ consul-1.8.7+dfsg1/website/pages/_app.js 2020-12-10 21:46:52.000000000 +0000 @@ -0,0 +1,83 @@ +import './style.css' +import '@hashicorp/nextjs-scripts/lib/nprogress/style.css' + +import Router from 'next/router' +import Head from 'next/head' +import NProgress from '@hashicorp/nextjs-scripts/lib/nprogress' +import { ErrorBoundary } from '@hashicorp/nextjs-scripts/lib/bugsnag' +import createConsentManager from '@hashicorp/nextjs-scripts/lib/consent-manager' +import useAnchorLinkAnalytics from '@hashicorp/nextjs-scripts/lib/anchor-link-analytics' +import HashiHead from '@hashicorp/react-head' +import HashiStackMenu from '@hashicorp/react-hashi-stack-menu' +import AlertBanner from '@hashicorp/react-alert-banner' +import Footer from '../components/footer' +import ProductSubnav from '../components/subnav' +import alertBannerData, { ALERT_BANNER_ACTIVE } from '../data/alert-banner' +import Error from './_error' + +NProgress({ Router }) +const { ConsentManager, openConsentManager } = createConsentManager({ + preset: 'oss', +}) + +function App({ Component, pageProps }) { + useAnchorLinkAnalytics() + return ( + + + + + {ALERT_BANNER_ACTIVE && ( + + )} + + +
    + +
    +